ZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3QvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3QvcG9tLnhtbAppbmRleCBiZGVjNTdlLi42YjNkZjFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9wb20ueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+CiAgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotCTxwYXJlbnQ+CisgICAgPHBhcmVudD4KICAgICAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC50ZXN0cy5hZG1pbmd1aTwvZ3JvdXBJZD4KICAgICAgICAgPGFydGlmYWN0SWQ+YWRtaW5ndWk8L2FydGlmYWN0SWQ+CiAgICAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgpAQCAtMzAsNyArMzAsNyBAQAogICAgIDxwYWNrYWdpbmc+amFyPC9wYWNrYWdpbmc+CiAgICAgPG5hbWU+QWRtaW4gQ29uc29sZSBBdXRvIFRlc3RzPC9uYW1lPgogICAgIDxkZXNjcmlwdGlvbj5UaGlzIG1vZHVsZSBjb250YWlucyB0aGUgZGV2IHRlc3RzIGZvciB0aGUgYWRtaW4gY29uc29sZTwvZGVzY3JpcHRpb24+Ci0JCisKICAgICA8ZGVwZW5kZW5jaWVzPgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5zZWxlbml1bWhxLnNlbGVuaXVtPC9ncm91cElkPgpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPC9kZXBlbmRlbmNpZXM+Ci0JCisKICAgICA8YnVpbGQ+CiAgICAgICAgIDxkZWZhdWx0R29hbD5pbnN0YWxsPC9kZWZhdWx0R29hbD4KICAgICAgICAgPHBsdWdpbnM+CkBAIC04Nyw1ICs4Nyw1IEBACiAgICAgICAgICAgICA8L3BsdWdpbj4KICAgICAgICAgPC9wbHVnaW5zPgogICAgIDwvYnVpbGQ+Ci0JCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0FkbWluT2JqZWN0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvQWRtaW5PYmplY3RUZXN0LmphdmEKaW5kZXggMDY4Y2NiOC4uZjI5ZTA3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvQWRtaW5PYmplY3RUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvQWRtaW5PYmplY3RUZXN0LmphdmEKQEAgLTQ2LDEwICs0NiwxMCBAQAogCiAgICAgICAgIHNldEZpZWxkVmFsdWUoImZvcm06cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDpuYW1lTmV3Om5hbWUiLCByZXNOYW1lKTsKICAgICAgICAgc2V0RmllbGRWYWx1ZSgiZm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnRTZWN0aW9uVGV4dEZpZWxkOmRlc2NyaXB0aW9uUHJvcDpkZXNjQWRhcHRvciIsIGRlc2NyaXB0aW9uKTsKLSAgICAgICAgCisKICAgICAgICAgaW50IGVtcHR5Q291bnQgPSBnZXRUYWJsZVJvd0NvdW50QnlWYWx1ZSgiZm9ybTpiYXNpY1RhYmxlIiwgIiIsICJjb2wzOmNvbDFTdCIsIGZhbHNlKTsKICAgICAgICAgaW50IGNvdW50ID0gYWRkVGFibGVSb3coImZvcm06YmFzaWNUYWJsZSIsICJmb3JtOmJhc2ljVGFibGU6dG9wQWN0aW9uc0dyb3VwMTphZGRCdXR0b24iKTsKLSAgICAgICAgCisKICAgICAgICAgc2xlZXAoNTAwKTsKICAgICAgICAgc2V0RmllbGRWYWx1ZSgiZm9ybTpiYXNpY1RhYmxlOnJvd0dyb3VwMTowOmNvbDI6Y29sMVN0IiwgInByb3BlcnR5IiArIGdlbmVyYXRlUmFuZG9tU3RyaW5nKCkpOwogICAgICAgICBzbGVlcCg1MDApOwpAQCAtNzEsMTIgKzcxLDEyIEBACiAgICAgICAgIFN0cmluZyBzZWxlY3RJZCA9IHByZWZpeCArICJjb2wwOnNlbGVjdCI7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbihzZWxlY3RJZCk7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnJlc291cmNlc1RhYmxlOnRvcEFjdGlvbnNHcm91cDE6YnV0dG9uMyIpOwotICAgICAgICAKKwogICAgICAgICAvL3Rlc3QgZW5hYmxlIGJ1dHRvbgogICAgICAgICB3YWl0Zm9yQnRuRGlzYWJsZSgicHJvcGVydHlGb3JtOnJlc291cmNlc1RhYmxlOnRvcEFjdGlvbnNHcm91cDE6YnV0dG9uMiIpOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oc2VsZWN0SWQpOwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjIiKTsKLSAgICAgICAgCisKICAgICAgICAgd2FpdGZvckJ0bkRpc2FibGUoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjEiKTsKICAgICAgICAgZGVsZXRlUm93KCJwcm9wZXJ0eUZvcm06cmVzb3VyY2VzVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpidXR0b24xIiwgInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZSIsIHJlc05hbWUpOwogICAgIH0KQEAgLTEyOSw3ICsxMjksNyBAQAogICAgICAgICBTdHJpbmcgc2VsZWN0SWQgPSBwcmVmaXggKyAiY29sMDpzZWxlY3QiOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oc2VsZWN0SWQpOwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjMiKTsKLSAgICAgICAgCisKICAgICAgICAgLy90ZXN0IGVuYWJsZSBidXR0b24KICAgICAgICAgd2FpdGZvckJ0bkRpc2FibGUoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjIiKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKHNlbGVjdElkKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0FkbWluU2VydmljZVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0FkbWluU2VydmljZVRlc3QuamF2YQppbmRleCA1NTU1MTBiLi42NDFlYWUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9BZG1pblNlcnZpY2VUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvQWRtaW5TZXJ2aWNlVGVzdC5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CiAvKioKLSAqIAorICoKICAqIEBhdXRob3IgSmVyZW15IEx2CiAgKgogICovCkBAIC00MiwxMyArNDIsMTMgQEAKICAgICAgICAgc2V0RmllbGRWYWx1ZSgiZm9ybTE6YmFzaWNUYWJsZTpyb3dHcm91cDE6MDpjb2w0OmNvbDFTdCIsICJkZXNjcmlwdGlvbiIpOwogICAgICAgICBjbGlja0FuZFdhaXQoImZvcm0xOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpzYXZlQnV0dG9uIik7CiAgICAgICAgIGFzc2VydFRydWUoaXNFbGVtZW50U2F2ZVN1Y2Nlc3NmdWwoImxhYmVsX3N1bjQiLCJOZXcgdmFsdWVzIHN1Y2Nlc3NmdWxseSBzYXZlZC4iKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGdvdG9EYXNQYWdlKCk7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgidHJlZUZvcm06dHJlZTpjb25maWd1cmF0aW9uczpzZXJ2ZXItY29uZmlnOmFkbWluU2VydmljZTphZG1pblNlcnZpY2VfbGluayIpOwogICAgICAgICBhc3NlcnRUcnVlKGRyaXZlci5maW5kRWxlbWVudChCeS5pZCgiZm9ybTE6cHJvcGVydHlTaGVldDpwcm9wZXJ0eVNoZWV0U2VjdGlvbjpTZWN1cml0eVByb3A6U2VjdXJpdHkiKSkuaXNTZWxlY3RlZCgpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKGFkZHJlc3MsIGdldFZhbHVlKCJmb3JtMTpwcm9wZXJ0eVNoZWV0OnByb3BlcnR5U2hlZXRTZWN0aW9uOkFkZHJlc3NQcm9wOkFkZHJlc3MiLCAidmFsdWUiKSk7CiAgICAgICAgIGFzc2VydFRhYmxlUm93Q291bnQoImZvcm0xOmJhc2ljVGFibGUiLCBjb3VudCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vZGVsZXRlIHRoZSBwcm9wZXJ0eSB1c2VkIHRvIHRlc3QKICAgICAgICAgZ290b0Rhc1BhZ2UoKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJ0cmVlRm9ybTp0cmVlOmNvbmZpZ3VyYXRpb25zOnNlcnZlci1jb25maWc6YWRtaW5TZXJ2aWNlOmFkbWluU2VydmljZV9saW5rIik7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgICAgIGFzc2VydFRydWUoaXNFbGVtZW50U2F2ZVN1Y2Nlc3NmdWwoImxhYmVsX3N1bjQiLCJOZXcgdmFsdWVzIHN1Y2Nlc3NmdWxseSBzYXZlZC4iKSk7CiAgICAgfQogCi0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RTc2woKSB7CiAgICAgICAgIGdvdG9EYXNQYWdlKCk7CkBAIC05Nyw1ICs5Nyw1IEBACiAgICAgICAgIGFzc2VydEVxdWFscyhrZXlzdG9yZSwgZ2V0VmFsdWUoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnR5U2hlZXRTZWN0aW9uOmtleXN0b3JlOmtleXN0b3JlIiwgInZhbHVlIikpOwogICAgICAgICBhc3NlcnRFcXVhbHMobWF4Q2VydExlbmd0aCwgZ2V0VmFsdWUoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnR5U2hlZXRTZWN0aW9uOm1heENlcnRMZW5ndGg6bWF4Q2VydExlbmd0aCIsICJ2YWx1ZSIpKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0FwcFNjb3BlZFJlc291cmNlc1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0FwcFNjb3BlZFJlc291cmNlc1Rlc3QuamF2YQppbmRleCA3MTllNmNkLi4wNjgyZDMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9BcHBTY29wZWRSZXNvdXJjZXNUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvQXBwU2NvcGVkUmVzb3VyY2VzVGVzdC5qYXZhCkBAIC0zOCwxMSArMzgsMTEgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTUVOVF9BUFBMSUNBVElPTlMgPSAidHJlZUZvcm06dHJlZTphcHBsaWNhdGlvbnM6YXBwbGljYXRpb25zX2xpbmsiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNRU5UX0FQUExJQ0FUSU9OX1JFU09VUkNFU19UQUIgPSAicHJvcGVydHlGb3JtOmFwcEdlbmVyYWxUYWJzOnJlc291cmNlc1RhYiI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1FTlRfQVBQX1JFU09VUkNFU19UQUJMRSA9ICJwcm9wZXJ0eUZvcm06YXBwU2NvcGVkUmVzb3VyY2VzIjsKLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEFwcFNjb3BlZFJlc0FwcCgpIHsKICAgICAgICAgZmluYWwgU3RyaW5nIGFwcGxpY2F0aW9uTmFtZSA9IGdlbmVyYXRlUmFuZG9tU3RyaW5nKCk7Ci0gICAgICAgIGRlcGxveUFwcChhcHBsaWNhdGlvbk5hbWUpOyAKKyAgICAgICAgZGVwbG95QXBwKGFwcGxpY2F0aW9uTmFtZSk7CiAgICAgICAgIHVuZGVwbG95QXBwKGFwcGxpY2F0aW9uTmFtZSk7CiAgICAgfQogCkBAIC01Nyw3ICs1Nyw3IEBACiAKICAgICAgICAgdGVzdEpEQkNSZXNvdXJjZShhcHBsaWNhdGlvbk5hbWUsICJqZGJjUmVzIiwgImFwcCIpOwogICAgICAgICB0ZXN0SkRCQ1Jlc291cmNlKGFwcGxpY2F0aW9uTmFtZSwgImpkYmNSZXMiLCAibW9kdWxlIik7Ci0gICAgICAgIAorCiAgICAgICAgIHVuZGVwbG95QXBwKGFwcGxpY2F0aW9uTmFtZSk7CiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdW5kZXBsb3lBcHAoYXBwbGljYXRpb25OYW1lKTsKQEAgLTE0OSwxNCArMTQ5LDE0IEBACiAgICAgICAgICAgICB1bmRlcGxveUFwcChhcHBsaWNhdGlvbk5hbWUpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVwbG95QXBwKFN0cmluZyBhcHBsaWNhdGlvbk5hbWUpIHsKLSAgICAgICAgCisKICAgICAgICAgU3RhbmRhbG9uZVRlc3Qgc3RhbmRhbG9uZVRlc3QgPSBuZXcgU3RhbmRhbG9uZVRlc3QoKTsKICAgICAgICAgQ2x1c3RlclRlc3QgY2x1c3RlclRlc3QgPSBuZXcgQ2x1c3RlclRlc3QoKTsKICAgICAgICAgc3RhbmRhbG9uZVRlc3QuZGVsZXRlQWxsU3RhbmRhbG9uZUluc3RhbmNlcygpOwogICAgICAgICBjbHVzdGVyVGVzdC5kZWxldGVBbGxDbHVzdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGNsaWNrQW5kV2FpdCgidHJlZUZvcm06dHJlZTphcHBsaWNhdGlvbnM6YXBwbGljYXRpb25zX2xpbmsiKTsKICAgICAgICAgc2xlZXAoMTAwMCk7CiAgICAgICAgIGludCBpbml0Q291bnQgPSBnZXRUYWJsZVJvd0NvdW50KEVMRU1FTlRfREVQTE9ZX1RBQkxFKTsKQEAgLTE3NSwxMiArMTc1LDEyIEBACiAgICAgICAgIGRyaXZlci5maW5kRWxlbWVudChCeS5pZCgiZm9ybTpzaGVldDE6c2VjdGlvbjE6cHJvcDE6dXBsb2FkUmRCdG46dXBsb2FkUmRCdG5fbGFiZWwiKSk7CiAgICAgICAgIEZpbGUgd2FyID0gbmV3IEZpbGUoInNyYy90ZXN0L3Jlc291cmNlcy9KYXZhRUVBcHAuZWFyIik7CiAgICAgICAgIGRyaXZlci5maW5kRWxlbWVudChCeS5pZChFTEVNRU5UX0ZJTEVfRklFTEQpKS5zZW5kS2V5cyh3YXIuZ2V0QWJzb2x1dGVGaWxlKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGFzc2VydEVxdWFscygiSmF2YUVFQXBwIiwgZ2V0VmFsdWUoRUxFTUVOVF9FQVJBUFBfTkFNRSwgInZhbHVlIikpOwogCiAgICAgICAgIHNldEZpZWxkVmFsdWUoRUxFTUVOVF9FQVJBUFBfTkFNRSwgYXBwbGljYXRpb25OYW1lKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KEVMRU1FTlRfVVBMT0FEX0JVVFRPTik7Ci0gICAgICAgIAorCiAgICAgICAgIC8vYWRkIHNvbWUgc2xlZXAgdGltZSBoZXJlIHRvIHdhaXQgZm9yIHRoZSB3ZWJkcml2ZXIgZWxlbWVudCBsb2NhdGVkCiAgICAgICAgIHNsZWVwKDEwMDAwKTsKICAgICAgICAgZ290b0Rhc1BhZ2UoKTsKQEAgLTIxMyw3ICsyMTMsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIGdvVG9BcHBsaWNhdGlvblJlc291cmNlc1RhYihTdHJpbmcgYXBwTmFtZSkgewogICAgICAgICBjbGlja0FuZFdhaXQoRUxFTUVOVF9BUFBMSUNBVElPTlMpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgcHJlZml4ID0gZ2V0VGFibGVSb3dCeVZhbHVlKEVMRU1FTlRfREVQTE9ZX1RBQkxFLCBhcHBOYW1lLCAiY29sMSIpOwogICAgICAgICBTdHJpbmcgY2xpY2tJZCA9IHByZWZpeCArICJjb2wxOmxpbmsiOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oY2xpY2tJZCk7CkBAIC0yNjIsNyArMjYyLDcgQEAKICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOnNhdmVCdXR0b24iKTsKICAgICAgICAgYXNzZXJ0VHJ1ZShpc0VsZW1lbnRTYXZlU3VjY2Vzc2Z1bCgibGFiZWxfc3VuNCIsIk5ldyB2YWx1ZXMgc3VjY2Vzc2Z1bGx5IHNhdmVkLiIpKTsKICAgICAgICAgYXNzZXJ0VGFibGVSb3dDb3VudCgicHJvcGVydHlGb3JtOmJhc2ljVGFibGUiLCBjb3VudCk7Ci0gICAgICAgIAorCiAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpjYW5jZWxCdXR0b24iKTsKICAgICB9CiAKQEAgLTI4Niw3ICsyODYsNyBAQAogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6c2F2ZUJ1dHRvbiIpOwogICAgICAgICBhc3NlcnRUcnVlKGlzRWxlbWVudFNhdmVTdWNjZXNzZnVsKCJsYWJlbF9zdW40IiwiTmV3IHZhbHVlcyBzdWNjZXNzZnVsbHkgc2F2ZWQuIikpOwogICAgICAgICBhc3NlcnRUYWJsZVJvd0NvdW50KCJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZSIsIGNvdW50KTsKLSAgICAgICAgCisKICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOmNhbmNlbEJ1dHRvbiIpOwogICAgIH0KIApAQCAtMzEwLDcgKzMxMCw3IEBACiAgICAgICAgIGNsaWNrQW5kV2FpdCgiZm9ybTE6cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOnNhdmVCdXR0b24iKTsKICAgICAgICAgYXNzZXJ0VHJ1ZShpc0VsZW1lbnRTYXZlU3VjY2Vzc2Z1bCgibGFiZWxfc3VuNCIsIk5ldyB2YWx1ZXMgc3VjY2Vzc2Z1bGx5IHNhdmVkLiIpKTsKICAgICAgICAgYXNzZXJ0VGFibGVSb3dDb3VudCgiZm9ybTE6YmFzaWNUYWJsZSIsIGNvdW50KTsKLSAgICAgICAgCisKICAgICAgICAgY2xpY2tBbmRXYWl0KCJmb3JtMTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6Y2FuY2VsQnV0dG9uIik7CiAgICAgfQogCkBAIC0zMzMsNyArMzMzLDcgQEAKICAgICAgICAgY2xpY2tBbmRXYWl0KCJmb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpzYXZlQnV0dG9uIik7CiAgICAgICAgIGFzc2VydFRydWUoaXNFbGVtZW50U2F2ZVN1Y2Nlc3NmdWwoImxhYmVsX3N1bjQiLCJOZXcgdmFsdWVzIHN1Y2Nlc3NmdWxseSBzYXZlZC4iKSk7CiAgICAgICAgIGFzc2VydFRhYmxlUm93Q291bnQoImZvcm06YmFzaWNUYWJsZSIsIGNvdW50KTsKLSAgICAgICAgCisKICAgICAgICAgY2xpY2tBbmRXYWl0KCJmb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpjYW5jZWxCdXR0b24iKTsKICAgICB9CiAKQEAgLTM0NywxNiArMzQ3LDE2IEBACiAgICAgICAgIHdhaXRGb3JFbGVtZW50UHJlc2VudCgiVHRsVHh0X3N1bjQiLCAiRWRpdCBKYXZhTWFpbCBTZXNzaW9uIik7CiAgICAgICAgIHNldEZpZWxkVmFsdWUoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnRTZWN0aW9uVGV4dEZpZWxkOmRlc2NQcm9wOmRlc2MiLCByZXNOYW1lKyIgZGVzY3JpcHRpb24iKTsKICAgICAgICAgaW50IGNvdW50ID0gYWRkVGFibGVSb3coInByb3BlcnR5Rm9ybTpiYXNpY1RhYmxlIiwgInByb3BlcnR5Rm9ybTpiYXNpY1RhYmxlOnRvcEFjdGlvbnNHcm91cDE6YWRkU2hhcmVkVGFibGVCdXR0b24iKTsKLSAgICAgICAgCisKICAgICAgICAgc2V0RmllbGRWYWx1ZSgicHJvcGVydHlGb3JtOmJhc2ljVGFibGU6cm93R3JvdXAxOjA6Y29sMjpjb2wxU3QiLCAicHJvcGVydHkiK2dlbmVyYXRlUmFuZG9tU3RyaW5nKCkpOwotICAgICAgICAKKwogICAgICAgICBzZXRGaWVsZFZhbHVlKCJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZTpyb3dHcm91cDE6MDpjb2wzOmNvbDFTdCIsICJ2YWx1ZSIpOwotICAgICAgICAKKwogICAgICAgICBzZXRGaWVsZFZhbHVlKCJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZTpyb3dHcm91cDE6MDpjb2w0OmNvbDFTdCIsICJkZXNjcmlwdGlvbiIpOwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6c2F2ZUJ1dHRvbiIpOwogICAgICAgICBhc3NlcnRUcnVlKGlzRWxlbWVudFNhdmVTdWNjZXNzZnVsKCJsYWJlbF9zdW40IiwiTmV3IHZhbHVlcyBzdWNjZXNzZnVsbHkgc2F2ZWQuIikpOwogICAgICAgICBhc3NlcnRUYWJsZVJvd0NvdW50KCJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZSIsIGNvdW50KTsKLSAgICAgICAgCisKICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOmNhbmNlbEJ1dHRvbiIpOwogICAgIH0KIApAQCAtNDAzLDcgKzQwMyw3IEBACiAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpzYXZlQnV0dG9uIik7CiAgICAgICAgIGFzc2VydFRydWUoaXNFbGVtZW50U2F2ZVN1Y2Nlc3NmdWwoImxhYmVsX3N1bjQiLCJOZXcgdmFsdWVzIHN1Y2Nlc3NmdWxseSBzYXZlZC4iKSk7CiAgICAgICAgIGFzc2VydFRhYmxlUm93Q291bnQoInByb3BlcnR5Rm9ybTpiYXNpY1RhYmxlIiwgY291bnQpOwotICAgICAgICAKKwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6Y2FuY2VsQnV0dG9uIik7CiAgICAgfQogCkBAIC00MjYsNyArNDI2LDcgQEAKICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOnNhdmVCdXR0b24iKTsKICAgICAgICAgYXNzZXJ0VHJ1ZShpc0VsZW1lbnRTYXZlU3VjY2Vzc2Z1bCgibGFiZWxfc3VuNCIsIk5ldyB2YWx1ZXMgc3VjY2Vzc2Z1bGx5IHNhdmVkLiIpKTsKICAgICAgICAgYXNzZXJ0VGFibGVSb3dDb3VudCgicHJvcGVydHlGb3JtOmJhc2ljVGFibGUiLCBjb3VudCk7Ci0gICAgICAgIAorCiAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpjYW5jZWxCdXR0b24iKTsKICAgICB9CiAKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogICAgICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOnNhdmVCdXR0b24iKTsKICAgICAgICAgICAgIGFzc2VydFRydWUoaXNFbGVtZW50U2F2ZVN1Y2Nlc3NmdWwoImxhYmVsX3N1bjQiLCJOZXcgdmFsdWVzIHN1Y2Nlc3NmdWxseSBzYXZlZC4iKSk7CiAgICAgICAgICAgICBhc3NlcnRUYWJsZVJvd0NvdW50KCJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZSIsIGNvdW50KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6Y2FuY2VsQnV0dG9uIik7CiAgICAgICAgIH0KICAgICB9CkBAIC00NzEsNyArNDcxLDcgQEAKICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOnNhdmVCdXR0b24iKTsKICAgICAgICAgYXNzZXJ0VHJ1ZShpc0VsZW1lbnRTYXZlU3VjY2Vzc2Z1bCgibGFiZWxfc3VuNCIsIk5ldyB2YWx1ZXMgc3VjY2Vzc2Z1bGx5IHNhdmVkLiIpKTsKICAgICAgICAgYXNzZXJ0VGFibGVSb3dDb3VudCgicHJvcGVydHlGb3JtOmJhc2ljVGFibGUiLCBjb3VudCk7Ci0gICAgICAgIAorCiAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpjYW5jZWxCdXR0b24iKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0FwcGxpY2F0aW9uVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvQXBwbGljYXRpb25UZXN0LmphdmEKaW5kZXggOTVlMmY0Mi4uZWY5MjNlYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvQXBwbGljYXRpb25UZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvQXBwbGljYXRpb25UZXN0LmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogCiAvKioKLSAqIAorICoKICAqIEBhdXRob3IgSmVyZW15IEx2CiAgKgogICovCkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgIGRyaXZlci5maW5kRWxlbWVudChCeS5pZCgiZm9ybTpzaGVldDE6c2VjdGlvbjE6cHJvcDE6dXBsb2FkUmRCdG46dXBsb2FkUmRCdG5fbGFiZWwiKSk7CiAgICAgICAgIEZpbGUgd2FyID0gbmV3IEZpbGUoInNyYy90ZXN0L3Jlc291cmNlcy90ZXN0LndhciIpOwogICAgICAgICBkcml2ZXIuZmluZEVsZW1lbnQoQnkuaWQoRUxFTUVOVF9GSUxFX0ZJRUxEKSkuc2VuZEtleXMod2FyLmdldEFic29sdXRlRmlsZSgpLnRvU3RyaW5nKCkpOwotICAgICAgICAKKwogICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3QiLCBnZXRWYWx1ZShFTEVNRU5UX0NPTlRFWFRfUk9PVCwgInZhbHVlIikpOwogICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3QiLCBnZXRWYWx1ZShFTEVNRU5UX0FQUF9OQU1FLCAidmFsdWUiKSk7CiAKQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgICAgc2xlZXAoMTAwMCk7CiAgICAgICAgIGludCBwb3N0Q291bnQgPSBnZXRUYWJsZVJvd0NvdW50KEVMRU1FTlRfREVQTE9ZX1RBQkxFKTsKICAgICAgICAgYXNzZXJ0VHJ1ZSAocHJlQ291bnQgPCBwb3N0Q291bnQpOwotICAgICAgICAKKwogICAgICAgICAvLyBEaXNhYmxlIGFwcGxpY2F0aW9uCiAgICAgICAgIFN0cmluZyBwcmVmaXggPSBnZXRUYWJsZVJvd0J5VmFsdWUoRUxFTUVOVF9ERVBMT1lfVEFCTEUsIGFwcGxpY2F0aW9uTmFtZSwgImNvbDEiKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKGFwcGxpY2F0aW9uTmFtZSwgZ2V0VGV4dChwcmVmaXggKyAiY29sMTpsaW5rIikpOwpAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbihjbGlja0lkKTsKICAgICAgICAgYXNzZXJ0VHJ1ZShkcml2ZXIuZmluZEVsZW1lbnQoQnkuaWQoRUxFTUVOVF9TVEFUVVMpKS5pc1NlbGVjdGVkKCkpOwogICAgICAgICBjbGlja0FuZFdhaXQoRUxFTUVOVF9DQU5DRUxfQlVUVE9OKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gVW5kZXBsb3kgYXBwbGljYXRpb24KICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKHNlbGVjdElkKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KEVMRU1FTlRfVU5ERVBMT1lfQlVUVE9OKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0F2YWlsYWJpbGl0eVNlcnZpY2VUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9BdmFpbGFiaWxpdHlTZXJ2aWNlVGVzdC5qYXZhCmluZGV4IGU4NThmYWIuLjgyMTVjOWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0F2YWlsYWJpbGl0eVNlcnZpY2VUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvQXZhaWxhYmlsaXR5U2VydmljZVRlc3QuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogaW1wb3J0IG9yZy5vcGVucWEuc2VsZW5pdW0uQnk7CiBpbXBvcnQgb3JnLm9wZW5xYS5zZWxlbml1bS5zdXBwb3J0LnVpLlNlbGVjdDsKIC8qKgotICogCisgKgogICogQGF1dGhvciBKZXJlbXkgTHYKICAqCiAgKi8KQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOnNhdmVCdXR0b24iKTsKICAgICAgICAgYXNzZXJ0VHJ1ZShpc0VsZW1lbnRTYXZlU3VjY2Vzc2Z1bCgibGFiZWxfc3VuNCIsIk5ldyB2YWx1ZXMgc3VjY2Vzc2Z1bGx5IHNhdmVkLiIpKTsKICAgICAgICAgYXNzZXJ0VGFibGVSb3dDb3VudCgicHJvcGVydHlGb3JtOmJhc2ljVGFibGUiLCBjb3VudCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vRGVsZXRlIHRoZSBwcm9wZXJ0eSB1c2VkIHRvIHRlc3QgYWZ0ZXIgdGhlIHRlc3QgZmluaXNoZWQKICAgICAgICAgZ290b0Rhc1BhZ2UoKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KElEX0FWQUlMQUJJTElUWV9TRVJWSUNFX1RSRUVfTk9ERSk7CkBAIC01OCw3ICs1OCw3IEBACiAgICAgICAgIGFzc2VydFRydWUoaXNFbGVtZW50U2F2ZVN1Y2Nlc3NmdWwoImxhYmVsX3N1bjQiLCJOZXcgdmFsdWVzIHN1Y2Nlc3NmdWxseSBzYXZlZC4iKSk7CiAgICAgfQogCi0vLyAgICAvL1RPRE86dGhlIHRlc3QgbmVlZCB0byBiZSBmaW5pc2hlZCBhZnRlciB0aGUgaXNzdWUgb2YgR0xBU1NGSVNILTIwODEwIGhhZCB0byBiZSByZXNvbHZlZCEgCisvLyAgICAvL1RPRE86dGhlIHRlc3QgbmVlZCB0byBiZSBmaW5pc2hlZCBhZnRlciB0aGUgaXNzdWUgb2YgR0xBU1NGSVNILTIwODEwIGhhZCB0byBiZSByZXNvbHZlZCEKIC8vICAgIEBUZXN0CiAvLyAgICBwdWJsaWMgdm9pZCB0ZXN0V2ViQ29udGFpbmVyQXZhaWxhYmlsaXR5KCkgewogLy8gICAgICAgIGdvdG9EYXNQYWdlKCk7CkBAIC05NCw3ICs5NCw3IEBACiAvLyAgICAgICAgc2V0RmllbGRWYWx1ZSgicHJvcGVydHlGb3JtOmJhc2ljVGFibGU6cm93R3JvdXAxOjA6Y29sNDpjb2wxU3QiLCBnZW5lcmF0ZVJhbmRvbVN0cmluZygpKTsKIC8vICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6c2F2ZUJ1dHRvbiIpOwogLy8gICAgICAgIGFzc2VydFRhYmxlUm93Q291bnQoInByb3BlcnR5Rm9ybTpiYXNpY1RhYmxlIiwgY291bnQpOwotLy8gICAgICAgIAorLy8KIC8vICAgIH0KIAogICAgIEBUZXN0CkBAIC0xMDcsMjEgKzEwNywyMSBAQAogCiAgICAgICAgIENsdXN0ZXJUZXN0IGN0ID0gbmV3IENsdXN0ZXJUZXN0KCk7CiAgICAgICAgIGN0LmNyZWF0ZUNsdXN0ZXIoY2x1c3Rlck5hbWUpOwotICAgICAgICAKKwogICAgICAgICBjbGlja0FuZFdhaXQoInRyZWVGb3JtOnRyZWU6Y29uZmlndXJhdGlvbnM6IiArIGNsdXN0ZXJOYW1lICsgIi1jb25maWc6YXZhaWxhYmlsaXR5U2VydmljZTphdmFpbGFiaWxpdHlTZXJ2aWNlX2xpbmsiKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06YXZhaWxhYmlsaXR5VGFiczpqbXNBdmFpbGFiaWxpdHlUYWIiKTsKIAogICAgICAgICBpZiAoIWRyaXZlci5maW5kRWxlbWVudChCeS5pZCgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6QXZhaWxhYmlsaXR5RW5hYmxlZFByb3A6YXZhaWwiKSkuaXNTZWxlY3RlZCgpKSB7CiAgICAgICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnRTZWN0aW9uVGV4dEZpZWxkOkF2YWlsYWJpbGl0eUVuYWJsZWRQcm9wOmF2YWlsOmF2YWlsX2xhYmVsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaXNFbGVtZW50UHJlc2VudCgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6Q29uZmlnU3RvcmVUeXBlUHJvcDpDb25maWdTdG9yZVR5cGUiKTsKICAgICAgICAgU2VsZWN0IHNlbGVjdCA9IG5ldyBTZWxlY3QoZHJpdmVyLmZpbmRFbGVtZW50KEJ5LmlkKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDpDb25maWdTdG9yZVR5cGVQcm9wOkNvbmZpZ1N0b3JlVHlwZSIpKSk7CiAgICAgICAgIHNlbGVjdC5zZWxlY3RCeVZpc2libGVUZXh0KCJtYXN0ZXJicm9rZXIiKTsKICAgICAgICAgaXNFbGVtZW50UHJlc2VudCgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6TWVzc2FnZVN0b3JlVHlwZVByb3A6TWVzc2FnZVN0b3JlVHlwZSIpOwogICAgICAgICBTZWxlY3Qgc2VsZWN0MSA9IG5ldyBTZWxlY3QoZHJpdmVyLmZpbmRFbGVtZW50KEJ5LmlkKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDpNZXNzYWdlU3RvcmVUeXBlUHJvcDpNZXNzYWdlU3RvcmVUeXBlIikpKTsKICAgICAgICAgc2VsZWN0MS5zZWxlY3RCeVZpc2libGVUZXh0KCJmaWxlIik7Ci0gICAgICAgIAorCiAgICAgICAgIHNldEZpZWxkVmFsdWUoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnRTZWN0aW9uVGV4dEZpZWxkOkRiVmVuZG9yUHJvcDpEYlZlbmRvciIsIERCX1ZFTkRPUik7CiAgICAgICAgIHNldEZpZWxkVmFsdWUoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnRTZWN0aW9uVGV4dEZpZWxkOkRiVXNlck5hbWVQcm9wOkRiVXNlck5hbWUiLCBEQl9VU0VSKTsKICAgICAgICAgc2V0RmllbGRWYWx1ZSgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6RGJQYXNzd29yZFByb3A6RGJQYXNzd29yZCIsIERCX1BBU1NXT1JEKTsKQEAgLTEzMyw3ICsxMzMsNyBAQAogICAgICAgICBzZXRGaWVsZFZhbHVlKCJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZTpyb3dHcm91cDE6MDpjb2wzOmNvbDFTdCIsIGdlbmVyYXRlUmFuZG9tU3RyaW5nKCkpOwogICAgICAgICBzbGVlcCg1MDApOwogICAgICAgICBzZXRGaWVsZFZhbHVlKCJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZTpyb3dHcm91cDE6MDpjb2w0OmNvbDFTdCIsIGdlbmVyYXRlUmFuZG9tU3RyaW5nKCkpOwotICAgICAgICAKKwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6c2F2ZUJ1dHRvbiIpOwogICAgICAgICBhc3NlcnRUcnVlKGlzRWxlbWVudFNhdmVTdWNjZXNzZnVsKCJsYWJlbF9zdW40IiwiTmV3IHZhbHVlcyBzdWNjZXNzZnVsbHkgc2F2ZWQuIikpOwogCkBAIC0xNDksNyArMTQ5LDcgQEAKICAgICAgICAgYXNzZXJ0RXF1YWxzKERCX1BBU1NXT1JELCBnZXRWYWx1ZSgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6RGJQYXNzd29yZFByb3A6RGJQYXNzd29yZCIsICJ2YWx1ZSIpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKERCX1VSTCwgZ2V0VmFsdWUoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnRTZWN0aW9uVGV4dEZpZWxkOkRiVXJsUHJvcDpEYlVybCIsICJ2YWx1ZSIpKTsKICAgICAgICAgYXNzZXJ0VGFibGVSb3dDb3VudCgicHJvcGVydHlGb3JtOmJhc2ljVGFibGUiLCBjb3VudCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vRGVsZXRlIHRoZSBwcm9wZXJ0eSB1c2VkIHRvIHRlc3QgYWZ0ZXIgdGhlIHRlc3QgZmluaXNoZWQKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZTpfdGFibGVBY3Rpb25zVG9wOl9zZWxlY3RNdWx0aXBsZUJ1dHRvbjpfc2VsZWN0TXVsdGlwbGVCdXR0b25faW1hZ2UiKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjEiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0Jhc2VTZWxlbml1bVRlc3RDbGFzcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvQmFzZVNlbGVuaXVtVGVzdENsYXNzLmphdmEKaW5kZXggNmE5ZjM5ZC4uOWI5NTk4OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvQmFzZVNlbGVuaXVtVGVzdENsYXNzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvQmFzZVNlbGVuaXVtVGVzdENsYXNzLmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKIAogaW1wb3J0IGNvbS50aG91Z2h0d29ya3Muc2VsZW5pdW0uU2VsZW5pdW07CiAvKioKLSAqIAorICoKICAqIEBhdXRob3IgSmVyZW15IEx2CiAgKgogICovCkBAIC01MiwxMCArNTIsMTAgQEAKICAgICBwcm90ZWN0ZWQgc3RhdGljIFNlbGVuaXVtIHNlbGVuaXVtOwogICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IFRJTUVPVVQgPSA5MDsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUSU1FT1VUX0NBTExCQUNLX0xPT1AgPSAxMDAwOwotICAgIAorCiAgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihCYXNlU2VsZW5pdW1UZXN0Q2xhc3MuY2xhc3MuZ2V0TmFtZSgpKTsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUUklHR0VSX0NPTU1PTl9UQVNLUyA9ICJPdGhlciBUYXNrcyI7Ci0gICAgCisKICAgICBAQmVmb3JlCiAgICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgZHJpdmVyID0gbmV3IEZpcmVmb3hEcml2ZXIoKTsKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgICAgIGZhaWwodmVyaWZpY2F0aW9uRXJyb3JTdHJpbmcpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgIC8vIFdyYXBwZXJzIGZvciBTZWxlbml1bSBBUEkKICAgICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC04MSwxMiArODEsMTIgQEAKICAgICAgICAgLy8gcHJlcGVuZCBhIGxldHRlciB0byBpbnN1cmUgdmFsaWQgSlNGIElELCB3aGljaCBpcyBjYXVzaW5nIGZhaWx1cmVzIGluIHNvbWUgYXJlYXMKICAgICAgICAgcmV0dXJuICJhIiArIG5ldyBCaWdJbnRlZ2VyKDEzMCwgcmFuZG9tKS50b1N0cmluZygxNik7CiAgICAgfQotICAgIAorCiAgICAgcHJvdGVjdGVkIGludCBnZW5lcmF0ZVJhbmRvbU51bWJlcigpIHsKICAgICAgICAgUmFuZG9tIHIgPSBuZXcgUmFuZG9tKCk7CiAgICAgICAgIHJldHVybiBNYXRoLmFicyhyLm5leHRJbnQoKSkgKyAxOwogICAgIH0KLSAgICAKKwogICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGFibGVSb3dCeVZhbHVlKFN0cmluZyB0YWJsZUlkLCBTdHJpbmcgdmFsdWUsIFN0cmluZyB2YWx1ZUNvbElkKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgcm93ID0gMDsKQEAgLTEwMyw3ICsxMDMsNyBAQAogICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRUYWJsZVJvd0J5VmFsKFN0cmluZyB0YWJsZUlkLCBTdHJpbmcgdmFsdWUsIFN0cmluZyB2YWx1ZUNvbElkKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgcm93ID0gMDsKQEAgLTEyMCw3ICsxMjAsNyBAQAogICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgdGV4dCBvZiBhbiBlbGVtZW50LgogICAgICAqIEBwYXJhbSBlbGVtCkBAIC0xMjksNyArMTI5LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRleHQoU3RyaW5nIGVsZW0pIHsKICAgICAgICAgcmV0dXJuIGRyaXZlci5maW5kRWxlbWVudChCeS5pZChlbGVtKSkuZ2V0VGV4dCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHZhbHVlIG9mIGFuIGVsZW1lbnQuCiAgICAgICogQHBhcmFtIGVsZW0KQEAgLTEzOCwxNCArMTM4LDE0IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRWYWx1ZShTdHJpbmcgZWxlbSwgU3RyaW5nIGF0dHJpYnV0ZSkgewogICAgICAgICByZXR1cm4gZHJpdmVyLmZpbmRFbGVtZW50KEJ5LmlkKGVsZW0pKS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzbGVlcChpbnQgbWlsbGkpewotICAgIAl0cnkgewotCQkJVGhyZWFkLnNsZWVwKG1pbGxpKTsKLQkJfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQl9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBUaHJlYWQuc2xlZXAobWlsbGkpOworICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUeXBlcyB0aGUgc3BlY2lmaWVkIHRleHQgaW50byB0aGUgcmVxdWVzdGVkIGVsZW1lbnQKICAgICAgKiBAcGFyYW0gZWxlbQpAQCAtMTU1LDE5ICsxNTUsMTkgQEAKICAgICAgICAgZHJpdmVyLmZpbmRFbGVtZW50KEJ5LmlkKGVsZW0pKS5jbGVhcigpOwogICAgICAgICBkcml2ZXIuZmluZEVsZW1lbnQoQnkuaWQoZWxlbSkpLnNlbmRLZXlzKHRleHQpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNsaWNrQnlJZEFjdGlvbihTdHJpbmcgaWROYW1lKXsKICAgICAgICAgZHJpdmVyLmZpbmRFbGVtZW50KEJ5LmlkKGlkTmFtZSkpLmNsaWNrKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgY2xlYXJCeUlkQWN0aW9uKFN0cmluZyBpZE5hbWUpewogICAgICAgICBkcml2ZXIuZmluZEVsZW1lbnQoQnkuaWQoaWROYW1lKSkuY2xlYXIoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kS2V5c0J5SWRBY3Rpb24oU3RyaW5nIGlkTmFtZSwgU3RyaW5nIG5hbWUpewogICAgICAgICBkcml2ZXIuZmluZEVsZW1lbnQoQnkuaWQoaWROYW1lKSkuc2VuZEtleXMobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJvdGVjdGVkIGludCBhZGRUYWJsZVJvdyhTdHJpbmcgdGFibGVJZCwgU3RyaW5nIGJ1dHRvbklkKSB7CiAgICAgICAgIHJldHVybiBhZGRUYWJsZVJvdyh0YWJsZUlkLCBidXR0b25JZCwgIkFkZGl0aW9uYWwgUHJvcGVydGllcyIpOwogICAgIH0KQEAgLTE3NywxOCArMTc3LDE4IEBACiAgICAgICAgIGNsaWNrQW5kV2FpdChidXR0b25JZCk7CiAgICAgICAgIHJldHVybiArK2NvdW50OwogICAgIH0KLSAgICAKKwogICAgIHByb3RlY3RlZCBpbnQgZ2V0VGFibGVSb3dDb3VudChTdHJpbmcgaWQpIHsKICAgICAgICAgU3RyaW5nIHRleHQgPSBnZXRUZXh0KGlkKTsKICAgICAgICAgaW50IGNvdW50ID0gSW50ZWdlci5wYXJzZUludCh0ZXh0LnN1YnN0cmluZyh0ZXh0LmluZGV4T2YoIigiKSArIDEsIHRleHQuaW5kZXhPZigiKSIpKSk7CiAgICAgICAgIHJldHVybiBjb3VudDsKICAgICB9Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgdm9pZCBjbGlja0FuZFdhaXQoU3RyaW5nIGlkKSB7CiAgICAgICAgIGluc3VyZUVsZW1lbnRJc1Zpc2libGUoaWQpOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oaWQpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBpbnN1cmVFbGVtZW50SXNWaXNpYmxlIChmaW5hbCBTdHJpbmcgaWQpIHsKICAgICAgICAgaWYgKCFpZC5jb250YWlucygidHJlZUZvcm06dHJlZSIpKSB7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yMTMsMTEgKzIxMywxMSBAQAogICAgICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKGdyYW5kUGFyZW50SWQgKyAiOiIgKyBub2RlSWQgKyAiX3R1cm5lciIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJvdGVjdGVkIHZvaWQgYXNzZXJ0VGFibGVSb3dDb3VudChTdHJpbmcgdGFibGVJZCwgaW50IGNvdW50KSB7CiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoY291bnQsIGdldFRhYmxlUm93Q291bnQodGFibGVJZCkpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHdhaXRGb3JBbGVydFByb2Nlc3MoU3RyaW5nIGNsYXNzTmFtZSl7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB3aGlsZSh0cnVlKXsKQEAgLTIzMSw3ICsyMzEsNyBAQAogICAgICAgICB9IGNhdGNoIChTdGFsZUVsZW1lbnRSZWZlcmVuY2VFeGNlcHRpb24gc2VyZSkgewogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjbG9zZUFsZXJ0QW5kR2V0SXRzVGV4dCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEFsZXJ0IGFsZXJ0ID0gZHJpdmVyLnN3aXRjaFRvKCkuYWxlcnQoKTsKQEAgLTI0NiwyNSArMjQ2LDI1IEBACiAgICAgICAgICAgICBhY2NlcHROZXh0QWxlcnQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgaXNFbGVtZW50UHJlc2VudChTdHJpbmcgaWROYW1lKXsKICAgICAgICAgd2hpbGUoIWRyaXZlci5maW5kRWxlbWVudChCeS5pZChpZE5hbWUpKS5pc0Rpc3BsYXllZCgpKXsKICAgICAgICAgICAgIHNsZWVwKDUwMCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpc0NoZWNrYm94U2VsZWN0ZWQoU3RyaW5nIGNoZWNrYm94KXsKICAgICAgICAgd2hpbGUoZHJpdmVyLmZpbmRFbGVtZW50KEJ5LmlkKGNoZWNrYm94KSkuaXNTZWxlY3RlZCgpKXsKICAgICAgICAgICAgIHNsZWVwKDUwMCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpc0NsYXNzUHJlc2VudChTdHJpbmcgY2xhc3NOYW1lKXsKICAgICAgICAgd2hpbGUoIWRyaXZlci5maW5kRWxlbWVudChCeS5jbGFzc05hbWUoY2xhc3NOYW1lKSkuaXNEaXNwbGF5ZWQoKSl7CiAgICAgICAgICAgICBzbGVlcCg1MDApOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVsZXRlUm93KFN0cmluZyBkZWxCdG4sU3RyaW5nIHRhYmxlSWQsIFN0cmluZyBOYW1lKSB7CiAgICAgICAgIFN0cmluZyBjbGlja0lkID0gZ2V0VGFibGVSb3dCeVZhbHVlKHRhYmxlSWQsIE5hbWUsICJjb2wxIikrImNvbDA6c2VsZWN0IjsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKGNsaWNrSWQpOwpAQCAtMjcyLDE5ICsyNzIsMTkgQEAKICAgICAgICAgY2xvc2VBbGVydEFuZEdldEl0c1RleHQoKTsKICAgICAgICAgd2FpdEZvckFsZXJ0UHJvY2VzcygibW9kYWxCb2R5Iik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgd2FpdGZvckJ0bkRpc2FibGUoU3RyaW5nIGJ0bklkKXsKICAgICAgICAgd2hpbGUgKGRyaXZlci5maW5kRWxlbWVudChCeS5pZChidG5JZCkpLmlzRW5hYmxlZCgpKXsKICAgICAgICAgICAgIHNsZWVwKDUwMCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB3YWl0Rm9yQnV0dG9uRW5hYmxlZChTdHJpbmcgYnRuSWQpewogICAgICAgICB3aGlsZSAoIWRyaXZlci5maW5kRWxlbWVudChCeS5pZChidG5JZCkpLmlzRW5hYmxlZCgpKXsKICAgICAgICAgICAgIHNsZWVwKDUwMCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBpc1RleHRQcmVzZW50KFN0cmluZyBwcmVmaXgsIFN0cmluZyBuYW1lLCBTdHJpbmcgdGFibGVJZCl7CiAgICAgICAgIGlmIChnZXRUYWJsZVJvd0NvdW50KHRhYmxlSWQpID09IDApIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI5OCwxMSArMjk4LDExIEBACiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgaW50IGdldFRhYmxlUm93Q291bnRCeVZhbHVlKFN0cmluZyB0YWJsZUlkLCBTdHJpbmcgdmFsdWUsIFN0cmluZyB2YWx1ZUNvbElkKSB7CiAgICAgICAgIHJldHVybiBnZXRUYWJsZVJvd0NvdW50QnlWYWx1ZSh0YWJsZUlkLCB2YWx1ZSwgdmFsdWVDb2xJZCwgdHJ1ZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJvdGVjdGVkIGludCBnZXRUYWJsZVJvd0NvdW50QnlWYWx1ZShTdHJpbmcgdGFibGVJZCwgU3RyaW5nIHZhbHVlLCBTdHJpbmcgdmFsdWVDb2xJZCwgQm9vbGVhbiBpc0xhYmVsKSB7CiAgICAgICAgIGludCB0YWJsZUNvdW50ID0gZ2V0VGFibGVSb3dDb3VudCh0YWJsZUlkKTsKICAgICAgICAgaW50IHNlbGVjdGVkQ291bnQgPSAwOwpAQCAtMzI0LDIyICszMjQsMjIgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc2VsZWN0ZWRDb3VudDsKICAgICB9Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgaW50IGdlbmVyYXRlUmFuZG9tTnVtYmVyKGludCBtYXgpIHsKICAgICAgICAgUmFuZG9tIHIgPSBuZXcgUmFuZG9tKCk7CiAgICAgICAgIHJldHVybiBNYXRoLmFicyhyLm5leHRJbnQobWF4IC0gMSkpICsgMTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBnb3RvRGFzUGFnZSgpIHsKICAgICAgICAgZHJpdmVyLmdldChiYXNlVXJsICsgImNvbW1vbi9pbmRleC5qc2YiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB3YWl0Rm9yRWxlbWVudFByZXNlbnQoU3RyaW5nIGNsYXNzTmFtZSwgU3RyaW5nIHZhbHVlKSB7CiAgICAgICAgIHdoaWxlKCFkcml2ZXIuZmluZEVsZW1lbnQoQnkuY2xhc3NOYW1lKGNsYXNzTmFtZSkpLmdldFRleHQoKS5lcXVhbHModmFsdWUpKXsKICAgICAgICAgICAgIHNsZWVwKDUwMCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGdldFRhYmxlUm93c0J5VmFsdWUoU3RyaW5nIHRhYmxlSWQsIFN0cmluZyB2YWx1ZSwgU3RyaW5nIHZhbHVlQ29sSWQpIHsKICAgICAgICAgTGlzdDxTdHJpbmc+IHJvd3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKICAgICAgICAgdHJ5IHsKQEAgLTM1Nyw3ICszNTcsNyBAQAogCiAgICAgICAgIHJldHVybiByb3dzOwogICAgIH0KLSAgICAKKwogICAgIHByb3RlY3RlZCB2b2lkIHNlbGVjdFRhYmxlUm93QnlWYWx1ZShTdHJpbmcgdGFibGVJZCwgU3RyaW5nIHZhbHVlLCBTdHJpbmcgc2VsZWN0Q29sSWQsIFN0cmluZyB2YWx1ZUNvbElkKSB7CiAgICAgICAgIExpc3Q8U3RyaW5nPiByb3dzID0gZ2V0VGFibGVSb3dzQnlWYWx1ZSh0YWJsZUlkLCB2YWx1ZSwgdmFsdWVDb2xJZCk7CiAgICAgICAgIGZvciAoU3RyaW5nIHJvdyA6IHJvd3MpIHsKQEAgLTM2OCw3ICszNjgsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNFbGVtZW50U2F2ZVN1Y2Nlc3NmdWwoU3RyaW5nIGNsYXNzTmFtZSwgU3RyaW5nIG1zZyl7CiAgICAgICAgIGlzQ2xhc3NQcmVzZW50KGNsYXNzTmFtZSk7CiAgICAgICAgIGlmIChkcml2ZXIuZmluZEVsZW1lbnQoQnkuY2xhc3NOYW1lKGNsYXNzTmFtZSkpLmdldFRleHQoKS5lcXVhbHMobXNnKSkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0NsdXN0ZXJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9DbHVzdGVyVGVzdC5qYXZhCmluZGV4IDlkZmU5NzIuLjdlMDIwYTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0NsdXN0ZXJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvQ2x1c3RlclRlc3QuamF2YQpAQCAtMzgsOCArMzgsOCBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0NMVVNURVJTX1NUT1BfQlROID0gInByb3BlcnR5Rm9ybTpjbHVzdGVyc1RhYmxlOnRvcEFjdGlvbnNHcm91cDE6YnV0dG9uMyI7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfSU5TVEFOQ0VTX1NUQVJUX0JUTiA9ICJwcm9wZXJ0eUZvcm06aW5zdGFuY2VzVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpidXR0b24yIjsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9JTlNUQU5DRVNfU1RPUF9CVE4gPSAicHJvcGVydHlGb3JtOmluc3RhbmNlc1RhYmxlOnRvcEFjdGlvbnNHcm91cDE6YnV0dG9uMyI7Ci0gICAgCi0gICAgCisKKwogICAgIC8vQ2FzZSAxOgogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdENsdXN0ZXJDcmVhdGlvbkFuZERlbGV0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgIH0gY2F0Y2ggKEVycm9yIGUpIHsKICAgICAgICAgICAgIHZlcmlmaWNhdGlvbkVycm9ycy5hcHBlbmQoZS50b1N0cmluZygpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvL3N0YXJ0IHRvIGRldGV0ZSB0aGUgY2x1c3RlciBhbmQgdmVyaWZ5IHdoZXRoZXIgdGhlIGNsdXN0ZXIgY2FuIGJlIGRlbGV0ZSBzdWNjZXNzZnVsbHkKICAgICAgICAgU3RyaW5nIG1zZyA9IGRlbGV0ZUNsdXN0ZXIoY2x1c3Rlck5hbWUpOwogICAgICAgICBhc3NlcnRUcnVlKG1zZy5tYXRjaGVzKCJeRGVsZXRlIHRoZSBzZWxlY3RlZCBjbHVzdGVycyBhbmQgdGhlaXIgaW5zdGFuY2VzW1xcc1xcU10kIikpOwpAQCAtNzksNyArNzksNyBAQAogICAgICAgICBzdG9wU3BlY2lmaWVkQ2x1c3RlcihJRF9DTFVTVEVSU19TVEFSVF9CVE4sIElEX0NMVVNURVJTX1RBQkxFLCBjbHVzdGVyTmFtZSk7CiAgICAgICAgIGFzc2VydFRydWUoZ2V0VGV4dChwcmVmaXggKyAiY29sMyIpLmVuZHNXaXRoKCJTdG9wcGVkIikpOwogCi0gICAgICAgIAorCiAgICAgICAgIGRlbGV0ZUNsdXN0ZXIoY2x1c3Rlck5hbWUpOwogICAgIH0KIApAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICBTdHJpbmcgaW5zdGFuY2VOYW1lMSA9ICJpbnN0YW5jZU5hbWUiICsgZ2VuZXJhdGVSYW5kb21TdHJpbmcoKTsKICAgICAgICAgU3RyaW5nIGluc3RhbmNlTmFtZTIgPSAiaW5zdGFuY2VOYW1lIiArIGdlbmVyYXRlUmFuZG9tU3RyaW5nKCk7CiAgICAgICAgIGNyZWF0ZUNsdXN0ZXIoY2x1c3Rlck5hbWUsIGluc3RhbmNlTmFtZTEsIGluc3RhbmNlTmFtZTIpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgY2xpY2tJZCA9IGdldFRhYmxlUm93QnlWYWx1ZShJRF9DTFVTVEVSU19UQUJMRSwgY2x1c3Rlck5hbWUsICJjb2wxIikrImNvbDE6bGluayI7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbihjbGlja0lkKTsKICAgICAgICAgLy9TdGFydCBjbHVzdGVyIGluc3RhbmNlCkBAIC05OSw3ICs5OSw3IEBACiAgICAgICAgIHN0YXJ0VGVzdE1pZ3JhdGVFamJUaW1lcnMoKTsKICAgICAgICAgLy9zdG9wIGNsdXN0ZXIgaW5zdGFuY2UKICAgICAgICAgc3RvcENsdXN0ZXJJbnN0YW5jZShpbnN0YW5jZU5hbWUxKTsKLSAgICAgICAgCisKICAgICAgICAgZGVsZXRlQ2x1c3RlcihjbHVzdGVyTmFtZSk7CiAgICAgfQogCkBAIC0xMTAsOSArMTEwLDkgQEAKICAgICAgICAgU3RyaW5nIGluc3RhbmNlTmFtZTEgPSAiaW5zdGFuY2VOYW1lIiArIGdlbmVyYXRlUmFuZG9tU3RyaW5nKCk7CiAgICAgICAgIFN0cmluZyBpbnN0YW5jZU5hbWUyID0gImluc3RhbmNlTmFtZSIgKyBnZW5lcmF0ZVJhbmRvbVN0cmluZygpOwogICAgICAgICBjcmVhdGVDbHVzdGVyKGNsdXN0ZXJOYW1lLCBpbnN0YW5jZU5hbWUxLCBpbnN0YW5jZU5hbWUyKTsKLSAgICAgICAgCisKICAgICAgICAgc3RhcnRWZXJpZnlDbHVzdGVyR2VuZXJhbEluZm9ybWF0aW9uUGFnZShjbHVzdGVyTmFtZSk7Ci0gICAgICAgIAorCiAgICAgICAgIGRlbGV0ZUNsdXN0ZXIoY2x1c3Rlck5hbWUpOwogICAgIH0KIApAQCAtMTIzLDM5ICsxMjMsMzkgQEAKICAgICAgICAgU3RyaW5nIGluc3RhbmNlTmFtZTEgPSAiaW5zdGFuY2VOYW1lIiArIGdlbmVyYXRlUmFuZG9tU3RyaW5nKCk7CiAgICAgICAgIFN0cmluZyBpbnN0YW5jZU5hbWUyID0gImluc3RhbmNlTmFtZSIgKyBnZW5lcmF0ZVJhbmRvbVN0cmluZygpOwogICAgICAgICBjcmVhdGVDbHVzdGVyKGNsdXN0ZXJOYW1lLCBpbnN0YW5jZU5hbWUxKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGNsaWNrSWQgPSBnZXRUYWJsZVJvd0J5VmFsdWUoSURfQ0xVU1RFUlNfVEFCTEUsIGNsdXN0ZXJOYW1lLCAiY29sMSIpKyJjb2wxOmxpbmsiOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oY2xpY2tJZCk7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbigicHJvcGVydHlGb3JtOmNsdXN0ZXJUYWJzOmNsdXN0ZXJJbnN0Iik7CiAgICAgICAgIC8vQ2hlY2sgd2hldGhlciB0aGUgaW5zdGFuY2UgaXMgYWxyZWFkeSBjcmVhdGVkCiAgICAgICAgIGFzc2VydEVxdWFscyhpbnN0YW5jZU5hbWUxLCBnZXRUZXh0KGdldFRhYmxlUm93QnlWYWx1ZShJRF9JTlNUQU5DRVNfVEFCTEUsIGluc3RhbmNlTmFtZTEsICJjb2wxIikgKyAiY29sMTpsaW5rIikpOwotICAgICAgICAKKwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oInByb3BlcnR5Rm9ybTppbnN0YW5jZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOm5ld0J1dHRvbiIpOwogICAgICAgICBzZXRGaWVsZFZhbHVlKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDpOYW1lVGV4dFByb3A6TmFtZVRleHQiLCBpbnN0YW5jZU5hbWUyKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOm5ld0J1dHRvbiIpOwotICAgICAgICAKKwogICAgICAgICAvL0NoZWNrIHdoZXRoZXIgdGhlIGluc3RhbmNlIGlzIGFscmVhZHkgY3JlYXRlZAogICAgICAgICBhc3NlcnRFcXVhbHMoaW5zdGFuY2VOYW1lMiwgZ2V0VGV4dChnZXRUYWJsZVJvd0J5VmFsdWUoSURfSU5TVEFOQ0VTX1RBQkxFLCBpbnN0YW5jZU5hbWUyLCAiY29sMSIpICsgImNvbDE6bGluayIpKTsKLSAgICAgICAgCisKICAgICAgICAgZGVsZXRlQ2x1c3RlcihjbHVzdGVyTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLy9DYXNlIDYKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RQcm9wZXJ0aWVzKCkgewogICAgICAgICBTdHJpbmcgY2x1c3Rlck5hbWUgPSAiY2x1c3Rlck5hbWUiICsgZ2VuZXJhdGVSYW5kb21TdHJpbmcoKTsKICAgICAgICAgU3RyaW5nIGluc3RhbmNlTmFtZTEgPSAiaW5zdGFuY2VOYW1lIiArIGdlbmVyYXRlUmFuZG9tU3RyaW5nKCk7CiAgICAgICAgIGNyZWF0ZUNsdXN0ZXIoY2x1c3Rlck5hbWUsIGluc3RhbmNlTmFtZTEpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgY2xpY2tJZCA9IGdldFRhYmxlUm93QnlWYWx1ZShJRF9DTFVTVEVSU19UQUJMRSwgY2x1c3Rlck5hbWUsICJjb2wxIikrImNvbDE6bGluayI7CiAgICAgICAgIGFzc2VydEVxdWFscyhjbHVzdGVyTmFtZSwgZ2V0VGV4dChjbGlja0lkKSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIEdvIHRvIHByb3BlcnRpZXMgdGFiCiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbihjbGlja0lkKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJwcm9wZXJ0eUZvcm06Y2x1c3RlclRhYnM6Y2x1c3RlclByb3BzIik7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbigicHJvcGVydHlGb3JtOmNsdXN0ZXJTeXNQcm9wc1BhZ2U6dG9wQnV0dG9uczpzYXZlQnV0dG9uIik7CiAgICAgICAgIGFzc2VydFRydWUoZHJpdmVyLmZpbmRFbGVtZW50KEJ5LmNsYXNzTmFtZSgibWlkZGxlX3N1bjQiKSkuZ2V0VGV4dCgpLmVxdWFscygiTmV3IHZhbHVlcyBzdWNjZXNzZnVsbHkgc2F2ZWQuIikpOwotICAgICAgICAKKwogICAgICAgICAvL0dvIHRvIGNsdXN0ZXIgcHJvcGVydGllcwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oInByb3BlcnR5Rm9ybTpjbHVzdGVyVGFiczpjbHVzdGVyUHJvcHM6Y2x1c3Rlckluc3RhbmNlUHJvcHMiKTsKICAgICAgICAgaW50IGNsdXN0ZXJQcm9wQ291bnQgPSBhZGRUYWJsZVJvdygicHJvcGVydHlGb3JtOmJhc2ljVGFibGUiLCAicHJvcGVydHlGb3JtOmJhc2ljVGFibGU6dG9wQWN0aW9uc0dyb3VwMTphZGRTaGFyZWRUYWJsZUJ1dHRvbiIpOwpAQCAtMTY0LDEzICsxNjQsMTMgQEAKICAgICAgICAgc2xlZXAoNTAwKTsKICAgICAgICAgc2V0RmllbGRWYWx1ZSgicHJvcGVydHlGb3JtOmJhc2ljVGFibGU6cm93R3JvdXAxOjA6Y29sMzpjb2wxU3QiLCAidmFsdWUiKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOnNhdmVCdXR0b24iKTsKLSAgICAgICAgCisKICAgICAgICAgLy92ZXJpZnkgdGhlIHByb3BlcnR5IGhhZCBiZWVuIHNhdmVkCiAgICAgICAgIGFzc2VydFRhYmxlUm93Q291bnQoInByb3BlcnR5Rm9ybTpiYXNpY1RhYmxlIiwgY2x1c3RlclByb3BDb3VudCk7Ci0gICAgICAgIAorCiAgICAgICAgIGRlbGV0ZUNsdXN0ZXIoY2x1c3Rlck5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8vQ2FzZSA3CiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Q2x1c3RlcldpdGhKbXNPcHRpb25zKCkgewpAQCAtMTgyLDEzICsxODIsMTMgQEAKICAgICAgICAgc2xlZXAoMTAwMCk7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbigicHJvcGVydHlGb3JtOmptc1R5cGVQcm9wZXJ0eVNoZWV0Omptc1R5cGVTZWN0aW9uOmptc1R5cGVQcm9wOm9wdExvY2FsIik7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbigicHJvcGVydHlGb3JtOmptc1Byb3BlcnR5U2hlZXQ6Y29uZmlndXJlSm1zQ2x1c3RlclNlY3Rpb246Q2x1c3RlclR5cGVQcm9wOm9wdENvbnZlbnRpb25hbCIpOwotICAgICAgICAKKwogICAgICAgICBTZWxlY3Qgc2VsZWN0ID0gbmV3IFNlbGVjdChkcml2ZXIuZmluZEVsZW1lbnQoQnkuaWQoInByb3BlcnR5Rm9ybTpqbXNQcm9wZXJ0eVNoZWV0OmNvbmZpZ3VyZUptc0NsdXN0ZXJTZWN0aW9uOkNvbmZpZ1N0b3JlVHlwZVByb3A6Y29uZmlnU3RvcmVUeXBlIikpKTsKICAgICAgICAgc2VsZWN0LnNlbGVjdEJ5VmlzaWJsZVRleHQoIk1hc3RlciBCcm9rZXIiKTsKLSAgICAgICAgCisKICAgICAgICAgU2VsZWN0IHNlbGVjdDEgPSBuZXcgU2VsZWN0KGRyaXZlci5maW5kRWxlbWVudChCeS5pZCgicHJvcGVydHlGb3JtOmptc1Byb3BlcnR5U2hlZXQ6Y29uZmlndXJlSm1zQ2x1c3RlclNlY3Rpb246TWVzc2FnZVN0b3JlVHlwZVByb3A6bWVzc2FnZVN0b3JlVHlwZSIpKSk7CiAgICAgICAgIHNlbGVjdDEuc2VsZWN0QnlWaXNpYmxlVGV4dCgiRmlsZSIpOwotICAgICAgICAKKwogICAgICAgICBzZXRGaWVsZFZhbHVlKCJwcm9wZXJ0eUZvcm06am1zUHJvcGVydHlTaGVldDpjb25maWd1cmVKbXNDbHVzdGVyU2VjdGlvbjpQcm9wZXJ0aWVzUHJvcDpwcm9wZXJ0aWVzIiwgInByb3AxPXZhbHVlMTpwcm9wMj12YWx1ZTJcXDp3aXRoXFw6Y29sb25zOnByb3AzPXZhbHVlMyIpOwogCiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbigicHJvcGVydHlGb3JtOmJhc2ljVGFibGU6dG9wQWN0aW9uc0dyb3VwMTphZGRTaGFyZWRUYWJsZUJ1dHRvbiIpOwpAQCAtMjAwLDE0ICsyMDAsMTQgQEAKICAgICAgICAgc2xlZXAoNTAwKTsKICAgICAgICAgc2VuZEtleXNCeUlkQWN0aW9uKCJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZTpyb3dHcm91cDE6MDpjb2wyOm5hbWUiLCBjbHVzdGVyTmFtZSArICJpbjIiKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOm5ld0J1dHRvbiIpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgY2xpY2tJZCA9IGdldFRhYmxlUm93QnlWYWx1ZShJRF9DTFVTVEVSU19UQUJMRSwgY2x1c3Rlck5hbWUsICJjb2wxIikrImNvbDE6bGluayI7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbihjbGlja0lkKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKGNsdXN0ZXJOYW1lLCBnZXRUZXh0KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDpjbHVzdGVyTmFtZVByb3A6Y2x1c3Rlck5hbWUiKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGRlbGV0ZUNsdXN0ZXIoY2x1c3Rlck5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8vQ2FzZSA4CiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Q2x1c3RlcldpdGhFbmhhbmNlZEptc09wdGlvbnMoKSB7CkBAIC0yMTksMTEgKzIxOSwxMSBAQAogICAgICAgICBzbGVlcCgxMDAwKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJwcm9wZXJ0eUZvcm06am1zVHlwZVByb3BlcnR5U2hlZXQ6am1zVHlwZVNlY3Rpb246am1zVHlwZVByb3A6b3B0TG9jYWwiKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJwcm9wZXJ0eUZvcm06am1zUHJvcGVydHlTaGVldDpjb25maWd1cmVKbXNDbHVzdGVyU2VjdGlvbjpDbHVzdGVyVHlwZVByb3A6b3B0RW5oYW5jZWQiKTsKLSAgICAgICAgCisKICAgICAgICAgc2V0RmllbGRWYWx1ZSgicHJvcGVydHlGb3JtOmptc1Byb3BlcnR5U2hlZXQ6Y29uZmlndXJlSm1zQ2x1c3RlclNlY3Rpb246RGJWZW5kb3JQcm9wOmRiVmVuZG9yIiwgIm15c3FsIik7CiAgICAgICAgIHNldEZpZWxkVmFsdWUoInByb3BlcnR5Rm9ybTpqbXNQcm9wZXJ0eVNoZWV0OmNvbmZpZ3VyZUptc0NsdXN0ZXJTZWN0aW9uOkRiVXNlclByb3A6ZGJVc2VyIiwgInJvb3QiKTsKICAgICAgICAgc2V0RmllbGRWYWx1ZSgicHJvcGVydHlGb3JtOmptc1Byb3BlcnR5U2hlZXQ6Y29uZmlndXJlSm1zQ2x1c3RlclNlY3Rpb246RGJVcmxQcm9wOmRiVXJsIiwgImpkYmM6bXlzcWw6Ly9ob3N0bmFtZTpwb3J0bm8vZGJuYW1lP3Bhc3N3b3JkPXh4eCIpOwotICAgICAgICAKKwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oInByb3BlcnR5Rm9ybTpiYXNpY1RhYmxlOnRvcEFjdGlvbnNHcm91cDE6YWRkU2hhcmVkVGFibGVCdXR0b24iKTsKICAgICAgICAgY2xlYXJCeUlkQWN0aW9uKCJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZTpyb3dHcm91cDE6MDpjb2wyOm5hbWUiKTsKICAgICAgICAgc2VuZEtleXNCeUlkQWN0aW9uKCJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZTpyb3dHcm91cDE6MDpjb2wyOm5hbWUiLCBjbHVzdGVyTmFtZSArICJpbjEiKTsKQEAgLTIzMywxNCArMjMzLDE0IEBACiAgICAgICAgIHNsZWVwKDUwMCk7CiAgICAgICAgIHNlbmRLZXlzQnlJZEFjdGlvbigicHJvcGVydHlGb3JtOmJhc2ljVGFibGU6cm93R3JvdXAxOjA6Y29sMjpuYW1lIiwgY2x1c3Rlck5hbWUgKyAiaW4yIik7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbigicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpuZXdCdXR0b24iKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGNsaWNrSWQgPSBnZXRUYWJsZVJvd0J5VmFsdWUoSURfQ0xVU1RFUlNfVEFCTEUsIGNsdXN0ZXJOYW1lLCAiY29sMSIpKyJjb2wxOmxpbmsiOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oY2xpY2tJZCk7CiAgICAgICAgIGFzc2VydEVxdWFscyhjbHVzdGVyTmFtZSwgZ2V0VGV4dCgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6Y2x1c3Rlck5hbWVQcm9wOmNsdXN0ZXJOYW1lIikpOwotICAgICAgICAKKwogICAgICAgICBkZWxldGVDbHVzdGVyKGNsdXN0ZXJOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvL0Nhc2UgOQogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdENsdXN0ZXJXaXRoQmFkSm1zT3B0aW9ucygpIHsKQEAgLTI1MiwxMyArMjUyLDEzIEBACiAgICAgICAgIHNsZWVwKDEwMDApOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oInByb3BlcnR5Rm9ybTpqbXNUeXBlUHJvcGVydHlTaGVldDpqbXNUeXBlU2VjdGlvbjpqbXNUeXBlUHJvcDpvcHRMb2NhbCIpOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oInByb3BlcnR5Rm9ybTpqbXNQcm9wZXJ0eVNoZWV0OmNvbmZpZ3VyZUptc0NsdXN0ZXJTZWN0aW9uOkNsdXN0ZXJUeXBlUHJvcDpvcHRDb252ZW50aW9uYWwiKTsKLSAgICAgICAgCisKICAgICAgICAgU2VsZWN0IHNlbGVjdCA9IG5ldyBTZWxlY3QoZHJpdmVyLmZpbmRFbGVtZW50KEJ5LmlkKCJwcm9wZXJ0eUZvcm06am1zUHJvcGVydHlTaGVldDpjb25maWd1cmVKbXNDbHVzdGVyU2VjdGlvbjpDb25maWdTdG9yZVR5cGVQcm9wOmNvbmZpZ1N0b3JlVHlwZSIpKSk7CiAgICAgICAgIHNlbGVjdC5zZWxlY3RCeVZpc2libGVUZXh0KCJNYXN0ZXIgQnJva2VyIik7Ci0gICAgICAgIAorCiAgICAgICAgIFNlbGVjdCBzZWxlY3QxID0gbmV3IFNlbGVjdChkcml2ZXIuZmluZEVsZW1lbnQoQnkuaWQoInByb3BlcnR5Rm9ybTpqbXNQcm9wZXJ0eVNoZWV0OmNvbmZpZ3VyZUptc0NsdXN0ZXJTZWN0aW9uOk1lc3NhZ2VTdG9yZVR5cGVQcm9wOm1lc3NhZ2VTdG9yZVR5cGUiKSkpOwogICAgICAgICBzZWxlY3QxLnNlbGVjdEJ5VmlzaWJsZVRleHQoIkpEQkMiKTsKLSAgICAgICAgCisKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmFkZFNoYXJlZFRhYmxlQnV0dG9uIik7CiAgICAgICAgIGNsZWFyQnlJZEFjdGlvbigicHJvcGVydHlGb3JtOmJhc2ljVGFibGU6cm93R3JvdXAxOjA6Y29sMjpuYW1lIik7CiAgICAgICAgIHNlbmRLZXlzQnlJZEFjdGlvbigicHJvcGVydHlGb3JtOmJhc2ljVGFibGU6cm93R3JvdXAxOjA6Y29sMjpuYW1lIiwgY2x1c3Rlck5hbWUgKyAiaW4xIik7CkBAIC0yNjgsNyArMjY4LDcgQEAKICAgICAgICAgc2xlZXAoNTAwKTsKICAgICAgICAgc2VuZEtleXNCeUlkQWN0aW9uKCJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZTpyb3dHcm91cDE6MDpjb2wyOm5hbWUiLCBjbHVzdGVyTmFtZSArICJpbjIiKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOm5ld0J1dHRvbiIpOwotICAgICAgICAKKwogICAgICAgICBhc3NlcnRUcnVlKChkcml2ZXIuZmluZEVsZW1lbnQoQnkuY2xhc3NOYW1lKCJoZWFkZXJfc3VuNCIpKS5nZXRUZXh0KCkuaW5kZXhPZigiIEFuIGVycm9yIG9jY3VycmVkIikgIT0gLTEpKTsKICAgICB9CiAgICAgLy9jYXNlIDEwCkBAIC0zMTcsNyArMzE3LDcgQEAKICAgICAgICAgU3RyaW5nIGNsdXN0ZXJOYW1lMSA9ICJjbHVzdGVyTmFtZSIgKyBnZW5lcmF0ZVJhbmRvbVN0cmluZygpOwogICAgICAgICBjcmVhdGVDbHVzdGVyKGNsdXN0ZXJOYW1lKTsKICAgICAgICAgY3JlYXRlQ2x1c3RlcihjbHVzdGVyTmFtZTEpOwotICAgICAgICAKKwogICAgICAgICAvL3N0YXJ0IHRvIGRlbGV0ZSBhbGwgY2x1c3RlcgogICAgICAgICBkZWxldGVBbGxDbHVzdGVyKCk7CiAKQEAgLTMyNyw3ICszMjcsNyBAQAogICAgICAgICAgICAgdmVyaWZpY2F0aW9uRXJyb3JzLmFwcGVuZChlLnRvU3RyaW5nKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogIENsdXN0ZXIgcmVsYXRlZCBtZXRob2RzCiAgICAgICovCkBAIC0zNDgsNyArMzQ4LDcgQEAKICAgICAgICAgYXNzZXJ0VHJ1ZShjbG9zZUFsZXJ0QW5kR2V0SXRzVGV4dCgpLm1hdGNoZXMoIl5TdG9wIHRoZSBzZWxlY3RlZCBjbHVzdGVyc1tcXHNcXFNdJCIpKTsKICAgICAgICAgd2FpdEZvckFsZXJ0UHJvY2VzcygibW9kYWxCb2R5Iik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgY3JlYXRlQ2x1c3RlcihTdHJpbmcgY2x1c3Rlck5hbWUpewogICAgICAgICBnb3RvQ2x1c3RlclBhZ2UoKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJwcm9wZXJ0eUZvcm06Y2x1c3RlcnNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOm5ld0J1dHRvbiIpOwpAQCAtMzU4LDcgKzM1OCw3IEBACiAgICAgICAgIFN0cmluZyBwcmVmaXggPSBnZXRUYWJsZVJvd0J5VmFsdWUoSURfQ0xVU1RFUlNfVEFCTEUsIGNsdXN0ZXJOYW1lLCAiY29sMSIpOwogICAgICAgICBhc3NlcnRFcXVhbHMoY2x1c3Rlck5hbWUsIGdldFRleHQocHJlZml4ICsgImNvbDE6bGluayIpKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBjcmVhdGVDbHVzdGVyKFN0cmluZyBjbHVzdGVyTmFtZSwgU3RyaW5nIGluc3RhbmNlTmFtZSl7CiAgICAgICAgIGdvdG9DbHVzdGVyUGFnZSgpOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oInByb3BlcnR5Rm9ybTpjbHVzdGVyc1RhYmxlOnRvcEFjdGlvbnNHcm91cDE6bmV3QnV0dG9uIik7CkBAIC0zNjksNyArMzY5LDcgQEAKICAgICAgICAgc2VuZEtleXNCeUlkQWN0aW9uKCJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZTpyb3dHcm91cDE6MDpjb2wyOm5hbWUiLCBpbnN0YW5jZU5hbWUpOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oInByb3BlcnR5Rm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6bmV3QnV0dG9uIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgY3JlYXRlQ2x1c3RlcihTdHJpbmcgY2x1c3Rlck5hbWUsIFN0cmluZyBpbnN0YW5jZU5hbWUsIFN0cmluZyBpbnN0YW5jZU5hbWUxKXsKICAgICAgICAgZ290b0NsdXN0ZXJQYWdlKCk7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbigicHJvcGVydHlGb3JtOmNsdXN0ZXJzVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpuZXdCdXR0b24iKTsKQEAgLTM4NSw3ICszODUsNyBAQAogICAgICAgICBzZW5kS2V5c0J5SWRBY3Rpb24oInByb3BlcnR5Rm9ybTpiYXNpY1RhYmxlOnJvd0dyb3VwMTowOmNvbDI6bmFtZSIsIGluc3RhbmNlTmFtZTEpOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oInByb3BlcnR5Rm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6bmV3QnV0dG9uIik7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgZGVsZXRlQ2x1c3RlcihTdHJpbmcgY2x1c3Rlck5hbWUpIHsKICAgICAgICAgZ290b0NsdXN0ZXJQYWdlKCk7CiAgICAgICAgIFN0cmluZyBjbGlja0lkID0gZ2V0VGFibGVSb3dCeVZhbHVlKElEX0NMVVNURVJTX1RBQkxFLCBjbHVzdGVyTmFtZSwgImNvbDEiKSsiY29sMDpzZWxlY3QiOwpAQCAtMzk1LDcgKzM5NSw3IEBACiAgICAgICAgIHdhaXRGb3JBbGVydFByb2Nlc3MoIm1vZGFsQm9keSIpOwogICAgICAgICByZXR1cm4gYWxlcnRNc2c7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVsZXRlQWxsQ2x1c3RlcigpewogICAgICAgICBnb3RvQ2x1c3RlclBhZ2UoKTsKICAgICAgICAgaWYgKGdldFRhYmxlUm93Q291bnQoSURfQ0xVU1RFUlNfVEFCTEUpID09IDApIHsKQEAgLTQwNiwxMiArNDA2LDEyIEBACiAgICAgICAgIGNsb3NlQWxlcnRBbmRHZXRJdHNUZXh0KCk7CiAgICAgICAgIHdhaXRGb3JBbGVydFByb2Nlc3MoIm1vZGFsQm9keSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGdvdG9DbHVzdGVyUGFnZSgpewogICAgICAgICBkcml2ZXIuZ2V0KGJhc2VVcmwgKyAiY29tbW9uL2luZGV4LmpzZiIpOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oInRyZWVGb3JtOnRyZWU6Y2x1c3RlclRyZWVOb2RlOmNsdXN0ZXJUcmVlTm9kZV9saW5rIik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogSW5zdGFuY2UgcmVsYXRlZCBtZXRob2RzCiAgICAgICovCkBAIC00MjMsNyArNDIzLDcgQEAKICAgICAgICAgY2xvc2VBbGVydEFuZEdldEl0c1RleHQoKTsKICAgICAgICAgd2FpdEZvckFsZXJ0UHJvY2VzcygibW9kYWxCb2R5Iik7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHN0b3BDbHVzdGVySW5zdGFuY2UoU3RyaW5nIGluc3RhbmNlTmFtZTEpIHsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJwcm9wZXJ0eUZvcm06Y2x1c3RlclRhYnM6Y2x1c3Rlckluc3QiKTsKICAgICAgICAgU3RyaW5nIGNsaWNrSWQgPSBnZXRUYWJsZVJvd0J5VmFsdWUoSURfSU5TVEFOQ0VTX1RBQkxFLCBpbnN0YW5jZU5hbWUxLCAiY29sMSIpKyJjb2wwOnNlbGVjdCI7CkBAIC00MzUsNyArNDM1LDcgQEAKICAgICAvKioKICAgICAgKiBUZXN0IHJlbGF0ZWQgbWV0aG9kcwogICAgICAqLwotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHN0YXJ0VGVzdE1pZ3JhdGVFamJUaW1lcnMoKSB7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbigicHJvcGVydHlGb3JtOmNsdXN0ZXJUYWJzOmdlbmVyYWwiKTsKICAgICAgICAgaXNFbGVtZW50UHJlc2VudCgicHJvcGVydHlGb3JtOm1pZ3JhdGVUaW1lc0J1dHRvbiIpOwpAQCAtNDQ1LDI4ICs0NDUsMjggQEAKICAgICAgICAgaXNDbGFzc1ByZXNlbnQoImhlYWRlcl9zdW40Iik7CiAgICAgICAgIGFzc2VydFRydWUoZHJpdmVyLmZpbmRFbGVtZW50KEJ5LmNsYXNzTmFtZSgiaGVhZGVyX3N1bjQiKSkuZ2V0VGV4dCgpLmluZGV4T2YoIk1pZ3JhdGVkIDAgdGltZXJzIikgIT0gLTEpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzdGFydFZlcmlmeUNsdXN0ZXJHZW5lcmFsSW5mb3JtYXRpb25QYWdlKFN0cmluZyBjbHVzdGVyTmFtZSkgewogICAgICAgICBTdHJpbmcgY2xpY2tJZCA9IGdldFRhYmxlUm93QnlWYWx1ZShJRF9DTFVTVEVSU19UQUJMRSwgY2x1c3Rlck5hbWUsICJjb2wxIikrImNvbDE6bGluayI7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbihjbGlja0lkKTsKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0RXF1YWxzKGNsdXN0ZXJOYW1lLCBnZXRUZXh0KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDpjbHVzdGVyTmFtZVByb3A6Y2x1c3Rlck5hbWUiKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhjbHVzdGVyTmFtZSArICItY29uZmlnIiwgZ2V0VGV4dCgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6Y29uZmlnTmFtZVByb3A6Y29uZmlnbGluayIpKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDpjb25maWdOYW1lUHJvcDpjb25maWdsaW5rIik7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbigidHJlZUZvcm06dHJlZTpjbHVzdGVyVHJlZU5vZGU6Y2x1c3RlclRyZWVOb2RlX2xpbmsiKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKGNsaWNrSWQpOwotICAgICAgICAKKwogICAgICAgICBhc3NlcnRFcXVhbHMoIjIgaW5zdGFuY2VzIGFyZSBzdG9wcGVkIiwgZ2V0VGV4dCgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6aW5zdGFuY2VTdGF0dXNQcm9wOmluc3RhbmNlU3RhdHVzU3RvcHBlZCIpKTsKLSAgICAgICAgCisKICAgICAgICAgc2V0RmllbGRWYWx1ZSgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6Z21zTXVsdGljYXN0UG9ydDpnbXNNdWx0aWNhc3RQb3J0IiwgIjEyMzQ1Iik7CiAgICAgICAgIHNldEZpZWxkVmFsdWUoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnRTZWN0aW9uVGV4dEZpZWxkOmdtc011bHRpY2FzdEFkZHJlc3M6Z21zTXVsdGljYXN0QWRkcmVzcyIsICIxMjMuMjM0LjQ1Ni44OCIpOwogICAgICAgICBzZXRGaWVsZFZhbHVlKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDpHbXNCaW5kSW50ZXJmYWNlQWRkcmVzczpHbXNCaW5kSW50ZXJmYWNlQWRkcmVzcyIsICIke0FCQ0RFfSIpOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnRTZWN0aW9uVGV4dEZpZWxkOmdtc0VuYWJsZWRQcm9wOmdtc2NiIik7Ci0gICAgICAgIAorCiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbigicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpzYXZlQnV0dG9uIik7Ci0gICAgICAgIAorCiAgICAgICAgIC8vZW5zdXJlIHZhbHVlIGlzIHNhdmVkIGNvcnJlY3RseQogICAgICAgICBhc3NlcnRFcXVhbHMoIjEyMzQ1IiwgZ2V0VmFsdWUoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnRTZWN0aW9uVGV4dEZpZWxkOmdtc011bHRpY2FzdFBvcnQ6Z21zTXVsdGljYXN0UG9ydCIsInZhbHVlIikpOwogICAgICAgICBhc3NlcnRFcXVhbHMoIjEyMy4yMzQuNDU2Ljg4IiwgZ2V0VmFsdWUoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnRTZWN0aW9uVGV4dEZpZWxkOmdtc011bHRpY2FzdEFkZHJlc3M6Z21zTXVsdGljYXN0QWRkcmVzcyIsInZhbHVlIikpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvQ29uZmlnVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvQ29uZmlnVGVzdC5qYXZhCmluZGV4IDVkMzA0NDQuLjYyNjhlNWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0NvbmZpZ1Rlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9Db25maWdUZXN0LmphdmEKQEAgLTIxLDE0ICsyMSwxNCBAQAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIAogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIGplcmVteWx2CiAgKgogICovCiBwdWJsaWMgY2xhc3MgQ29uZmlnVGVzdCBleHRlbmRzIEJhc2VTZWxlbml1bVRlc3RDbGFzcyB7CiAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9DTFVTVEVSU19UQUJMRSA9ICJwcm9wZXJ0eUZvcm06Y29uZmlncyI7Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVBbmREZWxldGVDb25maWcoKSB7CiAgICAgICAgIGZpbmFsIFN0cmluZyBjb25maWdOYW1lPSAidGVzdC1jb25maWctIitnZW5lcmF0ZVJhbmRvbVN0cmluZygpOwpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBjbGlja0J5SWRBY3Rpb24oInByb3BlcnR5Rm9ybTpjb25maWdzOnRvcEFjdGlvbnNHcm91cDE6bmV3QnV0dG9uIik7CiAgICAgICAgIHNldEZpZWxkVmFsdWUoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnRTZWN0aW9uVGV4dEZpZWxkOk5hbWVQcm9wOk5hbWUiLCBjb25maWdOYW1lKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOm9rQnV0dG9uIik7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBwcmVmaXggPSBnZXRUYWJsZVJvd0J5VmFsdWUoSURfQ0xVU1RFUlNfVEFCTEUsIGNvbmZpZ05hbWUsICJjb2wxIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoY29uZmlnTmFtZSwgZ2V0VGV4dChwcmVmaXggKyAiY29sMTpsaW5rIikpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvQ29ubmVjdG9yU2VydmljZVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0Nvbm5lY3RvclNlcnZpY2VUZXN0LmphdmEKaW5kZXggNzkxZjBiNy4uMWEyODliNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvQ29ubmVjdG9yU2VydmljZVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9Db25uZWN0b3JTZXJ2aWNlVGVzdC5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIHNlbGVjdC5zZWxlY3RCeVZpc2libGVUZXh0KHBvbGljeSk7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpzYXZlQnV0dG9uIik7CiAgICAgICAgIGFzc2VydFRydWUoaXNFbGVtZW50U2F2ZVN1Y2Nlc3NmdWwoImxhYmVsX3N1bjQiLCJOZXcgdmFsdWVzIHN1Y2Nlc3NmdWxseSBzYXZlZC4iKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGdvdG9EYXNQYWdlKCk7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgidHJlZUZvcm06dHJlZTpjb25maWd1cmF0aW9uczpzZXJ2ZXItY29uZmlnOmNvbm5lY3RvclNlcnZpY2U6Y29ubmVjdG9yU2VydmljZV9saW5rIik7CiAgICAgICAgIGFzc2VydEVxdWFscyh0aW1lb3V0LCBnZXRWYWx1ZSgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6dGltZW91dDp0aWltZW91dCIsICJ2YWx1ZSIpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0Nvbm5lY3RvcnNUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9Db25uZWN0b3JzVGVzdC5qYXZhCmluZGV4IGM5OWM5MmQuLjhlNjc5YzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0Nvbm5lY3RvcnNUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvQ29ubmVjdG9yc1Rlc3QuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEplcmVteSBMdgogICoKICAqLwpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICBTZWxlY3Qgc2VsZWN0ID0gbmV3IFNlbGVjdChkcml2ZXIuZmluZEVsZW1lbnQoQnkuaWQoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OmdlbmVyYWxQcm9wZXJ0eVNoZWV0OnJlc0FkYXB0ZXJQcm9wOmRiIikpKTsKICAgICAgICAgc2VsZWN0LnNlbGVjdEJ5VmlzaWJsZVRleHQoImptc3JhIik7CiAgICAgICAgIHNsZWVwKDEwMDApOwotICAgICAgICAKKwogICAgICAgICBTZWxlY3Qgc2VsZWN0MSA9IG5ldyBTZWxlY3QoZHJpdmVyLmZpbmRFbGVtZW50KEJ5LmlkKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlTaGVldDpnZW5lcmFsUHJvcGVydHlTaGVldDpjb25uZWN0aW9uRGVmUHJvcDpkYiIpKSk7CiAgICAgICAgIHNlbGVjdDEuc2VsZWN0QnlWaXNpYmxlVGV4dCgiamFrYXJ0YS5qbXMuUXVldWVDb25uZWN0aW9uRmFjdG9yeSIpOwogICAgICAgICB3YWl0Rm9yQnV0dG9uRW5hYmxlZCgicHJvcGVydHlGb3JtOnRpdGxlOnRvcEJ1dHRvbnM6bmV4dEJ1dHRvbiIpOwpAQCAtNTcsMTAgKzU3LDEwIEBACiAgICAgICAgIFNlbGVjdCBzZWxlY3QyID0gbmV3IFNlbGVjdChkcml2ZXIuZmluZEVsZW1lbnQoQnkuaWQoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnBvb2xQcm9wZXJ0eVNoZWV0OnRyYW5zcHJvcDp0cmFucyIpKSk7CiAgICAgICAgIHNlbGVjdDIuc2VsZWN0QnlWaXNpYmxlVGV4dCgiTm9UcmFuc2FjdGlvbiIpOwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6ZmluaXNoQnV0dG9uIik7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBwcmVmaXggPSBnZXRUYWJsZVJvd0J5VmFsdWUoInByb3BlcnR5Rm9ybTpwb29sVGFibGUiLCB0ZXN0UG9vbCwgImNvbDEiKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHRlc3RQb29sLCBnZXRUZXh0KHByZWZpeCArICJjb2wxOmxpbmsiKSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIENyZWF0ZSBuZXcgY29ubmVjdG9yIHJlc291cmNlIHdoaWNoIHVzZXMgdGhpcyBuZXcgcG9vbAogICAgICAgICBjbGlja0FuZFdhaXQoInRyZWVGb3JtOnRyZWU6cmVzb3VyY2VzOkNvbm5lY3RvcnM6Y29ubmVjdG9yUmVzb3VyY2VzOmNvbm5lY3RvclJlc291cmNlc19saW5rIik7CiAKQEAgLTcyLDE5ICs3MiwxOSBAQAogCiAgICAgICAgIGNsaWNrQW5kV2FpdCgiZm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6bmV3QnV0dG9uIik7CiAKLSAgICAgICAgCisKICAgICAgICAgLy90ZXN0IGRpc2FibGUgYnV0dG9uCiAgICAgICAgIFN0cmluZyBjb25uZWN0b3JQcmVmaXggPSBnZXRUYWJsZVJvd0J5VmFsdWUoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZSIsIHRlc3RDb25uZWN0b3IsICJjb2wxIik7CiAgICAgICAgIGlzRWxlbWVudFByZXNlbnQoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOm5ld0J1dHRvbiIpOwogICAgICAgICBTdHJpbmcgc2VsZWN0SWQgPSBjb25uZWN0b3JQcmVmaXggKyAiY29sMDpzZWxlY3QiOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oc2VsZWN0SWQpOwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjMiKTsKLSAgICAgICAgCisKICAgICAgICAgLy90ZXN0IGVuYWJsZSBidXR0b24KICAgICAgICAgd2FpdGZvckJ0bkRpc2FibGUoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjIiKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKHNlbGVjdElkKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cmVzb3VyY2VzVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpidXR0b24yIik7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIERlbGV0ZSBjb25uZWN0b3IgcmVzb3VyY2UKICAgICAgICAgd2FpdGZvckJ0bkRpc2FibGUoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjEiKTsKICAgICAgICAgZGVsZXRlUm93KCJwcm9wZXJ0eUZvcm06cmVzb3VyY2VzVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpidXR0b24xIiwgInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZSIsIHRlc3RDb25uZWN0b3IpOwpAQCAtMTEyLDcgKzExMiw3IEBACiAgICAgICAgIFNlbGVjdCBzZWxlY3QgPSBuZXcgU2VsZWN0KGRyaXZlci5maW5kRWxlbWVudChCeS5pZCgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6Z2VuZXJhbFByb3BlcnR5U2hlZXQ6cmVzQWRhcHRlclByb3A6ZGIiKSkpOwogICAgICAgICBzZWxlY3Quc2VsZWN0QnlWaXNpYmxlVGV4dCgiam1zcmEiKTsKICAgICAgICAgc2xlZXAoMTAwMCk7Ci0gICAgICAgIAorCiAgICAgICAgIFNlbGVjdCBzZWxlY3QxID0gbmV3IFNlbGVjdChkcml2ZXIuZmluZEVsZW1lbnQoQnkuaWQoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OmdlbmVyYWxQcm9wZXJ0eVNoZWV0OmNvbm5lY3Rpb25EZWZQcm9wOmRiIikpKTsKICAgICAgICAgc2VsZWN0MS5zZWxlY3RCeVZpc2libGVUZXh0KCJqYWthcnRhLmptcy5RdWV1ZUNvbm5lY3Rpb25GYWN0b3J5Iik7CiAgICAgICAgIHdhaXRGb3JCdXR0b25FbmFibGVkKCJwcm9wZXJ0eUZvcm06dGl0bGU6dG9wQnV0dG9uczpuZXh0QnV0dG9uIik7CkBAIC0xMjIsNyArMTIyLDcgQEAKICAgICAgICAgU2VsZWN0IHNlbGVjdDIgPSBuZXcgU2VsZWN0KGRyaXZlci5maW5kRWxlbWVudChCeS5pZCgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6cG9vbFByb3BlcnR5U2hlZXQ6dHJhbnNwcm9wOnRyYW5zIikpKTsKICAgICAgICAgc2VsZWN0Mi5zZWxlY3RCeVZpc2libGVUZXh0KCJOb1RyYW5zYWN0aW9uIik7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpmaW5pc2hCdXR0b24iKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHByZWZpeCA9IGdldFRhYmxlUm93QnlWYWx1ZSgicHJvcGVydHlGb3JtOnBvb2xUYWJsZSIsIHRlc3RQb29sLCAiY29sMSIpOwogICAgICAgICBhc3NlcnRFcXVhbHModGVzdFBvb2wsIGdldFRleHQocHJlZml4ICsgImNvbDE6bGluayIpKTsKIApAQCAtMTM3LDcgKzEzNyw3IEBACiAgICAgICAgIHNldEZpZWxkVmFsdWUoImZvcm06cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDpqbmRpVGV4dFByb3A6am5kaXRleHQiLCB0ZXN0Q29ubmVjdG9yKTsKICAgICAgICAgU2VsZWN0IHNlbGVjdDMgPSBuZXcgU2VsZWN0KGRyaXZlci5maW5kRWxlbWVudChCeS5pZCgiZm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnRTZWN0aW9uVGV4dEZpZWxkOnBvb2xOYW1lUHJvcDpQb29sTmFtZSIpKSk7CiAgICAgICAgIHNlbGVjdDMuc2VsZWN0QnlWaXNpYmxlVGV4dCh0ZXN0UG9vbCk7Ci0gICAgICAgIAorCiAgICAgICAgIGludCBjb3VudCA9IGFkZFRhYmxlUm93KCJmb3JtOmJhc2ljVGFibGUiLCAiZm9ybTpiYXNpY1RhYmxlOnRvcEFjdGlvbnNHcm91cDE6YWRkU2hhcmVkVGFibGVCdXR0b24iKTsKICAgICAgICAgc2V0RmllbGRWYWx1ZSgiZm9ybTpiYXNpY1RhYmxlOnJvd0dyb3VwMTowOmNvbDI6Y29sMVN0IiwgInByb3BlcnR5IiArIGdlbmVyYXRlUmFuZG9tU3RyaW5nKCkpOwogICAgICAgICBzZXRGaWVsZFZhbHVlKCJmb3JtOmJhc2ljVGFibGU6cm93R3JvdXAxOjA6Y29sMzpjb2wxU3QiLCAidmFsdWUiKTsKQEAgLTE1Miw3ICsxNTIsNyBAQAogCiAgICAgICAgIFN0cmluZyBjb25uZWN0b3JQcmVmaXggPSBnZXRUYWJsZVJvd0J5VmFsdWUoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZSIsIHRlc3RDb25uZWN0b3IsICJjb2wxIik7CiAgICAgICAgIGFzc2VydEVxdWFscyh0ZXN0Q29ubmVjdG9yLCBnZXRUZXh0KGNvbm5lY3RvclByZWZpeCArICJjb2wxOmxpbmsiKSk7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBjbGlja0lkID0gY29ubmVjdG9yUHJlZml4ICsgImNvbDE6bGluayI7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbihjbGlja0lkKTsKICAgICAgICAgYXNzZXJ0VGFibGVSb3dDb3VudCgicHJvcGVydHlGb3JtOmJhc2ljVGFibGUiLCBjb3VudCk7CkBAIC0xNjQsNyArMTY0LDcgQEAKICAgICAgICAgU3RyaW5nIHNlbGVjdElkID0gY29ubmVjdG9yUHJlZml4ICsgImNvbDA6c2VsZWN0IjsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKHNlbGVjdElkKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cmVzb3VyY2VzVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpidXR0b24zIik7Ci0gICAgICAgIAorCiAgICAgICAgIC8vdGVzdCBlbmFibGUgYnV0dG9uCiAgICAgICAgIHdhaXRmb3JCdG5EaXNhYmxlKCJwcm9wZXJ0eUZvcm06cmVzb3VyY2VzVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpidXR0b24yIik7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbihzZWxlY3RJZCk7CkBAIC0xODAsNyArMTgwLDcgQEAKICAgICAgICAgc2VsZWN0NS5zZWxlY3RCeVZpc2libGVUZXh0KCJzZXJ2ZXIiKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJmb3JtOnRhcmdldFNlY3Rpb246dGFyZ2V0U2VjdGlvbklkOmFkZFJlbW92ZVByb3A6Y29tbW9uQWRkUmVtb3ZlOmNvbW1vbkFkZFJlbW92ZV9yZW1vdmVCdXR0b24iKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJmb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpzYXZlQnV0dG9uIik7Ci0gICAgICAgIAorCiAKICAgICAgICAgLy8gRGVsZXRlIGNvbm5lY3RvciByZXNvdXJjZQogICAgICAgICBjbGlja0FuZFdhaXQoInRyZWVGb3JtOnRyZWU6cmVzb3VyY2VzOkNvbm5lY3RvcnM6Y29ubmVjdG9yUmVzb3VyY2VzOmNvbm5lY3RvclJlc291cmNlc19saW5rIik7CkBAIC0xOTUsNyArMTk1LDcgQEAKICAgICAgICAgZGVsZXRlUm93KCJwcm9wZXJ0eUZvcm06aW5zdGFuY2VzVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpidXR0b24xIiwgInByb3BlcnR5Rm9ybTppbnN0YW5jZXNUYWJsZSIsIGluc3RhbmNlTmFtZSk7CiAgICAgfQogCi0gICAgCisKIC8vICAgIC8vVGhpcyB0ZXN0cyBuZWVkIHRvIGJlIGZpbmlzaGVkIGFuZCByZXRlc3RlZCBhZnRlciB0aGUgR0xBU1NGSVNILTIwODEyIGhhcyBiZWVuIHJlc29sdmVkIQogLy8gICAgQFRlc3QKIC8vICAgIHB1YmxpYyB2b2lkIHRlc3RDb25uZWN0b3JTZWN1cml0eU1hcHMoKSB7CkBAIC0yMTUsNyArMjE1LDcgQEAKIC8vICAgICAgICBTZWxlY3Qgc2VsZWN0ID0gbmV3IFNlbGVjdChkcml2ZXIuZmluZEVsZW1lbnQoQnkuaWQoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OmdlbmVyYWxQcm9wZXJ0eVNoZWV0OnJlc0FkYXB0ZXJQcm9wOmRiIikpKTsKIC8vICAgICAgICBzZWxlY3Quc2VsZWN0QnlWaXNpYmxlVGV4dCgiam1zcmEiKTsKIC8vICAgICAgICBzbGVlcCgxMDAwKTsKLS8vICAgICAgICAKKy8vCiAvLyAgICAgICAgU2VsZWN0IHNlbGVjdDEgPSBuZXcgU2VsZWN0KGRyaXZlci5maW5kRWxlbWVudChCeS5pZCgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6Z2VuZXJhbFByb3BlcnR5U2hlZXQ6Y29ubmVjdGlvbkRlZlByb3A6ZGIiKSkpOwogLy8gICAgICAgIHNlbGVjdDEuc2VsZWN0QnlWaXNpYmxlVGV4dCgiamFrYXJ0YS5qbXMuUXVldWVDb25uZWN0aW9uRmFjdG9yeSIpOwogLy8gICAgICAgIHdhaXRGb3JCdXR0b25FbmFibGVkKCJwcm9wZXJ0eUZvcm06dGl0bGU6dG9wQnV0dG9uczpuZXh0QnV0dG9uIik7CkBAIC0yMjUsNyArMjI1LDcgQEAKIC8vICAgICAgICBTZWxlY3Qgc2VsZWN0MiA9IG5ldyBTZWxlY3QoZHJpdmVyLmZpbmRFbGVtZW50KEJ5LmlkKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlTaGVldDpwb29sUHJvcGVydHlTaGVldDp0cmFuc3Byb3A6dHJhbnMiKSkpOwogLy8gICAgICAgIHNlbGVjdDIuc2VsZWN0QnlWaXNpYmxlVGV4dCgiTm9UcmFuc2FjdGlvbiIpOwogLy8gICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpmaW5pc2hCdXR0b24iKTsKLS8vICAgICAgICAKKy8vCiAvLyAgICAgICAgU3RyaW5nIHByZWZpeCA9IGdldFRhYmxlUm93QnlWYWx1ZSgicHJvcGVydHlGb3JtOnBvb2xUYWJsZSIsIHRlc3RQb29sLCAiY29sMSIpOwogLy8gICAgICAgIGFzc2VydEVxdWFscyh0ZXN0UG9vbCwgZ2V0VGV4dChwcmVmaXggKyAiY29sMTpsaW5rIikpOwogLy8KQEAgLTI1Miw2ICsyNTIsNiBAQAogLy8KIC8vICAgICAgICAvLyBEZWxldGUgY29ubmVjdG9yIGNvbm5lY3Rpb24gcG9vbAogLy8gICAgICAgIGNsaWNrQW5kV2FpdCgidHJlZUZvcm06dHJlZTpyZXNvdXJjZXM6Q29ubmVjdG9yczpjb25uZWN0b3JDb25uZWN0aW9uUG9vbHM6Y29ubmVjdG9yQ29ubmVjdGlvblBvb2xzX2xpbmsiKTsKLS8vICAgICAgICBkZWxldGVSb3coInByb3BlcnR5Rm9ybTpwb29sVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpidXR0b24xIiwgInByb3BlcnR5Rm9ybTpwb29sVGFibGUiLCB0ZXN0UG9vbCk7ICAgICAgICAKKy8vICAgICAgICBkZWxldGVSb3coInByb3BlcnR5Rm9ybTpwb29sVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpidXR0b24xIiwgInByb3BlcnR5Rm9ybTpwb29sVGFibGUiLCB0ZXN0UG9vbCk7CiAvLyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9FamJDb250YWluZXJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9FamJDb250YWluZXJUZXN0LmphdmEKaW5kZXggZjY0ZTVjOC4uN2E2OTg2YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvRWpiQ29udGFpbmVyVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0VqYkNvbnRhaW5lclRlc3QuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEplcmVteSBMdgogICoKICAqLwpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICBzZXRGaWVsZFZhbHVlKCJmb3JtMTpiYXNpY1RhYmxlOnJvd0dyb3VwMTowOmNvbDQ6Y29sMVN0IiwgImRlc2NyaXB0aW9uIik7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgiZm9ybTE6cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOnNhdmVCdXR0b24iKTsKICAgICAgICAgYXNzZXJ0VHJ1ZShpc0VsZW1lbnRTYXZlU3VjY2Vzc2Z1bCgibGFiZWxfc3VuNCIsIk5ldyB2YWx1ZXMgc3VjY2Vzc2Z1bGx5IHNhdmVkLiIpKTsKLSAgICAgICAgCisKICAgICAgICAgZ290b0Rhc1BhZ2UoKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJ0cmVlRm9ybTp0cmVlOmNvbmZpZ3VyYXRpb25zOnNlcnZlci1jb25maWc6ZWpiQ29udGFpbmVyOmVqYkNvbnRhaW5lcl9saW5rIik7CiAgICAgICAgIGFzc2VydEVxdWFscyhtaW5TaXplLCBnZXRWYWx1ZSgiZm9ybTE6cHJvcGVydHlTaGVldDpwb29sU2V0dGluZ1NlY3Rpb246TWluU2l6ZVByb3A6TWluU2l6ZSIsICJ2YWx1ZSIpKTsKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgYXNzZXJ0RXF1YWxzKHBvb2xSZXNpemUsIGdldFZhbHVlKCJmb3JtMTpwcm9wZXJ0eVNoZWV0OnBvb2xTZXR0aW5nU2VjdGlvbjpQb29sUmVzaXplUHJvcDpQb29sUmVzaXplIiwgInZhbHVlIikpOwogICAgICAgICBhc3NlcnRFcXVhbHModGltZW91dCwgZ2V0VmFsdWUoImZvcm0xOnByb3BlcnR5U2hlZXQ6cG9vbFNldHRpbmdTZWN0aW9uOlRpbWVvdXRQcm9wOlRpbWVvdXQiLCAidmFsdWUiKSk7CiAgICAgICAgIGFzc2VydFRhYmxlUm93Q291bnQoImZvcm0xOmJhc2ljVGFibGUiLCBjb3VudCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vZGVsZXRlIHRoZSBwcm9wZXJ0eSB1c2VkIHRvIHRlc3QKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJmb3JtMTpiYXNpY1RhYmxlOl90YWJsZUFjdGlvbnNUb3A6X3NlbGVjdE11bHRpcGxlQnV0dG9uOl9zZWxlY3RNdWx0aXBsZUJ1dHRvbl9pbWFnZSIpOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oImZvcm0xOmJhc2ljVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpidXR0b24xIik7CkBAIC05NCw3ICs5NCw3IEBACiAgICAgICAgIHNldEZpZWxkVmFsdWUoImZvcm0xOmJhc2ljVGFibGU6cm93R3JvdXAxOjA6Y29sNDpjb2wxU3QiLCAiZGVzY3JpcHRpb24iKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJmb3JtMTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6c2F2ZUJ1dHRvbiIpOwogICAgICAgICBhc3NlcnRUcnVlKGlzRWxlbWVudFNhdmVTdWNjZXNzZnVsKCJsYWJlbF9zdW40IiwiTmV3IHZhbHVlcyBzdWNjZXNzZnVsbHkgc2F2ZWQuIikpOwotICAgICAgICAKKwogICAgICAgICBnb3RvRGFzUGFnZSgpOwogICAgICAgICBjbGlja0FuZFdhaXQoInRyZWVGb3JtOnRyZWU6Y29uZmlndXJhdGlvbnM6c2VydmVyLWNvbmZpZzplamJDb250YWluZXI6ZWpiQ29udGFpbmVyX2xpbmsiKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJmb3JtMTplamJDb250YWluZXJUYWJzOm1kYlNldHRpbmdzVGFiIik7CkBAIC0xMDQsNyArMTA0LDcgQEAKICAgICAgICAgYXNzZXJ0RXF1YWxzKHBvb2xSZXNpemUsIGdldFZhbHVlKCJmb3JtMTpwcm9wZXJ0eVNoZWV0OnByb3BlcnR5U2VjdGlvblRleHRGaWVsZDpQb29sUmVzaXplUHJvcDpQb29sUmVzaXplIiwgInZhbHVlIikpOwogICAgICAgICBhc3NlcnRFcXVhbHModGltZW91dCwgZ2V0VmFsdWUoImZvcm0xOnByb3BlcnR5U2hlZXQ6cHJvcGVydHlTZWN0aW9uVGV4dEZpZWxkOlRpbWVvdXRQcm9wOlRpbWVvdXQiLCAidmFsdWUiKSk7CiAgICAgICAgIGFzc2VydFRhYmxlUm93Q291bnQoImZvcm0xOmJhc2ljVGFibGUiLCBjb3VudCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vZGVsZXRlIHRoZSBwcm9wZXJ0eSB1c2VkIHRvIHRlc3QKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJmb3JtMTpiYXNpY1RhYmxlOl90YWJsZUFjdGlvbnNUb3A6X3NlbGVjdE11bHRpcGxlQnV0dG9uOl9zZWxlY3RNdWx0aXBsZUJ1dHRvbl9pbWFnZSIpOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oImZvcm0xOmJhc2ljVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpidXR0b24xIik7CkBAIC0xNTQsNyArMTU0LDcgQEAKICAgICAgICAgc2V0RmllbGRWYWx1ZSgiZm9ybTE6cHJvcGVydHlTaGVldDpwcm9wZXJ0eVNlY3Rpb25UZXh0RmllbGQ6TWF4UmVkZWxpdmVyeVByb3A6TWF4UmVkZWxpdmVyeSIsICIxIik7CiAgICAgICAgIHNldEZpZWxkVmFsdWUoImZvcm0xOnByb3BlcnR5U2hlZXQ6cHJvcGVydHlTZWN0aW9uVGV4dEZpZWxkOlJlZGVsaXZlcnlJbnRyUHJvcDpSZWRlbGl2ZXJ5SW50ciIsICI1MDAwIik7CiAgICAgICAgIHNldEZpZWxkVmFsdWUoImZvcm0xOnByb3BlcnR5U2hlZXQ6cHJvcGVydHlTZWN0aW9uVGV4dEZpZWxkOlRpbWVyRGF0YXNvdXJjZVByb3A6VGltZXJEYXRhc291cmNlIiwgIiIpOwotICAgICAgICAKKwogICAgICAgICAvL2RlbGV0ZSB0aGUgcHJvcGVydHkgdXNlZCB0byB0ZXN0CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbigiZm9ybTE6YmFzaWNUYWJsZTpfdGFibGVBY3Rpb25zVG9wOl9zZWxlY3RNdWx0aXBsZUJ1dHRvbjpfc2VsZWN0TXVsdGlwbGVCdXR0b25faW1hZ2UiKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJmb3JtMTpiYXNpY1RhYmxlOnRvcEFjdGlvbnNHcm91cDE6YnV0dG9uMSIpOwpAQCAtMTg0LDcgKzE4NCw3IEBACiAgICAgICAgIC8vU2F2ZSB0aGlzLCBnb3RvIGFub3RoZXIgdGFiIGFuZCBiYWNrCiAgICAgICAgIGNsaWNrQW5kV2FpdCgiZm9ybTE6cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOnNhdmVCdXR0b24iKTsKICAgICAgICAgYXNzZXJ0VHJ1ZShpc0VsZW1lbnRTYXZlU3VjY2Vzc2Z1bCgibGFiZWxfc3VuNCIsIk5ldyB2YWx1ZXMgc3VjY2Vzc2Z1bGx5IHNhdmVkLiIpKTsKLSAgICAgICAgCisKICAgICAgICAgZ290b0Rhc1BhZ2UoKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJ0cmVlRm9ybTp0cmVlOmNvbmZpZ3VyYXRpb25zOnNlcnZlci1jb25maWc6ZWpiQ29udGFpbmVyOmVqYkNvbnRhaW5lcl9saW5rIik7CiAKQEAgLTIwMSw3ICsyMDEsNyBAQAogICAgICAgICB3YWl0Rm9yQnV0dG9uRW5hYmxlZCgiZm9ybTE6cHJvcGVydHlDb250ZW50UGFnZTpsb2FkRGVmYXVsdHNCdXR0b24iKTsKIAogICAgICAgICBhc3NlcnRFcXVhbHMobG9jYXRpb24sIGdldFZhbHVlKCJmb3JtMTpwcm9wZXJ0eVNoZWV0OmdlbmVyYWxQcm9wZXJ0eVNlY3Rpb246U2Vzc2lvblN0b3JlUHJvcDpTZXNzaW9uU3RvcmUiLCAidmFsdWUiKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGFzc2VydEVxdWFscyh0cnVlLCBkcml2ZXIuZmluZEVsZW1lbnQoQnkuaWQoKCJmb3JtMTpwcm9wZXJ0eVNoZWV0OmdlbmVyYWxQcm9wZXJ0eVNlY3Rpb246Y29tbWl0T3B0aW9uUHJvcDpvcHRCIikpKS5pc1NlbGVjdGVkKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoIjAiLCBnZXRWYWx1ZSgiZm9ybTE6cHJvcGVydHlTaGVldDpwb29sU2V0dGluZ1NlY3Rpb246TWluU2l6ZVByb3A6TWluU2l6ZSIsICJ2YWx1ZSIpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCIzMiIsIGdldFZhbHVlKCJmb3JtMTpwcm9wZXJ0eVNoZWV0OnBvb2xTZXR0aW5nU2VjdGlvbjpNYXhTaXplUHJvcDpNYXhTaXplIiwgInZhbHVlIikpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvRW50ZXJwcmlzZVNlcnZlclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0VudGVycHJpc2VTZXJ2ZXJUZXN0LmphdmEKaW5kZXggNDU5YzUwMi4uYzhjM2M4YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvRW50ZXJwcmlzZVNlcnZlclRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9FbnRlcnByaXNlU2VydmVyVGVzdC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CiAvKioKLSAqIAorICoKICAqIEBhdXRob3IgSmVyZW15IEx2CiAgKgogICovCkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgIGdvdG9EYXNQYWdlKCk7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnNlcnZlckluc3RUYWJzOnNlcnZlckluc3RQcm9wcyIpOwogICAgICAgICBhc3NlcnRUYWJsZVJvd0NvdW50KCJwcm9wZXJ0eUZvcm06c3lzUHJvcHNUYWJsZSIsIGNvdW50KTsKLSAgICAgICAgCisKICAgICAgICAgLy9kZWxldGUgdGhlIHByb3BlcnR5IHVzZWQgdG8gdGVzdAogICAgICAgICBnb3RvRGFzUGFnZSgpOwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpzZXJ2ZXJJbnN0VGFiczpzZXJ2ZXJJbnN0UHJvcHMiKTsKQEAgLTk2LDcgKzk2LDcgQEAKICAgICAgICAgZ290b0Rhc1BhZ2UoKTsKICAgICAgICAgSmRiY1Rlc3QgamRiY1Rlc3QgPSBuZXcgSmRiY1Rlc3QoKTsKICAgICAgICAgamRiY1Rlc3QuY3JlYXRlSkRCQ1Jlc291cmNlKGpuZGlOYW1lLCBkZXNjcmlwdGlvbiwgInNlcnZlciIsICJzZXJ2ZXIiKTsKLSAgICAgICAgCisKICAgICAgICAgZ290b0Rhc1BhZ2UoKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06c2VydmVySW5zdFRhYnM6cmVzb3VyY2VzIik7CiAgICAgICAgIFN0cmluZyBwcmVmaXggPSBnZXRUYWJsZVJvd0J5VmFsdWUodGFibGVJRCwgam5kaU5hbWUsICJjb2wxIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9HTVNUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9HTVNUZXN0LmphdmEKaW5kZXggMWVmZmRiYy4uZDJkMjQyMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvR01TVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0dNU1Rlc3QuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEplcmVteSBMdgogICoKICAqLwpAQCAtMzQsNyArMzQsNyBAQAogICAgICAgICBjbGlja0FuZFdhaXQoInRyZWVGb3JtOnRyZWU6Y29uZmlndXJhdGlvbnM6ZGVmYXVsdC1jb25maWc6ZGVmYXVsdC1jb25maWdfdHVybmVyOmRlZmF1bHQtY29uZmlnX3R1cm5lcl9pbWFnZSIpOwogICAgICAgICBjbGlja0FuZFdhaXQoInRyZWVGb3JtOnRyZWU6Y29uZmlndXJhdGlvbnM6ZGVmYXVsdC1jb25maWc6Z21zOmdtc19saW5rIik7CiAgICAgICAgIHNldEZpZWxkVmFsdWUoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnRTZWN0aW9uVGV4dEZpZWxkOmZkTWF4OmZkTWF4IiwgcHJvdG9jb2xNYXhUcmlhbCk7Ci0gICAgICAgIAorCiAgICAgICAgIGludCBjb3VudCA9IGFkZFRhYmxlUm93KCJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZSIsICJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmFkZFNoYXJlZFRhYmxlQnV0dG9uIik7CiAgICAgICAgIHNsZWVwKDUwMCk7CiAgICAgICAgIHNldEZpZWxkVmFsdWUoInByb3BlcnR5Rm9ybTpiYXNpY1RhYmxlOnJvd0dyb3VwMTowOmNvbDI6Y29sMVN0IiwgImEiKTsKQEAgLTQ0LDEwICs0NCwxMCBAQAogICAgICAgICBzZXRGaWVsZFZhbHVlKCJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZTpyb3dHcm91cDE6MDpjb2w0OmNvbDFTdCIsICJjIik7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpzYXZlQnV0dG9uIik7CiAgICAgICAgIGFzc2VydFRydWUoaXNFbGVtZW50U2F2ZVN1Y2Nlc3NmdWwoImxhYmVsX3N1bjQiLCJOZXcgdmFsdWVzIHN1Y2Nlc3NmdWxseSBzYXZlZC4iKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGFzc2VydEVxdWFscyhwcm90b2NvbE1heFRyaWFsLCBnZXRWYWx1ZSgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6ZmRNYXg6ZmRNYXgiLCAidmFsdWUiKSk7CiAgICAgICAgIGFzc2VydFRhYmxlUm93Q291bnQoInByb3BlcnR5Rm9ybTpiYXNpY1RhYmxlIiwgY291bnQpOwotICAgICAgICAKKwogICAgICAgICAvL2RlbGV0ZSB0aGUgcHJvcGVydHkgdXNlZCB0byB0ZXN0CiAgICAgICAgIGdvdG9EYXNQYWdlKCk7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgidHJlZUZvcm06dHJlZTpjb25maWd1cmF0aW9uczpkZWZhdWx0LWNvbmZpZzpnbXM6Z21zX2xpbmsiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0h0dHBTZXJ2aWNlVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvSHR0cFNlcnZpY2VUZXN0LmphdmEKaW5kZXggZTI1ZDM5Ni4uYWYwNGEwNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvSHR0cFNlcnZpY2VUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvSHR0cFNlcnZpY2VUZXN0LmphdmEKQEAgLTIyLDEyICsyMiwxMiBAQAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEplcmVteSBMdgogICoKICAqLwogcHVibGljIGNsYXNzIEh0dHBTZXJ2aWNlVGVzdCBleHRlbmRzIEJhc2VTZWxlbml1bVRlc3RDbGFzcyB7Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RIdHRwU2VydmljZSgpIHsKICAgICAgICAgZ290b0Rhc1BhZ2UoKTsKQEAgLTM5LDEwICszOSwxMCBAQAogICAgICAgICBjbGlja0FuZFdhaXQoInRyZWVGb3JtOnRyZWU6Y29uZmlndXJhdGlvbnM6c2VydmVyLWNvbmZpZzpodHRwU2VydmljZTpodHRwU2VydmljZV9saW5rIik7CiAgICAgICAgIGlmKCFkcml2ZXIuZmluZEVsZW1lbnQoQnkuaWQoImZvcm0xOnByb3BlcnR5U2hlZXQ6aHR0cDphY0xvZzpzc29FbmFibGVkIikpLmlzU2VsZWN0ZWQoKSkKICAgICAgICAgICAgIGNsaWNrQnlJZEFjdGlvbigiZm9ybTE6cHJvcGVydHlTaGVldDpodHRwOmFjTG9nOnNzb0VuYWJsZWQiKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoIWRyaXZlci5maW5kRWxlbWVudChCeS5pZCgiZm9ybTE6cHJvcGVydHlTaGVldDphY2Nlc3NMb2c6YWNMb2c6YWNjZXNzTG9nZ2luZ0VuYWJsZWQiKSkuaXNTZWxlY3RlZCgpKQogICAgICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJmb3JtMTpwcm9wZXJ0eVNoZWV0OmFjY2Vzc0xvZzphY0xvZzphY2Nlc3NMb2dnaW5nRW5hYmxlZCIpOwotICAgICAgICAKKwogICAgICAgICBzZXRGaWVsZFZhbHVlKCJmb3JtMTpwcm9wZXJ0eVNoZWV0OmFjY2Vzc0xvZzppbnRlcnZhbFByb3A6SW50ZXJ2YWwiLCBpbnRlcnZhbCk7CiAgICAgICAgIHNldEZpZWxkVmFsdWUoImZvcm0xOnByb3BlcnR5U2hlZXQ6YWNjZXNzTG9nOk1heEhpc3RvcnlGaWxlczpNYXhIaXN0b3J5RmlsZXMiLCBtYXhGaWxlcyk7CiAgICAgICAgIHNldEZpZWxkVmFsdWUoImZvcm0xOnByb3BlcnR5U2hlZXQ6YWNjZXNzTG9nOmFjY2Vzc0xvZ0J1ZmZlclNpemU6YWNjZXNzTG9nQnVmZmVyU2l6ZSIsIGJ1ZmZlclNpemUpOwpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICBzZXRGaWVsZFZhbHVlKCJmb3JtMTpiYXNpY1RhYmxlOnJvd0dyb3VwMTowOmNvbDQ6Y29sMVN0IiwgImRlc2NyaXB0aW9uIik7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgiZm9ybTE6cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOnNhdmVCdXR0b24iKTsKICAgICAgICAgYXNzZXJ0VHJ1ZShpc0VsZW1lbnRTYXZlU3VjY2Vzc2Z1bCgibGFiZWxfc3VuNCIsIk5ldyB2YWx1ZXMgc3VjY2Vzc2Z1bGx5IHNhdmVkLiIpKTsKLSAgICAgICAgCisKICAgICAgICAgZ290b0Rhc1BhZ2UoKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJ0cmVlRm9ybTp0cmVlOmNvbmZpZ3VyYXRpb25zOnNlcnZlci1jb25maWc6aHR0cFNlcnZpY2U6aHR0cFNlcnZpY2VfbGluayIpOwogICAgICAgICBhc3NlcnRFcXVhbHModHJ1ZSwgZHJpdmVyLmZpbmRFbGVtZW50KEJ5LmlkKCJmb3JtMTpwcm9wZXJ0eVNoZWV0Omh0dHA6YWNMb2c6c3NvRW5hYmxlZCIpKS5pc1NlbGVjdGVkKCkpOwpAQCAtNjUsNyArNjUsNyBAQAogICAgICAgICBhc3NlcnRFcXVhbHMoYnVmZmVyU2l6ZSwgZ2V0VmFsdWUoImZvcm0xOnByb3BlcnR5U2hlZXQ6YWNjZXNzTG9nOmFjY2Vzc0xvZ0J1ZmZlclNpemU6YWNjZXNzTG9nQnVmZmVyU2l6ZSIsICJ2YWx1ZSIpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKGxvZ1dyaXRlSW50ZXJ2YWwsIGdldFZhbHVlKCJmb3JtMTpwcm9wZXJ0eVNoZWV0OmFjY2Vzc0xvZzphY2Nlc3NMb2dXcml0ZUludGVydmFsOmFjY2Vzc0xvZ1dyaXRlSW50ZXJ2YWwiLCAidmFsdWUiKSk7CiAgICAgICAgIGFzc2VydFRhYmxlUm93Q291bnQoImZvcm0xOmJhc2ljVGFibGUiLCBjb3VudCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vZGVsZXRlIHRoZSBwcm9wZXJ0eSB1c2VkIHRvIHRlc3QKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJmb3JtMTpiYXNpY1RhYmxlOl90YWJsZUFjdGlvbnNUb3A6X3NlbGVjdE11bHRpcGxlQnV0dG9uOl9zZWxlY3RNdWx0aXBsZUJ1dHRvbl9pbWFnZSIpOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oImZvcm0xOmJhc2ljVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpidXR0b24xIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9JaW9wTGlzdGVuZXJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9JaW9wTGlzdGVuZXJUZXN0LmphdmEKaW5kZXggOWZhYjljYS4uYmM5MjFkYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvSWlvcExpc3RlbmVyVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0lpb3BMaXN0ZW5lclRlc3QuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEplcmVteSBMdgogICoKICAqLwpAQCAtNTEsMTAgKzUxLDEwIEBACiAgICAgICAgIHNsZWVwKDUwMCk7CiAgICAgICAgIHNldEZpZWxkVmFsdWUoInByb3BlcnR5Rm9ybTpiYXNpY1RhYmxlOnJvd0dyb3VwMTowOmNvbDQ6Y29sMVN0IiwgImMiKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOm5ld0J1dHRvbiIpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgcHJlZml4ID0gZ2V0VGFibGVSb3dCeVZhbHVlKCJwcm9wZXJ0eUZvcm06Y29uZmlncyIsIGlpb3BOYW1lLCAiY29sMSIpOwogICAgICAgICBhc3NlcnRFcXVhbHMoaWlvcE5hbWUsIGdldFRleHQocHJlZml4ICsgImNvbDE6bGluayIpKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGNsaWNrSWQgPSBwcmVmaXggKyAiY29sMTpsaW5rIjsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKGNsaWNrSWQpOwogICAgICAgICBhc3NlcnRFcXVhbHMobmV0d29ya0FkZHJlc3MsIGdldFZhbHVlKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlTaGVldDpnZW5lcmFsU2V0dGluZ3NTZXRpb246TmV0d2tBZGRyUHJvcDpOZXR3a0FkZHIiLCAidmFsdWUiKSk7CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgIHNldEZpZWxkVmFsdWUoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnR5U2hlZXRTZWN0aW9uOkNlcnROaWNrbmFtZVByb3A6Q2VydE5pY2tuYW1lIiwgY2VydE5hbWUpOwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6bmV3QnV0dG9uIik7CiAgICAgICAgIGFzc2VydFRydWUoaXNFbGVtZW50U2F2ZVN1Y2Nlc3NmdWwoImxhYmVsX3N1bjQiLCJOZXcgdmFsdWVzIHN1Y2Nlc3NmdWxseSBzYXZlZC4iKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGFzc2VydEVxdWFscyhjZXJ0TmFtZSwgZ2V0VmFsdWUoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnR5U2hlZXRTZWN0aW9uOkNlcnROaWNrbmFtZVByb3A6Q2VydE5pY2tuYW1lIiwgInZhbHVlIikpOwogCiAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpjYW5jZWxCdXR0b24iKTsKQEAgLTg0LDEwICs4NCwxMCBAQAogICAgICAgICBzZXRGaWVsZFZhbHVlKCJmb3JtMTpwcm9wZXJ0eVNoZWV0OnByb3BlcnR5U2VjdGlvblRleHRGaWVsZDpUb3RhbENvbm5zUHJvcDpUb3RhbENvbm5zIiwgdG90YWxDb25uKTsKICAgICAgICAgU2VsZWN0IHNlbGVjdCA9IG5ldyBTZWxlY3QoZHJpdmVyLmZpbmRFbGVtZW50KEJ5LmlkKCJmb3JtMTpwcm9wZXJ0eVNoZWV0OnByb3BlcnR5U2VjdGlvblRleHRGaWVsZDpNYXhNc2dTaXplUHJvcDpNYXhNc2dTaXplIikpKTsKICAgICAgICAgc2VsZWN0LnNlbGVjdEJ5VmlzaWJsZVRleHQobWF4TXNnU2l6ZSk7Ci0gICAgICAgIAorCiAgICAgICAgIGNsaWNrQW5kV2FpdCgiZm9ybTE6cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOnNhdmVCdXR0b24iKTsKICAgICAgICAgYXNzZXJ0VHJ1ZShpc0VsZW1lbnRTYXZlU3VjY2Vzc2Z1bCgibGFiZWxfc3VuNCIsIk5ldyB2YWx1ZXMgc3VjY2Vzc2Z1bGx5IHNhdmVkLiIpKTsKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0RXF1YWxzKHRvdGFsQ29ubiwgZ2V0VmFsdWUoImZvcm0xOnByb3BlcnR5U2hlZXQ6cHJvcGVydHlTZWN0aW9uVGV4dEZpZWxkOlRvdGFsQ29ubnNQcm9wOlRvdGFsQ29ubnMiLCAidmFsdWUiKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhtYXhNc2dTaXplLCBnZXRWYWx1ZSgiZm9ybTE6cHJvcGVydHlTaGVldDpwcm9wZXJ0eVNlY3Rpb25UZXh0RmllbGQ6TWF4TXNnU2l6ZVByb3A6TWF4TXNnU2l6ZSIsICJ2YWx1ZSIpKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9KVk1SZXBvcnRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9KVk1SZXBvcnRUZXN0LmphdmEKaW5kZXggMWYyMjlkYy4uMTQyYmY2MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvSlZNUmVwb3J0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0pWTVJlcG9ydFRlc3QuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEplcmVteSBMdgogICoKICAqLwpAQCAtMzUsNyArMzUsNyBAQAogICAgICAgICBjbGlja0FuZFdhaXQoInRyZWVGb3JtOnRyZWU6YXBwbGljYXRpb25TZXJ2ZXI6YXBwbGljYXRpb25TZXJ2ZXJfbGluayIpOwogICAgICAgICBhc3NlcnRFcXVhbHMoIkpWTSBSZXBvcnQiLGdldFRleHQoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnNlcnZlckdlbmVyYWxQcm9wU2hlZXQ6anZtUHJvcDpqdm1saW5rIikpOwogICAgICAgICBTdHJpbmcgd2luSGFuZGxlQmVmb3JlID0gZHJpdmVyLmdldFdpbmRvd0hhbmRsZSgpOwotICAgICAgICAKKwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnNlcnZlckdlbmVyYWxQcm9wU2hlZXQ6anZtUHJvcDpqdm1saW5rIik7CiAgICAgICAgIGZvcihTdHJpbmcgd2luSGFuZGxlIDogZHJpdmVyLmdldFdpbmRvd0hhbmRsZXMoKSl7CiAgICAgICAgICAgICBkcml2ZXIuc3dpdGNoVG8oKS53aW5kb3cod2luSGFuZGxlKTsKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgaXNFbGVtZW50UHJlc2VudCgicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6cHJvcGVydHlTaGVldDp2aWV3UHJvcGVydHlTZWN0aW9uOlZpZXdQcm9wOlZpZXciKTsKICAgICAgICAgYXNzZXJ0VHJ1ZShnZXRUZXh0KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTpwcm9wZXJ0eVNoZWV0OnJlcG9ydFByb3BlcnR5U2VjdGlvbjpSZXBvcnRQcm9wOlJlcG9ydCIpLmNvbnRhaW5zKCJPcGVyYXRpbmcgU3lzdGVtIEluZm9ybWF0aW9uIikpOwogICAgICAgICBkcml2ZXIuY2xvc2UoKTsKLSAgICAgICAgCisKICAgICAgICAgZHJpdmVyLnN3aXRjaFRvKCkud2luZG93KHdpbkhhbmRsZUJlZm9yZSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvSmF2YU1haWxUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9KYXZhTWFpbFRlc3QuamF2YQppbmRleCBlMjRmMTBmLi43YzU4Yzk3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9KYXZhTWFpbFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9KYXZhTWFpbFRlc3QuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIAogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEplcmVteSBMdgogICoKICAqLwpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBDbHVzdGVyVGVzdCBjbHVzdGVyVGVzdCA9IG5ldyBDbHVzdGVyVGVzdCgpOwogICAgICAgICBzdGFuZGFsb25lVGVzdC5kZWxldGVBbGxTdGFuZGFsb25lSW5zdGFuY2VzKCk7CiAgICAgICAgIGNsdXN0ZXJUZXN0LmRlbGV0ZUFsbENsdXN0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgY2xpY2tBbmRXYWl0KCJ0cmVlRm9ybTp0cmVlOnJlc291cmNlczptYWlsUmVzb3VyY2VzOm1haWxSZXNvdXJjZXNfbGluayIpOwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOm5ld0J1dHRvbiIpOwogCkBAIC01OCw3ICs1OCw3IEBACiAgICAgICAgIHNsZWVwKDUwMCk7CiAgICAgICAgIHNldEZpZWxkVmFsdWUoImZvcm06YmFzaWNUYWJsZTpyb3dHcm91cDE6MDpjb2w0OmNvbDFTdCIsICJkZXNjcmlwdGlvbiIpOwogICAgICAgICBjbGlja0FuZFdhaXQoImZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOm5ld0J1dHRvbiIpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgcHJlZml4ID0gZ2V0VGFibGVSb3dCeVZhbHVlKCJwcm9wZXJ0eUZvcm06cmVzb3VyY2VzVGFibGUiLCByZXNvdXJjZU5hbWUsICJjb2wxIik7CiAgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZU5hbWUsIGdldFRleHQocHJlZml4ICsgImNvbDE6bGluayIpKTsKIApAQCAtNzIsMTIgKzcyLDEyIEBACiAgICAgICAgIFN0cmluZyBzZWxlY3RJZCA9IHByZWZpeCArICJjb2wwOnNlbGVjdCI7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbihzZWxlY3RJZCk7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnJlc291cmNlc1RhYmxlOnRvcEFjdGlvbnNHcm91cDE6YnV0dG9uMyIpOwotICAgICAgICAKKwogICAgICAgICAvL3Rlc3QgZW5hYmxlIGJ1dHRvbgogICAgICAgICB3YWl0Zm9yQnRuRGlzYWJsZSgicHJvcGVydHlGb3JtOnJlc291cmNlc1RhYmxlOnRvcEFjdGlvbnNHcm91cDE6YnV0dG9uMiIpOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oc2VsZWN0SWQpOwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjIiKTsKLSAgICAgICAgCisKICAgICAgICAgd2FpdGZvckJ0bkRpc2FibGUoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjIiKTsKICAgICAgICAgZGVsZXRlUm93KCJwcm9wZXJ0eUZvcm06cmVzb3VyY2VzVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpidXR0b24xIiwgInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZSIsIHJlc291cmNlTmFtZSk7CiAgICAgfQpAQCAtMTAyLDcgKzEwMiw3IEBACiAgICAgICAgIHNldEZpZWxkVmFsdWUoImZvcm06cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDpkZXNjUHJvcDpkZXNjIiwgZGVzY3JpcHRpb24pOwogICAgICAgICBpbnQgY291bnQgPSBhZGRUYWJsZVJvdygiZm9ybTpiYXNpY1RhYmxlIiwgImZvcm06YmFzaWNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmFkZFNoYXJlZFRhYmxlQnV0dG9uIik7CiAKLSAgICAgICAgCisKICAgICAgICAgc2xlZXAoNTAwKTsKICAgICAgICAgc2V0RmllbGRWYWx1ZSgiZm9ybTpiYXNpY1RhYmxlOnJvd0dyb3VwMTowOmNvbDI6Y29sMVN0IiwgInByb3BlcnR5IitnZW5lcmF0ZVJhbmRvbVN0cmluZygpKTsKICAgICAgICAgc2xlZXAoNTAwKTsKQEAgLTExNyw3ICsxMTcsNyBAQAogCiAgICAgICAgIGNsaWNrQW5kV2FpdCgiZm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6bmV3QnV0dG9uIik7CiAKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHByZWZpeCA9IGdldFRhYmxlUm93QnlWYWx1ZSgicHJvcGVydHlGb3JtOnJlc291cmNlc1RhYmxlIiwgcmVzb3VyY2VOYW1lLCAiY29sMSIpOwogICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2VOYW1lLCBnZXRUZXh0KHByZWZpeCArICJjb2wxOmxpbmsiKSk7CiAKQEAgLTEzMiwxMiArMTMyLDEyIEBACiAgICAgICAgIFN0cmluZyBzZWxlY3RJZCA9IHByZWZpeCArICJjb2wwOnNlbGVjdCI7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbihzZWxlY3RJZCk7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnJlc291cmNlc1RhYmxlOnRvcEFjdGlvbnNHcm91cDE6YnV0dG9uMyIpOwotICAgICAgICAKKwogICAgICAgICAvL3Rlc3QgZW5hYmxlIGJ1dHRvbgogICAgICAgICB3YWl0Zm9yQnRuRGlzYWJsZSgicHJvcGVydHlGb3JtOnJlc291cmNlc1RhYmxlOnRvcEFjdGlvbnNHcm91cDE6YnV0dG9uMiIpOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oc2VsZWN0SWQpOwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjIiKTsKLSAgICAgICAgCisKICAgICAgICAgLy90ZXN0IG1hbmFnZSB0YXJnZXQKICAgICAgICAgd2FpdGZvckJ0bkRpc2FibGUoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjIiKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKGNsaWNrSWQpOwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbigiZm9ybTp0YXJnZXRTZWN0aW9uOnRhcmdldFNlY3Rpb25JZDphZGRSZW1vdmVQcm9wOmNvbW1vbkFkZFJlbW92ZTpjb21tb25BZGRSZW1vdmVfcmVtb3ZlQnV0dG9uIik7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbigiZm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6c2F2ZUJ1dHRvbiIpOwogCi0gICAgICAgIAorCiAgICAgICAgIGdvdG9EYXNQYWdlKCk7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgidHJlZUZvcm06dHJlZTpyZXNvdXJjZXM6bWFpbFJlc291cmNlczptYWlsUmVzb3VyY2VzX2xpbmsiKTsKICAgICAgICAgZGVsZXRlUm93KCJwcm9wZXJ0eUZvcm06cmVzb3VyY2VzVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpidXR0b24xIiwgInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZSIsIHJlc291cmNlTmFtZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9KYXZhTWVzc2FnZVNlcnZpY2VUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9KYXZhTWVzc2FnZVNlcnZpY2VUZXN0LmphdmEKaW5kZXggYzI2OTA2OC4uMjQ3MmIwOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvSmF2YU1lc3NhZ2VTZXJ2aWNlVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0phdmFNZXNzYWdlU2VydmljZVRlc3QuamF2YQpAQCAtNDgsNyArNDgsNyBAQAogICAgICAgICBzZXRGaWVsZFZhbHVlKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTpiYXNpY1RhYmxlOnJvd0dyb3VwMTowOmNvbDM6Y29sMVN0IiwgInZhbHVlIik7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpzYXZlQnV0dG9uIik7CiAgICAgICAgIGFzc2VydFRydWUoaXNFbGVtZW50U2F2ZVN1Y2Nlc3NmdWwoImxhYmVsX3N1bjQiLCJOZXcgdmFsdWVzIHN1Y2Nlc3NmdWxseSBzYXZlZC4iKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGdvdG9EYXNQYWdlKCk7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgidHJlZUZvcm06dHJlZTpjb25maWd1cmF0aW9uczpzZXJ2ZXItY29uZmlnOmptc0NvbmZpZ3VyYXRpb246am1zQ29uZmlndXJhdGlvbl9saW5rIik7CiAKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgYXNzZXJ0RXF1YWxzKGludGVydmFsLCBnZXRWYWx1ZSgicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDppbnRlcnZhbFByb3A6SW50ZXJ2YWwiLCAidmFsdWUiKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhhdHRlbXB0cywgZ2V0VmFsdWUoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6YXR0ZW1wdHNQcm9wOkF0dGVtcHRzIiwgInZhbHVlIikpOwogICAgICAgICBhc3NlcnRUYWJsZVJvd0NvdW50KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTpiYXNpY1RhYmxlIiwgY291bnQpOwotICAgICAgICAKKwogICAgICAgICAvL2RlbGV0ZSB0aGUgcHJvcGVydHkgdXNlZCB0byB0ZXN0CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbigicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6YmFzaWNUYWJsZTpfdGFibGVBY3Rpb25zVG9wOl9zZWxlY3RNdWx0aXBsZUJ1dHRvbjpfc2VsZWN0TXVsdGlwbGVCdXR0b25faW1hZ2UiKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTpiYXNpY1RhYmxlOnRvcEFjdGlvbnNHcm91cDE6YnV0dG9uMSIpOwpAQCAtODEsNyArODEsNyBAQAogICAgICAgICBzZXRGaWVsZFZhbHVlKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDpuZXdQYXNzd29yZFByb3A6TmV3UGFzc3dvcmQiLCAiYWRtaW4iKTsKICAgICAgICAgc2V0RmllbGRWYWx1ZSgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6Y29uZmlybVBhc3N3b3JkUHJvcDpDb25maXJtUGFzc3dvcmQiLCAiYWRtaW4iKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOm5ld0J1dHRvbiIpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgcHJlZml4ID0gZ2V0VGFibGVSb3dCeVZhbHVlKCJwcm9wZXJ0eUZvcm06Y29uZmlncyIsIGhvc3RUZXh0LCAiY29sTmFtZSIpOwogICAgICAgICBhc3NlcnRFcXVhbHMoaG9zdFRleHQsIGdldFRleHQocHJlZml4ICsgImNvbE5hbWU6bGluayIpKTsKIApAQCAtODksNyArODksNyBAQAogICAgICAgICBjbGlja0J5SWRBY3Rpb24oY2xpY2tJZCk7CiAgICAgICAgIGFzc2VydEVxdWFscyhob3N0LCBnZXRWYWx1ZSgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6SG9zdFByb3A6SG9zdCIsICJ2YWx1ZSIpKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOmNhbmNlbEJ1dHRvbiIpOwotICAgICAgICAKKwogICAgICAgICAvL2RlbGV0ZSByZWxhdGVkIGptcyBob3N0CiAgICAgICAgIFN0cmluZyBkZWxldGVSb3cgPSBwcmVmaXggKyAiY29sMDpzZWxlY3QiOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oZGVsZXRlUm93KTsKQEAgLTE4OSw3ICsxODksNyBAQAogLy8gICAgICAgIFN0cmluZyBzZWxlY3RJZCA9IHByZWZpeCArICJjb2wwOnNlbGVjdCI7CiAvLyAgICAgICAgY2xpY2tCeUlkQWN0aW9uKHNlbGVjdElkKTs7CiAvLyAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06Y29uZmlnczp0b3BBY3Rpb25zR3JvdXAxOmZsdXNoQnV0dG9uIik7Ci0vLyAgICAgICAgCisvLwogLy8gICAgICAgIGdvdG9EYXNQYWdlKCk7CiAvLyAgICAgICAgY2xpY2tBbmRXYWl0KCJ0cmVlRm9ybTp0cmVlOmFwcGxpY2F0aW9uU2VydmVyOmFwcGxpY2F0aW9uU2VydmVyX2xpbmsiKTsKIC8vICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpzZXJ2ZXJJbnN0VGFiczpqbXNQaHlzRGVzdCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvSmRiY1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0pkYmNUZXN0LmphdmEKaW5kZXggNzAyMDdmYS4uY2JmNDUyYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvSmRiY1Rlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9KZGJjVGVzdC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKIC8qKgotICogCisgKgogICogQGF1dGhvciBKZXJlbXkgTHYKICAqCiAgKi8KQEAgLTMyLDcgKzMyLDcgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0pEQkNfVEFCTEUgPSAicHJvcGVydHlGb3JtOnBvb2xUYWJsZSI7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfUkVTT1VSQ0VfVEFCTEUgPSAicHJvcGVydHlGb3JtOnJlc291cmNlc1RhYmxlIjsKLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFBvb2xQaW5nKCkgewogICAgICAgICBnb3RvRGFzUGFnZSgpOwpAQCAtNTQsMTQgKzU0LDE0IEBACiAgICAgICAgIHNldEZpZWxkVmFsdWUoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnByb3BlcnR5U2hlZXQ6Z2VuZXJhbFByb3BlcnR5U2hlZXQ6am5kaVByb3A6bmFtZSIsIHBvb2xOYW1lKTsKICAgICAgICAgU2VsZWN0IHNlbGVjdCA9IG5ldyBTZWxlY3QoZHJpdmVyLmZpbmRFbGVtZW50KEJ5LmlkKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTpwcm9wZXJ0eVNoZWV0OmdlbmVyYWxQcm9wZXJ0eVNoZWV0OnJlc1R5cGVQcm9wOnJlc1R5cGUiKSkpOwogICAgICAgICBzZWxlY3Quc2VsZWN0QnlWaXNpYmxlVGV4dCgiamF2YXguc3FsLkRhdGFTb3VyY2UiKTsKLSAgICAgICAgCisKICAgICAgICAgU2VsZWN0IHNlbGVjdDEgPSBuZXcgU2VsZWN0KGRyaXZlci5maW5kRWxlbWVudChCeS5pZCgicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6cHJvcGVydHlTaGVldDpnZW5lcmFsUHJvcGVydHlTaGVldDpkYlByb3A6ZGIiKSkpOwogICAgICAgICBzZWxlY3QxLnNlbGVjdEJ5VmlzaWJsZVRleHQoIkRlcmJ5Iik7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpuZXh0QnV0dG9uIik7CiAKICAgICAgICAgc2V0RmllbGRWYWx1ZSgiZm9ybTI6c2hlZXQ6Z2VuZXJhbFNoZWV0OmRlc2NQcm9wOmRlc2MiLCBkZXNjcmlwdGlvbik7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgiZm9ybTI6cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOmZpbmlzaEJ1dHRvbiIpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgcHJlZml4ID0gZ2V0VGFibGVSb3dCeVZhbHVlKElEX0pEQkNfVEFCTEUsIHBvb2xOYW1lLCAiY29sMSIpOwogICAgICAgICBhc3NlcnRFcXVhbHMocG9vbE5hbWUsIGdldFRleHQocHJlZml4ICsgImNvbDE6bGluayIpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKGRlc2NyaXB0aW9uLCBnZXRUZXh0KHByZWZpeCArICJjb2w0OnR5cGVEZXNjIikpOwpAQCAtODksNyArODksNyBAQAogICAgICAgICBzZXRGaWVsZFZhbHVlKCJmb3JtMjpzaGVldDpnZW5lcmFsU2hlZXQ6ZGVzY1Byb3A6ZGVzYyIsIGRlc2NyaXB0aW9uKTsKICAgICAgICAgc2V0RmllbGRWYWx1ZSgiZm9ybTI6c2hlZXQ6Z2VuZXJhbFNoZWV0OmRzUHJvcDpkYXRhc291cmNlRmllbGQiLCBwb29sTmFtZSArICJEYXRhU291cmNlIik7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgiZm9ybTI6cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOmZpbmlzaEJ1dHRvbiIpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgcHJlZml4ID0gZ2V0VGFibGVSb3dCeVZhbHVlKElEX0pEQkNfVEFCTEUsIHBvb2xOYW1lLCAiY29sMSIpOwogICAgICAgICBhc3NlcnRFcXVhbHMocG9vbE5hbWUsIGdldFRleHQocHJlZml4ICsgImNvbDE6bGluayIpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKGRlc2NyaXB0aW9uLCBnZXRUZXh0KHByZWZpeCArICJjb2w0OnR5cGVEZXNjIikpOwpAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgICAgIENsdXN0ZXJUZXN0IGNsdXN0ZXJUZXN0ID0gbmV3IENsdXN0ZXJUZXN0KCk7CiAgICAgICAgIHN0YW5kYWxvbmVUZXN0LmRlbGV0ZUFsbFN0YW5kYWxvbmVJbnN0YW5jZXMoKTsKICAgICAgICAgY2x1c3RlclRlc3QuZGVsZXRlQWxsQ2x1c3RlcigpOwotICAgICAgIAorCiAgICAgICAgIGNsaWNrQW5kV2FpdCgidHJlZUZvcm06dHJlZTpyZXNvdXJjZXM6SkRCQzpqZGJjUmVzb3VyY2VzOmpkYmNSZXNvdXJjZXNfbGluayIpOwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOm5ld0J1dHRvbiIpOwogCkBAIC0xMzEsMTQgKzEzMSwxNCBAQAogCiAgICAgICAgIC8vdGVzdCBkaXNhYmxlIGJ1dHRvbgogICAgICAgICB0ZXN0RGlzYWJsZUJ0bihjbGlja0lkKTsKLSAgICAgICAgCisKICAgICAgICAgLy90ZXN0IGVuYWJsZSBidXR0b24KICAgICAgICAgdGVzdEVuYWJsZUJ0bihjbGlja0lkKTsKLSAgICAgICAgCisKICAgICAgICAgLy9kaXNhYmxlIHRoZSBqZGJjIHJlc291cmNlIHNvIHRoYXQgaXQgY2FuIGJlIGRlbGV0ZSBzdWNjZXNzZnVsbHkKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKGNsaWNrSWQpOwogICAgICAgICB0ZXN0RGlzYWJsZUJ0bihjbGlja0lkKTsKLSAgICAgICAgCisKICAgICAgICAgZGVsZXRlUm93KCJwcm9wZXJ0eUZvcm06cmVzb3VyY2VzVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpidXR0b24xIiwgSURfUkVTT1VSQ0VfVEFCTEUsIGpuZGlOYW1lKTsKICAgICB9CiAKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICAgICBTdHJpbmcgcHJlZml4ID0gZ2V0VGFibGVSb3dCeVZhbHVlKElEX1JFU09VUkNFX1RBQkxFLCBqbmRpTmFtZSwgImNvbDEiKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKGpuZGlOYW1lLCBnZXRUZXh0KHByZWZpeCArICJjb2wxOmxpbmsiKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhkZXNjcmlwdGlvbiwgZ2V0VGV4dChwcmVmaXggKyAiY29sNDp0eXBlRGVzYyIpKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGNsaWNrSWQgPSBwcmVmaXggKyAiY29sMTpsaW5rIjsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKGNsaWNrSWQpOwogICAgICAgICBhc3NlcnRUYWJsZVJvd0NvdW50KCJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZSIsIGNvdW50KTsKQEAgLTE4NSw4ICsxODUsOCBAQAogICAgICAgICBTdHJpbmcgc2VsZWN0SWQgPSBwcmVmaXggKyAiY29sMDpzZWxlY3QiOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oc2VsZWN0SWQpOwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjMiKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy90ZXN0IGVuYWJsZSBidXR0b24KICAgICAgICAgd2FpdGZvckJ0bkRpc2FibGUoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjIiKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKHNlbGVjdElkKTsKQEAgLTIwMiwxMSArMjAyLDExIEBACiAgICAgICAgIHNlbGVjdDEuc2VsZWN0QnlWaXNpYmxlVGV4dCgic2VydmVyIik7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbigiZm9ybTp0YXJnZXRTZWN0aW9uOnRhcmdldFNlY3Rpb25JZDphZGRSZW1vdmVQcm9wOmNvbW1vbkFkZFJlbW92ZTpjb21tb25BZGRSZW1vdmVfcmVtb3ZlQnV0dG9uIik7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbigiZm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6c2F2ZUJ1dHRvbiIpOwotICAgICAgICAKKwogICAgICAgICAvL2RlbGV0ZSBqZGJjIHJlc291cmNlCiAgICAgICAgIGNsaWNrQW5kV2FpdCgidHJlZUZvcm06dHJlZTpyZXNvdXJjZXM6SkRCQzpqZGJjUmVzb3VyY2VzOmpkYmNSZXNvdXJjZXNfbGluayIpOwogICAgICAgICBkZWxldGVSb3coInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjEiLCAicHJvcGVydHlGb3JtOnJlc291cmNlc1RhYmxlIiwgam5kaU5hbWUpOwotICAgICAgICAKKwogICAgICAgICAvL0RlbGV0ZSB0aGUgaW5zdGFuY2UKICAgICAgICAgY2xpY2tBbmRXYWl0KCJ0cmVlRm9ybTp0cmVlOnN0YW5kYWxvbmVUcmVlTm9kZTpzdGFuZGFsb25lVHJlZU5vZGVfbGluayIpOwogICAgICAgICBkZWxldGVSb3coInByb3BlcnR5Rm9ybTppbnN0YW5jZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjEiLCAicHJvcGVydHlGb3JtOmluc3RhbmNlc1RhYmxlIiwgaW5zdGFuY2VOYW1lKTsKQEAgLTI2NCw4ICsyNjQsOCBAQAogICAgICAgICAgICAgYXNzZXJ0RmFsc2UoaXNUZXh0UHJlc2VudChwcmVmaXgsIHRhcmdldCwgInByb3BlcnR5Rm9ybTpjbHVzdGVyc1RhYmxlIikpOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIAorCisKIAogICAgIHByaXZhdGUgdm9pZCB0ZXN0RGlzYWJsZUJ0bihTdHJpbmcgY2xpY2tJZCkgewogICAgICAgICBpc0VsZW1lbnRQcmVzZW50KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOnNhdmVCdXR0b24iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0ptc1Jlc291cmNlc1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0ptc1Jlc291cmNlc1Rlc3QuamF2YQppbmRleCBmNTViZmYwLi5iNjdjYjM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9KbXNSZXNvdXJjZXNUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvSm1zUmVzb3VyY2VzVGVzdC5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiBpbXBvcnQgb3JnLm9wZW5xYS5zZWxlbml1bS5zdXBwb3J0LnVpLlNlbGVjdDsKIAogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEplcmVteSBMdgogICoKICAqLwpAQCAtNDgsNyArNDgsNyBAQAogICAgICAgICBTZWxlY3Qgc2VsZWN0MSA9IG5ldyBTZWxlY3QoZHJpdmVyLmZpbmRFbGVtZW50KEJ5LmlkKCJmb3JtOnByb3BlcnR5U2hlZXQ6cG9vbFByb3BlcnR5U2hlZXQ6dHJhbnNwcm9wOnRyYW5zIikpKTsKICAgICAgICAgc2VsZWN0MS5zZWxlY3RCeVZpc2libGVUZXh0KCJMb2NhbFRyYW5zYWN0aW9uIik7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgiZm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6bmV3QnV0dG9uIik7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBwcmVmaXggPSBnZXRUYWJsZVJvd0J5VmFsdWUoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZSIsIHBvb2xOYW1lLCAiY29sTmFtZSIpOwogICAgICAgICBhc3NlcnRFcXVhbHMocG9vbE5hbWUsIGdldFRleHQocHJlZml4ICsgImNvbE5hbWU6bGluayIpKTsKIApAQCAtNTYsMTIgKzU2LDEyIEBACiAgICAgICAgIFN0cmluZyBzZWxlY3RJZCA9IHByZWZpeCArICJjb2xTZWxlY3Q6c2VsZWN0IjsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKHNlbGVjdElkKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cmVzb3VyY2VzVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpkaXNhYmxlQnV0dG9uIik7Ci0gICAgICAgIAorCiAgICAgICAgIC8vdGVzdCBlbmFibGUgYnV0dG9uCiAgICAgICAgIHdhaXRmb3JCdG5EaXNhYmxlKCJwcm9wZXJ0eUZvcm06cmVzb3VyY2VzVGFibGU6dG9wQWN0aW9uc0dyb3VwMTplbmFibGVCdXR0b24iKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKHNlbGVjdElkKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cmVzb3VyY2VzVGFibGU6dG9wQWN0aW9uc0dyb3VwMTplbmFibGVCdXR0b24iKTsKLSAgICAgICAgCisKICAgICAgICAgd2FpdGZvckJ0bkRpc2FibGUoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmRlbGV0ZUNvbm5CdXR0b24iKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKHNlbGVjdElkKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cmVzb3VyY2VzVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpkZWxldGVDb25uQnV0dG9uIik7CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgIGZpbmFsIFN0cmluZyBwb29sTmFtZSA9ICJKTVNDb25uRmFjdG9yeSIgKyBnZW5lcmF0ZVJhbmRvbVN0cmluZygpOwogICAgICAgICBmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb24gPSAiVGVzdCBQb29sIC0gIiArIHBvb2xOYW1lOwogICAgICAgICBmaW5hbCBTdHJpbmcgaW5zdGFuY2VOYW1lID0gInN0YW5kYWxvbmUiICsgZ2VuZXJhdGVSYW5kb21TdHJpbmcoKTsKLSAgICAgICAgCisKICAgICAgICAgU3RhbmRhbG9uZVRlc3QgaW5zdGFuY2VUZXN0ID0gbmV3IFN0YW5kYWxvbmVUZXN0KCk7CiAgICAgICAgIGluc3RhbmNlVGVzdC5jcmVhdGVTdGFuZEFsb25lSW5zdGFuY2UoaW5zdGFuY2VOYW1lKTsKIApAQCAtODcsMTQgKzg3LDE0IEBACiAgICAgICAgIHNldEZpZWxkVmFsdWUoImZvcm06cHJvcGVydHlTaGVldDpnZW5lcmFsUHJvcGVydHlTaGVldDpkZXNjUHJvcDpkZXNjUHJvcCIsIGRlc2NyaXB0aW9uKTsKICAgICAgICAgU2VsZWN0IHNlbGVjdDEgPSBuZXcgU2VsZWN0KGRyaXZlci5maW5kRWxlbWVudChCeS5pZCgiZm9ybTpwcm9wZXJ0eVNoZWV0OnBvb2xQcm9wZXJ0eVNoZWV0OnRyYW5zcHJvcDp0cmFucyIpKSk7CiAgICAgICAgIHNlbGVjdDEuc2VsZWN0QnlWaXNpYmxlVGV4dCgiTG9jYWxUcmFuc2FjdGlvbiIpOwotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBTZWxlY3Qgc2VsZWN0MiA9IG5ldyBTZWxlY3QoZHJpdmVyLmZpbmRFbGVtZW50KEJ5LmlkKCJmb3JtOnRhcmdldFNlY3Rpb246dGFyZ2V0U2VjdGlvbklkOmFkZFJlbW92ZVByb3A6Y29tbW9uQWRkUmVtb3ZlX2F2YWlsYWJsZSIpKSk7CiAgICAgICAgIHNlbGVjdDIuc2VsZWN0QnlWaXNpYmxlVGV4dChpbnN0YW5jZU5hbWUpOwogICAgICAgICBzZWxlY3QyLnNlbGVjdEJ5VmlzaWJsZVRleHQoInNlcnZlciIpOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oImZvcm06dGFyZ2V0U2VjdGlvbjp0YXJnZXRTZWN0aW9uSWQ6YWRkUmVtb3ZlUHJvcDpjb21tb25BZGRSZW1vdmU6Y29tbW9uQWRkUmVtb3ZlX2FkZEJ1dHRvbiIpOwogICAgICAgICBjbGlja0FuZFdhaXQoImZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOm5ld0J1dHRvbiIpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgcHJlZml4ID0gZ2V0VGFibGVSb3dCeVZhbHVlKCJwcm9wZXJ0eUZvcm06cmVzb3VyY2VzVGFibGUiLCBwb29sTmFtZSwgImNvbE5hbWUiKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHBvb2xOYW1lLCBnZXRUZXh0KHByZWZpeCArICJjb2xOYW1lOmxpbmsiKSk7CiAKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICBTdHJpbmcgc2VsZWN0SWQgPSBwcmVmaXggKyAiY29sU2VsZWN0OnNlbGVjdCI7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbihzZWxlY3RJZCk7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnJlc291cmNlc1RhYmxlOnRvcEFjdGlvbnNHcm91cDE6ZGlzYWJsZUJ1dHRvbiIpOwotICAgICAgICAKKwogICAgICAgICAvL3Rlc3QgZW5hYmxlIGJ1dHRvbgogICAgICAgICB3YWl0Zm9yQnRuRGlzYWJsZSgicHJvcGVydHlGb3JtOnJlc291cmNlc1RhYmxlOnRvcEFjdGlvbnNHcm91cDE6ZW5hYmxlQnV0dG9uIik7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbihzZWxlY3RJZCk7CkBAIC0xMTgsNyArMTE4LDcgQEAKICAgICAgICAgc2VsZWN0NS5zZWxlY3RCeVZpc2libGVUZXh0KCJzZXJ2ZXIiKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJmb3JtOnRhcmdldFNlY3Rpb246dGFyZ2V0U2VjdGlvbklkOmFkZFJlbW92ZVByb3A6Y29tbW9uQWRkUmVtb3ZlOmNvbW1vbkFkZFJlbW92ZV9yZW1vdmVCdXR0b24iKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJmb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpzYXZlQnV0dG9uIik7Ci0gICAgICAgIAorCiAKICAgICAgICAgZ290b0Rhc1BhZ2UoKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJ0cmVlRm9ybTp0cmVlOnJlc291cmNlczpqbXNSZXNvdXJjZXM6am1zQ29ubmVjdGlvbkZhY3RvcmllczpqbXNDb25uZWN0aW9uRmFjdG9yaWVzX2xpbmsiKTsKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmRlbGV0ZUNvbm5CdXR0b24iKTsKICAgICAgICAgY2xvc2VBbGVydEFuZEdldEl0c1RleHQoKTsKICAgICAgICAgd2FpdEZvckFsZXJ0UHJvY2VzcygibW9kYWxCb2R5Iik7Ci0gICAgICAgIAorCiAgICAgICAgIC8vRGVsZXRlIHRoZSBpbnN0YW5jZQogICAgICAgICBjbGlja0FuZFdhaXQoInRyZWVGb3JtOnRyZWU6c3RhbmRhbG9uZVRyZWVOb2RlOnN0YW5kYWxvbmVUcmVlTm9kZV9saW5rIik7CiAgICAgICAgIGRlbGV0ZVJvdygicHJvcGVydHlGb3JtOmluc3RhbmNlc1RhYmxlOnRvcEFjdGlvbnNHcm91cDE6YnV0dG9uMSIsICJwcm9wZXJ0eUZvcm06aW5zdGFuY2VzVGFibGUiLCBpbnN0YW5jZU5hbWUpOwpAQCAtMTQ5LDIxICsxNDksMjEgQEAKICAgICAgICAgc2V0RmllbGRWYWx1ZSgiZm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6bmFtZVByb3A6bmFtZSIsICJzb21lUGh5c2ljYWxEZXN0aW5hdGlvbiIpOwogICAgICAgICBzZXRGaWVsZFZhbHVlKCJmb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDpkZXNjUHJvcDpkZXNjIiwgZGVzY3JpcHRpb24pOwogICAgICAgICBjbGlja0FuZFdhaXQoImZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOm5ld0J1dHRvbiIpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgcHJlZml4ID0gZ2V0VGFibGVSb3dCeVZhbHVlKCJwcm9wZXJ0eUZvcm06cmVzb3VyY2VzVGFibGUiLCByZXNvdXJjZU5hbWUsICJjb2xOYW1lIik7CiAgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZU5hbWUsIGdldFRleHQocHJlZml4ICsgImNvbE5hbWU6bGluayIpKTsKLSAgICAgICAgCisKIAogICAgICAgICAvL3Rlc3QgZGlzYWJsZSBidXR0b24KICAgICAgICAgU3RyaW5nIHNlbGVjdElkID0gcHJlZml4ICsgImNvbFNlbGVjdDpzZWxlY3QiOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oc2VsZWN0SWQpOwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmRpc2FibGVCdXR0b24iKTsKLSAgICAgICAgCisKICAgICAgICAgLy90ZXN0IGVuYWJsZSBidXR0b24KICAgICAgICAgd2FpdGZvckJ0bkRpc2FibGUoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmVuYWJsZUJ1dHRvbiIpOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oc2VsZWN0SWQpOwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmVuYWJsZUJ1dHRvbiIpOwotICAgICAgICAKKwogICAgICAgICB3YWl0Zm9yQnRuRGlzYWJsZSgicHJvcGVydHlGb3JtOnJlc291cmNlc1RhYmxlOnRvcEFjdGlvbnNHcm91cDE6ZGVsZXRlRGVzdEJ1dHRvbiIpOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oc2VsZWN0SWQpOwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmRlbGV0ZURlc3RCdXR0b24iKTsKQEAgLTE5Myw3ICsxOTMsNyBAQAogICAgICAgICBjbGlja0J5SWRBY3Rpb24oImZvcm06dGFyZ2V0U2VjdGlvbjp0YXJnZXRTZWN0aW9uSWQ6YWRkUmVtb3ZlUHJvcDpjb21tb25BZGRSZW1vdmU6Y29tbW9uQWRkUmVtb3ZlX2FkZEJ1dHRvbiIpOwogCiAgICAgICAgIGNsaWNrQW5kV2FpdCgiZm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6bmV3QnV0dG9uIik7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBwcmVmaXggPSBnZXRUYWJsZVJvd0J5VmFsdWUoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZSIsIHJlc291cmNlTmFtZSwgImNvbE5hbWUiKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlTmFtZSwgZ2V0VGV4dChwcmVmaXggKyAiY29sTmFtZTpsaW5rIikpOwogCkBAIC0yMDEsNyArMjAxLDcgQEAKICAgICAgICAgU3RyaW5nIHNlbGVjdElkID0gcHJlZml4ICsgImNvbFNlbGVjdDpzZWxlY3QiOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oc2VsZWN0SWQpOwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmRpc2FibGVCdXR0b24iKTsKLSAgICAgICAgCisKICAgICAgICAgLy90ZXN0IGVuYWJsZSBidXR0b24KICAgICAgICAgd2FpdGZvckJ0bkRpc2FibGUoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmVuYWJsZUJ1dHRvbiIpOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oc2VsZWN0SWQpOwpAQCAtMjE3LDE0ICsyMTcsMTQgQEAKICAgICAgICAgc2VsZWN0NS5zZWxlY3RCeVZpc2libGVUZXh0KCJzZXJ2ZXIiKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJmb3JtOnRhcmdldFNlY3Rpb246dGFyZ2V0U2VjdGlvbklkOmFkZFJlbW92ZVByb3A6Y29tbW9uQWRkUmVtb3ZlOmNvbW1vbkFkZFJlbW92ZV9yZW1vdmVCdXR0b24iKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJmb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpzYXZlQnV0dG9uIik7Ci0gICAgICAgIAorCiAgICAgICAgIGdvdG9EYXNQYWdlKCk7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgidHJlZUZvcm06dHJlZTpyZXNvdXJjZXM6am1zUmVzb3VyY2VzOmptc0Rlc3RpbmF0aW9uUmVzb3VyY2VzOmptc0Rlc3RpbmF0aW9uUmVzb3VyY2VzX2xpbmsiKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKHNlbGVjdElkKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cmVzb3VyY2VzVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpkZWxldGVEZXN0QnV0dG9uIik7CiAgICAgICAgIGNsb3NlQWxlcnRBbmRHZXRJdHNUZXh0KCk7CiAgICAgICAgIHdhaXRGb3JBbGVydFByb2Nlc3MoIm1vZGFsQm9keSIpOwotICAgICAgICAKKwogICAgICAgICAvL0RlbGV0ZSB0aGUgaW5zdGFuY2UKICAgICAgICAgY2xpY2tBbmRXYWl0KCJ0cmVlRm9ybTp0cmVlOnN0YW5kYWxvbmVUcmVlTm9kZTpzdGFuZGFsb25lVHJlZU5vZGVfbGluayIpOwogICAgICAgICBkZWxldGVSb3coInByb3BlcnR5Rm9ybTppbnN0YW5jZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjEiLCAicHJvcGVydHlGb3JtOmluc3RhbmNlc1RhYmxlIiwgaW5zdGFuY2VOYW1lKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0puZGlUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9KbmRpVGVzdC5qYXZhCmluZGV4IGIzNjg0OTMuLjJiOWU5OTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0puZGlUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvSm5kaVRlc3QuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEplcmVteSBMdgogICoKICAqLwpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICBTZWxlY3Qgc2VsZWN0ID0gbmV3IFNlbGVjdChkcml2ZXIuZmluZEVsZW1lbnQoQnkuaWQoImZvcm06cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDpjcDpDbGFzc25hbWUiKSkpOwogICAgICAgICBzZWxlY3Quc2VsZWN0QnlWaXNpYmxlVGV4dCgiamF2YS5sYW5nLkRvdWJsZSIpOwogICAgICAgICBpbnQgY291bnQgPSBhZGRUYWJsZVJvdygiZm9ybTpiYXNpY1RhYmxlIiwgImZvcm06YmFzaWNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmFkZFNoYXJlZFRhYmxlQnV0dG9uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHNsZWVwKDUwMCk7CiAgICAgICAgIHNldEZpZWxkVmFsdWUoImZvcm06YmFzaWNUYWJsZTpyb3dHcm91cDE6MDpjb2wyOmNvbDFTdCIsICJwcm9wZXJ0eSIrZ2VuZXJhdGVSYW5kb21TdHJpbmcoKSk7CiAgICAgICAgIHNsZWVwKDUwMCk7CkBAIC01Niw3ICs1Niw3IEBACiAKICAgICAgICAgU3RyaW5nIHByZWZpeCA9IGdldFRhYmxlUm93QnlWYWx1ZSgicHJvcGVydHlGb3JtOnJlc291cmNlc1RhYmxlIiwgcmVzb3VyY2VOYW1lLCAiY29sMSIpOwogICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2VOYW1lLCBnZXRUZXh0KHByZWZpeCArICJjb2wxOmxpbmsiKSk7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBjbGlja0lkID0gcHJlZml4ICsgImNvbDE6bGluayI7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbihjbGlja0lkKTsKICAgICAgICAgYXNzZXJ0VGFibGVSb3dDb3VudCgiZm9ybTE6YmFzaWNUYWJsZSIsIGNvdW50KTsKQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgU3RyaW5nIHNlbGVjdElkID0gcHJlZml4ICsgImNvbDA6c2VsZWN0IjsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKHNlbGVjdElkKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cmVzb3VyY2VzVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpidXR0b24zIik7Ci0gICAgICAgIAorCiAgICAgICAgIC8vdGVzdCBlbmFibGUgYnV0dG9uCiAgICAgICAgIHdhaXRmb3JCdG5EaXNhYmxlKCJwcm9wZXJ0eUZvcm06cmVzb3VyY2VzVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpidXR0b24yIik7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbihzZWxlY3RJZCk7CkBAIC04MCwxMCArODAsMTAgQEAKICAgICBwdWJsaWMgdm9pZCB0ZXN0Q3VzdG9tUmVzb3VyY2VzV2l0aFRhcmdldHMoKSB7CiAgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAiY3VzdG9tUmVzb3VyY2UiICsgZ2VuZXJhdGVSYW5kb21TdHJpbmcoKTsKICAgICAgICAgZmluYWwgU3RyaW5nIGluc3RhbmNlTmFtZSA9ICJzdGFuZGFsb25lIiArIGdlbmVyYXRlUmFuZG9tU3RyaW5nKCk7Ci0gICAgICAgCisKICAgICAgICAgU3RhbmRhbG9uZVRlc3QgaW5zdGFuY2VUZXN0ID0gbmV3IFN0YW5kYWxvbmVUZXN0KCk7CiAgICAgICAgIGluc3RhbmNlVGVzdC5jcmVhdGVTdGFuZEFsb25lSW5zdGFuY2UoaW5zdGFuY2VOYW1lKTsKLSAgICAgICAgCisKICAgICAgICAgY2xpY2tBbmRXYWl0KCJ0cmVlRm9ybTp0cmVlOnJlc291cmNlczpqbmRpOmN1c3RvbVJlc291cmNlczpjdXN0b21SZXNvdXJjZXNfbGluayIpOwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOm5ld0J1dHRvbiIpOwogCkBAIC05OSw3ICs5OSw3IEBACiAgICAgICAgIHNldEZpZWxkVmFsdWUoImZvcm06YmFzaWNUYWJsZTpyb3dHcm91cDE6MDpjb2wzOmNvbDFTdCIsICJ2YWx1ZSIpOwogICAgICAgICBzbGVlcCg1MDApOwogICAgICAgICBzZXRGaWVsZFZhbHVlKCJmb3JtOmJhc2ljVGFibGU6cm93R3JvdXAxOjA6Y29sNDpjb2wxU3QiLCAiZGVzY3JpcHRpb24iKTsKLSAgICAgICAgCisKICAgICAgICAgU2VsZWN0IHNlbGVjdDIgPSBuZXcgU2VsZWN0KGRyaXZlci5maW5kRWxlbWVudChCeS5pZCgiZm9ybTp0YXJnZXRTZWN0aW9uOnRhcmdldFNlY3Rpb25JZDphZGRSZW1vdmVQcm9wOmNvbW1vbkFkZFJlbW92ZV9hdmFpbGFibGUiKSkpOwogICAgICAgICBzZWxlY3QyLnNlbGVjdEJ5VmlzaWJsZVRleHQoaW5zdGFuY2VOYW1lKTsKICAgICAgICAgc2VsZWN0Mi5zZWxlY3RCeVZpc2libGVUZXh0KCJzZXJ2ZXIiKTsKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiAgICAgICAgIFN0cmluZyBwcmVmaXggPSBnZXRUYWJsZVJvd0J5VmFsdWUoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZSIsIHJlc291cmNlTmFtZSwgImNvbDEiKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlTmFtZSwgZ2V0VGV4dChwcmVmaXggKyAiY29sMTpsaW5rIikpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgY2xpY2tJZCA9IHByZWZpeCArICJjb2wxOmxpbmsiOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oY2xpY2tJZCk7CiAgICAgICAgIGFzc2VydFRhYmxlUm93Q291bnQoImZvcm0xOmJhc2ljVGFibGUiLCBjb3VudCk7CkBAIC0xMTksMTIgKzExOSwxMiBAQAogICAgICAgICBTdHJpbmcgc2VsZWN0SWQgPSBwcmVmaXggKyAiY29sMDpzZWxlY3QiOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oc2VsZWN0SWQpOwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjMiKTsKLSAgICAgICAgCisKICAgICAgICAgLy90ZXN0IGVuYWJsZSBidXR0b24KICAgICAgICAgd2FpdGZvckJ0bkRpc2FibGUoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjIiKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKHNlbGVjdElkKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cmVzb3VyY2VzVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpidXR0b24yIik7Ci0gICAgICAgIAorCiAgICAgICAgIHdhaXRmb3JCdG5EaXNhYmxlKCJwcm9wZXJ0eUZvcm06cmVzb3VyY2VzVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpidXR0b24yIik7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbihjbGlja0lkKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJmb3JtMTpyZXNFZGl0VGFiczp0YXJnZXRUYWIiKTsKQEAgLTEzNCw3ICsxMzQsNyBAQAogICAgICAgICBzZWxlY3Q1LnNlbGVjdEJ5VmlzaWJsZVRleHQoInNlcnZlciIpOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oImZvcm06dGFyZ2V0U2VjdGlvbjp0YXJnZXRTZWN0aW9uSWQ6YWRkUmVtb3ZlUHJvcDpjb21tb25BZGRSZW1vdmU6Y29tbW9uQWRkUmVtb3ZlX3JlbW92ZUJ1dHRvbiIpOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oImZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOnNhdmVCdXR0b24iKTsKLSAgICAgICAgCisKICAgICAgICAgZ290b0Rhc1BhZ2UoKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJ0cmVlRm9ybTp0cmVlOnJlc291cmNlczpqbmRpOmN1c3RvbVJlc291cmNlczpjdXN0b21SZXNvdXJjZXNfbGluayIpOwogICAgICAgICBkZWxldGVSb3coInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjEiLCAicHJvcGVydHlGb3JtOnJlc291cmNlc1RhYmxlIiwgcmVzb3VyY2VOYW1lKTsKQEAgLTE0Miw3ICsxNDIsNyBAQAogICAgICAgICBjbGlja0FuZFdhaXQoInRyZWVGb3JtOnRyZWU6c3RhbmRhbG9uZVRyZWVOb2RlOnN0YW5kYWxvbmVUcmVlTm9kZV9saW5rIik7CiAgICAgICAgIGRlbGV0ZVJvdygicHJvcGVydHlGb3JtOmluc3RhbmNlc1RhYmxlOnRvcEFjdGlvbnNHcm91cDE6YnV0dG9uMSIsICJwcm9wZXJ0eUZvcm06aW5zdGFuY2VzVGFibGUiLCBpbnN0YW5jZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEV4dGVybmFsUmVzb3VyY2VzKCkgewogICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gImV4dGVybmFsUmVzb3VyY2UiICsgZ2VuZXJhdGVSYW5kb21TdHJpbmcoKTsKQEAgLTE3NCwxMiArMTc0LDEyIEBACiAKICAgICAgICAgU3RyaW5nIHByZWZpeCA9IGdldFRhYmxlUm93QnlWYWx1ZSgicHJvcGVydHlGb3JtOnJlc291cmNlc1RhYmxlIiwgcmVzb3VyY2VOYW1lLCAiY29sMSIpOwogICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2VOYW1lLCBnZXRUZXh0KHByZWZpeCArICJjb2wxOmxpbmsiKSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vdGVzdCBkaXNhYmxlIGJ1dHRvbgogICAgICAgICBTdHJpbmcgc2VsZWN0SWQgPSBwcmVmaXggKyAiY29sMDpzZWxlY3QiOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oc2VsZWN0SWQpOwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjMiKTsKLSAgICAgICAgCisKICAgICAgICAgLy90ZXN0IGVuYWJsZSBidXR0b24KICAgICAgICAgd2FpdGZvckJ0bkRpc2FibGUoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjIiKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKHNlbGVjdElkKTsKQEAgLTIyNCw3ICsyMjQsNyBAQAogCiAgICAgICAgIFN0cmluZyBwcmVmaXggPSBnZXRUYWJsZVJvd0J5VmFsdWUoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZSIsIHJlc291cmNlTmFtZSwgImNvbDEiKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlTmFtZSwgZ2V0VGV4dChwcmVmaXggKyAiY29sMTpsaW5rIikpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgY2xpY2tJZCA9IHByZWZpeCArICJjb2wxOmxpbmsiOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oY2xpY2tJZCk7CiAgICAgICAgIGFzc2VydFRhYmxlUm93Q291bnQoImZvcm06YmFzaWNUYWJsZSIsIGNvdW50KTsKQEAgLTIzNCwxMiArMjM0LDEyIEBACiAgICAgICAgIFN0cmluZyBzZWxlY3RJZCA9IHByZWZpeCArICJjb2wwOnNlbGVjdCI7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbihzZWxlY3RJZCk7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnJlc291cmNlc1RhYmxlOnRvcEFjdGlvbnNHcm91cDE6YnV0dG9uMyIpOwotICAgICAgICAKKwogICAgICAgICAvL3Rlc3QgZW5hYmxlIGJ1dHRvbgogICAgICAgICB3YWl0Zm9yQnRuRGlzYWJsZSgicHJvcGVydHlGb3JtOnJlc291cmNlc1RhYmxlOnRvcEFjdGlvbnNHcm91cDE6YnV0dG9uMiIpOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oc2VsZWN0SWQpOwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjIiKTsKLSAgICAgICAgCisKICAgICAgICAgd2FpdGZvckJ0bkRpc2FibGUoInByb3BlcnR5Rm9ybTpyZXNvdXJjZXNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjIiKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKGNsaWNrSWQpOwogICAgICAgICBjbGlja0FuZFdhaXQoImZvcm06cmVzRWRpdFRhYnM6dGFyZ2V0VGFiIik7CkBAIC0yNDksNyArMjQ5LDcgQEAKICAgICAgICAgc2VsZWN0NS5zZWxlY3RCeVZpc2libGVUZXh0KCJzZXJ2ZXIiKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJmb3JtOnRhcmdldFNlY3Rpb246dGFyZ2V0U2VjdGlvbklkOmFkZFJlbW92ZVByb3A6Y29tbW9uQWRkUmVtb3ZlOmNvbW1vbkFkZFJlbW92ZV9yZW1vdmVCdXR0b24iKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJmb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpzYXZlQnV0dG9uIik7Ci0gICAgICAgIAorCiAgICAgICAgIC8vRGVsZXRlIHRoZSBFeHRlcm5hbCByZXNvdXJjZQogICAgICAgICBnb3RvRGFzUGFnZSgpOwogICAgICAgICBjbGlja0FuZFdhaXQoInRyZWVGb3JtOnRyZWU6cmVzb3VyY2VzOmpuZGk6ZXh0ZXJuYWxSZXNvdXJjZXM6ZXh0ZXJuYWxSZXNvdXJjZXNfbGluayIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvSnZtU2V0dGluZ3NUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9Kdm1TZXR0aW5nc1Rlc3QuamF2YQppbmRleCBjN2NhZmZjLi5lMzZjODE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9Kdm1TZXR0aW5nc1Rlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9Kdm1TZXR0aW5nc1Rlc3QuamF2YQpAQCAtMjIsMTQgKzIyLDE0IEBACiAKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC4qOwogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEplcmVteSBMdgogICoKICAqLwogcHVibGljIGNsYXNzIEp2bVNldHRpbmdzVGVzdCBleHRlbmRzIEJhc2VTZWxlbml1bVRlc3RDbGFzcyB7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9KVk1fT1BUSU9OU19UQUJMRSA9ICJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZSI7Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RKdm1HZW5lcmFsU2V0dGluZ3MoKSB7CiAgICAgICAgIGdvdG9EYXNQYWdlKCk7CkBAIC00NSwxMiArNDUsMTIgQEAKICAgICAgICAgc2V0RmllbGRWYWx1ZSgicHJvcGVydHlGb3JtOmJhc2ljVGFibGU6cm93R3JvdXAxOjA6Y29sNDpjb2wxU3QiLCAiYyIpOwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6c2F2ZUJ1dHRvbiIpOwogICAgICAgICBhc3NlcnRUcnVlKGlzRWxlbWVudFNhdmVTdWNjZXNzZnVsKCJsYWJlbF9zdW40IiwiTmV3IHZhbHVlcyBzdWNjZXNzZnVsbHkgc2F2ZWQuIikpOwotICAgICAgICAKKwogICAgICAgICBnb3RvRGFzUGFnZSgpOwogICAgICAgICBjbGlja0FuZFdhaXQoInRyZWVGb3JtOnRyZWU6Y29uZmlndXJhdGlvbnM6c2VydmVyLWNvbmZpZzpqdm1TZXR0aW5nczpqdm1TZXR0aW5nc19saW5rIik7CiAgICAgICAgIGFzc2VydFRhYmxlUm93Q291bnQoInByb3BlcnR5Rm9ybTpiYXNpY1RhYmxlIiwgY291bnQpOwogICAgICAgICBhc3NlcnRUcnVlKGRyaXZlci5maW5kRWxlbWVudChCeS5pZCgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6ZGVidWdFbmFibGVkUHJvcDpkZWJ1ZyIpKS5pc1NlbGVjdGVkKCkpOwotICAgICAgICAKKwogICAgICAgICAvL2RlbGV0ZSB0aGUgcHJvcGVydHkgdXNlZCB0byB0ZXN0CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbigicHJvcGVydHlGb3JtOmJhc2ljVGFibGU6X3RhYmxlQWN0aW9uc1RvcDpfc2VsZWN0TXVsdGlwbGVCdXR0b246X3NlbGVjdE11bHRpcGxlQnV0dG9uX2ltYWdlIik7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbigicHJvcGVydHlGb3JtOmJhc2ljVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpidXR0b24xIik7CkBAIC03MiwxMyArNzIsMTMgQEAKICAgICAgICAgc2V0RmllbGRWYWx1ZSgicHJvcGVydHlGb3JtOmJhc2ljVGFibGU6cm93R3JvdXAxOjA6Y29sMzpjb2wxU3QiLCBqdm1PcHRpb25OYW1lKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOnNhdmVCdXR0b24iKTsKICAgICAgICAgYXNzZXJ0VHJ1ZShpc0VsZW1lbnRTYXZlU3VjY2Vzc2Z1bCgibGFiZWxfc3VuNCIsIk5ldyB2YWx1ZXMgc3VjY2Vzc2Z1bGx5IHNhdmVkLiIpKTsKLSAgICAgICAgCisKICAgICAgICAgZ290b0Rhc1BhZ2UoKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJ0cmVlRm9ybTp0cmVlOmNvbmZpZ3VyYXRpb25zOnNlcnZlci1jb25maWc6anZtU2V0dGluZ3M6anZtU2V0dGluZ3NfbGluayIpOwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpqYXZhQ29uZmlnVGFiOmp2bU9wdGlvbnMiKTsKICAgICAgICAgc2xlZXAoNTAwMCk7CiAgICAgICAgIGFzc2VydFRhYmxlUm93Q291bnQoSURfSlZNX09QVElPTlNfVEFCTEUsIGNvdW50KTsKLSAgICAgICAgCisKICAgICAgICAgLy9kZWxldGUgdGhlIHByb3BlcnR5IHVzZWQgdG8gdGVzdAogICAgICAgICBTdHJpbmcgcHJlZml4ID0gZ2V0VGFibGVSb3dCeVZhbCgicHJvcGVydHlGb3JtOmJhc2ljVGFibGUiLCBqdm1PcHRpb25OYW1lLCAiY29sMzpjb2wxU3QiKTsKICAgICAgICAgU3RyaW5nIHNlbGVjdElkID0gcHJlZml4ICsgImNvbDE6c2VsZWN0IjsKQEAgLTEyMSw3ICsxMjEsNyBAQAogICAgIHB1YmxpYyB2b2lkIHRlc3RKdm1Qcm9maWxlckZvclJ1bm5pbmdJbnN0YW5jZSgpIHsKICAgICAgICAgdGVzdFByb2ZpbGVyRm9ySW5zdGFuY2UgKHRydWUpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEp2bVByb2ZpbGVyRm9yU3RvcHBlZEluc3RhbmNlKCkgewogICAgICAgICB0ZXN0UHJvZmlsZXJGb3JJbnN0YW5jZSAoZmFsc2UpOwpAQCAtMTU1LDcgKzE1NSw3IEBACiAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpkZWxldGVCdXR0b24iKTsKICAgICAgICAgYXNzZXJ0VHJ1ZShjbG9zZUFsZXJ0QW5kR2V0SXRzVGV4dCgpLm1hdGNoZXMoIl5Qcm9maWxlciB3aWxsIGJlIGRlbGV0ZWRcXC4gIENvbnRpbnVlW1xcc1xcU10kIikpOwogICAgICAgICBhc3NlcnRUcnVlKGRyaXZlci5maW5kRWxlbWVudChCeS5pZCgicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpuZXdCdXR0b24iKSkuaXNEaXNwbGF5ZWQoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChzdGFydCl7CiAgICAgICAgICAgICBzdC5nb3RvU3RhbmRhbG9uZUluc3RhbmNlc1BhZ2UoKTsKICAgICAgICAgICAgIHN0LnN0b3BJbnN0YW5jZShpbnN0YW5jZU5hbWUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvTGlmZWN5Y2xlTW9kdWxlc1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0xpZmVjeWNsZU1vZHVsZXNUZXN0LmphdmEKaW5kZXggY2JjMDQwNS4uOTlkOGNhMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvTGlmZWN5Y2xlTW9kdWxlc1Rlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9MaWZlY3ljbGVNb2R1bGVzVGVzdC5qYXZhCkBAIC0yMywxNCArMjMsMTQgQEAKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogCiAvKioKLSAqIAorICoKICAqIEBhdXRob3IgamVyZW15bHYKICAqCiAgKi8KIHB1YmxpYyBjbGFzcyBMaWZlY3ljbGVNb2R1bGVzVGVzdCBleHRlbmRzIEJhc2VTZWxlbml1bVRlc3RDbGFzcyB7CiAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9MSUZFQ1lDTEVfVEFCTEUgPSAicHJvcGVydHlGb3JtOmRlcGxveVRhYmxlIjsKLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdExpZmVjeWNsZU1vZHVsZXMoKSB7CiAgICAgICAgIGZpbmFsIFN0cmluZyBsaWZlY3ljbGVOYW1lID0gIlRlc3RMaWZlY3ljbGUiK2dlbmVyYXRlUmFuZG9tU3RyaW5nKCk7CkBAIC00OCwxNCArNDgsMTQgQEAKICAgICAgICAgfSBjYXRjaCAoRXJyb3IgZSkgewogICAgICAgICAgICAgdmVyaWZpY2F0aW9uRXJyb3JzLmFwcGVuZChlLnRvU3RyaW5nKCkpOwogICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgLy90ZXN0IERpc2FibGUgYnV0dG9uIGFuZCBhZGQgc29tZSBwcm9wZXJ0eSAKKworICAgICAgICAvL3Rlc3QgRGlzYWJsZSBidXR0b24gYW5kIGFkZCBzb21lIHByb3BlcnR5CiAgICAgICAgIFN0cmluZyBjbGlja0lkID0gZ2V0VGFibGVSb3dCeVZhbHVlKElEX0xJRkVDWUNMRV9UQUJMRSwgbGlmZWN5Y2xlTmFtZSwgImNvbDEiKSsiY29sMDpzZWxlY3QiOwogICAgICAgICB0ZXN0RGlzYWJsZUJ1dHRvbihjbGlja0lkLCBwcmVmaXgpOwotICAgICAgICAKKwogICAgICAgICAvL3Rlc3QgRW5hYmxlIGJ1dHRvbiBhbmQgZGVsZXRlIHNvbWUgcHJvcGVydHkKICAgICAgICAgdGVzdEVuYWJsZUJ1dHRvbihjbGlja0lkLCBwcmVmaXgpOwotICAgICAgICAKKwogICAgICAgICAvL2RlbGV0ZSB0aGUgbGlmZWN5Y2xlCiAgICAgICAgIHRlc3REZWxldGVCdXR0b24oY2xpY2tJZCk7CiAgICAgfQpAQCAtODEsNyArODEsNyBAQAogICAgICAgICBjbGlja0J5SWRBY3Rpb24oInByb3BlcnR5Rm9ybTpkZXBsb3lUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjIiKTsKICAgICAgICAgaXNDaGVja2JveFNlbGVjdGVkKGNsaWNrSWQpOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24ocHJlZml4ICsgImNvbDE6bGluayIpOwotICAgICAgICAKKwogICAgICAgICAvL2RlbGV0ZSBwcm9wZXJ0eQogICAgICAgICBpc0VsZW1lbnRQcmVzZW50KCJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmFkZFNoYXJlZFRhYmxlQnV0dG9uIik7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbigicHJvcGVydHlGb3JtOmJhc2ljVGFibGU6cm93R3JvdXAxOjA6Y29sMTpzZWxlY3QiKTsKQEAgLTg5LDE0ICs4OSwxNCBAQAogICAgICAgICBjbGlja0J5SWRBY3Rpb24oInByb3BlcnR5Rm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6c2F2ZUJ1dHRvbiIpOwogICAgICAgICBhc3NlcnRFcXVhbHModHJ1ZSwgZHJpdmVyLmZpbmRFbGVtZW50KEJ5LmlkKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDpzdGF0dXNFZGl0OnN0YXR1cyIpKS5pc1NlbGVjdGVkKCkpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCB0ZXN0RGlzYWJsZUJ1dHRvbihTdHJpbmcgY2xpY2tJZCwgU3RyaW5nIHByZWZpeCkgewogICAgICAgICBjbGlja0J5SWRBY3Rpb24oY2xpY2tJZCk7CiAgICAgICAgIGlzRWxlbWVudFByZXNlbnQoInByb3BlcnR5Rm9ybTpkZXBsb3lUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjMiKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJwcm9wZXJ0eUZvcm06ZGVwbG95VGFibGU6dG9wQWN0aW9uc0dyb3VwMTpidXR0b24zIik7CiAgICAgICAgIGlzQ2hlY2tib3hTZWxlY3RlZChjbGlja0lkKTsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKHByZWZpeCArICJjb2wxOmxpbmsiKTsKLSAgICAgICAgCisKICAgICAgICAgLy9hZGQgcHJvcGVydHkgYW5kIHZlcmlmeQogICAgICAgICBpc0VsZW1lbnRQcmVzZW50KCJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmFkZFNoYXJlZFRhYmxlQnV0dG9uIik7CiAgICAgICAgIGludCBsaWZlY3ljbGVQcm9wQ291bnQgPSBhZGRUYWJsZVJvdygicHJvcGVydHlGb3JtOmJhc2ljVGFibGUiLCAicHJvcGVydHlGb3JtOmJhc2ljVGFibGU6dG9wQWN0aW9uc0dyb3VwMTphZGRTaGFyZWRUYWJsZUJ1dHRvbiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvTG9nVmlld2VyVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvTG9nVmlld2VyVGVzdC5qYXZhCmluZGV4IDA2MmM0MmIuLjk2YzUzZmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0xvZ1ZpZXdlclRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9Mb2dWaWV3ZXJUZXN0LmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIGltcG9ydCBvcmcub3BlbnFhLnNlbGVuaXVtLkJ5OwogCiAvKioKLSAqIAorICoKICAqIEBhdXRob3IgSmVyZW15IEx2CiAgKgogICovCkBAIC0zOCwxMCArMzgsMTAgQEAKICAgICAgICAgZm9yKFN0cmluZyB3aW5IYW5kbGUgOiBkcml2ZXIuZ2V0V2luZG93SGFuZGxlcygpKXsKICAgICAgICAgICAgIGRyaXZlci5zd2l0Y2hUbygpLndpbmRvdyh3aW5IYW5kbGUpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGFzc2VydFRydWUoZHJpdmVyLmZpbmRFbGVtZW50KEJ5LmNsYXNzTmFtZSgiVHRsVHh0X3N1bjQiKSkuZ2V0VGV4dCgpLmVxdWFscygiTG9nIFZpZXdlciIpKTsKICAgICAgICAgZHJpdmVyLmNsb3NlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGRyaXZlci5zd2l0Y2hUbygpLndpbmRvdyh3aW5IYW5kbGVCZWZvcmUpOwogICAgIH0KIApAQCAtNTUsMTAgKzU1LDEwIEBACiAgICAgICAgIGZvcihTdHJpbmcgd2luSGFuZGxlIDogZHJpdmVyLmdldFdpbmRvd0hhbmRsZXMoKSl7CiAgICAgICAgICAgICBkcml2ZXIuc3dpdGNoVG8oKS53aW5kb3cod2luSGFuZGxlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBhc3NlcnRUcnVlKGRyaXZlci5maW5kRWxlbWVudChCeS5jbGFzc05hbWUoIlR0bFR4dF9zdW40IikpLmdldFRleHQoKS5lcXVhbHMoIlJhdyBMb2cgVmlld2VyIikpOwogICAgICAgICBkcml2ZXIuY2xvc2UoKTsKLSAgICAgICAgCisKICAgICAgICAgZHJpdmVyLnN3aXRjaFRvKCkud2luZG93KHdpbkhhbmRsZUJlZm9yZSk7CiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9Mb2dnZXJTZXR0aW5nc1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0xvZ2dlclNldHRpbmdzVGVzdC5qYXZhCmluZGV4IGJiNjg4YjIuLjk3MTQ2NmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0xvZ2dlclNldHRpbmdzVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL0xvZ2dlclNldHRpbmdzVGVzdC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CiAvKioKLSAqIAorICoKICAqIEBhdXRob3IgSmVyZW15IEx2CiAgKgogICovCkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgIGNsaWNrQW5kV2FpdCgiZm9ybTE6dGl0bGU6dG9wQnV0dG9uczpzYXZlQnV0dG9uIik7CiAgICAgICAgIGFzc2VydFRydWUoaXNFbGVtZW50U2F2ZVN1Y2Nlc3NmdWwoImxhYmVsX3N1bjQiLCJOZXcgdmFsdWVzIHN1Y2Nlc3NmdWxseSBzYXZlZC4iKSk7CiAgICAgICAgIGFzc2VydFRhYmxlUm93Q291bnQoImZvcm0xOmJhc2ljVGFibGUiLCBjb3VudCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vZGVsZXRlIHRoZSBwcm9wZXJ0eSB1c2VkIHRvIHRlc3QKICAgICAgICAgZ290b0Rhc1BhZ2UoKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJ0cmVlRm9ybTp0cmVlOmNvbmZpZ3VyYXRpb25zOnNlcnZlci1jb25maWc6bG9nZ2VyU2V0dGluZzpsb2dnZXJTZXR0aW5nX2xpbmsiKTsKQEAgLTEwMyw1ICsxMDMsNSBAQAogICAgICAgICB3YWl0Zm9yQnRuRGlzYWJsZSgiZm9ybTE6YmFzaWNUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjEiKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJmb3JtMTp0aXRsZTp0b3BCdXR0b25zOnNhdmVCdXR0b24iKTsKICAgICAgICAgYXNzZXJ0VHJ1ZShpc0VsZW1lbnRTYXZlU3VjY2Vzc2Z1bCgibGFiZWxfc3VuNCIsIk5ldyB2YWx1ZXMgc3VjY2Vzc2Z1bGx5IHNhdmVkLiIpKTsKLSAgICB9IAorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL01vbml0b3JpbmdUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9Nb25pdG9yaW5nVGVzdC5qYXZhCmluZGV4IGYzYTk5ZGEuLmQ5YjFiNDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL01vbml0b3JpbmdUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvTW9uaXRvcmluZ1Rlc3QuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEplcmVteSBMdgogICoKICAqLwpAQCAtMzQsMTUgKzM0LDE1IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1PTklUT1JfTEVWRUxfT0ZGID0gIk9GRiI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1PTklUT1JfTEVWRUxfTE9XID0gIkxPVyI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1PTklUT1JfTEVWRUxfSElHSCA9ICJISUdIIjsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNT05JVE9SX0xFVkVMX0NPTF9JRCA9ICJjb2wzIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9OSVRPUl9DT01QX0NPTF9JRCA9ICJjb2wyIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9OSVRPUl9DT01QX1NFTEVDVF9JRCA9ICJjb2wxIjsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRBUkdFVF9TRVJWRVJfVFlQRSA9ICJzZXJ2ZXIiOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRBUkdFVF9TVEFOREFMT05FX1RZUEUgPSAic3RhbmRhbG9uZSI7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFSR0VUX0NMVVNURVJfVFlQRSA9ICJjbHVzdGVyIjsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNT05JVE9SSU5HX0FQUExJQ0FUSU9OU19DT01QT05FTlRfRFJPUERPV05fSUQgPSAicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6cHJvcGVydHlTaGVldDp2aWV3UHJvcGVydHlTZWN0aW9uOkFwcGxpY2F0aW9uUHJvcDpDb21wb25lbnRWaWV3X2xpc3QiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNT05JVE9SSU5HX0FQUExJQ0FUSU9OU19BUFBMSUNBVElPTl9EUk9QRE9XTl9JRCA9ICJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTpwcm9wZXJ0eVNoZWV0OnZpZXdQcm9wZXJ0eVNlY3Rpb246QXBwbGljYXRpb25Qcm9wOlZpZXdfbGlzdCI7CiAKQEAgLTU5LDEwICs1OSwxMCBAQAogICAgICAgICBtb25pdG9yaW5nSnZtU3RhdHMoInNlcnZlciIsIFRBUkdFVF9TRVJWRVJfVFlQRSk7CiAgICAgICAgIG1vbml0b3JpbmdXZWJDb250YWluZXJTdGF0cygic2VydmVyIiwgVEFSR0VUX1NFUlZFUl9UWVBFKTsKICAgICAgICAgbW9uaXRvcmluZ1RyYW5zYWN0aW9uU2VydmljZVN0YXRzKCJzZXJ2ZXIiLCBUQVJHRVRfU0VSVkVSX1RZUEUpOwotICAgICAgICAKKwogLy8gICAgICAgIC8vVGhpcyBzZWVtcyBhIGJ1ZyB0byB0aGUgZ2xhc3NmaXNoIHY0IG5lZWQgdG8gYmUgcmVzb2x2ZWQhCiAvLyAgICAgICAgbW9uaXRvcmluZ1NlY3VyaXR5U3RhdHMoInNlcnZlciIsIFRBUkdFVF9TRVJWRVJfVFlQRSk7Ci0gICAgICAgIAorCiAgICAgICAgIG1vbml0b3JpbmdIdHRwU2VydmljZVN0YXRzKCJzZXJ2ZXIiLCBUQVJHRVRfU0VSVkVSX1RZUEUpOwogICAgIH0KIApAQCAtMjE0LDcgKzIxNCw3IEBACiAgICAgICAgIHNldE1vbml0b3JMZXZlbCgiVHJhbnNhY3Rpb24gU2VydmljZSIsIE1PTklUT1JfTEVWRUxfSElHSCwgZmFsc2UsIHRhcmdldCwgdGFyZ2V0VHlwZSk7CiAgICAgICAgIGdvVG9Nb25pdG9yaW5nU2VydmVyUGFnZSh0YXJnZXQsIHRhcmdldFR5cGUpOwogICAgICAgICB2ZXJpZnlNb25pdG9yaW5nU3RhdCgidHhuU2VydmljZVN0YXRzIiwgdHJhbnNhY3Rpb25TZXJ2aWNlRGF0YSwgdHJhbnNhY3Rpb25TZXJ2aWNlSGVhZGVyKTsKLSAgICAgICAgCisKICAgICAgICAgc2V0TW9uaXRvckxldmVsKCJUcmFuc2FjdGlvbiBTZXJ2aWNlIiwgTU9OSVRPUl9MRVZFTF9PRkYsIGZhbHNlLCB0YXJnZXQsIHRhcmdldFR5cGUpOwogICAgIH0KIApAQCAtMjc2LDcgKzI3Niw3IEBACiAgICAgICAgIGFzc2VydEVxdWFscyhzdGF0RGF0YSwgZHJpdmVyLmZpbmRFbGVtZW50KEJ5LmlkKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTpiYXNpY1RhYmxlOiIgKyBzdGF0KyAiOjA6Y29sMiIpKS5nZXRUZXh0KCkpOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oInByb3BlcnR5Rm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOmJhc2ljVGFibGU6IiArIHN0YXQgKyAiOl9ncm91cEhlYWRlcjpfZ3JvdXBQYW5lbFRvZ2dsZUJ1dHRvbjpfZ3JvdXBQYW5lbFRvZ2dsZUJ1dHRvbl9pbWFnZSIpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBnb1RvTW9uaXRvcmluZ0FwcGxpY2F0aW9uc1BhZ2UoU3RyaW5nIHRhcmdldCwgU3RyaW5nIHRhcmdldFR5cGUpIHsKICAgICAgICAgaWYgKHRhcmdldFR5cGUuZXF1YWxzKFRBUkdFVF9TRVJWRVJfVFlQRSkpIHsKICAgICAgICAgICAgIGNsaWNrQW5kV2FpdCgidHJlZUZvcm06dHJlZTphcHBsaWNhdGlvblNlcnZlcjphcHBsaWNhdGlvblNlcnZlcl9saW5rIik7CkBAIC0zNjMsNyArMzYzLDcgQEAKICAgICAgICAgICAgIHdhaXRGb3JBbGVydFByb2Nlc3MoIm1vZGFsQm9keSIpOwogICAgICAgICAgICAgd2FpdGZvckJ0bkRpc2FibGUoInByb3BlcnR5Rm9ybTpkZXBsb3lUYWJsZTp0b3BBY3Rpb25zR3JvdXAxOmJ1dHRvbjEiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvL3N0YXJ0IHRvIGRlcGxveSBhcHBsaWNhdGlvbnMKICAgICAgICAgZHJpdmVyLmdldChiYXNlVXJsICsgImNvbW1vbi9hcHBsaWNhdGlvbnMvdXBsb2FkRnJhbWUuanNmIik7CiAgICAgICAgIGRyaXZlci5maW5kRWxlbWVudChCeS5pZCgiZm9ybTpzaGVldDE6c2VjdGlvbjE6cHJvcDE6dXBsb2FkUmRCdG46dXBsb2FkUmRCdG5fbGFiZWwiKSk7CkBAIC0zNzIsNyArMzcyLDcgQEAKICAgICAgICAgLy93YWl0Rm9yQ29uZGl0aW9uKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybTp3YXI6cHNlY3Rpb246bmFtZVByb3A6YXBwTmFtZScpLnZhbHVlID09ICciICsgYXBwTmFtZSArICInIiwgMzAwMDAwKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKGFwcE5hbWUsIGdldFZhbHVlKCJmb3JtOndhcjpwc2VjdGlvbjpuYW1lUHJvcDphcHBOYW1lIiwgInZhbHVlIikpOwogICAgICAgICBjbGlja0FuZFdhaXQoImZvcm06dGl0bGU6dG9wQnV0dG9uczp1cGxvYWRCdXR0b24iKTsKLSAgICAgICAgCisKICAgICAgICAgZ290b0Rhc1BhZ2UoKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJ0cmVlRm9ybTp0cmVlOmFwcGxpY2F0aW9uczphcHBsaWNhdGlvbnNfbGluayIpOwogICAgICAgICBTdHJpbmcgcHJlZml4ID0gZ2V0VGFibGVSb3dCeVZhbHVlKCJwcm9wZXJ0eUZvcm06ZGVwbG95VGFibGUiLCBhcHBOYW1lLCAiY29sMSIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvTXNnU2VjdXJpdHlUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9Nc2dTZWN1cml0eVRlc3QuamF2YQppbmRleCA5MDYwMGI2Li4zMzU4ODdjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9Nc2dTZWN1cml0eVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9Nc2dTZWN1cml0eVRlc3QuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEplcmVteSBMdgogICoKICAqLwpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgICAgIGNsaWNrQW5kV2FpdCgidHJlZUZvcm06dHJlZTpjb25maWd1cmF0aW9uczpjb25maWd1cmF0aW9uc19saW5rIik7CiAgICAgICAgIGRlbGV0ZVJvdygicHJvcGVydHlGb3JtOmNvbmZpZ3M6dG9wQWN0aW9uc0dyb3VwMTpidXR0b24xIiwgInByb3BlcnR5Rm9ybTpjb25maWdzIiwgY29uZmlnTmFtZSk7CiAgICAgfQotICAgIAorCiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVBZGRpdGlvbmFsUHJvdmlkZXJzKCkgewpAQCAtMjMxLDcgKzIzMSw3IEBACiAgICAgICAgIFNlbGVjdCBzZWxlY3QgPSBuZXcgU2VsZWN0KGRyaXZlci5maW5kRWxlbWVudChCeS5pZCgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6Q29uZmlnUHJvcDpDb25maWciKSkpOwogICAgICAgICBzZWxlY3Quc2VsZWN0QnlWaXNpYmxlVGV4dChzcmNOYW1lKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOm9rQnV0dG9uIik7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBwcmVmaXggPSBnZXRUYWJsZVJvd0J5VmFsdWUoInByb3BlcnR5Rm9ybTpjb25maWdzIiwgbmV3Q29uZmlnTmFtZSwgImNvbDEiKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKG5ld0NvbmZpZ05hbWUsIGdldFRleHQocHJlZml4ICsgImNvbDE6bGluayIpKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9OZXR3b3JrQ29uZmlnVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvTmV0d29ya0NvbmZpZ1Rlc3QuamF2YQppbmRleCBjZTllYWQwLi4yYTgyYmU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9OZXR3b3JrQ29uZmlnVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL05ldHdvcmtDb25maWdUZXN0LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKIC8qKgotICogCisgKgogICogQGF1dGhvciBKZXJlbXkgTHYKICAqCiAgKi8KQEAgLTQ1LDEwICs0NSwxMCBAQAogICAgICAgICAgICAgc2VsZWN0LnNlbGVjdEJ5VmlzaWJsZVRleHQoImh0dHAtbGlzdGVuZXItMSIpOwogICAgICAgICAgICAgc2V0RmllbGRWYWx1ZSgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6cG9ydDpwb3J0IiwgIjEyMzQiKTsKICAgICAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpuZXdCdXR0b24iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gZ2V0VGFibGVSb3dCeVZhbHVlKCJwcm9wZXJ0eUZvcm06Y29uZmlncyIsIGxpc3RlbmVyTmFtZSwgImNvbDEiKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscyhsaXN0ZW5lck5hbWUsIGdldFRleHQocHJlZml4ICsgImNvbDE6bGluayIpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTdHJpbmcgY2xpY2tJZCA9IHByZWZpeCArICJjb2wxOmxpbmsiOwogICAgICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKGNsaWNrSWQpOwogCkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpjb25maWdzOnRvcEFjdGlvbnNHcm91cDE6bmV3QnV0dG9uIik7CiAgICAgICAgICAgICBzZXRGaWVsZFZhbHVlKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDpOYW1lUHJvcDpOYW1lIiwgY29uZmlnTmFtZSk7CiAgICAgICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6b2tCdXR0b24iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gZ2V0VGFibGVSb3dCeVZhbHVlKCJwcm9wZXJ0eUZvcm06Y29uZmlncyIsIGNvbmZpZ05hbWUsICJjb2wxIik7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoY29uZmlnTmFtZSwgZ2V0VGV4dChwcmVmaXggKyAiY29sMTpsaW5rIikpOwogICAgICAgICB9CkBAIC05OCwxMyArOTgsMTMgQEAKICAgICAgICAgICAgIHNldEZpZWxkVmFsdWUoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnRTZWN0aW9uVGV4dEZpZWxkOkJ1ZmZlclNpemVCeXRlczpCdWZmZXJTaXplQnl0ZXMiLCAiMTAwMCIpOwogICAgICAgICAgICAgc2V0RmllbGRWYWx1ZSgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6QWNjZXB0b3JUaHJlYWRzOkFjY2VwdG9yVGhyZWFkcyIsICItMSIpOwogICAgICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOm5ld0J1dHRvbiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSBnZXRUYWJsZVJvd0J5VmFsdWUoInByb3BlcnR5Rm9ybTpjb25maWdzIiwgdHJhbnNwb3J0TmFtZSwgImNvbDEiKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscyh0cmFuc3BvcnROYW1lLCBnZXRUZXh0KHByZWZpeCArICJjb2wxOmxpbmsiKSk7CiAKICAgICAgICAgICAgIFN0cmluZyBjbGlja0lkID0gcHJlZml4ICsgImNvbDE6bGluayI7CiAgICAgICAgICAgICBjbGlja0J5SWRBY3Rpb24oY2xpY2tJZCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYXNzZXJ0VHJ1ZShnZXRUZXh0KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDpuYW1lOm5hbWUiKS5lcXVhbHModHJhbnNwb3J0TmFtZSkpOwogICAgICAgICAgICAgU2VsZWN0IHNlbGVjdDEgPSBuZXcgU2VsZWN0KGRyaXZlci5maW5kRWxlbWVudChCeS5pZCgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6Qnl0ZUJ1ZmZlclR5cGU6Qnl0ZUJ1ZmZlclR5cGUiKSkpOwogICAgICAgICAgICAgYXNzZXJ0VHJ1ZShzZWxlY3QxLmdldEZpcnN0U2VsZWN0ZWRPcHRpb24oKS5nZXRBdHRyaWJ1dGUoInZhbHVlIikuZXF1YWxzKCJESVJFQ1QiKSk7CkBAIC0xNTUsNyArMTU1LDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOm5ld0J1dHRvbiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSBnZXRUYWJsZVJvd0J5VmFsdWUoInByb3BlcnR5Rm9ybTpjb25maWdzIiwgcHJvdG9jb2wsICJjb2wxIik7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMocHJvdG9jb2wsIGdldFRleHQocHJlZml4ICsgImNvbDE6bGluayIpKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvTm9kZVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL05vZGVUZXN0LmphdmEKaW5kZXggMTYzNTIwMy4uYzBkOTZhYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvTm9kZVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9Ob2RlVGVzdC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKIAogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEplcmVteSBMdgogICoKICAqLwpAQCAtNzgsMTAgKzc4LDEwIEBACiAgICAgICAgIGFzc2VydEVxdWFscygiU1NIIiwgZ2V0VGV4dChwcmVmaXggKyAiY29sVHlwZSIpKTsKIAogICAgICAgICAvL1ZlcmlmeSB0aGUgbm9kZSBpcyBjcmVhdGVkIHdpdGggdGhlIHZhbHVlIHNwZWNpZmllZC4KLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGNsaWNrSWQgPSBwcmVmaXggKyAiY29sMTpsaW5rIjsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKGNsaWNrSWQpOwotICAgICAgICAKKwogICAgICAgICBhc3NlcnRUcnVlKGdldFRleHQoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnRTZWN0aW9uVGV4dEZpZWxkOnN0YXRpY25hbWVQcm9wOklkU3RhdGljIikuZXF1YWxzKG5vZGVOYW1lKSk7CiAKICAgICAgICAgU2VsZWN0IHNlbGVjdDEgPSBuZXcgU2VsZWN0KGRyaXZlci5maW5kRWxlbWVudChCeS5pZCgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6dHlwZVByb3A6dHlwZSIpKSk7CkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICAgICAgICAgIGNsaWNrQnlJZEFjdGlvbihJRF9GT1JDRV9GSUVMRCk7CiAgICAgICAgIH0KICAgICAgICAgc2V0RmllbGRWYWx1ZSgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6c3NoQ29ubmVjdG9yU2VjdGlvbjpzc2hwb3J0OnNzaHBvcnQiLCAiMzQiKTsKLSAgICAgICAgCisKICAgICAgICAgU2VsZWN0IHNlbGVjdCA9IG5ldyBTZWxlY3QoZHJpdmVyLmZpbmRFbGVtZW50KEJ5LmlkKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlTaGVldDpzc2hDb25uZWN0b3JTZWN0aW9uOnBzU2VsZWN0ZWQ6cHNTZWxlY3RlZCIpKSk7CiAgICAgICAgIHNlbGVjdC5zZWxlY3RCeVZpc2libGVUZXh0KCJQYXNzd29yZCIpOwogCkBAIC0xMzAsNyArMTMwLDcgQEAKICAgICAgICAgLy9WZXJpZnkgdGhlIG5vZGUgaXMgY3JlYXRlZCB3aXRoIHRoZSB2YWx1ZSBzcGVjaWZpZWQuCiAgICAgICAgIFN0cmluZyBjbGlja0lkID0gcHJlZml4ICsgImNvbDE6bGluayI7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbihjbGlja0lkKTsKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0VHJ1ZShnZXRUZXh0KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDpzdGF0aWNuYW1lUHJvcDpJZFN0YXRpYyIpLmVxdWFscyhub2RlTmFtZSkpOwogCiAgICAgICAgIFNlbGVjdCBzZWxlY3QxID0gbmV3IFNlbGVjdChkcml2ZXIuZmluZEVsZW1lbnQoQnkuaWQoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnRTZWN0aW9uVGV4dEZpZWxkOnR5cGVQcm9wOnR5cGUiKSkpOwpAQCAtMjg4LDEwICsyODgsMTAgQEAKICAgICAgICAgYXNzZXJ0VHJ1ZShzZWxlY3QxLmdldEZpcnN0U2VsZWN0ZWRPcHRpb24oKS5nZXRBdHRyaWJ1dGUoInZhbHVlIikuZXF1YWxzKCJDT05GSUciKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygiTm9kZUhPU1RDQyIsIGdldFZhbHVlKElEX05PREVIT1NUX0ZJRUxELCAidmFsdWUiKSk7CiAgICAgICAgIHNldEZpZWxkVmFsdWUoSURfTk9ERUhPU1RfRklFTEQsICJuZXctTm9kZUhPU1RDQyIpOwotICAgICAgICAKKwogICAgICAgICBhc3NlcnRFcXVhbHMoIk5vZGVEaXJlY3RvcnlDQyIsIGdldFZhbHVlKElEX05PREVESVJFQ1RPUllfRklFTEQsICJ2YWx1ZSIpKTsKICAgICAgICAgc2V0RmllbGRWYWx1ZShJRF9OT0RFRElSRUNUT1JZX0ZJRUxELCAibmV3LU5vZGVEaXJlY3RvcnlDQyIpOwotICAgICAgICAKKwogICAgICAgICBhc3NlcnRFcXVhbHMoIi9Qcm9kdWN0Um9vdCIsIGdldFZhbHVlKElEX0NPTkZJR19JTlNUQUxMRElSX0ZJRUxELCAidmFsdWUiKSk7CiAgICAgICAgIHNldEZpZWxkVmFsdWUoSURfQ09ORklHX0lOU1RBTExESVJfRklFTEQsICIvbmV3LVByb2R1Y3RSb290Iik7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpzYXZlQnV0dG9uIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9SZXNvdXJjZUFkYXB0ZXJDb25maWdzVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvUmVzb3VyY2VBZGFwdGVyQ29uZmlnc1Rlc3QuamF2YQppbmRleCA2ZmE3N2NjLi41ZGU5MDNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9SZXNvdXJjZUFkYXB0ZXJDb25maWdzVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL1Jlc291cmNlQWRhcHRlckNvbmZpZ3NUZXN0LmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0Lio7CiAvKioKLSAqIAorICoKICAqIEBhdXRob3IgSmVyZW15IEx2CiAgKgogICovCkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgICAgICBTZWxlY3Qgc2VsZWN0MSA9IG5ldyBTZWxlY3QoZHJpdmVyLmZpbmRFbGVtZW50KEJ5LmlkKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDp0aHJlYWRQb29sc0lkUHJvcDp0aHJlYWRwb29sc2lkIikpKTsKICAgICAgICAgICAgIGFzc2VydFRydWUoc2VsZWN0MS5nZXRGaXJzdFNlbGVjdGVkT3B0aW9uKCkuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpLmVxdWFscygidGhyZWFkLXBvb2wtMSIpKTsKICAgICAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpjYW5jZWxCdXR0b24iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBSZW1vdmUgY29uZmlnCiAgICAgICAgICAgICBnb3RvRGFzUGFnZSgpOwogICAgICAgICAgICAgY2xpY2tBbmRXYWl0KCJ0cmVlRm9ybTp0cmVlOnJlc291cmNlczpyZXNvdXJjZUFkYXB0ZXJDb25maWdzOnJlc291cmNlQWRhcHRlckNvbmZpZ3NfbGluayIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvU2VjdXJpdHlUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9TZWN1cml0eVRlc3QuamF2YQppbmRleCA1ZGFiMGNmLi4zY2MzYTM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9TZWN1cml0eVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9TZWN1cml0eVRlc3QuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEplcmVteSBMdgogICoKICAqLwpAQCAtNTMsMjMgKzUzLDIzIEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzbGVlcCgxMDAwKTsKICAgICAgICAgICAgIGludCBiZWZvcmVDb3VudCA9IGdldFRhYmxlUm93Q291bnQoInByb3BlcnR5Rm9ybTpiYXNpY1RhYmxlIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZ290b0Rhc1BhZ2UoKTsKICAgICAgICAgICAgIGNsaWNrQW5kV2FpdCgidHJlZUZvcm06dHJlZTpjb25maWd1cmF0aW9uczoiKyAgY29uZmlnTmFtZSArIjpzZWN1cml0eTpzZWN1cml0eV9saW5rIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKCFkcml2ZXIuZmluZEVsZW1lbnQoQnkuaWQoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnRTZWN0aW9uVGV4dEZpZWxkOnNlY3VyaXR5TWFuYWdlclByb3A6c3VuX2NoZWNrYm94MzgwIikpLmlzU2VsZWN0ZWQoKSl7CiAgICAgICAgICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDpzZWN1cml0eU1hbmFnZXJQcm9wOnN1bl9jaGVja2JveDM4MCIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOnNhdmVCdXR0b24iKTsKICAgICAgICAgICAgIGFzc2VydFRydWUoaXNFbGVtZW50U2F2ZVN1Y2Nlc3NmdWwoImxhYmVsX3N1bjQiLCJOZXcgdmFsdWVzIHN1Y2Nlc3NmdWxseSBzYXZlZC4iKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZ290b0Rhc1BhZ2UoKTsKICAgICAgICAgICAgIGNsaWNrQW5kV2FpdCgidHJlZUZvcm06dHJlZTpjb25maWd1cmF0aW9uczoiKyAgY29uZmlnTmFtZSArIjpqdm1TZXR0aW5nczpqdm1TZXR0aW5nc19saW5rIik7CiAgICAgICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpqYXZhQ29uZmlnVGFiOmp2bU9wdGlvbnMiKTsKICAgICAgICAgICAgIHNsZWVwKDEwMDApOwogICAgICAgICAgICAgaW50IGFmdGVyQ291bnQgPSBnZXRUYWJsZVJvd0NvdW50KCJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZSIpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGFmdGVyQ291bnQsIGJlZm9yZUNvdW50KzEpOwotICAgICAgICAgICAgCisKIC8vICAgICAgICAgICAgLy9kZWxldGUgc2VjdXJpdHkgYXR0cmlidXRlIGlmIG5lZWRlZAogLy8gICAgICAgICAgICBlbXB0eUNvdW50ID0gZ2V0VGFibGVSb3dDb3VudEJ5VmFsdWUoInByb3BlcnR5Rm9ybTpiYXNpY1RhYmxlIiwgIi1EamF2YS5zZWN1cml0eS5tYW5hZ2VyIiwgImNvbDM6Y29sMVN0IiwgZmFsc2UpOwogLy8gICAgICAgICAgICBpZiAoZW1wdHlDb3VudCAhPSAwICl7CkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgIGNyZWF0ZUNvbmZpZygibmV3LWNvbmZpZyIpOwogICAgICAgICBmb3IgKFN0cmluZyBjb25maWdOYW1lIDogbGlzdCkgewogICAgICAgICAgICAgY3JlYXRlUmVhbG0oY29uZmlnTmFtZSwgcmVhbG1OYW1lLCBjb250ZXh0TmFtZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy9kZWxldGUgdGhlIHJlbGF0ZWQgcmVhbG0KICAgICAgICAgICAgIFN0cmluZyBjbGlja0lkID0gZ2V0VGFibGVSb3dCeVZhbHVlKCJwcm9wZXJ0eUZvcm06cmVhbG1zVGFibGUiLCByZWFsbU5hbWUsICJjb2wxIikrImNvbDA6c2VsZWN0IjsKICAgICAgICAgICAgIGNsaWNrQnlJZEFjdGlvbihjbGlja0lkKTsKQEAgLTExMSw3ICsxMTEsNyBAQAogICAgICAgICBjcmVhdGVDb25maWcoIm5ldy1jb25maWciKTsKICAgICAgICAgZm9yIChTdHJpbmcgY29uZmlnTmFtZSA6IGxpc3QpIHsKICAgICAgICAgICAgIGFkZFVzZXJUb1JlYWxtKGNvbmZpZ05hbWUsICJmaWxlIiwgdXNlcklkLCBwYXNzd29yZCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy9kZWxldGUgdGhlIGFkZGVkIFVzZXIgZm9yIEZpbGUgUmVhbG0KICAgICAgICAgICAgIFN0cmluZyBjbGlja0lkID0gZ2V0VGFibGVSb3dCeVZhbHVlKCJwcm9wZXJ0eUZvcm06dXNlcnMiLCB1c2VySWQsICJjb2wxIikrImNvbDA6c2VsZWN0IjsKICAgICAgICAgICAgIGNsaWNrQnlJZEFjdGlvbihjbGlja0lkKTsKQEAgLTE0NCw3ICsxNDQsNyBAQAogICAgICAgICAgICAgc2V0RmllbGRWYWx1ZSgicHJvcGVydHlGb3JtOmJhc2ljVGFibGU6cm93R3JvdXAxOjA6Y29sNDpjb2wxU3QiLCAiZGVzY3JpcHRpb24iKTsKIAogICAgICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOm5ld0J1dHRvbiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSBnZXRUYWJsZVJvd0J5VmFsdWUoInByb3BlcnR5Rm9ybTpjb25maWdzIiwgYXVkaXRNb2R1bGVOYW1lLCAiY29sMSIpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGF1ZGl0TW9kdWxlTmFtZSwgZ2V0VGV4dChwcmVmaXggKyAiY29sMTpsaW5rIikpOwogCkBAIC0xODgsNyArMTg4LDcgQEAKICAgICAgICAgICAgIHNldEZpZWxkVmFsdWUoInByb3BlcnR5Rm9ybTpiYXNpY1RhYmxlOnJvd0dyb3VwMTowOmNvbDQ6Y29sMVN0IiwgcHJvcERlc2NyaXB0aW9uKTsKIAogICAgICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOm5ld0J1dHRvbiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSBnZXRUYWJsZVJvd0J5VmFsdWUoInByb3BlcnR5Rm9ybTpjb25maWdzIiwgcHJvdmlkZXJOYW1lLCAiY29sMSIpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHByb3ZpZGVyTmFtZSwgZ2V0VGV4dChwcmVmaXggKyAiY29sMTpsaW5rIikpOwogCkBAIC0yMzQsNyArMjM0LDcgQEAKICAgICAgICAgICAgIHNldEZpZWxkVmFsdWUoInByb3BlcnR5Rm9ybTpiYXNpY1RhYmxlOnJvd0dyb3VwMTowOmNvbDQ6Y29sMVN0IiwgImRlc2NyaXB0aW9uIik7CiAKICAgICAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpuZXdCdXR0b24iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gZ2V0VGFibGVSb3dCeVZhbHVlKCJwcm9wZXJ0eUZvcm06Y29uZmlncyIsIHByb3ZpZGVyTmFtZSwgImNvbDEiKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscyhwcm92aWRlck5hbWUsIGdldFRleHQocHJlZml4ICsgImNvbDE6YXV0aGxheWVyIikpOwogCkBAIC0yNDMsOSArMjQzLDkgQEAKIAogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGNsYXNzTmFtZSwgZ2V0VmFsdWUoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnByb3ZpZGVyQ29uZlNlY3Rpb246Q2xhc3NOYW1lUHJvcDpDbGFzc05hbWUiLCAidmFsdWUiKSk7CiAgICAgICAgICAgICBhc3NlcnRUYWJsZVJvd0NvdW50KCJwcm9wZXJ0eUZvcm06YmFzaWNUYWJsZSIsIGNvdW50KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6Y2FuY2VsQnV0dG9uIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy9kZWxldGUgc2VjdXJpdHkgYXR0cmlidXRlIGlmIG5lZWRlZAogICAgICAgICAgICAgaW50IGVtcHR5Q291bnQgPSBnZXRUYWJsZVJvd0NvdW50QnlWYWx1ZSgicHJvcGVydHlGb3JtOmNvbmZpZ3MiLCBwcm92aWRlck5hbWUsICJjb2wxOmF1dGhsYXllciIsIHRydWUpOwogICAgICAgICAgICAgaWYgKGVtcHR5Q291bnQgIT0gMCApewpAQCAtMzIwLDkgKzMyMCw5IEBACiAvLyAgICAgICAgICAgIHNlbGVuaXVtLmNsaWNrKCJmb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpkaXNhYmxlU2VjdXJlQWRtaW5CdXR0b24iKTsKIC8vICAgICAgICAgICAgY2xvc2VBbGVydEFuZEdldEl0c1RleHQoKTsKIC8vICAgICAgICAgICAgc2xlZXAoMTAwMDApOwotLy8gICAgICAgIH0gCisvLyAgICAgICAgfQogLy8gICAgfQotICAgIAorCiAvLyAgICAvL05lZWQgdG8gYmUgZmluaXNoZWQgaW4gdGhlIGZ1dHVyZQogLy8gICAgQFRlc3QKIC8vICAgIHB1YmxpYyB2b2lkIHRlc3RSZWRpcmVjdEFmdGVyTG9naW4oKSB7CkBAIC0zNTUsNyArMzU1LDcgQEAKICAgICAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOmNvbmZpZ3M6dG9wQWN0aW9uc0dyb3VwMTpuZXdCdXR0b24iKTsKICAgICAgICAgICAgIHNldEZpZWxkVmFsdWUoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnRTZWN0aW9uVGV4dEZpZWxkOk5hbWVQcm9wOk5hbWUiLCBjb25maWdOYW1lKTsKICAgICAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpva0J1dHRvbiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSBnZXRUYWJsZVJvd0J5VmFsdWUoInByb3BlcnR5Rm9ybTpjb25maWdzIiwgY29uZmlnTmFtZSwgImNvbDEiKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscyhjb25maWdOYW1lLCBnZXRUZXh0KHByZWZpeCArICJjb2wxOmxpbmsiKSk7CiAgICAgICAgIH0KQEAgLTM2Niw3ICszNjYsNyBAQAogICAgICAgICBjbGlja0FuZFdhaXQoInRyZWVGb3JtOnRyZWU6Y29uZmlndXJhdGlvbnM6Y29uZmlndXJhdGlvbnNfbGluayIpOwogICAgICAgICBkZWxldGVSb3coInByb3BlcnR5Rm9ybTpjb25maWdzOnRvcEFjdGlvbnNHcm91cDE6YnV0dG9uMSIsICJwcm9wZXJ0eUZvcm06Y29uZmlncyIsIGNvbmZpZ05hbWUpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVJlYWxtKFN0cmluZyBjb25maWdOYW1lLCBTdHJpbmcgcmVhbG1OYW1lLCBTdHJpbmcgY29udGV4dE5hbWUpIHsKICAgICAgICAgZ290b0Rhc1BhZ2UoKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJ0cmVlRm9ybTp0cmVlOmNvbmZpZ3VyYXRpb25zOiIgKyBjb25maWdOYW1lICsgIjpzZWN1cml0eTpyZWFsbXM6cmVhbG1zX2xpbmsiKTsKQEAgLTM3NywxNiArMzc3LDE2IEBACiAgICAgICAgIHNldEZpZWxkVmFsdWUoImZvcm0xOmZpbGVTZWN0aW9uOmphYXg6amFheCIsIGNvbnRleHROYW1lKTsKICAgICAgICAgc2V0RmllbGRWYWx1ZSgiZm9ybTE6ZmlsZVNlY3Rpb246a2V5RmlsZTprZXlGaWxlIiwgIiR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9jb25maWcvdGVzdGZpbGUiKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJmb3JtMTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6bmV3QnV0dG9uIik7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBwcmVmaXggPSBnZXRUYWJsZVJvd0J5VmFsdWUoInByb3BlcnR5Rm9ybTpyZWFsbXNUYWJsZSIsIHJlYWxtTmFtZSwgImNvbDEiKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlYWxtTmFtZSwgZ2V0VGV4dChwcmVmaXggKyAiY29sMTpsaW5rIikpOwotICAgICAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBhZGRVc2VyVG9SZWFsbShTdHJpbmcgY29uZmlnTmFtZSwgU3RyaW5nIHJlYWxtTmFtZSwgU3RyaW5nIHVzZXJOYW1lLCBTdHJpbmcgcGFzc3dvcmQpIHsKICAgICAgICAgZ290b0Rhc1BhZ2UoKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJ0cmVlRm9ybTp0cmVlOmNvbmZpZ3VyYXRpb25zOiIgKyBjb25maWdOYW1lICsgIjpzZWN1cml0eTpyZWFsbXM6cmVhbG1zX2xpbmsiKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHByZWZpeCA9IGdldFRhYmxlUm93QnlWYWx1ZSgicHJvcGVydHlGb3JtOnJlYWxtc1RhYmxlIiwgcmVhbG1OYW1lLCAiY29sMSIpOwogICAgICAgICBhc3NlcnRFcXVhbHMocmVhbG1OYW1lLCBnZXRUZXh0KHByZWZpeCArICJjb2wxOmxpbmsiKSk7CiAKQEAgLTQwMCw3ICs0MDAsNyBAQAogICAgICAgICBzZXRGaWVsZFZhbHVlKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDpuZXdQYXNzd29yZFByb3A6TmV3UGFzc3dvcmQiLCBwYXNzd29yZCk7CiAgICAgICAgIHNldEZpZWxkVmFsdWUoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnRTZWN0aW9uVGV4dEZpZWxkOmNvbmZpcm1QYXNzd29yZFByb3A6Q29uZmlybVBhc3N3b3JkIiwgcGFzc3dvcmQpOwogICAgICAgICBjbGlja0FuZFdhaXQoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6bmV3QnV0dG9uIik7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBwcmVmaXgxID0gZ2V0VGFibGVSb3dCeVZhbHVlKCJwcm9wZXJ0eUZvcm06dXNlcnMiLCB1c2VyTmFtZSwgImNvbDEiKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHVzZXJOYW1lLCBnZXRUZXh0KHByZWZpeDEgKyAiY29sMTpsaW5rIikpOwogCkBAIC00MDgsMTMgKzQwOCwxMyBAQAogCiAgICAgcHVibGljIHZvaWQgZGVsZXRlVXNlckZyb21SZWFsbShTdHJpbmcgY29uZmlnTmFtZSwgU3RyaW5nIHJlYWxtTmFtZSwgU3RyaW5nIHVzZXJOYW1lKSB7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgidHJlZUZvcm06dHJlZTpjb25maWd1cmF0aW9uczoiICsgY29uZmlnTmFtZSArICI6c2VjdXJpdHk6cmVhbG1zOnJlYWxtc19saW5rIik7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBwcmVmaXggPSBnZXRUYWJsZVJvd0J5VmFsdWUoInByb3BlcnR5Rm9ybTpyZWFsbXNUYWJsZSIsIHJlYWxtTmFtZSwgImNvbDEiKTsKICAgICAgICAgU3RyaW5nIGNsaWNrSWQgPSBwcmVmaXggKyAiY29sMTpsaW5rIjsKICAgICAgICAgY2xpY2tCeUlkQWN0aW9uKGNsaWNrSWQpOwogCiAgICAgICAgIGNsaWNrQW5kV2FpdCgiZm9ybTE6cHJvcGVydHlDb250ZW50UGFnZTptYW5hZ2VVc2Vyc0J1dHRvbiIpOwotICAgICAgICAKKwogICAgICAgLy9kZWxldGUgc2VjdXJpdHkgYXR0cmlidXRlIGlmIG5lZWRlZAogICAgICAgaW50IGVtcHR5Q291bnQgPSBnZXRUYWJsZVJvd0NvdW50QnlWYWx1ZSgicHJvcGVydHlGb3JtOnVzZXJzIiwgdXNlck5hbWUsICJjb2wxOmxpbmsiLCB0cnVlKTsKICAgICAgIGlmIChlbXB0eUNvdW50ICE9IDAgKXsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL1RocmVhZFBvb2xzVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvVGhyZWFkUG9vbHNUZXN0LmphdmEKaW5kZXggNGFjZmY5Ni4uYWUwMGUyZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvVGhyZWFkUG9vbHNUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvVGhyZWFkUG9vbHNUZXN0LmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIC8qKgotICogCisgKgogICogQGF1dGhvciBKZXJlbXkgTHYKICAqCiAgKi8KQEAgLTM5LDEzICszOSwxMyBAQAogICAgICAgICBzZXRGaWVsZFZhbHVlKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDptaW5UaHJlYWQ6bWluVGhyZWFkIiwgIjQiKTsKICAgICAgICAgc2V0RmllbGRWYWx1ZSgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6dGltZW91dDp0aW1lb3V0IiwgIjE4MDAiKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJwcm9wZXJ0eUZvcm06cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOm5ld0J1dHRvbiIpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgcHJlZml4ID0gZ2V0VGFibGVSb3dCeVZhbHVlKCJwcm9wZXJ0eUZvcm06Y29uZmlncyIsIHRocmVhZFBvb2xOYW1lLCAiY29sMSIpOwogICAgICAgICBhc3NlcnRFcXVhbHModGhyZWFkUG9vbE5hbWUsIGdldFRleHQocHJlZml4ICsgImNvbDE6bGluayIpKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGNsaWNrSWQgPSBwcmVmaXggKyAiY29sMTpsaW5rIjsKICAgICAgICAgY2xpY2tBbmRXYWl0KGNsaWNrSWQpOwotICAgICAgICAKKwogICAgICAgICBhc3NlcnRFcXVhbHMoIjgxOTIiLCBnZXRWYWx1ZSgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6bWF4Om1heCIsICJ2YWx1ZSIpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCIxMCIsIGdldFZhbHVlKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDptYXhUaHJlYWQ6bWF4VGhyZWFkIiwgInZhbHVlIikpOwogICAgICAgICBhc3NlcnRFcXVhbHMoIjQiLCBnZXRWYWx1ZSgicHJvcGVydHlGb3JtOnByb3BlcnR5U2hlZXQ6cHJvcGVydFNlY3Rpb25UZXh0RmllbGQ6bWluVGhyZWFkOm1pblRocmVhZCIsICJ2YWx1ZSIpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL1RyYW5zYWN0aW9uU2VydmljZVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL1RyYW5zYWN0aW9uU2VydmljZVRlc3QuamF2YQppbmRleCBiMmFhMDQ5Li41NDZmOGQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9UcmFuc2FjdGlvblNlcnZpY2VUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvVHJhbnNhY3Rpb25TZXJ2aWNlVGVzdC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKIAogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEplcmVteSBMdgogICoKICAqLwpAQCAtNjUsNyArNjUsNyBAQAogICAgICAgICBhc3NlcnRFcXVhbHMoImNvbW1pdCIsIGdldFZhbHVlKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDpoZXVyaXN0aWNQcm9wOkhldXJpc3RpY0RlY2lzaW9uIiwgInZhbHVlIikpOwogICAgICAgICBhc3NlcnRFcXVhbHMoa2V5cG9pbnQsIGdldFZhbHVlKCJwcm9wZXJ0eUZvcm06cHJvcGVydHlTaGVldDpwcm9wZXJ0U2VjdGlvblRleHRGaWVsZDprZXlQb2ludFByb3A6S2V5cG9pbnQiLCAidmFsdWUiKSk7CiAgICAgICAgIGFzc2VydFRhYmxlUm93Q291bnQoInByb3BlcnR5Rm9ybTpiYXNpY1RhYmxlIiwgY291bnQpOwotICAgICAgICAKKwogICAgICAgICAvL2RlbGV0ZSB0aGUgcHJvcGVydHkgdXNlZCB0byB0ZXN0CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbigicHJvcGVydHlGb3JtOmJhc2ljVGFibGU6X3RhYmxlQWN0aW9uc1RvcDpfc2VsZWN0TXVsdGlwbGVCdXR0b246X3NlbGVjdE11bHRpcGxlQnV0dG9uX2ltYWdlIik7CiAgICAgICAgIGNsaWNrQnlJZEFjdGlvbigicHJvcGVydHlGb3JtOmJhc2ljVGFibGU6dG9wQWN0aW9uc0dyb3VwMTpidXR0b24xIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9WaXJ0dWFsU2VydmVyVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvVmlydHVhbFNlcnZlclRlc3QuamF2YQppbmRleCA2MzFmMGE4Li5mODY2N2JmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9WaXJ0dWFsU2VydmVyVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL1ZpcnR1YWxTZXJ2ZXJUZXN0LmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIC8qKgotICogCisgKgogICogQGF1dGhvciBKZXJlbXkgTHYKICAqCiAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL1dlYkNvbnRhaW5lclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL1dlYkNvbnRhaW5lclRlc3QuamF2YQppbmRleCBiN2NhZjNkLi4zMjA2Y2UwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9XZWJDb250YWluZXJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvV2ViQ29udGFpbmVyVGVzdC5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKIAogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEplcmVteSBMdgogICoKICAqLwpAQCAtNTEsOCArNTEsOCBAQAogICAgICAgICBnb3RvRGFzUGFnZSgpOwogICAgICAgICBjbGlja0FuZFdhaXQoInRyZWVGb3JtOnRyZWU6Y29uZmlndXJhdGlvbnM6c2VydmVyLWNvbmZpZzp3ZWJDb250YWluZXI6d2ViQ29udGFpbmVyX2xpbmsiKTsKICAgICAgICAgYXNzZXJ0VGFibGVSb3dDb3VudCgiZm9ybTE6YmFzaWNUYWJsZSIsIGNvdW50KTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy9EZWxldGUgYWxsIG9mIHRoZSBwcm9wZXJ0eSBhZnRlciB0aGUgdGVzdHMgZmluaXNoZWQKICAgICAgICAgaWYgKGNvdW50ICE9IDApewogICAgICAgICAgICAgZ290b0Rhc1BhZ2UoKTsKQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgY2xpY2tBbmRXYWl0KCJ0cmVlRm9ybTp0cmVlOmNvbmZpZ3VyYXRpb25zOnNlcnZlci1jb25maWc6d2ViQ29udGFpbmVyOndlYkNvbnRhaW5lcl9saW5rIik7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgiZm9ybTE6d2ViQ29udGFpbmVyVGFiczpzZXNzaW9uVGFiIik7CiAgICAgICAgIHdhaXRGb3JFbGVtZW50UHJlc2VudCgiVHRsVHh0X3N1bjQiLCAiU2Vzc2lvbiBQcm9wZXJ0aWVzIik7Ci0gICAgICAgIAorCiAgICAgICAgIGludCBjb3VudCA9IGFkZFRhYmxlUm93KCJmb3JtMTpiYXNpY1RhYmxlIiwgImZvcm0xOmJhc2ljVGFibGU6dG9wQWN0aW9uc0dyb3VwMTphZGRTaGFyZWRUYWJsZUJ1dHRvbiIpOwogCiAgICAgICAgIHNsZWVwKDUwMCk7CkBAIC05NSw3ICs5NSw3IEBACiAgICAgICAgIHNldEZpZWxkVmFsdWUoImZvcm0xOnNlc3Npb25Qcm9wU2hlZXQ6c2Vzc2lvblByb3BTaGVldFNlY3Rpb246U2Vzc2lvblRpbWVvdXRQcm9wOlNlc3Npb25UaW1lb3V0IiwgIjE4MDAiKTsKICAgICAgICAgY2xpY2tBbmRXYWl0KCJmb3JtMTpwcm9wZXJ0eUNvbnRlbnRQYWdlOnRvcEJ1dHRvbnM6c2F2ZUJ1dHRvbiIpOwogICAgICAgICBhc3NlcnRUcnVlKGlzRWxlbWVudFNhdmVTdWNjZXNzZnVsKCJsYWJlbF9zdW40IiwiTmV3IHZhbHVlcyBzdWNjZXNzZnVsbHkgc2F2ZWQuIikpOwotICAgICAgICAKKwogICAgICAgICAvL0RlbGV0ZSBhbGwgb2YgdGhlIHByb3BlcnR5IGFmdGVyIHRoZSB0ZXN0cyBmaW5pc2hlZAogICAgICAgICBpZiAoY291bnQgIT0gMCl7CiAgICAgICAgICAgICBnb3RvRGFzUGFnZSgpOwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAgICAgICAgIGFzc2VydEVxdWFscyhtYXhTZXNzaW9ucywgZ2V0VmFsdWUoImZvcm0xOm1hbmFnZXJQcm9wU2hlZXQ6bWFuYWdlclByb3BTaGVldFNlY3Rpb246TWF4U2Vzc2lvbnNQcm9wOk1heFNlc3Npb25zIiwgInZhbHVlIikpOwogICAgICAgICBhc3NlcnRFcXVhbHMoc2Vzc0ZpbGVOYW1lLCBnZXRWYWx1ZSgiZm9ybTE6bWFuYWdlclByb3BTaGVldDptYW5hZ2VyUHJvcFNoZWV0U2VjdGlvbjpTZXNzRmlsZU5hbWVQcm9wOlNlc3NGaWxlTmFtZSIsICJ2YWx1ZSIpKTsKICAgICAgICAgYXNzZXJ0VGFibGVSb3dDb3VudCgiZm9ybTE6YmFzaWNUYWJsZSIsIGNvdW50KTsKLSAgICAgICAgCisKICAgICAgICAgLy9EZWxldGUgYWxsIG9mIHRoZSBwcm9wZXJ0eSBhZnRlciB0aGUgdGVzdHMgZmluaXNoZWQKICAgICAgICAgaWYgKGNvdW50ICE9IDApewogICAgICAgICAgICAgZ290b0Rhc1BhZ2UoKTsKQEAgLTE5MSw3ICsxOTEsNyBAQAogICAgICAgICBzZXRGaWVsZFZhbHVlKCJmb3JtMTpzdG9yZVByb3BTaGVldDpzdG9yZVByb3BTaGVldFNlY3Rpb246RGlyZWN0b3J5UHJvcDpEaXJlY3RvcnkiLCAiIik7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgiZm9ybTE6cHJvcGVydHlDb250ZW50UGFnZTp0b3BCdXR0b25zOnNhdmVCdXR0b24iKTsKICAgICAgICAgYXNzZXJ0VHJ1ZShpc0VsZW1lbnRTYXZlU3VjY2Vzc2Z1bCgibGFiZWxfc3VuNCIsIk5ldyB2YWx1ZXMgc3VjY2Vzc2Z1bGx5IHNhdmVkLiIpKTsKLSAgICAgICAgCisKICAgICAgICAgLy9EZWxldGUgYWxsIG9mIHRoZSBwcm9wZXJ0eSBhZnRlciB0aGUgdGVzdHMgZmluaXNoZWQKICAgICAgICAgaWYgKGNvdW50ICE9IDApewogICAgICAgICAgICAgZ290b0Rhc1BhZ2UoKTsKQEAgLTIxMiwxNCArMjEyLDE0IEBACiAgICAgICovCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0V2ViQ29udGFpbmVyUHJvcGVydHlUYWJsZSgpIHsKLSAgICAgICAgCisKICAgICAgICAgZmluYWwgU3RyaW5nIHByb3BlcnR5MSA9ICJwcm9wZXJ0eTEiICsgZ2VuZXJhdGVSYW5kb21TdHJpbmcoKTsKICAgICAgICAgZmluYWwgU3RyaW5nIHZhbHVlMSA9ICJ2YWx1ZSIrZ2VuZXJhdGVSYW5kb21TdHJpbmcoKTsKICAgICAgICAgZmluYWwgU3RyaW5nIGRlc2NyaXB0aW9uMSA9ICJEZXNjcmlwdGlvbiBmb3IgIiArIHByb3BlcnR5MTsKICAgICAgICAgZmluYWwgU3RyaW5nIHByb3BlcnR5MiA9ICJwcm9wZXJ0eTIiICsgZ2VuZXJhdGVSYW5kb21TdHJpbmcoKTsKICAgICAgICAgZmluYWwgU3RyaW5nIHZhbHVlMiA9ICIiOwogICAgICAgICBmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb24yID0gIkRlc2NyaXB0aW9uIGZvciAiICsgcHJvcGVydHkyOwotICAgICAgICAKKwogICAgICAgICBnb3RvRGFzUGFnZSgpOwogICAgICAgICBjbGlja0FuZFdhaXQoInRyZWVGb3JtOnRyZWU6Y29uZmlndXJhdGlvbnM6c2VydmVyLWNvbmZpZzp3ZWJDb250YWluZXI6d2ViQ29udGFpbmVyX2xpbmsiKTsKIApAQCAtMjQ3LDcgKzI0Nyw3IEBACiAgICAgICAgIGFzc2VydFRydWUoaXNFbGVtZW50U2F2ZVN1Y2Nlc3NmdWwoImxhYmVsX3N1bjQiLCJOZXcgdmFsdWVzIHN1Y2Nlc3NmdWxseSBzYXZlZC4iKSk7CiAKICAgICAgICAgYXNzZXJ0VGFibGVSb3dDb3VudCgiZm9ybTE6YmFzaWNUYWJsZSIsIGNvdW50LTEpOwotICAgICAgICAKKwogICAgICAgICAvL0RlbGV0ZSBhbGwgb2YgdGhlIHByb3BlcnR5IGFmdGVyIHRoZSB0ZXN0cyBmaW5pc2hlZAogICAgICAgICBpZiAoY291bnQgIT0gMCl7CiAgICAgICAgICAgICBnb3RvRGFzUGFnZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvV29ya1NlY3VyaXR5TWFwVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL2F1dG8tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvYWRtaW5ndWkvZGV2dGVzdHMvV29ya1NlY3VyaXR5TWFwVGVzdC5qYXZhCmluZGV4IDFlZTUxMzEuLmZhZTQ2MzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hZG1pbmd1aS9hdXRvLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2FkbWluZ3VpL2RldnRlc3RzL1dvcmtTZWN1cml0eU1hcFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvYXV0by10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9hZG1pbmd1aS9kZXZ0ZXN0cy9Xb3JrU2VjdXJpdHlNYXBUZXN0LmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIC8qKgotICogCisgKgogICogQGF1dGhvciBKZXJlbXkgTHYKICAqCiAgKi8KQEAgLTQ3LDcgKzQ3LDcgQEAKIAogICAgICAgICBTdHJpbmcgY2xpY2tJZCA9IHByZWZpeCArICJjb2wxOmxpbmsiOwogICAgICAgICBjbGlja0J5SWRBY3Rpb24oY2xpY2tJZCk7Ci0gICAgICAgIAorCiAgICAgICAgIGFzc2VydEVxdWFscyh0ZXN0R3JvdXBNYXBLZXkgKyAiPSIgKyB0ZXN0R3JvdXBNYXBWYWx1ZSwgZ2V0VmFsdWUoInByb3BlcnR5Rm9ybTpwcm9wZXJ0eVNoZWV0OnByb3BlcnRTZWN0aW9uVGV4dEZpZWxkOmdyb3VwUHJvcDplaXNncm91cHRleHQiLCAidmFsdWUiKSk7CiAgICAgICAgIGNsaWNrQW5kV2FpdCgicHJvcGVydHlGb3JtOnByb3BlcnR5Q29udGVudFBhZ2U6dG9wQnV0dG9uczpjYW5jZWxCdXR0b24iKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FkbWluZ3VpL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvcG9tLnhtbAppbmRleCA0NmE0YTM1Li5mNTg2NWNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYWRtaW5ndWkvcG9tLnhtbApAQCAtMjQsMTQgKzI0LDE0IEBACiAgICAgPGFydGlmYWN0SWQ+YWRtaW5ndWk8L2FydGlmYWN0SWQ+CiAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KLSAgICA8bmFtZT5HbGFzc0Zpc2ggYWRtaW5ndWkgVGVzdHM8L25hbWU+ICAKKyAgICA8bmFtZT5HbGFzc0Zpc2ggYWRtaW5ndWkgVGVzdHM8L25hbWU+CiAKICAgICA8bW9kdWxlcz4KLSAgICAJPG1vZHVsZT5hdXRvLXRlc3Q8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5hdXRvLXRlc3Q8L21vZHVsZT4KICAgICA8L21vZHVsZXM+Ci0JCi0JPGRlcGVuZGVuY3lNYW5hZ2VtZW50PgotCQk8ZGVwZW5kZW5jaWVzPgorCisgICAgPGRlcGVuZGVuY3lNYW5hZ2VtZW50PgorICAgICAgICA8ZGVwZW5kZW5jaWVzPgogICAgICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNlbGVuaXVtaHEuc2VsZW5pdW08L2dyb3VwSWQ+CiAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VsZW5pdW0tamF2YTwvYXJ0aWZhY3RJZD4KQEAgLTQ0LDEyICs0NCwxMiBAQAogICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8L2RlcGVuZGVuY2llcz4KICAgICA8L2RlcGVuZGVuY3lNYW5hZ2VtZW50PgotCQotCTxidWlsZD4KLSAgICAgICAgPGRlZmF1bHRHb2FsPmluc3RhbGw8L2RlZmF1bHRHb2FsPgkJCi0JCQotCQk8cGx1Z2luTWFuYWdlbWVudD4KLQkJICAgIDxwbHVnaW5zPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8ZGVmYXVsdEdvYWw+aW5zdGFsbDwvZGVmYXVsdEdvYWw+CisKKyAgICAgICAgPHBsdWdpbk1hbmFnZW1lbnQ+CisgICAgICAgICAgICA8cGx1Z2lucz4KICAgICAgICAgICAgICAgICA8cGx1Z2luPgogICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuNDwvdmVyc2lvbj4KQEAgLTk1LDUgKzk1LDUgQEAKICAgICAgICAgICAgIDwvcGx1Z2lucz4KICAgICAgICAgPC9wbHVnaW5NYW5hZ2VtZW50PgogICAgIDwvYnVpbGQ+Ci0JCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hbXgvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hbXgvcG9tLnhtbAppbmRleCAyNjhhMzNhLi5iOGZkNzEzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FteC9wb20ueG1sCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgPHBhY2thZ2luZz5qYXI8L3BhY2thZ2luZz4KICAgICA8bmFtZT5hbXgtdGVzdHM8L25hbWU+CiAgICAgPGRlc2NyaXB0aW9uPkFNWCBlbmQgdG8gZW5kIHRlc3RzPC9kZXNjcmlwdGlvbj4KLSAgICAKKwogICAgIDxkZXZlbG9wZXJzPgogICAgICAgICA8ZGV2ZWxvcGVyPgogICAgICAgICAgICAgPGlkPmxsYzwvaWQ+CkBAIC00Miw2NCArNDIsNjQgQEAKICAgICAgICAgICAgIDwvcm9sZXM+CiAgICAgICAgIDwvZGV2ZWxvcGVyPgogICAgIDwvZGV2ZWxvcGVycz4KLSAgICAKKwogICAgPGJ1aWxkPgotICAJPHNvdXJjZURpcmVjdG9yeT5zcmM8L3NvdXJjZURpcmVjdG9yeT4KLSAgICAKLQkgICA8cGx1Z2lucz4KLQkgICAKLQkgICAgIDxwbHVnaW4+Ci0JICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLQkgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPgotCSAgICAgICA8Y29uZmlndXJhdGlvbj4KLQkgICAgICAgICA8c291cmNlPjEuNTwvc291cmNlPgotCSAgICAgICAgIDx0YXJnZXQ+MS41PC90YXJnZXQ+Ci0JICAgICAgICAgPGNvbXBpbGVyQXJndW1lbnQ+LVhsaW50OmFsbDwvY29tcGlsZXJBcmd1bWVudD4KLQkgICAgICAgPC9jb25maWd1cmF0aW9uPgotCSAgICAgPC9wbHVnaW4+Ci0JICAgICAKLQkJPHBsdWdpbj4KLQkJCTxhcnRpZmFjdElkPm1hdmVuLWFzc2VtYmx5LXBsdWdpbjwvYXJ0aWZhY3RJZD4KLQkJCTxjb25maWd1cmF0aW9uPgotCQkJCTxkZXNjcmlwdG9yUmVmcz4KLQkJCQkJPGRlc2NyaXB0b3JSZWY+amFyLXdpdGgtZGVwZW5kZW5jaWVzPC9kZXNjcmlwdG9yUmVmPgotCQkJCTwvZGVzY3JpcHRvclJlZnM+Ci0JCQk8L2NvbmZpZ3VyYXRpb24+Ci0JCTwvcGx1Z2luPgotCQkKLQkJCi0JICAgPC9wbHVnaW5zPgorICAgICAgPHNvdXJjZURpcmVjdG9yeT5zcmM8L3NvdXJjZURpcmVjdG9yeT4KKworICAgICAgIDxwbHVnaW5zPgorCisgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNvbXBpbGVyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgPHNvdXJjZT4xLjU8L3NvdXJjZT4KKyAgICAgICAgICAgICA8dGFyZ2V0PjEuNTwvdGFyZ2V0PgorICAgICAgICAgICAgIDxjb21waWxlckFyZ3VtZW50Pi1YbGludDphbGw8L2NvbXBpbGVyQXJndW1lbnQ+CisgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgIDwvcGx1Z2luPgorCisgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1hc3NlbWJseS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICA8ZGVzY3JpcHRvclJlZnM+CisgICAgICAgICAgICAgICAgICAgIDxkZXNjcmlwdG9yUmVmPmphci13aXRoLWRlcGVuZGVuY2llczwvZGVzY3JpcHRvclJlZj4KKyAgICAgICAgICAgICAgICA8L2Rlc2NyaXB0b3JSZWZzPgorICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICA8L3BsdWdpbj4KKworCisgICAgICAgPC9wbHVnaW5zPgogICAgIDwvYnVpbGQ+CiAKIAogICAgIDxkZXBlbmRlbmNpZXM+Ci0gICAgICAgCisKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC5tYW5hZ2VtZW50LmoyZWU8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYW5hZ2VtZW50LWFwaTwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPiR7bWFuYWdlbWVudC1hcGkudmVyc2lvbn08L3ZlcnNpb24+CiAgICAgICAgICAgICA8c2NvcGU+Y29tcGlsZTwvc2NvcGU+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KLQkJCisKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLmNvbW1vbjwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmFteC1jb3JlPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgogICAgICAgICAgICAgPHNjb3BlPmNvbXBpbGU8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIAorCiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5jb21tb248L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hbXgtamF2YWVlPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgogICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KICAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAgIAotCQk8ZGVwZW5kZW5jeT4KLQkJCTxncm91cElkPmp1bml0PC9ncm91cElkPgotCQkJPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+Ci0JCQk8c2NvcGU+Y29tcGlsZTwvc2NvcGU+Ci0JCTwvZGVwZW5kZW5jeT4KLSAgICAgICAgCisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHNjb3BlPmNvbXBpbGU8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKICAgICA8L2RlcGVuZGVuY2llcz4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hbXgvcmVzb3VyY2VzL2FteHRlc3QucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hbXgvcmVzb3VyY2VzL2FteHRlc3QucHJvcGVydGllcwppbmRleCA2MjJjOWExLi43YzI3OGMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3Jlc291cmNlcy9hbXh0ZXN0LnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FteC9yZXNvdXJjZXMvYW14dGVzdC5wcm9wZXJ0aWVzCkBAIC0xMjYsNyArMTI2LDcgQEAKICMKICMgV2hldGhlciB0byB0ZXN0IHRoZSBvZmZsaW5lIGNvbmZpZyBpbXBsZW1lbnRhdGlvbiBhcyBvcHBvc2VkCiAjIHRvIHRoZSBEQVMuCi0jIGFteHRlc3QuY29ubmVjdC4qIGlzIGlnbm9yZWQgaWYgdGhpcyBpcyB0cnVlIAorIyBhbXh0ZXN0LmNvbm5lY3QuKiBpcyBpZ25vcmVkIGlmIHRoaXMgaXMgdHJ1ZQogIwogYW14dGVzdC50ZXN0T2ZmbGluZT1mYWxzZQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3J1bi5zaCBiL2FwcHNlcnZlci90ZXN0cy9hbXgvcnVuLnNoCmluZGV4IDNiNDU0OGQuLmE1MjJmZjQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hbXgvcnVuLnNoCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hbXgvcnVuLnNoCkBAIC0yNSw1ICsyNSw1IEBACiBleHBvcnQgTUFJTj1vcmcuZ2xhc3NmaXNoLmFkbWluLmFteHRlc3QuVGVzdE1haW4KIGV4cG9ydCBQUk9QUz1yZXNvdXJjZXMvYW14dGVzdC5wcm9wZXJ0aWVzCiAKLWphdmEgLWNwICRDUCAtZWEgJE1BSU4gJFBST1BTIAoramF2YSAtY3AgJENQIC1lYSAkTUFJTiAkUFJPUFMKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L0FNWFRlc3RCYXNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvQU1YVGVzdEJhc2UuamF2YQppbmRleCBhYWNkNDZkLi40ZjllNzJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvQU1YVGVzdEJhc2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvQU1YVGVzdEJhc2UuamF2YQpAQCAtMTA4LDcgKzEwOCw3IEBACiAgICAgICAgIHJldHVybiBhbGw7CiAgICAgfQogCi0gICAgCisKICAgICBwcm90ZWN0ZWQgU2V0PEFNWD4KICAgICBnZXRBbGxBTVgoKSB7CiAgICAgICAgIHJldHVybiBnZXRUZXN0VXRpbCgpLmdldEFsbEFNWCgpOwpAQCAtMTM0LDcgKzEzNCw3IEBACiAgICBwcml2YXRlIHZvaWQgY2hhbmdlQWxsTGV2ZWxzKCBmaW5hbCBNb2R1bGVNb25pdG9yaW5nTGV2ZWxzQ29uZmlnIGNvbmZpZywgZmluYWwgU3RyaW5nIHZhbHVlICkKICAgIHsKICAgICAgICAgZmluYWwgU2V0PFN0cmluZz4gbmFtZXMgPSBNb2R1bGVNb25pdG9yaW5nTGV2ZWxzQ29uZmlnLkFMTF9MRVZFTF9OQU1FUzsKLSAgICAgICAgCisKICAgICAgICAgZmluYWwgQXR0cmlidXRlTGlzdCBhdHRycyA9IG5ldyBBdHRyaWJ1dGVMaXN0KCk7CiAgICAgICAgIGZvciggZmluYWwgU3RyaW5nIG5hbWUgOiBuYW1lcyApCiAgICAgICAgIHsKQEAgLTE0Niw3ICsxNDYsNyBAQAogICAgICAgICAgICAvLyBpZ25vcmUKICAgICAgICAgfQogICAgfQotICAgCisKICAgICAvKioKICAgICAgRW5zdXJlIHRoYXQgbW9uaXRvcmluZyBpcyBlbmFibGVkIHNvIHRoYXQgdW5pdCB0ZXN0cyBkb24ndCBtaXNzIGFueXRoaW5nCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvQ292ZXJhZ2VJbmZvQW5hbHl6ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9Db3ZlcmFnZUluZm9BbmFseXplci5qYXZhCmluZGV4IDEzZWM1MDkuLjVkZWM3OTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9Db3ZlcmFnZUluZm9BbmFseXplci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9Db3ZlcmFnZUluZm9BbmFseXplci5qYXZhCkBAIC0xNzIsMjEgKzE3MiwyMSBAQAogICAgIGZpbmRNaXNzaW5nSjJFRVR5cGVzKCkgewogICAgICAgICBmaW5hbCBTZXQ8U3RyaW5nPiBtaXNzaW5nID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwogLyoKLQkgICAgbWlzc2luZy5hZGRBbGwoIFhUeXBlc01hcHBlci5nZXRJbnN0YW5jZSgpLmdldEoyRUVUeXBlcygpICk7Ci0JICAgIG1pc3NpbmcuYWRkQWxsKCBKMkVFVHlwZXNNYXBwZXIuZ2V0SW5zdGFuY2UoKS5nZXRKMkVFVHlwZXMoKSApOwotCSAgICAKLQkgICAgbWlzc2luZy5yZW1vdmVBbGwoIG1UZXN0VXRpbC5maW5kUmVnaXN0ZXJlZEoyRUVUeXBlcygpICk7Ci0JICAgIAotCSAgICBmaW5hbCBTZXQ8T2JqZWN0TmFtZT4gICByZWdpc3RlcmVkICA9Ci0JICAgICAgICBPYnNlcnZlci5nZXRJbnN0YW5jZSgpLmdldFJlZ2lzdHJhdGlvbkxpc3RlbmVyKCkuZ2V0UmVnaXN0ZXJlZCgpOwotCSAgICBmb3IoIGZpbmFsIE9iamVjdE5hbWUgb2JqZWN0TmFtZSA6IHJlZ2lzdGVyZWQgKQotCSAgICB7Ci0JICAgICAgICBmaW5hbCBTdHJpbmcgICAgajJlZVR5cGUgICAgPSBVdGlsLmdldEoyRUVUeXBlKCBvYmplY3ROYW1lICk7Ci0JICAgICAgICBpZiAoIGoyZWVUeXBlICE9IG51bGwgKQotCSAgICAgICAgewotCSAgICAgICAgICAgIG1pc3NpbmcucmVtb3ZlKCBqMmVlVHlwZSApOwotCSAgICAgICAgfQotCSAgICB9CisgICAgICAgIG1pc3NpbmcuYWRkQWxsKCBYVHlwZXNNYXBwZXIuZ2V0SW5zdGFuY2UoKS5nZXRKMkVFVHlwZXMoKSApOworICAgICAgICBtaXNzaW5nLmFkZEFsbCggSjJFRVR5cGVzTWFwcGVyLmdldEluc3RhbmNlKCkuZ2V0SjJFRVR5cGVzKCkgKTsKKworICAgICAgICBtaXNzaW5nLnJlbW92ZUFsbCggbVRlc3RVdGlsLmZpbmRSZWdpc3RlcmVkSjJFRVR5cGVzKCkgKTsKKworICAgICAgICBmaW5hbCBTZXQ8T2JqZWN0TmFtZT4gICByZWdpc3RlcmVkICA9CisgICAgICAgICAgICBPYnNlcnZlci5nZXRJbnN0YW5jZSgpLmdldFJlZ2lzdHJhdGlvbkxpc3RlbmVyKCkuZ2V0UmVnaXN0ZXJlZCgpOworICAgICAgICBmb3IoIGZpbmFsIE9iamVjdE5hbWUgb2JqZWN0TmFtZSA6IHJlZ2lzdGVyZWQgKQorICAgICAgICB7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgICAgajJlZVR5cGUgICAgPSBVdGlsLmdldEoyRUVUeXBlKCBvYmplY3ROYW1lICk7CisgICAgICAgICAgICBpZiAoIGoyZWVUeXBlICE9IG51bGwgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1pc3NpbmcucmVtb3ZlKCBqMmVlVHlwZSApOworICAgICAgICAgICAgfQorICAgICAgICB9CiAqLwogCiAgICAgICAgIHJldHVybiBtaXNzaW5nOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L0pNWFRlc3RCYXNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvSk1YVGVzdEJhc2UuamF2YQppbmRleCA4Nzg4MTQzLi45YTAxMjRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvSk1YVGVzdEJhc2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvSk1YVGVzdEJhc2UuamF2YQpAQCAtNjAsMTIgKzYwLDEyIEBACiAgICAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRHbG9iYWxDb25uZWN0aW9uKGZpbmFsIE1CZWFuU2VydmVyQ29ubmVjdGlvbiBjb25uKSB7CiAgICAgICAgIF9HbG9iYWxNQmVhblNlcnZlckNvbm5lY3Rpb24gPSBjb25uOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIE1CZWFuU2VydmVyQ29ubmVjdGlvbgogICAgIGdldEdsb2JhbE1CZWFuU2VydmVyQ29ubmVjdGlvbigpIHsKICAgICAgICAgcmV0dXJuIF9HbG9iYWxNQmVhblNlcnZlckNvbm5lY3Rpb247CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyBNQmVhblNlcnZlckNvbm5lY3Rpb24KICAgICBnZXRNQmVhblNlcnZlckNvbm5lY3Rpb24oKSB7CiAgICAgICAgIHJldHVybiBnZXRHbG9iYWxNQmVhblNlcnZlckNvbm5lY3Rpb24oKTsKQEAgLTIyNyw4ICsyMjcsOCBAQAogICAgIHF1b3RlKGZpbmFsIE9iamVjdCBvKSB7CiAgICAgICAgIHJldHVybiAoU3RyaW5nVXRpbC5xdW90ZShTbWFydFN0cmluZ2lmaWVyLnRvU3RyaW5nKG8pKSk7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAgICAgcHJvdGVjdGVkIGJvb2xlYW4KICAgICBnZXRWZXJib3NlKCkgewogICAgICAgICAvKgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L1Byb3BlcnR5S2V5cy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L1Byb3BlcnR5S2V5cy5qYXZhCmluZGV4IGZlM2QxMGYuLjAxMTkxYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9Qcm9wZXJ0eUtleXMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvUHJvcGVydHlLZXlzLmphdmEKQEAgLTE2MSw5ICsxNjEsOSBAQAogCiAgICAgICAgIHByb3BzLnB1dChVUExPQURfRE9XTkxPQURfTUdSX1RFU1RfVEhSRUFEUywgREVGQVVMVF9VUExPQURfRE9XTkxPQURfTUdSX1RFU1RfVEhSRUFEUyk7CiAgICAgICAgIHByb3BzLnB1dChVUExPQURfRE9XTkxPQURfTUdSX1RFU1RfQklHX0ZJTEVfS0IsIERFRkFVTFRfVVBMT0FEX0RPV05MT0FEX01HUl9URVNUX0JJR19GSUxFX0tCKTsKLQkJCi0JCXByb3BzLnB1dCggREVGQVVMVF9QUk9QRVJUSUVTX0ZJTEUsIERFRkFVTFRfUFJPUEVSVElFU19GSUxFICk7Ci0JCXJldHVybiggcHJvcHMgKTsKLQl9CisKKyAgICAgICAgcHJvcHMucHV0KCBERUZBVUxUX1BST1BFUlRJRVNfRklMRSwgREVGQVVMVF9QUk9QRVJUSUVTX0ZJTEUgKTsKKyAgICAgICAgcmV0dXJuKCBwcm9wcyApOworICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9UZXN0TWFpbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L1Rlc3RNYWluLmphdmEKaW5kZXggMjkwNDdjMC4uNDBlYzBjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L1Rlc3RNYWluLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L1Rlc3RNYWluLmphdmEKQEAgLTQ5MCw3ICs0OTAsNyBAQAogICAgICAgICAgICAgcHJpbnRsbigiUmVhZGluZyB0ZXN0IGNsYXNzZXMgZnJvbTogIiArIFN0cmluZ1V0aWwucXVvdGUodGVzdHNGaWxlLnRvU3RyaW5nKCkpKTsKIAogICAgICAgICAgICAgU3RyaW5nIGZpbGVTdHJpbmcgPSBudWxsOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGZpbGVTdHJpbmcgPSBGaWxlVXRpbHMuZmlsZVRvU3RyaW5nKHRlc3RzRmlsZSk7CkBAIC01MDAsNyArNTAwLDcgQEAKICAgICAgICAgICAgICAgICBwcmludGxuKCAiVW5hYmxlIHRvIG9wZW4gZmlsZSAiICsgdGVzdHNGaWxlLmdldEFic29sdXRlUGF0aCgpICk7CiAgICAgICAgICAgICAgICAgdGhyb3cgZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgdGVtcCA9IGZpbGVTdHJpbmcucmVwbGFjZUFsbCgiXHJcbiIsICJcbiIpLnJlcGxhY2VBbGwoIlxyIiwgIlxuIik7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmdbXSBjbGFzc25hbWVzID0gdGVtcC5zcGxpdCgiXG4iKTsKIApAQCAtNTY4LDcgKzU2OCw3IEBACiAgICAgICAgICAgICBmaW5hbCBKTVhDb25uZWN0b3JDb25maWcgY29ubkNvbmZpZyA9IG5vZGVBZ2VudENvbmZpZy5nZXRKTVhDb25uZWN0b3JDb25maWcoKTsKIAogICAgICAgICAgICAgZmluYWwgQXR0cmlidXRlUmVzb2x2ZXJIZWxwZXIgciA9IG5ldyBBdHRyaWJ1dGVSZXNvbHZlckhlbHBlcihjb25uQ29uZmlnKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoISByLnJlc29sdmVCb29sZWFuKCJFbmFibGVkIikgKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRsbihub2RlQWdlbnROYW1lICsgIjogRElTQUJMRUQgQ09OTkVDVE9SIik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC02NDcsNyArNjQ3LDcgQEAKICAgICAgICAgICAgIGJvb2xlYW4gaW5jbHVkZSA9IHRydWU7CiAKICAgICAgICAgICAgIENhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXMgPSBudWxsOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgY2FwYWJpbGl0aWVzID0gZ2V0Q2FwYWJpbGl0aWVzKGMpOwogICAgICAgICAgICAgfQpAQCAtNjc5LDEzICs2NzksMTMgQEAKIAogICAgICAgICByZXR1cm4gaW5jbHVkZWQ7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBGaWxlIG1EZWZhdWx0RGlyOwotICAgIAorCiAgICAgc3RhdGljIEZpbGUgZ2V0RGVmYXVsdERpciggZmluYWwgU3RyaW5nIHByb3BzRmlsZSApCiAgICAgewogICAgICAgICBGaWxlIGRpciA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICggcHJvcHNGaWxlICE9IG51bGwgKQogICAgICAgICB7CiAgICAgICAgICAgICBmaW5hbCBGaWxlIHBmID0gbmV3IEZpbGUocHJvcHNGaWxlKS5nZXRBYnNvbHV0ZUZpbGUoKTsKQEAgLTY5NSw3ICs2OTUsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICBkaXIgPSBuZXcgRmlsZShTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIuZGlyIikpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBkaXI7CiAgICAgfQogCkBAIC03MDgsNyArNzA4LDcgQEAKICAgICAgICAgQU1YRGVidWcuZ2V0SW5zdGFuY2UoKS5zZXRBbGwodHJ1ZSk7CiAKICAgICAgICAgY2hlY2tBc3NlcnRzT24oKTsKLSAgICAgICAgCisKICAgICAgICAgbURlZmF1bHREaXIgPSBnZXREZWZhdWx0RGlyKG9wdGlvbmFsUHJvcGVydGllc0ZpbGUpOwogCiAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gcHJvcHMgPSBnZXRQcm9wZXJ0aWVzKG9wdGlvbmFsUHJvcGVydGllc0ZpbGUpOwpAQCAtNzg1LDcgKzc4NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAidGhyZWFkZWQgdGVzdHMgd2lsbCBiZSBpbXBhY3RlZCBieSBvdGhlciBjb25jdXJyZW50IHRlc3RzLiIpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGZpbmFsIEZpbGUgdGVtcCA9IG5ldyBGaWxlKFRFU1RfQ0xBU1NFU19GSUxFX0tFWSk7CiAgICAgICAgIGZpbmFsIEZpbGUgY2xhc3Nlc0ZpbGUgPSAgdGVtcC5pc0Fic29sdXRlKCkgPwogICAgICAgICAgICAgICAgICAgICB0ZW1wIDogbmV3IEZpbGUoIG1EZWZhdWx0RGlyLCBnZXR0ZXIuZ2V0U3RyaW5nKFRFU1RfQ0xBU1NFU19GSUxFX0tFWSkpOwpAQCAtODM3LDggKzgzNyw4IEBACiAKICAgICAgICAgICAgIGZpbmFsIGxvbmcgZWxhcHNlZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnQ7CiAgICAgICAgICAgICBwcmludGxuKCJUaW1lIHRvIHJ1biB0ZXN0czogIiArIChlbGFwc2VkIC8gMTAwMCkgKyAiIHNlY29uZHMiICk7Ci0JCX0KLQl9CisgICAgICAgIH0KKyAgICB9CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L1Rlc3RSdW5uZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9UZXN0UnVubmVyLmphdmEKaW5kZXggNGZhNWY2Yy4uNDUyMDBiNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L1Rlc3RSdW5uZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvVGVzdFJ1bm5lci5qYXZhCkBAIC0yNzQsNyArMjc0LDcgQEAKIAogICAgICAgICBwcmludGxuKCJcbi0tLSBCRUdJTiBURVNUUyAtLS0iKTsKICAgICAgICAgcnVuVGVzdHModGVzdENsYXNzZXMsIHRocmVhZGVkKTsKLQl9CisgICAgfQogfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9UZXN0VGVtcGxhdGVUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvVGVzdFRlbXBsYXRlVGVzdC5qYXZhCmluZGV4IGVhNWY1Y2IuLjI2OGYyMWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9UZXN0VGVtcGxhdGVUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L1Rlc3RUZW1wbGF0ZVRlc3QuamF2YQpAQCAtNDcsNCArNDcsNCBAQAogfQogCiAKLQkKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L2Jhc2UvQU1YVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L2Jhc2UvQU1YVGVzdC5qYXZhCmluZGV4IDlhMWVkNzQuLjQ2ZTI4YzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9iYXNlL0FNWFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvYmFzZS9BTVhUZXN0LmphdmEKQEAgLTIwNSwxMyArMjA1LDEzIEBACiAgICAgcHVibGljIHZvaWQKICAgICB0ZXN0Q29udGFpbmVyQ2hpbGQoKSB7CiAvKgotCQlmaW5hbCBUeXBlSW5mb3MJaW5mb3MJPSBUeXBlSW5mb3MuZ2V0SW5zdGFuY2UoKTsKLQkJZmluYWwgU2V0PFN0cmluZz4JCWoyZWVUeXBlc1NldAk9IGluZm9zLmdldEoyRUVUeXBlcygpOworICAgICAgICBmaW5hbCBUeXBlSW5mb3MgICAgaW5mb3MgICAgPSBUeXBlSW5mb3MuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgZmluYWwgU2V0PFN0cmluZz4gICAgICAgIGoyZWVUeXBlc1NldCAgICA9IGluZm9zLmdldEoyRUVUeXBlcygpOwogCiAgICAgICAgIGZvciggZmluYWwgU3RyaW5nIGoyZWVUeXBlIDogajJlZVR5cGVzU2V0ICkKLQkJewotCQkJY2hlY2tDb250YWluZXJDaGlsZCggajJlZVR5cGUgKTsKLQkJfQorICAgICAgICB7CisgICAgICAgICAgICBjaGVja0NvbnRhaW5lckNoaWxkKCBqMmVlVHlwZSApOworICAgICAgICB9CiAqLwogICAgIH0KIApAQCAtMjU5LDMxICsyNTksMzEgQEAKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZAogICAgIHRlc3RIYXZlSjJFRV9UWVBFKCkgewotLyoJCWZpbmFsIFR5cGVJbmZvcwlpbmZvcwk9IFR5cGVJbmZvcy5nZXRJbnN0YW5jZSgpOwotCQlmaW5hbCBTZXQJCQlqMmVlVHlwZXMJPSBpbmZvcy5nZXRKMkVFVHlwZXMoKTsKLQkJCi0JCWJvb2xlYW4Jc3VjY2Vzcwk9IHRydWU7Ci0JCWZpbmFsIEl0ZXJhdG9yCWl0ZXIJCT0gajJlZVR5cGVzLml0ZXJhdG9yKCk7Ci0JCXdoaWxlICggaXRlci5oYXNOZXh0KCkgKQotCQl7Ci0JCQlmaW5hbCBTdHJpbmcJCWoyZWVUeXBlCT0gKFN0cmluZylpdGVyLm5leHQoKTsKLQkJCWZpbmFsIFR5cGVJbmZvCWluZm8JPSBpbmZvcy5nZXRJbmZvKCBqMmVlVHlwZSApOwotCQkJCi0JCQlmaW5hbCBDbGFzcwl0aGVJbnRlcmZhY2UJPSBpbmZvLmdldEludGVyZmFjZSgpOwotCQkJdHJ5Ci0JCQl7Ci0JCQkJZmluYWwgU3RyaW5nCXZhbHVlCT0KLQkJCQkJKFN0cmluZylDbGFzc1V0aWwuZ2V0RmllbGRWYWx1ZSggdGhlSW50ZXJmYWNlLCAiSjJFRV9UWVBFIiApOwotCQkJCWFzc2VydCggdmFsdWUuZXF1YWxzKCBqMmVlVHlwZSApICkgOgotCQkJCQkiaW5mbyBhbmQgSjJFRV9UWVBFIGRvbid0IG1hdGNoOiAiICsgajJlZVR5cGUgKyAiICE9ICIgKyB2YWx1ZTsKLQkJCX0KLQkJCWNhdGNoKCBFeGNlcHRpb24gZSApCi0JCQl7Ci0JCQkJdHJhY2UoICJubyBKMkVFX1RZUEUgZmllbGQgZm91bmQgZm9yIHByb3h5IG9mIHR5cGU6ICIgKyB0aGVJbnRlcmZhY2UuZ2V0TmFtZSgpICk7Ci0JCQkJc3VjY2Vzcwk9IGZhbHNlOwotCQkJfQotCQl9Ci0JCWFzc2VydCggc3VjY2VzcyApOyovCisvKiAgICAgICAgZmluYWwgVHlwZUluZm9zICAgIGluZm9zICAgID0gVHlwZUluZm9zLmdldEluc3RhbmNlKCk7CisgICAgICAgIGZpbmFsIFNldCAgICAgICAgICAgIGoyZWVUeXBlcyAgICA9IGluZm9zLmdldEoyRUVUeXBlcygpOworCisgICAgICAgIGJvb2xlYW4gICAgc3VjY2VzcyAgICA9IHRydWU7CisgICAgICAgIGZpbmFsIEl0ZXJhdG9yICAgIGl0ZXIgICAgICAgID0gajJlZVR5cGVzLml0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlICggaXRlci5oYXNOZXh0KCkgKQorICAgICAgICB7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgICAgICAgIGoyZWVUeXBlICAgID0gKFN0cmluZylpdGVyLm5leHQoKTsKKyAgICAgICAgICAgIGZpbmFsIFR5cGVJbmZvICAgIGluZm8gICAgPSBpbmZvcy5nZXRJbmZvKCBqMmVlVHlwZSApOworCisgICAgICAgICAgICBmaW5hbCBDbGFzcyAgICB0aGVJbnRlcmZhY2UgICAgPSBpbmZvLmdldEludGVyZmFjZSgpOworICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nICAgIHZhbHVlICAgID0KKyAgICAgICAgICAgICAgICAgICAgKFN0cmluZylDbGFzc1V0aWwuZ2V0RmllbGRWYWx1ZSggdGhlSW50ZXJmYWNlLCAiSjJFRV9UWVBFIiApOworICAgICAgICAgICAgICAgIGFzc2VydCggdmFsdWUuZXF1YWxzKCBqMmVlVHlwZSApICkgOgorICAgICAgICAgICAgICAgICAgICAiaW5mbyBhbmQgSjJFRV9UWVBFIGRvbid0IG1hdGNoOiAiICsgajJlZVR5cGUgKyAiICE9ICIgKyB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHJhY2UoICJubyBKMkVFX1RZUEUgZmllbGQgZm91bmQgZm9yIHByb3h5IG9mIHR5cGU6ICIgKyB0aGVJbnRlcmZhY2UuZ2V0TmFtZSgpICk7CisgICAgICAgICAgICAgICAgc3VjY2VzcyAgICA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGFzc2VydCggc3VjY2VzcyApOyovCiAgICAgfQogCiAKQEAgLTc5OCwzMiArNzk4LDMyIEBACiAgICAgdGVzdEltcGxlbWVudHNBTVhNb25pdG9yaW5nKCkKICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogLyoKLQkJZmluYWwgVHlwZUluZm9zCWluZm9zCT0gVHlwZUluZm9zLmdldEluc3RhbmNlKCk7Ci0JCQotCQlmaW5hbCBJdGVyYXRvcglpdGVyCT0gaW5mb3MuZ2V0SjJFRVR5cGVzKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKCBpdGVyLmhhc05leHQoKSApCi0JCXsKLQkJCWZpbmFsIFR5cGVJbmZvCWluZm8JPSBpbmZvcy5nZXRJbmZvKCAoU3RyaW5nKWl0ZXIubmV4dCgpICk7Ci0JCQlmaW5hbCBDbGFzcwkJdGhlSW50ZXJmYWNlCT0gaW5mby5nZXRJbnRlcmZhY2UoKTsKLQkJCWZpbmFsIFN0cmluZwlpbnRlcmZhY2VOYW1lCT0gdGhlSW50ZXJmYWNlLmdldE5hbWUoKTsKLQkJCWlmICggISBNT05fSUdOT1JFLmNvbnRhaW5zKCB0aGVJbnRlcmZhY2UgKSApCi0JCQl7Ci0JCQkJaWYgKCBpbnRlcmZhY2VOYW1lLmVuZHNXaXRoKCAiTW9uaXRvciIgKSApCi0JCQkJewotCQkJCQlpZiAoICEgTW9uaXRvcmluZy5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKCB0aGVJbnRlcmZhY2UgKSApCi0JCQkJCXsKLQkJCQkJCXdhcm5pbmcoIENsYXNzVXRpbC5zdHJpcFBhY2thZ2VOYW1lKCBpbnRlcmZhY2VOYW1lICkgKyAiIGRvZXMgbm90IGltcGxlbWVudCBNb25pdG9yaW5nIiApOwotCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UgaWYgKCBpbnRlcmZhY2VOYW1lLmVuZHNXaXRoKCAiTW9uaXRvck1nciIgKSApCi0JCQkJewotCQkJCQlpZiAoICEgQ29udGFpbmVyLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oIHRoZUludGVyZmFjZSApICkKLQkJCQkJewotCQkJCQkJd2FybmluZyggQ2xhc3NVdGlsLnN0cmlwUGFja2FnZU5hbWUoIGludGVyZmFjZU5hbWUgKSArICIgZG9lcyBub3QgaW1wbGVtZW50IENvbnRhaW5lciIgKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQorICAgICAgICBmaW5hbCBUeXBlSW5mb3MgICAgaW5mb3MgICAgPSBUeXBlSW5mb3MuZ2V0SW5zdGFuY2UoKTsKKworICAgICAgICBmaW5hbCBJdGVyYXRvciAgICBpdGVyICAgID0gaW5mb3MuZ2V0SjJFRVR5cGVzKCkuaXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUgKCBpdGVyLmhhc05leHQoKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpbmFsIFR5cGVJbmZvICAgIGluZm8gICAgPSBpbmZvcy5nZXRJbmZvKCAoU3RyaW5nKWl0ZXIubmV4dCgpICk7CisgICAgICAgICAgICBmaW5hbCBDbGFzcyAgICAgICAgdGhlSW50ZXJmYWNlICAgID0gaW5mby5nZXRJbnRlcmZhY2UoKTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyAgICBpbnRlcmZhY2VOYW1lICAgID0gdGhlSW50ZXJmYWNlLmdldE5hbWUoKTsKKyAgICAgICAgICAgIGlmICggISBNT05fSUdOT1JFLmNvbnRhaW5zKCB0aGVJbnRlcmZhY2UgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCBpbnRlcmZhY2VOYW1lLmVuZHNXaXRoKCAiTW9uaXRvciIgKSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoICEgTW9uaXRvcmluZy5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKCB0aGVJbnRlcmZhY2UgKSApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoIENsYXNzVXRpbC5zdHJpcFBhY2thZ2VOYW1lKCBpbnRlcmZhY2VOYW1lICkgKyAiIGRvZXMgbm90IGltcGxlbWVudCBNb25pdG9yaW5nIiApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKCBpbnRlcmZhY2VOYW1lLmVuZHNXaXRoKCAiTW9uaXRvck1nciIgKSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoICEgQ29udGFpbmVyLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oIHRoZUludGVyZmFjZSApICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZyggQ2xhc3NVdGlsLnN0cmlwUGFja2FnZU5hbWUoIGludGVyZmFjZU5hbWUgKSArICIgZG9lcyBub3QgaW1wbGVtZW50IENvbnRhaW5lciIgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogKi8KICAgICB9CiAKQEAgLTk0MSwxMiArOTQxLDEyIEBACiAKICAgICAgICAgICAgIGlmIChkZWJ1ZyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHMgID0gZGVidWcuZ2V0SW1wbFN0cmluZyggdHJ1ZSApOwotCSAgICAgICAgICAgIGFzc2VydCggcy5sZW5ndGgoKSAhPSAwICk7Ci0JICAgICAgICB9Ci0JICAgIH0KLQkgICAgCi0JICAgIHByaW50RWxhcHNlZCggInRlc3RUb1N0cmluZyIsIGFsbC5zaXplKCksIHN0YXJ0ICk7Ci0JfQorICAgICAgICAgICAgICAgIGFzc2VydCggcy5sZW5ndGgoKSAhPSAwICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcmludEVsYXBzZWQoICJ0ZXN0VG9TdHJpbmciLCBhbGwuc2l6ZSgpLCBzdGFydCApOworICAgIH0KIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvYmFzZS9Ob3RpZmljYXRpb25TZXJ2aWNlVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L2Jhc2UvTm90aWZpY2F0aW9uU2VydmljZVRlc3QuamF2YQppbmRleCA5ODYyMGM4Li5mZjg0NzlkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvYmFzZS9Ob3RpZmljYXRpb25TZXJ2aWNlVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9iYXNlL05vdGlmaWNhdGlvblNlcnZpY2VUZXN0LmphdmEKQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgICAgICAgICAgbVJlY2VpdmVkLmFkZChub3RpZik7CiAgICAgICAgICAgICBtTGF0Y2guY291bnREb3duKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcHVibGljIGJvb2xlYW4gYXdhaXQoIGZpbmFsIGxvbmcgYW10LCBmaW5hbCBUaW1lVW5pdCB1bml0cyApCiAgICAgICAgICAgICB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24KICAgICAgICAgewpAQCAtMTUyLDcgKzE1Miw3IEBACiAgICAgICAgICAgICAvL3RyYWNlKCAidGVzdExpc3RlbjogRkFJTEVEIFRJTUVPVVQiICk7CiAgICAgICAgICAgICBhc3NlcnQgZmFsc2UgOiAiTm90aWZpY2F0aW9uU2VydmljZVRlc3QudGVzdExpc3RlbigpOiAgVElNRUQgT1VUIHdhaXRpbmcgZm9yIE5vdGlmaWNhdGlvbnMiOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vdHJhY2UoICJ0ZXN0TGlzdGVuOiBOT1QgRkFJTEVEIiApOwogICAgICAgICBhc3NlcnQgKG15TGlzdGVuZXIuZ2V0Q291bnQoKSA9PSAyKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L2Jhc2UvVXBsb2FkRG93bmxvYWRNZ3JUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvYmFzZS9VcGxvYWREb3dubG9hZE1nclRlc3QuamF2YQppbmRleCAxODRiZDBmLi5lYzdjNGQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvYmFzZS9VcGxvYWREb3dubG9hZE1nclRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvYmFzZS9VcGxvYWREb3dubG9hZE1nclRlc3QuamF2YQpAQCAtMzQ0LDcgKzM0NCw3IEBACiAgICAgdGVzdFVwbG9hZEZpbGU1KCkKICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIE9iamVjdCBpZCA9IHVwbG9hZChudWxsLCAxICsgMjA0OCAqIEspOwotCX0KKyAgICB9CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L2NsaWVudC9NaXNjVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L2NsaWVudC9NaXNjVGVzdC5qYXZhCmluZGV4IDczZGUzN2MuLmFlZDhjNzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9jbGllbnQvTWlzY1Rlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvY2xpZW50L01pc2NUZXN0LmphdmEKQEAgLTY1LDE0ICs2NSwxNCBAQAogICAgICB0ZXN0R2V0UHJvcGVydHlOYW1lcygpCiAgICAgIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uCiAgICAgIHsKLSAgICAgZmluYWwgU2V0CXMJPSBnZXRRdWVyeU1ncigpLnF1ZXJ5SW50ZXJmYWNlU2V0KCBQcm9wZXJ0aWVzQWNjZXNzLmNsYXNzLmdldE5hbWUoKSwgbnVsbCApOworICAgICBmaW5hbCBTZXQgICAgcyAgICA9IGdldFF1ZXJ5TWdyKCkucXVlcnlJbnRlcmZhY2VTZXQoIFByb3BlcnRpZXNBY2Nlc3MuY2xhc3MuZ2V0TmFtZSgpLCBudWxsICk7CiAKICAgICAgZm9yKCBpbnQgaSA9IDA7IGkgPCA1MDAwOyArK2kgKQogICAgICB7Ci0gICAgIGZpbmFsIEl0ZXJhdG9yIGl0ZXIJPSBzLml0ZXJhdG9yKCk7CisgICAgIGZpbmFsIEl0ZXJhdG9yIGl0ZXIgICAgPSBzLml0ZXJhdG9yKCk7CiAgICAgIHdoaWxlICggaXRlci5oYXNOZXh0KCkgKQogICAgICB7Ci0gICAgIGZpbmFsIFByb3BlcnRpZXNBY2Nlc3MJcGEJPSAoUHJvcGVydGllc0FjY2VzcylpdGVyLm5leHQoKTsKKyAgICAgZmluYWwgUHJvcGVydGllc0FjY2VzcyAgICBwYSAgICA9IChQcm9wZXJ0aWVzQWNjZXNzKWl0ZXIubmV4dCgpOwogCiAgICAgIHBhLmdldFByb3BlcnR5TmFtZXMoKTsKICAgICAgfQpAQCAtMTIwLDkgKzEyMCw5IEBACiAgICAgICAgICAgICBmaW5hbCBPYmplY3ROYW1lIG9uID0gVXRpbC5uZXdPYmplY3ROYW1lKG9iamVjdE5hbWVTdHJpbmcpOwogCiAgICAgICAgICAgICBhc3NlcnQgKG9uLmVxdWFscyhuc09iamVjdE5hbWUpKTsKLQkJfQotCX0KLQkKKyAgICAgICAgfQorICAgIH0KKwogCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9jbGllbnQvUGVyZm9ybWFuY2VUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvY2xpZW50L1BlcmZvcm1hbmNlVGVzdC5qYXZhCmluZGV4IGQwMmNhNTMuLjY3MDAyZWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9jbGllbnQvUGVyZm9ybWFuY2VUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L2NsaWVudC9QZXJmb3JtYW5jZVRlc3QuamF2YQpAQCAtMjUxLDE5ICsyNTEsMTkgQEAKICAgICAgewogICAgICAgICAgRG9tYWluQ29uZmlnIGRvbWFpbkNvbmZpZyA9IGdldERvbWFpblJvb3QoKS5nZXREb21haW5Db25maWcoKTsKIAotICAgICAgICAgZmluYWwgbG9uZwlzdGFydAk9IG5vdygpOworICAgICAgICAgZmluYWwgbG9uZyAgICBzdGFydCAgICA9IG5vdygpOwogCi0gICAgICAgICBmaW5hbCBpbnQJSVRFUgk9IDEwMDsKKyAgICAgICAgIGZpbmFsIGludCAgICBJVEVSICAgID0gMTAwOwogICAgICAgICAgZm9yKCBpbnQgaSA9IDA7IGkgPCBJVEVSOyArK2kgKQogICAgICAgICAgewotICAgICAgICAgICAgIGZpbmFsIE1hcHh4eCBzZXJ2ZXJzCT0gZG9tYWluQ29uZmlnLmdldFN0YW5kYWxvbmVTZXJ2ZXJDb25maWdNYXAoKTsKLSAgICAgICAgICAgICBmaW5hbCBNYXB4eHggY2x1c3RlcnMJPSBkb21haW5Db25maWcuZ2V0Q2x1c3RlckNvbmZpZ01hcCgpOworICAgICAgICAgICAgIGZpbmFsIE1hcHh4eCBzZXJ2ZXJzICAgID0gZG9tYWluQ29uZmlnLmdldFN0YW5kYWxvbmVTZXJ2ZXJDb25maWdNYXAoKTsKKyAgICAgICAgICAgICBmaW5hbCBNYXB4eHggY2x1c3RlcnMgICAgPSBkb21haW5Db25maWcuZ2V0Q2x1c3RlckNvbmZpZ01hcCgpOwogCi0gICAgICAgICAgICAgZmluYWwgU3RyaW5nW10gc2VydmVyTmFtZXMJPSBHU2V0VXRpbC50b1N0cmluZ0FycmF5KCBzZXJ2ZXJzLmtleVNldCgpICk7Ci0gICAgICAgICAgICAgZmluYWwgU3RyaW5nW10gY2x1c3Rlck5hbWVzCT0gR1NldFV0aWwudG9TdHJpbmdBcnJheSggY2x1c3RlcnMua2V5U2V0KCkgKTsKKyAgICAgICAgICAgICBmaW5hbCBTdHJpbmdbXSBzZXJ2ZXJOYW1lcyAgICA9IEdTZXRVdGlsLnRvU3RyaW5nQXJyYXkoIHNlcnZlcnMua2V5U2V0KCkgKTsKKyAgICAgICAgICAgICBmaW5hbCBTdHJpbmdbXSBjbHVzdGVyTmFtZXMgICAgPSBHU2V0VXRpbC50b1N0cmluZ0FycmF5KCBjbHVzdGVycy5rZXlTZXQoKSApOwogICAgICAgICAgfQogCi0gICAgICAgICBmaW5hbCBsb25nCWVsYXBzZWQJPSBub3coKSAtIHN0YXJ0OworICAgICAgICAgZmluYWwgbG9uZyAgICBlbGFwc2VkICAgID0gbm93KCkgLSBzdGFydDsKICAgICAgICAgIHByaW50UGVyZiggInRlc3RUYXJnZXRzOiAiICsgSVRFUiArICIgaXRlcmF0aW9uczogIiArIGVsYXBzZWQpOwogICAgICB9CiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvY2xpZW50L1Byb3h5VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L2NsaWVudC9Qcm94eVRlc3QuamF2YQppbmRleCBmNWRkNDI2Li5iZjAxNWM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvY2xpZW50L1Byb3h5VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9jbGllbnQvUHJveHlUZXN0LmphdmEKQEAgLTEzNSwyMiArMTM1LDIyIEBACiAgICAgcHVibGljIHZvaWQKICAgICB0ZXN0UHJveHlJbnRlcmZhY2VJc0FNWCgpCiAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsvKgotCQlmaW5hbCBsb25nCXN0YXJ0CT0gbm93KCk7Ci0JCWZpbmFsIFR5cGVJbmZvcwlpbmZvcwk9IFR5cGVJbmZvcy5nZXRJbnN0YW5jZSgpOwotCQkKLQkJZmluYWwgSXRlcmF0b3IJaXRlcgk9IGluZm9zLmdldEoyRUVUeXBlcygpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlICggaXRlci5oYXNOZXh0KCkgKQotCQl7Ci0JCQlmaW5hbCBUeXBlSW5mbwlpbmZvCT0gaW5mb3MuZ2V0SW5mbyggKFN0cmluZylpdGVyLm5leHQoKSApOwotCQkJZmluYWwgQ2xhc3MJcHJveHlDbGFzcwk9IGluZm8uZ2V0SW50ZXJmYWNlKCk7Ci0JCQkKLQkJCWlmICggISBBTVguY2xhc3MuaXNBc3NpZ25hYmxlRnJvbSggcHJveHlDbGFzcyApICkKLQkJCXsKLQkJCQl3YXJuaW5nKCAiUHJveHkgaW50ZXJmYWNlIGRvZXMgbm90IGV4dGVuZCBBTVg6ICIgKyBwcm94eUNsYXNzLmdldE5hbWUoKSApOwotCQkJfQotCQl9Ci0JCXByaW50RWxhcHNlZCggInRlc3RQcm94eUludGVyZmFjZU5hbWVDb25zaXN0ZW50Iiwgc3RhcnQgKTsKLQkJKi8KKyAgICAgICAgZmluYWwgbG9uZyAgICBzdGFydCAgICA9IG5vdygpOworICAgICAgICBmaW5hbCBUeXBlSW5mb3MgICAgaW5mb3MgICAgPSBUeXBlSW5mb3MuZ2V0SW5zdGFuY2UoKTsKKworICAgICAgICBmaW5hbCBJdGVyYXRvciAgICBpdGVyICAgID0gaW5mb3MuZ2V0SjJFRVR5cGVzKCkuaXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUgKCBpdGVyLmhhc05leHQoKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpbmFsIFR5cGVJbmZvICAgIGluZm8gICAgPSBpbmZvcy5nZXRJbmZvKCAoU3RyaW5nKWl0ZXIubmV4dCgpICk7CisgICAgICAgICAgICBmaW5hbCBDbGFzcyAgICBwcm94eUNsYXNzICAgID0gaW5mby5nZXRJbnRlcmZhY2UoKTsKKworICAgICAgICAgICAgaWYgKCAhIEFNWC5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKCBwcm94eUNsYXNzICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdhcm5pbmcoICJQcm94eSBpbnRlcmZhY2UgZG9lcyBub3QgZXh0ZW5kIEFNWDogIiArIHByb3h5Q2xhc3MuZ2V0TmFtZSgpICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRFbGFwc2VkKCAidGVzdFByb3h5SW50ZXJmYWNlTmFtZUNvbnNpc3RlbnQiLCBzdGFydCApOworICAgICAgICAqLwogICAgIH0KIAogCkBAIC0yNzYsNyArMjc2LDcgQEAKIAogICAgICAgICAvLyBzaG91bGQgYmUgPCAzMDAgbXMsIHNvIHRoaXMgaXMgYSAxMFggbWFyZ2luLi4uCiAgICAgICAgIGFzc2VydCAoZWxhcHNlZCA8IDMwMCAqIDEwICk7Ci0JfQorICAgIH0KIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvY29uZmlnL0F1dGhSZWFsbUNvbmZpZ1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9jb25maWcvQXV0aFJlYWxtQ29uZmlnVGVzdC5qYXZhCmluZGV4IDIwOTQxMTQuLmZjZmJhOGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9jb25maWcvQXV0aFJlYWxtQ29uZmlnVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9jb25maWcvQXV0aFJlYWxtQ29uZmlnVGVzdC5qYXZhCkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQKICAgICB0ZXN0QWRkUmVtb3ZlVXBkYXRlVXNlcigpCiAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAKKwogICAgICAgICB3YXJuaW5nKCAidGVzdEFkZFJlbW92ZVVwZGF0ZVVzZXIuQXV0aFJlYWxtQ29uZmlnVGVzdCgpOiBOTyBBUEkgZXhpc3RzIHRvIGFkZC9yZW1vdmUgdXNlcnMiICk7CiAgICAgICAgIC8qCiAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIEF1dGhSZWFsbUNvbmZpZz4gYXJjTWFwID0gZ2V0VGVzdGFibGVBdXRoUmVhbG1zKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvY29uZmlnL0F2YWlsYWJpbGl0eVNlcnZpY2VDb25maWdUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvY29uZmlnL0F2YWlsYWJpbGl0eVNlcnZpY2VDb25maWdUZXN0LmphdmEKaW5kZXggZDMwNWEzZC4uOTMyZjc0NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L2NvbmZpZy9BdmFpbGFiaWxpdHlTZXJ2aWNlQ29uZmlnVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9jb25maWcvQXZhaWxhYmlsaXR5U2VydmljZUNvbmZpZ1Rlc3QuamF2YQpAQCAtNjYsNyArNjYsNyBAQAogICAgICAgICAgICAgZmluYWwgU3RyaW5nIHNhdmUgPSBhc2MuZ2V0QXV0b01hbmFnZUhBU3RvcmUoKTsKICAgICAgICAgICAgIGFzYy5zZXRBdXRvTWFuYWdlSEFTdG9yZSgiIiArIHRydWUpOwogICAgICAgICAgICAgYXNzZXJ0VHJ1ZSgiZ2V0QXV0b01hbmFnZUhBU3RvcmUoKSB3YXMgc3VwcG9zZWQgdG8gcmV0dXJuIHRydWUuIiwgYXNjLmdldEF1dG9NYW5hZ2VIQVN0b3JlKCkuZXF1YWxzKCJ0cnVlIikpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGFzYy5zZXRBdXRvTWFuYWdlSEFTdG9yZSgiIiArIGZhbHNlKTsKICAgICAgICAgICAgIGFzc2VydEZhbHNlKCJnZXRBdXRvTWFuYWdlSEFTdG9yZSgpIHdhcyBzdXBwb3NlZCB0byByZXR1cm4gZmFsc2UuIiwgYXNjLmdldEF1dG9NYW5hZ2VIQVN0b3JlKCkuZXF1YWxzKCJmYWxzZSIpKTsKICAgICAgICAgICAgIGFzYy5zZXRBdXRvTWFuYWdlSEFTdG9yZShzYXZlKTsKQEAgLTE2MCwxMyArMTYwLDEzIEBACiAgICAgICAgICAgICBhc2Muc2V0SEFTdG9yZUhlYWx0aGNoZWNrRW5hYmxlZCgiIiArIGZhbHNlKTsKICAgICAgICAgICAgIGFzc2VydEZhbHNlKCJnZXRIQVN0b3JlSGVhbHRoY2hlY2tFbmFibGVkKCkgd2FzIHN1cHBvc2VkIHRvIHJldHVybiBmYWxzZS4iLAogICAgICAgICAgICAgICAgIEF0dHJpYnV0ZVJlc29sdmVySGVscGVyLnJlc29sdmVCb29sZWFuKCBhc2MsIGFzYy5nZXRIQVN0b3JlSGVhbHRoY2hlY2tFbmFibGVkKCkpKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgYXNjLnNldEhBU3RvcmVIZWFsdGhjaGVja0VuYWJsZWQoIiIgKyB0cnVlKTsKICAgICAgICAgICAgIGFzc2VydFRydWUoImdldEhBU3RvcmVIZWFsdGhjaGVja0VuYWJsZWQoKSB3YXMgc3VwcG9zZWQgdG8gcmV0dXJuIHRydWUuIiwKICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVSZXNvbHZlckhlbHBlci5yZXNvbHZlQm9vbGVhbiggYXNjLCBhc2MuZ2V0SEFTdG9yZUhlYWx0aGNoZWNrRW5hYmxlZCgpKSk7CiAgICAgICAgICAgICBhc2Muc2V0SEFTdG9yZUhlYWx0aGNoZWNrRW5hYmxlZCggc2F2ZSApOwogICAgICAgICB9Ci0JfQorICAgIH0KIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvY29uZmlnL0VuYWJsZWRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvY29uZmlnL0VuYWJsZWRUZXN0LmphdmEKaW5kZXggYzNmMDIyMy4uMDQyNDUzMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L2NvbmZpZy9FbmFibGVkVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9jb25maWcvRW5hYmxlZFRlc3QuamF2YQpAQCAtMzQsNyArMzQsNyBAQAogCiAgICAgICAgIGZvciAoZmluYWwgRW5hYmxlZCBlIDogYWxsKSB7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgdmFsdWUgPSBlLmdldEVuYWJsZWQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBlLnNldEVuYWJsZWQoIHZhbHVlICk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvY29uZmlnL0lJT1BMaXN0ZW5lckNvbmZpZ1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9jb25maWcvSUlPUExpc3RlbmVyQ29uZmlnVGVzdC5qYXZhCmluZGV4IDA1NTQ2ZDIuLjZhYTgzMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9jb25maWcvSUlPUExpc3RlbmVyQ29uZmlnVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9jb25maWcvSUlPUExpc3RlbmVyQ29uZmlnVGVzdC5qYXZhCkBAIC0xMjcsMjEgKzEyNywyMSBAQAogICAgICAgICB9CiAgICAgfQogLyoKLQkJcHVibGljIHZvaWQKLQl0ZXN0Q3JlYXRlU1NMQ2xpZW50Q29uZmlnKCkKLQkJdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJZmluYWwgU2V0PElJT1BTZXJ2aWNlQ29uZmlnPiBzID0gZ2V0UXVlcnlNZ3IoKS5nZXRKMkVFVHlwZVByb3hpZXMoIlgtSUlPUFNlcnZpY2VDb25maWciKTsKLQkJYXNzZXJ0IHMuc2l6ZSgpID49IDA7Ci0JCUlJT1BTZXJ2aWNlQ29uZmlnIGlpb3BTZXJ2aWNlID0gKElJT1BTZXJ2aWNlQ29uZmlnKXMuaXRlcmF0b3IoKS5uZXh0KCk7Ci0JCWFzc2VydCBpaW9wU2VydmljZSAhPSBudWxsOwotCQlNYXAgc3NsUGFyYW1zID0gbmV3IEhhc2hNYXAoKTsKLQkJc3NsUGFyYW1zLnB1dCgiQ2VydE5pY2tuYW1lIiwgIm15Y2VydCIpOwotCQlmaW5hbCBPYmplY3ROYW1lIG9uID0gaWlvcFNlcnZpY2UuY3JlYXRlSUlPUFNTTENsaWVudENvbmZpZyhzc2xQYXJhbXMpOwotCQlhc3NlcnQgb24gIT0gbnVsbCAmJiBvbi5lcXVhbHMoaWlvcFNlcnZpY2UuZ2V0SUlPUFNTTENsaWVudENvbmZpZ09iamVjdE5hbWUoKSk7Ci0JCUlJT1BTU0xDbGllbnRDb25maWcgc3NsQ2xpZW50Q29uZmlnID0gaWlvcFNlcnZpY2UuZ2V0SUlPUFNTTENsaWVudENvbmZpZygpOwotCQlhc3NlcnQgc3NsQ2xpZW50Q29uZmlnICE9IG51bGw7Ci0JfQorICAgICAgICBwdWJsaWMgdm9pZAorICAgIHRlc3RDcmVhdGVTU0xDbGllbnRDb25maWcoKQorICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCisgICAgeworICAgICAgICBmaW5hbCBTZXQ8SUlPUFNlcnZpY2VDb25maWc+IHMgPSBnZXRRdWVyeU1ncigpLmdldEoyRUVUeXBlUHJveGllcygiWC1JSU9QU2VydmljZUNvbmZpZyIpOworICAgICAgICBhc3NlcnQgcy5zaXplKCkgPj0gMDsKKyAgICAgICAgSUlPUFNlcnZpY2VDb25maWcgaWlvcFNlcnZpY2UgPSAoSUlPUFNlcnZpY2VDb25maWcpcy5pdGVyYXRvcigpLm5leHQoKTsKKyAgICAgICAgYXNzZXJ0IGlpb3BTZXJ2aWNlICE9IG51bGw7CisgICAgICAgIE1hcCBzc2xQYXJhbXMgPSBuZXcgSGFzaE1hcCgpOworICAgICAgICBzc2xQYXJhbXMucHV0KCJDZXJ0Tmlja25hbWUiLCAibXljZXJ0Iik7CisgICAgICAgIGZpbmFsIE9iamVjdE5hbWUgb24gPSBpaW9wU2VydmljZS5jcmVhdGVJSU9QU1NMQ2xpZW50Q29uZmlnKHNzbFBhcmFtcyk7CisgICAgICAgIGFzc2VydCBvbiAhPSBudWxsICYmIG9uLmVxdWFscyhpaW9wU2VydmljZS5nZXRJSU9QU1NMQ2xpZW50Q29uZmlnT2JqZWN0TmFtZSgpKTsKKyAgICAgICAgSUlPUFNTTENsaWVudENvbmZpZyBzc2xDbGllbnRDb25maWcgPSBpaW9wU2VydmljZS5nZXRJSU9QU1NMQ2xpZW50Q29uZmlnKCk7CisgICAgICAgIGFzc2VydCBzc2xDbGllbnRDb25maWcgIT0gbnVsbDsKKyAgICB9CiAgKi8KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L2NvbmZpZy9MQlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9jb25maWcvTEJUZXN0LmphdmEKaW5kZXggZmI5MTNlZC4uNzc1ZDliNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L2NvbmZpZy9MQlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvY29uZmlnL0xCVGVzdC5qYXZhCkBAIC0xMDUsMTUgKzEwNSwxNSBAQAogICAgICAgICAgICAgTUJlYW5JbmZvIG1pbmZvID0gZ2V0Q29ubmVjdGlvbigpLmdldE1CZWFuSW5mbyhvYmpOYW1lKTsKICAgICAgICAgICAgIE1CZWFuQXR0cmlidXRlSW5mb1tdIG1hdHRyc2luZm8gPSBtaW5mby5nZXRBdHRyaWJ1dGVzKCk7CiAgICAgICAgICAgICAvKgotICAgICAgICAgICAgZm9yIChNQmVhbkF0dHJpYnV0ZUluZm8gbWF0dHJpbmZvIDogbWF0dHJzaW5mbykgCisgICAgICAgICAgICBmb3IgKE1CZWFuQXR0cmlidXRlSW5mbyBtYXR0cmluZm8gOiBtYXR0cnNpbmZvKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXR0cmlidXRlIE5hbWUgaXMgOiAiICsgbWF0dHJpbmZvLmdldE5hbWUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAqLwogCiAgICAgICAgICAgICBTdHJpbmdbXSBhdHRyc05hbWVzID0gKFN0cmluZ1tdKSBnZXRDb25uZWN0aW9uKCkuZ2V0QXR0cmlidXRlKG9iak5hbWUsICJBdHRyaWJ1dGVOYW1lcyIpOwotICAgICAgICAgICAgLypmb3IgKFN0cmluZyBhdHRyTmFtZSA6IGF0dHJzTmFtZXMpIAotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWN0dWFsIEF0dHJpYnV0ZSBOYW1lIGlzIDogIiArIGF0dHJOYW1lKTsgICAgICAgICAgICAKKyAgICAgICAgICAgIC8qZm9yIChTdHJpbmcgYXR0ck5hbWUgOiBhdHRyc05hbWVzKQorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWN0dWFsIEF0dHJpYnV0ZSBOYW1lIGlzIDogIiArIGF0dHJOYW1lKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXR0cmlidXRlTmFtZXMgYXJlIDogIiArIGF0dHJzTmFtZXMpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNQmVhbkluZm8gaXMgXG4iK21pbmZvKTsqLwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvY29uZmlnL0xpYnJhcmllc1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9jb25maWcvTGlicmFyaWVzVGVzdC5qYXZhCmluZGV4IDA2MDZlMWMuLjZjYTNlYjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9jb25maWcvTGlicmFyaWVzVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9jb25maWcvTGlicmFyaWVzVGVzdC5qYXZhCkBAIC05NCwxMSArOTQsMTEgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZpbmFsbHkgewogICAgICAgICAgICAgICAgIGwuc2V0TGlicmFyaWVzKCBzYXZlTGlicyApOwotCQkgICAgfQotCQkgICAgCi0JCX0KLQl9Ci0gCisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH0KKwogfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9jb25maWcvTWFpbFJlc291cmNlQ29uZmlnVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L2NvbmZpZy9NYWlsUmVzb3VyY2VDb25maWdUZXN0LmphdmEKaW5kZXggMzM0YzNkNC4uMmM4N2QwNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L2NvbmZpZy9NYWlsUmVzb3VyY2VDb25maWdUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L2NvbmZpZy9NYWlsUmVzb3VyY2VDb25maWdUZXN0LmphdmEKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgICAgICAgIHJlc3VsdCA9IGNyZWF0ZUluc3RhbmNlKGRjLCBnZXREZWZhdWx0SW5zdGFuY2VOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQUlMX1JFU09VUkNFX0hPU1QsIE1BSUxfUkVTT1VSQ0VfVVNFUiwgTUFJTF9SRVNPVVJDRV9GUk9NLCBPUFRJT05TKTsKICAgICAgICAgICAgIGFzc2VydCAhIEF0dHJpYnV0ZVJlc29sdmVySGVscGVyLnJlc29sdmVCb29sZWFuKCByZXN1bHQsICJFbmFibGVkIiApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGZpbmFsIFN0YW5kYWxvbmVTZXJ2ZXJDb25maWcgc2VydmVyQ29uZmlnID0gZGMuZ2V0U2VydmVyc0NvbmZpZygpLmdldFN0YW5kYWxvbmVTZXJ2ZXJDb25maWdNYXAoKS5nZXQoInNlcnZlciIpOwogCiAgICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IG9wdGlvbnMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9jb25maWcvTW9kdWxlTW9uaXRvcmluZ0xldmVsc0NvbmZpZ1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9jb25maWcvTW9kdWxlTW9uaXRvcmluZ0xldmVsc0NvbmZpZ1Rlc3QuamF2YQppbmRleCAxYTVlZDBkLi44MjgyMWQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvY29uZmlnL01vZHVsZU1vbml0b3JpbmdMZXZlbHNDb25maWdUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L2NvbmZpZy9Nb2R1bGVNb25pdG9yaW5nTGV2ZWxzQ29uZmlnVGVzdC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAKICAgICAgICAgZmluYWwgU3RyaW5nW10gYWxsTmFtZXMgPSBuZXcgU3RyaW5nWyBNb2R1bGVNb25pdG9yaW5nTGV2ZWxzQ29uZmlnLkFMTF9MRVZFTF9OQU1FUy5zaXplKCkgXTsKICAgICAgICAgTW9kdWxlTW9uaXRvcmluZ0xldmVsc0NvbmZpZy5BTExfTEVWRUxfTkFNRVMudG9BcnJheSggYWxsTmFtZXMgKTsKLSAgICAgICAgCisKICAgICAgICAgZmluYWwgQXR0cmlidXRlTGlzdCBhdHRycyA9IFV0aWwuZ2V0RXh0cmEobW1sKS5nZXRBdHRyaWJ1dGVzKCBhbGxOYW1lcyApOwogICAgICAgICBhc3NlcnQgYWxsTmFtZXMubGVuZ3RoID09IGF0dHJzLnNpemUoKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvY29uZmlnL1Byb3BlcnRpZXNBY2Nlc3NUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvY29uZmlnL1Byb3BlcnRpZXNBY2Nlc3NUZXN0LmphdmEKaW5kZXggZDI0Y2IyNy4uZDhhNjEyNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L2NvbmZpZy9Qcm9wZXJ0aWVzQWNjZXNzVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9jb25maWcvUHJvcGVydGllc0FjY2Vzc1Rlc3QuamF2YQpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBQcm9wZXJ0eUNvbmZpZz4gYWxsID0gcHJvcHMuZ2V0UHJvcGVydHlDb25maWdNYXAoKTsKIAogICAgICAgICBmb3IgKGZpbmFsIFByb3BlcnR5Q29uZmlnIHByb3AgOiBhbGwudmFsdWVzKCkgKSB7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZSA9IHByb3AuZ2V0TmFtZSgpOyAKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBuYW1lID0gcHJvcC5nZXROYW1lKCk7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgdmFsdWUgPSBwcm9wLmdldFZhbHVlKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgIC8vIGdldCBlYWNoIHByb3BlcnR5LCBzZXQgaXQgdG8gdGhlIHNhbWUgdmFsdWUsIHRoZSB2ZXJpZnkKICAgICAgICAgLy8gaXQncyB0aGUgc2FtZS4KICAgICAgICAgZm9yICggZmluYWwgUHJvcGVydHlDb25maWcgcHJvcCA6IGFsbC52YWx1ZXMoKSApIHsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgdmFsdWUgPSBwcm9wLmdldFZhbHVlKCk7CiAgICAgICAgICAgICBwcm9wLnNldFZhbHVlKHZhbHVlKTsKIApAQCAtMTk0LDkgKzE5NCw5IEBACiAgICAgICAgICAgICBmaW5hbCBTZXQ8T2JqZWN0TmFtZT4gYWxsID0gZ2V0QWxsSW1wbGVtZW50b3JzT2ZQcm9wZXJ0aWVzKCk7CiAKICAgICAgICAgICAgIHRlc3RBbGwoYWxsLCAiY2hlY2tDcmVhdGVSZW1vdmUiKTsKLQkJfQotCX0KLQkKKyAgICAgICAgfQorICAgIH0KKwogfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9jb25maWcvUmVmZXJlbmNlc1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9jb25maWcvUmVmZXJlbmNlc1Rlc3QuamF2YQppbmRleCBmZjc3ZjVjLi42ZjhmZTBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvY29uZmlnL1JlZmVyZW5jZXNUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L2NvbmZpZy9SZWZlcmVuY2VzVGVzdC5qYXZhCkBAIC0xNjIsNyArMTYyLDcgQEAKICAgICAgICAgQ2x1c3RlckNvbmZpZyBjbHVzdGVyID0gY2x1c3Rlck1hcC5nZXQoInRlc3RDbHVzdGVyIik7CiAKICAgICAgICAgY2x1c3Rlci5jcmVhdGVSZXNvdXJjZVJlZkNvbmZpZygiamRiYy9Qb2ludEJhc2UiKTsKLSAgICAgICAgCisKICAgICAgICAgY2x1c3Rlci5yZW1vdmVSZXNvdXJjZVJlZkNvbmZpZygiamRiYy9Qb2ludEJhc2UiKTsKICAgICB9CiAgICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9leHQvd3NtZ210L1dlYlNlcnZpY2VDb25maWdDUlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9leHQvd3NtZ210L1dlYlNlcnZpY2VDb25maWdDUlRlc3QuamF2YQppbmRleCAwNGJlMDgwLi40YWY1ZDNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvZXh0L3dzbWdtdC9XZWJTZXJ2aWNlQ29uZmlnQ1JUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L2V4dC93c21nbXQvV2ViU2VydmljZUNvbmZpZ0NSVGVzdC5qYXZhCkBAIC03Nyw3ICs3Nyw3IEBACiAKICAgICAgICAgICAgIGFjLmNyZWF0ZVdlYlNlcnZpY2VFbmRwb2ludENvbmZpZygicmVtb3ZlI21lIiwgbnVsbCk7CiAKLSAgICAgICAgICAgIG0gPSBhYy5nZXRXZWJTZXJ2aWNlRW5kcG9pbnRDb25maWdNYXAoKTsgICAgICAgICAgICAgCisgICAgICAgICAgICBtID0gYWMuZ2V0V2ViU2VydmljZUVuZHBvaW50Q29uZmlnTWFwKCk7CiAgICAgICAgICAgICBpbnQgYWZ0ZXJDcmVhdGUgID0gbS5zaXplKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldlYlNlcnZpY2VFbmRwb2ludHMgZm91bmQgIiArIGFmdGVyQ3JlYXRlKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L2V4dC93c21nbXQvV2ViU2VydmljZU1nclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9leHQvd3NtZ210L1dlYlNlcnZpY2VNZ3JUZXN0LmphdmEKaW5kZXggMWU5ODQwZC4uZTk5MDMwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L2V4dC93c21nbXQvV2ViU2VydmljZU1nclRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvZXh0L3dzbWdtdC9XZWJTZXJ2aWNlTWdyVGVzdC5qYXZhCkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIGtleSApOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVmFsdWVzIGFyZSAgIik7CiAgICAgICAgICAgICBmb3IoIGZpbmFsIFdlYlNlcnZpY2VFbmRwb2ludEluZm8gaW5mbyA6IGluZm9zLnZhbHVlcygpICkKICAgICAgICAgICAgIHsKQEAgLTE0Niw3ICsxNDYsNyBAQAogICAgICAgICBtYXAucHV0KFdlYlNlcnZpY2VNZ3IuUVVFUllfVVJMX0tFWSwgcXVybCk7CiAgICAgICAgIG1hcC5wdXQoV2ViU2VydmljZU1nci5QVUJMSVNIX1VSTF9LRVksIHB1cmwpOwogCi0gICAgICAgIC8vZ2V0RG9tYWluUm9vdCgpLmdldFdlYlNlcnZpY2VNZ3IoKS5hZGRSZWdpc3RyeUNvbm5lY3Rpb25SZXNvdXJjZXMgKGpuZGluYW1lLCBkZXNjcmlwdGlvbiwgCisgICAgICAgIC8vZ2V0RG9tYWluUm9vdCgpLmdldFdlYlNlcnZpY2VNZ3IoKS5hZGRSZWdpc3RyeUNvbm5lY3Rpb25SZXNvdXJjZXMgKGpuZGluYW1lLCBkZXNjcmlwdGlvbiwKICAgICAgICAgLy8gICAgICAgbWFwKTsKICAgICAgICAgYXNzZXJ0VHJ1ZSh0cnVlKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvajJlZS9KMkVFVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L2oyZWUvSjJFRVRlc3QuamF2YQppbmRleCA5Y2I5NmVlLi45MzY4ZjFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvajJlZS9KMkVFVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9qMmVlL0oyRUVUZXN0LmphdmEKQEAgLTYyLDcgKzYyLDcgQEAKICAgICBnZXRDYXBhYmlsaXRpZXMoKSB7CiAgICAgICAgIHJldHVybiBnZXRPZmZsaW5lQ2FwYWJsZUNhcGFiaWxpdGllcyhmYWxzZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgIFZlcmlmeSB0aGF0IHRoZXJlIGlzIG9uZSBKMkVFU2VydmVyIGZvciBlYWNoIFNlcnZlckNvbmZpZyAoc3RhbmRhbG9uZSBvciBub3QpCiAgICAgICovCkBAIC0zNDAsOCArMzQwLDggQEAKICAgICAgICAgaWYgKGZhaWxlZFNldC5zaXplKCkgIT0gMCkgewogICAgICAgICAgICAgZmFpbHVyZSgiRmFpbHVyZXMgaW4gdGhlIGZvbGxvd2luZyAiICsgZmFpbGVkU2V0LnNpemUoKSArICIgTUJlYW5zOlxuIiArCiAgICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nKGZhaWxlZFNldCkgKTsKLQkJfQotCX0KKyAgICAgICAgfQorICAgIH0KIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvbW9uaXRvci9DYWxsRmxvd01vbml0b3JUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvbW9uaXRvci9DYWxsRmxvd01vbml0b3JUZXN0LmphdmEKaW5kZXggZDUyNDEyNS4uZTA1NDY1MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L21vbml0b3IvQ2FsbEZsb3dNb25pdG9yVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9tb25pdG9yL0NhbGxGbG93TW9uaXRvclRlc3QuamF2YQpAQCAtMTY4LDQgKzE2OCw0IEBACiB9CiAKIAotCQorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvbW9uaXRvci9Db25uZWN0aW9uUG9vbFN0YXRzVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L21vbml0b3IvQ29ubmVjdGlvblBvb2xTdGF0c1Rlc3QuamF2YQppbmRleCBhY2MyMDFmLi4xOTg5MDY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvbW9uaXRvci9Db25uZWN0aW9uUG9vbFN0YXRzVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9tb25pdG9yL0Nvbm5lY3Rpb25Qb29sU3RhdHNUZXN0LmphdmEKQEAgLTgyLDEwICs4MiwxMCBAQAogICAgICAgICBmaW5hbCBDb3VudFN0YXRpc3RpYyBjNSA9IHMuZ2V0TnVtQ29ubkRlc3Ryb3llZCgpOwogICAgICAgICBhc3NlcnQgKGM1ICE9IG51bGwpOwogCi0gICAgICAgIC8vZmluYWwgQ291bnRTdGF0aXN0aWMgYzYJPSBzLmdldE51bUNvbm5PcGVuZWQoKTsKKyAgICAgICAgLy9maW5hbCBDb3VudFN0YXRpc3RpYyBjNiAgICA9IHMuZ2V0TnVtQ29ubk9wZW5lZCgpOwogICAgICAgICAvLyBhc3NlcnQoIGM2ICE9IG51bGwgKTsKIAotICAgICAgICAvL2ZpbmFsIENvdW50U3RhdGlzdGljIGM3CT0gcy5nZXROdW1Db25uQ2xvc2VkKCk7CisgICAgICAgIC8vZmluYWwgQ291bnRTdGF0aXN0aWMgYzcgICAgPSBzLmdldE51bUNvbm5DbG9zZWQoKTsKICAgICAgICAgLy8gYXNzZXJ0KCBjNyAhPSBudWxsICk7CiAKICAgICAgICAgZmluYWwgQ291bnRTdGF0aXN0aWMgYzggPSBzLmdldEF2ZXJhZ2VDb25uV2FpdFRpbWUoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9tb25pdG9yL01vbml0b3JUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3QvbW9uaXRvci9Nb25pdG9yVGVzdC5qYXZhCmluZGV4IDY2OTAyMGYuLmZlZjJlNTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9tb25pdG9yL01vbml0b3JUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L21vbml0b3IvTW9uaXRvclRlc3QuamF2YQpAQCAtMzY2LDcgKzM2Niw3IEBACiAgICAgICAgIGZpbmFsIFNldDxNb25pdG9yaW5nU3RhdHM+IGFsbCA9IGdldEFsbE1vbml0b3JpbmdTdGF0cygpOwogICAgICAgICBhc3NlcnQgKGFsbC5zaXplKCkgPj0gMTApIDogIk1vbml0b3JpbmcgaXMgbm90IHR1cm5lZCBvbiI7CiAKLSAgICAgICAgLy9maW5hbCBTZXQJYWxsCT0gZ2V0UXVlcnlNZ3IoKS5xdWVyeUludGVyZmFjZVNldCggY29tLnN1bi5hcHBzZXJ2Lm1hbmFnZW1lbnQubW9uaXRvci5IVFRQU2VydmljZVZpcnR1YWxTZXJ2ZXJNb25pdG9yLmNsYXNzLmdldE5hbWUoKSwgbnVsbCApOworICAgICAgICAvL2ZpbmFsIFNldCAgICBhbGwgICAgPSBnZXRRdWVyeU1ncigpLnF1ZXJ5SW50ZXJmYWNlU2V0KCBjb20uc3VuLmFwcHNlcnYubWFuYWdlbWVudC5tb25pdG9yLkhUVFBTZXJ2aWNlVmlydHVhbFNlcnZlck1vbml0b3IuY2xhc3MuZ2V0TmFtZSgpLCBudWxsICk7CiAKICAgICAgICAgdGVzdEFsbChVdGlsLnRvT2JqZWN0TmFtZXMoYWxsKSwgImNoZWNrQWxsU3RhdHMiKTsKIApAQCAtNDU2LDcgKzQ1Niw3IEBACiAgICAgICAgIHRlc3RBbGwoVXRpbC50b09iamVjdE5hbWVzKGFsbCksICJjaGVja1N0YXRzQ2xhc3NTdXBwbGllc0FsbFN0YXRpc3RpY3MiKTsKIAogICAgICAgICBwcmludEVsYXBzZWQoInRlc3RTdGF0c0NsYXNzU3VwcGxpZXNBbGxTdGF0aXN0aWNzIiwgYWxsLnNpemUoKSwgc3RhcnQgKTsKLQl9CisgICAgfQogfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9zdXBwb3J0L0NvdmVyYWdlSW5mb1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9zdXBwb3J0L0NvdmVyYWdlSW5mb1Rlc3QuamF2YQppbmRleCA2YzQzZWE1Li5kNzVjNGQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3Qvc3VwcG9ydC9Db3ZlcmFnZUluZm9UZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L3N1cHBvcnQvQ292ZXJhZ2VJbmZvVGVzdC5qYXZhCkBAIC02OCw4ICs2OCw4IEBACiAgICAgICAgIGFzc2VydCBpbXBsLmdldE9wZXJhdGlvbnNJbnZva2VkKCkuc2l6ZSgpID09IDA7CiAgICAgICAgICovCiAgICAgfQotICAgIAotICAgIAorCisKIC8qCiAKIApAQCAtODAsNyArODAsNyBAQAogICAgIH0KIAogCi0JICAgIHB1YmxpYyB2b2lkCisgICAgICAgIHB1YmxpYyB2b2lkCiAgICAgdGVzdEF0dHJpYnV0ZXMoKQogICAgIHsKICAgICAgICAgZmluYWwgTUJlYW5JbmZvIG1iZWFuSW5mbyAgICA9IGdldFRlc3RNQmVhbkluZm8oKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9zdXBwb3J0L0NyZWF0ZVJlbW92ZUxpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYW14L3NyYy9vcmcvZ2xhc3NmaXNoL2FkbWluL2FteHRlc3Qvc3VwcG9ydC9DcmVhdGVSZW1vdmVMaXN0ZW5lci5qYXZhCmluZGV4IDYxYjMzMzkuLjhiMzUwZWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hbXgvc3JjL29yZy9nbGFzc2Zpc2gvYWRtaW4vYW14dGVzdC9zdXBwb3J0L0NyZWF0ZVJlbW92ZUxpc3RlbmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FteC9zcmMvb3JnL2dsYXNzZmlzaC9hZG1pbi9hbXh0ZXN0L3N1cHBvcnQvQ3JlYXRlUmVtb3ZlTGlzdGVuZXIuamF2YQpAQCAtNTgsNyArNTgsNyBAQAogICAgICAgICAgICAgZmluYWwgT2JqZWN0IGhhbmRiYWNrKSB7CiAgICAgICAgIGZpbmFsIFN0cmluZyB0eXBlID0gbm90aWZJbi5nZXRUeXBlKCk7CiAKLSAgICAgICAgLy9maW5hbCBNYXA8U3RyaW5nLFNlcmlhbGl6YWJsZT4JbQk9IGdldEFNWE5vdGlmaWNhdGlvbkRhdGEgKiBub3RpZkluICk7CisgICAgICAgIC8vZmluYWwgTWFwPFN0cmluZyxTZXJpYWxpemFibGU+ICAgIG0gICAgPSBnZXRBTVhOb3RpZmljYXRpb25EYXRhICogbm90aWZJbiApOwogICAgICAgICBmaW5hbCBPYmplY3ROYW1lIG9iamVjdE5hbWUgPQogICAgICAgICAgICAgICAgIFV0aWwuZ2V0QU1YTm90aWZpY2F0aW9uVmFsdWUobm90aWZJbiwgQU1YQ29uZmlnLkNPTkZJR19PQkpFQ1RfTkFNRV9LRVksIE9iamVjdE5hbWUuY2xhc3MpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvY29tbW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9jb21tb24ueG1sCmluZGV4IGM1OWE2MjIuLjJjYWY2YzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9jb21tb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9jb21tb24ueG1sCkBAIC0xNywxNSArMTcsMTUgQEAKIC0tPgogCiA8IS0tCi0gICAgVGhpcyBpcyB0aGUgdG9wIGxldmVsIGJ1aWxkIGZpbGUgdGhhdCBzaG91bGQgYmUgCi0gICAgaW1wb3J0ZWQgaW50byBhbGwgdGhlIGxlYWYgbGV2ZWwgYnVpbGQgZmlsZXMgCisgICAgVGhpcyBpcyB0aGUgdG9wIGxldmVsIGJ1aWxkIGZpbGUgdGhhdCBzaG91bGQgYmUKKyAgICBpbXBvcnRlZCBpbnRvIGFsbCB0aGUgbGVhZiBsZXZlbCBidWlsZCBmaWxlcwogLS0+CiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDwhLS0gVGFyZ2V0cyB0byBjbGVhbiBjbGFzcyBmaWxlcyBhbmQgamFycyBmaWxlcyAtLT4KLTwhLS0gCi1WYXJpYWJsZXMgdXNlZDogCi0gICAgJHtidWlsZC5jbGFzc2VzLmRpcn0gCis8IS0tCitWYXJpYWJsZXMgdXNlZDoKKyAgICAke2J1aWxkLmNsYXNzZXMuZGlyfQogICAgICR7YXNzZW1ibGUuZGlyfQogLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CkBAIC00NSw5ICs0NSw5IEBACiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDwhLS0gVGFyZ2V0IHRvIGNvbXBpbGUgdGhlIGphdmEgc291cmNlIGZpbGVzIC0tPgotPCEtLSAKLVZhcmlhYmxlcyB1c2VkOiAKLSAgICAke2J1aWxkLmNsYXNzZXMuZGlyfSAKKzwhLS0KK1ZhcmlhYmxlcyB1c2VkOgorICAgICR7YnVpbGQuY2xhc3Nlcy5kaXJ9CiAgICAgJHtzMWFzdGVzdC5jbGFzc3BhdGh9CiAgICAgJHtzcmN9CiAtLT4KQEAgLTgxLDcgKzgxLDcgQEAKIFZhcmlhYmxlcyBVc2VkOgogICAgICR7d2FyLmZpbGV9CiAgICAgJHtidWlsZC5jbGFzc2VzLmRpcn0KLSAgICAke2FwcG5hbWV9ICAgIAorICAgICR7YXBwbmFtZX0KICAgICAke2Fzc2VtYmxlLmRpcn0KICAgICAke3dlYi54bWx9CiAgICAgJHtiZWFucy54bWx9CkBAIC0xNDEsMTggKzE0MSwxOCBAQAogICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMiIC8+CiAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvbGliIiAvPgogICAgIDxta2RpciBkaXI9ImxpYiIgLz4KLSAgICAKLSAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC13ZWIueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbCIgCisKKyAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC13ZWIueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIiBxdWlldD0idHJ1ZSIgLz4KICAgICA8Y29weSBmaWxlPSIke3N1bi13ZWIueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9zdW4td2ViLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIiBxdWlldD0idHJ1ZSIvPgotICAgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLWVqYi1qYXIueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9nbGFzc2Zpc2gtZWpiLWphci54bWwiIAorICAgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLWVqYi1qYXIueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9nbGFzc2Zpc2gtZWpiLWphci54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIgcXVpZXQ9InRydWUiIC8+CiAgICAgPGNvcHkgZmlsZT0iJHtzdW4tZWpiLWphci54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3N1bi1lamItamFyLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIiBxdWlldD0idHJ1ZSIgLz4KICAgICA8Y29weSBmaWxlPSIke3dlYmxvZ2ljLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd2VibG9naWMueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiIHF1aWV0PSJ0cnVlIi8+Ci0gICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIAorICAgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXJlc291cmNlcy54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiIHF1aWV0PSJ0cnVlIi8+CiAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2xpYiIgZmFpbG9uZXJyb3I9ImZhbHNlIiBxdWlldD0idHJ1ZSI+CiAgICAgICAgIDxmaWxlc2V0IGRpcj0ibGliIj4KQEAgLTE2Miw5ICsxNjIsOSBAQAogICAgIDwvY29weT4KICAgICA8Y29weSBmaWxlPSIke3dlYnNlcnZpY2VzLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd2Vic2VydmljZXMueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiIHF1aWV0PSJ0cnVlIiAvPgotICAgIDxjb3B5IGZpbGU9IiR7bWFwcGluZ2ZpbGUubG9jYXRpb259LyR7bWFwcGluZ2ZpbGUubmFtZX0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wLyR7bWFwcGluZ2ZpbGUubmFtZX0iIAorICAgIDxjb3B5IGZpbGU9IiR7bWFwcGluZ2ZpbGUubG9jYXRpb259LyR7bWFwcGluZ2ZpbGUubmFtZX0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wLyR7bWFwcGluZ2ZpbGUubmFtZX0iCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIgcXVpZXQ9InRydWUiIC8+Ci0gICAgPGNvcHkgZmlsZT0iJHt3c2RsZmlsZS5sb2NhdGlvbn0vJHt3c2RsZmlsZS5uYW1lfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93c2RsLyR7d3NkbGZpbGUubmFtZX0iIAorICAgIDxjb3B5IGZpbGU9IiR7d3NkbGZpbGUubG9jYXRpb259LyR7d3NkbGZpbGUubmFtZX0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd3NkbC8ke3dzZGxmaWxlLm5hbWV9IgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiIHF1aWV0PSJ0cnVlIiAvPgogICAgIDxjb3B5IGZpbGU9IiR7dGFnUGx1Z2lucy54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3RhZ1BsdWdpbnMueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiIHF1aWV0PSJ0cnVlIiAvPgpAQCAtMTg0LDcgKzE4NCw3IEBACiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmNsYXNzIiAvPgogICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgPC9jb3B5PgotICAgIAorCiAgICAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgd2FyIGZpbGUgJHt3YXIuZmlsZX0iIGxldmVsPSJ2ZXJib3NlIiAvPgogICAgIDxta2RpciBkaXI9IiR7YmFzZWRpcn0vZG9jcm9vdCIgLz4KICAgICA8amFyIGphcmZpbGU9IiR7d2FyLmZpbGV9IiB1cGRhdGU9InRydWUiPgpAQCAtMjQ4LDE0ICsyNDgsMTQgQEAKIFZhcmlhYmxlcyBVc2VkOgogICAgICR7ZWpiLmphcn0KICAgICAke2J1aWxkLmNsYXNzZXMuZGlyfQotICAgICR7ZWpiLWphci54bWx9ICAgIAorICAgICR7ZWpiLWphci54bWx9CiAgICAgJHtiZWFucy54bWx9Ci0gICAgJHtwZXJzaXN0ZW5jZS1vcm0ueG1sfSAgICAKLSAgICAke3BlcnNpc3RlbmNlLnhtbH0gICAgCi0gICAgJHtzdW4tZWpiLWphci54bWx9ICAgIAotICAgICR7Z2xhc3NmaXNoLWVqYi1qYXIueG1sfSAgICAKLSAgICAke3N1bi1jbXAtbWFwcGluZ3MueG1sfSAgICAKLSAgICAke21ldGFpbmYuZGlyfSAgICAKKyAgICAke3BlcnNpc3RlbmNlLW9ybS54bWx9CisgICAgJHtwZXJzaXN0ZW5jZS54bWx9CisgICAgJHtzdW4tZWpiLWphci54bWx9CisgICAgJHtnbGFzc2Zpc2gtZWpiLWphci54bWx9CisgICAgJHtzdW4tY21wLW1hcHBpbmdzLnhtbH0KKyAgICAke21ldGFpbmYuZGlyfQogICAgICR7ZWpiamFyLmZpbGVzfQogICAgICR7ZGJzY2hlbWF9CiAtLT4KQEAgLTI2NCwyMiArMjY0LDIyIEBACiAgICAgPGRlbGV0ZSBmaWxlPSIke2VqYi5qYXJ9IiAvPgogICAgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IEdlbmVyYXRpbmcgZWpiLWphciBpbnNpZGUgYnVpbGQgZGlyZWN0b3J5IiBsZXZlbD0idmVyYm9zZSIgLz4KICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIgLz4KLSAgICAKKwogICAgIDxjb3B5IGZpbGU9IiR7ZWpiLWphci54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2VqYi1qYXIueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiIHF1aWV0PSJ0cnVlIi8+CiAgICAgPGNvcHkgZmlsZT0iJHtwZXJzaXN0ZW5jZS54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3BlcnNpc3RlbmNlLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIiBxdWlldD0idHJ1ZSIvPgotICAgIDxjb3B5IGZpbGU9IiR7cGVyc2lzdGVuY2Utb3JtLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvcGVyc2lzdGVuY2Utb3JtLnhtbCIgCisgICAgPGNvcHkgZmlsZT0iJHtwZXJzaXN0ZW5jZS1vcm0ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9wZXJzaXN0ZW5jZS1vcm0ueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiIHF1aWV0PSJ0cnVlIi8+CiAgICAgPGNvcHkgZmlsZT0iJHt3ZWJzZXJ2aWNlcy54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dlYnNlcnZpY2VzLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIiBxdWlldD0idHJ1ZSIvPgogICAgIDxjb3B5IGZpbGU9IiR7c3VuLWVqYi1qYXIueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tZWpiLWphci54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIgcXVpZXQ9InRydWUiLz4KLSAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1lamItamFyLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLWVqYi1qYXIueG1sIiAKKyAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1lamItamFyLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLWVqYi1qYXIueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiIHF1aWV0PSJ0cnVlIi8+Ci0gICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIAorICAgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXJlc291cmNlcy54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiIHF1aWV0PSJ0cnVlIi8+Ci0gICAgPGNvcHkgZmlsZT0iJHtzdW4tY21wLW1hcHBpbmdzLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWNtcC1tYXBwaW5ncy54bWwiIAorICAgIDxjb3B5IGZpbGU9IiR7c3VuLWNtcC1tYXBwaW5ncy54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1jbXAtbWFwcGluZ3MueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiIHF1aWV0PSJ0cnVlIi8+CiAgICAgPGNvcHkgZmlsZT0iJHtiZWFucy54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2JlYW5zLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIiBxdWlldD0idHJ1ZSIvPgpAQCAtMjg5LDcgKzI4OSw3IEBACiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXRjaC5qb2JzLmRpcn0iIC8+CiAgICAgPC9jb3B5PgogICAgIDxjb3B5IGZpbGU9IiR7ZGJzY2hlbWF9IiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGZhaWxvbmVycm9yPSJmYWxzZSIgcXVpZXQ9InRydWUiLz4KLSAgICAKKwogICAgIDxqYXIgamFyZmlsZT0iJHtlamIuamFyfSIgYmFzZWRpcj0iJHtlamJqYXIuZmlsZXN9IiB1cGRhdGU9InRydWUiCiAgICAgICAgIGluY2x1ZGVzPSIke2VqYmphci5jbGFzc2VzfSI+CiAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiPgpAQCAtMzA4LDMzICszMDgsMzMgQEAKICAgICA8L2phcj4KICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIgLz4KICAgICA8ZGVsZXRlIGZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9LyouZGJzY2hlbWEiIGZhaWxvbmVycm9yPSJmYWxzZSIgLz4KLTwvdGFyZ2V0PiAgCis8L3RhcmdldD4KIAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLSBUYXJnZXQgdG8gcGFja2FnZSB0aGUgYXBwY2xpZW50IGFwcGxpY2F0aW9uIHRvIGphciBmaWxlIC0tPgogPCEtLQogVmFyaWFibGVzIFVzZWQ6CiAgICAgJHthcHBjbGllbnQuamFyfQotICAgICR7YXBwY2xpZW50amFyLmNsYXNzZXN9ICAgIAotICAgICR7YXBwY2xpZW50amFyLmZpbGVzfSAgICAKKyAgICAke2FwcGNsaWVudGphci5jbGFzc2VzfQorICAgICR7YXBwY2xpZW50amFyLmZpbGVzfQogICAgICR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ci0gICAgJHthcHBsaWNhdGlvbi1jbGllbnQueG1sfSAgICAKLSAgICAke2dsYXNzZmlzaC1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSAgICAKLSAgICAke3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSAgICAKKyAgICAke2FwcGxpY2F0aW9uLWNsaWVudC54bWx9CisgICAgJHtnbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbH0KKyAgICAke3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sfQogLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9InBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+CiAgICAgPGRlbGV0ZSBmaWxlPSIke2FwcGNsaWVudC5qYXJ9IiAvPgogICAgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IEdlbmVyYXRpbmcgYXBwY2xpZW50LWphciBpbnNpZGUgYnVpbGQgZGlyZWN0b3J5IiBsZXZlbD0idmVyYm9zZSIgLz4KICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIgLz4KLSAgICAKKwogICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24tY2xpZW50LnhtbH0iCiAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24tY2xpZW50LnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIiBxdWlldD0idHJ1ZSIvPgogICAgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9IgogICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiIHF1aWV0PSJ0cnVlIi8+CiAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbH0iCiAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIgcXVpZXQ9InRydWUiLz4KLSAgICAKKwogICAgIDxqYXIgamFyZmlsZT0iJHthcHBjbGllbnQuamFyfSIgYmFzZWRpcj0iJHthcHBjbGllbnRqYXIuZmlsZXN9IiB1cGRhdGU9InRydWUiCiAgICAgICAgIGluY2x1ZGVzPSIke2FwcGNsaWVudGphci5jbGFzc2VzfSIgbWFuaWZlc3Q9Ii4vY2xpZW50L01BTklGRVNULk1GIj4KICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiI+CkBAIC0zNDMsNyArMzQzLDcgQEAKICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAvPgogICAgICAgICA8L21ldGFpbmY+CiAgICAgPC9qYXI+Ci08L3RhcmdldD4gCis8L3RhcmdldD4KIAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLSBUYXJnZXQgdG8gY3JlYXRlIHRoZSBlamIgYXBwbGljYXRpb24gamFyIGZpbGUgLS0+CkBAIC0zNTQsNyArMzU0LDcgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAvPgogICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiIC8+CiAgICAgPC9hbnRjYWxsPgotPC90YXJnZXQ+ICAgICAKKzwvdGFyZ2V0PgogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldCB0byBjcmVhdGUgdGhlIGFwcGNsaWVudCBqYXIgZmlsZSAtLT4KQEAgLTM3NCwxMiArMzc0LDEyIEBACiAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1wZXJzaXN0ZW5jZS5qYXIiIGZhaWxvbmVycm9yPSJmYWxzZSIgLz4KICAgICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBHZW5lcmF0aW5nIFBBUiBpbnNpZGUgYnVpbGQgZGlyZWN0b3J5IiAvPgogICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIiAvPgotICAgIAotICAgIDxjb3B5IGZpbGU9IiR7cGVyc2lzdGVuY2UueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9wZXJzaXN0ZW5jZS54bWwiIAorCisgICAgPGNvcHkgZmlsZT0iJHtwZXJzaXN0ZW5jZS54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3BlcnNpc3RlbmNlLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIiBxdWlldD0idHJ1ZSIvPgotICAgIDxjb3B5IGZpbGU9IiR7bWFwcGluZy54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2VudGl0eS1tYXBwaW5nLnhtbCIgCisgICAgPGNvcHkgZmlsZT0iJHttYXBwaW5nLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZW50aXR5LW1hcHBpbmcueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiIHF1aWV0PSJ0cnVlIi8+Ci0gICAgCisKICAgICA8IS0tIG1ha2UgYSBqYXIgLS0+CiAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1wZXJzaXN0ZW5jZS5qYXIiIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiB1cGRhdGU9InRydWUiCiAgICAgICAgIGluY2x1ZGVzPSIqKi8qLmNsYXNzIgpAQCAtMzk4LDE0ICszOTgsMTQgQEAKICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIgLz4KICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iIC8+CiAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiIC8+Ci0gICAgCi0gICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAKKworICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIiBxdWlldD0idHJ1ZSIvPgotICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiIAorICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIgcXVpZXQ9InRydWUiLz4KICAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMtZWFyLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIgcXVpZXQ9InRydWUiIGZpbHRlcmluZz0idHJ1ZSIgLz4KLSAgICAKKwogICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiIC8+CkBAIC00MzEsNyArNDMxLDcgQEAKICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIgLz4KICAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMtZWFyLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIgZmlsdGVyaW5nPSJ0cnVlIiAvPgotICAgIAorCiAgICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiIC8+CkBAIC01MDQsNyArNTA0LDcgQEAKICAgICA8L2V4ZWM+CiAgICAgPGRlbGV0ZSBmaWxlPSIke3VzZXIucGFzc3dvcmQuZmlsZX0iIGZhaWxvbmVycm9yPSJmYWxzZSIgLz4KIDwvdGFyZ2V0PgotIAorCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KQEAgLTUxOCw3ICs1MTgsNyBAQAogQVNfQURNSU5fQURNSU5QQVNTV09SRD0ke2FkbWluLnBhc3N3b3JkfQogQVNfQURNSU5fTUFTVEVSUEFTU1dPUkQ9JHttYXN0ZXIucGFzc3dvcmR9CiAgICAgPC9lY2hvPgotICAgIAorCiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CiAgICAgICAgIDxhcmcgbGluZT0iY3JlYXRlLWZpbGUtdXNlciIgLz4KICAgICAgICAgPGFyZwpAQCAtNTMwLDcgKzUzMCw3IEBACiAgICAgPC9leGVjPgogICAgIDxkZWxldGUgZmlsZT0iJHt1c2VyLnBhc3N3b3JkLmZpbGV9IiBmYWlsb25lcnJvcj0iZmFsc2UiIC8+CiA8L3RhcmdldD4KLSAgICAgCisKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDwhLS0gVGFyZ2V0IHRvIGRlbGV0ZSB0aGUgdXNlciBpbiBmaWxlIHJlYWxtIHRoZSBBcHBTZXJ2ICAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KQEAgLTU0Niw3ICs1NDYsNyBAQAogPC90YXJnZXQ+CiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gSjJFRSBDb25uZWN0b3IgcmVsYXRlZCB0YXJnZXRzIAkJCSAgICAgCSAgLS0+Cis8IS0tIEoyRUUgQ29ubmVjdG9yIHJlbGF0ZWQgdGFyZ2V0cyAgICAgICAgICAgICAgICAgICAgICAgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogCiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1jb25uZWN0b3ItY29ubnBvb2wtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgY3JlYXRlLWNvbm5lY3Rvci1jb25ucG9vbCIgLz4KQEAgLTg0MSw3ICs4NDEsNyBAQAogPHRhcmdldCBuYW1lPSJkZWxldGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIgotICAgICAgICAgICAgdmFsdWU9ImRlbGV0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZSAKKyAgICAgICAgICAgIHZhbHVlPSJkZWxldGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UKICAgICAgICAgLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iIC8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtwbS5yZXNvdXJjZS5uYW1lfSIgLz4KICAgICA8L2FudGNhbGw+CkBAIC04NjMsOCArODYzLDggQEAKIAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLSBUYXJnZXQgdG8gY3JlYXRlL2RlbGV0ZSBqYXZhbWFpbCByZXNvdXJjZXMgIC0tPgotPCEtLSAKLSAgICBQcm9wZXJ0aWVzIHJlcXVpcmVkOiAKKzwhLS0KKyAgICBQcm9wZXJ0aWVzIHJlcXVpcmVkOgogICAgIG1haWxob3N0CiAgICAgZnJvbWFkZHJlc3MKICAgICBkZWJ1ZwpAQCAtOTA2LDE1ICs5MDYsMTUgQEAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXNxbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8ZWNobyBtZXNzYWdlPSJjcmVhdGluZyB0YWJsZXMgZnJvbSAke2Jhc2VkaXJ9L3NxbC8ke2RiLmNyZWF0ZX0iIGxldmVsPSJ2ZXJib3NlIiAvPgotICAgIDxzcWwgCi0gICAgICAgIGRyaXZlcj0iJHtkYi5kcml2ZXJ9IiAKLSAgICAgICAgdXJsPSIke2RiLnVybH0iIAotICAgICAgICB1c2VyaWQ9IiR7ZGIudXNlcn0iIAotICAgICAgICBwYXNzd29yZD0iJHtkYi5wd2R9IiAKKyAgICA8c3FsCisgICAgICAgIGRyaXZlcj0iJHtkYi5kcml2ZXJ9IgorICAgICAgICB1cmw9IiR7ZGIudXJsfSIKKyAgICAgICAgdXNlcmlkPSIke2RiLnVzZXJ9IgorICAgICAgICBwYXNzd29yZD0iJHtkYi5wd2R9IgogICAgICAgICBzcmM9InNxbC8ke2RiLmNyZWF0ZX0iCi0gICAgICAgIG9uZXJyb3I9ImNvbnRpbnVlIiAKLSAgICAgICAgcHJpbnQ9InllcyIgCi0gICAgICAgIG91dHB1dD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vc2V0dXBEQlRhYmxlcy5vdXQiIAorICAgICAgICBvbmVycm9yPSJjb250aW51ZSIKKyAgICAgICAgcHJpbnQ9InllcyIKKyAgICAgICAgb3V0cHV0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9zZXR1cERCVGFibGVzLm91dCIKICAgICAgICAgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH0iIC8+CiA8L3RhcmdldD4KIApAQCAtOTIzLDE1ICs5MjMsMTUgQEAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXNxbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8ZWNobyBtZXNzYWdlPSJkcm9wcGluZyB0YWJsZXMgZnJvbSAke2Jhc2VkaXJ9L3NxbC8ke2RiLmRyb3B9IiBsZXZlbD0idmVyYm9zZSIgLz4KLSAgICA8c3FsIAotICAgICAgICBkcml2ZXI9IiR7ZGIuZHJpdmVyfSIgCi0gICAgICAgIHVybD0iJHtkYi51cmx9IiAKLSAgICAgICAgdXNlcmlkPSIke2RiLnVzZXJ9IiAKLSAgICAgICAgcGFzc3dvcmQ9IiR7ZGIucHdkfSIgCisgICAgPHNxbAorICAgICAgICBkcml2ZXI9IiR7ZGIuZHJpdmVyfSIKKyAgICAgICAgdXJsPSIke2RiLnVybH0iCisgICAgICAgIHVzZXJpZD0iJHtkYi51c2VyfSIKKyAgICAgICAgcGFzc3dvcmQ9IiR7ZGIucHdkfSIKICAgICAgICAgc3JjPSJzcWwvJHtkYi5kcm9wfSIKLSAgICAgICAgb25lcnJvcj0iY29udGludWUiIAotICAgICAgICBwcmludD0ieWVzIiAKLSAgICAgICAgb3V0cHV0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9zZXR1cERCVGFibGVzLm91dCIgCisgICAgICAgIG9uZXJyb3I9ImNvbnRpbnVlIgorICAgICAgICBwcmludD0ieWVzIgorICAgICAgICBvdXRwdXQ9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3NldHVwREJUYWJsZXMub3V0IgogICAgICAgICBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofSIgLz4KIDwvdGFyZ2V0PgogCkBAIC0xMzA1LDcgKzEzMDUsNyBAQAogPCEtLSB1bmRlcGxveSB0aGUgc3RhbmRhbG9uZSB3YXIgaW4gQXBwU2VydiAtLT4KIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktd2FyLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxlY2hvCi0gICAgICAgIG1lc3NhZ2U9IlVuZGVwbG95aW5nIHdhcmZpbGUgJHthcHBuYW1lfS13ZWIgZnJvbSAKKyAgICAgICAgbWVzc2FnZT0iVW5kZXBsb3lpbmcgd2FyZmlsZSAke2FwcG5hbWV9LXdlYiBmcm9tCiAgICAgICAgICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIgZnJvbSAke2Jhc2VkaXJ9LiIKICAgICAgICAgbGV2ZWw9InZlcmJvc2UiIC8+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KQEAgLTEzNTMsOCArMTM1Myw4IEBACiA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8ZWNobyBtZXNzYWdlPSIke0FQUENMSUVOVH0gLWNsaWVudCAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIgLW5hbWUgJHthcHBuYW1lfUNsaWVudCAtdGV4dGF1dGggLXVzZXIgajJlZSAtcGFzc3dvcmQgajJlZSAteG1sICR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9nbGFzc2Zpc2gtYWNjLnhtbCAke2FwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzfSIgLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iIGZhaWxvbmVycm9yPSJmYWxzZSI+Ci0gICAgICAgIDwhLS0gU2V0IEFQUENQQVRIIHRvIGluY2x1ZGUgcmVwb3J0ZXIuamFyIHNvIHRoYXQgYWxsIGFwcCBjbGllbnRzIGRvbid0IGhhdmUgdG8gCi0gICAgICAgICAgICAgcGFja2FnZSB0aGUgdGVzdCBmcmFtZXdvcmsgaW4gdGhlaXIgYXBwcyAKKyAgICAgICAgPCEtLSBTZXQgQVBQQ1BBVEggdG8gaW5jbHVkZSByZXBvcnRlci5qYXIgc28gdGhhdCBhbGwgYXBwIGNsaWVudHMgZG9uJ3QgaGF2ZSB0bworICAgICAgICAgICAgIHBhY2thZ2UgdGhlIHRlc3QgZnJhbWV3b3JrIGluIHRoZWlyIGFwcHMKICAgICAgICAgLS0+CiAgICAgICAgIDxlbnYga2V5PSJBUFBDUEFUSCIgZmlsZT0iJHtlbnYuQVBQQ1BBVEh9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAvPgogICAgICAgICA8YXJnIGxpbmU9Ii1jbGllbnQgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIiAvPgpAQCAtMTQ4Miw3ICsxNDgyLDcgQEAKIDx0YXJnZXQgbmFtZT0ic2V0dXAtbXEtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIERhdGFzdG9yZSBzZXR1cCBmb3IgUzFNUS4gUmVxdWlyZWQgb25seSBmb3IgUkkiIGxldmVsPSJ2ZXJib3NlIiAvPgogICAgIDxlY2hvCi0gICAgICAgIG1lc3NhZ2U9IiR7SU1RREJNR1J9IC1qYXZhaG9tZSAke2phdmEuaG9tZX0gCisgICAgICAgIG1lc3NhZ2U9IiR7SU1RREJNR1J9IC1qYXZhaG9tZSAke2phdmEuaG9tZX0KICAgICAgICAgLWIgJHthZG1pbi5kb21haW59XyR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IGNyZWF0ZSBhbGwiCiAgICAgICAgIGxldmVsPSJ2ZXJib3NlIiAvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7SU1RREJNR1J9IiBmYWlsb25lcnJvcj0idHJ1ZSI+CkBAIC0xNTM5LDEzICsxNTM5LDEzIEBACiAKIDwhLS0gdXNhZ2UgIC0tPgogPHRhcmdldCBuYW1lPSJ1c2FnZS1jb21tb24iPgotICAgIDxlY2hvPiAgICAgICAgIAorICAgIDxlY2hvPgogICAgICAgICBhbnQgY2xlYW4gICAgICAgICAgIFJlbW92ZSBhbGwgY2xhc3NlcyBmaWxlcwogICAgICAgICBhbnQgYnVpbGQgICAgICAgICAgIEJ1aWxkIHRoZSBhcHBsaWNhdGlvbgogICAgICAgICBhbnQgZGVwbG95ICAgICAgICAgIERlcGxveSB0aGUgZWFyIGZpbGVzIHRvIFMxQVMKLSAgICAgICAgYW50IHJ1bgkgICAgICAgICAgICBSdW4gdGhlIGFwcGxpY2F0aW9uCisgICAgICAgIGFudCBydW4gICAgICAgICAgICAgICAgUnVuIHRoZSBhcHBsaWNhdGlvbgogICAgICAgICBhbnQgdW5kZXBsb3kgICAgICAgIFVuZGVwbG95IHRoZSBlYXIgZmlsZXMgZnJvbSBTMUFTCi0gICAgICAgIGFudCB1c2FnZSAgICAgICAgICAgRGlzcGxheSB0aGlzIG1lc3NhZ2UgICAgICAgICAgICAKKyAgICAgICAgYW50IHVzYWdlICAgICAgICAgICBEaXNwbGF5IHRoaXMgbWVzc2FnZQogICAgIDwvZWNobz4KIDwvdGFyZ2V0PgogCkBAIC0xNTcyLDEzICsxNTcyLDEzIEBACiAKIDx0YXJnZXQgbmFtZT0icmVzdGFydC1pbnN0YW5jZSI+CiAgICAgPGVjaG8gbWVzc2FnZT0iUmVzdGFydGluZyByZW1vdGUgc2VydmVyIGluc3RhbmNlLHVudGlsIHRoaXMgZ2V0cyBmaXhlZCIvPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgPGFyZyBsaW5lPSJzdG9wLWluc3RhbmNlIi8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDwvZXhlYz4KICAgICA8c2xlZXAgc2Vjb25kcz0iMzAiLz4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgIDxhcmcgbGluZT0ic3RhcnQtaW5zdGFuY2UiLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CkBAIC0xNjAxLDcgKzE2MDEsNyBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0ic2V0dXBUaW1lciIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJlZSI+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICA8YXJnIGxpbmU9ImNyZWF0ZS1yZXNvdXJjZS1yZWYiLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0IHNlcnZlciIvPgpAQCAtMTYyOCwxMyArMTYyOCwxMyBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0idW5zZXR1cFRpbWVyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgaWY9ImVlIj4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgIDxhcmcgbGluZT0iZGVsZXRlLXJlc291cmNlLXJlZiIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgc2VydmVyIi8+CiAgICAgICAgIDxhcmcgbGluZT0iJHtqZGJjLnJlc291cmNlLm5hbWV9Ii8+CiAgICAgPC9leGVjPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgPGFyZyBsaW5lPSJ1bnNldCIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9LWNvbmZpZy5lamItY29udGFpbmVyLmVqYi10aW1lci1zZXJ2aWNlLnRpbWVyLWRhdGFzb3VyY2UiLz4KICAgICA8L2V4ZWM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvZWUtY29tbW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9lZS1jb21tb24ueG1sCmluZGV4IDRkZThhODguLmRjMTAzMTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9lZS1jb21tb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9lZS1jb21tb24ueG1sCkBAIC02Niw3ICs2Niw3IEBACiA8dGFyZ2V0IG5hbWU9InN0YXJ0LW5vZGVhZ2VudC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIDxlY2hvIG1lc3NhZ2U9IlN0YXJ0aW5nIG5vZGVhZ2VudCAke25vZGVhZ2VudC5uYW1lfSIgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+Ci0gICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIAorICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIgogICAgICAgdmFsdWU9InN0YXJ0LW5vZGUtYWdlbnQKICAgICAgICAgLS11c2VyICR7YWRtaW4udXNlcn0KICAgICAgICAgLS1wYXNzd29yZGZpbGUgJHthZG1pbi5wYXNzd29yZC5maWxlfQpAQCAtMTA3LDcgKzEwNyw3IEBACiA8dGFyZ2V0IG5hbWU9InN0b3Atbm9kZWFnZW50LWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogPGVjaG8gbWVzc2FnZT0iU3RvcHBpbmcgbm9kZWFnZW50ICR7bm9kZWFnZW50Lm5hbWV9IiBsZXZlbD0idmVyYm9zZSIvPgogICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KLSAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgCisgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiCiAgICAgICB2YWx1ZT0ic3RvcC1ub2RlLWFnZW50IiAvPgogICAgIDxwYXJhbSBuYW1lPSJhcy5wcm9wcyIgdmFsdWU9IiIvPgogICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgpAQCAtMTIxLDcgKzEyMSw3IEBACiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1jbHVzdGVyLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgY2x1c3RlciAke2NsdXN0ZXIubmFtZX0iIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgotICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiAKKyAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIKICAgICAgIHZhbHVlPSJjcmVhdGUtY2x1c3RlciIgLz4KICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgIHZhbHVlPSIke2NsdXN0ZXIubmFtZX0iIC8+CkBAIC0xNDYsNyArMTQ2LDcgQEAKIDx0YXJnZXQgbmFtZT0ic3RhcnQtY2x1c3Rlci1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIDxlY2hvIG1lc3NhZ2U9IlN0YXJ0aW5nIGNsdXN0ZXIgJHtjbHVzdGVyLm5hbWV9IiBsZXZlbD0idmVyYm9zZSIvPgogICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KLSAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgCisgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiCiAgICAgICB2YWx1ZT0ic3RhcnQtY2x1c3RlciIgLz4KICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgIHZhbHVlPSIke2NsdXN0ZXIubmFtZX0iIC8+CkBAIC0xNTksNyArMTU5LDcgQEAKIDx0YXJnZXQgbmFtZT0ic3RvcC1jbHVzdGVyLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogPGVjaG8gbWVzc2FnZT0iU3RvcHBpbmcgY2x1c3RlciAke2NsdXN0ZXIubmFtZX0iIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgotICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiAKKyAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIKICAgICAgIHZhbHVlPSJzdG9wLWNsdXN0ZXIiIC8+CiAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICB2YWx1ZT0iJHtjbHVzdGVyLm5hbWV9IiAvPgpAQCAtMzE1LDkgKzMxNSw5IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJvcmIubGlzdGVuZXIxLnBvcnQiIHZhbHVlPSIke29yYi5saXN0ZW5lcjEucG9ydC50d299Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzc2wucG9ydCIgdmFsdWU9IiR7c3NsLnBvcnQudHdvfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3NsLm11dHVhbGF1dGgucG9ydCIgdmFsdWU9IiR7c3NsLm11dHVhbGF1dGgucG9ydC50d299Ii8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJqbXguc3lzdGVtLmNvbm5lY3Rvci5wb3J0IiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImpteC5zeXN0ZW0uY29ubmVjdG9yLnBvcnQiCiAgICAgICAgICAgdmFsdWU9IiR7am14LnN5c3RlbS5jb25uZWN0b3IucG9ydC50d299Ii8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJjbHVzdGVyZWQuc2VydmVyLm5hbWUiIAorICAgICAgICA8cGFyYW0gbmFtZT0iY2x1c3RlcmVkLnNlcnZlci5uYW1lIgogICAgICAgICAgIHZhbHVlPSIke2NsdXN0ZXJlZC5zZXJ2ZXIubmFtZS50d299Ii8+CiAgICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+CkBAIC0zNDUsNyArMzQ1LDcgQEAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0icmVtb3ZlLWRlZmF1bHQtY2x1c3Rlci1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1jbHVzdGVyZWQtaW5zdGFuY2UtY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImNsdXN0ZXJlZC5zZXJ2ZXIubmFtZSIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJjbHVzdGVyZWQuc2VydmVyLm5hbWUiCiAgICAgICAgICAgdmFsdWU9IiR7Y2x1c3RlcmVkLnNlcnZlci5uYW1lLnR3b30iLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtY2x1c3RlcmVkLWluc3RhbmNlLWNvbW1vbiIvPgpAQCAtNDk5LDEwICs0OTksMTAgQEAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0iZWVzZXR1cC1hbnQiIGRlcGVuZHM9ImVudi1lZSI+CiAgICA8ZWNobyBmaWxlPSIke2FkbWluLnBhc3N3b3JkLmZpbGV9IiBhcHBlbmQ9ImZhbHNlIj4KLQlBU19BRE1JTl9VU0VSUEFTU1dPUkQ9JHtwYXNzd29yZH0KLQlBU19BRE1JTl9QQVNTV09SRD0ke2FkbWluLnBhc3N3b3JkfQotCUFTX0FETUlOX0FETUlOUEFTU1dPUkQ9JHthZG1pbi5wYXNzd29yZH0KLQlBU19BRE1JTl9NQVNURVJQQVNTV09SRD0ke21hc3Rlci5wYXNzd29yZH0KKyAgICBBU19BRE1JTl9VU0VSUEFTU1dPUkQ9JHtwYXNzd29yZH0KKyAgICBBU19BRE1JTl9QQVNTV09SRD0ke2FkbWluLnBhc3N3b3JkfQorICAgIEFTX0FETUlOX0FETUlOUEFTU1dPUkQ9JHthZG1pbi5wYXNzd29yZH0KKyAgICBBU19BRE1JTl9NQVNURVJQQVNTV09SRD0ke21hc3Rlci5wYXNzd29yZH0KICAgIDwvZWNobz4KICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlRG9tYWluIi8+CiAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0RG9tYWluIj4KQEAgLTUxMSw3ICs1MTEsNyBAQAogICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtbm9kZWFnZW50LWNvbW1vbiIvPgogICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtaW5zdGFuY2UtY29tbW9uIi8+CiAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0LW5vZGVhZ2VudCIvPgotICAgPHNsZWVwIHNlY29uZHM9IjMwIi8+ICAgCisgICA8c2xlZXAgc2Vjb25kcz0iMzAiLz4KICAgIDxlY2hvIG1lc3NhZ2U9IkRvbmUgZWVzZXR1cC1hbnQhIi8+CiA8L3RhcmdldD4KIApAQCAtNTcwLDcgKzU3MCw3IEBACiAgICAgICAgIDxhcmcgbGluZT0iLS1lY2hvPXRydWUgLS10ZXJzZT10cnVlIiAvPgogICAgICAgICA8YXJnIGxpbmU9Ii0tZG9tYWluZGlyICR7YWRtaW4uZG9tYWluLmRpcn0iLz4KICAgICAgICAgPGFyZyBsaW5lPSItLWFkbWlucG9ydCAke2FkbWluLnBvcnR9Ii8+Ci0gICAgICAgIDxhcmcgbGluZT0iLS1pbnN0YW5jZXBvcnQgJHthZG1pbi5odHRwLnBvcnR9Ii8+IAorICAgICAgICA8YXJnIGxpbmU9Ii0taW5zdGFuY2Vwb3J0ICR7YWRtaW4uaHR0cC5wb3J0fSIvPgogICAgICAgICA8YXJnIGxpbmU9Ii0tYWRtaW51c2VyICR7YWRtaW4udXNlcn0iLz4KICAgICAgICAgPGFyZyBsaW5lPSItLXBhc3N3b3JkZmlsZSAke2FkbWluLnBhc3N3b3JkLmZpbGV9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthZG1pbi5kb21haW59Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvZW1tYS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvZW1tYS54bWwKaW5kZXggODE1MjVlNi4uN2ViZDI4ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvY29uZmlnL2VtbWEueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9lbW1hLnhtbApAQCAtNTgsNyArNTgsNyBAQAogICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7Z2xhc3NmaXNoLXppcC1maWxlfSIgdHlwZT0iZmlsZSIgLz4KICAgICAgICAgPGFudHZlcnNpb24gYXRsZWFzdD0iMS44Ii8+CiAgICAgICA8L2FuZD4KLSAgICA8L2NvbmRpdGlvbj4gCisgICAgPC9jb25kaXRpb24+CiAgICAgPGZhaWwgbWVzc2FnZT0iUGxlYXNlIG1ha2Ugc3VyZSBhbnQgdmVyc2lvbiBpcyAxLjggb3IgaGlnaGVyLCBlbW1hLmVuYWJsZWQgcHJvcGVydHkgaXMgc2V0LCBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgR0xBU1NGSVNIX1pJUF9GSUxFIGlzIGV4cG9ydGVkLiI+CiAgICAgICA8Y29uZGl0aW9uPgogICAgICAgICA8bm90PgpAQCAtNzQsNyArNzQsNyBAQAogICAgIDxta2RpciBkaXI9IiR7Y292ZXJhZ2UuZGlyfSIvPgogICAgIDxjb3B5IGZpbGU9IiR7ZW1tYS5saWIuZGlyfS8ke2VtbWEuamFyLm5hbWV9IiB0b2Rpcj0iJHtnbGFzc2Zpc2guc2VydmVyLmRpcn0vZG9tYWlucy9kb21haW4xL2xpYi9leHQvIiBvdmVyd3JpdGU9InRydWUiIC8+CiAgIDwvdGFyZ2V0PgotIAorCiAgIDx0YXJnZXQgbmFtZT0iZW1tYS5pbnN0cnVtZW50IiBkZXBlbmRzPSJlbW1hLmluaXQiIGlmPSJlbW1hLnByZXJlcXVzaXRlLm1ldCIgZGVzY3JpcHRpb249Ikluc3RydW1lbnQgQ2xhc3NlcyBXaXRoIEVNTUEiPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJvcmlnaW5hbC5qYXIuZGlyIiB2YWx1ZT0iJHtnbGFzc2Zpc2guc2VydmVyLmRpcn0vbW9kdWxlcyIgLz4KICAgICA8ZWNobz5bRU1NQV0gOiBTdGFydCB0byBpbnN0cnVtZW50IHRoZSBKQVIgZmlsZXMgdW5kZXIgJHtvcmlnaW5hbC5qYXIuZGlyfS8uPC9lY2hvPgpAQCAtMTQzLDcgKzE0Myw3IEBACiAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5lbSIgLz4KICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmVjIiAvPgogICAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgICAgIDxodG1sIG91dGZpbGU9IiR7Y292ZXJhZ2UuZGlyfS9jb3ZlcmFnZS5odG1sIiAKKyAgICAgICAgPGh0bWwgb3V0ZmlsZT0iJHtjb3ZlcmFnZS5kaXJ9L2NvdmVyYWdlLmh0bWwiCiAgICAgICAgICAgICAgIGNvbHVtbnM9Im5hbWUsY2xhc3MsbWV0aG9kLGJsb2NrLGxpbmUiCiAgICAgICAgICAgICAgIGRlcHRoPSJtZXRob2QiCiAgICAgICAgIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvamF2YXdzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9qYXZhd3MueG1sCmluZGV4IDVlZjk1MzkuLmJjZDgxOGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9qYXZhd3MueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9qYXZhd3MueG1sCkBAIC0xMzAsMTcgKzEzMCwxNyBAQAogICAgICAgICA8L3NlcXVlbnRpYWw+CiAgICAgPC9tYWNyb2RlZj4KIAotIAotICAgIAorCisKICAgICA8IS0tCiAgICAgICAgIEZvciB0aGUgU1FFIGZyYW1ld29yaywgbGF1bmNoZXMgdGhlIGFwcCBjbGllbnQgdXNpbmcgSmF2YSBXZWIgU3RhcnQuCiAgICAgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJsYXVuY2gtYXBwY2xpZW50LWphdmF3cyIgaWY9InVzZS5qYXZhd3MiPgotICAgICAgICAKKwogICAgICAgICA8ZWNobyBtZXNzYWdlPSJMYXVuY2hpbmcgYXBwIGNsaWVudCB1c2luZyBKYXZhIFdlYiBTdGFydCIvPgotICAgICAgICAKKwogICAgICAgICA8dGVtcGZpbGUgcHJvcGVydHk9ImNsaWVudE91dHB1dEZpbGUiIHByZWZpeD0iYXBwY2xpZW50IiBzdWZmaXg9Ii50eHQiLz4KLSAgCisKICAgICAgICAgPHByZXBhcmUtamF2YXdzLXNlY3VyaXR5Lz4KICAgICAgICAgPCEtLQogICAgICAgICAgICAgQ2hvb3NlIHRoZSBvdXRwdXQgZmlsZS4KQEAgLTE3OSw3ICsxNzksNyBAQAogICAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJhcHBuYW1lIiB2YWx1ZT0iJHthcHBuYW1lfSIvPgogICAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJjbGllbnRuYW1lIiB2YWx1ZT0iJHtjbGllbnRuYW1lfSIvPgogICAgICAgICA8L2phdmE+Ci0gICAgICAgIAorCiAgICAgICAgIDwhLS0KICAgICAgICAgICAgIE5vdyBsYXVuY2ggdGhlIGNsaWVudC4KICAgICAgICAgLS0+CkBAIC0yMDEsNyArMjAxLDcgQEAKICAgICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtqYXZhd3Muc3RhdHVzLmZpbGV9Ii8+CiAgICAgICAgIDwvd2FpdGZvcj4KICAgICAgICAgPGVjaG8+SmF2YSBXZWIgU3RhcnQgbGF1bmNoIGZpbmlzaGVkPC9lY2hvPgotICAgICAgICAKKwogICAgICAgICA8IS0tCiAgICAgICAgICAgICBSZWFkIHRoZSBvdXRwdXQgZmlsZSBpbnRvIGEgcHJvcGVydHksIGVjaG8gdGhlIG91dHB1dCB0byB0aGUKICAgICAgICAgICAgIG91dHB1dCBzbyBhbnkgaHVtYW4gd2F0Y2hpbmcgY2FuIHNlZSBpdCwgYW5kIHRoZW4gY2hlY2sgdGhlCkBAIC0yMTIsMTUgKzIxMiwxNSBAQAogICAgICAgICA8L2xvYWRyZXNvdXJjZT4KIAogICAgICAgICA8ZWNobyBmaWxlPSIke2NsaWVudE91dHB1dEZpbGV9IiBtZXNzYWdlPSIke2xhdW5jaE91dHB1dH0iLz4KLSAgICAgICAgCisKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iJHtsYXVuY2hPdXRwdXR9Ii8+Ci0gICAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2hlY2tSZXBvcnRpbmctY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0Lm5hbWUiIHZhbHVlPSIke2FwcG5hbWV9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdC5kZXNjcmlwdGlvbiIgdmFsdWU9IiR7dGVzdC5kZXNjcmlwdGlvbn0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0LmNvdW50IiB2YWx1ZT0iJHt0ZXN0LmNvdW50fSIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgCisKICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2phdmF3cy5yZXBvcnQuZmlsZX0iLz4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2phdmF3cy5zdGF0dXMuZmlsZX0iLz4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvY29uZmlnL21haWwueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvY29uZmlnL21haWwueG1sCmluZGV4IDczZWI1NWUuLmM3MGRmYjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9tYWlsLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvbWFpbC54bWwKQEAgLTIwLDE5ICsyMCwxOSBAQAogPHByb3BlcnR5IG5hbWU9InJlc3VsdHMubWFpbGVlIiB2YWx1ZT0iIiAvPi0tPgogPHByb3BlcnR5IG5hbWU9Im1hY2hpbmUuY29uZmlnIiB2YWx1ZT0iZGVmYXVsdF8ke29zLm5hbWV9XyR7b3MuYXJjaH0iIC8+CiA8dGFyZ2V0IG5hbWU9Im1haWwiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8bWFpbCBmcm9tPSIke3Jlc3VsdHMubWFpbGVyfSIgdG9saXN0PSIke3Jlc3VsdHMubWFpbGVlfSIKLQkJc3ViamVjdD0iVGVzdCByZXN1bHRzIGZvciAke21hY2hpbmUuY29uZmlnfSIKLQkJbWFpbGhvc3Q9IiR7cmVzdWx0cy5tYWlsaG9zdH0iCi0JCW1lc3NhZ2U9IlF1aWNrIExvb2sgdGVzdCByZXN1bHRzLi4uIgotICAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSI+ICAgICAgICAgICAgICAgIAotCTxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiAgCisgICAgPG1haWwgZnJvbT0iJHtyZXN1bHRzLm1haWxlcn0iIHRvbGlzdD0iJHtyZXN1bHRzLm1haWxlZX0iCisgICAgICAgIHN1YmplY3Q9IlRlc3QgcmVzdWx0cyBmb3IgJHttYWNoaW5lLmNvbmZpZ30iCisgICAgICAgIG1haWxob3N0PSIke3Jlc3VsdHMubWFpbGhvc3R9IgorICAgICAgICBtZXNzYWdlPSJRdWljayBMb29rIHRlc3QgcmVzdWx0cy4uLiIKKyAgICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiPgorICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IgogICAgICAgICAgICAgaW5jbHVkZXM9ImNvdW50LnR4dCx0ZXN0X3Jlc3VsdHMuaHRtbCIvPgotCTwvbWFpbD4KKyAgICA8L21haWw+CiA8L3RhcmdldD4KIDx0YXJnZXQgbmFtZT0iY29weU1haWxKYXJzIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQ29weWluZyBtYWlsIGphcnMgaW50byAkQU5UX0hPTUUvbGliIi8+CiAgICAgICAgIDxjb3B5IHRvZGlyPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9hbnQvbGliIiBvdmVyd3JpdGU9InRydWUiIHZlcmJvc2U9InRydWUiPgotICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5TMUFTX0hPTUV9L2xpYiIgCisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vbGliIgogICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJhY3RpdmF0aW9uLmphcixtYWlsLmphciIvPgogICAgICAgICA8L2NvcHk+CiA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9wcm9wZXJ0aWVzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9wcm9wZXJ0aWVzLnhtbAppbmRleCBkNjI4YTEwLi5hOWY1YWFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvcHJvcGVydGllcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvY29uZmlnL3Byb3BlcnRpZXMueG1sCkBAIC0xMjksMTggKzEyOSwxOCBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0ic2V0VG9vbFdpbiIgaWY9ImlzV2luZG93cyI+Ci0gICAgPCEtLSAKLSAgICAgICAgU29tZSB0ZXN0cyBsYXVuY2ggYXBwIGNsaWVudHMgYnkgZGlyZWN0bHkgcnVubmluZyB0aGUgYXBwY2xpZW50IHNjcmlwdCwgdXNpbmcgdGhlIEFQUENMSUVOVCBwcm9wZXJ0eS4gCi0gICAgICAgIE90aGVycyBkbyBzbyBieSBpbnZva2luZyB0aGUgcnVuY2xpZW50LWNvbW1vbiB0YXJnZXQuIAotICAgICAgICAKLSAgICAgICAgV2UgdXNlIHRoZSB0ZXN0IHNjcmlwdCAobm90IGFwcGNsaWVudCkgaWYgdGhlIHVzZXIgd2FudHMgdG8gbGF1bmNoIGFwcCBjbGllbnRzIAotICAgICAgICB1c2luZyBKYXZhIFdlYiBTdGFydC4gCisgICAgPCEtLQorICAgICAgICBTb21lIHRlc3RzIGxhdW5jaCBhcHAgY2xpZW50cyBieSBkaXJlY3RseSBydW5uaW5nIHRoZSBhcHBjbGllbnQgc2NyaXB0LCB1c2luZyB0aGUgQVBQQ0xJRU5UIHByb3BlcnR5LgorICAgICAgICBPdGhlcnMgZG8gc28gYnkgaW52b2tpbmcgdGhlIHJ1bmNsaWVudC1jb21tb24gdGFyZ2V0LgorCisgICAgICAgIFdlIHVzZSB0aGUgdGVzdCBzY3JpcHQgKG5vdCBhcHBjbGllbnQpIGlmIHRoZSB1c2VyIHdhbnRzIHRvIGxhdW5jaCBhcHAgY2xpZW50cworICAgICAgICB1c2luZyBKYXZhIFdlYiBTdGFydC4KICAgICAtLT4KICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJBUFBDTElFTlQiIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnL2p3cy1hcHBjbGllbnQuYmF0IgogICAgICAgICBlbHNlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hcHBjbGllbnQuYmF0Ij4KICAgICAgICAgPGlzc2V0IHByb3BlcnR5PSJ1c2UuamF2YXdzIiAvPgogICAgIDwvY29uZGl0aW9uPgotICAgIAorCiAgICAgPHByb3BlcnR5IG5hbWU9IkFTQURNSU4iIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hc2FkbWluLmJhdCIgLz4KICAgICA8cHJvcGVydHkgbmFtZT0iQVNBTlQiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hc2FudC5iYXQiIC8+CiAgICAgPHByb3BlcnR5IG5hbWU9IkNBUFRVUkVTQ0hFTUEiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9jYXB0dXJlLXNjaGVtYS5iYXQiIC8+CkBAIC0xODcsOCArMTg3LDggQEAKICAgICA8cHJvcGVydHkgbmFtZT0ibGQubGlicmFyeS5wYXRoIiBsb2NhdGlvbj0iJHtlbnYuUzFBU19IT01FfS9saWI6JHtlbnYuUzFBU19IT01FfS9iaW4iIC8+CiA8L3RhcmdldD4KIAotPCEtLSBUaGUgZml4RmlsZXMgdGFyZ2V0IHJlbW92ZXMgYWxsIF5NIGNoYXJlY3RhcnMgZnJvbSB0aGUgZW5kIG9mIGxpbmVzIG9mIE1BTklGRVNULk1GIGZpbGVzIAotICAgICBzaW5jZSB0aGV5IGFyZSB2ZXJ5IHNlbnNpdGl2ZSB0byBpdC4gCis8IS0tIFRoZSBmaXhGaWxlcyB0YXJnZXQgcmVtb3ZlcyBhbGwgXk0gY2hhcmVjdGFycyBmcm9tIHRoZSBlbmQgb2YgbGluZXMgb2YgTUFOSUZFU1QuTUYgZmlsZXMKKyAgICAgc2luY2UgdGhleSBhcmUgdmVyeSBzZW5zaXRpdmUgdG8gaXQuCiAtLT4KIDx0YXJnZXQgbmFtZT0iZml4RmlsZXMiIGRlcGVuZHM9InNldE9TQ29uZGl0aW9ucyI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb252VW5peCIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9ydW4ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvY29uZmlnL3J1bi54bWwKaW5kZXggMjQzOGEzOS4uYzZiNDIwMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvY29uZmlnL3J1bi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvY29uZmlnL3J1bi54bWwKQEAgLTg2LDcgKzg2LDcgQEAKICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5KQVZBX0hPTUV9L2Jpbi9qcHMiIG91dHB1dD0icGlkLm91dC5maWxlIj4KICAgICAgICAgPGFyZyB2YWx1ZT0iLXYiIC8+CiAgICAgPC9leGVjPgotICAgIAorCiAgICAgPGxvYWRmaWxlIHNyY2ZpbGU9InBpZC5vdXQuZmlsZSIgcHJvcGVydHk9InBpZC5vdXQiPgogICAgICAgICA8ZmlsdGVyY2hhaW4+CiAgICAgICAgICAgICA8bGluZWNvbnRhaW5zPgpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgICAgICA8c3RyaXBsaW5lYnJlYWtzIC8+CiAgICAgICAgIDwvZmlsdGVyY2hhaW4+CiAgICAgPC9sb2FkZmlsZT4KLSAgICAKKwogICAgIDxlY2hvPkR1bXBpbmcgdGhlIHRocmVhZCBzdGFjayBmb3IgQXBwc2VydmVyIGluc3RhbmNlIHdpdGggUElEIC0gIiR7cGlkLm91dH0iPC9lY2hvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LkpBVkFfSE9NRX0vYmluL2pzdGFjayI+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7cGlkLm91dH0iIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvc3RvcFBCLnNoIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvY29uZmlnL3N0b3BQQi5zaAppbmRleCA1MThhYjgxLi5lZmIzOTJhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvc3RvcFBCLnNoCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9zdG9wUEIuc2gKQEAgLTMxLDE4ICszMSwxOCBAQAogaWYgWyAkT1MgPSAid2luMzIiIF07IHRoZW4KICAgICBmb3IgeCBpbiBgcHN8Z3JlcCAic3RhcnRQQiJ8Y3V0IC1kJyAnIC1mIDJgCiAgICAgZG8KLSAgICAgICAgZWNobyAia2lsbGluZyBzdGFydFBCIHByb2Nlc3Mgd2l0aCBwcm9jZXNzaWQ6ICR4IjsgCisgICAgICAgIGVjaG8gImtpbGxpbmcgc3RhcnRQQiBwcm9jZXNzIHdpdGggcHJvY2Vzc2lkOiAkeCI7CiAgICAgICAgIGtpbGwgLTkgJHgKICAgICBkb25lCiAgICAgZm9yIHggaW4gYHBzfGdyZXAgInBvaW50YmFzZSJ8Y3V0IC1kJyAnIC1mIDJgCiAgICAgZG8KLSAgICAgICAgZWNobyAia2lsbGluZyBwb2ludGJhc2UgcHJvY2VzcyB3aXRoIHByb2Nlc3NpZDogJHgiOyAKKyAgICAgICAgZWNobyAia2lsbGluZyBwb2ludGJhc2UgcHJvY2VzcyB3aXRoIHByb2Nlc3NpZDogJHgiOwogICAgICAgICBraWxsIC05ICR4CiAgICAgZG9uZQogZWxzZQogICAgIGZvciB4IGluIGBwcyAtZWZ8Z3JlcCAiamF2YSJ8Y3V0IC1kJyAnIC1mIDNgCiAgICAgZG8KLSAgICAgICAgZWNobyAia2lsbGluZyBqYXZhIHByb2Nlc3Mgd2l0aCBwcm9jZXNzaWQ6ICR4IjsgCisgICAgICAgIGVjaG8gImtpbGxpbmcgamF2YSBwcm9jZXNzIHdpdGggcHJvY2Vzc2lkOiAkeCI7CiAgICAgICAgIGtpbGwgLTkgJHgKICAgICBkb25lCiBmaQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvTW9uQXBwL3NyYy9tYWluL2phdmEvY29tL2VsZi9lbnRlcnByaXNlL21vbml0b3JpbmcvUHJvYmVTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYXBwcy9Nb25BcHAvc3JjL21haW4vamF2YS9jb20vZWxmL2VudGVycHJpc2UvbW9uaXRvcmluZy9Qcm9iZVNlcnZsZXQuamF2YQppbmRleCBkMzA5YzY4Li4zYjRkY2E4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYXBwcy9Nb25BcHAvc3JjL21haW4vamF2YS9jb20vZWxmL2VudGVycHJpc2UvbW9uaXRvcmluZy9Qcm9iZVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYXBwcy9Nb25BcHAvc3JjL21haW4vamF2YS9jb20vZWxmL2VudGVycHJpc2UvbW9uaXRvcmluZy9Qcm9iZVNlcnZsZXQuamF2YQpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICAgICAvLyBLSVNTCiAgICAgICAgICAgICBmb3IgKEl0ZXJhdG9yPFN0cmluZz4gaXQgPSBnZXRBbGxQcm9iZXMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHMgPSBpdC5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZihzLnN0YXJ0c1dpdGgoImZvb2Jsb2ciKSkKICAgICAgICAgICAgICAgICAgICAgcyA9ICI8Yj4iICsgcyArICI8L2I+IjsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIHByKCI8bGk+IiArIHMgKyAiPC9saT4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHByKCI8L3VsPiIpOwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTE2MCw3ICsxNjAsNyBAQAogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIFJldHVybnMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgc2VydmxldC4KICAgICAgKiBAcmV0dXJuIGEgU3RyaW5nIGNvbnRhaW5pbmcgc2VydmxldCBkZXNjcmlwdGlvbgogICAgICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvTXlFamIvTXlFamItYXBwLWNsaWVudC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYXBwcy9NeUVqYi9NeUVqYi1hcHAtY2xpZW50L2J1aWxkLnhtbAppbmRleCA2MjJiY2JkLi4xYTEzN2ExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYXBwcy9NeUVqYi9NeUVqYi1hcHAtY2xpZW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYXBwcy9NeUVqYi9NeUVqYi1hcHAtY2xpZW50L2J1aWxkLnhtbApAQCAtMzAsOSArMzAsOSBAQAogICAgIDxpbXBvcnQgZmlsZT0ibmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPCEtLQogCi0gICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUgCi0gICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQgCi0gICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6IAorICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlCisgICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQKKyAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZToKIAogICAgICAgLXByZS1pbml0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKICAgICAgIC1wb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKQEAgLTU4LDEyICs1OCwxMiBAQAogICAgICAgICAgICAgPC9vYmZ1c2NhdGU+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQKKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogCiAgICAgQW5vdGhlciB3YXkgdG8gY3VzdG9taXplIHRoZSBidWlsZCBpcyBieSBvdmVycmlkaW5nIGV4aXN0aW5nIG1haW4gdGFyZ2V0cy4KLSAgICBUaGUgdGFyZ2V0cyBvZiBpbnRlcmVzdCBhcmU6IAorICAgIFRoZSB0YXJnZXRzIG9mIGludGVyZXN0IGFyZToKIAogICAgICAgLWluaXQtbWFjcm9kZWYtamF2YWM6ICAgICBkZWZpbmVzIG1hY3JvIGZvciBqYXZhYyBjb21waWxhdGlvbgogICAgICAgLWluaXQtbWFjcm9kZWYtanVuaXQ6ICAgICBkZWZpbmVzIG1hY3JvIGZvciBqdW5pdCBleGVjdXRpb24KQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgIC1pbml0LW1hY3JvZGVmLWphdmE6ICAgICAgZGVmaW5lcyBtYWNybyBmb3IgY2xhc3MgZXhlY3V0aW9uCiAgICAgICAtZG8tamFyLXdpdGgtbWFuaWZlc3Q6ICAgIEpBUiBidWlsZGluZyAoaWYgeW91IGFyZSB1c2luZyBhIG1hbmlmZXN0KQogICAgICAgLWRvLWphci13aXRob3V0LW1hbmlmZXN0OiBKQVIgYnVpbGRpbmcgKGlmIHlvdSBhcmUgbm90IHVzaW5nIGEgbWFuaWZlc3QpCi0gICAgICBydW46ICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0IAorICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdAogICAgICAgLWphdmFkb2MtYnVpbGQ6ICAgICAgICAgICBKYXZhZG9jIGdlbmVyYXRpb24KICAgICAgIHRlc3QtcmVwb3J0OiAgICAgICAgICAgICAgSlVuaXQgcmVwb3J0IGdlbmVyYXRpb24KIApAQCAtODMsMTAgKzgzLDEwIEBACiAgICAgICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgTm90aWNlIHRoYXQgdGhlIG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gdGhlIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uIAotICAgIHRoZSBjb21waWxlIHRhcmdldCBhcyB0aGUgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSAKKyAgICBOb3RpY2UgdGhhdCB0aGUgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiB0aGUgamFyIHRhcmdldCBhbmQgbm90IG9ubHkgb24KKyAgICB0aGUgY29tcGlsZSB0YXJnZXQgYXMgdGhlIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGEgbGlzdCBvZiBhdmFpbGFibGUKICAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlLCBjaGVjayB0aGUgdGFyZ2V0IHlvdSBhcmUgb3ZlcnJpZGluZyBpbiB0aGUKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKICAgICAtLT4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9hcHBzL015RWpiL015RWpiLWVqYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYXBwcy9NeUVqYi9NeUVqYi1lamIvYnVpbGQueG1sCmluZGV4IGVlMjNjMDcuLjY3OGMxMTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9hcHBzL015RWpiL015RWpiLWVqYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvTXlFamIvTXlFamItZWpiL2J1aWxkLnhtbApAQCAtMzAsOSArMzAsOSBAQAogICAgIDxpbXBvcnQgZmlsZT0ibmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPCEtLQogCi0gICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUgCi0gICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQgCi0gICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6IAorICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlCisgICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQKKyAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZToKIAogICAgICAgLXByZS1pbml0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKICAgICAgIC1wb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogICAgIChUYXJnZXRzIGJlZ2lubmluZyB3aXRoICctJyBhcmUgbm90IGludGVuZGVkIHRvIGJlIGNhbGxlZCBvbiB0aGVpciBvd24uKQogCi0gICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSItcG9zdC1jb21waWxlIj4KICAgICAgICAgICAgIDxvYmZ1c2NhdGU+CkBAIC01NiwyMCArNTYsMjAgQEAKICAgICAgICAgICAgIDwvb2JmdXNjYXRlPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZCAKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKIAogICAgIE90aGVyIHdheSBob3cgdG8gY3VzdG9taXplIHRoZSBidWlsZCBpcyBieSBvdmVycmlkaW5nIGV4aXN0aW5nIG1haW4gdGFyZ2V0cy4KLSAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZTogCisgICAgVGhlIHRhcmdldCBvZiBpbnRlcmVzdCBhcmU6CiAKICAgICAgIGluaXQtbWFjcm9kZWYtamF2YWM6ICAgIGRlZmluZXMgbWFjcm8gZm9yIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWRlYnVnOiAgICBkZWZpbmVzIG1hY3JvIGZvciBjbGFzcyBkZWJ1Z2dpbmcKICAgICAgIGRvLWRpc3Q6ICAgICAgICAgICAgICAgIGFyY2hpdmUgYnVpbGRpbmcKLSAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0IAotICAgICAgamF2YWRvYy1idWlsZDogICAgICAgICAgamF2YWRvYyBnZW5lcmF0aW9uIAorICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHByb2plY3QKKyAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbgogCi0gICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgdGhlIHRhcmdldCBmb3IgcHJvamVjdCBleGVjdXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9IjxQUk9KTkFNRT4taW1wbC5qYXIiPgogICAgICAgICAgICAgPGV4ZWMgZGlyPSJiaW4iIGV4ZWN1dGFibGU9ImxhdW5jaGVyLmV4ZSI+CkBAIC03NywxMCArNzcsMTAgQEAKICAgICAgICAgICAgIDwvZXhlYz4KICAgICAgICAgPC90YXJnZXQ+CiAKLSAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uIAotICAgIGNvbXBpbGUgdGFyZ2V0IGFzIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGxpc3Qgb2YgYXZhaWxhYmxlIAotICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4gCi0gICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuIAorICAgIE5vdGljZSB0aGF0IG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gamFyIHRhcmdldCBhbmQgbm90IG9ubHkgb24KKyAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZQorICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4KKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogICAgIC0tPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvTXlFamIvTXlFamItZWpiL3NyYy9qYXZhL2Zvby9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYXBwcy9NeUVqYi9NeUVqYi1lamIvc3JjL2phdmEvZm9vL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCAwNmZmNjNlLi41MTZlOWJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYXBwcy9NeUVqYi9NeUVqYi1lamIvc3JjL2phdmEvZm9vL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYXBwcy9NeUVqYi9NeUVqYi1lamIvc3JjL2phdmEvZm9vL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMzEsNSArMzEsNSBAQAogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKIAogICAgIFN0cmluZyBnZXRNZXNzYWdlKCk7Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9hcHBzL015RWpiL015RWpiLXdhci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYXBwcy9NeUVqYi9NeUVqYi13YXIvYnVpbGQueG1sCmluZGV4IDA4NTAyZDAuLmU0MzFhZDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9hcHBzL015RWpiL015RWpiLXdhci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvTXlFamIvTXlFamItd2FyL2J1aWxkLnhtbApAQCAtMzAsMjcgKzMwLDI3IEBACiAgICAgPGltcG9ydCBmaWxlPSJuYnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8IS0tCiAKLSAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZSAKLSAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZCAKLSAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZTogCisgICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUKKyAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZAorICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOgogCi0gICAgICAtcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIC1wb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMgCi0gICAgICAtcHJlLWNvbXBpbGU6ICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIAotICAgICAgLXBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIAorICAgICAgLXByZS1pbml0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIC1wb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIC1wcmUtY29tcGlsZTogICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24KKyAgICAgIC1wb3N0LWNvbXBpbGU6ICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbgogICAgICAgLXByZS1jb21waWxlLXNpbmdsZTogICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgZmlsZQogICAgICAgLXBvc3QtY29tcGlsZS1zaW5nbGU6ICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBmaWxlCiAgICAgICAtcHJlLWNvbXBpbGUtdGVzdDogICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIEpVbml0IHRlc3RzCiAgICAgICAtcG9zdC1jb21waWxlLXRlc3Q6ICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2YgSlVuaXQgdGVzdHMKICAgICAgIC1wcmUtY29tcGlsZS10ZXN0LXNpbmdsZTogIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIEpVbml0IHRlc3QKICAgICAgIC1wb3N0LWNvbXBpbGUtdGVzdC1zaW5nbGU6IGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgSlV1bml0IHRlc3QKLSAgICAgIC1wcmUtZGlzdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgYXJjaGl2ZSBidWlsZGluZyAKLSAgICAgIC1wb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBhcmNoaXZlIGJ1aWxkaW5nIAotICAgICAgLXBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzIAorICAgICAgLXByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBhcmNoaXZlIGJ1aWxkaW5nCisgICAgICAtcG9zdC1kaXN0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgYXJjaGl2ZSBidWlsZGluZworICAgICAgLXBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzCiAgICAgICAtcHJlLXJ1bi1kZXBsb3k6ICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGRlcGxveWluZwogICAgICAgLXBvc3QtcnVuLWRlcGxveTogICAgICAgICAgY2FsbGVkIGFmdGVyIGRlcGxveWluZwogCi0gICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSItcG9zdC1jb21waWxlIj4KICAgICAgICAgICAgIDxvYmZ1c2NhdGU+CkBAIC01OCwyMSArNTgsMjEgQEAKICAgICAgICAgICAgIDwvb2JmdXNjYXRlPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZCAKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKIAogICAgIE90aGVyIHdheSBob3cgdG8gY3VzdG9taXplIHRoZSBidWlsZCBpcyBieSBvdmVycmlkaW5nIGV4aXN0aW5nIG1haW4gdGFyZ2V0cy4KLSAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZTogCisgICAgVGhlIHRhcmdldCBvZiBpbnRlcmVzdCBhcmU6CiAKICAgICAgIGluaXQtbWFjcm9kZWYtamF2YWM6ICAgIGRlZmluZXMgbWFjcm8gZm9yIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWp1bml0OiAgIGRlZmluZXMgbWFjcm8gZm9yIGp1bml0IGV4ZWN1dGlvbgogICAgICAgaW5pdC1tYWNyb2RlZi1kZWJ1ZzogICAgZGVmaW5lcyBtYWNybyBmb3IgY2xhc3MgZGVidWdnaW5nCiAgICAgICBkby1kaXN0OiAgICAgICAgICAgICAgICBhcmNoaXZlIGJ1aWxkaW5nCi0gICAgICBydW46ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdCAKLSAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbiAKKyAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0CisgICAgICBqYXZhZG9jLWJ1aWxkOiAgICAgICAgICBqYXZhZG9jIGdlbmVyYXRpb24KIAotICAgIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgdGFyZ2V0IGZvciBwcm9qZWN0IGV4ZWN1dGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSI8UFJPSk5BTUU+LWltcGwuamFyIj4KICAgICAgICAgICAgIDxleGVjIGRpcj0iYmluIiBleGVjdXRhYmxlPSJsYXVuY2hlci5leGUiPgpAQCAtODAsMTAgKzgwLDEwIEBACiAgICAgICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgTm90aWNlIHRoYXQgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbiAKLSAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZSAKLSAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uCisgICAgY29tcGlsZSB0YXJnZXQgYXMgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgbGlzdCBvZiBhdmFpbGFibGUKKyAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKICAgICAtLT4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9hcHBzL015RWpiL015RWpiLXdhci9zcmMvamF2YS9NeUVqYlNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9hcHBzL015RWpiL015RWpiLXdhci9zcmMvamF2YS9NeUVqYlNlcnZsZXQuamF2YQppbmRleCAwNTU4ZmVhLi5jYmM3MzhjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYXBwcy9NeUVqYi9NeUVqYi13YXIvc3JjL2phdmEvTXlFamJTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvTXlFamIvTXlFamItd2FyL3NyYy9qYXZhL015RWpiU2VydmxldC5qYXZhCkBAIC02NSw3ICs2NSw3IEBACiAgICAgfQogCiAgICAgLy8gPGVkaXRvci1mb2xkIGRlZmF1bHRzdGF0ZT0iY29sbGFwc2VkIiBkZXNjPSJIdHRwU2VydmxldCBtZXRob2RzLiBDbGljayBvbiB0aGUgKyBzaWduIG9uIHRoZSBsZWZ0IHRvIGVkaXQgdGhlIGNvZGUuIj4KLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogUmV0dXJucyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2bGV0LgogICAgICAqIEByZXR1cm4gYSBTdHJpbmcgY29udGFpbmluZyBzZXJ2bGV0IGRlc2NyaXB0aW9uCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYXBwcy9NeUVqYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYXBwcy9NeUVqYi9idWlsZC54bWwKaW5kZXggNTY5NjU3MS4uODk2Njg5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvTXlFamIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9hcHBzL015RWpiL2J1aWxkLnhtbApAQCAtMzAsMjEgKzMwLDIxIEBACiAgICAgPGltcG9ydCBmaWxlPSJuYnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8IS0tCiAKLSAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZSAKLSAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZCAKLSAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZTogCisgICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUKKyAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZAorICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOgogCi0gICAgICBwcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgcG9zdC1pbml0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgcHJlLWNvbXBpbGU6ICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIAotICAgICAgcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gCi0gICAgICBwcmUtZGlzdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgYXJjaGl2ZSBidWlsZGluZyAKLSAgICAgIHBvc3QtZGlzdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGFyY2hpdmUgYnVpbGRpbmcgCi0gICAgICBwb3N0LWNsZWFuOiAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBjbGVhbmluZyBidWlsZCBwcm9kdWN0cyAKKyAgICAgIHByZS1pbml0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIHBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgcHJlLWNvbXBpbGU6ICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uCisgICAgICBwb3N0LWNvbXBpbGU6ICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbgorICAgICAgcHJlLWRpc3Q6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGFyY2hpdmUgYnVpbGRpbmcKKyAgICAgIHBvc3QtZGlzdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGFyY2hpdmUgYnVpbGRpbmcKKyAgICAgIHBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzCiAgICAgICBwcmUtcnVuLWRlcGxveTogICAgICAgICAgIGNhbGxlZCBiZWZvcmUgZGVwbG95aW5nCiAgICAgICBwb3N0LXJ1bi1kZXBsb3k6ICAgICAgICAgIGNhbGxlZCBhZnRlciBkZXBsb3lpbmcKIAotICAgIEV4YW1wbGUgb2YgcGx1Z2luZyBhbiBvYmZ1c2NhdG9yIGFmdGVyIHRoZSBjb21waWxhdGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0icG9zdC1jb21waWxlIj4KICAgICAgICAgICAgIDxvYmZ1c2NhdGU+CkBAIC01MiwxNyArNTIsMTcgQEAKICAgICAgICAgICAgIDwvb2JmdXNjYXRlPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZCAKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKIAogICAgIE90aGVyIHdheSBob3cgdG8gY3VzdG9taXplIHRoZSBidWlsZCBpcyBieSBvdmVycmlkaW5nIGV4aXN0aW5nIG1haW4gdGFyZ2V0cy4KLSAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZTogCisgICAgVGhlIHRhcmdldCBvZiBpbnRlcmVzdCBhcmU6CiAKICAgICAgIGRvLWRpc3Q6ICAgICAgICAgICAgICAgIGFyY2hpdmUgYnVpbGRpbmcKLSAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0IAorICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHByb2plY3QKIAotICAgIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgdGFyZ2V0IGZvciBwcm9qZWN0IGV4ZWN1dGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSI8UFJPSk5BTUU+LWltcGwuamFyIj4KICAgICAgICAgICAgIDxleGVjIGRpcj0iYmluIiBleGVjdXRhYmxlPSJsYXVuY2hlci5leGUiPgpAQCAtNzAsMTAgKzcwLDEwIEBACiAgICAgICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgTm90aWNlIHRoYXQgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbiAKLSAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZSAKLSAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uCisgICAgY29tcGlsZSB0YXJnZXQgYXMgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgbGlzdCBvZiBhdmFpbGFibGUKKyAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKICAgICAtLT4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9hcHBzL1pvbWJpZS9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvWm9tYmllL3BvbS54bWwKaW5kZXggNjgzODMyMi4uMzM2ZTk1MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvWm9tYmllL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvWm9tYmllL3BvbS54bWwKQEAgLTQwLDE2ICs0MCwxNiBAQAogICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAKLQk8ZGVwZW5kZW5jeT4KLQkJPGdyb3VwSWQ+Y29tLmVsZjwvZ3JvdXBJZD4KLQkJPGFydGlmYWN0SWQ+Z2xhc3NmaXNoPC9hcnRpZmFjdElkPgotCQk8dmVyc2lvbj4xLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPGRlcGVuZGVuY3k+CisgICAgICAgIDxncm91cElkPmNvbS5lbGY8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmdsYXNzZmlzaDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+MS4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgotCTwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY3k+CiAKICAgICA8L2RlcGVuZGVuY2llcz4KICAgICA8YnVpbGQ+Ci0JCTxkZWZhdWx0R29hbD5pbnN0YWxsPC9kZWZhdWx0R29hbD4KKyAgICAgICAgPGRlZmF1bHRHb2FsPmluc3RhbGw8L2RlZmF1bHRHb2FsPgogICAgICAgICA8cGx1Z2lucz4KICAgICAgICAgICAgIDxwbHVnaW4+CiAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm1vcnRiYXkuamV0dHk8L2dyb3VwSWQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2J1aWxkLnhtbAppbmRleCAzODExNTIzLi5kOWJlMzI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9idWlsZC54bWwKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRldi1yZXBvcnQiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iRGV0YWlsZWQgcmVzdWx0cyBhdmFpbGFibGUgdW5kZXIgJHtlbnYuQVBTX0hPTUV9L3Rlc3RfcmVzdWx0cy5odG1sIi8+CiAgICAgPC90YXJnZXQ+Ci0gIAorCiAgICAgPHRhcmdldCBuYW1lPSJjbGllbnRzdHVicyIgZGVwZW5kcz0iaW5pdCI+CiAgICAgICAgIDxydW50ZXN0IGNsYXNzbmFtZT0iYWRtaW4uQ2xpZW50U3R1YnNUZXN0cyIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvcG9tLnhtbAppbmRleCAxNGVhMjQ3Li5mZmE3MDlmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvcG9tLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgICAgPGRldmVsb3BlckNvbm5lY3Rpb24+c2NtOmdpdDpnaXQ6Ly9naXRodWIuY29tL2VjbGlwc2UtZWU0ai9nbGFzc2Zpc2g8L2RldmVsb3BlckNvbm5lY3Rpb24+CiAgICAgICA8dXJsPmh0dHBzOi8vZ2l0aHViLmNvbS9lY2xpcHNlLWVlNGovZ2xhc3NmaXNoPC91cmw+CiAgICAgPC9zY20+Ci0gICAgCisKICAgICA8bW9kdWxlcz4KICAgICAgICAgPG1vZHVsZT5jbHVzdGVyPC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+aW5zdGFuY2U8L21vZHVsZT4KQEAgLTc5LDcgKzc5LDcgQEAKICAgICAgICAgICAgIDxwbHVnaW4+CiAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc3VyZWZpcmUtcGx1Z2luPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8Zm9ya0NvdW50PjA8L2ZvcmtDb3VudD4gCisgICAgICAgICAgICAgICAgICAgIDxmb3JrQ291bnQ+MDwvZm9ya0NvdW50PgogICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgICAgICAgIDwvcGx1Z2luPgogICAgICAgICA8L3BsdWdpbnM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0FkbWluT2JqZWN0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9BZG1pbk9iamVjdFRlc3QuamF2YQppbmRleCAyMzZlZTRlLi5kNWFhYzRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0FkbWluT2JqZWN0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vQWRtaW5PYmplY3RUZXN0LmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVMRVRFX1JFU09VUkNFX1JFRiA9ICJkZWxldGUtcmVzb3VyY2UtcmVmIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTElTVF9SRVNPVVJDRV9SRUYgPSAibGlzdC1yZXNvdXJjZS1yZWZzIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTElTVF9KTkRJX0VOVFJJRVMgPSAibGlzdC1qbmRpLWVudHJpZXMiOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFTEVURV9BRE1JTl9PQkpFQ1QgPSAiZGVsZXRlLWFkbWluLW9iamVjdCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENSRUFURV9BRE1JTl9PQkpFQ1QgPSAiY3JlYXRlLWFkbWluLW9iamVjdCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExJU1RfQURNSU5fT0JKRUNUUyA9ICJsaXN0LWFkbWluLW9iamVjdHMiOwpAQCAtMjIxLDcgKzIyMSw3IEBACiAgICAgICAgIHJlcG9ydFJlc3VsdFN0YXR1cyh0ZXN0TmFtZSwgcmVzdWx0KTsKICAgICAgICAgcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgIiIpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCB0ZXN0RGVsZXRlQWRtaW5PYmplY3RFeHBlY3RGYWlsdXJlKFN0cmluZyB0YXJnZXQpewogICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSAidGVzdERlbGV0ZUFkbWluT2JqZWN0RXhwZWN0RmFpbHVyZSI7CiAgICAgICAgIEFzYWRtaW5SZXR1cm4gcmVzdWx0ID0gYXNhZG1pbldpdGhPdXRwdXQoREVMRVRFX0FETUlOX09CSkVDVCxUQVJHRVRfT1BUSU9OLCB0YXJnZXQsIFJFU09VUkNFX05BTUUpOwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAgICAgICAgIHJlcG9ydFJlc3VsdFN0YXR1cyh0ZXN0TmFtZSwgcmVzdWx0KTsKICAgICAgICAgLy9yZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCBTVEFOREFMT05FX0lOU1RBTkNFX05BTUUsIElOU1RBTkNFMV9OQU1FLCBJTlNUQU5DRTJfTkFNRSk7CiAgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJBZG1pbmlzdGVyZWQgb2JqZWN0IHJlc291cmNlLTEgZGVsZXRlZC4iKTsKLQkvKkNvbW1lbnRpbmcgb3V0IHRoZSBmYWlsZWQgdGVzdCwgY2FuIGJlIHVuY29tbWVudGVkIGFmdGVyIGZpeGluZyBHbGFzc2Zpc2ggSXNzdWUgMjE3NzQgKi8KKyAgICAvKkNvbW1lbnRpbmcgb3V0IHRoZSBmYWlsZWQgdGVzdCwgY2FuIGJlIHVuY29tbWVudGVkIGFmdGVyIGZpeGluZyBHbGFzc2Zpc2ggSXNzdWUgMjE3NzQgKi8KICAgICAgICAgLy9yZXBvcnRVbmV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsIFNFUlZFUiwgQ0xVU1RFUl9OQU1FKTsKICAgICB9CiAKQEAgLTM1Nyw3ICszNTcsNyBAQAogICAgICAgICByZXBvcnRSZXN1bHRTdGF0dXModGVzdE5hbWUsIHJlc3VsdCk7CiAgICAgICAgIC8vcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgSU5TVEFOQ0UxX05BTUUsIElOU1RBTkNFMl9OQU1FLCBTVEFOREFMT05FX0lOU1RBTkNFX05BTUUpOwogICAgICAgICByZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAiQWRtaW5pc3RlcmVkIG9iamVjdCByZXNvdXJjZS0xIGRlbGV0ZWQuIik7Ci0JLypDb21tZW50aW5nIG91dCB0aGUgZmFpbGVkIHRlc3QsIGNhbiBiZSB1bmNvbW1lbnRlZCBhZnRlciBmaXhpbmcgR2xhc3NmaXNoIElzc3VlIDIxNzc0ICovCisgICAgLypDb21tZW50aW5nIG91dCB0aGUgZmFpbGVkIHRlc3QsIGNhbiBiZSB1bmNvbW1lbnRlZCBhZnRlciBmaXhpbmcgR2xhc3NmaXNoIElzc3VlIDIxNzc0ICovCiAgICAgICAgIC8vcmVwb3J0VW5leHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCBTRVJWRVIpOwogICAgIH0KIApAQCAtNDA5LDcgKzQwOSw3IEBACiAgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQpOwogICAgICAgICAvL3JlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsIElOU1RBTkNFMl9OQU1FLCBJTlNUQU5DRTFfTkFNRSwgU1RBTkRBTE9ORV9JTlNUQU5DRV9OQU1FKTsKICAgICAgICAgcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgIkFkbWluaXN0ZXJlZCBvYmplY3QgcmVzb3VyY2UtMSBjcmVhdGVkLiIpOwotCS8qQ29tbWVudGluZyBvdXQgdGhlIGZhaWxlZCB0ZXN0LCBjYW4gYmUgdW5jb21tZW50ZWQgYWZ0ZXIgZml4aW5nIEdsYXNzZmlzaCBJc3N1ZSAyMTc3NCAqLworICAgIC8qQ29tbWVudGluZyBvdXQgdGhlIGZhaWxlZCB0ZXN0LCBjYW4gYmUgdW5jb21tZW50ZWQgYWZ0ZXIgZml4aW5nIEdsYXNzZmlzaCBJc3N1ZSAyMTc3NCAqLwogICAgICAgICAvL3JlcG9ydFVuZXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgU1RBTkRBTE9ORV9JTlNUQU5DRV9OQU1FKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vQ2hhbmdlTWFzdGVyQnJva2VyVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9DaGFuZ2VNYXN0ZXJCcm9rZXJUZXN0LmphdmEKaW5kZXggYmVlZjZmYS4uZGM5NzNiYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9DaGFuZ2VNYXN0ZXJCcm9rZXJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9DaGFuZ2VNYXN0ZXJCcm9rZXJUZXN0LmphdmEKQEAgLTEyMiw5ICsxMjIsOSBAQAogICAgIHB1YmxpYyBPYmplY3Qgam14Q2FsbChTdHJpbmcgam1zUHJvdmlkZXJQb3J0LCBTdHJpbmcgb2JqZWN0TmFtZSwgU3RyaW5nIGF0dHJOYW1lKXsKIC8qCiAgKiBDb21tZW50ZWQgb3V0IGJlY2F1c2UgYnVpbGRpbmcgdGhpcyBjb2RlIGRlcGVuZHMgb24gaGF2aW5nIEdsYXNzRmlzaCBhbHJlYWR5IGRvd25sb2FkZWQuCi0gKiBUaGUgYWRtaW4gZGV2dGVzdCBtdXN0IGJ1aWxkIHdpdGhvdXQgaGF2aW5nIEdsYXNzRmlzaCBwcmVzZW50LiAKKyAqIFRoZSBhZG1pbiBkZXZ0ZXN0IG11c3QgYnVpbGQgd2l0aG91dCBoYXZpbmcgR2xhc3NGaXNoIHByZXNlbnQuCiAgICAgICAgIHRyeXsKLSAKKwogICAgICAgICBBZG1pbkNvbm5lY3Rpb25GYWN0b3J5IGFjZiA9IG5ldyBBZG1pbkNvbm5lY3Rpb25GYWN0b3J5KCk7CiAgICAgICAgIGFjZi5zZXRQcm9wZXJ0eShBZG1pbkNvbm5lY3Rpb25Db25maWd1cmF0aW9uLmltcUFkZHJlc3MsICAgICJsb2NhbGhvc3Q6IiArIGptc1Byb3ZpZGVyUG9ydCk7CiAgICAgICAgIEpNWENvbm5lY3RvciBjb25uZWN0b3IgPSBhY2YuY3JlYXRlQ29ubmVjdGlvbigiYWRtaW4iLCJhZG1pbiIpOwpAQCAtMTM3LDExICsxMzcsMTEgQEAKICAgICAgICBPYmplY3QgYXR0cnZhbHVlID0gIG1ic2MuZ2V0QXR0cmlidXRlKG9iak5hbWUsIGF0dHJOYW1lKTsKICAgICAgICBjb25uZWN0b3IuY2xvc2UoKTsKICAgICAgICByZXR1cm4gYXR0cnZhbHVlOwotICAgICAgICAgICAgCisKICAgICAgIH1jYXRjaChFeGNlcHRpb24gZXgpewogICAgICAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgfQotICogCisgKgogICovCiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0NvbmZpZ3VyZUFyYml0YXJ5QnJva2VyUHJvcGVydGllc1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vQ29uZmlndXJlQXJiaXRhcnlCcm9rZXJQcm9wZXJ0aWVzVGVzdC5qYXZhCmluZGV4IDE4NGI5MTYuLjVmNTdlZjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vQ29uZmlndXJlQXJiaXRhcnlCcm9rZXJQcm9wZXJ0aWVzVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vQ29uZmlndXJlQXJiaXRhcnlCcm9rZXJQcm9wZXJ0aWVzVGVzdC5qYXZhCkBAIC0xMDksNyArMTA5LDcgQEAKIHB1YmxpYyBPYmplY3Qgam14Q2FsbChTdHJpbmcgam1zUHJvdmlkZXJQb3J0LCBTdHJpbmcgb2JqZWN0TmFtZSwgU3RyaW5nIGF0dHJpYnV0ZU5hbWUpewogLyoKICAqIENvbW1lbnRlZCBvdXQgYmVjYXVzZSBidWlsZGluZyB0aGlzIGNvZGUgZGVwZW5kcyBvbiBoYXZpbmcgR2xhc3NGaXNoIGFscmVhZHkgZG93bmxvYWRlZC4KLSAqIFRoZSBhZG1pbiBkZXZ0ZXN0IG11c3QgYnVpbGQgd2l0aG91dCBoYXZpbmcgR2xhc3NGaXNoIHByZXNlbnQuIAorICogVGhlIGFkbWluIGRldnRlc3QgbXVzdCBidWlsZCB3aXRob3V0IGhhdmluZyBHbGFzc0Zpc2ggcHJlc2VudC4KICB0cnl7CiAgICAgQWRtaW5Db25uZWN0aW9uRmFjdG9yeSBhY2YgPSBuZXcgQWRtaW5Db25uZWN0aW9uRmFjdG9yeSgpOwogICAgIGFjZi5zZXRQcm9wZXJ0eShBZG1pbkNvbm5lY3Rpb25Db25maWd1cmF0aW9uLmltcUFkZHJlc3MsICAgICJsb2NhbGhvc3Q6IiArIGptc1Byb3ZpZGVyUG9ydCk7CkBAIC0xMzIsNyArMTMyLDcgQEAKICAgfWNhdGNoKEV4Y2VwdGlvbiBleCl7CiAgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgfQotICogCisgKgogICovCiAgICAgIHJldHVybiBudWxsOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9Db25maWd1cmVKbXNDbHVzdGVyVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9Db25maWd1cmVKbXNDbHVzdGVyVGVzdC5qYXZhCmluZGV4IDRkOGM2MzMuLjcwZTYyNDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vQ29uZmlndXJlSm1zQ2x1c3RlclRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0NvbmZpZ3VyZUptc0NsdXN0ZXJUZXN0LmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIC8qCiBpbXBvcnQgY29tLnN1bi5tZXNzYWdpbmcuQWRtaW5Db25uZWN0aW9uQ29uZmlndXJhdGlvbjsKIGltcG9ydCBjb20uc3VuLm1lc3NhZ2luZy5BZG1pbkNvbm5lY3Rpb25GYWN0b3J5OwotICogCisgKgogICovCiAKIGltcG9ydCBqYXZheC5tYW5hZ2VtZW50Lk1CZWFuU2VydmVyQ29ubmVjdGlvbjsKQEAgLTE2Miw3ICsxNjIsNyBAQAogICAgIHB1YmxpYyBPYmplY3Qgam14Q2FsbChTdHJpbmcgam1zUHJvdmlkZXJQb3J0LCBTdHJpbmcgb2JqZWN0TmFtZSwgU3RyaW5nIGF0dHJOYW1lKXsKIC8qCiAgKiBDb21tZW50ZWQgb3V0IGJlY2F1c2UgYnVpbGRpbmcgdGhpcyBjb2RlIGRlcGVuZHMgb24gaGF2aW5nIEdsYXNzRmlzaCBhbHJlYWR5IGRvd25sb2FkZWQuCi0gKiBUaGUgYWRtaW4gZGV2dGVzdCBtdXN0IGJ1aWxkIHdpdGhvdXQgaGF2aW5nIEdsYXNzRmlzaCBwcmVzZW50LiAKKyAqIFRoZSBhZG1pbiBkZXZ0ZXN0IG11c3QgYnVpbGQgd2l0aG91dCBoYXZpbmcgR2xhc3NGaXNoIHByZXNlbnQuCiAgICAgICAgIHRyeXsKIAogICAgICAgICBBZG1pbkNvbm5lY3Rpb25GYWN0b3J5IGFjZiA9IG5ldyBBZG1pbkNvbm5lY3Rpb25GYWN0b3J5KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0Nvbm5lY3RvclJlc291cmNlVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9Db25uZWN0b3JSZXNvdXJjZVRlc3QuamF2YQppbmRleCBjNGE2ZDhjLi40ZDM1ZTczIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0Nvbm5lY3RvclJlc291cmNlVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vQ29ubmVjdG9yUmVzb3VyY2VUZXN0LmphdmEKQEAgLTQyOSw3ICs0MjksNyBAQAogICAgICAgICByZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0KTsKICAgICAgICAgLy9yZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCBJTlNUQU5DRTJfTkFNRSwgSU5TVEFOQ0UxX05BTUUpOwogICAgICAgICByZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAiQ29ubmVjdG9yIHJlc291cmNlIHJlc291cmNlLTEgY3JlYXRlZC4iKTsKLQkvKkNvbW1lbnRpbmcgb3V0IHRoZSBmYWlsZWQgdGVzdCwgY2FuIGJlIHVuY29tbWVudGVkIGFmdGVyIGZpeGluZyBHbGFzc2Zpc2ggSXNzdWUgMjE3NzQgKi8KKyAgICAvKkNvbW1lbnRpbmcgb3V0IHRoZSBmYWlsZWQgdGVzdCwgY2FuIGJlIHVuY29tbWVudGVkIGFmdGVyIGZpeGluZyBHbGFzc2Zpc2ggSXNzdWUgMjE3NzQgKi8KICAgICAgICAvL3JlcG9ydFVuZXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgU1RBTkRBTE9ORV9JTlNUQU5DRV9OQU1FKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vQ3VzdG9tUmVzb3VyY2VUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0N1c3RvbVJlc291cmNlVGVzdC5qYXZhCmluZGV4IDcyYzg1MjQuLjA0NjVkMTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vQ3VzdG9tUmVzb3VyY2VUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9DdXN0b21SZXNvdXJjZVRlc3QuamF2YQpAQCAtMTIzLDcgKzEyMyw3IEBACiAgICAgICAgIHRlc3RMaXN0Q3VzdG9tUmVzb3VyY2VUYXJnZXREb21haW4oKTsKIAogICAgICAgICB0ZXN0Q3JlYXRlUmVzb3VyY2VSZWZJbkNsdXN0ZXIoKTsKLQkgICAgdGVzdExpc3RSZXNvdXJjZVJlZkluQ2x1c3RlcigpOworICAgICAgICB0ZXN0TGlzdFJlc291cmNlUmVmSW5DbHVzdGVyKCk7CiAgICAgICAgIC8vdGVzdExpc3RKbmRpRW50cmllc0luQ2x1c3RlcigpOwogICAgICAgICB0ZXN0TGlzdEN1c3RvbVJlc291cmNlVGFyZ2V0Q2x1c3RlcigpOwogICAgICAgICB0ZXN0RGVsZXRlQ3VzdG9tUmVzb3VyY2VJbkRvbWFpbkV4cGVjdEZhaWx1cmUoKTsKQEAgLTEzNCw4ICsxMzQsOCBAQAogCiAKICAgICAgICAgdGVzdENyZWF0ZVJlc291cmNlUmVmSW5TdGFuZGFsb25lSW5zdGFuY2UoKTsKLQkgICAgdGVzdExpc3RSZXNvdXJjZVJlZkluU3RhbmRhbG9uZUluc3RhbmNlKCk7Ci0JICAgIC8vdGVzdExpc3RKbmRpRW50cmllc0luU3RhbmRhbG9uZUluc3RhbmNlKCk7CisgICAgICAgIHRlc3RMaXN0UmVzb3VyY2VSZWZJblN0YW5kYWxvbmVJbnN0YW5jZSgpOworICAgICAgICAvL3Rlc3RMaXN0Sm5kaUVudHJpZXNJblN0YW5kYWxvbmVJbnN0YW5jZSgpOwogICAgICAgICB0ZXN0TGlzdEN1c3RvbVJlc291cmNlVGFyZ2V0U3RhbmRhbG9uZUluc3RhbmNlKCk7CiAgICAgICAgIHRlc3REZWxldGVDdXN0b21SZXNvdXJjZUluRG9tYWluRXhwZWN0RmFpbHVyZSgpOwogICAgICAgICB0ZXN0RGVsZXRlQ3VzdG9tUmVzb3VyY2VFeHBlY3RGYWlsdXJlKENMVVNURVJfTkFNRSk7CkBAIC0yODQsNyArMjg0LDcgQEAKICAgICAgICAgcmVwb3J0UmVzdWx0U3RhdHVzKHRlc3ROYW1lLCByZXN1bHQpOwogICAgICAgICAvL3JlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsIFNUQU5EQUxPTkVfSU5TVEFOQ0VfTkFNRSwgSU5TVEFOQ0UxX05BTUUsIElOU1RBTkNFMl9OQU1FKTsKICAgICAgICAgcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgIkN1c3RvbSByZXNvdXJjZSByZXNvdXJjZS0xIGRlbGV0ZWQuIik7Ci0JLypDb21tZW50aW5nIG91dCB0aGUgZmFpbGVkIHRlc3QsIGNhbiBiZSB1bmNvbW1lbnRlZCBhZnRlciBmaXhpbmcgR2xhc3NmaXNoIElzc3VlIDIxNzc0ICovCisgICAgLypDb21tZW50aW5nIG91dCB0aGUgZmFpbGVkIHRlc3QsIGNhbiBiZSB1bmNvbW1lbnRlZCBhZnRlciBmaXhpbmcgR2xhc3NmaXNoIElzc3VlIDIxNzc0ICovCiAgICAgICAgIC8vcmVwb3J0VW5leHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCBTRVJWRVIsIENMVVNURVJfTkFNRSk7CiAgICAgfQogCkBAIC0yOTQsNyArMjk0LDcgQEAKICAgICAgICAgcmVwb3J0UmVzdWx0U3RhdHVzKHRlc3ROYW1lLCByZXN1bHQpOwogICAgICAgICAvL3JlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsIElOU1RBTkNFMV9OQU1FLCBJTlNUQU5DRTJfTkFNRSwgU1RBTkRBTE9ORV9JTlNUQU5DRV9OQU1FKTsKICAgICAgICAgcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgIkN1c3RvbSByZXNvdXJjZSByZXNvdXJjZS0xIGRlbGV0ZWQuIik7Ci0JLypDb21tZW50aW5nIG91dCB0aGUgZmFpbGVkIHRlc3QsIGNhbiBiZSB1bmNvbW1lbnRlZCBhZnRlciBmaXhpbmcgR2xhc3NmaXNoIElzc3VlIDIxNzc0ICovCisgICAgLypDb21tZW50aW5nIG91dCB0aGUgZmFpbGVkIHRlc3QsIGNhbiBiZSB1bmNvbW1lbnRlZCBhZnRlciBmaXhpbmcgR2xhc3NmaXNoIElzc3VlIDIxNzc0ICovCiAgICAgICAgIC8vcmVwb3J0VW5leHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCBTRVJWRVIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9Eb21haW5UZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0RvbWFpblRlc3QuamF2YQppbmRleCBiY2IxMWM0Li5hZTEwZTY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0RvbWFpblRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0RvbWFpblRlc3QuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICAgICAgICAgIF9icmFuZGluZ1Byb3BlcnRpZXMubG9hZChuZXcgRmlsZUlucHV0U3RyZWFtKGJyYW5kaW5nRmlsZSkpOwogICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm90IGFibGUgdG8gbG9hZCBicmFuZGluZyBmaWxlLiIpOwotICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtOTksNyArOTksNyBAQAogICAgICAqCiAgICAgICogQHBhcmFtIG5hbWUgRG9tYWluIG5hbWUuCiAgICAgICogQHBhcmFtIHRlbXBsYXRlUGF0aCBhYnNvbHV0ZSB0ZW1wbGF0ZSBwYXRoLgotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdGVtcGxhdGUgaXMgdXNlZCBmb3IgZG9tYWluIGNyZWF0aW9uLiAKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIHRlbXBsYXRlIGlzIHVzZWQgZm9yIGRvbWFpbiBjcmVhdGlvbi4KICAgICAgKi8KICAgICBib29sZWFuIGNoZWNrRG9tYWluKFN0cmluZyBuYW1lLCBTdHJpbmcgdGVtcGxhdGVQYXRoKSB7CiAgICAgICAgIEZpbGUgZG9tSW5mb1htbCA9IFRlc3RFbnYuZ2V0RG9tYWluSW5mb1htbChuYW1lKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vRHluYW1pY1N5bmNCcm9rZXJMaXN0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9EeW5hbWljU3luY0Jyb2tlckxpc3RUZXN0LmphdmEKaW5kZXggZjExNDkwNS4uYTllNGY2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9EeW5hbWljU3luY0Jyb2tlckxpc3RUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9EeW5hbWljU3luY0Jyb2tlckxpc3RUZXN0LmphdmEKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgIHB1YmxpYyBPYmplY3Qgam14Q2FsbChTdHJpbmcgam1zUHJvdmlkZXJQb3J0LCBTdHJpbmcgb2JqZWN0TmFtZSl7CiAvKgogICogQ29tbWVudGVkIG91dCBiZWNhdXNlIGJ1aWxkaW5nIHRoaXMgY29kZSBkZXBlbmRzIG9uIGhhdmluZyBHbGFzc0Zpc2ggYWxyZWFkeSBkb3dubG9hZGVkLgotICogVGhlIGFkbWluIGRldnRlc3QgbXVzdCBidWlsZCB3aXRob3V0IGhhdmluZyBHbGFzc0Zpc2ggcHJlc2VudC4gCisgKiBUaGUgYWRtaW4gZGV2dGVzdCBtdXN0IGJ1aWxkIHdpdGhvdXQgaGF2aW5nIEdsYXNzRmlzaCBwcmVzZW50LgogICAgICB0cnl7CiAgICAgICAgIEFkbWluQ29ubmVjdGlvbkZhY3RvcnkgYWNmID0gbmV3IEFkbWluQ29ubmVjdGlvbkZhY3RvcnkoKTsKICAgICAgICAgYWNmLnNldFByb3BlcnR5KEFkbWluQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaW1xQWRkcmVzcywgICAgImxvY2FsaG9zdDoiICsgam1zUHJvdmlkZXJQb3J0KTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vRXh0ZXJuYWxKbmRpUmVzb3VyY2VUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0V4dGVybmFsSm5kaVJlc291cmNlVGVzdC5qYXZhCmluZGV4IGRhNzY5ZGUuLjBhNDA3NmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vRXh0ZXJuYWxKbmRpUmVzb3VyY2VUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9FeHRlcm5hbEpuZGlSZXNvdXJjZVRlc3QuamF2YQpAQCAtMjg3LDcgKzI4Nyw3IEBACiAgICAgICAgIHJlcG9ydFJlc3VsdFN0YXR1cyh0ZXN0TmFtZSwgcmVzdWx0KTsKICAgICAgICAgLy9yZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCBTVEFOREFMT05FX0lOU1RBTkNFX05BTUUsIElOU1RBTkNFMV9OQU1FLCBJTlNUQU5DRTJfTkFNRSk7CiAgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJKbmRpIHJlc291cmNlIHJlc291cmNlLTEgZGVsZXRlZC4iKTsKLQkvKkNvbW1lbnRpbmcgb3V0IHRoZSBmYWlsZWQgdGVzdCwgY2FuIGJlIHVuY29tbWVudGVkIGFmdGVyIGZpeGluZyBHbGFzc2Zpc2ggSXNzdWUgMjE3NzQgKi8KKyAgICAvKkNvbW1lbnRpbmcgb3V0IHRoZSBmYWlsZWQgdGVzdCwgY2FuIGJlIHVuY29tbWVudGVkIGFmdGVyIGZpeGluZyBHbGFzc2Zpc2ggSXNzdWUgMjE3NzQgKi8KICAgICAgICAgLy9yZXBvcnRVbmV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsIFNFUlZFUiwgQ0xVU1RFUl9OQU1FKTsKICAgICB9CiAKQEAgLTI5Nyw3ICsyOTcsNyBAQAogICAgICAgICByZXBvcnRSZXN1bHRTdGF0dXModGVzdE5hbWUsIHJlc3VsdCk7CiAgICAgICAgIC8vcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgSU5TVEFOQ0UxX05BTUUsIElOU1RBTkNFMl9OQU1FLCBTVEFOREFMT05FX0lOU1RBTkNFX05BTUUpOwogICAgICAgICByZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAiSm5kaSByZXNvdXJjZSByZXNvdXJjZS0xIGRlbGV0ZWQuIik7Ci0JLypDb21tZW50aW5nIG91dCB0aGUgZmFpbGVkIHRlc3QsIGNhbiBiZSB1bmNvbW1lbnRlZCBhZnRlciBmaXhpbmcgR2xhc3NmaXNoIElzc3VlIDIxNzc0ICovCisgICAgLypDb21tZW50aW5nIG91dCB0aGUgZmFpbGVkIHRlc3QsIGNhbiBiZSB1bmNvbW1lbnRlZCBhZnRlciBmaXhpbmcgR2xhc3NmaXNoIElzc3VlIDIxNzc0ICovCiAgICAgICAgIC8vcmVwb3J0VW5leHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCBTRVJWRVIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9HZXRTZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0dldFNldFRlc3QuamF2YQppbmRleCA3MDBhZDUwLi40NGJjZTJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0dldFNldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0dldFNldFRlc3QuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgbmV3IEdldFNldFRlc3QoKS5ydW5UZXN0cygpOyAgICAKKyAgICAgICAgbmV3IEdldFNldFRlc3QoKS5ydW5UZXN0cygpOwogICAgIH0KIAogICAgIHByaXZhdGUgU3RyaW5nIGVuY29kZVN0YXIoU3RyaW5nIHMpIHsKQEAgLTUyLDIwICs1MiwyMCBAQAogICAgICAgICBzdGFydERvbWFpbigpOwogICAgICAgICByZXBvcnQoImNyZWF0ZS1jbHVzdGVyIiwgYXNhZG1pbigiY3JlYXRlLWNsdXN0ZXIiLCAiZ3MxIikpOwogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGNsZWFudXAoKSB7CiAgICAgICAgIHJlcG9ydCgiZGVsZXRlLWNsdXN0ZXIiLCBhc2FkbWluKCJkZWxldGUtY2x1c3RlciIsICJnczEiKSk7Ci0gICAgICAgIHN0b3BEb21haW4oKTsgICAgICAgIAorICAgICAgICBzdG9wRG9tYWluKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoKICAgICAgKiBVc2UgImdldCAqIiB0byBnZXQgYWxsIHNldHRhYmxlIHZhbHVlcywgYW5kIHRoZW4gdXNlIHNldCB0byBzZXQgdGhlIGF0dHJpYnV0ZQogICAgICAqIHRvIHRoZSBjdXJyZW50IHZhbHVlLgogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCB0ZXN0R2V0U2V0QWxsKCkgewogICAgICAgICBmaW5hbCBTdHJpbmcgdCA9ICJnZXRzZXRhbGwtIjsKLSAgICAgICAgCisKICAgICAgICAgQXNhZG1pblJldHVybiBydiA9IGFzYWRtaW5XaXRoT3V0cHV0KCJnZXQiLCBlbmNvZGVTdGFyKCIqIikpOwogICAgICAgICByZXBvcnQodCArICJnZXQiLCBydi5yZXR1cm5WYWx1ZSk7CiAgICAgICAgIFN0cmluZ1tdIGxpbmVzID0gcnYub3V0LnNwbGl0KCJbXHJcbl0iKTsKQEAgLTgwLDcgKzgwLDcgQEAKICAgICAgICAgfQogICAgICAgICB0ZXN0U2V0cyh0LCBzZXRsaW5lcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoKICAgICAgKiBVc2UgImdldCAqIiB0byBnZXQgYWxsIHNldHRhYmxlIGFsaWFzIHZhbHVlcywgYW5kIHRoZW4gdXNlIHNldCB0byBzZXQgdGhlIGF0dHJpYnV0ZQogICAgICAqIHRvIHRoZSBjdXJyZW50IHZhbHVlIHVzaW5nIHRoZSBhbGlhcyBmb3IgdGhlIHZhbHVlLgpAQCAtOTQsNyArOTQsNyBAQAogICAgICAgICB9OwogICAgICAgICBMaXN0PFN0cmluZz4gc2V0bGluZXMgPSBuZXcgQXJyYXlMaXN0KCk7CiAKLSAgICAgICAgCisKICAgICAgICAgZm9yIChTdHJpbmcgYSA6IGFsaWFzZXMpIHsKICAgICAgICAgICAgIEFzYWRtaW5SZXR1cm4gcnYgPSBhc2FkbWluV2l0aE91dHB1dCgiZ2V0IiwgZW5jb2RlU3RhcihhICsgIi4qIikpOwogICAgICAgICAgICAgcmVwb3J0KHQgKyAiZ2V0IiwgcnYucmV0dXJuVmFsdWUpOwpAQCAtMTAyLDEyICsxMDIsMTIgQEAKICAgICAgICAgICAgIGlmICghcnYucmV0dXJuVmFsdWUpIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBmaWx0ZXJKdW5rKGxpbmVzKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIGZvciAoU3RyaW5nIGxpbmUgOiBsaW5lcykgewogICAgICAgICAgICAgICAgIGxpbmUgPSBmaWx0ZXJTZXQobGluZSk7CiAgICAgICAgICAgICAgICAgaWYgKGxpbmUgPT0gbnVsbCkgY29udGludWU7CiAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZShhICsgIi4iLCAiIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAobGluZS5jb250YWlucygic2VydmVyLm5hbWUiKSB8fAogICAgICAgICAgICAgICAgICAgICBsaW5lLmNvbnRhaW5zKCJnczEubmFtZSIpKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICBzZXRsaW5lcy5hZGQobGluZSk7CkBAIC0xMTUsOSArMTE1LDkgQEAKICAgICAgICAgfQogICAgICAgICB0ZXN0U2V0cyh0LCBzZXRsaW5lcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoKLSAgICAgKiBGaWx0ZXIgb3V0IHNldCByZXF1ZXN0cyB0aGF0IGFyZSBrbm93biBub3Qgd29yay4gCisgICAgICogRmlsdGVyIG91dCBzZXQgcmVxdWVzdHMgdGhhdCBhcmUga25vd24gbm90IHdvcmsuCiAgICAgICogRW5jb2RlIHRoZSByZXF1ZXN0IGlmIG5lY2Vzc2FyeS4KICAgICAgKi8KICAgICBwcml2YXRlIFN0cmluZyBmaWx0ZXJTZXQoU3RyaW5nIGxpbmUpIHsKQEAgLTE0MCwxNCArMTQwLDE0IEBACiAgICAgICAgIGlmIChsaW5lLmNvbnRhaW5zKCJzZWN1cml0eS1jb25maWd1cmF0aW9ucyIpKSByZXR1cm4gbnVsbDsKIAogICAgICAgICAvLyBlc2NhcGUgdGhlICIuIiBpbiBzb21lIHByb3BlcnR5IG5hbWVzCi0gICAgICAgIGZpbmFsIFN0cmluZ1tdIGRvdHRlZHByb3BzID0geyAKLSAgICAgICAgICAgICJlbmNyeXB0aW9uLmtleS5hbGlhcyIsIAorICAgICAgICBmaW5hbCBTdHJpbmdbXSBkb3R0ZWRwcm9wcyA9IHsKKyAgICAgICAgICAgICJlbmNyeXB0aW9uLmtleS5hbGlhcyIsCiAgICAgICAgICAgICAic2lnbmF0dXJlLmtleS5hbGlhcyIsCiAgICAgICAgICAgICAiZHluYW1pYy51c2VybmFtZS5wYXNzd29yZCIsCiAgICAgICAgICAgICAic2VjdXJpdHkuY29uZmlnIiwKICAgICAgICAgICAgICJhZG1pbmlzdHJhdGl2ZS5kb21haW4ubmFtZSIsCiAgICAgICAgIH07Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAoU3RyaW5nIGRwIDogZG90dGVkcHJvcHMpIHsKICAgICAgICAgICAgIGlmIChsaW5lLmNvbnRhaW5zKGRwKSkgewogICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKGRwLCBkcC5yZXBsYWNlKCIuIiwgIlxcLiIpKTsKQEAgLTE1Nyw3ICsxNTcsNyBAQAogICAgICAgICByZXR1cm4gbGluZTsKIAogfQotICAgIC8qIAorICAgIC8qCiAgICAgICogVGVzdCBhIGxpc3Qgb2Ygc2V0IHJlcXVlc3RzIGJ5IHJ1bm5pbmcgYXNhZG1pbiBzZXQgcmVwZWF0ZWRseS4KICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgdGVzdFNldHMoU3RyaW5nIHRuYW1lLCBMaXN0PFN0cmluZz4gcmVxcykgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9JbnN0YW5jZVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vSW5zdGFuY2VUZXN0LmphdmEKaW5kZXggNDFkOTM4ZS4uNzU5OWVjOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9JbnN0YW5jZVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0luc3RhbmNlVGVzdC5qYXZhCkBAIC05NSwxMCArOTUsMTAgQEAKICAgICAgICAgdGVzdFJlbmRlenZvdXMoKTsKICAgICAgICAgdGVzdFVwZ3JhZGUoKTsKICAgICAgICAgdGVzdE5vZGUoKTsKLQl0ZXN0Q3JlYXRlSW5zdGFuY2VDb25maWdOb2RlKCk7CisgICAgdGVzdENyZWF0ZUluc3RhbmNlQ29uZmlnTm9kZSgpOwogICAgICAgICB0ZXN0UG9ydEJhc2UoKTsKICAgICAgICAgaW52YWxpZENvbmZpZ1JlZigpOwotICAgICAgICAKKwogICAgICAgICBpZighaXNIYWRhcygpKQogICAgICAgICAgICAgZGVsZXRlRGlyZWN0b3J5KG5vZGVEaXIpOwogCkBAIC0yNjgsNyArMjY4LDcgQEAKICAgICAgICAgcmV0ID0gYXNhZG1pbldpdGhPdXRwdXQoImdldCIsICJzZXJ2ZXJzLnNlcnZlci4iICsgaW5hbWUgKyAiLnN5c3RlbS1wcm9wZXJ0eS5wcm9wMS52YWx1ZSIpOwogICAgICAgICBzdWNjZXNzID0gcmV0Lm91dEFuZEVyci5pbmRleE9mKCJzZXJ2ZXJzLnNlcnZlci4iICsgaW5hbWUgKyAiLnN5c3RlbS1wcm9wZXJ0eS5wcm9wMS52YWx1ZT12YWxBIikgPj0gMDsKICAgICAgICAgcmVwb3J0KCJjcmVhdGUtaW5zdGFuY2UtcHJvcDF2YWx1ZSIsIHN1Y2Nlc3MpOwotICAgICAgICAKKwogICAgICAgICByZXQgPSBhc2FkbWluV2l0aE91dHB1dCgiZ2V0IiwgInNlcnZlcnMuc2VydmVyLiIgKyBpbmFtZSArICIuc3lzdGVtLXByb3BlcnR5LnByb3AzLm5hbWUiKTsKICAgICAgICAgc3VjY2VzcyA9IHJldC5vdXRBbmRFcnIuaW5kZXhPZigic2VydmVycy5zZXJ2ZXIuIiArIGluYW1lICsgIi5zeXN0ZW0tcHJvcGVydHkucHJvcDMubmFtZT1wcm9wMyIpID49IDA7CiAgICAgICAgIHJlcG9ydCgiY3JlYXRlLWluc3RhbmNlLXByb3AzbmFtZSIsIHN1Y2Nlc3MpOwpAQCAtMzA0LDcgKzMwNCw3IEBACiAgICAgICAgIHJlcG9ydCgiZGVsZXRlLWluc3RhbmNlLXJlZ2RhcyIsICFhc2FkbWluKCJnZXQiLCAic2VydmVycy5zZXJ2ZXIuIiArIGluYW1lKSk7CiAgICAgICAgIHJlcG9ydCgiZGVsZXRlLWluc3RhbmNlLWNvbmZpZyIsICFhc2FkbWluKCJnZXQiLCAiY29uZmlncy5jb25maWcuIiArIGluYW1lICsgIi1jb25maWciKSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZUFkbWluQ29tbWFuZEZhaWwoKSB7CiAgICAgICAgIHByaW50ZigiQ2FsbCByZW1vdGUgQWRtaW5Db21tYW5kIGNyZWF0ZS1pbnN0YW5jZSB3aXRoIGJhZCBwYXJhbXMiKTsKICAgICAgICAgU3RyaW5nIGluYW1lID0gImJhZGFwcGxlIjsKQEAgLTM2Miw3ICszNjIsNyBAQAogICAgICAgICBTdHJpbmcgbm9kZWRpciA9IGluc3RhbGxkaXIgKyBGaWxlLnNlcGFyYXRvciArICJteW5vZGVzIjsKICAgICAgICAgU3RyaW5nIG5vZGUgPSAibjEiOwogICAgICAgICBTdHJpbmcgaW5zdGFuY2UgPSAiaTEiOwotICAgICAgICAKKwogICAgICAgICByZXBvcnQoImNyZWF0ZS1sb2NhbC1pbnN0YW5jZS1ub3N1Y2hub2RlIiwgIWFzYWRtaW4oImNyZWF0ZS1sb2NhbC1pbnN0YW5jZSIsCiAgICAgICAgICAgICAiLS1ub2RlIiwgImJvZ3VzIiwgImJvZ3VzaW5zdGFuY2UiKSk7CiAKQEAgLTQ0MywxOCArNDQzLDE4IEBACiAgICAgICAgIC8vIHNlZSBKSVJBIGlzc3VlIDE2NTc5CiAgICAgICAgIFN0cmluZyBub2RlID0gInRlc3Qtbm9kZSI7CiAgICAgICAgIFN0cmluZyBpbnN0YW5jZSA9ICJ0ZXN0LWluc3RhbmNlIjsKLQlTdHJpbmcgdGVzdE5hbWUgPSAiY3JlYXRlLW5vZGUtY29uZmlnLW9mZmxpbmUiOworICAgIFN0cmluZyB0ZXN0TmFtZSA9ICJjcmVhdGUtbm9kZS1jb25maWctb2ZmbGluZSI7CiAKLQkvLyBDcmVhdGVzIGNvbmZpZyBub2RlIHdpdGhvdXQgdGhlIGluc3RhbGxkaXIKKyAgICAvLyBDcmVhdGVzIGNvbmZpZyBub2RlIHdpdGhvdXQgdGhlIGluc3RhbGxkaXIKICAgICAgICAgcmVwb3J0KHRlc3ROYW1lICsgIjAiLCBhc2FkbWluKCJjcmVhdGUtbm9kZS1jb25maWciLAotCQkiLS1ub2RlaG9zdCIsICJsb2NhbGhvc3QiLG5vZGUpKTsKLQlyZXBvcnQodGVzdE5hbWUrIjEiLCBhc2FkbWluKCJjcmVhdGUtaW5zdGFuY2UiLCAiLS1ub2RlIiwgbm9kZSwgaW5zdGFuY2UpKTsKLQkvLyBjaGVjayB0aGF0IGluc3RhbGxkaXIgd2FzIHNldCAKKyAgICAgICAgIi0tbm9kZWhvc3QiLCAibG9jYWxob3N0Iixub2RlKSk7CisgICAgcmVwb3J0KHRlc3ROYW1lKyIxIiwgYXNhZG1pbigiY3JlYXRlLWluc3RhbmNlIiwgIi0tbm9kZSIsIG5vZGUsIGluc3RhbmNlKSk7CisgICAgLy8gY2hlY2sgdGhhdCBpbnN0YWxsZGlyIHdhcyBzZXQKICAgICAgICAgcmVwb3J0KHRlc3ROYW1lKyIyIixhc2FkbWluKCJnZXQiLCAibm9kZXMubm9kZS4iICsgbm9kZSArICIuaW5zdGFsbC1kaXIiKSk7Ci0JCi0JLy9jbGVhbnVwCi0JcmVwb3J0KHRlc3ROYW1lICsiMyIsIGFzYWRtaW4oImRlbGV0ZS1pbnN0YW5jZSIsIGluc3RhbmNlICkpOwotCXJlcG9ydCh0ZXN0TmFtZSArIjQiLCBhc2FkbWluKCJkZWxldGUtbm9kZS1jb25maWciLCBub2RlICkpOworCisgICAgLy9jbGVhbnVwCisgICAgcmVwb3J0KHRlc3ROYW1lICsiMyIsIGFzYWRtaW4oImRlbGV0ZS1pbnN0YW5jZSIsIGluc3RhbmNlICkpOworICAgIHJlcG9ydCh0ZXN0TmFtZSArIjQiLCBhc2FkbWluKCJkZWxldGUtbm9kZS1jb25maWciLCBub2RlICkpOwogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0phdmFNYWlsUmVzb3VyY2VUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0phdmFNYWlsUmVzb3VyY2VUZXN0LmphdmEKaW5kZXggNWU5NTg4OC4uYjI3NjZkMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9KYXZhTWFpbFJlc291cmNlVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vSmF2YU1haWxSZXNvdXJjZVRlc3QuamF2YQpAQCAtMjg3LDcgKzI4Nyw3IEBACiAgICAgICAgIHJlcG9ydFJlc3VsdFN0YXR1cyh0ZXN0TmFtZSwgcmVzdWx0KTsKICAgICAgICAgLy9yZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCBTVEFOREFMT05FX0lOU1RBTkNFX05BTUUsIElOU1RBTkNFMV9OQU1FLCBJTlNUQU5DRTJfTkFNRSk7CiAgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJNYWlsIHJlc291cmNlIHJlc291cmNlLTEgZGVsZXRlZC4iKTsKLQkvKkNvbW1lbnRpbmcgb3V0IHRoZSBmYWlsZWQgdGVzdCwgY2FuIGJlIHVuY29tbWVudGVkIGFmdGVyIGZpeGluZyBHbGFzc2Zpc2ggSXNzdWUgMjE3NzQgKi8KKyAgICAvKkNvbW1lbnRpbmcgb3V0IHRoZSBmYWlsZWQgdGVzdCwgY2FuIGJlIHVuY29tbWVudGVkIGFmdGVyIGZpeGluZyBHbGFzc2Zpc2ggSXNzdWUgMjE3NzQgKi8KICAgICAgICAgLy9yZXBvcnRVbmV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsIFNFUlZFUiwgQ0xVU1RFUl9OQU1FKTsKICAgICB9CiAKQEAgLTI5Nyw3ICsyOTcsNyBAQAogICAgICAgICByZXBvcnRSZXN1bHRTdGF0dXModGVzdE5hbWUsIHJlc3VsdCk7CiAgICAgICAgIC8vcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgSU5TVEFOQ0UxX05BTUUsIElOU1RBTkNFMl9OQU1FLCBTVEFOREFMT05FX0lOU1RBTkNFX05BTUUpOwogICAgICAgICByZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAiTWFpbCByZXNvdXJjZSByZXNvdXJjZS0xIGRlbGV0ZWQuIik7Ci0JLypDb21tZW50aW5nIG91dCB0aGUgZmFpbGVkIHRlc3QsIGNhbiBiZSB1bmNvbW1lbnRlZCBhZnRlciBmaXhpbmcgR2xhc3NmaXNoIElzc3VlIDIxNzc0ICovCisgICAgLypDb21tZW50aW5nIG91dCB0aGUgZmFpbGVkIHRlc3QsIGNhbiBiZSB1bmNvbW1lbnRlZCBhZnRlciBmaXhpbmcgR2xhc3NmaXNoIElzc3VlIDIxNzc0ICovCiAgICAgICAgIC8vcmVwb3J0VW5leHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCBTRVJWRVIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9KZGJjUmVzb3VyY2VUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0pkYmNSZXNvdXJjZVRlc3QuamF2YQppbmRleCBiYjE1MzUxLi4wODI2YTA2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0pkYmNSZXNvdXJjZVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0pkYmNSZXNvdXJjZVRlc3QuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogICovCiBwdWJsaWMgY2xhc3MgSmRiY1Jlc291cmNlVGVzdCBleHRlbmRzIEFkbWluQmFzZURldlRlc3QgewogCi0gICAgLy9UT0RPIHRlc3QtY2FzZSBmb3IgSVQgMTI2MTQgCisgICAgLy9UT0RPIHRlc3QtY2FzZSBmb3IgSVQgMTI2MTQKIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENMVVNURVJfTkFNRSA9ICJjbHVzdGVyMSI7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5TVEFOQ0UxX05BTUUgPSAiaW5zdGFuY2UxIjsKQEAgLTM1Miw3ICszNTIsNyBAQAogICAgICAgICByZXBvcnRSZXN1bHRTdGF0dXModGVzdE5hbWUsIHJlc3VsdCk7CiAgICAgICAgIC8vcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgSU5TVEFOQ0UxX05BTUUsIElOU1RBTkNFMl9OQU1FKTsKICAgICAgICAgcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgIkpEQkMgcmVzb3VyY2UgcmVzb3VyY2UtMSBkZWxldGVkIHN1Y2Nlc3NmdWxseSIpOwotCS8qQ29tbWVudGluZyBvdXQgdGhlIGZhaWxlZCB0ZXN0LCBjYW4gYmUgdW5jb21tZW50ZWQgYWZ0ZXIgZml4aW5nIEdsYXNzZmlzaCBJc3N1ZSAyMTc3NCAqLworICAgIC8qQ29tbWVudGluZyBvdXQgdGhlIGZhaWxlZCB0ZXN0LCBjYW4gYmUgdW5jb21tZW50ZWQgYWZ0ZXIgZml4aW5nIEdsYXNzZmlzaCBJc3N1ZSAyMTc3NCAqLwogICAgICAgICAvL3JlcG9ydFVuZXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgU1RBTkRBTE9ORV9JTlNUQU5DRV9OQU1FKTsKICAgICB9CiAKQEAgLTQwMCw3ICs0MDAsNyBAQAogICAgICAgICByZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0KTsKICAgICAgICAgLy9yZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCBJTlNUQU5DRTJfTkFNRSwgSU5TVEFOQ0UxX05BTUUpOwogICAgICAgICByZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAiSkRCQyByZXNvdXJjZSByZXNvdXJjZS0xIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LiIpOwotCS8qQ29tbWVudGluZyBvdXQgdGhlIGZhaWxlZCB0ZXN0LCBjYW4gYmUgdW5jb21tZW50ZWQgYWZ0ZXIgZml4aW5nIEdsYXNzZmlzaCBJc3N1ZSAyMTc3NCAqLworICAgIC8qQ29tbWVudGluZyBvdXQgdGhlIGZhaWxlZCB0ZXN0LCBjYW4gYmUgdW5jb21tZW50ZWQgYWZ0ZXIgZml4aW5nIEdsYXNzZmlzaCBJc3N1ZSAyMTc3NCAqLwogICAgICAgICAvL3JlcG9ydFVuZXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgU1RBTkRBTE9ORV9JTlNUQU5DRV9OQU1FKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vTEJDb21tYW5kc1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vTEJDb21tYW5kc1Rlc3QuamF2YQppbmRleCA2Mzk1MGYxLi5lMTdiNWE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0xCQ29tbWFuZHNUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9MQkNvbW1hbmRzVGVzdC5qYXZhCkBAIC0zMTYsNyArMzE2LDcgQEAKIAogICAgICAgICBkZWxldGVJbnN0YW5jZXMoKTsKICAgICAgICAgYXNhZG1pbigic3RvcC1kb21haW4iKTsKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vTG9nZ2luZ0NvbW1hbmRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0xvZ2dpbmdDb21tYW5kVGVzdC5qYXZhCmluZGV4IGM0OGJhNzUuLjcwYzE0MWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vTG9nZ2luZ0NvbW1hbmRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9Mb2dnaW5nQ29tbWFuZFRlc3QuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogICovCiBwdWJsaWMgY2xhc3MgTG9nZ2luZ0NvbW1hbmRUZXN0IGV4dGVuZHMgQWRtaW5CYXNlRGV2VGVzdCB7CiAKLSAgICAvL1RPRE8gdGVzdC1jYXNlIGZvciBJVCAxMjYxNCAKKyAgICAvL1RPRE8gdGVzdC1jYXNlIGZvciBJVCAxMjYxNAogCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0xVU1RFUl9OQU1FID0gImNsdXN0ZXIxIjsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTlNUQU5DRTFfTkFNRSA9ICJpbnN0YW5jZTEiOwpAQCAtMzAsMTYgKzMwLDE2IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VUX0xPR19MRVZFTCA9ICJzZXQtbG9nLWxldmVscyI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFVF9MT0dfQVRUUklCVVRFID0gInNldC1sb2ctYXR0cmlidXRlcyI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExJU1RfTE9HX0FUVFJJQlVURSA9ICJsaXN0LWxvZy1hdHRyaWJ1dGVzIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTElTVF9MT0dfTEVWRUwgPSAibGlzdC1sb2ctbGV2ZWxzIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09MTEVDVF9MT0dfRklMRVMgPSAiY29sbGVjdC1sb2ctZmlsZXMiOwotICAgIAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQVJHRVRfT1BUSU9OID0gIi0tdGFyZ2V0IjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFDS0FHRV9OQU1FID0ibG9nZ2luZy5jb21tYW5kLnRlc3Q9SU5GTyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExJU1RfTE9HX0FUVFJJQlVURSA9ICJsaXN0LWxvZy1hdHRyaWJ1dGVzIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTElTVF9MT0dfTEVWRUwgPSAibGlzdC1sb2ctbGV2ZWxzIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09MTEVDVF9MT0dfRklMRVMgPSAiY29sbGVjdC1sb2ctZmlsZXMiOwogCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJJQlVURV9OQU1FID0iamF2YS51dGlsLmxvZ2dpbmcuRmlsZUhhbmRsZXIuY291bnQ9MTAiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQVJHRVRfT1BUSU9OID0gIi0tdGFyZ2V0IjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFDS0FHRV9OQU1FID0ibG9nZ2luZy5jb21tYW5kLnRlc3Q9SU5GTyI7CiAKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VSVkVSID0gInNlcnZlciI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJJQlVURV9OQU1FID0iamF2YS51dGlsLmxvZ2dpbmcuRmlsZUhhbmRsZXIuY291bnQ9MTAiOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZFUiA9ICJzZXJ2ZXIiOwogCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBFWFBFQ1RFRF9UT0tFTlMgPSB7UEFDS0FHRV9OQU1FfTsKIApAQCAtNDksNyArNDksNyBAQAogICAgICAgICBuZXcgTG9nZ2luZ0NvbW1hbmRUZXN0KCkucnVuVGVzdHMoKTsKICAgICB9CiAKLQlAT3ZlcnJpZGUKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3ROYW1lKCkgewogICAgICAgICByZXR1cm4gIkxvZ2dpbmciOwogICAgIH0KQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgICAgIGFzYWRtaW4oInN0b3AtbG9jYWwtaW5zdGFuY2UiLCBJTlNUQU5DRTFfTkFNRSk7CiAgICAgICAgICAgICBhc2FkbWluKCJzdG9wLWxvY2FsLWluc3RhbmNlIiwgSU5TVEFOQ0UyX05BTUUpOwogICAgICAgICAgICAgYXNhZG1pbigic3RvcC1jbHVzdGVyIiwgQ0xVU1RFUl9OQU1FKTsKLQkJCWFzYWRtaW4oImRlbGV0ZS1sb2NhbC1pbnN0YW5jZSIsIFNUQU5EQUxPTkVfSU5TVEFOQ0VfTkFNRSk7ICAgICAgICAgICAgCisgICAgICAgICAgICBhc2FkbWluKCJkZWxldGUtbG9jYWwtaW5zdGFuY2UiLCBTVEFOREFMT05FX0lOU1RBTkNFX05BTUUpOwogICAgICAgICAgICAgYXNhZG1pbigiZGVsZXRlLWxvY2FsLWluc3RhbmNlIiwgSU5TVEFOQ0UxX05BTUUpOwogICAgICAgICAgICAgYXNhZG1pbigiZGVsZXRlLWxvY2FsLWluc3RhbmNlIiwgSU5TVEFOQ0UyX05BTUUpOwogICAgICAgICAgICAgYXNhZG1pbigiZGVsZXRlLWNsdXN0ZXIiLCBDTFVTVEVSX05BTUUpOwpAQCAtNzcsOCArNzcsOCBAQAogCiAgICAgcHVibGljIHZvaWQgcnVuVGVzdHMoKSB7CiAgICAgICAgIHN0YXJ0RG9tYWluKCk7Ci0gICAgICAgIAotCQlhc2FkbWluKCJjcmVhdGUtY2x1c3RlciIsIENMVVNURVJfTkFNRSk7CisKKyAgICAgICAgYXNhZG1pbigiY3JlYXRlLWNsdXN0ZXIiLCBDTFVTVEVSX05BTUUpOwogCiAgICAgICAgIGFzYWRtaW4oImNyZWF0ZS1sb2NhbC1pbnN0YW5jZSIsICItLWNsdXN0ZXIiLCBDTFVTVEVSX05BTUUsCiAgICAgICAgICAgICAgICAgLyoiLS1ub2RlIiwgImxvY2FsaG9zdCIsKi8gIi0tc3lzdGVtcHJvcGVydGllcyIsCkBAIC05OCwzOSArOTgsMzkgQEAKICAgICAgICAgYXNhZG1pbigic3RhcnQtY2x1c3RlciIsIENMVVNURVJfTkFNRSk7CiAgICAgICAgIGFzYWRtaW4oInN0YXJ0LWxvY2FsLWluc3RhbmNlIiwgU1RBTkRBTE9ORV9JTlNUQU5DRV9OQU1FKTsKIAotCQl0ZXN0U2V0TG9nTGV2ZWxJblNlcnZlcigpOworICAgICAgICB0ZXN0U2V0TG9nTGV2ZWxJblNlcnZlcigpOwogICAgICAgICB0ZXN0U2V0TG9nTGV2ZWxJbkNsdXN0ZXIoKTsKICAgICAgICAgdGVzdFNldExvZ0xldmVsSW5TdGFuZGFsb25lSW5zdGFuY2UoKTsKICAgICAgICAgdGVzdFNldExvZ0xldmVsSW5TZXJ2ZXJDb25maWcoKTsKICAgICAgICAgdGVzdFNldExvZ0xldmVsSW5DbHVzdGVyQ29uZmlnKCk7CiAgICAgICAgIHRlc3RTZXRMb2dMZXZlbEluU3RhbmRhbG9uZUluc3RhbmNlQ29uZmlnKCk7Ci0JCQotCQl0ZXN0U2V0TG9nQXR0cmlidXRlSW5TZXJ2ZXIoKTsKKworICAgICAgICB0ZXN0U2V0TG9nQXR0cmlidXRlSW5TZXJ2ZXIoKTsKICAgICAgICAgdGVzdFNldExvZ0F0dHJpYnV0ZUluQ2x1c3RlcigpOwogICAgICAgICB0ZXN0U2V0TG9nQXR0cmlidXRlSW5TdGFuZGFsb25lSW5zdGFuY2UoKTsKICAgICAgICAgdGVzdFNldExvZ0F0dHJpYnV0ZUluU2VydmVyQ29uZmlnKCk7CiAgICAgICAgIHRlc3RTZXRMb2dBdHRyaWJ1dGVJbkNsdXN0ZXJDb25maWcoKTsKICAgICAgICAgdGVzdFNldExvZ0F0dHJpYnV0ZUluU3RhbmRhbG9uZUluc3RhbmNlQ29uZmlnKCk7CiAKLQkJdGVzdExpc3RMb2dBdHRyaWJ1dGVJblNlcnZlcigpOwotCQl0ZXN0TGlzdExvZ0F0dHJpYnV0ZUluU2VydmVyKCk7CisgICAgICAgIHRlc3RMaXN0TG9nQXR0cmlidXRlSW5TZXJ2ZXIoKTsKKyAgICAgICAgdGVzdExpc3RMb2dBdHRyaWJ1dGVJblNlcnZlcigpOwogICAgICAgICB0ZXN0TGlzdExvZ0F0dHJpYnV0ZUluQ2x1c3RlcigpOwogICAgICAgICB0ZXN0TGlzdExvZ0F0dHJpYnV0ZUluU3RhbmRhbG9uZUluc3RhbmNlKCk7CiAgICAgICAgIHRlc3RMaXN0TG9nQXR0cmlidXRlSW5TZXJ2ZXJDb25maWcoKTsKICAgICAgICAgdGVzdExpc3RMb2dBdHRyaWJ1dGVJbkNsdXN0ZXJDb25maWcoKTsKICAgICAgICAgdGVzdExpc3RMb2dBdHRyaWJ1dGVJblN0YW5kYWxvbmVJbnN0YW5jZUNvbmZpZygpOwogCi0JCXRlc3RMaXN0TG9nTGV2bGVJblNlcnZlcigpOwotCQl0ZXN0TGlzdExvZ0xldmxlSW5TZXJ2ZXIoKTsKKyAgICAgICAgdGVzdExpc3RMb2dMZXZsZUluU2VydmVyKCk7CisgICAgICAgIHRlc3RMaXN0TG9nTGV2bGVJblNlcnZlcigpOwogICAgICAgICB0ZXN0TGlzdExvZ0xldmxlSW5DbHVzdGVyKCk7CiAgICAgICAgIHRlc3RMaXN0TG9nTGV2bGVJblN0YW5kYWxvbmVJbnN0YW5jZSgpOwogICAgICAgICB0ZXN0TGlzdExvZ0xldmxlSW5TZXJ2ZXJDb25maWcoKTsKICAgICAgICAgdGVzdExpc3RMb2dMZXZsZUluQ2x1c3RlckNvbmZpZygpOwogICAgICAgICB0ZXN0TGlzdExvZ0xldmxlSW5TdGFuZGFsb25lSW5zdGFuY2VDb25maWcoKTsKIAotCQl0ZXN0Q29sbGVjdExvZ0ZpbGVzSW5TZXJ2ZXIoKTsKLQkJdGVzdENvbGxlY3RMb2dGaWxlc0luQ2x1c3RlcigpOwkKLQkJdGVzdENvbGxlY3RMb2dGaWxlc1N0YW5kYWxvbmVJbnN0YW5jZSgpOworICAgICAgICB0ZXN0Q29sbGVjdExvZ0ZpbGVzSW5TZXJ2ZXIoKTsKKyAgICAgICAgdGVzdENvbGxlY3RMb2dGaWxlc0luQ2x1c3RlcigpOworICAgICAgICB0ZXN0Q29sbGVjdExvZ0ZpbGVzU3RhbmRhbG9uZUluc3RhbmNlKCk7CiAKICAgICAgICAgY2xlYW51cCgpOwogICAgICAgICBzdG9wRG9tYWluKCk7CkBAIC0xNTgsNyArMTU4LDcgQEAKICAgICAgICAgcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgU0VSVkVSICk7CiAgICAgfQogCi0JIHByaXZhdGUgdm9pZCB0ZXN0U2V0TG9nTGV2ZWxJbkNsdXN0ZXJDb25maWcoKSB7CisgICAgIHByaXZhdGUgdm9pZCB0ZXN0U2V0TG9nTGV2ZWxJbkNsdXN0ZXJDb25maWcoKSB7CiAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9ICJ0ZXN0U2V0TG9nTGV2ZWxJbkNsdXN0ZXJDb25maWciOwogICAgICAgICBBc2FkbWluUmV0dXJuIHJlc3VsdCA9IGFzYWRtaW5XaXRoT3V0cHV0KFNFVF9MT0dfTEVWRUwsVEFSR0VUX09QVElPTiwgQ0xVU1RFUl9OQU1FKyItY29uZmlnIiwgUEFDS0FHRV9OQU1FKTsKICAgICAgICAgcmVwb3J0UmVzdWx0U3RhdHVzKHRlc3ROYW1lLCByZXN1bHQpOwpAQCAtMTgwLDcgKzE4MCw3IEBACiAgICAgfQogCiAKLQlwcml2YXRlIHZvaWQgdGVzdFNldExvZ0F0dHJpYnV0ZUluQ2x1c3RlcigpIHsKKyAgICBwcml2YXRlIHZvaWQgdGVzdFNldExvZ0F0dHJpYnV0ZUluQ2x1c3RlcigpIHsKICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gInRlc3RTZXRMb2dBdHRyaWJ1dGVJbkNsdXN0ZXIiOwogICAgICAgICBBc2FkbWluUmV0dXJuIHJlc3VsdCA9IGFzYWRtaW5XaXRoT3V0cHV0KFNFVF9MT0dfQVRUUklCVVRFLFRBUkdFVF9PUFRJT04sIENMVVNURVJfTkFNRSwgQVRUUklCVVRFX05BTUUpOwogICAgICAgICByZXBvcnRSZXN1bHRTdGF0dXModGVzdE5hbWUsIHJlc3VsdCk7CkBAIC0yMDEsNyArMjAxLDcgQEAKICAgICAgICAgcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgU0VSVkVSICk7CiAgICAgfQogCi0JIHByaXZhdGUgdm9pZCB0ZXN0U2V0TG9nQXR0cmlidXRlSW5DbHVzdGVyQ29uZmlnKCkgeworICAgICBwcml2YXRlIHZvaWQgdGVzdFNldExvZ0F0dHJpYnV0ZUluQ2x1c3RlckNvbmZpZygpIHsKICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gInRlc3RTZXRMb2dBdHRyaWJ1dGVJbkNsdXN0ZXJDb25maWciOwogICAgICAgICBBc2FkbWluUmV0dXJuIHJlc3VsdCA9IGFzYWRtaW5XaXRoT3V0cHV0KFNFVF9MT0dfQVRUUklCVVRFLFRBUkdFVF9PUFRJT04sIENMVVNURVJfTkFNRSsiLWNvbmZpZyIsIEFUVFJJQlVURV9OQU1FKTsKICAgICAgICAgcmVwb3J0UmVzdWx0U3RhdHVzKHRlc3ROYW1lLCByZXN1bHQpOwpAQCAtMjIyLDk0ICsyMjIsOTQgQEAKICAgICAgICAgcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgU0VSVkVSICk7CiAgICAgfQogCi0JcHJpdmF0ZSB2b2lkIHRlc3RMaXN0TG9nQXR0cmlidXRlSW5TZXJ2ZXIoKXsKKyAgICBwcml2YXRlIHZvaWQgdGVzdExpc3RMb2dBdHRyaWJ1dGVJblNlcnZlcigpewogICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSAidGVzdExpc3RMb2dBdHRyaWJ1dGVJblNlcnZlciI7CiAgICAgICAgIEFzYWRtaW5SZXR1cm4gcmVzdWx0ID0gYXNhZG1pbldpdGhPdXRwdXQoTElTVF9MT0dfQVRUUklCVVRFLCBTRVJWRVIpOwotCQlyZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAibG9nNGoubG9nZ2VyLm9yZy5oaWJlcm5hdGUudmFsaWRhdG9yLnV0aWwuVmVyc2lvbiIpOyAgICAgICAgCisgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJsb2c0ai5sb2dnZXIub3JnLmhpYmVybmF0ZS52YWxpZGF0b3IudXRpbC5WZXJzaW9uIik7CiAgICAgfQogCi0JcHJpdmF0ZSB2b2lkIHRlc3RMaXN0TG9nQXR0cmlidXRlSW5DbHVzdGVyKCl7CisgICAgcHJpdmF0ZSB2b2lkIHRlc3RMaXN0TG9nQXR0cmlidXRlSW5DbHVzdGVyKCl7CiAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9ICJ0ZXN0TGlzdExvZ0F0dHJpYnV0ZUluQ2x1c3RlciI7CiAgICAgICAgIEFzYWRtaW5SZXR1cm4gcmVzdWx0ID0gYXNhZG1pbldpdGhPdXRwdXQoTElTVF9MT0dfQVRUUklCVVRFLCBDTFVTVEVSX05BTUUpOwotCQlyZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAibG9nNGoubG9nZ2VyLm9yZy5oaWJlcm5hdGUudmFsaWRhdG9yLnV0aWwuVmVyc2lvbiIpOyAgICAgICAgCisgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJsb2c0ai5sb2dnZXIub3JnLmhpYmVybmF0ZS52YWxpZGF0b3IudXRpbC5WZXJzaW9uIik7CiAgICAgfQogCi0JcHJpdmF0ZSB2b2lkIHRlc3RMaXN0TG9nQXR0cmlidXRlSW5TdGFuZGFsb25lSW5zdGFuY2UoKXsKKyAgICBwcml2YXRlIHZvaWQgdGVzdExpc3RMb2dBdHRyaWJ1dGVJblN0YW5kYWxvbmVJbnN0YW5jZSgpewogICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSAidGVzdExpc3RMb2dBdHRyaWJ1dGVJblN0YW5kYWxvbmVJbnN0YW5jZSI7CiAgICAgICAgIEFzYWRtaW5SZXR1cm4gcmVzdWx0ID0gYXNhZG1pbldpdGhPdXRwdXQoTElTVF9MT0dfQVRUUklCVVRFLCBTVEFOREFMT05FX0lOU1RBTkNFX05BTUUpOwotCQlyZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAibG9nNGoubG9nZ2VyLm9yZy5oaWJlcm5hdGUudmFsaWRhdG9yLnV0aWwuVmVyc2lvbiIpOyAgICAgICAgCisgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJsb2c0ai5sb2dnZXIub3JnLmhpYmVybmF0ZS52YWxpZGF0b3IudXRpbC5WZXJzaW9uIik7CiAgICAgfQogCi0JcHJpdmF0ZSB2b2lkIHRlc3RMaXN0TG9nQXR0cmlidXRlSW5TZXJ2ZXJDb25maWcoKXsKKyAgICBwcml2YXRlIHZvaWQgdGVzdExpc3RMb2dBdHRyaWJ1dGVJblNlcnZlckNvbmZpZygpewogICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSAidGVzdExpc3RMb2dBdHRyaWJ1dGVJblNlcnZlckNvbmZpZyI7CiAgICAgICAgIEFzYWRtaW5SZXR1cm4gcmVzdWx0ID0gYXNhZG1pbldpdGhPdXRwdXQoTElTVF9MT0dfQVRUUklCVVRFLCBTRVJWRVIrIi1jb25maWciKTsKLQkJcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgImxvZzRqLmxvZ2dlci5vcmcuaGliZXJuYXRlLnZhbGlkYXRvci51dGlsLlZlcnNpb24iKTsgICAgICAgIAorICAgICAgICByZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAibG9nNGoubG9nZ2VyLm9yZy5oaWJlcm5hdGUudmFsaWRhdG9yLnV0aWwuVmVyc2lvbiIpOwogICAgIH0KIAotCXByaXZhdGUgdm9pZCB0ZXN0TGlzdExvZ0F0dHJpYnV0ZUluQ2x1c3RlckNvbmZpZygpeworICAgIHByaXZhdGUgdm9pZCB0ZXN0TGlzdExvZ0F0dHJpYnV0ZUluQ2x1c3RlckNvbmZpZygpewogICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSAidGVzdExpc3RMb2dBdHRyaWJ1dGVJbkNsdXN0ZXJDb25maWciOwogICAgICAgICBBc2FkbWluUmV0dXJuIHJlc3VsdCA9IGFzYWRtaW5XaXRoT3V0cHV0KExJU1RfTE9HX0FUVFJJQlVURSwgQ0xVU1RFUl9OQU1FKyItY29uZmlnIik7Ci0JCXJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJsb2c0ai5sb2dnZXIub3JnLmhpYmVybmF0ZS52YWxpZGF0b3IudXRpbC5WZXJzaW9uIik7ICAgICAgICAKKyAgICAgICAgcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgImxvZzRqLmxvZ2dlci5vcmcuaGliZXJuYXRlLnZhbGlkYXRvci51dGlsLlZlcnNpb24iKTsKICAgICB9CiAKLQlwcml2YXRlIHZvaWQgdGVzdExpc3RMb2dBdHRyaWJ1dGVJblN0YW5kYWxvbmVJbnN0YW5jZUNvbmZpZygpeworICAgIHByaXZhdGUgdm9pZCB0ZXN0TGlzdExvZ0F0dHJpYnV0ZUluU3RhbmRhbG9uZUluc3RhbmNlQ29uZmlnKCl7CiAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9ICJ0ZXN0TGlzdExvZ0F0dHJpYnV0ZUluU3RhbmRhbG9uZUluc3RhbmNlQ29uZmlnIjsKICAgICAgICAgQXNhZG1pblJldHVybiByZXN1bHQgPSBhc2FkbWluV2l0aE91dHB1dChMSVNUX0xPR19BVFRSSUJVVEUsIFNUQU5EQUxPTkVfSU5TVEFOQ0VfTkFNRSsiLWNvbmZpZyIpOwotCQlyZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAibG9nNGoubG9nZ2VyLm9yZy5oaWJlcm5hdGUudmFsaWRhdG9yLnV0aWwuVmVyc2lvbiIpOyAgICAgICAgCisgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJsb2c0ai5sb2dnZXIub3JnLmhpYmVybmF0ZS52YWxpZGF0b3IudXRpbC5WZXJzaW9uIik7CiAgICAgfQogCi0JcHJpdmF0ZSB2b2lkIHRlc3RMaXN0TG9nTGV2bGVJblNlcnZlcigpeworICAgIHByaXZhdGUgdm9pZCB0ZXN0TGlzdExvZ0xldmxlSW5TZXJ2ZXIoKXsKICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gInRlc3RMaXN0TG9nTGV2bGVJblNlcnZlciI7CiAgICAgICAgIEFzYWRtaW5SZXR1cm4gcmVzdWx0ID0gYXNhZG1pbldpdGhPdXRwdXQoTElTVF9MT0dfTEVWRUwsIFNFUlZFUik7Ci0JCXJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJqYWthcnRhLmVudGVycHJpc2Uuc3lzdGVtLnNzbC5zZWN1cml0eSIsImphdmEudXRpbC5sb2dnaW5nLkNvbnNvbGVIYW5kbGVyIik7ICAgICAgICAKKyAgICAgICAgcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgImpha2FydGEuZW50ZXJwcmlzZS5zeXN0ZW0uc3NsLnNlY3VyaXR5IiwiamF2YS51dGlsLmxvZ2dpbmcuQ29uc29sZUhhbmRsZXIiKTsKICAgICB9CiAKLQlwcml2YXRlIHZvaWQgdGVzdExpc3RMb2dMZXZsZUluQ2x1c3RlcigpeworICAgIHByaXZhdGUgdm9pZCB0ZXN0TGlzdExvZ0xldmxlSW5DbHVzdGVyKCl7CiAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9ICJ0ZXN0TGlzdExvZ0xldmxlSW5DbHVzdGVyIjsKICAgICAgICAgQXNhZG1pblJldHVybiByZXN1bHQgPSBhc2FkbWluV2l0aE91dHB1dChMSVNUX0xPR19MRVZFTCwgQ0xVU1RFUl9OQU1FKTsKLQkJcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgImpha2FydGEuZW50ZXJwcmlzZS5zeXN0ZW0uc3NsLnNlY3VyaXR5IiwiamF2YS51dGlsLmxvZ2dpbmcuQ29uc29sZUhhbmRsZXIiKTsgICAgICAgIAorICAgICAgICByZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAiamFrYXJ0YS5lbnRlcnByaXNlLnN5c3RlbS5zc2wuc2VjdXJpdHkiLCJqYXZhLnV0aWwubG9nZ2luZy5Db25zb2xlSGFuZGxlciIpOwogICAgIH0KIAotCXByaXZhdGUgdm9pZCB0ZXN0TGlzdExvZ0xldmxlSW5TdGFuZGFsb25lSW5zdGFuY2UoKXsKKyAgICBwcml2YXRlIHZvaWQgdGVzdExpc3RMb2dMZXZsZUluU3RhbmRhbG9uZUluc3RhbmNlKCl7CiAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9ICJ0ZXN0TGlzdExvZ0xldmxlSW5TdGFuZGFsb25lSW5zdGFuY2UiOwogICAgICAgICBBc2FkbWluUmV0dXJuIHJlc3VsdCA9IGFzYWRtaW5XaXRoT3V0cHV0KExJU1RfTE9HX0xFVkVMLCBTVEFOREFMT05FX0lOU1RBTkNFX05BTUUpOwotCQlyZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAiamFrYXJ0YS5lbnRlcnByaXNlLnN5c3RlbS5zc2wuc2VjdXJpdHkiLCJqYXZhLnV0aWwubG9nZ2luZy5Db25zb2xlSGFuZGxlciIpOyAgICAgICAgCisgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJqYWthcnRhLmVudGVycHJpc2Uuc3lzdGVtLnNzbC5zZWN1cml0eSIsImphdmEudXRpbC5sb2dnaW5nLkNvbnNvbGVIYW5kbGVyIik7CiAgICAgfQogCi0JcHJpdmF0ZSB2b2lkIHRlc3RMaXN0TG9nTGV2bGVJblNlcnZlckNvbmZpZygpeworICAgIHByaXZhdGUgdm9pZCB0ZXN0TGlzdExvZ0xldmxlSW5TZXJ2ZXJDb25maWcoKXsKICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gInRlc3RMaXN0TG9nTGV2bGVJblNlcnZlckNvbmZpZyI7CiAgICAgICAgIEFzYWRtaW5SZXR1cm4gcmVzdWx0ID0gYXNhZG1pbldpdGhPdXRwdXQoTElTVF9MT0dfTEVWRUwsIFNFUlZFUisiLWNvbmZpZyIpOwotCQlyZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAiamFrYXJ0YS5lbnRlcnByaXNlLnN5c3RlbS5zc2wuc2VjdXJpdHkiLCJqYXZhLnV0aWwubG9nZ2luZy5Db25zb2xlSGFuZGxlciIpOyAgICAgICAgCisgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJqYWthcnRhLmVudGVycHJpc2Uuc3lzdGVtLnNzbC5zZWN1cml0eSIsImphdmEudXRpbC5sb2dnaW5nLkNvbnNvbGVIYW5kbGVyIik7CiAgICAgfQogCi0JcHJpdmF0ZSB2b2lkIHRlc3RMaXN0TG9nTGV2bGVJbkNsdXN0ZXJDb25maWcoKXsKKyAgICBwcml2YXRlIHZvaWQgdGVzdExpc3RMb2dMZXZsZUluQ2x1c3RlckNvbmZpZygpewogICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSAidGVzdExpc3RMb2dMZXZsZUluQ2x1c3RlckNvbmZpZyI7CiAgICAgICAgIEFzYWRtaW5SZXR1cm4gcmVzdWx0ID0gYXNhZG1pbldpdGhPdXRwdXQoTElTVF9MT0dfTEVWRUwsIENMVVNURVJfTkFNRSsiLWNvbmZpZyIpOwotCQlyZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAiamFrYXJ0YS5lbnRlcnByaXNlLnN5c3RlbS5zc2wuc2VjdXJpdHkiLCJqYXZhLnV0aWwubG9nZ2luZy5Db25zb2xlSGFuZGxlciIpOyAgICAgICAgCisgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJqYWthcnRhLmVudGVycHJpc2Uuc3lzdGVtLnNzbC5zZWN1cml0eSIsImphdmEudXRpbC5sb2dnaW5nLkNvbnNvbGVIYW5kbGVyIik7CiAgICAgfQogCi0JcHJpdmF0ZSB2b2lkIHRlc3RMaXN0TG9nTGV2bGVJblN0YW5kYWxvbmVJbnN0YW5jZUNvbmZpZygpeworICAgIHByaXZhdGUgdm9pZCB0ZXN0TGlzdExvZ0xldmxlSW5TdGFuZGFsb25lSW5zdGFuY2VDb25maWcoKXsKICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gInRlc3RMaXN0TG9nTGV2bGVJblN0YW5kYWxvbmVJbnN0YW5jZUNvbmZpZyI7CiAgICAgICAgIEFzYWRtaW5SZXR1cm4gcmVzdWx0ID0gYXNhZG1pbldpdGhPdXRwdXQoTElTVF9MT0dfTEVWRUwsIFNUQU5EQUxPTkVfSU5TVEFOQ0VfTkFNRSsiLWNvbmZpZyIpOwotCQlyZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAiamFrYXJ0YS5lbnRlcnByaXNlLnN5c3RlbS5zc2wuc2VjdXJpdHkiLCJqYXZhLnV0aWwubG9nZ2luZy5Db25zb2xlSGFuZGxlciIpOyAgICAgICAgCisgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJqYWthcnRhLmVudGVycHJpc2Uuc3lzdGVtLnNzbC5zZWN1cml0eSIsImphdmEudXRpbC5sb2dnaW5nLkNvbnNvbGVIYW5kbGVyIik7CiAgICAgfQogCi0JcHJpdmF0ZSB2b2lkIHRlc3RDb2xsZWN0TG9nRmlsZXNJblNlcnZlcigpeworICAgIHByaXZhdGUgdm9pZCB0ZXN0Q29sbGVjdExvZ0ZpbGVzSW5TZXJ2ZXIoKXsKICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gInRlc3RDb2xsZWN0TG9nRmlsZXNJblNlcnZlciI7CiAgICAgICAgIEFzYWRtaW5SZXR1cm4gcmVzdWx0ID0gYXNhZG1pbldpdGhPdXRwdXQoQ09MTEVDVF9MT0dfRklMRVMsVEFSR0VUX09QVElPTiwgU0VSVkVSKTsKLQkJcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgIkNyZWF0ZWQgWmlwIGZpbGUgdW5kZXIiKTsgICAgICAgIAorICAgICAgICByZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAiQ3JlYXRlZCBaaXAgZmlsZSB1bmRlciIpOwogICAgIH0KIAotCXByaXZhdGUgdm9pZCB0ZXN0Q29sbGVjdExvZ0ZpbGVzSW5DbHVzdGVyKCl7CisgICAgcHJpdmF0ZSB2b2lkIHRlc3RDb2xsZWN0TG9nRmlsZXNJbkNsdXN0ZXIoKXsKICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gInRlc3RDb2xsZWN0TG9nRmlsZXNJbkNsdXN0ZXIiOwogICAgICAgICBBc2FkbWluUmV0dXJuIHJlc3VsdCA9IGFzYWRtaW5XaXRoT3V0cHV0KENPTExFQ1RfTE9HX0ZJTEVTLFRBUkdFVF9PUFRJT04sIENMVVNURVJfTkFNRSk7Ci0JCXJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJDcmVhdGVkIFppcCBmaWxlIHVuZGVyIik7ICAgICAgICAKKyAgICAgICAgcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgIkNyZWF0ZWQgWmlwIGZpbGUgdW5kZXIiKTsKICAgICB9CiAKLQlwcml2YXRlIHZvaWQgdGVzdENvbGxlY3RMb2dGaWxlc1N0YW5kYWxvbmVJbnN0YW5jZSgpeworICAgIHByaXZhdGUgdm9pZCB0ZXN0Q29sbGVjdExvZ0ZpbGVzU3RhbmRhbG9uZUluc3RhbmNlKCl7CiAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9ICJ0ZXN0Q29sbGVjdExvZ0ZpbGVzU3RhbmRhbG9uZUluc3RhbmNlIjsKICAgICAgICAgQXNhZG1pblJldHVybiByZXN1bHQgPSBhc2FkbWluV2l0aE91dHB1dChDT0xMRUNUX0xPR19GSUxFUyxUQVJHRVRfT1BUSU9OLCBTVEFOREFMT05FX0lOU1RBTkNFX05BTUUpOwotCQlyZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAiQ3JlYXRlZCBaaXAgZmlsZSB1bmRlciIpOyAgICAgICAgCisgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJDcmVhdGVkIFppcCBmaWxlIHVuZGVyIik7CiAgICAgfQogCiAKQEAgLTMyNyw1ICszMjcsNSBAQAogICAgICAgICB9CiAgICAgfQogCi0JCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vTWFudWFsU3luY1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vTWFudWFsU3luY1Rlc3QuamF2YQppbmRleCAwYTJkMWEzLi4xM2VjNjA3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL01hbnVhbFN5bmNUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9NYW51YWxTeW5jVGVzdC5qYXZhCkBAIC0zOTAsNyArMzkwLDcgQEAKIAogICAgICAgICBsb25nIGRhc0RvbWFpblhtbFRTID0gZGFzRG9tYWluWG1sLmxhc3RNb2RpZmllZCgpOwogICAgICAgICByZXBvcnQoImV4cG9ydC1zeW5jLWJ1bmRsZS0iICsgdGVzdG5hbWUsIGFzYWRtaW4oImV4cG9ydC1zeW5jLWJ1bmRsZSIsICItLXRhcmdldCIsIHRlc3RuYW1lKSk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlcG9ydCgiY2hlY2stZG9tYWlueG1sLSIgKyB0ZXN0bmFtZSwgaW5zdERvbWFpblhtbC5leGlzdHMoKSk7CiAKICAgICAgICAgc3RvcERvbWFpbigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9Ob2RlVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9Ob2RlVGVzdC5qYXZhCmluZGV4IGQ2N2JiZTYuLjdmN2Q4MmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vTm9kZVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL05vZGVUZXN0LmphdmEKQEAgLTk3LDkgKzk3LDkgQEAKICAgICAgICAgdGVzdExvY2FsSG9zdE5vZGUoKTsKICAgICAgICAgdGVzdENyZWF0ZU5vZGVTc2goKTsKICAgICAgICAgdGVzdENyZWF0ZU5vZGVDb25maWcoKTsKLQl0ZXN0Q3JlYXRlT2ZmbGluZUNvbmZpZygpOwotCXRlc3RVcGRhdGVOb2RlcygpOwotCXRlc3RMaXN0Tm9kZXMoKTsKKyAgICB0ZXN0Q3JlYXRlT2ZmbGluZUNvbmZpZygpOworICAgIHRlc3RVcGRhdGVOb2RlcygpOworICAgIHRlc3RMaXN0Tm9kZXMoKTsKICAgICAgICAgdGVzdFZhbGlkYXRlTm9kZUNvbW1hbmQoKTsKICAgICAgICAgdGVzdEJhc2ljQ2x1c3RlcigpOwogICAgICAgICBzdG9wRG9tYWluKCk7CkBAIC0xMTgsNyArMTE4LDcgQEAKIAogICAgICAgICAvLyBXQk4gRmlsZSBMYXlvdXQgTWF5IDIwMTIKICAgICAgICAgU3RyaW5nIHBhcmFtTmFtZSA9ICItLWRvbWFpbmRpciI7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghVGVzdEVudi5pc0hhZGFzKCkpCiAgICAgICAgICAgICBwYXJhbU5hbWUgPSAiLS1ub2RlZGlyIjsKIApAQCAtMjY1LDcgKzI2NSw3IEBACiAgICAgICAgIGZpbmFsIFN0cmluZyB0ZXN0TmFtZVByZWZpeFZhbGlkYXRlID0gInZhbGlkYXRlT2ZmbGluZUNvbmZpZy0iOwogICAgICAgICBmaW5hbCBTdHJpbmcgdGVzdE5hbWVQcmVmaXhWYWxpZGF0ZURlbGV0ZSA9ICJ2YWxpZGF0ZURlbGV0ZU9mZmxpbmVDb25maWctIjsKICAgICAgICAgZmluYWwgU3RyaW5nIG5vZGVOYW1lUHJlZml4ID0gIm5fY29uZmlnXyI7Ci0JZmluYWwgU3RyaW5nIGluc3RhbmNlTmFtZSA9ICJvZmZsaW5lLWNvbmZpZy1pbnMiOworICAgIGZpbmFsIFN0cmluZyBpbnN0YW5jZU5hbWUgPSAib2ZmbGluZS1jb25maWctaW5zIjsKIAogICAgICAgICBTdHJpbmcgbm9kZU5hbWUgPSBTdHJpbmcuZm9ybWF0KCIlcyVkIiwgbm9kZU5hbWVQcmVmaXgsIDApOwogCkBAIC0yNzcsMjEgKzI3NywyMSBAQAogICAgICAgICB0ZXN0TmFtZSA9IHRlc3ROYW1lUHJlZml4VmFsaWRhdGUgKyAiMCI7CiAgICAgICAgIHJlcG9ydCh0ZXN0TmFtZSwgYXNhZG1pbigiZ2V0IiwgcHJvcFByZWZpeCArIG5vZGVOYW1lICsgIi4iICsgIm5hbWUiKSk7CiAKLQkvLyBVcGRhdGUgdGhlIG5vZGUgaG9zdG5hbWUgdXNpbmcgY3JlYXRlLWxvY2FsLWluc3RhbmNlCi0JdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeENyZWF0ZUluc3RhbmNlICsgIjAiOwotCXJlcG9ydCh0ZXN0TmFtZSwgYXNhZG1pbigiY3JlYXRlLWxvY2FsLWluc3RhbmNlIiwgIi0tbm9kZSIsIG5vZGVOYW1lLCBpbnN0YW5jZU5hbWUpKTsKKyAgICAvLyBVcGRhdGUgdGhlIG5vZGUgaG9zdG5hbWUgdXNpbmcgY3JlYXRlLWxvY2FsLWluc3RhbmNlCisgICAgdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeENyZWF0ZUluc3RhbmNlICsgIjAiOworICAgIHJlcG9ydCh0ZXN0TmFtZSwgYXNhZG1pbigiY3JlYXRlLWxvY2FsLWluc3RhbmNlIiwgIi0tbm9kZSIsIG5vZGVOYW1lLCBpbnN0YW5jZU5hbWUpKTsKIAotCS8vIE1ha2Ugc3VyZSBob3N0bmFtZSBpcyBmaWxsZWQgaW4KLQl0ZXN0TmFtZSA9IHRlc3ROYW1lUHJlZml4VmFsaWRhdGUgKyAiMSI7Ci0JcmVwb3J0ICh0ZXN0TmFtZSwgYXNhZG1pbigiZ2V0IiwgcHJvcFByZWZpeCtub2RlTmFtZSsiLiIrIm5vZGUtaG9zdCIpKTsKKyAgICAvLyBNYWtlIHN1cmUgaG9zdG5hbWUgaXMgZmlsbGVkIGluCisgICAgdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeFZhbGlkYXRlICsgIjEiOworICAgIHJlcG9ydCAodGVzdE5hbWUsIGFzYWRtaW4oImdldCIsIHByb3BQcmVmaXgrbm9kZU5hbWUrIi4iKyJub2RlLWhvc3QiKSk7CiAKLQkvLyBNYWtlIHN1cmUgaW5zdGFsbGRpciBpcyBmaWxsZWQgaW4KLQl0ZXN0TmFtZSA9IHRlc3ROYW1lUHJlZml4VmFsaWRhdGUgKyAiMiI7Ci0JcmVwb3J0ICh0ZXN0TmFtZSwgYXNhZG1pbigiZ2V0IiwgcHJvcFByZWZpeCtub2RlTmFtZSsiLiIrImluc3RhbGwtZGlyIikpOworICAgIC8vIE1ha2Ugc3VyZSBpbnN0YWxsZGlyIGlzIGZpbGxlZCBpbgorICAgIHRlc3ROYW1lID0gdGVzdE5hbWVQcmVmaXhWYWxpZGF0ZSArICIyIjsKKyAgICByZXBvcnQgKHRlc3ROYW1lLCBhc2FkbWluKCJnZXQiLCBwcm9wUHJlZml4K25vZGVOYW1lKyIuIisiaW5zdGFsbC1kaXIiKSk7CiAKLQkvLyBEZWxldGUgdGhlIGluc3RhbmNlIAotCXRlc3ROYW1lID0gdGVzdE5hbWVQcmVmaXhEZWxldGUgKyAiMCI7Ci0JcmVwb3J0ICh0ZXN0TmFtZSwgYXNhZG1pbigiZGVsZXRlLWxvY2FsLWluc3RhbmNlIiwgIi0tbm9kZSIsIG5vZGVOYW1lLCBpbnN0YW5jZU5hbWUpKTsKKyAgICAvLyBEZWxldGUgdGhlIGluc3RhbmNlCisgICAgdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeERlbGV0ZSArICIwIjsKKyAgICByZXBvcnQgKHRlc3ROYW1lLCBhc2FkbWluKCJkZWxldGUtbG9jYWwtaW5zdGFuY2UiLCAiLS1ub2RlIiwgbm9kZU5hbWUsIGluc3RhbmNlTmFtZSkpOwogCiAgICAgICAgIC8vIERlbGV0ZSBpdAogICAgICAgICB0ZXN0TmFtZSA9IHRlc3ROYW1lUHJlZml4RGVsZXRlICsgIjEiOwpAQCAtMzIxLDE3ICszMjEsMTcgQEAKICAgICAgICAgdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeFZhbGlkYXRlICsgIjAiOwogICAgICAgICByZXBvcnQodGVzdE5hbWUsIGFzYWRtaW4oImdldCIsIHByb3BQcmVmaXggKyBub2RlTmFtZSArICIuIiArICJuYW1lIikpOwogCi0JdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeFVwZGF0ZUNvbmZpZyArICIwIjsKLQlyZXBvcnQodGVzdE5hbWUsIGFzYWRtaW4oInVwZGF0ZS1ub2RlLWNvbmZpZyIsICItLW5vZGVob3N0IiwgImxvY2FsaG9zdCIsIG5vZGVOYW1lKSk7CisgICAgdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeFVwZGF0ZUNvbmZpZyArICIwIjsKKyAgICByZXBvcnQodGVzdE5hbWUsIGFzYWRtaW4oInVwZGF0ZS1ub2RlLWNvbmZpZyIsICItLW5vZGVob3N0IiwgImxvY2FsaG9zdCIsIG5vZGVOYW1lKSk7CiAKLQl0ZXN0TmFtZSAgPSB0ZXN0TmFtZVByZWZpeFVwZGF0ZUNvbmZpZyArICIxIjsKLQlBc2FkbWluUmV0dXJuIHJldCA9IGFzYWRtaW5XaXRoT3V0cHV0KCJnZXQiLCBwcm9wUHJlZml4K25vZGVOYW1lKyIuIisibm9kZS1ob3N0Iik7CisgICAgdGVzdE5hbWUgID0gdGVzdE5hbWVQcmVmaXhVcGRhdGVDb25maWcgKyAiMSI7CisgICAgQXNhZG1pblJldHVybiByZXQgPSBhc2FkbWluV2l0aE91dHB1dCgiZ2V0IiwgcHJvcFByZWZpeCtub2RlTmFtZSsiLiIrIm5vZGUtaG9zdCIpOwogICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSByZXQub3V0QW5kRXJyLmluZGV4T2YoImxvY2FsaG9zdCIpID49MDsKICAgICAgICAgcmVwb3J0KHRlc3ROYW1lLCBzdWNjZXNzKTsKIAogICAgICAgICAvLyBDcmVhdGUgYW4gc3NoIG5vZGUgd2l0aCBubyBob3N0bmFtZSBvciBpbnN0YWxsZGlyCiAgICAgICAgIHRlc3ROYW1lID0gdGVzdE5hbWVQcmVmaXhDcmVhdGUgKyAiMSI7Ci0JU3RyaW5nIG5vZGVOYW1lMSA9IFN0cmluZy5mb3JtYXQoIiVzJWQiLCBub2RlTmFtZVByZWZpeCwgMSk7CisgICAgU3RyaW5nIG5vZGVOYW1lMSA9IFN0cmluZy5mb3JtYXQoIiVzJWQiLCBub2RlTmFtZVByZWZpeCwgMSk7CiAgICAgICAgIHJlcG9ydCh0ZXN0TmFtZSwgYXNhZG1pbigiY3JlYXRlLW5vZGUtc3NoIiwgIi0tbm9kZWhvc3QiLCAiYWNiIiwgIi0tZm9yY2UiLCBub2RlTmFtZTEpKTsKIAogICAgICAgICAvLyBNYWtlIHN1cmUgaXQgaXMgdGhlcmUgYnkgZ2V0dGluZyBpdHMgbmFtZQpAQCAtMzM5LDIwICszMzksMjAgQEAKICAgICAgICAgcmVwb3J0KHRlc3ROYW1lLCBhc2FkbWluKCJnZXQiLCBwcm9wUHJlZml4ICsgbm9kZU5hbWUxICsgIi4iICsgIm5hbWUiKSk7CiAKICAgICAgICAgdGVzdE5hbWUgID0gdGVzdE5hbWVQcmVmaXhVcGRhdGVDb25maWcgKyAiMiI7Ci0JcmVwb3J0KHRlc3ROYW1lLCBhc2FkbWluKCJ1cGRhdGUtbm9kZS1jb25maWciLCAiLS1ub2RlaG9zdCIsICJhYmMiLCBub2RlTmFtZTEpKTsKKyAgICByZXBvcnQodGVzdE5hbWUsIGFzYWRtaW4oInVwZGF0ZS1ub2RlLWNvbmZpZyIsICItLW5vZGVob3N0IiwgImFiYyIsIG5vZGVOYW1lMSkpOwogCiAgICAgICAgIHRlc3ROYW1lICA9IHRlc3ROYW1lUHJlZml4VXBkYXRlQ29uZmlnICsgIjMiOwogICAgICAgICByZXQgPSBhc2FkbWluV2l0aE91dHB1dCgiZ2V0IiwgcHJvcFByZWZpeCtub2RlTmFtZTErIi4iKyJub2RlLWhvc3QiKTsKICAgICAgICAgc3VjY2VzcyA9IHJldC5vdXRBbmRFcnIuaW5kZXhPZigiYWJjIikgPj0wOwogICAgICAgICByZXBvcnQodGVzdE5hbWUsIHN1Y2Nlc3MpOwotICAgICAgICAKKwogICAgICAgICB0ZXN0TmFtZSAgPSB0ZXN0TmFtZVByZWZpeFVwZGF0ZUNvbmZpZyArICI0IjsKICAgICAgICAgcmV0ID0gYXNhZG1pbldpdGhPdXRwdXQoImdldCIsIHByb3BQcmVmaXgrbm9kZU5hbWUxKyIuIisidHlwZSIpOwogICAgICAgICBzdWNjZXNzID0gcmV0Lm91dEFuZEVyci5pbmRleE9mKCJDT05GSUciKSA+PTA7CiAgICAgICAgIHJlcG9ydCh0ZXN0TmFtZSwgc3VjY2Vzcyk7Ci0gICAgICAgIAorCiAgICAgICAgIHRlc3ROYW1lICA9IHRlc3ROYW1lUHJlZml4VXBkYXRlU3NoICsgIjAiOwotCXJlcG9ydCh0ZXN0TmFtZSwgYXNhZG1pbigidXBkYXRlLW5vZGUtc3NoIiwgIi0tbm9kZWhvc3QiLCAiYWJjIiwgIi0tZm9yY2UiLCBub2RlTmFtZTEpKTsKKyAgICByZXBvcnQodGVzdE5hbWUsIGFzYWRtaW4oInVwZGF0ZS1ub2RlLXNzaCIsICItLW5vZGVob3N0IiwgImFiYyIsICItLWZvcmNlIiwgbm9kZU5hbWUxKSk7CiAgICAgICAgIHRlc3ROYW1lICA9IHRlc3ROYW1lUHJlZml4VXBkYXRlU3NoICsgIjEiOwogICAgICAgICByZXQgPSBhc2FkbWluV2l0aE91dHB1dCgiZ2V0IiwgcHJvcFByZWZpeCtub2RlTmFtZTErIi4iKyJ0eXBlIik7CiAgICAgICAgIHN1Y2Nlc3MgPSByZXQub3V0QW5kRXJyLmluZGV4T2YoIlNTSCIpID49MDsKQEAgLTM4OSwxMSArMzg5LDExIEBACiAKICAgICAgICAgU3RyaW5nIG5vZGVOYW1lID0gU3RyaW5nLmZvcm1hdCgiJXMlZCIsIG5vZGVOYW1lUHJlZml4LCAwKTsKIAotCS8vIExpc3QgdGhlIG5vZGVzIHNob3VsZCBzZWUgdGhlIGRlZmF1bHQgbm9kZQorICAgIC8vIExpc3QgdGhlIG5vZGVzIHNob3VsZCBzZWUgdGhlIGRlZmF1bHQgbm9kZQogICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeExpc3QgKyAiMCI7Ci0JQXNhZG1pblJldHVybiByZXQgPSBhc2FkbWluV2l0aE91dHB1dCgibGlzdC1ub2RlcyIpOwotCWJvb2xlYW4gc3VjY2VzcyA9IHJldC5vdXRBbmRFcnIuaW5kZXhPZigibG9jYWxob3N0LWRvbWFpbjEiKSA+PTA7Ci0JcmVwb3J0KHRlc3ROYW1lLCBzdWNjZXNzKTsKKyAgICBBc2FkbWluUmV0dXJuIHJldCA9IGFzYWRtaW5XaXRoT3V0cHV0KCJsaXN0LW5vZGVzIik7CisgICAgYm9vbGVhbiBzdWNjZXNzID0gcmV0Lm91dEFuZEVyci5pbmRleE9mKCJsb2NhbGhvc3QtZG9tYWluMSIpID49MDsKKyAgICByZXBvcnQodGVzdE5hbWUsIHN1Y2Nlc3MpOwogCiAgICAgICAgIC8vIENyZWF0ZSBhIGNvbmZpZyBub2RlLCBkZWZhdWx0IGlzIGEgQ09ORklHIG5vZGUKICAgICAgICAgdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeENPTkZJR0xpc3QgKyAiMCI7CkBAIC00MDMsNDYgKzQwMyw0NiBAQAogICAgICAgICB0ZXN0TmFtZSA9IHRlc3ROYW1lUHJlZml4VmFsaWRhdGUgKyAiMCI7CiAgICAgICAgIHJlcG9ydCh0ZXN0TmFtZSwgYXNhZG1pbigiZ2V0IiwgcHJvcFByZWZpeCArIG5vZGVOYW1lICsgIi4iICsgIm5hbWUiKSk7CiAKLQkvLyBMaXN0IHRoZSBub2Rlcywgc2hvdWxkIGJlIDIKLQl0ZXN0TmFtZSA9IHRlc3ROYW1lUHJlZml4TGlzdCArICIxIjsKLQlyZXQgPSBhc2FkbWluV2l0aE91dHB1dCgibGlzdC1ub2RlcyIpOworICAgIC8vIExpc3QgdGhlIG5vZGVzLCBzaG91bGQgYmUgMgorICAgIHRlc3ROYW1lID0gdGVzdE5hbWVQcmVmaXhMaXN0ICsgIjEiOworICAgIHJldCA9IGFzYWRtaW5XaXRoT3V0cHV0KCJsaXN0LW5vZGVzIik7CiAgICAgICAgIHN1Y2Nlc3MgPSByZXQub3V0QW5kRXJyLmluZGV4T2YoImxvY2FsaG9zdC1kb21haW4xIikgPj0wOwotCWJvb2xlYW4gc3VjY2VzczIgPSByZXQub3V0QW5kRXJyLmluZGV4T2Yobm9kZU5hbWUpPj0wOwotCWlmIChzdWNjZXNzICYmIHN1Y2Nlc3MyKQotCQlyZXBvcnQodGVzdE5hbWUsIHRydWUpOwotCWVsc2UKLSAgICAgICAgCXJlcG9ydCh0ZXN0TmFtZSwgZmFsc2UpOworICAgIGJvb2xlYW4gc3VjY2VzczIgPSByZXQub3V0QW5kRXJyLmluZGV4T2Yobm9kZU5hbWUpPj0wOworICAgIGlmIChzdWNjZXNzICYmIHN1Y2Nlc3MyKQorICAgICAgICByZXBvcnQodGVzdE5hbWUsIHRydWUpOworICAgIGVsc2UKKyAgICAgICAgICAgIHJlcG9ydCh0ZXN0TmFtZSwgZmFsc2UpOwogCi0JLy8gTGlzdCB0aGUgbm9kZXMgdXNpbmcgbGlzdC1ub2Rlcy1jb25maWcsIHNob3VsZCBiZSAyCi0JdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeENPTkZJR0xpc3QgKyAiMSI7Ci0JcmV0ID0gYXNhZG1pbldpdGhPdXRwdXQoImxpc3Qtbm9kZXMtY29uZmlnIik7CisgICAgLy8gTGlzdCB0aGUgbm9kZXMgdXNpbmcgbGlzdC1ub2Rlcy1jb25maWcsIHNob3VsZCBiZSAyCisgICAgdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeENPTkZJR0xpc3QgKyAiMSI7CisgICAgcmV0ID0gYXNhZG1pbldpdGhPdXRwdXQoImxpc3Qtbm9kZXMtY29uZmlnIik7CiAgICAgICAgIHN1Y2Nlc3MgPSByZXQub3V0QW5kRXJyLmluZGV4T2YoImxvY2FsaG9zdC1kb21haW4xIikgPj0wOwotCXN1Y2Nlc3MyID0gcmV0Lm91dEFuZEVyci5pbmRleE9mKG5vZGVOYW1lKT49MDsKLQlpZiAoc3VjY2VzcyAmJiBzdWNjZXNzMikKLQkJcmVwb3J0KHRlc3ROYW1lLCB0cnVlKTsKLQllbHNlCi0gICAgICAgIAlyZXBvcnQodGVzdE5hbWUsIGZhbHNlKTsKKyAgICBzdWNjZXNzMiA9IHJldC5vdXRBbmRFcnIuaW5kZXhPZihub2RlTmFtZSk+PTA7CisgICAgaWYgKHN1Y2Nlc3MgJiYgc3VjY2VzczIpCisgICAgICAgIHJlcG9ydCh0ZXN0TmFtZSwgdHJ1ZSk7CisgICAgZWxzZQorICAgICAgICAgICAgcmVwb3J0KHRlc3ROYW1lLCBmYWxzZSk7CiAKLQkvLyBDcmVhdGUgYW4gc3NoIG5vZGUgKGZvcmNlKSBhbmQgbGlzdCBhZ2Fpbiwgc2hvdWxkIGJlIDMKLQl0ZXN0TmFtZSA9IHRlc3ROYW1lUHJlZml4U1NITGlzdCArICIwIjsKKyAgICAvLyBDcmVhdGUgYW4gc3NoIG5vZGUgKGZvcmNlKSBhbmQgbGlzdCBhZ2Fpbiwgc2hvdWxkIGJlIDMKKyAgICB0ZXN0TmFtZSA9IHRlc3ROYW1lUHJlZml4U1NITGlzdCArICIwIjsKICAgICAgICAgU3RyaW5nIG5vZGVOYW1lMSA9IFN0cmluZy5mb3JtYXQoIiVzJWQiLCBub2RlTmFtZVByZWZpeCwgMSk7Ci0JcmVwb3J0ICh0ZXN0TmFtZSwgYXNhZG1pbigiY3JlYXRlLW5vZGUtc3NoIiwiLS1mb3JjZSIsICItLW5vZGVob3N0IiwgImFiYyIsIG5vZGVOYW1lMSkpOworICAgIHJlcG9ydCAodGVzdE5hbWUsIGFzYWRtaW4oImNyZWF0ZS1ub2RlLXNzaCIsIi0tZm9yY2UiLCAiLS1ub2RlaG9zdCIsICJhYmMiLCBub2RlTmFtZTEpKTsKIAotCXRlc3ROYW1lID0gdGVzdE5hbWVQcmVmaXhMaXN0ICsgIjIiOwotCXJldCA9IGFzYWRtaW5XaXRoT3V0cHV0KCJsaXN0LW5vZGVzIik7CisgICAgdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeExpc3QgKyAiMiI7CisgICAgcmV0ID0gYXNhZG1pbldpdGhPdXRwdXQoImxpc3Qtbm9kZXMiKTsKICAgICAgICAgc3VjY2VzcyA9IHJldC5vdXRBbmRFcnIuaW5kZXhPZigibG9jYWxob3N0LWRvbWFpbjEiKSA+PTA7Ci0Jc3VjY2VzczIgPSByZXQub3V0QW5kRXJyLmluZGV4T2Yobm9kZU5hbWUpPj0wOwotCWJvb2xlYW4gc3VjY2VzczMgPSByZXQub3V0QW5kRXJyLmluZGV4T2Yobm9kZU5hbWUxKT49MDsKLQlpZiAoc3VjY2VzcyAmJiBzdWNjZXNzMiAmJiBzdWNjZXNzMykKLQkJcmVwb3J0KHRlc3ROYW1lLCB0cnVlKTsKLQllbHNlCi0gICAgICAgIAlyZXBvcnQodGVzdE5hbWUsIGZhbHNlKTsKKyAgICBzdWNjZXNzMiA9IHJldC5vdXRBbmRFcnIuaW5kZXhPZihub2RlTmFtZSk+PTA7CisgICAgYm9vbGVhbiBzdWNjZXNzMyA9IHJldC5vdXRBbmRFcnIuaW5kZXhPZihub2RlTmFtZTEpPj0wOworICAgIGlmIChzdWNjZXNzICYmIHN1Y2Nlc3MyICYmIHN1Y2Nlc3MzKQorICAgICAgICByZXBvcnQodGVzdE5hbWUsIHRydWUpOworICAgIGVsc2UKKyAgICAgICAgICAgIHJlcG9ydCh0ZXN0TmFtZSwgZmFsc2UpOwogCi0JLy8gTGlzdCB0aGUgbm9kZXMgdXNpbmcgbGlzdC1ub2Rlcy1zc2gsIHNob3VsZCBiZSAxCi0JdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeFNTSExpc3QgKyAiMSI7Ci0JcmV0ID0gYXNhZG1pbldpdGhPdXRwdXQoImxpc3Qtbm9kZXMtc3NoIik7CisgICAgLy8gTGlzdCB0aGUgbm9kZXMgdXNpbmcgbGlzdC1ub2Rlcy1zc2gsIHNob3VsZCBiZSAxCisgICAgdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeFNTSExpc3QgKyAiMSI7CisgICAgcmV0ID0gYXNhZG1pbldpdGhPdXRwdXQoImxpc3Qtbm9kZXMtc3NoIik7CiAgICAgICAgIHN1Y2Nlc3MgPSByZXQub3V0QW5kRXJyLmluZGV4T2Yobm9kZU5hbWUxKSA+PTA7Ci0gICAgICAgCXJlcG9ydCh0ZXN0TmFtZSwgc3VjY2Vzcyk7CisgICAgICAgICAgIHJlcG9ydCh0ZXN0TmFtZSwgc3VjY2Vzcyk7CiAKICAgICAgICAgLy8gRGVsZXRlIGNvbmZpZyBub2RlCiAgICAgICAgIHRlc3ROYW1lID0gdGVzdE5hbWVQcmVmaXhEZWxldGUgKyAiMCI7CkBAIC00NTIsMTggKzQ1MiwxOCBAQAogICAgICAgICB0ZXN0TmFtZSA9IHRlc3ROYW1lUHJlZml4VmFsaWRhdGVEZWxldGUgKyAiMCI7CiAgICAgICAgIHJlcG9ydCh0ZXN0TmFtZSwgIWFzYWRtaW4oImdldCIsIHByb3BQcmVmaXggKyBub2RlTmFtZSArICIuIiArICJuYW1lIikpOwogCi0JLy8gTGlzdCB0aGUgbm9kZXMsIHNob3VsZCBiZSAyCi0JdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeExpc3QgKyAiMyI7Ci0JcmV0ID0gYXNhZG1pbldpdGhPdXRwdXQoImxpc3Qtbm9kZXMiKTsKKyAgICAvLyBMaXN0IHRoZSBub2Rlcywgc2hvdWxkIGJlIDIKKyAgICB0ZXN0TmFtZSA9IHRlc3ROYW1lUHJlZml4TGlzdCArICIzIjsKKyAgICByZXQgPSBhc2FkbWluV2l0aE91dHB1dCgibGlzdC1ub2RlcyIpOwogICAgICAgICBzdWNjZXNzID0gcmV0Lm91dEFuZEVyci5pbmRleE9mKCJsb2NhbGhvc3QtZG9tYWluMSIpID49MDsKLQlzdWNjZXNzMiA9ICByZXQub3V0QW5kRXJyLmluZGV4T2Yobm9kZU5hbWUpPj0wOwotCXN1Y2Nlc3MzID0gcmV0Lm91dEFuZEVyci5pbmRleE9mKG5vZGVOYW1lMSk+PTA7Ci0JaWYgKHN1Y2Nlc3MyKQotCQlyZXBvcnQodGVzdE5hbWUsIGZhbHNlKTsKLQllbHNlIGlmIChzdWNjZXNzICYmIHN1Y2Nlc3MzKQotCQlyZXBvcnQodGVzdE5hbWUsIHRydWUpOwotCWVsc2UKLSAgICAgICAgCXJlcG9ydCh0ZXN0TmFtZSwgZmFsc2UpOworICAgIHN1Y2Nlc3MyID0gIHJldC5vdXRBbmRFcnIuaW5kZXhPZihub2RlTmFtZSk+PTA7CisgICAgc3VjY2VzczMgPSByZXQub3V0QW5kRXJyLmluZGV4T2Yobm9kZU5hbWUxKT49MDsKKyAgICBpZiAoc3VjY2VzczIpCisgICAgICAgIHJlcG9ydCh0ZXN0TmFtZSwgZmFsc2UpOworICAgIGVsc2UgaWYgKHN1Y2Nlc3MgJiYgc3VjY2VzczMpCisgICAgICAgIHJlcG9ydCh0ZXN0TmFtZSwgdHJ1ZSk7CisgICAgZWxzZQorICAgICAgICAgICAgcmVwb3J0KHRlc3ROYW1lLCBmYWxzZSk7CiAKICAgICAgICAgLy8gRGVsZXRlIHNzaCBub2RlCiAgICAgICAgIHRlc3ROYW1lID0gdGVzdE5hbWVQcmVmaXhEZWxldGUgKyAiMSI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL1NldHVwU3NoUmVtb3RlVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9TZXR1cFNzaFJlbW90ZVRlc3QuamF2YQppbmRleCBlNWY1YTk2Li44YzlhYjRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL1NldHVwU3NoUmVtb3RlVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vU2V0dXBTc2hSZW1vdGVUZXN0LmphdmEKQEAgLTE1Myw3ICsxNTMsNyBAQAogICAgICAgICAvL2NsZWFuIHVwIHRoZSBwYXNzd29yZCBmaWxlCiAgICAgICAgIHJlbW92ZVBhc3N3b3JkcygiU1NIIik7CiAgICAgICAgIHN0b3BEb21haW4oKTsKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIHRlc3RLZXlEaXN0cmlidXRpb25XaXRob3V0S2V5R2VuZXJhdGlvbigpIHsKQEAgLTI0NCw3ICsyNDQsNyBAQAogICAgIC8qCiAgICAgICogSW4tb3JkZXIgdG8gcnVuIHRoaXMgdGVzdCwgb25lIG5lZWRzIHRvIGdlbmVyYXRlIHRoZSBwdWJsaWMtcHJpdmF0ZSBrZXkgZmlyc3QsIGVuYWJsZSB0aGlzIHRlc3QgYW5kIHJ1biBpdC4gUHJlLWdlbmVyYXRlZCBpZF9kc2EgYW5kIGlkX2RzYS5wdWIga2V5cyBhcmUKICAgICAgKiBiZWluZyByZW1vdmVkLgotICAgICAqLyAgICAKKyAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgdGVzdEVuY3J5cHRlZEtleSgpIHsKICAgICAgICAgLy9wYXNzIGNvcnJlY3Qgc3NoIHBhc3N3b3JkIGZvciBlYWNoIHRlc3QKICAgICAgICAgYWRkUGFzc3dvcmQoUGFzc3dvcmRWYWx1ZS5SSUdIVCwgUGFzc3dvcmRUeXBlLlNTSF9QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vU2V0dXBTc2hUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL1NldHVwU3NoVGVzdC5qYXZhCmluZGV4IDkwNmUwNzguLjNjMWMxNDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vU2V0dXBTc2hUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9TZXR1cFNzaFRlc3QuamF2YQpAQCAtMTY5LDcgKzE2OSw3IEBACiAKICAgICAgICAgLy9jbGVhbiB1cCB0aGUgcGFzc3dvcmQgZmlsZQogICAgICAgICByZW1vdmVQYXNzd29yZHMoIlNTSCIpOwotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwcml2YXRlIGJvb2xlYW4gdGVzdEtleURpc3RyaWJ1dGlvbldpdGhvdXRLZXlHZW5lcmF0aW9uKCkgewpAQCAtMjU0LDcgKzI1NCw3IEBACiAgICAgLyoKICAgICAgKiBJbi1vcmRlciB0byBydW4gdGhpcyB0ZXN0LCBvbmUgbmVlZHMgdG8gZ2VuZXJhdGUgdGhlIHB1YmxpYy1wcml2YXRlIGtleSBmaXJzdCwgZW5hYmxlIHRoaXMgdGVzdCBhbmQgcnVuIGl0LiBQcmUtZ2VuZXJhdGVkIGlkX2RzYSBhbmQgaWRfZHNhLnB1YiBrZXlzIGFyZQogICAgICAqIGJlaW5nIHJlbW92ZWQuCi0gICAgICovICAgIAorICAgICAqLwogICAgIHByaXZhdGUgdm9pZCB0ZXN0RW5jcnlwdGVkS2V5KCkgewogICAgICAgICAvL3Bhc3MgY29ycmVjdCBzc2ggcGFzc3dvcmQgZm9yIGVhY2ggdGVzdAogICAgICAgICBhZGRQYXNzd29yZChQYXNzd29yZFZhbHVlLlJJR0hULCBQYXNzd29yZFR5cGUuU1NIX1BBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9UZXN0RW52LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL1Rlc3RFbnYuamF2YQppbmRleCBkYzFmMmE3Li42MzdmZTJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL1Rlc3RFbnYuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL1Rlc3RFbnYuamF2YQpAQCAtODAsNyArODAsNyBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGUoVGVzdEVudi5nZXRJbnN0YW5jZXNIb21lKG5vZGVOYW1lKSwgREFTX1BST1BTX1BBVEgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgRmlsZSBnZXRJbnN0YW5jZXNIb21lKFN0cmluZyBkb21haW5OYW1lLCBTdHJpbmcgbm9kZU5hbWUpIHsKICAgICAgICAgaWYoaXNIYWRhcygpKQogICAgICAgICAgICAgcmV0dXJuIGdldERvbWFpbkhvbWUoZG9tYWluTmFtZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL1ZhbGlkYXRpb25UZXN0cy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9WYWxpZGF0aW9uVGVzdHMuamF2YQppbmRleCAyNTA5MjBlLi4wZDUxNjZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL1ZhbGlkYXRpb25UZXN0cy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vVmFsaWRhdGlvblRlc3RzLmphdmEKQEAgLTczLDkgKzczLDkgQEAKIAogICAgICAgICByZXBvcnQoImlzc3VlMTEyMDAtY3JlYXRlLW1lc3NhZ2Utc2VjLXByb3ZpZGVyIiwgIWFzYWRtaW4oICJjcmVhdGUtbWVzc2FnZS1zZWN1cml0eS1wcm92aWRlciIsICItLWNsYXNzbmFtZSIsICJjb20uc3VuLmZvbyIsICItLWxheWVyIiAsIlNPQVAiICwiPHNjcmlwdD5hbGVydChcInhcIik8L3NjcmlwdD4iKSk7CiAKLSAgICAgICAgcmVwb3J0KCJjcmVhdGUtbWVzc2FnZS1zZWMtcHJvdmlkZXItaW52YWxpZC1jbGFzc25hbWUiLCAhIGFzYWRtaW4oICJjcmVhdGUtbWVzc2FnZS1zZWN1cml0eS1wcm92aWRlciIsICItLWxheWVyIiwgIlNPQVAiLCAKKyAgICAgICAgcmVwb3J0KCJjcmVhdGUtbWVzc2FnZS1zZWMtcHJvdmlkZXItaW52YWxpZC1jbGFzc25hbWUiLCAhIGFzYWRtaW4oICJjcmVhdGUtbWVzc2FnZS1zZWN1cml0eS1wcm92aWRlciIsICItLWxheWVyIiwgIlNPQVAiLAogICAgICAgICAgICAgICAgICItLWNsYXNzbmFtZSIsICJjb20vc3VuIiwgImdnZyIpKTsKLSAgICAgICAgCisKICAgICAgICAgcmVwb3J0KCJjcmVhdGUtYXVkaXQtbW9kdWxlLWludmFsaWQtY2xhc3NuYW1lIiwhIGFzYWRtaW4oICJjcmVhdGUtYXVkaXQtbW9kdWxlIiwKICAgICAgICAgICAgICAgICAiLS1jbGFzc25hbWUiLCAiKmZmZnMzNDQ6MzMiLCAgImZvbzEiKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vV2hhY2tlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9XaGFja2VyLmphdmEKaW5kZXggZmZiNjUwOS4uYzg3NzJkNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9XaGFja2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9XaGFja2VyLmphdmEKQEAgLTI0LDEzICsyNCwxMyBAQAogICovCiBwdWJsaWMgY2xhc3MgV2hhY2tlciBleHRlbmRzIEFkbWluQmFzZURldlRlc3QgewogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkJUHJvY2Vzc1V0aWxzLmtpbGxKdm0oIkFTTWFpbiIpOwotCQlQcm9jZXNzVXRpbHMua2lsbEp2bSgiQXNhZG1pbk1haW4iKTsKLQkJUHJvY2Vzc1V0aWxzLmtpbGxKdm0oIkRlcmJ5Q29udHJvbCIpOwotCQlQcm9jZXNzVXRpbHMua2lsbEp2bSgiYWRtaW4tY2xpLmphciIpOwotCQlQcm9jZXNzVXRpbHMua2lsbEp2bSgiZGVyYnlydW4uamFyIik7Ci0JCVByb2Nlc3NVdGlscy5raWxsSnZtKCJnbGFzc2Zpc2guamFyIik7Ci0JCW5ldyBXaGFja2VyKCkucmVwb3J0KCJLaWxsZWQgb2xkIEpWTXMiLCB0cnVlKTsKKyAgICAgICAgUHJvY2Vzc1V0aWxzLmtpbGxKdm0oIkFTTWFpbiIpOworICAgICAgICBQcm9jZXNzVXRpbHMua2lsbEp2bSgiQXNhZG1pbk1haW4iKTsKKyAgICAgICAgUHJvY2Vzc1V0aWxzLmtpbGxKdm0oIkRlcmJ5Q29udHJvbCIpOworICAgICAgICBQcm9jZXNzVXRpbHMua2lsbEp2bSgiYWRtaW4tY2xpLmphciIpOworICAgICAgICBQcm9jZXNzVXRpbHMua2lsbEp2bSgiZGVyYnlydW4uamFyIik7CisgICAgICAgIFByb2Nlc3NVdGlscy5raWxsSnZtKCJnbGFzc2Zpc2guamFyIik7CisgICAgICAgIG5ldyBXaGFja2VyKCkucmVwb3J0KCJLaWxsZWQgb2xkIEpWTXMiLCB0cnVlKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vbW9uaXRvcmluZy9FbmFibGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL21vbml0b3JpbmcvRW5hYmxlci5qYXZhCmluZGV4IGY2ZTMxM2QuLjgwMGFlNTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vbW9uaXRvcmluZy9FbmFibGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9tb25pdG9yaW5nL0VuYWJsZXIuamF2YQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IHN0YXRpYyBhZG1pbi5tb25pdG9yaW5nLkNvbnN0YW50cy4qOwogCiAvKioKLSAqIEVuYWJsZSBNb25pdG9yaW5nIAorICogRW5hYmxlIE1vbml0b3JpbmcKICAqIEBhdXRob3IgQnlyb24gTmV2aW5zCiAgKi8KIHB1YmxpYyBjbGFzcyBFbmFibGVyIGV4dGVuZHMgTW9uVGVzdCB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL21vbml0b3JpbmcvSmRiYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9tb25pdG9yaW5nL0pkYmMuamF2YQppbmRleCAwYTg1ZDFiLi5mYTRlNjAzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL21vbml0b3JpbmcvSmRiYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vbW9uaXRvcmluZy9KZGJjLmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgICAgICAgICBhc2FkbWluV2l0aE91dHB1dCgiZ2V0IiwgIi1tIiwgInNlcnZlci5yZXNvdXJjZXMuamRiYy1vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQtcG9vbC5udW1jb25uZnJlZS1jdXJyZW50IiksCiAgICAgICAgICAgICAgICAgInNlcnZlci5yZXNvdXJjZXMuamRiYy1vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQtcG9vbC5udW1jb25uZnJlZS1jdXJyZW50ID0gOCIpLAogICAgICAgICAgICAgICAgICJqZGJjLWNoZWNrLWdldG0tbnVtY29ubmZyZWUtY291bnQiKTsKLSAgICAgICAgCisKICAgICAgICAgcmVwb3J0KGNoZWNrRm9yU3RyaW5nKAogICAgICAgICAgICAgICAgIGFzYWRtaW5XaXRoT3V0cHV0KCJnZXQiLCAiLW0iLCAic2VydmVyLnJlc291cmNlcy5qZGJjLW9ubHlnZXRjb25uZWN0aW9uc2VydmxldC1wb29sLm51bWNvbm5hY3F1aXJlZC1jb3VudCIpLAogICAgICAgICAgICAgICAgICJzZXJ2ZXIucmVzb3VyY2VzLmpkYmMtb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0LXBvb2wubnVtY29ubmFjcXVpcmVkLWNvdW50ID0gMSIpLApAQCAtMTA3LDcgKzEwNyw3IEBACiAKIAogCi0JCS8qIEFmdGVyIGdyaXp6bHkgMi4wIGludGVncmF0aW9uIG51bWNvbmZyZWUgY2hhbmdlZCBmcm9tIDUgdG8gNy4gIFRoZSBvbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQgaXMgYmVpbmcgaW52b2tlZAorICAgICAgICAvKiBBZnRlciBncml6emx5IDIuMCBpbnRlZ3JhdGlvbiBudW1jb25mcmVlIGNoYW5nZWQgZnJvbSA1IHRvIDcuICBUaGUgb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0IGlzIGJlaW5nIGludm9rZWQKICAgICAgICAgICAgICAgICAgaW4gdGhlICpzYW1lKiB0aHJlYWQgYW5kIGNvbS5zdW4uZW50ZXJwcmlzZS5yZXNvdXJjZS5wb29sLkFzc29jV2l0aFRocmVhZFJlc291cmNlUG9vbCBpbiB0aGlzIGNhc2UgZG9lc24ndCBhbGxvY2F0ZQogICAgICAgICAgICAgICAgICBuZXcgcmVzb3VyY2UsIGJ1dCB1c2VzIHRoZSBvbmUgYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGggdGhlIHRocmVhZC4gKi8KICAgICAgICAgLy9Db21tZW50IG91dCAtIHRoaXMgbnVtYmVyIHNlZW1zIHVwcmVkaWN0YWJsZSB0byB0ZXN0IC0gc29tZXRpbWVzIDYsIHNvbWV0aW1lcyA3IC0gSkMKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICAgICAvLyAgICAgICAgYXNhZG1pbldpdGhPdXRwdXQoImdldCIsICItbSIsICJzZXJ2ZXIucmVzb3VyY2VzLmpkYmMtb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0LXBvb2wubnVtY29ubmZyZWUtY3VycmVudCIpLAogICAgICAgICAvLyAgICAgICAgInNlcnZlci5yZXNvdXJjZXMuamRiYy1vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQtcG9vbC5udW1jb25uZnJlZS1jdXJyZW50ID0gNyIpLAogICAgICAgICAvLyAgICAgICAgImpkYmMtY2hlY2stZ2V0bS1udW1jb25uZnJlZS1jb3VudCIpOwotCQkKKwogCiAKICAgICAgICAgcmVwb3J0KGNoZWNrRm9yU3RyaW5nKApAQCAtMTMwLDcgKzEzMCw3IEBACiAgICAgICAgICAgICAgICAgYXNhZG1pbldpdGhPdXRwdXQoImdldCIsICItbSIsICJzZXJ2ZXIucmVzb3VyY2VzLmpkYmMtb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0LXBvb2wubnVtY29ubnJlbGVhc2VkLWNvdW50IiksCiAgICAgICAgICAgICAgICAgInNlcnZlci5yZXNvdXJjZXMuamRiYy1vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQtcG9vbC5udW1jb25ucmVsZWFzZWQtY291bnQgPSAwIiksCiAgICAgICAgICAgICAgICAgImpkYmMtY2hlY2stZ2V0bS1udW1jb25ucmVsZWFzZWQtY291bnQtMC1yZXNldCIpOwotICAgICAgICAKKwogICAgICAgICByZXBvcnQod2dldCg4MDgwLCAib25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L29ubHlnZXRjb25uZWN0aW9uc2VydmxldCIpLCAiaGl0IDQgb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0IG9uIDgwODAtIik7CiAKICAgICAgICAgcmVwb3J0KGNoZWNrRm9yU3RyaW5nKApAQCAtMjI3LDcgKzIyNyw3IEBACiAgICAgICAgIH0KIAogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEZpbGUgY29ubkFwcCA9IG5ldyBGaWxlKFJFU09VUkNFU19ESVIsICJqZGJjLW9ubHlnZXRjb25uZWN0aW9uLXNlcnZsZXRBcHAuZWFyIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGNvbm5lY3Rpb25VUkwgPSAiamRiYzpkZXJieTovL2xvY2FsaG9zdDoxNTI3L3Rlc3RkYjtjcmVhdGU9dHJ1ZTsiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBkYkRyaXZlciA9Im9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9tb25pdG9yaW5nL0ppcmEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vbW9uaXRvcmluZy9KaXJhLmphdmEKaW5kZXggODUzNGRiNy4uNDNjMGY5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9tb25pdG9yaW5nL0ppcmEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL21vbml0b3JpbmcvSmlyYS5qYXZhCkBAIC0zMywxMCArMzMsMTAgQEAKICAgICB2b2lkIHJ1blRlc3RzKFRlc3REcml2ZXIgZHJpdmVyKSB7CiAgICAgICAgIHNldERyaXZlcihkcml2ZXIpOwogICAgICAgICByZXBvcnQodHJ1ZSwgIkhlbGxvIGZyb20gSklSQSBUZXN0cyEiKTsKLQkJLyogdHVybiBvZmYgdGhpcyBpbnRlcm1pdHRlbnQgdGVzdCBmb3Igbm93LgorICAgICAgICAvKiB0dXJuIG9mZiB0aGlzIGludGVybWl0dGVudCB0ZXN0IGZvciBub3cuCiAKICAgICAgICAgICAgICAgICAgICAgICB0ZXN0MTQzODkoKTsKLQkJKi8KKyAgICAgICAgKi8KIAogICAgICAgICB0ZXN0MjE2NDYoKTsKICAgICAgICAgdGVzdDE2MzEzKCk7CkBAIC0zMTUsNyArMzE1LDcgQEAKICAgICAgICAgICAgICAgICByZXBvcnQoZmFsc2UsICJMb2dMaXN0ZW5lci5nZXRGaWxlKCkgcmV0dXJuZWQgbnVsbCIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICByZXBvcnQobG9nZmlsZS5leGlzdHMoKSwgcHJlcGVuZCArICJsb2dmaWxlIGV4aXN0cyIpOwogICAgICAgICAgICAgcmVwb3J0KGxvZ2ZpbGUuaXNGaWxlKCksIHByZXBlbmQgKyAibG9nZmlsZSBpcy1hLWZpbGUiKTsKICAgICAgICAgICAgIHJlcG9ydChsb2dmaWxlLmNhblJlYWQoKSwgcHJlcGVuZCArICJsb2dmaWxlIGlzIHJlYWRhYmxlIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL21vbml0b3JpbmcvVGVzdERyaXZlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9tb25pdG9yaW5nL1Rlc3REcml2ZXIuamF2YQppbmRleCA2MWU1OWYwLi44MTlmNzBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL21vbml0b3JpbmcvVGVzdERyaXZlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vbW9uaXRvcmluZy9UZXN0RHJpdmVyLmphdmEKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgbmV3IEVqYigpLAogICAgICAgICBuZXcgSmRiYygpLAogICAgICAgICBuZXcgSmlyYSgpLAotCW5ldyBXZWIoKSwKKyAgICBuZXcgV2ViKCksCiAgICAgICAgIG5ldyBUZWFyRG93bigpLAogICAgIH07CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL21vbml0b3JpbmcvV2ViLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL21vbml0b3JpbmcvV2ViLmphdmEKaW5kZXggYjNlYmZkYy4uZjYxMTRlNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9tb25pdG9yaW5nL1dlYi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vbW9uaXRvcmluZy9XZWIuamF2YQpAQCAtMjEsOCArMjEsOCBAQAogaW1wb3J0IHN0YXRpYyBhZG1pbi5tb25pdG9yaW5nLkNvbnN0YW50cy4qOwogCiAvKioKLSAqIFRlc3RzIHdlYiBtb25pdG9yaW5nLiAKLSAqIEBhdXRob3IgQ2FybGEgTW90dCAKKyAqIFRlc3RzIHdlYiBtb25pdG9yaW5nLgorICogQGF1dGhvciBDYXJsYSBNb3R0CiAgKi8KIHB1YmxpYyBjbGFzcyBXZWIgZXh0ZW5kcyBNb25UZXN0IHsKICAgICBAT3ZlcnJpZGUKQEAgLTMwLDcgKzMwLDcgQEAKICAgICAgICAgc2V0RHJpdmVyKGRyaXZlcik7CiAgICAgICAgIHJlcG9ydCh0cnVlLCAiSGVsbG8gZnJvbSBXZWIgTW9uaXRvcmluZyBUZXN0cyEiKTsKICAgICAgICAgYmFzaWNUZXN0cygpOwotCWpzcFRlc3RzKCk7CisgICAganNwVGVzdHMoKTsKICAgICAgICAgdGVzdE15V2ViKCk7CiAgICAgfQogCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIGZpbmFsIFN0cmluZyBnZXRtQXJnID0gIi5hcHBsaWNhdGlvbnMuSGVsbG9XZWIuc2VydmVyLnRvdGFsanNwY291bnQtY291bnQiOwogICAgICAgICBmaW5hbCBTdHJpbmcgZ2V0bUtleSA9ICIxIjsKIAotCXJlcG9ydCh3Z2V0KDI4MDgwLCB1cmkpLCAianNwbG9hZCBvbiAyODA4MC0iKTsgIC8vIGNvbW1hbmRzIGluY3JlbWVudCB0aGUgc2Vzc2lvbiBjb3VudAorICAgIHJlcG9ydCh3Z2V0KDI4MDgwLCB1cmkpLCAianNwbG9hZCBvbiAyODA4MC0iKTsgIC8vIGNvbW1hbmRzIGluY3JlbWVudCB0aGUgc2Vzc2lvbiBjb3VudAogICAgICAgICByZXBvcnQod2dldCgyODA4MSwgdXJpKSwgImpzcGxvYWQgb24gMjgwODEtIik7CiAKICAgICAgICAgcmVwb3J0KHZlcmlmeUdldG0oQ0xVU1RFUkVEX0lOU1RBTkNFX05BTUUxK2dldG1BcmcsIGdldG1LZXkpLCAianNwbG9hZHRlc3QtMSIpOwpAQCAtNjksNyArNjksNyBAQAogICAgIHByaXZhdGUgdm9pZCB0ZXN0TXlXZWIoKSB7CiAgICAgICAgIGZpbmFsIFN0cmluZyB1cmkgPSAiSGVsbG9XZWIvSGVsbG9Xb3JsZCI7CiAgICAgICAgIGZpbmFsIFN0cmluZyB1cmkyID0gIkhlbGxvV2ViL015U2VydmxldCI7Ci0JZmluYWwgU3RyaW5nIHNlc3Npb25Db3VudCA9Ii5hcHBsaWNhdGlvbnMuSGVsbG9XZWIuc2VydmVyLnNlc3Npb25zdG90YWwtY291bnQiOyAKKyAgICBmaW5hbCBTdHJpbmcgc2Vzc2lvbkNvdW50ID0iLmFwcGxpY2F0aW9ucy5IZWxsb1dlYi5zZXJ2ZXIuc2Vzc2lvbnN0b3RhbC1jb3VudCI7CiAgICAgICAgIGZpbmFsIFN0cmluZyBhY3RpdmF0ZWRDb3VudCA9Ii53ZWIuc2Vzc2lvbi5hY3RpdmF0ZWRzZXNzaW9uc3RvdGFsLWNvdW50IjsKIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL3V0aWwvSnBzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL3V0aWwvSnBzLmphdmEKaW5kZXggNzU1NDFkNC4uZTRjZDc1NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi91dGlsL0pwcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vdXRpbC9KcHMuamF2YQpAQCAtNDUsNyArNDUsNyBAQAogCiAgICAgLyoqCiAgICAgICogcmV0dXJuIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBwcm9jZXNzLWlkIG9mIGEgSlZNCi0gICAgICogQHBhcmFtIG1haW5DbGFzc05hbWUgVGhlIG1haW4gY2xhc3MgLSB0aGlzIGlzIGhvdyB3ZSBpZGVudGlmeSB0aGUgcmlnaHQgSlZNLiAgCisgICAgICogQHBhcmFtIG1haW5DbGFzc05hbWUgVGhlIG1haW4gY2xhc3MgLSB0aGlzIGlzIGhvdyB3ZSBpZGVudGlmeSB0aGUgcmlnaHQgSlZNLgogICAgICAqIFlvdSBjYW4gcGFzcyBpbiBhIGZ1bGx5LXF1YWxpZmllZCBuYW1lIG9yIGp1c3QgdGhlIGNsYXNzbmFtZS4KICAgICAgKiBFLmcuIGNvbS5zdW4uZW50ZXJwcmlzZS5nbGFzc2Zpc2guYm9vdHN0cmFwLkFTTWFpbiBhbmQgQVNNYWluIHdvcmsgdGhlIHNhbWUuCiAgICAgICogQHJldHVybiB0aGUgcHJvY2VzcyBpZCBpZiBwb3NzaWJsZSBvdGhlcndpc2UgMApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi91dGlsL1Byb2Nlc3NVdGlscy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi91dGlsL1Byb2Nlc3NVdGlscy5qYXZhCmluZGV4IDJmMmNkNDAuLjE4YWFiMTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vdXRpbC9Qcm9jZXNzVXRpbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL3V0aWwvUHJvY2Vzc1V0aWxzLmphdmEKQEAgLTE1NywxMCArMTU3LDEwIEBACiAgICAgICAgIHBtLmV4ZWN1dGUoKTsKICAgICAgICAgU3RyaW5nIG91dCA9IHBtLmdldFN0ZG91dCgpICsgcG0uZ2V0U3RkZXJyKCk7CiAKLSAgICAgICAgLyogb3V0cHV0IGlzIGVpdGhlciAKLSAgICAgICAgKDEpIAorICAgICAgICAvKiBvdXRwdXQgaXMgZWl0aGVyCisgICAgICAgICgxKQogICAgICAgICBJTkZPOiBObyB0YXNrcyBydW5uaW5nIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYS4KLSAgICAgICAgKDIpIAorICAgICAgICAoMikKICAgICAgICAgSW1hZ2UgTmFtZSAgICAgICAgICAgICAgICAgICBQSUQgU2Vzc2lvbiBOYW1lICAgICBTZXNzaW9uIyAgICBNZW0gVXNhZ2UKICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gPT09PT09PT09PT09PT09PSA9PT09PT09PSA9PT09PT09PT09PT0KICAgICAgICAgamF2YS5leGUgICAgICAgICAgICAgICAgICAgIDM3NjAgQ29uc29sZSAgICAgICAgICAgICAgICAgMCAgICAgNjQsMTkyIEsKQEAgLTIzMCwxOCArMjMwLDE4IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBkZWJ1ZzsKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNXaW5kb3dzKCkgewogICAgICAgICBTdHJpbmcgb3NuYW1lID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcy5uYW1lIik7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKG9zbmFtZSA9PSBudWxsIHx8IG9zbmFtZS5sZW5ndGgoKSA8PSAwKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKKwogICAgICAgICAvLyBjYXNlIGluc2Vuc2l0aXZlIGNvbXBhcmUuLi4KLSAgICAgICAgb3NuYW1lCT0gb3NuYW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgIAorICAgICAgICBvc25hbWUgICAgPSBvc25hbWUudG9Mb3dlckNhc2UoKTsKKwogICAgICAgICBpZihvc25hbWUuaW5kZXhPZigid2luZG93cyIpID49IDApCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHN0YXRpYyBib29sZWFuIG9rKFN0cmluZyBzKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL3V0aWwvU21hcnRGaWxlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL3V0aWwvU21hcnRGaWxlLmphdmEKaW5kZXggNGNjOTU4NS4uNWNhZjczMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi91dGlsL1NtYXJ0RmlsZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vdXRpbC9TbWFydEZpbGUuamF2YQpAQCAtMjQsNiArMjQsNiBAQAogICovCiBwdWJsaWMgY2xhc3MgU21hcnRGaWxlIHsKICAgICBzdGF0aWMgRmlsZSBzYW5pdGl6ZShGaWxlIGYpIHsKLQkJcmV0dXJuIGYuZ2V0QWJzb2x1dGVGaWxlKCk7Ci0JfQorICAgICAgICByZXR1cm4gZi5nZXRBYnNvbHV0ZUZpbGUoKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9iYXRjaC1kZXYtdGVzdHMvYmF0Y2gtY29tbWFuZHMtdGVzdHMvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JhdGNoLWRldi10ZXN0cy9iYXRjaC1jb21tYW5kcy10ZXN0cy9wb20ueG1sCmluZGV4IDFiNTFkMTUuLjQ0OGNmMDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JhdGNoLWRldi10ZXN0cy9iYXRjaC1jb21tYW5kcy10ZXN0cy9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JhdGNoLWRldi10ZXN0cy9iYXRjaC1jb21tYW5kcy10ZXN0cy9wb20ueG1sCkBAIC0yNCw3ICsyNCw3IEBACiAKICAgICA8cGFyZW50PgogICAgICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLm1haW48L2dyb3VwSWQ+Ci0gICAgCTxhcnRpZmFjdElkPmJhdGNoLWRldi10ZXN0czwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+YmF0Y2gtZGV2LXRlc3RzPC9hcnRpZmFjdElkPgogICAgICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8L3BhcmVudD4KICAgICA8YXJ0aWZhY3RJZD5iYXRjaC1jb21tYW5kcy10ZXN0czwvYXJ0aWZhY3RJZD4KQEAgLTM2LDUgKzM2LDUgQEAKICAgICAgICAgICAgIDxhcnRpZmFjdElkPmJhdGNoLXRlc3RzLXV0aWxzPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPC9kZXBlbmRlbmNpZXM+IAorICAgIDwvZGVwZW5kZW5jaWVzPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYmF0Y2gtZGV2LXRlc3RzL2JhdGNoLWNvbW1hbmRzLXRlc3RzL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9qYXZhZWU3L2JhdGNoL3Rlc3QvQmF0Y2hDb21tYW5kc1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JhdGNoLWRldi10ZXN0cy9iYXRjaC1jb21tYW5kcy10ZXN0cy9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvamF2YWVlNy9iYXRjaC90ZXN0L0JhdGNoQ29tbWFuZHNUZXN0LmphdmEKaW5kZXggMGVjYjJiOC4uYjZhNjgxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYmF0Y2gtZGV2LXRlc3RzL2JhdGNoLWNvbW1hbmRzLXRlc3RzL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9qYXZhZWU3L2JhdGNoL3Rlc3QvQmF0Y2hDb21tYW5kc1Rlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9iYXRjaC1kZXYtdGVzdHMvYmF0Y2gtY29tbWFuZHMtdGVzdHMvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2phdmFlZTcvYmF0Y2gvdGVzdC9CYXRjaENvbW1hbmRzVGVzdC5qYXZhCkBAIC00NDYsMTIgKzQ0NiwxMiBAQAogCiAgICAgICAgIENvbW1hbmRVdGlsIGNtZFdpdGhKdXN0TmFtZSA9IENvbW1hbmRVdGlsLmdldEluc3RhbmNlKCkuZXhlY3V0ZUNvbW1hbmRBbmRHZXRBc0xpc3QoImFzYWRtaW4iLAogICAgICAgICAgICAgICAgICJsaXN0LWJhdGNoLWpvYnMiLCAiLW8iLCAiam9ibmFtZSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqIGxpc3QtYmF0Y2gtam9icyAtbCA9PT4gIiArIHNpemUgKyAiOyAgIGxpc3QtYmF0Y2gtam9icyAtbyBqb2JuYW1lID09PiAiICsgY21kV2l0aEp1c3ROYW1lLnJlc3VsdCgpLnNpemUoKSk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKiogbGlzdC1iYXRjaC1qb2JzIC1sID09PiAiICsgc2l6ZSArICI7ICAgbGlzdC1iYXRjaC1qb2JzIC1vIGpvYm5hbWUgPT0+ICIgKyBjbWRXaXRoSnVzdE5hbWUucmVzdWx0KCkuc2l6ZSgpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKICAgICAgICAgYXNzZXJ0VHJ1ZShjbWQucmFuT0soKSk7CiAgICAgICAgIGFzc2VydFRydWUoY21kV2l0aEp1c3ROYW1lLnJhbk9LKCkgJiYgY21kV2l0aEp1c3ROYW1lLnJlc3VsdCgpLnNpemUoKSA9PSBjbWQucmVzdWx0KCkuc2l6ZSgpKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9iYXRjaC1kZXYtdGVzdHMvYmF0Y2gtdGVzdHMtdXRpbHMvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JhdGNoLWRldi10ZXN0cy9iYXRjaC10ZXN0cy11dGlscy9wb20ueG1sCmluZGV4IGZjNjVjZGEuLmQ4MGUyNDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JhdGNoLWRldi10ZXN0cy9iYXRjaC10ZXN0cy11dGlscy9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JhdGNoLWRldi10ZXN0cy9iYXRjaC10ZXN0cy11dGlscy9wb20ueG1sCkBAIC0yNCwxMCArMjQsMTAgQEAKIAogICAgIDxwYXJlbnQ+CiAgICAgICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2gubWFpbjwvZ3JvdXBJZD4KLSAgICAJPGFydGlmYWN0SWQ+YmF0Y2gtZGV2LXRlc3RzPC9hcnRpZmFjdElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5iYXRjaC1kZXYtdGVzdHM8L2FydGlmYWN0SWQ+CiAgICAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvcGFyZW50PgogICAgIDxhcnRpZmFjdElkPmJhdGNoLXRlc3RzLXV0aWxzPC9hcnRpZmFjdElkPgogICAgIDxwYWNrYWdpbmc+amFyPC9wYWNrYWdpbmc+Ci0gICAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JhdGNoLWRldi10ZXN0cy9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYmF0Y2gtZGV2LXRlc3RzL3BvbS54bWwKaW5kZXggZDAwOWY5OS4uNDA2ODlkZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYmF0Y2gtZGV2LXRlc3RzL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYmF0Y2gtZGV2LXRlc3RzL3BvbS54bWwKQEAgLTMwLDcgKzMwLDcgQEAKIAogICAgIDxhcnRpZmFjdElkPmJhdGNoLWRldi10ZXN0czwvYXJ0aWZhY3RJZD4KICAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgotICAgIAorCiAgICA8bW9kdWxlcz4KICAgICAgICA8bW9kdWxlPmJhdGNoLXRlc3RzLXV0aWxzPC9tb2R1bGU+CiAgICAgICAgPG1vZHVsZT5iYXRjaC1jb21tYW5kcy10ZXN0czwvbW9kdWxlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGJhYzExMjEuLmFiODdkOTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEzICsxNSwxMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZGV2dGVzdC1iYXRjaC1ibXQtY2h1bmstam9iIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYmVhbnMueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9iZWFucy54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJiYXRjaC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2JhdGNoLnhtbCIvPgpAQCAtMjksMTEgKzI5LDExIEBACiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYmF0Y2guam9icy5kaXIiIHZhbHVlPSJkZXNjcmlwdG9yL2JhdGNoLWpvYnMiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImJhdGNoX2RlcmJ5LnNxbCIgdmFsdWU9Ii4uLy4uL2JhdGNoX2RlcmJ5LnNxbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2J1aWxkLnhtbAppbmRleCA2MmY2MDYwLi5iY2Q2MGI1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2J1aWxkLnhtbApAQCAtMzgsNyArMzgsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTEsMTkgKzUxLDE5IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NsZXNzLmNsYXNzLCoqL1NsZXNzMzAuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImNvcHktYmF0Y2gtc3FsIiBkZXBlbmRzPSJidWlsZCI+Ci0gICAgCTxlY2hvIG1lc3NhZ2U9IioqKioqIENvcHkgJHtiYXRjaF9kZXJieS5zcWx9IHRvIFRhcmdldCBkaXI6ICR7ZW52LlMxQVNfSE9NRX0vbGliIi8+Ci0gICAgCTxjb3B5IGZpbGU9IiR7YmF0Y2hfZGVyYnkuc3FsfSIgdG9kaXI9IiR7ZW52LlMxQVNfSE9NRX0vbGliIi8+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPHRhcmdldCBuYW1lPSJjb3B5LWJhdGNoLXNxbCIgZGVwZW5kcz0iYnVpbGQiPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSIqKioqKiBDb3B5ICR7YmF0Y2hfZGVyYnkuc3FsfSB0byBUYXJnZXQgZGlyOiAke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2JhdGNoX2RlcmJ5LnNxbH0iIHRvZGlyPSIke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZmZmNzRhMC4uZDRkOGFkYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKIEBFSkIobmFtZT0iZWpiL0dHIiwgYmVhbkludGVyZmFjZT1TbGVzcy5jbGFzcykKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zNSwzMyArMzUsMzMgQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImJhdGNoLWNodW5rLXN0YXRlbGVzcyIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBARUpCKG5hbWU9ImVqYi9rayIpIFNsZXNzIHNsZXNzOwogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0dHIik7Ci0JICAgIGxvbmcgZXhlY3V0aW9uSWQgPSBzbGVzcy5zdWJtaXRKb2IoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqIEpvYklEOiAiICsgZXhlY3V0aW9uSWQgKyAiICoqKioqKioqKioqKioqKioqKiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwotCSAgICBTdHJpbmcgam9iQmF0Y2hTdGF0dXMgPSAiIjsKLQkgICAgZm9yIChpbnQgc2VjPTEwOyBzZWM+MDsgc2VjLS0pIHsKLQkgICAgICAgIHRyeSB7Ci0JCSAgICBqb2JCYXRjaFN0YXR1cyA9IHNsZXNzLmdldEpvYkV4aXRTdGF0dXMoZXhlY3V0aW9uSWQpOwotCQkgICAgaWYgKCEgIkNPTVBMRVRFRCIuZXF1YWxzKGpvYkJhdGNoU3RhdHVzKSkgewotCQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2lsbCBzbGVlcCBmb3IgIiArIHNlYyArICIgbW9yZSBzZWNvbmRzLi4uOiAiICsgam9iQmF0Y2hTdGF0dXMpOwotCQkgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMTAwMCk7Ci0JCSAgICB9Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQl9Ci0JICAgIH0KKyAgICAgICAgbG9uZyBleGVjdXRpb25JZCA9IHNsZXNzLnN1Ym1pdEpvYigpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKiogSm9iSUQ6ICIgKyBleGVjdXRpb25JZCArICIgKioqKioqKioqKioqKioqKioqIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CisgICAgICAgIFN0cmluZyBqb2JCYXRjaFN0YXR1cyA9ICIiOworICAgICAgICBmb3IgKGludCBzZWM9MTA7IHNlYz4wOyBzZWMtLSkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGpvYkJhdGNoU3RhdHVzID0gc2xlc3MuZ2V0Sm9iRXhpdFN0YXR1cyhleGVjdXRpb25JZCk7CisgICAgICAgICAgICBpZiAoISAiQ09NUExFVEVEIi5lcXVhbHMoam9iQmF0Y2hTdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXaWxsIHNsZWVwIGZvciAiICsgc2VjICsgIiBtb3JlIHNlY29uZHMuLi46ICIgKyBqb2JCYXRjaFN0YXR1cyk7CisgICAgICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMDAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJhdGNoLWNodW5rLXN0YXRlbGVzcyIsICgiQ09NUExFVEVEIi5lcXVhbHMoam9iQmF0Y2hTdGF0dXMpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYmF0Y2gtY2h1bmstc3RhdGVsZXNzIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvZGVzY3JpcHRvci9iYXRjaC1qb2JzL0NodW5rSm9iLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvZGVzY3JpcHRvci9iYXRjaC1qb2JzL0NodW5rSm9iLnhtbAppbmRleCBkNjhiM2Y2Li40ZGVjOTU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2Rlc2NyaXB0b3IvYmF0Y2gtam9icy9DaHVua0pvYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9kZXNjcmlwdG9yL2JhdGNoLWpvYnMvQ2h1bmtKb2IueG1sCkBAIC0yMCw5ICsyMCw5IEBACiA8am9iIGlkPSJibXQtY2h1bmstam9iIiB4bWxucz0iaHR0cHM6Ly9qYWthcnRhLmVlL3htbC9ucy9qYWthcnRhZWUiIHZlcnNpb249IjIuMCI+CiAgICAgPHN0ZXAgaWQ9InN0ZXAxIj4KICAgICAgICAgPGNodW5rIGl0ZW0tY291bnQ9IjMiPgotICAgICAgICAgICAgPHJlYWRlciByZWY9IlNpbXBsZUl0ZW1SZWFkZXIiPjwvcmVhZGVyPiAKKyAgICAgICAgICAgIDxyZWFkZXIgcmVmPSJTaW1wbGVJdGVtUmVhZGVyIj48L3JlYWRlcj4KICAgICAgICAgICAgIDxwcm9jZXNzb3IgcmVmPSJTaW1wbGVJdGVtUHJvY2Vzc29yIj48L3Byb2Nlc3Nvcj4KLSAgICAgICAgICAgIDx3cml0ZXIgcmVmPSJTaW1wbGVJdGVtV3JpdGVyIj48L3dyaXRlcj4gCisgICAgICAgICAgICA8d3JpdGVyIHJlZj0iU2ltcGxlSXRlbVdyaXRlciI+PC93cml0ZXI+CiAgICAgICAgIDwvY2h1bms+CiAgICAgPC9zdGVwPgogPC9qb2I+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jaHVuay9JZEdlbmVyYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY2h1bmsvSWRHZW5lcmF0b3IuamF2YQppbmRleCAxNTdlYTQwLi5iNmQzZjVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jaHVuay9JZEdlbmVyYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NodW5rL0lkR2VuZXJhdG9yLmphdmEKQEAgLTIxLDUgKzIxLDUgQEAKIHB1YmxpYyBpbnRlcmZhY2UgSWRHZW5lcmF0b3IgewogCiAgICAgcHVibGljIFN0cmluZyBuZXh0SWQoKTsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY2h1bmsvU2ltcGxlSWRHZW5lcmF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NodW5rL1NpbXBsZUlkR2VuZXJhdG9yLmphdmEKaW5kZXggNzgyYWM4NS4uM2M3NGI2OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY2h1bmsvU2ltcGxlSWRHZW5lcmF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jaHVuay9TaW1wbGVJZEdlbmVyYXRvci5qYXZhCkBAIC0yMiw5ICsyMiw5IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBTaW1wbGVJZEdlbmVyYXRvcgogICAgIGltcGxlbWVudHMgSWRHZW5lcmF0b3IgewotICAgIAorCiAgICAgcHJpdmF0ZSBBdG9taWNJbnRlZ2VyIGNvdW50ZXIgPSBuZXcgQXRvbWljSW50ZWdlcigwKTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgbmV4dElkKCkgewogICAgICAgICByZXR1cm4gIiIgKyBjb3VudGVyLmluY3JlbWVudEFuZEdldCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NodW5rL1NpbXBsZUl0ZW1Qcm9jZXNzb3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NodW5rL1NpbXBsZUl0ZW1Qcm9jZXNzb3IuamF2YQppbmRleCBmNDMwOGIwLi5jNTMzOWViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jaHVuay9TaW1wbGVJdGVtUHJvY2Vzc29yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY2h1bmsvU2ltcGxlSXRlbVByb2Nlc3Nvci5qYXZhCkBAIC0yMywxMiArMjMsMTIgQEAKIAogLy8gICAgQEluamVjdAogLy8gICAgSWRHZW5lcmF0b3IgaWRHZW47Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgU3RyaW5nIHByb2Nlc3NJdGVtKE9iamVjdCBvYmopIHRocm93cyBFeGNlcHRpb24gewotCVN0cmluZyB0ID0gKFN0cmluZykgb2JqOworICAgIFN0cmluZyB0ID0gKFN0cmluZykgb2JqOwogICAgICAgICBTdHJpbmdbXSByZWNvcmQgPSB0LnNwbGl0KCIsICIpOwotICAgICAgICAKKwogICAgIC8vRU1QLUlELCBNT05USC1ZRUFSLCBTQUxBUlksIFRBWCUsIE1FRElDQVJFJSwgT1RIRVIKICAgICAgICAgaW50IHNhbGFyeSA9IEludGVnZXIudmFsdWVPZihyZWNvcmRbMl0pOwogICAgICAgICBkb3VibGUgdGF4ID0gRG91YmxlLnZhbHVlT2YocmVjb3JkWzNdKTsKQEAgLTM5LDUgKzM5LDUgQEAKICAgICAgICAgc2IuYXBwZW5kKCIsICIpLmFwcGVuZChzYWxhcnkgLSAoc2FsYXJ5ICogdGF4IC8gMTAwKSAtIChzYWxhcnkgKiBtZWRpQ2FyZSAvIDEwMCkpOwogICAgICAgICByZXR1cm4gIHNiLnRvU3RyaW5nKCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jaHVuay9TaW1wbGVJdGVtUmVhZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jaHVuay9TaW1wbGVJdGVtUmVhZGVyLmphdmEKaW5kZXggNzAyYjcxOC4uNmU5M2E5ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY2h1bmsvU2ltcGxlSXRlbVJlYWRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NodW5rL1NpbXBsZUl0ZW1SZWFkZXIuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogICAgIGltcGxlbWVudHMgamFrYXJ0YS5iYXRjaC5hcGkuY2h1bmsuSXRlbVJlYWRlciB7CiAKICAgICBwcml2YXRlIGludCBpbmRleCA9IDA7Ci0gICAgCisKICAgICAvL0VNUC1JRCwgTU9OVEgtWUVBUiwgU0FMQVJZLCBUQVglLCBNRURJQ0FSRSUsIE9USEVSCiAgICAgcHJpdmF0ZSBTdHJpbmdbXSBpdGVtcyA9IG5ldyBTdHJpbmdbXSB7CiAgICAgICAgICIxMjAtMDEsIEpBTi0yMDEzLCA4MDAwLCAyNywgMywgMCIsCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgICIxMjAtMDcsIEpBTi0yMDEzLCAxMTAwMCwgMzYsIDUsIDAiLAogICAgICAgICAiMTIwLTA4LCBKQU4tMjAxMywgMTE1MDAsIDM2LCA1LCAwIiwKICAgICB9OwotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb3BlbihTZXJpYWxpemFibGUgZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgfQpAQCAtNTEsNSArNTEsNSBAQAogICAgIHB1YmxpYyBTZXJpYWxpemFibGUgY2hlY2twb2ludEluZm8oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jaHVuay9TaW1wbGVJdGVtV3JpdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jaHVuay9TaW1wbGVJdGVtV3JpdGVyLmphdmEKaW5kZXggNGZiNWVkZC4uZjZjYWQ2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY2h1bmsvU2ltcGxlSXRlbVdyaXRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NodW5rL1NpbXBsZUl0ZW1Xcml0ZXIuamF2YQpAQCAtMTksNyArMTksNyBAQAogQGpha2FydGEuaW5qZWN0Lk5hbWVkKCJTaW1wbGVJdGVtV3JpdGVyIikKIHB1YmxpYyBjbGFzcyBTaW1wbGVJdGVtV3JpdGVyCiAgICAgaW1wbGVtZW50cyBqYWthcnRhLmJhdGNoLmFwaS5jaHVuay5JdGVtV3JpdGVyIHsKLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9wZW4oU2VyaWFsaXphYmxlIGUpIHRocm93cyBFeGNlcHRpb24gewogICAgIH0KQEAgLTMxLDcgKzMxLDcgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCB3cml0ZUl0ZW1zKExpc3QgbHN0KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCJTaW1wbGVJdGVtV3JpdGVyOiIpOwotCUxpc3Q8U3RyaW5nPiBsaXN0ID0gKExpc3Q8U3RyaW5nPikgbHN0OworICAgIExpc3Q8U3RyaW5nPiBsaXN0ID0gKExpc3Q8U3RyaW5nPikgbHN0OwogICAgICAgICBmb3IgKFN0cmluZyBzIDogbGlzdCkgewogICAgICAgICAgICAgc2IuYXBwZW5kKCIgIikuYXBwZW5kKHMpOwogICAgICAgICB9CkBAIC00Miw1ICs0Miw1IEBACiAgICAgcHVibGljIFNlcmlhbGl6YWJsZSBjaGVja3BvaW50SW5mbygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NodW5rL1NsZXNzQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY2h1bmsvU2xlc3NCZWFuLmphdmEKaW5kZXggYTFlMDllNy4uNzcxNzkzNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY2h1bmsvU2xlc3NCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY2h1bmsvU2xlc3NCZWFuLmphdmEKQEAgLTM2LDMyICszNiwzMiBAQAogICAgIH0KIAogICAgIHB1YmxpYyBsb25nIHN1Ym1pdEpvYigpIHsKLQl0cnkgewotCSAgSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKKyAgICB0cnkgeworICAgICAgSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKIAotCSAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JICBmb3IgKGludCBpPTA7IGk8OTsgaSsrKQotCQlwcm9wcy5wdXQoIkNodW5rLUtleS0iKyBpLCAiQ2h1bmstVmFsdWUtIiArIGkpOwotCSAgcmV0dXJuICBqb2JPcGVyYXRvci5zdGFydCgiQ2h1bmtKb2IiLCBwcm9wcyk7CisgICAgICBQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKyAgICAgIGZvciAoaW50IGk9MDsgaTw5OyBpKyspCisgICAgICAgIHByb3BzLnB1dCgiQ2h1bmstS2V5LSIrIGksICJDaHVuay1WYWx1ZS0iICsgaSk7CisgICAgICByZXR1cm4gIGpvYk9wZXJhdG9yLnN0YXJ0KCJDaHVua0pvYiIsIHByb3BzKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7Ci0JfQorICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldEpvYkV4aXRTdGF0dXMobG9uZyBleGVjdXRpb25JZCkgewotCXRyeSB7Ci0JICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOwotCSAgSm9iRXhlY3V0aW9uIGplID0gIGpvYk9wZXJhdG9yLmdldEpvYkV4ZWN1dGlvbihleGVjdXRpb25JZCk7Ci0JICByZXR1cm4gamUuZ2V0RXhpdFN0YXR1cygpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOwotCX0KKyAgICB0cnkgeworICAgICAgSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKKyAgICAgIEpvYkV4ZWN1dGlvbiBqZSA9ICBqb2JPcGVyYXRvci5nZXRKb2JFeGVjdXRpb24oZXhlY3V0aW9uSWQpOworICAgICAgcmV0dXJuIGplLmdldEV4aXRTdGF0dXMoKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKKyAgICB9CiAKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB3YXNFamJDcmVhdGVDYWxsZWQoKSB7Ci0JcmV0dXJuIGVqYkNyZWF0ZUNhbGxlZDsKKyAgICByZXR1cm4gZWpiQ3JlYXRlQ2FsbGVkOwogICAgIH0KIAotCQkJCQkJCQkJCQkJCQkgICAgICAgICAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYnVpbGQueG1sCmluZGV4IDRmN2FlODEuLjBhYzg3NmMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9idWlsZC54bWwKQEAgLTMyLDIyICszMiwyMiBAQAogPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCI+Ci0JPGRlbGV0ZT4KKyAgICA8ZGVsZXRlPgogICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9InRlc3RfcmVzdWx0cyoiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxkZWxldGU+CiAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9Iioub3V0cHV0Ii8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8cmVjb3JkIG5hbWU9ImJhdGNoLm91dHB1dCIgYWN0aW9uPSJzdGFydCIgLz4KLTwhLS0JPGFudCBkaXI9ImJhdGNoLWRldi10ZXN0cyIgdGFyZ2V0PSJhbGwiLz4gIC0tPgotCTxhbnQgZGlyPSJibXQtY2h1bmstam9iIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJjbXQtY2h1bmstam9iIiB0YXJnZXQ9ImFsbCIvPgotPCEtLQk8YW50IGRpcj0icGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcyIgdGFyZ2V0PSJhbGwiLz4gIAotCTxhbnQgZGlyPSJzaW1wbGUtYmF0Y2hsZXQiIHRhcmdldD0iYWxsIi8+IC0tPgotCTxhbnQgZGlyPSJzaW1wbGUtdmFsaWRhdGlvbi10ZXN0IiB0YXJnZXQ9ImFsbCIvPgotPCEtLQk8YW50IGRpcj0idHdvLXN0ZXBzLWpvYiIgdGFyZ2V0PSJhbGwiLz4gICAtLT4KLQk8cmVjb3JkIG5hbWU9ImJhdGNoLm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgotCQorPCEtLSAgICA8YW50IGRpcj0iYmF0Y2gtZGV2LXRlc3RzIiB0YXJnZXQ9ImFsbCIvPiAgLS0+CisgICAgPGFudCBkaXI9ImJtdC1jaHVuay1qb2IiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImNtdC1jaHVuay1qb2IiIHRhcmdldD0iYWxsIi8+Cis8IS0tICAgIDxhbnQgZGlyPSJwYXktcm9sbC1qb2Itd2l0aC1lamIvc3RhdGVsZXNzIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJzaW1wbGUtYmF0Y2hsZXQiIHRhcmdldD0iYWxsIi8+IC0tPgorICAgIDxhbnQgZGlyPSJzaW1wbGUtdmFsaWRhdGlvbi10ZXN0IiB0YXJnZXQ9ImFsbCIvPgorPCEtLSAgICA8YW50IGRpcj0idHdvLXN0ZXBzLWpvYiIgdGFyZ2V0PSJhbGwiLz4gICAtLT4KKyAgICA8cmVjb3JkIG5hbWU9ImJhdGNoLm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgorCiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+Ci0JCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvYnVpbGQucHJvcGVydGllcwppbmRleCA2NzgxNzA4Li43NDJjOGJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMyArMTUsMTMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImJhdGNoLWNtdC1jaHVuayIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImJlYW5zLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYmVhbnMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYmF0Y2gueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9iYXRjaC54bWwiLz4KQEAgLTI5LDExICsyOSwxMSBAQAogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImJhdGNoLmpvYnMuZGlyIiB2YWx1ZT0iZGVzY3JpcHRvci9iYXRjaC1qb2JzIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJiYXRjaF9kZXJieS5zcWwiIHZhbHVlPSIuLi8uLi9iYXRjaF9kZXJieS5zcWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9idWlsZC54bWwKaW5kZXggMTY4MWNiNC4uNWM2Njg0OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9idWlsZC54bWwKQEAgLTM4LDcgKzM4LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUxLDE5ICs1MSwxOSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9Kb2JTdWJtaXR0ZXIuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImNvcHktYmF0Y2gtc3FsIiBkZXBlbmRzPSJidWlsZCI+Ci0gICAgCTxlY2hvIG1lc3NhZ2U9IioqKioqIENvcHkgJHtiYXRjaF9kZXJieS5zcWx9IHRvIFRhcmdldCBkaXI6ICR7ZW52LlMxQVNfSE9NRX0vbGliIi8+Ci0gICAgCTxjb3B5IGZpbGU9IiR7YmF0Y2hfZGVyYnkuc3FsfSIgdG9kaXI9IiR7ZW52LlMxQVNfSE9NRX0vbGliIi8+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPHRhcmdldCBuYW1lPSJjb3B5LWJhdGNoLXNxbCIgZGVwZW5kcz0iYnVpbGQiPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSIqKioqKiBDb3B5ICR7YmF0Y2hfZGVyYnkuc3FsfSB0byBUYXJnZXQgZGlyOiAke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2JhdGNoX2RlcmJ5LnNxbH0iIHRvZGlyPSIke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggODY3MjVkOC4uMDNiNjE2YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTM0LDQ1ICszNCw0NSBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiYmF0Y2gtY210LWNodW5rIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgSm9iU3VibWl0dGVyIGpvYlN1Ym1pdHRlcjsKIAogICAgIGludCBNQVhfSk9CX1NJWkUgPSAyOwogICAgIGxvbmdbXSBleGVjdXRpb25JZHMgPSBuZXcgbG9uZ1tNQVhfSk9CX1NJWkVdOwogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotCWZvciAoaW50IGk9MDsgaTxNQVhfSk9CX1NJWkU7IGkrKykKLQkgICAgZXhlY3V0aW9uSWRzW2ldID0gLTE7CisgICAgZm9yIChpbnQgaT0wOyBpPE1BWF9KT0JfU0laRTsgaSsrKQorICAgICAgICBleGVjdXRpb25JZHNbaV0gPSAtMTsKICAgICAgICAgc3VibWl0Sm9icygpOwogICAgICAgICBjaGVja0pvYkV4ZWN1dGlvbihleGVjdXRpb25JZHNbMF0pOwotICAgIAlpc0pvYkV4ZWN1dGlvbk9LKGV4ZWN1dGlvbklkc1swXSk7Ci0gICAgCWNoZWNrSWZPbmx5Sm9ic0Zyb21UaGlzQXBwQXJlVmlzaWJsZSgpOworICAgICAgICBpc0pvYkV4ZWN1dGlvbk9LKGV4ZWN1dGlvbklkc1swXSk7CisgICAgICAgIGNoZWNrSWZPbmx5Sm9ic0Zyb21UaGlzQXBwQXJlVmlzaWJsZSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHN1Ym1pdEpvYnMoKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIGZvciAoaW50IGkgPSAwOyBpPCBNQVhfSk9CX1NJWkU7IGkrKykgewotCSAgICAgICAgZXhlY3V0aW9uSWRzW2ldID0gam9iU3VibWl0dGVyLnN1Ym1pdEpvYigiQ01ULUNodW5rSm9iIik7Ci0JICAgICAgICBjaGVja0JhdGNoSm9iU3RhdHVzKGV4ZWN1dGlvbklkc1tpXSwgMTApOwotCSAgICB9Ci0JICAgIGJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLQkgICAgZm9yIChpbnQgaT0wOyBpPE1BWF9KT0JfU0laRTsgaSsrKSB7Ci0JICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBleGVjdXRpb25JZHNbaV0gIT0gLTE7Ci0JICAgIH0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGk8IE1BWF9KT0JfU0laRTsgaSsrKSB7CisgICAgICAgICAgICBleGVjdXRpb25JZHNbaV0gPSBqb2JTdWJtaXR0ZXIuc3VibWl0Sm9iKCJDTVQtQ2h1bmtKb2IiKTsKKyAgICAgICAgICAgIGNoZWNrQmF0Y2hKb2JTdGF0dXMoZXhlY3V0aW9uSWRzW2ldLCAxMCk7CisgICAgICAgIH0KKyAgICAgICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOworICAgICAgICBmb3IgKGludCBpPTA7IGk8TUFYX0pPQl9TSVpFOyBpKyspIHsKKyAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIGV4ZWN1dGlvbklkc1tpXSAhPSAtMTsKKyAgICAgICAgfQogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJhdGNoLWNtdC1jaHVuay10ZXN0MSIsIChyZXN1bHQgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJiYXRjaC1jbXQtY2h1bmstdGVzdDEiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgY2hlY2tKb2JFeGVjdXRpb24obG9uZyBleGVjdXRpb25JZCkgewogICAgICAgICB0cnkgewotCSAgICBib29sZWFuIHN0YXR1cyA9IHRydWU7Ci0JICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gbWFwID0gam9iU3VibWl0dGVyLnRvTWFwKGV4ZWN1dGlvbklkKTsKKyAgICAgICAgYm9vbGVhbiBzdGF0dXMgPSB0cnVlOworICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IGpvYlN1Ym1pdHRlci50b01hcChleGVjdXRpb25JZCk7CiAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJiYXRjaC1jbXQtc3RhdHVzLWNoZWNrRXhlLWpvYk5hbWUiLCBtYXAuZ2V0KCJqb2JOYW1lIikgIT0gbnVsbCA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYmF0Y2gtY210LXN0YXR1cy1jaGVja0V4ZS1hcHBOYW1lIiwgbWFwLmdldCgiYXBwTmFtZSIpICE9IG51bGwgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwpAQCAtODMsNyArODMsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJhdGNoLWNtdC1zdGF0dXMtY2hlY2tFeGUtYmF0Y2hTdGF0dXMiLCBtYXAuZ2V0KCJiYXRjaFN0YXR1cyIpICE9IG51bGwgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJhdGNoLWNtdC1zdGF0dXMtY2hlY2tFeGUtZW5kVGltZSIsIG1hcC5nZXQoImVuZFRpbWUiKSAhPSBudWxsID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKIAotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJhdGNoLWNtdC1jaHVuay10ZXN0MyIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9CkBAIC05NCwxOCArOTQsMTggQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja09uZUpvYkV4ZWN1dGlvbihsb25nIGV4ZWN1dGlvbklkKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gbWFwID0gam9iU3VibWl0dGVyLnRvTWFwKGV4ZWN1dGlvbklkKTsKLQkgICAgcmV0dXJuIG1hcCAhPSBudWxsICYmCi0gICAgICAgICAgICAJbWFwLmdldCgiam9iTmFtZSIpICE9IG51bGwgJiYKLSAgICAgICAgICAgIAltYXAuZ2V0KCJhcHBOYW1lIikgIT0gbnVsbCAmJgotICAgICAgICAgICAgCW1hcC5nZXQoImluc3RhbmNlQ291bnQiKSAhPSBudWxsICYmCi0gICAgICAgICAgICAJbWFwLmdldCgiaW5zdGFuY2VJRCIpICE9IG51bGwgJiYKLSAgICAgICAgICAgIAltYXAuZ2V0KCJleGVjdXRpb25JRCIpICE9IG51bGwgJiYKLSAgICAgICAgICAgIAltYXAuZ2V0KCJzdGFydFRpbWUiKSAhPSBudWxsICYmCi0gICAgICAgICAgICAJbWFwLmdldCgiYmF0Y2hTdGF0dXMiKSAhPSBudWxsICYmCi0gICAgICAgICAgICAJbWFwLmdldCgiZW5kVGltZSIpICE9IG51bGw7CisgICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gbWFwID0gam9iU3VibWl0dGVyLnRvTWFwKGV4ZWN1dGlvbklkKTsKKyAgICAgICAgcmV0dXJuIG1hcCAhPSBudWxsICYmCisgICAgICAgICAgICAgICAgbWFwLmdldCgiam9iTmFtZSIpICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICBtYXAuZ2V0KCJhcHBOYW1lIikgIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgIG1hcC5nZXQoImluc3RhbmNlQ291bnQiKSAhPSBudWxsICYmCisgICAgICAgICAgICAgICAgbWFwLmdldCgiaW5zdGFuY2VJRCIpICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICBtYXAuZ2V0KCJleGVjdXRpb25JRCIpICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICBtYXAuZ2V0KCJzdGFydFRpbWUiKSAhPSBudWxsICYmCisgICAgICAgICAgICAgICAgbWFwLmdldCgiYmF0Y2hTdGF0dXMiKSAhPSBudWxsICYmCisgICAgICAgICAgICAgICAgbWFwLmdldCgiZW5kVGltZSIpICE9IG51bGw7CiAKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKIAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExMywzNyArMTEzLDM3IEBACiAKICAgICBwdWJsaWMgdm9pZCBjaGVja0lmT25seUpvYnNGcm9tVGhpc0FwcEFyZVZpc2libGUoKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIGJvb2xlYW4gc3RhdHVzID0gdHJ1ZTsKKyAgICAgICAgYm9vbGVhbiBzdGF0dXMgPSB0cnVlOwogICAgICAgICAgICAgZm9yIChsb25nIGV4ZUlkIDogam9iU3VibWl0dGVyLmdldEFsbEV4ZWN1dGlvbklkcyhudWxsKSkgewotCSAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBtYXAgPSBqb2JTdWJtaXR0ZXIudG9NYXAoZXhlSWQpOwotCQlTdHJpbmcgam9iTmFtZSA9IG1hcC5nZXQoImpvYk5hbWUiKTsKLQkJU3RyaW5nIGFwcE5hbWUgPSBtYXAuZ2V0KCJhcHBOYW1lIik7Ci0JICAgICAgICBpZiAoIWpvYk5hbWUuc3RhcnRzV2l0aCgiY210LWNodW5rLWpvYiIpIHx8ICFhcHBOYW1lLnN0YXJ0c1dpdGgoInNlcnZlci1jb25maWc6YmF0Y2gtY210LWNodW5rQXBwIikpIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqIEpvYiBGcm9tIGFub3RoZXIgYXBwPyAiICsgam9iTmFtZSArICI7ICIgKyBhcHBOYW1lICsgIiAqKioiKTsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKLQkJICAgIHN0YXR1cyA9IGZhbHNlOwotCQkgICAgYnJlYWs7Ci0JCX0KLQkgICAgfQorICAgICAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBtYXAgPSBqb2JTdWJtaXR0ZXIudG9NYXAoZXhlSWQpOworICAgICAgICBTdHJpbmcgam9iTmFtZSA9IG1hcC5nZXQoImpvYk5hbWUiKTsKKyAgICAgICAgU3RyaW5nIGFwcE5hbWUgPSBtYXAuZ2V0KCJhcHBOYW1lIik7CisgICAgICAgICAgICBpZiAoIWpvYk5hbWUuc3RhcnRzV2l0aCgiY210LWNodW5rLWpvYiIpIHx8ICFhcHBOYW1lLnN0YXJ0c1dpdGgoInNlcnZlci1jb25maWc6YmF0Y2gtY210LWNodW5rQXBwIikpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqIEpvYiBGcm9tIGFub3RoZXIgYXBwPyAiICsgam9iTmFtZSArICI7ICIgKyBhcHBOYW1lICsgIiAqKioiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJhdGNoLWNtdC1jaHVuay1jaGVja0lmT25seUpvYnNGcm9tVGhpc0FwcEFyZVZpc2libGUiLCAoc3RhdHVzID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYmF0Y2gtY210LWNodW5rLWNoZWNrSWZPbmx5Sm9ic0Zyb21UaGlzQXBwQXJlVmlzaWJsZSIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBjaGVja0JhdGNoSm9iU3RhdHVzKGxvbmcgZXhlY3V0aW9uSWQsIGludCBzZWMpIHsKLQl3aGlsZSAoc2VjLS0gPiAwKSB7CisgICAgd2hpbGUgKHNlYy0tID4gMCkgewogICAgICAgICAgICAgdHJ5IHsKLQkJU3RyaW5nIHN0YXR1cyA9IGpvYlN1Ym1pdHRlci5nZXRKb2JFeGl0U3RhdHVzKGV4ZWN1dGlvbklkKTsKLQkJaWYgKCJDT01QTEVURUQiLmVxdWFsc0lnbm9yZUNhc2Uoc3RhdHVzKSB8fCAiRkFJTEVEIi5lcXVhbHNJZ25vcmVDYXNlKHN0YXR1cykpIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKiogY2hlY2tCYXRjaEpvYlN0YXR1c1siICsgZXhlY3V0aW9uSWQgKyAiXSAgPT0+ICIgKyBzdGF0dXMpOwotCQkgICAgYnJlYWs7Ci0JCX0KKyAgICAgICAgU3RyaW5nIHN0YXR1cyA9IGpvYlN1Ym1pdHRlci5nZXRKb2JFeGl0U3RhdHVzKGV4ZWN1dGlvbklkKTsKKyAgICAgICAgaWYgKCJDT01QTEVURUQiLmVxdWFsc0lnbm9yZUNhc2Uoc3RhdHVzKSB8fCAiRkFJTEVEIi5lcXVhbHNJZ25vcmVDYXNlKHN0YXR1cykpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKiogY2hlY2tCYXRjaEpvYlN0YXR1c1siICsgZXhlY3V0aW9uSWQgKyAiXSAgPT0+ICIgKyBzdGF0dXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldpbGwgc2xlZXAgZm9yICIgKyBzZWMgKyAiIG1vcmUgc2Vjb25kcy4uLiIpOwogICAgICAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMTAwMCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgfQorICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvZGVzY3JpcHRvci9iYXRjaC1qb2JzL0NNVC1DaHVua0pvYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2Rlc2NyaXB0b3IvYmF0Y2gtam9icy9DTVQtQ2h1bmtKb2IueG1sCmluZGV4IGYwZDQyMGEuLmI4NDU2YTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvZGVzY3JpcHRvci9iYXRjaC1qb2JzL0NNVC1DaHVua0pvYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9kZXNjcmlwdG9yL2JhdGNoLWpvYnMvQ01ULUNodW5rSm9iLnhtbApAQCAtMjAsOSArMjAsOSBAQAogPGpvYiBpZD0iY210LWNodW5rLWpvYiIgeG1sbnM9Imh0dHBzOi8vamFrYXJ0YS5lZS94bWwvbnMvamFrYXJ0YWVlIiB2ZXJzaW9uPSIyLjAiPgogICAgIDxzdGVwIGlkPSJzdGVwMSI+CiAgICAgICAgIDxjaHVuayBpdGVtLWNvdW50PSIzIj4KLSAgICAgICAgICAgIDxyZWFkZXIgcmVmPSJTaW1wbGVJdGVtUmVhZGVyIj48L3JlYWRlcj4gCisgICAgICAgICAgICA8cmVhZGVyIHJlZj0iU2ltcGxlSXRlbVJlYWRlciI+PC9yZWFkZXI+CiAgICAgICAgICAgICA8cHJvY2Vzc29yIHJlZj0iU2ltcGxlSXRlbVByb2Nlc3NvciI+PC9wcm9jZXNzb3I+Ci0gICAgICAgICAgICA8d3JpdGVyIHJlZj0iU2ltcGxlSXRlbVdyaXRlciI+PC93cml0ZXI+IAorICAgICAgICAgICAgPHdyaXRlciByZWY9IlNpbXBsZUl0ZW1Xcml0ZXIiPjwvd3JpdGVyPgogICAgICAgICA8L2NodW5rPgogICAgIDwvc3RlcD4KIDwvam9iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL0lkR2VuZXJhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvSWRHZW5lcmF0b3IuamF2YQppbmRleCA3ODIzMjQ5Li4zOTE2OGE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvSWRHZW5lcmF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvSWRHZW5lcmF0b3IuamF2YQpAQCAtMjEsNSArMjEsNSBAQAogcHVibGljIGludGVyZmFjZSBJZEdlbmVyYXRvciB7CiAKICAgICBwdWJsaWMgU3RyaW5nIG5leHRJZCgpOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvSm9iU3VibWl0dGVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL0pvYlN1Ym1pdHRlckJlYW4uamF2YQppbmRleCA5NTlhM2FjLi5hYTVhNjljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvSm9iU3VibWl0dGVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9Kb2JTdWJtaXR0ZXJCZWFuLmphdmEKQEAgLTQ1LDc1ICs0NSw3NSBAQAogICAgIH0KIAogICAgIHB1YmxpYyBsb25nIHN1Ym1pdEpvYihTdHJpbmcgam9iTmFtZSkgewotCXRyeSB7Ci0JICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOworICAgIHRyeSB7CisgICAgICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOwogCi0JICBQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKLQkgIGZvciAoaW50IGk9MDsgaTwzOyBpKyspCi0JCXByb3BzLnB1dChqb2JOYW1lICsgIi1LZXktIiArIGksIGpvYk5hbWUrIi1WYWx1ZS0iICsgaSk7Ci0JICByZXR1cm4gIGpvYk9wZXJhdG9yLnN0YXJ0KGpvYk5hbWUsIHByb3BzKTsKKyAgICAgIFByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworICAgICAgZm9yIChpbnQgaT0wOyBpPDM7IGkrKykKKyAgICAgICAgcHJvcHMucHV0KGpvYk5hbWUgKyAiLUtleS0iICsgaSwgam9iTmFtZSsiLVZhbHVlLSIgKyBpKTsKKyAgICAgIHJldHVybiAgam9iT3BlcmF0b3Iuc3RhcnQoam9iTmFtZSwgcHJvcHMpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKLQl9CisgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Sm9iRXhpdFN0YXR1cyhsb25nIGV4ZWN1dGlvbklkKSB7Ci0JdHJ5IHsKLQkgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7Ci0JICBKb2JFeGVjdXRpb24gamUgPSAgam9iT3BlcmF0b3IuZ2V0Sm9iRXhlY3V0aW9uKGV4ZWN1dGlvbklkKTsKLQkgIHJldHVybiBqZS5nZXRFeGl0U3RhdHVzKCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7Ci0JfQorICAgIHRyeSB7CisgICAgICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOworICAgICAgSm9iRXhlY3V0aW9uIGplID0gIGpvYk9wZXJhdG9yLmdldEpvYkV4ZWN1dGlvbihleGVjdXRpb25JZCk7CisgICAgICByZXR1cm4gamUuZ2V0RXhpdFN0YXR1cygpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOworICAgIH0KIAogICAgIH0KIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uPFN0cmluZz4gbGlzdEpvYnMoYm9vbGVhbiB1c2VMb25nRm9ybWF0KSB7Ci0JdHJ5IHsKLQkgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7Ci0JICBTZXQ8U3RyaW5nPiBqb2JzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotCSAgaWYgKCF1c2VMb25nRm9ybWF0KSB7Ci0JICAgICAgZm9yIChTdHJpbmcgam9iTmFtZSA6IGpvYk9wZXJhdG9yLmdldEpvYk5hbWVzKCkpIHsKLQkgICAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0JCSAgc2IuYXBwZW5kKGpvYk5hbWUpLmFwcGVuZCgiICIpLmFwcGVuZChqb2JPcGVyYXRvci5nZXRKb2JJbnN0YW5jZUNvdW50KGpvYk5hbWUpKTsKLQkJICBqb2JzLmFkZChzYi50b1N0cmluZygpKTsKLQkgICAgIH0KKyAgICB0cnkgeworICAgICAgSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKKyAgICAgIFNldDxTdHJpbmc+IGpvYnMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisgICAgICBpZiAoIXVzZUxvbmdGb3JtYXQpIHsKKyAgICAgICAgICBmb3IgKFN0cmluZyBqb2JOYW1lIDogam9iT3BlcmF0b3IuZ2V0Sm9iTmFtZXMoKSkgeworICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgICBzYi5hcHBlbmQoam9iTmFtZSkuYXBwZW5kKCIgIikuYXBwZW5kKGpvYk9wZXJhdG9yLmdldEpvYkluc3RhbmNlQ291bnQoam9iTmFtZSkpOworICAgICAgICAgIGpvYnMuYWRkKHNiLnRvU3RyaW5nKCkpOworICAgICAgICAgfQogICAgICAgICAgIH0gZWxzZSB7Ci0JICAgICBpbnQgaW5kZXggPSAwOwotCSAgICAgZm9yIChTdHJpbmcgam9iTmFtZSA6IGpvYk9wZXJhdG9yLmdldEpvYk5hbWVzKCkpIHsKLQkJTGlzdDxKb2JJbnN0YW5jZT4gZXhlID0gam9iT3BlcmF0b3IuZ2V0Sm9iSW5zdGFuY2VzKGpvYk5hbWUsIDAsIEludGVnZXIuTUFYX1ZBTFVFIC0gMSk7Ci0JCWlmIChleGUgIT0gbnVsbCkgewotCQkgICBmb3IgKEpvYkluc3RhbmNlIGppIDogZXhlKSB7Ci0JCSAgICAgIGZvciAoSm9iRXhlY3V0aW9uIGplIDogam9iT3BlcmF0b3IuZ2V0Sm9iRXhlY3V0aW9ucyhqaSkpIHsKLQkgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgIGludCBpbmRleCA9IDA7CisgICAgICAgICBmb3IgKFN0cmluZyBqb2JOYW1lIDogam9iT3BlcmF0b3IuZ2V0Sm9iTmFtZXMoKSkgeworICAgICAgICBMaXN0PEpvYkluc3RhbmNlPiBleGUgPSBqb2JPcGVyYXRvci5nZXRKb2JJbnN0YW5jZXMoam9iTmFtZSwgMCwgSW50ZWdlci5NQVhfVkFMVUUgLSAxKTsKKyAgICAgICAgaWYgKGV4ZSAhPSBudWxsKSB7CisgICAgICAgICAgIGZvciAoSm9iSW5zdGFuY2UgamkgOiBleGUpIHsKKyAgICAgICAgICAgICAgZm9yIChKb2JFeGVjdXRpb24gamUgOiBqb2JPcGVyYXRvci5nZXRKb2JFeGVjdXRpb25zKGppKSkgeworICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKGluZGV4KyspLmFwcGVuZCgiICIpLmFwcGVuZChqb2JOYW1lKS5hcHBlbmQoIiAiKS5hcHBlbmQoKChUYWdnZWRKb2JFeGVjdXRpb24pIGplKS5nZXRUYWdOYW1lKCkpCi0JCQkgICAgICAJLmFwcGVuZCgiICIpLmFwcGVuZChqZS5nZXRCYXRjaFN0YXR1cygpKS5hcHBlbmQoIiAiKS5hcHBlbmQoamUuZ2V0RXhpdFN0YXR1cygpKTsKLQkgICAgICAgICAgICAgICAgICAgICAgam9icy5hZGQoc2IudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZCgiICIpLmFwcGVuZChqZS5nZXRCYXRjaFN0YXR1cygpKS5hcHBlbmQoIiAiKS5hcHBlbmQoamUuZ2V0RXhpdFN0YXR1cygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgam9icy5hZGQoc2IudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICAgICAgICAgICAgICAgICAgICBqb2JzLmFkZCgiRXhjZXB0aW9uIDogIiArIHNiLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICBqb2JzLmFkZCgiRXhjZXB0aW9uIDogIiArIHNiLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KLQkJfQotCSAgICAgfQotCSAgIH0KKyAgICAgICAgfQorICAgICAgICAgfQorICAgICAgIH0KIAotCSAgIHJldHVybiBqb2JzOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOwotCX0KKyAgICAgICByZXR1cm4gam9iczsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKKyAgICB9CiAgICAgIH0KIAogICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IHRvTWFwKGxvbmcgZXhlY3V0aW9uSWQpIHsKICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKICAgICAgICB0cnkgewotCSAgSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKLQkgIEpvYkV4ZWN1dGlvbiBqZSA9IGpvYk9wZXJhdG9yLmdldEpvYkV4ZWN1dGlvbihleGVjdXRpb25JZCk7CisgICAgICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOworICAgICAgSm9iRXhlY3V0aW9uIGplID0gam9iT3BlcmF0b3IuZ2V0Sm9iRXhlY3V0aW9uKGV4ZWN1dGlvbklkKTsKICAgICAgICAgICBtYXAucHV0KCJqb2JOYW1lIiwgIiIramUuZ2V0Sm9iTmFtZSgpKTsKICAgICAgICAgICBtYXAucHV0KCJhcHBOYW1lIiwgIiIrKChUYWdnZWRKb2JFeGVjdXRpb24pIGplKS5nZXRUYWdOYW1lKCkpOwogCi0JICB0cnkgeworICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1hcC5wdXQoImluc3RhbmNlQ291bnQiLCAiIitqb2JPcGVyYXRvci5nZXRKb2JJbnN0YW5jZUNvdW50KGplLmdldEpvYk5hbWUoKSkpOwogICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkge30KIApAQCAtMTI5LDM5ICsxMjksMzkgQEAKIAogICAgICAgIHJldHVybiBtYXA7CiAgICAgfQotCQorCiAgICAgcHVibGljIENvbGxlY3Rpb248U3RyaW5nPiBsaXN0Sm9iRXhlY3V0aW9ucyhib29sZWFuIHVzZUxvbmdGb3JtYXQsIGxvbmcuLi4gZXhlY3V0aW5JZHMpIHsKLQlTZXQ8U3RyaW5nPiBqb2JzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotCXJldHVybiBqb2JzOworICAgIFNldDxTdHJpbmc+IGpvYnMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisgICAgcmV0dXJuIGpvYnM7CiAgICAgfQogCiAgICAgcHVibGljIExpc3Q8TG9uZz4gZ2V0QWxsRXhlY3V0aW9uSWRzKFN0cmluZyBqb2JOYW1lKSB7Ci0JTGlzdDxMb25nPiBsaXN0ID0gbmV3IExpbmtlZExpc3Q8TG9uZz4oKTsKLQl0cnkgeworICAgIExpc3Q8TG9uZz4gbGlzdCA9IG5ldyBMaW5rZWRMaXN0PExvbmc+KCk7CisgICAgdHJ5IHsKICAgICAgICAgaWYgKGpvYk5hbWUgIT0gbnVsbCkKICAgICAgICAgICAgZ2V0QWxsRXhlY3V0aW9uSWRzKGpvYk5hbWUsIGxpc3QpOwotCWVsc2UgewotCSAgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7Ci0JICAgZm9yIChTdHJpbmcgam4gOiBqb2JPcGVyYXRvci5nZXRKb2JOYW1lcygpKQorICAgIGVsc2UgeworICAgICAgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7CisgICAgICAgZm9yIChTdHJpbmcgam4gOiBqb2JPcGVyYXRvci5nZXRKb2JOYW1lcygpKQogICAgICAgICAgICAgICBnZXRBbGxFeGVjdXRpb25JZHMoam4sIGxpc3QpOwotCX0KKyAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogCi0JfQotCXJldHVybiBsaXN0OworICAgIH0KKyAgICByZXR1cm4gbGlzdDsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZ2V0QWxsRXhlY3V0aW9uSWRzKFN0cmluZyBqb2JOYW1lLCBMaXN0PExvbmc+IGxpc3QpCi0gICAgCXRocm93cyBFeGNlcHRpb24gewotCUpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7Ci0JTGlzdDxKb2JJbnN0YW5jZT4gZXhlID0gam9iT3BlcmF0b3IuZ2V0Sm9iSW5zdGFuY2VzKGpvYk5hbWUsIDAsIEludGVnZXIuTUFYX1ZBTFVFIC0gMSk7Ci0JaWYgKGV4ZSAhPSBudWxsKSB7Ci0JICAgZm9yIChKb2JJbnN0YW5jZSBqaSA6IGV4ZSkgewotCSAgICAgIGZvciAoSm9iRXhlY3V0aW9uIGplIDogam9iT3BlcmF0b3IuZ2V0Sm9iRXhlY3V0aW9ucyhqaSkpIHsKKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKKyAgICBMaXN0PEpvYkluc3RhbmNlPiBleGUgPSBqb2JPcGVyYXRvci5nZXRKb2JJbnN0YW5jZXMoam9iTmFtZSwgMCwgSW50ZWdlci5NQVhfVkFMVUUgLSAxKTsKKyAgICBpZiAoZXhlICE9IG51bGwpIHsKKyAgICAgICBmb3IgKEpvYkluc3RhbmNlIGppIDogZXhlKSB7CisgICAgICAgICAgZm9yIChKb2JFeGVjdXRpb24gamUgOiBqb2JPcGVyYXRvci5nZXRKb2JFeGVjdXRpb25zKGppKSkgewogICAgICAgICAgICAgICAgICBsaXN0LmFkZChqZS5nZXRFeGVjdXRpb25JZCgpKTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9Ci0JfQorICAgIH0KICAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvU2ltcGxlSWRHZW5lcmF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJZEdlbmVyYXRvci5qYXZhCmluZGV4IDBjZjRlZTIuLjFkYTY0NDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJZEdlbmVyYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJZEdlbmVyYXRvci5qYXZhCkBAIC0yMiw5ICsyMiw5IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBTaW1wbGVJZEdlbmVyYXRvcgogICAgIGltcGxlbWVudHMgSWRHZW5lcmF0b3IgewotICAgIAorCiAgICAgcHJpdmF0ZSBBdG9taWNJbnRlZ2VyIGNvdW50ZXIgPSBuZXcgQXRvbWljSW50ZWdlcigwKTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgbmV4dElkKCkgewogICAgICAgICByZXR1cm4gIiIgKyBjb3VudGVyLmluY3JlbWVudEFuZEdldCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJdGVtUHJvY2Vzc29yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvU2ltcGxlSXRlbVByb2Nlc3Nvci5qYXZhCmluZGV4IDRkNTc4OWQuLmQ4Y2UyNzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJdGVtUHJvY2Vzc29yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL1NpbXBsZUl0ZW1Qcm9jZXNzb3IuamF2YQpAQCAtMjMsMTIgKzIzLDEyIEBACiAKIC8vICAgIEBJbmplY3QKIC8vICAgIElkR2VuZXJhdG9yIGlkR2VuOwotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0cmluZyBwcm9jZXNzSXRlbShPYmplY3Qgb2JqKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTdHJpbmcgdCA9IChTdHJpbmcpIG9iajsKKyAgICBTdHJpbmcgdCA9IChTdHJpbmcpIG9iajsKICAgICAgICAgU3RyaW5nW10gcmVjb3JkID0gdC5zcGxpdCgiLCAiKTsKLSAgICAgICAgCisKICAgICAvL0VNUC1JRCwgTU9OVEgtWUVBUiwgU0FMQVJZLCBUQVglLCBNRURJQ0FSRSUsIE9USEVSCiAgICAgICAgIGludCBzYWxhcnkgPSBJbnRlZ2VyLnZhbHVlT2YocmVjb3JkWzJdKTsKICAgICAgICAgZG91YmxlIHRheCA9IERvdWJsZS52YWx1ZU9mKHJlY29yZFszXSk7CkBAIC0zOSw1ICszOSw1IEBACiAgICAgICAgIHNiLmFwcGVuZCgiLCAiKS5hcHBlbmQoc2FsYXJ5IC0gKHNhbGFyeSAqIHRheCAvIDEwMCkgLSAoc2FsYXJ5ICogbWVkaUNhcmUgLyAxMDApKTsKICAgICAgICAgcmV0dXJuICBzYi50b1N0cmluZygpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL1NpbXBsZUl0ZW1SZWFkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJdGVtUmVhZGVyLmphdmEKaW5kZXggY2MxN2MyZi4uMDE2MjJmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL1NpbXBsZUl0ZW1SZWFkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvU2ltcGxlSXRlbVJlYWRlci5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgaW1wbGVtZW50cyBqYWthcnRhLmJhdGNoLmFwaS5jaHVuay5JdGVtUmVhZGVyIHsKIAogICAgIHByaXZhdGUgaW50IGluZGV4ID0gMDsKLSAgICAKKwogICAgIC8vRU1QLUlELCBNT05USC1ZRUFSLCBTQUxBUlksIFRBWCUsIE1FRElDQVJFJSwgT1RIRVIKICAgICBwcml2YXRlIFN0cmluZ1tdIGl0ZW1zID0gbmV3IFN0cmluZ1tdIHsKICAgICAgICAgIjEyMC0wMSwgSkFOLTIwMTMsIDgwMDAsIDI3LCAzLCAwIiwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgIjEyMC0wNywgSkFOLTIwMTMsIDExMDAwLCAzNiwgNSwgMCIsCiAgICAgICAgICIxMjAtMDgsIEpBTi0yMDEzLCAxMTUwMCwgMzYsIDUsIDAiLAogICAgIH07Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvcGVuKFNlcmlhbGl6YWJsZSBlKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICB9CkBAIC01MSw1ICs1MSw1IEBACiAgICAgcHVibGljIFNlcmlhbGl6YWJsZSBjaGVja3BvaW50SW5mbygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJdGVtV3JpdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvU2ltcGxlSXRlbVdyaXRlci5qYXZhCmluZGV4IDUwOGY5YTYuLmMxNjFiMjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJdGVtV3JpdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL1NpbXBsZUl0ZW1Xcml0ZXIuamF2YQpAQCAtMTksNyArMTksNyBAQAogQGpha2FydGEuaW5qZWN0Lk5hbWVkKCJTaW1wbGVJdGVtV3JpdGVyIikKIHB1YmxpYyBjbGFzcyBTaW1wbGVJdGVtV3JpdGVyCiAgICAgaW1wbGVtZW50cyBqYWthcnRhLmJhdGNoLmFwaS5jaHVuay5JdGVtV3JpdGVyIHsKLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9wZW4oU2VyaWFsaXphYmxlIGUpIHRocm93cyBFeGNlcHRpb24gewogICAgIH0KQEAgLTMxLDcgKzMxLDcgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCB3cml0ZUl0ZW1zKExpc3QgbHN0KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCJTaW1wbGVJdGVtV3JpdGVyOiIpOwotCUxpc3Q8U3RyaW5nPiBsaXN0ID0gKExpc3Q8U3RyaW5nPikgbHN0OworICAgIExpc3Q8U3RyaW5nPiBsaXN0ID0gKExpc3Q8U3RyaW5nPikgbHN0OwogICAgICAgICBmb3IgKFN0cmluZyBzIDogbGlzdCkgewogICAgICAgICAgICAgc2IuYXBwZW5kKCIgIikuYXBwZW5kKHMpOwogICAgICAgICB9CkBAIC00Miw1ICs0Miw1IEBACiAgICAgcHVibGljIFNlcmlhbGl6YWJsZSBjaGVja3BvaW50SW5mbygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvYnVpbGQucHJvcGVydGllcwppbmRleCBmNWYyZjQ3Li40YWJkMjQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9wYXktcm9sbC1qb2Itd2l0aC1lamIvc3RhdGVsZXNzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMyArMTUsMTMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImRldnRlc3QtaW50cm8tc3RhdGVsZXNzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYmVhbnMueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9iZWFucy54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJiYXRjaC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2JhdGNoLnhtbCIvPgpAQCAtMjksMTEgKzI5LDExIEBACiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYmF0Y2guam9icy5kaXIiIHZhbHVlPSJkZXNjcmlwdG9yL2JhdGNoLWpvYnMiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImJhdGNoX2RlcmJ5LnNxbCIgdmFsdWU9Ii4uLy4uL2JhdGNoX2RlcmJ5LnNxbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9wYXktcm9sbC1qb2Itd2l0aC1lamIvc3RhdGVsZXNzL2J1aWxkLnhtbAppbmRleCBkMTAyZmY0Li4wOWZjNDhhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9wYXktcm9sbC1qb2Itd2l0aC1lamIvc3RhdGVsZXNzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9wYXktcm9sbC1qb2Itd2l0aC1lamIvc3RhdGVsZXNzL2J1aWxkLnhtbApAQCAtMzgsNyArMzgsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTEsMTkgKzUxLDE5IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NsZXNzLmNsYXNzLCoqL1NsZXNzMzAuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImNvcHktYmF0Y2gtc3FsIiBkZXBlbmRzPSJidWlsZCI+Ci0gICAgCTxlY2hvIG1lc3NhZ2U9IioqKioqIENvcHkgJHtiYXRjaF9kZXJieS5zcWx9IHRvIFRhcmdldCBkaXI6ICR7ZW52LlMxQVNfSE9NRX0vbGliIi8+Ci0gICAgCTxjb3B5IGZpbGU9IiR7YmF0Y2hfZGVyYnkuc3FsfSIgdG9kaXI9IiR7ZW52LlMxQVNfSE9NRX0vbGliIi8+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPHRhcmdldCBuYW1lPSJjb3B5LWJhdGNoLXNxbCIgZGVwZW5kcz0iYnVpbGQiPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSIqKioqKiBDb3B5ICR7YmF0Y2hfZGVyYnkuc3FsfSB0byBUYXJnZXQgZGlyOiAke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2JhdGNoX2RlcmJ5LnNxbH0iIHRvZGlyPSIke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggODkwYmRlYi4uNWE3OTU3MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKIEBFSkIobmFtZT0iZWpiL0dHIiwgYmVhbkludGVyZmFjZT1TbGVzcy5jbGFzcykKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zNSwyMiArMzUsMjIgQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImJhdGNoLXBheS1yb29sLWpvYi1lamItc3RhdGVsZXNzIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIEBFSkIobmFtZT0iZWpiL2trIikgU2xlc3Mgc2xlc3M7CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvR0ciKTsKLQkgICAgbG9uZyByZXN1bHQgPSBzbGVzcy5zdWJtaXRKb2IoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqIEpvYklEOiAiICsgcmVzdWx0ICsgIiAqKioqKioqKioqKioqKioqKioiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgICAgbG9uZyByZXN1bHQgPSBzbGVzcy5zdWJtaXRKb2IoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqIEpvYklEOiAiICsgcmVzdWx0ICsgIiAqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJiYXRjaCBwYXlyb2xsIiwgc3RhdC5QQVNTKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJiYXRjaCBwYXlyb2xsIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvZGVzY3JpcHRvci9iYXRjaC1qb2JzL1BheVJvbGxKb2IueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9kZXNjcmlwdG9yL2JhdGNoLWpvYnMvUGF5Um9sbEpvYi54bWwKaW5kZXggNjI1ZjU0Yi4uY2MwMzEwZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9kZXNjcmlwdG9yL2JhdGNoLWpvYnMvUGF5Um9sbEpvYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9kZXNjcmlwdG9yL2JhdGNoLWpvYnMvUGF5Um9sbEpvYi54bWwKQEAgLTIwLDE2ICsyMCwxNiBAQAogPGpvYiBpZD0iam9iMSIgeG1sbnM9Imh0dHA6Ly9iYXRjaC5qc3IzNTIvanNsIj4KICAgICA8c3RlcCBpZD0icHJlcGFyZSIgbmV4dD0icHJvY2VzcyI+CiAgICAgICAgIDxjaHVuayBpdGVtLWNvdW50PSIxIj4KLSAgICAgICAgICAgIDxyZWFkZXIgcmVmPSJTaW1wbGVJdGVtUmVhZGVyIj48L3JlYWRlcj4gCisgICAgICAgICAgICA8cmVhZGVyIHJlZj0iU2ltcGxlSXRlbVJlYWRlciI+PC9yZWFkZXI+CiAgICAgICAgICAgICA8cHJvY2Vzc29yIHJlZj0iU2ltcGxlSXRlbVByb2Nlc3NvciI+PC9wcm9jZXNzb3I+Ci0gICAgICAgICAgICA8d3JpdGVyIHJlZj0iU2ltcGxlSXRlbVdyaXRlciI+PC93cml0ZXI+IAorICAgICAgICAgICAgPHdyaXRlciByZWY9IlNpbXBsZUl0ZW1Xcml0ZXIiPjwvd3JpdGVyPgogICAgICAgICA8L2NodW5rPgogICAgIDwvc3RlcD4KICAgICA8c3RlcCBpZD0icHJvY2VzcyI+CiAgICAgICAgIDxjaHVuayBpdGVtLWNvdW50PSIzIj4KLSAgICAgICAgICAgIDxyZWFkZXIgcmVmPSJTaW1wbGVJdGVtUmVhZGVyIj48L3JlYWRlcj4gCisgICAgICAgICAgICA8cmVhZGVyIHJlZj0iU2ltcGxlSXRlbVJlYWRlciI+PC9yZWFkZXI+CiAgICAgICAgICAgICA8cHJvY2Vzc29yIHJlZj0iU2ltcGxlSXRlbVByb2Nlc3NvciI+PC9wcm9jZXNzb3I+Ci0gICAgICAgICAgICA8d3JpdGVyIHJlZj0iU2ltcGxlSXRlbVdyaXRlciI+PC93cml0ZXI+IAorICAgICAgICAgICAgPHdyaXRlciByZWY9IlNpbXBsZUl0ZW1Xcml0ZXIiPjwvd3JpdGVyPgogICAgICAgICA8L2NodW5rPgogICAgIDwvc3RlcD4KIDwvam9iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL0pvYlN1Ym1pdHRlclNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3NpbXBsZS9Kb2JTdWJtaXR0ZXJTZXJ2bGV0LmphdmEKaW5kZXggN2ExNjdlNi4uNmI1Mzc1ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL0pvYlN1Ym1pdHRlclNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9wYXktcm9sbC1qb2Itd2l0aC1lamIvc3RhdGVsZXNzL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9zaW1wbGUvSm9iU3VibWl0dGVyU2VydmxldC5qYXZhCkBAIC0zOCwxMCArMzgsMTAgQEAKICAqIEBhdXRob3IgbWFrYW5uYW4KICAqLwogcHVibGljIGNsYXNzIEpvYlN1Ym1pdHRlclNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7Ci0gICAgCisKIC8vICAgIEBSZXNvdXJjZShuYW1lPSJjb25jdXJyZW50L2JhdGNoLWV4ZWN1dG9yLXNlcnZpY2UiKQogLy8gICAgTWFuYWdlZEV4ZWN1dG9yU2VydmljZSBtYW5hZ2VkRXhlY3V0b3JTZXJ2aWNlOwotICAgIAorCiAgICAgLyoqCiAgICAgICogUHJvY2Vzc2VzIHJlcXVlc3RzIGZvciBib3RoIEhUVFAKICAgICAgKiA8Y29kZT5HRVQ8L2NvZGU+IGFuZApAQCAtNzIsNyArNzIsNyBAQAogICAgICAgICAgICAgICAgIHN1Ym1pdEpvYkZyb21YTUwob3V0KTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVxdWVzdC5nZXRQYXJhbWV0ZXIoImxpc3RKb2JzIikgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8dHI+PHRkPmxpc3RKb2JzPC90ZD48dGQ+Tm90IGltcGxlbWVudGVkIHlldDwvdGQ+PC90cj4iKTsKLSAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9CiAKIAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvdGFibGU+Iik7CkBAIC04OCw3ICs4OCw3IEBACiAKICAgICBwcml2YXRlIHZvaWQgc3VibWl0Sm9iRnJvbVhNTChQcmludFdyaXRlciBwdykKICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOwogICAgICAgICBwdy5wcmludGxuKCI8dHI+PHRkPkpvYk9wZXJhdG9yIGNsYXNzIDwvdGQ+PHRkPiIgKyBqb2JPcGVyYXRvci5nZXRDbGFzcygpLmdldE5hbWUoKSArICIgPC90ZD48L3RyPiIpOwogCkBAIC05NiwxMSArOTYsMTEgQEAKICAgICAgICAgZm9yIChpbnQgaT0wOyBpPDk7IGkrKykKICAgICAgICAgICAgIHByb3BzLnB1dChpLCBpKTsKICAgICAgICAgTG9uZyBpZCA9IGpvYk9wZXJhdG9yLnN0YXJ0KCJQYXlSb2xsSm9iIiwgcHJvcHMpOwotICAgICAgICAKKwogICAgICAgICBwdy5wcmludGxuKGpvYkluZm8oam9iT3BlcmF0b3IsIGlkLCBwdykpOwotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8vZ2V0Sm9iTmFtZXMoKQogICAgIHByaXZhdGUgU3RyaW5nIGpvYk5hbWVzKEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiSm9iT3BlcmF0b3Iuam9iTmFtZXM6ICIpOwpAQCAtMTA4LDcgKzEwOCw3IEBACiAgICAgICAgICAgICBzYi5hcHBlbmQoIiAiKS5hcHBlbmQoaik7CiAgICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIGpvYkluZm8oSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IsIGxvbmcgaWQsIFByaW50V3JpdGVyIHB3KSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiSm9iT3BlcmF0b3Iuam9iTmFtZXM6ICIpOwogICAgICAgICBzYi5hcHBlbmQoIjx0cj48dGQ+SWQ8L3RkPjx0ZCIgKyBpZCArICI8L3RkPjwvdHI+Iik7CkBAIC0xMTcsNyArMTE3LDcgQEAKICAgICAgICAgc2IuYXBwZW5kKGFzU3RyaW5nKGpvYk9wZXJhdG9yLmdldEpvYkV4ZWN1dGlvbihpZCkpKTsKICAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgYXNTdHJpbmcoSm9iRXhlY3V0aW9uIGplKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiSm9iRXhlY3V0aW9uOiAiKTsKICAgICAgICAgc2IuYXBwZW5kKCI8dHI+PHRkPj0+ICAgIGNyZWF0ZVRpbWU8L3RkPjx0ZD4iKS5hcHBlbmQoamUuZ2V0Q3JlYXRlVGltZSgpKS5hcHBlbmQoIjwvdGQ+PC90cj4iKTsKQEAgLTEyOCwxMCArMTI4LDEwIEBACiAgICAgICAgIHNiLmFwcGVuZCgiPHRyPjx0ZD49PiAgICBqb2JQYXJhbWV0ZXJzOiA8L3RkPjx0ZD4iKS5hcHBlbmQoamUuZ2V0Sm9iUGFyYW1ldGVycygpKS5hcHBlbmQoIjwvdGQ+PC90cj4iKTsKICAgICAgICAgc2IuYXBwZW5kKCI8dHI+PHRkPj0+ICAgIGxhc3RVcGRhdGVkVGltZTogPC90ZD48dGQ+IikuYXBwZW5kKGplLmdldExhc3RVcGRhdGVkVGltZSgpKS5hcHBlbmQoIjwvdGQ+PC90cj4iKTsKICAgICAgICAgc2IuYXBwZW5kKCI8dHI+PHRkPj0+ICAgIHN0YXR1czogPC90ZD48dGQ+IikuYXBwZW5kKGplLmdldEV4aXRTdGF0dXMoKSkuYXBwZW5kKCI8L3RkPjwvdHI+Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwogICAgIH0KLSAgICAKKwogICAgIC8vIDxlZGl0b3ItZm9sZCBkZWZhdWx0c3RhdGU9ImNvbGxhcHNlZCIgZGVzYz0iSHR0cFNlcnZsZXQgbWV0aG9kcy4gQ2xpY2sgb24gdGhlICsgc2lnbiBvbiB0aGUgbGVmdCB0byBlZGl0IHRoZSBjb2RlLiI+CiAgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL1NpbXBsZUl0ZW1Qcm9jZXNzb3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3NpbXBsZS9TaW1wbGVJdGVtUHJvY2Vzc29yLmphdmEKaW5kZXggMjQ4ZGY4Zi4uYmM1OWMxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL1NpbXBsZUl0ZW1Qcm9jZXNzb3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9wYXktcm9sbC1qb2Itd2l0aC1lamIvc3RhdGVsZXNzL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9zaW1wbGUvU2ltcGxlSXRlbVByb2Nlc3Nvci5qYXZhCkBAIC0yMywxMSArMjMsMTEgQEAKIAogLy8gICAgQEluamVjdAogLy8gICAgSWRHZW5lcmF0b3IgaWRHZW47Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgU3RyaW5nIHByb2Nlc3NJdGVtKFN0cmluZyB0KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nW10gcmVjb3JkID0gdC5zcGxpdCgiLCAiKTsKLSAgICAgICAgCisKICAgICAvL0VNUC1JRCwgTU9OVEgtWUVBUiwgU0FMQVJZLCBUQVglLCBNRURJQ0FSRSUsIE9USEVSCiAgICAgICAgIGludCBzYWxhcnkgPSBJbnRlZ2VyLnZhbHVlT2YocmVjb3JkWzJdKTsKICAgICAgICAgZG91YmxlIHRheCA9IERvdWJsZS52YWx1ZU9mKHJlY29yZFszXSk7CkBAIC0zOCw1ICszOCw1IEBACiAgICAgICAgIHNiLmFwcGVuZCgiLCAiKS5hcHBlbmQoc2FsYXJ5IC0gKHNhbGFyeSAqIHRheCAvIDEwMCkgLSAoc2FsYXJ5ICogbWVkaUNhcmUgLyAxMDApKTsKICAgICAgICAgcmV0dXJuICBzYi50b1N0cmluZygpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL1NpbXBsZUl0ZW1SZWFkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3NpbXBsZS9TaW1wbGVJdGVtUmVhZGVyLmphdmEKaW5kZXggZjQyYjUwNC4uOTExOGNiOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL1NpbXBsZUl0ZW1SZWFkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9wYXktcm9sbC1qb2Itd2l0aC1lamIvc3RhdGVsZXNzL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9zaW1wbGUvU2ltcGxlSXRlbVJlYWRlci5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgZXh0ZW5kcyBqYWthcnRhLmJhdGNoLmFwaS5BYnN0cmFjdEl0ZW1SZWFkZXI8U3RyaW5nPiB7CiAKICAgICBwcml2YXRlIGludCBpbmRleCA9IDA7Ci0gICAgCisKICAgICAvL0VNUC1JRCwgTU9OVEgtWUVBUiwgU0FMQVJZLCBUQVglLCBNRURJQ0FSRSUsIE9USEVSCiAgICAgcHJpdmF0ZSBTdHJpbmdbXSBpdGVtcyA9IG5ldyBTdHJpbmdbXSB7CiAgICAgICAgICIxMjAtMDEsIEpBTi0yMDEzLCA4MDAwLCAyNywgMywgMCIsCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgICIxMjAtMDcsIEpBTi0yMDEzLCAxMTAwMCwgMzYsIDUsIDAiLAogICAgICAgICAiMTIwLTA4LCBKQU4tMjAxMywgMTE1MDAsIDM2LCA1LCAwIiwKICAgICB9OwotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb3BlbihFeHRlcm5hbGl6YWJsZSBlKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICB9CkBAIC01MSw1ICs1MSw1IEBACiAgICAgcHVibGljIEV4dGVybmFsaXphYmxlIGNoZWNrcG9pbnRJbmZvKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL1NpbXBsZUl0ZW1Xcml0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3NpbXBsZS9TaW1wbGVJdGVtV3JpdGVyLmphdmEKaW5kZXggMTIyYzhlMC4uYWFkNGY5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL1NpbXBsZUl0ZW1Xcml0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9wYXktcm9sbC1qb2Itd2l0aC1lamIvc3RhdGVsZXNzL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9zaW1wbGUvU2ltcGxlSXRlbVdyaXRlci5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBAamFrYXJ0YS5pbmplY3QuTmFtZWQoIlNpbXBsZUl0ZW1Xcml0ZXIiKQogcHVibGljIGNsYXNzIFNpbXBsZUl0ZW1Xcml0ZXIKICAgICBleHRlbmRzIGpha2FydGEuYmF0Y2guYXBpLkFic3RyYWN0SXRlbVdyaXRlcjxTdHJpbmc+IHsKLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9wZW4oRXh0ZXJuYWxpemFibGUgZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgfQpAQCAtNDEsNSArNDEsNSBAQAogICAgIHB1YmxpYyBFeHRlcm5hbGl6YWJsZSBjaGVja3BvaW50SW5mbygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3NpbXBsZS9TbGVzc0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3NpbXBsZS9TbGVzc0JlYW4uamF2YQppbmRleCA1N2QwODMwLi4wMzU1MmE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9wYXktcm9sbC1qb2Itd2l0aC1lamIvc3RhdGVsZXNzL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9zaW1wbGUvU2xlc3NCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL1NsZXNzQmVhbi5qYXZhCkBAIC0zMiwyMSArMzIsMjEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgbG9uZyBzdWJtaXRKb2IoKSB7Ci0JdHJ5IHsKLQkgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7CisgICAgdHJ5IHsKKyAgICAgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7CiAKLQkgIFByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOwotCSAgZm9yIChpbnQgaT0wOyBpPDk7IGkrKykKLQkJcHJvcHMucHV0KGksIGkpOwotCSAgcmV0dXJuICBqb2JPcGVyYXRvci5zdGFydCgiUGF5Um9sbEpvYiIsIHByb3BzKTsKKyAgICAgIFByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworICAgICAgZm9yIChpbnQgaT0wOyBpPDk7IGkrKykKKyAgICAgICAgcHJvcHMucHV0KGksIGkpOworICAgICAgcmV0dXJuICBqb2JPcGVyYXRvci5zdGFydCgiUGF5Um9sbEpvYiIsIHByb3BzKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7Ci0JfQorICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB3YXNFamJDcmVhdGVDYWxsZWQoKSB7Ci0JcmV0dXJuIGVqYkNyZWF0ZUNhbGxlZDsKKyAgICByZXR1cm4gZWpiQ3JlYXRlQ2FsbGVkOwogICAgIH0KIAotCQkJCQkJCQkJCQkJCQkgICAgICAgICAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcnVuX3Rlc3Quc2ggYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ydW5fdGVzdC5zaAppbmRleCA4MjVmNDE3Li5lYWU1YWNjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ydW5fdGVzdC5zaAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ydW5fdGVzdC5zaApAQCAtNTAsMTEgKzUwLDExIEBACiB9CiAKIGdldF90ZXN0X3RhcmdldCgpewotCWNhc2UgJHsxfSBpbgotCQliYXRjaF9hbGwgKQotCQkJVEFSR0VUPWFsbAotCQkJZXhwb3J0IFRBUkdFVDs7Ci0JZXNhYworICAgIGNhc2UgJHsxfSBpbgorICAgICAgICBiYXRjaF9hbGwgKQorICAgICAgICAgICAgVEFSR0VUPWFsbAorICAgICAgICAgICAgZXhwb3J0IFRBUkdFVDs7CisgICAgZXNhYwogfQogCiBPUFQ9JHsxfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLWJhdGNobGV0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtYmF0Y2hsZXQvYnVpbGQucHJvcGVydGllcwppbmRleCBiZjAxYjY0Li5hODA3OTNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtYmF0Y2hsZXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtYmF0Y2hsZXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJkZXZ0ZXN0LWludHJvLXNpbXBsZS1iYXRjaGxldCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImJlYW5zLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYmVhbnMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYmF0Y2gueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9iYXRjaC54bWwiLz4KQEAgLTI5LDExICsyOSwxMSBAQAogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImJhdGNoLmpvYnMuZGlyIiB2YWx1ZT0iZGVzY3JpcHRvci9iYXRjaC1qb2JzIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJiYXRjaF9kZXJieS5zcWwiIHZhbHVlPSIuLi8uLi9iYXRjaF9kZXJieS5zcWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS1iYXRjaGxldC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtYmF0Y2hsZXQvYnVpbGQueG1sCmluZGV4IGFkNTMzMjAuLjYxZDM0OGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS1iYXRjaGxldC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLWJhdGNobGV0L2J1aWxkLnhtbApAQCAtMzgsNyArMzgsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTEsMTkgKzUxLDE5IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NsZXNzLmNsYXNzLCoqL1NsZXNzMzAuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImNvcHktYmF0Y2gtc3FsIiBkZXBlbmRzPSJidWlsZCI+Ci0gICAgCTxlY2hvIG1lc3NhZ2U9IioqKioqIENvcHkgJHtiYXRjaF9kZXJieS5zcWx9IHRvIFRhcmdldCBkaXI6ICR7ZW52LlMxQVNfSE9NRX0vbGliIi8+Ci0gICAgCTxjb3B5IGZpbGU9IiR7YmF0Y2hfZGVyYnkuc3FsfSIgdG9kaXI9IiR7ZW52LlMxQVNfSE9NRX0vbGliIi8+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPHRhcmdldCBuYW1lPSJjb3B5LWJhdGNoLXNxbCIgZGVwZW5kcz0iYnVpbGQiPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSIqKioqKiBDb3B5ICR7YmF0Y2hfZGVyYnkuc3FsfSB0byBUYXJnZXQgZGlyOiAke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2JhdGNoX2RlcmJ5LnNxbH0iIHRvZGlyPSIke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS1iYXRjaGxldC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtYmF0Y2hsZXQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGMzOTkwY2QuLjQ2ODgwMTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS1iYXRjaGxldC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLWJhdGNobGV0L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogQEVKQihuYW1lPSJlamIvR0ciLCBiZWFuSW50ZXJmYWNlPVNsZXNzLmNsYXNzKQogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTM1LDMzICszNSwzMyBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiYmF0Y2gtcGF5LXJvb2wtam9iLWVqYi1zdGF0ZWxlc3MiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQihuYW1lPSJlamIva2siKSBTbGVzcyBzbGVzczsKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9HRyIpOwotCSAgICBsb25nIGV4ZWN1dGlvbklkID0gc2xlc3Muc3VibWl0Sm9iKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKiBKb2JJRDogIiArIGV4ZWN1dGlvbklkICsgIiAqKioqKioqKioqKioqKioqKioiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKLQkgICAgU3RyaW5nIGpvYkJhdGNoU3RhdHVzID0gIiI7Ci0JICAgIGZvciAoaW50IHNlYz0xMDsgc2VjPjA7IHNlYy0tKSB7Ci0JICAgICAgICB0cnkgewotCQkgICAgam9iQmF0Y2hTdGF0dXMgPSBzbGVzcy5nZXRKb2JFeGl0U3RhdHVzKGV4ZWN1dGlvbklkKTsKLQkJICAgIGlmICghICJDT01QTEVURUQiLmVxdWFscyhqb2JCYXRjaFN0YXR1cykpIHsKLQkJICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldpbGwgc2xlZXAgZm9yICIgKyBzZWMgKyAiIG1vcmUgc2Vjb25kcy4uLjogIiArIGpvYkJhdGNoU3RhdHVzKTsKLQkJICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEwMDApOwotCQkgICAgfQotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJfQotCSAgICB9CisgICAgICAgIGxvbmcgZXhlY3V0aW9uSWQgPSBzbGVzcy5zdWJtaXRKb2IoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqIEpvYklEOiAiICsgZXhlY3V0aW9uSWQgKyAiICoqKioqKioqKioqKioqKioqKiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworICAgICAgICBTdHJpbmcgam9iQmF0Y2hTdGF0dXMgPSAiIjsKKyAgICAgICAgZm9yIChpbnQgc2VjPTEwOyBzZWM+MDsgc2VjLS0pIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBqb2JCYXRjaFN0YXR1cyA9IHNsZXNzLmdldEpvYkV4aXRTdGF0dXMoZXhlY3V0aW9uSWQpOworICAgICAgICAgICAgaWYgKCEgIkNPTVBMRVRFRCIuZXF1YWxzKGpvYkJhdGNoU3RhdHVzKSkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2lsbCBzbGVlcCBmb3IgIiArIHNlYyArICIgbW9yZSBzZWNvbmRzLi4uOiAiICsgam9iQmF0Y2hTdGF0dXMpOworICAgICAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMTAwMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJzaW1wbGUtYmF0Y2hsZXQgcGF5cm9sbCIsICgiQ09NUExFVEVEIi5lcXVhbHMoam9iQmF0Y2hTdGF0dXMpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic2ltcGxlLWJhdGNobGV0IHBheXJvbGwiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLWJhdGNobGV0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9zaW1wbGUvYmF0Y2hsZXQvSWRHZW5lcmF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS1iYXRjaGxldC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL2JhdGNobGV0L0lkR2VuZXJhdG9yLmphdmEKaW5kZXggMTViNzMwNC4uYmQwY2NiMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLWJhdGNobGV0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9zaW1wbGUvYmF0Y2hsZXQvSWRHZW5lcmF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtYmF0Y2hsZXQvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3NpbXBsZS9iYXRjaGxldC9JZEdlbmVyYXRvci5qYXZhCkBAIC0yMSw1ICsyMSw1IEBACiBwdWJsaWMgaW50ZXJmYWNlIElkR2VuZXJhdG9yIHsKIAogICAgIHB1YmxpYyBTdHJpbmcgbmV4dElkKCk7Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS1iYXRjaGxldC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL2JhdGNobGV0L1NpbXBsZUJhdGNobGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtYmF0Y2hsZXQvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3NpbXBsZS9iYXRjaGxldC9TaW1wbGVCYXRjaGxldC5qYXZhCmluZGV4IDIxNTBkMzYuLjZmYWQ3OTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS1iYXRjaGxldC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL2JhdGNobGV0L1NpbXBsZUJhdGNobGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLWJhdGNobGV0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9zaW1wbGUvYmF0Y2hsZXQvU2ltcGxlQmF0Y2hsZXQuamF2YQpAQCAtMjUsOSArMjUsOSBAQAogICAgIHB1YmxpYyBTdHJpbmcgcHJvY2VzcygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gICJHUkVBVF9TVUNDRVNTIjsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCAgc3RvcCgpIHRocm93cyBFeGNlcHRpb24gewogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLWJhdGNobGV0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9zaW1wbGUvYmF0Y2hsZXQvU2ltcGxlSWRHZW5lcmF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS1iYXRjaGxldC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL2JhdGNobGV0L1NpbXBsZUlkR2VuZXJhdG9yLmphdmEKaW5kZXggNThhY2ZlNi4uYmE2YTk5NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLWJhdGNobGV0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9zaW1wbGUvYmF0Y2hsZXQvU2ltcGxlSWRHZW5lcmF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtYmF0Y2hsZXQvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3NpbXBsZS9iYXRjaGxldC9TaW1wbGVJZEdlbmVyYXRvci5qYXZhCkBAIC0yMiw5ICsyMiw5IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBTaW1wbGVJZEdlbmVyYXRvcgogICAgIGltcGxlbWVudHMgSWRHZW5lcmF0b3IgewotICAgIAorCiAgICAgcHJpdmF0ZSBBdG9taWNJbnRlZ2VyIGNvdW50ZXIgPSBuZXcgQXRvbWljSW50ZWdlcigwKTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgbmV4dElkKCkgewogICAgICAgICByZXR1cm4gIiIgKyBjb3VudGVyLmluY3JlbWVudEFuZEdldCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS1iYXRjaGxldC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL2JhdGNobGV0L1NsZXNzQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLWJhdGNobGV0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9zaW1wbGUvYmF0Y2hsZXQvU2xlc3NCZWFuLmphdmEKaW5kZXggZjc4NjMzYy4uZThlZWNmNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLWJhdGNobGV0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9zaW1wbGUvYmF0Y2hsZXQvU2xlc3NCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLWJhdGNobGV0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9zaW1wbGUvYmF0Y2hsZXQvU2xlc3NCZWFuLmphdmEKQEAgLTMzLDMxICszMywzMSBAQAogICAgIH0KIAogICAgIHB1YmxpYyBsb25nIHN1Ym1pdEpvYigpIHsKLQl0cnkgewotCSAgSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKKyAgICB0cnkgeworICAgICAgSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKIAotCSAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JICBmb3IgKGludCBpPTA7IGk8OTsgaSsrKQotCQlwcm9wcy5wdXQoaSwgaSk7Ci0JICByZXR1cm4gIGpvYk9wZXJhdG9yLnN0YXJ0KCJzaW1wbGVCYXRjaGxldEpvYiIsIHByb3BzKTsKKyAgICAgIFByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworICAgICAgZm9yIChpbnQgaT0wOyBpPDk7IGkrKykKKyAgICAgICAgcHJvcHMucHV0KGksIGkpOworICAgICAgcmV0dXJuICBqb2JPcGVyYXRvci5zdGFydCgic2ltcGxlQmF0Y2hsZXRKb2IiLCBwcm9wcyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOwotCX0KKyAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBnZXRKb2JFeGl0U3RhdHVzKGxvbmcgZXhlY3V0aW9uSWQpIHsKLQl0cnkgewotCUpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7Ci0JSm9iRXhlY3V0aW9uIGpvYkV4ZWN1dGlvbiA9IGpvYk9wZXJhdG9yLmdldEpvYkV4ZWN1dGlvbihleGVjdXRpb25JZCk7Ci0JcmV0dXJuIGpvYkV4ZWN1dGlvbi5nZXRFeGl0U3RhdHVzKCk7CisgICAgdHJ5IHsKKyAgICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOworICAgIEpvYkV4ZWN1dGlvbiBqb2JFeGVjdXRpb24gPSBqb2JPcGVyYXRvci5nZXRKb2JFeGVjdXRpb24oZXhlY3V0aW9uSWQpOworICAgIHJldHVybiBqb2JFeGVjdXRpb24uZ2V0RXhpdFN0YXR1cygpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHt9Ci0JcmV0dXJuICItMSI7CisgICAgcmV0dXJuICItMSI7CiAgICAgfQogCiAKICAgICBwdWJsaWMgYm9vbGVhbiB3YXNFamJDcmVhdGVDYWxsZWQoKSB7Ci0JcmV0dXJuIGVqYkNyZWF0ZUNhbGxlZDsKKyAgICByZXR1cm4gZWpiQ3JlYXRlQ2FsbGVkOwogICAgIH0KIAotCQkJCQkJCQkJCQkJCQkgICAgICAgICAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDMzZGZjOWQuLjU4ZTM2MzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEzICsxNSwxMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iU2ltcGxlLVZhbGlkYXRpb24iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJiZWFucy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2JlYW5zLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImJhdGNoLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYmF0Y2gueG1sIi8+CkBAIC0yOSwxMSArMjksMTEgQEAKIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJiYXRjaC5qb2JzLmRpciIgdmFsdWU9ImRlc2NyaXB0b3IvYmF0Y2gtam9icyIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYmF0Y2hfZGVyYnkuc3FsIiB2YWx1ZT0iLi4vLi4vYmF0Y2hfZGVyYnkuc3FsIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvYnVpbGQueG1sCmluZGV4IDEyN2U2OGEuLmMyMWQwNTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvYnVpbGQueG1sCkBAIC0zOCw3ICszOCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MSwxOSArNTEsMTkgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovSm9iU3VibWl0dGVyLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJjb3B5LWJhdGNoLXNxbCIgZGVwZW5kcz0iYnVpbGQiPgotICAgIAk8ZWNobyBtZXNzYWdlPSIqKioqKiBDb3B5ICR7YmF0Y2hfZGVyYnkuc3FsfSB0byBUYXJnZXQgZGlyOiAke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgotICAgIAk8Y29weSBmaWxlPSIke2JhdGNoX2RlcmJ5LnNxbH0iIHRvZGlyPSIke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgogICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iY29weS1iYXRjaC1zcWwiIGRlcGVuZHM9ImJ1aWxkIj4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iKioqKiogQ29weSAke2JhdGNoX2RlcmJ5LnNxbH0gdG8gVGFyZ2V0IGRpcjogJHtlbnYuUzFBU19IT01FfS9saWIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtiYXRjaF9kZXJieS5zcWx9IiB0b2Rpcj0iJHtlbnYuUzFBU19IT01FfS9saWIiLz4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTcxLDEwICs3MSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDgxMmEzOGQuLjg3MjA3Y2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zNCw3NCArMzQsNzQgQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImJhdGNoLWNtdC1jaHVuayIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBARUpCIEpvYlN1Ym1pdHRlciBqb2JTdWJtaXR0ZXI7CiAKICAgICBpbnQgTUFYX0pPQl9TSVpFID0gMjsKICAgICBsb25nW10gZXhlY3V0aW9uSWRzID0gbmV3IGxvbmdbTUFYX0pPQl9TSVpFXTsKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLQlmb3IgKGludCBpPTA7IGk8TUFYX0pPQl9TSVpFOyBpKyspCi0JICAgIGV4ZWN1dGlvbklkc1tpXSA9IC0xOworICAgIGZvciAoaW50IGk9MDsgaTxNQVhfSk9CX1NJWkU7IGkrKykKKyAgICAgICAgZXhlY3V0aW9uSWRzW2ldID0gLTE7CiAgICAgICAgIHN1Ym1pdEpvYnMoKTsKICAgICAgICAgbGlzdEJhdGNoSm9icygpOwogICAgICAgICBsaXN0QmF0Y2hKb2JzSW5Mb25nRm9ybWF0KCk7CiAgICAgICAgIGNoZWNrSm9iRXhlY3V0aW9uKGV4ZWN1dGlvbklkc1swXSk7Ci0gICAgCWlzSm9iRXhlY3V0aW9uT0soZXhlY3V0aW9uSWRzWzBdKTsKLSAgICAJY2hlY2tBbGxKb2JFeGVjdXRpb25zKCk7Ci0gICAgCWNoZWNrSWZPbmx5Sm9ic0Zyb21UaGlzQXBwQXJlVmlzaWJsZSgpOworICAgICAgICBpc0pvYkV4ZWN1dGlvbk9LKGV4ZWN1dGlvbklkc1swXSk7CisgICAgICAgIGNoZWNrQWxsSm9iRXhlY3V0aW9ucygpOworICAgICAgICBjaGVja0lmT25seUpvYnNGcm9tVGhpc0FwcEFyZVZpc2libGUoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzdWJtaXRKb2JzKCkgewogICAgICAgICB0cnkgewotCSAgICBmb3IgKGludCBpID0gMDsgaTwgTUFYX0pPQl9TSVpFOyBpKyspIHsKLQkgICAgICAgIGV4ZWN1dGlvbklkc1tpXSA9IGpvYlN1Ym1pdHRlci5zdWJtaXRKb2IoIlNpbXBsZS1WYWxpZGF0aW9uLUpvYiIpOwotCSAgICAgICAgY2hlY2tCYXRjaEpvYlN0YXR1cyhleGVjdXRpb25JZHNbaV0sIDEwMCk7Ci0JICAgIH0KLQkgICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCSAgICBmb3IgKGludCBpPTA7IGk8TUFYX0pPQl9TSVpFOyBpKyspIHsKLQkgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIGV4ZWN1dGlvbklkc1tpXSAhPSAtMTsKLQkgICAgfQorICAgICAgICBmb3IgKGludCBpID0gMDsgaTwgTUFYX0pPQl9TSVpFOyBpKyspIHsKKyAgICAgICAgICAgIGV4ZWN1dGlvbklkc1tpXSA9IGpvYlN1Ym1pdHRlci5zdWJtaXRKb2IoIlNpbXBsZS1WYWxpZGF0aW9uLUpvYiIpOworICAgICAgICAgICAgY2hlY2tCYXRjaEpvYlN0YXR1cyhleGVjdXRpb25JZHNbaV0sIDEwMCk7CisgICAgICAgIH0KKyAgICAgICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOworICAgICAgICBmb3IgKGludCBpPTA7IGk8TUFYX0pPQl9TSVpFOyBpKyspIHsKKyAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIGV4ZWN1dGlvbklkc1tpXSAhPSAtMTsKKyAgICAgICAgfQogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJhdGNoLWNtdC1jaHVuay10ZXN0MSIsIChyZXN1bHQgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJiYXRjaC1jbXQtY2h1bmstdGVzdDEiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgbGlzdEJhdGNoSm9icygpIHsKICAgICAgICAgdHJ5IHsKLQkgICAgYm9vbGVhbiBzdGF0dXMgPSB0cnVlOwotCSAgICBDb2xsZWN0aW9uPFN0cmluZz4gam9icyA9IGpvYlN1Ym1pdHRlci5saXN0Sm9icyhmYWxzZSk7Ci0JICAgIGZvciAoU3RyaW5nIGpvYiA6IGpvYnMpIHsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKiogSk9CID09PiAiICsgam9iKTsKLQkgICAgfQorICAgICAgICBib29sZWFuIHN0YXR1cyA9IHRydWU7CisgICAgICAgIENvbGxlY3Rpb248U3RyaW5nPiBqb2JzID0gam9iU3VibWl0dGVyLmxpc3RKb2JzKGZhbHNlKTsKKyAgICAgICAgZm9yIChTdHJpbmcgam9iIDogam9icykgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKiBKT0IgPT0+ICIgKyBqb2IpOworICAgICAgICB9CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYmF0Y2gtY210LWNodW5rLXRlc3QyIiwgKHN0YXR1cyA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJhdGNoLWNtdC1jaHVuay10ZXN0MiIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBsaXN0QmF0Y2hKb2JzSW5Mb25nRm9ybWF0KCkgewogICAgICAgICB0cnkgewotCSAgICBib29sZWFuIHN0YXR1cyA9IHRydWU7Ci0JICAgIENvbGxlY3Rpb248U3RyaW5nPiBqb2JzID0gam9iU3VibWl0dGVyLmxpc3RKb2JzKHRydWUpOwotCSAgICBmb3IgKFN0cmluZyBqb2IgOiBqb2JzKSB7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqIEpPQiA9PT4gIiArIGpvYik7Ci0JICAgIH0KKyAgICAgICAgYm9vbGVhbiBzdGF0dXMgPSB0cnVlOworICAgICAgICBDb2xsZWN0aW9uPFN0cmluZz4gam9icyA9IGpvYlN1Ym1pdHRlci5saXN0Sm9icyh0cnVlKTsKKyAgICAgICAgZm9yIChTdHJpbmcgam9iIDogam9icykgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKiBKT0IgPT0+ICIgKyBqb2IpOworICAgICAgICB9CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYmF0Y2gtY210LWNodW5rLXRlc3QzIiwgKHN0YXR1cyA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJhdGNoLWNtdC1jaHVuay10ZXN0MyIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBjaGVja0pvYkV4ZWN1dGlvbihsb25nIGV4ZWN1dGlvbklkKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIGJvb2xlYW4gc3RhdHVzID0gdHJ1ZTsKLQkgICAgTWFwPFN0cmluZywgU3RyaW5nPiBtYXAgPSBqb2JTdWJtaXR0ZXIudG9NYXAoZXhlY3V0aW9uSWQpOworICAgICAgICBib29sZWFuIHN0YXR1cyA9IHRydWU7CisgICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gbWFwID0gam9iU3VibWl0dGVyLnRvTWFwKGV4ZWN1dGlvbklkKTsKIAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJhdGNoLWNtdC1zdGF0dXMtY2hlY2tFeGUtam9iTmFtZSIsIG1hcC5nZXQoImpvYk5hbWUiKSAhPSBudWxsID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJiYXRjaC1jbXQtc3RhdHVzLWNoZWNrRXhlLWFwcE5hbWUiLCBtYXAuZ2V0KCJhcHBOYW1lIikgIT0gbnVsbCA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CkBAIC0xMTIsNyArMTEyLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJiYXRjaC1jbXQtc3RhdHVzLWNoZWNrRXhlLWJhdGNoU3RhdHVzIiwgbWFwLmdldCgiYmF0Y2hTdGF0dXMiKSAhPSBudWxsID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJiYXRjaC1jbXQtc3RhdHVzLWNoZWNrRXhlLWVuZFRpbWUiLCBtYXAuZ2V0KCJlbmRUaW1lIikgIT0gbnVsbCA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CiAKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJiYXRjaC1jbXQtY2h1bmstdGVzdDMiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTIzLDE4ICsxMjMsMTggQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja09uZUpvYkV4ZWN1dGlvbihsb25nIGV4ZWN1dGlvbklkKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gbWFwID0gam9iU3VibWl0dGVyLnRvTWFwKGV4ZWN1dGlvbklkKTsKLQkgICAgcmV0dXJuIG1hcCAhPSBudWxsICYmCi0gICAgICAgICAgICAJbWFwLmdldCgiam9iTmFtZSIpICE9IG51bGwgJiYKLSAgICAgICAgICAgIAltYXAuZ2V0KCJhcHBOYW1lIikgIT0gbnVsbCAmJgotICAgICAgICAgICAgCW1hcC5nZXQoImluc3RhbmNlQ291bnQiKSAhPSBudWxsICYmCi0gICAgICAgICAgICAJbWFwLmdldCgiaW5zdGFuY2VJRCIpICE9IG51bGwgJiYKLSAgICAgICAgICAgIAltYXAuZ2V0KCJleGVjdXRpb25JRCIpICE9IG51bGwgJiYKLSAgICAgICAgICAgIAltYXAuZ2V0KCJzdGFydFRpbWUiKSAhPSBudWxsICYmCi0gICAgICAgICAgICAJbWFwLmdldCgiYmF0Y2hTdGF0dXMiKSAhPSBudWxsICYmCi0gICAgICAgICAgICAJbWFwLmdldCgiZW5kVGltZSIpICE9IG51bGw7CisgICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gbWFwID0gam9iU3VibWl0dGVyLnRvTWFwKGV4ZWN1dGlvbklkKTsKKyAgICAgICAgcmV0dXJuIG1hcCAhPSBudWxsICYmCisgICAgICAgICAgICAgICAgbWFwLmdldCgiam9iTmFtZSIpICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICBtYXAuZ2V0KCJhcHBOYW1lIikgIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgIG1hcC5nZXQoImluc3RhbmNlQ291bnQiKSAhPSBudWxsICYmCisgICAgICAgICAgICAgICAgbWFwLmdldCgiaW5zdGFuY2VJRCIpICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICBtYXAuZ2V0KCJleGVjdXRpb25JRCIpICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICBtYXAuZ2V0KCJzdGFydFRpbWUiKSAhPSBudWxsICYmCisgICAgICAgICAgICAgICAgbWFwLmdldCgiYmF0Y2hTdGF0dXMiKSAhPSBudWxsICYmCisgICAgICAgICAgICAgICAgbWFwLmdldCgiZW5kVGltZSIpICE9IG51bGw7CiAKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKIAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0NSw0NSArMTQ1LDQ1IEBACiAgICAgICAgZm9yIChsb25nIGV4ZUlkIDogam9iU3VibWl0dGVyLmdldEFsbEV4ZWN1dGlvbklkcyhudWxsKSkgewogICAgICAgICAgICBpZiAoIWNoZWNrT25lSm9iRXhlY3V0aW9uKGV4ZUlkKSkgewogICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKLQkgICAgICBicmVhazsKLQkgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgfQogICAgICAgIH0KICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJhdGNoLWNtdC1zdGF0dXMtY2hlY2tFeGUtY2hlY2tBbGxKb2JFeGVjdXRpb25zIiwgcmVzdWx0ID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBjaGVja0lmT25seUpvYnNGcm9tVGhpc0FwcEFyZVZpc2libGUoKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIGJvb2xlYW4gc3RhdHVzID0gdHJ1ZTsKKyAgICAgICAgYm9vbGVhbiBzdGF0dXMgPSB0cnVlOwogICAgICAgICAgICAgZm9yIChsb25nIGV4ZUlkIDogam9iU3VibWl0dGVyLmdldEFsbEV4ZWN1dGlvbklkcyhudWxsKSkgewotCSAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBtYXAgPSBqb2JTdWJtaXR0ZXIudG9NYXAoZXhlSWQpOwotCQlTdHJpbmcgam9iTmFtZSA9IG1hcC5nZXQoImpvYk5hbWUiKTsKLQkJU3RyaW5nIGFwcE5hbWUgPSBtYXAuZ2V0KCJhcHBOYW1lIik7Ci0JICAgICAgICBpZiAoIWpvYk5hbWUuc3RhcnRzV2l0aCgiU2ltcGxlLVZhbGlkYXRpb24tSm9iIikgfHwgIWFwcE5hbWUuc3RhcnRzV2l0aCgic2VydmVyLWNvbmZpZzpTaW1wbGUtVmFsaWRhdGlvbkFwcCIpKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiBKb2IgRnJvbSBhbm90aGVyIGFwcD8gIiArIGpvYk5hbWUgKyAiOyAiICsgYXBwTmFtZSArICIgKioqIik7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7Ci0JCSAgICBzdGF0dXMgPSBmYWxzZTsKLQkJICAgIGJyZWFrOwotCQl9Ci0JICAgIH0KKyAgICAgICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gbWFwID0gam9iU3VibWl0dGVyLnRvTWFwKGV4ZUlkKTsKKyAgICAgICAgU3RyaW5nIGpvYk5hbWUgPSBtYXAuZ2V0KCJqb2JOYW1lIik7CisgICAgICAgIFN0cmluZyBhcHBOYW1lID0gbWFwLmdldCgiYXBwTmFtZSIpOworICAgICAgICAgICAgaWYgKCFqb2JOYW1lLnN0YXJ0c1dpdGgoIlNpbXBsZS1WYWxpZGF0aW9uLUpvYiIpIHx8ICFhcHBOYW1lLnN0YXJ0c1dpdGgoInNlcnZlci1jb25maWc6U2ltcGxlLVZhbGlkYXRpb25BcHAiKSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKiogSm9iIEZyb20gYW5vdGhlciBhcHA/ICIgKyBqb2JOYW1lICsgIjsgIiArIGFwcE5hbWUgKyAiICoqKiIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworICAgICAgICAgICAgc3RhdHVzID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYmF0Y2gtY210LWNodW5rLWNoZWNrSWZPbmx5Sm9ic0Zyb21UaGlzQXBwQXJlVmlzaWJsZSIsIChzdGF0dXMgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJiYXRjaC1jbXQtY2h1bmstY2hlY2tJZk9ubHlKb2JzRnJvbVRoaXNBcHBBcmVWaXNpYmxlIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGNoZWNrQmF0Y2hKb2JTdGF0dXMobG9uZyBleGVjdXRpb25JZCwgaW50IHNlYykgewotCXdoaWxlIChzZWMtLSA+IDApIHsKKyAgICB3aGlsZSAoc2VjLS0gPiAwKSB7CiAgICAgICAgICAgICB0cnkgewotCQlTdHJpbmcgc3RhdHVzID0gam9iU3VibWl0dGVyLmdldEpvYkV4aXRTdGF0dXMoZXhlY3V0aW9uSWQpOwotCQlpZiAoIkNPTVBMRVRFRCIuZXF1YWxzSWdub3JlQ2FzZShzdGF0dXMpIHx8ICJGQUlMRUQiLmVxdWFsc0lnbm9yZUNhc2Uoc3RhdHVzKSkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKiBjaGVja0JhdGNoSm9iU3RhdHVzWyIgKyBleGVjdXRpb25JZCArICJdICA9PT4gIiArIHN0YXR1cyk7Ci0JCSAgICBicmVhazsKLQkJfQorICAgICAgICBTdHJpbmcgc3RhdHVzID0gam9iU3VibWl0dGVyLmdldEpvYkV4aXRTdGF0dXMoZXhlY3V0aW9uSWQpOworICAgICAgICBpZiAoIkNPTVBMRVRFRCIuZXF1YWxzSWdub3JlQ2FzZShzdGF0dXMpIHx8ICJGQUlMRUQiLmVxdWFsc0lnbm9yZUNhc2Uoc3RhdHVzKSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKiBjaGVja0JhdGNoSm9iU3RhdHVzWyIgKyBleGVjdXRpb25JZCArICJdICA9PT4gIiArIHN0YXR1cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2lsbCBzbGVlcCBmb3IgIiArIHNlYyArICIgbW9yZSBzZWNvbmRzLi4uIik7CiAgICAgICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMDAwKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICB9CisgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9kZXNjcmlwdG9yL2JhdGNoLWpvYnMvQ01ULU9uZVN0ZXBKb2IueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9kZXNjcmlwdG9yL2JhdGNoLWpvYnMvQ01ULU9uZVN0ZXBKb2IueG1sCmluZGV4IDFkZTBjZDYuLjdhMjk0N2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZGVzY3JpcHRvci9iYXRjaC1qb2JzL0NNVC1PbmVTdGVwSm9iLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2Rlc2NyaXB0b3IvYmF0Y2gtam9icy9DTVQtT25lU3RlcEpvYi54bWwKQEAgLTIwLDkgKzIwLDkgQEAKIDxqb2IgaWQ9ImNtdC1jaHVuay1qb2IiIHhtbG5zPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIiB2ZXJzaW9uPSIxLjAiPgogICAgIDxzdGVwIGlkPSJzdGVwMSI+CiAgICAgICAgIDxjaHVuayBpdGVtLWNvdW50PSIzIj4KLSAgICAgICAgICAgIDxyZWFkZXIgcmVmPSJTaW1wbGVJdGVtUmVhZGVyIj48L3JlYWRlcj4gCisgICAgICAgICAgICA8cmVhZGVyIHJlZj0iU2ltcGxlSXRlbVJlYWRlciI+PC9yZWFkZXI+CiAgICAgICAgICAgICA8cHJvY2Vzc29yIHJlZj0iU2ltcGxlSXRlbVByb2Nlc3NvciI+PC9wcm9jZXNzb3I+Ci0gICAgICAgICAgICA8d3JpdGVyIHJlZj0iU2ltcGxlSXRlbVdyaXRlciI+PC93cml0ZXI+IAorICAgICAgICAgICAgPHdyaXRlciByZWY9IlNpbXBsZUl0ZW1Xcml0ZXIiPjwvd3JpdGVyPgogICAgICAgICA8L2NodW5rPgogICAgIDwvc3RlcD4KIDwvam9iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9kZXNjcmlwdG9yL2JhdGNoLWpvYnMvU2ltcGxlLVZhbGlkYXRpb24tSm9iLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZGVzY3JpcHRvci9iYXRjaC1qb2JzL1NpbXBsZS1WYWxpZGF0aW9uLUpvYi54bWwKaW5kZXggODM3ZTFiMS4uYzAzMmQ5ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9kZXNjcmlwdG9yL2JhdGNoLWpvYnMvU2ltcGxlLVZhbGlkYXRpb24tSm9iLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2Rlc2NyaXB0b3IvYmF0Y2gtam9icy9TaW1wbGUtVmFsaWRhdGlvbi1Kb2IueG1sCkBAIC0yMCwxNiArMjAsMTYgQEAKIDxqb2IgaWQ9IlNpbXBsZS1WYWxpZGF0aW9uLUpvYiIgeG1sbnM9Imh0dHBzOi8vamFrYXJ0YS5lZS94bWwvbnMvamFrYXJ0YWVlIiB2ZXJzaW9uPSIyLjAiPgogICAgIDxzdGVwIGlkPSJzdGVwMSIgbmV4dD0ic3RlcDIiPgogICAgICAgICA8Y2h1bmsgaXRlbS1jb3VudD0iMyI+Ci0gICAgICAgICAgICA8cmVhZGVyIHJlZj0iU2ltcGxlSXRlbVJlYWRlciI+PC9yZWFkZXI+IAorICAgICAgICAgICAgPHJlYWRlciByZWY9IlNpbXBsZUl0ZW1SZWFkZXIiPjwvcmVhZGVyPgogICAgICAgICAgICAgPHByb2Nlc3NvciByZWY9IlNpbXBsZUl0ZW1Qcm9jZXNzb3IiPjwvcHJvY2Vzc29yPgotICAgICAgICAgICAgPHdyaXRlciByZWY9IlNpbXBsZUl0ZW1Xcml0ZXIiPjwvd3JpdGVyPiAKKyAgICAgICAgICAgIDx3cml0ZXIgcmVmPSJTaW1wbGVJdGVtV3JpdGVyIj48L3dyaXRlcj4KICAgICAgICAgPC9jaHVuaz4KICAgICA8L3N0ZXA+CiAgICAgPHN0ZXAgaWQ9InN0ZXAyIj4KICAgICAgICAgPGNodW5rIGl0ZW0tY291bnQ9IjIiPgotICAgICAgICAgICAgPHJlYWRlciByZWY9IlNpbXBsZUl0ZW1SZWFkZXIiPjwvcmVhZGVyPiAKKyAgICAgICAgICAgIDxyZWFkZXIgcmVmPSJTaW1wbGVJdGVtUmVhZGVyIj48L3JlYWRlcj4KICAgICAgICAgICAgIDxwcm9jZXNzb3IgcmVmPSJTaW1wbGVJdGVtUHJvY2Vzc29yIj48L3Byb2Nlc3Nvcj4KLSAgICAgICAgICAgIDx3cml0ZXIgcmVmPSJTaW1wbGVJdGVtV3JpdGVyIj48L3dyaXRlcj4gCisgICAgICAgICAgICA8d3JpdGVyIHJlZj0iU2ltcGxlSXRlbVdyaXRlciI+PC93cml0ZXI+CiAgICAgICAgIDwvY2h1bms+CiAgICAgPC9zdGVwPgogPC9qb2I+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvSWRHZW5lcmF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9JZEdlbmVyYXRvci5qYXZhCmluZGV4IDc4MjMyNDkuLjM5MTY4YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9JZEdlbmVyYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9JZEdlbmVyYXRvci5qYXZhCkBAIC0yMSw1ICsyMSw1IEBACiBwdWJsaWMgaW50ZXJmYWNlIElkR2VuZXJhdG9yIHsKIAogICAgIHB1YmxpYyBTdHJpbmcgbmV4dElkKCk7Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9Kb2JTdWJtaXR0ZXJCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvSm9iU3VibWl0dGVyQmVhbi5qYXZhCmluZGV4IDk1OWEzYWMuLmFhNWE2OWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9Kb2JTdWJtaXR0ZXJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL0pvYlN1Ym1pdHRlckJlYW4uamF2YQpAQCAtNDUsNzUgKzQ1LDc1IEBACiAgICAgfQogCiAgICAgcHVibGljIGxvbmcgc3VibWl0Sm9iKFN0cmluZyBqb2JOYW1lKSB7Ci0JdHJ5IHsKLQkgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7CisgICAgdHJ5IHsKKyAgICAgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7CiAKLQkgIFByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOwotCSAgZm9yIChpbnQgaT0wOyBpPDM7IGkrKykKLQkJcHJvcHMucHV0KGpvYk5hbWUgKyAiLUtleS0iICsgaSwgam9iTmFtZSsiLVZhbHVlLSIgKyBpKTsKLQkgIHJldHVybiAgam9iT3BlcmF0b3Iuc3RhcnQoam9iTmFtZSwgcHJvcHMpOworICAgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisgICAgICBmb3IgKGludCBpPTA7IGk8MzsgaSsrKQorICAgICAgICBwcm9wcy5wdXQoam9iTmFtZSArICItS2V5LSIgKyBpLCBqb2JOYW1lKyItVmFsdWUtIiArIGkpOworICAgICAgcmV0dXJuICBqb2JPcGVyYXRvci5zdGFydChqb2JOYW1lLCBwcm9wcyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOwotCX0KKyAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBnZXRKb2JFeGl0U3RhdHVzKGxvbmcgZXhlY3V0aW9uSWQpIHsKLQl0cnkgewotCSAgSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKLQkgIEpvYkV4ZWN1dGlvbiBqZSA9ICBqb2JPcGVyYXRvci5nZXRKb2JFeGVjdXRpb24oZXhlY3V0aW9uSWQpOwotCSAgcmV0dXJuIGplLmdldEV4aXRTdGF0dXMoKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKLQl9CisgICAgdHJ5IHsKKyAgICAgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7CisgICAgICBKb2JFeGVjdXRpb24gamUgPSAgam9iT3BlcmF0b3IuZ2V0Sm9iRXhlY3V0aW9uKGV4ZWN1dGlvbklkKTsKKyAgICAgIHJldHVybiBqZS5nZXRFeGl0U3RhdHVzKCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7CisgICAgfQogCiAgICAgfQogCiAgICAgcHVibGljIENvbGxlY3Rpb248U3RyaW5nPiBsaXN0Sm9icyhib29sZWFuIHVzZUxvbmdGb3JtYXQpIHsKLQl0cnkgewotCSAgSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKLQkgIFNldDxTdHJpbmc+IGpvYnMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0JICBpZiAoIXVzZUxvbmdGb3JtYXQpIHsKLQkgICAgICBmb3IgKFN0cmluZyBqb2JOYW1lIDogam9iT3BlcmF0b3IuZ2V0Sm9iTmFtZXMoKSkgewotCSAgICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLQkJICBzYi5hcHBlbmQoam9iTmFtZSkuYXBwZW5kKCIgIikuYXBwZW5kKGpvYk9wZXJhdG9yLmdldEpvYkluc3RhbmNlQ291bnQoam9iTmFtZSkpOwotCQkgIGpvYnMuYWRkKHNiLnRvU3RyaW5nKCkpOwotCSAgICAgfQorICAgIHRyeSB7CisgICAgICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOworICAgICAgU2V0PFN0cmluZz4gam9icyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICAgIGlmICghdXNlTG9uZ0Zvcm1hdCkgeworICAgICAgICAgIGZvciAoU3RyaW5nIGpvYk5hbWUgOiBqb2JPcGVyYXRvci5nZXRKb2JOYW1lcygpKSB7CisgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgICAgICAgIHNiLmFwcGVuZChqb2JOYW1lKS5hcHBlbmQoIiAiKS5hcHBlbmQoam9iT3BlcmF0b3IuZ2V0Sm9iSW5zdGFuY2VDb3VudChqb2JOYW1lKSk7CisgICAgICAgICAgam9icy5hZGQoc2IudG9TdHJpbmcoKSk7CisgICAgICAgICB9CiAgICAgICAgICAgfSBlbHNlIHsKLQkgICAgIGludCBpbmRleCA9IDA7Ci0JICAgICBmb3IgKFN0cmluZyBqb2JOYW1lIDogam9iT3BlcmF0b3IuZ2V0Sm9iTmFtZXMoKSkgewotCQlMaXN0PEpvYkluc3RhbmNlPiBleGUgPSBqb2JPcGVyYXRvci5nZXRKb2JJbnN0YW5jZXMoam9iTmFtZSwgMCwgSW50ZWdlci5NQVhfVkFMVUUgLSAxKTsKLQkJaWYgKGV4ZSAhPSBudWxsKSB7Ci0JCSAgIGZvciAoSm9iSW5zdGFuY2UgamkgOiBleGUpIHsKLQkJICAgICAgZm9yIChKb2JFeGVjdXRpb24gamUgOiBqb2JPcGVyYXRvci5nZXRKb2JFeGVjdXRpb25zKGppKSkgewotCSAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgICAgICAgaW50IGluZGV4ID0gMDsKKyAgICAgICAgIGZvciAoU3RyaW5nIGpvYk5hbWUgOiBqb2JPcGVyYXRvci5nZXRKb2JOYW1lcygpKSB7CisgICAgICAgIExpc3Q8Sm9iSW5zdGFuY2U+IGV4ZSA9IGpvYk9wZXJhdG9yLmdldEpvYkluc3RhbmNlcyhqb2JOYW1lLCAwLCBJbnRlZ2VyLk1BWF9WQUxVRSAtIDEpOworICAgICAgICBpZiAoZXhlICE9IG51bGwpIHsKKyAgICAgICAgICAgZm9yIChKb2JJbnN0YW5jZSBqaSA6IGV4ZSkgeworICAgICAgICAgICAgICBmb3IgKEpvYkV4ZWN1dGlvbiBqZSA6IGpvYk9wZXJhdG9yLmdldEpvYkV4ZWN1dGlvbnMoamkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoaW5kZXgrKykuYXBwZW5kKCIgIikuYXBwZW5kKGpvYk5hbWUpLmFwcGVuZCgiICIpLmFwcGVuZCgoKFRhZ2dlZEpvYkV4ZWN1dGlvbikgamUpLmdldFRhZ05hbWUoKSkKLQkJCSAgICAgIAkuYXBwZW5kKCIgIikuYXBwZW5kKGplLmdldEJhdGNoU3RhdHVzKCkpLmFwcGVuZCgiICIpLmFwcGVuZChqZS5nZXRFeGl0U3RhdHVzKCkpOwotCSAgICAgICAgICAgICAgICAgICAgICBqb2JzLmFkZChzYi50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKCIgIikuYXBwZW5kKGplLmdldEJhdGNoU3RhdHVzKCkpLmFwcGVuZCgiICIpLmFwcGVuZChqZS5nZXRFeGl0U3RhdHVzKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICBqb2JzLmFkZChzYi50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgICAgICAgICAgICAgICAgICAgIGpvYnMuYWRkKCJFeGNlcHRpb24gOiAiICsgc2IudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGpvYnMuYWRkKCJFeGNlcHRpb24gOiAiICsgc2IudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQotCQl9Ci0JICAgICB9Ci0JICAgfQorICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgfQogCi0JICAgcmV0dXJuIGpvYnM7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7Ci0JfQorICAgICAgIHJldHVybiBqb2JzOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOworICAgIH0KICAgICAgfQogCiAgICAgcHVibGljIE1hcDxTdHJpbmcsIFN0cmluZz4gdG9NYXAobG9uZyBleGVjdXRpb25JZCkgewogICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOwogICAgICAgIHRyeSB7Ci0JICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOwotCSAgSm9iRXhlY3V0aW9uIGplID0gam9iT3BlcmF0b3IuZ2V0Sm9iRXhlY3V0aW9uKGV4ZWN1dGlvbklkKTsKKyAgICAgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7CisgICAgICBKb2JFeGVjdXRpb24gamUgPSBqb2JPcGVyYXRvci5nZXRKb2JFeGVjdXRpb24oZXhlY3V0aW9uSWQpOwogICAgICAgICAgIG1hcC5wdXQoImpvYk5hbWUiLCAiIitqZS5nZXRKb2JOYW1lKCkpOwogICAgICAgICAgIG1hcC5wdXQoImFwcE5hbWUiLCAiIisoKFRhZ2dlZEpvYkV4ZWN1dGlvbikgamUpLmdldFRhZ05hbWUoKSk7CiAKLQkgIHRyeSB7CisgICAgICB0cnkgewogICAgICAgICAgICAgbWFwLnB1dCgiaW5zdGFuY2VDb3VudCIsICIiK2pvYk9wZXJhdG9yLmdldEpvYkluc3RhbmNlQ291bnQoamUuZ2V0Sm9iTmFtZSgpKSk7CiAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7fQogCkBAIC0xMjksMzkgKzEyOSwzOSBAQAogCiAgICAgICAgcmV0dXJuIG1hcDsKICAgICB9Ci0JCisKICAgICBwdWJsaWMgQ29sbGVjdGlvbjxTdHJpbmc+IGxpc3RKb2JFeGVjdXRpb25zKGJvb2xlYW4gdXNlTG9uZ0Zvcm1hdCwgbG9uZy4uLiBleGVjdXRpbklkcykgewotCVNldDxTdHJpbmc+IGpvYnMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0JcmV0dXJuIGpvYnM7CisgICAgU2V0PFN0cmluZz4gam9icyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICByZXR1cm4gam9iczsKICAgICB9CiAKICAgICBwdWJsaWMgTGlzdDxMb25nPiBnZXRBbGxFeGVjdXRpb25JZHMoU3RyaW5nIGpvYk5hbWUpIHsKLQlMaXN0PExvbmc+IGxpc3QgPSBuZXcgTGlua2VkTGlzdDxMb25nPigpOwotCXRyeSB7CisgICAgTGlzdDxMb25nPiBsaXN0ID0gbmV3IExpbmtlZExpc3Q8TG9uZz4oKTsKKyAgICB0cnkgewogICAgICAgICBpZiAoam9iTmFtZSAhPSBudWxsKQogICAgICAgICAgICBnZXRBbGxFeGVjdXRpb25JZHMoam9iTmFtZSwgbGlzdCk7Ci0JZWxzZSB7Ci0JICAgSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKLQkgICBmb3IgKFN0cmluZyBqbiA6IGpvYk9wZXJhdG9yLmdldEpvYk5hbWVzKCkpCisgICAgZWxzZSB7CisgICAgICAgSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKKyAgICAgICBmb3IgKFN0cmluZyBqbiA6IGpvYk9wZXJhdG9yLmdldEpvYk5hbWVzKCkpCiAgICAgICAgICAgICAgIGdldEFsbEV4ZWN1dGlvbklkcyhqbiwgbGlzdCk7Ci0JfQorICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAKLQl9Ci0JcmV0dXJuIGxpc3Q7CisgICAgfQorICAgIHJldHVybiBsaXN0OwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBnZXRBbGxFeGVjdXRpb25JZHMoU3RyaW5nIGpvYk5hbWUsIExpc3Q8TG9uZz4gbGlzdCkKLSAgICAJdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKLQlMaXN0PEpvYkluc3RhbmNlPiBleGUgPSBqb2JPcGVyYXRvci5nZXRKb2JJbnN0YW5jZXMoam9iTmFtZSwgMCwgSW50ZWdlci5NQVhfVkFMVUUgLSAxKTsKLQlpZiAoZXhlICE9IG51bGwpIHsKLQkgICBmb3IgKEpvYkluc3RhbmNlIGppIDogZXhlKSB7Ci0JICAgICAgZm9yIChKb2JFeGVjdXRpb24gamUgOiBqb2JPcGVyYXRvci5nZXRKb2JFeGVjdXRpb25zKGppKSkgeworICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOworICAgIExpc3Q8Sm9iSW5zdGFuY2U+IGV4ZSA9IGpvYk9wZXJhdG9yLmdldEpvYkluc3RhbmNlcyhqb2JOYW1lLCAwLCBJbnRlZ2VyLk1BWF9WQUxVRSAtIDEpOworICAgIGlmIChleGUgIT0gbnVsbCkgeworICAgICAgIGZvciAoSm9iSW5zdGFuY2UgamkgOiBleGUpIHsKKyAgICAgICAgICBmb3IgKEpvYkV4ZWN1dGlvbiBqZSA6IGpvYk9wZXJhdG9yLmdldEpvYkV4ZWN1dGlvbnMoamkpKSB7CiAgICAgICAgICAgICAgICAgIGxpc3QuYWRkKGplLmdldEV4ZWN1dGlvbklkKCkpOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KLQl9CisgICAgfQogICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJZEdlbmVyYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL1NpbXBsZUlkR2VuZXJhdG9yLmphdmEKaW5kZXggMGNmNGVlMi4uMWRhNjQ0NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL1NpbXBsZUlkR2VuZXJhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL1NpbXBsZUlkR2VuZXJhdG9yLmphdmEKQEAgLTIyLDkgKzIyLDkgQEAKICAqLwogcHVibGljIGNsYXNzIFNpbXBsZUlkR2VuZXJhdG9yCiAgICAgaW1wbGVtZW50cyBJZEdlbmVyYXRvciB7Ci0gICAgCisKICAgICBwcml2YXRlIEF0b21pY0ludGVnZXIgY291bnRlciA9IG5ldyBBdG9taWNJbnRlZ2VyKDApOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBuZXh0SWQoKSB7CiAgICAgICAgIHJldHVybiAiIiArIGNvdW50ZXIuaW5jcmVtZW50QW5kR2V0KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL1NpbXBsZUl0ZW1Qcm9jZXNzb3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJdGVtUHJvY2Vzc29yLmphdmEKaW5kZXggZjQwYmFiNi4uNWY4ZTRiMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL1NpbXBsZUl0ZW1Qcm9jZXNzb3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvU2ltcGxlSXRlbVByb2Nlc3Nvci5qYXZhCkBAIC0yMywxMiArMjMsMTIgQEAKIAogICAgIEBJbmplY3QKICAgICBJZEdlbmVyYXRvciBpZEdlbjsKLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBTdHJpbmcgcHJvY2Vzc0l0ZW0oT2JqZWN0IG9iaikgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3RyaW5nIHQgPSAoU3RyaW5nKSBvYmo7CisgICAgU3RyaW5nIHQgPSAoU3RyaW5nKSBvYmo7CiAgICAgICAgIFN0cmluZ1tdIHJlY29yZCA9IHQuc3BsaXQoIiwgIik7Ci0gICAgICAgIAorCiAgICAgLy9FTVAtSUQsIE1PTlRILVlFQVIsIFNBTEFSWSwgVEFYJSwgTUVESUNBUkUlLCBPVEhFUgogICAgICAgICBpbnQgc2FsYXJ5ID0gSW50ZWdlci52YWx1ZU9mKHJlY29yZFsyXSk7CiAgICAgICAgIGRvdWJsZSB0YXggPSBEb3VibGUudmFsdWVPZihyZWNvcmRbM10pOwpAQCAtNDEsNSArNDEsNSBAQAogU3lzdGVtLm91dC5wcmludGxuKCJJZEdlbiA9PT4gIiArIGlkR2VuKTsKICAgICAgICAgcmV0dXJuICBzYi50b1N0cmluZygpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL1NpbXBsZUl0ZW1SZWFkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJdGVtUmVhZGVyLmphdmEKaW5kZXggY2MxN2MyZi4uMDE2MjJmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL1NpbXBsZUl0ZW1SZWFkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvU2ltcGxlSXRlbVJlYWRlci5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgaW1wbGVtZW50cyBqYWthcnRhLmJhdGNoLmFwaS5jaHVuay5JdGVtUmVhZGVyIHsKIAogICAgIHByaXZhdGUgaW50IGluZGV4ID0gMDsKLSAgICAKKwogICAgIC8vRU1QLUlELCBNT05USC1ZRUFSLCBTQUxBUlksIFRBWCUsIE1FRElDQVJFJSwgT1RIRVIKICAgICBwcml2YXRlIFN0cmluZ1tdIGl0ZW1zID0gbmV3IFN0cmluZ1tdIHsKICAgICAgICAgIjEyMC0wMSwgSkFOLTIwMTMsIDgwMDAsIDI3LCAzLCAwIiwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgIjEyMC0wNywgSkFOLTIwMTMsIDExMDAwLCAzNiwgNSwgMCIsCiAgICAgICAgICIxMjAtMDgsIEpBTi0yMDEzLCAxMTUwMCwgMzYsIDUsIDAiLAogICAgIH07Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvcGVuKFNlcmlhbGl6YWJsZSBlKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICB9CkBAIC01MSw1ICs1MSw1IEBACiAgICAgcHVibGljIFNlcmlhbGl6YWJsZSBjaGVja3BvaW50SW5mbygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJdGVtV3JpdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvU2ltcGxlSXRlbVdyaXRlci5qYXZhCmluZGV4IDE1YzVlOWUuLjAxNzhjZjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJdGVtV3JpdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL1NpbXBsZUl0ZW1Xcml0ZXIuamF2YQpAQCAtMTksNyArMTksNyBAQAogQGpha2FydGEuaW5qZWN0Lk5hbWVkKCJTaW1wbGVJdGVtV3JpdGVyIikKIHB1YmxpYyBjbGFzcyBTaW1wbGVJdGVtV3JpdGVyCiAgICAgaW1wbGVtZW50cyBqYWthcnRhLmJhdGNoLmFwaS5jaHVuay5JdGVtV3JpdGVyIHsKLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9wZW4oU2VyaWFsaXphYmxlIGUpIHRocm93cyBFeGNlcHRpb24gewogICAgIH0KQEAgLTMxLDE3ICszMSwxNyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHdyaXRlSXRlbXMoTGlzdCBsc3QpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoIlNpbXBsZUl0ZW1Xcml0ZXI6Iik7Ci0JTGlzdDxTdHJpbmc+IGxpc3QgPSAoTGlzdDxTdHJpbmc+KSBsc3Q7CisgICAgTGlzdDxTdHJpbmc+IGxpc3QgPSAoTGlzdDxTdHJpbmc+KSBsc3Q7CiAgICAgICAgIGZvciAoU3RyaW5nIHMgOiBsaXN0KSB7CiAgICAgICAgICAgICBzYi5hcHBlbmQoIiAiKS5hcHBlbmQocyk7CiAgICAgICAgIH0KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHNiLnRvU3RyaW5nKCkpOwotCXRyeSB7IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMTAwMCk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkge30KKyAgICB0cnkgeyBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEwMDApOyB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHt9CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFNlcmlhbGl6YWJsZSBjaGVja3BvaW50SW5mbygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvYnVpbGQucHJvcGVydGllcwppbmRleCA1MGEyODJlLi41MTJjMGY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMyArMTUsMTMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImRldnRlc3QtYmF0Y2gtdHdvLXN0ZXBzLWpvYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImJlYW5zLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYmVhbnMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYmF0Y2gueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9iYXRjaC54bWwiLz4KQEAgLTI5LDExICsyOSwxMSBAQAogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImJhdGNoLmpvYnMuZGlyIiB2YWx1ZT0iZGVzY3JpcHRvci9iYXRjaC1qb2JzIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJiYXRjaF9kZXJieS5zcWwiIHZhbHVlPSIuLi8uLi9iYXRjaF9kZXJieS5zcWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9idWlsZC54bWwKaW5kZXggNDA4NjU0Zi4uY2QwNWM3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9idWlsZC54bWwKQEAgLTM4LDcgKzM4LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUxLDE5ICs1MSwxOSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TbGVzcy5jbGFzcywqKi9TbGVzczMwLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJjb3B5LWJhdGNoLXNxbCIgZGVwZW5kcz0iYnVpbGQiPgotICAgIAk8ZWNobyBtZXNzYWdlPSIqKioqKiBDb3B5ICR7YmF0Y2hfZGVyYnkuc3FsfSB0byBUYXJnZXQgZGlyOiAke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgotICAgIAk8Y29weSBmaWxlPSIke2JhdGNoX2RlcmJ5LnNxbH0iIHRvZGlyPSIke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgogICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iY29weS1iYXRjaC1zcWwiIGRlcGVuZHM9ImJ1aWxkIj4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iKioqKiogQ29weSAke2JhdGNoX2RlcmJ5LnNxbH0gdG8gVGFyZ2V0IGRpcjogJHtlbnYuUzFBU19IT01FfS9saWIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtiYXRjaF9kZXJieS5zcWx9IiB0b2Rpcj0iJHtlbnYuUzFBU19IT01FfS9saWIiLz4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTcxLDEwICs3MSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGMxMDc1OGQuLmMzOWY1ODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiBARUpCKG5hbWU9ImVqYi9HRyIsIGJlYW5JbnRlcmZhY2U9U2xlc3MuY2xhc3MpCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzUsMzMgKzM1LDMzIEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJiYXRjaC10d28tc3RlcHMtc3RhdGVsZXNzIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIEBFSkIobmFtZT0iZWpiL2trIikgU2xlc3Mgc2xlc3M7CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvR0ciKTsKLQkgICAgbG9uZyBleGVjdXRpb25JZCA9IHNsZXNzLnN1Ym1pdEpvYigpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKiogSm9iSUQ6ICIgKyBleGVjdXRpb25JZCArICIgKioqKioqKioqKioqKioqKioqIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7Ci0JICAgIFN0cmluZyBqb2JCYXRjaFN0YXR1cyA9ICIiOwotCSAgICBmb3IgKGludCBzZWM9MTA7IHNlYz4wOyBzZWMtLSkgewotCSAgICAgICAgdHJ5IHsKLQkJICAgIGpvYkJhdGNoU3RhdHVzID0gc2xlc3MuZ2V0Sm9iRXhpdFN0YXR1cyhleGVjdXRpb25JZCk7Ci0JCSAgICBpZiAoISAiQ09NUExFVEVEIi5lcXVhbHMoam9iQmF0Y2hTdGF0dXMpKSB7Ci0JCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXaWxsIHNsZWVwIGZvciAiICsgc2VjICsgIiBtb3JlIHNlY29uZHMuLi46ICIgKyBqb2JCYXRjaFN0YXR1cyk7Ci0JCSAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMDAwKTsKLQkJICAgIH0KLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCX0KLQkgICAgfQorICAgICAgICBsb25nIGV4ZWN1dGlvbklkID0gc2xlc3Muc3VibWl0Sm9iKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKiBKb2JJRDogIiArIGV4ZWN1dGlvbklkICsgIiAqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgICAgU3RyaW5nIGpvYkJhdGNoU3RhdHVzID0gIiI7CisgICAgICAgIGZvciAoaW50IHNlYz0xMDsgc2VjPjA7IHNlYy0tKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgam9iQmF0Y2hTdGF0dXMgPSBzbGVzcy5nZXRKb2JFeGl0U3RhdHVzKGV4ZWN1dGlvbklkKTsKKyAgICAgICAgICAgIGlmICghICJDT01QTEVURUQiLmVxdWFscyhqb2JCYXRjaFN0YXR1cykpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldpbGwgc2xlZXAgZm9yICIgKyBzZWMgKyAiIG1vcmUgc2Vjb25kcy4uLjogIiArIGpvYkJhdGNoU3RhdHVzKTsKKyAgICAgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEwMDApOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYmF0Y2gtdHdvLXN0ZXBzLXN0YXRlbGVzcyIsICgiQ09NUExFVEVEIi5lcXVhbHMoam9iQmF0Y2hTdGF0dXMpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYmF0Y2gtdHdvLXN0ZXBzLXN0YXRlbGVzcyIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2Rlc2NyaXB0b3IvYmF0Y2gtam9icy9Ud29TdGVwc0pvYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2Rlc2NyaXB0b3IvYmF0Y2gtam9icy9Ud29TdGVwc0pvYi54bWwKaW5kZXggYTg1YmExZS4uYmQ3ZTA4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9kZXNjcmlwdG9yL2JhdGNoLWpvYnMvVHdvU3RlcHNKb2IueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvZGVzY3JpcHRvci9iYXRjaC1qb2JzL1R3b1N0ZXBzSm9iLnhtbApAQCAtMjAsMTYgKzIwLDE2IEBACiA8am9iIGlkPSJ0d28tc3RlcHMtam9iIiB4bWxucz0iaHR0cDovL2JhdGNoLmpzcjM1Mi9qc2wiPgogICAgIDxzdGVwIGlkPSJzdGVwMSIgbmV4dD0ic3RlcDIiPgogICAgICAgICA8Y2h1bmsgaXRlbS1jb3VudD0iMSI+Ci0gICAgICAgICAgICA8cmVhZGVyIHJlZj0iU2ltcGxlSXRlbVJlYWRlciI+PC9yZWFkZXI+IAorICAgICAgICAgICAgPHJlYWRlciByZWY9IlNpbXBsZUl0ZW1SZWFkZXIiPjwvcmVhZGVyPgogICAgICAgICAgICAgPHByb2Nlc3NvciByZWY9IlNpbXBsZUl0ZW1Qcm9jZXNzb3IiPjwvcHJvY2Vzc29yPgotICAgICAgICAgICAgPHdyaXRlciByZWY9IlNpbXBsZUl0ZW1Xcml0ZXIiPjwvd3JpdGVyPiAKKyAgICAgICAgICAgIDx3cml0ZXIgcmVmPSJTaW1wbGVJdGVtV3JpdGVyIj48L3dyaXRlcj4KICAgICAgICAgPC9jaHVuaz4KICAgICA8L3N0ZXA+CiAgICAgPHN0ZXAgaWQ9InN0ZXAyIj4KICAgICAgICAgPGNodW5rIGl0ZW0tY291bnQ9IjIiPgotICAgICAgICAgICAgPHJlYWRlciByZWY9IlNpbXBsZUl0ZW1SZWFkZXIiPjwvcmVhZGVyPiAKKyAgICAgICAgICAgIDxyZWFkZXIgcmVmPSJTaW1wbGVJdGVtUmVhZGVyIj48L3JlYWRlcj4KICAgICAgICAgICAgIDxwcm9jZXNzb3IgcmVmPSJTaW1wbGVJdGVtUHJvY2Vzc29yIj48L3Byb2Nlc3Nvcj4KLSAgICAgICAgICAgIDx3cml0ZXIgcmVmPSJTaW1wbGVJdGVtV3JpdGVyIj48L3dyaXRlcj4gCisgICAgICAgICAgICA8d3JpdGVyIHJlZj0iU2ltcGxlSXRlbVdyaXRlciI+PC93cml0ZXI+CiAgICAgICAgIDwvY2h1bms+CiAgICAgPC9zdGVwPgogPC9qb2I+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC90d29zdGVwcy9JZEdlbmVyYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvdHdvc3RlcHMvSWRHZW5lcmF0b3IuamF2YQppbmRleCAxNmIwNmZmLi5jMjk4MWJkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC90d29zdGVwcy9JZEdlbmVyYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3R3b3N0ZXBzL0lkR2VuZXJhdG9yLmphdmEKQEAgLTIxLDUgKzIxLDUgQEAKIHB1YmxpYyBpbnRlcmZhY2UgSWRHZW5lcmF0b3IgewogCiAgICAgcHVibGljIFN0cmluZyBuZXh0SWQoKTsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvdHdvc3RlcHMvU2ltcGxlSWRHZW5lcmF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3R3b3N0ZXBzL1NpbXBsZUlkR2VuZXJhdG9yLmphdmEKaW5kZXggOWRjNDc5MC4uYTU4YzQ5NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvdHdvc3RlcHMvU2ltcGxlSWRHZW5lcmF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC90d29zdGVwcy9TaW1wbGVJZEdlbmVyYXRvci5qYXZhCkBAIC0yMiw5ICsyMiw5IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBTaW1wbGVJZEdlbmVyYXRvcgogICAgIGltcGxlbWVudHMgSWRHZW5lcmF0b3IgewotICAgIAorCiAgICAgcHJpdmF0ZSBBdG9taWNJbnRlZ2VyIGNvdW50ZXIgPSBuZXcgQXRvbWljSW50ZWdlcigwKTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgbmV4dElkKCkgewogICAgICAgICByZXR1cm4gIiIgKyBjb3VudGVyLmluY3JlbWVudEFuZEdldCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3R3b3N0ZXBzL1NpbXBsZUl0ZW1Qcm9jZXNzb3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3R3b3N0ZXBzL1NpbXBsZUl0ZW1Qcm9jZXNzb3IuamF2YQppbmRleCAyMWY0MmI1Li40MmE3NmIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC90d29zdGVwcy9TaW1wbGVJdGVtUHJvY2Vzc29yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvdHdvc3RlcHMvU2ltcGxlSXRlbVByb2Nlc3Nvci5qYXZhCkBAIC0yMywxMSArMjMsMTEgQEAKIAogLy8gICAgQEluamVjdAogLy8gICAgSWRHZW5lcmF0b3IgaWRHZW47Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgU3RyaW5nIHByb2Nlc3NJdGVtKFN0cmluZyB0KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nW10gcmVjb3JkID0gdC5zcGxpdCgiLCAiKTsKLSAgICAgICAgCisKICAgICAvL0VNUC1JRCwgTU9OVEgtWUVBUiwgU0FMQVJZLCBUQVglLCBNRURJQ0FSRSUsIE9USEVSCiAgICAgICAgIGludCBzYWxhcnkgPSBJbnRlZ2VyLnZhbHVlT2YocmVjb3JkWzJdKTsKICAgICAgICAgZG91YmxlIHRheCA9IERvdWJsZS52YWx1ZU9mKHJlY29yZFszXSk7CkBAIC0zOCw1ICszOCw1IEBACiAgICAgICAgIHNiLmFwcGVuZCgiLCAiKS5hcHBlbmQoc2FsYXJ5IC0gKHNhbGFyeSAqIHRheCAvIDEwMCkgLSAoc2FsYXJ5ICogbWVkaUNhcmUgLyAxMDApKTsKICAgICAgICAgcmV0dXJuICBzYi50b1N0cmluZygpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvdHdvc3RlcHMvU2ltcGxlSXRlbVJlYWRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvdHdvc3RlcHMvU2ltcGxlSXRlbVJlYWRlci5qYXZhCmluZGV4IDZhNGU2ODguLmJjZmYwNjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3R3b3N0ZXBzL1NpbXBsZUl0ZW1SZWFkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC90d29zdGVwcy9TaW1wbGVJdGVtUmVhZGVyLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKICAgICBleHRlbmRzIGpha2FydGEuYmF0Y2guYXBpLkFic3RyYWN0SXRlbVJlYWRlcjxTdHJpbmc+IHsKIAogICAgIHByaXZhdGUgaW50IGluZGV4ID0gMDsKLSAgICAKKwogICAgIC8vRU1QLUlELCBNT05USC1ZRUFSLCBTQUxBUlksIFRBWCUsIE1FRElDQVJFJSwgT1RIRVIKICAgICBwcml2YXRlIFN0cmluZ1tdIGl0ZW1zID0gbmV3IFN0cmluZ1tdIHsKICAgICAgICAgIjEyMC0wMSwgSkFOLTIwMTMsIDgwMDAsIDI3LCAzLCAwIiwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgIjEyMC0wNywgSkFOLTIwMTMsIDExMDAwLCAzNiwgNSwgMCIsCiAgICAgICAgICIxMjAtMDgsIEpBTi0yMDEzLCAxMTUwMCwgMzYsIDUsIDAiLAogICAgIH07Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvcGVuKEV4dGVybmFsaXphYmxlIGUpIHRocm93cyBFeGNlcHRpb24gewogICAgIH0KQEAgLTUxLDUgKzUxLDUgQEAKICAgICBwdWJsaWMgRXh0ZXJuYWxpemFibGUgY2hlY2twb2ludEluZm8oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC90d29zdGVwcy9TaW1wbGVJdGVtV3JpdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC90d29zdGVwcy9TaW1wbGVJdGVtV3JpdGVyLmphdmEKaW5kZXggZWYxNDc5Mi4uODhiMjM3ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvdHdvc3RlcHMvU2ltcGxlSXRlbVdyaXRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3R3b3N0ZXBzL1NpbXBsZUl0ZW1Xcml0ZXIuamF2YQpAQCAtMTksNyArMTksNyBAQAogQGpha2FydGEuaW5qZWN0Lk5hbWVkKCJTaW1wbGVJdGVtV3JpdGVyIikKIHB1YmxpYyBjbGFzcyBTaW1wbGVJdGVtV3JpdGVyCiAgICAgZXh0ZW5kcyBqYWthcnRhLmJhdGNoLmFwaS5BYnN0cmFjdEl0ZW1Xcml0ZXI8U3RyaW5nPiB7Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvcGVuKEV4dGVybmFsaXphYmxlIGUpIHRocm93cyBFeGNlcHRpb24gewogICAgIH0KQEAgLTQxLDUgKzQxLDUgQEAKICAgICBwdWJsaWMgRXh0ZXJuYWxpemFibGUgY2hlY2twb2ludEluZm8oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC90d29zdGVwcy9TbGVzc0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3R3b3N0ZXBzL1NsZXNzQmVhbi5qYXZhCmluZGV4IGI5NmNlOTYuLmU4MzdlMDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3R3b3N0ZXBzL1NsZXNzQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3R3b3N0ZXBzL1NsZXNzQmVhbi5qYXZhCkBAIC0zMywzMiArMzMsMzIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgbG9uZyBzdWJtaXRKb2IoKSB7Ci0JdHJ5IHsKLQkgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7CisgICAgdHJ5IHsKKyAgICAgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7CiAKLQkgIFByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOwotCSAgZm9yIChpbnQgaT0wOyBpPDk7IGkrKykKLQkJcHJvcHMucHV0KCJQYXJhbS1Gb3ItVHdvU3RlcHMtSm9iLSIgKyBpLCAiVmFsdWUtIiArIGkpOwotCSAgcmV0dXJuICBqb2JPcGVyYXRvci5zdGFydCgiVHdvU3RlcHNKb2IiLCBwcm9wcyk7CisgICAgICBQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKyAgICAgIGZvciAoaW50IGk9MDsgaTw5OyBpKyspCisgICAgICAgIHByb3BzLnB1dCgiUGFyYW0tRm9yLVR3b1N0ZXBzLUpvYi0iICsgaSwgIlZhbHVlLSIgKyBpKTsKKyAgICAgIHJldHVybiAgam9iT3BlcmF0b3Iuc3RhcnQoIlR3b1N0ZXBzSm9iIiwgcHJvcHMpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKLQl9CisgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Sm9iRXhpdFN0YXR1cyhsb25nIGV4ZWN1dGlvbklkKSB7Ci0JdHJ5IHsKLQkgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7Ci0JICBKb2JFeGVjdXRpb24gamUgPSAgam9iT3BlcmF0b3IuZ2V0Sm9iRXhlY3V0aW9uKGV4ZWN1dGlvbklkKTsKLQkgIHJldHVybiBqZS5nZXRFeGl0U3RhdHVzKCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7Ci0JfQorICAgIHRyeSB7CisgICAgICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOworICAgICAgSm9iRXhlY3V0aW9uIGplID0gIGpvYk9wZXJhdG9yLmdldEpvYkV4ZWN1dGlvbihleGVjdXRpb25JZCk7CisgICAgICByZXR1cm4gamUuZ2V0RXhpdFN0YXR1cygpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOworICAgIH0KIAogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHdhc0VqYkNyZWF0ZUNhbGxlZCgpIHsKLQlyZXR1cm4gZWpiQ3JlYXRlQ2FsbGVkOworICAgIHJldHVybiBlamJDcmVhdGVDYWxsZWQ7CiAgICAgfQogCi0JCQkJCQkJCQkJCQkJCSAgICAgICAgICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvYWx0ZXJuYXRpdmVzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9hbHRlcm5hdGl2ZXMvV2ViVGVzdC5qYXZhCmluZGV4IDQ1MDUxNDcuLjUxMTBiODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9hbHRlcm5hdGl2ZXMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9hbHRlcm5hdGl2ZXMvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUZXN0aW5nIEFsdGVybmF0aXZlcyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk2LDEwICs5NiwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2FsdGVybmF0aXZlcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2FsdGVybmF0aXZlcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDMxN2IzNzIuLjk2ZjQyZWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9hbHRlcm5hdGl2ZXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvYWx0ZXJuYXRpdmVzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaS1hbHRlcm5hdGl2ZXMiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtYW5ub3RhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2FsdGVybmF0aXZlcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvYWx0ZXJuYXRpdmVzL2J1aWxkLnhtbAppbmRleCBjMGQ5MDRkLi44NzJmMzY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvYWx0ZXJuYXRpdmVzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvYWx0ZXJuYXRpdmVzL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMyArNDcsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvYW1iaWd1b3VzLWRlcHMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2FtYmlndW91cy1kZXBzL1dlYlRlc3QuamF2YQppbmRleCA4NDRjMmE4Li40ODZiY2FlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvYW1iaWd1b3VzLWRlcHMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9hbWJpZ3VvdXMtZGVwcy9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRlc3RpbmcgQW1iaWd1b3VzIGRlcGVuZGVuY2llcyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk2LDEwICs5NiwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2FtYmlndW91cy1kZXBzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvYW1iaWd1b3VzLWRlcHMvYnVpbGQucHJvcGVydGllcwppbmRleCAyYjczYjk4Li5lYjQzMTVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvYW1iaWd1b3VzLWRlcHMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvYW1iaWd1b3VzLWRlcHMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpLWFtYmlndW91c2RlcHMiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtYW5ub3RhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2FtYmlndW91cy1kZXBzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9hbWJpZ3VvdXMtZGVwcy9idWlsZC54bWwKaW5kZXggYzBkOTA0ZC4uODcyZjM2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2FtYmlndW91cy1kZXBzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvYW1iaWd1b3VzLWRlcHMvYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ3LDIzICs0NywyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc1LDEwICs3NSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9hbWJpZ3VvdXMtZGVwcy9kZXNjcmlwdG9yL2JlYW5zLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9hbWJpZ3VvdXMtZGVwcy9kZXNjcmlwdG9yL2JlYW5zLnhtbAppbmRleCAxOWYwNzBmLi5mMDVmOTAxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvYW1iaWd1b3VzLWRlcHMvZGVzY3JpcHRvci9iZWFucy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2FtYmlndW91cy1kZXBzL2Rlc2NyaXB0b3IvYmVhbnMueG1sCkBAIC0yMywxMSArMjMsMTEgQEAKICAgPGFsdGVybmF0aXZlcz4KICAgICA8Y2xhc3M+dGVzdC5hcnRpZmFjdHMuTW9ja1BheW1lbnRQcm9jZXNzb3I8L2NsYXNzPgogICAgIDwhLS0gRGlzYWJsZWRNb2NrUGF5bWVudFByb2Nlc3NvciBpcyBub3QgZW5hYmxlZCAtLT4KLSAgICA8IS0tIAorICAgIDwhLS0KICAgICAgICAgPGNsYXNzPnRlc3QuYXJ0aWZhY3RzLkRpc2FibGVkTW9ja1BheW1lbnRQcm9jZXNzb3I8L2NsYXNzPgogICAgIC0tPgotICAgIAorCiAgICAgPCEtLSAgTW9ja0Nhc2hSZWxpYWJsZVBheW1lbnRQcm9jZXNzb3IgYW5kIE1vY2tDaGVxdWVQYXltZW50UHJvY2Vzc29yIGFyZSBub3QgZW5hYmxlZCAtLT4KICAgPC9hbHRlcm5hdGl2ZXM+Ci0gIAorCiA8L2JlYW5zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9idWlsZC54bWwKaW5kZXggY2NlYzU3NC4uNjAwNWFkMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvYnVpbGQueG1sCkBAIC0zMCw3ICszMCw3IEBACiAgICAgJmNvbW1vbkJ1aWxkOwogICAgICZjb21tb25SdW47CiAgICAgJnJlcG9ydGluZzsKLSAgICAKKwogICAgIDxwcm9wZXJ0eSBuYW1lPSJjZGktdGFyZ2V0IiB2YWx1ZT0iYWxsIiAvPgogCiAgICAgPHRhc2tkZWYgcmVzb3VyY2U9Im5ldC9zZi9hbnRjb250cmliL2FudGNvbnRyaWIucHJvcGVydGllcyI+CkBAIC0xNzgsMTIgKzE3OCwxMiBAQAogICAgICAgICA8YW50IGRpcj0icXVhbGlmaWVycyIgdGFyZ2V0PSIke2NkaS10YXJnZXR9IiAvPgogCiAgICAgICAgIDwhLS0KLQkgICAgICAgIE5vdCBydW5uaW5nIHVudGlsIGh0dHBzOi8vaXNzdWVzLmpib3NzLm9yZy9icm93c2UvQ0RJLTMzMSBpcyBzb3J0ZWQgb3V0LgotCSAgICAgICAgSW4gMS4xLjEwLkZpbmFsIHRoZSB0ZXN0IHBhc3Nlcy4KLQkgICAgICAgIEluIDIuMCBCZXRhIGl0IGZhaWxzLgotCSAgICAgICAgU2VlIGVtYWlsIGZyb20gSm96ZWYgMy80LzEzCi0JICAgICAgICA8YW50IGRpcj0iYWx0ZXJuYXRpdmVzIiB0YXJnZXQ9IiR7Y2RpLXRhcmdldH0iLz4KLQkgICAgICAgIDxhbnQgZGlyPSJhbWJpZ3VvdXMtZGVwcyIgdGFyZ2V0PSIke2NkaS10YXJnZXR9Ii8+CisgICAgICAgICAgICBOb3QgcnVubmluZyB1bnRpbCBodHRwczovL2lzc3Vlcy5qYm9zcy5vcmcvYnJvd3NlL0NESS0zMzEgaXMgc29ydGVkIG91dC4KKyAgICAgICAgICAgIEluIDEuMS4xMC5GaW5hbCB0aGUgdGVzdCBwYXNzZXMuCisgICAgICAgICAgICBJbiAyLjAgQmV0YSBpdCBmYWlscy4KKyAgICAgICAgICAgIFNlZSBlbWFpbCBmcm9tIEpvemVmIDMvNC8xMworICAgICAgICAgICAgPGFudCBkaXI9ImFsdGVybmF0aXZlcyIgdGFyZ2V0PSIke2NkaS10YXJnZXR9Ii8+CisgICAgICAgICAgICA8YW50IGRpcj0iYW1iaWd1b3VzLWRlcHMiIHRhcmdldD0iJHtjZGktdGFyZ2V0fSIvPgogICAgICAgICAtLT4KIAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIGV2ZW50cyIgLz4KQEAgLTIxMSwxMSArMjExLDExIEBACiAgICAgICAgIDxhbnQgZGlyPSJwcm9kdWNlci1tZXRob2RzIiB0YXJnZXQ9IiR7Y2RpLXRhcmdldH0iIC8+CiAKICAgICAgICAgPCEtLQotCSAgICAgICAgTm90IHJ1bm5pbmcgdW50aWwgaHR0cHM6Ly9pc3N1ZXMuamJvc3Mub3JnL2Jyb3dzZS9DREktMzMxIGlzIHNvcnRlZCBvdXQuCi0JICAgICAgICBJbiAxLjEuMTAuRmluYWwgdGhlIHRlc3QgcGFzc2VzLgotCSAgICAgICAgSW4gMi4wIEJldGEgaXQgZmFpbHMuCi0JICAgICAgICBTZWUgZW1haWwgZnJvbSBKb3plZiAzLzQvMTMKLQkgICAgICAgIDxhbnQgZGlyPSJwcm9ncmFtbWF0aWMtbG9va3VwIiB0YXJnZXQ9IiR7Y2RpLXRhcmdldH0iLz4KKyAgICAgICAgICAgIE5vdCBydW5uaW5nIHVudGlsIGh0dHBzOi8vaXNzdWVzLmpib3NzLm9yZy9icm93c2UvQ0RJLTMzMSBpcyBzb3J0ZWQgb3V0LgorICAgICAgICAgICAgSW4gMS4xLjEwLkZpbmFsIHRoZSB0ZXN0IHBhc3Nlcy4KKyAgICAgICAgICAgIEluIDIuMCBCZXRhIGl0IGZhaWxzLgorICAgICAgICAgICAgU2VlIGVtYWlsIGZyb20gSm96ZWYgMy80LzEzCisgICAgICAgICAgICA8YW50IGRpcj0icHJvZ3JhbW1hdGljLWxvb2t1cCIgdGFyZ2V0PSIke2NkaS10YXJnZXR9Ii8+CiAgICAgICAgIC0tPgogCiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgc2NvcGVzIiAvPgpAQCAtMjQ2LDcgKzI0Niw3IEBACiAgICAgICAgICAgICA8L3RoZW4+CiAgICAgICAgICAgICA8ZWxzZT4KICAgICAgICAgICAgICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCU5vdCBydW5uaW5nIHVudGlsIGZpZ2hlcmZpc2ggaXMgYmFjaworICAgICAgICAgICAgICAgICAgICBOb3QgcnVubmluZyB1bnRpbCBmaWdoZXJmaXNoIGlzIGJhY2sKICAgICAgICAgICAgICAgICAtLT4KICAgICAgICAgICAgICAgICA8IS0tCiAgICAgICAgICAgICAgICAgPGFudCBkaXI9Im9zZ2ktY2RpIiB0YXJnZXQ9IiR7Y2RpLXRhcmdldH0iLz4KQEAgLTI2NCwxNiArMjY0LDE2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGVjaG8+IFVzYWdlOgotCQlhbnQgY2RpIChFeGVjdXRlcyB0aGUgY2RpIHRlc3RzKQotCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGNkaSB0ZXN0cykKLQkJYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBjZGkgdGVzdHMpCi0JCWFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgY2RpIHRlc3RzKQotCQlhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgY2RpIHRlc3RzKQotCQlhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgY2RpIGFwcHMpCi0JCWFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgY2RpIHRlc3RzKQotCQlhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBjZGkgYXBwcykKLQkJYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBjZGkgdGVzdHMpCi0JPC9lY2hvPgorICAgICAgICBhbnQgY2RpIChFeGVjdXRlcyB0aGUgY2RpIHRlc3RzKQorICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGNkaSB0ZXN0cykKKyAgICAgICAgYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBjZGkgdGVzdHMpCisgICAgICAgIGFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgY2RpIHRlc3RzKQorICAgICAgICBhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgY2RpIHRlc3RzKQorICAgICAgICBhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgY2RpIGFwcHMpCisgICAgICAgIGFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgY2RpIHRlc3RzKQorICAgICAgICBhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBjZGkgYXBwcykKKyAgICAgICAgYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBjZGkgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtbG9jYWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2NvbmZpZy9kYXRhYmFzZS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvY29uZmlnL2RhdGFiYXNlLnhtbAppbmRleCBkNGQxZmIwLi41YTU4MzEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvY29uZmlnL2RhdGFiYXNlLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvY29uZmlnL2RhdGFiYXNlLnhtbApAQCAtMjgsMTYgKzI4LDE2IEBACiA8IS0tCiA8cHJvamVjdCBuYW1lPSJvcmFjbGUtZGItc2V0dGluZ3MiIGRlZmF1bHQ9ImNyZWF0ZS1qZGJjLWNvbnBvb2wtY29ubmVjdG9yIiBiYXNlZGlyPSIuIj4KIAotJmNvbW1vbjsgCismY29tbW9uOwogJnRlc3Rjb21tb247CiAtLT4KIAogPHRhcmdldCBuYW1lPSJjcmVhdGUtamRiYy1jb25wb29sLWNvbm5lY3RvciIgZGVwZW5kcz0iZGVmYXVsdC1qZGJjLWNvbnBvb2wsIG9yYWNsZS1qZGJjLWNvbnBvb2wiLz4KIAogPHRhcmdldCBuYW1lPSJkZWZhdWx0LWpkYmMtY29ucG9vbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iIHVubGVzcz0ib3JhY2xlIj4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIi8+CiA8L3RhcmdldD4KLQkgICAKKwogPHRhcmdldCBuYW1lPSJvcmFjbGUtamRiYy1jb25wb29sIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgaWY9Im9yYWNsZSI+CiA8ZWNobyBtZXNzYWdlPSJjcmVhdGluZyBqZGJjIGNvbm5lY3Rpb24gcG9vbCAke2pkYmMuY29ucG9vbC5uYW1lfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgpAQCAtNTAsMTIgKzUwLDEyIEBACiAgICAgICAgIDxhcmcgbGluZT0iJHtqZGJjLmNvbnBvb2wubmFtZX0iLz4KICAgICA8L2V4ZWM+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtb3JhY2xlLXByb3BzIj4KLQk8cGFyYW0gbmFtZT0icG9vbC50eXBlIiB2YWx1ZT0iamRiYyIvPgotCTxwYXJhbSBuYW1lPSJjb25wb29sLm5hbWUiIHZhbHVlPSIke2pkYmMuY29ucG9vbC5uYW1lfSIvPgorICAgIDxwYXJhbSBuYW1lPSJwb29sLnR5cGUiIHZhbHVlPSJqZGJjIi8+CisgICAgPHBhcmFtIG5hbWU9ImNvbnBvb2wubmFtZSIgdmFsdWU9IiR7amRiYy5jb25wb29sLm5hbWV9Ii8+CiAgICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+CiAKLTx0YXJnZXQgbmFtZT0ic2V0LW9yYWNsZS1wcm9wcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJvcmFjbGUiPiAKKzx0YXJnZXQgbmFtZT0ic2V0LW9yYWNsZS1wcm9wcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJvcmFjbGUiPgogICA8cHJvcGVydHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2Nvbm5lY3Rvci9jb25maWcvb3JhY2xlLnByb3BlcnRpZXMiLz4KICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CkBAIC05NywxNSArOTcsMTUgQEAKIAogPHRhcmdldCBuYW1lPSJleGVjdXRlLXNxbC1jb25uZWN0b3IiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBkZWZhdWx0LXNxbCwgc3FsLW9yYWNsZSIvPgogCi08dGFyZ2V0IG5hbWU9ImRlZmF1bHQtc3FsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgdW5sZXNzPSJvcmFjbGUiID4gCi0JPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iLz4KKzx0YXJnZXQgbmFtZT0iZGVmYXVsdC1zcWwiIGRlcGVuZHM9ImluaXQtY29tbW9uIiB1bmxlc3M9Im9yYWNsZSIgPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIi8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJzcWwtb3JhY2xlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgaWY9Im9yYWNsZSI+Ci0JPHByb3BlcnR5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9jb25uZWN0b3IvY29uZmlnL29yYWNsZS5wcm9wZXJ0aWVzIi8+Ci0JPHByb3BlcnR5IG5hbWU9ImRvbWFpbi5saWIuZXh0IiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvbGliL2V4dCIvPgotCTxwcm9wZXJ0eSBuYW1lPSJvcmFjbGUuZHJpdmVyLnBhdGgiIHZhbHVlPSIke2RvbWFpbi5saWIuZXh0fS9zbW9yYWNsZS5qYXI6JHtkb21haW4ubGliLmV4dH0vc21iYXNlLmphcjoke2RvbWFpbi5saWIuZXh0fS9zbXJlc291cmNlLmphcjoke2RvbWFpbi5saWIuZXh0fS9zbXV0aWwuamFyOiR7ZG9tYWluLmxpYi5leHR9L3Ntc3B5Lmphcjoke2RvbWFpbi5saWIuZXh0fS9PcmFueG8uamFyIi8+Ci0JPGVjaG8gbWVzc2FnZT0iJHtvcmFjbGVGb3JDb25uZWN0b3IuZHJpdmVyfSIvPgorICAgIDxwcm9wZXJ0eSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvY29ubmVjdG9yL2NvbmZpZy9vcmFjbGUucHJvcGVydGllcyIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJkb21haW4ubGliLmV4dCIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2xpYi9leHQiLz4KKyAgICA8cHJvcGVydHkgbmFtZT0ib3JhY2xlLmRyaXZlci5wYXRoIiB2YWx1ZT0iJHtkb21haW4ubGliLmV4dH0vc21vcmFjbGUuamFyOiR7ZG9tYWluLmxpYi5leHR9L3NtYmFzZS5qYXI6JHtkb21haW4ubGliLmV4dH0vc21yZXNvdXJjZS5qYXI6JHtkb21haW4ubGliLmV4dH0vc211dGlsLmphcjoke2RvbWFpbi5saWIuZXh0fS9zbXNweS5qYXI6JHtkb21haW4ubGliLmV4dH0vT3JhbnhvLmphciIvPgorICAgIDxlY2hvIG1lc3NhZ2U9IiR7b3JhY2xlRm9yQ29ubmVjdG9yLmRyaXZlcn0iLz4KIDxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBzcWwgc3RhdGVtZW50IGF0ICR7YmFzZWRpcn0gZnJvbSAke3NxbC5maWxlfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8c3FsCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9idWlsZC54bWwKaW5kZXggODIzYjFiMS4uYjE4ODNjOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL2J1aWxkLnhtbApAQCAtODIsMTUgKzgyLDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4gVXNhZ2U6Ci0JCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZGVjb3JhdG9ycyB0ZXN0cykKLQkJYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBkZWNvcmF0b3JzIHRlc3RzKQotCQlhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGRlY29yYXRvcnMgdGVzdHMpCi0JCWFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBkZWNvcmF0b3JzIHRlc3RzKQotCQlhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgZGVjb3JhdG9ycyBhcHBzKQotCQlhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGRlY29yYXRvcnMgdGVzdHMpCi0JCWFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgIGRlY29yYXRvcnMgYXBwcykKLQkJYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBkZWNvcmF0b3JzIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4gVXNhZ2U6CisgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZGVjb3JhdG9ycyB0ZXN0cykKKyAgICAgICAgYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBkZWNvcmF0b3JzIHRlc3RzKQorICAgICAgICBhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGRlY29yYXRvcnMgdGVzdHMpCisgICAgICAgIGFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBkZWNvcmF0b3JzIHRlc3RzKQorICAgICAgICBhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgZGVjb3JhdG9ycyBhcHBzKQorICAgICAgICBhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGRlY29yYXRvcnMgdGVzdHMpCisgICAgICAgIGFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgIGRlY29yYXRvcnMgYXBwcykKKyAgICAgICAgYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBkZWNvcmF0b3JzIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL2RlY29yYXRvcnMtb3Zlci1iZWFucy1mcm9tLXByb2R1Y2VyLW1ldGhvZHMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL2RlY29yYXRvcnMtb3Zlci1iZWFucy1mcm9tLXByb2R1Y2VyLW1ldGhvZHMvYnVpbGQucHJvcGVydGllcwppbmRleCA1ODFiZTk5Li5jMmZmMjQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9kZWNvcmF0b3JzLW92ZXItYmVhbnMtZnJvbS1wcm9kdWNlci1tZXRob2RzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvZGVjb3JhdG9ycy1vdmVyLWJlYW5zLWZyb20tcHJvZHVjZXItbWV0aG9kcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWRlY29yYXRvci1mb3ItYmVlYW5zLWZyb20tcHJvZHVjZXItbWV0aG9kcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvZGVjb3JhdG9ycy1vdmVyLWJlYW5zLWZyb20tcHJvZHVjZXItbWV0aG9kcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9kZWNvcmF0b3JzLW92ZXItYmVhbnMtZnJvbS1wcm9kdWNlci1tZXRob2RzL2J1aWxkLnhtbAppbmRleCAwYjliM2EzLi4wYTFmMmY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9kZWNvcmF0b3JzLW92ZXItYmVhbnMtZnJvbS1wcm9kdWNlci1tZXRob2RzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9kZWNvcmF0b3JzLW92ZXItYmVhbnMtZnJvbS1wcm9kdWNlci1tZXRob2RzL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDIzICs0OCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvZGVjb3JhdG9ycy1vdmVyLWJlYW5zLWZyb20tcHJvZHVjZXItbWV0aG9kcy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvZGVjb3JhdG9ycy1vdmVyLWJlYW5zLWZyb20tcHJvZHVjZXItbWV0aG9kcy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IGQ0NDViNjkuLmU0Mjg2MDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL2RlY29yYXRvcnMtb3Zlci1iZWFucy1mcm9tLXByb2R1Y2VyLW1ldGhvZHMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9kZWNvcmF0b3JzLW92ZXItYmVhbnMtZnJvbS1wcm9kdWNlci1tZXRob2RzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgaW50ZXJjZXB0b3JzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDksNyArNDksNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTksNyArNTksNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtOTgsMTAgKzk4LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9kZWNvcmF0b3JzLW92ZXItYmVhbnMtZnJvbS1wcm9kdWNlci1tZXRob2RzL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkRlY29yYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvZGVjb3JhdG9ycy1vdmVyLWJlYW5zLWZyb20tcHJvZHVjZXItbWV0aG9kcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5EZWNvcmF0b3IuamF2YQppbmRleCAzYzlmODRmLi43ZDY2MzgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9kZWNvcmF0b3JzLW92ZXItYmVhbnMtZnJvbS1wcm9kdWNlci1tZXRob2RzL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkRlY29yYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL2RlY29yYXRvcnMtb3Zlci1iZWFucy1mcm9tLXByb2R1Y2VyLW1ldGhvZHMvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuRGVjb3JhdG9yLmphdmEKQEAgLTIyLDkgKzIyLDkgQEAKIAogQERlY29yYXRvcgogcHVibGljIGFic3RyYWN0IGNsYXNzIFRlc3RCZWFuRGVjb3JhdG9yIGltcGxlbWVudHMgVGVzdEJlYW5JbnRlcmZhY2V7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZGVjb3JhdG9yQ2FsbGVkID0gZmFsc2U7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgQERlbGVnYXRlCiAgICAgQFByb2R1Y2VkQXRSdW50aW1lCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgIGRlY29yYXRvckNhbGxlZCA9IHRydWU7CiAgICAgICAgIHJldHVybiB0Yi5tMSgpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL2RlY29yYXRvcnMtb3Zlci1iZWFucy1mcm9tLXByb2R1Y2VyLW1ldGhvZHMvc2VydmxldC90ZXN0L3NlcnZsZXQvVGVzdERlY29yYXRpb25PZkJlYW5zRnJvbVByb2R1Y2VyTWV0aG9kc1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9kZWNvcmF0b3JzLW92ZXItYmVhbnMtZnJvbS1wcm9kdWNlci1tZXRob2RzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1Rlc3REZWNvcmF0aW9uT2ZCZWFuc0Zyb21Qcm9kdWNlck1ldGhvZHNUZXN0U2VydmxldC5qYXZhCmluZGV4IDE3MmE3ZTMuLjU4OTAxNTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL2RlY29yYXRvcnMtb3Zlci1iZWFucy1mcm9tLXByb2R1Y2VyLW1ldGhvZHMvc2VydmxldC90ZXN0L3NlcnZsZXQvVGVzdERlY29yYXRpb25PZkJlYW5zRnJvbVByb2R1Y2VyTWV0aG9kc1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvZGVjb3JhdG9ycy1vdmVyLWJlYW5zLWZyb20tcHJvZHVjZXItbWV0aG9kcy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9UZXN0RGVjb3JhdGlvbk9mQmVhbnNGcm9tUHJvZHVjZXJNZXRob2RzVGVzdFNlcnZsZXQuamF2YQpAQCAtMzUsNyArMzUsNyBAQAogICAgIEBJbmplY3QKICAgICBAUHJvZHVjZWRBdFJ1bnRpbWUKICAgICBUZXN0QmVhbkludGVyZmFjZSB0YjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlcnZpY2UoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewogCkBAIC00OSw3ICs0OSw3IEBACiAgICAgICAgIHRiLm0xKCk7CiAgICAgICAgIGlmICghVGVzdEJlYW5EZWNvcmF0b3IuZGVjb3JhdG9yQ2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJkZWNvcmF0b3IgZm9yIGJlYW5zIGZyb20gcHJvZHVjZXIgbWV0aG9kcyBub3QgY2FsbGVkIjsKLSAgICAgICAgCisKICAgICAgICAgd3JpdGVyLndyaXRlKG1zZyArICJcbiIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDVkNDViMDcuLjg1NWQ0NzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL3NpbXBsZS1kZWNvcmF0b3IvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2ltcGxlLWRlY29yYXRvciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL2J1aWxkLnhtbAppbmRleCAwYjliM2EzLi4wYTFmMmY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDIzICs0OCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IDBhMTk0YzkuLmU4NWM1NWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL3NpbXBsZS1kZWNvcmF0b3IvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgaW50ZXJjZXB0b3JzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDksNyArNDksNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTksNyArNTksNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtOTgsMTAgKzk4LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL3NlcnZsZXQvdGVzdC9iZWFucy9MYXJnZVRyYW5zYWN0aW9uRGVjb3JhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL3NlcnZsZXQvdGVzdC9iZWFucy9MYXJnZVRyYW5zYWN0aW9uRGVjb3JhdG9yLmphdmEKaW5kZXggZjU0ZTdiZi4uZTMxMjNiZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9zZXJ2bGV0L3Rlc3QvYmVhbnMvTGFyZ2VUcmFuc2FjdGlvbkRlY29yYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL3NpbXBsZS1kZWNvcmF0b3Ivc2VydmxldC90ZXN0L2JlYW5zL0xhcmdlVHJhbnNhY3Rpb25EZWNvcmF0b3IuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogICAgcHVibGljIHN0YXRpYyBib29sZWFuIHdpdGhEcmF3Q2FsbGVkID0gZmFsc2U7CiAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZGVwb3NpdENhbGxlZCA9IGZhbHNlOwogCi0gICBASW5qZWN0IEBEZWxlZ2F0ZSAKKyAgIEBJbmplY3QgQERlbGVnYXRlCiAgICBBY2NvdW50IGFjY291bnQ7CiAKICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9zZXJ2bGV0L3Rlc3QvYmVhbnMvUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL3NlcnZsZXQvdGVzdC9iZWFucy9SZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQppbmRleCBlNjI2YTM3Li5jMDMwNjA0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL3NlcnZsZXQvdGVzdC9iZWFucy9SZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL3NlcnZsZXQvdGVzdC9iZWFucy9SZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQpAQCAtMjgsMTAgKzI4LDEwIEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZXJyb3JNZXNzYWdlID0gIiI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdERlcGVuZGVudEJlYW4gdGI7Ci0gICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBtYW5hZ2VUcmFuc2FjdGlvbihJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvcjo6QXJvdW5kSW52b2tlIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL3NlcnZsZXQvdGVzdC9iZWFucy9TaG9wcGluZ0NhcnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL3NpbXBsZS1kZWNvcmF0b3Ivc2VydmxldC90ZXN0L2JlYW5zL1Nob3BwaW5nQ2FydC5qYXZhCmluZGV4IDYwYThhNDAuLmY4YzlhOGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL3NpbXBsZS1kZWNvcmF0b3Ivc2VydmxldC90ZXN0L2JlYW5zL1Nob3BwaW5nQ2FydC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL3NpbXBsZS1kZWNvcmF0b3Ivc2VydmxldC90ZXN0L2JlYW5zL1Nob3BwaW5nQ2FydC5qYXZhCkBAIC0yMCwxMCArMjAsMTAgQEAKIEBUcmFuc2FjdGlvbmFsKHJlcXVpcmVzTmV3PXRydWUpCiBAUHJlZmVycmVkCiBwdWJsaWMgY2xhc3MgU2hvcHBpbmdDYXJ0ICB7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhZGRJdGVtKFN0cmluZyBzKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2hvcHBpbmdDYXJ0OjphZGRJdGVtIGNhbGxlZCIpOwotICAgICAgICAKKwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEFjY291bnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL3NpbXBsZS1kZWNvcmF0b3Ivc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RBY2NvdW50LmphdmEKaW5kZXggMDY2ZTYyYi4uMTQxZDc2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEFjY291bnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QWNjb3VudC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgZGVwb3NpdChCaWdEZWNpbWFsIGFtb3VudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RBY2NvdW50OjpkZXBvc2l0KyIgKyBhbW91bnQpOwotICAgICAgICAKKwogICAgICAgICAvL2dldCBhIGJvbnVzIG9mIDUKICAgICAgICAgY3VycmVudEJhbCA9IGN1cnJlbnRCYWwuYWRkKGFtb3VudC5hZGQobmV3IEJpZ0RlY2ltYWwoNSkpKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJuZXcgYmFsOiIgKyBjdXJyZW50QmFsKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL3NpbXBsZS1kZWNvcmF0b3Ivc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL3NpbXBsZS1kZWNvcmF0b3Ivc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQppbmRleCBhZmRjMTU2Li5lMWQwZDUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCkBAIC0yNywxNSArMjcsMTUgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0RGVwZW5kZW50QmVhbiB0YjsKLSAgICAKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IG1hbmFnZVRyYW5zYWN0aW9uKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVHJhbnNhY3Rpb25JbnRlcmNlcHRvcjo6QXJvdW5kSW52b2tlIik7CiAgICAgICAgIGlmICh0YiA9PSBudWxsKSBlcnJvck1lc3NhZ2U9IkRlcGVuZGVuY3kgSW5qZWN0aW9uICIgKwotICAgICAgICAJCSJpbnRvIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgZmFpbGVkIjsKKyAgICAgICAgICAgICAgICAiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CiAgICAgICAgIGFyb3VuZEludm9rZUNhbGxlZCA9IHRydWU7CiAgICAgICAgIGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCArKzsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1NpbXBsZURlY29yYXRvclRlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1NpbXBsZURlY29yYXRvclRlc3RTZXJ2bGV0LmphdmEKaW5kZXggODk3Y2FiMy4uMGQ5MTU0MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9TaW1wbGVEZWNvcmF0b3JUZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL3NpbXBsZS1kZWNvcmF0b3Ivc2VydmxldC90ZXN0L3NlcnZsZXQvU2ltcGxlRGVjb3JhdG9yVGVzdFNlcnZsZXQuamF2YQpAQCAtNDAsMTEgKzQwLDExIEBACiAgICAgQEluamVjdAogICAgIEBQcmVmZXJyZWQKICAgICBUZXN0QmVhbiB0YjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgU2hvcHBpbmdDYXJ0IHNjOwotICAgIAorCiAgICAgQEluamVjdAogICAgIEFjY291bnQgdGVzdEFjY291bnQ7CiAKQEAgLTY5LDUxICs2OSw1MSBAQAogICAgICAgICAgICAgICAgICAgICArIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50OwogICAgICAgICBpZiAoIVRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlLnRyaW0oKS5lcXVhbHMoIiIpKQogICAgICAgICAgICAgbXNnICs9IFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlOwotICAgICAgICAKKwogICAgICAgICBpZiAoUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiUmVxdWlyZXNOZXcgVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBjYWxsZWQgd2hlbiAiICsKLSAgICAgICAgICAgIAkJIml0IHNob3VsZG4ndCBoYXZlIGJlZW4gY2FsbGVkIjsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICJpdCBzaG91bGRuJ3QgaGF2ZSBiZWVuIGNhbGxlZCI7CisKICAgICAgICAgVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5jbGVhcigpOwogICAgICAgICAvL2ludm9rZSBzaG9wcGluZyBjYXJ0IGJlYW4uIFRoaXMgc2hvdWxkIHJlc3VsdCBpbiBhbiBpbnZvY2F0aW9uIG9uCiAgICAgICAgIC8vdGhlIFJlcXVpcmVzTmV3VHJhbnNhY3Rpb25hbAogICAgICAgICBzYy5hZGRJdGVtKCJUZXN0IEl0ZW0iKTsKICAgICAgICAgaWYgKCFSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlQ2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJCdXNpbmVzcyBtZXRob2QgaW50ZXJjZXB0b3IgYXJvdW5kSW52b2tlIGluIHJlcXVpcmVzIG5ldyAiICsKLSAgICAgICAgICAgIAkJInRyYW5zYWN0aW9uIGludGVyY2VwdG9yIG5vdCBjYWxsZWQiOworICAgICAgICAgICAgICAgICAgICAidHJhbnNhY3Rpb24gaW50ZXJjZXB0b3Igbm90IGNhbGxlZCI7CiAgICAgICAgIGlmIChSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ICE9IDEpCiAgICAgICAgICAgICBtc2cgKz0gIkJ1c2luZXNzIG1ldGhvZCByZXF1aXJlcyBuZXcgaW50ZXJjZXB0b3IgaW52b2NhdGlvbiBvbiAiICsKLSAgICAgICAgICAgIAkJIm1ldGhvZC1sZXZlbCBpbnRlcmNlcHRvciBhbm5vdGF0aW9uIGNvdW50IG5vdCBleHBlY3RlZC4gIgorICAgICAgICAgICAgICAgICAgICAibWV0aG9kLWxldmVsIGludGVyY2VwdG9yIGFubm90YXRpb24gY291bnQgbm90IGV4cGVjdGVkLiAiCiAgICAgICAgICAgICAgICAgICAgICsgImV4cGVjdGVkID0xLCBhY3R1YWw9IgogICAgICAgICAgICAgICAgICAgICArIFJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQ7CiAgICAgICAgIGlmICghUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmVycm9yTWVzc2FnZS50cmltKCkuZXF1YWxzKCIiKSkKICAgICAgICAgICAgIG1zZyArPSBSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlOwotICAgICAgICAKKwogICAgICAgICAvL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3Igc2hvdWxkIG5vdCBoYXZlIGJlZW4gY2FsbGVkCiAgICAgICAgIGlmIChUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiVHJhbnNjYXRpb25JbnRlcmNlcHRvciBhcm91bmRJbnZva2UgY2FsbGVkIHdoZW4gYSByZXF1aXJlc25ldyIgKwotICAgICAgICAgICAgCQkidHJhbnNhY3Rpb24gaW50ZXJjZXB0b3Igc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQiOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgInRyYW5zYWN0aW9uIGludGVyY2VwdG9yIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIjsKKwogICAgICAgICAvL1Rlc3QgZGVjb3JhdG9ycwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVzdEFjY291bnQuZ2V0QmFsYW5jZSgpKTsKLSAgICAgICAgaWYgKHRlc3RBY2NvdW50LmdldEJhbGFuY2UoKS5jb21wYXJlVG8obmV3IEJpZ0RlY2ltYWwoMTAwKSkgIT0gMCkgICAgICAgICAgICAKKyAgICAgICAgaWYgKHRlc3RBY2NvdW50LmdldEJhbGFuY2UoKS5jb21wYXJlVG8obmV3IEJpZ0RlY2ltYWwoMTAwKSkgIT0gMCkKICAgICAgICAgICAgICAgICBtc2cgKz0gIkRlY29yYXRvcnM6SW52YWxpZCBpbml0aWFsIGJhbGFuY2UiOwotICAgICAgICAKKwogICAgICAgICB0ZXN0QWNjb3VudC5kZXBvc2l0KG5ldyBCaWdEZWNpbWFsKDEwKSk7CiAgICAgICAgIGlmICh0ZXN0QWNjb3VudC5nZXRCYWxhbmNlKCkuY29tcGFyZVRvKG5ldyBCaWdEZWNpbWFsKDExNSkpICE9IDApIC8vNSBhcyBib251cyBieSB0aGUgZGVjb3JhdG9yCiAgICAgICAgICAgICBtc2cgKz0gIkRlY29yYXRvcnM6SW52YWxpZCBiYWxhbmNlIGFmdGVyIGRlcG9zaXQiOwotICAgICAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgdGVzdEFjY291bnQud2l0aGRyYXcobmV3IEJpZ0RlY2ltYWwoMTApKTsKICAgICAgICAgaWYgKHRlc3RBY2NvdW50LmdldEJhbGFuY2UoKS5jb21wYXJlVG8obmV3IEJpZ0RlY2ltYWwoMTA1KSkgIT0gMCkKICAgICAgICAgICAgIG1zZyArPSAiRGVjb3JhdG9yczpJbnZhbGlkIGJhbGFuY2UgYWZ0ZXIgd2l0aGRyYXdhbCI7CiAKLSAgICAgICAgCisKICAgICAgICAgaWYgKCFMYXJnZVRyYW5zYWN0aW9uRGVjb3JhdG9yLmRlcG9zaXRDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gImRlcG9zaXQgbWV0aG9kIGluIERlY29yYXRvciBub3QgY2FsbGVkIjsKICAgICAgICAgaWYgKCFMYXJnZVRyYW5zYWN0aW9uRGVjb3JhdG9yLndpdGhEcmF3Q2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJkZXBvc2l0IG1ldGhvZCBpbiBEZWNvcmF0b3Igbm90IGNhbGxlZCI7Ci0gICAgICAgIAorCiAgICAgICAgIHdyaXRlci53cml0ZShtc2cgKyAiXG4iKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9idWlsZC54bWwKaW5kZXggNjNiZWI0YS4uMTgxMzRjZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9idWlsZC54bWwKQEAgLTg3LDE1ICs4NywxNSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+IFVzYWdlOgotCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGV2ZW50cyB0ZXN0cykKLQkJYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBldmVudHMgdGVzdHMpCi0JCWFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgZXZlbnRzIHRlc3RzKQotCQlhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgZXZlbnRzIHRlc3RzKQotCQlhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgZXZlbnRzIGFwcHMpCi0JCWFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgZXZlbnRzIHRlc3RzKQotCQlhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBldmVudHMgYXBwcykKLQkJYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBldmVudHMgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPiBVc2FnZToKKyAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBldmVudHMgdGVzdHMpCisgICAgICAgIGFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgZXZlbnRzIHRlc3RzKQorICAgICAgICBhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGV2ZW50cyB0ZXN0cykKKyAgICAgICAgYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIGV2ZW50cyB0ZXN0cykKKyAgICAgICAgYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIGV2ZW50cyBhcHBzKQorICAgICAgICBhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGV2ZW50cyB0ZXN0cykKKyAgICAgICAgYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgZXZlbnRzIGFwcHMpCisgICAgICAgIGFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3IgZXZlbnRzIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvY29uZGl0aW9uYWwtb2JzZXJ2ZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvY29uZGl0aW9uYWwtb2JzZXJ2ZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBhYWE5MjAyLi42MmQ4NDJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2NvbmRpdGlvbmFsLW9ic2VydmVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9jb25kaXRpb25hbC1vYnNlcnZlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWV2ZW50LXByb2R1Y2VycyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9jb25kaXRpb25hbC1vYnNlcnZlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2NvbmRpdGlvbmFsLW9ic2VydmVyL2J1aWxkLnhtbAppbmRleCAwYjliM2EzLi4wYTFmMmY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2NvbmRpdGlvbmFsLW9ic2VydmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2NvbmRpdGlvbmFsLW9ic2VydmVyL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDIzICs0OCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9jb25kaXRpb25hbC1vYnNlcnZlci9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9jb25kaXRpb25hbC1vYnNlcnZlci9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IDFlYTQ1NGIuLjE5MjQxOTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvY29uZGl0aW9uYWwtb2JzZXJ2ZXIvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2NvbmRpdGlvbmFsLW9ic2VydmVyL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0CiAgICAgICAgID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0KICAgICAgICAgImV2ZW50cy1jb25kaXRpb25hbC1vYnNlcnZlcnMiOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0gIkhlbGxvIGZyb20gU2VydmxldCAzLjAuIjsKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgaW50ZXJjZXB0b3JzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTAsNyArNTAsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNjAsNyArNjAsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtOTksMTAgKzk5LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2NvbmRpdGlvbmFsLW9ic2VydmVyL3NlcnZsZXQvdGVzdC9iZWFucy9Eb2N1bWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9jb25kaXRpb25hbC1vYnNlcnZlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvRG9jdW1lbnQuamF2YQppbmRleCBkODU3ZjVhLi4wY2JmN2U3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2NvbmRpdGlvbmFsLW9ic2VydmVyL3NlcnZsZXQvdGVzdC9iZWFucy9Eb2N1bWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvY29uZGl0aW9uYWwtb2JzZXJ2ZXIvc2VydmxldC90ZXN0L2JlYW5zL0RvY3VtZW50LmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb2N1bWVudCBjcmVhdGVkIHdpdGggbmFtZSIgKyBuYW1lICk7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdXBkYXRlKCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9jdW1lbnQ6IiArIG5hbWUgKyAiIHVwZGF0ZWQuIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9jb25kaXRpb25hbC1vYnNlcnZlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvU2Vjb25kVGVzdEV2ZW50Q29uZGl0aW9uYWxPYnNlcnZlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9jb25kaXRpb25hbC1vYnNlcnZlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvU2Vjb25kVGVzdEV2ZW50Q29uZGl0aW9uYWxPYnNlcnZlci5qYXZhCmluZGV4IDk2OThmMmEuLmJlZGIxZjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvY29uZGl0aW9uYWwtb2JzZXJ2ZXIvc2VydmxldC90ZXN0L2JlYW5zL1NlY29uZFRlc3RFdmVudENvbmRpdGlvbmFsT2JzZXJ2ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2NvbmRpdGlvbmFsLW9ic2VydmVyL3NlcnZsZXQvdGVzdC9iZWFucy9TZWNvbmRUZXN0RXZlbnRDb25kaXRpb25hbE9ic2VydmVyLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKICAgICBwdWJsaWMgc3RhdGljIGludCBkb2N1bWVudENyZWF0ZWRFdmVudCA9IDA7CiAKICAgICAvL3Nob3VsZCBub3QgZ2V0IGNhbGxlZCBhcyB0aGVyZSBpcyBubyBjb252ZXJzYXRpb24gaXMgaW4gdGhpcyB0ZXN0Ci0gICAgcHVibGljIHZvaWQgb25Eb2N1bWVudENyZWF0ZShAT2JzZXJ2ZXMobm90aWZ5T2JzZXJ2ZXI9UmVjZXB0aW9uLklGX0VYSVNUUykgCisgICAgcHVibGljIHZvaWQgb25Eb2N1bWVudENyZWF0ZShAT2JzZXJ2ZXMobm90aWZ5T2JzZXJ2ZXI9UmVjZXB0aW9uLklGX0VYSVNUUykKICAgICAgICAgICAgIEBDcmVhdGVkIERvY3VtZW50IGQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0RXZlbnRPYnNlcnZlcjpvbkRvY3VtZW50Q3JlYXRlIik7CiAgICAgICAgIGRvY3VtZW50Q3JlYXRlZEV2ZW50Kys7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2NvbmRpdGlvbmFsLW9ic2VydmVyL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0RXZlbnRDb25kaXRpb25hbE9ic2VydmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2NvbmRpdGlvbmFsLW9ic2VydmVyL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0RXZlbnRDb25kaXRpb25hbE9ic2VydmVyLmphdmEKaW5kZXggZTY5MGNhMC4uYTIyNGZiYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9jb25kaXRpb25hbC1vYnNlcnZlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEV2ZW50Q29uZGl0aW9uYWxPYnNlcnZlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvY29uZGl0aW9uYWwtb2JzZXJ2ZXIvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RFdmVudENvbmRpdGlvbmFsT2JzZXJ2ZXIuamF2YQpAQCAtNDEsMTIgKzQxLDEyIEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdEV2ZW50T2JzZXJ2ZXI6YWZ0ZXJEb2N1bWVudFVwZGF0ZSIpOwogICAgICAgICBkb2N1bWVudFVwZGF0ZWRFdmVudCsrOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIG9uRG9jdW1lbnRVcGRhdGVkQW5kQXBwcm92ZWQoCiAgICAgICAgICAgICBAT2JzZXJ2ZXMgQFVwZGF0ZWQgQEFwcHJvdmVkIERvY3VtZW50IGQpewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RFdmVudE9ic2VydmVyOnVwZGF0ZWQgYW5kIGFwcHJvdmVkIik7CiAgICAgICAgIGRvY3VtZW50QXBwcm92ZWRFdmVudHMrKzsKLSAgICAgICAgCisKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvY29uZGl0aW9uYWwtb2JzZXJ2ZXIvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RFdmVudFByb2R1Y2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2NvbmRpdGlvbmFsLW9ic2VydmVyL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0RXZlbnRQcm9kdWNlci5qYXZhCmluZGV4IGJiNmMxYmUuLjFkZjRjY2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvY29uZGl0aW9uYWwtb2JzZXJ2ZXIvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RFdmVudFByb2R1Y2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9jb25kaXRpb25hbC1vYnNlcnZlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEV2ZW50UHJvZHVjZXIuamF2YQpAQCAtMjIsMjQgKzIyLDI0IEBACiAKIHB1YmxpYyBjbGFzcyBUZXN0RXZlbnRQcm9kdWNlciB7CiAgICAgQEluamVjdCBFdmVudDxEb2N1bWVudD4gZG9jRXZlbnQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBmaXJlRXZlbnRzKCl7CiAgICAgICAgIERvY3VtZW50IGQgPSBuZXcgRG9jdW1lbnQoIlRlc3QiKTsKICAgICAgICAgZG9jRXZlbnQuZmlyZShkKTsgLy9nZW5lcmFsIGZpcmUgb2YgYSBEb2N1bWVudCByZWxhdGVkIGV2ZW50Ci0gICAgICAgIAorCiAgICAgICAgIC8vc2VuZCBhIGNyZWF0ZWQgZXZlbnQKICAgICAgICAgZG9jRXZlbnQuc2VsZWN0KAogICAgICAgICAgICAgICAgIG5ldyBBbm5vdGF0aW9uTGl0ZXJhbDxDcmVhdGVkPigpe30pLmZpcmUoZCk7Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIGQudXBkYXRlKCk7CiAgICAgICAgIC8vc2VuZCBhbiB1cGRhdGVkIGV2ZW50CiAgICAgICAgIGRvY0V2ZW50LnNlbGVjdCgKICAgICAgICAgICAgICAgICBuZXcgQW5ub3RhdGlvbkxpdGVyYWw8VXBkYXRlZD4oKXt9KS5maXJlKGQpOwotICAgICAgICAKKwogICAgICAgICAvL3NlbmQgYW4gdXBkYXRlZCBhbmQgYXBwcm92ZWQgZXZlbnQKICAgICAgICAgZG9jRXZlbnQuc2VsZWN0KG5ldyBBbm5vdGF0aW9uTGl0ZXJhbDxVcGRhdGVkPigpe30sIG5ldyBBbm5vdGF0aW9uTGl0ZXJhbDxBcHByb3ZlZD4oKXt9KS5maXJlKGQpOwotICAgICAgICAKKwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9jb25kaXRpb25hbC1vYnNlcnZlci9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Db25kaXRpb25hbE9ic2VydmVyVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvY29uZGl0aW9uYWwtb2JzZXJ2ZXIvc2VydmxldC90ZXN0L3NlcnZsZXQvQ29uZGl0aW9uYWxPYnNlcnZlclRlc3RTZXJ2bGV0LmphdmEKaW5kZXggYThlNGYwZS4uZWVkNzQ3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9jb25kaXRpb25hbC1vYnNlcnZlci9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Db25kaXRpb25hbE9ic2VydmVyVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2NvbmRpdGlvbmFsLW9ic2VydmVyL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0NvbmRpdGlvbmFsT2JzZXJ2ZXJUZXN0U2VydmxldC5qYXZhCkBAIC00OCwyNSArNDgsMjUgQEAKICAgICAgICAgaWYgKFRlc3RFdmVudENvbmRpdGlvbmFsT2JzZXJ2ZXIuZG9jdW1lbnRDcmVhdGVkRXZlbnQgIT0gMSl7CiAgICAgICAgICAgICBtc2cgKz0gIkRvY3VtZW50IGNyZWF0ZWQgZXZlbnQgbm90IHJlY2VpdmVkIGJ5IG9ic2VydmVyIjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoVGVzdEV2ZW50Q29uZGl0aW9uYWxPYnNlcnZlci5kb2N1bWVudFVwZGF0ZWRFdmVudCAhPSAyKXsKICAgICAgICAgICAgIG1zZyArPSAiRG9jdW1lbnQgdXBkYXRlZCBldmVudCBub3QgcmVjZWl2ZWQgYnkgb2JzZXJ2ZXIiOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChUZXN0RXZlbnRDb25kaXRpb25hbE9ic2VydmVyLmRvY3VtZW50QXBwcm92ZWRFdmVudHMgIT0gMSl7CiAgICAgICAgICAgICBtc2cgKz0gIkRvY3VtZW50IHVwZGF0ZWQgYW5kIGFwcHJvdmVkIGV2ZW50IG5vdCAiICsKLSAgICAgICAgICAgIAkJInJlY2VpdmVkIGJ5IG9ic2VydmVyIjsKKyAgICAgICAgICAgICAgICAgICAgInJlY2VpdmVkIGJ5IG9ic2VydmVyIjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoVGVzdEV2ZW50Q29uZGl0aW9uYWxPYnNlcnZlci5kb2N1bWVudEFueUV2ZW50cyAhPSA0KXsKICAgICAgICAgICAgIG1zZyArPSAiIyBvZiBEb2N1bWVudCBldmVudCByZWNlaXZlZCBieSBvYnNlcnZlciBkb2VzIG5vdCAiICsKLSAgICAgICAgICAgIAkJIm1hdGNoIGV4cGVjdGVkIHZhbHVlcy4gZXhwZWN0ZWQgPSAyLiBvYnNlcnZlZD0iKyBUZXN0RXZlbnRDb25kaXRpb25hbE9ic2VydmVyLmRvY3VtZW50QW55RXZlbnRzOworICAgICAgICAgICAgICAgICAgICAibWF0Y2ggZXhwZWN0ZWQgdmFsdWVzLiBleHBlY3RlZCA9IDIuIG9ic2VydmVkPSIrIFRlc3RFdmVudENvbmRpdGlvbmFsT2JzZXJ2ZXIuZG9jdW1lbnRBbnlFdmVudHM7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChTZWNvbmRUZXN0RXZlbnRDb25kaXRpb25hbE9ic2VydmVyLmRvY3VtZW50Q3JlYXRlZEV2ZW50ID4gMCkgCisKKyAgICAgICAgaWYgKFNlY29uZFRlc3RFdmVudENvbmRpdGlvbmFsT2JzZXJ2ZXIuZG9jdW1lbnRDcmVhdGVkRXZlbnQgPiAwKQogICAgICAgICAgICAgbXNnICs9ICJBIGNvbmRpdGlvbmFsIG9ic2VydmVyIHdhcyBub3RpZmllZCB3aGVuIGl0IGRpZCBub3QgZXhpc3QiOwotICAgICAgICAKLSAgICAgICAgCisKKwogCiAgICAgICAgIHdyaXRlci53cml0ZShtc2cgKyAiXG4iKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXByb2R1Y2Vycy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1wcm9kdWNlcnMvYnVpbGQucHJvcGVydGllcwppbmRleCBhYWE5MjAyLi42MmQ4NDJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXByb2R1Y2Vycy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcHJvZHVjZXJzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZXZlbnQtcHJvZHVjZXJzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXByb2R1Y2Vycy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXByb2R1Y2Vycy9idWlsZC54bWwKaW5kZXggMGI5YjNhMy4uMGExZjJmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1wcm9kdWNlcnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcHJvZHVjZXJzL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDIzICs0OCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1wcm9kdWNlcnMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcHJvZHVjZXJzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKaW5kZXggNWQ2YjUwMy4uZTM2OTMwNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1wcm9kdWNlcnMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXByb2R1Y2Vycy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdAogICAgICAgICA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9CiAgICAgICAgICJldmVudHMtc2ltcGxlLWV2ZW50LXByb2R1Y2VyIjsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRSA9ICJIZWxsbyBmcm9tIFNlcnZsZXQgMy4wLiI7CkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGludGVyY2VwdG9ycyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTYwLDcgKzYwLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk5LDEwICs5OSwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1wcm9kdWNlcnMvc2VydmxldC90ZXN0L2JlYW5zL0RvY3VtZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXByb2R1Y2Vycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvRG9jdW1lbnQuamF2YQppbmRleCBkODU3ZjVhLi4wY2JmN2U3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXByb2R1Y2Vycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvRG9jdW1lbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXByb2R1Y2Vycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvRG9jdW1lbnQuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvY3VtZW50IGNyZWF0ZWQgd2l0aCBuYW1lIiArIG5hbWUgKTsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB1cGRhdGUoKXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb2N1bWVudDoiICsgbmFtZSArICIgdXBkYXRlZC4iKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXByb2R1Y2Vycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEV2ZW50T2JzZXJ2ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcHJvZHVjZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0RXZlbnRPYnNlcnZlci5qYXZhCmluZGV4IDYwYTBiODMuLjQ2ODdlNjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcHJvZHVjZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0RXZlbnRPYnNlcnZlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcHJvZHVjZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0RXZlbnRPYnNlcnZlci5qYXZhCkBAIC0zOCwxMiArMzgsMTIgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0RXZlbnRPYnNlcnZlcjphZnRlckRvY3VtZW50VXBkYXRlIik7CiAgICAgICAgIGRvY3VtZW50VXBkYXRlZEV2ZW50Kys7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgb25Eb2N1bWVudFVwZGF0ZWRBbmRBcHByb3ZlZCgKICAgICAgICAgICAgIEBPYnNlcnZlcyBAVXBkYXRlZCBAQXBwcm92ZWQgRG9jdW1lbnQgZCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdEV2ZW50T2JzZXJ2ZXI6dXBkYXRlZCBhbmQgYXBwcm92ZWQiKTsKICAgICAgICAgZG9jdW1lbnRBcHByb3ZlZEV2ZW50cysrOwotICAgICAgICAKKwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1wcm9kdWNlcnMvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RFdmVudFByb2R1Y2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXByb2R1Y2Vycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEV2ZW50UHJvZHVjZXIuamF2YQppbmRleCBiYjZjMWJlLi4xZGY0Y2NhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXByb2R1Y2Vycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEV2ZW50UHJvZHVjZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXByb2R1Y2Vycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEV2ZW50UHJvZHVjZXIuamF2YQpAQCAtMjIsMjQgKzIyLDI0IEBACiAKIHB1YmxpYyBjbGFzcyBUZXN0RXZlbnRQcm9kdWNlciB7CiAgICAgQEluamVjdCBFdmVudDxEb2N1bWVudD4gZG9jRXZlbnQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBmaXJlRXZlbnRzKCl7CiAgICAgICAgIERvY3VtZW50IGQgPSBuZXcgRG9jdW1lbnQoIlRlc3QiKTsKICAgICAgICAgZG9jRXZlbnQuZmlyZShkKTsgLy9nZW5lcmFsIGZpcmUgb2YgYSBEb2N1bWVudCByZWxhdGVkIGV2ZW50Ci0gICAgICAgIAorCiAgICAgICAgIC8vc2VuZCBhIGNyZWF0ZWQgZXZlbnQKICAgICAgICAgZG9jRXZlbnQuc2VsZWN0KAogICAgICAgICAgICAgICAgIG5ldyBBbm5vdGF0aW9uTGl0ZXJhbDxDcmVhdGVkPigpe30pLmZpcmUoZCk7Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIGQudXBkYXRlKCk7CiAgICAgICAgIC8vc2VuZCBhbiB1cGRhdGVkIGV2ZW50CiAgICAgICAgIGRvY0V2ZW50LnNlbGVjdCgKICAgICAgICAgICAgICAgICBuZXcgQW5ub3RhdGlvbkxpdGVyYWw8VXBkYXRlZD4oKXt9KS5maXJlKGQpOwotICAgICAgICAKKwogICAgICAgICAvL3NlbmQgYW4gdXBkYXRlZCBhbmQgYXBwcm92ZWQgZXZlbnQKICAgICAgICAgZG9jRXZlbnQuc2VsZWN0KG5ldyBBbm5vdGF0aW9uTGl0ZXJhbDxVcGRhdGVkPigpe30sIG5ldyBBbm5vdGF0aW9uTGl0ZXJhbDxBcHByb3ZlZD4oKXt9KS5maXJlKGQpOwotICAgICAgICAKKwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1wcm9kdWNlcnMvc2VydmxldC90ZXN0L3NlcnZsZXQvU2ltcGxlRXZlbnRPYnNlcnZlclRlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXByb2R1Y2Vycy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9TaW1wbGVFdmVudE9ic2VydmVyVGVzdFNlcnZsZXQuamF2YQppbmRleCA1N2U4YzNiLi43MDhlYTQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXByb2R1Y2Vycy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9TaW1wbGVFdmVudE9ic2VydmVyVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXByb2R1Y2Vycy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9TaW1wbGVFdmVudE9ic2VydmVyVGVzdFNlcnZsZXQuamF2YQpAQCAtNDcsMjAgKzQ3LDIwIEBACiAgICAgICAgIGlmIChUZXN0RXZlbnRPYnNlcnZlci5kb2N1bWVudENyZWF0ZWRFdmVudCAhPSAxKXsKICAgICAgICAgICAgIG1zZyArPSAiRG9jdW1lbnQgY3JlYXRlZCBldmVudCBub3QgcmVjZWl2ZWQgYnkgb2JzZXJ2ZXIiOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChUZXN0RXZlbnRPYnNlcnZlci5kb2N1bWVudFVwZGF0ZWRFdmVudCAhPSAyKXsKICAgICAgICAgICAgIG1zZyArPSAiRG9jdW1lbnQgdXBkYXRlZCBldmVudCBub3QgcmVjZWl2ZWQgYnkgb2JzZXJ2ZXIiOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChUZXN0RXZlbnRPYnNlcnZlci5kb2N1bWVudEFwcHJvdmVkRXZlbnRzICE9IDEpewogICAgICAgICAgICAgbXNnICs9ICJEb2N1bWVudCB1cGRhdGVkIGFuZCBhcHByb3ZlZCBldmVudCBub3QgIiArCi0gICAgICAgICAgICAJCSJyZWNlaXZlZCBieSBvYnNlcnZlciI7CisgICAgICAgICAgICAgICAgICAgICJyZWNlaXZlZCBieSBvYnNlcnZlciI7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgaWYgKFRlc3RFdmVudE9ic2VydmVyLmRvY3VtZW50QW55RXZlbnRzICE9IDQpewogICAgICAgICAgICAgbXNnICs9ICIjIG9mIERvY3VtZW50IGV2ZW50IHJlY2VpdmVkIGJ5IG9ic2VydmVyIGRvZXMgbm90ICIgKwotICAgICAgICAgICAgCQkibWF0Y2ggZXhwZWN0ZWQgdmFsdWVzLiBleHBlY3RlZCA9IDIuIG9ic2VydmVkPSIrIFRlc3RFdmVudE9ic2VydmVyLmRvY3VtZW50QW55RXZlbnRzOworICAgICAgICAgICAgICAgICAgICAibWF0Y2ggZXhwZWN0ZWQgdmFsdWVzLiBleHBlY3RlZCA9IDIuIG9ic2VydmVkPSIrIFRlc3RFdmVudE9ic2VydmVyLmRvY3VtZW50QW55RXZlbnRzOwogICAgICAgICB9CiAKICAgICAgICAgd3JpdGVyLndyaXRlKG1zZyArICJcbiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1xdWFsaWZpZXJzLXdpdGgtbWVtYmVycy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1xdWFsaWZpZXJzLXdpdGgtbWVtYmVycy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGFhYTkyMDIuLjYyZDg0MmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcXVhbGlmaWVycy13aXRoLW1lbWJlcnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXF1YWxpZmllcnMtd2l0aC1tZW1iZXJzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZXZlbnQtcHJvZHVjZXJzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXF1YWxpZmllcnMtd2l0aC1tZW1iZXJzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcXVhbGlmaWVycy13aXRoLW1lbWJlcnMvYnVpbGQueG1sCmluZGV4IDBiOWIzYTMuLjBhMWYyZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcXVhbGlmaWVycy13aXRoLW1lbWJlcnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcXVhbGlmaWVycy13aXRoLW1lbWJlcnMvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDgsMjMgKzQ4LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXF1YWxpZmllcnMtd2l0aC1tZW1iZXJzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXF1YWxpZmllcnMtd2l0aC1tZW1iZXJzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKaW5kZXggZGVkMWQyMC4uY2UyNWIxZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1xdWFsaWZpZXJzLXdpdGgtbWVtYmVycy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcXVhbGlmaWVycy13aXRoLW1lbWJlcnMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQKICAgICAgICAgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9IAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPQogICAgICAgICAiZXZlbnRzLWV2ZW50LXF1YWxpZmllcnMtd2l0aC1tZW1iZXJzIjsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRSA9ICJIZWxsbyBmcm9tIFNlcnZsZXQgMy4wLiI7CkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGludGVyY2VwdG9ycyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTYwLDcgKzYwLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk5LDEwICs5OSwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1xdWFsaWZpZXJzLXdpdGgtbWVtYmVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvRG9jdW1lbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcXVhbGlmaWVycy13aXRoLW1lbWJlcnMvc2VydmxldC90ZXN0L2JlYW5zL0RvY3VtZW50LmphdmEKaW5kZXggZDg1N2Y1YS4uMGNiZjdlNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1xdWFsaWZpZXJzLXdpdGgtbWVtYmVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvRG9jdW1lbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXF1YWxpZmllcnMtd2l0aC1tZW1iZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9Eb2N1bWVudC5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9jdW1lbnQgY3JlYXRlZCB3aXRoIG5hbWUiICsgbmFtZSApOwogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHVwZGF0ZSgpewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvY3VtZW50OiIgKyBuYW1lICsgIiB1cGRhdGVkLiIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcXVhbGlmaWVycy13aXRoLW1lbWJlcnMvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RFdmVudFByb2R1Y2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXF1YWxpZmllcnMtd2l0aC1tZW1iZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0RXZlbnRQcm9kdWNlci5qYXZhCmluZGV4IGI5ZWQ2ZDMuLmIzOTlhNzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcXVhbGlmaWVycy13aXRoLW1lbWJlcnMvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RFdmVudFByb2R1Y2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1xdWFsaWZpZXJzLXdpdGgtbWVtYmVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEV2ZW50UHJvZHVjZXIuamF2YQpAQCAtMjIsMjcgKzIyLDI3IEBACiAKIHB1YmxpYyBjbGFzcyBUZXN0RXZlbnRQcm9kdWNlciB7CiAgICAgQEluamVjdCBFdmVudDxEb2N1bWVudD4gZG9jRXZlbnQ7Ci0gICAgCisKICAgICBASW5qZWN0IEBVcGRhdGVkKHVwZGF0ZWRCeT0iYWRtaW4iKSBFdmVudDxEb2N1bWVudD4gdXBkYXRlZEJ5QWRtaW5FdmVudDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGZpcmVFdmVudHMoKXsKICAgICAgICAgRG9jdW1lbnQgZCA9IG5ldyBEb2N1bWVudCgiVGVzdCIpOwogICAgICAgICBkb2NFdmVudC5maXJlKGQpOyAvL2dlbmVyYWwgZmlyZSBvZiBhIERvY3VtZW50IHJlbGF0ZWQgZXZlbnQKLSAgICAgICAgCisKICAgICAgICAgLy9zZW5kIGEgY3JlYXRlZCBldmVudAogICAgICAgICBkb2NFdmVudC5zZWxlY3QoCiAgICAgICAgICAgICAgICAgbmV3IEFubm90YXRpb25MaXRlcmFsPENyZWF0ZWQ+KCl7fSkuZmlyZShkKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgZC51cGRhdGUoKTsKICAgICAgICAgLy9zZW5kIGFuIHVwZGF0ZWQgYnkgYWRtaW4gZXZlbnQKICAgICAgICAgdXBkYXRlZEJ5QWRtaW5FdmVudC5maXJlKGQpOwotICAgICAgICAKKwogICAgICAgICAvL3NlbmQgYW4gdXBkYXRlZCBieSBGb29Vc2VyIGV2ZW50CiAgICAgICAgIGRvY0V2ZW50LnNlbGVjdChuZXcgVXNlckJpbmRpbmcoIkZvb1VzZXIiKSkuZmlyZShkKTsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKIAogfQogCkBAIC01Nyw1ICs1Nyw1IEBACiAgICAgcHVibGljIFN0cmluZyB1cGRhdGVkQnkoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLnVzZXJOYW1lOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9tdWx0aXBsZS1ldmVudC1xdWFsaWZpZXJzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL211bHRpcGxlLWV2ZW50LXF1YWxpZmllcnMvYnVpbGQucHJvcGVydGllcwppbmRleCAzNjJlODMyLi4zNTM1ZDYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL211bHRpcGxlLWV2ZW50LXF1YWxpZmllcnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL211bHRpcGxlLWV2ZW50LXF1YWxpZmllcnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1tdWx0aXBsZS1ldmVudC1xdWFsaWZpZXJzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL211bHRpcGxlLWV2ZW50LXF1YWxpZmllcnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9tdWx0aXBsZS1ldmVudC1xdWFsaWZpZXJzL2J1aWxkLnhtbAppbmRleCAwYjliM2EzLi4wYTFmMmY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL211bHRpcGxlLWV2ZW50LXF1YWxpZmllcnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvbXVsdGlwbGUtZXZlbnQtcXVhbGlmaWVycy9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwyMyArNDgsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvbXVsdGlwbGUtZXZlbnQtcXVhbGlmaWVycy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9tdWx0aXBsZS1ldmVudC1xdWFsaWZpZXJzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKaW5kZXggNzQ4ZmM0ZC4uMmIzYThhZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9tdWx0aXBsZS1ldmVudC1xdWFsaWZpZXJzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9tdWx0aXBsZS1ldmVudC1xdWFsaWZpZXJzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0CiAgICAgICAgID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0KICAgICAgICAgImV2ZW50cy1tdWx0aXBsZS1ldmVudC1xdWFsaWZpZXJzIjsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRSA9ICJIZWxsbyBmcm9tIFNlcnZsZXQgMy4wLiI7CkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGludGVyY2VwdG9ycyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTYwLDcgKzYwLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk5LDEwICs5OSwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9tdWx0aXBsZS1ldmVudC1xdWFsaWZpZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9Eb2N1bWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9tdWx0aXBsZS1ldmVudC1xdWFsaWZpZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9Eb2N1bWVudC5qYXZhCmluZGV4IDZlNmVlZTYuLjA0NTgxNGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvbXVsdGlwbGUtZXZlbnQtcXVhbGlmaWVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvRG9jdW1lbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL211bHRpcGxlLWV2ZW50LXF1YWxpZmllcnMvc2VydmxldC90ZXN0L2JlYW5zL0RvY3VtZW50LmphdmEKQEAgLTI0LDExICsyNCwxMSBAQAogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICAgICB0aGlzLmlzQmxvZyA9IGJsb2c7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaXNCbG9nKCl7CiAgICAgICAgIHJldHVybiB0aGlzLmlzQmxvZzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB1cGRhdGUoKXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb2N1bWVudDoiICsgbmFtZSArICIgdXBkYXRlZC4iKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL211bHRpcGxlLWV2ZW50LXF1YWxpZmllcnMvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RFdmVudE9ic2VydmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL211bHRpcGxlLWV2ZW50LXF1YWxpZmllcnMvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RFdmVudE9ic2VydmVyLmphdmEKaW5kZXggYWNlNTNmMC4uNjNmYjU4ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9tdWx0aXBsZS1ldmVudC1xdWFsaWZpZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0RXZlbnRPYnNlcnZlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvbXVsdGlwbGUtZXZlbnQtcXVhbGlmaWVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEV2ZW50T2JzZXJ2ZXIuamF2YQpAQCAtMzYsMTcgKzM2LDE3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdEV2ZW50T2JzZXJ2ZXI6YWZ0ZXJEb2N1bWVudFVwZGF0ZSIpOwogICAgICAgICBkb2N1bWVudEFmdGVyRG9jdW1lbnRVcGRhdGUrKzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBvbkFueUJsb2dFdmVudCgKICAgICAgICAgICAgIEBPYnNlcnZlcyBAQmxvZyBEb2N1bWVudCBkKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdEV2ZW50T2JzZXJ2ZXI6b25BbnlCbG9nRXZlbnQiKTsKICAgICAgICAgZG9jdW1lbnRPbkFueUJsb2dFdmVudCsrOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIG9uQW55RG9jdW1lbnRFdmVudChAT2JzZXJ2ZXMgRG9jdW1lbnQgZCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdEV2ZW50T2JzZXJ2ZXI6b25BbnlEb2N1bWVudEV2ZW50Iik7CiAgICAgICAgIGRvY3VtZW50T25BbnlEb2N1bWVudEV2ZW50Kys7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL211bHRpcGxlLWV2ZW50LXF1YWxpZmllcnMvc2VydmxldC90ZXN0L3NlcnZsZXQvTXVsdGlwbGVFdmVudFF1YWxpZmllclRlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL211bHRpcGxlLWV2ZW50LXF1YWxpZmllcnMvc2VydmxldC90ZXN0L3NlcnZsZXQvTXVsdGlwbGVFdmVudFF1YWxpZmllclRlc3RTZXJ2bGV0LmphdmEKaW5kZXggMzE1YzdmZC4uZTlmNTk5OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9tdWx0aXBsZS1ldmVudC1xdWFsaWZpZXJzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L011bHRpcGxlRXZlbnRRdWFsaWZpZXJUZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvbXVsdGlwbGUtZXZlbnQtcXVhbGlmaWVycy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9NdWx0aXBsZUV2ZW50UXVhbGlmaWVyVGVzdFNlcnZsZXQuamF2YQpAQCAtNTAsMTUgKzUwLDE1IEBACiAgICAgICAgIGlmIChUZXN0RXZlbnRPYnNlcnZlci5kb2N1bWVudEFmdGVyRG9jdW1lbnRVcGRhdGUgIT0gMSkgewogICAgICAgICAgICAgbXNnICs9ICJEb2N1bWVudCB1cGRhdGVkIGV2ZW50IG5vdCByZWNlaXZlZCBieSBvYnNlcnZlciI7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKFRlc3RFdmVudE9ic2VydmVyLmRvY3VtZW50T25BbnlCbG9nRXZlbnQgIT0gMSkgewogICAgICAgICAgICAgbXNnICs9ICJPbiBBbnkgQmxvZyBldmVudCBub3QgcmVjZWl2ZWQgYnkgb2JzZXJ2ZXIiOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChUZXN0RXZlbnRPYnNlcnZlci5kb2N1bWVudE9uQW55RG9jdW1lbnRFdmVudCAhPSAzKSB7CiAgICAgICAgICAgICBtc2cgKz0gIk9uIGFueSBkb2N1bWVudCBldmVudCBub3QgcmVjZWl2ZWQgYnkgb2JzZXJ2ZXIiOwogICAgICAgICB9Ci0gICAgICAgIAorCiAKIAogICAgICAgICB3cml0ZXIud3JpdGUobXNnICsgIlxuIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL3NpbXBsZS1ldmVudC1vYnNlcnZlcnMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvc2ltcGxlLWV2ZW50LW9ic2VydmVycy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDViNGI4MzAuLmY5YmUxOTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvc2ltcGxlLWV2ZW50LW9ic2VydmVycy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvc2ltcGxlLWV2ZW50LW9ic2VydmVycy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNpbXBsZS1ldmVudC1vYnNlcnZlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9zaW1wbGUtZXZlbnQtb2JzZXJ2ZXJzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvc2ltcGxlLWV2ZW50LW9ic2VydmVycy9idWlsZC54bWwKaW5kZXggMGI5YjNhMy4uMGExZjJmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9zaW1wbGUtZXZlbnQtb2JzZXJ2ZXJzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL3NpbXBsZS1ldmVudC1vYnNlcnZlcnMvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDgsMjMgKzQ4LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL3NpbXBsZS1ldmVudC1vYnNlcnZlcnMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvc2ltcGxlLWV2ZW50LW9ic2VydmVycy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IGJjYWMxZDIuLjAyYzczNzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvc2ltcGxlLWV2ZW50LW9ic2VydmVycy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvc2ltcGxlLWV2ZW50LW9ic2VydmVycy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdAogICAgICAgICA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9CiAgICAgICAgICJldmVudHMtc2ltcGxlLWV2ZW50LW9ic2VydmVyIjsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRSA9ICJIZWxsbyBmcm9tIFNlcnZsZXQgMy4wLiI7CkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGludGVyY2VwdG9ycyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTYwLDcgKzYwLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk5LDEwICs5OSwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9zaW1wbGUtZXZlbnQtb2JzZXJ2ZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9Eb2N1bWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9zaW1wbGUtZXZlbnQtb2JzZXJ2ZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9Eb2N1bWVudC5qYXZhCmluZGV4IGQ4NTdmNWEuLjBjYmY3ZTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvc2ltcGxlLWV2ZW50LW9ic2VydmVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvRG9jdW1lbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL3NpbXBsZS1ldmVudC1vYnNlcnZlcnMvc2VydmxldC90ZXN0L2JlYW5zL0RvY3VtZW50LmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb2N1bWVudCBjcmVhdGVkIHdpdGggbmFtZSIgKyBuYW1lICk7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdXBkYXRlKCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9jdW1lbnQ6IiArIG5hbWUgKyAiIHVwZGF0ZWQuIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9zaW1wbGUtZXZlbnQtb2JzZXJ2ZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0UmVxdWVzdFNjb3BlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvc2ltcGxlLWV2ZW50LW9ic2VydmVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdFJlcXVlc3RTY29wZWRCZWFuLmphdmEKaW5kZXggZGE4NTg4Ny4uNTBmMWI5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9zaW1wbGUtZXZlbnQtb2JzZXJ2ZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0UmVxdWVzdFNjb3BlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL3NpbXBsZS1ldmVudC1vYnNlcnZlcnMvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RSZXF1ZXN0U2NvcGVkQmVhbi5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiBwdWJsaWMgY2xhc3MgVGVzdFJlcXVlc3RTY29wZWRCZWFuIHsKICAgICBASW5qZWN0IEBDcmVhdGVkIEV2ZW50PERvY3VtZW50PiBkb2NDcmVhdGVkRXZlbnQ7CiAgICAgQEluamVjdCBAVXBkYXRlZCBFdmVudDxEb2N1bWVudD4gZG9jVXBkYXRlZEV2ZW50OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZmlyZUV2ZW50cygpewogICAgICAgICBEb2N1bWVudCBkID0gbmV3IERvY3VtZW50KCJUZXN0Iik7CiAgICAgICAgIGRvY0NyZWF0ZWRFdmVudC5maXJlKGQpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9zaW1wbGUtZXZlbnQtb2JzZXJ2ZXJzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1NpbXBsZUV2ZW50T2JzZXJ2ZXJUZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9zaW1wbGUtZXZlbnQtb2JzZXJ2ZXJzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1NpbXBsZUV2ZW50T2JzZXJ2ZXJUZXN0U2VydmxldC5qYXZhCmluZGV4IDlkMWE1NmEuLjRiYjVkMTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvc2ltcGxlLWV2ZW50LW9ic2VydmVycy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9TaW1wbGVFdmVudE9ic2VydmVyVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL3NpbXBsZS1ldmVudC1vYnNlcnZlcnMvc2VydmxldC90ZXN0L3NlcnZsZXQvU2ltcGxlRXZlbnRPYnNlcnZlclRlc3RTZXJ2bGV0LmphdmEKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgaWYgKFRlc3RFdmVudE9ic2VydmVyLmRvY3VtZW50VXBkYXRlZEV2ZW50ICE9IDEpewogICAgICAgICAgICAgbXNnICs9ICJEb2N1bWVudCB1cGRhdGVkIGV2ZW50IG5vdCByZWNlaXZlZCBieSBvYnNlcnZlciI7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKFRlc3RFdmVudE9ic2VydmVyLmRvY3VtZW50QW55RXZlbnRzICE9IDIpewogICAgICAgICAgICAgbXNnICs9ICIjIG9mIERvY3VtZW50IGV2ZW50IHJlY2VpdmVkIGJ5IG9ic2VydmVyIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIHZhbHVlcy4gZXhwZWN0ZWQgPSAyLiBvYnNlcnZlZD0iKyBUZXN0RXZlbnRPYnNlcnZlci5kb2N1bWVudEFueUV2ZW50czsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ltcGxpY2l0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbXBsaWNpdC9idWlsZC54bWwKaW5kZXggMTBiZDc2ZS4uNGUwYjk1NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ltcGxpY2l0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW1wbGljaXQvYnVpbGQueG1sCkBAIC0zMCw4NiArMzAsODYgQEAKICAgICAmY29tbW9uQnVpbGQ7CiAgICAgJmNvbW1vblJ1bjsKICAgICAmcmVwb3J0aW5nOwotICAgIAorCiAgICAgPHByb3BlcnR5IG5hbWU9ImltcGxpY2l0LXRhcmdldCIgdmFsdWU9ImFsbCIgLz4KIAotCTx0YXNrZGVmIHJlc291cmNlPSJuZXQvc2YvYW50Y29udHJpYi9hbnRjb250cmliLnByb3BlcnRpZXMiPgotCQk8Y2xhc3NwYXRoPgotCQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvY2RpL2xpYi9hbnQtY29udHJpYi0xLjBiMy5qYXIiIC8+Ci0JCTwvY2xhc3NwYXRoPgotCTwvdGFza2RlZj4KKyAgICA8dGFza2RlZiByZXNvdXJjZT0ibmV0L3NmL2FudGNvbnRyaWIvYW50Y29udHJpYi5wcm9wZXJ0aWVzIj4KKyAgICAgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2NkaS9saWIvYW50LWNvbnRyaWItMS4wYjMuamFyIiAvPgorICAgICAgICA8L2NsYXNzcGF0aD4KKyAgICA8L3Rhc2tkZWY+CiAKLQk8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0Ij4KLQkJPGFudGNhbGwgdGFyZ2V0PSJpbXBsaWNpdCI+Ci0JCQk8cGFyYW0gbmFtZT0iaW1wbGljaXQtdGFyZ2V0IiB2YWx1ZT0icnVuLXRlc3QiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0Ij4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJpbXBsaWNpdCI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaW1wbGljaXQtdGFyZ2V0IiB2YWx1ZT0icnVuLXRlc3QiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYWxsIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJpbXBsaWNpdCI+Ci0JCQk8cGFyYW0gbmFtZT0iaW1wbGljaXQtdGFyZ2V0IiB2YWx1ZT0iYWxsIiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJhbGwiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImltcGxpY2l0Ij4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJpbXBsaWNpdC10YXJnZXQiIHZhbHVlPSJhbGwiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iY2xlYW4iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImltcGxpY2l0Ij4KLQkJCTxwYXJhbSBuYW1lPSJpbXBsaWNpdC10YXJnZXQiIHZhbHVlPSJjbGVhbiIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImltcGxpY2l0Ij4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJpbXBsaWNpdC10YXJnZXQiIHZhbHVlPSJjbGVhbiIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJidWlsZCI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iaW1wbGljaXQiPgotCQkJPHBhcmFtIG5hbWU9ImltcGxpY2l0LXRhcmdldCIgdmFsdWU9ImJ1aWxkIiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iaW1wbGljaXQiPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImltcGxpY2l0LXRhcmdldCIgdmFsdWU9ImJ1aWxkIiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InNldHVwIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJpbXBsaWNpdCI+Ci0JCQk8cGFyYW0gbmFtZT0iaW1wbGljaXQtdGFyZ2V0IiB2YWx1ZT0ic2V0dXAiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InNldHVwIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJpbXBsaWNpdCI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaW1wbGljaXQtdGFyZ2V0IiB2YWx1ZT0ic2V0dXAiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iZGVwbG95Ij4KLQkJPGFudGNhbGwgdGFyZ2V0PSJpbXBsaWNpdCI+Ci0JCQk8cGFyYW0gbmFtZT0iaW1wbGljaXQtdGFyZ2V0IiB2YWx1ZT0iZGVwbG95IiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImltcGxpY2l0Ij4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJpbXBsaWNpdC10YXJnZXQiIHZhbHVlPSJkZXBsb3kiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImltcGxpY2l0Ij4KLQkJCTxwYXJhbSBuYW1lPSJpbXBsaWNpdC10YXJnZXQiIHZhbHVlPSJ1bmRlcGxveSIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImltcGxpY2l0Ij4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJpbXBsaWNpdC10YXJnZXQiIHZhbHVlPSJ1bmRlcGxveSIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1bnNldHVwIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJpbXBsaWNpdCI+Ci0JCQk8cGFyYW0gbmFtZT0iaW1wbGljaXQtdGFyZ2V0IiB2YWx1ZT0idW5zZXR1cCIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iaW1wbGljaXQiPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImltcGxpY2l0LXRhcmdldCIgdmFsdWU9InVuc2V0dXAiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0icnVuIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJpbXBsaWNpdCI+Ci0JCQk8cGFyYW0gbmFtZT0iaW1wbGljaXQtdGFyZ2V0IiB2YWx1ZT0icnVuIiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJydW4iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImltcGxpY2l0Ij4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJpbXBsaWNpdC10YXJnZXQiIHZhbHVlPSJydW4iIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iaW1wbGljaXQiPgotCQk8cmVjb3JkIG5hbWU9ImltcGxpY2l0Lm91dHB1dCIgYWN0aW9uPSJzdGFydCIgLz4KLQkJPGFudCBkaXI9InNpbXBsZS1lamItY2RpIiB0YXJnZXQ9IiR7aW1wbGljaXQtdGFyZ2V0fSIgLz4KLQkJPGFudCBkaXI9ImRlcGxveW1lbnQtb3B0aW9uIiB0YXJnZXQ9IiR7aW1wbGljaXQtdGFyZ2V0fSIgLz4KLQkJPHJlY29yZCBuYW1lPSJpbXBsaWNpdC5vdXRwdXQiIGFjdGlvbj0ic3RvcCIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImltcGxpY2l0Ij4KKyAgICAgICAgPHJlY29yZCBuYW1lPSJpbXBsaWNpdC5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiIC8+CisgICAgICAgIDxhbnQgZGlyPSJzaW1wbGUtZWpiLWNkaSIgdGFyZ2V0PSIke2ltcGxpY2l0LXRhcmdldH0iIC8+CisgICAgICAgIDxhbnQgZGlyPSJkZXBsb3ltZW50LW9wdGlvbiIgdGFyZ2V0PSIke2ltcGxpY2l0LXRhcmdldH0iIC8+CisgICAgICAgIDxyZWNvcmQgbmFtZT0iaW1wbGljaXQub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQkJPGVjaG8+IFVzYWdlOgotCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIHNtb2tlIHRlc3RzKQotCQlhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIHNtb2tlIHRlc3RzKQotCQlhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIHNtb2tlIHRlc3RzKQotCQlhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3Igc21va2UgdGVzdHMpCi0JCWFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBzbW9rZSBhcHBzKQotCQlhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIHNtb2tlIHRlc3RzKQotCQlhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBzbW9rZSBhcHBzKQotCQlhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIHNtb2tlIHRlc3RzKQotCTwvZWNobz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KKyAgICAgICAgPGVjaG8+IFVzYWdlOgorICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIHNtb2tlIHRlc3RzKQorICAgICAgICBhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIHNtb2tlIHRlc3RzKQorICAgICAgICBhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIHNtb2tlIHRlc3RzKQorICAgICAgICBhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3Igc21va2UgdGVzdHMpCisgICAgICAgIGFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBzbW9rZSBhcHBzKQorICAgICAgICBhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIHNtb2tlIHRlc3RzKQorICAgICAgICBhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBzbW9rZSBhcHBzKQorICAgICAgICBhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIHNtb2tlIHRlc3RzKQorICAgIDwvZWNobz4KKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbXBsaWNpdC9kZXBsb3ltZW50LW9wdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ltcGxpY2l0L2RlcGxveW1lbnQtb3B0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjgxYmEwMi4uOGIzYmFiMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ltcGxpY2l0L2RlcGxveW1lbnQtb3B0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ltcGxpY2l0L2RlcGxveW1lbnQtb3B0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNpbXBsZS1lamItaW1wbGljaXQtY2RpLWRlcGxveW1lbnQtb3B0Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ltcGxpY2l0L2RlcGxveW1lbnQtb3B0aW9uL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbXBsaWNpdC9kZXBsb3ltZW50LW9wdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYWFiYTc0NS4uYzFmNzdjYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ltcGxpY2l0L2RlcGxveW1lbnQtb3B0aW9uL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW1wbGljaXQvZGVwbG95bWVudC1vcHRpb24vY2xpZW50L0NsaWVudC5qYXZhCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLSAgICAJcmV0dXJuOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3RSZXNwb25zZShTdHJpbmcgdGVzdERlc2NyaXB0aW9uLCBTdHJpbmcgcmVzcG9uc2UpewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ltcGxpY2l0L3NpbXBsZS1lamItY2RpL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW1wbGljaXQvc2ltcGxlLWVqYi1jZGkvYnVpbGQucHJvcGVydGllcwppbmRleCAzODJiY2QzLi4xZWNiOWFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW1wbGljaXQvc2ltcGxlLWVqYi1jZGkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW1wbGljaXQvc2ltcGxlLWVqYi1jZGkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2ltcGxlLWVqYi1pbXBsaWNpdC1jZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW1wbGljaXQvc2ltcGxlLWVqYi1jZGkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ltcGxpY2l0L3NpbXBsZS1lamItY2RpL2J1aWxkLnhtbAppbmRleCAzZjg0NTI5Li4wNWFmODM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW1wbGljaXQvc2ltcGxlLWVqYi1jZGkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbXBsaWNpdC9zaW1wbGUtZWpiLWNkaS9idWlsZC54bWwKQEAgLTMxLDQzICszMSw0MyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW4sdW5kZXBsb3kiLz4KIAotCTx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+Ci0JCTxkZWxldGUgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIi8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KKyAgICAgICAgPGRlbGV0ZSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEiLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgotCQk8Y29weSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEudG9rZW4iIHRvZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIi8+Ci0JCTxyZXBsYWNlIGZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IkBPUkJfUE9SVEAiIHZhbHVlPSIke29yYi5wb3J0fSIvPgorICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgorICAgICAgICA8Y29weSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEudG9rZW4iIHRvZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIi8+CisgICAgICAgIDxyZXBsYWNlIGZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IkBPUkJfUE9SVEAiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogCi0JCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqL1NsZXNzKi5jbGFzcywgKiovRm9vKi5jbGFzcywgKiovSW1wbGljaXRUZXN0QmVhbi5jbGFzcyIvPgotCQkJPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCAqKi9Gb28qLmNsYXNzLCAqKi9TbGVzcy5jbGFzcyIvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi9TbGVzcyouY2xhc3MsICoqL0ZvbyouY2xhc3MsICoqL0ltcGxpY2l0VGVzdEJlYW4uY2xhc3MiLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgdmFsdWU9IioqL0NsaWVudC5jbGFzcywgKiovRm9vKi5jbGFzcywgKiovU2xlc3MuY2xhc3MiLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbXBsaWNpdC9zaW1wbGUtZWpiLWNkaS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW1wbGljaXQvc2ltcGxlLWVqYi1jZGkvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGMyNjZhYTMuLjM4YjUyZTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbXBsaWNpdC9zaW1wbGUtZWpiLWNkaS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ltcGxpY2l0L3NpbXBsZS1lamItY2RpL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDEsMTAgKzQxLDEwIEBACiAgICAgLy8gTk9URTogVG9rZW4gMzcwMCB3aWxsIGJlIHJlcGxhY2VkIGluIEBFSkIgYW5ub3RhdGlvbnMgYmVsb3cKICAgICAvLyB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgcG9ydCBmcm9tIGNvbmZpZy5wcm9wZXJ0aWVzIGR1cmluZyB0aGUgYnVpbGQKICAgICAvLwotICAgIEBFSkIobWFwcGVkTmFtZSA9ICJjb3JiYW5hbWU6aWlvcDpsb2NhbGhvc3Q6MzcwMCN0ZXN0LkZvbyIpIAorICAgIEBFSkIobWFwcGVkTmFtZSA9ICJjb3JiYW5hbWU6aWlvcDpsb2NhbGhvc3Q6MzcwMCN0ZXN0LkZvbyIpCiAgICAgcHJpdmF0ZSBzdGF0aWMgRm9vIHNsZXNzMjsKIAotICAgIEBFSkIobWFwcGVkTmFtZSA9ICJjb3JiYW5hbWU6aWlvcDpsb2NhbGhvc3Q6MzcwMCNqYXZhOmdsb2JhbC9zaW1wbGUtZWpiLWltcGxpY2l0LWNkaUFwcC9zaW1wbGUtZWpiLWltcGxpY2l0LWNkaS1lamIvU2xlc3NFSkIhdGVzdC5Gb28iKSAKKyAgICBARUpCKG1hcHBlZE5hbWUgPSAiY29yYmFuYW1lOmlpb3A6bG9jYWxob3N0OjM3MDAjamF2YTpnbG9iYWwvc2ltcGxlLWVqYi1pbXBsaWNpdC1jZGlBcHAvc2ltcGxlLWVqYi1pbXBsaWNpdC1jZGktZWpiL1NsZXNzRUpCIXRlc3QuRm9vIikKICAgICBwcml2YXRlIHN0YXRpYyBGb28gc2xlc3MzOwogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ltcGxpY2l0L3NpbXBsZS1lamItY2RpL2VqYi90ZXN0L1NsZXNzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW1wbGljaXQvc2ltcGxlLWVqYi1jZGkvZWpiL3Rlc3QvU2xlc3NFSkIuamF2YQppbmRleCBhMDBjNzE3Li42M2E5YjM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW1wbGljaXQvc2ltcGxlLWVqYi1jZGkvZWpiL3Rlc3QvU2xlc3NFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW1wbGljaXQvc2ltcGxlLWVqYi1jZGkvZWpiL3Rlc3QvU2xlc3NFSkIuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogICAgICAgICBpZiAodGVzdEJlYW4gIT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuICJoZWxsbyI7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW5qZWN0aW9uLXBvaW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbmplY3Rpb24tcG9pbnQvV2ViVGVzdC5qYXZhCmluZGV4IDRmZDc4MmEuLmJhNGViNmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbmplY3Rpb24tcG9pbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbmplY3Rpb24tcG9pbnQvV2ViVGVzdC5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUZXN0aW5nIEluamVjdGlvblBvaW50IGNhcGFiaWxpdGllcyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUxLDcgKzUxLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmw/dXNlcm5hbWU9c2NvdHQmcGFzc3dvcmQ9dGlnZXIiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTEwMSwxMCArMTAxLDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW5qZWN0aW9uLXBvaW50L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW5qZWN0aW9uLXBvaW50L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNTdiYTVmZi4uYmFlYTVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2luamVjdGlvbi1wb2ludC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbmplY3Rpb24tcG9pbnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpLXByb2dyYW1tYXRpYy1sb29rdXAiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtYW5ub3RhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2luamVjdGlvbi1wb2ludC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW5qZWN0aW9uLXBvaW50L2J1aWxkLnhtbAppbmRleCBjMGQ5MDRkLi44NzJmMzY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW5qZWN0aW9uLXBvaW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW5qZWN0aW9uLXBvaW50L2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMyArNDcsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW5qZWN0aW9uLXBvaW50L3NlcnZsZXQvSW5qZWN0aW9uUG9pbnRGaWx0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbmplY3Rpb24tcG9pbnQvc2VydmxldC9JbmplY3Rpb25Qb2ludEZpbHRlci5qYXZhCmluZGV4IGM4ODQyMjYuLmI1ODdmNmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbmplY3Rpb24tcG9pbnQvc2VydmxldC9JbmplY3Rpb25Qb2ludEZpbHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbmplY3Rpb24tcG9pbnQvc2VydmxldC9JbmplY3Rpb25Qb2ludEZpbHRlci5qYXZhCkBAIC0zMCwxOSArMzAsMTkgQEAKIC8vQSB3ZWIgZmlsdGVyIHRvIHNldCBTZXJ2bGV0UmVxdWVzdCBpbiB0aGUgdGhyZWFkIGxvY2FsIGNvbnRleHQuCiBAV2ViRmlsdGVyKHVybFBhdHRlcm5zPSIvKiIpCiBwdWJsaWMgY2xhc3MgSW5qZWN0aW9uUG9pbnRGaWx0ZXIgaW1wbGVtZW50cyBGaWx0ZXJ7Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluamVjdGlvblBvaW50RmlsdGVyOjpkZXN0cm95Iik7Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxLCBTZXJ2bGV0UmVzcG9uc2UgcmVzLAogICAgICAgICAgICAgRmlsdGVyQ2hhaW4gYXJnMikgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmplY3Rpb25Qb2ludEZpbHRlcjo6ZG9GaWx0ZXIiKTsKLSAgICAgICAgLy9zZXR0aW5nIHRoZSBTZXJ2bGV0UmVxdWVzdCBpbiB0aGUgdGhyZWFkLWxvY2FsIAorICAgICAgICAvL3NldHRpbmcgdGhlIFNlcnZsZXRSZXF1ZXN0IGluIHRoZSB0aHJlYWQtbG9jYWwKICAgICAgICAgLy92YXJpYWJsZSBzbyB0aGF0IGl0IGNvdWxkIGJlIHVzZWQgaW4gSHR0cFBhcmFtcwotICAgICAgICBIdHRwUGFyYW1zLnNyLnNldChyZXEpOyAKKyAgICAgICAgSHR0cFBhcmFtcy5zci5zZXQocmVxKTsKICAgICAgICAgYXJnMi5kb0ZpbHRlcihyZXEsIHJlcyk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW5qZWN0aW9uLXBvaW50L3NlcnZsZXQvdGVzdC9hcnRpZmFjdHMvSHR0cFBhcmFtcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2luamVjdGlvbi1wb2ludC9zZXJ2bGV0L3Rlc3QvYXJ0aWZhY3RzL0h0dHBQYXJhbXMuamF2YQppbmRleCA1ZTI3OTNmLi42ZDcxZTEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW5qZWN0aW9uLXBvaW50L3NlcnZsZXQvdGVzdC9hcnRpZmFjdHMvSHR0cFBhcmFtcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbmplY3Rpb24tcG9pbnQvc2VydmxldC90ZXN0L2FydGlmYWN0cy9IdHRwUGFyYW1zLmphdmEKQEAgLTI2LDEzICsyNiwxMyBAQAogQFJlcXVlc3RTY29wZWQKIHB1YmxpYyBjbGFzcyBIdHRwUGFyYW1zIHsKICAgICAvL0EgdGhyZWFkIGxvY2FsIHZhcmlhYmxlIHRvIGhvdXNlIHRoZSBzZXJ2bGV0IHJlcXVlc3QuIFRoaXMgaXMgc2V0IGJ5IHRoZQotICAgIC8vc2VydmxldCBmaWx0ZXIuIFRoaXMgaXMgbm90IGEgcmVjb21tZW5kZWQgd2F5IHRvIGdldCBob2xkIG9mIEh0dHBTZXJ2bGV0UmVxdWVzdCAKKyAgICAvL3NlcnZsZXQgZmlsdGVyLiBUaGlzIGlzIG5vdCBhIHJlY29tbWVuZGVkIHdheSB0byBnZXQgaG9sZCBvZiBIdHRwU2VydmxldFJlcXVlc3QKICAgICAvL2luIGEgQ0RJIGJlYW4gYnV0IGEgd29ya2Fyb3VuZCB0aGF0IGlzIGRlc2NyaWJlZCBpbgogICAgIC8vaHR0cDovL3d3dy5zZWFtZnJhbWV3b3JrLm9yZy9Db21tdW5pdHkvSG93VG9SZWFjaEh0dHBTZXJ2bGV0UmVxdWVzdEFuZEh0dHBTZXJ2bGV0UmVzcG9uc2VGcm9tQmVhbgogICAgIC8vVGhlIHJpZ2h0IGFwcHJvYWNoIGlzIHRvIHVzZSBKU0YncyBGYWNlc0NvbnRleHQgYXMgZGVzY3JpYmVkIGluCiAgICAgLy9odHRwczovL2RvY3MuamJvc3Mub3JnL3dlbGQvcmVmZXJlbmNlL3NuYXBzaG90L2VuLVVTL2h0bWwvaW5qZWN0aW9uLmh0bWwjZDBlMTYzNQogICAgIHB1YmxpYyBzdGF0aWMgVGhyZWFkTG9jYWw8U2VydmxldFJlcXVlc3Q+IHNyID0gbmV3IFRocmVhZExvY2FsPFNlcnZsZXRSZXF1ZXN0PigpOwotICAgIAorCiAgICAgQFByb2R1Y2VzCiAgICAgQEh0dHBQYXJhbSgiIikKICAgICBTdHJpbmcgZ2V0UGFyYW1WYWx1ZShJbmplY3Rpb25Qb2ludCBpcCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2J1aWxkLnhtbAppbmRleCAwY2I3YWIxLi5kZGY4NzdhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2J1aWxkLnhtbApAQCAtOTEsMTUgKzkxLDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4gVXNhZ2U6Ci0JCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgaW50ZXJjZXB0b3JzIHRlc3RzKQotCQlhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIGludGVyY2VwdG9ycyB0ZXN0cykKLQkJYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBpbnRlcmNlcHRvcnMgdGVzdHMpCi0JCWFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBpbnRlcmNlcHRvcnMgdGVzdHMpCi0JCWFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBpbnRlcmNlcHRvcnMgYXBwcykKLQkJYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBpbnRlcmNlcHRvcnMgdGVzdHMpCi0JCWFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgIGludGVyY2VwdG9ycyBhcHBzKQotCQlhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIGludGVyY2VwdG9ycyB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+IFVzYWdlOgorICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGludGVyY2VwdG9ycyB0ZXN0cykKKyAgICAgICAgYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBpbnRlcmNlcHRvcnMgdGVzdHMpCisgICAgICAgIGFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgaW50ZXJjZXB0b3JzIHRlc3RzKQorICAgICAgICBhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgaW50ZXJjZXB0b3JzIHRlc3RzKQorICAgICAgICBhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgaW50ZXJjZXB0b3JzIGFwcHMpCisgICAgICAgIGFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgaW50ZXJjZXB0b3JzIHRlc3RzKQorICAgICAgICBhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBpbnRlcmNlcHRvcnMgYXBwcykKKyAgICAgICAgYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBpbnRlcmNlcHRvcnMgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmVhbi12YWxpZGF0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iZWFuLXZhbGlkYXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCA5MGE0ZTUxLi4xNTZjZDkwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iZWFuLXZhbGlkYXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iZWFuLXZhbGlkYXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1iZWFuLXZhbGlkYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJlYW4tdmFsaWRhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iZWFuLXZhbGlkYXRpb24vYnVpbGQueG1sCmluZGV4IDRjN2UzMDAuLjgyZmYwN2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJlYW4tdmFsaWRhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmVhbi12YWxpZGF0aW9uL2J1aWxkLnhtbApAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTUxLDIzICs1MSwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBmb3JrPSJ0cnVlIiBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgogICAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1hZ2VudGxpYjpqZHdwPXRyYW5zcG9ydD1kdF9zb2NrZXQsc2VydmVyPXksc3VzcGVuZD0ke3N1c3BlbmR9LGFkZHJlc3M9JHtqcGRhLnBvcnR9Ii8+CkBAIC04MCwxMCArODAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iZWFuLXZhbGlkYXRpb24vY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJlYW4tdmFsaWRhdGlvbi9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IDA2ODRjZmQuLjEwNjBlZjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJlYW4tdmFsaWRhdGlvbi9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJlYW4tdmFsaWRhdGlvbi9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGludGVyY2VwdG9ycyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU4LDcgKzU4LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290ICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSAobmV3IFVSTCh1cmwpKS5vcGVuQ29ubmVjdGlvbigpOwpAQCAtOTQsMTAgKzk0LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iZWFuLXZhbGlkYXRpb24vc2VydmxldC90ZXN0L2JlYW5zL0NESVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJlYW4tdmFsaWRhdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvQ0RJVGVzdC5qYXZhCmluZGV4IGVhNTJmNmMuLmJhODljZTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJlYW4tdmFsaWRhdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvQ0RJVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJlYW4tdmFsaWRhdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvQ0RJVGVzdC5qYXZhCkBAIC0zMSw1ICszMSw1IEBACiBASW50ZXJjZXB0b3JCaW5kaW5nCiBwdWJsaWMgQGludGVyZmFjZSBDRElUZXN0IHsKIAotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtaW5oZXJpdGFuY2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDg0MzJkNzcuLjQ0YzRlNTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWludGVyY2VwdG9yLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLWluaGVyaXRhbmNlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9idWlsZC54bWwKaW5kZXggMGI5YjNhMy4uMGExZjJmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLWluaGVyaXRhbmNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtaW5oZXJpdGFuY2UvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDgsMjMgKzQ4LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtaW5oZXJpdGFuY2UvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IDNjNDVmM2MuLjMyNmFiYmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdAogICAgICAgICA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9CiAgICAgICAgICJpbnRlcmNlcHRvcnMtaW50ZXJjZXB0b3ItYmluZGluZy10eXBlLWluaGVyaXRhbmNlIjsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRSA9ICJIZWxsbyBmcm9tIFNlcnZsZXQgMy4wLiI7CkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGludGVyY2VwdG9ycyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTYwLDcgKzYwLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk5LDEwICs5OSwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLWluaGVyaXRhbmNlL3NlcnZsZXQvdGVzdC9iZWFucy9TZWN1cmVJbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLWluaGVyaXRhbmNlL3NlcnZsZXQvdGVzdC9iZWFucy9TZWN1cmVJbnRlcmNlcHRvci5qYXZhCmluZGV4IDE4YzFiNDkuLjdjNGMyNDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvU2VjdXJlSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtaW5oZXJpdGFuY2Uvc2VydmxldC90ZXN0L2JlYW5zL1NlY3VyZUludGVyY2VwdG9yLmphdmEKQEAgLTI2LDEzICsyNiwxMyBAQAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKICAgICBwdWJsaWMgc3RhdGljIGludCBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgPSAwOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGVycm9yTWVzc2FnZSA9ICIiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3RSZXF1ZXN0U2NvcGVkQmVhbiB0YjsKLSAgICAKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IG1hbmFnZVRyYW5zYWN0aW9uKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VjdXJlSW50ZXJjZXB0b3I6OkFyb3VuZEludm9rZSIpOwogICAgICAgICBpZiAodGIgPT0gbnVsbCkgZXJyb3JNZXNzYWdlPSJEZXBlbmRlbmN5IEluamVjdGlvbiAiICsKICAgICAgICAgICAgICAgICAiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtaW5oZXJpdGFuY2Uvc2VydmxldC90ZXN0L2JlYW5zL1Nob3BwaW5nQ2FydC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLWluaGVyaXRhbmNlL3NlcnZsZXQvdGVzdC9iZWFucy9TaG9wcGluZ0NhcnQuamF2YQppbmRleCA3OTNjNDA4Li4xZDZmMzM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtaW5oZXJpdGFuY2Uvc2VydmxldC90ZXN0L2JlYW5zL1Nob3BwaW5nQ2FydC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvU2hvcHBpbmdDYXJ0LmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgdGVzdC5iZWFuczsKIAogcHVibGljIGNsYXNzIFNob3BwaW5nQ2FydCB7Ci0gICAgCisKICAgICBAQWN0aW9uIHB1YmxpYyB2b2lkIGNoZWNrb3V0KCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2hvcHBpbmdDYXJ0OjpjaGVja291dCIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLWluaGVyaXRhbmNlL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKaW5kZXggMTI3YmExYi4uNjcxNmUxMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLWluaGVyaXRhbmNlL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLWluaGVyaXRhbmNlL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKQEAgLTI2LDEzICsyNiwxMyBAQAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKICAgICBwdWJsaWMgc3RhdGljIGludCBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgPSAwOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGVycm9yTWVzc2FnZSA9ICIiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3RSZXF1ZXN0U2NvcGVkQmVhbiB0YjsKLSAgICAKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IG1hbmFnZVRyYW5zYWN0aW9uKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVHJhbnNhY3Rpb25JbnRlcmNlcHRvcjo6QXJvdW5kSW52b2tlIik7CiAgICAgICAgIGlmICh0YiA9PSBudWxsKSBlcnJvck1lc3NhZ2U9IkRlcGVuZGVuY3kgSW5qZWN0aW9uICIgKwogICAgICAgICAgICAgICAgICJpbnRvIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgZmFpbGVkIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLWluaGVyaXRhbmNlL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKaW5kZXggZGNiNTkzMS4uMDRmZDM1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLWluaGVyaXRhbmNlL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLWluaGVyaXRhbmNlL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKQEAgLTMwLDUgKzMwLDUgQEAKIEBJbnRlcmNlcHRvckJpbmRpbmcKIHB1YmxpYyBAaW50ZXJmYWNlIFRyYW5zYWN0aW9uYWwgewogCi0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbFNlY3VyZUludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtaW5oZXJpdGFuY2Uvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWxTZWN1cmVJbnRlcmNlcHRvci5qYXZhCmluZGV4IDQwN2IwNzkuLjAwNTkzMTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbFNlY3VyZUludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLWluaGVyaXRhbmNlL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsU2VjdXJlSW50ZXJjZXB0b3IuamF2YQpAQCAtMjYsMTMgKzI2LDEzIEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZXJyb3JNZXNzYWdlID0gIiI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdFJlcXVlc3RTY29wZWRCZWFuIHRiOwotICAgIAorCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgbWFuYWdlVHJhbnNhY3Rpb24oSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUcmFuc2FjdGlvbmFsU2VjdXJlSW50ZXJjZXB0b3I6OkFyb3VuZEludm9rZSIpOwogICAgICAgICBpZiAodGIgPT0gbnVsbCkgZXJyb3JNZXNzYWdlPSJEZXBlbmRlbmN5IEluamVjdGlvbiAiICsKICAgICAgICAgICAgICAgICAiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtd2l0aC1tZW1iZXJzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtd2l0aC1tZW1iZXJzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjY5ZWRjMC4uMmM5NTI3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLXdpdGgtbWVtYmVycy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS13aXRoLW1lbWJlcnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1iaW5kaW5nLXR5cGVzLXdpdGgtbWVtYmVycyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLXdpdGgtbWVtYmVycy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtd2l0aC1tZW1iZXJzL2J1aWxkLnhtbAppbmRleCAwYjliM2EzLi4wYTFmMmY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtd2l0aC1tZW1iZXJzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtd2l0aC1tZW1iZXJzL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDIzICs0OCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLXdpdGgtbWVtYmVycy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLXdpdGgtbWVtYmVycy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IGVkMGJlYzAuLjYwZDc5ZjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS13aXRoLW1lbWJlcnMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtd2l0aC1tZW1iZXJzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgaW50ZXJjZXB0b3JzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDksNyArNDksNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTksNyArNTksNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtOTgsMTAgKzk4LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtd2l0aC1tZW1iZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9SZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS13aXRoLW1lbWJlcnMvc2VydmxldC90ZXN0L2JlYW5zL1JlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCmluZGV4IGU2MjZhMzcuLmMwMzA2MDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS13aXRoLW1lbWJlcnMvc2VydmxldC90ZXN0L2JlYW5zL1JlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS13aXRoLW1lbWJlcnMvc2VydmxldC90ZXN0L2JlYW5zL1JlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCkBAIC0yOCwxMCArMjgsMTAgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0RGVwZW5kZW50QmVhbiB0YjsKLSAgICAKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IG1hbmFnZVRyYW5zYWN0aW9uKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yOjpBcm91bmRJbnZva2UiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS13aXRoLW1lbWJlcnMvc2VydmxldC90ZXN0L2JlYW5zL1Nob3BwaW5nQ2FydC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLXdpdGgtbWVtYmVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvU2hvcHBpbmdDYXJ0LmphdmEKaW5kZXggNjBhOGE0MC4uZjhjOWE4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLXdpdGgtbWVtYmVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvU2hvcHBpbmdDYXJ0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLXdpdGgtbWVtYmVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvU2hvcHBpbmdDYXJ0LmphdmEKQEAgLTIwLDEwICsyMCwxMCBAQAogQFRyYW5zYWN0aW9uYWwocmVxdWlyZXNOZXc9dHJ1ZSkKIEBQcmVmZXJyZWQKIHB1YmxpYyBjbGFzcyBTaG9wcGluZ0NhcnQgIHsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFkZEl0ZW0oU3RyaW5nIHMpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTaG9wcGluZ0NhcnQ6OmFkZEl0ZW0gY2FsbGVkIik7Ci0gICAgICAgIAorCiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtd2l0aC1tZW1iZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtd2l0aC1tZW1iZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKaW5kZXggYWZkYzE1Ni4uZTFkMGQ1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLXdpdGgtbWVtYmVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS13aXRoLW1lbWJlcnMvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQpAQCAtMjcsMTUgKzI3LDE1IEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZXJyb3JNZXNzYWdlID0gIiI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdERlcGVuZGVudEJlYW4gdGI7Ci0gICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBtYW5hZ2VUcmFuc2FjdGlvbihJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRyYW5zYWN0aW9uSW50ZXJjZXB0b3I6OkFyb3VuZEludm9rZSIpOwogICAgICAgICBpZiAodGIgPT0gbnVsbCkgZXJyb3JNZXNzYWdlPSJEZXBlbmRlbmN5IEluamVjdGlvbiAiICsKLSAgICAgICAgCQkiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CisgICAgICAgICAgICAgICAgImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOwogICAgICAgICBhcm91bmRJbnZva2VDYWxsZWQgPSB0cnVlOwogICAgICAgICBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgKys7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLXdpdGgtbWVtYmVycy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9CdXNpbmVzc01ldGhvZEludGVyY2VwdG9yVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS13aXRoLW1lbWJlcnMvc2VydmxldC90ZXN0L3NlcnZsZXQvQnVzaW5lc3NNZXRob2RJbnRlcmNlcHRvclRlc3RTZXJ2bGV0LmphdmEKaW5kZXggMDg4ZDZjZS4uM2I4OThkNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLXdpdGgtbWVtYmVycy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9CdXNpbmVzc01ldGhvZEludGVyY2VwdG9yVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtd2l0aC1tZW1iZXJzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0J1c2luZXNzTWV0aG9kSW50ZXJjZXB0b3JUZXN0U2VydmxldC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgQEluamVjdAogICAgIEBQcmVmZXJyZWQKICAgICBUZXN0QmVhbiB0YjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgU2hvcHBpbmdDYXJ0IHNjOwpAQCAtNjMsMzAgKzYzLDMwIEBACiAgICAgICAgICAgICAgICAgICAgICsgVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQ7CiAgICAgICAgIGlmICghVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2UudHJpbSgpLmVxdWFscygiIikpCiAgICAgICAgICAgICBtc2cgKz0gVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2U7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlQ2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJSZXF1aXJlc05ldyBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGNhbGxlZCB3aGVuICIgKwotICAgICAgICAgICAgCQkiaXQgc2hvdWxkbid0IGhhdmUgYmVlbiBjYWxsZWQiOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgIml0IHNob3VsZG4ndCBoYXZlIGJlZW4gY2FsbGVkIjsKKwogICAgICAgICBUcmFuc2FjdGlvbkludGVyY2VwdG9yLmNsZWFyKCk7CiAgICAgICAgIC8vaW52b2tlIHNob3BwaW5nIGNhcnQgYmVhbi4gVGhpcyBzaG91bGQgcmVzdWx0IGluIGFuIGludm9jYXRpb24gb24KICAgICAgICAgLy90aGUgUmVxdWlyZXNOZXdUcmFuc2FjdGlvbmFsCiAgICAgICAgIHNjLmFkZEl0ZW0oIlRlc3QgSXRlbSIpOwogICAgICAgICBpZiAoIVJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIkJ1c2luZXNzIG1ldGhvZCBpbnRlcmNlcHRvciBhcm91bmRJbnZva2UgaW4gcmVxdWlyZXMgbmV3ICIgKwotICAgICAgICAgICAgCQkidHJhbnNhY3Rpb24gaW50ZXJjZXB0b3Igbm90IGNhbGxlZCI7CisgICAgICAgICAgICAgICAgICAgICJ0cmFuc2FjdGlvbiBpbnRlcmNlcHRvciBub3QgY2FsbGVkIjsKICAgICAgICAgaWYgKFJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgIT0gMSkKICAgICAgICAgICAgIG1zZyArPSAiQnVzaW5lc3MgbWV0aG9kIHJlcXVpcmVzIG5ldyBpbnRlcmNlcHRvciBpbnZvY2F0aW9uIG9uICIgKwotICAgICAgICAgICAgCQkibWV0aG9kLWxldmVsIGludGVyY2VwdG9yIGFubm90YXRpb24gY291bnQgbm90IGV4cGVjdGVkLiAiCisgICAgICAgICAgICAgICAgICAgICJtZXRob2QtbGV2ZWwgaW50ZXJjZXB0b3IgYW5ub3RhdGlvbiBjb3VudCBub3QgZXhwZWN0ZWQuICIKICAgICAgICAgICAgICAgICAgICAgKyAiZXhwZWN0ZWQgPTEsIGFjdHVhbD0iCiAgICAgICAgICAgICAgICAgICAgICsgUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudDsKICAgICAgICAgaWYgKCFSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlLnRyaW0oKS5lcXVhbHMoIiIpKQogICAgICAgICAgICAgbXNnICs9IFJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2U7Ci0gICAgICAgIAorCiAgICAgICAgIC8vVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBzaG91bGQgbm90IGhhdmUgYmVlbiBjYWxsZWQKICAgICAgICAgaWYgKFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlQ2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJUcmFuc2NhdGlvbkludGVyY2VwdG9yIGFyb3VuZEludm9rZSBjYWxsZWQgd2hlbiBhIHJlcXVpcmVzbmV3IiArCi0gICAgICAgICAgICAJCSJ0cmFuc2FjdGlvbiBpbnRlcmNlcHRvciBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCI7CisgICAgICAgICAgICAgICAgICAgICJ0cmFuc2FjdGlvbiBpbnRlcmNlcHRvciBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCI7CiAKICAgICAgICAgd3JpdGVyLndyaXRlKG1zZyArICJcbiIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJ1c2luZXNzLW1ldGhvZC1pbnRlcmNlcHRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJ1c2luZXNzLW1ldGhvZC1pbnRlcmNlcHRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCA3ZmVlODJlLi44ZTVkMTUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1idXNpbmVzcy1tZXRob2QtaW50ZXJjZXB0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYnVzaW5lc3MtbWV0aG9kLWludGVyY2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWJ1c2luZXNzLW1ldGhvZC1pbnRlcmNlcHRvcnMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJ1c2luZXNzLW1ldGhvZC1pbnRlcmNlcHRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYnVzaW5lc3MtbWV0aG9kLWludGVyY2VwdGlvbi9idWlsZC54bWwKaW5kZXggMGI5YjNhMy4uMGExZjJmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYnVzaW5lc3MtbWV0aG9kLWludGVyY2VwdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYnVzaW5lc3MtbWV0aG9kLWludGVyY2VwdGlvbi9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwyMyArNDgsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJ1c2luZXNzLW1ldGhvZC1pbnRlcmNlcHRpb24vY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJ1c2luZXNzLW1ldGhvZC1pbnRlcmNlcHRpb24vY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCBlZDBiZWMwLi42MGQ3OWY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1idXNpbmVzcy1tZXRob2QtaW50ZXJjZXB0aW9uL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYnVzaW5lc3MtbWV0aG9kLWludGVyY2VwdGlvbi9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGludGVyY2VwdG9ycyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU5LDcgKzU5LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk4LDEwICs5OCwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYnVzaW5lc3MtbWV0aG9kLWludGVyY2VwdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYnVzaW5lc3MtbWV0aG9kLWludGVyY2VwdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCmluZGV4IGFmZGMxNTYuLmUxZDBkNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJ1c2luZXNzLW1ldGhvZC1pbnRlcmNlcHRpb24vc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1idXNpbmVzcy1tZXRob2QtaW50ZXJjZXB0aW9uL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKQEAgLTI3LDE1ICsyNywxNSBAQAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKICAgICBwdWJsaWMgc3RhdGljIGludCBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgPSAwOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGVycm9yTWVzc2FnZSA9ICIiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3REZXBlbmRlbnRCZWFuIHRiOwotICAgIAorCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgbWFuYWdlVHJhbnNhY3Rpb24oSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUcmFuc2FjdGlvbkludGVyY2VwdG9yOjpBcm91bmRJbnZva2UiKTsKICAgICAgICAgaWYgKHRiID09IG51bGwpIGVycm9yTWVzc2FnZT0iRGVwZW5kZW5jeSBJbmplY3Rpb24gIiArCi0gICAgICAgIAkJImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOworICAgICAgICAgICAgICAgICJpbnRvIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgZmFpbGVkIjsKICAgICAgICAgYXJvdW5kSW52b2tlQ2FsbGVkID0gdHJ1ZTsKICAgICAgICAgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ICsrOwogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJ1c2luZXNzLW1ldGhvZC1pbnRlcmNlcHRpb24vc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJ1c2luZXNzLW1ldGhvZC1pbnRlcmNlcHRpb24vc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YQppbmRleCA5OGY4NWQ0Li44YmQ5OGNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1idXNpbmVzcy1tZXRob2QtaW50ZXJjZXB0aW9uL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYnVzaW5lc3MtbWV0aG9kLWludGVyY2VwdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCkBAIC0zMSw1ICszMSw1IEBACiBASW50ZXJjZXB0b3JCaW5kaW5nCiBwdWJsaWMgQGludGVyZmFjZSBUcmFuc2FjdGlvbmFsIHsKIAotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbnZhbGlkLWludGVyY2VwdG9yLXNwZWNpZmllZC1hdC1iZWFucy14bWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWludmFsaWQtaW50ZXJjZXB0b3Itc3BlY2lmaWVkLWF0LWJlYW5zLXhtbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGJhZWI2M2IuLjk2MTFmMGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWludmFsaWQtaW50ZXJjZXB0b3Itc3BlY2lmaWVkLWF0LWJlYW5zLXhtbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWludmFsaWQtaW50ZXJjZXB0b3Itc3BlY2lmaWVkLWF0LWJlYW5zLXhtbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWludmFsaWQtaW50ZXJjZXB0b3ItaW4tYmVhbnMteG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbnZhbGlkLWludGVyY2VwdG9yLXNwZWNpZmllZC1hdC1iZWFucy14bWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW52YWxpZC1pbnRlcmNlcHRvci1zcGVjaWZpZWQtYXQtYmVhbnMteG1sL2J1aWxkLnhtbAppbmRleCAwYjliM2EzLi4wYTFmMmY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbnZhbGlkLWludGVyY2VwdG9yLXNwZWNpZmllZC1hdC1iZWFucy14bWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWludmFsaWQtaW50ZXJjZXB0b3Itc3BlY2lmaWVkLWF0LWJlYW5zLXhtbC9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwyMyArNDgsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWludmFsaWQtaW50ZXJjZXB0b3Itc3BlY2lmaWVkLWF0LWJlYW5zLXhtbC9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW52YWxpZC1pbnRlcmNlcHRvci1zcGVjaWZpZWQtYXQtYmVhbnMteG1sL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKaW5kZXggYWZkYzE1Ni4uZTFkMGQ1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW52YWxpZC1pbnRlcmNlcHRvci1zcGVjaWZpZWQtYXQtYmVhbnMteG1sL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW52YWxpZC1pbnRlcmNlcHRvci1zcGVjaWZpZWQtYXQtYmVhbnMteG1sL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKQEAgLTI3LDE1ICsyNywxNSBAQAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKICAgICBwdWJsaWMgc3RhdGljIGludCBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgPSAwOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGVycm9yTWVzc2FnZSA9ICIiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3REZXBlbmRlbnRCZWFuIHRiOwotICAgIAorCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgbWFuYWdlVHJhbnNhY3Rpb24oSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUcmFuc2FjdGlvbkludGVyY2VwdG9yOjpBcm91bmRJbnZva2UiKTsKICAgICAgICAgaWYgKHRiID09IG51bGwpIGVycm9yTWVzc2FnZT0iRGVwZW5kZW5jeSBJbmplY3Rpb24gIiArCi0gICAgICAgIAkJImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOworICAgICAgICAgICAgICAgICJpbnRvIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgZmFpbGVkIjsKICAgICAgICAgYXJvdW5kSW52b2tlQ2FsbGVkID0gdHJ1ZTsKICAgICAgICAgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ICsrOwogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWludmFsaWQtaW50ZXJjZXB0b3Itc3BlY2lmaWVkLWF0LWJlYW5zLXhtbC9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW52YWxpZC1pbnRlcmNlcHRvci1zcGVjaWZpZWQtYXQtYmVhbnMteG1sL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKaW5kZXggZGNiNTkzMS4uMDRmZDM1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW52YWxpZC1pbnRlcmNlcHRvci1zcGVjaWZpZWQtYXQtYmVhbnMteG1sL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW52YWxpZC1pbnRlcmNlcHRvci1zcGVjaWZpZWQtYXQtYmVhbnMteG1sL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKQEAgLTMwLDUgKzMwLDUgQEAKIEBJbnRlcmNlcHRvckJpbmRpbmcKIHB1YmxpYyBAaW50ZXJmYWNlIFRyYW5zYWN0aW9uYWwgewogCi0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMvYnVpbGQucHJvcGVydGllcwppbmRleCBhNWIwOGE0Li4xM2U1YWQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvci1iaW5kaW5nLWFubm90YXRpb25zL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3ItYmluZGluZy1hbm5vdGF0aW9ucy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3ItYmluZGluZy1hbm5vdGF0aW9ucy9idWlsZC54bWwKaW5kZXggMGI5YjNhMy4uMGExZjJmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3ItYmluZGluZy1hbm5vdGF0aW9ucy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3ItYmluZGluZy1hbm5vdGF0aW9ucy9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwyMyArNDgsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCA3N2FiZTk2Li43YzcxN2ZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvci1iaW5kaW5nLWFubm90YXRpb25zL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3ItYmluZGluZy1hbm5vdGF0aW9ucy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdAogICAgICAgICA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9CiAgICAgICAgICJpbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3ItYmluZGluZy1hbm5vdGF0aW9ucyI7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSAiSGVsbG8gZnJvbSBTZXJ2bGV0IDMuMC4iOwpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBpbnRlcmNlcHRvcnMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC02MCw3ICs2MCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC05OSwxMCArOTksMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMvc2VydmxldC90ZXN0L2JlYW5zL1Nob3BwaW5nQ2FydC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3ItYmluZGluZy1hbm5vdGF0aW9ucy9zZXJ2bGV0L3Rlc3QvYmVhbnMvU2hvcHBpbmdDYXJ0LmphdmEKaW5kZXggYjk5Y2U2Yy4uMjBiNzk2ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3ItYmluZGluZy1hbm5vdGF0aW9ucy9zZXJ2bGV0L3Rlc3QvYmVhbnMvU2hvcHBpbmdDYXJ0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3ItYmluZGluZy1hbm5vdGF0aW9ucy9zZXJ2bGV0L3Rlc3QvYmVhbnMvU2hvcHBpbmdDYXJ0LmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgdGVzdC5iZWFuczsKIAogcHVibGljIGNsYXNzIFNob3BwaW5nQ2FydCB7Ci0gICAgCisKICAgICBAVHJhbnNhY3Rpb25hbCBAU2VjdXJlIHB1YmxpYyB2b2lkIGNoZWNrb3V0KCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2hvcHBpbmdDYXJ0OjpjaGVja291dCIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YQppbmRleCBkY2I1OTMxLi4wNGZkMzUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvci1iaW5kaW5nLWFubm90YXRpb25zL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3ItYmluZGluZy1hbm5vdGF0aW9ucy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCkBAIC0zMCw1ICszMCw1IEBACiBASW50ZXJjZXB0b3JCaW5kaW5nCiBwdWJsaWMgQGludGVyZmFjZSBUcmFuc2FjdGlvbmFsIHsKIAotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvci1iaW5kaW5nLWFubm90YXRpb25zL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsU2VjdXJlSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWxTZWN1cmVJbnRlcmNlcHRvci5qYXZhCmluZGV4IGQ1MmViNTguLjRmZjdmY2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWxTZWN1cmVJbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWxTZWN1cmVJbnRlcmNlcHRvci5qYXZhCkBAIC0yNiwxMyArMjYsMTMgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0UmVxdWVzdFNjb3BlZEJlYW4gdGI7Ci0gICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBtYW5hZ2VUcmFuc2FjdGlvbihJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRyYW5zYWN0aW9uSW50ZXJjZXB0b3I6OkFyb3VuZEludm9rZSIpOwogICAgICAgICBpZiAodGIgPT0gbnVsbCkgZXJyb3JNZXNzYWdlPSJEZXBlbmRlbmN5IEluamVjdGlvbiAiICsKICAgICAgICAgICAgICAgICAiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvci1iaW5kaW5nLWFubm90YXRpb25zL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L011bHRpcGxlSW50ZXJjZXB0b3JCaW5kaW5nQW5ub3RhdGlvbnNUZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3ItYmluZGluZy1hbm5vdGF0aW9ucy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9NdWx0aXBsZUludGVyY2VwdG9yQmluZGluZ0Fubm90YXRpb25zVGVzdFNlcnZsZXQuamF2YQppbmRleCBmOGMwYThkLi5lNTYwZTg3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvci1iaW5kaW5nLWFubm90YXRpb25zL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L011bHRpcGxlSW50ZXJjZXB0b3JCaW5kaW5nQW5ub3RhdGlvbnNUZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMvc2VydmxldC90ZXN0L3NlcnZsZXQvTXVsdGlwbGVJbnRlcmNlcHRvckJpbmRpbmdBbm5vdGF0aW9uc1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTM5LDEwICszOSwxMCBAQAogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgVGVzdEJlYW4gdGI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgU2hvcHBpbmdDYXJ0IHNjOwotICAgIAorCiAgICAgQEluamVjdAogICAgIEBQcmVmZXJyZWQKICAgICBTZWNvbmRTaG9wcGluZ0NhcnQgc2MyOwpAQCAtNTAsNyArNTAsNyBAQAogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgVGhpcmRTaG9wcGluZ0NhcnQgc2MzOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgdGIubTEoKTsKICAgICAgICAgaWYgKFRyYW5zYWN0aW9uYWxTZWN1cmVJbnRlcmNlcHRvci5hcm91bmRJbnZva2VDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIkJ1c2luZXNzIG1ldGhvZCBpbnRlcmNlcHRvciBhcm91bmRJbnZva2Ugb24gIiArCi0gICAgICAgICAgICAJCSJUcmFuc2FjdGlvblNlY3VyZUludGVyY2VwdG9yIGNhbGxlZCB3aGVuIGl0IHNob3VsZG4ndCBoYXZlIjsKKyAgICAgICAgICAgICAgICAgICAgIlRyYW5zYWN0aW9uU2VjdXJlSW50ZXJjZXB0b3IgY2FsbGVkIHdoZW4gaXQgc2hvdWxkbid0IGhhdmUiOwogICAgICAgICB0Yi5tMigpOwogICAgICAgICBpZiAoVHJhbnNhY3Rpb25hbFNlY3VyZUludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCAhPSAwKQogICAgICAgICAgICAgbXNnICs9ICJCdXNpbmVzcyBtZXRob2QgaW50ZXJjZXB0b3IgaW52b2NhdGlvbiBvbiBtZXRob2QtbGV2ZWwgIgpAQCAtNzMsOCArNzMsOCBAQAogICAgICAgICAgICAgICAgICAgICArIFRyYW5zYWN0aW9uYWxTZWN1cmVJbnRlcmNlcHRvci5hcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQ7CiAgICAgICAgIGlmICghVHJhbnNhY3Rpb25hbFNlY3VyZUludGVyY2VwdG9yLmVycm9yTWVzc2FnZS50cmltKCkuZXF1YWxzKCIiKSkKICAgICAgICAgICAgIG1zZyArPSBUcmFuc2FjdGlvbmFsU2VjdXJlSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlOwotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICAvL05vdyB1c2UgdGhlIHR3byBzaG9wcGluZyBjYXJ0IHRvIHRlc3QgVHJhbnNhY3Rpb25hbFNlY3VyZUludGVyY2VwdG9yCiAgICAgICAgIHNjLmNoZWNrb3V0KCk7CiAgICAgICAgIGlmICghVHJhbnNhY3Rpb25hbFNlY3VyZUludGVyY2VwdG9yLmFyb3VuZEludm9rZUNhbGxlZCkKQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgKyBUcmFuc2FjdGlvbmFsU2VjdXJlSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50OwogICAgICAgICBpZiAoIVRyYW5zYWN0aW9uYWxTZWN1cmVJbnRlcmNlcHRvci5lcnJvck1lc3NhZ2UudHJpbSgpLmVxdWFscygiIikpCiAgICAgICAgICAgICBtc2cgKz0gVHJhbnNhY3Rpb25hbFNlY3VyZUludGVyY2VwdG9yLmVycm9yTWVzc2FnZTsKLSAgICAgICAgCisKICAgICAgICAgc2MyLmNoZWNrb3V0KCk7CiAgICAgICAgIGlmIChUcmFuc2FjdGlvbmFsU2VjdXJlSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ICE9IDIpCiAgICAgICAgICAgICBtc2cgKz0gIkJ1c2luZXNzIG1ldGhvZCBpbnRlcmNlcHRvciBpbnZvY2F0aW9uIG9uIG1ldGhvZC1sZXZlbCAiCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvcnMtZm9yLWEtYmluZGluZy10eXBlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvcnMtZm9yLWEtYmluZGluZy10eXBlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjQ3YzUzZi4uZmMzNDVkZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3JzLWZvci1hLWJpbmRpbmctdHlwZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9ycy1mb3ItYS1iaW5kaW5nLXR5cGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1tdWx0aXBsZS1pbnRlcmNlcHRvci1pbXBsZW1lbnRhdGlvbnMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9ycy1mb3ItYS1iaW5kaW5nLXR5cGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3JzLWZvci1hLWJpbmRpbmctdHlwZS9idWlsZC54bWwKaW5kZXggMGI5YjNhMy4uMGExZjJmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3JzLWZvci1hLWJpbmRpbmctdHlwZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3JzLWZvci1hLWJpbmRpbmctdHlwZS9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwyMyArNDgsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9ycy1mb3ItYS1iaW5kaW5nLXR5cGUvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9ycy1mb3ItYS1iaW5kaW5nLXR5cGUvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCA5OGJmOGM2Li5lNGRjYTI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvcnMtZm9yLWEtYmluZGluZy10eXBlL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3JzLWZvci1hLWJpbmRpbmctdHlwZS9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdAogICAgICAgICA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9CiAgICAgICAgICJpbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3JzLWZvci1hLWJpbmRpbmctdHlwZSI7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSAiSGVsbG8gZnJvbSBTZXJ2bGV0IDMuMC4iOwpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBpbnRlcmNlcHRvcnMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC02MCw3ICs2MCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC05OSwxMCArOTksMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9ycy1mb3ItYS1iaW5kaW5nLXR5cGUvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9ycy1mb3ItYS1iaW5kaW5nLXR5cGUvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQppbmRleCAwYWUzMTBmLi4zM2NlZGY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvcnMtZm9yLWEtYmluZGluZy10eXBlL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3JzLWZvci1hLWJpbmRpbmctdHlwZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCkBAIC0yNywxNiArMjcsMTYgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0UmVxdWVzdFNjb3BlZEJlYW4gdGI7Ci0gICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBtYW5hZ2VUcmFuc2FjdGlvbihJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRyYW5zYWN0aW9uSW50ZXJjZXB0b3I6OkFyb3VuZEludm9rZSIpOwogICAgICAgICBpZiAodGIgPT0gbnVsbCkgZXJyb3JNZXNzYWdlPSJEZXBlbmRlbmN5IEluamVjdGlvbiAiICsKLSAgICAgICAgCQkiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CisgICAgICAgICAgICAgICAgImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOwogICAgICAgICBhcm91bmRJbnZva2VDYWxsZWQgPSB0cnVlOwogICAgICAgICBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgKys7CiAgICAgICAgIHRiLmludGVyY2VwdG9ySW52b2NhdGlvbk9yZGVyLmFkZCh0aGlzLmdldENsYXNzKCkuZ2V0Q2Fub25pY2FsTmFtZSgpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9ycy1mb3ItYS1iaW5kaW5nLXR5cGUvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9ycy1mb3ItYS1iaW5kaW5nLXR5cGUvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YQppbmRleCBkY2I1OTMxLi4wNGZkMzUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvcnMtZm9yLWEtYmluZGluZy10eXBlL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3JzLWZvci1hLWJpbmRpbmctdHlwZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCkBAIC0zMCw1ICszMCw1IEBACiBASW50ZXJjZXB0b3JCaW5kaW5nCiBwdWJsaWMgQGludGVyZmFjZSBUcmFuc2FjdGlvbmFsIHsKIAotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvcnMtZm9yLWEtYmluZGluZy10eXBlL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L011bHRpcGxlSW50ZXJjZXB0b3JJbXBsZW1lbnRhdGlvbnNUZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3JzLWZvci1hLWJpbmRpbmctdHlwZS9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9NdWx0aXBsZUludGVyY2VwdG9ySW1wbGVtZW50YXRpb25zVGVzdFNlcnZsZXQuamF2YQppbmRleCBkNWNmNmYzLi43Yjc0NjVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvcnMtZm9yLWEtYmluZGluZy10eXBlL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L011bHRpcGxlSW50ZXJjZXB0b3JJbXBsZW1lbnRhdGlvbnNUZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9ycy1mb3ItYS1iaW5kaW5nLXR5cGUvc2VydmxldC90ZXN0L3NlcnZsZXQvTXVsdGlwbGVJbnRlcmNlcHRvckltcGxlbWVudGF0aW9uc1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICBAUHJlZmVycmVkCiAgICAgVGVzdEJlYW4gdGI7CiAKLSAgICBASW5qZWN0IAorICAgIEBJbmplY3QKICAgICBUZXN0UmVxdWVzdFNjb3BlZEJlYW4gdHJzYjsKICAgICBwdWJsaWMgdm9pZCBzZXJ2aWNlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKQEAgLTYzLDMwICs2MywzMCBAQAogICAgICAgICBpZiAoIVRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlLnRyaW0oKS5lcXVhbHMoIiIpKQogICAgICAgICAgICAgbXNnICs9IFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlOwogCi0gICAgICAgIAorCiAgICAgICAgIGlmICghU2Vjb25kVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIkJ1c2luZXNzIG1ldGhvZCBpbnRlcmNlcHRvciBhcm91bmRJbnZva2UgaW4gdGhlIHNlY29uZCAiICsKLSAgICAgICAgICAgIAkJInRyYW5zYWN0aW9uIGludGVyY2VwdG9yIG5vdCBjYWxsZWQiOworICAgICAgICAgICAgICAgICAgICAidHJhbnNhY3Rpb24gaW50ZXJjZXB0b3Igbm90IGNhbGxlZCI7CiAgICAgICAgIHRiLm0yKCk7IC8vY2FsbGluZyBtMiBhZ2FpbgogICAgICAgICBpZiAoU2Vjb25kVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgIT0gMykKICAgICAgICAgICAgIG1zZyArPSAiQnVzaW5lc3MgbWV0aG9kIHNlY29uZCBpbnRlcmNlcHRvciBpbnZvY2F0aW9uIG9uIG1ldGhvZC1sZXZlbCAiCiAgICAgICAgICAgICAgICAgICAgICsgImludGVyY2VwdG9yIGFubm90YXRpb24gY291bnQgbm90IGV4cGVjdGVkLiAiCiAgICAgICAgICAgICAgICAgICAgICsgImV4cGVjdGVkID0zLCBhY3R1YWw9IgogICAgICAgICAgICAgICAgICAgICArIFNlY29uZFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50OwotICAgICAgICAKKwogICAgICAgICAvL3Rlc3Qgb3JkZXJpbmcgb2YgaW50ZXJjZXB0b3JzIGluIHRoZSBzeXN0ZW0KLSAgICAgICAgYm9vbGVhbiBleHBlY3RlZE9yZGVyaW5nID0gCisgICAgICAgIGJvb2xlYW4gZXhwZWN0ZWRPcmRlcmluZyA9CiAgICAgICAgICAgICAoKHRyc2IuaW50ZXJjZXB0b3JJbnZvY2F0aW9uT3JkZXIuZ2V0KDApLgogICAgICAgICAgICAgICAgICAgICBlcXVhbHMoU2Vjb25kVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5jbGFzcy5nZXRDYW5vbmljYWxOYW1lKCkpKQogICAgICAgICAgICAgICAgICYmICh0cnNiLmludGVyY2VwdG9ySW52b2NhdGlvbk9yZGVyLmdldCgxKS4KICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFscyhUcmFuc2FjdGlvbkludGVyY2VwdG9yLmNsYXNzLmdldENhbm9uaWNhbE5hbWUoKSkpKTsKLSAgICAgICAgaWYgKCFleHBlY3RlZE9yZGVyaW5nKSAKKyAgICAgICAgaWYgKCFleHBlY3RlZE9yZGVyaW5nKQogICAgICAgICAgICAgbXNnICs9ICJJbnRlcmNlcHRvciBpbnZvY2F0aW9uIG9yZGVyIGRvZXMgbm90IG1hdGNoIHdpdGggdGhlIGV4cGVjdGVkIG9yZGVyIjsKLSAgICAgICAgCi0gICAgICAgIC8vdGVzdCBkaXNhYmxpbmcgb2YgaW50ZXJjZXB0b3JzIHZpYSBiZWFucy54bWwgCi0gICAgICAgIGlmIChUaGlyZFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlQ2FsbGVkKSAKKworICAgICAgICAvL3Rlc3QgZGlzYWJsaW5nIG9mIGludGVyY2VwdG9ycyB2aWEgYmVhbnMueG1sCisgICAgICAgIGlmIChUaGlyZFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlQ2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJEaXNhYmxlZCBpbnRlcmNlcHRvciBjYWxsZWQiOwotICAgICAgICAKKwogICAgICAgICB3cml0ZXIud3JpdGUobXNnICsgIlxuIik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtYXQtaW50ZXJjZXB0b3JzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtYXQtaW50ZXJjZXB0b3JzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTY0NjE5MS4uYjEwMTFkZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWF0LWludGVyY2VwdG9ycy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1hdC1pbnRlcmNlcHRvcnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS11c2Utb2YtYXQtaW50ZXJjZXB0b3JzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtYXQtaW50ZXJjZXB0b3JzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1hdC1pbnRlcmNlcHRvcnMvYnVpbGQueG1sCmluZGV4IDBiOWIzYTMuLjBhMWYyZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1hdC1pbnRlcmNlcHRvcnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1hdC1pbnRlcmNlcHRvcnMvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDgsMjMgKzQ4LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtYXQtaW50ZXJjZXB0b3JzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtYXQtaW50ZXJjZXB0b3JzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKaW5kZXggY2Q4MTJiZC4uMDdiZGU5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWF0LWludGVyY2VwdG9ycy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1hdC1pbnRlcmNlcHRvcnMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQKICAgICAgICAgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9IAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPQogICAgICAgICAiaW50ZXJjZXB0b3JzLXVzZS1vZi0iOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0gIkhlbGxvIGZyb20gU2VydmxldCAzLjAuIjsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgaW50ZXJjZXB0b3JzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTUsNyArNTUsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNjUsNyArNjUsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtMTA0LDEwICsxMDQsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC90ZXN0L2JlYW5zL1NlY3VyZUludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvdGVzdC9iZWFucy9TZWN1cmVJbnRlcmNlcHRvci5qYXZhCmluZGV4IDE4YzFiNDkuLjdjNGMyNDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC90ZXN0L2JlYW5zL1NlY3VyZUludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvU2VjdXJlSW50ZXJjZXB0b3IuamF2YQpAQCAtMjYsMTMgKzI2LDEzIEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZXJyb3JNZXNzYWdlID0gIiI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdFJlcXVlc3RTY29wZWRCZWFuIHRiOwotICAgIAorCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgbWFuYWdlVHJhbnNhY3Rpb24oSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZWN1cmVJbnRlcmNlcHRvcjo6QXJvdW5kSW52b2tlIik7CiAgICAgICAgIGlmICh0YiA9PSBudWxsKSBlcnJvck1lc3NhZ2U9IkRlcGVuZGVuY3kgSW5qZWN0aW9uICIgKwogICAgICAgICAgICAgICAgICJpbnRvIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgZmFpbGVkIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQppbmRleCAxMjdiYTFiLi42NzE2ZTEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCkBAIC0yNiwxMyArMjYsMTMgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0UmVxdWVzdFNjb3BlZEJlYW4gdGI7Ci0gICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBtYW5hZ2VUcmFuc2FjdGlvbihJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRyYW5zYWN0aW9uSW50ZXJjZXB0b3I6OkFyb3VuZEludm9rZSIpOwogICAgICAgICBpZiAodGIgPT0gbnVsbCkgZXJyb3JNZXNzYWdlPSJEZXBlbmRlbmN5IEluamVjdGlvbiAiICsKICAgICAgICAgICAgICAgICAiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKaW5kZXggZGNiNTkzMS4uMDRmZDM1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YQpAQCAtMzAsNSArMzAsNSBAQAogQEludGVyY2VwdG9yQmluZGluZwogcHVibGljIEBpbnRlcmZhY2UgVHJhbnNhY3Rpb25hbCB7CiAKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9JbnRlcmNlcHRvcnNUZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9JbnRlcmNlcHRvcnNUZXN0U2VydmxldC5qYXZhCmluZGV4IDE0NmZmMjcuLjMyYmI0NTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC90ZXN0L3NlcnZsZXQvSW50ZXJjZXB0b3JzVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0ludGVyY2VwdG9yc1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTM2LDE0ICszNiwxNCBAQAogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgVGVzdEJlYW4gdGI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXJ2aWNlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKIAogICAgICAgICBQcmludFdyaXRlciB3cml0ZXIgPSByZXMuZ2V0V3JpdGVyKCk7CiAgICAgICAgIHdyaXRlci53cml0ZSgiSGVsbG8gZnJvbSBTZXJ2bGV0IDMuMC4iKTsKICAgICAgICAgU3RyaW5nIG1zZyA9ICIiOwotICAgICAgICAKKwogICAgICAgICB0Yi5tMSgpOwogICAgICAgICBpZiAoIVRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlQ2FsbGVkKQogICAgICAgICAgICAgbXNnICs9IlRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgYXJvdW5kSW52b2tlIG1ldGhvZCBub3QgY2FsbGVkIjsKQEAgLTUxLDEyICs1MSwxMiBAQAogICAgICAgICAgICAgbXNnICs9IlNlY3VyZUludGVyY2VwdG9yIGFyb3VuZEludm9rZSBtZXRob2Qgbm90IGNhbGxlZCI7CiAgICAgICAgIGlmICgoVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgIT0gMSkpCiAgICAgICAgICAgICBtc2cgKz0iVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBhcm91bmRJbnZva2UgaW52b2NhdGlvbiBjb3VudCBpcyAiICsKLSAgICAgICAgICAgICAgICAgICAgIm5vdCBleHBlY3RlZCAxIGJ1dCIgKyAKKyAgICAgICAgICAgICAgICAgICAgIm5vdCBleHBlY3RlZCAxIGJ1dCIgKwogICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudDsKICAgICAgICAgdGIubTIoKTsKICAgICAgICAgaWYgKChTZWN1cmVJbnRlcmNlcHRvci5hcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgIT0gMikpCiAgICAgICAgICAgICBtc2cgKz0iU2VjdXJlSW50ZXJjZXB0b3IgYXJvdW5kSW52b2tlIGludm9jYXRpb24gY291bnQgaXMgIiArCi0gICAgICAgICAgICAgICAgICAgICJub3QgZXhwZWN0ZWQgMiBidXQiICsgCisgICAgICAgICAgICAgICAgICAgICJub3QgZXhwZWN0ZWQgMiBidXQiICsKICAgICAgICAgICAgICAgICAgICAgU2VjdXJlSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50OwogCiAgICAgICAgIHdyaXRlci53cml0ZShtc2cgKyAiXG4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWFiM2I0MC4uZGM0NTM4MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1hdC1pbnRlcmNlcHRvcnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL2J1aWxkLnhtbAppbmRleCAwYjliM2EzLi4wYTFmMmY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1hdC1pbnRlcmNlcHRvcnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwyMyArNDgsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKaW5kZXggZTc1MjFiNy4uMTY3MzE4MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0CiAgICAgICAgID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0KICAgICAgICAgImludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1hdC1pbnRlcmNlcHRvcnMiOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0gIkhlbGxvIGZyb20gU2VydmxldCAzLjAuIjsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgaW50ZXJjZXB0b3JzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTUsNyArNTUsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNjUsNyArNjUsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtMTA0LDEwICsxMDQsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC9zZWN1cml0eS9hcGkvU2VjdXJlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3Qvc2VjdXJpdHkvYXBpL1NlY3VyZS5qYXZhCmluZGV4IGRiZjUzZTIuLjVjMjRkMWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC9zZWN1cml0eS9hcGkvU2VjdXJlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3NlY3VyaXR5L2FwaS9TZWN1cmUuamF2YQpAQCAtMzAsMTEgKzMwLDExIEBACiAgKiBFSkJzIGFubm90YXRlZCB3aXRoIFNlY3VyZSBhcmUgaW50ZXJjZXB0ZWQgYnkgU2VjdXJpdHlJbnRlcmNlcHRvciwgZW5zdXJpbmcKICAqIHRoYXQgdGhlIGNhbGxlciBoYXMgdGhlIHBlcm1pc3Npb25zIHRvIGNhbGwgYW4gRUpCIG1ldGhvZC4gTWF5IG9ubHkgYmUKICAqIGFwcGxpZWQgdG8gRUpCcy4KLSAqIAorICoKICAqIEBhdXRob3IgaWZpc2NoZXIKLSAqIAorICoKICAqIEBzZWUgU2VjdXJpdHlJbnRlcmNlcHRvcgotICogCisgKgogICogQHNpbmNlIDAuMwogICovCiBASW5oZXJpdGVkCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3Qvc2VjdXJpdHkvaW50ZXJjZXB0b3IvU2VjdXJpdHlJbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3NlY3VyaXR5L2ludGVyY2VwdG9yL1NlY3VyaXR5SW50ZXJjZXB0b3IuamF2YQppbmRleCA1N2Y1OGM0Li40OTgzNGEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3Qvc2VjdXJpdHkvaW50ZXJjZXB0b3IvU2VjdXJpdHlJbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC9zZWN1cml0eS9pbnRlcmNlcHRvci9TZWN1cml0eUludGVyY2VwdG9yLmphdmEKQEAgLTMyLDI2ICszMiwyNiBAQAogCiAvKioKICAqIFJlYWxpemVzIHNlY3VyaXR5IGZvciBFSkJzLgotICogCisgKgogICogQGF1dGhvciBpZmlzY2hlcgotICogCisgKgogICovCiBAU2VjdXJlCiBASW50ZXJjZXB0b3IKIHB1YmxpYyBjbGFzcyBTZWN1cml0eUludGVyY2VwdG9yIGltcGxlbWVudHMgU2VyaWFsaXphYmxlCiB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRMb2dnZXIoU2VjdXJpdHlJbnRlcmNlcHRvci5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBFSkJDb250ZXh0IGVqYkN0eDsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFBlcmZvcm0gbG9va3VwIGZvciBwZXJtaXNzaW9ucy4KICAgICAgKiBEb2VzIHRoZSBjYWxsZXIgaGFzIHRoZSBwZXJtaXNzaW9uIHRvIGNhbGwgdGhlIG1ldGhvZD8KICAgICAgKiBUT0RPOiBpbXBsZW1lbnQgbG9va3VwCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gSW52b2NhdGlvbkNvbnRleHQgb2YgaW50ZXJjZXB0ZWQgbWV0aG9kCiAgICAgICogQHJldHVybgogICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCkBAIC02MSwxOCArNjEsMTggQEAKICAgICB7CiAgICAgICAgIFByaW5jaXBhbCBwID0gZWpiQ3R4LmdldENhbGxlclByaW5jaXBhbCgpOwogICAgICAgICBNZXRob2QgaW50ZXJmYWNlTWV0aG9kID0gY3R4LmdldE1ldGhvZCgpOwotICAgICAgICAKKwogICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJFSkIgTWV0aG9kIGNhbGxlZCBbRnVsbF06XCJ7MH1cIiBieSBQcmluY2lwYWw6ezF9IiwgbmV3IE9iamVjdFtde2dldEZ1bGxFSkJDbGFzc05hbWUoaW50ZXJmYWNlTWV0aG9kKSwgcC50b1N0cmluZygpfSk7CiAgICAgICAgIExPRy5sb2coTGV2ZWwuSU5GTywgIkVKQiBNZXRob2QgY2FsbGVkIFtNZXRob2Rvbmx5XTp7MH0gYnkgUHJpbmNpcGFsOnsxfSIsIG5ldyBPYmplY3RbXXtpbnRlcmZhY2VNZXRob2QuZ2V0TmFtZSgpLCBwLnRvU3RyaW5nKCl9KTsKLSAgICAgICAgCisKICAgICAgICAgU2VjdXJpdHlJbnRlcmNlcHRvci5hcm91bmRJbnZva2VDYWxsZWQgPSB0cnVlOwogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBUaGUgRUpCQ29udGV4dCBpbnRlcmZhY2UgZG9lc24ndCBwcm92aWRlIGNvbnZlbmllbnQgbWV0aG9kcyB0byBnZXQgdGhlIG5hbWUgb2YgdGhlIEVKQiBjbGFzcywgCisgICAgICogVGhlIEVKQkNvbnRleHQgaW50ZXJmYWNlIGRvZXNuJ3QgcHJvdmlkZSBjb252ZW5pZW50IG1ldGhvZHMgdG8gZ2V0IHRoZSBuYW1lIG9mIHRoZSBFSkIgY2xhc3MsCiAgICAgICogc28gdGhlIGNsYXNzbmFtZSBoYXMgdG8gYmUgZXh0cmFjdGVkIGZyb20gdGhlIG1ldGhvZC4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSB0aGUgbWV0aG9kIHdob3NlIGNsYXNzbmFtZSBpcyBuZWVkZWQKICAgICAgKiBAcmV0dXJuIGNsYXNzbmFtZSAoZnVsbHkgcXVhbGlmaWVkKSBvZiBnaXZlbiBtZXRob2QsIGUuZy4gImNvbS5wcm9maXRicmlja3MudXNlci5hcGkuVXNlclNlcnZpY2UiCiAgICAgICovCkBAIC04MCwxNSArODAsMTUgQEAKICAgICAgICAgLy8gZXh0cmFjdCBjbGFzc05hbWUgZnJvbSBtZXRob2ROYW1lCiAgICAgICAgIC8vIG1ldGhvZE5hbWUgZm9ybWF0IGV4YW1wbGU6InB1YmxpYyB2b2lkIGNvbS5wcm9maXRicmlja3MudXNlci5hcGkuVXNlclNlcnZpY2UudGVzdE1lKCkiCiAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gbWV0aG9kLnRvU3RyaW5nKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGludCBzdGFydCA9IG1ldGhvZE5hbWUubGFzdEluZGV4T2YoJyAnKSArIDE7CiAgICAgICAgIGludCBlbmQgPSBtZXRob2ROYW1lLmxhc3RJbmRleE9mKCcuJyk7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBtZXRob2ROYW1lLnN1YnN0cmluZyhzdGFydCwgZW5kKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcmVzZXQoKXsKICAgICAgICAgLy9yZXNldCBpbnZvY2F0aW9uIHN0YXR1cwogICAgICAgICBTZWN1cml0eUludGVyY2VwdG9yLmFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvYXBpL1VzZXJTZXJ2aWNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3QvdXNlci9hcGkvVXNlclNlcnZpY2UuamF2YQppbmRleCA4NmVlYzdiLi5mNDAyOTFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3QvdXNlci9hcGkvVXNlclNlcnZpY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3QvdXNlci9hcGkvVXNlclNlcnZpY2UuamF2YQpAQCAtMjgsMjQgKzI4LDI0IEBACiAgKiA8cD4KICAqIE1hbmFnZSB1c2VyLXJlbGF0ZWQgZGF0YQogICogPC9wPgotICogCisgKgogICogPHA+CiAgKiBBIHNlcnZpY2UgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIGlzIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZwogICogdXNlci1yZWxhdGVkIG1hc3Rlci1kYXRhCiAgKiA8L3A+Ci0gKiAKKyAqCiAgKiBAYXV0aG9yIGthbmUKLSAqIAorICoKICAqIEBzZWUgVXNlcgogICovCiBwdWJsaWMgaW50ZXJmYWNlIFVzZXJTZXJ2aWNlCiB7Ci0gICAgCisKICAgICAvKioKICAgICAgKiA8cD4KICAgICAgKiBHZXQgYSB7QGxpbmsgVXNlcn0gYnkgdGhlIHVzZXIgaWQKICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gdXNlcmlkCiAgICAgICogICAgICAgICAgICBUaGUgdXNlcmlkIHRvIHNlYXJjaCBmb3IKICAgICAgKiBAcmV0dXJuIEEge0BsaW5rIFVzZXJ9IG9iamVjdCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiBubyB1c2VyIHdhcyBmb3VuZApAQCAtNTYsMTYgKzU2LDE2IEBACiAgICAgICogPHA+CiAgICAgICogQWRkIGEgbmV3IHVzZXIKICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiA8cD4KICAgICAgKiBUaGUgaW1wbGVtZW50YXRpb24gbXVzdCBlbnN1cmUgdGhhdCB0aGUgcHJvdmlkZWQgdXNlciBvYmplY3QgaXMgcGVyc2lzdGVkCiAgICAgICogYmVmb3JlIHJldHVybmluZyB0aGUgYXNzaWduZWQgcGVyc2lzdGVudCB1c2VyIElELgogICAgICAqIDwvcD4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSB1c2VyCiAgICAgICogICAgICAgICAgICBUaGUgdXNlciBvYmplY3QgdG8gcGVyc2lzdAogICAgICAqIEByZXR1cm4gVGhlIG5ld2x5IGNyZWF0ZWQgcGVyc2lzdGVudCBJRCBvZiB0aGUgdXNlciBvYmplY3QKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBzZWUgVXNlcgogICAgICAqLwogICAgIHB1YmxpYyBMb25nIGFkZFVzZXIoVXNlciB1c2VyKSB0aHJvd3MgRUpCRXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvYXBpL21vZGVsL1VzZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC91c2VyL2FwaS9tb2RlbC9Vc2VyLmphdmEKaW5kZXggNTk0NTBmMS4uNDgwMDlkZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvYXBpL21vZGVsL1VzZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3QvdXNlci9hcGkvbW9kZWwvVXNlci5qYXZhCkBAIC0yMyw5ICsyMyw5IEBACiAKIC8qKgogICogQSB1c2VyIGxvZ2luIGFjY291bnQgd2l0aGluIG91ciBzeXN0ZW0uCi0gKiAKKyAqCiAgKiBAYXV0aG9yIGthbmUKLSAqIAorICoKICAqIEBzaW5jZSAwLjEKICAqLwogcHVibGljIGludGVyZmFjZSBVc2VyCkBAIC0zNSw3ICszNSw3IEBACiAKICAgICAvKioKICAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIGZpcnN0TmFtZQotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgZmlyc3ROYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRGaXJzdE5hbWUoKTsKQEAgLTQ0LDE5ICs0NCwxOSBAQAogICAgICAqIDxwPgogICAgICAqIEdldCB0aGUgZ2VuZGVyIGZvciB0aGUgdXNlcgogICAgICAqIDwvcD4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIDxwPgogICAgICAqIEEgZ2VuZGVyIGlzIG11Y2ggYmV0dGVyIHN1aXRlZCB0byBvdXIgbmVlZHMgaGVyZSBhcyB0aGUgcHVyZSBiaW9sb2dpY2FsCiAgICAgICogc2V4IGlzLgogICAgICAqIDwvcD4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIGdlbmRlcgogICAgICAqLwogICAgIHB1YmxpYyBHZW5kZXIgZ2V0R2VuZGVyKCk7CiAKICAgICAvKioKICAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIGxhc3ROYW1lCi0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiBsYXN0TmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFzdE5hbWUoKTsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgKiA8cD4KICAgICAgKiBHZXQgdGhlIHVzZXJuYW1lIHVzZWQgZm9yIGxvZ2luCiAgICAgICogPC9wPgotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdXNlcm5hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXJuYW1lKCk7CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICogPHA+CiAgICAgICogR2V0IHRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSB1c2VyCiAgICAgICogPC9wPgotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGVtYWlsCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFbWFpbEFkZHJlc3MoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC91c2VyL2ltcGwvVXNlclNlcnZpY2VJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3QvdXNlci9pbXBsL1VzZXJTZXJ2aWNlSW1wbC5qYXZhCmluZGV4IGU4Njk5NWYuLmZjYTNjMzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC91c2VyL2ltcGwvVXNlclNlcnZpY2VJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvaW1wbC9Vc2VyU2VydmljZUltcGwuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogICogPHA+CiAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgVXNlclNlcnZpY2UuCiAgKiA8L3A+Ci0gKiAKKyAqCiAgKiBAYXV0aG9yIGNoYW9zbGF5ZXIKICAqLwogQFN0YXRlbGVzcwpAQCAtNDUsMTYgKzQ1LDE2IEBACiAgICAgICogPHA+CiAgICAgICogQWRkIGEgbmV3IHVzZXIKICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiA8cD4KICAgICAgKiBUaGUgaW1wbGVtZW50YXRpb24gbXVzdCBlbnN1cmUgdGhhdCB0aGUgcHJvdmlkZWQgdXNlciBvYmplY3QgaXMgcGVyc2lzdGVkCiAgICAgICogYmVmb3JlIHJldHVybmluZyB0aGUgYXNzaWduZWQgcGVyc2lzdGVudCB1c2VyIElELgogICAgICAqIDwvcD4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSB1c2VyCiAgICAgICogICAgICAgICAgICBUaGUgdXNlciBvYmplY3QgdG8gcGVyc2lzdAogICAgICAqIEByZXR1cm4gVGhlIG5ld2x5IGNyZWF0ZWQgcGVyc2lzdGVudCBJRCBvZiB0aGUgdXNlciBvYmplY3QKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBzZWUgVXNlckltcGwKICAgICAgKi8KICAgICBAT3ZlcnJpZGUKQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgKiA8cD4KICAgICAgKiBHZXQgYSB7QGxpbmsgVXNlcn0gYnkgdGhlIHVzZXIgaWQKICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gdXNlcmlkCiAgICAgICogICAgICAgICAgICBUaGUgdXNlcmlkIHRvIHNlYXJjaCBmb3IKICAgICAgKiBAcmV0dXJuIEEge0BsaW5rIFVzZXJ9IG9iamVjdCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiBubyB1c2VyIHdhcyBmb3VuZApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvbW9kZWwvVXNlckltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC91c2VyL21vZGVsL1VzZXJJbXBsLmphdmEKaW5kZXggMDdhZTliNy4uMWU3MzRlMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvbW9kZWwvVXNlckltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3QvdXNlci9tb2RlbC9Vc2VySW1wbC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgKiA8cD4KICAqIENsaWVudC1zaWRlIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBVc2VyfS4KICAqIDwvcD4KLSAqIAorICoKICAqIEBhdXRob3IgY2hhb3NsYXllcgogICovCiBwdWJsaWMgY2xhc3MgVXNlckltcGwgaW1wbGVtZW50cyBVc2VyCkBAIC01NSw3ICs1NSw3IEBACiAgICAgICogPHA+CiAgICAgICogR2V0IHRoZSB1c2VybmFtZSB1c2VkIGZvciBsb2dpbgogICAgICAqIDwvcD4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHVzZXJuYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VybmFtZSgpCkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICogPHA+CiAgICAgICogU2V0IHRoZSB1c2VybmFtZQogICAgICAqIDwvcD4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSB1c2VybmFtZQogICAgICAqICAgICAgICAgICAgbmV3IHZhbHVlIG9mIHVzZXJuYW1lCiAgICAgICovCkBAIC04MCwxMiArODAsMTIgQEAKICAgICAgKiA8cD4KICAgICAgKiBHZXQgdGhlIGdlbmRlciBmb3IgdGhlIHVzZXIKICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiA8cD4KICAgICAgKiBBIGdlbmRlciBpcyBtdWNoIGJldHRlciBzdWl0ZWQgdG8gb3VyIG5lZWRzIGhlcmUgYXMgdGhlIHB1cmUgYmlvbG9naWNhbAogICAgICAqIHNleCBpcy4KICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiBnZW5kZXIKICAgICAgKi8KICAgICBwdWJsaWMgR2VuZGVyIGdldEdlbmRlcigpCkBAIC05NywxMiArOTcsMTIgQEAKICAgICAgKiA8cD4KICAgICAgKiBTZXQgdGhlIGdlbmRlciBmb3IgdGhlIHVzZXIKICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiA8cD4KICAgICAgKiBBIGdlbmRlciBpcyBtdWNoIGJldHRlciBzdWl0ZWQgdG8gb3VyIG5lZWRzIGhlcmUgYXMgdGhlIHB1cmUgYmlvbG9naWNhbAogICAgICAqIHNleCBpcy4KICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gZ2VuZGVyCiAgICAgICogICAgICAgICAgICBuZXcgdmFsdWUgb2YgZ2VuZGVyCiAgICAgICovCkBAIC0xMTMsNyArMTEzLDcgQEAKIAogICAgIC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUgb2YgZmlyc3ROYW1lCi0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiBmaXJzdE5hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEZpcnN0TmFtZSgpCkBAIC0xMjMsNyArMTIzLDcgQEAKIAogICAgIC8qKgogICAgICAqIFNldCB0aGUgdmFsdWUgb2YgZmlyc3ROYW1lCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gZmlyc3ROYW1lCiAgICAgICogICAgICAgICAgICBuZXcgdmFsdWUgb2YgZmlyc3ROYW1lCiAgICAgICovCkBAIC0xMzQsNyArMTM0LDcgQEAKIAogICAgIC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUgb2YgbGFzdE5hbWUKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIGxhc3ROYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRMYXN0TmFtZSgpCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAogICAgIC8qKgogICAgICAqIFNldCB0aGUgdmFsdWUgb2YgbGFzdE5hbWUKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBsYXN0TmFtZQogICAgICAqICAgICAgICAgICAgbmV3IHZhbHVlIG9mIGxhc3ROYW1lCiAgICAgICovCkBAIC0xNTUsNyArMTU1LDcgQEAKIAogICAgIC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUgb2YgZW1haWxBZGRyZXNzCi0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiBlbWFpbEFkZHJlc3MKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEVtYWlsQWRkcmVzcygpCkBAIC0xNjUsNyArMTY1LDcgQEAKIAogICAgIC8qKgogICAgICAqIFNldCB0aGUgdmFsdWUgb2YgZW1haWxBZGRyZXNzCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gZW1haWxBZGRyZXNzCiAgICAgICogICAgICAgICAgICBuZXcgdmFsdWUgb2YgZW1haWxBZGRyZXNzCiAgICAgICovCkBAIC0xNzYsNyArMTc2LDcgQEAKIAogICAgIC8qKgogICAgICAqIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0IGRhdGEKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIG9iamVjdCBkYXRhIGFzIFN0cmluZwogICAgICAqLwogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODJmMGMzYi4uN2I4YjBkMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncy9idWlsZC54bWwKaW5kZXggMGI5YjNhMy4uMGExZjJmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDIzICs0OCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3MvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKaW5kZXggNmZiYTkyOS4uOTU2YWUyNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3MvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdAogICAgICAgICA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9CiAgICAgICAgICJpbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3MiOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0gIkhlbGxvIGZyb20gU2VydmxldCAzLjAuIjsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgaW50ZXJjZXB0b3JzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTUsNyArNTUsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNjUsNyArNjUsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtMTA0LDEwICsxMDQsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3NlY3VyaXR5L2FwaS9TZWN1cmUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3NlY3VyaXR5L2FwaS9TZWN1cmUuamF2YQppbmRleCBkYmY1M2UyLi41YzI0ZDFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC9zZWN1cml0eS9hcGkvU2VjdXJlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3Mvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3Qvc2VjdXJpdHkvYXBpL1NlY3VyZS5qYXZhCkBAIC0zMCwxMSArMzAsMTEgQEAKICAqIEVKQnMgYW5ub3RhdGVkIHdpdGggU2VjdXJlIGFyZSBpbnRlcmNlcHRlZCBieSBTZWN1cml0eUludGVyY2VwdG9yLCBlbnN1cmluZwogICogdGhhdCB0aGUgY2FsbGVyIGhhcyB0aGUgcGVybWlzc2lvbnMgdG8gY2FsbCBhbiBFSkIgbWV0aG9kLiBNYXkgb25seSBiZQogICogYXBwbGllZCB0byBFSkJzLgotICogCisgKgogICogQGF1dGhvciBpZmlzY2hlcgotICogCisgKgogICogQHNlZSBTZWN1cml0eUludGVyY2VwdG9yCi0gKiAKKyAqCiAgKiBAc2luY2UgMC4zCiAgKi8KIEBJbmhlcml0ZWQKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3NlY3VyaXR5L2ludGVyY2VwdG9yL1NlY3VyaXR5SW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3NlY3VyaXR5L2ludGVyY2VwdG9yL1NlY3VyaXR5SW50ZXJjZXB0b3IuamF2YQppbmRleCA1N2Y1OGM0Li40OTgzNGEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC9zZWN1cml0eS9pbnRlcmNlcHRvci9TZWN1cml0eUludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3Mvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3Qvc2VjdXJpdHkvaW50ZXJjZXB0b3IvU2VjdXJpdHlJbnRlcmNlcHRvci5qYXZhCkBAIC0zMiwyNiArMzIsMjYgQEAKIAogLyoqCiAgKiBSZWFsaXplcyBzZWN1cml0eSBmb3IgRUpCcy4KLSAqIAorICoKICAqIEBhdXRob3IgaWZpc2NoZXIKLSAqIAorICoKICAqLwogQFNlY3VyZQogQEludGVyY2VwdG9yCiBwdWJsaWMgY2xhc3MgU2VjdXJpdHlJbnRlcmNlcHRvciBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZQogewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dnZXIuZ2V0TG9nZ2VyKFNlY3VyaXR5SW50ZXJjZXB0b3IuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgRUpCQ29udGV4dCBlamJDdHg7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBQZXJmb3JtIGxvb2t1cCBmb3IgcGVybWlzc2lvbnMuCiAgICAgICogRG9lcyB0aGUgY2FsbGVyIGhhcyB0aGUgcGVybWlzc2lvbiB0byBjYWxsIHRoZSBtZXRob2Q/CiAgICAgICogVE9ETzogaW1wbGVtZW50IGxvb2t1cAotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIEludm9jYXRpb25Db250ZXh0IG9mIGludGVyY2VwdGVkIG1ldGhvZAogICAgICAqIEByZXR1cm4KICAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgpAQCAtNjEsMTggKzYxLDE4IEBACiAgICAgewogICAgICAgICBQcmluY2lwYWwgcCA9IGVqYkN0eC5nZXRDYWxsZXJQcmluY2lwYWwoKTsKICAgICAgICAgTWV0aG9kIGludGVyZmFjZU1ldGhvZCA9IGN0eC5nZXRNZXRob2QoKTsKLSAgICAgICAgCisKICAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLCAiRUpCIE1ldGhvZCBjYWxsZWQgW0Z1bGxdOlwiezB9XCIgYnkgUHJpbmNpcGFsOnsxfSIsIG5ldyBPYmplY3RbXXtnZXRGdWxsRUpCQ2xhc3NOYW1lKGludGVyZmFjZU1ldGhvZCksIHAudG9TdHJpbmcoKX0pOwogICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJFSkIgTWV0aG9kIGNhbGxlZCBbTWV0aG9kb25seV06ezB9IGJ5IFByaW5jaXBhbDp7MX0iLCBuZXcgT2JqZWN0W117aW50ZXJmYWNlTWV0aG9kLmdldE5hbWUoKSwgcC50b1N0cmluZygpfSk7Ci0gICAgICAgIAorCiAgICAgICAgIFNlY3VyaXR5SW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlQ2FsbGVkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVGhlIEVKQkNvbnRleHQgaW50ZXJmYWNlIGRvZXNuJ3QgcHJvdmlkZSBjb252ZW5pZW50IG1ldGhvZHMgdG8gZ2V0IHRoZSBuYW1lIG9mIHRoZSBFSkIgY2xhc3MsIAorICAgICAqIFRoZSBFSkJDb250ZXh0IGludGVyZmFjZSBkb2Vzbid0IHByb3ZpZGUgY29udmVuaWVudCBtZXRob2RzIHRvIGdldCB0aGUgbmFtZSBvZiB0aGUgRUpCIGNsYXNzLAogICAgICAqIHNvIHRoZSBjbGFzc25hbWUgaGFzIHRvIGJlIGV4dHJhY3RlZCBmcm9tIHRoZSBtZXRob2QuCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gdGhlIG1ldGhvZCB3aG9zZSBjbGFzc25hbWUgaXMgbmVlZGVkCiAgICAgICogQHJldHVybiBjbGFzc25hbWUgKGZ1bGx5IHF1YWxpZmllZCkgb2YgZ2l2ZW4gbWV0aG9kLCBlLmcuICJjb20ucHJvZml0YnJpY2tzLnVzZXIuYXBpLlVzZXJTZXJ2aWNlIgogICAgICAqLwpAQCAtODAsMTUgKzgwLDE1IEBACiAgICAgICAgIC8vIGV4dHJhY3QgY2xhc3NOYW1lIGZyb20gbWV0aG9kTmFtZQogICAgICAgICAvLyBtZXRob2ROYW1lIGZvcm1hdCBleGFtcGxlOiJwdWJsaWMgdm9pZCBjb20ucHJvZml0YnJpY2tzLnVzZXIuYXBpLlVzZXJTZXJ2aWNlLnRlc3RNZSgpIgogICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG1ldGhvZC50b1N0cmluZygpOwotICAgICAgICAKKwogICAgICAgICBpbnQgc3RhcnQgPSBtZXRob2ROYW1lLmxhc3RJbmRleE9mKCcgJykgKyAxOwogICAgICAgICBpbnQgZW5kID0gbWV0aG9kTmFtZS5sYXN0SW5kZXhPZignLicpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gbWV0aG9kTmFtZS5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBjbGFzc05hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHJlc2V0KCl7CiAgICAgICAgIC8vcmVzZXQgaW52b2NhdGlvbiBzdGF0dXMKICAgICAgICAgU2VjdXJpdHlJbnRlcmNlcHRvci5hcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvYXBpL1VzZXJTZXJ2aWNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC91c2VyL2FwaS9Vc2VyU2VydmljZS5qYXZhCmluZGV4IDg2ZWVjN2IuLmY0MDI5MWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvYXBpL1VzZXJTZXJ2aWNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3Mvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3QvdXNlci9hcGkvVXNlclNlcnZpY2UuamF2YQpAQCAtMjgsMjQgKzI4LDI0IEBACiAgKiA8cD4KICAqIE1hbmFnZSB1c2VyLXJlbGF0ZWQgZGF0YQogICogPC9wPgotICogCisgKgogICogPHA+CiAgKiBBIHNlcnZpY2UgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIGlzIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZwogICogdXNlci1yZWxhdGVkIG1hc3Rlci1kYXRhCiAgKiA8L3A+Ci0gKiAKKyAqCiAgKiBAYXV0aG9yIGthbmUKLSAqIAorICoKICAqIEBzZWUgVXNlcgogICovCiBwdWJsaWMgaW50ZXJmYWNlIFVzZXJTZXJ2aWNlCiB7Ci0gICAgCisKICAgICAvKioKICAgICAgKiA8cD4KICAgICAgKiBHZXQgYSB7QGxpbmsgVXNlcn0gYnkgdGhlIHVzZXIgaWQKICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gdXNlcmlkCiAgICAgICogICAgICAgICAgICBUaGUgdXNlcmlkIHRvIHNlYXJjaCBmb3IKICAgICAgKiBAcmV0dXJuIEEge0BsaW5rIFVzZXJ9IG9iamVjdCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiBubyB1c2VyIHdhcyBmb3VuZApAQCAtNTYsMTYgKzU2LDE2IEBACiAgICAgICogPHA+CiAgICAgICogQWRkIGEgbmV3IHVzZXIKICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiA8cD4KICAgICAgKiBUaGUgaW1wbGVtZW50YXRpb24gbXVzdCBlbnN1cmUgdGhhdCB0aGUgcHJvdmlkZWQgdXNlciBvYmplY3QgaXMgcGVyc2lzdGVkCiAgICAgICogYmVmb3JlIHJldHVybmluZyB0aGUgYXNzaWduZWQgcGVyc2lzdGVudCB1c2VyIElELgogICAgICAqIDwvcD4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSB1c2VyCiAgICAgICogICAgICAgICAgICBUaGUgdXNlciBvYmplY3QgdG8gcGVyc2lzdAogICAgICAqIEByZXR1cm4gVGhlIG5ld2x5IGNyZWF0ZWQgcGVyc2lzdGVudCBJRCBvZiB0aGUgdXNlciBvYmplY3QKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBzZWUgVXNlcgogICAgICAqLwogICAgIHB1YmxpYyBMb25nIGFkZFVzZXIoVXNlciB1c2VyKSB0aHJvd3MgRUpCRXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3Mvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3QvdXNlci9hcGkvbW9kZWwvVXNlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3Mvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3QvdXNlci9hcGkvbW9kZWwvVXNlci5qYXZhCmluZGV4IDU5NDUwZjEuLjQ4MDA5ZGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvYXBpL21vZGVsL1VzZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC91c2VyL2FwaS9tb2RlbC9Vc2VyLmphdmEKQEAgLTIzLDkgKzIzLDkgQEAKIAogLyoqCiAgKiBBIHVzZXIgbG9naW4gYWNjb3VudCB3aXRoaW4gb3VyIHN5c3RlbS4KLSAqIAorICoKICAqIEBhdXRob3Iga2FuZQotICogCisgKgogICogQHNpbmNlIDAuMQogICovCiBwdWJsaWMgaW50ZXJmYWNlIFVzZXIKQEAgLTM1LDcgKzM1LDcgQEAKIAogICAgIC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUgb2YgZmlyc3ROYW1lCi0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiBmaXJzdE5hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEZpcnN0TmFtZSgpOwpAQCAtNDQsMTkgKzQ0LDE5IEBACiAgICAgICogPHA+CiAgICAgICogR2V0IHRoZSBnZW5kZXIgZm9yIHRoZSB1c2VyCiAgICAgICogPC9wPgotICAgICAqIAorICAgICAqCiAgICAgICogPHA+CiAgICAgICogQSBnZW5kZXIgaXMgbXVjaCBiZXR0ZXIgc3VpdGVkIHRvIG91ciBuZWVkcyBoZXJlIGFzIHRoZSBwdXJlIGJpb2xvZ2ljYWwKICAgICAgKiBzZXggaXMuCiAgICAgICogPC9wPgotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgZ2VuZGVyCiAgICAgICovCiAgICAgcHVibGljIEdlbmRlciBnZXRHZW5kZXIoKTsKIAogICAgIC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUgb2YgbGFzdE5hbWUKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIGxhc3ROYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRMYXN0TmFtZSgpOwpAQCAtNjUsNyArNjUsNyBAQAogICAgICAqIDxwPgogICAgICAqIEdldCB0aGUgdXNlcm5hbWUgdXNlZCBmb3IgbG9naW4KICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB1c2VybmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlcm5hbWUoKTsKQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgKiA8cD4KICAgICAgKiBHZXQgdGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIHVzZXIKICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZW1haWwKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEVtYWlsQWRkcmVzcygpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3Mvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3QvdXNlci9pbXBsL1VzZXJTZXJ2aWNlSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3Mvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3QvdXNlci9pbXBsL1VzZXJTZXJ2aWNlSW1wbC5qYXZhCmluZGV4IGFkOGU2ZGIuLjAyMTM2ZTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvaW1wbC9Vc2VyU2VydmljZUltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC91c2VyL2ltcGwvVXNlclNlcnZpY2VJbXBsLmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKICAqIDxwPgogICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFVzZXJTZXJ2aWNlLgogICogPC9wPgotICogCisgKgogICogQGF1dGhvciBjaGFvc2xheWVyCiAgKi8KIEBTdGF0ZWxlc3MKQEAgLTQ1LDE2ICs0NSwxNiBAQAogICAgICAqIDxwPgogICAgICAqIEFkZCBhIG5ldyB1c2VyCiAgICAgICogPC9wPgotICAgICAqIAorICAgICAqCiAgICAgICogPHA+CiAgICAgICogVGhlIGltcGxlbWVudGF0aW9uIG11c3QgZW5zdXJlIHRoYXQgdGhlIHByb3ZpZGVkIHVzZXIgb2JqZWN0IGlzIHBlcnNpc3RlZAogICAgICAqIGJlZm9yZSByZXR1cm5pbmcgdGhlIGFzc2lnbmVkIHBlcnNpc3RlbnQgdXNlciBJRC4KICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gdXNlcgogICAgICAqICAgICAgICAgICAgVGhlIHVzZXIgb2JqZWN0IHRvIHBlcnNpc3QKICAgICAgKiBAcmV0dXJuIFRoZSBuZXdseSBjcmVhdGVkIHBlcnNpc3RlbnQgSUQgb2YgdGhlIHVzZXIgb2JqZWN0Ci0gICAgICogCisgICAgICoKICAgICAgKiBAc2VlIFVzZXJJbXBsCiAgICAgICovCiAgICAgQE92ZXJyaWRlCkBAIC02OSw3ICs2OSw3IEBACiAgICAgICogPHA+CiAgICAgICogR2V0IGEge0BsaW5rIFVzZXJ9IGJ5IHRoZSB1c2VyIGlkCiAgICAgICogPC9wPgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIHVzZXJpZAogICAgICAqICAgICAgICAgICAgVGhlIHVzZXJpZCB0byBzZWFyY2ggZm9yCiAgICAgICogQHJldHVybiBBIHtAbGluayBVc2VyfSBvYmplY3Qgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgbm8gdXNlciB3YXMgZm91bmQKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvbW9kZWwvVXNlckltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvbW9kZWwvVXNlckltcGwuamF2YQppbmRleCAwN2FlOWI3Li4xZTczNGUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC91c2VyL21vZGVsL1VzZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3Mvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3QvdXNlci9tb2RlbC9Vc2VySW1wbC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgKiA8cD4KICAqIENsaWVudC1zaWRlIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBVc2VyfS4KICAqIDwvcD4KLSAqIAorICoKICAqIEBhdXRob3IgY2hhb3NsYXllcgogICovCiBwdWJsaWMgY2xhc3MgVXNlckltcGwgaW1wbGVtZW50cyBVc2VyCkBAIC01NSw3ICs1NSw3IEBACiAgICAgICogPHA+CiAgICAgICogR2V0IHRoZSB1c2VybmFtZSB1c2VkIGZvciBsb2dpbgogICAgICAqIDwvcD4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHVzZXJuYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VybmFtZSgpCkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICogPHA+CiAgICAgICogU2V0IHRoZSB1c2VybmFtZQogICAgICAqIDwvcD4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSB1c2VybmFtZQogICAgICAqICAgICAgICAgICAgbmV3IHZhbHVlIG9mIHVzZXJuYW1lCiAgICAgICovCkBAIC04MCwxMiArODAsMTIgQEAKICAgICAgKiA8cD4KICAgICAgKiBHZXQgdGhlIGdlbmRlciBmb3IgdGhlIHVzZXIKICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiA8cD4KICAgICAgKiBBIGdlbmRlciBpcyBtdWNoIGJldHRlciBzdWl0ZWQgdG8gb3VyIG5lZWRzIGhlcmUgYXMgdGhlIHB1cmUgYmlvbG9naWNhbAogICAgICAqIHNleCBpcy4KICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiBnZW5kZXIKICAgICAgKi8KICAgICBwdWJsaWMgR2VuZGVyIGdldEdlbmRlcigpCkBAIC05NywxMiArOTcsMTIgQEAKICAgICAgKiA8cD4KICAgICAgKiBTZXQgdGhlIGdlbmRlciBmb3IgdGhlIHVzZXIKICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiA8cD4KICAgICAgKiBBIGdlbmRlciBpcyBtdWNoIGJldHRlciBzdWl0ZWQgdG8gb3VyIG5lZWRzIGhlcmUgYXMgdGhlIHB1cmUgYmlvbG9naWNhbAogICAgICAqIHNleCBpcy4KICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gZ2VuZGVyCiAgICAgICogICAgICAgICAgICBuZXcgdmFsdWUgb2YgZ2VuZGVyCiAgICAgICovCkBAIC0xMTMsNyArMTEzLDcgQEAKIAogICAgIC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUgb2YgZmlyc3ROYW1lCi0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiBmaXJzdE5hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEZpcnN0TmFtZSgpCkBAIC0xMjMsNyArMTIzLDcgQEAKIAogICAgIC8qKgogICAgICAqIFNldCB0aGUgdmFsdWUgb2YgZmlyc3ROYW1lCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gZmlyc3ROYW1lCiAgICAgICogICAgICAgICAgICBuZXcgdmFsdWUgb2YgZmlyc3ROYW1lCiAgICAgICovCkBAIC0xMzQsNyArMTM0LDcgQEAKIAogICAgIC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUgb2YgbGFzdE5hbWUKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIGxhc3ROYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRMYXN0TmFtZSgpCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAogICAgIC8qKgogICAgICAqIFNldCB0aGUgdmFsdWUgb2YgbGFzdE5hbWUKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBsYXN0TmFtZQogICAgICAqICAgICAgICAgICAgbmV3IHZhbHVlIG9mIGxhc3ROYW1lCiAgICAgICovCkBAIC0xNTUsNyArMTU1LDcgQEAKIAogICAgIC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUgb2YgZW1haWxBZGRyZXNzCi0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiBlbWFpbEFkZHJlc3MKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEVtYWlsQWRkcmVzcygpCkBAIC0xNjUsNyArMTY1LDcgQEAKIAogICAgIC8qKgogICAgICAqIFNldCB0aGUgdmFsdWUgb2YgZW1haWxBZGRyZXNzCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gZW1haWxBZGRyZXNzCiAgICAgICogICAgICAgICAgICBuZXcgdmFsdWUgb2YgZW1haWxBZGRyZXNzCiAgICAgICovCkBAIC0xNzYsNyArMTc2LDcgQEAKIAogICAgIC8qKgogICAgICAqIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0IGRhdGEKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIG9iamVjdCBkYXRhIGFzIFN0cmluZwogICAgICAqLwogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9idWlsZC54bWwKaW5kZXggOWIwMjFkMi4uOWMzYmMwZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvYnVpbGQueG1sCkBAIC04NCw3ICs4NCw3IEBACiAgICAgICAgICAgICA8YW50IGRpcj0ianBhLXJlc291cmNlLWluamVjdGlvbi13aXRoLXNpbmdsZXRvbi1lamItcHJvZHVjZXIiIHRhcmdldD0iJHtqYXZhZWUtY29tcC10YXJnZXR9Ii8+CiAgICAgICAgICAgICA8YW50IGRpcj0ibm8taW50ZXJmYWNlLWVqYiIgdGFyZ2V0PSIke2phdmFlZS1jb21wLXRhcmdldH0iLz4KICAgICAgICAgICAgIDxhbnQgZGlyPSJqbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQiIHRhcmdldD0iJHtqYXZhZWUtY29tcC10YXJnZXR9Ii8+Ci08IS0tIFRPRE86IEludmVzdGlnYXRlIAorPCEtLSBUT0RPOiBJbnZlc3RpZ2F0ZQogICAgICAgICAgICAgPGFudCBkaXI9Imptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC1pbi1saWJyYXJ5LWphciIgdGFyZ2V0PSIke2phdmFlZS1jb21wLXRhcmdldH0iLz4KIC0tPgogICAgICAgICAgICAgPGFudCBkaXI9ImVtLXJlc291cmNlLWluamVjdGlvbiIgdGFyZ2V0PSIke2phdmFlZS1jb21wLXRhcmdldH0iLz4KQEAgLTk1LDE1ICs5NSwxNSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+IFVzYWdlOgotCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGphdmFlZS1jb21wIHRlc3RzKQotCQlhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIGphdmFlZS1jb21wIHRlc3RzKQotCQlhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGphdmFlZS1jb21wIHRlc3RzKQotCQlhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgamF2YWVlLWNvbXAgdGVzdHMpCi0JCWFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBqYXZhZWUtY29tcCBhcHBzKQotCQlhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGphdmFlZS1jb21wIHRlc3RzKQotCQlhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBqYXZhZWUtY29tcCBhcHBzKQotCQlhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIGphdmFlZS1jb21wIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4gVXNhZ2U6CisgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgamF2YWVlLWNvbXAgdGVzdHMpCisgICAgICAgIGFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgamF2YWVlLWNvbXAgdGVzdHMpCisgICAgICAgIGFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgamF2YWVlLWNvbXAgdGVzdHMpCisgICAgICAgIGFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBqYXZhZWUtY29tcCB0ZXN0cykKKyAgICAgICAgYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIGphdmFlZS1jb21wIGFwcHMpCisgICAgICAgIGFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgamF2YWVlLWNvbXAgdGVzdHMpCisgICAgICAgIGFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgIGphdmFlZS1jb21wIGFwcHMpCisgICAgICAgIGFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3IgamF2YWVlLWNvbXAgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLWluamVjdGlvbi1uby1pbnRlcmZhY2UtZWpiL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0taW5qZWN0aW9uLW5vLWludGVyZmFjZS1lamIvYnVpbGQucHJvcGVydGllcwppbmRleCAyNjk2YjQ1Li5kNGFmZWU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0taW5qZWN0aW9uLW5vLWludGVyZmFjZS1lamIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0taW5qZWN0aW9uLW5vLWludGVyZmFjZS1lamIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1lbWluamVjdGlvbi1pbnRvLW5vLWludGVyZmFjZS1lamIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1pbmplY3Rpb24tbm8taW50ZXJmYWNlLWVqYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0taW5qZWN0aW9uLW5vLWludGVyZmFjZS1lamIvYnVpbGQueG1sCmluZGV4IGEwZTZhOWQuLjI4MjRiNTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1pbmplY3Rpb24tbm8taW50ZXJmYWNlLWVqYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLWluamVjdGlvbi1uby1pbnRlcmZhY2UtZWpiL2J1aWxkLnhtbApAQCAtMzMsNTQgKzMzLDU0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJ1bix1bmRlcGxveSIgLz4KIAotCTx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iIC8+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgotCQkJPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgotCQk8L2RlbGV0ZT4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgorICAgICAgICA8ZGVsZXRlPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KKyAgICAgICAgPC9kZWxldGU+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0IiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLQkJPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgotCQkJPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0JCTwvYW50Y2FsbD4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KIAotCQk8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIgLz4KKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiIC8+CiAKLQk8L3RhcmdldD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAotCTx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+Ci0JCQk8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iIC8+Ci0JCQk8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iIC8+Ci0JCQk8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIgLz4KLQkJCTxjbGFzc3BhdGg+Ci0JCQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiAvPgotCQkJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iY2xpZW50IiAvPgotCQkJPC9jbGFzc3BhdGg+Ci0JCTwvamF2YT4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9IiAvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9IiAvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iIC8+CisgICAgICAgICAgICA8Y2xhc3NwYXRoPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgLz4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImNsaWVudCIgLz4KKyAgICAgICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICA8L2phdmE+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0taW5qZWN0aW9uLW5vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW5TdXBlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLWluamVjdGlvbi1uby1pbnRlcmZhY2UtZWpiL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuU3VwZXIuamF2YQppbmRleCAwMTE2NTI1Li5iOGYwYjY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0taW5qZWN0aW9uLW5vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW5TdXBlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1pbmplY3Rpb24tbm8taW50ZXJmYWNlLWVqYi9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhblN1cGVyLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIGltcG9ydCB0ZXN0LmVqYi5UZXN0Tm9JbnRlcmZhY2VFSkI7CiAKIGFic3RyYWN0IGNsYXNzIFRlc3RCZWFuU3VwZXIgaW1wbGVtZW50cyBUZXN0QmVhbkludGVyZmFjZSB7Ci0gICAgCisKICAgICBhYnN0cmFjdCBUZXN0Tm9JbnRlcmZhY2VFSkIgZ2V0VGVzdEVKQigpOwogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0taW5qZWN0aW9uLW5vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L2VqYi9UZXN0Tm9JbnRlcmZhY2VFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1pbmplY3Rpb24tbm8taW50ZXJmYWNlLWVqYi9zZXJ2bGV0L3Rlc3QvZWpiL1Rlc3ROb0ludGVyZmFjZUVKQi5qYXZhCmluZGV4IGVjNGU2NWYuLmI4Yzc3ZGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1pbmplY3Rpb24tbm8taW50ZXJmYWNlLWVqYi9zZXJ2bGV0L3Rlc3QvZWpiL1Rlc3ROb0ludGVyZmFjZUVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1pbmplY3Rpb24tbm8taW50ZXJmYWNlLWVqYi9zZXJ2bGV0L3Rlc3QvZWpiL1Rlc3ROb0ludGVyZmFjZUVKQi5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiAKIEBTdGF0ZWxlc3MKIHB1YmxpYyBjbGFzcyBUZXN0Tm9JbnRlcmZhY2VFSkIgZXh0ZW5kcyBUZXN0U3VwZXJDbGFzcyB7Ci0gICAgQEluamVjdCAKKyAgICBASW5qZWN0CiAgICAgRW50aXR5TWFuYWdlciBlbTsKIAogICAgIHB1YmxpYyBTdHJpbmcgbTIoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0taW5qZWN0aW9uLW5vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L3NlcnZsZXQvTm9JbnRlcmZhY2VFSkJUZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLWluamVjdGlvbi1uby1pbnRlcmZhY2UtZWpiL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L05vSW50ZXJmYWNlRUpCVGVzdFNlcnZsZXQuamF2YQppbmRleCAzZDM4MjlmLi40OWRjNDc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0taW5qZWN0aW9uLW5vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L3NlcnZsZXQvTm9JbnRlcmZhY2VFSkJUZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1pbmplY3Rpb24tbm8taW50ZXJmYWNlLWVqYi9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Ob0ludGVyZmFjZUVKQlRlc3RTZXJ2bGV0LmphdmEKQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgICAgaWYgKCFzdGF0dXMpIG1zZyArPSAiSW5qZWN0aW9uIGFuZCB1c2Ugb2YgRW50aXR5TWFhbmdlciBmYWlsZWQiOwogICAgICAgICBzdGF0dXMgPSBqdC5sYXp5TG9hZGluZ0J5RmluZCgxKTsKICAgICAgICAgaWYgKCFzdGF0dXMpIG1zZyArPSAiSW5qZWN0aW9uIGFuZCB1c2Ugb2YgRW50aXR5TWFhbmdlciBsYXp5IGxvYWRpbmcgdGVzdCBmYWlsZWQiOwotICAgICAgICAKKwogICAgICAgICB3cml0ZXIud3JpdGUobXNnICsgIlxuIik7CiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLWV4dGVuZGVkLXRyYW5zYWN0aW9uLWNvbnRleHQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24tZXh0ZW5kZWQtdHJhbnNhY3Rpb24tY29udGV4dC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGIyYTg3NTYuLjYyNGQxZWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24tZXh0ZW5kZWQtdHJhbnNhY3Rpb24tY29udGV4dC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24tZXh0ZW5kZWQtdHJhbnNhY3Rpb24tY29udGV4dC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWVtLXJlc291cmNlLWluamVjdGlvbi1leHRlbmRlZC10cmFuc2FjdGlvbmFsLWNvbnRleHQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24tZXh0ZW5kZWQtdHJhbnNhY3Rpb24tY29udGV4dC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLWV4dGVuZGVkLXRyYW5zYWN0aW9uLWNvbnRleHQvYnVpbGQueG1sCmluZGV4IDI5NWQwODYuLmViNzkwYmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24tZXh0ZW5kZWQtdHJhbnNhY3Rpb24tY29udGV4dC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi1leHRlbmRlZC10cmFuc2FjdGlvbi1jb250ZXh0L2J1aWxkLnhtbApAQCAtMzMsNzUgKzMzLDc1IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsY3JlYXRlLXJlc291cmNlcyxkZXBsb3kscnVuLHVuZGVwbG95LGRlbGV0ZS1yZXNvdXJjZXMiIC8+CiAKLQk8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KLQkJCTxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KKyAgICAgICAgPGRlbGV0ZT4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiIC8+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiIC8+CisgICAgICAgIDwvZGVsZXRlPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+Ci0JCTxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KLQkJCTxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotCQk8L2FudGNhbGw+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgorICAgICAgICA8L2FudGNhbGw+CiAKLQkJPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiIC8+CisgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIiAvPgogCi0JPC90YXJnZXQ+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKLQk8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKIAotCTx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+Ci0JCQk8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iIC8+Ci0JCQk8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iIC8+Ci0JCQk8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIgLz4KLQkJCTxjbGFzc3BhdGg+Ci0JCQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiAvPgotCQkJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iY2xpZW50IiAvPgotCQkJPC9jbGFzc3BhdGg+Ci0JCTwvamF2YT4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9IiAvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9IiAvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iIC8+CisgICAgICAgICAgICA8Y2xhc3NwYXRoPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgLz4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImNsaWVudCIgLz4KKyAgICAgICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICA8L2phdmE+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgotCQk8L2FudGNhbGw+CisgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KIAotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLWV4dGVuZGVkLXRyYW5zYWN0aW9uLWNvbnRleHQvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLWV4dGVuZGVkLXRyYW5zYWN0aW9uLWNvbnRleHQvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKaW5kZXggMjllMTM3YS4uZTViZTRkMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi1leHRlbmRlZC10cmFuc2FjdGlvbi1jb250ZXh0L3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24tZXh0ZW5kZWQtdHJhbnNhY3Rpb24tY29udGV4dC9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQpAQCAtMTksNiArMTksNiBAQAogcHVibGljIGludGVyZmFjZSBUZXN0QmVhbkludGVyZmFjZSB7CiAgICAgcHVibGljIHZvaWQgbTEoKTsKICAgICBwdWJsaWMgdm9pZCBtMigpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyB0ZXN0RGF0YXNvdXJjZUluamVjdGlvbigpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi1leHRlbmRlZC10cmFuc2FjdGlvbi1jb250ZXh0L3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLWV4dGVuZGVkLXRyYW5zYWN0aW9uLWNvbnRleHQvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YQppbmRleCBiMDQ3YjNkLi4wMWRlZjQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLWV4dGVuZGVkLXRyYW5zYWN0aW9uLWNvbnRleHQvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLWV4dGVuZGVkLXRyYW5zYWN0aW9uLWNvbnRleHQvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YQpAQCAtMzAsOCArMzAsOCBAQAogQFByZWZlcnJlZAogcHVibGljIGNsYXNzIFRlc3RCZWFuIGltcGxlbWVudHMgVGVzdEJlYW5JbnRlcmZhY2V7CiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIHRlc3RCZWFuSW52b2tlZCA9IGZhbHNlOwotICAgIAotICAgIEBJbmplY3QgLy9AVGVzdERhdGFiYXNlIAorCisgICAgQEluamVjdCAvL0BUZXN0RGF0YWJhc2UKICAgICBFbnRpdHlNYW5hZ2VyIGVtZjsKIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi1leHRlbmRlZC10cmFuc2FjdGlvbi1jb250ZXh0L3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0pQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi1leHRlbmRlZC10cmFuc2FjdGlvbi1jb250ZXh0L3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0pQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldC5qYXZhCmluZGV4IGEyMzIwYmQuLmVjZDkwN2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24tZXh0ZW5kZWQtdHJhbnNhY3Rpb24tY29udGV4dC9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9KUEFSZXNvdXJjZUluamVjdGlvblNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLWV4dGVuZGVkLXRyYW5zYWN0aW9uLWNvbnRleHQvc2VydmxldC90ZXN0L3NlcnZsZXQvSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0LmphdmEKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogICAgIHByaXZhdGUgQFJlc291cmNlCiAgICAgVXNlclRyYW5zYWN0aW9uIHV0eDsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgVGVzdEJlYW5JbnRlcmZhY2UgdGJpOwpAQCAtNjAsMTEgKzYwLDExIEBACiAgICAgICAgIHdyaXRlci53cml0ZSgiSGVsbG8gZnJvbSBTZXJ2bGV0IDMuMC4iKTsKICAgICAgICAgU3RyaW5nIG1zZyA9ICIiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldDo6QFBlcnNpc3RlbmNlVW5pdCAiICsKLSAgICAgICAgCQkiQ0RJIEVudGl0eU1hbmFnZXJGYWN0b3J5PSIgKyBlbWYxKTsKKyAgICAgICAgICAgICAgICAiQ0RJIEVudGl0eU1hbmFnZXJGYWN0b3J5PSIgKyBlbWYxKTsKIAogICAgICAgICBFbnRpdHlNYW5hZ2VyIGVtID0gZW1mMTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKUEFSZXNvdXJjZUluamVjdGlvblNlcnZsZXQ6OmNyZWF0ZUVNIiArCi0gICAgICAgIAkJIkVudGl0eU1hbmFnZXI9IiArIGVtKTsKKyAgICAgICAgICAgICAgICAiRW50aXR5TWFuYWdlcj0iICsgZW0pOwogICAgICAgICBTdHJpbmcgdGVzdGNhc2UgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigidGVzdGNhc2UiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0Y2FzZT0iICsgdGVzdGNhc2UpOwogCkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJsbHF1ZXJ5Ii5lcXVhbHModGVzdGNhc2UpKSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzID0ganQubGF6eUxvYWRpbmdCeVF1ZXJ5KCJDYXJsYSIpOwogICAgICAgICAgICAgfSBlbHNlIGlmICgibGxpbmoiLmVxdWFscyh0ZXN0Y2FzZSkpewotICAgICAgICAgICAgICAgIHN0YXR1cyA9ICgodGJpICE9IG51bGwpICYmIAorICAgICAgICAgICAgICAgIHN0YXR1cyA9ICgodGJpICE9IG51bGwpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAodGJpLnRlc3REYXRhc291cmNlSW5qZWN0aW9uKCkudHJpbSgpLmxlbmd0aCgpPT0wKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoc3RhdHVzKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLWV4dGVuZGVkLXRyYW5zYWN0aW9uLWNvbnRleHQvc2VydmxldC90ZXN0L3V0aWwvSlBBUmVzb3VyY2VQcm9kdWNlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi1leHRlbmRlZC10cmFuc2FjdGlvbi1jb250ZXh0L3NlcnZsZXQvdGVzdC91dGlsL0pQQVJlc291cmNlUHJvZHVjZXIuamF2YQppbmRleCBlMjhkOGE5Li4xY2JmZWZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLWV4dGVuZGVkLXRyYW5zYWN0aW9uLWNvbnRleHQvc2VydmxldC90ZXN0L3V0aWwvSlBBUmVzb3VyY2VQcm9kdWNlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24tZXh0ZW5kZWQtdHJhbnNhY3Rpb24tY29udGV4dC9zZXJ2bGV0L3Rlc3QvdXRpbC9KUEFSZXNvdXJjZVByb2R1Y2VyLmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKIEBTaW5nbGV0b24KIHB1YmxpYyBjbGFzcyBKUEFSZXNvdXJjZVByb2R1Y2VyIHsKICAgICBAUHJvZHVjZXMgQFBlcnNpc3RlbmNlQ29udGV4dCh1bml0TmFtZT0icHUxIiwgdHlwZT1QZXJzaXN0ZW5jZUNvbnRleHRUeXBlLkVYVEVOREVEKQotICAgIC8vQFRlc3REYXRhYmFzZSAKKyAgICAvL0BUZXN0RGF0YWJhc2UKICAgICBFbnRpdHlNYW5hZ2VyIGN1c3RvbWVyRGF0YWJhc2VQZXJzaXN0ZW5jZVVuaXQ7CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi13aXRoLXJlc291cmNlLWRlY2xhcmF0aW9uLWluLWFub3RoZXItamFyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWJjMGMyZS4uYTgyZjdiMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi13aXRoLXJlc291cmNlLWRlY2xhcmF0aW9uLWluLWFub3RoZXItamFyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi13aXRoLXJlc291cmNlLWRlY2xhcmF0aW9uLWluLWFub3RoZXItamFyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpLWZ1bGwtZWFyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIvYnVpbGQueG1sCmluZGV4IGQzMTA2ZmIuLmFkYjA1ODUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi13aXRoLXJlc291cmNlLWRlY2xhcmF0aW9uLWluLWFub3RoZXItamFyL2J1aWxkLnhtbApAQCAtMzQsMTMgKzM0LDEzIEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImxpYiIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLSAgICAgICAKKwogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KICAgICAgICAgPC9hbnRjYWxsPgpAQCAtNDksNyArNDksNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9IndhciIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLQkgICAgPGphdmFjIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBzcmNkaXI9ImNsaWVudCIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGRlYnVnPSJvbiIgZmFpbG9uZXJyb3I9InRydWUiPgorICAgICAgICA8amF2YWMgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIHNyY2Rpcj0iY2xpZW50IiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZGVidWc9Im9uIiBmYWlsb25lcnJvcj0idHJ1ZSI+CiAgICAgICAgIDwvamF2YWM+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgIAlmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMtZWFyLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIgIGZpbHRlcmluZz0idHJ1ZSIvPgogICAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIKICAgICAgICAgICAgICBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSIgPgpAQCAtMTAxLDI0ICsxMDEsMjQgQEAKICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CiAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotCSAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiLz4KICAgICAgICAgICA8L2ZpbGVzZXQ+CiA8IS0tCiAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0iIGluY2x1ZGVzPSJsaWIvcmVwb3J0ZXIuamFyIi8+CiAtLT4KICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBpbmNsdWRlcz0ibGliLWRpci8qIi8+Ci0gIDwvZWFyPiAgCisgIDwvZWFyPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtMTI3LDEwICsxMjcsMTAgQEAKICAgICAgICAgICAgPGFyZyBsaW5lPSIke2h0dHAucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIvY2xpZW50L2NvbS9hY21lL0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi13aXRoLXJlc291cmNlLWRlY2xhcmF0aW9uLWluLWFub3RoZXItamFyL2NsaWVudC9jb20vYWNtZS9DbGllbnQuamF2YQppbmRleCAyMTBmYzBmLi5iNWNhNGJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIvY2xpZW50L2NvbS9hY21lL0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9jbGllbnQvY29tL2FjbWUvQ2xpZW50LmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAiZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIiOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIvZWpiL2NvbS9hY21lL2VqYi9pbXBsL0hlbGxvU2luZ2xldG9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIvZWpiL2NvbS9hY21lL2VqYi9pbXBsL0hlbGxvU2luZ2xldG9uLmphdmEKaW5kZXggZDIyZGM4Mi4uYmM0YTI4NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi13aXRoLXJlc291cmNlLWRlY2xhcmF0aW9uLWluLWFub3RoZXItamFyL2VqYi9jb20vYWNtZS9lamIvaW1wbC9IZWxsb1NpbmdsZXRvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9lamIvY29tL2FjbWUvZWpiL2ltcGwvSGVsbG9TaW5nbGV0b24uamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgIEBQZXJzaXN0ZW5jZVVuaXQodW5pdE5hbWUgPSAicHUxIikKICAgICBAVGVzdERhdGFiYXNlCiAgICAgcHJpdmF0ZSBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBlbWY7Ci0gICAgCisKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIvZWpiL2NvbS9hY21lL2VqYi9pbXBsL1NpbmdsZXRvbjQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9lamIvY29tL2FjbWUvZWpiL2ltcGwvU2luZ2xldG9uNC5qYXZhCmluZGV4IGE1NGM1OWUuLjZhYTFmMjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9lamIvY29tL2FjbWUvZWpiL2ltcGwvU2luZ2xldG9uNC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9lamIvY29tL2FjbWUvZWpiL2ltcGwvU2luZ2xldG9uNC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuNDo6aW5pdCgpIik7CiAgICAgfQotICAgIAorCiAgICAgQFByZURlc3Ryb3kKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW40OjpkZXN0cm95KCkiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9saWIvY29tL2FjbWUvdXRpbC9SZXNvdXJjZXNQcm9kdWNlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi13aXRoLXJlc291cmNlLWRlY2xhcmF0aW9uLWluLWFub3RoZXItamFyL2xpYi9jb20vYWNtZS91dGlsL1Jlc291cmNlc1Byb2R1Y2VyLmphdmEKaW5kZXggZWEwMjlhYy4uOTZlMmQwYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi13aXRoLXJlc291cmNlLWRlY2xhcmF0aW9uLWluLWFub3RoZXItamFyL2xpYi9jb20vYWNtZS91dGlsL1Jlc291cmNlc1Byb2R1Y2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi13aXRoLXJlc291cmNlLWRlY2xhcmF0aW9uLWluLWFub3RoZXItamFyL2xpYi9jb20vYWNtZS91dGlsL1Jlc291cmNlc1Byb2R1Y2VyLmphdmEKQEAgLTI4LDEwICsyOCwxMCBAQAogICAgIEBQZXJzaXN0ZW5jZUNvbnRleHQodW5pdE5hbWUgPSAicHUxIikKICAgICBAVGVzdERhdGFiYXNlCiAgICAgRW50aXR5TWFuYWdlciBjdXN0b21lckRhdGFiYXNlUGVyc2lzdGVuY2VVbml0OwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3REZXBlbmRlbnRCZWFuSW5MaWIgZm9vOwotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaXNJbmplY3Rpb25TdWNjZXNzZnVsKCl7CiAgICAgICAgIHJldHVybiAoZm9vICE9IG51bGwpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9saWIvY29tL2FjbWUvdXRpbC9UZXN0RGVwZW5kZW50QmVhbkluTGliLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIvbGliL2NvbS9hY21lL3V0aWwvVGVzdERlcGVuZGVudEJlYW5JbkxpYi5qYXZhCmluZGV4IDk1OTZiMjIuLjYxZDQ5YjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9saWIvY29tL2FjbWUvdXRpbC9UZXN0RGVwZW5kZW50QmVhbkluTGliLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi13aXRoLXJlc291cmNlLWRlY2xhcmF0aW9uLWluLWFub3RoZXItamFyL2xpYi9jb20vYWNtZS91dGlsL1Rlc3REZXBlbmRlbnRCZWFuSW5MaWIuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogICAgIHB1YmxpYyBUZXN0RGVwZW5kZW50QmVhbkluTGliKCkgewogICAgICAgICBzdXBlcigpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZm9vKCl7CiAgICAgICAgIHJldHVybiAiZm9vISI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi13aXRoLXJlc291cmNlLWRlY2xhcmF0aW9uLWluLWFub3RoZXItamFyL2xpYi9jb20vYWNtZS91dGlsL1Rlc3RNYW5hZ2VkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi13aXRoLXJlc291cmNlLWRlY2xhcmF0aW9uLWluLWFub3RoZXItamFyL2xpYi9jb20vYWNtZS91dGlsL1Rlc3RNYW5hZ2VkQmVhbi5qYXZhCmluZGV4IDVkODVhMGYuLjhjNTBiNjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9saWIvY29tL2FjbWUvdXRpbC9UZXN0TWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIvbGliL2NvbS9hY21lL3V0aWwvVGVzdE1hbmFnZWRCZWFuLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIHB1YmxpYyBjbGFzcyBUZXN0TWFuYWdlZEJlYW4gewogICAgIEBJbmplY3QKICAgICBwcml2YXRlIFRlc3REZXBlbmRlbnRCZWFuSW5MaWIgdGRibDsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGlzSW5qZWN0aW9uU3VjY2Vzc2Z1bCgpewogICAgICAgICByZXR1cm4gdGRibCAhPSBudWxsOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci93YXIvY29tL2FjbWUvc2VydmxldC9IZWxsb1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci93YXIvY29tL2FjbWUvc2VydmxldC9IZWxsb1NlcnZsZXQuamF2YQppbmRleCBmNmE5MDRkLi42Zjg3M2U1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIvd2FyL2NvbS9hY21lL3NlcnZsZXQvSGVsbG9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi13aXRoLXJlc291cmNlLWRlY2xhcmF0aW9uLWluLWFub3RoZXItamFyL3dhci9jb20vYWNtZS9zZXJ2bGV0L0hlbGxvU2VydmxldC5qYXZhCkBAIC00MSw1NiArNDEsNTYgQEAKIEBTdXBwcmVzc1dhcm5pbmdzKCJzZXJpYWwiKQogcHVibGljIGNsYXNzIEhlbGxvU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKICAgICBTdHJpbmcgbXNnID0gIiI7Ci0gICAgCisKICAgICBARUpCKG5hbWUgPSAiamF2YTptb2R1bGUvbTEiLCBiZWFuTmFtZSA9ICJIZWxsb1NpbmdsZXRvbiIsIGJlYW5JbnRlcmZhY2UgPSBIZWxsby5jbGFzcykKICAgICBIZWxsbyBoOwotICAgIAorCiAgICAgQFBlcnNpc3RlbmNlVW5pdCh1bml0TmFtZSA9ICJwdTEiKQogICAgIEBUZXN0RGF0YWJhc2UKICAgICBwcml2YXRlIEVudGl0eU1hbmFnZXJGYWN0b3J5IGVtZjsKIAogICAgIEBJbmplY3QKICAgICBwcml2YXRlIFJlc291cmNlc1Byb2R1Y2VyIHJwOwotICAgIAorCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgVGVzdERlcGVuZGVudEJlYW5JbkxpYiBmYjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwcml2YXRlIFRlc3RNYW5hZ2VkQmVhbiB0bWI7Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCiAgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2VydmxldDo6ZG9HZXQiKTsKICAgICAgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGNoZWNrRm9yTnVsbChlbWYsICJJbmplY3Rpb24gb2YgRU1GIGZhaWxlZCBpbiBTZXJ2bGV0Iik7CiAgICAgICAgIC8vZW5zdXJlIEVNRiB3b3JrcyEKICAgICAgICAgZW1mLmNyZWF0ZUVudGl0eU1hbmFnZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgLy9jYWxsIFNpbmdsZXRvbiBFSkIKICAgICAgICAgU3RyaW5nIHJlc3BvbnNlID0gaC5oZWxsbygpOwogICAgICAgICBpZighcmVzcG9uc2UuZXF1YWxzKEhlbGxvLkhFTExPX1RFU1RfU1RSSU5HKSkKICAgICAgICAgICAgIG1zZyArPSAiSW52b2NhdGlvbiBvZiBIZWxsbyBTaW5nZXRvbiBFSkIgZmFpbGVkOm1zZz0iICsgcmVzcG9uc2U7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghcnAuaXNJbmplY3Rpb25TdWNjZXNzZnVsKCkpCiAgICAgICAgICAgICBtc2cgKz0gIkluamVjdGlvbiBvZiBhIGJlYW4gaW4gbGliIGRpcmVjdG9yeSBpbnRvIGFub3RoZXIgIiArCi0gICAgICAgICAgICAJCSJCZWFuIGluIGxpYiBkaXJlY3RvcnkgZmFpbGVkIjsKKyAgICAgICAgICAgICAgICAgICAgIkJlYW4gaW4gbGliIGRpcmVjdG9yeSBmYWlsZWQiOwogICAgICAgICBjaGVja0Zvck51bGwoZmIsICJJbmplY3Rpb24gb2YgYSBiZWFuIHRoYXQgaXMgcGxhY2VkIGluIGxpYiBkaXJlY3RvcnkgIiArCi0gICAgICAgIAkJImludG8gYSBTZXJ2bGV0IHRoYXQgaXMgcGxhY2VkIGluIGEgV0FSIGZhaWxlZCIpOworICAgICAgICAgICAgICAgICJpbnRvIGEgU2VydmxldCB0aGF0IGlzIHBsYWNlZCBpbiBhIFdBUiBmYWlsZWQiKTsKICAgICAgICAgY2hlY2tGb3JOdWxsKHRtYiwgIkluamVjdGlvbiBvZiBhIE1hbmFnZWQgYmVhbiB0aGF0IGlzIHBsYWNlZCBpbiBsaWIgZGlyZWN0b3J5ICIgKwogICAgICAgICAiaW50byBhIFNlcnZsZXQgdGhhdCBpcyBwbGFjZWQgaW4gYSBXQVIgZmFpbGVkIik7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghcnAuaXNJbmplY3Rpb25TdWNjZXNzZnVsKCkpCiAgICAgICAgICAgICBtc2cgKz0gIkluamVjdGlvbiBvZiBhIGJlYW4gaW4gbGliIGRpcmVjdG9yeSBpbnRvIGFub3RoZXIgQmVhbiAiICsKLSAgICAgICAgICAgIAkJImluIGxpYiBkaXJlY3RvcnkgZmFpbGVkIjsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICJpbiBsaWIgZGlyZWN0b3J5IGZhaWxlZCI7CisKICAgICAgICAgaWYgKCF0bWIuaXNJbmplY3Rpb25TdWNjZXNzZnVsKCkpCiAgICAgICAgICAgICBtc2cgKz0gIkluamVjdGlvbiBvZiBhIEJlYW4gcGxhY2VkIGluIGxpYiBkaXIgaW50byBhICIgKwotICAgICAgICAgICAgCQkiTWFuYWdlZEJlYW4gcGxhY2VkIGluIGxpYiBkaXIgZmFpbGVkIjsKLSAgICAgICAgCi0gICAgICAgIAorICAgICAgICAgICAgICAgICAgICAiTWFuYWdlZEJlYW4gcGxhY2VkIGluIGxpYiBkaXIgZmFpbGVkIjsKKworCiAgICAgICAgIG91dC5wcmludGxuKG1zZyk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDQxMWVjOS4uNzJlMzQyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1lbS1yZXNvdXJjZS1pbmplY3Rpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi9idWlsZC54bWwKaW5kZXggMjk1ZDA4Ni4uZWI3OTBiZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi9idWlsZC54bWwKQEAgLTMzLDc1ICszMyw3NSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGNyZWF0ZS1yZXNvdXJjZXMsZGVwbG95LHJ1bix1bmRlcGxveSxkZWxldGUtcmVzb3VyY2VzIiAvPgogCi0JPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KLQkJPGRlbGV0ZT4KLQkJCTxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiIC8+Ci0JCQk8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iIC8+CisgICAgICAgIDxkZWxldGU+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgorICAgICAgICA8L2RlbGV0ZT4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0IiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotCQk8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgotCQk8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+Ci0JCQk8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLQkJPC9hbnRjYWxsPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgogCi0JCTxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIiAvPgorICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIgLz4KIAotCTwvdGFyZ2V0PgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCi0JPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJjcmVhdGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCiAKLQk8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgotCQkJPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9IiAvPgotCQkJPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9IiAvPgotCQkJPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iIC8+Ci0JCQk8Y2xhc3NwYXRoPgotCQkJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgLz4KLQkJCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249ImNsaWVudCIgLz4KLQkJCTwvY2xhc3NwYXRoPgotCQk8L2phdmE+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIgLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5wb3J0fSIgLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9IiAvPgorICAgICAgICAgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIC8+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJjbGllbnQiIC8+CisgICAgICAgICAgICA8L2NsYXNzcGF0aD4KKyAgICAgICAgPC9qYXZhPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KLQkJPC9hbnRjYWxsPgorICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgorICAgICAgICA8L2FudGNhbGw+CiAKLQkJPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1jb25ucG9vbC1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKaW5kZXggMjllMTM3YS4uZTViZTRkMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCkBAIC0xOSw2ICsxOSw2IEBACiBwdWJsaWMgaW50ZXJmYWNlIFRlc3RCZWFuSW50ZXJmYWNlIHsKICAgICBwdWJsaWMgdm9pZCBtMSgpOwogICAgIHB1YmxpYyB2b2lkIG0yKCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHRlc3REYXRhc291cmNlSW5qZWN0aW9uKCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEKaW5kZXggYjA0N2IzZC4uMDFkZWY0NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YQpAQCAtMzAsOCArMzAsOCBAQAogQFByZWZlcnJlZAogcHVibGljIGNsYXNzIFRlc3RCZWFuIGltcGxlbWVudHMgVGVzdEJlYW5JbnRlcmZhY2V7CiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIHRlc3RCZWFuSW52b2tlZCA9IGZhbHNlOwotICAgIAotICAgIEBJbmplY3QgLy9AVGVzdERhdGFiYXNlIAorCisgICAgQEluamVjdCAvL0BUZXN0RGF0YWJhc2UKICAgICBFbnRpdHlNYW5hZ2VyIGVtZjsKIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9KUEFSZXNvdXJjZUluamVjdGlvblNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L3NlcnZsZXQvSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0LmphdmEKaW5kZXggNDE4OTE0NC4uMWVkNzAxMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9KUEFSZXNvdXJjZUluamVjdGlvblNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0pQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldC5qYXZhCkBAIC00Nyw3ICs0Nyw3IEBACiAKICAgICBwcml2YXRlIEBSZXNvdXJjZQogICAgIFVzZXJUcmFuc2FjdGlvbiB1dHg7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgQFByZWZlcnJlZAogICAgIFRlc3RCZWFuSW50ZXJmYWNlIHRiaTsKQEAgLTU5LDExICs1OSwxMSBAQAogICAgICAgICB3cml0ZXIud3JpdGUoIkhlbGxvIGZyb20gU2VydmxldCAzLjAuIik7CiAgICAgICAgIFN0cmluZyBtc2cgPSAiIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKUEFSZXNvdXJjZUluamVjdGlvblNlcnZsZXQ6OkBQZXJzaXN0ZW5jZVVuaXQgIiArCi0gICAgICAgIAkJIkNESSBFbnRpdHlNYW5hZ2VyRmFjdG9yeT0iICsgZW1mX2F0X2luaik7CisgICAgICAgICAgICAgICAgIkNESSBFbnRpdHlNYW5hZ2VyRmFjdG9yeT0iICsgZW1mX2F0X2luaik7CiAKICAgICAgICAgRW50aXR5TWFuYWdlciBlbSA9IGVtZl9hdF9pbmo7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0OjpjcmVhdGVFTSIgKwotICAgICAgICAJCSJFbnRpdHlNYW5hZ2VyPSIgKyBlbSk7CisgICAgICAgICAgICAgICAgIkVudGl0eU1hbmFnZXI9IiArIGVtKTsKICAgICAgICAgU3RyaW5nIHRlc3RjYXNlID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInRlc3RjYXNlIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdGNhc2U9IiArIHRlc3RjYXNlKTsKIApAQCAtNzcsNyArNzcsNyBAQAogICAgICAgICAgICAgfSBlbHNlIGlmICgibGxxdWVyeSIuZXF1YWxzKHRlc3RjYXNlKSkgewogICAgICAgICAgICAgICAgIHN0YXR1cyA9IGp0LmxhenlMb2FkaW5nQnlRdWVyeSgiQ2FybGEiKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoImxsaW5qIi5lcXVhbHModGVzdGNhc2UpKXsKLSAgICAgICAgICAgICAgICBzdGF0dXMgPSAoKHRiaSAhPSBudWxsKSAmJiAKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAoKHRiaSAhPSBudWxsKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgKHRiaS50ZXN0RGF0YXNvdXJjZUluamVjdGlvbigpLnRyaW0oKS5sZW5ndGgoKT09MCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHN0YXR1cykgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvdXRpbC9KUEFSZXNvdXJjZVByb2R1Y2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC91dGlsL0pQQVJlc291cmNlUHJvZHVjZXIuamF2YQppbmRleCA5ODRiNDdkLi4zYTA5YTdiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC91dGlsL0pQQVJlc291cmNlUHJvZHVjZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC91dGlsL0pQQVJlc291cmNlUHJvZHVjZXIuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogQFNpbmdsZXRvbgogcHVibGljIGNsYXNzIEpQQVJlc291cmNlUHJvZHVjZXIgewogICAgIEBQcm9kdWNlcyBAUGVyc2lzdGVuY2VDb250ZXh0KHVuaXROYW1lPSJwdTEiKQotICAgIC8vQFRlc3REYXRhYmFzZSAKKyAgICAvL0BUZXN0RGF0YWJhc2UKICAgICBFbnRpdHlNYW5hZ2VyIGN1c3RvbWVyRGF0YWJhc2VQZXJzaXN0ZW5jZVVuaXQ7CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlLXR5cGVzYWZlLWluamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2UtdHlwZXNhZmUtaW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzU0M2U0Yy4uNzIxNzZkNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2UtdHlwZXNhZmUtaW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2UtdHlwZXNhZmUtaW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdHlwZXNhZmUtamF2YWVlLXJlc291cmNlLWluamVjdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2UtdHlwZXNhZmUtaW5qZWN0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlLXR5cGVzYWZlLWluamVjdGlvbi9idWlsZC54bWwKaW5kZXggMjk1ZDA4Ni4uZWI3OTBiZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2UtdHlwZXNhZmUtaW5qZWN0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZS10eXBlc2FmZS1pbmplY3Rpb24vYnVpbGQueG1sCkBAIC0zMyw3NSArMzMsNzUgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxjcmVhdGUtcmVzb3VyY2VzLGRlcGxveSxydW4sdW5kZXBsb3ksZGVsZXRlLXJlc291cmNlcyIgLz4KIAotCTx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iIC8+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgotCQkJPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgotCQk8L2RlbGV0ZT4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgorICAgICAgICA8ZGVsZXRlPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KKyAgICAgICAgPC9kZWxldGU+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0IiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLQkJPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgotCQkJPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0JCTwvYW50Y2FsbD4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KIAotCQk8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIgLz4KKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiIC8+CiAKLQk8L3RhcmdldD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAotCTx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAogCi0JPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KLQkJCTxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIgLz4KLQkJCTxhcmcgdmFsdWU9IiR7aHR0cC5wb3J0fSIgLz4KLQkJCTxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9IiAvPgotCQkJPGNsYXNzcGF0aD4KLQkJCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIC8+Ci0JCQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJjbGllbnQiIC8+Ci0JCQk8L2NsYXNzcGF0aD4KLQkJPC9qYXZhPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iIC8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iIC8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIgLz4KKyAgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiAvPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iY2xpZW50IiAvPgorICAgICAgICAgICAgPC9jbGFzc3BhdGg+CisgICAgICAgIDwvamF2YT4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+Ci0JCTwvYW50Y2FsbD4KKyAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgogCi0JCTxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1jb25ucG9vbC1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlLXR5cGVzYWZlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlLXR5cGVzYWZlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQppbmRleCAyOWUxMzdhLi5lNWJlNGQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZS10eXBlc2FmZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2UtdHlwZXNhZmUtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCkBAIC0xOSw2ICsxOSw2IEBACiBwdWJsaWMgaW50ZXJmYWNlIFRlc3RCZWFuSW50ZXJmYWNlIHsKICAgICBwdWJsaWMgdm9pZCBtMSgpOwogICAgIHB1YmxpYyB2b2lkIG0yKCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHRlc3REYXRhc291cmNlSW5qZWN0aW9uKCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZS10eXBlc2FmZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlLXR5cGVzYWZlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhCmluZGV4IDMzOGEzYmYuLmI0NmRkMjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlLXR5cGVzYWZlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlLXR5cGVzYWZlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhCkBAIC0yOSw4ICsyOSw4IEBACiBAUHJlZmVycmVkCiBwdWJsaWMgY2xhc3MgVGVzdEJlYW4gaW1wbGVtZW50cyBUZXN0QmVhbkludGVyZmFjZXsKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdGVzdEJlYW5JbnZva2VkID0gZmFsc2U7Ci0gICAgCi0gICAgQEluamVjdCBAVGVzdERhdGFiYXNlIAorCisgICAgQEluamVjdCBAVGVzdERhdGFiYXNlCiAgICAgRGF0YVNvdXJjZSBkczsKIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2UtdHlwZXNhZmUtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0RhdGFiYXNlTWFuYWdlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2UtdHlwZXNhZmUtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0RhdGFiYXNlTWFuYWdlci5qYXZhCmluZGV4IDZjNTk1Y2QuLjI1N2ZlYWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlLXR5cGVzYWZlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9EYXRhYmFzZU1hbmFnZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZS10eXBlc2FmZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L3NlcnZsZXQvRGF0YWJhc2VNYW5hZ2VyLmphdmEKQEAgLTIzLDkgKzIzLDkgQEAKIGltcG9ydCB0ZXN0LmJlYW5zLmFydGlmYWN0cy5UZXN0RGF0YWJhc2U7CiAKIHB1YmxpYyBjbGFzcyBEYXRhYmFzZU1hbmFnZXIgewotICAgIEBQcm9kdWNlcyAKKyAgICBAUHJvZHVjZXMKICAgICBAVGVzdERhdGFiYXNlCi0gICAgQFJlc291cmNlKG5hbWUgPSAiamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiwgCisgICAgQFJlc291cmNlKG5hbWUgPSAiamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiwKICAgICAgICAgICAgIG1hcHBlZE5hbWUgPSAiamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIikKICAgICBEYXRhU291cmNlIGRzOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZS10eXBlc2FmZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L3NlcnZsZXQvVHlwZXNhZmVKYXZhRUVSZXNvdXJjZUluamVjdGlvblRlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZS10eXBlc2FmZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L3NlcnZsZXQvVHlwZXNhZmVKYXZhRUVSZXNvdXJjZUluamVjdGlvblRlc3RTZXJ2bGV0LmphdmEKaW5kZXggZDI4MjczYy4uOGJkMzJkNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2UtdHlwZXNhZmUtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1R5cGVzYWZlSmF2YUVFUmVzb3VyY2VJbmplY3Rpb25UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlLXR5cGVzYWZlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9UeXBlc2FmZUphdmFFRVJlc291cmNlSW5qZWN0aW9uVGVzdFNlcnZsZXQuamF2YQpAQCAtMzYsMjcgKzM2LDI3IEBACiAgICAgQEluamVjdAogICAgIEBQcmVmZXJyZWQKICAgICBUZXN0QmVhbkludGVyZmFjZSB0YjsKLSAgICAKKwogICAgIEBJbmplY3QgQFRlc3REYXRhYmFzZQogICAgIERhdGFTb3VyY2UgZHM7Ci0gICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgd3JpdGVyID0gcmVzLmdldFdyaXRlcigpOwogICAgICAgICB3cml0ZXIud3JpdGUoIkhlbGxvIGZyb20gU2VydmxldCAzLjAuIik7CiAgICAgICAgIFN0cmluZyBtc2cgPSAiIjsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGRzID09IG51bGwpCiAgICAgICAgICAgICBtc2cgKz0gInR5cGVzYWZlIEluamVjdGlvbiBvZiBkYXRhc291cmNlIGludG8gYSBzZXJ2bGV0IGZhaWxlZCI7CiAKICAgICAgICAgaWYgKHRiID09IG51bGwpCiAgICAgICAgICAgICBtc2cgKz0gIkluamVjdGlvbiBvZiByZXF1ZXN0IHNjb3BlZCBiZWFuIGZhaWxlZCI7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICh0Yi50ZXN0RGF0YXNvdXJjZUluamVjdGlvbigpLnRyaW0oKS5sZW5ndGgoKSAhPSAwKQogICAgICAgICAgICAgbXNnICs9IHRiLnRlc3REYXRhc291cmNlSW5qZWN0aW9uKCk7CiAKLSAgICAgICAgCisKIAogICAgICAgICB3cml0ZXIud3JpdGUobXNnICsgIlxuIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC1pbi1saWJyYXJ5LWphci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC1pbi1saWJyYXJ5LWphci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQ4MDYxNDkuLjczMzFjY2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQtaW4tbGlicmFyeS1qYXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkLWluLWxpYnJhcnktamFyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tam1zLXJlc291cmNlLWluamVjdGlvbi1pbi1saWJyYXJ5LWJlYW4tYXJjaGl2ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC1pbi1saWJyYXJ5LWphci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkLWluLWxpYnJhcnktamFyL2J1aWxkLnhtbAppbmRleCA4ZGYyYzI0Li42MGQ0MjQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkLWluLWxpYnJhcnktamFyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkLWluLWxpYnJhcnktamFyL2J1aWxkLnhtbApAQCAtMzMsMTUgKzMzLDE1IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsY3JlYXRlLXJlc291cmNlcyxkZXBsb3kscnVuLHVuZGVwbG95LGRlbGV0ZS1yZXNvdXJjZXMiIC8+CiAKLQk8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KLQkJCTxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KKyAgICAgICAgPGRlbGV0ZT4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiIC8+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiIC8+CisgICAgICAgIDwvZGVsZXRlPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDwhLS0gY29tcGlsZSBhbmQgY3JlYXRlIGxpYnJhcnkgamFyIC0tPgogICAgICAgICA8bWtkaXIgZGlyPSJ0bXAiLz4KICAgICAgICAgPG1rZGlyIGRpcj0idG1wL01FVEEtSU5GIi8+CkBAIC01NywzNCArNTcsMzQgQEAKICAgICAgICAgPC9qYXI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgbGlicmFyeSBqYXIgYXQgbGliL3Byb2R1Y2VyLWxpYnJhcnkuamFyIi8+CiAKLQkJPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0IiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLQkJPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgotCQkJPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0JCTwvYW50Y2FsbD4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KIAotCQk8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIgLz4KKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiIC8+CiAKLQk8L3RhcmdldD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAotCTx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC05MiwyNCArOTIsMjQgQEAKICAgICA8L3RhcmdldD4KIAogCi0JPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KLQkJCTxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIgLz4KLQkJCTxhcmcgdmFsdWU9IiR7aHR0cC5wb3J0fSIgLz4KLQkJCTxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9IiAvPgotCQkJPGNsYXNzcGF0aD4KLQkJCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIC8+Ci0JCQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJjbGllbnQiIC8+Ci0JCQk8L2NsYXNzcGF0aD4KLQkJPC9qYXZhPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iIC8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iIC8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIgLz4KKyAgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiAvPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iY2xpZW50IiAvPgorICAgICAgICAgICAgPC9jbGFzc3BhdGg+CisgICAgICAgIDwvamF2YT4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIiAvPgorICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIiAvPgogICAgICAgICA8ZGVsZXRlIGZpbGU9ImxpYi9wcm9kdWNlci1saWJyYXJ5LmphciIvPgotCTwvdGFyZ2V0PgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQtaW4tbGlicmFyeS1qYXIvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkLWluLWxpYnJhcnktamFyL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCmluZGV4IDI5ZTEzN2EuLmU1YmU0ZDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQtaW4tbGlicmFyeS1qYXIvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC1pbi1saWJyYXJ5LWphci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQpAQCAtMTksNiArMTksNiBAQAogcHVibGljIGludGVyZmFjZSBUZXN0QmVhbkludGVyZmFjZSB7CiAgICAgcHVibGljIHZvaWQgbTEoKTsKICAgICBwdWJsaWMgdm9pZCBtMigpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyB0ZXN0RGF0YXNvdXJjZUluamVjdGlvbigpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC1pbi1saWJyYXJ5LWphci9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC1pbi1saWJyYXJ5LWphci9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhCmluZGV4IDVkYWFmMzQuLmQzMGUxYzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQtaW4tbGlicmFyeS1qYXIvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkLWluLWxpYnJhcnktamFyL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEKQEAgLTI4LDggKzI4LDggQEAKIEBQcmVmZXJyZWQKIHB1YmxpYyBjbGFzcyBUZXN0QmVhbiBpbXBsZW1lbnRzIFRlc3RCZWFuSW50ZXJmYWNlewogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiB0ZXN0QmVhbkludm9rZWQgPSBmYWxzZTsKLSAgICAKLSAgICBASW5qZWN0IAorCisgICAgQEluamVjdAogICAgIFF1ZXVlIGRzOwogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkLWluLWxpYnJhcnktamFyL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0pNU1Jlc291cmNlSW5qZWN0aW9uSW5MaWJyYXJ5QmVhbkFyY2hpdmVUZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC1pbi1saWJyYXJ5LWphci9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9KTVNSZXNvdXJjZUluamVjdGlvbkluTGlicmFyeUJlYW5BcmNoaXZlVGVzdFNlcnZsZXQuamF2YQppbmRleCA2M2ZmNTJkLi4wMGRhMjE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkLWluLWxpYnJhcnktamFyL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0pNU1Jlc291cmNlSW5qZWN0aW9uSW5MaWJyYXJ5QmVhbkFyY2hpdmVUZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQtaW4tbGlicmFyeS1qYXIvc2VydmxldC90ZXN0L3NlcnZsZXQvSk1TUmVzb3VyY2VJbmplY3Rpb25JbkxpYnJhcnlCZWFuQXJjaGl2ZVRlc3RTZXJ2bGV0LmphdmEKQEAgLTM2LDI5ICszNiwyOSBAQAogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgVGVzdEJlYW5JbnRlcmZhY2UgdGI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSBRdWV1ZSBxdWV1ZTsKIAogICAgIEBJbmplY3QKICAgICBwcml2YXRlIFNlc3Npb24gc2Vzc2lvbjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlcnZpY2UoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewogCiAgICAgICAgIFByaW50V3JpdGVyIHdyaXRlciA9IHJlcy5nZXRXcml0ZXIoKTsKICAgICAgICAgd3JpdGVyLndyaXRlKCJIZWxsbyBmcm9tIFNlcnZsZXQgMy4wLiIpOwogICAgICAgICBTdHJpbmcgbXNnID0gIiI7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChxdWV1ZSA9PSBudWxsKQogICAgICAgICAgICAgbXNnICs9ICJ0eXBlc2FmZSBJbmplY3Rpb24gb2YgcXVldWUgaW50byBhIHNlcnZsZXQgZmFpbGVkIjsKIAogICAgICAgICBpZiAoc2Vzc2lvbiA9PSBudWxsKQogICAgICAgICAgICAgbXNnICs9ICJ0eXBlc2FmZSBJbmplY3Rpb24gb2YgU2Vzc2lvbiBpbnRvIGEgc2VydmxldCBmYWlsZWQiOwotICAgICAgICAKKwogICAgICAgICBpZiAodGIgPT0gbnVsbCkKICAgICAgICAgICAgIG1zZyArPSAiSW5qZWN0aW9uIG9mIHJlcXVlc3Qgc2NvcGVkIGJlYW4gZmFpbGVkIjsKLSAgICAgICAgCisKICAgICAgICAgaWYgKHRiLnRlc3REYXRhc291cmNlSW5qZWN0aW9uKCkudHJpbSgpLmxlbmd0aCgpICE9IDApCiAgICAgICAgICAgICBtc2cgKz0gdGIudGVzdERhdGFzb3VyY2VJbmplY3Rpb24oKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDY1YTYyMDMuLjc2NWE1OTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tam1zLXJlc291cmNlLWluamVjdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkL2J1aWxkLnhtbAppbmRleCAxMzgwZTZiLi45NjkzZGZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkL2J1aWxkLnhtbApAQCAtMzMsNDMgKzMzLDQzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsY3JlYXRlLXJlc291cmNlcyxkZXBsb3kscnVuLHVuZGVwbG95LGRlbGV0ZS1yZXNvdXJjZXMiIC8+CiAKLQk8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KLQkJCTxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KKyAgICAgICAgPGRlbGV0ZT4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiIC8+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiIC8+CisgICAgICAgIDwvZGVsZXRlPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+Ci0JCTxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KLQkJCTxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotCQk8L2FudGNhbGw+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgorICAgICAgICA8L2FudGNhbGw+CiAKLQkJPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiIC8+CisgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIiAvPgogCi0JPC90YXJnZXQ+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKLQk8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKIAotCTx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+Ci0JCQk8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iIC8+Ci0JCQk8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iIC8+Ci0JCQk8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIgLz4KLQkJCTxjbGFzc3BhdGg+Ci0JCQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiAvPgotCQkJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iY2xpZW50IiAvPgotCQkJPC9jbGFzc3BhdGg+Ci0JCTwvamF2YT4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9IiAvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9IiAvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iIC8+CisgICAgICAgICAgICA8Y2xhc3NwYXRoPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgLz4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImNsaWVudCIgLz4KKyAgICAgICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICA8L2phdmE+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQppbmRleCAyOWUxMzdhLi5lNWJlNGQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKQEAgLTE5LDYgKzE5LDYgQEAKIHB1YmxpYyBpbnRlcmZhY2UgVGVzdEJlYW5JbnRlcmZhY2UgewogICAgIHB1YmxpYyB2b2lkIG0xKCk7CiAgICAgcHVibGljIHZvaWQgbTIoKTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgdGVzdERhdGFzb3VyY2VJbmplY3Rpb24oKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YQppbmRleCA1ZGFhZjM0Li5kMzBlMWMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhCkBAIC0yOCw4ICsyOCw4IEBACiBAUHJlZmVycmVkCiBwdWJsaWMgY2xhc3MgVGVzdEJlYW4gaW1wbGVtZW50cyBUZXN0QmVhbkludGVyZmFjZXsKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdGVzdEJlYW5JbnZva2VkID0gZmFsc2U7Ci0gICAgCi0gICAgQEluamVjdCAKKworICAgIEBJbmplY3QKICAgICBRdWV1ZSBkczsKIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9KTVNSZXNvdXJjZUluamVjdGlvbkluTGlicmFyeUJlYW5BcmNoaXZlVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQvc2VydmxldC90ZXN0L3NlcnZsZXQvSk1TUmVzb3VyY2VJbmplY3Rpb25JbkxpYnJhcnlCZWFuQXJjaGl2ZVRlc3RTZXJ2bGV0LmphdmEKaW5kZXggNjNmZjUyZC4uMDBkYTIxNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9KTVNSZXNvdXJjZUluamVjdGlvbkluTGlicmFyeUJlYW5BcmNoaXZlVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0pNU1Jlc291cmNlSW5qZWN0aW9uSW5MaWJyYXJ5QmVhbkFyY2hpdmVUZXN0U2VydmxldC5qYXZhCkBAIC0zNiwyOSArMzYsMjkgQEAKICAgICBASW5qZWN0CiAgICAgQFByZWZlcnJlZAogICAgIFRlc3RCZWFuSW50ZXJmYWNlIHRiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgUXVldWUgcXVldWU7CiAKICAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSBTZXNzaW9uIHNlc3Npb247Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXJ2aWNlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKIAogICAgICAgICBQcmludFdyaXRlciB3cml0ZXIgPSByZXMuZ2V0V3JpdGVyKCk7CiAgICAgICAgIHdyaXRlci53cml0ZSgiSGVsbG8gZnJvbSBTZXJ2bGV0IDMuMC4iKTsKICAgICAgICAgU3RyaW5nIG1zZyA9ICIiOwotICAgICAgICAKKwogICAgICAgICBpZiAocXVldWUgPT0gbnVsbCkKICAgICAgICAgICAgIG1zZyArPSAidHlwZXNhZmUgSW5qZWN0aW9uIG9mIHF1ZXVlIGludG8gYSBzZXJ2bGV0IGZhaWxlZCI7CiAKICAgICAgICAgaWYgKHNlc3Npb24gPT0gbnVsbCkKICAgICAgICAgICAgIG1zZyArPSAidHlwZXNhZmUgSW5qZWN0aW9uIG9mIFNlc3Npb24gaW50byBhIHNlcnZsZXQgZmFpbGVkIjsKLSAgICAgICAgCisKICAgICAgICAgaWYgKHRiID09IG51bGwpCiAgICAgICAgICAgICBtc2cgKz0gIkluamVjdGlvbiBvZiByZXF1ZXN0IHNjb3BlZCBiZWFuIGZhaWxlZCI7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICh0Yi50ZXN0RGF0YXNvdXJjZUluamVjdGlvbigpLnRyaW0oKS5sZW5ndGgoKSAhPSAwKQogICAgICAgICAgICAgbXNnICs9IHRiLnRlc3REYXRhc291cmNlSW5qZWN0aW9uKCk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLW5vbi1zZXJpYWxpemFibGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLW5vbi1zZXJpYWxpemFibGUvYnVpbGQucHJvcGVydGllcwppbmRleCBmYTczYjMzLi42YmVhZDU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1ub24tc2VyaWFsaXphYmxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tbm9uLXNlcmlhbGl6YWJsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpwYS1yZXNvdXJjZS1pbmplY3Rpb24tbm9uLXNlcmlhbGl6YWJsZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tbm9uLXNlcmlhbGl6YWJsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1ub24tc2VyaWFsaXphYmxlL2J1aWxkLnhtbAppbmRleCAyOTVkMDg2Li5lYjc5MGJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1ub24tc2VyaWFsaXphYmxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1ub24tc2VyaWFsaXphYmxlL2J1aWxkLnhtbApAQCAtMzMsNzUgKzMzLDc1IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsY3JlYXRlLXJlc291cmNlcyxkZXBsb3kscnVuLHVuZGVwbG95LGRlbGV0ZS1yZXNvdXJjZXMiIC8+CiAKLQk8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KLQkJCTxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KKyAgICAgICAgPGRlbGV0ZT4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiIC8+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiIC8+CisgICAgICAgIDwvZGVsZXRlPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+Ci0JCTxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KLQkJCTxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotCQk8L2FudGNhbGw+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgorICAgICAgICA8L2FudGNhbGw+CiAKLQkJPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiIC8+CisgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIiAvPgogCi0JPC90YXJnZXQ+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKLQk8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKIAotCTx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+Ci0JCQk8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iIC8+Ci0JCQk8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iIC8+Ci0JCQk8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIgLz4KLQkJCTxjbGFzc3BhdGg+Ci0JCQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiAvPgotCQkJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iY2xpZW50IiAvPgotCQkJPC9jbGFzc3BhdGg+Ci0JCTwvamF2YT4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9IiAvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9IiAvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iIC8+CisgICAgICAgICAgICA8Y2xhc3NwYXRoPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgLz4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImNsaWVudCIgLz4KKyAgICAgICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICA8L2phdmE+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgotCQk8L2FudGNhbGw+CisgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KIAotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1ub24tc2VyaWFsaXphYmxlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tbm9uLXNlcmlhbGl6YWJsZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQppbmRleCAyOWUxMzdhLi5lNWJlNGQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1ub24tc2VyaWFsaXphYmxlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLW5vbi1zZXJpYWxpemFibGUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKQEAgLTE5LDYgKzE5LDYgQEAKIHB1YmxpYyBpbnRlcmZhY2UgVGVzdEJlYW5JbnRlcmZhY2UgewogICAgIHB1YmxpYyB2b2lkIG0xKCk7CiAgICAgcHVibGljIHZvaWQgbTIoKTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgdGVzdERhdGFzb3VyY2VJbmplY3Rpb24oKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLW5vbi1zZXJpYWxpemFibGUvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLW5vbi1zZXJpYWxpemFibGUvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YQppbmRleCA2MDA5YmU1Li4wNzY1NWRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1ub24tc2VyaWFsaXphYmxlL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tbm9uLXNlcmlhbGl6YWJsZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhCkBAIC0zMiwxMSArMzIsMTEgQEAKIEBQcmVmZXJyZWQKIHB1YmxpYyBjbGFzcyBUZXN0QmVhbiBpbXBsZW1lbnRzIFRlc3RCZWFuSW50ZXJmYWNlLCBTZXJpYWxpemFibGV7CiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIHRlc3RCZWFuSW52b2tlZCA9IGZhbHNlOwotICAgIAotICAgIEBJbmplY3QgQFRlc3REYXRhYmFzZSAKKworICAgIEBJbmplY3QgQFRlc3REYXRhYmFzZQogICAgIEVudGl0eU1hbmFnZXJGYWN0b3J5IGVtZjsKIAotCS8vSW5qZWN0IGEgbm9uLXNlcmlhbGl6YWJsZSByZXNvdXJjZQorICAgIC8vSW5qZWN0IGEgbm9uLXNlcmlhbGl6YWJsZSByZXNvdXJjZQogICAgIEBJbmplY3QgQFRlc3REYXRhYmFzZQogICAgIEVudGl0eU1hbmFnZXIgZW07CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLW5vbi1zZXJpYWxpemFibGUvc2VydmxldC90ZXN0L3NlcnZsZXQvSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1ub24tc2VyaWFsaXphYmxlL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0pQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldC5qYXZhCmluZGV4IDMyNDc3NTAuLjliODQ3MTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLW5vbi1zZXJpYWxpemFibGUvc2VydmxldC90ZXN0L3NlcnZsZXQvSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tbm9uLXNlcmlhbGl6YWJsZS9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9KUEFSZXNvdXJjZUluamVjdGlvblNlcnZsZXQuamF2YQpAQCAtNDgsNyArNDgsNyBAQAogCiAgICAgcHJpdmF0ZSBAUmVzb3VyY2UKICAgICBVc2VyVHJhbnNhY3Rpb24gdXR4OwotICAgIAorCiAgICAgQEluamVjdAogICAgIEBQcmVmZXJyZWQKICAgICBUZXN0QmVhbkludGVyZmFjZSB0Ymk7CkBAIC02MCwxMSArNjAsMTEgQEAKICAgICAgICAgd3JpdGVyLndyaXRlKCJIZWxsbyBmcm9tIFNlcnZsZXQgMy4wLiIpOwogICAgICAgICBTdHJpbmcgbXNnID0gIiI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0OjpAUGVyc2lzdGVuY2VVbml0ICIgKwotICAgICAgICAJCSJDREkgRW50aXR5TWFuYWdlckZhY3Rvcnk9IiArIGVtZjEpOworICAgICAgICAgICAgICAgICJDREkgRW50aXR5TWFuYWdlckZhY3Rvcnk9IiArIGVtZjEpOwogCiAgICAgICAgIEVudGl0eU1hbmFnZXIgZW0gPSBlbWYxLmNyZWF0ZUVudGl0eU1hbmFnZXIoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKUEFSZXNvdXJjZUluamVjdGlvblNlcnZsZXQ6OmNyZWF0ZUVNIiArCi0gICAgICAgIAkJIkVudGl0eU1hbmFnZXI9IiArIGVtKTsKKyAgICAgICAgICAgICAgICAiRW50aXR5TWFuYWdlcj0iICsgZW0pOwogICAgICAgICBTdHJpbmcgdGVzdGNhc2UgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigidGVzdGNhc2UiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0Y2FzZT0iICsgdGVzdGNhc2UpOwogCkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJsbHF1ZXJ5Ii5lcXVhbHModGVzdGNhc2UpKSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzID0ganQubGF6eUxvYWRpbmdCeVF1ZXJ5KCJDYXJsYSIpOwogICAgICAgICAgICAgfSBlbHNlIGlmICgibGxpbmoiLmVxdWFscyh0ZXN0Y2FzZSkpewotICAgICAgICAgICAgICAgIHN0YXR1cyA9ICgodGJpICE9IG51bGwpICYmIAorICAgICAgICAgICAgICAgIHN0YXR1cyA9ICgodGJpICE9IG51bGwpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAodGJpLnRlc3REYXRhc291cmNlSW5qZWN0aW9uKCkudHJpbSgpLmxlbmd0aCgpPT0wKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoc3RhdHVzKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1ub24tc2VyaWFsaXphYmxlL3NlcnZsZXQvdGVzdC91dGlsL0pQQVJlc291cmNlUHJvZHVjZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLW5vbi1zZXJpYWxpemFibGUvc2VydmxldC90ZXN0L3V0aWwvSlBBUmVzb3VyY2VQcm9kdWNlci5qYXZhCmluZGV4IDk5MTdhY2EuLjU3YjQyMTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLW5vbi1zZXJpYWxpemFibGUvc2VydmxldC90ZXN0L3V0aWwvSlBBUmVzb3VyY2VQcm9kdWNlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLW5vbi1zZXJpYWxpemFibGUvc2VydmxldC90ZXN0L3V0aWwvSlBBUmVzb3VyY2VQcm9kdWNlci5qYXZhCkBAIC0yOCwxMCArMjgsMTAgQEAKIEBTaW5nbGV0b24KIHB1YmxpYyBjbGFzcyBKUEFSZXNvdXJjZVByb2R1Y2VyIHsKICAgICBAUHJvZHVjZXMgQFBlcnNpc3RlbmNlVW5pdCh1bml0TmFtZT0icHUyIikKLSAgICBAVGVzdERhdGFiYXNlIAorICAgIEBUZXN0RGF0YWJhc2UKICAgICBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBjdXN0b21lckRhdGFiYXNlUGVyc2lzdGVuY2VVbml0OwogCiAgICAgQFByb2R1Y2VzIEBQZXJzaXN0ZW5jZUNvbnRleHQodW5pdE5hbWU9InB1MiIpCi0gICAgQFRlc3REYXRhYmFzZSAKKyAgICBAVGVzdERhdGFiYXNlCiAgICAgRW50aXR5TWFuYWdlciBjdXN0b21lckRhdGFiYXNlUGVyc2lzdGVuY2VDb250ZXh0OwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tcGFzc2l2YXRpbmctc2NvcGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXBhc3NpdmF0aW5nLXNjb3BlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODdhZjFlYi4uMDljZTJiMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tcGFzc2l2YXRpbmctc2NvcGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1wYXNzaXZhdGluZy1zY29wZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpwYS1yZXNvdXJjZS1pbmplY3Rpb24tcGFzc2l2YXRpbmctc2NvcGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXBhc3NpdmF0aW5nLXNjb3BlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXBhc3NpdmF0aW5nLXNjb3BlL2J1aWxkLnhtbAppbmRleCAyOTVkMDg2Li5lYjc5MGJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1wYXNzaXZhdGluZy1zY29wZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tcGFzc2l2YXRpbmctc2NvcGUvYnVpbGQueG1sCkBAIC0zMyw3NSArMzMsNzUgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxjcmVhdGUtcmVzb3VyY2VzLGRlcGxveSxydW4sdW5kZXBsb3ksZGVsZXRlLXJlc291cmNlcyIgLz4KIAotCTx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iIC8+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgotCQkJPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgotCQk8L2RlbGV0ZT4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgorICAgICAgICA8ZGVsZXRlPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KKyAgICAgICAgPC9kZWxldGU+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0IiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLQkJPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgotCQkJPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0JCTwvYW50Y2FsbD4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KIAotCQk8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIgLz4KKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiIC8+CiAKLQk8L3RhcmdldD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAotCTx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAogCi0JPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KLQkJCTxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIgLz4KLQkJCTxhcmcgdmFsdWU9IiR7aHR0cC5wb3J0fSIgLz4KLQkJCTxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9IiAvPgotCQkJPGNsYXNzcGF0aD4KLQkJCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIC8+Ci0JCQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJjbGllbnQiIC8+Ci0JCQk8L2NsYXNzcGF0aD4KLQkJPC9qYXZhPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iIC8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iIC8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIgLz4KKyAgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiAvPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iY2xpZW50IiAvPgorICAgICAgICAgICAgPC9jbGFzc3BhdGg+CisgICAgICAgIDwvamF2YT4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+Ci0JCTwvYW50Y2FsbD4KKyAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgogCi0JCTxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1jb25ucG9vbC1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXBhc3NpdmF0aW5nLXNjb3BlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tcGFzc2l2YXRpbmctc2NvcGUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKaW5kZXggMjllMTM3YS4uZTViZTRkMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tcGFzc2l2YXRpbmctc2NvcGUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tcGFzc2l2YXRpbmctc2NvcGUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKQEAgLTE5LDYgKzE5LDYgQEAKIHB1YmxpYyBpbnRlcmZhY2UgVGVzdEJlYW5JbnRlcmZhY2UgewogICAgIHB1YmxpYyB2b2lkIG0xKCk7CiAgICAgcHVibGljIHZvaWQgbTIoKTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgdGVzdERhdGFzb3VyY2VJbmplY3Rpb24oKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXBhc3NpdmF0aW5nLXNjb3BlL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0pQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tcGFzc2l2YXRpbmctc2NvcGUvc2VydmxldC90ZXN0L3NlcnZsZXQvSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0LmphdmEKaW5kZXggNjIwMWY3MC4uMmYwNjAwNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tcGFzc2l2YXRpbmctc2NvcGUvc2VydmxldC90ZXN0L3NlcnZsZXQvSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tcGFzc2l2YXRpbmctc2NvcGUvc2VydmxldC90ZXN0L3NlcnZsZXQvSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0LmphdmEKQEAgLTQ5LDcgKzQ5LDcgQEAKIAogICAgIHByaXZhdGUgQFJlc291cmNlCiAgICAgVXNlclRyYW5zYWN0aW9uIHV0eDsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0RUpCIHRiaTsKIApAQCAtNjAsMTEgKzYwLDExIEBACiAgICAgICAgIHdyaXRlci53cml0ZSgiSGVsbG8gZnJvbSBTZXJ2bGV0IDMuMC4iKTsKICAgICAgICAgU3RyaW5nIG1zZyA9ICIiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldDo6QFBlcnNpc3RlbmNlVW5pdCAiICsKLSAgICAgICAgCQkiQ0RJIEVudGl0eU1hbmFnZXJGYWN0b3J5PSIgKyBlbWYxKTsKKyAgICAgICAgICAgICAgICAiQ0RJIEVudGl0eU1hbmFnZXJGYWN0b3J5PSIgKyBlbWYxKTsKIAogICAgICAgICBFbnRpdHlNYW5hZ2VyIGVtID0gZW1mMS5jcmVhdGVFbnRpdHlNYW5hZ2VyKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0OjpjcmVhdGVFTSIgKwotICAgICAgICAJCSJFbnRpdHlNYW5hZ2VyPSIgKyBlbSk7CisgICAgICAgICAgICAgICAgIkVudGl0eU1hbmFnZXI9IiArIGVtKTsKICAgICAgICAgU3RyaW5nIHRlc3RjYXNlID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInRlc3RjYXNlIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdGNhc2U9IiArIHRlc3RjYXNlKTsKIApAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICAgICAgfSBlbHNlIGlmICgibGxxdWVyeSIuZXF1YWxzKHRlc3RjYXNlKSkgewogICAgICAgICAgICAgICAgIHN0YXR1cyA9IGp0LmxhenlMb2FkaW5nQnlRdWVyeSgiQ2FybGEiKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoImxsaW5qIi5lcXVhbHModGVzdGNhc2UpKXsKLSAgICAgICAgICAgICAgICBzdGF0dXMgPSAoKHRiaSAhPSBudWxsKSAmJiAKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAoKHRiaSAhPSBudWxsKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgKHRiaS50ZXN0KCkubGVuZ3RoKCkgPT0gMCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHN0YXR1cykgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tcGFzc2l2YXRpbmctc2NvcGUvc2VydmxldC90ZXN0L3V0aWwvSlBBUmVzb3VyY2VQcm9kdWNlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tcGFzc2l2YXRpbmctc2NvcGUvc2VydmxldC90ZXN0L3V0aWwvSlBBUmVzb3VyY2VQcm9kdWNlci5qYXZhCmluZGV4IDNhMzI0ZDYuLmNlYzBmZmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXBhc3NpdmF0aW5nLXNjb3BlL3NlcnZsZXQvdGVzdC91dGlsL0pQQVJlc291cmNlUHJvZHVjZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1wYXNzaXZhdGluZy1zY29wZS9zZXJ2bGV0L3Rlc3QvdXRpbC9KUEFSZXNvdXJjZVByb2R1Y2VyLmphdmEKQEAgLTI5LDExICsyOSwxMSBAQAogQFNpbmdsZXRvbgogcHVibGljIGNsYXNzIEpQQVJlc291cmNlUHJvZHVjZXIgewogICAgIEBQcm9kdWNlcyBAUGVyc2lzdGVuY2VVbml0KHVuaXROYW1lPSJwdTMiKQotICAgIEBUZXN0RGF0YWJhc2UgCisgICAgQFRlc3REYXRhYmFzZQogICAgIEVudGl0eU1hbmFnZXJGYWN0b3J5IGN1c3RvbWVyRGF0YWJhc2VQZXJzaXN0ZW5jZVVuaXQ7CiAKICAgICBAUHJvZHVjZXMgQFBlcnNpc3RlbmNlQ29udGV4dCh1bml0TmFtZT0icHUzIikKLSAgICBAVGVzdERhdGFiYXNlIAorICAgIEBUZXN0RGF0YWJhc2UKICAgICBFbnRpdHlNYW5hZ2VyIGN1c3RvbWVyRGF0YWJhc2VQZXJzaXN0ZW5jZUNvbnRleHQ7Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtc2luZ2xldG9uLWVqYi1wcm9kdWNlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTJmMTk1Yy4uZGE2YjcwZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanBhLXJlc291cmNlLWluamVjdGlvbi1pbi1zaW5nbGV0b24tZWpiIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi13aXRoLXNpbmdsZXRvbi1lamItcHJvZHVjZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL2J1aWxkLnhtbAppbmRleCAyOTVkMDg2Li5lYjc5MGJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi13aXRoLXNpbmdsZXRvbi1lamItcHJvZHVjZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtc2luZ2xldG9uLWVqYi1wcm9kdWNlci9idWlsZC54bWwKQEAgLTMzLDc1ICszMyw3NSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGNyZWF0ZS1yZXNvdXJjZXMsZGVwbG95LHJ1bix1bmRlcGxveSxkZWxldGUtcmVzb3VyY2VzIiAvPgogCi0JPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KLQkJPGRlbGV0ZT4KLQkJCTxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiIC8+Ci0JCQk8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iIC8+CisgICAgICAgIDxkZWxldGU+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgorICAgICAgICA8L2RlbGV0ZT4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0IiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotCQk8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgotCQk8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+Ci0JCQk8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLQkJPC9hbnRjYWxsPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgogCi0JCTxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIiAvPgorICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIgLz4KIAotCTwvdGFyZ2V0PgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCi0JPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJjcmVhdGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCiAKLQk8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgotCQkJPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9IiAvPgotCQkJPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9IiAvPgotCQkJPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iIC8+Ci0JCQk8Y2xhc3NwYXRoPgotCQkJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgLz4KLQkJCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249ImNsaWVudCIgLz4KLQkJCTwvY2xhc3NwYXRoPgotCQk8L2phdmE+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIgLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5wb3J0fSIgLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9IiAvPgorICAgICAgICAgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIC8+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJjbGllbnQiIC8+CisgICAgICAgICAgICA8L2NsYXNzcGF0aD4KKyAgICAgICAgPC9qYXZhPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KLQkJPC9hbnRjYWxsPgorICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgorICAgICAgICA8L2FudGNhbGw+CiAKLQkJPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1jb25ucG9vbC1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi13aXRoLXNpbmdsZXRvbi1lamItcHJvZHVjZXIvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCBiNDc0NzMzLi4wZjY1ZDkyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi13aXRoLXNpbmdsZXRvbi1lamItcHJvZHVjZXIvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi13aXRoLXNpbmdsZXRvbi1lamItcHJvZHVjZXIvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgcnVuT25lQ3ljbGUoU3RyaW5nIHdoaWNoRU1GKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgaW52b2tlKHdoaWNoRU1GLCAibGxpbml0Iik7CiAgICAgICAgIGludm9rZSh3aGljaEVNRiwgImxscXVlcnkiKTsKQEAgLTExOCw4ICsxMTgsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0VGVzdE5hbWUoU3RyaW5nIHdoaWNoRU1GLCBTdHJpbmcgdGVzdENhc2UpewotICAgICAgICByZXR1cm4gVEVTVF9OQU1FICsgIl8iICsgd2hpY2hFTUYgKyAiXyIgK3Rlc3RDYXNlOyAgICAgICAgCisgICAgICAgIHJldHVybiBURVNUX05BTUUgKyAiXyIgKyB3aGljaEVNRiArICJfIiArdGVzdENhc2U7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCmluZGV4IDI5ZTEzN2EuLmU1YmU0ZDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtc2luZ2xldG9uLWVqYi1wcm9kdWNlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi13aXRoLXNpbmdsZXRvbi1lamItcHJvZHVjZXIvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKQEAgLTE5LDYgKzE5LDYgQEAKIHB1YmxpYyBpbnRlcmZhY2UgVGVzdEJlYW5JbnRlcmZhY2UgewogICAgIHB1YmxpYyB2b2lkIG0xKCk7CiAgICAgcHVibGljIHZvaWQgbTIoKTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgdGVzdERhdGFzb3VyY2VJbmplY3Rpb24oKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtc2luZ2xldG9uLWVqYi1wcm9kdWNlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEKaW5kZXggM2RjZmE5NC4uNmJmMzg3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEKQEAgLTMxLDggKzMxLDggQEAKIEBQcmVmZXJyZWQKIHB1YmxpYyBjbGFzcyBUZXN0QmVhbiBpbXBsZW1lbnRzIFRlc3RCZWFuSW50ZXJmYWNlewogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiB0ZXN0QmVhbkludm9rZWQgPSBmYWxzZTsKLSAgICAKLSAgICBASW5qZWN0IEBQcm9kdWNlZFZpYVByb2R1Y2VyTWV0aG9kIAorCisgICAgQEluamVjdCBAUHJvZHVjZWRWaWFQcm9kdWNlck1ldGhvZAogICAgIEVudGl0eU1hbmFnZXJGYWN0b3J5IGVtZjsKIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL3NlcnZsZXQvdGVzdC9lamIvSlBBUmVzb3VyY2VQcm9kdWNlclNpbmdsZXRvbkVKQl9CdXNpbmVzc01ldGhvZFByb2R1Y2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi13aXRoLXNpbmdsZXRvbi1lamItcHJvZHVjZXIvc2VydmxldC90ZXN0L2VqYi9KUEFSZXNvdXJjZVByb2R1Y2VyU2luZ2xldG9uRUpCX0J1c2luZXNzTWV0aG9kUHJvZHVjZXIuamF2YQppbmRleCBhMzVlNmFhLi44MWYxZjM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi13aXRoLXNpbmdsZXRvbi1lamItcHJvZHVjZXIvc2VydmxldC90ZXN0L2VqYi9KUEFSZXNvdXJjZVByb2R1Y2VyU2luZ2xldG9uRUpCX0J1c2luZXNzTWV0aG9kUHJvZHVjZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi13aXRoLXNpbmdsZXRvbi1lamItcHJvZHVjZXIvc2VydmxldC90ZXN0L2VqYi9KUEFSZXNvdXJjZVByb2R1Y2VyU2luZ2xldG9uRUpCX0J1c2luZXNzTWV0aG9kUHJvZHVjZXIuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogcHVibGljIGNsYXNzIEpQQVJlc291cmNlUHJvZHVjZXJTaW5nbGV0b25FSkJfQnVzaW5lc3NNZXRob2RQcm9kdWNlciB7CiAgICAgQFBlcnNpc3RlbmNlVW5pdCh1bml0TmFtZT0icHUxIikKICAgICBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBjdXN0b21lckRhdGFiYXNlUGVyc2lzdGVuY2VVbml0OwotICAgIAorCiAgICAgQFByb2R1Y2VzIEBQcm9kdWNlZFZpYVByb2R1Y2VyTWV0aG9kCiAgICAgcHVibGljIEVudGl0eU1hbmFnZXJGYWN0b3J5IGNyZWF0ZUVNRigpewogICAgICAgICByZXR1cm4gY3VzdG9tZXJEYXRhYmFzZVBlcnNpc3RlbmNlVW5pdDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtc2luZ2xldG9uLWVqYi1wcm9kdWNlci9zZXJ2bGV0L3Rlc3QvZWpiL0pQQVJlc291cmNlUHJvZHVjZXJTaW5nbGV0b25FSkJfU3RhdGljRmllbGQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtc2luZ2xldG9uLWVqYi1wcm9kdWNlci9zZXJ2bGV0L3Rlc3QvZWpiL0pQQVJlc291cmNlUHJvZHVjZXJTaW5nbGV0b25FSkJfU3RhdGljRmllbGQuamF2YQppbmRleCBjYmRmOTM2Li4xN2RlN2MxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi13aXRoLXNpbmdsZXRvbi1lamItcHJvZHVjZXIvc2VydmxldC90ZXN0L2VqYi9KUEFSZXNvdXJjZVByb2R1Y2VyU2luZ2xldG9uRUpCX1N0YXRpY0ZpZWxkLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL3NlcnZsZXQvdGVzdC9lamIvSlBBUmVzb3VyY2VQcm9kdWNlclNpbmdsZXRvbkVKQl9TdGF0aWNGaWVsZC5qYXZhCkBAIC0yNCw2ICsyNCw2IEBACiAKIEBqYWthcnRhLmVqYi5TaW5nbGV0b24KIHB1YmxpYyBjbGFzcyBKUEFSZXNvdXJjZVByb2R1Y2VyU2luZ2xldG9uRUpCX1N0YXRpY0ZpZWxkIHsKLSAgICBAUHJvZHVjZXMgQFBlcnNpc3RlbmNlVW5pdCh1bml0TmFtZT0icHUxIikgQFByb2R1Y2VkVmlhU3RhdGljRmllbGQgCisgICAgQFByb2R1Y2VzIEBQZXJzaXN0ZW5jZVVuaXQodW5pdE5hbWU9InB1MSIpIEBQcm9kdWNlZFZpYVN0YXRpY0ZpZWxkCiAgICAgcHVibGljIHN0YXRpYyBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBjdXN0b21lckRhdGFiYXNlUGVyc2lzdGVuY2VVbml0MTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtc2luZ2xldG9uLWVqYi1wcm9kdWNlci9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9KUEFSZXNvdXJjZUluamVjdGlvblNlcnZsZXRGcm9tU2luZ2xldG9uRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi13aXRoLXNpbmdsZXRvbi1lamItcHJvZHVjZXIvc2VydmxldC90ZXN0L3NlcnZsZXQvSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0RnJvbVNpbmdsZXRvbkVKQi5qYXZhCmluZGV4IDhmN2IyZjkuLjI2NjUyZTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtc2luZ2xldG9uLWVqYi1wcm9kdWNlci9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9KUEFSZXNvdXJjZUluamVjdGlvblNlcnZsZXRGcm9tU2luZ2xldG9uRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0pQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldEZyb21TaW5nbGV0b25FSkIuamF2YQpAQCAtNDYsMTUgKzQ2LDE1IEBACiAgICAgQEluamVjdAogICAgIEBQcm9kdWNlZFZpYVByb2R1Y2VyTWV0aG9kCiAgICAgcHJpdmF0ZSBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBlbWZfcHJvZHVjZXI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgQFByb2R1Y2VkVmlhU3RhdGljRmllbGQKICAgICBwcml2YXRlIEVudGl0eU1hbmFnZXJGYWN0b3J5IGVtZl9zdGF0aWM7Ci0gICAgCisKIAogICAgIHByaXZhdGUgQFJlc291cmNlCiAgICAgVXNlclRyYW5zYWN0aW9uIHV0eDsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgVGVzdEJlYW5JbnRlcmZhY2UgdGJpOwpAQCAtNjUsMTMgKzY1LDEzIEBACiAgICAgICAgIFByaW50V3JpdGVyIHdyaXRlciA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogICAgICAgICB3cml0ZXIud3JpdGUoIkhlbGxvIGZyb20gU2VydmxldCAzLjAuIik7CiAgICAgICAgIFN0cmluZyBtc2cgPSAiIjsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGVtZiA9PSBudWxsKQogICAgICAgICAgICAgbXNnICs9ICJTaW1wbGUgaW5qZWN0aW9uIG9mIEVudGl0eU1hbmFnZXJGYWN0b3J5IHRocm91Z2ggIiArCi0gICAgICAgICAgICAJCSJAUGVyc2lzdGVuY2VVbml0IGZhaWxlZCI7CisgICAgICAgICAgICAgICAgICAgICJAUGVyc2lzdGVuY2VVbml0IGZhaWxlZCI7CiAgICAgICAgIFN0cmluZyB0ZXN0Y2FzZSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJ0ZXN0Y2FzZSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3RjYXNlPSIgKyB0ZXN0Y2FzZSk7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB3aGljaEVNRiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJ3aGljaGVtZiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIndoaWNoRU1GPSIgKyB3aGljaEVNRik7CiAKQEAgLTg5LDkgKzg5LDkgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0OjpjcmVhdGVFTSIgKwogICAgICAgICAgICAgICAgICAgICAiRW50aXR5TWFuYWdlcj0iICsgZW0pOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmICh0ZXN0Y2FzZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgSnBhVGVzdCBqdCA9IG5ldyBKcGFUZXN0KGVtLCB1dHgpOwogICAgICAgICAgICAgYm9vbGVhbiBzdGF0dXMgPSBmYWxzZTsKICAgICAgICAgICAgIGlmICgibGxpbml0Ii5lcXVhbHModGVzdGNhc2UpKSB7CkBAIC0xMDEsMTAgKzEwMSwxMCBAQAogICAgICAgICAgICAgfSBlbHNlIGlmICgibGxxdWVyeSIuZXF1YWxzKHRlc3RjYXNlKSkgewogICAgICAgICAgICAgICAgIHN0YXR1cyA9IGp0LmxhenlMb2FkaW5nQnlRdWVyeSgiQ2FybGEiKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoImxsaW5qIi5lcXVhbHModGVzdGNhc2UpKXsKLSAgICAgICAgICAgICAgICBzdGF0dXMgPSAoKHRiaSAhPSBudWxsKSAmJiAKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAoKHRiaSAhPSBudWxsKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgKHRiaS50ZXN0RGF0YXNvdXJjZUluamVjdGlvbigpLnRyaW0oKS5sZW5ndGgoKT09MCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChzdGF0dXMpIHsKICAgICAgICAgICAgICAgICBtc2cgKz0gIiI7Ly8gcGFzcwogICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDE2OGZhZTcuLjE4ODNkNDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qcGEtcmVzb3VyY2UtaW5qZWN0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi9idWlsZC54bWwKaW5kZXggMjk1ZDA4Ni4uZWI3OTBiZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uL2J1aWxkLnhtbApAQCAtMzMsNzUgKzMzLDc1IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsY3JlYXRlLXJlc291cmNlcyxkZXBsb3kscnVuLHVuZGVwbG95LGRlbGV0ZS1yZXNvdXJjZXMiIC8+CiAKLQk8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KLQkJCTxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KKyAgICAgICAgPGRlbGV0ZT4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiIC8+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiIC8+CisgICAgICAgIDwvZGVsZXRlPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+Ci0JCTxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KLQkJCTxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotCQk8L2FudGNhbGw+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgorICAgICAgICA8L2FudGNhbGw+CiAKLQkJPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiIC8+CisgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIiAvPgogCi0JPC90YXJnZXQ+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKLQk8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKIAotCTx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+Ci0JCQk8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iIC8+Ci0JCQk8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iIC8+Ci0JCQk8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIgLz4KLQkJCTxjbGFzc3BhdGg+Ci0JCQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiAvPgotCQkJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iY2xpZW50IiAvPgotCQkJPC9jbGFzc3BhdGg+Ci0JCTwvamF2YT4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9IiAvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9IiAvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iIC8+CisgICAgICAgICAgICA8Y2xhc3NwYXRoPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgLz4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImNsaWVudCIgLz4KKyAgICAgICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICA8L2phdmE+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgotCQk8L2FudGNhbGw+CisgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KIAotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCmluZGV4IDI5ZTEzN2EuLmU1YmU0ZDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCkBAIC0xOSw2ICsxOSw2IEBACiBwdWJsaWMgaW50ZXJmYWNlIFRlc3RCZWFuSW50ZXJmYWNlIHsKICAgICBwdWJsaWMgdm9pZCBtMSgpOwogICAgIHB1YmxpYyB2b2lkIG0yKCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHRlc3REYXRhc291cmNlSW5qZWN0aW9uKCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YQppbmRleCA2MWNhNWNmLi4zZjJhNGJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEKQEAgLTI5LDggKzI5LDggQEAKIEBQcmVmZXJyZWQKIHB1YmxpYyBjbGFzcyBUZXN0QmVhbiBpbXBsZW1lbnRzIFRlc3RCZWFuSW50ZXJmYWNlewogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiB0ZXN0QmVhbkludm9rZWQgPSBmYWxzZTsKLSAgICAKLSAgICBASW5qZWN0IEBUZXN0RGF0YWJhc2UgCisKKyAgICBASW5qZWN0IEBUZXN0RGF0YWJhc2UKICAgICBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBlbWY7CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0pQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L3NlcnZsZXQvSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0LmphdmEKaW5kZXggZGM0ZTE4Zi4uNjk0NmNlNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L3NlcnZsZXQvSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L3NlcnZsZXQvSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0LmphdmEKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogICAgIHByaXZhdGUgQFJlc291cmNlCiAgICAgVXNlclRyYW5zYWN0aW9uIHV0eDsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgVGVzdEJlYW5JbnRlcmZhY2UgdGJpOwpAQCAtNjAsMTEgKzYwLDExIEBACiAgICAgICAgIHdyaXRlci53cml0ZSgiSGVsbG8gZnJvbSBTZXJ2bGV0IDMuMC4iKTsKICAgICAgICAgU3RyaW5nIG1zZyA9ICIiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldDo6QFBlcnNpc3RlbmNlVW5pdCAiICsKLSAgICAgICAgCQkiQ0RJIEVudGl0eU1hbmFnZXJGYWN0b3J5PSIgKyBlbWYxKTsKKyAgICAgICAgICAgICAgICAiQ0RJIEVudGl0eU1hbmFnZXJGYWN0b3J5PSIgKyBlbWYxKTsKIAogICAgICAgICBFbnRpdHlNYW5hZ2VyIGVtID0gZW1mMS5jcmVhdGVFbnRpdHlNYW5hZ2VyKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0OjpjcmVhdGVFTSIgKwotICAgICAgICAJCSJFbnRpdHlNYW5hZ2VyPSIgKyBlbSk7CisgICAgICAgICAgICAgICAgIkVudGl0eU1hbmFnZXI9IiArIGVtKTsKICAgICAgICAgU3RyaW5nIHRlc3RjYXNlID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInRlc3RjYXNlIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdGNhc2U9IiArIHRlc3RjYXNlKTsKIApAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICAgICAgfSBlbHNlIGlmICgibGxxdWVyeSIuZXF1YWxzKHRlc3RjYXNlKSkgewogICAgICAgICAgICAgICAgIHN0YXR1cyA9IGp0LmxhenlMb2FkaW5nQnlRdWVyeSgiQ2FybGEiKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoImxsaW5qIi5lcXVhbHModGVzdGNhc2UpKXsKLSAgICAgICAgICAgICAgICBzdGF0dXMgPSAoKHRiaSAhPSBudWxsKSAmJiAKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAoKHRiaSAhPSBudWxsKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgKHRiaS50ZXN0RGF0YXNvdXJjZUluamVjdGlvbigpLnRyaW0oKS5sZW5ndGgoKT09MCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHN0YXR1cykgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L3V0aWwvSlBBUmVzb3VyY2VQcm9kdWNlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L3V0aWwvSlBBUmVzb3VyY2VQcm9kdWNlci5qYXZhCmluZGV4IGE3YTE0YWQuLjg5YjZiMGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC91dGlsL0pQQVJlc291cmNlUHJvZHVjZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvdXRpbC9KUEFSZXNvdXJjZVByb2R1Y2VyLmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKIEBTaW5nbGV0b24KIHB1YmxpYyBjbGFzcyBKUEFSZXNvdXJjZVByb2R1Y2VyIHsKICAgICBAUHJvZHVjZXMgQFBlcnNpc3RlbmNlVW5pdCh1bml0TmFtZT0icHUxIikKLSAgICBAVGVzdERhdGFiYXNlIAorICAgIEBUZXN0RGF0YWJhc2UKICAgICBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBjdXN0b21lckRhdGFiYXNlUGVyc2lzdGVuY2VVbml0OwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvbm8taW50ZXJmYWNlLWVqYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL25vLWludGVyZmFjZS1lamIvYnVpbGQucHJvcGVydGllcwppbmRleCA1YjhiYTExLi5iYjdiNDkxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvbm8taW50ZXJmYWNlLWVqYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9uby1pbnRlcmZhY2UtZWpiL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbm8taW50ZXJmYWNlLWVqYiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL25vLWludGVyZmFjZS1lamIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL25vLWludGVyZmFjZS1lamIvYnVpbGQueG1sCmluZGV4IGEwZTZhOWQuLjI4MjRiNTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9uby1pbnRlcmZhY2UtZWpiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvbm8taW50ZXJmYWNlLWVqYi9idWlsZC54bWwKQEAgLTMzLDU0ICszMyw1NCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW4sdW5kZXBsb3kiIC8+CiAKLQk8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KLQkJCTxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KKyAgICAgICAgPGRlbGV0ZT4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiIC8+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiIC8+CisgICAgICAgIDwvZGVsZXRlPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+Ci0JCTxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KLQkJCTxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotCQk8L2FudGNhbGw+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgorICAgICAgICA8L2FudGNhbGw+CiAKLQkJPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiIC8+CisgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIiAvPgogCi0JPC90YXJnZXQ+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKLQk8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgotCQkJPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9IiAvPgotCQkJPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9IiAvPgotCQkJPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iIC8+Ci0JCQk8Y2xhc3NwYXRoPgotCQkJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgLz4KLQkJCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249ImNsaWVudCIgLz4KLQkJCTwvY2xhc3NwYXRoPgotCQk8L2phdmE+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIgLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5wb3J0fSIgLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9IiAvPgorICAgICAgICAgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIC8+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJjbGllbnQiIC8+CisgICAgICAgICAgICA8L2NsYXNzcGF0aD4KKyAgICAgICAgPC9qYXZhPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL25vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svbm9pbnRlcmZhY2ViZWFudmlldy9UZXN0QmVhblN1cGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvbm8taW50ZXJmYWNlLWVqYi9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9ub2ludGVyZmFjZWJlYW52aWV3L1Rlc3RCZWFuU3VwZXIuamF2YQppbmRleCA1YTM4ZjkwLi4wMjM1MTIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvbm8taW50ZXJmYWNlLWVqYi9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9ub2ludGVyZmFjZWJlYW52aWV3L1Rlc3RCZWFuU3VwZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvbm8taW50ZXJmYWNlLWVqYi9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9ub2ludGVyZmFjZWJlYW52aWV3L1Rlc3RCZWFuU3VwZXIuamF2YQpAQCAtMjAsNyArMjAsNyBAQAogaW1wb3J0IHRlc3QuZWpiLm5vaW50ZXJmYWNlYmVhbnZpZXcuVGVzdE5vSW50ZXJmYWNlRUpCOwogCiBhYnN0cmFjdCBjbGFzcyBUZXN0QmVhblN1cGVyIGltcGxlbWVudHMgVGVzdEJlYW5JbnRlcmZhY2UgewotICAgIAorCiAgICAgYWJzdHJhY3QgVGVzdE5vSW50ZXJmYWNlRUpCIGdldFRlc3RFSkIoKTsKIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL25vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L2VqYi9sb2NhbC9UZXN0U3VwZXJDbGFzcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL25vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L2VqYi9sb2NhbC9UZXN0U3VwZXJDbGFzcy5qYXZhCmluZGV4IDRhNDE5YzAuLjYxZGI5ZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9uby1pbnRlcmZhY2UtZWpiL3NlcnZsZXQvdGVzdC9lamIvbG9jYWwvVGVzdFN1cGVyQ2xhc3MuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvbm8taW50ZXJmYWNlLWVqYi9zZXJ2bGV0L3Rlc3QvZWpiL2xvY2FsL1Rlc3RTdXBlckNsYXNzLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogaW1wb3J0IGpha2FydGEuZW50ZXJwcmlzZS5pbmplY3QuQWx0ZXJuYXRpdmU7CiAKLSAKKwogLy9tYXJrZWQgYXMgQWx0ZXJuYXRpdmUsIG90aGVyd2lzZSB0aGVyZSB3b3VsZAogLy9hbiBhbWJpZ3VvdXMgZGVmaW5pdGlvbiBmb3IgVGVzdExvY2FsSW50ZXJmYWNlIGJldHdlZW4gdGhpcwogLy9zdXBlciBjbGFzcyBhbmQgdGhlIFRlc3RMb2NhbEVKQgpAQCAtMjksNyArMjksNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxvY2FsIGJlYW46IG0xIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIG0yRGVmaW5lZEluU3VwZXJDbGFzcygpewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxvY2FsOiBtMiIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9uby1pbnRlcmZhY2UtZWpiL3NlcnZsZXQvdGVzdC9lamIvbm9pbnRlcmZhY2ViZWFudmlldy9UZXN0U3VwZXJDbGFzcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL25vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L2VqYi9ub2ludGVyZmFjZWJlYW52aWV3L1Rlc3RTdXBlckNsYXNzLmphdmEKaW5kZXggZDA5M2QxYy4uZDkxNzljYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL25vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L2VqYi9ub2ludGVyZmFjZWJlYW52aWV3L1Rlc3RTdXBlckNsYXNzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL25vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L2VqYi9ub2ludGVyZmFjZWJlYW52aWV3L1Rlc3RTdXBlckNsYXNzLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogaW1wb3J0IGpha2FydGEuZW50ZXJwcmlzZS5pbmplY3QuQWx0ZXJuYXRpdmU7CiAKLSAKKwogcHVibGljIGNsYXNzIFRlc3RTdXBlckNsYXNzIGltcGxlbWVudHMgVGVzdEludGVyZmFjZXsKIAogICAgIEBPdmVycmlkZQpAQCAtMjYsNyArMjYsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm5vIGludGVyZmFjZSBiZWFuOiBtMSIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBtMkRlZmluZWRJblN1cGVyQ2xhc3MoKXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJubyBpbnRlcmZhY2UgYmVhbjogbTIiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvbm8taW50ZXJmYWNlLWVqYi9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Gb29CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvbm8taW50ZXJmYWNlLWVqYi9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Gb29CZWFuLmphdmEKaW5kZXggNDRlMWVjZS4uODZmOGIyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL25vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L3NlcnZsZXQvRm9vQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9uby1pbnRlcmZhY2UtZWpiL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0Zvb0JlYW4uamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgIEBJbmplY3RWaWFBdEVKQgogICAgIEBOb0ludGVyZmFjZUJlYW5WaWV3CiAgICAgVGVzdEJlYW5JbnRlcmZhY2UgdGVzdEJlYW5FSkI7Ci0gICAgCisKICAgICBwdWJsaWMgVGVzdEJlYW5JbnRlcmZhY2UgZ2V0QmVhbigpewogICAgICAgICByZXR1cm4gdGVzdEJlYW5FSkI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL25vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L3NlcnZsZXQvTm9JbnRlcmZhY2VFSkJUZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL25vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L3NlcnZsZXQvTm9JbnRlcmZhY2VFSkJUZXN0U2VydmxldC5qYXZhCmluZGV4IGRmMDAwY2EuLjFkZmYxMWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9uby1pbnRlcmZhY2UtZWpiL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L05vSW50ZXJmYWNlRUpCVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvbm8taW50ZXJmYWNlLWVqYi9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Ob0ludGVyZmFjZUVKQlRlc3RTZXJ2bGV0LmphdmEKQEAgLTU0LDQ1ICs1NCw0NSBAQAogLy8gICAgQEluamVjdFZpYUF0RUpCCiAvLyAgICBATG9jYWxFSkIKIC8vICAgIFRlc3RCZWFuSW50ZXJmYWNlIHRlc3RMb2NhbEJlYW5FSkI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdEludGVyZmFjZSB0aTsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0U3VwZXJDbGFzcyB0aTE7Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwKICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLAogICAgICAgICAgICAgSU9FeGNlcHRpb24gewogICAgICAgICBQcmludFdyaXRlciB3cml0ZXIgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKICAgICAgICAgd3JpdGVyLndyaXRlKCJIZWxsbyBmcm9tIFNlcnZsZXQgMy4wLiIpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgbXNnID0gIiI7CiAgICAgICAgIC8vdGVzdCBFSkIgaW5qZWN0aW9uIHZpYSBARUpCCiAgICAgICAgIFN0cmluZyBtID0gZmIuZ2V0QmVhbigpLnJ1blRlc3RzKCk7CiAgICAgICAgIGlmICghbS5lcXVhbHMoIiIpKQogICAgICAgICAgICAgbXNnICs9ICJJbnZvY2F0aW9uIG9uIG5vLWludGVyZmFjZSBFSkIgLS0gb2J0YWluZWQgdGhyb3VnaCBARUpCIC0tIGZhaWxlZC4gRmFpbGVkIHRlc3RzIiArIG07Ci0gICAgICAgIAorCiAgICAgICAgIC8vdGVzdCBFSkIgaW5qZWN0aW9uIHZpYSBASW5qZWN0CiAvLyAgICAgICAgbSA9IHRlc3RCZWFuSW5qZWN0LnJ1blRlc3RzKCk7CiAvLyAgICAgICAgaWYgKCFtLmVxdWFscygiIikpCiAvLyAgICAgICAgICAgIG1zZyArPSAiSW52b2NhdGlvbiBvbiBuby1pbnRlcmZhY2UgRUpCIC0tIG9idGFpbmVkIHRocm91Z2ggQEluamVjdCAtLSBmYWlsZWQuIEZhaWxlZCB0ZXN0cyIgKyBtOwogCi0gICAgICAgIC8vdGVzdCBOby1JbnRlcmZhY2UgRUpCIGluamVjdGlvbiB2aWEgQEluamVjdCBvZiBhbiBpbnRlcmZhY2UgdGhlIAorICAgICAgICAvL3Rlc3QgTm8tSW50ZXJmYWNlIEVKQiBpbmplY3Rpb24gdmlhIEBJbmplY3Qgb2YgYW4gaW50ZXJmYWNlIHRoZQogICAgICAgICAvL25vLWludGVyZmFjZSBiZWFuIGlzIGltcGxlbWVudGluZwogICAgICAgICBpZiAodGkgIT0gbnVsbCAmJiAhKHRpLm0xRGVmaW5lZEluSW50ZXJmYWNlKCkpKQogICAgICAgICAgICAgbXNnICs9ICJJbnZvY2F0aW9uIG9uIG5vLWludGVyZmFjZSBFSkIgLS0gb2J0YWluZWQgdGhyb3VnaCBASW5qZWN0IC0tIChtZXRob2QgZGVmaW5lZCBpbiBzdXBlciBpbnRlcmZhY2UpIGZhaWxlZCI7Ci0gICAgICAgIAotICAgICAgICAvL3Rlc3QgTm8tSW50ZXJmYWNlIEVKQiBpbmplY3Rpb24gdmlhIEBJbmplY3Qgb2YgYW4gaW50ZXJmYWNlIHRoZSAKKworICAgICAgICAvL3Rlc3QgTm8tSW50ZXJmYWNlIEVKQiBpbmplY3Rpb24gdmlhIEBJbmplY3Qgb2YgYW4gaW50ZXJmYWNlIHRoZQogICAgICAgICAvL25vLWludGVyZmFjZSBiZWFuIGlzIGltcGxlbWVudGluZwogICAgICAgICBpZiAodGkxICE9IG51bGwgJiYgISh0aTEubTJEZWZpbmVkSW5TdXBlckNsYXNzKCkpKQogICAgICAgICAgICAgbXNnICs9ICJJbnZvY2F0aW9uIG9uIG5vLWludGVyZmFjZSBFSkIgLS0gb2J0YWluZWQgdGhyb3VnaCBASW5qZWN0IC0tIChtZXRob2QgZGVmaW5lZCBpbiBzdXBlciBjbGFzcykgZmFpbGVkIjsKLSAgICAgICAgCisKICAgICAgICAgLy90ZXN0IGxvY2FsIEVKQiBpbmplY3Rpb24gdmlhIEBFSkIKIC8vICAgICAgICBtID0gdGVzdExvY2FsQmVhbkVKQi5ydW5UZXN0cygpOwogLy8gICAgICAgIGlmICghbS5lcXVhbHMoIiIpKQogLy8gICAgICAgICAgICBtc2cgKz0gIkludm9jYXRpb24gb24gbG9jYWwgRUpCIC0tIG9idGFpbmVkIHRocm91Z2ggQEVKQiAtLSBmYWlsZWQuIEZhaWxlZCB0ZXN0cyIgKyBtOwotICAgICAgICAKKwogICAgICAgICAvL3Rlc3QgRUpCIGluamVjdGlvbiB2aWEgQEluamVjdAogLy8gICAgICAgIG0gPSB0ZXN0TG9jYWxCZWFuSW5qZWN0LnJ1blRlc3RzKCk7CiAvLyAgICAgICAgaWYgKCFtLmVxdWFscygiIikpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvc2xzYi1pbmplY3Rpb24taW50by1zZXNzaW9uc2NvcGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvc2xzYi1pbmplY3Rpb24taW50by1zZXNzaW9uc2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNWI4YmExMS4uYmI3YjQ5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL3Nsc2ItaW5qZWN0aW9uLWludG8tc2Vzc2lvbnNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9zbHNiLWluamVjdGlvbi1pbnRvLXNlc3Npb25zY29wZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1uby1pbnRlcmZhY2UtZWpiIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvc2xzYi1pbmplY3Rpb24taW50by1zZXNzaW9uc2NvcGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9zbHNiLWluamVjdGlvbi1pbnRvLXNlc3Npb25zY29wZWQvYnVpbGQueG1sCmluZGV4IGEwZTZhOWQuLjI4MjRiNTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9zbHNiLWluamVjdGlvbi1pbnRvLXNlc3Npb25zY29wZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9zbHNiLWluamVjdGlvbi1pbnRvLXNlc3Npb25zY29wZWQvYnVpbGQueG1sCkBAIC0zMyw1NCArMzMsNTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxkZXBsb3kscnVuLHVuZGVwbG95IiAvPgogCi0JPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KLQkJPGRlbGV0ZT4KLQkJCTxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiIC8+Ci0JCQk8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iIC8+CisgICAgICAgIDxkZWxldGU+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgorICAgICAgICA8L2RlbGV0ZT4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0IiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotCQk8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgotCQk8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+Ci0JCQk8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLQkJPC9hbnRjYWxsPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgogCi0JCTxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIiAvPgorICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIgLz4KIAotCTwvdGFyZ2V0PgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCi0JPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KLQkJCTxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIgLz4KLQkJCTxhcmcgdmFsdWU9IiR7aHR0cC5wb3J0fSIgLz4KLQkJCTxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9IiAvPgotCQkJPGNsYXNzcGF0aD4KLQkJCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIC8+Ci0JCQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJjbGllbnQiIC8+Ci0JCQk8L2NsYXNzcGF0aD4KLQkJPC9qYXZhPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iIC8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iIC8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIgLz4KKyAgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiAvPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iY2xpZW50IiAvPgorICAgICAgICAgICAgPC9jbGFzc3BhdGg+CisgICAgICAgIDwvamF2YT4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9zbHNiLWluamVjdGlvbi1pbnRvLXNlc3Npb25zY29wZWQvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RTZXNzaW9uU2NvcGVkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL3Nsc2ItaW5qZWN0aW9uLWludG8tc2Vzc2lvbnNjb3BlZC9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdFNlc3Npb25TY29wZWRCZWFuLmphdmEKaW5kZXggNjY3YTcyOS4uNGYyM2RhMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL3Nsc2ItaW5qZWN0aW9uLWludG8tc2Vzc2lvbnNjb3BlZC9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdFNlc3Npb25TY29wZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL3Nsc2ItaW5qZWN0aW9uLWludG8tc2Vzc2lvbnNjb3BlZC9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdFNlc3Npb25TY29wZWRCZWFuLmphdmEKQEAgLTMyLDExICszMiwxMSBAQAogCiAgICAgcHVibGljIFRlc3RTZXNzaW9uU2NvcGVkQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0U0xTQkFjY2VzcygpewogICAgICAgICBpZiAoc3RhdGVsZXNzU2Vzc2lvbkJlYW4gIT0gbnVsbCkKICAgICAgICAgICAgIHJldHVybiBzdGF0ZWxlc3NTZXNzaW9uQmVhbi5zdGF0ZWxlc3NNZXRob2QxKCk7CiAgICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL3Nsc2ItaW5qZWN0aW9uLWludG8tc2Vzc2lvbnNjb3BlZC9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9ub2ludGVyZmFjZWJlYW52aWV3L1Rlc3RCZWFuU3VwZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9zbHNiLWluamVjdGlvbi1pbnRvLXNlc3Npb25zY29wZWQvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svbm9pbnRlcmZhY2ViZWFudmlldy9UZXN0QmVhblN1cGVyLmphdmEKaW5kZXggNWEzOGY5MC4uMDIzNTEyMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL3Nsc2ItaW5qZWN0aW9uLWludG8tc2Vzc2lvbnNjb3BlZC9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9ub2ludGVyZmFjZWJlYW52aWV3L1Rlc3RCZWFuU3VwZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvc2xzYi1pbmplY3Rpb24taW50by1zZXNzaW9uc2NvcGVkL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL25vaW50ZXJmYWNlYmVhbnZpZXcvVGVzdEJlYW5TdXBlci5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiBpbXBvcnQgdGVzdC5lamIubm9pbnRlcmZhY2ViZWFudmlldy5UZXN0Tm9JbnRlcmZhY2VFSkI7CiAKIGFic3RyYWN0IGNsYXNzIFRlc3RCZWFuU3VwZXIgaW1wbGVtZW50cyBUZXN0QmVhbkludGVyZmFjZSB7Ci0gICAgCisKICAgICBhYnN0cmFjdCBUZXN0Tm9JbnRlcmZhY2VFSkIgZ2V0VGVzdEVKQigpOwogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvc2xzYi1pbmplY3Rpb24taW50by1zZXNzaW9uc2NvcGVkL3NlcnZsZXQvdGVzdC9lamIvbG9jYWwvVGVzdFN1cGVyQ2xhc3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9zbHNiLWluamVjdGlvbi1pbnRvLXNlc3Npb25zY29wZWQvc2VydmxldC90ZXN0L2VqYi9sb2NhbC9UZXN0U3VwZXJDbGFzcy5qYXZhCmluZGV4IDRhNDE5YzAuLjYxZGI5ZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9zbHNiLWluamVjdGlvbi1pbnRvLXNlc3Npb25zY29wZWQvc2VydmxldC90ZXN0L2VqYi9sb2NhbC9UZXN0U3VwZXJDbGFzcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9zbHNiLWluamVjdGlvbi1pbnRvLXNlc3Npb25zY29wZWQvc2VydmxldC90ZXN0L2VqYi9sb2NhbC9UZXN0U3VwZXJDbGFzcy5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYWthcnRhLmVudGVycHJpc2UuaW5qZWN0LkFsdGVybmF0aXZlOwogCi0gCisKIC8vbWFya2VkIGFzIEFsdGVybmF0aXZlLCBvdGhlcndpc2UgdGhlcmUgd291bGQKIC8vYW4gYW1iaWd1b3VzIGRlZmluaXRpb24gZm9yIFRlc3RMb2NhbEludGVyZmFjZSBiZXR3ZWVuIHRoaXMKIC8vc3VwZXIgY2xhc3MgYW5kIHRoZSBUZXN0TG9jYWxFSkIKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsb2NhbCBiZWFuOiBtMSIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBtMkRlZmluZWRJblN1cGVyQ2xhc3MoKXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsb2NhbDogbTIiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvc2xzYi1pbmplY3Rpb24taW50by1zZXNzaW9uc2NvcGVkL3NlcnZsZXQvdGVzdC9lamIvbm9pbnRlcmZhY2ViZWFudmlldy9UZXN0U3VwZXJDbGFzcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL3Nsc2ItaW5qZWN0aW9uLWludG8tc2Vzc2lvbnNjb3BlZC9zZXJ2bGV0L3Rlc3QvZWpiL25vaW50ZXJmYWNlYmVhbnZpZXcvVGVzdFN1cGVyQ2xhc3MuamF2YQppbmRleCBkYmEyOGU2Li5hMDFjMWM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvc2xzYi1pbmplY3Rpb24taW50by1zZXNzaW9uc2NvcGVkL3NlcnZsZXQvdGVzdC9lamIvbm9pbnRlcmZhY2ViZWFudmlldy9UZXN0U3VwZXJDbGFzcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9zbHNiLWluamVjdGlvbi1pbnRvLXNlc3Npb25zY29wZWQvc2VydmxldC90ZXN0L2VqYi9ub2ludGVyZmFjZWJlYW52aWV3L1Rlc3RTdXBlckNsYXNzLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogaW1wb3J0IGpha2FydGEuZW50ZXJwcmlzZS5pbmplY3QuQWx0ZXJuYXRpdmU7CiAKLSAKKwogLy9tYXJrZWQgYXMgQWx0ZXJuYXRpdmUsIG90aGVyd2lzZSB0aGVyZSB3b3VsZAogLy9hbiBhbWJpZ3VvdXMgZGVmaW5pdGlvbiBmb3IgVGVzdExvY2FsSW50ZXJmYWNlIGJldHdlZW4gdGhpcwogLy9zdXBlciBjbGFzcyBhbmQgdGhlIFRlc3RMb2NhbEVKQgpAQCAtMjksNyArMjksNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm5vIGludGVyZmFjZSBiZWFuOiBtMSIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBtMkRlZmluZWRJblN1cGVyQ2xhc3MoKXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJubyBpbnRlcmZhY2UgYmVhbjogbTIiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvc2xzYi1pbmplY3Rpb24taW50by1zZXNzaW9uc2NvcGVkL3NlcnZsZXQvdGVzdC9lamIvc2xzYi9UZXN0U0xTQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL3Nsc2ItaW5qZWN0aW9uLWludG8tc2Vzc2lvbnNjb3BlZC9zZXJ2bGV0L3Rlc3QvZWpiL3Nsc2IvVGVzdFNMU0IuamF2YQppbmRleCAyMDJkN2RhLi4yODc1ZDUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvc2xzYi1pbmplY3Rpb24taW50by1zZXNzaW9uc2NvcGVkL3NlcnZsZXQvdGVzdC9lamIvc2xzYi9UZXN0U0xTQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9zbHNiLWluamVjdGlvbi1pbnRvLXNlc3Npb25zY29wZWQvc2VydmxldC90ZXN0L2VqYi9zbHNiL1Rlc3RTTFNCLmphdmEKQEAgLTI2LDkgKzI2LDkgQEAKIAogICAgIHB1YmxpYyBUZXN0U0xTQigpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBzdGF0ZWxlc3NNZXRob2QxKCl7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL3Nsc2ItaW5qZWN0aW9uLWludG8tc2Vzc2lvbnNjb3BlZC9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9TTFNCSW5qZWN0aW9uSW50b1Nlc3Npb25TY29wZWRCZWFuVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9zbHNiLWluamVjdGlvbi1pbnRvLXNlc3Npb25zY29wZWQvc2VydmxldC90ZXN0L3NlcnZsZXQvU0xTQkluamVjdGlvbkludG9TZXNzaW9uU2NvcGVkQmVhblRlc3RTZXJ2bGV0LmphdmEKaW5kZXggNGFjOTI3NC4uZGVmMDIzOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL3Nsc2ItaW5qZWN0aW9uLWludG8tc2Vzc2lvbnNjb3BlZC9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9TTFNCSW5qZWN0aW9uSW50b1Nlc3Npb25TY29wZWRCZWFuVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvc2xzYi1pbmplY3Rpb24taW50by1zZXNzaW9uc2NvcGVkL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1NMU0JJbmplY3Rpb25JbnRvU2Vzc2lvblNjb3BlZEJlYW5UZXN0U2VydmxldC5qYXZhCkBAIC01Nyw1MyArNTcsNTMgQEAKICAgICBASW5qZWN0VmlhQXRFSkIKICAgICBATG9jYWxFSkIKICAgICBUZXN0QmVhbkludGVyZmFjZSB0ZXN0TG9jYWxCZWFuRUpCOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3RJbnRlcmZhY2UgdGk7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdFN1cGVyQ2xhc3MgdGkxOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3RTZXNzaW9uU2NvcGVkQmVhbiB0c3NiOwotICAgIAorCiAgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsCiAgICAgICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwKICAgICAgICAgICAgIElPRXhjZXB0aW9uIHsKICAgICAgICAgUHJpbnRXcml0ZXIgd3JpdGVyID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CiAgICAgICAgIHdyaXRlci53cml0ZSgiSGVsbG8gZnJvbSBTZXJ2bGV0IDMuMC4iKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIG1zZyA9ICIiOwogICAgICAgICAvL3Rlc3QgRUpCIGluamVjdGlvbiB2aWEgQEVKQgogICAgICAgICBTdHJpbmcgbSA9IHRlc3RCZWFuRUpCLnJ1blRlc3RzKCk7CiAgICAgICAgIGlmICghbS5lcXVhbHMoIiIpKQogICAgICAgICAgICAgbXNnICs9ICJJbnZvY2F0aW9uIG9uIG5vLWludGVyZmFjZSBFSkIgLS0gb2J0YWluZWQgdGhyb3VnaCBARUpCIC0tIGZhaWxlZC4gRmFpbGVkIHRlc3RzIiArIG07Ci0gICAgICAgIAorCiAgICAgICAgIC8vdGVzdCBFSkIgaW5qZWN0aW9uIHZpYSBASW5qZWN0CiAgICAgICAgIG0gPSB0ZXN0QmVhbkluamVjdC5ydW5UZXN0cygpOwogICAgICAgICBpZiAoIW0uZXF1YWxzKCIiKSkKICAgICAgICAgICAgIG1zZyArPSAiSW52b2NhdGlvbiBvbiBuby1pbnRlcmZhY2UgRUpCIC0tIG9idGFpbmVkIHRocm91Z2ggQEluamVjdCAtLSBmYWlsZWQuIEZhaWxlZCB0ZXN0cyIgKyBtOwogCi0gICAgICAgIC8vdGVzdCBOby1JbnRlcmZhY2UgRUpCIGluamVjdGlvbiB2aWEgQEluamVjdCBvZiBhbiBpbnRlcmZhY2UgdGhlIAorICAgICAgICAvL3Rlc3QgTm8tSW50ZXJmYWNlIEVKQiBpbmplY3Rpb24gdmlhIEBJbmplY3Qgb2YgYW4gaW50ZXJmYWNlIHRoZQogICAgICAgICAvL25vLWludGVyZmFjZSBiZWFuIGlzIGltcGxlbWVudGluZwogICAgICAgICBpZiAodGkgIT0gbnVsbCAmJiAhKHRpLm0xRGVmaW5lZEluSW50ZXJmYWNlKCkpKQogICAgICAgICAgICAgbXNnICs9ICJJbnZvY2F0aW9uIG9uIG5vLWludGVyZmFjZSBFSkIgLS0gb2J0YWluZWQgdGhyb3VnaCBASW5qZWN0IC0tIChtZXRob2QgZGVmaW5lZCBpbiBzdXBlciBpbnRlcmZhY2UpIGZhaWxlZCI7Ci0gICAgICAgIAotICAgICAgICAvL3Rlc3QgTm8tSW50ZXJmYWNlIEVKQiBpbmplY3Rpb24gdmlhIEBJbmplY3Qgb2YgYW4gaW50ZXJmYWNlIHRoZSAKKworICAgICAgICAvL3Rlc3QgTm8tSW50ZXJmYWNlIEVKQiBpbmplY3Rpb24gdmlhIEBJbmplY3Qgb2YgYW4gaW50ZXJmYWNlIHRoZQogICAgICAgICAvL25vLWludGVyZmFjZSBiZWFuIGlzIGltcGxlbWVudGluZwogICAgICAgICBpZiAodGkxICE9IG51bGwgJiYgISh0aTEubTJEZWZpbmVkSW5TdXBlckNsYXNzKCkpKQogICAgICAgICAgICAgbXNnICs9ICJJbnZvY2F0aW9uIG9uIG5vLWludGVyZmFjZSBFSkIgLS0gb2J0YWluZWQgdGhyb3VnaCBASW5qZWN0IC0tIChtZXRob2QgZGVmaW5lZCBpbiBzdXBlciBjbGFzcykgZmFpbGVkIjsKLSAgICAgICAgCisKICAgICAgICAgLy90ZXN0IGxvY2FsIEVKQiBpbmplY3Rpb24gdmlhIEBFSkIKICAgICAgICAgbSA9IHRlc3RMb2NhbEJlYW5FSkIucnVuVGVzdHMoKTsKICAgICAgICAgaWYgKCFtLmVxdWFscygiIikpCiAgICAgICAgICAgICBtc2cgKz0gIkludm9jYXRpb24gb24gbG9jYWwgRUpCIC0tIG9idGFpbmVkIHRocm91Z2ggQEVKQiAtLSBmYWlsZWQuIEZhaWxlZCB0ZXN0cyIgKyBtOwotICAgICAgICAKKwogICAgICAgICAvL3Rlc3QgRUpCIGluamVjdGlvbiB2aWEgQEluamVjdAogICAgICAgICBtID0gdGVzdExvY2FsQmVhbkluamVjdC5ydW5UZXN0cygpOwogICAgICAgICBpZiAoIW0uZXF1YWxzKCIiKSkKICAgICAgICAgICAgIG1zZyArPSAiSW52b2NhdGlvbiBvbiBsb2NhbCBFSkIgLS0gb2J0YWluZWQgdGhyb3VnaCBASW5qZWN0IC0tIGZhaWxlZC4gRmFpbGVkIHRlc3RzIiArIG07Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghdHNzYi50ZXN0U0xTQkFjY2VzcygpKQogICAgICAgICAgICAgbXNnICs9ICJTdGF0ZWxlc3MgU2Vzc2lvbiBCZWFuIGludG8gc2Vzc2lvbiBzY29wZWQgYmVhbiBmYWlsZWQiOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGJjMTViNjAuLmQ5ZTdjYjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImJlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9iZWFuLWluLWxpYi1kaXItdXNlZC1ieS1lamItaW4tZWFyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci9idWlsZC54bWwKaW5kZXggYjBkNTM3Mi4uNWE4M2I1YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9iZWFuLWluLWxpYi1kaXItdXNlZC1ieS1lamItaW4tZWFyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvYnVpbGQueG1sCkBAIC0zMSwxMDAgKzMxLDEwMCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLGJ1aWxkLGRlcGxveSxydW4sdW5kZXBsb3kiIC8+CiAKLQk8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KLQkJPCEtLSBjb21waWxlIGxpYnJhcnkgLS0+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImxpYiIgLz4KLQkJPC9hbnRjYWxsPgorICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgorICAgICAgICA8IS0tIGNvbXBpbGUgbGlicmFyeSAtLT4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ibGliIiAvPgorICAgICAgICA8L2FudGNhbGw+CiAKIAotCQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiIC8+Ci0JCTwvYW50Y2FsbD4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIiAvPgorICAgICAgICA8L2FudGNhbGw+CiAKIAotCQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJ3YXIiIC8+Ci0JCTwvYW50Y2FsbD4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0id2FyIiAvPgorICAgICAgICA8L2FudGNhbGw+CiAKIAotCQk8amF2YWMgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIHNyY2Rpcj0iY2xpZW50IiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZGVidWc9Im9uIiBmYWlsb25lcnJvcj0idHJ1ZSI+Ci0JCTwvamF2YWM+Ci0JPC90YXJnZXQ+CisgICAgICAgIDxqYXZhYyBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgc3JjZGlyPSJjbGllbnQiIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBkZWJ1Zz0ib24iIGZhaWxvbmVycm9yPSJ0cnVlIj4KKyAgICAgICAgPC9qYXZhYz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotCQk8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iIC8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CisgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIgLz4KIAotCQk8IS0tIGJ1aWxkIGxpYnJhcnkgamFyIC0tPgotCQk8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIgLz4KLQkJPGNvcHkgZmlsZT0iJHtwZXJzaXN0ZW5jZS54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3BlcnNpc3RlbmNlLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIiAvPgotCQk8Y29weSBmaWxlPSIke2JlYW5zLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYmVhbnMueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiIC8+Ci0JCTxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2xpYi1kaXIiIC8+Ci0JCTxqYXIgamFyZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vbGliLWRpci9saWIuamFyIiBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgaW5jbHVkZXM9ImNvbS9hY21lL3V0aWwvKi5jbGFzcywgY29tL2FjbWUvZWpiL2FwaS8qLmNsYXNzIj4KLQkJCTxtZXRhaW5mIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiPgotCQkJCTxpbmNsdWRlIG5hbWU9InBlcnNpc3RlbmNlLnhtbCIgLz4KLQkJCQk8aW5jbHVkZSBuYW1lPSJiZWFucy54bWwiIC8+Ci0JCQk8L21ldGFpbmY+Ci0JCTwvamFyPgotCQk8Y29weSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2xpYi1kaXIiIC8+CisgICAgICAgIDwhLS0gYnVpbGQgbGlicmFyeSBqYXIgLS0+CisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIiAvPgorICAgICAgICA8Y29weSBmaWxlPSIke3BlcnNpc3RlbmNlLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvcGVyc2lzdGVuY2UueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiIC8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7YmVhbnMueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9iZWFucy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIgLz4KKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vbGliLWRpciIgLz4KKyAgICAgICAgPGphciBqYXJmaWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9saWItZGlyL2xpYi5qYXIiIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBpbmNsdWRlcz0iY29tL2FjbWUvdXRpbC8qLmNsYXNzLCBjb20vYWNtZS9lamIvYXBpLyouY2xhc3MiPgorICAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiI+CisgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icGVyc2lzdGVuY2UueG1sIiAvPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImJlYW5zLnhtbCIgLz4KKyAgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICAgPC9qYXI+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vbGliLWRpciIgLz4KIAotCQk8IS0tIGJ1aWxkIEVKQiBqYXIgLS0+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iY29tL2FjbWUvZWpiL2ltcGwvKi5jbGFzcyIgLz4KLQkJPC9hbnRjYWxsPgorICAgICAgICA8IS0tIGJ1aWxkIEVKQiBqYXIgLS0+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iY29tL2FjbWUvZWpiL2ltcGwvKi5jbGFzcyIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgogCi0JCTwhLS0gZGVsZXRlIEVKQiBpbXBsIGFuZCBsaWIgY2xhc3NlcyBhcyBXQVIgc2hvdWxkIG5vdCBoYXZlIHRoZW0gLS0+Ci0JCTxkZWxldGUgaW5jbHVkZUVtcHR5RGlycz0idHJ1ZSI+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NvbS9hY21lL2VqYi8iIC8+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NvbS9hY21lL3V0aWwvIiAvPgotCQk8L2RlbGV0ZT4KKyAgICAgICAgPCEtLSBkZWxldGUgRUpCIGltcGwgYW5kIGxpYiBjbGFzc2VzIGFzIFdBUiBzaG91bGQgbm90IGhhdmUgdGhlbSAtLT4KKyAgICAgICAgPGRlbGV0ZSBpbmNsdWRlRW1wdHlEaXJzPSJ0cnVlIj4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY29tL2FjbWUvZWpiLyIgLz4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY29tL2FjbWUvdXRpbC8iIC8+CisgICAgICAgIDwvZGVsZXRlPgogCi0JCTwhLS0gY3JlYXRlIFdBUiAtLT4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0idHJ1ZSIgLz4KLQkJPC9hbnRjYWxsPgorICAgICAgICA8IS0tIGNyZWF0ZSBXQVIgLS0+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InRydWUiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KIAotCQk8IS0tIGFzc2VtYmxlIEVBUiAtLT4KLQkJPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiIC8+Ci0JCTxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIgLz4KLQkJPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiIC8+Ci0JCTxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIiAvPgotCQk8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMtZWFyLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIgZmlsdGVyaW5nPSJ0cnVlIiAvPgotCQk8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgotCQkJPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgotCQkJCTxpbmNsdWRlIG5hbWU9IiouamFyIiAvPgotCQkJCTxpbmNsdWRlIG5hbWU9Iioud2FyIiAvPgotCQkJPC9maWxlc2V0PgotCQkJPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+Ci0JCQkJPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgLz4KLQkJCQk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIgLz4KLQkJCTwvZmlsZXNldD4KLQkJCTxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGluY2x1ZGVzPSJsaWItZGlyLyoiIC8+Ci0JCTwvZWFyPgorICAgICAgICA8IS0tIGFzc2VtYmxlIEVBUiAtLT4KKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiIC8+CisgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIgLz4KKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiIC8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIiAvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMtZWFyLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIgZmlsdGVyaW5nPSJ0cnVlIiAvPgorICAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIiAvPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIiAvPgorICAgICAgICAgICAgPC9maWxlc2V0PgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+CisgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgLz4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIgLz4KKyAgICAgICAgICAgIDwvZmlsZXNldD4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGluY2x1ZGVzPSJsaWItZGlyLyoiIC8+CisgICAgICAgIDwvZWFyPgogCi0JPC90YXJnZXQ+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGphdmEgZm9yaz0ib24iIGZhaWxvbmVycm9yPSJ0cnVlIiBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgotCQkJPGFyZyBsaW5lPSIke2NvbnRleHRyb290fSIgLz4KLQkJCTxhcmcgbGluZT0iJHtodHRwLmhvc3R9IiAvPgotCQkJPGFyZyBsaW5lPSIke2h0dHAucG9ydH0iIC8+Ci0JCTwvamF2YT4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8amF2YSBmb3JrPSJvbiIgZmFpbG9uZXJyb3I9InRydWUiIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CisgICAgICAgICAgICA8YXJnIGxpbmU9IiR7Y29udGV4dHJvb3R9IiAvPgorICAgICAgICAgICAgPGFyZyBsaW5lPSIke2h0dHAuaG9zdH0iIC8+CisgICAgICAgICAgICA8YXJnIGxpbmU9IiR7aHR0cC5wb3J0fSIgLz4KKyAgICAgICAgPC9qYXZhPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci9jbGllbnQvY29tL2FjbWUvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvY2xpZW50L2NvbS9hY21lL0NsaWVudC5qYXZhCmluZGV4IGIwYjY0YjkuLjQzYzBlZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci9jbGllbnQvY29tL2FjbWUvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9iZWFuLWluLWxpYi1kaXItdXNlZC1ieS1lamItaW4tZWFyL2NsaWVudC9jb20vYWNtZS9DbGllbnQuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9ICJiZWFuLWluLWxpYi1kaXItb2YtZWFyLXVzZWQtYnktZWpiIjsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9iZWFuLWluLWxpYi1kaXItdXNlZC1ieS1lamItaW4tZWFyL2VqYi9jb20vYWNtZS9lamIvaW1wbC9IZWxsb1NpbmdsZXRvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9iZWFuLWluLWxpYi1kaXItdXNlZC1ieS1lamItaW4tZWFyL2VqYi9jb20vYWNtZS9lamIvaW1wbC9IZWxsb1NpbmdsZXRvbi5qYXZhCmluZGV4IDgxNDQ1MWYuLmFmZTlkNTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci9lamIvY29tL2FjbWUvZWpiL2ltcGwvSGVsbG9TaW5nbGV0b24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvZWpiL2NvbS9hY21lL2VqYi9pbXBsL0hlbGxvU2luZ2xldG9uLmphdmEKQEAgLTQ1LDE2ICs0NSwxNiBAQAogICAgIEBQZXJzaXN0ZW5jZVVuaXQodW5pdE5hbWUgPSAicHUxIikKICAgICBAVGVzdERhdGFiYXNlCiAgICAgcHJpdmF0ZSBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBlbWY7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdE1hbmFnZWRCZWFuIHRtYjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0RGVwZW5kZW50QmVhbkluTGliIHRkYmlsOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3RTZXNzaW9uU2NvcGVkQmVhbkluTGliIHRzc2lsOwotICAgIAorCiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9iZWFuLWluLWxpYi1kaXItdXNlZC1ieS1lamItaW4tZWFyL2VqYi9jb20vYWNtZS9lamIvaW1wbC9TaW5nbGV0b240LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvZWpiL2NvbS9hY21lL2VqYi9pbXBsL1NpbmdsZXRvbjQuamF2YQppbmRleCBhNTRjNTllLi42YWExZjI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvZWpiL2NvbS9hY21lL2VqYi9pbXBsL1NpbmdsZXRvbjQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvZWpiL2NvbS9hY21lL2VqYi9pbXBsL1NpbmdsZXRvbjQuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjQ6OmluaXQoKSIpOwogICAgIH0KLSAgICAKKwogICAgIEBQcmVEZXN0cm95CiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuNDo6ZGVzdHJveSgpIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvbGliL2NvbS9hY21lL3V0aWwvUmVzb3VyY2VzUHJvZHVjZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci9saWIvY29tL2FjbWUvdXRpbC9SZXNvdXJjZXNQcm9kdWNlci5qYXZhCmluZGV4IGVhMDI5YWMuLjk2ZTJkMGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci9saWIvY29tL2FjbWUvdXRpbC9SZXNvdXJjZXNQcm9kdWNlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci9saWIvY29tL2FjbWUvdXRpbC9SZXNvdXJjZXNQcm9kdWNlci5qYXZhCkBAIC0yOCwxMCArMjgsMTAgQEAKICAgICBAUGVyc2lzdGVuY2VDb250ZXh0KHVuaXROYW1lID0gInB1MSIpCiAgICAgQFRlc3REYXRhYmFzZQogICAgIEVudGl0eU1hbmFnZXIgY3VzdG9tZXJEYXRhYmFzZVBlcnNpc3RlbmNlVW5pdDsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0RGVwZW5kZW50QmVhbkluTGliIGZvbzsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGlzSW5qZWN0aW9uU3VjY2Vzc2Z1bCgpewogICAgICAgICByZXR1cm4gKGZvbyAhPSBudWxsKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvbGliL2NvbS9hY21lL3V0aWwvVGVzdERlcGVuZGVudEJlYW5JbkxpYi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9iZWFuLWluLWxpYi1kaXItdXNlZC1ieS1lamItaW4tZWFyL2xpYi9jb20vYWNtZS91dGlsL1Rlc3REZXBlbmRlbnRCZWFuSW5MaWIuamF2YQppbmRleCA5NTk2YjIyLi42MWQ0OWI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvbGliL2NvbS9hY21lL3V0aWwvVGVzdERlcGVuZGVudEJlYW5JbkxpYi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci9saWIvY29tL2FjbWUvdXRpbC9UZXN0RGVwZW5kZW50QmVhbkluTGliLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKICAgICBwdWJsaWMgVGVzdERlcGVuZGVudEJlYW5JbkxpYigpIHsKICAgICAgICAgc3VwZXIoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGZvbygpewogICAgICAgICByZXR1cm4gImZvbyEiOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci9saWIvY29tL2FjbWUvdXRpbC9VdGlsSW5MaWJEaXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci9saWIvY29tL2FjbWUvdXRpbC9VdGlsSW5MaWJEaXIuamF2YQppbmRleCAxOGU3NmFiLi45ZWY2ZDYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvbGliL2NvbS9hY21lL3V0aWwvVXRpbEluTGliRGlyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9iZWFuLWluLWxpYi1kaXItdXNlZC1ieS1lamItaW4tZWFyL2xpYi9jb20vYWNtZS91dGlsL1V0aWxJbkxpYkRpci5qYXZhCkBAIC0xNywxMCArMTcsMTAgQEAKIHBhY2thZ2UgY29tLmFjbWUudXRpbDsKIAogcHVibGljIGNsYXNzIFV0aWxJbkxpYkRpciB7Ci0gICAgCisKICAgICBwdWJsaWMgaW50IGFkZChpbnQgaTEsIGludCBpMikgewogICAgICAgICByZXR1cm4gaTEraTI7CiAgICAgfQotICAgIAorCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci93YXIvY29tL2FjbWUvc2VydmxldC9IZWxsb1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci93YXIvY29tL2FjbWUvc2VydmxldC9IZWxsb1NlcnZsZXQuamF2YQppbmRleCA1NTBiMGEzLi5iNjIyNTkwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvd2FyL2NvbS9hY21lL3NlcnZsZXQvSGVsbG9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9iZWFuLWluLWxpYi1kaXItdXNlZC1ieS1lamItaW4tZWFyL3dhci9jb20vYWNtZS9zZXJ2bGV0L0hlbGxvU2VydmxldC5qYXZhCkBAIC0zNyw2MCArMzcsNjAgQEAKIEBTdXBwcmVzc1dhcm5pbmdzKCJzZXJpYWwiKQogcHVibGljIGNsYXNzIEhlbGxvU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKICAgICBTdHJpbmcgbXNnID0gIiI7Ci0gICAgCisKICAgICBARUpCKG5hbWUgPSAiamF2YTptb2R1bGUvbTEiLCBiZWFuTmFtZSA9ICJIZWxsb1NpbmdsZXRvbiIsIGJlYW5JbnRlcmZhY2UgPSBIZWxsby5jbGFzcykKICAgICBIZWxsbyBoOwotICAgIAorCiAgICAgQFBlcnNpc3RlbmNlVW5pdCh1bml0TmFtZSA9ICJwdTEiKQogICAgIEBUZXN0RGF0YWJhc2UKICAgICBwcml2YXRlIEVudGl0eU1hbmFnZXJGYWN0b3J5IGVtZjsKIAogLy8gICAgQEluamVjdAogLy8gICAgcHJpdmF0ZSBSZXNvdXJjZXNQcm9kdWNlciBycDsKLS8vICAgIAorLy8KIC8vICAgIEBJbmplY3QKIC8vICAgIHByaXZhdGUgVGVzdERlcGVuZGVudEJlYW5JbkxpYiBmYjsKLSAgICAKKwogLy8gICAgQEluamVjdAogLy8gICAgcHJpdmF0ZSBUZXN0TWFuYWdlZEJlYW4gdG1iOwotICAgIAorCiAvLyAgICBASW5qZWN0CiAvLyAgICBwcml2YXRlIFRlc3RTZXNzaW9uU2NvcGVkQmVhbkluTGliIHRzc2lsOwotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQogICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmRvR2V0Iik7CiAgICAgICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICBjaGVja0Zvck51bGwoZW1mLCAiSW5qZWN0aW9uIG9mIEVNRiBmYWlsZWQgaW4gU2VydmxldCIpOwogICAgICAgICAvL2Vuc3VyZSBFTUYgd29ya3MhCiAgICAgICAgIGVtZi5jcmVhdGVFbnRpdHlNYW5hZ2VyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vY2FsbCBTaW5nbGV0b24gRUpCCiAgICAgICAgIFN0cmluZyByZXNwb25zZSA9IGguaGVsbG8oKTsKICAgICAgICAgaWYoIXJlc3BvbnNlLmVxdWFscyhIZWxsby5BTExfT0tfU1RSSU5HKSkKICAgICAgICAgICAgIG1zZyArPSAiSW52b2NhdGlvbiBvZiBIZWxsbyBTaW5nZXRvbiBFSkIgZmFpbGVkOm1zZz0iICsgcmVzcG9uc2U7Ci0gICAgICAgIAorCiAvLyAgICAgICAgaWYgKCFycC5pc0luamVjdGlvblN1Y2Nlc3NmdWwoKSkKIC8vICAgICAgICAgICAgbXNnICs9ICJJbmplY3Rpb24gb2YgYSBiZWFuIGluIGxpYiBkaXJlY3RvcnkgaW50byBhbm90aGVyICIgKwotLy8gICAgICAgICAgICAJCSJCZWFuIGluIGxpYiBkaXJlY3RvcnkgZmFpbGVkIjsKKy8vICAgICAgICAgICAgICAgICAgICAiQmVhbiBpbiBsaWIgZGlyZWN0b3J5IGZhaWxlZCI7CiAvLyAgICAgICAgY2hlY2tGb3JOdWxsKGZiLCAiSW5qZWN0aW9uIG9mIGEgYmVhbiB0aGF0IGlzIHBsYWNlZCBpbiBsaWIgZGlyZWN0b3J5ICIgKwotLy8gICAgICAgIAkJImludG8gYSBTZXJ2bGV0IHRoYXQgaXMgcGxhY2VkIGluIGEgV0FSIGZhaWxlZCIpOworLy8gICAgICAgICAgICAgICAgImludG8gYSBTZXJ2bGV0IHRoYXQgaXMgcGxhY2VkIGluIGEgV0FSIGZhaWxlZCIpOwogLy8gICAgICAgIGNoZWNrRm9yTnVsbCh0bWIsICJJbmplY3Rpb24gb2YgYSBNYW5hZ2VkIGJlYW4gdGhhdCBpcyBwbGFjZWQgaW4gbGliIGRpcmVjdG9yeSAiICsKIC8vICAgICAgICAiaW50byBhIFNlcnZsZXQgdGhhdCBpcyBwbGFjZWQgaW4gYSBXQVIgZmFpbGVkIik7CiAvLyAgICAgICAgY2hlY2tGb3JOdWxsKHRzc2lsLCAiSW5qZWN0aW9uIG9mIGEgc2Vzc2lvbiBzY29wZWQgQmVhbiBwbGFjZWQgaW4gbGliIGRpciBpbnRvIGEgIiArCiAvLyAgICAgICAgICAgICJpbnRvIGEgc2VydmxldCBpbiB0aGF0IGVhciBmYWlsZWQiKTsKLSAgICAgICAgCisKIC8vICAgICAgICBpZiAoIXJwLmlzSW5qZWN0aW9uU3VjY2Vzc2Z1bCgpKQogLy8gICAgICAgICAgICBtc2cgKz0gIkluamVjdGlvbiBvZiBhIGJlYW4gaW4gbGliIGRpcmVjdG9yeSBpbnRvIGFub3RoZXIgQmVhbiAiICsKLS8vICAgICAgICAgICAgCQkiaW4gbGliIGRpcmVjdG9yeSBmYWlsZWQiOwotICAgICAgICAKKy8vICAgICAgICAgICAgICAgICAgICAiaW4gbGliIGRpcmVjdG9yeSBmYWlsZWQiOworCiAvLyAgICAgICAgaWYgKCF0bWIuaXNJbmplY3Rpb25TdWNjZXNzZnVsKCkpCiAvLyAgICAgICAgICAgIG1zZyArPSAiSW5qZWN0aW9uIG9mIGEgQmVhbiBwbGFjZWQgaW4gbGliIGRpciBpbnRvIGEgIiArCi0vLyAgICAgICAgICAgIAkJIk1hbmFnZWRCZWFuIHBsYWNlZCBpbiBsaWIgZGlyIGZhaWxlZCI7Ci0gICAgICAgIAorLy8gICAgICAgICAgICAgICAgICAgICJNYW5hZ2VkQmVhbiBwbGFjZWQgaW4gbGliIGRpciBmYWlsZWQiOworCiAgICAgICAgIG91dC5wcmludGxuKG1zZyk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYnVpbGQueG1sCmluZGV4IGIzZGZmNjYuLjZjMGIxM2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYnVpbGQueG1sCkBAIC03Nyw3ICs3Nyw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImphdmFlZS1pbnQiPgogICAgICAgICA8cmVjb3JkIG5hbWU9ImphdmFlZS1pbnQub3V0cHV0IiBhY3Rpb249InN0YXJ0IiAvPgotICAgICAgICAKKwogICAgICAgICA8YW50IGRpcj0iYnVpbHRpbi1iZWFucyIgdGFyZ2V0PSIke2phdmFlZS1pbnQtdGFyZ2V0fSIgLz4KICAgICAgICAgPGFudCBkaXI9InNlcnZsZXQtY29udGV4dC1pbmplY3Rpb24tY2RpIiB0YXJnZXQ9IiR7amF2YWVlLWludC10YXJnZXR9IiAvPgogICAgICAgICA8YW50IGRpcj0ic2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2UiIHRhcmdldD0iJHtqYXZhZWUtaW50LXRhcmdldH0iIC8+CkBAIC05NywxNCArOTcsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8ZWNobz4gVXNhZ2U6Ci0JCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgamF2YWVlLWludCB0ZXN0cykKLQkJYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBqYXZhZWUtaW50IHRlc3RzKQotCQlhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGphdmFlZS1pbnQgdGVzdHMpCi0JCWFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBqYXZhZWUtaW50IHRlc3RzKQotCQlhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgamF2YWVlLWludCBhcHBzKQotCQlhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGphdmFlZS1pbnQgdGVzdHMpCi0JCWFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgIGphdmFlZS1pbnQgYXBwcykKLQkJYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBqYXZhZWUtaW50IHRlc3RzKQotCTwvZWNobz4KKyAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBqYXZhZWUtaW50IHRlc3RzKQorICAgICAgICBhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIGphdmFlZS1pbnQgdGVzdHMpCisgICAgICAgIGFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgamF2YWVlLWludCB0ZXN0cykKKyAgICAgICAgYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIGphdmFlZS1pbnQgdGVzdHMpCisgICAgICAgIGFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBqYXZhZWUtaW50IGFwcHMpCisgICAgICAgIGFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgamF2YWVlLWludCB0ZXN0cykKKyAgICAgICAgYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgamF2YWVlLWludCBhcHBzKQorICAgICAgICBhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIGphdmFlZS1pbnQgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9idWlsdGluLWJlYW5zL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2J1aWx0aW4tYmVhbnMvYnVpbGQucHJvcGVydGllcwppbmRleCAzNTQzZTRjLi43MjE3NmQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2J1aWx0aW4tYmVhbnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2J1aWx0aW4tYmVhbnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS10eXBlc2FmZS1qYXZhZWUtcmVzb3VyY2UtaW5qZWN0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2J1aWx0aW4tYmVhbnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9idWlsdGluLWJlYW5zL2J1aWxkLnhtbAppbmRleCAyOTVkMDg2Li5lYjc5MGJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2J1aWx0aW4tYmVhbnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYnVpbHRpbi1iZWFucy9idWlsZC54bWwKQEAgLTMzLDc1ICszMyw3NSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGNyZWF0ZS1yZXNvdXJjZXMsZGVwbG95LHJ1bix1bmRlcGxveSxkZWxldGUtcmVzb3VyY2VzIiAvPgogCi0JPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KLQkJPGRlbGV0ZT4KLQkJCTxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiIC8+Ci0JCQk8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iIC8+CisgICAgICAgIDxkZWxldGU+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgorICAgICAgICA8L2RlbGV0ZT4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0IiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotCQk8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgotCQk8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+Ci0JCQk8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLQkJPC9hbnRjYWxsPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgogCi0JCTxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIiAvPgorICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIgLz4KIAotCTwvdGFyZ2V0PgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCi0JPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJjcmVhdGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCiAKLQk8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgotCQkJPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9IiAvPgotCQkJPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9IiAvPgotCQkJPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iIC8+Ci0JCQk8Y2xhc3NwYXRoPgotCQkJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgLz4KLQkJCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249ImNsaWVudCIgLz4KLQkJCTwvY2xhc3NwYXRoPgotCQk8L2phdmE+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIgLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5wb3J0fSIgLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9IiAvPgorICAgICAgICAgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIC8+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJjbGllbnQiIC8+CisgICAgICAgICAgICA8L2NsYXNzcGF0aD4KKyAgICAgICAgPC9qYXZhPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KLQkJPC9hbnRjYWxsPgorICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgorICAgICAgICA8L2FudGNhbGw+CiAKLQkJPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1jb25ucG9vbC1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9idWlsdGluLWJlYW5zL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9idWlsdGluLWJlYW5zL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCmluZGV4IDI5ZTEzN2EuLmU1YmU0ZDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYnVpbHRpbi1iZWFucy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2J1aWx0aW4tYmVhbnMvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKQEAgLTE5LDYgKzE5LDYgQEAKIHB1YmxpYyBpbnRlcmZhY2UgVGVzdEJlYW5JbnRlcmZhY2UgewogICAgIHB1YmxpYyB2b2lkIG0xKCk7CiAgICAgcHVibGljIHZvaWQgbTIoKTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgdGVzdERhdGFzb3VyY2VJbmplY3Rpb24oKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYnVpbHRpbi1iZWFucy9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9idWlsdGluLWJlYW5zL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEKaW5kZXggMzM4YTNiZi4uYjQ2ZGQyNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9idWlsdGluLWJlYW5zL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9idWlsdGluLWJlYW5zL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEKQEAgLTI5LDggKzI5LDggQEAKIEBQcmVmZXJyZWQKIHB1YmxpYyBjbGFzcyBUZXN0QmVhbiBpbXBsZW1lbnRzIFRlc3RCZWFuSW50ZXJmYWNlewogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiB0ZXN0QmVhbkludm9rZWQgPSBmYWxzZTsKLSAgICAKLSAgICBASW5qZWN0IEBUZXN0RGF0YWJhc2UgCisKKyAgICBASW5qZWN0IEBUZXN0RGF0YWJhc2UKICAgICBEYXRhU291cmNlIGRzOwogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2J1aWx0aW4tYmVhbnMvc2VydmxldC90ZXN0L3NlcnZsZXQvRGF0YWJhc2VNYW5hZ2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2J1aWx0aW4tYmVhbnMvc2VydmxldC90ZXN0L3NlcnZsZXQvRGF0YWJhc2VNYW5hZ2VyLmphdmEKaW5kZXggNmM1OTVjZC4uMjU3ZmVhYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9idWlsdGluLWJlYW5zL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0RhdGFiYXNlTWFuYWdlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYnVpbHRpbi1iZWFucy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9EYXRhYmFzZU1hbmFnZXIuamF2YQpAQCAtMjMsOSArMjMsOSBAQAogaW1wb3J0IHRlc3QuYmVhbnMuYXJ0aWZhY3RzLlRlc3REYXRhYmFzZTsKIAogcHVibGljIGNsYXNzIERhdGFiYXNlTWFuYWdlciB7Ci0gICAgQFByb2R1Y2VzIAorICAgIEBQcm9kdWNlcwogICAgIEBUZXN0RGF0YWJhc2UKLSAgICBAUmVzb3VyY2UobmFtZSA9ICJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiLCAKKyAgICBAUmVzb3VyY2UobmFtZSA9ICJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiLAogICAgICAgICAgICAgbWFwcGVkTmFtZSA9ICJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiKQogICAgIERhdGFTb3VyY2UgZHM7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS9XZWJUZXN0LmphdmEKaW5kZXggZDExOThjNC4uZmMyMTVkZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS9XZWJUZXN0LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQFdlYlNlcnZsZXQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItZXh0ZW5zaW9uLWFsdGVybmF0aXZlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItZXh0ZW5zaW9uLWFsdGVybmF0aXZlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDkzZDRhOC4uZDY0ZDNkYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS9idWlsZC54bWwKaW5kZXggNjAxYzNkYi4uOGU1OTFiZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxkZWxldGUgZmlsZT0ibGliL2JlYW4tbGliLmphciIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDwhLS0gY3JlYXRlIFdFQi1JTkYvbGliL2JlYW4tbGliLmphciAtLT4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KQEAgLTU2LDggKzU2LDggQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgPC9qYXI+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotICAgCi0gICAgICAgIDwhLS0gY29tcGlsZSB0ZXN0IHNlcnZsZXQgLS0+ICAgICAKKworICAgICAgICA8IS0tIGNvbXBpbGUgdGVzdCBzZXJ2bGV0IC0tPgogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBDb21waWxpbmcgdGVzdCBzb3VyY2UgZmlsZXMiIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgICAgIDxta2RpciBkaXI9InNlcnZsZXQiLz4KQEAgLTY1LDIzICs2NSwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgpAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotCQorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTEwMywxMSArMTAzLDExIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLQkKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuLmphdmEKaW5kZXggOWEyY2VjZi4uZTc3ZWQ2YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItZXh0ZW5zaW9uLWFsdGVybmF0aXZlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbi5qYXZhCkBAIC0yNyw4ICsyNyw4IEBACiBAUHJlZmVycmVkCiBwdWJsaWMgY2xhc3MgVGVzdEJlYW4gaW1wbGVtZW50cyBUZXN0QmVhbkludGVyZmFjZXsKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdGVzdEJlYW5JbnZva2VkID0gZmFsc2U7Ci0gICAgCi0gICAgQEluamVjdCAvL0BUZXN0RGF0YWJhc2UgCisKKyAgICBASW5qZWN0IC8vQFRlc3REYXRhYmFzZQogICAgIEVudGl0eU1hbmFnZXIgZW1mOwogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItZXh0ZW5zaW9uLWFsdGVybmF0aXZlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQppbmRleCAyOWUxMzdhLi5lNWJlNGQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItZXh0ZW5zaW9uLWFsdGVybmF0aXZlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKQEAgLTE5LDYgKzE5LDYgQEAKIHB1YmxpYyBpbnRlcmZhY2UgVGVzdEJlYW5JbnRlcmZhY2UgewogICAgIHB1YmxpYyB2b2lkIG0xKCk7CiAgICAgcHVibGljIHZvaWQgbTIoKTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgdGVzdERhdGFzb3VyY2VJbmplY3Rpb24oKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvc2VydmxldC90ZXN0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvc2VydmxldC90ZXN0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQppbmRleCA2MWNiMGRmLi5kMDg2MTY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItZXh0ZW5zaW9uLWFsdGVybmF0aXZlL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCkBAIC01MSw3ICs1MSw3IEBACiBwdWJsaWMgY2xhc3MgVGVzdFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgICAvKiBOb3JtYWwgaW5qZWN0aW9uIG9mIEJlYW5zICovCi0gICAgQEluamVjdCAKKyAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgb3JnLmpib3NzLmxvZ2dpbmcuTG9nZ2VyIGxvZzsKICAgICBASW5qZWN0IEJlYW5NYW5hZ2VyIGJtX2F0X2luajsKIApAQCAtNjQsMjYgKzY0LDI2IEBACiAKICAgICBwcml2YXRlIEBSZXNvdXJjZQogICAgIFVzZXJUcmFuc2FjdGlvbiB1dHg7Ci0gICAgCisKICAgICBASW5qZWN0IEBQcmVmZXJyZWQKICAgICBUZXN0QmVhbkludGVyZmFjZSB0Ymk7Ci0gICAgCisKICAgICAvKiBJbmplY3Rpb24gb2YgQmVhbnMgZnJvbSBXRUItSU5GL2xpYiAqLwotICAgIEBJbmplY3QgVGVzdEJlYW5JbldlYkluZkxpYiB0Yml3aWw7IAorICAgIEBJbmplY3QgVGVzdEJlYW5JbldlYkluZkxpYiB0Yml3aWw7CiAgICAgLy9XZSBhcmUgaW5qZWN0aW5nIFRlc3RCZWFuSW5XZWJJbmZMaWIgZGlyZWN0bHkgYWJvdmUuIFNpbmNlIHRoZSBhbHRlcm5hdGl2ZQotICAgIC8vVGVzdEJlYW4gaXMgbm90IGVuYWJsZWQgaW4gdGhlIFdBUidzIEJEQShiZWFucy54bWwpLCAKLSAgICAvL1Rlc3RCZWFuSW5XZWJJbmZMaWIgbXVzdCBiZSBpbmplY3RlZCAKLSAgICAKLSAgICAKKyAgICAvL1Rlc3RCZWFuIGlzIG5vdCBlbmFibGVkIGluIHRoZSBXQVIncyBCREEoYmVhbnMueG1sKSwKKyAgICAvL1Rlc3RCZWFuSW5XZWJJbmZMaWIgbXVzdCBiZSBpbmplY3RlZAorCisKICAgICBASW5qZWN0IEFub3RoZXJUZXN0QmVhbkluV2ViSW5mTGliIGF0Yml3aWw7CiAgICAgLy9Ib3dldmVyIGluIHRoaXMgY2FzZSwgd2hlbiBBbm90aGVyVGVzdEJlYW5JbldlYkluZkxpYiB0cmllcyB0byBpbmplY3QKICAgICAvL1Rlc3RCZWFuSW5XZWJJbmZMaWIgaW4gaXRzIGJlYW4sIGl0IG11c3QgaW5qZWN0IFRlc3RBbHRlcm5hdGl2ZUJlYW5JbldlYkluZkxpYgotICAgIC8vYXMgdGhlIGFsdGVybmF0aXZlIGJlYW4gaXMgZW5hYmxlZCBpbiB0aGUgV0VCLUlORi9saWIncyBCREEgKGJlYW5zLnhtbCkgCisgICAgLy9hcyB0aGUgYWx0ZXJuYXRpdmUgYmVhbiBpcyBlbmFibGVkIGluIHRoZSBXRUItSU5GL2xpYidzIEJEQSAoYmVhbnMueG1sKQogCiAgICAgLyogVGVzdCBsb29rdXAgb2YgQmVhbk1hbmFnZXIqLwogICAgIEJlYW5NYW5hZ2VyIGJtX2xvb2t1cDsKIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgICAgICAvL3ZpYSBCZWFuTWFuYWdlciBvZiBXQVIKICAgICAgICAgU2V0IHdhckJlYW5zID0gYm1fYXRfaW5qLmdldEJlYW5zKFRlc3RCZWFuLmNsYXNzLG5ldyBBbm5vdGF0aW9uTGl0ZXJhbDxBbnk+KCkge30pOwogICAgICAgICBpZiAod2FyQmVhbnMuc2l6ZSgpICE9IDEpIG1zZyArPSAiVGVzdEJlYW4gaW4gV0FSIGlzIG5vdCBhdmFpbGFibGUgdmlhIHRoZSBXQVIgQmVhbk1hbmFnZXIiOwotICAgICAgICAKKwogICAgICAgICBTZXQgd2ViaW5mTGliQmVhbnMgPSBibV9hdF9pbmouZ2V0QmVhbnMoVGVzdEJlYW5JbldlYkluZkxpYi5jbGFzcyxuZXcgQW5ub3RhdGlvbkxpdGVyYWw8QW55PigpIHt9KTsKICAgICAgICAgaWYgKHdlYmluZkxpYkJlYW5zLnNpemUoKSAhPSAxKSBtc2cgKz0gIlRlc3RCZWFuIGluIFdFQi1JTkYvbGliIGlzIG5vdCBhdmFpbGFibGUgdmlhIHRoZSBXQVIgQmVhbk1hbmFnZXIiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3QgQmVhbiBmcm9tIFdFQi1JTkYvbGliIHZpYSBCZWFuTWFuYWdlcjoiICsgd2ViaW5mTGliQmVhbnMpOwpAQCAtMTE4LDIwICsxMTgsMjAgQEAKICAgICAgICAgU2V0IHdlYmluZkxpYkFsdEJlYW5zID0gYm1fYXRfaW5qLmdldEJlYW5zKFRlc3RBbHRlcm5hdGl2ZUJlYW5JbldlYkluZkxpYi5jbGFzcyxuZXcgQW5ub3RhdGlvbkxpdGVyYWw8QW55PigpIHt9KTsKICAgICAgICAgaWYgKHdlYmluZkxpYkFsdEJlYW5zLnNpemUoKSAhPSAwKSBtc2cgKz0gIlRlc3RBbHRlcm5hdGl2ZUJlYW4gaW4gV0VCLUlORi9saWIgaXMgYXZhaWxhYmxlIHZpYSB0aGUgV0FSIEJlYW5NYW5hZ2VyIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0IEJlYW4gZnJvbSBXRUItSU5GL2xpYiB2aWEgQmVhbk1hbmFnZXI6IiArIHdlYmluZkxpYkFsdEJlYW5zKTsKLSAgICAgICAgCisKICAgICAgICAgLy9UZXN0IGluamVjdGlvbiBvZiBhIEJlYW4gaW4gV0VCLUlORi9saWIgYmVhbnMgaW50byBTZXJ2bGV0CiAgICAgICAgIC8vYW5kIGNoZWNrIHRoYXQgdGhlIEFsdGVybmF0aXZlIGJlYW4gaXMgbm90IGNhbGxlZC4KICAgICAgICAgLy9UaGUgYWx0ZXJuYXRpdmUgYmVhbiBpbiB3ZWItaW5mL2xpYiBpcyBub3QgZW5hYmxlZCBpbiB0aGUgV0FSJ3MgYmVhbnMueG1sCiAgICAgICAgIC8vYW5kIGhlbmNlIG11c3Qgbm90IGJlIHZpc2libGUuCiAgICAgICAgIFRlc3RBbHRlcm5hdGl2ZUJlYW5JbldlYkluZkxpYi5jbGVhclN0YXR1cygpOyAvL2NsZWFyIHN0YXR1cwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgaW5qZWN0aW9uT2ZCZWFuSW5XZWJJbmZMaWJSZXN1bHQgPSB0Yml3aWwudGVzdEluamVjdGlvbigpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluamVjdGlvbldpdGhBbHRlcm5hdGl2ZSByZXR1cm5lZDogIiArIGluamVjdGlvbk9mQmVhbkluV2ViSW5mTGliUmVzdWx0KTsKICAgICAgICAgaWYgKGluamVjdGlvbk9mQmVhbkluV2ViSW5mTGliUmVzdWx0LmVxdWFscyAoIkFsdGVybmF0aXZlIikpIHsKICAgICAgICAgICAgIG1zZyArPSAiRXhwZWN0ZWQgdGhhdCB0aGUgb3JpZ2luYWwgVGVzdEJlYW5JbldlYkluZkxpYiBpcyBjYWxsZWQsICIgKwotICAgICAgICAgICAgCQkiYnV0IGluc3RlYWQgZ290ICIgKyBpbmplY3Rpb25PZkJlYW5JbldlYkluZkxpYlJlc3VsdCArICIgaW5zdGVhZCI7Ci0gICAgICAgIH0gCi0gICAgICAgIAorICAgICAgICAgICAgICAgICAgICAiYnV0IGluc3RlYWQgZ290ICIgKyBpbmplY3Rpb25PZkJlYW5JbldlYkluZkxpYlJlc3VsdCArICIgaW5zdGVhZCI7CisgICAgICAgIH0KKwogICAgICAgICBpZihUZXN0QWx0ZXJuYXRpdmVCZWFuSW5XZWJJbmZMaWIuQUxURVJOQVRJVkVfQkVBTl9IQVNfQkVFTl9DQUxMRUQpIHsKICAgICAgICAgICAgIG1zZyArPSAiQWx0ZXJuYXRlIEJlYW4gaXMgY2FsbGVkIGV2ZW4gdGhvdWdoIGl0IGlzIG5vdCBlbmFibGVkIGluIHRoZSBXQVIncyBiZWFucy54bWwiOwogICAgICAgICB9CkBAIC0xNTEsMTMgKzE1MSwxMyBAQAogCiAgICAgICAgIGlmICghVGVzdEFsdGVybmF0aXZlQmVhbkluV2ViSW5mTGliLkFMVEVSTkFUSVZFX0JFQU5fSEFTX0JFRU5fQ0FMTEVEKSB7CiAgICAgICAgICAgICBtc2cgKz0gIkFsdGVybmF0aXZlIEJlYW4gZW5hYmxlZCBpbiBXRUItSU5GL2xpYiB3YXMgbm90IGNhbGxlZCAiICsKLSAgICAgICAgICAgIAkJIndoZW4gdGhlIGluamVjdGlvbiBoYXBwZW5lZCBpbiB0aGUgY29udGV4dCBvZiBhICIgKwotICAgICAgICAgICAgCQkiQmVhbiBpbiBXRUItSU5GL2xpYiB3aGVyZSB0aGUgYWx0ZXJuYXRpdmUgQmVhbiB3YXMgZW5hYmxlZCI7CisgICAgICAgICAgICAgICAgICAgICJ3aGVuIHRoZSBpbmplY3Rpb24gaGFwcGVuZWQgaW4gdGhlIGNvbnRleHQgb2YgYSAiICsKKyAgICAgICAgICAgICAgICAgICAgIkJlYW4gaW4gV0VCLUlORi9saWIgd2hlcmUgdGhlIGFsdGVybmF0aXZlIEJlYW4gd2FzIGVuYWJsZWQiOwogICAgICAgICB9CiAKLSAgICAgICAgCisKICAgICAgICAgbXNnICs9IHRlc3RFTUluamVjdGlvbihyZXEpOwotICAgICAgICAKKwogICAgICAgICB3cml0ZXIud3JpdGUobXNnICsgIlxuIik7CiAgICAgfQogCkBAIC0xODAsNyArMTgwLDcgQEAKICAgICAgICAgICAgIH0gZWxzZSBpZiAoImxscXVlcnkiLmVxdWFscyh0ZXN0Y2FzZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0dXMgPSBqdC5sYXp5TG9hZGluZ0J5UXVlcnkoIkNhcmxhIik7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJsbGluaiIuZXF1YWxzKHRlc3RjYXNlKSl7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gKCh0YmkgIT0gbnVsbCkgJiYgCisgICAgICAgICAgICAgICAgc3RhdHVzID0gKCh0YmkgIT0gbnVsbCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICh0YmkudGVzdERhdGFzb3VyY2VJbmplY3Rpb24oKS50cmltKCkubGVuZ3RoKCk9PTApKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChzdGF0dXMpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvc2VydmxldC90ZXN0L3V0aWwvSlBBUmVzb3VyY2VQcm9kdWNlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS9zZXJ2bGV0L3Rlc3QvdXRpbC9KUEFSZXNvdXJjZVByb2R1Y2VyLmphdmEKaW5kZXggMThiYmE3Ny4uOTI2MTZmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS9zZXJ2bGV0L3Rlc3QvdXRpbC9KUEFSZXNvdXJjZVByb2R1Y2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS9zZXJ2bGV0L3Rlc3QvdXRpbC9KUEFSZXNvdXJjZVByb2R1Y2VyLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIEBTaW5nbGV0b24KIHB1YmxpYyBjbGFzcyBKUEFSZXNvdXJjZVByb2R1Y2VyIHsKICAgICBAUHJvZHVjZXMgQFBlcnNpc3RlbmNlQ29udGV4dCh1bml0TmFtZT0icHUxIikKLSAgICAvL0BUZXN0RGF0YWJhc2UgCisgICAgLy9AVGVzdERhdGFiYXNlCiAgICAgRW50aXR5TWFuYWdlciBjdXN0b21lckRhdGFiYXNlUGVyc2lzdGVuY2VVbml0OwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItZXh0ZW5zaW9uLWFsdGVybmF0aXZlL3V0aWwvdGVzdC9iZWFucy93YmluZmxpYi9UZXN0QWx0ZXJuYXRpdmVCZWFuSW5XZWJJbmZMaWIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvdXRpbC90ZXN0L2JlYW5zL3diaW5mbGliL1Rlc3RBbHRlcm5hdGl2ZUJlYW5JbldlYkluZkxpYi5qYXZhCmluZGV4IGYwNTYzNGQuLjUzOTQzNmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvdXRpbC90ZXN0L2JlYW5zL3diaW5mbGliL1Rlc3RBbHRlcm5hdGl2ZUJlYW5JbldlYkluZkxpYi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvdXRpbC90ZXN0L2JlYW5zL3diaW5mbGliL1Rlc3RBbHRlcm5hdGl2ZUJlYW5JbldlYkluZkxpYi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqIHRlc3RpbmplY3Rpb24gaW4gYWx0ZXJuYXRpdmUgYmVhbiBpbiB3ZWItaW5mL2xpYiBjYWxsZWQiKTsKICAgICAgICAgcmV0dXJuICJBbHRlcm5hdGl2ZSI7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIGNsZWFyU3RhdHVzKCl7CiAgICAgICAgIEFMVEVSTkFUSVZFX0JFQU5fSEFTX0JFRU5fQ0FMTEVEID0gZmFsc2U7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS91dGlsL3Rlc3QvYmVhbnMvd2JpbmZsaWIvVGVzdEJlYW5JbldlYkluZkxpYi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS91dGlsL3Rlc3QvYmVhbnMvd2JpbmZsaWIvVGVzdEJlYW5JbldlYkluZkxpYi5qYXZhCmluZGV4IDM4N2FjNDUuLmM1ZWYyNjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvdXRpbC90ZXN0L2JlYW5zL3diaW5mbGliL1Rlc3RCZWFuSW5XZWJJbmZMaWIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItZXh0ZW5zaW9uLWFsdGVybmF0aXZlL3V0aWwvdGVzdC9iZWFucy93YmluZmxpYi9UZXN0QmVhbkluV2ViSW5mTGliLmphdmEKQEAgLTI4LDExICsyOCwxMSBAQAogcHVibGljIGNsYXNzIFRlc3RCZWFuSW5XZWJJbmZMaWIgewogICAgIEBJbmplY3QKICAgICBCZWFuTWFuYWdlciBibTsKLSAgICAKLS8vICAgIEBJbmplY3QgLy9AVGVzdERhdGFiYXNlIAorCisvLyAgICBASW5qZWN0IC8vQFRlc3REYXRhYmFzZQogLy8gICAgRW50aXR5TWFuYWdlciBlbWZfYXRfaW5qOwogCi0gICAgQFBlcnNpc3RlbmNlQ29udGV4dCh1bml0TmFtZT0icHUxIikgIAorICAgIEBQZXJzaXN0ZW5jZUNvbnRleHQodW5pdE5hbWU9InB1MSIpCiAgICAgRW50aXR5TWFuYWdlciBlbWZfYXRfcHU7CiAKICAgICAvL1RoaXMgdGVzdCBpbmplY3Rpb24gbWV0aG9kIHdvdWxkIGJlIGNhbGxlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgc2VydmxldCBpbiBXQVIKQEAgLTQ1LDIyICs0NSwyMiBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVNRiBpbmplY3RlZCBpbiBXRUItSU5GL2xpYiBiZWFuIGlzICIgKyBlbWZfYXRfcHUpOwogICAgICAgICBpZiAoZW1mX2F0X3B1ID09IG51bGwpCiAgICAgICAgICAgICByZXR1cm4gIkVNRiBpbmplY3RlZCB2aWEgQFBlcnNpc3RlbmNlQ29udGV4dCBpcyBub3QgaW5qZWN0ZWQgaW50byAiICsKLSAgICAgICAgICAgIAkJInRoZSBUZXN0QmVhbiBwYWNrYWdlZCBpbiBXRUItSU5GL2xpYiI7Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAgICAidGhlIFRlc3RCZWFuIHBhY2thZ2VkIGluIFdFQi1JTkYvbGliIjsKKwogICAgICAgICBTZXQ8QmVhbjw/Pj4gd2ViaW5mTGliQmVhbnMgPSBibS5nZXRCZWFucyhUZXN0QmVhbkluV2ViSW5mTGliLmNsYXNzLCBuZXcgQW5ub3RhdGlvbkxpdGVyYWw8QW55PigpIHt9KTsKICAgICAgICAgaWYgKHdlYmluZkxpYkJlYW5zLnNpemUoKSAhPSAyKSAvL0JlYW4gYW5kIGVuYWJsZWQgQWx0ZXJuYXRpdmUKICAgICAgICAgICAgIHJldHVybiAiVGVzdEJlYW4gaW4gV0VCLUlORi9saWIgaXMgbm90IGF2YWlsYWJsZSB2aWEgdGhlIFdFQi1JTkYvbGliICIKICAgICAgICAgICAgICAgICAgICAgKyAiQmVhbidzIEJlYW5NYW5hZ2VyIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwogICAgICAgICBwcmludEJlYW5zKHdlYmluZkxpYkJlYW5zLCAiQmVhbk1hbmFnZXIuZ2V0QmVhbnMoVGVzdEJlYW5JbldlYkluZkxpYiwgQW55KToiKTsKLSAgICAgICAgCisKICAgICAgICAgU2V0PEJlYW48Pz4+IHdlYmluZkxpYkFsdEJlYW5zID0gYm0uZ2V0QmVhbnMoVGVzdEFsdGVybmF0aXZlQmVhbkluV2ViSW5mTGliLmNsYXNzLCBuZXcgQW5ub3RhdGlvbkxpdGVyYWw8QW55PigpIHt9KTsKICAgICAgICAgaWYgKHdlYmluZkxpYkJlYW5zLnNpemUoKSAhPSAxKSAvL2VuYWJsZWQgQWx0ZXJuYXRpdmUKICAgICAgICAgICAgIHJldHVybiAiVGVzdEFsdGVybmF0aXZlQmVhbiBpbiBXRUItSU5GL2xpYiBpcyBub3QgYXZhaWxhYmxlIHZpYSB0aGUgV0VCLUlORi9saWIgIgogICAgICAgICAgICAgICAgICAgICArICJCZWFuJ3MgQmVhbk1hbmFnZXIiOwogICAgICAgICBwcmludEJlYW5zKHdlYmluZkxpYkFsdEJlYW5zLCAiQmVhbk1hbmFnZXIuZ2V0QmVhbnMoVGVzdEFsdGVybmF0aXZlQmVhbkluV2ViSW5mTGliLCBBbnkpOiIpOwotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBJdGVyYWJsZTxCZWFuPD8+PiBhY2Nlc3NpYmxlQmVhbnMgPSAoKG9yZy5qYm9zcy53ZWxkLm1hbmFnZXIuQmVhbk1hbmFnZXJJbXBsKSBibSkuZ2V0QWNjZXNzaWJsZUJlYW5zKCk7CiAgICAgICAgIHByaW50QmVhbnMoYWNjZXNzaWJsZUJlYW5zLCAiQmVhbk1hbmFnZXJJbXBsLmdldEFjY2Vzc2libGVCZWFuczoiKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vV2ViVGVzdC5qYXZhCmluZGV4IDllY2NmYWQuLmNjMmE1OWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1qYXZhZWUtaW5qZWN0aW9uL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItamF2YWVlLWluamVjdGlvbi9XZWJUZXN0LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQFdlYlNlcnZsZXQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItamF2YWVlLWluamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vYnVpbGQucHJvcGVydGllcwppbmRleCBjZjJmMGMwLi45MjA0Y2JiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItamF2YWVlLWluamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1qYXZhZWUtaW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItamF2YWVlLWluamVjdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vYnVpbGQueG1sCmluZGV4IDA2NDA2NjUuLjBjNjJmMjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1qYXZhZWUtaW5qZWN0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItamF2YWVlLWluamVjdGlvbi9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxkZWxldGUgZmlsZT0ibGliL2JlYW4tbGliLmphciIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDwhLS0gY3JlYXRlIFdFQi1JTkYvbGliL2JlYW4tbGliLmphciAtLT4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KQEAgLTU0LDggKzU0LDggQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgPC9qYXI+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotICAgCi0gICAgICAgIDwhLS0gY29tcGlsZSB0ZXN0IHNlcnZsZXQgLS0+ICAgICAKKworICAgICAgICA8IS0tIGNvbXBpbGUgdGVzdCBzZXJ2bGV0IC0tPgogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBDb21waWxpbmcgdGVzdCBzb3VyY2UgZmlsZXMiIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgICAgIDxta2RpciBkaXI9InNlcnZsZXQiLz4KQEAgLTYzLDIzICs2MywyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgpAQCAtODksNyArODksNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotCQorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTEwMSwxMSArMTAxLDExIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLQkKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItamF2YWVlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW4uamF2YQppbmRleCAxMDRjNmIwLi5mNDZlMDk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItamF2YWVlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItamF2YWVlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW4uamF2YQpAQCAtMjYsOCArMjYsOCBAQAogQFByZWZlcnJlZAogcHVibGljIGNsYXNzIFRlc3RCZWFuIGltcGxlbWVudHMgVGVzdEJlYW5JbnRlcmZhY2V7CiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIHRlc3RCZWFuSW52b2tlZCA9IGZhbHNlOwotICAgIAotICAgIEBJbmplY3QgLy9AVGVzdERhdGFiYXNlIAorCisgICAgQEluamVjdCAvL0BUZXN0RGF0YWJhc2UKICAgICBFbnRpdHlNYW5hZ2VyIGVtZjsKIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItamF2YWVlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQppbmRleCAyOWUxMzdhLi5lNWJlNGQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItamF2YWVlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItamF2YWVlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQpAQCAtMTksNiArMTksNiBAQAogcHVibGljIGludGVyZmFjZSBUZXN0QmVhbkludGVyZmFjZSB7CiAgICAgcHVibGljIHZvaWQgbTEoKTsKICAgICBwdWJsaWMgdm9pZCBtMigpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyB0ZXN0RGF0YXNvdXJjZUluamVjdGlvbigpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1qYXZhZWUtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggMzk1MTE4Yy4uMjVhNjY5YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItamF2YWVlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCkBAIC01MCw3ICs1MCw3IEBACiBwdWJsaWMgY2xhc3MgVGVzdFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgICAvKiBOb3JtYWwgaW5qZWN0aW9uIG9mIEJlYW5zICovCi0gICAgQEluamVjdCAKKyAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgb3JnLmpib3NzLmxvZ2dpbmcuTG9nZ2VyIGxvZzsKICAgICBASW5qZWN0IEJlYW5NYW5hZ2VyIGJtX2F0X2luajsKIApAQCAtNjMsMTcgKzYzLDE3IEBACiAKICAgICBwcml2YXRlIEBSZXNvdXJjZQogICAgIFVzZXJUcmFuc2FjdGlvbiB1dHg7Ci0gICAgCisKICAgICBASW5qZWN0IEBQcmVmZXJyZWQKICAgICBUZXN0QmVhbkludGVyZmFjZSB0Ymk7Ci0gICAgCisKICAgICAvKiBJbmplY3Rpb24gb2YgQmVhbnMgZnJvbSBXRUItSU5GL2xpYiAqLwogICAgIEBJbmplY3QgVGVzdEJlYW5JbldlYkluZkxpYiB0Yml3aWw7Ci0gICAgCisKICAgICAvKiBUZXN0IGxvb2t1cCBvZiBCZWFuTWFuYWdlciovCiAgICAgQmVhbk1hbmFnZXIgYm1fbG9va3VwOwogCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXJ2aWNlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKIApAQCAtMTAxLDE2ICsxMDEsMTYgQEAKICAgICAgICAgLy92aWEgQmVhbk1hbmFnZXIgb2YgV0FSCiAgICAgICAgIFNldCB3YXJCZWFucyA9IGJtX2F0X2luai5nZXRCZWFucyhUZXN0QmVhbi5jbGFzcyxuZXcgQW5ub3RhdGlvbkxpdGVyYWw8QW55PigpIHt9KTsKICAgICAgICAgaWYgKHdhckJlYW5zLnNpemUoKSAhPSAxKSBtc2cgKz0gIlRlc3RCZWFuIGluIFdBUiBpcyBub3QgYXZhaWxhYmxlIHZpYSB0aGUgV0FSIEJlYW5NYW5hZ2VyIjsKLSAgICAgICAgCisKICAgICAgICAgU2V0IHdlYmluZkxpYkJlYW5zID0gYm1fYXRfaW5qLmdldEJlYW5zKFRlc3RCZWFuSW5XZWJJbmZMaWIuY2xhc3MsbmV3IEFubm90YXRpb25MaXRlcmFsPEFueT4oKSB7fSk7CiAgICAgICAgIGlmICh3ZWJpbmZMaWJCZWFucy5zaXplKCkgIT0gMSkgbXNnICs9ICJUZXN0QmVhbiBpbiBXRUItSU5GL2xpYiBpcyBub3QgYXZhaWxhYmxlIHZpYSB0aGUgV0FSIEJlYW5NYW5hZ2VyIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0IEJlYW4gZnJvbSBXRUItSU5GL2xpYiB2aWEgQmVhbk1hbmFnZXI6IiArIHdlYmluZkxpYkJlYW5zKTsKLSAgICAgICAgCisKICAgICAgICAgLy9UZXN0IGluamVjdGlvbiBpbnRvIFdFQi1JTkYvbGliIGJlYW5zCiAgICAgICAgIG1zZyArPSB0Yml3aWwudGVzdEluamVjdGlvbigpOwotICAgICAgICAKKwogICAgICAgICBtc2cgKz0gdGVzdEVNSW5qZWN0aW9uKHJlcSk7Ci0gICAgICAgIAorCiAgICAgICAgIHdyaXRlci53cml0ZSgiaW5pdFBhcmFtczogIiArIG1zZyArICJcbiIpOwogICAgIH0KIApAQCAtMTMzLDcgKzEzMyw3IEBACiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJsbHF1ZXJ5Ii5lcXVhbHModGVzdGNhc2UpKSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzID0ganQubGF6eUxvYWRpbmdCeVF1ZXJ5KCJDYXJsYSIpOwogICAgICAgICAgICAgfSBlbHNlIGlmICgibGxpbmoiLmVxdWFscyh0ZXN0Y2FzZSkpewotICAgICAgICAgICAgICAgIHN0YXR1cyA9ICgodGJpICE9IG51bGwpICYmIAorICAgICAgICAgICAgICAgIHN0YXR1cyA9ICgodGJpICE9IG51bGwpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAodGJpLnRlc3REYXRhc291cmNlSW5qZWN0aW9uKCkudHJpbSgpLmxlbmd0aCgpPT0wKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoc3RhdHVzKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItamF2YWVlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvdXRpbC9KUEFSZXNvdXJjZVByb2R1Y2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItamF2YWVlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvdXRpbC9KUEFSZXNvdXJjZVByb2R1Y2VyLmphdmEKaW5kZXggMThiYmE3Ny4uOTI2MTZmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L3V0aWwvSlBBUmVzb3VyY2VQcm9kdWNlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1qYXZhZWUtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC91dGlsL0pQQVJlc291cmNlUHJvZHVjZXIuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogQFNpbmdsZXRvbgogcHVibGljIGNsYXNzIEpQQVJlc291cmNlUHJvZHVjZXIgewogICAgIEBQcm9kdWNlcyBAUGVyc2lzdGVuY2VDb250ZXh0KHVuaXROYW1lPSJwdTEiKQotICAgIC8vQFRlc3REYXRhYmFzZSAKKyAgICAvL0BUZXN0RGF0YWJhc2UKICAgICBFbnRpdHlNYW5hZ2VyIGN1c3RvbWVyRGF0YWJhc2VQZXJzaXN0ZW5jZVVuaXQ7CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1qYXZhZWUtaW5qZWN0aW9uL3V0aWwvdGVzdC9iZWFucy93YmluZmxpYi9UZXN0QmVhbkluV2ViSW5mTGliLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItamF2YWVlLWluamVjdGlvbi91dGlsL3Rlc3QvYmVhbnMvd2JpbmZsaWIvVGVzdEJlYW5JbldlYkluZkxpYi5qYXZhCmluZGV4IDc2MzVjZTEuLmQ4ZjAyNmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1qYXZhZWUtaW5qZWN0aW9uL3V0aWwvdGVzdC9iZWFucy93YmluZmxpYi9UZXN0QmVhbkluV2ViSW5mTGliLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vdXRpbC90ZXN0L2JlYW5zL3diaW5mbGliL1Rlc3RCZWFuSW5XZWJJbmZMaWIuamF2YQpAQCAtMjksMTEgKzI5LDExIEBACiBwdWJsaWMgY2xhc3MgVGVzdEJlYW5JbldlYkluZkxpYiB7CiAgICAgQEluamVjdAogICAgIEJlYW5NYW5hZ2VyIGJtOwotICAgIAotLy8gICAgQEluamVjdCAvL0BUZXN0RGF0YWJhc2UgCisKKy8vICAgIEBJbmplY3QgLy9AVGVzdERhdGFiYXNlCiAvLyAgICBFbnRpdHlNYW5hZ2VyIGVtZl9hdF9pbmo7CiAKLSAgICBAUGVyc2lzdGVuY2VDb250ZXh0KHVuaXROYW1lPSJwdTEiKSAgCisgICAgQFBlcnNpc3RlbmNlQ29udGV4dCh1bml0TmFtZT0icHUxIikKICAgICBFbnRpdHlNYW5hZ2VyIGVtZl9hdF9wdTsKIAogICAgIHB1YmxpYyBTdHJpbmcgdGVzdEluamVjdGlvbigpIHsKQEAgLTQ0LDggKzQ0LDggQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFTUYgaW5qZWN0ZWQgaW4gV0VCLUlORi9saWIgYmVhbiBpcyAiICsgZW1mX2F0X3B1KTsKICAgICAgICAgaWYgKGVtZl9hdF9wdSA9PSBudWxsKQogICAgICAgICAgICAgcmV0dXJuICJFTUYgaW5qZWN0ZWQgdmlhIEBQZXJzaXN0ZW5jZUNvbnRleHQgaXMgbm90IGluamVjdGVkIGludG8gIiArCi0gICAgICAgICAgICAJCSJ0aGUgVGVzdEJlYW4gcGFja2FnZWQgaW4gV0VCLUlORi9saWIiOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgInRoZSBUZXN0QmVhbiBwYWNrYWdlZCBpbiBXRUItSU5GL2xpYiI7CisKICAgICAgICAgU2V0PEJlYW48Pz4+IHdlYmluZkxpYkJlYW5zID0gYm0uZ2V0QmVhbnMoVGVzdEJlYW5JbldlYkluZkxpYi5jbGFzcywgbmV3IEFubm90YXRpb25MaXRlcmFsPEFueT4oKSB7fSk7CiAgICAgICAgIGlmICh3ZWJpbmZMaWJCZWFucy5zaXplKCkgIT0gMSkKICAgICAgICAgICAgIHJldHVybiAiVGVzdEJlYW4gaW4gV0VCLUlORi9saWIgaXMgbm90IGF2YWlsYWJsZSB2aWEgdGhlIFdFQi1JTkYvbGliICIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1vcmRlcmluZy1yZXZlcnNlZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItb3JkZXJpbmctcmV2ZXJzZWQvV2ViVGVzdC5qYXZhCmluZGV4IDljYWJiM2QuLjViODYxNWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1vcmRlcmluZy1yZXZlcnNlZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLW9yZGVyaW5nLXJldmVyc2VkL1dlYlRlc3QuamF2YQpAQCAtNjksNyArNjksNyBAQAogICAgICAgICAgICAgICAgIGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibGluZSA9ICIgKyBsaW5lKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1vcmRlcmluZy1yZXZlcnNlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLW9yZGVyaW5nLXJldmVyc2VkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzZiNWI1YS4uZWIzOGExOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLW9yZGVyaW5nLXJldmVyc2VkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLW9yZGVyaW5nLXJldmVyc2VkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItd2l0aC1vcmRlcmluZy1yZXZlcnNlZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLW9yZGVyaW5nLXJldmVyc2VkL3NlcnZsZXQvc2VydmxldC9UZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLW9yZGVyaW5nLXJldmVyc2VkL3NlcnZsZXQvc2VydmxldC9UZXN0QmVhbi5qYXZhCmluZGV4IDhiY2ViYjQuLmY2OTFkOTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1vcmRlcmluZy1yZXZlcnNlZC9zZXJ2bGV0L3NlcnZsZXQvVGVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItb3JkZXJpbmctcmV2ZXJzZWQvc2VydmxldC9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEKQEAgLTE1LDcgKzE1LDcgQEAKICAqLwogcGFja2FnZSBzZXJ2bGV0OwogCi0vL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4gCisvL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4KIHB1YmxpYyBjbGFzcyBUZXN0QmVhbiB7CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1vcmRlcmluZy1yZXZlcnNlZC9zZXJ2bGV0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1vcmRlcmluZy1yZXZlcnNlZC9zZXJ2bGV0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQppbmRleCA5OTQ2ZjEyLi5iYTk5MmJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItb3JkZXJpbmctcmV2ZXJzZWQvc2VydmxldC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLW9yZGVyaW5nLXJldmVyc2VkL3NlcnZsZXQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCkBAIC0zNywyMSArMzcsMjEgQEAKIGltcG9ydCBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQ7CiAKIEBXZWJTZXJ2bGV0KAotICAgIG5hbWUgPSAibXl0ZXN0IiwgCi0gICAgdXJsUGF0dGVybnMgPSB7ICIvbXl1cmwiIH0sIAotICAgIGluaXRQYXJhbXMgPSB7IAorICAgIG5hbWUgPSAibXl0ZXN0IiwKKyAgICB1cmxQYXR0ZXJucyA9IHsgIi9teXVybCIgfSwKKyAgICBpbml0UGFyYW1zID0gewogICAgICAgICBAV2ViSW5pdFBhcmFtKG5hbWUgPSAibjEiLCB2YWx1ZSA9ICJ2MSIpLAogICAgICAgICBAV2ViSW5pdFBhcmFtKG5hbWUgPSAibjIiLCB2YWx1ZSA9ICJ2MiIpIH0pCiBwdWJsaWMgY2xhc3MgVGVzdFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAgICAgQEluamVjdAogICAgIFRlc3RCZWFuIHRiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIEJlYW5NYW5hZ2VyIGJtOwogCiAgICAgQEluamVjdAogICAgIEZvbyBmOyAvLyBmcm9tIFdFQi1JTkYvbGliL2FscGhhLmphcgotICAgIAorCiAgICAgQEluamVjdAogICAgIEJhciBiOyAvLyBmcm9tIFdFQi1JTkYvbGliL2JyYXZvLmphcgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItb3JkZXJpbmcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLW9yZGVyaW5nL1dlYlRlc3QuamF2YQppbmRleCAyYTE0NTNmLi5lZjMxNTE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItb3JkZXJpbmcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1vcmRlcmluZy9XZWJUZXN0LmphdmEKQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgICAgICAgICBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxpbmUgPSAiICsgbGluZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItb3JkZXJpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1vcmRlcmluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDU0MmQwMTEuLmY4OTUwNjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1vcmRlcmluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1vcmRlcmluZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLXdpdGgtb3JkZXJpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1vcmRlcmluZy9zZXJ2bGV0L3NlcnZsZXQvVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1vcmRlcmluZy9zZXJ2bGV0L3NlcnZsZXQvVGVzdEJlYW4uamF2YQppbmRleCA4YmNlYmI0Li5mNjkxZDk3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItb3JkZXJpbmcvc2VydmxldC9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLW9yZGVyaW5nL3NlcnZsZXQvc2VydmxldC9UZXN0QmVhbi5qYXZhCkBAIC0xNSw3ICsxNSw3IEBACiAgKi8KIHBhY2thZ2Ugc2VydmxldDsKIAotLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuIAorLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuCiBwdWJsaWMgY2xhc3MgVGVzdEJlYW4gewogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItb3JkZXJpbmcvc2VydmxldC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItb3JkZXJpbmcvc2VydmxldC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggOTI1MmYyZC4uMDM4NDQ1NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLW9yZGVyaW5nL3NlcnZsZXQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1vcmRlcmluZy9zZXJ2bGV0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtMzgsMjEgKzM4LDIxIEBACiBpbXBvcnQgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0OwogCiBAV2ViU2VydmxldCgKLSAgICBuYW1lID0gIm15dGVzdCIsIAotICAgIHVybFBhdHRlcm5zID0geyAiL215dXJsIiB9LCAKLSAgICBpbml0UGFyYW1zID0geyAKKyAgICBuYW1lID0gIm15dGVzdCIsCisgICAgdXJsUGF0dGVybnMgPSB7ICIvbXl1cmwiIH0sCisgICAgaW5pdFBhcmFtcyA9IHsKICAgICAgICAgQFdlYkluaXRQYXJhbShuYW1lID0gIm4xIiwgdmFsdWUgPSAidjEiKSwKICAgICAgICAgQFdlYkluaXRQYXJhbShuYW1lID0gIm4yIiwgdmFsdWUgPSAidjIiKSB9KQogcHVibGljIGNsYXNzIFRlc3RTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogICAgIEBJbmplY3QKICAgICBUZXN0QmVhbiB0YjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBCZWFuTWFuYWdlciBibTsKIAogICAgIEBJbmplY3QKICAgICBGb28gZjsgLy8gZnJvbSBXRUItSU5GL2xpYi9hbHBoYS5qYXIKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBCYXIgYjsgLy8gZnJvbSBXRUItSU5GL2xpYi9icmF2by5qYXIKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi9XZWJUZXN0LmphdmEKaW5kZXggMWVhNzEwYi4uZmU3YjRiMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWIvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEBXZWJTZXJ2bGV0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDYsNyArNDYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtOTUsMTAgKzk1LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGJiN2JjOGQuLjVkN2VkZTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliL2J1aWxkLnhtbAppbmRleCA3ZjdmM2VlLi5mMTgxNDFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxkZWxldGUgZmlsZT0ibGliL2JlYW4tbGliLmphciIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDwhLS0gY3JlYXRlIFdFQi1JTkYvbGliL2JlYW4tbGliLmphciAtLT4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KQEAgLTU0LDggKzU0LDggQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgPC9qYXI+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotICAgCi0gICAgICAgIDwhLS0gY29tcGlsZSB0ZXN0IHNlcnZsZXQgLS0+ICAgICAKKworICAgICAgICA8IS0tIGNvbXBpbGUgdGVzdCBzZXJ2bGV0IC0tPgogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBDb21waWxpbmcgdGVzdCBzb3VyY2UgZmlsZXMiIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgICAgIDxta2RpciBkaXI9InNlcnZsZXQiLz4KQEAgLTYzLDIzICs2MywyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC05MSwxMCArOTEsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWIvc2VydmxldC9UZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliL3NlcnZsZXQvVGVzdEJlYW4uamF2YQppbmRleCBjNjk2Y2FmLi42MDhjNGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWIvc2VydmxldC9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEKQEAgLTE0LDggKzE0LDggQEAKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogICovCiAKLS8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLiAKLXB1YmxpYyBjbGFzcyBUZXN0QmVhbiAKKy8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLgorcHVibGljIGNsYXNzIFRlc3RCZWFuCiB7CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWIvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDkwOGE1Y2QuLjhiZDllMDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtNDEsOCArNDEsOCBAQAogICAgIEBJbmplY3QgVGVzdEJlYW5JbldlYkluZkxpYiB0Yml3aWw7CiAKICAgICBCZWFuTWFuYWdlciBibTE7Ci0gICAgCi0gICAgQEluamVjdCAKKworICAgIEBJbmplY3QKICAgICBwcml2YXRlIHRyYW5zaWVudCBvcmcuamJvc3MubG9nZ2luZy5Mb2dnZXIgbG9nOwogCiAgICAgcHVibGljIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKQEAgLTcyLDE0ICs3MiwxNCBAQAogICAgICAgICAvL3ZpYSBCZWFuTWFuYWdlciBvZiBXQVIKICAgICAgICAgU2V0IHdhckJlYW5zID0gYm0uZ2V0QmVhbnMoVGVzdEJlYW4uY2xhc3MsbmV3IEFubm90YXRpb25MaXRlcmFsPEFueT4oKSB7fSk7CiAgICAgICAgIGlmICh3YXJCZWFucy5zaXplKCkgIT0gMSkgbXNnICs9ICJUZXN0QmVhbiBpbiBXQVIgaXMgbm90IGF2YWlsYWJsZSB2aWEgdGhlIFdBUiBCZWFuTWFuYWdlciI7Ci0gICAgICAgIAorCiAgICAgICAgIFNldCB3ZWJpbmZMaWJCZWFucyA9IGJtLmdldEJlYW5zKFRlc3RCZWFuSW5XZWJJbmZMaWIuY2xhc3MsbmV3IEFubm90YXRpb25MaXRlcmFsPEFueT4oKSB7fSk7CiAgICAgICAgIGlmICh3ZWJpbmZMaWJCZWFucy5zaXplKCkgIT0gMSkgbXNnICs9ICJUZXN0QmVhbiBpbiBXRUItSU5GL2xpYiBpcyBub3QgYXZhaWxhYmxlIHZpYSB0aGUgV0FSIEJlYW5NYW5hZ2VyIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0IEJlYW4gZnJvbSBXRUItSU5GL2xpYiB2aWEgQmVhbk1hbmFnZXI6IiArIHdlYmluZkxpYkJlYW5zKTsKLSAgICAgICAgCisKICAgICAgICAgLy9UZXN0IGluamVjdGlvbiBpbnRvIFdFQi1JTkYvbGliIGJlYW5zCiAgICAgICAgIG1zZyArPSB0Yml3aWwudGVzdEluamVjdGlvbigpOwotICAgICAgICAKKwogICAgICAgICB3cml0ZXIud3JpdGUoImluaXRQYXJhbXM6ICIgKyBtc2cgKyAiXG4iKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9idWlsZC54bWwKaW5kZXggOGJlMmFiNy4uYTkzMjNkNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL2J1aWxkLnhtbApAQCAtMzgsOCArMzgsOCBAQAogICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXIiLz4KICA8IS0tCiAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iZ2VuZXJpYy1lbWJlZGRlZCIvPgotCTxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImdlbmVyaWMtZW1iZWRkZWQiLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CiAgICA8L2FudGNhbGw+CiAgLS0+CiAgIDwvdGFyZ2V0PgpAQCAtNTEsNyArNTEsNyBAQAogICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogICAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS9nZW5lcmljLWVtYmVkZGVkQXBwLmVhciIKICAgICAgICBhcHB4bWw9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCI+Ci0gICAgICAgICAgICAKKwogICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCmluZGV4IDY5NmRkM2UuLjVhNTIxMGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKQEAgLTgxLDggKzgxLDggQEAKICAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgotCTxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8c2VjdXJpdHktaWRlbnRpdHk+CiAgICAgICAgIDx1c2UtY2FsbGVyLWlkZW50aXR5Lz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmluZGV4IGRlNzAxZGYuLjkxM2E0NjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbApAQCAtODQsNyArODQsNyBAQAogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8Z2VuLWNsYXNzZXMvPgogICAgIDwvZWpiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQppbmRleCBhN2YyNGJlLi5mZTE2MTg3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogCiAgICAgcHVibGljIE1lc3NhZ2VDaGVja2VyRUpCKCkge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImJlYW4gcmVtb3ZlZCIpOwogICAgICAgICBoZWxkQ29uID0gbnVsbDsKQEAgLTcyLDExICs3MiwxMSBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5nZXRMb2NrT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICAvL1RlbGwgdGhlIHJlc291cmNlIGFkYXB0ZXIgdGhlIGNsaWVudCBpcyByZWFkeSB0byBydW4KLSAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5QWxsKCk7IAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnlBbGwoKTsKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJOT1RJRklFRC4uLiBTVEFSVCBXQUlUSU5HIik7CiAgICAgICAgICAgICAgICAgLy9XYWl0IHVudGlsIGJlaW5nIHRvbGQgdG8gcmVhZCBmcm9tIHRoZSBkYXRhYmFzZQotICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS53YWl0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC04NCwyMiArODQsMjIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE1lc3NhZ2VDb3VudCgpIHsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGdldEZyZXNoQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgaW50IGNvdW50MSA9IGdldENvdW50KGNvbik7CiAgICAgICAgICAgICBjb24uY2xvc2UoKTsKLSAgICAgICAgICAgIAotCSAgICAvKgorCisgICAgICAgIC8qCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeSgpOwogICAgICAgICAgICAgfQotCSAgICAqLwotICAgICAgICAgICAgICAgIAorICAgICAgICAqLworCiAgICAgICAgICAgICByZXR1cm4gY291bnQxOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLm91dCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCX0KKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q291bnQoQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtMTI1LDEwICsxMjUsMTAgQEAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIHVzZXIgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvdXNlciIpOwogICAgICAgICAgICAgcGFzc3dvcmQgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvcGFzc3dvcmQiKTsKLQkgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2Vpcy90ZXN0QWRtaW4iKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMSU5HIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOwotCSAgICBDb250cm9scy5pbml0aWFsaXplKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTEVEIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOworICAgICAgICBDb250cm9scyA9IChNeUFkbWluT2JqZWN0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL3Rlc3RBZG1pbiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExJTkcgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7CisgICAgICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMRUQgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTE2Myw3ICsxNjMsNyBAQAogICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoY29uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gY29uOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTE3NCw3ICsxNzQsNyBAQAogICAgICAgICAgICAgdGhyb3cgZXgxOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGNsb3NlQ29ubmVjdGlvbihDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmIChoZWxkQ29uICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGFkMjA3Yi4uMGIzOGMxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogZWpiLWphci54bWw9TUVUQS1JTkYvZWpiLWphci54bWwKIHN1bi1lamItamFyLnhtbD1NRVRBLUlORi9zdW4tZWpiLWphci54bWwKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKaW5kZXggZGQwMjAzOS4uNWZhZTBmNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgKiBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgogICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBvbmUgYXJndW1lbnQgb2YgdHlwZQogICAgICAqIGpha2FydGEuZWpiLk1lc3NhZ2VEcml2ZW5Db250ZXh0LgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIG1kYwogICAgICAqICAgICAgICAgICAgdGhlIGNvbnRleHQgdG8gc2V0CiAgICAgICovCkBAIC02NCw5ICs2NCw5IEBACiAgICAgLyoqCiAgICAgICogb25NZXNzYWdlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYQogICAgICAqIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG9uZSBhcmd1bWVudCBvZiB0eXBlIGpha2FydGEuam1zLk1lc3NhZ2UuCi0gICAgICogCisgICAgICoKICAgICAgKiBDYXN0cyB0aGUgaW5jb21pbmcgTWVzc2FnZSB0byBhIFRleHRNZXNzYWdlIGFuZCBkaXNwbGF5cyB0aGUgdGV4dC4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBpbk1lc3NhZ2UKICAgICAgKiAgICAgICAgICAgIHRoZSBpbmNvbWluZyBtZXNzYWdlCiAgICAgICovCkBAIC0xMjMsMTQgKzEyMywxNCBAQAogICAgICAgICAgICAgICAgICAqIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgICogZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOyBkYkNvbm5lY3Rpb24gPQogICAgICAgICAgICAgICAgICAqIGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAgKiAKKyAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAqIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOyBTdHJpbmcgcXVlcnkKICAgICAgICAgICAgICAgICAgKiA9ICJTRUxFQ1QgaWQgZnJvbSBtZXNzYWdlcyB3aGVyZSBpZCA9ICdRUSciOyBSZXN1bHRTZXQKICAgICAgICAgICAgICAgICAgKiByZXN1bHRzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkpOyByZXN1bHRzLm5leHQoKTsKICAgICAgICAgICAgICAgICAgKiBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKwogICAgICAgICAgICAgICAgICAqIHJlc3VsdHMuZ2V0SW50KCJiYWxhbmNlIikgKyAiIGRvbGxhcnMiKTsgcmVzdWx0cy5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAqIHN0bXQuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgKiAKKyAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAqIFN5c3RlbS5vdXQucHJpbnRsbigiUmVhZCBvbmUgYWNjb3VudFxuIik7CiAgICAgICAgICAgICAgICAgICovCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9idWlsZC54bWwKaW5kZXggY2NkM2ZhNS4uZGI2NmYwYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9idWlsZC54bWwKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iZ2VuZXJpYy1lbWJlZGRlZCIgLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImdlbmVyaWMtZW1iZWRkZWQiIC8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9NRVRBLUlORi9yYS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL01FVEEtSU5GL3JhLnhtbAppbmRleCAyY2EyZWJjLi4yMWRlYjkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL01FVEEtSU5GL3JhLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL01FVEEtSU5GL3JhLnhtbApAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8aW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPgogICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXI+CiAgICAgICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXItdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lcgpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYy1jbGFzcz4KICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYz4KICAgICAgICAgICAgICAgICA8L21lc3NhZ2VsaXN0ZW5lcj4KLSAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4KICAgICAgICAgPC9pbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KICAgICAgICAgPGFkbWlub2JqZWN0PgogICAgICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L2FkbWlub2JqZWN0LWludGVyZmFjZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2J1aWxkLnhtbAppbmRleCBmZjhiY2MyLi44NDk2ZjYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvYnVpbGQueG1sCkBAIC0zMCw4ICszMCw4IEBACiAKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImluaXQtY29tbW9uIiA+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KLQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgorICAgIDxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+CisgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGphciBqYXJmaWxlPSIuLi9nZW5lcmljLXJhLmphciIgYmFzZWRpcj0iY2xhc3NlcyIKICAgICAgICAgIGluY2x1ZGVzPSJjb25uZWN0b3IvKi5jbGFzcyIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKaW5kZXggMzU0MTIzNS4uOGFiYTI2OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29ubmVjdG9yOwogCiAvKioKLSAqIAorICoKICAqIEBhdXRob3IgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBDb250cm9scyB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKaW5kZXggMGM4MGFhNi4uOGM2YjIyZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogaW1wb3J0IGpha2FydGEucmVzb3VyY2Uuc3BpLndvcmsuV29yazsKIAogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgRGVsaXZlcnlXb3JrIGltcGxlbWVudHMgV29yayB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCmluZGV4IDU5N2EzNGIuLjIxNmRmYTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAKIC8qKgogICogY29sbGVjdGlvbiBvZiBtZXNzYWdlcy4KLSAqIAorICoKICAqIEBhdXRob3IgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKaW5kZXggNjA3NWVjNC4uNmY1ZjE1ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogaW1wb3J0IGpha2FydGEucmVzb3VyY2Uuc3BpLndvcmsuV29ya01hbmFnZXI7CiAKIC8qKgotICogCisgKgogICogQGF1dGhvciBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE15V29yayBpbXBsZW1lbnRzIFdvcmsgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQppbmRleCA2Mjg1OWM4Li40NDllMjQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogLyoqCiAgKiBUaGlzIGNsYXNzIGlzIHN1cHBvc2VkIHRvIGltcGxlbWVudGVkIGFzIGEgSmF2YUJlYW4gc28gdGhhdCB0aGUgYXBwIHNlcnZlcgogICogY2FuIGluc3RhbnRpYXRlIGFuZCBjb25maWd1cmUgaXQgYXQgdGhlIHJ1bnRpbWUuCi0gKiAKKyAqCiAgKiBAYXV0aG9yIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMgaW1wbGVtZW50cyBBY3RpdmF0aW9uU3BlYywKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCmluZGV4IDBmNzFiMjcuLjdhOTFjZGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQpAQCAtMzUsNyArMzUsNyBAQAogCiAvKioKICAqIFRoaXMgaXMgYSBzYW1wbGUgcmVzb3VyY2UgYWRhcHRlcgotICogCisgKgogICogQGF1dGhvciBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIFNpbXBsZVJlc291cmNlQWRhcHRlckltcGwgaW1wbGVtZW50cyBSZXNvdXJjZUFkYXB0ZXIsCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQppbmRleCA2Y2Y1NDZlLi5hODQ3YjY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIGltcG9ydCBqYWthcnRhLnJlc291cmNlLnNwaS53b3JrLldvcmtNYW5hZ2VyOwogCiAvKioKLSAqIAorICoKICAqIEBhdXRob3IgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBUZXN0V01Xb3JrIGltcGxlbWVudHMgV29yayB7CkBAIC0zMyw3ICszMyw3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGRvTmVzdDsKICAgICBwcml2YXRlIFdvcmtNYW5hZ2VyIHdtOwogICAgIHByaXZhdGUgRXhlY3V0aW9uQ29udGV4dCBjdHg7Ci0gICAgCisKICAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSkgewogICAgICAgICB0aGlzKGlkLCBpc1JvZ3VlLCBmYWxzZSwgbnVsbCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCBhZGEwYTBjLi44NzkwNThhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogaW1wb3J0IGphdmF4LnRyYW5zYWN0aW9uLnhhLlhpZDsKIAogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgV29ya0Rpc3BhdGNoZXIgaW1wbGVtZW50cyBXb3JrIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQppbmRleCAxOTFiOTA0Li4zMjMxOTBiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCkBAIC02OCw3ICs2OCw3IEBACiAKICAgICAvKioKICAgICAgKiBDb21wdXRlIHRoZSBoYXNoIGNvZGUuCi0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuIHRoZSBjb21wdXRlZCBoYXNoY29kZQogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CkBAIC04MiwxMyArODIsMTMgQEAKIAogICAgIC8qCiAgICAgICogQ29udmVydCB0byBTdHJpbmcKLSAgICAgKiAKKyAgICAgKgogICAgICAqIDxwPiBUaGlzIGlzIG5vcm1hbGx5IHVzZWQgdG8gZGlzcGxheSB0aGUgWElEIHdoZW4gZGVidWdnaW5nLgogICAgICAqLwogCiAgICAgLyoqCiAgICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGlzIFhJRC4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIFhJRAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CkBAIC0xMDYsNyArMTA2LDcgQEAKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGJyYW5jaCBxdWFsaWZpZXIgZm9yIHRoaXMgWElELgotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybiB0aGUgYnJhbmNoIHF1YWxpZmllcgogICAgICAqLwogICAgIHB1YmxpYyBieXRlW10gZ2V0QnJhbmNoUXVhbGlmaWVyKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9uby1pbnRlcmZhY2UtbG9jYWwtdmlldy1wcm94eS1zZXJpYWxpemFibGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vbm8taW50ZXJmYWNlLWxvY2FsLXZpZXctcHJveHktc2VyaWFsaXphYmxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzA2ZDQ2YS4uYzk3ZjkxYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9uby1pbnRlcmZhY2UtbG9jYWwtdmlldy1wcm94eS1zZXJpYWxpemFibGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL25vLWludGVyZmFjZS1sb2NhbC12aWV3LXByb3h5LXNlcmlhbGl6YWJsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW5vLWludGVyZmFjZS1sb2NhbC12aWV3LXByb3h5LXNlcmlhbGl6YWJsZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9uby1pbnRlcmZhY2UtbG9jYWwtdmlldy1wcm94eS1zZXJpYWxpemFibGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9uby1pbnRlcmZhY2UtbG9jYWwtdmlldy1wcm94eS1zZXJpYWxpemFibGUvYnVpbGQueG1sCmluZGV4IDI5NWQwODYuLmViNzkwYmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vbm8taW50ZXJmYWNlLWxvY2FsLXZpZXctcHJveHktc2VyaWFsaXphYmxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL25vLWludGVyZmFjZS1sb2NhbC12aWV3LXByb3h5LXNlcmlhbGl6YWJsZS9idWlsZC54bWwKQEAgLTMzLDc1ICszMyw3NSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGNyZWF0ZS1yZXNvdXJjZXMsZGVwbG95LHJ1bix1bmRlcGxveSxkZWxldGUtcmVzb3VyY2VzIiAvPgogCi0JPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KLQkJPGRlbGV0ZT4KLQkJCTxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiIC8+Ci0JCQk8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iIC8+CisgICAgICAgIDxkZWxldGU+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgorICAgICAgICA8L2RlbGV0ZT4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0IiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotCQk8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgotCQk8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+Ci0JCQk8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLQkJPC9hbnRjYWxsPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgogCi0JCTxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIiAvPgorICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIgLz4KIAotCTwvdGFyZ2V0PgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCi0JPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJjcmVhdGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCiAKLQk8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgotCQkJPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9IiAvPgotCQkJPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9IiAvPgotCQkJPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iIC8+Ci0JCQk8Y2xhc3NwYXRoPgotCQkJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgLz4KLQkJCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249ImNsaWVudCIgLz4KLQkJCTwvY2xhc3NwYXRoPgotCQk8L2phdmE+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIgLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5wb3J0fSIgLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9IiAvPgorICAgICAgICAgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIC8+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJjbGllbnQiIC8+CisgICAgICAgICAgICA8L2NsYXNzcGF0aD4KKyAgICAgICAgPC9qYXZhPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KLQkJPC9hbnRjYWxsPgorICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgorICAgICAgICA8L2FudGNhbGw+CiAKLQkJPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1jb25ucG9vbC1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9uby1pbnRlcmZhY2UtbG9jYWwtdmlldy1wcm94eS1zZXJpYWxpemFibGUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL25vLWludGVyZmFjZS1sb2NhbC12aWV3LXByb3h5LXNlcmlhbGl6YWJsZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQppbmRleCA0NzY2OGE0Li5hYzQyOTA0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL25vLWludGVyZmFjZS1sb2NhbC12aWV3LXByb3h5LXNlcmlhbGl6YWJsZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL25vLWludGVyZmFjZS1sb2NhbC12aWV3LXByb3h5LXNlcmlhbGl6YWJsZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQpAQCAtMTksOCArMTksOCBAQAogcHVibGljIGludGVyZmFjZSBUZXN0QmVhbkludGVyZmFjZSB7CiAgICAgcHVibGljIHZvaWQgc2V0U3RhdGUoU3RyaW5nIHMpOwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdGUoKTsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIG1ldGhvZDEoKTsKIH0KLSAgICAKLSAKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL25vLWludGVyZmFjZS1sb2NhbC12aWV3LXByb3h5LXNlcmlhbGl6YWJsZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9uby1pbnRlcmZhY2UtbG9jYWwtdmlldy1wcm94eS1zZXJpYWxpemFibGUvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YQppbmRleCA3MDliZjFhLi4yY2I5YWNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL25vLWludGVyZmFjZS1sb2NhbC12aWV3LXByb3h5LXNlcmlhbGl6YWJsZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vbm8taW50ZXJmYWNlLWxvY2FsLXZpZXctcHJveHktc2VyaWFsaXphYmxlL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEKQEAgLTI5LDEzICsyOSwxMyBAQAogQFNlc3Npb25TY29wZWQKIHB1YmxpYyBjbGFzcyBUZXN0QmVhbiBpbXBsZW1lbnRzIFRlc3RCZWFuSW50ZXJmYWNlLCBTZXJpYWxpemFibGV7CiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIHRlc3RCZWFuSW52b2tlZCA9IGZhbHNlOwotICAgIAorCiAgICAgQEluamVjdAogICAgIEhlbGxvTm9JbnRlcmZhY2VMb2NhbFZpZXdTZnVsRUpCIHNmdWxFSkI7CiAKICAgICBASW5qZWN0CiAgICAgSGVsbG9Ob0ludGVyZmFjZUxvY2FsVmlld1NsZXNzRUpCIHNsZXNzRUpCOwotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgc2V0U3RhdGUoU3RyaW5nIHMpIHsKICAgICAgICAgdGVzdEJlYW5JbnZva2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vbm8taW50ZXJmYWNlLWxvY2FsLXZpZXctcHJveHktc2VyaWFsaXphYmxlL3NlcnZsZXQvdGVzdC9lamIvSGVsbG9Ob0ludGVyZmFjZUxvY2FsVmlld1NmdWxFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vbm8taW50ZXJmYWNlLWxvY2FsLXZpZXctcHJveHktc2VyaWFsaXphYmxlL3NlcnZsZXQvdGVzdC9lamIvSGVsbG9Ob0ludGVyZmFjZUxvY2FsVmlld1NmdWxFSkIuamF2YQppbmRleCBlOTRkZGYxLi5iYWM2YTliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL25vLWludGVyZmFjZS1sb2NhbC12aWV3LXByb3h5LXNlcmlhbGl6YWJsZS9zZXJ2bGV0L3Rlc3QvZWpiL0hlbGxvTm9JbnRlcmZhY2VMb2NhbFZpZXdTZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9uby1pbnRlcmZhY2UtbG9jYWwtdmlldy1wcm94eS1zZXJpYWxpemFibGUvc2VydmxldC90ZXN0L2VqYi9IZWxsb05vSW50ZXJmYWNlTG9jYWxWaWV3U2Z1bEVKQi5qYXZhCkBAIC0yMCwxMSArMjAsMTEgQEAKIAogQFN0YXRlZnVsCiBwdWJsaWMgY2xhc3MgSGVsbG9Ob0ludGVyZmFjZUxvY2FsVmlld1NmdWxFSkIgewotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgbWVzc2FnZTsKICAgICBwdWJsaWMgdm9pZCBzZXRTdGF0ZShTdHJpbmcgbXNnKXsKICAgICAgICAgdGhpcy5tZXNzYWdlID0gbXNnOwotICAgICAgICAKKwogICAgIH0KICAgICBwdWJsaWMgU3RyaW5nIGdldFN0YXRlKCkgewogICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9uby1pbnRlcmZhY2UtbG9jYWwtdmlldy1wcm94eS1zZXJpYWxpemFibGUvc2VydmxldC90ZXN0L2VqYi9IZWxsb05vSW50ZXJmYWNlTG9jYWxWaWV3U2xlc3NFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vbm8taW50ZXJmYWNlLWxvY2FsLXZpZXctcHJveHktc2VyaWFsaXphYmxlL3NlcnZsZXQvdGVzdC9lamIvSGVsbG9Ob0ludGVyZmFjZUxvY2FsVmlld1NsZXNzRUpCLmphdmEKaW5kZXggZTAxZWVlMy4uYWZjNTk4NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9uby1pbnRlcmZhY2UtbG9jYWwtdmlldy1wcm94eS1zZXJpYWxpemFibGUvc2VydmxldC90ZXN0L2VqYi9IZWxsb05vSW50ZXJmYWNlTG9jYWxWaWV3U2xlc3NFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL25vLWludGVyZmFjZS1sb2NhbC12aWV3LXByb3h5LXNlcmlhbGl6YWJsZS9zZXJ2bGV0L3Rlc3QvZWpiL0hlbGxvTm9JbnRlcmZhY2VMb2NhbFZpZXdTbGVzc0VKQi5qYXZhCkBAIC0yMyw2ICsyMyw2IEBACiAgICAgcHVibGljIHZvaWQgbWV0aG9kMShTdHJpbmcgbXNnKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8iICsgbXNnKTsKICAgICB9Ci0gICAgCisKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9ub3JtYWwtYmVhbi1pbmplY3Rpb24tZWFyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL25vcm1hbC1iZWFuLWluamVjdGlvbi1lYXIvYnVpbGQucHJvcGVydGllcwppbmRleCBlOGNhNzgyLi5iZGI1OTA0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL25vcm1hbC1iZWFuLWluamVjdGlvbi1lYXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL25vcm1hbC1iZWFuLWluamVjdGlvbi1lYXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGktZnVsbC1lYXIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9ub3JtYWwtYmVhbi1pbmplY3Rpb24tZWFyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vbm9ybWFsLWJlYW4taW5qZWN0aW9uLWVhci9idWlsZC54bWwKaW5kZXggMTYwMzYwNS4uZTZhMjQ1MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9ub3JtYWwtYmVhbi1pbmplY3Rpb24tZWFyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL25vcm1hbC1iZWFuLWluamVjdGlvbi1lYXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0id2FyIi8+CkBAIC00Niw4ICs0Niw4IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotCTxqYXZhYyBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9tb2R1bGVzL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIHNyY2Rpcj0iY2xpZW50IiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZGVidWc9Im9uIiBmYWlsb25lcnJvcj0idHJ1ZSI+Ci0JIAorICAgIDxqYXZhYyBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9tb2R1bGVzL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIHNyY2Rpcj0iY2xpZW50IiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZGVidWc9Im9uIiBmYWlsb25lcnJvcj0idHJ1ZSI+CisKICAgICAgICAgPC9qYXZhYz4KIDwhLS0KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CkBAIC02MiwxNSArNjIsMTUgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi9Gb28uY2xhc3MsKiovSGVsbG8uY2xhc3MsKiovSGVsbG9SZW1vdGUuY2xhc3MsKiovU2luZ2xldG9uKi5jbGFzcywqKi9IZWxsb1N0YXRlbGVzcy5jbGFzcywqKi9IZWxsb1NpbmdsZXRvbi5jbGFzcywqKi9Gb29NYW5hZ2VkQmVhbi5jbGFzcywqKi9CYXJNYW5hZ2VkQmVhbi5jbGFzcywgKiovRm9vQmFyTWFuYWdlZEJlYW4uY2xhc3MsICoqL01hbmFnZWRTdXBlci5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CkBAIC03OSwxMCArNzksMTAgQEAKICAgICAgICAgICAgPGFyZyBsaW5lPSIke2h0dHAucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL25vcm1hbC1iZWFuLWluamVjdGlvbi1lYXIvd2FyL2NvbS9hY21lL05vcm1hbExvb2t1cEluRUFSU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9ub3JtYWwtYmVhbi1pbmplY3Rpb24tZWFyL3dhci9jb20vYWNtZS9Ob3JtYWxMb29rdXBJbkVBUlNlcnZsZXQuamF2YQppbmRleCA5N2RiMmJkLi5jODg2MmU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL25vcm1hbC1iZWFuLWluamVjdGlvbi1lYXIvd2FyL2NvbS9hY21lL05vcm1hbExvb2t1cEluRUFSU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vbm9ybWFsLWJlYW4taW5qZWN0aW9uLWVhci93YXIvY29tL2FjbWUvTm9ybWFsTG9va3VwSW5FQVJTZXJ2bGV0LmphdmEKQEAgLTQwLDggKzQwLDggQEAKICAgICBwcm90ZWN0ZWQgU3RyaW5nIG15U3RyaW5nOwogCiAgICAgcHJpdmF0ZSBIZWxsbyBzaW5nbGV0b24xOwotICAgIAotICAgIEBJbmplY3QgCisKKyAgICBASW5qZWN0CiAgICAgVGVzdEJlYW4gdHc7CiAKICAgICBwcml2YXRlIFN0cmluZyBtc2cgPSAiIjsKQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIHNpbmdsZXRvbjEuaGVsbG8oKTsKLSAgICAgICAgCisKICAgICAgICAgY2hlY2tGb3JOdWxsKHR3LCAibm9ybWFsIGxvb2t1cCBvZiBzZXNzaW9uIHNjb3BlZCBiZWFuIGluIHdhciBmYWlsZWQiKTsKIAogICAgICAgICBvdXQucHJpbnRsbihtc2cpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9wcm9ncmFtbWF0aWMtbG9va3VwLWVhci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9wcm9ncmFtbWF0aWMtbG9va3VwLWVhci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGU4Y2E3ODIuLmJkYjU5MDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vcHJvZ3JhbW1hdGljLWxvb2t1cC1lYXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3Byb2dyYW1tYXRpYy1sb29rdXAtZWFyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpLWZ1bGwtZWFyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vcHJvZ3JhbW1hdGljLWxvb2t1cC1lYXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9wcm9ncmFtbWF0aWMtbG9va3VwLWVhci9idWlsZC54bWwKaW5kZXggMTYwMzYwNS4uZTZhMjQ1MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9wcm9ncmFtbWF0aWMtbG9va3VwLWVhci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9wcm9ncmFtbWF0aWMtbG9va3VwLWVhci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJ3YXIiLz4KQEAgLTQ2LDggKzQ2LDggQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JPGphdmFjIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgc3JjZGlyPSJjbGllbnQiIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBkZWJ1Zz0ib24iIGZhaWxvbmVycm9yPSJ0cnVlIj4KLQkgCisgICAgPGphdmFjIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgc3JjZGlyPSJjbGllbnQiIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBkZWJ1Zz0ib24iIGZhaWxvbmVycm9yPSJ0cnVlIj4KKwogICAgICAgICA8L2phdmFjPgogPCEtLQogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KQEAgLTYyLDE1ICs2MiwxNSBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqL0Zvby5jbGFzcywqKi9IZWxsby5jbGFzcywqKi9IZWxsb1JlbW90ZS5jbGFzcywqKi9TaW5nbGV0b24qLmNsYXNzLCoqL0hlbGxvU3RhdGVsZXNzLmNsYXNzLCoqL0hlbGxvU2luZ2xldG9uLmNsYXNzLCoqL0Zvb01hbmFnZWRCZWFuLmNsYXNzLCoqL0Jhck1hbmFnZWRCZWFuLmNsYXNzLCAqKi9Gb29CYXJNYW5hZ2VkQmVhbi5jbGFzcywgKiovTWFuYWdlZFN1cGVyLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9tb2R1bGVzL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTc5LDEwICs3OSwxMCBAQAogICAgICAgICAgICA8YXJnIGxpbmU9IiR7aHR0cC5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vcHJvZ3JhbW1hdGljLWxvb2t1cC1lYXIvd2FyL2NvbS9hY21lL1Byb2dyYW1tYXRpY0xvb2t1cEluRUFSU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9wcm9ncmFtbWF0aWMtbG9va3VwLWVhci93YXIvY29tL2FjbWUvUHJvZ3JhbW1hdGljTG9va3VwSW5FQVJTZXJ2bGV0LmphdmEKaW5kZXggZWI2Mzc2OC4uMDc2Mzc2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9wcm9ncmFtbWF0aWMtbG9va3VwLWVhci93YXIvY29tL2FjbWUvUHJvZ3JhbW1hdGljTG9va3VwSW5FQVJTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9wcm9ncmFtbWF0aWMtbG9va3VwLWVhci93YXIvY29tL2FjbWUvUHJvZ3JhbW1hdGljTG9va3VwSW5FQVJTZXJ2bGV0LmphdmEKQEAgLTQwLDggKzQwLDggQEAKICAgICBwcm90ZWN0ZWQgU3RyaW5nIG15U3RyaW5nOwogCiAgICAgcHJpdmF0ZSBIZWxsbyBzaW5nbGV0b24xOwotICAgIAotICAgIEBJbmplY3QgCisKKyAgICBASW5qZWN0CiAgICAgSW5zdGFuY2U8VGVzdEJlYW4+IHByb2dyYW1tYXRpY0xvb2t1cDsKIAogICAgIHByaXZhdGUgU3RyaW5nIG1zZyA9ICIiOwpAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgc2luZ2xldG9uMS5oZWxsbygpOwotICAgICAgICAKKwogICAgICAgICBjaGVja0Zvck51bGwocHJvZ3JhbW1hdGljTG9va3VwLmdldCgpLCAicHJvZ3JhbW1hdGljIGxvb2t1cCBvZiBzZXNzaW9uIHNjb3BlZCBiZWFuIGluIHdhciBmYWlsZWQiKTsKIAogICAgICAgICBvdXQucHJpbnRsbihtc2cpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NlcnZsZXQtY29udGV4dC1pbmplY3Rpb24tY2RpL1dlYlRlc3QuamF2YQppbmRleCA3ZjQ3NDI2Li4yMDY3MmM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NlcnZsZXQtY29udGV4dC1pbmplY3Rpb24tY2RpL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NlcnZsZXQtY29udGV4dC1pbmplY3Rpb24tY2RpL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBAV2ViU2VydmxldCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk1LDEwICs5NSwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGNhMmVkYWUuLmJkZTA0ZjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2VydmxldC1jb250ZXh0LWluamVjdGlvbi1jZGkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NlcnZsZXQtY29udGV4dC1pbmplY3Rpb24tY2RpL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1jb250ZXh0LWluamVjdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NlcnZsZXQtY29udGV4dC1pbmplY3Rpb24tY2RpL2J1aWxkLnhtbAppbmRleCA4M2FkNjY2Li4wNjkxMjEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NlcnZsZXQtY29udGV4dC1pbmplY3Rpb24tY2RpL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NlcnZsZXQtY29udGV4dC1pbmplY3Rpb24tY2RpL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMyArNDcsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NlcnZsZXQtY29udGV4dC1pbmplY3Rpb24tY2RpL3NlcnZsZXQvdGVzdHMvY2RpL2FydGlmYWN0cy9EZXN0cm95ZWQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2VydmxldC1jb250ZXh0LWluamVjdGlvbi1jZGkvc2VydmxldC90ZXN0cy9jZGkvYXJ0aWZhY3RzL0Rlc3Ryb3llZC5qYXZhCmluZGV4IDYxZWYyNGEuLjIwZGE5MGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2VydmxldC1jb250ZXh0LWluamVjdGlvbi1jZGkvc2VydmxldC90ZXN0cy9jZGkvYXJ0aWZhY3RzL0Rlc3Ryb3llZC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2VydmxldC1jb250ZXh0LWluamVjdGlvbi1jZGkvc2VydmxldC90ZXN0cy9jZGkvYXJ0aWZhY3RzL0Rlc3Ryb3llZC5qYXZhCkBAIC0zMiw1ICszMiw1IEBACiBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5SVU5USU1FKQogcHVibGljIEBpbnRlcmZhY2UgRGVzdHJveWVkIHsKIAotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NlcnZsZXQtY29udGV4dC1pbmplY3Rpb24tY2RpL3NlcnZsZXQvdGVzdHMvY2RpL2FydGlmYWN0cy9Jbml0aWFsaXplZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9hcnRpZmFjdHMvSW5pdGlhbGl6ZWQuamF2YQppbmRleCA5YTBhMThlLi4wNzBhMjg5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NlcnZsZXQtY29udGV4dC1pbmplY3Rpb24tY2RpL3NlcnZsZXQvdGVzdHMvY2RpL2FydGlmYWN0cy9Jbml0aWFsaXplZC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2VydmxldC1jb250ZXh0LWluamVjdGlvbi1jZGkvc2VydmxldC90ZXN0cy9jZGkvYXJ0aWZhY3RzL0luaXRpYWxpemVkLmphdmEKQEAgLTMyLDUgKzMyLDUgQEAKIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlJVTlRJTUUpCiBwdWJsaWMgQGludGVyZmFjZSBJbml0aWFsaXplZCB7CiAKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9hcnRpZmFjdHMvUHJlZmVycmVkLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NlcnZsZXQtY29udGV4dC1pbmplY3Rpb24tY2RpL3NlcnZsZXQvdGVzdHMvY2RpL2FydGlmYWN0cy9QcmVmZXJyZWQuamF2YQppbmRleCA4M2ZlNDRlLi5iNjI4Zjg2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NlcnZsZXQtY29udGV4dC1pbmplY3Rpb24tY2RpL3NlcnZsZXQvdGVzdHMvY2RpL2FydGlmYWN0cy9QcmVmZXJyZWQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NlcnZsZXQtY29udGV4dC1pbmplY3Rpb24tY2RpL3NlcnZsZXQvdGVzdHMvY2RpL2FydGlmYWN0cy9QcmVmZXJyZWQuamF2YQpAQCAtMzIsNSArMzIsNSBAQAogQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuUlVOVElNRSkKIHB1YmxpYyBAaW50ZXJmYWNlIFByZWZlcnJlZCB7CiAKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NlcnZsZXQtY29udGV4dC1pbmplY3Rpb24tY2RpL3NlcnZsZXQvdGVzdHMvY2RpL3NlcnZsZXQvVGVzdEJlYW4uamF2YQppbmRleCA0MjFmODM2Li5jMDVlODY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NlcnZsZXQtY29udGV4dC1pbmplY3Rpb24tY2RpL3NlcnZsZXQvdGVzdHMvY2RpL3NlcnZsZXQvVGVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NlcnZsZXQtY29udGV4dC1pbmplY3Rpb24tY2RpL3NlcnZsZXQvdGVzdHMvY2RpL3NlcnZsZXQvVGVzdEJlYW4uamF2YQpAQCAtMTksMTIgKzE5LDEyIEBACiBpbXBvcnQgamFrYXJ0YS5pbmplY3QuSW5qZWN0OwogaW1wb3J0IGpha2FydGEuc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKIAotLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuIAorLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuCiBwdWJsaWMgY2xhc3MgVGVzdEJlYW4KIHsKICAgICBASW5qZWN0CiAgICAgU2VydmxldENvbnRleHQgc2M7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIG0xKCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKlNDID0gIiArIHNjLmdldENvbnRleHRQYXRoKCkpOwogICAgICAgICByZXR1cm4gc2MuZ2V0Q29udGV4dFBhdGgoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2VydmxldC1jb250ZXh0LWluamVjdGlvbi1jZGkvc2VydmxldC90ZXN0cy9jZGkvc2VydmxldC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggMmIyNjNhYy4uODQwNzE3OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTM4LDkgKzM4LDkgQEAKICAgICBUZXN0QmVhbiB0YjsKICAgICBASW5qZWN0CiAgICAgQmVhbk1hbmFnZXIgYm07Ci0gICAgCisKICAgICBCZWFuTWFuYWdlciBibTE7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgU2VydmxldENvbnRleHQgc2M7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub2FyZ2NvbnN0cnVjdG9yLW1pc3NpbmcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vYXJnY29uc3RydWN0b3ItbWlzc2luZy9XZWJUZXN0LmphdmEKaW5kZXggZDJjNjlhNi4uY2VmMWZjNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vYXJnY29uc3RydWN0b3ItbWlzc2luZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vYXJnY29uc3RydWN0b3ItbWlzc2luZy9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQFdlYlNlcnZsZXQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC05NCwxMCArOTQsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub2FyZ2NvbnN0cnVjdG9yLW1pc3NpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub2FyZ2NvbnN0cnVjdG9yLW1pc3NpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCA0ODA5ZTc1Li5lZGQ1ZGEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9hcmdjb25zdHJ1Y3Rvci1taXNzaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vYXJnY29uc3RydWN0b3ItbWlzc2luZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3IiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub2FyZ2NvbnN0cnVjdG9yLW1pc3NpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vYXJnY29uc3RydWN0b3ItbWlzc2luZy9idWlsZC54bWwKaW5kZXggYzI1ZTE3ZS4uZWFhMDZiZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vYXJnY29uc3RydWN0b3ItbWlzc2luZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vYXJnY29uc3RydWN0b3ItbWlzc2luZy9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IldlYlRlc3QuY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMjMgKzQ3LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vYXJnY29uc3RydWN0b3ItbWlzc2luZy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdE1hbmFnZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9hcmdjb25zdHJ1Y3Rvci1taXNzaW5nL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0TWFuYWdlZEJlYW4uamF2YQppbmRleCA4YmM4MDE0Li4xOTFmNGU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9hcmdjb25zdHJ1Y3Rvci1taXNzaW5nL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0TWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9hcmdjb25zdHJ1Y3Rvci1taXNzaW5nL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0TWFuYWdlZEJlYW4uamF2YQpAQCAtMTYsNyArMTYsNyBAQAogCiBwYWNrYWdlIHRlc3QuYmVhbnM7CiAKLS8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLiAKKy8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLgogLy9UaGlzIGJlYW4gaW1wbGVtZW50cyBTZXJpYWxpemFibGUgYXMgaXQgbmVlZHMgdG8gYmUgcGxhY2VkIGludG8gYSBTdGF0ZWZ1bCBCZWFuCiBAamFrYXJ0YS5hbm5vdGF0aW9uLk1hbmFnZWRCZWFuCiBwdWJsaWMgY2xhc3MgVGVzdE1hbmFnZWRCZWFuIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub2FyZ2NvbnN0cnVjdG9yLW1pc3Npbmcvc2VydmxldC90ZXN0L2ludGVyY2VwdG9ycy9UZXN0QXJvdW5kSW52b2tlSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub2FyZ2NvbnN0cnVjdG9yLW1pc3Npbmcvc2VydmxldC90ZXN0L2ludGVyY2VwdG9ycy9UZXN0QXJvdW5kSW52b2tlSW50ZXJjZXB0b3IuamF2YQppbmRleCA0Y2FhYWE3Li5lNjBlMDcxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9hcmdjb25zdHJ1Y3Rvci1taXNzaW5nL3NlcnZsZXQvdGVzdC9pbnRlcmNlcHRvcnMvVGVzdEFyb3VuZEludm9rZUludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vYXJnY29uc3RydWN0b3ItbWlzc2luZy9zZXJ2bGV0L3Rlc3QvaW50ZXJjZXB0b3JzL1Rlc3RBcm91bmRJbnZva2VJbnRlcmNlcHRvci5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgICAgIGFyb3VuZEludm9rZUNvdW50ID0gMDsKICAgICB9CiAKLSAgIEBBcm91bmRJbnZva2UgCisgICBAQXJvdW5kSW52b2tlCiAgICBwdWJsaWMgT2JqZWN0IHRlc3RNZXRob2QoSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0QXJvdW5kSW52b2tlSW50ZXJjZXRwcjo6IGFyb3VuZEludm9rZSBjYWxsZWQgLSB0YXJnZXQ6IiArIGN0eC5nZXRUYXJnZXQoKSArICIgLCBwYXJhbXM6IisgY3R4LmdldFBhcmFtZXRlcnMoKSk7CiAgICAgICAgIGFyb3VuZEludm9rZUNvdW50ICsrOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vYXJnY29uc3RydWN0b3ItbWlzc2luZy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vYXJnY29uc3RydWN0b3ItbWlzc2luZy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDE3M2IwMzAuLmRmNWVmMmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub2FyZ2NvbnN0cnVjdG9yLW1pc3Npbmcvc2VydmxldC90ZXN0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9hcmdjb25zdHJ1Y3Rvci1taXNzaW5nL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTcwLDkgKzcwLDkgQEAKICAgICAgICAgaW50IGNvdW50ID0gVGVzdEFyb3VuZEludm9rZUludGVyY2VwdG9yLmFyb3VuZEludm9rZUNvdW50OwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RBcm91bmRJbnZva2VJbnRlcmNlcHRvciBjYWxsZWQgIiArIGNvdW50ICsgIiB0aW1lcyIpOwogICAgICAgICBUZXN0QXJvdW5kSW52b2tlSW50ZXJjZXB0b3IucmVzZXQoKTsKLSAgICAgICAgaWYgKGNvdW50ID09IDEpIHJldHVybiAiIjsgCisgICAgICAgIGlmIChjb3VudCA9PSAxKSByZXR1cm4gIiI7CiAgICAgICAgICAgICBlbHNlIHJldHVybiAiSW50ZXJjZXB0b3IgaW52b2NhdGlvbiBjb3VudCIgKyBjb3VudCArICIgaW52YWxpZCI7CiAgICB9CiAKLSAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL1dlYlRlc3QuamF2YQppbmRleCBjYmQzYmUyLi44MTZlOTFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBAV2ViU2VydmxldCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk1LDEwICs5NSwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQ4MDllNzUuLmVkZDVkYTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL2J1aWxkLnhtbAppbmRleCA4M2FkNjY2Li4wNjkxMjEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMyArNDcsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0TWFuYWdlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2Uvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RNYW5hZ2VkQmVhbi5qYXZhCmluZGV4IDE2MzNjMWUuLjE1MGU0MjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2Uvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RNYW5hZ2VkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2Uvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RNYW5hZ2VkQmVhbi5qYXZhCkBAIC0xNiw3ICsxNiw3IEBACiAKIHBhY2thZ2UgdGVzdC5iZWFuczsKIAotLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuIAorLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuCiAvL1RoaXMgYmVhbiBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSBhcyBpdCBuZWVkcyB0byBiZSBwbGFjZWQgaW50byBhIFN0YXRlZnVsIEJlYW4KIEBqYWthcnRhLmFubm90YXRpb24uTWFuYWdlZEJlYW4KIHB1YmxpYyBjbGFzcyBUZXN0TWFuYWdlZEJlYW4gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9zZXJ2bGV0L3Rlc3QvaW50ZXJjZXB0b3JzL1Rlc3RBcm91bmRJbnZva2VJbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9zZXJ2bGV0L3Rlc3QvaW50ZXJjZXB0b3JzL1Rlc3RBcm91bmRJbnZva2VJbnRlcmNlcHRvci5qYXZhCmluZGV4IDRjYWFhYTcuLmU2MGUwNzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2Uvc2VydmxldC90ZXN0L2ludGVyY2VwdG9ycy9UZXN0QXJvdW5kSW52b2tlSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL3NlcnZsZXQvdGVzdC9pbnRlcmNlcHRvcnMvVGVzdEFyb3VuZEludm9rZUludGVyY2VwdG9yLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgICAgYXJvdW5kSW52b2tlQ291bnQgPSAwOwogICAgIH0KIAotICAgQEFyb3VuZEludm9rZSAKKyAgIEBBcm91bmRJbnZva2UKICAgIHB1YmxpYyBPYmplY3QgdGVzdE1ldGhvZChJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RBcm91bmRJbnZva2VJbnRlcmNldHByOjogYXJvdW5kSW52b2tlIGNhbGxlZCAtIHRhcmdldDoiICsgY3R4LmdldFRhcmdldCgpICsgIiAsIHBhcmFtczoiKyBjdHguZ2V0UGFyYW1ldGVycygpKTsKICAgICAgICAgYXJvdW5kSW52b2tlQ291bnQgKys7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggYjFlNTkzOS4uN2M2YzFlNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2Uvc2VydmxldC90ZXN0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtNzQsNSArNzQsNSBAQAogICAgICAgICAgICAgZWxzZSByZXR1cm4gIkludGVyY2VwdG9yIGludm9jYXRpb24gY291bnQiICsgY291bnQgKyAiIGludmFsaWQiOwogICAgfQogCi0gCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9idWlsZC54bWwKaW5kZXggMjEwYWJhZS4uZDYwN2I2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9idWlsZC54bWwKQEAgLTM2LDggKzM2LDggQEAKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjbGVhbi1jb21tb24iPgogICAgPGFudCBkaXI9InNyYyIgaW5oZXJpdEFsbD0iZmFsc2UiIHRhcmdldD0iYWxsIi8+CiAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0ic2ltcGxlbWRiIi8+Ci0JPHBhcmFtIG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgorICAgIDxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0ic2ltcGxlbWRiIi8+CisgICAgPHBhcmFtIG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgogICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIApAQCAtNTUsNyArNTUsNyBAQAogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbm5lY3RvciI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9ImNyZWF0ZWRiLnNxbCIvPgotICAgICAgPC9hbnRjYWxsPgkKKyAgICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJ1bnNldEpkYmMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKaW5kZXggNGJkY2M2Zi4uMzIzYzBlYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKQEAgLTkxLDggKzkxLDggQEAKICAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgotCTxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8c2VjdXJpdHktaWRlbnRpdHk+CiAgICAgICAgIDx1c2UtY2FsbGVyLWlkZW50aXR5Lz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAppbmRleCA0MmNkNjA0Li4yNzUzZDAyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICBUZXN0SW50ZWdlclByb3AKICAgICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgPGFjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAgICAgMiAKKyAgICAgICAgICAgIDIKICAgICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnPgpAQCAtODgsNyArODgsNyBAQAogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8Z2VuLWNsYXNzZXMvPgogICAgIDwvZWpiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKaW5kZXggZGRlZDQ1NC4uMWVkOWU1NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAKICAgICBwdWJsaWMgTWVzc2FnZUNoZWNrZXJFSkIoKSB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYmVhbiByZW1vdmVkIik7CiAgICAgICAgIGhlbGRDb24gPSBudWxsOwpAQCAtNzEsMTEgKzcxLDExIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLmdldExvY2tPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIC8vVGVsbCB0aGUgcmVzb3VyY2UgYWRhcHRlciB0aGUgY2xpZW50IGlzIHJlYWR5IHRvIHJ1bgotICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnlBbGwoKTsgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeUFsbCgpOworCiAgICAgICAgICAgICAgICAgZGVidWcoIk5PVElGSUVELi4uIFNUQVJUIFdBSVRJTkciKTsKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgYmVpbmcgdG9sZCB0byByZWFkIGZyb20gdGhlIGRhdGFiYXNlCi0gICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTgzLDIyICs4MywyMiBAQAogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TWVzc2FnZUNvdW50KCkgewotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgIENvbm5lY3Rpb24gY29uID0gZ2V0RnJlc2hDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBpbnQgY291bnQxID0gZ2V0Q291bnQoY29uKTsKICAgICAgICAgICAgIGNvbi5jbG9zZSgpOwotICAgICAgICAgICAgCi0JICAgIC8qCisKKyAgICAgICAgLyoKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5nZXRMb2NrT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5KCk7CiAgICAgICAgICAgICB9Ci0JICAgICovCi0gICAgICAgICAgICAgICAgCisgICAgICAgICovCisKICAgICAgICAgICAgIHJldHVybiBjb3VudDE7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0ub3V0KTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JfQorICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIGludCBnZXRDb3VudChDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CkBAIC0xMjQsMTAgKzEyNCwxMCBAQAogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgdXNlciA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi91c2VyIik7CiAgICAgICAgICAgICBwYXNzd29yZCA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9wYXNzd29yZCIpOwotCSAgICBDb250cm9scyA9IChNeUFkbWluT2JqZWN0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL3Rlc3RBZG1pbiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExJTkcgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7Ci0JICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMRUQgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7CisgICAgICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvdGVzdEFkbWluIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTElORyBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKKyAgICAgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExFRCBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMTYyLDcgKzE2Miw3IEBACiAgICAgICAgICAgICBkZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChjb24gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBjb247CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgICAgICAgICB0aHJvdyBleDE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgY2xvc2VDb25uZWN0aW9uKENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgaWYgKGhlbGRDb24gIT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGFkMjA3Yi4uMGIzOGMxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIGVqYi1qYXIueG1sPU1FVEEtSU5GL2VqYi1qYXIueG1sCiBzdW4tZWpiLWphci54bWw9TUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZjU1MWNlMS4uZmRjNjM5OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsNDUgKzI4LDQ1IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIC8vc3VwZXIoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KCkgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgY29ubmVjdG9yIDEuNSAiKwotCSAgICAgICAgICAgICAiY29udHJhY3RzLiIpOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKKwogICAgICAgICBTdHJpbmcgcmVzID0gIk5PVCBSVU4iOwotCWRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOworICAgIGRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOwogICAgICAgICBib29sZWFuIHBhc3MgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7Ci0JICAgIGludCB0ZXN0Q291bnQgPSAxOworICAgICAgICBpbnQgdGVzdENvdW50ID0gMTsKICAgICAgICAgICAgIHdoaWxlICghZG9uZSgpKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFkb25lKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlJ1bm5pbmcuLi4iKTsKICAgICAgICAgICAgICAgICAgICAgcGFzcyA9IGNoZWNrUmVzdWx0cyhleHBlY3RlZFJlc3VsdHMoKSk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJHb3QgZXhwZWN0ZWQgcmVzdWx0cyA9ICIgKyBwYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kbyBub3QgY29udGludWUgaWYgb25lIHRlc3QgZmFpbGVkCiAgICAgICAgICAgICAgICAgICAgIGlmICghcGFzcykgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gIlNPTUUgVEVTVFMgRkFJTEVEIjsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJJRCBDb25uZWN0b3IgMS41IHRlc3QgLSAiICsgdGVzdENvdW50LCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIklEIENvbm5lY3RvciAxLjUgdGVzdCAtICIgKyB0ZXN0Q291bnQsIHN0YXQuUEFTUyk7Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotCQl0ZXN0Q291bnQgKys7CisgICAgICAgIHRlc3RDb3VudCArKzsKICAgICAgICAgICAgIH0KIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTc2LDE0ICs3NiwxNCBAQAogICAgICAgICB9CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJjb25uZWN0b3IxLjVJRCIpOwogCi0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJFWElUSU5HLi4uIFNUQVRVUyA9ICIgKyByZXMpOwogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja1Jlc3VsdHMoaW50IG51bSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIGludCByZXN1bHQgPSBjaGVja2VyLmdldE1lc3NhZ2VDb3VudCgpOwpAQCAtOTIsNyArOTIsNyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIGRvbmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgcmV0dXJuIGNoZWNrZXIuZG9uZSgpOwpAQCAtMTAwLDcgKzEwMCw3IEBACiAKICAgICBwcml2YXRlIGludCBleHBlY3RlZFJlc3VsdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgcmV0dXJuIGNoZWNrZXIuZXhwZWN0ZWRSZXN1bHRzKCk7CkBAIC0xMDgsNyArMTA4LDcgQEAKIAogICAgIHByaXZhdGUgdm9pZCBub3RpZnlBbmRXYWl0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIGNoZWNrZXIubm90aWZ5QW5kV2FpdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKaW5kZXggZWZmZTRkYy4uNzhhZmFiYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCkBAIC0zOSwxMiArMzksMTIgQEAKIAogLyoqCiAgKi8KLXB1YmxpYyBjbGFzcyBNeU1lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sIAorcHVibGljIGNsYXNzIE15TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwKICAgICAgICAgTXlNZXNzYWdlTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjID0gbnVsbDsKICAgICBwcml2YXRlIENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIEBqYWthcnRhLmluamVjdC5JbmplY3QKICAgICBwcml2YXRlIGNvbm5lY3Rvci5UZXN0Q0RJQmVhbiB0YjsKIApAQCAtNTQsMjkgKzU0LDI5IEBACiAgICAgcHVibGljIE15TWVzc2FnZUJlYW4oKSB7fQogCiAgICAgLyoqCi0gICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCAKLSAgICAgKiBub3QgZmluYWwgb3Igc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCAKKyAgICAgKiBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0CisgICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQKICAgICAgKiB3aXRoIG9uZSBhcmd1bWVudCBvZiB0eXBlIGpha2FydGEuZWpiLk1lc3NhZ2VEcml2ZW5Db250ZXh0LgogICAgICAqCiAgICAgICogQHBhcmFtIG1kYyAgICB0aGUgY29udGV4dCB0byBzZXQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dChNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMpIHsKLQl0aGlzLm1kYyA9IG1kYzsKKyAgICB0aGlzLm1kYyA9IG1kYzsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCi0gICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vIAorICAgICAqIGVqYkNyZWF0ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgorICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubwogICAgICAqIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7IH0KIAogICAgIC8qKgotICAgICAqIG9uTWVzc2FnZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKKyAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKICAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggb25lIGFyZ3VtZW50CiAgICAgICogb2YgdHlwZSBqYWthcnRhLmptcy5NZXNzYWdlLgogICAgICAqCi0gICAgICogQ2FzdHMgdGhlIGluY29taW5nIE1lc3NhZ2UgdG8gYSBUZXh0TWVzc2FnZSBhbmQgZGlzcGxheXMgCisgICAgICogQ2FzdHMgdGhlIGluY29taW5nIE1lc3NhZ2UgdG8gYSBUZXh0TWVzc2FnZSBhbmQgZGlzcGxheXMKICAgICAgKiB0aGUgdGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBpbk1lc3NhZ2UgICAgdGhlIGluY29taW5nIG1lc3NhZ2UKQEAgLTkyLDcgKzkyLDcgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiV1JJVEUiKSkgewotICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiV1JJVEUiLCAKKyAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGluTWVzc2FnZS5zdWJzdHJpbmcoMCwgaW5NZXNzYWdlLmxhc3RJbmRleE9mKCI6IikpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5NZXNzYWdlLmVuZHNXaXRoKCJERUxFVEUiKSkgewogICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiREVMRVRFIiwKQEAgLTEwOCwxMCArMTA4LDEwIEBACiAgICAgICAgIH0KIAogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIGVqYlJlbW92ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKLSAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8gCisgICAgICogZWpiUmVtb3ZlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCisgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vCiAgICAgICogYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CkBAIC0xMjEsNjMgKzEyMSw2MyBAQAogCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGlkICAgID0gbWVzc2FnZS5zdWJzdHJpbmcoMCwgbWVzc2FnZS5pbmRleE9mKCI6IikpOwotICAgICAgICBTdHJpbmcgYm9keSAgPSBtZXNzYWdlLnN1YnN0cmluZyhtZXNzYWdlLmluZGV4T2YoIjoiKSsxKTsgCisgICAgICAgIFN0cmluZyBib2R5ICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKG1lc3NhZ2UuaW5kZXhPZigiOiIpKzEpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmICgiUkVBRCIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIlJlYWRpbmcgcm93IGZyb20gZGF0YWJhc2UuLi4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgICAgZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gCisgICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPQogICAgICAgICAgICAgICAgICAgIlNFTEVDVCBpZCBmcm9tIG1lc3NhZ2VzIHdoZXJlIGlkID0gJ1FRJyI7CiAgICAgICAgICAgICAgICAgICBSZXN1bHRTZXQgcmVzdWx0cyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KTsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMubmV4dCgpOwotICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJRUSBoYXMgYmFsYW5jZSAiICsgCisgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5nZXRJbnQoImJhbGFuY2UiKSArICIgZG9sbGFycyIpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgc3RtdC5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVhZCBvbmUgYWNjb3VudFxuIik7CiAgICAgICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgfSBlbHNlIGlmICgiV1JJVEUiLmVxdWFscyhvcCkpIHsKIAogICAgICAgICAgICAgICAgIGRlYnVnKCJJbnNlcnRpbmcgb25lIG1lc3NhZ2UgaW4gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBjcmVhdGVSb3coaWQsIGJvZHksIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIG9uZSBtZXNzYWdlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfSBlbHNlIGlmICgiREVMRVRFIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgb25lIG1lc3NhZ2UgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWxldGVSb3coaWQsIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWxldGVkIG9uZSBtZXNzYWdlXG4iKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIkRFTEVURV9BTEwiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBhbGwgbWVzc2FnZXMgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKQEAgLTE4OCw3ICsxODgsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvL3Vuc3VwcG9ydGVkIG9wCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9ZmluYWxseXsKICAgICAgICAgICAgIHRyeXsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24uY2xvc2UoKTsKQEAgLTE5Nyw5ICsxOTcsOSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBjcmVhdGVSb3coU3RyaW5nIGlkLCBTdHJpbmcgYm9keSwgCi0gICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisKKyAgICBwcml2YXRlIHZvaWQgY3JlYXRlUm93KFN0cmluZyBpZCwgU3RyaW5nIGJvZHksCisgICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgLy8gQ3JlYXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCkBAIC0yMTUsOSArMjE1LDkgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVSb3coU3RyaW5nIGlkLCBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvdyhTdHJpbmcgaWQsIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIGRlYnVnKCJEZWxldGVSb3cgd2l0aCBJRCA9ICIgKyBpZCk7CiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwpAQCAtMjMwLDkgKzIzMCw5IEBACiAgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICBTdHJpbmcgcXVlcnkgPSAiREVMRVRFIEZST00gbWVzc2FnZXMiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9idWlsZC54bWwKaW5kZXggNjQ1ZjFjOS4uOTIzMTIwMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYnVpbGQueG1sCkBAIC02MCw3ICs2MCw3IEBACiAKICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9InNpbXBsZW1kYiIgLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9InNpbXBsZW1kYiIgLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvTUVUQS1JTkYvcmEueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL01FVEEtSU5GL3JhLnhtbAppbmRleCAyY2EyZWJjLi4yMWRlYjkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvTUVUQS1JTkYvcmEueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9NRVRBLUlORi9yYS54bWwKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPGluYm91bmQtcmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4KICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyPgogICAgICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyLXR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWMtY2xhc3M+CiAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWM+CiAgICAgICAgICAgICAgICAgPC9tZXNzYWdlbGlzdGVuZXI+Ci0gICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgIDwvaW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+CiAgICAgICAgIDxhZG1pbm9iamVjdD4KICAgICAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvYnVpbGQueG1sCmluZGV4IGZhZDJlZGIuLjY3YTBhZWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvYnVpbGQueG1sCkBAIC0zMCw4ICszMCw4IEBACiAKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImluaXQtY29tbW9uIiA+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+Ci0gICAgCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxqYXIgamFyZmlsZT0iLi4vZ2VuZXJpYy1yYS5qYXIiIGJhc2VkaXI9ImNsYXNzZXMiCiAgICAgICAgICBpbmNsdWRlcz0iY29ubmVjdG9yLyouY2xhc3MiIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQppbmRleCA0MjE4OGE2Li42MmUyMjU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBDb250cm9scyB7CiAgICAgcHVibGljIHN0YXRpYyBPYmplY3QgcmVhZHlMb2NrID0gbmV3IE9iamVjdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQppbmRleCBmNGUyYmE0Li42ZDZjNzIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIERlbGl2ZXJ5V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zNiw3ICszNiw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgb3A7CiAgICAgcHJpdmF0ZSBib29sZWFuIGtlZXBDb3VudDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnRlciA9IDA7Ci0gICAgCisKICAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIFN0cmluZyBvcCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgdGhpcy5rZWVwQ291bnQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIAorICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywKICAgICAgICAgICAgIFN0cmluZyBvcCwgYm9vbGVhbiBrZWVwQ291bnQpIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC01NSw3ICs1NSw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9NZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7CiAgICAgICAgICAgICAvL2VwLmJlZm9yZURlbGl2ZXJ5KG9uTWVzc2FnZSk7CkBAIC03OCwxMSArNzgsMTEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy9lcC5hZnRlckRlbGl2ZXJ5KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtOTMsMTQgKzkzLDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQppbmRleCA5N2VkMDllLi4yOTI5MDdkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLmZvcmdldDogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgIH0KQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnByZXBhcmU6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICAgICAgcmV0dXJuIFhBUmVzb3VyY2UuWEFfT0s7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5yZWNvdmVyOiAiICsgZmxhZ1RvU3RyaW5nKGZsYWcpKTsKICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc3RhcnQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2Uuc3RhcnQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpICsgIiwiICsKICAgICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCmluZGV4IDg0ZTFjNzEuLjg0NzQ2ZDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogLyoqCiAgKiBjb2xsZWN0aW9uIG9mIG1lc3NhZ2VzLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgTWVzc2FnZXMgewogCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgU3RyaW5nIGNvbW1hbmQgID0gYXJnc1swXTsKICAgICAgICBTdHJpbmcgZGVzdE5hbWUgPSBhcmdzWzFdOwogICAgICAgIFN0cmluZyBtZXNzYWdlICA9IGFyZ3NbMl07Ci0gICAKKwogICAgICAgIGlmICghImFkZCIuZXF1YWxzKGNvbW1hbmQpKSB7CiAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQppbmRleCBmMzNhNzExLi5kNzdiNDg1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCkBAIC0zOCwxMSArMzgsMTEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOwogICAgICAgICBpZiAocmVzZXRDb250cm9sLmVxdWFscygiQkVHSU5OSU5HIikpIHsKICAgICAgICAgICAgQ29udHJvbHMuZG9uZT1mYWxzZTsKLQkgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKLQl9CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGRvbmUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCmluZGV4IDYxNTg4ZWMuLmYyMDQyNDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgTXlXb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTM1LDcgKzM1LDcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gc3RvcCA9IGZhbHNlOwogICAgIHByaXZhdGUgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5OwogICAgIHByaXZhdGUgV29ya01hbmFnZXIgd207Ci0gICAgCisKICAgICBwdWJsaWMgTXlXb3JrKAogICAgICAgICAgICAgU3RyaW5nIG5hbWUsIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwgV29ya01hbmFnZXIgd20pIHsKICAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTsKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgICAgICBNZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSk7CiAKICAgICAgICAgICAgICAgICAvKgpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtODUsMTQgKzg1LDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCmluZGV4IGZhOTk4M2YuLjViZTY1M2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQpAQCAtMjQsOSArMjQsOSBAQAogICogc28gdGhhdCB0aGUgYXBwIHNlcnZlciBjYW4gaW5zdGFudGlhdGUgYW5kIGNvbmZpZ3VyZQogICogaXQgYXQgdGhlIHJ1bnRpbWUuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYyAKK3B1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYwogICAgIGltcGxlbWVudHMgQWN0aXZhdGlvblNwZWMsIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByaXZhdGUgU3RyaW5nIGRlc3RpbmF0aW9uTmFtZTsKQEAgLTQzLDcgKzQzLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uTmFtZSAoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uTmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvbk5hbWUgKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvbk5hbWUoKSBjYWxsZWQuLi4gbmFtZSA9ICIgKyBuYW1lKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbk5hbWUgPSBuYW1lOwpAQCAtNTIsNyArNTIsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25UeXBlKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvblR5cGU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25UeXBlIChTdHJpbmcgdHlwZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25UeXBlICgpIGNhbGxlZC4uLiB0eXBlID0gIiArIHR5cGUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uVHlwZT0gdHlwZTsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3RQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0UHJvcDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0UHJvcCAoU3RyaW5nIHRlc3RQcm9wKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0UHJvcCAoKSBjYWxsZWQuLi4gdGVzdFByb3AgPSAiICsgdGVzdFByb3ApOwogICAgICAgICB0aGlzLnRlc3RQcm9wID0gdGVzdFByb3A7CkBAIC03MCw3ICs3MCw3IEBACiAgICAgcHVibGljIEludGVnZXIgZ2V0VGVzdEludGVnZXJQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0SW50ZWdlclByb3A7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdEludGVnZXJQcm9wIChJbnRlZ2VyIHRlc3RQcm9wMSkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdEludGVnZXJQcm9wICgpIGNhbGxlZC4uLiB0ZXN0SW50ZWdlclByb3AgPSAiICsgdGVzdFByb3AxKTsKICAgICAgICAgdGhpcy50ZXN0SW50ZWdlclByb3AgPSB0ZXN0UHJvcDE7CkBAIC05NCw3ICs5NCw3IEBACiAKICAgICAgIH0KIAotICAgfSAKKyAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkZWJ1ZyAoU3RyaW5nIG1lc3NhZ2UpCiAgICAgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCmluZGV4IDU3Nzg4OWQuLjRiNTAwYmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKQEAgLTQwLDkgKzQwLDkgQEAKIC8qKgogICogVGhpcyBpcyBhIHNhbXBsZSByZXNvdXJjZSBhZGFwdGVyCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsIAorcHVibGljIGNsYXNzIFNpbXBsZVJlc291cmNlQWRhcHRlckltcGwKIGltcGxlbWVudHMgUmVzb3VyY2VBZGFwdGVyLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIEJvb3RzdHJhcENvbnRleHQgY3R4OwpAQCAtNTgsNyArNTgsNyBAQAogCiAgICAgcHVibGljIHZvaWQKICAgICBzdGFydChCb290c3RyYXBDb250ZXh0IGN0eCkgdGhyb3dzIFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiMDAxLiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKIAogICAgICAgICB0aGlzLmN0eCA9IGN0eDsKQEAgLTY4LDIxICs2OCwyMSBAQAogCiAgICAgICAgIC8vdGVzdGluZyBjcmVhdCB0aW1lcgogICAgICAgICBUaW1lciB0aW1lciA9IG51bGw7Ci0JICB0cnl7Ci0JICAgICAgdGltZXIgPSBjdHguY3JlYXRlVGltZXIoKTsKLQkgIH0gY2F0Y2goVW5hdmFpbGFibGVFeGNlcHRpb24gdWUpIHsKLQkgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIik7Ci0JICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJFcnJvciBmb3JtIGJvb3RzdHJhcCIpOwotCSAgfQorICAgICAgdHJ5eworICAgICAgICAgIHRpbWVyID0gY3R4LmNyZWF0ZVRpbWVyKCk7CisgICAgICB9IGNhdGNoKFVuYXZhaWxhYmxlRXhjZXB0aW9uIHVlKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciIpOworICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiRXJyb3IgZm9ybSBib290c3RyYXAiKTsKKyAgICAgIH0KICAgICAgICAgZGVidWcoIjAwNC4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAKICAgICAgICAgICB0cnkgewotICAgICAgICAgIAorCiAgICAgICAgICAgWEFUZXJtaW5hdG9yIHhhID0gY3R4LmdldFhBVGVybWluYXRvcigpOwotICAgICAgICAgIAorCiAgICAgICAgICAgWGlkIHhpZDEgPSBuZXcgWElEKCk7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgWElEMSA9ICIgKyB4aWQxKTsKLSAgICAgICAgICAKKwogICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHQgZWMgPSBuZXcgRXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgIGVjLnNldFhpZCh4aWQxKTsKICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKQEAgLTkyLDE0ICs5MiwxNCBAQAogICAgICAgICAgIHdtLmRvV29yayhvdXR3LCAxKjEwMDAsIGVjLCBudWxsKTsKICAgICAgICAgICB4YS5jb21taXQoeGlkMSwgdHJ1ZSk7CiAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgCisKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBleCA9ICIgKyBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgIHhhLnJvbGxiYWNrKHhpZDEpOwogICAgICAgICAgIH0KLSAgICAgICAgICAKKwogICAgICAgICAgIFhpZCB4aWQyID0gbmV3IFhJRCgpOwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFhJRDIgPSAiICsgeGlkMik7Ci0gICAgICAgICAgCisKICAgICAgICAgICBlYyA9IG5ldyBFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgZWMuc2V0WGlkKHhpZDIpOwogICAgICAgICAgIGVjLnNldFRyYW5zYWN0aW9uVGltZW91dCg1KjEwMDApOyAvLzUgc2Vjb25kcwpAQCAtMTE2LDcgKzExNiw3IEBACiAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgfQogCi0gICAgICAgIAorCiAgICAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgMzsgaSsrKSB7CiAgICAgICAgICAgVGVzdFdNV29yayB3ID0gbmV3IFRlc3RXTVdvcmsoaSwgZmFsc2UpOwogICAgICAgICAgIHRyeSB7CkBAIC0xMjQsNyArMTI0LDcgQEAKICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUw6IENBVUdIVCBleGNlcHRpb24gOiBpID0gIiArIGkpOwogICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgIH0gCisgICAgICAgICAgfQogICAgICAgICAgIH0KIAogICAgICAgICAgIGZvciAoaW50IGkgPSAzIDsgaSA8IDY7IGkrKykgewpAQCAtMTcyLDcgKzE3Miw3IEBACiAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgfQogICAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIjAwNS4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAgICAgfQogCkBAIC0yMDYsMTMgKzIwNiwxMyBAQAogCiAgICAgcHVibGljIHZvaWQKICAgICBlbmRwb2ludERlYWN0aXZhdGlvbiAoCi0gICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGVuZHBvaW50RmFjdG9yeSwgCisgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGVuZHBvaW50RmFjdG9yeSwKICAgICAgICAgICAgIEFjdGl2YXRpb25TcGVjIHNwZWMpIHsKICAgICAgICAgZGVidWcgKCJlbmRwb2ludERlYWN0aXZhdGlvbiBjYWxsZWQuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgKChXb3JrRGlzcGF0Y2hlcikgd29yaykuc3RvcCgpOwogICAgIH0KLSAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3ROYW1lKCkgewogICAgICAgICByZXR1cm4gdGVzdE5hbWU7CiAgICAgfQpAQCAtMjI4LDcgKzIyOCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsXSA9PT4gIiArIG1lc3NhZ2UpOwogICAgIH0KIAotICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykgCisgICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKQogICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKaW5kZXggNDdmZGVkZS4uZDMzNmNiNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIFRlc3RXTVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtNDIsOCArNDIsOCBAQAogICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlKSB7CiAgICAgICAgIHRoaXMoaWQsIGlzUm9ndWUsIGZhbHNlLCBudWxsKTsKICAgICB9Ci0gICAgCi0gICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUsIAorCisgICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUsCiAgICAgICAgICAgICBib29sZWFuIGRvTmVzdCwgRXhlY3V0aW9uQ29udGV4dCBjdHgpIHsKICAgICAgICAgdGhpcy5pZCA9IGlkOwogICAgICAgICB0aGlzLmlzUm9ndWUgPSBpc1JvZ3VlOwpAQCAtNzcsMTAgKzc3LDEwIEBACiAgICAgICAgICAgICB9IGNhdGNoIChXb3JrRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICAgICAgaWYgKGV4LmdldEVycm9yQ29kZSgpLmVxdWFscygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JrRXhjZXB0aW9uLlRYX0NPTkNVUlJFTlRfV09SS19ESVNBTExPV0VEKSkgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBBU1M6IENBVUdIVCBFWFBFQ1RFRCA9ICIgKyBleC5nZXRFcnJvckNvZGUoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGQUlMOiBDQVVHSFQgVU5FWFBFQ1RFRCA9ICIgKyBleC5nZXRFcnJvckNvZGUoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtOTIsNyArOTIsNyBAQAogICAgICAgICAgICAgICAgIGVjLnNldFRyYW5zYWN0aW9uVGltZW91dCg1KjEwMDApOyAvLzUgc2Vjb25kcwogICAgICAgICAgICAgICAgIHdtLmRvV29yayhuZXN0ZWRXb3JrLCAxKjEwMDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgIkZBSUw6IENBVUdIVCBVTkVYUEVDVEVEID0gIiArIGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCmluZGV4IDlhMDU5ZmUuLmZhMDMyZWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIFdvcmtEaXNwYXRjaGVyIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTQ0LDExICs0NCwxMSBAQAogICAgIHByaXZhdGUgQWN0aXZhdGlvblNwZWMgc3BlYzsKICAgICBwcml2YXRlIFdvcmtNYW5hZ2VyIHdtOwogICAgIHByaXZhdGUgWEFUZXJtaW5hdG9yIHhhOwotICAgIAorCiAgICAgcHVibGljIFdvcmtEaXNwYXRjaGVyKAogICAgICAgICAgICAgU3RyaW5nIGlkLAogICAgICAgICAgICAgQm9vdHN0cmFwQ29udGV4dCBjdHgsCi0gICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksIAorICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LAogICAgICAgICAgICAgQWN0aXZhdGlvblNwZWMgc3BlYykgewogICAgICAgICB0aGlzLmlkICAgICAgPSBpZDsKICAgICAgICAgdGhpcy5jdHggICAgID0gY3R4OwpAQCAtNjEsNyArNjEsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgZGVidWcoIldBSVQuLi4iKTsKQEAgLTgzLDI2ICs4MywyNiBAQAogICAgICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSk7CiAKICAgICAgICAgICAgICAgICBpZiAoIWZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSkgewogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsgCisgICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsKICAgICAgICAgICAgICAgICAgICAgLy93bS5kb1dvcmsoZCwgMCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwogICAgICAgICAgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG5ldyBGYWtlWEFSZXNvdXJjZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaW50IG51bU9mTWVzc2FnZXMgPSA1OwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2ltcG9ydGluZyB0cmFuc2FjdGlvbgogCiAgICAgICAgICAgICAgICAgICAgIC8vd3JpdGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHQgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7CiAKLSAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPSAKKyAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIldSSVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkRPTkUgV1JJVEUgVE8gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gbnVtT2ZNZXNzYWdlczsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9yb2xsYmFjawogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiREVMRVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xNTAsNyArMTUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIkRFTEVURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTk1LDcgKzE5NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChYQVJlc291cmNlLlhBX09LID09IHhhLnByZXBhcmUoZWMuZ2V0WGlkKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJYQSBQUkVQQVJFL0NPTU1JVC4gRE9ORSBXUklURSBUTyBEQiAiKTsKQEAgLTIwNywxOSArMjA3LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlIGFsbC4KICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCAxLCAiREVMRVRFX0FMTCIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiRE9ORSBERUxFVEUgQUxMIEZST00gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gMDsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yNDMsNyArMjQzLDcgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTI1OCwxNCArMjU4LDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTI4OCwxMyArMjg4LDEzIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL1NsZWVwIGZvciA1IHNlY29uZHMKICAgICAgICAgICAgIC8vVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCg1KjEwMDApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICAvL05vdGlmeSB0aGUgY2xpZW50IHRvIGNoZWNrIHRoZSByZXN1bHRzCi0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeSgpOyAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5KCk7CisKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgcmVzdWx0cyBhcmUgdmVyaWZpZWQgYnkgdGhlIGNsaWVudAotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7CiAKICAgICAgICAgICAgICAgICBpZiAoc3RvcCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0zMTAsNyArMzEwLDcgQEAKICAgICAgICAgICAgIENvbnRyb2xzLmRvbmUgPSB0cnVlOwogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIC8vTm90aWZ5IHRoZSBjbGllbnQgdG8gY2hlY2sgdGhlIHJlc3VsdHMKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnkoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKaW5kZXggMTM4ZTkxYi4uMjhjMTdlZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKQEAgLTM2LDggKzM2LDggQEAKICAgICBwdWJsaWMgaW50IGJyYW5jaFF1YWxpZmllcjsKICAgICBwdWJsaWMgaW50IGdsb2JhbFR4SUQ7CiAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsgCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7IAorICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OworICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OwogCiAgICAgcHVibGljIFhJRCgpIHsKICAgICAgICAgaW50IGZvbyA9IElEKys7CkBAIC01NSwxMCArNTUsMTAgQEAKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgIC8vIEl0IGNhbid0IGJlIGVxdWFsCiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgb3RoZXIgPSAoWElEKW87ICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvdGhlciBYSUQsIG5vdyBwcm9wZXJseSBjYXN0Ci0gICAgICAgIAotICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRCAKKworICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRAogICAgICAgICAgICAgICAgICYmIHRoaXMuYnJhbmNoUXVhbGlmaWVyID09IG90aGVyLmJyYW5jaFF1YWxpZmllcgogICAgICAgICAgICAgICAgICYmIHRoaXMuZ2xvYmFsVHhJRCA9PSBvdGhlci5nbG9iYWxUeElEKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk4LDcgKzk4LDcgQEAKICAgICAgICAgICAgICAgICAiZm9ybWF0SUQoIiAgICAgKyBmb3JtYXRJRCAgICAgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImJyYW5jaFF1YWxpZmllciAoIiArIGJyYW5jaFF1YWxpZmllciArICIpLCAiICsKICAgICAgICAgICAgICAgICAiZ2xvYmFsVHhJRCgiICsgZ2xvYmFsVHhJRCArICIpfSIpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gczsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL2J1aWxkLnhtbAppbmRleCA1NDc2YzM0Li45YWVjMWM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvYnVpbGQueG1sCkBAIC04NiwxNSArODYsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPiBVc2FnZToKLQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBtYW5hZ2VkYmVhbnMgdGVzdHMpCi0JCWFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgbWFuYWdlZGJlYW5zIHRlc3RzKQotCQlhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIG1hbmFnZWRiZWFucyB0ZXN0cykKLQkJYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIG1hbmFnZWRiZWFucyB0ZXN0cykKLQkJYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIG1hbmFnZWRiZWFucyBhcHBzKQotCQlhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIG1hbmFnZWRiZWFucyB0ZXN0cykKLQkJYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgbWFuYWdlZGJlYW5zIGFwcHMpCi0JCWFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3IgbWFuYWdlZGJlYW5zIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4gVXNhZ2U6CisgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgbWFuYWdlZGJlYW5zIHRlc3RzKQorICAgICAgICBhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIG1hbmFnZWRiZWFucyB0ZXN0cykKKyAgICAgICAgYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBtYW5hZ2VkYmVhbnMgdGVzdHMpCisgICAgICAgIGFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBtYW5hZ2VkYmVhbnMgdGVzdHMpCisgICAgICAgIGFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBtYW5hZ2VkYmVhbnMgYXBwcykKKyAgICAgICAgYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBtYW5hZ2VkYmVhbnMgdGVzdHMpCisgICAgICAgIGFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgIG1hbmFnZWRiZWFucyBhcHBzKQorICAgICAgICBhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIG1hbmFnZWRiZWFucyB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tbGlmZWN5Y2xlLXBvbHltb3JwaGlzbS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tbGlmZWN5Y2xlLXBvbHltb3JwaGlzbS9XZWJUZXN0LmphdmEKaW5kZXggZTczNmI5Ny4uMWVlMDc2ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLWxpZmVjeWNsZS1wb2x5bW9ycGhpc20vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi1saWZlY3ljbGUtcG9seW1vcnBoaXNtL1dlYlRlc3QuamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBAV2ViU2VydmxldCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU0LDcgKzU0LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTY0LDcgKzY0LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTEwMywxMCArMTAzLDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tbGlmZWN5Y2xlLXBvbHltb3JwaGlzbS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLWxpZmVjeWNsZS1wb2x5bW9ycGhpc20vYnVpbGQucHJvcGVydGllcwppbmRleCBjMGYyMGJiLi5iNjU3MDVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tbGlmZWN5Y2xlLXBvbHltb3JwaGlzbS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi1saWZlY3ljbGUtcG9seW1vcnBoaXNtL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbWFuYWdlZC1iZWFuLWxpZmVjeWNsZS1wb2x5bW9ycGhpc20iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi1saWZlY3ljbGUtcG9seW1vcnBoaXNtL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi1saWZlY3ljbGUtcG9seW1vcnBoaXNtL2J1aWxkLnhtbAppbmRleCAwYTcyZTEyLi4yNGE0YzhmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tbGlmZWN5Y2xlLXBvbHltb3JwaGlzbS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLWxpZmVjeWNsZS1wb2x5bW9ycGhpc20vYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ3LDIzICs0NywyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc1LDEwICs3NSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi1saWZlY3ljbGUtcG9seW1vcnBoaXNtL3NlcnZsZXQvY29tL3Rlc3RzL1Rlc3RBcm91bmRJbnZva2VJbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLWxpZmVjeWNsZS1wb2x5bW9ycGhpc20vc2VydmxldC9jb20vdGVzdHMvVGVzdEFyb3VuZEludm9rZUludGVyY2VwdG9yLmphdmEKaW5kZXggYTNmNzJiYy4uZDE2N2M5NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLWxpZmVjeWNsZS1wb2x5bW9ycGhpc20vc2VydmxldC9jb20vdGVzdHMvVGVzdEFyb3VuZEludm9rZUludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLWxpZmVjeWNsZS1wb2x5bW9ycGhpc20vc2VydmxldC9jb20vdGVzdHMvVGVzdEFyb3VuZEludm9rZUludGVyY2VwdG9yLmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKICAgICAgICAgYXJvdW5kSW52b2tlQ291bnQgPSAwOwogICAgIH0KIAotICAgQEFyb3VuZEludm9rZSAKKyAgIEBBcm91bmRJbnZva2UKICAgIHB1YmxpYyBPYmplY3QgdGVzdE1ldGhvZChJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RBcm91bmRJbnZva2VJbnRlcmNlcHRvcjo6IGFyb3VuZEludm9rZSBjYWxsZWQgLSB0YXJnZXQ6IiArIGN0eC5nZXRUYXJnZXQoKSArICIgLCBwYXJhbXM6IisgY3R4LmdldFBhcmFtZXRlcnMoKSk7CiAgICAgICAgIGFyb3VuZEludm9rZUNvdW50ICsrOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLWxpZmVjeWNsZS1wb2x5bW9ycGhpc20vc2VydmxldC9jb20vdGVzdHMvVGVzdE1hbmFnZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tbGlmZWN5Y2xlLXBvbHltb3JwaGlzbS9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0TWFuYWdlZEJlYW4uamF2YQppbmRleCBhMjhhNzJkLi5lMDkzYmVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tbGlmZWN5Y2xlLXBvbHltb3JwaGlzbS9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0TWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tbGlmZWN5Y2xlLXBvbHltb3JwaGlzbS9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0TWFuYWdlZEJlYW4uamF2YQpAQCAtNjQsNyArNjQsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UG9zdENvbnN0cnVjdE1lc3NhZ2UoKSB7CiAgICAgICAgIHJldHVybiBwb3N0Q29uc3RydWN0TWVzc2FnZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFByZURlc3Ryb3lNZXNzYWdlKCkgewogICAgICAgICByZXR1cm4gcHJlRGVzdHJveU1lc3NhZ2U7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLWxpZmVjeWNsZS1wb2x5bW9ycGhpc20vc2VydmxldC9jb20vdGVzdHMvVGVzdE1hbmFnZWRCZWFuRXh0ZW5zaW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tbGlmZWN5Y2xlLXBvbHltb3JwaGlzbS9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0TWFuYWdlZEJlYW5FeHRlbnNpb24uamF2YQppbmRleCA5ZDcxZDU3Li4wMTRjOWZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tbGlmZWN5Y2xlLXBvbHltb3JwaGlzbS9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0TWFuYWdlZEJlYW5FeHRlbnNpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tbGlmZWN5Y2xlLXBvbHltb3JwaGlzbS9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0TWFuYWdlZEJlYW5FeHRlbnNpb24uamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocHJlRGVzdHJveU1lc3NhZ2UpOwogICAgIH0KIAotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgcmV0dXJuIFRPU1RSSU5HX0VYVDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi12aWEtcmVzb3VyY2UtaW5qZWN0aW9uL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi12aWEtcmVzb3VyY2UtaW5qZWN0aW9uL1dlYlRlc3QuamF2YQppbmRleCA2YTI4YTA4Li5jYzg1MDdmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tdmlhLXJlc291cmNlLWluamVjdGlvbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLXZpYS1yZXNvdXJjZS1pbmplY3Rpb24vV2ViVGVzdC5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEBXZWJTZXJ2bGV0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTEsNyArNTEsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNjEsNyArNjEsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtMTAwLDEwICsxMDAsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi12aWEtcmVzb3VyY2UtaW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tdmlhLXJlc291cmNlLWluamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDkxYWI5ODMuLmI1YTdmMzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi12aWEtcmVzb3VyY2UtaW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLXZpYS1yZXNvdXJjZS1pbmplY3Rpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tdmlhLXJlc291cmNlLWluamVjdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tdmlhLXJlc291cmNlLWluamVjdGlvbi9idWlsZC54bWwKaW5kZXggODNhZDY2Ni4uMDY5MTIxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLXZpYS1yZXNvdXJjZS1pbmplY3Rpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi12aWEtcmVzb3VyY2UtaW5qZWN0aW9uL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMyArNDcsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tdmlhLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0QXJvdW5kSW52b2tlSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi12aWEtcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvY29tL3Rlc3RzL1Rlc3RBcm91bmRJbnZva2VJbnRlcmNlcHRvci5qYXZhCmluZGV4IDU5MDQzMWQuLmQ1ZWViN2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi12aWEtcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvY29tL3Rlc3RzL1Rlc3RBcm91bmRJbnZva2VJbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi12aWEtcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvY29tL3Rlc3RzL1Rlc3RBcm91bmRJbnZva2VJbnRlcmNlcHRvci5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiAgICAgICAgIGFyb3VuZEludm9rZUNvdW50ID0gMDsKICAgICB9CiAKLSAgIEBBcm91bmRJbnZva2UgCisgICBAQXJvdW5kSW52b2tlCiAgICBwdWJsaWMgT2JqZWN0IHRlc3RNZXRob2QoSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0QXJvdW5kSW52b2tlSW50ZXJjZXRwcjo6IGFyb3VuZEludm9rZSBjYWxsZWQgLSB0YXJnZXQ6IiArIGN0eC5nZXRUYXJnZXQoKSArICIgLCBwYXJhbXM6IisgY3R4LmdldFBhcmFtZXRlcnMoKSk7CiAgICAgICAgIGFyb3VuZEludm9rZUNvdW50ICsrOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLXZpYS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC9jb20vdGVzdHMvVGVzdE1hbmFnZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tdmlhLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0TWFuYWdlZEJlYW4uamF2YQppbmRleCBjZjQ5Y2IyLi5jMzE5ZWIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tdmlhLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0TWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tdmlhLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0TWFuYWdlZEJlYW4uamF2YQpAQCAtMTYsNyArMTYsNyBAQAogCiBwYWNrYWdlIGNvbS50ZXN0czsKIAotLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuIAorLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuCiAvL1RoaXMgYmVhbiBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSBhcyBpdCBuZWVkcyB0byBiZSBwbGFjZWQgaW50byBhIFN0YXRlZnVsIEJlYW4KIEBqYWthcnRhLmFubm90YXRpb24uTWFuYWdlZEJlYW4KIHB1YmxpYyBjbGFzcyBUZXN0TWFuYWdlZEJlYW4gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLXZpYS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC9jb20vdGVzdHMvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi12aWEtcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvY29tL3Rlc3RzL1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggNmFlYzg0ZS4uY2UyMjY2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLXZpYS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC9jb20vdGVzdHMvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tdmlhLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0U2VydmxldC5qYXZhCkBAIC01MCw3ICs1MCw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgdGVzdE92ZXJyaWRkZW5NZXRob2RzKCkgewogICAgICAgICBTdHJpbmcgcyA9ICIiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRvU3RyaW5nIHJldHVybmVkOiIgK3Rlc3RSZXNvdXJjZS50b1N0cmluZygpKTsKLSAgICAgICAgaWYgKCF0ZXN0UmVzb3VyY2UudG9TdHJpbmcoKS5lcXVhbHMoVGVzdE1hbmFnZWRCZWFuLlRPU1RSSU5HKSkgCisgICAgICAgIGlmICghdGVzdFJlc291cmNlLnRvU3RyaW5nKCkuZXF1YWxzKFRlc3RNYW5hZ2VkQmVhbi5UT1NUUklORykpCiAgICAgICAgICAgICBzICs9ICJUZXN0TWFuYWdlZEJlYW4gb2J0YWluZWQgdmlhIEBSZXNvdXJjZSB0b1N0cmluZyBtZXRob2QgaW52b2NhdGlvbiBmYWlsZWQiOwogICAgICAgICByZXR1cm4gczsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvb3Blbi1pc3N1ZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL29wZW4taXNzdWVzL2J1aWxkLnhtbAppbmRleCAzNDg4YWU4Li4xYTYzNzYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvb3Blbi1pc3N1ZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9vcGVuLWlzc3Vlcy9idWlsZC54bWwKQEAgLTg1LDE1ICs4NSwxNSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+IFVzYWdlOgotCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIG9wZW5pc3N1ZXMgdGVzdHMpCi0JCWFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgb3Blbmlzc3VlcyB0ZXN0cykKLQkJYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBvcGVuaXNzdWVzIHRlc3RzKQotCQlhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3Igb3Blbmlzc3VlcyB0ZXN0cykKLQkJYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIG9wZW5pc3N1ZXMgYXBwcykKLQkJYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBvcGVuaXNzdWVzIHRlc3RzKQotCQlhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBvcGVuaXNzdWVzIGFwcHMpCi0JCWFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3Igb3Blbmlzc3VlcyB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+IFVzYWdlOgorICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIG9wZW5pc3N1ZXMgdGVzdHMpCisgICAgICAgIGFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgb3Blbmlzc3VlcyB0ZXN0cykKKyAgICAgICAgYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBvcGVuaXNzdWVzIHRlc3RzKQorICAgICAgICBhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3Igb3Blbmlzc3VlcyB0ZXN0cykKKyAgICAgICAgYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIG9wZW5pc3N1ZXMgYXBwcykKKyAgICAgICAgYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBvcGVuaXNzdWVzIHRlc3RzKQorICAgICAgICBhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBvcGVuaXNzdWVzIGFwcHMpCisgICAgICAgIGFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3Igb3Blbmlzc3VlcyB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvb3NnaS1jZGkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL29zZ2ktY2RpL2J1aWxkLnhtbAppbmRleCBiYzA1ODhmLi4wYTIxZGEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvb3NnaS1jZGkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9vc2dpLWNkaS9idWlsZC54bWwKQEAgLTgyLDE1ICs4MiwxNSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+IFVzYWdlOgotCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIG9zZ2ktY2RpIHRlc3RzKQotCQlhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIG9zZ2ktY2RpIHRlc3RzKQotCQlhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIG9zZ2ktY2RpIHRlc3RzKQotCQlhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3Igb3NnaS1jZGkgdGVzdHMpCi0JCWFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBvc2dpLWNkaSBhcHBzKQotCQlhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIG9zZ2ktY2RpIHRlc3RzKQotCQlhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBvc2dpLWNkaSBhcHBzKQotCQlhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIG9zZ2ktY2RpIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4gVXNhZ2U6CisgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgb3NnaS1jZGkgdGVzdHMpCisgICAgICAgIGFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgb3NnaS1jZGkgdGVzdHMpCisgICAgICAgIGFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgb3NnaS1jZGkgdGVzdHMpCisgICAgICAgIGFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBvc2dpLWNkaSB0ZXN0cykKKyAgICAgICAgYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIG9zZ2ktY2RpIGFwcHMpCisgICAgICAgIGFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgb3NnaS1jZGkgdGVzdHMpCisgICAgICAgIGFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgIG9zZ2ktY2RpIGFwcHMpCisgICAgICAgIGFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3Igb3NnaS1jZGkgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL29zZ2ktY2RpL2NvbW1vbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvb3NnaS1jZGkvY29tbW9uLnhtbAppbmRleCBmMzQyZDg3Li45MmY1NWU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvb3NnaS1jZGkvY29tbW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvb3NnaS1jZGkvY29tbW9uLnhtbApAQCAtMTcsMjQgKzE3LDI0IEBACiAtLT4KIAogPCEtLQotICAgIFRoaXMgaXMgdGhlIHRvcCBsZXZlbCBidWlsZCBmaWxlIHRoYXQgc2hvdWxkIGJlIAotICAgIGltcG9ydGVkIGludG8gYWxsIHRoZSBsZWFmIGxldmVsIGJ1aWxkIGZpbGVzIAorICAgIFRoaXMgaXMgdGhlIHRvcCBsZXZlbCBidWlsZCBmaWxlIHRoYXQgc2hvdWxkIGJlCisgICAgaW1wb3J0ZWQgaW50byBhbGwgdGhlIGxlYWYgbGV2ZWwgYnVpbGQgZmlsZXMKIC0tPgogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldHMgdG8gY2xlYW4gY2xhc3MgZmlsZXMgYW5kIGphcnMgZmlsZXMgLS0+Ci08IS0tIAotVmFyaWFibGVzIHVzZWQ6IAotICAgICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IAorPCEtLQorVmFyaWFibGVzIHVzZWQ6CisgICAgJHtidWlsZC5jbGFzc2VzLmRpcn0KICAgICAke2Fzc2VtYmxlLmRpcn0KIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJjbGVhbi1jbGFzc2VzLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IENsZWFuaW5nIHRlc3Qgc291cmNlIGZpbGVzOiAke2J1aWxkLmJhc2UuZGlyfSIgCisgICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogQ2xlYW5pbmcgdGVzdCBzb3VyY2UgZmlsZXM6ICR7YnVpbGQuYmFzZS5kaXJ9IgogICAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5iYXNlLmRpcn0iLz4KIDwvdGFyZ2V0PgotICAgIAorCiA8dGFyZ2V0IG5hbWU9ImNsZWFuLWphcnMtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxkZWxldGUgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KIDwvdGFyZ2V0PgpAQCAtNDYsOSArNDYsOSBAQAogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldCB0byBjb21waWxlIHRoZSBqYXZhIHNvdXJjZSBmaWxlcyAtLT4KLTwhLS0gCi1WYXJpYWJsZXMgdXNlZDogCi0gICAgJHtidWlsZC5jbGFzc2VzLmRpcn0gCis8IS0tCitWYXJpYWJsZXMgdXNlZDoKKyAgICAke2J1aWxkLmNsYXNzZXMuZGlyfQogICAgICR7czFhc3Rlc3QuY2xhc3NwYXRofQogICAgICR7c3JjfQogLS0+CkBAIC03NSw3ICs3NSw3IEBACiBWYXJpYWJsZXMgVXNlZDoKICAgICAke3dhci5maWxlfQogICAgICR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ci0gICAgJHthcHBuYW1lfSAgICAKKyAgICAke2FwcG5hbWV9CiAgICAgJHthc3NlbWJsZS5kaXJ9CiAgICAgJHt3ZWIueG1sfQogICAgICR7YmVhbnMueG1sfQpAQCAtMTA2LDE3ICsxMDYsMTcgQEAKIAogPHRhcmdldCBuYW1lPSJwdWJsaXNoLXdhci1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgPG1rZGlyIGRpcj0iJHtidWlsZC53ZWJhcHBzLmRpcn0iLz4KLSAgPGNvcHkgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIgCi0gICAgICAgIHRvZmlsZT0iJHtidWlsZC53ZWJhcHBzLmRpcn0vJHthcHBuYW1lfS53YXIiIAorICA8Y29weSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIgorICAgICAgICB0b2ZpbGU9IiR7YnVpbGQud2ViYXBwcy5kaXJ9LyR7YXBwbmFtZX0ud2FyIgogICAgICAgICBvdmVyd3JpdGU9InRydWUiIC8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJjbGVhbi13ZWJhcHBzLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLndlYmFwcHMuZGlyfSIgcXVpZXQ9InRydWUiIC8+ICAKKyAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC53ZWJhcHBzLmRpcn0iIHF1aWV0PSJ0cnVlIiAvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iY2xlYXIiPgotICAgIDxkZWxldGUgZmlsZT0iJHt3YXIuZmlsZX0iLz4gIAorICAgIDxkZWxldGUgZmlsZT0iJHt3YXIuZmlsZX0iLz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNvcHktdGxkcyIgaWY9InRsZHMtZXhpc3QiIGRlcGVuZHM9ImNsZWFyLHRlc3QtdGxkcy1leGlzdCI+CkBAIC0xNDUsMTMgKzE0NSwxMyBAQAogICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9jbGFzc2VzIi8+CiAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2xpYiIvPgogICA8bWtkaXIgZGlyPSJsaWIiLz4KLSAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtd2ViLnhtbH0iIAorICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC13ZWIueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvZ2xhc3NmaXNoLXdlYi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3N1bi13ZWIueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7c3VuLXdlYi54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9zdW4td2ViLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7d2VibG9naWMueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7d2VibG9naWMueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd2VibG9naWMueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbH0iIAorICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvbGliIiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgPGZpbGVzZXQgZGlyPSJsaWIiPgpAQCAtMTU5LDMyICsxNTksMzIgQEAKICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLnppcCIvPgogICAgICAgPC9maWxlc2V0PgogICA8L2NvcHk+Ci0gIDxjb3B5IGZpbGU9IiR7d2Vic2VydmljZXMueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7d2Vic2VydmljZXMueG1sfSIKICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93ZWJzZXJ2aWNlcy54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke21hcHBpbmdmaWxlLmxvY2F0aW9ufS8ke21hcHBpbmdmaWxlLm5hbWV9IiAKKyAgPGNvcHkgZmlsZT0iJHttYXBwaW5nZmlsZS5sb2NhdGlvbn0vJHttYXBwaW5nZmlsZS5uYW1lfSIKICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvJHttYXBwaW5nZmlsZS5uYW1lfSIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7d3NkbGZpbGUubG9jYXRpb259LyR7d3NkbGZpbGUubmFtZX0iIAorICA8Y29weSBmaWxlPSIke3dzZGxmaWxlLmxvY2F0aW9ufS8ke3dzZGxmaWxlLm5hbWV9IgogICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dzZGwvJHt3c2RsZmlsZS5uYW1lfSIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7dGFnUGx1Z2lucy54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHt0YWdQbHVnaW5zLnhtbH0iCiAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvdGFnUGx1Z2lucy54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3dlYi54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHt3ZWIueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd2ViLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gICAgPGNvcHkgZmlsZT0iJHtwZXJzaXN0ZW5jZS54bWx9IiAKKyAgICA8Y29weSBmaWxlPSIke3BlcnNpc3RlbmNlLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvcGVyc2lzdGVuY2UueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgIDxjb3B5IGZpbGU9IiR7YmVhbnMueG1sfSIgCisgICA8Y29weSBmaWxlPSIke2JlYW5zLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2JlYW5zLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgIDxjb3B5IGZpbGU9IiR7Y29udGV4dC54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvTUVUQS1JTkYvY29udGV4dC54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSBmaWxlPSIke2NkaS1leHRlbnNpb24uc2VydmljZX0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvc2VydmljZXMvamFrYXJ0YS5lbnRlcnByaXNlLmluamVjdC5zcGkuRXh0ZW5zaW9uIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgICAgIAorCiAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9jbGFzc2VzIj4KICAgICAgIDxmaWxlc2V0IGRpcj0iJHt3YXIuY2xhc3Nlc30iPgogICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouY2xhc3MiLz4KQEAgLTIyOSwxMCArMjI5LDEwIEBACiAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvc2VydmljZXMvamFrYXJ0YS5lbnRlcnByaXNlLmluamVjdC5zcGkuRXh0ZW5zaW9uIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvcGVyc2lzdGVuY2UueG1sIi8+CiAgICAgPC9maWxlc2V0PgotICA8L2phcj4gICAgICAgCisgIDwvamFyPgogICA8ZWNobyBtZXNzYWdlPSJjcmVhdGVkIHdhciBmaWxlICR7d2FyLmZpbGV9IiBsZXZlbD0idmVyYm9zZSIvPgotICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgPGVjaG8gbWVzc2FnZT0ibXkgd2ViY2xpZW50IHdhciBjbGFzc2VzIGFyZToke3dlYmNsaWVudC53YXIuY2xhc3Nlc30iIAorICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICA8ZWNobyBtZXNzYWdlPSJteSB3ZWJjbGllbnQgd2FyIGNsYXNzZXMgYXJlOiR7d2ViY2xpZW50Lndhci5jbGFzc2VzfSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiA8L3RhcmdldD4KIApAQCAtMjQ0LDEzICsyNDQsMTMgQEAKICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvbGliIi8+CiAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL01FVEEtSU5GIi8+CiAgIDxta2RpciBkaXI9ImxpYiIvPgotICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC13ZWIueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXdlYi54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7c3VuLXdlYi54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHtzdW4td2ViLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3N1bi13ZWIueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHt3ZWJsb2dpYy54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHt3ZWJsb2dpYy54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93ZWJsb2dpYy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXJlc291cmNlcy54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9saWIiIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICA8ZmlsZXNldCBkaXI9ImxpYiI+CkBAIC0yNTgsMzYgKzI1OCwzNiBAQAogICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouemlwIi8+CiAgICAgICA8L2ZpbGVzZXQ+CiAgIDwvY29weT4KLSAgPGNvcHkgZmlsZT0iJHt3ZWJzZXJ2aWNlcy54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHt3ZWJzZXJ2aWNlcy54bWx9IgogICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dlYnNlcnZpY2VzLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7bWFwcGluZ2ZpbGUubG9jYXRpb259LyR7bWFwcGluZ2ZpbGUubmFtZX0iIAorICA8Y29weSBmaWxlPSIke21hcHBpbmdmaWxlLmxvY2F0aW9ufS8ke21hcHBpbmdmaWxlLm5hbWV9IgogICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC8ke21hcHBpbmdmaWxlLm5hbWV9IgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHt3c2RsZmlsZS5sb2NhdGlvbn0vJHt3c2RsZmlsZS5uYW1lfSIgCisgIDxjb3B5IGZpbGU9IiR7d3NkbGZpbGUubG9jYXRpb259LyR7d3NkbGZpbGUubmFtZX0iCiAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd3NkbC8ke3dzZGxmaWxlLm5hbWV9IgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHt0YWdQbHVnaW5zLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3RhZ1BsdWdpbnMueG1sfSIKICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi90YWdQbHVnaW5zLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7d2ViLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3dlYi54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93ZWIueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgICA8Y29weSBmaWxlPSIke3BlcnNpc3RlbmNlLnhtbH0iIAorICAgIDxjb3B5IGZpbGU9IiR7cGVyc2lzdGVuY2UueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvY2xhc3Nlcy9NRVRBLUlORi9wZXJzaXN0ZW5jZS54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICAgPGNvcHkgZmlsZT0iJHtiZWFucy54bWx9IiAKKyAgIDxjb3B5IGZpbGU9IiR7YmVhbnMueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvYmVhbnMueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KIAotICAgPGNvcHkgZmlsZT0iJHtidW5kbGUuZGVzY3JpcHRvcn0iIAorICAgPGNvcHkgZmlsZT0iJHtidW5kbGUuZGVzY3JpcHRvcn0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvTUFOSUZFU1QuTUYiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSBmaWxlPSIke2NvbnRleHQueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL01FVEEtSU5GL2NvbnRleHQueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgPGNvcHkgZmlsZT0iJHtjZGktZXh0ZW5zaW9uLnNlcnZpY2V9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9jbGFzc2VzL01FVEEtSU5GL3NlcnZpY2VzL2pha2FydGEuZW50ZXJwcmlzZS5pbmplY3Quc3BpLkV4dGVuc2lvbiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gICAgICAKKwogICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvY2xhc3NlcyI+CiAgICAgICA8ZmlsZXNldCBkaXI9IiR7d2FyLmNsYXNzZXN9Ij4KICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmNsYXNzIi8+CkBAIC0zMzIsMTAgKzMzMiwxMCBAQAogICAgICAgPGluY2x1ZGUgbmFtZT0iV0VCLUlORi9jbGFzc2VzL01FVEEtSU5GL3NlcnZpY2VzL2pha2FydGEuZW50ZXJwcmlzZS5pbmplY3Quc3BpLkV4dGVuc2lvbiIvPgogICAgICAgPGluY2x1ZGUgbmFtZT0iV0VCLUlORi9jbGFzc2VzL01FVEEtSU5GL3BlcnNpc3RlbmNlLnhtbCIvPgogICAgIDwvZmlsZXNldD4KLSAgPC9qYXI+ICAgICAgIAorICA8L2phcj4KICAgPGVjaG8gbWVzc2FnZT0iY3JlYXRlZCBXQUIgZmlsZSAke3dhci5maWxlfSIgbGV2ZWw9InZlcmJvc2UiLz4KLSAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gIDxlY2hvIG1lc3NhZ2U9Im15IHdlYmNsaWVudCBXQUIgY2xhc3NlcyBhcmU6JHt3ZWJjbGllbnQud2FyLmNsYXNzZXN9IiAKKyAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgPGVjaG8gbWVzc2FnZT0ibXkgd2ViY2xpZW50IFdBQiBjbGFzc2VzIGFyZToke3dlYmNsaWVudC53YXIuY2xhc3Nlc30iCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogPC90YXJnZXQ+CiAKQEAgLTM1NCwzNSArMzU0LDM1IEBACiBWYXJpYWJsZXMgVXNlZDoKICAgICAke2VqYi5qYXJ9CiAgICAgJHtidWlsZC5jbGFzc2VzLmRpcn0KLSAgICAke2VqYi1qYXIueG1sfSAgICAKKyAgICAke2VqYi1qYXIueG1sfQogICAgICR7YmVhbnMueG1sfQotICAgICR7cGVyc2lzdGVuY2Utb3JtLnhtbH0gICAgCi0gICAgJHtzdW4tZWpiLWphci54bWx9ICAgIAotICAgICR7Z2xhc3NmaXNoLWVqYi1qYXIueG1sfSAgICAKLSAgICAke3N1bi1jbXAtbWFwcGluZ3MueG1sfSAgICAKLSAgICAke21ldGFpbmYuZGlyfSAgICAKKyAgICAke3BlcnNpc3RlbmNlLW9ybS54bWx9CisgICAgJHtzdW4tZWpiLWphci54bWx9CisgICAgJHtnbGFzc2Zpc2gtZWpiLWphci54bWx9CisgICAgJHtzdW4tY21wLW1hcHBpbmdzLnhtbH0KKyAgICAke21ldGFpbmYuZGlyfQogICAgICR7ZWpiamFyLmZpbGVzfQogICAgICR7ZGJzY2hlbWF9CiAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0icGFja2FnZS1lamJqYXItY29tbW9uIj4KICAgPGRlbGV0ZSBmaWxlPSIke2VqYi5qYXJ9Ii8+Ci0gIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IEdlbmVyYXRpbmcgZWpiLWphciBpbnNpZGUgYnVpbGQgZGlyZWN0b3J5IiAKKyAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogR2VuZXJhdGluZyBlamItamFyIGluc2lkZSBidWlsZCBkaXJlY3RvcnkiCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgotICA8Y29weSBmaWxlPSIke2VqYi1qYXIueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7ZWpiLWphci54bWx9IgogICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZWpiLWphci54bWwiCiAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7cGVyc2lzdGVuY2Utb3JtLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3BlcnNpc3RlbmNlLW9ybS54bWx9IgogICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvcGVyc2lzdGVuY2Utb3JtLnhtbCIKICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHt3ZWJzZXJ2aWNlcy54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHt3ZWJzZXJ2aWNlcy54bWx9IgogICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd2Vic2VydmljZXMueG1sIgogICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3N1bi1lamItamFyLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3N1bi1lamItamFyLnhtbH0iCiAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tZWpiLWphci54bWwiCiAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLWVqYi1qYXIueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLWVqYi1qYXIueG1sfSIKICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1lamItamFyLnhtbCIKICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbH0iCkBAIC00MDcsNDIgKzQwNyw0MiBAQAogICAgICAgPGluY2x1ZGUgbmFtZT0ic3VuLWNtcC1tYXBwaW5ncy54bWwiLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9ImJlYW5zLnhtbCIvPgogICAgIDwvbWV0YWluZj4KLSAgPC9qYXI+ICAgICAgIAorICA8L2phcj4KICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgPGRlbGV0ZSBmaWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS8qLmRic2NoZW1hIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLTwvdGFyZ2V0PiAgCis8L3RhcmdldD4KIAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLSBUYXJnZXQgdG8gcGFja2FnZSB0aGUgYXBwY2xpZW50IGFwcGxpY2F0aW9uIHRvIGphciBmaWxlIC0tPgogPCEtLQogVmFyaWFibGVzIFVzZWQ6CiAgICAgJHthcHBjbGllbnQuamFyfQotICAgICR7YXBwY2xpZW50amFyLmNsYXNzZXN9ICAgIAotICAgICR7YXBwY2xpZW50amFyLmZpbGVzfSAgICAKKyAgICAke2FwcGNsaWVudGphci5jbGFzc2VzfQorICAgICR7YXBwY2xpZW50amFyLmZpbGVzfQogICAgICR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ci0gICAgJHthcHBsaWNhdGlvbi1jbGllbnQueG1sfSAgICAKLSAgICAke3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSAgICAKKyAgICAke2FwcGxpY2F0aW9uLWNsaWVudC54bWx9CisgICAgJHtzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbH0KIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJwYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iPgogICA8ZGVsZXRlIGZpbGU9IiR7YXBwY2xpZW50Lmphcn0iLz4KLSAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogR2VuZXJhdGluZyBhcHBjbGllbnQtamFyIGluc2lkZSBidWlsZCBkaXJlY3RvcnkiIAorICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBHZW5lcmF0aW5nIGFwcGNsaWVudC1qYXIgaW5zaWRlIGJ1aWxkIGRpcmVjdG9yeSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24tY2xpZW50LnhtbH0iCi0gICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCisgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24tY2xpZW50LnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGphciBqYXJmaWxlPSIke2FwcGNsaWVudC5qYXJ9IiBiYXNlZGlyPSIke2FwcGNsaWVudGphci5maWxlc30iIAotICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIke2FwcGNsaWVudGphci5jbGFzc2VzfSIgCi0gICAgbWFuaWZlc3Q9Ii4vY2xpZW50L01BTklGRVNULk1GIj4gICAgICAgICAKKyAgPGphciBqYXJmaWxlPSIke2FwcGNsaWVudC5qYXJ9IiBiYXNlZGlyPSIke2FwcGNsaWVudGphci5maWxlc30iCisgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IiR7YXBwY2xpZW50amFyLmNsYXNzZXN9IgorICAgIG1hbmlmZXN0PSIuL2NsaWVudC9NQU5JRkVTVC5NRiI+CiAgICAgPG1ldGFpbmYgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiI+CiAgICAgICA8aW5jbHVkZSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgIDwvbWV0YWluZj4KLSAgPC9qYXI+ICAgICAgIAotPC90YXJnZXQ+IAorICA8L2phcj4KKzwvdGFyZ2V0PgogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldCB0byBjcmVhdGUgdGhlIGVqYiBhcHBsaWNhdGlvbiBqYXIgZmlsZSAtLT4KQEAgLTQ1Myw3ICs0NTMsNyBAQAogICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgIDxwYXJhbSBuYW1lPSJlamIuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIvPgogICA8L2FudGNhbGw+Ci08L3RhcmdldD4gICAgIAorPC90YXJnZXQ+CiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDwhLS0gVGFyZ2V0IHRvIGNyZWF0ZSB0aGUgYXBwY2xpZW50IGphciBmaWxlIC0tPgpAQCAtNDYxLDkgKzQ2MSw5IEBACiA8dGFyZ2V0IG5hbWU9ImFwcGNsaWVudC1qYXItY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+Ci0gICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgCisgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIKICAgICAgIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuamFyIiAKKyAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIKICAgICAgIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiAgIDwvYW50Y2FsbD4KIDwvdGFyZ2V0PgpAQCAtNDkyLDIyICs0OTIsMjIgQEAKIDx0YXJnZXQgbmFtZT0iYnVpbGQtZWFyLWNvbW1vbiIgZGVwZW5kcz0iZml4RmlsZXMscGFja2FnZS1wZXJzaXN0ZW5jZS1jb21tb24sZWpiLWphci1jb21tb24sYXBwY2xpZW50LWphci1jb21tb24sd2ViY2xpZW50LXdhci1jb21tb24iPgogICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gICAKLSAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAgCWZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgIAlmYWlsb25lcnJvcj0iZmFsc2UiLz4gCisgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CisgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLWVhci54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiICBmaWx0ZXJpbmc9InRydWUiLz4KLSAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPiAKKyAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgogICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgogICAgIDwvZmlsZXNldD4KICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KLQk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci0JPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgorICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIvPgogICAgIDwvZmlsZXNldD4KICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9ImxpYi9yZXBvcnRlci5qYXIiLz4KLSAgPC9qYXI+ICAgICAgICAKKyAgPC9qYXI+CiA8L3RhcmdldD4KIAogCkBAIC01MTcsMjEgKzUxNywyMSBAQAogPHRhcmdldCBuYW1lPSJlYXItY29tbW9uIiBkZXBlbmRzPSJmaXhGaWxlcyxpbml0LWNvbW1vbiI+CiAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgICAKLSAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAgCWZhaWxvbmVycm9yPSJmYWxzZSIvPiAKKyAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMtZWFyLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIgIGZpbHRlcmluZz0idHJ1ZSIvPgotICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgCisgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIgogICAgIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KICAgICA8L2ZpbGVzZXQ+CiAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+Ci0JPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgorICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiLz4KICAgICA8L2ZpbGVzZXQ+CiAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0iIGluY2x1ZGVzPSJsaWIvcmVwb3J0ZXIuamFyIi8+Ci0gIDwvZWFyPiAgICAgICAgCisgIDwvZWFyPgogPC90YXJnZXQ+CiAKIApAQCAtNTYxLDE3ICs1NjEsMTcgQEAKICAgPGVjaG8gbWVzc2FnZT0iT3BlcmFuZCAke29wZXJhbmQucHJvcHN9IiAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGVjaG8gbWVzc2FnZT0iYXNhZG1pbiAke2FkbWluLmNvbW1hbmR9ICR7YXMucHJvcHN9ICR7b3BlcmFuZC5wcm9wc30iLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0idHJ1ZSI+Ci0gICAgICAgIDxhcmcgbGluZT0iJHthZG1pbi5jb21tYW5kfSAke2FzLnByb3BzfSAke29wZXJhbmQucHJvcHN9IiAvPiAgICAgICAgCisgICAgICAgIDxhcmcgbGluZT0iJHthZG1pbi5jb21tYW5kfSAke2FzLnByb3BzfSAke29wZXJhbmQucHJvcHN9IiAvPgogICAgIDwvZXhlYz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KLSAgPGVjaG8gbWVzc2FnZT0iRG9pbmcgYWRtaW4gdGFzayAke2FkbWluLmNvbW1hbmR9IChpZ25vcmUgZmFpbHVyZXMpIiAKKyAgPGVjaG8gbWVzc2FnZT0iRG9pbmcgYWRtaW4gdGFzayAke2FkbWluLmNvbW1hbmR9IChpZ25vcmUgZmFpbHVyZXMpIgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGVjaG8gbWVzc2FnZT0iT3BlcmFuZCAke29wZXJhbmQucHJvcHN9IiAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGVjaG8gbWVzc2FnZT0iYXNhZG1pbiAke2FkbWluLmNvbW1hbmR9ICR7YXMucHJvcHN9ICR7b3BlcmFuZC5wcm9wc30iLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgotICAgICAgICA8YXJnIGxpbmU9IiR7YWRtaW4uY29tbWFuZH0gJHthcy5wcm9wc30gJHtvcGVyYW5kLnByb3BzfSIgLz4gICAgICAgIAorICAgICAgICA8YXJnIGxpbmU9IiR7YWRtaW4uY29tbWFuZH0gJHthcy5wcm9wc30gJHtvcGVyYW5kLnByb3BzfSIgLz4KICAgICA8L2V4ZWM+CiA8L3RhcmdldD4KIApAQCAtNTc5LDcgKzU3OSw3IEBACiA8IS0tIFRhcmdldCB0byBleGVjdXRlIGEgYmF0Y2hmaWxlIG9mIGFzYWRtaW4gY29tbWFuZHMgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+Ci0gIDxlY2hvIG1lc3NhZ2U9IkRvaW5nIGFkbWluIGJhdGNoIHRhc2sgJHthZG1pbi5jb21tYW5kfSAtLWZpbGUiIAorICA8ZWNobyBtZXNzYWdlPSJEb2luZyBhZG1pbiBiYXRjaCB0YXNrICR7YWRtaW4uY29tbWFuZH0gLS1maWxlIgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ1c2VyLnBhc3N3b3JkLmZpbGUiIHZhbHVlPSJhc2FkbWludXNlcnBhc3N3b3JkLnR4dCIvPgogPGVjaG8gZmlsZT0iJHt1c2VyLnBhc3N3b3JkLmZpbGV9IiBhcHBlbmQ9ImZhbHNlIj4KQEAgLTU5MCwxMSArNTkwLDExIEBACiA8L2VjaG8+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJ0cnVlIj4KICAgICAgPGFyZyBsaW5lPSItLXVzZXIgJHthZG1pbi51c2VyfSAtLXBhc3N3b3JkZmlsZSAke3VzZXIucGFzc3dvcmQuZmlsZX0gLS1ob3N0ICR7YWRtaW4uaG9zdH0gLS1wb3J0ICR7YWRtaW4ucG9ydH0gLS1lY2hvPXRydWUgLS10ZXJzZT10cnVlIi8+Ci0gICAgIDxhcmcgbGluZT0ibXVsdGltb2RlIC0tZmlsZSAke2FzYWRtaW4uZmlsZX0iIC8+ICAgICAgICAKKyAgICAgPGFyZyBsaW5lPSJtdWx0aW1vZGUgLS1maWxlICR7YXNhZG1pbi5maWxlfSIgLz4KICAgPC9leGVjPgogICA8ZGVsZXRlIGZpbGU9IiR7dXNlci5wYXNzd29yZC5maWxlfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiA8L3RhcmdldD4KLSAKKwogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CkBAIC02MTgsNyArNjE4LDcgQEAKICAgPC9leGVjPgogICA8ZGVsZXRlIGZpbGU9IiR7dXNlci5wYXNzd29yZC5maWxlfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiA8L3RhcmdldD4KLSAgICAgCisKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDwhLS0gVGFyZ2V0IHRvIGRlbGV0ZSB0aGUgdXNlciBpbiBmaWxlIHJlYWxtIHRoZSBBcHBTZXJ2ICAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KQEAgLTYzNCw3ICs2MzQsNyBAQAogPC90YXJnZXQ+CiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gSjJFRSBDb25uZWN0b3IgcmVsYXRlZCB0YXJnZXRzIAkJCSAgICAgCSAgLS0+Cis8IS0tIEoyRUUgQ29ubmVjdG9yIHJlbGF0ZWQgdGFyZ2V0cyAgICAgICAgICAgICAgICAgICAgICAgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogCiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1jb25uZWN0b3ItY29ubnBvb2wtY29tbW9uIgpAQCAtNzIxLDcgKzcyMSw3IEBACiA8IS0tIFRhcmdldCB0byBjcmVhdGUgSkRCQyBjb25uZWN0aW9uIHBvb2wgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLTxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgamRiYyBjb25uZWN0aW9uIHBvb2wgJHtqZGJjLmNvbnBvb2wubmFtZX0iIAorPGVjaG8gbWVzc2FnZT0iY3JlYXRlZCBqZGJjIGNvbm5lY3Rpb24gcG9vbCAke2pkYmMuY29ucG9vbC5uYW1lfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgIDxhcmcgbGluZT0iY3JlYXRlLWpkYmMtY29ubmVjdGlvbi1wb29sIi8+CkBAIC03MzUsNyArNzM1LDcgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLWRyaXZlci1jb25ucG9vbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLTxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgamRiYyBjb25uZWN0aW9uIHBvb2wgJHtqZGJjLmNvbnBvb2wubmFtZX0iIAorPGVjaG8gbWVzc2FnZT0iY3JlYXRlZCBqZGJjIGNvbm5lY3Rpb24gcG9vbCAke2pkYmMuY29ucG9vbC5uYW1lfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYS1wYXJhbXMiIHZhbHVlPSIiLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgpAQCAtNzcyLDcgKzc3Miw3IEBACiAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgogICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCSAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7amRiYy5jb25wb29sLm5hbWV9LnByb3BlcnR5LlVSTD0ke2RiLnVybH07dXNlcj0ke2RiLnVzZXJ9O3Bhc3N3b3JkPSR7ZGIucHdkfSIvPgorICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7amRiYy5jb25wb29sLm5hbWV9LnByb3BlcnR5LlVSTD0ke2RiLnVybH07dXNlcj0ke2RiLnVzZXJ9O3Bhc3N3b3JkPSR7ZGIucHdkfSIvPgogICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIApAQCAtODIzLDcgKzgyMyw3IEBACiAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgogICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCSAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7amRiYy5jb25wb29sLm5hbWV9LnByb3BlcnR5LlVSTD0ke2RiLnVybH07dXNlcj0ke2RiLnVzZXJ9O3Bhc3N3b3JkPSR7ZGIucHdkfSIvPgorICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7amRiYy5jb25wb29sLm5hbWV9LnByb3BlcnR5LlVSTD0ke2RiLnVybH07dXNlcj0ke2RiLnVzZXJ9O3Bhc3N3b3JkPSR7ZGIucHdkfSIvPgogICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIApAQCAtODM5LDE0ICs4MzksMTQgQEAKICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7amRiYy5jb25wb29sLm5hbWV9Ii8+CiAgICAgPC9leGVjPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNtZCBleGVjdXRlZCBmb3IgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4gIAorICAgIDxlY2hvIG1lc3NhZ2U9ImNtZCBleGVjdXRlZCBmb3IgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KIDwvdGFyZ2V0PgogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldCB0byBjcmVhdGUgSkRCQyByZXNvdXJjZSAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgamRiYyByZXNvdXJjZSBwb29sICR7amRiYy5yZXNvdXJjZS5uYW1lfSIgCis8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBqZGJjIHJlc291cmNlIHBvb2wgJHtqZGJjLnJlc291cmNlLm5hbWV9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxlY2hvIG1lc3NhZ2U9ImFzYWRtaW4gY3JlYXRlLWpkYmMtcmVzb3VyY2UgJHthcy5wcm9wc30gLS1jb25uZWN0aW9ucG9vbGlkICR7amRiYy5jb25wb29sLm5hbWV9IC0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9ICR7amRiYy5yZXNvdXJjZS5uYW1lfSIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgpAQCAtODk4LDcgKzg5OCw3IEBACiA8IS0tIFRhcmdldCB0byBjcmVhdGUgcGVyc2lzdGVuY2UgcmVzb3VyY2UgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJjcmVhdGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci08ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBwbSByZXNvdXJjZSBhdCAke3BtLnJlc291cmNlLm5hbWV9IiAKKzxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIHBtIHJlc291cmNlIGF0ICR7cG0ucmVzb3VyY2UubmFtZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgICA8ZWNobyBtZXNzYWdlPSJhc2FkbWluIGNyZWF0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZSAke2FzLnByb3BzfSAtLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSAke3BtLnJlc291cmNlLm5hbWV9Ii8+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KQEAgLTkwOCw3ICs5MDgsNyBAQAogICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHtwbS5yZXNvdXJjZS5uYW1lfSIvPgogICAgIDwvZXhlYz4KLSAgICA8ZWNobyBtZXNzYWdlPSJDcmVhdGVkICR7cG0ucmVzb3VyY2UubmFtZX0gLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4gCisgICAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRlZCAke3BtLnJlc291cmNlLm5hbWV9IC0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCkBAIC05MjcsMTQgKzkyNywxNCBAQAogPHRhcmdldCBuYW1lPSJkZWxldGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIgotICAgICAgdmFsdWU9ImRlbGV0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZSAKKyAgICAgIHZhbHVlPSJkZWxldGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UKICAgICAgICAgLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iIC8+CiAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3BtLnJlc291cmNlLm5hbWV9IiAvPgogICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJleGVjdXRlLXNxbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLTxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBzcWwgc3RhdGVtZW50IGF0ICR7YmFzZWRpcn0gZnJvbSAke3NxbC5maWxlfSIgCis8ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgc3FsIHN0YXRlbWVudCBhdCAke2Jhc2VkaXJ9IGZyb20gJHtzcWwuZmlsZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPHNxbAogICAgIGRyaXZlcj0iJHtkYi5kcml2ZXJ9IgpAQCAtOTQ5LDcgKzk0OSw3IEBACiAKIAogPHRhcmdldCBuYW1lPSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci08ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgc3FsIHN0YXRlbWVudCBhdCAke2Jhc2VkaXJ9IGZyb20gJHtzcWwuZmlsZX0iIAorPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIHNxbCBzdGF0ZW1lbnQgYXQgJHtiYXNlZGlyfSBmcm9tICR7c3FsLmZpbGV9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxzcWwKICAgICBkcml2ZXI9IiR7ZGIuZHJpdmVyfSIKQEAgLTk2NSw4ICs5NjUsOCBAQAogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldCB0byBjcmVhdGUvZGVsZXRlIGphdmFtYWlsIHJlc291cmNlcyAgLS0+Ci08IS0tIAotICAgIFByb3BlcnRpZXMgcmVxdWlyZWQ6IAorPCEtLQorICAgIFByb3BlcnRpZXMgcmVxdWlyZWQ6CiAgICAgbWFpbGhvc3QKICAgICBmcm9tYWRkcmVzcwogICAgIGRlYnVnCkBAIC0xMDA3LDcgKzEwMDcsNyBAQAogPCEtLSBUYXJnZXQgdG8gY3JlYXRlIGRhdGFiYXNlIHRhYmxlIHRocm91Z2ggU1FMIGZpbGUgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJjcmVhdGUtc3FsLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iY3JlYXRpbmcgdGFibGVzIGZyb20gJHtiYXNlZGlyfS9zcWwvJHtkYi5jcmVhdGV9IiAKKzxlY2hvIG1lc3NhZ2U9ImNyZWF0aW5nIHRhYmxlcyBmcm9tICR7YmFzZWRpcn0vc3FsLyR7ZGIuY3JlYXRlfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8c3FsCiAgICAgZHJpdmVyPSIke2RiLmRyaXZlcn0iCkBAIC0xMDI2LDcgKzEwMjYsNyBAQAogPCEtLSBUYXJnZXQgdG8gZGVsZXRlIGRhdGFiYXNlIHRhYmxlIHRocm91Z2ggU1FMIGZpbGUgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJkZWxldGUtc3FsLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iZHJvcHBpbmcgdGFibGVzIGZyb20gJHtiYXNlZGlyfS9zcWwvJHtkYi5kcm9wfSIgCis8ZWNobyBtZXNzYWdlPSJkcm9wcGluZyB0YWJsZXMgZnJvbSAke2Jhc2VkaXJ9L3NxbC8ke2RiLmRyb3B9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxzcWwKICAgICBkcml2ZXI9IiR7ZGIuZHJpdmVyfSIKQEAgLTEwNDUsMTEgKzEwNDUsMTEgQEAKIDwhLS0gVGFnZXQgdG8gY3JlYXRlIEpNUyBDb25uZWN0aW9uICAgICAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qbXMtY29ubmVjdGlvbi1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgSk1TIGNvbm5lY3Rpb24gZmFjdG9yeSB3aXRoIG5hbWUgJHtqbXMuZmFjdG9yeS5uYW1lfSIgCisgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIEpNUyBjb25uZWN0aW9uIGZhY3Rvcnkgd2l0aCBuYW1lICR7am1zLmZhY3RvcnkubmFtZX0iCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KICAgICA8YXJnIGxpbmU9ImNyZWF0ZS1qbXMtcmVzb3VyY2UgIi8+Ci0gICAgPGFyZyBsaW5lPSItLXJlc3R5cGUgJHtqbXMuZmFjdG9yeS50eXBlfSIvPiAgICAKKyAgICA8YXJnIGxpbmU9Ii0tcmVzdHlwZSAke2ptcy5mYWN0b3J5LnR5cGV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7am1zLmZhY3RvcnkubmFtZX0iIC8+CkBAIC0xMDYwLDIzICsxMDYwLDIzIEBACiA8IS0tIFRhZ2V0IHRvIGRlbGV0ZSBKTVMgQ29ubmVjdGlvbiAgICAgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJkZWxldGUtam1zLWNvbm5lY3Rpb24tY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gIDxlY2hvIG1lc3NhZ2U9IkRlbGV0ZSBKTVMgY29ubmVjdGlvbiBmYWN0b3J5IHdpdGggbmFtZSAke2ptcy5mYWN0b3J5Lm5hbWV9IiAKKyAgPGVjaG8gbWVzc2FnZT0iRGVsZXRlIEpNUyBjb25uZWN0aW9uIGZhY3Rvcnkgd2l0aCBuYW1lICR7am1zLmZhY3RvcnkubmFtZX0iCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KLSAgICA8YXJnIGxpbmU9ImRlbGV0ZS1qbXMtcmVzb3VyY2UgIi8+ICAgIAorICAgIDxhcmcgbGluZT0iZGVsZXRlLWptcy1yZXNvdXJjZSAiLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPiAgICAKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2ptcy5mYWN0b3J5Lm5hbWV9Ii8+CiAgIDwvZXhlYz4KIDwvdGFyZ2V0PgogCiA8IS0tIEpNUzogY3JlYXRlL2RlbGV0ZSBEZXN0aW5hdGlvbiBSZXNvdXJjZSBUYXJnZXRzIC0tPgogPHRhcmdldCBuYW1lPSJjcmVhdGUtam1zLXJlc291cmNlLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICA8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBKTVMgcmVzb3VyY2Ugd2l0aCBuYW1lICR7am1zLnJlc291cmNlLm5hbWV9IiAKKyAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgSk1TIHJlc291cmNlIHdpdGggbmFtZSAke2ptcy5yZXNvdXJjZS5uYW1lfSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAKICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+Ci0gICAgPGFyZyBsaW5lPSJjcmVhdGUtam1zZGVzdCAtLWRlc3R0eXBlICR7ZGVzdC50eXBlfSAiLz4gICAgCisgICAgPGFyZyBsaW5lPSJjcmVhdGUtam1zZGVzdCAtLWRlc3R0eXBlICR7ZGVzdC50eXBlfSAiLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2Rlc3QubmFtZX0iLz4KICAgPC9leGVjPgpAQCAtMTA4NSwyNCArMTA4NSwyNCBAQAogICAgIDxhcmcgbGluZT0iY3JlYXRlLWptcy1yZXNvdXJjZSAiLz4KICAgICA8YXJnIGxpbmU9Ii0tcmVzdHlwZSAke2ptcy5yZXNvdXJjZS50eXBlfSIvPgogICAgIDxhcmcgbGluZT0iLS1wcm9wZXJ0eSBpbXFEZXN0aW5hdGlvbk5hbWU9JHtkZXN0Lm5hbWV9Ii8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPiAgICAKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgIDxhcmcgbGluZT0iJHtqbXMucmVzb3VyY2UubmFtZX0iLz4KICAgPC9leGVjPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iZGVsZXRlLWptcy1yZXNvdXJjZS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgPGVjaG8gbWVzc2FnZT0iRGVsZXRlIEpNUyByZXNvdXJjZSB3aXRoIG5hbWUgJHtqbXMucmVzb3VyY2UubmFtZX0iIAorICA8ZWNobyBtZXNzYWdlPSJEZWxldGUgSk1TIHJlc291cmNlIHdpdGggbmFtZSAke2ptcy5yZXNvdXJjZS5uYW1lfSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAKICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CiAgICAgPGFyZyBsaW5lPSJkZWxldGUtam1zLXJlc291cmNlICIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4gICAgCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30gJHtqbXMucmVzb3VyY2UubmFtZX0iLz4KICAgPC9leGVjPgogCiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgotICAgIDxhcmcgbGluZT0iZGVsZXRlLWptc2Rlc3QgLS1kZXN0dHlwZSAke2Rlc3QudHlwZX0gIi8+ICAgIAorICAgIDxhcmcgbGluZT0iZGVsZXRlLWptc2Rlc3QgLS1kZXN0dHlwZSAke2Rlc3QudHlwZX0gIi8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSAke2Rlc3QubmFtZX0iLz4KICAgPC9leGVjPgogPC90YXJnZXQ+CkBAIC0xMTQ2LDIwICsxMTQ2LDIwIEBACiA8dGFyZ2V0IG5hbWU9ImRlcGxveS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24tcGUiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24tZWUiLz4KLTwvdGFyZ2V0PiAgICAgICAKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImRlcGxveS12ZXJpZnktY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktdmVyaWZ5LWNvbW1vbi1wZSIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXZlcmlmeS1jb21tb24tZWUiLz4KLTwvdGFyZ2V0PiAgICAgICAKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImRlcGxveS1jb21tb24tcGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIiB1bmxlc3M9ImVlIj4KICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveWVkLmFwcCIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIvPgogICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhLXBhcmFtcyIgdmFsdWU9IiIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgIDxhcmcgbGluZT0iZGVwbG95Ii8+Ci0gICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPiAgICAKLSAgICA8YXJnIGxpbmU9IiR7ZXh0cmEtcGFyYW1zfSIvPiAgICAKKyAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CisgICAgPGFyZyBsaW5lPSIke2V4dHJhLXBhcmFtc30iLz4KICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSItLXJldHJpZXZlICR7YXNzZW1ibGUuZGlyfSIvPgogICAgIDxhcmcgbGluZT0iLS1saWJyYXJpZXMgJHtsaWJyYXJpZXN9Ii8+CkBAIC0xMTY5LDcgKzExNjksNyBAQAogICA8ZWNobyBtZXNzYWdlPSJEZXBsb3ltZW50IG9uIHRhcmdldCBzZXJ2ZXIgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gc3VjY2Vzc2Z1bCIvPgogICAgPC90YXJnZXQ+CiAKLTx0YXJnZXQgbmFtZT0iZGVwbG95LWNvbW1vbi1lZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJlZSI+ICAgICAgCis8dGFyZ2V0IG5hbWU9ImRlcGxveS1jb21tb24tZWUiIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0iZWUiPgogICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgaW4gRUUuLi4iLz4KICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveWVkLmFwcCIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgpAQCAtMTIyMSw5ICsxMjIxLDkgQEAKICAgICA8YXJnIGxpbmU9Ii0tcHJlY29tcGlsZWpzcD0ke3ByZWNvbXBpbGVqc3B9Ii8+CiAgICAgPGFyZyBsaW5lPSItLXVwbG9hZCB0cnVlIi8+CiAgICAgPGFyZyBsaW5lPSItLXJldHJpZXZlICR7YXNzZW1ibGUuZGlyfSIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICA8L2V4ZWM+Ci08L3RhcmdldD4gICAgCis8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJkZXBsb3ktd2FyLW5hbWUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nICR7d2FybmFtZX0gZnJvbSAke2Jhc2VkaXJ9LiIKQEAgLTEyNTMsNyArMTI1Myw3IEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJkZXBsb3ktd2FiLWNvbW1vbnBlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgdW5sZXNzPSJlZSI+Ci0gIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyBXQUIgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciBmcm9tICR7YmFzZWRpcn0uIiAKKyAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nIFdBQiAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIGZyb20gJHtiYXNlZGlyfS4iCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8cHJvcGVydHkgbmFtZT0icHJlY29tcGlsZWpzcCIgdmFsdWU9InRydWUiLz4KICAgPHByb3BlcnR5IG5hbWU9ImZvcmNlIiB2YWx1ZT0iZmFsc2UiLz4KQEAgLTEyNjMsMTcgKzEyNjMsMTcgQEAKICAgICA8YXJnIGxpbmU9Ii0tcHJlY29tcGlsZWpzcD0ke3ByZWNvbXBpbGVqc3B9Ii8+CiAgICAgPGFyZyBsaW5lPSItLWZvcmNlPSR7Zm9yY2V9Ii8+CiAgICAgPGFyZyBsaW5lPSItLXVwbG9hZD10cnVlIi8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSItLWxpYnJhcmllcyAke2xpYnJhcmllc30iLz4KICAgICA8YXJnIGxpbmU9Ii0tdHlwZT1vc2dpIi8+CiAgICAgPGFyZyBsaW5lPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CiAgIDwvZXhlYz4KLTwvdGFyZ2V0PiAKKzwvdGFyZ2V0PgogCiAKIAogPHRhcmdldCBuYW1lPSJkZXBsb3ktd2FyLWNvbW1vbnBlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgdW5sZXNzPSJlZSI+Ci0gIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIGZyb20gJHtiYXNlZGlyfS4iIAorICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciBmcm9tICR7YmFzZWRpcn0uIgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPHByb3BlcnR5IG5hbWU9InByZWNvbXBpbGVqc3AiIHZhbHVlPSJ0cnVlIi8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJmb3JjZSIgdmFsdWU9ImZhbHNlIi8+CkBAIC0xMjg0LDExICsxMjg0LDExIEBACiAgICAgPGFyZyBsaW5lPSItLXByZWNvbXBpbGVqc3A9JHtwcmVjb21waWxlanNwfSIvPgogICAgIDxhcmcgbGluZT0iLS1mb3JjZT0ke2ZvcmNlfSIvPgogICAgIDxhcmcgbGluZT0iLS11cGxvYWQ9dHJ1ZSIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iLS1saWJyYXJpZXMgJHtsaWJyYXJpZXN9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CiAgIDwvZXhlYz4KLTwvdGFyZ2V0PiAKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImRlcGxveS13YXItY29tbW9uZWUiIGlmPSJlZSI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwcmVjb21waWxlanNwIiB2YWx1ZT0idHJ1ZSIvPgpAQCAtMTMwMSw3ICsxMzAxLDcgQEAKICAgICA8YXJnIGxpbmU9Ii0tcHJlY29tcGlsZWpzcD0ke3ByZWNvbXBpbGVqc3B9Ii8+CiAgICAgPGFyZyBsaW5lPSItLWZvcmNlPSR7Zm9yY2V9Ii8+CiAgICAgPGFyZyBsaW5lPSItLXVwbG9hZD10cnVlIi8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSItLWxpYnJhcmllcyAke2xpYnJhcmllc30iLz4KICAgICA8YXJnIGxpbmU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KICAgPC9leGVjPgpAQCAtMTM1MSwxMCArMTM1MSwxMCBAQAogICAgIDxhcmcgbGluZT0iZGVwbG95Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgIDxhcmcgbGluZT0iLS11cGxvYWQ9dHJ1ZSIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIvPgogICA8L2V4ZWM+Ci08L3RhcmdldD4gCis8L3RhcmdldD4KIAogPCEtLSBkZXBsb3kgdGhlIHN0YW5kYWxvbmUgamFyIGluIEFwcFNlcnYgIC0tPgogPHRhcmdldCBuYW1lPSJkZXBsb3ktY2xpZW50LWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTM2MiwxMSArMTM2MiwxMSBAQAogICAgIDxhcmcgbGluZT0iZGVwbG95Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgIDxhcmcgbGluZT0iLS11cGxvYWQ9dHJ1ZSIvPgotICAgIDxhcmcgbGluZT0iLS1yZXRyaWV2ZSAke2Fzc2VtYmxlLmRpcn0iLz4gICAgCi0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tcmV0cmlldmUgJHthc3NlbWJsZS5kaXJ9Ii8+CisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogICA8L2V4ZWM+Ci08L3RhcmdldD4gCis8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJ1bmRlcGxveS13YXItbmFtZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8cHJvcGVydHkgbmFtZT0iZGVwbG95ZWRhcHAubmFtZSIgdmFsdWU9IiR7d2FybmFtZX0iLz4KQEAgLTEzODgsMjcgKzEzODgsMjcgQEAKICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICA8YXJnIGxpbmU9InVuZGVwbG95Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgotPCEtLSAgICAKLTxhcmcgbGluZT10eXBlICR7YXBwdHlwZX0vPiAKKzwhLS0KKzxhcmcgbGluZT10eXBlICR7YXBwdHlwZX0vPgogLS0+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2V4dHJhLXBhcmFtc30iLz4KIDwhLS0gZGVwbG95ZWRhcHAubmFtZSBkZWZhdWx0cyB0byB7YXBwbmFtZX1BcHAuZGVjbGFyZWQgaW4gcHJvcGVydGllcy54bWwtLT4KLSAgICA8YXJnIGxpbmU9IiR7ZGVwbG95ZWRhcHAubmFtZX0iLz4JCisgICAgPGFyZyBsaW5lPSIke2RlcGxveWVkYXBwLm5hbWV9Ii8+CiAgIDwvZXhlYz4KIDwvdGFyZ2V0PgogCiA8IS0tICB1bmRlcGxveSB0aGUgc3RhbmRhbG9uZSB3YXIgaW4gQXBwU2VydiAgLS0+CiA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LXdhci1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICA8ZWNobyBtZXNzYWdlPSJVbmRlcGxveWluZyB3YXJmaWxlICR7YXBwbmFtZX0td2ViIGZyb20gCisgICAgPGVjaG8gbWVzc2FnZT0iVW5kZXBsb3lpbmcgd2FyZmlsZSAke2FwcG5hbWV9LXdlYiBmcm9tCiAgICAgICAgICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIgZnJvbSAke2Jhc2VkaXJ9LiIgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICA8YXJnIGxpbmU9InVuZGVwbG95Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHthcHBuYW1lfS13ZWIiLz4KICAgPC9leGVjPgotPC90YXJnZXQ+IAorPC90YXJnZXQ+CiAKIAogPCEtLSAgdW5kZXBsb3kgdGhlIHN0YW5kYWxvbmUgd2FyIGluIEFwcFNlcnYgIC0tPgpAQCAtMTQxNiw3ICsxNDE2LDcgQEAKICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICA8YXJnIGxpbmU9InVuZGVwbG95Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHthcHBuYW1lfS1lamIiLz4KICAgPC9leGVjPgogPC90YXJnZXQ+CkBAIC0xNDI2LDEwICsxNDI2LDEwIEBACiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgPGFyZyBsaW5lPSJ1bmRlcGxveSIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7YXBwbmFtZX0tY2xpZW50Ii8+CiAgIDwvZXhlYz4KLTwvdGFyZ2V0PiAgCis8L3RhcmdldD4KIAogCiA8IS0tIHJ1biBhcHBjbGllbnQgaW4gQXBwU2VydiAgLS0+CkBAIC0xNDcyLDExICsxNDcyLDExIEBACiAgICAgPGFyZyB2YWx1ZT0iJHt0ZXN0c3VpdGUuaWR9Ii8+CiAgIDwvamF2YT4KIDwvdGFyZ2V0PgotICAKKwogPCEtLSBwcmVwYXJlIFBvaW50YmFzZSBzZXJ2ZXJzIC0tPgogPHRhcmdldCBuYW1lPSJwcmVwYXJlUEIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgPGVjaG8gbWVzc2FnZT0iU3RhcnRpbmcgUG9pbnRiYXNlIHNlcnZlcnMiIGxldmVsPSJ2ZXJib3NlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9saWIvcG9pbnRiYXNlLmluaSIgCisgIDxjb3B5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9saWIvcG9pbnRiYXNlLmluaSIKICAgICAgIHRvZmlsZT0iJHtkYi5kaXJ9L3BvaW50YmFzZS5pbmkiLz4KICAgPHJlcGxhY2UgZmlsZT0iJHtkYi5kaXJ9L3BvaW50YmFzZS5pbmkiIHRva2VuPSJAQEAiIHZhbHVlPSIke2RiLmRpcn0iLz4KIDwvdGFyZ2V0PgpAQCAtMTQ5OSwxMiArMTQ5OSwxMiBAQAogCiA8IS0tIHRhcmdldCBuYW1lPSJzdGFydFBCIiBkZXBlbmRzPSJwcmVwYXJlUEIiPgogICA8cGFyYWxsZWw+Ci0gICAgPGphdmEgY2xhc3NuYW1lPSJjb20ucG9pbnRiYXNlLm5ldC5uZXRTZXJ2ZXIiIAorICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnBvaW50YmFzZS5uZXQubmV0U2VydmVyIgogICAgICAgICBjbGFzc3BhdGg9IiR7ZGIuY2xhc3NwYXRofSIgZmFpbG9uZXJyb3I9ImZhbHNlIiBmb3JrPSJ0cnVlIj4KICAgICAgIDxhcmcgbGluZT0iL3BvcnQ6OTA5MiIvPgogICAgICAgPGFyZyBsaW5lPSIvcG9pbnRiYXNlLmluaT0ke2RiLmRpcn0vcG9pbnRiYXNlLmluaSIvPgogICAgIDwvamF2YT4KLSAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5wb2ludGJhc2UubmV0Lm5ldFNlcnZlciIgCisgICAgPGphdmEgY2xhc3NuYW1lPSJjb20ucG9pbnRiYXNlLm5ldC5uZXRTZXJ2ZXIiCiAgICAgICAgIGNsYXNzcGF0aD0iJHtkYi5jbGFzc3BhdGh9IiBmYWlsb25lcnJvcj0idHJ1ZSIgZm9yaz0idHJ1ZSI+CiAgICAgICA8YXJnIGxpbmU9Ii9wb3J0OjkwOTMiLz4KICAgICAgIDxhcmcgbGluZT0iL3BvaW50YmFzZS5pbmk9JHtkYi5kaXJ9L3BvaW50YmFzZS5pbmkiLz4KQEAgLTE1MTUsNyArMTUxNSw3IEBACiA8IS0tICBzdGFydCBEZXJieSBEYXRhYmFzZSAtLT4KIDx0YXJnZXQgbmFtZT0ic3RhcnREZXJieSI+CiAgIDxjb25kaXRpb24gcHJvcGVydHk9ImRhcndpbiI+Ci0JPG9zIG5hbWU9Ik1hYyBPUyBYIi8+CisgICAgPG9zIG5hbWU9Ik1hYyBPUyBYIi8+CiAgIDwvY29uZGl0aW9uPgogICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0RGVyYnlOb25NYWMiLz4KICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydERlcmJ5TWFjIi8+CkBAIC0xNTMyLDcgKzE1MzIsNyBAQAogICAgICAgY2xhc3NwYXRoPSIke2RiLmNsYXNzcGF0aH0iIGZvcms9InRydWUiIHNwYXduPSJ0cnVlIj4KICAgICAgIDxhcmcgbGluZT0iLWggbG9jYWxob3N0IC1wIDE1Mjggc3RhcnQiLz4KICAgICA8L2phdmE+Ci0gIDwvcGFyYWxsZWw+ICAgICAKKyAgPC9wYXJhbGxlbD4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InN0YXJ0RGVyYnlNYWMiIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0iZGFyd2luIj4KQEAgLTE1NDUsNyArMTU0NSw3IEBACiAgICAgPC9qYXZhPgogICAgIDxqYXZhIGNsYXNzbmFtZT0ib3JnLmFwYWNoZS5kZXJieS5kcmRhLk5ldHdvcmtTZXJ2ZXJDb250cm9sIgogICAgICAgY2xhc3NwYXRoPSIke2RiLmNsYXNzcGF0aH0iIGZvcms9InRydWUiIHNwYXduPSJ0cnVlIj4KLSAgICAgICA8c3lzcHJvcGVydHkga2V5PSJkZXJieS5zdG9yYWdlLmZpbGVTeW5jVHJhbnNhY3Rpb25Mb2ciIHZhbHVlPSJ0cnVlIi8+ICAgICAKKyAgICAgICA8c3lzcHJvcGVydHkga2V5PSJkZXJieS5zdG9yYWdlLmZpbGVTeW5jVHJhbnNhY3Rpb25Mb2ciIHZhbHVlPSJ0cnVlIi8+CiAgICAgICA8YXJnIGxpbmU9Ii1oIGxvY2FsaG9zdCAtcCAxNTI4IHN0YXJ0Ii8+CiAgICAgPC9qYXZhPgogICA8L3BhcmFsbGVsPgpAQCAtMTU3MywxMCArMTU3MywxMCBAQAogCiA8IS0tIHNldHVwIElNUSBmb3IgUkkgQnVpbGQgLS0+CiA8dGFyZ2V0IG5hbWU9InNldHVwLW1xLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgIDxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBEYXRhc3RvcmUgc2V0dXAgZm9yIFMxTVEuIFJlcXVpcmVkIG9ubHkgZm9yIFJJIiAKKyAgICA8ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgRGF0YXN0b3JlIHNldHVwIGZvciBTMU1RLiBSZXF1aXJlZCBvbmx5IGZvciBSSSIKICAgICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KLSAgICA8ZWNobyBtZXNzYWdlPSIke0lNUURCTUdSfSAtamF2YWhvbWUgJHtqYXZhLmhvbWV9IAotICAgICAgICAtYiAke2FkbWluLmRvbWFpbn1fJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gY3JlYXRlIGFsbCIgCisgICAgPGVjaG8gbWVzc2FnZT0iJHtJTVFEQk1HUn0gLWphdmFob21lICR7amF2YS5ob21lfQorICAgICAgICAtYiAke2FkbWluLmRvbWFpbn1fJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gY3JlYXRlIGFsbCIKICAgICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtJTVFEQk1HUn0iIGZhaWxvbmVycm9yPSJ0cnVlIj4KICAgICAgPGFyZyBsaW5lPSItamF2YWhvbWUgJHtqYXZhLmhvbWV9IC1iICR7YWRtaW4uZG9tYWlufV8ke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSBjcmVhdGUgYWxsIiAvPgpAQCAtMTYzNywxMyArMTYzNywxMyBAQAogCiA8IS0tIHVzYWdlICAtLT4KIDx0YXJnZXQgbmFtZT0idXNhZ2UtY29tbW9uIj4KLSAgICA8ZWNobz4gICAgICAgICAKKyAgICA8ZWNobz4KICAgICAgICAgYW50IGNsZWFuICAgICAgICAgICBSZW1vdmUgYWxsIGNsYXNzZXMgZmlsZXMKICAgICAgICAgYW50IGJ1aWxkICAgICAgICAgICBCdWlsZCB0aGUgYXBwbGljYXRpb24KICAgICAgICAgYW50IGRlcGxveSAgICAgICAgICBEZXBsb3kgdGhlIGVhciBmaWxlcyB0byBTMUFTCi0gICAgICAgIGFudCBydW4JICAgICAgICAgICAgUnVuIHRoZSBhcHBsaWNhdGlvbgorICAgICAgICBhbnQgcnVuICAgICAgICAgICAgICAgIFJ1biB0aGUgYXBwbGljYXRpb24KICAgICAgICAgYW50IHVuZGVwbG95ICAgICAgICBVbmRlcGxveSB0aGUgZWFyIGZpbGVzIGZyb20gUzFBUwotICAgICAgICBhbnQgdXNhZ2UgICAgICAgICAgIERpc3BsYXkgdGhpcyBtZXNzYWdlICAgICAgICAgICAgCisgICAgICAgIGFudCB1c2FnZSAgICAgICAgICAgRGlzcGxheSB0aGlzIG1lc3NhZ2UKICAgICA8L2VjaG8+CiA8L3RhcmdldD4KIApAQCAtMTY2OSwxMyArMTY2OSwxMyBAQAogCiA8dGFyZ2V0IG5hbWU9InJlc3RhcnQtaW5zdGFuY2UiPgogICAgIDxlY2hvIG1lc3NhZ2U9IlJlc3RhcnRpbmcgcmVtb3RlIHNlcnZlciBpbnN0YW5jZSx1bnRpbCB0aGlzIGdldHMgZml4ZWQiLz4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgIDxhcmcgbGluZT0ic3RvcC1pbnN0YW5jZSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8L2V4ZWM+CiAgICAgPHNsZWVwIHNlY29uZHM9IjMwIi8+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICA8YXJnIGxpbmU9InN0YXJ0LWluc3RhbmNlIi8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgpAQCAtMTY5OCw3ICsxNjk4LDcgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InNldHVwVGltZXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0iZWUiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgPGFyZyBsaW5lPSJjcmVhdGUtcmVzb3VyY2UtcmVmIi8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCBzZXJ2ZXIiLz4KQEAgLTE3MjUsMTMgKzE3MjUsMTMgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InVuc2V0dXBUaW1lciIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJlZSI+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICA8YXJnIGxpbmU9ImRlbGV0ZS1yZXNvdXJjZS1yZWYiLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0IHNlcnZlciIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7amRiYy5yZXNvdXJjZS5uYW1lfSIvPgogICAgIDwvZXhlYz4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgIDxhcmcgbGluZT0idW5zZXQiLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfS1jb25maWcuZWpiLWNvbnRhaW5lci5lamItdGltZXItc2VydmljZS50aW1lci1kYXRhc291cmNlIi8+CiAgICAgPC9leGVjPgpAQCAtMTkyNCw3ICsxOTI0LDcgQEAKIDwhLS0gVGFyZ2V0IHRvIEZsdXNoIGNvbm5lY3Rpb24gcG9vbCAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImZsdXNoLWNvbm5wb29sLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iRmx1c2ggY29ubmVjdGlvbiBwb29sICR7amRiYy5jb25wb29sLm5hbWV9IiAKKzxlY2hvIG1lc3NhZ2U9IkZsdXNoIGNvbm5lY3Rpb24gcG9vbCAke2pkYmMuY29ucG9vbC5uYW1lfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgIDxhcmcgbGluZT0iZmx1c2gtY29ubmVjdGlvbi1wb29sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvb3NnaS1jZGkvc2ltcGxlLXdhYi13aXRoLWNkaS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL29zZ2ktY2RpL3NpbXBsZS13YWItd2l0aC1jZGkvYnVpbGQucHJvcGVydGllcwppbmRleCAzOGQ5N2JkLi4wZjhhZGY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvb3NnaS1jZGkvc2ltcGxlLXdhYi13aXRoLWNkaS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9vc2dpLWNkaS9zaW1wbGUtd2FiLXdpdGgtY2RpL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0td2FiIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvb3NnaS1jZGkvc2ltcGxlLXdhYi13aXRoLWNkaS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvb3NnaS1jZGkvc2ltcGxlLXdhYi13aXRoLWNkaS9idWlsZC54bWwKaW5kZXggYzQxMGZkMC4uMTg3ZWNmMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL29zZ2ktY2RpL3NpbXBsZS13YWItd2l0aC1jZGkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9vc2dpLWNkaS9zaW1wbGUtd2FiLXdpdGgtY2RpL2J1aWxkLnhtbApAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01MCwyNiArNTAsMjYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhYi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FiLWNvbW1vbiIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJzbGVlcGluZyBmb3IgMTAgc2Vjb25kcyB0byBhbGxvdyB0aGUgV0FCIGRlcGxveW1lbnQiLz4KICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjEwIi8+CiAKICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04MSwxMCArODEsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvb3NnaS1jZGkvc2ltcGxlLXdhYi13aXRoLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9UZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL29zZ2ktY2RpL3NpbXBsZS13YWItd2l0aC1jZGkvc2VydmxldC90ZXN0cy9jZGkvVGVzdEJlYW4uamF2YQppbmRleCBmYWQ2ODk2Li45YmNjODRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvb3NnaS1jZGkvc2ltcGxlLXdhYi13aXRoLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9vc2dpLWNkaS9zaW1wbGUtd2FiLXdpdGgtY2RpL3NlcnZsZXQvdGVzdHMvY2RpL1Rlc3RCZWFuLmphdmEKQEAgLTE2LDcgKzE2LDcgQEAKIAogcGFja2FnZSB0ZXN0cy5jZGk7CiAKLS8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLiAKKy8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLgogLy9UaGlzIGJlYW4gaW1wbGVtZW50cyBTZXJpYWxpemFibGUgYXMgaXQgbmVlZHMgdG8gYmUgcGxhY2VkIGludG8gYSBTdGF0ZWZ1bCBCZWFuCiBwdWJsaWMgY2xhc3MgVGVzdEJlYW4KIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvb3NnaS1jZGkvc2ltcGxlLXdhYi13aXRoLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL29zZ2ktY2RpL3NpbXBsZS13YWItd2l0aC1jZGkvc2VydmxldC90ZXN0cy9jZGkvVGVzdFNlcnZsZXQuamF2YQppbmRleCAxNzdmODMwLi42ZDU1MjdkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvb3NnaS1jZGkvc2ltcGxlLXdhYi13aXRoLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9vc2dpLWNkaS9zaW1wbGUtd2FiLXdpdGgtY2RpL3NlcnZsZXQvdGVzdHMvY2RpL1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgIG1zZyArPSAiQmVhbk1hbmFnZXIgSW5qZWN0aW9uIHZpYSBjb21wb25lbnQgZW52aXJvbm1lbnQgbG9va3VwIGZhaWxlZCI7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGJtMSA9PSBudWxsKSBtc2cgKz0gIkJlYW5NYW5hZ2VyIEluamVjdGlvbiB2aWEgY29tcG9uZW50IGVudmlyb25tZW50IGxvb2t1cCBmYWlsZWQiOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlYW5NYW5hZ2VyIGlzICIgKyBibSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVhbk1hbmFnZXIgdmlhIGxvb2t1cCBpcyAiICsgYm0xKTsKICAgICAgICAgd3JpdGVyLndyaXRlKG1zZyArICJcbiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9tLnhtbAppbmRleCA3NmU5Nzk4Li45ZjE5MWU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9tLnhtbApAQCAtMjcsNyArMjcsNyBAQAogICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2gubWFpbi50ZXN0czwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD50ZXN0czwvYXJ0aWZhY3RJZD4KICAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgotICAgIDxuYW1lPkdsYXNzRmlzaCBkZXZ0ZXN0cyBjZGk8L25hbWU+ICAKKyAgICA8bmFtZT5HbGFzc0Zpc2ggZGV2dGVzdHMgY2RpPC9uYW1lPgogICAgIDxtb2R1bGVzPgogICAgICAgICA8IS0tIG1vZHVsZT5xdWlja2xvb2s8L21vZHVsZSAtLT4KICAgICA8L21vZHVsZXM+CkBAIC00NCwxOSArNDQsMTkgQEAKICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1hbnRydW4tcGx1Z2luPC9hcnRpZmFjdElkPgogICAgICAgICAgIDx2ZXJzaW9uPjEuODwvdmVyc2lvbj4KICAgICAgICAgICA8ZGVwZW5kZW5jaWVzPgotCSAgICA8ZGVwZW5kZW5jeT4KLQkgICAgICA8Z3JvdXBJZD5jb20uc3VuPC9ncm91cElkPgotCSAgICAgIDxhcnRpZmFjdElkPnRvb2xzPC9hcnRpZmFjdElkPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICA8Z3JvdXBJZD5jb20uc3VuPC9ncm91cElkPgorICAgICAgICAgIDxhcnRpZmFjdElkPnRvb2xzPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgICA8dmVyc2lvbj4xLjguMDwvdmVyc2lvbj4KLQkgICAgICA8c2NvcGU+c3lzdGVtPC9zY29wZT4KLQkgICAgICA8c3lzdGVtUGF0aD4ke2Vudi5KQVZBX0hPTUV9L2xpYi90b29scy5qYXI8L3N5c3RlbVBhdGg+Ci0JICAgPC9kZXBlbmRlbmN5PiAgICAgCisgICAgICAgICAgPHNjb3BlPnN5c3RlbTwvc2NvcGU+CisgICAgICAgICAgPHN5c3RlbVBhdGg+JHtlbnYuSkFWQV9IT01FfS9saWIvdG9vbHMuamFyPC9zeXN0ZW1QYXRoPgorICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgogICAgICAgICAgIDxleGVjdXRpb25zPgogICAgICAgICAgICAgPGV4ZWN1dGlvbj4KICAgICAgICAgICAgICAgPGlkPmlkLnRlc3QuMTwvaWQ+CiAgICAgICAgICAgICAgIDxwaGFzZT50ZXN0PC9waGFzZT4KLSAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICA8dGFyZ2V0IG5hbWU9Im12blVzYWdlIiB1bmxlc3M9InRlc3RNb2RzIj4KICAgICAgICAgICAgICAgICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiB0YXJnZXQ9Im12blVzYWdlIi8+CiAgICAgICAgICAgICAgICAgPC90YXJnZXQ+CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgICAgICA8ZXhlY3V0aW9uPgogICAgICAgICAgICAgICA8aWQ+aWQudGVzdC4yPC9pZD4KICAgICAgICAgICAgICAgPHBoYXNlPnRlc3Q8L3BoYXNlPgotICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgogICAgICAgICAgICAgICAgIDx0YXJnZXQgbmFtZT0iYW50VGVzdHMiIGlmPSJ0ZXN0TW9kcyI+CiAgICAgICAgICAgICAgICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgdGFyZ2V0PSJhbnRUZXN0cyIvPgogICAgICAgICAgICAgICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1pbnRlcmZhY2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4taW50ZXJmYWNlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjY5NzVkMS4uODFhMDU2NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1pbnRlcmZhY2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLWludGVyZmFjZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWJlYW4taW50ZXJmYWNlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLWludGVyZmFjZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLWludGVyZmFjZS9idWlsZC54bWwKaW5kZXggODg5NDY4OC4uMjU1NjUzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1pbnRlcmZhY2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4taW50ZXJmYWNlL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDI0ICs0OCwyNCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgotICAgICAgICAJPHBhcmFtIG5hbWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIgdmFsdWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIgdmFsdWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc3LDEwICs3NywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4taW50ZXJmYWNlL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLWludGVyZmFjZS9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IDZlYjMxZTQuLmJjZjhhZWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4taW50ZXJmYWNlL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1pbnRlcmZhY2UvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBwb3J0YWJsZSBleHRlbnNpb25zIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDksNyArNDksNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTksNyArNTksNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtOTgsMTAgKzk4LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLWludGVyZmFjZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1pbnRlcmZhY2Uvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQppbmRleCBjOGNkNzY3Li42MDU5OGU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLWludGVyZmFjZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4taW50ZXJmYWNlL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKQEAgLTI5LDIzICsyOSwyMyBAQAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKICAgICBwdWJsaWMgc3RhdGljIGludCBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgPSAwOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGVycm9yTWVzc2FnZSA9ICIiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3REZXBlbmRlbnRCZWFuIHRiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IoTXlFeHRlbnNpb24gbXlleCl7IC8vSW5qZWN0aW9uIG9mIHBvcnRhYmxlIGV4dGVuc2lvbiBpbiBhIGJlYW4KICAgICAgICAgaWYobXlleCA9PSBudWxsKSB7CiAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gIlBvcnRhYmxlIEV4dGVuc2lvbiBJbmplY3Rpb24gaW4gSW50ZXJjZXB0b3IgZmFpbGVkIjsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgbWFuYWdlVHJhbnNhY3Rpb24oSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUcmFuc2FjdGlvbkludGVyY2VwdG9yOjpBcm91bmRJbnZva2UiKTsKICAgICAgICAgaWYgKHRiID09IG51bGwpIGVycm9yTWVzc2FnZSArPSAiRGVwZW5kZW5jeSBJbmplY3Rpb24gIiArCi0gICAgICAgIAkJImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOworICAgICAgICAgICAgICAgICJpbnRvIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgZmFpbGVkIjsKICAgICAgICAgYXJvdW5kSW52b2tlQ2FsbGVkID0gdHJ1ZTsKICAgICAgICAgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ICsrOwogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4taW50ZXJmYWNlL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLWludGVyZmFjZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCmluZGV4IDk4Zjg1ZDQuLjhiZDk4Y2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4taW50ZXJmYWNlL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1pbnRlcmZhY2Uvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YQpAQCAtMzEsNSArMzEsNSBAQAogQEludGVyY2VwdG9yQmluZGluZwogcHVibGljIEBpbnRlcmZhY2UgVHJhbnNhY3Rpb25hbCB7CiAKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1pbnRlcmZhY2Uvc2VydmxldC90ZXN0L2V4dGVuc2lvbi9NeUV4dGVuc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1pbnRlcmZhY2Uvc2VydmxldC90ZXN0L2V4dGVuc2lvbi9NeUV4dGVuc2lvbi5qYXZhCmluZGV4IDY3NzM3YTkuLmZhZjM5YjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4taW50ZXJmYWNlL3NlcnZsZXQvdGVzdC9leHRlbnNpb24vTXlFeHRlbnNpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLWludGVyZmFjZS9zZXJ2bGV0L3Rlc3QvZXh0ZW5zaW9uL015RXh0ZW5zaW9uLmphdmEKQEAgLTI5LDEyICsyOSwxMiBAQAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBiZWZvcmVCZWFuRGlzY292ZXJ5Q2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFmdGVyQmVhbkRpc2NvdmVyeUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBwcm9jZXNzQW5ub3RhdGVkVHlwZUNhbGxlZCA9IGZhbHNlOwotICAgIAorCiAgICAgdm9pZCBiZWZvcmVCZWFuRGlzY292ZXJ5KEBPYnNlcnZlcyBCZWZvcmVCZWFuRGlzY292ZXJ5IGJkZCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXlFeHRlbnNpb246OmJlZm9yZUJlYW5EaXNjb3ZlcnkiICsgYmRkKTsKICAgICAgICAgYmVmb3JlQmVhbkRpc2NvdmVyeUNhbGxlZCA9IHRydWU7CiAgICAgfQotICAgIAorCiAgICAgPFQ+IHZvaWQgcHJvY2Vzc0Fubm90YXRlZFR5cGUoQE9ic2VydmVzIFByb2Nlc3NBbm5vdGF0ZWRUeXBlPFQ+IHBhdCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXlFeHRlbnNpb246UHJvY2VzcyBhbm5vdGF0ZWQgdHlwZSIgKyBwYXQuZ2V0QW5ub3RhdGVkVHlwZSgpLmdldEJhc2VUeXBlKCkpOwogICAgICAgICBwcm9jZXNzQW5ub3RhdGVkVHlwZUNhbGxlZCA9IHRydWU7CkBAIC00NSwxMCArNDUsMTAgQEAKICAgICAgICAgICAgIHBhdC52ZXRvKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICB2b2lkIGFmdGVyQmVhbkRpc2NvdmVyeShAT2JzZXJ2ZXMgQWZ0ZXJCZWFuRGlzY292ZXJ5IGFiZCwgQmVhbk1hbmFnZXIgYm0pewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15RXh0ZW5zaW9uOiBhYmQ6ICIgKyBhYmQgKyAiIEJlYW5NYW5hZ2VyOiAiICsgYm0pOwotICAgICAgICAKKwogICAgICAgICBpZiAoYm0gIT0gbnVsbCkgewogICAgICAgICAgICAgLy9lbnN1cmUgYSB2YWxpZCBCZWFuTWFuYWdlciBpcyBpbmplY3RlZAogICAgICAgICAgICAgYWZ0ZXJCZWFuRGlzY292ZXJ5Q2FsbGVkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4tbWFuYWdlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1tYW5hZ2VyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZmYwNWRiMC4uMGE5NjMzZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1tYW5hZ2VyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1tYW5hZ2VyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tYmVhbi1tYW5hZ2VyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLW1hbmFnZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1tYW5hZ2VyL2J1aWxkLnhtbAppbmRleCA4ODk0Njg4Li4yNTU2NTMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLW1hbmFnZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4tbWFuYWdlci9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwyNCArNDgsMjQgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KLSAgICAgICAgCTxwYXJhbSBuYW1lPSJjZGktZXh0ZW5zaW9uLnNlcnZpY2UiIHZhbHVlPSJjZGktZXh0ZW5zaW9uLnNlcnZpY2UiLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjZGktZXh0ZW5zaW9uLnNlcnZpY2UiIHZhbHVlPSJjZGktZXh0ZW5zaW9uLnNlcnZpY2UiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NywxMCArNzcsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLW1hbmFnZXIvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4tbWFuYWdlci9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IDgzY2Q0YWIuLjk3YWQxOTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4tbWFuYWdlci9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4tbWFuYWdlci9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHBvcnRhYmxlIGV4dGVuc2lvbnMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00OSw3ICs0OSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC05OCwxMCArOTgsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4tbWFuYWdlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1tYW5hZ2VyL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKaW5kZXggYzhjZDc2Ny4uNjA1OThlNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1tYW5hZ2VyL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1tYW5hZ2VyL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKQEAgLTI5LDIzICsyOSwyMyBAQAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKICAgICBwdWJsaWMgc3RhdGljIGludCBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgPSAwOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGVycm9yTWVzc2FnZSA9ICIiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3REZXBlbmRlbnRCZWFuIHRiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IoTXlFeHRlbnNpb24gbXlleCl7IC8vSW5qZWN0aW9uIG9mIHBvcnRhYmxlIGV4dGVuc2lvbiBpbiBhIGJlYW4KICAgICAgICAgaWYobXlleCA9PSBudWxsKSB7CiAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gIlBvcnRhYmxlIEV4dGVuc2lvbiBJbmplY3Rpb24gaW4gSW50ZXJjZXB0b3IgZmFpbGVkIjsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgbWFuYWdlVHJhbnNhY3Rpb24oSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUcmFuc2FjdGlvbkludGVyY2VwdG9yOjpBcm91bmRJbnZva2UiKTsKICAgICAgICAgaWYgKHRiID09IG51bGwpIGVycm9yTWVzc2FnZSArPSAiRGVwZW5kZW5jeSBJbmplY3Rpb24gIiArCi0gICAgICAgIAkJImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOworICAgICAgICAgICAgICAgICJpbnRvIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgZmFpbGVkIjsKICAgICAgICAgYXJvdW5kSW52b2tlQ2FsbGVkID0gdHJ1ZTsKICAgICAgICAgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ICsrOwogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4tbWFuYWdlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1tYW5hZ2VyL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKaW5kZXggOThmODVkNC4uOGJkOThjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1tYW5hZ2VyL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1tYW5hZ2VyL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKQEAgLTMxLDUgKzMxLDUgQEAKIEBJbnRlcmNlcHRvckJpbmRpbmcKIHB1YmxpYyBAaW50ZXJmYWNlIFRyYW5zYWN0aW9uYWwgewogCi0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4tbWFuYWdlci9zZXJ2bGV0L3Rlc3QvZXh0ZW5zaW9uL015RXh0ZW5zaW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLW1hbmFnZXIvc2VydmxldC90ZXN0L2V4dGVuc2lvbi9NeUV4dGVuc2lvbi5qYXZhCmluZGV4IDY3NzM3YTkuLmZhZjM5YjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4tbWFuYWdlci9zZXJ2bGV0L3Rlc3QvZXh0ZW5zaW9uL015RXh0ZW5zaW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1tYW5hZ2VyL3NlcnZsZXQvdGVzdC9leHRlbnNpb24vTXlFeHRlbnNpb24uamF2YQpAQCAtMjksMTIgKzI5LDEyIEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGJlZm9yZUJlYW5EaXNjb3ZlcnlDYWxsZWQgPSBmYWxzZTsKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYWZ0ZXJCZWFuRGlzY292ZXJ5Q2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIHByb2Nlc3NBbm5vdGF0ZWRUeXBlQ2FsbGVkID0gZmFsc2U7Ci0gICAgCisKICAgICB2b2lkIGJlZm9yZUJlYW5EaXNjb3ZlcnkoQE9ic2VydmVzIEJlZm9yZUJlYW5EaXNjb3ZlcnkgYmRkKXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeUV4dGVuc2lvbjo6YmVmb3JlQmVhbkRpc2NvdmVyeSIgKyBiZGQpOwogICAgICAgICBiZWZvcmVCZWFuRGlzY292ZXJ5Q2FsbGVkID0gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICA8VD4gdm9pZCBwcm9jZXNzQW5ub3RhdGVkVHlwZShAT2JzZXJ2ZXMgUHJvY2Vzc0Fubm90YXRlZFR5cGU8VD4gcGF0KXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeUV4dGVuc2lvbjpQcm9jZXNzIGFubm90YXRlZCB0eXBlIiArIHBhdC5nZXRBbm5vdGF0ZWRUeXBlKCkuZ2V0QmFzZVR5cGUoKSk7CiAgICAgICAgIHByb2Nlc3NBbm5vdGF0ZWRUeXBlQ2FsbGVkID0gdHJ1ZTsKQEAgLTQ1LDEwICs0NSwxMCBAQAogICAgICAgICAgICAgcGF0LnZldG8oKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHZvaWQgYWZ0ZXJCZWFuRGlzY292ZXJ5KEBPYnNlcnZlcyBBZnRlckJlYW5EaXNjb3ZlcnkgYWJkLCBCZWFuTWFuYWdlciBibSl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXlFeHRlbnNpb246IGFiZDogIiArIGFiZCArICIgQmVhbk1hbmFnZXI6ICIgKyBibSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChibSAhPSBudWxsKSB7CiAgICAgICAgICAgICAvL2Vuc3VyZSBhIHZhbGlkIEJlYW5NYW5hZ2VyIGlzIGluamVjdGVkCiAgICAgICAgICAgICBhZnRlckJlYW5EaXNjb3ZlcnlDYWxsZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1tYW5hZ2VyL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1BvcnRhYmxlRXh0ZW5zaW9uQmVhbk1hbmFnZXJUZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1tYW5hZ2VyL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1BvcnRhYmxlRXh0ZW5zaW9uQmVhbk1hbmFnZXJUZXN0U2VydmxldC5qYXZhCmluZGV4IDU4NjFmZmIuLjA4YzViYmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4tbWFuYWdlci9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Qb3J0YWJsZUV4dGVuc2lvbkJlYW5NYW5hZ2VyVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLW1hbmFnZXIvc2VydmxldC90ZXN0L3NlcnZsZXQvUG9ydGFibGVFeHRlbnNpb25CZWFuTWFuYWdlclRlc3RTZXJ2bGV0LmphdmEKQEAgLTQ2LDEwICs0NiwxMCBAQAogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgVGVzdEJlYW4gdGI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgQmVhbk1hbmFnZXIgYm07Ci0gICAgCisKICAgICBTdHJpbmcgbXNnID0gIiI7CiAKIApAQCAtNzMsMzQgKzczLDM0IEBACiAgICAgICAgICAgICAgICAgICAgICsgVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQ7CiAgICAgICAgIGlmICghVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2UudHJpbSgpLmVxdWFscygiIikpCiAgICAgICAgICAgICBtc2cgKz0gVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2U7Ci0gICAgICAgIAorCiAgICAgICAgIC8vY2hlY2sgaWYgb3VyIHBvcnRhYmxlIGV4dGVuc2lvbiB3YXMgY2FsbGVkCiAgICAgICAgIGlmICghTXlFeHRlbnNpb24uYmVmb3JlQmVhbkRpc2NvdmVyeUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiUG9ydGFibGUgRXh0ZW5zaW9uIGxpZmVjeWNsZSBvYnNlcnZlciBtZXRob2Q6ICIgKwotICAgICAgICAgICAgCQkiYmVmb3JlQmVhbkRpc2NvdmVyeSBub3QgY2FsbGVkIjsKKyAgICAgICAgICAgICAgICAgICAgImJlZm9yZUJlYW5EaXNjb3Zlcnkgbm90IGNhbGxlZCI7CiAKICAgICAgICAgaWYgKCFNeUV4dGVuc2lvbi5hZnRlckJlYW5EaXNjb3ZlcnlDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlBvcnRhYmxlIEV4dGVuc2lvbiBsaWZlY3ljbGUgb2JzZXJ2ZXIgbWV0aG9kOiAiICsKLSAgICAgICAgICAgIAkJImFmdGVyQmVhbkRpc2NvdmVyeSBub3QgY2FsbGVkIG9yIGluamVjdGlvbiBvZiBCZWFuTWFuYWdlciAiICsKLSAgICAgICAgICAgIAkJImluIGFuIG9ic2VydmVyIG1ldGhvZCBmYWlsZWQiOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgImFmdGVyQmVhbkRpc2NvdmVyeSBub3QgY2FsbGVkIG9yIGluamVjdGlvbiBvZiBCZWFuTWFuYWdlciAiICsKKyAgICAgICAgICAgICAgICAgICAgImluIGFuIG9ic2VydmVyIG1ldGhvZCBmYWlsZWQiOworCiAgICAgICAgIGlmICghTXlFeHRlbnNpb24ucHJvY2Vzc0Fubm90YXRlZFR5cGVDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlBvcnRhYmxlIEV4dGVuc2lvbiBsaWZlY3ljbGUgb2JzZXJ2ZXIgbWV0aG9kOiBwcm9jZXNzICIgKwotICAgICAgICAgICAgCQkiYW5ub3RhdGVkIHR5cGUgbm90IGNhbGxlZCI7CisgICAgICAgICAgICAgICAgICAgICJhbm5vdGF0ZWQgdHlwZSBub3QgY2FsbGVkIjsKIAogICAgICAgICAvL0JlYW5NYW5hZ2VyIGxvb2t1cAogICAgICAgICBpZiAoYm0gPT0gbnVsbCkKICAgICAgICAgICAgIG1zZyArPSAiSW5qZWN0aW9uIG9mIEJlYW5NYW5hZ2VyIGludG8gc2VydmxldCBmYWlsZWQiOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQmVhbk1hbmFnZXIgYm0xID0gKEJlYW5NYW5hZ2VyKSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiamF2YTpjb21wL0JlYW5NYW5hZ2VyIik7Ci0gICAgICAgICAgICBpZiAoYm0xID09IG51bGwpIAorICAgICAgICAgICAgaWYgKGJtMSA9PSBudWxsKQogICAgICAgICAgICAgICAgIG1zZyArPSAibG9va3VwIG9mIEJlYW5NYW5hZ2VyIHZpYSBjb21wb25lbnQgY29udGV4dCBmYWlsZWQiOwogICAgICAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIG1zZyArPSAiTmFtaW5nRXhjZXB0aW9uIGR1cmluZyBsb29rdXAgb2YgQmVhbk1hbmFnZXIgdmlhIGNvbXBvbmVudCBjb250ZXh0IjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvL1VzaW5nIEJlYW5NYW5hZ2VyCiAgICAgICAgIGNoZWNrKChibS5nZXRCZWFucygidGVzdF9uYW1lZF9iZWFuIikuc2l6ZSgpID09IDEpLCAiSW52YWxpZCBudW1iZXIgb2YgTmFtZWQgQmVhbnMiKTsKICAgICAgICAgY2hlY2soKGJtLmdldEJlYW5zKCJkdXBsaWNhdGVfdGVzdF9iZWFuIikuc2l6ZSgpID09IDApLCAiSW52YWxpZCBudW1iZXIgb2YgRHVwbGljYXRlIFRlc3QgQmVhbnMiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2J1aWxkLnhtbAppbmRleCA3ODM2OGFiLi5hMzRiNWFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYnVpbGQueG1sCkBAIC04OCwxNSArODgsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPiBVc2FnZToKLQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBwb3J0YWJsZS1leHRlbnNpb25zIHRlc3RzKQotCQlhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIHBvcnRhYmxlLWV4dGVuc2lvbnMgdGVzdHMpCi0JCWFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgcG9ydGFibGUtZXh0ZW5zaW9ucyB0ZXN0cykKLQkJYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIHBvcnRhYmxlLWV4dGVuc2lvbnMgdGVzdHMpCi0JCWFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBwb3J0YWJsZS1leHRlbnNpb25zIGFwcHMpCi0JCWFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgcG9ydGFibGUtZXh0ZW5zaW9ucyB0ZXN0cykKLQkJYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgcG9ydGFibGUtZXh0ZW5zaW9ucyBhcHBzKQotCQlhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIHBvcnRhYmxlLWV4dGVuc2lvbnMgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPiBVc2FnZToKKyAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBwb3J0YWJsZS1leHRlbnNpb25zIHRlc3RzKQorICAgICAgICBhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIHBvcnRhYmxlLWV4dGVuc2lvbnMgdGVzdHMpCisgICAgICAgIGFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgcG9ydGFibGUtZXh0ZW5zaW9ucyB0ZXN0cykKKyAgICAgICAgYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIHBvcnRhYmxlLWV4dGVuc2lvbnMgdGVzdHMpCisgICAgICAgIGFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBwb3J0YWJsZS1leHRlbnNpb25zIGFwcHMpCisgICAgICAgIGFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgcG9ydGFibGUtZXh0ZW5zaW9ucyB0ZXN0cykKKyAgICAgICAgYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgcG9ydGFibGUtZXh0ZW5zaW9ucyBhcHBzKQorICAgICAgICBhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIHBvcnRhYmxlLWV4dGVuc2lvbnMgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDc0YjE1ZTEuLjY2YWIzM2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2luamVjdGlvbi10YXJnZXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9pbmplY3Rpb24tdGFyZ2V0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0taW5qZWN0aW9uLXRhcmdldCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9pbmplY3Rpb24tdGFyZ2V0L2J1aWxkLnhtbAppbmRleCA4ODk0Njg4Li4yNTU2NTMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9pbmplY3Rpb24tdGFyZ2V0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9pbmplY3Rpb24tdGFyZ2V0L2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDI0ICs0OCwyNCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgotICAgICAgICAJPHBhcmFtIG5hbWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIgdmFsdWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIgdmFsdWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc3LDEwICs3NywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2luamVjdGlvbi10YXJnZXQvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2luamVjdGlvbi10YXJnZXQvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCA5YjAxZTA5Li4zY2Q4ZTkyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9pbmplY3Rpb24tdGFyZ2V0L2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHBvcnRhYmxlIGV4dGVuc2lvbnMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00OSw3ICs0OSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC05OCwxMCArOTgsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2luamVjdGlvbi10YXJnZXQvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2luamVjdGlvbi10YXJnZXQvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQppbmRleCBjOGNkNzY3Li42MDU5OGU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9pbmplY3Rpb24tdGFyZ2V0L3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCkBAIC0yOSwyMyArMjksMjMgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0RGVwZW5kZW50QmVhbiB0YjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUcmFuc2FjdGlvbkludGVyY2VwdG9yKE15RXh0ZW5zaW9uIG15ZXgpeyAvL0luamVjdGlvbiBvZiBwb3J0YWJsZSBleHRlbnNpb24gaW4gYSBiZWFuCiAgICAgICAgIGlmKG15ZXggPT0gbnVsbCkgewogICAgICAgICAgICAgZXJyb3JNZXNzYWdlICs9ICJQb3J0YWJsZSBFeHRlbnNpb24gSW5qZWN0aW9uIGluIEludGVyY2VwdG9yIGZhaWxlZCI7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IG1hbmFnZVRyYW5zYWN0aW9uKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVHJhbnNhY3Rpb25JbnRlcmNlcHRvcjo6QXJvdW5kSW52b2tlIik7CiAgICAgICAgIGlmICh0YiA9PSBudWxsKSBlcnJvck1lc3NhZ2UgKz0gIkRlcGVuZGVuY3kgSW5qZWN0aW9uICIgKwotICAgICAgICAJCSJpbnRvIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgZmFpbGVkIjsKKyAgICAgICAgICAgICAgICAiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CiAgICAgICAgIGFyb3VuZEludm9rZUNhbGxlZCA9IHRydWU7CiAgICAgICAgIGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCArKzsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9pbmplY3Rpb24tdGFyZ2V0L3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9pbmplY3Rpb24tdGFyZ2V0L3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKaW5kZXggOThmODVkNC4uOGJkOThjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2luamVjdGlvbi10YXJnZXQvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YQpAQCAtMzEsNSArMzEsNSBAQAogQEludGVyY2VwdG9yQmluZGluZwogcHVibGljIEBpbnRlcmZhY2UgVHJhbnNhY3Rpb25hbCB7CiAKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9zZXJ2bGV0L3Rlc3QvZXh0ZW5zaW9uL015RXh0ZW5zaW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9pbmplY3Rpb24tdGFyZ2V0L3NlcnZsZXQvdGVzdC9leHRlbnNpb24vTXlFeHRlbnNpb24uamF2YQppbmRleCA2NzczN2E5Li5mYWYzOWIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9pbmplY3Rpb24tdGFyZ2V0L3NlcnZsZXQvdGVzdC9leHRlbnNpb24vTXlFeHRlbnNpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9pbmplY3Rpb24tdGFyZ2V0L3NlcnZsZXQvdGVzdC9leHRlbnNpb24vTXlFeHRlbnNpb24uamF2YQpAQCAtMjksMTIgKzI5LDEyIEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGJlZm9yZUJlYW5EaXNjb3ZlcnlDYWxsZWQgPSBmYWxzZTsKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYWZ0ZXJCZWFuRGlzY292ZXJ5Q2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIHByb2Nlc3NBbm5vdGF0ZWRUeXBlQ2FsbGVkID0gZmFsc2U7Ci0gICAgCisKICAgICB2b2lkIGJlZm9yZUJlYW5EaXNjb3ZlcnkoQE9ic2VydmVzIEJlZm9yZUJlYW5EaXNjb3ZlcnkgYmRkKXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeUV4dGVuc2lvbjo6YmVmb3JlQmVhbkRpc2NvdmVyeSIgKyBiZGQpOwogICAgICAgICBiZWZvcmVCZWFuRGlzY292ZXJ5Q2FsbGVkID0gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICA8VD4gdm9pZCBwcm9jZXNzQW5ub3RhdGVkVHlwZShAT2JzZXJ2ZXMgUHJvY2Vzc0Fubm90YXRlZFR5cGU8VD4gcGF0KXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeUV4dGVuc2lvbjpQcm9jZXNzIGFubm90YXRlZCB0eXBlIiArIHBhdC5nZXRBbm5vdGF0ZWRUeXBlKCkuZ2V0QmFzZVR5cGUoKSk7CiAgICAgICAgIHByb2Nlc3NBbm5vdGF0ZWRUeXBlQ2FsbGVkID0gdHJ1ZTsKQEAgLTQ1LDEwICs0NSwxMCBAQAogICAgICAgICAgICAgcGF0LnZldG8oKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHZvaWQgYWZ0ZXJCZWFuRGlzY292ZXJ5KEBPYnNlcnZlcyBBZnRlckJlYW5EaXNjb3ZlcnkgYWJkLCBCZWFuTWFuYWdlciBibSl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXlFeHRlbnNpb246IGFiZDogIiArIGFiZCArICIgQmVhbk1hbmFnZXI6ICIgKyBibSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChibSAhPSBudWxsKSB7CiAgICAgICAgICAgICAvL2Vuc3VyZSBhIHZhbGlkIEJlYW5NYW5hZ2VyIGlzIGluamVjdGVkCiAgICAgICAgICAgICBhZnRlckJlYW5EaXNjb3ZlcnlDYWxsZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9zZXJ2bGV0L3Rlc3QvZnJhbWV3b3JrL1Rlc3RGcmFtZXdvcmtDbGFzc1dpdGhDb25zdHJ1Y3RvckluamVjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9zZXJ2bGV0L3Rlc3QvZnJhbWV3b3JrL1Rlc3RGcmFtZXdvcmtDbGFzc1dpdGhDb25zdHJ1Y3RvckluamVjdGlvbi5qYXZhCmluZGV4IDY2OGRiMDQuLjIzMWI0MzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2luamVjdGlvbi10YXJnZXQvc2VydmxldC90ZXN0L2ZyYW1ld29yay9UZXN0RnJhbWV3b3JrQ2xhc3NXaXRoQ29uc3RydWN0b3JJbmplY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9pbmplY3Rpb24tdGFyZ2V0L3NlcnZsZXQvdGVzdC9mcmFtZXdvcmsvVGVzdEZyYW1ld29ya0NsYXNzV2l0aENvbnN0cnVjdG9ySW5qZWN0aW9uLmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICBASW5qZWN0CiAgICAgcHVibGljIFRlc3RGcmFtZXdvcmtDbGFzc1dpdGhDb25zdHJ1Y3RvckluamVjdGlvbihAUHJlZmVycmVkIFRlc3RCZWFuIHRiKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29uc3RydWN0b3IgYmFzZWQgaW5qZWN0aW9uICIgKwotICAgICAgICAJCSJpbnRvIGEgZnJhbWV3b3JrIGNsYXNzIiArIHRiKTsKKyAgICAgICAgICAgICAgICAiaW50byBhIGZyYW1ld29yayBjbGFzcyIgKyB0Yik7CiAgICAgICAgIHRoaXMudGIgPSB0YjsKICAgICAgICAgaWYgKHRiID09IG51bGwpIHsKICAgICAgICAgICAgIG1zZyArPSAiQ29uc3RydWN0b3IgaW5qZWN0aW9uIGluIGEgdGVzdCBmcmFtZXdvcmsgY2xhc3MgZmFpbGVkIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2luamVjdGlvbi10YXJnZXQvc2VydmxldC90ZXN0L2ZyYW1ld29yay9UZXN0RnJhbWV3b3JrQ2xhc3NXaXRoU2V0dGVyQW5kRmllbGRJbmplY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2luamVjdGlvbi10YXJnZXQvc2VydmxldC90ZXN0L2ZyYW1ld29yay9UZXN0RnJhbWV3b3JrQ2xhc3NXaXRoU2V0dGVyQW5kRmllbGRJbmplY3Rpb24uamF2YQppbmRleCA2ZTgxZTBlLi41YzY2NjEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9pbmplY3Rpb24tdGFyZ2V0L3NlcnZsZXQvdGVzdC9mcmFtZXdvcmsvVGVzdEZyYW1ld29ya0NsYXNzV2l0aFNldHRlckFuZEZpZWxkSW5qZWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9zZXJ2bGV0L3Rlc3QvZnJhbWV3b3JrL1Rlc3RGcmFtZXdvcmtDbGFzc1dpdGhTZXR0ZXJBbmRGaWVsZEluamVjdGlvbi5qYXZhCkBAIC0yNSwxMSArMjUsMTEgQEAKIAogCiBwdWJsaWMgY2xhc3MgVGVzdEZyYW1ld29ya0NsYXNzV2l0aFNldHRlckFuZEZpZWxkSW5qZWN0aW9uIHsKLSAgICAKKwogICAgIEBJbmplY3QgVGVzdE5hbWVkQmVhbiB0bmI7CiAKICAgICBwcml2YXRlIFRlc3RCZWFuIHRiOwotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgbXNnID0gIiI7CiAKICAgICBwcml2YXRlIGJvb2xlYW4gcG9zdENvbnN0cnVjdENhbGxlZCA9IGZhbHNlOwpAQCAtNDIsOCArNDIsOCBAQAogICAgIHB1YmxpYyBUZXN0RnJhbWV3b3JrQ2xhc3NXaXRoU2V0dGVyQW5kRmllbGRJbmplY3Rpb24oU3RyaW5nIG1hZ2ljS2V5KXsKICAgICAgICAgaWYoIW1hZ2ljS2V5LmVxdWFscygidGVzdCIpKSB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgQEluamVjdAogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RCZWFuKEBQcmVmZXJyZWQgVGVzdEJlYW4gdGIpewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNldHRlciBiYXNlZCBpbmplY3Rpb24gIiArCkBAIC01Miw5ICs1Miw5IEBACiAgICAgICAgIGlmICh0YiA9PSBudWxsKSB7CiAgICAgICAgICAgICBtc2cgKz0gIkNvbnN0cnVjdG9yIGluamVjdGlvbiBpbiBhIHRlc3QgZnJhbWV3b3JrIGNsYXNzIGZhaWxlZCI7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBiZWFuUG9zdENvbnN0cnVjdCgpIHsKICAgICAgICAgdGhpcy5wb3N0Q29uc3RydWN0Q2FsbGVkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2luamVjdGlvbi10YXJnZXQvc2VydmxldC90ZXN0L3NlcnZsZXQvUG9ydGFibGVFeHRlbnNpb25JbmplY3Rpb25UYXJnZXRUZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Qb3J0YWJsZUV4dGVuc2lvbkluamVjdGlvblRhcmdldFRlc3RTZXJ2bGV0LmphdmEKaW5kZXggMDVjNDgxYy4uMDZjZDFhMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Qb3J0YWJsZUV4dGVuc2lvbkluamVjdGlvblRhcmdldFRlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Qb3J0YWJsZUV4dGVuc2lvbkluamVjdGlvblRhcmdldFRlc3RTZXJ2bGV0LmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogQFdlYlNlcnZsZXQobmFtZSA9ICJteXRlc3QiLCB1cmxQYXR0ZXJucyA9IHsgIi9teXVybCIgfSkKIHB1YmxpYyBjbGFzcyBQb3J0YWJsZUV4dGVuc2lvbkluamVjdGlvblRhcmdldFRlc3RTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewotICAgIAorCiAgICAgQEluamVjdAogICAgIEBQcmVmZXJyZWQKICAgICBUZXN0QmVhbiB0YjsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgdGIubTEoKTsKICAgICAgICAgaWYgKCFUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiQnVzaW5lc3MgbWV0aG9kIGludGVyY2VwdG9yIGFyb3VuZEludm9rZSBub3QgY2FsbGVkIjsKLSAgICAgICAgCisKICAgICAgICAgdGIubTIoKTsKICAgICAgICAgaWYgKFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ICE9IDIpCiAgICAgICAgICAgICBtc2cgKz0gIkJ1c2luZXNzIG1ldGhvZCBpbnRlcmNlcHRvciBpbnZvY2F0aW9uIG9uIG1ldGhvZC1sZXZlbCAiICsgImludGVyY2VwdG9yIGFubm90YXRpb24gY291bnQgbm90IGV4cGVjdGVkLiAiICsgImV4cGVjdGVkID0yLCBhY3R1YWw9IgpAQCAtODksMTIgKzg5LDEyIEBACiAgICAgICAgICAgICBtc2cgKz0gIkluamVjdGlvbiBvZiBCZWFuTWFuYWdlciBpbnRvIHNlcnZsZXQgZmFpbGVkIjsKIAogICAgICAgICBBbm5vdGF0ZWRUeXBlPFRlc3RGcmFtZXdvcmtDbGFzc1dpdGhDb25zdHJ1Y3RvckluamVjdGlvbj4gYXRmYyA9IGJtLmNyZWF0ZUFubm90YXRlZFR5cGUoVGVzdEZyYW1ld29ya0NsYXNzV2l0aENvbnN0cnVjdG9ySW5qZWN0aW9uLmNsYXNzKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gRmlyc3Q6IENvbnN0cnVjdG9yIEluamVjdGlvbiBGcmFtZXdvcmsgY2xhc3MKICAgICAgICAgQ3JlYXRpb25hbENvbnRleHQgY3R4ID0gYm0uY3JlYXRlQ3JlYXRpb25hbENvbnRleHQobnVsbCk7CiAgICAgICAgIEluamVjdGlvblRhcmdldDxUZXN0RnJhbWV3b3JrQ2xhc3NXaXRoQ29uc3RydWN0b3JJbmplY3Rpb24+IGl0ID0gYm0uY3JlYXRlSW5qZWN0aW9uVGFyZ2V0KGF0ZmMpOwogICAgICAgICBUZXN0RnJhbWV3b3JrQ2xhc3NXaXRoQ29uc3RydWN0b3JJbmplY3Rpb24gY3Rvckluc3RhbmNlID0gaXQucHJvZHVjZShjdHgpOwotICAgICAgICAKKwogICAgICAgICAvLyBTaW5jZSB0aGlzIGZyYW1ld29yayBjbGFzcyBuZWVkcyB0byBzdXBwb3J0IGNvbnN0cnVjdG9yIGJhc2VkIGluamVjdGlvbgogICAgICAgICAvLyB3ZSBuZWVkIHRvIGFzayB0aGUgQ0RJIHJ1bnRpbWUgdG8gcHJvZHVjZSB0aGUgaW5zdGFuY2UuCiAgICAgICAgIGl0LmluamVjdChjdG9ySW5zdGFuY2UsIGN0eCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvYnVpbGQucHJvcGVydGllcwppbmRleCBhM2ExYjQyLi4wZjFmMzAyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbWFrZS1mcmFtZXdvcmstYmVhbi1hdmFpbGFibGUtZm9yLWluamVjdGlvbi1leHRlbnNpb24taW4tbGliIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9idWlsZC54bWwKaW5kZXggZWJhMTY4Ny4uN2I4MTMyYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL2J1aWxkLnhtbApAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDwhLS0gY29tcGlsZSBhbmQgYnVpbGQgZXh0ZW5zaW9uIGphciAtLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CkBAIC01NSw3ICs1NSw3IEBACiAgICAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc2VydmljZXMvamFrYXJ0YS5lbnRlcnByaXNlLmluamVjdC5zcGkuRXh0ZW5zaW9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHtiZWFucy54bWx9IgotCSAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2JlYW5zLnhtbCIKKyAgICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9iZWFucy54bWwiCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8amFyIGphcmZpbGU9ImxpYi8ke2V4dGVuc2lvbi5qYXJ9IiBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiPgpAQCAtNzYsNyArNzYsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgpAQCAtODUsMTQgKzg1LDE0IEBACiAgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC0xMDQsMTAgKzEwNCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IDM4NGMzODMuLjk5ZTA2YmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBwb3J0YWJsZSBleHRlbnNpb25zIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTQsNyArNTQsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNjQsNyArNjQsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtMTAzLDEwICsxMDMsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL2V4dGVuc2lvbi90ZXN0L2V4dGVuc2lvbi9GcmFtZXdvcmtTZXJ2aWNlRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvZXh0ZW5zaW9uL3Rlc3QvZXh0ZW5zaW9uL0ZyYW1ld29ya1NlcnZpY2VGYWN0b3J5LmphdmEKaW5kZXggNDRlMmY3Zi4uMWQ4NGE3NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvZXh0ZW5zaW9uL3Rlc3QvZXh0ZW5zaW9uL0ZyYW1ld29ya1NlcnZpY2VGYWN0b3J5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvZXh0ZW5zaW9uL3Rlc3QvZXh0ZW5zaW9uL0ZyYW1ld29ya1NlcnZpY2VGYWN0b3J5LmphdmEKQEAgLTI1LDExICsyNSwxMSBAQAogCiAKIC8qKgotICogQSBzaW1wbGUgU2VydmljZSBGYWN0b3J5IGNsYXNzIHRoYXQgcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gb2J0YWluL2dldCAKLSAqIHJlZmVyZW5jZXMgdG8gYSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIChvYnRhaW5lZCBmcm9tIGEgc2VydmljZSByZWdpc3RyeSkgCisgKiBBIHNpbXBsZSBTZXJ2aWNlIEZhY3RvcnkgY2xhc3MgdGhhdCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBvYnRhaW4vZ2V0CisgKiByZWZlcmVuY2VzIHRvIGEgc2VydmljZSBpbXBsZW1lbnRhdGlvbiAob2J0YWluZWQgZnJvbSBhIHNlcnZpY2UgcmVnaXN0cnkpCiAgKiBhbmQgYWxzbyBwcm92aWRlcyBhIG1lY2hhbmlzbSB0byB1bmdldCBvciByZXR1cm4gYSBzZXJ2aWNlIGFmdGVyIGl0cyB1c2FnZQogICogaXMgY29tcGxldGVkLgotICogCisgKgogICogQGF1dGhvciBTaXZha3VtYXIgVGh5YWdhcmFqYW4KICAqLwogcHVibGljIGNsYXNzIEZyYW1ld29ya1NlcnZpY2VGYWN0b3J5IHsKQEAgLTQxLDExICs0MSwxMSBAQAogICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IGdldFNlcnZpY2UoZmluYWwgVHlwZSB0eXBlLCBmaW5hbCBGcmFtZXdvcmtTZXJ2aWNlIGZzKXsKICAgICAgICAgZGVidWcoImdldFNlcnZpY2UgIiArIHR5cGUgKyAiIEZTOiIgKyBmcyk7CiAgICAgICAgIE9iamVjdCBpbnN0YW5jZSA9IGxvb2t1cFNlcnZpY2UodHlwZSwgZnMud2FpdFRpbWVvdXQoKSk7Ci0gICAgICAgIAotICAgICAgICAvL0lmIHRoZSBzZXJ2aWNlIGlzIG1hcmtlZCBhcyBkeW5hbWljLCB3aGVuIGEgbWV0aG9kIGlzIGludm9rZWQgb24gYSAKLSAgICAgICAgLy9hIHNlcnZpY2UgcHJveHksIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIHNlcnZpY2UgCisKKyAgICAgICAgLy9JZiB0aGUgc2VydmljZSBpcyBtYXJrZWQgYXMgZHluYW1pYywgd2hlbiBhIG1ldGhvZCBpcyBpbnZva2VkIG9uIGEKKyAgICAgICAgLy9hIHNlcnZpY2UgcHJveHksIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIHNlcnZpY2UKICAgICAgICAgLy9hbmQgdGhlbiB0aGUgbWV0aG9kIGlzIGludm9rZWQgb24gdGhlIG5ld2x5IG9idGFpbmVkIHNlcnZpY2UuCi0gICAgICAgIC8vVGhpcyBzY2hlbWUgc2hvdWxkIHdvcmsgZm9yIHN0YXRsZXNzIGFuZC9vciBpZGVtcG90ZW50IHNlcnZpY2UgCisgICAgICAgIC8vVGhpcyBzY2hlbWUgc2hvdWxkIHdvcmsgZm9yIHN0YXRsZXNzIGFuZC9vciBpZGVtcG90ZW50IHNlcnZpY2UKICAgICAgICAgLy9pbXBsZW1lbnRhdGlvbnMgdGhhdCBoYXZlIGEgZHluYW1pYyBsaWZlY3ljbGUgdGhhdCBpcyBub3QgbGlua2VkIHRvCiAgICAgICAgIC8vdGhlIHNlcnZpY2UgY29uc3VtZXIgW3NlcnZpY2UgZHluYW1pc21dCiAgICAgICAgIGlmIChmcy5keW5hbWljKCkpIHsKQEAgLTU5LDE0ICs1OSwxNCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH07CiAgICAgICAgICAgICBpbnN0YW5jZSA9ICBQcm94eS5uZXdQcm94eUluc3RhbmNlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IENsYXNzW117KENsYXNzKXR5cGV9LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJveHlJbnZIbmRscik7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQ2xhc3NbXXsoQ2xhc3MpdHlwZX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5SW52SG5kbHIpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAgICAvL05PVEU6aGFyZC1jb2RlZCBzZXJ2aWNlIGluc3RhbnRpYXRpb24gZm9yIHRoaXMgdGVzdCwgCisgICAgLy9OT1RFOmhhcmQtY29kZWQgc2VydmljZSBpbnN0YW50aWF0aW9uIGZvciB0aGlzIHRlc3QsCiAgICAgLy9idXQgaWRlYWxseSBzaG91bGQgZ2V0IHRoZQogICAgIC8vc2VydmljZSBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBmcmFtZXdvcmsncyBzZXJ2aWNlIHJlZ2lzdHJ5CiAgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0IGxvb2t1cFNlcnZpY2UoVHlwZSB0eXBlLCBpbnQgd2FpdFRpbWVvdXQpIHsKQEAgLTkwLDE1ICs5MCwxNSBAQAogICAgIC8qKgogICAgICAqIFVuZ2V0IHRoZSBzZXJ2aWNlCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHVuZ2V0U2VydmljZShPYmplY3Qgc2VydmljZUluc3RhbmNlLCAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgdW5nZXRTZXJ2aWNlKE9iamVjdCBzZXJ2aWNlSW5zdGFuY2UsCiAgICAgICAgICAgICBUeXBlIHR5cGUsIEZyYW1ld29ya1NlcnZpY2UgZnJhbWV3b3JrU2VydmljZSl7CiAgICAgICAgIC8vdW5nZXQgdGhlIHNlcnZpY2UgaW5zdGFuY2UgZnJvbSB0aGUgc2VydmljZSByZWdpc3RyeQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZGVidWcoU3RyaW5nIHN0cmluZykgewogICAgICAgICBpZihERUJVR19FTkFCTEVEKQogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2aWNlRmFjdG9yeTo6ICIgKyBzdHJpbmcpOwogICAgIH0KLSAgICAKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9leHRlbnNpb24vdGVzdC9leHRlbnNpb24vU2VydmljZUZyYW1ld29ya0V4dGVuc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvZXh0ZW5zaW9uL3Rlc3QvZXh0ZW5zaW9uL1NlcnZpY2VGcmFtZXdvcmtFeHRlbnNpb24uamF2YQppbmRleCBlMDA2ZGEzLi4zMTI1ZWQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9leHRlbnNpb24vdGVzdC9leHRlbnNpb24vU2VydmljZUZyYW1ld29ya0V4dGVuc2lvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL2V4dGVuc2lvbi90ZXN0L2V4dGVuc2lvbi9TZXJ2aWNlRnJhbWV3b3JrRXh0ZW5zaW9uLmphdmEKQEAgLTQ2LDggKzQ2LDggQEAKIAogLyoqCiAgKiBBIHBvcnRhYmxlIGV4dGVuc2lvbiB0aGF0IHN1cHBvcnRzIGluamVjdGlvbiBvZiBjdXN0b20gZnJhbWV3b3JrCi0gKiBzZXJ2aWNlcyBpbnRvIEJlYW5zLiAKLSAqIAorICogc2VydmljZXMgaW50byBCZWFucy4KKyAqCiAgKiBAYXV0aG9yIFNpdmFrdW1hciBUaHlhZ2FyYWphbgogICovCiBwdWJsaWMgY2xhc3MgU2VydmljZUZyYW1ld29ya0V4dGVuc2lvbiBpbXBsZW1lbnRzIEV4dGVuc2lvbnsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYWZ0ZXJCZWFuRGlzY292ZXJ5Q2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFmdGVyUHJvY2Vzc0JlYW5DYWxsZWQgPSBmYWxzZTsKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcHJvY2Vzc0Fubm90YXRlZFR5cGVDYWxsZWQgPSBmYWxzZTsKLSAgICAKKwogICAgIC8qCiAgICAgICogQSBtYXAgb2YgRnJhbWV3b3JrIFNlcnZpY2UgVHlwZXMgdG8gYmUgaW5qZWN0ZWQgYW5kIGFkZGl0aW9uYWwgbWV0YWRhdGEKICAgICAgKiBhYm91dCB0aGUgRnJhbWV3b3JrU2VydmljZSB0byBiZSBpbmplY3RlZC4KQEAgLTc2LDI3ICs3NiwyNyBAQAogICAgICAgICBkZWJ1ZygiUHJvY2VzcyBhbm5vdGF0ZWQgdHlwZSIgKyBwYXQuZ2V0QW5ub3RhdGVkVHlwZSgpLmdldEJhc2VUeXBlKCkpOwogICAgICAgICBwcm9jZXNzQW5ub3RhdGVkVHlwZUNhbGxlZCA9IHRydWU7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogT2JzZXJ2ZXIgZm9yIDxjb2RlPlByb2Nlc3NJbmplY3Rpb25UYXJnZXQ8L2NvZGU+IGV2ZW50cy4gVGhpcyBldmVudCBpcwotICAgICAqIGZpcmVkIGZvciBldmVyeSBKYXZhIEVFIGNvbXBvbmVudCBjbGFzcyBzdXBwb3J0aW5nIGluamVjdGlvbiB0aGF0IG1heSBiZSAKLSAgICAgKiBpbnN0YW50aWF0ZWQgYnkgdGhlIGNvbnRhaW5lciBhdCBydW50aW1lLiBJbmplY3Rpb25zIHBvaW50cyBvZiBldmVyeSAKLSAgICAgKiBkaXNjb3ZlcmVkIGVuYWJsZWQgSmF2YSBFRSBjb21wb25lbnQgaXMgY2hlY2tlZCB0byBzZWUgaWYgdGhlcmUgaXMgYSAKLSAgICAgKiByZXF1ZXN0IGZvciBpbmplY3Rpb24gb2YgYSBmcmFtZXdvcmsgc2VydmljZS4gCisgICAgICogZmlyZWQgZm9yIGV2ZXJ5IEphdmEgRUUgY29tcG9uZW50IGNsYXNzIHN1cHBvcnRpbmcgaW5qZWN0aW9uIHRoYXQgbWF5IGJlCisgICAgICogaW5zdGFudGlhdGVkIGJ5IHRoZSBjb250YWluZXIgYXQgcnVudGltZS4gSW5qZWN0aW9ucyBwb2ludHMgb2YgZXZlcnkKKyAgICAgKiBkaXNjb3ZlcmVkIGVuYWJsZWQgSmF2YSBFRSBjb21wb25lbnQgaXMgY2hlY2tlZCB0byBzZWUgaWYgdGhlcmUgaXMgYQorICAgICAqIHJlcXVlc3QgZm9yIGluamVjdGlvbiBvZiBhIGZyYW1ld29yayBzZXJ2aWNlLgogICAgICAqLwogICAgIHZvaWQgYWZ0ZXJQcm9jZXNzSW5qZWN0aW9uVGFyZ2V0KEBPYnNlcnZlcyBQcm9jZXNzSW5qZWN0aW9uVGFyZ2V0PD8+IHBiKXsKICAgICAgICAgZGVidWcoIkFmdGVyUHJvY2Vzc0luamVjdGlvblRhcmdldCIgKyBwYi5nZXRBbm5vdGF0ZWRUeXBlKCkuZ2V0QmFzZVR5cGUoKSk7CiAgICAgICAgIFNldDxJbmplY3Rpb25Qb2ludD4gaXBzID0gcGIuZ2V0SW5qZWN0aW9uVGFyZ2V0KCkuZ2V0SW5qZWN0aW9uUG9pbnRzKCk7CiAgICAgICAgIGRpc2NvdmVyU2VydmljZUluamVjdGlvblBvaW50cyhpcHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIE9ic2VydmVyIGZvciA8Y29kZT5Qcm9jZXNzSW5qZWN0aW9uVGFyZ2V0PC9jb2RlPiBldmVudHMuIFRoaXMgZXZlbnQgaXMKLSAgICAgKiBmaXJlZCBmaXJlIGFuIGV2ZW50IGZvciBlYWNoIGVuYWJsZWQgYmVhbiwgaW50ZXJjZXB0b3Igb3IgZGVjb3JhdG9yIAotICAgICAqIGRlcGxveWVkIGluIGEgYmVhbiBhcmNoaXZlLCBiZWZvcmUgcmVnaXN0ZXJpbmcgdGhlIEJlYW4gb2JqZWN0LiAKLSAgICAgKiBJbmplY3Rpb25zIHBvaW50cyBvZiBldmVyeSBkaXNjb3ZlcmVkIGVuYWJsZWQgSmF2YSBFRSBjb21wb25lbnQgaXMgCi0gICAgICogY2hlY2tlZCB0byBzZWUgaWYgdGhlcmUgaXMgYSByZXF1ZXN0IGZvciBpbmplY3Rpb24gb2YgYSBmcmFtZXdvcmsgCi0gICAgICogc2VydmljZS4gCisgICAgICogZmlyZWQgZmlyZSBhbiBldmVudCBmb3IgZWFjaCBlbmFibGVkIGJlYW4sIGludGVyY2VwdG9yIG9yIGRlY29yYXRvcgorICAgICAqIGRlcGxveWVkIGluIGEgYmVhbiBhcmNoaXZlLCBiZWZvcmUgcmVnaXN0ZXJpbmcgdGhlIEJlYW4gb2JqZWN0LgorICAgICAqIEluamVjdGlvbnMgcG9pbnRzIG9mIGV2ZXJ5IGRpc2NvdmVyZWQgZW5hYmxlZCBKYXZhIEVFIGNvbXBvbmVudCBpcworICAgICAqIGNoZWNrZWQgdG8gc2VlIGlmIHRoZXJlIGlzIGEgcmVxdWVzdCBmb3IgaW5qZWN0aW9uIG9mIGEgZnJhbWV3b3JrCisgICAgICogc2VydmljZS4KICAgICAgKi8KICAgICB2b2lkIGFmdGVyUHJvY2Vzc0JlYW4oQE9ic2VydmVzIFByb2Nlc3NCZWFuIHBiKXsKICAgICAgICAgYWZ0ZXJQcm9jZXNzQmVhbkNhbGxlZCA9IHRydWU7CkBAIC0xMDcsMjIgKzEwNywyMiBAQAogCiAgICAgLyoKICAgICAgKiBEaXNjb3ZlciBpbmplY3Rpb24gcG9pbnRzIHdoZXJlIHRoZSBmcmFtZXdvcmsgc2VydmljZSBpcyByZXF1ZXN0ZWQKLSAgICAgKiB0aHJvdWdoIHRoZSA8Y29kZT5GcmFtZXdvcmtTZXJ2aWNlPC9jb2RlPiBxdWFsaWZpZXIgYW5kIGEgbWFwIGlzIAorICAgICAqIHRocm91Z2ggdGhlIDxjb2RlPkZyYW1ld29ya1NlcnZpY2U8L2NvZGU+IHF1YWxpZmllciBhbmQgYSBtYXAgaXMKICAgICAgKiBwb3B1bGF0ZWQgZm9yIGFsbCBmcmFtZXdvcmsgc2VydmljZXMgdGhhdCBoYXZlIGJlZW4gcmVxdWVzdGVkLgogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBkaXNjb3ZlclNlcnZpY2VJbmplY3Rpb25Qb2ludHMoU2V0PEluamVjdGlvblBvaW50PiBpcHMpIHsKLSAgICAgICAgZm9yIChJdGVyYXRvcjxJbmplY3Rpb25Qb2ludD4gaXRlcmF0b3IgPSBpcHMuaXRlcmF0b3IoKTsgCisgICAgICAgIGZvciAoSXRlcmF0b3I8SW5qZWN0aW9uUG9pbnQ+IGl0ZXJhdG9yID0gaXBzLml0ZXJhdG9yKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IuaGFzTmV4dCgpOykgewogICAgICAgICAgICAgSW5qZWN0aW9uUG9pbnQgaW5qZWN0aW9uUG9pbnQgPSBpdGVyYXRvci5uZXh0KCk7CiAgICAgICAgICAgICBTZXQ8QW5ub3RhdGlvbj4gcXVhbGlmcyA9IGluamVjdGlvblBvaW50LmdldFF1YWxpZmllcnMoKTsKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3I8QW5ub3RhdGlvbj4gcXVhbGlmSXRlciA9IHF1YWxpZnMuaXRlcmF0b3IoKTsgCisgICAgICAgICAgICBmb3IgKEl0ZXJhdG9yPEFubm90YXRpb24+IHF1YWxpZkl0ZXIgPSBxdWFsaWZzLml0ZXJhdG9yKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbGlmSXRlci5oYXNOZXh0KCk7KSB7CiAgICAgICAgICAgICAgICAgQW5ub3RhdGlvbiBhbm5vdGF0aW9uID0gcXVhbGlmSXRlci5uZXh0KCk7CiAgICAgICAgICAgICAgICAgaWYgKGFubm90YXRpb24uYW5ub3RhdGlvblR5cGUoKS5lcXVhbHMoRnJhbWV3b3JrU2VydmljZS5jbGFzcykpewogICAgICAgICAgICAgICAgICAgICBwcmludERlYnVnRm9ySW5qZWN0aW9uUG9pbnQoaW5qZWN0aW9uUG9pbnQpOwogICAgICAgICAgICAgICAgICAgICAvL0tlZXAgdHJhY2sgb2Ygc2VydmljZS10eXBlIGFuZCBpdHMgYXR0cmlidXRlcwogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0gSW5qZWN0aW9uIHJlcXVlc3RlZCBmb3IgIiArCi0gICAgICAgICAgICAgICAgICAgIAkJImZyYW1ld29yayBzZXJ2aWNlIHR5cGUgIiArIGluamVjdGlvblBvaW50LmdldFR5cGUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcmFtZXdvcmsgc2VydmljZSB0eXBlICIgKyBpbmplY3Rpb25Qb2ludC5nZXRUeXBlKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgYW5kIGFubm90YXRlZCB3aXRoIGR5bmFtaWM9IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaW5qZWN0aW9uUG9pbnQuZ2V0QW5ub3RhdGVkKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRBbm5vdGF0aW9uKEZyYW1ld29ya1NlcnZpY2UuY2xhc3MpCkBAIC0xMzQsMzEgKzEzNCwzMSBAQAogICAgICAgICAgICAgICAgICAgICAvL0FkZCB0byBsaXN0IG9mIGZyYW1ld29yayBzZXJ2aWNlcyB0byBiZSBpbmplY3RlZAogICAgICAgICAgICAgICAgICAgICBUeXBlIGtleSA9IGluamVjdGlvblBvaW50LmdldFR5cGUoKTsKICAgICAgICAgICAgICAgICAgICAgRnJhbWV3b3JrU2VydmljZSB2YWx1ZSA9IGluamVjdGlvblBvaW50LmdldEFubm90YXRlZCgpCi0gICAgICAgICAgICAgICAgICAgIC5nZXRBbm5vdGF0aW9uKEZyYW1ld29ya1NlcnZpY2UuY2xhc3MpOyAKKyAgICAgICAgICAgICAgICAgICAgLmdldEFubm90YXRpb24oRnJhbWV3b3JrU2VydmljZS5jbGFzcyk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZnJhbWV3b3JrU2VydmljZXNUb0JlSW5qZWN0ZWQuY29udGFpbnNLZXkoa2V5KSl7CiAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXdvcmtTZXJ2aWNlc1RvQmVJbmplY3RlZC5wdXQoa2V5LCBuZXcgSGFzaFNldDxGcmFtZXdvcmtTZXJ2aWNlPigpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBmcmFtZXdvcmtTZXJ2aWNlc1RvQmVJbmplY3RlZC5nZXQoa2V5KS5hZGQodmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZnJhbWV3b3JrU2VydmljZXNUb0JlSW5qZWN0ZWQuZ2V0KGtleSkuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKLSAgICAgKiBPYnNlcnZlciBmb3IgPGNvZGU+QWZ0ZXJCZWFuRGlzY292ZXJ5PC9jb2RlPiBldmVudHMuIFRoaXMgCisgICAgICogT2JzZXJ2ZXIgZm9yIDxjb2RlPkFmdGVyQmVhbkRpc2NvdmVyeTwvY29kZT4gZXZlbnRzLiBUaGlzCiAgICAgICogb2JzZXJ2ZXIgbWV0aG9kIGlzIHVzZWQgdG8gcmVnaXN0ZXIgPGNvZGU+QmVhbjwvY29kZT5zIGZvciB0aGUgZnJhbWV3b3JrCi0gICAgICogc2VydmljZXMgdGhhdCBoYXZlIGJlZW4gcmVxdWVzdGVkIHRvIGJlIGluamVjdGVkLiAKKyAgICAgKiBzZXJ2aWNlcyB0aGF0IGhhdmUgYmVlbiByZXF1ZXN0ZWQgdG8gYmUgaW5qZWN0ZWQuCiAgICAgICovCiAgICAgdm9pZCBhZnRlckJlYW5EaXNjb3ZlcnkoQE9ic2VydmVzIEFmdGVyQmVhbkRpc2NvdmVyeSBhYmQpewogICAgICAgICBhZnRlckJlYW5EaXNjb3ZlcnlDYWxsZWQgPSB0cnVlOwogICAgICAgICBkZWJ1ZygiQWZ0ZXIgQmVhbiBEaXNjb3ZlcnkiKTsKLSAgICAgICAgZm9yIChJdGVyYXRvcjxUeXBlPiBpdGVyYXRvciA9IHRoaXMuZnJhbWV3b3JrU2VydmljZXNUb0JlSW5qZWN0ZWQua2V5U2V0KCkuaXRlcmF0b3IoKTsgCisgICAgICAgIGZvciAoSXRlcmF0b3I8VHlwZT4gaXRlcmF0b3IgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2VzVG9CZUluamVjdGVkLmtleVNldCgpLml0ZXJhdG9yKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5oYXNOZXh0KCk7KSB7CiAgICAgICAgICAgICBUeXBlIHR5cGUgPSAgaXRlcmF0b3IubmV4dCgpOwogICAgICAgICAgICAgLy9JZiB0aGUgaW5qZWN0aW9uIHBvaW50J3MgdHlwZSBpcyBub3QgYSBDbGFzcyBvciBJbnRlcmZhY2UsIHdlCi0gICAgICAgICAgICAvL2Rvbid0IGtub3cgaG93IHRvIGhhbmRsZSB0aGlzLiAKKyAgICAgICAgICAgIC8vZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIHRoaXMuCiAgICAgICAgICAgICBpZiAoISh0eXBlIGluc3RhbmNlb2YgQ2xhc3MpKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmtub3duIHR5cGU6IiArIHR5cGUpOwogICAgICAgICAgICAgICAgIGFiZC5hZGREZWZpbml0aW9uRXJyb3IobmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKApAQCAtMTczLDEwICsxNzMsMTAgQEAKIAogICAgIC8qCiAgICAgICogQWRkIGEgPGNvZGU+QmVhbjwvY29kZT4gZm9yIHRoZSBmcmFtZXdvcmsgc2VydmljZSByZXF1ZXN0ZWQuIEluc3RhbnRpYXRlCi0gICAgICogb3IgZGlzY292ZXIgdGhlIGJlYW4gZnJvbSB0aGUgZnJhbWV3b3JrIHNlcnZpY2UgcmVnaXN0cnksIAorICAgICAqIG9yIGRpc2NvdmVyIHRoZSBiZWFuIGZyb20gdGhlIGZyYW1ld29yayBzZXJ2aWNlIHJlZ2lzdHJ5LAogICAgICAqIGFuZCByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIHNlcnZpY2UgaWYgYSBkeW5hbWljIHJlZmVyZW5jZSBpcyByZXF1ZXN0ZWQuCiAgICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGFkZEJlYW4oQWZ0ZXJCZWFuRGlzY292ZXJ5IGFiZCwgZmluYWwgVHlwZSB0eXBlLCAKKyAgICBwcml2YXRlIHZvaWQgYWRkQmVhbihBZnRlckJlYW5EaXNjb3ZlcnkgYWJkLCBmaW5hbCBUeXBlIHR5cGUsCiAgICAgICAgICAgICBmaW5hbCBTZXQ8RnJhbWV3b3JrU2VydmljZT4gZnJhbWV3b3JrU2VydmljZXMpIHsKICAgICAgICAgZm9yIChJdGVyYXRvcjxGcmFtZXdvcmtTZXJ2aWNlPiBpdGVyYXRvciA9IGZyYW1ld29ya1NlcnZpY2VzLml0ZXJhdG9yKCk7IGl0ZXJhdG9yCiAgICAgICAgICAgICAgICAgLmhhc05leHQoKTspIHsKQEAgLTE4NSw3ICsxODUsNyBAQAogICAgICAgICAgICAgYWJkLmFkZEJlYW4obmV3IEZyYW1ld29ya1NlcnZpY2VCZWFuKHR5cGUsIGZyYW1ld29ya1NlcnZpY2UpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogCiAgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBGcmFtZXdvcmtTZXJ2aWNlQmVhbiBpbXBsZW1lbnRzIEJlYW4gewogICAgICAgICBwcml2YXRlIGZpbmFsIFR5cGUgdHlwZTsKQEAgLTIyNCw3ICsyMjQsNyBAQAogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICAgICAgcmV0dXJuIHR5cGUgKyAiX2R5bmFtaWNfIiArIGZyYW1ld29ya1NlcnZpY2UuZHluYW1pYygpCi0gICAgICAgICAgICAgICAgICAgICsgIl9jcml0ZXJpYV8iICsgZnJhbWV3b3JrU2VydmljZS5zZXJ2aWNlQ3JpdGVyaWEoKSAKKyAgICAgICAgICAgICAgICAgICAgKyAiX2NyaXRlcmlhXyIgKyBmcmFtZXdvcmtTZXJ2aWNlLnNlcnZpY2VDcml0ZXJpYSgpCiAgICAgICAgICAgICAgICAgICAgICsgIl93YWl0VGltZW91dCIgKyBmcmFtZXdvcmtTZXJ2aWNlLndhaXRUaW1lb3V0KCk7CiAgICAgICAgIH0KIApAQCAtMjM1LDcgKzIzNSw3IEBACiAgICAgICAgICAgICBzLmFkZChuZXcgQW5ub3RhdGlvbkxpdGVyYWw8QW55PigpIHt9KTsKICAgICAgICAgICAgIC8vQWRkIHRoZSBhcHByb3ByaWF0ZSBwYXJhbWV0ZXJzIHRvIHRoZSBGcmFtZXdvcmtTZXJ2aWNlIHF1YWxpZmllcgogICAgICAgICAgICAgLy9hcyByZXF1ZXN0ZWQgaW4gdGhlIGluamVjdGlvbiBwb2ludAotICAgICAgICAgICAgcy5hZGQobmV3IEZyYW1ld29ya1NlcnZpY2VRdWFsaWZpZXJUeXBlKGZyYW1ld29ya1NlcnZpY2UpKTsgCisgICAgICAgICAgICBzLmFkZChuZXcgRnJhbWV3b3JrU2VydmljZVF1YWxpZmllclR5cGUoZnJhbWV3b3JrU2VydmljZSkpOwogICAgICAgICAgICAgcmV0dXJuIHM7CiAgICAgICAgIH0KIApAQCAtMjcyLDcgKzI3Miw3IEBACiAgICAgICogUmVwcmVzZW50cyBhbiBhbm5vdGF0aW9uIHR5cGUgaW5zdGFuY2Ugb2YgRnJhbWV3b3JrU2VydmljZQogICAgICAqIHdpdGggcGFyYW1ldGVycyBlcXVhbCB0byB0aG9zZSBzcGVjaWZpZWQgaW4gdGhlIGluamVjdGlvbiBwb2ludAogICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgY2xhc3MgRnJhbWV3b3JrU2VydmljZVF1YWxpZmllclR5cGUgCisgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBGcmFtZXdvcmtTZXJ2aWNlUXVhbGlmaWVyVHlwZQogICAgIGV4dGVuZHMgQW5ub3RhdGlvbkxpdGVyYWw8RnJhbWV3b3JrU2VydmljZT4gaW1wbGVtZW50cyBGcmFtZXdvcmtTZXJ2aWNlIHsKICAgICAgICAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZUNyaXRlcmlhID0gIiI7CiAgICAgICAgIHByaXZhdGUgYm9vbGVhbiBkeW5hbWljID0gZmFsc2U7CkBAIC0yOTgsMTEgKzI5OCwxMSBAQAogICAgICAgICAgICAgcmV0dXJuIHRoaXMud2FpdFRpbWVvdXQ7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgZGVidWcoU3RyaW5nIHN0cmluZykgewogICAgICAgICBpZihERUJVR19FTkFCTEVEKQogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeUV4dGVuc2lvbjo6ICIgKyBzdHJpbmcpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBwcmludERlYnVnRm9ySW5qZWN0aW9uUG9pbnQoSW5qZWN0aW9uUG9pbnQgaW5qZWN0aW9uUG9pbnQpIHsKQEAgLTMxOSw1ICszMTksNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9pbnQKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvZXh0ZW5zaW9uL3Rlc3QvZndrL0ZyYW1ld29ya1NlcnZpY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL2V4dGVuc2lvbi90ZXN0L2Z3ay9GcmFtZXdvcmtTZXJ2aWNlLmphdmEKaW5kZXggNjhlZjQ2ZC4uY2ZhNzBmZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvZXh0ZW5zaW9uL3Rlc3QvZndrL0ZyYW1ld29ya1NlcnZpY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9leHRlbnNpb24vdGVzdC9md2svRnJhbWV3b3JrU2VydmljZS5qYXZhCkBAIC0zMywyNiArMzMsMjYgQEAKIAogLyoqCiAgKiBBIENESSBRdWFsaWZpZXIgdGhhdCByZXByZXNlbnRzIGEgcmVmZXJlbmNlIHRvIGEKLSAqIHNlcnZpY2UgaW4gdGhlIGZyYW1ld29yay4gSWYgdGhpcyBxdWFsaWZpZXJzIGFubm90YXRlcyBhbiBpbmplY3Rpb24gcG9pbnQsIAorICogc2VydmljZSBpbiB0aGUgZnJhbWV3b3JrLiBJZiB0aGlzIHF1YWxpZmllcnMgYW5ub3RhdGVzIGFuIGluamVjdGlvbiBwb2ludCwKICAqIHRoZSBmcmFtZXdvcmsgZXh0ZW5zaW9uIGRpc2NvdmVycyBhbmQgaW5zdGFudGlhdGVzCiAgKiBhIHNlcnZpY2UgaW1wbGVtZW50aW5nIHRoZSBzZXJ2aWNlIGludGVyZmFjZSB0eXBlIG9mIHRoZSBpbmplY3Rpb24gcG9pbnQKICAqIGFuZCBtYWtlcyBpdCBhdmFpbGFibGUgZm9yIGluamVjdGlvbiB0byB0aGF0IGluamVjdGlvbiBwb2ludC4KLSAqLyAKKyAqLwogcHVibGljIEBpbnRlcmZhY2UgRnJhbWV3b3JrU2VydmljZSB7CiAgICAgLyoqCiAgICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgc2VydmljZSByZWZlcmVuY2UgdGhhdCBpcyBpbmplY3RlZAogICAgICAqIHJlZmVycyB0byBhIGR5bmFtaWMgcHJveHkgb3IgdGhlIGFjdHVhbCBzZXJ2aWNlIHJlZmVyZW5jZSBvYnRhaW5lZAotICAgICAqIGZyb20gdGhlIGZyYW1ld29yayBzZXJ2aWNlIHJlZ2lzdHJ5ICAKKyAgICAgKiBmcm9tIHRoZSBmcmFtZXdvcmsgc2VydmljZSByZWdpc3RyeQogICAgICAqLwogICAgYm9vbGVhbiBkeW5hbWljKCkgZGVmYXVsdCBmYWxzZTsgLy9keW5hbWljCi0gICAKKwogICAgLyoqCiAgICAgKiBzZXJ2aWNlIGRpc2NvdmVyeSBjcml0ZXJpYQogICAgICovCi0gICBTdHJpbmcgc2VydmljZUNyaXRlcmlhKCkgZGVmYXVsdCAiIjsgCi0gICAKKyAgIFN0cmluZyBzZXJ2aWNlQ3JpdGVyaWEoKSBkZWZhdWx0ICIiOworCiAgICAvKioKICAgICAqIHdhaXQgc3BlY2lmaWVkIGluIG1pbGxpcy4gLTEgaW5kaWNhdGVzIGluZGVmaW5pdGUgd2FpdAogICAgICovCi0gICBpbnQgd2FpdFRpbWVvdXQoKSBkZWZhdWx0IC0xOyAKKyAgIGludCB3YWl0VGltZW91dCgpIGRlZmF1bHQgLTE7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9leHRlbnNpb24vdGVzdC9md2svU29tZUZ3a1NlcnZpY2VJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9leHRlbnNpb24vdGVzdC9md2svU29tZUZ3a1NlcnZpY2VJbXBsLmphdmEKaW5kZXggNjQzNzQ0ZC4uODkzNTM5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvZXh0ZW5zaW9uL3Rlc3QvZndrL1NvbWVGd2tTZXJ2aWNlSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL2V4dGVuc2lvbi90ZXN0L2Z3ay9Tb21lRndrU2VydmljZUltcGwuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSB0ZXN0LmZ3azsKIAogcHVibGljIGNsYXNzIFNvbWVGd2tTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIFNvbWVGd2tTZXJ2aWNlIHsKLSAgICAKKwogICAgIHB1YmxpYyBTb21lRndrU2VydmljZUltcGwoKXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTb21lRnJhbWV3b3JrQ2xhc3M6Iik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKaW5kZXggNzAyNDk0ZS4uYjljNzk3NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCkBAIC0yOSwxNCArMjksMTQgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUcmFuc2FjdGlvbkludGVyY2VwdG9yKFNlcnZpY2VGcmFtZXdvcmtFeHRlbnNpb24gbXlleCl7IC8vSW5qZWN0aW9uIG9mIHBvcnRhYmxlIGV4dGVuc2lvbiBpbiBhIGJlYW4KICAgICAgICAgaWYobXlleCA9PSBudWxsKSB7CiAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gIlBvcnRhYmxlIEV4dGVuc2lvbiBJbmplY3Rpb24gaW4gSW50ZXJjZXB0b3IgZmFpbGVkIjsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IG1hbmFnZVRyYW5zYWN0aW9uKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVHJhbnNhY3Rpb25JbnRlcmNlcHRvcjo6QXJvdW5kSW52b2tlIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YQppbmRleCA5OGY4NWQ0Li44YmQ5OGNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKQEAgLTMxLDUgKzMxLDUgQEAKIEBJbnRlcmNlcHRvckJpbmRpbmcKIHB1YmxpYyBAaW50ZXJmYWNlIFRyYW5zYWN0aW9uYWwgewogCi0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1BvcnRhYmxlRXh0ZW5zaW9uQmVhblJlZ2lzdHJhdGlvblRlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Qb3J0YWJsZUV4dGVuc2lvbkJlYW5SZWdpc3RyYXRpb25UZXN0U2VydmxldC5qYXZhCmluZGV4IGVmYWZjNDQuLjY0MTExY2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1BvcnRhYmxlRXh0ZW5zaW9uQmVhblJlZ2lzdHJhdGlvblRlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvc2VydmxldC90ZXN0L3NlcnZsZXQvUG9ydGFibGVFeHRlbnNpb25CZWFuUmVnaXN0cmF0aW9uVGVzdFNlcnZsZXQuamF2YQpAQCAtNDgsMTAgKzQ4LDEwIEBACiAgICAgQEluamVjdAogICAgIEBQcmVmZXJyZWQKICAgICBUZXN0QmVhbiB0YjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBCZWFuTWFuYWdlciBibTsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBARnJhbWV3b3JrU2VydmljZShzZXJ2aWNlQ3JpdGVyaWE9IlRFU1QiLCBkeW5hbWljPXRydWUpCiAgICAgU29tZUZ3a1NlcnZpY2Ugc2ZjX3Byb3h5OwpAQCAtODIsMjUgKzgyLDI1IEBACiAgICAgICAgICAgICAgICAgICAgICsgVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQ7CiAgICAgICAgIGlmICghVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2UudHJpbSgpLmVxdWFscygiIikpCiAgICAgICAgICAgICBtc2cgKz0gVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2U7Ci0gICAgICAgIAorCiAgICAgICAgIC8vY2hlY2sgaWYgb3VyIHBvcnRhYmxlIGV4dGVuc2lvbiB3YXMgY2FsbGVkCiAgICAgICAgIGlmICghU2VydmljZUZyYW1ld29ya0V4dGVuc2lvbi5iZWZvcmVCZWFuRGlzY292ZXJ5Q2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJQb3J0YWJsZSBFeHRlbnNpb24gbGlmZWN5Y2xlIG9ic2VydmVyIG1ldGhvZDogIiArCi0gICAgICAgICAgICAJCSJiZWZvcmVCZWFuRGlzY292ZXJ5IG5vdCBjYWxsZWQiOworICAgICAgICAgICAgICAgICAgICAiYmVmb3JlQmVhbkRpc2NvdmVyeSBub3QgY2FsbGVkIjsKIAogICAgICAgICBpZiAoIVNlcnZpY2VGcmFtZXdvcmtFeHRlbnNpb24uYWZ0ZXJCZWFuRGlzY292ZXJ5Q2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJQb3J0YWJsZSBFeHRlbnNpb24gbGlmZWN5Y2xlIG9ic2VydmVyIG1ldGhvZDogIiArCi0gICAgICAgICAgICAJCSJhZnRlckJlYW5EaXNjb3Zlcnkgbm90IGNhbGxlZCBvciBpbmplY3Rpb24gb2YgQmVhbk1hbmFnZXIgIiArCi0gICAgICAgICAgICAJCSJpbiBhbiBvYnNlcnZlciBtZXRob2QgZmFpbGVkIjsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICJhZnRlckJlYW5EaXNjb3Zlcnkgbm90IGNhbGxlZCBvciBpbmplY3Rpb24gb2YgQmVhbk1hbmFnZXIgIiArCisgICAgICAgICAgICAgICAgICAgICJpbiBhbiBvYnNlcnZlciBtZXRob2QgZmFpbGVkIjsKKwogICAgICAgICBpZiAoIVNlcnZpY2VGcmFtZXdvcmtFeHRlbnNpb24ucHJvY2Vzc0Fubm90YXRlZFR5cGVDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlBvcnRhYmxlIEV4dGVuc2lvbiBsaWZlY3ljbGUgb2JzZXJ2ZXIgbWV0aG9kOiBwcm9jZXNzICIgKwotICAgICAgICAgICAgCQkiYW5ub3RhdGVkIHR5cGUgbm90IGNhbGxlZCI7CisgICAgICAgICAgICAgICAgICAgICJhbm5vdGF0ZWQgdHlwZSBub3QgY2FsbGVkIjsKIAogICAgICAgICAvL0JlYW5NYW5hZ2VyIGxvb2t1cAogICAgICAgICBpZiAoYm0gPT0gbnVsbCkKICAgICAgICAgICAgIG1zZyArPSAiSW5qZWN0aW9uIG9mIEJlYW5NYW5hZ2VyIGludG8gc2VydmxldCBmYWlsZWQiOwotICAgICAgICAKKwogICAgICAgICAvL0dldCBhbGwgYmVhbnMgYW5kIGNvdW50IHRoZSBudW1iZXIgb2YgYmVhbnMgaW4gdGhlIHRlc3QgcGFja2FnZQogICAgICAgICBTZXQ8QmVhbjw/Pj4gYWxsQmVhbnMgPSBibS5nZXRCZWFucyhPYmplY3QuY2xhc3MsIG5ldyBBbm5vdGF0aW9uTGl0ZXJhbDxBbnk+KCl7fSk7CiAKQEAgLTExMywxMSArMTEzLDExIEBACiAgICAgICAgIC8vY2hlY2sgaWYgcHJveGllZCBzZXJ2aWNlIHJlZmVyZW5jZSBpcyBpbmRlZWQgcHJveGllZAogICAgICAgICBpZiAoIVByb3h5LmlzUHJveHlDbGFzcyhzZmNfcHJveHkuZ2V0Q2xhc3MoKSkpCiAgICAgICAgICAgICBtc2cgKz0gIkV4cGVjdGVkIFByb3hpZWQgc2VydmljZSByZWZlcmVuY2UsIGJ1dCBnb3QgYmFjayBhbiAiICsKLSAgICAgICAgICAgIAkJInVucHJveGllZCBzZXJ2aWNlIHJlZmVyZW5jZSAiOworICAgICAgICAgICAgICAgICAgICAidW5wcm94aWVkIHNlcnZpY2UgcmVmZXJlbmNlICI7CiAgICAgICAgIC8vaW52b2tlIGEgbWV0aG9kIG8KICAgICAgICAgaWYoIXNmY19wcm94eS5mb29NZXRob2QoKSkKICAgICAgICAgICAgIG1zZyArPSAiaW52b2NhdGlvbiBvZiBtZXRob2Qgb24gcHJveGllZCBzZXJ2aWNlIGZhaWxlZCI7Ci0gICAgICAgIAorCiAvLyAgICAgICAgLy9jaGVjayBpZiB1bnByb3hpZWQgc2VydmljZSByZWZlcmVuY2UgaXMgbm90IHByb3hpZWQKIC8vICAgICAgICBpZiAoUHJveHkuaXNQcm94eUNsYXNzKHNmY191bnByb3hpZWQuZ2V0Q2xhc3MoKSkpCiAvLyAgICAgICAgICAgIG1zZyArPSAiRXhwZWN0ZWQgdW5Qcm94aWVkIHNlcnZpY2UgcmVmZXJlbmNlLCBidXQgZ290IGJhY2sgYW4gIiArCkBAIC0xMjUsMzIgKzEyNSwzMiBAQAogLy8gICAgICAgIC8vaW52b2tlIGEgbWV0aG9kIG8KIC8vICAgICAgICBpZighc2ZjX3VucHJveGllZC5mb29NZXRob2QoKSkKIC8vICAgICAgICAgICAgbXNnICs9ICJpbnZvY2F0aW9uIG9mIG1ldGhvZCBvbiB1bnByb3hpZWQgc2VydmljZSBmYWlsZWQiOwotICAgICAgICAKKwogICAgICAgICBmb3IgKEl0ZXJhdG9yPEJlYW48Pz4+IGl0ZXJhdG9yID0gYWxsQmVhbnMuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOykgewogICAgICAgICAgICAgQmVhbjw/PiBiZWFuID0gaXRlcmF0b3IubmV4dCgpOwogICAgICAgICAgICAgaWYgKGJlYW4uZ2V0QmVhbkNsYXNzKCkuZ2V0TmFtZSgpLmNvbnRhaW5zKCJTb21lRnJhbWV3b3JrIikpewogICAgICAgICAgICAgICAgIG1zZyArPSB0ZXN0RnJhbWV3b3JrQmVhbihiZWFuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoIVNlcnZpY2VGcmFtZXdvcmtFeHRlbnNpb24uYWZ0ZXJQcm9jZXNzQmVhbkNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiUG9ydGFibGUgRXh0ZW5zaW9uIGxpZmVjeWNsZSBvYnNlcnZlciBtZXRob2Q6IGFmdGVyICIgKwogICAgICAgICAgICAgICAgICAgICAiUHJvY2Vzc0JlYW4gbm90IGNhbGxlZCBmb3IgYSBiZWFuIHJlZ2lzdGVyZWQgYnkgdGhlIHBvcnRhYmxlIiArCiAgICAgICAgICAgICAgICAgICAgICJleHRlbnNpb24iOwotICAgICAgICAKKwogICAgICAgICB3cml0ZXIud3JpdGUobXNnICsgIlxuIik7CiAgICAgfQogCiAKICAgICBwcml2YXRlIFN0cmluZyB0ZXN0RnJhbWV3b3JrQmVhbihCZWFuPD8+IGJlYW4pIHsKICAgICAgICAgU3RyaW5nIG1zZyA9ICIiOwotICAgICAgICBpZiAoIWJlYW4uZ2V0UXVhbGlmaWVycygpLmNvbnRhaW5zKG5ldyBBbm5vdGF0aW9uTGl0ZXJhbDxBbnk+KCkge30pIAotICAgICAgICAgICAgICAgIHx8ICFiZWFuLmdldFF1YWxpZmllcnMoKS5jb250YWlucyhuZXcgQW5ub3RhdGlvbkxpdGVyYWw8RGVmYXVsdD4oKSB7fSkpICAKKyAgICAgICAgaWYgKCFiZWFuLmdldFF1YWxpZmllcnMoKS5jb250YWlucyhuZXcgQW5ub3RhdGlvbkxpdGVyYWw8QW55PigpIHt9KQorICAgICAgICAgICAgICAgIHx8ICFiZWFuLmdldFF1YWxpZmllcnMoKS5jb250YWlucyhuZXcgQW5ub3RhdGlvbkxpdGVyYWw8RGVmYXVsdD4oKSB7fSkpCiAgICAgICAgICAgICBtc2cgKz0gIkZyYW1ld29ya0JlYW4gZG9lcyBub3QgaGF2ZSB0aGUgZGVmYXVsdCBleHBlY3RlZCBxdWFsaWZpZXJzIjsKLSAgICAgICAgCisKICAgICAgICAgaWYgKCFiZWFuLmdldFNjb3BlKCkuZXF1YWxzKERlcGVuZGVudC5jbGFzcykpCiAgICAgICAgICAgICBtc2cgKz0gIkZyYW1ld29ya0JlYW4gc2NvcGUgaXMgbm90IGRlcGVuZGVudCI7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKCFiZWFuLmdldEJlYW5DbGFzcygpLmdldE5hbWUoKS5lcXVhbHMoU29tZUZ3a1NlcnZpY2VJbXBsLmNsYXNzLmdldE5hbWUoKSkpCiAgICAgICAgICAgICBtc2cgKz0gIkZyYW1ld29yayBCZWFuOiBJbmNvcnJlY3QgYmVhbiBjbGFzcyI7CiAgICAgICAgIHJldHVybiBtc2c7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDM1ODM2ODYuLjc5Y2I0ODUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW1ha2UtZnJhbWV3b3JrLWJlYW4tYXZhaWxhYmxlLWZvci1pbmplY3Rpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vYnVpbGQueG1sCmluZGV4IDg4OTQ2ODguLjI1NTY1MzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDI0ICs0OCwyNCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgotICAgICAgICAJPHBhcmFtIG5hbWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIgdmFsdWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIgdmFsdWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc3LDEwICs3NywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKaW5kZXggMmMzMTY3ZS4uZjllOWEwNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcG9ydGFibGUgZXh0ZW5zaW9ucyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU0LDcgKzU0LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTY0LDcgKzY0LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTEwMywxMCArMTAzLDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCmluZGV4IDcwMjQ5NGUuLmI5Yzc5NzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCkBAIC0yOSwxNCArMjksMTQgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUcmFuc2FjdGlvbkludGVyY2VwdG9yKFNlcnZpY2VGcmFtZXdvcmtFeHRlbnNpb24gbXlleCl7IC8vSW5qZWN0aW9uIG9mIHBvcnRhYmxlIGV4dGVuc2lvbiBpbiBhIGJlYW4KICAgICAgICAgaWYobXlleCA9PSBudWxsKSB7CiAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gIlBvcnRhYmxlIEV4dGVuc2lvbiBJbmplY3Rpb24gaW4gSW50ZXJjZXB0b3IgZmFpbGVkIjsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IG1hbmFnZVRyYW5zYWN0aW9uKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVHJhbnNhY3Rpb25JbnRlcmNlcHRvcjo6QXJvdW5kSW52b2tlIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCmluZGV4IDk4Zjg1ZDQuLjhiZDk4Y2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCkBAIC0zMSw1ICszMSw1IEBACiBASW50ZXJjZXB0b3JCaW5kaW5nCiBwdWJsaWMgQGludGVyZmFjZSBUcmFuc2FjdGlvbmFsIHsKIAotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L2V4dGVuc2lvbi9GcmFtZXdvcmtTZXJ2aWNlRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9leHRlbnNpb24vRnJhbWV3b3JrU2VydmljZUZhY3RvcnkuamF2YQppbmRleCBhZTY2ZmQ5Li5iNWMxOWYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L2V4dGVuc2lvbi9GcmFtZXdvcmtTZXJ2aWNlRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9zZXJ2bGV0L3Rlc3QvZXh0ZW5zaW9uL0ZyYW1ld29ya1NlcnZpY2VGYWN0b3J5LmphdmEKQEAgLTI5LDkgKzI5LDkgQEAKICAgICBwdWJsaWMgc3RhdGljIE9iamVjdCBnZXRTZXJ2aWNlKGZpbmFsIFR5cGUgdHlwZSwgZmluYWwgRnJhbWV3b3JrU2VydmljZSBmcyl7CiAgICAgICAgIC8vTk9URTpoYXJkLWNvZGVkIGZvciB0aGlzIHRlc3QsIGJ1dCBpZGVhbGx5IHNob3VsZCBnZXQgdGhlCiAgICAgICAgIC8vc2VydmljZSBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBzZXJ2aWNlIHJlZ2lzdHJ5Ci0gICAgICAgIFNvbWVGd2tTZXJ2aWNlSW50ZXJmYWNlIGluc3RhbmNlID0gCisgICAgICAgIFNvbWVGd2tTZXJ2aWNlSW50ZXJmYWNlIGluc3RhbmNlID0KICAgICAgICAgICAgIChTb21lRndrU2VydmljZUludGVyZmFjZSkgbG9va3VwU2VydmljZSh0eXBlLCBmcy53YWl0VGltZW91dCgpKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGZzLmR5bmFtaWMoKSkgewogICAgICAgICAgICAgSW52b2NhdGlvbkhhbmRsZXIgaWggPSBuZXcgSW52b2NhdGlvbkhhbmRsZXIoKSB7CiAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCkBAIC00MSwxNSArNDEsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZC5pbnZva2UobG9va3VwU2VydmljZSh0eXBlLCBmcy53YWl0VGltZW91dCgpKSwgYXJncyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGluc3RhbmNlID0gKFNvbWVGd2tTZXJ2aWNlSW50ZXJmYWNlKSAKLSAgICAgICAgICAgIFByb3h5Lm5ld1Byb3h5SW5zdGFuY2UoVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKSwgCi0gICAgICAgICAgICAgICAgICAgIG5ldyBDbGFzc1tde1NvbWVGd2tTZXJ2aWNlSW50ZXJmYWNlLmNsYXNzfSwgaWgpOyAKKyAgICAgICAgICAgIGluc3RhbmNlID0gKFNvbWVGd2tTZXJ2aWNlSW50ZXJmYWNlKQorICAgICAgICAgICAgUHJveHkubmV3UHJveHlJbnN0YW5jZShUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpLAorICAgICAgICAgICAgICAgICAgICBuZXcgQ2xhc3NbXXtTb21lRndrU2VydmljZUludGVyZmFjZS5jbGFzc30sIGloKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0IGxvb2t1cFNlcnZpY2UoVHlwZSB0eXBlLCBpbnQgd2FpdFRpbWVvdXQpIHsKLSAgICAgICAgaWYgKHR5cGUuZXF1YWxzKFNvbWVGd2tTZXJ2aWNlSW50ZXJmYWNlLmNsYXNzKSl7IAorICAgICAgICBpZiAodHlwZS5lcXVhbHMoU29tZUZ3a1NlcnZpY2VJbnRlcmZhY2UuY2xhc3MpKXsKICAgICAgICAgICAgIHJldHVybiBuZXcgU29tZUZ3a1NlcnZpY2VJbXBsKCJ0ZXN0Iik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L2V4dGVuc2lvbi9TZXJ2aWNlRnJhbWV3b3JrRXh0ZW5zaW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L2V4dGVuc2lvbi9TZXJ2aWNlRnJhbWV3b3JrRXh0ZW5zaW9uLmphdmEKaW5kZXggZTRiNzMyYi4uMTlkODhiMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9leHRlbnNpb24vU2VydmljZUZyYW1ld29ya0V4dGVuc2lvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9zZXJ2bGV0L3Rlc3QvZXh0ZW5zaW9uL1NlcnZpY2VGcmFtZXdvcmtFeHRlbnNpb24uamF2YQpAQCAtNDYsOCArNDYsOCBAQAogCiAvKioKICAqIEEgcG9ydGFibGUgZXh0ZW5zaW9uIHRoYXQgc3VwcG9ydHMgaW5qZWN0aW9uIG9mIGN1c3RvbSBmcmFtZXdvcmsKLSAqIHNlcnZpY2VzIGludG8gQmVhbnMuIAotICogCisgKiBzZXJ2aWNlcyBpbnRvIEJlYW5zLgorICoKICAqIEBhdXRob3IgU2l2YWt1bWFyIFRoeWFnYXJhamFuCiAgKi8KIHB1YmxpYyBjbGFzcyBTZXJ2aWNlRnJhbWV3b3JrRXh0ZW5zaW9uIGltcGxlbWVudHMgRXh0ZW5zaW9uewpAQCAtNTYsNyArNTYsNyBAQAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBhZnRlckJlYW5EaXNjb3ZlcnlDYWxsZWQgPSBmYWxzZTsKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYWZ0ZXJQcm9jZXNzQmVhbkNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBwcm9jZXNzQW5ub3RhdGVkVHlwZUNhbGxlZCA9IGZhbHNlOwotICAgIAorCiAgICAgLyoKICAgICAgKiBBIG1hcCBvZiBGcmFtZXdvcmsgU2VydmljZSBUeXBlcyB0byBiZSBpbmplY3RlZCBhbmQgYWRkaXRpb25hbCBtZXRhZGF0YQogICAgICAqIGFib3V0IHRoZSBGcmFtZXdvcmtTZXJ2aWNlIHRvIGJlIGluamVjdGVkLgpAQCAtNzYsMjcgKzc2LDI3IEBACiAgICAgICAgIGRlYnVnKCJQcm9jZXNzIGFubm90YXRlZCB0eXBlIiArIHBhdC5nZXRBbm5vdGF0ZWRUeXBlKCkuZ2V0QmFzZVR5cGUoKSk7CiAgICAgICAgIHByb2Nlc3NBbm5vdGF0ZWRUeXBlQ2FsbGVkID0gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBPYnNlcnZlciBmb3IgPGNvZGU+UHJvY2Vzc0luamVjdGlvblRhcmdldDwvY29kZT4gZXZlbnRzLiBUaGlzIGV2ZW50IGlzCi0gICAgICogZmlyZWQgZm9yIGV2ZXJ5IEphdmEgRUUgY29tcG9uZW50IGNsYXNzIHN1cHBvcnRpbmcgaW5qZWN0aW9uIHRoYXQgbWF5IGJlIAotICAgICAqIGluc3RhbnRpYXRlZCBieSB0aGUgY29udGFpbmVyIGF0IHJ1bnRpbWUuIEluamVjdGlvbnMgcG9pbnRzIG9mIGV2ZXJ5IAotICAgICAqIGRpc2NvdmVyZWQgZW5hYmxlZCBKYXZhIEVFIGNvbXBvbmVudCBpcyBjaGVja2VkIHRvIHNlZSBpZiB0aGVyZSBpcyBhIAotICAgICAqIHJlcXVlc3QgZm9yIGluamVjdGlvbiBvZiBhIGZyYW1ld29yayBzZXJ2aWNlLiAKKyAgICAgKiBmaXJlZCBmb3IgZXZlcnkgSmF2YSBFRSBjb21wb25lbnQgY2xhc3Mgc3VwcG9ydGluZyBpbmplY3Rpb24gdGhhdCBtYXkgYmUKKyAgICAgKiBpbnN0YW50aWF0ZWQgYnkgdGhlIGNvbnRhaW5lciBhdCBydW50aW1lLiBJbmplY3Rpb25zIHBvaW50cyBvZiBldmVyeQorICAgICAqIGRpc2NvdmVyZWQgZW5hYmxlZCBKYXZhIEVFIGNvbXBvbmVudCBpcyBjaGVja2VkIHRvIHNlZSBpZiB0aGVyZSBpcyBhCisgICAgICogcmVxdWVzdCBmb3IgaW5qZWN0aW9uIG9mIGEgZnJhbWV3b3JrIHNlcnZpY2UuCiAgICAgICovCiAgICAgdm9pZCBhZnRlclByb2Nlc3NJbmplY3Rpb25UYXJnZXQoQE9ic2VydmVzIFByb2Nlc3NJbmplY3Rpb25UYXJnZXQ8Pz4gcGIpewogICAgICAgICBkZWJ1ZygiQWZ0ZXJQcm9jZXNzSW5qZWN0aW9uVGFyZ2V0IiArIHBiLmdldEFubm90YXRlZFR5cGUoKS5nZXRCYXNlVHlwZSgpKTsKICAgICAgICAgU2V0PEluamVjdGlvblBvaW50PiBpcHMgPSBwYi5nZXRJbmplY3Rpb25UYXJnZXQoKS5nZXRJbmplY3Rpb25Qb2ludHMoKTsKICAgICAgICAgZGlzY292ZXJTZXJ2aWNlSW5qZWN0aW9uUG9pbnRzKGlwcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogT2JzZXJ2ZXIgZm9yIDxjb2RlPlByb2Nlc3NJbmplY3Rpb25UYXJnZXQ8L2NvZGU+IGV2ZW50cy4gVGhpcyBldmVudCBpcwotICAgICAqIGZpcmVkIGZpcmUgYW4gZXZlbnQgZm9yIGVhY2ggZW5hYmxlZCBiZWFuLCBpbnRlcmNlcHRvciBvciBkZWNvcmF0b3IgCi0gICAgICogZGVwbG95ZWQgaW4gYSBiZWFuIGFyY2hpdmUsIGJlZm9yZSByZWdpc3RlcmluZyB0aGUgQmVhbiBvYmplY3QuIAotICAgICAqIEluamVjdGlvbnMgcG9pbnRzIG9mIGV2ZXJ5IGRpc2NvdmVyZWQgZW5hYmxlZCBKYXZhIEVFIGNvbXBvbmVudCBpcyAKLSAgICAgKiBjaGVja2VkIHRvIHNlZSBpZiB0aGVyZSBpcyBhIHJlcXVlc3QgZm9yIGluamVjdGlvbiBvZiBhIGZyYW1ld29yayAKLSAgICAgKiBzZXJ2aWNlLiAKKyAgICAgKiBmaXJlZCBmaXJlIGFuIGV2ZW50IGZvciBlYWNoIGVuYWJsZWQgYmVhbiwgaW50ZXJjZXB0b3Igb3IgZGVjb3JhdG9yCisgICAgICogZGVwbG95ZWQgaW4gYSBiZWFuIGFyY2hpdmUsIGJlZm9yZSByZWdpc3RlcmluZyB0aGUgQmVhbiBvYmplY3QuCisgICAgICogSW5qZWN0aW9ucyBwb2ludHMgb2YgZXZlcnkgZGlzY292ZXJlZCBlbmFibGVkIEphdmEgRUUgY29tcG9uZW50IGlzCisgICAgICogY2hlY2tlZCB0byBzZWUgaWYgdGhlcmUgaXMgYSByZXF1ZXN0IGZvciBpbmplY3Rpb24gb2YgYSBmcmFtZXdvcmsKKyAgICAgKiBzZXJ2aWNlLgogICAgICAqLwogICAgIHZvaWQgYWZ0ZXJQcm9jZXNzQmVhbihAT2JzZXJ2ZXMgUHJvY2Vzc0JlYW4gcGIpewogICAgICAgICBhZnRlclByb2Nlc3NCZWFuQ2FsbGVkID0gdHJ1ZTsKQEAgLTEwNywyMiArMTA3LDIyIEBACiAKICAgICAvKgogICAgICAqIERpc2NvdmVyIGluamVjdGlvbiBwb2ludHMgd2hlcmUgdGhlIGZyYW1ld29yayBzZXJ2aWNlIGlzIHJlcXVlc3RlZAotICAgICAqIHRocm91Z2ggdGhlIDxjb2RlPkZyYW1ld29ya1NlcnZpY2U8L2NvZGU+IHF1YWxpZmllciBhbmQgYSBtYXAgaXMgCisgICAgICogdGhyb3VnaCB0aGUgPGNvZGU+RnJhbWV3b3JrU2VydmljZTwvY29kZT4gcXVhbGlmaWVyIGFuZCBhIG1hcCBpcwogICAgICAqIHBvcHVsYXRlZCBmb3IgYWxsIGZyYW1ld29yayBzZXJ2aWNlcyB0aGF0IGhhdmUgYmVlbiByZXF1ZXN0ZWQuCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGRpc2NvdmVyU2VydmljZUluamVjdGlvblBvaW50cyhTZXQ8SW5qZWN0aW9uUG9pbnQ+IGlwcykgewotICAgICAgICBmb3IgKEl0ZXJhdG9yPEluamVjdGlvblBvaW50PiBpdGVyYXRvciA9IGlwcy5pdGVyYXRvcigpOyAKKyAgICAgICAgZm9yIChJdGVyYXRvcjxJbmplY3Rpb25Qb2ludD4gaXRlcmF0b3IgPSBpcHMuaXRlcmF0b3IoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5oYXNOZXh0KCk7KSB7CiAgICAgICAgICAgICBJbmplY3Rpb25Qb2ludCBpbmplY3Rpb25Qb2ludCA9IGl0ZXJhdG9yLm5leHQoKTsKICAgICAgICAgICAgIFNldDxBbm5vdGF0aW9uPiBxdWFsaWZzID0gaW5qZWN0aW9uUG9pbnQuZ2V0UXVhbGlmaWVycygpOwotICAgICAgICAgICAgZm9yIChJdGVyYXRvcjxBbm5vdGF0aW9uPiBxdWFsaWZJdGVyID0gcXVhbGlmcy5pdGVyYXRvcigpOyAKKyAgICAgICAgICAgIGZvciAoSXRlcmF0b3I8QW5ub3RhdGlvbj4gcXVhbGlmSXRlciA9IHF1YWxpZnMuaXRlcmF0b3IoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFsaWZJdGVyLmhhc05leHQoKTspIHsKICAgICAgICAgICAgICAgICBBbm5vdGF0aW9uIGFubm90YXRpb24gPSBxdWFsaWZJdGVyLm5leHQoKTsKICAgICAgICAgICAgICAgICBpZiAoYW5ub3RhdGlvbi5hbm5vdGF0aW9uVHlwZSgpLmVxdWFscyhGcmFtZXdvcmtTZXJ2aWNlLmNsYXNzKSl7CiAgICAgICAgICAgICAgICAgICAgIHByaW50RGVidWdGb3JJbmplY3Rpb25Qb2ludChpbmplY3Rpb25Qb2ludCk7CiAgICAgICAgICAgICAgICAgICAgIC8vS2VlcCB0cmFjayBvZiBzZXJ2aWNlLXR5cGUgYW5kIGl0cyBhdHRyaWJ1dGVzCiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLSBJbmplY3Rpb24gcmVxdWVzdGVkIGZvciAiICsKLSAgICAgICAgICAgICAgICAgICAgCQkiZnJhbWV3b3JrIHNlcnZpY2UgdHlwZSAiICsgaW5qZWN0aW9uUG9pbnQuZ2V0VHlwZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyYW1ld29yayBzZXJ2aWNlIHR5cGUgIiArIGluamVjdGlvblBvaW50LmdldFR5cGUoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhbmQgYW5ub3RhdGVkIHdpdGggZHluYW1pYz0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBpbmplY3Rpb25Qb2ludC5nZXRBbm5vdGF0ZWQoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldEFubm90YXRpb24oRnJhbWV3b3JrU2VydmljZS5jbGFzcykKQEAgLTEzNCwzMSArMTM0LDMxIEBACiAgICAgICAgICAgICAgICAgICAgIC8vQWRkIHRvIGxpc3Qgb2YgZnJhbWV3b3JrIHNlcnZpY2VzIHRvIGJlIGluamVjdGVkCiAgICAgICAgICAgICAgICAgICAgIFR5cGUga2V5ID0gaW5qZWN0aW9uUG9pbnQuZ2V0VHlwZSgpOwogICAgICAgICAgICAgICAgICAgICBGcmFtZXdvcmtTZXJ2aWNlIHZhbHVlID0gaW5qZWN0aW9uUG9pbnQuZ2V0QW5ub3RhdGVkKCkKLSAgICAgICAgICAgICAgICAgICAgLmdldEFubm90YXRpb24oRnJhbWV3b3JrU2VydmljZS5jbGFzcyk7IAorICAgICAgICAgICAgICAgICAgICAuZ2V0QW5ub3RhdGlvbihGcmFtZXdvcmtTZXJ2aWNlLmNsYXNzKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFmcmFtZXdvcmtTZXJ2aWNlc1RvQmVJbmplY3RlZC5jb250YWluc0tleShrZXkpKXsKICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1ld29ya1NlcnZpY2VzVG9CZUluamVjdGVkLnB1dChrZXksIG5ldyBIYXNoU2V0PEZyYW1ld29ya1NlcnZpY2U+KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGZyYW1ld29ya1NlcnZpY2VzVG9CZUluamVjdGVkLmdldChrZXkpLmFkZCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihmcmFtZXdvcmtTZXJ2aWNlc1RvQmVJbmplY3RlZC5zaXplKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgotICAgICAqIE9ic2VydmVyIGZvciA8Y29kZT5BZnRlckJlYW5EaXNjb3Zlcnk8L2NvZGU+IGV2ZW50cy4gVGhpcyAKKyAgICAgKiBPYnNlcnZlciBmb3IgPGNvZGU+QWZ0ZXJCZWFuRGlzY292ZXJ5PC9jb2RlPiBldmVudHMuIFRoaXMKICAgICAgKiBvYnNlcnZlciBtZXRob2QgaXMgdXNlZCB0byByZWdpc3RlciA8Y29kZT5CZWFuPC9jb2RlPnMgZm9yIHRoZSBmcmFtZXdvcmsKLSAgICAgKiBzZXJ2aWNlcyB0aGF0IGhhdmUgYmVlbiByZXF1ZXN0ZWQgdG8gYmUgaW5qZWN0ZWQuIAorICAgICAqIHNlcnZpY2VzIHRoYXQgaGF2ZSBiZWVuIHJlcXVlc3RlZCB0byBiZSBpbmplY3RlZC4KICAgICAgKi8KICAgICB2b2lkIGFmdGVyQmVhbkRpc2NvdmVyeShAT2JzZXJ2ZXMgQWZ0ZXJCZWFuRGlzY292ZXJ5IGFiZCl7CiAgICAgICAgIGFmdGVyQmVhbkRpc2NvdmVyeUNhbGxlZCA9IHRydWU7CiAgICAgICAgIGRlYnVnKCJBZnRlciBCZWFuIERpc2NvdmVyeSIpOwotICAgICAgICBmb3IgKEl0ZXJhdG9yPFR5cGU+IGl0ZXJhdG9yID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlc1RvQmVJbmplY3RlZC5rZXlTZXQoKS5pdGVyYXRvcigpOyAKKyAgICAgICAgZm9yIChJdGVyYXRvcjxUeXBlPiBpdGVyYXRvciA9IHRoaXMuZnJhbWV3b3JrU2VydmljZXNUb0JlSW5qZWN0ZWQua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmhhc05leHQoKTspIHsKICAgICAgICAgICAgIFR5cGUgdHlwZSA9ICBpdGVyYXRvci5uZXh0KCk7CiAgICAgICAgICAgICAvL0lmIHRoZSBpbmplY3Rpb24gcG9pbnQncyB0eXBlIGlzIG5vdCBhIENsYXNzIG9yIEludGVyZmFjZSwgd2UKLSAgICAgICAgICAgIC8vZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIHRoaXMuIAorICAgICAgICAgICAgLy9kb24ndCBrbm93IGhvdyB0byBoYW5kbGUgdGhpcy4KICAgICAgICAgICAgIGlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzcykpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVua25vd24gdHlwZToiICsgdHlwZSk7CiAgICAgICAgICAgICAgICAgYWJkLmFkZERlZmluaXRpb25FcnJvcihuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oCkBAIC0xNzMsMTAgKzE3MywxMCBAQAogCiAgICAgLyoKICAgICAgKiBBZGQgYSA8Y29kZT5CZWFuPC9jb2RlPiBmb3IgdGhlIGZyYW1ld29yayBzZXJ2aWNlIHJlcXVlc3RlZC4gSW5zdGFudGlhdGUKLSAgICAgKiBvciBkaXNjb3ZlciB0aGUgYmVhbiBmcm9tIHRoZSBmcmFtZXdvcmsgc2VydmljZSByZWdpc3RyeSwgCisgICAgICogb3IgZGlzY292ZXIgdGhlIGJlYW4gZnJvbSB0aGUgZnJhbWV3b3JrIHNlcnZpY2UgcmVnaXN0cnksCiAgICAgICogYW5kIHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgc2VydmljZSBpZiBhIGR5bmFtaWMgcmVmZXJlbmNlIGlzIHJlcXVlc3RlZC4KICAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgYWRkQmVhbihBZnRlckJlYW5EaXNjb3ZlcnkgYWJkLCBmaW5hbCBUeXBlIHR5cGUsIAorICAgIHByaXZhdGUgdm9pZCBhZGRCZWFuKEFmdGVyQmVhbkRpc2NvdmVyeSBhYmQsIGZpbmFsIFR5cGUgdHlwZSwKICAgICAgICAgICAgIGZpbmFsIFNldDxGcmFtZXdvcmtTZXJ2aWNlPiBmcmFtZXdvcmtTZXJ2aWNlcykgewogICAgICAgICBmb3IgKEl0ZXJhdG9yPEZyYW1ld29ya1NlcnZpY2U+IGl0ZXJhdG9yID0gZnJhbWV3b3JrU2VydmljZXMuaXRlcmF0b3IoKTsgaXRlcmF0b3IKICAgICAgICAgICAgICAgICAuaGFzTmV4dCgpOykgewpAQCAtMTg1LDcgKzE4NSw3IEBACiAgICAgICAgICAgICBhYmQuYWRkQmVhbihuZXcgRnJhbWV3b3JrU2VydmljZUJlYW4odHlwZSwgZnJhbWV3b3JrU2VydmljZSkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAKICAgICBwcml2YXRlIGZpbmFsIGNsYXNzIEZyYW1ld29ya1NlcnZpY2VCZWFuIGltcGxlbWVudHMgQmVhbiB7CiAgICAgICAgIHByaXZhdGUgZmluYWwgVHlwZSB0eXBlOwpAQCAtMjI0LDcgKzIyNCw3IEBACiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgICAgICByZXR1cm4gdHlwZSArICJfZHluYW1pY18iICsgZnJhbWV3b3JrU2VydmljZS5keW5hbWljKCkKLSAgICAgICAgICAgICAgICAgICAgKyAiX2NyaXRlcmlhXyIgKyBmcmFtZXdvcmtTZXJ2aWNlLnNlcnZpY2VDcml0ZXJpYSgpIAorICAgICAgICAgICAgICAgICAgICArICJfY3JpdGVyaWFfIiArIGZyYW1ld29ya1NlcnZpY2Uuc2VydmljZUNyaXRlcmlhKCkKICAgICAgICAgICAgICAgICAgICAgKyAiX3dhaXRUaW1lb3V0IiArIGZyYW1ld29ya1NlcnZpY2Uud2FpdFRpbWVvdXQoKTsKICAgICAgICAgfQogCkBAIC0yMzUsNyArMjM1LDcgQEAKICAgICAgICAgICAgIHMuYWRkKG5ldyBBbm5vdGF0aW9uTGl0ZXJhbDxBbnk+KCkge30pOwogICAgICAgICAgICAgLy9BZGQgdGhlIGFwcHJvcHJpYXRlIHBhcmFtZXRlcnMgdG8gdGhlIEZyYW1ld29ya1NlcnZpY2UgcXVhbGlmaWVyCiAgICAgICAgICAgICAvL2FzIHJlcXVlc3RlZCBpbiB0aGUgaW5qZWN0aW9uIHBvaW50Ci0gICAgICAgICAgICBzLmFkZChuZXcgRnJhbWV3b3JrU2VydmljZVF1YWxpZmllclR5cGUoZnJhbWV3b3JrU2VydmljZSkpOyAKKyAgICAgICAgICAgIHMuYWRkKG5ldyBGcmFtZXdvcmtTZXJ2aWNlUXVhbGlmaWVyVHlwZShmcmFtZXdvcmtTZXJ2aWNlKSk7CiAgICAgICAgICAgICByZXR1cm4gczsKICAgICAgICAgfQogCkBAIC0yNzIsNyArMjcyLDcgQEAKICAgICAgKiBSZXByZXNlbnRzIGFuIGFubm90YXRpb24gdHlwZSBpbnN0YW5jZSBvZiBGcmFtZXdvcmtTZXJ2aWNlCiAgICAgICogd2l0aCBwYXJhbWV0ZXJzIGVxdWFsIHRvIHRob3NlIHNwZWNpZmllZCBpbiB0aGUgaW5qZWN0aW9uIHBvaW50CiAgICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBGcmFtZXdvcmtTZXJ2aWNlUXVhbGlmaWVyVHlwZSAKKyAgICBwcml2YXRlIGZpbmFsIGNsYXNzIEZyYW1ld29ya1NlcnZpY2VRdWFsaWZpZXJUeXBlCiAgICAgZXh0ZW5kcyBBbm5vdGF0aW9uTGl0ZXJhbDxGcmFtZXdvcmtTZXJ2aWNlPiBpbXBsZW1lbnRzIEZyYW1ld29ya1NlcnZpY2UgewogICAgICAgICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlQ3JpdGVyaWEgPSAiIjsKICAgICAgICAgcHJpdmF0ZSBib29sZWFuIGR5bmFtaWMgPSBmYWxzZTsKQEAgLTI5OCwxMSArMjk4LDExIEBACiAgICAgICAgICAgICByZXR1cm4gdGhpcy53YWl0VGltZW91dDsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBkZWJ1ZyhTdHJpbmcgc3RyaW5nKSB7CiAgICAgICAgIGlmKERFQlVHX0VOQUJMRUQpCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15RXh0ZW5zaW9uOjogIiArIHN0cmluZyk7Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHByaW50RGVidWdGb3JJbmplY3Rpb25Qb2ludChJbmplY3Rpb25Qb2ludCBpbmplY3Rpb25Qb2ludCkgewpAQCAtMzE5LDUgKzMxOSw1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb2ludAogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L2Z3ay9GcmFtZXdvcmtTZXJ2aWNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L2Z3ay9GcmFtZXdvcmtTZXJ2aWNlLmphdmEKaW5kZXggNjhlZjQ2ZC4uY2ZhNzBmZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9md2svRnJhbWV3b3JrU2VydmljZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9zZXJ2bGV0L3Rlc3QvZndrL0ZyYW1ld29ya1NlcnZpY2UuamF2YQpAQCAtMzMsMjYgKzMzLDI2IEBACiAKIC8qKgogICogQSBDREkgUXVhbGlmaWVyIHRoYXQgcmVwcmVzZW50cyBhIHJlZmVyZW5jZSB0byBhCi0gKiBzZXJ2aWNlIGluIHRoZSBmcmFtZXdvcmsuIElmIHRoaXMgcXVhbGlmaWVycyBhbm5vdGF0ZXMgYW4gaW5qZWN0aW9uIHBvaW50LCAKKyAqIHNlcnZpY2UgaW4gdGhlIGZyYW1ld29yay4gSWYgdGhpcyBxdWFsaWZpZXJzIGFubm90YXRlcyBhbiBpbmplY3Rpb24gcG9pbnQsCiAgKiB0aGUgZnJhbWV3b3JrIGV4dGVuc2lvbiBkaXNjb3ZlcnMgYW5kIGluc3RhbnRpYXRlcwogICogYSBzZXJ2aWNlIGltcGxlbWVudGluZyB0aGUgc2VydmljZSBpbnRlcmZhY2UgdHlwZSBvZiB0aGUgaW5qZWN0aW9uIHBvaW50CiAgKiBhbmQgbWFrZXMgaXQgYXZhaWxhYmxlIGZvciBpbmplY3Rpb24gdG8gdGhhdCBpbmplY3Rpb24gcG9pbnQuCi0gKi8gCisgKi8KIHB1YmxpYyBAaW50ZXJmYWNlIEZyYW1ld29ya1NlcnZpY2UgewogICAgIC8qKgogICAgICAqIERldGVybWluZXMgaWYgdGhlIHNlcnZpY2UgcmVmZXJlbmNlIHRoYXQgaXMgaW5qZWN0ZWQKICAgICAgKiByZWZlcnMgdG8gYSBkeW5hbWljIHByb3h5IG9yIHRoZSBhY3R1YWwgc2VydmljZSByZWZlcmVuY2Ugb2J0YWluZWQKLSAgICAgKiBmcm9tIHRoZSBmcmFtZXdvcmsgc2VydmljZSByZWdpc3RyeSAgCisgICAgICogZnJvbSB0aGUgZnJhbWV3b3JrIHNlcnZpY2UgcmVnaXN0cnkKICAgICAgKi8KICAgIGJvb2xlYW4gZHluYW1pYygpIGRlZmF1bHQgZmFsc2U7IC8vZHluYW1pYwotICAgCisKICAgIC8qKgogICAgICogc2VydmljZSBkaXNjb3ZlcnkgY3JpdGVyaWEKICAgICAqLwotICAgU3RyaW5nIHNlcnZpY2VDcml0ZXJpYSgpIGRlZmF1bHQgIiI7IAotICAgCisgICBTdHJpbmcgc2VydmljZUNyaXRlcmlhKCkgZGVmYXVsdCAiIjsKKwogICAgLyoqCiAgICAgKiB3YWl0IHNwZWNpZmllZCBpbiBtaWxsaXMuIC0xIGluZGljYXRlcyBpbmRlZmluaXRlIHdhaXQKICAgICAqLwotICAgaW50IHdhaXRUaW1lb3V0KCkgZGVmYXVsdCAtMTsgCisgICBpbnQgd2FpdFRpbWVvdXQoKSBkZWZhdWx0IC0xOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9md2svU29tZUZ3a1NlcnZpY2VJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L2Z3ay9Tb21lRndrU2VydmljZUltcGwuamF2YQppbmRleCBmYjA4YjA4Li5hMmUxODc2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L2Z3ay9Tb21lRndrU2VydmljZUltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L2Z3ay9Tb21lRndrU2VydmljZUltcGwuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSB0ZXN0LmZ3azsKIAogcHVibGljIGNsYXNzIFNvbWVGd2tTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIFNvbWVGd2tTZXJ2aWNlSW50ZXJmYWNlIHsKLSAgICAKKwogICAgIHB1YmxpYyBTb21lRndrU2VydmljZUltcGwoU3RyaW5nIHQpewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNvbWVGcmFtZXdvcmtDbGFzczoiICsgdCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1BvcnRhYmxlRXh0ZW5zaW9uQmVhblJlZ2lzdHJhdGlvblRlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L3NlcnZsZXQvUG9ydGFibGVFeHRlbnNpb25CZWFuUmVnaXN0cmF0aW9uVGVzdFNlcnZsZXQuamF2YQppbmRleCA5YjlhY2NhLi5jYWE2MDExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L3NlcnZsZXQvUG9ydGFibGVFeHRlbnNpb25CZWFuUmVnaXN0cmF0aW9uVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L3NlcnZsZXQvUG9ydGFibGVFeHRlbnNpb25CZWFuUmVnaXN0cmF0aW9uVGVzdFNlcnZsZXQuamF2YQpAQCAtNDgsMTAgKzQ4LDEwIEBACiAgICAgQEluamVjdAogICAgIEBQcmVmZXJyZWQKICAgICBUZXN0QmVhbiB0YjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBCZWFuTWFuYWdlciBibTsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBARnJhbWV3b3JrU2VydmljZShzZXJ2aWNlQ3JpdGVyaWE9IlRFU1QiLCBkeW5hbWljPXRydWUpCiAgICAgU29tZUZ3a1NlcnZpY2VJbnRlcmZhY2Ugc2ZjX3Byb3h5OwpAQCAtODIsMjUgKzgyLDI1IEBACiAgICAgICAgICAgICAgICAgICAgICsgVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQ7CiAgICAgICAgIGlmICghVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2UudHJpbSgpLmVxdWFscygiIikpCiAgICAgICAgICAgICBtc2cgKz0gVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2U7Ci0gICAgICAgIAorCiAgICAgICAgIC8vY2hlY2sgaWYgb3VyIHBvcnRhYmxlIGV4dGVuc2lvbiB3YXMgY2FsbGVkCiAgICAgICAgIGlmICghU2VydmljZUZyYW1ld29ya0V4dGVuc2lvbi5iZWZvcmVCZWFuRGlzY292ZXJ5Q2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJQb3J0YWJsZSBFeHRlbnNpb24gbGlmZWN5Y2xlIG9ic2VydmVyIG1ldGhvZDogIiArCi0gICAgICAgICAgICAJCSJiZWZvcmVCZWFuRGlzY292ZXJ5IG5vdCBjYWxsZWQiOworICAgICAgICAgICAgICAgICAgICAiYmVmb3JlQmVhbkRpc2NvdmVyeSBub3QgY2FsbGVkIjsKIAogICAgICAgICBpZiAoIVNlcnZpY2VGcmFtZXdvcmtFeHRlbnNpb24uYWZ0ZXJCZWFuRGlzY292ZXJ5Q2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJQb3J0YWJsZSBFeHRlbnNpb24gbGlmZWN5Y2xlIG9ic2VydmVyIG1ldGhvZDogIiArCi0gICAgICAgICAgICAJCSJhZnRlckJlYW5EaXNjb3Zlcnkgbm90IGNhbGxlZCBvciBpbmplY3Rpb24gb2YgQmVhbk1hbmFnZXIgIiArCi0gICAgICAgICAgICAJCSJpbiBhbiBvYnNlcnZlciBtZXRob2QgZmFpbGVkIjsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICJhZnRlckJlYW5EaXNjb3Zlcnkgbm90IGNhbGxlZCBvciBpbmplY3Rpb24gb2YgQmVhbk1hbmFnZXIgIiArCisgICAgICAgICAgICAgICAgICAgICJpbiBhbiBvYnNlcnZlciBtZXRob2QgZmFpbGVkIjsKKwogICAgICAgICBpZiAoIVNlcnZpY2VGcmFtZXdvcmtFeHRlbnNpb24ucHJvY2Vzc0Fubm90YXRlZFR5cGVDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlBvcnRhYmxlIEV4dGVuc2lvbiBsaWZlY3ljbGUgb2JzZXJ2ZXIgbWV0aG9kOiBwcm9jZXNzICIgKwotICAgICAgICAgICAgCQkiYW5ub3RhdGVkIHR5cGUgbm90IGNhbGxlZCI7CisgICAgICAgICAgICAgICAgICAgICJhbm5vdGF0ZWQgdHlwZSBub3QgY2FsbGVkIjsKIAogICAgICAgICAvL0JlYW5NYW5hZ2VyIGxvb2t1cAogICAgICAgICBpZiAoYm0gPT0gbnVsbCkKICAgICAgICAgICAgIG1zZyArPSAiSW5qZWN0aW9uIG9mIEJlYW5NYW5hZ2VyIGludG8gc2VydmxldCBmYWlsZWQiOwotICAgICAgICAKKwogICAgICAgICAvL0dldCBhbGwgYmVhbnMgYW5kIGNvdW50IHRoZSBudW1iZXIgb2YgYmVhbnMgaW4gdGhlIHRlc3QgcGFja2FnZQogICAgICAgICBTZXQ8QmVhbjw/Pj4gYWxsQmVhbnMgPSBibS5nZXRCZWFucyhPYmplY3QuY2xhc3MsIG5ldyBBbm5vdGF0aW9uTGl0ZXJhbDxBbnk+KCl7fSk7CiAKQEAgLTExMywxMSArMTEzLDExIEBACiAgICAgICAgIC8vY2hlY2sgaWYgcHJveGllZCBzZXJ2aWNlIHJlZmVyZW5jZSBpcyBpbmRlZWQgcHJveGllZAogICAgICAgICBpZiAoIVByb3h5LmlzUHJveHlDbGFzcyhzZmNfcHJveHkuZ2V0Q2xhc3MoKSkpCiAgICAgICAgICAgICBtc2cgKz0gIkV4cGVjdGVkIFByb3hpZWQgc2VydmljZSByZWZlcmVuY2UsIGJ1dCBnb3QgYmFjayBhbiAiICsKLSAgICAgICAgICAgIAkJInVucHJveGllZCBzZXJ2aWNlIHJlZmVyZW5jZSAiOworICAgICAgICAgICAgICAgICAgICAidW5wcm94aWVkIHNlcnZpY2UgcmVmZXJlbmNlICI7CiAgICAgICAgIC8vaW52b2tlIGEgbWV0aG9kIG8KICAgICAgICAgaWYoIXNmY19wcm94eS5mb29NZXRob2QoKSkKICAgICAgICAgICAgIG1zZyArPSAiaW52b2NhdGlvbiBvZiBtZXRob2Qgb24gcHJveGllZCBzZXJ2aWNlIGZhaWxlZCI7Ci0gICAgICAgIAorCiAgICAgICAgIC8vY2hlY2sgaWYgdW5wcm94aWVkIHNlcnZpY2UgcmVmZXJlbmNlIGlzIG5vdCBwcm94aWVkCiAgICAgICAgIGlmIChQcm94eS5pc1Byb3h5Q2xhc3Moc2ZjX3VucHJveGllZC5nZXRDbGFzcygpKSkKICAgICAgICAgICAgIG1zZyArPSAiRXhwZWN0ZWQgdW5Qcm94aWVkIHNlcnZpY2UgcmVmZXJlbmNlLCBidXQgZ290IGJhY2sgYW4gIiArCkBAIC0xMjUsMzIgKzEyNSwzMiBAQAogICAgICAgICAvL2ludm9rZSBhIG1ldGhvZCBvCiAgICAgICAgIGlmKCFzZmNfdW5wcm94aWVkLmZvb01ldGhvZCgpKQogICAgICAgICAgICAgbXNnICs9ICJpbnZvY2F0aW9uIG9mIG1ldGhvZCBvbiB1bnByb3hpZWQgc2VydmljZSBmYWlsZWQiOwotICAgICAgICAKKwogICAgICAgICBmb3IgKEl0ZXJhdG9yPEJlYW48Pz4+IGl0ZXJhdG9yID0gYWxsQmVhbnMuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOykgewogICAgICAgICAgICAgQmVhbjw/PiBiZWFuID0gaXRlcmF0b3IubmV4dCgpOwogICAgICAgICAgICAgaWYgKGJlYW4uZ2V0QmVhbkNsYXNzKCkuZ2V0TmFtZSgpLmNvbnRhaW5zKCJTb21lRnJhbWV3b3JrIikpewogICAgICAgICAgICAgICAgIG1zZyArPSB0ZXN0RnJhbWV3b3JrQmVhbihiZWFuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoIVNlcnZpY2VGcmFtZXdvcmtFeHRlbnNpb24uYWZ0ZXJQcm9jZXNzQmVhbkNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiUG9ydGFibGUgRXh0ZW5zaW9uIGxpZmVjeWNsZSBvYnNlcnZlciBtZXRob2Q6IGFmdGVyICIgKwogICAgICAgICAgICAgICAgICAgICAiUHJvY2Vzc0JlYW4gbm90IGNhbGxlZCBmb3IgYSBiZWFuIHJlZ2lzdGVyZWQgYnkgdGhlIHBvcnRhYmxlIiArCiAgICAgICAgICAgICAgICAgICAgICJleHRlbnNpb24iOwotICAgICAgICAKKwogICAgICAgICB3cml0ZXIud3JpdGUobXNnICsgIlxuIik7CiAgICAgfQogCiAKICAgICBwcml2YXRlIFN0cmluZyB0ZXN0RnJhbWV3b3JrQmVhbihCZWFuPD8+IGJlYW4pIHsKICAgICAgICAgU3RyaW5nIG1zZyA9ICIiOwotICAgICAgICBpZiAoIWJlYW4uZ2V0UXVhbGlmaWVycygpLmNvbnRhaW5zKG5ldyBBbm5vdGF0aW9uTGl0ZXJhbDxBbnk+KCkge30pIAotICAgICAgICAgICAgICAgIHx8ICFiZWFuLmdldFF1YWxpZmllcnMoKS5jb250YWlucyhuZXcgQW5ub3RhdGlvbkxpdGVyYWw8RGVmYXVsdD4oKSB7fSkpICAKKyAgICAgICAgaWYgKCFiZWFuLmdldFF1YWxpZmllcnMoKS5jb250YWlucyhuZXcgQW5ub3RhdGlvbkxpdGVyYWw8QW55PigpIHt9KQorICAgICAgICAgICAgICAgIHx8ICFiZWFuLmdldFF1YWxpZmllcnMoKS5jb250YWlucyhuZXcgQW5ub3RhdGlvbkxpdGVyYWw8RGVmYXVsdD4oKSB7fSkpCiAgICAgICAgICAgICBtc2cgKz0gIkZyYW1ld29ya0JlYW4gZG9lcyBub3QgaGF2ZSB0aGUgZGVmYXVsdCBleHBlY3RlZCBxdWFsaWZpZXJzIjsKLSAgICAgICAgCisKICAgICAgICAgaWYgKCFiZWFuLmdldFNjb3BlKCkuZXF1YWxzKERlcGVuZGVudC5jbGFzcykpCiAgICAgICAgICAgICBtc2cgKz0gIkZyYW1ld29ya0JlYW4gc2NvcGUgaXMgbm90IGRlcGVuZGVudCI7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKCFiZWFuLmdldEJlYW5DbGFzcygpLmdldE5hbWUoKS5lcXVhbHMoU29tZUZ3a1NlcnZpY2VJbXBsLmNsYXNzLmdldE5hbWUoKSkpCiAgICAgICAgICAgICBtc2cgKz0gIkZyYW1ld29yayBCZWFuOiBJbmNvcnJlY3QgYmVhbiBjbGFzcyI7CiAgICAgICAgIHJldHVybiBtc2c7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wYWNrYWdlLXByaXZhdGUtZXh0ZW5zaW9uLWNvbnN0cnVjdG9yL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wYWNrYWdlLXByaXZhdGUtZXh0ZW5zaW9uLWNvbnN0cnVjdG9yL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGRkMWMxMi4uZjEwNGFkNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcGFja2FnZS1wcml2YXRlLWV4dGVuc2lvbi1jb25zdHJ1Y3Rvci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3BhY2thZ2UtcHJpdmF0ZS1leHRlbnNpb24tY29uc3RydWN0b3IvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1wYWNrYWdlLXByaXZhdGUtY29uc3RydWN0b3ItaW4tcG9ydGFibGUtZXh0ZW5zaW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wYWNrYWdlLXByaXZhdGUtZXh0ZW5zaW9uLWNvbnN0cnVjdG9yL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3BhY2thZ2UtcHJpdmF0ZS1leHRlbnNpb24tY29uc3RydWN0b3IvYnVpbGQueG1sCmluZGV4IDg4OTQ2ODguLjI1NTY1MzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3BhY2thZ2UtcHJpdmF0ZS1leHRlbnNpb24tY29uc3RydWN0b3IvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3BhY2thZ2UtcHJpdmF0ZS1leHRlbnNpb24tY29uc3RydWN0b3IvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDgsMjQgKzQ4LDI0IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+Ci0gICAgICAgIAk8cGFyYW0gbmFtZT0iY2RpLWV4dGVuc2lvbi5zZXJ2aWNlIiB2YWx1ZT0iY2RpLWV4dGVuc2lvbi5zZXJ2aWNlIi8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY2RpLWV4dGVuc2lvbi5zZXJ2aWNlIiB2YWx1ZT0iY2RpLWV4dGVuc2lvbi5zZXJ2aWNlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzcsMTAgKzc3LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcGFja2FnZS1wcml2YXRlLWV4dGVuc2lvbi1jb25zdHJ1Y3Rvci9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcGFja2FnZS1wcml2YXRlLWV4dGVuc2lvbi1jb25zdHJ1Y3Rvci9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IDYxYmNmYTcuLjUzYmQ5ZjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3BhY2thZ2UtcHJpdmF0ZS1leHRlbnNpb24tY29uc3RydWN0b3IvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wYWNrYWdlLXByaXZhdGUtZXh0ZW5zaW9uLWNvbnN0cnVjdG9yL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcG9ydGFibGUgZXh0ZW5zaW9ucyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU5LDcgKzU5LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk4LDEwICs5OCwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcGFja2FnZS1wcml2YXRlLWV4dGVuc2lvbi1jb25zdHJ1Y3Rvci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcGFja2FnZS1wcml2YXRlLWV4dGVuc2lvbi1jb25zdHJ1Y3Rvci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCmluZGV4IGExY2Y3NjguLjcxYTg4NDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3BhY2thZ2UtcHJpdmF0ZS1leHRlbnNpb24tY29uc3RydWN0b3Ivc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wYWNrYWdlLXByaXZhdGUtZXh0ZW5zaW9uLWNvbnN0cnVjdG9yL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKQEAgLTI5LDIzICsyOSwyMyBAQAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKICAgICBwdWJsaWMgc3RhdGljIGludCBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgPSAwOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGVycm9yTWVzc2FnZSA9ICIiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3REZXBlbmRlbnRCZWFuIHRiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IoUGFja2FnZVByaXZhdGVDb25zdHJ1Y3RvckV4dGVuc2lvbiBteWV4KXsgLy9JbmplY3Rpb24gb2YgcG9ydGFibGUgZXh0ZW5zaW9uIGluIGEgYmVhbgogICAgICAgICBpZihteWV4ID09IG51bGwpIHsKICAgICAgICAgICAgIGVycm9yTWVzc2FnZSArPSAiUG9ydGFibGUgRXh0ZW5zaW9uIEluamVjdGlvbiBpbiBJbnRlcmNlcHRvciBmYWlsZWQiOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBtYW5hZ2VUcmFuc2FjdGlvbihJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRyYW5zYWN0aW9uSW50ZXJjZXB0b3I6OkFyb3VuZEludm9rZSIpOwogICAgICAgICBpZiAodGIgPT0gbnVsbCkgZXJyb3JNZXNzYWdlICs9ICJEZXBlbmRlbmN5IEluamVjdGlvbiAiICsKLSAgICAgICAgCQkiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CisgICAgICAgICAgICAgICAgImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOwogICAgICAgICBhcm91bmRJbnZva2VDYWxsZWQgPSB0cnVlOwogICAgICAgICBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgKys7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcGFja2FnZS1wcml2YXRlLWV4dGVuc2lvbi1jb25zdHJ1Y3Rvci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcGFja2FnZS1wcml2YXRlLWV4dGVuc2lvbi1jb25zdHJ1Y3Rvci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCmluZGV4IDk4Zjg1ZDQuLjhiZDk4Y2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3BhY2thZ2UtcHJpdmF0ZS1leHRlbnNpb24tY29uc3RydWN0b3Ivc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wYWNrYWdlLXByaXZhdGUtZXh0ZW5zaW9uLWNvbnN0cnVjdG9yL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKQEAgLTMxLDUgKzMxLDUgQEAKIEBJbnRlcmNlcHRvckJpbmRpbmcKIHB1YmxpYyBAaW50ZXJmYWNlIFRyYW5zYWN0aW9uYWwgewogCi0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3BhY2thZ2UtcHJpdmF0ZS1leHRlbnNpb24tY29uc3RydWN0b3Ivc2VydmxldC90ZXN0L2V4dGVuc2lvbi9JbnRlcmNlcHRvcnMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3BhY2thZ2UtcHJpdmF0ZS1leHRlbnNpb24tY29uc3RydWN0b3Ivc2VydmxldC90ZXN0L2V4dGVuc2lvbi9JbnRlcmNlcHRvcnMuamF2YQppbmRleCBjYzU4ZDZmLi5mNTdlY2EyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wYWNrYWdlLXByaXZhdGUtZXh0ZW5zaW9uLWNvbnN0cnVjdG9yL3NlcnZsZXQvdGVzdC9leHRlbnNpb24vSW50ZXJjZXB0b3JzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcGFja2FnZS1wcml2YXRlLWV4dGVuc2lvbi1jb25zdHJ1Y3Rvci9zZXJ2bGV0L3Rlc3QvZXh0ZW5zaW9uL0ludGVyY2VwdG9ycy5qYXZhCkBAIC0yMSwxNCArMjEsMTQgQEAKIAogcHVibGljIGNsYXNzIEludGVyY2VwdG9ycwogewotICAgCisKICAgIEBJbmplY3QKICAgIHByaXZhdGUgUGFja2FnZVByaXZhdGVDb25zdHJ1Y3RvckV4dGVuc2lvbiBpbnRlcmNlcHRvckV4dGVuc2lvbjsKLSAgIAorCiAgICBwcml2YXRlIEludGVyY2VwdG9ycygpCiAgICB7CiAgICB9Ci0gICAKKwogICAgcHVibGljIGJvb2xlYW4gaXNJbnRlcmNlcHRvckVuYWJsZWQoQ2xhc3M8Pz4gY2xhenopCiAgICB7CiAgICAgICByZXR1cm4gaW50ZXJjZXB0b3JFeHRlbnNpb24uZ2V0RW5hYmxlZEludGVyY2VwdG9ycygpLmNvbnRhaW5zKGNsYXp6KTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3BhY2thZ2UtcHJpdmF0ZS1leHRlbnNpb24tY29uc3RydWN0b3Ivc2VydmxldC90ZXN0L2V4dGVuc2lvbi9QYWNrYWdlUHJpdmF0ZUNvbnN0cnVjdG9yRXh0ZW5zaW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wYWNrYWdlLXByaXZhdGUtZXh0ZW5zaW9uLWNvbnN0cnVjdG9yL3NlcnZsZXQvdGVzdC9leHRlbnNpb24vUGFja2FnZVByaXZhdGVDb25zdHJ1Y3RvckV4dGVuc2lvbi5qYXZhCmluZGV4IDAwNWZhMzIuLjMyZGJiYTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3BhY2thZ2UtcHJpdmF0ZS1leHRlbnNpb24tY29uc3RydWN0b3Ivc2VydmxldC90ZXN0L2V4dGVuc2lvbi9QYWNrYWdlUHJpdmF0ZUNvbnN0cnVjdG9yRXh0ZW5zaW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcGFja2FnZS1wcml2YXRlLWV4dGVuc2lvbi1jb25zdHJ1Y3Rvci9zZXJ2bGV0L3Rlc3QvZXh0ZW5zaW9uL1BhY2thZ2VQcml2YXRlQ29uc3RydWN0b3JFeHRlbnNpb24uamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICB0aGlzLmVuYWJsZWRJbnRlcmNlcHRvcnMgPSBDb2xsZWN0aW9ucy5zeW5jaHJvbml6ZWRTZXQobmV3CiAgICAgICAgICAgICAgICAgSGFzaFNldDxDbGFzczw/Pj4oKSk7CiAgICAgfQotICAgIAorCiAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgIHZvaWQgb2JzZXJ2ZUludGVyY2VwdG9ycyhAT2JzZXJ2ZXMgUHJvY2Vzc0JlYW48Pz4gcG1iKQogICAgewpAQCAtNTIsMTcgKzUyLDE3IEBACiAgICAgICAgICB0aGlzLmVuYWJsZWRJbnRlcmNlcHRvcnMuYWRkKHBtYi5nZXRCZWFuKCkuZ2V0QmVhbkNsYXNzKCkpOwogICAgICAgfQogICAgfQotICAgCisKICAgIENvbGxlY3Rpb248Q2xhc3M8Pz4+IGdldEVuYWJsZWRJbnRlcmNlcHRvcnMoKQogICAgewogICAgICAgcmV0dXJuIGVuYWJsZWRJbnRlcmNlcHRvcnM7CiAgICB9Ci0gICAgCisKICAgICB2b2lkIGJlZm9yZUJlYW5EaXNjb3ZlcnkoQE9ic2VydmVzIEJlZm9yZUJlYW5EaXNjb3ZlcnkgYmRkKXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeUV4dGVuc2lvbjo6YmVmb3JlQmVhbkRpc2NvdmVyeSIgKyBiZGQpOwogICAgICAgICBiZWZvcmVCZWFuRGlzY292ZXJ5Q2FsbGVkID0gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICA8VD4gdm9pZCBwcm9jZXNzQW5ub3RhdGVkVHlwZShAT2JzZXJ2ZXMgUHJvY2Vzc0Fubm90YXRlZFR5cGU8VD4gcGF0KXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeUV4dGVuc2lvbjpQcm9jZXNzIGFubm90YXRlZCB0eXBlIiArIHBhdC5nZXRBbm5vdGF0ZWRUeXBlKCkuZ2V0QmFzZVR5cGUoKSk7CiAgICAgICAgIHByb2Nlc3NBbm5vdGF0ZWRUeXBlQ2FsbGVkID0gdHJ1ZTsKQEAgLTczLDEwICs3MywxMCBAQAogICAgICAgICAgICAgcGF0LnZldG8oKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHZvaWQgYWZ0ZXJCZWFuRGlzY292ZXJ5KEBPYnNlcnZlcyBBZnRlckJlYW5EaXNjb3ZlcnkgYWJkLCBCZWFuTWFuYWdlciBibSl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXlFeHRlbnNpb246IGFiZDogIiArIGFiZCArICIgQmVhbk1hbmFnZXI6ICIgKyBibSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChibSAhPSBudWxsKSB7CiAgICAgICAgICAgICAvL2Vuc3VyZSBhIHZhbGlkIEJlYW5NYW5hZ2VyIGlzIGluamVjdGVkCiAgICAgICAgICAgICBhZnRlckJlYW5EaXNjb3ZlcnlDYWxsZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcGFja2FnZS1wcml2YXRlLWV4dGVuc2lvbi1jb25zdHJ1Y3Rvci9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9QYWNrYWdlUHJpdmF0ZUNvbnN0cnVjdG9ySW5Qb3J0YWJsZUV4dGVuc2lvblRlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wYWNrYWdlLXByaXZhdGUtZXh0ZW5zaW9uLWNvbnN0cnVjdG9yL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1BhY2thZ2VQcml2YXRlQ29uc3RydWN0b3JJblBvcnRhYmxlRXh0ZW5zaW9uVGVzdFNlcnZsZXQuamF2YQppbmRleCAzZGY4OGIyLi42MTZjZDY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wYWNrYWdlLXByaXZhdGUtZXh0ZW5zaW9uLWNvbnN0cnVjdG9yL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1BhY2thZ2VQcml2YXRlQ29uc3RydWN0b3JJblBvcnRhYmxlRXh0ZW5zaW9uVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wYWNrYWdlLXByaXZhdGUtZXh0ZW5zaW9uLWNvbnN0cnVjdG9yL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1BhY2thZ2VQcml2YXRlQ29uc3RydWN0b3JJblBvcnRhYmxlRXh0ZW5zaW9uVGVzdFNlcnZsZXQuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgVGVzdEJlYW4gdGI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgQmVhbk1hbmFnZXIgYm07CiAKQEAgLTY0LDI1ICs2NCwyNSBAQAogICAgICAgICAgICAgICAgICAgICArIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50OwogICAgICAgICBpZiAoIVRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlLnRyaW0oKS5lcXVhbHMoIiIpKQogICAgICAgICAgICAgbXNnICs9IFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlOwotICAgICAgICAKKwogICAgICAgICAvL2NoZWNrIGlmIG91ciBwb3J0YWJsZSBleHRlbnNpb24gd2FzIGNhbGxlZAogICAgICAgICBpZiAoIVBhY2thZ2VQcml2YXRlQ29uc3RydWN0b3JFeHRlbnNpb24ucGFja2FnZVByaXZhdGVDb25zdHJ1Y3RvckNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiUG9ydGFibGUgRXh0ZW5zaW9uIHBhY2thZ2UgcHJpdmF0ZSBjb25zdHJ1Y3RvcjogIG5vdCBjYWxsZWQiOwotICAgICAgICAKKwogICAgICAgICBpZiAoIVBhY2thZ2VQcml2YXRlQ29uc3RydWN0b3JFeHRlbnNpb24uYmVmb3JlQmVhbkRpc2NvdmVyeUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiUG9ydGFibGUgRXh0ZW5zaW9uIGxpZmVjeWNsZSBvYnNlcnZlciBtZXRob2Q6ICIgKwotICAgICAgICAgICAgCQkiYmVmb3JlQmVhbkRpc2NvdmVyeSBub3QgY2FsbGVkIjsKKyAgICAgICAgICAgICAgICAgICAgImJlZm9yZUJlYW5EaXNjb3Zlcnkgbm90IGNhbGxlZCI7CiAKICAgICAgICAgaWYgKCFQYWNrYWdlUHJpdmF0ZUNvbnN0cnVjdG9yRXh0ZW5zaW9uLmFmdGVyQmVhbkRpc2NvdmVyeUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiUG9ydGFibGUgRXh0ZW5zaW9uIGxpZmVjeWNsZSBvYnNlcnZlciBtZXRob2Q6ICIgKwotICAgICAgICAgICAgCQkiYWZ0ZXJCZWFuRGlzY292ZXJ5IG5vdCBjYWxsZWQgb3IgaW5qZWN0aW9uIG9mIEJlYW5NYW5hZ2VyICIgKwotICAgICAgICAgICAgCQkiaW4gYW4gb2JzZXJ2ZXIgbWV0aG9kIGZhaWxlZCI7Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAgICAiYWZ0ZXJCZWFuRGlzY292ZXJ5IG5vdCBjYWxsZWQgb3IgaW5qZWN0aW9uIG9mIEJlYW5NYW5hZ2VyICIgKworICAgICAgICAgICAgICAgICAgICAiaW4gYW4gb2JzZXJ2ZXIgbWV0aG9kIGZhaWxlZCI7CisKICAgICAgICAgaWYgKCFQYWNrYWdlUHJpdmF0ZUNvbnN0cnVjdG9yRXh0ZW5zaW9uLnByb2Nlc3NBbm5vdGF0ZWRUeXBlQ2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJQb3J0YWJsZSBFeHRlbnNpb24gbGlmZWN5Y2xlIG9ic2VydmVyIG1ldGhvZDogcHJvY2VzcyAiICsKLSAgICAgICAgICAgIAkJImFubm90YXRlZCB0eXBlIG5vdCBjYWxsZWQiOworICAgICAgICAgICAgICAgICAgICAiYW5ub3RhdGVkIHR5cGUgbm90IGNhbGxlZCI7CiAKLSAgICAgICAgaWYoKGJtLmdldEJlYW5zKFBhY2thZ2VQcml2YXRlQ29uc3RydWN0b3JFeHRlbnNpb24uY2xhc3MsIG5ldyBBbm5vdGF0aW9uTGl0ZXJhbDxBbnk+KCl7fSkuaXRlcmF0b3IoKS5uZXh0KCkuZ2V0Q2xhc3MoKSkgPT0gbnVsbCkgCisgICAgICAgIGlmKChibS5nZXRCZWFucyhQYWNrYWdlUHJpdmF0ZUNvbnN0cnVjdG9yRXh0ZW5zaW9uLmNsYXNzLCBuZXcgQW5ub3RhdGlvbkxpdGVyYWw8QW55Pigpe30pLml0ZXJhdG9yKCkubmV4dCgpLmdldENsYXNzKCkpID09IG51bGwpCiAgICAgICAgICAgICBtc2cgKz0gIlBvcnRhYmxlIEV4dGVuc2lvbiBub3QgYXZhaWxhYmxlIGZvciBsb29rdXAgdGhyb3VnaCBCZWFuTWFuYWdlciI7CiAKICAgICAgICAgd3JpdGVyLndyaXRlKG1zZyArICJcbiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcHJvY2Vzcy1pbmplY3Rpb24tdGFyZ2V0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wcm9jZXNzLWluamVjdGlvbi10YXJnZXQvYnVpbGQucHJvcGVydGllcwppbmRleCBlNzJiNDQ0Li5kMzFkNDJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wcm9jZXNzLWluamVjdGlvbi10YXJnZXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wcm9jZXNzLWluamVjdGlvbi10YXJnZXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1wcm9jZXNzLWluamVjdGlvbi10YXJnZXQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3Byb2Nlc3MtaW5qZWN0aW9uLXRhcmdldC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wcm9jZXNzLWluamVjdGlvbi10YXJnZXQvYnVpbGQueG1sCmluZGV4IDg4OTQ2ODguLjI1NTY1MzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3Byb2Nlc3MtaW5qZWN0aW9uLXRhcmdldC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcHJvY2Vzcy1pbmplY3Rpb24tdGFyZ2V0L2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDI0ICs0OCwyNCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgotICAgICAgICAJPHBhcmFtIG5hbWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIgdmFsdWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIgdmFsdWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc3LDEwICs3NywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3Byb2Nlc3MtaW5qZWN0aW9uLXRhcmdldC9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcHJvY2Vzcy1pbmplY3Rpb24tdGFyZ2V0L2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKaW5kZXggYzU3NGRmZC4uY2FlNWFiNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcHJvY2Vzcy1pbmplY3Rpb24tdGFyZ2V0L2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcHJvY2Vzcy1pbmplY3Rpb24tdGFyZ2V0L2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTI3LDggKzI3LDggQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0CiAgICAgICAgID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAKLQkJInBvcnRhYmxlLWV4dGVuc2lvbnMtcHJvY2Vzcy1pbmplY3Rpb24tdGFyZ2V0IjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0KKyAgICAgICAgInBvcnRhYmxlLWV4dGVuc2lvbnMtcHJvY2Vzcy1pbmplY3Rpb24tdGFyZ2V0IjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSAiSGVsbG8gZnJvbSBTZXJ2bGV0IDMuMC4iOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgaG9zdDsKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcHJvY2VzcyBpbmplY3Rpb24gdGFyZ2V0IGV4dGVuc2lvbiIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcHJvY2Vzcy1pbmplY3Rpb24tdGFyZ2V0L3NlcnZsZXQvdGVzdC9leHRlbnNpb24vTXlFeHRlbnNpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3Byb2Nlc3MtaW5qZWN0aW9uLXRhcmdldC9zZXJ2bGV0L3Rlc3QvZXh0ZW5zaW9uL015RXh0ZW5zaW9uLmphdmEKaW5kZXggOTNhYmQ1My4uYzI1OWVhMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcHJvY2Vzcy1pbmplY3Rpb24tdGFyZ2V0L3NlcnZsZXQvdGVzdC9leHRlbnNpb24vTXlFeHRlbnNpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wcm9jZXNzLWluamVjdGlvbi10YXJnZXQvc2VydmxldC90ZXN0L2V4dGVuc2lvbi9NeUV4dGVuc2lvbi5qYXZhCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICAgICAgaXQucHJlRGVzdHJveShpbnN0YW5jZSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRpc3Bvc2UoUG9ydGFibGVFeHRlbnNpb25JbmplY3Rpb25UYXJnZXRUZXN0U2VydmxldCBpbnN0YW5jZSkgeyAgICAgICAgCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKFBvcnRhYmxlRXh0ZW5zaW9uSW5qZWN0aW9uVGFyZ2V0VGVzdFNlcnZsZXQgaW5zdGFuY2UpIHsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcHVibGljIFNldDxJbmplY3Rpb25Qb2ludD4gZ2V0SW5qZWN0aW9uUG9pbnRzKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcHJvY2Vzcy1pbmplY3Rpb24tdGFyZ2V0L3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1BvcnRhYmxlRXh0ZW5zaW9uSW5qZWN0aW9uVGFyZ2V0VGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3Byb2Nlc3MtaW5qZWN0aW9uLXRhcmdldC9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Qb3J0YWJsZUV4dGVuc2lvbkluamVjdGlvblRhcmdldFRlc3RTZXJ2bGV0LmphdmEKaW5kZXggYmZkOWFhNS4uNDU3YTVjMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcHJvY2Vzcy1pbmplY3Rpb24tdGFyZ2V0L3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1BvcnRhYmxlRXh0ZW5zaW9uSW5qZWN0aW9uVGFyZ2V0VGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wcm9jZXNzLWluamVjdGlvbi10YXJnZXQvc2VydmxldC90ZXN0L3NlcnZsZXQvUG9ydGFibGVFeHRlbnNpb25JbmplY3Rpb25UYXJnZXRUZXN0U2VydmxldC5qYXZhCkBAIC00MCwxMCArNDAsMTAgQEAKICAqLwogQFdlYlNlcnZsZXQobmFtZSA9ICJteXRlc3QiLCB1cmxQYXR0ZXJucyA9IHsgIi9teXVybCIgfSkKIHB1YmxpYyBjbGFzcyBQb3J0YWJsZUV4dGVuc2lvbkluamVjdGlvblRhcmdldFRlc3RTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewotICAgIAorCiAvLyAgICBASW5qZWN0CiAvLyAgICBCZWFuTWFuYWdlciBibTsKLSAgICAKKwogICAgIFN0cmluZyBtc2cgPSAiIjsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9sYXRpbGUgYm9vbGVhbiBwaXRDYWxsZWQ7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIGlmICghcGl0c0luamVjdGlvblRhcmdldFVzZWQpIHsKICAgICAgICAgICAgIG1zZyArPSAiIE15RXh0ZW5zaW9uJ3MgcmVwbGFjZWQgSW5qZWN0aW9uVGFyZ2V0IGlzIG5vdCB1c2VkIjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB3cml0ZXIud3JpdGUobXNnICsgIlxuIik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9zaW1wbGUtcG9ydGFibGUtZXh0ZW5zaW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9zaW1wbGUtcG9ydGFibGUtZXh0ZW5zaW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTc4NDY3NS4uNWMwOWFiNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvc2ltcGxlLXBvcnRhYmxlLWV4dGVuc2lvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3NpbXBsZS1wb3J0YWJsZS1leHRlbnNpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zaW1wbGUtcG9ydGFibGUtZXh0ZW5zaW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9zaW1wbGUtcG9ydGFibGUtZXh0ZW5zaW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3NpbXBsZS1wb3J0YWJsZS1leHRlbnNpb24vYnVpbGQueG1sCmluZGV4IDg4OTQ2ODguLjI1NTY1MzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3NpbXBsZS1wb3J0YWJsZS1leHRlbnNpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3NpbXBsZS1wb3J0YWJsZS1leHRlbnNpb24vYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDgsMjQgKzQ4LDI0IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+Ci0gICAgICAgIAk8cGFyYW0gbmFtZT0iY2RpLWV4dGVuc2lvbi5zZXJ2aWNlIiB2YWx1ZT0iY2RpLWV4dGVuc2lvbi5zZXJ2aWNlIi8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY2RpLWV4dGVuc2lvbi5zZXJ2aWNlIiB2YWx1ZT0iY2RpLWV4dGVuc2lvbi5zZXJ2aWNlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzcsMTAgKzc3LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvc2ltcGxlLXBvcnRhYmxlLWV4dGVuc2lvbi9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvc2ltcGxlLXBvcnRhYmxlLWV4dGVuc2lvbi9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IDE3NGQxNzEuLmEyMGU0ZGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3NpbXBsZS1wb3J0YWJsZS1leHRlbnNpb24vY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9zaW1wbGUtcG9ydGFibGUtZXh0ZW5zaW9uL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcG9ydGFibGUgZXh0ZW5zaW9ucyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU5LDcgKzU5LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk4LDEwICs5OCwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvc2ltcGxlLXBvcnRhYmxlLWV4dGVuc2lvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvc2ltcGxlLXBvcnRhYmxlLWV4dGVuc2lvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCmluZGV4IGM4Y2Q3NjcuLjYwNTk4ZTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3NpbXBsZS1wb3J0YWJsZS1leHRlbnNpb24vc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9zaW1wbGUtcG9ydGFibGUtZXh0ZW5zaW9uL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKQEAgLTI5LDIzICsyOSwyMyBAQAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKICAgICBwdWJsaWMgc3RhdGljIGludCBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgPSAwOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGVycm9yTWVzc2FnZSA9ICIiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3REZXBlbmRlbnRCZWFuIHRiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IoTXlFeHRlbnNpb24gbXlleCl7IC8vSW5qZWN0aW9uIG9mIHBvcnRhYmxlIGV4dGVuc2lvbiBpbiBhIGJlYW4KICAgICAgICAgaWYobXlleCA9PSBudWxsKSB7CiAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gIlBvcnRhYmxlIEV4dGVuc2lvbiBJbmplY3Rpb24gaW4gSW50ZXJjZXB0b3IgZmFpbGVkIjsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgbWFuYWdlVHJhbnNhY3Rpb24oSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUcmFuc2FjdGlvbkludGVyY2VwdG9yOjpBcm91bmRJbnZva2UiKTsKICAgICAgICAgaWYgKHRiID09IG51bGwpIGVycm9yTWVzc2FnZSArPSAiRGVwZW5kZW5jeSBJbmplY3Rpb24gIiArCi0gICAgICAgIAkJImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOworICAgICAgICAgICAgICAgICJpbnRvIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgZmFpbGVkIjsKICAgICAgICAgYXJvdW5kSW52b2tlQ2FsbGVkID0gdHJ1ZTsKICAgICAgICAgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ICsrOwogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3NpbXBsZS1wb3J0YWJsZS1leHRlbnNpb24vc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3NpbXBsZS1wb3J0YWJsZS1leHRlbnNpb24vc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YQppbmRleCA5OGY4NWQ0Li44YmQ5OGNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9zaW1wbGUtcG9ydGFibGUtZXh0ZW5zaW9uL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvc2ltcGxlLXBvcnRhYmxlLWV4dGVuc2lvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCkBAIC0zMSw1ICszMSw1IEBACiBASW50ZXJjZXB0b3JCaW5kaW5nCiBwdWJsaWMgQGludGVyZmFjZSBUcmFuc2FjdGlvbmFsIHsKIAotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9zaW1wbGUtcG9ydGFibGUtZXh0ZW5zaW9uL3NlcnZsZXQvdGVzdC9leHRlbnNpb24vTXlFeHRlbnNpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3NpbXBsZS1wb3J0YWJsZS1leHRlbnNpb24vc2VydmxldC90ZXN0L2V4dGVuc2lvbi9NeUV4dGVuc2lvbi5qYXZhCmluZGV4IDBlOWYxYTcuLmQ0OTdjZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3NpbXBsZS1wb3J0YWJsZS1leHRlbnNpb24vc2VydmxldC90ZXN0L2V4dGVuc2lvbi9NeUV4dGVuc2lvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3NpbXBsZS1wb3J0YWJsZS1leHRlbnNpb24vc2VydmxldC90ZXN0L2V4dGVuc2lvbi9NeUV4dGVuc2lvbi5qYXZhCkBAIC0zMywxMiArMzMsMTIgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBNeUV4dGVuc2lvbiBjdG9yIik7CiAgICAgICAgIC8vbmV3IFRocm93YWJsZSgpLnByaW50U3RhY2tUcmFjZSgpOwogICAgIH0KLSAgICAKKwogICAgIHZvaWQgYmVmb3JlQmVhbkRpc2NvdmVyeShAT2JzZXJ2ZXMgQmVmb3JlQmVhbkRpc2NvdmVyeSBiZGQpewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15RXh0ZW5zaW9uOjpiZWZvcmVCZWFuRGlzY292ZXJ5IiArIGJkZCk7CiAgICAgICAgIGJlZm9yZUJlYW5EaXNjb3ZlcnlDYWxsZWQgPSB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIDxUPiB2b2lkIHByb2Nlc3NBbm5vdGF0ZWRUeXBlKEBPYnNlcnZlcyBQcm9jZXNzQW5ub3RhdGVkVHlwZTxUPiBwYXQpewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15RXh0ZW5zaW9uOlByb2Nlc3MgYW5ub3RhdGVkIHR5cGUiICsgcGF0LmdldEFubm90YXRlZFR5cGUoKS5nZXRCYXNlVHlwZSgpKTsKICAgICAgICAgcHJvY2Vzc0Fubm90YXRlZFR5cGVDYWxsZWQgPSB0cnVlOwpAQCAtNDksMTAgKzQ5LDEwIEBACiAgICAgICAgICAgICBwYXQudmV0bygpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgdm9pZCBhZnRlckJlYW5EaXNjb3ZlcnkoQE9ic2VydmVzIEFmdGVyQmVhbkRpc2NvdmVyeSBhYmQsIEJlYW5NYW5hZ2VyIGJtKXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeUV4dGVuc2lvbjogYWJkOiAiICsgYWJkICsgIiBCZWFuTWFuYWdlcjogIiArIGJtKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGJtICE9IG51bGwpIHsKICAgICAgICAgICAgIC8vZW5zdXJlIGEgdmFsaWQgQmVhbk1hbmFnZXIgaXMgaW5qZWN0ZWQKICAgICAgICAgICAgIGFmdGVyQmVhbkRpc2NvdmVyeUNhbGxlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9zaW1wbGUtcG9ydGFibGUtZXh0ZW5zaW9uL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1NpbXBsZVBvcnRhYmxlRXh0ZW5zaW9uVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3NpbXBsZS1wb3J0YWJsZS1leHRlbnNpb24vc2VydmxldC90ZXN0L3NlcnZsZXQvU2ltcGxlUG9ydGFibGVFeHRlbnNpb25UZXN0U2VydmxldC5qYXZhCmluZGV4IDg0YTg2OGEuLmE3MGVkNTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3NpbXBsZS1wb3J0YWJsZS1leHRlbnNpb24vc2VydmxldC90ZXN0L3NlcnZsZXQvU2ltcGxlUG9ydGFibGVFeHRlbnNpb25UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3NpbXBsZS1wb3J0YWJsZS1leHRlbnNpb24vc2VydmxldC90ZXN0L3NlcnZsZXQvU2ltcGxlUG9ydGFibGVFeHRlbnNpb25UZXN0U2VydmxldC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgQEluamVjdAogICAgIEBQcmVmZXJyZWQKICAgICBUZXN0QmVhbiB0YjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBCZWFuTWFuYWdlciBibTsKIApAQCAtNjQsMjIgKzY0LDIyIEBACiAgICAgICAgICAgICAgICAgICAgICsgVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQ7CiAgICAgICAgIGlmICghVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2UudHJpbSgpLmVxdWFscygiIikpCiAgICAgICAgICAgICBtc2cgKz0gVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2U7Ci0gICAgICAgIAorCiAgICAgICAgIC8vY2hlY2sgaWYgb3VyIHBvcnRhYmxlIGV4dGVuc2lvbiB3YXMgY2FsbGVkCiAgICAgICAgIGlmICghTXlFeHRlbnNpb24uYmVmb3JlQmVhbkRpc2NvdmVyeUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiUG9ydGFibGUgRXh0ZW5zaW9uIGxpZmVjeWNsZSBvYnNlcnZlciBtZXRob2Q6ICIgKwotICAgICAgICAgICAgCQkiYmVmb3JlQmVhbkRpc2NvdmVyeSBub3QgY2FsbGVkIjsKKyAgICAgICAgICAgICAgICAgICAgImJlZm9yZUJlYW5EaXNjb3Zlcnkgbm90IGNhbGxlZCI7CiAKICAgICAgICAgaWYgKCFNeUV4dGVuc2lvbi5hZnRlckJlYW5EaXNjb3ZlcnlDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlBvcnRhYmxlIEV4dGVuc2lvbiBsaWZlY3ljbGUgb2JzZXJ2ZXIgbWV0aG9kOiAiICsKLSAgICAgICAgICAgIAkJImFmdGVyQmVhbkRpc2NvdmVyeSBub3QgY2FsbGVkIG9yIGluamVjdGlvbiBvZiBCZWFuTWFuYWdlciAiICsKLSAgICAgICAgICAgIAkJImluIGFuIG9ic2VydmVyIG1ldGhvZCBmYWlsZWQiOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgImFmdGVyQmVhbkRpc2NvdmVyeSBub3QgY2FsbGVkIG9yIGluamVjdGlvbiBvZiBCZWFuTWFuYWdlciAiICsKKyAgICAgICAgICAgICAgICAgICAgImluIGFuIG9ic2VydmVyIG1ldGhvZCBmYWlsZWQiOworCiAgICAgICAgIGlmICghTXlFeHRlbnNpb24ucHJvY2Vzc0Fubm90YXRlZFR5cGVDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlBvcnRhYmxlIEV4dGVuc2lvbiBsaWZlY3ljbGUgb2JzZXJ2ZXIgbWV0aG9kOiBwcm9jZXNzICIgKwotICAgICAgICAgICAgCQkiYW5ub3RhdGVkIHR5cGUgbm90IGNhbGxlZCI7CisgICAgICAgICAgICAgICAgICAgICJhbm5vdGF0ZWQgdHlwZSBub3QgY2FsbGVkIjsKIAotICAgICAgICBpZigoYm0uZ2V0QmVhbnMoTXlFeHRlbnNpb24uY2xhc3MsIG5ldyBBbm5vdGF0aW9uTGl0ZXJhbDxBbnk+KCl7fSkuaXRlcmF0b3IoKS5uZXh0KCkuZ2V0Q2xhc3MoKSkgPT0gbnVsbCkgCisgICAgICAgIGlmKChibS5nZXRCZWFucyhNeUV4dGVuc2lvbi5jbGFzcywgbmV3IEFubm90YXRpb25MaXRlcmFsPEFueT4oKXt9KS5pdGVyYXRvcigpLm5leHQoKS5nZXRDbGFzcygpKSA9PSBudWxsKQogICAgICAgICAgICAgbXNnICs9ICJQb3J0YWJsZSBFeHRlbnNpb24gbm90IGF2YWlsYWJsZSBmb3IgbG9va3VwIHRocm91Z2ggQmVhbk1hbmFnZXIiOwogCiAgICAgICAgIHdyaXRlci53cml0ZShtc2cgKyAiXG4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL2J1aWxkLnhtbAppbmRleCBiMWZlYmY2Li44Y2I4ZDM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvYnVpbGQueG1sCkBAIC04NCwxNSArODQsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPiBVc2FnZToKLQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBwcm9kbWV0aCB0ZXN0cykKLQkJYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBwcm9kbWV0aCB0ZXN0cykKLQkJYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBwcm9kbWV0aCB0ZXN0cykKLQkJYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIHByb2RtZXRoIHRlc3RzKQotCQlhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgcHJvZG1ldGggYXBwcykKLQkJYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBwcm9kbWV0aCB0ZXN0cykKLQkJYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgcHJvZG1ldGggYXBwcykKLQkJYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBwcm9kbWV0aCB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+IFVzYWdlOgorICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIHByb2RtZXRoIHRlc3RzKQorICAgICAgICBhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIHByb2RtZXRoIHRlc3RzKQorICAgICAgICBhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIHByb2RtZXRoIHRlc3RzKQorICAgICAgICBhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgcHJvZG1ldGggdGVzdHMpCisgICAgICAgIGFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBwcm9kbWV0aCBhcHBzKQorICAgICAgICBhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIHByb2RtZXRoIHRlc3RzKQorICAgICAgICBhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBwcm9kbWV0aCBhcHBzKQorICAgICAgICBhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIHByb2RtZXRoIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1kaXNwb3Nlcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTllMzg1Yi4uMjUxMjE2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcHJvZHVjZXItbWV0aG9kcy1kaXNwb3Nlcm1ldGhvZHMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1kaXNwb3Nlcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvYnVpbGQueG1sCmluZGV4IDBiOWIzYTMuLjBhMWYyZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1kaXNwb3Nlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDIzICs0OCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCBjMDA3YmI2Li5jOWFlZmE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBwcm9kdWNlciBtZXRob2RzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDksNyArNDksNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtMTAxLDEwICsxMDEsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1kaXNwb3Nlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvQmVhblNldHVwLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvc2VydmxldC90ZXN0L2JlYW5zL0JlYW5TZXR1cC5qYXZhCmluZGV4IDg0MTc1MzguLjY2MTIzNmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1kaXNwb3Nlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvQmVhblNldHVwLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL3NlcnZsZXQvdGVzdC9iZWFucy9CZWFuU2V0dXAuamF2YQpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgICAgIC5wcmludGxuKCJEaXNwb3NlIG1ldGhvZCBpbiBCZWFuU2V0dXAgZm9yIHRlc3RRdWFsaWZpZXIgY2FsbGVkIik7CiAgICAgICAgIGlmICh0YiAhPSBudWxsKSB7CiAgICAgICAgICAgICBkaXNwb3NlQ2FsbGVkRm9yVGVzdFF1YWxpZmllckVycm9yID0gImRpc3Bvc2UgbWV0aG9kIGZvciB0ZXN0cXVhbGlmaWVyICIgKwotICAgICAgICAgICAgCQkiY2FsbGVkIHdpdGhvdXQgaW5qZWN0aW5nIFRlc3RCZWFuIjsKKyAgICAgICAgICAgICAgICAgICAgImNhbGxlZCB3aXRob3V0IGluamVjdGluZyBUZXN0QmVhbiI7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1kaXNwb3Nlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvUHJlZmVycmVkLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvc2VydmxldC90ZXN0L2JlYW5zL1ByZWZlcnJlZC5qYXZhCmluZGV4IDg2NGQzMTMuLjI1MmY4YzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1kaXNwb3Nlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvUHJlZmVycmVkLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL3NlcnZsZXQvdGVzdC9iZWFucy9QcmVmZXJyZWQuamF2YQpAQCAtMzIsNSArMzIsNSBAQAogQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuUlVOVElNRSkKIHB1YmxpYyBAaW50ZXJmYWNlIFByZWZlcnJlZCB7CiAKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0UXVhbGlmaWVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RRdWFsaWZpZXIuamF2YQppbmRleCA2ZTg5MjM5Li5kMmQ3YTlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RRdWFsaWZpZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RRdWFsaWZpZXIuamF2YQpAQCAtMzIsNSArMzIsNSBAQAogQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuUlVOVElNRSkKIHB1YmxpYyBAaW50ZXJmYWNlIFRlc3RRdWFsaWZpZXIgewogCi0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1kaXNwb3Nlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdFJlcXVlc3RTY29wZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RSZXF1ZXN0U2NvcGVkQmVhbi5qYXZhCmluZGV4IDY5YTg2NzIuLmU5Y2M1NDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1kaXNwb3Nlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdFJlcXVlc3RTY29wZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0UmVxdWVzdFNjb3BlZEJlYW4uamF2YQpAQCAtMTgsNSArMTgsNSBAQAogCiAKIHB1YmxpYyBjbGFzcyBUZXN0UmVxdWVzdFNjb3BlZEJlYW4gewotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvc2VydmxldC90ZXN0L3NlcnZsZXQvUHJvZHVjZXJNZXRob2REaXNwb3Nlc1Rlc3RTZXJ2bGV0MS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1Byb2R1Y2VyTWV0aG9kRGlzcG9zZXNUZXN0U2VydmxldDEuamF2YQppbmRleCA3YzFhNTk3Li4yODMwODczIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvc2VydmxldC90ZXN0L3NlcnZsZXQvUHJvZHVjZXJNZXRob2REaXNwb3Nlc1Rlc3RTZXJ2bGV0MS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1kaXNwb3Nlcy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Qcm9kdWNlck1ldGhvZERpc3Bvc2VzVGVzdFNlcnZsZXQxLmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKIAogICAgIEBJbmplY3QgQFByZWZlcnJlZAogICAgIFRlc3RSZXF1ZXN0U2NvcGVkQmVhbiB0cnM7Ci0gICAgCisKICAgICBASW5qZWN0IEBUZXN0UXVhbGlmaWVyCiAgICAgVGVzdFJlcXVlc3RTY29wZWRCZWFuIHRyczI7CiAKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgaWYgKHRyczIgPT0gbnVsbCkKICAgICAgICAgICAgIG1zZyArPSAiUmVxdWVzdFNjb3BlZCBCZWFuIGluamVjdGlvbiBpbnRvIFNlcnZsZXQgb2YgQmVhbiBjcmVhdGVkIHRocm91Z2ggIgogICAgICAgICAgICAgICAgICAgICArICJwcm9ncmFtbWF0aWMgaW5zdGFudGlhdGlvbiBpbiBwcm9kdWNlciBtZXRob2QgKFRlc3RRdWFsaWZpZXIpIGZhaWxlZCI7Ci0gICAgICAgIAorCiAgICAgICAgIHdyaXRlci53cml0ZShtc2cgKyAiXG4iKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1kaXNwb3Nlcy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Qcm9kdWNlck1ldGhvZERpc3Bvc2VzVGVzdFNlcnZsZXQyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvc2VydmxldC90ZXN0L3NlcnZsZXQvUHJvZHVjZXJNZXRob2REaXNwb3Nlc1Rlc3RTZXJ2bGV0Mi5qYXZhCmluZGV4IDUzNWMxZjQuLjhjNmJjYTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1kaXNwb3Nlcy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Qcm9kdWNlck1ldGhvZERpc3Bvc2VzVGVzdFNlcnZsZXQyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1Byb2R1Y2VyTWV0aG9kRGlzcG9zZXNUZXN0U2VydmxldDIuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICAgICAgbXNnICs9ICJEaXNwb3NlciBtZXRob2QgZm9yIHByZWZlcnJlZCBub3QgY2FsbGVkIjsKICAgICAgICAgaWYgKCEoQmVhblNldHVwLmRpc3Bvc2VDYWxsZWRGb3JUZXN0UXVhbGlmaWVyRXJyb3IudHJpbSgpLmxlbmd0aCgpID09IDApKQogICAgICAgICAgICAgbXNnICs9IEJlYW5TZXR1cC5kaXNwb3NlQ2FsbGVkRm9yVGVzdFF1YWxpZmllckVycm9yOwotICAgICAgICAKKwogICAgICAgICB3cml0ZXIud3JpdGUobXNnICsgIlxuIik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcXVhbGlmaWVycy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcXVhbGlmaWVycy9XZWJUZXN0LmphdmEKaW5kZXggMWI2ZTk3Yy4uNjIxMGFjZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXF1YWxpZmllcnMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1xdWFsaWZpZXJzL1dlYlRlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBAV2ViU2VydmxldCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU3LDcgKzU3LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk2LDEwICs5NiwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXF1YWxpZmllcnMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1xdWFsaWZpZXJzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWVmNzA2MC4uN2U0NmEyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXF1YWxpZmllcnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcXVhbGlmaWVycy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXByb2R1Y2VyLW1ldGhvZHMtcXVhbGlmaWVycyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXF1YWxpZmllcnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXF1YWxpZmllcnMvYnVpbGQueG1sCmluZGV4IDgzYWQ2NjYuLjA2OTEyMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1xdWFsaWZpZXJzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcXVhbGlmaWVycy9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMjMgKzQ3LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXF1YWxpZmllcnMvc2VydmxldC9SYW5kb21OdW1iZXJHZW5lcmF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1xdWFsaWZpZXJzL3NlcnZsZXQvUmFuZG9tTnVtYmVyR2VuZXJhdG9yLmphdmEKaW5kZXggOGFkNjU0Zi4uMjRkNjBkYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXF1YWxpZmllcnMvc2VydmxldC9SYW5kb21OdW1iZXJHZW5lcmF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcXVhbGlmaWVycy9zZXJ2bGV0L1JhbmRvbU51bWJlckdlbmVyYXRvci5qYXZhCkBAIC0yOCwxMCArMjgsMTAgQEAKICAgICBAUHJvZHVjZXMgQE5hbWVkIEBSYW5kb21MZXNzVGhhbk9yRXF1YWxUb0h1bmRyZWQgaW50IGdldFJhbmRvbU51bWJlcigpewogICAgICAgICByZXR1cm4gbGVzc1RoYW4xMDAtLTsKICAgICB9Ci0gICAgCisKICAgICAvL0dlbmVyYXRlIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAxMDAKICAgICBAUHJvZHVjZXMgQE5hbWVkIEBSYW5kb21HcmVhdGVyVGhhbkh1bmRyZWQgaW50IGdldFJhbmRvbU51bWJlckdyZWF0aGVyVGhhbkh1bmRyZWQoKXsKICAgICAgICAgcmV0dXJuIGdyZWF0ZXJUaGFuMTAwKys7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcXVhbGlmaWVycy9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcXVhbGlmaWVycy9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEKaW5kZXggMDdjMzU1Zi4uMTNmMDc1YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXF1YWxpZmllcnMvc2VydmxldC9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1xdWFsaWZpZXJzL3NlcnZsZXQvVGVzdEJlYW4uamF2YQpAQCAtMTYsMTAgKzE2LDEwIEBACiAKIGltcG9ydCBqYWthcnRhLmluamVjdC5JbmplY3Q7CiBwdWJsaWMgY2xhc3MgVGVzdEJlYW4gewotIAotICAgIC8vVGhpcyBzaG91bGQgdXNlIHRoZSBpbnQgY2hvc2VuIGluIEJlYW5Ub1Rlc3RRdWFsaWZlckluUHJvZHVjZXJNZXRob2RzIAorCisgICAgLy9UaGlzIHNob3VsZCB1c2UgdGhlIGludCBjaG9zZW4gaW4gQmVhblRvVGVzdFF1YWxpZmVySW5Qcm9kdWNlck1ldGhvZHMKICAgICBASW5qZWN0IGludCBybmc7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0UHJvZHVjZXJNZXRob2QoKXsKICAgICAgICAgcmV0dXJuIHJuZyA8PSAxMDA7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXJ1bnRpbWVwb2x5bW9ycGhpc20vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1ydW50aW1lcG9seW1vcnBoaXNtL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWVmNzA2MC4uN2U0NmEyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXJ1bnRpbWVwb2x5bW9ycGhpc20vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcnVudGltZXBvbHltb3JwaGlzbS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXByb2R1Y2VyLW1ldGhvZHMtcXVhbGlmaWVycyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXJ1bnRpbWVwb2x5bW9ycGhpc20vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXJ1bnRpbWVwb2x5bW9ycGhpc20vYnVpbGQueG1sCmluZGV4IDBiOWIzYTMuLjBhMWYyZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1ydW50aW1lcG9seW1vcnBoaXNtL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcnVudGltZXBvbHltb3JwaGlzbS9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwyMyArNDgsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1ydW50aW1lcG9seW1vcnBoaXNtL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcnVudGltZXBvbHltb3JwaGlzbS9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IDFkYzFlYTEuLjQzYTEyZTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1ydW50aW1lcG9seW1vcnBoaXNtL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXJ1bnRpbWVwb2x5bW9ycGhpc20vY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBwcm9kdWNlciBtZXRob2RzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDksNyArNDksNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTksNyArNTksNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtOTgsMTAgKzk4LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcnVudGltZXBvbHltb3JwaGlzbS9zZXJ2bGV0L3Rlc3QvYmVhbnMvQ3JlZGl0Q2FyZFBheW1lbnRTdHJhdGVneS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXJ1bnRpbWVwb2x5bW9ycGhpc20vc2VydmxldC90ZXN0L2JlYW5zL0NyZWRpdENhcmRQYXltZW50U3RyYXRlZ3kuamF2YQppbmRleCBiOGYzNTE4Li5kMzIxMWJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcnVudGltZXBvbHltb3JwaGlzbS9zZXJ2bGV0L3Rlc3QvYmVhbnMvQ3JlZGl0Q2FyZFBheW1lbnRTdHJhdGVneS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1ydW50aW1lcG9seW1vcnBoaXNtL3NlcnZsZXQvdGVzdC9iZWFucy9DcmVkaXRDYXJkUGF5bWVudFN0cmF0ZWd5LmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIAogaW1wb3J0IGpha2FydGEuZW50ZXJwcmlzZS5jb250ZXh0LlJlcXVlc3RTY29wZWQ7CiAKLUBSZXF1ZXN0U2NvcGVkIAorQFJlcXVlc3RTY29wZWQKIC8vTm90ZTogVGhpcyBpcyByZXF1ZXN0IHNjb3BlZCBiZWFuCiBwdWJsaWMgY2xhc3MgQ3JlZGl0Q2FyZFBheW1lbnRTdHJhdGVneSBpbXBsZW1lbnRzIFBheW1lbnRTdHJhdGVneSwgU2VyaWFsaXphYmxlIHsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXJ1bnRpbWVwb2x5bW9ycGhpc20vc2VydmxldC90ZXN0L2JlYW5zL1ByZWZlcnJlZF9DcmVhdGVkUHJvZ3JhbW1hdGljYWxseS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXJ1bnRpbWVwb2x5bW9ycGhpc20vc2VydmxldC90ZXN0L2JlYW5zL1ByZWZlcnJlZF9DcmVhdGVkUHJvZ3JhbW1hdGljYWxseS5qYXZhCmluZGV4IDNiZGQxNjguLmQ5MDIzMjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1ydW50aW1lcG9seW1vcnBoaXNtL3NlcnZsZXQvdGVzdC9iZWFucy9QcmVmZXJyZWRfQ3JlYXRlZFByb2dyYW1tYXRpY2FsbHkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcnVudGltZXBvbHltb3JwaGlzbS9zZXJ2bGV0L3Rlc3QvYmVhbnMvUHJlZmVycmVkX0NyZWF0ZWRQcm9ncmFtbWF0aWNhbGx5LmphdmEKQEAgLTMyLDUgKzMyLDUgQEAKIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlJVTlRJTUUpCiBwdWJsaWMgQGludGVyZmFjZSBQcmVmZXJyZWRfQ3JlYXRlZFByb2dyYW1tYXRpY2FsbHkgewogCi0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1ydW50aW1lcG9seW1vcnBoaXNtL3NlcnZsZXQvdGVzdC9iZWFucy9QcmVmZXJyZWRfQ3JlYXRlZFZpYUluamVjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXJ1bnRpbWVwb2x5bW9ycGhpc20vc2VydmxldC90ZXN0L2JlYW5zL1ByZWZlcnJlZF9DcmVhdGVkVmlhSW5qZWN0aW9uLmphdmEKaW5kZXggZDliY2I0Yy4uNDAyZGNjOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXJ1bnRpbWVwb2x5bW9ycGhpc20vc2VydmxldC90ZXN0L2JlYW5zL1ByZWZlcnJlZF9DcmVhdGVkVmlhSW5qZWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXJ1bnRpbWVwb2x5bW9ycGhpc20vc2VydmxldC90ZXN0L2JlYW5zL1ByZWZlcnJlZF9DcmVhdGVkVmlhSW5qZWN0aW9uLmphdmEKQEAgLTMzLDUgKzMzLDUgQEAKIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlJVTlRJTUUpCiBwdWJsaWMgQGludGVyZmFjZSBQcmVmZXJyZWRfQ3JlYXRlZFZpYUluamVjdGlvbiB7CiAKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXJ1bnRpbWVwb2x5bW9ycGhpc20vc2VydmxldC90ZXN0L3NlcnZsZXQvUHJvZHVjZXJNZXRob2RSdW50aW1lUG9seW1vcmhwaXNtVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1ydW50aW1lcG9seW1vcnBoaXNtL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1Byb2R1Y2VyTWV0aG9kUnVudGltZVBvbHltb3JocGlzbVRlc3RTZXJ2bGV0LmphdmEKaW5kZXggYWQ0NjJjZS4uNDg4YTRlMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXJ1bnRpbWVwb2x5bW9ycGhpc20vc2VydmxldC90ZXN0L3NlcnZsZXQvUHJvZHVjZXJNZXRob2RSdW50aW1lUG9seW1vcmhwaXNtVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcnVudGltZXBvbHltb3JwaGlzbS9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Qcm9kdWNlck1ldGhvZFJ1bnRpbWVQb2x5bW9yaHBpc21UZXN0U2VydmxldC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgQEluamVjdAogICAgIEBQcmVmZXJyZWRfQ3JlYXRlZFZpYUluamVjdGlvbgogICAgIFBheW1lbnRTdHJhdGVneSBwYXlJbmplY3QyOwotICAgIAorCiAgICAgQEluamVjdAogICAgIENyZWRpdENhcmRQYXltZW50U3RyYXRlZ3kgY2NwczsvLyBUaGlzIHNob3VsZCBiZSB0aGUgcmVxdWVzdC1zY29wZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5zdGFuY2UuCkBAIC02OCwxOCArNjgsMTggQEAKIAogICAgICAgICBpZiAoIShwYXlDcmVhdGUgaW5zdGFuY2VvZiBQYXltZW50U3RyYXRlZ3kpKQogICAgICAgICAgICAgbXNnICs9ICJCZWFuIHJ1bnRpbWUgcG9seW1vcnBoaXNtIGluIHByb2R1Y2VyIG1ldGhvZCAiICsKLSAgICAgICAgICAgIAkJImluIFByZWZlcmVuY2VzIGZhaWxlZCI7CisgICAgICAgICAgICAgICAgICAgICJpbiBQcmVmZXJlbmNlcyBmYWlsZWQiOwogICAgICAgICBpZiAoIShwYXlJbmplY3QgaW5zdGFuY2VvZiBQYXltZW50U3RyYXRlZ3kpKQogICAgICAgICAgICAgbXNnICs9ICJCZWFuIHJ1bnRpbWUgcG9seW1vcnBoaXNtIGluIHByb2R1Y2VyIG1ldGhvZChkZXAgaW5qZWN0aW9uICIgKwotICAgICAgICAgICAgCQkiaW4gbWV0aG9kIHBhcmFtZXRlcnMgaW4gUHJlZmVyZW5jZXMgZmFpbGVkIjsKKyAgICAgICAgICAgICAgICAgICAgImluIG1ldGhvZCBwYXJhbWV0ZXJzIGluIFByZWZlcmVuY2VzIGZhaWxlZCI7CiAKICAgICAgICAgaWYgKGFyZUluamVjdGVkSW5zdGFuY2VzRXF1YWwoY2NwcywgcGF5SW5qZWN0KSkKICAgICAgICAgICAgIG1zZyArPSAiVXNlIG9mIEBOZXcgdG8gY3JlYXRlIG5ldyBEZXBlbmRlbnQgb2JqZWN0IHdoaWxlIGluamVjdGluZyAiICsKLSAgICAgICAgICAgIAkJImluIHByb2R1Y2VyIG1ldGhvZCBmYWlsZWQiOworICAgICAgICAgICAgICAgICAgICAiaW4gcHJvZHVjZXIgbWV0aG9kIGZhaWxlZCI7CiAKICAgICAgICAgaWYgKCFhcmVJbmplY3RlZEluc3RhbmNlc0VxdWFsKHBheUluamVjdCwgcGF5SW5qZWN0MikpCiAgICAgICAgICAgICBtc2cgKz0gIlNlc3Npb24tc2NvcGVkIHByb2R1Y2VyIG1ldGhvZCBjcmVhdGVkIEJlYW4gaW5qZWN0ZWQgaW4gIiArCi0gICAgICAgICAgICAJCSJkaWZmZXJlbnQgaW5qZWN0aW9uIHBvaW50cyBhcmUgbm90IGVxdWFsIjsKKyAgICAgICAgICAgICAgICAgICAgImRpZmZlcmVudCBpbmplY3Rpb24gcG9pbnRzIGFyZSBub3QgZXF1YWwiOwogCiAgICAgICAgIHdyaXRlci53cml0ZShtc2cgKyAiXG4iKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZ3JhbW1hdGljLWxvb2t1cC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZ3JhbW1hdGljLWxvb2t1cC9XZWJUZXN0LmphdmEKaW5kZXggMzVmNzUxOC4uMTY2MTkzMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2dyYW1tYXRpYy1sb29rdXAvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9ncmFtbWF0aWMtbG9va3VwL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGVzdGluZyBQcm9ncmFtbWF0aWMgTG9va3VwIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDYsNyArNDYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtOTYsMTAgKzk2LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZ3JhbW1hdGljLWxvb2t1cC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2dyYW1tYXRpYy1sb29rdXAvYnVpbGQucHJvcGVydGllcwppbmRleCA1N2JhNWZmLi5iYWVhNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZ3JhbW1hdGljLWxvb2t1cC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9ncmFtbWF0aWMtbG9va3VwL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaS1wcm9ncmFtbWF0aWMtbG9va3VwIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LWFubm90YXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9ncmFtbWF0aWMtbG9va3VwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9ncmFtbWF0aWMtbG9va3VwL2J1aWxkLnhtbAppbmRleCBjMGQ5MDRkLi44NzJmMzY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZ3JhbW1hdGljLWxvb2t1cC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2dyYW1tYXRpYy1sb29rdXAvYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ3LDIzICs0NywyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc1LDEwICs3NSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9ncmFtbWF0aWMtbG9va3VwL3NlcnZsZXQvdGVzdC9hcnRpZmFjdHMvVGVzdEFwcGxpY2F0aW9uU2NvcGVkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2dyYW1tYXRpYy1sb29rdXAvc2VydmxldC90ZXN0L2FydGlmYWN0cy9UZXN0QXBwbGljYXRpb25TY29wZWRCZWFuLmphdmEKaW5kZXggZDI0YTc2ZS4uOGQ3NjQyNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2dyYW1tYXRpYy1sb29rdXAvc2VydmxldC90ZXN0L2FydGlmYWN0cy9UZXN0QXBwbGljYXRpb25TY29wZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2dyYW1tYXRpYy1sb29rdXAvc2VydmxldC90ZXN0L2FydGlmYWN0cy9UZXN0QXBwbGljYXRpb25TY29wZWRCZWFuLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIHB1YmxpYyBjbGFzcyBUZXN0QXBwbGljYXRpb25TY29wZWRCZWFuIHsKICAgICBASW5qZWN0CiAgICAgVGVzdFNlc3Npb25TY29wZWRCZWFuIHRzYjsKLSAgICAKKwogICAgIHB1YmxpYyBUZXN0U2Vzc2lvblNjb3BlZEJlYW4gZ2V0U2Vzc2lvblNjb3BlZEJlYW4oKXsKICAgICAgICAgcmV0dXJuIHRzYjsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZ3JhbW1hdGljLWxvb2t1cC9zZXJ2bGV0L3Rlc3QvYXJ0aWZhY3RzL1VucHJveHlhYmxlVHlwZVdpdGhOb1B1YmxpY051bGxDb25zdHJ1Y3Rvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2dyYW1tYXRpYy1sb29rdXAvc2VydmxldC90ZXN0L2FydGlmYWN0cy9VbnByb3h5YWJsZVR5cGVXaXRoTm9QdWJsaWNOdWxsQ29uc3RydWN0b3IuamF2YQppbmRleCAzMTgzY2ZiLi42ZmVlYzg1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZ3JhbW1hdGljLWxvb2t1cC9zZXJ2bGV0L3Rlc3QvYXJ0aWZhY3RzL1VucHJveHlhYmxlVHlwZVdpdGhOb1B1YmxpY051bGxDb25zdHJ1Y3Rvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9ncmFtbWF0aWMtbG9va3VwL3NlcnZsZXQvdGVzdC9hcnRpZmFjdHMvVW5wcm94eWFibGVUeXBlV2l0aE5vUHVibGljTnVsbENvbnN0cnVjdG9yLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIHB1YmxpYyBjbGFzcyBVbnByb3h5YWJsZVR5cGVXaXRoTm9QdWJsaWNOdWxsQ29uc3RydWN0b3IgaW1wbGVtZW50cyBVbnByb3h5YWJsZVR5cGUsIFNlcmlhbGl6YWJsZXsKICAgICAvL3ByaXZhdGUgbnVsbCBjdG9yCiAgICAgcHJpdmF0ZSBVbnByb3h5YWJsZVR5cGVXaXRoTm9QdWJsaWNOdWxsQ29uc3RydWN0b3IoKXsKLSAgICAgICAgCisKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9ncmFtbWF0aWMtbG9va3VwL3NlcnZsZXQvdGVzdC9iZWFucy9CZWFuVG9UZXN0UHJvZ3JhbW1hdGljTG9va3VwLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZ3JhbW1hdGljLWxvb2t1cC9zZXJ2bGV0L3Rlc3QvYmVhbnMvQmVhblRvVGVzdFByb2dyYW1tYXRpY0xvb2t1cC5qYXZhCmluZGV4IDcxMGRmMjcuLjA0MTZiYmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9ncmFtbWF0aWMtbG9va3VwL3NlcnZsZXQvdGVzdC9iZWFucy9CZWFuVG9UZXN0UHJvZ3JhbW1hdGljTG9va3VwLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2dyYW1tYXRpYy1sb29rdXAvc2VydmxldC90ZXN0L2JlYW5zL0JlYW5Ub1Rlc3RQcm9ncmFtbWF0aWNMb29rdXAuamF2YQpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiMgb2YgVW5wcm94eWFibGUgdHlwZXM6IgogICAgICAgICAgICAgICAgICsgbnVtYmVyT2ZVbnByb3h5YWJsZVR5cGVzKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtb2NrIHBheW1lbnQgcHJvY3Nzb3I6IiArIHBwKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIChudW1iZXJPZlBheW1lbnRQcm9jZXNzb3JzID09IDUpCiAgICAgICAgIC8vIEFzeW5jLCBTeW5jLCBDaGVxdWUsCiAgICAgICAgICAgICAgICAgLy8gUmVsaWFibGVDYXNoLApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3F1YWxpZmllcnMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3F1YWxpZmllcnMvV2ViVGVzdC5qYXZhCmluZGV4IDY0Yzc2NDMuLmMxYzllMmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9xdWFsaWZpZXJzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcXVhbGlmaWVycy9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRlc3RpbmcgUXVhbGlmaWVycyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk2LDEwICs5NiwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3F1YWxpZmllcnMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9xdWFsaWZpZXJzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMGExZWNiZC4uMjQxNmYzZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3F1YWxpZmllcnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcXVhbGlmaWVycy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGktcXVhbGlmaWVycyIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1hbm5vdGF0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcXVhbGlmaWVycy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcXVhbGlmaWVycy9idWlsZC54bWwKaW5kZXggYzBkOTA0ZC4uODcyZjM2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3F1YWxpZmllcnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9xdWFsaWZpZXJzL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMyArNDcsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcXVhbGlmaWVycy9zZXJ2bGV0L1F1YWxpZmllclNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9xdWFsaWZpZXJzL3NlcnZsZXQvUXVhbGlmaWVyU2VydmxldC5qYXZhCmluZGV4IDVmMzJkNjguLjMxNDg0NzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9xdWFsaWZpZXJzL3NlcnZsZXQvUXVhbGlmaWVyU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9xdWFsaWZpZXJzL3NlcnZsZXQvUXVhbGlmaWVyU2VydmxldC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIEBXZWJJbml0UGFyYW0obmFtZSA9ICJuMSIsIHZhbHVlID0gInYxIiksCiAgICAgICAgIEBXZWJJbml0UGFyYW0obmFtZSA9ICJuMiIsIHZhbHVlID0gInYyIikgfSkKIHB1YmxpYyBjbGFzcyBRdWFsaWZpZXJTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewotICAgIAorCiAgICAgQEluamVjdAogICAgIEJlYW5Ub1Rlc3RJbml0aWFsaXplck1ldGhvZEluamVjdGlvbiB0YjsKIApAQCAtNDgsNyArNDgsNyBAQAogCiAgICAgQEluamVjdAogICAgIEJlYW5Ub1Rlc3RBbnkgdGIzOwotICAgIAorCiAgICAgQEluamVjdAogICAgIEJlYW5Ub1Rlc3RNdWx0aXBsZVF1YWxpZmllcnMgdGI0OwogCkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgICAgICBtc2cgKz0gIlF1YWxpZmllciBiYXNlZCBpbmplY3Rpb24gaW50byBCZWFuVG9UZXN0Q29uc3RydWN0b3JNZXRob2RJbmplY3Rpb24gKGNvbnN0cnVjdG9yIG1ldGhvZCBpbmplY3Rpb24pIEZhaWxlZCI7CiAgICAgICAgIGlmICghdGIzLnRlc3RJbmplY3Rpb24oKSkKICAgICAgICAgICAgIG1zZyArPSAiUXVhbGlmaWVyIGJhc2VkIEBBbnkgaW5qZWN0aW9uIGludG8gQmVhblRvVGVzdEFueSBGYWlsZWQiOwotICAgICAgICBpZiAoIXRiNC50ZXN0SW5qZWN0aW9uKCkpIAorICAgICAgICBpZiAoIXRiNC50ZXN0SW5qZWN0aW9uKCkpCiAgICAgICAgICAgICBtc2cgKz0gIk11bHRpcGxlIHF1YWxpZmllcnMgdGVzdCBmYWlsZWQiOwogCiAgICAgICAgIHdyaXRlci53cml0ZSgiaW5pdFBhcmFtczogIiArIG1zZyArICJcbiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3F1YWxpZmllcnMvc2VydmxldC90ZXN0L2JlYW5zL0JlYW5Ub1Rlc3RDb25zdHJ1Y3RvckluamVjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3F1YWxpZmllcnMvc2VydmxldC90ZXN0L2JlYW5zL0JlYW5Ub1Rlc3RDb25zdHJ1Y3RvckluamVjdGlvbi5qYXZhCmluZGV4IDQ2MGYzMjAuLjRlNjc1NWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9xdWFsaWZpZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9CZWFuVG9UZXN0Q29uc3RydWN0b3JJbmplY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcXVhbGlmaWVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvQmVhblRvVGVzdENvbnN0cnVjdG9ySW5qZWN0aW9uLmphdmEKQEAgLTI4LDE0ICsyOCwxNCBAQAogcHVibGljIGNsYXNzIEJlYW5Ub1Rlc3RDb25zdHJ1Y3RvckluamVjdGlvbiB7CiAgICAgcHJpdmF0ZSBQYXltZW50UHJvY2Vzc29yIHN5bmNQYXk7CiAgICAgcHJpdmF0ZSBQYXltZW50UHJvY2Vzc29yIGFzeW5jUGF5OwotICAgIAorCiAgICAgQEluamVjdAogICAgIHB1YmxpYyBCZWFuVG9UZXN0Q29uc3RydWN0b3JJbmplY3Rpb24oQFN5bmNocm9ub3VzIFBheW1lbnRQcm9jZXNzb3Igc3luY1BheSwKICAgICAgICAgICAgIEBBc3luY2hyb25vdXMgUGF5bWVudFByb2Nlc3NvciBhc3luY1BheSkgewogICAgICAgICB0aGlzLnN5bmNQYXkgPSBzeW5jUGF5OwogICAgICAgICB0aGlzLmFzeW5jUGF5ID0gYXN5bmNQYXk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdEluamVjdGlvbigpewogICAgICAgICByZXR1cm4gKHN5bmNQYXkgaW5zdGFuY2VvZiBTeW5jaHJvbm91c1BheW1lbnRQcm9jZXNzb3IgJiYKICAgICAgICAgYXN5bmNQYXkgaW5zdGFuY2VvZiBBc3luY2hyb25vdXNQYXltZW50UHJvY2Vzc29yKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9xdWFsaWZpZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9CZWFuVG9UZXN0SW5pdGlhbGl6ZXJNZXRob2RJbmplY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9xdWFsaWZpZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9CZWFuVG9UZXN0SW5pdGlhbGl6ZXJNZXRob2RJbmplY3Rpb24uamF2YQppbmRleCAwMjM3OTc4Li40YTg5MmVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcXVhbGlmaWVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvQmVhblRvVGVzdEluaXRpYWxpemVyTWV0aG9kSW5qZWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3F1YWxpZmllcnMvc2VydmxldC90ZXN0L2JlYW5zL0JlYW5Ub1Rlc3RJbml0aWFsaXplck1ldGhvZEluamVjdGlvbi5qYXZhCkBAIC0yNywxNCArMjcsMTQgQEAKIHB1YmxpYyBjbGFzcyBCZWFuVG9UZXN0SW5pdGlhbGl6ZXJNZXRob2RJbmplY3Rpb24gewogICAgIHByaXZhdGUgUGF5bWVudFByb2Nlc3NvciBzeW5jUGF5OwogICAgIHByaXZhdGUgUGF5bWVudFByb2Nlc3NvciBhc3luY1BheTsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwdWJsaWMgdm9pZCBzZXRQYXltZW50UHJvY2Vzc29yKEBTeW5jaHJvbm91cyBQYXltZW50UHJvY2Vzc29yIHN5bmNQYXksCiAgICAgICAgICAgICBAQXN5bmNocm9ub3VzIFBheW1lbnRQcm9jZXNzb3IgYXN5bmNQYXkpIHsKICAgICAgICAgdGhpcy5zeW5jUGF5ID0gc3luY1BheTsKICAgICAgICAgdGhpcy5hc3luY1BheSA9IGFzeW5jUGF5OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIHRlc3RJbmplY3Rpb24oKXsKICAgICAgICAgcmV0dXJuIChzeW5jUGF5IGluc3RhbmNlb2YgU3luY2hyb25vdXNQYXltZW50UHJvY2Vzc29yICYmCiAgICAgICAgIGFzeW5jUGF5IGluc3RhbmNlb2YgQXN5bmNocm9ub3VzUGF5bWVudFByb2Nlc3Nvcik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcmVwb3J0LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9yZXBvcnQueG1sCmluZGV4IGE4NmM5MzcuLmRmOWJmNzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9yZXBvcnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9yZXBvcnQueG1sCkBAIC0yOSw4ICsyOSw4IEBACiAgICAgICAgICAgICA8eHNsdCBzdHlsZT0iJHtzdHlsZXNoZWV0fSIgaW49IiR7eG1sZmlsZX0iIG91dD0iJHtodG1sZmlsZX0iIGJhc2VkaXI9Ii4iIGRlc3RkaXI9Ii4iIGZhaWxPbk5vUmVzb3VyY2VzPSJmYWxzZSIgLz4KICAgICAgICAgPC90aGVuPgogICAgIDwvaWY+Ci0gICAgICAKLSAgICAKKworCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXBvcnQtc2giIC8+CiA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3J1bl90ZXN0LnNoIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3J1bl90ZXN0LnNoCmluZGV4IGJlNTRmYzUuLjI4YzQwZTAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ydW5fdGVzdC5zaAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcnVuX3Rlc3Quc2gKQEAgLTE3LDUyICsxNyw1MiBAQAogCiB0ZXN0X3J1bigpewogICAgIHByaW50ZiAiXG4lcyBcblxuIiAiPT09PT0gVEVTVCBSVU4gLSBNQUlOID09PT09IgotICAgIAotCSMgRml4IGZvciBmYWxzZSBwb3NpdGl2ZQotCWVjaG8gIjxwcm9wZXJ0eSBuYW1lPVwibGlicmFyaWVzXCIgdmFsdWU9XCInICdcIi8+IiA+PiBzbW9rZS10ZXN0cy9zaW1wbGUtd2FiLXdpdGgtY2RpL2J1aWxkLnByb3BlcnRpZXMKLQlmaW5kIC4gLW5hbWUgIlJlcFJ1bkNvbmYudHh0IiB8IHhhcmdzIHJtIC1mCi0Jcm0gCS1yZiAqLm91dHB1dCBhbGx0ZXN0cy5yZXMgJHtBUFNfSE9NRX0vdGVzdF9yZXN1bHRzKgotCQotCSMgUnVuIHRoZSB0ZXN0cwotCXNldCArZQotCWFudCBjbGVhbiAtZSAtcSA+IC9kZXYvbnVsbAotCQotCXByaW50ZiAiXG4lcyBcblxuIiAiPT09PT0gVEVTVCBSVU4gLSBTVEFSVElORyBHTEFTU0ZJU0ggQU5EIERCID09PT09IgotCSR7UzFBU19IT01FfS9iaW4vYXNhZG1pbiBzdGFydC1kb21haW4KLQkke1MxQVNfSE9NRX0vYmluL2FzYWRtaW4gc3RhcnQtZGF0YWJhc2UKLQkKLQlwcmludGYgIlxuJXMgXG5cbiIgIj09PT09IFRFU1QgUlVOIC0gUlVOTklORyBURVNUUyBmb3IgJHtUQVJHRVR9ID09PT09IgotCWFudCAke1RBUkdFVH0gfCB0ZWUgJHtURVNUX1JVTl9MT0d9Ci0JCi0JcHJpbnRmICJcbiVzIFxuXG4iICI9PT09PSBURVNUIFJVTiAtIFNUT1BQSU5HIEdMQVNTRklTSCBBTkQgREIgPT09PT0iCi0JJHtTMUFTX0hPTUV9L2Jpbi9hc2FkbWluIHN0b3AtZG9tYWluCi0JJHtTMUFTX0hPTUV9L2Jpbi9hc2FkbWluIHN0b3AtZGF0YWJhc2UKLQlzZXQgLWUKKworICAgICMgRml4IGZvciBmYWxzZSBwb3NpdGl2ZQorICAgIGVjaG8gIjxwcm9wZXJ0eSBuYW1lPVwibGlicmFyaWVzXCIgdmFsdWU9XCInICdcIi8+IiA+PiBzbW9rZS10ZXN0cy9zaW1wbGUtd2FiLXdpdGgtY2RpL2J1aWxkLnByb3BlcnRpZXMKKyAgICBmaW5kIC4gLW5hbWUgIlJlcFJ1bkNvbmYudHh0IiB8IHhhcmdzIHJtIC1mCisgICAgcm0gICAgIC1yZiAqLm91dHB1dCBhbGx0ZXN0cy5yZXMgJHtBUFNfSE9NRX0vdGVzdF9yZXN1bHRzKgorCisgICAgIyBSdW4gdGhlIHRlc3RzCisgICAgc2V0ICtlCisgICAgYW50IGNsZWFuIC1lIC1xID4gL2Rldi9udWxsCisKKyAgICBwcmludGYgIlxuJXMgXG5cbiIgIj09PT09IFRFU1QgUlVOIC0gU1RBUlRJTkcgR0xBU1NGSVNIIEFORCBEQiA9PT09PSIKKyAgICAke1MxQVNfSE9NRX0vYmluL2FzYWRtaW4gc3RhcnQtZG9tYWluCisgICAgJHtTMUFTX0hPTUV9L2Jpbi9hc2FkbWluIHN0YXJ0LWRhdGFiYXNlCisKKyAgICBwcmludGYgIlxuJXMgXG5cbiIgIj09PT09IFRFU1QgUlVOIC0gUlVOTklORyBURVNUUyBmb3IgJHtUQVJHRVR9ID09PT09IgorICAgIGFudCAke1RBUkdFVH0gfCB0ZWUgJHtURVNUX1JVTl9MT0d9CisKKyAgICBwcmludGYgIlxuJXMgXG5cbiIgIj09PT09IFRFU1QgUlVOIC0gU1RPUFBJTkcgR0xBU1NGSVNIIEFORCBEQiA9PT09PSIKKyAgICAke1MxQVNfSE9NRX0vYmluL2FzYWRtaW4gc3RvcC1kb21haW4KKyAgICAke1MxQVNfSE9NRX0vYmluL2FzYWRtaW4gc3RvcC1kYXRhYmFzZQorICAgIHNldCAtZQogfQogCiBnZXRfdGVzdF90YXJnZXQoKXsKICAgICBwcmludGYgIlxuJXMgXG5cbiIgIj09PT09IEdFVFRJTkcgVEVTVCBUQVJHRVQgPT09PT0iCi0JY2FzZSAkezF9IGluCi0JCWNkaV9hbGwgKQotCQkJVEFSR0VUPWFsbAotCQkJZXhwb3J0IFRBUkdFVDs7Ci0JZXNhYworICAgIGNhc2UgJHsxfSBpbgorICAgICAgICBjZGlfYWxsICkKKyAgICAgICAgICAgIFRBUkdFVD1hbGwKKyAgICAgICAgICAgIGV4cG9ydCBUQVJHRVQ7OworICAgIGVzYWMKIH0KIAogCiBydW5fdGVzdF9pZCgpewotCXVuemlwX3Rlc3RfcmVzb3VyY2VzICR7V09SS1NQQUNFfS9idW5kbGVzL2dsYXNzZmlzaC56aXAKLQljZCBgZGlybmFtZSAkezB9YAotCXRlc3RfaW5pdAotCWdldF90ZXN0X3RhcmdldCAkezF9Ci0JdGVzdF9ydW4KLQljaGVja19zdWNjZXNzZnVsX3J1bgorICAgIHVuemlwX3Rlc3RfcmVzb3VyY2VzICR7V09SS1NQQUNFfS9idW5kbGVzL2dsYXNzZmlzaC56aXAKKyAgICBjZCBgZGlybmFtZSAkezB9YAorICAgIHRlc3RfaW5pdAorICAgIGdldF90ZXN0X3RhcmdldCAkezF9CisgICAgdGVzdF9ydW4KKyAgICBjaGVja19zdWNjZXNzZnVsX3J1bgogICAgIGdlbmVyYXRlX2p1bml0X3JlcG9ydCAkezF9CiAgICAgY2hhbmdlX2p1bml0X3JlcG9ydF9jbGFzc19uYW1lcwogfQogCiBsaXN0X3Rlc3RfaWRzKCl7Ci0JZWNobyBjZGlfYWxsCisgICAgZWNobyBjZGlfYWxsCiB9CiAKIE9QVD0kezF9CkBAIC03MCw5ICs3MCw5IEBACiBzb3VyY2UgYGRpcm5hbWUgJHswfWAvLi4vLi4vLi4vY29tbW9uX3Rlc3Quc2gKIAogY2FzZSAke09QVH0gaW4KLQlsaXN0X3Rlc3RfaWRzICkKLQkJbGlzdF90ZXN0X2lkczs7Ci0JcnVuX3Rlc3RfaWQgKQotCQl0cmFwICJjb3B5X3Rlc3RfYXJ0aWZhY3RzICR7VEVTVF9JRH0iIEVYSVQKLQkJcnVuX3Rlc3RfaWQgJHtURVNUX0lEfSA7OworICAgIGxpc3RfdGVzdF9pZHMgKQorICAgICAgICBsaXN0X3Rlc3RfaWRzOzsKKyAgICBydW5fdGVzdF9pZCApCisgICAgICAgIHRyYXAgImNvcHlfdGVzdF9hcnRpZmFjdHMgJHtURVNUX0lEfSIgRVhJVAorICAgICAgICBydW5fdGVzdF9pZCAke1RFU1RfSUR9IDs7CiBlc2FjCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvYnVpbGQueG1sCmluZGV4IDdiM2FjZGQuLjE2YzBjNGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvYnVpbGQueG1sCkBAIC05MSwxNSArOTEsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPiBVc2FnZToKLQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBzY29wZXMgdGVzdHMpCi0JCWFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgc2NvcGVzIHRlc3RzKQotCQlhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIHNjb3BlcyB0ZXN0cykKLQkJYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIHNjb3BlcyB0ZXN0cykKLQkJYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIHNjb3BlcyBhcHBzKQotCQlhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIHNjb3BlcyB0ZXN0cykKLQkJYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgc2NvcGVzIGFwcHMpCi0JCWFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3Igc2NvcGVzIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4gVXNhZ2U6CisgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgc2NvcGVzIHRlc3RzKQorICAgICAgICBhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIHNjb3BlcyB0ZXN0cykKKyAgICAgICAgYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBzY29wZXMgdGVzdHMpCisgICAgICAgIGFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBzY29wZXMgdGVzdHMpCisgICAgICAgIGFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBzY29wZXMgYXBwcykKKyAgICAgICAgYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBzY29wZXMgdGVzdHMpCisgICAgICAgIGFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgIHNjb3BlcyBhcHBzKQorICAgICAgICBhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIHNjb3BlcyB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL2RlcGVuZGVudC1zY29wZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9kZXBlbmRlbnQtc2NvcGUvYnVpbGQucHJvcGVydGllcwppbmRleCBjMTg5M2YzLi5kZGM1MGMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL2RlcGVuZGVudC1zY29wZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvZGVwZW5kZW50LXNjb3BlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZGVwZW5kZW50LXNjb3BlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL2RlcGVuZGVudC1zY29wZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL2RlcGVuZGVudC1zY29wZS9idWlsZC54bWwKaW5kZXggODNhZDY2Ni4uMDY5MTIxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9kZXBlbmRlbnQtc2NvcGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvZGVwZW5kZW50LXNjb3BlL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMyArNDcsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL2RlcGVuZGVudC1zY29wZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdERlcGVuZGVudFNjb3BlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvZGVwZW5kZW50LXNjb3BlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0RGVwZW5kZW50U2NvcGVkQmVhbi5qYXZhCmluZGV4IGI5NzhlNjAuLjBhNTllYmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvZGVwZW5kZW50LXNjb3BlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0RGVwZW5kZW50U2NvcGVkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvZGVwZW5kZW50LXNjb3BlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0RGVwZW5kZW50U2NvcGVkQmVhbi5qYXZhCkBAIC0yMywxMSArMjMsMTEgQEAKIC8vaW50byBzZXNzaW9uIHNjb3BlZCBvciBjb252ZXJzYXRpb24gc2NvcGVkIGJlYW4KIHB1YmxpYyBjbGFzcyBUZXN0RGVwZW5kZW50U2NvcGVkQmVhbiB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGluc3RhbnRpYXRpb25Db3VudGVyID0gMDsKLSAgICAKKwogICAgIHB1YmxpYyBUZXN0RGVwZW5kZW50U2NvcGVkQmVhbigpewogICAgICAgICBpbnN0YW50aWF0aW9uQ291bnRlcisrOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBpbnQgZ2V0SW5zdGFuY2VzQ291bnQoKXsKICAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudGlhdGlvbkNvdW50ZXI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9kZXBlbmRlbnQtc2NvcGUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RSZXF1ZXN0U2NvcGVkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9kZXBlbmRlbnQtc2NvcGUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RSZXF1ZXN0U2NvcGVkQmVhbi5qYXZhCmluZGV4IDE5MWFmOWMuLjk5ZTdkMTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvZGVwZW5kZW50LXNjb3BlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0UmVxdWVzdFNjb3BlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL2RlcGVuZGVudC1zY29wZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdFJlcXVlc3RTY29wZWRCZWFuLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIAogICAgIEBJbmplY3QKICAgICBwcml2YXRlIFRlc3REZXBlbmRlbnRTY29wZWRCZWFuIHRkc2I7Ci0gICAgCisKICAgICBwdWJsaWMgVGVzdERlcGVuZGVudFNjb3BlZEJlYW4gZ2V0RGVwZW5kZW50U2NvcGVkQmVhbigpewogICAgICAgICByZXR1cm4gdGhpcy50ZHNiOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvbmV3LXF1YWxpZmllci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9uZXctcXVhbGlmaWVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWFmZWI4Zi4uYWZlNjIzMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9uZXctcXVhbGlmaWVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9uZXctcXVhbGlmaWVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbmV3LXF1YWxpZmllciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9uZXctcXVhbGlmaWVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvbmV3LXF1YWxpZmllci9idWlsZC54bWwKaW5kZXggODNhZDY2Ni4uMDY5MTIxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9uZXctcXVhbGlmaWVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL25ldy1xdWFsaWZpZXIvYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ3LDIzICs0NywyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc1LDEwICs3NSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvbmV3LXF1YWxpZmllci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdFJlcXVlc3RTY29wZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL25ldy1xdWFsaWZpZXIvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RSZXF1ZXN0U2NvcGVkQmVhbi5qYXZhCmluZGV4IDk3MmVhZDQuLmE2MTE5NTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvbmV3LXF1YWxpZmllci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdFJlcXVlc3RTY29wZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9uZXctcXVhbGlmaWVyL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0UmVxdWVzdFNjb3BlZEJlYW4uamF2YQpAQCAtMjEsMTUgKzIxLDE1IEBACiBAUmVxdWVzdFNjb3BlZAogcHVibGljIGNsYXNzIFRlc3RSZXF1ZXN0U2NvcGVkQmVhbiB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGluc3RhbnRpYXRpb25Db3VudCA9IDA7Ci0gICAgCisKICAgICBwdWJsaWMgVGVzdFJlcXVlc3RTY29wZWRCZWFuKCl7CiAgICAgICAgIGluc3RhbnRpYXRpb25Db3VudCsrOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBpbnQgZ2V0SW5zdGFudGlhdGlvbkNvdW50KCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5zdGFuY2VzIG9mIFRlc3RSZXF1ZXN0U2NvcGVkQmVhbj0iICsgaW5zdGFudGlhdGlvbkNvdW50KTsKICAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudGlhdGlvbkNvdW50OwogICAgIH0KIAotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL25ldy1xdWFsaWZpZXIvc2VydmxldC90ZXN0L3NlcnZsZXRzL05ld1F1YWxpZmllclRlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL25ldy1xdWFsaWZpZXIvc2VydmxldC90ZXN0L3NlcnZsZXRzL05ld1F1YWxpZmllclRlc3RTZXJ2bGV0LmphdmEKaW5kZXggOTc1YTM1NS4uMmQ2YWZjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9uZXctcXVhbGlmaWVyL3NlcnZsZXQvdGVzdC9zZXJ2bGV0cy9OZXdRdWFsaWZpZXJUZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvbmV3LXF1YWxpZmllci9zZXJ2bGV0L3Rlc3Qvc2VydmxldHMvTmV3UXVhbGlmaWVyVGVzdFNlcnZsZXQuamF2YQpAQCAtMzUsNyArMzUsNyBAQAogCiAgICAgQEluamVjdAogICAgIFRlc3RSZXF1ZXN0U2NvcGVkQmVhbiB0cnNiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3RSZXF1ZXN0U2NvcGVkQmVhbiBhbm90aGVyUmVmVG9SZXF1ZXN0U2NvcGVkQmVhbjsKIApAQCAtNDYsNyArNDYsNyBAQAogICAgIEBJbmplY3QKICAgICBATmV3CiAgICAgSW5zdGFuY2U8VGVzdFJlcXVlc3RTY29wZWRCZWFuPiBuZXdSZXF1ZXN0U2NvcGVkQmVhblByb2dyYW1tYXRpY0xvb2t1cDsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBATmV3KFRlc3RSZXF1ZXN0U2NvcGVkQmVhbi5jbGFzcykKICAgICBJbnN0YW5jZTxUZXN0UmVxdWVzdFNjb3BlZEJlYW4+IG5ld1JlcXVlc3RTY29wZWRCZWFuUHJvZ3JhbW1hdGljTG9va3VwMjsKQEAgLTY2LDE5ICs2NiwxOSBAQAogICAgICAgICBpZiAoISh0cnNiLmdldEluc3RhbnRpYXRpb25Db3VudCgpID09IDMpKQogICAgICAgICAgICAgbXNnICs9ICJSZXF1ZXN0IHNjb3BlZCBiZWFuIGNyZWF0ZWQgbW9yZSB0aGFuIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgdGltZXMiOwogCi0gICAgICAgIGlmICghYXJlSW5qZWN0ZWNlZEluc3RhbmNlc0VxdWFsKHRyc2IsIGFub3RoZXJSZWZUb1JlcXVlc3RTY29wZWRCZWFuKSkgCisgICAgICAgIGlmICghYXJlSW5qZWN0ZWNlZEluc3RhbmNlc0VxdWFsKHRyc2IsIGFub3RoZXJSZWZUb1JlcXVlc3RTY29wZWRCZWFuKSkKICAgICAgICAgICAgIG1zZyArPSAiVHdvIHJlZmVyZW5jZXMgdG8gdGhlIHNhbWUgcmVxdWVzdCBzY29wZWQgYmVhbiBhcmUgbm90IGVxdWFsIjsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGFyZUluamVjdGVjZWRJbnN0YW5jZXNFcXVhbCh0cnNiLCBuZXdSZXF1ZXN0U2NvcGVkQmVhbikpCiAgICAgICAgICAgICBtc2cgKz0gIlJlcXVlc3Qgc2NvcGVkIEJlYW4gaW5qZWN0ZWQgd2l0aCBATmV3IHF1YWxpZmllciBtdXN0IG5vdCBiZSBlcXVhbCB0byB0aGUgbm9ybWFsIFJlcXVlc3Qgc2NvcGVkIGJlYW4iOwogCiAgICAgICAgIGlmICghdGVzdElzQ2xpZW50UHJveHkodHJzYiwgVGVzdFJlcXVlc3RTY29wZWRCZWFuLmNsYXNzKSkKICAgICAgICAgICAgIG1zZyArPSAiUmVxdWVzdCBzY29wZWQgYmVhbnMgbXVzdCBiZSBpbmplY3RlZCBhcyBhIGNsaWVudCBwcm94eSI7Ci0gICAgICAgIAotICAgICAgICBpZihuZXdSZXF1ZXN0U2NvcGVkQmVhblByb2dyYW1tYXRpY0xvb2t1cC5nZXQoKSA9PSBudWxsKSAKKworICAgICAgICBpZihuZXdSZXF1ZXN0U2NvcGVkQmVhblByb2dyYW1tYXRpY0xvb2t1cC5nZXQoKSA9PSBudWxsKQogICAgICAgICAgICAgbXNnICs9ICJBIG5ldyBpbnN0YW5jZSBvZiBSZXF1ZXN0IFNjb3BlZCBCZWFuIG9idGFpbmVkIHRocm91Z2ggcHJvZ3JhbW1hdGljIGxvb2t1cCBmYWlsZWQiOwotICAgICAgICAKLSAgICAgICAgaWYobmV3UmVxdWVzdFNjb3BlZEJlYW5Qcm9ncmFtbWF0aWNMb29rdXAyLmdldCgpID09IG51bGwpIAorCisgICAgICAgIGlmKG5ld1JlcXVlc3RTY29wZWRCZWFuUHJvZ3JhbW1hdGljTG9va3VwMi5nZXQoKSA9PSBudWxsKQogICAgICAgICAgICAgbXNnICs9ICJBIG5ldyhjb21wbGV4IHR5cGUgc3BlY2lmaWNhdGlvbiBzY2VuYXJpbykgaW5zdGFuY2Ugb2YgUmVxdWVzdCBTY29wZWQgQmVhbiBvYnRhaW5lZCB0aHJvdWdoIHByb2dyYW1tYXRpYyBsb29rdXAgZmFpbGVkIjsKIAogICAgICAgICB3cml0ZXIud3JpdGUobXNnICsgIlxuIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQ2NDg0OGUuLjEyOGRhZTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMyArMTUsMjMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaS1oZWxsby1tZGIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0ic2ltcGxlLmNsaWVudCIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5jZGkuaGVsbG8ubWRiLmNsaWVudC5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImJlYW5zLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYmVhbnMueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL2J1aWxkLnhtbAppbmRleCAwZDc1MDRiLi5lZjY1MGJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzcmMiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkJlYW4qLmNsYXNzLCoqLypIZWxsbyoiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MsIHRlc3QvZWpiL3Nlc3Npb24vSGVsbG9TbGVzcyouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc3LDIwICs3NywyMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc3RhbmRhbG9uZWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy9qYWthcnRhLmptcy1hcGkuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzaW1wbGUuY2xpZW50fSI+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDVmZGFjMDUuLjA3OTc5YzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgIG1lc3NhZ2Uuc2V0Qm9vbGVhblByb3BlcnR5KCJmbGFnIiwgdHJ1ZSk7CiAgICAgICAgIG1lc3NhZ2Uuc2V0SW50UHJvcGVydHkoIm51bSIsIDIpOwogICAgICAgICBzZW5kTXNncygoamFrYXJ0YS5qbXMuUXVldWUpIGRlc3QsIG1lc3NhZ2UsIG51bSk7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmVtb3RlIGJlYW46IiArIGhlbGxvU3RhdGVsZXNzUmVtb3RlQmVhbik7CiAgICAgICAgIFN0cmluZyByZXNwb25zZSA9IGhlbGxvU3RhdGVsZXNzUmVtb3RlQmVhbi5oZWxsbygpOwogICAgICAgICBpZiAoIXJlc3BvbnNlLmVxdWFscygiaGVsbG8iKSl7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvc3JjL3Rlc3QvYmVhbnMvQmVhblRvVGVzdFRpbWVyVXNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvc3JjL3Rlc3QvYmVhbnMvQmVhblRvVGVzdFRpbWVyVXNlLmphdmEKaW5kZXggNTc5NjU0My4uZjZkM2RlMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2JlYW5zL0JlYW5Ub1Rlc3RUaW1lclVzZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9zcmMvdGVzdC9iZWFucy9CZWFuVG9UZXN0VGltZXJVc2UuamF2YQpAQCAtMTksMTkgKzE5LDE5IEBACiBpbXBvcnQgamFrYXJ0YS5pbmplY3QuU2luZ2xldG9uOwogCiAKLS8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLiAKKy8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLgogCiBAU2luZ2xldG9uCiBwdWJsaWMgY2xhc3MgQmVhblRvVGVzdFRpbWVyVXNlIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAgICAgcHJpdmF0ZSBib29sZWFuIHRlc3RUb0NoZWNrSWZUaW1lckludm9rZWQgPSBmYWxzZTsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFJlc3VsdChib29sZWFuIHZhbCkgewogICAgICAgICB0aGlzLnRlc3RUb0NoZWNrSWZUaW1lckludm9rZWQgPSB2YWw7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gZ2V0UmVzdWx0KCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0VG9DaGVja0lmVGltZXJJbnZva2VkOwogICAgIH0KLSAgCisKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2JlYW5zL1Rlc3RBcHBsaWNhdGlvblNjb3BlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9zcmMvdGVzdC9iZWFucy9UZXN0QXBwbGljYXRpb25TY29wZWRCZWFuLmphdmEKaW5kZXggZjRmZGQyOS4uZDlkNDJiOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2JlYW5zL1Rlc3RBcHBsaWNhdGlvblNjb3BlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvc3JjL3Rlc3QvYmVhbnMvVGVzdEFwcGxpY2F0aW9uU2NvcGVkQmVhbi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYWthcnRhLmVudGVycHJpc2UuY29udGV4dC5BcHBsaWNhdGlvblNjb3BlZDsKIAotLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuIAorLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuCiBAQXBwbGljYXRpb25TY29wZWQKIHB1YmxpYyBjbGFzcyBUZXN0QXBwbGljYXRpb25TY29wZWRCZWFuCiB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2JlYW5zL1Rlc3RSZXF1ZXN0U2NvcGVkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2JlYW5zL1Rlc3RSZXF1ZXN0U2NvcGVkQmVhbi5qYXZhCmluZGV4IDExODUwM2IuLjBhZGQ4NDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9zcmMvdGVzdC9iZWFucy9UZXN0UmVxdWVzdFNjb3BlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvc3JjL3Rlc3QvYmVhbnMvVGVzdFJlcXVlc3RTY29wZWRCZWFuLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogaW1wb3J0IGpha2FydGEuZW50ZXJwcmlzZS5jb250ZXh0LlJlcXVlc3RTY29wZWQ7CiAKLS8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLiAKKy8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLgogQFJlcXVlc3RTY29wZWQKIHB1YmxpYyBjbGFzcyBUZXN0UmVxdWVzdFNjb3BlZEJlYW4KIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvc3JjL3Rlc3QvZWpiL21kYi9NZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2VqYi9tZGIvTWVzc2FnZUJlYW4uamF2YQppbmRleCBjN2QwZGNhLi5lMmJkMDk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvc3JjL3Rlc3QvZWpiL21kYi9NZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9zcmMvdGVzdC9lamIvbWRiL01lc3NhZ2VCZWFuLmphdmEKQEAgLTU4LDcgKzU4LDcgQEAKICAgICBUZXN0QXBwbGljYXRpb25TY29wZWRCZWFuIHRhc2I7CiAgICAgQEluamVjdAogICAgIFRlc3RSZXF1ZXN0U2NvcGVkQmVhbiB0cnNiOwotICAgIAorCiAgICAgQEluamVjdCBCZWFuTWFuYWdlciBibTsKIAogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKQEAgLTg4LDcgKzg4LDcgQEAKICAgICAgICAgICAgIGlmICh0cnNiID09IG51bGwpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICJJbmplY3Rpb24gb2YgcmVxdWVzdCBzY29wZWQgQmVhbiBpbiBNREIgZmFpbGVkIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgY29ubmVjdGlvbiA9IHFjRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIFF1ZXVlU2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5jcmVhdGVRdWV1ZVNlc3Npb24oZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvc3JjL3Rlc3QvZWpiL3Nlc3Npb24vSGVsbG8xLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvc3JjL3Rlc3QvZWpiL3Nlc3Npb24vSGVsbG8xLmphdmEKaW5kZXggNjc3M2IzMS4uMmE1ZGQzYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2VqYi9zZXNzaW9uL0hlbGxvMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9zcmMvdGVzdC9lamIvc2Vzc2lvbi9IZWxsbzEuamF2YQpAQCAtMTksNSArMTksNSBAQAogcHVibGljIGludGVyZmFjZSBIZWxsbzEgewogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oU3RyaW5nIHMpOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvc3JjL3Rlc3QvZWpiL3Nlc3Npb24vSGVsbG9TdGF0ZWZ1bC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2VqYi9zZXNzaW9uL0hlbGxvU3RhdGVmdWwuamF2YQppbmRleCA5ZWU5ODhjLi4zODk3MWRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvc3JjL3Rlc3QvZWpiL3Nlc3Npb24vSGVsbG9TdGF0ZWZ1bC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9zcmMvdGVzdC9lamIvc2Vzc2lvbi9IZWxsb1N0YXRlZnVsLmphdmEKQEAgLTM0LDkgKzM0LDkgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCdXNpbmVzcyBtZXRob2QgbWFya2VkIHdpdGggQFJlbW92ZSBjYWxsZWQgaW4gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cpOwogICAgIH0KLSAgICAKKwogICAgIEBQcmVEZXN0cm95IHB1YmxpYyB2b2lkIG15UHJlRGVzdHJveU1ldGhvZCgpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQUkUtREVTVFJPWSBjYWxsYmFjayByZWNlaXZlZCBpbiAiICsgbXNnKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBSRS1ERVNUUk9ZIGNhbGxiYWNrIHJlY2VpdmVkIGluICIgKyBtc2cpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2VqYi9zZXNzaW9uL0hlbGxvU3RhdGVsZXNzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvc3JjL3Rlc3QvZWpiL3Nlc3Npb24vSGVsbG9TdGF0ZWxlc3MuamF2YQppbmRleCAyNTQ2ZmRiLi4wODVjOTBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvc3JjL3Rlc3QvZWpiL3Nlc3Npb24vSGVsbG9TdGF0ZWxlc3MuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvc3JjL3Rlc3QvZWpiL3Nlc3Npb24vSGVsbG9TdGF0ZWxlc3MuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogLy8gYmVhbiBvbmx5IGltcGxlbWVudHMgb25lIGludGVyZmFjZSBpdCBpcyBhc3N1bWVkIHRvIGJlCiAvLyBhIGxvY2FsIGJ1c2luZXNzIGludGVyZmFjZS4KIAotQFN0YXRlbGVzcyhkZXNjcmlwdGlvbj0ibXkgc3RhdGVsZXNzIGJlYW4gZGVzY3JpcHRpb24iKSAKK0BTdGF0ZWxlc3MoZGVzY3JpcHRpb249Im15IHN0YXRlbGVzcyBiZWFuIGRlc2NyaXB0aW9uIikKIHB1YmxpYyBjbGFzcyBIZWxsb1N0YXRlbGVzcyBpbXBsZW1lbnRzIEhlbGxvMSB7CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbyhTdHJpbmcgcykgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2VqYi9zZXNzaW9uL0hlbGxvU3RhdGVsZXNzUmVtb3RlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2VqYi9zZXNzaW9uL0hlbGxvU3RhdGVsZXNzUmVtb3RlQmVhbi5qYXZhCmluZGV4IDNhZWJkMzUuLjNmMjE3NjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9zcmMvdGVzdC9lamIvc2Vzc2lvbi9IZWxsb1N0YXRlbGVzc1JlbW90ZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvc3JjL3Rlc3QvZWpiL3Nlc3Npb24vSGVsbG9TdGF0ZWxlc3NSZW1vdGVCZWFuLmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKIAogICAgIEBJbmplY3QKICAgICBCZWFuTWFuYWdlciBibTsKLSAgICAKKwogICAgIEBJbmplY3QgQmVhblRvVGVzdFRpbWVyVXNlIHRpbWVyQmVhblRlc3Q7CiAKICAgICBAUG9zdENvbnN0cnVjdApAQCAtNTUsMTAgKzU1LDEwIEBACiAgICAgICAgICAgICBtc2cgKz0gIkluamVjdGlvbiBvZiBBcHBsaWNhdGlvbiBzY29wZWQgYmVhbiBpbiBFSkIgcmVtb3RlIG1ldGhvZCBmYWlsZWQiOwogICAgICAgICBpZiAodHJzYiA9PSBudWxsKQogICAgICAgICAgICAgbXNnICs9ICJJbmplY3Rpb24gb2YgUmVxdWVzdCBzY29wZWQgYmVhbiBpbiBFSkIgcmVtb3RlIG1ldGhvZCBmYWlsZWQiOwotICAgICAgICAKLSAgICAgICAgaWYgKCF0aW1lckJlYW5UZXN0LmdldFJlc3VsdCgpKSAKKworICAgICAgICBpZiAoIXRpbWVyQmVhblRlc3QuZ2V0UmVzdWx0KCkpCiAgICAgICAgICAgICBtc2cgKz0gIkluamVjdGlvbiBvZiBzZXNzaW9uIHNjb3BlZCBiZWFuIGludG8gRUpCIHRpbWVyIGJlYW5zIGZhaWxlZCI7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG1zZzsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3NpbmdsZXRvbi1zY29wZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9zaW5nbGV0b24tc2NvcGUvYnVpbGQucHJvcGVydGllcwppbmRleCA0NTk4MGY0Li44Mjk5YjUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3NpbmdsZXRvbi1zY29wZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvc2luZ2xldG9uLXNjb3BlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2luZ2xldG9uLXNjb3BlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3NpbmdsZXRvbi1zY29wZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3NpbmdsZXRvbi1zY29wZS9idWlsZC54bWwKaW5kZXggODNhZDY2Ni4uMDY5MTIxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9zaW5nbGV0b24tc2NvcGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvc2luZ2xldG9uLXNjb3BlL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMyArNDcsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3NpbmdsZXRvbi1zY29wZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdFNlc3Npb25TY29wZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3NpbmdsZXRvbi1zY29wZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdFNlc3Npb25TY29wZWRCZWFuLmphdmEKaW5kZXggMTNkY2E3Ny4uNTg1Nzk0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9zaW5nbGV0b24tc2NvcGUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RTZXNzaW9uU2NvcGVkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvc2luZ2xldG9uLXNjb3BlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0U2Vzc2lvblNjb3BlZEJlYW4uamF2YQpAQCAtMjYsNyArMjYsNyBAQAogcHVibGljIGNsYXNzIFRlc3RTZXNzaW9uU2NvcGVkQmVhbiBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZXsKICAgICBASW5qZWN0CiAgICAgSW5zdGFuY2U8VGVzdFNpbmdsZXRvblNjb3BlZEJlYW4+IHRzc0luc3RhbmNlOwotICAgIAorCiAgICAgcHVibGljIFRlc3RTaW5nbGV0b25TY29wZWRCZWFuIGdldFNpbmdsZXRvblNjb3BlZEJlYW4oKXsKICAgICAgICAgcmV0dXJuIHRzc0luc3RhbmNlLmdldCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvc2luZ2xldG9uLXNjb3BlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0U2luZ2xldG9uU2NvcGVkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9zaW5nbGV0b24tc2NvcGUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RTaW5nbGV0b25TY29wZWRCZWFuLmphdmEKaW5kZXggYjIxZGU5OC4uY2RkYzYzOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9zaW5nbGV0b24tc2NvcGUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RTaW5nbGV0b25TY29wZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9zaW5nbGV0b24tc2NvcGUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RTaW5nbGV0b25TY29wZWRCZWFuLmphdmEKQEAgLTI0LDExICsyNCwxMSBAQAogLy9pbnRvIHNlc3Npb24gc2NvcGVkIG9yIGNvbnZlcnNhdGlvbiBzY29wZWQgYmVhbgogcHVibGljIGNsYXNzIFRlc3RTaW5nbGV0b25TY29wZWRCZWFuIHsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgaW5zdGFudGlhdGlvbkNvdW50ZXIgPSAwOwotICAgIAorCiAgICAgcHVibGljIFRlc3RTaW5nbGV0b25TY29wZWRCZWFuKCl7CiAgICAgICAgIGluc3RhbnRpYXRpb25Db3VudGVyKys7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGludCBnZXRJbnN0YW5jZXNDb3VudCgpewogICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW50aWF0aW9uQ291bnRlcjsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3NpbmdsZXRvbi1zY29wZS9zZXJ2bGV0L3Rlc3Qvc2VydmxldHMvU2luZ2xldG9uU2NvcGVkU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9zaW5nbGV0b24tc2NvcGUvc2VydmxldC90ZXN0L3NlcnZsZXRzL1NpbmdsZXRvblNjb3BlZFNlcnZsZXQuamF2YQppbmRleCBhNzY5NGNiLi5jYjAwZjJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3NpbmdsZXRvbi1zY29wZS9zZXJ2bGV0L3Rlc3Qvc2VydmxldHMvU2luZ2xldG9uU2NvcGVkU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvc2luZ2xldG9uLXNjb3BlL3NlcnZsZXQvdGVzdC9zZXJ2bGV0cy9TaW5nbGV0b25TY29wZWRTZXJ2bGV0LmphdmEKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgfQogICAgICAgICBpZiAoYm0xID09IG51bGwpCiAgICAgICAgICAgICBtc2cgKz0gIkJlYW5NYW5hZ2VyIEluamVjdGlvbiB2aWEgY29tcG9uZW50IGVudmlyb25tZW50IGxvb2t1cCBmYWlsZWQiOwotICAgICAgICBpZiAodGIuZ2V0SW5zdGFuY2VzQ291bnQoKSA+IDEpIAorICAgICAgICBpZiAodGIuZ2V0SW5zdGFuY2VzQ291bnQoKSA+IDEpCiAgICAgICAgICAgICBtc2cgKz0gIlNpbmdsZXRvbiBzY29wZWQgYmVhbiBtdXN0IGJlIGNyZWF0ZWQgb25seSBvbmNlIjsKICAgICAgICAgaWYgKCFhcmVJbmplY3RlY2VkSW5zdGFuY2VzRXF1YWwodGIsIGFub3RoZXJJbmplY3RlZFNpbmdsZXRvbkluc3RhbmNlKSkKICAgICAgICAgICAgIG1zZyArPSAiVHdvIGRpZmZlcmVudCBpbmplY3Rpb24gb2YgYSBTaW5nbGV0b24gcHNldWRvLXNjb3BlZCBCZWFuIG11c3QgcG9pbnQgdG8gdGhlIHNhbWUgYmVhbiBpbnN0YW5jZSI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL2J1aWxkLnhtbAppbmRleCA1M2E5NzJjLi40NGRiYzk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9idWlsZC54bWwKQEAgLTMwLDcgKzMwLDcgQEAKICAgICAmY29tbW9uQnVpbGQ7CiAgICAgJmNvbW1vblJ1bjsKICAgICAmcmVwb3J0aW5nOwotICAgIAorCiAgICAgPHByb3BlcnR5IG5hbWU9InNtb2tlLXRhcmdldCIgdmFsdWU9ImFsbCIvPgogCiAgICAgPHRhc2tkZWYgcmVzb3VyY2U9Im5ldC9zZi9hbnRjb250cmliL2FudGNvbnRyaWIucHJvcGVydGllcyI+CkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgICAgICAgICA8L2Vsc2U+CiAgICAgICAgICAgICA8L2lmPgogICAgICAgICAgICAgPGFudCBkaXI9InNpbXBsZS1lamItY2RpIiB0YXJnZXQ9IiR7c21va2UtdGFyZ2V0fSIvPgotICAgICAgICAKKwogICAgICAgICA8IS0tCiAgICAgICAgIE5vdCBydW5uaW5nIHVudGlsCiAgICAgICAgIGh0dHBzOi8vaXNzdWVzLmpib3NzLm9yZy9icm93c2UvV0VMRC0xMzQ1IGlzIGZpeGVkLiAoZml4ZWQgaW4gMi4wLjAuQmV0YTUpCkBAIC0xMzEsMTUgKzEzMSwxNSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+IFVzYWdlOgotCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIHNtb2tlIHRlc3RzKQotCQlhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIHNtb2tlIHRlc3RzKQotCQlhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIHNtb2tlIHRlc3RzKQotCQlhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3Igc21va2UgdGVzdHMpCi0JCWFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBzbW9rZSBhcHBzKQotCQlhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIHNtb2tlIHRlc3RzKQotCQlhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBzbW9rZSBhcHBzKQotCQlhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIHNtb2tlIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4gVXNhZ2U6CisgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgc21va2UgdGVzdHMpCisgICAgICAgIGFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgc21va2UgdGVzdHMpCisgICAgICAgIGFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgc21va2UgdGVzdHMpCisgICAgICAgIGFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBzbW9rZSB0ZXN0cykKKyAgICAgICAgYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIHNtb2tlIGFwcHMpCisgICAgICAgIGFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgc21va2UgdGVzdHMpCisgICAgICAgIGFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgIHNtb2tlIGFwcHMpCisgICAgICAgIGFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3Igc21va2UgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi9XZWJUZXN0LmphdmEKaW5kZXggZmVlN2QxOC4uOThiMzgzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24vV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEBXZWJTZXJ2bGV0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDYsNyArNDYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtOTUsMTAgKzk1LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQyZjM2YWEuLmY1MTc4MjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtYW5ub3RhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi9idWlsZC54bWwKaW5kZXggODNhZDY2Ni4uMDY5MTIxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24vYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ3LDIzICs0NywyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc1LDEwICs3NSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24vc2VydmxldC9UZXN0QmVhbi5qYXZhCmluZGV4IDZkMDU5ZTIuLmM0MzYzOTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uL3NlcnZsZXQvVGVzdEJlYW4uamF2YQpAQCAtMTQsNyArMTQsNyBAQAogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAgKi8KIAotLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuIAorLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuCiAvL1RoaXMgYmVhbiBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSBhcyBpdCBuZWVkcyB0byBiZSBwbGFjZWQgaW50byBhIFN0YXRlZnVsIEJlYW4KIHB1YmxpYyBjbGFzcyBUZXN0QmVhbgoge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24vc2VydmxldC9UZXN0U2VydmxldC5qYXZhCmluZGV4IGFmNmZhZTMuLmYyNWRjZjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtMzUsOCArMzUsOCBAQAogICAgIEBJbmplY3QgVGVzdEJlYW4gdGI7CiAgICAgQEluamVjdCBCZWFuTWFuYWdlciBibTsKICAgICBCZWFuTWFuYWdlciBibTE7Ci0gICAgCi0gICAgQEluamVjdCAKKworICAgIEBJbmplY3QKICAgICBwcml2YXRlIHRyYW5zaWVudCBvcmcuamJvc3MubG9nZ2luZy5Mb2dnZXIgbG9nOwogCiAgICAgcHVibGljIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgICAgIG1zZyArPSAiQmVhbk1hbmFnZXIgSW5qZWN0aW9uIHZpYSBjb21wb25lbnQgZW52aXJvbm1lbnQgbG9va3VwIGZhaWxlZCI7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGJtMSA9PSBudWxsKSBtc2cgKz0gIkJlYW5NYW5hZ2VyIEluamVjdGlvbiB2aWEgY29tcG9uZW50IGVudmlyb25tZW50IGxvb2t1cCBmYWlsZWQiOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlYW5NYW5hZ2VyIGlzICIgKyBibSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVhbk1hbmFnZXIgdmlhIGxvb2t1cCBpcyAiICsgYm0xKTsKICAgICAgICAgd3JpdGVyLndyaXRlKCJpbml0UGFyYW1zOiAiICsgbXNnICsgIlxuIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtZmlsdGVyLTMuMC1hbm5vdGF0aW9uL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC1maWx0ZXItMy4wLWFubm90YXRpb24vV2ViVGVzdC5qYXZhCmluZGV4IGIyZGE3ZDUuLmRiNWY2OGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC1maWx0ZXItMy4wLWFubm90YXRpb24vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC1maWx0ZXItMy4wLWFubm90YXRpb24vV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEBXZWJTZXJ2bGV0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDYsNyArNDYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtOTUsMTAgKzk1LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtZmlsdGVyLTMuMC1hbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtZmlsdGVyLTMuMC1hbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTliYTgxMC4uMTUwMzNhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL2NkaS1zZXJ2bGV0LWZpbHRlci0zLjAtYW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC1maWx0ZXItMy4wLWFubm90YXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LWZpbHRlci1hbm5vdGF0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtZmlsdGVyLTMuMC1hbm5vdGF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC1maWx0ZXItMy4wLWFubm90YXRpb24vYnVpbGQueG1sCmluZGV4IDgzYWQ2NjYuLjA2OTEyMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC1maWx0ZXItMy4wLWFubm90YXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC1maWx0ZXItMy4wLWFubm90YXRpb24vYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ3LDIzICs0NywyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc1LDEwICs3NSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC1maWx0ZXItMy4wLWFubm90YXRpb24vc2VydmxldC9UZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL2NkaS1zZXJ2bGV0LWZpbHRlci0zLjAtYW5ub3RhdGlvbi9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEKaW5kZXggNmQwNTllMi4uYzQzNjM5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL2NkaS1zZXJ2bGV0LWZpbHRlci0zLjAtYW5ub3RhdGlvbi9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL2NkaS1zZXJ2bGV0LWZpbHRlci0zLjAtYW5ub3RhdGlvbi9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEKQEAgLTE0LDcgKzE0LDcgQEAKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogICovCiAKLS8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLiAKKy8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLgogLy9UaGlzIGJlYW4gaW1wbGVtZW50cyBTZXJpYWxpemFibGUgYXMgaXQgbmVlZHMgdG8gYmUgcGxhY2VkIGludG8gYSBTdGF0ZWZ1bCBCZWFuCiBwdWJsaWMgY2xhc3MgVGVzdEJlYW4KIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvb3B0aW9uYWwtdW5idW5kbGVkLWJlYW5zL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9vcHRpb25hbC11bmJ1bmRsZWQtYmVhbnMvV2ViVGVzdC5qYXZhCmluZGV4IGJjZDI1YWUuLjNlMDM3ODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9vcHRpb25hbC11bmJ1bmRsZWQtYmVhbnMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9vcHRpb25hbC11bmJ1bmRsZWQtYmVhbnMvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEBXZWJTZXJ2bGV0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDYsNyArNDYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtOTUsMTAgKzk1LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvb3B0aW9uYWwtdW5idW5kbGVkLWJlYW5zL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvb3B0aW9uYWwtdW5idW5kbGVkLWJlYW5zL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzZiNDI5OC4uMTk5NzAzNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL29wdGlvbmFsLXVuYnVuZGxlZC1iZWFucy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9vcHRpb25hbC11bmJ1bmRsZWQtYmVhbnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1vcHRpb25hbC11bmJ1bmRsZWQtYmVhbnMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9vcHRpb25hbC11bmJ1bmRsZWQtYmVhbnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL29wdGlvbmFsLXVuYnVuZGxlZC1iZWFucy9idWlsZC54bWwKaW5kZXggMmJhN2MzYS4uOWQ0OTA3MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL29wdGlvbmFsLXVuYnVuZGxlZC1iZWFucy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL29wdGlvbmFsLXVuYnVuZGxlZC1iZWFucy9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMjcgKzQ3LDI3IEBACiAKICAgICAgICAgPCEtLSByZW1vdmUgdGhlIGNsYXNzIHRoYXQgbmVlZHMgdG8gYmUgdW5hdmFpbGFibGUgaW4gdGhlIGRlcGxveW1lbnQgYXJjaGl2ZSAtLT4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9DbGFzc1VuYXZhaWxhYmxlQXRSdW50aW1lLmNsYXNzIi8+Ci0gCisKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03OSwxMCArNzksMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvb3B0aW9uYWwtdW5idW5kbGVkLWJlYW5zL3NlcnZsZXQvQ2xhc3NVbmF2YWlsYWJsZUF0UnVudGltZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL29wdGlvbmFsLXVuYnVuZGxlZC1iZWFucy9zZXJ2bGV0L0NsYXNzVW5hdmFpbGFibGVBdFJ1bnRpbWUuamF2YQppbmRleCAzYmFlOWQ3Li5iMjIxODBmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvb3B0aW9uYWwtdW5idW5kbGVkLWJlYW5zL3NlcnZsZXQvQ2xhc3NVbmF2YWlsYWJsZUF0UnVudGltZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9vcHRpb25hbC11bmJ1bmRsZWQtYmVhbnMvc2VydmxldC9DbGFzc1VuYXZhaWxhYmxlQXRSdW50aW1lLmphdmEKQEAgLTE0LDcgKzE0LDcgQEAKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogICovCiAKLS8vQSBUZXN0IHBhcmVudCBCZWFuIGNsYXNzIHRoYXQgaXMgYXZhaWxhYmxlIAorLy9BIFRlc3QgcGFyZW50IEJlYW4gY2xhc3MgdGhhdCBpcyBhdmFpbGFibGUKIC8vZHVyaW5nIGNvbXBpbGF0aW9uIGJ1dCBpcyBub3QgcGFja2FnZWQgYXQgcnVudGltZQogcHVibGljIGNsYXNzIENsYXNzVW5hdmFpbGFibGVBdFJ1bnRpbWUgZXh0ZW5kcyBUZXN0U2VydmljZSB7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvb3B0aW9uYWwtdW5idW5kbGVkLWJlYW5zL3NlcnZsZXQvVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9vcHRpb25hbC11bmJ1bmRsZWQtYmVhbnMvc2VydmxldC9UZXN0QmVhbi5qYXZhCmluZGV4IDZkMDU5ZTIuLmM0MzYzOTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9vcHRpb25hbC11bmJ1bmRsZWQtYmVhbnMvc2VydmxldC9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9vcHRpb25hbC11bmJ1bmRsZWQtYmVhbnMvc2VydmxldC9UZXN0QmVhbi5qYXZhCkBAIC0xNCw3ICsxNCw3IEBACiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKICAqLwogCi0vL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4gCisvL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4KIC8vVGhpcyBiZWFuIGltcGxlbWVudHMgU2VyaWFsaXphYmxlIGFzIGl0IG5lZWRzIHRvIGJlIHBsYWNlZCBpbnRvIGEgU3RhdGVmdWwgQmVhbgogcHVibGljIGNsYXNzIFRlc3RCZWFuCiB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL29wdGlvbmFsLXVuYnVuZGxlZC1iZWFucy9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvb3B0aW9uYWwtdW5idW5kbGVkLWJlYW5zL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQppbmRleCAzMTE5YmM1Li42Y2Y3N2NjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvb3B0aW9uYWwtdW5idW5kbGVkLWJlYW5zL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvb3B0aW9uYWwtdW5idW5kbGVkLWJlYW5zL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtNDAsOCArNDAsOCBAQAogICAgIEBJbmplY3QgVGVzdEJlYW4gdGI7CiAgICAgQEluamVjdCBCZWFuTWFuYWdlciBibTsKICAgICBCZWFuTWFuYWdlciBibTE7Ci0gICAgCi0gICAgQEluamVjdCAKKworICAgIEBJbmplY3QKICAgICBwcml2YXRlIHRyYW5zaWVudCBvcmcuamJvc3MubG9nZ2luZy5Mb2dnZXIgbG9nOwogCiAgICAgcHVibGljIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgICAgIG1zZyArPSAiQmVhbk1hbmFnZXIgSW5qZWN0aW9uIHZpYSBjb21wb25lbnQgZW52aXJvbm1lbnQgbG9va3VwIGZhaWxlZCI7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGJtMSA9PSBudWxsKSBtc2cgKz0gIkJlYW5NYW5hZ2VyIEluamVjdGlvbiB2aWEgY29tcG9uZW50IGVudmlyb25tZW50IGxvb2t1cCBmYWlsZWQiOwotICAgICAgICAKKwogICAgICAgICAvL0Vuc3VyZSB0aGF0IHRoZSBPcHRpb25hbFNlcnZpY2UgQmVhbiBpcyBub3QgcmVnaXN0ZXJlZC4KICAgICAgICAgU2V0PEJlYW48Pz4+IG9wdGlvbmFsU2VydmljZUJlYW5zID0gYm0uZ2V0QmVhbnMoVGVzdFNlcnZpY2UuY2xhc3MsbmV3IEFubm90YXRpb25MaXRlcmFsPEFueT4oKSB7fSk7CiAgICAgICAgIGJvb2xlYW4gb3B0aW9uYWxTZXJ2aWNlQXZhaWxhYmxlID0gZmFsc2U7CkBAIC02OCwxMiArNjgsMTIgQEAKICAgICAgICAgICAgICAgICAuaGFzTmV4dCgpOykgewogICAgICAgICAgICAgQmVhbjw/PiBiID0gIGl0ZXJhdG9yLm5leHQoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0iICsgYiArICIgIiArIGIuZ2V0Q2xhc3MoKSArICIgIiArIGIuZ2V0QmVhbkNsYXNzKCkuZ2V0Q2Fub25pY2FsTmFtZSgpKTsKLSAgICAgICAgICAgIGlmIChiLmdldEJlYW5DbGFzcygpLmdldENhbm9uaWNhbE5hbWUoKS5jb250YWlucygiT3B0aW9uYWwiKSkgb3B0aW9uYWxTZXJ2aWNlQXZhaWxhYmxlID0gdHJ1ZTsgCisgICAgICAgICAgICBpZiAoYi5nZXRCZWFuQ2xhc3MoKS5nZXRDYW5vbmljYWxOYW1lKCkuY29udGFpbnMoIk9wdGlvbmFsIikpIG9wdGlvbmFsU2VydmljZUF2YWlsYWJsZSA9IHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy9UaGUgT3B0aW9uYWxTZXJ2aWNlIEJlYW4gd2FzIG5vdCBhZGRlZCB0byB0aGUgV0FSIGFuZCBoZW5jZSBtdXN0IG5vdCBhdmFpbGFibGUgdGhyb3VnaCB0aGUgQk0uCiAgICAgICAgIGlmIChvcHRpb25hbFNlcnZpY2VBdmFpbGFibGUpIG1zZyArPSAiT3B0aW9uYWxTZXJ2aWNlQmVhbiBpcyByZWdpc3RlcmVkLCB0aG91Z2ggaXQgd2FzIG5vdCBpbmNsdWRlZCBpbiB0aGUgV0FSIjsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWFuTWFuYWdlciBpcyAiICsgYm0pOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlYW5NYW5hZ2VyIHZpYSBsb29rdXAgaXMgIiArIGJtMSk7CiAgICAgICAgIHdyaXRlci53cml0ZSgiaW5pdFBhcmFtczogIiArIG1zZyArICJcbiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZThjYTc4Mi4uYmRiNTkwNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaS1mdWxsLWVhciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9idWlsZC54bWwKaW5kZXggNWI3NWVjZi4uNTYxMGU3OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9IndhciIvPgpAQCAtNDYsOCArNDYsOCBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLQk8amF2YWMgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIHNyY2Rpcj0iY2xpZW50IiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZGVidWc9Im9uIiBmYWlsb25lcnJvcj0idHJ1ZSI+Ci0JIAorICAgIDxqYXZhYyBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgc3JjZGlyPSJjbGllbnQiIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBkZWJ1Zz0ib24iIGZhaWxvbmVycm9yPSJ0cnVlIj4KKwogICAgICAgICA8L2phdmFjPgogPCEtLQogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KQEAgLTYyLDE1ICs2MiwxNSBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqL0Zvby5jbGFzcywqKi9IZWxsby5jbGFzcywqKi9IZWxsb1JlbW90ZS5jbGFzcywqKi9TaW5nbGV0b24qLmNsYXNzLCoqL0hlbGxvU3RhdGVsZXNzLmNsYXNzLCoqL0hlbGxvU2luZ2xldG9uLmNsYXNzLCoqL0Zvb01hbmFnZWRCZWFuLmNsYXNzLCoqL0Jhck1hbmFnZWRCZWFuLmNsYXNzLCAqKi9Gb29CYXJNYW5hZ2VkQmVhbi5jbGFzcywgKiovTWFuYWdlZFN1cGVyLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtNzksMTAgKzc5LDEwIEBACiAgICAgICAgICAgIDxhcmcgbGluZT0iJHtodHRwLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDBjZmRmNTUuLjdhMDczMWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CkBAIC0zOSw1NSArMzksNTUgQEAKICAgICBwcml2YXRlIHN0YXRpYyBJbnRlZ2VyIGFwcExldmVsVmlhTG9va3VwOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewotCWFwcE5hbWUgPSBhcmdzWzBdOwotCXN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7Ci0JQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7ICAgICAgIAotICAgICAgICBjbGllbnQuZG9UZXN0KCk7CQorICAgIGFwcE5hbWUgPSBhcmdzWzBdOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7CisgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CisgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiYXBwTGV2ZWxWaWFMb29rdXAgPSAnIiArCi0JCQkgICBhcHBMZXZlbFZpYUxvb2t1cCArICInIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJhcHBMZXZlbFZpYUxvb2t1cCA9ICciICsKKyAgICAgICAgICAgICAgIGFwcExldmVsVmlhTG9va3VwICsgIiciKTsKICAgICB9CiAKICAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKLQlob3N0ID0gYXJnc1sxXTsKKyAgICBob3N0ID0gYXJnc1sxXTsKICAgICAgICAgcG9ydCA9IGFyZ3NbMl07CiAgICAgfQogCi0gICAKKwogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCi0JdHJ5IHsKKyAgICB0cnkgewogCi0JICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIAorICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKwogICAgICAgICAgICAgICAgICIvIiArIGFwcE5hbWUgKyAiL0hlbGxvU2VydmxldCI7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgd2ViY2xpZW50IHNlcnZsZXQgYXQgIiArIHVybCk7CiAKLQkgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7Ci0gICAgICAgIAotCSAgICBIdHRwVVJMQ29ubmVjdGlvbiBjMSA9IChIdHRwVVJMQ29ubmVjdGlvbil1Lm9wZW5Db25uZWN0aW9uKCk7Ci0JICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7Ci0JICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKLQkgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwotCSAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0JICAgIHdoaWxlKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCl7CisgICAgICAgIFVSTCB1ID0gbmV3IFVSTCh1cmwpOworCisgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKXUub3BlbkNvbm5lY3Rpb24oKTsKKyAgICAgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKKyAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOworICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlciAobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CisgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKKyAgICAgICAgd2hpbGUoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPHJlc3BvbnNlPjoiKyBsaW5lKTsKICAgICAgICAgICAgIGlmIChsaW5lLnRyaW0oKS5sZW5ndGgoKSA+IDApIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0JICAgIGlmKGNvZGUgIT0gMjAwKSB7CisgICAgICAgIGlmKGNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICByZXR1cm47Ci0JICAgIH0KLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworICAgICAgICB9CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9CYXJNYW5hZ2VkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvZWpiL0Jhck1hbmFnZWRCZWFuLmphdmEKaW5kZXggOTA1M2U2YS4uYWZhMjg4NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvZWpiL0Jhck1hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvZWpiL0Jhck1hbmFnZWRCZWFuLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBCYXJNYW5hZ2VkQmVhbjo6aW5pdCgpICIgKyB0aGlzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEJhck1hbmFnZWRCZWFuOjppbml0KCkgIiArIHRoaXMpOwogICAgIH0KIAogICAgcHVibGljIHZvaWQgYmFyKCkgewpAQCAtMzksMTIgKzM5LDEyIEBACiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gQmFyTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEJhck1hbmFnZWRCZWFuOjpkZXN0cm95KCkgIik7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQlyZXR1cm4gIkJhck1hbmFnZWRCZWFuIHRoaXMgPSAiICsgc3VwZXIudG9TdHJpbmcoKSArIAotCSAgICAiIHMgPSAiICsgcyArICIgLCBkcyA9ICIgKyBkczsKKyAgICByZXR1cm4gIkJhck1hbmFnZWRCZWFuIHRoaXMgPSAiICsgc3VwZXIudG9TdHJpbmcoKSArCisgICAgICAgICIgcyA9ICIgKyBzICsgIiAsIGRzID0gIiArIGRzOwogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9lamIvRm9vQmFyTWFuYWdlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9Gb29CYXJNYW5hZ2VkQmVhbi5qYXZhCmluZGV4IDQ2Y2MzYzMuLjU5NGE4ZjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9Gb29CYXJNYW5hZ2VkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9Gb29CYXJNYW5hZ2VkQmVhbi5qYXZhCkBAIC0yMywxMiArMjMsMTIgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CYXJNYW5hZ2VkQmVhbjo6aW5pdCgpICIgKyB0aGlzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0Jhck1hbmFnZWRCZWFuOjppbml0KCkgIiArIHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CYXJNYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmFyTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9Gb29NYW5hZ2VkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvZWpiL0Zvb01hbmFnZWRCZWFuLmphdmEKaW5kZXggNWVlMTQ4OC4uZWQ5ZDNmZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvZWpiL0Zvb01hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvZWpiL0Zvb01hbmFnZWRCZWFuLmphdmEKQEAgLTM0LDMzICszNCwzMyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjppbml0KCkgIiArIHRoaXMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmluaXQoKSAiICsgdGhpcyk7CiAgICAgfQotICAgIAorCiAKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JcmV0dXJuICJzb21lbWFuYWdlZGJlYW4iOworICAgIHJldHVybiAic29tZW1hbmFnZWRiZWFuIjsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBmb28oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjo6Zm9vKCkgIik7Ci0JYm1iLmJhcigpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmZvbygpICIpOworICAgIGJtYi5iYXIoKTsKICAgICB9CiAKICAgICBwdWJsaWMgT2JqZWN0IGdldFRoaXMoKSB7Ci0JcmV0dXJuIHRoaXM7CisgICAgcmV0dXJuIHRoaXM7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjpkZXN0cm95KCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOwogICAgIH0KIAogCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQlyZXR1cm4gIkZvb01hbmFnZWRCZWFuIHRoaXMgPSAiICsgc3VwZXIudG9TdHJpbmcoKSArIAotCQkJICAgIiBzID0gIiArIHMgKyAiICwgb3JiID0gIiArIG9yYiArIAotCSAgICAiICwgYm1iID0gIiArIGJtYiArICIgLCBlbSA9ICIgKyBlbTsKKyAgICByZXR1cm4gIkZvb01hbmFnZWRCZWFuIHRoaXMgPSAiICsgc3VwZXIudG9TdHJpbmcoKSArCisgICAgICAgICAgICAgICAiIHMgPSAiICsgcyArICIgLCBvcmIgPSAiICsgb3JiICsKKyAgICAgICAgIiAsIGJtYiA9ICIgKyBibWIgKyAiICwgZW0gPSAiICsgZW07CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9lamIvSGVsbG9TaW5nbGV0b24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9IZWxsb1NpbmdsZXRvbi5qYXZhCmluZGV4IDZkOTIwNmQuLjA5NGUyOTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9IZWxsb1NpbmdsZXRvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9IZWxsb1NpbmdsZXRvbi5qYXZhCkBAIC0zOSw5ICszOSw5IEBACiAgICAgQFJlc291cmNlKG5hbWU9ImphdmE6bW9kdWxlL2Vudi9NT1JCMiIpCiAgICAgcHJpdmF0ZSBPUkIgb3JiOwogCi0gICAgQFJlc291cmNlIAorICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgRm9vTWFuYWdlZEJlYW4gZm9vOwotICAgIAorCiAgICAgQFJlc291cmNlKG5hbWU9ImZvbzJyZWYiLCBtYXBwZWROYW1lPSJqYXZhOm1vZHVsZS9zb21lbWFuYWdlZGJlYW4iKQogICAgIHByaXZhdGUgRm9vTWFuYWdlZEJlYW4gZm9vMjsKIApAQCAtNTksNTkgKzU5LDU5IEBACiAKICAgICBARUpCKG5hbWU9ImphdmE6YXBwL2Vudi9hcHBMZXZlbEVqYlJlZiIpCiAgICAgcHJpdmF0ZSBIZWxsbyBoZWxsbzsKLSAgICAKKwogICAgIFN0cmluZyBhcHBOYW1lOwogICAgIFN0cmluZyBtb2R1bGVOYW1lOwogCi0gICAgQFBvc3RDb25zdHJ1Y3QgICAgCisgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU2luZ2xldG9uOjppbml0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU2luZ2xldG9uOjppbml0KCkiKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigibXlTdHJpbmcgPSAnIiArIG15U3RyaW5nICsgIiciKTsKLQlpZiggKG15U3RyaW5nID09IG51bGwpIHx8ICEobXlTdHJpbmcuZXF1YWxzKCJteVN0cmluZyIpICkgKSB7Ci0JICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbnZhbGlkIHZhbHVlICIgKyBteVN0cmluZyArICIgZm9yIG15U3RyaW5nIik7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigibXlTdHJpbmcgPSAnIiArIG15U3RyaW5nICsgIiciKTsKKyAgICBpZiggKG15U3RyaW5nID09IG51bGwpIHx8ICEobXlTdHJpbmcuZXF1YWxzKCJteVN0cmluZyIpICkgKSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbnZhbGlkIHZhbHVlICIgKyBteVN0cmluZyArICIgZm9yIG15U3RyaW5nIik7CisgICAgfQogCi0JYXBwTmFtZSA9IChTdHJpbmcpIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmFwcC9BcHBOYW1lIik7Ci0JbW9kdWxlTmFtZSA9IChTdHJpbmcpIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9Nb2R1bGVOYW1lIik7CisgICAgYXBwTmFtZSA9IChTdHJpbmcpIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmFwcC9BcHBOYW1lIik7CisgICAgbW9kdWxlTmFtZSA9IChTdHJpbmcpIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9Nb2R1bGVOYW1lIik7CiAKLQlPUkIgb3JiMSA9IChPUkIpIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9NT1JCMSIpOwotCU9SQiBvcmIyID0gKE9SQikgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL2Vudi9NT1JCMiIpOworICAgIE9SQiBvcmIxID0gKE9SQikgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL01PUkIxIik7CisgICAgT1JCIG9yYjIgPSAoT1JCKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvZW52L01PUkIyIik7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkFwcE5hbWUgPSAiICsgYXBwTmFtZSk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJNb2R1bGVOYW1lID0gIiArIG1vZHVsZU5hbWUpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXBwTmFtZSA9ICIgKyBhcHBOYW1lKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1vZHVsZU5hbWUgPSAiICsgbW9kdWxlTmFtZSk7CiAKLQlmb280ID0gKEZvb01hbmFnZWRCZWFuKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvc29tZW1hbmFnZWRiZWFuIik7Ci0JZm9vNSA9IChGb29NYW5hZ2VkQmVhbikgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6YXBwLyIgKyBtb2R1bGVOYW1lICsKLQkJCQkJCSAgIi9zb21lbWFuYWdlZGJlYW4iKTsKLQlmb282ID0gKEZvbykgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6YXBwLyIgKyBtb2R1bGVOYW1lICsKLQkJCQkJCSAgIi9zb21lbWFuYWdlZGJlYW4iKTsKLQlmb283ID0gKEZvb01hbmFnZWRCZWFuKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9mb28ycmVmIik7Ci0JZm9vOCA9IChGb28pIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L2ZvbzNyZWYiKTsKKyAgICBmb280ID0gKEZvb01hbmFnZWRCZWFuKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvc29tZW1hbmFnZWRiZWFuIik7CisgICAgZm9vNSA9IChGb29NYW5hZ2VkQmVhbikgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6YXBwLyIgKyBtb2R1bGVOYW1lICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIi9zb21lbWFuYWdlZGJlYW4iKTsKKyAgICBmb282ID0gKEZvbykgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6YXBwLyIgKyBtb2R1bGVOYW1lICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIi9zb21lbWFuYWdlZGJlYW4iKTsKKyAgICBmb283ID0gKEZvb01hbmFnZWRCZWFuKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9mb28ycmVmIik7CisgICAgZm9vOCA9IChGb28pIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L2ZvbzNyZWYiKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewotCQotCVN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TaW5nbGV0b246OmhlbGxvKCkiKTsKKworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TaW5nbGV0b246OmhlbGxvKCkiKTsKIAogCi0JZm9vLmZvbygpOwotCWZvbzIuZm9vKCk7Ci0JZm9vMy5mb28oKTsKKyAgICBmb28uZm9vKCk7CisgICAgZm9vMi5mb28oKTsKKyAgICBmb28zLmZvbygpOwogCi0JZm9vNC5mb28oKTsKLQlmb281LmZvbygpOwotCWZvbzYuZm9vKCk7Ci0JZm9vNy5mb28oKTsKLSAgICAgIAlmb284LmZvbygpOworICAgIGZvbzQuZm9vKCk7CisgICAgZm9vNS5mb28oKTsKKyAgICBmb282LmZvbygpOworICAgIGZvbzcuZm9vKCk7CisgICAgICAgICAgZm9vOC5mb28oKTsKIAotCXJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKKyAgICByZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CiAgICAgfQogCiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TaW5nbGV0b246OmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TaW5nbGV0b246OmRlc3Ryb3koKSIpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvZWpiL0hlbGxvU3RhdGVsZXNzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9lamIvSGVsbG9TdGF0ZWxlc3MuamF2YQppbmRleCBiMDk0ODU2Li44N2I1Zjc5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9lamIvSGVsbG9TdGF0ZWxlc3MuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9lamIvSGVsbG9TdGF0ZWxlc3MuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogCiAgICAgQFJlc291cmNlKG5hbWU9ImphdmE6bW9kdWxlL01PUkIxIikKICAgICBwcml2YXRlIE9SQiBvcmI7Ci0gICAgCisKICAgICBARUpCKG5hbWU9Imxvb2t1cHJlZjEiLCBsb29rdXA9ImphdmE6YXBwL2Vudi9BUzEiKQogICAgIHByaXZhdGUgSGVsbG8gbG9va3VwcmVmMTsKIApAQCAtNDEsNTEgKzQxLDUxIEBACiAgICAgcHJpdmF0ZSBIZWxsb1JlbW90ZSBsb29rdXByZWYzOwogCiAgICAgLy8gZGVjbGFyZSBjb21wb25lbnQtbGV2ZWwgZGVwZW5kZW5jeSB1c2luZyBmdWxseS1xdWFsaWZpZWQKLSAgICAvLyBqYXZhOmNvbXAvZW52IGZvcm0uICAKKyAgICAvLyBqYXZhOmNvbXAvZW52IGZvcm0uCiAgICAgQFJlc291cmNlKG5hbWU9ImphdmE6Y29tcC9lbnYvZm9vIikgU2Vzc2lvbkNvbnRleHQgc2Vzc2lvbkN0eDsKIAotICAgIEBQb3N0Q29uc3RydWN0IAorICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1N0YXRlbGVzczo6aW5pdCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1N0YXRlbGVzczo6aW5pdCgpIik7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVsZXNzOjpoZWxsbygpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlbGVzczo6aGVsbG8oKSIpOwogCi0JU3RyaW5nIGFwcE5hbWUgPSAoU3RyaW5nKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTphcHAvQXBwTmFtZSIpOwotCVN0cmluZyBtb2R1bGVOYW1lID0gKFN0cmluZykgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL01vZHVsZU5hbWUiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkFwcE5hbWUgPSAiICsgYXBwTmFtZSk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJNb2R1bGVOYW1lID0gIiArIG1vZHVsZU5hbWUpOworICAgIFN0cmluZyBhcHBOYW1lID0gKFN0cmluZykgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6YXBwL0FwcE5hbWUiKTsKKyAgICBTdHJpbmcgbW9kdWxlTmFtZSA9IChTdHJpbmcpIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9Nb2R1bGVOYW1lIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJBcHBOYW1lID0gIiArIGFwcE5hbWUpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTW9kdWxlTmFtZSA9ICIgKyBtb2R1bGVOYW1lKTsKIAotCU9SQiBvcmIxID0gKE9SQikgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL01PUkIxIik7Ci0JT1JCIG9yYjIgPSAoT1JCKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvZW52L01PUkIyIik7CisgICAgT1JCIG9yYjEgPSAoT1JCKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvTU9SQjEiKTsKKyAgICBPUkIgb3JiMiA9IChPUkIpIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvTU9SQjIiKTsKIAotCUhlbGxvIHMxID0gKEhlbGxvKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTpnbG9iYWwvIiArCi0JCQkJCSAgIGFwcE5hbWUgKyAiLyIgKwotCQkJCQkgICBtb2R1bGVOYW1lICsgIi8iICsKLQkJCQkJICAgIkhlbGxvU2luZ2xldG9uIik7CisgICAgSGVsbG8gczEgPSAoSGVsbG8pIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmdsb2JhbC8iICsKKyAgICAgICAgICAgICAgICAgICAgICAgYXBwTmFtZSArICIvIiArCisgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWUgKyAiLyIgKworICAgICAgICAgICAgICAgICAgICAgICAiSGVsbG9TaW5nbGV0b24iKTsKIAotCUhlbGxvIHMyID0gKEhlbGxvKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTphcHAvIiArCi0JCQkJCQkJIG1vZHVsZU5hbWUgKyAiLyIgKwotCQkJCQkJCSAiSGVsbG9TaW5nbGV0b24iKTsKKyAgICBIZWxsbyBzMiA9IChIZWxsbykgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6YXBwLyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lICsgIi8iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbGxvU2luZ2xldG9uIik7CiAKLQkvLyBSZWx5IG9uIGRlZmF1bHQgdG8gcmVzb2x2ZSAiamF2YTpjb21wL2Vudi8gZGVjbGFyZWQgcmVzb3VyY2UKLQlTZXNzaW9uQ29udGV4dCBzYzEgPSAoU2Vzc2lvbkNvbnRleHQpCi0JICAgIHNlc3Npb25DdHgubG9va3VwKCJmb28iKTsKKyAgICAvLyBSZWx5IG9uIGRlZmF1bHQgdG8gcmVzb2x2ZSAiamF2YTpjb21wL2Vudi8gZGVjbGFyZWQgcmVzb3VyY2UKKyAgICBTZXNzaW9uQ29udGV4dCBzYzEgPSAoU2Vzc2lvbkNvbnRleHQpCisgICAgICAgIHNlc3Npb25DdHgubG9va3VwKCJmb28iKTsKIAotCVNlc3Npb25Db250ZXh0IHNjMiA9IChTZXNzaW9uQ29udGV4dCkKLQkgICAgc2MxLmxvb2t1cCgiamF2YTpjb21wL2Vudi9mb28iKTsKKyAgICBTZXNzaW9uQ29udGV4dCBzYzIgPSAoU2Vzc2lvbkNvbnRleHQpCisgICAgICAgIHNjMS5sb29rdXAoImphdmE6Y29tcC9lbnYvZm9vIik7CiAKLQlJbnRlZ2VyIGVudkVudHJ5ID0gKEludGVnZXIpCi0JICAgIHNjMS5sb29rdXAoImphdmE6YXBwL2Vudi92YWx1ZTEiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImphdmE6YXAvZW52L3ZhbHVlMSA9ICIgKyBlbnZFbnRyeSk7CisgICAgSW50ZWdlciBlbnZFbnRyeSA9IChJbnRlZ2VyKQorICAgICAgICBzYzEubG9va3VwKCJqYXZhOmFwcC9lbnYvdmFsdWUxIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJqYXZhOmFwL2Vudi92YWx1ZTEgPSAiICsgZW52RW50cnkpOwogCi0JcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TdGF0ZWxlc3M6OmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TdGF0ZWxlc3M6OmRlc3Ryb3koKSIpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvZWpiL01hbmFnZWRTdXBlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvZWpiL01hbmFnZWRTdXBlci5qYXZhCmluZGV4IDM0MDFiNDEuLjY0OWQxNjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9NYW5hZ2VkU3VwZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9lamIvTWFuYWdlZFN1cGVyLmphdmEKQEAgLTI4LDE3ICsyOCwxNyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1hbmFnZWRTdXBlcjo6aW5pdCgpICIgKyB0aGlzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1hbmFnZWRTdXBlcjo6aW5pdCgpICIgKyB0aGlzKTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWFuYWdlZFN1cGVyOjpkZXN0cm95KCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBNYW5hZ2VkU3VwZXI6OmRlc3Ryb3koKSAiKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCXJldHVybiAiTWFuYWdlZFN1cGVyIHRoaXMgPSAiICsgc3VwZXIudG9TdHJpbmcoKSArIAotCSAgICAiIHMgPSAiICsgcyArICIgLCBkcyA9ICIgKyBkczsKKyAgICByZXR1cm4gIk1hbmFnZWRTdXBlciB0aGlzID0gIiArIHN1cGVyLnRvU3RyaW5nKCkgKworICAgICAgICAiIHMgPSAiICsgcyArICIgLCBkcyA9ICIgKyBkczsKIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvZWpiL1NpbmdsZXRvbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9TaW5nbGV0b24yLmphdmEKaW5kZXggYmNkYTE5NC4uNDYxNWVkNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvZWpiL1NpbmdsZXRvbjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9lamIvU2luZ2xldG9uMi5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuMjo6aW5pdCgpIik7CiAgICAgfQotICAgIAorCiAgICAgQFByZURlc3Ryb3kKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW4yOjpkZXN0cm95KCkiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9TaW5nbGV0b24zLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9lamIvU2luZ2xldG9uMy5qYXZhCmluZGV4IDA4NGVkN2EuLmUyNzdiMDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9TaW5nbGV0b24zLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvZWpiL1NpbmdsZXRvbjMuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjM6OmluaXQoKSIpOwogICAgIH0KLSAgICAKKwogICAgIEBQcmVEZXN0cm95CiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuMzo6ZGVzdHJveSgpIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9lamIvU2luZ2xldG9uNC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvZWpiL1NpbmdsZXRvbjQuamF2YQppbmRleCA3Mzg2Mzg4Li5mMmYzNDBiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9lamIvU2luZ2xldG9uNC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9TaW5nbGV0b240LmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW40Ojppbml0KCkiKTsKICAgICB9Ci0gICAgCisKICAgICBAUHJlRGVzdHJveQogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjQ6OmRlc3Ryb3koKSIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvd2FyL0ZvbzJNYW5hZ2VkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvd2FyL0ZvbzJNYW5hZ2VkQmVhbi5qYXZhCmluZGV4IDEzNGU3YTguLjk4NjY1YjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL3dhci9Gb28yTWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci93YXIvRm9vMk1hbmFnZWRCZWFuLmphdmEKQEAgLTMzLDI3ICszMywyNyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvbzJNYW5hZ2VkQmVhbjo6aW5pdCgpICIgKyB0aGlzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvbzJNYW5hZ2VkQmVhbjo6aW5pdCgpICIgKyB0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBmb28oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb28yTWFuYWdlZEJlYW46OmZvbygpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vMk1hbmFnZWRCZWFuOjpmb28oKSAiKTsKICAgICB9CiAKICAgICBwdWJsaWMgT2JqZWN0IGdldFRoaXMoKSB7Ci0JcmV0dXJuIHRoaXM7CisgICAgcmV0dXJuIHRoaXM7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvbzJNYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vMk1hbmFnZWRCZWFuOjpkZXN0cm95KCkgIik7CiAgICAgfQogCiAKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCXJldHVybiAiRm9vMk1hbmFnZWRCZWFuIHRoaXMgPSAiICsgCi0JCQkgICAiIHMgPSAiICsgcyArICIgLCBvcmIgPSAiICsgb3JiICsgCi0JICAgICIgLCBlbSA9ICIgKyBlbTsKKyAgICByZXR1cm4gIkZvbzJNYW5hZ2VkQmVhbiB0aGlzID0gIiArCisgICAgICAgICAgICAgICAiIHMgPSAiICsgcyArICIgLCBvcmIgPSAiICsgb3JiICsKKyAgICAgICAgIiAsIGVtID0gIiArIGVtOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvd2FyL0Zvb0Jhck1hbmFnZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci93YXIvRm9vQmFyTWFuYWdlZEJlYW4uamF2YQppbmRleCA0NmNjM2MzLi41OTRhOGY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci93YXIvRm9vQmFyTWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci93YXIvRm9vQmFyTWFuYWdlZEJlYW4uamF2YQpAQCAtMjMsMTIgKzIzLDEyIEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmFyTWFuYWdlZEJlYW46OmluaXQoKSAiICsgdGhpcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CYXJNYW5hZ2VkQmVhbjo6aW5pdCgpICIgKyB0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmFyTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0Jhck1hbmFnZWRCZWFuOjpkZXN0cm95KCkgIik7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVqYi1jZGkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLWNkaS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGUwNTMzYWIuLjRiYzNmNzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLWNkaS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLWNkaS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyNCArMTUsMjQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNpbXBsZS1lamItY2RpIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNpbXBsZS5jbGllbnQiIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24uY2xpZW50LlN0YW5kYWxvbmVDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzaW1wbGUuY2xpZW50MiIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbi5jbGllbnQuU3RhbmRhbG9uZUNsaWVudDIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImJlYW5zLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYmVhbnMueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVqYi1jZGkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lamItY2RpL2J1aWxkLnhtbAppbmRleCAwMGNkYjkwLi44ZDg3N2NkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVqYi1jZGkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLWNkaS9idWlsZC54bWwKQEAgLTMxLDYyICszMSw2MiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW4sdW5kZXBsb3kiIC8+CiAKLQk8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgotCQk8ZGVsZXRlIGZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgorICAgICAgICA8ZGVsZXRlIGZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIgLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgotCQk8Y29weSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEudG9rZW4iIHRvZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIiAvPgotCQk8cmVwbGFjZSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSJAT1JCX1BPUlRAIiB2YWx1ZT0iJHtvcmIucG9ydH0iIC8+CisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CisgICAgICAgIDxjb3B5IGZpbGU9ImNsaWVudC9DbGllbnQuamF2YS50b2tlbiIgdG9maWxlPSJjbGllbnQvQ2xpZW50LmphdmEiIC8+CisgICAgICAgIDxyZXBsYWNlIGZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IkBPUkJfUE9SVEAiIHZhbHVlPSIke29yYi5wb3J0fSIgLz4KIAotCQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiIC8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50IiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovU2Z1bCouY2xhc3MsKiovU2xlc3MqLmNsYXNzLCAqKi9UZXN0QmVhbi5jbGFzcyIgLz4KLQkJCTxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TZnVsLmNsYXNzLCoqL1NsZXNzLmNsYXNzIiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi9TZnVsKi5jbGFzcywqKi9TbGVzcyouY2xhc3MsICoqL1Rlc3RCZWFuLmNsYXNzIiAvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NmdWwuY2xhc3MsKiovU2xlc3MuY2xhc3MiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJydW5fc3RhbmRhbG9uZWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8amF2YSBmb3JrPSJvbiIgZmFpbG9uZXJyb3I9InRydWUiIAotCQkJY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAotCQkJY2xhc3NuYW1lPSIke3NpbXBsZS5jbGllbnR9Ij4KLQkJCTxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIgLz4KLQkJPC9qYXZhPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0icnVuX3N0YW5kYWxvbmVjbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGphdmEgZm9yaz0ib24iIGZhaWxvbmVycm9yPSJ0cnVlIgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCisgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2ltcGxlLmNsaWVudH0iPgorICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9IiAvPgorICAgICAgICA8L2phdmE+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InJ1bl9zdGFuZGFsb25lY2xpZW50MiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8amF2YSBmb3JrPSJvbiIgZmFpbG9uZXJyb3I9InRydWUiIAotCQkJY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAotCQkJY2xhc3NuYW1lPSIke3NpbXBsZS5jbGllbnQyfSI+Ci0JCQk8anZtYXJnIHZhbHVlPSItRGphdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbD1vcmcuZ2xhc3NmaXNoLmpuZGkuY29zbmFtaW5nLkNOQ3R4RmFjdG9yeSIgLz4KLQkJCTxqdm1hcmcgdmFsdWU9Ii1EamF2YS5uYW1pbmcucHJvdmlkZXIudXJsPWlpb3A6Ly9sb2NhbGhvc3Q6JHtvcmIucG9ydH0iIC8+Ci0JCQk8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iIC8+CisgICAgPHRhcmdldCBuYW1lPSJydW5fc3RhbmRhbG9uZWNsaWVudDIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGphdmEgZm9yaz0ib24iIGZhaWxvbmVycm9yPSJ0cnVlIgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCisgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2ltcGxlLmNsaWVudDJ9Ij4KKyAgICAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1EamF2YS5uYW1pbmcuZmFjdG9yeS5pbml0aWFsPW9yZy5nbGFzc2Zpc2guam5kaS5jb3NuYW1pbmcuQ05DdHhGYWN0b3J5IiAvPgorICAgICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURqYXZhLm5hbWluZy5wcm92aWRlci51cmw9aWlvcDovL2xvY2FsaG9zdDoke29yYi5wb3J0fSIgLz4KKyAgICAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydD0ke29yYi5wb3J0fSIgLz4KIAotCQk8L2phdmE+Ci0JPC90YXJnZXQ+CisgICAgICAgIDwvamF2YT4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVqYi1jZGkvZWpiL1NmdWxFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLWNkaS9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IDkyODFkODcuLjU4ZjhmYzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLWNkaS9lamIvU2Z1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLWNkaS9lamIvU2Z1bEVKQi5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgIGlmICh0YiAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gImhlbGxvIjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLWNkaS9lamIvU2xlc3NFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLWNkaS9lamIvU2xlc3NFSkIuamF2YQppbmRleCAyYjBkZmY4Li44YmI4NTdiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVqYi1jZGkvZWpiL1NsZXNzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lamItY2RpL2VqYi9TbGVzc0VKQi5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgICAgIGlmICh0YiAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gImhlbGxvIjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLXNpbmdsZXRvbi9oZWxsby9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lamItc2luZ2xldG9uL2hlbGxvL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTgyYzM0NC4uMGVkYjZlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lamItc2luZ2xldG9uL2hlbGxvL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lamItc2luZ2xldG9uL2hlbGxvL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEzICsxNSwxMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpLXNpbmdsZXRvbi1oZWxsbyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImJlYW5zLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYmVhbnMueG1sIi8+Ci0JCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lamItc2luZ2xldG9uL2hlbGxvL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLXNpbmdsZXRvbi9oZWxsby9idWlsZC54bWwKaW5kZXggYWQ4YzAwMS4uNjQxYjNlOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lamItc2luZ2xldG9uL2hlbGxvL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVqYi1zaW5nbGV0b24vaGVsbG8vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxMiArNDYsMTIgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9Gb28qLmNsYXNzLCoqL1Rlc3QqLmNsYXNzLCoqL1NpbmdsZXRvbiouY2xhc3MsKiovSGVsbG8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTU5LDkgKzU5LDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtNzIsNyArNzIsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lamItc2luZ2xldG9uL2hlbGxvL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLXNpbmdsZXRvbi9oZWxsby9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMGQwOGU5My4uNTcwNzUyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lamItc2luZ2xldG9uL2hlbGxvL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVqYi1zaW5nbGV0b24vaGVsbG8vY2xpZW50L0NsaWVudC5qYXZhCkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGhlbGxvLnRlc3RFcnJvcigpOwogICAgICAgICAgICAgICAgIGFkZFN0YXR1cygiRXhwZWN0ZWQgRUpCRXhjZXB0aW9uIGZyb20gU2luZ2xldG9uLnRlc3RFcnJvcigpIiwgZmFsc2UpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkV4cGVjdGVkIEVKQkV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgfSBjYXRjaCAoRUpCRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBhZGRTdGF0dXMoIkV4cGVjdGVkIEVKQkV4Y2VwdGlvbiBmcm9tIFNpbmdsZXRvbi50ZXN0RXJyb3IoKSIsIHRydWUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lamItc2luZ2xldG9uL2hlbGxvL2VqYi9Gb28uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLXNpbmdsZXRvbi9oZWxsby9lamIvRm9vLmphdmEKaW5kZXggNzBkOGY0Yy4uNDAwODgyMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lamItc2luZ2xldG9uL2hlbGxvL2VqYi9Gb28uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVqYi1zaW5nbGV0b24vaGVsbG8vZWpiL0Zvby5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiAKICAgICBARUpCCiAgICAgSGVsbG8gaGVsbG87Ci0gICAgCisKICAgICBAamFrYXJ0YS5pbmplY3QuSW5qZWN0CiAgICAgVGVzdEJlYW4gdGI7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLXNpbmdsZXRvbi9oZWxsby9lamIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lamItc2luZ2xldG9uL2hlbGxvL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggNjJiMDcwMi4uNDkwMDQ1NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lamItc2luZ2xldG9uL2hlbGxvL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lamItc2luZ2xldG9uL2hlbGxvL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTM0LDcgKzM0LDcgQEAKIAogICAgIEBJbmplY3QKICAgICBGb28gZm9vOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3RCZWFuIHRiOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2UvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL1dlYlRlc3QuamF2YQppbmRleCA3NmIyMWM5Li4xZjNhMDM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2UvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9XZWJUZXN0LmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQFdlYlNlcnZsZXQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MSw3ICs1MSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC0xMDAsMTAgKzEwMCwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2UvYnVpbGQucHJvcGVydGllcwppbmRleCBhNGQ1MDc4Li5lOGE5ZjY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLXdpdGgtbm9uLWRlZmF1bHQtcGFja2FnZXMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2UvYnVpbGQueG1sCmluZGV4IDgzYWQ2NjYuLjA2OTEyMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMyArNDcsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2Uvc2VydmxldC9jb20vdGVzdHMvVGVzdEFyb3VuZEludm9rZUludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2Uvc2VydmxldC9jb20vdGVzdHMvVGVzdEFyb3VuZEludm9rZUludGVyY2VwdG9yLmphdmEKaW5kZXggNTkwNDMxZC4uZDVlZWI3YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL3NlcnZsZXQvY29tL3Rlc3RzL1Rlc3RBcm91bmRJbnZva2VJbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0QXJvdW5kSW52b2tlSW50ZXJjZXB0b3IuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogICAgICAgICBhcm91bmRJbnZva2VDb3VudCA9IDA7CiAgICAgfQogCi0gICBAQXJvdW5kSW52b2tlIAorICAgQEFyb3VuZEludm9rZQogICAgcHVibGljIE9iamVjdCB0ZXN0TWV0aG9kKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdEFyb3VuZEludm9rZUludGVyY2V0cHI6OiBhcm91bmRJbnZva2UgY2FsbGVkIC0gdGFyZ2V0OiIgKyBjdHguZ2V0VGFyZ2V0KCkgKyAiICwgcGFyYW1zOiIrIGN0eC5nZXRQYXJhbWV0ZXJzKCkpOwogICAgICAgICBhcm91bmRJbnZva2VDb3VudCArKzsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0TWFuYWdlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0TWFuYWdlZEJlYW4uamF2YQppbmRleCAwYzkzNTgzLi40OGIzM2ZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2Uvc2VydmxldC9jb20vdGVzdHMvVGVzdE1hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL3NlcnZsZXQvY29tL3Rlc3RzL1Rlc3RNYW5hZ2VkQmVhbi5qYXZhCkBAIC0xNiw3ICsxNiw3IEBACiAKIHBhY2thZ2UgY29tLnRlc3RzOwogCi0vL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4gCisvL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4KIC8vVGhpcyBiZWFuIGltcGxlbWVudHMgU2VyaWFsaXphYmxlIGFzIGl0IG5lZWRzIHRvIGJlIHBsYWNlZCBpbnRvIGEgU3RhdGVmdWwgQmVhbgogQGpha2FydGEuYW5ub3RhdGlvbi5NYW5hZ2VkQmVhbgogcHVibGljIGNsYXNzIFRlc3RNYW5hZ2VkQmVhbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2Uvc2VydmxldC9jb20vdGVzdHMvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0U2VydmxldC5qYXZhCmluZGV4IGVjMzg0MTUuLjYzZWM5OGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0U2VydmxldC5qYXZhCkBAIC03Miw1ICs3Miw1IEBACiAgICAgICAgICAgICBlbHNlIHJldHVybiAiSW50ZXJjZXB0b3IgaW52b2NhdGlvbiBjb3VudCIgKyBjb3VudCArICIgaW52YWxpZCI7CiAgICB9CiAKLSAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3IvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3IvV2ViVGVzdC5qYXZhCmluZGV4IDM0M2QxNzEuLmFlYjAxNmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQFdlYlNlcnZsZXQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC05NSwxMCArOTUsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQ4MDllNzUuLmVkZDVkYTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3IvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci9idWlsZC54bWwKaW5kZXggODNhZDY2Ni4uMDY5MTIxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3IvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMyArNDcsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci9zZXJ2bGV0L1Rlc3RBcm91bmRJbnZva2VJbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Ivc2VydmxldC9UZXN0QXJvdW5kSW52b2tlSW50ZXJjZXB0b3IuamF2YQppbmRleCA5OGNjZDRjLi41ZDI2MzNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci9zZXJ2bGV0L1Rlc3RBcm91bmRJbnZva2VJbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yL3NlcnZsZXQvVGVzdEFyb3VuZEludm9rZUludGVyY2VwdG9yLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKICAgICAgICAgYXJvdW5kSW52b2tlQ291bnQgPSAwOwogICAgIH0KIAotICAgQEFyb3VuZEludm9rZSAKKyAgIEBBcm91bmRJbnZva2UKICAgIHB1YmxpYyBPYmplY3QgdGVzdE1ldGhvZChJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RBcm91bmRJbnZva2VJbnRlcmNldHByOjogYXJvdW5kSW52b2tlIGNhbGxlZCAtIHRhcmdldDoiICsgY3R4LmdldFRhcmdldCgpICsgIiAsIHBhcmFtczoiKyBjdHguZ2V0UGFyYW1ldGVycygpKTsKICAgICAgICAgYXJvdW5kSW52b2tlQ291bnQgKys7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci9zZXJ2bGV0L1Rlc3RNYW5hZ2VkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Ivc2VydmxldC9UZXN0TWFuYWdlZEJlYW4uamF2YQppbmRleCAyYTM2ZjEwLi44YWFmMTAwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci9zZXJ2bGV0L1Rlc3RNYW5hZ2VkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yL3NlcnZsZXQvVGVzdE1hbmFnZWRCZWFuLmphdmEKQEAgLTE0LDcgKzE0LDcgQEAKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogICovCiAKLS8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLiAKKy8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLgogLy9UaGlzIGJlYW4gaW1wbGVtZW50cyBTZXJpYWxpemFibGUgYXMgaXQgbmVlZHMgdG8gYmUgcGxhY2VkIGludG8gYSBTdGF0ZWZ1bCBCZWFuCiBAamFrYXJ0YS5hbm5vdGF0aW9uLk1hbmFnZWRCZWFuCiBwdWJsaWMgY2xhc3MgVGVzdE1hbmFnZWRCZWFuIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQppbmRleCA2M2Q4OWRhLi4wZDc4NmNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Ivc2VydmxldC9UZXN0U2VydmxldC5qYXZhCkBAIC02NSw5ICs2NSw5IEBACiAgICAgICAgIGludCBjb3VudCA9IFRlc3RBcm91bmRJbnZva2VJbnRlcmNlcHRvci5hcm91bmRJbnZva2VDb3VudDsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0QXJvdW5kSW52b2tlSW50ZXJjZXB0b3IgY2FsbGVkICIgKyBjb3VudCArICIgdGltZXMiKTsKICAgICAgICAgVGVzdEFyb3VuZEludm9rZUludGVyY2VwdG9yLnJlc2V0KCk7Ci0gICAgICAgIGlmIChjb3VudCA9PSAxKSByZXR1cm4gIiI7IAorICAgICAgICBpZiAoY291bnQgPT0gMSkgcmV0dXJuICIiOwogICAgICAgICAgICAgZWxzZSByZXR1cm4gIkludGVyY2VwdG9yIGludm9jYXRpb24gY291bnQiICsgY291bnQgKyAiIGludmFsaWQiOwogICAgfQogCi0gCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuL1dlYlRlc3QuamF2YQppbmRleCBmZjQwYzJjLi41ZjY1Y2M3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4vV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEBXZWJTZXJ2bGV0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDYsNyArNDYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtOTUsMTAgKzk1LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4vYnVpbGQucHJvcGVydGllcwppbmRleCA3MTJiYTRhLi5kYjg5NGI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2ltcGxlLW1hbmFnZWQtYmVhbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4vYnVpbGQueG1sCmluZGV4IDgzYWQ2NjYuLjA2OTEyMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMjMgKzQ3LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4vc2VydmxldC9UZXN0TWFuYWdlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuL3NlcnZsZXQvVGVzdE1hbmFnZWRCZWFuLmphdmEKaW5kZXggZjNlNTdhZS4uODNiM2RmYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4vc2VydmxldC9UZXN0TWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi9zZXJ2bGV0L1Rlc3RNYW5hZ2VkQmVhbi5qYXZhCkBAIC0xNCwxMyArMTQsMTMgQEAKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogICovCiAKLS8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLiAKKy8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLgogLy9UaGlzIGJlYW4gaW1wbGVtZW50cyBTZXJpYWxpemFibGUgYXMgaXQgbmVlZHMgdG8gYmUgcGxhY2VkIGludG8gYSBTdGF0ZWZ1bCBCZWFuCiBAamFrYXJ0YS5hbm5vdGF0aW9uLk1hbmFnZWRCZWFuCiBwdWJsaWMgY2xhc3MgVGVzdE1hbmFnZWRCZWFuIHsKICAgICBUZXN0QmVhbiB0YjsKICAgICBib29sZWFuIHBvc3RDb25zdHJ1Y3RDYWxsZWQgPSBmYWxzZTsKLSAgICAKKwogICAgIHB1YmxpYyBUZXN0TWFuYWdlZEJlYW4oKXt9CiAKICAgICBAamFrYXJ0YS5pbmplY3QuSW5qZWN0IC8vQ29uc3RydWN0b3IgYmFzZWQgSW5qZWN0aW9uCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggODE4MGM0Zi4uYzYxYWU3YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4vc2VydmxldC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtNTQsNSArNTQsNSBAQAogICAgICAgICBpZiAodGIgIT0gbnVsbCAmJiAhdGIudGVzdEluamVjdGlvbigpKSBtc2cgKz0gaW5mbyArICJCZWFuIEluamVjdGlvbiBpbnRvIE1hbmFnZWRCZWFuIGZhaWxlZCI7CiAgICAgICAgIHJldHVybiBtc2c7CiAgICAgfQotIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1kYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tZGIvYnVpbGQucHJvcGVydGllcwppbmRleCBkNjQ4NDhlLi4xMjhkYWU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1kYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWRiL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIzICsxNSwyMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpLWhlbGxvLW1kYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzaW1wbGUuY2xpZW50IiB2YWx1ZT0iY29tLnN1bi5zMWFzZGV2LmNkaS5oZWxsby5tZGIuY2xpZW50LkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYmVhbnMueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9iZWFucy54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWRiL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWRiL2J1aWxkLnhtbAppbmRleCAyZGQyNTNjLi4wODhhNTAzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1kYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tZGIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypCZWFuKi5jbGFzcywqKi8qSGVsbG8qIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NywyMCArNzcsMjAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuX3N0YW5kYWxvbmVjbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMvamFrYXJ0YS5qbXMtYXBpLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2ltcGxlLmNsaWVudH0iPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1kYi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1kYi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggODE2NzM4OC4uOTNhYWQ2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tZGIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWRiL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgIH0KIAogCi0gICAgQFJlc291cmNlKG5hbWU9IkZvb0NGIiwgbWFwcGVkTmFtZT0iam1zL2NkaV9oZWxsb19tZGJfUUNGIikgCisgICAgQFJlc291cmNlKG5hbWU9IkZvb0NGIiwgbWFwcGVkTmFtZT0iam1zL2NkaV9oZWxsb19tZGJfUUNGIikKICAgICBwcml2YXRlIHN0YXRpYyBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHF1ZXVlQ29uRmFjdG9yeTsKIAogICAgIEBSZXNvdXJjZShuYW1lPSJNc2dCZWFuUXVldWUiLCBtYXBwZWROYW1lPSJqbXMvY2RpX2hlbGxvX21kYl9JblF1ZXVlIikKQEAgLTU5LDcgKzU5LDcgQEAKIAogICAgIHByaXZhdGUgaW50IG51bU1lc3NhZ2VzID0gMjsKICAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgCisKICAgICAgICAgaWYoIGFyZ3MubGVuZ3RoID09IDEgKSB7CiAgICAgICAgICAgICBudW1NZXNzYWdlcyA9IG5ldyBJbnRlZ2VyKGFyZ3NbMF0pLmludFZhbHVlKCk7CiAgICAgICAgIH0KQEAgLTY4LDE1ICs2OCwxNSBAQAogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogICAgICAgICB0cnkgewotCSAgICBpZiggcXVldWVDb25GYWN0b3J5ID09IG51bGwgKSB7CisgICAgICAgIGlmKCBxdWV1ZUNvbkZhY3RvcnkgPT0gbnVsbCApIHsKIAotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkphdmEgU0UgbW9kZS4uLiIpOwotCQlJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCQlxdWV1ZUNvbkZhY3RvcnkgPSAoamFrYXJ0YS5qbXMuUXVldWVDb25uZWN0aW9uRmFjdG9yeSkgaWMubG9va3VwKCJqbXMvY2RpX2hlbGxvX21kYl9RQ0YiKTsKLQkJbXNnQmVhblF1ZXVlID0gKGpha2FydGEuam1zLlF1ZXVlKSBpYy5sb29rdXAoImptcy9jZGlfaGVsbG9fbWRiX0luUXVldWUiKTsKLQkJY2xpZW50UXVldWUgPSAoamFrYXJ0YS5qbXMuUXVldWUpIGljLmxvb2t1cCgiam1zL2NkaV9oZWxsb19tZGJfT3V0UXVldWUiKTsKLQkJCi0JICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKYXZhIFNFIG1vZGUuLi4iKTsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgcXVldWVDb25GYWN0b3J5ID0gKGpha2FydGEuam1zLlF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpIGljLmxvb2t1cCgiam1zL2NkaV9oZWxsb19tZGJfUUNGIik7CisgICAgICAgIG1zZ0JlYW5RdWV1ZSA9IChqYWthcnRhLmptcy5RdWV1ZSkgaWMubG9va3VwKCJqbXMvY2RpX2hlbGxvX21kYl9JblF1ZXVlIik7CisgICAgICAgIGNsaWVudFF1ZXVlID0gKGpha2FydGEuam1zLlF1ZXVlKSBpYy5sb29rdXAoImptcy9jZGlfaGVsbG9fbWRiX091dFF1ZXVlIik7CisKKyAgICAgICAgfQogCiAgICAgICAgICAgICBzZXR1cCgpOwogICAgICAgICAgICAgZG9UZXN0KG51bU1lc3NhZ2VzKTsKQEAgLTkwLDE0ICs5MCwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHF1ZXVlQ29uID0gcXVldWVDb25GYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwogCiAgICAgICAgIHF1ZXVlU2Vzc2lvbiA9IHF1ZXVlQ29uLmNyZWF0ZVF1ZXVlU2Vzc2lvbgotICAgICAgICAgICAgKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOyAKKyAgICAgICAgICAgIChmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKIAogICAgICAgICAvLyBQcm9kdWNlciB3aWxsIGJlIHNwZWNpZmllZCB3aGVuIGFjdHVhbCBtc2cgaXMgc2VudC4KLSAgICAgICAgcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKG51bGwpOyAgICAgICAgCisgICAgICAgIHF1ZXVlU2VuZGVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVNlbmRlcihudWxsKTsKIAogICAgICAgICBxdWV1ZVJlY2VpdmVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVJlY2VpdmVyKGNsaWVudFF1ZXVlKTsKIApAQCAtMTE1LDE4ICsxMTUsMTggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHNlbmRNc2dzKGpha2FydGEuam1zLlF1ZXVlIHF1ZXVlLCBNZXNzYWdlIG1zZywgaW50IG51bSkgCisgICAgcHVibGljIHZvaWQgc2VuZE1zZ3MoamFrYXJ0YS5qbXMuUXVldWUgcXVldWUsIE1lc3NhZ2UgbXNnLCBpbnQgbnVtKQogICAgICAgICB0aHJvd3MgSk1TRXhjZXB0aW9uIHsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGF0IHRpbWUgIiArIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKICAgICAgICAgICAgIHF1ZXVlU2VuZGVyLnNlbmQocXVldWUsIG1zZyk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGF0IHRpbWUgIiArIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdChpbnQgbnVtKSAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoaW50IG51bSkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgRGVzdGluYXRpb24gZGVzdCA9IG1zZ0JlYW5RdWV1ZTsKQEAgLTE0MCw3ICsxNDAsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIHF1ZXVlIG1lc3NhZ2UiKTsKICAgICAgICAgTWVzc2FnZSByZWN2ZG1lc3NhZ2UgPSBxdWV1ZVJlY2VpdmVyLnJlY2VpdmUoVElNRU9VVCk7CiAgICAgICAgIGlmKCByZWN2ZG1lc3NhZ2UgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgbWVzc2FnZSA6ICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgbWVzc2FnZSA6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRleHRNZXNzYWdlKXJlY3ZkbWVzc2FnZSkuZ2V0VGV4dCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGltZW91dCBhZnRlciAiICsgVElNRU9VVCArICIgc2Vjb25kcyIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tZGIvZWpiL0hlbGxvMS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tZGIvZWpiL0hlbGxvMS5qYXZhCmluZGV4IDU1ZjFkOWYuLmJlNjE5MTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWRiL2VqYi9IZWxsbzEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1kYi9lamIvSGVsbG8xLmphdmEKQEAgLTE5LDUgKzE5LDUgQEAKIHB1YmxpYyBpbnRlcmZhY2UgSGVsbG8xIHsKIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKFN0cmluZyBzKTsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tZGIvZWpiL0hlbGxvU3RhdGVmdWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWRiL2VqYi9IZWxsb1N0YXRlZnVsLmphdmEKaW5kZXggMTc3MDlhOS4uZTNmOTliOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tZGIvZWpiL0hlbGxvU3RhdGVmdWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1kYi9lamIvSGVsbG9TdGF0ZWZ1bC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cpOwogICAgIH0KICAgICBAUHJlRGVzdHJveSBwdWJsaWMgdm9pZCBteVByZURlc3Ryb3lNZXRob2QoKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUFJFLURFU1RST1kgY2FsbGJhY2sgcmVjZWl2ZWQgaW4gIiArIG1zZyk7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQUkUtREVTVFJPWSBjYWxsYmFjayByZWNlaXZlZCBpbiAiICsgbXNnKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWRiL2VqYi9IZWxsb1N0YXRlbGVzcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tZGIvZWpiL0hlbGxvU3RhdGVsZXNzLmphdmEKaW5kZXggNjc0NzY0OC4uNDdmZDU0MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tZGIvZWpiL0hlbGxvU3RhdGVsZXNzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tZGIvZWpiL0hlbGxvU3RhdGVsZXNzLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIC8vIEhlbGxvMSBpbnRlcmZhY2UgaXMgbm90IGFubm90YXRlZCB3aXRoIEBMb2NhbC4gSWYgdGhlCiAvLyBiZWFuIG9ubHkgaW1wbGVtZW50cyBvbmUgaW50ZXJmYWNlIGl0IGlzIGFzc3VtZWQgdG8gYmUKIC8vIGEgbG9jYWwgYnVzaW5lc3MgaW50ZXJmYWNlLgotQFN0YXRlbGVzcyhkZXNjcmlwdGlvbj0ibXkgc3RhdGVsZXNzIGJlYW4gZGVzY3JpcHRpb24iKSAKK0BTdGF0ZWxlc3MoZGVzY3JpcHRpb249Im15IHN0YXRlbGVzcyBiZWFuIGRlc2NyaXB0aW9uIikKIHB1YmxpYyBjbGFzcyBIZWxsb1N0YXRlbGVzcyBpbXBsZW1lbnRzIEhlbGxvMSB7CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbyhTdHJpbmcgcykgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tZGIvZWpiL01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1kYi9lamIvTWVzc2FnZUJlYW4uamF2YQppbmRleCA2ZTliYWMwLi4xOWRmYjUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1kYi9lamIvTWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1kYi9lamIvTWVzc2FnZUJlYW4uamF2YQpAQCAtNDMsOCArNDMsOCBAQAogICAgIEBFSkIgcHJpdmF0ZSBIZWxsbzEgaGVsbG8xOwogICAgIEBFSkIgcHJpdmF0ZSBIZWxsbzIgaGVsbG8yOwogCi0gICAgQFJlc291cmNlKG5hbWU9Imptcy9NeVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkiLCAKLSAgICAgICAgICAgICAgbWFwcGVkTmFtZT0iam1zL2NkaV9oZWxsb19tZGJfUUNGIikgCisgICAgQFJlc291cmNlKG5hbWU9Imptcy9NeVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkiLAorICAgICAgICAgICAgICBtYXBwZWROYW1lPSJqbXMvY2RpX2hlbGxvX21kYl9RQ0YiKQogICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNGYWN0b3J5OwogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWU9Imptcy9jZGlfaGVsbG9fbWRiX091dFF1ZXVlIikgUXVldWUgY2xpZW50UXVldWU7CkBAIC01Nyw3ICs1Nyw3IEBACiAKICAgICAgICAgUXVldWVDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBoZWxsbzEgc3RhdGVsZXNzIGJlYW4iKTsKICAgICAgICAgICAgIGhlbGxvMS5oZWxsbygibG9jYWwgZWpiMy4wIHN0YXRlbGVzcyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIGhlbGxvMiBzdGF0ZWZ1bCBiZWFuIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1kYi9lamIvVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWRiL2VqYi9UZXN0QmVhbi5qYXZhCmluZGV4IDBkZDQxMDIuLjFmYmMwNzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWRiL2VqYi9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWRiL2VqYi9UZXN0QmVhbi5qYXZhCkBAIC0xOCw2ICsxOCw2IEBACiAKIAogCi0vL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4gCisvL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4KIHB1YmxpYyBjbGFzcyBUZXN0QmVhbgoge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtd2FiLXdpdGgtY2RpL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtd2FiLXdpdGgtY2RpL1dlYlRlc3QuamF2YQppbmRleCAwOWNkZmNhLi43NWRhM2RhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLXdhYi13aXRoLWNkaS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS13YWItd2l0aC1jZGkvV2ViVGVzdC5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEBXZWJTZXJ2bGV0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTEsNyArNTEsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNjEsNyArNjEsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgVGhyZWFkLnNsZWVwKDIwMDApOyAvL1dPUktBUk9VTkQgQFhYWAogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdDsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC0xMDAsMTAgKzEwMCwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS13YWItd2l0aC1jZGkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtd2FiLXdpdGgtY2RpL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzhkOTdiZC4uMGY4YWRmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS13YWItd2l0aC1jZGkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLXdhYi13aXRoLWNkaS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXdhYiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS13YWItd2l0aC1jZGkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS13YWItd2l0aC1jZGkvYnVpbGQueG1sCmluZGV4IGEyNzZjZGEuLjNhZTYyZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtd2FiLXdpdGgtY2RpL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLXdhYi13aXRoLWNkaS9idWlsZC54bWwKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNTAsMjMgKzUwLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YWItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhYi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIyNSIvPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgpAQCAtNzksMTAgKzc5LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS13YWItd2l0aC1jZGkvY29tbW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtd2FiLXdpdGgtY2RpL2NvbW1vbi54bWwKaW5kZXggZjM0MmQ4Ny4uOTJmNTVlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS13YWItd2l0aC1jZGkvY29tbW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLXdhYi13aXRoLWNkaS9jb21tb24ueG1sCkBAIC0xNywyNCArMTcsMjQgQEAKIC0tPgogCiA8IS0tCi0gICAgVGhpcyBpcyB0aGUgdG9wIGxldmVsIGJ1aWxkIGZpbGUgdGhhdCBzaG91bGQgYmUgCi0gICAgaW1wb3J0ZWQgaW50byBhbGwgdGhlIGxlYWYgbGV2ZWwgYnVpbGQgZmlsZXMgCisgICAgVGhpcyBpcyB0aGUgdG9wIGxldmVsIGJ1aWxkIGZpbGUgdGhhdCBzaG91bGQgYmUKKyAgICBpbXBvcnRlZCBpbnRvIGFsbCB0aGUgbGVhZiBsZXZlbCBidWlsZCBmaWxlcwogLS0+CiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDwhLS0gVGFyZ2V0cyB0byBjbGVhbiBjbGFzcyBmaWxlcyBhbmQgamFycyBmaWxlcyAtLT4KLTwhLS0gCi1WYXJpYWJsZXMgdXNlZDogCi0gICAgJHtidWlsZC5jbGFzc2VzLmRpcn0gCis8IS0tCitWYXJpYWJsZXMgdXNlZDoKKyAgICAke2J1aWxkLmNsYXNzZXMuZGlyfQogICAgICR7YXNzZW1ibGUuZGlyfQogLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImNsZWFuLWNsYXNzZXMtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogQ2xlYW5pbmcgdGVzdCBzb3VyY2UgZmlsZXM6ICR7YnVpbGQuYmFzZS5kaXJ9IiAKKyAgICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBDbGVhbmluZyB0ZXN0IHNvdXJjZSBmaWxlczogJHtidWlsZC5iYXNlLmRpcn0iCiAgICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmJhc2UuZGlyfSIvPgogPC90YXJnZXQ+Ci0gICAgCisKIDx0YXJnZXQgbmFtZT0iY2xlYW4tamFycy1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgPGRlbGV0ZSBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogPC90YXJnZXQ+CkBAIC00Niw5ICs0Niw5IEBACiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDwhLS0gVGFyZ2V0IHRvIGNvbXBpbGUgdGhlIGphdmEgc291cmNlIGZpbGVzIC0tPgotPCEtLSAKLVZhcmlhYmxlcyB1c2VkOiAKLSAgICAke2J1aWxkLmNsYXNzZXMuZGlyfSAKKzwhLS0KK1ZhcmlhYmxlcyB1c2VkOgorICAgICR7YnVpbGQuY2xhc3Nlcy5kaXJ9CiAgICAgJHtzMWFzdGVzdC5jbGFzc3BhdGh9CiAgICAgJHtzcmN9CiAtLT4KQEAgLTc1LDcgKzc1LDcgQEAKIFZhcmlhYmxlcyBVc2VkOgogICAgICR7d2FyLmZpbGV9CiAgICAgJHtidWlsZC5jbGFzc2VzLmRpcn0KLSAgICAke2FwcG5hbWV9ICAgIAorICAgICR7YXBwbmFtZX0KICAgICAke2Fzc2VtYmxlLmRpcn0KICAgICAke3dlYi54bWx9CiAgICAgJHtiZWFucy54bWx9CkBAIC0xMDYsMTcgKzEwNiwxNyBAQAogCiA8dGFyZ2V0IG5hbWU9InB1Ymxpc2gtd2FyLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8bWtkaXIgZGlyPSIke2J1aWxkLndlYmFwcHMuZGlyfSIvPgotICA8Y29weSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIiAKLSAgICAgICAgdG9maWxlPSIke2J1aWxkLndlYmFwcHMuZGlyfS8ke2FwcG5hbWV9LndhciIgCisgIDxjb3B5IGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiCisgICAgICAgIHRvZmlsZT0iJHtidWlsZC53ZWJhcHBzLmRpcn0vJHthcHBuYW1lfS53YXIiCiAgICAgICAgIG92ZXJ3cml0ZT0idHJ1ZSIgLz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNsZWFuLXdlYmFwcHMtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQud2ViYXBwcy5kaXJ9IiBxdWlldD0idHJ1ZSIgLz4gIAorICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLndlYmFwcHMuZGlyfSIgcXVpZXQ9InRydWUiIC8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJjbGVhciI+Ci0gICAgPGRlbGV0ZSBmaWxlPSIke3dhci5maWxlfSIvPiAgCisgICAgPGRlbGV0ZSBmaWxlPSIke3dhci5maWxlfSIvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iY29weS10bGRzIiBpZj0idGxkcy1leGlzdCIgZGVwZW5kcz0iY2xlYXIsdGVzdC10bGRzLWV4aXN0Ij4KQEAgLTE0NSwxMyArMTQ1LDEzIEBACiAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMiLz4KICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvbGliIi8+CiAgIDxta2RpciBkaXI9ImxpYiIvPgotICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC13ZWIueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXdlYi54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7c3VuLXdlYi54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHtzdW4td2ViLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3N1bi13ZWIueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHt3ZWJsb2dpYy54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHt3ZWJsb2dpYy54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93ZWJsb2dpYy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXJlc291cmNlcy54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9saWIiIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICA8ZmlsZXNldCBkaXI9ImxpYiI+CkBAIC0xNTksMzIgKzE1OSwzMiBAQAogICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouemlwIi8+CiAgICAgICA8L2ZpbGVzZXQ+CiAgIDwvY29weT4KLSAgPGNvcHkgZmlsZT0iJHt3ZWJzZXJ2aWNlcy54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHt3ZWJzZXJ2aWNlcy54bWx9IgogICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dlYnNlcnZpY2VzLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7bWFwcGluZ2ZpbGUubG9jYXRpb259LyR7bWFwcGluZ2ZpbGUubmFtZX0iIAorICA8Y29weSBmaWxlPSIke21hcHBpbmdmaWxlLmxvY2F0aW9ufS8ke21hcHBpbmdmaWxlLm5hbWV9IgogICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC8ke21hcHBpbmdmaWxlLm5hbWV9IgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHt3c2RsZmlsZS5sb2NhdGlvbn0vJHt3c2RsZmlsZS5uYW1lfSIgCisgIDxjb3B5IGZpbGU9IiR7d3NkbGZpbGUubG9jYXRpb259LyR7d3NkbGZpbGUubmFtZX0iCiAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd3NkbC8ke3dzZGxmaWxlLm5hbWV9IgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHt0YWdQbHVnaW5zLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3RhZ1BsdWdpbnMueG1sfSIKICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi90YWdQbHVnaW5zLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7d2ViLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3dlYi54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93ZWIueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgICA8Y29weSBmaWxlPSIke3BlcnNpc3RlbmNlLnhtbH0iIAorICAgIDxjb3B5IGZpbGU9IiR7cGVyc2lzdGVuY2UueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvY2xhc3Nlcy9NRVRBLUlORi9wZXJzaXN0ZW5jZS54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICAgPGNvcHkgZmlsZT0iJHtiZWFucy54bWx9IiAKKyAgIDxjb3B5IGZpbGU9IiR7YmVhbnMueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvYmVhbnMueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgPGNvcHkgZmlsZT0iJHtjb250ZXh0LnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9NRVRBLUlORi9jb250ZXh0LnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgIDxjb3B5IGZpbGU9IiR7Y2RpLWV4dGVuc2lvbi5zZXJ2aWNlfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvY2xhc3Nlcy9NRVRBLUlORi9zZXJ2aWNlcy9qYWthcnRhLmVudGVycHJpc2UuaW5qZWN0LnNwaS5FeHRlbnNpb24iIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICAgICAgCisKICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMiPgogICAgICAgPGZpbGVzZXQgZGlyPSIke3dhci5jbGFzc2VzfSI+CiAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5jbGFzcyIvPgpAQCAtMjI5LDEwICsyMjksMTAgQEAKICAgICAgIDxpbmNsdWRlIG5hbWU9IldFQi1JTkYvY2xhc3Nlcy9NRVRBLUlORi9zZXJ2aWNlcy9qYWthcnRhLmVudGVycHJpc2UuaW5qZWN0LnNwaS5FeHRlbnNpb24iLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9IldFQi1JTkYvY2xhc3Nlcy9NRVRBLUlORi9wZXJzaXN0ZW5jZS54bWwiLz4KICAgICA8L2ZpbGVzZXQ+Ci0gIDwvamFyPiAgICAgICAKKyAgPC9qYXI+CiAgIDxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgd2FyIGZpbGUgJHt3YXIuZmlsZX0iIGxldmVsPSJ2ZXJib3NlIi8+Ci0gIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICA8ZWNobyBtZXNzYWdlPSJteSB3ZWJjbGllbnQgd2FyIGNsYXNzZXMgYXJlOiR7d2ViY2xpZW50Lndhci5jbGFzc2VzfSIgCisgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgIDxlY2hvIG1lc3NhZ2U9Im15IHdlYmNsaWVudCB3YXIgY2xhc3NlcyBhcmU6JHt3ZWJjbGllbnQud2FyLmNsYXNzZXN9IgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KIDwvdGFyZ2V0PgogCkBAIC0yNDQsMTMgKzI0NCwxMyBAQAogICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9saWIiLz4KICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvTUVUQS1JTkYiLz4KICAgPG1rZGlyIGRpcj0ibGliIi8+Ci0gIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXdlYi54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtd2ViLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2dsYXNzZmlzaC13ZWIueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHtzdW4td2ViLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3N1bi13ZWIueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvc3VuLXdlYi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3dlYmxvZ2ljLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3dlYmxvZ2ljLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dlYmxvZ2ljLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXJlc291cmNlcy54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2xpYiIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgIDxmaWxlc2V0IGRpcj0ibGliIj4KQEAgLTI1OCwzNiArMjU4LDM2IEBACiAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi56aXAiLz4KICAgICAgIDwvZmlsZXNldD4KICAgPC9jb3B5PgotICA8Y29weSBmaWxlPSIke3dlYnNlcnZpY2VzLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3dlYnNlcnZpY2VzLnhtbH0iCiAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd2Vic2VydmljZXMueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHttYXBwaW5nZmlsZS5sb2NhdGlvbn0vJHttYXBwaW5nZmlsZS5uYW1lfSIgCisgIDxjb3B5IGZpbGU9IiR7bWFwcGluZ2ZpbGUubG9jYXRpb259LyR7bWFwcGluZ2ZpbGUubmFtZX0iCiAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wLyR7bWFwcGluZ2ZpbGUubmFtZX0iCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3dzZGxmaWxlLmxvY2F0aW9ufS8ke3dzZGxmaWxlLm5hbWV9IiAKKyAgPGNvcHkgZmlsZT0iJHt3c2RsZmlsZS5sb2NhdGlvbn0vJHt3c2RsZmlsZS5uYW1lfSIKICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93c2RsLyR7d3NkbGZpbGUubmFtZX0iCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3RhZ1BsdWdpbnMueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7dGFnUGx1Z2lucy54bWx9IgogICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3RhZ1BsdWdpbnMueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHt3ZWIueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7d2ViLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dlYi54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICAgIDxjb3B5IGZpbGU9IiR7cGVyc2lzdGVuY2UueG1sfSIgCisgICAgPGNvcHkgZmlsZT0iJHtwZXJzaXN0ZW5jZS54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9jbGFzc2VzL01FVEEtSU5GL3BlcnNpc3RlbmNlLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gICA8Y29weSBmaWxlPSIke2JlYW5zLnhtbH0iIAorICAgPGNvcHkgZmlsZT0iJHtiZWFucy54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9iZWFucy54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogCi0gICA8Y29weSBmaWxlPSIke2J1bmRsZS5kZXNjcmlwdG9yfSIgCisgICA8Y29weSBmaWxlPSIke2J1bmRsZS5kZXNjcmlwdG9yfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvY2xhc3Nlcy9NRVRBLUlORi9NQU5JRkVTVC5NRiIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgIDxjb3B5IGZpbGU9IiR7Y29udGV4dC54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvTUVUQS1JTkYvY29udGV4dC54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSBmaWxlPSIke2NkaS1leHRlbnNpb24uc2VydmljZX0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvc2VydmljZXMvamFrYXJ0YS5lbnRlcnByaXNlLmluamVjdC5zcGkuRXh0ZW5zaW9uIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgICAgIAorCiAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9jbGFzc2VzIj4KICAgICAgIDxmaWxlc2V0IGRpcj0iJHt3YXIuY2xhc3Nlc30iPgogICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouY2xhc3MiLz4KQEAgLTMzMiwxMCArMzMyLDEwIEBACiAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvc2VydmljZXMvamFrYXJ0YS5lbnRlcnByaXNlLmluamVjdC5zcGkuRXh0ZW5zaW9uIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvcGVyc2lzdGVuY2UueG1sIi8+CiAgICAgPC9maWxlc2V0PgotICA8L2phcj4gICAgICAgCisgIDwvamFyPgogICA8ZWNobyBtZXNzYWdlPSJjcmVhdGVkIFdBQiBmaWxlICR7d2FyLmZpbGV9IiBsZXZlbD0idmVyYm9zZSIvPgotICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgPGVjaG8gbWVzc2FnZT0ibXkgd2ViY2xpZW50IFdBQiBjbGFzc2VzIGFyZToke3dlYmNsaWVudC53YXIuY2xhc3Nlc30iIAorICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICA8ZWNobyBtZXNzYWdlPSJteSB3ZWJjbGllbnQgV0FCIGNsYXNzZXMgYXJlOiR7d2ViY2xpZW50Lndhci5jbGFzc2VzfSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiA8L3RhcmdldD4KIApAQCAtMzU0LDM1ICszNTQsMzUgQEAKIFZhcmlhYmxlcyBVc2VkOgogICAgICR7ZWpiLmphcn0KICAgICAke2J1aWxkLmNsYXNzZXMuZGlyfQotICAgICR7ZWpiLWphci54bWx9ICAgIAorICAgICR7ZWpiLWphci54bWx9CiAgICAgJHtiZWFucy54bWx9Ci0gICAgJHtwZXJzaXN0ZW5jZS1vcm0ueG1sfSAgICAKLSAgICAke3N1bi1lamItamFyLnhtbH0gICAgCi0gICAgJHtnbGFzc2Zpc2gtZWpiLWphci54bWx9ICAgIAotICAgICR7c3VuLWNtcC1tYXBwaW5ncy54bWx9ICAgIAotICAgICR7bWV0YWluZi5kaXJ9ICAgIAorICAgICR7cGVyc2lzdGVuY2Utb3JtLnhtbH0KKyAgICAke3N1bi1lamItamFyLnhtbH0KKyAgICAke2dsYXNzZmlzaC1lamItamFyLnhtbH0KKyAgICAke3N1bi1jbXAtbWFwcGluZ3MueG1sfQorICAgICR7bWV0YWluZi5kaXJ9CiAgICAgJHtlamJqYXIuZmlsZXN9CiAgICAgJHtkYnNjaGVtYX0KIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJwYWNrYWdlLWVqYmphci1jb21tb24iPgogICA8ZGVsZXRlIGZpbGU9IiR7ZWpiLmphcn0iLz4KLSAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogR2VuZXJhdGluZyBlamItamFyIGluc2lkZSBidWlsZCBkaXJlY3RvcnkiIAorICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBHZW5lcmF0aW5nIGVqYi1qYXIgaW5zaWRlIGJ1aWxkIGRpcmVjdG9yeSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+Ci0gIDxjb3B5IGZpbGU9IiR7ZWpiLWphci54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHtlamItamFyLnhtbH0iCiAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9lamItamFyLnhtbCIKICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHtwZXJzaXN0ZW5jZS1vcm0ueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7cGVyc2lzdGVuY2Utb3JtLnhtbH0iCiAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9wZXJzaXN0ZW5jZS1vcm0ueG1sIgogICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3dlYnNlcnZpY2VzLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3dlYnNlcnZpY2VzLnhtbH0iCiAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93ZWJzZXJ2aWNlcy54bWwiCiAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7c3VuLWVqYi1qYXIueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7c3VuLWVqYi1qYXIueG1sfSIKICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1lamItamFyLnhtbCIKICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtZWpiLWphci54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtZWpiLWphci54bWx9IgogICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLWVqYi1qYXIueG1sIgogICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sfSIKQEAgLTQwNyw0MiArNDA3LDQyIEBACiAgICAgICA8aW5jbHVkZSBuYW1lPSJzdW4tY21wLW1hcHBpbmdzLnhtbCIvPgogICAgICAgPGluY2x1ZGUgbmFtZT0iYmVhbnMueG1sIi8+CiAgICAgPC9tZXRhaW5mPgotICA8L2phcj4gICAgICAgCisgIDwvamFyPgogICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8ZGVsZXRlIGZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9LyouZGJzY2hlbWEiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotPC90YXJnZXQ+ICAKKzwvdGFyZ2V0PgogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldCB0byBwYWNrYWdlIHRoZSBhcHBjbGllbnQgYXBwbGljYXRpb24gdG8gamFyIGZpbGUgLS0+CiA8IS0tCiBWYXJpYWJsZXMgVXNlZDoKICAgICAke2FwcGNsaWVudC5qYXJ9Ci0gICAgJHthcHBjbGllbnRqYXIuY2xhc3Nlc30gICAgCi0gICAgJHthcHBjbGllbnRqYXIuZmlsZXN9ICAgIAorICAgICR7YXBwY2xpZW50amFyLmNsYXNzZXN9CisgICAgJHthcHBjbGllbnRqYXIuZmlsZXN9CiAgICAgJHtidWlsZC5jbGFzc2VzLmRpcn0KLSAgICAke2FwcGxpY2F0aW9uLWNsaWVudC54bWx9ICAgIAotICAgICR7c3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9ICAgIAorICAgICR7YXBwbGljYXRpb24tY2xpZW50LnhtbH0KKyAgICAke3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sfQogLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9InBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+CiAgIDxkZWxldGUgZmlsZT0iJHthcHBjbGllbnQuamFyfSIvPgotICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBHZW5lcmF0aW5nIGFwcGNsaWVudC1qYXIgaW5zaWRlIGJ1aWxkIGRpcmVjdG9yeSIgCisgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IEdlbmVyYXRpbmcgYXBwY2xpZW50LWphciBpbnNpZGUgYnVpbGQgZGlyZWN0b3J5IgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi1jbGllbnQueG1sfSIKLSAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKKyAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIgCi0gICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IiR7YXBwY2xpZW50amFyLmNsYXNzZXN9IiAKLSAgICBtYW5pZmVzdD0iLi9jbGllbnQvTUFOSUZFU1QuTUYiPiAgICAgICAgIAorICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIKKyAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iJHthcHBjbGllbnRqYXIuY2xhc3Nlc30iCisgICAgbWFuaWZlc3Q9Ii4vY2xpZW50L01BTklGRVNULk1GIj4KICAgICA8bWV0YWluZiBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIj4KICAgICAgIDxpbmNsdWRlIG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgPC9tZXRhaW5mPgotICA8L2phcj4gICAgICAgCi08L3RhcmdldD4gCisgIDwvamFyPgorPC90YXJnZXQ+CiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDwhLS0gVGFyZ2V0IHRvIGNyZWF0ZSB0aGUgZWpiIGFwcGxpY2F0aW9uIGphciBmaWxlIC0tPgpAQCAtNDUzLDcgKzQ1Myw3IEBACiAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgPHBhcmFtIG5hbWU9ImVqYi5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIi8+CiAgIDwvYW50Y2FsbD4KLTwvdGFyZ2V0PiAgICAgCis8L3RhcmdldD4KIAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLSBUYXJnZXQgdG8gY3JlYXRlIHRoZSBhcHBjbGllbnQgamFyIGZpbGUgLS0+CkBAIC00NjEsOSArNDYxLDkgQEAKIDx0YXJnZXQgbmFtZT0iYXBwY2xpZW50LWphci1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KLSAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiAKKyAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIgogICAgICAgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiIAorICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuamFyIgogICAgICAgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+CkBAIC00OTIsMjIgKzQ5MiwyMiBAQAogPHRhcmdldCBuYW1lPSJidWlsZC1lYXItY29tbW9uIiBkZXBlbmRzPSJmaXhGaWxlcyxwYWNrYWdlLXBlcnNpc3RlbmNlLWNvbW1vbixlamItamFyLWNvbW1vbixhcHBjbGllbnQtamFyLWNvbW1vbix3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgIAotICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAJZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiAgCWZhaWxvbmVycm9yPSJmYWxzZSIvPiAKKyAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMtZWFyLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIgIGZpbHRlcmluZz0idHJ1ZSIvPgotICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+IAorICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+CiAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CiAgICAgPC9maWxlc2V0PgogICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotCTxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLQk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CiAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIi8+CiAgICAgPC9maWxlc2V0PgogICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiBpbmNsdWRlcz0ibGliL3JlcG9ydGVyLmphciIvPgotICA8L2phcj4gICAgICAgIAorICA8L2phcj4KIDwvdGFyZ2V0PgogCiAKQEAgLTUxNywyMSArNTE3LDIxIEBACiA8dGFyZ2V0IG5hbWU9ImVhci1jb21tb24iIGRlcGVuZHM9ImZpeEZpbGVzLGluaXQtY29tbW9uIj4KICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+ICAgIAotICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAJZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAorICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgorICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXJlc291cmNlcy1lYXIueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIiAgZmlsdGVyaW5nPSJ0cnVlIi8+Ci0gIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiAKKyAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiCiAgICAgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgogICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgogICAgIDwvZmlsZXNldD4KICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KLQk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIvPgogICAgIDwvZmlsZXNldD4KICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9ImxpYi9yZXBvcnRlci5qYXIiLz4KLSAgPC9lYXI+ICAgICAgICAKKyAgPC9lYXI+CiA8L3RhcmdldD4KIAogCkBAIC01NjEsMTcgKzU2MSwxNyBAQAogICA8ZWNobyBtZXNzYWdlPSJPcGVyYW5kICR7b3BlcmFuZC5wcm9wc30iICBsZXZlbD0idmVyYm9zZSIvPgogICA8ZWNobyBtZXNzYWdlPSJhc2FkbWluICR7YWRtaW4uY29tbWFuZH0gJHthcy5wcm9wc30gJHtvcGVyYW5kLnByb3BzfSIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJ0cnVlIj4KLSAgICAgICAgPGFyZyBsaW5lPSIke2FkbWluLmNvbW1hbmR9ICR7YXMucHJvcHN9ICR7b3BlcmFuZC5wcm9wc30iIC8+ICAgICAgICAKKyAgICAgICAgPGFyZyBsaW5lPSIke2FkbWluLmNvbW1hbmR9ICR7YXMucHJvcHN9ICR7b3BlcmFuZC5wcm9wc30iIC8+CiAgICAgPC9leGVjPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgotICA8ZWNobyBtZXNzYWdlPSJEb2luZyBhZG1pbiB0YXNrICR7YWRtaW4uY29tbWFuZH0gKGlnbm9yZSBmYWlsdXJlcykiIAorICA8ZWNobyBtZXNzYWdlPSJEb2luZyBhZG1pbiB0YXNrICR7YWRtaW4uY29tbWFuZH0gKGlnbm9yZSBmYWlsdXJlcykiCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8ZWNobyBtZXNzYWdlPSJPcGVyYW5kICR7b3BlcmFuZC5wcm9wc30iICBsZXZlbD0idmVyYm9zZSIvPgogICA8ZWNobyBtZXNzYWdlPSJhc2FkbWluICR7YWRtaW4uY29tbWFuZH0gJHthcy5wcm9wc30gJHtvcGVyYW5kLnByb3BzfSIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+Ci0gICAgICAgIDxhcmcgbGluZT0iJHthZG1pbi5jb21tYW5kfSAke2FzLnByb3BzfSAke29wZXJhbmQucHJvcHN9IiAvPiAgICAgICAgCisgICAgICAgIDxhcmcgbGluZT0iJHthZG1pbi5jb21tYW5kfSAke2FzLnByb3BzfSAke29wZXJhbmQucHJvcHN9IiAvPgogICAgIDwvZXhlYz4KIDwvdGFyZ2V0PgogCkBAIC01NzksNyArNTc5LDcgQEAKIDwhLS0gVGFyZ2V0IHRvIGV4ZWN1dGUgYSBiYXRjaGZpbGUgb2YgYXNhZG1pbiBjb21tYW5kcyAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KLSAgPGVjaG8gbWVzc2FnZT0iRG9pbmcgYWRtaW4gYmF0Y2ggdGFzayAke2FkbWluLmNvbW1hbmR9IC0tZmlsZSIgCisgIDxlY2hvIG1lc3NhZ2U9IkRvaW5nIGFkbWluIGJhdGNoIHRhc2sgJHthZG1pbi5jb21tYW5kfSAtLWZpbGUiCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogPHByb3BlcnR5IG5hbWU9InVzZXIucGFzc3dvcmQuZmlsZSIgdmFsdWU9ImFzYWRtaW51c2VycGFzc3dvcmQudHh0Ii8+CiA8ZWNobyBmaWxlPSIke3VzZXIucGFzc3dvcmQuZmlsZX0iIGFwcGVuZD0iZmFsc2UiPgpAQCAtNTkwLDExICs1OTAsMTEgQEAKIDwvZWNobz4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICA8YXJnIGxpbmU9Ii0tdXNlciAke2FkbWluLnVzZXJ9IC0tcGFzc3dvcmRmaWxlICR7dXNlci5wYXNzd29yZC5maWxlfSAtLWhvc3QgJHthZG1pbi5ob3N0fSAtLXBvcnQgJHthZG1pbi5wb3J0fSAtLWVjaG89dHJ1ZSAtLXRlcnNlPXRydWUiLz4KLSAgICAgPGFyZyBsaW5lPSJtdWx0aW1vZGUgLS1maWxlICR7YXNhZG1pbi5maWxlfSIgLz4gICAgICAgIAorICAgICA8YXJnIGxpbmU9Im11bHRpbW9kZSAtLWZpbGUgJHthc2FkbWluLmZpbGV9IiAvPgogICA8L2V4ZWM+CiAgIDxkZWxldGUgZmlsZT0iJHt1c2VyLnBhc3N3b3JkLmZpbGV9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KIDwvdGFyZ2V0PgotIAorCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KQEAgLTYxOCw3ICs2MTgsNyBAQAogICA8L2V4ZWM+CiAgIDxkZWxldGUgZmlsZT0iJHt1c2VyLnBhc3N3b3JkLmZpbGV9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KIDwvdGFyZ2V0PgotICAgICAKKwogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLSBUYXJnZXQgdG8gZGVsZXRlIHRoZSB1c2VyIGluIGZpbGUgcmVhbG0gdGhlIEFwcFNlcnYgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgpAQCAtNjM0LDcgKzYzNCw3IEBACiA8L3RhcmdldD4KIAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSBKMkVFIENvbm5lY3RvciByZWxhdGVkIHRhcmdldHMgCQkJICAgICAJICAtLT4KKzwhLS0gSjJFRSBDb25uZWN0b3IgcmVsYXRlZCB0YXJnZXRzICAgICAgICAgICAgICAgICAgICAgICAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAKIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWNvbm5lY3Rvci1jb25ucG9vbC1jb21tb24iCkBAIC03MjEsNyArNzIxLDcgQEAKIDwhLS0gVGFyZ2V0IHRvIGNyZWF0ZSBKREJDIGNvbm5lY3Rpb24gcG9vbCAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iY3JlYXRlZCBqZGJjIGNvbm5lY3Rpb24gcG9vbCAke2pkYmMuY29ucG9vbC5uYW1lfSIgCis8ZWNobyBtZXNzYWdlPSJjcmVhdGVkIGpkYmMgY29ubmVjdGlvbiBwb29sICR7amRiYy5jb25wb29sLm5hbWV9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgPGFyZyBsaW5lPSJjcmVhdGUtamRiYy1jb25uZWN0aW9uLXBvb2wiLz4KQEAgLTczNSw3ICs3MzUsNyBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWpkYmMtZHJpdmVyLWNvbm5wb29sLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iY3JlYXRlZCBqZGJjIGNvbm5lY3Rpb24gcG9vbCAke2pkYmMuY29ucG9vbC5uYW1lfSIgCis8ZWNobyBtZXNzYWdlPSJjcmVhdGVkIGpkYmMgY29ubmVjdGlvbiBwb29sICR7amRiYy5jb25wb29sLm5hbWV9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhLXBhcmFtcyIgdmFsdWU9IiIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CkBAIC03NzIsNyArNzcyLDcgQEAKICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CiAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtqZGJjLmNvbnBvb2wubmFtZX0ucHJvcGVydHkuVVJMPSR7ZGIudXJsfTt1c2VyPSR7ZGIudXNlcn07cGFzc3dvcmQ9JHtkYi5wd2R9Ii8+CisgICAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtqZGJjLmNvbnBvb2wubmFtZX0ucHJvcGVydHkuVVJMPSR7ZGIudXJsfTt1c2VyPSR7ZGIudXNlcn07cGFzc3dvcmQ9JHtkYi5wd2R9Ii8+CiAgIDwvYW50Y2FsbD4KIDwvdGFyZ2V0PgogCkBAIC04MjMsNyArODIzLDcgQEAKICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CiAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtqZGJjLmNvbnBvb2wubmFtZX0ucHJvcGVydHkuVVJMPSR7ZGIudXJsfTt1c2VyPSR7ZGIudXNlcn07cGFzc3dvcmQ9JHtkYi5wd2R9Ii8+CisgICAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtqZGJjLmNvbnBvb2wubmFtZX0ucHJvcGVydHkuVVJMPSR7ZGIudXJsfTt1c2VyPSR7ZGIudXNlcn07cGFzc3dvcmQ9JHtkYi5wd2R9Ii8+CiAgIDwvYW50Y2FsbD4KIDwvdGFyZ2V0PgogCkBAIC04MzksMTQgKzgzOSwxNCBAQAogICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHtqZGJjLmNvbnBvb2wubmFtZX0iLz4KICAgICA8L2V4ZWM+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY21kIGV4ZWN1dGVkIGZvciAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPiAgCisgICAgPGVjaG8gbWVzc2FnZT0iY21kIGV4ZWN1dGVkIGZvciAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogPC90YXJnZXQ+CiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDwhLS0gVGFyZ2V0IHRvIGNyZWF0ZSBKREJDIHJlc291cmNlICAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci08ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBqZGJjIHJlc291cmNlIHBvb2wgJHtqZGJjLnJlc291cmNlLm5hbWV9IiAKKzxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIGpkYmMgcmVzb3VyY2UgcG9vbCAke2pkYmMucmVzb3VyY2UubmFtZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGVjaG8gbWVzc2FnZT0iYXNhZG1pbiBjcmVhdGUtamRiYy1yZXNvdXJjZSAke2FzLnByb3BzfSAtLWNvbm5lY3Rpb25wb29saWQgJHtqZGJjLmNvbnBvb2wubmFtZX0gLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gJHtqZGJjLnJlc291cmNlLm5hbWV9Ii8+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CkBAIC04OTgsNyArODk4LDcgQEAKIDwhLS0gVGFyZ2V0IHRvIGNyZWF0ZSBwZXJzaXN0ZW5jZSByZXNvdXJjZSAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLTxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIHBtIHJlc291cmNlIGF0ICR7cG0ucmVzb3VyY2UubmFtZX0iIAorPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgcG0gcmVzb3VyY2UgYXQgJHtwbS5yZXNvdXJjZS5uYW1lfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgIDxlY2hvIG1lc3NhZ2U9ImFzYWRtaW4gY3JlYXRlLXBlcnNpc3RlbmNlLXJlc291cmNlICR7YXMucHJvcHN9IC0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9ICR7cG0ucmVzb3VyY2UubmFtZX0iLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgpAQCAtOTA4LDcgKzkwOCw3IEBACiAgICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICAgICAgPGFyZyBsaW5lPSIke3BtLnJlc291cmNlLm5hbWV9Ii8+CiAgICAgPC9leGVjPgotICAgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0ZWQgJHtwbS5yZXNvdXJjZS5uYW1lfSAtLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPiAKKyAgICA8ZWNobyBtZXNzYWdlPSJDcmVhdGVkICR7cG0ucmVzb3VyY2UubmFtZX0gLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKQEAgLTkyNywxNCArOTI3LDE0IEBACiA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiCi0gICAgICB2YWx1ZT0iZGVsZXRlLXBlcnNpc3RlbmNlLXJlc291cmNlIAorICAgICAgdmFsdWU9ImRlbGV0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZQogICAgICAgICAtLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIgLz4KICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cG0ucmVzb3VyY2UubmFtZX0iIC8+CiAgIDwvYW50Y2FsbD4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImV4ZWN1dGUtc3FsLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIHNxbCBzdGF0ZW1lbnQgYXQgJHtiYXNlZGlyfSBmcm9tICR7c3FsLmZpbGV9IiAKKzxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBzcWwgc3RhdGVtZW50IGF0ICR7YmFzZWRpcn0gZnJvbSAke3NxbC5maWxlfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8c3FsCiAgICAgZHJpdmVyPSIke2RiLmRyaXZlcn0iCkBAIC05NDksNyArOTQ5LDcgQEAKIAogCiA8dGFyZ2V0IG5hbWU9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLTxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBzcWwgc3RhdGVtZW50IGF0ICR7YmFzZWRpcn0gZnJvbSAke3NxbC5maWxlfSIgCis8ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgc3FsIHN0YXRlbWVudCBhdCAke2Jhc2VkaXJ9IGZyb20gJHtzcWwuZmlsZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPHNxbAogICAgIGRyaXZlcj0iJHtkYi5kcml2ZXJ9IgpAQCAtOTY1LDggKzk2NSw4IEBACiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDwhLS0gVGFyZ2V0IHRvIGNyZWF0ZS9kZWxldGUgamF2YW1haWwgcmVzb3VyY2VzICAtLT4KLTwhLS0gCi0gICAgUHJvcGVydGllcyByZXF1aXJlZDogCis8IS0tCisgICAgUHJvcGVydGllcyByZXF1aXJlZDoKICAgICBtYWlsaG9zdAogICAgIGZyb21hZGRyZXNzCiAgICAgZGVidWcKQEAgLTEwMDcsNyArMTAwNyw3IEBACiA8IS0tIFRhcmdldCB0byBjcmVhdGUgZGF0YWJhc2UgdGFibGUgdGhyb3VnaCBTUUwgZmlsZSAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1zcWwtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci08ZWNobyBtZXNzYWdlPSJjcmVhdGluZyB0YWJsZXMgZnJvbSAke2Jhc2VkaXJ9L3NxbC8ke2RiLmNyZWF0ZX0iIAorPGVjaG8gbWVzc2FnZT0iY3JlYXRpbmcgdGFibGVzIGZyb20gJHtiYXNlZGlyfS9zcWwvJHtkYi5jcmVhdGV9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxzcWwKICAgICBkcml2ZXI9IiR7ZGIuZHJpdmVyfSIKQEAgLTEwMjYsNyArMTAyNiw3IEBACiA8IS0tIFRhcmdldCB0byBkZWxldGUgZGF0YWJhc2UgdGFibGUgdGhyb3VnaCBTUUwgZmlsZSAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1zcWwtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci08ZWNobyBtZXNzYWdlPSJkcm9wcGluZyB0YWJsZXMgZnJvbSAke2Jhc2VkaXJ9L3NxbC8ke2RiLmRyb3B9IiAKKzxlY2hvIG1lc3NhZ2U9ImRyb3BwaW5nIHRhYmxlcyBmcm9tICR7YmFzZWRpcn0vc3FsLyR7ZGIuZHJvcH0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPHNxbAogICAgIGRyaXZlcj0iJHtkYi5kcml2ZXJ9IgpAQCAtMTA0NSwxMSArMTA0NSwxMSBAQAogPCEtLSBUYWdldCB0byBjcmVhdGUgSk1TIENvbm5lY3Rpb24gICAgICAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWptcy1jb25uZWN0aW9uLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICA8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBKTVMgY29ubmVjdGlvbiBmYWN0b3J5IHdpdGggbmFtZSAke2ptcy5mYWN0b3J5Lm5hbWV9IiAKKyAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgSk1TIGNvbm5lY3Rpb24gZmFjdG9yeSB3aXRoIG5hbWUgJHtqbXMuZmFjdG9yeS5uYW1lfSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgogICAgIDxhcmcgbGluZT0iY3JlYXRlLWptcy1yZXNvdXJjZSAiLz4KLSAgICA8YXJnIGxpbmU9Ii0tcmVzdHlwZSAke2ptcy5mYWN0b3J5LnR5cGV9Ii8+ICAgIAorICAgIDxhcmcgbGluZT0iLS1yZXN0eXBlICR7am1zLmZhY3RvcnkudHlwZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHtqbXMuZmFjdG9yeS5uYW1lfSIgLz4KQEAgLTEwNjAsMjMgKzEwNjAsMjMgQEAKIDwhLS0gVGFnZXQgdG8gZGVsZXRlIEpNUyBDb25uZWN0aW9uICAgICAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1qbXMtY29ubmVjdGlvbi1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgPGVjaG8gbWVzc2FnZT0iRGVsZXRlIEpNUyBjb25uZWN0aW9uIGZhY3Rvcnkgd2l0aCBuYW1lICR7am1zLmZhY3RvcnkubmFtZX0iIAorICA8ZWNobyBtZXNzYWdlPSJEZWxldGUgSk1TIGNvbm5lY3Rpb24gZmFjdG9yeSB3aXRoIG5hbWUgJHtqbXMuZmFjdG9yeS5uYW1lfSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgotICAgIDxhcmcgbGluZT0iZGVsZXRlLWptcy1yZXNvdXJjZSAiLz4gICAgCisgICAgPGFyZyBsaW5lPSJkZWxldGUtam1zLXJlc291cmNlICIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+ICAgIAorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7am1zLmZhY3RvcnkubmFtZX0iLz4KICAgPC9leGVjPgogPC90YXJnZXQ+CiAKIDwhLS0gSk1TOiBjcmVhdGUvZGVsZXRlIERlc3RpbmF0aW9uIFJlc291cmNlIFRhcmdldHMgLS0+CiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qbXMtcmVzb3VyY2UtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIEpNUyByZXNvdXJjZSB3aXRoIG5hbWUgJHtqbXMucmVzb3VyY2UubmFtZX0iIAorICA8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBKTVMgcmVzb3VyY2Ugd2l0aCBuYW1lICR7am1zLnJlc291cmNlLm5hbWV9IgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KIAogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KLSAgICA8YXJnIGxpbmU9ImNyZWF0ZS1qbXNkZXN0IC0tZGVzdHR5cGUgJHtkZXN0LnR5cGV9ICIvPiAgICAKKyAgICA8YXJnIGxpbmU9ImNyZWF0ZS1qbXNkZXN0IC0tZGVzdHR5cGUgJHtkZXN0LnR5cGV9ICIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICA8YXJnIGxpbmU9IiR7ZGVzdC5uYW1lfSIvPgogICA8L2V4ZWM+CkBAIC0xMDg1LDI0ICsxMDg1LDI0IEBACiAgICAgPGFyZyBsaW5lPSJjcmVhdGUtam1zLXJlc291cmNlICIvPgogICAgIDxhcmcgbGluZT0iLS1yZXN0eXBlICR7am1zLnJlc291cmNlLnR5cGV9Ii8+CiAgICAgPGFyZyBsaW5lPSItLXByb3BlcnR5IGltcURlc3RpbmF0aW9uTmFtZT0ke2Rlc3QubmFtZX0iLz4KLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+ICAgIAorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2ptcy5yZXNvdXJjZS5uYW1lfSIvPgogICA8L2V4ZWM+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJkZWxldGUtam1zLXJlc291cmNlLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICA8ZWNobyBtZXNzYWdlPSJEZWxldGUgSk1TIHJlc291cmNlIHdpdGggbmFtZSAke2ptcy5yZXNvdXJjZS5uYW1lfSIgCisgIDxlY2hvIG1lc3NhZ2U9IkRlbGV0ZSBKTVMgcmVzb3VyY2Ugd2l0aCBuYW1lICR7am1zLnJlc291cmNlLm5hbWV9IgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KIAogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KICAgICA8YXJnIGxpbmU9ImRlbGV0ZS1qbXMtcmVzb3VyY2UgIi8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPiAgICAKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSAke2ptcy5yZXNvdXJjZS5uYW1lfSIvPgogICA8L2V4ZWM+CiAKICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+Ci0gICAgPGFyZyBsaW5lPSJkZWxldGUtam1zZGVzdCAtLWRlc3R0eXBlICR7ZGVzdC50eXBlfSAiLz4gICAgCisgICAgPGFyZyBsaW5lPSJkZWxldGUtam1zZGVzdCAtLWRlc3R0eXBlICR7ZGVzdC50eXBlfSAiLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9ICR7ZGVzdC5uYW1lfSIvPgogICA8L2V4ZWM+CiA8L3RhcmdldD4KQEAgLTExNDYsMjAgKzExNDYsMjAgQEAKIDx0YXJnZXQgbmFtZT0iZGVwbG95LWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbi1wZSIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbi1lZSIvPgotPC90YXJnZXQ+ICAgICAgIAorPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iZGVwbG95LXZlcmlmeS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS12ZXJpZnktY29tbW9uLXBlIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktdmVyaWZ5LWNvbW1vbi1lZSIvPgotPC90YXJnZXQ+ICAgICAgIAorPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iZGVwbG95LWNvbW1vbi1wZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iIHVubGVzcz0iZWUiPgogICA8cHJvcGVydHkgbmFtZT0iZGVwbG95ZWQuYXBwIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIi8+CiAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmEtcGFyYW1zIiB2YWx1ZT0iIi8+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgPGFyZyBsaW5lPSJkZXBsb3kiLz4KLSAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+ICAgIAotICAgIDxhcmcgbGluZT0iJHtleHRyYS1wYXJhbXN9Ii8+ICAgIAorICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KKyAgICA8YXJnIGxpbmU9IiR7ZXh0cmEtcGFyYW1zfSIvPgogICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9Ii0tcmV0cmlldmUgJHthc3NlbWJsZS5kaXJ9Ii8+CiAgICAgPGFyZyBsaW5lPSItLWxpYnJhcmllcyAke2xpYnJhcmllc30iLz4KQEAgLTExNjksNyArMTE2OSw3IEBACiAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveW1lbnQgb24gdGFyZ2V0IHNlcnZlciAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSBzdWNjZXNzZnVsIi8+CiAgICA8L3RhcmdldD4KIAotPHRhcmdldCBuYW1lPSJkZXBsb3ktY29tbW9uLWVlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgaWY9ImVlIj4gICAgICAKKzx0YXJnZXQgbmFtZT0iZGVwbG95LWNvbW1vbi1lZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJlZSI+CiAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyBpbiBFRS4uLiIvPgogICA8cHJvcGVydHkgbmFtZT0iZGVwbG95ZWQuYXBwIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIi8+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CkBAIC0xMjIxLDkgKzEyMjEsOSBAQAogICAgIDxhcmcgbGluZT0iLS1wcmVjb21waWxlanNwPSR7cHJlY29tcGlsZWpzcH0iLz4KICAgICA8YXJnIGxpbmU9Ii0tdXBsb2FkIHRydWUiLz4KICAgICA8YXJnIGxpbmU9Ii0tcmV0cmlldmUgJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgIDwvZXhlYz4KLTwvdGFyZ2V0PiAgICAKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImRlcGxveS13YXItbmFtZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHt3YXJuYW1lfSBmcm9tICR7YmFzZWRpcn0uIgpAQCAtMTI1Myw3ICsxMjUzLDcgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImRlcGxveS13YWItY29tbW9ucGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIiB1bmxlc3M9ImVlIj4KLSAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nIFdBQiAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIGZyb20gJHtiYXNlZGlyfS4iIAorICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgV0FCICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIgZnJvbSAke2Jhc2VkaXJ9LiIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwcmVjb21waWxlanNwIiB2YWx1ZT0idHJ1ZSIvPgogICA8cHJvcGVydHkgbmFtZT0iZm9yY2UiIHZhbHVlPSJmYWxzZSIvPgpAQCAtMTI2MywxNyArMTI2MywxNyBAQAogICAgIDxhcmcgbGluZT0iLS1wcmVjb21waWxlanNwPSR7cHJlY29tcGlsZWpzcH0iLz4KICAgICA8YXJnIGxpbmU9Ii0tZm9yY2U9JHtmb3JjZX0iLz4KICAgICA8YXJnIGxpbmU9Ii0tdXBsb2FkPXRydWUiLz4KLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9Ii0tbGlicmFyaWVzICR7bGlicmFyaWVzfSIvPgogICAgIDxhcmcgbGluZT0iLS10eXBlPW9zZ2kiLz4KICAgICA8YXJnIGxpbmU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KICAgPC9leGVjPgotPC90YXJnZXQ+IAorPC90YXJnZXQ+CiAKIAogCiA8dGFyZ2V0IG5hbWU9ImRlcGxveS13YXItY29tbW9ucGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIiB1bmxlc3M9ImVlIj4KLSAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIgZnJvbSAke2Jhc2VkaXJ9LiIgCisgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIGZyb20gJHtiYXNlZGlyfS4iCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8cHJvcGVydHkgbmFtZT0icHJlY29tcGlsZWpzcCIgdmFsdWU9InRydWUiLz4KICAgPHByb3BlcnR5IG5hbWU9ImZvcmNlIiB2YWx1ZT0iZmFsc2UiLz4KQEAgLTEyODQsMTEgKzEyODQsMTEgQEAKICAgICA8YXJnIGxpbmU9Ii0tcHJlY29tcGlsZWpzcD0ke3ByZWNvbXBpbGVqc3B9Ii8+CiAgICAgPGFyZyBsaW5lPSItLWZvcmNlPSR7Zm9yY2V9Ii8+CiAgICAgPGFyZyBsaW5lPSItLXVwbG9hZD10cnVlIi8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSItLWxpYnJhcmllcyAke2xpYnJhcmllc30iLz4KICAgICA8YXJnIGxpbmU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KICAgPC9leGVjPgotPC90YXJnZXQ+IAorPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iZGVwbG95LXdhci1jb21tb25lZSIgaWY9ImVlIj4KICAgPHByb3BlcnR5IG5hbWU9InByZWNvbXBpbGVqc3AiIHZhbHVlPSJ0cnVlIi8+CkBAIC0xMzAxLDcgKzEzMDEsNyBAQAogICAgIDxhcmcgbGluZT0iLS1wcmVjb21waWxlanNwPSR7cHJlY29tcGlsZWpzcH0iLz4KICAgICA8YXJnIGxpbmU9Ii0tZm9yY2U9JHtmb3JjZX0iLz4KICAgICA8YXJnIGxpbmU9Ii0tdXBsb2FkPXRydWUiLz4KLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9Ii0tbGlicmFyaWVzICR7bGlicmFyaWVzfSIvPgogICAgIDxhcmcgbGluZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICA8L2V4ZWM+CkBAIC0xMzUxLDEwICsxMzUxLDEwIEBACiAgICAgPGFyZyBsaW5lPSJkZXBsb3kiLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgPGFyZyBsaW5lPSItLXVwbG9hZD10cnVlIi8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIi8+CiAgIDwvZXhlYz4KLTwvdGFyZ2V0PiAKKzwvdGFyZ2V0PgogCiA8IS0tIGRlcGxveSB0aGUgc3RhbmRhbG9uZSBqYXIgaW4gQXBwU2VydiAgLS0+CiA8dGFyZ2V0IG5hbWU9ImRlcGxveS1jbGllbnQtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC0xMzYyLDExICsxMzYyLDExIEBACiAgICAgPGFyZyBsaW5lPSJkZXBsb3kiLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgPGFyZyBsaW5lPSItLXVwbG9hZD10cnVlIi8+Ci0gICAgPGFyZyBsaW5lPSItLXJldHJpZXZlICR7YXNzZW1ibGUuZGlyfSIvPiAgICAKLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgIDxhcmcgbGluZT0iLS1yZXRyaWV2ZSAke2Fzc2VtYmxlLmRpcn0iLz4KKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiAgIDwvZXhlYz4KLTwvdGFyZ2V0PiAKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LXdhci1uYW1lIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3llZGFwcC5uYW1lIiB2YWx1ZT0iJHt3YXJuYW1lfSIvPgpAQCAtMTM4OCwyNyArMTM4OCwyNyBAQAogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgIDxhcmcgbGluZT0idW5kZXBsb3kiLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+Ci08IS0tICAgIAotPGFyZyBsaW5lPXR5cGUgJHthcHB0eXBlfS8+IAorPCEtLQorPGFyZyBsaW5lPXR5cGUgJHthcHB0eXBlfS8+CiAtLT4KLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7ZXh0cmEtcGFyYW1zfSIvPgogPCEtLSBkZXBsb3llZGFwcC5uYW1lIGRlZmF1bHRzIHRvIHthcHBuYW1lfUFwcC5kZWNsYXJlZCBpbiBwcm9wZXJ0aWVzLnhtbC0tPgotICAgIDxhcmcgbGluZT0iJHtkZXBsb3llZGFwcC5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9IiR7ZGVwbG95ZWRhcHAubmFtZX0iLz4KICAgPC9leGVjPgogPC90YXJnZXQ+CiAKIDwhLS0gIHVuZGVwbG95IHRoZSBzdGFuZGFsb25lIHdhciBpbiBBcHBTZXJ2ICAtLT4KIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktd2FyLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgIDxlY2hvIG1lc3NhZ2U9IlVuZGVwbG95aW5nIHdhcmZpbGUgJHthcHBuYW1lfS13ZWIgZnJvbSAKKyAgICA8ZWNobyBtZXNzYWdlPSJVbmRlcGxveWluZyB3YXJmaWxlICR7YXBwbmFtZX0td2ViIGZyb20KICAgICAgICAgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciBmcm9tICR7YmFzZWRpcn0uIiBsZXZlbD0idmVyYm9zZSIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgIDxhcmcgbGluZT0idW5kZXBsb3kiLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FwcG5hbWV9LXdlYiIvPgogICA8L2V4ZWM+Ci08L3RhcmdldD4gCis8L3RhcmdldD4KIAogCiA8IS0tICB1bmRlcGxveSB0aGUgc3RhbmRhbG9uZSB3YXIgaW4gQXBwU2VydiAgLS0+CkBAIC0xNDE2LDcgKzE0MTYsNyBAQAogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgIDxhcmcgbGluZT0idW5kZXBsb3kiLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FwcG5hbWV9LWVqYiIvPgogICA8L2V4ZWM+CiA8L3RhcmdldD4KQEAgLTE0MjYsMTAgKzE0MjYsMTAgQEAKICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICA8YXJnIGxpbmU9InVuZGVwbG95Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHthcHBuYW1lfS1jbGllbnQiLz4KICAgPC9leGVjPgotPC90YXJnZXQ+ICAKKzwvdGFyZ2V0PgogCiAKIDwhLS0gcnVuIGFwcGNsaWVudCBpbiBBcHBTZXJ2ICAtLT4KQEAgLTE0NzIsMTEgKzE0NzIsMTEgQEAKICAgICA8YXJnIHZhbHVlPSIke3Rlc3RzdWl0ZS5pZH0iLz4KICAgPC9qYXZhPgogPC90YXJnZXQ+Ci0gIAorCiA8IS0tIHByZXBhcmUgUG9pbnRiYXNlIHNlcnZlcnMgLS0+CiA8dGFyZ2V0IG5hbWU9InByZXBhcmVQQiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8ZWNobyBtZXNzYWdlPSJTdGFydGluZyBQb2ludGJhc2Ugc2VydmVycyIgbGV2ZWw9InZlcmJvc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2xpYi9wb2ludGJhc2UuaW5pIiAKKyAgPGNvcHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2xpYi9wb2ludGJhc2UuaW5pIgogICAgICAgdG9maWxlPSIke2RiLmRpcn0vcG9pbnRiYXNlLmluaSIvPgogICA8cmVwbGFjZSBmaWxlPSIke2RiLmRpcn0vcG9pbnRiYXNlLmluaSIgdG9rZW49IkBAQCIgdmFsdWU9IiR7ZGIuZGlyfSIvPgogPC90YXJnZXQ+CkBAIC0xNDk5LDEyICsxNDk5LDEyIEBACiAKIDwhLS0gdGFyZ2V0IG5hbWU9InN0YXJ0UEIiIGRlcGVuZHM9InByZXBhcmVQQiI+CiAgIDxwYXJhbGxlbD4KLSAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5wb2ludGJhc2UubmV0Lm5ldFNlcnZlciIgCisgICAgPGphdmEgY2xhc3NuYW1lPSJjb20ucG9pbnRiYXNlLm5ldC5uZXRTZXJ2ZXIiCiAgICAgICAgIGNsYXNzcGF0aD0iJHtkYi5jbGFzc3BhdGh9IiBmYWlsb25lcnJvcj0iZmFsc2UiIGZvcms9InRydWUiPgogICAgICAgPGFyZyBsaW5lPSIvcG9ydDo5MDkyIi8+CiAgICAgICA8YXJnIGxpbmU9Ii9wb2ludGJhc2UuaW5pPSR7ZGIuZGlyfS9wb2ludGJhc2UuaW5pIi8+CiAgICAgPC9qYXZhPgotICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnBvaW50YmFzZS5uZXQubmV0U2VydmVyIiAKKyAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5wb2ludGJhc2UubmV0Lm5ldFNlcnZlciIKICAgICAgICAgY2xhc3NwYXRoPSIke2RiLmNsYXNzcGF0aH0iIGZhaWxvbmVycm9yPSJ0cnVlIiBmb3JrPSJ0cnVlIj4KICAgICAgIDxhcmcgbGluZT0iL3BvcnQ6OTA5MyIvPgogICAgICAgPGFyZyBsaW5lPSIvcG9pbnRiYXNlLmluaT0ke2RiLmRpcn0vcG9pbnRiYXNlLmluaSIvPgpAQCAtMTUxNSw3ICsxNTE1LDcgQEAKIDwhLS0gIHN0YXJ0IERlcmJ5IERhdGFiYXNlIC0tPgogPHRhcmdldCBuYW1lPSJzdGFydERlcmJ5Ij4KICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0iZGFyd2luIj4KLQk8b3MgbmFtZT0iTWFjIE9TIFgiLz4KKyAgICA8b3MgbmFtZT0iTWFjIE9TIFgiLz4KICAgPC9jb25kaXRpb24+CiAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnREZXJieU5vbk1hYyIvPgogICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0RGVyYnlNYWMiLz4KQEAgLTE1MzIsNyArMTUzMiw3IEBACiAgICAgICBjbGFzc3BhdGg9IiR7ZGIuY2xhc3NwYXRofSIgZm9yaz0idHJ1ZSIgc3Bhd249InRydWUiPgogICAgICAgPGFyZyBsaW5lPSItaCBsb2NhbGhvc3QgLXAgMTUyOCBzdGFydCIvPgogICAgIDwvamF2YT4KLSAgPC9wYXJhbGxlbD4gICAgIAorICA8L3BhcmFsbGVsPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0ic3RhcnREZXJieU1hYyIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJkYXJ3aW4iPgpAQCAtMTU0NSw3ICsxNTQ1LDcgQEAKICAgICA8L2phdmE+CiAgICAgPGphdmEgY2xhc3NuYW1lPSJvcmcuYXBhY2hlLmRlcmJ5LmRyZGEuTmV0d29ya1NlcnZlckNvbnRyb2wiCiAgICAgICBjbGFzc3BhdGg9IiR7ZGIuY2xhc3NwYXRofSIgZm9yaz0idHJ1ZSIgc3Bhd249InRydWUiPgotICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9ImRlcmJ5LnN0b3JhZ2UuZmlsZVN5bmNUcmFuc2FjdGlvbkxvZyIgdmFsdWU9InRydWUiLz4gICAgIAorICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9ImRlcmJ5LnN0b3JhZ2UuZmlsZVN5bmNUcmFuc2FjdGlvbkxvZyIgdmFsdWU9InRydWUiLz4KICAgICAgIDxhcmcgbGluZT0iLWggbG9jYWxob3N0IC1wIDE1Mjggc3RhcnQiLz4KICAgICA8L2phdmE+CiAgIDwvcGFyYWxsZWw+CkBAIC0xNTczLDEwICsxNTczLDEwIEBACiAKIDwhLS0gc2V0dXAgSU1RIGZvciBSSSBCdWlsZCAtLT4KIDx0YXJnZXQgbmFtZT0ic2V0dXAtbXEtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIERhdGFzdG9yZSBzZXR1cCBmb3IgUzFNUS4gUmVxdWlyZWQgb25seSBmb3IgUkkiIAorICAgIDxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBEYXRhc3RvcmUgc2V0dXAgZm9yIFMxTVEuIFJlcXVpcmVkIG9ubHkgZm9yIFJJIgogICAgICAgICBsZXZlbD0idmVyYm9zZSIvPgotICAgIDxlY2hvIG1lc3NhZ2U9IiR7SU1RREJNR1J9IC1qYXZhaG9tZSAke2phdmEuaG9tZX0gCi0gICAgICAgIC1iICR7YWRtaW4uZG9tYWlufV8ke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSBjcmVhdGUgYWxsIiAKKyAgICA8ZWNobyBtZXNzYWdlPSIke0lNUURCTUdSfSAtamF2YWhvbWUgJHtqYXZhLmhvbWV9CisgICAgICAgIC1iICR7YWRtaW4uZG9tYWlufV8ke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSBjcmVhdGUgYWxsIgogICAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0lNUURCTUdSfSIgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICA8YXJnIGxpbmU9Ii1qYXZhaG9tZSAke2phdmEuaG9tZX0gLWIgJHthZG1pbi5kb21haW59XyR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IGNyZWF0ZSBhbGwiIC8+CkBAIC0xNjM3LDEzICsxNjM3LDEzIEBACiAKIDwhLS0gdXNhZ2UgIC0tPgogPHRhcmdldCBuYW1lPSJ1c2FnZS1jb21tb24iPgotICAgIDxlY2hvPiAgICAgICAgIAorICAgIDxlY2hvPgogICAgICAgICBhbnQgY2xlYW4gICAgICAgICAgIFJlbW92ZSBhbGwgY2xhc3NlcyBmaWxlcwogICAgICAgICBhbnQgYnVpbGQgICAgICAgICAgIEJ1aWxkIHRoZSBhcHBsaWNhdGlvbgogICAgICAgICBhbnQgZGVwbG95ICAgICAgICAgIERlcGxveSB0aGUgZWFyIGZpbGVzIHRvIFMxQVMKLSAgICAgICAgYW50IHJ1bgkgICAgICAgICAgICBSdW4gdGhlIGFwcGxpY2F0aW9uCisgICAgICAgIGFudCBydW4gICAgICAgICAgICAgICAgUnVuIHRoZSBhcHBsaWNhdGlvbgogICAgICAgICBhbnQgdW5kZXBsb3kgICAgICAgIFVuZGVwbG95IHRoZSBlYXIgZmlsZXMgZnJvbSBTMUFTCi0gICAgICAgIGFudCB1c2FnZSAgICAgICAgICAgRGlzcGxheSB0aGlzIG1lc3NhZ2UgICAgICAgICAgICAKKyAgICAgICAgYW50IHVzYWdlICAgICAgICAgICBEaXNwbGF5IHRoaXMgbWVzc2FnZQogICAgIDwvZWNobz4KIDwvdGFyZ2V0PgogCkBAIC0xNjY5LDEzICsxNjY5LDEzIEBACiAKIDx0YXJnZXQgbmFtZT0icmVzdGFydC1pbnN0YW5jZSI+CiAgICAgPGVjaG8gbWVzc2FnZT0iUmVzdGFydGluZyByZW1vdGUgc2VydmVyIGluc3RhbmNlLHVudGlsIHRoaXMgZ2V0cyBmaXhlZCIvPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgPGFyZyBsaW5lPSJzdG9wLWluc3RhbmNlIi8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDwvZXhlYz4KICAgICA8c2xlZXAgc2Vjb25kcz0iMzAiLz4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgIDxhcmcgbGluZT0ic3RhcnQtaW5zdGFuY2UiLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CkBAIC0xNjk4LDcgKzE2OTgsNyBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0ic2V0dXBUaW1lciIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJlZSI+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICA8YXJnIGxpbmU9ImNyZWF0ZS1yZXNvdXJjZS1yZWYiLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0IHNlcnZlciIvPgpAQCAtMTcyNSwxMyArMTcyNSwxMyBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0idW5zZXR1cFRpbWVyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgaWY9ImVlIj4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgIDxhcmcgbGluZT0iZGVsZXRlLXJlc291cmNlLXJlZiIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgc2VydmVyIi8+CiAgICAgICAgIDxhcmcgbGluZT0iJHtqZGJjLnJlc291cmNlLm5hbWV9Ii8+CiAgICAgPC9leGVjPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgPGFyZyBsaW5lPSJ1bnNldCIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9LWNvbmZpZy5lamItY29udGFpbmVyLmVqYi10aW1lci1zZXJ2aWNlLnRpbWVyLWRhdGFzb3VyY2UiLz4KICAgICA8L2V4ZWM+CkBAIC0xOTI0LDcgKzE5MjQsNyBAQAogPCEtLSBUYXJnZXQgdG8gRmx1c2ggY29ubmVjdGlvbiBwb29sICAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0iZmx1c2gtY29ubnBvb2wtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci08ZWNobyBtZXNzYWdlPSJGbHVzaCBjb25uZWN0aW9uIHBvb2wgJHtqZGJjLmNvbnBvb2wubmFtZX0iIAorPGVjaG8gbWVzc2FnZT0iRmx1c2ggY29ubmVjdGlvbiBwb29sICR7amRiYy5jb25wb29sLm5hbWV9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgPGFyZyBsaW5lPSJmbHVzaC1jb25uZWN0aW9uLXBvb2wiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtd2FiLXdpdGgtY2RpL3NlcnZsZXQvdGVzdHMvY2RpL1Rlc3RCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLXdhYi13aXRoLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9UZXN0QmVhbi5qYXZhCmluZGV4IGZhZDY4OTYuLjliY2M4NGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtd2FiLXdpdGgtY2RpL3NlcnZsZXQvdGVzdHMvY2RpL1Rlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS13YWItd2l0aC1jZGkvc2VydmxldC90ZXN0cy9jZGkvVGVzdEJlYW4uamF2YQpAQCAtMTYsNyArMTYsNyBAQAogCiBwYWNrYWdlIHRlc3RzLmNkaTsKIAotLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuIAorLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuCiAvL1RoaXMgYmVhbiBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSBhcyBpdCBuZWVkcyB0byBiZSBwbGFjZWQgaW50byBhIFN0YXRlZnVsIEJlYW4KIHB1YmxpYyBjbGFzcyBUZXN0QmVhbgoge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtd2FiLXdpdGgtY2RpL3NlcnZsZXQvdGVzdHMvY2RpL1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLXdhYi13aXRoLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9UZXN0U2VydmxldC5qYXZhCmluZGV4IDE3N2Y4MzAuLjZkNTUyN2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtd2FiLXdpdGgtY2RpL3NlcnZsZXQvdGVzdHMvY2RpL1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS13YWItd2l0aC1jZGkvc2VydmxldC90ZXN0cy9jZGkvVGVzdFNlcnZsZXQuamF2YQpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgbXNnICs9ICJCZWFuTWFuYWdlciBJbmplY3Rpb24gdmlhIGNvbXBvbmVudCBlbnZpcm9ubWVudCBsb29rdXAgZmFpbGVkIjsKICAgICAgICAgfQogICAgICAgICBpZiAoYm0xID09IG51bGwpIG1zZyArPSAiQmVhbk1hbmFnZXIgSW5qZWN0aW9uIHZpYSBjb21wb25lbnQgZW52aXJvbm1lbnQgbG9va3VwIGZhaWxlZCI7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVhbk1hbmFnZXIgaXMgIiArIGJtKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWFuTWFuYWdlciB2aWEgbG9va3VwIGlzICIgKyBibTEpOwogICAgICAgICB3cml0ZXIud3JpdGUobXNnICsgIlxuIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2luZ2xldG9uLXN0YXJ0dXAvaGVsbG8vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW5nbGV0b24tc3RhcnR1cC9oZWxsby9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk4MmMzNDQuLjBlZGI2ZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW5nbGV0b24tc3RhcnR1cC9oZWxsby9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW5nbGV0b24tc3RhcnR1cC9oZWxsby9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMyArMTUsMTMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaS1zaW5nbGV0b24taGVsbG8iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJiZWFucy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2JlYW5zLnhtbCIvPgotCQorCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW5nbGV0b24tc3RhcnR1cC9oZWxsby9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2luZ2xldG9uLXN0YXJ0dXAvaGVsbG8vYnVpbGQueG1sCmluZGV4IGQyOTI1MGQuLjg1YmVkYTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW5nbGV0b24tc3RhcnR1cC9oZWxsby9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbmdsZXRvbi1zdGFydHVwL2hlbGxvL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTIgKzQ2LDEyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iY29tL2FjbWUvKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01OSw5ICs1OSw5IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvYXBwc2Vydi1ydC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTcyLDcgKzcyLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW5nbGV0b24tc3RhcnR1cC9oZWxsby9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2luZ2xldG9uLXN0YXJ0dXAvaGVsbG8vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDkzM2VkYmIuLjMyYWY3MDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW5nbGV0b24tc3RhcnR1cC9oZWxsby9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbmdsZXRvbi1zdGFydHVwL2hlbGxvL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzEsMTcgKzMxLDE3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCi0JYXBwTmFtZSA9IGFyZ3NbMF07IAotCXN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7Ci0JQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7ICAgICAgIAotICAgICAgICBjbGllbnQuZG9UZXN0KCk7CQorICAgIGFwcE5hbWUgPSBhcmdzWzBdOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7CisgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CisgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwogICAgIH0KIApAQCAtNDksMzcgKzQ5LDM3IEBACiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKLQl0cnkgeworICAgIHRyeSB7CiAKLQkgICAgLy8gRW5zdXJlIHRoYXQgTUVKQiBpcyByZWdpc3RlcmVkIHVuZGVyIGFsbCB0aHJlZSBvZiBpdHMgSk5ESSBuYW1lcwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgTUVKQiBIb21lcyIpOwotCSAgICBNYW5hZ2VtZW50SG9tZSBtaDFPYmogPSAoTWFuYWdlbWVudEhvbWUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiZWpiL21nbXQvTUVKQiIpOwotCSAgICBNYW5hZ2VtZW50SG9tZSBtaDJPYmogPSAoTWFuYWdlbWVudEhvbWUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvbWVqYi9NRUpCQmVhbiIpOwotCSAgICBNYW5hZ2VtZW50SG9tZSBtaDNPYmogPSAoTWFuYWdlbWVudEhvbWUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvbWVqYi9NRUpCQmVhbiFqYXZheC5tYW5hZ2VtZW50LmoyZWUuTWFuYWdlbWVudEhvbWUiKTsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgTUVKQiBpcyByZWdpc3RlcmVkIHVuZGVyIGFsbCB0aHJlZSBvZiBpdHMgSk5ESSBuYW1lcworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgTUVKQiBIb21lcyIpOworICAgICAgICBNYW5hZ2VtZW50SG9tZSBtaDFPYmogPSAoTWFuYWdlbWVudEhvbWUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiZWpiL21nbXQvTUVKQiIpOworICAgICAgICBNYW5hZ2VtZW50SG9tZSBtaDJPYmogPSAoTWFuYWdlbWVudEhvbWUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvbWVqYi9NRUpCQmVhbiIpOworICAgICAgICBNYW5hZ2VtZW50SG9tZSBtaDNPYmogPSAoTWFuYWdlbWVudEhvbWUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvbWVqYi9NRUpCQmVhbiFqYXZheC5tYW5hZ2VtZW50LmoyZWUuTWFuYWdlbWVudEhvbWUiKTsKICAgICAgICAgYWRkU3RhdHVzKCJtZWpiIHJlbGF0aXZlIGxvb2t1cCIsIChtaDFPYmogIT0gbnVsbCkpOwogICAgICAgICBhZGRTdGF0dXMoIm1lamIgZ2xvYmFsIGxvb2t1cCIsIChtaDJPYmogIT0gbnVsbCkpOwogICAgICAgICBhZGRTdGF0dXMoIm1lamIgZ2xvYmFsIGxvb2t1cCB3aXRoIGV4cGxpY2l0IE1hbmFnZWRIb21lIGludGVyZmFjZSIsIChtaDNPYmogIT0gbnVsbCkpOwogCi0JICAgIEhlbGxvIGhlbGxvID0gKEhlbGxvKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9TaW5nbGV0b25CZWFuIik7CisgICAgICAgIEhlbGxvIGhlbGxvID0gKEhlbGxvKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9TaW5nbGV0b25CZWFuIik7CiAgICAgICAgIFN0cmluZyByZXNwb25zZSA9IGhlbGxvLmhlbGxvKCk7CiAgICAgICAgIGFkZFN0YXR1cygiU2luZ2xldG9uIGJlYW4gcmVzcG9uc2UiLCByZXNwb25zZS5lcXVhbHMoImhlbGxvLCB3b3JsZCFcbiIpKTsKIAotCSAgICB0cnkgewotICAgIAkJaGVsbG8udGVzdEVycm9yKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBoZWxsby50ZXN0RXJyb3IoKTsKICAgICAgICAgICAgIGFkZFN0YXR1cygiRXhwZWN0ZWQgRUpCRXhjZXB0aW9uIGZyb20gU2luZ2xldG9uLnRlc3RFcnJvcigpIiwgZmFsc2UpOwotCSAgICAJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkV4cGVjdGVkIEVKQkV4Y2VwdGlvbiIpOwotCSAgICB9IGNhdGNoKEVKQkV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRXhwZWN0ZWQgRUpCRXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2goRUpCRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGFkZFN0YXR1cygiRXhwZWN0ZWQgRUpCRXhjZXB0aW9uIGZyb20gU2luZ2xldG9uLnRlc3RFcnJvcigpIiwgdHJ1ZSk7Ci0JICAgIH0KKyAgICAgICAgfQogCiAgICAgICAgIFN0cmluZyBpbmplY3Rpb25TdGF0dXMgPSBoZWxsby50ZXN0SW5qZWN0aW9uKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5qZWN0aW9uIHRlc3RzIGluIHNlcnZlciByZXNwb25zZSIrIGluamVjdGlvblN0YXR1cyk7CiAgICAgICAgIGFkZFN0YXR1cygiVGVzdGluZyBJbmplY3Rpb24gaW4gRUpCIFNpbmdsZXRvbiIgLCBpbmplY3Rpb25TdGF0dXMudHJpbSgpLmVxdWFscygiIikpOwogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRElEX05PVF9SVU4pOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5ESURfTk9UX1JVTik7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBhZGRTdGF0dXMoU3RyaW5nIG1lc3NhZ2UsIGJvb2xlYW4gcmVzdWx0KXsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW5nbGV0b24tc3RhcnR1cC9oZWxsby9lamIvY29tL2FjbWUvRm9vLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2luZ2xldG9uLXN0YXJ0dXAvaGVsbG8vZWpiL2NvbS9hY21lL0Zvby5qYXZhCmluZGV4IDQ1NDY5NzYuLjM1YTlkMjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW5nbGV0b24tc3RhcnR1cC9oZWxsby9lamIvY29tL2FjbWUvRm9vLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbmdsZXRvbi1zdGFydHVwL2hlbGxvL2VqYi9jb20vYWNtZS9Gb28uamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiAgICAgQEVKQiBIZWxsbyBoZWxsbzsKICAgICBAamFrYXJ0YS5pbmplY3QuSW5qZWN0IFRlc3RCZWFuIHRiOwotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdEluamVjdGlvbigpewogICAgICAgICByZXR1cm4gdGIgIT0gbnVsbDsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2luZ2xldG9uLXN0YXJ0dXAvaGVsbG8vZWpiL2NvbS9hY21lL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW5nbGV0b24tc3RhcnR1cC9oZWxsby9lamIvY29tL2FjbWUvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IGE3NTRmZWMuLjJkMTkxNjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW5nbGV0b24tc3RhcnR1cC9oZWxsby9lamIvY29tL2FjbWUvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW5nbGV0b24tc3RhcnR1cC9oZWxsby9lamIvY29tL2FjbWUvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC0zNyw5ICszNyw5IEBACiAgICAgRm9vIGZvbzsKICAgICBASW5qZWN0CiAgICAgVGVzdEJlYW4gdGI7Ci0gICAgCisKICAgICBCYXIgYjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwdWJsaWMgU2luZ2xldG9uQmVhbihCYXIgYil7CiAgICAgICAgIHRoaXMuYiA9IGI7CkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgIGlmICghZm9vLnRlc3RJbmplY3Rpb24oKSkKICAgICAgICAgICAgIHJldHVybiAidGVzdEluamVjdGlvbiBpbiBGb28gZmFpbGVkIjsKICAgICAgICAgaWYgKGIgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiAiQ29uc3RydWN0b3IgSW5qZWN0aW9uIG9mIGJlYW4gZmFpbGVkIjsgCisgICAgICAgICAgICByZXR1cm4gIkNvbnN0cnVjdG9yIEluamVjdGlvbiBvZiBiZWFuIGZhaWxlZCI7CiAgICAgICAgIHJldHVybiAiIjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zbGY0ai12aXNpYmlsaXR5L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zbGY0ai12aXNpYmlsaXR5L1dlYlRlc3QuamF2YQppbmRleCA1MTE4MDZmLi4wYmNhMmMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2xmNGotdmlzaWJpbGl0eS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NsZjRqLXZpc2liaWxpdHkvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEBXZWJTZXJ2bGV0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTAsNyArNTAsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNjAsNyArNjAsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtOTksMTEgKzk5LDExIEBACiAgICAgICAgICAgICBpZiAoaXNFeHBlY3RlZFJlc3BvbnNlKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogb3JnLmpib3NzLmxvZ2dpbmcuSkRLTG9nZ2VyIGFuZCBvcmcuamJvc3MubG9nZ2luZy5qYm9zcy1sb2dnaW5nIGluIG91dHB1dCIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogb3JnLmpib3NzLmxvZ2dpbmcuSkRLTG9nZ2VyIGFuZCBvcmcuamJvc3MubG9nZ2luZy5qYm9zcy1sb2dnaW5nIGluIG91dHB1dCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiBpc0V4cGVjdGVkUmVzcG9uc2UoU3RyaW5nIGxpbmUpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zbGY0ai12aXNpYmlsaXR5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2xmNGotdmlzaWJpbGl0eS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDE0NDY3ZmQuLmM5YTlkZGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zbGY0ai12aXNpYmlsaXR5L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NsZjRqLXZpc2liaWxpdHkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zbGY0ai12aXNpYmlsaXR5Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2xmNGotdmlzaWJpbGl0eS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2xmNGotdmlzaWJpbGl0eS9idWlsZC54bWwKaW5kZXggODNhZDY2Ni4uMDY5MTIxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NsZjRqLXZpc2liaWxpdHkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zbGY0ai12aXNpYmlsaXR5L2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMyArNDcsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2xmNGotdmlzaWJpbGl0eS9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2xmNGotdmlzaWJpbGl0eS9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEKaW5kZXggNmQwNTllMi4uYzQzNjM5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NsZjRqLXZpc2liaWxpdHkvc2VydmxldC9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zbGY0ai12aXNpYmlsaXR5L3NlcnZsZXQvVGVzdEJlYW4uamF2YQpAQCAtMTQsNyArMTQsNyBAQAogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAgKi8KIAotLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuIAorLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuCiAvL1RoaXMgYmVhbiBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSBhcyBpdCBuZWVkcyB0byBiZSBwbGFjZWQgaW50byBhIFN0YXRlZnVsIEJlYW4KIHB1YmxpYyBjbGFzcyBUZXN0QmVhbgoge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zbGY0ai12aXNpYmlsaXR5L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zbGY0ai12aXNpYmlsaXR5L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQppbmRleCBmZmM0MDliLi4zMWVjM2IwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2xmNGotdmlzaWJpbGl0eS9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NsZjRqLXZpc2liaWxpdHkvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCkBAIC01MiwxNSArNTIsMTUgQEAKICAgICAgICAgfQogICAgICAgICBpZiAoYm0xID09IG51bGwpIG1zZyArPSAiQmVhbk1hbmFnZXIgSW5qZWN0aW9uIHZpYSBjb21wb25lbnQgZW52aXJvbm1lbnQgbG9va3VwIGZhaWxlZCI7CiAKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWFuTWFuYWdlciBpcyAiICsgYm0pOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlYW5NYW5hZ2VyIHZpYSBsb29rdXAgaXMgIiArIGJtMSk7Ci0gICAgICAgIAorCiAgICAgICAgIExvZ2dlciBsID0gTG9nZ2VyLmdldExvZ2dlcihnZXRDbGFzcygpKTsKICAgICAgICAgU3RyaW5nIHMgPSAiWyBIZWxsbyBXb3JsZCBpcyBsb2dnZWQgYnkgYW4gaW5zdGFuY2Ugb2YgIiArIGwuZ2V0Q2xhc3MoKSArICIsIHdoaWNoIGlzIGxvYWRlZCBieSAiICsgbC5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkgKyAiXSI7CiAgICAgICAgIG1zZyArPSBzOwogICAgICAgICBsLmluZm8ocyk7Ci0gICAgICAgIAorCiAgICAgICAgIHdyaXRlci53cml0ZShtc2cgKyAiXG4iKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9hbHRlcm5hdGl2ZS1sZWFrcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDgyNTA2ODIuLjI0ZTQ3NjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9hbHRlcm5hdGl2ZS1sZWFrcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9hbHRlcm5hdGl2ZS1sZWFrcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNwZWNpYWxpemF0aW9uLWxlYWstYWx0ZXJuYXRpdmVzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2FsdGVybmF0aXZlLWxlYWtzL2J1aWxkLnhtbAppbmRleCAwYjliM2EzLi4wYTFmMmY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9hbHRlcm5hdGl2ZS1sZWFrcy9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwyMyArNDgsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9hbHRlcm5hdGl2ZS1sZWFrcy9kZXNjcmlwdG9yL2JlYW5zLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9hbHRlcm5hdGl2ZS1sZWFrcy9kZXNjcmlwdG9yL2JlYW5zLnhtbAppbmRleCAxY2Q5NmMzLi4xZjI0ZjE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3MvZGVzY3JpcHRvci9iZWFucy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2FsdGVybmF0aXZlLWxlYWtzL2Rlc2NyaXB0b3IvYmVhbnMueG1sCkBAIC0yOSw1ICsyOSw1IEBACiAgICA8YWx0ZXJuYXRpdmVzPgogICAgPHN0ZXJlb3R5cGU+dGVzdC5iZWFucy5hcnRpZmFjdHMuTW9ja1N0ZXJlb3R5cGU8L3N0ZXJlb3R5cGU+CiAgICA8L2FsdGVybmF0aXZlcz4KLSAgIAorCiA8L2JlYW5zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2FsdGVybmF0aXZlLWxlYWtzL3NlcnZsZXQvdGVzdC9iZWFucy9hcnRpZmFjdHMvUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3Mvc2VydmxldC90ZXN0L2JlYW5zL2FydGlmYWN0cy9SZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQppbmRleCAxYmU1ZDExLi4zOTY4OTEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3Mvc2VydmxldC90ZXN0L2JlYW5zL2FydGlmYWN0cy9SZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3Mvc2VydmxldC90ZXN0L2JlYW5zL2FydGlmYWN0cy9SZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQpAQCAtMzAsMTAgKzMwLDEwIEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZXJyb3JNZXNzYWdlID0gIiI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdERlcGVuZGVudEJlYW4gdGI7Ci0gICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBtYW5hZ2VUcmFuc2FjdGlvbihJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvcjo6QXJvdW5kSW52b2tlIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3Mvc2VydmxldC90ZXN0L2JlYW5zL2FydGlmYWN0cy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3Mvc2VydmxldC90ZXN0L2JlYW5zL2FydGlmYWN0cy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKaW5kZXggODliNzQzYS4uZjVkYTE0YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2FsdGVybmF0aXZlLWxlYWtzL3NlcnZsZXQvdGVzdC9iZWFucy9hcnRpZmFjdHMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9hbHRlcm5hdGl2ZS1sZWFrcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvYXJ0aWZhY3RzL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQpAQCAtMjksMTUgKzI5LDE1IEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZXJyb3JNZXNzYWdlID0gIiI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdERlcGVuZGVudEJlYW4gdGI7Ci0gICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBtYW5hZ2VUcmFuc2FjdGlvbihJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRyYW5zYWN0aW9uSW50ZXJjZXB0b3I6OkFyb3VuZEludm9rZSIpOwogICAgICAgICBpZiAodGIgPT0gbnVsbCkgZXJyb3JNZXNzYWdlPSJEZXBlbmRlbmN5IEluamVjdGlvbiAiICsKLSAgICAgICAgCQkiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CisgICAgICAgICAgICAgICAgImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOwogICAgICAgICBhcm91bmRJbnZva2VDYWxsZWQgPSB0cnVlOwogICAgICAgICBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgKys7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2FsdGVybmF0aXZlLWxlYWtzL3NlcnZsZXQvdGVzdC9iZWFucy9tb2NrL01vY2tTaG9wcGluZ0NhcnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9hbHRlcm5hdGl2ZS1sZWFrcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvbW9jay9Nb2NrU2hvcHBpbmdDYXJ0LmphdmEKaW5kZXggZmQ2MDEzOC4uNmQ5N2RjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2FsdGVybmF0aXZlLWxlYWtzL3NlcnZsZXQvdGVzdC9iZWFucy9tb2NrL01vY2tTaG9wcGluZ0NhcnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3Mvc2VydmxldC90ZXN0L2JlYW5zL21vY2svTW9ja1Nob3BwaW5nQ2FydC5qYXZhCkBAIC0yNywxMSArMjcsMTEgQEAKIAogcHVibGljIGNsYXNzIE1vY2tTaG9wcGluZ0NhcnQgIGV4dGVuZHMgU2hvcHBpbmdDYXJ0ewogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBtb2NrU2hvcHBpbmdDYXJ0SW52b2tlZCA9IGZhbHNlOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWRkSXRlbShTdHJpbmcgcykgewogICAgICAgICBtb2NrU2hvcHBpbmdDYXJ0SW52b2tlZCA9IHRydWU7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTW9ja1Nob3BwaW5nQ2FydDo6YWRkSXRlbSBjYWxsZWQiKTsKLSAgICAgICAgCisKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9hbHRlcm5hdGl2ZS1sZWFrcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9TaG9wcGluZ0NhcnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9hbHRlcm5hdGl2ZS1sZWFrcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9TaG9wcGluZ0NhcnQuamF2YQppbmRleCA1NDA4NzU4Li5kZmY2ZTMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3Mvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svU2hvcHBpbmdDYXJ0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2FsdGVybmF0aXZlLWxlYWtzL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Nob3BwaW5nQ2FydC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgcHVibGljIHZvaWQgYWRkSXRlbShTdHJpbmcgcykgewogICAgICAgICBzaG9wcGluZ0NhcnRJbnZva2VkID0gdHJ1ZTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTaG9wcGluZ0NhcnQ6OmFkZEl0ZW0gY2FsbGVkIik7Ci0gICAgICAgIAorCiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3Mvc2VydmxldC90ZXN0L3NlcnZsZXQvTGVha1F1YWxpZmllclRlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3Mvc2VydmxldC90ZXN0L3NlcnZsZXQvTGVha1F1YWxpZmllclRlc3RTZXJ2bGV0LmphdmEKaW5kZXggNTE5Mjk5ZS4uMWJmYWRhZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2FsdGVybmF0aXZlLWxlYWtzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0xlYWtRdWFsaWZpZXJUZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9hbHRlcm5hdGl2ZS1sZWFrcy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9MZWFrUXVhbGlmaWVyVGVzdFNlcnZsZXQuamF2YQpAQCAtNDIsMTEgKzQyLDExIEBACiAgICAgQEluamVjdAogICAgIEBQcmVmZXJyZWQKICAgICBUZXN0QmVhbkludGVyZmFjZSB0YjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBATGVha1F1YWxpZmllcgogICAgIFRlc3RCZWFuSW50ZXJmYWNlIHRiX2xlYWs7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgQFByZWZlcnJlZAogICAgIFNob3BwaW5nQ2FydCBzYzsKQEAgLTczLDE5ICs3MywxOSBAQAogICAgICAgICAgICAgICAgICAgICArIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50OwogICAgICAgICBpZiAoIVRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlLnRyaW0oKS5lcXVhbHMoIiIpKQogICAgICAgICAgICAgbXNnICs9IFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlOwotICAgICAgICAKKwogICAgICAgICBpZiAoUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiUmVxdWlyZXNOZXcgVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBjYWxsZWQgd2hlbiAiICsKLSAgICAgICAgICAgIAkJIml0IHNob3VsZG4ndCBoYXZlIGJlZW4gY2FsbGVkIjsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICJpdCBzaG91bGRuJ3QgaGF2ZSBiZWVuIGNhbGxlZCI7CisKICAgICAgICAgLy90ZXN0IHRoYXQgdGhlIG1vY2tzIGFyZSBjYWxsZWQgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIGJlYW5zCiAgICAgICAgIGlmIChUZXN0QmVhbi50ZXN0QmVhbkludm9rZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlRlc3QgQmVhbiBpbnZva2VkIHdoZW4gYWN0dWFsbHkgbW9jayBiZWFuIHNob3VsZCAiICsKLSAgICAgICAgICAgIAkJImhhdmUgYmVlbiBpbnZva2VkIjsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICJoYXZlIGJlZW4gaW52b2tlZCI7CisKICAgICAgICAgaWYgKCFNb2NrQmVhbi5tb2NrQmVhbkludm9rZWQpCiAgICAgICAgICAgICBtc2cgKz0gIk1vY2sgYmVhbiBub3QgaW52b2tlZCI7Ci0gICAgICAgIAorCiAgICAgICAgIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuY2xlYXIoKTsKICAgICAgICAgLy9pbnZva2Ugc2hvcHBpbmcgY2FydCBiZWFuLiBTaG9wcGluZ0NhcnQgYmVhbiB1c2VzIGEgU3RlcmVvdHlwZSB0bwogICAgICAgICAvL2Fzc2lnbiB0aGUgcmVxdWlyZXMgbmV3IHRyYW5zYWN0aW9uIGludGVyY2VwdG9yCkBAIC05NCwyOCArOTQsMjggQEAKICAgICAgICAgc2MuYWRkSXRlbSgiVGVzdCBJdGVtIik7CiAgICAgICAgIGlmICghUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiQnVzaW5lc3MgbWV0aG9kIGludGVyY2VwdG9yIGFyb3VuZEludm9rZSBpbiByZXF1aXJlcyBuZXcgIiArCi0gICAgICAgICAgICAJCSJ0cmFuc2FjdGlvbiBpbnRlcmNlcHRvciBub3QgY2FsbGVkIjsKKyAgICAgICAgICAgICAgICAgICAgInRyYW5zYWN0aW9uIGludGVyY2VwdG9yIG5vdCBjYWxsZWQiOwogICAgICAgICBpZiAoUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCAhPSAxKQogICAgICAgICAgICAgbXNnICs9ICJCdXNpbmVzcyBtZXRob2QgcmVxdWlyZXMgbmV3IGludGVyY2VwdG9yIGludm9jYXRpb24gb24gIiArCi0gICAgICAgICAgICAJCSJtZXRob2QtbGV2ZWwgaW50ZXJjZXB0b3IgYW5ub3RhdGlvbiBjb3VudCBub3QgZXhwZWN0ZWQuICIKKyAgICAgICAgICAgICAgICAgICAgIm1ldGhvZC1sZXZlbCBpbnRlcmNlcHRvciBhbm5vdGF0aW9uIGNvdW50IG5vdCBleHBlY3RlZC4gIgogICAgICAgICAgICAgICAgICAgICArICJleHBlY3RlZCA9MSwgYWN0dWFsPSIKICAgICAgICAgICAgICAgICAgICAgKyBSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50OwogICAgICAgICBpZiAoIVJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2UudHJpbSgpLmVxdWFscygiIikpCiAgICAgICAgICAgICBtc2cgKz0gUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmVycm9yTWVzc2FnZTsKLSAgICAgICAgCisKICAgICAgICAgLy9UcmFuc2FjdGlvbkludGVyY2VwdG9yIHNob3VsZCBub3QgYmUgY2FsbGVkCiAgICAgICAgIGlmIChUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiVHJhbnNjYXRpb25JbnRlcmNlcHRvciBhcm91bmRJbnZva2UgY2FsbGVkIHdoZW4gYSByZXF1aXJlc25ldyIgKwotICAgICAgICAgICAgCQkidHJhbnNhY3Rpb24gaW50ZXJjZXB0b3Igc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQiOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgInRyYW5zYWN0aW9uIGludGVyY2VwdG9yIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIjsKKwogICAgICAgICAvL3Rlc3QgdGhhdCB0aGUgbW9ja3MgYXJlIGNhbGxlZCBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgYmVhbnMKICAgICAgICAgaWYgKFNob3BwaW5nQ2FydC5zaG9wcGluZ0NhcnRJbnZva2VkKQogICAgICAgICAgICAgbXNnICs9ICJUZXN0IHNob3BwaW5nIGNhcnQgaW52b2tlZCB3aGVuIGFjdHVhbGx5IG1vY2sgc2hvcHBpbmcgY2FydCAiICsKLSAgICAgICAgICAgIAkJInNob3VsZCBoYXZlIGJlZW4gaW52b2tlZCI7Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGhhdmUgYmVlbiBpbnZva2VkIjsKKwogICAgICAgICBpZiAoIU1vY2tTaG9wcGluZ0NhcnQubW9ja1Nob3BwaW5nQ2FydEludm9rZWQpCiAgICAgICAgICAgICBtc2cgKz0gIk1vY2sgc2hvcHBpbmcgY2FydCBub3QgaW52b2tlZCI7Ci0gICAgICAgIAorCiAgICAgICAgIC8vdGVzdCBBbm90aGVyVGVzdEJlYW5XaXRoTGVha1F1YWxpZmllciB3YXMgaW5qZWN0ZWQgZm9yIExlYWtRdWFsaWZpZXIuCiAgICAgICAgIC8vVGhlcmUgYXJlIG5vIG1vY2tzIGZvciBhIExlYWtRdWFsaWZpZXIgYW5ub3RhdGVkIGJlYW4gYW5kIHNvCiAgICAgICAgIC8vdGhlIGFjdHVhbCBub24tbW9jayBBbm90aGVyVGVzdEJlYW5XaXRoTGVha1F1YWxpZmllciBpcyBpbmplY3RlZApAQCAtMTIzLDEwICsxMjMsMTAgQEAKICAgICAgICAgLy9hbmQgaXMgb3ZlcmNvbWUgYnkgdXNpbmcgU3BlY2lhbGl6ZXMKICAgICAgICAgaWYgKHRiX2xlYWsgPT0gbnVsbCkKICAgICAgICAgICAgIG1zZyArPSAibGVhayBiZWFuIHdhcyBub3QgaW5qZWN0ZWQiOwotICAgICAgICAKKwogICAgICAgICBpZiAoISh0Yl9sZWFrIGluc3RhbmNlb2YgQW5vdGhlclRlc3RCZWFuV2l0aExlYWtRdWFsaWZpZXIpKQogICAgICAgICAgICAgbXNnICs9ICJsZWFrIGJlYW4gaXMgbm90IGFuIGluc3RhbmNlIG9mIEFub3RoZXJUZXN0QmVhbldpdGhMZWFrUXVhbGlmaWVyIjsKLSAgICAgICAgCisKIAogICAgICAgICB3cml0ZXIud3JpdGUobXNnICsgIlxuIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9idWlsZC54bWwKaW5kZXggZjdhMmIyNy4uOWE3OTg4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYnVpbGQueG1sCkBAIC04MywxNSArODMsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPiBVc2FnZToKLQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBzcGVjaWFsaXphdGlvbiB0ZXN0cykKLQkJYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBzcGVjaWFsaXphdGlvbiB0ZXN0cykKLQkJYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBzcGVjaWFsaXphdGlvbiB0ZXN0cykKLQkJYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIHNwZWNpYWxpemF0aW9uIHRlc3RzKQotCQlhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgc3BlY2lhbGl6YXRpb24gYXBwcykKLQkJYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBzcGVjaWFsaXphdGlvbiB0ZXN0cykKLQkJYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgc3BlY2lhbGl6YXRpb24gYXBwcykKLQkJYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBzcGVjaWFsaXphdGlvbiB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+IFVzYWdlOgorICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIHNwZWNpYWxpemF0aW9uIHRlc3RzKQorICAgICAgICBhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIHNwZWNpYWxpemF0aW9uIHRlc3RzKQorICAgICAgICBhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIHNwZWNpYWxpemF0aW9uIHRlc3RzKQorICAgICAgICBhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3Igc3BlY2lhbGl6YXRpb24gdGVzdHMpCisgICAgICAgIGFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBzcGVjaWFsaXphdGlvbiBhcHBzKQorICAgICAgICBhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIHNwZWNpYWxpemF0aW9uIHRlc3RzKQorICAgICAgICBhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBzcGVjaWFsaXphdGlvbiBhcHBzKQorICAgICAgICBhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIHNwZWNpYWxpemF0aW9uIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvYnVpbGQucHJvcGVydGllcwppbmRleCA5YTAyZTE0Li5hZDY4YmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNpbXBsZS1zcGVjaWFsaXphdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL2J1aWxkLnhtbAppbmRleCAwYjliM2EzLi4wYTFmMmY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDIzICs0OCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9kZXNjcmlwdG9yL2JlYW5zLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvZGVzY3JpcHRvci9iZWFucy54bWwKaW5kZXggMWNkOTZjMy4uMWYyNGYxNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9kZXNjcmlwdG9yL2JlYW5zLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL2Rlc2NyaXB0b3IvYmVhbnMueG1sCkBAIC0yOSw1ICsyOSw1IEBACiAgICA8YWx0ZXJuYXRpdmVzPgogICAgPHN0ZXJlb3R5cGU+dGVzdC5iZWFucy5hcnRpZmFjdHMuTW9ja1N0ZXJlb3R5cGU8L3N0ZXJlb3R5cGU+CiAgICA8L2FsdGVybmF0aXZlcz4KLSAgIAorCiA8L2JlYW5zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvYXJ0aWZhY3RzL1JlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvYXJ0aWZhY3RzL1JlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCmluZGV4IDFiZTVkMTEuLjM5Njg5MTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvc2VydmxldC90ZXN0L2JlYW5zL2FydGlmYWN0cy9SZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL3NlcnZsZXQvdGVzdC9iZWFucy9hcnRpZmFjdHMvUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKQEAgLTMwLDEwICszMCwxMCBAQAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKICAgICBwdWJsaWMgc3RhdGljIGludCBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgPSAwOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGVycm9yTWVzc2FnZSA9ICIiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3REZXBlbmRlbnRCZWFuIHRiOwotICAgIAorCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgbWFuYWdlVHJhbnNhY3Rpb24oSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3I6OkFyb3VuZEludm9rZSIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvYXJ0aWZhY3RzL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvc2VydmxldC90ZXN0L2JlYW5zL2FydGlmYWN0cy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKaW5kZXggODliNzQzYS4uZjVkYTE0YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvYXJ0aWZhY3RzL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL3NlcnZsZXQvdGVzdC9iZWFucy9hcnRpZmFjdHMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCkBAIC0yOSwxNSArMjksMTUgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0RGVwZW5kZW50QmVhbiB0YjsKLSAgICAKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IG1hbmFnZVRyYW5zYWN0aW9uKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVHJhbnNhY3Rpb25JbnRlcmNlcHRvcjo6QXJvdW5kSW52b2tlIik7CiAgICAgICAgIGlmICh0YiA9PSBudWxsKSBlcnJvck1lc3NhZ2U9IkRlcGVuZGVuY3kgSW5qZWN0aW9uICIgKwotICAgICAgICAJCSJpbnRvIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgZmFpbGVkIjsKKyAgICAgICAgICAgICAgICAiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CiAgICAgICAgIGFyb3VuZEludm9rZUNhbGxlZCA9IHRydWU7CiAgICAgICAgIGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCArKzsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL3NlcnZsZXQvdGVzdC9iZWFucy9tb2NrL01vY2tBbm90aGVyUXVhbGlmaWVyUHJvZHVjZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvc2VydmxldC90ZXN0L2JlYW5zL21vY2svTW9ja0Fub3RoZXJRdWFsaWZpZXJQcm9kdWNlci5qYXZhCmluZGV4IGVhNWQ5ZGMuLjkxYjEzOWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvc2VydmxldC90ZXN0L2JlYW5zL21vY2svTW9ja0Fub3RoZXJRdWFsaWZpZXJQcm9kdWNlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvc2VydmxldC90ZXN0L2JlYW5zL21vY2svTW9ja0Fub3RoZXJRdWFsaWZpZXJQcm9kdWNlci5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiAKIHB1YmxpYyBjbGFzcyBNb2NrQW5vdGhlclF1YWxpZmllclByb2R1Y2VyIGV4dGVuZHMgQW5vdGhlclF1YWxpZmllclByb2R1Y2VyewogICAgIEBQcm9kdWNlcyBAU3BlY2lhbGl6ZXMKLSAgICAvL1dlIGRvbid0IHNwZWNpZnkgQW5vdGhlclF1YWxpZmllciBoZXJlLiBJdCBpcyBpbmhlcml0ZWQgZnJvbSAKKyAgICAvL1dlIGRvbid0IHNwZWNpZnkgQW5vdGhlclF1YWxpZmllciBoZXJlLiBJdCBpcyBpbmhlcml0ZWQgZnJvbQogICAgIC8vQW5vdGhlclF1YWxpZmllclByb2R1Y2VyLmdldFRlc3RCZWFuV2l0aEFub3RoZXJRdWFsaWZpZXIKICAgICAvL2JlY2F1c2Ugb2YgdGhlIEBTcGVjaWFsaXplcyBhbm5vdGF0aW9uCiAgICAgcHJvdGVjdGVkIFRlc3RCZWFuSW50ZXJmYWNlIGdldFRlc3RCZWFuV2l0aEFub3RoZXJRdWFsaWZpZXIoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL3NlcnZsZXQvdGVzdC9iZWFucy9tb2NrL01vY2tTaG9wcGluZ0NhcnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvc2VydmxldC90ZXN0L2JlYW5zL21vY2svTW9ja1Nob3BwaW5nQ2FydC5qYXZhCmluZGV4IGQ5MGI4NzQuLmM4YWFmMGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvc2VydmxldC90ZXN0L2JlYW5zL21vY2svTW9ja1Nob3BwaW5nQ2FydC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvc2VydmxldC90ZXN0L2JlYW5zL21vY2svTW9ja1Nob3BwaW5nQ2FydC5qYXZhCkBAIC0yNywxNyArMjcsMTcgQEAKIEBTcGVjaWFsaXplcwogQFRyYW5zYWN0aW9uYWwocmVxdWlyZXNOZXc9dHJ1ZSkKIC8vVGhpcyBhbHRlcm5hdGl2ZSAodmlhIE1vY2tTdGVyZW90eXBlKSBkb2VzIG5vdCBzcGVjaWZ5IFByZWZlcnJlZAotLy9xdWFsaWZpZXIsIGJ1dCBzaW5jZSBpdCBzcGVjaWFsaXplcyBTaG9wcGluZ0NhcnQsIGl0IAorLy9xdWFsaWZpZXIsIGJ1dCBzaW5jZSBpdCBzcGVjaWFsaXplcyBTaG9wcGluZ0NhcnQsIGl0CiAvL2dldHMgU2hvcHBpbmdDYXJ0J3MgcXVhbGlmZXJzIGV0YwogLy9JbnRlcmNlcHRvcnMgYXJlIG5vdCBpbmhlcml0ZWQgYW5kIHNvIHdlIG5lZWQgdG8gc3BlY2lmeSBUcmFuc2FjdGlvbmFsCiAvL2V4cGxpY2l0bHkKIHB1YmxpYyBjbGFzcyBNb2NrU2hvcHBpbmdDYXJ0ICBleHRlbmRzIFNob3BwaW5nQ2FydHsKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gbW9ja1Nob3BwaW5nQ2FydEludm9rZWQgPSBmYWxzZTsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFkZEl0ZW0oU3RyaW5nIHMpIHsKICAgICAgICAgbW9ja1Nob3BwaW5nQ2FydEludm9rZWQgPSB0cnVlOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1vY2tTaG9wcGluZ0NhcnQ6OmFkZEl0ZW0gY2FsbGVkIik7Ci0gICAgICAgIAorCiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL3NlcnZsZXQvdGVzdC9iZWFucy9tb2NrL01vY2tUZXN0QmVhbkZvckFub3RoZXJRdWFsaWZpZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvc2VydmxldC90ZXN0L2JlYW5zL21vY2svTW9ja1Rlc3RCZWFuRm9yQW5vdGhlclF1YWxpZmllci5qYXZhCmluZGV4IGQxY2E1ZmQuLmZiNGE2OGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvc2VydmxldC90ZXN0L2JlYW5zL21vY2svTW9ja1Rlc3RCZWFuRm9yQW5vdGhlclF1YWxpZmllci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvc2VydmxldC90ZXN0L2JlYW5zL21vY2svTW9ja1Rlc3RCZWFuRm9yQW5vdGhlclF1YWxpZmllci5qYXZhCkBAIC0zMCw2ICszMCw2IEBACiAgICAgcHVibGljIHZvaWQgbTIoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTW9ja0JlYW46Om0yIGNhbGxlZCIpOwogICAgIH0KLSAgICAKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Nob3BwaW5nQ2FydC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9TaG9wcGluZ0NhcnQuamF2YQppbmRleCA4ZWNmNTZmLi5lZTljMzA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Nob3BwaW5nQ2FydC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svU2hvcHBpbmdDYXJ0LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKICAgICBwdWJsaWMgdm9pZCBhZGRJdGVtKFN0cmluZyBzKSB7CiAgICAgICAgIHNob3BwaW5nQ2FydEludm9rZWQgPSB0cnVlOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNob3BwaW5nQ2FydDo6YWRkSXRlbSBjYWxsZWQiKTsKLSAgICAgICAgCisKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvc2VydmxldC90ZXN0L3NlcnZsZXQvU2ltcGxlU3BlY2lhbGl6YXRpb25UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9TaW1wbGVTcGVjaWFsaXphdGlvblRlc3RTZXJ2bGV0LmphdmEKaW5kZXggMzhkODM2ZC4uOTM4ZDc4NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9TaW1wbGVTcGVjaWFsaXphdGlvblRlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9TaW1wbGVTcGVjaWFsaXphdGlvblRlc3RTZXJ2bGV0LmphdmEKQEAgLTQzLDE1ICs0MywxNSBAQAogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgVGVzdEJlYW5JbnRlcmZhY2UgdGI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgQEFub3RoZXJRdWFsaWZpZXIKICAgICBUZXN0QmVhbkludGVyZmFjZSB0Yl9hbm90aGVyOwotICAgIAorCiAgICAgQEluamVjdAogICAgIEBQcmVmZXJyZWQKICAgICBTaG9wcGluZ0NhcnQgc2M7Ci0gICAgCisKIAogICAgIHB1YmxpYyB2b2lkIHNlcnZpY2UoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpAQCAtNzUsNjEgKzc1LDYxIEBACiAgICAgICAgICAgICAgICAgICAgICsgVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQ7CiAgICAgICAgIGlmICghVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2UudHJpbSgpLmVxdWFscygiIikpCiAgICAgICAgICAgICBtc2cgKz0gVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2U7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlQ2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJSZXF1aXJlc05ldyBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGNhbGxlZCB3aGVuICIgKwotICAgICAgICAgICAgCQkiaXQgc2hvdWxkbid0IGhhdmUgYmVlbiBjYWxsZWQiOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgIml0IHNob3VsZG4ndCBoYXZlIGJlZW4gY2FsbGVkIjsKKwogICAgICAgICBpZiAoVGVzdEJlYW4udGVzdEJlYW5JbnZva2VkKQogICAgICAgICAgICAgbXNnICs9ICJUZXN0IEJlYW4gaW52b2tlZCB3aGVuIGFjdHVhbGx5IG1vY2sgYmVhbiBzaG91bGQgIiArCi0gICAgICAgICAgICAJCSJoYXZlIGJlZW4gaW52b2tlZCI7Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAgICAiaGF2ZSBiZWVuIGludm9rZWQiOworCiAgICAgICAgIGlmICghTW9ja0JlYW4ubW9ja0JlYW5JbnZva2VkKQogICAgICAgICAgICAgbXNnICs9ICJNb2NrIGJlYW4gbm90IGludm9rZWQiOwotICAgICAgICAKKwogICAgICAgICBUcmFuc2FjdGlvbkludGVyY2VwdG9yLmNsZWFyKCk7CiAgICAgICAgIC8vaW52b2tlIHNob3BwaW5nIGNhcnQgYmVhbi4gU2hvcHBpbmdDYXJ0IGJlYW4gdXNlcyBhIFN0ZXJlb3R5cGUgdG8KICAgICAgICAgLy9hc3NpZ24gdGhlIHJlcXVpcmVzIG5ldyB0cmFuc2FjdGlvbiBpbnRlcmNlcHRvcgogICAgICAgICAvL1RoaXMgc2hvdWxkIHJlc3VsdCBpbiBhbiBpbnZvY2F0aW9uIG9uCiAgICAgICAgIC8vdGhlIFJlcXVpcmVzTmV3VHJhbnNhY3Rpb25hbAotICAgICAgICAKLSAgICAgICAgLy9jaGVjayB0aGF0IHRoZSBtb2NrIHNob3BwaW5nIGNhcnQgYmVhbiBpbmhlcml0cyB0aGUgcXVhbGlmaWVycyB3aGVuIHRoZSBhbHRlcm5hdGl2ZSAKLSAgICAgICAgLy9iZWFuIGV4dGVuZHMgdGhlIGFjdHVhbCBiZWFuIGFuZCB1c2VzIEBTcGVjaWFsaXplcyB0byBpbmhlcml0IHRoZSAKLSAgICAgICAgLy9RdWFsaWZpZXIgCi0gICAgICAgIAorCisgICAgICAgIC8vY2hlY2sgdGhhdCB0aGUgbW9jayBzaG9wcGluZyBjYXJ0IGJlYW4gaW5oZXJpdHMgdGhlIHF1YWxpZmllcnMgd2hlbiB0aGUgYWx0ZXJuYXRpdmUKKyAgICAgICAgLy9iZWFuIGV4dGVuZHMgdGhlIGFjdHVhbCBiZWFuIGFuZCB1c2VzIEBTcGVjaWFsaXplcyB0byBpbmhlcml0IHRoZQorICAgICAgICAvL1F1YWxpZmllcgorCiAgICAgICAgIHNjLmFkZEl0ZW0oIlRlc3QgSXRlbSIpOwogICAgICAgICBpZiAoIVJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIkJ1c2luZXNzIG1ldGhvZCBpbnRlcmNlcHRvciBhcm91bmRJbnZva2UgaW4gcmVxdWlyZXMgbmV3ICIgKwotICAgICAgICAgICAgCQkidHJhbnNhY3Rpb24gaW50ZXJjZXB0b3Igbm90IGNhbGxlZCI7CisgICAgICAgICAgICAgICAgICAgICJ0cmFuc2FjdGlvbiBpbnRlcmNlcHRvciBub3QgY2FsbGVkIjsKICAgICAgICAgaWYgKFJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgIT0gMSkKICAgICAgICAgICAgIG1zZyArPSAiQnVzaW5lc3MgbWV0aG9kIHJlcXVpcmVzIG5ldyBpbnRlcmNlcHRvciBpbnZvY2F0aW9uIG9uICIgKwotICAgICAgICAgICAgCQkibWV0aG9kLWxldmVsIGludGVyY2VwdG9yIGFubm90YXRpb24gY291bnQgbm90IGV4cGVjdGVkLiAiCisgICAgICAgICAgICAgICAgICAgICJtZXRob2QtbGV2ZWwgaW50ZXJjZXB0b3IgYW5ub3RhdGlvbiBjb3VudCBub3QgZXhwZWN0ZWQuICIKICAgICAgICAgICAgICAgICAgICAgKyAiZXhwZWN0ZWQgPTEsIGFjdHVhbD0iCiAgICAgICAgICAgICAgICAgICAgICsgUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudDsKICAgICAgICAgaWYgKCFSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlLnRyaW0oKS5lcXVhbHMoIiIpKQogICAgICAgICAgICAgbXNnICs9IFJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2U7Ci0gICAgICAgIAorCiAgICAgICAgIC8vVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBzaG91bGQgbm90IGJlIGNhbGxlZAogICAgICAgICBpZiAoVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlRyYW5zY2F0aW9uSW50ZXJjZXB0b3IgYXJvdW5kSW52b2tlIGNhbGxlZCB3aGVuIGEgcmVxdWlyZXNuZXciICsKLSAgICAgICAgICAgIAkJInRyYW5zYWN0aW9uIGludGVyY2VwdG9yIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIjsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICJ0cmFuc2FjdGlvbiBpbnRlcmNlcHRvciBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCI7CisKICAgICAgICAgLy90ZXN0IHRoYXQgdGhlIG1vY2tzIGFyZSBjYWxsZWQgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIGJlYW5zCiAgICAgICAgIGlmIChTaG9wcGluZ0NhcnQuc2hvcHBpbmdDYXJ0SW52b2tlZCkKICAgICAgICAgICAgIG1zZyArPSAiVGVzdCBzaG9wcGluZyBjYXJ0IGludm9rZWQgd2hlbiBhY3R1YWxseSBtb2NrIHNob3BwaW5nIGNhcnQgIiArCi0gICAgICAgICAgICAJCSJzaG91bGQgaGF2ZSBiZWVuIGludm9rZWQiOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgInNob3VsZCBoYXZlIGJlZW4gaW52b2tlZCI7CisKICAgICAgICAgaWYgKCFNb2NrU2hvcHBpbmdDYXJ0Lm1vY2tTaG9wcGluZ0NhcnRJbnZva2VkKQogICAgICAgICAgICAgbXNnICs9ICJNb2NrIHNob3BwaW5nIGNhcnQgbm90IGludm9rZWQiOwotICAgICAgICAKLSAgICAgICAgLy9jaGVjayB0aGF0IHRoZSBtb2NrIGJlYW4gaW5oZXJpdHMgdGhlIHF1YWxpZmllcnMgd2hlbiB0aGUgYmVhbiBpcyAKKworICAgICAgICAvL2NoZWNrIHRoYXQgdGhlIG1vY2sgYmVhbiBpbmhlcml0cyB0aGUgcXVhbGlmaWVycyB3aGVuIHRoZSBiZWFuIGlzCiAgICAgICAgIC8vcHJvZHVjZWQgdGhyb3VnaCBhIFNwZWNpYWxpemVzIHByb2R1Y2VyIG1ldGhvZAogICAgICAgICBpZiAodGJfYW5vdGhlciA9PSBudWxsKQogICAgICAgICAgICAgbXNnICs9ICIgYmVhbiB3aXRoIGFub3RoZXIgcXVhbGlmaWVyIHdhcyBub3QgaW5qZWN0ZWQiOwotICAgICAgICAKKwogICAgICAgICBpZiAoISh0Yl9hbm90aGVyIGluc3RhbmNlb2YgTW9ja1Rlc3RCZWFuRm9yQW5vdGhlclF1YWxpZmllcikpCiAgICAgICAgICAgICBtc2cgKz0gImJlYW4gd2l0aCBhbm90aGVyIHF1YWxpZmllciBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgVGVzdEJlYW5XaXRoQW5vdGhlclF1YWxpZmllciI7Ci0gICAgICAgIAorCiAKICAgICAgICAgd3JpdGVyLndyaXRlKG1zZyArICJcbiIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2FsdGVybmF0aXZlLXN0ZXJlb3R5cGVzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzM2NTJlZC4uYmQ1YWUyNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2FsdGVybmF0aXZlLXN0ZXJlb3R5cGVzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2FsdGVybmF0aXZlLXN0ZXJlb3R5cGVzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tYWx0ZXJuYXRpdmUtc3RlcmVvdHlwZXMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvYWx0ZXJuYXRpdmUtc3RlcmVvdHlwZXMvYnVpbGQueG1sCmluZGV4IDBiOWIzYTMuLjBhMWYyZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2FsdGVybmF0aXZlLXN0ZXJlb3R5cGVzL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDIzICs0OCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2FsdGVybmF0aXZlLXN0ZXJlb3R5cGVzL2Rlc2NyaXB0b3IvYmVhbnMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2FsdGVybmF0aXZlLXN0ZXJlb3R5cGVzL2Rlc2NyaXB0b3IvYmVhbnMueG1sCmluZGV4IDFjZDk2YzMuLjFmMjRmMTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9kZXNjcmlwdG9yL2JlYW5zLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvYWx0ZXJuYXRpdmUtc3RlcmVvdHlwZXMvZGVzY3JpcHRvci9iZWFucy54bWwKQEAgLTI5LDUgKzI5LDUgQEAKICAgIDxhbHRlcm5hdGl2ZXM+CiAgICA8c3RlcmVvdHlwZT50ZXN0LmJlYW5zLmFydGlmYWN0cy5Nb2NrU3RlcmVvdHlwZTwvc3RlcmVvdHlwZT4KICAgIDwvYWx0ZXJuYXRpdmVzPgotICAgCisKIDwvYmVhbnM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvYWx0ZXJuYXRpdmUtc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L2JlYW5zL2FydGlmYWN0cy9SZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvYXJ0aWZhY3RzL1JlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCmluZGV4IDFiZTVkMTEuLjM5Njg5MTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvYXJ0aWZhY3RzL1JlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvYXJ0aWZhY3RzL1JlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCkBAIC0zMCwxMCArMzAsMTAgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0RGVwZW5kZW50QmVhbiB0YjsKLSAgICAKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IG1hbmFnZVRyYW5zYWN0aW9uKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yOjpBcm91bmRJbnZva2UiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvYXJ0aWZhY3RzL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvYXJ0aWZhY3RzL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQppbmRleCA4OWI3NDNhLi5mNWRhMTRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvYWx0ZXJuYXRpdmUtc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L2JlYW5zL2FydGlmYWN0cy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2FsdGVybmF0aXZlLXN0ZXJlb3R5cGVzL3NlcnZsZXQvdGVzdC9iZWFucy9hcnRpZmFjdHMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCkBAIC0yOSwxNSArMjksMTUgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0RGVwZW5kZW50QmVhbiB0YjsKLSAgICAKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IG1hbmFnZVRyYW5zYWN0aW9uKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVHJhbnNhY3Rpb25JbnRlcmNlcHRvcjo6QXJvdW5kSW52b2tlIik7CiAgICAgICAgIGlmICh0YiA9PSBudWxsKSBlcnJvck1lc3NhZ2U9IkRlcGVuZGVuY3kgSW5qZWN0aW9uICIgKwotICAgICAgICAJCSJpbnRvIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgZmFpbGVkIjsKKyAgICAgICAgICAgICAgICAiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CiAgICAgICAgIGFyb3VuZEludm9rZUNhbGxlZCA9IHRydWU7CiAgICAgICAgIGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCArKzsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvYWx0ZXJuYXRpdmUtc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L2JlYW5zL21vY2svTW9ja1Nob3BwaW5nQ2FydC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2FsdGVybmF0aXZlLXN0ZXJlb3R5cGVzL3NlcnZsZXQvdGVzdC9iZWFucy9tb2NrL01vY2tTaG9wcGluZ0NhcnQuamF2YQppbmRleCBmZDYwMTM4Li42ZDk3ZGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvYWx0ZXJuYXRpdmUtc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L2JlYW5zL21vY2svTW9ja1Nob3BwaW5nQ2FydC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvbW9jay9Nb2NrU2hvcHBpbmdDYXJ0LmphdmEKQEAgLTI3LDExICsyNywxMSBAQAogCiBwdWJsaWMgY2xhc3MgTW9ja1Nob3BwaW5nQ2FydCAgZXh0ZW5kcyBTaG9wcGluZ0NhcnR7CiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIG1vY2tTaG9wcGluZ0NhcnRJbnZva2VkID0gZmFsc2U7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhZGRJdGVtKFN0cmluZyBzKSB7CiAgICAgICAgIG1vY2tTaG9wcGluZ0NhcnRJbnZva2VkID0gdHJ1ZTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNb2NrU2hvcHBpbmdDYXJ0OjphZGRJdGVtIGNhbGxlZCIpOwotICAgICAgICAKKwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2FsdGVybmF0aXZlLXN0ZXJlb3R5cGVzL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Nob3BwaW5nQ2FydC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2FsdGVybmF0aXZlLXN0ZXJlb3R5cGVzL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Nob3BwaW5nQ2FydC5qYXZhCmluZGV4IDU0MDg3NTguLmRmZjZlMzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9TaG9wcGluZ0NhcnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvYWx0ZXJuYXRpdmUtc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svU2hvcHBpbmdDYXJ0LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKICAgICBwdWJsaWMgdm9pZCBhZGRJdGVtKFN0cmluZyBzKSB7CiAgICAgICAgIHNob3BwaW5nQ2FydEludm9rZWQgPSB0cnVlOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNob3BwaW5nQ2FydDo6YWRkSXRlbSBjYWxsZWQiKTsKLSAgICAgICAgCisKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9BbHRlcm5hdGl2ZVN0ZXJlb3R5cGVzVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9BbHRlcm5hdGl2ZVN0ZXJlb3R5cGVzVGVzdFNlcnZsZXQuamF2YQppbmRleCBjYmVlN2Y1Li42YTlkN2RmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvYWx0ZXJuYXRpdmUtc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L3NlcnZsZXQvQWx0ZXJuYXRpdmVTdGVyZW90eXBlc1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2FsdGVybmF0aXZlLXN0ZXJlb3R5cGVzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0FsdGVybmF0aXZlU3RlcmVvdHlwZXNUZXN0U2VydmxldC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgQEluamVjdAogICAgIEBQcmVmZXJyZWQKICAgICBUZXN0QmVhbkludGVyZmFjZSB0YjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgU2hvcHBpbmdDYXJ0IHNjOwpAQCAtNjcsMTkgKzY3LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICsgVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQ7CiAgICAgICAgIGlmICghVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2UudHJpbSgpLmVxdWFscygiIikpCiAgICAgICAgICAgICBtc2cgKz0gVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2U7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlQ2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJSZXF1aXJlc05ldyBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGNhbGxlZCB3aGVuICIgKwotICAgICAgICAgICAgCQkiaXQgc2hvdWxkbid0IGhhdmUgYmVlbiBjYWxsZWQiOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgIml0IHNob3VsZG4ndCBoYXZlIGJlZW4gY2FsbGVkIjsKKwogICAgICAgICAvL3Rlc3QgdGhhdCB0aGUgbW9ja3MgYXJlIGNhbGxlZCBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgYmVhbnMKICAgICAgICAgaWYgKFRlc3RCZWFuLnRlc3RCZWFuSW52b2tlZCkKICAgICAgICAgICAgIG1zZyArPSAiVGVzdCBCZWFuIGludm9rZWQgd2hlbiBhY3R1YWxseSBtb2NrIGJlYW4gc2hvdWxkICIgKwotICAgICAgICAgICAgCQkiaGF2ZSBiZWVuIGludm9rZWQiOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgImhhdmUgYmVlbiBpbnZva2VkIjsKKwogICAgICAgICBpZiAoIU1vY2tCZWFuLm1vY2tCZWFuSW52b2tlZCkKICAgICAgICAgICAgIG1zZyArPSAiTW9jayBiZWFuIG5vdCBpbnZva2VkIjsKLSAgICAgICAgCisKICAgICAgICAgVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5jbGVhcigpOwogICAgICAgICAvL2ludm9rZSBzaG9wcGluZyBjYXJ0IGJlYW4uIFNob3BwaW5nQ2FydCBiZWFuIHVzZXMgYSBTdGVyZW90eXBlIHRvCiAgICAgICAgIC8vYXNzaWduIHRoZSByZXF1aXJlcyBuZXcgdHJhbnNhY3Rpb24gaW50ZXJjZXB0b3IKQEAgLTg4LDI1ICs4OCwyNSBAQAogICAgICAgICBzYy5hZGRJdGVtKCJUZXN0IEl0ZW0iKTsKICAgICAgICAgaWYgKCFSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlQ2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJCdXNpbmVzcyBtZXRob2QgaW50ZXJjZXB0b3IgYXJvdW5kSW52b2tlIGluIHJlcXVpcmVzIG5ldyAiICsKLSAgICAgICAgICAgIAkJInRyYW5zYWN0aW9uIGludGVyY2VwdG9yIG5vdCBjYWxsZWQiOworICAgICAgICAgICAgICAgICAgICAidHJhbnNhY3Rpb24gaW50ZXJjZXB0b3Igbm90IGNhbGxlZCI7CiAgICAgICAgIGlmIChSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ICE9IDEpCiAgICAgICAgICAgICBtc2cgKz0gIkJ1c2luZXNzIG1ldGhvZCByZXF1aXJlcyBuZXcgaW50ZXJjZXB0b3IgaW52b2NhdGlvbiBvbiAiICsKLSAgICAgICAgICAgIAkJIm1ldGhvZC1sZXZlbCBpbnRlcmNlcHRvciBhbm5vdGF0aW9uIGNvdW50IG5vdCBleHBlY3RlZC4gIgorICAgICAgICAgICAgICAgICAgICAibWV0aG9kLWxldmVsIGludGVyY2VwdG9yIGFubm90YXRpb24gY291bnQgbm90IGV4cGVjdGVkLiAiCiAgICAgICAgICAgICAgICAgICAgICsgImV4cGVjdGVkID0xLCBhY3R1YWw9IgogICAgICAgICAgICAgICAgICAgICArIFJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQ7CiAgICAgICAgIGlmICghUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmVycm9yTWVzc2FnZS50cmltKCkuZXF1YWxzKCIiKSkKICAgICAgICAgICAgIG1zZyArPSBSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlOwotICAgICAgICAKKwogICAgICAgICAvL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3Igc2hvdWxkIG5vdCBiZSBjYWxsZWQKICAgICAgICAgaWYgKFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlQ2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJUcmFuc2NhdGlvbkludGVyY2VwdG9yIGFyb3VuZEludm9rZSBjYWxsZWQgd2hlbiBhIHJlcXVpcmVzbmV3IiArCi0gICAgICAgICAgICAJCSJ0cmFuc2FjdGlvbiBpbnRlcmNlcHRvciBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCI7Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAgICAidHJhbnNhY3Rpb24gaW50ZXJjZXB0b3Igc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQiOworCiAgICAgICAgIC8vdGVzdCB0aGF0IHRoZSBtb2NrcyBhcmUgY2FsbGVkIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBiZWFucwogICAgICAgICBpZiAoU2hvcHBpbmdDYXJ0LnNob3BwaW5nQ2FydEludm9rZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlRlc3Qgc2hvcHBpbmcgY2FydCBpbnZva2VkIHdoZW4gYWN0dWFsbHkgbW9jayBzaG9wcGluZyBjYXJ0ICIgKwotICAgICAgICAgICAgCQkic2hvdWxkIGhhdmUgYmVlbiBpbnZva2VkIjsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICJzaG91bGQgaGF2ZSBiZWVuIGludm9rZWQiOworCiAgICAgICAgIGlmICghTW9ja1Nob3BwaW5nQ2FydC5tb2NrU2hvcHBpbmdDYXJ0SW52b2tlZCkKICAgICAgICAgICAgIG1zZyArPSAiTW9jayBzaG9wcGluZyBjYXJ0IG5vdCBpbnZva2VkIjsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9idWlsZC54bWwKaW5kZXggZTA2ZjhlNy4uOGY4ZGFmNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvYnVpbGQueG1sCkBAIC04NCwxNSArODQsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPiBVc2FnZToKLQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBzdGVyZW90eXBlcyB0ZXN0cykKLQkJYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBzdGVyZW90eXBlcyB0ZXN0cykKLQkJYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBzdGVyZW90eXBlcyB0ZXN0cykKLQkJYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIHN0ZXJlb3R5cGVzIHRlc3RzKQotCQlhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgc3RlcmVvdHlwZXMgYXBwcykKLQkJYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBzdGVyZW90eXBlcyB0ZXN0cykKLQkJYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgc3RlcmVvdHlwZXMgYXBwcykKLQkJYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBzdGVyZW90eXBlcyB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+IFVzYWdlOgorICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIHN0ZXJlb3R5cGVzIHRlc3RzKQorICAgICAgICBhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIHN0ZXJlb3R5cGVzIHRlc3RzKQorICAgICAgICBhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIHN0ZXJlb3R5cGVzIHRlc3RzKQorICAgICAgICBhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3Igc3RlcmVvdHlwZXMgdGVzdHMpCisgICAgICAgIGFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBzdGVyZW90eXBlcyBhcHBzKQorICAgICAgICBhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIHN0ZXJlb3R5cGVzIHRlc3RzKQorICAgICAgICBhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBzdGVyZW90eXBlcyBhcHBzKQorICAgICAgICBhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIHN0ZXJlb3R5cGVzIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9pbnRlcmNlcHRvci1iaW5kaW5ncy1mb3Itc3RlcmVvdHlwZXMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9pbnRlcmNlcHRvci1iaW5kaW5ncy1mb3Itc3RlcmVvdHlwZXMvYnVpbGQucHJvcGVydGllcwppbmRleCA2ZjdmODFjLi4wNzIxN2RjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvaW50ZXJjZXB0b3ItYmluZGluZ3MtZm9yLXN0ZXJlb3R5cGVzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2ludGVyY2VwdG9yLWJpbmRpbmdzLWZvci1zdGVyZW90eXBlcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWludGVyY2VwdG9yLWJpbmRpbmctZm9yLXN0ZXJlb3R5cGVzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvaW50ZXJjZXB0b3ItYmluZGluZ3MtZm9yLXN0ZXJlb3R5cGVzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9pbnRlcmNlcHRvci1iaW5kaW5ncy1mb3Itc3RlcmVvdHlwZXMvYnVpbGQueG1sCmluZGV4IDBiOWIzYTMuLjBhMWYyZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9pbnRlcmNlcHRvci1iaW5kaW5ncy1mb3Itc3RlcmVvdHlwZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9pbnRlcmNlcHRvci1iaW5kaW5ncy1mb3Itc3RlcmVvdHlwZXMvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDgsMjMgKzQ4LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvaW50ZXJjZXB0b3ItYmluZGluZ3MtZm9yLXN0ZXJlb3R5cGVzL2Rlc2NyaXB0b3IvYmVhbnMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2ludGVyY2VwdG9yLWJpbmRpbmdzLWZvci1zdGVyZW90eXBlcy9kZXNjcmlwdG9yL2JlYW5zLnhtbAppbmRleCA2ZTViNmEyLi43OTAwYzUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvaW50ZXJjZXB0b3ItYmluZGluZ3MtZm9yLXN0ZXJlb3R5cGVzL2Rlc2NyaXB0b3IvYmVhbnMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9pbnRlcmNlcHRvci1iaW5kaW5ncy1mb3Itc3RlcmVvdHlwZXMvZGVzY3JpcHRvci9iZWFucy54bWwKQEAgLTI2LDUgKzI2LDUgQEAKICAgICAgIDxjbGFzcz50ZXN0LmJlYW5zLlRyYW5zYWN0aW9uSW50ZXJjZXB0b3I8L2NsYXNzPgogICAgICAgPGNsYXNzPnRlc3QuYmVhbnMuUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yPC9jbGFzcz4KICAgIDwvaW50ZXJjZXB0b3JzPgotICAgCisKIDwvYmVhbnM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvaW50ZXJjZXB0b3ItYmluZGluZ3MtZm9yLXN0ZXJlb3R5cGVzL3NlcnZsZXQvdGVzdC9iZWFucy9SZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9pbnRlcmNlcHRvci1iaW5kaW5ncy1mb3Itc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L2JlYW5zL1JlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCmluZGV4IGU2MjZhMzcuLmMwMzA2MDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9pbnRlcmNlcHRvci1iaW5kaW5ncy1mb3Itc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L2JlYW5zL1JlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9pbnRlcmNlcHRvci1iaW5kaW5ncy1mb3Itc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L2JlYW5zL1JlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCkBAIC0yOCwxMCArMjgsMTAgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0RGVwZW5kZW50QmVhbiB0YjsKLSAgICAKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IG1hbmFnZVRyYW5zYWN0aW9uKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yOjpBcm91bmRJbnZva2UiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9pbnRlcmNlcHRvci1iaW5kaW5ncy1mb3Itc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L2JlYW5zL1Nob3BwaW5nQ2FydC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2ludGVyY2VwdG9yLWJpbmRpbmdzLWZvci1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvU2hvcHBpbmdDYXJ0LmphdmEKaW5kZXggNjE3NWZkNi4uZmNhMDJhYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2ludGVyY2VwdG9yLWJpbmRpbmdzLWZvci1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvU2hvcHBpbmdDYXJ0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2ludGVyY2VwdG9yLWJpbmRpbmdzLWZvci1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvU2hvcHBpbmdDYXJ0LmphdmEKQEAgLTIwLDEwICsyMCwxMCBAQAogQEFjdGlvblN0ZXJlb3R5cGUKIEBQcmVmZXJyZWQKIHB1YmxpYyBjbGFzcyBTaG9wcGluZ0NhcnQgIHsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFkZEl0ZW0oU3RyaW5nIHMpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTaG9wcGluZ0NhcnQ6OmFkZEl0ZW0gY2FsbGVkIik7Ci0gICAgICAgIAorCiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvaW50ZXJjZXB0b3ItYmluZGluZ3MtZm9yLXN0ZXJlb3R5cGVzL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvaW50ZXJjZXB0b3ItYmluZGluZ3MtZm9yLXN0ZXJlb3R5cGVzL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKaW5kZXggYWZkYzE1Ni4uZTFkMGQ1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2ludGVyY2VwdG9yLWJpbmRpbmdzLWZvci1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9pbnRlcmNlcHRvci1iaW5kaW5ncy1mb3Itc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQpAQCAtMjcsMTUgKzI3LDE1IEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZXJyb3JNZXNzYWdlID0gIiI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdERlcGVuZGVudEJlYW4gdGI7Ci0gICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBtYW5hZ2VUcmFuc2FjdGlvbihJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRyYW5zYWN0aW9uSW50ZXJjZXB0b3I6OkFyb3VuZEludm9rZSIpOwogICAgICAgICBpZiAodGIgPT0gbnVsbCkgZXJyb3JNZXNzYWdlPSJEZXBlbmRlbmN5IEluamVjdGlvbiAiICsKLSAgICAgICAgCQkiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CisgICAgICAgICAgICAgICAgImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOwogICAgICAgICBhcm91bmRJbnZva2VDYWxsZWQgPSB0cnVlOwogICAgICAgICBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgKys7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2ludGVyY2VwdG9yLWJpbmRpbmdzLWZvci1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9JbnRlcmNlcHRvckJpbmRpbmdzRm9yU3RlcmVvdHlwZXNUZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2ludGVyY2VwdG9yLWJpbmRpbmdzLWZvci1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9JbnRlcmNlcHRvckJpbmRpbmdzRm9yU3RlcmVvdHlwZXNUZXN0U2VydmxldC5qYXZhCmluZGV4IGI0NGU2MzEuLjAwZjZkM2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9pbnRlcmNlcHRvci1iaW5kaW5ncy1mb3Itc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L3NlcnZsZXQvSW50ZXJjZXB0b3JCaW5kaW5nc0ZvclN0ZXJlb3R5cGVzVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvaW50ZXJjZXB0b3ItYmluZGluZ3MtZm9yLXN0ZXJlb3R5cGVzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0ludGVyY2VwdG9yQmluZGluZ3NGb3JTdGVyZW90eXBlc1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICBASW5qZWN0CiAgICAgQFByZWZlcnJlZAogICAgIFRlc3RCZWFuIHRiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIEBQcmVmZXJyZWQKICAgICBTaG9wcGluZ0NhcnQgc2M7CkBAIC02NCwxMSArNjQsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgKyBUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudDsKICAgICAgICAgaWYgKCFUcmFuc2FjdGlvbkludGVyY2VwdG9yLmVycm9yTWVzc2FnZS50cmltKCkuZXF1YWxzKCIiKSkKICAgICAgICAgICAgIG1zZyArPSBUcmFuc2FjdGlvbkludGVyY2VwdG9yLmVycm9yTWVzc2FnZTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKFJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlJlcXVpcmVzTmV3IFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgY2FsbGVkIHdoZW4gIiArCi0gICAgICAgICAgICAJCSJpdCBzaG91bGRuJ3QgaGF2ZSBiZWVuIGNhbGxlZCI7Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAgICAiaXQgc2hvdWxkbid0IGhhdmUgYmVlbiBjYWxsZWQiOworCiAgICAgICAgIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuY2xlYXIoKTsKICAgICAgICAgLy9pbnZva2Ugc2hvcHBpbmcgY2FydCBiZWFuLiBTaG9wcGluZ0NhcnQgYmVhbiB1c2VzIGEgU3RlcmVvdHlwZSB0bwogICAgICAgICAvL2Fzc2lnbiB0aGUgcmVxdWlyZXMgbmV3IHRyYW5zYWN0aW9uIGludGVyY2VwdG9yCkBAIC03NywxOSArNzcsMTkgQEAKICAgICAgICAgc2MuYWRkSXRlbSgiVGVzdCBJdGVtIik7CiAgICAgICAgIGlmICghUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiQnVzaW5lc3MgbWV0aG9kIGludGVyY2VwdG9yIGFyb3VuZEludm9rZSBpbiByZXF1aXJlcyBuZXcgIiArCi0gICAgICAgICAgICAJCSJ0cmFuc2FjdGlvbiBpbnRlcmNlcHRvciBub3QgY2FsbGVkIjsKKyAgICAgICAgICAgICAgICAgICAgInRyYW5zYWN0aW9uIGludGVyY2VwdG9yIG5vdCBjYWxsZWQiOwogICAgICAgICBpZiAoUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCAhPSAxKQogICAgICAgICAgICAgbXNnICs9ICJCdXNpbmVzcyBtZXRob2QgcmVxdWlyZXMgbmV3IGludGVyY2VwdG9yIGludm9jYXRpb24gb24gIiArCi0gICAgICAgICAgICAJCSJtZXRob2QtbGV2ZWwgaW50ZXJjZXB0b3IgYW5ub3RhdGlvbiBjb3VudCBub3QgZXhwZWN0ZWQuICIKKyAgICAgICAgICAgICAgICAgICAgIm1ldGhvZC1sZXZlbCBpbnRlcmNlcHRvciBhbm5vdGF0aW9uIGNvdW50IG5vdCBleHBlY3RlZC4gIgogICAgICAgICAgICAgICAgICAgICArICJleHBlY3RlZCA9MSwgYWN0dWFsPSIKICAgICAgICAgICAgICAgICAgICAgKyBSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50OwogICAgICAgICBpZiAoIVJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2UudHJpbSgpLmVxdWFscygiIikpCiAgICAgICAgICAgICBtc2cgKz0gUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmVycm9yTWVzc2FnZTsKLSAgICAgICAgCisKICAgICAgICAgLy9UcmFuc2FjdGlvbkludGVyY2VwdG9yIHNob3VsZCBub3QgYmUgY2FsbGVkCiAgICAgICAgIGlmIChUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiVHJhbnNjYXRpb25JbnRlcmNlcHRvciBhcm91bmRJbnZva2UgY2FsbGVkIHdoZW4gYSByZXF1aXJlc25ldyIgKwotICAgICAgICAgICAgCQkidHJhbnNhY3Rpb24gaW50ZXJjZXB0b3Igc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQiOworICAgICAgICAgICAgICAgICAgICAidHJhbnNhY3Rpb24gaW50ZXJjZXB0b3Igc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQiOwogCiAgICAgICAgIHdyaXRlci53cml0ZShtc2cgKyAiXG4iKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvc3RlcmVvdHlwZS1zdGFja2luZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL3N0ZXJlb3R5cGUtc3RhY2tpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCBlOGU2MDA4Li4zZDI4MWM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvc3RlcmVvdHlwZS1zdGFja2luZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9zdGVyZW90eXBlLXN0YWNraW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc3RhY2tpbmctc3RlcmVvdHlwZXMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9zdGVyZW90eXBlLXN0YWNraW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9zdGVyZW90eXBlLXN0YWNraW5nL2J1aWxkLnhtbAppbmRleCAwYjliM2EzLi4wYTFmMmY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvc3RlcmVvdHlwZS1zdGFja2luZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL3N0ZXJlb3R5cGUtc3RhY2tpbmcvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDgsMjMgKzQ4LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvc3RlcmVvdHlwZS1zdGFja2luZy9zZXJ2bGV0L3Rlc3QvYmVhbnMvaW50ZXJjZXB0b3JzL1NlY3VyaXR5SW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9zdGVyZW90eXBlLXN0YWNraW5nL3NlcnZsZXQvdGVzdC9iZWFucy9pbnRlcmNlcHRvcnMvU2VjdXJpdHlJbnRlcmNlcHRvci5qYXZhCmluZGV4IDJhNmU1ODAuLjE5NjVjMjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9zdGVyZW90eXBlLXN0YWNraW5nL3NlcnZsZXQvdGVzdC9iZWFucy9pbnRlcmNlcHRvcnMvU2VjdXJpdHlJbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9zdGVyZW90eXBlLXN0YWNraW5nL3NlcnZsZXQvdGVzdC9iZWFucy9pbnRlcmNlcHRvcnMvU2VjdXJpdHlJbnRlcmNlcHRvci5qYXZhCkBAIC0yOSwxMCArMjksMTAgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0RGVwZW5kZW50QmVhbiB0YjsKLSAgICAKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IG1hbmFnZVRyYW5zYWN0aW9uKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VjdXJpdHlJbnRlcmNlcHRvcjo6QXJvdW5kSW52b2tlIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvc3RlcmVvdHlwZS1zdGFja2luZy9zZXJ2bGV0L3Rlc3QvYmVhbnMvaW50ZXJjZXB0b3JzL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9zdGVyZW90eXBlLXN0YWNraW5nL3NlcnZsZXQvdGVzdC9iZWFucy9pbnRlcmNlcHRvcnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCmluZGV4IDA4NjdiMjUuLmU3ZTAzNjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9zdGVyZW90eXBlLXN0YWNraW5nL3NlcnZsZXQvdGVzdC9iZWFucy9pbnRlcmNlcHRvcnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9zdGVyZW90eXBlLXN0YWNraW5nL3NlcnZsZXQvdGVzdC9iZWFucy9pbnRlcmNlcHRvcnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCkBAIC0yOSwxNSArMjksMTUgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0RGVwZW5kZW50QmVhbiB0YjsKLSAgICAKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IG1hbmFnZVRyYW5zYWN0aW9uKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVHJhbnNhY3Rpb25JbnRlcmNlcHRvcjo6QXJvdW5kSW52b2tlIik7CiAgICAgICAgIGlmICh0YiA9PSBudWxsKSBlcnJvck1lc3NhZ2U9IkRlcGVuZGVuY3kgSW5qZWN0aW9uICIgKwotICAgICAgICAJCSJpbnRvIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgZmFpbGVkIjsKKyAgICAgICAgICAgICAgICAiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CiAgICAgICAgIGFyb3VuZEludm9rZUNhbGxlZCA9IHRydWU7CiAgICAgICAgIGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCArKzsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvc3RlcmVvdHlwZS1zdGFja2luZy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9TdGVyZW90eXBlU3RhY2tpbmdUZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL3N0ZXJlb3R5cGUtc3RhY2tpbmcvc2VydmxldC90ZXN0L3NlcnZsZXQvU3RlcmVvdHlwZVN0YWNraW5nVGVzdFNlcnZsZXQuamF2YQppbmRleCAzZTY2YjIzLi5iNWJjZjQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvc3RlcmVvdHlwZS1zdGFja2luZy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9TdGVyZW90eXBlU3RhY2tpbmdUZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9zdGVyZW90eXBlLXN0YWNraW5nL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1N0ZXJlb3R5cGVTdGFja2luZ1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgdGJfdHgubTIoKTsKICAgICAgICAgaWYgKFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ICE9IDIpCiAgICAgICAgICAgICBtc2cgKz0gIkJ1c2luZXNzIG1ldGhvZCBpbnRlcmNlcHRvciBbVHJhbnNhY3Rpb25JbnRlcmNlcHRvcl0gIiArCi0gICAgICAgICAgICAJCSJpbnZvY2F0aW9uIG9uIG1ldGhvZC1sZXZlbCAiCisgICAgICAgICAgICAgICAgICAgICJpbnZvY2F0aW9uIG9uIG1ldGhvZC1sZXZlbCAiCiAgICAgICAgICAgICAgICAgICAgICsgImludGVyY2VwdG9yIGFubm90YXRpb24gY291bnQgbm90IGV4cGVjdGVkLiAiCiAgICAgICAgICAgICAgICAgICAgICsgImV4cGVjdGVkID0yLCBhY3R1YWw9IgogICAgICAgICAgICAgICAgICAgICArIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50OwpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICAgICAgICAgICAgICArICJpdCBzaG91bGRuJ3QgaGF2ZSBiZWVuIGNhbGxlZCI7CiAKICAgICAgICAgY2xlYXJJbnRlcmNlcHRvcnMoKTsKLSAgICAgICAgCisKICAgICAgICAgLy9KdXN0IHNlY3VyaXR5IGludGVyY2VwdG9yCiAgICAgICAgIGlmICh0Yl9zZWMgPT0gbnVsbCkKICAgICAgICAgICAgIG1zZyArPSAiSW5qZWN0aW9uIG9mIEBzZWN1cmUgYmVhbiBmYWlsZWQiOwpAQCAtODcsNyArODcsNyBAQAogICAgICAgICB0Yl9zZWMubTIoKTsKICAgICAgICAgaWYgKFNlY3VyaXR5SW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ICE9IDIpCiAgICAgICAgICAgICBtc2cgKz0gIkJ1c2luZXNzIG1ldGhvZCBpbnRlcmNlcHRvciBpbnZvY2F0aW9uIFtTZWN1cml0eUludGVyY2VwdG9yXSIgKwotICAgICAgICAgICAgCQkib24gbWV0aG9kLWxldmVsICIKKyAgICAgICAgICAgICAgICAgICAgIm9uIG1ldGhvZC1sZXZlbCAiCiAgICAgICAgICAgICAgICAgICAgICsgImludGVyY2VwdG9yIGFubm90YXRpb24gY291bnQgbm90IGV4cGVjdGVkLiAiCiAgICAgICAgICAgICAgICAgICAgICsgImV4cGVjdGVkID0yLCBhY3R1YWw9IgogICAgICAgICAgICAgICAgICAgICArIFNlY3VyaXR5SW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50OwpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgICAgICBtc2cgKz0gIkJ1c2luZXNzIG1ldGhvZCBpbnRlcmNlcHRvciBbU2VjdXJpdHkgSW50ZXJjZXB0b3JdIGFyb3VuZEludm9rZSBub3QgY2FsbGVkIjsKICAgICAgICAgaWYgKCFUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiQnVzaW5lc3MgbWV0aG9kIGludGVyY2VwdG9yIFtUcmFuc2FjdGlvbiBJbnRlcmNlcHRvcl0gYXJvdW5kSW52b2tlIG5vdCBjYWxsZWQiOwotICAgICAgICAKKwogICAgICAgICB0Yl90eF9zZWMubTIoKTsKICAgICAgICAgaWYgKFNlY3VyaXR5SW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ICE9IDIpCiAgICAgICAgICAgICBtc2cgKz0gIkJ1c2luZXNzIG1ldGhvZCBpbnRlcmNlcHRvciBpbnZvY2F0aW9uIFtTZWN1cml0eUludGVyY2VwdG9yXSIgKwpAQCAtMTIzLDcgKzEyMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICsgImludGVyY2VwdG9yIGFubm90YXRpb24gY291bnQgbm90IGV4cGVjdGVkLiAiCiAgICAgICAgICAgICAgICAgICAgICsgImV4cGVjdGVkID0yLCBhY3R1YWw9IgogICAgICAgICAgICAgICAgICAgICArIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50OwotICAgICAgICAKKwogICAgICAgICBpZiAoIVNlY3VyaXR5SW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlLnRyaW0oKS5lcXVhbHMoIiIpKQogICAgICAgICAgICAgbXNnICs9IFNlY3VyaXR5SW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlOwogICAgICAgICBpZiAoIVRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlLnRyaW0oKS5lcXVhbHMoIiIpKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3RyYW5zYWN0aW9ucy90cmFuc2FjdGlvbi1zY29wZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS90cmFuc2FjdGlvbnMvdHJhbnNhY3Rpb24tc2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzcxOWU0OS4uNDViYjFiMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3RyYW5zYWN0aW9ucy90cmFuc2FjdGlvbi1zY29wZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdHJhbnNhY3Rpb25zL3RyYW5zYWN0aW9uLXNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXRyYW5zYWN0aW9uLXNjb3BlZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3RyYW5zYWN0aW9ucy90cmFuc2FjdGlvbi1zY29wZWQvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS90cmFuc2FjdGlvbnMvdHJhbnNhY3Rpb24tc2NvcGVkL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKaW5kZXggNTJlMWM3NC4uM2YyY2UwMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3RyYW5zYWN0aW9ucy90cmFuc2FjdGlvbi1zY29wZWQvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdHJhbnNhY3Rpb25zL3RyYW5zYWN0aW9uLXNjb3BlZC9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJGdW5jdGlvbmFsIHRlc3QgZm9yIEBUcmFuc2FjdGlvblNjb3BlZCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU4LDcgKzU4LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290ICsgIi9UcmFuc2FjdGlvblNjb3BlZFRlc3RTZXJ2bGV0IjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIChuZXcgVVJMKHVybCkpLm9wZW5Db25uZWN0aW9uKCk7CkBAIC05OCw2ICs5OCw2IEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3VucHJveHlhYmxlLWRlcHMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3VucHJveHlhYmxlLWRlcHMvV2ViVGVzdC5qYXZhCmluZGV4IDNiOGMyNzcuLjIzMDhhNmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS91bnByb3h5YWJsZS1kZXBzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdW5wcm94eWFibGUtZGVwcy9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRlc3RpbmcgQWx0ZXJuYXRpdmVzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDYsNyArNDYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtNzAsNiArNzAsNiBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS91bnByb3h5YWJsZS1kZXBzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdW5wcm94eWFibGUtZGVwcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDMxN2IzNzIuLjk2ZjQyZWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS91bnByb3h5YWJsZS1kZXBzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3VucHJveHlhYmxlLWRlcHMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpLWFsdGVybmF0aXZlcyIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1hbm5vdGF0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdW5wcm94eWFibGUtZGVwcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdW5wcm94eWFibGUtZGVwcy9idWlsZC54bWwKaW5kZXggOWE0NDJkNi4uOTcyYWUwMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3VucHJveHlhYmxlLWRlcHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS91bnByb3h5YWJsZS1kZXBzL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMyArNDcsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgCSAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CisgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMiArNzUsMTIgQEAKICAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLTwhLS0gTm90aGluZyB0byB1bmRlcGx5IGhlcmUgYXMgdGhlIGRlcGxveW1lbnQgbXVzdCBmYWlsIGZvciB0aGlzIHRlc3QgCis8IS0tIE5vdGhpbmcgdG8gdW5kZXBseSBoZXJlIGFzIHRoZSBkZXBsb3ltZW50IG11c3QgZmFpbCBmb3IgdGhpcyB0ZXN0CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogLS0+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS91bnNhdGlzZmllZC1kZXBzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS91bnNhdGlzZmllZC1kZXBzL1dlYlRlc3QuamF2YQppbmRleCA5MjAxZGNiLi41ODYwYThhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdW5zYXRpc2ZpZWQtZGVwcy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Vuc2F0aXNmaWVkLWRlcHMvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUZXN0aW5nIFVuc2F0aXNmaWVkIGRlcGVuZGVuY2llcyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk2LDEwICs5NiwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Vuc2F0aXNmaWVkLWRlcHMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS91bnNhdGlzZmllZC1kZXBzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjQ0YTc0ZS4uZjJlYjM0NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Vuc2F0aXNmaWVkLWRlcHMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdW5zYXRpc2ZpZWQtZGVwcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGktdW5zYXRpc2ZpZWRkZXBzIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LWFubm90YXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS91bnNhdGlzZmllZC1kZXBzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS91bnNhdGlzZmllZC1kZXBzL2J1aWxkLnhtbAppbmRleCBjMGQ5MDRkLi44NzJmMzY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdW5zYXRpc2ZpZWQtZGVwcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Vuc2F0aXNmaWVkLWRlcHMvYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ3LDIzICs0NywyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc1LDEwICs3NSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS91bnNhdGlzZmllZC1kZXBzL3NlcnZsZXQvdGVzdC9hcnRpZmFjdHMvTW9ja1BheW1lbnRQcm9jZXNzb3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS91bnNhdGlzZmllZC1kZXBzL3NlcnZsZXQvdGVzdC9hcnRpZmFjdHMvTW9ja1BheW1lbnRQcm9jZXNzb3IuamF2YQppbmRleCA3NWNjNTJiLi40N2I1YmI1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdW5zYXRpc2ZpZWQtZGVwcy9zZXJ2bGV0L3Rlc3QvYXJ0aWZhY3RzL01vY2tQYXltZW50UHJvY2Vzc29yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Vuc2F0aXNmaWVkLWRlcHMvc2VydmxldC90ZXN0L2FydGlmYWN0cy9Nb2NrUGF5bWVudFByb2Nlc3Nvci5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYWthcnRhLmVudGVycHJpc2UuaW5qZWN0LkFsdGVybmF0aXZlOwogCi1AQWx0ZXJuYXRpdmUgCitAQWx0ZXJuYXRpdmUKIHB1YmxpYyBjbGFzcyBNb2NrUGF5bWVudFByb2Nlc3NvciBpbXBsZW1lbnRzIFBheW1lbnRQcm9jZXNzb3J7CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS91bnNhdGlzZmllZC1kZXBzL3NlcnZsZXQvdGVzdC9iZWFucy9CZWFuVG9UZXN0VW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS91bnNhdGlzZmllZC1kZXBzL3NlcnZsZXQvdGVzdC9iZWFucy9CZWFuVG9UZXN0VW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMuamF2YQppbmRleCAxMzczYzZiLi44OTI3N2MzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdW5zYXRpc2ZpZWQtZGVwcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvQmVhblRvVGVzdFVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Vuc2F0aXNmaWVkLWRlcHMvc2VydmxldC90ZXN0L2JlYW5zL0JlYW5Ub1Rlc3RVbnNhdGlzZmllZERlcGVuZGVuY2llcy5qYXZhCkBAIC00NCw2ICs0NCw2IEBACiAgICAgICAgICAgICAgICAgKyBudW1iZXJPZlBheW1lbnRQcm9jZXNzb3JzKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtb2NrIHBheW1lbnQgcHJvY3Nzb3I6IiArIHBwKTsKICAgICAgICAgcmV0dXJuIChudW1iZXJPZlBheW1lbnRQcm9jZXNzb3JzID09IDEpIC8vIE1vY2tQYXltZW50UHJvY2Vzc29yCi0gICAgICAgICAgICAgICAgJiYgKHBwIGluc3RhbmNlb2YgTW9ja1BheW1lbnRQcm9jZXNzb3IpOyAKKyAgICAgICAgICAgICAgICAmJiAocHAgaW5zdGFuY2VvZiBNb2NrUGF5bWVudFByb2Nlc3Nvcik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2x1c3Rlci90ZXN0LWJpZ2NsdXN0ZXIuc2ggYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbHVzdGVyL3Rlc3QtYmlnY2x1c3Rlci5zaAppbmRleCA0NDRhZDQ0Li5lYjk4N2IyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbHVzdGVyL3Rlc3QtYmlnY2x1c3Rlci5zaAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbHVzdGVyL3Rlc3QtYmlnY2x1c3Rlci5zaApAQCAtNDksOSArNDksOSBAQAogICAgICAgICAgICAgICQxIH4gL3NlcnZlcnMuc2VydmVyLi4qLnN5c3RlbS1wcm9wZXJ0eS5IVFRQX0xJU1RFTkVSX1BPUlQudmFsdWUvIHsgcG9ydFskMV0gPSAkMiB9CiAgICAgICAgICAgICAgJDEgfiAvc2VydmVyc1wuc2VydmVyXC5bXi5dKlwubmFtZSQvIHsgaW5hbWVbJDJdID0gJDIgfQogICAgICAgICAgICAgICQxIH4gL3NlcnZlcnNcLnNlcnZlclwuW14uXSpcLmNvbmZpZy1yZWYkLyB7IGNuYW1lWyQxXSA9ICQyIH0KLSAgICAgICAgICAgICBFTkQgeyAKKyAgICAgICAgICAgICBFTkQgewogICAgICAgICAgICAgICAgY2sgPSAiY29uZmlncy5jb25maWcuY2gxLWNvbmZpZy5zeXN0ZW0tcHJvcGVydHkuSFRUUF9MSVNURU5FUl9QT1JULnZhbHVlIjsKLSAgICAgICAgICAgICAgIGZvciAoaSBpbiBpbmFtZSkgeyAKKyAgICAgICAgICAgICAgIGZvciAoaSBpbiBpbmFtZSkgewogICAgICAgICAgICAgICAgICBpZiAoaSA9PSAic2VydmVyIikgY29udGludWU7CiAgICAgICAgICAgICAgICAgIGlmIChjbmFtZVsic2VydmVycy5zZXJ2ZXIuIiBpICIuY29uZmlnLXJlZiJdICE9ICJjaDEtY29uZmlnIikgY29udGludWU7CiAgICAgICAgICAgICAgICAgIGsgPSAic2VydmVycy5zZXJ2ZXIuIiBpICIuc3lzdGVtLXByb3BlcnR5LkhUVFBfTElTVEVORVJfUE9SVC52YWx1ZSI7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgICAgICAgICAgICAgIHByaW50ZiAiaHR0cDovLyVzOiVzLyVzXG4iLCBob3N0W2hrXSwgcG9ydFtrXSwgRU5WSVJPTlsidXJsIl0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9JyB8Ci0gICAgIHhhcmdzIC10IC1uIDEgLVAgMCB3Z2V0IC1xIC0tbm8tcHJveHkgLVAgJFRFU1RIT01FL2xvZ3MvJGlkIC14IAorICAgICB4YXJncyAtdCAtbiAxIC1QIDAgd2dldCAtcSAtLW5vLXByb3h5IC1QICRURVNUSE9NRS9sb2dzLyRpZCAteAogfQogCiBiZW5jaCgpIHsKQEAgLTg2LDcgKzg2LDcgQEAKICAgYmVuY2ggc3RvcC1kb21haW4gJERPTUFJTgogICBiZW5jaCBzdGFydC1kb21haW4gJERPTUFJTgogICBiZW5jaCByZXN0YXJ0LWRvbWFpbiAkRE9NQUlOCi0gIGdyZXAgJ3RpbWUgdG8gcGFyc2UgZG9tYWluLnhtbCcgJEdGSE9NRS9nbGFzc2Zpc2gvZG9tYWlucy8kRE9NQUlOL2xvZ3Mvc2VydmVyLmxvZyB8IAorICBncmVwICd0aW1lIHRvIHBhcnNlIGRvbWFpbi54bWwnICRHRkhPTUUvZ2xhc3NmaXNoL2RvbWFpbnMvJERPTUFJTi9sb2dzL3NlcnZlci5sb2cgfAogICAgIHNlZCAtZSAncy9eLipUb3RhbCAvLycgLWUgJ3MvfCNdLy8nIHwgdGFpbCAtMQogICBlY2hvICdzaXplIG9mIGRvbWFpbi54bWw6ICcgYGxzIC1sICRHRkhPTUUvZ2xhc3NmaXNoL2RvbWFpbnMvJERPTUFJTi9jb25maWcvZG9tYWluLnhtbCB8IGF3ayAneyBwcmludCAkNSB9J2AKICAgUElERklMRT0kVEVTVEhPTUUvZ2xhc3NmaXNoNi9nbGFzc2Zpc2gvZG9tYWlucy9kb21haW4xL2NvbmZpZy9waWQKQEAgLTEwMiw3ICsxMDIsNyBAQAogICB0aW1lIGFzYWRtaW4gZGVwbG95IC0tdGFyZ2V0IGNoMSAtLW5hbWUgaGVsbG8xICRURVNUSE9NRS9hcHBzL2hlbGxvd29ybGQtJHtzen0ud2FyCiAgIGVjaG8gInN0YXJ0aW5nIGluc3RhbmNlcyIKICAgdGltZSBhc2FkbWluIHN0YXJ0LWNsdXN0ZXIgY2gxCi0gIGJlbmNobWFya19jb21tYW5kcyAKKyAgYmVuY2htYXJrX2NvbW1hbmRzCiAgIGVjaG8gInVuZGVwbG95aW5nIGFwcCBmcm9tIHJ1bm5pbmcgY2x1c3RlciIKICAgdGltZSBhc2FkbWluIHVuZGVwbG95IC0tdGFyZ2V0IGNoMSBoZWxsbzEKICAgZWNobyAiZGVwbG95aW5nICRzeiBhcHAgdG8gcnVubmluZyBjbHVzdGVyIgpAQCAtMTMyLDcgKzEzMiw3IEBACiAgICAgICBlY2hvICJjcmVhdGUtbm9kZS1jb25maWcgLS1ub2RlaG9zdCBoJHtjfV8ke2l9IG4ke2N9XyR7aX0iCiAgICAgICBlY2hvICJjcmVhdGUtaW5zdGFuY2UgLS1jbHVzdGVyIGMkYyAtLW5vZGUgbiR7Y31fJHtpfSBpJHtjfV8ke2l9IgogICAgIGRvbmUKLSAgZG9uZSB8IGFzYWRtaW4gCisgIGRvbmUgfCBhc2FkbWluCiB9CiAKIGNyZWF0ZV9ob3N0ZWRfY2x1c3RlcnMoKSB7CkBAIC0xNTksNyArMTU5LDcgQEAKICAgICAgIGRvbmUKICAgICBkb25lCiAgICAgI2VjaG8gInNldCBjb25maWdzLmNvbmZpZy5jaCRjLWNvbmZpZy5keW5hbWljLXJlY29uZmlndXJhdGlvbi1lbmFibGVkPXRydWUiCi0gIGRvbmUgfCBhc2FkbWluIAorICBkb25lIHwgYXNhZG1pbgogfQogCiBjcmVhdGVfbG9jYWxfY2x1c3RlcnMoKSB7CkBAIC0xOTIsNyArMTkyLDcgQEAKIGNyZWF0ZV9ob3N0ZWRfbm9kZXMoKSB7CiAgIGVjaG8gQ3JlYXRpbmcgU1NIIG5vZGVzIGZyb20gdGhlIGhvc3RlZF9ub2RlcyBmaWxlIGZvciBkb21haW4gJERPTUFJTi4uLgogICBncmVwIC12ICdeIycgJFRFU1RIT01FL2hvc3RlZC1ub2RlcyB8Ci0gICAgYXdrICd7IHByaW50ZiAiY3JlYXRlLW5vZGUtc3NoIC0tbm9kZWhvc3QgJXMgLS1pbnN0YWxsZGlyICckSU5TVEFMTF9MT0MnL2dsYXNzZmlzaDYgLS1zc2h1c2VyICVzIG4tc3NoLSckRE9NQUlOJy0lZFxuIiwgJDIsICQxLCArK24gfScgfCAKKyAgICBhd2sgJ3sgcHJpbnRmICJjcmVhdGUtbm9kZS1zc2ggLS1ub2RlaG9zdCAlcyAtLWluc3RhbGxkaXIgJyRJTlNUQUxMX0xPQycvZ2xhc3NmaXNoNiAtLXNzaHVzZXIgJXMgbi1zc2gtJyRET01BSU4nLSVkXG4iLCAkMiwgJDEsICsrbiB9JyB8CiAgICAgYXNhZG1pbgogICBhc2FkbWluIGxpc3Qtbm9kZXMKIH0KQEAgLTIxMiw3ICsyMTIsNyBAQAogZGVsZXRlX2hvc3RlZF9ub2RlcygpIHsKICAgZWNobyBEZWxldGluZyBTU0ggbm9kZXMuLi4KICAgYXNhZG1pbiAtLXRlcnNlIGxpc3Qtbm9kZXMgfCBlZ3JlcCAtdiAnXlsgXHRdKiQnIHwgZ3JlcCBuLXNzaC0gfAotICAgIHhhcmdzIC1uIDEgZWNobyBkZWxldGUtbm9kZS1zc2ggfCAKKyAgICB4YXJncyAtbiAxIGVjaG8gZGVsZXRlLW5vZGUtc3NoIHwKICAgICBhc2FkbWluIHx8IHJldHVybiAxCiB9CiAKQEAgLTIzOSw3ICsyMzksNyBAQAogICBlY2hvIERlcGxveWluZyBhbiBhcHAgdG8gYWxsIGNsdXN0ZXJzIGFuZCBpbnN0YW5jZXMuLi4KICAgYXNhZG1pbiBkZXBsb3kgLS1uYW1lICRuYW1lICRmaWxlCiAgIGFzYWRtaW4gLS10ZXJzZSBsaXN0LWNsdXN0ZXJzIHwgZWdyZXAgLXYgJ15bIFx0XSokJyB8IGF3ayAne3ByaW50ICQxfScgfAotICB3aGlsZSByZWFkIGNuYW1lIAorICB3aGlsZSByZWFkIGNuYW1lCiAgIGRvCiAgICAgZWNobyAiY3JlYXRlLWFwcGxpY2F0aW9uLXJlZiAtLXRhcmdldCAkY25hbWUgJG5hbWUiCiAgIGRvbmUgfCBhc2FkbWluIHx8IHJldHVybiAxCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvU3VuUmFYbWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2J1aWxkLnhtbAppbmRleCBlNTZjZmYzLi5hMTY1ZWFlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvU3VuUmFYbWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9idWlsZC54bWwKQEAgLTM4LDcgKzM4LDcgQEAKICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0gICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPiAKKyAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvYnVpbGQucHJvcGVydGllcwppbmRleCBlN2E2MmU2Li4yMThhZTAwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvU3VuUmFYbWwvY2NpLWVtYmVkZGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2NjaS1lbWJlZGRlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNvbm5lY3RvciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJjY2libGFja2JveC5wYXRoIiB2YWx1ZT0iLi4vbGliL2NjaWJsYWNrYm94LXR4LmphciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZW1iZWRkZWQtY2NpIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1lbWJlZGRlZC1jY2kiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZGIudHlwZSIgdmFsdWU9InBvaW50YmFzZSIvPgpAQCAtMjksNSArMjksNSBAQAogPHByb3BlcnR5IG5hbWU9InN1bi1jbXAtZGJzY2hlbWEiIHZhbHVlPSJkZXNjcmlwdG9yL3NlY19iYW5rYWRtaW5fc2NoZW1hLmRic2NoZW1hIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InJhcm5hbWUiIHZhbHVlPSJjY2libGFja2JveC10eCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9InJhcm5hbWUiIHZhbHVlPSJjY2libGFja2JveC10eCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iamRiYy5kcml2ZXJzIiB2YWx1ZT0iY29tLnBvaW50YmFzZS5qZGJjLmpkYmNVbml2ZXJzYWxEcml2ZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2NjaS1lbWJlZGRlZC9idWlsZC54bWwKaW5kZXggZTkzMjg5My4uYTc2Njk4NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2NjaS1lbWJlZGRlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2NjaS1lbWJlZGRlZC9idWlsZC54bWwKQEAgLTMxLDcgKzMxLDcgQEAKICAgICZjb21tb25CdWlsZDsKICAgICZ0ZXN0UHJvcGVydGllczsKICAgICZydW47Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsc2V0dXAsZGVwbG95LHJ1bix1bmRlcGxveSx1bnNldHVwIi8+CiAgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJ1bix1bmRlcGxveSIvPgogCkBAIC04MCw3ICs4MCw3IEBACiAgICAgIDwvdGFyZ2V0PgogCiAgICAgPCEtLQotCUN1c3RvbSB0YXJnZXQgZm9yIGNvbXBpbGF0aW9uIHdpdGggbG9jYWwgbGlicmFyaWVzIGZvciBjb25uZWN0b3IKKyAgICBDdXN0b20gdGFyZ2V0IGZvciBjb21waWxhdGlvbiB3aXRoIGxvY2FsIGxpYnJhcmllcyBmb3IgY29ubmVjdG9yCiAgICAgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLWNjaSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KQEAgLTk2LDcgKzk2LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVtYmVkZGVkLWVhciIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVtYmVkZGVkLWVhciIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLWVtYmVkZGVkLWVqYiI+CkBAIC0xMjQsOSArMTI0LDkgQEAKICAgICAgICAgICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgICAgICAgICAgICAgICA8Y29weSBmaWxlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIgdG9maWxlPSIke2Fzc2VtYmxlLmRpcn0vYXBwbGljYXRpb24ueG1sIi8+CiAgICAgICAgICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KLQkJPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVtYmVkZGVkLWVqYiIvPgotCQk8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZW1iZWRkZWQtY2xpZW50Ii8+Ci0JCTxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1yYXIiLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVtYmVkZGVkLWVqYiIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZW1iZWRkZWQtY2xpZW50Ii8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1yYXIiLz4KICAgICAgICAgICAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIKICAgICAgICAgICAgICAgICAgICAgICAgIGFwcHhtbD0iJHthc3NlbWJsZS5kaXJ9L2FwcGxpY2F0aW9uLnhtbCI+CiAgICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgpAQCAtMTM5LDMwICsxMzksMzAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIAk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KKyAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgICAgICAgICAgICAgIDwhLS0KLQkJPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtcG9vbCI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXBvb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9InR4Lm1vZGUiIHZhbHVlPSJ0eCIvPgogICAgICAgICAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1yZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idHgubW9kZSIgdmFsdWU9InR4Ii8+CiAgICAgICAgICAgICAgICAgPC9hbnRjYWxsPgotCQktLT4KKyAgICAgICAgLS0+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KICAgICAgICAgICAgICAgICA8IS0tCi0JCTxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXJlc291cmNlIi8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXJlc291cmNlIi8+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtcG9vbCIvPgotCQktLT4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KKyAgICAgICAgLS0+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKIAotICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+ICAKLSAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPiAgIAotCTxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IkVtYmVkZGVkIi8+ICAgICAKLSAgICA8L2FudGNhbGw+ICAgCisgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgorICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IkVtYmVkZGVkIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CkBAIC0yMDksMTAgKzIwOSwxMCBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJhciI+Ci0JPGNvcHkgZmlsZT0iZGVzY3JpcHRvci9yYS54bWwiIHRvZmlsZT0iJHthc3NlbWJsZS5kaXJ9L3Jhci9NRVRBLUlORi9yYS54bWwiLz4KLQk8Y29weSBmaWxlPSJkZXNjcmlwdG9yL3N1bi1yYS54bWwiIHRvZmlsZT0iJHthc3NlbWJsZS5kaXJ9L3Jhci9NRVRBLUlORi9zdW4tcmEueG1sIi8+Ci0JPGNvcHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L3NxZXRlc3RzL2Nvbm5lY3Rvci9saWIvY2NpYmxhY2tib3gtdHguamFyIiB0b2ZpbGU9IiR7YXNzZW1ibGUuZGlyfS9yYXIvY2NpYmxhY2tib3gtdHguamFyIi8+Ci0JPHJlcGxhY2UgZmlsZT0iJHthc3NlbWJsZS5kaXJ9L3Jhci9NRVRBLUlORi9yYS54bWwiIHRva2VuPSJEQlVSTCIgdmFsdWU9IiR7ZGIudXJsfSIvPgorICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3IvcmEueG1sIiB0b2ZpbGU9IiR7YXNzZW1ibGUuZGlyfS9yYXIvTUVUQS1JTkYvcmEueG1sIi8+CisgICAgPGNvcHkgZmlsZT0iZGVzY3JpcHRvci9zdW4tcmEueG1sIiB0b2ZpbGU9IiR7YXNzZW1ibGUuZGlyfS9yYXIvTUVUQS1JTkYvc3VuLXJhLnhtbCIvPgorICAgIDxjb3B5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9zcWV0ZXN0cy9jb25uZWN0b3IvbGliL2NjaWJsYWNrYm94LXR4LmphciIgdG9maWxlPSIke2Fzc2VtYmxlLmRpcn0vcmFyL2NjaWJsYWNrYm94LXR4LmphciIvPgorICAgIDxyZXBsYWNlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9yYXIvTUVUQS1JTkYvcmEueG1sIiB0b2tlbj0iREJVUkwiIHZhbHVlPSIke2RiLnVybH0iLz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InBhY2thZ2UtcmFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC0yNjIsNSArMjYyLDUgQEAKICAgICAgICAgPC9leGVjPgogPC90YXJnZXQ+CiAKLSAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvY2xpZW50L0NvZmZlZUNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2NjaS1lbWJlZGRlZC9jbGllbnQvQ29mZmVlQ2xpZW50LmphdmEKaW5kZXggZDM1YTdiOC4uY2Y5NjRjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2NjaS1lbWJlZGRlZC9jbGllbnQvQ29mZmVlQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2NjaS1lbWJlZGRlZC9jbGllbnQvQ29mZmVlQ2xpZW50LmphdmEKQEAgLTMwLDE3ICszMCwxNyBAQAogICAgICAgIFN0cmluZyB0ZXN0SWQgPSAiSjJFRSBDb25uZWN0b3JzIDogRW1iZWRkZWQgQWRhcHRlciBUZXN0cyI7CiAgICAgICAgdHJ5IHsKIAotCSAgIGlmIChhcmdzLmxlbmd0aCA9PSAxKSB7Ci0JICAgICAgIHRlc3RJZCA9IGFyZ3NbMF07Ci0JICAgfQorICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgIHRlc3RJZCA9IGFyZ3NbMF07CisgICAgICAgfQogCiAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbih0ZXN0SWQgKyAiIDogQ29mZmVlQ2xpZW50IHN0YXJ0ZWQgaW4gbWFpbi4uLiIpOwotCSAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkoyRUUgQ29ubmVjdG9ycyAxLjU6IEVtYmVkZGVkIENDSSBBZGFwdGVyIHRlc3RzIik7CisgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiSjJFRSBDb25uZWN0b3JzIDEuNTogRW1iZWRkZWQgQ0NJIEFkYXB0ZXIgdGVzdHMiKTsKICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQ29mZmVlIik7CiAKLSAgICAgICAgICAgQ29mZmVlUmVtb3RlSG9tZSBob21lID0gCi0gICAgICAgICAgICAgICAoQ29mZmVlUmVtb3RlSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgQ29mZmVlUmVtb3RlSG9tZSBob21lID0KKyAgICAgICAgICAgICAgIChDb2ZmZWVSZW1vdGVIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29mZmVlUmVtb3RlSG9tZS5jbGFzcyk7CiAKICAgICAgICAgICAgQ29mZmVlUmVtb3RlIGNvZmZlZSA9IGhvbWUuY3JlYXRlKCk7CkBAIC01NSwyMyArNTUsMjMgQEAKIAogICAgICAgICAgICBpbnQgbmV3Q291bnQgPSBjb2ZmZWUuZ2V0Q29mZmVlQ291bnQoKTsKICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDb2ZmZWUgY291bnQgPSAiICsgbmV3Q291bnQpOwotCSAgIGlmIChjb3VudD09KG5ld0NvdW50LTMpKSB7Ci0JCXN0YXQuYWRkU3RhdHVzKCJDb25uZWN0b3I6Y2NpIENvbm5lY3RvciAiICsgdGVzdElkICsgIiByYXIgVGVzdCBzdGF0dXM6IixzdGF0LlBBU1MpOwotCSAgIH1lbHNlewotCQlzdGF0LmFkZFN0YXR1cygiQ29ubmVjdG9yOmNjaSBDb25uZWN0b3IgIiArIHRlc3RJZCArICIgcmFyIFRlc3Qgc3RhdHVzOiIsc3RhdC5GQUlMKTsKLQkgICB9CisgICAgICAgaWYgKGNvdW50PT0obmV3Q291bnQtMykpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkNvbm5lY3RvcjpjY2kgQ29ubmVjdG9yICIgKyB0ZXN0SWQgKyAiIHJhciBUZXN0IHN0YXR1czoiLHN0YXQuUEFTUyk7CisgICAgICAgfWVsc2V7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJDb25uZWN0b3I6Y2NpIENvbm5lY3RvciAiICsgdGVzdElkICsgIiByYXIgVGVzdCBzdGF0dXM6IixzdGF0LkZBSUwpOworICAgICAgIH0KIAogCiAKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gdW5leHBlY3RlZCBleGNlcHRpb24hIik7Ci0JICAgc3RhdC5hZGRTdGF0dXMoIkNvbm5lY3RvcjpDQ0kgQ29ubmVjdG9yICIgKyB0ZXN0SWQgKyAiIHJhciBUZXN0IHN0YXR1czoiLHN0YXQuRkFJTCk7CisgICAgICAgc3RhdC5hZGRTdGF0dXMoIkNvbm5lY3RvcjpDQ0kgQ29ubmVjdG9yICIgKyB0ZXN0SWQgKyAiIHJhciBUZXN0IHN0YXR1czoiLHN0YXQuRkFJTCk7CiAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgIH1maW5hbGx5ewotCSAgIC8vcHJpbnQgdGVzdCBzdW1tYXJ5Ci0JICAgc3RhdC5wcmludFN1bW1hcnkodGVzdElkKTsKKyAgICAgICAvL3ByaW50IHRlc3Qgc3VtbWFyeQorICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CiAgICAgICAgfQotICAgfSAKKyAgIH0KIAogCi19IAorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2NjaS1lbWJlZGRlZC9lamIvQ29mZmVlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2NjaS1lbWJlZGRlZC9lamIvQ29mZmVlQmVhbi5qYXZhCmluZGV4IGI0Y2NiN2MuLjk2NTRkN2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvZWpiL0NvZmZlZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvU3VuUmFYbWwvY2NpLWVtYmVkZGVkL2VqYi9Db2ZmZWVCZWFuLmphdmEKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgICAgIEluZGV4ZWRSZWNvcmQgaVJlYyA9IHJmLmNyZWF0ZUluZGV4ZWRSZWNvcmQoIklucHV0UmVjb3JkIik7CiAgICAgICAgICAgICBSZWNvcmQgb1JlYyA9IGl4LmV4ZWN1dGUoaVNwZWMsIGlSZWMpOwogICAgICAgICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSAoKEluZGV4ZWRSZWNvcmQpb1JlYykuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlKGl0ZXJhdG9yLmhhc05leHQoKSkgeyAgIAorICAgICAgICAgICAgd2hpbGUoaXRlcmF0b3IuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgT2JqZWN0IG9iaiA9IGl0ZXJhdG9yLm5leHQoKTsKICAgICAgICAgICAgICAgICBpZihvYmogaW5zdGFuY2VvZiBJbnRlZ2VyKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gKChJbnRlZ2VyKW9iaikuaW50VmFsdWUoKTsKQEAgLTk5LDExICs5OSwxMSBAQAogICAgIHByaXZhdGUgQ29ubmVjdGlvbiBnZXRDQ0lDb25uZWN0aW9uKCkgewogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IG51bGw7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIjw9PT09PT09PT09IElOIGdldCBjY2kgQ29ubmVjdGlvbiA9PT09PT09PT09PT4iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjw9PT09PT09PT09IElOIGdldCBjY2kgQ29ubmVjdGlvbiA9PT09PT09PT09PT4iKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbm5lY3Rpb25TcGVjIHNwZWMgPSBuZXcgQ2NpQ29ubmVjdGlvblNwZWMoIkRCVVNFUiIsICJEQlBBU1NXT1JEIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCI8PT09PT09PT09PSBDcmVhdGVkIElTcGVjID09PT09PT09PT09PiIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiQ0YgdmFsdWUgOiAiICsgY2YpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPD09PT09PT09PT0gQ3JlYXRlZCBJU3BlYyA9PT09PT09PT09PT4iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNGIHZhbHVlIDogIiArIGNmKTsKICAgICAgICAgICAgIGNvbiA9IGNmLmdldENvbm5lY3Rpb24oc3BlYyk7CiAgICAgICAgIH0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTEyMyw0ICsxMjMsNCBAQAogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogCi19IAorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2NjaS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2NjaS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGZhODY1NTYuLjBkNzUxNDIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2kvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvU3VuUmFYbWwvY2NpL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEyICsxNSwxMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY29ubmVjdG9yIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImNjaWJsYWNrYm94LnBhdGgiIHZhbHVlPSIuLi9saWIvY2NpYmxhY2tib3gtdHguamFyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImNvbm5lY3Rvci1jY2kiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iY29ubmVjdG9yLWNjaSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJkYi50eXBlIiB2YWx1ZT0icG9pbnRiYXNlIi8+CkBAIC0yOSw1ICsyOSw1IEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWNtcC1kYnNjaGVtYSIgdmFsdWU9ImRlc2NyaXB0b3Ivc2VjX2JhbmthZG1pbl9zY2hlbWEuZGJzY2hlbWEiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0icmFybmFtZSIgdmFsdWU9ImNjaWJsYWNrYm94LXR4Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0icmFybmFtZSIgdmFsdWU9ImNjaWJsYWNrYm94LXR4Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJqZGJjLmRyaXZlcnMiIHZhbHVlPSJjb20ucG9pbnRiYXNlLmpkYmMuamRiY1VuaXZlcnNhbERyaXZlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2NjaS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvU3VuUmFYbWwvY2NpL2J1aWxkLnhtbAppbmRleCBiOTE0YjlmLi5hMjJhYTQzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvU3VuUmFYbWwvY2NpL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvU3VuUmFYbWwvY2NpL2J1aWxkLnhtbApAQCAtMTA1LDcgKzEwNSw3IEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+Ci08IS0tIAorPCEtLQogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXJlc291cmNlIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtcG9vbCIvPgogLS0+CkBAIC0xMTksMTAgKzExOSwxMCBAQAogICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiA8L3RhcmdldD4KIAotPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4gIAotICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+ICAgCi0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9InN0YW5kYWxvbmUiLz4gICAgIAotICAgIDwvYW50Y2FsbD4gICAKKzx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0ic3RhbmRhbG9uZSIvPgorICAgIDwvYW50Y2FsbD4KIDwvdGFyZ2V0PgogCiA8IS0tIHNldHVwIC0tPgpAQCAtMTM5LDcgKzEzOSw3IEBACiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1wb29sIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jb25uZWN0b3ItY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InJhLm5hbWUiIHZhbHVlPSJjY2libGFja2JveC0ke3R4Lm1vZGV9Ii8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0aW9uLmRlZm5hbWUiIAorICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdGlvbi5kZWZuYW1lIgogICAgICAgICAgICAgdmFsdWU9Impha2FydGEucmVzb3VyY2UuY2NpLkNvbm5lY3Rpb25GYWN0b3J5Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3IuY29ucG9vbC5uYW1lIiB2YWx1ZT0iQ0NJLUNPTk5QT09MIi8+CiAgICAgPC9hbnRjYWxsPgpAQCAtMTgxLDcgKzE4MSw3IEBACiAKIDwhLS0gY3JlYXRlIHRoZSBhcHBjbGllbnQgamFyIGZpbGUgd2l0aCBjdXN0b20gY2xhc3Nlcy0tPgogPHRhcmdldCBuYW1lPSJhcHBjbGllbnQtamFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgIHZhbHVlPSIqKi8qTG9jYWwqLmNsYXNzLCoqLypSZW1vdGUqLmNsYXNzLCoqLypIb21lKi5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIKQEAgLTIxNSwxMyArMjE1LDEzIEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJjcmVhdGUtcmFyIj4KLSAgICA8Y29weSBmaWxlPSJkZXNjcmlwdG9yL3JhLnhtbCIgCisgICAgPGNvcHkgZmlsZT0iZGVzY3JpcHRvci9yYS54bWwiCiAgICAgICAgIHRvZmlsZT0iJHthc3NlbWJsZS5kaXJ9L3Jhci9NRVRBLUlORi9yYS54bWwiLz4KICAgICA8Y29weSBmaWxlPSJkZXNjcmlwdG9yL3N1bi1yYS54bWwiCi0JdG9maWxlPSIke2Fzc2VtYmxlLmRpcn0vcmFyL01FVEEtSU5GL3N1bi1yYS54bWwiLz4KLSAgICA8Y29weSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vc3FldGVzdHMvY29ubmVjdG9yL2xpYi9jY2libGFja2JveC10eC5qYXIiIAorICAgIHRvZmlsZT0iJHthc3NlbWJsZS5kaXJ9L3Jhci9NRVRBLUlORi9zdW4tcmEueG1sIi8+CisgICAgPGNvcHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L3NxZXRlc3RzL2Nvbm5lY3Rvci9saWIvY2NpYmxhY2tib3gtdHguamFyIgogICAgICAgICB0b2ZpbGU9IiR7YXNzZW1ibGUuZGlyfS9yYXIvY2NpYmxhY2tib3gtdHguamFyIi8+Ci0gICAgPHJlcGxhY2UgZmlsZT0iJHthc3NlbWJsZS5kaXJ9L3Jhci9NRVRBLUlORi9yYS54bWwiIAorICAgIDxyZXBsYWNlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9yYXIvTUVUQS1JTkYvcmEueG1sIgogICAgICAgICB0b2tlbj0iREJVUkwiIHZhbHVlPSIke2RiLnVybH0iLz4KIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvU3VuUmFYbWwvY2NpL2NsaWVudC9Db2ZmZWVDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2kvY2xpZW50L0NvZmZlZUNsaWVudC5qYXZhCmluZGV4IGQ4YzI2YTMuLmZhYTBjMGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2kvY2xpZW50L0NvZmZlZUNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2kvY2xpZW50L0NvZmZlZUNsaWVudC5qYXZhCkBAIC0zMCwxNyArMzAsMTcgQEAKICAgICAgICBTdHJpbmcgdGVzdElkID0gIkoyRUUgQ29ubmVjdG9ycyAxLjUgOiBTdGFuZGFsb25lIGFkYXB0ZXIgdGVzdHMiOwogICAgICAgIHRyeSB7CiAKLQkgICBpZiAoYXJncy5sZW5ndGggPT0gMSkgewotCSAgICAgICB0ZXN0SWQgPSBhcmdzWzBdOwotCSAgIH0KKyAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMSkgeworICAgICAgICAgICB0ZXN0SWQgPSBhcmdzWzBdOworICAgICAgIH0KIAogICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4odGVzdElkICsgIiA6IENvZmZlZUNsaWVudCBzdGFydGVkIGluIG1haW4uLi4iKTsKLQkgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJKMkVFIENvbm5lY3RvcnMgMS41IDogU3RhbmRhbG9uZSBDQ0kgYWRhcHRlciBUZXN0cyIpOworICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkoyRUUgQ29ubmVjdG9ycyAxLjUgOiBTdGFuZGFsb25lIENDSSBhZGFwdGVyIFRlc3RzIik7CiAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUNvZmZlZSIpOwogCi0gICAgICAgICAgIENvZmZlZVJlbW90ZUhvbWUgaG9tZSA9IAotICAgICAgICAgICAgICAgKENvZmZlZVJlbW90ZUhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgIENvZmZlZVJlbW90ZUhvbWUgaG9tZSA9CisgICAgICAgICAgICAgICAoQ29mZmVlUmVtb3RlSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZmZlZVJlbW90ZUhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgIENvZmZlZVJlbW90ZSBjb2ZmZWUgPSBob21lLmNyZWF0ZSgpOwpAQCAtNTUsMjIgKzU1LDIyIEBACiAKICAgICAgICAgICAgaW50IG5ld0NvdW50ID0gY29mZmVlLmdldENvZmZlZUNvdW50KCk7CiAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ29mZmVlIGNvdW50ID0gIiArIG5ld0NvdW50KTsKLQkgICBpZiAoY291bnQ9PShuZXdDb3VudC0zKSkgewotCQlzdGF0LmFkZFN0YXR1cygiQ29ubmVjdG9yOmNjaSBDb25uZWN0b3IgIiArIHRlc3RJZCArICIgcmFyIFRlc3Qgc3RhdHVzOiIsc3RhdC5QQVNTKTsKLQkgICB9ZWxzZXsKLQkJc3RhdC5hZGRTdGF0dXMoIkNvbm5lY3RvcjpjY2kgQ29ubmVjdG9yICIgKyB0ZXN0SWQgKyAiIHJhciBUZXN0IHN0YXR1czoiLHN0YXQuRkFJTCk7Ci0JICAgfQorICAgICAgIGlmIChjb3VudD09KG5ld0NvdW50LTMpKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJDb25uZWN0b3I6Y2NpIENvbm5lY3RvciAiICsgdGVzdElkICsgIiByYXIgVGVzdCBzdGF0dXM6IixzdGF0LlBBU1MpOworICAgICAgIH1lbHNleworICAgICAgICBzdGF0LmFkZFN0YXR1cygiQ29ubmVjdG9yOmNjaSBDb25uZWN0b3IgIiArIHRlc3RJZCArICIgcmFyIFRlc3Qgc3RhdHVzOiIsc3RhdC5GQUlMKTsKKyAgICAgICB9CiAKLQkgICAvL3ByaW50IHRlc3Qgc3VtbWFyeQotCSAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CisgICAgICAgLy9wcmludCB0ZXN0IHN1bW1hcnkKKyAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOwogCiAKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gdW5leHBlY3RlZCBleGNlcHRpb24hIik7Ci0JICAgc3RhdC5hZGRTdGF0dXMoIkNvbm5lY3RvcjpDQ0kgQ29ubmVjdG9yICIgKyB0ZXN0SWQgKyAiIHJhciBUZXN0IHN0YXR1czoiLHN0YXQuRkFJTCk7CisgICAgICAgc3RhdC5hZGRTdGF0dXMoIkNvbm5lY3RvcjpDQ0kgQ29ubmVjdG9yICIgKyB0ZXN0SWQgKyAiIHJhciBUZXN0IHN0YXR1czoiLHN0YXQuRkFJTCk7CiAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgIH0KLSAgIH0gCisgICB9CiAKIAotfSAKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2kvZWpiL0NvZmZlZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2kvZWpiL0NvZmZlZUJlYW4uamF2YQppbmRleCAyODgzNTg5Li5mZjFhODVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvU3VuUmFYbWwvY2NpL2VqYi9Db2ZmZWVCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2NjaS9lamIvQ29mZmVlQmVhbi5qYXZhCkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgICAgICBJbmRleGVkUmVjb3JkIGlSZWMgPSByZi5jcmVhdGVJbmRleGVkUmVjb3JkKCJJbnB1dFJlY29yZCIpOwogICAgICAgICAgICAgUmVjb3JkIG9SZWMgPSBpeC5leGVjdXRlKGlTcGVjLCBpUmVjKTsKICAgICAgICAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gKChJbmRleGVkUmVjb3JkKW9SZWMpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZShpdGVyYXRvci5oYXNOZXh0KCkpIHsgICAKKyAgICAgICAgICAgIHdoaWxlKGl0ZXJhdG9yLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgIE9iamVjdCBvYmogPSBpdGVyYXRvci5uZXh0KCk7CiAgICAgICAgICAgICAgICAgaWYob2JqIGluc3RhbmNlb2YgSW50ZWdlcikgewogICAgICAgICAgICAgICAgICAgICBjb3VudCA9ICgoSW50ZWdlcilvYmopLmludFZhbHVlKCk7CkBAIC05OSwxMSArOTksMTEgQEAKICAgICBwcml2YXRlIENvbm5lY3Rpb24gZ2V0Q0NJQ29ubmVjdGlvbigpIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCI8PT09PT09PT09PSBJTiBnZXQgY2NpIENvbm5lY3Rpb24gPT09PT09PT09PT0+Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCI8PT09PT09PT09PSBJTiBnZXQgY2NpIENvbm5lY3Rpb24gPT09PT09PT09PT0+Iik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb25uZWN0aW9uU3BlYyBzcGVjID0gbmV3IENjaUNvbm5lY3Rpb25TcGVjKCJEQlVTRVIiLCAiREJQQVNTV09SRCIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiPD09PT09PT09PT0gQ3JlYXRlZCBJU3BlYyA9PT09PT09PT09PT4iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkNGIHZhbHVlIDogIiArIGNmKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjw9PT09PT09PT09IENyZWF0ZWQgSVNwZWMgPT09PT09PT09PT0+Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDRiB2YWx1ZSA6ICIgKyBjZik7CiAgICAgICAgICAgICBjb24gPSBjZi5nZXRDb25uZWN0aW9uKHNwZWMpOwogICAgICAgICB9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0xMjMsNCArMTIzLDQgQEAKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9CiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIAotfSAKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvYnVpbGQueG1sCmluZGV4IGRiMTI1MjAuLjg0MzY3M2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2J1aWxkLnhtbApAQCAtMzcsMTkgKzM3LDE5IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InBlLWFsbCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYmFja3VwLWNvbmZpZy1wZSIvPgotCTxlY2hvIG1lc3NhZ2U9Ik5PVEU6IFRoZSBmaWxlICR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcyBpcyBiZWluZyByZXBsYWNlZCB3aXRoICR7YmFzZWRpcn0vY29uZmlnL3BlLWNvbmZpZy5wcm9wZXJ0aWVzLiBUaGUgZmlsZSB3aWxsIGJlIHJldmVydGVkIHRvIGl0cyBvcmlnaW5hbCBzdGF0ZSBhZnRlciB0aGUgY29tcGxldGlvbiBvZiB0aGVzZSB0ZXN0cy4iLz4KLQk8Y29weSBmaWxlPSIke2Jhc2VkaXJ9L2NvbmZpZy9wZS1jb25maWcucHJvcGVydGllcyIgdG9maWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiIG92ZXJ3cml0ZT0idHJ1ZSIvPgotCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXBlLXBhc3N3b3JkZmlsZSIvPgotCTxhbnRjYWxsIHRhcmdldD0iYWxsIi8+CisgICAgPGVjaG8gbWVzc2FnZT0iTk9URTogVGhlIGZpbGUgJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggJHtiYXNlZGlyfS9jb25maWcvcGUtY29uZmlnLnByb3BlcnRpZXMuIFRoZSBmaWxlIHdpbGwgYmUgcmV2ZXJ0ZWQgdG8gaXRzIG9yaWdpbmFsIHN0YXRlIGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mIHRoZXNlIHRlc3RzLiIvPgorICAgIDxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vY29uZmlnL3BlLWNvbmZpZy5wcm9wZXJ0aWVzIiB0b2ZpbGU9IiR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcyIgb3ZlcndyaXRlPSJ0cnVlIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtcGUtcGFzc3dvcmRmaWxlIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0b3JlLWNvbmZpZy1wZSIvPgogICAgIDwvdGFyZ2V0PgotCQorCiAgICAgPHRhcmdldCBuYW1lPSJkYXMtYWxsIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJiYWNrdXAtY29uZmlnLXBlIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9Ik5PVEU6IFRoZSBmaWxlICR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcyBpcyBiZWluZyByZXBsYWNlZCB3aXRoICR7YmFzZWRpcn0vY29uZmlnL2Rhcy1jb25maWcucHJvcGVydGllcy4gVGhlIGZpbGUgd2lsbCBiZSByZXZlcnRlZCB0byBpdHMgb3JpZ2luYWwgc3RhdGUgYWZ0ZXIgdGhlIGNvbXBsZXRpb24gb2YgdGhlc2UgdGVzdHMuIi8+Ci0JPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS9jb25maWcvZGFzLWNvbmZpZy5wcm9wZXJ0aWVzIiB0b2ZpbGU9IiR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcyIgb3ZlcndyaXRlPSJ0cnVlIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtZWUtcGFzc3dvcmRmaWxlIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJhbGwiLz4KKyAgICA8Y29weSBmaWxlPSIke2Jhc2VkaXJ9L2NvbmZpZy9kYXMtY29uZmlnLnByb3BlcnRpZXMiIHRvZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzIiBvdmVyd3JpdGU9InRydWUiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1lZS1wYXNzd29yZGZpbGUiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RvcmUtY29uZmlnLXBlIi8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTU3LDU4ICs1Nyw1OCBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJhY2t1cC1jb25maWctcGUiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJiYWNrdXAtY29uZmlnLWVlIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9Ik5PVEU6IFRoZSBmaWxlICR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcyBpcyBiZWluZyByZXBsYWNlZCB3aXRoICR7YmFzZWRpcn0vY29uZmlnL2Rhcy1jb25maWcucHJvcGVydGllcy4gVGhlIGZpbGUgd2lsbCBiZSByZXZlcnRlZCB0byBpdHMgb3JpZ2luYWwgc3RhdGUgYWZ0ZXIgdGhlIGNvbXBsZXRpb24gb2YgdGhlc2UgdGVzdHMuIi8+Ci0JPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS9jb25maWcvZWUtY29uZmlnLnByb3BlcnRpZXMiIHRvZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzIiBvdmVyd3JpdGU9InRydWUiLz4KLQk8Y29weSBmaWxlPSIke2Jhc2VkaXJ9L2NvbmZpZy9lZS1jb25maWcucHJvcGVydGllcyIgdG9maWxlPSIke2Vudi5BUFNfSE9NRX0vZWVjb25maWcvZWUtY29uZmlnLnByb3BlcnRpZXMiIG92ZXJ3cml0ZT0idHJ1ZSIvPgotCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWVlLXBhc3N3b3JkZmlsZSIvPgotCTxhbnRjYWxsIHRhcmdldD0iZWUiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImFsbCIvPgorICAgIDxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vY29uZmlnL2VlLWNvbmZpZy5wcm9wZXJ0aWVzIiB0b2ZpbGU9IiR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcyIgb3ZlcndyaXRlPSJ0cnVlIi8+CisgICAgPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS9jb25maWcvZWUtY29uZmlnLnByb3BlcnRpZXMiIHRvZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2VlY29uZmlnL2VlLWNvbmZpZy5wcm9wZXJ0aWVzIiBvdmVyd3JpdGU9InRydWUiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1lZS1wYXNzd29yZGZpbGUiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImVlIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0b3JlLWNvbmZpZy1wZSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RvcmUtY29uZmlnLWVlIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJhY2t1cC1jb25maWctcGUiIGRlcGVuZHM9InJlcGxhY2UtcGFzc3dvcmQtd2l0aC1wYXNzd29yZGZpbGUiPgotCTxjb3B5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcyIgdG9maWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMuYmFrIiBvdmVyd3JpdGU9InRydWUiLz4KKyAgICA8Y29weSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiIHRvZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzLmJhayIgb3ZlcndyaXRlPSJ0cnVlIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUtY29uZmlnLXBlIiBkZXBlbmRzPSJ1bmRvLXJlcGxhY2UtcGFzc3dvcmQtd2l0aC1wYXNzd29yZGZpbGUiPgotCTxjb3B5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcy5iYWsiIHRvZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzIiBvdmVyd3JpdGU9InRydWUiLz4KKyAgICA8Y29weSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMuYmFrIiB0b2ZpbGU9IiR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcyIgb3ZlcndyaXRlPSJ0cnVlIi8+CiAgICAgPC90YXJnZXQ+Ci0JCQorCiAgICAgPHRhcmdldCBuYW1lPSJiYWNrdXAtY29uZmlnLWVlIj4KLQk8Y29weSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vZWVjb25maWcvZWUtY29uZmlnLnByb3BlcnRpZXMiIHRvZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2VlY29uZmlnL2VlLWNvbmZpZy5wcm9wZXJ0aWVzLmJhayIgb3ZlcndyaXRlPSJ0cnVlIi8+CisgICAgPGNvcHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2VlY29uZmlnL2VlLWNvbmZpZy5wcm9wZXJ0aWVzIiB0b2ZpbGU9IiR7ZW52LkFQU19IT01FfS9lZWNvbmZpZy9lZS1jb25maWcucHJvcGVydGllcy5iYWsiIG92ZXJ3cml0ZT0idHJ1ZSIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlLWNvbmZpZy1lZSI+Ci0JPGNvcHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2VlY29uZmlnL2VlLWNvbmZpZy5wcm9wZXJ0aWVzLmJhayIgdG9maWxlPSIke2Vudi5BUFNfSE9NRX0vZWVjb25maWcvZWUtY29uZmlnLnByb3BlcnRpZXMiIG92ZXJ3cml0ZT0idHJ1ZSIvPgorICAgIDxjb3B5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9lZWNvbmZpZy9lZS1jb25maWcucHJvcGVydGllcy5iYWsiIHRvZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2VlY29uZmlnL2VlLWNvbmZpZy5wcm9wZXJ0aWVzIiBvdmVyd3JpdGU9InRydWUiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXBlLXBhc3N3b3JkZmlsZSI+Ci0JPHByb3BlcnR5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcyIvPgotCTxlY2hvIG1lc3NhZ2U9IkFTX0FETUlOX1BBU1NXT1JEPSR7YWRtaW4ucGFzc3dvcmR9JHtsaW5lLnNlcGFyYXRvcn0iIGZpbGU9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9jb25uZWN0b3IvY29uZmlnL3Bhc3N3b3JkLnR4dCIvPgorICAgIDxwcm9wZXJ0eSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJBU19BRE1JTl9QQVNTV09SRD0ke2FkbWluLnBhc3N3b3JkfSR7bGluZS5zZXBhcmF0b3J9IiBmaWxlPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvY29ubmVjdG9yL2NvbmZpZy9wYXNzd29yZC50eHQiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWVlLXBhc3N3b3JkZmlsZSI+Ci0JPHByb3BlcnR5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcyIvPgotCTxlY2hvIG1lc3NhZ2U9IkFTX0FETUlOX1BBU1NXT1JEPSR7YWRtaW4ucGFzc3dvcmR9JHtsaW5lLnNlcGFyYXRvcn0iIGZpbGU9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9jb25uZWN0b3IvY29uZmlnL3Bhc3N3b3JkLnR4dCIvPgotCTxlY2hvIG1lc3NhZ2U9IkFTX0FETUlOX01BU1RFUlBBU1NXT1JEPSR7bWFzdGVyLnBhc3N3b3JkfSR7bGluZS5zZXBhcmF0b3J9IiBmaWxlPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvY29ubmVjdG9yL2NvbmZpZy9wYXNzd29yZC50eHQiIGFwcGVuZD0idHJ1ZSIvPgorICAgIDxwcm9wZXJ0eSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJBU19BRE1JTl9QQVNTV09SRD0ke2FkbWluLnBhc3N3b3JkfSR7bGluZS5zZXBhcmF0b3J9IiBmaWxlPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvY29ubmVjdG9yL2NvbmZpZy9wYXNzd29yZC50eHQiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJBU19BRE1JTl9NQVNURVJQQVNTV09SRD0ke21hc3Rlci5wYXNzd29yZH0ke2xpbmUuc2VwYXJhdG9yfSIgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2Nvbm5lY3Rvci9jb25maWcvcGFzc3dvcmQudHh0IiBhcHBlbmQ9InRydWUiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmVwbGFjZS1wYXNzd29yZC13aXRoLXBhc3N3b3JkZmlsZSI+Ci0JPHJlcGxhY2UgZGlyPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLyI+CisgICAgPHJlcGxhY2UgZGlyPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLyI+CiAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyoueG1sIi8+Ci0JICAgPHJlcGxhY2V0b2tlbj4tLXBhc3N3b3JkICR7YWRtaW4ucGFzc3dvcmR9PC9yZXBsYWNldG9rZW4+Ci0JICAgPHJlcGxhY2V2YWx1ZT4tLXBhc3N3b3JkZmlsZSAke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvY29ubmVjdG9yL2NvbmZpZy9wYXNzd29yZC50eHQ8L3JlcGxhY2V2YWx1ZT4KLQk8L3JlcGxhY2U+CisgICAgICAgPHJlcGxhY2V0b2tlbj4tLXBhc3N3b3JkICR7YWRtaW4ucGFzc3dvcmR9PC9yZXBsYWNldG9rZW4+CisgICAgICAgPHJlcGxhY2V2YWx1ZT4tLXBhc3N3b3JkZmlsZSAke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvY29ubmVjdG9yL2NvbmZpZy9wYXNzd29yZC50eHQ8L3JlcGxhY2V2YWx1ZT4KKyAgICA8L3JlcGxhY2U+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZG8tcmVwbGFjZS1wYXNzd29yZC13aXRoLXBhc3N3b3JkZmlsZSI+Ci0JPHJlcGxhY2UgZGlyPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLyI+CisgICAgPHJlcGxhY2UgZGlyPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLyI+CiAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyoueG1sIi8+Ci0JICAgPHJlcGxhY2V0b2tlbj4tLXBhc3N3b3JkZmlsZSAke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvY29ubmVjdG9yL2NvbmZpZy9wYXNzd29yZC50eHQ8L3JlcGxhY2V0b2tlbj4KLQkgICA8cmVwbGFjZXZhbHVlPi0tcGFzc3dvcmQgJHthZG1pbi5wYXNzd29yZH08L3JlcGxhY2V2YWx1ZT4KLQk8L3JlcGxhY2U+CisgICAgICAgPHJlcGxhY2V0b2tlbj4tLXBhc3N3b3JkZmlsZSAke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvY29ubmVjdG9yL2NvbmZpZy9wYXNzd29yZC50eHQ8L3JlcGxhY2V0b2tlbj4KKyAgICAgICA8cmVwbGFjZXZhbHVlPi0tcGFzc3dvcmQgJHthZG1pbi5wYXNzd29yZH08L3JlcGxhY2V2YWx1ZT4KKyAgICA8L3JlcGxhY2U+CiAgICAgPC90YXJnZXQ+Ci0JCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb25uZWN0b3IiPgogICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLXRhcmdldCIgdmFsdWU9InJ1bi10ZXN0Ii8+CkBAIC0xNjgsNTcgKzE2OCw1NyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJjb25uZWN0b3IiPgogICAgICAgICA8cmVjb3JkIG5hbWU9ImNvbm5lY3Rvci5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiIC8+Ci0JCTxlY2hvIG1lc3NhZ2U9IkBAIyMgY29ubmVjdG9yMS41ICMjQEAiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBjb25uZWN0b3IxLjUgIyNAQCIvPgogICAgICAgICAgICAgPGFudCBkaXI9ImNvbm5lY3RvcjEuNSIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+Ci0JCTxlY2hvIG1lc3NhZ2U9IkBAIyMgZW1iZWRkZWRDb25uZWN0b3IxLjUgIyNAQCIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIGVtYmVkZGVkQ29ubmVjdG9yMS41ICMjQEAiLz4KICAgICAgICAgICAgIDxhbnQgZGlyPSJlbWJlZGRlZENvbm5lY3RvcjEuNSIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+Ci0JCTxlY2hvIG1lc3NhZ2U9IkBAIyMgZW1iZWRkZWR3ZWIgIyNAQCIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIGVtYmVkZGVkd2ViICMjQEAiLz4KICAgICAgICAgICAgIDxhbnQgZGlyPSJlbWJlZGRlZHdlYiIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+CiAgICAgICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBtcSAjI0BAIi8+CiAgICAgICAgICAgICA8YW50IGRpcj0ibXEiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIvPgotICAgICAJICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIG5vbmFjYyAjI0BAIi8+CisgICAgICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgbm9uYWNjICMjQEAiLz4KICAgICAgICAgICAgIDxhbnQgZGlyPSJub25hY2MiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIvPgotPCEtLQkgICAgQ29tbWVudGVkIG91dCB0aGUgZGVmYXVsdENvbm5lY3RvclJlc291cmNlIHRlc3QgYmVjYXVzZSB3ZSAgY2Fubm90IAorPCEtLSAgICAgICAgQ29tbWVudGVkIG91dCB0aGUgZGVmYXVsdENvbm5lY3RvclJlc291cmNlIHRlc3QgYmVjYXVzZSB3ZSAgY2Fubm90CiBhZGQgYSBub24tWEEgUmVzb3VyY2UgW2EgZGF0YWJhc2UgY29ubmVjdGlvbiBpbiB0aGlzIGNhc2VdIHRvIGEgZ2xvYmFsIEpUUyB0cmFuc2FjdGlvbiBjb250YWluaW5nCi1hIFhBIHJlc291cmNlLCBbYSBKTVMgcmVzb3VyY2UgaW4gdGhpcyBjYXNlXS4gVGhpcyB0ZXN0IHdhcyBwYXNzaW5nIGR1ZSB0byBhIAotSlRTIGJ1ZywgdGhhdCBhbGxvd2VkIGEgbm9uLVhBIHJlc291cmNlIGVubGlzdG1lbnQgYWZ0ZXIgYSBYQS1SZXNvdXJjZSBlbmxpc3RtZW50IGluIAorYSBYQSByZXNvdXJjZSwgW2EgSk1TIHJlc291cmNlIGluIHRoaXMgY2FzZV0uIFRoaXMgdGVzdCB3YXMgcGFzc2luZyBkdWUgdG8gYQorSlRTIGJ1ZywgdGhhdCBhbGxvd2VkIGEgbm9uLVhBIHJlc291cmNlIGVubGlzdG1lbnQgYWZ0ZXIgYSBYQS1SZXNvdXJjZSBlbmxpc3RtZW50IGluCiBhIGdsb2JhbCB0cmFuc2FjdGlvbiEKLQkgICAgPGFudCBkaXI9ImRlZmF1bHRDb25uZWN0b3JSZXNvdXJjZSIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+CisgICAgICAgIDxhbnQgZGlyPSJkZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIvPgogLS0+CiAgICAgICAgICAgICA8IS0tIHJ1bm5pbmcgd2ViMmNvbm5lY3RvciB0d2ljZSAtLT4KLQkJPGVjaG8gbWVzc2FnZT0iQEAjIyB3ZWIyY29ubmVjdG9yICMjQEAiLz4KLQkgICAgPGFudCBkaXI9IndlYjJjb25uZWN0b3IiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIgLz4KLQkJPGVjaG8gbWVzc2FnZT0iQEAjIyB3ZWIyY29ubmVjdG9yIChzZWNvbmQgdGltZSkgIyNAQCIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIHdlYjJjb25uZWN0b3IgIyNAQCIvPgorICAgICAgICA8YW50IGRpcj0id2ViMmNvbm5lY3RvciIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9IiAvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIHdlYjJjb25uZWN0b3IgKHNlY29uZCB0aW1lKSAjI0BAIi8+CiAgICAgICAgICAgICA8YW50IGRpcj0id2ViMmNvbm5lY3RvciIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9IiAvPgogICAgICAgICA8IS0tIHRoaXMgdGVzdCBpcyBkaXNhYmxlZCBiZWNhdXNlIG9mIGRlcGVuZGVuY3kgb24gcG9pbnQgYmFzZSBkYXRhYmFzZSBqYXIgd2hpY2ggaXMgbm90IGF2YWlsYWJsZSAtLT4KLQkJPCEtLWVjaG8gbWVzc2FnZT0iQEAjIyByZWRlcGxveVJhciAjI0BAIi8+CisgICAgICAgIDwhLS1lY2hvIG1lc3NhZ2U9IkBAIyMgcmVkZXBsb3lSYXIgIyNAQCIvPgogICAgICAgICAgICAgPGFudCBkaXI9InJlZGVwbG95UmFyIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iIC8tLT4KLQkJPGVjaG8gbWVzc2FnZT0iQEAjIyBub25zdHJpbmdtY2Zwcm9wZXJ0aWVzICMjQEAiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBub25zdHJpbmdtY2Zwcm9wZXJ0aWVzICMjQEAiLz4KICAgICAgICAgICAgIDxhbnQgZGlyPSJub25zdHJpbmdtY2Zwcm9wZXJ0aWVzIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iIC8+Ci0JCTxlY2hvIG1lc3NhZ2U9IkBAIyMgbm9uc3RyaW5ncmFwcm9wZXJ0aWVzICMjQEAiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBub25zdHJpbmdyYXByb3BlcnRpZXMgIyNAQCIvPgogICAgICAgICAgICAgPGFudCBkaXI9Im5vbnN0cmluZ3JhcHJvcGVydGllcyIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9IiAvPgotCQk8ZWNobyBtZXNzYWdlPSJAQCMjIHR4bGV2ZWxzd2l0Y2ggIyNAQCIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIHR4bGV2ZWxzd2l0Y2ggIyNAQCIvPgogICAgICAgICAgICAgPGFudCBkaXI9InR4bGV2ZWxzd2l0Y2giIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIgLz4KLQkJPGVjaG8gbWVzc2FnZT0iQEAjIyB0aHJlYWRwb29sICMjQEAiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyB0aHJlYWRwb29sICMjQEAiLz4KICAgICAgICAgICAgIDxhbnQgZGlyPSJ0aHJlYWRwb29sIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iIC8+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0iY29ubmVjdG9yLm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+IFVzYWdlOgotCQlhbnQgY29ubmVjdG9yMS41IChFeGVjdXRlcyB0aGUgY29ubmVjdG9yMS41IHRlc3RzKQotCQlhbnQgZW1iZGVkZGVkV2ViIChFeGVjdXRlcyBlbWJlZGRlZFdlYiB0ZXN0cykKLQkJYW50IG1xIChFeGVjdXRlcyB0aGUgbXEgdGVzdHMpCi0JCWFudCBub25hY2MgKEV4ZWN1dGVzIHRoZSBub25hY2MgdGVzdCkKLQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBjb25uZWN0b3IgdGVzdHMpCi0JCWFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgY29ubmVjdG9yIHRlc3RzKQotCQlhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGNvbm5lY3RvciB0ZXN0cykKLQkJYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIGNvbm5lY3RvciB0ZXN0cykKLQkJYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIGNvbm5lY3RvciBhcHBzKQotCQlhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGNvbm5lY3RvciB0ZXN0cykKLQkJYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgY29ubmVjdG9yIGFwcHMpCi0JCWFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3IgY29ubmVjdG9yIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4gVXNhZ2U6CisgICAgICAgIGFudCBjb25uZWN0b3IxLjUgKEV4ZWN1dGVzIHRoZSBjb25uZWN0b3IxLjUgdGVzdHMpCisgICAgICAgIGFudCBlbWJkZWRkZWRXZWIgKEV4ZWN1dGVzIGVtYmVkZGVkV2ViIHRlc3RzKQorICAgICAgICBhbnQgbXEgKEV4ZWN1dGVzIHRoZSBtcSB0ZXN0cykKKyAgICAgICAgYW50IG5vbmFjYyAoRXhlY3V0ZXMgdGhlIG5vbmFjYyB0ZXN0KQorICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGNvbm5lY3RvciB0ZXN0cykKKyAgICAgICAgYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBjb25uZWN0b3IgdGVzdHMpCisgICAgICAgIGFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgY29ubmVjdG9yIHRlc3RzKQorICAgICAgICBhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgY29ubmVjdG9yIHRlc3RzKQorICAgICAgICBhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgY29ubmVjdG9yIGFwcHMpCisgICAgICAgIGFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgY29ubmVjdG9yIHRlc3RzKQorICAgICAgICBhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBjb25uZWN0b3IgYXBwcykKKyAgICAgICAgYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBjb25uZWN0b3IgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJvcmFjbGUiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2NvbmZpZy9kYXRhYmFzZS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29uZmlnL2RhdGFiYXNlLnhtbAppbmRleCBjMmM4ODFkLi5iMzYzODMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29uZmlnL2RhdGFiYXNlLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29uZmlnL2RhdGFiYXNlLnhtbApAQCAtMjgsMTUgKzI4LDE1IEBACiA8IS0tCiA8cHJvamVjdCBuYW1lPSJvcmFjbGUtZGItc2V0dGluZ3MiIGRlZmF1bHQ9ImNyZWF0ZS1qZGJjLWNvbnBvb2wtY29ubmVjdG9yIiBiYXNlZGlyPSIuIj4KIAotJmNvbW1vbjsgCismY29tbW9uOwogJnRlc3Rjb21tb247CiAtLT4KIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWpkYmMtY29ucG9vbC1jb25uZWN0b3IiIGRlcGVuZHM9ImRlZmF1bHQtamRiYy1jb25wb29sLCBvcmFjbGUtamRiYy1jb25wb29sIi8+CiAKIDx0YXJnZXQgbmFtZT0iZGVmYXVsdC1qZGJjLWNvbnBvb2wiIGRlcGVuZHM9ImluaXQtY29tbW9uIiB1bmxlc3M9Im9yYWNsZSI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiIvPgogPC90YXJnZXQ+Ci0JICAgCisKIDx0YXJnZXQgbmFtZT0ib3JhY2xlLWpkYmMtY29ucG9vbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJvcmFjbGUiPgogPGVjaG8gbWVzc2FnZT0iY3JlYXRpbmcgamRiYyBjb25uZWN0aW9uIHBvb2wgJHtqZGJjLmNvbnBvb2wubmFtZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KQEAgLTQ5LDEyICs0OSwxMiBAQAogICAgICAgICA8YXJnIGxpbmU9IiR7amRiYy5jb25wb29sLm5hbWV9Ii8+CiAgICAgPC9leGVjPgogICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LW9yYWNsZS1wcm9wcyI+Ci0JPHBhcmFtIG5hbWU9InBvb2wudHlwZSIgdmFsdWU9ImpkYmMiLz4KLQk8cGFyYW0gbmFtZT0iY29ucG9vbC5uYW1lIiB2YWx1ZT0iJHtqZGJjLmNvbnBvb2wubmFtZX0iLz4KKyAgICA8cGFyYW0gbmFtZT0icG9vbC50eXBlIiB2YWx1ZT0iamRiYyIvPgorICAgIDxwYXJhbSBuYW1lPSJjb25wb29sLm5hbWUiIHZhbHVlPSIke2pkYmMuY29ucG9vbC5uYW1lfSIvPgogICAgIDwvYW50Y2FsbD4KIDwvdGFyZ2V0PgogCi08dGFyZ2V0IG5hbWU9InNldC1vcmFjbGUtcHJvcHMiIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0ib3JhY2xlIj4gCis8dGFyZ2V0IG5hbWU9InNldC1vcmFjbGUtcHJvcHMiIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0ib3JhY2xlIj4KICAgPHByb3BlcnR5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9jb25uZWN0b3IvY29uZmlnL29yYWNsZS5wcm9wZXJ0aWVzIi8+CiAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgpAQCAtOTYsMTUgKzk2LDE1IEBACiAKIDx0YXJnZXQgbmFtZT0iZXhlY3V0ZS1zcWwtY29ubmVjdG9yIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgZGVmYXVsdC1zcWwsIHNxbC1vcmFjbGUiLz4KIAotPHRhcmdldCBuYW1lPSJkZWZhdWx0LXNxbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iIHVubGVzcz0ib3JhY2xlIiA+IAotCTxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIi8+Cis8dGFyZ2V0IG5hbWU9ImRlZmF1bHQtc3FsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgdW5sZXNzPSJvcmFjbGUiID4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiIvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0ic3FsLW9yYWNsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJvcmFjbGUiPgotCTxwcm9wZXJ0eSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvY29ubmVjdG9yL2NvbmZpZy9vcmFjbGUucHJvcGVydGllcyIvPgotCTxwcm9wZXJ0eSBuYW1lPSJkb21haW4ubGliLmV4dCIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2xpYi9leHQiLz4KLQk8cHJvcGVydHkgbmFtZT0ib3JhY2xlLmRyaXZlci5wYXRoIiB2YWx1ZT0iJHtkb21haW4ubGliLmV4dH0vc21vcmFjbGUuamFyOiR7ZG9tYWluLmxpYi5leHR9L3NtYmFzZS5qYXI6JHtkb21haW4ubGliLmV4dH0vc21yZXNvdXJjZS5qYXI6JHtkb21haW4ubGliLmV4dH0vc211dGlsLmphcjoke2RvbWFpbi5saWIuZXh0fS9zbXNweS5qYXI6JHtkb21haW4ubGliLmV4dH0vT3JhbnhvLmphciIvPgotCTxlY2hvIG1lc3NhZ2U9IiR7b3JhY2xlRm9yQ29ubmVjdG9yLmRyaXZlcn0iLz4KKyAgICA8cHJvcGVydHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2Nvbm5lY3Rvci9jb25maWcvb3JhY2xlLnByb3BlcnRpZXMiLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iZG9tYWluLmxpYi5leHQiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9saWIvZXh0Ii8+CisgICAgPHByb3BlcnR5IG5hbWU9Im9yYWNsZS5kcml2ZXIucGF0aCIgdmFsdWU9IiR7ZG9tYWluLmxpYi5leHR9L3Ntb3JhY2xlLmphcjoke2RvbWFpbi5saWIuZXh0fS9zbWJhc2UuamFyOiR7ZG9tYWluLmxpYi5leHR9L3NtcmVzb3VyY2UuamFyOiR7ZG9tYWluLmxpYi5leHR9L3NtdXRpbC5qYXI6JHtkb21haW4ubGliLmV4dH0vc21zcHkuamFyOiR7ZG9tYWluLmxpYi5leHR9L09yYW54by5qYXIiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSIke29yYWNsZUZvckNvbm5lY3Rvci5kcml2ZXJ9Ii8+CiA8ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgc3FsIHN0YXRlbWVudCBhdCAke2Jhc2VkaXJ9IGZyb20gJHtzcWwuZmlsZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPHNxbApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL2FwcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvYXBwL2J1aWxkLnhtbAppbmRleCA0MjZlY2RkLi4zNTQ4YjkzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvYXBwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvYXBwL2J1aWxkLnhtbApAQCAtMzYsMTggKzM2LDE4IEBACiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgY2xlYW4tY29tbW9uIj4KICAgIDxhbnQgZGlyPSJzcmMiIGluaGVyaXRBbGw9ImZhbHNlIiB0YXJnZXQ9ImFsbCIvPgogICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9InNpbXBsZW1kYiIvPgotCTxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KLQk8cGFyYW0gbmFtZT0iZ2xhc3NmaXNoLXJlc291cmNlcy1lYXIueG1sIiB2YWx1ZT0iTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9InNpbXBsZW1kYiIvPgorICAgIDxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICA8cGFyYW0gbmFtZT0iZ2xhc3NmaXNoLXJlc291cmNlcy1lYXIueG1sIiB2YWx1ZT0iTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiLz4KICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJzZXR1cEpkYmMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIDwhLS0KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ucG9vbC1jb25uZWN0b3IiPgotCSA8cGFyYW0gbmFtZT0iZGIuY2xhc3MiIHZhbHVlPSJjb20uc3VuLnNxbC5qZGJjeC5vcmFjbGUuT3JhY2xlRGF0YVNvdXJjZSIvPgorICAgICA8cGFyYW0gbmFtZT0iZGIuY2xhc3MiIHZhbHVlPSJjb20uc3VuLnNxbC5qZGJjeC5vcmFjbGUuT3JhY2xlRGF0YVNvdXJjZSIvPgogICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1wb2ludGJhc2UtcG9vbDEiLz4KLQkgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UudHlwZSIgdmFsdWU9ImphdmF4LnNxbC5YQURhdGFTb3VyY2UiLz4KKyAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UudHlwZSIgdmFsdWU9ImphdmF4LnNxbC5YQURhdGFTb3VyY2UiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgpAQCAtNTcsNyArNTcsNyBAQAogLS0+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbm5lY3RvciI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9ImNyZWF0ZWRiLnNxbCIvPgotICAgICAgPC9hbnRjYWxsPgkKKyAgICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJ1bnNldEpkYmMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKaW5kZXggNGJkY2M2Zi4uMzIzYzBlYyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKQEAgLTkxLDggKzkxLDggQEAKICAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgotCTxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8c2VjdXJpdHktaWRlbnRpdHk+CiAgICAgICAgIDx1c2UtY2FsbGVyLWlkZW50aXR5Lz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAppbmRleCAyZDgyYWQzLi4xMDAzNTY2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgICAgICBUZXN0SW50ZWdlclByb3AKICAgICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgPGFjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAgICAgMiAKKyAgICAgICAgICAgIDIKICAgICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnPgpAQCAtODUsNyArODUsNyBAQAogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5qYXZhOm1vZHVsZS9laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5qYXZhOm1vZHVsZS9laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8Z2VuLWNsYXNzZXMvPgogICAgIDwvZWpiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKaW5kZXggYmMwYzllZS4uNmUxY2Y0OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAKICAgICBwdWJsaWMgTWVzc2FnZUNoZWNrZXJFSkIoKSB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYmVhbiBjcmVhdGVkIik7CiAgICAgICAgIGhlbGRDb24gPSBudWxsOwpAQCAtNzEsMTEgKzcxLDExIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLmdldExvY2tPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIC8vVGVsbCB0aGUgcmVzb3VyY2UgYWRhcHRlciB0aGUgY2xpZW50IGlzIHJlYWR5IHRvIHJ1bgotICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnlBbGwoKTsgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeUFsbCgpOworCiAgICAgICAgICAgICAgICAgZGVidWcoIk5PVElGSUVELi4uIFNUQVJUIFdBSVRJTkciKTsKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgYmVpbmcgdG9sZCB0byByZWFkIGZyb20gdGhlIGRhdGFiYXNlCi0gICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTgzLDIyICs4MywyMiBAQAogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TWVzc2FnZUNvdW50KCkgewotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgIENvbm5lY3Rpb24gY29uID0gZ2V0RnJlc2hDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBpbnQgY291bnQxID0gZ2V0Q291bnQoY29uKTsKICAgICAgICAgICAgIGNvbi5jbG9zZSgpOwotICAgICAgICAgICAgCi0JICAgIC8qCisKKyAgICAgICAgLyoKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5nZXRMb2NrT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5KCk7CiAgICAgICAgICAgICB9Ci0JICAgICovCi0gICAgICAgICAgICAgICAgCisgICAgICAgICovCisKICAgICAgICAgICAgIHJldHVybiBjb3VudDE7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0ub3V0KTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JfQorICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIGludCBnZXRDb3VudChDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CkBAIC0xMjQsMTggKzEyNCwxOCBAQAogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgdXNlciA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi91c2VyIik7CiAgICAgICAgICAgICBwYXNzd29yZCA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9wYXNzd29yZCIpOwotCSAgICBDb250cm9scyA9IChNeUFkbWluT2JqZWN0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL3Rlc3RBZG1pbiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExJTkcgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7Ci0JICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMRUQgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7CisgICAgICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvdGVzdEFkbWluIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTElORyBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKKyAgICAgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExFRCBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKIAotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8qdHJ5ewotICAgICAgICAgIAorCiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3QgZHMgPSBpYy5sb29rdXAoImphdmE6bW9kdWxlL2pkYmMvbW9kdWxlLWxldmVsLXJlc291cmNlIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImphdmE6bW9kdWxlL2pkYmMvbW9kdWxlLWxldmVsLXJlc291cmNlIDogIiArIGRzKTsKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoY29uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gY29uOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTE4NCw3ICsxODQsNyBAQAogICAgICAgICAgICAgdGhyb3cgZXgxOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGNsb3NlQ29ubmVjdGlvbihDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmIChoZWxkQ29uICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGRhZDIwN2IuLjBiMzhjMTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiBlamItamFyLnhtbD1NRVRBLUlORi9lamItamFyLnhtbAogc3VuLWVqYi1qYXIueG1sPU1FVEEtSU5GL3N1bi1lamItamFyLnhtbApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDA1YzQyNjUuLmVjNzdjZTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDQ1ICsyOCw0NSBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgICAgICAvL3N1cGVyKGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdCgpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGhpcyBpcyB0byB0ZXN0IGNvbm5lY3RvciAxLjUgIisKLQkgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICJjb250cmFjdHMuIik7CisKICAgICAgICAgU3RyaW5nIHJlcyA9ICJOT1QgUlVOIjsKLQlkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKKyAgICBkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKICAgICAgICAgYm9vbGVhbiBwYXNzID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXMgID0gIkFMTCBURVNUUyBQQVNTRUQiOwotCSAgICBpbnQgdGVzdENvdW50ID0gMTsKKyAgICAgICAgaW50IHRlc3RDb3VudCA9IDE7CiAgICAgICAgICAgICB3aGlsZSAoIWRvbmUoKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwogICAgICAgICAgICAgICAgIGlmICghZG9uZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJSdW5uaW5nLi4uIik7CiAgICAgICAgICAgICAgICAgICAgIHBhc3MgPSBjaGVja1Jlc3VsdHMoZXhwZWN0ZWRSZXN1bHRzKCkpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR290IGV4cGVjdGVkIHJlc3VsdHMgPSAiICsgcGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZG8gbm90IGNvbnRpbnVlIGlmIG9uZSB0ZXN0IGZhaWxlZAogICAgICAgICAgICAgICAgICAgICBpZiAoIXBhc3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9ICJTT01FIFRFU1RTIEZBSUxFRCI7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIENvbm5lY3RvciAxLjUgdGVzdCAtICIgKyB0ZXN0Q291bnQsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIENvbm5lY3RvciAxLjUgdGVzdCAtICIgKyB0ZXN0Q291bnQsIHN0YXQuUEFTUyk7Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotCQl0ZXN0Q291bnQgKys7CisgICAgICAgIHRlc3RDb3VudCArKzsKICAgICAgICAgICAgIH0KIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTc2LDE0ICs3NiwxNCBAQAogICAgICAgICB9CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJzaW1wbGVtZGIiKTsKIAotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiRVhJVElORy4uLiBTVEFUVVMgPSAiICsgcmVzKTsKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tSZXN1bHRzKGludCBudW0pIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICBpbnQgcmVzdWx0ID0gY2hlY2tlci5nZXRNZXNzYWdlQ291bnQoKTsKQEAgLTkyLDcgKzkyLDcgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBkb25lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIHJldHVybiBjaGVja2VyLmRvbmUoKTsKQEAgLTEwMCw3ICsxMDAsNyBAQAogCiAgICAgcHJpdmF0ZSBpbnQgZXhwZWN0ZWRSZXN1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIHJldHVybiBjaGVja2VyLmV4cGVjdGVkUmVzdWx0cygpOwpAQCAtMTA4LDcgKzEwOCw3IEBACiAKICAgICBwcml2YXRlIHZvaWQgbm90aWZ5QW5kV2FpdCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICBjaGVja2VyLm5vdGlmeUFuZFdhaXQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCmluZGV4IDU0ZTc3ZWEuLjZiMTI5MDQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQpAQCAtMzAsNDEgKzMwLDQxIEBACiAKIC8qKgogICovCi1wdWJsaWMgY2xhc3MgTXlNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLCAKK3B1YmxpYyBjbGFzcyBNeU1lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sCiAgICAgICAgIE15TWVzc2FnZUxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgdHJhbnNpZW50IE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYyA9IG51bGw7CiAgICAgcHJpdmF0ZSBDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3Rvciwgd2hpY2ggaXMgcHVibGljIGFuZCB0YWtlcyBubyBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIE15TWVzc2FnZUJlYW4oKSB7fQogCiAgICAgLyoqCi0gICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCAKLSAgICAgKiBub3QgZmluYWwgb3Igc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCAKKyAgICAgKiBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0CisgICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQKICAgICAgKiB3aXRoIG9uZSBhcmd1bWVudCBvZiB0eXBlIGpha2FydGEuZWpiLk1lc3NhZ2VEcml2ZW5Db250ZXh0LgogICAgICAqCiAgICAgICogQHBhcmFtIG1kYyAgICB0aGUgY29udGV4dCB0byBzZXQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dChNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMpIHsKLQl0aGlzLm1kYyA9IG1kYzsKKyAgICB0aGlzLm1kYyA9IG1kYzsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCi0gICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vIAorICAgICAqIGVqYkNyZWF0ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgorICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubwogICAgICAqIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7IH0KIAogICAgIC8qKgotICAgICAqIG9uTWVzc2FnZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKKyAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKICAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggb25lIGFyZ3VtZW50CiAgICAgICogb2YgdHlwZSBqYWthcnRhLmptcy5NZXNzYWdlLgogICAgICAqCi0gICAgICogQ2FzdHMgdGhlIGluY29taW5nIE1lc3NhZ2UgdG8gYSBUZXh0TWVzc2FnZSBhbmQgZGlzcGxheXMgCisgICAgICogQ2FzdHMgdGhlIGluY29taW5nIE1lc3NhZ2UgdG8gYSBUZXh0TWVzc2FnZSBhbmQgZGlzcGxheXMKICAgICAgKiB0aGUgdGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBpbk1lc3NhZ2UgICAgdGhlIGluY29taW5nIG1lc3NhZ2UKQEAgLTc1LDcgKzc1LDcgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiV1JJVEUiKSkgewotICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiV1JJVEUiLCAKKyAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGluTWVzc2FnZS5zdWJzdHJpbmcoMCwgaW5NZXNzYWdlLmxhc3RJbmRleE9mKCI6IikpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5NZXNzYWdlLmVuZHNXaXRoKCJERUxFVEUiKSkgewogICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiREVMRVRFIiwKQEAgLTkxLDEwICs5MSwxMCBAQAogICAgICAgICB9CiAKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBlamJSZW1vdmUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCi0gICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vIAorICAgICAqIGVqYlJlbW92ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgorICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubwogICAgICAqIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQpAQCAtMTA0LDYzICsxMDQsNjMgQEAKIAogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIFN0cmluZyBpZCAgICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKDAsIG1lc3NhZ2UuaW5kZXhPZigiOiIpKTsKLSAgICAgICAgU3RyaW5nIGJvZHkgID0gbWVzc2FnZS5zdWJzdHJpbmcobWVzc2FnZS5pbmRleE9mKCI6IikrMSk7IAorICAgICAgICBTdHJpbmcgYm9keSAgPSBtZXNzYWdlLnN1YnN0cmluZyhtZXNzYWdlLmluZGV4T2YoIjoiKSsxKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoIlJFQUQiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJSZWFkaW5nIHJvdyBmcm9tIGRhdGFiYXNlLi4uIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9IAorICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0KICAgICAgICAgICAgICAgICAgICJTRUxFQ1QgaWQgZnJvbSBtZXNzYWdlcyB3aGVyZSBpZCA9ICdRUSciOwogICAgICAgICAgICAgICAgICAgUmVzdWx0U2V0IHJlc3VsdHMgPSBzdG10LmV4ZWN1dGVRdWVyeShxdWVyeSk7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArIAorICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJRUSBoYXMgYmFsYW5jZSAiICsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuZ2V0SW50KCJiYWxhbmNlIikgKyAiIGRvbGxhcnMiKTsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgIHN0bXQuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlYWQgb25lIGFjY291bnRcbiIpOwogICAgICAgICAgICAgICAgICovCiAKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIldSSVRFIi5lcXVhbHMob3ApKSB7CiAKICAgICAgICAgICAgICAgICBkZWJ1ZygiSW5zZXJ0aW5nIG9uZSBtZXNzYWdlIGluIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmFwcC9qZGJjL1hBUG9pbnRiYXNlIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGNyZWF0ZVJvdyhpZCwgYm9keSwgZGJDb25uZWN0aW9uKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgb25lIG1lc3NhZ2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJERUxFVEUiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBvbmUgbWVzc2FnZSBmcm9tIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTphcHAvamRiYy9YQVBvaW50YmFzZSIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWxldGVSb3coaWQsIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWxldGVkIG9uZSBtZXNzYWdlXG4iKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIkRFTEVURV9BTEwiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBhbGwgbWVzc2FnZXMgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6YXBwL2pkYmMvWEFQb2ludGJhc2UiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CkBAIC0xNzEsNyArMTcxLDcgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy91bnN1cHBvcnRlZCBvcAogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfWZpbmFsbHl7CiAgICAgICAgICAgICB0cnl7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uLmNsb3NlKCk7CkBAIC0xODAsOSArMTgwLDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgY3JlYXRlUm93KFN0cmluZyBpZCwgU3RyaW5nIGJvZHksIAotICAgICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorCisgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVJvdyhTdHJpbmcgaWQsIFN0cmluZyBib2R5LAorICAgICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIC8vIENyZWF0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQpAQCAtMTk4LDkgKzE5OCw5IEBACiAgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlUm93KFN0cmluZyBpZCwgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVSb3coU3RyaW5nIGlkLCBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIERlbGV0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQogICAgICAgICBkZWJ1ZygiRGVsZXRlUm93IHdpdGggSUQgPSAiICsgaWQpOwogICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKQEAgLTIxMyw5ICsyMTMsOSBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUFsbChqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUFsbChqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIERlbGV0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQogICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gIkRFTEVURSBGUk9NIG1lc3NhZ2VzIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvYnVpbGQueG1sCmluZGV4IDhiMDM4MGUuLmEwNjhlMWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL2J1aWxkLnhtbApAQCAtNjIsNyArNjIsNyBAQAogCiAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzaW1wbGVtZGIiIC8+CisgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzaW1wbGVtZGIiIC8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL01FVEEtSU5GL3JhLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9NRVRBLUlORi9yYS54bWwKaW5kZXggMmNhMmViYy4uMjFkZWI5MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL01FVEEtSU5GL3JhLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvTUVUQS1JTkYvcmEueG1sCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAgICAgICAgIDxpbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4gICAgICAgICAgCisgICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgICAgICAgICAgPG1lc3NhZ2VsaXN0ZW5lcj4KICAgICAgICAgICAgICAgICAgICAgPG1lc3NhZ2VsaXN0ZW5lci10eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyCkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8L2FjdGl2YXRpb25zcGVjLWNsYXNzPgogICAgICAgICAgICAgICAgICAgICA8L2FjdGl2YXRpb25zcGVjPgogICAgICAgICAgICAgICAgIDwvbWVzc2FnZWxpc3RlbmVyPgotICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4gICAgICAgICAgCisgICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPgogICAgICAgICA8L2luYm91bmQtcmVzb3VyY2VhZGFwdGVyPgogICAgICAgICA8YWRtaW5vYmplY3Q+CiAgICAgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2J1aWxkLnhtbAppbmRleCAyYjc3NDg5Li43ODM5OTFkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2J1aWxkLnhtbApAQCAtMzAsOCArMzAsOCBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+Ci0JPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KKyAgICA8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgorICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxqYXIgamFyZmlsZT0iLi4vZ2VuZXJpYy1yYS5qYXIiIGJhc2VkaXI9ImNsYXNzZXMiCiAgICAgICAgICBpbmNsdWRlcz0iY29ubmVjdG9yLyouY2xhc3MiIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQppbmRleCA1NTUzM2Q0Li5mNTliMmIzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBDb250cm9scyB7CiAgICAgcHVibGljIHN0YXRpYyBPYmplY3QgcmVhZHlMb2NrID0gbmV3IE9iamVjdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQppbmRleCAxZjU5Yjk4Li42NTJkNjhiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIERlbGl2ZXJ5V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zNyw3ICszNyw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgb3A7CiAgICAgcHJpdmF0ZSBib29sZWFuIGtlZXBDb3VudDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnRlciA9IDA7Ci0gICAgCisKICAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIFN0cmluZyBvcCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgdGhpcy5rZWVwQ291bnQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIAorICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywKICAgICAgICAgICAgIFN0cmluZyBvcCwgYm9vbGVhbiBrZWVwQ291bnQpIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9NZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7CiAgICAgICAgICAgICAvL2VwLmJlZm9yZURlbGl2ZXJ5KG9uTWVzc2FnZSk7CkBAIC03OSwxMSArNzksMTEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy9lcC5hZnRlckRlbGl2ZXJ5KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtOTQsMTQgKzk0LDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQppbmRleCAxMDBjYWNlLi5mYTkzZjYzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLmZvcmdldDogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgIH0KQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnByZXBhcmU6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICAgICAgcmV0dXJuIFhBUmVzb3VyY2UuWEFfT0s7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5yZWNvdmVyOiAiICsgZmxhZ1RvU3RyaW5nKGZsYWcpKTsKICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc3RhcnQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2Uuc3RhcnQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpICsgIiwiICsKICAgICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCmluZGV4IGI1YjBmMDIuLjRjOWMwMTIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogLyoqCiAgKiBjb2xsZWN0aW9uIG9mIG1lc3NhZ2VzLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgTWVzc2FnZXMgewogCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgU3RyaW5nIGNvbW1hbmQgID0gYXJnc1swXTsKICAgICAgICBTdHJpbmcgZGVzdE5hbWUgPSBhcmdzWzFdOwogICAgICAgIFN0cmluZyBtZXNzYWdlICA9IGFyZ3NbMl07Ci0gICAKKwogICAgICAgIGlmICghImFkZCIuZXF1YWxzKGNvbW1hbmQpKSB7CiAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQppbmRleCAxMDQ4M2VkLi4xZDAyYzYyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCkBAIC0zOCwxMyArMzgsMTMgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOwogICAgICAgICBpZiAocmVzZXRDb250cm9sLmVxdWFscygiQkVHSU5OSU5HIikpIHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMucmVhZHlMb2NrKXsKICAgICAgICAgICAgICAgICBDb250cm9scy5kb25lPWZhbHNlOwogICAgICAgICAgICAgfQotCSAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOwotCX0KKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gZG9uZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCmluZGV4IDgxODJlZjUuLjNmY2U1NDQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQpAQCAtMjQsOSArMjQsOSBAQAogICogc28gdGhhdCB0aGUgYXBwIHNlcnZlciBjYW4gaW5zdGFudGlhdGUgYW5kIGNvbmZpZ3VyZQogICogaXQgYXQgdGhlIHJ1bnRpbWUuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYyAKK3B1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYwogICAgIGltcGxlbWVudHMgQWN0aXZhdGlvblNwZWMsIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByaXZhdGUgU3RyaW5nIGRlc3RpbmF0aW9uTmFtZTsKQEAgLTQzLDcgKzQzLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uTmFtZSAoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uTmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvbk5hbWUgKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvbk5hbWUoKSBjYWxsZWQuLi4gbmFtZSA9ICIgKyBuYW1lKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbk5hbWUgPSBuYW1lOwpAQCAtNTIsNyArNTIsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25UeXBlKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvblR5cGU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25UeXBlIChTdHJpbmcgdHlwZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25UeXBlICgpIGNhbGxlZC4uLiB0eXBlID0gIiArIHR5cGUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uVHlwZT0gdHlwZTsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3RQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0UHJvcDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0UHJvcCAoU3RyaW5nIHRlc3RQcm9wKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0UHJvcCAoKSBjYWxsZWQuLi4gdGVzdFByb3AgPSAiICsgdGVzdFByb3ApOwogICAgICAgICB0aGlzLnRlc3RQcm9wID0gdGVzdFByb3A7CkBAIC03MCw3ICs3MCw3IEBACiAgICAgcHVibGljIEludGVnZXIgZ2V0VGVzdEludGVnZXJQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0SW50ZWdlclByb3A7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdEludGVnZXJQcm9wIChJbnRlZ2VyIHRlc3RQcm9wMSkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdEludGVnZXJQcm9wICgpIGNhbGxlZC4uLiB0ZXN0SW50ZWdlclByb3AgPSAiICsgdGVzdFByb3AxKTsKICAgICAgICAgdGhpcy50ZXN0SW50ZWdlclByb3AgPSB0ZXN0UHJvcDE7CkBAIC05NCw3ICs5NCw3IEBACiAKICAgICAgIH0KIAotICAgfSAKKyAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkZWJ1ZyAoU3RyaW5nIG1lc3NhZ2UpCiAgICAgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCmluZGV4IDZlNTM1M2YuLjNkZjcwNzAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKQEAgLTQwLDkgKzQwLDkgQEAKIC8qKgogICogVGhpcyBpcyBhIHNhbXBsZSByZXNvdXJjZSBhZGFwdGVyCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsIAorcHVibGljIGNsYXNzIFNpbXBsZVJlc291cmNlQWRhcHRlckltcGwKIGltcGxlbWVudHMgUmVzb3VyY2VBZGFwdGVyLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIEJvb3RzdHJhcENvbnRleHQgY3R4OwpAQCAtNTgsNyArNTgsNyBAQAogCiAgICAgcHVibGljIHZvaWQKICAgICBzdGFydChCb290c3RyYXBDb250ZXh0IGN0eCkgdGhyb3dzIFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiMDAxLiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKIAogICAgICAgICB0aGlzLmN0eCA9IGN0eDsKQEAgLTY4LDIxICs2OCwyMSBAQAogCiAgICAgICAgIC8vdGVzdGluZyBjcmVhdCB0aW1lcgogICAgICAgICBUaW1lciB0aW1lciA9IG51bGw7Ci0JICB0cnl7Ci0JICAgICAgdGltZXIgPSBjdHguY3JlYXRlVGltZXIoKTsKLQkgIH0gY2F0Y2goVW5hdmFpbGFibGVFeGNlcHRpb24gdWUpIHsKLQkgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIik7Ci0JICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJFcnJvciBmb3JtIGJvb3RzdHJhcCIpOwotCSAgfQorICAgICAgdHJ5eworICAgICAgICAgIHRpbWVyID0gY3R4LmNyZWF0ZVRpbWVyKCk7CisgICAgICB9IGNhdGNoKFVuYXZhaWxhYmxlRXhjZXB0aW9uIHVlKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciIpOworICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiRXJyb3IgZm9ybSBib290c3RyYXAiKTsKKyAgICAgIH0KICAgICAgICAgZGVidWcoIjAwNC4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAKICAgICAgICAgICB0cnkgewotICAgICAgICAgIAorCiAgICAgICAgICAgWEFUZXJtaW5hdG9yIHhhID0gY3R4LmdldFhBVGVybWluYXRvcigpOwotICAgICAgICAgIAorCiAgICAgICAgICAgWGlkIHhpZDEgPSBuZXcgWElEKCk7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgWElEMSA9ICIgKyB4aWQxKTsKLSAgICAgICAgICAKKwogICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHQgZWMgPSBuZXcgRXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgIGVjLnNldFhpZCh4aWQxKTsKICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKQEAgLTkyLDE0ICs5MiwxNCBAQAogICAgICAgICAgIHdtLmRvV29yayhvdXR3LCAxKjEwMDAsIGVjLCBudWxsKTsKICAgICAgICAgICB4YS5jb21taXQoeGlkMSwgdHJ1ZSk7CiAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgCisKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBleCA9ICIgKyBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgIHhhLnJvbGxiYWNrKHhpZDEpOwogICAgICAgICAgIH0KLSAgICAgICAgICAKKwogICAgICAgICAgIFhpZCB4aWQyID0gbmV3IFhJRCgpOwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFhJRDIgPSAiICsgeGlkMik7Ci0gICAgICAgICAgCisKICAgICAgICAgICBlYyA9IG5ldyBFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgZWMuc2V0WGlkKHhpZDIpOwogICAgICAgICAgIGVjLnNldFRyYW5zYWN0aW9uVGltZW91dCg1KjEwMDApOyAvLzUgc2Vjb25kcwpAQCAtMTE2LDcgKzExNiw3IEBACiAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgfQogCi0gICAgICAgIAorCiAgICAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgMzsgaSsrKSB7CiAgICAgICAgICAgVGVzdFdNV29yayB3ID0gbmV3IFRlc3RXTVdvcmsoaSwgZmFsc2UpOwogICAgICAgICAgIHRyeSB7CkBAIC0xMjQsNyArMTI0LDcgQEAKICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUw6IENBVUdIVCBleGNlcHRpb24gOiBpID0gIiArIGkpOwogICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgIH0gCisgICAgICAgICAgfQogICAgICAgICAgIH0KIAogICAgICAgICAgIGZvciAoaW50IGkgPSAzIDsgaSA8IDY7IGkrKykgewpAQCAtMTcyLDcgKzE3Miw3IEBACiAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgfQogICAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIjAwNS4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAgICAgfQogCkBAIC0yMDYsMTMgKzIwNiwxMyBAQAogCiAgICAgcHVibGljIHZvaWQKICAgICBlbmRwb2ludERlYWN0aXZhdGlvbiAoCi0gICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGVuZHBvaW50RmFjdG9yeSwgCisgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGVuZHBvaW50RmFjdG9yeSwKICAgICAgICAgICAgIEFjdGl2YXRpb25TcGVjIHNwZWMpIHsKICAgICAgICAgZGVidWcgKCJlbmRwb2ludERlYWN0aXZhdGlvbiBjYWxsZWQuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgKChXb3JrRGlzcGF0Y2hlcikgd29yaykuc3RvcCgpOwogICAgIH0KLSAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3ROYW1lKCkgewogICAgICAgICByZXR1cm4gdGVzdE5hbWU7CiAgICAgfQpAQCAtMjI4LDcgKzIyOCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsXSA9PT4gIiArIG1lc3NhZ2UpOwogICAgIH0KIAotICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykgCisgICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKQogICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKaW5kZXggYmIwNTUzNC4uZGU5M2JjMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIFRlc3RXTVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtNDIsOCArNDIsOCBAQAogICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlKSB7CiAgICAgICAgIHRoaXMoaWQsIGlzUm9ndWUsIGZhbHNlLCBudWxsKTsKICAgICB9Ci0gICAgCi0gICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUsIAorCisgICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUsCiAgICAgICAgICAgICBib29sZWFuIGRvTmVzdCwgRXhlY3V0aW9uQ29udGV4dCBjdHgpIHsKICAgICAgICAgdGhpcy5pZCA9IGlkOwogICAgICAgICB0aGlzLmlzUm9ndWUgPSBpc1JvZ3VlOwpAQCAtNzcsMTAgKzc3LDEwIEBACiAgICAgICAgICAgICB9IGNhdGNoIChXb3JrRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICAgICAgaWYgKGV4LmdldEVycm9yQ29kZSgpLmVxdWFscygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JrRXhjZXB0aW9uLlRYX0NPTkNVUlJFTlRfV09SS19ESVNBTExPV0VEKSkgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBBU1M6IENBVUdIVCBFWFBFQ1RFRCA9ICIgKyBleC5nZXRFcnJvckNvZGUoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGQUlMOiBDQVVHSFQgVU5FWFBFQ1RFRCA9ICIgKyBleC5nZXRFcnJvckNvZGUoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtOTIsNyArOTIsNyBAQAogICAgICAgICAgICAgICAgIGVjLnNldFRyYW5zYWN0aW9uVGltZW91dCg1KjEwMDApOyAvLzUgc2Vjb25kcwogICAgICAgICAgICAgICAgIHdtLmRvV29yayhuZXN0ZWRXb3JrLCAxKjEwMDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgIkZBSUw6IENBVUdIVCBVTkVYUEVDVEVEID0gIiArIGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCmluZGV4IGFlYzg5YmUuLjc1ZDc1MzAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIFdvcmtEaXNwYXRjaGVyIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTQ0LDExICs0NCwxMSBAQAogICAgIHByaXZhdGUgQWN0aXZhdGlvblNwZWMgc3BlYzsKICAgICBwcml2YXRlIFdvcmtNYW5hZ2VyIHdtOwogICAgIHByaXZhdGUgWEFUZXJtaW5hdG9yIHhhOwotICAgIAorCiAgICAgcHVibGljIFdvcmtEaXNwYXRjaGVyKAogICAgICAgICAgICAgU3RyaW5nIGlkLAogICAgICAgICAgICAgQm9vdHN0cmFwQ29udGV4dCBjdHgsCi0gICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksIAorICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LAogICAgICAgICAgICAgQWN0aXZhdGlvblNwZWMgc3BlYykgewogICAgICAgICB0aGlzLmlkICAgICAgPSBpZDsKICAgICAgICAgdGhpcy5jdHggICAgID0gY3R4OwpAQCAtNjEsNyArNjEsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgZGVidWcoIldBSVQuLi4iKTsKQEAgLTgzLDI2ICs4MywyNiBAQAogICAgICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSk7CiAKICAgICAgICAgICAgICAgICBpZiAoIWZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSkgewogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsgCisgICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsKICAgICAgICAgICAgICAgICAgICAgLy93bS5kb1dvcmsoZCwgMCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwogICAgICAgICAgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG5ldyBGYWtlWEFSZXNvdXJjZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaW50IG51bU9mTWVzc2FnZXMgPSA1OwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2ltcG9ydGluZyB0cmFuc2FjdGlvbgogCiAgICAgICAgICAgICAgICAgICAgIC8vd3JpdGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHQgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7CiAKLSAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPSAKKyAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIldSSVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkRPTkUgV1JJVEUgVE8gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gbnVtT2ZNZXNzYWdlczsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9yb2xsYmFjawogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiREVMRVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xNTAsNyArMTUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIkRFTEVURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTk1LDcgKzE5NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChYQVJlc291cmNlLlhBX09LID09IHhhLnByZXBhcmUoZWMuZ2V0WGlkKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJYQSBQUkVQQVJFL0NPTU1JVC4gRE9ORSBXUklURSBUTyBEQiAiKTsKQEAgLTIwNywxOSArMjA3LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlIGFsbC4KICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCAxLCAiREVMRVRFX0FMTCIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiRE9ORSBERUxFVEUgQUxMIEZST00gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gMDsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yNDYsNyArMjQ2LDcgQEAKICAgICAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC0yNjEsMTQgKzI2MSwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0yOTEsMTMgKzI5MSwxMyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9TbGVlcCBmb3IgNSBzZWNvbmRzCiAgICAgICAgICAgICAvL1RocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoNSoxMDAwKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgLy9Ob3RpZnkgdGhlIGNsaWVudCB0byBjaGVjayB0aGUgcmVzdWx0cwotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnkoKTsgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeSgpOworCiAgICAgICAgICAgICAgICAgLy9XYWl0IHVudGlsIHJlc3VsdHMgYXJlIHZlcmlmaWVkIGJ5IHRoZSBjbGllbnQKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2sud2FpdCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2sud2FpdCgpOwogCiAgICAgICAgICAgICAgICAgaWYgKHN0b3ApIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQppbmRleCAwY2I3N2IyLi4yYmVhMTIxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQpAQCAtMzEsOCArMzEsOCBAQAogICAgIHB1YmxpYyBpbnQgYnJhbmNoUXVhbGlmaWVyOwogICAgIHB1YmxpYyBpbnQgZ2xvYmFsVHhJRDsKIAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OyAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsgCisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7CisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7CiAKICAgICBwdWJsaWMgWElEKCkgewogICAgICAgICBpbnQgZm9vID0gSUQrKzsKQEAgLTUwLDEwICs1MCwxMCBAQAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICAgLy8gSXQgY2FuJ3QgYmUgZXF1YWwKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBvdGhlciA9IChYSUQpbzsgICAgICAgICAgICAgICAgICAgLy8gVGhlIG90aGVyIFhJRCwgbm93IHByb3Blcmx5IGNhc3QKLSAgICAgICAgCi0gICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElEIAorCisgICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElECiAgICAgICAgICAgICAgICAgJiYgdGhpcy5icmFuY2hRdWFsaWZpZXIgPT0gb3RoZXIuYnJhbmNoUXVhbGlmaWVyCiAgICAgICAgICAgICAgICAgJiYgdGhpcy5nbG9iYWxUeElEID09IG90aGVyLmdsb2JhbFR4SUQpIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICAgICAgICAgICJmb3JtYXRJRCgiICAgICArIGZvcm1hdElEICAgICArICIpLCAiICsKICAgICAgICAgICAgICAgICAiYnJhbmNoUXVhbGlmaWVyICgiICsgYnJhbmNoUXVhbGlmaWVyICsgIiksICIgKwogICAgICAgICAgICAgICAgICJnbG9iYWxUeElEKCIgKyBnbG9iYWxUeElEICsgIil9Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9idWlsZC54bWwKaW5kZXggZGRkMDUzZS4uZjA0ZjA5NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvYnVpbGQueG1sCkBAIC0zNiwxOCArMzYsMTggQEAKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjbGVhbi1jb21tb24iPgogICAgPGFudCBkaXI9InNyYyIgaW5oZXJpdEFsbD0iZmFsc2UiIHRhcmdldD0iYWxsIi8+CiAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0ic2ltcGxlbWRiIi8+Ci0JPHBhcmFtIG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgotCTxwYXJhbSBuYW1lPSJnbGFzc2Zpc2gtcmVzb3VyY2VzLWVhci54bWwiIHZhbHVlPSJzcmMvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9InNpbXBsZW1kYiIvPgorICAgIDxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICA8cGFyYW0gbmFtZT0iZ2xhc3NmaXNoLXJlc291cmNlcy1lYXIueG1sIiB2YWx1ZT0ic3JjL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIi8+CiAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0ic2V0dXBKZGJjIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiA8IS0tCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbnBvb2wtY29ubmVjdG9yIj4KLQkgPHBhcmFtIG5hbWU9ImRiLmNsYXNzIiB2YWx1ZT0iY29tLnN1bi5zcWwuamRiY3gub3JhY2xlLk9yYWNsZURhdGFTb3VyY2UiLz4KKyAgICAgPHBhcmFtIG5hbWU9ImRiLmNsYXNzIiB2YWx1ZT0iY29tLnN1bi5zcWwuamRiY3gub3JhY2xlLk9yYWNsZURhdGFTb3VyY2UiLz4KICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtcG9pbnRiYXNlLXBvb2wxIi8+Ci0JIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+CisgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KQEAgLTU3LDcgKzU3LDcgQEAKIC0tPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb25uZWN0b3IiPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJjcmVhdGVkYi5zcWwiLz4KLSAgICAgIDwvYW50Y2FsbD4JCisgICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0idW5zZXRKZGJjIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbAppbmRleCA0YmRjYzZmLi4zMjNjMGVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKQEAgLTkxLDggKzkxLDggQEAKICAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgotCTxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8c2VjdXJpdHktaWRlbnRpdHk+CiAgICAgICAgIDx1c2UtY2FsbGVyLWlkZW50aXR5Lz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKaW5kZXggZTQ2NTc3Zi4uY2I4Y2QyMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgICAgIFRlc3RJbnRlZ2VyUHJvcAogICAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICA8YWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgICAgICAyIAorICAgICAgICAgICAgMgogICAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHk+CiAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWc+CkBAIC04NSw3ICs4NSw3IEBACiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmphdmE6YXBwL2Vpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmphdmE6YXBwL2Vpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxnZW4tY2xhc3Nlcy8+CiAgICAgPC9lamI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKaW5kZXggN2Q3OGM0MS4uODI0ZTAzNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogCiAgICAgcHVibGljIE1lc3NhZ2VDaGVja2VyRUpCKCkge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImJlYW4gY3JlYXRlZCIpOwogICAgICAgICBoZWxkQ29uID0gbnVsbDsKQEAgLTcxLDExICs3MSwxMSBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5nZXRMb2NrT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICAvL1RlbGwgdGhlIHJlc291cmNlIGFkYXB0ZXIgdGhlIGNsaWVudCBpcyByZWFkeSB0byBydW4KLSAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5QWxsKCk7IAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnlBbGwoKTsKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJOT1RJRklFRC4uLiBTVEFSVCBXQUlUSU5HIik7CiAgICAgICAgICAgICAgICAgLy9XYWl0IHVudGlsIGJlaW5nIHRvbGQgdG8gcmVhZCBmcm9tIHRoZSBkYXRhYmFzZQotICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS53YWl0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC04MywyMiArODMsMjIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE1lc3NhZ2VDb3VudCgpIHsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGdldEZyZXNoQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgaW50IGNvdW50MSA9IGdldENvdW50KGNvbik7CiAgICAgICAgICAgICBjb24uY2xvc2UoKTsKLSAgICAgICAgICAgIAotCSAgICAvKgorCisgICAgICAgIC8qCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeSgpOwogICAgICAgICAgICAgfQotCSAgICAqLwotICAgICAgICAgICAgICAgIAorICAgICAgICAqLworCiAgICAgICAgICAgICByZXR1cm4gY291bnQxOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLm91dCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCX0KKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q291bnQoQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtMTI0LDE4ICsxMjQsMTggQEAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIHVzZXIgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvdXNlciIpOwogICAgICAgICAgICAgcGFzc3dvcmQgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvcGFzc3dvcmQiKTsKLQkgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmFwcC9laXMvdGVzdEFkbWluIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTElORyBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKLQkgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExFRCBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKKyAgICAgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmFwcC9laXMvdGVzdEFkbWluIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTElORyBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKKyAgICAgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExFRCBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKIAotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogLyoKICAgICAgICAgdHJ5ewotICAgICAgICAgIAorCiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3QgZHMgPSBpYy5sb29rdXAoImphdmE6YXBwL2pkYmMvYXBwLWxldmVsLXJlc291cmNlIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImphdmE6YXBwL2pkYmMvYXBwLWxldmVsLXJlc291cmNlIDogIiArIGRzKTsKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoY29uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gY29uOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTE4NCw3ICsxODQsNyBAQAogICAgICAgICAgICAgdGhyb3cgZXgxOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGNsb3NlQ29ubmVjdGlvbihDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmIChoZWxkQ29uICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwppbmRleCBkYWQyMDdiLi4wYjM4YzE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIGVqYi1qYXIueG1sPU1FVEEtSU5GL2VqYi1qYXIueG1sCiBzdW4tZWpiLWphci54bWw9TUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDA1YzQyNjUuLmVjNzdjZTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw0NSArMjgsNDUgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgLy9zdXBlcihhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBkb1Rlc3QoKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCBjb25uZWN0b3IgMS41ICIrCi0JICAgICAgICAgICAgICJjb250cmFjdHMuIik7Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAiY29udHJhY3RzLiIpOworCiAgICAgICAgIFN0cmluZyByZXMgPSAiTk9UIFJVTiI7Ci0JZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CisgICAgZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CiAgICAgICAgIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmVzICA9ICJBTEwgVEVTVFMgUEFTU0VEIjsKLQkgICAgaW50IHRlc3RDb3VudCA9IDE7CisgICAgICAgIGludCB0ZXN0Q291bnQgPSAxOwogICAgICAgICAgICAgd2hpbGUgKCFkb25lKCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKICAgICAgICAgICAgICAgICBpZiAoIWRvbmUoKSkgewogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiUnVubmluZy4uLiIpOwogICAgICAgICAgICAgICAgICAgICBwYXNzID0gY2hlY2tSZXN1bHRzKGV4cGVjdGVkUmVzdWx0cygpKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkdvdCBleHBlY3RlZCByZXN1bHRzID0gIiArIHBhc3MpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RvIG5vdCBjb250aW51ZSBpZiBvbmUgdGVzdCBmYWlsZWQKICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXNzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSAiU09NRSBURVNUUyBGQUlMRUQiOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIiBDb25uZWN0b3IgMS41IHRlc3QgLSAiICsgdGVzdENvdW50LCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIiBDb25uZWN0b3IgMS41IHRlc3QgLSAiICsgdGVzdENvdW50LCBzdGF0LlBBU1MpOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLQkJdGVzdENvdW50ICsrOworICAgICAgICB0ZXN0Q291bnQgKys7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC03NiwxNCArNzYsMTQgQEAKICAgICAgICAgfQogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgic2ltcGxlbWRiIik7CiAKLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkVYSVRJTkcuLi4gU1RBVFVTID0gIiArIHJlcyk7CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrUmVzdWx0cyhpbnQgbnVtKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgaW50IHJlc3VsdCA9IGNoZWNrZXIuZ2V0TWVzc2FnZUNvdW50KCk7CkBAIC05Miw3ICs5Miw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gZG9uZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gY2hlY2tlci5kb25lKCk7CkBAIC0xMDAsNyArMTAwLDcgQEAKIAogICAgIHByaXZhdGUgaW50IGV4cGVjdGVkUmVzdWx0cygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gY2hlY2tlci5leHBlY3RlZFJlc3VsdHMoKTsKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIG5vdGlmeUFuZFdhaXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgY2hlY2tlci5ub3RpZnlBbmRXYWl0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKaW5kZXggZWE5MTlkYy4uY2JkNzA5NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQpAQCAtMjksNDEgKzI5LDQxIEBACiAKIC8qKgogICovCi1wdWJsaWMgY2xhc3MgTXlNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLCAKK3B1YmxpYyBjbGFzcyBNeU1lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sCiAgICAgICAgIE15TWVzc2FnZUxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgdHJhbnNpZW50IE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYyA9IG51bGw7CiAgICAgcHJpdmF0ZSBDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3Rvciwgd2hpY2ggaXMgcHVibGljIGFuZCB0YWtlcyBubyBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIE15TWVzc2FnZUJlYW4oKSB7fQogCiAgICAgLyoqCi0gICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCAKLSAgICAgKiBub3QgZmluYWwgb3Igc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCAKKyAgICAgKiBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0CisgICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQKICAgICAgKiB3aXRoIG9uZSBhcmd1bWVudCBvZiB0eXBlIGpha2FydGEuZWpiLk1lc3NhZ2VEcml2ZW5Db250ZXh0LgogICAgICAqCiAgICAgICogQHBhcmFtIG1kYyAgICB0aGUgY29udGV4dCB0byBzZXQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dChNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMpIHsKLQl0aGlzLm1kYyA9IG1kYzsKKyAgICB0aGlzLm1kYyA9IG1kYzsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCi0gICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vIAorICAgICAqIGVqYkNyZWF0ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgorICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubwogICAgICAqIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7IH0KIAogICAgIC8qKgotICAgICAqIG9uTWVzc2FnZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKKyAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKICAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggb25lIGFyZ3VtZW50CiAgICAgICogb2YgdHlwZSBqYWthcnRhLmptcy5NZXNzYWdlLgogICAgICAqCi0gICAgICogQ2FzdHMgdGhlIGluY29taW5nIE1lc3NhZ2UgdG8gYSBUZXh0TWVzc2FnZSBhbmQgZGlzcGxheXMgCisgICAgICogQ2FzdHMgdGhlIGluY29taW5nIE1lc3NhZ2UgdG8gYSBUZXh0TWVzc2FnZSBhbmQgZGlzcGxheXMKICAgICAgKiB0aGUgdGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBpbk1lc3NhZ2UgICAgdGhlIGluY29taW5nIG1lc3NhZ2UKQEAgLTc0LDcgKzc0LDcgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiV1JJVEUiKSkgewotICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiV1JJVEUiLCAKKyAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGluTWVzc2FnZS5zdWJzdHJpbmcoMCwgaW5NZXNzYWdlLmxhc3RJbmRleE9mKCI6IikpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5NZXNzYWdlLmVuZHNXaXRoKCJERUxFVEUiKSkgewogICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiREVMRVRFIiwKQEAgLTkwLDEwICs5MCwxMCBAQAogICAgICAgICB9CiAKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBlamJSZW1vdmUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCi0gICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vIAorICAgICAqIGVqYlJlbW92ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgorICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubwogICAgICAqIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQpAQCAtMTAzLDYzICsxMDMsNjMgQEAKIAogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIFN0cmluZyBpZCAgICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKDAsIG1lc3NhZ2UuaW5kZXhPZigiOiIpKTsKLSAgICAgICAgU3RyaW5nIGJvZHkgID0gbWVzc2FnZS5zdWJzdHJpbmcobWVzc2FnZS5pbmRleE9mKCI6IikrMSk7IAorICAgICAgICBTdHJpbmcgYm9keSAgPSBtZXNzYWdlLnN1YnN0cmluZyhtZXNzYWdlLmluZGV4T2YoIjoiKSsxKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoIlJFQUQiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJSZWFkaW5nIHJvdyBmcm9tIGRhdGFiYXNlLi4uIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9IAorICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0KICAgICAgICAgICAgICAgICAgICJTRUxFQ1QgaWQgZnJvbSBtZXNzYWdlcyB3aGVyZSBpZCA9ICdRUSciOwogICAgICAgICAgICAgICAgICAgUmVzdWx0U2V0IHJlc3VsdHMgPSBzdG10LmV4ZWN1dGVRdWVyeShxdWVyeSk7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArIAorICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJRUSBoYXMgYmFsYW5jZSAiICsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuZ2V0SW50KCJiYWxhbmNlIikgKyAiIGRvbGxhcnMiKTsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgIHN0bXQuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlYWQgb25lIGFjY291bnRcbiIpOwogICAgICAgICAgICAgICAgICovCiAKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIldSSVRFIi5lcXVhbHMob3ApKSB7CiAKICAgICAgICAgICAgICAgICBkZWJ1ZygiSW5zZXJ0aW5nIG9uZSBtZXNzYWdlIGluIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmFwcC9qZGJjL1hBUG9pbnRiYXNlIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGNyZWF0ZVJvdyhpZCwgYm9keSwgZGJDb25uZWN0aW9uKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgb25lIG1lc3NhZ2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJERUxFVEUiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBvbmUgbWVzc2FnZSBmcm9tIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTphcHAvamRiYy9YQVBvaW50YmFzZSIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWxldGVSb3coaWQsIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWxldGVkIG9uZSBtZXNzYWdlXG4iKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIkRFTEVURV9BTEwiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBhbGwgbWVzc2FnZXMgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6YXBwL2pkYmMvWEFQb2ludGJhc2UiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CkBAIC0xNzAsNyArMTcwLDcgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy91bnN1cHBvcnRlZCBvcAogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfWZpbmFsbHl7CiAgICAgICAgICAgICB0cnl7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uLmNsb3NlKCk7CkBAIC0xNzksOSArMTc5LDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgY3JlYXRlUm93KFN0cmluZyBpZCwgU3RyaW5nIGJvZHksIAotICAgICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorCisgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVJvdyhTdHJpbmcgaWQsIFN0cmluZyBib2R5LAorICAgICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIC8vIENyZWF0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQpAQCAtMTk3LDkgKzE5Nyw5IEBACiAgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlUm93KFN0cmluZyBpZCwgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVSb3coU3RyaW5nIGlkLCBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIERlbGV0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQogICAgICAgICBkZWJ1ZygiRGVsZXRlUm93IHdpdGggSUQgPSAiICsgaWQpOwogICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKQEAgLTIxMiw5ICsyMTIsOSBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUFsbChqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUFsbChqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIERlbGV0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQogICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gIkRFTEVURSBGUk9NIG1lc3NhZ2VzIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2J1aWxkLnhtbAppbmRleCA4YjAzODBlLi5hMDY4ZTFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYnVpbGQueG1sCkBAIC02Miw3ICs2Miw3IEBACiAKICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9InNpbXBsZW1kYiIgLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9InNpbXBsZW1kYiIgLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9NRVRBLUlORi9yYS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9NRVRBLUlORi9yYS54bWwKaW5kZXggMmNhMmViYy4uMjFkZWI5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvTUVUQS1JTkYvcmEueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL01FVEEtSU5GL3JhLnhtbApAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8aW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPgogICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXI+CiAgICAgICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXItdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lcgpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYy1jbGFzcz4KICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYz4KICAgICAgICAgICAgICAgICA8L21lc3NhZ2VsaXN0ZW5lcj4KLSAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4KICAgICAgICAgPC9pbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KICAgICAgICAgPGFkbWlub2JqZWN0PgogICAgICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L2FkbWlub2JqZWN0LWludGVyZmFjZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvYnVpbGQueG1sCmluZGV4IDJiNzc0ODkuLjc4Mzk5MWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2J1aWxkLnhtbApAQCAtMzAsOCArMzAsOCBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+Ci0JPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KKyAgICA8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgorICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxqYXIgamFyZmlsZT0iLi4vZ2VuZXJpYy1yYS5qYXIiIGJhc2VkaXI9ImNsYXNzZXMiCiAgICAgICAgICBpbmNsdWRlcz0iY29ubmVjdG9yLyouY2xhc3MiIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKaW5kZXggNTU1MzNkNC4uZjU5YjJiMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIENvbnRyb2xzIHsKICAgICBwdWJsaWMgc3RhdGljIE9iamVjdCByZWFkeUxvY2sgPSBuZXcgT2JqZWN0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQppbmRleCA2NTgyMzNlLi5kNzNjODYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBEZWxpdmVyeVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtMzYsNyArMzYsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIG9wOwogICAgIHByaXZhdGUgYm9vbGVhbiBrZWVwQ291bnQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ZXIgPSAwOwotICAgIAorCiAgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCBTdHJpbmcgb3ApIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIHRoaXMua2VlcENvdW50ID0gZmFsc2U7CiAgICAgfQogCi0gICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCAKKyAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsCiAgICAgICAgICAgICBTdHJpbmcgb3AsIGJvb2xlYW4ga2VlcENvdW50KSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNTUsNyArNTUsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwogICAgICAgICAgICAgLy9lcC5iZWZvcmVEZWxpdmVyeShvbk1lc3NhZ2UpOwpAQCAtNzgsMTEgKzc4LDExIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vZXAuYWZ0ZXJEZWxpdmVyeSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTkzLDE0ICs5MywxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCmluZGV4IDEwMGNhY2UuLmZhOTNmNjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLmZvcmdldDogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgIH0KQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnByZXBhcmU6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICAgICAgcmV0dXJuIFhBUmVzb3VyY2UuWEFfT0s7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5yZWNvdmVyOiAiICsgZmxhZ1RvU3RyaW5nKGZsYWcpKTsKICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc3RhcnQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2Uuc3RhcnQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpICsgIiwiICsKICAgICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQppbmRleCBiNWIwZjAyLi40YzljMDEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAvKioKICAqIGNvbGxlY3Rpb24gb2YgbWVzc2FnZXMuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CiAKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICBTdHJpbmcgY29tbWFuZCAgPSBhcmdzWzBdOwogICAgICAgIFN0cmluZyBkZXN0TmFtZSA9IGFyZ3NbMV07CiAgICAgICAgU3RyaW5nIG1lc3NhZ2UgID0gYXJnc1syXTsKLSAgIAorCiAgICAgICAgaWYgKCEiYWRkIi5lcXVhbHMoY29tbWFuZCkpIHsKICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQppbmRleCAxMDQ4M2VkLi4xZDAyYzYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQpAQCAtMzgsMTMgKzM4LDEzIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKICAgICAgICAgaWYgKHJlc2V0Q29udHJvbC5lcXVhbHMoIkJFR0lOTklORyIpKSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLnJlYWR5TG9jayl7CiAgICAgICAgICAgICAgICAgQ29udHJvbHMuZG9uZT1mYWxzZTsKICAgICAgICAgICAgIH0KLQkgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKLQl9CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGRvbmUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKaW5kZXggODE4MmVmNS4uM2ZjZTU0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQpAQCAtMjQsOSArMjQsOSBAQAogICogc28gdGhhdCB0aGUgYXBwIHNlcnZlciBjYW4gaW5zdGFudGlhdGUgYW5kIGNvbmZpZ3VyZQogICogaXQgYXQgdGhlIHJ1bnRpbWUuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYyAKK3B1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYwogICAgIGltcGxlbWVudHMgQWN0aXZhdGlvblNwZWMsIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByaXZhdGUgU3RyaW5nIGRlc3RpbmF0aW9uTmFtZTsKQEAgLTQzLDcgKzQzLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uTmFtZSAoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uTmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvbk5hbWUgKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvbk5hbWUoKSBjYWxsZWQuLi4gbmFtZSA9ICIgKyBuYW1lKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbk5hbWUgPSBuYW1lOwpAQCAtNTIsNyArNTIsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25UeXBlKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvblR5cGU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25UeXBlIChTdHJpbmcgdHlwZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25UeXBlICgpIGNhbGxlZC4uLiB0eXBlID0gIiArIHR5cGUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uVHlwZT0gdHlwZTsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3RQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0UHJvcDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0UHJvcCAoU3RyaW5nIHRlc3RQcm9wKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0UHJvcCAoKSBjYWxsZWQuLi4gdGVzdFByb3AgPSAiICsgdGVzdFByb3ApOwogICAgICAgICB0aGlzLnRlc3RQcm9wID0gdGVzdFByb3A7CkBAIC03MCw3ICs3MCw3IEBACiAgICAgcHVibGljIEludGVnZXIgZ2V0VGVzdEludGVnZXJQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0SW50ZWdlclByb3A7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdEludGVnZXJQcm9wIChJbnRlZ2VyIHRlc3RQcm9wMSkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdEludGVnZXJQcm9wICgpIGNhbGxlZC4uLiB0ZXN0SW50ZWdlclByb3AgPSAiICsgdGVzdFByb3AxKTsKICAgICAgICAgdGhpcy50ZXN0SW50ZWdlclByb3AgPSB0ZXN0UHJvcDE7CkBAIC05NCw3ICs5NCw3IEBACiAKICAgICAgIH0KIAotICAgfSAKKyAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkZWJ1ZyAoU3RyaW5nIG1lc3NhZ2UpCiAgICAgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQppbmRleCA2ZTUzNTNmLi4zZGY3MDcwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQpAQCAtNDAsOSArNDAsOSBAQAogLyoqCiAgKiBUaGlzIGlzIGEgc2FtcGxlIHJlc291cmNlIGFkYXB0ZXIKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwotcHVibGljIGNsYXNzIFNpbXBsZVJlc291cmNlQWRhcHRlckltcGwgCitwdWJsaWMgY2xhc3MgU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbAogaW1wbGVtZW50cyBSZXNvdXJjZUFkYXB0ZXIsIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByaXZhdGUgQm9vdHN0cmFwQ29udGV4dCBjdHg7CkBAIC01OCw3ICs1OCw3IEBACiAKICAgICBwdWJsaWMgdm9pZAogICAgIHN0YXJ0KEJvb3RzdHJhcENvbnRleHQgY3R4KSB0aHJvd3MgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCIwMDEuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogCiAgICAgICAgIHRoaXMuY3R4ID0gY3R4OwpAQCAtNjgsMjEgKzY4LDIxIEBACiAKICAgICAgICAgLy90ZXN0aW5nIGNyZWF0IHRpbWVyCiAgICAgICAgIFRpbWVyIHRpbWVyID0gbnVsbDsKLQkgIHRyeXsKLQkgICAgICB0aW1lciA9IGN0eC5jcmVhdGVUaW1lcigpOwotCSAgfSBjYXRjaChVbmF2YWlsYWJsZUV4Y2VwdGlvbiB1ZSkgewotCSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IiKTsKLQkgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIGZvcm0gYm9vdHN0cmFwIik7Ci0JICB9CisgICAgICB0cnl7CisgICAgICAgICAgdGltZXIgPSBjdHguY3JlYXRlVGltZXIoKTsKKyAgICAgIH0gY2F0Y2goVW5hdmFpbGFibGVFeGNlcHRpb24gdWUpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIik7CisgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJFcnJvciBmb3JtIGJvb3RzdHJhcCIpOworICAgICAgfQogICAgICAgICBkZWJ1ZygiMDA0LiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKIAogICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgCisKICAgICAgICAgICBYQVRlcm1pbmF0b3IgeGEgPSBjdHguZ2V0WEFUZXJtaW5hdG9yKCk7Ci0gICAgICAgICAgCisKICAgICAgICAgICBYaWQgeGlkMSA9IG5ldyBYSUQoKTsKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBYSUQxID0gIiArIHhpZDEpOwotICAgICAgICAgIAorCiAgICAgICAgICAgRXhlY3V0aW9uQ29udGV4dCBlYyA9IG5ldyBFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgZWMuc2V0WGlkKHhpZDEpOwogICAgICAgICAgIGVjLnNldFRyYW5zYWN0aW9uVGltZW91dCg1KjEwMDApOyAvLzUgc2Vjb25kcwpAQCAtOTIsMTQgKzkyLDE0IEBACiAgICAgICAgICAgd20uZG9Xb3JrKG91dHcsIDEqMTAwMCwgZWMsIG51bGwpOwogICAgICAgICAgIHhhLmNvbW1pdCh4aWQxLCB0cnVlKTsKICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAKKwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIGV4ID0gIiArIGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgeGEucm9sbGJhY2soeGlkMSk7CiAgICAgICAgICAgfQotICAgICAgICAgIAorCiAgICAgICAgICAgWGlkIHhpZDIgPSBuZXcgWElEKCk7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgWElEMiA9ICIgKyB4aWQyKTsKLSAgICAgICAgICAKKwogICAgICAgICAgIGVjID0gbmV3IEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICBlYy5zZXRYaWQoeGlkMik7CiAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCkBAIC0xMTYsNyArMTE2LDcgQEAKICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICB9CiAKLSAgICAgICAgCisKICAgICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCAzOyBpKyspIHsKICAgICAgICAgICBUZXN0V01Xb3JrIHcgPSBuZXcgVGVzdFdNV29yayhpLCBmYWxzZSk7CiAgICAgICAgICAgdHJ5IHsKQEAgLTEyNCw3ICsxMjQsNyBAQAogICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRkFJTDogQ0FVR0hUIGV4Y2VwdGlvbiA6IGkgPSAiICsgaSk7CiAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgfSAKKyAgICAgICAgICB9CiAgICAgICAgICAgfQogCiAgICAgICAgICAgZm9yIChpbnQgaSA9IDMgOyBpIDwgNjsgaSsrKSB7CkBAIC0xNzIsNyArMTcyLDcgQEAKICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICB9CiAgICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiMDA1LiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKICAgICB9CiAKQEAgLTIwNiwxMyArMjA2LDEzIEBACiAKICAgICBwdWJsaWMgdm9pZAogICAgIGVuZHBvaW50RGVhY3RpdmF0aW9uICgKLSAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZW5kcG9pbnRGYWN0b3J5LCAKKyAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZW5kcG9pbnRGYWN0b3J5LAogICAgICAgICAgICAgQWN0aXZhdGlvblNwZWMgc3BlYykgewogICAgICAgICBkZWJ1ZyAoImVuZHBvaW50RGVhY3RpdmF0aW9uIGNhbGxlZC4uLiIpOwotICAgICAgICAKKwogICAgICAgICAoKFdvcmtEaXNwYXRjaGVyKSB3b3JrKS5zdG9wKCk7CiAgICAgfQotICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdE5hbWUoKSB7CiAgICAgICAgIHJldHVybiB0ZXN0TmFtZTsKICAgICB9CkBAIC0yMjgsNyArMjI4LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NpbXBsZVJlc291cmNlQWRhcHRlckltcGxdID09PiAiICsgbWVzc2FnZSk7CiAgICAgfQogCi0gICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKSAKKyAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpCiAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKaW5kZXggYmIwNTUzNC4uZGU5M2JjMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBUZXN0V01Xb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTQyLDggKzQyLDggQEAKICAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSkgewogICAgICAgICB0aGlzKGlkLCBpc1JvZ3VlLCBmYWxzZSwgbnVsbCk7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLCAKKworICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLAogICAgICAgICAgICAgYm9vbGVhbiBkb05lc3QsIEV4ZWN1dGlvbkNvbnRleHQgY3R4KSB7CiAgICAgICAgIHRoaXMuaWQgPSBpZDsKICAgICAgICAgdGhpcy5pc1JvZ3VlID0gaXNSb2d1ZTsKQEAgLTc3LDEwICs3NywxMCBAQAogICAgICAgICAgICAgfSBjYXRjaCAoV29ya0V4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIGlmIChleC5nZXRFcnJvckNvZGUoKS5lcXVhbHMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya0V4Y2VwdGlvbi5UWF9DT05DVVJSRU5UX1dPUktfRElTQUxMT1dFRCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQVNTOiBDQVVHSFQgRVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKICAgICAgICAgICAgICAgICB3bS5kb1dvcmsobmVzdGVkV29yaywgMSoxMDAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICJGQUlMOiBDQVVHSFQgVU5FWFBFQ1RFRCA9ICIgKyBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKaW5kZXggYWVjODliZS4uNzVkNzUzMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIFdvcmtEaXNwYXRjaGVyIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTQ0LDExICs0NCwxMSBAQAogICAgIHByaXZhdGUgQWN0aXZhdGlvblNwZWMgc3BlYzsKICAgICBwcml2YXRlIFdvcmtNYW5hZ2VyIHdtOwogICAgIHByaXZhdGUgWEFUZXJtaW5hdG9yIHhhOwotICAgIAorCiAgICAgcHVibGljIFdvcmtEaXNwYXRjaGVyKAogICAgICAgICAgICAgU3RyaW5nIGlkLAogICAgICAgICAgICAgQm9vdHN0cmFwQ29udGV4dCBjdHgsCi0gICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksIAorICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LAogICAgICAgICAgICAgQWN0aXZhdGlvblNwZWMgc3BlYykgewogICAgICAgICB0aGlzLmlkICAgICAgPSBpZDsKICAgICAgICAgdGhpcy5jdHggICAgID0gY3R4OwpAQCAtNjEsNyArNjEsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgZGVidWcoIldBSVQuLi4iKTsKQEAgLTgzLDI2ICs4MywyNiBAQAogICAgICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSk7CiAKICAgICAgICAgICAgICAgICBpZiAoIWZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSkgewogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsgCisgICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsKICAgICAgICAgICAgICAgICAgICAgLy93bS5kb1dvcmsoZCwgMCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwogICAgICAgICAgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG5ldyBGYWtlWEFSZXNvdXJjZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaW50IG51bU9mTWVzc2FnZXMgPSA1OwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2ltcG9ydGluZyB0cmFuc2FjdGlvbgogCiAgICAgICAgICAgICAgICAgICAgIC8vd3JpdGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHQgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7CiAKLSAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPSAKKyAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIldSSVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkRPTkUgV1JJVEUgVE8gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gbnVtT2ZNZXNzYWdlczsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9yb2xsYmFjawogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiREVMRVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xNTAsNyArMTUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIkRFTEVURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTk1LDcgKzE5NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChYQVJlc291cmNlLlhBX09LID09IHhhLnByZXBhcmUoZWMuZ2V0WGlkKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJYQSBQUkVQQVJFL0NPTU1JVC4gRE9ORSBXUklURSBUTyBEQiAiKTsKQEAgLTIwNywxOSArMjA3LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlIGFsbC4KICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCAxLCAiREVMRVRFX0FMTCIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiRE9ORSBERUxFVEUgQUxMIEZST00gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gMDsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yNDYsNyArMjQ2LDcgQEAKICAgICAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC0yNjEsMTQgKzI2MSwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0yOTEsMTMgKzI5MSwxMyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9TbGVlcCBmb3IgNSBzZWNvbmRzCiAgICAgICAgICAgICAvL1RocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoNSoxMDAwKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgLy9Ob3RpZnkgdGhlIGNsaWVudCB0byBjaGVjayB0aGUgcmVzdWx0cwotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnkoKTsgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeSgpOworCiAgICAgICAgICAgICAgICAgLy9XYWl0IHVudGlsIHJlc3VsdHMgYXJlIHZlcmlmaWVkIGJ5IHRoZSBjbGllbnQKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2sud2FpdCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2sud2FpdCgpOwogCiAgICAgICAgICAgICAgICAgaWYgKHN0b3ApIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKaW5kZXggMGNiNzdiMi4uMmJlYTEyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCkBAIC0zMSw4ICszMSw4IEBACiAgICAgcHVibGljIGludCBicmFuY2hRdWFsaWZpZXI7CiAgICAgcHVibGljIGludCBnbG9iYWxUeElEOwogCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7IAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OyAKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsKIAogICAgIHB1YmxpYyBYSUQoKSB7CiAgICAgICAgIGludCBmb28gPSBJRCsrOwpAQCAtNTAsMTAgKzUwLDEwIEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAvLyBJdCBjYW4ndCBiZSBlcXVhbAogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG90aGVyID0gKFhJRClvOyAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3RoZXIgWElELCBub3cgcHJvcGVybHkgY2FzdAotICAgICAgICAKLSAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQgCisKKyAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQKICAgICAgICAgICAgICAgICAmJiB0aGlzLmJyYW5jaFF1YWxpZmllciA9PSBvdGhlci5icmFuY2hRdWFsaWZpZXIKICAgICAgICAgICAgICAgICAmJiB0aGlzLmdsb2JhbFR4SUQgPT0gb3RoZXIuZ2xvYmFsVHhJRCkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgICAgICAgICAgImZvcm1hdElEKCIgICAgICsgZm9ybWF0SUQgICAgICsgIiksICIgKwogICAgICAgICAgICAgICAgICJicmFuY2hRdWFsaWZpZXIgKCIgKyBicmFuY2hRdWFsaWZpZXIgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImdsb2JhbFR4SUQoIiArIGdsb2JhbFR4SUQgKyAiKX0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHM7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2FwcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2FwcC9idWlsZC54bWwKaW5kZXggY2QwZDE5My4uNjdiOTgyOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9hcHAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvYXBwL2J1aWxkLnhtbApAQCAtMzYsMTYgKzM2LDE2IEBACiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgY2xlYW4tY29tbW9uIj4KICAgIDxhbnQgZGlyPSJzcmMiIGluaGVyaXRBbGw9ImZhbHNlIiB0YXJnZXQ9ImFsbCIvPgogICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9InNpbXBsZW1kYiIvPgotCTxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9InNpbXBsZW1kYiIvPgorICAgIDxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJzZXR1cEpkYmMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25wb29sLWNvbm5lY3RvciI+Ci0JIDxwYXJhbSBuYW1lPSJkYi5jbGFzcyIgdmFsdWU9Im9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnRYQURhdGFTb3VyY2UiLz4KKyAgICAgPHBhcmFtIG5hbWU9ImRiLmNsYXNzIiB2YWx1ZT0ib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudFhBRGF0YVNvdXJjZSIvPgogICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1wb2ludGJhc2UtcG9vbDEiLz4KLQkgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UudHlwZSIgdmFsdWU9ImphdmF4LnNxbC5YQURhdGFTb3VyY2UiLz4KKyAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UudHlwZSIgdmFsdWU9ImphdmF4LnNxbC5YQURhdGFTb3VyY2UiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgpAQCAtNTUsNyArNTUsNyBAQAogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbm5lY3RvciI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9ImNyZWF0ZWRiLnNxbCIvPgotICAgICAgPC9hbnRjYWxsPgkKKyAgICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJ1bnNldEpkYmMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbAppbmRleCA0YmRjYzZmLi4zMjNjMGVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCkBAIC05MSw4ICs5MSw4IEBACiAgICAgICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KLQk8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CisgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+CisgICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPHNlY3VyaXR5LWlkZW50aXR5PgogICAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eS8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAppbmRleCAxMTQ2YTVhLi4wYTdlMGRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgICAgIFRlc3RJbnRlZ2VyUHJvcAogICAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICA8YWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgICAgICAyIAorICAgICAgICAgICAgMgogICAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHk+CiAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWc+CkBAIC04NSw3ICs4NSw3IEBACiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmVpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmVpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxnZW4tY2xhc3Nlcy8+CiAgICAgPC9lamI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCmluZGV4IGI1MGQ3ZTQuLjU0MjllYTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAKICAgICBwdWJsaWMgTWVzc2FnZUNoZWNrZXJFSkIoKSB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYmVhbiBjcmVhdGVkIik7CiAgICAgICAgIGhlbGRDb24gPSBudWxsOwpAQCAtNzEsMTEgKzcxLDExIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLmdldExvY2tPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIC8vVGVsbCB0aGUgcmVzb3VyY2UgYWRhcHRlciB0aGUgY2xpZW50IGlzIHJlYWR5IHRvIHJ1bgotICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnlBbGwoKTsgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeUFsbCgpOworCiAgICAgICAgICAgICAgICAgZGVidWcoIk5PVElGSUVELi4uIFNUQVJUIFdBSVRJTkciKTsKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgYmVpbmcgdG9sZCB0byByZWFkIGZyb20gdGhlIGRhdGFiYXNlCi0gICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTgzLDIyICs4MywyMiBAQAogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TWVzc2FnZUNvdW50KCkgewotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgIENvbm5lY3Rpb24gY29uID0gZ2V0RnJlc2hDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBpbnQgY291bnQxID0gZ2V0Q291bnQoY29uKTsKICAgICAgICAgICAgIGNvbi5jbG9zZSgpOwotICAgICAgICAgICAgCi0JICAgIC8qCisKKyAgICAgICAgLyoKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5nZXRMb2NrT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5KCk7CiAgICAgICAgICAgICB9Ci0JICAgICovCi0gICAgICAgICAgICAgICAgCisgICAgICAgICovCisKICAgICAgICAgICAgIHJldHVybiBjb3VudDE7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0ub3V0KTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JfQorICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIGludCBnZXRDb3VudChDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CkBAIC0xMjQsMTAgKzEyNCwxMCBAQAogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgdXNlciA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi91c2VyIik7CiAgICAgICAgICAgICBwYXNzd29yZCA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9wYXNzd29yZCIpOwotCSAgICBDb250cm9scyA9IChNeUFkbWluT2JqZWN0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL3Rlc3RBZG1pbiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExJTkcgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7Ci0JICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMRUQgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7CisgICAgICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvdGVzdEFkbWluIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTElORyBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKKyAgICAgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExFRCBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMTYyLDcgKzE2Miw3IEBACiAgICAgICAgICAgICBkZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChjb24gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBjb247CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgICAgICAgICB0aHJvdyBleDE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgY2xvc2VDb25uZWN0aW9uKENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgaWYgKGhlbGRDb24gIT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwppbmRleCBkYWQyMDdiLi4wYjM4YzE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2FwcC9zcmMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiBlamItamFyLnhtbD1NRVRBLUlORi9lamItamFyLnhtbAogc3VuLWVqYi1qYXIueG1sPU1FVEEtSU5GL3N1bi1lamItamFyLnhtbApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYmJkZWNmYS4uMjQyODBkOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw0NSArMjgsNDUgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgLy9zdXBlcihhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBkb1Rlc3QoKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCBjb25uZWN0b3IgMS41ICIrCi0JICAgICAgICAgICAgICJjb250cmFjdHMuIik7Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAiY29udHJhY3RzLiIpOworCiAgICAgICAgIFN0cmluZyByZXMgPSAiTk9UIFJVTiI7Ci0JZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CisgICAgZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CiAgICAgICAgIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmVzICA9ICJBTEwgVEVTVFMgUEFTU0VEIjsKLQkgICAgaW50IHRlc3RDb3VudCA9IDE7CisgICAgICAgIGludCB0ZXN0Q291bnQgPSAxOwogICAgICAgICAgICAgd2hpbGUgKCFkb25lKCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKICAgICAgICAgICAgICAgICBpZiAoIWRvbmUoKSkgewogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiUnVubmluZy4uLiIpOwogICAgICAgICAgICAgICAgICAgICBwYXNzID0gY2hlY2tSZXN1bHRzKGV4cGVjdGVkUmVzdWx0cygpKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkdvdCBleHBlY3RlZCByZXN1bHRzID0gIiArIHBhc3MpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RvIG5vdCBjb250aW51ZSBpZiBvbmUgdGVzdCBmYWlsZWQKICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXNzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSAiU09NRSBURVNUUyBGQUlMRUQiOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIklEIENvbm5lY3RvciAxLjUgdGVzdCAtICIgKyB0ZXN0Q291bnQsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiSUQgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gIiArIHRlc3RDb3VudCwgc3RhdC5QQVNTKTsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0JCXRlc3RDb3VudCArKzsKKyAgICAgICAgdGVzdENvdW50ICsrOwogICAgICAgICAgICAgfQogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNzYsMTQgKzc2LDE0IEBACiAgICAgICAgIH0KICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImNvbm5lY3RvcjEuNUlEIik7CiAKLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkVYSVRJTkcuLi4gU1RBVFVTID0gIiArIHJlcyk7CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrUmVzdWx0cyhpbnQgbnVtKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgaW50IHJlc3VsdCA9IGNoZWNrZXIuZ2V0TWVzc2FnZUNvdW50KCk7CkBAIC05Miw3ICs5Miw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gZG9uZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gY2hlY2tlci5kb25lKCk7CkBAIC0xMDAsNyArMTAwLDcgQEAKIAogICAgIHByaXZhdGUgaW50IGV4cGVjdGVkUmVzdWx0cygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gY2hlY2tlci5leHBlY3RlZFJlc3VsdHMoKTsKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIG5vdGlmeUFuZFdhaXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgY2hlY2tlci5ub3RpZnlBbmRXYWl0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGI3ZDQ0M2IuLmNkOWYxMDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCkBAIC0yOSw0MSArMjksNDEgQEAKIAogLyoqCiAgKi8KLXB1YmxpYyBjbGFzcyBNeU1lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sIAorcHVibGljIGNsYXNzIE15TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwKICAgICAgICAgTXlNZXNzYWdlTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjID0gbnVsbDsKICAgICBwcml2YXRlIENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yLCB3aGljaCBpcyBwdWJsaWMgYW5kIHRha2VzIG5vIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgTXlNZXNzYWdlQmVhbigpIHt9CiAKICAgICAvKioKLSAgICAgKiBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IAotICAgICAqIG5vdCBmaW5hbCBvciBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIAorICAgICAqIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQKKyAgICAgKiBub3QgZmluYWwgb3Igc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZAogICAgICAqIHdpdGggb25lIGFyZ3VtZW50IG9mIHR5cGUgamFrYXJ0YS5lamIuTWVzc2FnZURyaXZlbkNvbnRleHQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gbWRjICAgIHRoZSBjb250ZXh0IHRvIHNldAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYykgewotCXRoaXMubWRjID0gbWRjOworICAgIHRoaXMubWRjID0gbWRjOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIGVqYkNyZWF0ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKLSAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8gCisgICAgICogZWpiQ3JlYXRlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCisgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vCiAgICAgICogYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHsgfQogCiAgICAgLyoqCi0gICAgICogb25NZXNzYWdlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAorICAgICAqIG9uTWVzc2FnZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgogICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBvbmUgYXJndW1lbnQKICAgICAgKiBvZiB0eXBlIGpha2FydGEuam1zLk1lc3NhZ2UuCiAgICAgICoKLSAgICAgKiBDYXN0cyB0aGUgaW5jb21pbmcgTWVzc2FnZSB0byBhIFRleHRNZXNzYWdlIGFuZCBkaXNwbGF5cyAKKyAgICAgKiBDYXN0cyB0aGUgaW5jb21pbmcgTWVzc2FnZSB0byBhIFRleHRNZXNzYWdlIGFuZCBkaXNwbGF5cwogICAgICAqIHRoZSB0ZXh0LgogICAgICAqCiAgICAgICogQHBhcmFtIGluTWVzc2FnZSAgICB0aGUgaW5jb21pbmcgbWVzc2FnZQpAQCAtNzQsNyArNzQsNyBAQAogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiAoaW5NZXNzYWdlLmVuZHNXaXRoKCJXUklURSIpKSB7Ci0gICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJXUklURSIsIAorICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiV1JJVEUiLAogICAgICAgICAgICAgICAgICAgICAgICAgaW5NZXNzYWdlLnN1YnN0cmluZygwLCBpbk1lc3NhZ2UubGFzdEluZGV4T2YoIjoiKSkpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpbk1lc3NhZ2UuZW5kc1dpdGgoIkRFTEVURSIpKSB7CiAgICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJERUxFVEUiLApAQCAtOTAsMTAgKzkwLDEwIEBACiAgICAgICAgIH0KIAogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIGVqYlJlbW92ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKLSAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8gCisgICAgICogZWpiUmVtb3ZlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCisgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vCiAgICAgICogYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CkBAIC0xMDMsNjMgKzEwMyw2MyBAQAogCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGlkICAgID0gbWVzc2FnZS5zdWJzdHJpbmcoMCwgbWVzc2FnZS5pbmRleE9mKCI6IikpOwotICAgICAgICBTdHJpbmcgYm9keSAgPSBtZXNzYWdlLnN1YnN0cmluZyhtZXNzYWdlLmluZGV4T2YoIjoiKSsxKTsgCisgICAgICAgIFN0cmluZyBib2R5ICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKG1lc3NhZ2UuaW5kZXhPZigiOiIpKzEpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmICgiUkVBRCIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIlJlYWRpbmcgcm93IGZyb20gZGF0YWJhc2UuLi4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgICAgZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gCisgICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPQogICAgICAgICAgICAgICAgICAgIlNFTEVDVCBpZCBmcm9tIG1lc3NhZ2VzIHdoZXJlIGlkID0gJ1FRJyI7CiAgICAgICAgICAgICAgICAgICBSZXN1bHRTZXQgcmVzdWx0cyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KTsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMubmV4dCgpOwotICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJRUSBoYXMgYmFsYW5jZSAiICsgCisgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5nZXRJbnQoImJhbGFuY2UiKSArICIgZG9sbGFycyIpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgc3RtdC5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVhZCBvbmUgYWNjb3VudFxuIik7CiAgICAgICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgfSBlbHNlIGlmICgiV1JJVEUiLmVxdWFscyhvcCkpIHsKIAogICAgICAgICAgICAgICAgIGRlYnVnKCJJbnNlcnRpbmcgb25lIG1lc3NhZ2UgaW4gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBjcmVhdGVSb3coaWQsIGJvZHksIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIG9uZSBtZXNzYWdlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfSBlbHNlIGlmICgiREVMRVRFIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgb25lIG1lc3NhZ2UgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWxldGVSb3coaWQsIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWxldGVkIG9uZSBtZXNzYWdlXG4iKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIkRFTEVURV9BTEwiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBhbGwgbWVzc2FnZXMgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKQEAgLTE3MCw3ICsxNzAsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvL3Vuc3VwcG9ydGVkIG9wCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9ZmluYWxseXsKICAgICAgICAgICAgIHRyeXsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24uY2xvc2UoKTsKQEAgLTE3OSw5ICsxNzksOSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBjcmVhdGVSb3coU3RyaW5nIGlkLCBTdHJpbmcgYm9keSwgCi0gICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisKKyAgICBwcml2YXRlIHZvaWQgY3JlYXRlUm93KFN0cmluZyBpZCwgU3RyaW5nIGJvZHksCisgICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgLy8gQ3JlYXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCkBAIC0xOTcsOSArMTk3LDkgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVSb3coU3RyaW5nIGlkLCBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvdyhTdHJpbmcgaWQsIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIGRlYnVnKCJEZWxldGVSb3cgd2l0aCBJRCA9ICIgKyBpZCk7CiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwpAQCAtMjEyLDkgKzIxMiw5IEBACiAgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICBTdHJpbmcgcXVlcnkgPSAiREVMRVRFIEZST00gbWVzc2FnZXMiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2J1aWxkLnhtbAppbmRleCAzMjA5M2M4Li40MDNkOTczIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2J1aWxkLnhtbApAQCAtNjAsNyArNjAsNyBAQAogCiAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzaW1wbGVtZGIiIC8+CisgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzaW1wbGVtZGIiIC8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9NRVRBLUlORi9yYS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL01FVEEtSU5GL3JhLnhtbAppbmRleCAyY2EyZWJjLi4yMWRlYjkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL01FVEEtSU5GL3JhLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL01FVEEtSU5GL3JhLnhtbApAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8aW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPgogICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXI+CiAgICAgICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXItdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lcgpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYy1jbGFzcz4KICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYz4KICAgICAgICAgICAgICAgICA8L21lc3NhZ2VsaXN0ZW5lcj4KLSAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4KICAgICAgICAgPC9pbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KICAgICAgICAgPGFkbWlub2JqZWN0PgogICAgICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L2FkbWlub2JqZWN0LWludGVyZmFjZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2J1aWxkLnhtbAppbmRleCAyYjc3NDg5Li43ODM5OTFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvYnVpbGQueG1sCkBAIC0zMCw4ICszMCw4IEBACiAKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImluaXQtY29tbW9uIiA+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KLQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgorICAgIDxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+CisgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGphciBqYXJmaWxlPSIuLi9nZW5lcmljLXJhLmphciIgYmFzZWRpcj0iY2xhc3NlcyIKICAgICAgICAgIGluY2x1ZGVzPSJjb25uZWN0b3IvKi5jbGFzcyIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKaW5kZXggNTU1MzNkNC4uZjU5YjJiMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBDb250cm9scyB7CiAgICAgcHVibGljIHN0YXRpYyBPYmplY3QgcmVhZHlMb2NrID0gbmV3IE9iamVjdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCmluZGV4IDY1ODIzM2UuLmQ3M2M4NjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBEZWxpdmVyeVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtMzYsNyArMzYsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIG9wOwogICAgIHByaXZhdGUgYm9vbGVhbiBrZWVwQ291bnQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ZXIgPSAwOwotICAgIAorCiAgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCBTdHJpbmcgb3ApIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIHRoaXMua2VlcENvdW50ID0gZmFsc2U7CiAgICAgfQogCi0gICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCAKKyAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsCiAgICAgICAgICAgICBTdHJpbmcgb3AsIGJvb2xlYW4ga2VlcENvdW50KSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNTUsNyArNTUsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwogICAgICAgICAgICAgLy9lcC5iZWZvcmVEZWxpdmVyeShvbk1lc3NhZ2UpOwpAQCAtNzgsMTEgKzc4LDExIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vZXAuYWZ0ZXJEZWxpdmVyeSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTkzLDE0ICs5MywxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQppbmRleCAxMDBjYWNlLi5mYTkzZjYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKICAgICB9CiAKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGZvcmdldChYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UuZm9yZ2V0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgfQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucHJlcGFyZTogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgICAgICByZXR1cm4gWEFSZXNvdXJjZS5YQV9PSzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgWGlkW10gcmVjb3ZlcihpbnQgZmxhZykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnJlY292ZXI6ICIgKyBmbGFnVG9TdHJpbmcoZmxhZykpOwogICAgICAgICByZXR1cm4gbnVsbDsKQEAgLTY2LDcgKzY2LDcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBzZXRUcmFuc2FjdGlvblRpbWVvdXQoaW50IHNlY29uZHMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzdGFydChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5zdGFydDogIiArIHhpZFRvU3RyaW5nKHhpZCkgKyAiLCIgKwogICAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQppbmRleCBiNWIwZjAyLi40YzljMDEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogLyoqCiAgKiBjb2xsZWN0aW9uIG9mIG1lc3NhZ2VzLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgTWVzc2FnZXMgewogCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgU3RyaW5nIGNvbW1hbmQgID0gYXJnc1swXTsKICAgICAgICBTdHJpbmcgZGVzdE5hbWUgPSBhcmdzWzFdOwogICAgICAgIFN0cmluZyBtZXNzYWdlICA9IGFyZ3NbMl07Ci0gICAKKwogICAgICAgIGlmICghImFkZCIuZXF1YWxzKGNvbW1hbmQpKSB7CiAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCmluZGV4IDg2MmY5ZmYuLmQxOTlkMDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQpAQCAtMzgsMTEgKzM4LDExIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKICAgICAgICAgaWYgKHJlc2V0Q29udHJvbC5lcXVhbHMoIkJFR0lOTklORyIpKSB7CiAgICAgICAgICAgIENvbnRyb2xzLmRvbmU9ZmFsc2U7Ci0JICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7Ci0JfQorICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBkb25lKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCmluZGV4IDJlY2VjNjMuLmE5YTg4ODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBNeVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtMzUsNyArMzUsNyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBzdG9wID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3Rvcnk7CiAgICAgcHJpdmF0ZSBXb3JrTWFuYWdlciB3bTsKLSAgICAKKwogICAgIHB1YmxpYyBNeVdvcmsoCiAgICAgICAgICAgICBTdHJpbmcgbmFtZSwgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LCBXb3JrTWFuYWdlciB3bSkgewogICAgICAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5OwpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKTsKIAogICAgICAgICAgICAgICAgIC8qCkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC04NSwxNCArODUsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQppbmRleCA4MTgyZWY1Li4zZmNlNTQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQpAQCAtMjQsOSArMjQsOSBAQAogICogc28gdGhhdCB0aGUgYXBwIHNlcnZlciBjYW4gaW5zdGFudGlhdGUgYW5kIGNvbmZpZ3VyZQogICogaXQgYXQgdGhlIHJ1bnRpbWUuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYyAKK3B1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYwogICAgIGltcGxlbWVudHMgQWN0aXZhdGlvblNwZWMsIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByaXZhdGUgU3RyaW5nIGRlc3RpbmF0aW9uTmFtZTsKQEAgLTQzLDcgKzQzLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uTmFtZSAoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uTmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvbk5hbWUgKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvbk5hbWUoKSBjYWxsZWQuLi4gbmFtZSA9ICIgKyBuYW1lKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbk5hbWUgPSBuYW1lOwpAQCAtNTIsNyArNTIsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25UeXBlKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvblR5cGU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25UeXBlIChTdHJpbmcgdHlwZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25UeXBlICgpIGNhbGxlZC4uLiB0eXBlID0gIiArIHR5cGUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uVHlwZT0gdHlwZTsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3RQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0UHJvcDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0UHJvcCAoU3RyaW5nIHRlc3RQcm9wKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0UHJvcCAoKSBjYWxsZWQuLi4gdGVzdFByb3AgPSAiICsgdGVzdFByb3ApOwogICAgICAgICB0aGlzLnRlc3RQcm9wID0gdGVzdFByb3A7CkBAIC03MCw3ICs3MCw3IEBACiAgICAgcHVibGljIEludGVnZXIgZ2V0VGVzdEludGVnZXJQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0SW50ZWdlclByb3A7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdEludGVnZXJQcm9wIChJbnRlZ2VyIHRlc3RQcm9wMSkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdEludGVnZXJQcm9wICgpIGNhbGxlZC4uLiB0ZXN0SW50ZWdlclByb3AgPSAiICsgdGVzdFByb3AxKTsKICAgICAgICAgdGhpcy50ZXN0SW50ZWdlclByb3AgPSB0ZXN0UHJvcDE7CkBAIC05NCw3ICs5NCw3IEBACiAKICAgICAgIH0KIAotICAgfSAKKyAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkZWJ1ZyAoU3RyaW5nIG1lc3NhZ2UpCiAgICAgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKaW5kZXggNmU1MzUzZi4uM2RmNzA3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCkBAIC00MCw5ICs0MCw5IEBACiAvKioKICAqIFRoaXMgaXMgYSBzYW1wbGUgcmVzb3VyY2UgYWRhcHRlcgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbCAKK3B1YmxpYyBjbGFzcyBTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsCiBpbXBsZW1lbnRzIFJlc291cmNlQWRhcHRlciwgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJpdmF0ZSBCb290c3RyYXBDb250ZXh0IGN0eDsKQEAgLTU4LDcgKzU4LDcgQEAKIAogICAgIHB1YmxpYyB2b2lkCiAgICAgc3RhcnQoQm9vdHN0cmFwQ29udGV4dCBjdHgpIHRocm93cyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIjAwMS4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAKICAgICAgICAgdGhpcy5jdHggPSBjdHg7CkBAIC02OCwyMSArNjgsMjEgQEAKIAogICAgICAgICAvL3Rlc3RpbmcgY3JlYXQgdGltZXIKICAgICAgICAgVGltZXIgdGltZXIgPSBudWxsOwotCSAgdHJ5ewotCSAgICAgIHRpbWVyID0gY3R4LmNyZWF0ZVRpbWVyKCk7Ci0JICB9IGNhdGNoKFVuYXZhaWxhYmxlRXhjZXB0aW9uIHVlKSB7Ci0JICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciIpOwotCSAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiRXJyb3IgZm9ybSBib290c3RyYXAiKTsKLQkgIH0KKyAgICAgIHRyeXsKKyAgICAgICAgICB0aW1lciA9IGN0eC5jcmVhdGVUaW1lcigpOworICAgICAgfSBjYXRjaChVbmF2YWlsYWJsZUV4Y2VwdGlvbiB1ZSkgeworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IiKTsKKyAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIGZvcm0gYm9vdHN0cmFwIik7CisgICAgICB9CiAgICAgICAgIGRlYnVnKCIwMDQuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogCiAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAKKwogICAgICAgICAgIFhBVGVybWluYXRvciB4YSA9IGN0eC5nZXRYQVRlcm1pbmF0b3IoKTsKLSAgICAgICAgICAKKwogICAgICAgICAgIFhpZCB4aWQxID0gbmV3IFhJRCgpOwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFhJRDEgPSAiICsgeGlkMSk7Ci0gICAgICAgICAgCisKICAgICAgICAgICBFeGVjdXRpb25Db250ZXh0IGVjID0gbmV3IEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICBlYy5zZXRYaWQoeGlkMSk7CiAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCkBAIC05MiwxNCArOTIsMTQgQEAKICAgICAgICAgICB3bS5kb1dvcmsob3V0dywgMSoxMDAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgeGEuY29tbWl0KHhpZDEsIHRydWUpOwogICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgIAorCiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgZXggPSAiICsgZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICB4YS5yb2xsYmFjayh4aWQxKTsKICAgICAgICAgICB9Ci0gICAgICAgICAgCisKICAgICAgICAgICBYaWQgeGlkMiA9IG5ldyBYSUQoKTsKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBYSUQyID0gIiArIHhpZDIpOwotICAgICAgICAgIAorCiAgICAgICAgICAgZWMgPSBuZXcgRXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgIGVjLnNldFhpZCh4aWQyKTsKICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKQEAgLTExNiw3ICsxMTYsNyBAQAogICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgIH0KIAotICAgICAgICAKKwogICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IDM7IGkrKykgewogICAgICAgICAgIFRlc3RXTVdvcmsgdyA9IG5ldyBUZXN0V01Xb3JrKGksIGZhbHNlKTsKICAgICAgICAgICB0cnkgewpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGQUlMOiBDQVVHSFQgZXhjZXB0aW9uIDogaSA9ICIgKyBpKTsKICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICB9IAorICAgICAgICAgIH0KICAgICAgICAgICB9CiAKICAgICAgICAgICBmb3IgKGludCBpID0gMyA7IGkgPCA2OyBpKyspIHsKQEAgLTE3Miw3ICsxNzIsNyBAQAogICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgIH0KICAgICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCIwMDUuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogICAgIH0KIApAQCAtMjA2LDEzICsyMDYsMTMgQEAKIAogICAgIHB1YmxpYyB2b2lkCiAgICAgZW5kcG9pbnREZWFjdGl2YXRpb24gKAotICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBlbmRwb2ludEZhY3RvcnksIAorICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBlbmRwb2ludEZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIGRlYnVnICgiZW5kcG9pbnREZWFjdGl2YXRpb24gY2FsbGVkLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgICgoV29ya0Rpc3BhdGNoZXIpIHdvcmspLnN0b3AoKTsKICAgICB9Ci0gIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHRlc3ROYW1lOwogICAgIH0KQEAgLTIyOCw3ICsyMjgsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbF0gPT0+ICIgKyBtZXNzYWdlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpIAorICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykKICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKaW5kZXggYmIwNTUzNC4uZGU5M2JjMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgVGVzdFdNV29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC00Miw4ICs0Miw4IEBACiAgICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUpIHsKICAgICAgICAgdGhpcyhpZCwgaXNSb2d1ZSwgZmFsc2UsIG51bGwpOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSwgCisKKyAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSwKICAgICAgICAgICAgIGJvb2xlYW4gZG9OZXN0LCBFeGVjdXRpb25Db250ZXh0IGN0eCkgewogICAgICAgICB0aGlzLmlkID0gaWQ7CiAgICAgICAgIHRoaXMuaXNSb2d1ZSA9IGlzUm9ndWU7CkBAIC03NywxMCArNzcsMTAgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKFdvcmtFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBpZiAoZXguZ2V0RXJyb3JDb2RlKCkuZXF1YWxzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmtFeGNlcHRpb24uVFhfQ09OQ1VSUkVOVF9XT1JLX0RJU0FMTE9XRUQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEFTUzogQ0FVR0hUIEVYUEVDVEVEID0gIiArIGV4LmdldEVycm9yQ29kZSgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZBSUw6IENBVUdIVCBVTkVYUEVDVEVEID0gIiArIGV4LmdldEVycm9yQ29kZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCiAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKG5lc3RlZFdvcmssIDEqMTAwMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCAzNGE2MDRmLi5jZDk4YzQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIFdvcmtEaXNwYXRjaGVyIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTQ0LDExICs0NCwxMSBAQAogICAgIHByaXZhdGUgQWN0aXZhdGlvblNwZWMgc3BlYzsKICAgICBwcml2YXRlIFdvcmtNYW5hZ2VyIHdtOwogICAgIHByaXZhdGUgWEFUZXJtaW5hdG9yIHhhOwotICAgIAorCiAgICAgcHVibGljIFdvcmtEaXNwYXRjaGVyKAogICAgICAgICAgICAgU3RyaW5nIGlkLAogICAgICAgICAgICAgQm9vdHN0cmFwQ29udGV4dCBjdHgsCi0gICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksIAorICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LAogICAgICAgICAgICAgQWN0aXZhdGlvblNwZWMgc3BlYykgewogICAgICAgICB0aGlzLmlkICAgICAgPSBpZDsKICAgICAgICAgdGhpcy5jdHggICAgID0gY3R4OwpAQCAtNjEsNyArNjEsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgZGVidWcoIldBSVQuLi4iKTsKQEAgLTgzLDI2ICs4MywyNiBAQAogICAgICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSk7CiAKICAgICAgICAgICAgICAgICBpZiAoIWZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSkgewogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsgCisgICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsKICAgICAgICAgICAgICAgICAgICAgLy93bS5kb1dvcmsoZCwgMCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwogICAgICAgICAgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG5ldyBGYWtlWEFSZXNvdXJjZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaW50IG51bU9mTWVzc2FnZXMgPSA1OwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2ltcG9ydGluZyB0cmFuc2FjdGlvbgogCiAgICAgICAgICAgICAgICAgICAgIC8vd3JpdGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHQgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7CiAKLSAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPSAKKyAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIldSSVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkRPTkUgV1JJVEUgVE8gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gbnVtT2ZNZXNzYWdlczsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9yb2xsYmFjawogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiREVMRVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xNTAsNyArMTUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIkRFTEVURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTk1LDcgKzE5NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChYQVJlc291cmNlLlhBX09LID09IHhhLnByZXBhcmUoZWMuZ2V0WGlkKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJYQSBQUkVQQVJFL0NPTU1JVC4gRE9ORSBXUklURSBUTyBEQiAiKTsKQEAgLTIwNywxOSArMjA3LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlIGFsbC4KICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCAxLCAiREVMRVRFX0FMTCIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiRE9ORSBERUxFVEUgQUxMIEZST00gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gMDsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yNDMsNyArMjQzLDcgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTI1OCwxNCArMjU4LDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTI4OCwxMyArMjg4LDEzIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL1NsZWVwIGZvciA1IHNlY29uZHMKICAgICAgICAgICAgIC8vVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCg1KjEwMDApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICAvL05vdGlmeSB0aGUgY2xpZW50IHRvIGNoZWNrIHRoZSByZXN1bHRzCi0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeSgpOyAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5KCk7CisKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgcmVzdWx0cyBhcmUgdmVyaWZpZWQgYnkgdGhlIGNsaWVudAotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7CiAKICAgICAgICAgICAgICAgICBpZiAoc3RvcCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0zMTAsNyArMzEwLDcgQEAKICAgICAgICAgICAgIENvbnRyb2xzLmRvbmUgPSB0cnVlOwogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIC8vTm90aWZ5IHRoZSBjbGllbnQgdG8gY2hlY2sgdGhlIHJlc3VsdHMKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnkoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQppbmRleCA0ZWQzMDg3Li4xYmI4MDVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCkBAIC0zNiw4ICszNiw4IEBACiAgICAgcHVibGljIGludCBicmFuY2hRdWFsaWZpZXI7CiAgICAgcHVibGljIGludCBnbG9iYWxUeElEOwogCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7IAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OyAKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsKIAogICAgIHB1YmxpYyBYSUQoKSB7CiAgICAgICAgIGludCBmb28gPSBJRCsrOwpAQCAtNTUsMTAgKzU1LDEwIEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAvLyBJdCBjYW4ndCBiZSBlcXVhbAogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG90aGVyID0gKFhJRClvOyAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3RoZXIgWElELCBub3cgcHJvcGVybHkgY2FzdAotICAgICAgICAKLSAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQgCisKKyAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQKICAgICAgICAgICAgICAgICAmJiB0aGlzLmJyYW5jaFF1YWxpZmllciA9PSBvdGhlci5icmFuY2hRdWFsaWZpZXIKICAgICAgICAgICAgICAgICAmJiB0aGlzLmdsb2JhbFR4SUQgPT0gb3RoZXIuZ2xvYmFsVHhJRCkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05OCw3ICs5OCw3IEBACiAgICAgICAgICAgICAgICAgImZvcm1hdElEKCIgICAgICsgZm9ybWF0SUQgICAgICsgIiksICIgKwogICAgICAgICAgICAgICAgICJicmFuY2hRdWFsaWZpZXIgKCIgKyBicmFuY2hRdWFsaWZpZXIgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImdsb2JhbFR4SUQoIiArIGdsb2JhbFR4SUQgKyAiKX0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHM7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKaW5kZXggNjk2ZGQzZS4uNWE1MjEwZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbApAQCAtODEsOCArODEsOCBAQAogICAgICAgICA8cmVzLXNoYXJpbmctc2NvcGU+U2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+Ci0JPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgorICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgorICAgIDxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxzZWN1cml0eS1pZGVudGl0eT4KICAgICAgICAgPHVzZS1jYWxsZXItaWRlbnRpdHkvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKaW5kZXggN2Q4MTJkMC4uMGQ3M2E5MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCkBAIC04NCw3ICs4NCw3IEBACiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmphdmE6YXBwL2Vpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmphdmE6YXBwL2Vpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxnZW4tY2xhc3Nlcy8+CiAgICAgPC9lamI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCmluZGV4IGI1MGQ3ZTQuLjU0MjllYTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAKICAgICBwdWJsaWMgTWVzc2FnZUNoZWNrZXJFSkIoKSB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYmVhbiBjcmVhdGVkIik7CiAgICAgICAgIGhlbGRDb24gPSBudWxsOwpAQCAtNzEsMTEgKzcxLDExIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLmdldExvY2tPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIC8vVGVsbCB0aGUgcmVzb3VyY2UgYWRhcHRlciB0aGUgY2xpZW50IGlzIHJlYWR5IHRvIHJ1bgotICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnlBbGwoKTsgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeUFsbCgpOworCiAgICAgICAgICAgICAgICAgZGVidWcoIk5PVElGSUVELi4uIFNUQVJUIFdBSVRJTkciKTsKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgYmVpbmcgdG9sZCB0byByZWFkIGZyb20gdGhlIGRhdGFiYXNlCi0gICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTgzLDIyICs4MywyMiBAQAogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TWVzc2FnZUNvdW50KCkgewotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgIENvbm5lY3Rpb24gY29uID0gZ2V0RnJlc2hDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBpbnQgY291bnQxID0gZ2V0Q291bnQoY29uKTsKICAgICAgICAgICAgIGNvbi5jbG9zZSgpOwotICAgICAgICAgICAgCi0JICAgIC8qCisKKyAgICAgICAgLyoKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5nZXRMb2NrT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5KCk7CiAgICAgICAgICAgICB9Ci0JICAgICovCi0gICAgICAgICAgICAgICAgCisgICAgICAgICovCisKICAgICAgICAgICAgIHJldHVybiBjb3VudDE7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0ub3V0KTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JfQorICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIGludCBnZXRDb3VudChDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CkBAIC0xMjQsMTAgKzEyNCwxMCBAQAogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgdXNlciA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi91c2VyIik7CiAgICAgICAgICAgICBwYXNzd29yZCA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9wYXNzd29yZCIpOwotCSAgICBDb250cm9scyA9IChNeUFkbWluT2JqZWN0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL3Rlc3RBZG1pbiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExJTkcgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7Ci0JICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMRUQgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7CisgICAgICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvdGVzdEFkbWluIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTElORyBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKKyAgICAgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExFRCBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMTYyLDcgKzE2Miw3IEBACiAgICAgICAgICAgICBkZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChjb24gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBjb247CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgICAgICAgICB0aHJvdyBleDE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgY2xvc2VDb25uZWN0aW9uKENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgaWYgKGhlbGRDb24gIT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwppbmRleCBkYWQyMDdiLi4wYjM4YzE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiBlamItamFyLnhtbD1NRVRBLUlORi9lamItamFyLnhtbAogc3VuLWVqYi1qYXIueG1sPU1FVEEtSU5GL3N1bi1lamItamFyLnhtbApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggY2YyNWU3ZC4uNGUyNTM2YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOSwyMyArMjksMjMgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgLy9zdXBlcihhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBkb1Rlc3QoKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCBjb25uZWN0b3IgMS41ICIrCi0JICAgICAgICAgICAgICJjb250cmFjdHMuIik7Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAiY29udHJhY3RzLiIpOworCiAgICAgICAgIFN0cmluZyByZXMgPSAiTk9UIFJVTiI7Ci0JZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7Ci0JICAgIGludCB0ZXN0Q291bnQgPSAxOworICAgIGRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOworICAgICAgICBpbnQgdGVzdENvdW50ID0gMTsKICAgICAgICAgdHJ5ewogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpYy5sb29rdXAoImphdmE6YXBwL2pkYmMvWEFQb2ludGJhc2UiKTsKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJJRCBDb25uZWN0b3IgRW1iZWRkZWQgMS41IHRlc3QgLSAiICsgdGVzdENvdW50KyssIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBkdXJpbmcgbG9va3VwIG9mIGphdmE6YXBwL2pkYmMvWEFQb2ludGJhc2UgOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotCSAgICAvL2UucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIC8vZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgICAgICB0cnl7CiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIklEIENvbm5lY3RvciBFbWJlZGRlZCAxLjUgdGVzdCAtICIgKyB0ZXN0Q291bnQrKywgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIGR1cmluZyBsb29rdXAgb2YgamF2YTphcHAvamRiYy90ZXN0LXJlc291cmNlOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotCSAgICAvL2UucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIC8vZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogLyogICAgICAgIHRyeXsKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CkBAIC03OSwxMyArNzksMTMgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7CiAgICAgICAgICAgICB3aGlsZSAoIWRvbmUoKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwogICAgICAgICAgICAgICAgIGlmICghZG9uZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJSdW5uaW5nLi4uIik7CiAgICAgICAgICAgICAgICAgICAgIHBhc3MgPSBjaGVja1Jlc3VsdHMoZXhwZWN0ZWRSZXN1bHRzKCkpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR290IGV4cGVjdGVkIHJlc3VsdHMgPSAiICsgcGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZG8gbm90IGNvbnRpbnVlIGlmIG9uZSB0ZXN0IGZhaWxlZAogICAgICAgICAgICAgICAgICAgICBpZiAoIXBhc3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9ICJTT01FIFRFU1RTIEZBSUxFRCI7CkBAIC05MywxMSArOTMsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIklEIENvbm5lY3RvciBFbWJlZGRlZCAxLjUgdGVzdCAtICIgKyB0ZXN0Q291bnQsIHN0YXQuUEFTUyk7Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotCQl0ZXN0Q291bnQrKzsKKyAgICAgICAgdGVzdENvdW50Kys7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC0xMTgsMTQgKzExOCwxNCBAQAogCiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJjb25uZWN0b3IxLjVFbWJlZGRlZElEIik7CiAKLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkVYSVRJTkcuLi4gU1RBVFVTID0gIiArIHJlcyk7CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrUmVzdWx0cyhpbnQgbnVtKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgaW50IHJlc3VsdCA9IGNoZWNrZXIuZ2V0TWVzc2FnZUNvdW50KCk7CkBAIC0xMzQsNyArMTM0LDcgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBkb25lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIHJldHVybiBjaGVja2VyLmRvbmUoKTsKQEAgLTE0Miw3ICsxNDIsNyBAQAogCiAgICAgcHJpdmF0ZSBpbnQgZXhwZWN0ZWRSZXN1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIHJldHVybiBjaGVja2VyLmV4cGVjdGVkUmVzdWx0cygpOwpAQCAtMTUwLDcgKzE1MCw3IEBACiAKICAgICBwcml2YXRlIHZvaWQgbm90aWZ5QW5kV2FpdCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICBjaGVja2VyLm5vdGlmeUFuZFdhaXQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKaW5kZXggZDFkNzhmMi4uZDgwNjk1MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKQEAgLTMwLDQxICszMCw0MSBAQAogCiAvKioKICAqLwotcHVibGljIGNsYXNzIE15TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwgCitwdWJsaWMgY2xhc3MgTXlNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLAogICAgICAgICBNeU1lc3NhZ2VMaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIHRyYW5zaWVudCBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMgPSBudWxsOwogICAgIHByaXZhdGUgQ29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IsIHdoaWNoIGlzIHB1YmxpYyBhbmQgdGFrZXMgbm8gYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyBNeU1lc3NhZ2VCZWFuKCkge30KIAogICAgIC8qKgotICAgICAqIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgCi0gICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgCisgICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dAorICAgICAqIG5vdCBmaW5hbCBvciBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kCiAgICAgICogd2l0aCBvbmUgYXJndW1lbnQgb2YgdHlwZSBqYWthcnRhLmVqYi5NZXNzYWdlRHJpdmVuQ29udGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBtZGMgICAgdGhlIGNvbnRleHQgdG8gc2V0CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjKSB7Ci0JdGhpcy5tZGMgPSBtZGM7CisgICAgdGhpcy5tZGMgPSBtZGM7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogZWpiQ3JlYXRlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgeyB9CiAKICAgICAvKioKLSAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCisgICAgICogb25NZXNzYWdlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCiAgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG9uZSBhcmd1bWVudAogICAgICAqIG9mIHR5cGUgamFrYXJ0YS5qbXMuTWVzc2FnZS4KICAgICAgKgotICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzIAorICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzCiAgICAgICogdGhlIHRleHQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gaW5NZXNzYWdlICAgIHRoZSBpbmNvbWluZyBtZXNzYWdlCkBAIC03NSw3ICs3NSw3IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmIChpbk1lc3NhZ2UuZW5kc1dpdGgoIldSSVRFIikpIHsKLSAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwgCisgICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJXUklURSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbk1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGluTWVzc2FnZS5sYXN0SW5kZXhPZigiOiIpKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiREVMRVRFIikpIHsKICAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIkRFTEVURSIsCkBAIC05MSwxMCArOTEsMTAgQEAKICAgICAgICAgfQogCiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogZWpiUmVtb3ZlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJSZW1vdmUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KQEAgLTEwNCw2MyArMTA0LDYzIEBACiAKICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBTdHJpbmcgaWQgICAgPSBtZXNzYWdlLnN1YnN0cmluZygwLCBtZXNzYWdlLmluZGV4T2YoIjoiKSk7Ci0gICAgICAgIFN0cmluZyBib2R5ICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKG1lc3NhZ2UuaW5kZXhPZigiOiIpKzEpOyAKKyAgICAgICAgU3RyaW5nIGJvZHkgID0gbWVzc2FnZS5zdWJzdHJpbmcobWVzc2FnZS5pbmRleE9mKCI6IikrMSk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKCJSRUFEIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiUmVhZGluZyByb3cgZnJvbSBkYXRhYmFzZS4uLiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPSAKKyAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9CiAgICAgICAgICAgICAgICAgICAiU0VMRUNUIGlkIGZyb20gbWVzc2FnZXMgd2hlcmUgaWQgPSAnUVEnIjsKICAgICAgICAgICAgICAgICAgIFJlc3VsdFNldCByZXN1bHRzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKyAKKyAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArCiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmdldEludCgiYmFsYW5jZSIpICsgIiBkb2xsYXJzIik7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICBzdG10LmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWFkIG9uZSBhY2NvdW50XG4iKTsKICAgICAgICAgICAgICAgICAqLwogCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJXUklURSIuZXF1YWxzKG9wKSkgewogCiAgICAgICAgICAgICAgICAgZGVidWcoIkluc2VydGluZyBvbmUgbWVzc2FnZSBpbiB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGNyZWF0ZVJvdyhpZCwgYm9keSwgZGJDb25uZWN0aW9uKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgb25lIG1lc3NhZ2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJERUxFVEUiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBvbmUgbWVzc2FnZSBmcm9tIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlbGV0ZVJvdyhpZCwgZGJDb25uZWN0aW9uKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlbGV0ZWQgb25lIG1lc3NhZ2VcbiIpOwogICAgICAgICAgICAgfSBlbHNlIGlmICgiREVMRVRFX0FMTCIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIkRlbGV0aW5nIGFsbCBtZXNzYWdlcyBmcm9tIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwpAQCAtMTcxLDcgKzE3MSw3IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vdW5zdXBwb3J0ZWQgb3AKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH1maW5hbGx5ewogICAgICAgICAgICAgdHJ5ewogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbi5jbG9zZSgpOwpAQCAtMTgwLDkgKzE4MCw5IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVJvdyhTdHJpbmcgaWQsIFN0cmluZyBib2R5LCAKLSAgICAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKworICAgIHByaXZhdGUgdm9pZCBjcmVhdGVSb3coU3RyaW5nIGlkLCBTdHJpbmcgYm9keSwKKyAgICAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICAvLyBDcmVhdGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKQEAgLTE5OCw5ICsxOTgsOSBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvdyhTdHJpbmcgaWQsIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlUm93KFN0cmluZyBpZCwgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICAvLyBEZWxldGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKICAgICAgICAgZGVidWcoIkRlbGV0ZVJvdyB3aXRoIElEID0gIiArIGlkKTsKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7CkBAIC0yMTMsOSArMjEzLDkgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVBbGwoamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVBbGwoamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICAvLyBEZWxldGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgIFN0cmluZyBxdWVyeSA9ICJERUxFVEUgRlJPTSBtZXNzYWdlcyI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYnVpbGQueG1sCmluZGV4IDZjODQ4YTQuLjE3MmI1NjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYnVpbGQueG1sCkBAIC01Miw3ICs1Miw3IEBACiAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuY2xhc3NwYXRoIiB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvZ2VuZXJpYy1yYS5qYXIiLz4KLQk8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImdlbmVyaWMtZW1iZWRkZWQiIC8+CisgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJnZW5lcmljLWVtYmVkZGVkIiAvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvTUVUQS1JTkYvcmEueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9NRVRBLUlORi9yYS54bWwKaW5kZXggMmNhMmViYy4uMjFkZWI5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9NRVRBLUlORi9yYS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9NRVRBLUlORi9yYS54bWwKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPGluYm91bmQtcmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4KICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyPgogICAgICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyLXR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWMtY2xhc3M+CiAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWM+CiAgICAgICAgICAgICAgICAgPC9tZXNzYWdlbGlzdGVuZXI+Ci0gICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgIDwvaW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+CiAgICAgICAgIDxhZG1pbm9iamVjdD4KICAgICAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9idWlsZC54bWwKaW5kZXggMmI3NzQ4OS4uNzgzOTkxZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2J1aWxkLnhtbApAQCAtMzAsOCArMzAsOCBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+Ci0JPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KKyAgICA8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgorICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxqYXIgamFyZmlsZT0iLi4vZ2VuZXJpYy1yYS5qYXIiIGJhc2VkaXI9ImNsYXNzZXMiCiAgICAgICAgICBpbmNsdWRlcz0iY29ubmVjdG9yLyouY2xhc3MiIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCmluZGV4IDU1NTMzZDQuLmY1OWIyYjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgQ29udHJvbHMgewogICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IHJlYWR5TG9jayA9IG5ldyBPYmplY3QoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQppbmRleCA2NTgyMzNlLi5kNzNjODYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgRGVsaXZlcnlXb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTM2LDcgKzM2LDcgQEAKICAgICBwcml2YXRlIFN0cmluZyBvcDsKICAgICBwcml2YXRlIGJvb2xlYW4ga2VlcENvdW50OwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudGVyID0gMDsKLSAgICAKKwogICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgU3RyaW5nIG9wKSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICB0aGlzLmtlZXBDb3VudCA9IGZhbHNlOwogICAgIH0KIAotICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgCisgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLAogICAgICAgICAgICAgU3RyaW5nIG9wLCBib29sZWFuIGtlZXBDb3VudCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAKICAgICAgICAgZGVidWcoIkVOVEVSLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL01ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKICAgICAgICAgICAgIC8vZXAuYmVmb3JlRGVsaXZlcnkob25NZXNzYWdlKTsKQEAgLTc4LDExICs3OCwxMSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvL2VwLmFmdGVyRGVsaXZlcnkoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC05MywxNCArOTMsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKaW5kZXggMTAwY2FjZS4uZmE5M2Y2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLmZvcmdldDogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgIH0KQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnByZXBhcmU6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICAgICAgcmV0dXJuIFhBUmVzb3VyY2UuWEFfT0s7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5yZWNvdmVyOiAiICsgZmxhZ1RvU3RyaW5nKGZsYWcpKTsKICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc3RhcnQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2Uuc3RhcnQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpICsgIiwiICsKICAgICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKaW5kZXggYjViMGYwMi4uNGM5YzAxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIC8qKgogICogY29sbGVjdGlvbiBvZiBtZXNzYWdlcy4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKIApAQCAtNTQsNyArNTQsNyBAQAogICAgICAgIFN0cmluZyBjb21tYW5kICA9IGFyZ3NbMF07CiAgICAgICAgU3RyaW5nIGRlc3ROYW1lID0gYXJnc1sxXTsKICAgICAgICBTdHJpbmcgbWVzc2FnZSAgPSBhcmdzWzJdOwotICAgCisKICAgICAgICBpZiAoISJhZGQiLmVxdWFscyhjb21tYW5kKSkgewogICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQppbmRleCA4NjJmOWZmLi5kMTk5ZDAxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKQEAgLTM4LDExICszOCwxMSBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CiAgICAgICAgIGlmIChyZXNldENvbnRyb2wuZXF1YWxzKCJCRUdJTk5JTkciKSkgewogICAgICAgICAgICBDb250cm9scy5kb25lPWZhbHNlOwotCSAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOwotCX0KKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gZG9uZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQppbmRleCAyZWNlYzYzLi5hOWE4ODgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgTXlXb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTM1LDcgKzM1LDcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gc3RvcCA9IGZhbHNlOwogICAgIHByaXZhdGUgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5OwogICAgIHByaXZhdGUgV29ya01hbmFnZXIgd207Ci0gICAgCisKICAgICBwdWJsaWMgTXlXb3JrKAogICAgICAgICAgICAgU3RyaW5nIG5hbWUsIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwgV29ya01hbmFnZXIgd20pIHsKICAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTsKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgICAgICBNZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSk7CiAKICAgICAgICAgICAgICAgICAvKgpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtODUsMTQgKzg1LDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKaW5kZXggOTQ2ZDk4Ny4uYmI3OTE4ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKQEAgLTI0LDkgKzI0LDkgQEAKICAqIHNvIHRoYXQgdGhlIGFwcCBzZXJ2ZXIgY2FuIGluc3RhbnRpYXRlIGFuZCBjb25maWd1cmUKICAqIGl0IGF0IHRoZSBydW50aW1lLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMgCitwdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMKICAgICBpbXBsZW1lbnRzIEFjdGl2YXRpb25TcGVjLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIFN0cmluZyBkZXN0aW5hdGlvbk5hbWU7CkBAIC00Miw3ICs0Miw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvbk5hbWUgKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvbk5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25OYW1lIChTdHJpbmcgbmFtZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25OYW1lKCkgY2FsbGVkLi4uIG5hbWUgPSAiICsgbmFtZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25OYW1lID0gbmFtZTsKQEAgLTUxLDcgKzUxLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uVHlwZSgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25UeXBlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uVHlwZSAoU3RyaW5nIHR5cGUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uVHlwZSAoKSBjYWxsZWQuLi4gdHlwZSA9ICIgKyB0eXBlKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvblR5cGU9IHR5cGU7CkBAIC02MCw3ICs2MCw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0UHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdFByb3A7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdFByb3AgKFN0cmluZyB0ZXN0UHJvcCkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdFByb3AgKCkgY2FsbGVkLi4uIHRlc3RQcm9wID0gIiArIHRlc3RQcm9wKTsKICAgICAgICAgdGhpcy50ZXN0UHJvcCA9IHRlc3RQcm9wOwpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICB0aGlzLnJlc291cmNlYWRhcHRlciA9IHJhOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHZhbGlkYXRlKCkge30gCisgICAgcHVibGljIHZvaWQgdmFsaWRhdGUoKSB7fQogCiAgICAgcHJpdmF0ZSB2b2lkIGRlYnVnIChTdHJpbmcgbWVzc2FnZSkKICAgICB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQppbmRleCAyMWU3OTFkLi4xY2Y1YWMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKQEAgLTQwLDkgKzQwLDkgQEAKIC8qKgogICogVGhpcyBpcyBhIHNhbXBsZSByZXNvdXJjZSBhZGFwdGVyCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsIAorcHVibGljIGNsYXNzIFNpbXBsZVJlc291cmNlQWRhcHRlckltcGwKIGltcGxlbWVudHMgUmVzb3VyY2VBZGFwdGVyLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIEJvb3RzdHJhcENvbnRleHQgY3R4OwpAQCAtNTgsNyArNTgsNyBAQAogCiAgICAgcHVibGljIHZvaWQKICAgICBzdGFydChCb290c3RyYXBDb250ZXh0IGN0eCkgdGhyb3dzIFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiMDAxLiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKIAogICAgICAgICB0aGlzLmN0eCA9IGN0eDsKQEAgLTY4LDIxICs2OCwyMSBAQAogCiAgICAgICAgIC8vdGVzdGluZyBjcmVhdCB0aW1lcgogICAgICAgICBUaW1lciB0aW1lciA9IG51bGw7Ci0JICB0cnl7Ci0JICAgICAgdGltZXIgPSBjdHguY3JlYXRlVGltZXIoKTsKLQkgIH0gY2F0Y2goVW5hdmFpbGFibGVFeGNlcHRpb24gdWUpIHsKLQkgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIik7Ci0JICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJFcnJvciBmb3JtIGJvb3RzdHJhcCIpOwotCSAgfQorICAgICAgdHJ5eworICAgICAgICAgIHRpbWVyID0gY3R4LmNyZWF0ZVRpbWVyKCk7CisgICAgICB9IGNhdGNoKFVuYXZhaWxhYmxlRXhjZXB0aW9uIHVlKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciIpOworICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiRXJyb3IgZm9ybSBib290c3RyYXAiKTsKKyAgICAgIH0KICAgICAgICAgZGVidWcoIjAwNC4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAKICAgICAgICAgICB0cnkgewotICAgICAgICAgIAorCiAgICAgICAgICAgWEFUZXJtaW5hdG9yIHhhID0gY3R4LmdldFhBVGVybWluYXRvcigpOwotICAgICAgICAgIAorCiAgICAgICAgICAgWGlkIHhpZDEgPSBuZXcgWElEKCk7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgWElEMSA9ICIgKyB4aWQxKTsKLSAgICAgICAgICAKKwogICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHQgZWMgPSBuZXcgRXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgIGVjLnNldFhpZCh4aWQxKTsKICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKQEAgLTkyLDE0ICs5MiwxNCBAQAogICAgICAgICAgIHdtLmRvV29yayhvdXR3LCAxKjEwMDAsIGVjLCBudWxsKTsKICAgICAgICAgICB4YS5jb21taXQoeGlkMSwgdHJ1ZSk7CiAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgCisKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBleCA9ICIgKyBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgIHhhLnJvbGxiYWNrKHhpZDEpOwogICAgICAgICAgIH0KLSAgICAgICAgICAKKwogICAgICAgICAgIFhpZCB4aWQyID0gbmV3IFhJRCgpOwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFhJRDIgPSAiICsgeGlkMik7Ci0gICAgICAgICAgCisKICAgICAgICAgICBlYyA9IG5ldyBFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgZWMuc2V0WGlkKHhpZDIpOwogICAgICAgICAgIGVjLnNldFRyYW5zYWN0aW9uVGltZW91dCg1KjEwMDApOyAvLzUgc2Vjb25kcwpAQCAtMTE2LDcgKzExNiw3IEBACiAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgfQogCi0gICAgICAgIAorCiAgICAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgMzsgaSsrKSB7CiAgICAgICAgICAgVGVzdFdNV29yayB3ID0gbmV3IFRlc3RXTVdvcmsoaSwgZmFsc2UpOwogICAgICAgICAgIHRyeSB7CkBAIC0xMjQsNyArMTI0LDcgQEAKICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUw6IENBVUdIVCBleGNlcHRpb24gOiBpID0gIiArIGkpOwogICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgIH0gCisgICAgICAgICAgfQogICAgICAgICAgIH0KIAogICAgICAgICAgIGZvciAoaW50IGkgPSAzIDsgaSA8IDY7IGkrKykgewpAQCAtMTcyLDcgKzE3Miw3IEBACiAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgfQogICAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIjAwNS4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAgICAgfQogCkBAIC0yMDQsMTIgKzIwNCwxMiBAQAogCiAgICAgcHVibGljIHZvaWQKICAgICBlbmRwb2ludERlYWN0aXZhdGlvbiAoCi0gICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGVuZHBvaW50RmFjdG9yeSwgCisgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGVuZHBvaW50RmFjdG9yeSwKICAgICAgICAgICAgIEFjdGl2YXRpb25TcGVjIHNwZWMpIHsKICAgICAgICAgZGVidWcgKCJlbmRwb2ludERlYWN0aXZhdGlvbiBjYWxsZWQuLi4iKTsKICAgICAgICAgKChXb3JrRGlzcGF0Y2hlcikgd29yaykuc3RvcCgpOwogICAgIH0KLSAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3ROYW1lKCkgewogICAgICAgICByZXR1cm4gdGVzdE5hbWU7CiAgICAgfQpAQCAtMjI1LDcgKzIyNSw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsXSA9PT4gIiArIG1lc3NhZ2UpOwogICAgIH0KIAotICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykgCisgICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKQogICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQppbmRleCA3ZTU4NWEzLi45Y2QwNjYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBUZXN0V01Xb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTQyLDggKzQyLDggQEAKICAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSkgewogICAgICAgICB0aGlzKGlkLCBpc1JvZ3VlLCBmYWxzZSwgbnVsbCk7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLCAKKworICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLAogICAgICAgICAgICAgYm9vbGVhbiBkb05lc3QsIEV4ZWN1dGlvbkNvbnRleHQgY3R4KSB7CiAgICAgICAgIHRoaXMuaWQgPSBpZDsKICAgICAgICAgdGhpcy5pc1JvZ3VlID0gaXNSb2d1ZTsKQEAgLTc3LDEwICs3NywxMCBAQAogICAgICAgICAgICAgfSBjYXRjaCAoV29ya0V4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIGlmIChleC5nZXRFcnJvckNvZGUoKS5lcXVhbHMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya0V4Y2VwdGlvbi5UWF9DT05DVVJSRU5UX1dPUktfRElTQUxMT1dFRCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQVNTOiBDQVVHSFQgRVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKICAgICAgICAgICAgICAgICB3bS5kb1dvcmsobmVzdGVkV29yaywgMSoxMDAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICJGQUlMOiBDQVVHSFQgVU5FWFBFQ1RFRCA9ICIgKyBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCmluZGV4IDM0YTYwNGYuLmNkOThjNDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgV29ya0Rpc3BhdGNoZXIgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtNDQsMTEgKzQ0LDExIEBACiAgICAgcHJpdmF0ZSBBY3RpdmF0aW9uU3BlYyBzcGVjOwogICAgIHByaXZhdGUgV29ya01hbmFnZXIgd207CiAgICAgcHJpdmF0ZSBYQVRlcm1pbmF0b3IgeGE7Ci0gICAgCisKICAgICBwdWJsaWMgV29ya0Rpc3BhdGNoZXIoCiAgICAgICAgICAgICBTdHJpbmcgaWQsCiAgICAgICAgICAgICBCb290c3RyYXBDb250ZXh0IGN0eCwKLSAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwgCisgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIHRoaXMuaWQgICAgICA9IGlkOwogICAgICAgICB0aGlzLmN0eCAgICAgPSBjdHg7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICBkZWJ1ZygiV0FJVC4uLiIpOwpAQCAtODMsMjYgKzgzLDI2IEBACiAgICAgICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKTsKIAogICAgICAgICAgICAgICAgIGlmICghZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOyAKKyAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOwogICAgICAgICAgICAgICAgICAgICAvL3dtLmRvV29yayhkLCAwLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobmV3IEZha2VYQVJlc291cmNlKCkpOwogICAgICAgICAgICAgICAgICAgICBpbnQgbnVtT2ZNZXNzYWdlcyA9IDU7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vaW1wb3J0aW5nIHRyYW5zYWN0aW9uCiAKICAgICAgICAgICAgICAgICAgICAgLy93cml0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgRXhlY3V0aW9uQ29udGV4dCBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKIAotICAgICAgICAgICAgICAgICAgICBEZWxpdmVyeVdvcmsgdyA9IAorICAgICAgICAgICAgICAgICAgICBEZWxpdmVyeVdvcmsgdyA9CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiV1JJVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTExMCw3ICsxMTAsNyBAQAogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiRE9ORSBXUklURSBUTyBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSBudW1PZk1lc3NhZ2VzOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL3JvbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJERUxFVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTE1MCw3ICsxNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiREVMRVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xOTUsNyArMTk1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKFhBUmVzb3VyY2UuWEFfT0sgPT0geGEucHJlcGFyZShlYy5nZXRYaWQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlhBIFBSRVBBUkUvQ09NTUlULiBET05FIFdSSVRFIFRPIERCICIpOwpAQCAtMjA3LDE5ICsyMDcsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IDM7CiAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUgYWxsLgogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIDEsICJERUxFVEVfQUxMIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJET05FIERFTEVURSBBTEwgRlJPTSBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAwOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI0Myw3ICsyNDMsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtMjU4LDE0ICsyNTgsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMjg4LDEzICsyODgsMTMgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vU2xlZXAgZm9yIDUgc2Vjb25kcwogICAgICAgICAgICAgLy9UaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDUqMTAwMCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIC8vTm90aWZ5IHRoZSBjbGllbnQgdG8gY2hlY2sgdGhlIHJlc3VsdHMKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5KCk7IAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnkoKTsKKwogICAgICAgICAgICAgICAgIC8vV2FpdCB1bnRpbCByZXN1bHRzIGFyZSB2ZXJpZmllZCBieSB0aGUgY2xpZW50Ci0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsKIAogICAgICAgICAgICAgICAgIGlmIChzdG9wKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTMxMCw3ICszMTAsNyBAQAogICAgICAgICAgICAgQ29udHJvbHMuZG9uZSA9IHRydWU7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgLy9Ob3RpZnkgdGhlIGNsaWVudCB0byBjaGVjayB0aGUgcmVzdWx0cwotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnkoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCmluZGV4IDU1Mjg3M2UuLmRjODdiYjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKQEAgLTM2LDggKzM2LDggQEAKICAgICBwdWJsaWMgaW50IGJyYW5jaFF1YWxpZmllcjsKICAgICBwdWJsaWMgaW50IGdsb2JhbFR4SUQ7CiAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsgCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7IAorICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OworICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OwogCiAgICAgcHVibGljIFhJRCgpIHsKICAgICAgICAgaW50IGZvbyA9IElEKys7CkBAIC01NSwxMCArNTUsMTAgQEAKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgIC8vIEl0IGNhbid0IGJlIGVxdWFsCiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgb3RoZXIgPSAoWElEKW87ICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvdGhlciBYSUQsIG5vdyBwcm9wZXJseSBjYXN0Ci0gICAgICAgIAotICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRCAKKworICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRAogICAgICAgICAgICAgICAgICYmIHRoaXMuYnJhbmNoUXVhbGlmaWVyID09IG90aGVyLmJyYW5jaFF1YWxpZmllcgogICAgICAgICAgICAgICAgICYmIHRoaXMuZ2xvYmFsVHhJRCA9PSBvdGhlci5nbG9iYWxUeElEKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk4LDcgKzk4LDcgQEAKICAgICAgICAgICAgICAgICAiZm9ybWF0SUQoIiAgICAgKyBmb3JtYXRJRCAgICAgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImJyYW5jaFF1YWxpZmllciAoIiArIGJyYW5jaFF1YWxpZmllciArICIpLCAiICsKICAgICAgICAgICAgICAgICAiZ2xvYmFsVHhJRCgiICsgZ2xvYmFsVHhJRCArICIpfSIpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gczsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9hcHAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L2FwcC9idWlsZC54bWwKaW5kZXggYjNkN2ViNC4uMGQ4Zjk5NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L2FwcC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L2FwcC9idWlsZC54bWwKQEAgLTM4LDggKzM4LDggQEAKICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyIi8+CiAgPCEtLQogICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImdlbmVyaWMtZW1iZWRkZWQiLz4KLQk8cGFyYW0gbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJnZW5lcmljLWVtYmVkZGVkIi8+CisgICAgPHBhcmFtIG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgogICAgPC9hbnRjYWxsPgogIC0tPgogICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKaW5kZXggNjk2ZGQzZS4uNWE1MjEwZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKQEAgLTgxLDggKzgxLDggQEAKICAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgotCTxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8c2VjdXJpdHktaWRlbnRpdHk+CiAgICAgICAgIDx1c2UtY2FsbGVyLWlkZW50aXR5Lz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAppbmRleCBmNzJhZDc5Li42ZTBkYWVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCkBAIC04Myw3ICs4Myw3IEBACiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmVpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmVpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxnZW4tY2xhc3Nlcy8+CiAgICAgPC9lamI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQppbmRleCBiNTBkN2U0Li41NDI5ZWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKIAogICAgIHB1YmxpYyBNZXNzYWdlQ2hlY2tlckVKQigpIHt9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJiZWFuIGNyZWF0ZWQiKTsKICAgICAgICAgaGVsZENvbiA9IG51bGw7CkBAIC03MSwxMSArNzEsMTEgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgLy9UZWxsIHRoZSByZXNvdXJjZSBhZGFwdGVyIHRoZSBjbGllbnQgaXMgcmVhZHkgdG8gcnVuCi0gICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeUFsbCgpOyAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5QWxsKCk7CisKICAgICAgICAgICAgICAgICBkZWJ1ZygiTk9USUZJRUQuLi4gU1RBUlQgV0FJVElORyIpOwogICAgICAgICAgICAgICAgIC8vV2FpdCB1bnRpbCBiZWluZyB0b2xkIHRvIHJlYWQgZnJvbSB0aGUgZGF0YWJhc2UKLSAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkud2FpdCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkud2FpdCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtODMsMjIgKzgzLDIyIEBACiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRNZXNzYWdlQ291bnQoKSB7Ci0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBnZXRGcmVzaENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGludCBjb3VudDEgPSBnZXRDb3VudChjb24pOwogICAgICAgICAgICAgY29uLmNsb3NlKCk7Ci0gICAgICAgICAgICAKLQkgICAgLyoKKworICAgICAgICAvKgogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLmdldExvY2tPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnkoKTsKICAgICAgICAgICAgIH0KLQkgICAgKi8KLSAgICAgICAgICAgICAgICAKKyAgICAgICAgKi8KKwogICAgICAgICAgICAgcmV0dXJuIGNvdW50MTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5vdXQpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLQl9CisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgaW50IGdldENvdW50KENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKQEAgLTEyNCwxMCArMTI0LDEwIEBACiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICB1c2VyID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3VzZXIiKTsKICAgICAgICAgICAgIHBhc3N3b3JkID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3Bhc3N3b3JkIik7Ci0JICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvdGVzdEFkbWluIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTElORyBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKLQkgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExFRCBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKKyAgICAgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2Vpcy90ZXN0QWRtaW4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMSU5HIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOworICAgICAgICBDb250cm9scy5pbml0aWFsaXplKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTEVEIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0xNjIsNyArMTYyLDcgQEAKICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGNvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbjsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xNzMsNyArMTczLDcgQEAKICAgICAgICAgICAgIHRocm93IGV4MTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBjbG9zZUNvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBpZiAoaGVsZENvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwppbmRleCBkYWQyMDdiLi4wYjM4YzE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogZWpiLWphci54bWw9TUVUQS1JTkYvZWpiLWphci54bWwKIHN1bi1lamItamFyLnhtbD1NRVRBLUlORi9zdW4tZWpiLWphci54bWwKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAxNGMxNjkzLi4zMGY2MjkwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCwzNCArMjgsMzQgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgLy9zdXBlcihhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBkb1Rlc3QoKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCBjb25uZWN0b3IgMS41ICIrCi0JICAgICAgICAgICAgICJjb250cmFjdHMuIik7Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAiY29udHJhY3RzLiIpOworCiAgICAgICAgIFN0cmluZyByZXMgPSAiTk9UIFJVTiI7Ci0JZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CisgICAgZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CiAgICAgICAgIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmVzICA9ICJBTEwgVEVTVFMgUEFTU0VEIjsKLQkgICAgaW50IHRlc3RDb3VudCA9IDE7CisgICAgICAgIGludCB0ZXN0Q291bnQgPSAxOwogICAgICAgICAgICAgd2hpbGUgKCFkb25lKCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKICAgICAgICAgICAgICAgICBpZiAoIWRvbmUoKSkgewogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiUnVubmluZy4uLiIpOwogICAgICAgICAgICAgICAgICAgICBwYXNzID0gY2hlY2tSZXN1bHRzKGV4cGVjdGVkUmVzdWx0cygpKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkdvdCBleHBlY3RlZCByZXN1bHRzID0gIiArIHBhc3MpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RvIG5vdCBjb250aW51ZSBpZiBvbmUgdGVzdCBmYWlsZWQKICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXNzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSAiU09NRSBURVNUUyBGQUlMRUQiOwpAQCAtNjMsMTEgKzYzLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgRW1iZWRkZWQtQ29ubmVjdG9yLTEuNSB0ZXN0IC0gIiArIHRlc3RDb3VudCwgc3RhdC5QQVNTKTsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0JCXRlc3RDb3VudCsrOworICAgICAgICB0ZXN0Q291bnQrKzsKICAgICAgICAgICAgIH0KIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTc4LDE0ICs3OCwxNCBAQAogCiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJFbWJlZGRlZC1Db25uZWN0b3ItMS41Iik7CiAKLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkVYSVRJTkcuLi4gU1RBVFVTID0gIiArIHJlcyk7CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrUmVzdWx0cyhpbnQgbnVtKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgaW50IHJlc3VsdCA9IGNoZWNrZXIuZ2V0TWVzc2FnZUNvdW50KCk7CkBAIC05NCw3ICs5NCw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gZG9uZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gY2hlY2tlci5kb25lKCk7CkBAIC0xMDIsNyArMTAyLDcgQEAKIAogICAgIHByaXZhdGUgaW50IGV4cGVjdGVkUmVzdWx0cygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gY2hlY2tlci5leHBlY3RlZFJlc3VsdHMoKTsKQEAgLTExMCw3ICsxMTAsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIG5vdGlmeUFuZFdhaXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgY2hlY2tlci5ub3RpZnlBbmRXYWl0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQppbmRleCBiN2Q0NDNiLi5jZDlmMTA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKQEAgLTI5LDQxICsyOSw0MSBAQAogCiAvKioKICAqLwotcHVibGljIGNsYXNzIE15TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwgCitwdWJsaWMgY2xhc3MgTXlNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLAogICAgICAgICBNeU1lc3NhZ2VMaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIHRyYW5zaWVudCBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMgPSBudWxsOwogICAgIHByaXZhdGUgQ29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IsIHdoaWNoIGlzIHB1YmxpYyBhbmQgdGFrZXMgbm8gYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyBNeU1lc3NhZ2VCZWFuKCkge30KIAogICAgIC8qKgotICAgICAqIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgCi0gICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgCisgICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dAorICAgICAqIG5vdCBmaW5hbCBvciBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kCiAgICAgICogd2l0aCBvbmUgYXJndW1lbnQgb2YgdHlwZSBqYWthcnRhLmVqYi5NZXNzYWdlRHJpdmVuQ29udGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBtZGMgICAgdGhlIGNvbnRleHQgdG8gc2V0CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjKSB7Ci0JdGhpcy5tZGMgPSBtZGM7CisgICAgdGhpcy5tZGMgPSBtZGM7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogZWpiQ3JlYXRlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgeyB9CiAKICAgICAvKioKLSAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCisgICAgICogb25NZXNzYWdlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCiAgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG9uZSBhcmd1bWVudAogICAgICAqIG9mIHR5cGUgamFrYXJ0YS5qbXMuTWVzc2FnZS4KICAgICAgKgotICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzIAorICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzCiAgICAgICogdGhlIHRleHQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gaW5NZXNzYWdlICAgIHRoZSBpbmNvbWluZyBtZXNzYWdlCkBAIC03NCw3ICs3NCw3IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmIChpbk1lc3NhZ2UuZW5kc1dpdGgoIldSSVRFIikpIHsKLSAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwgCisgICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJXUklURSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbk1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGluTWVzc2FnZS5sYXN0SW5kZXhPZigiOiIpKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiREVMRVRFIikpIHsKICAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIkRFTEVURSIsCkBAIC05MCwxMCArOTAsMTAgQEAKICAgICAgICAgfQogCiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogZWpiUmVtb3ZlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJSZW1vdmUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KQEAgLTEwMyw2MyArMTAzLDYzIEBACiAKICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBTdHJpbmcgaWQgICAgPSBtZXNzYWdlLnN1YnN0cmluZygwLCBtZXNzYWdlLmluZGV4T2YoIjoiKSk7Ci0gICAgICAgIFN0cmluZyBib2R5ICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKG1lc3NhZ2UuaW5kZXhPZigiOiIpKzEpOyAKKyAgICAgICAgU3RyaW5nIGJvZHkgID0gbWVzc2FnZS5zdWJzdHJpbmcobWVzc2FnZS5pbmRleE9mKCI6IikrMSk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKCJSRUFEIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiUmVhZGluZyByb3cgZnJvbSBkYXRhYmFzZS4uLiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPSAKKyAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9CiAgICAgICAgICAgICAgICAgICAiU0VMRUNUIGlkIGZyb20gbWVzc2FnZXMgd2hlcmUgaWQgPSAnUVEnIjsKICAgICAgICAgICAgICAgICAgIFJlc3VsdFNldCByZXN1bHRzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKyAKKyAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArCiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmdldEludCgiYmFsYW5jZSIpICsgIiBkb2xsYXJzIik7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICBzdG10LmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWFkIG9uZSBhY2NvdW50XG4iKTsKICAgICAgICAgICAgICAgICAqLwogCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJXUklURSIuZXF1YWxzKG9wKSkgewogCiAgICAgICAgICAgICAgICAgZGVidWcoIkluc2VydGluZyBvbmUgbWVzc2FnZSBpbiB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGNyZWF0ZVJvdyhpZCwgYm9keSwgZGJDb25uZWN0aW9uKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgb25lIG1lc3NhZ2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJERUxFVEUiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBvbmUgbWVzc2FnZSBmcm9tIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlbGV0ZVJvdyhpZCwgZGJDb25uZWN0aW9uKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlbGV0ZWQgb25lIG1lc3NhZ2VcbiIpOwogICAgICAgICAgICAgfSBlbHNlIGlmICgiREVMRVRFX0FMTCIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIkRlbGV0aW5nIGFsbCBtZXNzYWdlcyBmcm9tIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwpAQCAtMTcwLDcgKzE3MCw3IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vdW5zdXBwb3J0ZWQgb3AKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH1maW5hbGx5ewogICAgICAgICAgICAgdHJ5ewogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbi5jbG9zZSgpOwpAQCAtMTc5LDkgKzE3OSw5IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVJvdyhTdHJpbmcgaWQsIFN0cmluZyBib2R5LCAKLSAgICAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKworICAgIHByaXZhdGUgdm9pZCBjcmVhdGVSb3coU3RyaW5nIGlkLCBTdHJpbmcgYm9keSwKKyAgICAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICAvLyBDcmVhdGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKQEAgLTE5Nyw5ICsxOTcsOSBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvdyhTdHJpbmcgaWQsIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlUm93KFN0cmluZyBpZCwgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICAvLyBEZWxldGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKICAgICAgICAgZGVidWcoIkRlbGV0ZVJvdyB3aXRoIElEID0gIiArIGlkKTsKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7CkBAIC0yMTIsOSArMjEyLDkgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVBbGwoamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVBbGwoamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICAvLyBEZWxldGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgIFN0cmluZyBxdWVyeSA9ICJERUxFVEUgRlJPTSBtZXNzYWdlcyI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L2J1aWxkLnhtbAppbmRleCBmOWYwYWVlLi44NjFlN2JiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9idWlsZC54bWwKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iZ2VuZXJpYy1lbWJlZGRlZCIgLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImdlbmVyaWMtZW1iZWRkZWQiIC8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL01FVEEtSU5GL3JhLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9NRVRBLUlORi9yYS54bWwKaW5kZXggMmNhMmViYy4uMjFkZWI5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL01FVEEtSU5GL3JhLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvTUVUQS1JTkYvcmEueG1sCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAgICAgICAgIDxpbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4gICAgICAgICAgCisgICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgICAgICAgICAgPG1lc3NhZ2VsaXN0ZW5lcj4KICAgICAgICAgICAgICAgICAgICAgPG1lc3NhZ2VsaXN0ZW5lci10eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyCkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8L2FjdGl2YXRpb25zcGVjLWNsYXNzPgogICAgICAgICAgICAgICAgICAgICA8L2FjdGl2YXRpb25zcGVjPgogICAgICAgICAgICAgICAgIDwvbWVzc2FnZWxpc3RlbmVyPgotICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4gICAgICAgICAgCisgICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPgogICAgICAgICA8L2luYm91bmQtcmVzb3VyY2VhZGFwdGVyPgogICAgICAgICA8YWRtaW5vYmplY3Q+CiAgICAgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2J1aWxkLnhtbAppbmRleCAyYjc3NDg5Li43ODM5OTFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2J1aWxkLnhtbApAQCAtMzAsOCArMzAsOCBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+Ci0JPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KKyAgICA8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgorICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxqYXIgamFyZmlsZT0iLi4vZ2VuZXJpYy1yYS5qYXIiIGJhc2VkaXI9ImNsYXNzZXMiCiAgICAgICAgICBpbmNsdWRlcz0iY29ubmVjdG9yLyouY2xhc3MiIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQppbmRleCA1NTUzM2Q0Li5mNTliMmIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBDb250cm9scyB7CiAgICAgcHVibGljIHN0YXRpYyBPYmplY3QgcmVhZHlMb2NrID0gbmV3IE9iamVjdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQppbmRleCA2NTgyMzNlLi5kNzNjODYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIERlbGl2ZXJ5V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zNiw3ICszNiw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgb3A7CiAgICAgcHJpdmF0ZSBib29sZWFuIGtlZXBDb3VudDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnRlciA9IDA7Ci0gICAgCisKICAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIFN0cmluZyBvcCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgdGhpcy5rZWVwQ291bnQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIAorICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywKICAgICAgICAgICAgIFN0cmluZyBvcCwgYm9vbGVhbiBrZWVwQ291bnQpIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC01NSw3ICs1NSw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9NZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7CiAgICAgICAgICAgICAvL2VwLmJlZm9yZURlbGl2ZXJ5KG9uTWVzc2FnZSk7CkBAIC03OCwxMSArNzgsMTEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy9lcC5hZnRlckRlbGl2ZXJ5KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtOTMsMTQgKzkzLDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQppbmRleCAxMDBjYWNlLi5mYTkzZjYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLmZvcmdldDogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgIH0KQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnByZXBhcmU6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICAgICAgcmV0dXJuIFhBUmVzb3VyY2UuWEFfT0s7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5yZWNvdmVyOiAiICsgZmxhZ1RvU3RyaW5nKGZsYWcpKTsKICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc3RhcnQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2Uuc3RhcnQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpICsgIiwiICsKICAgICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCmluZGV4IGI1YjBmMDIuLjRjOWMwMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogLyoqCiAgKiBjb2xsZWN0aW9uIG9mIG1lc3NhZ2VzLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgTWVzc2FnZXMgewogCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgU3RyaW5nIGNvbW1hbmQgID0gYXJnc1swXTsKICAgICAgICBTdHJpbmcgZGVzdE5hbWUgPSBhcmdzWzFdOwogICAgICAgIFN0cmluZyBtZXNzYWdlICA9IGFyZ3NbMl07Ci0gICAKKwogICAgICAgIGlmICghImFkZCIuZXF1YWxzKGNvbW1hbmQpKSB7CiAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQppbmRleCA4NjJmOWZmLi5kMTk5ZDAxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCkBAIC0zOCwxMSArMzgsMTEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOwogICAgICAgICBpZiAocmVzZXRDb250cm9sLmVxdWFscygiQkVHSU5OSU5HIikpIHsKICAgICAgICAgICAgQ29udHJvbHMuZG9uZT1mYWxzZTsKLQkgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKLQl9CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGRvbmUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCmluZGV4IDJlY2VjNjMuLmE5YTg4ODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgTXlXb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTM1LDcgKzM1LDcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gc3RvcCA9IGZhbHNlOwogICAgIHByaXZhdGUgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5OwogICAgIHByaXZhdGUgV29ya01hbmFnZXIgd207Ci0gICAgCisKICAgICBwdWJsaWMgTXlXb3JrKAogICAgICAgICAgICAgU3RyaW5nIG5hbWUsIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwgV29ya01hbmFnZXIgd20pIHsKICAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTsKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgICAgICBNZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSk7CiAKICAgICAgICAgICAgICAgICAvKgpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtODUsMTQgKzg1LDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCmluZGV4IDk0NmQ5ODcuLmJiNzkxOGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQpAQCAtMjQsOSArMjQsOSBAQAogICogc28gdGhhdCB0aGUgYXBwIHNlcnZlciBjYW4gaW5zdGFudGlhdGUgYW5kIGNvbmZpZ3VyZQogICogaXQgYXQgdGhlIHJ1bnRpbWUuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYyAKK3B1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYwogICAgIGltcGxlbWVudHMgQWN0aXZhdGlvblNwZWMsIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByaXZhdGUgU3RyaW5nIGRlc3RpbmF0aW9uTmFtZTsKQEAgLTQyLDcgKzQyLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uTmFtZSAoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uTmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvbk5hbWUgKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvbk5hbWUoKSBjYWxsZWQuLi4gbmFtZSA9ICIgKyBuYW1lKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbk5hbWUgPSBuYW1lOwpAQCAtNTEsNyArNTEsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25UeXBlKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvblR5cGU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25UeXBlIChTdHJpbmcgdHlwZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25UeXBlICgpIGNhbGxlZC4uLiB0eXBlID0gIiArIHR5cGUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uVHlwZT0gdHlwZTsKQEAgLTYwLDcgKzYwLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3RQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0UHJvcDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0UHJvcCAoU3RyaW5nIHRlc3RQcm9wKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0UHJvcCAoKSBjYWxsZWQuLi4gdGVzdFByb3AgPSAiICsgdGVzdFByb3ApOwogICAgICAgICB0aGlzLnRlc3RQcm9wID0gdGVzdFByb3A7CkBAIC03Niw3ICs3Niw3IEBACiAgICAgICAgIHRoaXMucmVzb3VyY2VhZGFwdGVyID0gcmE7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgdmFsaWRhdGUoKSB7fSAKKyAgICBwdWJsaWMgdm9pZCB2YWxpZGF0ZSgpIHt9CiAKICAgICBwcml2YXRlIHZvaWQgZGVidWcgKFN0cmluZyBtZXNzYWdlKQogICAgIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQppbmRleCAyMWU3OTFkLi4xY2Y1YWMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCkBAIC00MCw5ICs0MCw5IEBACiAvKioKICAqIFRoaXMgaXMgYSBzYW1wbGUgcmVzb3VyY2UgYWRhcHRlcgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbCAKK3B1YmxpYyBjbGFzcyBTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsCiBpbXBsZW1lbnRzIFJlc291cmNlQWRhcHRlciwgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJpdmF0ZSBCb290c3RyYXBDb250ZXh0IGN0eDsKQEAgLTU4LDcgKzU4LDcgQEAKIAogICAgIHB1YmxpYyB2b2lkCiAgICAgc3RhcnQoQm9vdHN0cmFwQ29udGV4dCBjdHgpIHRocm93cyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIjAwMS4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAKICAgICAgICAgdGhpcy5jdHggPSBjdHg7CkBAIC02OCwyMSArNjgsMjEgQEAKIAogICAgICAgICAvL3Rlc3RpbmcgY3JlYXQgdGltZXIKICAgICAgICAgVGltZXIgdGltZXIgPSBudWxsOwotCSAgdHJ5ewotCSAgICAgIHRpbWVyID0gY3R4LmNyZWF0ZVRpbWVyKCk7Ci0JICB9IGNhdGNoKFVuYXZhaWxhYmxlRXhjZXB0aW9uIHVlKSB7Ci0JICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciIpOwotCSAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiRXJyb3IgZm9ybSBib290c3RyYXAiKTsKLQkgIH0KKyAgICAgIHRyeXsKKyAgICAgICAgICB0aW1lciA9IGN0eC5jcmVhdGVUaW1lcigpOworICAgICAgfSBjYXRjaChVbmF2YWlsYWJsZUV4Y2VwdGlvbiB1ZSkgeworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IiKTsKKyAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIGZvcm0gYm9vdHN0cmFwIik7CisgICAgICB9CiAgICAgICAgIGRlYnVnKCIwMDQuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogCiAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAKKwogICAgICAgICAgIFhBVGVybWluYXRvciB4YSA9IGN0eC5nZXRYQVRlcm1pbmF0b3IoKTsKLSAgICAgICAgICAKKwogICAgICAgICAgIFhpZCB4aWQxID0gbmV3IFhJRCgpOwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFhJRDEgPSAiICsgeGlkMSk7Ci0gICAgICAgICAgCisKICAgICAgICAgICBFeGVjdXRpb25Db250ZXh0IGVjID0gbmV3IEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICBlYy5zZXRYaWQoeGlkMSk7CiAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCkBAIC05MiwxNCArOTIsMTQgQEAKICAgICAgICAgICB3bS5kb1dvcmsob3V0dywgMSoxMDAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgeGEuY29tbWl0KHhpZDEsIHRydWUpOwogICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgIAorCiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgZXggPSAiICsgZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICB4YS5yb2xsYmFjayh4aWQxKTsKICAgICAgICAgICB9Ci0gICAgICAgICAgCisKICAgICAgICAgICBYaWQgeGlkMiA9IG5ldyBYSUQoKTsKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBYSUQyID0gIiArIHhpZDIpOwotICAgICAgICAgIAorCiAgICAgICAgICAgZWMgPSBuZXcgRXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgIGVjLnNldFhpZCh4aWQyKTsKICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKQEAgLTExNiw3ICsxMTYsNyBAQAogICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgIH0KIAotICAgICAgICAKKwogICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IDM7IGkrKykgewogICAgICAgICAgIFRlc3RXTVdvcmsgdyA9IG5ldyBUZXN0V01Xb3JrKGksIGZhbHNlKTsKICAgICAgICAgICB0cnkgewpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGQUlMOiBDQVVHSFQgZXhjZXB0aW9uIDogaSA9ICIgKyBpKTsKICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICB9IAorICAgICAgICAgIH0KICAgICAgICAgICB9CiAKICAgICAgICAgICBmb3IgKGludCBpID0gMyA7IGkgPCA2OyBpKyspIHsKQEAgLTE3Miw3ICsxNzIsNyBAQAogICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgIH0KICAgICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCIwMDUuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogICAgIH0KIApAQCAtMjA0LDEyICsyMDQsMTIgQEAKIAogICAgIHB1YmxpYyB2b2lkCiAgICAgZW5kcG9pbnREZWFjdGl2YXRpb24gKAotICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBlbmRwb2ludEZhY3RvcnksIAorICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBlbmRwb2ludEZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIGRlYnVnICgiZW5kcG9pbnREZWFjdGl2YXRpb24gY2FsbGVkLi4uIik7CiAgICAgICAgICgoV29ya0Rpc3BhdGNoZXIpIHdvcmspLnN0b3AoKTsKICAgICB9Ci0gIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHRlc3ROYW1lOwogICAgIH0KQEAgLTIyNSw3ICsyMjUsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbF0gPT0+ICIgKyBtZXNzYWdlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpIAorICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykKICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCmluZGV4IDdlNTg1YTMuLjljZDA2NjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBUZXN0V01Xb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTQyLDggKzQyLDggQEAKICAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSkgewogICAgICAgICB0aGlzKGlkLCBpc1JvZ3VlLCBmYWxzZSwgbnVsbCk7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLCAKKworICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLAogICAgICAgICAgICAgYm9vbGVhbiBkb05lc3QsIEV4ZWN1dGlvbkNvbnRleHQgY3R4KSB7CiAgICAgICAgIHRoaXMuaWQgPSBpZDsKICAgICAgICAgdGhpcy5pc1JvZ3VlID0gaXNSb2d1ZTsKQEAgLTc3LDEwICs3NywxMCBAQAogICAgICAgICAgICAgfSBjYXRjaCAoV29ya0V4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIGlmIChleC5nZXRFcnJvckNvZGUoKS5lcXVhbHMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya0V4Y2VwdGlvbi5UWF9DT05DVVJSRU5UX1dPUktfRElTQUxMT1dFRCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQVNTOiBDQVVHSFQgRVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKICAgICAgICAgICAgICAgICB3bS5kb1dvcmsobmVzdGVkV29yaywgMSoxMDAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICJGQUlMOiBDQVVHSFQgVU5FWFBFQ1RFRCA9ICIgKyBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCAzNGE2MDRmLi5jZDk4YzQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBXb3JrRGlzcGF0Y2hlciBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC00NCwxMSArNDQsMTEgQEAKICAgICBwcml2YXRlIEFjdGl2YXRpb25TcGVjIHNwZWM7CiAgICAgcHJpdmF0ZSBXb3JrTWFuYWdlciB3bTsKICAgICBwcml2YXRlIFhBVGVybWluYXRvciB4YTsKLSAgICAKKwogICAgIHB1YmxpYyBXb3JrRGlzcGF0Y2hlcigKICAgICAgICAgICAgIFN0cmluZyBpZCwKICAgICAgICAgICAgIEJvb3RzdHJhcENvbnRleHQgY3R4LAotICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LCAKKyAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwKICAgICAgICAgICAgIEFjdGl2YXRpb25TcGVjIHNwZWMpIHsKICAgICAgICAgdGhpcy5pZCAgICAgID0gaWQ7CiAgICAgICAgIHRoaXMuY3R4ICAgICA9IGN0eDsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAKICAgICAgICAgZGVidWcoIkVOVEVSLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIGRlYnVnKCJXQUlULi4uIik7CkBAIC04MywyNiArODMsMjYgQEAKICAgICAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgICAgICBNZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwotICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7IAorICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7CiAgICAgICAgICAgICAgICAgICAgIC8vd20uZG9Xb3JrKGQsIDAsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChuZXcgRmFrZVhBUmVzb3VyY2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIGludCBudW1PZk1lc3NhZ2VzID0gNTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9pbXBvcnRpbmcgdHJhbnNhY3Rpb24KIAogICAgICAgICAgICAgICAgICAgICAvL3dyaXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBFeGVjdXRpb25Db250ZXh0IGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwogCi0gICAgICAgICAgICAgICAgICAgIERlbGl2ZXJ5V29yayB3ID0gCisgICAgICAgICAgICAgICAgICAgIERlbGl2ZXJ5V29yayB3ID0KICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJXUklURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJET05FIFdSSVRFIFRPIERCIik7CiAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IG51bU9mTWVzc2FnZXM7CiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvcm9sbGJhY2sKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7CkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIkRFTEVURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTUwLDcgKzE1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJERUxFVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTE5NSw3ICsxOTUsNyBAQAogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBpZiAoWEFSZXNvdXJjZS5YQV9PSyA9PSB4YS5wcmVwYXJlKGVjLmdldFhpZCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiWEEgUFJFUEFSRS9DT01NSVQuIERPTkUgV1JJVEUgVE8gREIgIik7CkBAIC0yMDcsMTkgKzIwNywxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gMzsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZSBhbGwuCiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgMSwgIkRFTEVURV9BTEwiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkRPTkUgREVMRVRFIEFMTCBGUk9NIERCIik7CiAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IDA7CiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjQzLDcgKzI0Myw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC0yNTgsMTQgKzI1OCwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0yODgsMTMgKzI4OCwxMyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9TbGVlcCBmb3IgNSBzZWNvbmRzCiAgICAgICAgICAgICAvL1RocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoNSoxMDAwKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgLy9Ob3RpZnkgdGhlIGNsaWVudCB0byBjaGVjayB0aGUgcmVzdWx0cwotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnkoKTsgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeSgpOworCiAgICAgICAgICAgICAgICAgLy9XYWl0IHVudGlsIHJlc3VsdHMgYXJlIHZlcmlmaWVkIGJ5IHRoZSBjbGllbnQKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2sud2FpdCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2sud2FpdCgpOwogCiAgICAgICAgICAgICAgICAgaWYgKHN0b3ApIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzEwLDcgKzMxMCw3IEBACiAgICAgICAgICAgICBDb250cm9scy5kb25lID0gdHJ1ZTsKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICAvL05vdGlmeSB0aGUgY2xpZW50IHRvIGNoZWNrIHRoZSByZXN1bHRzCi0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeSgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCmluZGV4IDU1Mjg3M2UuLmRjODdiYjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCkBAIC0zNiw4ICszNiw4IEBACiAgICAgcHVibGljIGludCBicmFuY2hRdWFsaWZpZXI7CiAgICAgcHVibGljIGludCBnbG9iYWxUeElEOwogCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7IAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OyAKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsKIAogICAgIHB1YmxpYyBYSUQoKSB7CiAgICAgICAgIGludCBmb28gPSBJRCsrOwpAQCAtNTUsMTAgKzU1LDEwIEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAvLyBJdCBjYW4ndCBiZSBlcXVhbAogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG90aGVyID0gKFhJRClvOyAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3RoZXIgWElELCBub3cgcHJvcGVybHkgY2FzdAotICAgICAgICAKLSAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQgCisKKyAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQKICAgICAgICAgICAgICAgICAmJiB0aGlzLmJyYW5jaFF1YWxpZmllciA9PSBvdGhlci5icmFuY2hRdWFsaWZpZXIKICAgICAgICAgICAgICAgICAmJiB0aGlzLmdsb2JhbFR4SUQgPT0gb3RoZXIuZ2xvYmFsVHhJRCkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05OCw3ICs5OCw3IEBACiAgICAgICAgICAgICAgICAgImZvcm1hdElEKCIgICAgICsgZm9ybWF0SUQgICAgICsgIiksICIgKwogICAgICAgICAgICAgICAgICJicmFuY2hRdWFsaWZpZXIgKCIgKyBicmFuY2hRdWFsaWZpZXIgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImdsb2JhbFR4SUQoIiArIGdsb2JhbFR4SUQgKyAiKX0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHM7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCmluZGV4IGIwM2JiYWIuLmRhZThjYWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCkBAIC0zNCwxMiArMzQsMTIgQEAKICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iVVJMIiB2YWx1ZT0iamRiYzpkZXJieTovL2xvY2FsaG9zdDoxNTI3L3Rlc3RkYjtjcmVhdGU9dHJ1ZTsiLz4KICAgICAgICAgPC9jb25uZWN0b3ItY29ubmVjdGlvbi1wb29sPgogCi0gICAKKwogPGNvbm5lY3Rvci1yZXNvdXJjZSBqbmRpLW5hbWU9ImpkYmMvZWpiLXN1YmNsYXNzaW5nIiBwb29sLW5hbWU9IndlYi1zdWJjbGFzc2luZ0FwcCNqZGJjcmEjamF2YXguc3FsLkRhdGFTb3VyY2UiLz4KIAogPGFkbWluLW9iamVjdC1yZXNvdXJjZSBqbmRpLW5hbWU9ImVpcy9qZGJjQWRtaW4iIHJlcy10eXBlPSJjb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW4iIHJlcy1hZGFwdGVyPSJ3ZWItc3ViY2xhc3NpbmdBcHAjamRiY3JhIj4KICAgIDxwcm9wZXJ0eSBuYW1lPSJUYWJsZU5hbWUiIHZhbHVlPSJjdXN0b21lcjIiLz4KLSAgIDxwcm9wZXJ0eSBuYW1lPSJKbmRpTmFtZSIgdmFsdWU9ImphdmE6YXBwL2pkYmMvZWpiLXN1YmNsYXNzaW5nIi8+IAorICAgPHByb3BlcnR5IG5hbWU9IkpuZGlOYW1lIiB2YWx1ZT0iamF2YTphcHAvamRiYy9lamItc3ViY2xhc3NpbmciLz4KICAgIDxwcm9wZXJ0eSBuYW1lPSJTY2hlbWFOYW1lIiB2YWx1ZT0iREJVU0VSIi8+CiAgICA8cHJvcGVydHkgbmFtZT0iTm9PZlJvd3MiIHZhbHVlPSIxIi8+CiA8L2FkbWluLW9iamVjdC1yZXNvdXJjZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGUyY2M3NWQuLmRjMTljOWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTYgKzE1LDE2IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXN1YmNsYXNzaW5nIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zdWJjbGFzc2luZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0ic3ViY2xhc3NpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL2J1aWxkLnhtbAppbmRleCA5ZTBjYjZiLi5iOTliNDNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvYnVpbGQueG1sCkBAIC0zMiw3ICszMiw3IEBACiAgICAgJmNvbW1vbkJ1aWxkOwogICAgICZjb21tb25SdW47CiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwotICAgIAorCiA8IS0tCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLHNldHVwLGRlcGxveS13YXIsIHJ1bi13YXIsIHVuZGVwbG95LXdhciwgZGVwbG95LWVhciwgcnVuLWVhciwgdW5kZXBsb3ktZWFyLCB1bnNldHVwIi8+CiAKQEAgLTQxLDE1ICs0MSwxNSBAQAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCwgc2V0dXAsIGRlcGxveS1lYXIsIHJ1bi1lYXIsIHVuc2V0dXAsIHVuZGVwbG95LWVhciIvPgogCiA8IS0tCi0JPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgotCTxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1bi13YXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhciIvPgotCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWVhciIvPgotCTxhbnRjYWxsIHRhcmdldD0icnVuLWVhciIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktZWFyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi13YXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWVhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWVhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktZWFyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CiAgICAgPC90YXJnZXQ+CiAtLT4KIApAQCAtNTcsMTIgKzU3LDEyIEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgICAgPGFudCBkaXI9InJhIiB0YXJnZXQ9ImNsZWFuIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbm5lY3RvciI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9zaW1wbGVCYW5rLnNxbCIvPgogICAgIDwvYW50Y2FsbD4KLSAgICAgICAgCisKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1wb29sIj4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jb25uZWN0b3ItY29ubnBvb2wtY29tbW9uIj4KQEAgLTcxLDkgKzcxLDkgQEAKICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmNvbnBvb2wubmFtZSIgdmFsdWU9ImVtYmVkZGVkLXJhLXBvb2wiLz4KICAgICAgICAgICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtb3JhY2xlLXByb3BzIj4KLQkJPHBhcmFtIG5hbWU9InBvb2wudHlwZSIgdmFsdWU9ImNvbm5lY3RvciIvPgotCQk8cGFyYW0gbmFtZT0iY29ucG9vbC5uYW1lIiB2YWx1ZT0iZW1iZWRkZWQtcmEtcG9vbCIvPgotCQk8L2FudGNhbGw+CisgICAgICAgIDxwYXJhbSBuYW1lPSJwb29sLnR5cGUiIHZhbHVlPSJjb25uZWN0b3IiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImNvbnBvb2wubmFtZSIgdmFsdWU9ImVtYmVkZGVkLXJhLXBvb2wiLz4KKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlIj4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jb25uZWN0b3ItcmVzb3VyY2UtY29tbW9uIj4KQEAgLTg2LDE4ICs4NiwxOCBAQAogICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1hZG1pbi1vYmplY3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJjcmVhdGUtYWRtaW4tb2JqZWN0IC0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IC0tcmVzdHlwZSBjb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW4gLS1yYW5hbWUgJHthcHBuYW1lfUFwcCNqZGJjcmEgLS1wcm9wZXJ0eSBUYWJsZU5hbWU9Y3VzdG9tZXIyOkpuZGlOYW1lPWpkYmMvZWpiLXN1YmNsYXNzaW5nOlNjaGVtYU5hbWU9Y29ubmVjdG9yOk5vT2ZSb3dzPTEiLz4KLQkgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSJlaXMvamRiY0FkbWluIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iZWlzL2pkYmNBZG1pbiIvPgogICAgICAgICAgPC9hbnRjYWxsPgogICAgICA8L3RhcmdldD4KIAogICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1hZG1pbi1vYmplY3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImRlbGV0ZS1hZG1pbi1vYmplY3QiLz4KLQkgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSBlaXMvamRiY0FkbWluIi8+Ci0JIDwvYW50Y2FsbD4KLQkgPCEtLWFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLy0tPgorICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImRlbGV0ZS1hZG1pbi1vYmplY3QiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSBlaXMvamRiY0FkbWluIi8+CisgICAgIDwvYW50Y2FsbD4KKyAgICAgPCEtLWFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLy0tPgogICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmVzdGFydCI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTEwNSwxNSArMTA1LDE1IEBACiAgICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJhLWNvbmZpZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImNyZWF0ZS1yZXNvdXJjZS1hZGFwdGVyLWNvbmZpZyAgLS1wcm9wZXJ0eSBSQVByb3BlcnR5PVZBTElEIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCNqZGJjcmEiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke2FwcG5hbWV9QXBwI2pkYmNyYSIvPgogICAgICAgICAgPC9hbnRjYWxsPgogICAgICA8L3RhcmdldD4KIAogICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yYS1jb25maWciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImRlbGV0ZS1yZXNvdXJjZS1hZGFwdGVyLWNvbmZpZyIvPgotCSAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7YXBwbmFtZX1BcHAjamRiY3JhIi8+Ci0JIDwvYW50Y2FsbD4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtcmVzb3VyY2UtYWRhcHRlci1jb25maWciLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke2FwcG5hbWV9QXBwI2pkYmNyYSIvPgorICAgICA8L2FudGNhbGw+CiAgICAgICAgICA8IS0tYW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvLS0+CiAgICAgIDwvdGFyZ2V0PgogCkBAIC0xMjIsNyArMTIyLDcgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BCYW5rVGFibGVzLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcG9vbCI+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtY29ubmVjdG9yLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5jb25wb29sLm5hbWUiIHZhbHVlPSJlbWJlZGRlZC1yYS1wb29sIi8+CkBAIC0xMzIsNyArMTMyLDcgQEAKICAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2UiPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWNvbm5lY3Rvci1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3Iuam5kaS5uYW1lIiB2YWx1ZT0iamRiYy9lamItc3ViY2xhc3NpbmciLz4KLQkJPC9hbnRjYWxsPgorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KQEAgLTE0OCw5ICsxNDgsOSBAQAogICAgICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogQ29tcGlsaW5nIHRlc3Qgc291cmNlIGZpbGVzIiBsZXZlbD0idmVyYm9zZSIvPgogICAgICAgPGphdmFjIHNyY2Rpcj0ic2VydmxldCIKICAgICAgICAgIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgotCSBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofTpyYS9wdWJsaXNoL2ludGVybmFsL2NsYXNzZXMiCisgICAgIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9OnJhL3B1Ymxpc2gvaW50ZXJuYWwvY2xhc3NlcyIKICAgICAgICAgIGRlYnVnPSJvbiIKLQkgZmFpbG9uZXJyb3I9InRydWUiLz4KKyAgICAgZmFpbG9uZXJyb3I9InRydWUiLz4KICAgICAgPC90YXJnZXQ+CiAKIApAQCAtMTU5LDI3ICsxNTksMjcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgIDxhbnQgZGlyPSJyYSIgdGFyZ2V0PSJhc3NlbWJsZSIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgIDwvYW50Y2FsbD4KLSAgICAgICAKKwogICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgogICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICA8L2FudGNhbGw+CiAKLSAgICAKKwogICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KLSAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgIAorICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIgogICAgICBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+CiAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+Ci0gICAgPC9maWxlc2V0PiAgCisgICAgPC9maWxlc2V0PgogICAgIDxmaWxlc2V0IGRpcj0icmEvcHVibGlzaC9saWIiPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi5yYXIiLz4KICAgICA8L2ZpbGVzZXQ+CkBAIC0xODcsOSArMTg3LDkgQEAKICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIi8+CiAgICAgPC9maWxlc2V0PgogICAgIDwvZWFyPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktZWFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTk3LDI3ICsxOTcsMjcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS13YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4td2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViY2xpZW50LWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9IndlYi10by1lamIgKHN0YW5kLWFsb25lIHdhciBiYXNlZCkiLz4KLQk8L2FudGNhbGw+CisgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9IndlYi10by1lamIgKHN0YW5kLWFsb25lIHdhciBiYXNlZCkiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWJjbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0id2ViLXRvLWVqYiAoZWFyIGJhc2VkKSIvPgotCTwvYW50Y2FsbD4KKyAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0id2ViLXRvLWVqYiAoZWFyIGJhc2VkKSIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktZWFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiA8IS0tICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1yYS1jb25maWciLz4tLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS13YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggNzk5NWNlMy4uNTFmM2JlYyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI5LDIwICsyOSwyMCBAQAogICAgICAgICA8cmVzLXJlZi1uYW1lPmpkYmMvU2ltcGxlQmFuazwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmphdmE6YXBwL2pkYmMvZWpiLXN1YmNsYXNzaW5nPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+IAotICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4gCi0gICAgIDxiZWFuLXBvb2w+IAotICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4gCi0gICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgIDwvYmVhbi1wb29sPiAKLSAgICAgIDxiZWFuLWNhY2hlPiAKLSAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4gCi0gICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4gCi0gICAgICA8L2JlYW4tY2FjaGU+IAorICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4KKyAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+CisgICAgIDxiZWFuLXBvb2w+CisgICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPgorICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+CisgICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICA8L2JlYW4tcG9vbD4KKyAgICAgIDxiZWFuLWNhY2hlPgorICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPgorICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgorICAgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogICAgIDxlamI+CiAgICAgICA8ZWpiLW5hbWU+Q3VzdG9tZXJDaGVja2luZ0VKQjwvZWpiLW5hbWU+CkBAIC01MSwyMCArNTEsMjAgQEAKICAgICAgICAgPHJlcy1yZWYtbmFtZT5qZGJjL1NpbXBsZUJhbms8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qYXZhOmFwcC9qZGJjL2VqYi1zdWJjbGFzc2luZzwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPiAKLSAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+IAotICAgICA8YmVhbi1wb29sPiAKLSAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+IAotICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+IAotICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+IAorICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4KKyAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+CisgICAgIDxiZWFuLXBvb2w+CisgICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPgorICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+CisgICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4KICAgICAgICAgPHBvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KLSAgICAgIDwvYmVhbi1wb29sPiAKLSAgICAgIDxiZWFuLWNhY2hlPiAKKyAgICAgIDwvYmVhbi1wb29sPgorICAgICAgPGJlYW4tY2FjaGU+CiAgICAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+CiAgICAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KICAgICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkxSVTwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+Ci0gICAgICA8L2JlYW4tY2FjaGU+IAorICAgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogICA8L2VudGVycHJpc2UtYmVhbnM+CiA8L3N1bi1lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvZWpiL0N1c3RvbWVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9lamIvQ3VzdG9tZXIuamF2YQppbmRleCA1OTIyZjMxLi4zNjE1ZTE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9lamIvQ3VzdG9tZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9lamIvQ3VzdG9tZXIuamF2YQpAQCAtNDYsNCArNDYsNCBAQAogCiB9CiAKLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhCmluZGV4IGZmMTVlN2UuLjg5ZGMzMjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YQpAQCAtMjIsNCArMjIsNCBAQAogewogfQogCi0gIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQppbmRleCBlZTBkMTdjLi40YjU0NDQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEKQEAgLTk0LDUgKzk0LDUgQEAKICAgfQogCiB9Ci0gICAgCi0gICAgCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvZWpiL0N1c3RvbWVyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9lamIvQ3VzdG9tZXJFSkIuamF2YQppbmRleCAwNTIwYjYwLi4wNzIyMGRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9lamIvQ3VzdG9tZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9lamIvQ3VzdG9tZXJFSkIuamF2YQpAQCAtNTMsNyArNTMsNyBAQAogCiAgIHB1YmxpYyBTdHJpbmcgZ2V0QWRkcmVzczEoKQogICB7Ci0gICAgcmV0dXJuIGFkZHJlc3MxOyAKKyAgICByZXR1cm4gYWRkcmVzczE7CiAgIH0KIAogICBwdWJsaWMgU3RyaW5nIGdldEFkZHJlc3MyKCkKQEAgLTEzOSw3ICsxMzksNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNRTCBleGNlcHRpb24gb2NjdXJlZCBpbiBlamJSZW1vdmUgbWV0aG9kIik7CiAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICB9Ci0gICAgCisKICAgfQogCiAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkKQEAgLTIwNiwxMiArMjA2LDEyIEBACiAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1FMRXhjZXB0aW9uIG9jY3VycmVkIGluIGVqYkxvYWQoKSBtZXRob2QiKTsKICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfSAgIAorICAgIH0KICAgfQogCiAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIH0KLSAgICAgIAotICAgIAotICAgIAorCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhCmluZGV4IDI3NDA2OTIuLmM0NWExYzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEKQEAgLTIyLDQgKzIyLDQgQEAKIHsKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhCmluZGV4IGYzMGI1MDYuLmIwY2U3YjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEKQEAgLTk1LDYgKzk1LDYgQEAKICAgfQogCiB9Ci0gICAgICAKLSAgICAKLSAgICAKKworCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGVlMmVjYTAuLmZkMjFjM2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvYnVpbGQucHJvcGVydGllcwpAQCAtMTQsNyArMTQsNyBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKICMKIAotICAgIAorCiAjIyMgQ29tcG9uZW50IFByb3BlcnRpZXMgIyMjCiBzcmMuZGlyPXNyYwogY29tcG9uZW50LnB1Ymxpc2guaG9tZT0uCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9idWlsZC54bWwKaW5kZXggM2JiNmMzZi4uZmM1NDU4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL2J1aWxkLnhtbApAQCAtMjMsNjIgKzIzLDYyIEBACiAKIDxwcm9qZWN0IG5hbWU9IkpEQkNDb25uZWN0b3IgdG9wIGxldmVsIiBkZWZhdWx0PSJidWlsZCI+CiAgICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2pkYmNyYS9zcGkiLz4KLSAgICAKKwogICAgICZjb21tb247CiAgICAgJnRlc3Rjb21tb247CiAgICAgPHByb3BlcnR5IGZpbGU9Ii4vYnVpbGQucHJvcGVydGllcyIvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSxhc3NlbWJsZSIgLz4KLSAgICAgICAgICAKKwogCiAgICAgPCEtLSBpbml0LiBJbml0aWFsaXphdGlvbiBpbnZvbHZlcyBjcmVhdGluZyBwdWJsaXNoaW5nIGRpcmVjdG9yaWVzIGFuZAotICAgICAgICAgT1Mgc3BlY2lmaWMgdGFyZ2V0cy4gLS0+IAorICAgICAgICAgT1Mgc3BlY2lmaWMgdGFyZ2V0cy4gLS0+CiAgICAgPHRhcmdldCBuYW1lPSJpbml0IiBkZXNjcmlwdGlvbj0iJHtjb21wb25lbnQubmFtZX0gaW5pdGlhbGl6YXRpb24iPgogICAgICAgICA8dHN0YW1wPgogICAgICAgICAgICAgPGZvcm1hdCBwcm9wZXJ0eT0ic3RhcnQudGltZSIgcGF0dGVybj0iTU0vZGQveXl5eSBoaDptbSBhYSIvPgotICAgICAgICA8L3RzdGFtcD4gICAgCisgICAgICAgIDwvdHN0YW1wPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJCdWlsZGluZyBjb21wb25lbnQgJHtjb21wb25lbnQubmFtZX0iLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIvPiAgICAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgPCEtLSBjb21waWxlIC0tPiAKKyAgICA8IS0tIGNvbXBpbGUgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0IgotICAgICAgICAgICAgZGVzY3JpcHRpb249IkNvbXBpbGUgY29tL3N1bi8qIGNvbS9pcGxhbmV0Lyogc291cmNlcyI+ICAKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDb21waWxlIGNvbS9zdW4vKiBjb20vaXBsYW5ldC8qIHNvdXJjZXMiPgogICAgICAgICA8IS0tPGVjaG8gbWVzc2FnZT0iQ29ubmVjdG9yIGFwaSByZXNpZGVzIGluICR7Y29ubmVjdG9yLWFwaS5qYXJ9Ii8+LS0+Ci0gICAgICAgIDxqYXZhYyBzcmNkaXI9IiR7c3JjLmRpcn0iIAorICAgICAgICA8amF2YWMgc3JjZGlyPSIke3NyYy5kaXJ9IgogICAgICAgICAgICAgICAgZGVzdGRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IgotCSAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+Ci0JICAgICAgIDxjbGFzc3BhdGg+Ci0JICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMiPgotCSAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouamFyIiAvPgotCSAJIDwvZmlsZXNldD4KKyAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPgorICAgICAgICAgICA8Y2xhc3NwYXRoPgorICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzIj4KKyAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIgLz4KKyAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImNvbS9zdW4vamRiY3JhLyoqIi8+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJjb20vc3VuL2FwcHNlcnYvKioiLz4KICAgICAgICAgPC9qYXZhYz4KICAgICA8L3RhcmdldD4KLSAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQiLz4KIAotICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSI+ICAgIAotICAgIAkKLQk8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjLmphciIgCi0gICAgICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosIAotICAgICAgICAgICAgY29tL3N1bi9hcHBzZXJ2LyoqLyosIGNvbS9zdW4vamRiY3JhL3V0aWwvKiovKiwgY29tL3N1bi9qZGJjcmEvY29tbW9uLyoqLyoiLz4gCi0gICAJCi0gICAgICAgIDxjb3B5IGZpbGU9IiR7c3JjLmRpcn0vY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwiIAotICAgICAgICAgICAgICAgIHRvZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiPgorCisgICAgPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiYy5qYXIiCisgICAgICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosCisgICAgICAgICAgICBjb20vc3VuL2FwcHNlcnYvKiovKiwgY29tL3N1bi9qZGJjcmEvdXRpbC8qKi8qLCBjb20vc3VuL2pkYmNyYS9jb21tb24vKiovKiIvPgorCisgICAgICAgIDxjb3B5IGZpbGU9IiR7c3JjLmRpcn0vY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwiCisgICAgICAgICAgICAgICAgdG9maWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjcmEucmFyIiAKLQkJYmFzZWRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9IiBpbmNsdWRlcz0iamRiYy5qYXIiPgorICAgICAgIDxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmNyYS5yYXIiCisgICAgICAgIGJhc2VkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIgaW5jbHVkZXM9ImpkYmMuamFyIj4KIAotICAgCQk8bWV0YWluZiBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgogCi0gICAJPGRlbGV0ZSBmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIi8+Ci0JCisgICAgICAgPGRlbGV0ZSBmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIi8+CisKICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXNjcmlwdGlvbj0iQ2xlYW4gdGhlIGJ1aWxkIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQppbmRleCA5ZjgzOTlhLi5iNmVmMzBiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCkBAIC0yMCwxNSArMjAsMTUgQEAKIGltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CiAKIC8qKgotICogVGhlIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24gCisgKiBUaGUgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+IGltcGxlbWVudGF0aW9uIG9mIFN1bk9ORSBhcHBsaWNhdGlvbgogICogc2VydmVyIHdpbGwgaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLiBBbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHdvdWxkIGJlIGFibGUKLSAqIHRvIHVzZSB0aGlzIGludGVyZmFjZSB0byBkbyB0aGUgZXh0ZW5kZWQgZnVuY3Rpb25hbGl0eSBleHBvc2VkIGJ5IFN1bk9ORSAKKyAqIHRvIHVzZSB0aGlzIGludGVyZmFjZSB0byBkbyB0aGUgZXh0ZW5kZWQgZnVuY3Rpb25hbGl0eSBleHBvc2VkIGJ5IFN1bk9ORQogICogYXBwbGljYXRpb24gc2VydmVyLgotICogPHA+QSBzYW1wbGUgY29kZSBmb3IgZ2V0dGluZyBkcml2ZXIncyBjb25uZWN0aW9uIGltcGxlbWVudGF0aW9uIHdvdWxkIGxpa2UgCisgKiA8cD5BIHNhbXBsZSBjb2RlIGZvciBnZXR0aW5nIGRyaXZlcidzIGNvbm5lY3Rpb24gaW1wbGVtZW50YXRpb24gd291bGQgbGlrZQogICogdGhlIGZvbGxvd2luZy4KICAqIDxwcmU+CiAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgIGNvbS5zdW4uYXBwc2Vydi5EYXRhU291cmNlIGRzID0gKGNvbS5zdW4uYXBwc2Vydi5EYXRhU091cmNlKSBpYy5sb29rdXAoImpkYmMvUG9pbnRCYXNlIik7IAorICAgICBjb20uc3VuLmFwcHNlcnYuRGF0YVNvdXJjZSBkcyA9IChjb20uc3VuLmFwcHNlcnYuRGF0YVNPdXJjZSkgaWMubG9va3VwKCJqZGJjL1BvaW50QmFzZSIpOwogICAgICBDb25uZWN0aW9uIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgQ29ubmVjdGlvbiBkcml2ZXJjb24gPSBkcy5nZXRDb25uZWN0aW9uKGNvbik7CiAKQEAgLTM2LDEzICszNiwxMyBAQAogCiAgICAgIGNvbi5jbG9zZSgpOwogICAgPC9wcmU+Ci0gKiAKKyAqCiAgKiBAYXV0aG9yIEJpbm9kIFAuRwogICovCiBwdWJsaWMgaW50ZXJmYWNlIERhdGFTb3VyY2UgZXh0ZW5kcyBqYXZheC5zcWwuRGF0YVNvdXJjZSB7CiAKICAgICAvKioKLSAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBTUUxDb25uZWN0aW9uIGZyb20gdGhlIENvbm5lY3Rpb24gd3JhcHBlciAKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBTUUxDb25uZWN0aW9uIGZyb20gdGhlIENvbm5lY3Rpb24gd3JhcHBlcgogICAgICAqIGltcGxlbWVudGF0aW9uIG9mIFN1bk9ORSBhcHBsaWNhdGlvbiBzZXJ2ZXIuIElmIGFuIGFjdHVhbCBjb25uZWN0aW9uIGlzCiAgICAgICogc3VwcGxpZWQgYXMgYXJndW1lbnQsIHRoZW4gaXQgd2lsbCBiZSBqdXN0IHJldHVybmVkLgogICAgICAqCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKaW5kZXggYzI4MjJlMi4uNmEzNjZiMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQpAQCAtMjcsMjIgKzI3LDIyIEBACiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwogLyoqCi0gKiBVdGlsaXR5IGNsYXNzLCB3aGljaCB3b3VsZCBjcmVhdGUgbmVjZXNzYXJ5IERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUgCisgKiBVdGlsaXR5IGNsYXNzLCB3aGljaCB3b3VsZCBjcmVhdGUgbmVjZXNzYXJ5IERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUKICAqIHNwZWNpZmljYXRpb24uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKLSAqIEBzZWUJCWNvbS5zdW4uamRiY3JhLmNvbW1vbi5EYXRhU291cmNlU3BlYwotICogQHNlZQkJY29tLnN1bi5qZGJjcmEudXRpbC5NZXRob2RFeGNlY3V0b3IKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCisgKiBAc2VlICAgICAgICBjb20uc3VuLmpkYmNyYS5jb21tb24uRGF0YVNvdXJjZVNwZWMKKyAqIEBzZWUgICAgICAgIGNvbS5zdW4uamRiY3JhLnV0aWwuTWV0aG9kRXhjZWN1dG9yCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlT2JqZWN0QnVpbGRlciBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCiAgICAgcHJpdmF0ZSBEYXRhU291cmNlU3BlYyBzcGVjOwotICAgIAorCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgZHJpdmVyUHJvcGVydGllcyA9IG51bGw7Ci0gICAgCi0gICAgcHJpdmF0ZSBNZXRob2RFeGVjdXRvciBleGVjdXRvciA9IG51bGw7ICAgIAotICAgIAorCisgICAgcHJpdmF0ZSBNZXRob2RFeGVjdXRvciBleGVjdXRvciA9IG51bGw7CisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTAsMTY3ICs1MCwxNjcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3QgYSBEYXRhU291cmNlIE9iamVjdCBmcm9tIHRoZSBzcGVjLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzcGVjCTxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcGVjICAgIDxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIoRGF0YVNvdXJjZVNwZWMgc3BlYykgewotICAgIAl0aGlzLnNwZWMgPSBzcGVjOwotICAgIAlleGVjdXRvciA9IG5ldyBNZXRob2RFeGVjdXRvcigpOworICAgICAgICB0aGlzLnNwZWMgPSBzcGVjOworICAgICAgICBleGVjdXRvciA9IG5ldyBNZXRob2RFeGVjdXRvcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdCB0aGUgRGF0YVNvdXJjZSBPYmplY3QgZnJvbSB0aGUgc3BlYy4KICAgICAgKgotICAgICAqIEByZXR1cm4JT2JqZWN0IGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBEYXRhU291cmNlU3BlYy4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBpZiB0aGUgY2xhc3MgaXMgbm90IGZvdW5kIG9yIHNvbWUgaXNzdWUgaW4gZXhlY3V0aW5nCi0gICAgICoJCXNvbWUgbWV0aG9kLgorICAgICAqIEByZXR1cm4gICAgT2JqZWN0IGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBEYXRhU291cmNlU3BlYy4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBpZiB0aGUgY2xhc3MgaXMgbm90IGZvdW5kIG9yIHNvbWUgaXNzdWUgaW4gZXhlY3V0aW5nCisgICAgICogICAgICAgIHNvbWUgbWV0aG9kLgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgY29uc3RydWN0RGF0YVNvdXJjZU9iamVjdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJZHJpdmVyUHJvcGVydGllcyA9IHBhcnNlRHJpdmVyUHJvcGVydGllcyhzcGVjKTsKKyAgICAgICAgZHJpdmVyUHJvcGVydGllcyA9IHBhcnNlRHJpdmVyUHJvcGVydGllcyhzcGVjKTsKICAgICAgICAgT2JqZWN0IGRhdGFTb3VyY2VPYmplY3QgPSBnZXREYXRhU291cmNlT2JqZWN0KCk7CiAgICAgICAgIE1ldGhvZFtdIG1ldGhvZHMgPSBkYXRhU291cmNlT2JqZWN0LmdldENsYXNzKCkuZ2V0TWV0aG9kcygpOwogICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG1ldGhvZHNbaV0uZ2V0TmFtZSgpOwotCSAgICBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRVc2VyIikpewkgICAgCQotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBhc3N3b3JkIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ2luVGltZU91dCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9nV3JpdGVyIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HV1JJVEVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhYmFzZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFTb3VyY2VOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERlc2NyaXB0aW9uIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXROZXR3b3JrUHJvdG9jb2wiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBvcnROdW1iZXIiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRSb2xlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRTZXJ2ZXJOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhTdGF0ZW1lbnRzIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYU1RBVEVNRU5UUyksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0SW5pdGlhbFBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuSU5JVElBTFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNaW5Qb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1JTlBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhQb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhJZGxlVGltZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWElETEVUSU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQcm9wZXJ0eUN5Y2xlIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUFJPUEVSVFlDWUNMRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKGRyaXZlclByb3BlcnRpZXMuY29udGFpbnNLZXkobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKSl7Ci0JICAgIAlWZWN0b3IgdmFsdWVzID0gKFZlY3RvcikgZHJpdmVyUHJvcGVydGllcy5nZXQobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKTsKLQkgICAgICAgIGV4ZWN1dG9yLnJ1bk1ldGhvZChtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QsIHZhbHVlcyk7Ci0JICAgIH0KKyAgICAgICAgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0VXNlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQYXNzd29yZCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dpblRpbWVPdXQiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ1dyaXRlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR1dSSVRFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YWJhc2VOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhU291cmNlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREZXNjcmlwdGlvbiIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXROZXR3b3JrUHJvdG9jb2wiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBvcnROdW1iZXIiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRSb2xlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRTZXJ2ZXJOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4U3RhdGVtZW50cyIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFNUQVRFTUVOVFMpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldEluaXRpYWxQb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLklOSVRJQUxQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWluUG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NSU5QT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4UG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4SWRsZVRpbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhJRExFVElNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UHJvcGVydHlDeWNsZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBST1BFUlRZQ1lDTEUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChkcml2ZXJQcm9wZXJ0aWVzLmNvbnRhaW5zS2V5KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSkpeworICAgICAgICAgICAgVmVjdG9yIHZhbHVlcyA9IChWZWN0b3IpIGRyaXZlclByb3BlcnRpZXMuZ2V0KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSk7CisgICAgICAgICAgICBleGVjdXRvci5ydW5NZXRob2QobWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0LCB2YWx1ZXMpOworICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2VPYmplY3Q7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSBleHRyYSBkcml2ZXIgcHJvcGVydGllcyBmcm9tIHRoZSBEYXRhU291cmNlU3BlYyBvYmplY3QgYW5kCiAgICAgICogcGFyc2UgdGhlbSB0byBhIHNldCBvZiBtZXRob2ROYW1lIGFuZCBwYXJhbWV0ZXJzLiBQcmVwYXJlIGEgaGFzaHRhYmxlCiAgICAgICogY29udGFpbmluZyB0aGVzZSBkZXRhaWxzIGFuZCByZXR1cm4uCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3BlYwk8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHJldHVybglIYXNodGFibGUgY29udGFpbmluZyBtZXRob2QgbmFtZXMgYW5kIHBhcmFtZXRlcnMsCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglJZiBkZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGFuZCBwcm9wZXJ0eSBzdHJpbmcKLSAgICAgKgkJCQkJaXMgbm90IG51bGwuCisgICAgICogQHBhcmFtICAgIHNwZWMgICAgPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgSGFzaHRhYmxlIGNvbnRhaW5pbmcgbWV0aG9kIG5hbWVzIGFuZCBwYXJhbWV0ZXJzLAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgSWYgZGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBhbmQgcHJvcGVydHkgc3RyaW5nCisgICAgICogICAgICAgICAgICAgICAgICAgIGlzIG5vdCBudWxsLgogICAgICAqLwogICAgIHByaXZhdGUgSGFzaHRhYmxlIHBhcnNlRHJpdmVyUHJvcGVydGllcyhEYXRhU291cmNlU3BlYyBzcGVjKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCVN0cmluZyBkZWxpbSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CisgICAgICAgIFN0cmluZyBkZWxpbSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAKICAgICAgICAgU3RyaW5nIHByb3AgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTKTsKLQlpZiAoIHByb3AgPT0gbnVsbCB8fCBwcm9wLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgIHJldHVybiBuZXcgSGFzaHRhYmxlKCk7Ci0JfSBlbHNlIGlmIChkZWxpbSA9PSBudWxsIHx8IGRlbGltLmVxdWFscygiIikpIHsKLQkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uICgiRGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiIpOwotCX0KLQkKLQlIYXNodGFibGUgcHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoKTsKLQlkZWxpbSA9IGRlbGltLnRyaW0oKTsJCi0JU3RyaW5nIHNlcCA9IGRlbGltK2RlbGltOwotCWludCBzZXBMZW4gPSBzZXAubGVuZ3RoKCk7Ci0JU3RyaW5nIGNhY2hlID0gcHJvcDsKLQlWZWN0b3IgbWV0aG9kcyA9IG5ldyBWZWN0b3IoKTsKLQkKLQl3aGlsZSAoY2FjaGUuaW5kZXhPZihzZXApICE9IC0xKSB7Ci0JICAgIGludCBpbmRleCA9IGNhY2hlLmluZGV4T2Yoc2VwKTsKLQkgICAgU3RyaW5nIG5hbWUgPSBjYWNoZS5zdWJzdHJpbmcoMCxpbmRleCk7Ci0JICAgIGlmIChuYW1lLnRyaW0oKSAhPSAiIikgewotCSAgICAgICAgbWV0aG9kcy5hZGQobmFtZSk7Ci0JICAgIAljYWNoZSA9IGNhY2hlLnN1YnN0cmluZyhpbmRleCtzZXBMZW4pOwotCSAgICB9Ci0JfQotCQotICAgIAlFbnVtZXJhdGlvbiBhbGxNZXRob2RzID0gbWV0aG9kcy5lbGVtZW50cygpOwotICAgIAl3aGlsZSAoYWxsTWV0aG9kcy5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgIAkgICAgU3RyaW5nIG9uZU1ldGhvZCA9IChTdHJpbmcpIGFsbE1ldGhvZHMubmV4dEVsZW1lbnQoKTsgICAgCSAgICAKLSAgICAJICAgIGlmICghb25lTWV0aG9kLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0gICAgCSAgICAJU3RyaW5nIG1ldGhvZE5hbWUgPSBudWxsOwotICAgIAkgICAgCVZlY3RvciBwYXJtcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAJICAgIAlTdHJpbmdUb2tlbml6ZXIgbWV0aG9kRGV0YWlscyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIob25lTWV0aG9kLGRlbGltKTsKLQkJZm9yIChpbnQgaT0wOyBtZXRob2REZXRhaWxzLmhhc01vcmVUb2tlbnMoKTtpKysgKSB7Ci0JCSAgICBTdHJpbmcgdG9rZW4gPSAoU3RyaW5nKSBtZXRob2REZXRhaWxzLm5leHRUb2tlbigpOwotCQkgICAgaWYgKGk9PTApIHsKLQkJICAgIAltZXRob2ROYW1lID0gdG9rZW4udG9VcHBlckNhc2UoKTsKLQkJICAgIH0gZWxzZSB7Ci0JCSAgICAJcGFybXMuYWRkKHRva2VuKTsJCSAgICAJCi0JCSAgICB9Ci0JCX0KLQkJcHJvcGVydGllcy5wdXQobWV0aG9kTmFtZSxwYXJtcyk7Ci0gICAgCSAgICB9ICAgIAkgICAgCi0gICAgCX0KLSAgICAJcmV0dXJuIHByb3BlcnRpZXM7CisgICAgaWYgKCBwcm9wID09IG51bGwgfHwgcHJvcC50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICByZXR1cm4gbmV3IEhhc2h0YWJsZSgpOworICAgIH0gZWxzZSBpZiAoZGVsaW0gPT0gbnVsbCB8fCBkZWxpbS5lcXVhbHMoIiIpKSB7CisgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbiAoIkRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24iKTsKICAgICB9Ci0gICAgCisKKyAgICBIYXNodGFibGUgcHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoKTsKKyAgICBkZWxpbSA9IGRlbGltLnRyaW0oKTsKKyAgICBTdHJpbmcgc2VwID0gZGVsaW0rZGVsaW07CisgICAgaW50IHNlcExlbiA9IHNlcC5sZW5ndGgoKTsKKyAgICBTdHJpbmcgY2FjaGUgPSBwcm9wOworICAgIFZlY3RvciBtZXRob2RzID0gbmV3IFZlY3RvcigpOworCisgICAgd2hpbGUgKGNhY2hlLmluZGV4T2Yoc2VwKSAhPSAtMSkgeworICAgICAgICBpbnQgaW5kZXggPSBjYWNoZS5pbmRleE9mKHNlcCk7CisgICAgICAgIFN0cmluZyBuYW1lID0gY2FjaGUuc3Vic3RyaW5nKDAsaW5kZXgpOworICAgICAgICBpZiAobmFtZS50cmltKCkgIT0gIiIpIHsKKyAgICAgICAgICAgIG1ldGhvZHMuYWRkKG5hbWUpOworICAgICAgICAgICAgY2FjaGUgPSBjYWNoZS5zdWJzdHJpbmcoaW5kZXgrc2VwTGVuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICAgICBFbnVtZXJhdGlvbiBhbGxNZXRob2RzID0gbWV0aG9kcy5lbGVtZW50cygpOworICAgICAgICB3aGlsZSAoYWxsTWV0aG9kcy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgU3RyaW5nIG9uZU1ldGhvZCA9IChTdHJpbmcpIGFsbE1ldGhvZHMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICghb25lTWV0aG9kLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBudWxsOworICAgICAgICAgICAgICAgIFZlY3RvciBwYXJtcyA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXIgbWV0aG9kRGV0YWlscyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIob25lTWV0aG9kLGRlbGltKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBtZXRob2REZXRhaWxzLmhhc01vcmVUb2tlbnMoKTtpKysgKSB7CisgICAgICAgICAgICBTdHJpbmcgdG9rZW4gPSAoU3RyaW5nKSBtZXRob2REZXRhaWxzLm5leHRUb2tlbigpOworICAgICAgICAgICAgaWYgKGk9PTApIHsKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gdG9rZW4udG9VcHBlckNhc2UoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFybXMuYWRkKHRva2VuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwcm9wZXJ0aWVzLnB1dChtZXRob2ROYW1lLHBhcm1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHJvcGVydGllczsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZSBzcGVjLgogICAgICAqCi0gICAgICogQHJldHVybglJbml0aWFsIERhdGFTb3VyY2UgT2JqZWN0IGluc3RhbmNlLgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IElmIGNsYXNzIG5hbWUgaXMgd3Jvbmcgb3IgY2xhc3NwYXRoIGlzIG5vdCBzZXQKLSAgICAgKgkJcHJvcGVybHkuCisgICAgICogQHJldHVybiAgICBJbml0aWFsIERhdGFTb3VyY2UgT2JqZWN0IGluc3RhbmNlLgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IElmIGNsYXNzIG5hbWUgaXMgd3Jvbmcgb3IgY2xhc3NwYXRoIGlzIG5vdCBzZXQKKyAgICAgKiAgICAgICAgcHJvcGVybHkuCiAgICAgICovCiAgICAgcHJpdmF0ZSBPYmplY3QgZ2V0RGF0YVNvdXJjZU9iamVjdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJU3RyaW5nIGNsYXNzTmFtZSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7Ci0gICAgICAgIHRyeSB7ICAgICAgICAgICAgCisgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOworICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgZGF0YVNvdXJjZUNsYXNzID0gQ2xhc3MuZm9yTmFtZShjbGFzc05hbWUpOwogICAgICAgICAgICAgT2JqZWN0IGRhdGFTb3VyY2VPYmplY3QgPSBkYXRhU291cmNlQ2xhc3MubmV3SW5zdGFuY2UoKTsKICAgICAgICAgICAgIHJldHVybiBkYXRhU291cmNlT2JqZWN0OwogICAgICAgICB9IGNhdGNoKENsYXNzTm90Rm91bmRFeGNlcHRpb24gY2ZuZSl7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NuZmVfZHMiLCBjZm5lKTsKLQkKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY25mZV9kcyIsIGNmbmUpOworCiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNsYXNzIE5hbWUgaXMgd3Jvbmcgb3IgQ2xhc3MgcGF0aCBpcyBub3Qgc2V0IGZvciA6IiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBjZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pbnN0IiwgY2xhc3NOYW1lKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaW5zdCIsIGNsYXNzTmFtZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkVycm9yIGluIGluc3RhbnRpYXRpbmciICsgY2xhc3NOYW1lKTsKICAgICAgICAgfSBjYXRjaChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGNlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2FjY19pbnN0IiwgY2xhc3NOYW1lKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYWNjX2luc3QiLCBjbGFzc05hbWUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgRXJyb3IgaW4gaW5zdGFudGlhdGluZyIgKyBjbGFzc05hbWUpOwogICAgICAgICB9CiAgICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCmluZGV4IGVmNmM0YzkuLjNkYzE1NGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKQEAgLTE5LDkyICsxOSw5MiBAQAogaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7CiAKIC8qKgotICogRW5jYXBzdWxhdGUgdGhlIERhdGFTb3VyY2Ugb2JqZWN0IGRldGFpbHMgb2J0YWluZWQgZnJvbSAKKyAqIEVuY2Fwc3VsYXRlIHRoZSBEYXRhU291cmNlIG9iamVjdCBkZXRhaWxzIG9idGFpbmVkIGZyb20KICAqIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2VTcGVjIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VSTkFNRQkJCQk9IDE7ICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBU1NXT1JECQkJCT0gMjsgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVSTAkJCQkJPSAzOyAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HSU5USU1FT1VUCQkJPSA0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR1dSSVRFUgkJCQk9IDU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQUJBU0VOQU1FCQkJPSA2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0VOQU1FCQkJPSA3OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFU0NSSVBUSU9OCQkJCT0gODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLUFJPVE9DT0wJCQk9IDk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9SVE5VTUJFUgkJCQk9IDEwOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPTEVOQU1FCQkJCT0gMTE7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVkVSTkFNRQkJCQk9IDEyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFNUQVRFTUVOVFMJCQk9IDEzOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOSVRJQUxQT09MU0laRQkJCT0gMTQ7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOUE9PTFNJWkUJCQkJPSAxNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhQT09MU0laRQkJCQk9IDE2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWElETEVUSU1FCQkJCT0gMTc7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlDWUNMRQkJCT0gMTg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRFJJVkVSUFJPUEVSVElFUwkJCT0gMTk7ICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMQVNTTkFNRQkJCQk9IDIwOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFTElNSVRFUgkJCQk9IDIxOwotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFhBREFUQVNPVVJDRQkJCT0gMjI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRQkJCQk9IDIzOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05QT09MREFUQVNPVVJDRQkJPSAyNDsKLSAgICAgIAotICAgIC8vR0pDSU5UICAgICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRAk9IDI1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05NRVRIT0QJCQk9IDI2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05UQUJMRU5BTUUJCQk9IDI3OwotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRSQU5TQUNUSU9OSVNPTEFUSU9OCQk9IDI4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdVQVJBTlRFRUlTT0xBVElPTkxFVkVMCQk9IDI5OwotICAgICAgICAgICAgCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUk5BTUUgICAgICAgICAgICAgICAgPSAxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBU1NXT1JEICAgICAgICAgICAgICAgID0gMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVUkwgICAgICAgICAgICAgICAgICAgID0gMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dJTlRJTUVPVVQgICAgICAgICAgICA9IDQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HV1JJVEVSICAgICAgICAgICAgICAgID0gNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBQkFTRU5BTUUgICAgICAgICAgICA9IDY7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRU5BTUUgICAgICAgICAgICA9IDc7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgPSA4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktQUk9UT0NPTCAgICAgICAgICAgID0gOTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1JUTlVNQkVSICAgICAgICAgICAgICAgID0gMTA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9MRU5BTUUgICAgICAgICAgICAgICAgPSAxMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVJWRVJOQU1FICAgICAgICAgICAgICAgID0gMTI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYU1RBVEVNRU5UUyAgICAgICAgICAgID0gMTM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5JVElBTFBPT0xTSVpFICAgICAgICAgICAgPSAxNDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSU5QT09MU0laRSAgICAgICAgICAgICAgICA9IDE1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFBPT0xTSVpFICAgICAgICAgICAgICAgID0gMTY7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYSURMRVRJTUUgICAgICAgICAgICAgICAgPSAxNzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWUNZQ0xFICAgICAgICAgICAgPSAxODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEUklWRVJQUk9QRVJUSUVTICAgICAgICAgICAgPSAxOTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTEFTU05BTUUgICAgICAgICAgICAgICAgPSAyMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUxJTUlURVIgICAgICAgICAgICAgICAgPSAyMTsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFhBREFUQVNPVVJDRSAgICAgICAgICAgID0gMjI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRSAgICAgICAgICAgICAgICA9IDIzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05QT09MREFUQVNPVVJDRSAgICAgICAgPSAyNDsKKworICAgIC8vR0pDSU5UCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCAgICA9IDI1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05NRVRIT0QgICAgICAgICAgICA9IDI2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05UQUJMRU5BTUUgICAgICAgICAgICA9IDI3OworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNBQ1RJT05JU09MQVRJT04gICAgICAgID0gMjg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwgICAgICAgID0gMjk7CisKICAgICBwcml2YXRlIEhhc2h0YWJsZSBkZXRhaWxzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBwcm9wZXJ0eS4KICAgICAgKgotICAgICAqIEBwYXJhbQlwcm9wZXJ0eQlQcm9wZXJ0eSBOYW1lIHRvIGJlIHNldC4KLSAgICAgKiBAcGFyYW0JdmFsdWUJCVZhbHVlIG9mIHByb3BlcnR5IHRvIGJlIHNldC4KKyAgICAgKiBAcGFyYW0gICAgcHJvcGVydHkgICAgUHJvcGVydHkgTmFtZSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIHZhbHVlICAgICAgICBWYWx1ZSBvZiBwcm9wZXJ0eSB0byBiZSBzZXQuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGV0YWlsKGludCBwcm9wZXJ0eSwgU3RyaW5nIHZhbHVlKSB7Ci0gICAgCWRldGFpbHMucHV0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSx2YWx1ZSk7CisgICAgICAgIGRldGFpbHMucHV0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSx2YWx1ZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSB2YWx1ZSBvZiBwcm9wZXJ0eQogICAgICAqCi0gICAgICogQHJldHVybglWYWx1ZSBvZiB0aGUgcHJvcGVydHkuCisgICAgICogQHJldHVybiAgICBWYWx1ZSBvZiB0aGUgcHJvcGVydHkuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZXRhaWwoaW50IHByb3BlcnR5KSB7Ci0gICAgCWlmIChkZXRhaWxzLmNvbnRhaW5zS2V5KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSkpIHsKLSAgICAJICAgIHJldHVybiAoU3RyaW5nKSBkZXRhaWxzLmdldChuZXcgSW50ZWdlcihwcm9wZXJ0eSkpOwotICAgIAl9IGVsc2UgewotICAgIAkgICAgcmV0dXJuIG51bGw7Ci0gICAgCX0gICAgCQorICAgICAgICBpZiAoZGV0YWlscy5jb250YWluc0tleShuZXcgSW50ZWdlcihwcm9wZXJ0eSkpKSB7CisgICAgICAgICAgICByZXR1cm4gKFN0cmluZykgZGV0YWlscy5nZXQobmV3IEludGVnZXIocHJvcGVydHkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIHdoZXRoZXIgdHdvIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3RzCiAgICAgICogYXJlIGVxdWFsIG9yIG5vdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlvYmoJSW5zdGFuY2Ugb2YgPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIEluc3RhbmNlIG9mIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKLSAgICAJaWYgKG9iaiBpbnN0YW5jZW9mIERhdGFTb3VyY2VTcGVjKSB7Ci0gICAgCSAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmVxdWFscygoKERhdGFTb3VyY2VTcGVjKW9iaikuZGV0YWlscyk7Ci0gICAgCX0KLSAgICAJcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgRGF0YVNvdXJjZVNwZWMpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmRldGFpbHMuZXF1YWxzKCgoRGF0YVNvdXJjZVNwZWMpb2JqKS5kZXRhaWxzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBoYXNoQ29kZSBvZiB0aGlzIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhhc2hDb2RlIG9mIHRoaXMgb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgaGFzaENvZGUgb2YgdGhpcyBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKLSAgICAJcmV0dXJuIHRoaXMuZGV0YWlscy5oYXNoQ29kZSgpOwotICAgIH0gICAgCisgICAgICAgIHJldHVybiB0aGlzLmRldGFpbHMuaGFzaENvZGUoKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sCmluZGV4IGVmNDM4ZmMuLjNiNGZhZWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIuIiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvY29tbW9uIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTM2LDEzICszNiwxMyBAQAogCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTEzIiBkZXBlbmRzPSJjb21waWxlIi8+CiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTE0IiBkZXBlbmRzPSJjb21waWxlIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0icGFja2FnZTEzIiBkZXBlbmRzPSJwYWNrYWdlIi8+CiAgIDx0YXJnZXQgbmFtZT0icGFja2FnZTE0IiBkZXBlbmRzPSJwYWNrYWdlIi8+CiAKICAgPHRhcmdldCBuYW1lPSJidWlsZDEzIiBkZXBlbmRzPSJjb21waWxlMTMsIHBhY2thZ2UxMyIvPgogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCwgcGFja2FnZTE0Ii8+Ci0gICAgCisKICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKaW5kZXggYTk1NmQ5Ny4uMTFhZDc0NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQpAQCAtMjQsMjQgKzI0LDI0IEBACiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3I7CiAKIC8qKgotICogSG9sZHMgdGhlIGphdmEuc3FsLkNvbm5lY3Rpb24gb2JqZWN0LCB3aGljaCBpcyB0byBiZSAKKyAqIEhvbGRzIHRoZSBqYXZhLnNxbC5Db25uZWN0aW9uIG9iamVjdCwgd2hpY2ggaXMgdG8gYmUKICAqIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbS4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwotcHVibGljIGNsYXNzIENvbm5lY3Rpb25Ib2xkZXIgaW1wbGVtZW50cyBDb25uZWN0aW9ueyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uSG9sZGVyIGltcGxlbWVudHMgQ29ubmVjdGlvbnsKIAogICAgIHByaXZhdGUgQ29ubmVjdGlvbiBjb247Ci0gICAgCisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAotICAgIHByaXZhdGUgYm9vbGVhbiB3cmFwcGVkQWxyZWFkeSA9IGZhbHNlOyAgICAKLSAgICAKKworICAgIHByaXZhdGUgYm9vbGVhbiB3cmFwcGVkQWxyZWFkeSA9IGZhbHNlOworCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzQ2xvc2VkID0gZmFsc2U7Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gdmFsaWQgPSB0cnVlOwotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGFjdGl2ZSA9IGZhbHNlOwogICAgIC8qKgogICAgICAqIFRoZSBhY3RpdmUgZmxhZyBpcyBmYWxzZSB3aGVuIHRoZSBjb25uZWN0aW9uIGhhbmRsZSBpcwpAQCAtNTMsMjE5ICs1MywyMTkgQEAKICAgICAgKiBmdW5jdGlvbiwgdGhlIGFib3ZlIG1ldGhvZCBpbnZvY2F0aW9uIHN1Y2NlZWRzOyBvdGhlcndpc2UKICAgICAgKiBhbiBleGNlcHRpb24gaXMgdGhyb3duLgogICAgICAqLwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0cyBhIENvbm5lY3Rpb24gaG9sZGVyLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb25Ib2xkZXIoQ29ubmVjdGlvbiBjb24sIE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7CiAgICAgICAgIHRoaXMuY29uID0gY29uOwogICAgICAgICB0aGlzLm1jICA9IG1jOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiB0aGlzIGhvbGRlciBvYmplY3QuCi0gICAgICogCi0gICAgICogQHJldHVybglDb25uZWN0aW9uIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgQ29ubmVjdGlvbiBvYmplY3QuCiAgICAgICovCiAgICAgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uKCkgewotICAgIAlyZXR1cm4gY29uOworICAgICAgICByZXR1cm4gY29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCwgdGhlIGNvbm5lY3Rpb24gaXMgd3JhcHBlZCBhbHJlYWR5IG9yIG5vdC4KICAgICAgKgotICAgICAqIEBwYXJhbQl3cmFwRmxhZwkKKyAgICAgKiBAcGFyYW0gICAgd3JhcEZsYWcKICAgICAgKi8KICAgICB2b2lkIHdyYXBwZWQoYm9vbGVhbiB3cmFwRmxhZyl7CiAgICAgICAgIHRoaXMud3JhcHBlZEFscmVhZHkgPSB3cmFwRmxhZzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHdoZXRoZXIgaXQgaXMgd3JhcHBlZCBhbHJlYWR5IG9yIG5vdC4KICAgICAgKgotICAgICAqIEByZXR1cm4Jd3JhcHBlZCBmbGFnLgorICAgICAqIEByZXR1cm4gICAgd3JhcHBlZCBmbGFnLgogICAgICAqLwogICAgIGJvb2xlYW4gaXNXcmFwcGVkKCl7CiAgICAgICAgIHJldHVybiB3cmFwcGVkQWxyZWFkeTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UgcmVzcG9uc2libGUKICAgICAgKiBmb3IgdGhpcyBjb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICovCiAgICAgTWFuYWdlZENvbm5lY3Rpb24gZ2V0TWFuYWdlZENvbm5lY3Rpb24oKSB7CiAgICAgICAgIHJldHVybiBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXBsYWNlIHRoZSBhY3R1YWwgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IHdpdGggdGhlIG9uZQotICAgICAqIHN1cHBsaWVkLiBBbHNvIHJlcGxhY2UgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGxpbmsuICAgICAKKyAgICAgKiBzdXBwbGllZC4gQWxzbyByZXBsYWNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBsaW5rLgogICAgICAqCi0gICAgICogQHBhcmFtCWNvbiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCW1jICA8Y29kZT4gTWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgY29uIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgbWMgIDxjb2RlPiBNYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHZvaWQgYXNzb2NpYXRlQ29ubmVjdGlvbihDb25uZWN0aW9uIGNvbiwgTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKLSAgICAJdGhpcy5tYyA9IG1jOwotICAgIAl0aGlzLmNvbiA9IGNvbjsKKyAgICAgICAgdGhpcy5tYyA9IG1jOworICAgICAgICB0aGlzLmNvbiA9IGNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDbGVhcnMgYWxsIHdhcm5pbmdzIHJlcG9ydGVkIGZvciB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9uICBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNsZWFyV2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueyAgICAKLQljaGVja1ZhbGlkaXR5KCk7CisgICAgcHVibGljIHZvaWQgY2xlYXJXYXJuaW5ncygpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBjb24uY2xlYXJXYXJuaW5ncygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENsb3NlcyB0aGUgbG9naWNhbCBjb25uZWN0aW9uLiAgICAKKyAgICAgKiBDbG9zZXMgdGhlIGxvZ2ljYWwgY29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgICAgaXNDbG9zZWQgPSB0cnVlOwotICAgICAgICBtYy5jb25uZWN0aW9uQ2xvc2VkKG51bGwsIHRoaXMpOyAgICAgICAgCisgICAgICAgIG1jLmNvbm5lY3Rpb25DbG9zZWQobnVsbCwgdGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogSW52YWxpZGF0ZXMgdGhpcyBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgaW52YWxpZGF0ZSgpIHsKLSAgICAJdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDbG9zZXMgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaW52b2x2ZWQgaW4gdGhpcy4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCi0gICAgdm9pZCBhY3R1YWxDbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257ICAgIAorICAgIHZvaWQgYWN0dWFsQ2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgICBjb24uY2xvc2UoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21taXQgdGhlIGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLmNvbW1pdCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLmNvbW1pdCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzdGF0ZW1lbnQgZnJvbSB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzdGF0ZW1lbnQgZnJvbSB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LiAgICAgCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoaW50IHJlc3VsdFNldFR5cGUsIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgIAotICAgICAqIEByZXR1cm4JPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAgICAgCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0SG9sZGFiaWxpdHkgICAgUmVzdWx0U2V0IEhvbGRhYmlsaXR5LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwotICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KGludCByZXN1bHRTZXRUeXBlLCBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksIAotICAgIAkJCQkgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkgICAgIAorICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KGludCByZXN1bHRTZXRUeXBlLCBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQocmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCi0gICAgICAgIAkJCSAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKICAgICB9Ci0gCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgYXV0by1jb21taXQgbW9kZSBmb3IgdGhlIHVuZGVybHlpbmcgPGNvZGU+IENvbm5lY3Rpb248L2NvZGU+LgogICAgICAqCiAgICAgICogQHJldHVybiBUaGUgY3VycmVudCBzdGF0ZSBvZiBjb25uZWN0aW9uJ3MgYXV0by1jb21taXQgbW9kZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGdldEF1dG9Db21taXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldEF1dG9Db21taXQoKTsKLSAgICB9ICAgCi0gCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldEF1dG9Db21taXQoKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHVuZGVybHlpbmcgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0J3MgY2F0YWxvZyBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglDYXRhbG9nIE5hbWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgQ2F0YWxvZyBOYW1lLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENhdGFsb2coKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5nZXRDYXRhbG9nKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGhvbGRhYmlsaXR5IG9mIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gb2JqZWN0cyBjcmVhdGVkCiAgICAgICogdXNpbmcgdGhpcyBjb25uZWN0aW9uIG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaG9sZGFiaWxpdHkgdmFsdWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgaG9sZGFiaWxpdHkgdmFsdWUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0SG9sZGFiaWxpdHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4JY29uLmdldEhvbGRhYmlsaXR5KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gICAgY29uLmdldEhvbGRhYmlsaXR5KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT5EYXRhYmFzZU1ldGFEYXRhPC9jb2RlPm9iamVjdCBmcm9tIHRoZSB1bmRlcmx5aW5nCiAgICAgICogPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIDxjb2RlPkRhdGFiYXNlTWV0YURhdGE8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhYmFzZU1ldGFEYXRhIGdldE1ldGFEYXRhKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRNZXRhRGF0YSgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRNZXRhRGF0YSgpOwogICAgIH0KLSAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCdzIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgogICAgICAqCiAgICAgICogQHJldHVybiBUcmFuc2FjdGlvbiBsZXZlbAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIGludCBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggCisgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhc3NvY2lhdGVkIHdpdGgKICAgICAgKiA8Y29kZT4gQ29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybglUeXBlTWFwIHNldCBpbiB0aGlzIG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICBUeXBlTWFwIHNldCBpbiB0aGlzIG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIE1hcCBnZXRUeXBlTWFwKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRUeXBlTWFwKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldFR5cGVNYXAoKTsKICAgICB9CiAKIC8qCkBAIC0yNzksMTg0ICsyNzksMTg0IEBACiAgICAgICogPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiBGaXJzdCA8Y29kZT4gU1FMV2FybmluZzwvY29kZT4gT2JqZWN0IG9yIG51bGwuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU1FMV2FybmluZyBnZXRXYXJuaW5ncygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0V2FybmluZ3MoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0V2FybmluZ3MoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgd2hldGhlciB1bmRlcmx5aW5nIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyBjbG9zZWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIGNsb3NlZCwgZmFsc2UKLSAgICAgKiAJCWlmIGl0IGlzIGNsb3NlZC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyBjbG9zZWQsIGZhbHNlCisgICAgICogICAgICAgICBpZiBpdCBpcyBjbG9zZWQuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzQ2xvc2VkKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXJldHVybiBpc0Nsb3NlZDsKKyAgICAgICAgcmV0dXJuIGlzQ2xvc2VkOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB3aGV0aGVyIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIHJlYWQtb25seS4KICAgICAgKgotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IGlzIHJlYWQtb25seSwgZmFsc2Ugb3RoZXItd2lzZQotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBpcyByZWFkLW9ubHksIGZhbHNlIG90aGVyLXdpc2UKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNSZWFkT25seSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uaXNSZWFkT25seSgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5pc1JlYWRPbmx5KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29udmVydHMgdGhlIGdpdmVuIFNRTCBzdGF0ZW1lbnQgaW50byB0aGUgc3lzdGVtJ3MgbmF0aXZlIFNRTCBncmFtbWVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgc3RhdGVtZW50ICwgdG8gYmUgY29udmVydGVkLgotICAgICAqIEByZXR1cm4JQ29udmVydGVkIFNRTCBzdHJpbmcuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIHN0YXRlbWVudCAsIHRvIGJlIGNvbnZlcnRlZC4KKyAgICAgKiBAcmV0dXJuICAgIENvbnZlcnRlZCBTUUwgc3RyaW5nLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIG5hdGl2ZVNRTChTdHJpbmcgc3FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLm5hdGl2ZVNRTChzcWwpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5uYXRpdmVTUUwoc3FsKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCiAgICAgICogc3RvcmVkIHByb2NlZHVyZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKICAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQotICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQlpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCQotICAgIAlyZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCi0gICAgICogc3RvcmVkIHByb2NlZHVyZXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRIb2xkYWJpbGl0eQlSZXN1bHRTZXQgSG9sZGFiaWxpdHkuICAgICAgICAgIAotICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCi0gICAgCQkJICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwpOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQorICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQorICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0SG9sZGFiaWxpdHkgICAgUmVzdWx0U2V0IEhvbGRhYmlsaXR5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKICAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAogICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwpOwogICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCWF1dG9HZW5lcmF0ZWRLZXlzIGEgZmxhZyBpbmRpY2F0aW5nIEF1dG9HZW5lcmF0ZWRLZXlzIG5lZWQgdG8gYmUgcmV0dXJuZWQuCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IGF1dG9HZW5lcmF0ZWRLZXlzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGF1dG9HZW5lcmF0ZWRLZXlzKTsKLSAgICB9ICAgIAotICAgICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQljb2x1bW5JbmRleGVzIGFuIGFycmF5IG9mIGNvbHVtbiBpbmRleGVzIGluZGljYXRpbmcgdGhlIGNvbHVtbnMgdGhhdCBzaG91bGQgYmUKLSAgICAgKgkJcmV0dXJuZWQgZnJvbSB0aGUgaW5zZXJ0ZWQgcm93IG9yIHJvd3MuCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50W10gY29sdW1uSW5kZXhlcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5JbmRleGVzKTsKLSAgICB9ICAgICAgICAgIAotIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgICAgICAKLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCSAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCi0gICAgCQkJCSAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKLSAgICB9ICAgICAgICAgICAKIAogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZwogICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCWNvbHVtbk5hbWVzIE5hbWUgb2YgYm91bmQgY29sdW1ucy4KKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgYXV0b0dlbmVyYXRlZEtleXMgYSBmbGFnIGluZGljYXRpbmcgQXV0b0dlbmVyYXRlZEtleXMgbmVlZCB0byBiZSByZXR1cm5lZC4KICAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IGF1dG9HZW5lcmF0ZWRLZXlzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsYXV0b0dlbmVyYXRlZEtleXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBjb2x1bW5JbmRleGVzIGFuIGFycmF5IG9mIGNvbHVtbiBpbmRleGVzIGluZGljYXRpbmcgdGhlIGNvbHVtbnMgdGhhdCBzaG91bGQgYmUKKyAgICAgKiAgICAgICAgcmV0dXJuZWQgZnJvbSB0aGUgaW5zZXJ0ZWQgcm93IG9yIHJvd3MuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50W10gY29sdW1uSW5kZXhlcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbkluZGV4ZXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRIb2xkYWJpbGl0eSAgICBSZXN1bHRTZXQgSG9sZGFiaWxpdHkuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGNvbHVtbk5hbWVzIE5hbWUgb2YgYm91bmQgY29sdW1ucy4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBTdHJpbmdbXSBjb2x1bW5OYW1lcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5OYW1lcyk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbk5hbWVzKTsKICAgICB9CiAKICAgICBwdWJsaWMgQ2xvYiBjcmVhdGVDbG9iKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CkBAIC01MDYsMTYyICs1MDYsMTYyIEBACiAgICAgLyoqCiAgICAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4gPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QgZnJvbSB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlzYXZlcG9pbnQJPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHNhdmVwb2ludCAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByZWxlYXNlU2F2ZXBvaW50KFNhdmVwb2ludCBzYXZlcG9pbnQpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yZWxlYXNlU2F2ZXBvaW50KHNhdmVwb2ludCk7Ci0gICAgfSAKLSAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5yZWxlYXNlU2F2ZXBvaW50KHNhdmVwb2ludCk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUm9sbHMgYmFjayB0aGUgY2hhbmdlcyBtYWRlIGluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLyAgICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJvbGxiYWNrKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucm9sbGJhY2soKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSb2xscyBiYWNrIHRoZSBjaGFuZ2VzIG1hZGUgYWZ0ZXIgdGhlIHNhdmVwb2ludC4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjayhTYXZlcG9pbnQgc2F2ZXBvaW50KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucm9sbGJhY2soc2F2ZXBvaW50KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5yb2xsYmFjayhzYXZlcG9pbnQpOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBhdXRvLWNvbW1taXQgbW9kZSBvZiB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCWF1dG9Db21taXQgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBhdXRvLWNvbW1pdCBtb2RlLiAgICAgCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBhdXRvQ29tbWl0IGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB0aGUgYXV0by1jb21taXQgbW9kZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0QXV0b0NvbW1pdChib29sZWFuIGF1dG9Db21taXQpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRBdXRvQ29tbWl0KGF1dG9Db21taXQpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldEF1dG9Db21taXQoYXV0b0NvbW1pdCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgY2F0YWxvZyBuYW1lIHRvIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QKICAgICAgKgotICAgICAqIEBwYXJhbQljYXRhbG9nCUNhdGFsb2cgbmFtZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGNhdGFsb2cgICAgQ2F0YWxvZyBuYW1lLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDYXRhbG9nKFN0cmluZyBjYXRhbG9nKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0Q2F0YWxvZyhjYXRhbG9nKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRDYXRhbG9nKGNhdGFsb2cpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFNldHMgdGhlIGhvbGRhYmlsaXR5IG9mIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gb2JqZWN0cyBjcmVhdGVkIAorICAgICAqIFNldHMgdGhlIGhvbGRhYmlsaXR5IG9mIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gb2JqZWN0cyBjcmVhdGVkCiAgICAgICogdXNpbmcgdGhpcyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JaG9sZGFiaWxpdHkJQSA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IGhvbGRhYmlsaXR5IGNvbnN0YW50Ci0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBob2xkYWJpbGl0eSAgICBBIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gaG9sZGFiaWxpdHkgY29uc3RhbnQKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0SG9sZGFiaWxpdHkoaW50IGhvbGRhYmlsaXR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgICAJY29uLnNldEhvbGRhYmlsaXR5KGhvbGRhYmlsaXR5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgICBjb24uc2V0SG9sZGFiaWxpdHkoaG9sZGFiaWxpdHkpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFB1dHMgdGhlIGNvbm5lY3Rpb24gaW4gcmVhZC1vbmx5IG1vZGUgYXMgYSBoaW50IHRvIHRoZSBkcml2ZXIgdG8gCisgICAgICogUHV0cyB0aGUgY29ubmVjdGlvbiBpbiByZWFkLW9ubHkgbW9kZSBhcyBhIGhpbnQgdG8gdGhlIGRyaXZlciB0bwogICAgICAqIHBlcmZvcm0gZGF0YWJhc2Ugb3B0aW1pemF0aW9ucy4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZWFkT25seSAgdHJ1ZSBlbmFibGVzIHJlYWQtb25seSBtb2RlLCBmYWxzZSBkaXNhYmxlcyBpdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHJlYWRPbmx5ICB0cnVlIGVuYWJsZXMgcmVhZC1vbmx5IG1vZGUsIGZhbHNlIGRpc2FibGVzIGl0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSZWFkT25seShib29sZWFuIHJlYWRPbmx5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0UmVhZE9ubHkocmVhZE9ubHkpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldFJlYWRPbmx5KHJlYWRPbmx5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGFuZCB1bm5hbWVkIHNhdmVwb2ludCBhbmQgcmV0dXJucyBhbiBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGF0LgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgogICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU2F2ZXBvaW50IHNldFNhdmVwb2ludCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uc2V0U2F2ZXBvaW50KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnNldFNhdmVwb2ludCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzYXZlcG9pbnQgd2l0aCB0aGUgbmFtZSBhbmQgcmV0dXJucyBhbiBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGF0LgogICAgICAqCi0gICAgICogQHBhcmFtCW5hbWUJTmFtZSBvZiB0aGUgc2F2ZXBvaW50LgotICAgICAqIEByZXR1cm4JPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBuYW1lICAgIE5hbWUgb2YgdGhlIHNhdmVwb2ludC4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU2F2ZXBvaW50IHNldFNhdmVwb2ludChTdHJpbmcgbmFtZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQobmFtZSk7Ci0gICAgfSAgICAKLSAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uc2V0U2F2ZXBvaW50KG5hbWUpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlsZXZlbCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBsZXZlbCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKGludCBsZXZlbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKGxldmVsKTsKLSAgICB9ICAgICAKLSAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbihsZXZlbCk7CisgICAgfQorCiAgICAgLyoqCi0gICAgICogSW5zdGFsbHMgdGhlIGdpdmVuIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzIHRoZSB0eW9lIG1hcCBmb3IgdGhpcyAKKyAgICAgKiBJbnN0YWxscyB0aGUgZ2l2ZW4gPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXMgdGhlIHR5b2UgbWFwIGZvciB0aGlzCiAgICAgICogPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWFwCTxjb2RlPk1hcDwvY29kZT4gYSBNYXAgb2JqZWN0IHRvIGluc3RhbGwuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBtYXAgICAgPGNvZGU+TWFwPC9jb2RlPiBhIE1hcCBvYmplY3QgdG8gaW5zdGFsbC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VHlwZU1hcChNYXAgbWFwKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7Ci0gICAgCWNvbi5zZXRUeXBlTWFwKG1hcCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0VHlwZU1hcChtYXApOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TmV0d29ya1RpbWVvdXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0TmV0d29ya1RpbWVvdXQoRXhlY3V0b3IgZXhlY3V0b3IsIGludCBtaWxsaXNlY29uZHMpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhYm9ydChFeGVjdXRvciBleGVjdXRvcikgIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2NoZW1hKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0U2NoZW1hKFN0cmluZyBzY2hlbWEpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIHRoZSB2YWxpZGl0eSBvZiB0aGlzIG9iamVjdAogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBjaGVja1ZhbGlkaXR5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCWlmIChpc0Nsb3NlZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkNvbm5lY3Rpb24gY2xvc2VkIik7Ci0gICAgCWlmICghdmFsaWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJJbnZhbGlkIENvbm5lY3Rpb24iKTsKLSAgICAJaWYoYWN0aXZlID09IGZhbHNlKSB7Ci0gICAgCSAgICBtYy5jaGVja0lmQWN0aXZlKHRoaXMpOwotICAgIAl9CisgICAgICAgIGlmIChpc0Nsb3NlZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkNvbm5lY3Rpb24gY2xvc2VkIik7CisgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJJbnZhbGlkIENvbm5lY3Rpb24iKTsKKyAgICAgICAgaWYoYWN0aXZlID09IGZhbHNlKSB7CisgICAgICAgICAgICBtYy5jaGVja0lmQWN0aXZlKHRoaXMpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgYWN0aXZlIGZsYWcgdG8gdHJ1ZQogICAgICAqCi0gICAgICogQHBhcmFtCWFjdHYJYm9vbGVhbgorICAgICAqIEBwYXJhbSAgICBhY3R2ICAgIGJvb2xlYW4KICAgICAgKi8KICAgICB2b2lkIHNldEFjdGl2ZShib29sZWFuIGFjdHYpIHsKICAgICAgICAgYWN0aXZlID0gYWN0djsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKaW5kZXggYWM3ZTc0OC4uZjA2NzVhNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTMzLDE5ICszMywxOSBAQAogICogVGhpcyBjbGFzcyBpcyBleHRlbmRlZCBieSB0aGUgRGF0YVNvdXJjZSBzcGVjaWZpYyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gZmFjdG9yaWVzCiAgKiBhbmQgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gZm9yIHRoZSA8Y29kZT5Ecml2ZXJNYW5hZ2VyPC9jb2RlPi4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzAzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LCAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnksCiAgICAgamF2YS5pby5TZXJpYWxpemFibGUgewotICAgIAorCiAgICAgcHJvdGVjdGVkIERhdGFTb3VyY2VTcGVjIHNwZWMgPSBuZXcgRGF0YVNvdXJjZVNwZWMoKTsKICAgICBwcm90ZWN0ZWQgdHJhbnNpZW50IERhdGFTb3VyY2VPYmplY3RCdWlsZGVyIGRzT2JqQnVpbGRlcjsKLSAgICAKKwogICAgIHByb3RlY3RlZCBqYXZhLmlvLlByaW50V3JpdGVyIGxvZ1dyaXRlciA9IG51bGw7CiAgICAgcHJvdGVjdGVkIGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciByYSA9IG51bGw7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTQsOCArNTQsOCBAQAogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBDb25uZWN0aW9uIEZhY3RvcnkgaW5zdGFuY2UuIFRoZSA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gaW1wbGVtZW50YXRpb24KICAgICAgKiBvZiB0aGUgcmVzb3VyY2UgYWRhcHRlciBpcyB1c2VkIGhlcmUuCi0gICAgICogCi0gICAgICogQHJldHVybglHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgorICAgICAqCisgICAgICogQHJldHVybiAgICBHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgY3JlYXRlQ29ubmVjdGlvbkZhY3RvcnkoKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC02MywxNiArNjMsMTYgQEAKICAgICAgICAgfQogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSBjZiA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSgKICAgICAgICAgICAgIChqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpdGhpcywgbnVsbCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBjZjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgQ29ubmVjdGlvbiBGYWN0b3J5IGluc3RhbmNlLiBUaGUgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uCiAgICAgICogb2YgdGhlIGFwcGxpY2F0aW9uIHNlcnZlciBpcyB1c2VkIGhlcmUuCi0gICAgICogCi0gICAgICogQHBhcmFtCWN4TWFuYWdlcgk8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcmV0dXJuCUdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY3hNYW5hZ2VyICAgIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEByZXR1cm4gICAgR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGNyZWF0ZUNvbm5lY3Rpb25GYWN0b3J5KGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyIGN4TWFuYWdlcikgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtODAsNTUgKzgwLDU1IEBACiAgICAgICAgIH0KICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UgY2YgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UoCiAgICAgICAgICAgICAoamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KXRoaXMsIGN4TWFuYWdlcik7Ci0gICAgICAgIHJldHVybiBjZjsgCisgICAgICAgIHJldHVybiBjZjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgbmV3IHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgRUlTIHJlc291cmNlCiAgICAgICogbWFuYWdlci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBwYXJhbQljeFJlcXVlc3RJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0Ci0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAk8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCi0gICAgICogICAgICAgCQkJCWNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0Ci0gICAgICogQHRocm93cwlTZWN1cml0eUV4Y2VwdGlvbglpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0IAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqCQkJCQkJcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gICAgY3hSZXF1ZXN0SW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAorICAgICAqIEB0aHJvd3MgICAgU2VjdXJpdHlFeGNlcHRpb24gICAgaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdCBzdWJqZWN0LAogICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uOwotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvIAorICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0bwogICAgICAqIGFub3RoZXIgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jb3RoZXIJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCi0gICAgICoJCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIG90aGVyICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCisgICAgICogICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpOwotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHNlZQk8Y29kZT5zZXRMb2dXcml0ZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBqYXZhLmlvLlByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHsKICAgICAgICAgcmV0dXJuIGxvZ1dyaXRlcjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHNlZQk8Y29kZT5zZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJlc291cmNlQWRhcHRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIGdldFJlc291cmNlQWRhcHRlcigpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTEzNiwxMSArMTM2LDExIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJhOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LgogICAgICAqCi0gICAgICogQHJldHVybgloYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCl7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xNDgsNDEgKzE0OCw0MSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzcGVjLmhhc2hDb2RlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyBhIG1hdGNoZWQgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZyb20gdGhlIGNhbmRpZGF0ZSAKKyAgICAgKiBSZXR1cm5zIGEgbWF0Y2hlZCA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gZnJvbSB0aGUgY2FuZGlkYXRlCiAgICAgICogc2V0IG9mIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3RzLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb25uZWN0aW9uU2V0CTxjb2RlPlNldDwvY29kZT4gb2YgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqCQkJCW9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAkgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKgkJCWZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZwotICAgICAqIEBwYXJhbQljeFJlcXVlc3RJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKgkJCQlmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IGlzIHRoZSBiZXN0IG1hdGNoIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBhY2Nlc3NpbmcgdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+Ci0gICAgICoJCQkJCXBhcmFtZXRlciBvciB0aGUgPGNvZGU+U2V0PC9jb2RlPiBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKgkJCQkJb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbm5lY3Rpb25TZXQgICAgPGNvZGU+U2V0PC9jb2RlPiBvZiAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgICBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqICAgICAgICAgICAgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqICAgICAgICAgICAgICAgIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZworICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgaXMgdGhlIGJlc3QgbWF0Y2ggc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGFjY2Vzc2luZyB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIG9yIHRoZSA8Y29kZT5TZXQ8L2NvZGU+IG9mIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICBvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCiAgICAgICovCi0gICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1hdGNoTWFuYWdlZENvbm5lY3Rpb25zKGphdmEudXRpbC5TZXQgY29ubmVjdGlvblNldCwgCisgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1hdGNoTWFuYWdlZENvbm5lY3Rpb25zKGphdmEudXRpbC5TZXQgY29ubmVjdGlvblNldCwKICAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0IHN1YmplY3QsIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIG1hdGNoTWFuYWdlZENvbm5lY3Rpb25zIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoY29ubmVjdGlvblNldCA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGMgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLCBzdWJqZWN0LCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgCisKICAgICAgICAgamF2YS51dGlsLkl0ZXJhdG9yIGl0ZXIgPSBjb25uZWN0aW9uU2V0Lml0ZXJhdG9yKCk7CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG51bGw7CiAgICAgICAgIHdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1jID0gKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbikgaXRlci5uZXh0KCk7CiAgICAgICAgICAgICB9IGNhdGNoKGphdmEudXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uIG5zZWUpIHsKLQkgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2l0ZXIiKTsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2l0ZXIiKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24obnNlZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYocGMgPT0gbnVsbCAmJiB0aGlzLmVxdWFscyhtYy5nZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKSkpIHsKQEAgLTE5MSw3ICsxOTEsNyBAQAogICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkKG1jKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1jOwogICAgICAgICAgICAgICAgIH0gY2F0Y2goUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKLQkgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19yZSIsIHJlKTsKKyAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19yZSIsIHJlKTsKICAgICAgICAgICAgICAgICAgICAgbWMuY29ubmVjdGlvbkVycm9yT2NjdXJyZWQocmUsIG51bGwpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZihTZWN1cml0eVV0aWxzLmlzUGFzc3dvcmRDcmVkZW50aWFsRXF1YWwocGMsIG1jLmdldFBhc3N3b3JkQ3JlZGVudGlhbCgpKSA9PSB0cnVlKSB7CkBAIC0yMDAsNDUgKzIwMCw0NSBAQAogICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkKG1jKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1jOwogICAgICAgICAgICAgICAgIH0gY2F0Y2goUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKLQkgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLnJlIik7CisgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5yZSIpOwogICAgICAgICAgICAgICAgICAgICBtYy5jb25uZWN0aW9uRXJyb3JPY2N1cnJlZChyZSwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogICAgIC8vR0pDSU5UCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGlzIHRvIGJlIHZhbGlkYXRlZCBvciBub3QKICAgICAgKiBhbmQgdmFsaWRhdGVzIGl0IG9yIHJldHVybnMuCi0gICAgICogCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgotICAgICAqICAgICAgICAJICAgICAgICAgIAkJaWYgdmFsaWRhdGlvbiBtZXRob2QgaXMgbm90IHByb3BlcgorICAgICAqCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmFsaWRhdGlvbiBtZXRob2QgaXMgbm90IHByb3BlcgogICAgICAqLwogICAgIHZvaWQgaXNWYWxpZChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAKICAgICAgICAgaWYobWMuaXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSkgewotCSAgICByZXR1cm47CisgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgIAotICAgICAgICBib29sZWFuIGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQgPSAKKworICAgICAgICBib29sZWFuIGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQgPQogICAgICAgICAgICAgKG5ldyBCb29sZWFuKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpLnRvTG93ZXJDYXNlKCkpKS5ib29sZWFuVmFsdWUoKTsKICAgICAgICAgaWYoIGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQgPT0gZmFsc2UgfHwgbWMgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIFN0cmluZyB2YWxpZGF0aW9uTWV0aG9kID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCkudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgCisKICAgICAgICAgbWMuY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgYWJvdmUgY2FsbCBjaGVja3MgaWYgdGhlIGFjdHVhbCBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICAgICAqIGlzIHVzYWJsZSBvciBub3QuCiAgICAgICAgICAqLwogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAgICAgICAgCisKICAgICAgICAgaWYodmFsaWRhdGlvbk1ldGhvZC5lcXVhbHMoImF1dG8tY29tbWl0IikgPT0gdHJ1ZSkgewogICAgICAgICAgICAgaXNWYWxpZEJ5QXV0b0NvbW1pdChjb24pOwogICAgICAgICB9IGVsc2UgaWYodmFsaWRhdGlvbk1ldGhvZC5lcXVhbHNJZ25vcmVDYXNlKCJtZXRhLWRhdGEiKSA9PSB0cnVlKSB7CkBAIC0yNDksMjggKzI0OSwyOCBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgdmFsaWRhdGlvbiBtZXRob2QgaXMgbm90IHByb3BlciIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90CiAgICAgICogYnkgY2hlY2tpbmcgaXRzIGF1dG8gY29tbWl0IHByb3BlcnR5LgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlBdXRvQ29tbWl0KGphdmEuc3FsLkNvbm5lY3Rpb24gY29uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewotICAgICAgICAgICAvLyBOb3RpY2UgdGhhdCB1c2luZyBzb21ldGhpbmcgbGlrZSAKKyAgICAgICAgICAgLy8gTm90aWNlIHRoYXQgdXNpbmcgc29tZXRoaW5nIGxpa2UKICAgICAgICAgICAgLy8gZGJDb24uc2V0QXV0b0NvbW1pdChkYkNvbi5nZXRBdXRvQ29tbWl0KCkpIHdpbGwgY2F1c2UgcHJvYmxlbXMgd2l0aAogICAgICAgICAgICAvLyBzb21lIGRyaXZlcnMgbGlrZSBzeWJhc2UKLSAgICAgICAgICAgLy8gV2UgZG8gbm90IHZhbGlkYXRlIGNvbm5lY3Rpb25zIHRoYXQgYXJlIGFscmVhZHkgZW5saXN0ZWQgCi0JICAgLy9pbiBhIHRyYW5zYWN0aW9uIAotCSAgIC8vIFdlIGN5Y2xlIGF1dG9jb21taXQgdG8gdHJ1ZSBhbmQgZmFsc2UgdG8gYnktcGFzcyBkcml2ZXJzIHRoYXQgCi0JICAgLy8gbWlnaHQgY2FjaGUgdGhlIGNhbGwgdG8gc2V0IGF1dG9jb21pdHQKKyAgICAgICAgICAgLy8gV2UgZG8gbm90IHZhbGlkYXRlIGNvbm5lY3Rpb25zIHRoYXQgYXJlIGFscmVhZHkgZW5saXN0ZWQKKyAgICAgICAvL2luIGEgdHJhbnNhY3Rpb24KKyAgICAgICAvLyBXZSBjeWNsZSBhdXRvY29tbWl0IHRvIHRydWUgYW5kIGZhbHNlIHRvIGJ5LXBhc3MgZHJpdmVycyB0aGF0CisgICAgICAgLy8gbWlnaHQgY2FjaGUgdGhlIGNhbGwgdG8gc2V0IGF1dG9jb21pdHQKICAgICAgICAgICAgLy8gQWxzbyBub3RpY2UgdGhhdCBzb21lIFhBIGRhdGEgc291cmNlcyB3aWxsIHRocm93IGFuZCBleGNlcHRpb24gaWYKICAgICAgICAgICAgLy8geW91IHRyeSB0byBjYWxsIHNldEF1dG9Db21taXQsIGZvciB0aGVtIHRoaXMgbWV0aG9kIGlzIG5vdCByZWNvbW1lbmRlZAogCkBAIC0yODEsOTAgKzI4MSw5MCBAQAogICAgICAgICAgICAgICAgIGNvbi5yb2xsYmFjaygpOyAvLyBwcmV2ZW50cyB1bmNvbXBsZXRlZCB0cmFuc2FjdGlvbiBleGNlcHRpb25zCiAgICAgICAgICAgICAgICAgY29uLnNldEF1dG9Db21taXQodHJ1ZSk7CiAgICAgICAgICAgIH0KLSAgICAgICAgCi0JICAgY29uLnNldEF1dG9Db21taXQoYWMpOworCisgICAgICAgY29uLnNldEF1dG9Db21taXQoYWMpOwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYXV0b2NvbW1pdCIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hdXRvY29tbWl0Iik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90CiAgICAgICogYnkgY2hlY2tpbmcgaXRzIG1ldGEgZGF0YS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5TWV0YURhdGEoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBqYXZhLnNxbC5EYXRhYmFzZU1ldGFEYXRhIGRtZCA9IGNvbi5nZXRNZXRhRGF0YSgpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAiZ2V0dGluZyB0aGUgbWV0YSBkYXRhIGZhaWxlZDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IHF1ZXJ5aW5nIGEgdGFibGUuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAcGFyYW0JdGFibGVOYW1lCXRhYmxlIHdoaWNoIHNob3VsZCBiZSBxdWVyaWVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHBhcmFtICAgIHRhYmxlTmFtZSAgICB0YWJsZSB3aGljaCBzaG91bGQgYmUgcXVlcmllZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5VGFibGVRdWVyeShqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiwgCisgICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5VGFibGVRdWVyeShqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiwKICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGphdmEuc3FsLlN0YXRlbWVudCBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgamF2YS5zcWwuUmVzdWx0U2V0IHJzID0gc3RtdC5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gIiArIHRhYmxlTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZXhlY3V0ZSIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19leGVjdXRlIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAicXVlcnlpbmcgdGhlIHRhYmxlICIgKyB0YWJsZU5hbWUgKyAiIGZhaWxlZDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGlzb2xhdGlvbiBsZXZlbCBzcGVjaWZpZWQgaW4gdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KICAgICAgKiBmb3IgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBwYXNzZWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKLSAgICAgKgkJCQkJb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBzZXRJc29sYXRpb24oY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotICAgIAkKLSAgICAJamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gICAgCWlmKGNvbiA9PSBudWxsKSB7Ci0gICAgCSAgICByZXR1cm47Ci0gICAgCX0KLSAgICAJCi0gICAgCVN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwotICAgIAlpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7Ci0gICAgCSAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOwotICAgIAkgICAgdHJ5IHsKLSAgICAJICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7Ci0gICAgCSAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBjb3VsZCAiCi0gICAgCSAgICAgICAgICAgICsgIm5vdCBiZSBzZXQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICB9Ci0gICAgCX0KKworICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKKyAgICAgICAgaWYoY29uID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOworICAgICAgICBpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7CisgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CisgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBjb3VsZCAiCisgICAgICAgICAgICAgICAgICAgICsgIm5vdCBiZSBzZXQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXNldHMgdGhlIGlzb2xhdGlvbiBsZXZlbCBmb3IgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBwYXNzZWQuCiAgICAgICogSWYgdGhlIHRyYW5zYWN0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZQpAQCAtMzczLDM4MiArMzczLDM4MiBAQAogICAgICAqIGlzb2xhdGlvbiBsZXZlbCBmcm9tIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZC4gRWxzZSwKICAgICAgKiBpdCBzZXRzIGl0IHRvIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gcGFzc2VkLgogICAgICAqCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEBwYXJhbQl0cmFuSXNvbAlpbnQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAotICAgICAqCQkJCQlvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdHJhbklzb2wgICAgaW50CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICB2b2lkIHJlc2V0SXNvbGF0aW9uKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYywgaW50IHRyYW5Jc29sKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotICAgIAkKLSAgICAJamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gICAgCWlmKGNvbiA9PSBudWxsKSB7Ci0gICAgCSAgICByZXR1cm47Ci0gICAgCX0KLSAgICAJCi0gICAgCVN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwotICAgIAlpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7Ci0gICAgCSAgICBTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7Ci0gICAgCSAgICAKLSAgICAJICAgIGlmKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsICE9IG51bGwgJiYgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwuZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgICAgIGJvb2xlYW4gZ3VhcmFudGVlID0gKG5ldyBCb29sZWFuKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLnRvTG93ZXJDYXNlKCkpKS5ib29sZWFuVmFsdWUoKTsKLSAgICAJICAgICAgICAKLSAgICAJICAgICAgICBpZihndWFyYW50ZWUpIHsKLSAgICAJICAgICAgICAgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKLSAgICAJICAgICAgICAgICAgdHJ5IHsKLSAgICAJICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sYXRpb25JbnQgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKLSAgICAJICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7Ci0gICAgCSAgICAgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCi0gICAgCSAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICAgICAgICAgIH0KLSAgICAJICAgICAgICB9IGVsc2UgewotICAgIAkgICAgICAgICAgICB0cnkgewotICAgIAkgICAgICAgICAgICAgICAgaWYodHJhbklzb2wgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKLSAgICAJICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2wpOwotICAgIAkgICAgICAgICAgICAgICAgfQotICAgIAkgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgotICAgIAkgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgfQotICAgIAkgICAgfQotICAgIAl9CisKKyAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7CisgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKKyAgICAgICAgaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOworCisgICAgICAgICAgICBpZihndWFyYW50ZWVJc29sYXRpb25MZXZlbCAhPSBudWxsICYmIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgICAgICBib29sZWFuIGd1YXJhbnRlZSA9IChuZXcgQm9vbGVhbihndWFyYW50ZWVJc29sYXRpb25MZXZlbC50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7CisKKyAgICAgICAgICAgICAgICBpZihndWFyYW50ZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sYXRpb25JbnQgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYodHJhbklzb2wgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2wpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CisgICAgICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgaW50ZWdlciBlcXVpdmFsZW50IG9mIHRoZSBzdHJpbmcgc3BlY2lmeWluZwogICAgICAqIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHJhbklzb2xhdGlvbglzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uIGxldmVsCi0gICAgICogQHJldHVybgl0cmFuSXNvbGF0aW9uSW50CXRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBjb25zdGFudAotICAgICAqCQkJCQlmb3IgdGhlIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24uCisgICAgICogQHBhcmFtICAgIHRyYW5Jc29sYXRpb24gICAgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbklzb2xhdGlvbkludCAgICB0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gY29uc3RhbnQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uLgogICAgICAqLwogICAgIHByaXZhdGUgaW50IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KFN0cmluZyB0cmFuSXNvbGF0aW9uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotICAgIAlpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtdW5jb21taXR0ZWQiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9VTkNPTU1JVFRFRDsKLSAgICAJfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC1jb21taXR0ZWQiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9DT01NSVRURUQ7Ci0gICAgCX0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlcGVhdGFibGUtcmVhZCIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRVBFQVRBQkxFX1JFQUQ7Ci0gICAgCX0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInNlcmlhbGl6YWJsZSIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9TRVJJQUxJWkFCTEU7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkludmFsaWQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uOyB0aGUgdHJhbnNhY3Rpb24gIgotICAgIAkgICAgICAgICsgImlzb2xhdGlvbiBsZXZlbCBjYW4gYmUgZW1wdHkgb3IgYW55IG9mIHRoZSBmb2xsb3dpbmc6ICIKLSAgICAJICAgICAgICAgICAgKyAicmVhZC11bmNvbW1pdHRlZCwgcmVhZC1jb21taXR0ZWQsIHJlcGVhdGFibGUtcmVhZCwgc2VyaWFsaXphYmxlIik7Ci0gICAgCX0KKyAgICAgICAgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLXVuY29tbWl0dGVkIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfVU5DT01NSVRURUQ7CisgICAgICAgIH0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtY29tbWl0dGVkIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfQ09NTUlUVEVEOworICAgICAgICB9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZXBlYXRhYmxlLXJlYWQiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVQRUFUQUJMRV9SRUFEOworICAgICAgICB9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJzZXJpYWxpemFibGUiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fU0VSSUFMSVpBQkxFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJJbnZhbGlkIHRyYW5zYWN0aW9uIGlzb2xhdGlvbjsgdGhlIHRyYW5zYWN0aW9uICIKKyAgICAgICAgICAgICAgICArICJpc29sYXRpb24gbGV2ZWwgY2FuIGJlIGVtcHR5IG9yIGFueSBvZiB0aGUgZm9sbG93aW5nOiAiCisgICAgICAgICAgICAgICAgICAgICsgInJlYWQtdW5jb21taXR0ZWQsIHJlYWQtY29tbWl0dGVkLCByZXBlYXRhYmxlLXJlYWQsIHNlcmlhbGl6YWJsZSIpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb3V0CTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBvdXQgICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKGphdmEuaW8uUHJpbnRXcml0ZXIgb3V0KSB7CiAgICAgICAgIGxvZ1dyaXRlciA9IG91dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGFzc29jaWF0ZWQgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBKYXZhQmVhbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlyYQk8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+Z2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICByYSAgICA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5nZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVzb3VyY2VBZGFwdGVyKGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciByYSkgewotICAgICAgICB0aGlzLnJhID0gcmE7ICAgCisgICAgICAgIHRoaXMucmEgPSByYTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VXNlcihTdHJpbmcgdXNlcikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSwgdXNlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXVzZXIKKyAgICAgKiBAcmV0dXJuICAgIHVzZXIKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHVzZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHVzZXIoU3RyaW5nIHVzZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUsIHVzZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHJldHVybgl1c2VyCisgICAgICogQHJldHVybiAgICB1c2VyCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR1c2VyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcGFzc3dkCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcGFzc3dkICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRQYXNzd29yZChTdHJpbmcgcGFzc3dkKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JELCBwYXNzd2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBhc3N3ZAorICAgICAqIEByZXR1cm4gICAgcGFzc3dkCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRQYXNzd29yZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHBhcmFtCXBhc3N3ZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBhc3N3ZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0cGFzc3dvcmQoU3RyaW5nIHBhc3N3ZCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCwgcGFzc3dkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHJldHVybglwYXNzd2QKKyAgICAgKiBAcmV0dXJuICAgIHBhc3N3ZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0cGFzc3dvcmQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEBwYXJhbQljbGFzc05hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjbGFzc05hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSwgY2xhc3NOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHJldHVybgljbGFzc05hbWUKKyAgICAgKiBAcmV0dXJuICAgIGNsYXNzTmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2xhc3NOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHBhcmFtCWNsYXNzTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNsYXNzTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Y2xhc3NOYW1lKFN0cmluZyBjbGFzc05hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FLCBjbGFzc05hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNsYXNzTmFtZQorICAgICAqIEByZXR1cm4gICAgY2xhc3NOYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRjbGFzc05hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHBhcmFtCWNvblZsZFJlcQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNvblZsZFJlcSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZChTdHJpbmcgY29uVmxkUmVxKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQsIGNvblZsZFJlcSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29uVmxkUmVxCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY29uVmxkUmVxICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKFN0cmluZyBjb25WbGRSZXEpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCwgY29uVmxkUmVxKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEByZXR1cm4JY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CisgICAgICogQHJldHVybiAgICBjb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB2YWxpZGF0aW9uIG1ldGhvZCByZXF1aXJlZAogICAgICAqCi0gICAgICogQHBhcmFtCXZhbGlkYXRpb25NZXRob2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB2YWxpZGF0aW9uTWV0aG9kICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRWYWxpZGF0aW9uTWV0aG9kKFN0cmluZyB2YWxpZGF0aW9uTWV0aG9kKSB7CiAgICAgICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9ELCB2YWxpZGF0aW9uTWV0aG9kKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBjb25uZWN0aW9uIHZhbGlkYXRpb24gbWV0aG9kIHR5cGUKICAgICAgKgotICAgICAqIEByZXR1cm4JdmFsaWRhdGlvbiBtZXRob2QKKyAgICAgKiBAcmV0dXJuICAgIHZhbGlkYXRpb24gbWV0aG9kCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRWYWxpZGF0aW9uTWV0aG9kKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdmFsaWRhdGlvbiBtZXRob2QgcmVxdWlyZWQKICAgICAgKgotICAgICAqIEBwYXJhbQl2YWxpZGF0aW9uTWV0aG9kCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdmFsaWRhdGlvbk1ldGhvZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dmFsaWRhdGlvbk1ldGhvZChTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCkgewogICAgICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCwgdmFsaWRhdGlvbk1ldGhvZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgY29ubmVjdGlvbiB2YWxpZGF0aW9uIG1ldGhvZCB0eXBlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXZhbGlkYXRpb24gbWV0aG9kCisgICAgICogQHJldHVybiAgICB2YWxpZGF0aW9uIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dmFsaWRhdGlvbk1ldGhvZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdGFibGUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0YWJsZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VmFsaWRhdGlvblRhYmxlTmFtZShTdHJpbmcgdGFibGUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSwgdGFibGUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRhYmxlCisgICAgICogQHJldHVybiAgICB0YWJsZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsaWRhdGlvblRhYmxlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdGFibGUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0YWJsZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dmFsaWRhdGlvblRhYmxlTmFtZShTdHJpbmcgdGFibGUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSwgdGFibGUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRhYmxlCisgICAgICogQHJldHVybiAgICB0YWJsZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dmFsaWRhdGlvblRhYmxlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHBhcmFtCXRybklzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRybklzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oU3RyaW5nIHRybklzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTiwgdHJuSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCisgICAgICogQHJldHVybiAgICB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHBhcmFtCXRybklzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRybklzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dHJhbnNhY3Rpb25Jc29sYXRpb24oU3RyaW5nIHRybklzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTiwgdHJuSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCisgICAgICogQHJldHVybiAgICB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHRyYW5zYWN0aW9uSXNvbGF0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZ3VhcmFudGVlSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZ3VhcmFudGVlSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRHdWFyYW50ZWVJc29sYXRpb25MZXZlbChTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMLCBndWFyYW50ZWVJc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybglpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCisgICAgICogQHJldHVybiAgICBpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRHdWFyYW50ZWVJc29sYXRpb25MZXZlbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZAogICAgICAqCi0gICAgICogQHBhcmFtCWd1YXJhbnRlZUlzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGd1YXJhbnRlZUlzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Z3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCwgZ3VhcmFudGVlSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQorICAgICAqIEByZXR1cm4gICAgaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Z3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhCmluZGV4IDU1NWJlNzcuLmVhNTQwNzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhCkBAIC0yNiw4ICsyNiw4IEBACiAvKioKICAqIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wNQotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDUKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBSZXNvdXJjZUFkYXB0ZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgewogCkBAIC0zNyw1MiArMzcsNTIgQEAKICAgICAgKiBFbXB0eSBtZXRob2QgaW1wbGVtZW50YXRpb24gZm9yIGVuZHBvaW50QWN0aXZhdGlvbgogICAgICAqIHdoaWNoIGp1c3QgdGhyb3dzIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltZWYJPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KLSAgICAgKiBAcGFyYW0JYXMJPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+Ci0gICAgICogQHRocm93cwk8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1lZiAgICA8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBhcyAgICA8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmRwb2ludEFjdGl2YXRpb24oTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBtZWYsIEFjdGl2YXRpb25TcGVjIGFzKSB0aHJvd3MgTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiVGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBKREJDIGNvbm5lY3RvciIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZW5kcG9pbnREZWFjdGl2YXRpb24KICAgICAgKgotICAgICAqIEBwYXJhbQltZWYJPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KLSAgICAgKiBAcGFyYW0JYXMJPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1lZiAgICA8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBhcyAgICA8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmRwb2ludERlYWN0aXZhdGlvbihNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IG1lZiwgQWN0aXZhdGlvblNwZWMgYXMpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBtZXRob2QgaW1wbGVtZW50YXRpb24gZm9yIGdldFhBUmVzb3VyY2VzCiAgICAgICogd2hpY2gganVzdCB0aHJvd3MgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCXNwZWNzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPiBhcnJheQotICAgICAqIEB0aHJvd3MJPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzcGVjcyAgICA8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4gYXJyYXkKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpIHRocm93cyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJUaGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIEpEQkMgY29ubmVjdG9yIik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgaW1wbGVtZW50YXRpb24gb2Ygc3RhcnQgbWV0aG9kCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY3R4CTxjb2RlPkJvb3RzdHJhcENvbnRleHQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGN0eCAgICA8Y29kZT5Cb290c3RyYXBDb250ZXh0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KEJvb3RzdHJhcENvbnRleHQgY3R4KSB0aHJvd3MgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc291cmNlIEFkYXB0ZXIgaXMgc3RhcnRpbmcgd2l0aCBjb25maWd1cmF0aW9uIDoiICsgcmFQcm9wKTsKICAgICAgICAgaWYgKHJhUHJvcCA9PSBudWxsIHx8ICFyYVByb3AuZXF1YWxzKCJWQUxJRCIpKSB7Ci0JICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiUmVzb3VyY2UgYWRhcHRlciBjYW5ub3Qgc3RhcnQuIEl0IGlzIGNvbmZpZ3VyZWQgYXMgOiAiICsgcmFQcm9wKTsKLQl9IAorICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIlJlc291cmNlIGFkYXB0ZXIgY2Fubm90IHN0YXJ0LiBJdCBpcyBjb25maWd1cmVkIGFzIDogIiArIHJhUHJvcCk7CiAgICAgfQotICAgIAorICAgIH0KKwogICAgIC8qKgogICAgICAqIEVtcHR5IGltcGxlbWVudGF0aW9uIG9mIHN0b3AgbWV0aG9kCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RvcCgpIHsKLSAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFJBUHJvcGVydHkoU3RyaW5nIHMpIHsKQEAgLTkyLDUgKzkyLDUgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFJBUHJvcGVydHkoKSB7CiAgICAgICAgIHJldHVybiByYVByb3A7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKaW5kZXggNWUxNGQ0NC4uZmYwZjAyYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iJHtnamMuaG9tZX0iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy9zcGkiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMjksNTUgKzI5LDU1IEBACiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0icGFja2FnZTE0Ij4KLSAgICAJCi0gICAgCTxta2RpciBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIvPgotICAgIAkKLQk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIgYmFzZWRpcj0iJHtjbGFzcy5kaXJ9IgorCisgICAgICAgIDxta2RpciBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIvPgorCisgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiIGJhc2VkaXI9IiR7Y2xhc3MuZGlyfSIKICAgICAgICAgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiwgY29tL3N1bi9namMvdXRpbC8qKi8qLCBjb20vc3VuL2dqYy9jb21tb24vKiovKiIgZXhjbHVkZXM9ImNvbS9zdW4vZ2pjL2NjaS8qKi8qLGNvbS9zdW4vZ2pjL3NwaS8xLjQvKiovKiIvPgotICAgICAgICAKKwogICAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2NwLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtY3AueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWNwLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2NwLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS14YS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2NwLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLXhhLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kbS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRtLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kcy54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRzLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxkZWxldGUgZGlyPSIke2dqYy5ob21lfS9kaXN0L2NvbSIvPgotICAgCTxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIi8+Ci0gICAJPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIi8+Ci0gICAJCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxkZWxldGUgZGlyPSIke2dqYy5ob21lfS9kaXN0L2NvbSIvPgorICAgICAgIDxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIi8+CisgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIi8+CisKICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxMyIvPgotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTQsIGJ1aWxkMTMiLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDE0LCBidWlsZDEzIi8+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwKaW5kZXggNjBlMWU0ZS4uNjVlOGZiNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbApAQCAtMjIsNjkgKzIyLDY5IEBACiAgICAgICAgICAgIHZlcnNpb249IjEuNSI+CiAKICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+Ci0gICAgPCEtLSBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhIAorICAgIDwhLS0gVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYQogICAgICAgICAgZGVzY3JpcHRpb24gZm9yIHRoZSByZXNvdXJjZSBhZGFwdGVyLgogICAgIC0tPgogICAgIDxkZXNjcmlwdGlvbj5SZXNvdXJjZSBhZGFwdGVyIHdyYXBwaW5nIERhdGFzb3VyY2UgaW1wbGVtZW50YXRpb24gb2YgZHJpdmVyPC9kZXNjcmlwdGlvbj4KLSAgICAKKwogICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRpc3BsYXktbmFtZSIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+Ci0gICAgPCEtLSBUaGUgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEgbmFtZSB0aGF0IAorICAgIDwhLS0gVGhlIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhIG5hbWUgdGhhdAogICAgICAgICAgaXMgaW50ZW5kZWQgdG8gYmUgZGlzcGxheWVkIGJ5IHRvb2xzLgogICAgIC0tPgogICAgIDxkaXNwbGF5LW5hbWU+RGF0YVNvdXJjZSBSZXNvdXJjZSBBZGFwdGVyPC9kaXNwbGF5LW5hbWU+Ci0gICAgCisKICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJpY29uIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KICAgICA8IS0tIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgPGljb24+Ci0gICAgICAgICAgICBUaGlzICJzbWFsbC1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgCi0gICAgICAgICAgICBhYnNvbHV0ZSBvciB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgc21hbGwgKDE2IHggMTYpIAorICAgICAgICAgICAgVGhpcyAic21hbGwtaWNvbiIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UuIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlCisgICAgICAgICAgICBhYnNvbHV0ZSBvciB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgc21hbGwgKDE2IHggMTYpCiAgICAgICAgICAgICBpY29uIC0gSlBFRyBvciBHSUYgaW1hZ2UuIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgICAgIDxzbWFsbC1pY29uPnNtYWxsaWNvbi5qcGc8L3NtYWxsLWljb24+Ci0gICAgICAgIAotICAgICAgICAgICAgVGhpcyAibGFyZ2UtaWNvbiIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UuIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIAotICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgzMiB4IDMyKSAKKworICAgICAgICAgICAgVGhpcyAibGFyZ2UtaWNvbiIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UuIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlCisgICAgICAgICAgICBhYnNvbHV0ZSBvciB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgc21hbGwgKDMyIHggMzIpCiAgICAgICAgICAgICBpY29uIC0gSlBFRyBvciBHSUYgaW1hZ2UuIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KLSAgICAgICAgICAgIDxsYXJnZS1pY29uPmxhcmdlaWNvbi5qcGc8L2xhcmdlLWljb24+ICAgCisgICAgICAgICAgICA8bGFyZ2UtaWNvbj5sYXJnZWljb24uanBnPC9sYXJnZS1pY29uPgogICAgICAgICA8L2ljb24+CiAgICAgLS0+CiAgICAgPGljb24+CiAgICAgICAgIDxzbWFsbC1pY29uPjwvc21hbGwtaWNvbj4KLSAgICAgICAgPGxhcmdlLWljb24+PC9sYXJnZS1pY29uPiAgIAorICAgICAgICA8bGFyZ2UtaWNvbj48L2xhcmdlLWljb24+CiAgICAgPC9pY29uPgotICAgIAorCiAgICAgPCEtLSBUaGUgInZlbmRvci1uYW1lIiBlbGVtZW50IHNob3VsZCBvY2N1ciBleGFjdGx5IG9uY2UuIC0tPgogICAgIDwhLS0gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgZHJpdmVyIHZlbmRvci4gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICA8dmVuZG9yLW5hbWU+WFlaIElOQy48L3ZlbmRvci1uYW1lPgogICAgIC0tPgogICAgIDx2ZW5kb3ItbmFtZT5TdW4gTWljcm9zeXN0ZW1zPC92ZW5kb3ItbmFtZT4KLSAgICAKKwogICAgIDwhLS0gVGhlICJlaXMtdHlwZSIgZWxlbWVudCBzaG91bGQgb2NjdXIgZXhhY3RseSBvbmNlLiAtLT4KLSAgICA8IS0tIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIGRhdGFiYXNlLCBmb3IgZXhhbXBsZSB0aGUgcHJvZHVjdCBuYW1lIG9mIAorICAgIDwhLS0gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgZGF0YWJhc2UsIGZvciBleGFtcGxlIHRoZSBwcm9kdWN0IG5hbWUgb2YKICAgICAgICAgIHRoZSBkYXRhYmFzZSBpbmRlcGVuZGVudCBvZiBhbnkgdmVyc2lvbiBpbmZvcm1hdGlvbi4gVGhlIGZvbGxvd2luZwogICAgICAgICAgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgPGVpcy10eXBlPlhZWjwvZWlzLXR5cGU+CiAgICAgLS0+CiAgICAgPGVpcy10eXBlPkRhdGFiYXNlPC9laXMtdHlwZT4KLSAgICAKKwogICAgIDwhLS0gVGhlICJyZXNvdXJjZWFkYXB0ZXItdmVyc2lvbiIgZWxlbWVudCBzaG91bGQgb2NjdXIgZXhhY3RseSBvbmNlLiAtLT4KLSAgICA8IS0tIFRoaXMgc3BlY2lmaWVzIGEgc3RyaW5nIGJhc2VkIHZlcnNpb24gb2YgdGhlIHJlc291cmNlIGFkYXB0ZXIgZnJvbSAKKyAgICA8IS0tIFRoaXMgc3BlY2lmaWVzIGEgc3RyaW5nIGJhc2VkIHZlcnNpb24gb2YgdGhlIHJlc291cmNlIGFkYXB0ZXIgZnJvbQogICAgICAgICAgdGhlIGRyaXZlciB2ZW5kb3IuIFRoZSBkZWZhdWx0IGlzIGJlaW5nIHNldCBhcyAxLjAuIFRoZSBkcml2ZXIKICAgICAgICAgIHZlbmRvciBjYW4gY2hhbmdlIGl0IGFzIHJlcXVpcmVkLgogICAgIC0tPgogICAgIDxyZXNvdXJjZWFkYXB0ZXItdmVyc2lvbj4xLjA8L3Jlc291cmNlYWRhcHRlci12ZXJzaW9uPgotICAgIAorCiAgICAgPCEtLSBUaGlzICJsaWNlbnNlIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZSAtLT4KICAgICA8IS0tIFRoaXMgc3BlY2lmaWVzIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgZm9yIHRoZSByZXNvdXJjZSBhZGFwdGVyIG1vZHVsZS4KICAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgPGxpY2Vuc2U+CiAgICAgICAgICAgICBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwLgogICAgICAgICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byAKLSAgICAgICAgICAgICAgICBwcm92aWRlIGEgZGVzY3JpcHRpb24gZm9yIHRoZSBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzIG9mIHRoZSAKLSAgICAgICAgICAgICAgICByZXNvdXJjZSBhZGFwdGVyIGxpa2UgZHVyYXRpb24gb2YgbGljZW5zZSwgbnVtYmVyb2YgY29ubmVjdGlvbiAKKyAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8KKyAgICAgICAgICAgICAgICBwcm92aWRlIGEgZGVzY3JpcHRpb24gZm9yIHRoZSBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzIG9mIHRoZQorICAgICAgICAgICAgICAgIHJlc291cmNlIGFkYXB0ZXIgbGlrZSBkdXJhdGlvbiBvZiBsaWNlbnNlLCBudW1iZXJvZiBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb25zLgogICAgICAgICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgICAgICAgCisKICAgICAgICAgICAgIFRoaXMgc3BlY2lmaWVzIHdoZXRoZXIgYSBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGRlcGxveSBhbmQgdXNlIHRoZSByZXNvdXJjZSBhZGFwdGVyLgogICAgICAgICAgICAgRGVmYXVsdCBpcyBmYWxzZS4KICAgICAgICAgICAgIDxsaWNlbnNlLXJlcXVpcmVkPmZhbHNlPC9saWNlbnNlLXJlcXVpcmVkPgpAQCAtOTMsMjQgKzkzLDI0IEBACiAgICAgPGxpY2Vuc2U+CiAgICAgICAgIDxsaWNlbnNlLXJlcXVpcmVkPmZhbHNlPC9saWNlbnNlLXJlcXVpcmVkPgogICAgIDwvbGljZW5zZT4KLSAgICAKKwogICAgIDxyZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgIAotICAgICAgICA8IS0tIAotICAgICAgICAgICAgVGhlICJjb25maWctcHJvcGVydHkiIGVsZW1lbnRzIGNhbiBoYXZlIHplcm8gb3IgbW9yZSAiZGVzY3JpcHRpb24iIAorCisgICAgICAgIDwhLS0KKyAgICAgICAgICAgIFRoZSAiY29uZmlnLXByb3BlcnR5IiBlbGVtZW50cyBjYW4gaGF2ZSB6ZXJvIG9yIG1vcmUgImRlc2NyaXB0aW9uIgogICAgICAgICAgICAgZWxlbWVudHMuIFRoZSAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGFyZSBub3QgYmVpbmcgaW5jbHVkZWQKICAgICAgICAgICAgIGluIHRoZSAiY29uZmlnLXByb3BlcnR5IiBlbGVtZW50cyBiZWxvdy4gVGhlIGRyaXZlciB2ZW5kb3IgY2FuCiAgICAgICAgICAgICBhZGQgdGhlbSBhcyByZXF1aXJlZC4KICAgICAgICAgLS0+Ci0gICAgICAgIAorCiAgICAgICAgIDxyZXNvdXJjZWFkYXB0ZXItY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLlJlc291cmNlQWRhcHRlcjwvcmVzb3VyY2VhZGFwdGVyLWNsYXNzPgotICAgICAgICAKKwogICAgICAgICA8b3V0Ym91bmQtcmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAKKwogICAgICAgICAgICAgPGNvbm5lY3Rpb24tZGVmaW5pdGlvbj4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxtYW5hZ2VkY29ubmVjdGlvbmZhY3RvcnktY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9tYW5hZ2VkY29ubmVjdGlvbmZhY3RvcnktY2xhc3M+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mIHRoZXNlIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgogICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5TZXJ2ZXJOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KQEAgLTEyMiwxMzYgKzEyMiwxMzYgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjkwOTI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VXNlcjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5EQlVTRVI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+UGFzc3dvcmQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+REJQQVNTV09SRDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5EYXRhYmFzZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+amRiYzpwb2ludGJhc2U6c2VydmVyOi8vbG9jYWxob3N0OjkwOTIvc3FlLXNhbXBsZXMsbmV3PC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkRhdGFTb3VyY2VOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5EZXNjcmlwdGlvbjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5PcmFjbGUgdGhpbiBkcml2ZXIgRGF0YXNvdXJjZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+TmV0d29ya1Byb3RvY29sPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Sb2xlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+TG9naW5UaW1lT3V0PC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RHJpdmVyUHJvcGVydGllczwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RGVsaW1pdGVyPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPiM8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Q2xhc3NOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmNvbS5wb2ludGJhc2UuamRiYy5qZGJjRGF0YVNvdXJjZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgCQk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZmFsc2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uTWV0aG9kPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VHJhbnNhY3Rpb25Jc29sYXRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZmFsc2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25NZXRob2Q8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uVGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VHJhbnNhY3Rpb25Jc29sYXRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5HdWFyYW50ZWVJc29sYXRpb25MZXZlbDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb25mYWN0b3J5LWludGVyZmFjZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29ubmVjdGlvbmZhY3RvcnktaW50ZXJmYWNlPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb25mYWN0b3J5LWltcGwtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2U8L2Nvbm5lY3Rpb25mYWN0b3J5LWltcGwtY2xhc3M+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbi1pbnRlcmZhY2U+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29ubmVjdGlvbi1pbnRlcmZhY2U+Ci0gICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb24taW1wbC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcjwvY29ubmVjdGlvbi1pbXBsLWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8L2Nvbm5lY3Rpb24tZGVmaW5pdGlvbj4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8dHJhbnNhY3Rpb24tc3VwcG9ydD5Mb2NhbFRyYW5zYWN0aW9uPC90cmFuc2FjdGlvbi1zdXBwb3J0PgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxhdXRoZW50aWNhdGlvbi1tZWNoYW5pc20+CiAgICAgICAgICAgICAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgogICAgICAgICAgICAgICAgIDwhLS0gTm90IGluY2x1ZGluZyB0aGUgImRlc2NyaXB0aW9uIiBlbGVtZW50IC0tPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGF1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbS10eXBlPkJhc2ljUGFzc3dvcmQ8L2F1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbS10eXBlPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNyZWRlbnRpYWwtaW50ZXJmYWNlPmphdmF4LnJlc291cmNlLnNwaS5zZWN1cml0eS5QYXNzd29yZENyZWRlbnRpYWw8L2NyZWRlbnRpYWwtaW50ZXJmYWNlPgogICAgICAgICAgICAgPC9hdXRoZW50aWNhdGlvbi1tZWNoYW5pc20+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPHJlYXV0aGVudGljYXRpb24tc3VwcG9ydD5mYWxzZTwvcmVhdXRoZW50aWNhdGlvbi1zdXBwb3J0PgotICAgICAgICAgICAgCisKICAgICAgICAgPC9vdXRib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0JPGFkbWlub2JqZWN0PgotCSAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgotCSAgICAgICA8YWRtaW5vYmplY3QtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluSW1wbDwvYWRtaW5vYmplY3QtY2xhc3M+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlNjaGVtYU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Sm5kaU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Tm9PZlJvd3M8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5JbnRlZ2VyPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICA8YWRtaW5vYmplY3Q+CisgICAgICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluPC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+CisgICAgICAgICAgIDxhZG1pbm9iamVjdC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW5JbXBsPC9hZG1pbm9iamVjdC1jbGFzcz4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+U2NoZW1hTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5KbmRpTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Ob09mUm93czwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLkludGVnZXI8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4wPC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8L2FkbWlub2JqZWN0PgotICAgICAgICAKKwogICAgIDwvcmVzb3VyY2VhZGFwdGVyPgotICAgIAorCiA8L2Nvbm5lY3Rvcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQppbmRleCBiMjE5Y2QyLi4xMjQ4MDljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCkBAIC0yNCwyNiArMjQsMjYgQEAKIC8qKgogICogQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMQotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzEKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0aW9uTWFuYWdlciBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyeyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uTWFuYWdlciBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyewogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhIDxjb2RlPkNvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QgdG8gdGhlIDxjb2RlPkNvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0JaW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcmV0dXJuCUEgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvciBpbiBnZXR0aW5nIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gICAgbWNmICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBpbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgQSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBPYmplY3QuCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yIGluIGdldHRpbmcgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+LgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgYWxsb2NhdGVDb25uZWN0aW9uKE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsCi0gICAgCQkJCSAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8pIAotICAgIAkJCQkgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0JTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBtY2YuY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgaW5mbyk7Ci0JcmV0dXJuIG1jLmdldENvbm5lY3Rpb24obnVsbCwgaW5mbyk7ICAgIAkJCQkgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKQorICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CisgICAgTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBtY2YuY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgaW5mbyk7CisgICAgcmV0dXJuIG1jLmdldENvbm5lY3Rpb24obnVsbCwgaW5mbyk7CiAgICAgfQotICAgIAorCiAgICAgLyoKICAgICAgKiBUaGlzIGNsYXNzIGNvdWxkIGVmZmVjdGl2ZWx5IGltcGxlbWVudCBDb25uZWN0aW9uIHBvb2xpbmcgYWxzby4KICAgICAgKiBDb3VsZCBiZSBkb25lIGZvciBGQ1MuCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQppbmRleCAzOWM3ODc2Li5jNDc3ZmMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEKQEAgLTE5LDEwICsxOSwxMCBAQAogLyoqCiAgKiBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMQotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzEKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm97IAorcHVibGljIGNsYXNzIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mb3sKIAogICAgIHByaXZhdGUgU3RyaW5nIHVzZXI7CiAgICAgcHJpdmF0ZSBTdHJpbmcgcGFzc3dvcmQ7CkBAIC0zMCw4ICszMCw4IEBACiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0cyBhIG5ldyA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdAogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJVXNlciBOYW1lLgotICAgICAqIEBwYXJhbQlwYXNzd29yZAlQYXNzd29yZAorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIFVzZXIgTmFtZS4KKyAgICAgKiBAcGFyYW0gICAgcGFzc3dvcmQgICAgUGFzc3dvcmQKICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvblJlcXVlc3RJbmZvKFN0cmluZyB1c2VyLCBTdHJpbmcgcGFzc3dvcmQpIHsKICAgICAgICAgdGhpcy51c2VyID0gdXNlcjsKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgbmFtZSBvZiB0aGUgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqCi0gICAgICogQHJldHVybglVc2VyIG5hbWUgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgorICAgICAqIEByZXR1cm4gICAgVXNlciBuYW1lIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXIoKSB7CiAgICAgICAgIHJldHVybiB1c2VyOwpAQCAtNTAsNyArNTAsNyBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgcGFzc3dvcmQgb2YgdGhlIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKgotICAgICAqIEByZXR1cm4JUGFzc3dvcmQgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgorICAgICAqIEByZXR1cm4gICAgUGFzc3dvcmQgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFzc3dvcmQoKSB7CiAgICAgICAgIHJldHVybiBwYXNzd29yZDsKQEAgLTU5LDcgKzU5LDcgQEAKICAgICAvKioKICAgICAgKiBWZXJpZnkgd2hldGhlciB0d28gQ29ubmVjdGlvblJlcXVlc3RJbmZvcyBhcmUgZXF1YWwuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVRydWUsIGlmIHRoZXkgYXJlIGVxdWFsIGFuZCBmYWxzZSBvdGhlcndpc2UuCisgICAgICogQHJldHVybiAgICBUcnVlLCBpZiB0aGV5IGFyZSBlcXVhbCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7CiAgICAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwpAQCAtNzUsMTggKzc1LDE4IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBoYXNoY29kZSBvZiB0aGUgb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybgloYXNoQ29kZS4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2hDb2RlLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CiAgICAgICAgIFN0cmluZyByZXN1bHQgPSAiIiArIHVzZXIgKyBwYXNzd29yZDsKICAgICAgICAgcmV0dXJuIHJlc3VsdC5oYXNoQ29kZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbXBhcmVzIHR3byBvYmplY3RzLgogICAgICAqCi0gICAgICogQHBhcmFtCW8xCUZpcnN0IG9iamVjdC4KLSAgICAgKiBAcGFyYW0JbzIJU2Vjb25kIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgbzEgICAgRmlyc3Qgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvMiAgICBTZWNvbmQgb2JqZWN0LgogICAgICAqLwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKE9iamVjdCBvMSwgT2JqZWN0IG8yKSB7CiAgICAgICAgIGlmIChvMSA9PSBudWxsKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKaW5kZXggNDExYjczZi4uZDk4NzRhMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtMzEsMzYgKzMxLDM2IEBACiAvKioKICAqIERhdGEgU291cmNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMAotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzAKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIAogcHVibGljIGNsYXNzIERTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGV4dGVuZHMgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHsKLSAgIAorCiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgamF2YXguc3FsLkRhdGFTb3VyY2UgZGF0YVNvdXJjZU9iajsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CiAgICAgfQogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIEVJUyByZXNvdXJjZQogICAgICAqIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCi0gICAgICogICAgICAgCSAgICAgICAgICAgICAJYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+Ci0gICAgICogICAgICAgCSAgICAgICAgICAgICAJb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQotICAgICAqICAgICAgIAkJCQljcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0Ci0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdCAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwKICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC02OCw1NSArNjgsNTUgQEAKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGMgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLCBzdWJqZWN0LCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoZGF0YVNvdXJjZU9iaiA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZihkc09iakJ1aWxkZXIgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGRzT2JqQnVpbGRlciA9IG5ldyBEYXRhU291cmNlT2JqZWN0QnVpbGRlcihzcGVjKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZU9iaiA9IChqYXZheC5zcWwuRGF0YVNvdXJjZSkgZHNPYmpCdWlsZGVyLmNvbnN0cnVjdERhdGFTb3VyY2VPYmplY3QoKTsKICAgICAgICAgICAgIH0gY2F0Y2goQ2xhc3NDYXN0RXhjZXB0aW9uIGNjZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY2NlIiwgY2NlKTsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NjZSIsIGNjZSk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2UuUmVzb3VyY2VFeGNlcHRpb24oY2NlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkc0Nvbm4gPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewotCSAgICAvKiBGb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIvcGFzc3dkIG9mIHRoZSBjb25uZWN0aW9uIHBvb2wgaXMKLQkgICAgICogZXF1YWwgdG8gdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdAotCSAgICAgKiBnZXQgYSBjb25uZWN0aW9uIGZyb20gdGhpcyBwb29sIGRpcmVjdGx5LgotCSAgICAgKiBmb3IgYWxsIG90aGVyIGNvbmRpdGlvbnMgZ28gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24KLQkgICAgICovCi0JICAgIGlmICggaXNFcXVhbCggcGMsIGdldFVzZXIoKSwgZ2V0UGFzc3dvcmQoKSApICkgewotCSAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24ocGMuZ2V0VXNlck5hbWUoKSwgCi0JCSAgICBuZXcgU3RyaW5nKHBjLmdldFBhc3N3b3JkKCkpKTsKLQkgICAgfQorICAgICAgICAvKiBGb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIvcGFzc3dkIG9mIHRoZSBjb25uZWN0aW9uIHBvb2wgaXMKKyAgICAgICAgICogZXF1YWwgdG8gdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdAorICAgICAgICAgKiBnZXQgYSBjb25uZWN0aW9uIGZyb20gdGhpcyBwb29sIGRpcmVjdGx5LgorICAgICAgICAgKiBmb3IgYWxsIG90aGVyIGNvbmRpdGlvbnMgZ28gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24KKyAgICAgICAgICovCisgICAgICAgIGlmICggaXNFcXVhbCggcGMsIGdldFVzZXIoKSwgZ2V0UGFzc3dvcmQoKSApICkgeworICAgICAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24ocGMuZ2V0VXNlck5hbWUoKSwKKyAgICAgICAgICAgIG5ldyBTdHJpbmcocGMuZ2V0UGFzc3dvcmQoKSkpOworICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2NyZWF0ZV9jb25uIiwgc3FsZSk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBjb3VsZCBub3QgYmUgYWxsb2NhdGVkOiAiICsgCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19jcmVhdGVfY29ubiIsIHNxbGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGFsbG9jYXRlZDogIiArCiAgICAgICAgICAgICAgICAgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgZHNDb25uLCBwYywgdGhpcyk7CiAgICAgICAgIC8vR0pDSU5UCiAgICAgICAgIHNldElzb2xhdGlvbihtYyk7CiAgICAgICAgIGlzVmFsaWQobWMpOwogICAgICAgICByZXR1cm4gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvIAorICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0bwogICAgICAqIGFub3RoZXIgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jb3RoZXIJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCi0gICAgICoJCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIG90aGVyICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCisgICAgICogICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTEyNyw0MDkgKzEyNyw0MDkgQEAKICAgICAgICAgICogaWYgYW5kIG9ubHkgaWYgdGhlaXIgcHJvcGVydGllcyBhcmUgdGhlIHNhbWUuCiAgICAgICAgICAqLwogICAgICAgICBpZihvdGhlciBpbnN0YW5jZW9mIGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSkgewotICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG90aGVyTUNGID0gCisgICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnkgb3RoZXJNQ0YgPQogICAgICAgICAgICAgICAgIChjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpIG90aGVyOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BlYy5lcXVhbHMob3RoZXJNQ0Yuc3BlYyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlcnZlck5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc2VydmVyTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHNlcnZlck5hbWUoU3RyaW5nIHNlcnZlck5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSwgc2VydmVyTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXNlcnZlck5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBzZXJ2ZXJOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0c2VydmVyTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlcnZlck5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc2VydmVyTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFNlcnZlck5hbWUoU3RyaW5nIHNlcnZlck5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSwgc2VydmVyTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXNlcnZlck5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBzZXJ2ZXJOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvcnROdW1iZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcG9ydE51bWJlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHBvcnROdW1iZXIoU3RyaW5nIHBvcnROdW1iZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiwgcG9ydE51bWJlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBvcnROdW1iZXIKLSAgICAgKiBAc2VlCTxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBwb3J0TnVtYmVyCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0cG9ydE51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvcnROdW1iZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcG9ydE51bWJlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFBvcnROdW1iZXIoU3RyaW5nIHBvcnROdW1iZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiwgcG9ydE51bWJlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBvcnROdW1iZXIKLSAgICAgKiBAc2VlCTxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBwb3J0TnVtYmVyCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UG9ydE51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGF0YWJhc2VOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGF0YWJhc2VOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkYXRhYmFzZU5hbWUoU3RyaW5nIGRhdGFiYXNlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUsIGRhdGFiYXNlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGF0YWJhc2VOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkYXRhYmFzZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRhdGFiYXNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkYXRhYmFzZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkYXRhYmFzZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERhdGFiYXNlTmFtZShTdHJpbmcgZGF0YWJhc2VOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSwgZGF0YWJhc2VOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkYXRhYmFzZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRhdGFiYXNlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGF0YWJhc2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRhdGFTb3VyY2VOYW1lKFN0cmluZyBkc24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUsIGRzbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHNuCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRzbgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkYXRhU291cmNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERhdGFTb3VyY2VOYW1lKFN0cmluZyBkc24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUsIGRzbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHNuCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRzbgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREYXRhU291cmNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZXNjCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZXNjICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRlc2NyaXB0aW9uKFN0cmluZyBkZXNjKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OLCBkZXNjKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVzYwotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZXNjCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRlc2NyaXB0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlc2MJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlc2MgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2MpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04sIGRlc2MpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglkZXNjCi0gICAgICogQHNlZQk8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlc2MKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlud1Byb3RvY29sCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbndQcm90b2NvbCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0bmV0d29ya1Byb3RvY29sKFN0cmluZyBud1Byb3RvY29sKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCwgbndQcm90b2NvbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbndQcm90b2NvbAotICAgICAqIEBzZWUJPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbndQcm90b2NvbAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0bmV0d29ya1Byb3RvY29sKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHBhcmFtCW53UHJvdG9jb2wJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBud1Byb3RvY29sICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrUHJvdG9jb2woU3RyaW5nIG53UHJvdG9jb2wpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MLCBud1Byb3RvY29sKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHJldHVybglud1Byb3RvY29sCi0gICAgICogQHNlZQk8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHJldHVybiAgICBud1Byb3RvY29sCisgICAgICogQHNlZSAgICA8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXROZXR3b3JrUHJvdG9jb2woKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlyb2xlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcm9sZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0cm9sZU5hbWUoU3RyaW5nIHJvbGVOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FLCByb2xlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglyb2xlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICByb2xlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRyb2xlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jcm9sZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJvbGVOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJvbGVOYW1lKFN0cmluZyByb2xlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSwgcm9sZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jcm9sZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcm9sZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Um9sZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSk7CiAgICAgfQogCi0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHBhcmFtCWxvZ2luVGltZU91dAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZU91dCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0bG9naW5UaW1lT3V0KFN0cmluZyBsb2dpblRpbWVPdXQpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VULCBsb2dpblRpbWVPdXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWxvZ2luVGltZW91dAotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbG9naW5UaW1lb3V0CisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRsb2dpblRpbWVPdXQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lT3V0CTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lT3V0ICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dpblRpbWVPdXQoU3RyaW5nIGxvZ2luVGltZU91dCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQsIGxvZ2luVGltZU91dCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbG9naW5UaW1lb3V0Ci0gICAgICogQHNlZQk8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHJldHVybiAgICBsb2dpblRpbWVvdXQKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldExvZ2luVGltZU91dCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlbGltCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVsaW0gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRlbGltaXRlcihTdHJpbmcgZGVsaW0pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSLCBkZWxpbSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHJldHVybglkZWxpbQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVsaW0KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRlbGltaXRlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlbGltCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVsaW0gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlbGltaXRlcihTdHJpbmcgZGVsaW0pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSLCBkZWxpbSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHJldHVybglkZWxpbQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVsaW0KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlbGltaXRlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHJpdmVyUHJvcHMJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHJpdmVyUHJvcHMgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkcml2ZXJQcm9wZXJ0aWVzKFN0cmluZyBkcml2ZXJQcm9wcykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTLCBkcml2ZXJQcm9wcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRyaXZlclByb3BzCi0gICAgICogQHNlZQk8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHJpdmVyUHJvcHMKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkcml2ZXJQcm9wZXJ0aWVzKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHJpdmVyUHJvcHMJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHJpdmVyUHJvcHMgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREcml2ZXJQcm9wZXJ0aWVzKFN0cmluZyBkcml2ZXJQcm9wcykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTLCBkcml2ZXJQcm9wcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRyaXZlclByb3BzCi0gICAgICogQHNlZQk8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHJpdmVyUHJvcHMKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREcml2ZXJQcm9wZXJ0aWVzKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7CkBAIC01MzksMzUgKzUzOSwzNSBAQAogICAgICAqIENoZWNrIGlmIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgcGFzc2VkIGZvciB0aGlzIGdldCBjb25uZWN0aW9uCiAgICAgICogcmVxdWVzdCBpcyBlcXVhbCB0byB0aGUgdXNlci9wYXNzd2Qgb2YgdGhpcyBjb25uZWN0aW9uIHBvb2wuCiAgICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoIFBhc3N3b3JkQ3JlZGVudGlhbCBwYywgU3RyaW5nIHVzZXIsIAorICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKCBQYXNzd29yZENyZWRlbnRpYWwgcGMsIFN0cmluZyB1c2VyLAogICAgICAgICBTdHJpbmcgcGFzc3dvcmQpIHsKLSAgICAgICAgCi0JLy9pZiBlcXVhbCBnZXQgZGlyZWN0IGNvbm5lY3Rpb24gZWxzZSAKLQkvL2dldCBjb25uZWN0aW9uIHdpdGggdXNlciBhbmQgcGFzc3dvcmQuCi0JCi0JaWYgKHVzZXIgPT0gbnVsbCAmJiBwYyA9PSBudWxsKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0KLQkKLQlpZiAoIHVzZXIgPT0gbnVsbCAmJiBwYyAhPSBudWxsICkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCX0KIAotCWlmKCBwYyA9PSBudWxsICkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JaWYgKCB1c2VyLmVxdWFscyggcGMuZ2V0VXNlck5hbWUoKSApICkgewotCSAgICBpZiAoIHBhc3N3b3JkID09IG51bGwgJiYgcGMuZ2V0UGFzc3dvcmQoKSA9PSBudWxsICkgewotCSAgICAgICAgcmV0dXJuIHRydWU7Ci0JICAgIH0KLQl9Ci0JCi0JaWYgKCB1c2VyLmVxdWFscyhwYy5nZXRVc2VyTmFtZSgpKSAmJiBwYXNzd29yZC5lcXVhbHMocGMuZ2V0UGFzc3dvcmQoKSkgKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0gCi0JCi0gICAgICAgIAotCXJldHVybiBmYWxzZTsKKyAgICAvL2lmIGVxdWFsIGdldCBkaXJlY3QgY29ubmVjdGlvbiBlbHNlCisgICAgLy9nZXQgY29ubmVjdGlvbiB3aXRoIHVzZXIgYW5kIHBhc3N3b3JkLgorCisgICAgaWYgKHVzZXIgPT0gbnVsbCAmJiBwYyA9PSBudWxsKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICggdXNlciA9PSBudWxsICYmIHBjICE9IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYoIHBjID09IG51bGwgKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICggdXNlci5lcXVhbHMoIHBjLmdldFVzZXJOYW1lKCkgKSApIHsKKyAgICAgICAgaWYgKCBwYXNzd29yZCA9PSBudWxsICYmIHBjLmdldFBhc3N3b3JkKCkgPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCB1c2VyLmVxdWFscyhwYy5nZXRVc2VyTmFtZSgpKSAmJiBwYXNzd29yZC5lcXVhbHMocGMuZ2V0UGFzc3dvcmQoKSkgKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworCisgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKaW5kZXggMjA2ODQzMC4uNzM5ZmY0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKQEAgLTI4LDIyICsyOCwyMiBAQAogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKIC8qKgotICogSG9sZHMgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCwgd2hpY2ggaXMgdG8gYmUgCisgKiBIb2xkcyB0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LCB3aGljaCBpcyB0byBiZQogICogcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCiBwdWJsaWMgY2xhc3MgRGF0YVNvdXJjZSBpbXBsZW1lbnRzIGphdmF4LnNxbC5EYXRhU291cmNlLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSwKLQkJY29tLnN1bi5hcHBzZXJ2LmpkYmNyYS5EYXRhU291cmNlLCBqYWthcnRhLnJlc291cmNlLlJlZmVyZW5jZWFibGV7IAotCQkJCSAgIAorICAgICAgICBjb20uc3VuLmFwcHNlcnYuamRiY3JhLkRhdGFTb3VyY2UsIGpha2FydGEucmVzb3VyY2UuUmVmZXJlbmNlYWJsZXsKKwogICAgIHByaXZhdGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZjsKLSAgICBwcml2YXRlIENvbm5lY3Rpb25NYW5hZ2VyIGNtOwkJCQkgICAJCQkJICAgCisgICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsKICAgICBwcml2YXRlIGludCBsb2dpblRpbWVvdXQ7CiAgICAgcHJpdmF0ZSBQcmludFdyaXRlciBsb2dXcml0ZXI7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CQkJCSAgIAorICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwogICAgIHByaXZhdGUgUmVmZXJlbmNlIHJlZmVyZW5jZTsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC01MSw1NyArNTEsNTcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKIAogICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0LiBUaGlzIGlzIGNyZWF0ZWQgYnkgdGhlIAorICAgICAqIENvbnN0cnVjdHMgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0LiBUaGlzIGlzIGNyZWF0ZWQgYnkgdGhlCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IAotICAgICAqCQkJY3JlYXRpbmcgdGhpcyBvYmplY3QuCi0gICAgICogQHBhcmFtCWNtCTxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBvYmplY3QgZWl0aGVyIGFzc29jaWF0ZWQKLSAgICAgKgkJCXdpdGggQXBwbGljYXRpb24gc2VydmVyIG9yIFJlc291cmNlIEFkYXB0ZXIuCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgY3JlYXRpbmcgdGhpcyBvYmplY3QuCisgICAgICogQHBhcmFtICAgIGNtICAgIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBvYmplY3QgZWl0aGVyIGFzc29jaWF0ZWQKKyAgICAgKiAgICAgICAgICAgIHdpdGggQXBwbGljYXRpb24gc2VydmVyIG9yIFJlc291cmNlIEFkYXB0ZXIuCiAgICAgICovCiAgICAgcHVibGljIERhdGFTb3VyY2UgKE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsIENvbm5lY3Rpb25NYW5hZ2VyIGNtKSB7Ci0gICAgCXRoaXMubWNmID0gbWNmOwotICAgIAlpZiAoY20gPT0gbnVsbCkgewotICAgIAkgICAgdGhpcy5jbSA9IChDb25uZWN0aW9uTWFuYWdlcikgbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uTWFuYWdlcigpOwotICAgIAl9IGVsc2UgewotICAgIAkgICAgdGhpcy5jbSA9IGNtOwotICAgIAl9ICAgIAkKLSAgICB9ICAgCi0gICAgCisgICAgICAgIHRoaXMubWNmID0gbWNmOworICAgICAgICBpZiAoY20gPT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5jbSA9IChDb25uZWN0aW9uTWFuYWdlcikgbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uTWFuYWdlcigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5jbSA9IGNtOworICAgICAgICB9CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuCTxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuICAgICAgCisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbigpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAl0cnkgewotICAgIAkgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLG51bGwpOyAgICAJICAgIAotICAgIAl9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLG51bGwpOworICAgICAgICB9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewogLy8gVGhpcyBpcyB0ZW1wb3JhcnkuIFRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byBTRVZFUkUgYWZ0ZXIgVFAKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCX0KKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIAotICAgICAqIEBwYXJhbQl1c2VyCVVzZXIgbmFtZSBmb3IgdGhlIENvbm5lY3Rpb24uCi0gICAgICogQHBhcmFtCXB3ZAlQYXNzd29yZCBmb3IgdGhlIENvbm5lY3Rpb24uCi0gICAgICogQHJldHVybgk8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLiAgICAgIAorICAgICAqCisgICAgICogQHBhcmFtICAgIHVzZXIgICAgVXNlciBuYW1lIGZvciB0aGUgQ29ubmVjdGlvbi4KKyAgICAgKiBAcGFyYW0gICAgcHdkICAgIFBhc3N3b3JkIGZvciB0aGUgQ29ubmVjdGlvbi4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbihTdHJpbmcgdXNlciwgU3RyaW5nIHB3ZCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXRyeSB7Ci0gICAgCSAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbyA9IG5ldyBDb25uZWN0aW9uUmVxdWVzdEluZm8gKHVzZXIsIHB3ZCk7Ci0gICAgCSAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsaW5mbyk7Ci0gICAgCX0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbyA9IG5ldyBDb25uZWN0aW9uUmVxdWVzdEluZm8gKHVzZXIsIHB3ZCk7CisgICAgICAgICAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsaW5mbyk7CisgICAgICAgIH0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CiAvLyBUaGlzIGlzIHRlbXBvcmFyeS4gVGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIFNFVkVSRSBhZnRlciBUUAotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJfQotICAgIH0gICAgCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIKQEAgLTExNCw5MSArMTE0LDkxIEBACiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbihDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAKLSAgICAgICAgQ29ubmVjdGlvbiBkcml2ZXJDb24gPSBjb247IAorICAgICAgICBDb25uZWN0aW9uIGRyaXZlckNvbiA9IGNvbjsKICAgICAgICAgaWYgKGNvbiBpbnN0YW5jZW9mIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSB7Ci0gICAgICAgICAgIGRyaXZlckNvbiA9ICgoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIGNvbikuZ2V0Q29ubmVjdGlvbigpOyAKLSAgICAgICAgfSAKKyAgICAgICAgICAgZHJpdmVyQ29uID0gKChjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgY29uKS5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gZHJpdmVyQ29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9naW4gdGltZW91dAogICAgICAqCiAgICAgICogQHJldHVybiBsb2dpbiB0aW1lb3V0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0TG9naW5UaW1lb3V0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJcmV0dXJuCWxvZ2luVGltZW91dDsKKyAgICAgICAgcmV0dXJuICAgIGxvZ2luVGltZW91dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZ2luIHRpbWVvdXQKICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVvdXQJTG9naW4gdGltZW91dC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lb3V0ICAgIExvZ2luIHRpbWVvdXQuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9naW5UaW1lb3V0KGludCBsb2dpblRpbWVvdXQpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXRoaXMubG9naW5UaW1lb3V0ID0gbG9naW5UaW1lb3V0OworICAgICAgICB0aGlzLmxvZ2luVGltZW91dCA9IGxvZ2luVGltZW91dDsKICAgICB9Ci0gICAgCi0gICAgLyoqIAorCisgICAgLyoqCiAgICAgICogR2V0IHRoZSBsb2d3cml0ZXIgb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT4gUHJpbnRXcml0ZXIgPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIFByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXJldHVybglsb2dXcml0ZXI7CisgICAgICAgIHJldHVybiAgICBsb2dXcml0ZXI7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9nd3JpdGVyIG9uIHRoaXMgb2JqZWN0LgogICAgICAqCiAgICAgICogQHBhcmFtIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKFByaW50V3JpdGVyIGxvZ1dyaXRlcikgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7Ci0gICAgfSAgICAgICAgCi0gICAgICAgIAorICAgICAgICB0aGlzLmxvZ1dyaXRlciA9IGxvZ1dyaXRlcjsKKyAgICB9CisKICAgICBwdWJsaWMgTG9nZ2VyIGdldFBhcmVudExvZ2dlcigpIHRocm93cyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBmZWF0dXJlLiIpOwogICAgIH0KICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KKyAgICAgKiBAcmV0dXJuICAgIERlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7Ci0gICAgCXJldHVybiBkZXNjcmlwdGlvbjsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKICAgICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2NyaXB0aW9uKSB7Ci0gICAgCXRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgICB9ICAgIAotICAgIAorICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgfQorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSByZWZlcmVuY2UuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIDxjb2RlPlJlZmVyZW5jZTwvY29kZT5vYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIFJlZmVyZW5jZSBnZXRSZWZlcmVuY2UoKSB7Ci0gICAgCXJldHVybiByZWZlcmVuY2U7CisgICAgICAgIHJldHVybiByZWZlcmVuY2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSByZWZlcmVuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVmZXJlbmNlIDxjb2RlPlJlZmVyZW5jZTwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICByZWZlcmVuY2UgPGNvZGU+UmVmZXJlbmNlPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlKFJlZmVyZW5jZSByZWZlcmVuY2UpIHsKLSAgICAJdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7CisgICAgICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOwogICAgIH0KIAogICAgIHB1YmxpYyA8VD4gVCB1bndyYXAoQ2xhc3M8VD4gaWZhY2UpIHRocm93cyBTUUxFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCmluZGV4IDU3NGVkNjYuLmJlYzBkNmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKQEAgLTE4LDEzICsxOCwxMyBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEpkYmNTZXR1cEFkbWluIHsKIAotICAgIHB1YmxpYyB2b2lkIHNldFRhYmxlTmFtZShTdHJpbmcgZGIpOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRUYWJsZU5hbWUoU3RyaW5nIGRiKTsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFibGVOYW1lKCk7CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRKbmRpTmFtZShTdHJpbmcgbmFtZSk7IAorICAgIHB1YmxpYyB2b2lkIHNldEpuZGlOYW1lKFN0cmluZyBuYW1lKTsKIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Sm5kaU5hbWUoKTsgCisgICAgcHVibGljIFN0cmluZyBnZXRKbmRpTmFtZSgpOwogCiAgICAgcHVibGljIHZvaWQgc2V0U2NoZW1hTmFtZShTdHJpbmcgbmFtZSk7CiAKQEAgLTM0LDYgKzM0LDYgQEAKIAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldE5vT2ZSb3dzKCk7CiAKLSAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCk7IAorICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2V0dXAoKTsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKaW5kZXggM2JkN2NhZC4uZmVjNzQ0MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhCkBAIC02NSwxMSArNjUsMTEgQEAKIAogcHJpdmF0ZSB2b2lkIHByaW50SGllcmFyY2h5KENsYXNzTG9hZGVyIGNsLCBpbnQgY250KXsKIHdoaWxlKGNsICE9IG51bGwpIHsKLQlmb3IoaW50IGkgPTA7IGkgPCBjbnQ7IGkrKykgCi0JCVN5c3RlbS5vdXQucHJpbnQoIiAiICk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgOiIgKyBjbCk7Ci0JY2wgPSBjbC5nZXRQYXJlbnQoKTsKLQljbnQgKz0gMzsKKyAgICBmb3IoaW50IGkgPTA7IGkgPCBjbnQ7IGkrKykKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICIgKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCA6IiArIGNsKTsKKyAgICBjbCA9IGNsLmdldFBhcmVudCgpOworICAgIGNudCArPSAzOwogfQogfQogCkBAIC03OCwxMCArNzgsMTAgQEAKICAgICAgICAgZm9yKGludCBpID0wOyBpIDwgY250OyBpKyspCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICIgKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgb2YgQ2xhc3NMb2FkZXIgMSA6IiArIGNsMSk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgb2YgQ2xhc3NMb2FkZXIgMiA6IiArIGNsMik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJFUVVBTFMgOiAiICsgKGNsMSA9PSBjbDIpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCBvZiBDbGFzc0xvYWRlciAyIDoiICsgY2wyKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVRVUFMUyA6ICIgKyAoY2wxID09IGNsMikpOwogICAgICAgICBjbDEgPSBjbDEuZ2V0UGFyZW50KCk7Ci0JY2wyID0gY2wyLmdldFBhcmVudCgpOworICAgIGNsMiA9IGNsMi5nZXRQYXJlbnQoKTsKICAgICAgICAgY250ICs9IDM7CiB9CiB9CkBAIC05MCw5MyArOTAsOTMgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCl7CiAKICAgICAgICAgaWYgKGpuZGlOYW1lPT0gbnVsbCB8fCBqbmRpTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgICAgICBpZiAodGFibGVOYW1lPT0gbnVsbCB8fCB0YWJsZU5hbWUudHJpbSgpLmVxdWFscygiIikpIHsKLQkgICByZXR1cm4gZmFsc2U7Ci0JfQorICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwotCVN0YXRlbWVudCBzID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMgPSBudWxsOwotCWJvb2xlYW4gYiA9IGZhbHNlOworICAgIFN0YXRlbWVudCBzID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMgPSBudWxsOworICAgIGJvb2xlYW4gYiA9IGZhbHNlOwogICAgICAgICB0cnkgewotCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCS8vZGVidWcKLQlDbGFzcyBjbHogPSBEYXRhU291cmNlLmNsYXNzOworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIC8vZGVidWcKKyAgICBDbGFzcyBjbHogPSBEYXRhU291cmNlLmNsYXNzOwogLyoKLQlpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiRGF0YVNvdXJjZSdzIGNsYXN4cyA6ICIgKyAgY2x6LmdldE5hbWUoKSArICAiIGNsYXNzbG9hZGVyICIgKyBjbHouZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0JCXByaW50SGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKLQl9Ci0JQ2xhc3MgY2xzID0gaWMubG9va3VwKGpuZGlOYW1lKS5nZXRDbGFzcygpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGNsYXNzJ3MgOiAiICsgY2xzLmdldFBhY2thZ2UoKSArICI6IiArIGNscy5nZXROYW1lKCkgICsgIiBjbGFzc2xvYWRlciAiICArIGNscy5nZXRDbGFzc0xvYWRlcigpKTsKLQlwcmludEhpZXJhcmNoeShjbHMuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7CisgICAgaWYoY2x6LmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRhdGFTb3VyY2UncyBjbGFzeHMgOiAiICsgIGNsei5nZXROYW1lKCkgKyAgIiBjbGFzc2xvYWRlciAiICsgY2x6LmdldENsYXNzTG9hZGVyKCkpOworICAgICAgICBwcmludEhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7CisgICAgfQorICAgIENsYXNzIGNscyA9IGljLmxvb2t1cChqbmRpTmFtZSkuZ2V0Q2xhc3MoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBjbGFzcydzIDogIiArIGNscy5nZXRQYWNrYWdlKCkgKyAiOiIgKyBjbHMuZ2V0TmFtZSgpICArICIgY2xhc3Nsb2FkZXIgIiAgKyBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSk7CisgICAgcHJpbnRIaWVyYXJjaHkoY2xzLmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2xvYWRlcnMgZXF1YWwgPyAiICsgIChjbHouZ2V0Q2xhc3NMb2FkZXIoKSA9PSBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSkpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiJiomKiYqJiogQ29tcGFyaW5nIEhpZXJhY2h5IERhdGFTb3VyY2UgdnMgbG9va2VkdXAiKTsKLQlpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7Ci0JCWNvbXBhcmVIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCksIGNscy5nZXRDbGFzc0xvYWRlcigpLCA4KTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2xvYWRlcnMgZXF1YWwgPyAiICsgIChjbHouZ2V0Q2xhc3NMb2FkZXIoKSA9PSBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiJiomKiYqJiogQ29tcGFyaW5nIEhpZXJhY2h5IERhdGFTb3VyY2UgdnMgbG9va2VkdXAiKTsKKyAgICBpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7CisgICAgICAgIGNvbXBhcmVIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCksIGNscy5nZXRDbGFzc0xvYWRlcigpLCA4KTsKKyAgICB9CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBsb29rdXAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBsb29rdXAiKTsKICovCi0JT2JqZWN0IG8gPSBpYy5sb29rdXAoam5kaU5hbWUpOwotLy8JU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBsb29rdXAgbG9va3VwIik7CisgICAgT2JqZWN0IG8gPSBpYy5sb29rdXAoam5kaU5hbWUpOworLy8gICAgU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBsb29rdXAgbG9va3VwIik7CiAKLQkgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKW8gOworICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpbyA7CiAvKgotCVN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgY2FzdCIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLSBUcnlpbmcgb3VyIFN0dWZmICEhISIpOwotCXRyeSB7Ci0JCUNsYXNzIG8xID0gKENsYXNzLmZvck5hbWUoImNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIikpOwotCQlDbGFzc0xvYWRlciBjbDEgPSBvMS5nZXRDbGFzc0xvYWRlcigpOwotCQlDbGFzc0xvYWRlciBjbDIgPSBEYXRhU291cmNlLmNsYXNzLmdldENsYXNzTG9hZGVyKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2wxID09IENsMiIgKyAoY2wxID09IGNsMikpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzZXMgZXF1YWwiICsgKERhdGFTb3VyY2UuY2xhc3MgPT0gbzEpKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgY2FzdCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLSBUcnlpbmcgb3VyIFN0dWZmICEhISIpOworICAgIHRyeSB7CisgICAgICAgIENsYXNzIG8xID0gKENsYXNzLmZvck5hbWUoImNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIikpOworICAgICAgICBDbGFzc0xvYWRlciBjbDEgPSBvMS5nZXRDbGFzc0xvYWRlcigpOworICAgICAgICBDbGFzc0xvYWRlciBjbDIgPSBEYXRhU291cmNlLmNsYXNzLmdldENsYXNzTG9hZGVyKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2wxID09IENsMiIgKyAoY2wxID09IGNsMikpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzZXMgZXF1YWwiICsgKERhdGFTb3VyY2UuY2xhc3MgPT0gbzEpKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogKi8KICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgU3RyaW5nIGZ1bGxUYWJsZU5hbWUgPSB0YWJsZU5hbWU7Ci0JICAgIGlmIChzY2hlbWFOYW1lICE9IG51bGwgJiYgKCEoc2NoZW1hTmFtZS50cmltKCkuZXF1YWxzKCIiKSkpKSB7Ci0JICAgICAgICBmdWxsVGFibGVOYW1lID0gc2NoZW1hTmFtZS50cmltKCkgKyAiLiIgKyBmdWxsVGFibGVOYW1lOwotCSAgICB9Ci0JICAgIFN0cmluZyBxcnkgPSAic2VsZWN0ICogZnJvbSAiICsgZnVsbFRhYmxlTmFtZTsgCisgICAgICAgIFN0cmluZyBmdWxsVGFibGVOYW1lID0gdGFibGVOYW1lOworICAgICAgICBpZiAoc2NoZW1hTmFtZSAhPSBudWxsICYmICghKHNjaGVtYU5hbWUudHJpbSgpLmVxdWFscygiIikpKSkgeworICAgICAgICAgICAgZnVsbFRhYmxlTmFtZSA9IHNjaGVtYU5hbWUudHJpbSgpICsgIi4iICsgZnVsbFRhYmxlTmFtZTsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgcXJ5ID0gInNlbGVjdCAqIGZyb20gIiArIGZ1bGxUYWJsZU5hbWU7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRpbmcgcXVlcnkgOiIgKyBxcnkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyBxdWVyeSA6IiArIHFyeSk7CiAKLQkgICAgcyA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgcnMgPSBzLmV4ZWN1dGVRdWVyeShxcnkpOyAKKyAgICAgICAgcyA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgcnMgPSBzLmV4ZWN1dGVRdWVyeShxcnkpOwogCiAgICAgICAgICAgICBpbnQgaSA9IDA7Ci0JICAgIGlmIChycy5uZXh0KCkpIHsKLQkgICAgICAgIGkrKzsKLQkgICAgfQorICAgICAgICBpZiAocnMubmV4dCgpKSB7CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJObyBvZiByb3dzIGZvdW5kOiIgKyBpKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gb2Ygcm93cyBleHBlY3RlZDoiICsgbm9PZlJvd3MpOwogCi0JICAgIGlmIChpID09IG5vT2ZSb3dzLmludFZhbHVlKCkpIHsKLQkgICAgICAgYiA9IHRydWU7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgIGIgPSBmYWxzZTsKLQkgICAgfQotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgYiA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBpZiAocnMgIT0gbnVsbCkgcnMuY2xvc2UoKTsKLQkgICAgICAgIGlmIChzICE9IG51bGwpIHMuY2xvc2UoKTsKLQkgICAgICAgIGlmIChjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7CisgICAgICAgIGlmIChpID09IG5vT2ZSb3dzLmludFZhbHVlKCkpIHsKKyAgICAgICAgICAgYiA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgIGIgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgYiA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAocnMgIT0gbnVsbCkgcnMuY2xvc2UoKTsKKyAgICAgICAgICAgIGlmIChzICE9IG51bGwpIHMuY2xvc2UoKTsKKyAgICAgICAgICAgIGlmIChjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICB9Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuaW5nIHNldHVwIDoiICtiKTsKLQlyZXR1cm4gYjsKKyAgICAgICAgfQorICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJldHVybmluZyBzZXR1cCA6IiArYik7CisgICAgcmV0dXJuIGI7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCmluZGV4IDhlYmUwNTcuLmM1NGEyMTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCkBAIC0yMyw0NSArMjMsNDUgQEAKIC8qKgogICogPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBMb2NhbFRyYW5zYWN0aW9uIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTG9jYWxUcmFuc2FjdGlvbiB7Ci0gICAgCisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+LgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCByZXR1cm5zCi0gICAgICoJCQl0aGlzIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IG9iamVjdCBhcwotICAgICAqCQkJYSByZXN1bHQgb2YgPGNvZGU+Z2V0TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgcmV0dXJucworICAgICAqICAgICAgICAgICAgdGhpcyA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBvYmplY3QgYXMKKyAgICAgKiAgICAgICAgICAgIGEgcmVzdWx0IG9mIDxjb2RlPmdldExvY2FsVHJhbnNhY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIExvY2FsVHJhbnNhY3Rpb24oTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEJlZ2luIGEgbG9jYWwgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGJlZ2luKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvblN0YXJ0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvblN0YXJ0ZWQoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKS5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IGEgbG9jYWwgdHJhbnNhY3Rpb24uCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbiBvciBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gb3IgY29tbWl0dGluZyB0aGUgdHJhbnNhY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBFeGNlcHRpb24gZSA9IG51bGw7CkBAIC03MiwxNSArNzIsMTUgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSb2xsYmFjayBhIGxvY2FsIHRyYW5zYWN0aW9uLgotICAgICAqIAotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24gb3Igcm9sbGluZyBiYWNrIHRoZSB0cmFuc2FjdGlvbgorICAgICAqCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBvciByb2xsaW5nIGJhY2sgdGhlIHRyYW5zYWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCmluZGV4IDMwZjQ2MGEuLjJkYWQ1OWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKQEAgLTQxLDggKzQxLDggQEAKIC8qKgogICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjIKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIyCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb24gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiB7CiAKQEAgLTUyLDcgKzUyLDcgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBpc0Rlc3Ryb3llZCA9IGZhbHNlOwogICAgIHByaXZhdGUgYm9vbGVhbiBpc1VzYWJsZSA9IHRydWU7Ci0gICAgCisKICAgICBwcml2YXRlIGludCBjb25uZWN0aW9uVHlwZSA9IElTTk9UQVBPT0xFRENPTk5FQ1RJT047CiAgICAgcHJpdmF0ZSBQb29sZWRDb25uZWN0aW9uIHBjID0gbnVsbDsKICAgICBwcml2YXRlIGphdmEuc3FsLkNvbm5lY3Rpb24gYWN0dWFsQ29ubmVjdGlvbiA9IG51bGw7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgcHJpdmF0ZSBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmID0gbnVsbDsKICAgICBwcml2YXRlIFhBUmVzb3VyY2UgeGFyID0gbnVsbDsKICAgICBwdWJsaWMgQ29ubmVjdGlvbkhvbGRlciBhY3RpdmVDb25uZWN0aW9uSGFuZGxlOwotICAgIAorCiAgICAgLy9HSkNJTlQKICAgICBwcml2YXRlIGludCBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkOwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0NsZWFuID0gZmFsc2U7CkBAIC03Nyw3MSArNzcsNzEgQEAKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uIFRoZSBwb29sZWRDb25uIHBhcmFtZXRlciBpcyBleHBlY3RlZAotICAgICAqIHRvIGJlIG51bGwgYW5kIHNxbENvbm4gcGFyYW1ldGVyIGlzIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiBjYXNlIHdoZXJlIAotICAgICAqIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpcyBnb3QgZnJvbSBhIG5vbiBwb29sZWQgZGF0YXNvdXJjZSBvYmplY3QuIFRoZSAKKyAgICAgKiB0byBiZSBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlciBpcyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gY2FzZSB3aGVyZQorICAgICAqIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpcyBnb3QgZnJvbSBhIG5vbiBwb29sZWQgZGF0YXNvdXJjZSBvYmplY3QuIFRoZQogICAgICAqIHBvb2xlZENvbm4gcGFyYW1ldGVyIGlzIGV4cGVjdGVkIHRvIGJlIG5vbiBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlcgogICAgICAqIGlzIGV4cGVjdGVkIHRvIGJlIG51bGwgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGRhdGFzb3VyY2Ugb2JqZWN0IGlzIGEKICAgICAgKiBjb25uZWN0aW9uIHBvb2wgZGF0YXNvdXJjZSBvciBhbiB4YSBkYXRhc291cmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvb2xlZENvbm4JPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIAotICAgICAqCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIHBvb2xlZAotICAgICAqCQkJCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OyBudWxsIG90aGVyd2lzZQotICAgICAqIEBwYXJhbQlzcWxDb25uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSBwaHlzaWNhbAotICAgICAqCQkJY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgbm9uIHBvb2xlZCA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsKLSAgICAgKgkJCW51bGwgb3RoZXJ3aXNlCi0gICAgICogQHBhcmFtCXBhc3N3ZENyZWQJb2JqZWN0IGNvbmF0aW5pbmcgdGhlCi0gICAgICoJCQkJdXNlciBhbmQgcGFzc3dvcmQgZm9yIGFsbG9jYXRpbmcgdGhlIGNvbm5lY3Rpb24KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdAotICAgICAqCQkJCQl0aGF0IGNyZWF0ZWQgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0Ci0gICAgICoJCQkJCWlzIG5vdCB0aGUgc2FtZSBhcyByZXR1cm5lZCBieSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICoJCQkJCW9iamVjdCBwYXNzZWQKKyAgICAgKiBAcGFyYW0gICAgcG9vbGVkQ29ubiAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBwb29sZWQKKyAgICAgKiAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsgbnVsbCBvdGhlcndpc2UKKyAgICAgKiBAcGFyYW0gICAgc3FsQ29ubiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIG5vbiBwb29sZWQgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47CisgICAgICogICAgICAgICAgICBudWxsIG90aGVyd2lzZQorICAgICAqIEBwYXJhbSAgICBwYXNzd2RDcmVkICAgIG9iamVjdCBjb25hdGluaW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgIHVzZXIgYW5kIHBhc3N3b3JkIGZvciBhbGxvY2F0aW5nIHRoZSBjb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdGhhdCBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICBpcyBub3QgdGhlIHNhbWUgYXMgcmV0dXJuZWQgYnkgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICBvYmplY3QgcGFzc2VkCiAgICAgICovCi0gICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubiwgamF2YS5zcWwuQ29ubmVjdGlvbiBzcWxDb25uLCAKKyAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24oUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uLCBqYXZhLnNxbC5Db25uZWN0aW9uIHNxbENvbm4sCiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYXNzd2RDcmVkLCBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihwb29sZWRDb25uID09IG51bGwgJiYgc3FsQ29ubiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNvbm5lY3Rpb24gb2JqZWN0IGNhbm5vdCBiZSBudWxsIik7CiAgICAgICAgIH0KIAotCWlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgewotCSAgICBhY3R1YWxDb25uZWN0aW9uID0gc3FsQ29ubjsKLQl9CisgICAgaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7CisgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBzcWxDb25uOworICAgIH0KIAogICAgICAgICBwYyA9IHBvb2xlZENvbm47CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbmV3IEhhc2h0YWJsZSgpOwogICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gcGFzc3dkQ3JlZDsKICAgICAgICAgdGhpcy5tY2YgPSBtY2Y7Ci0gICAgICAgIGlmKHBhc3N3ZENyZWRlbnRpYWwgIT0gbnVsbCAmJiAgCisgICAgICAgIGlmKHBhc3N3ZENyZWRlbnRpYWwgIT0gbnVsbCAmJgogICAgICAgICAgICAgdGhpcy5tY2YuZXF1YWxzKHBhc3N3ZENyZWRlbnRpYWwuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgdGhhdCBoYXMgY3JlYXRlZCB0aGlzICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB0aGF0IGhhcyBjcmVhdGVkIHRoaXMgIiArCiAgICAgICAgICAgICAgICAgIk1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHJldHVybmVkIGJ5IiArCiAgICAgICAgICAgICAgICAgICAgICIgdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiIpOwogICAgICAgICB9CiAgICAgICAgIGxvZ1dyaXRlciA9IG1jZi5nZXRMb2dXcml0ZXIoKTsKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0JY2UgPSBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0NMT1NFRCk7CisgICAgY2UgPSBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0NMT1NFRCk7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogQWRkcyBhIGNvbm5lY3Rpb24gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWxpc3RlbmVyCTxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBsaXN0ZW5lciAgICA8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKiBAc2VlIDxjb2RlPnJlbW92ZUNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGFkZENvbm5lY3Rpb25FdmVudExpc3RlbmVyKENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyOworICAgIHRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBVc2VkIGJ5IHRoZSBjb250YWluZXIgdG8gY2hhbmdlIHRoZSBhc3NvY2lhdGlvbiBvZiBhbiBhcHBsaWNhdGlvbi1sZXZlbCAKKyAgICAgKiBVc2VkIGJ5IHRoZSBjb250YWluZXIgdG8gY2hhbmdlIHRoZSBhc3NvY2lhdGlvbiBvZiBhbiBhcHBsaWNhdGlvbi1sZXZlbAogICAgICAqIGNvbm5lY3Rpb24gaGFuZGxlIHdpdGggYSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29ubmVjdGlvbgk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKLSAgICAgKgkJCQl0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZQotICAgICAqCQkJCQl2YWxpZCBvciB0aGUgY29ubmVjdGlvbiBoYW5kbGUgcGFzc2VkIGlzIG51bGwKKyAgICAgKiBAcGFyYW0gICAgY29ubmVjdGlvbiAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgKiAgICAgICAgICAgICAgICB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZQorICAgICAqICAgICAgICAgICAgICAgICAgICB2YWxpZCBvciB0aGUgY29ubmVjdGlvbiBoYW5kbGUgcGFzc2VkIGlzIG51bGwKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhc3NvY2lhdGVDb25uZWN0aW9uKE9iamVjdCBjb25uZWN0aW9uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTUyLDExICsxNTIsMTEgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ29ubmVjdGlvbiBoYW5kbGUgY2Fubm90IGJlIG51bGwiKTsKICAgICAgICAgfQogICAgICAgICBDb25uZWN0aW9uSG9sZGVyIGNoID0gKENvbm5lY3Rpb25Ib2xkZXIpIGNvbm5lY3Rpb247Ci0gICAgICAgIAorCiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24pY2guZ2V0TWFuYWdlZENvbm5lY3Rpb24oKTsKLQltYy5hY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLQlpc0NsZWFuID0gZmFsc2U7Ci0gICAgICAgIAorICAgIG1jLmFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOworICAgIGlzQ2xlYW4gPSBmYWxzZTsKKwogICAgICAgICBjaC5hc3NvY2lhdGVDb25uZWN0aW9uKGFjdHVhbENvbm5lY3Rpb24sIHRoaXMpOwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGV4cGVjdGF0aW9uIGZyb20gdGhlIGFib3ZlIG1ldGhvZCBpcyB0aGF0IHRoZSBjb25uZWN0aW9uIGhvbGRlcgpAQCAtMTY1LDM0ICsxNjUsMzQgQEAKICAgICAgICAgICogdG8gdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlIHdpdGggdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4KICAgICAgICAgICogQW55IHByZXZpb3VzIHN0YXRlbWVudHMgYW5kIHJlc3VsdCBzZXRzIGFsc28gbmVlZCB0byBiZSByZW1vdmVkLgogICAgICAgICAgKi8KLSAgICAgICAgIAorCiAgICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUuc2V0QWN0aXZlKGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBjaC5zZXRBY3RpdmUodHJ1ZSk7Ci0gICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsgCisgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBBcHBsaWNhdGlvbiBzZXJ2ZXIgY2FsbHMgdGhpcyBtZXRob2QgdG8gZm9yY2UgYW55IGNsZWFudXAgb24gdGhlIAorICAgICAqIEFwcGxpY2F0aW9uIHNlcnZlciBjYWxscyB0aGlzIG1ldGhvZCB0byBmb3JjZSBhbnkgY2xlYW51cCBvbiB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuIFRoaXMgbWV0aG9kIGNhbGxzIHRoZSBpbnZhbGlkYXRlCiAgICAgICogbWV0aG9kIG9uIGFsbCBDb25uZWN0aW9uSGFuZGxlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCi0gICAgICogCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlIHZhbGlkCisgICAgICoKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjbGVhbnVwKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gY2xlYW51cCIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICAvKioKICAgICAgICAgICogbWF5IG5lZWQgdG8gc2V0IHRoZSBhdXRvY29tbWl0IHRvIHRydWUgZm9yIHRoZSBub24tcG9vbGVkIGNhc2UuCiAgICAgICAgICAqLwogICAgICAgICAvL0dKQ0lOVAotCS8vaWYgKGFjdHVhbENvbm5lY3Rpb24gIT0gbnVsbCkgewotCWlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgeworICAgIC8vaWYgKGFjdHVhbENvbm5lY3Rpb24gIT0gbnVsbCkgeworICAgIGlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCA9IGFjdHVhbENvbm5lY3Rpb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewpAQCAtMjAxLDE3ICsyMDEsMTcgQEAKICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlzQ2xlYW4gPSB0cnVlOwotICAgICAgICAKKwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGFsbCB0aGUgY29ubmVjdGlvbiBoYW5kbGVzIGZyb20gdGhlIHRhYmxlCiAgICAgICogb2YgY29ubmVjdGlvbiBoYW5kbGVzIGFuZCBpbnZhbGlkYXRlcyBhbGwgb2YgdGhlbSBzbyB0aGF0IGFueQogICAgICAqIG9wZXJhdGlvbiBvbiB0aG9zZSBjb25uZWN0aW9uIGhhbmRsZXMgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYSBwcm9ibGVtIGluIHJldHJpZXZpbmcKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXRoZSBjb25uZWN0aW9uIGhhbmRsZXMKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBpbiByZXRyaWV2aW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29ubmVjdGlvbiBoYW5kbGVzCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGludmFsaWRhdGVBbGxDb25uZWN0aW9uSGFuZGxlcygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIFNldCBoYW5kbGVzID0gY29ubmVjdGlvbkhhbmRsZXMua2V5U2V0KCk7CkBAIC0yMjYsMjIgKzIyNiwyMiBAQAogICAgICAgICB9CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzLmNsZWFyKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRGVzdHJveXMgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgcmVzb3VyY2UgbWFuYWdlci4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNsb3NpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2xvc2luZyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZGVzdHJveSIpOwogICAgICAgICB9Ci0JLy9HSkNJTlQKLQlpZihpc0Rlc3Ryb3llZCA9PSB0cnVlKSB7Ci0JICAgIHJldHVybjsJCi0JfQorICAgIC8vR0pDSU5UCisgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSkgeworICAgICAgICByZXR1cm47CisgICAgfQogCi0JYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CisgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTiB8fCBjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04pIHsKICAgICAgICAgICAgICAgICBwYy5jbG9zZSgpOwpAQCAtMjU1LDI4ICsyNTUsMjggQEAKICAgICAgICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBudWxsOwogICAgICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBudWxsOwotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgZm9sbG93aW5nIGV4Y2VwdGlvbiBoYXMgb2NjdXJlZCBkdXJpbmcgZGVzdHJveTogIiAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGZvbGxvd2luZyBleGNlcHRpb24gaGFzIG9jY3VyZWQgZHVyaW5nIGRlc3Ryb3k6ICIKICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7CiAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBudWxsOwogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBjb25uZWN0aW9uIGhhbmRsZSBmb3IgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgCisgICAgICogQ3JlYXRlcyBhIG5ldyBjb25uZWN0aW9uIGhhbmRsZSBmb3IgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwKICAgICAgKiBjb25uZWN0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgbmVlZGVkIGZvciBhdXRoZW50aWNhdGlvbgotICAgICAqIEBwYXJhbQljeFJlcUluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBjYXJyaWVzIHRoZSB1c2VyIAotICAgICAqICAgICAgIAkgICAgICAgICAJYW5kIHBhc3N3b3JkIHJlcXVpcmVkIGZvciBnZXR0aW5nIHRoaXMgY29ubmVjdGlvbi4KLSAgICAgKiBAcmV0dXJuCUNvbm5lY3Rpb24JdGhlIGNvbm5lY3Rpb24gaGFuZGxlIDxjb2RlPk9iamVjdDwvY29kZT4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJcGh5c2ljYWwgY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sZWQgY29ubmVjdGlvbiAKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBhc3N3b3JkIGNyZWRlbnRpYWxzIG9yIHJlYXV0aGVudGljYXRpb24gaXMgcmVxdWVzdGVkCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIG5lZWRlZCBmb3IgYXV0aGVudGljYXRpb24KKyAgICAgKiBAcGFyYW0gICAgY3hSZXFJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gY2FycmllcyB0aGUgdXNlcgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHBhc3N3b3JkIHJlcXVpcmVkIGZvciBnZXR0aW5nIHRoaXMgY29ubmVjdGlvbi4KKyAgICAgKiBAcmV0dXJuICAgIENvbm5lY3Rpb24gICAgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIDxjb2RlPk9iamVjdDwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGZyb20gdGhlIHBvb2xlZCBjb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCBjcmVkZW50aWFscyBvciByZWF1dGhlbnRpY2F0aW9uIGlzIHJlcXVlc3RlZAogICAgICAqLwotICAgIHB1YmxpYyBPYmplY3QgZ2V0Q29ubmVjdGlvbihTdWJqZWN0IHN1YiwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxSW5mbykgCisgICAgcHVibGljIE9iamVjdCBnZXRDb25uZWN0aW9uKFN1YmplY3Qgc3ViLCBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXFJbmZvKQogICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldENvbm5lY3Rpb24iKTsKQEAgLTI4NCwxNCArMjg0LDE0IEBACiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8gPSAoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbykgY3hSZXFJbmZvOwogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGFzc3dkQ3JlZCA9IFNlY3VyaXR5VXRpbHMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKHRoaXMubWNmLCBzdWIsIGN4UmVxdWVzdEluZm8pOwotICAgICAgICAgICAgCisKICAgICAgICAgaWYoU2VjdXJpdHlVdGlscy5pc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKHRoaXMucGFzc3dkQ3JlZGVudGlhbCwgcGFzc3dkQ3JlZCkgPT0gZmFsc2UpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLnNwaS5TZWN1cml0eUV4Y2VwdGlvbigiUmUtYXV0aGVudGljYXRpb24gbm90IHN1cHBvcnRlZCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vR0pDSU5UCiAgICAgICAgIGdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAKKwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGZvbGxvd2luZyBjb2RlIGluIHRoZSBpZiBzdGF0ZW1lbnQgZmlyc3QgY2hlY2tzIGlmIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24KICAgICAgICAgICogaXMgY2xlYW4gb3Igbm90LiBJZiBpdCBpcywgaXQgcmVzZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgdG8gd2hhdApAQCAtMzAxLDI4ICszMDEsMjggQEAKICAgICAgICAgaWYoaXNDbGVhbikgewogICAgICAgICAgICAgKChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KW1jZikucmVzZXRJc29sYXRpb24odGhpcywgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAKKworCiAgICAgICAgIENvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCA9IG5ldyBDb25uZWN0aW9uSG9sZGVyKGFjdHVhbENvbm5lY3Rpb24sIHRoaXMpOwotCWlzQ2xlYW49ZmFsc2U7Ci0gICAgICAgIAorICAgIGlzQ2xlYW49ZmFsc2U7CisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlLnNldEFjdGl2ZShmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgY29ubkhvbGRlck9iamVjdC5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjb25uSG9sZGVyT2JqZWN0OwotIAorCiAgICAgICAgIHJldHVybiBjb25uSG9sZGVyT2JqZWN0OwotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgYW4gPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW5zdGFuY2UuIFRoZSA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnRlcmZhY2UKLSAgICAgKiBpcyB1c2VkIGJ5IHRoZSBjb250YWluZXIgdG8gbWFuYWdlIGxvY2FsIHRyYW5zYWN0aW9ucyBmb3IgYSBSTSBpbnN0YW5jZS4gCisgICAgICogaXMgdXNlZCBieSB0aGUgY29udGFpbmVyIHRvIG1hbmFnZSBsb2NhbCB0cmFuc2FjdGlvbnMgZm9yIGEgUk0gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTG9jYWxUcmFuc2FjdGlvbiBnZXRMb2NhbFRyYW5zYWN0aW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTMzMSwxMyArMzMxLDEzIEBACiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICByZXR1cm4gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5Mb2NhbFRyYW5zYWN0aW9uKHRoaXMpOwogICAgIH0KLSAgICAgCisKICAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4gCisgICAgICogR2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqIEBzZWUgPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBQcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtMzQ1LDQ2ICszNDUsNDYgQEAKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0TG9nV3JpdGVyIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBsb2dXcml0ZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogR2V0cyB0aGUgbWV0YWRhdGEgaW5mb3JtYXRpb24gZm9yIHRoaXMgY29ubmVjdGlvbidzIHVuZGVybHlpbmcgRUlTIAotICAgICAqIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UuIAorICAgICAqIEdldHMgdGhlIG1ldGFkYXRhIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbm5lY3Rpb24ncyB1bmRlcmx5aW5nIEVJUworICAgICAqIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSBnZXRNZXRhRGF0YSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldE1ldGFEYXRhIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEodGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyBhbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4gCisgICAgICogUmV0dXJucyBhbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgotICAgICAqCQkJCQl0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCU5vdFN1cHBvcnRlZEV4Y2VwdGlvbglpZiB1bmRlcmx5aW5nIGRhdGFzb3VyY2UgaXMgbm90IGFuCi0gICAgICoJCQkJCTxjb2RlPlhBRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiAgICBpZiB1bmRlcmx5aW5nIGRhdGFzb3VyY2UgaXMgbm90IGFuCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPlhBRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgWEFSZXNvdXJjZSBnZXRYQVJlc291cmNlKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0WEFSZXNvdXJjZSIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTikgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZih4YXIgPT0gbnVsbCkgewotCQkgICAgLyoqCisgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgICogVXNpbmcgdGhlIHdyYXBwZXIgWEFSZXNvdXJjZS4KICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgIHhhciA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuWEFSZXNvdXJjZUltcGwoKChYQUNvbm5lY3Rpb24pcGMpLmdldFhBUmVzb3VyY2UoKSwgdGhpcyk7CkBAIC0zOTcsMTYgKzM5NywxNiBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiQ2Fubm90IGdldCBhbiBYQVJlc291cmNlIGZyb20gYSBub24gWEEgY29ubmVjdGlvbiIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVtb3ZlcyBhbiBhbHJlYWR5IHJlZ2lzdGVyZWQgY29ubmVjdGlvbiBldmVudCBsaXN0ZW5lciBmcm9tIHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlsaXN0ZW5lcgk8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4gdG8gYmUgcmVtb3ZlZAorICAgICAqIEBwYXJhbSAgICBsaXN0ZW5lciAgICA8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4gdG8gYmUgcmVtb3ZlZAogICAgICAqIEBzZWUgPGNvZGU+YWRkQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIoQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQlsaXN0ZW5lciA9IG51bGw7CisgICAgbGlzdGVuZXIgPSBudWxsOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDE1LDcgKzQxNSw3IEBACiAgICAgICogTG9jYWxUcmFuc2FjdGlvbiBvYmplY3Qgd2hlbiBpdHMgYmVnaW4oKSBtZXRob2QgaXMgY2FsbGVkLgogICAgICAqLwogICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKCkgewotCXRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IHRydWU7CQorICAgIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IHRydWU7CiAgICAgfQogCiAgICAgLyoqCkBAIC00MjQsMTYgKzQyNCwxNiBAQAogICAgICAqIExvY2FsVHJhbnNhY3Rpb24gb2JqZWN0IHdoZW4gaXRzIGVuZCgpIG1ldGhvZCBpcyBjYWxsZWQuCiAgICAgICovCiAgICAgdm9pZCB0cmFuc2FjdGlvbkNvbXBsZXRlZCgpIHsKLQl0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKLQlpZihjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKKyAgICB0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCA9IGFjdHVhbENvbm5lY3Rpb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgIC8vY2hlY2sgd2hhdCB0byBkbyBpbiB0aGlzIGNhc2UhIQotCQlfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5ub3Rnb3RfdHhfaXNvbHZsIik7CisgICAgICAgICAgICAvL2NoZWNrIHdoYXQgdG8gZG8gaW4gdGhpcyBjYXNlISEKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMubm90Z290X3R4X2lzb2x2bCIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0JICAgIHRyeSB7CisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CkBAIC00NDEsNyArNDQxLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0JICAgICAgICAKKwogICAgICAgICBpc0NsZWFuID0gdHJ1ZTsKIAogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKQEAgLTQ1MywyOCArNDUzLDI4IEBACiAgICAgICogb3Igbm90LgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkgewotCXJldHVybiB0cmFuc2FjdGlvbkluUHJvZ3Jlc3M7CisgICAgcmV0dXJuIHRyYW5zYWN0aW9uSW5Qcm9ncmVzczsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlvdXQJPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEBwYXJhbSAgICBvdXQgICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqIEBzZWUgPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihQcmludFdyaXRlciBvdXQpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICBsb2dXcml0ZXIgPSBvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiB0aGUgY29ubmVjdGlvbiBiZWluZyBoZWxkIAorICAgICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgdGhlIHR5cGUgb2YgdGhlIGNvbm5lY3Rpb24gYmVpbmcgaGVsZAogICAgICAqIGluIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgotICAgICAqIAotICAgICAqIEBwYXJhbQlwb29sZWRDb25uCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHJldHVybgljb25uZWN0aW9uIHR5cGUKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBwb29sZWRDb25uICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBjb25uZWN0aW9uIHR5cGUKICAgICAgKi8KICAgICBwcml2YXRlIGludCBnZXRDb25uZWN0aW9uVHlwZShQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4pIHsKICAgICAgICAgaWYocG9vbGVkQ29ubiA9PSBudWxsKSB7CkBAIC00ODUsMjIgKzQ4NSwyMiBAQAogICAgICAgICAgICAgcmV0dXJuIElTUE9PTEVEQ09OTkVDVElPTjsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCAKKyAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQKICAgICAgKiBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgY3JlYXRlZCB0aGlzCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IGNyZWF0ZWQgdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKICAgICAgKi8KICAgICBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkgewogICAgICAgICByZXR1cm4gKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpbWNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBzcWwgY29ubmVjdGlvbiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uIAorICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBzcWwgY29ubmVjdGlvbiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRoZSBwaHlzaWNhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgdGhlIHBoeXNpY2FsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgLy9HSkNJTlQKICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGdldEFjdHVhbENvbm5lY3Rpb24oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtNTA5LDggKzUwOSw4IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmKGFjdHVhbENvbm5lY3Rpb24gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gcGMuZ2V0Q29ubmVjdGlvbigpOwotCQl9Ci0JCQorICAgICAgICB9CisKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKICAgICAgICAgICAgICAgICBzcWxlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CkBAIC01MTgsODEgKzUxOCw4MSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBhY3R1YWxDb25uZWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHJldHVybiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQogICAgICAqLwogICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBnZXRQYXNzd29yZENyZWRlbnRpYWwoKSB7CiAgICAgICAgIHJldHVybiBwYXNzd2RDcmVkZW50aWFsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QgYW5kIHRocm93cyBhbgogICAgICAqIGV4Y2VwdGlvbiBpZiBpdCBpcyBub3QgdmFsaWQuIEEgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGlzIG5vdCB2YWxpZCBpZgogICAgICAqIGRlc3Ryb3kgaGFzIG5vdCBiZWVuIGNhbGxlZCBhbmQgbm8gcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBoYXMKICAgICAgKiBvY2N1cnJlZCByZW5kZXJpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gdW51c2FibGUuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIDxjb2RlPmRlc3Ryb3k8L2NvZGU+IGhhcyBiZWVuIGNhbGxlZCBvbiB0aGlzIAotICAgICAqCQkJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugb3IgaWYgYSAKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJyZWQgcmVuZGVyaW5nIGl0IHVudXNhYmxlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiA8Y29kZT5kZXN0cm95PC9jb2RlPiBoYXMgYmVlbiBjYWxsZWQgb24gdGhpcworICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugb3IgaWYgYQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBvY2N1cnJlZCByZW5kZXJpbmcgaXQgdW51c2FibGUKICAgICAgKi8KICAgICAvL0dKQ0lOVAogICAgIHZvaWQgY2hlY2tJZlZhbGlkKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSB8fCBpc1VzYWJsZSA9PSBmYWxzZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGlzIE1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyB0aGUgcGh5c2ljYWwgIiArIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGlzIE1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyB0aGUgcGh5c2ljYWwgIiArCiAgICAgICAgICAgICAgICAgImNvbm5lY3Rpb24gaXMgbm90IHVzYWJsZS4iKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gd2hlbiBpdHMgY2xvc2UgbWV0aG9kIGlzCiAgICAgICogY2FsbGVkLiBUaGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSAgaW52YWxpZGF0ZXMgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCiAgICAgICogYW5kIHNlbmRzIGEgQ09OTkVDVElPTl9DTE9TRUQgZXZlbnQgdG8gYWxsIHRoZSByZWdpc3RlcmVkIGV2ZW50IGxpc3RlbmVycy4KICAgICAgKgotICAgICAqIEBwYXJhbQllCUV4Y2VwdGlvbiB0aGF0IG1heSBoYXZlIG9jY3VyZWQgd2hpbGUgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKLSAgICAgKiBAcGFyYW0JY29ubkhvbGRlck9iamVjdAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGhhcyBiZWVuIGNsb3NlZAotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCWluIGNhc2UgY2xvc2luZyB0aGUgc3FsIGNvbm5lY3Rpb24gZ290IG91dCBvZgotICAgICAqICAgICAgICAgCSAgICAgICAgICAgIAk8Y29kZT5nZXRDb25uZWN0aW9uPC9jb2RlPiBvbiB0aGUgdW5kZXJseWluZyAKLSAgICAgKgkJCQk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiB0aHJvd3MgYW4gZXhjZXB0aW9uCisgICAgICogQHBhcmFtICAgIGUgICAgRXhjZXB0aW9uIHRoYXQgbWF5IGhhdmUgb2NjdXJlZCB3aGlsZSBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGhhbmRsZQorICAgICAqIEBwYXJhbSAgICBjb25uSG9sZGVyT2JqZWN0ICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgaGFzIGJlZW4gY2xvc2VkCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgaW4gY2FzZSBjbG9zaW5nIHRoZSBzcWwgY29ubmVjdGlvbiBnb3Qgb3V0IG9mCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPmdldENvbm5lY3Rpb248L2NvZGU+IG9uIHRoZSB1bmRlcmx5aW5nCisgICAgICogICAgICAgICAgICAgICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gdGhyb3dzIGFuIGV4Y2VwdGlvbgogICAgICAqLwogICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChFeGNlcHRpb24gZSwgQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgY29ubkhvbGRlck9iamVjdC5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICBjZS5zZXRDb25uZWN0aW9uSGFuZGxlKGNvbm5Ib2xkZXJPYmplY3QpOwogICAgICAgICBsaXN0ZW5lci5jb25uZWN0aW9uQ2xvc2VkKGNlKTsKLQkKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gd2hlbiBpdCBkZXRlY3RzIGEgY29ubmVjaW9uCiAgICAgICogcmVsYXRlZCBlcnJvci4KICAgICAgKgotICAgICAqIEBwYXJhbQllCUV4Y2VwdGlvbiB0aGF0IGhhcyBvY2N1cnJlZCBkdXJpbmcgYW4gb3BlcmF0aW9uIG9uIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCi0gICAgICogQHBhcmFtCWNvbm5Ib2xkZXJPYmplY3QJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBkZXRlY3RlZCB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJY29ubmVjdGlvbiBlcnJvcgorICAgICAqIEBwYXJhbSAgICBlICAgIEV4Y2VwdGlvbiB0aGF0IGhhcyBvY2N1cnJlZCBkdXJpbmcgYW4gb3BlcmF0aW9uIG9uIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIGNvbm5Ib2xkZXJPYmplY3QgICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBkZXRlY3RlZCB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBlcnJvcgogICAgICAqLwotICAgIHZvaWQgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoRXhjZXB0aW9uIGUsIAorICAgIHZvaWQgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoRXhjZXB0aW9uIGUsCiAgICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0KSB7Ci0JICAgIAorCiAgICAgICAgICBDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBjZWwgPSB0aGlzLmxpc3RlbmVyOwogICAgICAgICAgQ29ubmVjdGlvbkV2ZW50IGNlID0gbnVsbDsKICAgICAgICAgIGNlID0gZSA9PSBudWxsID8gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9FUlJPUl9PQ0NVUlJFRCkKICAgICAgICAgICAgICAgICAgICAgOiBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0VSUk9SX09DQ1VSUkVELCBlKTsKICAgICAgICAgIGlmIChjb25uSG9sZGVyT2JqZWN0ICE9IG51bGwpIHsKICAgICAgICAgICAgICBjZS5zZXRDb25uZWN0aW9uSGFuZGxlKGNvbm5Ib2xkZXJPYmplY3QpOwotICAgICAgICAgfSAgICAKKyAgICAgICAgIH0KIAogICAgICAgICAgY2VsLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGNlKTsKICAgICAgICAgIGlzVXNhYmxlID0gZmFsc2U7CiAgICAgfQotICAgIAotICAgIAotICAgIAorCisKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdoZW4gaXRzIHN0YXJ0IG1ldGhvZAogICAgICAqIGhhcyBiZWVuIGludm9rZWQuCkBAIC02MDYsNyArNjA2LDcgQEAKICAgICAgICAgICAgIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGUsIG51bGwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hlbiBpdHMgZW5kIG1ldGhvZAogICAgICAqIGhhcyBiZWVuIGludm9rZWQuCkBAIC02MjAsNyArNjIwLDcgQEAKICAgICAgICAgICAgIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGUsIG51bGwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGEgQ29ubmVjdGlvbiBIYW5kbGUgdG8gY2hlY2sgaWYgaXQgaXMKICAgICAgKiB0aGUgYWN0aXZlIENvbm5lY3Rpb24gSGFuZGxlLiBJZiBpdCBpcyBub3QgdGhlIGFjdGl2ZSBDb25uZWN0aW9uCkBAIC02MjksMjQgKzYyOSwyNCBAQAogICAgICAqIENvbm5lY3Rpb24gSGFuZGxlIG9iamVjdCB0byB0aGlzIG9iamVjdCBpZiB0aGUgYWN0aXZlIENvbm5lY3Rpb24KICAgICAgKiBIYW5kbGUgaXMgbnVsbC4KICAgICAgKgotICAgICAqIEBwYXJhbQljaAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IHJlcXVlc3RzIHRoaXMKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSB3aGV0aGVyCi0gICAgICoJCQlpdCBjYW4gYmUgYWN0aXZlIG9yIG5vdAotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCWluIGNhc2UgdGhlIHBoeXNpY2FsIGlzIG5vdCB2YWxpZCBvcgotICAgICAqCQkJCXRoZXJlIGlzIGFscmVhZHkgYW4gYWN0aXZlIGNvbm5lY3Rpb24gaGFuZGxlCisgICAgICogQHBhcmFtICAgIGNoICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgcmVxdWVzdHMgdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHdoZXRoZXIKKyAgICAgKiAgICAgICAgICAgIGl0IGNhbiBiZSBhY3RpdmUgb3Igbm90CisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgaW4gY2FzZSB0aGUgcGh5c2ljYWwgaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgdGhlcmUgaXMgYWxyZWFkeSBhbiBhY3RpdmUgY29ubmVjdGlvbiBoYW5kbGUKICAgICAgKi8KLSAgICAgCisKICAgICB2b2lkIGNoZWNrSWZBY3RpdmUoQ29ubmVjdGlvbkhvbGRlciBjaCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUgfHwgaXNVc2FibGUgPT0gZmFsc2UpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIlRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB1c2FibGUiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlID09IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsKICAgICAgICAgICAgIGNoLnNldEFjdGl2ZSh0cnVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IGNoKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBoYW5kbGUgY2Fubm90IGJlIHVzZWQgYXMgYW5vdGhlciBjb25uZWN0aW9uIGlzIGN1cnJlbnRseSBhY3RpdmUiKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQppbmRleCAyMGYwM2FhLi5mNjUwZDQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogLyoqCiAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzAzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhIHsKIApAQCAtNDEsODEgKzQxLDgxIEBACiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4JaWYgZ2V0dGluZyB0aGUgRGF0YWJhc2VNZXRhRGF0YSBvYmplY3QgZmFpbHMKKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gICAgaWYgZ2V0dGluZyB0aGUgRGF0YWJhc2VNZXRhRGF0YSBvYmplY3QgZmFpbHMKICAgICAgKi8KICAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YShNYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICAgICAgICAgIGRtZCA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKS5nZXRNZXRhRGF0YSgpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBwcm9kdWN0IG5hbWUgb2YgdGhlIHVuZGVybHlpbmcgRUlTIGluc3RhbmNlIGNvbm5lY3RlZAogICAgICAqIHRocm91Z2ggdGhlIE1hbmFnZWRDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglQcm9kdWN0IG5hbWUgb2YgdGhlIEVJUyBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBQcm9kdWN0IG5hbWUgb2YgdGhlIEVJUyBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFSVNQcm9kdWN0TmFtZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldERhdGFiYXNlUHJvZHVjdE5hbWUoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZG5hbWUiLCBzcWxlKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2RuYW1lIiwgc3FsZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBwcm9kdWN0IHZlcnNpb24gb2YgdGhlIHVuZGVybHlpbmcgRUlTIGluc3RhbmNlIGNvbm5lY3RlZAogICAgICAqIHRocm91Z2ggdGhlIE1hbmFnZWRDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglQcm9kdWN0IHZlcnNpb24gb2YgdGhlIEVJUyBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBQcm9kdWN0IHZlcnNpb24gb2YgdGhlIEVJUyBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFSVNQcm9kdWN0VmVyc2lvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldERhdGFiYXNlUHJvZHVjdFZlcnNpb24oKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZHZlcnMiLCBzcWxlKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2R2ZXJzIiwgc3FsZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCksIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgbWF4aW11bSBsaW1pdCBvbiBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKICAgICAgKiB0aGF0IGFuIEVJUyBpbnN0YW5jZSBjYW4gc3VwcG9ydCBhY3Jvc3MgY2xpZW50IHByb2Nlc3Nlcy4KICAgICAgKgotICAgICAqIEByZXR1cm4JTWF4aW11bSBsaW1pdCBmb3IgbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIE1heGltdW0gbGltaXQgZm9yIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucworICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRNYXhDb25uZWN0aW9ucygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldE1heENvbm5lY3Rpb25zKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX21heGNvbm4iKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX21heGNvbm4iKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIG5hbWUgb2YgdGhlIHVzZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4gVGhlIG5hbWUKICAgICAgKiBjb3JyZXNwb25kcyB0byB0aGUgcmVzb3VyY2UgcHJpbmNpcGFsIHVuZGVyIHdob3NlIHdob3NlIHNlY3VyaXR5IGNvbnRleHQsIGEgY29ubmVjdGlvbgogICAgICAqIHRvIHRoZSBFSVMgaW5zdGFuY2UgaGFzIGJlZW4gZXN0YWJsaXNoZWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCW5hbWUgb2YgdGhlIHVzZXIKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbmFtZSBvZiB0aGUgdXNlcgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyTmFtZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGpha2FydGEucmVzb3VyY2Uuc3BpLnNlY3VyaXR5LlBhc3N3b3JkQ3JlZGVudGlhbCBwYyA9IG1jLmdldFBhc3N3b3JkQ3JlZGVudGlhbCgpOwogICAgICAgICBpZihwYyAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gcGMuZ2V0VXNlck5hbWUoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbWMuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkuZ2V0VXNlcigpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQppbmRleCBkYWQxZDc3Li40ODJmMzMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCkBAIC0yNCwxNDggKzI0LDE0OCBAQAogLyoqCiAgKiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiB3cmFwcGVyIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMjMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzIzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgWEFSZXNvdXJjZUltcGwgaW1wbGVtZW50cyBYQVJlc291cmNlIHsKIAogICAgIFhBUmVzb3VyY2UgeGFyOwogICAgIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIFhBUmVzb3VyY2VJbXBsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGFyCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+Ci0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB4YXIgICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2VJbXBsKFhBUmVzb3VyY2UgeGFyLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLnhhciA9IHhhcjsKICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCB0aGUgZ2xvYmFsIHRyYW5zYWN0aW9uIHNwZWNpZmllZCBieSB4aWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKLSAgICAgKiBAcGFyYW0Jb25lUGhhc2UJSWYgdHJ1ZSwgdGhlIHJlc291cmNlIG1hbmFnZXIgc2hvdWxkIHVzZSBhIG9uZS1waGFzZSBjb21taXQgCi0gICAgICogICAgICAgCSAgICAgICAgCXByb3RvY29sIHRvIGNvbW1pdCB0aGUgd29yayBkb25lIG9uIGJlaGFsZiBvZiB4aWQuCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIG9uZVBoYXNlICAgIElmIHRydWUsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHNob3VsZCB1c2UgYSBvbmUtcGhhc2UgY29tbWl0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sIHRvIGNvbW1pdCB0aGUgd29yayBkb25lIG9uIGJlaGFsZiBvZiB4aWQuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KFhpZCB4aWQsIGJvb2xlYW4gb25lUGhhc2UpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vdGhlIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkIGNhbGwgaGFzIGNvbWUgaGVyZSBiZWNhc3VlCi0JLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKLQkvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAotCS8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcwotCS8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKLQkvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIC8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93CisgICAgLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKKyAgICAvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCisgICAgLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICAgICAgeGFyLmNvbW1pdCh4aWQsIG9uZVBoYXNlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbmRzIHRoZSB3b3JrIHBlcmZvcm1lZCBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2guCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBpcyB0aGUgc2FtZSBhcyB3aGF0IAotICAgICAqCQkJd2FzIHVzZWQgcHJldmlvdXNseSBpbiB0aGUgc3RhcnQgbWV0aG9kLgotICAgICAqIEBwYXJhbQlmbGFncwlPbmUgb2YgVE1TVUNDRVNTLCBUTUZBSUwsIG9yIFRNU1VTUEVORAorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQKKyAgICAgKiAgICAgICAgICAgIHdhcyB1c2VkIHByZXZpb3VzbHkgaW4gdGhlIHN0YXJ0IG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgZmxhZ3MgICAgT25lIG9mIFRNU1VDQ0VTUywgVE1GQUlMLCBvciBUTVNVU1BFTkQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICB4YXIuZW5kKHhpZCwgZmxhZ3MpOwogICAgICAgICAvL0dKQ0lOVAotCS8vbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICAvL21jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGVsbCB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgYSBoZXVyaXN0aWNhbGx5IGNvbXBsZXRlZCB0cmFuc2FjdGlvbiBicmFuY2guCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgeGFyLmZvcmdldCh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIE9idGFpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIHNldCBmb3IgdGhpcyAKKyAgICAgKiBPYnRhaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBzZXQgZm9yIHRoaXMKICAgICAgKiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcworICAgICAqIEByZXR1cm4gICAgdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcwogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0VHJhbnNhY3Rpb25UaW1lb3V0KCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5nZXRUcmFuc2FjdGlvblRpbWVvdXQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlIAotICAgICAqIHJlcHJlc2VudGVkIGJ5IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSByZXNvdWNlIG1hbmFnZXIgCisgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZQorICAgICAqIHJlcHJlc2VudGVkIGJ5IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSByZXNvdWNlIG1hbmFnZXIKICAgICAgKiBpbnN0YW5jZSByZXByZXNlbnRlZCBieSB0aGUgcGFyYW1ldGVyIHhhcmVzLgogICAgICAqCi0gICAgICogQHBhcmFtCXhhcmVzCUFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aG9zZSByZXNvdXJjZSBtYW5hZ2VyIAotICAgICAqIAkJCWluc3RhbmNlIGlzIHRvIGJlIGNvbXBhcmVkIHdpdGggdGhlIHJlc291cmNlCi0gICAgICogQHJldHVybgl0cnVlIGlmIGl0J3MgdGhlIHNhbWUgUk0gaW5zdGFuY2U7IG90aGVyd2lzZSBmYWxzZS4KKyAgICAgKiBAcGFyYW0gICAgeGFyZXMgICAgQW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdob3NlIHJlc291cmNlIG1hbmFnZXIKKyAgICAgKiAgICAgICAgICAgICBpbnN0YW5jZSBpcyB0byBiZSBjb21wYXJlZCB3aXRoIHRoZSByZXNvdXJjZQorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiBpdCdzIHRoZSBzYW1lIFJNIGluc3RhbmNlOyBvdGhlcndpc2UgZmFsc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNTYW1lUk0oWEFSZXNvdXJjZSB4YXJlcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5pc1NhbWVSTSh4YXJlcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQXNrIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIHByZXBhcmUgZm9yIGEgdHJhbnNhY3Rpb24gY29tbWl0IAorICAgICAqIEFzayB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBwcmVwYXJlIGZvciBhIHRyYW5zYWN0aW9uIGNvbW1pdAogICAgICAqIG9mIHRoZSB0cmFuc2FjdGlvbiBzcGVjaWZpZWQgaW4geGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCi0gICAgICogQHJldHVybglBIHZhbHVlIGluZGljYXRpbmcgdGhlIHJlc291cmNlIG1hbmFnZXIncyB2b3RlIG9uIHRoZSAKLSAgICAgKgkJb3V0Y29tZSBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSBwb3NzaWJsZSB2YWx1ZXMKLSAgICAgKgkJYXJlOiBYQV9SRE9OTFkgb3IgWEFfT0suIElmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHdhbnRzIAotICAgICAqCQl0byByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uLCBpdCBzaG91bGQgZG8gc28KLSAgICAgKgkJYnkgcmFpc2luZyBhbiBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4gaW4gdGhlIHByZXBhcmUgbWV0aG9kLgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEByZXR1cm4gICAgQSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSByZXNvdXJjZSBtYW5hZ2VyJ3Mgdm90ZSBvbiB0aGUKKyAgICAgKiAgICAgICAgb3V0Y29tZSBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSBwb3NzaWJsZSB2YWx1ZXMKKyAgICAgKiAgICAgICAgYXJlOiBYQV9SRE9OTFkgb3IgWEFfT0suIElmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHdhbnRzCisgICAgICogICAgICAgIHRvIHJvbGwgYmFjayB0aGUgdHJhbnNhY3Rpb24sIGl0IHNob3VsZCBkbyBzbworICAgICAqICAgICAgICBieSByYWlzaW5nIGFuIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPiBpbiB0aGUgcHJlcGFyZSBtZXRob2QuCiAgICAgICovCiAgICAgcHVibGljIGludCBwcmVwYXJlKFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIucHJlcGFyZSh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIE9idGFpbiBhIGxpc3Qgb2YgcHJlcGFyZWQgdHJhbnNhY3Rpb24gYnJhbmNoZXMgZnJvbSBhIHJlc291cmNlIG1hbmFnZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZmxhZwlPbmUgb2YgVE1TVEFSVFJTQ0FOLCBUTUVORFJTQ0FOLCBUTU5PRkxBR1MuIFRNTk9GTEFHUyAKLSAgICAgKgkJCW11c3QgYmUgdXNlZCB3aGVuIG5vIG90aGVyIGZsYWdzIGFyZSBzZXQgaW4gZmxhZ3MuCi0gICAgICogQHJldHVybglUaGUgcmVzb3VyY2UgbWFuYWdlciByZXR1cm5zIHplcm8gb3IgbW9yZSBYSURzIGZvciB0aGUgdHJhbnNhY3Rpb24gCi0gICAgICoJCWJyYW5jaGVzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBhIHByZXBhcmVkIG9yIGhldXJpc3RpY2FsbHkgCi0gICAgICoJCWNvbXBsZXRlZCBzdGF0ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgb3BlcmF0aW9uLCB0aGUgcmVzb3VyY2UKLSAgICAgKgkJbWFuYWdlciBzaG91bGQgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gICAgZmxhZyAgICBPbmUgb2YgVE1TVEFSVFJTQ0FOLCBUTUVORFJTQ0FOLCBUTU5PRkxBR1MuIFRNTk9GTEFHUworICAgICAqICAgICAgICAgICAgbXVzdCBiZSB1c2VkIHdoZW4gbm8gb3RoZXIgZmxhZ3MgYXJlIHNldCBpbiBmbGFncy4KKyAgICAgKiBAcmV0dXJuICAgIFRoZSByZXNvdXJjZSBtYW5hZ2VyIHJldHVybnMgemVybyBvciBtb3JlIFhJRHMgZm9yIHRoZSB0cmFuc2FjdGlvbgorICAgICAqICAgICAgICBicmFuY2hlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gYSBwcmVwYXJlZCBvciBoZXVyaXN0aWNhbGx5CisgICAgICogICAgICAgIGNvbXBsZXRlZCBzdGF0ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgb3BlcmF0aW9uLCB0aGUgcmVzb3VyY2UKKyAgICAgKiAgICAgICAgbWFuYWdlciBzaG91bGQgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgWGlkW10gcmVjb3ZlcihpbnQgZmxhZykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5yZWNvdmVyKGZsYWcpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEluZm9ybSB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byByb2xsIGJhY2sgd29yayBkb25lIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaAogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy90aGUgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQgY2FsbCBoYXMgY29tZSBoZXJlIGJlY2FzdWUKLQkvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdwotCS8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCi0JLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCi0JLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAotCS8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgorICAgIC8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93CisgICAgLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKKyAgICAvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCisgICAgLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCiAgICAgICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgICAgIHhhci5yb2xsYmFjayh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGZvciB0aGlzIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlY29uZHMJdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpcyBzZXQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZmFsc2UuCisgICAgICogQHBhcmFtICAgIHNlY29uZHMgICAgdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpcyBzZXQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZmFsc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnNldFRyYW5zYWN0aW9uVGltZW91dChzZWNvbmRzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTdGFydCB3b3JrIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaCBzcGVjaWZpZWQgaW4geGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzb3VyY2UKLSAgICAgKiBAcmV0dXJuCWZsYWdzCU9uZSBvZiBUTU5PRkxBR1MsIFRNSk9JTiwgb3IgVE1SRVNVTUUKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZQorICAgICAqIEByZXR1cm4gICAgZmxhZ3MgICAgT25lIG9mIFRNTk9GTEFHUywgVE1KT0lOLCBvciBUTVJFU1VNRQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy9HSkNJTlQKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKaW5kZXggOTY3ODY4Yi4uNjQxMDU1NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9IiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvc3BpIi8+Ci0gCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzcsNSArMzcsNSBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0Ii8+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKaW5kZXggY2UzMjFhZi4uOWU3ZjI1MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCkBAIC0yNiw4ICsyNiw4IEBACiAvKioKICAqIEV4ZWN1dGUgdGhlIG1ldGhvZHMgYmFzZWQgb24gdGhlIHBhcmFtZXRlcnMuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBNZXRob2RFeGVjdXRvciBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCkBAIC0zOSwxMzAgKzM5LDEzMCBAQAogICAgIC8qKgogICAgICAqIEV4Y2V1dGUgYSBzaW1wbGUgc2V0IE1ldGhvZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl2YWx1ZQlWYWx1ZSB0byBiZSBzZXQuCi0gICAgICogQHBhcmFtCW1ldGhvZAk8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0Jb2JqCU9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgorICAgICAqIEBwYXJhbSAgICB2YWx1ZSAgICBWYWx1ZSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIG1ldGhvZCAgICA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIE9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgogICAgICAqIEB0aHJvd3MgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiwgaW4gY2FzZSBvZiB0aGUgbWlzbWF0Y2ggb2YgcGFyYW1ldGVyIHZhbHVlcyBvcgotICAgICAqCQlhIHNlY3VyaXR5IHZpb2xhdGlvbi4gICAgIAorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBydW5KYXZhQmVhbk1ldGhvZChTdHJpbmcgdmFsdWUsIE1ldGhvZCBtZXRob2QsIE9iamVjdCBvYmopIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJaWYgKHZhbHVlPT1udWxsIHx8IHZhbHVlLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0gICAgCSAgICByZXR1cm47Ci0gICAgCX0KLSAgICAJdHJ5IHsKLSAgICAJICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotICAgIAkgICAgaWYgKCBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAxKSB7Ci0gICAgCSAgICAgICAgT2JqZWN0W10gdmFsdWVzID0gbmV3IE9iamVjdFsxXTsKLSAgICAJICAgIAl2YWx1ZXNbMF0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzWzBdLCB2YWx1ZSk7Ci0gICAgCSAgICAJbWV0aG9kLmludm9rZShvYmosIHZhbHVlcyk7Ci0gICAgCSAgICB9Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0KKyAgICAgICAgaWYgKHZhbHVlPT1udWxsIHx8IHZhbHVlLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOworICAgICAgICAgICAgaWYgKCBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICAgICAgT2JqZWN0W10gdmFsdWVzID0gbmV3IE9iamVjdFsxXTsKKyAgICAgICAgICAgICAgICB2YWx1ZXNbMF0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzWzBdLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgbWV0aG9kLmludm9rZShvYmosIHZhbHVlcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEV4ZWN1dGVzIHRoZSBtZXRob2QuICAgICAKKyAgICAgKiBFeGVjdXRlcyB0aGUgbWV0aG9kLgogICAgICAqCi0gICAgICogQHBhcmFtCW1ldGhvZCA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0Jb2JqCU9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgotICAgICAqIEBwYXJhbQl2YWx1ZXMJUGFyYW1ldGVyIHZhbHVlcyBmb3IgZXhlY3V0aW5nIHRoZSBtZXRob2QuCisgICAgICogQHBhcmFtICAgIG1ldGhvZCA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIE9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgorICAgICAqIEBwYXJhbSAgICB2YWx1ZXMgICAgUGFyYW1ldGVyIHZhbHVlcyBmb3IgZXhlY3V0aW5nIHRoZSBtZXRob2QuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBydW5NZXRob2QoTWV0aG9kIG1ldGhvZCwgT2JqZWN0IG9iaiwgVmVjdG9yIHZhbHVlcykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAl0cnkgewotCSAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLQkgICAgaWYgKHZhbHVlcy5zaXplKCkgIT0gcGFyYW1ldGVycy5sZW5ndGgpIHsKLQkgICAgICAgIHJldHVybjsKLQkgICAgfQotICAgIAkgICAgT2JqZWN0W10gYWN0dWFsVmFsdWVzID0gbmV3IE9iamVjdFtwYXJhbWV0ZXJzLmxlbmd0aF07Ci0gICAgCSAgICBmb3IgKGludCBpID0wOyBpPHBhcmFtZXRlcnMubGVuZ3RoIDsgaSsrKSB7Ci0gICAgCSAgICAJU3RyaW5nIHZhbCA9IChTdHJpbmcpIHZhbHVlcy5nZXQoaSk7Ci0gICAgCSAgICAJaWYgKHZhbC50cmltKCkuZXF1YWxzKCJOVUxMIikpIHsKLSAgICAJICAgIAkgICAgYWN0dWFsVmFsdWVzW2ldID0gbnVsbDsKLSAgICAJICAgIAl9IGVsc2UgewotICAgIAkgICAgCSAgICBhY3R1YWxWYWx1ZXNbaV0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzW2ldLCB2YWwpOwotICAgIAkgICAgCX0KLSAgICAJICAgIH0KLSAgICAJICAgIG1ldGhvZC5pbnZva2Uob2JqLCBhY3R1YWxWYWx1ZXMpOwotICAgIAl9Y2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7CisgICAgICAgIGlmICh2YWx1ZXMuc2l6ZSgpICE9IHBhcmFtZXRlcnMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIE9iamVjdFtdIGFjdHVhbFZhbHVlcyA9IG5ldyBPYmplY3RbcGFyYW1ldGVycy5sZW5ndGhdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9MDsgaTxwYXJhbWV0ZXJzLmxlbmd0aCA7IGkrKykgeworICAgICAgICAgICAgICAgIFN0cmluZyB2YWwgPSAoU3RyaW5nKSB2YWx1ZXMuZ2V0KGkpOworICAgICAgICAgICAgICAgIGlmICh2YWwudHJpbSgpLmVxdWFscygiTlVMTCIpKSB7CisgICAgICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlc1tpXSA9IG51bGw7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsVmFsdWVzW2ldID0gY29udmVydFR5cGUocGFyYW1ldGVyc1tpXSwgdmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZXRob2QuaW52b2tlKG9iaiwgYWN0dWFsVmFsdWVzKTsKKyAgICAgICAgfWNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb252ZXJ0cyB0aGUgdHlwZSBmcm9tIFN0cmluZyB0byB0aGUgQ2xhc3MgdHlwZS4KICAgICAgKgotICAgICAqIEBwYXJhbQl0eXBlCQlDbGFzcyBuYW1lIHRvIHdoaWNoIHRoZSBjb252ZXJzaW9uIGlzIHJlcXVpcmVkLgotICAgICAqIEBwYXJhbQlwYXJhbWV0ZXIJU3RyaW5nIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KLSAgICAgKiBAcmV0dXJuCUNvbnZlcnRlZCB2YWx1ZS4KKyAgICAgKiBAcGFyYW0gICAgdHlwZSAgICAgICAgQ2xhc3MgbmFtZSB0byB3aGljaCB0aGUgY29udmVyc2lvbiBpcyByZXF1aXJlZC4KKyAgICAgKiBAcGFyYW0gICAgcGFyYW1ldGVyICAgIFN0cmluZyB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQuCisgICAgICogQHJldHVybiAgICBDb252ZXJ0ZWQgdmFsdWUuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLiAgICAgCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHByaXZhdGUgT2JqZWN0IGNvbnZlcnRUeXBlKENsYXNzIHR5cGUsIFN0cmluZyBwYXJhbWV0ZXIpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJdHJ5IHsKLSAgICAJICAgIFN0cmluZyB0eXBlTmFtZSA9IHR5cGUuZ2V0TmFtZSgpOwotICAgIAkgICAgaWYgKCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TdHJpbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5PYmplY3QiKSkgewotICAgIAkgICAgCXJldHVybiBwYXJhbWV0ZXI7Ci0gICAgCSAgICB9Ci0gICAgCQotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiaW50IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuSW50ZWdlciIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBJbnRlZ2VyKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9Ci0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoInNob3J0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU2hvcnQiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgU2hvcnQocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYnl0ZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJ5dGUiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgQnl0ZShwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJsb25nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuTG9uZyIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBMb25nKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZmxvYXQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5GbG9hdCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBGbG9hdChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJkb3VibGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Eb3VibGUiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgRG91YmxlKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnRGVjaW1hbCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdJbnRlZ2VyIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYm9vbGVhbiIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJvb2xlYW4iKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgQm9vbGVhbihwYXJhbWV0ZXIpOwotICAgICAgICAgICAgfQkJCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTdHJpbmcgdHlwZU5hbWUgPSB0eXBlLmdldE5hbWUoKTsKKyAgICAgICAgICAgIGlmICggdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU3RyaW5nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuT2JqZWN0IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyOworICAgICAgICAgICAgfQogCi0gICAgCSAgICByZXR1cm4gcGFyYW1ldGVyOwotICAgIAl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX25mZSIsIHBhcmFtZXRlcik7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24ocGFyYW1ldGVyKyI6IE5vdCBhIHZhbGlkIHZhbHVlIGZvciB0aGlzIG1ldGhvZCAiKTsKLSAgICAJfQorICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiaW50IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuSW50ZWdlciIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoInNob3J0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU2hvcnQiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2hvcnQocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYnl0ZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJ5dGUiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQnl0ZShwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJsb25nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuTG9uZyIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMb25nKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImZsb2F0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRmxvYXQiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZG91YmxlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRG91YmxlIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERvdWJsZShwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnRGVjaW1hbCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnSW50ZWdlciIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJib29sZWFuIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQm9vbGVhbiIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCb29sZWFuKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7CisgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbmZlIiwgcGFyYW1ldGVyKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihwYXJhbWV0ZXIrIjogTm90IGEgdmFsaWQgdmFsdWUgZm9yIHRoaXMgbWV0aG9kICIpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQppbmRleCBmYzE0OWJmLi5mMDA4ZTdmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCkBAIC0yOSwzNiArMjksMzYgQEAKIC8qKgogICogU2VjdXJpdHlVdGlscyBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIyCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMgorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFNlY3VyaXR5VXRpbHMgewogCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QsIGdpdmVuIAotICAgICAqIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBzdWJqZWN0IGFuZCB0aGUgCi0gICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPi4gSXQgZmlyc3QgY2hlY2tzIGlmIHRoZSAKLSAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGlzIG51bGwgb3Igbm90LiBJZiBpdCBpcyBub3QgbnVsbCwgCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QsIGdpdmVuCisgICAgICogdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIHN1YmplY3QgYW5kIHRoZQorICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4uIEl0IGZpcnN0IGNoZWNrcyBpZiB0aGUKKyAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGlzIG51bGwgb3Igbm90LiBJZiBpdCBpcyBub3QgbnVsbCwKICAgICAgKiBpdCBjb25zdHJ1Y3RzIGEgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2l0aAogICAgICAqIHRoZSB1c2VyIGFuZCBwYXNzd29yZCBmaWVsZHMgZnJvbSB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBhbmQgcmV0dXJucyB0aGlzCi0gICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QuIElmIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IAotICAgICAqIGlzIG51bGwsIGl0IHJldHJpZXZlcyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGZyb20gCisgICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QuIElmIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CisgICAgICogaXMgbnVsbCwgaXQgcmV0cmlldmVzIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdHMgZnJvbQogICAgICAqIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgYW5kIHJldHVybnMgdGhlIGZpcnN0Ci0gICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYSAKKyAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCB3aGljaCBjb250YWlucyBhCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgaW5zdGFuY2UgZXF1aXZhbGVudAogICAgICAqIHRvIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBwYXJhbWV0ZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPgotICAgICAqIEBwYXJhbQlpbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPglnZW5lcmljIGV4Y2VwdGlvbiBpZiBvcGVyYXRpb24gZmFpbHMKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlNlY3VyaXR5RXhjZXB0aW9uPC9jb2RlPglpZiBhY2Nlc3MgdG8gdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIGlzIGRlbmllZAorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+ICAgIGdlbmVyaWMgZXhjZXB0aW9uIGlmIG9wZXJhdGlvbiBmYWlscworICAgICAqIEB0aHJvd3MgICAgPGNvZGU+U2VjdXJpdHlFeGNlcHRpb248L2NvZGU+ICAgIGlmIGFjY2VzcyB0byB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgaXMgZGVuaWVkCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBQYXNzd29yZENyZWRlbnRpYWwgZ2V0UGFzc3dvcmRDcmVkZW50aWFsKGZpbmFsIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsCiAgICAgICAgICBmaW5hbCBTdWJqZWN0IHN1YmplY3QsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogCi0JaWYgKGluZm8gPT0gbnVsbCkgeworICAgIGlmIChpbmZvID09IG51bGwpIHsKICAgICAgICAgICAgIGlmIChzdWJqZWN0ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC04OSwxNCArODksMTQgQEAKICAgICAgICAgICAgIHJldHVybiBwYzsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0d28gc3RyaW5ncyBhcmUgZXF1YWw7IGZhbHNlIG90aGVyd2lzZQotICAgICAqIAotICAgICAqIEBwYXJhbQlzdHIxCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAcGFyYW0Jc3RyMgk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSB0d28gc3RyaW5ncyBhcmUgZXF1YWwKLSAgICAgKiAgICAgICAgCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHN0cjEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzdHIyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHR3byBzdHJpbmdzIGFyZSBlcXVhbAorICAgICAqICAgICAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgc3RhdGljIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKFN0cmluZyBzdHIxLCBTdHJpbmcgc3RyMikgewogICAgICAgICBpZiAoc3RyMSA9PSBudWxsKSB7CkBAIC0xMDksMTAgKzEwOSwxMCBAQAogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0d28gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGFyZSBlcXVhbDsgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcEMxCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAcGFyYW0JcEMyCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHR3byBQYXNzd29yZENyZWRlbnRpYWxzIGFyZSBlcXVhbAotICAgICAqICAgICAgICAJZmFsc2UJb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHBDMSAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBDMiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSB0d28gUGFzc3dvcmRDcmVkZW50aWFscyBhcmUgZXF1YWwKKyAgICAgKiAgICAgICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHN0YXRpYyBwdWJsaWMgYm9vbGVhbiBpc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKFBhc3N3b3JkQ3JlZGVudGlhbCBwQzEsIFBhc3N3b3JkQ3JlZGVudGlhbCBwQzIpIHsKICAgICAgICAgaWYgKHBDMSA9PSBwQzIpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKaW5kZXggYTU1YmJmMC4uZjA2MGU3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iLiIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3V0aWwiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzMsNyArMzMsNyBAQAogICAgICAgPGphciBqYXJmaWxlPSIke2Rpc3QuZGlyfS8ke3BrZy5kaXJ9L3V0aWwuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCiAgICAgICAgIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyoiLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTEzIiBkZXBlbmRzPSJjb21waWxlIi8+CiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTE0IiBkZXBlbmRzPSJjb21waWxlIi8+CiAKQEAgLTQ0LDUgKzQ0LDUgQEAKICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KLSAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YQppbmRleCA4Mjk1MDA3Li4zNWI2ZTVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhCkBAIC0xNywxNyArMTcsMTcgQEAKIHBhY2thZ2Ugc2FtcGxlcy5lamIuc3ViY2xhc3Npbmcuc2VydmxldDsKIAogaW1wb3J0IGphdmEuaW8uKjsKLWltcG9ydCBqYXZhLnV0aWwuKjsgCi1pbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7IAotaW1wb3J0IGphdmF4Lm5hbWluZy4qOyAKLWltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOyAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsKK2ltcG9ydCBqYXZheC5uYW1pbmcuKjsKK2ltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogaW1wb3J0IGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdDsKLWltcG9ydCBqYWthcnRhLmVqYi4qOyAKK2ltcG9ydCBqYWthcnRhLmVqYi4qOwogCi1pbXBvcnQgc2FtcGxlcy5lamIuc3ViY2xhc3NpbmcuZWpiLio7IAoraW1wb3J0IHNhbXBsZXMuZWpiLnN1YmNsYXNzaW5nLmVqYi4qOwogaW1wb3J0IGNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjsKIAotcHVibGljIGNsYXNzIFNpbXBsZUJhbmtTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgeyAgCitwdWJsaWMgY2xhc3MgU2ltcGxlQmFua1NlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKIAogICBJbml0aWFsQ29udGV4dCBpbml0Q29udGV4dCA9IG51bGw7CkBAIC00MywxNCArNDMsMTQgQEAKICAgewogICB9CiAKLSAgcHVibGljIHZvaWQgZG9HZXQgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIAotICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAKKyAgcHVibGljIHZvaWQgZG9HZXQgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCisgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgfSAgCisgIH0KIAotICAvKiogaGFuZGxlcyB0aGUgSFRUUCBQT1NUIG9wZXJhdGlvbiAqKi8gCi0gIHB1YmxpYyB2b2lkIGRvUG9zdCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgCi0gICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7IAorICAvKiogaGFuZGxlcyB0aGUgSFRUUCBQT1NUIG9wZXJhdGlvbiAqKi8KKyAgcHVibGljIHZvaWQgZG9Qb3N0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQorICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgIGRvTG9va3VwKCk7CiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTaW1wbGVCYW5rU2VydmxldCBpcyBleGVjdXRpbmciKTsKICAgICBTdHJpbmcgU1NOID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoIlNTTiIpOwpAQCAtNjYsMTQgKzY2LDE0IEBACiAgICAgU3RyaW5nIHppcENvZGUgPSAiIjsKICAgICBsb25nIGN1cnJlbnRTYXZpbmdzQmFsYW5jZSA9IDA7CiAgICAgbG9uZyBjdXJyZW50Q2hlY2tpbmdCYWxhbmNlID0gMDsKLSAgICAgCisKICAgICBTdHJpbmcgYWN0aW9uID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoImFjdGlvbiIpOwogICAgIGlmIChhY3Rpb24uZXF1YWxzKCJDcmVhdGUiKSkKICAgICB7CiAgICAgICBtZXNzYWdlID0gIkFkZCBDdXN0b21lciI7CiAgICAgICBqc3AgPSAiL1NpbXBsZUJhbmtBZGQuanNwIjsKICAgICB9Ci0gICAgZWxzZSBpZiAoYWN0aW9uLmVxdWFscygiQWRkIEN1c3RvbWVyIikpIAorICAgIGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoIkFkZCBDdXN0b21lciIpKQogICAgIHsKICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWRkIEN1c3RvbWVyIGJ1dHRvbiBwcmVzc2VkIik7CiAgICAgICBTU04gPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiU1NOIik7CkBAIC05MCw3ICs5MCw3IEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5ncyA9IGN1c3RvbWVyU2F2aW5nc0hvbWUuY3JlYXRlKFNTTiwgbGFzdE5hbWUsIGZpcnN0TmFtZSwgYWRkcmVzczEsIGFkZHJlc3MyLCBjaXR5LCBzdGF0ZSwgemlwQ29kZSk7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBjcmVhdGUgdGhlIGN1c3RvbWVyIHNhdmluZ3MgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIG1lc3NhZ2UgPSAiQ3VzdG9tZXIgQWRkZWQuIjsKQEAgLTEwMyw3ICsxMDMsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSBjdXN0b21lclNhdmluZ3NIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBqc3AgPSAiL1NpbXBsZUJhbmtFZGl0LmpzcCI7CkBAIC0xMTUsNyArMTE1LDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gY3VzdG9tZXJTYXZpbmdzSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTik7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBmaW5kIHRoZSBjdXN0b21lciBzYXZpbmdzIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBtZXNzYWdlID0gIkRlbGV0ZSBDdXN0b21lciI7CkBAIC0xMjcsMTIgKzEyNywxMiBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3NIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKS5yZW1vdmUoKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGRlbGV0ZSB0aGUgY3VzdG9tZXIgc2F2aW5ncyBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBtZXNzYWdlID0gIkN1c3RvbWVyIERlbGV0ZWQuIjsKICAgICAgIGpzcCA9ICIvU2ltcGxlQmFua01lc3NhZ2UuanNwIjsKLSAgICB9ICAKKyAgICB9CiAKIAogICAgIGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoIlVwZGF0ZSIpKQpAQCAtMTQyLDcgKzE0Miw3IEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5ncyA9IChDdXN0b21lclNhdmluZ3MpY3VzdG9tZXJTYXZpbmdzSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTik7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBmaW5kIHRoZSBjdXN0b21lciBzYXZpbmdzIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgICAgICBjdXN0b21lckNoZWNraW5nID0gKEN1c3RvbWVyQ2hlY2tpbmcpY3VzdG9tZXJDaGVja2luZ0hvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZmluZCB0aGUgY3VzdG9tZXIgY2hlY2tpbmcgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KIApAQCAtMjExLDkgKzIxMSw5IEBACiAgICAgUmVxdWVzdERpc3BhdGNoZXIgZGlzcGF0Y2hlciA9IGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0UmVxdWVzdERpc3BhdGNoZXIoanNwKTsKICAgICBkaXNwYXRjaGVyLmluY2x1ZGUocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIHJldHVybjsKLSAgfSAKKyAgfQogCi0gIHB1YmxpYyB2b2lkIGRvTG9va3VwKCkgCisgIHB1YmxpYyB2b2lkIGRvTG9va3VwKCkKICAgewogICAgIHRyeSB7CiAgICAgICBpbml0Q29udGV4dCA9IG5ldyBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3NxbC9kcm9wQmFua1RhYmxlcy5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCmluZGV4IGRmOWRmMzQuLjMzYTcwNjkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3NxbC9kcm9wQmFua1RhYmxlcy5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbApAQCAtMSArMSBAQAotZHJvcCB0YWJsZSBjdXN0b21lcjI7DQorZHJvcCB0YWJsZSBjdXN0b21lcjI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGUyY2M3NWQuLmRjMTljOWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNiArMTUsMTYgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc3ViY2xhc3NpbmciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXN1YmNsYXNzaW5nIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSJzdWJjbGFzc2luZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9idWlsZC54bWwKaW5kZXggMWRiZjhkNi4uMzlhZTA0MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvYnVpbGQueG1sCkBAIC0zMiw3ICszMiw3IEBACiAgICAgJmNvbW1vbkJ1aWxkOwogICAgICZjb21tb25SdW47CiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwotICAgIAorCiA8IS0tCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLHNldHVwLGRlcGxveS13YXIsIHJ1bi13YXIsIHVuZGVwbG95LXdhciwgZGVwbG95LWVhciwgcnVuLWVhciwgdW5kZXBsb3ktZWFyLCB1bnNldHVwIi8+CiAKQEAgLTQxLDE1ICs0MSwxNSBAQAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCwgZGVwbG95LWVhciwgc2V0dXAsIHJ1bi1lYXIsIHVuc2V0dXAsIHVuZGVwbG95LWVhciIvPgogCiA8IS0tCi0JPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgotCTxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1bi13YXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhciIvPgotCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWVhciIvPgotCTxhbnRjYWxsIHRhcmdldD0icnVuLWVhciIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktZWFyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi13YXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWVhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWVhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktZWFyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CiAgICAgPC90YXJnZXQ+CiAtLT4KIApAQCAtNTcsNyArNTcsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICAgIDxhbnQgZGlyPSJyYSIgdGFyZ2V0PSJjbGVhbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb25uZWN0b3IiPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvc2ltcGxlQmFuay5zcWwiLz4KQEAgLTY1LDcgKzY1LDcgQEAKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1wb29sIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtcmVzb3VyY2UiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1hZG1pbi1vYmplY3QiLz4KLSAgICAgICAgCisKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1wb29sIj4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jb25uZWN0b3ItY29ubnBvb2wtY29tbW9uIj4KQEAgLTc0LDkgKzc0LDkgQEAKICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmNvbnBvb2wubmFtZSIgdmFsdWU9ImVtYmVkZGVkLXJhLXBvb2wiLz4KICAgICAgICAgICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtb3JhY2xlLXByb3BzIj4KLQkJPHBhcmFtIG5hbWU9InBvb2wudHlwZSIgdmFsdWU9ImNvbm5lY3RvciIvPgotCQk8cGFyYW0gbmFtZT0iY29ucG9vbC5uYW1lIiB2YWx1ZT0iZW1iZWRkZWQtcmEtcG9vbCIvPgotCQk8L2FudGNhbGw+CisgICAgICAgIDxwYXJhbSBuYW1lPSJwb29sLnR5cGUiIHZhbHVlPSJjb25uZWN0b3IiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImNvbnBvb2wubmFtZSIgdmFsdWU9ImVtYmVkZGVkLXJhLXBvb2wiLz4KKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlIj4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jb25uZWN0b3ItcmVzb3VyY2UtY29tbW9uIj4KQEAgLTg5LDE3ICs4OSwxNyBAQAogICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1hZG1pbi1vYmplY3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJjcmVhdGUtYWRtaW4tb2JqZWN0IC0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IC0tcmVzdHlwZSBjb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW4gLS1yYW5hbWUgJHthcHBuYW1lfUFwcCNqZGJjcmEgLS1wcm9wZXJ0eSBUYWJsZU5hbWU9Y3VzdG9tZXIyOkpuZGlOYW1lPWpkYmMvZWpiLXN1YmNsYXNzaW5nOlNjaGVtYU5hbWU9Y29ubmVjdG9yOk5vT2ZSb3dzPTEiLz4KLQkgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSJlaXMvamRiY0FkbWluIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iZWlzL2pkYmNBZG1pbiIvPgogICAgICAgICAgPC9hbnRjYWxsPgogICAgICA8L3RhcmdldD4KIAogICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1hZG1pbi1vYmplY3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImRlbGV0ZS1hZG1pbi1vYmplY3QiLz4KLQkgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSBlaXMvamRiY0FkbWluIi8+Ci0JIDwvYW50Y2FsbD4KLQkgPC90YXJnZXQ+Ci0gICAgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iZGVsZXRlLWFkbWluLW9iamVjdCIvPgorICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IGVpcy9qZGJjQWRtaW4iLz4KKyAgICAgPC9hbnRjYWxsPgorICAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icmVzdGFydCI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTEwNywxNiArMTA3LDE2IEBACiAgICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJhLWNvbmZpZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImNyZWF0ZS1yZXNvdXJjZS1hZGFwdGVyLWNvbmZpZyAgLS1wcm9wZXJ0eSBSQVByb3BlcnR5PVZBTElEIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCNqZGJjcmEiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke2FwcG5hbWV9QXBwI2pkYmNyYSIvPgogICAgICAgICAgPC9hbnRjYWxsPgogICAgICA8L3RhcmdldD4KIAogICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yYS1jb25maWciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImRlbGV0ZS1yZXNvdXJjZS1hZGFwdGVyLWNvbmZpZyIvPgotCSAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7YXBwbmFtZX1BcHAjamRiY3JhIi8+Ci0JIDwvYW50Y2FsbD4KLQkgPC90YXJnZXQ+CisgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iZGVsZXRlLXJlc291cmNlLWFkYXB0ZXItY29uZmlnIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCNqZGJjcmEiLz4KKyAgICAgPC9hbnRjYWxsPgorICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb25uZWN0b3IiPgpAQCAtMTI3LDcgKzEyNyw3IEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtcG9vbCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWFkbWluLW9iamVjdCIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcG9vbCI+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtY29ubmVjdG9yLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5jb25wb29sLm5hbWUiIHZhbHVlPSJlbWJlZGRlZC1yYS1wb29sIi8+CkBAIC0xMzcsNyArMTM3LDcgQEAKICAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2UiPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWNvbm5lY3Rvci1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3Iuam5kaS5uYW1lIiB2YWx1ZT0iamRiYy9lamItc3ViY2xhc3NpbmciLz4KLQkJPC9hbnRjYWxsPgorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KQEAgLTE1Myw5ICsxNTMsOSBAQAogICAgICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogQ29tcGlsaW5nIHRlc3Qgc291cmNlIGZpbGVzIiBsZXZlbD0idmVyYm9zZSIvPgogICAgICAgPGphdmFjIHNyY2Rpcj0ic2VydmxldCIKICAgICAgICAgIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgotCSBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofTpyYS9wdWJsaXNoL2ludGVybmFsL2NsYXNzZXMiCisgICAgIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9OnJhL3B1Ymxpc2gvaW50ZXJuYWwvY2xhc3NlcyIKICAgICAgICAgIGRlYnVnPSJvbiIKLQkgZmFpbG9uZXJyb3I9InRydWUiLz4KKyAgICAgZmFpbG9uZXJyb3I9InRydWUiLz4KICAgICAgPC90YXJnZXQ+CiAKIApAQCAtMTY0LDM0ICsxNjQsMzQgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgIDxhbnQgZGlyPSJyYSIgdGFyZ2V0PSJhc3NlbWJsZSIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgIDwvYW50Y2FsbD4KLSAgICAgICAKKwogICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgogICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICA8L2FudGNhbGw+CiAKLSAgICAKKwogICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gICAgCi0gICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIAorICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CisgICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiCiAgICAgIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KLSAgICA8L2ZpbGVzZXQ+ICAKKyAgICA8L2ZpbGVzZXQ+CiAgICAgPGZpbGVzZXQgZGlyPSJyYS9wdWJsaXNoL2xpYiI+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLnJhciIvPgogICAgIDwvZmlsZXNldD4KICAgICA8L2Vhcj4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1yYS1jb25maWciLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CkBAIC0yMDAsMjcgKzIwMCwyNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LXdhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi13YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWJjbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0id2ViLXRvLWVqYiAoc3RhbmQtYWxvbmUgd2FyIGJhc2VkKSIvPgotCTwvYW50Y2FsbD4KKyAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0id2ViLXRvLWVqYiAoc3RhbmQtYWxvbmUgd2FyIGJhc2VkKSIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tZWpiIChlYXIgYmFzZWQpIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tZWpiIChlYXIgYmFzZWQpIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtcmEtY29uZmlnIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktd2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggMWQxMjAwZC4uZGY0YmI5MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjksMjAgKzI5LDIwIEBACiAgICAgICAgIDxyZXMtcmVmLW5hbWU+amRiYy9TaW1wbGVCYW5rPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9lamItc3ViY2xhc3Npbmc8L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4gCi0gICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPiAKLSAgICAgPGJlYW4tcG9vbD4gCi0gICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPiAKLSAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PiAKLSAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPiAKLSAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgPC9iZWFuLXBvb2w+IAotICAgICAgPGJlYW4tY2FjaGU+IAotICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPiAKLSAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4gCi0gICAgICAgIDxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9yZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4gCi0gICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PiAKLSAgICAgIDwvYmVhbi1jYWNoZT4gCisgICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPgorICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4KKyAgICAgPGJlYW4tcG9vbD4KKyAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+CisgICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4KKyAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPgorICAgICAgICAgPHBvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgIDwvYmVhbi1wb29sPgorICAgICAgPGJlYW4tY2FjaGU+CisgICAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+CisgICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICAgIDxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9yZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkxSVTwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+CisgICAgICA8L2JlYW4tY2FjaGU+CiAgICAgPC9lamI+CiAgICAgPGVqYj4KICAgICAgIDxlamItbmFtZT5DdXN0b21lckNoZWNraW5nRUpCPC9lamItbmFtZT4KQEAgLTUxLDIwICs1MSwyMCBAQAogICAgICAgICA8cmVzLXJlZi1uYW1lPmpkYmMvU2ltcGxlQmFuazwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmpkYmMvZWpiLXN1YmNsYXNzaW5nPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+IAotICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4gCi0gICAgIDxiZWFuLXBvb2w+IAotICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4gCi0gICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4gCisgICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPgorICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4KKyAgICAgPGJlYW4tcG9vbD4KKyAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+CisgICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4KKyAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPgogICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgotICAgICAgPC9iZWFuLXBvb2w+IAotICAgICAgPGJlYW4tY2FjaGU+IAorICAgICAgPC9iZWFuLXBvb2w+CisgICAgICA8YmVhbi1jYWNoZT4KICAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4KICAgICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgogICAgICAgICAgIDxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9yZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4KICAgICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4KLSAgICAgIDwvYmVhbi1jYWNoZT4gCisgICAgICA8L2JlYW4tY2FjaGU+CiAgICAgPC9lamI+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KIDwvc3VuLWVqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyLmphdmEKaW5kZXggNTkyMmYzMS4uMzYxNWUxNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXIuamF2YQpAQCAtNDYsNCArNDYsNCBAQAogCiB9CiAKLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKaW5kZXggZmYxNWU3ZS4uODlkYzMyMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKQEAgLTIyLDQgKzIyLDQgQEAKIHsKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQppbmRleCBlZTBkMTdjLi40YjU0NDQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQpAQCAtOTQsNSArOTQsNSBAQAogICB9CiAKIH0KLSAgICAKLSAgICAKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyRUpCLmphdmEKaW5kZXggMDUyMGI2MC4uMDcyMjBkYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJFSkIuamF2YQpAQCAtNTMsNyArNTMsNyBAQAogCiAgIHB1YmxpYyBTdHJpbmcgZ2V0QWRkcmVzczEoKQogICB7Ci0gICAgcmV0dXJuIGFkZHJlc3MxOyAKKyAgICByZXR1cm4gYWRkcmVzczE7CiAgIH0KIAogICBwdWJsaWMgU3RyaW5nIGdldEFkZHJlc3MyKCkKQEAgLTEzOSw3ICsxMzksNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNRTCBleGNlcHRpb24gb2NjdXJlZCBpbiBlamJSZW1vdmUgbWV0aG9kIik7CiAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICB9Ci0gICAgCisKICAgfQogCiAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkKQEAgLTIwNiwxMiArMjA2LDEyIEBACiAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1FMRXhjZXB0aW9uIG9jY3VycmVkIGluIGVqYkxvYWQoKSBtZXRob2QiKTsKICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfSAgIAorICAgIH0KICAgfQogCiAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIH0KLSAgICAgIAotICAgIAotICAgIAorCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEKaW5kZXggMjc0MDY5Mi4uYzQ1YTFjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhCkBAIC0yMiw0ICsyMiw0IEBACiB7CiB9CiAKLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhCmluZGV4IGYzMGI1MDYuLmIwY2U3YjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YQpAQCAtOTUsNiArOTUsNiBAQAogICB9CiAKIH0KLSAgICAgIAotICAgIAotICAgIAorCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvYnVpbGQucHJvcGVydGllcwppbmRleCBlZTJlY2EwLi5mZDIxYzNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvYnVpbGQucHJvcGVydGllcwpAQCAtMTQsNyArMTQsNyBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKICMKIAotICAgIAorCiAjIyMgQ29tcG9uZW50IFByb3BlcnRpZXMgIyMjCiBzcmMuZGlyPXNyYwogY29tcG9uZW50LnB1Ymxpc2guaG9tZT0uCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL2J1aWxkLnhtbAppbmRleCBjYjY2YTQ1Li4zYWNlZWYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9idWlsZC54bWwKQEAgLTIzLDYyICsyMyw2MiBAQAogCiA8cHJvamVjdCBuYW1lPSJKREJDQ29ubmVjdG9yIHRvcCBsZXZlbCIgZGVmYXVsdD0iYnVpbGQiPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9qZGJjcmEvc3BpIi8+Ci0gICAgCisKICAgICAmY29tbW9uOwogICAgICZ0ZXN0Y29tbW9uOwogICAgIDxwcm9wZXJ0eSBmaWxlPSIuL2J1aWxkLnByb3BlcnRpZXMiLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUsYXNzZW1ibGUiIC8+Ci0gICAgICAgICAgCisKIAogICAgIDwhLS0gaW5pdC4gSW5pdGlhbGl6YXRpb24gaW52b2x2ZXMgY3JlYXRpbmcgcHVibGlzaGluZyBkaXJlY3RvcmllcyBhbmQKLSAgICAgICAgIE9TIHNwZWNpZmljIHRhcmdldHMuIC0tPiAKKyAgICAgICAgIE9TIHNwZWNpZmljIHRhcmdldHMuIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iaW5pdCIgZGVzY3JpcHRpb249IiR7Y29tcG9uZW50Lm5hbWV9IGluaXRpYWxpemF0aW9uIj4KICAgICAgICAgPHRzdGFtcD4KICAgICAgICAgICAgIDxmb3JtYXQgcHJvcGVydHk9InN0YXJ0LnRpbWUiIHBhdHRlcm49Ik1NL2RkL3l5eXkgaGg6bW0gYWEiLz4KLSAgICAgICAgPC90c3RhbXA+ICAgIAorICAgICAgICA8L3RzdGFtcD4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQnVpbGRpbmcgY29tcG9uZW50ICR7Y29tcG9uZW50Lm5hbWV9Ii8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIvPgotICAgICAgICA8bWtkaXIgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iLz4gICAgCisgICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIvPgogICAgIDwvdGFyZ2V0PgotICAgIDwhLS0gY29tcGlsZSAtLT4gCisgICAgPCEtLSBjb21waWxlIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdCIKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDb21waWxlIGNvbS9zdW4vKiBjb20vaXBsYW5ldC8qIHNvdXJjZXMiPiAgCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0iQ29tcGlsZSBjb20vc3VuLyogY29tL2lwbGFuZXQvKiBzb3VyY2VzIj4KICAgICAgICAgPCEtLTxlY2hvIG1lc3NhZ2U9IkNvbm5lY3RvciBhcGkgcmVzaWRlcyBpbiAke2Nvbm5lY3Rvci1hcGkuamFyfSIvPi0tPgotICAgICAgICA8amF2YWMgc3JjZGlyPSIke3NyYy5kaXJ9IiAKKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iJHtzcmMuZGlyfSIKICAgICAgICAgICAgICAgIGRlc3RkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4KICAgICAgICAgICAgIDxjbGFzc3BhdGg+Ci0JCTxmaWxlc2V0IGRpcj0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzIj4KLQkJICAgIDxpbmNsdWRlIG5hbWU9IioqLyouamFyIiAvPgotCQk8L2ZpbGVzZXQ+CisgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzIj4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouamFyIiAvPgorICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImNvbS9zdW4vamRiY3JhLyoqIi8+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJjb20vc3VuL2FwcHNlcnYvKioiLz4KICAgICAgICAgPC9qYXZhYz4KICAgICA8L3RhcmdldD4KLSAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQiLz4KIAotICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSI+ICAgIAotICAgIAkKLQk8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjLmphciIgCi0gICAgICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosIAotICAgICAgICAgICAgY29tL3N1bi9hcHBzZXJ2LyoqLyosIGNvbS9zdW4vamRiY3JhL3V0aWwvKiovKiwgY29tL3N1bi9qZGJjcmEvY29tbW9uLyoqLyoiLz4gCi0gICAJCi0gICAgICAgIDxjb3B5IGZpbGU9IiR7c3JjLmRpcn0vY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwiIAotICAgICAgICAgICAgICAgIHRvZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiPgorCisgICAgPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiYy5qYXIiCisgICAgICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosCisgICAgICAgICAgICBjb20vc3VuL2FwcHNlcnYvKiovKiwgY29tL3N1bi9qZGJjcmEvdXRpbC8qKi8qLCBjb20vc3VuL2pkYmNyYS9jb21tb24vKiovKiIvPgorCisgICAgICAgIDxjb3B5IGZpbGU9IiR7c3JjLmRpcn0vY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwiCisgICAgICAgICAgICAgICAgdG9maWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjcmEucmFyIiAKLQkJYmFzZWRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9IiBpbmNsdWRlcz0iamRiYy5qYXIiPgorICAgICAgIDxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmNyYS5yYXIiCisgICAgICAgIGJhc2VkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIgaW5jbHVkZXM9ImpkYmMuamFyIj4KIAotICAgCQk8bWV0YWluZiBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgogCi0gICAJPGRlbGV0ZSBmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIi8+Ci0JCisgICAgICAgPGRlbGV0ZSBmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIi8+CisKICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXNjcmlwdGlvbj0iQ2xlYW4gdGhlIGJ1aWxkIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCmluZGV4IDlmODM5OWEuLmI2ZWYzMGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQpAQCAtMjAsMTUgKzIwLDE1IEBACiBpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOwogCiAvKioKLSAqIFRoZSA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uIAorICogVGhlIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24KICAqIHNlcnZlciB3aWxsIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4gQW4gYXBwbGljYXRpb24gcHJvZ3JhbSB3b3VsZCBiZSBhYmxlCi0gKiB0byB1c2UgdGhpcyBpbnRlcmZhY2UgdG8gZG8gdGhlIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCBieSBTdW5PTkUgCisgKiB0byB1c2UgdGhpcyBpbnRlcmZhY2UgdG8gZG8gdGhlIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCBieSBTdW5PTkUKICAqIGFwcGxpY2F0aW9uIHNlcnZlci4KLSAqIDxwPkEgc2FtcGxlIGNvZGUgZm9yIGdldHRpbmcgZHJpdmVyJ3MgY29ubmVjdGlvbiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBsaWtlIAorICogPHA+QSBzYW1wbGUgY29kZSBmb3IgZ2V0dGluZyBkcml2ZXIncyBjb25uZWN0aW9uIGltcGxlbWVudGF0aW9uIHdvdWxkIGxpa2UKICAqIHRoZSBmb2xsb3dpbmcuCiAgKiA8cHJlPgogICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICBjb20uc3VuLmFwcHNlcnYuRGF0YVNvdXJjZSBkcyA9IChjb20uc3VuLmFwcHNlcnYuRGF0YVNPdXJjZSkgaWMubG9va3VwKCJqZGJjL1BvaW50QmFzZSIpOyAKKyAgICAgY29tLnN1bi5hcHBzZXJ2LkRhdGFTb3VyY2UgZHMgPSAoY29tLnN1bi5hcHBzZXJ2LkRhdGFTT3VyY2UpIGljLmxvb2t1cCgiamRiYy9Qb2ludEJhc2UiKTsKICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgIENvbm5lY3Rpb24gZHJpdmVyY29uID0gZHMuZ2V0Q29ubmVjdGlvbihjb24pOwogCkBAIC0zNiwxMyArMzYsMTMgQEAKIAogICAgICBjb24uY2xvc2UoKTsKICAgIDwvcHJlPgotICogCisgKgogICogQGF1dGhvciBCaW5vZCBQLkcKICAqLwogcHVibGljIGludGVyZmFjZSBEYXRhU291cmNlIGV4dGVuZHMgamF2YXguc3FsLkRhdGFTb3VyY2UgewogCiAgICAgLyoqCi0gICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIgCisgICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIKICAgICAgKiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24gc2VydmVyLiBJZiBhbiBhY3R1YWwgY29ubmVjdGlvbiBpcwogICAgICAqIHN1cHBsaWVkIGFzIGFyZ3VtZW50LCB0aGVuIGl0IHdpbGwgYmUganVzdCByZXR1cm5lZC4KICAgICAgKgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKaW5kZXggYzI4MjJlMi4uNmEzNjZiMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCkBAIC0yNywyMiArMjcsMjIgQEAKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CiAvKioKLSAqIFV0aWxpdHkgY2xhc3MsIHdoaWNoIHdvdWxkIGNyZWF0ZSBuZWNlc3NhcnkgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZSAKKyAqIFV0aWxpdHkgY2xhc3MsIHdoaWNoIHdvdWxkIGNyZWF0ZSBuZWNlc3NhcnkgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZQogICogc3BlY2lmaWNhdGlvbi4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRwotICogQHNlZQkJY29tLnN1bi5qZGJjcmEuY29tbW9uLkRhdGFTb3VyY2VTcGVjCi0gKiBAc2VlCQljb20uc3VuLmpkYmNyYS51dGlsLk1ldGhvZEV4Y2VjdXRvcgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKKyAqIEBzZWUgICAgICAgIGNvbS5zdW4uamRiY3JhLmNvbW1vbi5EYXRhU291cmNlU3BlYworICogQHNlZSAgICAgICAgY29tLnN1bi5qZGJjcmEudXRpbC5NZXRob2RFeGNlY3V0b3IKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2VPYmplY3RCdWlsZGVyIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAKICAgICBwcml2YXRlIERhdGFTb3VyY2VTcGVjIHNwZWM7Ci0gICAgCisKICAgICBwcml2YXRlIEhhc2h0YWJsZSBkcml2ZXJQcm9wZXJ0aWVzID0gbnVsbDsKLSAgICAKLSAgICBwcml2YXRlIE1ldGhvZEV4ZWN1dG9yIGV4ZWN1dG9yID0gbnVsbDsgICAgCi0gICAgCisKKyAgICBwcml2YXRlIE1ldGhvZEV4ZWN1dG9yIGV4ZWN1dG9yID0gbnVsbDsKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC01MCwxNjcgKzUwLDE2NyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdCBhIERhdGFTb3VyY2UgT2JqZWN0IGZyb20gdGhlIHNwZWMuCi0gICAgICogCi0gICAgICogQHBhcmFtCXNwZWMJPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtICAgIHNwZWMgICAgPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhU291cmNlT2JqZWN0QnVpbGRlcihEYXRhU291cmNlU3BlYyBzcGVjKSB7Ci0gICAgCXRoaXMuc3BlYyA9IHNwZWM7Ci0gICAgCWV4ZWN1dG9yID0gbmV3IE1ldGhvZEV4ZWN1dG9yKCk7CisgICAgICAgIHRoaXMuc3BlYyA9IHNwZWM7CisgICAgICAgIGV4ZWN1dG9yID0gbmV3IE1ldGhvZEV4ZWN1dG9yKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0IHRoZSBEYXRhU291cmNlIE9iamVjdCBmcm9tIHRoZSBzcGVjLgogICAgICAqCi0gICAgICogQHJldHVybglPYmplY3QgY29uc3RydWN0ZWQgdXNpbmcgdGhlIERhdGFTb3VyY2VTcGVjLgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IGlmIHRoZSBjbGFzcyBpcyBub3QgZm91bmQgb3Igc29tZSBpc3N1ZSBpbiBleGVjdXRpbmcKLSAgICAgKgkJc29tZSBtZXRob2QuCisgICAgICogQHJldHVybiAgICBPYmplY3QgY29uc3RydWN0ZWQgdXNpbmcgdGhlIERhdGFTb3VyY2VTcGVjLgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IGlmIHRoZSBjbGFzcyBpcyBub3QgZm91bmQgb3Igc29tZSBpc3N1ZSBpbiBleGVjdXRpbmcKKyAgICAgKiAgICAgICAgc29tZSBtZXRob2QuCiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjb25zdHJ1Y3REYXRhU291cmNlT2JqZWN0KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlkcml2ZXJQcm9wZXJ0aWVzID0gcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKHNwZWMpOworICAgICAgICBkcml2ZXJQcm9wZXJ0aWVzID0gcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKHNwZWMpOwogICAgICAgICBPYmplY3QgZGF0YVNvdXJjZU9iamVjdCA9IGdldERhdGFTb3VyY2VPYmplY3QoKTsKICAgICAgICAgTWV0aG9kW10gbWV0aG9kcyA9IGRhdGFTb3VyY2VPYmplY3QuZ2V0Q2xhc3MoKS5nZXRNZXRob2RzKCk7CiAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gbWV0aG9kc1tpXS5nZXROYW1lKCk7Ci0JICAgIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFVzZXIiKSl7CSAgICAJCi0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UGFzc3dvcmQiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9naW5UaW1lT3V0IikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dXcml0ZXIiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dXUklURVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFiYXNlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YVNvdXJjZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGVzY3JpcHRpb24iKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE5ldHdvcmtQcm90b2NvbCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UG9ydE51bWJlciIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFJvbGVOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFNlcnZlck5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFN0YXRlbWVudHMiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhTVEFURU1FTlRTKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRJbml0aWFsUG9vbFNpemUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5JTklUSUFMUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1pblBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUlOUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heElkbGVUaW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYSURMRVRJTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFByb3BlcnR5Q3ljbGUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QUk9QRVJUWUNZQ0xFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAoZHJpdmVyUHJvcGVydGllcy5jb250YWluc0tleShtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpKXsKLQkgICAgCVZlY3RvciB2YWx1ZXMgPSAoVmVjdG9yKSBkcml2ZXJQcm9wZXJ0aWVzLmdldChtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpOwotCSAgICAgICAgZXhlY3V0b3IucnVuTWV0aG9kKG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCwgdmFsdWVzKTsKLQkgICAgfQorICAgICAgICBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRVc2VyIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBhc3N3b3JkIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ2luVGltZU91dCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9nV3JpdGVyIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HV1JJVEVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhYmFzZU5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFTb3VyY2VOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERlc2NyaXB0aW9uIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE5ldHdvcmtQcm90b2NvbCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UG9ydE51bWJlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFJvbGVOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFNlcnZlck5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhTdGF0ZW1lbnRzIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYU1RBVEVNRU5UUyksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0SW5pdGlhbFBvb2xTaXplIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuSU5JVElBTFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNaW5Qb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1JTlBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhQb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhJZGxlVGltZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWElETEVUSU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQcm9wZXJ0eUN5Y2xlIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUFJPUEVSVFlDWUNMRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKGRyaXZlclByb3BlcnRpZXMuY29udGFpbnNLZXkobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKSl7CisgICAgICAgICAgICBWZWN0b3IgdmFsdWVzID0gKFZlY3RvcikgZHJpdmVyUHJvcGVydGllcy5nZXQobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKTsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bk1ldGhvZChtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QsIHZhbHVlcyk7CisgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gZGF0YVNvdXJjZU9iamVjdDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGV4dHJhIGRyaXZlciBwcm9wZXJ0aWVzIGZyb20gdGhlIERhdGFTb3VyY2VTcGVjIG9iamVjdCBhbmQKICAgICAgKiBwYXJzZSB0aGVtIHRvIGEgc2V0IG9mIG1ldGhvZE5hbWUgYW5kIHBhcmFtZXRlcnMuIFByZXBhcmUgYSBoYXNodGFibGUKICAgICAgKiBjb250YWluaW5nIHRoZXNlIGRldGFpbHMgYW5kIHJldHVybi4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcGVjCTxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcmV0dXJuCUhhc2h0YWJsZSBjb250YWluaW5nIG1ldGhvZCBuYW1lcyBhbmQgcGFyYW1ldGVycywKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCUlmIGRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgYW5kIHByb3BlcnR5IHN0cmluZwotICAgICAqCQkJCQlpcyBub3QgbnVsbC4KKyAgICAgKiBAcGFyYW0gICAgc3BlYyAgICA8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICBIYXNodGFibGUgY29udGFpbmluZyBtZXRob2QgbmFtZXMgYW5kIHBhcmFtZXRlcnMsCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBJZiBkZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGFuZCBwcm9wZXJ0eSBzdHJpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgaXMgbm90IG51bGwuCiAgICAgICovCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKERhdGFTb3VyY2VTcGVjIHNwZWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJU3RyaW5nIGRlbGltID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKKyAgICAgICAgU3RyaW5nIGRlbGltID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKIAogICAgICAgICBTdHJpbmcgcHJvcCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwotCWlmICggcHJvcCA9PSBudWxsIHx8IHByb3AudHJpbSgpLmVxdWFscygiIikpIHsKLQkgICAgcmV0dXJuIG5ldyBIYXNodGFibGUoKTsKLQl9IGVsc2UgaWYgKGRlbGltID09IG51bGwgfHwgZGVsaW0uZXF1YWxzKCIiKSkgewotCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24gKCJEZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGluIHRoZSBjb25maWd1cmF0aW9uIik7Ci0JfQotCQotCUhhc2h0YWJsZSBwcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOwotCWRlbGltID0gZGVsaW0udHJpbSgpOwkKLQlTdHJpbmcgc2VwID0gZGVsaW0rZGVsaW07Ci0JaW50IHNlcExlbiA9IHNlcC5sZW5ndGgoKTsKLQlTdHJpbmcgY2FjaGUgPSBwcm9wOwotCVZlY3RvciBtZXRob2RzID0gbmV3IFZlY3RvcigpOwotCQotCXdoaWxlIChjYWNoZS5pbmRleE9mKHNlcCkgIT0gLTEpIHsKLQkgICAgaW50IGluZGV4ID0gY2FjaGUuaW5kZXhPZihzZXApOwotCSAgICBTdHJpbmcgbmFtZSA9IGNhY2hlLnN1YnN0cmluZygwLGluZGV4KTsKLQkgICAgaWYgKG5hbWUudHJpbSgpICE9ICIiKSB7Ci0JICAgICAgICBtZXRob2RzLmFkZChuYW1lKTsKLQkgICAgCWNhY2hlID0gY2FjaGUuc3Vic3RyaW5nKGluZGV4K3NlcExlbik7Ci0JICAgIH0KLQl9Ci0JCi0gICAgCUVudW1lcmF0aW9uIGFsbE1ldGhvZHMgPSBtZXRob2RzLmVsZW1lbnRzKCk7Ci0gICAgCXdoaWxlIChhbGxNZXRob2RzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgCSAgICBTdHJpbmcgb25lTWV0aG9kID0gKFN0cmluZykgYWxsTWV0aG9kcy5uZXh0RWxlbWVudCgpOyAgICAJICAgIAotICAgIAkgICAgaWYgKCFvbmVNZXRob2QudHJpbSgpLmVxdWFscygiIikpIHsKLSAgICAJICAgIAlTdHJpbmcgbWV0aG9kTmFtZSA9IG51bGw7Ci0gICAgCSAgICAJVmVjdG9yIHBhcm1zID0gbmV3IFZlY3RvcigpOwotICAgIAkgICAgCVN0cmluZ1Rva2VuaXplciBtZXRob2REZXRhaWxzID0gbmV3IFN0cmluZ1Rva2VuaXplcihvbmVNZXRob2QsZGVsaW0pOwotCQlmb3IgKGludCBpPTA7IG1ldGhvZERldGFpbHMuaGFzTW9yZVRva2VucygpO2krKyApIHsKLQkJICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIG1ldGhvZERldGFpbHMubmV4dFRva2VuKCk7Ci0JCSAgICBpZiAoaT09MCkgewotCQkgICAgCW1ldGhvZE5hbWUgPSB0b2tlbi50b1VwcGVyQ2FzZSgpOwotCQkgICAgfSBlbHNlIHsKLQkJICAgIAlwYXJtcy5hZGQodG9rZW4pOwkJICAgIAkKLQkJICAgIH0KLQkJfQotCQlwcm9wZXJ0aWVzLnB1dChtZXRob2ROYW1lLHBhcm1zKTsKLSAgICAJICAgIH0gICAgCSAgICAKLSAgICAJfQotICAgIAlyZXR1cm4gcHJvcGVydGllczsKKyAgICBpZiAoIHByb3AgPT0gbnVsbCB8fCBwcm9wLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgIHJldHVybiBuZXcgSGFzaHRhYmxlKCk7CisgICAgfSBlbHNlIGlmIChkZWxpbSA9PSBudWxsIHx8IGRlbGltLmVxdWFscygiIikpIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uICgiRGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiIpOwogICAgIH0KLSAgICAKKworICAgIEhhc2h0YWJsZSBwcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOworICAgIGRlbGltID0gZGVsaW0udHJpbSgpOworICAgIFN0cmluZyBzZXAgPSBkZWxpbStkZWxpbTsKKyAgICBpbnQgc2VwTGVuID0gc2VwLmxlbmd0aCgpOworICAgIFN0cmluZyBjYWNoZSA9IHByb3A7CisgICAgVmVjdG9yIG1ldGhvZHMgPSBuZXcgVmVjdG9yKCk7CisKKyAgICB3aGlsZSAoY2FjaGUuaW5kZXhPZihzZXApICE9IC0xKSB7CisgICAgICAgIGludCBpbmRleCA9IGNhY2hlLmluZGV4T2Yoc2VwKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBjYWNoZS5zdWJzdHJpbmcoMCxpbmRleCk7CisgICAgICAgIGlmIChuYW1lLnRyaW0oKSAhPSAiIikgeworICAgICAgICAgICAgbWV0aG9kcy5hZGQobmFtZSk7CisgICAgICAgICAgICBjYWNoZSA9IGNhY2hlLnN1YnN0cmluZyhpbmRleCtzZXBMZW4pOworICAgICAgICB9CisgICAgfQorCisgICAgICAgIEVudW1lcmF0aW9uIGFsbE1ldGhvZHMgPSBtZXRob2RzLmVsZW1lbnRzKCk7CisgICAgICAgIHdoaWxlIChhbGxNZXRob2RzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBTdHJpbmcgb25lTWV0aG9kID0gKFN0cmluZykgYWxsTWV0aG9kcy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgaWYgKCFvbmVNZXRob2QudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG51bGw7CisgICAgICAgICAgICAgICAgVmVjdG9yIHBhcm1zID0gbmV3IFZlY3RvcigpOworICAgICAgICAgICAgICAgIFN0cmluZ1Rva2VuaXplciBtZXRob2REZXRhaWxzID0gbmV3IFN0cmluZ1Rva2VuaXplcihvbmVNZXRob2QsZGVsaW0pOworICAgICAgICBmb3IgKGludCBpPTA7IG1ldGhvZERldGFpbHMuaGFzTW9yZVRva2VucygpO2krKyApIHsKKyAgICAgICAgICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIG1ldGhvZERldGFpbHMubmV4dFRva2VuKCk7CisgICAgICAgICAgICBpZiAoaT09MCkgeworICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSB0b2tlbi50b1VwcGVyQ2FzZSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJtcy5hZGQodG9rZW4pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHByb3BlcnRpZXMucHV0KG1ldGhvZE5hbWUscGFybXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzOworICAgIH0KKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBEYXRhc291cmNlIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlIHNwZWMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCUluaXRpYWwgRGF0YVNvdXJjZSBPYmplY3QgaW5zdGFuY2UuCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gSWYgY2xhc3MgbmFtZSBpcyB3cm9uZyBvciBjbGFzc3BhdGggaXMgbm90IHNldAotICAgICAqCQlwcm9wZXJseS4KKyAgICAgKiBAcmV0dXJuICAgIEluaXRpYWwgRGF0YVNvdXJjZSBPYmplY3QgaW5zdGFuY2UuCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gSWYgY2xhc3MgbmFtZSBpcyB3cm9uZyBvciBjbGFzc3BhdGggaXMgbm90IHNldAorICAgICAqICAgICAgICBwcm9wZXJseS4KICAgICAgKi8KICAgICBwcml2YXRlIE9iamVjdCBnZXREYXRhU291cmNlT2JqZWN0KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlTdHJpbmcgY2xhc3NOYW1lID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKLSAgICAgICAgdHJ5IHsgICAgICAgICAgICAKKyAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBkYXRhU291cmNlQ2xhc3MgPSBDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSk7CiAgICAgICAgICAgICBPYmplY3QgZGF0YVNvdXJjZU9iamVjdCA9IGRhdGFTb3VyY2VDbGFzcy5uZXdJbnN0YW5jZSgpOwogICAgICAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2VPYmplY3Q7CiAgICAgICAgIH0gY2F0Y2goQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBjZm5lKXsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY25mZV9kcyIsIGNmbmUpOwotCQorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jbmZlX2RzIiwgY2ZuZSk7CisKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ2xhc3MgTmFtZSBpcyB3cm9uZyBvciBDbGFzcyBwYXRoIGlzIG5vdCBzZXQgZm9yIDoiICsgY2xhc3NOYW1lKTsKICAgICAgICAgfSBjYXRjaChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGNlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2luc3QiLCBjbGFzc05hbWUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pbnN0IiwgY2xhc3NOYW1lKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiRXJyb3IgaW4gaW5zdGFudGlhdGluZyIgKyBjbGFzc05hbWUpOwogICAgICAgICB9IGNhdGNoKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gY2UpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYWNjX2luc3QiLCBjbGFzc05hbWUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hY2NfaW5zdCIsIGNsYXNzTmFtZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBFcnJvciBpbiBpbnN0YW50aWF0aW5nIiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0KICAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQppbmRleCBlZjZjNGM5Li4zZGMxNTRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKQEAgLTE5LDkyICsxOSw5MiBAQAogaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7CiAKIC8qKgotICogRW5jYXBzdWxhdGUgdGhlIERhdGFTb3VyY2Ugb2JqZWN0IGRldGFpbHMgb2J0YWluZWQgZnJvbSAKKyAqIEVuY2Fwc3VsYXRlIHRoZSBEYXRhU291cmNlIG9iamVjdCBkZXRhaWxzIG9idGFpbmVkIGZyb20KICAqIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2VTcGVjIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VSTkFNRQkJCQk9IDE7ICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBU1NXT1JECQkJCT0gMjsgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVSTAkJCQkJPSAzOyAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HSU5USU1FT1VUCQkJPSA0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR1dSSVRFUgkJCQk9IDU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQUJBU0VOQU1FCQkJPSA2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0VOQU1FCQkJPSA3OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFU0NSSVBUSU9OCQkJCT0gODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLUFJPVE9DT0wJCQk9IDk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9SVE5VTUJFUgkJCQk9IDEwOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPTEVOQU1FCQkJCT0gMTE7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVkVSTkFNRQkJCQk9IDEyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFNUQVRFTUVOVFMJCQk9IDEzOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOSVRJQUxQT09MU0laRQkJCT0gMTQ7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOUE9PTFNJWkUJCQkJPSAxNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhQT09MU0laRQkJCQk9IDE2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWElETEVUSU1FCQkJCT0gMTc7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlDWUNMRQkJCT0gMTg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRFJJVkVSUFJPUEVSVElFUwkJCT0gMTk7ICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMQVNTTkFNRQkJCQk9IDIwOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFTElNSVRFUgkJCQk9IDIxOwotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFhBREFUQVNPVVJDRQkJCT0gMjI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRQkJCQk9IDIzOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05QT09MREFUQVNPVVJDRQkJPSAyNDsKLSAgICAgIAotICAgIC8vR0pDSU5UICAgICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRAk9IDI1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05NRVRIT0QJCQk9IDI2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05UQUJMRU5BTUUJCQk9IDI3OwotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRSQU5TQUNUSU9OSVNPTEFUSU9OCQk9IDI4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdVQVJBTlRFRUlTT0xBVElPTkxFVkVMCQk9IDI5OwotICAgICAgICAgICAgCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUk5BTUUgICAgICAgICAgICAgICAgPSAxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBU1NXT1JEICAgICAgICAgICAgICAgID0gMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVUkwgICAgICAgICAgICAgICAgICAgID0gMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dJTlRJTUVPVVQgICAgICAgICAgICA9IDQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HV1JJVEVSICAgICAgICAgICAgICAgID0gNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBQkFTRU5BTUUgICAgICAgICAgICA9IDY7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRU5BTUUgICAgICAgICAgICA9IDc7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgPSA4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktQUk9UT0NPTCAgICAgICAgICAgID0gOTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1JUTlVNQkVSICAgICAgICAgICAgICAgID0gMTA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9MRU5BTUUgICAgICAgICAgICAgICAgPSAxMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVJWRVJOQU1FICAgICAgICAgICAgICAgID0gMTI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYU1RBVEVNRU5UUyAgICAgICAgICAgID0gMTM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5JVElBTFBPT0xTSVpFICAgICAgICAgICAgPSAxNDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSU5QT09MU0laRSAgICAgICAgICAgICAgICA9IDE1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFBPT0xTSVpFICAgICAgICAgICAgICAgID0gMTY7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYSURMRVRJTUUgICAgICAgICAgICAgICAgPSAxNzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWUNZQ0xFICAgICAgICAgICAgPSAxODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEUklWRVJQUk9QRVJUSUVTICAgICAgICAgICAgPSAxOTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTEFTU05BTUUgICAgICAgICAgICAgICAgPSAyMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUxJTUlURVIgICAgICAgICAgICAgICAgPSAyMTsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFhBREFUQVNPVVJDRSAgICAgICAgICAgID0gMjI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRSAgICAgICAgICAgICAgICA9IDIzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05QT09MREFUQVNPVVJDRSAgICAgICAgPSAyNDsKKworICAgIC8vR0pDSU5UCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCAgICA9IDI1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05NRVRIT0QgICAgICAgICAgICA9IDI2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05UQUJMRU5BTUUgICAgICAgICAgICA9IDI3OworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNBQ1RJT05JU09MQVRJT04gICAgICAgID0gMjg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwgICAgICAgID0gMjk7CisKICAgICBwcml2YXRlIEhhc2h0YWJsZSBkZXRhaWxzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBwcm9wZXJ0eS4KICAgICAgKgotICAgICAqIEBwYXJhbQlwcm9wZXJ0eQlQcm9wZXJ0eSBOYW1lIHRvIGJlIHNldC4KLSAgICAgKiBAcGFyYW0JdmFsdWUJCVZhbHVlIG9mIHByb3BlcnR5IHRvIGJlIHNldC4KKyAgICAgKiBAcGFyYW0gICAgcHJvcGVydHkgICAgUHJvcGVydHkgTmFtZSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIHZhbHVlICAgICAgICBWYWx1ZSBvZiBwcm9wZXJ0eSB0byBiZSBzZXQuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGV0YWlsKGludCBwcm9wZXJ0eSwgU3RyaW5nIHZhbHVlKSB7Ci0gICAgCWRldGFpbHMucHV0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSx2YWx1ZSk7CisgICAgICAgIGRldGFpbHMucHV0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSx2YWx1ZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSB2YWx1ZSBvZiBwcm9wZXJ0eQogICAgICAqCi0gICAgICogQHJldHVybglWYWx1ZSBvZiB0aGUgcHJvcGVydHkuCisgICAgICogQHJldHVybiAgICBWYWx1ZSBvZiB0aGUgcHJvcGVydHkuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZXRhaWwoaW50IHByb3BlcnR5KSB7Ci0gICAgCWlmIChkZXRhaWxzLmNvbnRhaW5zS2V5KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSkpIHsKLSAgICAJICAgIHJldHVybiAoU3RyaW5nKSBkZXRhaWxzLmdldChuZXcgSW50ZWdlcihwcm9wZXJ0eSkpOwotICAgIAl9IGVsc2UgewotICAgIAkgICAgcmV0dXJuIG51bGw7Ci0gICAgCX0gICAgCQorICAgICAgICBpZiAoZGV0YWlscy5jb250YWluc0tleShuZXcgSW50ZWdlcihwcm9wZXJ0eSkpKSB7CisgICAgICAgICAgICByZXR1cm4gKFN0cmluZykgZGV0YWlscy5nZXQobmV3IEludGVnZXIocHJvcGVydHkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIHdoZXRoZXIgdHdvIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3RzCiAgICAgICogYXJlIGVxdWFsIG9yIG5vdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlvYmoJSW5zdGFuY2Ugb2YgPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIEluc3RhbmNlIG9mIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKLSAgICAJaWYgKG9iaiBpbnN0YW5jZW9mIERhdGFTb3VyY2VTcGVjKSB7Ci0gICAgCSAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmVxdWFscygoKERhdGFTb3VyY2VTcGVjKW9iaikuZGV0YWlscyk7Ci0gICAgCX0KLSAgICAJcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgRGF0YVNvdXJjZVNwZWMpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmRldGFpbHMuZXF1YWxzKCgoRGF0YVNvdXJjZVNwZWMpb2JqKS5kZXRhaWxzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBoYXNoQ29kZSBvZiB0aGlzIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhhc2hDb2RlIG9mIHRoaXMgb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgaGFzaENvZGUgb2YgdGhpcyBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKLSAgICAJcmV0dXJuIHRoaXMuZGV0YWlscy5oYXNoQ29kZSgpOwotICAgIH0gICAgCisgICAgICAgIHJldHVybiB0aGlzLmRldGFpbHMuaGFzaENvZGUoKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKaW5kZXggZWY0MzhmYy4uM2I0ZmFlYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iLiIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL2NvbW1vbiIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0zNiwxMyArMzYsMTMgQEAKIAogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxMyIgZGVwZW5kcz0iY29tcGlsZSIvPgogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxNCIgZGVwZW5kcz0iY29tcGlsZSIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxMyIgZGVwZW5kcz0icGFja2FnZSIvPgogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxNCIgZGVwZW5kcz0icGFja2FnZSIvPgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxMyIgZGVwZW5kcz0iY29tcGlsZTEzLCBwYWNrYWdlMTMiLz4KICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgotICAgIAorCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKaW5kZXggNDYzMmFlMS4uYjRmZDEyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCkBAIC0yNCwyNCArMjQsMjQgQEAKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcjsKIAogLyoqCi0gKiBIb2xkcyB0aGUgamF2YS5zcWwuQ29ubmVjdGlvbiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlIAorICogSG9sZHMgdGhlIGphdmEuc3FsLkNvbm5lY3Rpb24gb2JqZWN0LCB3aGljaCBpcyB0byBiZQogICogcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvbkhvbGRlciBpbXBsZW1lbnRzIENvbm5lY3Rpb257IAorcHVibGljIGNsYXNzIENvbm5lY3Rpb25Ib2xkZXIgaW1wbGVtZW50cyBDb25uZWN0aW9uewogCiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uIGNvbjsKLSAgICAKKwogICAgIHByaXZhdGUgTWFuYWdlZENvbm5lY3Rpb24gbWM7Ci0gICAgCi0gICAgcHJpdmF0ZSBib29sZWFuIHdyYXBwZWRBbHJlYWR5ID0gZmFsc2U7ICAgIAotICAgIAorCisgICAgcHJpdmF0ZSBib29sZWFuIHdyYXBwZWRBbHJlYWR5ID0gZmFsc2U7CisKICAgICBwcml2YXRlIGJvb2xlYW4gaXNDbG9zZWQgPSBmYWxzZTsKLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiB2YWxpZCA9IHRydWU7Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gYWN0aXZlID0gZmFsc2U7CiAgICAgLyoqCiAgICAgICogVGhlIGFjdGl2ZSBmbGFnIGlzIGZhbHNlIHdoZW4gdGhlIGNvbm5lY3Rpb24gaGFuZGxlIGlzCkBAIC01Myw0MDQgKzUzLDQwNCBAQAogICAgICAqIGZ1bmN0aW9uLCB0aGUgYWJvdmUgbWV0aG9kIGludm9jYXRpb24gc3VjY2VlZHM7IG90aGVyd2lzZQogICAgICAqIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICAgICovCi0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGEgQ29ubmVjdGlvbiBob2xkZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvbkhvbGRlcihDb25uZWN0aW9uIGNvbiwgTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy5jb24gPSBjb247CiAgICAgICAgIHRoaXMubWMgID0gbWM7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIHRoaXMgaG9sZGVyIG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuCUNvbm5lY3Rpb24gb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybiAgICBDb25uZWN0aW9uIG9iamVjdC4KICAgICAgKi8KICAgICBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oKSB7Ci0gICAgCXJldHVybiBjb247CisgICAgICAgIHJldHVybiBjb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZmxhZyB0byBpbmRpY2F0ZSB0aGF0LCB0aGUgY29ubmVjdGlvbiBpcyB3cmFwcGVkIGFscmVhZHkgb3Igbm90LgogICAgICAqCi0gICAgICogQHBhcmFtCXdyYXBGbGFnCQorICAgICAqIEBwYXJhbSAgICB3cmFwRmxhZwogICAgICAqLwogICAgIHZvaWQgd3JhcHBlZChib29sZWFuIHdyYXBGbGFnKXsKICAgICAgICAgdGhpcy53cmFwcGVkQWxyZWFkeSA9IHdyYXBGbGFnOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgd2hldGhlciBpdCBpcyB3cmFwcGVkIGFscmVhZHkgb3Igbm90LgogICAgICAqCi0gICAgICogQHJldHVybgl3cmFwcGVkIGZsYWcuCisgICAgICogQHJldHVybiAgICB3cmFwcGVkIGZsYWcuCiAgICAgICovCiAgICAgYm9vbGVhbiBpc1dyYXBwZWQoKXsKICAgICAgICAgcmV0dXJuIHdyYXBwZWRBbHJlYWR5OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSByZXNwb25zaWJsZQogICAgICAqIGZvciB0aGlzIGNvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKi8KICAgICBNYW5hZ2VkQ29ubmVjdGlvbiBnZXRNYW5hZ2VkQ29ubmVjdGlvbigpIHsKICAgICAgICAgcmV0dXJuIG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlcGxhY2UgdGhlIGFjdHVhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3Qgd2l0aCB0aGUgb25lCi0gICAgICogc3VwcGxpZWQuIEFsc28gcmVwbGFjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gbGluay4gICAgIAorICAgICAqIHN1cHBsaWVkLiBBbHNvIHJlcGxhY2UgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGxpbmsuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29uIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0JbWMgIDxjb2RlPiBNYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBjb24gPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBtYyAgPGNvZGU+IE1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgdm9pZCBhc3NvY2lhdGVDb25uZWN0aW9uKENvbm5lY3Rpb24gY29uLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewotICAgIAl0aGlzLm1jID0gbWM7Ci0gICAgCXRoaXMuY29uID0gY29uOworICAgICAgICB0aGlzLm1jID0gbWM7CisgICAgICAgIHRoaXMuY29uID0gY29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENsZWFycyBhbGwgd2FybmluZ3MgcmVwb3J0ZWQgZm9yIHRoZSB1bmRlcmx5aW5nIGNvbm5lY3Rpb24gIG9iamVjdC4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgY2xlYXJXYXJuaW5ncygpIHRocm93cyBTUUxFeGNlcHRpb257ICAgIAotCWNoZWNrVmFsaWRpdHkoKTsKKyAgICBwdWJsaWMgdm9pZCBjbGVhcldhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIGNvbi5jbGVhcldhcm5pbmdzKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2xvc2VzIHRoZSBsb2dpY2FsIGNvbm5lY3Rpb24uICAgIAorICAgICAqIENsb3NlcyB0aGUgbG9naWNhbCBjb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgICBpc0Nsb3NlZCA9IHRydWU7Ci0gICAgICAgIG1jLmNvbm5lY3Rpb25DbG9zZWQobnVsbCwgdGhpcyk7ICAgICAgICAKKyAgICAgICAgbWMuY29ubmVjdGlvbkNsb3NlZChudWxsLCB0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBJbnZhbGlkYXRlcyB0aGlzIG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBpbnZhbGlkYXRlKCkgewotICAgIAl2YWxpZCA9IGZhbHNlOworICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENsb3NlcyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpbnZvbHZlZCBpbiB0aGlzLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICB2b2lkIGFjdHVhbENsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsgICAgCisgICAgdm9pZCBhY3R1YWxDbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICAgIGNvbi5jbG9zZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCB0aGUgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uY29tbWl0KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uY29tbWl0KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEByZXR1cm4JPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuICAgICAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQocmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzdGF0ZW1lbnQgZnJvbSB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4gCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRIb2xkYWJpbGl0eSAgICBSZXN1bHRTZXQgSG9sZGFiaWxpdHkuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCi0gICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoaW50IHJlc3VsdFNldFR5cGUsIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCSAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCSAgICAgCisgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoaW50IHJlc3VsdFNldFR5cGUsIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudChyZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAgICAgCQkJICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOwogICAgIH0KLSAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBhdXRvLWNvbW1pdCBtb2RlIGZvciB0aGUgdW5kZXJseWluZyA8Y29kZT4gQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IHN0YXRlIG9mIGNvbm5lY3Rpb24ncyBhdXRvLWNvbW1pdCBtb2RlLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZ2V0QXV0b0NvbW1pdCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0QXV0b0NvbW1pdCgpOwotICAgIH0gICAKLSAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0QXV0b0NvbW1pdCgpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgdW5kZXJseWluZyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QncyBjYXRhbG9nIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCUNhdGFsb2cgTmFtZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICBDYXRhbG9nIE5hbWUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2F0YWxvZygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmdldENhdGFsb2coKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgaG9sZGFiaWxpdHkgb2YgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBvYmplY3RzIGNyZWF0ZWQKICAgICAgKiB1c2luZyB0aGlzIGNvbm5lY3Rpb24gb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybglob2xkYWJpbGl0eSB2YWx1ZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICBob2xkYWJpbGl0eSB2YWx1ZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRIb2xkYWJpbGl0eSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybgljb24uZ2V0SG9sZGFiaWxpdHkoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiAgICBjb24uZ2V0SG9sZGFiaWxpdHkoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPkRhdGFiYXNlTWV0YURhdGE8L2NvZGU+b2JqZWN0IGZyb20gdGhlIHVuZGVybHlpbmcKICAgICAgKiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gPGNvZGU+RGF0YWJhc2VNZXRhRGF0YTwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIERhdGFiYXNlTWV0YURhdGEgZ2V0TWV0YURhdGEoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldE1ldGFEYXRhKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldE1ldGFEYXRhKCk7CiAgICAgfQotIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0J3MgY3VycmVudCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRyYW5zYWN0aW9uIGxldmVsCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLyAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCAKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aAogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uPC9jb2RlPiBPYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVR5cGVNYXAgc2V0IGluIHRoaXMgb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIFR5cGVNYXAgc2V0IGluIHRoaXMgb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgTWFwIGdldFR5cGVNYXAoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldFR5cGVNYXAoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0VHlwZU1hcCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgdGhlIGZpcnN0IHdhcm5pbmcgcmVwb3J0ZWQgYnkgY2FsbHMgb24gdGhlIHVuZGVybHlpbmcKICAgICAgKiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIEZpcnN0IDxjb2RlPiBTUUxXYXJuaW5nPC9jb2RlPiBPYmplY3Qgb3IgbnVsbC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTUUxXYXJuaW5nIGdldFdhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRXYXJuaW5ncygpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRXYXJuaW5ncygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB3aGV0aGVyIHVuZGVybHlpbmcgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIGNsb3NlZC4KICAgICAgKgotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLCBmYWxzZQotICAgICAqIAkJaWYgaXQgaXMgY2xvc2VkLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIGNsb3NlZCwgZmFsc2UKKyAgICAgKiAgICAgICAgIGlmIGl0IGlzIGNsb3NlZC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNDbG9zZWQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJcmV0dXJuIGlzQ2xvc2VkOworICAgICAgICByZXR1cm4gaXNDbG9zZWQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHdoZXRoZXIgdGhpcyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgcmVhZC1vbmx5LgogICAgICAqCi0gICAgICogQHJldHVybgl0cnVlIGlmIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gaXMgcmVhZC1vbmx5LCBmYWxzZSBvdGhlci13aXNlCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IGlzIHJlYWQtb25seSwgZmFsc2Ugb3RoZXItd2lzZQorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1JlYWRPbmx5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5pc1JlYWRPbmx5KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmlzUmVhZE9ubHkoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gU1FMIHN0YXRlbWVudCBpbnRvIHRoZSBzeXN0ZW0ncyBuYXRpdmUgU1FMIGdyYW1tZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBzdGF0ZW1lbnQgLCB0byBiZSBjb252ZXJ0ZWQuCi0gICAgICogQHJldHVybglDb252ZXJ0ZWQgU1FMIHN0cmluZy4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgc3RhdGVtZW50ICwgdG8gYmUgY29udmVydGVkLgorICAgICAqIEByZXR1cm4gICAgQ29udmVydGVkIFNRTCBzdHJpbmcuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgbmF0aXZlU1FMKFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ubmF0aXZlU1FMKHNxbCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLm5hdGl2ZVNRTChzcWwpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKICAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAogICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCi0gICAgICogc3RvcmVkIHByb2NlZHVyZXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCWludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJCi0gICAgCXJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKLSAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgICAgICAgCi0gICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAJCQkgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCk7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCisgICAgICogc3RvcmVkIHByb2NlZHVyZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCisgICAgICogc3RvcmVkIHByb2NlZHVyZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRIb2xkYWJpbGl0eSAgICBSZXN1bHRTZXQgSG9sZGFiaWxpdHkuCisgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZwogICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CiAgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCk7CiAgICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JYXV0b0dlbmVyYXRlZEtleXMgYSBmbGFnIGluZGljYXRpbmcgQXV0b0dlbmVyYXRlZEtleXMgbmVlZCB0byBiZSByZXR1cm5lZC4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgYXV0b0dlbmVyYXRlZEtleXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsYXV0b0dlbmVyYXRlZEtleXMpOwotICAgIH0gICAgCi0gICAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCWNvbHVtbkluZGV4ZXMgYW4gYXJyYXkgb2YgY29sdW1uIGluZGV4ZXMgaW5kaWNhdGluZyB0aGUgY29sdW1ucyB0aGF0IHNob3VsZCBiZQotICAgICAqCQlyZXR1cm5lZCBmcm9tIHRoZSBpbnNlcnRlZCByb3cgb3Igcm93cy4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnRbXSBjb2x1bW5JbmRleGVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbkluZGV4ZXMpOwotICAgIH0gICAgICAgICAgCi0gCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQlpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCQotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRIb2xkYWJpbGl0eQlSZXN1bHRTZXQgSG9sZGFiaWxpdHkuICAgICAgICAgIAotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAJCQkJICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOwotICAgIH0gICAgICAgICAgIAogCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCiAgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JY29sdW1uTmFtZXMgTmFtZSBvZiBib3VuZCBjb2x1bW5zLgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBhdXRvR2VuZXJhdGVkS2V5cyBhIGZsYWcgaW5kaWNhdGluZyBBdXRvR2VuZXJhdGVkS2V5cyBuZWVkIHRvIGJlIHJldHVybmVkLgogICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgYXV0b0dlbmVyYXRlZEtleXMpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxhdXRvR2VuZXJhdGVkS2V5cyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGNvbHVtbkluZGV4ZXMgYW4gYXJyYXkgb2YgY29sdW1uIGluZGV4ZXMgaW5kaWNhdGluZyB0aGUgY29sdW1ucyB0aGF0IHNob3VsZCBiZQorICAgICAqICAgICAgICByZXR1cm5lZCBmcm9tIHRoZSBpbnNlcnRlZCByb3cgb3Igcm93cy4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnRbXSBjb2x1bW5JbmRleGVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uSW5kZXhlcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgY29sdW1uTmFtZXMgTmFtZSBvZiBib3VuZCBjb2x1bW5zLgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIFN0cmluZ1tdIGNvbHVtbk5hbWVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbk5hbWVzKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uTmFtZXMpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtNTM2LDE0MSArNTM2LDE0MSBAQAogICAgIC8qKgogICAgICAqIFJlbW92ZXMgdGhlIGdpdmVuIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2F2ZXBvaW50CTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0Ci0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBzYXZlcG9pbnQgICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVsZWFzZVNhdmVwb2ludChTYXZlcG9pbnQgc2F2ZXBvaW50KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucmVsZWFzZVNhdmVwb2ludChzYXZlcG9pbnQpOwotICAgIH0gCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucmVsZWFzZVNhdmVwb2ludChzYXZlcG9pbnQpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFJvbGxzIGJhY2sgdGhlIGNoYW5nZXMgbWFkZSBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjaygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yb2xsYmFjaygpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJvbGxiYWNrKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUm9sbHMgYmFjayB0aGUgY2hhbmdlcyBtYWRlIGFmdGVyIHRoZSBzYXZlcG9pbnQuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soU2F2ZXBvaW50IHNhdmVwb2ludCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJvbGxiYWNrKHNhdmVwb2ludCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucm9sbGJhY2soc2F2ZXBvaW50KTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgYXV0by1jb21tbWl0IG1vZGUgb2YgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlhdXRvQ29tbWl0IGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB0aGUgYXV0by1jb21taXQgbW9kZS4gICAgIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgYXV0b0NvbW1pdCBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhlIGF1dG8tY29tbWl0IG1vZGUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEF1dG9Db21taXQoYm9vbGVhbiBhdXRvQ29tbWl0KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGF1dG9Db21taXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNhdGFsb2cgbmFtZSB0byB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2F0YWxvZwlDYXRhbG9nIG5hbWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBjYXRhbG9nICAgIENhdGFsb2cgbmFtZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q2F0YWxvZyhTdHJpbmcgY2F0YWxvZykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldENhdGFsb2coY2F0YWxvZyk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0Q2F0YWxvZyhjYXRhbG9nKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZCAKKyAgICAgKiBTZXRzIHRoZSBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZAogICAgICAqIHVzaW5nIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCWhvbGRhYmlsaXR5CUEgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBob2xkYWJpbGl0eSBjb25zdGFudAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgaG9sZGFiaWxpdHkgICAgQSA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IGhvbGRhYmlsaXR5IGNvbnN0YW50CisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEhvbGRhYmlsaXR5KGludCBob2xkYWJpbGl0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAgCWNvbi5zZXRIb2xkYWJpbGl0eShob2xkYWJpbGl0eSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICAgY29uLnNldEhvbGRhYmlsaXR5KGhvbGRhYmlsaXR5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBQdXRzIHRoZSBjb25uZWN0aW9uIGluIHJlYWQtb25seSBtb2RlIGFzIGEgaGludCB0byB0aGUgZHJpdmVyIHRvIAorICAgICAqIFB1dHMgdGhlIGNvbm5lY3Rpb24gaW4gcmVhZC1vbmx5IG1vZGUgYXMgYSBoaW50IHRvIHRoZSBkcml2ZXIgdG8KICAgICAgKiBwZXJmb3JtIGRhdGFiYXNlIG9wdGltaXphdGlvbnMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVhZE9ubHkgIHRydWUgZW5hYmxlcyByZWFkLW9ubHkgbW9kZSwgZmFsc2UgZGlzYWJsZXMgaXQuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICByZWFkT25seSAgdHJ1ZSBlbmFibGVzIHJlYWQtb25seSBtb2RlLCBmYWxzZSBkaXNhYmxlcyBpdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVhZE9ubHkoYm9vbGVhbiByZWFkT25seSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldFJlYWRPbmx5KHJlYWRPbmx5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRSZWFkT25seShyZWFkT25seSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhbmQgdW5uYW1lZCBzYXZlcG9pbnQgYW5kIHJldHVybnMgYW4gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KICAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNhdmVwb2ludCBzZXRTYXZlcG9pbnQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnNldFNhdmVwb2ludCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc2F2ZXBvaW50IHdpdGggdGhlIG5hbWUgYW5kIHJldHVybnMgYW4gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdC4KICAgICAgKgotICAgICAqIEBwYXJhbQluYW1lCU5hbWUgb2YgdGhlIHNhdmVwb2ludC4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbmFtZSAgICBOYW1lIG9mIHRoZSBzYXZlcG9pbnQuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNhdmVwb2ludCBzZXRTYXZlcG9pbnQoU3RyaW5nIG5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uc2V0U2F2ZXBvaW50KG5hbWUpOwotICAgIH0gICAgCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnNldFNhdmVwb2ludChuYW1lKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGV2ZWwgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbGV2ZWwgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2FjdGlvbklzb2xhdGlvbihpbnQgbGV2ZWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbihsZXZlbCk7Ci0gICAgfSAgICAgCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24obGV2ZWwpOworICAgIH0KKwogICAgIC8qKgotICAgICAqIEluc3RhbGxzIHRoZSBnaXZlbiA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhcyB0aGUgdHlvZSBtYXAgZm9yIHRoaXMgCisgICAgICogSW5zdGFsbHMgdGhlIGdpdmVuIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzIHRoZSB0eW9lIG1hcCBmb3IgdGhpcwogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCW1hcAk8Y29kZT5NYXA8L2NvZGU+IGEgTWFwIG9iamVjdCB0byBpbnN0YWxsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbWFwICAgIDxjb2RlPk1hcDwvY29kZT4gYSBNYXAgb2JqZWN0IHRvIGluc3RhbGwuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFR5cGVNYXAoTWFwIG1hcCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOwotICAgIAljb24uc2V0VHlwZU1hcChtYXApOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldFR5cGVNYXAobWFwKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgdGhlIHZhbGlkaXR5IG9mIHRoaXMgb2JqZWN0CiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGNoZWNrVmFsaWRpdHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJaWYgKGlzQ2xvc2VkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiQ29ubmVjdGlvbiBjbG9zZWQiKTsKLSAgICAJaWYgKCF2YWxpZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkludmFsaWQgQ29ubmVjdGlvbiIpOwotICAgIAlpZihhY3RpdmUgPT0gZmFsc2UpIHsKLSAgICAJICAgIG1jLmNoZWNrSWZBY3RpdmUodGhpcyk7Ci0gICAgCX0KKyAgICAgICAgaWYgKGlzQ2xvc2VkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiQ29ubmVjdGlvbiBjbG9zZWQiKTsKKyAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkludmFsaWQgQ29ubmVjdGlvbiIpOworICAgICAgICBpZihhY3RpdmUgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIG1jLmNoZWNrSWZBY3RpdmUodGhpcyk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBhY3RpdmUgZmxhZyB0byB0cnVlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JYWN0dglib29sZWFuCisgICAgICogQHBhcmFtICAgIGFjdHYgICAgYm9vbGVhbgogICAgICAqLwogICAgIHZvaWQgc2V0QWN0aXZlKGJvb2xlYW4gYWN0dikgewogICAgICAgICBhY3RpdmUgPSBhY3R2OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IGFjN2U3NDguLmYwNjc1YTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTMzLDE5ICszMywxOSBAQAogICogVGhpcyBjbGFzcyBpcyBleHRlbmRlZCBieSB0aGUgRGF0YVNvdXJjZSBzcGVjaWZpYyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gZmFjdG9yaWVzCiAgKiBhbmQgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gZm9yIHRoZSA8Y29kZT5Ecml2ZXJNYW5hZ2VyPC9jb2RlPi4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzAzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LCAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnksCiAgICAgamF2YS5pby5TZXJpYWxpemFibGUgewotICAgIAorCiAgICAgcHJvdGVjdGVkIERhdGFTb3VyY2VTcGVjIHNwZWMgPSBuZXcgRGF0YVNvdXJjZVNwZWMoKTsKICAgICBwcm90ZWN0ZWQgdHJhbnNpZW50IERhdGFTb3VyY2VPYmplY3RCdWlsZGVyIGRzT2JqQnVpbGRlcjsKLSAgICAKKwogICAgIHByb3RlY3RlZCBqYXZhLmlvLlByaW50V3JpdGVyIGxvZ1dyaXRlciA9IG51bGw7CiAgICAgcHJvdGVjdGVkIGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciByYSA9IG51bGw7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTQsOCArNTQsOCBAQAogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBDb25uZWN0aW9uIEZhY3RvcnkgaW5zdGFuY2UuIFRoZSA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gaW1wbGVtZW50YXRpb24KICAgICAgKiBvZiB0aGUgcmVzb3VyY2UgYWRhcHRlciBpcyB1c2VkIGhlcmUuCi0gICAgICogCi0gICAgICogQHJldHVybglHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgorICAgICAqCisgICAgICogQHJldHVybiAgICBHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgY3JlYXRlQ29ubmVjdGlvbkZhY3RvcnkoKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC02MywxNiArNjMsMTYgQEAKICAgICAgICAgfQogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSBjZiA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSgKICAgICAgICAgICAgIChqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpdGhpcywgbnVsbCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBjZjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgQ29ubmVjdGlvbiBGYWN0b3J5IGluc3RhbmNlLiBUaGUgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uCiAgICAgICogb2YgdGhlIGFwcGxpY2F0aW9uIHNlcnZlciBpcyB1c2VkIGhlcmUuCi0gICAgICogCi0gICAgICogQHBhcmFtCWN4TWFuYWdlcgk8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcmV0dXJuCUdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY3hNYW5hZ2VyICAgIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEByZXR1cm4gICAgR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGNyZWF0ZUNvbm5lY3Rpb25GYWN0b3J5KGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyIGN4TWFuYWdlcikgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtODAsNTUgKzgwLDU1IEBACiAgICAgICAgIH0KICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UgY2YgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UoCiAgICAgICAgICAgICAoamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KXRoaXMsIGN4TWFuYWdlcik7Ci0gICAgICAgIHJldHVybiBjZjsgCisgICAgICAgIHJldHVybiBjZjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgbmV3IHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgRUlTIHJlc291cmNlCiAgICAgICogbWFuYWdlci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBwYXJhbQljeFJlcXVlc3RJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0Ci0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAk8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCi0gICAgICogICAgICAgCQkJCWNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0Ci0gICAgICogQHRocm93cwlTZWN1cml0eUV4Y2VwdGlvbglpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0IAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqCQkJCQkJcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gICAgY3hSZXF1ZXN0SW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAorICAgICAqIEB0aHJvd3MgICAgU2VjdXJpdHlFeGNlcHRpb24gICAgaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdCBzdWJqZWN0LAogICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uOwotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvIAorICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0bwogICAgICAqIGFub3RoZXIgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jb3RoZXIJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCi0gICAgICoJCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIG90aGVyICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCisgICAgICogICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpOwotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHNlZQk8Y29kZT5zZXRMb2dXcml0ZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBqYXZhLmlvLlByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHsKICAgICAgICAgcmV0dXJuIGxvZ1dyaXRlcjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHNlZQk8Y29kZT5zZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJlc291cmNlQWRhcHRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIGdldFJlc291cmNlQWRhcHRlcigpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTEzNiwxMSArMTM2LDExIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJhOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LgogICAgICAqCi0gICAgICogQHJldHVybgloYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCl7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xNDgsNDEgKzE0OCw0MSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzcGVjLmhhc2hDb2RlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyBhIG1hdGNoZWQgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZyb20gdGhlIGNhbmRpZGF0ZSAKKyAgICAgKiBSZXR1cm5zIGEgbWF0Y2hlZCA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gZnJvbSB0aGUgY2FuZGlkYXRlCiAgICAgICogc2V0IG9mIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3RzLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb25uZWN0aW9uU2V0CTxjb2RlPlNldDwvY29kZT4gb2YgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqCQkJCW9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAkgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKgkJCWZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZwotICAgICAqIEBwYXJhbQljeFJlcXVlc3RJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKgkJCQlmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IGlzIHRoZSBiZXN0IG1hdGNoIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBhY2Nlc3NpbmcgdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+Ci0gICAgICoJCQkJCXBhcmFtZXRlciBvciB0aGUgPGNvZGU+U2V0PC9jb2RlPiBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKgkJCQkJb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbm5lY3Rpb25TZXQgICAgPGNvZGU+U2V0PC9jb2RlPiBvZiAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgICBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqICAgICAgICAgICAgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqICAgICAgICAgICAgICAgIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZworICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgaXMgdGhlIGJlc3QgbWF0Y2ggc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGFjY2Vzc2luZyB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIG9yIHRoZSA8Y29kZT5TZXQ8L2NvZGU+IG9mIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICBvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCiAgICAgICovCi0gICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1hdGNoTWFuYWdlZENvbm5lY3Rpb25zKGphdmEudXRpbC5TZXQgY29ubmVjdGlvblNldCwgCisgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1hdGNoTWFuYWdlZENvbm5lY3Rpb25zKGphdmEudXRpbC5TZXQgY29ubmVjdGlvblNldCwKICAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0IHN1YmplY3QsIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIG1hdGNoTWFuYWdlZENvbm5lY3Rpb25zIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoY29ubmVjdGlvblNldCA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGMgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLCBzdWJqZWN0LCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgCisKICAgICAgICAgamF2YS51dGlsLkl0ZXJhdG9yIGl0ZXIgPSBjb25uZWN0aW9uU2V0Lml0ZXJhdG9yKCk7CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG51bGw7CiAgICAgICAgIHdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1jID0gKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbikgaXRlci5uZXh0KCk7CiAgICAgICAgICAgICB9IGNhdGNoKGphdmEudXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uIG5zZWUpIHsKLQkgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2l0ZXIiKTsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2l0ZXIiKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24obnNlZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYocGMgPT0gbnVsbCAmJiB0aGlzLmVxdWFscyhtYy5nZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKSkpIHsKQEAgLTE5MSw3ICsxOTEsNyBAQAogICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkKG1jKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1jOwogICAgICAgICAgICAgICAgIH0gY2F0Y2goUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKLQkgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19yZSIsIHJlKTsKKyAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19yZSIsIHJlKTsKICAgICAgICAgICAgICAgICAgICAgbWMuY29ubmVjdGlvbkVycm9yT2NjdXJyZWQocmUsIG51bGwpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZihTZWN1cml0eVV0aWxzLmlzUGFzc3dvcmRDcmVkZW50aWFsRXF1YWwocGMsIG1jLmdldFBhc3N3b3JkQ3JlZGVudGlhbCgpKSA9PSB0cnVlKSB7CkBAIC0yMDAsNDUgKzIwMCw0NSBAQAogICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkKG1jKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1jOwogICAgICAgICAgICAgICAgIH0gY2F0Y2goUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKLQkgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLnJlIik7CisgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5yZSIpOwogICAgICAgICAgICAgICAgICAgICBtYy5jb25uZWN0aW9uRXJyb3JPY2N1cnJlZChyZSwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogICAgIC8vR0pDSU5UCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGlzIHRvIGJlIHZhbGlkYXRlZCBvciBub3QKICAgICAgKiBhbmQgdmFsaWRhdGVzIGl0IG9yIHJldHVybnMuCi0gICAgICogCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgotICAgICAqICAgICAgICAJICAgICAgICAgIAkJaWYgdmFsaWRhdGlvbiBtZXRob2QgaXMgbm90IHByb3BlcgorICAgICAqCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmFsaWRhdGlvbiBtZXRob2QgaXMgbm90IHByb3BlcgogICAgICAqLwogICAgIHZvaWQgaXNWYWxpZChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAKICAgICAgICAgaWYobWMuaXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSkgewotCSAgICByZXR1cm47CisgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgIAotICAgICAgICBib29sZWFuIGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQgPSAKKworICAgICAgICBib29sZWFuIGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQgPQogICAgICAgICAgICAgKG5ldyBCb29sZWFuKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpLnRvTG93ZXJDYXNlKCkpKS5ib29sZWFuVmFsdWUoKTsKICAgICAgICAgaWYoIGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQgPT0gZmFsc2UgfHwgbWMgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIFN0cmluZyB2YWxpZGF0aW9uTWV0aG9kID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCkudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgCisKICAgICAgICAgbWMuY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgYWJvdmUgY2FsbCBjaGVja3MgaWYgdGhlIGFjdHVhbCBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICAgICAqIGlzIHVzYWJsZSBvciBub3QuCiAgICAgICAgICAqLwogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAgICAgICAgCisKICAgICAgICAgaWYodmFsaWRhdGlvbk1ldGhvZC5lcXVhbHMoImF1dG8tY29tbWl0IikgPT0gdHJ1ZSkgewogICAgICAgICAgICAgaXNWYWxpZEJ5QXV0b0NvbW1pdChjb24pOwogICAgICAgICB9IGVsc2UgaWYodmFsaWRhdGlvbk1ldGhvZC5lcXVhbHNJZ25vcmVDYXNlKCJtZXRhLWRhdGEiKSA9PSB0cnVlKSB7CkBAIC0yNDksMjggKzI0OSwyOCBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgdmFsaWRhdGlvbiBtZXRob2QgaXMgbm90IHByb3BlciIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90CiAgICAgICogYnkgY2hlY2tpbmcgaXRzIGF1dG8gY29tbWl0IHByb3BlcnR5LgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlBdXRvQ29tbWl0KGphdmEuc3FsLkNvbm5lY3Rpb24gY29uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewotICAgICAgICAgICAvLyBOb3RpY2UgdGhhdCB1c2luZyBzb21ldGhpbmcgbGlrZSAKKyAgICAgICAgICAgLy8gTm90aWNlIHRoYXQgdXNpbmcgc29tZXRoaW5nIGxpa2UKICAgICAgICAgICAgLy8gZGJDb24uc2V0QXV0b0NvbW1pdChkYkNvbi5nZXRBdXRvQ29tbWl0KCkpIHdpbGwgY2F1c2UgcHJvYmxlbXMgd2l0aAogICAgICAgICAgICAvLyBzb21lIGRyaXZlcnMgbGlrZSBzeWJhc2UKLSAgICAgICAgICAgLy8gV2UgZG8gbm90IHZhbGlkYXRlIGNvbm5lY3Rpb25zIHRoYXQgYXJlIGFscmVhZHkgZW5saXN0ZWQgCi0JICAgLy9pbiBhIHRyYW5zYWN0aW9uIAotCSAgIC8vIFdlIGN5Y2xlIGF1dG9jb21taXQgdG8gdHJ1ZSBhbmQgZmFsc2UgdG8gYnktcGFzcyBkcml2ZXJzIHRoYXQgCi0JICAgLy8gbWlnaHQgY2FjaGUgdGhlIGNhbGwgdG8gc2V0IGF1dG9jb21pdHQKKyAgICAgICAgICAgLy8gV2UgZG8gbm90IHZhbGlkYXRlIGNvbm5lY3Rpb25zIHRoYXQgYXJlIGFscmVhZHkgZW5saXN0ZWQKKyAgICAgICAvL2luIGEgdHJhbnNhY3Rpb24KKyAgICAgICAvLyBXZSBjeWNsZSBhdXRvY29tbWl0IHRvIHRydWUgYW5kIGZhbHNlIHRvIGJ5LXBhc3MgZHJpdmVycyB0aGF0CisgICAgICAgLy8gbWlnaHQgY2FjaGUgdGhlIGNhbGwgdG8gc2V0IGF1dG9jb21pdHQKICAgICAgICAgICAgLy8gQWxzbyBub3RpY2UgdGhhdCBzb21lIFhBIGRhdGEgc291cmNlcyB3aWxsIHRocm93IGFuZCBleGNlcHRpb24gaWYKICAgICAgICAgICAgLy8geW91IHRyeSB0byBjYWxsIHNldEF1dG9Db21taXQsIGZvciB0aGVtIHRoaXMgbWV0aG9kIGlzIG5vdCByZWNvbW1lbmRlZAogCkBAIC0yODEsOTAgKzI4MSw5MCBAQAogICAgICAgICAgICAgICAgIGNvbi5yb2xsYmFjaygpOyAvLyBwcmV2ZW50cyB1bmNvbXBsZXRlZCB0cmFuc2FjdGlvbiBleGNlcHRpb25zCiAgICAgICAgICAgICAgICAgY29uLnNldEF1dG9Db21taXQodHJ1ZSk7CiAgICAgICAgICAgIH0KLSAgICAgICAgCi0JICAgY29uLnNldEF1dG9Db21taXQoYWMpOworCisgICAgICAgY29uLnNldEF1dG9Db21taXQoYWMpOwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYXV0b2NvbW1pdCIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hdXRvY29tbWl0Iik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90CiAgICAgICogYnkgY2hlY2tpbmcgaXRzIG1ldGEgZGF0YS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5TWV0YURhdGEoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBqYXZhLnNxbC5EYXRhYmFzZU1ldGFEYXRhIGRtZCA9IGNvbi5nZXRNZXRhRGF0YSgpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAiZ2V0dGluZyB0aGUgbWV0YSBkYXRhIGZhaWxlZDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IHF1ZXJ5aW5nIGEgdGFibGUuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAcGFyYW0JdGFibGVOYW1lCXRhYmxlIHdoaWNoIHNob3VsZCBiZSBxdWVyaWVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHBhcmFtICAgIHRhYmxlTmFtZSAgICB0YWJsZSB3aGljaCBzaG91bGQgYmUgcXVlcmllZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5VGFibGVRdWVyeShqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiwgCisgICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5VGFibGVRdWVyeShqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiwKICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGphdmEuc3FsLlN0YXRlbWVudCBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgamF2YS5zcWwuUmVzdWx0U2V0IHJzID0gc3RtdC5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gIiArIHRhYmxlTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZXhlY3V0ZSIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19leGVjdXRlIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAicXVlcnlpbmcgdGhlIHRhYmxlICIgKyB0YWJsZU5hbWUgKyAiIGZhaWxlZDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGlzb2xhdGlvbiBsZXZlbCBzcGVjaWZpZWQgaW4gdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KICAgICAgKiBmb3IgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBwYXNzZWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKLSAgICAgKgkJCQkJb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBzZXRJc29sYXRpb24oY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotICAgIAkKLSAgICAJamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gICAgCWlmKGNvbiA9PSBudWxsKSB7Ci0gICAgCSAgICByZXR1cm47Ci0gICAgCX0KLSAgICAJCi0gICAgCVN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwotICAgIAlpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7Ci0gICAgCSAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOwotICAgIAkgICAgdHJ5IHsKLSAgICAJICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7Ci0gICAgCSAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBjb3VsZCAiCi0gICAgCSAgICAgICAgICAgICsgIm5vdCBiZSBzZXQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICB9Ci0gICAgCX0KKworICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKKyAgICAgICAgaWYoY29uID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOworICAgICAgICBpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7CisgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CisgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBjb3VsZCAiCisgICAgICAgICAgICAgICAgICAgICsgIm5vdCBiZSBzZXQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXNldHMgdGhlIGlzb2xhdGlvbiBsZXZlbCBmb3IgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBwYXNzZWQuCiAgICAgICogSWYgdGhlIHRyYW5zYWN0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZQpAQCAtMzczLDM4MiArMzczLDM4MiBAQAogICAgICAqIGlzb2xhdGlvbiBsZXZlbCBmcm9tIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZC4gRWxzZSwKICAgICAgKiBpdCBzZXRzIGl0IHRvIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gcGFzc2VkLgogICAgICAqCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEBwYXJhbQl0cmFuSXNvbAlpbnQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAotICAgICAqCQkJCQlvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdHJhbklzb2wgICAgaW50CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICB2b2lkIHJlc2V0SXNvbGF0aW9uKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYywgaW50IHRyYW5Jc29sKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotICAgIAkKLSAgICAJamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gICAgCWlmKGNvbiA9PSBudWxsKSB7Ci0gICAgCSAgICByZXR1cm47Ci0gICAgCX0KLSAgICAJCi0gICAgCVN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwotICAgIAlpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7Ci0gICAgCSAgICBTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7Ci0gICAgCSAgICAKLSAgICAJICAgIGlmKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsICE9IG51bGwgJiYgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwuZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgICAgIGJvb2xlYW4gZ3VhcmFudGVlID0gKG5ldyBCb29sZWFuKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLnRvTG93ZXJDYXNlKCkpKS5ib29sZWFuVmFsdWUoKTsKLSAgICAJICAgICAgICAKLSAgICAJICAgICAgICBpZihndWFyYW50ZWUpIHsKLSAgICAJICAgICAgICAgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKLSAgICAJICAgICAgICAgICAgdHJ5IHsKLSAgICAJICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sYXRpb25JbnQgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKLSAgICAJICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7Ci0gICAgCSAgICAgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCi0gICAgCSAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICAgICAgICAgIH0KLSAgICAJICAgICAgICB9IGVsc2UgewotICAgIAkgICAgICAgICAgICB0cnkgewotICAgIAkgICAgICAgICAgICAgICAgaWYodHJhbklzb2wgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKLSAgICAJICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2wpOwotICAgIAkgICAgICAgICAgICAgICAgfQotICAgIAkgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgotICAgIAkgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgfQotICAgIAkgICAgfQotICAgIAl9CisKKyAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7CisgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKKyAgICAgICAgaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOworCisgICAgICAgICAgICBpZihndWFyYW50ZWVJc29sYXRpb25MZXZlbCAhPSBudWxsICYmIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgICAgICBib29sZWFuIGd1YXJhbnRlZSA9IChuZXcgQm9vbGVhbihndWFyYW50ZWVJc29sYXRpb25MZXZlbC50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7CisKKyAgICAgICAgICAgICAgICBpZihndWFyYW50ZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sYXRpb25JbnQgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYodHJhbklzb2wgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2wpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CisgICAgICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgaW50ZWdlciBlcXVpdmFsZW50IG9mIHRoZSBzdHJpbmcgc3BlY2lmeWluZwogICAgICAqIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHJhbklzb2xhdGlvbglzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uIGxldmVsCi0gICAgICogQHJldHVybgl0cmFuSXNvbGF0aW9uSW50CXRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBjb25zdGFudAotICAgICAqCQkJCQlmb3IgdGhlIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24uCisgICAgICogQHBhcmFtICAgIHRyYW5Jc29sYXRpb24gICAgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbklzb2xhdGlvbkludCAgICB0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gY29uc3RhbnQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uLgogICAgICAqLwogICAgIHByaXZhdGUgaW50IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KFN0cmluZyB0cmFuSXNvbGF0aW9uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotICAgIAlpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtdW5jb21taXR0ZWQiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9VTkNPTU1JVFRFRDsKLSAgICAJfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC1jb21taXR0ZWQiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9DT01NSVRURUQ7Ci0gICAgCX0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlcGVhdGFibGUtcmVhZCIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRVBFQVRBQkxFX1JFQUQ7Ci0gICAgCX0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInNlcmlhbGl6YWJsZSIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9TRVJJQUxJWkFCTEU7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkludmFsaWQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uOyB0aGUgdHJhbnNhY3Rpb24gIgotICAgIAkgICAgICAgICsgImlzb2xhdGlvbiBsZXZlbCBjYW4gYmUgZW1wdHkgb3IgYW55IG9mIHRoZSBmb2xsb3dpbmc6ICIKLSAgICAJICAgICAgICAgICAgKyAicmVhZC11bmNvbW1pdHRlZCwgcmVhZC1jb21taXR0ZWQsIHJlcGVhdGFibGUtcmVhZCwgc2VyaWFsaXphYmxlIik7Ci0gICAgCX0KKyAgICAgICAgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLXVuY29tbWl0dGVkIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfVU5DT01NSVRURUQ7CisgICAgICAgIH0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtY29tbWl0dGVkIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfQ09NTUlUVEVEOworICAgICAgICB9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZXBlYXRhYmxlLXJlYWQiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVQRUFUQUJMRV9SRUFEOworICAgICAgICB9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJzZXJpYWxpemFibGUiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fU0VSSUFMSVpBQkxFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJJbnZhbGlkIHRyYW5zYWN0aW9uIGlzb2xhdGlvbjsgdGhlIHRyYW5zYWN0aW9uICIKKyAgICAgICAgICAgICAgICArICJpc29sYXRpb24gbGV2ZWwgY2FuIGJlIGVtcHR5IG9yIGFueSBvZiB0aGUgZm9sbG93aW5nOiAiCisgICAgICAgICAgICAgICAgICAgICsgInJlYWQtdW5jb21taXR0ZWQsIHJlYWQtY29tbWl0dGVkLCByZXBlYXRhYmxlLXJlYWQsIHNlcmlhbGl6YWJsZSIpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb3V0CTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBvdXQgICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKGphdmEuaW8uUHJpbnRXcml0ZXIgb3V0KSB7CiAgICAgICAgIGxvZ1dyaXRlciA9IG91dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGFzc29jaWF0ZWQgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBKYXZhQmVhbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlyYQk8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+Z2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICByYSAgICA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5nZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVzb3VyY2VBZGFwdGVyKGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciByYSkgewotICAgICAgICB0aGlzLnJhID0gcmE7ICAgCisgICAgICAgIHRoaXMucmEgPSByYTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VXNlcihTdHJpbmcgdXNlcikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSwgdXNlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXVzZXIKKyAgICAgKiBAcmV0dXJuICAgIHVzZXIKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHVzZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHVzZXIoU3RyaW5nIHVzZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUsIHVzZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHJldHVybgl1c2VyCisgICAgICogQHJldHVybiAgICB1c2VyCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR1c2VyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcGFzc3dkCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcGFzc3dkICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRQYXNzd29yZChTdHJpbmcgcGFzc3dkKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JELCBwYXNzd2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBhc3N3ZAorICAgICAqIEByZXR1cm4gICAgcGFzc3dkCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRQYXNzd29yZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHBhcmFtCXBhc3N3ZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBhc3N3ZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0cGFzc3dvcmQoU3RyaW5nIHBhc3N3ZCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCwgcGFzc3dkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHJldHVybglwYXNzd2QKKyAgICAgKiBAcmV0dXJuICAgIHBhc3N3ZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0cGFzc3dvcmQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEBwYXJhbQljbGFzc05hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjbGFzc05hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSwgY2xhc3NOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHJldHVybgljbGFzc05hbWUKKyAgICAgKiBAcmV0dXJuICAgIGNsYXNzTmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2xhc3NOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHBhcmFtCWNsYXNzTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNsYXNzTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Y2xhc3NOYW1lKFN0cmluZyBjbGFzc05hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FLCBjbGFzc05hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNsYXNzTmFtZQorICAgICAqIEByZXR1cm4gICAgY2xhc3NOYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRjbGFzc05hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHBhcmFtCWNvblZsZFJlcQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNvblZsZFJlcSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZChTdHJpbmcgY29uVmxkUmVxKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQsIGNvblZsZFJlcSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29uVmxkUmVxCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY29uVmxkUmVxICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKFN0cmluZyBjb25WbGRSZXEpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCwgY29uVmxkUmVxKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEByZXR1cm4JY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CisgICAgICogQHJldHVybiAgICBjb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB2YWxpZGF0aW9uIG1ldGhvZCByZXF1aXJlZAogICAgICAqCi0gICAgICogQHBhcmFtCXZhbGlkYXRpb25NZXRob2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB2YWxpZGF0aW9uTWV0aG9kICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRWYWxpZGF0aW9uTWV0aG9kKFN0cmluZyB2YWxpZGF0aW9uTWV0aG9kKSB7CiAgICAgICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9ELCB2YWxpZGF0aW9uTWV0aG9kKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBjb25uZWN0aW9uIHZhbGlkYXRpb24gbWV0aG9kIHR5cGUKICAgICAgKgotICAgICAqIEByZXR1cm4JdmFsaWRhdGlvbiBtZXRob2QKKyAgICAgKiBAcmV0dXJuICAgIHZhbGlkYXRpb24gbWV0aG9kCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRWYWxpZGF0aW9uTWV0aG9kKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdmFsaWRhdGlvbiBtZXRob2QgcmVxdWlyZWQKICAgICAgKgotICAgICAqIEBwYXJhbQl2YWxpZGF0aW9uTWV0aG9kCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdmFsaWRhdGlvbk1ldGhvZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dmFsaWRhdGlvbk1ldGhvZChTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCkgewogICAgICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCwgdmFsaWRhdGlvbk1ldGhvZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgY29ubmVjdGlvbiB2YWxpZGF0aW9uIG1ldGhvZCB0eXBlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXZhbGlkYXRpb24gbWV0aG9kCisgICAgICogQHJldHVybiAgICB2YWxpZGF0aW9uIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dmFsaWRhdGlvbk1ldGhvZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdGFibGUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0YWJsZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VmFsaWRhdGlvblRhYmxlTmFtZShTdHJpbmcgdGFibGUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSwgdGFibGUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRhYmxlCisgICAgICogQHJldHVybiAgICB0YWJsZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsaWRhdGlvblRhYmxlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdGFibGUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0YWJsZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dmFsaWRhdGlvblRhYmxlTmFtZShTdHJpbmcgdGFibGUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSwgdGFibGUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRhYmxlCisgICAgICogQHJldHVybiAgICB0YWJsZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dmFsaWRhdGlvblRhYmxlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHBhcmFtCXRybklzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRybklzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oU3RyaW5nIHRybklzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTiwgdHJuSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCisgICAgICogQHJldHVybiAgICB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHBhcmFtCXRybklzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRybklzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dHJhbnNhY3Rpb25Jc29sYXRpb24oU3RyaW5nIHRybklzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTiwgdHJuSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCisgICAgICogQHJldHVybiAgICB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHRyYW5zYWN0aW9uSXNvbGF0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZ3VhcmFudGVlSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZ3VhcmFudGVlSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRHdWFyYW50ZWVJc29sYXRpb25MZXZlbChTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMLCBndWFyYW50ZWVJc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybglpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCisgICAgICogQHJldHVybiAgICBpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRHdWFyYW50ZWVJc29sYXRpb25MZXZlbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZAogICAgICAqCi0gICAgICogQHBhcmFtCWd1YXJhbnRlZUlzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGd1YXJhbnRlZUlzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Z3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCwgZ3VhcmFudGVlSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQorICAgICAqIEByZXR1cm4gICAgaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Z3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKaW5kZXggNTU1YmU3Ny4uZWE1NDA3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQpAQCAtMjYsOCArMjYsOCBAQAogLyoqCiAgKiA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDUKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzA1CisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgUmVzb3VyY2VBZGFwdGVyIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHsKIApAQCAtMzcsNTIgKzM3LDUyIEBACiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBlbmRwb2ludEFjdGl2YXRpb24KICAgICAgKiB3aGljaCBqdXN0IHRocm93cyA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWVmCTxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCWFzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgotICAgICAqIEB0aHJvd3MJPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtZWYgICAgPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgYXMgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kcG9pbnRBY3RpdmF0aW9uKE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgbWVmLCBBY3RpdmF0aW9uU3BlYyBhcykgdGhyb3dzIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIlRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgSkRCQyBjb25uZWN0b3IiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBtZXRob2QgaW1wbGVtZW50YXRpb24gZm9yIGVuZHBvaW50RGVhY3RpdmF0aW9uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWVmCTxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCWFzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtZWYgICAgPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgYXMgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kcG9pbnREZWFjdGl2YXRpb24oTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBtZWYsIEFjdGl2YXRpb25TcGVjIGFzKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBnZXRYQVJlc291cmNlcwogICAgICAqIHdoaWNoIGp1c3QgdGhyb3dzIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcGVjcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4gYXJyYXkKLSAgICAgKiBAdGhyb3dzCTxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc3BlY3MgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+IGFycmF5CisgICAgICogQHRocm93cyAgICA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKSB0aHJvd3MgTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiVGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBKREJDIGNvbm5lY3RvciIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IGltcGxlbWVudGF0aW9uIG9mIHN0YXJ0IG1ldGhvZAogICAgICAqCi0gICAgICogQHBhcmFtCWN0eAk8Y29kZT5Cb290c3RyYXBDb250ZXh0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjdHggICAgPGNvZGU+Qm9vdHN0cmFwQ29udGV4dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdGFydChCb290c3RyYXBDb250ZXh0IGN0eCkgdGhyb3dzIFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNvdXJjZSBBZGFwdGVyIGlzIHN0YXJ0aW5nIHdpdGggY29uZmlndXJhdGlvbiA6IiArIHJhUHJvcCk7CiAgICAgICAgIGlmIChyYVByb3AgPT0gbnVsbCB8fCAhcmFQcm9wLmVxdWFscygiVkFMSUQiKSkgewotCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIlJlc291cmNlIGFkYXB0ZXIgY2Fubm90IHN0YXJ0LiBJdCBpcyBjb25maWd1cmVkIGFzIDogIiArIHJhUHJvcCk7Ci0JfSAKKyAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJSZXNvdXJjZSBhZGFwdGVyIGNhbm5vdCBzdGFydC4gSXQgaXMgY29uZmlndXJlZCBhcyA6ICIgKyByYVByb3ApOwogICAgIH0KLSAgICAKKyAgICB9CisKICAgICAvKioKICAgICAgKiBFbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBzdG9wIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0b3AoKSB7Ci0gICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRSQVByb3BlcnR5KFN0cmluZyBzKSB7CkBAIC05Miw1ICs5Miw1IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRSQVByb3BlcnR5KCkgewogICAgICAgICByZXR1cm4gcmFQcm9wOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKaW5kZXggNWUxNGQ0NC4uZmYwZjAyYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIke2dqYy5ob21lfSIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3NwaSIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0yOSw1NSArMjksNTUgQEAKICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTQiPgotICAgIAkKLSAgICAJPG1rZGlyIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ii8+Ci0gICAgCQotCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCisKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ii8+CisKKyAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIgYmFzZWRpcj0iJHtjbGFzcy5kaXJ9IgogICAgICAgICBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLCBjb20vc3VuL2dqYy91dGlsLyoqLyosIGNvbS9zdW4vZ2pjL2NvbW1vbi8qKi8qIiBleGNsdWRlcz0iY29tL3N1bi9namMvY2NpLyoqLyosY29tL3N1bi9namMvc3BpLzEuNC8qKi8qIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1jcC54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtY3AueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLXhhLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEteGEueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRtLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZG0ueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRzLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZHMueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGRlbGV0ZSBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3QvY29tIi8+Ci0gICAJPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiLz4KLSAgIAk8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiLz4KLSAgIAkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGRlbGV0ZSBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3QvY29tIi8+CisgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiLz4KKyAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiLz4KKwogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCwgcGFja2FnZTE0Ii8+CiAgICAgPHRhcmdldCBuYW1lPSJidWlsZDEzIi8+Ci0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxNCwgYnVpbGQxMyIvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTQsIGJ1aWxkMTMiLz4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sCmluZGV4IDYwZTFlNGUuLjY1ZThmYjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbApAQCAtMjIsNjkgKzIyLDY5IEBACiAgICAgICAgICAgIHZlcnNpb249IjEuNSI+CiAKICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+Ci0gICAgPCEtLSBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhIAorICAgIDwhLS0gVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYQogICAgICAgICAgZGVzY3JpcHRpb24gZm9yIHRoZSByZXNvdXJjZSBhZGFwdGVyLgogICAgIC0tPgogICAgIDxkZXNjcmlwdGlvbj5SZXNvdXJjZSBhZGFwdGVyIHdyYXBwaW5nIERhdGFzb3VyY2UgaW1wbGVtZW50YXRpb24gb2YgZHJpdmVyPC9kZXNjcmlwdGlvbj4KLSAgICAKKwogICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRpc3BsYXktbmFtZSIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+Ci0gICAgPCEtLSBUaGUgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEgbmFtZSB0aGF0IAorICAgIDwhLS0gVGhlIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhIG5hbWUgdGhhdAogICAgICAgICAgaXMgaW50ZW5kZWQgdG8gYmUgZGlzcGxheWVkIGJ5IHRvb2xzLgogICAgIC0tPgogICAgIDxkaXNwbGF5LW5hbWU+RGF0YVNvdXJjZSBSZXNvdXJjZSBBZGFwdGVyPC9kaXNwbGF5LW5hbWU+Ci0gICAgCisKICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJpY29uIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KICAgICA8IS0tIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgPGljb24+Ci0gICAgICAgICAgICBUaGlzICJzbWFsbC1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgCi0gICAgICAgICAgICBhYnNvbHV0ZSBvciB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgc21hbGwgKDE2IHggMTYpIAorICAgICAgICAgICAgVGhpcyAic21hbGwtaWNvbiIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UuIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlCisgICAgICAgICAgICBhYnNvbHV0ZSBvciB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgc21hbGwgKDE2IHggMTYpCiAgICAgICAgICAgICBpY29uIC0gSlBFRyBvciBHSUYgaW1hZ2UuIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgICAgIDxzbWFsbC1pY29uPnNtYWxsaWNvbi5qcGc8L3NtYWxsLWljb24+Ci0gICAgICAgIAotICAgICAgICAgICAgVGhpcyAibGFyZ2UtaWNvbiIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UuIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIAotICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgzMiB4IDMyKSAKKworICAgICAgICAgICAgVGhpcyAibGFyZ2UtaWNvbiIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UuIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlCisgICAgICAgICAgICBhYnNvbHV0ZSBvciB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgc21hbGwgKDMyIHggMzIpCiAgICAgICAgICAgICBpY29uIC0gSlBFRyBvciBHSUYgaW1hZ2UuIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KLSAgICAgICAgICAgIDxsYXJnZS1pY29uPmxhcmdlaWNvbi5qcGc8L2xhcmdlLWljb24+ICAgCisgICAgICAgICAgICA8bGFyZ2UtaWNvbj5sYXJnZWljb24uanBnPC9sYXJnZS1pY29uPgogICAgICAgICA8L2ljb24+CiAgICAgLS0+CiAgICAgPGljb24+CiAgICAgICAgIDxzbWFsbC1pY29uPjwvc21hbGwtaWNvbj4KLSAgICAgICAgPGxhcmdlLWljb24+PC9sYXJnZS1pY29uPiAgIAorICAgICAgICA8bGFyZ2UtaWNvbj48L2xhcmdlLWljb24+CiAgICAgPC9pY29uPgotICAgIAorCiAgICAgPCEtLSBUaGUgInZlbmRvci1uYW1lIiBlbGVtZW50IHNob3VsZCBvY2N1ciBleGFjdGx5IG9uY2UuIC0tPgogICAgIDwhLS0gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgZHJpdmVyIHZlbmRvci4gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICA8dmVuZG9yLW5hbWU+WFlaIElOQy48L3ZlbmRvci1uYW1lPgogICAgIC0tPgogICAgIDx2ZW5kb3ItbmFtZT5TdW4gTWljcm9zeXN0ZW1zPC92ZW5kb3ItbmFtZT4KLSAgICAKKwogICAgIDwhLS0gVGhlICJlaXMtdHlwZSIgZWxlbWVudCBzaG91bGQgb2NjdXIgZXhhY3RseSBvbmNlLiAtLT4KLSAgICA8IS0tIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIGRhdGFiYXNlLCBmb3IgZXhhbXBsZSB0aGUgcHJvZHVjdCBuYW1lIG9mIAorICAgIDwhLS0gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgZGF0YWJhc2UsIGZvciBleGFtcGxlIHRoZSBwcm9kdWN0IG5hbWUgb2YKICAgICAgICAgIHRoZSBkYXRhYmFzZSBpbmRlcGVuZGVudCBvZiBhbnkgdmVyc2lvbiBpbmZvcm1hdGlvbi4gVGhlIGZvbGxvd2luZwogICAgICAgICAgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgPGVpcy10eXBlPlhZWjwvZWlzLXR5cGU+CiAgICAgLS0+CiAgICAgPGVpcy10eXBlPkRhdGFiYXNlPC9laXMtdHlwZT4KLSAgICAKKwogICAgIDwhLS0gVGhlICJyZXNvdXJjZWFkYXB0ZXItdmVyc2lvbiIgZWxlbWVudCBzaG91bGQgb2NjdXIgZXhhY3RseSBvbmNlLiAtLT4KLSAgICA8IS0tIFRoaXMgc3BlY2lmaWVzIGEgc3RyaW5nIGJhc2VkIHZlcnNpb24gb2YgdGhlIHJlc291cmNlIGFkYXB0ZXIgZnJvbSAKKyAgICA8IS0tIFRoaXMgc3BlY2lmaWVzIGEgc3RyaW5nIGJhc2VkIHZlcnNpb24gb2YgdGhlIHJlc291cmNlIGFkYXB0ZXIgZnJvbQogICAgICAgICAgdGhlIGRyaXZlciB2ZW5kb3IuIFRoZSBkZWZhdWx0IGlzIGJlaW5nIHNldCBhcyAxLjAuIFRoZSBkcml2ZXIKICAgICAgICAgIHZlbmRvciBjYW4gY2hhbmdlIGl0IGFzIHJlcXVpcmVkLgogICAgIC0tPgogICAgIDxyZXNvdXJjZWFkYXB0ZXItdmVyc2lvbj4xLjA8L3Jlc291cmNlYWRhcHRlci12ZXJzaW9uPgotICAgIAorCiAgICAgPCEtLSBUaGlzICJsaWNlbnNlIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZSAtLT4KICAgICA8IS0tIFRoaXMgc3BlY2lmaWVzIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgZm9yIHRoZSByZXNvdXJjZSBhZGFwdGVyIG1vZHVsZS4KICAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgPGxpY2Vuc2U+CiAgICAgICAgICAgICBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwLgogICAgICAgICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byAKLSAgICAgICAgICAgICAgICBwcm92aWRlIGEgZGVzY3JpcHRpb24gZm9yIHRoZSBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzIG9mIHRoZSAKLSAgICAgICAgICAgICAgICByZXNvdXJjZSBhZGFwdGVyIGxpa2UgZHVyYXRpb24gb2YgbGljZW5zZSwgbnVtYmVyb2YgY29ubmVjdGlvbiAKKyAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8KKyAgICAgICAgICAgICAgICBwcm92aWRlIGEgZGVzY3JpcHRpb24gZm9yIHRoZSBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzIG9mIHRoZQorICAgICAgICAgICAgICAgIHJlc291cmNlIGFkYXB0ZXIgbGlrZSBkdXJhdGlvbiBvZiBsaWNlbnNlLCBudW1iZXJvZiBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb25zLgogICAgICAgICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgICAgICAgCisKICAgICAgICAgICAgIFRoaXMgc3BlY2lmaWVzIHdoZXRoZXIgYSBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGRlcGxveSBhbmQgdXNlIHRoZSByZXNvdXJjZSBhZGFwdGVyLgogICAgICAgICAgICAgRGVmYXVsdCBpcyBmYWxzZS4KICAgICAgICAgICAgIDxsaWNlbnNlLXJlcXVpcmVkPmZhbHNlPC9saWNlbnNlLXJlcXVpcmVkPgpAQCAtOTMsMjQgKzkzLDI0IEBACiAgICAgPGxpY2Vuc2U+CiAgICAgICAgIDxsaWNlbnNlLXJlcXVpcmVkPmZhbHNlPC9saWNlbnNlLXJlcXVpcmVkPgogICAgIDwvbGljZW5zZT4KLSAgICAKKwogICAgIDxyZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgIAotICAgICAgICA8IS0tIAotICAgICAgICAgICAgVGhlICJjb25maWctcHJvcGVydHkiIGVsZW1lbnRzIGNhbiBoYXZlIHplcm8gb3IgbW9yZSAiZGVzY3JpcHRpb24iIAorCisgICAgICAgIDwhLS0KKyAgICAgICAgICAgIFRoZSAiY29uZmlnLXByb3BlcnR5IiBlbGVtZW50cyBjYW4gaGF2ZSB6ZXJvIG9yIG1vcmUgImRlc2NyaXB0aW9uIgogICAgICAgICAgICAgZWxlbWVudHMuIFRoZSAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGFyZSBub3QgYmVpbmcgaW5jbHVkZWQKICAgICAgICAgICAgIGluIHRoZSAiY29uZmlnLXByb3BlcnR5IiBlbGVtZW50cyBiZWxvdy4gVGhlIGRyaXZlciB2ZW5kb3IgY2FuCiAgICAgICAgICAgICBhZGQgdGhlbSBhcyByZXF1aXJlZC4KICAgICAgICAgLS0+Ci0gICAgICAgIAorCiAgICAgICAgIDxyZXNvdXJjZWFkYXB0ZXItY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLlJlc291cmNlQWRhcHRlcjwvcmVzb3VyY2VhZGFwdGVyLWNsYXNzPgotICAgICAgICAKKwogICAgICAgICA8b3V0Ym91bmQtcmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAKKwogICAgICAgICAgICAgPGNvbm5lY3Rpb24tZGVmaW5pdGlvbj4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxtYW5hZ2VkY29ubmVjdGlvbmZhY3RvcnktY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9tYW5hZ2VkY29ubmVjdGlvbmZhY3RvcnktY2xhc3M+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mIHRoZXNlIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgogICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5TZXJ2ZXJOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KQEAgLTEyMiwxMzYgKzEyMiwxMzYgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjkwOTI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VXNlcjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5EQlVTRVI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+UGFzc3dvcmQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+REJQQVNTV09SRDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5EYXRhYmFzZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+amRiYzpwb2ludGJhc2U6c2VydmVyOi8vbG9jYWxob3N0OjkwOTIvc3FlLXNhbXBsZXMsbmV3PC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkRhdGFTb3VyY2VOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5EZXNjcmlwdGlvbjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5PcmFjbGUgdGhpbiBkcml2ZXIgRGF0YXNvdXJjZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+TmV0d29ya1Byb3RvY29sPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Sb2xlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+TG9naW5UaW1lT3V0PC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RHJpdmVyUHJvcGVydGllczwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RGVsaW1pdGVyPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPiM8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Q2xhc3NOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmNvbS5wb2ludGJhc2UuamRiYy5qZGJjRGF0YVNvdXJjZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgCQk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZmFsc2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uTWV0aG9kPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VHJhbnNhY3Rpb25Jc29sYXRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZmFsc2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25NZXRob2Q8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uVGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VHJhbnNhY3Rpb25Jc29sYXRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5HdWFyYW50ZWVJc29sYXRpb25MZXZlbDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb25mYWN0b3J5LWludGVyZmFjZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29ubmVjdGlvbmZhY3RvcnktaW50ZXJmYWNlPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb25mYWN0b3J5LWltcGwtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2U8L2Nvbm5lY3Rpb25mYWN0b3J5LWltcGwtY2xhc3M+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbi1pbnRlcmZhY2U+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29ubmVjdGlvbi1pbnRlcmZhY2U+Ci0gICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb24taW1wbC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcjwvY29ubmVjdGlvbi1pbXBsLWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8L2Nvbm5lY3Rpb24tZGVmaW5pdGlvbj4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8dHJhbnNhY3Rpb24tc3VwcG9ydD5Mb2NhbFRyYW5zYWN0aW9uPC90cmFuc2FjdGlvbi1zdXBwb3J0PgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxhdXRoZW50aWNhdGlvbi1tZWNoYW5pc20+CiAgICAgICAgICAgICAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgogICAgICAgICAgICAgICAgIDwhLS0gTm90IGluY2x1ZGluZyB0aGUgImRlc2NyaXB0aW9uIiBlbGVtZW50IC0tPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGF1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbS10eXBlPkJhc2ljUGFzc3dvcmQ8L2F1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbS10eXBlPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNyZWRlbnRpYWwtaW50ZXJmYWNlPmphdmF4LnJlc291cmNlLnNwaS5zZWN1cml0eS5QYXNzd29yZENyZWRlbnRpYWw8L2NyZWRlbnRpYWwtaW50ZXJmYWNlPgogICAgICAgICAgICAgPC9hdXRoZW50aWNhdGlvbi1tZWNoYW5pc20+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPHJlYXV0aGVudGljYXRpb24tc3VwcG9ydD5mYWxzZTwvcmVhdXRoZW50aWNhdGlvbi1zdXBwb3J0PgotICAgICAgICAgICAgCisKICAgICAgICAgPC9vdXRib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0JPGFkbWlub2JqZWN0PgotCSAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgotCSAgICAgICA8YWRtaW5vYmplY3QtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluSW1wbDwvYWRtaW5vYmplY3QtY2xhc3M+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlNjaGVtYU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Sm5kaU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Tm9PZlJvd3M8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5JbnRlZ2VyPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICA8YWRtaW5vYmplY3Q+CisgICAgICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluPC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+CisgICAgICAgICAgIDxhZG1pbm9iamVjdC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW5JbXBsPC9hZG1pbm9iamVjdC1jbGFzcz4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+U2NoZW1hTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5KbmRpTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Ob09mUm93czwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLkludGVnZXI8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4wPC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8L2FkbWlub2JqZWN0PgotICAgICAgICAKKwogICAgIDwvcmVzb3VyY2VhZGFwdGVyPgotICAgIAorCiA8L2Nvbm5lY3Rvcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCmluZGV4IGIyMTljZDIuLjEyNDgwOWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQpAQCAtMjQsMjYgKzI0LDI2IEBACiAvKioKICAqIENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlcnsgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlcnsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgYSA8Y29kZT5Db25uZWN0aW9uIDwvY29kZT4gb2JqZWN0IHRvIHRoZSA8Y29kZT5Db25uZWN0aW9uRmFjdG9yeTwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCWluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHJldHVybglBIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gZ2V0dGluZyB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4uCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgaW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIEEgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvciBpbiBnZXR0aW5nIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGFsbG9jYXRlQ29ubmVjdGlvbihNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLAotICAgIAkJCQkgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKSAKLSAgICAJCQkJICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotCU1hbmFnZWRDb25uZWN0aW9uIG1jID0gbWNmLmNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGluZm8pOwotCXJldHVybiBtYy5nZXRDb25uZWN0aW9uKG51bGwsIGluZm8pOyAgICAJCQkJICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24geworICAgIE1hbmFnZWRDb25uZWN0aW9uIG1jID0gbWNmLmNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGluZm8pOworICAgIHJldHVybiBtYy5nZXRDb25uZWN0aW9uKG51bGwsIGluZm8pOwogICAgIH0KLSAgICAKKwogICAgIC8qCiAgICAgICogVGhpcyBjbGFzcyBjb3VsZCBlZmZlY3RpdmVseSBpbXBsZW1lbnQgQ29ubmVjdGlvbiBwb29saW5nIGFsc28uCiAgICAgICogQ291bGQgYmUgZG9uZSBmb3IgRkNTLgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQppbmRleCAzOWM3ODc2Li5jNDc3ZmMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQpAQCAtMTksMTAgKzE5LDEwIEBACiAvKioKICAqIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwotcHVibGljIGNsYXNzIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mb3sgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgdXNlcjsKICAgICBwcml2YXRlIFN0cmluZyBwYXNzd29yZDsKQEAgLTMwLDggKzMwLDggQEAKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gb2JqZWN0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcglVc2VyIE5hbWUuCi0gICAgICogQHBhcmFtCXBhc3N3b3JkCVBhc3N3b3JkCisgICAgICogQHBhcmFtICAgIHVzZXIgICAgVXNlciBOYW1lLgorICAgICAqIEBwYXJhbSAgICBwYXNzd29yZCAgICBQYXNzd29yZAogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uUmVxdWVzdEluZm8oU3RyaW5nIHVzZXIsIFN0cmluZyBwYXNzd29yZCkgewogICAgICAgICB0aGlzLnVzZXIgPSB1c2VyOwpAQCAtNDEsNyArNDEsNyBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgdXNlciBuYW1lIG9mIHRoZSBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVVzZXIgbmFtZSBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCisgICAgICogQHJldHVybiAgICBVc2VyIG5hbWUgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlcigpIHsKICAgICAgICAgcmV0dXJuIHVzZXI7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBwYXNzd29yZCBvZiB0aGUgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqCi0gICAgICogQHJldHVybglQYXNzd29yZCBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCisgICAgICogQHJldHVybiAgICBQYXNzd29yZCBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRQYXNzd29yZCgpIHsKICAgICAgICAgcmV0dXJuIHBhc3N3b3JkOwpAQCAtNTksNyArNTksNyBAQAogICAgIC8qKgogICAgICAqIFZlcmlmeSB3aGV0aGVyIHR3byBDb25uZWN0aW9uUmVxdWVzdEluZm9zIGFyZSBlcXVhbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JVHJ1ZSwgaWYgdGhleSBhcmUgZXF1YWwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKiBAcmV0dXJuICAgIFRydWUsIGlmIHRoZXkgYXJlIGVxdWFsIGFuZCBmYWxzZSBvdGhlcndpc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKICAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CkBAIC03NSwxOCArNzUsMTggQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGhhc2hjb2RlIG9mIHRoZSBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhhc2hDb2RlLgorICAgICAqIEByZXR1cm4gICAgaGFzaENvZGUuCiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKICAgICAgICAgU3RyaW5nIHJlc3VsdCA9ICIiICsgdXNlciArIHBhc3N3b3JkOwogICAgICAgICByZXR1cm4gcmVzdWx0Lmhhc2hDb2RlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tcGFyZXMgdHdvIG9iamVjdHMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbzEJRmlyc3Qgb2JqZWN0LgotICAgICAqIEBwYXJhbQlvMglTZWNvbmQgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvMSAgICBGaXJzdCBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG8yICAgIFNlY29uZCBvYmplY3QuCiAgICAgICovCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKICAgICAgICAgaWYgKG8xID09IG51bGwpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IDQxMWI3M2YuLmQ5ODc0YTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtMzEsMzYgKzMxLDM2IEBACiAvKioKICAqIERhdGEgU291cmNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMAotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzAKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIAogcHVibGljIGNsYXNzIERTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGV4dGVuZHMgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHsKLSAgIAorCiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgamF2YXguc3FsLkRhdGFTb3VyY2UgZGF0YVNvdXJjZU9iajsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CiAgICAgfQogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIEVJUyByZXNvdXJjZQogICAgICAqIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCi0gICAgICogICAgICAgCSAgICAgICAgICAgICAJYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+Ci0gICAgICogICAgICAgCSAgICAgICAgICAgICAJb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQotICAgICAqICAgICAgIAkJCQljcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0Ci0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdCAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwKICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC02OCw1NSArNjgsNTUgQEAKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGMgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLCBzdWJqZWN0LCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoZGF0YVNvdXJjZU9iaiA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZihkc09iakJ1aWxkZXIgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGRzT2JqQnVpbGRlciA9IG5ldyBEYXRhU291cmNlT2JqZWN0QnVpbGRlcihzcGVjKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZU9iaiA9IChqYXZheC5zcWwuRGF0YVNvdXJjZSkgZHNPYmpCdWlsZGVyLmNvbnN0cnVjdERhdGFTb3VyY2VPYmplY3QoKTsKICAgICAgICAgICAgIH0gY2F0Y2goQ2xhc3NDYXN0RXhjZXB0aW9uIGNjZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY2NlIiwgY2NlKTsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NjZSIsIGNjZSk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2UuUmVzb3VyY2VFeGNlcHRpb24oY2NlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkc0Nvbm4gPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewotCSAgICAvKiBGb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIvcGFzc3dkIG9mIHRoZSBjb25uZWN0aW9uIHBvb2wgaXMKLQkgICAgICogZXF1YWwgdG8gdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdAotCSAgICAgKiBnZXQgYSBjb25uZWN0aW9uIGZyb20gdGhpcyBwb29sIGRpcmVjdGx5LgotCSAgICAgKiBmb3IgYWxsIG90aGVyIGNvbmRpdGlvbnMgZ28gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24KLQkgICAgICovCi0JICAgIGlmICggaXNFcXVhbCggcGMsIGdldFVzZXIoKSwgZ2V0UGFzc3dvcmQoKSApICkgewotCSAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24ocGMuZ2V0VXNlck5hbWUoKSwgCi0JCSAgICBuZXcgU3RyaW5nKHBjLmdldFBhc3N3b3JkKCkpKTsKLQkgICAgfQorICAgICAgICAvKiBGb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIvcGFzc3dkIG9mIHRoZSBjb25uZWN0aW9uIHBvb2wgaXMKKyAgICAgICAgICogZXF1YWwgdG8gdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdAorICAgICAgICAgKiBnZXQgYSBjb25uZWN0aW9uIGZyb20gdGhpcyBwb29sIGRpcmVjdGx5LgorICAgICAgICAgKiBmb3IgYWxsIG90aGVyIGNvbmRpdGlvbnMgZ28gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24KKyAgICAgICAgICovCisgICAgICAgIGlmICggaXNFcXVhbCggcGMsIGdldFVzZXIoKSwgZ2V0UGFzc3dvcmQoKSApICkgeworICAgICAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24ocGMuZ2V0VXNlck5hbWUoKSwKKyAgICAgICAgICAgIG5ldyBTdHJpbmcocGMuZ2V0UGFzc3dvcmQoKSkpOworICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2NyZWF0ZV9jb25uIiwgc3FsZSk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBjb3VsZCBub3QgYmUgYWxsb2NhdGVkOiAiICsgCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19jcmVhdGVfY29ubiIsIHNxbGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGFsbG9jYXRlZDogIiArCiAgICAgICAgICAgICAgICAgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgZHNDb25uLCBwYywgdGhpcyk7CiAgICAgICAgIC8vR0pDSU5UCiAgICAgICAgIHNldElzb2xhdGlvbihtYyk7CiAgICAgICAgIGlzVmFsaWQobWMpOwogICAgICAgICByZXR1cm4gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvIAorICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0bwogICAgICAqIGFub3RoZXIgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jb3RoZXIJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCi0gICAgICoJCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIG90aGVyICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCisgICAgICogICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTEyNyw0MDkgKzEyNyw0MDkgQEAKICAgICAgICAgICogaWYgYW5kIG9ubHkgaWYgdGhlaXIgcHJvcGVydGllcyBhcmUgdGhlIHNhbWUuCiAgICAgICAgICAqLwogICAgICAgICBpZihvdGhlciBpbnN0YW5jZW9mIGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSkgewotICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG90aGVyTUNGID0gCisgICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnkgb3RoZXJNQ0YgPQogICAgICAgICAgICAgICAgIChjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpIG90aGVyOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BlYy5lcXVhbHMob3RoZXJNQ0Yuc3BlYyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlcnZlck5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc2VydmVyTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHNlcnZlck5hbWUoU3RyaW5nIHNlcnZlck5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSwgc2VydmVyTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXNlcnZlck5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBzZXJ2ZXJOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0c2VydmVyTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlcnZlck5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc2VydmVyTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFNlcnZlck5hbWUoU3RyaW5nIHNlcnZlck5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSwgc2VydmVyTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXNlcnZlck5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBzZXJ2ZXJOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvcnROdW1iZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcG9ydE51bWJlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHBvcnROdW1iZXIoU3RyaW5nIHBvcnROdW1iZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiwgcG9ydE51bWJlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBvcnROdW1iZXIKLSAgICAgKiBAc2VlCTxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBwb3J0TnVtYmVyCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0cG9ydE51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvcnROdW1iZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcG9ydE51bWJlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFBvcnROdW1iZXIoU3RyaW5nIHBvcnROdW1iZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiwgcG9ydE51bWJlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBvcnROdW1iZXIKLSAgICAgKiBAc2VlCTxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBwb3J0TnVtYmVyCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UG9ydE51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGF0YWJhc2VOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGF0YWJhc2VOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkYXRhYmFzZU5hbWUoU3RyaW5nIGRhdGFiYXNlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUsIGRhdGFiYXNlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGF0YWJhc2VOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkYXRhYmFzZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRhdGFiYXNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkYXRhYmFzZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkYXRhYmFzZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERhdGFiYXNlTmFtZShTdHJpbmcgZGF0YWJhc2VOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSwgZGF0YWJhc2VOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkYXRhYmFzZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRhdGFiYXNlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGF0YWJhc2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRhdGFTb3VyY2VOYW1lKFN0cmluZyBkc24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUsIGRzbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHNuCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRzbgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkYXRhU291cmNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERhdGFTb3VyY2VOYW1lKFN0cmluZyBkc24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUsIGRzbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHNuCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRzbgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREYXRhU291cmNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZXNjCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZXNjICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRlc2NyaXB0aW9uKFN0cmluZyBkZXNjKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OLCBkZXNjKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVzYwotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZXNjCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRlc2NyaXB0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlc2MJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlc2MgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2MpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04sIGRlc2MpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglkZXNjCi0gICAgICogQHNlZQk8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlc2MKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlud1Byb3RvY29sCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbndQcm90b2NvbCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0bmV0d29ya1Byb3RvY29sKFN0cmluZyBud1Byb3RvY29sKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCwgbndQcm90b2NvbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbndQcm90b2NvbAotICAgICAqIEBzZWUJPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbndQcm90b2NvbAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0bmV0d29ya1Byb3RvY29sKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHBhcmFtCW53UHJvdG9jb2wJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBud1Byb3RvY29sICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrUHJvdG9jb2woU3RyaW5nIG53UHJvdG9jb2wpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MLCBud1Byb3RvY29sKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHJldHVybglud1Byb3RvY29sCi0gICAgICogQHNlZQk8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHJldHVybiAgICBud1Byb3RvY29sCisgICAgICogQHNlZSAgICA8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXROZXR3b3JrUHJvdG9jb2woKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlyb2xlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcm9sZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0cm9sZU5hbWUoU3RyaW5nIHJvbGVOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FLCByb2xlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglyb2xlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICByb2xlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRyb2xlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jcm9sZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJvbGVOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJvbGVOYW1lKFN0cmluZyByb2xlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSwgcm9sZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jcm9sZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcm9sZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Um9sZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSk7CiAgICAgfQogCi0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHBhcmFtCWxvZ2luVGltZU91dAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZU91dCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0bG9naW5UaW1lT3V0KFN0cmluZyBsb2dpblRpbWVPdXQpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VULCBsb2dpblRpbWVPdXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWxvZ2luVGltZW91dAotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbG9naW5UaW1lb3V0CisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRsb2dpblRpbWVPdXQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lT3V0CTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lT3V0ICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dpblRpbWVPdXQoU3RyaW5nIGxvZ2luVGltZU91dCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQsIGxvZ2luVGltZU91dCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbG9naW5UaW1lb3V0Ci0gICAgICogQHNlZQk8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHJldHVybiAgICBsb2dpblRpbWVvdXQKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldExvZ2luVGltZU91dCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlbGltCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVsaW0gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRlbGltaXRlcihTdHJpbmcgZGVsaW0pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSLCBkZWxpbSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHJldHVybglkZWxpbQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVsaW0KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRlbGltaXRlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlbGltCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVsaW0gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlbGltaXRlcihTdHJpbmcgZGVsaW0pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSLCBkZWxpbSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHJldHVybglkZWxpbQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVsaW0KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlbGltaXRlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHJpdmVyUHJvcHMJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHJpdmVyUHJvcHMgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkcml2ZXJQcm9wZXJ0aWVzKFN0cmluZyBkcml2ZXJQcm9wcykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTLCBkcml2ZXJQcm9wcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRyaXZlclByb3BzCi0gICAgICogQHNlZQk8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHJpdmVyUHJvcHMKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkcml2ZXJQcm9wZXJ0aWVzKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHJpdmVyUHJvcHMJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHJpdmVyUHJvcHMgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREcml2ZXJQcm9wZXJ0aWVzKFN0cmluZyBkcml2ZXJQcm9wcykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTLCBkcml2ZXJQcm9wcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRyaXZlclByb3BzCi0gICAgICogQHNlZQk8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHJpdmVyUHJvcHMKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREcml2ZXJQcm9wZXJ0aWVzKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7CkBAIC01MzksMzUgKzUzOSwzNSBAQAogICAgICAqIENoZWNrIGlmIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgcGFzc2VkIGZvciB0aGlzIGdldCBjb25uZWN0aW9uCiAgICAgICogcmVxdWVzdCBpcyBlcXVhbCB0byB0aGUgdXNlci9wYXNzd2Qgb2YgdGhpcyBjb25uZWN0aW9uIHBvb2wuCiAgICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoIFBhc3N3b3JkQ3JlZGVudGlhbCBwYywgU3RyaW5nIHVzZXIsIAorICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKCBQYXNzd29yZENyZWRlbnRpYWwgcGMsIFN0cmluZyB1c2VyLAogICAgICAgICBTdHJpbmcgcGFzc3dvcmQpIHsKLSAgICAgICAgCi0JLy9pZiBlcXVhbCBnZXQgZGlyZWN0IGNvbm5lY3Rpb24gZWxzZSAKLQkvL2dldCBjb25uZWN0aW9uIHdpdGggdXNlciBhbmQgcGFzc3dvcmQuCi0JCi0JaWYgKHVzZXIgPT0gbnVsbCAmJiBwYyA9PSBudWxsKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0KLQkKLQlpZiAoIHVzZXIgPT0gbnVsbCAmJiBwYyAhPSBudWxsICkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCX0KIAotCWlmKCBwYyA9PSBudWxsICkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JaWYgKCB1c2VyLmVxdWFscyggcGMuZ2V0VXNlck5hbWUoKSApICkgewotCSAgICBpZiAoIHBhc3N3b3JkID09IG51bGwgJiYgcGMuZ2V0UGFzc3dvcmQoKSA9PSBudWxsICkgewotCSAgICAgICAgcmV0dXJuIHRydWU7Ci0JICAgIH0KLQl9Ci0JCi0JaWYgKCB1c2VyLmVxdWFscyhwYy5nZXRVc2VyTmFtZSgpKSAmJiBwYXNzd29yZC5lcXVhbHMocGMuZ2V0UGFzc3dvcmQoKSkgKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0gCi0JCi0gICAgICAgIAotCXJldHVybiBmYWxzZTsKKyAgICAvL2lmIGVxdWFsIGdldCBkaXJlY3QgY29ubmVjdGlvbiBlbHNlCisgICAgLy9nZXQgY29ubmVjdGlvbiB3aXRoIHVzZXIgYW5kIHBhc3N3b3JkLgorCisgICAgaWYgKHVzZXIgPT0gbnVsbCAmJiBwYyA9PSBudWxsKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICggdXNlciA9PSBudWxsICYmIHBjICE9IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYoIHBjID09IG51bGwgKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICggdXNlci5lcXVhbHMoIHBjLmdldFVzZXJOYW1lKCkgKSApIHsKKyAgICAgICAgaWYgKCBwYXNzd29yZCA9PSBudWxsICYmIHBjLmdldFBhc3N3b3JkKCkgPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCB1c2VyLmVxdWFscyhwYy5nZXRVc2VyTmFtZSgpKSAmJiBwYXNzd29yZC5lcXVhbHMocGMuZ2V0UGFzc3dvcmQoKSkgKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworCisgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YQppbmRleCAyMTlhMzY1Li40YmY4YjdiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCkBAIC0yOCwyMiArMjgsMjIgQEAKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CiAvKioKLSAqIEhvbGRzIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlIAorICogSG9sZHMgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCwgd2hpY2ggaXMgdG8gYmUKICAqIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbS4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2UgaW1wbGVtZW50cyBqYXZheC5zcWwuRGF0YVNvdXJjZSwgamF2YS5pby5TZXJpYWxpemFibGUsCi0JCWNvbS5zdW4uYXBwc2Vydi5qZGJjcmEuRGF0YVNvdXJjZSwgamFrYXJ0YS5yZXNvdXJjZS5SZWZlcmVuY2VhYmxleyAKLQkJCQkgICAKKyAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmNyYS5EYXRhU291cmNlLCBqYWthcnRhLnJlc291cmNlLlJlZmVyZW5jZWFibGV7CisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2Y7Ci0gICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsJCQkJICAgCQkJCSAgIAorICAgIHByaXZhdGUgQ29ubmVjdGlvbk1hbmFnZXIgY207CiAgICAgcHJpdmF0ZSBpbnQgbG9naW5UaW1lb3V0OwogICAgIHByaXZhdGUgUHJpbnRXcml0ZXIgbG9nV3JpdGVyOwotICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwkJCQkgICAKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKICAgICBwcml2YXRlIFJlZmVyZW5jZSByZWZlcmVuY2U7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTEsNTcgKzUxLDU3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnID0gZmFsc2U7CiAKICAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdC4gVGhpcyBpcyBjcmVhdGVkIGJ5IHRoZSAKKyAgICAgKiBDb25zdHJ1Y3RzIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdC4gVGhpcyBpcyBjcmVhdGVkIGJ5IHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCAKLSAgICAgKgkJCWNyZWF0aW5nIHRoaXMgb2JqZWN0LgotICAgICAqIEBwYXJhbQljbQk8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gb2JqZWN0IGVpdGhlciBhc3NvY2lhdGVkCi0gICAgICoJCQl3aXRoIEFwcGxpY2F0aW9uIHNlcnZlciBvciBSZXNvdXJjZSBBZGFwdGVyLgorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgIGNyZWF0aW5nIHRoaXMgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBjbSAgICA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gb2JqZWN0IGVpdGhlciBhc3NvY2lhdGVkCisgICAgICogICAgICAgICAgICB3aXRoIEFwcGxpY2F0aW9uIHNlcnZlciBvciBSZXNvdXJjZSBBZGFwdGVyLgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhU291cmNlIChNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLCBDb25uZWN0aW9uTWFuYWdlciBjbSkgewotICAgIAl0aGlzLm1jZiA9IG1jZjsKLSAgICAJaWYgKGNtID09IG51bGwpIHsKLSAgICAJICAgIHRoaXMuY20gPSAoQ29ubmVjdGlvbk1hbmFnZXIpIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIoKTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHRoaXMuY20gPSBjbTsKLSAgICAJfSAgICAJCi0gICAgfSAgIAotICAgIAorICAgICAgICB0aGlzLm1jZiA9IG1jZjsKKyAgICAgICAgaWYgKGNtID09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuY20gPSAoQ29ubmVjdGlvbk1hbmFnZXIpIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuY20gPSBjbTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogCi0gICAgICogQHJldHVybgk8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLiAgICAgIAorICAgICAqCisgICAgICogQHJldHVybiAgICA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJdHJ5IHsKLSAgICAJICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixudWxsKTsgICAgCSAgICAKLSAgICAJfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixudWxsKTsKKyAgICAgICAgfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKIC8vIFRoaXMgaXMgdGVtcG9yYXJ5LiBUaGlzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gU0VWRVJFIGFmdGVyIFRQCi0JICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOwotICAgIAl9CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JdXNlcglVc2VyIG5hbWUgZm9yIHRoZSBDb25uZWN0aW9uLgotICAgICAqIEBwYXJhbQlwd2QJUGFzc3dvcmQgZm9yIHRoZSBDb25uZWN0aW9uLgotICAgICAqIEByZXR1cm4JPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4gICAgICAKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIFVzZXIgbmFtZSBmb3IgdGhlIENvbm5lY3Rpb24uCisgICAgICogQHBhcmFtICAgIHB3ZCAgICBQYXNzd29yZCBmb3IgdGhlIENvbm5lY3Rpb24uCisgICAgICogQHJldHVybiAgICA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oU3RyaW5nIHVzZXIsIFN0cmluZyBwd2QpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAl0cnkgewotICAgIAkgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8gPSBuZXcgQ29ubmVjdGlvblJlcXVlc3RJbmZvICh1c2VyLCBwd2QpOwotICAgIAkgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLGluZm8pOwotICAgIAl9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8gPSBuZXcgQ29ubmVjdGlvblJlcXVlc3RJbmZvICh1c2VyLCBwd2QpOworICAgICAgICAgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLGluZm8pOworICAgICAgICB9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewogLy8gVGhpcyBpcyB0ZW1wb3JhcnkuIFRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byBTRVZFUkUgYWZ0ZXIgVFAKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCX0KLSAgICB9ICAgIAorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyCkBAIC0xMTQsMjIgKzExNCwyMiBAQAogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogCi0gICAgICAgIENvbm5lY3Rpb24gZHJpdmVyQ29uID0gY29uOyAKKyAgICAgICAgQ29ubmVjdGlvbiBkcml2ZXJDb24gPSBjb247CiAgICAgICAgIGlmIChjb24gaW5zdGFuY2VvZiBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgewotICAgICAgICAgICBkcml2ZXJDb24gPSAoKGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSBjb24pLmdldENvbm5lY3Rpb24oKTsgCi0gICAgICAgIH0gCisgICAgICAgICAgIGRyaXZlckNvbiA9ICgoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIGNvbikuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGRyaXZlckNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGxvZ2luIHRpbWVvdXQKICAgICAgKgogICAgICAqIEByZXR1cm4gbG9naW4gdGltZW91dC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldExvZ2luVGltZW91dCgpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXJldHVybglsb2dpblRpbWVvdXQ7CisgICAgICAgIHJldHVybiAgICBsb2dpblRpbWVvdXQ7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC0xNDAsNjcgKzE0MCw2NyBAQAogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9naW4gdGltZW91dAogICAgICAqCi0gICAgICogQHBhcmFtCWxvZ2luVGltZW91dAlMb2dpbiB0aW1lb3V0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEBwYXJhbSAgICBsb2dpblRpbWVvdXQgICAgTG9naW4gdGltZW91dC4KKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dpblRpbWVvdXQoaW50IGxvZ2luVGltZW91dCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJdGhpcy5sb2dpblRpbWVvdXQgPSBsb2dpblRpbWVvdXQ7CisgICAgICAgIHRoaXMubG9naW5UaW1lb3V0ID0gbG9naW5UaW1lb3V0OwogICAgIH0KLSAgICAKLSAgICAvKiogCisKKyAgICAvKioKICAgICAgKiBHZXQgdGhlIGxvZ3dyaXRlciBvYmplY3QuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmludFdyaXRlciA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KICAgICAgKi8KICAgICBwdWJsaWMgUHJpbnRXcml0ZXIgZ2V0TG9nV3JpdGVyKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJcmV0dXJuCWxvZ1dyaXRlcjsKKyAgICAgICAgcmV0dXJuICAgIGxvZ1dyaXRlcjsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBsb2d3cml0ZXIgb24gdGhpcyBvYmplY3QuCiAgICAgICoKICAgICAgKiBAcGFyYW0gPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dXcml0ZXIoUHJpbnRXcml0ZXIgbG9nV3JpdGVyKSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAl0aGlzLmxvZ1dyaXRlciA9IGxvZ1dyaXRlcjsKLSAgICB9ICAgICAgICAKLSAgICAgICAgCisgICAgICAgIHRoaXMubG9nV3JpdGVyID0gbG9nV3JpdGVyOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCURlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgorICAgICAqIEByZXR1cm4gICAgRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKLSAgICAJcmV0dXJuIGRlc2NyaXB0aW9uOworICAgICAgICByZXR1cm4gZGVzY3JpcHRpb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgogICAgICAqIEBwYXJhbSBkZXNjcmlwdGlvbiBEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzY3JpcHRpb24pIHsKLSAgICAJdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotICAgIH0gICAgCi0gICAgCisgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIHJlZmVyZW5jZS4KICAgICAgKgogICAgICAqIEByZXR1cm4gPGNvZGU+UmVmZXJlbmNlPC9jb2RlPm9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgUmVmZXJlbmNlIGdldFJlZmVyZW5jZSgpIHsKLSAgICAJcmV0dXJuIHJlZmVyZW5jZTsKKyAgICAgICAgcmV0dXJuIHJlZmVyZW5jZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIHJlZmVyZW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZWZlcmVuY2UgPGNvZGU+UmVmZXJlbmNlPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIHJlZmVyZW5jZSA8Y29kZT5SZWZlcmVuY2U8L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSZWZlcmVuY2UoUmVmZXJlbmNlIHJlZmVyZW5jZSkgewotICAgIAl0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTsKKyAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQppbmRleCA1NzRlZDY2Li5iZWMwZDZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKQEAgLTE4LDEzICsxOCwxMyBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEpkYmNTZXR1cEFkbWluIHsKIAotICAgIHB1YmxpYyB2b2lkIHNldFRhYmxlTmFtZShTdHJpbmcgZGIpOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRUYWJsZU5hbWUoU3RyaW5nIGRiKTsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFibGVOYW1lKCk7CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRKbmRpTmFtZShTdHJpbmcgbmFtZSk7IAorICAgIHB1YmxpYyB2b2lkIHNldEpuZGlOYW1lKFN0cmluZyBuYW1lKTsKIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Sm5kaU5hbWUoKTsgCisgICAgcHVibGljIFN0cmluZyBnZXRKbmRpTmFtZSgpOwogCiAgICAgcHVibGljIHZvaWQgc2V0U2NoZW1hTmFtZShTdHJpbmcgbmFtZSk7CiAKQEAgLTM0LDYgKzM0LDYgQEAKIAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldE5vT2ZSb3dzKCk7CiAKLSAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCk7IAorICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2V0dXAoKTsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQppbmRleCAzYmQ3Y2FkLi5mZWM3NDQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQpAQCAtNjUsMTEgKzY1LDExIEBACiAKIHByaXZhdGUgdm9pZCBwcmludEhpZXJhcmNoeShDbGFzc0xvYWRlciBjbCwgaW50IGNudCl7CiB3aGlsZShjbCAhPSBudWxsKSB7Ci0JZm9yKGludCBpID0wOyBpIDwgY250OyBpKyspIAotCQlTeXN0ZW0ub3V0LnByaW50KCIgIiApOwotCVN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIDoiICsgY2wpOwotCWNsID0gY2wuZ2V0UGFyZW50KCk7Ci0JY250ICs9IDM7CisgICAgZm9yKGludCBpID0wOyBpIDwgY250OyBpKyspCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiAiICk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgOiIgKyBjbCk7CisgICAgY2wgPSBjbC5nZXRQYXJlbnQoKTsKKyAgICBjbnQgKz0gMzsKIH0KIH0KIApAQCAtNzgsMTAgKzc4LDEwIEBACiAgICAgICAgIGZvcihpbnQgaSA9MDsgaSA8IGNudDsgaSsrKQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiAiICk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIG9mIENsYXNzTG9hZGVyIDEgOiIgKyBjbDEpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIG9mIENsYXNzTG9hZGVyIDIgOiIgKyBjbDIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiRVFVQUxTIDogIiArIChjbDEgPT0gY2wyKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgb2YgQ2xhc3NMb2FkZXIgMiA6IiArIGNsMik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJFUVVBTFMgOiAiICsgKGNsMSA9PSBjbDIpKTsKICAgICAgICAgY2wxID0gY2wxLmdldFBhcmVudCgpOwotCWNsMiA9IGNsMi5nZXRQYXJlbnQoKTsKKyAgICBjbDIgPSBjbDIuZ2V0UGFyZW50KCk7CiAgICAgICAgIGNudCArPSAzOwogfQogfQpAQCAtOTAsOTMgKzkwLDkzIEBACiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZXR1cCgpewogCiAgICAgICAgIGlmIChqbmRpTmFtZT09IG51bGwgfHwgam5kaU5hbWUudHJpbSgpLmVxdWFscygiIikpIHsKLQkgICByZXR1cm4gZmFsc2U7Ci0JfQorICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICAgICAgaWYgKHRhYmxlTmFtZT09IG51bGwgfHwgdGFibGVOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgcmV0dXJuIGZhbHNlOwotCX0KKyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKLQlTdGF0ZW1lbnQgcyA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzID0gbnVsbDsKLQlib29sZWFuIGIgPSBmYWxzZTsKKyAgICBTdGF0ZW1lbnQgcyA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzID0gbnVsbDsKKyAgICBib29sZWFuIGIgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKLQkgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkvL2RlYnVnCi0JQ2xhc3MgY2x6ID0gRGF0YVNvdXJjZS5jbGFzczsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAvL2RlYnVnCisgICAgQ2xhc3MgY2x6ID0gRGF0YVNvdXJjZS5jbGFzczsKIC8qCi0JaWYoY2x6LmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRhdGFTb3VyY2UncyBjbGFzeHMgOiAiICsgIGNsei5nZXROYW1lKCkgKyAgIiBjbGFzc2xvYWRlciAiICsgY2x6LmdldENsYXNzTG9hZGVyKCkpOwotCQlwcmludEhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7Ci0JfQotCUNsYXNzIGNscyA9IGljLmxvb2t1cChqbmRpTmFtZSkuZ2V0Q2xhc3MoKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBjbGFzcydzIDogIiArIGNscy5nZXRQYWNrYWdlKCkgKyAiOiIgKyBjbHMuZ2V0TmFtZSgpICArICIgY2xhc3Nsb2FkZXIgIiAgKyBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0JcHJpbnRIaWVyYXJjaHkoY2xzLmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOworICAgIGlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEYXRhU291cmNlJ3MgY2xhc3hzIDogIiArICBjbHouZ2V0TmFtZSgpICsgICIgY2xhc3Nsb2FkZXIgIiArIGNsei5nZXRDbGFzc0xvYWRlcigpKTsKKyAgICAgICAgcHJpbnRIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOworICAgIH0KKyAgICBDbGFzcyBjbHMgPSBpYy5sb29rdXAoam5kaU5hbWUpLmdldENsYXNzKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgY2xhc3MncyA6ICIgKyBjbHMuZ2V0UGFja2FnZSgpICsgIjoiICsgY2xzLmdldE5hbWUoKSAgKyAiIGNsYXNzbG9hZGVyICIgICsgY2xzLmdldENsYXNzTG9hZGVyKCkpOworICAgIHByaW50SGllcmFyY2h5KGNscy5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3Nsb2FkZXJzIGVxdWFsID8gIiArICAoY2x6LmdldENsYXNzTG9hZGVyKCkgPT0gY2xzLmdldENsYXNzTG9hZGVyKCkpKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIiYqJiomKiYqIENvbXBhcmluZyBIaWVyYWNoeSBEYXRhU291cmNlIHZzIGxvb2tlZHVwIik7Ci0JaWYoY2x6LmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgewotCQljb21wYXJlSGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLCBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSwgOCk7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3Nsb2FkZXJzIGVxdWFsID8gIiArICAoY2x6LmdldENsYXNzTG9hZGVyKCkgPT0gY2xzLmdldENsYXNzTG9hZGVyKCkpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiYqJiomKiYqIENvbXBhcmluZyBIaWVyYWNoeSBEYXRhU291cmNlIHZzIGxvb2tlZHVwIik7CisgICAgaWYoY2x6LmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgeworICAgICAgICBjb21wYXJlSGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLCBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSwgOCk7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgbG9va3VwIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgbG9va3VwIik7CiAqLwotCU9iamVjdCBvID0gaWMubG9va3VwKGpuZGlOYW1lKTsKLS8vCVN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgbG9va3VwIGxvb2t1cCIpOworICAgIE9iamVjdCBvID0gaWMubG9va3VwKGpuZGlOYW1lKTsKKy8vICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgbG9va3VwIGxvb2t1cCIpOwogCi0JICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlvIDsKKyAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKW8gOwogLyoKLQlTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGNhc3QiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0gVHJ5aW5nIG91ciBTdHVmZiAhISEiKTsKLQl0cnkgewotCQlDbGFzcyBvMSA9IChDbGFzcy5mb3JOYW1lKCJjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSIpKTsKLQkJQ2xhc3NMb2FkZXIgY2wxID0gbzEuZ2V0Q2xhc3NMb2FkZXIoKTsKLQkJQ2xhc3NMb2FkZXIgY2wyID0gRGF0YVNvdXJjZS5jbGFzcy5nZXRDbGFzc0xvYWRlcigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsMSA9PSBDbDIiICsgKGNsMSA9PSBjbDIpKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2VzIGVxdWFsIiArIChEYXRhU291cmNlLmNsYXNzID09IG8xKSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGNhc3QiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0gVHJ5aW5nIG91ciBTdHVmZiAhISEiKTsKKyAgICB0cnkgeworICAgICAgICBDbGFzcyBvMSA9IChDbGFzcy5mb3JOYW1lKCJjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSIpKTsKKyAgICAgICAgQ2xhc3NMb2FkZXIgY2wxID0gbzEuZ2V0Q2xhc3NMb2FkZXIoKTsKKyAgICAgICAgQ2xhc3NMb2FkZXIgY2wyID0gRGF0YVNvdXJjZS5jbGFzcy5nZXRDbGFzc0xvYWRlcigpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsMSA9PSBDbDIiICsgKGNsMSA9PSBjbDIpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2VzIGVxdWFsIiArIChEYXRhU291cmNlLmNsYXNzID09IG8xKSk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICovCiAgICAgICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIFN0cmluZyBmdWxsVGFibGVOYW1lID0gdGFibGVOYW1lOwotCSAgICBpZiAoc2NoZW1hTmFtZSAhPSBudWxsICYmICghKHNjaGVtYU5hbWUudHJpbSgpLmVxdWFscygiIikpKSkgewotCSAgICAgICAgZnVsbFRhYmxlTmFtZSA9IHNjaGVtYU5hbWUudHJpbSgpICsgIi4iICsgZnVsbFRhYmxlTmFtZTsKLQkgICAgfQotCSAgICBTdHJpbmcgcXJ5ID0gInNlbGVjdCAqIGZyb20gIiArIGZ1bGxUYWJsZU5hbWU7IAorICAgICAgICBTdHJpbmcgZnVsbFRhYmxlTmFtZSA9IHRhYmxlTmFtZTsKKyAgICAgICAgaWYgKHNjaGVtYU5hbWUgIT0gbnVsbCAmJiAoIShzY2hlbWFOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSkpIHsKKyAgICAgICAgICAgIGZ1bGxUYWJsZU5hbWUgPSBzY2hlbWFOYW1lLnRyaW0oKSArICIuIiArIGZ1bGxUYWJsZU5hbWU7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHFyeSA9ICJzZWxlY3QgKiBmcm9tICIgKyBmdWxsVGFibGVOYW1lOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0aW5nIHF1ZXJ5IDoiICsgcXJ5KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRpbmcgcXVlcnkgOiIgKyBxcnkpOwogCi0JICAgIHMgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHJzID0gcy5leGVjdXRlUXVlcnkocXJ5KTsgCisgICAgICAgIHMgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHJzID0gcy5leGVjdXRlUXVlcnkocXJ5KTsKIAogICAgICAgICAgICAgaW50IGkgPSAwOwotCSAgICBpZiAocnMubmV4dCgpKSB7Ci0JICAgICAgICBpKys7Ci0JICAgIH0KKyAgICAgICAgaWYgKHJzLm5leHQoKSkgeworICAgICAgICAgICAgaSsrOworICAgICAgICB9CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gb2Ygcm93cyBmb3VuZDoiICsgaSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vIG9mIHJvd3MgZXhwZWN0ZWQ6IiArIG5vT2ZSb3dzKTsKIAotCSAgICBpZiAoaSA9PSBub09mUm93cy5pbnRWYWx1ZSgpKSB7Ci0JICAgICAgIGIgPSB0cnVlOwotCSAgICB9IGVsc2UgewotCSAgICAgICBiID0gZmFsc2U7Ci0JICAgIH0KLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIGIgPSBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICB0cnkgewotCSAgICAgICAgaWYgKHJzICE9IG51bGwpIHJzLmNsb3NlKCk7Ci0JICAgICAgICBpZiAocyAhPSBudWxsKSBzLmNsb3NlKCk7Ci0JICAgICAgICBpZiAoY29uICE9IG51bGwpIGNvbi5jbG9zZSgpOworICAgICAgICBpZiAoaSA9PSBub09mUm93cy5pbnRWYWx1ZSgpKSB7CisgICAgICAgICAgIGIgPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICBiID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIGIgPSBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKHJzICE9IG51bGwpIHJzLmNsb3NlKCk7CisgICAgICAgICAgICBpZiAocyAhPSBudWxsKSBzLmNsb3NlKCk7CisgICAgICAgICAgICBpZiAoY29uICE9IG51bGwpIGNvbi5jbG9zZSgpOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgfQotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIlJldHVybmluZyBzZXR1cCA6IiArYik7Ci0JcmV0dXJuIGI7CisgICAgICAgIH0KKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXR1cm5pbmcgc2V0dXAgOiIgK2IpOworICAgIHJldHVybiBiOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCmluZGV4IDhlYmUwNTcuLmM1NGEyMTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEKQEAgLTIzLDQ1ICsyMyw0NSBAQAogLyoqCiAgKiA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzAzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIExvY2FsVHJhbnNhY3Rpb24gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Mb2NhbFRyYW5zYWN0aW9uIHsKLSAgICAKKwogICAgIHByaXZhdGUgTWFuYWdlZENvbm5lY3Rpb24gbWM7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4uCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IHJldHVybnMKLSAgICAgKgkJCXRoaXMgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gb2JqZWN0IGFzCi0gICAgICoJCQlhIHJlc3VsdCBvZiA8Y29kZT5nZXRMb2NhbFRyYW5zYWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCByZXR1cm5zCisgICAgICogICAgICAgICAgICB0aGlzIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IG9iamVjdCBhcworICAgICAqICAgICAgICAgICAgYSByZXN1bHQgb2YgPGNvZGU+Z2V0TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgTG9jYWxUcmFuc2FjdGlvbihNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLm1jID0gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQmVnaW4gYSBsb2NhbCB0cmFuc2FjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYmVnaW4oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uU3RhcnRlZCgpOworICAgIG1jLnRyYW5zYWN0aW9uU3RhcnRlZCgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpLnNldEF1dG9Db21taXQoZmFsc2UpOwogICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21taXQgYSBsb2NhbCB0cmFuc2FjdGlvbi4KLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uIG9yIGNvbW1pdHRpbmcgdGhlIHRyYW5zYWN0aW9uCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBvciBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbW1pdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIEV4Y2VwdGlvbiBlID0gbnVsbDsKQEAgLTcyLDE1ICs3MiwxNSBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJvbGxiYWNrIGEgbG9jYWwgdHJhbnNhY3Rpb24uCi0gICAgICogCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbiBvciByb2xsaW5nIGJhY2sgdGhlIHRyYW5zYWN0aW9uCisgICAgICoKKyAgICAgKiBAdGhyb3dzICAgIExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIG9yIHJvbGxpbmcgYmFjayB0aGUgdHJhbnNhY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjaygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CkBAIC05MCw3ICs5MCw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQppbmRleCAzMGY0NjBhLi4yZGFkNTlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKQEAgLTQxLDggKzQxLDggQEAKIC8qKgogICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjIKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIyCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb24gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiB7CiAKQEAgLTUyLDcgKzUyLDcgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBpc0Rlc3Ryb3llZCA9IGZhbHNlOwogICAgIHByaXZhdGUgYm9vbGVhbiBpc1VzYWJsZSA9IHRydWU7Ci0gICAgCisKICAgICBwcml2YXRlIGludCBjb25uZWN0aW9uVHlwZSA9IElTTk9UQVBPT0xFRENPTk5FQ1RJT047CiAgICAgcHJpdmF0ZSBQb29sZWRDb25uZWN0aW9uIHBjID0gbnVsbDsKICAgICBwcml2YXRlIGphdmEuc3FsLkNvbm5lY3Rpb24gYWN0dWFsQ29ubmVjdGlvbiA9IG51bGw7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgcHJpdmF0ZSBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmID0gbnVsbDsKICAgICBwcml2YXRlIFhBUmVzb3VyY2UgeGFyID0gbnVsbDsKICAgICBwdWJsaWMgQ29ubmVjdGlvbkhvbGRlciBhY3RpdmVDb25uZWN0aW9uSGFuZGxlOwotICAgIAorCiAgICAgLy9HSkNJTlQKICAgICBwcml2YXRlIGludCBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkOwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0NsZWFuID0gZmFsc2U7CkBAIC03Nyw3MSArNzcsNzEgQEAKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uIFRoZSBwb29sZWRDb25uIHBhcmFtZXRlciBpcyBleHBlY3RlZAotICAgICAqIHRvIGJlIG51bGwgYW5kIHNxbENvbm4gcGFyYW1ldGVyIGlzIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiBjYXNlIHdoZXJlIAotICAgICAqIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpcyBnb3QgZnJvbSBhIG5vbiBwb29sZWQgZGF0YXNvdXJjZSBvYmplY3QuIFRoZSAKKyAgICAgKiB0byBiZSBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlciBpcyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gY2FzZSB3aGVyZQorICAgICAqIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpcyBnb3QgZnJvbSBhIG5vbiBwb29sZWQgZGF0YXNvdXJjZSBvYmplY3QuIFRoZQogICAgICAqIHBvb2xlZENvbm4gcGFyYW1ldGVyIGlzIGV4cGVjdGVkIHRvIGJlIG5vbiBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlcgogICAgICAqIGlzIGV4cGVjdGVkIHRvIGJlIG51bGwgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGRhdGFzb3VyY2Ugb2JqZWN0IGlzIGEKICAgICAgKiBjb25uZWN0aW9uIHBvb2wgZGF0YXNvdXJjZSBvciBhbiB4YSBkYXRhc291cmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvb2xlZENvbm4JPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIAotICAgICAqCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIHBvb2xlZAotICAgICAqCQkJCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OyBudWxsIG90aGVyd2lzZQotICAgICAqIEBwYXJhbQlzcWxDb25uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSBwaHlzaWNhbAotICAgICAqCQkJY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgbm9uIHBvb2xlZCA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsKLSAgICAgKgkJCW51bGwgb3RoZXJ3aXNlCi0gICAgICogQHBhcmFtCXBhc3N3ZENyZWQJb2JqZWN0IGNvbmF0aW5pbmcgdGhlCi0gICAgICoJCQkJdXNlciBhbmQgcGFzc3dvcmQgZm9yIGFsbG9jYXRpbmcgdGhlIGNvbm5lY3Rpb24KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdAotICAgICAqCQkJCQl0aGF0IGNyZWF0ZWQgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0Ci0gICAgICoJCQkJCWlzIG5vdCB0aGUgc2FtZSBhcyByZXR1cm5lZCBieSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICoJCQkJCW9iamVjdCBwYXNzZWQKKyAgICAgKiBAcGFyYW0gICAgcG9vbGVkQ29ubiAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBwb29sZWQKKyAgICAgKiAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsgbnVsbCBvdGhlcndpc2UKKyAgICAgKiBAcGFyYW0gICAgc3FsQ29ubiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIG5vbiBwb29sZWQgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47CisgICAgICogICAgICAgICAgICBudWxsIG90aGVyd2lzZQorICAgICAqIEBwYXJhbSAgICBwYXNzd2RDcmVkICAgIG9iamVjdCBjb25hdGluaW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgIHVzZXIgYW5kIHBhc3N3b3JkIGZvciBhbGxvY2F0aW5nIHRoZSBjb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdGhhdCBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICBpcyBub3QgdGhlIHNhbWUgYXMgcmV0dXJuZWQgYnkgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICBvYmplY3QgcGFzc2VkCiAgICAgICovCi0gICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubiwgamF2YS5zcWwuQ29ubmVjdGlvbiBzcWxDb25uLCAKKyAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24oUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uLCBqYXZhLnNxbC5Db25uZWN0aW9uIHNxbENvbm4sCiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYXNzd2RDcmVkLCBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihwb29sZWRDb25uID09IG51bGwgJiYgc3FsQ29ubiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNvbm5lY3Rpb24gb2JqZWN0IGNhbm5vdCBiZSBudWxsIik7CiAgICAgICAgIH0KIAotCWlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgewotCSAgICBhY3R1YWxDb25uZWN0aW9uID0gc3FsQ29ubjsKLQl9CisgICAgaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7CisgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBzcWxDb25uOworICAgIH0KIAogICAgICAgICBwYyA9IHBvb2xlZENvbm47CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbmV3IEhhc2h0YWJsZSgpOwogICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gcGFzc3dkQ3JlZDsKICAgICAgICAgdGhpcy5tY2YgPSBtY2Y7Ci0gICAgICAgIGlmKHBhc3N3ZENyZWRlbnRpYWwgIT0gbnVsbCAmJiAgCisgICAgICAgIGlmKHBhc3N3ZENyZWRlbnRpYWwgIT0gbnVsbCAmJgogICAgICAgICAgICAgdGhpcy5tY2YuZXF1YWxzKHBhc3N3ZENyZWRlbnRpYWwuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgdGhhdCBoYXMgY3JlYXRlZCB0aGlzICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB0aGF0IGhhcyBjcmVhdGVkIHRoaXMgIiArCiAgICAgICAgICAgICAgICAgIk1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHJldHVybmVkIGJ5IiArCiAgICAgICAgICAgICAgICAgICAgICIgdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiIpOwogICAgICAgICB9CiAgICAgICAgIGxvZ1dyaXRlciA9IG1jZi5nZXRMb2dXcml0ZXIoKTsKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0JY2UgPSBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0NMT1NFRCk7CisgICAgY2UgPSBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0NMT1NFRCk7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogQWRkcyBhIGNvbm5lY3Rpb24gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWxpc3RlbmVyCTxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBsaXN0ZW5lciAgICA8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKiBAc2VlIDxjb2RlPnJlbW92ZUNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGFkZENvbm5lY3Rpb25FdmVudExpc3RlbmVyKENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyOworICAgIHRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBVc2VkIGJ5IHRoZSBjb250YWluZXIgdG8gY2hhbmdlIHRoZSBhc3NvY2lhdGlvbiBvZiBhbiBhcHBsaWNhdGlvbi1sZXZlbCAKKyAgICAgKiBVc2VkIGJ5IHRoZSBjb250YWluZXIgdG8gY2hhbmdlIHRoZSBhc3NvY2lhdGlvbiBvZiBhbiBhcHBsaWNhdGlvbi1sZXZlbAogICAgICAqIGNvbm5lY3Rpb24gaGFuZGxlIHdpdGggYSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29ubmVjdGlvbgk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKLSAgICAgKgkJCQl0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZQotICAgICAqCQkJCQl2YWxpZCBvciB0aGUgY29ubmVjdGlvbiBoYW5kbGUgcGFzc2VkIGlzIG51bGwKKyAgICAgKiBAcGFyYW0gICAgY29ubmVjdGlvbiAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgKiAgICAgICAgICAgICAgICB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZQorICAgICAqICAgICAgICAgICAgICAgICAgICB2YWxpZCBvciB0aGUgY29ubmVjdGlvbiBoYW5kbGUgcGFzc2VkIGlzIG51bGwKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhc3NvY2lhdGVDb25uZWN0aW9uKE9iamVjdCBjb25uZWN0aW9uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTUyLDExICsxNTIsMTEgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ29ubmVjdGlvbiBoYW5kbGUgY2Fubm90IGJlIG51bGwiKTsKICAgICAgICAgfQogICAgICAgICBDb25uZWN0aW9uSG9sZGVyIGNoID0gKENvbm5lY3Rpb25Ib2xkZXIpIGNvbm5lY3Rpb247Ci0gICAgICAgIAorCiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24pY2guZ2V0TWFuYWdlZENvbm5lY3Rpb24oKTsKLQltYy5hY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLQlpc0NsZWFuID0gZmFsc2U7Ci0gICAgICAgIAorICAgIG1jLmFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOworICAgIGlzQ2xlYW4gPSBmYWxzZTsKKwogICAgICAgICBjaC5hc3NvY2lhdGVDb25uZWN0aW9uKGFjdHVhbENvbm5lY3Rpb24sIHRoaXMpOwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGV4cGVjdGF0aW9uIGZyb20gdGhlIGFib3ZlIG1ldGhvZCBpcyB0aGF0IHRoZSBjb25uZWN0aW9uIGhvbGRlcgpAQCAtMTY1LDM0ICsxNjUsMzQgQEAKICAgICAgICAgICogdG8gdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlIHdpdGggdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4KICAgICAgICAgICogQW55IHByZXZpb3VzIHN0YXRlbWVudHMgYW5kIHJlc3VsdCBzZXRzIGFsc28gbmVlZCB0byBiZSByZW1vdmVkLgogICAgICAgICAgKi8KLSAgICAgICAgIAorCiAgICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUuc2V0QWN0aXZlKGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBjaC5zZXRBY3RpdmUodHJ1ZSk7Ci0gICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsgCisgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBBcHBsaWNhdGlvbiBzZXJ2ZXIgY2FsbHMgdGhpcyBtZXRob2QgdG8gZm9yY2UgYW55IGNsZWFudXAgb24gdGhlIAorICAgICAqIEFwcGxpY2F0aW9uIHNlcnZlciBjYWxscyB0aGlzIG1ldGhvZCB0byBmb3JjZSBhbnkgY2xlYW51cCBvbiB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuIFRoaXMgbWV0aG9kIGNhbGxzIHRoZSBpbnZhbGlkYXRlCiAgICAgICogbWV0aG9kIG9uIGFsbCBDb25uZWN0aW9uSGFuZGxlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCi0gICAgICogCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlIHZhbGlkCisgICAgICoKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjbGVhbnVwKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gY2xlYW51cCIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICAvKioKICAgICAgICAgICogbWF5IG5lZWQgdG8gc2V0IHRoZSBhdXRvY29tbWl0IHRvIHRydWUgZm9yIHRoZSBub24tcG9vbGVkIGNhc2UuCiAgICAgICAgICAqLwogICAgICAgICAvL0dKQ0lOVAotCS8vaWYgKGFjdHVhbENvbm5lY3Rpb24gIT0gbnVsbCkgewotCWlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgeworICAgIC8vaWYgKGFjdHVhbENvbm5lY3Rpb24gIT0gbnVsbCkgeworICAgIGlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCA9IGFjdHVhbENvbm5lY3Rpb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewpAQCAtMjAxLDE3ICsyMDEsMTcgQEAKICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlzQ2xlYW4gPSB0cnVlOwotICAgICAgICAKKwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGFsbCB0aGUgY29ubmVjdGlvbiBoYW5kbGVzIGZyb20gdGhlIHRhYmxlCiAgICAgICogb2YgY29ubmVjdGlvbiBoYW5kbGVzIGFuZCBpbnZhbGlkYXRlcyBhbGwgb2YgdGhlbSBzbyB0aGF0IGFueQogICAgICAqIG9wZXJhdGlvbiBvbiB0aG9zZSBjb25uZWN0aW9uIGhhbmRsZXMgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYSBwcm9ibGVtIGluIHJldHJpZXZpbmcKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXRoZSBjb25uZWN0aW9uIGhhbmRsZXMKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBpbiByZXRyaWV2aW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29ubmVjdGlvbiBoYW5kbGVzCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGludmFsaWRhdGVBbGxDb25uZWN0aW9uSGFuZGxlcygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIFNldCBoYW5kbGVzID0gY29ubmVjdGlvbkhhbmRsZXMua2V5U2V0KCk7CkBAIC0yMjYsMjIgKzIyNiwyMiBAQAogICAgICAgICB9CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzLmNsZWFyKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRGVzdHJveXMgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgcmVzb3VyY2UgbWFuYWdlci4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNsb3NpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2xvc2luZyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZGVzdHJveSIpOwogICAgICAgICB9Ci0JLy9HSkNJTlQKLQlpZihpc0Rlc3Ryb3llZCA9PSB0cnVlKSB7Ci0JICAgIHJldHVybjsJCi0JfQorICAgIC8vR0pDSU5UCisgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSkgeworICAgICAgICByZXR1cm47CisgICAgfQogCi0JYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CisgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTiB8fCBjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04pIHsKICAgICAgICAgICAgICAgICBwYy5jbG9zZSgpOwpAQCAtMjU1LDI4ICsyNTUsMjggQEAKICAgICAgICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBudWxsOwogICAgICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBudWxsOwotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgZm9sbG93aW5nIGV4Y2VwdGlvbiBoYXMgb2NjdXJlZCBkdXJpbmcgZGVzdHJveTogIiAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGZvbGxvd2luZyBleGNlcHRpb24gaGFzIG9jY3VyZWQgZHVyaW5nIGRlc3Ryb3k6ICIKICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7CiAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBudWxsOwogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBjb25uZWN0aW9uIGhhbmRsZSBmb3IgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgCisgICAgICogQ3JlYXRlcyBhIG5ldyBjb25uZWN0aW9uIGhhbmRsZSBmb3IgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwKICAgICAgKiBjb25uZWN0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgbmVlZGVkIGZvciBhdXRoZW50aWNhdGlvbgotICAgICAqIEBwYXJhbQljeFJlcUluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBjYXJyaWVzIHRoZSB1c2VyIAotICAgICAqICAgICAgIAkgICAgICAgICAJYW5kIHBhc3N3b3JkIHJlcXVpcmVkIGZvciBnZXR0aW5nIHRoaXMgY29ubmVjdGlvbi4KLSAgICAgKiBAcmV0dXJuCUNvbm5lY3Rpb24JdGhlIGNvbm5lY3Rpb24gaGFuZGxlIDxjb2RlPk9iamVjdDwvY29kZT4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJcGh5c2ljYWwgY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sZWQgY29ubmVjdGlvbiAKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBhc3N3b3JkIGNyZWRlbnRpYWxzIG9yIHJlYXV0aGVudGljYXRpb24gaXMgcmVxdWVzdGVkCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIG5lZWRlZCBmb3IgYXV0aGVudGljYXRpb24KKyAgICAgKiBAcGFyYW0gICAgY3hSZXFJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gY2FycmllcyB0aGUgdXNlcgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHBhc3N3b3JkIHJlcXVpcmVkIGZvciBnZXR0aW5nIHRoaXMgY29ubmVjdGlvbi4KKyAgICAgKiBAcmV0dXJuICAgIENvbm5lY3Rpb24gICAgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIDxjb2RlPk9iamVjdDwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGZyb20gdGhlIHBvb2xlZCBjb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCBjcmVkZW50aWFscyBvciByZWF1dGhlbnRpY2F0aW9uIGlzIHJlcXVlc3RlZAogICAgICAqLwotICAgIHB1YmxpYyBPYmplY3QgZ2V0Q29ubmVjdGlvbihTdWJqZWN0IHN1YiwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxSW5mbykgCisgICAgcHVibGljIE9iamVjdCBnZXRDb25uZWN0aW9uKFN1YmplY3Qgc3ViLCBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXFJbmZvKQogICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldENvbm5lY3Rpb24iKTsKQEAgLTI4NCwxNCArMjg0LDE0IEBACiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8gPSAoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbykgY3hSZXFJbmZvOwogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGFzc3dkQ3JlZCA9IFNlY3VyaXR5VXRpbHMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKHRoaXMubWNmLCBzdWIsIGN4UmVxdWVzdEluZm8pOwotICAgICAgICAgICAgCisKICAgICAgICAgaWYoU2VjdXJpdHlVdGlscy5pc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKHRoaXMucGFzc3dkQ3JlZGVudGlhbCwgcGFzc3dkQ3JlZCkgPT0gZmFsc2UpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLnNwaS5TZWN1cml0eUV4Y2VwdGlvbigiUmUtYXV0aGVudGljYXRpb24gbm90IHN1cHBvcnRlZCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vR0pDSU5UCiAgICAgICAgIGdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAKKwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGZvbGxvd2luZyBjb2RlIGluIHRoZSBpZiBzdGF0ZW1lbnQgZmlyc3QgY2hlY2tzIGlmIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24KICAgICAgICAgICogaXMgY2xlYW4gb3Igbm90LiBJZiBpdCBpcywgaXQgcmVzZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgdG8gd2hhdApAQCAtMzAxLDI4ICszMDEsMjggQEAKICAgICAgICAgaWYoaXNDbGVhbikgewogICAgICAgICAgICAgKChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KW1jZikucmVzZXRJc29sYXRpb24odGhpcywgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAKKworCiAgICAgICAgIENvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCA9IG5ldyBDb25uZWN0aW9uSG9sZGVyKGFjdHVhbENvbm5lY3Rpb24sIHRoaXMpOwotCWlzQ2xlYW49ZmFsc2U7Ci0gICAgICAgIAorICAgIGlzQ2xlYW49ZmFsc2U7CisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlLnNldEFjdGl2ZShmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgY29ubkhvbGRlck9iamVjdC5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjb25uSG9sZGVyT2JqZWN0OwotIAorCiAgICAgICAgIHJldHVybiBjb25uSG9sZGVyT2JqZWN0OwotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgYW4gPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW5zdGFuY2UuIFRoZSA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnRlcmZhY2UKLSAgICAgKiBpcyB1c2VkIGJ5IHRoZSBjb250YWluZXIgdG8gbWFuYWdlIGxvY2FsIHRyYW5zYWN0aW9ucyBmb3IgYSBSTSBpbnN0YW5jZS4gCisgICAgICogaXMgdXNlZCBieSB0aGUgY29udGFpbmVyIHRvIG1hbmFnZSBsb2NhbCB0cmFuc2FjdGlvbnMgZm9yIGEgUk0gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTG9jYWxUcmFuc2FjdGlvbiBnZXRMb2NhbFRyYW5zYWN0aW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTMzMSwxMyArMzMxLDEzIEBACiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICByZXR1cm4gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5Mb2NhbFRyYW5zYWN0aW9uKHRoaXMpOwogICAgIH0KLSAgICAgCisKICAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4gCisgICAgICogR2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqIEBzZWUgPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBQcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtMzQ1LDQ2ICszNDUsNDYgQEAKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0TG9nV3JpdGVyIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBsb2dXcml0ZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogR2V0cyB0aGUgbWV0YWRhdGEgaW5mb3JtYXRpb24gZm9yIHRoaXMgY29ubmVjdGlvbidzIHVuZGVybHlpbmcgRUlTIAotICAgICAqIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UuIAorICAgICAqIEdldHMgdGhlIG1ldGFkYXRhIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbm5lY3Rpb24ncyB1bmRlcmx5aW5nIEVJUworICAgICAqIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSBnZXRNZXRhRGF0YSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldE1ldGFEYXRhIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEodGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyBhbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4gCisgICAgICogUmV0dXJucyBhbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgotICAgICAqCQkJCQl0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCU5vdFN1cHBvcnRlZEV4Y2VwdGlvbglpZiB1bmRlcmx5aW5nIGRhdGFzb3VyY2UgaXMgbm90IGFuCi0gICAgICoJCQkJCTxjb2RlPlhBRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiAgICBpZiB1bmRlcmx5aW5nIGRhdGFzb3VyY2UgaXMgbm90IGFuCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPlhBRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgWEFSZXNvdXJjZSBnZXRYQVJlc291cmNlKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0WEFSZXNvdXJjZSIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTikgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZih4YXIgPT0gbnVsbCkgewotCQkgICAgLyoqCisgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgICogVXNpbmcgdGhlIHdyYXBwZXIgWEFSZXNvdXJjZS4KICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgIHhhciA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuWEFSZXNvdXJjZUltcGwoKChYQUNvbm5lY3Rpb24pcGMpLmdldFhBUmVzb3VyY2UoKSwgdGhpcyk7CkBAIC0zOTcsMTYgKzM5NywxNiBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiQ2Fubm90IGdldCBhbiBYQVJlc291cmNlIGZyb20gYSBub24gWEEgY29ubmVjdGlvbiIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVtb3ZlcyBhbiBhbHJlYWR5IHJlZ2lzdGVyZWQgY29ubmVjdGlvbiBldmVudCBsaXN0ZW5lciBmcm9tIHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlsaXN0ZW5lcgk8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4gdG8gYmUgcmVtb3ZlZAorICAgICAqIEBwYXJhbSAgICBsaXN0ZW5lciAgICA8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4gdG8gYmUgcmVtb3ZlZAogICAgICAqIEBzZWUgPGNvZGU+YWRkQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIoQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQlsaXN0ZW5lciA9IG51bGw7CisgICAgbGlzdGVuZXIgPSBudWxsOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDE1LDcgKzQxNSw3IEBACiAgICAgICogTG9jYWxUcmFuc2FjdGlvbiBvYmplY3Qgd2hlbiBpdHMgYmVnaW4oKSBtZXRob2QgaXMgY2FsbGVkLgogICAgICAqLwogICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKCkgewotCXRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IHRydWU7CQorICAgIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IHRydWU7CiAgICAgfQogCiAgICAgLyoqCkBAIC00MjQsMTYgKzQyNCwxNiBAQAogICAgICAqIExvY2FsVHJhbnNhY3Rpb24gb2JqZWN0IHdoZW4gaXRzIGVuZCgpIG1ldGhvZCBpcyBjYWxsZWQuCiAgICAgICovCiAgICAgdm9pZCB0cmFuc2FjdGlvbkNvbXBsZXRlZCgpIHsKLQl0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKLQlpZihjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKKyAgICB0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCA9IGFjdHVhbENvbm5lY3Rpb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgIC8vY2hlY2sgd2hhdCB0byBkbyBpbiB0aGlzIGNhc2UhIQotCQlfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5ub3Rnb3RfdHhfaXNvbHZsIik7CisgICAgICAgICAgICAvL2NoZWNrIHdoYXQgdG8gZG8gaW4gdGhpcyBjYXNlISEKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMubm90Z290X3R4X2lzb2x2bCIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0JICAgIHRyeSB7CisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CkBAIC00NDEsNyArNDQxLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0JICAgICAgICAKKwogICAgICAgICBpc0NsZWFuID0gdHJ1ZTsKIAogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKQEAgLTQ1MywyOCArNDUzLDI4IEBACiAgICAgICogb3Igbm90LgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkgewotCXJldHVybiB0cmFuc2FjdGlvbkluUHJvZ3Jlc3M7CisgICAgcmV0dXJuIHRyYW5zYWN0aW9uSW5Qcm9ncmVzczsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlvdXQJPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEBwYXJhbSAgICBvdXQgICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqIEBzZWUgPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihQcmludFdyaXRlciBvdXQpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICBsb2dXcml0ZXIgPSBvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiB0aGUgY29ubmVjdGlvbiBiZWluZyBoZWxkIAorICAgICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgdGhlIHR5cGUgb2YgdGhlIGNvbm5lY3Rpb24gYmVpbmcgaGVsZAogICAgICAqIGluIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgotICAgICAqIAotICAgICAqIEBwYXJhbQlwb29sZWRDb25uCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHJldHVybgljb25uZWN0aW9uIHR5cGUKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBwb29sZWRDb25uICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBjb25uZWN0aW9uIHR5cGUKICAgICAgKi8KICAgICBwcml2YXRlIGludCBnZXRDb25uZWN0aW9uVHlwZShQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4pIHsKICAgICAgICAgaWYocG9vbGVkQ29ubiA9PSBudWxsKSB7CkBAIC00ODUsMjIgKzQ4NSwyMiBAQAogICAgICAgICAgICAgcmV0dXJuIElTUE9PTEVEQ09OTkVDVElPTjsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCAKKyAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQKICAgICAgKiBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgY3JlYXRlZCB0aGlzCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IGNyZWF0ZWQgdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKICAgICAgKi8KICAgICBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkgewogICAgICAgICByZXR1cm4gKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpbWNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBzcWwgY29ubmVjdGlvbiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uIAorICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBzcWwgY29ubmVjdGlvbiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRoZSBwaHlzaWNhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgdGhlIHBoeXNpY2FsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgLy9HSkNJTlQKICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGdldEFjdHVhbENvbm5lY3Rpb24oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtNTA5LDggKzUwOSw4IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmKGFjdHVhbENvbm5lY3Rpb24gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gcGMuZ2V0Q29ubmVjdGlvbigpOwotCQl9Ci0JCQorICAgICAgICB9CisKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKICAgICAgICAgICAgICAgICBzcWxlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CkBAIC01MTgsODEgKzUxOCw4MSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBhY3R1YWxDb25uZWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHJldHVybiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQogICAgICAqLwogICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBnZXRQYXNzd29yZENyZWRlbnRpYWwoKSB7CiAgICAgICAgIHJldHVybiBwYXNzd2RDcmVkZW50aWFsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QgYW5kIHRocm93cyBhbgogICAgICAqIGV4Y2VwdGlvbiBpZiBpdCBpcyBub3QgdmFsaWQuIEEgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGlzIG5vdCB2YWxpZCBpZgogICAgICAqIGRlc3Ryb3kgaGFzIG5vdCBiZWVuIGNhbGxlZCBhbmQgbm8gcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBoYXMKICAgICAgKiBvY2N1cnJlZCByZW5kZXJpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gdW51c2FibGUuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIDxjb2RlPmRlc3Ryb3k8L2NvZGU+IGhhcyBiZWVuIGNhbGxlZCBvbiB0aGlzIAotICAgICAqCQkJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugb3IgaWYgYSAKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJyZWQgcmVuZGVyaW5nIGl0IHVudXNhYmxlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiA8Y29kZT5kZXN0cm95PC9jb2RlPiBoYXMgYmVlbiBjYWxsZWQgb24gdGhpcworICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugb3IgaWYgYQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBvY2N1cnJlZCByZW5kZXJpbmcgaXQgdW51c2FibGUKICAgICAgKi8KICAgICAvL0dKQ0lOVAogICAgIHZvaWQgY2hlY2tJZlZhbGlkKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSB8fCBpc1VzYWJsZSA9PSBmYWxzZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGlzIE1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyB0aGUgcGh5c2ljYWwgIiArIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGlzIE1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyB0aGUgcGh5c2ljYWwgIiArCiAgICAgICAgICAgICAgICAgImNvbm5lY3Rpb24gaXMgbm90IHVzYWJsZS4iKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gd2hlbiBpdHMgY2xvc2UgbWV0aG9kIGlzCiAgICAgICogY2FsbGVkLiBUaGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSAgaW52YWxpZGF0ZXMgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCiAgICAgICogYW5kIHNlbmRzIGEgQ09OTkVDVElPTl9DTE9TRUQgZXZlbnQgdG8gYWxsIHRoZSByZWdpc3RlcmVkIGV2ZW50IGxpc3RlbmVycy4KICAgICAgKgotICAgICAqIEBwYXJhbQllCUV4Y2VwdGlvbiB0aGF0IG1heSBoYXZlIG9jY3VyZWQgd2hpbGUgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKLSAgICAgKiBAcGFyYW0JY29ubkhvbGRlck9iamVjdAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGhhcyBiZWVuIGNsb3NlZAotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCWluIGNhc2UgY2xvc2luZyB0aGUgc3FsIGNvbm5lY3Rpb24gZ290IG91dCBvZgotICAgICAqICAgICAgICAgCSAgICAgICAgICAgIAk8Y29kZT5nZXRDb25uZWN0aW9uPC9jb2RlPiBvbiB0aGUgdW5kZXJseWluZyAKLSAgICAgKgkJCQk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiB0aHJvd3MgYW4gZXhjZXB0aW9uCisgICAgICogQHBhcmFtICAgIGUgICAgRXhjZXB0aW9uIHRoYXQgbWF5IGhhdmUgb2NjdXJlZCB3aGlsZSBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGhhbmRsZQorICAgICAqIEBwYXJhbSAgICBjb25uSG9sZGVyT2JqZWN0ICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgaGFzIGJlZW4gY2xvc2VkCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgaW4gY2FzZSBjbG9zaW5nIHRoZSBzcWwgY29ubmVjdGlvbiBnb3Qgb3V0IG9mCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPmdldENvbm5lY3Rpb248L2NvZGU+IG9uIHRoZSB1bmRlcmx5aW5nCisgICAgICogICAgICAgICAgICAgICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gdGhyb3dzIGFuIGV4Y2VwdGlvbgogICAgICAqLwogICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChFeGNlcHRpb24gZSwgQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgY29ubkhvbGRlck9iamVjdC5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICBjZS5zZXRDb25uZWN0aW9uSGFuZGxlKGNvbm5Ib2xkZXJPYmplY3QpOwogICAgICAgICBsaXN0ZW5lci5jb25uZWN0aW9uQ2xvc2VkKGNlKTsKLQkKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gd2hlbiBpdCBkZXRlY3RzIGEgY29ubmVjaW9uCiAgICAgICogcmVsYXRlZCBlcnJvci4KICAgICAgKgotICAgICAqIEBwYXJhbQllCUV4Y2VwdGlvbiB0aGF0IGhhcyBvY2N1cnJlZCBkdXJpbmcgYW4gb3BlcmF0aW9uIG9uIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCi0gICAgICogQHBhcmFtCWNvbm5Ib2xkZXJPYmplY3QJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBkZXRlY3RlZCB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJY29ubmVjdGlvbiBlcnJvcgorICAgICAqIEBwYXJhbSAgICBlICAgIEV4Y2VwdGlvbiB0aGF0IGhhcyBvY2N1cnJlZCBkdXJpbmcgYW4gb3BlcmF0aW9uIG9uIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIGNvbm5Ib2xkZXJPYmplY3QgICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBkZXRlY3RlZCB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBlcnJvcgogICAgICAqLwotICAgIHZvaWQgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoRXhjZXB0aW9uIGUsIAorICAgIHZvaWQgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoRXhjZXB0aW9uIGUsCiAgICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0KSB7Ci0JICAgIAorCiAgICAgICAgICBDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBjZWwgPSB0aGlzLmxpc3RlbmVyOwogICAgICAgICAgQ29ubmVjdGlvbkV2ZW50IGNlID0gbnVsbDsKICAgICAgICAgIGNlID0gZSA9PSBudWxsID8gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9FUlJPUl9PQ0NVUlJFRCkKICAgICAgICAgICAgICAgICAgICAgOiBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0VSUk9SX09DQ1VSUkVELCBlKTsKICAgICAgICAgIGlmIChjb25uSG9sZGVyT2JqZWN0ICE9IG51bGwpIHsKICAgICAgICAgICAgICBjZS5zZXRDb25uZWN0aW9uSGFuZGxlKGNvbm5Ib2xkZXJPYmplY3QpOwotICAgICAgICAgfSAgICAKKyAgICAgICAgIH0KIAogICAgICAgICAgY2VsLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGNlKTsKICAgICAgICAgIGlzVXNhYmxlID0gZmFsc2U7CiAgICAgfQotICAgIAotICAgIAotICAgIAorCisKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdoZW4gaXRzIHN0YXJ0IG1ldGhvZAogICAgICAqIGhhcyBiZWVuIGludm9rZWQuCkBAIC02MDYsNyArNjA2LDcgQEAKICAgICAgICAgICAgIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGUsIG51bGwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hlbiBpdHMgZW5kIG1ldGhvZAogICAgICAqIGhhcyBiZWVuIGludm9rZWQuCkBAIC02MjAsNyArNjIwLDcgQEAKICAgICAgICAgICAgIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGUsIG51bGwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGEgQ29ubmVjdGlvbiBIYW5kbGUgdG8gY2hlY2sgaWYgaXQgaXMKICAgICAgKiB0aGUgYWN0aXZlIENvbm5lY3Rpb24gSGFuZGxlLiBJZiBpdCBpcyBub3QgdGhlIGFjdGl2ZSBDb25uZWN0aW9uCkBAIC02MjksMjQgKzYyOSwyNCBAQAogICAgICAqIENvbm5lY3Rpb24gSGFuZGxlIG9iamVjdCB0byB0aGlzIG9iamVjdCBpZiB0aGUgYWN0aXZlIENvbm5lY3Rpb24KICAgICAgKiBIYW5kbGUgaXMgbnVsbC4KICAgICAgKgotICAgICAqIEBwYXJhbQljaAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IHJlcXVlc3RzIHRoaXMKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSB3aGV0aGVyCi0gICAgICoJCQlpdCBjYW4gYmUgYWN0aXZlIG9yIG5vdAotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCWluIGNhc2UgdGhlIHBoeXNpY2FsIGlzIG5vdCB2YWxpZCBvcgotICAgICAqCQkJCXRoZXJlIGlzIGFscmVhZHkgYW4gYWN0aXZlIGNvbm5lY3Rpb24gaGFuZGxlCisgICAgICogQHBhcmFtICAgIGNoICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgcmVxdWVzdHMgdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHdoZXRoZXIKKyAgICAgKiAgICAgICAgICAgIGl0IGNhbiBiZSBhY3RpdmUgb3Igbm90CisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgaW4gY2FzZSB0aGUgcGh5c2ljYWwgaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgdGhlcmUgaXMgYWxyZWFkeSBhbiBhY3RpdmUgY29ubmVjdGlvbiBoYW5kbGUKICAgICAgKi8KLSAgICAgCisKICAgICB2b2lkIGNoZWNrSWZBY3RpdmUoQ29ubmVjdGlvbkhvbGRlciBjaCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUgfHwgaXNVc2FibGUgPT0gZmFsc2UpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIlRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB1c2FibGUiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlID09IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsKICAgICAgICAgICAgIGNoLnNldEFjdGl2ZSh0cnVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IGNoKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBoYW5kbGUgY2Fubm90IGJlIHVzZWQgYXMgYW5vdGhlciBjb25uZWN0aW9uIGlzIGN1cnJlbnRseSBhY3RpdmUiKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhCmluZGV4IDIwZjAzYWEuLmY2NTBkNDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIC8qKgogICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSB7CiAKQEAgLTQxLDgxICs0MSw4MSBAQAogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CWlmIGdldHRpbmcgdGhlIERhdGFiYXNlTWV0YURhdGEgb2JqZWN0IGZhaWxzCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+ICAgIGlmIGdldHRpbmcgdGhlIERhdGFiYXNlTWV0YURhdGEgb2JqZWN0IGZhaWxzCiAgICAgICovCiAgICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEoTWFuYWdlZENvbm5lY3Rpb24gbWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB0aGlzLm1jID0gbWM7CiAgICAgICAgICAgICBkbWQgPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCkuZ2V0TWV0YURhdGEoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgcHJvZHVjdCBuYW1lIG9mIHRoZSB1bmRlcmx5aW5nIEVJUyBpbnN0YW5jZSBjb25uZWN0ZWQKICAgICAgKiB0aHJvdWdoIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JUHJvZHVjdCBuYW1lIG9mIHRoZSBFSVMgaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgUHJvZHVjdCBuYW1lIG9mIHRoZSBFSVMgaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RUlTUHJvZHVjdE5hbWUoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIGRtZC5nZXREYXRhYmFzZVByb2R1Y3ROYW1lKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2RuYW1lIiwgc3FsZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kbmFtZSIsIHNxbGUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgcHJvZHVjdCB2ZXJzaW9uIG9mIHRoZSB1bmRlcmx5aW5nIEVJUyBpbnN0YW5jZSBjb25uZWN0ZWQKICAgICAgKiB0aHJvdWdoIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JUHJvZHVjdCB2ZXJzaW9uIG9mIHRoZSBFSVMgaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgUHJvZHVjdCB2ZXJzaW9uIG9mIHRoZSBFSVMgaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RUlTUHJvZHVjdFZlcnNpb24oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIGRtZC5nZXREYXRhYmFzZVByb2R1Y3RWZXJzaW9uKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2R2ZXJzIiwgc3FsZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kdmVycyIsIHNxbGUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpLCBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIG1heGltdW0gbGltaXQgb24gbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCiAgICAgICogdGhhdCBhbiBFSVMgaW5zdGFuY2UgY2FuIHN1cHBvcnQgYWNyb3NzIGNsaWVudCBwcm9jZXNzZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCU1heGltdW0gbGltaXQgZm9yIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucwotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBNYXhpbXVtIGxpbWl0IGZvciBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0TWF4Q29ubmVjdGlvbnMoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIGRtZC5nZXRNYXhDb25uZWN0aW9ucygpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19tYXhjb25uIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19tYXhjb25uIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBuYW1lIG9mIHRoZSB1c2VyIGFzc29jaWF0ZWQgd2l0aCB0aGUgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2UuIFRoZSBuYW1lCiAgICAgICogY29ycmVzcG9uZHMgdG8gdGhlIHJlc291cmNlIHByaW5jaXBhbCB1bmRlciB3aG9zZSB3aG9zZSBzZWN1cml0eSBjb250ZXh0LCBhIGNvbm5lY3Rpb24KICAgICAgKiB0byB0aGUgRUlTIGluc3RhbmNlIGhhcyBiZWVuIGVzdGFibGlzaGVkLgogICAgICAqCi0gICAgICogQHJldHVybgluYW1lIG9mIHRoZSB1c2VyCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIG5hbWUgb2YgdGhlIHVzZXIKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlck5hbWUoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBqYWthcnRhLnJlc291cmNlLnNwaS5zZWN1cml0eS5QYXNzd29yZENyZWRlbnRpYWwgcGMgPSBtYy5nZXRQYXNzd29yZENyZWRlbnRpYWwoKTsKICAgICAgICAgaWYocGMgIT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIHBjLmdldFVzZXJOYW1lKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG1jLmdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpLmdldFVzZXIoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQppbmRleCBkYWQxZDc3Li40ODJmMzMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKQEAgLTI0LDE0OCArMjQsMTQ4IEBACiAvKioKICAqIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IHdyYXBwZXIgZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8yMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMjMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBYQVJlc291cmNlSW1wbCBpbXBsZW1lbnRzIFhBUmVzb3VyY2UgewogCiAgICAgWEFSZXNvdXJjZSB4YXI7CiAgICAgTWFuYWdlZENvbm5lY3Rpb24gbWM7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgWEFSZXNvdXJjZUltcGwKICAgICAgKgotICAgICAqIEBwYXJhbQl4YXIJPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4KLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHhhciAgICA8Y29kZT5YQVJlc291cmNlPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgWEFSZXNvdXJjZUltcGwoWEFSZXNvdXJjZSB4YXIsIE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7CiAgICAgICAgIHRoaXMueGFyID0geGFyOwogICAgICAgICB0aGlzLm1jID0gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IHRoZSBnbG9iYWwgdHJhbnNhY3Rpb24gc3BlY2lmaWVkIGJ5IHhpZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgotICAgICAqIEBwYXJhbQlvbmVQaGFzZQlJZiB0cnVlLCB0aGUgcmVzb3VyY2UgbWFuYWdlciBzaG91bGQgdXNlIGEgb25lLXBoYXNlIGNvbW1pdCAKLSAgICAgKiAgICAgICAJICAgICAgICAJcHJvdG9jb2wgdG8gY29tbWl0IHRoZSB3b3JrIGRvbmUgb24gYmVoYWxmIG9mIHhpZC4KKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcGFyYW0gICAgb25lUGhhc2UgICAgSWYgdHJ1ZSwgdGhlIHJlc291cmNlIG1hbmFnZXIgc2hvdWxkIHVzZSBhIG9uZS1waGFzZSBjb21taXQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgdG8gY29tbWl0IHRoZSB3b3JrIGRvbmUgb24gYmVoYWxmIG9mIHhpZC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoWGlkIHhpZCwgYm9vbGVhbiBvbmVQaGFzZSkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy90aGUgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQgY2FsbCBoYXMgY29tZSBoZXJlIGJlY2FzdWUKLQkvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdwotCS8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCi0JLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCi0JLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAotCS8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgotCW1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKKyAgICAvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAorICAgIC8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcworICAgIC8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKKyAgICAvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKKyAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgICAgICB4YXIuY29tbWl0KHhpZCwgb25lUGhhc2UpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVuZHMgdGhlIHdvcmsgcGVyZm9ybWVkIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQgCi0gICAgICoJCQl3YXMgdXNlZCBwcmV2aW91c2x5IGluIHRoZSBzdGFydCBtZXRob2QuCi0gICAgICogQHBhcmFtCWZsYWdzCU9uZSBvZiBUTVNVQ0NFU1MsIFRNRkFJTCwgb3IgVE1TVVNQRU5ECisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdAorICAgICAqICAgICAgICAgICAgd2FzIHVzZWQgcHJldmlvdXNseSBpbiB0aGUgc3RhcnQgbWV0aG9kLgorICAgICAqIEBwYXJhbSAgICBmbGFncyAgICBPbmUgb2YgVE1TVUNDRVNTLCBUTUZBSUwsIG9yIFRNU1VTUEVORAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVuZChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHhhci5lbmQoeGlkLCBmbGFncyk7CiAgICAgICAgIC8vR0pDSU5UCi0JLy9tYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIC8vbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUZWxsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIGZvcmdldCBhYm91dCBhIGhldXJpc3RpY2FsbHkgY29tcGxldGVkIHRyYW5zYWN0aW9uIGJyYW5jaC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGZvcmdldChYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICB4YXIuZm9yZ2V0KHhpZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogT2J0YWluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgc2V0IGZvciB0aGlzIAorICAgICAqIE9idGFpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIHNldCBmb3IgdGhpcwogICAgICAqIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgl0aGUgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzCisgICAgICogQHJldHVybiAgICB0aGUgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRUcmFuc2FjdGlvblRpbWVvdXQoKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLmdldFRyYW5zYWN0aW9uVGltZW91dCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UgCi0gICAgICogcmVwcmVzZW50ZWQgYnkgdGhlIHRhcmdldCBvYmplY3QgaXMgdGhlIHNhbWUgYXMgdGhlIHJlc291Y2UgbWFuYWdlciAKKyAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlCisgICAgICogcmVwcmVzZW50ZWQgYnkgdGhlIHRhcmdldCBvYmplY3QgaXMgdGhlIHNhbWUgYXMgdGhlIHJlc291Y2UgbWFuYWdlcgogICAgICAqIGluc3RhbmNlIHJlcHJlc2VudGVkIGJ5IHRoZSBwYXJhbWV0ZXIgeGFyZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGFyZXMJQW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdob3NlIHJlc291cmNlIG1hbmFnZXIgCi0gICAgICogCQkJaW5zdGFuY2UgaXMgdG8gYmUgY29tcGFyZWQgd2l0aCB0aGUgcmVzb3VyY2UKLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgaXQncyB0aGUgc2FtZSBSTSBpbnN0YW5jZTsgb3RoZXJ3aXNlIGZhbHNlLgorICAgICAqIEBwYXJhbSAgICB4YXJlcyAgICBBbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hvc2UgcmVzb3VyY2UgbWFuYWdlcgorICAgICAqICAgICAgICAgICAgIGluc3RhbmNlIGlzIHRvIGJlIGNvbXBhcmVkIHdpdGggdGhlIHJlc291cmNlCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIGl0J3MgdGhlIHNhbWUgUk0gaW5zdGFuY2U7IG90aGVyd2lzZSBmYWxzZS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1NhbWVSTShYQVJlc291cmNlIHhhcmVzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLmlzU2FtZVJNKHhhcmVzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBBc2sgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gcHJlcGFyZSBmb3IgYSB0cmFuc2FjdGlvbiBjb21taXQgCisgICAgICogQXNrIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIHByZXBhcmUgZm9yIGEgdHJhbnNhY3Rpb24gY29tbWl0CiAgICAgICogb2YgdGhlIHRyYW5zYWN0aW9uIHNwZWNpZmllZCBpbiB4aWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKLSAgICAgKiBAcmV0dXJuCUEgdmFsdWUgaW5kaWNhdGluZyB0aGUgcmVzb3VyY2UgbWFuYWdlcidzIHZvdGUgb24gdGhlIAotICAgICAqCQlvdXRjb21lIG9mIHRoZSB0cmFuc2FjdGlvbi4gVGhlIHBvc3NpYmxlIHZhbHVlcwotICAgICAqCQlhcmU6IFhBX1JET05MWSBvciBYQV9PSy4gSWYgdGhlIHJlc291cmNlIG1hbmFnZXIgd2FudHMgCi0gICAgICoJCXRvIHJvbGwgYmFjayB0aGUgdHJhbnNhY3Rpb24sIGl0IHNob3VsZCBkbyBzbwotICAgICAqCQlieSByYWlzaW5nIGFuIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPiBpbiB0aGUgcHJlcGFyZSBtZXRob2QuCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHJldHVybiAgICBBIHZhbHVlIGluZGljYXRpbmcgdGhlIHJlc291cmNlIG1hbmFnZXIncyB2b3RlIG9uIHRoZQorICAgICAqICAgICAgICBvdXRjb21lIG9mIHRoZSB0cmFuc2FjdGlvbi4gVGhlIHBvc3NpYmxlIHZhbHVlcworICAgICAqICAgICAgICBhcmU6IFhBX1JET05MWSBvciBYQV9PSy4gSWYgdGhlIHJlc291cmNlIG1hbmFnZXIgd2FudHMKKyAgICAgKiAgICAgICAgdG8gcm9sbCBiYWNrIHRoZSB0cmFuc2FjdGlvbiwgaXQgc2hvdWxkIGRvIHNvCisgICAgICogICAgICAgIGJ5IHJhaXNpbmcgYW4gYXBwcm9wcmlhdGUgPGNvZGU+WEFFeGNlcHRpb248L2NvZGU+IGluIHRoZSBwcmVwYXJlIG1ldGhvZC4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IHByZXBhcmUoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5wcmVwYXJlKHhpZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogT2J0YWluIGEgbGlzdCBvZiBwcmVwYXJlZCB0cmFuc2FjdGlvbiBicmFuY2hlcyBmcm9tIGEgcmVzb3VyY2UgbWFuYWdlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlmbGFnCU9uZSBvZiBUTVNUQVJUUlNDQU4sIFRNRU5EUlNDQU4sIFRNTk9GTEFHUy4gVE1OT0ZMQUdTIAotICAgICAqCQkJbXVzdCBiZSB1c2VkIHdoZW4gbm8gb3RoZXIgZmxhZ3MgYXJlIHNldCBpbiBmbGFncy4KLSAgICAgKiBAcmV0dXJuCVRoZSByZXNvdXJjZSBtYW5hZ2VyIHJldHVybnMgemVybyBvciBtb3JlIFhJRHMgZm9yIHRoZSB0cmFuc2FjdGlvbiAKLSAgICAgKgkJYnJhbmNoZXMgdGhhdCBhcmUgY3VycmVudGx5IGluIGEgcHJlcGFyZWQgb3IgaGV1cmlzdGljYWxseSAKLSAgICAgKgkJY29tcGxldGVkIHN0YXRlLiBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBvcGVyYXRpb24sIHRoZSByZXNvdXJjZQotICAgICAqCQltYW5hZ2VyIHNob3VsZCB0aHJvdyB0aGUgYXBwcm9wcmlhdGUgPGNvZGU+WEFFeGNlcHRpb248L2NvZGU+LgorICAgICAqIEBwYXJhbSAgICBmbGFnICAgIE9uZSBvZiBUTVNUQVJUUlNDQU4sIFRNRU5EUlNDQU4sIFRNTk9GTEFHUy4gVE1OT0ZMQUdTCisgICAgICogICAgICAgICAgICBtdXN0IGJlIHVzZWQgd2hlbiBubyBvdGhlciBmbGFncyBhcmUgc2V0IGluIGZsYWdzLgorICAgICAqIEByZXR1cm4gICAgVGhlIHJlc291cmNlIG1hbmFnZXIgcmV0dXJucyB6ZXJvIG9yIG1vcmUgWElEcyBmb3IgdGhlIHRyYW5zYWN0aW9uCisgICAgICogICAgICAgIGJyYW5jaGVzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBhIHByZXBhcmVkIG9yIGhldXJpc3RpY2FsbHkKKyAgICAgKiAgICAgICAgY29tcGxldGVkIHN0YXRlLiBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBvcGVyYXRpb24sIHRoZSByZXNvdXJjZQorICAgICAqICAgICAgICBtYW5hZ2VyIHNob3VsZCB0aHJvdyB0aGUgYXBwcm9wcmlhdGUgPGNvZGU+WEFFeGNlcHRpb248L2NvZGU+LgogICAgICAqLwogICAgIHB1YmxpYyBYaWRbXSByZWNvdmVyKGludCBmbGFnKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnJlY292ZXIoZmxhZyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogSW5mb3JtIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIHJvbGwgYmFjayB3b3JrIGRvbmUgb24gYmVoYWxmIG9mIGEgdHJhbnNhY3Rpb24gYnJhbmNoCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjayhYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICAvL3RoZSBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCBjYWxsIGhhcyBjb21lIGhlcmUgYmVjYXN1ZQotCS8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93Ci0JLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKLQkvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKLQkvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCi0JLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCisgICAgLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKKyAgICAvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAorICAgIC8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcworICAgIC8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKKyAgICAvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKICAgICAgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICAgICAgeGFyLnJvbGxiYWNrKHhpZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgZm9yIHRoaXMgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2Vjb25kcwl0aGUgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzLgotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGlzIHNldCBzdWNjZXNzZnVsbHk7IG90aGVyd2lzZSBmYWxzZS4KKyAgICAgKiBAcGFyYW0gICAgc2Vjb25kcyAgICB0aGUgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzLgorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGlzIHNldCBzdWNjZXNzZnVsbHk7IG90aGVyd2lzZSBmYWxzZS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBzZXRUcmFuc2FjdGlvblRpbWVvdXQoaW50IHNlY29uZHMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KHNlY29uZHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFN0YXJ0IHdvcmsgb24gYmVoYWxmIG9mIGEgdHJhbnNhY3Rpb24gYnJhbmNoIHNwZWNpZmllZCBpbiB4aWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZQotICAgICAqIEByZXR1cm4JZmxhZ3MJT25lIG9mIFRNTk9GTEFHUywgVE1KT0lOLCBvciBUTVJFU1VNRQorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc291cmNlCisgICAgICogQHJldHVybiAgICBmbGFncyAgICBPbmUgb2YgVE1OT0ZMQUdTLCBUTUpPSU4sIG9yIFRNUkVTVU1FCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RhcnQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICAvL0dKQ0lOVApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sCmluZGV4IDk2Nzg2OGIuLjY0MTA1NTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9IiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvc3BpIi8+Ci0gCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzcsNSArMzcsNSBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0Ii8+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YQppbmRleCBjZTMyMWFmLi45ZTdmMjUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YQpAQCAtMjYsOCArMjYsOCBAQAogLyoqCiAgKiBFeGVjdXRlIHRoZSBtZXRob2RzIGJhc2VkIG9uIHRoZSBwYXJhbWV0ZXJzLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCiBwdWJsaWMgY2xhc3MgTWV0aG9kRXhlY3V0b3IgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZXsKIApAQCAtMzksMTMwICszOSwxMzAgQEAKICAgICAvKioKICAgICAgKiBFeGNldXRlIGEgc2ltcGxlIHNldCBNZXRob2QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsdWUJVmFsdWUgdG8gYmUgc2V0LgotICAgICAqIEBwYXJhbQltZXRob2QJPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCW9iaglPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KKyAgICAgKiBAcGFyYW0gICAgdmFsdWUgICAgVmFsdWUgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICBtZXRob2QgICAgPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG9iaiAgICBPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KICAgICAgKiBAdGhyb3dzICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4sIGluIGNhc2Ugb2YgdGhlIG1pc21hdGNoIG9mIHBhcmFtZXRlciB2YWx1ZXMgb3IKLSAgICAgKgkJYSBzZWN1cml0eSB2aW9sYXRpb24uICAgICAKKyAgICAgKiAgICAgICAgYSBzZWN1cml0eSB2aW9sYXRpb24uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcnVuSmF2YUJlYW5NZXRob2QoU3RyaW5nIHZhbHVlLCBNZXRob2QgbWV0aG9kLCBPYmplY3Qgb2JqKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCWlmICh2YWx1ZT09bnVsbCB8fCB2YWx1ZS50cmltKCkuZXF1YWxzKCIiKSkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCXRyeSB7Ci0gICAgCSAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLSAgICAJICAgIGlmICggcGFyYW1ldGVycy5sZW5ndGggPT0gMSkgewotICAgIAkgICAgICAgIE9iamVjdFtdIHZhbHVlcyA9IG5ldyBPYmplY3RbMV07Ci0gICAgCSAgICAJdmFsdWVzWzBdID0gY29udmVydFR5cGUocGFyYW1ldGVyc1swXSwgdmFsdWUpOwotICAgIAkgICAgCW1ldGhvZC5pbnZva2Uob2JqLCB2YWx1ZXMpOwotICAgIAkgICAgfQotICAgIAl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOwotICAgIAl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9CisgICAgICAgIGlmICh2YWx1ZT09bnVsbCB8fCB2YWx1ZS50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKKyAgICAgICAgICAgIGlmICggcGFyYW1ldGVycy5sZW5ndGggPT0gMSkgeworICAgICAgICAgICAgICAgIE9iamVjdFtdIHZhbHVlcyA9IG5ldyBPYmplY3RbMV07CisgICAgICAgICAgICAgICAgdmFsdWVzWzBdID0gY29udmVydFR5cGUocGFyYW1ldGVyc1swXSwgdmFsdWUpOworICAgICAgICAgICAgICAgIG1ldGhvZC5pbnZva2Uob2JqLCB2YWx1ZXMpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBFeGVjdXRlcyB0aGUgbWV0aG9kLiAgICAgCisgICAgICogRXhlY3V0ZXMgdGhlIG1ldGhvZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltZXRob2QgPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCW9iaglPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KLSAgICAgKiBAcGFyYW0JdmFsdWVzCVBhcmFtZXRlciB2YWx1ZXMgZm9yIGV4ZWN1dGluZyB0aGUgbWV0aG9kLgorICAgICAqIEBwYXJhbSAgICBtZXRob2QgPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG9iaiAgICBPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KKyAgICAgKiBAcGFyYW0gICAgdmFsdWVzICAgIFBhcmFtZXRlciB2YWx1ZXMgZm9yIGV4ZWN1dGluZyB0aGUgbWV0aG9kLgogICAgICAqIEB0aHJvd3MgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiwgaW4gY2FzZSBvZiB0aGUgbWlzbWF0Y2ggb2YgcGFyYW1ldGVyIHZhbHVlcyBvcgotICAgICAqCQlhIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiAgICAgICAgYSBzZWN1cml0eSB2aW9sYXRpb24uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcnVuTWV0aG9kKE1ldGhvZCBtZXRob2QsIE9iamVjdCBvYmosIFZlY3RvciB2YWx1ZXMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJdHJ5IHsKLQkgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0JICAgIGlmICh2YWx1ZXMuc2l6ZSgpICE9IHBhcmFtZXRlcnMubGVuZ3RoKSB7Ci0JICAgICAgICByZXR1cm47Ci0JICAgIH0KLSAgICAJICAgIE9iamVjdFtdIGFjdHVhbFZhbHVlcyA9IG5ldyBPYmplY3RbcGFyYW1ldGVycy5sZW5ndGhdOwotICAgIAkgICAgZm9yIChpbnQgaSA9MDsgaTxwYXJhbWV0ZXJzLmxlbmd0aCA7IGkrKykgewotICAgIAkgICAgCVN0cmluZyB2YWwgPSAoU3RyaW5nKSB2YWx1ZXMuZ2V0KGkpOwotICAgIAkgICAgCWlmICh2YWwudHJpbSgpLmVxdWFscygiTlVMTCIpKSB7Ci0gICAgCSAgICAJICAgIGFjdHVhbFZhbHVlc1tpXSA9IG51bGw7Ci0gICAgCSAgICAJfSBlbHNlIHsKLSAgICAJICAgIAkgICAgYWN0dWFsVmFsdWVzW2ldID0gY29udmVydFR5cGUocGFyYW1ldGVyc1tpXSwgdmFsKTsKLSAgICAJICAgIAl9Ci0gICAgCSAgICB9Ci0gICAgCSAgICBtZXRob2QuaW52b2tlKG9iaiwgYWN0dWFsVmFsdWVzKTsKLSAgICAJfWNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOwotICAgIAl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9CisgICAgICAgIHRyeSB7CisgICAgICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOworICAgICAgICBpZiAodmFsdWVzLnNpemUoKSAhPSBwYXJhbWV0ZXJzLmxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICBPYmplY3RbXSBhY3R1YWxWYWx1ZXMgPSBuZXcgT2JqZWN0W3BhcmFtZXRlcnMubGVuZ3RoXTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPTA7IGk8cGFyYW1ldGVycy5sZW5ndGggOyBpKyspIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdmFsID0gKFN0cmluZykgdmFsdWVzLmdldChpKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsLnRyaW0oKS5lcXVhbHMoIk5VTEwiKSkgeworICAgICAgICAgICAgICAgICAgICBhY3R1YWxWYWx1ZXNbaV0gPSBudWxsOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlc1tpXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbaV0sIHZhbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbWV0aG9kLmludm9rZShvYmosIGFjdHVhbFZhbHVlcyk7CisgICAgICAgIH1jYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29udmVydHMgdGhlIHR5cGUgZnJvbSBTdHJpbmcgdG8gdGhlIENsYXNzIHR5cGUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHlwZQkJQ2xhc3MgbmFtZSB0byB3aGljaCB0aGUgY29udmVyc2lvbiBpcyByZXF1aXJlZC4KLSAgICAgKiBAcGFyYW0JcGFyYW1ldGVyCVN0cmluZyB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQuCi0gICAgICogQHJldHVybglDb252ZXJ0ZWQgdmFsdWUuCisgICAgICogQHBhcmFtICAgIHR5cGUgICAgICAgIENsYXNzIG5hbWUgdG8gd2hpY2ggdGhlIGNvbnZlcnNpb24gaXMgcmVxdWlyZWQuCisgICAgICogQHBhcmFtICAgIHBhcmFtZXRlciAgICBTdHJpbmcgdmFsdWUgdG8gYmUgY29udmVydGVkLgorICAgICAqIEByZXR1cm4gICAgQ29udmVydGVkIHZhbHVlLgogICAgICAqIEB0aHJvd3MgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiwgaW4gY2FzZSBvZiB0aGUgbWlzbWF0Y2ggb2YgcGFyYW1ldGVyIHZhbHVlcyBvcgotICAgICAqCQlhIHNlY3VyaXR5IHZpb2xhdGlvbi4gICAgIAorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwcml2YXRlIE9iamVjdCBjb252ZXJ0VHlwZShDbGFzcyB0eXBlLCBTdHJpbmcgcGFyYW1ldGVyKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCXRyeSB7Ci0gICAgCSAgICBTdHJpbmcgdHlwZU5hbWUgPSB0eXBlLmdldE5hbWUoKTsKLSAgICAJICAgIGlmICggdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU3RyaW5nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuT2JqZWN0IikpIHsKLSAgICAJICAgIAlyZXR1cm4gcGFyYW1ldGVyOwotICAgIAkgICAgfQotICAgIAkKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImludCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkludGVnZXIiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgSW50ZWdlcihwYXJhbWV0ZXIpOwotICAgIAkgICAgfQotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJzaG9ydCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlNob3J0IikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IFNob3J0KHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJ5dGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5CeXRlIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEJ5dGUocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygibG9uZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkxvbmciKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgTG9uZyhwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImZsb2F0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRmxvYXQiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgRmxvYXQocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZG91YmxlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRG91YmxlIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IERvdWJsZShwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0RlY2ltYWwiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnSW50ZWdlciIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJvb2xlYW4iKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Cb29sZWFuIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEJvb2xlYW4ocGFyYW1ldGVyKTsKLSAgICAgICAgICAgIH0JCQorICAgICAgICB0cnkgeworICAgICAgICAgICAgU3RyaW5nIHR5cGVOYW1lID0gdHlwZS5nZXROYW1lKCk7CisgICAgICAgICAgICBpZiAoIHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlN0cmluZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLk9iamVjdCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcjsKKyAgICAgICAgICAgIH0KIAotICAgIAkgICAgcmV0dXJuIHBhcmFtZXRlcjsKLSAgICAJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19uZmUiLCBwYXJhbWV0ZXIpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHBhcmFtZXRlcisiOiBOb3QgYSB2YWxpZCB2YWx1ZSBmb3IgdGhpcyBtZXRob2QgIik7Ci0gICAgCX0KKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImludCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkludGVnZXIiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSW50ZWdlcihwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJzaG9ydCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlNob3J0IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNob3J0KHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJ5dGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5CeXRlIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ5dGUocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygibG9uZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkxvbmciKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTG9uZyhwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJmbG9hdCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkZsb2F0IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0KHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImRvdWJsZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkRvdWJsZSIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEb3VibGUocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0RlY2ltYWwiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0ludGVnZXIiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYm9vbGVhbiIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJvb2xlYW4iKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQm9vbGVhbihwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyOworICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX25mZSIsIHBhcmFtZXRlcik7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24ocGFyYW1ldGVyKyI6IE5vdCBhIHZhbGlkIHZhbHVlIGZvciB0aGlzIG1ldGhvZCAiKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQppbmRleCBmYzE0OWJmLi5mMDA4ZTdmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKQEAgLTI5LDM2ICsyOSwzNiBAQAogLyoqCiAgKiBTZWN1cml0eVV0aWxzIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjIKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIyCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgU2VjdXJpdHlVdGlscyB7CiAKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCwgZ2l2ZW4gCi0gICAgICogdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIHN1YmplY3QgYW5kIHRoZSAKLSAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+LiBJdCBmaXJzdCBjaGVja3MgaWYgdGhlIAotICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gaXMgbnVsbCBvciBub3QuIElmIGl0IGlzIG5vdCBudWxsLCAKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCwgZ2l2ZW4KKyAgICAgKiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgc3ViamVjdCBhbmQgdGhlCisgICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPi4gSXQgZmlyc3QgY2hlY2tzIGlmIHRoZQorICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gaXMgbnVsbCBvciBub3QuIElmIGl0IGlzIG5vdCBudWxsLAogICAgICAqIGl0IGNvbnN0cnVjdHMgYSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCB3aXRoCiAgICAgICogdGhlIHVzZXIgYW5kIHBhc3N3b3JkIGZpZWxkcyBmcm9tIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGFuZCByZXR1cm5zIHRoaXMKLSAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdC4gSWYgdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gCi0gICAgICogaXMgbnVsbCwgaXQgcmV0cmlldmVzIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdHMgZnJvbSAKKyAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdC4gSWYgdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KKyAgICAgKiBpcyBudWxsLCBpdCByZXRyaWV2ZXMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0cyBmcm9tCiAgICAgICogdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IHBhcmFtZXRlciBhbmQgcmV0dXJucyB0aGUgZmlyc3QKLSAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCB3aGljaCBjb250YWlucyBhIAorICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGEKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBpbnN0YW5jZSBlcXVpdmFsZW50CiAgICAgICogdG8gdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIHBhcmFtZXRlci4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+Ci0gICAgICogQHBhcmFtCWluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgotICAgICAqIEByZXR1cm4JPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CWdlbmVyaWMgZXhjZXB0aW9uIGlmIG9wZXJhdGlvbiBmYWlscwotICAgICAqIEB0aHJvd3MJPGNvZGU+U2VjdXJpdHlFeGNlcHRpb248L2NvZGU+CWlmIGFjY2VzcyB0byB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgaXMgZGVuaWVkCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgaW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gICAgZ2VuZXJpYyBleGNlcHRpb24gaWYgb3BlcmF0aW9uIGZhaWxzCisgICAgICogQHRocm93cyAgICA8Y29kZT5TZWN1cml0eUV4Y2VwdGlvbjwvY29kZT4gICAgaWYgYWNjZXNzIHRvIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBpcyBkZW5pZWQKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIFBhc3N3b3JkQ3JlZGVudGlhbCBnZXRQYXNzd29yZENyZWRlbnRpYWwoZmluYWwgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiwKICAgICAgICAgIGZpbmFsIFN1YmplY3Qgc3ViamVjdCwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAKLQlpZiAoaW5mbyA9PSBudWxsKSB7CisgICAgaWYgKGluZm8gPT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKHN1YmplY3QgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTg5LDE0ICs4OSwxNCBAQAogICAgICAgICAgICAgcmV0dXJuIHBjOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0cnVlIGlmIHR3byBzdHJpbmdzIGFyZSBlcXVhbDsgZmFsc2Ugb3RoZXJ3aXNlCi0gICAgICogCi0gICAgICogQHBhcmFtCXN0cjEJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBwYXJhbQlzdHIyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHR3byBzdHJpbmdzIGFyZSBlcXVhbAotICAgICAqICAgICAgICAJZmFsc2UJb3RoZXJ3aXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3RyMSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHN0cjIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgdHdvIHN0cmluZ3MgYXJlIGVxdWFsCisgICAgICogICAgICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBzdGF0aWMgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoU3RyaW5nIHN0cjEsIFN0cmluZyBzdHIyKSB7CiAgICAgICAgIGlmIChzdHIxID09IG51bGwpIHsKQEAgLTEwOSwxMCArMTA5LDEwIEBACiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0cnVlIGlmIHR3byA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdHMgYXJlIGVxdWFsOyBmYWxzZSBvdGhlcndpc2UKICAgICAgKgotICAgICAqIEBwYXJhbQlwQzEJPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqIEBwYXJhbQlwQzIJPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgdHdvIFBhc3N3b3JkQ3JlZGVudGlhbHMgYXJlIGVxdWFsCi0gICAgICogICAgICAgIAlmYWxzZQlvdGhlcndpc2UKKyAgICAgKiBAcGFyYW0gICAgcEMxICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcEMyICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHR3byBQYXNzd29yZENyZWRlbnRpYWxzIGFyZSBlcXVhbAorICAgICAqICAgICAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgc3RhdGljIHB1YmxpYyBib29sZWFuIGlzUGFzc3dvcmRDcmVkZW50aWFsRXF1YWwoUGFzc3dvcmRDcmVkZW50aWFsIHBDMSwgUGFzc3dvcmRDcmVkZW50aWFsIHBDMikgewogICAgICAgICBpZiAocEMxID09IHBDMikKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCmluZGV4IGE1NWJiZjAuLmYwNjBlN2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iLiIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3V0aWwiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzMsNyArMzMsNyBAQAogICAgICAgPGphciBqYXJmaWxlPSIke2Rpc3QuZGlyfS8ke3BrZy5kaXJ9L3V0aWwuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCiAgICAgICAgIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyoiLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTEzIiBkZXBlbmRzPSJjb21waWxlIi8+CiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTE0IiBkZXBlbmRzPSJjb21waWxlIi8+CiAKQEAgLTQ0LDUgKzQ0LDUgQEAKICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KLSAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhCmluZGV4IGZmNzZmMDAuLjg4MmFkYTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YQpAQCAtMTcsMTcgKzE3LDE3IEBACiBwYWNrYWdlIHNhbXBsZXMuZWpiLnN1YmNsYXNzaW5nLnNlcnZsZXQ7CiAKIGltcG9ydCBqYXZhLmlvLio7Ci1pbXBvcnQgamF2YS51dGlsLio7IAotaW1wb3J0IGpha2FydGEuc2VydmxldC4qOyAKLWltcG9ydCBqYXZheC5uYW1pbmcuKjsgCi1pbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsgCitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7CitpbXBvcnQgamF2YXgubmFtaW5nLio7CitpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIGltcG9ydCBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3Q7Ci1pbXBvcnQgamFrYXJ0YS5lamIuKjsgCitpbXBvcnQgamFrYXJ0YS5lamIuKjsKIAotaW1wb3J0IHNhbXBsZXMuZWpiLnN1YmNsYXNzaW5nLmVqYi4qOyAKK2ltcG9ydCBzYW1wbGVzLmVqYi5zdWJjbGFzc2luZy5lamIuKjsKIGltcG9ydCBjb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW47CiAKLXB1YmxpYyBjbGFzcyBTaW1wbGVCYW5rU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsgIAorcHVibGljIGNsYXNzIFNpbXBsZUJhbmtTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAKICAgSW5pdGlhbENvbnRleHQgaW5pdENvbnRleHQgPSBudWxsOwpAQCAtNDMsMTQgKzQzLDE0IEBACiAgIHsKICAgfQogCi0gIHB1YmxpYyB2b2lkIGRvR2V0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSAKLSAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgCisgIHB1YmxpYyB2b2lkIGRvR2V0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQorICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7Ci0gIH0gIAorICB9CiAKLSAgLyoqIGhhbmRsZXMgdGhlIEhUVFAgUE9TVCBvcGVyYXRpb24gKiovIAotICBwdWJsaWMgdm9pZCBkb1Bvc3QgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIAotICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAKKyAgLyoqIGhhbmRsZXMgdGhlIEhUVFAgUE9TVCBvcGVyYXRpb24gKiovCisgIHB1YmxpYyB2b2lkIGRvUG9zdCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKKyAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICBkb0xvb2t1cCgpOwogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2ltcGxlQmFua1NlcnZsZXQgaXMgZXhlY3V0aW5nIik7CiAgICAgU3RyaW5nIFNTTiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJTU04iKTsKQEAgLTY2LDE0ICs2NiwxNCBAQAogICAgIFN0cmluZyB6aXBDb2RlID0gIiI7CiAgICAgbG9uZyBjdXJyZW50U2F2aW5nc0JhbGFuY2UgPSAwOwogICAgIGxvbmcgY3VycmVudENoZWNraW5nQmFsYW5jZSA9IDA7Ci0gICAgIAorCiAgICAgU3RyaW5nIGFjdGlvbiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJhY3Rpb24iKTsKICAgICBpZiAoYWN0aW9uLmVxdWFscygiQ3JlYXRlIikpCiAgICAgewogICAgICAgbWVzc2FnZSA9ICJBZGQgQ3VzdG9tZXIiOwogICAgICAganNwID0gIi9TaW1wbGVCYW5rQWRkLmpzcCI7CiAgICAgfQotICAgIGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoIkFkZCBDdXN0b21lciIpKSAKKyAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJBZGQgQ3VzdG9tZXIiKSkKICAgICB7CiAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFkZCBDdXN0b21lciBidXR0b24gcHJlc3NlZCIpOwogICAgICAgU1NOID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoIlNTTiIpOwpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSBjdXN0b21lclNhdmluZ3NIb21lLmNyZWF0ZShTU04sIGxhc3ROYW1lLCBmaXJzdE5hbWUsIGFkZHJlc3MxLCBhZGRyZXNzMiwgY2l0eSwgc3RhdGUsIHppcENvZGUpOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgY3JlYXRlIHRoZSBjdXN0b21lciBzYXZpbmdzIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBtZXNzYWdlID0gIkN1c3RvbWVyIEFkZGVkLiI7CkBAIC0xMDMsNyArMTAzLDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gY3VzdG9tZXJTYXZpbmdzSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTik7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBmaW5kIHRoZSBjdXN0b21lciByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogICAgICAganNwID0gIi9TaW1wbGVCYW5rRWRpdC5qc3AiOwpAQCAtMTE1LDcgKzExNSw3IEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5ncyA9IGN1c3RvbWVyU2F2aW5nc0hvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZmluZCB0aGUgY3VzdG9tZXIgc2F2aW5ncyByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogICAgICAgbWVzc2FnZSA9ICJEZWxldGUgQ3VzdG9tZXIiOwpAQCAtMTI3LDEyICsxMjcsMTIgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTikucmVtb3ZlKCk7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBkZWxldGUgdGhlIGN1c3RvbWVyIHNhdmluZ3MgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogICAgICAgbWVzc2FnZSA9ICJDdXN0b21lciBEZWxldGVkLiI7CiAgICAgICBqc3AgPSAiL1NpbXBsZUJhbmtNZXNzYWdlLmpzcCI7Ci0gICAgfSAgCisgICAgfQogCiAKICAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJVcGRhdGUiKSkKQEAgLTE0Miw3ICsxNDIsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSAoQ3VzdG9tZXJTYXZpbmdzKWN1c3RvbWVyU2F2aW5nc0hvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZmluZCB0aGUgY3VzdG9tZXIgc2F2aW5ncyByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogCkBAIC0xNTEsNyArMTUxLDcgQEAKICAgICAgICAgY3VzdG9tZXJDaGVja2luZyA9IChDdXN0b21lckNoZWNraW5nKWN1c3RvbWVyQ2hlY2tpbmdIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIGNoZWNraW5nIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAKQEAgLTIxMSw5ICsyMTEsOSBAQAogICAgIFJlcXVlc3REaXNwYXRjaGVyIGRpc3BhdGNoZXIgPSBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldFJlcXVlc3REaXNwYXRjaGVyKGpzcCk7CiAgICAgZGlzcGF0Y2hlci5pbmNsdWRlKHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICByZXR1cm47Ci0gIH0gCisgIH0KIAotICBwdWJsaWMgdm9pZCBkb0xvb2t1cCgpIAorICBwdWJsaWMgdm9pZCBkb0xvb2t1cCgpCiAgIHsKICAgICB0cnkgewogICAgICAgaW5pdENvbnRleHQgPSBuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCmluZGV4IGRmOWRmMzQuLjMzYTcwNjkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCkBAIC0xICsxIEBACi1kcm9wIHRhYmxlIGN1c3RvbWVyMjsNCitkcm9wIHRhYmxlIGN1c3RvbWVyMjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9zcWwvc2ltcGxlQmFuay5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvc3FsL3NpbXBsZUJhbmsuc3FsCmluZGV4IDZlZjc1YzMuLmUxN2FlZjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9zcWwvc2ltcGxlQmFuay5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3NxbC9zaW1wbGVCYW5rLnNxbApAQCAtMSwxNCArMSwxNCBAQAogZHJvcCB0YWJsZSBjdXN0b21lcjI7CiAKIGNyZWF0ZSB0YWJsZSBjdXN0b21lcjIgKAotICBTU04gdmFyY2hhcjIoOSksIAotICBsYXN0TkFtZSB2YXJjaGFyMigyMCksIAotICBmaXJzdG5hbWUgdmFyY2hhcjIoMjApLCAKLSAgYWRkcmVzczEgdmFyY2hhcjIgKDIwKSwgCi0gIGFkZHJlc3MyIHZhcmNoYXIyKDIwKSwgCi0gIGNpdHkgdmFyY2hhcjIoMTApLCAKLSAgc3RhdGUgdmFyY2hhcjIoMTApLCAKLSAgemlwY29kZSB2YXJjaGFyMig1KSwgCisgIFNTTiB2YXJjaGFyMig5KSwKKyAgbGFzdE5BbWUgdmFyY2hhcjIoMjApLAorICBmaXJzdG5hbWUgdmFyY2hhcjIoMjApLAorICBhZGRyZXNzMSB2YXJjaGFyMiAoMjApLAorICBhZGRyZXNzMiB2YXJjaGFyMigyMCksCisgIGNpdHkgdmFyY2hhcjIoMTApLAorICBzdGF0ZSB2YXJjaGFyMigxMCksCisgIHppcGNvZGUgdmFyY2hhcjIoNSksCiAgIHNhdmluZ3NiYWxhbmNlIG51bWJlcigxMCkgLAogICBjaGVja2luZ2JhbGFuY2UgbnVtYmVyKDEwKSApOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS5yZXNvdXJjZXMteG1sL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS5yZXNvdXJjZXMteG1sL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYWYyNGRhZi4uMjBiYzg1ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21hcmtjb25uZWN0aW9uYXNiYWQueGEucmVzb3VyY2VzLXhtbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tYXJrY29ubmVjdGlvbmFzYmFkLnhhLnJlc291cmNlcy14bWwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLW1hcmtjb25uZWN0aW9uYXNiYWQueGEiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS5yZXNvdXJjZXMteG1sL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tYXJrY29ubmVjdGlvbmFzYmFkLnhhLnJlc291cmNlcy14bWwvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGU5NWE3ZDAuLjI4ZGJmYjUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tYXJrY29ubmVjdGlvbmFzYmFkLnhhLnJlc291cmNlcy14bWwvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tYXJrY29ubmVjdGlvbmFzYmFkLnhhLnJlc291cmNlcy14bWwvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0xMTcsMTQgKzExNywxNCBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIiBNYXJrLUNvbm5lY3Rpb24tQXMtQmFkIFtMb2NhbC1YQSAtU2hhcmVhYmxlLVNoYXJlYWJsZSAtIFJlYWQtV3JpdGVdIDogIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0gICAgICAgICBpZiAoc2ltcGxlQk1QLnRlc3QxMSgpICYmIGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCJqYXZhOmFwcC9qZGJjLXNoYXJlYWJsZS1wb29sIikgPT0gMTUgJiYgCisgICAgICAgICBpZiAoc2ltcGxlQk1QLnRlc3QxMSgpICYmIGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCJqYXZhOmFwcC9qZGJjLXNoYXJlYWJsZS1wb29sIikgPT0gMTUgJiYKICAgICAgICAgICAgICAgICAgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woImphdmE6YXBwL2pkYmMtbG9jYWwtcG9vbCIpID09IDMpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgTWFyay1Db25uZWN0aW9uLUFzLUJhZCBbTG9jYWwtWEEgLVNoYXJlYWJsZS1TaGFyZWFibGUgLSBSZWFkLVJlYWRdIDogIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgTWFyay1Db25uZWN0aW9uLUFzLUJhZCBbTG9jYWwtWEEgLVNoYXJlYWJsZS1TaGFyZWFibGUgLSBSZWFkLVJlYWRdIDogIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0gICAgICAgICBpZiAoc2ltcGxlQk1QLnRlc3QxMigpICYmIGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCJqYXZhOmFwcC9qZGJjLXNoYXJlYWJsZS1wb29sIikgPT0gMTYgJiYgCisgICAgICAgICBpZiAoc2ltcGxlQk1QLnRlc3QxMigpICYmIGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCJqYXZhOmFwcC9qZGJjLXNoYXJlYWJsZS1wb29sIikgPT0gMTYgJiYKICAgICAgICAgICAgICAgICAgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woImphdmE6YXBwL2pkYmMtbG9jYWwtcG9vbCIpID09IDQpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgTWFyay1Db25uZWN0aW9uLUFzLUJhZCBbTG9jYWwtWEEgLVNoYXJlYWJsZS1TaGFyZWFibGUgLSBXcml0ZS1SZWFkXSA6ICIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMzksMjAgKzEzOSwyMCBAQAogCiAgICAgcHVibGljIGludCBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbChTdHJpbmcgcG9vbE5hbWUpIHRocm93cyBFeGNlcHRpb24gewogCi0JZmluYWwgU3RyaW5nIHVybFN0ciA9ICJzZXJ2aWNlOmpteDpybWk6Ly8vam5kaS9ybWk6Ly8iICsgSE9TVF9OQU1FICsgIjoiICsgSk1YX1BPUlQgKyAiL2pteHJtaSI7ICAgIAorICAgIGZpbmFsIFN0cmluZyB1cmxTdHIgPSAic2VydmljZTpqbXg6cm1pOi8vL2puZGkvcm1pOi8vIiArIEhPU1RfTkFNRSArICI6IiArIEpNWF9QT1JUICsgIi9qbXhybWkiOwogICAgICAgICBmaW5hbCBKTVhTZXJ2aWNlVVJMIHVybCA9IG5ldyBKTVhTZXJ2aWNlVVJMKHVybFN0cik7CiAKLQlmaW5hbCBKTVhDb25uZWN0b3Igam14Q29ubiA9IEpNWENvbm5lY3RvckZhY3RvcnkuY29ubmVjdCh1cmwpOwotCWZpbmFsIE1CZWFuU2VydmVyQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gam14Q29ubi5nZXRNQmVhblNlcnZlckNvbm5lY3Rpb24oKTsKKyAgICBmaW5hbCBKTVhDb25uZWN0b3Igam14Q29ubiA9IEpNWENvbm5lY3RvckZhY3RvcnkuY29ubmVjdCh1cmwpOworICAgIGZpbmFsIE1CZWFuU2VydmVyQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gam14Q29ubi5nZXRNQmVhblNlcnZlckNvbm5lY3Rpb24oKTsKIAogICAgICAgICBPYmplY3ROYW1lIG9iamVjdE5hbWUgPQogLy8gICAgICAgICAgICAgICAgbmV3IE9iamVjdE5hbWUoImFteDpwcD0vbW9uL3NlcnZlci1tb25bc2VydmVyXSx0eXBlPWpkYmMtY29ubmVjdGlvbi1wb29sLW1vbixuYW1lPXJlc291cmNlcy8iICsgcG9vbE5hbWUpOwogLy8gICAgICAgICAgICAgICAgbmV3IE9iamVjdE5hbWUoImFteDpwcD0vbW9uL3NlcnZlci1tb25bc2VydmVyXSx0eXBlPWpkYmMtY29ubmVjdGlvbi1wb29sLW1vbixuYW1lPWFwcGxpY2F0aW9ucy9qZGJjLW1hcmtjb25uZWN0aW9uYXNiYWQueGFBcHAvcmVzb3VyY2VzLyIrIHBvb2xOYW1lKTsKICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0TmFtZSgiYW14OnBwPS9tb24vc2VydmVyLW1vbltzZXJ2ZXJdLHR5cGU9amRiYy1jb25uZWN0aW9uLXBvb2wtbW9uLG5hbWU9XCJhcHBsaWNhdGlvbnMvamRiYy1tYXJrY29ubmVjdGlvbmFzYmFkLnhhQXBwL3Jlc291cmNlcy8vIisgcG9vbE5hbWUrIlwiIik7CiAKLQlqYXZheC5tYW5hZ2VtZW50Lm9wZW5tYmVhbi5Db21wb3NpdGVEYXRhU3VwcG9ydCByZXR1cm5WYWx1ZSA9IAotCQkoamF2YXgubWFuYWdlbWVudC5vcGVubWJlYW4uQ29tcG9zaXRlRGF0YVN1cHBvcnQpIAotCQljb25uZWN0aW9uLmdldEF0dHJpYnV0ZShvYmplY3ROYW1lLCBOVU1fQ09OX0RFU1RST1lFRF9DT1VOVCk7CisgICAgamF2YXgubWFuYWdlbWVudC5vcGVubWJlYW4uQ29tcG9zaXRlRGF0YVN1cHBvcnQgcmV0dXJuVmFsdWUgPQorICAgICAgICAoamF2YXgubWFuYWdlbWVudC5vcGVubWJlYW4uQ29tcG9zaXRlRGF0YVN1cHBvcnQpCisgICAgICAgIGNvbm5lY3Rpb24uZ2V0QXR0cmlidXRlKG9iamVjdE5hbWUsIE5VTV9DT05fREVTVFJPWUVEX0NPVU5UKTsKIAogICAgICAgICByZXR1cm4gbmV3IEludGVnZXIocmV0dXJuVmFsdWUuZ2V0KCJjb3VudCIpLnRvU3RyaW5nKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tYXJrY29ubmVjdGlvbmFzYmFkLnhhLnJlc291cmNlcy14bWwvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21hcmtjb25uZWN0aW9uYXNiYWQueGEucmVzb3VyY2VzLXhtbC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggNDZiZTM5Zi4uNmQ5YTdjNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21hcmtjb25uZWN0aW9uYXNiYWQueGEucmVzb3VyY2VzLXhtbC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21hcmtjb25uZWN0aW9uYXNiYWQueGEucmVzb3VyY2VzLXhtbC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsOCArMSw4IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKGlkIGludGVnZXIgLCBkZXNjcmlwdGlvbiBjaGFyKDUwKSk7DQotDQotZHJvcCB0YWJsZSBvd25lcjsNCi0NCi1jcmVhdGUgdGFibGUgb3duZXIgKCBpZCBpbnRlZ2VyLCBkZXNjcmlwdGlvbiBjaGFyKDUwKSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoaWQgaW50ZWdlciAsIGRlc2NyaXB0aW9uIGNoYXIoNTApKTsKKworZHJvcCB0YWJsZSBvd25lcjsKKworY3JlYXRlIHRhYmxlIG93bmVyICggaWQgaW50ZWdlciwgZGVzY3JpcHRpb24gY2hhcig1MCkpOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS5yZXNvdXJjZXMteG1sL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS5yZXNvdXJjZXMteG1sL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggYTVlYTJmOC4uZDg3ZDVkZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21hcmtjb25uZWN0aW9uYXNiYWQueGEucmVzb3VyY2VzLXhtbC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tYXJrY29ubmVjdGlvbmFzYmFkLnhhLnJlc291cmNlcy14bWwvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSwyICsxLDIgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi1kcm9wIHRhYmxlIG93bmVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKK2Ryb3AgdGFibGUgb3duZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2J1aWxkLnhtbAppbmRleCA3ZmM0YjVmLi4zOGRkZjc4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9idWlsZC54bWwKQEAgLTg2LDE2ICs4NiwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+IFVzYWdlOgotCQlhbnQgY210IChFeGVjdXRlcyB0aGUgY210IHRlc3QpCi0JCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgbXEgdGVzdHMpCi0JCWFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgbXEgdGVzdHMpCi0JCWFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgbXEgdGVzdHMpCi0JCWFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBtcSB0ZXN0cykKLQkJYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIG1xIGFwcHMpCi0JCWFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgbXEgdGVzdHMpCi0JCWFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgIG1xIGFwcHMpCi0JCWFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3IgbXEgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPiBVc2FnZToKKyAgICAgICAgYW50IGNtdCAoRXhlY3V0ZXMgdGhlIGNtdCB0ZXN0KQorICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIG1xIHRlc3RzKQorICAgICAgICBhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIG1xIHRlc3RzKQorICAgICAgICBhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIG1xIHRlc3RzKQorICAgICAgICBhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgbXEgdGVzdHMpCisgICAgICAgIGFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBtcSBhcHBzKQorICAgICAgICBhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIG1xIHRlc3RzKQorICAgICAgICBhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBtcSBhcHBzKQorICAgICAgICBhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIG1xIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9jbXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9jbXQvYnVpbGQucHJvcGVydGllcwppbmRleCA4NzE0MGI4Li45ODdmNzZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvY210L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2NtdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Im1xLWNtdCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZXhjcHQiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWV4Y3B0Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9ImNvbS5zdW4uczFwZXFlLm1xLmNtdC5leGNwdC5jbGllbnQuU2ltcGxlTWVzc2FnZUNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJjb20uc3VuLnMxcGVxZS5tcS5jbXQuZXhjcHQuY2xpZW50LlNpbXBsZU1lc3NhZ2VDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2NtdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvY210L2J1aWxkLnhtbAppbmRleCA3ZTJkNDMzLi5mMThkMWM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvY210L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvY210L2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTIsMTIgKzUyLDEyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbmZpZ3VyZS1jb250YWluZXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICA8IS0tIFdvcmthcm91bmQgZm9yIGlzc3VlIDE4NzgzIC0tPgpAQCAtNjcsMTIgKzY3LDEyIEBACiAgICAgICAgICAgICAgICAgICAgdmFsdWU9Im1kYi1jb250YWluZXIiLz4KICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCSAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9InNlcnZlci5tZGItY29udGFpbmVyLnByb3BlcnR5LmNtdC1tYXgtcnVudGltZS1leGNlcHRpb25zPTQiLz4KLQk8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSJzZXJ2ZXIubWRiLWNvbnRhaW5lci5wcm9wZXJ0eS5jbXQtbWF4LXJ1bnRpbWUtZXhjZXB0aW9ucz00Ii8+CisgICAgPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWptcy1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTgzLDI3ICs4MywyNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxwcm9wZXJ0eSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvY29ubmVjdG9yL2NvbmZpZy9vcmFjbGUucHJvcGVydGllcyIvPgogICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICAgIDxlbnYga2V5PSJBUFBDUEFUSCIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2xpYi9leHQvT3JhbnhvLmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIvPgogICAgICAgICAgIDxhcmcgbGluZT0iLWNsaWVudCAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KLQkgIDxhcmcgbGluZT0iLW5hbWUgJHthcHBuYW1lfUNsaWVudCIvPgotCSAgPGFyZyBsaW5lPSItdGV4dGF1dGgiLz4KLQkgIDxhcmcgbGluZT0iLXVzZXIgajJlZSIvPgotCSAgPGFyZyBsaW5lPSItcGFzc3dvcmQgajJlZSIvPgotCSAgPGFyZyBsaW5lPSIgJHtvcmFjbGVGb3JDb25uZWN0b3IuZHJpdmVyfSAke29yYWNsZUZvckNvbm5lY3Rvci51cmx9ICR7b3JhY2xlRm9yQ29ubmVjdG9yLnVzZXJ9ICR7b3JhY2xlRm9yQ29ubmVjdG9yLnB3ZH0gIi8+Ci0JICA8YXJnIGxpbmU9Ii14bWwgJHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwiLz4KKyAgICAgIDxhcmcgbGluZT0iLW5hbWUgJHthcHBuYW1lfUNsaWVudCIvPgorICAgICAgPGFyZyBsaW5lPSItdGV4dGF1dGgiLz4KKyAgICAgIDxhcmcgbGluZT0iLXVzZXIgajJlZSIvPgorICAgICAgPGFyZyBsaW5lPSItcGFzc3dvcmQgajJlZSIvPgorICAgICAgPGFyZyBsaW5lPSIgJHtvcmFjbGVGb3JDb25uZWN0b3IuZHJpdmVyfSAke29yYWNsZUZvckNvbm5lY3Rvci51cmx9ICR7b3JhY2xlRm9yQ29ubmVjdG9yLnVzZXJ9ICR7b3JhY2xlRm9yQ29ubmVjdG9yLnB3ZH0gIi8+CisgICAgICA8YXJnIGxpbmU9Ii14bWwgJHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwiLz4KICAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29ubmVjdG9yIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktam1zLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2NtdC9jbGllbnQvU2ltcGxlTWVzc2FnZUNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2NtdC9jbGllbnQvU2ltcGxlTWVzc2FnZUNsaWVudC5qYXZhCmluZGV4IDdjNmEwODQuLmM4MzY1MzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9jbXQvY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvY210L2NsaWVudC9TaW1wbGVNZXNzYWdlQ2xpZW50LmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIAogcHVibGljIGNsYXNzIFNpbXBsZU1lc3NhZ2VDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgUXVldWVTZW5kZXIgICAgICAgICAgICAgcXVldWVTZW5kZXIgPSBudWxsOwogICAgICAgICBUZXh0TWVzc2FnZSAgICAgICAgICAgICBtZXNzYWdlID0gbnVsbDsKICAgICAgICAgZmluYWwgaW50ICAgICAgICAgICAgICAgTlVNX01TR1MgPSAzOwotCWJvb2xlYW4gICAgICAgICAgICAgICAgIHBhc3NlZCA9IHRydWU7CisgICAgYm9vbGVhbiAgICAgICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgam5kaUNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKQEAgLTc3LDMzICs3NywzMyBAQAogCiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9NU0dTOyBpKyspIHsKICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldFRleHQoIlRoaXMgaXMgbWVzc2FnZSAiICsgKGkgKyAxKSk7Ci0JCW1lc3NhZ2Uuc2V0SW50UHJvcGVydHkoIklkIixpKTsKKyAgICAgICAgbWVzc2FnZS5zZXRJbnRQcm9wZXJ0eSgiSWQiLGkpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlOiAiICsKICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5nZXRUZXh0KCkpOwogICAgICAgICAgICAgICAgIHF1ZXVlU2VuZGVyLnNlbmQobWVzc2FnZSk7CiAgICAgICAgICAgICB9Ci0JICAgCi0JCWZvciAoaW50IGk9MDsgaTwgYXJncy5sZW5ndGg7IGkrKykKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ2xpZW50OiAiKyBhcmdzW2ldKTsKKworICAgICAgICBmb3IgKGludCBpPTA7IGk8IGFyZ3MubGVuZ3RoOyBpKyspCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsaWVudDogIisgYXJnc1tpXSk7CiAKICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDEwMDAwKTsKLQkgICAgQ2xhc3MuZm9yTmFtZShhcmdzWzBdKTsKLQkgICAgU3RyaW5nIHVybCA9IGFyZ3NbMV07Ci0JICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKHVybCxhcmdzWzJdLGFyZ3NbM10pOwotCSAgICBSZXN1bHRTZXQgcnMgPSBjb24uY3JlYXRlU3RhdGVtZW50KCkuZXhlY3V0ZVF1ZXJ5KCJzZWxlY3QgZXhDb3VudCBmcm9tIG1xX2NtdF9leGNwdCIpOwotCSAgICBpbnQgY291bnQgPSAwOwotCSAgICB3aGlsZSAocnMubmV4dCgpKXsKLQkgICAgICAgIGNvdW50ID0gcnMuZ2V0SW50KDEpOwotCSAgICB9CisgICAgICAgIENsYXNzLmZvck5hbWUoYXJnc1swXSk7CisgICAgICAgIFN0cmluZyB1cmwgPSBhcmdzWzFdOworICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbih1cmwsYXJnc1syXSxhcmdzWzNdKTsKKyAgICAgICAgUmVzdWx0U2V0IHJzID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpLmV4ZWN1dGVRdWVyeSgic2VsZWN0IGV4Q291bnQgZnJvbSBtcV9jbXRfZXhjcHQiKTsKKyAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgd2hpbGUgKHJzLm5leHQoKSl7CisgICAgICAgICAgICBjb3VudCA9IHJzLmdldEludCgxKTsKKyAgICAgICAgfQogICAgICAgICAgICAgcnMuY2xvc2UoKTsKLQkgICAgY29uLmNsb3NlKCk7Ci0JICAgIGlmIChjb3VudCAhPSAxNSkgewotCSAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJ0ZXN0IGZhaWxlZCBiZWNhdXNlIHRoZSBleGNlcHRpb24gY291bnQgd2FzICIgKyBjb3VudCk7Ci0JICAgIH0KLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJFYWNoIG1lc3NhZ2UgZ290IHJlZGVsaXZlcmVkICIgKyAoY291bnQvTlVNX01TR1MgLTEpICsgIiB0aW1lcyBzdWNjZXNzZnVsbHkgYW5kIHRoZW4gc3RvcHBlZCBkZWxpdmVyeSIpOworICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgaWYgKGNvdW50ICE9IDE1KSB7CisgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oInRlc3QgZmFpbGVkIGJlY2F1c2UgdGhlIGV4Y2VwdGlvbiBjb3VudCB3YXMgIiArIGNvdW50KTsKKyAgICAgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVhY2ggbWVzc2FnZSBnb3QgcmVkZWxpdmVyZWQgIiArIChjb3VudC9OVU1fTVNHUyAtMSkgKyAiIHRpbWVzIHN1Y2Nlc3NmdWxseSBhbmQgdGhlbiBzdG9wcGVkIGRlbGl2ZXJ5Iik7CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBvY2N1cnJlZDogIiArIGUudG9TdHJpbmcoKSk7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJzaW1wbGUgbWRiIG1haW4iLCBzdGF0LkZBSUwpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgaWYgKHF1ZXVlQ29ubmVjdGlvbiAhPSBudWxsKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvY210L2VqYi9TaW1wbGVNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2NtdC9lamIvU2ltcGxlTWVzc2FnZUJlYW4uamF2YQppbmRleCAwODQwMmE1Li5hYTE4YTdiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvY210L2VqYi9TaW1wbGVNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9jbXQvZWpiL1NpbXBsZU1lc3NhZ2VCZWFuLmphdmEKQEAgLTM3LDE4ICszNywxOCBAQAogICAgIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluICIKICAgICAgICAgICAgICsgIlNpbXBsZU1lc3NhZ2VCZWFuLnNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KCkiKTsKLQl0aGlzLm1kYyA9IG1kYzsKKyAgICB0aGlzLm1kYyA9IG1kYzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVNZXNzYWdlQmVhbi5lamJDcmVhdGUoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlTWVzc2FnZUJlYW4uZWpiQ3JlYXRlKCkiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBpbk1lc3NhZ2UpIHsKICAgICAgICAgVGV4dE1lc3NhZ2UgbXNnID0gbnVsbDsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1RLUNNVCBhYm91dCB0byB1cGRhdGVEQiIpOwotCXVwZGF0ZURCKCk7CisgICAgdXBkYXRlREIoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNUS1DTVQgYWZ0ZXIgdXBkYXRlREIiKTsKIAogICAgICAgICB0cnkgewpAQCAtNjUsMzIgKzY1LDMyIEBACiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0ZSkgewogICAgICAgICAgICAgdGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVGVzdCBleGNlcHRpb24iKTsKKyAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVGVzdCBleGNlcHRpb24iKTsKICAgICB9ICAvLyBvbk1lc3NhZ2UKIAogICAgIHByaXZhdGUgdm9pZCB1cGRhdGVEQigpIHsKICAgICAgICAgc3luY2hyb25pemVkKGxvY2spewogICAgICAgICB0cnkgewotCSAgICAvL0NsYXNzLmZvck5hbWUoImNvbS5pbmV0Lm9yYS5PcmFEcml2ZXIiKTsKLQkgICAgQ2xhc3MuZm9yTmFtZSgib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciIpOworICAgICAgICAvL0NsYXNzLmZvck5hbWUoImNvbS5pbmV0Lm9yYS5PcmFEcml2ZXIiKTsKKyAgICAgICAgQ2xhc3MuZm9yTmFtZSgib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciIpOwogICAgICAgICAgICAgLy9TdHJpbmcgdXJsID0gImpkYmM6aW5ldG9yYTo6d3J4LmluZGlhLnN1bi5jb206MTUyMTpkYnNtcGwxIjsKICAgICAgICAgICAgIFN0cmluZyB1cmwgPSAiamRiYzpkZXJieTovL2xvY2FsaG9zdDoxNTI3L3Rlc3RkYjtjcmVhdGU9dHJ1ZTsiOwotCSAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbih1cmwsImRidXNlciIsICJkYnBhc3N3b3JkIik7CisgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKHVybCwiZGJ1c2VyIiwgImRicGFzc3dvcmQiKTsKICAgICAgICAgICAgIFJlc3VsdFNldCBycyA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKS5leGVjdXRlUXVlcnkoInNlbGVjdCBleENvdW50IGZyb20gbXFfY210X2V4Y3B0Iik7Ci0JICAgIGludCBjb3VudCA9IDA7Ci0JICAgIHdoaWxlIChycy5uZXh0KCkpewotCSAgICAgICAgY291bnQgPSBycy5nZXRJbnQoMSk7CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIHdoaWxlIChycy5uZXh0KCkpeworICAgICAgICAgICAgY291bnQgPSBycy5nZXRJbnQoMSk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNUS1DTVQgdXBkYXRlREIgOiAiICsgY291bnQpOwotCSAgICB9Ci0JICAgIHJzLmNsb3NlKCk7Ci0JICAgIGNvdW50Kys7Ci0JICAgIFN0cmluZyBxcnkgPSAidXBkYXRlIG1xX2NtdF9leGNwdCBzZXQgZXhDb3VudD0iKyBjb3VudCA7CisgICAgICAgIH0KKyAgICAgICAgcnMuY2xvc2UoKTsKKyAgICAgICAgY291bnQrKzsKKyAgICAgICAgU3RyaW5nIHFyeSA9ICJ1cGRhdGUgbXFfY210X2V4Y3B0IHNldCBleENvdW50PSIrIGNvdW50IDsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTVEtQ01UIHVwZGF0ZURCIDogcXVlcnkgOiAiICsgcXJ5KTsKLQkgICAgY29uLmNyZWF0ZVN0YXRlbWVudCgpLmV4ZWN1dGVVcGRhdGUocXJ5KTsKLQkgICAgY29uLmNsb3NlKCk7Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBjb24uY3JlYXRlU3RhdGVtZW50KCkuZXhlY3V0ZVVwZGF0ZShxcnkpOworICAgICAgICBjb24uY2xvc2UoKTsKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3I6IiArIGUuZ2V0TWVzc2FnZSgpKTsKLQl9IAorICAgIH0KICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2VqYjMwbWRiLXJlc291cmNlcy14bWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9lamIzMG1kYi1yZXNvdXJjZXMteG1sL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDg3ODc3Ny4uYTQyODJlZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2VqYjMwbWRiLXJlc291cmNlcy14bWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvZWpiMzBtZGItcmVzb3VyY2VzLXhtbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYjMwLWhlbGxvLW1kYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CkBAIC0yNyw2ICsyNyw2IEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvZWpiMzBtZGItcmVzb3VyY2VzLXhtbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvZWpiMzBtZGItcmVzb3VyY2VzLXhtbC9idWlsZC54bWwKaW5kZXggYjFhMGEzNS4uNTUyZDI4YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2VqYjMwbWRiLXJlc291cmNlcy14bWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9lamIzMG1kYi1yZXNvdXJjZXMteG1sL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTUgKzQ2LDE1IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQmVhbiouY2xhc3MsKiovKkhlbGxvKiIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJnbGFzc2Zpc2gtcmVzb3VyY2VzLWVhci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc2LDE0ICs3NiwxNCBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjUiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2VqYjMwbWRiLXJlc291cmNlcy14bWwvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2VqYjMwbWRiLXJlc291cmNlcy14bWwvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGFkZmFhODQuLjJhNjJlY2YgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9lamIzMG1kYi1yZXNvdXJjZXMteG1sL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvZWpiMzBtZGItcmVzb3VyY2VzLXhtbC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTQxLDkgKzQxLDkgQEAKICAgICAgICAgU3lzdGVtLmV4aXQoMCk7CiAgICAgfQogCi0gICAgQFJlc291cmNlKG1hcHBlZE5hbWU9ImphdmE6YXBwL2ptcy9lamJfZWpiMzBfaGVsbG9fbWRiX1FDRiIpIAorICAgIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqYXZhOmFwcC9qbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9RQ0YiKQogICAgIHByaXZhdGUgc3RhdGljIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcXVldWVDb25GYWN0b3J5OwotIAorCiAgICAgLy9UYXJnZXQgUXVldWUKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZT0iamF2YTphcHAvam1zL2VqYl9lamIzMF9oZWxsb19tZGJfSW5RdWV1ZSIpCiAgICAgcHJpdmF0ZSBzdGF0aWMgamFrYXJ0YS5qbXMuUXVldWUgbXNnQmVhblF1ZXVlOwpAQCAtNTcsNyArNTcsNyBAQAogICAgIHByaXZhdGUgUXVldWVTZW5kZXIgcXVldWVTZW5kZXI7CiAgICAgcHJpdmF0ZSBRdWV1ZVJlY2VpdmVyIHF1ZXVlUmVjZWl2ZXI7CiAgICAgcHJpdmF0ZSBpbnQgbnVtTWVzc2FnZXMgPSAyOwotICAgIAorCiAgICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIGlmKCBhcmdzLmxlbmd0aCA9PSAxICkgewogICAgICAgICAgICAgbnVtTWVzc2FnZXMgPSBuZXcgSW50ZWdlcihhcmdzWzBdKS5pbnRWYWx1ZSgpOwpAQCAtODAsMTAgKzgwLDEwIEBACiAgICAgcHVibGljIHZvaWQgc2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgcXVldWVDb24gPSBxdWV1ZUNvbkZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7CiAgICAgICAgIHF1ZXVlU2Vzc2lvbiA9IHF1ZXVlQ29uLmNyZWF0ZVF1ZXVlU2Vzc2lvbgotICAgICAgICAgICAgKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOyAKKyAgICAgICAgICAgIChmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKIAogICAgICAgICAvLyBEZXN0aW5hdGlvbiB3aWxsIGJlIHNwZWNpZmllZCB3aGVuIGFjdHVhbCBtc2cgaXMgc2VudC4KLSAgICAgICAgcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKG51bGwpOyAgICAgICAgCisgICAgICAgIHF1ZXVlU2VuZGVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVNlbmRlcihudWxsKTsKICAgICAgICAgcXVldWVSZWNlaXZlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVSZWNlaXZlcihjbGllbnRRdWV1ZSk7CiAgICAgICAgIHF1ZXVlQ29uLnN0YXJ0KCk7CiAgICAgfQpAQCAtOTgsMjggKzk4LDI4IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBzZW5kTXNncyhqYWthcnRhLmptcy5RdWV1ZSBxdWV1ZSwgaW50IG51bSkgCisgICAgcHVibGljIHZvaWQgc2VuZE1zZ3MoamFrYXJ0YS5qbXMuUXVldWUgcXVldWUsIGludCBudW0pCiAgICAgICAgIHRocm93cyBKTVNFeGNlcHRpb24gewogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVUZXh0TWVzc2FnZSgiZm9vICMiICsgKGkgKyAxKSk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGF0IHRpbWUgIiArIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKICAgICAgICAgICAgIHF1ZXVlU2VuZGVyLnNlbmQocXVldWUsIG1lc3NhZ2UpOwotCSAgICAKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKyAKKworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW50IG1lc3NhZ2UgIiArIGkgKyAiIHRvICIgKyBxdWV1ZSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBhdCB0aW1lICIgKyBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoaW50IG51bSkgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KGludCBudW0pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBzZW5kTXNncygoamFrYXJ0YS5qbXMuUXVldWUpIG1zZ0JlYW5RdWV1ZSwgbnVtKTsKLSAgICAgICAgCi0JLy9Ob3cgYXR0ZW1wdCB0byByZWNlaXZlIHJlc3BvbnNlcyB0byBvdXIgbWVzc2FnZQorCisgICAgLy9Ob3cgYXR0ZW1wdCB0byByZWNlaXZlIHJlc3BvbnNlcyB0byBvdXIgbWVzc2FnZQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIHF1ZXVlIG1lc3NhZ2UiKTsKICAgICAgICAgTWVzc2FnZSByZWN2ZG1lc3NhZ2UgPSBxdWV1ZVJlY2VpdmVyLnJlY2VpdmUoVElNRU9VVCk7CiAgICAgICAgIGlmKCByZWN2ZG1lc3NhZ2UgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgbWVzc2FnZSA6ICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgbWVzc2FnZSA6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRleHRNZXNzYWdlKXJlY3ZkbWVzc2FnZSkuZ2V0VGV4dCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGltZW91dCBhZnRlciAiICsgVElNRU9VVCArICIgc2Vjb25kcyIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2VqYjMwbWRiLXJlc291cmNlcy14bWwvZWpiL01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvZWpiMzBtZGItcmVzb3VyY2VzLXhtbC9lamIvTWVzc2FnZUJlYW4uamF2YQppbmRleCAyYjNiZDE4Li5iYzQzNmZhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvZWpiMzBtZGItcmVzb3VyY2VzLXhtbC9lamIvTWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvZWpiMzBtZGItcmVzb3VyY2VzLXhtbC9lamIvTWVzc2FnZUJlYW4uamF2YQpAQCAtMjQsOSArMjQsOSBAQAogQE1lc3NhZ2VEcml2ZW4obWFwcGVkTmFtZT0iamF2YTphcHAvam1zL2VqYl9lamIzMF9oZWxsb19tZGJfSW5RdWV1ZSIpCiAgcHVibGljIGNsYXNzIE1lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKIAotICAgIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqYXZhOmFwcC9qbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9RQ0YiKSAKKyAgICBAUmVzb3VyY2UobWFwcGVkTmFtZT0iamF2YTphcHAvam1zL2VqYl9lamIzMF9oZWxsb19tZGJfUUNGIikKICAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjRmFjdG9yeTsKLSAgICAKKwogICAgIC8vRGVzdGluYXRpb24gUXVldWUKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZT0iamF2YTphcHAvam1zL2VqYl9lamIzMF9oZWxsb19tZGJfT3V0UXVldWUiKQogICAgIFF1ZXVlIHJlcGx5UXVldWU7CkBAIC0zNSwxNCArMzUsMTQgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXNzYWdlQmVhbjo6ICBvbk1lc3NhZ2UgOjogR290IG1lc3NhZ2UhISEiICsgbWVzc2FnZSk7CiAKICAgICAgICAgUXVldWVDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBudWxsOwotCVF1ZXVlU2Vzc2lvbiBzZXNzaW9uID0gbnVsbDsKKyAgICBRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBjb25uZWN0aW9uID0gcWNGYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgc2Vzc2lvbiA9IGNvbm5lY3Rpb24uY3JlYXRlUXVldWVTZXNzaW9uKGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwogICAgICAgICAgICAgUXVldWVTZW5kZXIgc2VuZGVyID0gc2Vzc2lvbi5jcmVhdGVTZW5kZXIocmVwbHlRdWV1ZSk7CiAgICAgICAgICAgICBUZXh0TWVzc2FnZSB0bWVzc2FnZSA9IHNlc3Npb24uY3JlYXRlVGV4dE1lc3NhZ2UoKTsKLQkgICAgU3RyaW5nIG1zZ1RleHQgPSAgIlJlcGx5IGZvciAiICsgKChUZXh0TWVzc2FnZSkgbWVzc2FnZSkuZ2V0VGV4dCgpOworICAgICAgICBTdHJpbmcgbXNnVGV4dCA9ICAiUmVwbHkgZm9yICIgKyAoKFRleHRNZXNzYWdlKSBtZXNzYWdlKS5nZXRUZXh0KCk7CiAgICAgICAgICAgICB0bWVzc2FnZS5zZXRUZXh0KG1zZ1RleHQpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nICIgKyBtc2dUZXh0KTsKICAgICAgICAgICAgIHNlbmRlci5zZW5kKHRtZXNzYWdlKTsKQEAgLTUwLDkgKzUwLDkgQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewotCQlpZiAoc2Vzc2lvbiAhPSBudWxsKSB7Ci0JCSAgICBzZXNzaW9uLmNsb3NlKCk7Ci0JCX0KKyAgICAgICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgeworICAgICAgICAgICAgc2Vzc2lvbi5jbG9zZSgpOworICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYoY29ubmVjdGlvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uY2xvc2UoKTsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvZWpiMzBtZGIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9lamIzMG1kYi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA4Nzg3NzcuLmE0MjgyZWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9lamIzMG1kYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9lamIzMG1kYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYjMwLWhlbGxvLW1kYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CkBAIC0yNyw2ICsyNyw2IEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvZWpiMzBtZGIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2VqYjMwbWRiL2J1aWxkLnhtbAppbmRleCBkNDU0OWZhLi40ZTZmMGE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvZWpiMzBtZGIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9lamIzMG1kYi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkJlYW4qLmNsYXNzLCoqLypIZWxsbyoiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc1LDE0ICs3NSwxNCBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjUiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2VqYjMwbWRiL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9lamIzMG1kYi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMmM4NzIxZS4uZjI1ZTJiNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2VqYjMwbWRiL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvZWpiMzBtZGIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC00MSw5ICs0MSw5IEBACiAgICAgICAgIFN5c3RlbS5leGl0KDApOwogICAgIH0KIAotICAgIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9RQ0YiKSAKKyAgICBAUmVzb3VyY2UobWFwcGVkTmFtZT0iam1zL2VqYl9lamIzMF9oZWxsb19tZGJfUUNGIikKICAgICBwcml2YXRlIHN0YXRpYyBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHF1ZXVlQ29uRmFjdG9yeTsKLSAKKwogICAgIC8vVGFyZ2V0IFF1ZXVlCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWU9Imptcy9lamJfZWpiMzBfaGVsbG9fbWRiX0luUXVldWUiKQogICAgIHByaXZhdGUgc3RhdGljIGpha2FydGEuam1zLlF1ZXVlIG1zZ0JlYW5RdWV1ZTsKQEAgLTU3LDcgKzU3LDcgQEAKICAgICBwcml2YXRlIFF1ZXVlU2VuZGVyIHF1ZXVlU2VuZGVyOwogICAgIHByaXZhdGUgUXVldWVSZWNlaXZlciBxdWV1ZVJlY2VpdmVyOwogICAgIHByaXZhdGUgaW50IG51bU1lc3NhZ2VzID0gMjsKLSAgICAKKwogICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewogICAgICAgICBpZiggYXJncy5sZW5ndGggPT0gMSApIHsKICAgICAgICAgICAgIG51bU1lc3NhZ2VzID0gbmV3IEludGVnZXIoYXJnc1swXSkuaW50VmFsdWUoKTsKQEAgLTgwLDEwICs4MCwxMCBAQAogICAgIHB1YmxpYyB2b2lkIHNldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIHF1ZXVlQ29uID0gcXVldWVDb25GYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwogICAgICAgICBxdWV1ZVNlc3Npb24gPSBxdWV1ZUNvbi5jcmVhdGVRdWV1ZVNlc3Npb24KLSAgICAgICAgICAgIChmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsgCisgICAgICAgICAgICAoZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CiAKICAgICAgICAgLy8gRGVzdGluYXRpb24gd2lsbCBiZSBzcGVjaWZpZWQgd2hlbiBhY3R1YWwgbXNnIGlzIHNlbnQuCi0gICAgICAgIHF1ZXVlU2VuZGVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVNlbmRlcihudWxsKTsgICAgICAgIAorICAgICAgICBxdWV1ZVNlbmRlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVTZW5kZXIobnVsbCk7CiAgICAgICAgIHF1ZXVlUmVjZWl2ZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlUmVjZWl2ZXIoY2xpZW50UXVldWUpOwogICAgICAgICBxdWV1ZUNvbi5zdGFydCgpOwogICAgIH0KQEAgLTk4LDI4ICs5OCwyOCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgc2VuZE1zZ3MoamFrYXJ0YS5qbXMuUXVldWUgcXVldWUsIGludCBudW0pIAorICAgIHB1YmxpYyB2b2lkIHNlbmRNc2dzKGpha2FydGEuam1zLlF1ZXVlIHF1ZXVlLCBpbnQgbnVtKQogICAgICAgICB0aHJvd3MgSk1TRXhjZXB0aW9uIHsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7CiAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBxdWV1ZVNlc3Npb24uY3JlYXRlVGV4dE1lc3NhZ2UoImZvbyAjIiArIChpICsgMSkpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIG1lc3NhZ2UgIiArIGkgKyAiIHRvICIgKyBxdWV1ZSArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIG1lc3NhZ2UgIiArIGkgKyAiIHRvICIgKyBxdWV1ZSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBhdCB0aW1lICIgKyBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CiAgICAgICAgICAgICBxdWV1ZVNlbmRlci5zZW5kKHF1ZXVlLCBtZXNzYWdlKTsKLQkgICAgCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsgCisKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYXQgdGltZSAiICsgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KGludCBudW0pIAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdChpbnQgbnVtKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgc2VuZE1zZ3MoKGpha2FydGEuam1zLlF1ZXVlKSBtc2dCZWFuUXVldWUsIG51bSk7Ci0gICAgICAgIAotCS8vTm93IGF0dGVtcHQgdG8gcmVjZWl2ZSByZXNwb25zZXMgdG8gb3VyIG1lc3NhZ2UKKworICAgIC8vTm93IGF0dGVtcHQgdG8gcmVjZWl2ZSByZXNwb25zZXMgdG8gb3VyIG1lc3NhZ2UKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciBxdWV1ZSBtZXNzYWdlIik7CiAgICAgICAgIE1lc3NhZ2UgcmVjdmRtZXNzYWdlID0gcXVldWVSZWNlaXZlci5yZWNlaXZlKFRJTUVPVVQpOwogICAgICAgICBpZiggcmVjdmRtZXNzYWdlICE9IG51bGwgKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VpdmVkIG1lc3NhZ2UgOiAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VpdmVkIG1lc3NhZ2UgOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUZXh0TWVzc2FnZSlyZWN2ZG1lc3NhZ2UpLmdldFRleHQoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRpbWVvdXQgYWZ0ZXIgIiArIFRJTUVPVVQgKyAiIHNlY29uZHMiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9lamIzMG1kYi9lamIvTWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9lamIzMG1kYi9lamIvTWVzc2FnZUJlYW4uamF2YQppbmRleCA5MGExNGEyLi45YWVmY2FjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvZWpiMzBtZGIvZWpiL01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2VqYjMwbWRiL2VqYi9NZXNzYWdlQmVhbi5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiBATWVzc2FnZURyaXZlbihtYXBwZWROYW1lPSJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9JblF1ZXVlIikKICBwdWJsaWMgY2xhc3MgTWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogCi0gICAgQFJlc291cmNlKG1hcHBlZE5hbWU9Imptcy9lamJfZWpiMzBfaGVsbG9fbWRiX1FDRiIpIAorICAgIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9RQ0YiKQogICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNGYWN0b3J5OwotICAgIAorCiAgICAgLy9EZXN0aW5hdGlvbiBRdWV1ZQogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9PdXRRdWV1ZSIpCiAgICAgUXVldWUgcmVwbHlRdWV1ZTsKQEAgLTM1LDE0ICszNSwxNCBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1lc3NhZ2VCZWFuOjogIG9uTWVzc2FnZSA6OiBHb3QgbWVzc2FnZSEhISIgKyBtZXNzYWdlKTsKIAogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IG51bGw7Ci0JUXVldWVTZXNzaW9uIHNlc3Npb24gPSBudWxsOworICAgIFF1ZXVlU2Vzc2lvbiBzZXNzaW9uID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBxY0ZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBzZXNzaW9uID0gY29ubmVjdGlvbi5jcmVhdGVRdWV1ZVNlc3Npb24oZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CiAgICAgICAgICAgICBRdWV1ZVNlbmRlciBzZW5kZXIgPSBzZXNzaW9uLmNyZWF0ZVNlbmRlcihyZXBseVF1ZXVlKTsKICAgICAgICAgICAgIFRleHRNZXNzYWdlIHRtZXNzYWdlID0gc2Vzc2lvbi5jcmVhdGVUZXh0TWVzc2FnZSgpOwotCSAgICBTdHJpbmcgbXNnVGV4dCA9ICAiUmVwbHkgZm9yICIgKyAoKFRleHRNZXNzYWdlKSBtZXNzYWdlKS5nZXRUZXh0KCk7CisgICAgICAgIFN0cmluZyBtc2dUZXh0ID0gICJSZXBseSBmb3IgIiArICgoVGV4dE1lc3NhZ2UpIG1lc3NhZ2UpLmdldFRleHQoKTsKICAgICAgICAgICAgIHRtZXNzYWdlLnNldFRleHQobXNnVGV4dCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgIiArIG1zZ1RleHQpOwogICAgICAgICAgICAgc2VuZGVyLnNlbmQodG1lc3NhZ2UpOwpAQCAtNTAsOSArNTAsOSBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7Ci0JCWlmIChzZXNzaW9uICE9IG51bGwpIHsKLQkJICAgIHNlc3Npb24uY2xvc2UoKTsKLQkJfQorICAgICAgICBpZiAoc2Vzc2lvbiAhPSBudWxsKSB7CisgICAgICAgICAgICBzZXNzaW9uLmNsb3NlKCk7CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZihjb25uZWN0aW9uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5jbG9zZSgpOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9saWZlY3ljbGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9saWZlY3ljbGUvYnVpbGQucHJvcGVydGllcwppbmRleCA4NzE0MGI4Li45ODdmNzZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvbGlmZWN5Y2xlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2xpZmVjeWNsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Im1xLWNtdCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZXhjcHQiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWV4Y3B0Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9ImNvbS5zdW4uczFwZXFlLm1xLmNtdC5leGNwdC5jbGllbnQuU2ltcGxlTWVzc2FnZUNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJjb20uc3VuLnMxcGVxZS5tcS5jbXQuZXhjcHQuY2xpZW50LlNpbXBsZU1lc3NhZ2VDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2xpZmVjeWNsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvbGlmZWN5Y2xlL2J1aWxkLnhtbAppbmRleCA4NTkxYTA1Li5iMDMzN2I1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvbGlmZWN5Y2xlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvbGlmZWN5Y2xlL2J1aWxkLnhtbApAQCAtMzgsNyArMzgsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTAsMTcgKzUwLDE3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RhcnQtYXBwc2VydmVyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qbXMtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02OCwxOCArNjgsMTggQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8cHJvcGVydHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2Nvbm5lY3Rvci9jb25maWcvb3JhY2xlLnByb3BlcnRpZXMiLz4KICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICAgICAgIDxlbnYga2V5PSJBUFBDUEFUSCIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2xpYi9leHQvT3JhbnhvLmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIvPgogICAgICAgICAgIDxhcmcgbGluZT0iLWNsaWVudCAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KLQkgIDxhcmcgbGluZT0iLW5hbWUgJHthcHBuYW1lfUNsaWVudCIvPgotCSAgPGFyZyBsaW5lPSItdGV4dGF1dGgiLz4KLQkgIDxhcmcgbGluZT0iLXVzZXIgajJlZSIvPgotCSAgPGFyZyBsaW5lPSItcGFzc3dvcmQgajJlZSIvPgorICAgICAgPGFyZyBsaW5lPSItbmFtZSAke2FwcG5hbWV9Q2xpZW50Ii8+CisgICAgICA8YXJnIGxpbmU9Ii10ZXh0YXV0aCIvPgorICAgICAgPGFyZyBsaW5lPSItdXNlciBqMmVlIi8+CisgICAgICA8YXJnIGxpbmU9Ii1wYXNzd29yZCBqMmVlIi8+CiAgICAgICAgICAgPGFyZyBsaW5lPSIgJHtvcmFjbGVGb3JDb25uZWN0b3IuZHJpdmVyfSAke29yYWNsZUZvckNvbm5lY3Rvci51cmx9ICR7b3JhY2xlRm9yQ29ubmVjdG9yLnVzZXJ9ICR7b3JhY2xlRm9yQ29ubmVjdG9yLnB3ZH0gIi8+Ci0JICA8YXJnIGxpbmU9Ii14bWwgJHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwiLz4KKyAgICAgIDxhcmcgbGluZT0iLXhtbCAke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZy9nbGFzc2Zpc2gtYWNjLnhtbCIvPgogICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KIApAQCAtMTEwLDEwICsxMTAsMTAgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qbXMtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvbGlmZWN5Y2xlL2NsaWVudC9TaW1wbGVNZXNzYWdlQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvbGlmZWN5Y2xlL2NsaWVudC9TaW1wbGVNZXNzYWdlQ2xpZW50LmphdmEKaW5kZXggYjNiN2QzMC4uOTBiZDRhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2xpZmVjeWNsZS9jbGllbnQvU2ltcGxlTWVzc2FnZUNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9saWZlY3ljbGUvY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogCiBwdWJsaWMgY2xhc3MgU2ltcGxlTWVzc2FnZUNsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewpAQCAtMzIsMjMgKzMyLDIzIEBACiAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAKLQkgICAgQ2xhc3MuZm9yTmFtZShhcmdzWzBdKTsKLQkgICAgU3RyaW5nIHVybCA9IGFyZ3NbMV07Ci0JICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKHVybCxhcmdzWzJdLGFyZ3NbM10pOwotCSAgICBSZXN1bHRTZXQgcnMgPSBjb24uY3JlYXRlU3RhdGVtZW50KCkuZXhlY3V0ZVF1ZXJ5KCJzZWxlY3Qgc3RhdHVzIGZyb20gbGlmZWN5Y2xlX3Rlc3QxIik7Ci0JICAgIGludCBjb3VudCA9IDA7Ci0JICAgIHdoaWxlIChycy5uZXh0KCkpewotCSAgICAgICAgY291bnQgPSBycy5nZXRJbnQoMSk7Ci0JICAgIH0KKyAgICAgICAgQ2xhc3MuZm9yTmFtZShhcmdzWzBdKTsKKyAgICAgICAgU3RyaW5nIHVybCA9IGFyZ3NbMV07CisgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKHVybCxhcmdzWzJdLGFyZ3NbM10pOworICAgICAgICBSZXN1bHRTZXQgcnMgPSBjb24uY3JlYXRlU3RhdGVtZW50KCkuZXhlY3V0ZVF1ZXJ5KCJzZWxlY3Qgc3RhdHVzIGZyb20gbGlmZWN5Y2xlX3Rlc3QxIik7CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIHdoaWxlIChycy5uZXh0KCkpeworICAgICAgICAgICAgY291bnQgPSBycy5nZXRJbnQoMSk7CisgICAgICAgIH0KICAgICAgICAgICAgIHJzLmNsb3NlKCk7Ci0JICAgIGNvbi5jbG9zZSgpOwotCSAgICBpZiAoY291bnQgPT0gMCkgewotCSAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJ0ZXN0IGZhaWxlZCBiZWNhdXNlIHN0YXR1cyA6ICIgKyAwKTsKLQkgICAgfQorICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgaWYgKGNvdW50ID09IDApIHsKKyAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigidGVzdCBmYWlsZWQgYmVjYXVzZSBzdGF0dXMgOiAiICsgMCk7CisgICAgICAgIH0KICAgICAgICAgICAgIHBhc3NlZCA9IHRydWU7CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBvY2N1cnJlZDogIiArIGUudG9TdHJpbmcoKSk7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJzaW1wbGUgbGlmZWN5Y2xlIHRlc3QxIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGlmIChwYXNzZWQpIHN0YXQuYWRkU3RhdHVzKCJzaW1wbGUgbGlmZWN5Y2xlIHRlc3QxIiwgc3RhdC5QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9saWZlY3ljbGUvZWpiL1NpbXBsZU1lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvbGlmZWN5Y2xlL2VqYi9TaW1wbGVNZXNzYWdlQmVhbi5qYXZhCmluZGV4IDYwYTdlNWYuLjUyMjU4ODQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9saWZlY3ljbGUvZWpiL1NpbXBsZU1lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2xpZmVjeWNsZS9lamIvU2ltcGxlTWVzc2FnZUJlYW4uamF2YQpAQCAtMzgsMTcgKzM4LDE3IEBACiAgICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gIgogICAgICAgICAgICAgKyAiU2ltcGxlTWVzc2FnZUJlYW4uc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoKSIpOwotCXRoaXMubWRjID0gbWRjOworICAgIHRoaXMubWRjID0gbWRjOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZU1lc3NhZ2VCZWFuLmVqYkNyZWF0ZSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVNZXNzYWdlQmVhbi5lamJDcmVhdGUoKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIGluTWVzc2FnZSkgewogICAgICAgICBUZXh0TWVzc2FnZSBtc2cgPSBudWxsOwogCi0JdXBkYXRlREIoKTsKKyAgICB1cGRhdGVEQigpOwogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiAoaW5NZXNzYWdlIGluc3RhbmNlb2YgVGV4dE1lc3NhZ2UpIHsKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRlKSB7CiAgICAgICAgICAgICB0ZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUZXN0IGV4Y2VwdGlvbiIpOworICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUZXN0IGV4Y2VwdGlvbiIpOwogICAgIH0gIC8vIG9uTWVzc2FnZQogCiAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZURCKCkgewpAQCAtNzYsMTggKzc2LDE4IEBACiAgICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbih1cmwsImRidXNlciIsICJkYnBhc3N3b3JkIik7CiAgICAgICAgICAgICAvL2phdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKHVybCwiY29ubmVjdG9yIiwgImNvbm5lY3RvciIpOwogICAgICAgICAgICAgUmVzdWx0U2V0IHJzID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpLmV4ZWN1dGVRdWVyeSgic2VsZWN0IGV4Q291bnQgZnJvbSBtcV9jbXRfZXhjcHQiKTsKLQkgICAgaW50IGNvdW50ID0gMDsKLQkgICAgd2hpbGUgKHJzLm5leHQoKSl7Ci0JICAgICAgICBjb3VudCA9IHJzLmdldEludCgxKTsKLQkgICAgfQotCSAgICBycy5jbG9zZSgpOwotCSAgICBjb3VudCsrOwotCSAgICBTdHJpbmcgcXJ5ID0gInVwZGF0ZSBtcV9jbXRfZXhjcHQgc2V0IGV4Q291bnQ9IisgY291bnQgOwotCSAgICBjb24uY3JlYXRlU3RhdGVtZW50KCkuZXhlY3V0ZVVwZGF0ZShxcnkpOwotCSAgICBjb24uY2xvc2UoKTsKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIHdoaWxlIChycy5uZXh0KCkpeworICAgICAgICAgICAgY291bnQgPSBycy5nZXRJbnQoMSk7CisgICAgICAgIH0KKyAgICAgICAgcnMuY2xvc2UoKTsKKyAgICAgICAgY291bnQrKzsKKyAgICAgICAgU3RyaW5nIHFyeSA9ICJ1cGRhdGUgbXFfY210X2V4Y3B0IHNldCBleENvdW50PSIrIGNvdW50IDsKKyAgICAgICAgY29uLmNyZWF0ZVN0YXRlbWVudCgpLmV4ZWN1dGVVcGRhdGUocXJ5KTsKKyAgICAgICAgY29uLmNsb3NlKCk7CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yOiIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0JfSAKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2xpZmVjeWNsZS9zcmMvTGlmZWN5Y2xlTGlzdGVuZXJJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvbGlmZWN5Y2xlL3NyYy9MaWZlY3ljbGVMaXN0ZW5lckltcGwuamF2YQppbmRleCBjMDY2OGViLi45OTBhMjc4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvbGlmZWN5Y2xlL3NyYy9MaWZlY3ljbGVMaXN0ZW5lckltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvbGlmZWN5Y2xlL3NyYy9MaWZlY3ljbGVMaXN0ZW5lckltcGwuamF2YQpAQCAtMzQsOCArMzQsOCBAQAogICogIDMuIFJFQURZX0VWRU5UOiBTZXJ2ZXIgc3RhcnRlZCB1cCBhcHBsaWNhdGlvbnMgYW5kIGlzIHJlYWR5IHRvIHNlcnZpY2UgcmVxdWVzdHMKICAqICA0LiBTSFVURE9XTl9FVkVOVDogU2VydmVyIGlzIHNodXR0aW5nIGRvd24gYXBwbGljYXRpb25zCiAgKiAgNS4gVEVSTUlOQVRJT05fRVZFTlQ6IFNlcnZlciBpcyB0ZXJtaW5hdGluZyB0aGUgc3Vic3lzdGVtcyBhbmQgdGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQuCi0gKiAKLSAqICBJbiB0aGlzIHNhbXBsZSwgb24gU1RBUlRVUF9FVkVOVCwgYSB0aHJlYWQgaXMgc3RhcnRlZCB3aGljaCBzZW5kcyBhIHNpbXBsZSBKTVMgbWVzc2FnZSB0byAKKyAqCisgKiAgSW4gdGhpcyBzYW1wbGUsIG9uIFNUQVJUVVBfRVZFTlQsIGEgdGhyZWFkIGlzIHN0YXJ0ZWQgd2hpY2ggc2VuZHMgYSBzaW1wbGUgSk1TIG1lc3NhZ2UgdG8KICAqICBzYW1wbGVUb3BpYyBldmVyeSBtaW51dGUuIE9uIFNIVVRET1dOX0VWRU5ULCB0aGlzIHRocmVhZCBpcyBzdG9wcGVkLgogICogIDwvcD4KICAqLwpAQCAtNDcsMzcgKzQ3LDM3IEBACiAgICAgICovCiAgICAgTGlmZWN5Y2xlRXZlbnRDb250ZXh0IGN0eDsKIAotICAgIC8qKiAKLSAgICAgKiAgUmVjZWl2ZXMgYSBzZXJ2ZXIgbGlmZWN5Y2xlIGV2ZW50IAorICAgIC8qKgorICAgICAqICBSZWNlaXZlcyBhIHNlcnZlciBsaWZlY3ljbGUgZXZlbnQKICAgICAgKiAgQHBhcmFtIGV2ZW50IGFzc29jaWF0ZWQgZXZlbnQKICAgICAgKiAgQHRocm93cyA8Y29kZT5TZXJ2ZXJMaWZlY3ljbGVFeGNlcHRpb248L2NvZGU+IGZvciBleGNlcHRpb25hbCBjb25kaXRpb24uCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoTGlmZWN5Y2xlRXZlbnQgZXZlbnQpIAorICAgIHB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KExpZmVjeWNsZUV2ZW50IGV2ZW50KQogICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBTZXJ2ZXJMaWZlY3ljbGVFeGNlcHRpb24gewogCiAgICAgICAgIGN0eCA9IGV2ZW50LmdldExpZmVjeWNsZUV2ZW50Q29udGV4dCgpOwogCi0Jc3dpdGNoKGV2ZW50LmdldEV2ZW50VHlwZSgpKSB7Ci0JICAgIGNhc2UgTGlmZWN5Y2xlRXZlbnQuSU5JVF9FVkVOVDoKLQkJb25Jbml0VGFzaygpOwotCSAgCWJyZWFrOworICAgIHN3aXRjaChldmVudC5nZXRFdmVudFR5cGUoKSkgeworICAgICAgICBjYXNlIExpZmVjeWNsZUV2ZW50LklOSVRfRVZFTlQ6CisgICAgICAgIG9uSW5pdFRhc2soKTsKKyAgICAgICAgICBicmVhazsKIAotCSAgICBjYXNlIExpZmVjeWNsZUV2ZW50LlNUQVJUVVBfRVZFTlQ6Ci0JCW9uU3RhcnRUYXNrKCk7Ci0JICAJYnJlYWs7CisgICAgICAgIGNhc2UgTGlmZWN5Y2xlRXZlbnQuU1RBUlRVUF9FVkVOVDoKKyAgICAgICAgb25TdGFydFRhc2soKTsKKyAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBMaWZlY3ljbGVFdmVudC5SRUFEWV9FVkVOVDoKICAgICAgICAgICAgICAgICBvblJlYWR5VGFzaygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0JICAgIGNhc2UgTGlmZWN5Y2xlRXZlbnQuU0hVVERPV05fRVZFTlQ6Ci0JCW9uU2h1dGRvd25UYXNrKCk7Ci0JICAJYnJlYWs7CisgICAgICAgIGNhc2UgTGlmZWN5Y2xlRXZlbnQuU0hVVERPV05fRVZFTlQ6CisgICAgICAgIG9uU2h1dGRvd25UYXNrKCk7CisgICAgICAgICAgYnJlYWs7CiAKLQkgICAgY2FzZSBMaWZlY3ljbGVFdmVudC5URVJNSU5BVElPTl9FVkVOVDoKLQkJb25UZXJtaW5hdGlvblRhc2soKTsKLQkgIAlicmVhazsKLQl9CisgICAgICAgIGNhc2UgTGlmZWN5Y2xlRXZlbnQuVEVSTUlOQVRJT05fRVZFTlQ6CisgICAgICAgIG9uVGVybWluYXRpb25UYXNrKCk7CisgICAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgfQogCkBAIC05OCw0NyArOTgsNDcgQEAKICAgICAgICAgLy8gbXkgY29kZQogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb25bXSA9IG5ldyBRdWV1ZVNlc3Npb25bMTBdOwogICAgICAgICBRdWV1ZSBxdWV1ZVtdID0gbmV3IFF1ZXVlWzEwXTsKLSAgICAgICAgCisKICAgICAgICAgICAgIHRyeXsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0wOyBpIDwgMTA7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAvLyBHZXQgaW5pdGlhbCBjb250ZXh0CiAgICAgICAgICAgICAgICAgICAgIGN0eC5sb2coIkdldCBpbml0aWFsIGNvbnRleHQiKTsKICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaW5pdGlhbENvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvLyBsb29rIHVwIHRoZSBjb25uZWN0aW9uIGZhY3RvcnkgZnJvbSB0aGUgb2JqZWN0IHN0b3JlCiAgICAgICAgICAgICAgICAgICAgIGN0eC5sb2coIkxvb2tpbmcgdXAgdGhlIHF1ZXVlIGNvbm5lY3Rpb24gZmFjdG9yeSBmcm9tIEpOREkiKTsKICAgICAgICAgICAgICAgICAgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBmYWN0b3J5ID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpIGluaXRpYWxDb250ZXh0Lmxvb2t1cCgiam1zL1FDRmFjdG9yeSIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vIGxvb2sgdXAgcXVldWUgZnJvbSB0aGUgb2JqZWN0IHN0b3JlCiAgICAgICAgICAgICAgICAgICAgIGN0eC5sb2coIkNyZWF0ZSBxdWV1ZSBjb25uZWN0aW9uIik7CiAgICAgICAgICAgICAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29ubiA9IGZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgY3R4LmxvZygiQ3JlYXRlIHF1ZXVlIHNlc3Npb24iKTsKICAgICAgICAgICAgICAgICAgICAgcXNlc3Npb25baV0gPSBxY29ubi5jcmVhdGVRdWV1ZVNlc3Npb24oZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgY3R4LmxvZygiTG9va2luZyB1cCB0aGUgcXVldWUgZnJvbSBKTkRJIik7CiAgICAgICAgICAgICAgICAgICAgIHF1ZXVlW2ldID0gKFF1ZXVlKSBpbml0aWFsQ29udGV4dC5sb29rdXAoImptcy9TYW1wbGVRdWV1ZSIpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIHVwZGF0ZURCKCk7Ci0gICAgICAKKwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBlICl7CiAgICAgICAgICAgICAgICAgY3R4LmxvZyggIkV4Y2VwdGlvbiBjYXVnaHQgaW4gdGVzdCBjb2RlIiApOwogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAKLSAgICAgICAgCi0gICAgICAgIC8vIGVuZCBteSBjb2RlICAgICAgICAKLSAgICAgICAgCisKKworICAgICAgICAvLyBlbmQgbXkgY29kZQorCiAgICAgICAgIC8vIG15IGNvZGUKICAgICAgICAgLy9jcmVhdGVBY2NvdW50KCk7Ci0gICAgICAgIC8vIGVuZCBteSBjb2RlICAgICAgICAKKyAgICAgICAgLy8gZW5kIG15IGNvZGUKICAgICB9CiAKICAgICAvKioKLSAgICAgKiAgVGFza3MgdG8gYmUgY2FycmllZCBvdXQgaW4gdGhlIFJFQURZX0VWRU5ULiAKKyAgICAgKiAgVGFza3MgdG8gYmUgY2FycmllZCBvdXQgaW4gdGhlIFJFQURZX0VWRU5ULgogICAgICAqICBMb2dzIGEgbWVzc2FnZS4KICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgb25SZWFkeVRhc2soKSB7CkBAIC0xNDYsNyArMTQ2LDcgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiAgVGFza3MgdG8gYmUgY2FycmllZCBvdXQgaW4gdGhlIFNIVVRET1dOX0VWRU5ULiAKKyAgICAgKiAgVGFza3MgdG8gYmUgY2FycmllZCBvdXQgaW4gdGhlIFNIVVRET1dOX0VWRU5ULgogICAgICAqICBMb2dzIGEgbWVzc2FnZQogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBvblNodXRkb3duVGFzaygpIHsKQEAgLTE3MCw3ICsxNzAsNyBAQAogCiAKICAgICAvKioKLSAgICAgKiAgVGFza3MgdG8gYmUgY2FycmllZCBvdXQgaW4gdGhlIFRFUk1JTkFUSU9OX0VWRU5ULiAKKyAgICAgKiAgVGFza3MgdG8gYmUgY2FycmllZCBvdXQgaW4gdGhlIFRFUk1JTkFUSU9OX0VWRU5ULgogICAgICAqICBMb2cgYSBtZXNzYWdlLgogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBvblRlcm1pbmF0aW9uVGFzaygpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zaW1wbGVzdHJlc3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zaW1wbGVzdHJlc3MvYnVpbGQucHJvcGVydGllcwppbmRleCA2MWNlM2MzLi5mOTk2YjIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc2ltcGxlc3RyZXNzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3NpbXBsZXN0cmVzcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNvbm5lY3Rvci1tcSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2ltcGxlc3RyZXNzIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zaW1wbGVzdHJlc3MiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iY29tLnN1bi5zMXBlcWUuY29ubmVjdG9yLm1xLnNpbXBsZXN0cmVzcy5jbGllbnQuU2ltcGxlTWVzc2FnZUNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJjb20uc3VuLnMxcGVxZS5jb25uZWN0b3IubXEuc2ltcGxlc3RyZXNzLmNsaWVudC5TaW1wbGVNZXNzYWdlQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zaW1wbGVzdHJlc3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3NpbXBsZXN0cmVzcy9idWlsZC54bWwKaW5kZXggODIzNzhiMS4uODc0MzY5YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3NpbXBsZXN0cmVzcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3NpbXBsZXN0cmVzcy9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ3LDEzICs0NywxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qbXMtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqbXMuZmFjdG9yeS5uYW1lIgpAQCAtNzYsMTQgKzc2LDE0IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qbXMtcmVzb3VyY2UtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zaW1wbGVzdHJlc3MvY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zaW1wbGVzdHJlc3MvY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YQppbmRleCAwNTdjOTk4Li41MTBkMWYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc2ltcGxlc3RyZXNzL2NsaWVudC9TaW1wbGVNZXNzYWdlQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3NpbXBsZXN0cmVzcy9jbGllbnQvU2ltcGxlTWVzc2FnZUNsaWVudC5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiAKIHB1YmxpYyBjbGFzcyBTaW1wbGVNZXNzYWdlQ2xpZW50IGltcGxlbWVudHMgUnVubmFibGV7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgaW50IGlkID0wOwpAQCAtODQsNyArODQsNyBAQAogICAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInNpbXBsZSBzdHJlc3MgcHJvZ3JhbSIpOwogICAgICAgICAgICAgU3lzdGVtLmV4aXQoMCk7CiAgICAgICAgIH0KLSAgICAgICAgIAorCiAKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zaW1wbGVzdHJlc3MvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zaW1wbGVzdHJlc3MvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBhNDdiYzkwLi43YjkwNjk5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc2ltcGxlc3RyZXNzL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3NpbXBsZXN0cmVzcy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmptcy9jbGllbnRRdWV1ZTwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+amFrYXJ0YS5qbXMuUXVldWU8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi10eXBlPmpha2FydGEuam1zLlF1ZXVlPC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgPC9tZXNzYWdlLWRyaXZlbj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3NpbXBsZXN0cmVzcy9lamIvU2ltcGxlTWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zaW1wbGVzdHJlc3MvZWpiL1NpbXBsZU1lc3NhZ2VCZWFuLmphdmEKaW5kZXggOWQyODQ1Yi4uMGJkMTk5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3NpbXBsZXN0cmVzcy9lamIvU2ltcGxlTWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc2ltcGxlc3RyZXNzL2VqYi9TaW1wbGVNZXNzYWdlQmVhbi5qYXZhCkBAIC00MiwxMSArNDIsMTEgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dChNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiAiCiAgICAgICAgICAgICArICJTaW1wbGVNZXNzYWdlQmVhbi5zZXRNZXNzYWdlRHJpdmVuQ29udGV4dCgpIik7Ci0JdGhpcy5tZGMgPSBtZGM7CisgICAgdGhpcy5tZGMgPSBtZGM7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlTWVzc2FnZUJlYW4uZWpiQ3JlYXRlKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZU1lc3NhZ2VCZWFuLmVqYkNyZWF0ZSgpIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBqbmRpQ29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgY29ubmVjdGlvbkZhY3RvcnkgPSAoQ29ubmVjdGlvbkZhY3RvcnkpCkBAIC02NywxOCArNjcsMTggQEAKICAgICAgICAgICAgICAgICBtc2cgPSAoVGV4dE1lc3NhZ2UpIGluTWVzc2FnZTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1FU1NBR0UgQkVBTjogTWVzc2FnZSByZWNlaXZlZDogIgogICAgICAgICAgICAgICAgICAgICArIG1zZy5nZXRUZXh0KCkpOwotCQljb25uZWN0aW9uID0KLQkgICAgICAgICAgICBjb25uZWN0aW9uRmFjdG9yeS5jcmVhdGVDb25uZWN0aW9uKCk7Ci0JCXNlc3Npb24gPQotCSAgICAgICAgICAgIGNvbm5lY3Rpb24uY3JlYXRlU2Vzc2lvbihmYWxzZSwKLQkJICAgIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7Ci0JCU1lc3NhZ2VQcm9kdWNlciBtc2dQcm9kdWNlcj0gc2Vzc2lvbi5jcmVhdGVQcm9kdWNlcihxdWV1ZSk7Ci0JCVRleHRNZXNzYWdlIG1lc3NhZ2UgPSBzZXNzaW9uLmNyZWF0ZVRleHRNZXNzYWdlKCk7CisgICAgICAgIGNvbm5lY3Rpb24gPQorICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25GYWN0b3J5LmNyZWF0ZUNvbm5lY3Rpb24oKTsKKyAgICAgICAgc2Vzc2lvbiA9CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5jcmVhdGVTZXNzaW9uKGZhbHNlLAorICAgICAgICAgICAgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKKyAgICAgICAgTWVzc2FnZVByb2R1Y2VyIG1zZ1Byb2R1Y2VyPSBzZXNzaW9uLmNyZWF0ZVByb2R1Y2VyKHF1ZXVlKTsKKyAgICAgICAgVGV4dE1lc3NhZ2UgbWVzc2FnZSA9IHNlc3Npb24uY3JlYXRlVGV4dE1lc3NhZ2UoKTsKIAotCQltZXNzYWdlLnNldFRleHQoIlJlcGx5IGZvciA6ICIgKyBtc2cuZ2V0VGV4dCgpKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIG1lc3NhZ2U6ICIgKwotCQltZXNzYWdlLmdldFRleHQoKSk7Ci0JCW1zZ1Byb2R1Y2VyLnNlbmQobWVzc2FnZSk7CisgICAgICAgIG1lc3NhZ2Uuc2V0VGV4dCgiUmVwbHkgZm9yIDogIiArIG1zZy5nZXRUZXh0KCkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZTogIiArCisgICAgICAgIG1lc3NhZ2UuZ2V0VGV4dCgpKTsKKyAgICAgICAgbXNnUHJvZHVjZXIuc2VuZChtZXNzYWdlKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXNzYWdlIG9mIHdyb25nIHR5cGU6ICIKICAgICAgICAgICAgICAgICAgICAgKyBpbk1lc3NhZ2UuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3N0cmVzcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3N0cmVzcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDYxY2UzYzMuLmY5OTZiMjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zdHJlc3MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc3RyZXNzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY29ubmVjdG9yLW1xIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zaW1wbGVzdHJlc3MiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNpbXBsZXN0cmVzcyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJjb20uc3VuLnMxcGVxZS5jb25uZWN0b3IubXEuc2ltcGxlc3RyZXNzLmNsaWVudC5TaW1wbGVNZXNzYWdlQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9ImNvbS5zdW4uczFwZXFlLmNvbm5lY3Rvci5tcS5zaW1wbGVzdHJlc3MuY2xpZW50LlNpbXBsZU1lc3NhZ2VDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3N0cmVzcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc3RyZXNzL2J1aWxkLnhtbAppbmRleCBmYTc2ZjEwLi4yYTM4MTcwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc3RyZXNzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc3RyZXNzL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDcsMTMgKzQ3LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWptcy1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtam1zLXJlc291cmNlLWNvbW1vbiI+CkBAIC03MSwxNCArNzEsMTQgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktam1zLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3N0cmVzcy9jbGllbnQvU2ltcGxlTWVzc2FnZUNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3N0cmVzcy9jbGllbnQvU2ltcGxlTWVzc2FnZUNsaWVudC5qYXZhCmluZGV4IDk0MmEwZTkuLjBkODMwZDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zdHJlc3MvY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc3RyZXNzL2NsaWVudC9TaW1wbGVNZXNzYWdlQ2xpZW50LmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKICAgICBzdGF0aWMgbG9uZyBNREJfU0xFRVBfVElNRSA9IDIwMDA7CiAgICAgc3RhdGljIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBpbnQgaWQgPTA7CkBAIC00MCwxMyArNDAsMTMgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgLyoqCi0JICogU3RhcnQgdGhlIHRocmVhZHMgdGhhdCB3aWxsIHNlbmQgbWVzc2FnZXMgdG8gTURCCi0JICovCisgICAgICogU3RhcnQgdGhlIHRocmVhZHMgdGhhdCB3aWxsIHNlbmQgbWVzc2FnZXMgdG8gTURCCisgICAgICovCiAgICAgICAgIEFycmF5TGlzdCBhbCA9IG5ldyBBcnJheUxpc3QoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGZvciAoaW50IGkgPTA7IGkgPCBOVU1fQ0xJRU5UUzsgaSsrKSB7CiAgICAgICAgICAgICAgICAgVGhyZWFkIGNsaWVudCA9IG5ldyBUaHJlYWQobmV3IFNpbXBsZU1lc3NhZ2VDbGllbnQoaSkpOwotCQlhbC5hZGQoY2xpZW50KTsKKyAgICAgICAgYWwuYWRkKGNsaWVudCk7CiAgICAgICAgICAgICAgICAgY2xpZW50LnN0YXJ0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CkBAIC03Niw2NiArNzYsNjYgQEAKICAgICAgICAgICAgIHF1ZXVlQ29ubmVjdGlvbi5zdGFydCgpOwogICAgICAgICAgICAgcXVldWVSZWNlaXZlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVSZWNlaXZlcihxdWV1ZSk7CiAKLQkgICAgSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOworICAgICAgICBIYXNoTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7CiAKICAgICAgICAgICAgIGxvbmcgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgICAgICBib29sZWFuIHBhc3MgPSB0cnVlOwotCSAgICAvLwotCSAgICAvLyBSZWNlaXZlcyBhbGwgdGhlIG1lc3NhZ2VzIGFuZCBrZWVwIGluIHRoZSBkYXRhIHN0cnVjdHVyZQotCSAgICAvLworICAgICAgICAvLworICAgICAgICAvLyBSZWNlaXZlcyBhbGwgdGhlIG1lc3NhZ2VzIGFuZCBrZWVwIGluIHRoZSBkYXRhIHN0cnVjdHVyZQorICAgICAgICAvLwogICAgICAgICAgICAgZm9yIChpbnQgaSA9MDsgaSA8IE5VTV9DTElFTlRTICogTlVNX0NZQ0xFUzsgaSsrKSB7CiAgICAgICAgICAgICAgICAgVGV4dE1lc3NhZ2UgbXNnID0gKFRleHRNZXNzYWdlKSBxdWV1ZVJlY2VpdmVyLnJlY2VpdmUoVElNRV9PVVQpOwotCQlJbnRlZ2VyIGlkID0gbmV3IEludGVnZXIobXNnLmdldEludFByb3BlcnR5KCJyZXBseWlkIikpOwotCQlpZiAobWFwLmNvbnRhaW5zS2V5KGlkKSkgewotCQkgICAgcGFzcyA9IGZhbHNlOwotCQkgICAgZGVidWcoIkR1cGxpY2F0ZSA6IiArIGlkKTsKLQkJfQotCQltYXAucHV0KGlkLCBtc2cuZ2V0VGV4dCgpKTsKKyAgICAgICAgSW50ZWdlciBpZCA9IG5ldyBJbnRlZ2VyKG1zZy5nZXRJbnRQcm9wZXJ0eSgicmVwbHlpZCIpKTsKKyAgICAgICAgaWYgKG1hcC5jb250YWluc0tleShpZCkpIHsKKyAgICAgICAgICAgIHBhc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIGRlYnVnKCJEdXBsaWNhdGUgOiIgKyBpZCk7CisgICAgICAgIH0KKyAgICAgICAgbWFwLnB1dChpZCwgbXNnLmdldFRleHQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsb25nIHRvdGFsVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VpdmVkIGFsbCBtZXNzYWdlcyBpbiA6IiArIHRvdGFsVGltZSArICIgbWlsbGlzZWNvbmRzIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgYWxsIG1lc3NhZ2VzIGluIDoiICsgdG90YWxUaW1lICsgIiBtaWxsaXNlY29uZHMiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKIAotICAgICAgICAgICAgLy8gCi0JICAgIC8vIE5vdyBleGFtaW5lIHRoZSByZWNlaXZlZCBkYXRhCi0JICAgIC8vCisgICAgICAgICAgICAvLworICAgICAgICAvLyBOb3cgZXhhbWluZSB0aGUgcmVjZWl2ZWQgZGF0YQorICAgICAgICAvLwogICAgICAgICAgICAgZm9yIChpbnQgaSA9MDsgaSA8IE5VTV9DTElFTlRTICogTlVNX0NZQ0xFUzsgaSsrKSB7Ci0JICAgICAgICBTdHJpbmcgcmVwbHkgPSAoU3RyaW5nKSBtYXAuZ2V0KG5ldyBJbnRlZ2VyKGkpKTsKLQkJaWYgKCFyZXBseS5lcXVhbHMoIlJFUExJRUQ6Q0xJRU5UIikpIHsKLQkJICAgcGFzcyA9IGZhbHNlOwotCQl9Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWVpdmVkIDoiICsgaSArICI6IiArIHJlcGx5KTsKLQkgICAgfQotICAgICAgICAgICAgCi0JICAgIC8vIFRyeSB0byByZWNlaXZlIG9uZSBtb3JlIG1lc3NhZ2UgdGhhbiBleHBlY3RlZC4KKyAgICAgICAgICAgIFN0cmluZyByZXBseSA9IChTdHJpbmcpIG1hcC5nZXQobmV3IEludGVnZXIoaSkpOworICAgICAgICBpZiAoIXJlcGx5LmVxdWFscygiUkVQTElFRDpDTElFTlQiKSkgeworICAgICAgICAgICBwYXNzID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNlZWl2ZWQgOiIgKyBpICsgIjoiICsgcmVwbHkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVHJ5IHRvIHJlY2VpdmUgb25lIG1vcmUgbWVzc2FnZSB0aGFuIGV4cGVjdGVkLgogICAgICAgICAgICAgVGV4dE1lc3NhZ2UgbXNnID0gKFRleHRNZXNzYWdlKSBxdWV1ZVJlY2VpdmVyLnJlY2VpdmUoVElNRV9PVVQpOwogCi0JICAgIGlmIChtc2cgIT0gbnVsbCkgewotCSAgICAgICBwYXNzID0gZmFsc2U7Ci0JICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgbW9yZSB0aGFuIGV4cGVjdGVkIG51bWJlciBvZiBtZXNzYWdlcyA6IiArIG1zZy5nZXRUZXh0KCkpOwotCSAgICB9CisgICAgICAgIGlmIChtc2cgIT0gbnVsbCkgeworICAgICAgICAgICBwYXNzID0gZmFsc2U7CisgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgbW9yZSB0aGFuIGV4cGVjdGVkIG51bWJlciBvZiBtZXNzYWdlcyA6IiArIG1zZy5nZXRUZXh0KCkpOworICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChwYXNzKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkNvbmN1cnJlbnQgbWVzc2FnZSBkZWxpdmVyeSB0ZXN0Iiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkNvbmN1cnJlbnQgbWVzc2FnZSBkZWxpdmVyeSB0ZXN0Iiwgc3RhdC5GQUlMKTsKLQkgICAgfQorICAgICAgICB9CiAgICAgICAgIH1jYXRjaCAoVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiQ29uY3VycmVudCBtZXNzYWdlIGRlbGl2ZXJ5IHRlc3QiLCBzdGF0LkZBSUwpOwogICAgICAgICB9ZmluYWxseSB7CiAgICAgICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiQ29uY3VycmVudCBtZXNzYWdlIGRlbGl2ZXJ5IHRlc3QiKTsKLQkgICAgZm9yIChpbnQgaT0wOyBpIDxhbC5zaXplKCk7IGkrKykgewotCSAgICAgICBUaHJlYWQgY2xpZW50ID0gKFRocmVhZCkgYWwuZ2V0KGkpOwotCSAgICAgICB0cnkgewotCSAgICAgICAgICBjbGllbnQuam9pbigpOwotCSAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZS5nZXRNZXNzYWdlKCkpOwotCSAgICAgICB9Ci0JICAgIH0KKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDxhbC5zaXplKCk7IGkrKykgeworICAgICAgICAgICBUaHJlYWQgY2xpZW50ID0gKFRocmVhZCkgYWwuZ2V0KGkpOworICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICBjbGllbnQuam9pbigpOworICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgICAgIFN5c3RlbS5leGl0KDApOwogICAgICAgICB9Ci0gICAgICAgICAKKwogCiAgICAgfQogCkBAIC0xNTYsOSArMTU2LDkgQEAKICAgICAgICAgICAgICAgICAoImphdmE6Y29tcC9lbnYvam1zL1FDRmFjdG9yeSIpOwogICAgICAgICAgICAgcXVldWUgPSAoUXVldWUpIGpuZGlDb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvU2FtcGxlUXVldWUiKTsKIAotCSAgICBpbnQgc3RhcnRJZCA9IGlkICogTlVNX0NZQ0xFUzsKLQkgICAgaW50IGVuZElkID0gKGlkICogTlVNX0NZQ0xFUykgKyBOVU1fQ1lDTEVTOwotCSAgICBmb3IgKGludCBpPSBzdGFydElkO2kgPCBlbmRJZDsgaSArKykgeworICAgICAgICBpbnQgc3RhcnRJZCA9IGlkICogTlVNX0NZQ0xFUzsKKyAgICAgICAgaW50IGVuZElkID0gKGlkICogTlVNX0NZQ0xFUykgKyBOVU1fQ1lDTEVTOworICAgICAgICBmb3IgKGludCBpPSBzdGFydElkO2kgPCBlbmRJZDsgaSArKykgewogICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgIHF1ZXVlQ29ubmVjdGlvbiA9CiAgICAgICAgICAgICAgICAgICAgIHF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7CkBAIC0xNjksMTAgKzE2OSwxMCBAQAogICAgICAgICAgICAgICAgICAgICBxdWV1ZVNlbmRlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVTZW5kZXIocXVldWUpOwogICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gcXVldWVTZXNzaW9uLmNyZWF0ZVRleHRNZXNzYWdlKCk7CiAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V0VGV4dCgiQ0xJRU5UIik7Ci0JICAgICAgICAgICAgbWVzc2FnZS5zZXRJbnRQcm9wZXJ0eSgiaWQiLGkpOwotCSAgICAgICAgICAgIG1lc3NhZ2Uuc2V0TG9uZ1Byb3BlcnR5KCJzbGVlcHRpbWUiLE1EQl9TTEVFUF9USU1FKTsKKyAgICAgICAgICAgICAgICBtZXNzYWdlLnNldEludFByb3BlcnR5KCJpZCIsaSk7CisgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXRMb25nUHJvcGVydHkoInNsZWVwdGltZSIsTURCX1NMRUVQX1RJTUUpOwogICAgICAgICAgICAgICAgICAgICBxdWV1ZVNlbmRlci5zZW5kKG1lc3NhZ2UpOwotCQkgICAgZGVidWcoIlNlbmQgdGhlIG1lc3NhZ2UgOiIgKyBtZXNzYWdlLmdldEludFByb3BlcnR5KCJpZCIpICsgIjoiICsgbWVzc2FnZS5nZXRUZXh0KCkpOworICAgICAgICAgICAgZGVidWcoIlNlbmQgdGhlIG1lc3NhZ2UgOiIgKyBtZXNzYWdlLmdldEludFByb3BlcnR5KCJpZCIpICsgIjoiICsgbWVzc2FnZS5nZXRUZXh0KCkpOwogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIG9jY3VycmVkOiAiICsgZS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewpAQCAtMTkwLDggKzE5MCw4IEBACiAKICAgICBzdGF0aWMgdm9pZCBkZWJ1ZyhTdHJpbmcgbXNnKSB7CiAgICAgICAgIGlmIChkZWJ1ZykgewotCSAgIFN5c3RlbS5vdXQucHJpbnRsbihtc2cpOwotCX0KKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obXNnKTsKKyAgICB9CiAgICAgfQogfSAvLyBjbGFzcwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc3RyZXNzL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc3RyZXNzL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggMzgxMWEyOS4uZGJhMjIyYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3N0cmVzcy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zdHJlc3MvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtMzcsNyArMzcsNyBAQAogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5qbXMvY2xpZW50UXVldWU8L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8cmVzb3VyY2UtZW52LXJlZi10eXBlPmpha2FydGEuam1zLlF1ZXVlPC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CisgICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5qYWthcnRhLmptcy5RdWV1ZTwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgIDwvbWVzc2FnZS1kcml2ZW4+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zdHJlc3MvZWpiL1NpbXBsZU1lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc3RyZXNzL2VqYi9TaW1wbGVNZXNzYWdlQmVhbi5qYXZhCmluZGV4IDU2NDViOTEuLmMzM2I3NTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zdHJlc3MvZWpiL1NpbXBsZU1lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3N0cmVzcy9lamIvU2ltcGxlTWVzc2FnZUJlYW4uamF2YQpAQCAtNDIsMTEgKzQyLDExIEBACiAgICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gIgogICAgICAgICAgICAgKyAiU2ltcGxlTWVzc2FnZUJlYW4uc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoKSIpOwotCXRoaXMubWRjID0gbWRjOworICAgIHRoaXMubWRjID0gbWRjOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZU1lc3NhZ2VCZWFuLmVqYkNyZWF0ZSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVNZXNzYWdlQmVhbi5lamJDcmVhdGUoKSIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgam5kaUNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIHF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKQEAgLTY3LDIyICs2NywyMiBAQAogICAgICAgICAgICAgICAgIG1zZyA9IChUZXh0TWVzc2FnZSkgaW5NZXNzYWdlOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTUVTU0FHRSBCRUFOOiBNZXNzYWdlIHJlY2VpdmVkOiAiCiAgICAgICAgICAgICAgICAgICAgICsgbXNnLmdldFRleHQoKSk7Ci0JCWxvbmcgc2xlZXBUaW1lID0gbXNnLmdldExvbmdQcm9wZXJ0eSgic2xlZXB0aW1lIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiU2xlZXBpbmcgZm9yIDogIiArIHNsZWVwVGltZSArICIgbWlsbGkgc2Vjb25kcyAiKTsKLQkJVGhyZWFkLnNsZWVwKHNsZWVwVGltZSk7Ci0JCXF1ZXVlQ29ubmVjdGlvbiA9Ci0JICAgICAgICAgICAgcXVldWVDb25uZWN0aW9uRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKLQkJcXVldWVTZXNzaW9uID0KLQkgICAgICAgICAgICBxdWV1ZUNvbm5lY3Rpb24uY3JlYXRlUXVldWVTZXNzaW9uKGZhbHNlLAotCQkgICAgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKLQkJcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKHF1ZXVlKTsKLQkJVGV4dE1lc3NhZ2UgbWVzc2FnZSA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVUZXh0TWVzc2FnZSgpOworICAgICAgICBsb25nIHNsZWVwVGltZSA9IG1zZy5nZXRMb25nUHJvcGVydHkoInNsZWVwdGltZSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwaW5nIGZvciA6ICIgKyBzbGVlcFRpbWUgKyAiIG1pbGxpIHNlY29uZHMgIik7CisgICAgICAgIFRocmVhZC5zbGVlcChzbGVlcFRpbWUpOworICAgICAgICBxdWV1ZUNvbm5lY3Rpb24gPQorICAgICAgICAgICAgICAgIHF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7CisgICAgICAgIHF1ZXVlU2Vzc2lvbiA9CisgICAgICAgICAgICAgICAgcXVldWVDb25uZWN0aW9uLmNyZWF0ZVF1ZXVlU2Vzc2lvbihmYWxzZSwKKyAgICAgICAgICAgIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CisgICAgICAgIHF1ZXVlU2VuZGVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVNlbmRlcihxdWV1ZSk7CisgICAgICAgIFRleHRNZXNzYWdlIG1lc3NhZ2UgPSBxdWV1ZVNlc3Npb24uY3JlYXRlVGV4dE1lc3NhZ2UoKTsKIAotCQltZXNzYWdlLnNldFRleHQoIlJFUExJRUQ6IiArIG1zZy5nZXRUZXh0KCkpOwotCQltZXNzYWdlLnNldEludFByb3BlcnR5KCJyZXBseWlkIiwgbXNnLmdldEludFByb3BlcnR5KCJpZCIpICk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlOiAiICsKLQkJbWVzc2FnZS5nZXRUZXh0KCkpOwotCQlxdWV1ZVNlbmRlci5zZW5kKG1lc3NhZ2UpOworICAgICAgICBtZXNzYWdlLnNldFRleHQoIlJFUExJRUQ6IiArIG1zZy5nZXRUZXh0KCkpOworICAgICAgICBtZXNzYWdlLnNldEludFByb3BlcnR5KCJyZXBseWlkIiwgbXNnLmdldEludFByb3BlcnR5KCJpZCIpICk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlOiAiICsKKyAgICAgICAgbWVzc2FnZS5nZXRUZXh0KCkpOworICAgICAgICBxdWV1ZVNlbmRlci5zZW5kKG1lc3NhZ2UpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1lc3NhZ2Ugb2Ygd3JvbmcgdHlwZTogIgogICAgICAgICAgICAgICAgICAgICArIGluTWVzc2FnZS5nZXRDbGFzcygpLmdldE5hbWUoKSk7CkBAIC05MiwxMiArOTIsMTIgQEAKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRlKSB7CiAgICAgICAgICAgICB0ZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfSBmaW5hbGx5IHsKLQkgICAgdHJ5IHsKLQkgICAgICAgIHF1ZXVlU2Vzc2lvbi5jbG9zZSgpOwotCQlxdWV1ZUNvbm5lY3Rpb24uY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgfQotCX0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHF1ZXVlU2Vzc2lvbi5jbG9zZSgpOworICAgICAgICBxdWV1ZUNvbm5lY3Rpb24uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgfQorICAgIH0KICAgICB9ICAvLyBvbk1lc3NhZ2UKIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS92YXJob21lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvdmFyaG9tZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDYxY2UzYzMuLmY5OTZiMjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS92YXJob21lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3ZhcmhvbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjb25uZWN0b3ItbXEiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNpbXBsZXN0cmVzcyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2ltcGxlc3RyZXNzIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9ImNvbS5zdW4uczFwZXFlLmNvbm5lY3Rvci5tcS5zaW1wbGVzdHJlc3MuY2xpZW50LlNpbXBsZU1lc3NhZ2VDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iY29tLnN1bi5zMXBlcWUuY29ubmVjdG9yLm1xLnNpbXBsZXN0cmVzcy5jbGllbnQuU2ltcGxlTWVzc2FnZUNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvdmFyaG9tZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvdmFyaG9tZS9idWlsZC54bWwKaW5kZXggOGZkNGI2Zi4uNDc2YmFhNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3ZhcmhvbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS92YXJob21lL2J1aWxkLnhtbApAQCAtMzcsNyArMzcsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDksMTMgKzQ5LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWptcy1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtam1zLXJlc291cmNlLWNvbW1vbiI+CkBAIC03MywxNiArNzMsMTYgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InRlc3Qtc2VuZC1yZWNlaXZlLW1lc3NhZ2UiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ0ZXN0LXNlbmQtcmVjcmVhdGUtZmFpbCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InRlc3Qtc2VuZC1jcmVhdGUtbmV3ZG9tYWluIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qbXMtY29tbW9uIi8+CkBAIC0xMDMsNjcgKzEwMyw2NyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InVzZXJQYXNzd29yZCIgdmFsdWU9InBhc3N3b3JkMSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imptc1NlcnZlciIgdmFsdWU9IiIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InZhcmRpciIgdmFsdWU9IiIvPgotCTwvYW50Y2FsbD4KKyAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIAotCSAgICAgICAgICAgdmFsdWU9IlRlc3ROZXdVc2VyIFNFTkRSRUNFSVZFIFZFUklGWSB1c2VyMSBwYXNzd29yZDEiLz4KLQk8L2FudGNhbGw+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiCisgICAgICAgICAgICAgICB2YWx1ZT0iVGVzdE5ld1VzZXIgU0VORFJFQ0VJVkUgVkVSSUZZIHVzZXIxIHBhc3N3b3JkMSIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idGVzdC1zZW5kLXJlY3JlYXRlLWZhaWwiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiAKLQkgICAgICAgICAgIHZhbHVlPSJTZXR0aW5ndXBMb29zZU1lc3NhZ2VPblJlY3JlYXRlIFNFTkQgTk9WRVJJRlkgdXNlcjEgcGFzc3dvcmQxIi8+Ci0JPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0ic3RhcnQtY2xlYW4tc2VydmVyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgotCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIgorICAgICAgICAgICAgICAgdmFsdWU9IlNldHRpbmd1cExvb3NlTWVzc2FnZU9uUmVjcmVhdGUgU0VORCBOT1ZFUklGWSB1c2VyMSBwYXNzd29yZDEiLz4KKyAgICA8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydC1jbGVhbi1zZXJ2ZXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWptcy11c2VyIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ1c2VyTmFtZSIgdmFsdWU9InVzZXIxIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idXNlclBhc3N3b3JkIiB2YWx1ZT0icGFzc3dvcmQxIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iam1zU2VydmVyIiB2YWx1ZT0iIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idmFyZGlyIiB2YWx1ZT0iIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iRkFJTE9ORVJSIiB2YWx1ZT0idHJ1ZSIvPgotCTwvYW50Y2FsbD4KKyAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIAotCSAgICAgICAgICAgdmFsdWU9IlRlc3RMb29zZU1lc3NhZ2VPblJlY3JlYXRlIFJFQ0VJVkUgTk9WRVJJRlkgdXNlcjEgcGFzc3dvcmQxIi8+Ci0JPC9hbnRjYWxsPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIgorICAgICAgICAgICAgICAgdmFsdWU9IlRlc3RMb29zZU1lc3NhZ2VPblJlY3JlYXRlIFJFQ0VJVkUgTk9WRVJJRlkgdXNlcjEgcGFzc3dvcmQxIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0idGVzdC1zZW5kLWNyZWF0ZS1uZXdkb21haW4iPgotCTxhbnRjYWxsIHRhcmdldD0ic3RvcERvbWFpbiIvPgotCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWRvbWFpbi1jb21tb24iPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic3RvcERvbWFpbiIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWRvbWFpbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmRvbWFpbiIgdmFsdWU9ImRvbWFpbjIiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJodHRwLnBvcnQiIHZhbHVlPSI0ODA4MCIvPgotCSAgICA8cGFyYW0gbmFtZT0ib3JiLnBvcnQiIHZhbHVlPSI0MzcwMCIvPgkJCQotCTwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0RG9tYWluIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9yYi5wb3J0IiB2YWx1ZT0iNDM3MDAiLz4KKyAgICA8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydERvbWFpbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uZG9tYWluIiB2YWx1ZT0iZG9tYWluMiIvPgotCTwvYW50Y2FsbD4KKyAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWptcy11c2VyIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ1c2VyTmFtZSIgdmFsdWU9InVzZXIxIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idXNlclBhc3N3b3JkIiB2YWx1ZT0icGFzc3dvcmQxIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iam1zU2VydmVyIiB2YWx1ZT0iIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idmFyZGlyIiB2YWx1ZT0iLXZhcmhvbWUgJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjIvaW1xIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iRkFJTE9ORVJSIiB2YWx1ZT0idHJ1ZSIvPgotCTwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+CisgICAgPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgCi0JICAgICAgICAgICB2YWx1ZT0iU2VuZE1lc3NhZ2VUb05ld0RvbWFpbk1RU3RvcmUgU0VORCBOT1ZFUklGWSB1c2VyMSBwYXNzd29yZDEiLz4KLQk8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiCisgICAgICAgICAgICAgICB2YWx1ZT0iU2VuZE1lc3NhZ2VUb05ld0RvbWFpbk1RU3RvcmUgU0VORCBOT1ZFUklGWSB1c2VyMSBwYXNzd29yZDEiLz4KKyAgICA8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIAotCSAgICAgICAgICAgdmFsdWU9IlRlc3RSZWNlaXZlTmV3RG9tYWluTVFTdG9yZSBSRUNFSVZFIFZFUklGWSB1c2VyMSBwYXNzd29yZDEiLz4KLQk8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzdG9wRG9tYWluIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIKKyAgICAgICAgICAgICAgIHZhbHVlPSJUZXN0UmVjZWl2ZU5ld0RvbWFpbk1RU3RvcmUgUkVDRUlWRSBWRVJJRlkgdXNlcjEgcGFzc3dvcmQxIi8+CisgICAgPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic3RvcERvbWFpbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uZG9tYWluIiB2YWx1ZT0iZG9tYWluMiIvPgotCTwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1kb21haW4tY29tbW9uIj4KKyAgICA8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtZG9tYWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uZG9tYWluIiB2YWx1ZT0iZG9tYWluMiIvPgotCTwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0RG9tYWluIi8+CisgICAgPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnREb21haW4iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWptcy11c2VyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvdmFyaG9tZS9jbGllbnQvU2ltcGxlTWVzc2FnZUNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3ZhcmhvbWUvY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YQppbmRleCA5NjdjOGQzLi5kNWIyMzIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvdmFyaG9tZS9jbGllbnQvU2ltcGxlTWVzc2FnZUNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS92YXJob21lL2NsaWVudC9TaW1wbGVNZXNzYWdlQ2xpZW50LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKICAgICBzdGF0aWMgU3RyaW5nIHVzZXIgPSBudWxsOwogICAgIHN0YXRpYyBTdHJpbmcgcGFzc3dvcmQgPSBudWxsOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIGludCBpZCA9MDsKQEAgLTQwLDM4ICs0MCwzOCBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFyZ3MpOwogCi0JLy9pZiAoYXJncy5sZW5ndGggPjApIHJldHVybjsKLQkKLQlTdHJpbmcgdGVzdElkID0gYXJnc1swXTsKLQlTdHJpbmcgdGVzdFN0cmluZyA9IGFyZ3NbMV07Ci0JU3RyaW5nIHZlcmlmeSA9IGFyZ3NbMl07Ci0JdXNlciA9IGFyZ3NbM107Ci0JcGFzc3dvcmQgPSBhcmdzWzRdOworICAgIC8vaWYgKGFyZ3MubGVuZ3RoID4wKSByZXR1cm47CisKKyAgICBTdHJpbmcgdGVzdElkID0gYXJnc1swXTsKKyAgICBTdHJpbmcgdGVzdFN0cmluZyA9IGFyZ3NbMV07CisgICAgU3RyaW5nIHZlcmlmeSA9IGFyZ3NbMl07CisgICAgdXNlciA9IGFyZ3NbM107CisgICAgcGFzc3dvcmQgPSBhcmdzWzRdOwogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBib29sZWFuIHBhc3MgPSB0cnVlOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJ1bm5pbmcgdGhlIHRlc3QgOiAiICsgdGVzdElkKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSdW5uaW5nIHRoZSB0ZXN0IDogIiArIHRlc3RJZCk7CiAKLQkgICAgaWYgKHRlc3RTdHJpbmcuc3RhcnRzV2l0aCgiU0VORCIpKSB7IAotCSAgICAgICAgc2VuZE1lc3NhZ2UoKTsKLQkgICAgfQotCSAgICAKLQkgICAgU3RyaW5nIG91dHB1dCA9IG51bGw7Ci0JICAgIGlmICh0ZXN0U3RyaW5nLmVuZHNXaXRoKCJSRUNFSVZFIikpIHsKLQkgICAgICAgIG91dHB1dCA9IHJlY2VpdmVNZXNzYWdlKCk7Ci0JICAgIH0KKyAgICAgICAgaWYgKHRlc3RTdHJpbmcuc3RhcnRzV2l0aCgiU0VORCIpKSB7CisgICAgICAgICAgICBzZW5kTWVzc2FnZSgpOworICAgICAgICB9CiAKLQkgICAgaWYgKHZlcmlmeS5lcXVhbHMoIlZFUklGWSIpKSB7Ci0JICAgICAgICBwYXNzID0gb3V0cHV0LmVxdWFscygiUkVQTElFRDpDTElFTlQiKTsKLQkgICAgfSBlbHNlIHsKLQkgICAgICAgIHBhc3MgPSAob3V0cHV0ID09IG51bGwpOwotCSAgICB9CisgICAgICAgIFN0cmluZyBvdXRwdXQgPSBudWxsOworICAgICAgICBpZiAodGVzdFN0cmluZy5lbmRzV2l0aCgiUkVDRUlWRSIpKSB7CisgICAgICAgICAgICBvdXRwdXQgPSByZWNlaXZlTWVzc2FnZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHZlcmlmeS5lcXVhbHMoIlZFUklGWSIpKSB7CisgICAgICAgICAgICBwYXNzID0gb3V0cHV0LmVxdWFscygiUkVQTElFRDpDTElFTlQiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBhc3MgPSAob3V0cHV0ID09IG51bGwpOworICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChwYXNzKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7Ci0JICAgIH0KKyAgICAgICAgfQogICAgICAgICB9Y2F0Y2ggKFRocm93YWJsZSB0KSB7CiAgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwpAQCAtNzksNyArNzksNyBAQAogICAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdElkKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KDApOwogICAgICAgICB9Ci0gICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHJlY2VpdmVNZXNzYWdlKCkgewpAQCAtMTA2LDE2ICsxMDYsMTYgQEAKICAgICAgICAgICAgIHF1ZXVlQ29ubmVjdGlvbi5zdGFydCgpOwogICAgICAgICAgICAgcXVldWVSZWNlaXZlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVSZWNlaXZlcihxdWV1ZSk7CiAKLQkgICAgSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOworICAgICAgICBIYXNoTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7CiAKICAgICAgICAgICAgIGxvbmcgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgICAgICBib29sZWFuIHBhc3MgPSB0cnVlOwogICAgICAgICAgICAgVGV4dE1lc3NhZ2UgbXNnID0gKFRleHRNZXNzYWdlKSBxdWV1ZVJlY2VpdmVyLnJlY2VpdmUoVElNRV9PVVQpOwotCSAgICBpZiAobXNnID09IG51bGwpIHsKLQkgICAgICAgcmV0dXJuIG51bGw7Ci0JICAgIH0KLQkgICAgSW50ZWdlciBpZCA9IG5ldyBJbnRlZ2VyKG1zZy5nZXRJbnRQcm9wZXJ0eSgicmVwbHlpZCIpKTsKLQkgICAgcmV0dXJuIG1zZy5nZXRUZXh0KCk7CisgICAgICAgIGlmIChtc2cgPT0gbnVsbCkgeworICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBJbnRlZ2VyIGlkID0gbmV3IEludGVnZXIobXNnLmdldEludFByb3BlcnR5KCJyZXBseWlkIikpOworICAgICAgICByZXR1cm4gbXNnLmdldFRleHQoKTsKICAgICAgICAgfWNhdGNoIChUaHJvd2FibGUgdCkgewogICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfWZpbmFsbHkgewpAQCAtMTUzLDkgKzE1Myw5IEBACiAgICAgICAgICAgICBxdWV1ZVNlbmRlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVTZW5kZXIocXVldWUpOwogICAgICAgICAgICAgbWVzc2FnZSA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVUZXh0TWVzc2FnZSgpOwogICAgICAgICAgICAgbWVzc2FnZS5zZXRUZXh0KCJDTElFTlQiKTsKLQkgICAgbWVzc2FnZS5zZXRJbnRQcm9wZXJ0eSgiaWQiLDEpOworICAgICAgICBtZXNzYWdlLnNldEludFByb3BlcnR5KCJpZCIsMSk7CiAgICAgICAgICAgICBxdWV1ZVNlbmRlci5zZW5kKG1lc3NhZ2UpOwotCSAgICBkZWJ1ZygiU2VuZCB0aGUgbWVzc2FnZSA6IiArIG1lc3NhZ2UuZ2V0SW50UHJvcGVydHkoImlkIikgKyAiOiIgKyBtZXNzYWdlLmdldFRleHQoKSk7CisgICAgICAgIGRlYnVnKCJTZW5kIHRoZSBtZXNzYWdlIDoiICsgbWVzc2FnZS5nZXRJbnRQcm9wZXJ0eSgiaWQiKSArICI6IiArIG1lc3NhZ2UuZ2V0VGV4dCgpKTsKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIG9jY3VycmVkOiAiICsgZS50b1N0cmluZygpKTsKICAgICAgICAgfSBmaW5hbGx5IHsKQEAgLTE2OSw4ICsxNjksOCBAQAogCiAgICAgc3RhdGljIHZvaWQgZGVidWcoU3RyaW5nIG1zZykgewogICAgICAgICBpZiAoZGVidWcpIHsKLQkgICBTeXN0ZW0ub3V0LnByaW50bG4obXNnKTsKLQl9CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1zZyk7CisgICAgfQogICAgIH0KIH0gLy8gY2xhc3MKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3ZhcmhvbWUvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS92YXJob21lL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggMzgxMWEyOS4uZGJhMjIyYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3ZhcmhvbWUvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvdmFyaG9tZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmptcy9jbGllbnRRdWV1ZTwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+amFrYXJ0YS5qbXMuUXVldWU8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi10eXBlPmpha2FydGEuam1zLlF1ZXVlPC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgPC9tZXNzYWdlLWRyaXZlbj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3ZhcmhvbWUvZWpiL1NpbXBsZU1lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvdmFyaG9tZS9lamIvU2ltcGxlTWVzc2FnZUJlYW4uamF2YQppbmRleCAwN2IzMTg0Li5hODNlYzU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvdmFyaG9tZS9lamIvU2ltcGxlTWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvdmFyaG9tZS9lamIvU2ltcGxlTWVzc2FnZUJlYW4uamF2YQpAQCAtNDIsMTEgKzQyLDExIEBACiAgICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gIgogICAgICAgICAgICAgKyAiU2ltcGxlTWVzc2FnZUJlYW4uc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoKSIpOwotCXRoaXMubWRjID0gbWRjOworICAgIHRoaXMubWRjID0gbWRjOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZU1lc3NhZ2VCZWFuLmVqYkNyZWF0ZSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVNZXNzYWdlQmVhbi5lamJDcmVhdGUoKSIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgam5kaUNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIHF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKQEAgLTY3LDE5ICs2NywxOSBAQAogICAgICAgICAgICAgICAgIG1zZyA9IChUZXh0TWVzc2FnZSkgaW5NZXNzYWdlOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTUVTU0FHRSBCRUFOOiBNZXNzYWdlIHJlY2VpdmVkOiAiCiAgICAgICAgICAgICAgICAgICAgICsgbXNnLmdldFRleHQoKSk7Ci0JCXF1ZXVlQ29ubmVjdGlvbiA9Ci0JICAgICAgICAgICAgcXVldWVDb25uZWN0aW9uRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKLQkJcXVldWVTZXNzaW9uID0KLQkgICAgICAgICAgICBxdWV1ZUNvbm5lY3Rpb24uY3JlYXRlUXVldWVTZXNzaW9uKGZhbHNlLAotCQkgICAgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKLQkJcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKHF1ZXVlKTsKLQkJVGV4dE1lc3NhZ2UgbWVzc2FnZSA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVUZXh0TWVzc2FnZSgpOworICAgICAgICBxdWV1ZUNvbm5lY3Rpb24gPQorICAgICAgICAgICAgICAgIHF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7CisgICAgICAgIHF1ZXVlU2Vzc2lvbiA9CisgICAgICAgICAgICAgICAgcXVldWVDb25uZWN0aW9uLmNyZWF0ZVF1ZXVlU2Vzc2lvbihmYWxzZSwKKyAgICAgICAgICAgIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CisgICAgICAgIHF1ZXVlU2VuZGVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVNlbmRlcihxdWV1ZSk7CisgICAgICAgIFRleHRNZXNzYWdlIG1lc3NhZ2UgPSBxdWV1ZVNlc3Npb24uY3JlYXRlVGV4dE1lc3NhZ2UoKTsKIAotCQltZXNzYWdlLnNldFRleHQoIlJFUExJRUQ6IiArIG1zZy5nZXRUZXh0KCkpOwotCQltZXNzYWdlLnNldEludFByb3BlcnR5KCJyZXBseWlkIiwgbXNnLmdldEludFByb3BlcnR5KCJpZCIpICk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlOiAiICsKLQkJbWVzc2FnZS5nZXRUZXh0KCkpOwotCQlxdWV1ZVNlbmRlci5zZW5kKG1lc3NhZ2UpOworICAgICAgICBtZXNzYWdlLnNldFRleHQoIlJFUExJRUQ6IiArIG1zZy5nZXRUZXh0KCkpOworICAgICAgICBtZXNzYWdlLnNldEludFByb3BlcnR5KCJyZXBseWlkIiwgbXNnLmdldEludFByb3BlcnR5KCJpZCIpICk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlOiAiICsKKyAgICAgICAgbWVzc2FnZS5nZXRUZXh0KCkpOworICAgICAgICBxdWV1ZVNlbmRlci5zZW5kKG1lc3NhZ2UpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1lc3NhZ2Ugb2Ygd3JvbmcgdHlwZTogIgogICAgICAgICAgICAgICAgICAgICArIGluTWVzc2FnZS5nZXRDbGFzcygpLmdldE5hbWUoKSk7CkBAIC04OSwxMiArODksMTIgQEAKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRlKSB7CiAgICAgICAgICAgICB0ZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfSBmaW5hbGx5IHsKLQkgICAgdHJ5IHsKLQkgICAgICAgIHF1ZXVlU2Vzc2lvbi5jbG9zZSgpOwotCQlxdWV1ZUNvbm5lY3Rpb24uY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgfQotCX0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHF1ZXVlU2Vzc2lvbi5jbG9zZSgpOworICAgICAgICBxdWV1ZUNvbm5lY3Rpb24uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgfQorICAgIH0KICAgICB9ICAvLyBvbk1lc3NhZ2UKIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25hY2MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25hY2MvYnVpbGQucHJvcGVydGllcwppbmRleCBjZTllMWJmLi43YTk2NGRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uYWNjL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbmFjYy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Im5vbmFjYyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2ltcGxlIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zaW1wbGUiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iY29tLnN1bi5zMXBlcWUubm9uYWNjLnNpbXBsZS5jbGllbnQuU2ltcGxlTWVzc2FnZUNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJjb20uc3VuLnMxcGVxZS5ub25hY2Muc2ltcGxlLmNsaWVudC5TaW1wbGVNZXNzYWdlQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJqbXNyYS5qYXIiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9pbnN0YWxsL2FwcGxpY2F0aW9ucy9qbXNyYS9pbXFqbXNyYS5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0ib3JiLmhvc3QiIHZhbHVlPSJsb2NhbGhvc3QiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25hY2MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbmFjYy9idWlsZC54bWwKaW5kZXggMDJmMWQ0ZS4uZjg4ZjgyMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbmFjYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbmFjYy9idWlsZC54bWwKQEAgLTIxLDcgKzIxLDcgQEAKIDwhRU5USVRZIHRlc3Rwcm9wZXJ0aWVzIFNZU1RFTSAiLi9idWlsZC5wcm9wZXJ0aWVzIj4KIDwhRU5USVRZIGNvbW1vbiBTWVNURU0gIi4uLy4uLy4uL2NvbmZpZy9jb21tb24ueG1sIj4KIDwhRU5USVRZIHRlc3Rjb21tb24gU1lTVEVNICIuLi8uLi8uLi9jb25maWcvcHJvcGVydGllcy54bWwiPgotICAgCisKIF0+CiAKIDxwcm9qZWN0IG5hbWU9InNpbXBsZUFwcCIgZGVmYXVsdD0idXNhZ2UiIGJhc2VkaXI9Ii4iPgpAQCAtNDAsNyArNDAsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTIsMTcgKzUyLDE3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkJlYW4qLmNsYXNzIiAvPgotCTwvYW50Y2FsbD4KLQk8ZWNobyBtZXNzYWdlPSJQcmVwYXJpbmcgSmFyIGZpbGUgdG8gZXhlY3V0ZSBpbiB0aGUgY2xpZW50ICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAgLz4KLSAgCTxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCi0gICAgICAJICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IioqLypDbGllbnQqLmNsYXNzIgorICAgIDwvYW50Y2FsbD4KKyAgICA8ZWNobyBtZXNzYWdlPSJQcmVwYXJpbmcgSmFyIGZpbGUgdG8gZXhlY3V0ZSBpbiB0aGUgY2xpZW50ICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAgLz4KKyAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCisgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IioqLypDbGllbnQqLmNsYXNzIgogICAgICAgICAgIG1hbmlmZXN0PSIuL2NsaWVudC9NQU5JRkVTVC5NRiIgLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIj4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktam1zLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNzAsMjUgKzcwLDI1IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IiR7dGVzdC5jbGllbnR9IiBmb3JrPSJ0cnVlIj4KLQkgICA8Y2xhc3NwYXRoPgotCSAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KLTwhLS0JICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtqbXNyYS5qYXJ9Ii8+LS0+Ci0JICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KLQkgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2phdmEuaG9tZX0vbGliL2pzc2UuamFyIi8+Ci0JICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50LmphciIvPgotPCEtLQkgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofSIvPi0tPgotCSAgIDwvY2xhc3NwYXRoPgotCSAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbEhvc3QiIHZhbHVlPSIke29yYi5ob3N0fSIvPgotCSAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgotCTwvamF2YT4KKyAgICAgICA8Y2xhc3NwYXRoPgorICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KKzwhLS0gICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtqbXNyYS5qYXJ9Ii8+LS0+CisgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KKyAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2phdmEuaG9tZX0vbGliL2pzc2UuamFyIi8+CisgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50LmphciIvPgorPCEtLSAgICAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofSIvPi0tPgorICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbEhvc3QiIHZhbHVlPSIke29yYi5ob3N0fSIvPgorICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgorICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWptcy1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25hY2MvY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25hY2MvY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YQppbmRleCBhNmY3Njk1Li45MzU1NDE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uYWNjL2NsaWVudC9TaW1wbGVNZXNzYWdlQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbmFjYy9jbGllbnQvU2ltcGxlTWVzc2FnZUNsaWVudC5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiAKIHB1YmxpYyBjbGFzcyBTaW1wbGVNZXNzYWdlQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uYWNjL2VqYi9TaW1wbGVNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbmFjYy9lamIvU2ltcGxlTWVzc2FnZUJlYW4uamF2YQppbmRleCBhYmU4NWQ4Li42ZDMzZTY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uYWNjL2VqYi9TaW1wbGVNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25hY2MvZWpiL1NpbXBsZU1lc3NhZ2VCZWFuLmphdmEKQEAgLTM0LDExICszNCwxMSBAQAogICAgIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluICIKICAgICAgICAgICAgICsgIlNpbXBsZU1lc3NhZ2VCZWFuLnNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KCkiKTsKLQl0aGlzLm1kYyA9IG1kYzsKKyAgICB0aGlzLm1kYyA9IG1kYzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVNZXNzYWdlQmVhbi5lamJDcmVhdGUoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlTWVzc2FnZUJlYW4uZWpiQ3JlYXRlKCkiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBpbk1lc3NhZ2UpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGUyY2M3NWQuLmRjMTljOWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTYgKzE1LDE2IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXN1YmNsYXNzaW5nIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zdWJjbGFzc2luZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0ic3ViY2xhc3NpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2J1aWxkLnhtbAppbmRleCA3ZmNlY2FlLi40NmU5YjcwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvYnVpbGQueG1sCkBAIC0zMSw3ICszMSw3IEBACiAgICAgJmNvbW1vbkJ1aWxkOwogICAgICZjb21tb25SdW47CiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwotICAgIAorCiA8IS0tCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLHNldHVwLGRlcGxveS13YXIsIHJ1bi13YXIsIHVuZGVwbG95LXdhciwgZGVwbG95LWVhciwgcnVuLWVhciwgdW5kZXBsb3ktZWFyLCB1bnNldHVwIi8+CiAKQEAgLTQwLDE1ICs0MCwxNSBAQAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCwgZGVwbG95LWVhciwgc2V0dXAsIHJ1bi1lYXIsIHVuc2V0dXAsIHVuZGVwbG95LWVhciIvPgogCiA8IS0tCi0JPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgotCTxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1bi13YXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhciIvPgotCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWVhciIvPgotCTxhbnRjYWxsIHRhcmdldD0icnVuLWVhciIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktZWFyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi13YXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWVhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWVhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktZWFyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CiAgICAgPC90YXJnZXQ+CiAtLT4KIApAQCAtNTYsNyArNTYsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICAgIDxhbnQgZGlyPSJyYSIgdGFyZ2V0PSJjbGVhbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29ubmVjdG9yIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL3NpbXBsZUJhbmsuc3FsIi8+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtcG9vbCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXJlc291cmNlIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtYWRtaW4tb2JqZWN0Ii8+Ci0gICAgICAgIAorCiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcG9vbCI+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY29ubmVjdG9yLWNvbm5wb29sLWNvbW1vbiI+CkBAIC04OSwxNyArODksMTcgQEAKICAgICAgICAgIDxwcm9wZXJ0eSBmaWxlPSIuLi9jb25maWcvb3JhY2xlLnByb3BlcnRpZXMiLz4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJjcmVhdGUtYWRtaW4tb2JqZWN0IC0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IC0tcmVzdHlwZSBjb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW4gLS1yYW5hbWUgJHthcHBuYW1lfUFwcCNqZGJjcmEgLS1wcm9wZXJ0eSBUYWJsZU5hbWU9Y3VzdG9tZXIyOkpuZGlOYW1lPWpkYmMvZWpiLXN1YmNsYXNzaW5nOlNjaGVtYU5hbWU9Y29ubmVjdG9yOk5vT2ZSb3dzPTEiLz4KLQkgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSJlaXMvamRiY0FkbWluIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iZWlzL2pkYmNBZG1pbiIvPgogICAgICAgICAgPC9hbnRjYWxsPgogICAgICA8L3RhcmdldD4KIAogICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1hZG1pbi1vYmplY3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImRlbGV0ZS1hZG1pbi1vYmplY3QiLz4KLQkgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSBlaXMvamRiY0FkbWluIi8+Ci0JIDwvYW50Y2FsbD4KLQkgPC90YXJnZXQ+Ci0gICAgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iZGVsZXRlLWFkbWluLW9iamVjdCIvPgorICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IGVpcy9qZGJjQWRtaW4iLz4KKyAgICAgPC9hbnRjYWxsPgorICAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icmVzdGFydCI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTEwNywxNSArMTA3LDE1IEBACiAgICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJhLWNvbmZpZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImNyZWF0ZS1yZXNvdXJjZS1hZGFwdGVyLWNvbmZpZyAgLS1wcm9wZXJ0eSBSQVByb3BlcnR5PVZBTElEIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCNqZGJjcmEiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke2FwcG5hbWV9QXBwI2pkYmNyYSIvPgogICAgICAgICAgPC9hbnRjYWxsPgogICAgICA8L3RhcmdldD4KIAogICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yYS1jb25maWciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImRlbGV0ZS1yZXNvdXJjZS1hZGFwdGVyLWNvbmZpZyIvPgotCSAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7YXBwbmFtZX1BcHAjamRiY3JhIi8+Ci0JIDwvYW50Y2FsbD4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtcmVzb3VyY2UtYWRhcHRlci1jb25maWciLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke2FwcG5hbWV9QXBwI2pkYmNyYSIvPgorICAgICA8L2FudGNhbGw+CiAgICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIj4KQEAgLTEyNyw3ICsxMjcsNyBAQAogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXBvb2wiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1hZG1pbi1vYmplY3QiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXBvb2wiPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWNvbm5lY3Rvci1jb25ucG9vbC1jb21tb24iPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3IuY29ucG9vbC5uYW1lIiB2YWx1ZT0iZW1iZWRkZWQtcmEtcG9vbCIvPgpAQCAtMTM3LDcgKzEzNyw3IEBACiAgICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlIj4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1jb25uZWN0b3ItcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmpuZGkubmFtZSIgdmFsdWU9ImpkYmMvZWpiLXN1YmNsYXNzaW5nIi8+Ci0JCTwvYW50Y2FsbD4KKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CkBAIC0xNTMsOSArMTUzLDkgQEAKICAgICAgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IENvbXBpbGluZyB0ZXN0IHNvdXJjZSBmaWxlcyIgbGV2ZWw9InZlcmJvc2UiLz4KICAgICAgIDxqYXZhYyBzcmNkaXI9InNlcnZsZXQiCiAgICAgICAgICBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKLQkgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH06cmEvcHVibGlzaC9pbnRlcm5hbC9jbGFzc2VzIgorICAgICBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofTpyYS9wdWJsaXNoL2ludGVybmFsL2NsYXNzZXMiCiAgICAgICAgICBkZWJ1Zz0ib24iCi0JIGZhaWxvbmVycm9yPSJ0cnVlIi8+CisgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+CiAgICAgIDwvdGFyZ2V0PgogCiAKQEAgLTE2NCwzNCArMTY0LDM0IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICA8YW50IGRpcj0icmEiIHRhcmdldD0iYXNzZW1ibGUiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICA8L2FudGNhbGw+Ci0gICAgICAgCisKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgPC9hbnRjYWxsPgogCi0gICAgCisKICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+ICAgIAotICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiAKKyAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgorICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIgogICAgICBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+CiAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+Ci0gICAgPC9maWxlc2V0PiAgCisgICAgPC9maWxlc2V0PgogICAgIDxmaWxlc2V0IGRpcj0icmEvcHVibGlzaC9saWIiPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi5yYXIiLz4KICAgICA8L2ZpbGVzZXQ+CiAgICAgPC9lYXI+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCi0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtcmEtY29uZmlnIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgpAQCAtMjAwLDI3ICsyMDAsMjcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS13YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4td2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViY2xpZW50LWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9IndlYi10by1lamIgKHN0YW5kLWFsb25lIHdhciBiYXNlZCkiLz4KLQk8L2FudGNhbGw+CisgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9IndlYi10by1lamIgKHN0YW5kLWFsb25lIHdhciBiYXNlZCkiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWJjbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0id2ViLXRvLWVqYiAoZWFyIGJhc2VkKSIvPgotCTwvYW50Y2FsbD4KKyAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0id2ViLXRvLWVqYiAoZWFyIGJhc2VkKSIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktZWFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXJhLWNvbmZpZyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LXdhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCAxZDEyMDBkLi5kZjRiYjkzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjksMjAgKzI5LDIwIEBACiAgICAgICAgIDxyZXMtcmVmLW5hbWU+amRiYy9TaW1wbGVCYW5rPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9lamItc3ViY2xhc3Npbmc8L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4gCi0gICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPiAKLSAgICAgPGJlYW4tcG9vbD4gCi0gICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPiAKLSAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PiAKLSAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPiAKLSAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgPC9iZWFuLXBvb2w+IAotICAgICAgPGJlYW4tY2FjaGU+IAotICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPiAKLSAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4gCi0gICAgICAgIDxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9yZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4gCi0gICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PiAKLSAgICAgIDwvYmVhbi1jYWNoZT4gCisgICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPgorICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4KKyAgICAgPGJlYW4tcG9vbD4KKyAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+CisgICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4KKyAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPgorICAgICAgICAgPHBvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgIDwvYmVhbi1wb29sPgorICAgICAgPGJlYW4tY2FjaGU+CisgICAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+CisgICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICAgIDxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9yZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkxSVTwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+CisgICAgICA8L2JlYW4tY2FjaGU+CiAgICAgPC9lamI+CiAgICAgPGVqYj4KICAgICAgIDxlamItbmFtZT5DdXN0b21lckNoZWNraW5nRUpCPC9lamItbmFtZT4KQEAgLTUxLDIwICs1MSwyMCBAQAogICAgICAgICA8cmVzLXJlZi1uYW1lPmpkYmMvU2ltcGxlQmFuazwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmpkYmMvZWpiLXN1YmNsYXNzaW5nPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+IAotICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4gCi0gICAgIDxiZWFuLXBvb2w+IAotICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4gCi0gICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4gCisgICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPgorICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4KKyAgICAgPGJlYW4tcG9vbD4KKyAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+CisgICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4KKyAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPgogICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgotICAgICAgPC9iZWFuLXBvb2w+IAotICAgICAgPGJlYW4tY2FjaGU+IAorICAgICAgPC9iZWFuLXBvb2w+CisgICAgICA8YmVhbi1jYWNoZT4KICAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4KICAgICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgogICAgICAgICAgIDxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9yZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4KICAgICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4KLSAgICAgIDwvYmVhbi1jYWNoZT4gCisgICAgICA8L2JlYW4tY2FjaGU+CiAgICAgPC9lamI+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KIDwvc3VuLWVqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lci5qYXZhCmluZGV4IDU5MjJmMzEuLjM2MTVlMTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lci5qYXZhCkBAIC00Niw0ICs0Niw0IEBACiAKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKaW5kZXggZmYxNWU3ZS4uODlkYzMyMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhCkBAIC0yMiw0ICsyMiw0IEBACiB7CiB9CiAKLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhCmluZGV4IGVlMGQxN2MuLjRiNTQ0NDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQpAQCAtOTQsNSArOTQsNSBAQAogICB9CiAKIH0KLSAgICAKLSAgICAKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lckVKQi5qYXZhCmluZGV4IDA1MjBiNjAuLjA3MjIwZGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lckVKQi5qYXZhCkBAIC01Myw3ICs1Myw3IEBACiAKICAgcHVibGljIFN0cmluZyBnZXRBZGRyZXNzMSgpCiAgIHsKLSAgICByZXR1cm4gYWRkcmVzczE7IAorICAgIHJldHVybiBhZGRyZXNzMTsKICAgfQogCiAgIHB1YmxpYyBTdHJpbmcgZ2V0QWRkcmVzczIoKQpAQCAtMTM5LDcgKzEzOSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1FMIGV4Y2VwdGlvbiBvY2N1cmVkIGluIGVqYlJlbW92ZSBtZXRob2QiKTsKICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgIH0KLSAgICAKKwogICB9CiAKICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKQpAQCAtMjA2LDEyICsyMDYsMTIgQEAKICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgewogICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTUUxFeGNlcHRpb24gb2NjdXJyZWQgaW4gZWpiTG9hZCgpIG1ldGhvZCIpOwogICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9ICAgCisgICAgfQogICB9CiAKICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQogICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogfQotICAgICAgCi0gICAgCi0gICAgCisKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEKaW5kZXggMjc0MDY5Mi4uYzQ1YTFjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YQpAQCAtMjIsNCArMjIsNCBAQAogewogfQogCi0gIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEKaW5kZXggZjMwYjUwNi4uYjBjZTdiNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YQpAQCAtOTUsNiArOTUsNiBAQAogICB9CiAKIH0KLSAgICAgIAotICAgIAotICAgIAorCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWUyZWNhMC4uZmQyMWMzZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNCw3ICsxNCw3IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogIwogCi0gICAgCisKICMjIyBDb21wb25lbnQgUHJvcGVydGllcyAjIyMKIHNyYy5kaXI9c3JjCiBjb21wb25lbnQucHVibGlzaC5ob21lPS4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL2J1aWxkLnhtbAppbmRleCBjYjY2YTQ1Li4zYWNlZWYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvYnVpbGQueG1sCkBAIC0yMyw2MiArMjMsNjIgQEAKIAogPHByb2plY3QgbmFtZT0iSkRCQ0Nvbm5lY3RvciB0b3AgbGV2ZWwiIGRlZmF1bHQ9ImJ1aWxkIj4KICAgICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vamRiY3JhL3NwaSIvPgotICAgIAorCiAgICAgJmNvbW1vbjsKICAgICAmdGVzdGNvbW1vbjsKICAgICA8cHJvcGVydHkgZmlsZT0iLi9idWlsZC5wcm9wZXJ0aWVzIi8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlLGFzc2VtYmxlIiAvPgotICAgICAgICAgIAorCiAKICAgICA8IS0tIGluaXQuIEluaXRpYWxpemF0aW9uIGludm9sdmVzIGNyZWF0aW5nIHB1Ymxpc2hpbmcgZGlyZWN0b3JpZXMgYW5kCi0gICAgICAgICBPUyBzcGVjaWZpYyB0YXJnZXRzLiAtLT4gCisgICAgICAgICBPUyBzcGVjaWZpYyB0YXJnZXRzLiAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImluaXQiIGRlc2NyaXB0aW9uPSIke2NvbXBvbmVudC5uYW1lfSBpbml0aWFsaXphdGlvbiI+CiAgICAgICAgIDx0c3RhbXA+CiAgICAgICAgICAgICA8Zm9ybWF0IHByb3BlcnR5PSJzdGFydC50aW1lIiBwYXR0ZXJuPSJNTS9kZC95eXl5IGhoOm1tIGFhIi8+Ci0gICAgICAgIDwvdHN0YW1wPiAgICAKKyAgICAgICAgPC90c3RhbXA+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkJ1aWxkaW5nIGNvbXBvbmVudCAke2NvbXBvbmVudC5uYW1lfSIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iLz4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ii8+ICAgIAorICAgICAgICA8bWtkaXIgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iLz4KICAgICA8L3RhcmdldD4KLSAgICA8IS0tIGNvbXBpbGUgLS0+IAorICAgIDwhLS0gY29tcGlsZSAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQiCi0gICAgICAgICAgICBkZXNjcmlwdGlvbj0iQ29tcGlsZSBjb20vc3VuLyogY29tL2lwbGFuZXQvKiBzb3VyY2VzIj4gIAorICAgICAgICAgICAgZGVzY3JpcHRpb249IkNvbXBpbGUgY29tL3N1bi8qIGNvbS9pcGxhbmV0Lyogc291cmNlcyI+CiAgICAgICAgIDwhLS08ZWNobyBtZXNzYWdlPSJDb25uZWN0b3IgYXBpIHJlc2lkZXMgaW4gJHtjb25uZWN0b3ItYXBpLmphcn0iLz4tLT4KLSAgICAgICAgPGphdmFjIHNyY2Rpcj0iJHtzcmMuZGlyfSIgCisgICAgICAgIDxqYXZhYyBzcmNkaXI9IiR7c3JjLmRpcn0iCiAgICAgICAgICAgICAgICBkZXN0ZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoPgotCQk8ZmlsZXNldCBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcyI+Ci0JCSAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIgLz4KLQkJPC9maWxlc2V0PgorICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcyI+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIgLz4KKyAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJjb20vc3VuL2pkYmNyYS8qKiIvPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iY29tL3N1bi9hcHBzZXJ2LyoqIi8+CiAgICAgICAgIDwvamF2YWM+CiAgICAgPC90YXJnZXQ+Ci0gICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkIi8+CiAKLSAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiPiAgICAKLSAgICAJCi0JPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiYy5qYXIiIAotICAgICAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IiBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLCAKLSAgICAgICAgICAgIGNvbS9zdW4vYXBwc2Vydi8qKi8qLCBjb20vc3VuL2pkYmNyYS91dGlsLyoqLyosIGNvbS9zdW4vamRiY3JhL2NvbW1vbi8qKi8qIi8+IAotICAgCQotICAgICAgICA8Y29weSBmaWxlPSIke3NyYy5kaXJ9L2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIiAKLSAgICAgICAgICAgICAgICB0b2ZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIj4KKworICAgIDxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmMuamFyIgorICAgICAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IiBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLAorICAgICAgICAgICAgY29tL3N1bi9hcHBzZXJ2LyoqLyosIGNvbS9zdW4vamRiY3JhL3V0aWwvKiovKiwgY29tL3N1bi9qZGJjcmEvY29tbW9uLyoqLyoiLz4KKworICAgICAgICA8Y29weSBmaWxlPSIke3NyYy5kaXJ9L2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIgorICAgICAgICAgICAgICAgIHRvZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiY3JhLnJhciIgCi0JCWJhc2VkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIgaW5jbHVkZXM9ImpkYmMuamFyIj4KKyAgICAgICA8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjcmEucmFyIgorICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iIGluY2x1ZGVzPSJqZGJjLmphciI+CiAKLSAgIAkJPG1ldGFpbmYgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KIAotICAgCTxkZWxldGUgZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIvPgotCQorICAgICAgIDxkZWxldGUgZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIvPgorCiAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVzY3JpcHRpb249IkNsZWFuIHRoZSBidWlsZCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKaW5kZXggOWY4Mzk5YS4uYjZlZjMwYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQpAQCAtMjAsMTUgKzIwLDE1IEBACiBpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOwogCiAvKioKLSAqIFRoZSA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uIAorICogVGhlIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24KICAqIHNlcnZlciB3aWxsIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4gQW4gYXBwbGljYXRpb24gcHJvZ3JhbSB3b3VsZCBiZSBhYmxlCi0gKiB0byB1c2UgdGhpcyBpbnRlcmZhY2UgdG8gZG8gdGhlIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCBieSBTdW5PTkUgCisgKiB0byB1c2UgdGhpcyBpbnRlcmZhY2UgdG8gZG8gdGhlIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCBieSBTdW5PTkUKICAqIGFwcGxpY2F0aW9uIHNlcnZlci4KLSAqIDxwPkEgc2FtcGxlIGNvZGUgZm9yIGdldHRpbmcgZHJpdmVyJ3MgY29ubmVjdGlvbiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBsaWtlIAorICogPHA+QSBzYW1wbGUgY29kZSBmb3IgZ2V0dGluZyBkcml2ZXIncyBjb25uZWN0aW9uIGltcGxlbWVudGF0aW9uIHdvdWxkIGxpa2UKICAqIHRoZSBmb2xsb3dpbmcuCiAgKiA8cHJlPgogICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICBjb20uc3VuLmFwcHNlcnYuRGF0YVNvdXJjZSBkcyA9IChjb20uc3VuLmFwcHNlcnYuRGF0YVNPdXJjZSkgaWMubG9va3VwKCJqZGJjL1BvaW50QmFzZSIpOyAKKyAgICAgY29tLnN1bi5hcHBzZXJ2LkRhdGFTb3VyY2UgZHMgPSAoY29tLnN1bi5hcHBzZXJ2LkRhdGFTT3VyY2UpIGljLmxvb2t1cCgiamRiYy9Qb2ludEJhc2UiKTsKICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgIENvbm5lY3Rpb24gZHJpdmVyY29uID0gZHMuZ2V0Q29ubmVjdGlvbihjb24pOwogCkBAIC0zNiwxMyArMzYsMTMgQEAKIAogICAgICBjb24uY2xvc2UoKTsKICAgIDwvcHJlPgotICogCisgKgogICogQGF1dGhvciBCaW5vZCBQLkcKICAqLwogcHVibGljIGludGVyZmFjZSBEYXRhU291cmNlIGV4dGVuZHMgamF2YXguc3FsLkRhdGFTb3VyY2UgewogCiAgICAgLyoqCi0gICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIgCisgICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIKICAgICAgKiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24gc2VydmVyLiBJZiBhbiBhY3R1YWwgY29ubmVjdGlvbiBpcwogICAgICAqIHN1cHBsaWVkIGFzIGFyZ3VtZW50LCB0aGVuIGl0IHdpbGwgYmUganVzdCByZXR1cm5lZC4KICAgICAgKgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCmluZGV4IGMyODIyZTIuLjZhMzY2YjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKQEAgLTI3LDIyICsyNywyMiBAQAogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKIC8qKgotICogVXRpbGl0eSBjbGFzcywgd2hpY2ggd291bGQgY3JlYXRlIG5lY2Vzc2FyeSBEYXRhc291cmNlIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlIAorICogVXRpbGl0eSBjbGFzcywgd2hpY2ggd291bGQgY3JlYXRlIG5lY2Vzc2FyeSBEYXRhc291cmNlIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlCiAgKiBzcGVjaWZpY2F0aW9uLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCi0gKiBAc2VlCQljb20uc3VuLmpkYmNyYS5jb21tb24uRGF0YVNvdXJjZVNwZWMKLSAqIEBzZWUJCWNvbS5zdW4uamRiY3JhLnV0aWwuTWV0aG9kRXhjZWN1dG9yCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRworICogQHNlZSAgICAgICAgY29tLnN1bi5qZGJjcmEuY29tbW9uLkRhdGFTb3VyY2VTcGVjCisgKiBAc2VlICAgICAgICBjb20uc3VuLmpkYmNyYS51dGlsLk1ldGhvZEV4Y2VjdXRvcgogICovCiBwdWJsaWMgY2xhc3MgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZXsKIAogICAgIHByaXZhdGUgRGF0YVNvdXJjZVNwZWMgc3BlYzsKLSAgICAKKwogICAgIHByaXZhdGUgSGFzaHRhYmxlIGRyaXZlclByb3BlcnRpZXMgPSBudWxsOwotICAgIAotICAgIHByaXZhdGUgTWV0aG9kRXhlY3V0b3IgZXhlY3V0b3IgPSBudWxsOyAgICAKLSAgICAKKworICAgIHByaXZhdGUgTWV0aG9kRXhlY3V0b3IgZXhlY3V0b3IgPSBudWxsOworCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTUwLDE2NyArNTAsMTY3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnID0gZmFsc2U7CiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0IGEgRGF0YVNvdXJjZSBPYmplY3QgZnJvbSB0aGUgc3BlYy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3BlYwk8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3BlYyAgICA8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIERhdGFTb3VyY2VPYmplY3RCdWlsZGVyKERhdGFTb3VyY2VTcGVjIHNwZWMpIHsKLSAgICAJdGhpcy5zcGVjID0gc3BlYzsKLSAgICAJZXhlY3V0b3IgPSBuZXcgTWV0aG9kRXhlY3V0b3IoKTsKKyAgICAgICAgdGhpcy5zcGVjID0gc3BlYzsKKyAgICAgICAgZXhlY3V0b3IgPSBuZXcgTWV0aG9kRXhlY3V0b3IoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3QgdGhlIERhdGFTb3VyY2UgT2JqZWN0IGZyb20gdGhlIHNwZWMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCU9iamVjdCBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgRGF0YVNvdXJjZVNwZWMuCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gaWYgdGhlIGNsYXNzIGlzIG5vdCBmb3VuZCBvciBzb21lIGlzc3VlIGluIGV4ZWN1dGluZwotICAgICAqCQlzb21lIG1ldGhvZC4KKyAgICAgKiBAcmV0dXJuICAgIE9iamVjdCBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgRGF0YVNvdXJjZVNwZWMuCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gaWYgdGhlIGNsYXNzIGlzIG5vdCBmb3VuZCBvciBzb21lIGlzc3VlIGluIGV4ZWN1dGluZworICAgICAqICAgICAgICBzb21lIG1ldGhvZC4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGNvbnN0cnVjdERhdGFTb3VyY2VPYmplY3QoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCWRyaXZlclByb3BlcnRpZXMgPSBwYXJzZURyaXZlclByb3BlcnRpZXMoc3BlYyk7CisgICAgICAgIGRyaXZlclByb3BlcnRpZXMgPSBwYXJzZURyaXZlclByb3BlcnRpZXMoc3BlYyk7CiAgICAgICAgIE9iamVjdCBkYXRhU291cmNlT2JqZWN0ID0gZ2V0RGF0YVNvdXJjZU9iamVjdCgpOwogICAgICAgICBNZXRob2RbXSBtZXRob2RzID0gZGF0YVNvdXJjZU9iamVjdC5nZXRDbGFzcygpLmdldE1ldGhvZHMoKTsKICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBtZXRob2RzW2ldLmdldE5hbWUoKTsKLQkgICAgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0VXNlciIpKXsJICAgIAkKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQYXNzd29yZCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dpblRpbWVPdXQiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ1dyaXRlciIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR1dSSVRFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YWJhc2VOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhU291cmNlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREZXNjcmlwdGlvbiIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TmV0d29ya1Byb3RvY29sIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQb3J0TnVtYmVyIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0Um9sZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0U2VydmVyTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4U3RhdGVtZW50cyIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFNUQVRFTUVOVFMpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldEluaXRpYWxQb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLklOSVRJQUxQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWluUG9vbFNpemUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NSU5QT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4UG9vbFNpemUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4SWRsZVRpbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhJRExFVElNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UHJvcGVydHlDeWNsZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBST1BFUlRZQ1lDTEUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChkcml2ZXJQcm9wZXJ0aWVzLmNvbnRhaW5zS2V5KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSkpewotCSAgICAJVmVjdG9yIHZhbHVlcyA9IChWZWN0b3IpIGRyaXZlclByb3BlcnRpZXMuZ2V0KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSk7Ci0JICAgICAgICBleGVjdXRvci5ydW5NZXRob2QobWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0LCB2YWx1ZXMpOwotCSAgICB9CisgICAgICAgIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFVzZXIiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UGFzc3dvcmQiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9naW5UaW1lT3V0IikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dXcml0ZXIiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dXUklURVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFiYXNlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YVNvdXJjZU5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGVzY3JpcHRpb24iKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TmV0d29ya1Byb3RvY29sIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQb3J0TnVtYmVyIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0Um9sZU5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0U2VydmVyTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFN0YXRlbWVudHMiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhTVEFURU1FTlRTKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRJbml0aWFsUG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5JTklUSUFMUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1pblBvb2xTaXplIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUlOUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFBvb2xTaXplIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heElkbGVUaW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYSURMRVRJTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFByb3BlcnR5Q3ljbGUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QUk9QRVJUWUNZQ0xFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAoZHJpdmVyUHJvcGVydGllcy5jb250YWluc0tleShtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpKXsKKyAgICAgICAgICAgIFZlY3RvciB2YWx1ZXMgPSAoVmVjdG9yKSBkcml2ZXJQcm9wZXJ0aWVzLmdldChtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpOworICAgICAgICAgICAgZXhlY3V0b3IucnVuTWV0aG9kKG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCwgdmFsdWVzKTsKKyAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBkYXRhU291cmNlT2JqZWN0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgZXh0cmEgZHJpdmVyIHByb3BlcnRpZXMgZnJvbSB0aGUgRGF0YVNvdXJjZVNwZWMgb2JqZWN0IGFuZAogICAgICAqIHBhcnNlIHRoZW0gdG8gYSBzZXQgb2YgbWV0aG9kTmFtZSBhbmQgcGFyYW1ldGVycy4gUHJlcGFyZSBhIGhhc2h0YWJsZQogICAgICAqIGNvbnRhaW5pbmcgdGhlc2UgZGV0YWlscyBhbmQgcmV0dXJuLgogICAgICAqCi0gICAgICogQHBhcmFtCXNwZWMJPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEByZXR1cm4JSGFzaHRhYmxlIGNvbnRhaW5pbmcgbWV0aG9kIG5hbWVzIGFuZCBwYXJhbWV0ZXJzLAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JSWYgZGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBhbmQgcHJvcGVydHkgc3RyaW5nCi0gICAgICoJCQkJCWlzIG5vdCBudWxsLgorICAgICAqIEBwYXJhbSAgICBzcGVjICAgIDxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIEhhc2h0YWJsZSBjb250YWluaW5nIG1ldGhvZCBuYW1lcyBhbmQgcGFyYW1ldGVycywKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIElmIGRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgYW5kIHByb3BlcnR5IHN0cmluZworICAgICAqICAgICAgICAgICAgICAgICAgICBpcyBub3QgbnVsbC4KICAgICAgKi8KICAgICBwcml2YXRlIEhhc2h0YWJsZSBwYXJzZURyaXZlclByb3BlcnRpZXMoRGF0YVNvdXJjZVNwZWMgc3BlYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlTdHJpbmcgZGVsaW0gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOworICAgICAgICBTdHJpbmcgZGVsaW0gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogCiAgICAgICAgIFN0cmluZyBwcm9wID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7Ci0JaWYgKCBwcm9wID09IG51bGwgfHwgcHJvcC50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgICByZXR1cm4gbmV3IEhhc2h0YWJsZSgpOwotCX0gZWxzZSBpZiAoZGVsaW0gPT0gbnVsbCB8fCBkZWxpbS5lcXVhbHMoIiIpKSB7Ci0JICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbiAoIkRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24iKTsKLQl9Ci0JCi0JSGFzaHRhYmxlIHByb3BlcnRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JZGVsaW0gPSBkZWxpbS50cmltKCk7CQotCVN0cmluZyBzZXAgPSBkZWxpbStkZWxpbTsKLQlpbnQgc2VwTGVuID0gc2VwLmxlbmd0aCgpOwotCVN0cmluZyBjYWNoZSA9IHByb3A7Ci0JVmVjdG9yIG1ldGhvZHMgPSBuZXcgVmVjdG9yKCk7Ci0JCi0Jd2hpbGUgKGNhY2hlLmluZGV4T2Yoc2VwKSAhPSAtMSkgewotCSAgICBpbnQgaW5kZXggPSBjYWNoZS5pbmRleE9mKHNlcCk7Ci0JICAgIFN0cmluZyBuYW1lID0gY2FjaGUuc3Vic3RyaW5nKDAsaW5kZXgpOwotCSAgICBpZiAobmFtZS50cmltKCkgIT0gIiIpIHsKLQkgICAgICAgIG1ldGhvZHMuYWRkKG5hbWUpOwotCSAgICAJY2FjaGUgPSBjYWNoZS5zdWJzdHJpbmcoaW5kZXgrc2VwTGVuKTsKLQkgICAgfQotCX0KLQkKLSAgICAJRW51bWVyYXRpb24gYWxsTWV0aG9kcyA9IG1ldGhvZHMuZWxlbWVudHMoKTsKLSAgICAJd2hpbGUgKGFsbE1ldGhvZHMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAJICAgIFN0cmluZyBvbmVNZXRob2QgPSAoU3RyaW5nKSBhbGxNZXRob2RzLm5leHRFbGVtZW50KCk7ICAgIAkgICAgCi0gICAgCSAgICBpZiAoIW9uZU1ldGhvZC50cmltKCkuZXF1YWxzKCIiKSkgewotICAgIAkgICAgCVN0cmluZyBtZXRob2ROYW1lID0gbnVsbDsKLSAgICAJICAgIAlWZWN0b3IgcGFybXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCSAgICAJU3RyaW5nVG9rZW5pemVyIG1ldGhvZERldGFpbHMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKG9uZU1ldGhvZCxkZWxpbSk7Ci0JCWZvciAoaW50IGk9MDsgbWV0aG9kRGV0YWlscy5oYXNNb3JlVG9rZW5zKCk7aSsrICkgewotCQkgICAgU3RyaW5nIHRva2VuID0gKFN0cmluZykgbWV0aG9kRGV0YWlscy5uZXh0VG9rZW4oKTsKLQkJICAgIGlmIChpPT0wKSB7Ci0JCSAgICAJbWV0aG9kTmFtZSA9IHRva2VuLnRvVXBwZXJDYXNlKCk7Ci0JCSAgICB9IGVsc2UgewotCQkgICAgCXBhcm1zLmFkZCh0b2tlbik7CQkgICAgCQotCQkgICAgfQotCQl9Ci0JCXByb3BlcnRpZXMucHV0KG1ldGhvZE5hbWUscGFybXMpOwotICAgIAkgICAgfSAgICAJICAgIAotICAgIAl9Ci0gICAgCXJldHVybiBwcm9wZXJ0aWVzOworICAgIGlmICggcHJvcCA9PSBudWxsIHx8IHByb3AudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBIYXNodGFibGUoKTsKKyAgICB9IGVsc2UgaWYgKGRlbGltID09IG51bGwgfHwgZGVsaW0uZXF1YWxzKCIiKSkgeworICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24gKCJEZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGluIHRoZSBjb25maWd1cmF0aW9uIik7CiAgICAgfQotICAgIAorCisgICAgSGFzaHRhYmxlIHByb3BlcnRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgZGVsaW0gPSBkZWxpbS50cmltKCk7CisgICAgU3RyaW5nIHNlcCA9IGRlbGltK2RlbGltOworICAgIGludCBzZXBMZW4gPSBzZXAubGVuZ3RoKCk7CisgICAgU3RyaW5nIGNhY2hlID0gcHJvcDsKKyAgICBWZWN0b3IgbWV0aG9kcyA9IG5ldyBWZWN0b3IoKTsKKworICAgIHdoaWxlIChjYWNoZS5pbmRleE9mKHNlcCkgIT0gLTEpIHsKKyAgICAgICAgaW50IGluZGV4ID0gY2FjaGUuaW5kZXhPZihzZXApOworICAgICAgICBTdHJpbmcgbmFtZSA9IGNhY2hlLnN1YnN0cmluZygwLGluZGV4KTsKKyAgICAgICAgaWYgKG5hbWUudHJpbSgpICE9ICIiKSB7CisgICAgICAgICAgICBtZXRob2RzLmFkZChuYW1lKTsKKyAgICAgICAgICAgIGNhY2hlID0gY2FjaGUuc3Vic3RyaW5nKGluZGV4K3NlcExlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAgICAgRW51bWVyYXRpb24gYWxsTWV0aG9kcyA9IG1ldGhvZHMuZWxlbWVudHMoKTsKKyAgICAgICAgd2hpbGUgKGFsbE1ldGhvZHMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBvbmVNZXRob2QgPSAoU3RyaW5nKSBhbGxNZXRob2RzLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICBpZiAoIW9uZU1ldGhvZC50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gbnVsbDsKKyAgICAgICAgICAgICAgICBWZWN0b3IgcGFybXMgPSBuZXcgVmVjdG9yKCk7CisgICAgICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIG1ldGhvZERldGFpbHMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKG9uZU1ldGhvZCxkZWxpbSk7CisgICAgICAgIGZvciAoaW50IGk9MDsgbWV0aG9kRGV0YWlscy5oYXNNb3JlVG9rZW5zKCk7aSsrICkgeworICAgICAgICAgICAgU3RyaW5nIHRva2VuID0gKFN0cmluZykgbWV0aG9kRGV0YWlscy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgIGlmIChpPT0wKSB7CisgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSA9IHRva2VuLnRvVXBwZXJDYXNlKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBhcm1zLmFkZCh0b2tlbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHJvcGVydGllcy5wdXQobWV0aG9kTmFtZSxwYXJtcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUgc3BlYy4KICAgICAgKgotICAgICAqIEByZXR1cm4JSW5pdGlhbCBEYXRhU291cmNlIE9iamVjdCBpbnN0YW5jZS4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBJZiBjbGFzcyBuYW1lIGlzIHdyb25nIG9yIGNsYXNzcGF0aCBpcyBub3Qgc2V0Ci0gICAgICoJCXByb3Blcmx5LgorICAgICAqIEByZXR1cm4gICAgSW5pdGlhbCBEYXRhU291cmNlIE9iamVjdCBpbnN0YW5jZS4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBJZiBjbGFzcyBuYW1lIGlzIHdyb25nIG9yIGNsYXNzcGF0aCBpcyBub3Qgc2V0CisgICAgICogICAgICAgIHByb3Blcmx5LgogICAgICAqLwogICAgIHByaXZhdGUgT2JqZWN0IGdldERhdGFTb3VyY2VPYmplY3QoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCVN0cmluZyBjbGFzc05hbWUgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOwotICAgICAgICB0cnkgeyAgICAgICAgICAgIAorICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIGRhdGFTb3VyY2VDbGFzcyA9IENsYXNzLmZvck5hbWUoY2xhc3NOYW1lKTsKICAgICAgICAgICAgIE9iamVjdCBkYXRhU291cmNlT2JqZWN0ID0gZGF0YVNvdXJjZUNsYXNzLm5ld0luc3RhbmNlKCk7CiAgICAgICAgICAgICByZXR1cm4gZGF0YVNvdXJjZU9iamVjdDsKICAgICAgICAgfSBjYXRjaChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGNmbmUpewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jbmZlX2RzIiwgY2ZuZSk7Ci0JCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NuZmVfZHMiLCBjZm5lKTsKKwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDbGFzcyBOYW1lIGlzIHdyb25nIG9yIENsYXNzIHBhdGggaXMgbm90IHNldCBmb3IgOiIgKyBjbGFzc05hbWUpOwogICAgICAgICB9IGNhdGNoKEluc3RhbnRpYXRpb25FeGNlcHRpb24gY2UpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaW5zdCIsIGNsYXNzTmFtZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2luc3QiLCBjbGFzc05hbWUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJFcnJvciBpbiBpbnN0YW50aWF0aW5nIiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBjZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hY2NfaW5zdCIsIGNsYXNzTmFtZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2FjY19pbnN0IiwgY2xhc3NOYW1lKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIEVycm9yIGluIGluc3RhbnRpYXRpbmciICsgY2xhc3NOYW1lKTsKICAgICAgICAgfQogICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQppbmRleCBlZjZjNGM5Li4zZGMxNTRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCkBAIC0xOSw5MiArMTksOTIgQEAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwogCiAvKioKLSAqIEVuY2Fwc3VsYXRlIHRoZSBEYXRhU291cmNlIG9iamVjdCBkZXRhaWxzIG9idGFpbmVkIGZyb20gCisgKiBFbmNhcHN1bGF0ZSB0aGUgRGF0YVNvdXJjZSBvYmplY3QgZGV0YWlscyBvYnRhaW5lZCBmcm9tCiAgKiBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlU3BlYyBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUk5BTUUJCQkJPSAxOyAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVNTV09SRAkJCQk9IDI7ICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVUkwJCQkJCT0gMzsgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR0lOVElNRU9VVAkJCT0gNDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dXUklURVIJCQkJPSA1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFCQVNFTkFNRQkJCT0gNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFTkFNRQkJCT0gNzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDUklQVElPTgkJCQk9IDg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS1BST1RPQ09MCQkJPSA5OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUlROVU1CRVIJCQkJPSAxMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0xFTkFNRQkJCQk9IDExOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFUlZFUk5BTUUJCQkJPSAxMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhTVEFURU1FTlRTCQkJPSAxMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTklUSUFMUE9PTFNJWkUJCQk9IDE0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTlBPT0xTSVpFCQkJCT0gMTU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYUE9PTFNJWkUJCQkJPSAxNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhJRExFVElNRQkJCQk9IDE3OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZQ1lDTEUJCQk9IDE4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERSSVZFUlBST1BFUlRJRVMJCQk9IDE5OyAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTEFTU05BTUUJCQkJPSAyMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUxJTUlURVIJCQkJPSAyMTsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYQURBVEFTT1VSQ0UJCQk9IDIyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0UJCQkJPSAyMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OUE9PTERBVEFTT1VSQ0UJCT0gMjQ7Ci0gICAgICAKLSAgICAvL0dKQ0lOVCAgICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQJPSAyNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OTUVUSE9ECQkJPSAyNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OVEFCTEVOQU1FCQkJPSAyNzsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUUkFOU0FDVElPTklTT0xBVElPTgkJPSAyODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHVUFSQU5URUVJU09MQVRJT05MRVZFTAkJPSAyOTsKLSAgICAgICAgICAgIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRVJOQU1FICAgICAgICAgICAgICAgID0gMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVNTV09SRCAgICAgICAgICAgICAgICA9IDI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVJMICAgICAgICAgICAgICAgICAgICA9IDM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HSU5USU1FT1VUICAgICAgICAgICAgPSA0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR1dSSVRFUiAgICAgICAgICAgICAgICA9IDU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQUJBU0VOQU1FICAgICAgICAgICAgPSA2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0VOQU1FICAgICAgICAgICAgPSA3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFU0NSSVBUSU9OICAgICAgICAgICAgICAgID0gODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLUFJPVE9DT0wgICAgICAgICAgICA9IDk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9SVE5VTUJFUiAgICAgICAgICAgICAgICA9IDEwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPTEVOQU1FICAgICAgICAgICAgICAgID0gMTE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVkVSTkFNRSAgICAgICAgICAgICAgICA9IDEyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFNUQVRFTUVOVFMgICAgICAgICAgICA9IDEzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOSVRJQUxQT09MU0laRSAgICAgICAgICAgID0gMTQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOUE9PTFNJWkUgICAgICAgICAgICAgICAgPSAxNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhQT09MU0laRSAgICAgICAgICAgICAgICA9IDE2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWElETEVUSU1FICAgICAgICAgICAgICAgID0gMTc7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlDWUNMRSAgICAgICAgICAgID0gMTg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRFJJVkVSUFJPUEVSVElFUyAgICAgICAgICAgID0gMTk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xBU1NOQU1FICAgICAgICAgICAgICAgID0gMjA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVMSU1JVEVSICAgICAgICAgICAgICAgID0gMjE7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYQURBVEFTT1VSQ0UgICAgICAgICAgICA9IDIyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0UgICAgICAgICAgICAgICAgPSAyMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OUE9PTERBVEFTT1VSQ0UgICAgICAgID0gMjQ7CisKKyAgICAvL0dKQ0lOVAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQgICAgPSAyNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OTUVUSE9EICAgICAgICAgICAgPSAyNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OVEFCTEVOQU1FICAgICAgICAgICAgPSAyNzsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRSQU5TQUNUSU9OSVNPTEFUSU9OICAgICAgICA9IDI4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdVQVJBTlRFRUlTT0xBVElPTkxFVkVMICAgICAgICA9IDI5OworCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgZGV0YWlscyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgcHJvcGVydHkuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcHJvcGVydHkJUHJvcGVydHkgTmFtZSB0byBiZSBzZXQuCi0gICAgICogQHBhcmFtCXZhbHVlCQlWYWx1ZSBvZiBwcm9wZXJ0eSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIHByb3BlcnR5ICAgIFByb3BlcnR5IE5hbWUgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICB2YWx1ZSAgICAgICAgVmFsdWUgb2YgcHJvcGVydHkgdG8gYmUgc2V0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERldGFpbChpbnQgcHJvcGVydHksIFN0cmluZyB2YWx1ZSkgewotICAgIAlkZXRhaWxzLnB1dChuZXcgSW50ZWdlcihwcm9wZXJ0eSksdmFsdWUpOworICAgICAgICBkZXRhaWxzLnB1dChuZXcgSW50ZWdlcihwcm9wZXJ0eSksdmFsdWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUgb2YgcHJvcGVydHkKICAgICAgKgotICAgICAqIEByZXR1cm4JVmFsdWUgb2YgdGhlIHByb3BlcnR5LgorICAgICAqIEByZXR1cm4gICAgVmFsdWUgb2YgdGhlIHByb3BlcnR5LgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGV0YWlsKGludCBwcm9wZXJ0eSkgewotICAgIAlpZiAoZGV0YWlscy5jb250YWluc0tleShuZXcgSW50ZWdlcihwcm9wZXJ0eSkpKSB7Ci0gICAgCSAgICByZXR1cm4gKFN0cmluZykgZGV0YWlscy5nZXQobmV3IEludGVnZXIocHJvcGVydHkpKTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHJldHVybiBudWxsOwotICAgIAl9ICAgIAkKKyAgICAgICAgaWYgKGRldGFpbHMuY29udGFpbnNLZXkobmV3IEludGVnZXIocHJvcGVydHkpKSkgeworICAgICAgICAgICAgcmV0dXJuIChTdHJpbmcpIGRldGFpbHMuZ2V0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyB3aGV0aGVyIHR3byA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0cwogICAgICAqIGFyZSBlcXVhbCBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb2JqCUluc3RhbmNlIG9mIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG9iaiAgICBJbnN0YW5jZSBvZiA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7Ci0gICAgCWlmIChvYmogaW5zdGFuY2VvZiBEYXRhU291cmNlU3BlYykgewotICAgIAkgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5lcXVhbHMoKChEYXRhU291cmNlU3BlYylvYmopLmRldGFpbHMpOwotICAgIAl9Ci0gICAgCXJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGFTb3VyY2VTcGVjKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmVxdWFscygoKERhdGFTb3VyY2VTcGVjKW9iaikuZGV0YWlscyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgaGFzaENvZGUgb2YgdGhpcyA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybgloYXNoQ29kZSBvZiB0aGlzIG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2hDb2RlIG9mIHRoaXMgb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgCXJldHVybiB0aGlzLmRldGFpbHMuaGFzaENvZGUoKTsKLSAgICB9ICAgIAorICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmhhc2hDb2RlKCk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbAppbmRleCBlZjQzOGZjLi4zYjRmYWViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iLiIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL2NvbW1vbiIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0zNiwxMyArMzYsMTMgQEAKIAogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxMyIgZGVwZW5kcz0iY29tcGlsZSIvPgogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxNCIgZGVwZW5kcz0iY29tcGlsZSIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxMyIgZGVwZW5kcz0icGFja2FnZSIvPgogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxNCIgZGVwZW5kcz0icGFja2FnZSIvPgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxMyIgZGVwZW5kcz0iY29tcGlsZTEzLCBwYWNrYWdlMTMiLz4KICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgotICAgIAorCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCmluZGV4IDQ2MzJhZTEuLmI0ZmQxMjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKQEAgLTI0LDI0ICsyNCwyNCBAQAogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yOwogCiAvKioKLSAqIEhvbGRzIHRoZSBqYXZhLnNxbC5Db25uZWN0aW9uIG9iamVjdCwgd2hpY2ggaXMgdG8gYmUgCisgKiBIb2xkcyB0aGUgamF2YS5zcWwuQ29ubmVjdGlvbiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlCiAgKiBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uIHByb2dyYW0uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0aW9uSG9sZGVyIGltcGxlbWVudHMgQ29ubmVjdGlvbnsgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvbkhvbGRlciBpbXBsZW1lbnRzIENvbm5lY3Rpb257CiAKICAgICBwcml2YXRlIENvbm5lY3Rpb24gY29uOwotICAgIAorCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKLSAgICBwcml2YXRlIGJvb2xlYW4gd3JhcHBlZEFscmVhZHkgPSBmYWxzZTsgICAgCi0gICAgCisKKyAgICBwcml2YXRlIGJvb2xlYW4gd3JhcHBlZEFscmVhZHkgPSBmYWxzZTsKKwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0Nsb3NlZCA9IGZhbHNlOwotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIHZhbGlkID0gdHJ1ZTsKLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBhY3RpdmUgPSBmYWxzZTsKICAgICAvKioKICAgICAgKiBUaGUgYWN0aXZlIGZsYWcgaXMgZmFsc2Ugd2hlbiB0aGUgY29ubmVjdGlvbiBoYW5kbGUgaXMKQEAgLTUzLDQwNCArNTMsNDA0IEBACiAgICAgICogZnVuY3Rpb24sIHRoZSBhYm92ZSBtZXRob2QgaW52b2NhdGlvbiBzdWNjZWVkczsgb3RoZXJ3aXNlCiAgICAgICogYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KICAgICAgKi8KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYSBDb25uZWN0aW9uIGhvbGRlci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uSG9sZGVyKENvbm5lY3Rpb24gY29uLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLmNvbiA9IGNvbjsKICAgICAgICAgdGhpcy5tYyAgPSBtYzsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gdGhpcyBob2xkZXIgb2JqZWN0LgotICAgICAqIAotICAgICAqIEByZXR1cm4JQ29ubmVjdGlvbiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIENvbm5lY3Rpb24gb2JqZWN0LgogICAgICAqLwogICAgIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbigpIHsKLSAgICAJcmV0dXJuIGNvbjsKKyAgICAgICAgcmV0dXJuIGNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBmbGFnIHRvIGluZGljYXRlIHRoYXQsIHRoZSBjb25uZWN0aW9uIGlzIHdyYXBwZWQgYWxyZWFkeSBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jd3JhcEZsYWcJCisgICAgICogQHBhcmFtICAgIHdyYXBGbGFnCiAgICAgICovCiAgICAgdm9pZCB3cmFwcGVkKGJvb2xlYW4gd3JhcEZsYWcpewogICAgICAgICB0aGlzLndyYXBwZWRBbHJlYWR5ID0gd3JhcEZsYWc7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB3aGV0aGVyIGl0IGlzIHdyYXBwZWQgYWxyZWFkeSBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXdyYXBwZWQgZmxhZy4KKyAgICAgKiBAcmV0dXJuICAgIHdyYXBwZWQgZmxhZy4KICAgICAgKi8KICAgICBib29sZWFuIGlzV3JhcHBlZCgpewogICAgICAgICByZXR1cm4gd3JhcHBlZEFscmVhZHk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHJlc3BvbnNpYmxlCiAgICAgICogZm9yIHRoaXMgY29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqLwogICAgIE1hbmFnZWRDb25uZWN0aW9uIGdldE1hbmFnZWRDb25uZWN0aW9uKCkgewogICAgICAgICByZXR1cm4gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVwbGFjZSB0aGUgYWN0dWFsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCB3aXRoIHRoZSBvbmUKLSAgICAgKiBzdXBwbGllZC4gQWxzbyByZXBsYWNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBsaW5rLiAgICAgCisgICAgICogc3VwcGxpZWQuIEFsc28gcmVwbGFjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gbGluay4KICAgICAgKgotICAgICAqIEBwYXJhbQljb24gPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQltYyAgPGNvZGU+IE1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIGNvbiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG1jICA8Y29kZT4gTWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICB2b2lkIGFzc29jaWF0ZUNvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24sIE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7Ci0gICAgCXRoaXMubWMgPSBtYzsKLSAgICAJdGhpcy5jb24gPSBjb247CisgICAgICAgIHRoaXMubWMgPSBtYzsKKyAgICAgICAgdGhpcy5jb24gPSBjb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2xlYXJzIGFsbCB3YXJuaW5ncyByZXBvcnRlZCBmb3IgdGhlIHVuZGVybHlpbmcgY29ubmVjdGlvbiAgb2JqZWN0LgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjbGVhcldhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsgICAgCi0JY2hlY2tWYWxpZGl0eSgpOworICAgIHB1YmxpYyB2b2lkIGNsZWFyV2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgY29uLmNsZWFyV2FybmluZ3MoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDbG9zZXMgdGhlIGxvZ2ljYWwgY29ubmVjdGlvbi4gICAgCisgICAgICogQ2xvc2VzIHRoZSBsb2dpY2FsIGNvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICAgIGlzQ2xvc2VkID0gdHJ1ZTsKLSAgICAgICAgbWMuY29ubmVjdGlvbkNsb3NlZChudWxsLCB0aGlzKTsgICAgICAgIAorICAgICAgICBtYy5jb25uZWN0aW9uQ2xvc2VkKG51bGwsIHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEludmFsaWRhdGVzIHRoaXMgb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGludmFsaWRhdGUoKSB7Ci0gICAgCXZhbGlkID0gZmFsc2U7CisgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2xvc2VzIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGludm9sdmVkIGluIHRoaXMuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwotICAgIHZvaWQgYWN0dWFsQ2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueyAgICAKKyAgICB2b2lkIGFjdHVhbENsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgICAgY29uLmNsb3NlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IHRoZSBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbW1pdCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5jb21taXQoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5jb21taXQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4gICAgIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KGludCByZXN1bHRTZXRUeXBlLCBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudChyZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRIb2xkYWJpbGl0eQlSZXN1bHRTZXQgSG9sZGFiaWxpdHkuICAgICAKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LiAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgICAgIAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LCAKLSAgICAJCQkJICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJICAgICAKKyAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgICAgICAJCQkgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CiAgICAgfQotIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGF1dG8tY29tbWl0IG1vZGUgZm9yIHRoZSB1bmRlcmx5aW5nIDxjb2RlPiBDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGN1cnJlbnQgc3RhdGUgb2YgY29ubmVjdGlvbidzIGF1dG8tY29tbWl0IG1vZGUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBnZXRBdXRvQ29tbWl0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRBdXRvQ29tbWl0KCk7Ci0gICAgfSAgIAotIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRBdXRvQ29tbWl0KCk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSB1bmRlcmx5aW5nIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCdzIGNhdGFsb2cgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JQ2F0YWxvZyBOYW1lLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIENhdGFsb2cgTmFtZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDYXRhbG9nKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uZ2V0Q2F0YWxvZygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZAogICAgICAqIHVzaW5nIHRoaXMgY29ubmVjdGlvbiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhvbGRhYmlsaXR5IHZhbHVlLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIGhvbGRhYmlsaXR5IHZhbHVlLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldEhvbGRhYmlsaXR5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuCWNvbi5nZXRIb2xkYWJpbGl0eSgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuICAgIGNvbi5nZXRIb2xkYWJpbGl0eSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+RGF0YWJhc2VNZXRhRGF0YTwvY29kZT5vYmplY3QgZnJvbSB0aGUgdW5kZXJseWluZwogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT5EYXRhYmFzZU1ldGFEYXRhPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YWJhc2VNZXRhRGF0YSBnZXRNZXRhRGF0YSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0TWV0YURhdGEoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0TWV0YURhdGEoKTsKICAgICB9Ci0gCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhpcyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QncyBjdXJyZW50IHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KICAgICAgKgogICAgICAqIEByZXR1cm4gVHJhbnNhY3Rpb24gbGV2ZWwKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIAorICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoCiAgICAgICogPGNvZGU+IENvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JVHlwZU1hcCBzZXQgaW4gdGhpcyBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgVHlwZU1hcCBzZXQgaW4gdGhpcyBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBNYXAgZ2V0VHlwZU1hcCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0VHlwZU1hcCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRUeXBlTWFwKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSB0aGUgZmlyc3Qgd2FybmluZyByZXBvcnRlZCBieSBjYWxscyBvbiB0aGUgdW5kZXJseWluZwogICAgICAqIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gRmlyc3QgPGNvZGU+IFNRTFdhcm5pbmc8L2NvZGU+IE9iamVjdCBvciBudWxsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNRTFdhcm5pbmcgZ2V0V2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldFdhcm5pbmdzKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldFdhcm5pbmdzKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHdoZXRoZXIgdW5kZXJseWluZyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLgogICAgICAqCi0gICAgICogQHJldHVybgl0cnVlIGlmIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyBjbG9zZWQsIGZhbHNlCi0gICAgICogCQlpZiBpdCBpcyBjbG9zZWQuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLCBmYWxzZQorICAgICAqICAgICAgICAgaWYgaXQgaXMgY2xvc2VkLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0Nsb3NlZCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAlyZXR1cm4gaXNDbG9zZWQ7CisgICAgICAgIHJldHVybiBpc0Nsb3NlZDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgd2hldGhlciB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyByZWFkLW9ubHkuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBpcyByZWFkLW9ubHksIGZhbHNlIG90aGVyLXdpc2UKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gaXMgcmVhZC1vbmx5LCBmYWxzZSBvdGhlci13aXNlCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzUmVhZE9ubHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmlzUmVhZE9ubHkoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uaXNSZWFkT25seSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiBTUUwgc3RhdGVtZW50IGludG8gdGhlIHN5c3RlbSdzIG5hdGl2ZSBTUUwgZ3JhbW1lci4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIHN0YXRlbWVudCAsIHRvIGJlIGNvbnZlcnRlZC4KLSAgICAgKiBAcmV0dXJuCUNvbnZlcnRlZCBTUUwgc3RyaW5nLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBzdGF0ZW1lbnQgLCB0byBiZSBjb252ZXJ0ZWQuCisgICAgICogQHJldHVybiAgICBDb252ZXJ0ZWQgU1FMIHN0cmluZy4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBuYXRpdmVTUUwoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5uYXRpdmVTUUwoc3FsKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ubmF0aXZlU1FMKHNxbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQogICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CiAgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKLSAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQotICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgICAgICAKLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCSAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgIAkJCSAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsKTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKKyAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKKyAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCiAgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKICAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsKICAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlhdXRvR2VuZXJhdGVkS2V5cyBhIGZsYWcgaW5kaWNhdGluZyBBdXRvR2VuZXJhdGVkS2V5cyBuZWVkIHRvIGJlIHJldHVybmVkLgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCBhdXRvR2VuZXJhdGVkS2V5cykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxhdXRvR2VuZXJhdGVkS2V5cyk7Ci0gICAgfSAgICAKLSAgICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JY29sdW1uSW5kZXhlcyBhbiBhcnJheSBvZiBjb2x1bW4gaW5kZXhlcyBpbmRpY2F0aW5nIHRoZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlCi0gICAgICoJCXJldHVybmVkIGZyb20gdGhlIGluc2VydGVkIHJvdyBvciByb3dzLgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludFtdIGNvbHVtbkluZGV4ZXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uSW5kZXhlcyk7Ci0gICAgfSAgICAgICAgICAKLSAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCWludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgICAgICAgCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgIAkJCQkgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7Ci0gICAgfSAgICAgICAgICAgCiAKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKICAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQljb2x1bW5OYW1lcyBOYW1lIG9mIGJvdW5kIGNvbHVtbnMuCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGF1dG9HZW5lcmF0ZWRLZXlzIGEgZmxhZyBpbmRpY2F0aW5nIEF1dG9HZW5lcmF0ZWRLZXlzIG5lZWQgdG8gYmUgcmV0dXJuZWQuCiAgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCBhdXRvR2VuZXJhdGVkS2V5cykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGF1dG9HZW5lcmF0ZWRLZXlzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgY29sdW1uSW5kZXhlcyBhbiBhcnJheSBvZiBjb2x1bW4gaW5kZXhlcyBpbmRpY2F0aW5nIHRoZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlCisgICAgICogICAgICAgIHJldHVybmVkIGZyb20gdGhlIGluc2VydGVkIHJvdyBvciByb3dzLgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludFtdIGNvbHVtbkluZGV4ZXMpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5JbmRleGVzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0SG9sZGFiaWxpdHkgICAgUmVzdWx0U2V0IEhvbGRhYmlsaXR5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBjb2x1bW5OYW1lcyBOYW1lIG9mIGJvdW5kIGNvbHVtbnMuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgU3RyaW5nW10gY29sdW1uTmFtZXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uTmFtZXMpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5OYW1lcyk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC01MzYsMTQxICs1MzYsMTQxIEBACiAgICAgLyoqCiAgICAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4gPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QgZnJvbSB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlzYXZlcG9pbnQJPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHNhdmVwb2ludCAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByZWxlYXNlU2F2ZXBvaW50KFNhdmVwb2ludCBzYXZlcG9pbnQpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yZWxlYXNlU2F2ZXBvaW50KHNhdmVwb2ludCk7Ci0gICAgfSAKLSAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5yZWxlYXNlU2F2ZXBvaW50KHNhdmVwb2ludCk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUm9sbHMgYmFjayB0aGUgY2hhbmdlcyBtYWRlIGluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLyAgICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJvbGxiYWNrKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucm9sbGJhY2soKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSb2xscyBiYWNrIHRoZSBjaGFuZ2VzIG1hZGUgYWZ0ZXIgdGhlIHNhdmVwb2ludC4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjayhTYXZlcG9pbnQgc2F2ZXBvaW50KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucm9sbGJhY2soc2F2ZXBvaW50KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5yb2xsYmFjayhzYXZlcG9pbnQpOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBhdXRvLWNvbW1taXQgbW9kZSBvZiB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCWF1dG9Db21taXQgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBhdXRvLWNvbW1pdCBtb2RlLiAgICAgCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBhdXRvQ29tbWl0IGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB0aGUgYXV0by1jb21taXQgbW9kZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0QXV0b0NvbW1pdChib29sZWFuIGF1dG9Db21taXQpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRBdXRvQ29tbWl0KGF1dG9Db21taXQpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldEF1dG9Db21taXQoYXV0b0NvbW1pdCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgY2F0YWxvZyBuYW1lIHRvIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QKICAgICAgKgotICAgICAqIEBwYXJhbQljYXRhbG9nCUNhdGFsb2cgbmFtZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGNhdGFsb2cgICAgQ2F0YWxvZyBuYW1lLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDYXRhbG9nKFN0cmluZyBjYXRhbG9nKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0Q2F0YWxvZyhjYXRhbG9nKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRDYXRhbG9nKGNhdGFsb2cpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFNldHMgdGhlIGhvbGRhYmlsaXR5IG9mIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gb2JqZWN0cyBjcmVhdGVkIAorICAgICAqIFNldHMgdGhlIGhvbGRhYmlsaXR5IG9mIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gb2JqZWN0cyBjcmVhdGVkCiAgICAgICogdXNpbmcgdGhpcyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JaG9sZGFiaWxpdHkJQSA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IGhvbGRhYmlsaXR5IGNvbnN0YW50Ci0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBob2xkYWJpbGl0eSAgICBBIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gaG9sZGFiaWxpdHkgY29uc3RhbnQKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0SG9sZGFiaWxpdHkoaW50IGhvbGRhYmlsaXR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgICAJY29uLnNldEhvbGRhYmlsaXR5KGhvbGRhYmlsaXR5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgICBjb24uc2V0SG9sZGFiaWxpdHkoaG9sZGFiaWxpdHkpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFB1dHMgdGhlIGNvbm5lY3Rpb24gaW4gcmVhZC1vbmx5IG1vZGUgYXMgYSBoaW50IHRvIHRoZSBkcml2ZXIgdG8gCisgICAgICogUHV0cyB0aGUgY29ubmVjdGlvbiBpbiByZWFkLW9ubHkgbW9kZSBhcyBhIGhpbnQgdG8gdGhlIGRyaXZlciB0bwogICAgICAqIHBlcmZvcm0gZGF0YWJhc2Ugb3B0aW1pemF0aW9ucy4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZWFkT25seSAgdHJ1ZSBlbmFibGVzIHJlYWQtb25seSBtb2RlLCBmYWxzZSBkaXNhYmxlcyBpdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHJlYWRPbmx5ICB0cnVlIGVuYWJsZXMgcmVhZC1vbmx5IG1vZGUsIGZhbHNlIGRpc2FibGVzIGl0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSZWFkT25seShib29sZWFuIHJlYWRPbmx5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0UmVhZE9ubHkocmVhZE9ubHkpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldFJlYWRPbmx5KHJlYWRPbmx5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGFuZCB1bm5hbWVkIHNhdmVwb2ludCBhbmQgcmV0dXJucyBhbiBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGF0LgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgogICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU2F2ZXBvaW50IHNldFNhdmVwb2ludCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uc2V0U2F2ZXBvaW50KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnNldFNhdmVwb2ludCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzYXZlcG9pbnQgd2l0aCB0aGUgbmFtZSBhbmQgcmV0dXJucyBhbiBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGF0LgogICAgICAqCi0gICAgICogQHBhcmFtCW5hbWUJTmFtZSBvZiB0aGUgc2F2ZXBvaW50LgotICAgICAqIEByZXR1cm4JPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBuYW1lICAgIE5hbWUgb2YgdGhlIHNhdmVwb2ludC4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU2F2ZXBvaW50IHNldFNhdmVwb2ludChTdHJpbmcgbmFtZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQobmFtZSk7Ci0gICAgfSAgICAKLSAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uc2V0U2F2ZXBvaW50KG5hbWUpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlsZXZlbCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBsZXZlbCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKGludCBsZXZlbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKGxldmVsKTsKLSAgICB9ICAgICAKLSAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbihsZXZlbCk7CisgICAgfQorCiAgICAgLyoqCi0gICAgICogSW5zdGFsbHMgdGhlIGdpdmVuIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzIHRoZSB0eW9lIG1hcCBmb3IgdGhpcyAKKyAgICAgKiBJbnN0YWxscyB0aGUgZ2l2ZW4gPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXMgdGhlIHR5b2UgbWFwIGZvciB0aGlzCiAgICAgICogPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWFwCTxjb2RlPk1hcDwvY29kZT4gYSBNYXAgb2JqZWN0IHRvIGluc3RhbGwuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBtYXAgICAgPGNvZGU+TWFwPC9jb2RlPiBhIE1hcCBvYmplY3QgdG8gaW5zdGFsbC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VHlwZU1hcChNYXAgbWFwKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7Ci0gICAgCWNvbi5zZXRUeXBlTWFwKG1hcCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0VHlwZU1hcChtYXApOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyB0aGUgdmFsaWRpdHkgb2YgdGhpcyBvYmplY3QKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgY2hlY2tWYWxpZGl0eSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAlpZiAoaXNDbG9zZWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJDb25uZWN0aW9uIGNsb3NlZCIpOwotICAgIAlpZiAoIXZhbGlkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiSW52YWxpZCBDb25uZWN0aW9uIik7Ci0gICAgCWlmKGFjdGl2ZSA9PSBmYWxzZSkgewotICAgIAkgICAgbWMuY2hlY2tJZkFjdGl2ZSh0aGlzKTsKLSAgICAJfQorICAgICAgICBpZiAoaXNDbG9zZWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJDb25uZWN0aW9uIGNsb3NlZCIpOworICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiSW52YWxpZCBDb25uZWN0aW9uIik7CisgICAgICAgIGlmKGFjdGl2ZSA9PSBmYWxzZSkgeworICAgICAgICAgICAgbWMuY2hlY2tJZkFjdGl2ZSh0aGlzKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGFjdGl2ZSBmbGFnIHRvIHRydWUKICAgICAgKgotICAgICAqIEBwYXJhbQlhY3R2CWJvb2xlYW4KKyAgICAgKiBAcGFyYW0gICAgYWN0diAgICBib29sZWFuCiAgICAgICovCiAgICAgdm9pZCBzZXRBY3RpdmUoYm9vbGVhbiBhY3R2KSB7CiAgICAgICAgIGFjdGl2ZSA9IGFjdHY7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IGFjN2U3NDguLmYwNjc1YTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0zMywxOSArMzMsMTkgQEAKICAqIFRoaXMgY2xhc3MgaXMgZXh0ZW5kZWQgYnkgdGhlIERhdGFTb3VyY2Ugc3BlY2lmaWMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZhY3RvcmllcwogICogYW5kIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGZvciB0aGUgPGNvZGU+RHJpdmVyTWFuYWdlcjwvY29kZT4uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIAotcHVibGljIGFic3RyYWN0IGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSwgCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LAogICAgIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKLSAgICAKKwogICAgIHByb3RlY3RlZCBEYXRhU291cmNlU3BlYyBzcGVjID0gbmV3IERhdGFTb3VyY2VTcGVjKCk7CiAgICAgcHJvdGVjdGVkIHRyYW5zaWVudCBEYXRhU291cmNlT2JqZWN0QnVpbGRlciBkc09iakJ1aWxkZXI7Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgamF2YS5pby5QcmludFdyaXRlciBsb2dXcml0ZXIgPSBudWxsOwogICAgIHByb3RlY3RlZCBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgcmEgPSBudWxsOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTU0LDggKzU0LDggQEAKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgQ29ubmVjdGlvbiBGYWN0b3J5IGluc3RhbmNlLiBUaGUgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uCiAgICAgICogb2YgdGhlIHJlc291cmNlIGFkYXB0ZXIgaXMgdXNlZCBoZXJlLgotICAgICAqIAotICAgICAqIEByZXR1cm4JR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGNyZWF0ZUNvbm5lY3Rpb25GYWN0b3J5KCkgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtNjMsMTYgKzYzLDE2IEBACiAgICAgICAgIH0KICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UgY2YgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UoCiAgICAgICAgICAgICAoamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KXRoaXMsIG51bGwpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIENvbm5lY3Rpb24gRmFjdG9yeSBpbnN0YW5jZS4gVGhlIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbgogICAgICAqIG9mIHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIgaXMgdXNlZCBoZXJlLgotICAgICAqIAotICAgICAqIEBwYXJhbQljeE1hbmFnZXIJPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHJldHVybglHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgorICAgICAqCisgICAgICogQHBhcmFtICAgIGN4TWFuYWdlciAgICA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcmV0dXJuICAgIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjcmVhdGVDb25uZWN0aW9uRmFjdG9yeShqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlciBjeE1hbmFnZXIpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTgwLDU1ICs4MCw1NSBAQAogICAgICAgICB9CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIGNmID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlKAogICAgICAgICAgICAgKGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSl0aGlzLCBjeE1hbmFnZXIpOwotICAgICAgICByZXR1cm4gY2Y7IAorICAgICAgICByZXR1cm4gY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIEVJUyByZXNvdXJjZQogICAgICAqIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCi0gICAgICogICAgICAgCSAgICAgICAgICAgICAJYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+Ci0gICAgICogICAgICAgCSAgICAgICAgICAgICAJb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQotICAgICAqICAgICAgIAkJCQljcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0Ci0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdCAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwKICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIC8qKgotICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0byAKKyAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8KICAgICAgKiBhbm90aGVyIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCW90aGVyCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCi0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQotICAgICAqCQlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBvdGhlciAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZQorICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQorICAgICAqICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgamF2YS5pby5QcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB7CiAgICAgICAgIHJldHVybiBsb2dXcml0ZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+c2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciBnZXRSZXNvdXJjZUFkYXB0ZXIoKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xMzYsMTEgKzEzNiwxMSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByYTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBoYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTQ4LDQxICsxNDgsNDEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc3BlYy5oYXNoQ29kZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgYSBtYXRjaGVkIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmcm9tIHRoZSBjYW5kaWRhdGUgCisgICAgICogUmV0dXJucyBhIG1hdGNoZWQgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZyb20gdGhlIGNhbmRpZGF0ZQogICAgICAqIHNldCBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0cy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29ubmVjdGlvblNldAk8Y29kZT5TZXQ8L2NvZGU+IG9mICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKgkJCQlvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCXN1YmplY3QJIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICoJCQlmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICoJCQkJZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCBpcyB0aGUgYmVzdCBtYXRjaCBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgYWNjZXNzaW5nIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPgotICAgICAqCQkJCQlwYXJhbWV0ZXIgb3IgdGhlIDxjb2RlPlNldDwvY29kZT4gb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICoJCQkJCW9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb25uZWN0aW9uU2V0ICAgIDxjb2RlPlNldDwvY29kZT4gb2YgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgIG9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICAgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiAgICAgICAgICAgIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZworICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiAgICAgICAgICAgICAgICBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IGlzIHRoZSBiZXN0IG1hdGNoIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBhY2Nlc3NpbmcgdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBvciB0aGUgPGNvZGU+U2V0PC9jb2RlPiBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgogICAgICAqLwotICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhqYXZhLnV0aWwuU2V0IGNvbm5lY3Rpb25TZXQsIAorICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhqYXZhLnV0aWwuU2V0IGNvbm5lY3Rpb25TZXQsCiAgICAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdCBzdWJqZWN0LCBDb25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbm5lY3Rpb25TZXQgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcywgc3ViamVjdCwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgIAorCiAgICAgICAgIGphdmEudXRpbC5JdGVyYXRvciBpdGVyID0gY29ubmVjdGlvblNldC5pdGVyYXRvcigpOwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBudWxsOwogICAgICAgICB3aGlsZShpdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtYyA9IChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24pIGl0ZXIubmV4dCgpOwogICAgICAgICAgICAgfSBjYXRjaChqYXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBuc2VlKSB7Ci0JICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pdGVyIik7CisgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pdGVyIik7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKG5zZWUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmKHBjID09IG51bGwgJiYgdGhpcy5lcXVhbHMobWMuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkpKSB7CkBAIC0xOTEsNyArMTkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZChtYyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYzsKICAgICAgICAgICAgICAgICB9IGNhdGNoKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7Ci0JICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfcmUiLCByZSk7CisgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfcmUiLCByZSk7CiAgICAgICAgICAgICAgICAgICAgIG1jLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKHJlLCBudWxsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYoU2VjdXJpdHlVdGlscy5pc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKHBjLCBtYy5nZXRQYXNzd29yZENyZWRlbnRpYWwoKSkgPT0gdHJ1ZSkgewpAQCAtMjAwLDQ1ICsyMDAsNDUgQEAKICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZChtYyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYzsKICAgICAgICAgICAgICAgICB9IGNhdGNoKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7Ci0JICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5yZSIpOworICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMucmUiKTsKICAgICAgICAgICAgICAgICAgICAgbWMuY29ubmVjdGlvbkVycm9yT2NjdXJyZWQocmUsIG51bGwpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvL0dKQ0lOVAogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyB0byBiZSB2YWxpZGF0ZWQgb3Igbm90CiAgICAgICogYW5kIHZhbGlkYXRlcyBpdCBvciByZXR1cm5zLgotICAgICAqIAotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAJCWlmIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIKICAgICAgKi8KICAgICB2b2lkIGlzVmFsaWQoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogCiAgICAgICAgIGlmKG1jLmlzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpIHsKLQkgICAgcmV0dXJuOworICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAKLSAgICAgICAgYm9vbGVhbiBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID0gCisKKyAgICAgICAgYm9vbGVhbiBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID0KICAgICAgICAgICAgIChuZXcgQm9vbGVhbihzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKS50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7CiAgICAgICAgIGlmKCBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID09IGZhbHNlIHx8IG1jID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIG1jLmNoZWNrSWZWYWxpZCgpOwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGFib3ZlIGNhbGwgY2hlY2tzIGlmIHRoZSBhY3R1YWwgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAgICAgKiBpcyB1c2FibGUgb3Igbm90LgogICAgICAgICAgKi8KICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKHZhbGlkYXRpb25NZXRob2QuZXF1YWxzKCJhdXRvLWNvbW1pdCIpID09IHRydWUpIHsKICAgICAgICAgICAgIGlzVmFsaWRCeUF1dG9Db21taXQoY29uKTsKICAgICAgICAgfSBlbHNlIGlmKHZhbGlkYXRpb25NZXRob2QuZXF1YWxzSWdub3JlQ2FzZSgibWV0YS1kYXRhIikgPT0gdHJ1ZSkgewpAQCAtMjQ5LDI4ICsyNDksMjggQEAKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIiKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IGNoZWNraW5nIGl0cyBhdXRvIGNvbW1pdCBwcm9wZXJ0eS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5QXV0b0NvbW1pdChqYXZhLnNxbC5Db25uZWN0aW9uIGNvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgLy8gTm90aWNlIHRoYXQgdXNpbmcgc29tZXRoaW5nIGxpa2UgCisgICAgICAgICAgIC8vIE5vdGljZSB0aGF0IHVzaW5nIHNvbWV0aGluZyBsaWtlCiAgICAgICAgICAgIC8vIGRiQ29uLnNldEF1dG9Db21taXQoZGJDb24uZ2V0QXV0b0NvbW1pdCgpKSB3aWxsIGNhdXNlIHByb2JsZW1zIHdpdGgKICAgICAgICAgICAgLy8gc29tZSBkcml2ZXJzIGxpa2Ugc3liYXNlCi0gICAgICAgICAgIC8vIFdlIGRvIG5vdCB2YWxpZGF0ZSBjb25uZWN0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IGVubGlzdGVkIAotCSAgIC8vaW4gYSB0cmFuc2FjdGlvbiAKLQkgICAvLyBXZSBjeWNsZSBhdXRvY29tbWl0IHRvIHRydWUgYW5kIGZhbHNlIHRvIGJ5LXBhc3MgZHJpdmVycyB0aGF0IAotCSAgIC8vIG1pZ2h0IGNhY2hlIHRoZSBjYWxsIHRvIHNldCBhdXRvY29taXR0CisgICAgICAgICAgIC8vIFdlIGRvIG5vdCB2YWxpZGF0ZSBjb25uZWN0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IGVubGlzdGVkCisgICAgICAgLy9pbiBhIHRyYW5zYWN0aW9uCisgICAgICAgLy8gV2UgY3ljbGUgYXV0b2NvbW1pdCB0byB0cnVlIGFuZCBmYWxzZSB0byBieS1wYXNzIGRyaXZlcnMgdGhhdAorICAgICAgIC8vIG1pZ2h0IGNhY2hlIHRoZSBjYWxsIHRvIHNldCBhdXRvY29taXR0CiAgICAgICAgICAgIC8vIEFsc28gbm90aWNlIHRoYXQgc29tZSBYQSBkYXRhIHNvdXJjZXMgd2lsbCB0aHJvdyBhbmQgZXhjZXB0aW9uIGlmCiAgICAgICAgICAgIC8vIHlvdSB0cnkgdG8gY2FsbCBzZXRBdXRvQ29tbWl0LCBmb3IgdGhlbSB0aGlzIG1ldGhvZCBpcyBub3QgcmVjb21tZW5kZWQKIApAQCAtMjgxLDkwICsyODEsOTAgQEAKICAgICAgICAgICAgICAgICBjb24ucm9sbGJhY2soKTsgLy8gcHJldmVudHMgdW5jb21wbGV0ZWQgdHJhbnNhY3Rpb24gZXhjZXB0aW9ucwogICAgICAgICAgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KHRydWUpOwogICAgICAgICAgICB9Ci0gICAgICAgIAotCSAgIGNvbi5zZXRBdXRvQ29tbWl0KGFjKTsKKworICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGFjKTsKIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2F1dG9jb21taXQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYXV0b2NvbW1pdCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IGNoZWNraW5nIGl0cyBtZXRhIGRhdGEuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeU1ldGFEYXRhKGphdmEuc3FsLkNvbm5lY3Rpb24gY29uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgamF2YS5zcWwuRGF0YWJhc2VNZXRhRGF0YSBkbWQgPSBjb24uZ2V0TWV0YURhdGEoKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgImdldHRpbmcgdGhlIG1ldGEgZGF0YSBmYWlsZWQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBxdWVyeWluZyBhIHRhYmxlLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHBhcmFtCXRhYmxlTmFtZQl0YWJsZSB3aGljaCBzaG91bGQgYmUgcXVlcmllZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEBwYXJhbSAgICB0YWJsZU5hbWUgICAgdGFibGUgd2hpY2ggc2hvdWxkIGJlIHF1ZXJpZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeVRhYmxlUXVlcnkoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24sIAorICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeVRhYmxlUXVlcnkoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24sCiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBqYXZhLnNxbC5TdGF0ZW1lbnQgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIGphdmEuc3FsLlJlc3VsdFNldCBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NICIgKyB0YWJsZU5hbWUpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2V4ZWN1dGUiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZXhlY3V0ZSIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInF1ZXJ5aW5nIHRoZSB0YWJsZSAiICsgdGFibGVOYW1lICsgIiBmYWlsZWQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBpc29sYXRpb24gbGV2ZWwgc3BlY2lmaWVkIGluIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CiAgICAgICogZm9yIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gcGFzc2VkLgogICAgICAqCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCi0gICAgICoJCQkJCW9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCisgICAgICogICAgICAgICAgICAgICAgICAgIG9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgc2V0SXNvbGF0aW9uKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJCi0gICAgCWphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgIAlpZihjb24gPT0gbnVsbCkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCQotICAgIAlTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKLSAgICAJaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKLSAgICAJICAgIHRyeSB7Ci0gICAgCSAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOwotICAgIAkgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gY291bGQgIgotICAgIAkgICAgICAgICAgICArICJub3QgYmUgc2V0OiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgfQotICAgIAl9CisKKyAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7CisgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKKyAgICAgICAgaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOworICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gY291bGQgIgorICAgICAgICAgICAgICAgICAgICArICJub3QgYmUgc2V0OiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVzZXRzIHRoZSBpc29sYXRpb24gbGV2ZWwgZm9yIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gcGFzc2VkLgogICAgICAqIElmIHRoZSB0cmFuc2FjdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmUKQEAgLTM3MywzODIgKzM3MywzODIgQEAKICAgICAgKiBpc29sYXRpb24gbGV2ZWwgZnJvbSB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQuIEVsc2UsCiAgICAgICogaXQgc2V0cyBpdCB0byB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIHBhc3NlZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAcGFyYW0JdHJhbklzb2wJaW50Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKLSAgICAgKgkJCQkJb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRyYW5Jc29sICAgIGludAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCisgICAgICogICAgICAgICAgICAgICAgICAgIG9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCiAgICAgICovCiAgICAgdm9pZCByZXNldElzb2xhdGlvbihjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMsIGludCB0cmFuSXNvbCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJCi0gICAgCWphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgIAlpZihjb24gPT0gbnVsbCkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCQotICAgIAlTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKLSAgICAJaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwotICAgIAkgICAgCi0gICAgCSAgICBpZihndWFyYW50ZWVJc29sYXRpb25MZXZlbCAhPSBudWxsICYmIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgICAgICBib29sZWFuIGd1YXJhbnRlZSA9IChuZXcgQm9vbGVhbihndWFyYW50ZWVJc29sYXRpb25MZXZlbC50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgCSAgICAgICAgCi0gICAgCSAgICAgICAgaWYoZ3VhcmFudGVlKSB7Ci0gICAgCSAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7Ci0gICAgCSAgICAgICAgICAgIHRyeSB7Ci0gICAgCSAgICAgICAgICAgICAgICBpZih0cmFuSXNvbGF0aW9uSW50ICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOwotICAgIAkgICAgICAgICAgICAgICAgfQotICAgIAkgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgotICAgIAkgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgfSBlbHNlIHsKLSAgICAJICAgICAgICAgICAgdHJ5IHsKLSAgICAJICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sKTsKLSAgICAJICAgICAgICAgICAgICAgIH0KLSAgICAJICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKLSAgICAJICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgICAgICAgICAgfQotICAgIAkgICAgICAgIH0KLSAgICAJICAgIH0KLSAgICAJfQorCisgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOworICAgICAgICBpZihjb24gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIFN0cmluZyBndWFyYW50ZWVJc29sYXRpb25MZXZlbCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKKworICAgICAgICAgICAgaWYoZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgIT0gbnVsbCAmJiBndWFyYW50ZWVJc29sYXRpb25MZXZlbC5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBndWFyYW50ZWUgPSAobmV3IEJvb2xlYW4oZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOworCisgICAgICAgICAgICAgICAgaWYoZ3VhcmFudGVlKSB7CisgICAgICAgICAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0cmFuSXNvbGF0aW9uSW50ICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CisgICAgICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGludGVnZXIgZXF1aXZhbGVudCBvZiB0aGUgc3RyaW5nIHNwZWNpZnlpbmcKICAgICAgKiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXRyYW5Jc29sYXRpb24Jc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbiBsZXZlbAotICAgICAqIEByZXR1cm4JdHJhbklzb2xhdGlvbkludAl0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gY29uc3RhbnQKLSAgICAgKgkJCQkJZm9yIHRoZSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uLgorICAgICAqIEBwYXJhbSAgICB0cmFuSXNvbGF0aW9uICAgIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5Jc29sYXRpb25JbnQgICAgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGNvbnN0YW50CisgICAgICogICAgICAgICAgICAgICAgICAgIGZvciB0aGUgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbi4KICAgICAgKi8KICAgICBwcml2YXRlIGludCBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludChTdHJpbmcgdHJhbklzb2xhdGlvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLXVuY29tbWl0dGVkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfVU5DT01NSVRURUQ7Ci0gICAgCX0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtY29tbWl0dGVkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfQ09NTUlUVEVEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZXBlYXRhYmxlLXJlYWQiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVQRUFUQUJMRV9SRUFEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJzZXJpYWxpemFibGUiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fU0VSSUFMSVpBQkxFOwotICAgIAl9IGVsc2UgewotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJJbnZhbGlkIHRyYW5zYWN0aW9uIGlzb2xhdGlvbjsgdGhlIHRyYW5zYWN0aW9uICIKLSAgICAJICAgICAgICArICJpc29sYXRpb24gbGV2ZWwgY2FuIGJlIGVtcHR5IG9yIGFueSBvZiB0aGUgZm9sbG93aW5nOiAiCi0gICAgCSAgICAgICAgICAgICsgInJlYWQtdW5jb21taXR0ZWQsIHJlYWQtY29tbWl0dGVkLCByZXBlYXRhYmxlLXJlYWQsIHNlcmlhbGl6YWJsZSIpOwotICAgIAl9CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC11bmNvbW1pdHRlZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX1VOQ09NTUlUVEVEOworICAgICAgICB9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLWNvbW1pdHRlZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX0NPTU1JVFRFRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVwZWF0YWJsZS1yZWFkIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFUEVBVEFCTEVfUkVBRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgic2VyaWFsaXphYmxlIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1NFUklBTElaQUJMRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiSW52YWxpZCB0cmFuc2FjdGlvbiBpc29sYXRpb247IHRoZSB0cmFuc2FjdGlvbiAiCisgICAgICAgICAgICAgICAgKyAiaXNvbGF0aW9uIGxldmVsIGNhbiBiZSBlbXB0eSBvciBhbnkgb2YgdGhlIGZvbGxvd2luZzogIgorICAgICAgICAgICAgICAgICAgICArICJyZWFkLXVuY29tbWl0dGVkLCByZWFkLWNvbW1pdHRlZCwgcmVwZWF0YWJsZS1yZWFkLCBzZXJpYWxpemFibGUiKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCW91dAk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgb3V0ICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihqYXZhLmlvLlByaW50V3JpdGVyIG91dCkgewogICAgICAgICBsb2dXcml0ZXIgPSBvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBhc3NvY2lhdGVkIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gSmF2YUJlYW4uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmEJPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPmdldFJlc291cmNlQWRhcHRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcmEgICAgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlc291cmNlQWRhcHRlcihqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgcmEpIHsKLSAgICAgICAgdGhpcy5yYSA9IHJhOyAgIAorICAgICAgICB0aGlzLnJhID0gcmE7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHVzZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFVzZXIoU3RyaW5nIHVzZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUsIHVzZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHJldHVybgl1c2VyCisgICAgICogQHJldHVybiAgICB1c2VyCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR1c2VyKFN0cmluZyB1c2VyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FLCB1c2VyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEByZXR1cm4JdXNlcgorICAgICAqIEByZXR1cm4gICAgdXNlcgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dXNlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHBhcmFtCXBhc3N3ZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBhc3N3ZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UGFzc3dvcmQoU3RyaW5nIHBhc3N3ZCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCwgcGFzc3dkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHJldHVybglwYXNzd2QKKyAgICAgKiBAcmV0dXJuICAgIHBhc3N3ZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFzc3dvcmQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEBwYXJhbQlwYXNzd2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwYXNzd2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHBhc3N3b3JkKFN0cmluZyBwYXNzd2QpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQsIHBhc3N3ZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEByZXR1cm4JcGFzc3dkCisgICAgICogQHJldHVybiAgICBwYXNzd2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2xhc3NOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY2xhc3NOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDbGFzc05hbWUoU3RyaW5nIGNsYXNzTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUsIGNsYXNzTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEByZXR1cm4JY2xhc3NOYW1lCisgICAgICogQHJldHVybiAgICBjbGFzc05hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENsYXNzTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEBwYXJhbQljbGFzc05hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjbGFzc05hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGNsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSwgY2xhc3NOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHJldHVybgljbGFzc05hbWUKKyAgICAgKiBAcmV0dXJuICAgIGNsYXNzTmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Y2xhc3NOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEBwYXJhbQljb25WbGRSZXEJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjb25WbGRSZXEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoU3RyaW5nIGNvblZsZFJlcSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVELCBjb25WbGRSZXEpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHJldHVybgljb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHBhcmFtCWNvblZsZFJlcQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNvblZsZFJlcSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Y29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZChTdHJpbmcgY29uVmxkUmVxKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQsIGNvblZsZFJlcSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdmFsaWRhdGlvbiBtZXRob2QgcmVxdWlyZWQKICAgICAgKgotICAgICAqIEBwYXJhbQl2YWxpZGF0aW9uTWV0aG9kCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdmFsaWRhdGlvbk1ldGhvZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VmFsaWRhdGlvbk1ldGhvZChTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCkgewogICAgICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCwgdmFsaWRhdGlvbk1ldGhvZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgY29ubmVjdGlvbiB2YWxpZGF0aW9uIG1ldGhvZCB0eXBlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXZhbGlkYXRpb24gbWV0aG9kCisgICAgICogQHJldHVybiAgICB2YWxpZGF0aW9uIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsaWRhdGlvbk1ldGhvZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHZhbGlkYXRpb24gbWV0aG9kIHJlcXVpcmVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsaWRhdGlvbk1ldGhvZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHZhbGlkYXRpb25NZXRob2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHZhbGlkYXRpb25NZXRob2QoU3RyaW5nIHZhbGlkYXRpb25NZXRob2QpIHsKICAgICAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QsIHZhbGlkYXRpb25NZXRob2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBtZXRob2QgdHlwZQogICAgICAqCi0gICAgICogQHJldHVybgl2YWxpZGF0aW9uIG1ldGhvZAorICAgICAqIEByZXR1cm4gICAgdmFsaWRhdGlvbiBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHZhbGlkYXRpb25NZXRob2QoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCXRhYmxlCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdGFibGUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25UYWJsZU5hbWUoU3RyaW5nIHRhYmxlKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUsIHRhYmxlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgl0YWJsZQorICAgICAqIEByZXR1cm4gICAgdGFibGUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbGlkYXRpb25UYWJsZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCXRhYmxlCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdGFibGUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHZhbGlkYXRpb25UYWJsZU5hbWUoU3RyaW5nIHRhYmxlKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUsIHRhYmxlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgl0YWJsZQorICAgICAqIEByZXR1cm4gICAgdGFibGUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHZhbGlkYXRpb25UYWJsZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEBwYXJhbQl0cm5Jc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cm5Jc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKFN0cmluZyB0cm5Jc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04sIHRybklzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEBwYXJhbQl0cm5Jc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cm5Jc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHRyYW5zYWN0aW9uSXNvbGF0aW9uKFN0cmluZyB0cm5Jc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04sIHRybklzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR0cmFuc2FjdGlvbklzb2xhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZAogICAgICAqCi0gICAgICogQHBhcmFtCWd1YXJhbnRlZUlzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGd1YXJhbnRlZUlzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCwgZ3VhcmFudGVlSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQorICAgICAqIEByZXR1cm4gICAgaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQKICAgICAgKgotICAgICAqIEBwYXJhbQlndWFyYW50ZWVJc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBndWFyYW50ZWVJc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKFN0cmluZyBndWFyYW50ZWVJc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwsIGd1YXJhbnRlZUlzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKKyAgICAgKiBAcmV0dXJuICAgIGlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQppbmRleCA1NTViZTc3Li5lYTU0MDc2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQpAQCAtMjYsOCArMjYsOCBAQAogLyoqCiAgKiA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDUKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzA1CisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgUmVzb3VyY2VBZGFwdGVyIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHsKIApAQCAtMzcsNTIgKzM3LDUyIEBACiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBlbmRwb2ludEFjdGl2YXRpb24KICAgICAgKiB3aGljaCBqdXN0IHRocm93cyA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWVmCTxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCWFzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgotICAgICAqIEB0aHJvd3MJPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtZWYgICAgPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgYXMgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kcG9pbnRBY3RpdmF0aW9uKE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgbWVmLCBBY3RpdmF0aW9uU3BlYyBhcykgdGhyb3dzIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIlRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgSkRCQyBjb25uZWN0b3IiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBtZXRob2QgaW1wbGVtZW50YXRpb24gZm9yIGVuZHBvaW50RGVhY3RpdmF0aW9uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWVmCTxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCWFzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtZWYgICAgPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgYXMgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kcG9pbnREZWFjdGl2YXRpb24oTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBtZWYsIEFjdGl2YXRpb25TcGVjIGFzKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBnZXRYQVJlc291cmNlcwogICAgICAqIHdoaWNoIGp1c3QgdGhyb3dzIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcGVjcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4gYXJyYXkKLSAgICAgKiBAdGhyb3dzCTxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc3BlY3MgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+IGFycmF5CisgICAgICogQHRocm93cyAgICA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKSB0aHJvd3MgTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiVGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBKREJDIGNvbm5lY3RvciIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IGltcGxlbWVudGF0aW9uIG9mIHN0YXJ0IG1ldGhvZAogICAgICAqCi0gICAgICogQHBhcmFtCWN0eAk8Y29kZT5Cb290c3RyYXBDb250ZXh0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjdHggICAgPGNvZGU+Qm9vdHN0cmFwQ29udGV4dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdGFydChCb290c3RyYXBDb250ZXh0IGN0eCkgdGhyb3dzIFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNvdXJjZSBBZGFwdGVyIGlzIHN0YXJ0aW5nIHdpdGggY29uZmlndXJhdGlvbiA6IiArIHJhUHJvcCk7CiAgICAgICAgIGlmIChyYVByb3AgPT0gbnVsbCB8fCAhcmFQcm9wLmVxdWFscygiVkFMSUQiKSkgewotCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIlJlc291cmNlIGFkYXB0ZXIgY2Fubm90IHN0YXJ0LiBJdCBpcyBjb25maWd1cmVkIGFzIDogIiArIHJhUHJvcCk7Ci0JfSAKKyAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJSZXNvdXJjZSBhZGFwdGVyIGNhbm5vdCBzdGFydC4gSXQgaXMgY29uZmlndXJlZCBhcyA6ICIgKyByYVByb3ApOwogICAgIH0KLSAgICAKKyAgICB9CisKICAgICAvKioKICAgICAgKiBFbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBzdG9wIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0b3AoKSB7Ci0gICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRSQVByb3BlcnR5KFN0cmluZyBzKSB7CkBAIC05Miw1ICs5Miw1IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRSQVByb3BlcnR5KCkgewogICAgICAgICByZXR1cm4gcmFQcm9wOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCmluZGV4IDVlMTRkNDQuLmZmMGYwMmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9IiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvc3BpIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTI5LDU1ICsyOSw1NSBAQAogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxNCI+Ci0gICAgCQotICAgIAk8bWtkaXIgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiLz4KLSAgICAJCi0JPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiIGJhc2VkaXI9IiR7Y2xhc3MuZGlyfSIKKworICAgICAgICA8bWtkaXIgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiLz4KKworICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCiAgICAgICAgIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosIGNvbS9zdW4vZ2pjL3V0aWwvKiovKiwgY29tL3N1bi9namMvY29tbW9uLyoqLyoiIGV4Y2x1ZGVzPSJjb20vc3VuL2dqYy9jY2kvKiovKixjb20vc3VuL2dqYy9zcGkvMS40LyoqLyoiLz4KLSAgICAgICAgCisKICAgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWNwLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1jcC54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEteGEueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS14YS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZG0ueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kbS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZHMueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kcy54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8ZGVsZXRlIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9jb20iLz4KLSAgIAk8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIvPgotICAgCTxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIvPgotICAgCQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8ZGVsZXRlIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9jb20iLz4KKyAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIvPgorICAgICAgIDxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIvPgorCiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTMiLz4KLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDE0LCBidWlsZDEzIi8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxNCwgYnVpbGQxMyIvPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sCmluZGV4IDc5ZmI5MzMuLmE3ZDM1YmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwKQEAgLTIyLDY5ICsyMiw2OSBAQAogICAgICAgICAgICB2ZXJzaW9uPSIxLjUiPgogCiAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgotICAgIDwhLS0gVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYSAKKyAgICA8IS0tIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEKICAgICAgICAgIGRlc2NyaXB0aW9uIGZvciB0aGUgcmVzb3VyY2UgYWRhcHRlci4KICAgICAtLT4KICAgICA8ZGVzY3JpcHRpb24+UmVzb3VyY2UgYWRhcHRlciB3cmFwcGluZyBEYXRhc291cmNlIGltcGxlbWVudGF0aW9uIG9mIGRyaXZlcjwvZGVzY3JpcHRpb24+Ci0gICAgCisKICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkaXNwbGF5LW5hbWUiIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgotICAgIDwhLS0gVGhlIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhIG5hbWUgdGhhdCAKKyAgICA8IS0tIFRoZSBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYSBuYW1lIHRoYXQKICAgICAgICAgIGlzIGludGVuZGVkIHRvIGJlIGRpc3BsYXllZCBieSB0b29scy4KICAgICAtLT4KICAgICA8ZGlzcGxheS1uYW1lPkRhdGFTb3VyY2UgUmVzb3VyY2UgQWRhcHRlcjwvZGlzcGxheS1uYW1lPgotICAgIAorCiAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiaWNvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+CiAgICAgPCEtLSBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxpY29uPgotICAgICAgICAgICAgVGhpcyAic21hbGwtaWNvbiIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UuIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIAotICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgxNiB4IDE2KSAKKyAgICAgICAgICAgIFRoaXMgInNtYWxsLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgxNiB4IDE2KQogICAgICAgICAgICAgaWNvbiAtIEpQRUcgb3IgR0lGIGltYWdlLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgICAgICA8c21hbGwtaWNvbj5zbWFsbGljb24uanBnPC9zbWFsbC1pY29uPgotICAgICAgICAKLSAgICAgICAgICAgIFRoaXMgImxhcmdlLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSAKLSAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMzIgeCAzMikgCisKKyAgICAgICAgICAgIFRoaXMgImxhcmdlLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgzMiB4IDMyKQogICAgICAgICAgICAgaWNvbiAtIEpQRUcgb3IgR0lGIGltYWdlLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCi0gICAgICAgICAgICA8bGFyZ2UtaWNvbj5sYXJnZWljb24uanBnPC9sYXJnZS1pY29uPiAgIAorICAgICAgICAgICAgPGxhcmdlLWljb24+bGFyZ2VpY29uLmpwZzwvbGFyZ2UtaWNvbj4KICAgICAgICAgPC9pY29uPgogICAgIC0tPgogICAgIDxpY29uPgogICAgICAgICA8c21hbGwtaWNvbj48L3NtYWxsLWljb24+Ci0gICAgICAgIDxsYXJnZS1pY29uPjwvbGFyZ2UtaWNvbj4gICAKKyAgICAgICAgPGxhcmdlLWljb24+PC9sYXJnZS1pY29uPgogICAgIDwvaWNvbj4KLSAgICAKKwogICAgIDwhLS0gVGhlICJ2ZW5kb3ItbmFtZSIgZWxlbWVudCBzaG91bGQgb2NjdXIgZXhhY3RseSBvbmNlLiAtLT4KICAgICA8IS0tIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGRyaXZlciB2ZW5kb3IuIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgPHZlbmRvci1uYW1lPlhZWiBJTkMuPC92ZW5kb3ItbmFtZT4KICAgICAtLT4KICAgICA8dmVuZG9yLW5hbWU+U3VuIE1pY3Jvc3lzdGVtczwvdmVuZG9yLW5hbWU+Ci0gICAgCisKICAgICA8IS0tIFRoZSAiZWlzLXR5cGUiIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGV4YWN0bHkgb25jZS4gLS0+Ci0gICAgPCEtLSBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSBkYXRhYmFzZSwgZm9yIGV4YW1wbGUgdGhlIHByb2R1Y3QgbmFtZSBvZiAKKyAgICA8IS0tIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIGRhdGFiYXNlLCBmb3IgZXhhbXBsZSB0aGUgcHJvZHVjdCBuYW1lIG9mCiAgICAgICAgICB0aGUgZGF0YWJhc2UgaW5kZXBlbmRlbnQgb2YgYW55IHZlcnNpb24gaW5mb3JtYXRpb24uIFRoZSBmb2xsb3dpbmcKICAgICAgICAgIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxlaXMtdHlwZT5YWVo8L2Vpcy10eXBlPgogICAgIC0tPgogICAgIDxlaXMtdHlwZT5EYXRhYmFzZTwvZWlzLXR5cGU+Ci0gICAgCisKICAgICA8IS0tIFRoZSAicmVzb3VyY2VhZGFwdGVyLXZlcnNpb24iIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGV4YWN0bHkgb25jZS4gLS0+Ci0gICAgPCEtLSBUaGlzIHNwZWNpZmllcyBhIHN0cmluZyBiYXNlZCB2ZXJzaW9uIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGZyb20gCisgICAgPCEtLSBUaGlzIHNwZWNpZmllcyBhIHN0cmluZyBiYXNlZCB2ZXJzaW9uIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGZyb20KICAgICAgICAgIHRoZSBkcml2ZXIgdmVuZG9yLiBUaGUgZGVmYXVsdCBpcyBiZWluZyBzZXQgYXMgMS4wLiBUaGUgZHJpdmVyCiAgICAgICAgICB2ZW5kb3IgY2FuIGNoYW5nZSBpdCBhcyByZXF1aXJlZC4KICAgICAtLT4KICAgICA8cmVzb3VyY2VhZGFwdGVyLXZlcnNpb24+MS4wPC9yZXNvdXJjZWFkYXB0ZXItdmVyc2lvbj4KLSAgICAKKwogICAgIDwhLS0gVGhpcyAibGljZW5zZSIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UgLS0+CiAgICAgPCEtLSBUaGlzIHNwZWNpZmllcyBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzIGZvciB0aGUgcmVzb3VyY2UgYWRhcHRlciBtb2R1bGUuCiAgICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxsaWNlbnNlPgogICAgICAgICAgICAgVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBpbmNsdWRpbmcgMC4KICAgICAgICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gCi0gICAgICAgICAgICAgICAgcHJvdmlkZSBhIGRlc2NyaXB0aW9uIGZvciB0aGUgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBvZiB0aGUgCi0gICAgICAgICAgICAgICAgcmVzb3VyY2UgYWRhcHRlciBsaWtlIGR1cmF0aW9uIG9mIGxpY2Vuc2UsIG51bWJlcm9mIGNvbm5lY3Rpb24gCisgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvCisgICAgICAgICAgICAgICAgcHJvdmlkZSBhIGRlc2NyaXB0aW9uIGZvciB0aGUgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBvZiB0aGUKKyAgICAgICAgICAgICAgICByZXNvdXJjZSBhZGFwdGVyIGxpa2UgZHVyYXRpb24gb2YgbGljZW5zZSwgbnVtYmVyb2YgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9ucy4KICAgICAgICAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgICAgIAorCiAgICAgICAgICAgICBUaGlzIHNwZWNpZmllcyB3aGV0aGVyIGEgbGljZW5zZSBpcyByZXF1aXJlZCB0byBkZXBsb3kgYW5kIHVzZSB0aGUgcmVzb3VyY2UgYWRhcHRlci4KICAgICAgICAgICAgIERlZmF1bHQgaXMgZmFsc2UuCiAgICAgICAgICAgICA8bGljZW5zZS1yZXF1aXJlZD5mYWxzZTwvbGljZW5zZS1yZXF1aXJlZD4KQEAgLTkzLDI0ICs5MywyNCBAQAogICAgIDxsaWNlbnNlPgogICAgICAgICA8bGljZW5zZS1yZXF1aXJlZD5mYWxzZTwvbGljZW5zZS1yZXF1aXJlZD4KICAgICA8L2xpY2Vuc2U+Ci0gICAgCisKICAgICA8cmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAKLSAgICAgICAgPCEtLSAKLSAgICAgICAgICAgIFRoZSAiY29uZmlnLXByb3BlcnR5IiBlbGVtZW50cyBjYW4gaGF2ZSB6ZXJvIG9yIG1vcmUgImRlc2NyaXB0aW9uIiAKKworICAgICAgICA8IS0tCisgICAgICAgICAgICBUaGUgImNvbmZpZy1wcm9wZXJ0eSIgZWxlbWVudHMgY2FuIGhhdmUgemVybyBvciBtb3JlICJkZXNjcmlwdGlvbiIKICAgICAgICAgICAgIGVsZW1lbnRzLiBUaGUgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBhcmUgbm90IGJlaW5nIGluY2x1ZGVkCiAgICAgICAgICAgICBpbiB0aGUgImNvbmZpZy1wcm9wZXJ0eSIgZWxlbWVudHMgYmVsb3cuIFRoZSBkcml2ZXIgdmVuZG9yIGNhbgogICAgICAgICAgICAgYWRkIHRoZW0gYXMgcmVxdWlyZWQuCiAgICAgICAgIC0tPgotICAgICAgICAKKwogICAgICAgICA8cmVzb3VyY2VhZGFwdGVyLWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5SZXNvdXJjZUFkYXB0ZXI8L3Jlc291cmNlYWRhcHRlci1jbGFzcz4KLSAgICAgICAgCisKICAgICAgICAgPG91dGJvdW5kLXJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgCisKICAgICAgICAgICAgIDxjb25uZWN0aW9uLWRlZmluaXRpb24+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8bWFuYWdlZGNvbm5lY3Rpb25mYWN0b3J5LWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvbWFuYWdlZGNvbm5lY3Rpb25mYWN0b3J5LWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiB0aGVzZSBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+U2VydmVyTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CkBAIC0xMjIsODYgKzEyMiw4NiBAQAogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+OTA5MjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Vc2VyPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPkRCVVNFUjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5QYXNzd29yZDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5EQlBBU1NXT1JEPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkRhdGFiYXNlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5qZGJjOnBvaW50YmFzZTpzZXJ2ZXI6Ly9sb2NhbGhvc3Q6OTA5Mi9zcWUtc2FtcGxlcyxuZXc8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RGF0YVNvdXJjZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkRlc2NyaXB0aW9uPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPk9yYWNsZSB0aGluIGRyaXZlciBEYXRhc291cmNlPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5OZXR3b3JrUHJvdG9jb2w8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlJvbGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Mb2dpblRpbWVPdXQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Ecml2ZXJQcm9wZXJ0aWVzPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5EZWxpbWl0ZXI8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+IzwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5DbGFzc05hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+Y29tLnBvaW50YmFzZS5qZGJjLmpkYmNEYXRhU291cmNlPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAJCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Q29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZDwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5mYWxzZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25NZXRob2Q8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VmFsaWRhdGlvblRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5UcmFuc2FjdGlvbklzb2xhdGlvbjwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5HdWFyYW50ZWVJc29sYXRpb25MZXZlbDwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Q29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5mYWxzZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VmFsaWRhdGlvbk1ldGhvZDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5UcmFuc2FjdGlvbklzb2xhdGlvbjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkd1YXJhbnRlZUlzb2xhdGlvbkxldmVsPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiA8IS0tIHByb3BlcnRpZXMgdG8gdGVzdCBzZXR0aW5nIG9mIGEgbm9uLVN0cmluZyB2YWx1ZSB3aXRoIG92ZXJyaWRkZW4gc2V0dGVycyAtLT4KICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Tm9uU3RyaW5nV2l0aE5vT3ZlcnJpZGRlblNldHRlcjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CkBAIC0yMTUsNTQgKzIxNSw1NCBAQAogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb25mYWN0b3J5LWludGVyZmFjZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29ubmVjdGlvbmZhY3RvcnktaW50ZXJmYWNlPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb25mYWN0b3J5LWltcGwtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2U8L2Nvbm5lY3Rpb25mYWN0b3J5LWltcGwtY2xhc3M+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbi1pbnRlcmZhY2U+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29ubmVjdGlvbi1pbnRlcmZhY2U+Ci0gICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb24taW1wbC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcjwvY29ubmVjdGlvbi1pbXBsLWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8L2Nvbm5lY3Rpb24tZGVmaW5pdGlvbj4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8dHJhbnNhY3Rpb24tc3VwcG9ydD5Mb2NhbFRyYW5zYWN0aW9uPC90cmFuc2FjdGlvbi1zdXBwb3J0PgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxhdXRoZW50aWNhdGlvbi1tZWNoYW5pc20+CiAgICAgICAgICAgICAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgogICAgICAgICAgICAgICAgIDwhLS0gTm90IGluY2x1ZGluZyB0aGUgImRlc2NyaXB0aW9uIiBlbGVtZW50IC0tPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGF1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbS10eXBlPkJhc2ljUGFzc3dvcmQ8L2F1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbS10eXBlPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNyZWRlbnRpYWwtaW50ZXJmYWNlPmphdmF4LnJlc291cmNlLnNwaS5zZWN1cml0eS5QYXNzd29yZENyZWRlbnRpYWw8L2NyZWRlbnRpYWwtaW50ZXJmYWNlPgogICAgICAgICAgICAgPC9hdXRoZW50aWNhdGlvbi1tZWNoYW5pc20+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPHJlYXV0aGVudGljYXRpb24tc3VwcG9ydD5mYWxzZTwvcmVhdXRoZW50aWNhdGlvbi1zdXBwb3J0PgotICAgICAgICAgICAgCisKICAgICAgICAgPC9vdXRib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0JPGFkbWlub2JqZWN0PgotCSAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgotCSAgICAgICA8YWRtaW5vYmplY3QtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluSW1wbDwvYWRtaW5vYmplY3QtY2xhc3M+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlNjaGVtYU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Sm5kaU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Tm9PZlJvd3M8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5JbnRlZ2VyPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICA8YWRtaW5vYmplY3Q+CisgICAgICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluPC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+CisgICAgICAgICAgIDxhZG1pbm9iamVjdC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW5JbXBsPC9hZG1pbm9iamVjdC1jbGFzcz4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+U2NoZW1hTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5KbmRpTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Ob09mUm93czwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLkludGVnZXI8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4wPC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8L2FkbWlub2JqZWN0PgotICAgICAgICAKKwogICAgIDwvcmVzb3VyY2VhZGFwdGVyPgotICAgIAorCiA8L2Nvbm5lY3Rvcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQppbmRleCBiMjE5Y2QyLi4xMjQ4MDljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCkBAIC0yNCwyNiArMjQsMjYgQEAKIC8qKgogICogQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMQotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzEKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0aW9uTWFuYWdlciBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyeyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uTWFuYWdlciBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyewogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhIDxjb2RlPkNvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QgdG8gdGhlIDxjb2RlPkNvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0JaW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcmV0dXJuCUEgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvciBpbiBnZXR0aW5nIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gICAgbWNmICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBpbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgQSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBPYmplY3QuCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yIGluIGdldHRpbmcgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+LgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgYWxsb2NhdGVDb25uZWN0aW9uKE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsCi0gICAgCQkJCSAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8pIAotICAgIAkJCQkgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0JTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBtY2YuY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgaW5mbyk7Ci0JcmV0dXJuIG1jLmdldENvbm5lY3Rpb24obnVsbCwgaW5mbyk7ICAgIAkJCQkgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKQorICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CisgICAgTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBtY2YuY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgaW5mbyk7CisgICAgcmV0dXJuIG1jLmdldENvbm5lY3Rpb24obnVsbCwgaW5mbyk7CiAgICAgfQotICAgIAorCiAgICAgLyoKICAgICAgKiBUaGlzIGNsYXNzIGNvdWxkIGVmZmVjdGl2ZWx5IGltcGxlbWVudCBDb25uZWN0aW9uIHBvb2xpbmcgYWxzby4KICAgICAgKiBDb3VsZCBiZSBkb25lIGZvciBGQ1MuCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQppbmRleCAzOWM3ODc2Li5jNDc3ZmMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEKQEAgLTE5LDEwICsxOSwxMCBAQAogLyoqCiAgKiBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMQotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzEKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm97IAorcHVibGljIGNsYXNzIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mb3sKIAogICAgIHByaXZhdGUgU3RyaW5nIHVzZXI7CiAgICAgcHJpdmF0ZSBTdHJpbmcgcGFzc3dvcmQ7CkBAIC0zMCw4ICszMCw4IEBACiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0cyBhIG5ldyA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdAogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJVXNlciBOYW1lLgotICAgICAqIEBwYXJhbQlwYXNzd29yZAlQYXNzd29yZAorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIFVzZXIgTmFtZS4KKyAgICAgKiBAcGFyYW0gICAgcGFzc3dvcmQgICAgUGFzc3dvcmQKICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvblJlcXVlc3RJbmZvKFN0cmluZyB1c2VyLCBTdHJpbmcgcGFzc3dvcmQpIHsKICAgICAgICAgdGhpcy51c2VyID0gdXNlcjsKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgbmFtZSBvZiB0aGUgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqCi0gICAgICogQHJldHVybglVc2VyIG5hbWUgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgorICAgICAqIEByZXR1cm4gICAgVXNlciBuYW1lIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXIoKSB7CiAgICAgICAgIHJldHVybiB1c2VyOwpAQCAtNTAsNyArNTAsNyBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgcGFzc3dvcmQgb2YgdGhlIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKgotICAgICAqIEByZXR1cm4JUGFzc3dvcmQgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgorICAgICAqIEByZXR1cm4gICAgUGFzc3dvcmQgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFzc3dvcmQoKSB7CiAgICAgICAgIHJldHVybiBwYXNzd29yZDsKQEAgLTU5LDcgKzU5LDcgQEAKICAgICAvKioKICAgICAgKiBWZXJpZnkgd2hldGhlciB0d28gQ29ubmVjdGlvblJlcXVlc3RJbmZvcyBhcmUgZXF1YWwuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVRydWUsIGlmIHRoZXkgYXJlIGVxdWFsIGFuZCBmYWxzZSBvdGhlcndpc2UuCisgICAgICogQHJldHVybiAgICBUcnVlLCBpZiB0aGV5IGFyZSBlcXVhbCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7CiAgICAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwpAQCAtNzUsMTggKzc1LDE4IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBoYXNoY29kZSBvZiB0aGUgb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybgloYXNoQ29kZS4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2hDb2RlLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CiAgICAgICAgIFN0cmluZyByZXN1bHQgPSAiIiArIHVzZXIgKyBwYXNzd29yZDsKICAgICAgICAgcmV0dXJuIHJlc3VsdC5oYXNoQ29kZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbXBhcmVzIHR3byBvYmplY3RzLgogICAgICAqCi0gICAgICogQHBhcmFtCW8xCUZpcnN0IG9iamVjdC4KLSAgICAgKiBAcGFyYW0JbzIJU2Vjb25kIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgbzEgICAgRmlyc3Qgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvMiAgICBTZWNvbmQgb2JqZWN0LgogICAgICAqLwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKE9iamVjdCBvMSwgT2JqZWN0IG8yKSB7CiAgICAgICAgIGlmIChvMSA9PSBudWxsKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKaW5kZXggNGJmOWZlZC4uMzIzNDAzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtMzEsMTQgKzMxLDE0IEBACiAvKioKICAqIERhdGEgU291cmNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMAotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzAKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIAogcHVibGljIGNsYXNzIERTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGV4dGVuZHMgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHsKLSAgIAorCiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgamF2YXguc3FsLkRhdGFTb3VyY2UgZGF0YVNvdXJjZU9iajsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC00OSwxOSArNDksMTkgQEAKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgbmV3IHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgRUlTIHJlc291cmNlCiAgICAgICogbWFuYWdlci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBwYXJhbQljeFJlcXVlc3RJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0Ci0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAk8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCi0gICAgICogICAgICAgCQkJCWNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0Ci0gICAgICogQHRocm93cwlTZWN1cml0eUV4Y2VwdGlvbglpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0IAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqCQkJCQkJcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gICAgY3hSZXF1ZXN0SW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAorICAgICAqIEB0aHJvd3MgICAgU2VjdXJpdHlFeGNlcHRpb24gICAgaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdCBzdWJqZWN0LAogICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKQEAgLTY5LDU1ICs2OSw1NSBAQAogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbiIpOwogICAgICAgICB9CiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYyA9IFNlY3VyaXR5VXRpbHMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKHRoaXMsIHN1YmplY3QsIGN4UmVxdWVzdEluZm8pOwotICAgICAgICAKKwogICAgICAgICBpZihkYXRhU291cmNlT2JqID09IG51bGwpIHsKICAgICAgICAgICAgIGlmKGRzT2JqQnVpbGRlciA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgZHNPYmpCdWlsZGVyID0gbmV3IERhdGFTb3VyY2VPYmplY3RCdWlsZGVyKHNwZWMpOwogICAgICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBkYXRhU291cmNlT2JqID0gKGphdmF4LnNxbC5EYXRhU291cmNlKSBkc09iakJ1aWxkZXIuY29uc3RydWN0RGF0YVNvdXJjZU9iamVjdCgpOwogICAgICAgICAgICAgfSBjYXRjaChDbGFzc0Nhc3RFeGNlcHRpb24gY2NlKSB7Ci0JICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jY2UiLCBjY2UpOworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY2NlIiwgY2NlKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5SZXNvdXJjZUV4Y2VwdGlvbihjY2UuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRzQ29ubiA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7Ci0JICAgIC8qIEZvciB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlci9wYXNzd2Qgb2YgdGhlIGNvbm5lY3Rpb24gcG9vbCBpcwotCSAgICAgKiBlcXVhbCB0byB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIGZvciB0aGUgY29ubmVjdGlvbiByZXF1ZXN0Ci0JICAgICAqIGdldCBhIGNvbm5lY3Rpb24gZnJvbSB0aGlzIHBvb2wgZGlyZWN0bHkuCi0JICAgICAqIGZvciBhbGwgb3RoZXIgY29uZGl0aW9ucyBnbyBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbgotCSAgICAgKi8KLQkgICAgaWYgKCBpc0VxdWFsKCBwYywgZ2V0VXNlcigpLCBnZXRQYXNzd29yZCgpICkgKSB7Ci0JICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24oKTsKLQkgICAgfSBlbHNlIHsKLQkgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbihwYy5nZXRVc2VyTmFtZSgpLCAKLQkJICAgIG5ldyBTdHJpbmcocGMuZ2V0UGFzc3dvcmQoKSkpOwotCSAgICB9CisgICAgICAgIC8qIEZvciB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlci9wYXNzd2Qgb2YgdGhlIGNvbm5lY3Rpb24gcG9vbCBpcworICAgICAgICAgKiBlcXVhbCB0byB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIGZvciB0aGUgY29ubmVjdGlvbiByZXF1ZXN0CisgICAgICAgICAqIGdldCBhIGNvbm5lY3Rpb24gZnJvbSB0aGlzIHBvb2wgZGlyZWN0bHkuCisgICAgICAgICAqIGZvciBhbGwgb3RoZXIgY29uZGl0aW9ucyBnbyBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBpc0VxdWFsKCBwYywgZ2V0VXNlcigpLCBnZXRQYXNzd29yZCgpICkgKSB7CisgICAgICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbihwYy5nZXRVc2VyTmFtZSgpLAorICAgICAgICAgICAgbmV3IFN0cmluZyhwYy5nZXRQYXNzd29yZCgpKSk7CisgICAgICAgIH0KICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfY3JlYXRlX2Nvbm4iLCBzcWxlKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQ6ICIgKyAKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2NyZWF0ZV9jb25uIiwgc3FsZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBjb3VsZCBub3QgYmUgYWxsb2NhdGVkOiAiICsKICAgICAgICAgICAgICAgICBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbihudWxsLCBkc0Nvbm4sIHBjLCB0aGlzKTsKICAgICAgICAgLy9HSkNJTlQKICAgICAgICAgc2V0SXNvbGF0aW9uKG1jKTsKICAgICAgICAgaXNWYWxpZChtYyk7CiAgICAgICAgIHJldHVybiBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8gCisgICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvCiAgICAgICogYW5vdGhlciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LgotICAgICAqIAotICAgICAqIEBwYXJhbQlvdGhlcgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZSAKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKLSAgICAgKgkJZmFsc2UJb3RoZXJ3aXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgb3RoZXIgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKKyAgICAgKiAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvdGhlcikgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTI4LDQwOSArMTI4LDQwOSBAQAogICAgICAgICAgKiBpZiBhbmQgb25seSBpZiB0aGVpciBwcm9wZXJ0aWVzIGFyZSB0aGUgc2FtZS4KICAgICAgICAgICovCiAgICAgICAgIGlmKG90aGVyIGluc3RhbmNlb2YgY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KSB7Ci0gICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnkgb3RoZXJNQ0YgPSAKKyAgICAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBvdGhlck1DRiA9CiAgICAgICAgICAgICAgICAgKGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSkgb3RoZXI7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5zcGVjLmVxdWFscyhvdGhlck1DRi5zcGVjKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2VydmVyTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzZXJ2ZXJOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0c2VydmVyTmFtZShTdHJpbmcgc2VydmVyTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FLCBzZXJ2ZXJOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jc2VydmVyTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHNlcnZlck5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRzZXJ2ZXJOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2VydmVyTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzZXJ2ZXJOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0U2VydmVyTmFtZShTdHJpbmcgc2VydmVyTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FLCBzZXJ2ZXJOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jc2VydmVyTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHNlcnZlck5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcG9ydE51bWJlcgk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwb3J0TnVtYmVyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0cG9ydE51bWJlcihTdHJpbmcgcG9ydE51bWJlcikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSLCBwb3J0TnVtYmVyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JcG9ydE51bWJlcgotICAgICAqIEBzZWUJPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHBvcnROdW1iZXIKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRwb3J0TnVtYmVyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcG9ydE51bWJlcgk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwb3J0TnVtYmVyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UG9ydE51bWJlcihTdHJpbmcgcG9ydE51bWJlcikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSLCBwb3J0TnVtYmVyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JcG9ydE51bWJlcgotICAgICAqIEBzZWUJPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHBvcnROdW1iZXIKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRQb3J0TnVtYmVyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkYXRhYmFzZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkYXRhYmFzZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRhdGFiYXNlTmFtZShTdHJpbmcgZGF0YWJhc2VOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSwgZGF0YWJhc2VOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkYXRhYmFzZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRhdGFiYXNlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZGF0YWJhc2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRhdGFiYXNlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRhdGFiYXNlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGF0YWJhc2VOYW1lKFN0cmluZyBkYXRhYmFzZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FLCBkYXRhYmFzZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRhdGFiYXNlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGF0YWJhc2VOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREYXRhYmFzZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGF0YVNvdXJjZU5hbWUoU3RyaW5nIGRzbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSwgZHNuKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkc24KLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHNuCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRhdGFTb3VyY2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGF0YVNvdXJjZU5hbWUoU3RyaW5nIGRzbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSwgZHNuKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkc24KLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHNuCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERhdGFTb3VyY2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlc2MJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlc2MgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGVzY3JpcHRpb24oU3RyaW5nIGRlc2MpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04sIGRlc2MpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglkZXNjCi0gICAgICogQHNlZQk8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlc2MKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZGVzY3JpcHRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGVzYwk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVzYyAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzYykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiwgZGVzYyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRlc2MKLSAgICAgKiBAc2VlCTxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVzYworICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHBhcmFtCW53UHJvdG9jb2wJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBud1Byb3RvY29sICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRuZXR3b3JrUHJvdG9jb2woU3RyaW5nIG53UHJvdG9jb2wpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MLCBud1Byb3RvY29sKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHJldHVybglud1Byb3RvY29sCi0gICAgICogQHNlZQk8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHJldHVybiAgICBud1Byb3RvY29sCisgICAgICogQHNlZSAgICA8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRuZXR3b3JrUHJvdG9jb2woKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbndQcm90b2NvbAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG53UHJvdG9jb2wgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldE5ldHdvcmtQcm90b2NvbChTdHJpbmcgbndQcm90b2NvbCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wsIG53UHJvdG9jb2wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCW53UHJvdG9jb2wKLSAgICAgKiBAc2VlCTxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIG53UHJvdG9jb2wKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldE5ldHdvcmtQcm90b2NvbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXJvbGVOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICByb2xlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRyb2xlTmFtZShTdHJpbmcgcm9sZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUsIHJvbGVOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXJvbGVOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHJvbGVOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHJvbGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlyb2xlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcm9sZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Um9sZU5hbWUoU3RyaW5nIHJvbGVOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FLCByb2xlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglyb2xlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICByb2xlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRSb2xlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKTsKICAgICB9CiAKLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lT3V0CTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lT3V0ICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRsb2dpblRpbWVPdXQoU3RyaW5nIGxvZ2luVGltZU91dCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQsIGxvZ2luVGltZU91dCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbG9naW5UaW1lb3V0Ci0gICAgICogQHNlZQk8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHJldHVybiAgICBsb2dpblRpbWVvdXQKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGxvZ2luVGltZU91dCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVPdXQJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBsb2dpblRpbWVPdXQgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ2luVGltZU91dChTdHJpbmcgbG9naW5UaW1lT3V0KSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCwgbG9naW5UaW1lT3V0KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHJldHVybglsb2dpblRpbWVvdXQKLSAgICAgKiBAc2VlCTxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGxvZ2luVGltZW91dAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TG9naW5UaW1lT3V0KCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZWxpbWl0ZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGVsaW0JPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZWxpbSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGVsaW1pdGVyKFN0cmluZyBkZWxpbSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIsIGRlbGltKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZWxpbWl0ZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRlbGltCi0gICAgICogQHNlZQk8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZWxpbQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZGVsaW1pdGVyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZWxpbWl0ZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGVsaW0JPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZWxpbSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVsaW1pdGVyKFN0cmluZyBkZWxpbSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIsIGRlbGltKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZWxpbWl0ZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRlbGltCi0gICAgICogQHNlZQk8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZWxpbQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVsaW1pdGVyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkcml2ZXIgc3BlY2lmaWMgcHJvcGVydGllcy4KICAgICAgKgotICAgICAqIEBwYXJhbQlkcml2ZXJQcm9wcwk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkcml2ZXJQcm9wcyAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRyaXZlclByb3BlcnRpZXMoU3RyaW5nIGRyaXZlclByb3BzKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMsIGRyaXZlclByb3BzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkcml2ZXIgc3BlY2lmaWMgcHJvcGVydGllcy4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHJpdmVyUHJvcHMKLSAgICAgKiBAc2VlCTxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkcml2ZXJQcm9wcworICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRyaXZlclByb3BlcnRpZXMoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkcml2ZXIgc3BlY2lmaWMgcHJvcGVydGllcy4KICAgICAgKgotICAgICAqIEBwYXJhbQlkcml2ZXJQcm9wcwk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkcml2ZXJQcm9wcyAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERyaXZlclByb3BlcnRpZXMoU3RyaW5nIGRyaXZlclByb3BzKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMsIGRyaXZlclByb3BzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkcml2ZXIgc3BlY2lmaWMgcHJvcGVydGllcy4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHJpdmVyUHJvcHMKLSAgICAgKiBAc2VlCTxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkcml2ZXJQcm9wcworICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERyaXZlclByb3BlcnRpZXMoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTKTsKQEAgLTUzOCwxOSArNTM4LDE5IEBACiAKICAgICBwdWJsaWMgRG91YmxlIGdldE5vblN0cmluZ1dpdGhOb092ZXJyaWRkZW5TZXR0ZXIoKXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSA6IGdldE5vblN0cmluZ1dpdGhOb092ZXJyaWRkZW5TZXR0ZXIoKSBjYWxsZWQiKTsKLQlyZXR1cm4gdGhpcy5ub25TdHJpbmdXaXRoTm9PdmVycmlkZGVuU2V0dGVyOworICAgIHJldHVybiB0aGlzLm5vblN0cmluZ1dpdGhOb092ZXJyaWRkZW5TZXR0ZXI7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0Tm9uU3RyaW5nV2l0aE5vT3ZlcnJpZGRlblNldHRlcihEb3VibGUgZGJsKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgOiBzZXROb25TdHJpbmdXaXRoTm9PdmVycmlkZGVuU2V0dGVyKCkgY2FsbGVkIik7Ci0JdGhpcy5ub25TdHJpbmdXaXRoTm9PdmVycmlkZGVuU2V0dGVyID0gZGJsOworICAgIHRoaXMubm9uU3RyaW5nV2l0aE5vT3ZlcnJpZGRlblNldHRlciA9IGRibDsKICAgICB9CiAKICAgICBwdWJsaWMgRG91YmxlIGdldE5vblN0cmluZ1dpdGhPdmVycmlkZGVuU2V0dGVyKCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgOiBnZXROb25TdHJpbmdXaXRoT3ZlcnJpZGRlblNldHRlcigpIGNhbGxlZCIpOwogICAgICAgICByZXR1cm4gdGhpcy5ub25TdHJpbmdXaXRoT3ZlcnJpZGRlblNldHRlcjsKICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0Tm9uU3RyaW5nV2l0aE92ZXJyaWRkZW5TZXR0ZXIoRG91YmxlIGRibCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IDogc2V0Tm9uU3RyaW5nV2l0aE92ZXJyaWRkZW5TZXR0ZXIoRG91YmxlKSBjYWxsZWQiKTsKICAgICAgICAgdGhpcy5ub25TdHJpbmdXaXRoT3ZlcnJpZGRlblNldHRlciA9IGRibDsKQEAgLTU2NywzNSArNTY3LDM1IEBACiAgICAgICogQ2hlY2sgaWYgdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBwYXNzZWQgZm9yIHRoaXMgZ2V0IGNvbm5lY3Rpb24KICAgICAgKiByZXF1ZXN0IGlzIGVxdWFsIHRvIHRoZSB1c2VyL3Bhc3N3ZCBvZiB0aGlzIGNvbm5lY3Rpb24gcG9vbC4KICAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbCggUGFzc3dvcmRDcmVkZW50aWFsIHBjLCBTdHJpbmcgdXNlciwgCisgICAgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoIFBhc3N3b3JkQ3JlZGVudGlhbCBwYywgU3RyaW5nIHVzZXIsCiAgICAgICAgIFN0cmluZyBwYXNzd29yZCkgewotICAgICAgICAKLQkvL2lmIGVxdWFsIGdldCBkaXJlY3QgY29ubmVjdGlvbiBlbHNlIAotCS8vZ2V0IGNvbm5lY3Rpb24gd2l0aCB1c2VyIGFuZCBwYXNzd29yZC4KLQkKLQlpZiAodXNlciA9PSBudWxsICYmIHBjID09IG51bGwpIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfQotCQotCWlmICggdXNlciA9PSBudWxsICYmIHBjICE9IG51bGwgKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0JfQogCi0JaWYoIHBjID09IG51bGwgKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0KLQkKLQlpZiAoIHVzZXIuZXF1YWxzKCBwYy5nZXRVc2VyTmFtZSgpICkgKSB7Ci0JICAgIGlmICggcGFzc3dvcmQgPT0gbnVsbCAmJiBwYy5nZXRQYXNzd29yZCgpID09IG51bGwgKSB7Ci0JICAgICAgICByZXR1cm4gdHJ1ZTsKLQkgICAgfQotCX0KLQkKLQlpZiAoIHVzZXIuZXF1YWxzKHBjLmdldFVzZXJOYW1lKCkpICYmIHBhc3N3b3JkLmVxdWFscyhwYy5nZXRQYXNzd29yZCgpKSApIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfSAKLQkKLSAgICAgICAgCi0JcmV0dXJuIGZhbHNlOworICAgIC8vaWYgZXF1YWwgZ2V0IGRpcmVjdCBjb25uZWN0aW9uIGVsc2UKKyAgICAvL2dldCBjb25uZWN0aW9uIHdpdGggdXNlciBhbmQgcGFzc3dvcmQuCisKKyAgICBpZiAodXNlciA9PSBudWxsICYmIHBjID09IG51bGwpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCB1c2VyID09IG51bGwgJiYgcGMgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiggcGMgPT0gbnVsbCApIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCB1c2VyLmVxdWFscyggcGMuZ2V0VXNlck5hbWUoKSApICkgeworICAgICAgICBpZiAoIHBhc3N3b3JkID09IG51bGwgJiYgcGMuZ2V0UGFzc3dvcmQoKSA9PSBudWxsICkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIHVzZXIuZXF1YWxzKHBjLmdldFVzZXJOYW1lKCkpICYmIHBhc3N3b3JkLmVxdWFscyhwYy5nZXRQYXNzd29yZCgpKSApIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisKKyAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YQppbmRleCAyMTlhMzY1Li40YmY4YjdiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YQpAQCAtMjgsMjIgKzI4LDIyIEBACiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwogLyoqCi0gKiBIb2xkcyB0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LCB3aGljaCBpcyB0byBiZSAKKyAqIEhvbGRzIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlCiAgKiBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uIHByb2dyYW0uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMQotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzEKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlIGltcGxlbWVudHMgamF2YXguc3FsLkRhdGFTb3VyY2UsIGphdmEuaW8uU2VyaWFsaXphYmxlLAotCQljb20uc3VuLmFwcHNlcnYuamRiY3JhLkRhdGFTb3VyY2UsIGpha2FydGEucmVzb3VyY2UuUmVmZXJlbmNlYWJsZXsgCi0JCQkJICAgCisgICAgICAgIGNvbS5zdW4uYXBwc2Vydi5qZGJjcmEuRGF0YVNvdXJjZSwgamFrYXJ0YS5yZXNvdXJjZS5SZWZlcmVuY2VhYmxleworCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmOwotICAgIHByaXZhdGUgQ29ubmVjdGlvbk1hbmFnZXIgY207CQkJCSAgIAkJCQkgICAKKyAgICBwcml2YXRlIENvbm5lY3Rpb25NYW5hZ2VyIGNtOwogICAgIHByaXZhdGUgaW50IGxvZ2luVGltZW91dDsKICAgICBwcml2YXRlIFByaW50V3JpdGVyIGxvZ1dyaXRlcjsKLSAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsJCQkJICAgCisgICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CiAgICAgcHJpdmF0ZSBSZWZlcmVuY2UgcmVmZXJlbmNlOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTUxLDU3ICs1MSw1NyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOwogCiAgICAgLyoqCi0gICAgICogQ29uc3RydWN0cyA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QuIFRoaXMgaXMgY3JlYXRlZCBieSB0aGUgCisgICAgICogQ29uc3RydWN0cyA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QuIFRoaXMgaXMgY3JlYXRlZCBieSB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgCi0gICAgICoJCQljcmVhdGluZyB0aGlzIG9iamVjdC4KLSAgICAgKiBAcGFyYW0JY20JPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IG9iamVjdCBlaXRoZXIgYXNzb2NpYXRlZAotICAgICAqCQkJd2l0aCBBcHBsaWNhdGlvbiBzZXJ2ZXIgb3IgUmVzb3VyY2UgQWRhcHRlci4KKyAgICAgKiBAcGFyYW0gICAgbWNmICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICBjcmVhdGluZyB0aGlzIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgY20gICAgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IG9iamVjdCBlaXRoZXIgYXNzb2NpYXRlZAorICAgICAqICAgICAgICAgICAgd2l0aCBBcHBsaWNhdGlvbiBzZXJ2ZXIgb3IgUmVzb3VyY2UgQWRhcHRlci4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YVNvdXJjZSAoTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiwgQ29ubmVjdGlvbk1hbmFnZXIgY20pIHsKLSAgICAJdGhpcy5tY2YgPSBtY2Y7Ci0gICAgCWlmIChjbSA9PSBudWxsKSB7Ci0gICAgCSAgICB0aGlzLmNtID0gKENvbm5lY3Rpb25NYW5hZ2VyKSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyKCk7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCSAgICB0aGlzLmNtID0gY207Ci0gICAgCX0gICAgCQotICAgIH0gICAKLSAgICAKKyAgICAgICAgdGhpcy5tY2YgPSBtY2Y7CisgICAgICAgIGlmIChjbSA9PSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLmNtID0gKENvbm5lY3Rpb25NYW5hZ2VyKSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLmNtID0gY207CisgICAgICAgIH0KKyAgICB9CisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIAotICAgICAqIEByZXR1cm4JPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4gICAgICAKKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXRyeSB7Ci0gICAgCSAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsbnVsbCk7ICAgIAkgICAgCi0gICAgCX0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsbnVsbCk7CisgICAgICAgIH0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CiAvLyBUaGlzIGlzIHRlbXBvcmFyeS4gVGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIFNFVkVSRSBhZnRlciBUUAotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJfQorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogCi0gICAgICogQHBhcmFtCXVzZXIJVXNlciBuYW1lIGZvciB0aGUgQ29ubmVjdGlvbi4KLSAgICAgKiBAcGFyYW0JcHdkCVBhc3N3b3JkIGZvciB0aGUgQ29ubmVjdGlvbi4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuICAgICAgCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICBVc2VyIG5hbWUgZm9yIHRoZSBDb25uZWN0aW9uLgorICAgICAqIEBwYXJhbSAgICBwd2QgICAgUGFzc3dvcmQgZm9yIHRoZSBDb25uZWN0aW9uLgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uKFN0cmluZyB1c2VyLCBTdHJpbmcgcHdkKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJdHJ5IHsKLSAgICAJICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvID0gbmV3IENvbm5lY3Rpb25SZXF1ZXN0SW5mbyAodXNlciwgcHdkKTsKLSAgICAJICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixpbmZvKTsKLSAgICAJfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvID0gbmV3IENvbm5lY3Rpb25SZXF1ZXN0SW5mbyAodXNlciwgcHdkKTsKKyAgICAgICAgICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixpbmZvKTsKKyAgICAgICAgfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKIC8vIFRoaXMgaXMgdGVtcG9yYXJ5LiBUaGlzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gU0VWRVJFIGFmdGVyIFRQCi0JICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOwotICAgIAl9Ci0gICAgfSAgICAKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBTUUxDb25uZWN0aW9uIGZyb20gdGhlIENvbm5lY3Rpb24gd3JhcHBlcgpAQCAtMTE0LDIyICsxMTQsMjIgQEAKICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uKENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKIAotICAgICAgICBDb25uZWN0aW9uIGRyaXZlckNvbiA9IGNvbjsgCisgICAgICAgIENvbm5lY3Rpb24gZHJpdmVyQ29uID0gY29uOwogICAgICAgICBpZiAoY29uIGluc3RhbmNlb2YgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIHsKLSAgICAgICAgICAgZHJpdmVyQ29uID0gKChjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgY29uKS5nZXRDb25uZWN0aW9uKCk7IAotICAgICAgICB9IAorICAgICAgICAgICBkcml2ZXJDb24gPSAoKGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSBjb24pLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBkcml2ZXJDb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSBsb2dpbiB0aW1lb3V0CiAgICAgICoKICAgICAgKiBAcmV0dXJuIGxvZ2luIHRpbWVvdXQuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRMb2dpblRpbWVvdXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAlyZXR1cm4JbG9naW5UaW1lb3V0OworICAgICAgICByZXR1cm4gICAgbG9naW5UaW1lb3V0OwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTQwLDY3ICsxNDAsNjcgQEAKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZ2luIHRpbWVvdXQKICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVvdXQJTG9naW4gdGltZW91dC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lb3V0ICAgIExvZ2luIHRpbWVvdXQuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9naW5UaW1lb3V0KGludCBsb2dpblRpbWVvdXQpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXRoaXMubG9naW5UaW1lb3V0ID0gbG9naW5UaW1lb3V0OworICAgICAgICB0aGlzLmxvZ2luVGltZW91dCA9IGxvZ2luVGltZW91dDsKICAgICB9Ci0gICAgCi0gICAgLyoqIAorCisgICAgLyoqCiAgICAgICogR2V0IHRoZSBsb2d3cml0ZXIgb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT4gUHJpbnRXcml0ZXIgPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIFByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXJldHVybglsb2dXcml0ZXI7CisgICAgICAgIHJldHVybiAgICBsb2dXcml0ZXI7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9nd3JpdGVyIG9uIHRoaXMgb2JqZWN0LgogICAgICAqCiAgICAgICogQHBhcmFtIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKFByaW50V3JpdGVyIGxvZ1dyaXRlcikgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7Ci0gICAgfSAgICAgICAgCi0gICAgICAgIAorICAgICAgICB0aGlzLmxvZ1dyaXRlciA9IGxvZ1dyaXRlcjsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KKyAgICAgKiBAcmV0dXJuICAgIERlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7Ci0gICAgCXJldHVybiBkZXNjcmlwdGlvbjsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKICAgICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2NyaXB0aW9uKSB7Ci0gICAgCXRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgICB9ICAgIAotICAgIAorICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgfQorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSByZWZlcmVuY2UuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIDxjb2RlPlJlZmVyZW5jZTwvY29kZT5vYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIFJlZmVyZW5jZSBnZXRSZWZlcmVuY2UoKSB7Ci0gICAgCXJldHVybiByZWZlcmVuY2U7CisgICAgICAgIHJldHVybiByZWZlcmVuY2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSByZWZlcmVuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVmZXJlbmNlIDxjb2RlPlJlZmVyZW5jZTwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICByZWZlcmVuY2UgPGNvZGU+UmVmZXJlbmNlPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlKFJlZmVyZW5jZSByZWZlcmVuY2UpIHsKLSAgICAJdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7CisgICAgICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCmluZGV4IDU3NGVkNjYuLmJlYzBkNmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKQEAgLTE4LDEzICsxOCwxMyBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEpkYmNTZXR1cEFkbWluIHsKIAotICAgIHB1YmxpYyB2b2lkIHNldFRhYmxlTmFtZShTdHJpbmcgZGIpOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRUYWJsZU5hbWUoU3RyaW5nIGRiKTsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFibGVOYW1lKCk7CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRKbmRpTmFtZShTdHJpbmcgbmFtZSk7IAorICAgIHB1YmxpYyB2b2lkIHNldEpuZGlOYW1lKFN0cmluZyBuYW1lKTsKIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Sm5kaU5hbWUoKTsgCisgICAgcHVibGljIFN0cmluZyBnZXRKbmRpTmFtZSgpOwogCiAgICAgcHVibGljIHZvaWQgc2V0U2NoZW1hTmFtZShTdHJpbmcgbmFtZSk7CiAKQEAgLTM0LDYgKzM0LDYgQEAKIAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldE5vT2ZSb3dzKCk7CiAKLSAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCk7IAorICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2V0dXAoKTsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKaW5kZXggM2JkN2NhZC4uZmVjNzQ0MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhCkBAIC02NSwxMSArNjUsMTEgQEAKIAogcHJpdmF0ZSB2b2lkIHByaW50SGllcmFyY2h5KENsYXNzTG9hZGVyIGNsLCBpbnQgY250KXsKIHdoaWxlKGNsICE9IG51bGwpIHsKLQlmb3IoaW50IGkgPTA7IGkgPCBjbnQ7IGkrKykgCi0JCVN5c3RlbS5vdXQucHJpbnQoIiAiICk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgOiIgKyBjbCk7Ci0JY2wgPSBjbC5nZXRQYXJlbnQoKTsKLQljbnQgKz0gMzsKKyAgICBmb3IoaW50IGkgPTA7IGkgPCBjbnQ7IGkrKykKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICIgKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCA6IiArIGNsKTsKKyAgICBjbCA9IGNsLmdldFBhcmVudCgpOworICAgIGNudCArPSAzOwogfQogfQogCkBAIC03OCwxMCArNzgsMTAgQEAKICAgICAgICAgZm9yKGludCBpID0wOyBpIDwgY250OyBpKyspCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICIgKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgb2YgQ2xhc3NMb2FkZXIgMSA6IiArIGNsMSk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgb2YgQ2xhc3NMb2FkZXIgMiA6IiArIGNsMik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJFUVVBTFMgOiAiICsgKGNsMSA9PSBjbDIpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCBvZiBDbGFzc0xvYWRlciAyIDoiICsgY2wyKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVRVUFMUyA6ICIgKyAoY2wxID09IGNsMikpOwogICAgICAgICBjbDEgPSBjbDEuZ2V0UGFyZW50KCk7Ci0JY2wyID0gY2wyLmdldFBhcmVudCgpOworICAgIGNsMiA9IGNsMi5nZXRQYXJlbnQoKTsKICAgICAgICAgY250ICs9IDM7CiB9CiB9CkBAIC05MCw5MyArOTAsOTMgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCl7CiAKICAgICAgICAgaWYgKGpuZGlOYW1lPT0gbnVsbCB8fCBqbmRpTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgICAgICBpZiAodGFibGVOYW1lPT0gbnVsbCB8fCB0YWJsZU5hbWUudHJpbSgpLmVxdWFscygiIikpIHsKLQkgICByZXR1cm4gZmFsc2U7Ci0JfQorICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwotCVN0YXRlbWVudCBzID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMgPSBudWxsOwotCWJvb2xlYW4gYiA9IGZhbHNlOworICAgIFN0YXRlbWVudCBzID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMgPSBudWxsOworICAgIGJvb2xlYW4gYiA9IGZhbHNlOwogICAgICAgICB0cnkgewotCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCS8vZGVidWcKLQlDbGFzcyBjbHogPSBEYXRhU291cmNlLmNsYXNzOworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIC8vZGVidWcKKyAgICBDbGFzcyBjbHogPSBEYXRhU291cmNlLmNsYXNzOwogLyoKLQlpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiRGF0YVNvdXJjZSdzIGNsYXN4cyA6ICIgKyAgY2x6LmdldE5hbWUoKSArICAiIGNsYXNzbG9hZGVyICIgKyBjbHouZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0JCXByaW50SGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKLQl9Ci0JQ2xhc3MgY2xzID0gaWMubG9va3VwKGpuZGlOYW1lKS5nZXRDbGFzcygpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGNsYXNzJ3MgOiAiICsgY2xzLmdldFBhY2thZ2UoKSArICI6IiArIGNscy5nZXROYW1lKCkgICsgIiBjbGFzc2xvYWRlciAiICArIGNscy5nZXRDbGFzc0xvYWRlcigpKTsKLQlwcmludEhpZXJhcmNoeShjbHMuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7CisgICAgaWYoY2x6LmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRhdGFTb3VyY2UncyBjbGFzeHMgOiAiICsgIGNsei5nZXROYW1lKCkgKyAgIiBjbGFzc2xvYWRlciAiICsgY2x6LmdldENsYXNzTG9hZGVyKCkpOworICAgICAgICBwcmludEhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7CisgICAgfQorICAgIENsYXNzIGNscyA9IGljLmxvb2t1cChqbmRpTmFtZSkuZ2V0Q2xhc3MoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBjbGFzcydzIDogIiArIGNscy5nZXRQYWNrYWdlKCkgKyAiOiIgKyBjbHMuZ2V0TmFtZSgpICArICIgY2xhc3Nsb2FkZXIgIiAgKyBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSk7CisgICAgcHJpbnRIaWVyYXJjaHkoY2xzLmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2xvYWRlcnMgZXF1YWwgPyAiICsgIChjbHouZ2V0Q2xhc3NMb2FkZXIoKSA9PSBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSkpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiJiomKiYqJiogQ29tcGFyaW5nIEhpZXJhY2h5IERhdGFTb3VyY2UgdnMgbG9va2VkdXAiKTsKLQlpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7Ci0JCWNvbXBhcmVIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCksIGNscy5nZXRDbGFzc0xvYWRlcigpLCA4KTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2xvYWRlcnMgZXF1YWwgPyAiICsgIChjbHouZ2V0Q2xhc3NMb2FkZXIoKSA9PSBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiJiomKiYqJiogQ29tcGFyaW5nIEhpZXJhY2h5IERhdGFTb3VyY2UgdnMgbG9va2VkdXAiKTsKKyAgICBpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7CisgICAgICAgIGNvbXBhcmVIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCksIGNscy5nZXRDbGFzc0xvYWRlcigpLCA4KTsKKyAgICB9CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBsb29rdXAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBsb29rdXAiKTsKICovCi0JT2JqZWN0IG8gPSBpYy5sb29rdXAoam5kaU5hbWUpOwotLy8JU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBsb29rdXAgbG9va3VwIik7CisgICAgT2JqZWN0IG8gPSBpYy5sb29rdXAoam5kaU5hbWUpOworLy8gICAgU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBsb29rdXAgbG9va3VwIik7CiAKLQkgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKW8gOworICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpbyA7CiAvKgotCVN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgY2FzdCIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLSBUcnlpbmcgb3VyIFN0dWZmICEhISIpOwotCXRyeSB7Ci0JCUNsYXNzIG8xID0gKENsYXNzLmZvck5hbWUoImNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIikpOwotCQlDbGFzc0xvYWRlciBjbDEgPSBvMS5nZXRDbGFzc0xvYWRlcigpOwotCQlDbGFzc0xvYWRlciBjbDIgPSBEYXRhU291cmNlLmNsYXNzLmdldENsYXNzTG9hZGVyKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2wxID09IENsMiIgKyAoY2wxID09IGNsMikpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzZXMgZXF1YWwiICsgKERhdGFTb3VyY2UuY2xhc3MgPT0gbzEpKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgY2FzdCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLSBUcnlpbmcgb3VyIFN0dWZmICEhISIpOworICAgIHRyeSB7CisgICAgICAgIENsYXNzIG8xID0gKENsYXNzLmZvck5hbWUoImNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIikpOworICAgICAgICBDbGFzc0xvYWRlciBjbDEgPSBvMS5nZXRDbGFzc0xvYWRlcigpOworICAgICAgICBDbGFzc0xvYWRlciBjbDIgPSBEYXRhU291cmNlLmNsYXNzLmdldENsYXNzTG9hZGVyKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2wxID09IENsMiIgKyAoY2wxID09IGNsMikpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzZXMgZXF1YWwiICsgKERhdGFTb3VyY2UuY2xhc3MgPT0gbzEpKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogKi8KICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgU3RyaW5nIGZ1bGxUYWJsZU5hbWUgPSB0YWJsZU5hbWU7Ci0JICAgIGlmIChzY2hlbWFOYW1lICE9IG51bGwgJiYgKCEoc2NoZW1hTmFtZS50cmltKCkuZXF1YWxzKCIiKSkpKSB7Ci0JICAgICAgICBmdWxsVGFibGVOYW1lID0gc2NoZW1hTmFtZS50cmltKCkgKyAiLiIgKyBmdWxsVGFibGVOYW1lOwotCSAgICB9Ci0JICAgIFN0cmluZyBxcnkgPSAic2VsZWN0ICogZnJvbSAiICsgZnVsbFRhYmxlTmFtZTsgCisgICAgICAgIFN0cmluZyBmdWxsVGFibGVOYW1lID0gdGFibGVOYW1lOworICAgICAgICBpZiAoc2NoZW1hTmFtZSAhPSBudWxsICYmICghKHNjaGVtYU5hbWUudHJpbSgpLmVxdWFscygiIikpKSkgeworICAgICAgICAgICAgZnVsbFRhYmxlTmFtZSA9IHNjaGVtYU5hbWUudHJpbSgpICsgIi4iICsgZnVsbFRhYmxlTmFtZTsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgcXJ5ID0gInNlbGVjdCAqIGZyb20gIiArIGZ1bGxUYWJsZU5hbWU7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRpbmcgcXVlcnkgOiIgKyBxcnkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyBxdWVyeSA6IiArIHFyeSk7CiAKLQkgICAgcyA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgcnMgPSBzLmV4ZWN1dGVRdWVyeShxcnkpOyAKKyAgICAgICAgcyA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgcnMgPSBzLmV4ZWN1dGVRdWVyeShxcnkpOwogCiAgICAgICAgICAgICBpbnQgaSA9IDA7Ci0JICAgIGlmIChycy5uZXh0KCkpIHsKLQkgICAgICAgIGkrKzsKLQkgICAgfQorICAgICAgICBpZiAocnMubmV4dCgpKSB7CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJObyBvZiByb3dzIGZvdW5kOiIgKyBpKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gb2Ygcm93cyBleHBlY3RlZDoiICsgbm9PZlJvd3MpOwogCi0JICAgIGlmIChpID09IG5vT2ZSb3dzLmludFZhbHVlKCkpIHsKLQkgICAgICAgYiA9IHRydWU7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgIGIgPSBmYWxzZTsKLQkgICAgfQotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgYiA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBpZiAocnMgIT0gbnVsbCkgcnMuY2xvc2UoKTsKLQkgICAgICAgIGlmIChzICE9IG51bGwpIHMuY2xvc2UoKTsKLQkgICAgICAgIGlmIChjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7CisgICAgICAgIGlmIChpID09IG5vT2ZSb3dzLmludFZhbHVlKCkpIHsKKyAgICAgICAgICAgYiA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgIGIgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgYiA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAocnMgIT0gbnVsbCkgcnMuY2xvc2UoKTsKKyAgICAgICAgICAgIGlmIChzICE9IG51bGwpIHMuY2xvc2UoKTsKKyAgICAgICAgICAgIGlmIChjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICB9Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuaW5nIHNldHVwIDoiICtiKTsKLQlyZXR1cm4gYjsKKyAgICAgICAgfQorICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJldHVybmluZyBzZXR1cCA6IiArYik7CisgICAgcmV0dXJuIGI7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCmluZGV4IDhlYmUwNTcuLmM1NGEyMTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCkBAIC0yMyw0NSArMjMsNDUgQEAKIC8qKgogICogPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBMb2NhbFRyYW5zYWN0aW9uIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTG9jYWxUcmFuc2FjdGlvbiB7Ci0gICAgCisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+LgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCByZXR1cm5zCi0gICAgICoJCQl0aGlzIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IG9iamVjdCBhcwotICAgICAqCQkJYSByZXN1bHQgb2YgPGNvZGU+Z2V0TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgcmV0dXJucworICAgICAqICAgICAgICAgICAgdGhpcyA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBvYmplY3QgYXMKKyAgICAgKiAgICAgICAgICAgIGEgcmVzdWx0IG9mIDxjb2RlPmdldExvY2FsVHJhbnNhY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIExvY2FsVHJhbnNhY3Rpb24oTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEJlZ2luIGEgbG9jYWwgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGJlZ2luKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvblN0YXJ0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvblN0YXJ0ZWQoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKS5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IGEgbG9jYWwgdHJhbnNhY3Rpb24uCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbiBvciBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gb3IgY29tbWl0dGluZyB0aGUgdHJhbnNhY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBFeGNlcHRpb24gZSA9IG51bGw7CkBAIC03MiwxNSArNzIsMTUgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSb2xsYmFjayBhIGxvY2FsIHRyYW5zYWN0aW9uLgotICAgICAqIAotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24gb3Igcm9sbGluZyBiYWNrIHRoZSB0cmFuc2FjdGlvbgorICAgICAqCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBvciByb2xsaW5nIGJhY2sgdGhlIHRyYW5zYWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCmluZGV4IDMwZjQ2MGEuLjJkYWQ1OWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKQEAgLTQxLDggKzQxLDggQEAKIC8qKgogICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjIKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIyCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb24gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiB7CiAKQEAgLTUyLDcgKzUyLDcgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBpc0Rlc3Ryb3llZCA9IGZhbHNlOwogICAgIHByaXZhdGUgYm9vbGVhbiBpc1VzYWJsZSA9IHRydWU7Ci0gICAgCisKICAgICBwcml2YXRlIGludCBjb25uZWN0aW9uVHlwZSA9IElTTk9UQVBPT0xFRENPTk5FQ1RJT047CiAgICAgcHJpdmF0ZSBQb29sZWRDb25uZWN0aW9uIHBjID0gbnVsbDsKICAgICBwcml2YXRlIGphdmEuc3FsLkNvbm5lY3Rpb24gYWN0dWFsQ29ubmVjdGlvbiA9IG51bGw7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgcHJpdmF0ZSBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmID0gbnVsbDsKICAgICBwcml2YXRlIFhBUmVzb3VyY2UgeGFyID0gbnVsbDsKICAgICBwdWJsaWMgQ29ubmVjdGlvbkhvbGRlciBhY3RpdmVDb25uZWN0aW9uSGFuZGxlOwotICAgIAorCiAgICAgLy9HSkNJTlQKICAgICBwcml2YXRlIGludCBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkOwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0NsZWFuID0gZmFsc2U7CkBAIC03Nyw3MSArNzcsNzEgQEAKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uIFRoZSBwb29sZWRDb25uIHBhcmFtZXRlciBpcyBleHBlY3RlZAotICAgICAqIHRvIGJlIG51bGwgYW5kIHNxbENvbm4gcGFyYW1ldGVyIGlzIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiBjYXNlIHdoZXJlIAotICAgICAqIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpcyBnb3QgZnJvbSBhIG5vbiBwb29sZWQgZGF0YXNvdXJjZSBvYmplY3QuIFRoZSAKKyAgICAgKiB0byBiZSBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlciBpcyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gY2FzZSB3aGVyZQorICAgICAqIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpcyBnb3QgZnJvbSBhIG5vbiBwb29sZWQgZGF0YXNvdXJjZSBvYmplY3QuIFRoZQogICAgICAqIHBvb2xlZENvbm4gcGFyYW1ldGVyIGlzIGV4cGVjdGVkIHRvIGJlIG5vbiBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlcgogICAgICAqIGlzIGV4cGVjdGVkIHRvIGJlIG51bGwgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGRhdGFzb3VyY2Ugb2JqZWN0IGlzIGEKICAgICAgKiBjb25uZWN0aW9uIHBvb2wgZGF0YXNvdXJjZSBvciBhbiB4YSBkYXRhc291cmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvb2xlZENvbm4JPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIAotICAgICAqCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIHBvb2xlZAotICAgICAqCQkJCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OyBudWxsIG90aGVyd2lzZQotICAgICAqIEBwYXJhbQlzcWxDb25uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSBwaHlzaWNhbAotICAgICAqCQkJY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgbm9uIHBvb2xlZCA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsKLSAgICAgKgkJCW51bGwgb3RoZXJ3aXNlCi0gICAgICogQHBhcmFtCXBhc3N3ZENyZWQJb2JqZWN0IGNvbmF0aW5pbmcgdGhlCi0gICAgICoJCQkJdXNlciBhbmQgcGFzc3dvcmQgZm9yIGFsbG9jYXRpbmcgdGhlIGNvbm5lY3Rpb24KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdAotICAgICAqCQkJCQl0aGF0IGNyZWF0ZWQgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0Ci0gICAgICoJCQkJCWlzIG5vdCB0aGUgc2FtZSBhcyByZXR1cm5lZCBieSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICoJCQkJCW9iamVjdCBwYXNzZWQKKyAgICAgKiBAcGFyYW0gICAgcG9vbGVkQ29ubiAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBwb29sZWQKKyAgICAgKiAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsgbnVsbCBvdGhlcndpc2UKKyAgICAgKiBAcGFyYW0gICAgc3FsQ29ubiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIG5vbiBwb29sZWQgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47CisgICAgICogICAgICAgICAgICBudWxsIG90aGVyd2lzZQorICAgICAqIEBwYXJhbSAgICBwYXNzd2RDcmVkICAgIG9iamVjdCBjb25hdGluaW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgIHVzZXIgYW5kIHBhc3N3b3JkIGZvciBhbGxvY2F0aW5nIHRoZSBjb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdGhhdCBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICBpcyBub3QgdGhlIHNhbWUgYXMgcmV0dXJuZWQgYnkgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICBvYmplY3QgcGFzc2VkCiAgICAgICovCi0gICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubiwgamF2YS5zcWwuQ29ubmVjdGlvbiBzcWxDb25uLCAKKyAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24oUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uLCBqYXZhLnNxbC5Db25uZWN0aW9uIHNxbENvbm4sCiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYXNzd2RDcmVkLCBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihwb29sZWRDb25uID09IG51bGwgJiYgc3FsQ29ubiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNvbm5lY3Rpb24gb2JqZWN0IGNhbm5vdCBiZSBudWxsIik7CiAgICAgICAgIH0KIAotCWlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgewotCSAgICBhY3R1YWxDb25uZWN0aW9uID0gc3FsQ29ubjsKLQl9CisgICAgaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7CisgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBzcWxDb25uOworICAgIH0KIAogICAgICAgICBwYyA9IHBvb2xlZENvbm47CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbmV3IEhhc2h0YWJsZSgpOwogICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gcGFzc3dkQ3JlZDsKICAgICAgICAgdGhpcy5tY2YgPSBtY2Y7Ci0gICAgICAgIGlmKHBhc3N3ZENyZWRlbnRpYWwgIT0gbnVsbCAmJiAgCisgICAgICAgIGlmKHBhc3N3ZENyZWRlbnRpYWwgIT0gbnVsbCAmJgogICAgICAgICAgICAgdGhpcy5tY2YuZXF1YWxzKHBhc3N3ZENyZWRlbnRpYWwuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgdGhhdCBoYXMgY3JlYXRlZCB0aGlzICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB0aGF0IGhhcyBjcmVhdGVkIHRoaXMgIiArCiAgICAgICAgICAgICAgICAgIk1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHJldHVybmVkIGJ5IiArCiAgICAgICAgICAgICAgICAgICAgICIgdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiIpOwogICAgICAgICB9CiAgICAgICAgIGxvZ1dyaXRlciA9IG1jZi5nZXRMb2dXcml0ZXIoKTsKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0JY2UgPSBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0NMT1NFRCk7CisgICAgY2UgPSBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0NMT1NFRCk7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogQWRkcyBhIGNvbm5lY3Rpb24gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWxpc3RlbmVyCTxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBsaXN0ZW5lciAgICA8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKiBAc2VlIDxjb2RlPnJlbW92ZUNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGFkZENvbm5lY3Rpb25FdmVudExpc3RlbmVyKENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyOworICAgIHRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBVc2VkIGJ5IHRoZSBjb250YWluZXIgdG8gY2hhbmdlIHRoZSBhc3NvY2lhdGlvbiBvZiBhbiBhcHBsaWNhdGlvbi1sZXZlbCAKKyAgICAgKiBVc2VkIGJ5IHRoZSBjb250YWluZXIgdG8gY2hhbmdlIHRoZSBhc3NvY2lhdGlvbiBvZiBhbiBhcHBsaWNhdGlvbi1sZXZlbAogICAgICAqIGNvbm5lY3Rpb24gaGFuZGxlIHdpdGggYSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29ubmVjdGlvbgk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKLSAgICAgKgkJCQl0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZQotICAgICAqCQkJCQl2YWxpZCBvciB0aGUgY29ubmVjdGlvbiBoYW5kbGUgcGFzc2VkIGlzIG51bGwKKyAgICAgKiBAcGFyYW0gICAgY29ubmVjdGlvbiAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgKiAgICAgICAgICAgICAgICB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZQorICAgICAqICAgICAgICAgICAgICAgICAgICB2YWxpZCBvciB0aGUgY29ubmVjdGlvbiBoYW5kbGUgcGFzc2VkIGlzIG51bGwKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhc3NvY2lhdGVDb25uZWN0aW9uKE9iamVjdCBjb25uZWN0aW9uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTUyLDExICsxNTIsMTEgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ29ubmVjdGlvbiBoYW5kbGUgY2Fubm90IGJlIG51bGwiKTsKICAgICAgICAgfQogICAgICAgICBDb25uZWN0aW9uSG9sZGVyIGNoID0gKENvbm5lY3Rpb25Ib2xkZXIpIGNvbm5lY3Rpb247Ci0gICAgICAgIAorCiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24pY2guZ2V0TWFuYWdlZENvbm5lY3Rpb24oKTsKLQltYy5hY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLQlpc0NsZWFuID0gZmFsc2U7Ci0gICAgICAgIAorICAgIG1jLmFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOworICAgIGlzQ2xlYW4gPSBmYWxzZTsKKwogICAgICAgICBjaC5hc3NvY2lhdGVDb25uZWN0aW9uKGFjdHVhbENvbm5lY3Rpb24sIHRoaXMpOwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGV4cGVjdGF0aW9uIGZyb20gdGhlIGFib3ZlIG1ldGhvZCBpcyB0aGF0IHRoZSBjb25uZWN0aW9uIGhvbGRlcgpAQCAtMTY1LDM0ICsxNjUsMzQgQEAKICAgICAgICAgICogdG8gdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlIHdpdGggdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4KICAgICAgICAgICogQW55IHByZXZpb3VzIHN0YXRlbWVudHMgYW5kIHJlc3VsdCBzZXRzIGFsc28gbmVlZCB0byBiZSByZW1vdmVkLgogICAgICAgICAgKi8KLSAgICAgICAgIAorCiAgICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUuc2V0QWN0aXZlKGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBjaC5zZXRBY3RpdmUodHJ1ZSk7Ci0gICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsgCisgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBBcHBsaWNhdGlvbiBzZXJ2ZXIgY2FsbHMgdGhpcyBtZXRob2QgdG8gZm9yY2UgYW55IGNsZWFudXAgb24gdGhlIAorICAgICAqIEFwcGxpY2F0aW9uIHNlcnZlciBjYWxscyB0aGlzIG1ldGhvZCB0byBmb3JjZSBhbnkgY2xlYW51cCBvbiB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuIFRoaXMgbWV0aG9kIGNhbGxzIHRoZSBpbnZhbGlkYXRlCiAgICAgICogbWV0aG9kIG9uIGFsbCBDb25uZWN0aW9uSGFuZGxlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCi0gICAgICogCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlIHZhbGlkCisgICAgICoKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjbGVhbnVwKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gY2xlYW51cCIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICAvKioKICAgICAgICAgICogbWF5IG5lZWQgdG8gc2V0IHRoZSBhdXRvY29tbWl0IHRvIHRydWUgZm9yIHRoZSBub24tcG9vbGVkIGNhc2UuCiAgICAgICAgICAqLwogICAgICAgICAvL0dKQ0lOVAotCS8vaWYgKGFjdHVhbENvbm5lY3Rpb24gIT0gbnVsbCkgewotCWlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgeworICAgIC8vaWYgKGFjdHVhbENvbm5lY3Rpb24gIT0gbnVsbCkgeworICAgIGlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCA9IGFjdHVhbENvbm5lY3Rpb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewpAQCAtMjAxLDE3ICsyMDEsMTcgQEAKICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlzQ2xlYW4gPSB0cnVlOwotICAgICAgICAKKwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGFsbCB0aGUgY29ubmVjdGlvbiBoYW5kbGVzIGZyb20gdGhlIHRhYmxlCiAgICAgICogb2YgY29ubmVjdGlvbiBoYW5kbGVzIGFuZCBpbnZhbGlkYXRlcyBhbGwgb2YgdGhlbSBzbyB0aGF0IGFueQogICAgICAqIG9wZXJhdGlvbiBvbiB0aG9zZSBjb25uZWN0aW9uIGhhbmRsZXMgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYSBwcm9ibGVtIGluIHJldHJpZXZpbmcKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXRoZSBjb25uZWN0aW9uIGhhbmRsZXMKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBpbiByZXRyaWV2aW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29ubmVjdGlvbiBoYW5kbGVzCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGludmFsaWRhdGVBbGxDb25uZWN0aW9uSGFuZGxlcygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIFNldCBoYW5kbGVzID0gY29ubmVjdGlvbkhhbmRsZXMua2V5U2V0KCk7CkBAIC0yMjYsMjIgKzIyNiwyMiBAQAogICAgICAgICB9CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzLmNsZWFyKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRGVzdHJveXMgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgcmVzb3VyY2UgbWFuYWdlci4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNsb3NpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2xvc2luZyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZGVzdHJveSIpOwogICAgICAgICB9Ci0JLy9HSkNJTlQKLQlpZihpc0Rlc3Ryb3llZCA9PSB0cnVlKSB7Ci0JICAgIHJldHVybjsJCi0JfQorICAgIC8vR0pDSU5UCisgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSkgeworICAgICAgICByZXR1cm47CisgICAgfQogCi0JYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CisgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTiB8fCBjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04pIHsKICAgICAgICAgICAgICAgICBwYy5jbG9zZSgpOwpAQCAtMjU1LDI4ICsyNTUsMjggQEAKICAgICAgICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBudWxsOwogICAgICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBudWxsOwotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgZm9sbG93aW5nIGV4Y2VwdGlvbiBoYXMgb2NjdXJlZCBkdXJpbmcgZGVzdHJveTogIiAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGZvbGxvd2luZyBleGNlcHRpb24gaGFzIG9jY3VyZWQgZHVyaW5nIGRlc3Ryb3k6ICIKICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7CiAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBudWxsOwogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBjb25uZWN0aW9uIGhhbmRsZSBmb3IgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgCisgICAgICogQ3JlYXRlcyBhIG5ldyBjb25uZWN0aW9uIGhhbmRsZSBmb3IgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwKICAgICAgKiBjb25uZWN0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgbmVlZGVkIGZvciBhdXRoZW50aWNhdGlvbgotICAgICAqIEBwYXJhbQljeFJlcUluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBjYXJyaWVzIHRoZSB1c2VyIAotICAgICAqICAgICAgIAkgICAgICAgICAJYW5kIHBhc3N3b3JkIHJlcXVpcmVkIGZvciBnZXR0aW5nIHRoaXMgY29ubmVjdGlvbi4KLSAgICAgKiBAcmV0dXJuCUNvbm5lY3Rpb24JdGhlIGNvbm5lY3Rpb24gaGFuZGxlIDxjb2RlPk9iamVjdDwvY29kZT4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJcGh5c2ljYWwgY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sZWQgY29ubmVjdGlvbiAKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBhc3N3b3JkIGNyZWRlbnRpYWxzIG9yIHJlYXV0aGVudGljYXRpb24gaXMgcmVxdWVzdGVkCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIG5lZWRlZCBmb3IgYXV0aGVudGljYXRpb24KKyAgICAgKiBAcGFyYW0gICAgY3hSZXFJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gY2FycmllcyB0aGUgdXNlcgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHBhc3N3b3JkIHJlcXVpcmVkIGZvciBnZXR0aW5nIHRoaXMgY29ubmVjdGlvbi4KKyAgICAgKiBAcmV0dXJuICAgIENvbm5lY3Rpb24gICAgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIDxjb2RlPk9iamVjdDwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGZyb20gdGhlIHBvb2xlZCBjb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCBjcmVkZW50aWFscyBvciByZWF1dGhlbnRpY2F0aW9uIGlzIHJlcXVlc3RlZAogICAgICAqLwotICAgIHB1YmxpYyBPYmplY3QgZ2V0Q29ubmVjdGlvbihTdWJqZWN0IHN1YiwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxSW5mbykgCisgICAgcHVibGljIE9iamVjdCBnZXRDb25uZWN0aW9uKFN1YmplY3Qgc3ViLCBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXFJbmZvKQogICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldENvbm5lY3Rpb24iKTsKQEAgLTI4NCwxNCArMjg0LDE0IEBACiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8gPSAoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbykgY3hSZXFJbmZvOwogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGFzc3dkQ3JlZCA9IFNlY3VyaXR5VXRpbHMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKHRoaXMubWNmLCBzdWIsIGN4UmVxdWVzdEluZm8pOwotICAgICAgICAgICAgCisKICAgICAgICAgaWYoU2VjdXJpdHlVdGlscy5pc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKHRoaXMucGFzc3dkQ3JlZGVudGlhbCwgcGFzc3dkQ3JlZCkgPT0gZmFsc2UpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLnNwaS5TZWN1cml0eUV4Y2VwdGlvbigiUmUtYXV0aGVudGljYXRpb24gbm90IHN1cHBvcnRlZCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vR0pDSU5UCiAgICAgICAgIGdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAKKwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGZvbGxvd2luZyBjb2RlIGluIHRoZSBpZiBzdGF0ZW1lbnQgZmlyc3QgY2hlY2tzIGlmIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24KICAgICAgICAgICogaXMgY2xlYW4gb3Igbm90LiBJZiBpdCBpcywgaXQgcmVzZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgdG8gd2hhdApAQCAtMzAxLDI4ICszMDEsMjggQEAKICAgICAgICAgaWYoaXNDbGVhbikgewogICAgICAgICAgICAgKChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KW1jZikucmVzZXRJc29sYXRpb24odGhpcywgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAKKworCiAgICAgICAgIENvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCA9IG5ldyBDb25uZWN0aW9uSG9sZGVyKGFjdHVhbENvbm5lY3Rpb24sIHRoaXMpOwotCWlzQ2xlYW49ZmFsc2U7Ci0gICAgICAgIAorICAgIGlzQ2xlYW49ZmFsc2U7CisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlLnNldEFjdGl2ZShmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgY29ubkhvbGRlck9iamVjdC5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjb25uSG9sZGVyT2JqZWN0OwotIAorCiAgICAgICAgIHJldHVybiBjb25uSG9sZGVyT2JqZWN0OwotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgYW4gPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW5zdGFuY2UuIFRoZSA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnRlcmZhY2UKLSAgICAgKiBpcyB1c2VkIGJ5IHRoZSBjb250YWluZXIgdG8gbWFuYWdlIGxvY2FsIHRyYW5zYWN0aW9ucyBmb3IgYSBSTSBpbnN0YW5jZS4gCisgICAgICogaXMgdXNlZCBieSB0aGUgY29udGFpbmVyIHRvIG1hbmFnZSBsb2NhbCB0cmFuc2FjdGlvbnMgZm9yIGEgUk0gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTG9jYWxUcmFuc2FjdGlvbiBnZXRMb2NhbFRyYW5zYWN0aW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTMzMSwxMyArMzMxLDEzIEBACiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICByZXR1cm4gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5Mb2NhbFRyYW5zYWN0aW9uKHRoaXMpOwogICAgIH0KLSAgICAgCisKICAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4gCisgICAgICogR2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqIEBzZWUgPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBQcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtMzQ1LDQ2ICszNDUsNDYgQEAKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0TG9nV3JpdGVyIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBsb2dXcml0ZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogR2V0cyB0aGUgbWV0YWRhdGEgaW5mb3JtYXRpb24gZm9yIHRoaXMgY29ubmVjdGlvbidzIHVuZGVybHlpbmcgRUlTIAotICAgICAqIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UuIAorICAgICAqIEdldHMgdGhlIG1ldGFkYXRhIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbm5lY3Rpb24ncyB1bmRlcmx5aW5nIEVJUworICAgICAqIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSBnZXRNZXRhRGF0YSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldE1ldGFEYXRhIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEodGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyBhbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4gCisgICAgICogUmV0dXJucyBhbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgotICAgICAqCQkJCQl0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCU5vdFN1cHBvcnRlZEV4Y2VwdGlvbglpZiB1bmRlcmx5aW5nIGRhdGFzb3VyY2UgaXMgbm90IGFuCi0gICAgICoJCQkJCTxjb2RlPlhBRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiAgICBpZiB1bmRlcmx5aW5nIGRhdGFzb3VyY2UgaXMgbm90IGFuCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPlhBRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgWEFSZXNvdXJjZSBnZXRYQVJlc291cmNlKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0WEFSZXNvdXJjZSIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTikgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZih4YXIgPT0gbnVsbCkgewotCQkgICAgLyoqCisgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgICogVXNpbmcgdGhlIHdyYXBwZXIgWEFSZXNvdXJjZS4KICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgIHhhciA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuWEFSZXNvdXJjZUltcGwoKChYQUNvbm5lY3Rpb24pcGMpLmdldFhBUmVzb3VyY2UoKSwgdGhpcyk7CkBAIC0zOTcsMTYgKzM5NywxNiBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiQ2Fubm90IGdldCBhbiBYQVJlc291cmNlIGZyb20gYSBub24gWEEgY29ubmVjdGlvbiIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVtb3ZlcyBhbiBhbHJlYWR5IHJlZ2lzdGVyZWQgY29ubmVjdGlvbiBldmVudCBsaXN0ZW5lciBmcm9tIHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlsaXN0ZW5lcgk8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4gdG8gYmUgcmVtb3ZlZAorICAgICAqIEBwYXJhbSAgICBsaXN0ZW5lciAgICA8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4gdG8gYmUgcmVtb3ZlZAogICAgICAqIEBzZWUgPGNvZGU+YWRkQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIoQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQlsaXN0ZW5lciA9IG51bGw7CisgICAgbGlzdGVuZXIgPSBudWxsOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDE1LDcgKzQxNSw3IEBACiAgICAgICogTG9jYWxUcmFuc2FjdGlvbiBvYmplY3Qgd2hlbiBpdHMgYmVnaW4oKSBtZXRob2QgaXMgY2FsbGVkLgogICAgICAqLwogICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKCkgewotCXRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IHRydWU7CQorICAgIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IHRydWU7CiAgICAgfQogCiAgICAgLyoqCkBAIC00MjQsMTYgKzQyNCwxNiBAQAogICAgICAqIExvY2FsVHJhbnNhY3Rpb24gb2JqZWN0IHdoZW4gaXRzIGVuZCgpIG1ldGhvZCBpcyBjYWxsZWQuCiAgICAgICovCiAgICAgdm9pZCB0cmFuc2FjdGlvbkNvbXBsZXRlZCgpIHsKLQl0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKLQlpZihjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKKyAgICB0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCA9IGFjdHVhbENvbm5lY3Rpb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgIC8vY2hlY2sgd2hhdCB0byBkbyBpbiB0aGlzIGNhc2UhIQotCQlfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5ub3Rnb3RfdHhfaXNvbHZsIik7CisgICAgICAgICAgICAvL2NoZWNrIHdoYXQgdG8gZG8gaW4gdGhpcyBjYXNlISEKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMubm90Z290X3R4X2lzb2x2bCIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0JICAgIHRyeSB7CisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CkBAIC00NDEsNyArNDQxLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0JICAgICAgICAKKwogICAgICAgICBpc0NsZWFuID0gdHJ1ZTsKIAogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKQEAgLTQ1MywyOCArNDUzLDI4IEBACiAgICAgICogb3Igbm90LgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkgewotCXJldHVybiB0cmFuc2FjdGlvbkluUHJvZ3Jlc3M7CisgICAgcmV0dXJuIHRyYW5zYWN0aW9uSW5Qcm9ncmVzczsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlvdXQJPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEBwYXJhbSAgICBvdXQgICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqIEBzZWUgPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihQcmludFdyaXRlciBvdXQpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICBsb2dXcml0ZXIgPSBvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiB0aGUgY29ubmVjdGlvbiBiZWluZyBoZWxkIAorICAgICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgdGhlIHR5cGUgb2YgdGhlIGNvbm5lY3Rpb24gYmVpbmcgaGVsZAogICAgICAqIGluIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgotICAgICAqIAotICAgICAqIEBwYXJhbQlwb29sZWRDb25uCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHJldHVybgljb25uZWN0aW9uIHR5cGUKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBwb29sZWRDb25uICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBjb25uZWN0aW9uIHR5cGUKICAgICAgKi8KICAgICBwcml2YXRlIGludCBnZXRDb25uZWN0aW9uVHlwZShQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4pIHsKICAgICAgICAgaWYocG9vbGVkQ29ubiA9PSBudWxsKSB7CkBAIC00ODUsMjIgKzQ4NSwyMiBAQAogICAgICAgICAgICAgcmV0dXJuIElTUE9PTEVEQ09OTkVDVElPTjsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCAKKyAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQKICAgICAgKiBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgY3JlYXRlZCB0aGlzCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IGNyZWF0ZWQgdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKICAgICAgKi8KICAgICBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkgewogICAgICAgICByZXR1cm4gKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpbWNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBzcWwgY29ubmVjdGlvbiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uIAorICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBzcWwgY29ubmVjdGlvbiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRoZSBwaHlzaWNhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgdGhlIHBoeXNpY2FsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgLy9HSkNJTlQKICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGdldEFjdHVhbENvbm5lY3Rpb24oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtNTA5LDggKzUwOSw4IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmKGFjdHVhbENvbm5lY3Rpb24gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gcGMuZ2V0Q29ubmVjdGlvbigpOwotCQl9Ci0JCQorICAgICAgICB9CisKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKICAgICAgICAgICAgICAgICBzcWxlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CkBAIC01MTgsODEgKzUxOCw4MSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBhY3R1YWxDb25uZWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHJldHVybiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQogICAgICAqLwogICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBnZXRQYXNzd29yZENyZWRlbnRpYWwoKSB7CiAgICAgICAgIHJldHVybiBwYXNzd2RDcmVkZW50aWFsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QgYW5kIHRocm93cyBhbgogICAgICAqIGV4Y2VwdGlvbiBpZiBpdCBpcyBub3QgdmFsaWQuIEEgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGlzIG5vdCB2YWxpZCBpZgogICAgICAqIGRlc3Ryb3kgaGFzIG5vdCBiZWVuIGNhbGxlZCBhbmQgbm8gcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBoYXMKICAgICAgKiBvY2N1cnJlZCByZW5kZXJpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gdW51c2FibGUuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIDxjb2RlPmRlc3Ryb3k8L2NvZGU+IGhhcyBiZWVuIGNhbGxlZCBvbiB0aGlzIAotICAgICAqCQkJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugb3IgaWYgYSAKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJyZWQgcmVuZGVyaW5nIGl0IHVudXNhYmxlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiA8Y29kZT5kZXN0cm95PC9jb2RlPiBoYXMgYmVlbiBjYWxsZWQgb24gdGhpcworICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugb3IgaWYgYQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBvY2N1cnJlZCByZW5kZXJpbmcgaXQgdW51c2FibGUKICAgICAgKi8KICAgICAvL0dKQ0lOVAogICAgIHZvaWQgY2hlY2tJZlZhbGlkKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSB8fCBpc1VzYWJsZSA9PSBmYWxzZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGlzIE1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyB0aGUgcGh5c2ljYWwgIiArIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGlzIE1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyB0aGUgcGh5c2ljYWwgIiArCiAgICAgICAgICAgICAgICAgImNvbm5lY3Rpb24gaXMgbm90IHVzYWJsZS4iKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gd2hlbiBpdHMgY2xvc2UgbWV0aG9kIGlzCiAgICAgICogY2FsbGVkLiBUaGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSAgaW52YWxpZGF0ZXMgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCiAgICAgICogYW5kIHNlbmRzIGEgQ09OTkVDVElPTl9DTE9TRUQgZXZlbnQgdG8gYWxsIHRoZSByZWdpc3RlcmVkIGV2ZW50IGxpc3RlbmVycy4KICAgICAgKgotICAgICAqIEBwYXJhbQllCUV4Y2VwdGlvbiB0aGF0IG1heSBoYXZlIG9jY3VyZWQgd2hpbGUgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKLSAgICAgKiBAcGFyYW0JY29ubkhvbGRlck9iamVjdAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGhhcyBiZWVuIGNsb3NlZAotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCWluIGNhc2UgY2xvc2luZyB0aGUgc3FsIGNvbm5lY3Rpb24gZ290IG91dCBvZgotICAgICAqICAgICAgICAgCSAgICAgICAgICAgIAk8Y29kZT5nZXRDb25uZWN0aW9uPC9jb2RlPiBvbiB0aGUgdW5kZXJseWluZyAKLSAgICAgKgkJCQk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiB0aHJvd3MgYW4gZXhjZXB0aW9uCisgICAgICogQHBhcmFtICAgIGUgICAgRXhjZXB0aW9uIHRoYXQgbWF5IGhhdmUgb2NjdXJlZCB3aGlsZSBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGhhbmRsZQorICAgICAqIEBwYXJhbSAgICBjb25uSG9sZGVyT2JqZWN0ICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgaGFzIGJlZW4gY2xvc2VkCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgaW4gY2FzZSBjbG9zaW5nIHRoZSBzcWwgY29ubmVjdGlvbiBnb3Qgb3V0IG9mCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPmdldENvbm5lY3Rpb248L2NvZGU+IG9uIHRoZSB1bmRlcmx5aW5nCisgICAgICogICAgICAgICAgICAgICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gdGhyb3dzIGFuIGV4Y2VwdGlvbgogICAgICAqLwogICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChFeGNlcHRpb24gZSwgQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgY29ubkhvbGRlck9iamVjdC5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICBjZS5zZXRDb25uZWN0aW9uSGFuZGxlKGNvbm5Ib2xkZXJPYmplY3QpOwogICAgICAgICBsaXN0ZW5lci5jb25uZWN0aW9uQ2xvc2VkKGNlKTsKLQkKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gd2hlbiBpdCBkZXRlY3RzIGEgY29ubmVjaW9uCiAgICAgICogcmVsYXRlZCBlcnJvci4KICAgICAgKgotICAgICAqIEBwYXJhbQllCUV4Y2VwdGlvbiB0aGF0IGhhcyBvY2N1cnJlZCBkdXJpbmcgYW4gb3BlcmF0aW9uIG9uIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCi0gICAgICogQHBhcmFtCWNvbm5Ib2xkZXJPYmplY3QJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBkZXRlY3RlZCB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJY29ubmVjdGlvbiBlcnJvcgorICAgICAqIEBwYXJhbSAgICBlICAgIEV4Y2VwdGlvbiB0aGF0IGhhcyBvY2N1cnJlZCBkdXJpbmcgYW4gb3BlcmF0aW9uIG9uIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIGNvbm5Ib2xkZXJPYmplY3QgICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBkZXRlY3RlZCB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBlcnJvcgogICAgICAqLwotICAgIHZvaWQgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoRXhjZXB0aW9uIGUsIAorICAgIHZvaWQgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoRXhjZXB0aW9uIGUsCiAgICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0KSB7Ci0JICAgIAorCiAgICAgICAgICBDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBjZWwgPSB0aGlzLmxpc3RlbmVyOwogICAgICAgICAgQ29ubmVjdGlvbkV2ZW50IGNlID0gbnVsbDsKICAgICAgICAgIGNlID0gZSA9PSBudWxsID8gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9FUlJPUl9PQ0NVUlJFRCkKICAgICAgICAgICAgICAgICAgICAgOiBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0VSUk9SX09DQ1VSUkVELCBlKTsKICAgICAgICAgIGlmIChjb25uSG9sZGVyT2JqZWN0ICE9IG51bGwpIHsKICAgICAgICAgICAgICBjZS5zZXRDb25uZWN0aW9uSGFuZGxlKGNvbm5Ib2xkZXJPYmplY3QpOwotICAgICAgICAgfSAgICAKKyAgICAgICAgIH0KIAogICAgICAgICAgY2VsLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGNlKTsKICAgICAgICAgIGlzVXNhYmxlID0gZmFsc2U7CiAgICAgfQotICAgIAotICAgIAotICAgIAorCisKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdoZW4gaXRzIHN0YXJ0IG1ldGhvZAogICAgICAqIGhhcyBiZWVuIGludm9rZWQuCkBAIC02MDYsNyArNjA2LDcgQEAKICAgICAgICAgICAgIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGUsIG51bGwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hlbiBpdHMgZW5kIG1ldGhvZAogICAgICAqIGhhcyBiZWVuIGludm9rZWQuCkBAIC02MjAsNyArNjIwLDcgQEAKICAgICAgICAgICAgIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGUsIG51bGwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGEgQ29ubmVjdGlvbiBIYW5kbGUgdG8gY2hlY2sgaWYgaXQgaXMKICAgICAgKiB0aGUgYWN0aXZlIENvbm5lY3Rpb24gSGFuZGxlLiBJZiBpdCBpcyBub3QgdGhlIGFjdGl2ZSBDb25uZWN0aW9uCkBAIC02MjksMjQgKzYyOSwyNCBAQAogICAgICAqIENvbm5lY3Rpb24gSGFuZGxlIG9iamVjdCB0byB0aGlzIG9iamVjdCBpZiB0aGUgYWN0aXZlIENvbm5lY3Rpb24KICAgICAgKiBIYW5kbGUgaXMgbnVsbC4KICAgICAgKgotICAgICAqIEBwYXJhbQljaAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IHJlcXVlc3RzIHRoaXMKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSB3aGV0aGVyCi0gICAgICoJCQlpdCBjYW4gYmUgYWN0aXZlIG9yIG5vdAotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCWluIGNhc2UgdGhlIHBoeXNpY2FsIGlzIG5vdCB2YWxpZCBvcgotICAgICAqCQkJCXRoZXJlIGlzIGFscmVhZHkgYW4gYWN0aXZlIGNvbm5lY3Rpb24gaGFuZGxlCisgICAgICogQHBhcmFtICAgIGNoICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgcmVxdWVzdHMgdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHdoZXRoZXIKKyAgICAgKiAgICAgICAgICAgIGl0IGNhbiBiZSBhY3RpdmUgb3Igbm90CisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgaW4gY2FzZSB0aGUgcGh5c2ljYWwgaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgdGhlcmUgaXMgYWxyZWFkeSBhbiBhY3RpdmUgY29ubmVjdGlvbiBoYW5kbGUKICAgICAgKi8KLSAgICAgCisKICAgICB2b2lkIGNoZWNrSWZBY3RpdmUoQ29ubmVjdGlvbkhvbGRlciBjaCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUgfHwgaXNVc2FibGUgPT0gZmFsc2UpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIlRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB1c2FibGUiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlID09IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsKICAgICAgICAgICAgIGNoLnNldEFjdGl2ZSh0cnVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IGNoKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBoYW5kbGUgY2Fubm90IGJlIHVzZWQgYXMgYW5vdGhlciBjb25uZWN0aW9uIGlzIGN1cnJlbnRseSBhY3RpdmUiKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQppbmRleCAyMGYwM2FhLi5mNjUwZDQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogLyoqCiAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzAzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhIHsKIApAQCAtNDEsODEgKzQxLDgxIEBACiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4JaWYgZ2V0dGluZyB0aGUgRGF0YWJhc2VNZXRhRGF0YSBvYmplY3QgZmFpbHMKKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gICAgaWYgZ2V0dGluZyB0aGUgRGF0YWJhc2VNZXRhRGF0YSBvYmplY3QgZmFpbHMKICAgICAgKi8KICAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YShNYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICAgICAgICAgIGRtZCA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKS5nZXRNZXRhRGF0YSgpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBwcm9kdWN0IG5hbWUgb2YgdGhlIHVuZGVybHlpbmcgRUlTIGluc3RhbmNlIGNvbm5lY3RlZAogICAgICAqIHRocm91Z2ggdGhlIE1hbmFnZWRDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglQcm9kdWN0IG5hbWUgb2YgdGhlIEVJUyBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBQcm9kdWN0IG5hbWUgb2YgdGhlIEVJUyBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFSVNQcm9kdWN0TmFtZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldERhdGFiYXNlUHJvZHVjdE5hbWUoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZG5hbWUiLCBzcWxlKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2RuYW1lIiwgc3FsZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBwcm9kdWN0IHZlcnNpb24gb2YgdGhlIHVuZGVybHlpbmcgRUlTIGluc3RhbmNlIGNvbm5lY3RlZAogICAgICAqIHRocm91Z2ggdGhlIE1hbmFnZWRDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglQcm9kdWN0IHZlcnNpb24gb2YgdGhlIEVJUyBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBQcm9kdWN0IHZlcnNpb24gb2YgdGhlIEVJUyBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFSVNQcm9kdWN0VmVyc2lvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldERhdGFiYXNlUHJvZHVjdFZlcnNpb24oKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZHZlcnMiLCBzcWxlKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2R2ZXJzIiwgc3FsZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCksIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgbWF4aW11bSBsaW1pdCBvbiBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKICAgICAgKiB0aGF0IGFuIEVJUyBpbnN0YW5jZSBjYW4gc3VwcG9ydCBhY3Jvc3MgY2xpZW50IHByb2Nlc3Nlcy4KICAgICAgKgotICAgICAqIEByZXR1cm4JTWF4aW11bSBsaW1pdCBmb3IgbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIE1heGltdW0gbGltaXQgZm9yIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucworICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRNYXhDb25uZWN0aW9ucygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldE1heENvbm5lY3Rpb25zKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX21heGNvbm4iKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX21heGNvbm4iKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIG5hbWUgb2YgdGhlIHVzZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4gVGhlIG5hbWUKICAgICAgKiBjb3JyZXNwb25kcyB0byB0aGUgcmVzb3VyY2UgcHJpbmNpcGFsIHVuZGVyIHdob3NlIHdob3NlIHNlY3VyaXR5IGNvbnRleHQsIGEgY29ubmVjdGlvbgogICAgICAqIHRvIHRoZSBFSVMgaW5zdGFuY2UgaGFzIGJlZW4gZXN0YWJsaXNoZWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCW5hbWUgb2YgdGhlIHVzZXIKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbmFtZSBvZiB0aGUgdXNlcgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyTmFtZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGpha2FydGEucmVzb3VyY2Uuc3BpLnNlY3VyaXR5LlBhc3N3b3JkQ3JlZGVudGlhbCBwYyA9IG1jLmdldFBhc3N3b3JkQ3JlZGVudGlhbCgpOwogICAgICAgICBpZihwYyAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gcGMuZ2V0VXNlck5hbWUoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbWMuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkuZ2V0VXNlcigpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQppbmRleCBkYWQxZDc3Li40ODJmMzMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCkBAIC0yNCwxNDggKzI0LDE0OCBAQAogLyoqCiAgKiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiB3cmFwcGVyIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMjMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzIzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgWEFSZXNvdXJjZUltcGwgaW1wbGVtZW50cyBYQVJlc291cmNlIHsKIAogICAgIFhBUmVzb3VyY2UgeGFyOwogICAgIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIFhBUmVzb3VyY2VJbXBsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGFyCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+Ci0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB4YXIgICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2VJbXBsKFhBUmVzb3VyY2UgeGFyLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLnhhciA9IHhhcjsKICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCB0aGUgZ2xvYmFsIHRyYW5zYWN0aW9uIHNwZWNpZmllZCBieSB4aWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKLSAgICAgKiBAcGFyYW0Jb25lUGhhc2UJSWYgdHJ1ZSwgdGhlIHJlc291cmNlIG1hbmFnZXIgc2hvdWxkIHVzZSBhIG9uZS1waGFzZSBjb21taXQgCi0gICAgICogICAgICAgCSAgICAgICAgCXByb3RvY29sIHRvIGNvbW1pdCB0aGUgd29yayBkb25lIG9uIGJlaGFsZiBvZiB4aWQuCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIG9uZVBoYXNlICAgIElmIHRydWUsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHNob3VsZCB1c2UgYSBvbmUtcGhhc2UgY29tbWl0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sIHRvIGNvbW1pdCB0aGUgd29yayBkb25lIG9uIGJlaGFsZiBvZiB4aWQuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KFhpZCB4aWQsIGJvb2xlYW4gb25lUGhhc2UpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vdGhlIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkIGNhbGwgaGFzIGNvbWUgaGVyZSBiZWNhc3VlCi0JLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKLQkvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAotCS8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcwotCS8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKLQkvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIC8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93CisgICAgLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKKyAgICAvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCisgICAgLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICAgICAgeGFyLmNvbW1pdCh4aWQsIG9uZVBoYXNlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbmRzIHRoZSB3b3JrIHBlcmZvcm1lZCBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2guCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBpcyB0aGUgc2FtZSBhcyB3aGF0IAotICAgICAqCQkJd2FzIHVzZWQgcHJldmlvdXNseSBpbiB0aGUgc3RhcnQgbWV0aG9kLgotICAgICAqIEBwYXJhbQlmbGFncwlPbmUgb2YgVE1TVUNDRVNTLCBUTUZBSUwsIG9yIFRNU1VTUEVORAorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQKKyAgICAgKiAgICAgICAgICAgIHdhcyB1c2VkIHByZXZpb3VzbHkgaW4gdGhlIHN0YXJ0IG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgZmxhZ3MgICAgT25lIG9mIFRNU1VDQ0VTUywgVE1GQUlMLCBvciBUTVNVU1BFTkQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICB4YXIuZW5kKHhpZCwgZmxhZ3MpOwogICAgICAgICAvL0dKQ0lOVAotCS8vbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICAvL21jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGVsbCB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgYSBoZXVyaXN0aWNhbGx5IGNvbXBsZXRlZCB0cmFuc2FjdGlvbiBicmFuY2guCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgeGFyLmZvcmdldCh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIE9idGFpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIHNldCBmb3IgdGhpcyAKKyAgICAgKiBPYnRhaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBzZXQgZm9yIHRoaXMKICAgICAgKiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcworICAgICAqIEByZXR1cm4gICAgdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcwogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0VHJhbnNhY3Rpb25UaW1lb3V0KCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5nZXRUcmFuc2FjdGlvblRpbWVvdXQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlIAotICAgICAqIHJlcHJlc2VudGVkIGJ5IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSByZXNvdWNlIG1hbmFnZXIgCisgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZQorICAgICAqIHJlcHJlc2VudGVkIGJ5IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSByZXNvdWNlIG1hbmFnZXIKICAgICAgKiBpbnN0YW5jZSByZXByZXNlbnRlZCBieSB0aGUgcGFyYW1ldGVyIHhhcmVzLgogICAgICAqCi0gICAgICogQHBhcmFtCXhhcmVzCUFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aG9zZSByZXNvdXJjZSBtYW5hZ2VyIAotICAgICAqIAkJCWluc3RhbmNlIGlzIHRvIGJlIGNvbXBhcmVkIHdpdGggdGhlIHJlc291cmNlCi0gICAgICogQHJldHVybgl0cnVlIGlmIGl0J3MgdGhlIHNhbWUgUk0gaW5zdGFuY2U7IG90aGVyd2lzZSBmYWxzZS4KKyAgICAgKiBAcGFyYW0gICAgeGFyZXMgICAgQW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdob3NlIHJlc291cmNlIG1hbmFnZXIKKyAgICAgKiAgICAgICAgICAgICBpbnN0YW5jZSBpcyB0byBiZSBjb21wYXJlZCB3aXRoIHRoZSByZXNvdXJjZQorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiBpdCdzIHRoZSBzYW1lIFJNIGluc3RhbmNlOyBvdGhlcndpc2UgZmFsc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNTYW1lUk0oWEFSZXNvdXJjZSB4YXJlcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5pc1NhbWVSTSh4YXJlcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQXNrIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIHByZXBhcmUgZm9yIGEgdHJhbnNhY3Rpb24gY29tbWl0IAorICAgICAqIEFzayB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBwcmVwYXJlIGZvciBhIHRyYW5zYWN0aW9uIGNvbW1pdAogICAgICAqIG9mIHRoZSB0cmFuc2FjdGlvbiBzcGVjaWZpZWQgaW4geGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCi0gICAgICogQHJldHVybglBIHZhbHVlIGluZGljYXRpbmcgdGhlIHJlc291cmNlIG1hbmFnZXIncyB2b3RlIG9uIHRoZSAKLSAgICAgKgkJb3V0Y29tZSBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSBwb3NzaWJsZSB2YWx1ZXMKLSAgICAgKgkJYXJlOiBYQV9SRE9OTFkgb3IgWEFfT0suIElmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHdhbnRzIAotICAgICAqCQl0byByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uLCBpdCBzaG91bGQgZG8gc28KLSAgICAgKgkJYnkgcmFpc2luZyBhbiBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4gaW4gdGhlIHByZXBhcmUgbWV0aG9kLgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEByZXR1cm4gICAgQSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSByZXNvdXJjZSBtYW5hZ2VyJ3Mgdm90ZSBvbiB0aGUKKyAgICAgKiAgICAgICAgb3V0Y29tZSBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSBwb3NzaWJsZSB2YWx1ZXMKKyAgICAgKiAgICAgICAgYXJlOiBYQV9SRE9OTFkgb3IgWEFfT0suIElmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHdhbnRzCisgICAgICogICAgICAgIHRvIHJvbGwgYmFjayB0aGUgdHJhbnNhY3Rpb24sIGl0IHNob3VsZCBkbyBzbworICAgICAqICAgICAgICBieSByYWlzaW5nIGFuIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPiBpbiB0aGUgcHJlcGFyZSBtZXRob2QuCiAgICAgICovCiAgICAgcHVibGljIGludCBwcmVwYXJlKFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIucHJlcGFyZSh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIE9idGFpbiBhIGxpc3Qgb2YgcHJlcGFyZWQgdHJhbnNhY3Rpb24gYnJhbmNoZXMgZnJvbSBhIHJlc291cmNlIG1hbmFnZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZmxhZwlPbmUgb2YgVE1TVEFSVFJTQ0FOLCBUTUVORFJTQ0FOLCBUTU5PRkxBR1MuIFRNTk9GTEFHUyAKLSAgICAgKgkJCW11c3QgYmUgdXNlZCB3aGVuIG5vIG90aGVyIGZsYWdzIGFyZSBzZXQgaW4gZmxhZ3MuCi0gICAgICogQHJldHVybglUaGUgcmVzb3VyY2UgbWFuYWdlciByZXR1cm5zIHplcm8gb3IgbW9yZSBYSURzIGZvciB0aGUgdHJhbnNhY3Rpb24gCi0gICAgICoJCWJyYW5jaGVzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBhIHByZXBhcmVkIG9yIGhldXJpc3RpY2FsbHkgCi0gICAgICoJCWNvbXBsZXRlZCBzdGF0ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgb3BlcmF0aW9uLCB0aGUgcmVzb3VyY2UKLSAgICAgKgkJbWFuYWdlciBzaG91bGQgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gICAgZmxhZyAgICBPbmUgb2YgVE1TVEFSVFJTQ0FOLCBUTUVORFJTQ0FOLCBUTU5PRkxBR1MuIFRNTk9GTEFHUworICAgICAqICAgICAgICAgICAgbXVzdCBiZSB1c2VkIHdoZW4gbm8gb3RoZXIgZmxhZ3MgYXJlIHNldCBpbiBmbGFncy4KKyAgICAgKiBAcmV0dXJuICAgIFRoZSByZXNvdXJjZSBtYW5hZ2VyIHJldHVybnMgemVybyBvciBtb3JlIFhJRHMgZm9yIHRoZSB0cmFuc2FjdGlvbgorICAgICAqICAgICAgICBicmFuY2hlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gYSBwcmVwYXJlZCBvciBoZXVyaXN0aWNhbGx5CisgICAgICogICAgICAgIGNvbXBsZXRlZCBzdGF0ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgb3BlcmF0aW9uLCB0aGUgcmVzb3VyY2UKKyAgICAgKiAgICAgICAgbWFuYWdlciBzaG91bGQgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgWGlkW10gcmVjb3ZlcihpbnQgZmxhZykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5yZWNvdmVyKGZsYWcpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEluZm9ybSB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byByb2xsIGJhY2sgd29yayBkb25lIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaAogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy90aGUgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQgY2FsbCBoYXMgY29tZSBoZXJlIGJlY2FzdWUKLQkvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdwotCS8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCi0JLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCi0JLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAotCS8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgorICAgIC8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93CisgICAgLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKKyAgICAvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCisgICAgLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCiAgICAgICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgICAgIHhhci5yb2xsYmFjayh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGZvciB0aGlzIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlY29uZHMJdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpcyBzZXQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZmFsc2UuCisgICAgICogQHBhcmFtICAgIHNlY29uZHMgICAgdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpcyBzZXQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZmFsc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnNldFRyYW5zYWN0aW9uVGltZW91dChzZWNvbmRzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTdGFydCB3b3JrIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaCBzcGVjaWZpZWQgaW4geGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzb3VyY2UKLSAgICAgKiBAcmV0dXJuCWZsYWdzCU9uZSBvZiBUTU5PRkxBR1MsIFRNSk9JTiwgb3IgVE1SRVNVTUUKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZQorICAgICAqIEByZXR1cm4gICAgZmxhZ3MgICAgT25lIG9mIFRNTk9GTEFHUywgVE1KT0lOLCBvciBUTVJFU1VNRQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy9HSkNJTlQKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKaW5kZXggOTY3ODY4Yi4uNjQxMDU1NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9IiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvc3BpIi8+Ci0gCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzcsNSArMzcsNSBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0Ii8+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKaW5kZXggY2UzMjFhZi4uOWU3ZjI1MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCkBAIC0yNiw4ICsyNiw4IEBACiAvKioKICAqIEV4ZWN1dGUgdGhlIG1ldGhvZHMgYmFzZWQgb24gdGhlIHBhcmFtZXRlcnMuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBNZXRob2RFeGVjdXRvciBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCkBAIC0zOSwxMzAgKzM5LDEzMCBAQAogICAgIC8qKgogICAgICAqIEV4Y2V1dGUgYSBzaW1wbGUgc2V0IE1ldGhvZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl2YWx1ZQlWYWx1ZSB0byBiZSBzZXQuCi0gICAgICogQHBhcmFtCW1ldGhvZAk8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0Jb2JqCU9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgorICAgICAqIEBwYXJhbSAgICB2YWx1ZSAgICBWYWx1ZSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIG1ldGhvZCAgICA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIE9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgogICAgICAqIEB0aHJvd3MgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiwgaW4gY2FzZSBvZiB0aGUgbWlzbWF0Y2ggb2YgcGFyYW1ldGVyIHZhbHVlcyBvcgotICAgICAqCQlhIHNlY3VyaXR5IHZpb2xhdGlvbi4gICAgIAorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBydW5KYXZhQmVhbk1ldGhvZChTdHJpbmcgdmFsdWUsIE1ldGhvZCBtZXRob2QsIE9iamVjdCBvYmopIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJaWYgKHZhbHVlPT1udWxsIHx8IHZhbHVlLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0gICAgCSAgICByZXR1cm47Ci0gICAgCX0KLSAgICAJdHJ5IHsKLSAgICAJICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotICAgIAkgICAgaWYgKCBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAxKSB7Ci0gICAgCSAgICAgICAgT2JqZWN0W10gdmFsdWVzID0gbmV3IE9iamVjdFsxXTsKLSAgICAJICAgIAl2YWx1ZXNbMF0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzWzBdLCB2YWx1ZSk7Ci0gICAgCSAgICAJbWV0aG9kLmludm9rZShvYmosIHZhbHVlcyk7Ci0gICAgCSAgICB9Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0KKyAgICAgICAgaWYgKHZhbHVlPT1udWxsIHx8IHZhbHVlLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOworICAgICAgICAgICAgaWYgKCBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICAgICAgT2JqZWN0W10gdmFsdWVzID0gbmV3IE9iamVjdFsxXTsKKyAgICAgICAgICAgICAgICB2YWx1ZXNbMF0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzWzBdLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgbWV0aG9kLmludm9rZShvYmosIHZhbHVlcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEV4ZWN1dGVzIHRoZSBtZXRob2QuICAgICAKKyAgICAgKiBFeGVjdXRlcyB0aGUgbWV0aG9kLgogICAgICAqCi0gICAgICogQHBhcmFtCW1ldGhvZCA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0Jb2JqCU9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgotICAgICAqIEBwYXJhbQl2YWx1ZXMJUGFyYW1ldGVyIHZhbHVlcyBmb3IgZXhlY3V0aW5nIHRoZSBtZXRob2QuCisgICAgICogQHBhcmFtICAgIG1ldGhvZCA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIE9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgorICAgICAqIEBwYXJhbSAgICB2YWx1ZXMgICAgUGFyYW1ldGVyIHZhbHVlcyBmb3IgZXhlY3V0aW5nIHRoZSBtZXRob2QuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBydW5NZXRob2QoTWV0aG9kIG1ldGhvZCwgT2JqZWN0IG9iaiwgVmVjdG9yIHZhbHVlcykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAl0cnkgewotCSAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLQkgICAgaWYgKHZhbHVlcy5zaXplKCkgIT0gcGFyYW1ldGVycy5sZW5ndGgpIHsKLQkgICAgICAgIHJldHVybjsKLQkgICAgfQotICAgIAkgICAgT2JqZWN0W10gYWN0dWFsVmFsdWVzID0gbmV3IE9iamVjdFtwYXJhbWV0ZXJzLmxlbmd0aF07Ci0gICAgCSAgICBmb3IgKGludCBpID0wOyBpPHBhcmFtZXRlcnMubGVuZ3RoIDsgaSsrKSB7Ci0gICAgCSAgICAJU3RyaW5nIHZhbCA9IChTdHJpbmcpIHZhbHVlcy5nZXQoaSk7Ci0gICAgCSAgICAJaWYgKHZhbC50cmltKCkuZXF1YWxzKCJOVUxMIikpIHsKLSAgICAJICAgIAkgICAgYWN0dWFsVmFsdWVzW2ldID0gbnVsbDsKLSAgICAJICAgIAl9IGVsc2UgewotICAgIAkgICAgCSAgICBhY3R1YWxWYWx1ZXNbaV0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzW2ldLCB2YWwpOwotICAgIAkgICAgCX0KLSAgICAJICAgIH0KLSAgICAJICAgIG1ldGhvZC5pbnZva2Uob2JqLCBhY3R1YWxWYWx1ZXMpOwotICAgIAl9Y2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7CisgICAgICAgIGlmICh2YWx1ZXMuc2l6ZSgpICE9IHBhcmFtZXRlcnMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIE9iamVjdFtdIGFjdHVhbFZhbHVlcyA9IG5ldyBPYmplY3RbcGFyYW1ldGVycy5sZW5ndGhdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9MDsgaTxwYXJhbWV0ZXJzLmxlbmd0aCA7IGkrKykgeworICAgICAgICAgICAgICAgIFN0cmluZyB2YWwgPSAoU3RyaW5nKSB2YWx1ZXMuZ2V0KGkpOworICAgICAgICAgICAgICAgIGlmICh2YWwudHJpbSgpLmVxdWFscygiTlVMTCIpKSB7CisgICAgICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlc1tpXSA9IG51bGw7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsVmFsdWVzW2ldID0gY29udmVydFR5cGUocGFyYW1ldGVyc1tpXSwgdmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZXRob2QuaW52b2tlKG9iaiwgYWN0dWFsVmFsdWVzKTsKKyAgICAgICAgfWNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb252ZXJ0cyB0aGUgdHlwZSBmcm9tIFN0cmluZyB0byB0aGUgQ2xhc3MgdHlwZS4KICAgICAgKgotICAgICAqIEBwYXJhbQl0eXBlCQlDbGFzcyBuYW1lIHRvIHdoaWNoIHRoZSBjb252ZXJzaW9uIGlzIHJlcXVpcmVkLgotICAgICAqIEBwYXJhbQlwYXJhbWV0ZXIJU3RyaW5nIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KLSAgICAgKiBAcmV0dXJuCUNvbnZlcnRlZCB2YWx1ZS4KKyAgICAgKiBAcGFyYW0gICAgdHlwZSAgICAgICAgQ2xhc3MgbmFtZSB0byB3aGljaCB0aGUgY29udmVyc2lvbiBpcyByZXF1aXJlZC4KKyAgICAgKiBAcGFyYW0gICAgcGFyYW1ldGVyICAgIFN0cmluZyB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQuCisgICAgICogQHJldHVybiAgICBDb252ZXJ0ZWQgdmFsdWUuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLiAgICAgCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHByaXZhdGUgT2JqZWN0IGNvbnZlcnRUeXBlKENsYXNzIHR5cGUsIFN0cmluZyBwYXJhbWV0ZXIpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJdHJ5IHsKLSAgICAJICAgIFN0cmluZyB0eXBlTmFtZSA9IHR5cGUuZ2V0TmFtZSgpOwotICAgIAkgICAgaWYgKCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TdHJpbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5PYmplY3QiKSkgewotICAgIAkgICAgCXJldHVybiBwYXJhbWV0ZXI7Ci0gICAgCSAgICB9Ci0gICAgCQotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiaW50IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuSW50ZWdlciIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBJbnRlZ2VyKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9Ci0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoInNob3J0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU2hvcnQiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgU2hvcnQocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYnl0ZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJ5dGUiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgQnl0ZShwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJsb25nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuTG9uZyIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBMb25nKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZmxvYXQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5GbG9hdCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBGbG9hdChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJkb3VibGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Eb3VibGUiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgRG91YmxlKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnRGVjaW1hbCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdJbnRlZ2VyIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYm9vbGVhbiIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJvb2xlYW4iKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgQm9vbGVhbihwYXJhbWV0ZXIpOwotICAgICAgICAgICAgfQkJCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTdHJpbmcgdHlwZU5hbWUgPSB0eXBlLmdldE5hbWUoKTsKKyAgICAgICAgICAgIGlmICggdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU3RyaW5nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuT2JqZWN0IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyOworICAgICAgICAgICAgfQogCi0gICAgCSAgICByZXR1cm4gcGFyYW1ldGVyOwotICAgIAl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX25mZSIsIHBhcmFtZXRlcik7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24ocGFyYW1ldGVyKyI6IE5vdCBhIHZhbGlkIHZhbHVlIGZvciB0aGlzIG1ldGhvZCAiKTsKLSAgICAJfQorICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiaW50IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuSW50ZWdlciIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoInNob3J0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU2hvcnQiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2hvcnQocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYnl0ZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJ5dGUiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQnl0ZShwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJsb25nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuTG9uZyIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMb25nKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImZsb2F0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRmxvYXQiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZG91YmxlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRG91YmxlIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERvdWJsZShwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnRGVjaW1hbCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnSW50ZWdlciIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJib29sZWFuIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQm9vbGVhbiIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCb29sZWFuKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7CisgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbmZlIiwgcGFyYW1ldGVyKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihwYXJhbWV0ZXIrIjogTm90IGEgdmFsaWQgdmFsdWUgZm9yIHRoaXMgbWV0aG9kICIpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQppbmRleCBmYzE0OWJmLi5mMDA4ZTdmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCkBAIC0yOSwzNiArMjksMzYgQEAKIC8qKgogICogU2VjdXJpdHlVdGlscyBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIyCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMgorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFNlY3VyaXR5VXRpbHMgewogCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QsIGdpdmVuIAotICAgICAqIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBzdWJqZWN0IGFuZCB0aGUgCi0gICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPi4gSXQgZmlyc3QgY2hlY2tzIGlmIHRoZSAKLSAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGlzIG51bGwgb3Igbm90LiBJZiBpdCBpcyBub3QgbnVsbCwgCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QsIGdpdmVuCisgICAgICogdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIHN1YmplY3QgYW5kIHRoZQorICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4uIEl0IGZpcnN0IGNoZWNrcyBpZiB0aGUKKyAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGlzIG51bGwgb3Igbm90LiBJZiBpdCBpcyBub3QgbnVsbCwKICAgICAgKiBpdCBjb25zdHJ1Y3RzIGEgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2l0aAogICAgICAqIHRoZSB1c2VyIGFuZCBwYXNzd29yZCBmaWVsZHMgZnJvbSB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBhbmQgcmV0dXJucyB0aGlzCi0gICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QuIElmIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IAotICAgICAqIGlzIG51bGwsIGl0IHJldHJpZXZlcyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGZyb20gCisgICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QuIElmIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CisgICAgICogaXMgbnVsbCwgaXQgcmV0cmlldmVzIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdHMgZnJvbQogICAgICAqIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgYW5kIHJldHVybnMgdGhlIGZpcnN0Ci0gICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYSAKKyAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCB3aGljaCBjb250YWlucyBhCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgaW5zdGFuY2UgZXF1aXZhbGVudAogICAgICAqIHRvIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBwYXJhbWV0ZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPgotICAgICAqIEBwYXJhbQlpbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPglnZW5lcmljIGV4Y2VwdGlvbiBpZiBvcGVyYXRpb24gZmFpbHMKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlNlY3VyaXR5RXhjZXB0aW9uPC9jb2RlPglpZiBhY2Nlc3MgdG8gdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIGlzIGRlbmllZAorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+ICAgIGdlbmVyaWMgZXhjZXB0aW9uIGlmIG9wZXJhdGlvbiBmYWlscworICAgICAqIEB0aHJvd3MgICAgPGNvZGU+U2VjdXJpdHlFeGNlcHRpb248L2NvZGU+ICAgIGlmIGFjY2VzcyB0byB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgaXMgZGVuaWVkCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBQYXNzd29yZENyZWRlbnRpYWwgZ2V0UGFzc3dvcmRDcmVkZW50aWFsKGZpbmFsIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsCiAgICAgICAgICBmaW5hbCBTdWJqZWN0IHN1YmplY3QsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogCi0JaWYgKGluZm8gPT0gbnVsbCkgeworICAgIGlmIChpbmZvID09IG51bGwpIHsKICAgICAgICAgICAgIGlmIChzdWJqZWN0ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC04OSwxNCArODksMTQgQEAKICAgICAgICAgICAgIHJldHVybiBwYzsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0d28gc3RyaW5ncyBhcmUgZXF1YWw7IGZhbHNlIG90aGVyd2lzZQotICAgICAqIAotICAgICAqIEBwYXJhbQlzdHIxCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAcGFyYW0Jc3RyMgk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSB0d28gc3RyaW5ncyBhcmUgZXF1YWwKLSAgICAgKiAgICAgICAgCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHN0cjEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzdHIyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHR3byBzdHJpbmdzIGFyZSBlcXVhbAorICAgICAqICAgICAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgc3RhdGljIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKFN0cmluZyBzdHIxLCBTdHJpbmcgc3RyMikgewogICAgICAgICBpZiAoc3RyMSA9PSBudWxsKSB7CkBAIC0xMDksMTAgKzEwOSwxMCBAQAogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0d28gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGFyZSBlcXVhbDsgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcEMxCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAcGFyYW0JcEMyCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHR3byBQYXNzd29yZENyZWRlbnRpYWxzIGFyZSBlcXVhbAotICAgICAqICAgICAgICAJZmFsc2UJb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHBDMSAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBDMiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSB0d28gUGFzc3dvcmRDcmVkZW50aWFscyBhcmUgZXF1YWwKKyAgICAgKiAgICAgICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHN0YXRpYyBwdWJsaWMgYm9vbGVhbiBpc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKFBhc3N3b3JkQ3JlZGVudGlhbCBwQzEsIFBhc3N3b3JkQ3JlZGVudGlhbCBwQzIpIHsKICAgICAgICAgaWYgKHBDMSA9PSBwQzIpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKaW5kZXggYTU1YmJmMC4uZjA2MGU3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iLiIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3V0aWwiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzMsNyArMzMsNyBAQAogICAgICAgPGphciBqYXJmaWxlPSIke2Rpc3QuZGlyfS8ke3BrZy5kaXJ9L3V0aWwuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCiAgICAgICAgIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyoiLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTEzIiBkZXBlbmRzPSJjb21waWxlIi8+CiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTE0IiBkZXBlbmRzPSJjb21waWxlIi8+CiAKQEAgLTQ0LDUgKzQ0LDUgQEAKICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KLSAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YQppbmRleCBmZjc2ZjAwLi44ODJhZGE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhCkBAIC0xNywxNyArMTcsMTcgQEAKIHBhY2thZ2Ugc2FtcGxlcy5lamIuc3ViY2xhc3Npbmcuc2VydmxldDsKIAogaW1wb3J0IGphdmEuaW8uKjsKLWltcG9ydCBqYXZhLnV0aWwuKjsgCi1pbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7IAotaW1wb3J0IGphdmF4Lm5hbWluZy4qOyAKLWltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOyAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsKK2ltcG9ydCBqYXZheC5uYW1pbmcuKjsKK2ltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogaW1wb3J0IGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdDsKLWltcG9ydCBqYWthcnRhLmVqYi4qOyAKK2ltcG9ydCBqYWthcnRhLmVqYi4qOwogCi1pbXBvcnQgc2FtcGxlcy5lamIuc3ViY2xhc3NpbmcuZWpiLio7IAoraW1wb3J0IHNhbXBsZXMuZWpiLnN1YmNsYXNzaW5nLmVqYi4qOwogaW1wb3J0IGNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjsKIAotcHVibGljIGNsYXNzIFNpbXBsZUJhbmtTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgeyAgCitwdWJsaWMgY2xhc3MgU2ltcGxlQmFua1NlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKIAogICBJbml0aWFsQ29udGV4dCBpbml0Q29udGV4dCA9IG51bGw7CkBAIC00MywxNCArNDMsMTQgQEAKICAgewogICB9CiAKLSAgcHVibGljIHZvaWQgZG9HZXQgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIAotICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAKKyAgcHVibGljIHZvaWQgZG9HZXQgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCisgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgfSAgCisgIH0KIAotICAvKiogaGFuZGxlcyB0aGUgSFRUUCBQT1NUIG9wZXJhdGlvbiAqKi8gCi0gIHB1YmxpYyB2b2lkIGRvUG9zdCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgCi0gICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7IAorICAvKiogaGFuZGxlcyB0aGUgSFRUUCBQT1NUIG9wZXJhdGlvbiAqKi8KKyAgcHVibGljIHZvaWQgZG9Qb3N0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQorICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgIGRvTG9va3VwKCk7CiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTaW1wbGVCYW5rU2VydmxldCBpcyBleGVjdXRpbmciKTsKICAgICBTdHJpbmcgU1NOID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoIlNTTiIpOwpAQCAtNjYsMTQgKzY2LDE0IEBACiAgICAgU3RyaW5nIHppcENvZGUgPSAiIjsKICAgICBsb25nIGN1cnJlbnRTYXZpbmdzQmFsYW5jZSA9IDA7CiAgICAgbG9uZyBjdXJyZW50Q2hlY2tpbmdCYWxhbmNlID0gMDsKLSAgICAgCisKICAgICBTdHJpbmcgYWN0aW9uID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoImFjdGlvbiIpOwogICAgIGlmIChhY3Rpb24uZXF1YWxzKCJDcmVhdGUiKSkKICAgICB7CiAgICAgICBtZXNzYWdlID0gIkFkZCBDdXN0b21lciI7CiAgICAgICBqc3AgPSAiL1NpbXBsZUJhbmtBZGQuanNwIjsKICAgICB9Ci0gICAgZWxzZSBpZiAoYWN0aW9uLmVxdWFscygiQWRkIEN1c3RvbWVyIikpIAorICAgIGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoIkFkZCBDdXN0b21lciIpKQogICAgIHsKICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWRkIEN1c3RvbWVyIGJ1dHRvbiBwcmVzc2VkIik7CiAgICAgICBTU04gPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiU1NOIik7CkBAIC05MCw3ICs5MCw3IEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5ncyA9IGN1c3RvbWVyU2F2aW5nc0hvbWUuY3JlYXRlKFNTTiwgbGFzdE5hbWUsIGZpcnN0TmFtZSwgYWRkcmVzczEsIGFkZHJlc3MyLCBjaXR5LCBzdGF0ZSwgemlwQ29kZSk7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBjcmVhdGUgdGhlIGN1c3RvbWVyIHNhdmluZ3MgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIG1lc3NhZ2UgPSAiQ3VzdG9tZXIgQWRkZWQuIjsKQEAgLTEwMyw3ICsxMDMsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSBjdXN0b21lclNhdmluZ3NIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBqc3AgPSAiL1NpbXBsZUJhbmtFZGl0LmpzcCI7CkBAIC0xMTUsNyArMTE1LDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gY3VzdG9tZXJTYXZpbmdzSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTik7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBmaW5kIHRoZSBjdXN0b21lciBzYXZpbmdzIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBtZXNzYWdlID0gIkRlbGV0ZSBDdXN0b21lciI7CkBAIC0xMjcsMTIgKzEyNywxMiBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3NIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKS5yZW1vdmUoKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGRlbGV0ZSB0aGUgY3VzdG9tZXIgc2F2aW5ncyBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBtZXNzYWdlID0gIkN1c3RvbWVyIERlbGV0ZWQuIjsKICAgICAgIGpzcCA9ICIvU2ltcGxlQmFua01lc3NhZ2UuanNwIjsKLSAgICB9ICAKKyAgICB9CiAKIAogICAgIGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoIlVwZGF0ZSIpKQpAQCAtMTQyLDcgKzE0Miw3IEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5ncyA9IChDdXN0b21lclNhdmluZ3MpY3VzdG9tZXJTYXZpbmdzSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTik7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBmaW5kIHRoZSBjdXN0b21lciBzYXZpbmdzIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgICAgICBjdXN0b21lckNoZWNraW5nID0gKEN1c3RvbWVyQ2hlY2tpbmcpY3VzdG9tZXJDaGVja2luZ0hvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZmluZCB0aGUgY3VzdG9tZXIgY2hlY2tpbmcgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KIApAQCAtMjExLDkgKzIxMSw5IEBACiAgICAgUmVxdWVzdERpc3BhdGNoZXIgZGlzcGF0Y2hlciA9IGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0UmVxdWVzdERpc3BhdGNoZXIoanNwKTsKICAgICBkaXNwYXRjaGVyLmluY2x1ZGUocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIHJldHVybjsKLSAgfSAKKyAgfQogCi0gIHB1YmxpYyB2b2lkIGRvTG9va3VwKCkgCisgIHB1YmxpYyB2b2lkIGRvTG9va3VwKCkKICAgewogICAgIHRyeSB7CiAgICAgICBpbml0Q29udGV4dCA9IG5ldyBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3NxbC9kcm9wQmFua1RhYmxlcy5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCmluZGV4IGRmOWRmMzQuLjMzYTcwNjkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3NxbC9kcm9wQmFua1RhYmxlcy5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbApAQCAtMSArMSBAQAotZHJvcCB0YWJsZSBjdXN0b21lcjI7DQorZHJvcCB0YWJsZSBjdXN0b21lcjI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9zcWwvc2ltcGxlQmFuay5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9zcWwvc2ltcGxlQmFuay5zcWwKaW5kZXggNmVmNzVjMy4uZTE3YWVmNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvc3FsL3NpbXBsZUJhbmsuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3NxbC9zaW1wbGVCYW5rLnNxbApAQCAtMSwxNCArMSwxNCBAQAogZHJvcCB0YWJsZSBjdXN0b21lcjI7CiAKIGNyZWF0ZSB0YWJsZSBjdXN0b21lcjIgKAotICBTU04gdmFyY2hhcjIoOSksIAotICBsYXN0TkFtZSB2YXJjaGFyMigyMCksIAotICBmaXJzdG5hbWUgdmFyY2hhcjIoMjApLCAKLSAgYWRkcmVzczEgdmFyY2hhcjIgKDIwKSwgCi0gIGFkZHJlc3MyIHZhcmNoYXIyKDIwKSwgCi0gIGNpdHkgdmFyY2hhcjIoMTApLCAKLSAgc3RhdGUgdmFyY2hhcjIoMTApLCAKLSAgemlwY29kZSB2YXJjaGFyMig1KSwgCisgIFNTTiB2YXJjaGFyMig5KSwKKyAgbGFzdE5BbWUgdmFyY2hhcjIoMjApLAorICBmaXJzdG5hbWUgdmFyY2hhcjIoMjApLAorICBhZGRyZXNzMSB2YXJjaGFyMiAoMjApLAorICBhZGRyZXNzMiB2YXJjaGFyMigyMCksCisgIGNpdHkgdmFyY2hhcjIoMTApLAorICBzdGF0ZSB2YXJjaGFyMigxMCksCisgIHppcGNvZGUgdmFyY2hhcjIoNSksCiAgIHNhdmluZ3NiYWxhbmNlIG51bWJlcigxMCkgLAogICBjaGVja2luZ2JhbGFuY2UgbnVtYmVyKDEwKSApOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL01FVEEtSU5GL3JhLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvTUVUQS1JTkYvcmEueG1sCmluZGV4IDg2NmViYmMuLmVkNzQwODUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvTUVUQS1JTkYvcmEueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvTUVUQS1JTkYvcmEueG1sCkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogCiAgICAgICAgIDxpbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4gICAgICAgICAgCisgICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgICAgICAgICAgPG1lc3NhZ2VsaXN0ZW5lcj4KICAgICAgICAgICAgICAgICAgICAgPG1lc3NhZ2VsaXN0ZW5lci10eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyCkBAIC05NCw3ICs5NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8L2FjdGl2YXRpb25zcGVjLWNsYXNzPgogICAgICAgICAgICAgICAgICAgICA8L2FjdGl2YXRpb25zcGVjPgogICAgICAgICAgICAgICAgIDwvbWVzc2FnZWxpc3RlbmVyPgotICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4gICAgICAgICAgCisgICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPgogICAgICAgICA8L2luYm91bmQtcmVzb3VyY2VhZGFwdGVyPgogICAgICAgICA8YWRtaW5vYmplY3Q+CiAgICAgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvYnVpbGQueG1sCmluZGV4IDJiNzc0ODkuLjc4Mzk5MWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9idWlsZC54bWwKQEAgLTMwLDggKzMwLDggQEAKIAogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iID4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgotCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CisgICAgPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KKyAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgogICAgIDwvYW50Y2FsbD4KICAgICA8amFyIGphcmZpbGU9Ii4uL2dlbmVyaWMtcmEuamFyIiBiYXNlZGlyPSJjbGFzc2VzIgogICAgICAgICAgaW5jbHVkZXM9ImNvbm5lY3Rvci8qLmNsYXNzIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQppbmRleCA1NTUzM2Q0Li5mNTliMmIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIENvbnRyb2xzIHsKICAgICBwdWJsaWMgc3RhdGljIE9iamVjdCByZWFkeUxvY2sgPSBuZXcgT2JqZWN0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKaW5kZXggNjU4MjMzZS4uZDczYzg2MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIERlbGl2ZXJ5V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zNiw3ICszNiw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgb3A7CiAgICAgcHJpdmF0ZSBib29sZWFuIGtlZXBDb3VudDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnRlciA9IDA7Ci0gICAgCisKICAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIFN0cmluZyBvcCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgdGhpcy5rZWVwQ291bnQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIAorICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywKICAgICAgICAgICAgIFN0cmluZyBvcCwgYm9vbGVhbiBrZWVwQ291bnQpIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC01NSw3ICs1NSw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9NZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7CiAgICAgICAgICAgICAvL2VwLmJlZm9yZURlbGl2ZXJ5KG9uTWVzc2FnZSk7CkBAIC03OCwxMSArNzgsMTEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy9lcC5hZnRlckRlbGl2ZXJ5KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtOTMsMTQgKzkzLDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCmluZGV4IDEwMGNhY2UuLmZhOTNmNjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwogICAgIH0KIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5mb3JnZXQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICB9CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5wcmVwYXJlOiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgICAgIHJldHVybiBYQVJlc291cmNlLlhBX09LOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBYaWRbXSByZWNvdmVyKGludCBmbGFnKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucmVjb3ZlcjogIiArIGZsYWdUb1N0cmluZyhmbGFnKSk7CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtNjYsNyArNjYsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnN0YXJ0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSArICIsIiArCiAgICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCmluZGV4IGI1YjBmMDIuLjRjOWMwMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAvKioKICAqIGNvbGxlY3Rpb24gb2YgbWVzc2FnZXMuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CiAKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICBTdHJpbmcgY29tbWFuZCAgPSBhcmdzWzBdOwogICAgICAgIFN0cmluZyBkZXN0TmFtZSA9IGFyZ3NbMV07CiAgICAgICAgU3RyaW5nIG1lc3NhZ2UgID0gYXJnc1syXTsKLSAgIAorCiAgICAgICAgaWYgKCEiYWRkIi5lcXVhbHMoY29tbWFuZCkpIHsKICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKaW5kZXggODYyZjlmZi4uZDE5OWQwMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCkBAIC0zOCwxMSArMzgsMTEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOwogICAgICAgICBpZiAocmVzZXRDb250cm9sLmVxdWFscygiQkVHSU5OSU5HIikpIHsKICAgICAgICAgICAgQ29udHJvbHMuZG9uZT1mYWxzZTsKLQkgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKLQl9CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGRvbmUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKaW5kZXggMmVjZWM2My4uYTlhODg4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE15V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zNSw3ICszNSw3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIHN0b3AgPSBmYWxzZTsKICAgICBwcml2YXRlIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeTsKICAgICBwcml2YXRlIFdvcmtNYW5hZ2VyIHdtOwotICAgIAorCiAgICAgcHVibGljIE15V29yaygKICAgICAgICAgICAgIFN0cmluZyBuYW1lLCBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksIFdvcmtNYW5hZ2VyIHdtKSB7CiAgICAgICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpOwogCiAgICAgICAgICAgICAgICAgLyoKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTg1LDE0ICs4NSwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCmluZGV4IDk0NmQ5ODcuLmJiNzkxOGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiAgKiBzbyB0aGF0IHRoZSBhcHAgc2VydmVyIGNhbiBpbnN0YW50aWF0ZSBhbmQgY29uZmlndXJlCiAgKiBpdCBhdCB0aGUgcnVudGltZS4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwotcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjIAorcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjCiAgICAgaW1wbGVtZW50cyBBY3RpdmF0aW9uU3BlYywgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgZGVzdGluYXRpb25OYW1lOwpAQCAtNDIsNyArNDIsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25OYW1lICgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25OYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uTmFtZSAoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uTmFtZSgpIGNhbGxlZC4uLiBuYW1lID0gIiArIG5hbWUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uTmFtZSA9IG5hbWU7CkBAIC01MSw3ICs1MSw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvblR5cGUoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uVHlwZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvblR5cGUgKFN0cmluZyB0eXBlKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvblR5cGUgKCkgY2FsbGVkLi4uIHR5cGUgPSAiICsgdHlwZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25UeXBlPSB0eXBlOwpAQCAtNjAsNyArNjAsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdFByb3AoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLnRlc3RQcm9wOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RQcm9wIChTdHJpbmcgdGVzdFByb3ApIHsKICAgICAgICAgZGVidWcoInNldFRlc3RQcm9wICgpIGNhbGxlZC4uLiB0ZXN0UHJvcCA9ICIgKyB0ZXN0UHJvcCk7CiAgICAgICAgIHRoaXMudGVzdFByb3AgPSB0ZXN0UHJvcDsKQEAgLTc2LDcgKzc2LDcgQEAKICAgICAgICAgdGhpcy5yZXNvdXJjZWFkYXB0ZXIgPSByYTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCB2YWxpZGF0ZSgpIHt9IAorICAgIHB1YmxpYyB2b2lkIHZhbGlkYXRlKCkge30KIAogICAgIHByaXZhdGUgdm9pZCBkZWJ1ZyAoU3RyaW5nIG1lc3NhZ2UpCiAgICAgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKaW5kZXggNGNkNTk5Yy4uY2VmNmE1NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCkBAIC00MCwxNSArNDAsMTUgQEAKIC8qKgogICogVGhpcyBpcyBhIHNhbXBsZSByZXNvdXJjZSBhZGFwdGVyCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsIAorcHVibGljIGNsYXNzIFNpbXBsZVJlc291cmNlQWRhcHRlckltcGwKIGltcGxlbWVudHMgUmVzb3VyY2VBZGFwdGVyLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIEJvb3RzdHJhcENvbnRleHQgY3R4OwogICAgIHByaXZhdGUgV29ya01hbmFnZXIgd207CiAgICAgcHJpdmF0ZSBTdHJpbmcgdGVzdE5hbWU7Ci0gICAgCisKICAgICBwcml2YXRlIERvdWJsZSBub25TdHJpbmdQcm9wV2l0aG91dE92ZXJyaWRlZFNldHRlciA9IG51bGw7CiAgICAgcHJpdmF0ZSBEb3VibGUgbm9uU3RyaW5nUHJvcFdpdGhPdmVycmlkZWRTZXR0ZXIgPSBudWxsOwogICAgIHByaXZhdGUgU3RyaW5nIHN0cmluZ1Byb3BXaXRoT3ZlcnJpZGVkU2V0dGVyID0gbnVsbDsKQEAgLTYyLDcgKzYyLDcgQEAKIAogICAgIHB1YmxpYyB2b2lkCiAgICAgc3RhcnQoQm9vdHN0cmFwQ29udGV4dCBjdHgpIHRocm93cyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIjAwMS4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAKICAgICAgICAgdGhpcy5jdHggPSBjdHg7CkBAIC03MiwyMSArNzIsMjEgQEAKIAogICAgICAgICAvL3Rlc3RpbmcgY3JlYXQgdGltZXIKICAgICAgICAgVGltZXIgdGltZXIgPSBudWxsOwotCSAgdHJ5ewotCSAgICAgIHRpbWVyID0gY3R4LmNyZWF0ZVRpbWVyKCk7Ci0JICB9IGNhdGNoKFVuYXZhaWxhYmxlRXhjZXB0aW9uIHVlKSB7Ci0JICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciIpOwotCSAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiRXJyb3IgZm9ybSBib290c3RyYXAiKTsKLQkgIH0KKyAgICAgIHRyeXsKKyAgICAgICAgICB0aW1lciA9IGN0eC5jcmVhdGVUaW1lcigpOworICAgICAgfSBjYXRjaChVbmF2YWlsYWJsZUV4Y2VwdGlvbiB1ZSkgeworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IiKTsKKyAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIGZvcm0gYm9vdHN0cmFwIik7CisgICAgICB9CiAgICAgICAgIGRlYnVnKCIwMDQuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogCiAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAKKwogICAgICAgICAgIFhBVGVybWluYXRvciB4YSA9IGN0eC5nZXRYQVRlcm1pbmF0b3IoKTsKLSAgICAgICAgICAKKwogICAgICAgICAgIFhpZCB4aWQxID0gbmV3IFhJRCgpOwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFhJRDEgPSAiICsgeGlkMSk7Ci0gICAgICAgICAgCisKICAgICAgICAgICBFeGVjdXRpb25Db250ZXh0IGVjID0gbmV3IEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICBlYy5zZXRYaWQoeGlkMSk7CiAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCkBAIC05NiwxNCArOTYsMTQgQEAKICAgICAgICAgICB3bS5kb1dvcmsob3V0dywgMSoxMDAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgeGEuY29tbWl0KHhpZDEsIHRydWUpOwogICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgIAorCiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgZXggPSAiICsgZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICB4YS5yb2xsYmFjayh4aWQxKTsKICAgICAgICAgICB9Ci0gICAgICAgICAgCisKICAgICAgICAgICBYaWQgeGlkMiA9IG5ldyBYSUQoKTsKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBYSUQyID0gIiArIHhpZDIpOwotICAgICAgICAgIAorCiAgICAgICAgICAgZWMgPSBuZXcgRXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgIGVjLnNldFhpZCh4aWQyKTsKICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKQEAgLTEyMCw3ICsxMjAsNyBAQAogICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgIH0KIAotICAgICAgICAKKwogICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IDM7IGkrKykgewogICAgICAgICAgIFRlc3RXTVdvcmsgdyA9IG5ldyBUZXN0V01Xb3JrKGksIGZhbHNlKTsKICAgICAgICAgICB0cnkgewpAQCAtMTI4LDcgKzEyOCw3IEBACiAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGQUlMOiBDQVVHSFQgZXhjZXB0aW9uIDogaSA9ICIgKyBpKTsKICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICB9IAorICAgICAgICAgIH0KICAgICAgICAgICB9CiAKICAgICAgICAgICBmb3IgKGludCBpID0gMyA7IGkgPCA2OyBpKyspIHsKQEAgLTE3Niw3ICsxNzYsNyBAQAogICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgIH0KICAgICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCIwMDUuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogICAgIH0KIApAQCAtMjA4LDEyICsyMDgsMTIgQEAKIAogICAgIHB1YmxpYyB2b2lkCiAgICAgZW5kcG9pbnREZWFjdGl2YXRpb24gKAotICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBlbmRwb2ludEZhY3RvcnksIAorICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBlbmRwb2ludEZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIGRlYnVnICgiZW5kcG9pbnREZWFjdGl2YXRpb24gY2FsbGVkLi4uIik7CiAgICAgICAgICgoV29ya0Rpc3BhdGNoZXIpIHdvcmspLnN0b3AoKTsKICAgICB9Ci0gIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHRlc3ROYW1lOwogICAgIH0KQEAgLTIyNywzNCArMjI3LDM0IEBACiAgICAgICAgIGRlYnVnICgiZ2V0Tm9uU3RyaW5nUHJvcFdpdGhvdXRPdmVycmlkZWRTZXR0ZXIgY2FsbGVkLi4uIik7CiAgICAgICAgIHJldHVybiB0aGlzLm5vblN0cmluZ1Byb3BXaXRob3V0T3ZlcnJpZGVkU2V0dGVyOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5vblN0cmluZ1Byb3BXaXRob3V0T3ZlcnJpZGVkU2V0dGVyKERvdWJsZSBkKSB7CiAgICAgICAgIGRlYnVnICgic2V0Tm9uU3RyaW5nUHJvcFdpdGhvdXRPdmVycmlkZWRTZXR0ZXIoRG91YmxlKSBjYWxsZWQuLi4iKTsKICAgICAgICAgdGhpcy5ub25TdHJpbmdQcm9wV2l0aG91dE92ZXJyaWRlZFNldHRlciA9IGQ7CiAgICAgfQotLy8gICAgCisvLwogICAgIHB1YmxpYyBEb3VibGUgZ2V0Tm9uU3RyaW5nUHJvcFdpdGhPdmVycmlkZWRTZXR0ZXIoKXsKICAgICAgICAgZGVidWcgKCJnZXROb25TdHJpbmdQcm9wV2l0aE92ZXJyaWRlZFNldHRlciBjYWxsZWQuLi4iKTsKICAgICAgICAgcmV0dXJuIHRoaXMubm9uU3RyaW5nUHJvcFdpdGhPdmVycmlkZWRTZXR0ZXI7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0Tm9uU3RyaW5nUHJvcFdpdGhPdmVycmlkZWRTZXR0ZXIoRG91YmxlIGQpIHsKICAgICAgICAgZGVidWcgKCJzZXROb25TdHJpbmdQcm9wV2l0aE92ZXJyaWRlZFNldHRlcihEb3VibGUpIGNhbGxlZC4uLiIpOwogICAgICAgICB0aGlzLm5vblN0cmluZ1Byb3BXaXRoT3ZlcnJpZGVkU2V0dGVyID0gZDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXROb25TdHJpbmdQcm9wV2l0aE92ZXJyaWRlZFNldHRlcihTdHJpbmcgcykgewogICAgICAgICBkZWJ1ZyAoInNldE5vblN0cmluZ1Byb3BXaXRoT3ZlcnJpZGVkU2V0dGVyKFN0cmluZykgY2FsbGVkLi4uIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAidGhyb3dpbmcgdW5zdXBwb3J0ZWRleGNlcHRpb24iKTsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CiAKICAgICB9Ci0vLyAgICAKKy8vCiAgICAgcHVibGljIFN0cmluZyBnZXRTdHJpbmdQcm9wV2l0aE92ZXJyaWRlZFNldHRlcigpewogICAgICAgICBkZWJ1ZyAoImdldFN0cmluZ1Byb3BXaXRoT3ZlcnJpZGVkU2V0dGVyIGNhbGxlZC4uLiIpOwogICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmdQcm9wV2l0aE92ZXJyaWRlZFNldHRlcjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTdHJpbmdQcm9wV2l0aE92ZXJyaWRlZFNldHRlcihTdHJpbmcgcyl7CiAgICAgICAgIGRlYnVnICgic2V0U3RyaW5nUHJvcFdpdGhPdmVycmlkZWRTZXR0ZXIoU3RyaW5nKSBjYWxsZWQuLi4iKTsKICAgICAgICAgdGhpcy5zdHJpbmdQcm9wV2l0aE92ZXJyaWRlZFNldHRlciA9IHM7CkBAIC0yNjUsMTQgKzI2NSwxNCBAQAogICAgICAgICAgICAgICAgICJ0aHJvd2luZyB1bnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiIpOwogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkIGRlYnVnIChTdHJpbmcgbWVzc2FnZSkgewogICAgICAgICBpZiAoZGVidWcpCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsXSA9PT4gIiArIG1lc3NhZ2UpOwogICAgIH0KIAotICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykgCisgICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKQogICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQppbmRleCA3ZTU4NWEzLi45Y2QwNjYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBUZXN0V01Xb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTQyLDggKzQyLDggQEAKICAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSkgewogICAgICAgICB0aGlzKGlkLCBpc1JvZ3VlLCBmYWxzZSwgbnVsbCk7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLCAKKworICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLAogICAgICAgICAgICAgYm9vbGVhbiBkb05lc3QsIEV4ZWN1dGlvbkNvbnRleHQgY3R4KSB7CiAgICAgICAgIHRoaXMuaWQgPSBpZDsKICAgICAgICAgdGhpcy5pc1JvZ3VlID0gaXNSb2d1ZTsKQEAgLTc3LDEwICs3NywxMCBAQAogICAgICAgICAgICAgfSBjYXRjaCAoV29ya0V4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIGlmIChleC5nZXRFcnJvckNvZGUoKS5lcXVhbHMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya0V4Y2VwdGlvbi5UWF9DT05DVVJSRU5UX1dPUktfRElTQUxMT1dFRCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQVNTOiBDQVVHSFQgRVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKICAgICAgICAgICAgICAgICB3bS5kb1dvcmsobmVzdGVkV29yaywgMSoxMDAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICJGQUlMOiBDQVVHSFQgVU5FWFBFQ1RFRCA9ICIgKyBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCmluZGV4IDM0YTYwNGYuLmNkOThjNDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgV29ya0Rpc3BhdGNoZXIgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtNDQsMTEgKzQ0LDExIEBACiAgICAgcHJpdmF0ZSBBY3RpdmF0aW9uU3BlYyBzcGVjOwogICAgIHByaXZhdGUgV29ya01hbmFnZXIgd207CiAgICAgcHJpdmF0ZSBYQVRlcm1pbmF0b3IgeGE7Ci0gICAgCisKICAgICBwdWJsaWMgV29ya0Rpc3BhdGNoZXIoCiAgICAgICAgICAgICBTdHJpbmcgaWQsCiAgICAgICAgICAgICBCb290c3RyYXBDb250ZXh0IGN0eCwKLSAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwgCisgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIHRoaXMuaWQgICAgICA9IGlkOwogICAgICAgICB0aGlzLmN0eCAgICAgPSBjdHg7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICBkZWJ1ZygiV0FJVC4uLiIpOwpAQCAtODMsMjYgKzgzLDI2IEBACiAgICAgICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKTsKIAogICAgICAgICAgICAgICAgIGlmICghZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOyAKKyAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOwogICAgICAgICAgICAgICAgICAgICAvL3dtLmRvV29yayhkLCAwLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobmV3IEZha2VYQVJlc291cmNlKCkpOwogICAgICAgICAgICAgICAgICAgICBpbnQgbnVtT2ZNZXNzYWdlcyA9IDU7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vaW1wb3J0aW5nIHRyYW5zYWN0aW9uCiAKICAgICAgICAgICAgICAgICAgICAgLy93cml0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgRXhlY3V0aW9uQ29udGV4dCBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKIAotICAgICAgICAgICAgICAgICAgICBEZWxpdmVyeVdvcmsgdyA9IAorICAgICAgICAgICAgICAgICAgICBEZWxpdmVyeVdvcmsgdyA9CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiV1JJVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTExMCw3ICsxMTAsNyBAQAogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiRE9ORSBXUklURSBUTyBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSBudW1PZk1lc3NhZ2VzOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL3JvbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJERUxFVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTE1MCw3ICsxNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiREVMRVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xOTUsNyArMTk1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKFhBUmVzb3VyY2UuWEFfT0sgPT0geGEucHJlcGFyZShlYy5nZXRYaWQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlhBIFBSRVBBUkUvQ09NTUlULiBET05FIFdSSVRFIFRPIERCICIpOwpAQCAtMjA3LDE5ICsyMDcsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IDM7CiAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUgYWxsLgogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIDEsICJERUxFVEVfQUxMIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJET05FIERFTEVURSBBTEwgRlJPTSBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAwOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI0Myw3ICsyNDMsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtMjU4LDE0ICsyNTgsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMjg4LDEzICsyODgsMTMgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vU2xlZXAgZm9yIDUgc2Vjb25kcwogICAgICAgICAgICAgLy9UaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDUqMTAwMCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIC8vTm90aWZ5IHRoZSBjbGllbnQgdG8gY2hlY2sgdGhlIHJlc3VsdHMKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5KCk7IAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnkoKTsKKwogICAgICAgICAgICAgICAgIC8vV2FpdCB1bnRpbCByZXN1bHRzIGFyZSB2ZXJpZmllZCBieSB0aGUgY2xpZW50Ci0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsKIAogICAgICAgICAgICAgICAgIGlmIChzdG9wKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTMxMCw3ICszMTAsNyBAQAogICAgICAgICAgICAgQ29udHJvbHMuZG9uZSA9IHRydWU7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgLy9Ob3RpZnkgdGhlIGNsaWVudCB0byBjaGVjayB0aGUgcmVzdWx0cwotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnkoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCmluZGV4IDZhNmY4NGYuLmY1Yjk3N2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKQEAgLTMxLDggKzMxLDggQEAKICAgICBwdWJsaWMgaW50IGJyYW5jaFF1YWxpZmllcjsKICAgICBwdWJsaWMgaW50IGdsb2JhbFR4SUQ7CiAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsgCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7IAorICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OworICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OwogCiAgICAgcHVibGljIFhJRCgpIHsKICAgICAgICAgaW50IGZvbyA9IElEKys7CkBAIC01MCwxMCArNTAsMTAgQEAKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgIC8vIEl0IGNhbid0IGJlIGVxdWFsCiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgb3RoZXIgPSAoWElEKW87ICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvdGhlciBYSUQsIG5vdyBwcm9wZXJseSBjYXN0Ci0gICAgICAgIAotICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRCAKKworICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRAogICAgICAgICAgICAgICAgICYmIHRoaXMuYnJhbmNoUXVhbGlmaWVyID09IG90aGVyLmJyYW5jaFF1YWxpZmllcgogICAgICAgICAgICAgICAgICYmIHRoaXMuZ2xvYmFsVHhJRCA9PSBvdGhlci5nbG9iYWxUeElEKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkzLDcgKzkzLDcgQEAKICAgICAgICAgICAgICAgICAiZm9ybWF0SUQoIiAgICAgKyBmb3JtYXRJRCAgICAgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImJyYW5jaFF1YWxpZmllciAoIiArIGJyYW5jaFF1YWxpZmllciArICIpLCAiICsKICAgICAgICAgICAgICAgICAiZ2xvYmFsVHhJRCgiICsgZ2xvYmFsVHhJRCArICIpfSIpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gczsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL2FwcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9hcHAvYnVpbGQueG1sCmluZGV4IDZjNThlZmIuLmVkZWNiYWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL2FwcC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvYXBwL2J1aWxkLnhtbApAQCAtMzQsOCArMzQsOCBAQAogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNsZWFuLWNvbW1vbiI+CiAgICA8YW50IGRpcj0ic3JjIiBpbmhlcml0QWxsPSJmYWxzZSIgdGFyZ2V0PSJhbGwiLz4KICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJ3b3JrdGVzdCIvPgotCTxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9Indvcmt0ZXN0Ii8+CisgICAgPHBhcmFtIG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgogICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKaW5kZXggOGMxMjE0NC4uMGM2MTllOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCkBAIC0zMyw4ICszMyw4IEBACiAgICAgICA8c2Vzc2lvbi10eXBlPlN0YXRlbGVzczwvc2Vzc2lvbi10eXBlPgogICAgICAgPHRyYW5zYWN0aW9uLXR5cGU+Q29udGFpbmVyPC90cmFuc2FjdGlvbi10eXBlPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+Ci0JPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgorICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgorICAgIDxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxzZWN1cml0eS1pZGVudGl0eT4KICAgICAgICAgPHVzZS1jYWxsZXItaWRlbnRpdHkvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAppbmRleCA5ZmMyYjYwLi44MGExZGMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbApAQCAtNDMsNyArNDMsNyBAQAogICAgICAgPC9pb3Itc2VjdXJpdHktY29uZmlnPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+CiAgICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxqbmRpLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvam5kaS1uYW1lPgorICAgIDxqbmRpLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPGdlbi1jbGFzc2VzLz4KICAgICA8L2VqYj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL2FwcC9zcmMvYmVhbnMvV29ya1Rlc3RFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL2FwcC9zcmMvYmVhbnMvV29ya1Rlc3RFSkIuamF2YQppbmRleCAxOTg3ZWFkLi5lNTkxY2I0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9hcHAvc3JjL2JlYW5zL1dvcmtUZXN0RUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvYXBwL3NyYy9iZWFucy9Xb3JrVGVzdEVKQi5qYXZhCkBAIC0zMiwxMyArMzIsMTMgQEAKIAogICAgIHB1YmxpYyBXb3JrVGVzdEVKQigpIHt9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJiZWFuIHJlbW92ZWQiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBleGVjdXRlVGVzdCgpIHsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICBDb250cm9scy5zZXR1cCgpOwogICAgICAgICAgICAgQ29udHJvbHMuc3VibWl0KCk7CiAgICAgICAgICAgICBDb250cm9scy50cmlnZ2VyV29yaygpOwpAQCAtNDYsMTMgKzQ2LDEzIEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0ub3V0KTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JfQorICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvdGVzdEFkbWluIik7CisgICAgICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvdGVzdEFkbWluIik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwppbmRleCBkYWQyMDdiLi4wYjM4YzE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIGVqYi1qYXIueG1sPU1FVEEtSU5GL2VqYi1qYXIueG1sCiBzdW4tZWpiLWphci54bWw9TUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGI4MWJjZWUuLmVmYTc3NTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCwyMiArMjgsMjIgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgLy9zdXBlcihhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBkb1Rlc3QoKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCBjb25uZWN0b3IgVGhyZWFkUG9vbCAiKwotCSAgICAgICAgICAgICAiY29udHJhY3RzLiIpOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKKwogICAgICAgICBTdHJpbmcgcmVzID0gIk5PVCBSVU4iOwotCWRlYnVnKCJTdGFydGluZyB0aGUgdGhyZWFkIHBvb2wgdGVzdD0+IFBsZWFzZSB3YWl0Li4uIik7CisgICAgZGVidWcoIlN0YXJ0aW5nIHRoZSB0aHJlYWQgcG9vbCB0ZXN0PT4gUGxlYXNlIHdhaXQuLi4iKTsKICAgICAgICAgYm9vbGVhbiBwYXNzID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXMgID0gIiBURVNUIFBBU1NFRCI7CkBAIC01OCwxNCArNTgsMTQgQEAKIAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiQ29ubmVjdG9yLVRocmVhZFBvb2wiKTsKIAotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiRVhJVElORy4uLiBTVEFUVVMgPSAiICsgcmVzKTsKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJXb3JrVGVzdCIpOwotICAgICAgICBXb3JrVGVzdEhvbWUgIGhvbWUgPSAoV29ya1Rlc3RIb21lKSAKKyAgICAgICAgV29ya1Rlc3RIb21lICBob21lID0gKFdvcmtUZXN0SG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBXb3JrVGVzdEhvbWUuY2xhc3MpOwogICAgICAgICBXb3JrVGVzdCB3dCA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIHd0LmV4ZWN1dGVUZXN0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9idWlsZC54bWwKaW5kZXggNzQwNzAzOS4uNTA0Y2Q0MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL2J1aWxkLnhtbApAQCAtNjEsNyArNjEsNyBAQAogCiAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9Indvcmt0ZXN0IiAvPgorICAgIDxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0id29ya3Rlc3QiIC8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvcmEvc3JjL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL3JhL3NyYy9idWlsZC54bWwKaW5kZXggMzBiZmI4MS4uMDk1OWQ4NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvcmEvc3JjL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9yYS9zcmMvYnVpbGQueG1sCkBAIC0zMCw4ICszMCw4IEBACiAKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImluaXQtY29tbW9uIiA+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KLQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgorICAgIDxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+CisgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGphciBqYXJmaWxlPSIuLi90aHJlYWRwb29sdGVzdC1yYS5qYXIiIGJhc2VkaXI9ImNsYXNzZXMiCiAgICAgICAgICBpbmNsdWRlcz0iY29ubmVjdG9yLyouY2xhc3MiIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKaW5kZXggMmFlM2MzMi4uNzRmZWUwNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIGVycm9yID0gZmFsc2U7CiAKICAgICBwcml2YXRlIFdvcmtbXSBzV29ya3MgPSBuZXcgV29ya1tzZXR1cFdvcmtzXTsKLSAgIAorCiAgICAgcHJpdmF0ZSBDb250cm9scyhXb3JrTWFuYWdlciB3bSkgewogICAgICAgICB0aGlzLndtID0gd207CiAgICAgfQpAQCAtNTIsNyArNTIsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgQ29udHJvbHMgZ2V0Q29udHJvbHMoKSB7Ci0gICAgICAgIHJldHVybiBjb250cm9sOyAgCisgICAgICAgIHJldHVybiBjb250cm9sOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldHVwSW5pdGlhbFdvcmtzKCkgewpAQCAtODAsNyArODAsNyBAQAogCiAgICAgcHVibGljIHZvaWQgdHJpZ2dlcigpIHsKICAgICAgICAgaWYgKGNvbXBsZXRlZENvdW50ID4gMCB8fCByZWplY3RlZENvdW50ID4gMCB8fCBlcnJvcikgewotICAgICAgICAgICAgcmVsZWFzZUFsbCgpOyAKKyAgICAgICAgICAgIHJlbGVhc2VBbGwoKTsKICAgICAgICAgICAgIGRlYnVnKCJDb21wbGV0ZWQgY291bnQgPT4gIiArIGNvbXBsZXRlZENvdW50ICsgIiBSZWplY3RlZCBjb3VudDoiKyByZWplY3RlZENvdW50ICsgImVycm9yOiAiICsgZXJyb3IpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkVycm9yIHdoaWxlIHRyaWdnZXJpbmcgdGhlIGFjdHVhbCB0ZXN0cyIpOwogICAgICAgICB9CkBAIC0xNjEsNyArMTYxLDcgQEAKICAgICAgICAgICAgICAgICBldmVudC5nZXRFeGNlcHRpb24oKS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlOwotICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtMjExLDcgKzIxMSw3IEBACiAgICAgICAgIH0KICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewogICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLSAgICAgICAgICAgICAgIHRyeSB7IAorICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICB3YWl0KFRJTUVfT1VUK0JVRkZFUik7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCmluZGV4IGU2NGQwNTMuLjE3NjBiYmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCkBAIC0zOSwxNSArMzksMTUgQEAKICAgICBwdWJsaWMgdm9pZCBzZXROdW1iZXJPZlNldHVwV29ya3MoaW50IGNvdW50KSB7CiAgICAgICAgIGNvbnRyb2wuc2V0TnVtYmVyT2ZTZXR1cFdvcmtzKGNvdW50KTsKICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyBpbnQgZ2V0TnVtYmVyT2ZTZXR1cFdvcmtzKCkgewogICAgICAgICByZXR1cm4gY29udHJvbC5nZXROdW1iZXJPZlNldHVwV29ya3MoKTsKICAgICB9Ci0gICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0TnVtYmVyT2ZBY3R1YWxXb3JrcyhpbnQgbnVtKSB7CiAgICAgICAgIGNvbnRyb2wuc2V0TnVtYmVyT2ZBY3R1YWxXb3JrcyhudW0pOwogICAgIH0KLSAgICAgCisKICAgICBwdWJsaWMgaW50IGdldE51bWJlck9mQWN0dWFsV29ya3MoKSB7CiAgICAgICAgIHJldHVybiBjb250cm9sLmdldE51bWJlck9mQWN0dWFsV29ya3MoKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9yYS9zcmMvY29ubmVjdG9yL1RocmVhZFBvb2xUZXN0UkEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL3JhL3NyYy9jb25uZWN0b3IvVGhyZWFkUG9vbFRlc3RSQS5qYXZhCmluZGV4IDZiZjdmMmEuLmI0YjljMzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL3JhL3NyYy9jb25uZWN0b3IvVGhyZWFkUG9vbFRlc3RSQS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL3JhL3NyYy9jb25uZWN0b3IvVGhyZWFkUG9vbFRlc3RSQS5qYXZhCkBAIC03MCwxOCArNzAsMTggQEAKIAogICAgIHB1YmxpYyB2b2lkCiAgICAgZW5kcG9pbnREZWFjdGl2YXRpb24gKAotICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBlbmRwb2ludEZhY3RvcnksIAorICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBlbmRwb2ludEZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIGRlYnVnICgiZW5kcG9pbnREZWFjdGl2YXRpb24gY2FsbGVkLi4uIik7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogICAgIH0KLSAgCisKICAgICB2b2lkIGRlYnVnIChTdHJpbmcgbWVzc2FnZSkgewogICAgICAgICBpZiAoZGVidWcpCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsXSA9PT4gIiArIG1lc3NhZ2UpOwogICAgIH0KIAotICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykgCisgICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKQogICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvYnVpbGQucHJvcGVydGllcwppbmRleCA0Njg2NjE4Li5kYjFkNTc1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY29ubmVjdG9yLXR4bGV2ZWxzd2l0Y2gtdGVzdDEiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJyYXJmaWxlIiB2YWx1ZT0iamRiYy1yYS14YS5yYXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL2J1aWxkLnhtbAppbmRleCBiNDc2MDIyLi5jNDg4MmJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvYnVpbGQueG1sCkBAIC0zOCw5ICszOCw5IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KLQk8YW50IGRpcj0icmEiIHRhcmdldD0iY2xlYW4iLz4KKyAgICA8YW50IGRpcj0icmEiIHRhcmdldD0iY2xlYW4iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTU0LDI1ICs1NCwyNSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLXJhIi8+Ci0JPGFudCBkaXI9InJhIiB0YXJnZXQ9ImFzc2VtYmxlIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDxhbnQgZGlyPSJyYSIgdGFyZ2V0PSJhc3NlbWJsZSIvPgorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1yYS1jb25maWciLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1yYS1jb25maWciLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXJhci1jb21tb24iPgotCQk8cGFyYW0gbmFtZT0icmFyZmlsZSIgdmFsdWU9InJhL3B1Ymxpc2gvbGliL2pkYmMtcmEteGEucmFyIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyYXJmaWxlIiB2YWx1ZT0icmEvcHVibGlzaC9saWIvamRiYy1yYS14YS5yYXIiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWNvbm5lY3Rvci1jb25ucG9vbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0icmEubmFtZSIgdmFsdWU9ImpkYmMtcmEteGEiLz4KLQk8cGFyYW0gbmFtZT0iY29ubmVjdGlvbi5kZWZuYW1lIiB2YWx1ZT0iamF2YXguc3FsLlhBRGF0YVNvdXJjZSIvPgotCTxwYXJhbSBuYW1lPSJleHRyYS1wYXJhbXMiIHZhbHVlPSItLW1hdGNoY29ubmVjdGlvbnM9ZmFsc2UiLz4KLQk8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmNvbnBvb2wubmFtZSIgdmFsdWU9InR4bGV2ZWxzd2l0Y2gtcG9vbC0xIi8+CisgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rpb24uZGVmbmFtZSIgdmFsdWU9ImphdmF4LnNxbC5YQURhdGFTb3VyY2UiLz4KKyAgICA8cGFyYW0gbmFtZT0iZXh0cmEtcGFyYW1zIiB2YWx1ZT0iLS1tYXRjaGNvbm5lY3Rpb25zPWZhbHNlIi8+CisgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5jb25wb29sLm5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtb3JhY2xlLXByb3BzIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InBvb2wudHlwZSIgdmFsdWU9ImNvbm5lY3RvciIvPgpAQCAtODEsOSArODEsOSBAQAogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jb25uZWN0b3ItY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InJhLm5hbWUiIHZhbHVlPSJqZGJjLXJhLXhhIi8+Ci0JPHBhcmFtIG5hbWU9ImNvbm5lY3Rpb24uZGVmbmFtZSIgdmFsdWU9ImphdmF4LnNxbC5YQURhdGFTb3VyY2UiLz4KLQk8cGFyYW0gbmFtZT0iZXh0cmEtcGFyYW1zIiB2YWx1ZT0iLS1tYXRjaGNvbm5lY3Rpb25zPWZhbHNlIi8+Ci0JPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5jb25wb29sLm5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMiIvPgorICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0aW9uLmRlZm5hbWUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+CisgICAgPHBhcmFtIG5hbWU9ImV4dHJhLXBhcmFtcyIgdmFsdWU9Ii0tbWF0Y2hjb25uZWN0aW9ucz1mYWxzZSIvPgorICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3IuY29ucG9vbC5uYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTIiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LW9yYWNsZS1wcm9wcyI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJwb29sLnR5cGUiIHZhbHVlPSJjb25uZWN0b3IiLz4KQEAgLTkyLDI4ICs5MiwyOCBAQAogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jb25uZWN0b3ItcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5jb25wb29sLm5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMSIvPgotCTxwYXJhbSBuYW1lPSJjb25uZWN0b3Iuam5kaS5uYW1lIiB2YWx1ZT0idGVzdC1yZXMtMSIvPgorICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3Iuam5kaS5uYW1lIiB2YWx1ZT0idGVzdC1yZXMtMSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY29ubmVjdG9yLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3IuY29ucG9vbC5uYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTIiLz4KLQk8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmpuZGkubmFtZSIgdmFsdWU9InRlc3QtcmVzLTIiLz4KKyAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmpuZGkubmFtZSIgdmFsdWU9InRlc3QtcmVzLTIiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJhLWNvbmZpZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImNyZWF0ZS1yZXNvdXJjZS1hZGFwdGVyLWNvbmZpZyAgLS1wcm9wZXJ0eSBSQVByb3BlcnR5PVZBTElEIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iamRiYy1yYS14YSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9ImpkYmMtcmEteGEiLz4KICAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgPC90YXJnZXQ+CiAKICAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmEtY29uZmlnIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtcmVzb3VyY2UtYWRhcHRlci1jb25maWciLz4KLQkgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSJqZGJjLXJhLXhhIi8+Ci0JIDwvYW50Y2FsbD4KLQkgPCEtLTxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+LS0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iZGVsZXRlLXJlc291cmNlLWFkYXB0ZXItY29uZmlnIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iamRiYy1yYS14YSIvPgorICAgICA8L2FudGNhbGw+CisgICAgIDwhLS08YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPi0tPgogICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC0xMjQsNyArMTI0LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLXRlc3QtMyIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tdGVzdC0yIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbm5lY3RvciI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KQEAgLTE0NCw4ICsxNDQsOCBAQAogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktcmFyLWNvbW1vbiIvPgotCTxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXJhLWNvbmZpZyIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXJhLWNvbmZpZyIvPgorICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcmEiPgogICAgICAgIDxhbnQgZGlyPSJyYSIgdGFyZ2V0PSJidWlsZCIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTUzLDE1ICsxNTMsMTUgQEAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QtMSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtcG9vbC10eC1zdXBwb3J0Ij4KLSAgICAgICAgPHBhcmFtIG5hbWU9InR4LXN1cHBvcnQiIHZhbHVlPSJYQVRyYW5zYWN0aW9uIi8+ICAKLQk8cGFyYW0gbmFtZT0icG9vbE5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0idHgtc3VwcG9ydCIgdmFsdWU9IlhBVHJhbnNhY3Rpb24iLz4KKyAgICA8cGFyYW0gbmFtZT0icG9vbE5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtcG9vbC10eC1zdXBwb3J0Ij4KLSAgICAgICAgPHBhcmFtIG5hbWU9InR4LXN1cHBvcnQiIHZhbHVlPSJYQVRyYW5zYWN0aW9uIi8+ICAKLQk8cGFyYW0gbmFtZT0icG9vbE5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMiIvPgorICAgICAgICA8cGFyYW0gbmFtZT0idHgtc3VwcG9ydCIgdmFsdWU9IlhBVHJhbnNhY3Rpb24iLz4KKyAgICA8cGFyYW0gbmFtZT0icG9vbE5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMiIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMSIvPgpAQCAtMTcwLDE2ICsxNzAsMTYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QtMiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtcG9vbC10eC1zdXBwb3J0Ij4KLSAgICAgICAgPHBhcmFtIG5hbWU9InR4LXN1cHBvcnQiIHZhbHVlPSJMb2NhbFRyYW5zYWN0aW9uIi8+ICAKLQk8cGFyYW0gbmFtZT0icG9vbE5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0idHgtc3VwcG9ydCIgdmFsdWU9IkxvY2FsVHJhbnNhY3Rpb24iLz4KKyAgICA8cGFyYW0gbmFtZT0icG9vbE5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtcG9vbC10eC1zdXBwb3J0Ij4KLSAgICAgICAgPHBhcmFtIG5hbWU9InR4LXN1cHBvcnQiIHZhbHVlPSJMb2NhbFRyYW5zYWN0aW9uIi8+ICAKLQk8cGFyYW0gbmFtZT0icG9vbE5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMiIvPgorICAgICAgICA8cGFyYW0gbmFtZT0idHgtc3VwcG9ydCIgdmFsdWU9IkxvY2FsVHJhbnNhY3Rpb24iLz4KKyAgICA8cGFyYW0gbmFtZT0icG9vbE5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMiIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtcG9vbC10eC1zdXBwb3J0Ij4KLSAgICAgICAgPHBhcmFtIG5hbWU9InR4LXN1cHBvcnQiIHZhbHVlPSJMb2NhbFRyYW5zYWN0aW9uIi8+ICAKLQk8cGFyYW0gbmFtZT0icG9vbE5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0idHgtc3VwcG9ydCIgdmFsdWU9IkxvY2FsVHJhbnNhY3Rpb24iLz4KKyAgICA8cGFyYW0gbmFtZT0icG9vbE5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMiIvPgpAQCAtMTg4LDEyICsxODgsMTIgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QtMyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtcG9vbC10eC1zdXBwb3J0Ij4KLSAgICAgICAgPHBhcmFtIG5hbWU9InR4LXN1cHBvcnQiIHZhbHVlPSJMb2NhbFRyYW5zYWN0aW9uIi8+ICAKLQk8cGFyYW0gbmFtZT0icG9vbE5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0idHgtc3VwcG9ydCIgdmFsdWU9IkxvY2FsVHJhbnNhY3Rpb24iLz4KKyAgICA8cGFyYW0gbmFtZT0icG9vbE5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtcG9vbC10eC1zdXBwb3J0Ij4KLSAgICAgICAgPHBhcmFtIG5hbWU9InR4LXN1cHBvcnQiIHZhbHVlPSJYQVRyYW5zYWN0aW9uIi8+ICAKLQk8cGFyYW0gbmFtZT0icG9vbE5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMiIvPgorICAgICAgICA8cGFyYW0gbmFtZT0idHgtc3VwcG9ydCIgdmFsdWU9IlhBVHJhbnNhY3Rpb24iLz4KKyAgICA8cGFyYW0gbmFtZT0icG9vbE5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMiIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMSIvPgpAQCAtMjE0LDEzICsyMTQsMTMgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXJhci1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWNvbm5lY3Rvci1jb25ucG9vbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0icmEubmFtZSIgdmFsdWU9ImpkYmMtcmEteGEiLz4KLQk8cGFyYW0gbmFtZT0iY29ubmVjdGlvbi5kZWZuYW1lIiB2YWx1ZT0iamF2YXguc3FsLlhBRGF0YVNvdXJjZSIvPgotCTxwYXJhbSBuYW1lPSJleHRyYS1wYXJhbXMiIHZhbHVlPSItLW1hdGNoY29ubmVjdGlvbnM9ZmFsc2UiLz4KLQk8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmNvbnBvb2wubmFtZSIgdmFsdWU9InR4bGV2ZWxzd2l0Y2gtcG9vbC0zIi8+CisgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rpb24uZGVmbmFtZSIgdmFsdWU9ImphdmF4LnNxbC5YQURhdGFTb3VyY2UiLz4KKyAgICA8cGFyYW0gbmFtZT0iZXh0cmEtcGFyYW1zIiB2YWx1ZT0iLS1tYXRjaGNvbm5lY3Rpb25zPWZhbHNlIi8+CisgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5jb25wb29sLm5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMyIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY29ubmVjdG9yLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3IuY29ucG9vbC5uYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTMiLz4KLQk8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmpuZGkubmFtZSIgdmFsdWU9InRlc3QtcmVzLTMiLz4KKyAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmpuZGkubmFtZSIgdmFsdWU9InRlc3QtcmVzLTMiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDwhLS0KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWptcy1jb21tb24iPgpAQCAtMjI5LDIwICsyMjksMjAgQEAKICAgICAgIC0tPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY29ubmVjdG9yLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJyYS5uYW1lIiB2YWx1ZT0iam1zcmEiLz4KLQk8cGFyYW0gbmFtZT0iY29ubmVjdGlvbi5kZWZuYW1lIiB2YWx1ZT0iamFrYXJ0YS5qbXMuUXVldWVDb25uZWN0aW9uRmFjdG9yeSIvPgotCTxwYXJhbSBuYW1lPSJleHRyYS1wYXJhbXMiIHZhbHVlPSItLW1hdGNoY29ubmVjdGlvbnM9ZmFsc2UiLz4KLQk8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmNvbnBvb2wubmFtZSIgdmFsdWU9Imptcy1qZGJjLXJlcy0xIi8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSItLXRyYW5zYWN0aW9uc3VwcG9ydCBMb2NhbFRyYW5zYWN0aW9uIi8+CisgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rpb24uZGVmbmFtZSIgdmFsdWU9Impha2FydGEuam1zLlF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkiLz4KKyAgICA8cGFyYW0gbmFtZT0iZXh0cmEtcGFyYW1zIiB2YWx1ZT0iLS1tYXRjaGNvbm5lY3Rpb25zPWZhbHNlIi8+CisgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5jb25wb29sLm5hbWUiIHZhbHVlPSJqbXMtamRiYy1yZXMtMSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iLS10cmFuc2FjdGlvbnN1cHBvcnQgTG9jYWxUcmFuc2FjdGlvbiIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY29ubmVjdG9yLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3IuY29ucG9vbC5uYW1lIiB2YWx1ZT0iam1zLWpkYmMtcmVzLTEiLz4KLQk8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmpuZGkubmFtZSIgdmFsdWU9Imptcy9qbXMtamRiYy1yZXMtMSIvPgorICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3Iuam5kaS5uYW1lIiB2YWx1ZT0iam1zL2ptcy1qZGJjLXJlcy0xIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICA8YXJnIGxpbmU9ImNyZWF0ZS1hZG1pbi1vYmplY3QiLz4KLQk8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgICAgICA8YXJnIGxpbmU9Ii0tcmVzdHlwZSBqYWthcnRhLmptcy5RdWV1ZSIvPgotCTxhcmcgbGluZT0iLS1yYW5hbWUgam1zcmEiLz4KKyAgICA8YXJnIGxpbmU9Ii0tcmFuYW1lIGptc3JhIi8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICAgICAgPGFyZyBsaW5lPSItLXByb3BlcnR5IG1heE51bUFjdGl2ZUNvbnN1bWVycz0ke2FjdGl2ZWNvbnN1bWVyLm1heG51bX0iLz4KICAgICAgICAgPGFyZyBsaW5lPSJqbXMvU2FtcGxlUXVldWUiLz4KQEAgLTI1MCw3ICsyNTAsNyBAQAogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLWZvci1qbXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29ubmVjdG9yIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC0yNjQsNyArMjY0LDcgQEAKICAgICAgIDwhLS0gbmVnYXRpdmUgdGVzdCA6IEpNUz1KREJDPW5vbi14YSAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLXRlc3QtMy1mb3Itam1zIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LWZvci1qbXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29ubmVjdG9yIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgpAQCAtMjg1LDI1ICsyODUsMjUgQEAKICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgIDxhcmcgbGluZT0iZGVsZXRlLWFkbWluLW9iamVjdCIvPgotCTxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICAgICAgPGFyZyBsaW5lPSJqbXMvU2FtcGxlUXVldWUiLz4KICAgICAgIDwvZXhlYz4KLSAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktcmFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0LTEtZm9yLWptcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPCEtLQogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtcG9vbC10eC1zdXBwb3J0Ij4KLSAgICAgICAgPHBhcmFtIG5hbWU9InR4LXN1cHBvcnQiIHZhbHVlPSJMb2NhbFRyYW5zYWN0aW9uIi8+ICAKLQk8cGFyYW0gbmFtZT0icG9vbE5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMyIvPgorICAgICAgICA8cGFyYW0gbmFtZT0idHgtc3VwcG9ydCIgdmFsdWU9IkxvY2FsVHJhbnNhY3Rpb24iLz4KKyAgICA8cGFyYW0gbmFtZT0icG9vbE5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMyIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtcG9vbC10eC1zdXBwb3J0Ij4KLSAgICAgICAgPHBhcmFtIG5hbWU9InR4LXN1cHBvcnQiIHZhbHVlPSJYQVRyYW5zYWN0aW9uIi8+ICAKLQk8cGFyYW0gbmFtZT0icG9vbE5hbWUiIHZhbHVlPSJqbXMtamRiYy1yZXMtMSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0idHgtc3VwcG9ydCIgdmFsdWU9IlhBVHJhbnNhY3Rpb24iLz4KKyAgICA8cGFyYW0gbmFtZT0icG9vbE5hbWUiIHZhbHVlPSJqbXMtamRiYy1yZXMtMSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgLS0+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgpAQCAtMzEzLDEyICszMTMsMTIgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QtMi1mb3Itam1zIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC1wb29sLXR4LXN1cHBvcnQiPgotICAgICAgICA8cGFyYW0gbmFtZT0idHgtc3VwcG9ydCIgdmFsdWU9IlhBVHJhbnNhY3Rpb24iLz4gIAotCTxwYXJhbSBuYW1lPSJwb29sTmFtZSIgdmFsdWU9InR4bGV2ZWxzd2l0Y2gtcG9vbC0zIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ0eC1zdXBwb3J0IiB2YWx1ZT0iWEFUcmFuc2FjdGlvbiIvPgorICAgIDxwYXJhbSBuYW1lPSJwb29sTmFtZSIgdmFsdWU9InR4bGV2ZWxzd2l0Y2gtcG9vbC0zIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC1wb29sLXR4LXN1cHBvcnQiPgotICAgICAgICA8cGFyYW0gbmFtZT0idHgtc3VwcG9ydCIgdmFsdWU9IkxvY2FsVHJhbnNhY3Rpb24iLz4gIAotCTxwYXJhbSBuYW1lPSJwb29sTmFtZSIgdmFsdWU9Imptcy1qZGJjLXJlcy0xIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ0eC1zdXBwb3J0IiB2YWx1ZT0iTG9jYWxUcmFuc2FjdGlvbiIvPgorICAgIDxwYXJhbSBuYW1lPSJwb29sTmFtZSIgdmFsdWU9Imptcy1qZGJjLXJlcy0xIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSJqbXMtamRiYy0yIi8+CkBAIC0zMjcsMTIgKzMyNywxMiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdC0zLWZvci1qbXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LXBvb2wtdHgtc3VwcG9ydCI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJ0eC1zdXBwb3J0IiB2YWx1ZT0iTG9jYWxUcmFuc2FjdGlvbiIvPiAgCi0JPHBhcmFtIG5hbWU9InBvb2xOYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTMiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InR4LXN1cHBvcnQiIHZhbHVlPSJMb2NhbFRyYW5zYWN0aW9uIi8+CisgICAgPHBhcmFtIG5hbWU9InBvb2xOYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTMiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LXBvb2wtdHgtc3VwcG9ydCI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJ0eC1zdXBwb3J0IiB2YWx1ZT0iTG9jYWxUcmFuc2FjdGlvbiIvPiAgCi0JPHBhcmFtIG5hbWU9InBvb2xOYW1lIiB2YWx1ZT0iam1zLWpkYmMtcmVzLTEiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InR4LXN1cHBvcnQiIHZhbHVlPSJMb2NhbFRyYW5zYWN0aW9uIi8+CisgICAgPHBhcmFtIG5hbWU9InBvb2xOYW1lIiB2YWx1ZT0iam1zLWpkYmMtcmVzLTEiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9Imptcy1qZGJjLTMiLz4KQEAgLTM0NCw4ICszNDQsOCBAQAogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZHJvcC1zcWwiPgotICAgICAgCisKICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBmNTc3ZjU3Li4yYjRlYTYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNiwxMzIgKzI2LDEzMiBAQAogaW1wb3J0IGpha2FydGEuam1zLio7CiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLQlTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLQlTdHJpbmcgdGVzdFN1aXRlID0gInR4bGV2ZWxzd2l0Y2gtdGVzdDEgIjsKKyAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKKyAgICBTdHJpbmcgdGVzdFN1aXRlID0gInR4bGV2ZWxzd2l0Y2gtdGVzdDEgIjsKIAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVTZXNzaW9uSG9tZSIpOwotCVNpbXBsZVNlc3Npb25Ib21lIHNpbXBsZVNlc3Npb25Ib21lID0gKFNpbXBsZVNlc3Npb25Ib21lKQorICAgIFNpbXBsZVNlc3Npb25Ib21lIHNpbXBsZVNlc3Npb25Ib21lID0gKFNpbXBsZVNlc3Npb25Ib21lKQogICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlU2Vzc2lvbkhvbWUuY2xhc3MpOwotICAgICAgICAKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJSdW5uaW5nIHR4bGV2ZWxzd2l0Y2ggdGVzdFN1aXRlMSAiKTsKKworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlJ1bm5pbmcgdHhsZXZlbHN3aXRjaCB0ZXN0U3VpdGUxICIpOwogICAgICAgICBTaW1wbGVTZXNzaW9uIHNpbXBsZVNlc3Npb24gPSBzaW1wbGVTZXNzaW9uSG9tZS5jcmVhdGUoKTsKLQlpZiAoICIyIi5lcXVhbHMoYXJnc1swXSkgKSB7Ci0JICAgIC8vSGVyZSB3ZSBhcmUgdXNpbmcgMiBub24tWEEgZGF0YXNvdXJjZXMKLQkgICAgdHJ5IHsKKyAgICBpZiAoICIyIi5lcXVhbHMoYXJnc1swXSkgKSB7CisgICAgICAgIC8vSGVyZSB3ZSBhcmUgdXNpbmcgMiBub24tWEEgZGF0YXNvdXJjZXMKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZiAoc2ltcGxlU2Vzc2lvbi50ZXN0MigpICkgewotCSAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QyIDogIiAsIHN0YXQuUEFTUyApOwotCSAgICAgICAgfSBlbHNlIHsKLQkgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MiA6ICIgLCBzdGF0LkZBSUwgKTsKLQkgICAgICAgIH0KLQkgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXBwIHRocmV3IGV4Y2VwdGlvbioqKioqKioqIik7Ci0JICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3QyIDogIiwgc3RhdC5QQVNTKTsKLQkgICAgfQotCX0gZWxzZSBpZiAoICIxIi5lcXVhbHMoYXJnc1swXSkgfHwgIjMiLmVxdWFscyhhcmdzWzBdKSkgewotCSAgICAvL0hlcmUgd2UgYXJlIHVzaW5nIDIgWEEgZGF0YXNvdXJjZXMKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MiA6ICIgLCBzdGF0LlBBU1MgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDIgOiAiICwgc3RhdC5GQUlMICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFwcCB0aHJldyBleGNlcHRpb24qKioqKioqKiIpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0MiA6ICIsIHN0YXQuUEFTUyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCAiMSIuZXF1YWxzKGFyZ3NbMF0pIHx8ICIzIi5lcXVhbHMoYXJnc1swXSkpIHsKKyAgICAgICAgLy9IZXJlIHdlIGFyZSB1c2luZyAyIFhBIGRhdGFzb3VyY2VzCiAgICAgICAgICAgICBpZiAoc2ltcGxlU2Vzc2lvbi50ZXN0MSgpICkgewotCSAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5QQVNTICk7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LkZBSUwgKTsKLQkgICAgfQotICAgIAotCX0gZWxzZSBpZiAoImptcy1qZGJjLTEiLmVxdWFscyhhcmdzWzBdKSApIHsKLQkgICAgIGlmIChzaW1wbGVTZXNzaW9uLmptc0pkYmNUZXN0MSgpICkgewotCSAgICAgICAgCi0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBOb3cgd2FpdGluZyBmb3IgbWVzc2FnZSBpbiBjbGllbnQgIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEJlZm9yZSBMb29rdXAgb2YgUUNGIik7Ci0JCVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNmID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpCi0JCSAgICAvL2ljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvam1zLWpkYmMtcmVzLTEiKTsKLQkJICAgIGljLmxvb2t1cCgiam1zL2ptcy1qZGJjLXJlcy0xIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIExvb2t1cCBvZiBRQ0YiKTsKLQkgICAgICAgIAotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBCZWZvcmUgbG9va3VwIG9mIFEiKTsKLQkJamFrYXJ0YS5qbXMuUXVldWUgcXVldWUgPSAoamFrYXJ0YS5qbXMuUXVldWUpIGljLmxvb2t1cCgiam1zL1NhbXBsZVF1ZXVlIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGxvb2t1cCBvZiBRIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEJlZm9yZSBjcmVhdGVRdWV1ZUNvbm5lY3Rpb24iKTsKLQkJUXVldWVDb25uZWN0aW9uIHFDb25uID0gcWNmLmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigiZ3Vlc3QiLCAiZ3Vlc3QiKTsKLQkJcUNvbm4uc3RhcnQoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgY3JlYXRlUXVldWVDb25uZWN0aW9uIik7Ci0JCQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBCZWZvcmUgY3JlYXRlUXVldWVTZXNzaW9uIik7Ci0JCVF1ZXVlU2Vzc2lvbiBxU2VzcyA9IHFDb25uLmNyZWF0ZVF1ZXVlU2Vzc2lvbihmYWxzZSwKLQkJICAgIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGNyZWF0ZVF1ZXVlU2Vzc2lvbiIpOwotCQlRdWV1ZVJlY2VpdmVyIHFSZWN2ID0gcVNlc3MuY3JlYXRlUmVjZWl2ZXIocXVldWUpOwotCQlUZXh0TWVzc2FnZSB0ZXh0TXNnID0gKFRleHRNZXNzYWdlKSBxUmVjdi5yZWNlaXZlKCAyMDAwMCApOwotCQkvL2lmICggdGV4dE1zZyAhPSBudWxsICYmICJIZWxsbyBXb3JsZCIuZXF1YWxzKCB0ZXh0TXNnLmdldFRleHQoKSApICkgewotCQlpZiAoIHRleHRNc2cgIT0gbnVsbCApIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFRleHQgbWVzc2FnZSBpcyA6ICIgKyB0ZXh0TXNnLmdldFRleHQoKSApOwotCQkgICAgCi0JICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgam1zLWpkYmMtdGVzdDEgOiAiICwgc3RhdC5QQVNTICk7Ci0JCX0gZWxzZSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBUZXh0TUVzc2FnZSBpcyBudWxsIik7Ci0JCSAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiBqbXMtamRiYy10ZXN0MSA6ICIsIHN0YXQuRkFJTCApOwotCQl9Ci0JCXFTZXNzLmNsb3NlKCk7Ci0JCXFDb25uLmNsb3NlKCk7Ci0JCQotCSAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgam1zLWpkYmMtdGVzdDEgOiAiICwgc3RhdC5QQVNTICk7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiBqbXMtamRiYy10ZXN0MSA6ICIgLCBzdGF0LkZBSUwgKTsKLQkgICAgfQorICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5QQVNTICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LkZBSUwgKTsKKyAgICAgICAgfQogCi0JfSBlbHNlIGlmICgiam1zLWpkYmMtMiIuZXF1YWxzKGFyZ3NbMF0pICkgewotCSAgICBpZiAoIHNpbXBsZVNlc3Npb24uam1zSmRiY1Rlc3QyKCkgKSB7Ci0JICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiBqbXMtamRiYy10ZXN0MiA6ICIgLCBzdGF0LlBBU1MgKTsKLSAgICAgICAgICAgICAgICAKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIE5vdyB3YWl0aW5nIGZvciBtZXNzYWdlIGluIGNsaWVudCAiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgQmVmb3JlIExvb2t1cCBvZiBRQ0YiKTsKLQkJUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY2YgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKLQkJICAgIC8vaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9qbXMtamRiYy1yZXMtMSIpOwotCQkgICAgaWMubG9va3VwKCJqbXMvam1zLWpkYmMtcmVzLTEiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgTG9va3VwIG9mIFFDRiIpOwotCSAgICAgICAgCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEJlZm9yZSBsb29rdXAgb2YgUSIpOwotCQlqYWthcnRhLmptcy5RdWV1ZSBxdWV1ZSA9IChqYWthcnRhLmptcy5RdWV1ZSkgaWMubG9va3VwKCJqbXMvU2FtcGxlUXVldWUiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgbG9va3VwIG9mIFEiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgQmVmb3JlIGNyZWF0ZVF1ZXVlQ29ubmVjdGlvbiIpOwotCQlRdWV1ZUNvbm5lY3Rpb24gcUNvbm4gPSBxY2YuY3JlYXRlUXVldWVDb25uZWN0aW9uKCJndWVzdCIsICJndWVzdCIpOwotCQlxQ29ubi5zdGFydCgpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBjcmVhdGVRdWV1ZUNvbm5lY3Rpb24iKTsKLQkJCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEJlZm9yZSBjcmVhdGVRdWV1ZVNlc3Npb24iKTsKLQkJUXVldWVTZXNzaW9uIHFTZXNzID0gcUNvbm4uY3JlYXRlUXVldWVTZXNzaW9uKGZhbHNlLAotCQkgICAgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgY3JlYXRlUXVldWVTZXNzaW9uIik7Ci0JCVF1ZXVlUmVjZWl2ZXIgcVJlY3YgPSBxU2Vzcy5jcmVhdGVSZWNlaXZlcihxdWV1ZSk7Ci0JCVRleHRNZXNzYWdlIHRleHRNc2cgPSAoVGV4dE1lc3NhZ2UpIHFSZWN2LnJlY2VpdmUoIDIwMDAwICk7Ci0JCS8vaWYgKCB0ZXh0TXNnICE9IG51bGwgJiYgIkhlbGxvIFdvcmxkIi5lcXVhbHMoIHRleHRNc2cuZ2V0VGV4dCgpICkgKSB7Ci0JCWlmICggdGV4dE1zZyAhPSBudWxsICkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIgVGV4dCBtZXNzYWdlIGlzIDogIiArIHRleHRNc2cuZ2V0VGV4dCgpICk7Ci0JCSAgICAKLQkgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiBqbXMtamRiYy10ZXN0MiA6ICIgLCBzdGF0LlBBU1MgKTsKLQkJfSBlbHNlIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFRleHRNZXNzYWdlIGlzIG51bGwiKTsKLQkJICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIGptcy1qZGJjLXRlc3QyIDogIiwgc3RhdC5GQUlMICk7Ci0JCX0KLQkJcVNlc3MuY2xvc2UoKTsKLQkJcUNvbm4uY2xvc2UoKTsKKyAgICB9IGVsc2UgaWYgKCJqbXMtamRiYy0xIi5lcXVhbHMoYXJnc1swXSkgKSB7CisgICAgICAgICBpZiAoc2ltcGxlU2Vzc2lvbi5qbXNKZGJjVGVzdDEoKSApIHsKKworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgTm93IHdhaXRpbmcgZm9yIG1lc3NhZ2UgaW4gY2xpZW50ICIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBCZWZvcmUgTG9va3VwIG9mIFFDRiIpOworICAgICAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjZiA9IChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KQorICAgICAgICAgICAgLy9pYy5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL2ptcy1qZGJjLXJlcy0xIik7CisgICAgICAgICAgICBpYy5sb29rdXAoImptcy9qbXMtamRiYy1yZXMtMSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBMb29rdXAgb2YgUUNGIik7CisKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQmVmb3JlIGxvb2t1cCBvZiBRIik7CisgICAgICAgIGpha2FydGEuam1zLlF1ZXVlIHF1ZXVlID0gKGpha2FydGEuam1zLlF1ZXVlKSBpYy5sb29rdXAoImptcy9TYW1wbGVRdWV1ZSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBsb29rdXAgb2YgUSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBCZWZvcmUgY3JlYXRlUXVldWVDb25uZWN0aW9uIik7CisgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxQ29ubiA9IHFjZi5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oImd1ZXN0IiwgImd1ZXN0Iik7CisgICAgICAgIHFDb25uLnN0YXJ0KCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGNyZWF0ZVF1ZXVlQ29ubmVjdGlvbiIpOworCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEJlZm9yZSBjcmVhdGVRdWV1ZVNlc3Npb24iKTsKKyAgICAgICAgUXVldWVTZXNzaW9uIHFTZXNzID0gcUNvbm4uY3JlYXRlUXVldWVTZXNzaW9uKGZhbHNlLAorICAgICAgICAgICAgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgY3JlYXRlUXVldWVTZXNzaW9uIik7CisgICAgICAgIFF1ZXVlUmVjZWl2ZXIgcVJlY3YgPSBxU2Vzcy5jcmVhdGVSZWNlaXZlcihxdWV1ZSk7CisgICAgICAgIFRleHRNZXNzYWdlIHRleHRNc2cgPSAoVGV4dE1lc3NhZ2UpIHFSZWN2LnJlY2VpdmUoIDIwMDAwICk7CisgICAgICAgIC8vaWYgKCB0ZXh0TXNnICE9IG51bGwgJiYgIkhlbGxvIFdvcmxkIi5lcXVhbHMoIHRleHRNc2cuZ2V0VGV4dCgpICkgKSB7CisgICAgICAgIGlmICggdGV4dE1zZyAhPSBudWxsICkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgVGV4dCBtZXNzYWdlIGlzIDogIiArIHRleHRNc2cuZ2V0VGV4dCgpICk7CisKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiBqbXMtamRiYy10ZXN0MSA6ICIgLCBzdGF0LlBBU1MgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFRleHRNRXNzYWdlIGlzIG51bGwiKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIGptcy1qZGJjLXRlc3QxIDogIiwgc3RhdC5GQUlMICk7CisgICAgICAgIH0KKyAgICAgICAgcVNlc3MuY2xvc2UoKTsKKyAgICAgICAgcUNvbm4uY2xvc2UoKTsKKworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgam1zLWpkYmMtdGVzdDEgOiAiICwgc3RhdC5QQVNTICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiBqbXMtamRiYy10ZXN0MSA6ICIgLCBzdGF0LkZBSUwgKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmICgiam1zLWpkYmMtMiIuZXF1YWxzKGFyZ3NbMF0pICkgeworICAgICAgICBpZiAoIHNpbXBsZVNlc3Npb24uam1zSmRiY1Rlc3QyKCkgKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiBqbXMtamRiYy10ZXN0MiA6ICIgLCBzdGF0LlBBU1MgKTsKKworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgTm93IHdhaXRpbmcgZm9yIG1lc3NhZ2UgaW4gY2xpZW50ICIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBCZWZvcmUgTG9va3VwIG9mIFFDRiIpOworICAgICAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjZiA9IChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KQorICAgICAgICAgICAgLy9pYy5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL2ptcy1qZGJjLXJlcy0xIik7CisgICAgICAgICAgICBpYy5sb29rdXAoImptcy9qbXMtamRiYy1yZXMtMSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBMb29rdXAgb2YgUUNGIik7CisKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQmVmb3JlIGxvb2t1cCBvZiBRIik7CisgICAgICAgIGpha2FydGEuam1zLlF1ZXVlIHF1ZXVlID0gKGpha2FydGEuam1zLlF1ZXVlKSBpYy5sb29rdXAoImptcy9TYW1wbGVRdWV1ZSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBsb29rdXAgb2YgUSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBCZWZvcmUgY3JlYXRlUXVldWVDb25uZWN0aW9uIik7CisgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxQ29ubiA9IHFjZi5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oImd1ZXN0IiwgImd1ZXN0Iik7CisgICAgICAgIHFDb25uLnN0YXJ0KCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGNyZWF0ZVF1ZXVlQ29ubmVjdGlvbiIpOworCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEJlZm9yZSBjcmVhdGVRdWV1ZVNlc3Npb24iKTsKKyAgICAgICAgUXVldWVTZXNzaW9uIHFTZXNzID0gcUNvbm4uY3JlYXRlUXVldWVTZXNzaW9uKGZhbHNlLAorICAgICAgICAgICAgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgY3JlYXRlUXVldWVTZXNzaW9uIik7CisgICAgICAgIFF1ZXVlUmVjZWl2ZXIgcVJlY3YgPSBxU2Vzcy5jcmVhdGVSZWNlaXZlcihxdWV1ZSk7CisgICAgICAgIFRleHRNZXNzYWdlIHRleHRNc2cgPSAoVGV4dE1lc3NhZ2UpIHFSZWN2LnJlY2VpdmUoIDIwMDAwICk7CisgICAgICAgIC8vaWYgKCB0ZXh0TXNnICE9IG51bGwgJiYgIkhlbGxvIFdvcmxkIi5lcXVhbHMoIHRleHRNc2cuZ2V0VGV4dCgpICkgKSB7CisgICAgICAgIGlmICggdGV4dE1zZyAhPSBudWxsICkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgVGV4dCBtZXNzYWdlIGlzIDogIiArIHRleHRNc2cuZ2V0VGV4dCgpICk7CisKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiBqbXMtamRiYy10ZXN0MiA6ICIgLCBzdGF0LlBBU1MgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFRleHRNZXNzYWdlIGlzIG51bGwiKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIGptcy1qZGJjLXRlc3QyIDogIiwgc3RhdC5GQUlMICk7CisgICAgICAgIH0KKyAgICAgICAgcVNlc3MuY2xvc2UoKTsKKyAgICAgICAgcUNvbm4uY2xvc2UoKTsKIAogCi0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiBqbXMtamRiYy10ZXN0MiA6ICIgLCBzdGF0LkZBSUwgKTsKLQkgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgam1zLWpkYmMtdGVzdDIgOiAiICwgc3RhdC5GQUlMICk7CisgICAgICAgIH0KIAotCX0gZWxzZSBpZiAoICJqbXMtamRiYy0zIi5lcXVhbHMoYXJnc1swXSkgKSB7CisgICAgfSBlbHNlIGlmICggImptcy1qZGJjLTMiLmVxdWFscyhhcmdzWzBdKSApIHsKICAgICAgICAgICAgIGlmICggc2ltcGxlU2Vzc2lvbi5qbXNKZGJjVGVzdDMoKSkgewotCSAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgam1zLWpkYmMtdGVzdDMgOiAiICwgc3RhdC5QQVNTICk7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiBqbXMtamRiYy10ZXN0MyA6ICIgLCBzdGF0LkZBSUwgKTsKLQkgICAgfQotCX0JCisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiBqbXMtamRiYy10ZXN0MyA6ICIgLCBzdGF0LlBBU1MgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIGptcy1qZGJjLXRlc3QzIDogIiAsIHN0YXQuRkFJTCApOworICAgICAgICB9CisgICAgfQogCi0JCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggZjkxNTAxMS4uMDFlYmVmYyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC03NSw2ICs3NSw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggMDI0MDY4OS4uM2U3NzY0MCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTM0LDE1ICszNCwxNSBAQAogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPmptcy9TYW1wbGVRdWV1ZTwvcmVzLXJlZi1uYW1lPgotCTxqbmRpLW5hbWU+am1zL1NhbXBsZVF1ZXVlPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5qbXMvU2FtcGxlUXVldWU8L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgPHJlcy1yZWYtbmFtZT5qbXMvam1zLWpkYmMtcmVzLTE8L3Jlcy1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmptcy9qbXMtamRiYy1yZXMtMTwvam5kaS1uYW1lPgorICAgIDxqbmRpLW5hbWU+am1zL2ptcy1qZGJjLXJlcy0xPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgIDxyZXMtcmVmLW5hbWU+dGVzdC1yZXMtMzwvcmVzLXJlZi1uYW1lPgotCTxqbmRpLW5hbWU+dGVzdC1yZXMtMzwvam5kaS1uYW1lPgorICAgIDxqbmRpLW5hbWU+dGVzdC1yZXMtMzwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgIDwvZWpiPgogICA8L2VudGVycHJpc2UtYmVhbnM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCmluZGV4IDc2ZmMzOGMuLjhhZDhhOGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCkBAIC00OSw2OSArNDksNjkgQEAKICAgICAgKiBUaGlzIHNob3VsZCB3b3JrIHNpbmNlIGZvciB0aGlzIHRlc3QgYm90aCBvdXIgcG9vbHMgYXJlIFhBCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKipJTiBURVNUIDEqKioqKioqKioqKioqIik7ICAgIAotCUluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JRGF0YVNvdXJjZSBkczEgPSAoRGF0YVNvdXJjZSlpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTEiKTsKLQlEYXRhU291cmNlIGRzMiA9IChEYXRhU291cmNlKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlMiIpOwotCUNvbm5lY3Rpb24gY29ubjEgPSBudWxsOwotCUNvbm5lY3Rpb24gY29ubjIgPSBudWxsOwotCVN0YXRlbWVudCBzdG10MSA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQyID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMxID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMyID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JdHJ5IHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGdldENvbm5lY3Rpb24gMSIpOwkKLQkgICAgY29ubjEgPSBkczEuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBnZXRDb25uZWN0aW9uIDEiKTsJCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBnZXRDb25uZWN0aW9uIDIiKTsJCi0JICAgIGNvbm4yID0gZHMyLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgZ2V0Q29ubmVjdGlvbiAyIik7CQotCSAgICAKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGNyZWF0ZVN0YXRlbWVudCAxIik7CQotCSAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBjcmVhdGVTdGF0ZW1lbnQgMSIpOwkKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGNyZWF0ZVN0YXRlbWVudCAyIik7CQotCSAgICBzdG10MiA9IGNvbm4yLmNyZWF0ZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBjcmVhdGVTdGF0ZW1lbnQgMiIpOwkKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKipJTiBURVNUIDEqKioqKioqKioqKioqIik7CisgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICBEYXRhU291cmNlIGRzMSA9IChEYXRhU291cmNlKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlMSIpOworICAgIERhdGFTb3VyY2UgZHMyID0gKERhdGFTb3VyY2UpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UyIik7CisgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CisgICAgQ29ubmVjdGlvbiBjb25uMiA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDIgPSBudWxsOworICAgIFJlc3VsdFNldCByczEgPSBudWxsOworICAgIFJlc3VsdFNldCByczIgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICB0cnkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgZ2V0Q29ubmVjdGlvbiAxIik7CisgICAgICAgIGNvbm4xID0gZHMxLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgZ2V0Q29ubmVjdGlvbiAxIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBnZXRDb25uZWN0aW9uIDIiKTsKKyAgICAgICAgY29ubjIgPSBkczIuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBnZXRDb25uZWN0aW9uIDIiKTsKIAotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJleGVjdXRpbmcgc3RhdGVtZW50IDEiKTsgCi0JICAgIHJzMSA9IHN0bXQxLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBUWExFVkVMU1dJVENIIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBjcmVhdGVTdGF0ZW1lbnQgMSIpOworICAgICAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBjcmVhdGVTdGF0ZW1lbnQgMSIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgY3JlYXRlU3RhdGVtZW50IDIiKTsKKyAgICAgICAgc3RtdDIgPSBjb25uMi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgY3JlYXRlU3RhdGVtZW50IDIiKTsKIAotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJleGVjdXRpbmcgc3RhdGVtZW50IDIiKTsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImV4ZWN1dGluZyBzdGF0ZW1lbnQgMSIpOworICAgICAgICByczEgPSBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gVFhMRVZFTFNXSVRDSCIpOworCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImV4ZWN1dGluZyBzdGF0ZW1lbnQgMiIpOwogICAgICAgICAgICAgcnMyID0gc3RtdDIuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIFRYTEVWRUxTV0lUQ0gyIik7CiAKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmluaXNoZWQgZXhlY3V0aW5nIHN0YXRlbWVudHMiKTsgCi0JICAgIHBhc3NlZCA9IHJzMS5uZXh0KCkgJiByczIubmV4dCgpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChyczEgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IHJzMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbmlzaGVkIGV4ZWN1dGluZyBzdGF0ZW1lbnRzIik7CisgICAgICAgIHBhc3NlZCA9IHJzMS5uZXh0KCkgJiByczIubmV4dCgpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChyczEgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHJzMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CiAKLQkgICAgaWYgKHJzMiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgcnMyLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KKyAgICAgICAgaWYgKHJzMiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgcnMyLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KIAotCSAgICBpZiAoIHN0bXQxICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JICAgIGlmICggc3RtdDIgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IHN0bXQyLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQkgICAgaWYgKCBjb25uMSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCSAgICBpZiAoIGNvbm4yICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBjb25uMi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JfQotCi0JcmV0dXJuIHBhc3NlZDsKKyAgICAgICAgaWYgKCBzdG10MSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgICAgIGlmICggc3RtdDIgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHN0bXQyLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoIGNvbm4xICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBjb25uMiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjIuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CiAgICAgfQotICAgIAorCisgICAgcmV0dXJuIHBhc3NlZDsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBHZXQgY29ubmVjdGlvbiB3aXRoIHR3byBub24teGEgZGF0YXNvdXJjZXMuCiAgICAgICogRG8gc29tZSB3b3JrIHVzaW5nIGJvdGguIFNob3VsZCB0aHJvdyBhbgpAQCAtMTIyLDE1MCArMTIyLDE1MCBAQAogICAgICAqIGNoYW5nZW92ZXIgaXMgaW5kZWVkIHN1Y2Nlc3NmdWwKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKklOIFRFU1QgMioqKioqKioqKioqKioiKTsgICAgCi0JSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQlEYXRhU291cmNlIGRzMSA9IChEYXRhU291cmNlKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlMSIpOwotCURhdGFTb3VyY2UgZHMyID0gKERhdGFTb3VyY2UpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UyIik7Ci0JQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7Ci0JQ29ubmVjdGlvbiBjb25uMiA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdDIgPSBudWxsOwotCVJlc3VsdFNldCByczEgPSBudWxsOwotCVJlc3VsdFNldCByczIgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQl0cnkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgZ2V0Q29ubmVjdGlvbiAxIik7CQotCSAgICBjb25uMSA9IGRzMS5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGdldENvbm5lY3Rpb24gMSIpOwkKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGdldENvbm5lY3Rpb24gMiIpOwkKLQkgICAgY29ubjIgPSBkczIuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBnZXRDb25uZWN0aW9uIDIiKTsJCi0JICAgIAotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgY3JlYXRlU3RhdGVtZW50IDEiKTsJCi0JICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGNyZWF0ZVN0YXRlbWVudCAxIik7CQotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgY3JlYXRlU3RhdGVtZW50IDIiKTsJCi0JICAgIHN0bXQyID0gY29ubjIuY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGNyZWF0ZVN0YXRlbWVudCAyIik7CQotICAgICAgICAgICAgCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImV4ZWN1dGluZyBzdGF0ZW1lbnQgMSIpOyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKipJTiBURVNUIDIqKioqKioqKioqKioqIik7CisgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICBEYXRhU291cmNlIGRzMSA9IChEYXRhU291cmNlKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlMSIpOworICAgIERhdGFTb3VyY2UgZHMyID0gKERhdGFTb3VyY2UpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UyIik7CisgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CisgICAgQ29ubmVjdGlvbiBjb25uMiA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDIgPSBudWxsOworICAgIFJlc3VsdFNldCByczEgPSBudWxsOworICAgIFJlc3VsdFNldCByczIgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICB0cnkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgZ2V0Q29ubmVjdGlvbiAxIik7CisgICAgICAgIGNvbm4xID0gZHMxLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgZ2V0Q29ubmVjdGlvbiAxIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBnZXRDb25uZWN0aW9uIDIiKTsKKyAgICAgICAgY29ubjIgPSBkczIuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBnZXRDb25uZWN0aW9uIDIiKTsKIAotCSAgICB0cnkgewotCSAgICAgICAgcnMxID0gc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIFRYTEVWRUxTV0lUQ0giKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGNyZWF0ZVN0YXRlbWVudCAxIik7CisgICAgICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGNyZWF0ZVN0YXRlbWVudCAxIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBjcmVhdGVTdGF0ZW1lbnQgMiIpOworICAgICAgICBzdG10MiA9IGNvbm4yLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBjcmVhdGVTdGF0ZW1lbnQgMiIpOworCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImV4ZWN1dGluZyBzdGF0ZW1lbnQgMSIpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByczEgPSBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gVFhMRVZFTFNXSVRDSCIpOwogICAgICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUyICkgewotCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gZm9yIGZpcnN0IHF1ZXJ5IDoiICsgZTIuZ2V0TWVzc2FnZSgpICk7Ci0JICAgIH0gZmluYWxseSB7Ci0JICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIGZvciBmaXJzdCBxdWVyeSA6IiArIGUyLmdldE1lc3NhZ2UoKSApOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgIAotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJleGVjdXRpbmcgc3RhdGVtZW50IDIiKTsgCi0JICAgIHRyeSB7Ci0JICAgICAgICByczIgPSBzdG10Mi5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gVFhMRVZFTFNXSVRDSDIiKTsKLQkgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUyKSB7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBmb3Igc2Vjb25kIHF1ZXJ5IDoiICsgZTIuZ2V0TWVzc2FnZSgpICk7Ci0JICAgIH0gZmluYWxseSB7Ci0JICAgICAgICBwYXNzZWQgPSBmYWxzZTsKLQkgICAgfSAKIAotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaW5pc2hlZCBleGVjdXRpbmcgc3RhdGVtZW50cyIpOyAKLQkgICAgcGFzc2VkID0gIShyczEubmV4dCgpICYgcnMyLm5leHQoKSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gdHJ1ZTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaW5hbCBleGNlcHRpb24gOiAiICsgZS5nZXRNZXNzYWdlKCkgKTsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAocnMxICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyByczEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJleGVjdXRpbmcgc3RhdGVtZW50IDIiKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJzMiA9IHN0bXQyLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBUWExFVkVMU1dJVENIMiIpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTIpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIGZvciBzZWNvbmQgcXVlcnkgOiIgKyBlMi5nZXRNZXNzYWdlKCkgKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICB9CiAKLQkgICAgaWYgKHJzMiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgcnMyLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmluaXNoZWQgZXhlY3V0aW5nIHN0YXRlbWVudHMiKTsKKyAgICAgICAgcGFzc2VkID0gIShyczEubmV4dCgpICYgcnMyLm5leHQoKSk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaW5hbCBleGNlcHRpb24gOiAiICsgZS5nZXRNZXNzYWdlKCkgKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAocnMxICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyByczEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQogCi0JICAgIGlmICggc3RtdDEgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQkgICAgaWYgKCBzdG10MiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgc3RtdDIuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCSAgICBpZiAoIGNvbm4xICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JICAgIGlmICggY29ubjIgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IGNvbm4yLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQl9Ci0JcmV0dXJuIHBhc3NlZDsKKyAgICAgICAgaWYgKHJzMiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgcnMyLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHN0bXQxICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBzdG10MiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdDIuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgICAgIGlmICggY29ubjEgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoIGNvbm4yICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBHZXQgY29ubmVjdGlvbiB3aXRoIG9uZSBub24tWEEgZGF0YXNvdXJjZSBhbmQgdGhlbiBnZXRDb25uZWN0aW9uCi0gICAgICogd2l0aCBhIEpNUyByZXNvdXJjZSAKKyAgICAgKiB3aXRoIGEgSk1TIHJlc291cmNlCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gam1zSmRiY1Rlc3QxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqSU4gam1zSmRiY1Rlc3QgMSoqKioqKioqKioqKioiKTsgICAgCi0JSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQlEYXRhU291cmNlIGRzMSA9IChEYXRhU291cmNlKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi90ZXN0LXJlcy0zIik7Ci0JUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY2YgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKLQkgICAgaWMubG9va3VwKCJqbXMvam1zLWpkYmMtcmVzLTEiKTsKLQlRdWV1ZSBxID0gKFF1ZXVlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL1NhbXBsZVF1ZXVlIik7ICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKklOIGptc0pkYmNUZXN0IDEqKioqKioqKioqKioqIik7CisgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICBEYXRhU291cmNlIGRzMSA9IChEYXRhU291cmNlKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi90ZXN0LXJlcy0zIik7CisgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY2YgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKKyAgICAgICAgaWMubG9va3VwKCJqbXMvam1zLWpkYmMtcmVzLTEiKTsKKyAgICBRdWV1ZSBxID0gKFF1ZXVlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL1NhbXBsZVF1ZXVlIik7CiAKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOwotCVJlc3VsdFNldCByczEgPSBudWxsOworICAgIENvbm5lY3Rpb24gY29ubjEgPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10MSA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzMSA9IG51bGw7CiAKLQlRdWV1ZVNlc3Npb24gcVNlc3MgPSBudWxsOwotCVF1ZXVlQ29ubmVjdGlvbiBxQ29ubiA9IG51bGw7Ci0JUXVldWVTZW5kZXIgcVNlbmRlciA9IG51bGw7Ci0JVGV4dE1lc3NhZ2UgbWVzc2FnZSA9IG51bGw7Ci0JCi0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKLQl0cnkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgZ2V0Q29ubmVjdGlvbiAxIik7CQotCSAgICBjb25uMSA9IGRzMS5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGdldENvbm5lY3Rpb24gMSIpOwkKKyAgICBRdWV1ZVNlc3Npb24gcVNlc3MgPSBudWxsOworICAgIFF1ZXVlQ29ubmVjdGlvbiBxQ29ubiA9IG51bGw7CisgICAgUXVldWVTZW5kZXIgcVNlbmRlciA9IG51bGw7CisgICAgVGV4dE1lc3NhZ2UgbWVzc2FnZSA9IG51bGw7CisKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBnZXRDb25uZWN0aW9uIDEiKTsKKyAgICAgICAgY29ubjEgPSBkczEuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBnZXRDb25uZWN0aW9uIDEiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEJlZm9yZSBjcmVhdGVTdGF0ZW50Iik7Ci0JICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBjcmVhdGVTdGF0ZW50Iik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEJlZm9yZSBleGVjdXRlUXVlcnkiKTsKLQkgICAgcnMxID0gc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIFRYTEVWRUxTV0lUQ0giKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgZXhlY3V0ZVF1ZXJ5Iik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBjcmVhdGVRdWV1ZUNvbm5lY3Rpb24iKTsJCi0JICAgIHFDb25uID0gcWNmLmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBjcmVhdGVRdWV1ZUNvbm5lY3Rpb24iKTsJCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGNyZWF0ZVF1ZXVlU2Vzc2lvbiIpOyAKLQkgICAgcVNlc3MgPSBxQ29ubi5jcmVhdGVRdWV1ZVNlc3Npb24oIGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UgKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBjcmVhdGVRdWV1ZVNlc3Npb24iKTsgCi0JICAgIHFTZW5kZXIgPSBxU2Vzcy5jcmVhdGVTZW5kZXIoIHEgKTsKLQkgICAgbWVzc2FnZSA9IHFTZXNzLmNyZWF0ZVRleHRNZXNzYWdlKCk7Ci0JICAgIG1lc3NhZ2Uuc2V0VGV4dCggIkhlbGxvIFdvcmxkIik7Ci0JICAgIHFTZW5kZXIuc2VuZCggbWVzc2FnZSApOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBTZW50IE1lc3NhZ2UiKTsKLQkgICAgcGFzc2VkID0gdHJ1ZTsKLQkgICAgCi0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCByczEgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IHJzMS5jbG9zZSgpO30gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KLQkgICAgfQotCSAgICBpZiAoIHN0bXQxICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpO30gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KLQkgICAgfQotCSAgICBpZiAoIGNvbm4xICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JICAgIGlmICggcVNlc3MgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IHFTZXNzLmNsb3NlKCk7fSBjYXRjaChFeGNlcHRpb24gZTEpIHt9Ci0JICAgIH0KLQkgICAgCi0JICAgIGlmICggcUNvbm4gIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IHFDb25uLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQl9Ci0gICAgICAgIAotCXJldHVybiBwYXNzZWQ7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEJlZm9yZSBleGVjdXRlUXVlcnkiKTsKKyAgICAgICAgcnMxID0gc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIFRYTEVWRUxTV0lUQ0giKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgZXhlY3V0ZVF1ZXJ5Iik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBjcmVhdGVRdWV1ZUNvbm5lY3Rpb24iKTsKKyAgICAgICAgcUNvbm4gPSBxY2YuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGNyZWF0ZVF1ZXVlQ29ubmVjdGlvbiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBjcmVhdGVRdWV1ZVNlc3Npb24iKTsKKyAgICAgICAgcVNlc3MgPSBxQ29ubi5jcmVhdGVRdWV1ZVNlc3Npb24oIGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UgKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBjcmVhdGVRdWV1ZVNlc3Npb24iKTsKKyAgICAgICAgcVNlbmRlciA9IHFTZXNzLmNyZWF0ZVNlbmRlciggcSApOworICAgICAgICBtZXNzYWdlID0gcVNlc3MuY3JlYXRlVGV4dE1lc3NhZ2UoKTsKKyAgICAgICAgbWVzc2FnZS5zZXRUZXh0KCAiSGVsbG8gV29ybGQiKTsKKyAgICAgICAgcVNlbmRlci5zZW5kKCBtZXNzYWdlICk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFNlbnQgTWVzc2FnZSIpOworICAgICAgICBwYXNzZWQgPSB0cnVlOworCisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCByczEgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHJzMS5jbG9zZSgpO30gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoIHN0bXQxICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpO30gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoIGNvbm4xICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBxU2VzcyAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgcVNlc3MuY2xvc2UoKTt9IGNhdGNoKEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorCisgICAgICAgIGlmICggcUNvbm4gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHFDb25uLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgLyoqCkBAIC0yNzMsNjkgKzI3Myw2OSBAQAogICAgICAqIHdpdGggYSBKTVMgcmVzb3VyY2UgYXMgbm9uLXhhCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gam1zSmRiY1Rlc3QyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqSU4gam1zSmRiY1Rlc3QgMioqKioqKioqKioqKioiKTsgICAgCi0JSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQlEYXRhU291cmNlIGRzMSA9IChEYXRhU291cmNlKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi90ZXN0LXJlcy0zIik7Ci0JUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY2YgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKLQkgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9qbXMtamRiYy1yZXMtMSIpOwotCVF1ZXVlIHEgPSAoUXVldWUpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvU2FtcGxlUXVldWUiKTsgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqSU4gam1zSmRiY1Rlc3QgMioqKioqKioqKioqKioiKTsKKyAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIERhdGFTb3VyY2UgZHMxID0gKERhdGFTb3VyY2UpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3Rlc3QtcmVzLTMiKTsKKyAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjZiA9IChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KQorICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL2ptcy1qZGJjLXJlcy0xIik7CisgICAgUXVldWUgcSA9IChRdWV1ZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9TYW1wbGVRdWV1ZSIpOwogCi0JQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMxID0gbnVsbDsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOworICAgIFJlc3VsdFNldCByczEgPSBudWxsOwogCi0JUXVldWVTZXNzaW9uIHFTZXNzID0gbnVsbDsKLQlRdWV1ZUNvbm5lY3Rpb24gcUNvbm4gPSBudWxsOwotCVF1ZXVlU2VuZGVyIHFTZW5kZXIgPSBudWxsOwotCVRleHRNZXNzYWdlIG1lc3NhZ2UgPSBudWxsOwotCQotCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQl0cnkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgZ2V0Q29ubmVjdGlvbiAxIik7CQotCSAgICBjb25uMSA9IGRzMS5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGdldENvbm5lY3Rpb24gMSIpOwkKKyAgICBRdWV1ZVNlc3Npb24gcVNlc3MgPSBudWxsOworICAgIFF1ZXVlQ29ubmVjdGlvbiBxQ29ubiA9IG51bGw7CisgICAgUXVldWVTZW5kZXIgcVNlbmRlciA9IG51bGw7CisgICAgVGV4dE1lc3NhZ2UgbWVzc2FnZSA9IG51bGw7CisKKyAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CisgICAgdHJ5IHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGdldENvbm5lY3Rpb24gMSIpOworICAgICAgICBjb25uMSA9IGRzMS5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGdldENvbm5lY3Rpb24gMSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQmVmb3JlIGNyZWF0ZVN0YXRlbnQiKTsKLQkgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGNyZWF0ZVN0YXRlbnQiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQmVmb3JlIGV4ZWN1dGVRdWVyeSIpOwotCSAgICByczEgPSBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gVFhMRVZFTFNXSVRDSCIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBleGVjdXRlUXVlcnkiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQmVmb3JlIGV4ZWN1dGVRdWVyeSIpOworICAgICAgICByczEgPSBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gVFhMRVZFTFNXSVRDSCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBleGVjdXRlUXVlcnkiKTsKIAotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgY3JlYXRlUXVldWVDb25uZWN0aW9uIik7CQotCSAgICBxQ29ubiA9IHFjZi5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgY3JlYXRlUXVldWVDb25uZWN0aW9uIik7CQotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBjcmVhdGVRdWV1ZVNlc3Npb24iKTsgCi0JICAgIHFTZXNzID0gcUNvbm4uY3JlYXRlUXVldWVTZXNzaW9uKCBmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFICk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgY3JlYXRlUXVldWVTZXNzaW9uIik7IAotCSAgICBxU2VuZGVyID0gcVNlc3MuY3JlYXRlU2VuZGVyKCBxICk7Ci0JICAgIG1lc3NhZ2UgPSBxU2Vzcy5jcmVhdGVUZXh0TWVzc2FnZSgpOwotCSAgICBtZXNzYWdlLnNldFRleHQoICJIZWxsbyBXb3JsZCIpOwotCSAgICBxU2VuZGVyLnNlbmQoIG1lc3NhZ2UgKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIgU2VudCBtZXNzYWdlIik7Ci0JICAgIAotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0gZmluYWxseSB7Ci0JICAgIGlmICggcnMxICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyByczEuY2xvc2UoKTt9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9Ci0JICAgIH0KLQkgICAgaWYgKCBzdG10MSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTt9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9Ci0JICAgIH0KLQkgICAgaWYgKCBjb25uMSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCSAgICBpZiAoIHFTZXNzICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBxU2Vzcy5jbG9zZSgpO30gY2F0Y2goRXhjZXB0aW9uIGUxKSB7fQotCSAgICB9Ci0JICAgIAotCSAgICBpZiAoIHFDb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBxQ29ubi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JfQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgY3JlYXRlUXVldWVDb25uZWN0aW9uIik7CisgICAgICAgIHFDb25uID0gcWNmLmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBjcmVhdGVRdWV1ZUNvbm5lY3Rpb24iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgY3JlYXRlUXVldWVTZXNzaW9uIik7CisgICAgICAgIHFTZXNzID0gcUNvbm4uY3JlYXRlUXVldWVTZXNzaW9uKCBmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFICk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgY3JlYXRlUXVldWVTZXNzaW9uIik7CisgICAgICAgIHFTZW5kZXIgPSBxU2Vzcy5jcmVhdGVTZW5kZXIoIHEgKTsKKyAgICAgICAgbWVzc2FnZSA9IHFTZXNzLmNyZWF0ZVRleHRNZXNzYWdlKCk7CisgICAgICAgIG1lc3NhZ2Uuc2V0VGV4dCggIkhlbGxvIFdvcmxkIik7CisgICAgICAgIHFTZW5kZXIuc2VuZCggbWVzc2FnZSApOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBTZW50IG1lc3NhZ2UiKTsKIAotCXJldHVybiBwYXNzZWQ7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCByczEgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHJzMS5jbG9zZSgpO30gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoIHN0bXQxICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpO30gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoIGNvbm4xICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBxU2VzcyAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgcVNlc3MuY2xvc2UoKTt9IGNhdGNoKEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorCisgICAgICAgIGlmICggcUNvbm4gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHFDb25uLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgLyoqCkBAIC0zNDMsNjkgKzM0Myw2OSBAQAogICAgICAqIHdpdGggYSBKTVMgcmVzb3VyY2UgYXMgbm9uLXhhCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gam1zSmRiY1Rlc3QzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqSU4gam1zSmRiY1Rlc3QgMyoqKioqKioqKioqKioiKTsgICAgCi0JSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQlEYXRhU291cmNlIGRzMSA9IChEYXRhU291cmNlKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi90ZXN0LXJlcy0zIik7Ci0JUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY2YgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKLQkgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9qbXMtamRiYy1yZXMtMSIpOwotCVF1ZXVlIHEgPSAoUXVldWUpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvU2FtcGxlUXVldWUiKTsgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqSU4gam1zSmRiY1Rlc3QgMyoqKioqKioqKioqKioiKTsKKyAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIERhdGFTb3VyY2UgZHMxID0gKERhdGFTb3VyY2UpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3Rlc3QtcmVzLTMiKTsKKyAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjZiA9IChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KQorICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL2ptcy1qZGJjLXJlcy0xIik7CisgICAgUXVldWUgcSA9IChRdWV1ZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9TYW1wbGVRdWV1ZSIpOwogCi0JQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMxID0gbnVsbDsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOworICAgIFJlc3VsdFNldCByczEgPSBudWxsOwogCi0JUXVldWVTZXNzaW9uIHFTZXNzID0gbnVsbDsKLQlRdWV1ZUNvbm5lY3Rpb24gcUNvbm4gPSBudWxsOwotCVF1ZXVlU2VuZGVyIHFTZW5kZXIgPSBudWxsOwotCVRleHRNZXNzYWdlIG1lc3NhZ2UgPSBudWxsOwotCQotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JdHJ5IHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGdldENvbm5lY3Rpb24gMSIpOwkKLQkgICAgY29ubjEgPSBkczEuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBnZXRDb25uZWN0aW9uIDEiKTsJCisgICAgUXVldWVTZXNzaW9uIHFTZXNzID0gbnVsbDsKKyAgICBRdWV1ZUNvbm5lY3Rpb24gcUNvbm4gPSBudWxsOworICAgIFF1ZXVlU2VuZGVyIHFTZW5kZXIgPSBudWxsOworICAgIFRleHRNZXNzYWdlIG1lc3NhZ2UgPSBudWxsOworCisgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICB0cnkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgZ2V0Q29ubmVjdGlvbiAxIik7CisgICAgICAgIGNvbm4xID0gZHMxLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgZ2V0Q29ubmVjdGlvbiAxIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBCZWZvcmUgY3JlYXRlU3RhdGVudCIpOwotCSAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgY3JlYXRlU3RhdGVudCIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBCZWZvcmUgZXhlY3V0ZVF1ZXJ5Iik7Ci0JICAgIHJzMSA9IHN0bXQxLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBEQlVTRVIuVFhMRVZFTFNXSVRDSCIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBleGVjdXRlUXVlcnkiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQmVmb3JlIGV4ZWN1dGVRdWVyeSIpOworICAgICAgICByczEgPSBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gREJVU0VSLlRYTEVWRUxTV0lUQ0giKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgZXhlY3V0ZVF1ZXJ5Iik7CiAKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGNyZWF0ZVF1ZXVlQ29ubmVjdGlvbiIpOwkKLQkgICAgcUNvbm4gPSBxY2YuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGNyZWF0ZVF1ZXVlQ29ubmVjdGlvbiIpOwkKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgY3JlYXRlUXVldWVTZXNzaW9uIik7IAotCSAgICBxU2VzcyA9IHFDb25uLmNyZWF0ZVF1ZXVlU2Vzc2lvbiggZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSApOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGNyZWF0ZVF1ZXVlU2Vzc2lvbiIpOyAKLQkgICAgcVNlbmRlciA9IHFTZXNzLmNyZWF0ZVNlbmRlciggcSApOwotCSAgICBtZXNzYWdlID0gcVNlc3MuY3JlYXRlVGV4dE1lc3NhZ2UoKTsKLQkgICAgbWVzc2FnZS5zZXRUZXh0KCAiSGVsbG8gV29ybGQiKTsKLQkgICAgcVNlbmRlci5zZW5kKCBtZXNzYWdlICk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFNlbnQgbWVzc2FnZSIpOwotCSAgICAKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBwYXNzZWQgPSB0cnVlOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0gZmluYWxseSB7Ci0JICAgIGlmICggcnMxICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyByczEuY2xvc2UoKTt9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9Ci0JICAgIH0KLQkgICAgaWYgKCBzdG10MSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTt9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9Ci0JICAgIH0KLQkgICAgaWYgKCBjb25uMSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCSAgICBpZiAoIHFTZXNzICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBxU2Vzcy5jbG9zZSgpO30gY2F0Y2goRXhjZXB0aW9uIGUxKSB7fQotCSAgICB9Ci0JICAgIAotCSAgICBpZiAoIHFDb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBxQ29ubi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JfQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgY3JlYXRlUXVldWVDb25uZWN0aW9uIik7CisgICAgICAgIHFDb25uID0gcWNmLmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBjcmVhdGVRdWV1ZUNvbm5lY3Rpb24iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgY3JlYXRlUXVldWVTZXNzaW9uIik7CisgICAgICAgIHFTZXNzID0gcUNvbm4uY3JlYXRlUXVldWVTZXNzaW9uKCBmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFICk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgY3JlYXRlUXVldWVTZXNzaW9uIik7CisgICAgICAgIHFTZW5kZXIgPSBxU2Vzcy5jcmVhdGVTZW5kZXIoIHEgKTsKKyAgICAgICAgbWVzc2FnZSA9IHFTZXNzLmNyZWF0ZVRleHRNZXNzYWdlKCk7CisgICAgICAgIG1lc3NhZ2Uuc2V0VGV4dCggIkhlbGxvIFdvcmxkIik7CisgICAgICAgIHFTZW5kZXIuc2VuZCggbWVzc2FnZSApOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBTZW50IG1lc3NhZ2UiKTsKIAotCXJldHVybiBwYXNzZWQ7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoIHJzMSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgcnMxLmNsb3NlKCk7fSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgICAgIGlmICggc3RtdDEgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7fSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgICAgIGlmICggY29ubjEgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoIHFTZXNzICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBxU2Vzcy5jbG9zZSgpO30gY2F0Y2goRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCBxQ29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgcUNvbm4uY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGVlMmVjYTAuLmZkMjFjM2QgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvYnVpbGQucHJvcGVydGllcwpAQCAtMTQsNyArMTQsNyBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKICMKIAotICAgIAorCiAjIyMgQ29tcG9uZW50IFByb3BlcnRpZXMgIyMjCiBzcmMuZGlyPXNyYwogY29tcG9uZW50LnB1Ymxpc2guaG9tZT0uCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9idWlsZC54bWwKaW5kZXggMjUxM2RhZC4uMTEwODJlMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL2J1aWxkLnhtbApAQCAtMjMsMjkgKzIzLDI5IEBACiAKIDxwcm9qZWN0IG5hbWU9IkpEQkNDb25uZWN0b3IgdG9wIGxldmVsIiBkZWZhdWx0PSJidWlsZCI+CiAgICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2pkYmNyYS9zcGkiLz4KLSAgICAKKwogICAgICZjb21tb247CiAgICAgJnRlc3Rjb21tb247CiAgICAgPHByb3BlcnR5IGZpbGU9Ii4vYnVpbGQucHJvcGVydGllcyIvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSxhc3NlbWJsZSIgLz4KLSAgICAgICAgICAKKwogCiAgICAgPCEtLSBpbml0LiBJbml0aWFsaXphdGlvbiBpbnZvbHZlcyBjcmVhdGluZyBwdWJsaXNoaW5nIGRpcmVjdG9yaWVzIGFuZAotICAgICAgICAgT1Mgc3BlY2lmaWMgdGFyZ2V0cy4gLS0+IAorICAgICAgICAgT1Mgc3BlY2lmaWMgdGFyZ2V0cy4gLS0+CiAgICAgPHRhcmdldCBuYW1lPSJpbml0IiBkZXNjcmlwdGlvbj0iJHtjb21wb25lbnQubmFtZX0gaW5pdGlhbGl6YXRpb24iPgogICAgICAgICA8dHN0YW1wPgogICAgICAgICAgICAgPGZvcm1hdCBwcm9wZXJ0eT0ic3RhcnQudGltZSIgcGF0dGVybj0iTU0vZGQveXl5eSBoaDptbSBhYSIvPgotICAgICAgICA8L3RzdGFtcD4gICAgCisgICAgICAgIDwvdHN0YW1wPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJCdWlsZGluZyBjb21wb25lbnQgJHtjb21wb25lbnQubmFtZX0iLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIvPiAgICAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgPCEtLSBjb21waWxlIC0tPiAKKyAgICA8IS0tIGNvbXBpbGUgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0IgotICAgICAgICAgICAgZGVzY3JpcHRpb249IkNvbXBpbGUgY29tL3N1bi8qIGNvbS9pcGxhbmV0Lyogc291cmNlcyI+ICAKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDb21waWxlIGNvbS9zdW4vKiBjb20vaXBsYW5ldC8qIHNvdXJjZXMiPgogICAgICAgICA8IS0tPGVjaG8gbWVzc2FnZT0iQ29ubmVjdG9yIGFwaSByZXNpZGVzIGluICR7Y29ubmVjdG9yLWFwaS5qYXJ9Ii8+LS0+Ci0gICAgICAgIDxqYXZhYyBzcmNkaXI9IiR7c3JjLmRpcn0iIAorICAgICAgICA8amF2YWMgc3JjZGlyPSIke3NyYy5kaXJ9IgogICAgICAgICAgICAgICAgZGVzdGRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICAgICAgICAgPGNsYXNzcGF0aD4KQEAgLTU3LDI4ICs1NywyOCBAQAogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iY29tL3N1bi9hcHBzZXJ2LyoqIi8+CiAgICAgICAgIDwvamF2YWM+CiAgICAgPC90YXJnZXQ+Ci0gICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkIi8+CiAKLSAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiPiAgICAKLSAgICAJCi0JPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiYy5qYXIiIAotICAgICAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IiBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLCAKLSAgICAgICAgICAgIGNvbS9zdW4vYXBwc2Vydi8qKi8qLCBjb20vc3VuL2pkYmNyYS91dGlsLyoqLyosIGNvbS9zdW4vamRiY3JhL2NvbW1vbi8qKi8qIi8+IAotICAgCQotICAgICAgICA8Y29weSBmaWxlPSIke3NyYy5kaXJ9L2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEteGEueG1sIiAKLSAgICAgICAgICAgICAgICB0b2ZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIj4KKworICAgIDxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmMuamFyIgorICAgICAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IiBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLAorICAgICAgICAgICAgY29tL3N1bi9hcHBzZXJ2LyoqLyosIGNvbS9zdW4vamRiY3JhL3V0aWwvKiovKiwgY29tL3N1bi9qZGJjcmEvY29tbW9uLyoqLyoiLz4KKworICAgICAgICA8Y29weSBmaWxlPSIke3NyYy5kaXJ9L2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEteGEueG1sIgorICAgICAgICAgICAgICAgIHRvZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiYy1yYS14YS5yYXIiIAotCQliYXNlZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iIGluY2x1ZGVzPSJqZGJjLmphciI+CisgICAgICAgPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiYy1yYS14YS5yYXIiCisgICAgICAgIGJhc2VkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIgaW5jbHVkZXM9ImpkYmMuamFyIj4KIAotICAgCQk8bWV0YWluZiBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgogCi0gICAJPGRlbGV0ZSBmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIi8+Ci0JCisgICAgICAgPGRlbGV0ZSBmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIi8+CisKICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXNjcmlwdGlvbj0iQ2xlYW4gdGhlIGJ1aWxkIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQppbmRleCA5ZjgzOTlhLi5iNmVmMzBiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCkBAIC0yMCwxNSArMjAsMTUgQEAKIGltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CiAKIC8qKgotICogVGhlIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24gCisgKiBUaGUgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+IGltcGxlbWVudGF0aW9uIG9mIFN1bk9ORSBhcHBsaWNhdGlvbgogICogc2VydmVyIHdpbGwgaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLiBBbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHdvdWxkIGJlIGFibGUKLSAqIHRvIHVzZSB0aGlzIGludGVyZmFjZSB0byBkbyB0aGUgZXh0ZW5kZWQgZnVuY3Rpb25hbGl0eSBleHBvc2VkIGJ5IFN1bk9ORSAKKyAqIHRvIHVzZSB0aGlzIGludGVyZmFjZSB0byBkbyB0aGUgZXh0ZW5kZWQgZnVuY3Rpb25hbGl0eSBleHBvc2VkIGJ5IFN1bk9ORQogICogYXBwbGljYXRpb24gc2VydmVyLgotICogPHA+QSBzYW1wbGUgY29kZSBmb3IgZ2V0dGluZyBkcml2ZXIncyBjb25uZWN0aW9uIGltcGxlbWVudGF0aW9uIHdvdWxkIGxpa2UgCisgKiA8cD5BIHNhbXBsZSBjb2RlIGZvciBnZXR0aW5nIGRyaXZlcidzIGNvbm5lY3Rpb24gaW1wbGVtZW50YXRpb24gd291bGQgbGlrZQogICogdGhlIGZvbGxvd2luZy4KICAqIDxwcmU+CiAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgIGNvbS5zdW4uYXBwc2Vydi5EYXRhU291cmNlIGRzID0gKGNvbS5zdW4uYXBwc2Vydi5EYXRhU091cmNlKSBpYy5sb29rdXAoImpkYmMvUG9pbnRCYXNlIik7IAorICAgICBjb20uc3VuLmFwcHNlcnYuRGF0YVNvdXJjZSBkcyA9IChjb20uc3VuLmFwcHNlcnYuRGF0YVNPdXJjZSkgaWMubG9va3VwKCJqZGJjL1BvaW50QmFzZSIpOwogICAgICBDb25uZWN0aW9uIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgQ29ubmVjdGlvbiBkcml2ZXJjb24gPSBkcy5nZXRDb25uZWN0aW9uKGNvbik7CiAKQEAgLTM2LDEzICszNiwxMyBAQAogCiAgICAgIGNvbi5jbG9zZSgpOwogICAgPC9wcmU+Ci0gKiAKKyAqCiAgKiBAYXV0aG9yIEJpbm9kIFAuRwogICovCiBwdWJsaWMgaW50ZXJmYWNlIERhdGFTb3VyY2UgZXh0ZW5kcyBqYXZheC5zcWwuRGF0YVNvdXJjZSB7CiAKICAgICAvKioKLSAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBTUUxDb25uZWN0aW9uIGZyb20gdGhlIENvbm5lY3Rpb24gd3JhcHBlciAKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBTUUxDb25uZWN0aW9uIGZyb20gdGhlIENvbm5lY3Rpb24gd3JhcHBlcgogICAgICAqIGltcGxlbWVudGF0aW9uIG9mIFN1bk9ORSBhcHBsaWNhdGlvbiBzZXJ2ZXIuIElmIGFuIGFjdHVhbCBjb25uZWN0aW9uIGlzCiAgICAgICogc3VwcGxpZWQgYXMgYXJndW1lbnQsIHRoZW4gaXQgd2lsbCBiZSBqdXN0IHJldHVybmVkLgogICAgICAqCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKaW5kZXggYzI4MjJlMi4uNmEzNjZiMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQpAQCAtMjcsMjIgKzI3LDIyIEBACiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwogLyoqCi0gKiBVdGlsaXR5IGNsYXNzLCB3aGljaCB3b3VsZCBjcmVhdGUgbmVjZXNzYXJ5IERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUgCisgKiBVdGlsaXR5IGNsYXNzLCB3aGljaCB3b3VsZCBjcmVhdGUgbmVjZXNzYXJ5IERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUKICAqIHNwZWNpZmljYXRpb24uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKLSAqIEBzZWUJCWNvbS5zdW4uamRiY3JhLmNvbW1vbi5EYXRhU291cmNlU3BlYwotICogQHNlZQkJY29tLnN1bi5qZGJjcmEudXRpbC5NZXRob2RFeGNlY3V0b3IKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCisgKiBAc2VlICAgICAgICBjb20uc3VuLmpkYmNyYS5jb21tb24uRGF0YVNvdXJjZVNwZWMKKyAqIEBzZWUgICAgICAgIGNvbS5zdW4uamRiY3JhLnV0aWwuTWV0aG9kRXhjZWN1dG9yCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlT2JqZWN0QnVpbGRlciBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCiAgICAgcHJpdmF0ZSBEYXRhU291cmNlU3BlYyBzcGVjOwotICAgIAorCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgZHJpdmVyUHJvcGVydGllcyA9IG51bGw7Ci0gICAgCi0gICAgcHJpdmF0ZSBNZXRob2RFeGVjdXRvciBleGVjdXRvciA9IG51bGw7ICAgIAotICAgIAorCisgICAgcHJpdmF0ZSBNZXRob2RFeGVjdXRvciBleGVjdXRvciA9IG51bGw7CisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTAsMTY3ICs1MCwxNjcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3QgYSBEYXRhU291cmNlIE9iamVjdCBmcm9tIHRoZSBzcGVjLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzcGVjCTxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcGVjICAgIDxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIoRGF0YVNvdXJjZVNwZWMgc3BlYykgewotICAgIAl0aGlzLnNwZWMgPSBzcGVjOwotICAgIAlleGVjdXRvciA9IG5ldyBNZXRob2RFeGVjdXRvcigpOworICAgICAgICB0aGlzLnNwZWMgPSBzcGVjOworICAgICAgICBleGVjdXRvciA9IG5ldyBNZXRob2RFeGVjdXRvcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdCB0aGUgRGF0YVNvdXJjZSBPYmplY3QgZnJvbSB0aGUgc3BlYy4KICAgICAgKgotICAgICAqIEByZXR1cm4JT2JqZWN0IGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBEYXRhU291cmNlU3BlYy4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBpZiB0aGUgY2xhc3MgaXMgbm90IGZvdW5kIG9yIHNvbWUgaXNzdWUgaW4gZXhlY3V0aW5nCi0gICAgICoJCXNvbWUgbWV0aG9kLgorICAgICAqIEByZXR1cm4gICAgT2JqZWN0IGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBEYXRhU291cmNlU3BlYy4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBpZiB0aGUgY2xhc3MgaXMgbm90IGZvdW5kIG9yIHNvbWUgaXNzdWUgaW4gZXhlY3V0aW5nCisgICAgICogICAgICAgIHNvbWUgbWV0aG9kLgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgY29uc3RydWN0RGF0YVNvdXJjZU9iamVjdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJZHJpdmVyUHJvcGVydGllcyA9IHBhcnNlRHJpdmVyUHJvcGVydGllcyhzcGVjKTsKKyAgICAgICAgZHJpdmVyUHJvcGVydGllcyA9IHBhcnNlRHJpdmVyUHJvcGVydGllcyhzcGVjKTsKICAgICAgICAgT2JqZWN0IGRhdGFTb3VyY2VPYmplY3QgPSBnZXREYXRhU291cmNlT2JqZWN0KCk7CiAgICAgICAgIE1ldGhvZFtdIG1ldGhvZHMgPSBkYXRhU291cmNlT2JqZWN0LmdldENsYXNzKCkuZ2V0TWV0aG9kcygpOwogICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG1ldGhvZHNbaV0uZ2V0TmFtZSgpOwotCSAgICBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRVc2VyIikpewkgICAgCQotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBhc3N3b3JkIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ2luVGltZU91dCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9nV3JpdGVyIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HV1JJVEVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhYmFzZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFTb3VyY2VOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERlc2NyaXB0aW9uIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXROZXR3b3JrUHJvdG9jb2wiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBvcnROdW1iZXIiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRSb2xlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRTZXJ2ZXJOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhTdGF0ZW1lbnRzIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYU1RBVEVNRU5UUyksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0SW5pdGlhbFBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuSU5JVElBTFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNaW5Qb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1JTlBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhQb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhJZGxlVGltZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWElETEVUSU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQcm9wZXJ0eUN5Y2xlIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUFJPUEVSVFlDWUNMRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKGRyaXZlclByb3BlcnRpZXMuY29udGFpbnNLZXkobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKSl7Ci0JICAgIAlWZWN0b3IgdmFsdWVzID0gKFZlY3RvcikgZHJpdmVyUHJvcGVydGllcy5nZXQobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKTsKLQkgICAgICAgIGV4ZWN1dG9yLnJ1bk1ldGhvZChtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QsIHZhbHVlcyk7Ci0JICAgIH0KKyAgICAgICAgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0VXNlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQYXNzd29yZCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dpblRpbWVPdXQiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ1dyaXRlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR1dSSVRFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YWJhc2VOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhU291cmNlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREZXNjcmlwdGlvbiIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXROZXR3b3JrUHJvdG9jb2wiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBvcnROdW1iZXIiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRSb2xlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRTZXJ2ZXJOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4U3RhdGVtZW50cyIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFNUQVRFTUVOVFMpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldEluaXRpYWxQb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLklOSVRJQUxQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWluUG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NSU5QT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4UG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4SWRsZVRpbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhJRExFVElNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UHJvcGVydHlDeWNsZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBST1BFUlRZQ1lDTEUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChkcml2ZXJQcm9wZXJ0aWVzLmNvbnRhaW5zS2V5KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSkpeworICAgICAgICAgICAgVmVjdG9yIHZhbHVlcyA9IChWZWN0b3IpIGRyaXZlclByb3BlcnRpZXMuZ2V0KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSk7CisgICAgICAgICAgICBleGVjdXRvci5ydW5NZXRob2QobWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0LCB2YWx1ZXMpOworICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2VPYmplY3Q7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSBleHRyYSBkcml2ZXIgcHJvcGVydGllcyBmcm9tIHRoZSBEYXRhU291cmNlU3BlYyBvYmplY3QgYW5kCiAgICAgICogcGFyc2UgdGhlbSB0byBhIHNldCBvZiBtZXRob2ROYW1lIGFuZCBwYXJhbWV0ZXJzLiBQcmVwYXJlIGEgaGFzaHRhYmxlCiAgICAgICogY29udGFpbmluZyB0aGVzZSBkZXRhaWxzIGFuZCByZXR1cm4uCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3BlYwk8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHJldHVybglIYXNodGFibGUgY29udGFpbmluZyBtZXRob2QgbmFtZXMgYW5kIHBhcmFtZXRlcnMsCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglJZiBkZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGFuZCBwcm9wZXJ0eSBzdHJpbmcKLSAgICAgKgkJCQkJaXMgbm90IG51bGwuCisgICAgICogQHBhcmFtICAgIHNwZWMgICAgPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgSGFzaHRhYmxlIGNvbnRhaW5pbmcgbWV0aG9kIG5hbWVzIGFuZCBwYXJhbWV0ZXJzLAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgSWYgZGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBhbmQgcHJvcGVydHkgc3RyaW5nCisgICAgICogICAgICAgICAgICAgICAgICAgIGlzIG5vdCBudWxsLgogICAgICAqLwogICAgIHByaXZhdGUgSGFzaHRhYmxlIHBhcnNlRHJpdmVyUHJvcGVydGllcyhEYXRhU291cmNlU3BlYyBzcGVjKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCVN0cmluZyBkZWxpbSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CisgICAgICAgIFN0cmluZyBkZWxpbSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAKICAgICAgICAgU3RyaW5nIHByb3AgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTKTsKLQlpZiAoIHByb3AgPT0gbnVsbCB8fCBwcm9wLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgIHJldHVybiBuZXcgSGFzaHRhYmxlKCk7Ci0JfSBlbHNlIGlmIChkZWxpbSA9PSBudWxsIHx8IGRlbGltLmVxdWFscygiIikpIHsKLQkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uICgiRGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiIpOwotCX0KLQkKLQlIYXNodGFibGUgcHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoKTsKLQlkZWxpbSA9IGRlbGltLnRyaW0oKTsJCi0JU3RyaW5nIHNlcCA9IGRlbGltK2RlbGltOwotCWludCBzZXBMZW4gPSBzZXAubGVuZ3RoKCk7Ci0JU3RyaW5nIGNhY2hlID0gcHJvcDsKLQlWZWN0b3IgbWV0aG9kcyA9IG5ldyBWZWN0b3IoKTsKLQkKLQl3aGlsZSAoY2FjaGUuaW5kZXhPZihzZXApICE9IC0xKSB7Ci0JICAgIGludCBpbmRleCA9IGNhY2hlLmluZGV4T2Yoc2VwKTsKLQkgICAgU3RyaW5nIG5hbWUgPSBjYWNoZS5zdWJzdHJpbmcoMCxpbmRleCk7Ci0JICAgIGlmIChuYW1lLnRyaW0oKSAhPSAiIikgewotCSAgICAgICAgbWV0aG9kcy5hZGQobmFtZSk7Ci0JICAgIAljYWNoZSA9IGNhY2hlLnN1YnN0cmluZyhpbmRleCtzZXBMZW4pOwotCSAgICB9Ci0JfQotCQotICAgIAlFbnVtZXJhdGlvbiBhbGxNZXRob2RzID0gbWV0aG9kcy5lbGVtZW50cygpOwotICAgIAl3aGlsZSAoYWxsTWV0aG9kcy5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgIAkgICAgU3RyaW5nIG9uZU1ldGhvZCA9IChTdHJpbmcpIGFsbE1ldGhvZHMubmV4dEVsZW1lbnQoKTsgICAgCSAgICAKLSAgICAJICAgIGlmICghb25lTWV0aG9kLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0gICAgCSAgICAJU3RyaW5nIG1ldGhvZE5hbWUgPSBudWxsOwotICAgIAkgICAgCVZlY3RvciBwYXJtcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAJICAgIAlTdHJpbmdUb2tlbml6ZXIgbWV0aG9kRGV0YWlscyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIob25lTWV0aG9kLGRlbGltKTsKLQkJZm9yIChpbnQgaT0wOyBtZXRob2REZXRhaWxzLmhhc01vcmVUb2tlbnMoKTtpKysgKSB7Ci0JCSAgICBTdHJpbmcgdG9rZW4gPSAoU3RyaW5nKSBtZXRob2REZXRhaWxzLm5leHRUb2tlbigpOwotCQkgICAgaWYgKGk9PTApIHsKLQkJICAgIAltZXRob2ROYW1lID0gdG9rZW4udG9VcHBlckNhc2UoKTsKLQkJICAgIH0gZWxzZSB7Ci0JCSAgICAJcGFybXMuYWRkKHRva2VuKTsJCSAgICAJCi0JCSAgICB9Ci0JCX0KLQkJcHJvcGVydGllcy5wdXQobWV0aG9kTmFtZSxwYXJtcyk7Ci0gICAgCSAgICB9ICAgIAkgICAgCi0gICAgCX0KLSAgICAJcmV0dXJuIHByb3BlcnRpZXM7CisgICAgaWYgKCBwcm9wID09IG51bGwgfHwgcHJvcC50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICByZXR1cm4gbmV3IEhhc2h0YWJsZSgpOworICAgIH0gZWxzZSBpZiAoZGVsaW0gPT0gbnVsbCB8fCBkZWxpbS5lcXVhbHMoIiIpKSB7CisgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbiAoIkRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24iKTsKICAgICB9Ci0gICAgCisKKyAgICBIYXNodGFibGUgcHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoKTsKKyAgICBkZWxpbSA9IGRlbGltLnRyaW0oKTsKKyAgICBTdHJpbmcgc2VwID0gZGVsaW0rZGVsaW07CisgICAgaW50IHNlcExlbiA9IHNlcC5sZW5ndGgoKTsKKyAgICBTdHJpbmcgY2FjaGUgPSBwcm9wOworICAgIFZlY3RvciBtZXRob2RzID0gbmV3IFZlY3RvcigpOworCisgICAgd2hpbGUgKGNhY2hlLmluZGV4T2Yoc2VwKSAhPSAtMSkgeworICAgICAgICBpbnQgaW5kZXggPSBjYWNoZS5pbmRleE9mKHNlcCk7CisgICAgICAgIFN0cmluZyBuYW1lID0gY2FjaGUuc3Vic3RyaW5nKDAsaW5kZXgpOworICAgICAgICBpZiAobmFtZS50cmltKCkgIT0gIiIpIHsKKyAgICAgICAgICAgIG1ldGhvZHMuYWRkKG5hbWUpOworICAgICAgICAgICAgY2FjaGUgPSBjYWNoZS5zdWJzdHJpbmcoaW5kZXgrc2VwTGVuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICAgICBFbnVtZXJhdGlvbiBhbGxNZXRob2RzID0gbWV0aG9kcy5lbGVtZW50cygpOworICAgICAgICB3aGlsZSAoYWxsTWV0aG9kcy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgU3RyaW5nIG9uZU1ldGhvZCA9IChTdHJpbmcpIGFsbE1ldGhvZHMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICghb25lTWV0aG9kLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBudWxsOworICAgICAgICAgICAgICAgIFZlY3RvciBwYXJtcyA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXIgbWV0aG9kRGV0YWlscyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIob25lTWV0aG9kLGRlbGltKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBtZXRob2REZXRhaWxzLmhhc01vcmVUb2tlbnMoKTtpKysgKSB7CisgICAgICAgICAgICBTdHJpbmcgdG9rZW4gPSAoU3RyaW5nKSBtZXRob2REZXRhaWxzLm5leHRUb2tlbigpOworICAgICAgICAgICAgaWYgKGk9PTApIHsKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gdG9rZW4udG9VcHBlckNhc2UoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFybXMuYWRkKHRva2VuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwcm9wZXJ0aWVzLnB1dChtZXRob2ROYW1lLHBhcm1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHJvcGVydGllczsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZSBzcGVjLgogICAgICAqCi0gICAgICogQHJldHVybglJbml0aWFsIERhdGFTb3VyY2UgT2JqZWN0IGluc3RhbmNlLgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IElmIGNsYXNzIG5hbWUgaXMgd3Jvbmcgb3IgY2xhc3NwYXRoIGlzIG5vdCBzZXQKLSAgICAgKgkJcHJvcGVybHkuCisgICAgICogQHJldHVybiAgICBJbml0aWFsIERhdGFTb3VyY2UgT2JqZWN0IGluc3RhbmNlLgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IElmIGNsYXNzIG5hbWUgaXMgd3Jvbmcgb3IgY2xhc3NwYXRoIGlzIG5vdCBzZXQKKyAgICAgKiAgICAgICAgcHJvcGVybHkuCiAgICAgICovCiAgICAgcHJpdmF0ZSBPYmplY3QgZ2V0RGF0YVNvdXJjZU9iamVjdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJU3RyaW5nIGNsYXNzTmFtZSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7Ci0gICAgICAgIHRyeSB7ICAgICAgICAgICAgCisgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOworICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgZGF0YVNvdXJjZUNsYXNzID0gQ2xhc3MuZm9yTmFtZShjbGFzc05hbWUpOwogICAgICAgICAgICAgT2JqZWN0IGRhdGFTb3VyY2VPYmplY3QgPSBkYXRhU291cmNlQ2xhc3MubmV3SW5zdGFuY2UoKTsKICAgICAgICAgICAgIHJldHVybiBkYXRhU291cmNlT2JqZWN0OwogICAgICAgICB9IGNhdGNoKENsYXNzTm90Rm91bmRFeGNlcHRpb24gY2ZuZSl7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NuZmVfZHMiLCBjZm5lKTsKLQkKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY25mZV9kcyIsIGNmbmUpOworCiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNsYXNzIE5hbWUgaXMgd3Jvbmcgb3IgQ2xhc3MgcGF0aCBpcyBub3Qgc2V0IGZvciA6IiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBjZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pbnN0IiwgY2xhc3NOYW1lKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaW5zdCIsIGNsYXNzTmFtZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkVycm9yIGluIGluc3RhbnRpYXRpbmciICsgY2xhc3NOYW1lKTsKICAgICAgICAgfSBjYXRjaChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGNlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2FjY19pbnN0IiwgY2xhc3NOYW1lKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYWNjX2luc3QiLCBjbGFzc05hbWUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgRXJyb3IgaW4gaW5zdGFudGlhdGluZyIgKyBjbGFzc05hbWUpOwogICAgICAgICB9CiAgICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCmluZGV4IGVmNmM0YzkuLjNkYzE1NGQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKQEAgLTE5LDkyICsxOSw5MiBAQAogaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7CiAKIC8qKgotICogRW5jYXBzdWxhdGUgdGhlIERhdGFTb3VyY2Ugb2JqZWN0IGRldGFpbHMgb2J0YWluZWQgZnJvbSAKKyAqIEVuY2Fwc3VsYXRlIHRoZSBEYXRhU291cmNlIG9iamVjdCBkZXRhaWxzIG9idGFpbmVkIGZyb20KICAqIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2VTcGVjIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VSTkFNRQkJCQk9IDE7ICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBU1NXT1JECQkJCT0gMjsgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVSTAkJCQkJPSAzOyAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HSU5USU1FT1VUCQkJPSA0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR1dSSVRFUgkJCQk9IDU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQUJBU0VOQU1FCQkJPSA2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0VOQU1FCQkJPSA3OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFU0NSSVBUSU9OCQkJCT0gODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLUFJPVE9DT0wJCQk9IDk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9SVE5VTUJFUgkJCQk9IDEwOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPTEVOQU1FCQkJCT0gMTE7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVkVSTkFNRQkJCQk9IDEyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFNUQVRFTUVOVFMJCQk9IDEzOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOSVRJQUxQT09MU0laRQkJCT0gMTQ7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOUE9PTFNJWkUJCQkJPSAxNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhQT09MU0laRQkJCQk9IDE2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWElETEVUSU1FCQkJCT0gMTc7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlDWUNMRQkJCT0gMTg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRFJJVkVSUFJPUEVSVElFUwkJCT0gMTk7ICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMQVNTTkFNRQkJCQk9IDIwOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFTElNSVRFUgkJCQk9IDIxOwotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFhBREFUQVNPVVJDRQkJCT0gMjI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRQkJCQk9IDIzOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05QT09MREFUQVNPVVJDRQkJPSAyNDsKLSAgICAgIAotICAgIC8vR0pDSU5UICAgICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRAk9IDI1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05NRVRIT0QJCQk9IDI2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05UQUJMRU5BTUUJCQk9IDI3OwotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRSQU5TQUNUSU9OSVNPTEFUSU9OCQk9IDI4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdVQVJBTlRFRUlTT0xBVElPTkxFVkVMCQk9IDI5OwotICAgICAgICAgICAgCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUk5BTUUgICAgICAgICAgICAgICAgPSAxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBU1NXT1JEICAgICAgICAgICAgICAgID0gMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVUkwgICAgICAgICAgICAgICAgICAgID0gMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dJTlRJTUVPVVQgICAgICAgICAgICA9IDQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HV1JJVEVSICAgICAgICAgICAgICAgID0gNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBQkFTRU5BTUUgICAgICAgICAgICA9IDY7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRU5BTUUgICAgICAgICAgICA9IDc7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgPSA4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktQUk9UT0NPTCAgICAgICAgICAgID0gOTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1JUTlVNQkVSICAgICAgICAgICAgICAgID0gMTA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9MRU5BTUUgICAgICAgICAgICAgICAgPSAxMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVJWRVJOQU1FICAgICAgICAgICAgICAgID0gMTI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYU1RBVEVNRU5UUyAgICAgICAgICAgID0gMTM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5JVElBTFBPT0xTSVpFICAgICAgICAgICAgPSAxNDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSU5QT09MU0laRSAgICAgICAgICAgICAgICA9IDE1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFBPT0xTSVpFICAgICAgICAgICAgICAgID0gMTY7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYSURMRVRJTUUgICAgICAgICAgICAgICAgPSAxNzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWUNZQ0xFICAgICAgICAgICAgPSAxODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEUklWRVJQUk9QRVJUSUVTICAgICAgICAgICAgPSAxOTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTEFTU05BTUUgICAgICAgICAgICAgICAgPSAyMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUxJTUlURVIgICAgICAgICAgICAgICAgPSAyMTsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFhBREFUQVNPVVJDRSAgICAgICAgICAgID0gMjI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRSAgICAgICAgICAgICAgICA9IDIzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05QT09MREFUQVNPVVJDRSAgICAgICAgPSAyNDsKKworICAgIC8vR0pDSU5UCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCAgICA9IDI1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05NRVRIT0QgICAgICAgICAgICA9IDI2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05UQUJMRU5BTUUgICAgICAgICAgICA9IDI3OworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNBQ1RJT05JU09MQVRJT04gICAgICAgID0gMjg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwgICAgICAgID0gMjk7CisKICAgICBwcml2YXRlIEhhc2h0YWJsZSBkZXRhaWxzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBwcm9wZXJ0eS4KICAgICAgKgotICAgICAqIEBwYXJhbQlwcm9wZXJ0eQlQcm9wZXJ0eSBOYW1lIHRvIGJlIHNldC4KLSAgICAgKiBAcGFyYW0JdmFsdWUJCVZhbHVlIG9mIHByb3BlcnR5IHRvIGJlIHNldC4KKyAgICAgKiBAcGFyYW0gICAgcHJvcGVydHkgICAgUHJvcGVydHkgTmFtZSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIHZhbHVlICAgICAgICBWYWx1ZSBvZiBwcm9wZXJ0eSB0byBiZSBzZXQuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGV0YWlsKGludCBwcm9wZXJ0eSwgU3RyaW5nIHZhbHVlKSB7Ci0gICAgCWRldGFpbHMucHV0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSx2YWx1ZSk7CisgICAgICAgIGRldGFpbHMucHV0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSx2YWx1ZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSB2YWx1ZSBvZiBwcm9wZXJ0eQogICAgICAqCi0gICAgICogQHJldHVybglWYWx1ZSBvZiB0aGUgcHJvcGVydHkuCisgICAgICogQHJldHVybiAgICBWYWx1ZSBvZiB0aGUgcHJvcGVydHkuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZXRhaWwoaW50IHByb3BlcnR5KSB7Ci0gICAgCWlmIChkZXRhaWxzLmNvbnRhaW5zS2V5KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSkpIHsKLSAgICAJICAgIHJldHVybiAoU3RyaW5nKSBkZXRhaWxzLmdldChuZXcgSW50ZWdlcihwcm9wZXJ0eSkpOwotICAgIAl9IGVsc2UgewotICAgIAkgICAgcmV0dXJuIG51bGw7Ci0gICAgCX0gICAgCQorICAgICAgICBpZiAoZGV0YWlscy5jb250YWluc0tleShuZXcgSW50ZWdlcihwcm9wZXJ0eSkpKSB7CisgICAgICAgICAgICByZXR1cm4gKFN0cmluZykgZGV0YWlscy5nZXQobmV3IEludGVnZXIocHJvcGVydHkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIHdoZXRoZXIgdHdvIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3RzCiAgICAgICogYXJlIGVxdWFsIG9yIG5vdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlvYmoJSW5zdGFuY2Ugb2YgPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIEluc3RhbmNlIG9mIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKLSAgICAJaWYgKG9iaiBpbnN0YW5jZW9mIERhdGFTb3VyY2VTcGVjKSB7Ci0gICAgCSAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmVxdWFscygoKERhdGFTb3VyY2VTcGVjKW9iaikuZGV0YWlscyk7Ci0gICAgCX0KLSAgICAJcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgRGF0YVNvdXJjZVNwZWMpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmRldGFpbHMuZXF1YWxzKCgoRGF0YVNvdXJjZVNwZWMpb2JqKS5kZXRhaWxzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBoYXNoQ29kZSBvZiB0aGlzIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhhc2hDb2RlIG9mIHRoaXMgb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgaGFzaENvZGUgb2YgdGhpcyBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKLSAgICAJcmV0dXJuIHRoaXMuZGV0YWlscy5oYXNoQ29kZSgpOwotICAgIH0gICAgCisgICAgICAgIHJldHVybiB0aGlzLmRldGFpbHMuaGFzaENvZGUoKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sCmluZGV4IGVmNDM4ZmMuLjNiNGZhZWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIuIiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvY29tbW9uIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTM2LDEzICszNiwxMyBAQAogCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTEzIiBkZXBlbmRzPSJjb21waWxlIi8+CiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTE0IiBkZXBlbmRzPSJjb21waWxlIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0icGFja2FnZTEzIiBkZXBlbmRzPSJwYWNrYWdlIi8+CiAgIDx0YXJnZXQgbmFtZT0icGFja2FnZTE0IiBkZXBlbmRzPSJwYWNrYWdlIi8+CiAKICAgPHRhcmdldCBuYW1lPSJidWlsZDEzIiBkZXBlbmRzPSJjb21waWxlMTMsIHBhY2thZ2UxMyIvPgogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCwgcGFja2FnZTE0Ii8+Ci0gICAgCisKICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKaW5kZXggYTg1NGQyNC4uOTk4ZjNmNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQpAQCAtMjQsMjQgKzI0LDI0IEBACiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3I7CiAKIC8qKgotICogSG9sZHMgdGhlIGphdmEuc3FsLkNvbm5lY3Rpb24gb2JqZWN0LCB3aGljaCBpcyB0byBiZSAKKyAqIEhvbGRzIHRoZSBqYXZhLnNxbC5Db25uZWN0aW9uIG9iamVjdCwgd2hpY2ggaXMgdG8gYmUKICAqIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbS4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwotcHVibGljIGNsYXNzIENvbm5lY3Rpb25Ib2xkZXIgaW1wbGVtZW50cyBDb25uZWN0aW9ueyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uSG9sZGVyIGltcGxlbWVudHMgQ29ubmVjdGlvbnsKIAogICAgIHByaXZhdGUgQ29ubmVjdGlvbiBjb247Ci0gICAgCisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAotICAgIHByaXZhdGUgYm9vbGVhbiB3cmFwcGVkQWxyZWFkeSA9IGZhbHNlOyAgICAKLSAgICAKKworICAgIHByaXZhdGUgYm9vbGVhbiB3cmFwcGVkQWxyZWFkeSA9IGZhbHNlOworCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzQ2xvc2VkID0gZmFsc2U7Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gdmFsaWQgPSB0cnVlOwotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGFjdGl2ZSA9IGZhbHNlOwogICAgIC8qKgogICAgICAqIFRoZSBhY3RpdmUgZmxhZyBpcyBmYWxzZSB3aGVuIHRoZSBjb25uZWN0aW9uIGhhbmRsZSBpcwpAQCAtNTMsMjE5ICs1MywyMTkgQEAKICAgICAgKiBmdW5jdGlvbiwgdGhlIGFib3ZlIG1ldGhvZCBpbnZvY2F0aW9uIHN1Y2NlZWRzOyBvdGhlcndpc2UKICAgICAgKiBhbiBleGNlcHRpb24gaXMgdGhyb3duLgogICAgICAqLwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0cyBhIENvbm5lY3Rpb24gaG9sZGVyLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb25Ib2xkZXIoQ29ubmVjdGlvbiBjb24sIE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7CiAgICAgICAgIHRoaXMuY29uID0gY29uOwogICAgICAgICB0aGlzLm1jICA9IG1jOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiB0aGlzIGhvbGRlciBvYmplY3QuCi0gICAgICogCi0gICAgICogQHJldHVybglDb25uZWN0aW9uIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgQ29ubmVjdGlvbiBvYmplY3QuCiAgICAgICovCiAgICAgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uKCkgewotICAgIAlyZXR1cm4gY29uOworICAgICAgICByZXR1cm4gY29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCwgdGhlIGNvbm5lY3Rpb24gaXMgd3JhcHBlZCBhbHJlYWR5IG9yIG5vdC4KICAgICAgKgotICAgICAqIEBwYXJhbQl3cmFwRmxhZwkKKyAgICAgKiBAcGFyYW0gICAgd3JhcEZsYWcKICAgICAgKi8KICAgICB2b2lkIHdyYXBwZWQoYm9vbGVhbiB3cmFwRmxhZyl7CiAgICAgICAgIHRoaXMud3JhcHBlZEFscmVhZHkgPSB3cmFwRmxhZzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHdoZXRoZXIgaXQgaXMgd3JhcHBlZCBhbHJlYWR5IG9yIG5vdC4KICAgICAgKgotICAgICAqIEByZXR1cm4Jd3JhcHBlZCBmbGFnLgorICAgICAqIEByZXR1cm4gICAgd3JhcHBlZCBmbGFnLgogICAgICAqLwogICAgIGJvb2xlYW4gaXNXcmFwcGVkKCl7CiAgICAgICAgIHJldHVybiB3cmFwcGVkQWxyZWFkeTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UgcmVzcG9uc2libGUKICAgICAgKiBmb3IgdGhpcyBjb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICovCiAgICAgTWFuYWdlZENvbm5lY3Rpb24gZ2V0TWFuYWdlZENvbm5lY3Rpb24oKSB7CiAgICAgICAgIHJldHVybiBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXBsYWNlIHRoZSBhY3R1YWwgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IHdpdGggdGhlIG9uZQotICAgICAqIHN1cHBsaWVkLiBBbHNvIHJlcGxhY2UgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGxpbmsuICAgICAKKyAgICAgKiBzdXBwbGllZC4gQWxzbyByZXBsYWNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBsaW5rLgogICAgICAqCi0gICAgICogQHBhcmFtCWNvbiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCW1jICA8Y29kZT4gTWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgY29uIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgbWMgIDxjb2RlPiBNYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHZvaWQgYXNzb2NpYXRlQ29ubmVjdGlvbihDb25uZWN0aW9uIGNvbiwgTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKLSAgICAJdGhpcy5tYyA9IG1jOwotICAgIAl0aGlzLmNvbiA9IGNvbjsKKyAgICAgICAgdGhpcy5tYyA9IG1jOworICAgICAgICB0aGlzLmNvbiA9IGNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDbGVhcnMgYWxsIHdhcm5pbmdzIHJlcG9ydGVkIGZvciB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9uICBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNsZWFyV2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueyAgICAKLQljaGVja1ZhbGlkaXR5KCk7CisgICAgcHVibGljIHZvaWQgY2xlYXJXYXJuaW5ncygpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBjb24uY2xlYXJXYXJuaW5ncygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENsb3NlcyB0aGUgbG9naWNhbCBjb25uZWN0aW9uLiAgICAKKyAgICAgKiBDbG9zZXMgdGhlIGxvZ2ljYWwgY29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgICAgaXNDbG9zZWQgPSB0cnVlOwotICAgICAgICBtYy5jb25uZWN0aW9uQ2xvc2VkKG51bGwsIHRoaXMpOyAgICAgICAgCisgICAgICAgIG1jLmNvbm5lY3Rpb25DbG9zZWQobnVsbCwgdGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogSW52YWxpZGF0ZXMgdGhpcyBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgaW52YWxpZGF0ZSgpIHsKLSAgICAJdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDbG9zZXMgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaW52b2x2ZWQgaW4gdGhpcy4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCi0gICAgdm9pZCBhY3R1YWxDbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257ICAgIAorICAgIHZvaWQgYWN0dWFsQ2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgICBjb24uY2xvc2UoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21taXQgdGhlIGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLmNvbW1pdCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLmNvbW1pdCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzdGF0ZW1lbnQgZnJvbSB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzdGF0ZW1lbnQgZnJvbSB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LiAgICAgCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoaW50IHJlc3VsdFNldFR5cGUsIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgIAotICAgICAqIEByZXR1cm4JPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAgICAgCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0SG9sZGFiaWxpdHkgICAgUmVzdWx0U2V0IEhvbGRhYmlsaXR5LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwotICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KGludCByZXN1bHRTZXRUeXBlLCBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksIAotICAgIAkJCQkgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkgICAgIAorICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KGludCByZXN1bHRTZXRUeXBlLCBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQocmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCi0gICAgICAgIAkJCSAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKICAgICB9Ci0gCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgYXV0by1jb21taXQgbW9kZSBmb3IgdGhlIHVuZGVybHlpbmcgPGNvZGU+IENvbm5lY3Rpb248L2NvZGU+LgogICAgICAqCiAgICAgICogQHJldHVybiBUaGUgY3VycmVudCBzdGF0ZSBvZiBjb25uZWN0aW9uJ3MgYXV0by1jb21taXQgbW9kZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGdldEF1dG9Db21taXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldEF1dG9Db21taXQoKTsKLSAgICB9ICAgCi0gCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldEF1dG9Db21taXQoKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHVuZGVybHlpbmcgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0J3MgY2F0YWxvZyBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglDYXRhbG9nIE5hbWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgQ2F0YWxvZyBOYW1lLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENhdGFsb2coKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5nZXRDYXRhbG9nKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGhvbGRhYmlsaXR5IG9mIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gb2JqZWN0cyBjcmVhdGVkCiAgICAgICogdXNpbmcgdGhpcyBjb25uZWN0aW9uIG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaG9sZGFiaWxpdHkgdmFsdWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgaG9sZGFiaWxpdHkgdmFsdWUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0SG9sZGFiaWxpdHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4JY29uLmdldEhvbGRhYmlsaXR5KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gICAgY29uLmdldEhvbGRhYmlsaXR5KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT5EYXRhYmFzZU1ldGFEYXRhPC9jb2RlPm9iamVjdCBmcm9tIHRoZSB1bmRlcmx5aW5nCiAgICAgICogPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIDxjb2RlPkRhdGFiYXNlTWV0YURhdGE8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhYmFzZU1ldGFEYXRhIGdldE1ldGFEYXRhKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRNZXRhRGF0YSgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRNZXRhRGF0YSgpOwogICAgIH0KLSAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCdzIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgogICAgICAqCiAgICAgICogQHJldHVybiBUcmFuc2FjdGlvbiBsZXZlbAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIGludCBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggCisgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhc3NvY2lhdGVkIHdpdGgKICAgICAgKiA8Y29kZT4gQ29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybglUeXBlTWFwIHNldCBpbiB0aGlzIG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICBUeXBlTWFwIHNldCBpbiB0aGlzIG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIE1hcCBnZXRUeXBlTWFwKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRUeXBlTWFwKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldFR5cGVNYXAoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRUeXBlTWFwKE1hcDxTdHJpbmcsIENsYXNzPD8+PiBtYXApIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtMjc3LDE4NCArMjc3LDE4NCBAQAogICAgICAqIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gRmlyc3QgPGNvZGU+IFNRTFdhcm5pbmc8L2NvZGU+IE9iamVjdCBvciBudWxsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNRTFdhcm5pbmcgZ2V0V2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldFdhcm5pbmdzKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldFdhcm5pbmdzKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHdoZXRoZXIgdW5kZXJseWluZyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLgogICAgICAqCi0gICAgICogQHJldHVybgl0cnVlIGlmIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyBjbG9zZWQsIGZhbHNlCi0gICAgICogCQlpZiBpdCBpcyBjbG9zZWQuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLCBmYWxzZQorICAgICAqICAgICAgICAgaWYgaXQgaXMgY2xvc2VkLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0Nsb3NlZCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAlyZXR1cm4gaXNDbG9zZWQ7CisgICAgICAgIHJldHVybiBpc0Nsb3NlZDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgd2hldGhlciB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyByZWFkLW9ubHkuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBpcyByZWFkLW9ubHksIGZhbHNlIG90aGVyLXdpc2UKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gaXMgcmVhZC1vbmx5LCBmYWxzZSBvdGhlci13aXNlCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzUmVhZE9ubHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmlzUmVhZE9ubHkoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uaXNSZWFkT25seSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiBTUUwgc3RhdGVtZW50IGludG8gdGhlIHN5c3RlbSdzIG5hdGl2ZSBTUUwgZ3JhbW1lci4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIHN0YXRlbWVudCAsIHRvIGJlIGNvbnZlcnRlZC4KLSAgICAgKiBAcmV0dXJuCUNvbnZlcnRlZCBTUUwgc3RyaW5nLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBzdGF0ZW1lbnQgLCB0byBiZSBjb252ZXJ0ZWQuCisgICAgICogQHJldHVybiAgICBDb252ZXJ0ZWQgU1FMIHN0cmluZy4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBuYXRpdmVTUUwoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5uYXRpdmVTUUwoc3FsKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ubmF0aXZlU1FMKHNxbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQogICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CiAgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKLSAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQotICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgICAgICAKLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCSAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgIAkJCSAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsKTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKKyAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKKyAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCiAgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKICAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsKICAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlhdXRvR2VuZXJhdGVkS2V5cyBhIGZsYWcgaW5kaWNhdGluZyBBdXRvR2VuZXJhdGVkS2V5cyBuZWVkIHRvIGJlIHJldHVybmVkLgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCBhdXRvR2VuZXJhdGVkS2V5cykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxhdXRvR2VuZXJhdGVkS2V5cyk7Ci0gICAgfSAgICAKLSAgICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JY29sdW1uSW5kZXhlcyBhbiBhcnJheSBvZiBjb2x1bW4gaW5kZXhlcyBpbmRpY2F0aW5nIHRoZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlCi0gICAgICoJCXJldHVybmVkIGZyb20gdGhlIGluc2VydGVkIHJvdyBvciByb3dzLgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludFtdIGNvbHVtbkluZGV4ZXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uSW5kZXhlcyk7Ci0gICAgfSAgICAgICAgICAKLSAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCWludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgICAgICAgCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgIAkJCQkgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7Ci0gICAgfSAgICAgICAgICAgCiAKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKICAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQljb2x1bW5OYW1lcyBOYW1lIG9mIGJvdW5kIGNvbHVtbnMuCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGF1dG9HZW5lcmF0ZWRLZXlzIGEgZmxhZyBpbmRpY2F0aW5nIEF1dG9HZW5lcmF0ZWRLZXlzIG5lZWQgdG8gYmUgcmV0dXJuZWQuCiAgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCBhdXRvR2VuZXJhdGVkS2V5cykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGF1dG9HZW5lcmF0ZWRLZXlzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgY29sdW1uSW5kZXhlcyBhbiBhcnJheSBvZiBjb2x1bW4gaW5kZXhlcyBpbmRpY2F0aW5nIHRoZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlCisgICAgICogICAgICAgIHJldHVybmVkIGZyb20gdGhlIGluc2VydGVkIHJvdyBvciByb3dzLgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludFtdIGNvbHVtbkluZGV4ZXMpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5JbmRleGVzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0SG9sZGFiaWxpdHkgICAgUmVzdWx0U2V0IEhvbGRhYmlsaXR5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBjb2x1bW5OYW1lcyBOYW1lIG9mIGJvdW5kIGNvbHVtbnMuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgU3RyaW5nW10gY29sdW1uTmFtZXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uTmFtZXMpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5OYW1lcyk7CiAgICAgfQogCiAgICAgcHVibGljIENsb2IgY3JlYXRlQ2xvYigpIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtNTA0LDE1MSArNTA0LDE1MSBAQAogICAgIC8qKgogICAgICAqIFJlbW92ZXMgdGhlIGdpdmVuIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2F2ZXBvaW50CTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0Ci0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBzYXZlcG9pbnQgICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVsZWFzZVNhdmVwb2ludChTYXZlcG9pbnQgc2F2ZXBvaW50KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucmVsZWFzZVNhdmVwb2ludChzYXZlcG9pbnQpOwotICAgIH0gCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucmVsZWFzZVNhdmVwb2ludChzYXZlcG9pbnQpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFJvbGxzIGJhY2sgdGhlIGNoYW5nZXMgbWFkZSBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjaygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yb2xsYmFjaygpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJvbGxiYWNrKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUm9sbHMgYmFjayB0aGUgY2hhbmdlcyBtYWRlIGFmdGVyIHRoZSBzYXZlcG9pbnQuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soU2F2ZXBvaW50IHNhdmVwb2ludCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJvbGxiYWNrKHNhdmVwb2ludCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucm9sbGJhY2soc2F2ZXBvaW50KTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgYXV0by1jb21tbWl0IG1vZGUgb2YgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlhdXRvQ29tbWl0IGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB0aGUgYXV0by1jb21taXQgbW9kZS4gICAgIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgYXV0b0NvbW1pdCBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhlIGF1dG8tY29tbWl0IG1vZGUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEF1dG9Db21taXQoYm9vbGVhbiBhdXRvQ29tbWl0KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGF1dG9Db21taXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNhdGFsb2cgbmFtZSB0byB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2F0YWxvZwlDYXRhbG9nIG5hbWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBjYXRhbG9nICAgIENhdGFsb2cgbmFtZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q2F0YWxvZyhTdHJpbmcgY2F0YWxvZykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldENhdGFsb2coY2F0YWxvZyk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0Q2F0YWxvZyhjYXRhbG9nKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZCAKKyAgICAgKiBTZXRzIHRoZSBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZAogICAgICAqIHVzaW5nIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCWhvbGRhYmlsaXR5CUEgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBob2xkYWJpbGl0eSBjb25zdGFudAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgaG9sZGFiaWxpdHkgICAgQSA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IGhvbGRhYmlsaXR5IGNvbnN0YW50CisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEhvbGRhYmlsaXR5KGludCBob2xkYWJpbGl0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAgCWNvbi5zZXRIb2xkYWJpbGl0eShob2xkYWJpbGl0eSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICAgY29uLnNldEhvbGRhYmlsaXR5KGhvbGRhYmlsaXR5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBQdXRzIHRoZSBjb25uZWN0aW9uIGluIHJlYWQtb25seSBtb2RlIGFzIGEgaGludCB0byB0aGUgZHJpdmVyIHRvIAorICAgICAqIFB1dHMgdGhlIGNvbm5lY3Rpb24gaW4gcmVhZC1vbmx5IG1vZGUgYXMgYSBoaW50IHRvIHRoZSBkcml2ZXIgdG8KICAgICAgKiBwZXJmb3JtIGRhdGFiYXNlIG9wdGltaXphdGlvbnMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVhZE9ubHkgIHRydWUgZW5hYmxlcyByZWFkLW9ubHkgbW9kZSwgZmFsc2UgZGlzYWJsZXMgaXQuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICByZWFkT25seSAgdHJ1ZSBlbmFibGVzIHJlYWQtb25seSBtb2RlLCBmYWxzZSBkaXNhYmxlcyBpdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVhZE9ubHkoYm9vbGVhbiByZWFkT25seSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldFJlYWRPbmx5KHJlYWRPbmx5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRSZWFkT25seShyZWFkT25seSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhbmQgdW5uYW1lZCBzYXZlcG9pbnQgYW5kIHJldHVybnMgYW4gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KICAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNhdmVwb2ludCBzZXRTYXZlcG9pbnQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnNldFNhdmVwb2ludCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc2F2ZXBvaW50IHdpdGggdGhlIG5hbWUgYW5kIHJldHVybnMgYW4gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdC4KICAgICAgKgotICAgICAqIEBwYXJhbQluYW1lCU5hbWUgb2YgdGhlIHNhdmVwb2ludC4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbmFtZSAgICBOYW1lIG9mIHRoZSBzYXZlcG9pbnQuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNhdmVwb2ludCBzZXRTYXZlcG9pbnQoU3RyaW5nIG5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uc2V0U2F2ZXBvaW50KG5hbWUpOwotICAgIH0gICAgCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnNldFNhdmVwb2ludChuYW1lKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGV2ZWwgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbGV2ZWwgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2FjdGlvbklzb2xhdGlvbihpbnQgbGV2ZWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbihsZXZlbCk7Ci0gICAgfSAgICAgCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24obGV2ZWwpOworICAgIH0KKwogCiAgICAgcHVibGljIGludCBnZXROZXR3b3JrVGltZW91dCgpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrVGltZW91dChFeGVjdXRvciBleGVjdXRvciwgaW50IG1pbGxpc2Vjb25kcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFib3J0KEV4ZWN1dG9yIGV4ZWN1dG9yKSAgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRTY2hlbWEoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTY2hlbWEoU3RyaW5nIHNjaGVtYSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBDaGVja3MgdGhlIHZhbGlkaXR5IG9mIHRoaXMgb2JqZWN0CiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGNoZWNrVmFsaWRpdHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJaWYgKGlzQ2xvc2VkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiQ29ubmVjdGlvbiBjbG9zZWQiKTsKLSAgICAJaWYgKCF2YWxpZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkludmFsaWQgQ29ubmVjdGlvbiIpOwotICAgIAlpZihhY3RpdmUgPT0gZmFsc2UpIHsKLSAgICAJICAgIG1jLmNoZWNrSWZBY3RpdmUodGhpcyk7Ci0gICAgCX0KKyAgICAgICAgaWYgKGlzQ2xvc2VkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiQ29ubmVjdGlvbiBjbG9zZWQiKTsKKyAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkludmFsaWQgQ29ubmVjdGlvbiIpOworICAgICAgICBpZihhY3RpdmUgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIG1jLmNoZWNrSWZBY3RpdmUodGhpcyk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBhY3RpdmUgZmxhZyB0byB0cnVlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JYWN0dglib29sZWFuCisgICAgICogQHBhcmFtICAgIGFjdHYgICAgYm9vbGVhbgogICAgICAqLwogICAgIHZvaWQgc2V0QWN0aXZlKGJvb2xlYW4gYWN0dikgewogICAgICAgICBhY3RpdmUgPSBhY3R2OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCBhYzdlNzQ4Li5mMDY3NWE0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtMzMsMTkgKzMzLDE5IEBACiAgKiBUaGlzIGNsYXNzIGlzIGV4dGVuZGVkIGJ5IHRoZSBEYXRhU291cmNlIHNwZWNpZmljIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmYWN0b3JpZXMKICAqIGFuZCB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBmb3IgdGhlIDxjb2RlPkRyaXZlck1hbmFnZXI8L2NvZGU+LgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzAzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiAKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnksIAorcHVibGljIGFic3RyYWN0IGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSwKICAgICBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgRGF0YVNvdXJjZVNwZWMgc3BlYyA9IG5ldyBEYXRhU291cmNlU3BlYygpOwogICAgIHByb3RlY3RlZCB0cmFuc2llbnQgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIgZHNPYmpCdWlsZGVyOwotICAgIAorCiAgICAgcHJvdGVjdGVkIGphdmEuaW8uUHJpbnRXcml0ZXIgbG9nV3JpdGVyID0gbnVsbDsKICAgICBwcm90ZWN0ZWQgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHJhID0gbnVsbDsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC01NCw4ICs1NCw4IEBACiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIENvbm5lY3Rpb24gRmFjdG9yeSBpbnN0YW5jZS4gVGhlIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbgogICAgICAqIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGlzIHVzZWQgaGVyZS4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuCUdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjcmVhdGVDb25uZWN0aW9uRmFjdG9yeSgpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTYzLDE2ICs2MywxNiBAQAogICAgICAgICB9CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIGNmID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlKAogICAgICAgICAgICAgKGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSl0aGlzLCBudWxsKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBDb25uZWN0aW9uIEZhY3RvcnkgaW5zdGFuY2UuIFRoZSA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gaW1wbGVtZW50YXRpb24KICAgICAgKiBvZiB0aGUgYXBwbGljYXRpb24gc2VydmVyIGlzIHVzZWQgaGVyZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY3hNYW5hZ2VyCTxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEByZXR1cm4JR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjeE1hbmFnZXIgICAgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHJldHVybiAgICBHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgY3JlYXRlQ29ubmVjdGlvbkZhY3RvcnkoamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIgY3hNYW5hZ2VyKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC04MCw1NSArODAsNTUgQEAKICAgICAgICAgfQogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSBjZiA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSgKICAgICAgICAgICAgIChqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpdGhpcywgY3hNYW5hZ2VyKTsKLSAgICAgICAgcmV0dXJuIGNmOyAKKyAgICAgICAgcmV0dXJuIGNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBuZXcgcGh5c2ljYWwgY29ubmVjdGlvbiB0byB0aGUgdW5kZXJseWluZyBFSVMgcmVzb3VyY2UKICAgICAgKiBtYW5hZ2VyLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCWFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCW9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKLSAgICAgKiAgICAgICAJCQkJY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QgCi0gICAgICogQHRocm93cwlSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCQlwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0CisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24oamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0IHN1YmplY3QsCiAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb247Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8gCisgICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvCiAgICAgICogYW5vdGhlciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LgotICAgICAqIAotICAgICAqIEBwYXJhbQlvdGhlcgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZSAKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKLSAgICAgKgkJZmFsc2UJb3RoZXJ3aXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgb3RoZXIgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKKyAgICAgKiAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvdGhlcik7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGphdmEuaW8uUHJpbnRXcml0ZXIgZ2V0TG9nV3JpdGVyKCkgewogICAgICAgICByZXR1cm4gbG9nV3JpdGVyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJlc291cmNlQWRhcHRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgZ2V0UmVzb3VyY2VBZGFwdGVyKCkgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTM2LDExICsxMzYsMTEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmE7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CisgICAgICogQHJldHVybiAgICBoYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKXsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTE0OCw0MSArMTQ4LDQxIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHNwZWMuaGFzaENvZGUoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbWF0Y2hlZCA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gZnJvbSB0aGUgY2FuZGlkYXRlIAorICAgICAqIFJldHVybnMgYSBtYXRjaGVkIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmcm9tIHRoZSBjYW5kaWRhdGUKICAgICAgKiBzZXQgb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdHMuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbm5lY3Rpb25TZXQJPGNvZGU+U2V0PC9jb2RlPiBvZiAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICoJCQkJb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBwYXJhbQlzdWJqZWN0CSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqCQkJZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqCQkJCWZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZwotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgaXMgdGhlIGJlc3QgbWF0Y2ggc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGFjY2Vzc2luZyB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4KLSAgICAgKgkJCQkJcGFyYW1ldGVyIG9yIHRoZSA8Y29kZT5TZXQ8L2NvZGU+IG9mIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqCQkJCQlvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29ubmVjdGlvblNldCAgICA8Y29kZT5TZXQ8L2NvZGU+IG9mICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICBvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogICAgICAgICAgICBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKKyAgICAgKiBAcGFyYW0gICAgY3hSZXF1ZXN0SW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogICAgICAgICAgICAgICAgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCBpcyB0aGUgYmVzdCBtYXRjaCBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgYWNjZXNzaW5nIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgb3IgdGhlIDxjb2RlPlNldDwvY29kZT4gb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIG9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKICAgICAgKi8KLSAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMoamF2YS51dGlsLlNldCBjb25uZWN0aW9uU2V0LCAKKyAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMoamF2YS51dGlsLlNldCBjb25uZWN0aW9uU2V0LAogICAgICAgICBqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihjb25uZWN0aW9uU2V0ID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYyA9IFNlY3VyaXR5VXRpbHMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKHRoaXMsIHN1YmplY3QsIGN4UmVxdWVzdEluZm8pOwotICAgICAgICAKKwogICAgICAgICBqYXZhLnV0aWwuSXRlcmF0b3IgaXRlciA9IGNvbm5lY3Rpb25TZXQuaXRlcmF0b3IoKTsKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jID0gbnVsbDsKICAgICAgICAgd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgbWMgPSAoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uKSBpdGVyLm5leHQoKTsKICAgICAgICAgICAgIH0gY2F0Y2goamF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNlcHRpb24gbnNlZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaXRlciIpOworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaXRlciIpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihuc2VlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZihwYyA9PSBudWxsICYmIHRoaXMuZXF1YWxzKG1jLmdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpKSkgewpAQCAtMTkxLDcgKzE5MSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQobWMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWM7CiAgICAgICAgICAgICAgICAgfSBjYXRjaChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewotCSAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3JlIiwgcmUpOworICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3JlIiwgcmUpOwogICAgICAgICAgICAgICAgICAgICBtYy5jb25uZWN0aW9uRXJyb3JPY2N1cnJlZChyZSwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmKFNlY3VyaXR5VXRpbHMuaXNQYXNzd29yZENyZWRlbnRpYWxFcXVhbChwYywgbWMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCkpID09IHRydWUpIHsKQEAgLTIwMCw0NSArMjAwLDQ1IEBACiAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQobWMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWM7CiAgICAgICAgICAgICAgICAgfSBjYXRjaChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewotCSAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMucmUiKTsKKyAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLnJlIik7CiAgICAgICAgICAgICAgICAgICAgIG1jLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKHJlLCBudWxsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLy9HSkNJTlQKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaXMgdG8gYmUgdmFsaWRhdGVkIG9yIG5vdAogICAgICAqIGFuZCB2YWxpZGF0ZXMgaXQgb3IgcmV0dXJucy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCi0gICAgICogICAgICAgIAkgICAgICAgICAgCQlpZiB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyCiAgICAgICovCiAgICAgdm9pZCBpc1ZhbGlkKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKIAogICAgICAgICBpZihtYy5pc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKSB7Ci0JICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgCi0gICAgICAgIGJvb2xlYW4gY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9IAorCisgICAgICAgIGJvb2xlYW4gY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9CiAgICAgICAgICAgICAobmV3IEJvb2xlYW4oc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCkudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOwogICAgICAgICBpZiggY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9PSBmYWxzZSB8fCBtYyA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgU3RyaW5nIHZhbGlkYXRpb25NZXRob2QgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAKKwogICAgICAgICBtYy5jaGVja0lmVmFsaWQoKTsKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBhYm92ZSBjYWxsIGNoZWNrcyBpZiB0aGUgYWN0dWFsIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgICAgICogaXMgdXNhYmxlIG9yIG5vdC4KICAgICAgICAgICovCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgICAgICAKKwogICAgICAgICBpZih2YWxpZGF0aW9uTWV0aG9kLmVxdWFscygiYXV0by1jb21taXQiKSA9PSB0cnVlKSB7CiAgICAgICAgICAgICBpc1ZhbGlkQnlBdXRvQ29tbWl0KGNvbik7CiAgICAgICAgIH0gZWxzZSBpZih2YWxpZGF0aW9uTWV0aG9kLmVxdWFsc0lnbm9yZUNhc2UoIm1ldGEtZGF0YSIpID09IHRydWUpIHsKQEAgLTI0OSwyOCArMjQ5LDI4IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBjaGVja2luZyBpdHMgYXV0byBjb21taXQgcHJvcGVydHkuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeUF1dG9Db21taXQoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgIC8vIE5vdGljZSB0aGF0IHVzaW5nIHNvbWV0aGluZyBsaWtlIAorICAgICAgICAgICAvLyBOb3RpY2UgdGhhdCB1c2luZyBzb21ldGhpbmcgbGlrZQogICAgICAgICAgICAvLyBkYkNvbi5zZXRBdXRvQ29tbWl0KGRiQ29uLmdldEF1dG9Db21taXQoKSkgd2lsbCBjYXVzZSBwcm9ibGVtcyB3aXRoCiAgICAgICAgICAgIC8vIHNvbWUgZHJpdmVycyBsaWtlIHN5YmFzZQotICAgICAgICAgICAvLyBXZSBkbyBub3QgdmFsaWRhdGUgY29ubmVjdGlvbnMgdGhhdCBhcmUgYWxyZWFkeSBlbmxpc3RlZCAKLQkgICAvL2luIGEgdHJhbnNhY3Rpb24gCi0JICAgLy8gV2UgY3ljbGUgYXV0b2NvbW1pdCB0byB0cnVlIGFuZCBmYWxzZSB0byBieS1wYXNzIGRyaXZlcnMgdGhhdCAKLQkgICAvLyBtaWdodCBjYWNoZSB0aGUgY2FsbCB0byBzZXQgYXV0b2NvbWl0dAorICAgICAgICAgICAvLyBXZSBkbyBub3QgdmFsaWRhdGUgY29ubmVjdGlvbnMgdGhhdCBhcmUgYWxyZWFkeSBlbmxpc3RlZAorICAgICAgIC8vaW4gYSB0cmFuc2FjdGlvbgorICAgICAgIC8vIFdlIGN5Y2xlIGF1dG9jb21taXQgdG8gdHJ1ZSBhbmQgZmFsc2UgdG8gYnktcGFzcyBkcml2ZXJzIHRoYXQKKyAgICAgICAvLyBtaWdodCBjYWNoZSB0aGUgY2FsbCB0byBzZXQgYXV0b2NvbWl0dAogICAgICAgICAgICAvLyBBbHNvIG5vdGljZSB0aGF0IHNvbWUgWEEgZGF0YSBzb3VyY2VzIHdpbGwgdGhyb3cgYW5kIGV4Y2VwdGlvbiBpZgogICAgICAgICAgICAvLyB5b3UgdHJ5IHRvIGNhbGwgc2V0QXV0b0NvbW1pdCwgZm9yIHRoZW0gdGhpcyBtZXRob2QgaXMgbm90IHJlY29tbWVuZGVkCiAKQEAgLTI4MSw5MCArMjgxLDkwIEBACiAgICAgICAgICAgICAgICAgY29uLnJvbGxiYWNrKCk7IC8vIHByZXZlbnRzIHVuY29tcGxldGVkIHRyYW5zYWN0aW9uIGV4Y2VwdGlvbnMKICAgICAgICAgICAgICAgICBjb24uc2V0QXV0b0NvbW1pdCh0cnVlKTsKICAgICAgICAgICAgfQotICAgICAgICAKLQkgICBjb24uc2V0QXV0b0NvbW1pdChhYyk7CisKKyAgICAgICBjb24uc2V0QXV0b0NvbW1pdChhYyk7CiAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hdXRvY29tbWl0Iik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2F1dG9jb21taXQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBjaGVja2luZyBpdHMgbWV0YSBkYXRhLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlNZXRhRGF0YShqYXZhLnNxbC5Db25uZWN0aW9uIGNvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGphdmEuc3FsLkRhdGFiYXNlTWV0YURhdGEgZG1kID0gY29uLmdldE1ldGFEYXRhKCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJnZXR0aW5nIHRoZSBtZXRhIGRhdGEgZmFpbGVkOiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90CiAgICAgICogYnkgcXVlcnlpbmcgYSB0YWJsZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEBwYXJhbQl0YWJsZU5hbWUJdGFibGUgd2hpY2ggc2hvdWxkIGJlIHF1ZXJpZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAcGFyYW0gICAgdGFibGVOYW1lICAgIHRhYmxlIHdoaWNoIHNob3VsZCBiZSBxdWVyaWVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlUYWJsZVF1ZXJ5KGphdmEuc3FsLkNvbm5lY3Rpb24gY29uLCAKKyAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlUYWJsZVF1ZXJ5KGphdmEuc3FsLkNvbm5lY3Rpb24gY29uLAogICAgICAgICBTdHJpbmcgdGFibGVOYW1lKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgamF2YS5zcWwuU3RhdGVtZW50IHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICBqYXZhLnNxbC5SZXN1bHRTZXQgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSAiICsgdGFibGVOYW1lKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19leGVjdXRlIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2V4ZWN1dGUiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJxdWVyeWluZyB0aGUgdGFibGUgIiArIHRhYmxlTmFtZSArICIgZmFpbGVkOiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgaXNvbGF0aW9uIGxldmVsIHNwZWNpZmllZCBpbiB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgogICAgICAqIGZvciB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHBhc3NlZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAotICAgICAqCQkJCQlvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAorICAgICAqICAgICAgICAgICAgICAgICAgICBvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIHNldElzb2xhdGlvbihjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCQotICAgIAlqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAgICAJaWYoY29uID09IG51bGwpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAkKLSAgICAJU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7Ci0gICAgCSAgICB0cnkgewotICAgIAkgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKLSAgICAJICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGNvdWxkICIKLSAgICAJICAgICAgICAgICAgKyAibm90IGJlIHNldDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgIH0KLSAgICAJfQorCisgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOworICAgICAgICBpZihjb24gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKKyAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGNvdWxkICIKKyAgICAgICAgICAgICAgICAgICAgKyAibm90IGJlIHNldDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlc2V0cyB0aGUgaXNvbGF0aW9uIGxldmVsIGZvciB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHBhc3NlZC4KICAgICAgKiBJZiB0aGUgdHJhbnNhY3Rpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgb25lCkBAIC0zNzMsMzgyICszNzMsMzgyIEBACiAgICAgICogaXNvbGF0aW9uIGxldmVsIGZyb20gdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkLiBFbHNlLAogICAgICAqIGl0IHNldHMgaXQgdG8gdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBwYXNzZWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHBhcmFtCXRyYW5Jc29sCWludAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCi0gICAgICoJCQkJCW9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cmFuSXNvbCAgICBpbnQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAorICAgICAqICAgICAgICAgICAgICAgICAgICBvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgogICAgICAqLwogICAgIHZvaWQgcmVzZXRJc29sYXRpb24oY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jLCBpbnQgdHJhbklzb2wpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCQotICAgIAlqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAgICAJaWYoY29uID09IG51bGwpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAkKLSAgICAJU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgIFN0cmluZyBndWFyYW50ZWVJc29sYXRpb25MZXZlbCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKLSAgICAJICAgIAotICAgIAkgICAgaWYoZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgIT0gbnVsbCAmJiBndWFyYW50ZWVJc29sYXRpb25MZXZlbC5lcXVhbHMoIiIpID09IGZhbHNlKSB7Ci0gICAgCSAgICAgICAgYm9vbGVhbiBndWFyYW50ZWUgPSAobmV3IEJvb2xlYW4oZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOwotICAgIAkgICAgICAgIAotICAgIAkgICAgICAgIGlmKGd1YXJhbnRlZSkgewotICAgIAkgICAgICAgICAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOwotICAgIAkgICAgICAgICAgICB0cnkgewotICAgIAkgICAgICAgICAgICAgICAgaWYodHJhbklzb2xhdGlvbkludCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgewotICAgIAkgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKLSAgICAJICAgICAgICAgICAgICAgIH0KLSAgICAJICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKLSAgICAJICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgICAgICAgICAgfQotICAgIAkgICAgICAgIH0gZWxzZSB7Ci0gICAgCSAgICAgICAgICAgIHRyeSB7Ci0gICAgCSAgICAgICAgICAgICAgICBpZih0cmFuSXNvbCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgewotICAgIAkgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbCk7Ci0gICAgCSAgICAgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCi0gICAgCSAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICAgICAgICAgIH0KLSAgICAJICAgICAgICB9Ci0gICAgCSAgICB9Ci0gICAgCX0KKworICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKKyAgICAgICAgaWYoY29uID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOworICAgICAgICBpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICBTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CisKKyAgICAgICAgICAgIGlmKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsICE9IG51bGwgJiYgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwuZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgICAgIGJvb2xlYW4gZ3VhcmFudGVlID0gKG5ldyBCb29sZWFuKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLnRvTG93ZXJDYXNlKCkpKS5ib29sZWFuVmFsdWUoKTsKKworICAgICAgICAgICAgICAgIGlmKGd1YXJhbnRlZSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYodHJhbklzb2xhdGlvbkludCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0cmFuSXNvbCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBpbnRlZ2VyIGVxdWl2YWxlbnQgb2YgdGhlIHN0cmluZyBzcGVjaWZ5aW5nCiAgICAgICogdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQl0cmFuSXNvbGF0aW9uCXN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24gbGV2ZWwKLSAgICAgKiBAcmV0dXJuCXRyYW5Jc29sYXRpb25JbnQJdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGNvbnN0YW50Ci0gICAgICoJCQkJCWZvciB0aGUgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbi4KKyAgICAgKiBAcGFyYW0gICAgdHJhbklzb2xhdGlvbiAgICBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uIGxldmVsCisgICAgICogQHJldHVybiAgICB0cmFuSXNvbGF0aW9uSW50ICAgIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBjb25zdGFudAorICAgICAqICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24uCiAgICAgICovCiAgICAgcHJpdmF0ZSBpbnQgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQoU3RyaW5nIHRyYW5Jc29sYXRpb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC11bmNvbW1pdHRlZCIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX1VOQ09NTUlUVEVEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLWNvbW1pdHRlZCIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX0NPTU1JVFRFRDsKLSAgICAJfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVwZWF0YWJsZS1yZWFkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFUEVBVEFCTEVfUkVBRDsKLSAgICAJfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgic2VyaWFsaXphYmxlIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1NFUklBTElaQUJMRTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiSW52YWxpZCB0cmFuc2FjdGlvbiBpc29sYXRpb247IHRoZSB0cmFuc2FjdGlvbiAiCi0gICAgCSAgICAgICAgKyAiaXNvbGF0aW9uIGxldmVsIGNhbiBiZSBlbXB0eSBvciBhbnkgb2YgdGhlIGZvbGxvd2luZzogIgotICAgIAkgICAgICAgICAgICArICJyZWFkLXVuY29tbWl0dGVkLCByZWFkLWNvbW1pdHRlZCwgcmVwZWF0YWJsZS1yZWFkLCBzZXJpYWxpemFibGUiKTsKLSAgICAJfQorICAgICAgICBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtdW5jb21taXR0ZWQiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9VTkNPTU1JVFRFRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC1jb21taXR0ZWQiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9DT01NSVRURUQ7CisgICAgICAgIH0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlcGVhdGFibGUtcmVhZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRVBFQVRBQkxFX1JFQUQ7CisgICAgICAgIH0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInNlcmlhbGl6YWJsZSIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9TRVJJQUxJWkFCTEU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkludmFsaWQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uOyB0aGUgdHJhbnNhY3Rpb24gIgorICAgICAgICAgICAgICAgICsgImlzb2xhdGlvbiBsZXZlbCBjYW4gYmUgZW1wdHkgb3IgYW55IG9mIHRoZSBmb2xsb3dpbmc6ICIKKyAgICAgICAgICAgICAgICAgICAgKyAicmVhZC11bmNvbW1pdHRlZCwgcmVhZC1jb21taXR0ZWQsIHJlcGVhdGFibGUtcmVhZCwgc2VyaWFsaXphYmxlIik7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlvdXQJPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dXcml0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG91dCAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dXcml0ZXIoamF2YS5pby5QcmludFdyaXRlciBvdXQpIHsKICAgICAgICAgbG9nV3JpdGVyID0gb3V0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgYXNzb2NpYXRlZCA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IEphdmFCZWFuLgogICAgICAqCi0gICAgICogQHBhcmFtCXJhCTxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHNlZQk8Y29kZT5nZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJhICAgIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJlc291cmNlQWRhcHRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUFkYXB0ZXIoamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHJhKSB7Ci0gICAgICAgIHRoaXMucmEgPSByYTsgICAKKyAgICAgICAgdGhpcy5yYSA9IHJhOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRVc2VyKFN0cmluZyB1c2VyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FLCB1c2VyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEByZXR1cm4JdXNlcgorICAgICAqIEByZXR1cm4gICAgdXNlcgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dXNlcihTdHJpbmcgdXNlcikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSwgdXNlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXVzZXIKKyAgICAgKiBAcmV0dXJuICAgIHVzZXIKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHVzZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEBwYXJhbQlwYXNzd2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwYXNzd2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFBhc3N3b3JkKFN0cmluZyBwYXNzd2QpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQsIHBhc3N3ZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEByZXR1cm4JcGFzc3dkCisgICAgICogQHJldHVybiAgICBwYXNzd2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcGFzc3dkCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcGFzc3dkICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRwYXNzd29yZChTdHJpbmcgcGFzc3dkKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JELCBwYXNzd2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBhc3N3ZAorICAgICAqIEByZXR1cm4gICAgcGFzc3dkCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRwYXNzd29yZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHBhcmFtCWNsYXNzTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNsYXNzTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q2xhc3NOYW1lKFN0cmluZyBjbGFzc05hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FLCBjbGFzc05hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNsYXNzTmFtZQorICAgICAqIEByZXR1cm4gICAgY2xhc3NOYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDbGFzc05hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2xhc3NOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY2xhc3NOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRjbGFzc05hbWUoU3RyaW5nIGNsYXNzTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUsIGNsYXNzTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEByZXR1cm4JY2xhc3NOYW1lCisgICAgICogQHJldHVybiAgICBjbGFzc05hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGNsYXNzTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29uVmxkUmVxCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY29uVmxkUmVxICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKFN0cmluZyBjb25WbGRSZXEpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCwgY29uVmxkUmVxKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEByZXR1cm4JY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CisgICAgICogQHJldHVybiAgICBjb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEBwYXJhbQljb25WbGRSZXEJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjb25WbGRSZXEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoU3RyaW5nIGNvblZsZFJlcSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVELCBjb25WbGRSZXEpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHJldHVybgljb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Y29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHZhbGlkYXRpb24gbWV0aG9kIHJlcXVpcmVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsaWRhdGlvbk1ldGhvZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHZhbGlkYXRpb25NZXRob2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25NZXRob2QoU3RyaW5nIHZhbGlkYXRpb25NZXRob2QpIHsKICAgICAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QsIHZhbGlkYXRpb25NZXRob2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBtZXRob2QgdHlwZQogICAgICAqCi0gICAgICogQHJldHVybgl2YWxpZGF0aW9uIG1ldGhvZAorICAgICAqIEByZXR1cm4gICAgdmFsaWRhdGlvbiBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbGlkYXRpb25NZXRob2QoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB2YWxpZGF0aW9uIG1ldGhvZCByZXF1aXJlZAogICAgICAqCi0gICAgICogQHBhcmFtCXZhbGlkYXRpb25NZXRob2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB2YWxpZGF0aW9uTWV0aG9kICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR2YWxpZGF0aW9uTWV0aG9kKFN0cmluZyB2YWxpZGF0aW9uTWV0aG9kKSB7CiAgICAgICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9ELCB2YWxpZGF0aW9uTWV0aG9kKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBjb25uZWN0aW9uIHZhbGlkYXRpb24gbWV0aG9kIHR5cGUKICAgICAgKgotICAgICAqIEByZXR1cm4JdmFsaWRhdGlvbiBtZXRob2QKKyAgICAgKiBAcmV0dXJuICAgIHZhbGlkYXRpb24gbWV0aG9kCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR2YWxpZGF0aW9uTWV0aG9kKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEBwYXJhbQl0YWJsZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRhYmxlICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRWYWxpZGF0aW9uVGFibGVOYW1lKFN0cmluZyB0YWJsZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FLCB0YWJsZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JdGFibGUKKyAgICAgKiBAcmV0dXJuICAgIHRhYmxlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRWYWxpZGF0aW9uVGFibGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEBwYXJhbQl0YWJsZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRhYmxlICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR2YWxpZGF0aW9uVGFibGVOYW1lKFN0cmluZyB0YWJsZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FLCB0YWJsZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JdGFibGUKKyAgICAgKiBAcmV0dXJuICAgIHRhYmxlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR2YWxpZGF0aW9uVGFibGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHJuSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdHJuSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2FjdGlvbklzb2xhdGlvbihTdHJpbmcgdHJuSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OLCB0cm5Jc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybgl0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHJuSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdHJuSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR0cmFuc2FjdGlvbklzb2xhdGlvbihTdHJpbmcgdHJuSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OLCB0cm5Jc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybgl0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dHJhbnNhY3Rpb25Jc29sYXRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQKICAgICAgKgotICAgICAqIEBwYXJhbQlndWFyYW50ZWVJc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBndWFyYW50ZWVJc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKFN0cmluZyBndWFyYW50ZWVJc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwsIGd1YXJhbnRlZUlzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKKyAgICAgKiBAcmV0dXJuICAgIGlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZ3VhcmFudGVlSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZ3VhcmFudGVlSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRndWFyYW50ZWVJc29sYXRpb25MZXZlbChTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMLCBndWFyYW50ZWVJc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybglpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCisgICAgICogQHJldHVybiAgICBpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRndWFyYW50ZWVJc29sYXRpb25MZXZlbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKaW5kZXggNTU1YmU3Ny4uZWE1NDA3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKQEAgLTI2LDggKzI2LDggQEAKIC8qKgogICogPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzA1Ci0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wNQorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFJlc291cmNlQWRhcHRlciBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciB7CiAKQEAgLTM3LDUyICszNyw1MiBAQAogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZW5kcG9pbnRBY3RpdmF0aW9uCiAgICAgICogd2hpY2gganVzdCB0aHJvd3MgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCW1lZgk8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlhcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWVmICAgIDxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGFzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVuZHBvaW50QWN0aXZhdGlvbihNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IG1lZiwgQWN0aXZhdGlvblNwZWMgYXMpIHRocm93cyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJUaGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIEpEQkMgY29ubmVjdG9yIik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBlbmRwb2ludERlYWN0aXZhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCW1lZgk8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlhcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWVmICAgIDxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGFzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVuZHBvaW50RGVhY3RpdmF0aW9uKE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgbWVmLCBBY3RpdmF0aW9uU3BlYyBhcykgewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZ2V0WEFSZXNvdXJjZXMKICAgICAgKiB3aGljaCBqdXN0IHRocm93cyA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3BlY3MJPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+IGFycmF5Ci0gICAgICogQHRocm93cwk8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNwZWNzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPiBhcnJheQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykgdGhyb3dzIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIlRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgSkRCQyBjb25uZWN0b3IiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBzdGFydCBtZXRob2QKICAgICAgKgotICAgICAqIEBwYXJhbQljdHgJPGNvZGU+Qm9vdHN0cmFwQ29udGV4dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY3R4ICAgIDxjb2RlPkJvb3RzdHJhcENvbnRleHQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RhcnQoQm9vdHN0cmFwQ29udGV4dCBjdHgpIHRocm93cyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzb3VyY2UgQWRhcHRlciBpcyBzdGFydGluZyB3aXRoIGNvbmZpZ3VyYXRpb24gOiIgKyByYVByb3ApOwogICAgICAgICBpZiAocmFQcm9wID09IG51bGwgfHwgIXJhUHJvcC5lcXVhbHMoIlZBTElEIikpIHsKLQkgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJSZXNvdXJjZSBhZGFwdGVyIGNhbm5vdCBzdGFydC4gSXQgaXMgY29uZmlndXJlZCBhcyA6ICIgKyByYVByb3ApOwotCX0gCisgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiUmVzb3VyY2UgYWRhcHRlciBjYW5ub3Qgc3RhcnQuIEl0IGlzIGNvbmZpZ3VyZWQgYXMgOiAiICsgcmFQcm9wKTsKICAgICB9Ci0gICAgCisgICAgfQorCiAgICAgLyoqCiAgICAgICogRW1wdHkgaW1wbGVtZW50YXRpb24gb2Ygc3RvcCBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdG9wKCkgewotICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0UkFQcm9wZXJ0eShTdHJpbmcgcykgewpAQCAtOTIsNSArOTIsNSBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UkFQcm9wZXJ0eSgpIHsKICAgICAgICAgcmV0dXJuIHJhUHJvcDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbAppbmRleCA2NTkwYTg0Li42YzUwNzZiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIke2dqYy5ob21lfSIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3NwaSIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0yOSw1NSArMjksNTUgQEAKICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTQiPgotICAgIAkKLSAgICAJPG1rZGlyIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ii8+Ci0gICAgCQotCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCisKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ii8+CisKKyAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIgYmFzZWRpcj0iJHtjbGFzcy5kaXJ9IgogICAgICAgICBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLCBjb20vc3VuL2dqYy91dGlsLyoqLyosIGNvbS9zdW4vZ2pjL2NvbW1vbi8qKi8qIiBleGNsdWRlcz0iY29tL3N1bi9namMvY2NpLyoqLyosY29tL3N1bi9namMvc3BpLzEuNC8qKi8qIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1jcC54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtY3AueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLXhhLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEteGEueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRtLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZG0ueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLXhhLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEteGEueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGRlbGV0ZSBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3QvY29tIi8+Ci0gICAJPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiLz4KLSAgIAk8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiLz4KLSAgIAkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGRlbGV0ZSBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3QvY29tIi8+CisgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiLz4KKyAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiLz4KKwogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCwgcGFja2FnZTE0Ii8+CiAgICAgPHRhcmdldCBuYW1lPSJidWlsZDEzIi8+Ci0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxNCwgYnVpbGQxMyIvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTQsIGJ1aWxkMTMiLz4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLXhhLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLXhhLnhtbAppbmRleCBhMWE3MGY2Li5hZTlmOGZlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS14YS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEteGEueG1sCkBAIC0yMiw2OSArMjIsNjkgQEAKICAgICAgICAgICAgdmVyc2lvbj0iMS41Ij4KIAogICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KLSAgICA8IS0tIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEgCisgICAgPCEtLSBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhCiAgICAgICAgICBkZXNjcmlwdGlvbiBmb3IgdGhlIHJlc291cmNlIGFkYXB0ZXIuCiAgICAgLS0+CiAgICAgPGRlc2NyaXB0aW9uPlJlc291cmNlIGFkYXB0ZXIgd3JhcHBpbmcgRGF0YXNvdXJjZSBpbXBsZW1lbnRhdGlvbiBvZiBkcml2ZXI8L2Rlc2NyaXB0aW9uPgotICAgIAorCiAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGlzcGxheS1uYW1lIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KLSAgICA8IS0tIFRoZSBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYSBuYW1lIHRoYXQgCisgICAgPCEtLSBUaGUgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEgbmFtZSB0aGF0CiAgICAgICAgICBpcyBpbnRlbmRlZCB0byBiZSBkaXNwbGF5ZWQgYnkgdG9vbHMuCiAgICAgLS0+CiAgICAgPGRpc3BsYXktbmFtZT5EYXRhU291cmNlIFJlc291cmNlIEFkYXB0ZXI8L2Rpc3BsYXktbmFtZT4KLSAgICAKKwogICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImljb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgogICAgIDwhLS0gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICA8aWNvbj4KLSAgICAgICAgICAgIFRoaXMgInNtYWxsLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSAKLSAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMTYgeCAxNikgCisgICAgICAgICAgICBUaGlzICJzbWFsbC1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUKKyAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMTYgeCAxNikKICAgICAgICAgICAgIGljb24gLSBKUEVHIG9yIEdJRiBpbWFnZS4gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICAgICAgPHNtYWxsLWljb24+c21hbGxpY29uLmpwZzwvc21hbGwtaWNvbj4KLSAgICAgICAgCi0gICAgICAgICAgICBUaGlzICJsYXJnZS1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgCi0gICAgICAgICAgICBhYnNvbHV0ZSBvciB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgc21hbGwgKDMyIHggMzIpIAorCisgICAgICAgICAgICBUaGlzICJsYXJnZS1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUKKyAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMzIgeCAzMikKICAgICAgICAgICAgIGljb24gLSBKUEVHIG9yIEdJRiBpbWFnZS4gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgotICAgICAgICAgICAgPGxhcmdlLWljb24+bGFyZ2VpY29uLmpwZzwvbGFyZ2UtaWNvbj4gICAKKyAgICAgICAgICAgIDxsYXJnZS1pY29uPmxhcmdlaWNvbi5qcGc8L2xhcmdlLWljb24+CiAgICAgICAgIDwvaWNvbj4KICAgICAtLT4KICAgICA8aWNvbj4KICAgICAgICAgPHNtYWxsLWljb24+PC9zbWFsbC1pY29uPgotICAgICAgICA8bGFyZ2UtaWNvbj48L2xhcmdlLWljb24+ICAgCisgICAgICAgIDxsYXJnZS1pY29uPjwvbGFyZ2UtaWNvbj4KICAgICA8L2ljb24+Ci0gICAgCisKICAgICA8IS0tIFRoZSAidmVuZG9yLW5hbWUiIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGV4YWN0bHkgb25jZS4gLS0+CiAgICAgPCEtLSBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBkcml2ZXIgdmVuZG9yLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDx2ZW5kb3ItbmFtZT5YWVogSU5DLjwvdmVuZG9yLW5hbWU+CiAgICAgLS0+CiAgICAgPHZlbmRvci1uYW1lPlN1biBNaWNyb3N5c3RlbXM8L3ZlbmRvci1uYW1lPgotICAgIAorCiAgICAgPCEtLSBUaGUgImVpcy10eXBlIiBlbGVtZW50IHNob3VsZCBvY2N1ciBleGFjdGx5IG9uY2UuIC0tPgotICAgIDwhLS0gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgZGF0YWJhc2UsIGZvciBleGFtcGxlIHRoZSBwcm9kdWN0IG5hbWUgb2YgCisgICAgPCEtLSBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSBkYXRhYmFzZSwgZm9yIGV4YW1wbGUgdGhlIHByb2R1Y3QgbmFtZSBvZgogICAgICAgICAgdGhlIGRhdGFiYXNlIGluZGVwZW5kZW50IG9mIGFueSB2ZXJzaW9uIGluZm9ybWF0aW9uLiBUaGUgZm9sbG93aW5nCiAgICAgICAgICBpcyBhbiBleGFtcGxlLgogICAgICAgICA8ZWlzLXR5cGU+WFlaPC9laXMtdHlwZT4KICAgICAtLT4KICAgICA8ZWlzLXR5cGU+RGF0YWJhc2U8L2Vpcy10eXBlPgotICAgIAorCiAgICAgPCEtLSBUaGUgInJlc291cmNlYWRhcHRlci12ZXJzaW9uIiBlbGVtZW50IHNob3VsZCBvY2N1ciBleGFjdGx5IG9uY2UuIC0tPgotICAgIDwhLS0gVGhpcyBzcGVjaWZpZXMgYSBzdHJpbmcgYmFzZWQgdmVyc2lvbiBvZiB0aGUgcmVzb3VyY2UgYWRhcHRlciBmcm9tIAorICAgIDwhLS0gVGhpcyBzcGVjaWZpZXMgYSBzdHJpbmcgYmFzZWQgdmVyc2lvbiBvZiB0aGUgcmVzb3VyY2UgYWRhcHRlciBmcm9tCiAgICAgICAgICB0aGUgZHJpdmVyIHZlbmRvci4gVGhlIGRlZmF1bHQgaXMgYmVpbmcgc2V0IGFzIDEuMC4gVGhlIGRyaXZlcgogICAgICAgICAgdmVuZG9yIGNhbiBjaGFuZ2UgaXQgYXMgcmVxdWlyZWQuCiAgICAgLS0+CiAgICAgPHJlc291cmNlYWRhcHRlci12ZXJzaW9uPjEuMDwvcmVzb3VyY2VhZGFwdGVyLXZlcnNpb24+Ci0gICAgCisKICAgICA8IS0tIFRoaXMgImxpY2Vuc2UiIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlIC0tPgogICAgIDwhLS0gVGhpcyBzcGVjaWZpZXMgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBmb3IgdGhlIHJlc291cmNlIGFkYXB0ZXIgbW9kdWxlLgogICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICA8bGljZW5zZT4KICAgICAgICAgICAgIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAuCiAgICAgICAgICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIAotICAgICAgICAgICAgICAgIHByb3ZpZGUgYSBkZXNjcmlwdGlvbiBmb3IgdGhlIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgb2YgdGhlIAotICAgICAgICAgICAgICAgIHJlc291cmNlIGFkYXB0ZXIgbGlrZSBkdXJhdGlvbiBvZiBsaWNlbnNlLCBudW1iZXJvZiBjb25uZWN0aW9uIAorICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0bworICAgICAgICAgICAgICAgIHByb3ZpZGUgYSBkZXNjcmlwdGlvbiBmb3IgdGhlIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgb2YgdGhlCisgICAgICAgICAgICAgICAgcmVzb3VyY2UgYWRhcHRlciBsaWtlIGR1cmF0aW9uIG9mIGxpY2Vuc2UsIG51bWJlcm9mIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICByZXN0cmljdGlvbnMuCiAgICAgICAgICAgICA8L2Rlc2NyaXB0aW9uPgotICAgICAgICAKKwogICAgICAgICAgICAgVGhpcyBzcGVjaWZpZXMgd2hldGhlciBhIGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gZGVwbG95IGFuZCB1c2UgdGhlIHJlc291cmNlIGFkYXB0ZXIuCiAgICAgICAgICAgICBEZWZhdWx0IGlzIGZhbHNlLgogICAgICAgICAgICAgPGxpY2Vuc2UtcmVxdWlyZWQ+ZmFsc2U8L2xpY2Vuc2UtcmVxdWlyZWQ+CkBAIC05MywyNCArOTMsMjQgQEAKICAgICA8bGljZW5zZT4KICAgICAgICAgPGxpY2Vuc2UtcmVxdWlyZWQ+ZmFsc2U8L2xpY2Vuc2UtcmVxdWlyZWQ+CiAgICAgPC9saWNlbnNlPgotICAgIAorCiAgICAgPHJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgCi0gICAgICAgIDwhLS0gCi0gICAgICAgICAgICBUaGUgImNvbmZpZy1wcm9wZXJ0eSIgZWxlbWVudHMgY2FuIGhhdmUgemVybyBvciBtb3JlICJkZXNjcmlwdGlvbiIgCisKKyAgICAgICAgPCEtLQorICAgICAgICAgICAgVGhlICJjb25maWctcHJvcGVydHkiIGVsZW1lbnRzIGNhbiBoYXZlIHplcm8gb3IgbW9yZSAiZGVzY3JpcHRpb24iCiAgICAgICAgICAgICBlbGVtZW50cy4gVGhlICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgYXJlIG5vdCBiZWluZyBpbmNsdWRlZAogICAgICAgICAgICAgaW4gdGhlICJjb25maWctcHJvcGVydHkiIGVsZW1lbnRzIGJlbG93LiBUaGUgZHJpdmVyIHZlbmRvciBjYW4KICAgICAgICAgICAgIGFkZCB0aGVtIGFzIHJlcXVpcmVkLgogICAgICAgICAtLT4KLSAgICAgICAgCisKICAgICAgICAgPHJlc291cmNlYWRhcHRlci1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuUmVzb3VyY2VBZGFwdGVyPC9yZXNvdXJjZWFkYXB0ZXItY2xhc3M+Ci0gICAgICAgIAorCiAgICAgICAgIDxvdXRib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgIAorCiAgICAgICAgICAgICA8Y29ubmVjdGlvbi1kZWZpbml0aW9uPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPG1hbmFnZWRjb25uZWN0aW9uZmFjdG9yeS1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuWEFNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L21hbmFnZWRjb25uZWN0aW9uZmFjdG9yeS1jbGFzcz4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgdGhlc2UgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+CiAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlNlcnZlck5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgpAQCAtMTI4LDcgKzEyOCw3IEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+dGVzdGRiPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAKLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VXNlcjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5kYnVzZXI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KQEAgLTEzOSwxMiArMTM5LDEyIEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZGJ1c2VyPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAKLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+UGFzc3dvcmQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZGJwYXNzd29yZDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5VUkw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+amRiYzpkZXJieTovL2xvY2FsaG9zdDoxNTI3L3Rlc3RkYjtjcmVhdGU9dHJ1ZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgpAQCAtMTU0LDcgKzE1NCw3IEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4tLT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RGVzY3JpcHRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+T3JhY2xlIHRoaW4gZHJpdmVyIERhdGFzb3VyY2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KQEAgLTE2NSwxNyArMTY1LDE3IEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Um9sZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkxvZ2luVGltZU91dDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4wPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkRyaXZlclByb3BlcnRpZXM8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CkBAIC0xODYsNyArMTg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPiM8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Q2xhc3NOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnRYQURhdGFTb3VyY2U0MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgpAQCAtMTk4LDgyICsxOTgsODIgQEAKICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAKIDwhLS0KLSAgICAgIAkJPGNvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZmFsc2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uTWV0aG9kPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VHJhbnNhY3Rpb25Jc29sYXRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZmFsc2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25NZXRob2Q8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uVGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VHJhbnNhY3Rpb25Jc29sYXRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5HdWFyYW50ZWVJc29sYXRpb25MZXZlbDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogLS0+CiAKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbmZhY3RvcnktaW50ZXJmYWNlPmphdmF4LnNxbC5YQURhdGFTb3VyY2U8L2Nvbm5lY3Rpb25mYWN0b3J5LWludGVyZmFjZT4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uZmFjdG9yeS1pbXBsLWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlPC9jb25uZWN0aW9uZmFjdG9yeS1pbXBsLWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb24taW50ZXJmYWNlPmphdmEuc3FsLkNvbm5lY3Rpb248L2Nvbm5lY3Rpb24taW50ZXJmYWNlPgotICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uLWltcGwtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXI8L2Nvbm5lY3Rpb24taW1wbC1jbGFzcz4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgPC9jb25uZWN0aW9uLWRlZmluaXRpb24+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPHRyYW5zYWN0aW9uLXN1cHBvcnQ+WEFUcmFuc2FjdGlvbjwvdHJhbnNhY3Rpb24tc3VwcG9ydD4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8YXV0aGVudGljYXRpb24tbWVjaGFuaXNtPgogICAgICAgICAgICAgICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KICAgICAgICAgICAgICAgICA8IS0tIE5vdCBpbmNsdWRpbmcgdGhlICJkZXNjcmlwdGlvbiIgZWxlbWVudCAtLT4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxhdXRoZW50aWNhdGlvbi1tZWNoYW5pc20tdHlwZT5CYXNpY1Bhc3N3b3JkPC9hdXRoZW50aWNhdGlvbi1tZWNoYW5pc20tdHlwZT4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjcmVkZW50aWFsLWludGVyZmFjZT5qYXZheC5yZXNvdXJjZS5zcGkuc2VjdXJpdHkuUGFzc3dvcmRDcmVkZW50aWFsPC9jcmVkZW50aWFsLWludGVyZmFjZT4KICAgICAgICAgICAgIDwvYXV0aGVudGljYXRpb24tbWVjaGFuaXNtPgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxyZWF1dGhlbnRpY2F0aW9uLXN1cHBvcnQ+ZmFsc2U8L3JlYXV0aGVudGljYXRpb24tc3VwcG9ydD4KLSAgICAgICAgICAgIAorCiAgICAgICAgIDwvb3V0Ym91bmQtcmVzb3VyY2VhZGFwdGVyPgotCTxhZG1pbm9iamVjdD4KLQkgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW48L2FkbWlub2JqZWN0LWludGVyZmFjZT4KLQkgICAgICAgPGFkbWlub2JqZWN0LWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbkltcGw8L2FkbWlub2JqZWN0LWNsYXNzPgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5TY2hlbWFOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkpuZGlOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPk5vT2ZSb3dzPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuSW50ZWdlcjwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgPGFkbWlub2JqZWN0PgorICAgICAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgorICAgICAgICAgICA8YWRtaW5vYmplY3QtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluSW1wbDwvYWRtaW5vYmplY3QtY2xhc3M+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlNjaGVtYU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Sm5kaU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Tm9PZlJvd3M8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5JbnRlZ2VyPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPC9hZG1pbm9iamVjdD4KLSAgICAgICAgCisKICAgICA8L3Jlc291cmNlYWRhcHRlcj4KLSAgICAKKwogPC9jb25uZWN0b3I+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKaW5kZXggYjIxOWNkMi4uMTI0ODA5YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQpAQCAtMjQsMjYgKzI0LDI2IEBACiAvKioKICAqIENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlcnsgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlcnsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgYSA8Y29kZT5Db25uZWN0aW9uIDwvY29kZT4gb2JqZWN0IHRvIHRoZSA8Y29kZT5Db25uZWN0aW9uRmFjdG9yeTwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCWluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHJldHVybglBIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gZ2V0dGluZyB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4uCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgaW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIEEgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvciBpbiBnZXR0aW5nIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGFsbG9jYXRlQ29ubmVjdGlvbihNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLAotICAgIAkJCQkgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKSAKLSAgICAJCQkJICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotCU1hbmFnZWRDb25uZWN0aW9uIG1jID0gbWNmLmNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGluZm8pOwotCXJldHVybiBtYy5nZXRDb25uZWN0aW9uKG51bGwsIGluZm8pOyAgICAJCQkJICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24geworICAgIE1hbmFnZWRDb25uZWN0aW9uIG1jID0gbWNmLmNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGluZm8pOworICAgIHJldHVybiBtYy5nZXRDb25uZWN0aW9uKG51bGwsIGluZm8pOwogICAgIH0KLSAgICAKKwogICAgIC8qCiAgICAgICogVGhpcyBjbGFzcyBjb3VsZCBlZmZlY3RpdmVseSBpbXBsZW1lbnQgQ29ubmVjdGlvbiBwb29saW5nIGFsc28uCiAgICAgICogQ291bGQgYmUgZG9uZSBmb3IgRkNTLgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEKaW5kZXggMzljNzg3Ni4uYzQ3N2ZjMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCkBAIC0xOSwxMCArMTksMTAgQEAKIC8qKgogICogQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZveyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm97CiAKICAgICBwcml2YXRlIFN0cmluZyB1c2VyOwogICAgIHByaXZhdGUgU3RyaW5nIHBhc3N3b3JkOwpAQCAtMzAsOCArMzAsOCBAQAogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCVVzZXIgTmFtZS4KLSAgICAgKiBAcGFyYW0JcGFzc3dvcmQJUGFzc3dvcmQKKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICBVc2VyIE5hbWUuCisgICAgICogQHBhcmFtICAgIHBhc3N3b3JkICAgIFBhc3N3b3JkCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyhTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkKSB7CiAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7CkBAIC00MSw3ICs0MSw3IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSB1c2VyIG5hbWUgb2YgdGhlIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKgotICAgICAqIEByZXR1cm4JVXNlciBuYW1lIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KKyAgICAgKiBAcmV0dXJuICAgIFVzZXIgbmFtZSBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyKCkgewogICAgICAgICByZXR1cm4gdXNlcjsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHBhc3N3b3JkIG9mIHRoZSBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVBhc3N3b3JkIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KKyAgICAgKiBAcmV0dXJuICAgIFBhc3N3b3JkIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gcGFzc3dvcmQ7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgLyoqCiAgICAgICogVmVyaWZ5IHdoZXRoZXIgdHdvIENvbm5lY3Rpb25SZXF1ZXN0SW5mb3MgYXJlIGVxdWFsLgogICAgICAqCi0gICAgICogQHJldHVybglUcnVlLCBpZiB0aGV5IGFyZSBlcXVhbCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqIEByZXR1cm4gICAgVHJ1ZSwgaWYgdGhleSBhcmUgZXF1YWwgYW5kIGZhbHNlIG90aGVyd2lzZS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewogICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTsKQEAgLTc1LDE4ICs3NSwxOCBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgaGFzaGNvZGUgb2YgdGhlIG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaENvZGUuCisgICAgICogQHJldHVybiAgICBoYXNoQ29kZS4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewogICAgICAgICBTdHJpbmcgcmVzdWx0ID0gIiIgKyB1c2VyICsgcGFzc3dvcmQ7CiAgICAgICAgIHJldHVybiByZXN1bHQuaGFzaENvZGUoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21wYXJlcyB0d28gb2JqZWN0cy4KICAgICAgKgotICAgICAqIEBwYXJhbQlvMQlGaXJzdCBvYmplY3QuCi0gICAgICogQHBhcmFtCW8yCVNlY29uZCBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG8xICAgIEZpcnN0IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgbzIgICAgU2Vjb25kIG9iamVjdC4KICAgICAgKi8KICAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbChPYmplY3QgbzEsIE9iamVjdCBvMikgewogICAgICAgICBpZiAobzEgPT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YQppbmRleCAzMGRhMWZlLi4yOTVjM2ZiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YQpAQCAtMjgsMjIgKzI4LDIyIEBACiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwogLyoqCi0gKiBIb2xkcyB0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LCB3aGljaCBpcyB0byBiZSAKKyAqIEhvbGRzIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlCiAgKiBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uIHByb2dyYW0uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMQotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzEKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlIGltcGxlbWVudHMgamF2YXguc3FsLkRhdGFTb3VyY2UsIGphdmEuaW8uU2VyaWFsaXphYmxlLAotCQljb20uc3VuLmFwcHNlcnYuamRiY3JhLkRhdGFTb3VyY2UsIGpha2FydGEucmVzb3VyY2UuUmVmZXJlbmNlYWJsZXsgCi0JCQkJICAgCisgICAgICAgIGNvbS5zdW4uYXBwc2Vydi5qZGJjcmEuRGF0YVNvdXJjZSwgamFrYXJ0YS5yZXNvdXJjZS5SZWZlcmVuY2VhYmxleworCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmOwotICAgIHByaXZhdGUgQ29ubmVjdGlvbk1hbmFnZXIgY207CQkJCSAgIAkJCQkgICAKKyAgICBwcml2YXRlIENvbm5lY3Rpb25NYW5hZ2VyIGNtOwogICAgIHByaXZhdGUgaW50IGxvZ2luVGltZW91dDsKICAgICBwcml2YXRlIFByaW50V3JpdGVyIGxvZ1dyaXRlcjsKLSAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsJCQkJICAgCisgICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CiAgICAgcHJpdmF0ZSBSZWZlcmVuY2UgcmVmZXJlbmNlOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTUxLDU3ICs1MSw1NyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOwogCiAgICAgLyoqCi0gICAgICogQ29uc3RydWN0cyA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QuIFRoaXMgaXMgY3JlYXRlZCBieSB0aGUgCisgICAgICogQ29uc3RydWN0cyA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QuIFRoaXMgaXMgY3JlYXRlZCBieSB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgCi0gICAgICoJCQljcmVhdGluZyB0aGlzIG9iamVjdC4KLSAgICAgKiBAcGFyYW0JY20JPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IG9iamVjdCBlaXRoZXIgYXNzb2NpYXRlZAotICAgICAqCQkJd2l0aCBBcHBsaWNhdGlvbiBzZXJ2ZXIgb3IgUmVzb3VyY2UgQWRhcHRlci4KKyAgICAgKiBAcGFyYW0gICAgbWNmICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICBjcmVhdGluZyB0aGlzIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgY20gICAgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IG9iamVjdCBlaXRoZXIgYXNzb2NpYXRlZAorICAgICAqICAgICAgICAgICAgd2l0aCBBcHBsaWNhdGlvbiBzZXJ2ZXIgb3IgUmVzb3VyY2UgQWRhcHRlci4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YVNvdXJjZSAoTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiwgQ29ubmVjdGlvbk1hbmFnZXIgY20pIHsKLSAgICAJdGhpcy5tY2YgPSBtY2Y7Ci0gICAgCWlmIChjbSA9PSBudWxsKSB7Ci0gICAgCSAgICB0aGlzLmNtID0gKENvbm5lY3Rpb25NYW5hZ2VyKSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyKCk7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCSAgICB0aGlzLmNtID0gY207Ci0gICAgCX0gICAgCQotICAgIH0gICAKLSAgICAKKyAgICAgICAgdGhpcy5tY2YgPSBtY2Y7CisgICAgICAgIGlmIChjbSA9PSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLmNtID0gKENvbm5lY3Rpb25NYW5hZ2VyKSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLmNtID0gY207CisgICAgICAgIH0KKyAgICB9CisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIAotICAgICAqIEByZXR1cm4JPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4gICAgICAKKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXRyeSB7Ci0gICAgCSAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsbnVsbCk7ICAgIAkgICAgCi0gICAgCX0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsbnVsbCk7CisgICAgICAgIH0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CiAvLyBUaGlzIGlzIHRlbXBvcmFyeS4gVGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIFNFVkVSRSBhZnRlciBUUAotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUpOwotICAgIAl9CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIAotICAgICAqIEBwYXJhbQl1c2VyCVVzZXIgbmFtZSBmb3IgdGhlIENvbm5lY3Rpb24uCi0gICAgICogQHBhcmFtCXB3ZAlQYXNzd29yZCBmb3IgdGhlIENvbm5lY3Rpb24uCi0gICAgICogQHJldHVybgk8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLiAgICAgIAorICAgICAqCisgICAgICogQHBhcmFtICAgIHVzZXIgICAgVXNlciBuYW1lIGZvciB0aGUgQ29ubmVjdGlvbi4KKyAgICAgKiBAcGFyYW0gICAgcHdkICAgIFBhc3N3b3JkIGZvciB0aGUgQ29ubmVjdGlvbi4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbihTdHJpbmcgdXNlciwgU3RyaW5nIHB3ZCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXRyeSB7Ci0gICAgCSAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbyA9IG5ldyBDb25uZWN0aW9uUmVxdWVzdEluZm8gKHVzZXIsIHB3ZCk7Ci0gICAgCSAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsaW5mbyk7Ci0gICAgCX0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbyA9IG5ldyBDb25uZWN0aW9uUmVxdWVzdEluZm8gKHVzZXIsIHB3ZCk7CisgICAgICAgICAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsaW5mbyk7CisgICAgICAgIH0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CiAvLyBUaGlzIGlzIHRlbXBvcmFyeS4gVGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIFNFVkVSRSBhZnRlciBUUAotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUpOwotICAgIAl9Ci0gICAgfSAgICAKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyCkBAIC0xMTQsOTEgKzExNCw5MSBAQAogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogCi0gICAgICAgIENvbm5lY3Rpb24gZHJpdmVyQ29uID0gY29uOyAKKyAgICAgICAgQ29ubmVjdGlvbiBkcml2ZXJDb24gPSBjb247CiAgICAgICAgIGlmIChjb24gaW5zdGFuY2VvZiBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgewotICAgICAgICAgICBkcml2ZXJDb24gPSAoKGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSBjb24pLmdldENvbm5lY3Rpb24oKTsgCi0gICAgICAgIH0gCisgICAgICAgICAgIGRyaXZlckNvbiA9ICgoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIGNvbikuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGRyaXZlckNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGxvZ2luIHRpbWVvdXQKICAgICAgKgogICAgICAqIEByZXR1cm4gbG9naW4gdGltZW91dC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldExvZ2luVGltZW91dCgpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXJldHVybglsb2dpblRpbWVvdXQ7CisgICAgICAgIHJldHVybiAgICBsb2dpblRpbWVvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBsb2dpbiB0aW1lb3V0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lb3V0CUxvZ2luIHRpbWVvdXQuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZW91dCAgICBMb2dpbiB0aW1lb3V0LgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ2luVGltZW91dChpbnQgbG9naW5UaW1lb3V0KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAl0aGlzLmxvZ2luVGltZW91dCA9IGxvZ2luVGltZW91dDsKKyAgICAgICAgdGhpcy5sb2dpblRpbWVvdXQgPSBsb2dpblRpbWVvdXQ7CiAgICAgfQotICAgIAotICAgIC8qKiAKKworICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9nd3JpdGVyIG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gPGNvZGU+IFByaW50V3JpdGVyIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyBQcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAlyZXR1cm4JbG9nV3JpdGVyOworICAgICAgICByZXR1cm4gICAgbG9nV3JpdGVyOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZ3dyaXRlciBvbiB0aGlzIG9iamVjdC4KICAgICAgKgogICAgICAqIEBwYXJhbSA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihQcmludFdyaXRlciBsb2dXcml0ZXIpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXRoaXMubG9nV3JpdGVyID0gbG9nV3JpdGVyOwotICAgIH0gICAgICAgIAotICAgICAgICAKKyAgICAgICAgdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7CisgICAgfQorCiAgICAgcHVibGljIExvZ2dlciBnZXRQYXJlbnRMb2dnZXIoKSB0aHJvd3MgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgZmVhdHVyZS4iKTsKICAgICB9CiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCisgICAgICogQHJldHVybiAgICBEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewotICAgIAlyZXR1cm4gZGVzY3JpcHRpb247CisgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCiAgICAgICogQHBhcmFtIGRlc2NyaXB0aW9uIERlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgIAl0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gICAgfSAgICAKLSAgICAKKyAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgIH0KKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgcmVmZXJlbmNlLgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT5SZWZlcmVuY2U8L2NvZGU+b2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBSZWZlcmVuY2UgZ2V0UmVmZXJlbmNlKCkgewotICAgIAlyZXR1cm4gcmVmZXJlbmNlOworICAgICAgICByZXR1cm4gcmVmZXJlbmNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgcmVmZXJlbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlZmVyZW5jZSA8Y29kZT5SZWZlcmVuY2U8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgcmVmZXJlbmNlIDxjb2RlPlJlZmVyZW5jZTwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlZmVyZW5jZShSZWZlcmVuY2UgcmVmZXJlbmNlKSB7Ci0gICAgCXRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOworICAgICAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTsKICAgICB9CiAKICAgICBwdWJsaWMgPFQ+IFQgdW53cmFwKENsYXNzPFQ+IGlmYWNlKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKQEAgLTIwNiw2ICsyMDYsNiBAQAogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGlzV3JhcHBlckZvcihDbGFzczw/PiBpZmFjZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsgCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKaW5kZXggNTc0ZWQ2Ni4uYmVjMGQ2YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQpAQCAtMTgsMTMgKzE4LDEzIEBACiAKIHB1YmxpYyBpbnRlcmZhY2UgSmRiY1NldHVwQWRtaW4gewogCi0gICAgcHVibGljIHZvaWQgc2V0VGFibGVOYW1lKFN0cmluZyBkYik7IAorICAgIHB1YmxpYyB2b2lkIHNldFRhYmxlTmFtZShTdHJpbmcgZGIpOwogCiAgICAgcHVibGljIFN0cmluZyBnZXRUYWJsZU5hbWUoKTsKIAotICAgIHB1YmxpYyB2b2lkIHNldEpuZGlOYW1lKFN0cmluZyBuYW1lKTsgCisgICAgcHVibGljIHZvaWQgc2V0Sm5kaU5hbWUoU3RyaW5nIG5hbWUpOwogCi0gICAgcHVibGljIFN0cmluZyBnZXRKbmRpTmFtZSgpOyAKKyAgICBwdWJsaWMgU3RyaW5nIGdldEpuZGlOYW1lKCk7CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTY2hlbWFOYW1lKFN0cmluZyBuYW1lKTsKIApAQCAtMzQsNiArMzQsNiBAQAogCiAgICAgcHVibGljIEludGVnZXIgZ2V0Tm9PZlJvd3MoKTsKIAotICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2V0dXAoKTsgCisgICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZXR1cCgpOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQppbmRleCAzYmQ3Y2FkLi5mZWM3NDQzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKQEAgLTY1LDExICs2NSwxMSBAQAogCiBwcml2YXRlIHZvaWQgcHJpbnRIaWVyYXJjaHkoQ2xhc3NMb2FkZXIgY2wsIGludCBjbnQpewogd2hpbGUoY2wgIT0gbnVsbCkgewotCWZvcihpbnQgaSA9MDsgaSA8IGNudDsgaSsrKSAKLQkJU3lzdGVtLm91dC5wcmludCgiICIgKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCA6IiArIGNsKTsKLQljbCA9IGNsLmdldFBhcmVudCgpOwotCWNudCArPSAzOworICAgIGZvcihpbnQgaSA9MDsgaSA8IGNudDsgaSsrKQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIgIiApOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIDoiICsgY2wpOworICAgIGNsID0gY2wuZ2V0UGFyZW50KCk7CisgICAgY250ICs9IDM7CiB9CiB9CiAKQEAgLTc4LDEwICs3OCwxMCBAQAogICAgICAgICBmb3IoaW50IGkgPTA7IGkgPCBjbnQ7IGkrKykKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIgIiApOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCBvZiBDbGFzc0xvYWRlciAxIDoiICsgY2wxKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCBvZiBDbGFzc0xvYWRlciAyIDoiICsgY2wyKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkVRVUFMUyA6ICIgKyAoY2wxID09IGNsMikpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIG9mIENsYXNzTG9hZGVyIDIgOiIgKyBjbDIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRVFVQUxTIDogIiArIChjbDEgPT0gY2wyKSk7CiAgICAgICAgIGNsMSA9IGNsMS5nZXRQYXJlbnQoKTsKLQljbDIgPSBjbDIuZ2V0UGFyZW50KCk7CisgICAgY2wyID0gY2wyLmdldFBhcmVudCgpOwogICAgICAgICBjbnQgKz0gMzsKIH0KIH0KQEAgLTkwLDkzICs5MCw5MyBAQAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2V0dXAoKXsKIAogICAgICAgICBpZiAoam5kaU5hbWU9PSBudWxsIHx8IGpuZGlOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgcmV0dXJuIGZhbHNlOwotCX0KKyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgICAgIGlmICh0YWJsZU5hbWU9PSBudWxsIHx8IHRhYmxlTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IG51bGw7Ci0JU3RhdGVtZW50IHMgPSBudWxsOwotCVJlc3VsdFNldCBycyA9IG51bGw7Ci0JYm9vbGVhbiBiID0gZmFsc2U7CisgICAgU3RhdGVtZW50IHMgPSBudWxsOworICAgIFJlc3VsdFNldCBycyA9IG51bGw7CisgICAgYm9vbGVhbiBiID0gZmFsc2U7CiAgICAgICAgIHRyeSB7Ci0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JLy9kZWJ1ZwotCUNsYXNzIGNseiA9IERhdGFTb3VyY2UuY2xhc3M7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgLy9kZWJ1ZworICAgIENsYXNzIGNseiA9IERhdGFTb3VyY2UuY2xhc3M7CiAvKgotCWlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJEYXRhU291cmNlJ3MgY2xhc3hzIDogIiArICBjbHouZ2V0TmFtZSgpICsgICIgY2xhc3Nsb2FkZXIgIiArIGNsei5nZXRDbGFzc0xvYWRlcigpKTsKLQkJcHJpbnRIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOwotCX0KLQlDbGFzcyBjbHMgPSBpYy5sb29rdXAoam5kaU5hbWUpLmdldENsYXNzKCk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgY2xhc3MncyA6ICIgKyBjbHMuZ2V0UGFja2FnZSgpICsgIjoiICsgY2xzLmdldE5hbWUoKSAgKyAiIGNsYXNzbG9hZGVyICIgICsgY2xzLmdldENsYXNzTG9hZGVyKCkpOwotCXByaW50SGllcmFyY2h5KGNscy5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKKyAgICBpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGF0YVNvdXJjZSdzIGNsYXN4cyA6ICIgKyAgY2x6LmdldE5hbWUoKSArICAiIGNsYXNzbG9hZGVyICIgKyBjbHouZ2V0Q2xhc3NMb2FkZXIoKSk7CisgICAgICAgIHByaW50SGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKKyAgICB9CisgICAgQ2xhc3MgY2xzID0gaWMubG9va3VwKGpuZGlOYW1lKS5nZXRDbGFzcygpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGNsYXNzJ3MgOiAiICsgY2xzLmdldFBhY2thZ2UoKSArICI6IiArIGNscy5nZXROYW1lKCkgICsgIiBjbGFzc2xvYWRlciAiICArIGNscy5nZXRDbGFzc0xvYWRlcigpKTsKKyAgICBwcmludEhpZXJhcmNoeShjbHMuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzbG9hZGVycyBlcXVhbCA/ICIgKyAgKGNsei5nZXRDbGFzc0xvYWRlcigpID09IGNscy5nZXRDbGFzc0xvYWRlcigpKSk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCImKiYqJiomKiBDb21wYXJpbmcgSGllcmFjaHkgRGF0YVNvdXJjZSB2cyBsb29rZWR1cCIpOwotCWlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKLQkJY29tcGFyZUhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKSwgY2xzLmdldENsYXNzTG9hZGVyKCksIDgpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzbG9hZGVycyBlcXVhbCA/ICIgKyAgKGNsei5nZXRDbGFzc0xvYWRlcigpID09IGNscy5nZXRDbGFzc0xvYWRlcigpKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCImKiYqJiomKiBDb21wYXJpbmcgSGllcmFjaHkgRGF0YVNvdXJjZSB2cyBsb29rZWR1cCIpOworICAgIGlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKKyAgICAgICAgY29tcGFyZUhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKSwgY2xzLmdldENsYXNzTG9hZGVyKCksIDgpOworICAgIH0KIAotCVN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGxvb2t1cCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGxvb2t1cCIpOwogKi8KLQlPYmplY3QgbyA9IGljLmxvb2t1cChqbmRpTmFtZSk7Ci0vLwlTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGxvb2t1cCBsb29rdXAiKTsKKyAgICBPYmplY3QgbyA9IGljLmxvb2t1cChqbmRpTmFtZSk7CisvLyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGxvb2t1cCBsb29rdXAiKTsKIAotCSAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpbyA7CisgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlvIDsKIC8qCi0JU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBjYXN0Iik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tIFRyeWluZyBvdXIgU3R1ZmYgISEhIik7Ci0JdHJ5IHsKLQkJQ2xhc3MgbzEgPSAoQ2xhc3MuZm9yTmFtZSgiY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UiKSk7Ci0JCUNsYXNzTG9hZGVyIGNsMSA9IG8xLmdldENsYXNzTG9hZGVyKCk7Ci0JCUNsYXNzTG9hZGVyIGNsMiA9IERhdGFTb3VyY2UuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDbDEgPT0gQ2wyIiArIChjbDEgPT0gY2wyKSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3NlcyBlcXVhbCIgKyAoRGF0YVNvdXJjZS5jbGFzcyA9PSBvMSkpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBjYXN0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tIFRyeWluZyBvdXIgU3R1ZmYgISEhIik7CisgICAgdHJ5IHsKKyAgICAgICAgQ2xhc3MgbzEgPSAoQ2xhc3MuZm9yTmFtZSgiY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UiKSk7CisgICAgICAgIENsYXNzTG9hZGVyIGNsMSA9IG8xLmdldENsYXNzTG9hZGVyKCk7CisgICAgICAgIENsYXNzTG9hZGVyIGNsMiA9IERhdGFTb3VyY2UuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbDEgPT0gQ2wyIiArIChjbDEgPT0gY2wyKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3NlcyBlcXVhbCIgKyAoRGF0YVNvdXJjZS5jbGFzcyA9PSBvMSkpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAqLwogICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBTdHJpbmcgZnVsbFRhYmxlTmFtZSA9IHRhYmxlTmFtZTsKLQkgICAgaWYgKHNjaGVtYU5hbWUgIT0gbnVsbCAmJiAoIShzY2hlbWFOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSkpIHsKLQkgICAgICAgIGZ1bGxUYWJsZU5hbWUgPSBzY2hlbWFOYW1lLnRyaW0oKSArICIuIiArIGZ1bGxUYWJsZU5hbWU7Ci0JICAgIH0KLQkgICAgU3RyaW5nIHFyeSA9ICJzZWxlY3QgKiBmcm9tICIgKyBmdWxsVGFibGVOYW1lOyAKKyAgICAgICAgU3RyaW5nIGZ1bGxUYWJsZU5hbWUgPSB0YWJsZU5hbWU7CisgICAgICAgIGlmIChzY2hlbWFOYW1lICE9IG51bGwgJiYgKCEoc2NoZW1hTmFtZS50cmltKCkuZXF1YWxzKCIiKSkpKSB7CisgICAgICAgICAgICBmdWxsVGFibGVOYW1lID0gc2NoZW1hTmFtZS50cmltKCkgKyAiLiIgKyBmdWxsVGFibGVOYW1lOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBxcnkgPSAic2VsZWN0ICogZnJvbSAiICsgZnVsbFRhYmxlTmFtZTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyBxdWVyeSA6IiArIHFyeSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0aW5nIHF1ZXJ5IDoiICsgcXJ5KTsKIAotCSAgICBzID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBycyA9IHMuZXhlY3V0ZVF1ZXJ5KHFyeSk7IAorICAgICAgICBzID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBycyA9IHMuZXhlY3V0ZVF1ZXJ5KHFyeSk7CiAKICAgICAgICAgICAgIGludCBpID0gMDsKLQkgICAgaWYgKHJzLm5leHQoKSkgewotCSAgICAgICAgaSsrOwotCSAgICB9CisgICAgICAgIGlmIChycy5uZXh0KCkpIHsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vIG9mIHJvd3MgZm91bmQ6IiArIGkpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJObyBvZiByb3dzIGV4cGVjdGVkOiIgKyBub09mUm93cyk7CiAKLQkgICAgaWYgKGkgPT0gbm9PZlJvd3MuaW50VmFsdWUoKSkgewotCSAgICAgICBiID0gdHJ1ZTsKLQkgICAgfSBlbHNlIHsKLQkgICAgICAgYiA9IGZhbHNlOwotCSAgICB9Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBiID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGlmIChycyAhPSBudWxsKSBycy5jbG9zZSgpOwotCSAgICAgICAgaWYgKHMgIT0gbnVsbCkgcy5jbG9zZSgpOwotCSAgICAgICAgaWYgKGNvbiAhPSBudWxsKSBjb24uY2xvc2UoKTsKKyAgICAgICAgaWYgKGkgPT0gbm9PZlJvd3MuaW50VmFsdWUoKSkgeworICAgICAgICAgICBiID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgYiA9IGZhbHNlOworICAgICAgICB9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBiID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChycyAhPSBudWxsKSBycy5jbG9zZSgpOworICAgICAgICAgICAgaWYgKHMgIT0gbnVsbCkgcy5jbG9zZSgpOworICAgICAgICAgICAgaWYgKGNvbiAhPSBudWxsKSBjb24uY2xvc2UoKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIH0KLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJSZXR1cm5pbmcgc2V0dXAgOiIgK2IpOwotCXJldHVybiBiOworICAgICAgICB9CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuaW5nIHNldHVwIDoiICtiKTsKKyAgICByZXR1cm4gYjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEKaW5kZXggOGViZTA1Ny4uYzU0YTIxNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEKQEAgLTIzLDQ1ICsyMyw0NSBAQAogLyoqCiAgKiA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzAzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIExvY2FsVHJhbnNhY3Rpb24gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Mb2NhbFRyYW5zYWN0aW9uIHsKLSAgICAKKwogICAgIHByaXZhdGUgTWFuYWdlZENvbm5lY3Rpb24gbWM7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4uCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IHJldHVybnMKLSAgICAgKgkJCXRoaXMgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gb2JqZWN0IGFzCi0gICAgICoJCQlhIHJlc3VsdCBvZiA8Y29kZT5nZXRMb2NhbFRyYW5zYWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCByZXR1cm5zCisgICAgICogICAgICAgICAgICB0aGlzIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IG9iamVjdCBhcworICAgICAqICAgICAgICAgICAgYSByZXN1bHQgb2YgPGNvZGU+Z2V0TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgTG9jYWxUcmFuc2FjdGlvbihNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLm1jID0gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQmVnaW4gYSBsb2NhbCB0cmFuc2FjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYmVnaW4oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uU3RhcnRlZCgpOworICAgIG1jLnRyYW5zYWN0aW9uU3RhcnRlZCgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpLnNldEF1dG9Db21taXQoZmFsc2UpOwogICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21taXQgYSBsb2NhbCB0cmFuc2FjdGlvbi4KLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uIG9yIGNvbW1pdHRpbmcgdGhlIHRyYW5zYWN0aW9uCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBvciBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbW1pdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIEV4Y2VwdGlvbiBlID0gbnVsbDsKQEAgLTcyLDE1ICs3MiwxNSBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJvbGxiYWNrIGEgbG9jYWwgdHJhbnNhY3Rpb24uCi0gICAgICogCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbiBvciByb2xsaW5nIGJhY2sgdGhlIHRyYW5zYWN0aW9uCisgICAgICoKKyAgICAgKiBAdGhyb3dzICAgIExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIG9yIHJvbGxpbmcgYmFjayB0aGUgdHJhbnNhY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjaygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CkBAIC05MCw3ICs5MCw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKaW5kZXggMzBmNDYwYS4uMmRhZDU5YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQpAQCAtNDEsOCArNDEsOCBAQAogLyoqCiAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMgotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjIKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbiBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIHsKIApAQCAtNTIsNyArNTIsNyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzRGVzdHJveWVkID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBib29sZWFuIGlzVXNhYmxlID0gdHJ1ZTsKLSAgICAKKwogICAgIHByaXZhdGUgaW50IGNvbm5lY3Rpb25UeXBlID0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTjsKICAgICBwcml2YXRlIFBvb2xlZENvbm5lY3Rpb24gcGMgPSBudWxsOwogICAgIHByaXZhdGUgamF2YS5zcWwuQ29ubmVjdGlvbiBhY3R1YWxDb25uZWN0aW9uID0gbnVsbDsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICBwcml2YXRlIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YgPSBudWxsOwogICAgIHByaXZhdGUgWEFSZXNvdXJjZSB4YXIgPSBudWxsOwogICAgIHB1YmxpYyBDb25uZWN0aW9uSG9sZGVyIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGU7Ci0gICAgCisKICAgICAvL0dKQ0lOVAogICAgIHByaXZhdGUgaW50IGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQ7CiAgICAgcHJpdmF0ZSBib29sZWFuIGlzQ2xlYW4gPSBmYWxzZTsKQEAgLTc3LDcxICs3Nyw3MSBAQAogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4gVGhlIHBvb2xlZENvbm4gcGFyYW1ldGVyIGlzIGV4cGVjdGVkCi0gICAgICogdG8gYmUgbnVsbCBhbmQgc3FsQ29ubiBwYXJhbWV0ZXIgaXMgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIGNhc2Ugd2hlcmUgCi0gICAgICogdGhlIGFjdHVhbCBjb25uZWN0aW9uIGlzIGdvdCBmcm9tIGEgbm9uIHBvb2xlZCBkYXRhc291cmNlIG9iamVjdC4gVGhlIAorICAgICAqIHRvIGJlIG51bGwgYW5kIHNxbENvbm4gcGFyYW1ldGVyIGlzIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiBjYXNlIHdoZXJlCisgICAgICogdGhlIGFjdHVhbCBjb25uZWN0aW9uIGlzIGdvdCBmcm9tIGEgbm9uIHBvb2xlZCBkYXRhc291cmNlIG9iamVjdC4gVGhlCiAgICAgICogcG9vbGVkQ29ubiBwYXJhbWV0ZXIgaXMgZXhwZWN0ZWQgdG8gYmUgbm9uIG51bGwgYW5kIHNxbENvbm4gcGFyYW1ldGVyCiAgICAgICogaXMgZXhwZWN0ZWQgdG8gYmUgbnVsbCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgZGF0YXNvdXJjZSBvYmplY3QgaXMgYQogICAgICAqIGNvbm5lY3Rpb24gcG9vbCBkYXRhc291cmNlIG9yIGFuIHhhIGRhdGFzb3VyY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcG9vbGVkQ29ubgk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgCi0gICAgICoJCQkJcGh5c2ljYWwgY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgcG9vbGVkCi0gICAgICoJCQkJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47IG51bGwgb3RoZXJ3aXNlCi0gICAgICogQHBhcmFtCXNxbENvbm4JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIHBoeXNpY2FsCi0gICAgICoJCQljb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBub24gcG9vbGVkIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OwotICAgICAqCQkJbnVsbCBvdGhlcndpc2UKLSAgICAgKiBAcGFyYW0JcGFzc3dkQ3JlZAlvYmplY3QgY29uYXRpbmluZyB0aGUKLSAgICAgKgkJCQl1c2VyIGFuZCBwYXNzd29yZCBmb3IgYWxsb2NhdGluZyB0aGUgY29ubmVjdGlvbgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0Ci0gICAgICoJCQkJCXRoYXQgY3JlYXRlZCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKLSAgICAgKgkJCQkJaXMgbm90IHRoZSBzYW1lIGFzIHJldHVybmVkIGJ5IDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKgkJCQkJb2JqZWN0IHBhc3NlZAorICAgICAqIEBwYXJhbSAgICBwb29sZWRDb25uICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZQorICAgICAqICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIHBvb2xlZAorICAgICAqICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OyBudWxsIG90aGVyd2lzZQorICAgICAqIEBwYXJhbSAgICBzcWxDb25uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgbm9uIHBvb2xlZCA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsKKyAgICAgKiAgICAgICAgICAgIG51bGwgb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHBhc3N3ZENyZWQgICAgb2JqZWN0IGNvbmF0aW5pbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgdXNlciBhbmQgcGFzc3dvcmQgZm9yIGFsbG9jYXRpbmcgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICB0aGF0IGNyZWF0ZWQgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgIGlzIG5vdCB0aGUgc2FtZSBhcyByZXR1cm5lZCBieSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIG9iamVjdCBwYXNzZWQKICAgICAgKi8KLSAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24oUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uLCBqYXZhLnNxbC5Db25uZWN0aW9uIHNxbENvbm4sIAorICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbihQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4sIGphdmEuc3FsLkNvbm5lY3Rpb24gc3FsQ29ubiwKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3N3ZENyZWQsIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKHBvb2xlZENvbm4gPT0gbnVsbCAmJiBzcWxDb25uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ29ubmVjdGlvbiBvYmplY3QgY2Fubm90IGJlIG51bGwiKTsKICAgICAgICAgfQogCi0JaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7Ci0JICAgIGFjdHVhbENvbm5lY3Rpb24gPSBzcWxDb25uOwotCX0KKyAgICBpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKKyAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IHNxbENvbm47CisgICAgfQogCiAgICAgICAgIHBjID0gcG9vbGVkQ29ubjsKICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBuZXcgSGFzaHRhYmxlKCk7CiAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBwYXNzd2RDcmVkOwogICAgICAgICB0aGlzLm1jZiA9IG1jZjsKLSAgICAgICAgaWYocGFzc3dkQ3JlZGVudGlhbCAhPSBudWxsICYmICAKKyAgICAgICAgaWYocGFzc3dkQ3JlZGVudGlhbCAhPSBudWxsICYmCiAgICAgICAgICAgICB0aGlzLm1jZi5lcXVhbHMocGFzc3dkQ3JlZGVudGlhbC5nZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKSkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB0aGF0IGhhcyBjcmVhdGVkIHRoaXMgIiArIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHRoYXQgaGFzIGNyZWF0ZWQgdGhpcyAiICsKICAgICAgICAgICAgICAgICAiTWFuYWdlZENvbm5lY3Rpb24gaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgcmV0dXJuZWQgYnkiICsKICAgICAgICAgICAgICAgICAgICAgIiB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIGZvciB0aGlzIE1hbmFnZWRDb25uZWN0aW9uIik7CiAgICAgICAgIH0KICAgICAgICAgbG9nV3JpdGVyID0gbWNmLmdldExvZ1dyaXRlcigpOwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLQljZSA9IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fQ0xPU0VEKTsKKyAgICBjZSA9IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fQ0xPU0VEKTsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBBZGRzIGEgY29ubmVjdGlvbiBldmVudCBsaXN0ZW5lciB0byB0aGUgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGlzdGVuZXIJPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxpc3RlbmVyICAgIDxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqIEBzZWUgPGNvZGU+cmVtb3ZlQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYWRkQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIoQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQl0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7CisgICAgdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBjaGFuZ2UgdGhlIGFzc29jaWF0aW9uIG9mIGFuIGFwcGxpY2F0aW9uLWxldmVsIAorICAgICAqIFVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBjaGFuZ2UgdGhlIGFzc29jaWF0aW9uIG9mIGFuIGFwcGxpY2F0aW9uLWxldmVsCiAgICAgICogY29ubmVjdGlvbiBoYW5kbGUgd2l0aCBhIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQljb25uZWN0aW9uCTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aAotICAgICAqCQkJCXRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlCi0gICAgICoJCQkJCXZhbGlkIG9yIHRoZSBjb25uZWN0aW9uIGhhbmRsZSBwYXNzZWQgaXMgbnVsbAorICAgICAqIEBwYXJhbSAgICBjb25uZWN0aW9uICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aAorICAgICAqICAgICAgICAgICAgICAgIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlCisgICAgICogICAgICAgICAgICAgICAgICAgIHZhbGlkIG9yIHRoZSBjb25uZWN0aW9uIGhhbmRsZSBwYXNzZWQgaXMgbnVsbAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGFzc29jaWF0ZUNvbm5lY3Rpb24oT2JqZWN0IGNvbm5lY3Rpb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xNTIsMTEgKzE1MiwxMSBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDb25uZWN0aW9uIGhhbmRsZSBjYW5ub3QgYmUgbnVsbCIpOwogICAgICAgICB9CiAgICAgICAgIENvbm5lY3Rpb25Ib2xkZXIgY2ggPSAoQ29ubmVjdGlvbkhvbGRlcikgY29ubmVjdGlvbjsKLSAgICAgICAgCisKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jID0gKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiljaC5nZXRNYW5hZ2VkQ29ubmVjdGlvbigpOwotCW1jLmFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotCWlzQ2xlYW4gPSBmYWxzZTsKLSAgICAgICAgCisgICAgbWMuYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CisgICAgaXNDbGVhbiA9IGZhbHNlOworCiAgICAgICAgIGNoLmFzc29jaWF0ZUNvbm5lY3Rpb24oYWN0dWFsQ29ubmVjdGlvbiwgdGhpcyk7CiAgICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgZXhwZWN0YXRpb24gZnJvbSB0aGUgYWJvdmUgbWV0aG9kIGlzIHRoYXQgdGhlIGNvbm5lY3Rpb24gaG9sZGVyCkBAIC0xNjUsMzQgKzE2NSwzNCBAQAogICAgICAgICAgKiB0byB0aGUgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2Ugd2l0aCB0aGlzIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLgogICAgICAgICAgKiBBbnkgcHJldmlvdXMgc3RhdGVtZW50cyBhbmQgcmVzdWx0IHNldHMgYWxzbyBuZWVkIHRvIGJlIHJlbW92ZWQuCiAgICAgICAgICAqLwotICAgICAgICAgCisKICAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgIT0gbnVsbCkgewogICAgICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZS5zZXRBY3RpdmUoZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNoLnNldEFjdGl2ZSh0cnVlKTsKLSAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNoOyAKKyAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNoOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEFwcGxpY2F0aW9uIHNlcnZlciBjYWxscyB0aGlzIG1ldGhvZCB0byBmb3JjZSBhbnkgY2xlYW51cCBvbiB0aGUgCisgICAgICogQXBwbGljYXRpb24gc2VydmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIGZvcmNlIGFueSBjbGVhbnVwIG9uIHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4gVGhpcyBtZXRob2QgY2FsbHMgdGhlIGludmFsaWRhdGUKICAgICAgKiBtZXRob2Qgb24gYWxsIENvbm5lY3Rpb25IYW5kbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUgdmFsaWQKKyAgICAgKgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZSB2YWxpZAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNsZWFudXAoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBjbGVhbnVwIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiBtYXkgbmVlZCB0byBzZXQgdGhlIGF1dG9jb21taXQgdG8gdHJ1ZSBmb3IgdGhlIG5vbi1wb29sZWQgY2FzZS4KICAgICAgICAgICovCiAgICAgICAgIC8vR0pDSU5UCi0JLy9pZiAoYWN0dWFsQ29ubmVjdGlvbiAhPSBudWxsKSB7Ci0JaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7CisgICAgLy9pZiAoYWN0dWFsQ29ubmVjdGlvbiAhPSBudWxsKSB7CisgICAgaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkID0gYWN0dWFsQ29ubmVjdGlvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CkBAIC0yMDEsMTcgKzIwMSwxNyBAQAogICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaXNDbGVhbiA9IHRydWU7Ci0gICAgICAgIAorCiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYWxsIHRoZSBjb25uZWN0aW9uIGhhbmRsZXMgZnJvbSB0aGUgdGFibGUKICAgICAgKiBvZiBjb25uZWN0aW9uIGhhbmRsZXMgYW5kIGludmFsaWRhdGVzIGFsbCBvZiB0aGVtIHNvIHRoYXQgYW55CiAgICAgICogb3BlcmF0aW9uIG9uIHRob3NlIGNvbm5lY3Rpb24gaGFuZGxlcyB0aHJvd3MgYW4gZXhjZXB0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhIHByb2JsZW0gaW4gcmV0cmlldmluZwotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJdGhlIGNvbm5lY3Rpb24gaGFuZGxlcworICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYSBwcm9ibGVtIGluIHJldHJpZXZpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25uZWN0aW9uIGhhbmRsZXMKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgaW52YWxpZGF0ZUFsbENvbm5lY3Rpb25IYW5kbGVzKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgU2V0IGhhbmRsZXMgPSBjb25uZWN0aW9uSGFuZGxlcy5rZXlTZXQoKTsKQEAgLTIyNiwyMiArMjI2LDIyIEBACiAgICAgICAgIH0KICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMuY2xlYXIoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBEZXN0cm95cyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiB0byB0aGUgdW5kZXJseWluZyByZXNvdXJjZSBtYW5hZ2VyLgotICAgICAqIAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2xvc2luZyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjbG9zaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBkZXN0cm95Iik7CiAgICAgICAgIH0KLQkvL0dKQ0lOVAotCWlmKGlzRGVzdHJveWVkID09IHRydWUpIHsKLQkgICAgcmV0dXJuOwkKLQl9CisgICAgLy9HSkNJTlQKKyAgICBpZihpc0Rlc3Ryb3llZCA9PSB0cnVlKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLQlhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKKyAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmKGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OIHx8IGNvbm5lY3Rpb25UeXBlID09IElTUE9PTEVEQ09OTkVDVElPTikgewogICAgICAgICAgICAgICAgIHBjLmNsb3NlKCk7CkBAIC0yNTUsMjggKzI1NSwyOCBAQAogICAgICAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlOwogICAgICAgICAgICAgcGFzc3dkQ3JlZGVudGlhbCA9IG51bGw7CiAgICAgICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG51bGw7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uIGhhcyBvY2N1cmVkIGR1cmluZyBkZXN0cm95OiAiIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgZm9sbG93aW5nIGV4Y2VwdGlvbiBoYXMgb2NjdXJlZCBkdXJpbmcgZGVzdHJveTogIgogICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgcGFzc3dkQ3JlZGVudGlhbCA9IG51bGw7CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbm5lY3Rpb24gaGFuZGxlIGZvciB0aGUgdW5kZXJseWluZyBwaHlzaWNhbCAKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbm5lY3Rpb24gaGFuZGxlIGZvciB0aGUgdW5kZXJseWluZyBwaHlzaWNhbAogICAgICAqIGNvbm5lY3Rpb24gcmVwcmVzZW50ZWQgYnkgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+IHBhcmFtZXRlciBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uCi0gICAgICogQHBhcmFtCWN4UmVxSW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGNhcnJpZXMgdGhlIHVzZXIgCi0gICAgICogICAgICAgCSAgICAgICAgIAlhbmQgcGFzc3dvcmQgcmVxdWlyZWQgZm9yIGdldHRpbmcgdGhpcyBjb25uZWN0aW9uLgotICAgICAqIEByZXR1cm4JQ29ubmVjdGlvbgl0aGUgY29ubmVjdGlvbiBoYW5kbGUgPGNvZGU+T2JqZWN0PC9jb2RlPgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlwaHlzaWNhbCBjb25uZWN0aW9uIGZyb20gdGhlIHBvb2xlZCBjb25uZWN0aW9uIAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJcGFzc3dvcmQgY3JlZGVudGlhbHMgb3IgcmVhdXRoZW50aWNhdGlvbiBpcyByZXF1ZXN0ZWQKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgbmVlZGVkIGZvciBhdXRoZW50aWNhdGlvbgorICAgICAqIEBwYXJhbSAgICBjeFJlcUluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBjYXJyaWVzIHRoZSB1c2VyCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBhbmQgcGFzc3dvcmQgcmVxdWlyZWQgZm9yIGdldHRpbmcgdGhpcyBjb25uZWN0aW9uLgorICAgICAqIEByZXR1cm4gICAgQ29ubmVjdGlvbiAgICB0aGUgY29ubmVjdGlvbiBoYW5kbGUgPGNvZGU+T2JqZWN0PC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24gZnJvbSB0aGUgcG9vbGVkIGNvbm5lY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkIGNyZWRlbnRpYWxzIG9yIHJlYXV0aGVudGljYXRpb24gaXMgcmVxdWVzdGVkCiAgICAgICovCi0gICAgcHVibGljIE9iamVjdCBnZXRDb25uZWN0aW9uKFN1YmplY3Qgc3ViLCBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXFJbmZvKSAKKyAgICBwdWJsaWMgT2JqZWN0IGdldENvbm5lY3Rpb24oU3ViamVjdCBzdWIsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcUluZm8pCiAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0Q29ubmVjdGlvbiIpOwpAQCAtMjg0LDE0ICsyODQsMTQgQEAKICAgICAgICAgY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbyA9IChjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvKSBjeFJlcUluZm87CiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYXNzd2RDcmVkID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcy5tY2YsIHN1YiwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZihTZWN1cml0eVV0aWxzLmlzUGFzc3dvcmRDcmVkZW50aWFsRXF1YWwodGhpcy5wYXNzd2RDcmVkZW50aWFsLCBwYXNzd2RDcmVkKSA9PSBmYWxzZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlNlY3VyaXR5RXhjZXB0aW9uKCJSZS1hdXRoZW50aWNhdGlvbiBub3Qgc3VwcG9ydGVkIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy9HSkNJTlQKICAgICAgICAgZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgZm9sbG93aW5nIGNvZGUgaW4gdGhlIGlmIHN0YXRlbWVudCBmaXJzdCBjaGVja3MgaWYgdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbgogICAgICAgICAgKiBpcyBjbGVhbiBvciBub3QuIElmIGl0IGlzLCBpdCByZXNldHMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCB0byB3aGF0CkBAIC0zMDEsMjggKzMwMSwyOCBAQAogICAgICAgICBpZihpc0NsZWFuKSB7CiAgICAgICAgICAgICAoKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpbWNmKS5yZXNldElzb2xhdGlvbih0aGlzLCBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgIAorCisKICAgICAgICAgQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0ID0gbmV3IENvbm5lY3Rpb25Ib2xkZXIoYWN0dWFsQ29ubmVjdGlvbiwgdGhpcyk7Ci0JaXNDbGVhbj1mYWxzZTsKLSAgICAgICAgCisgICAgaXNDbGVhbj1mYWxzZTsKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUuc2V0QWN0aXZlKGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBjb25uSG9sZGVyT2JqZWN0LnNldEFjdGl2ZSh0cnVlKTsKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNvbm5Ib2xkZXJPYmplY3Q7Ci0gCisKICAgICAgICAgcmV0dXJuIGNvbm5Ib2xkZXJPYmplY3Q7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhbiA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4gVGhlIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGludGVyZmFjZQotICAgICAqIGlzIHVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBtYW5hZ2UgbG9jYWwgdHJhbnNhY3Rpb25zIGZvciBhIFJNIGluc3RhbmNlLiAKKyAgICAgKiBpcyB1c2VkIGJ5IHRoZSBjb250YWluZXIgdG8gbWFuYWdlIGxvY2FsIHRyYW5zYWN0aW9ucyBmb3IgYSBSTSBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5Mb2NhbFRyYW5zYWN0aW9uIGdldExvY2FsVHJhbnNhY3Rpb24oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMzMxLDEzICszMzEsMTMgQEAKICAgICAgICAgY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIHJldHVybiBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkxvY2FsVHJhbnNhY3Rpb24odGhpcyk7CiAgICAgfQotICAgICAKKwogICAgIC8qKgotICAgICAqIEdldHMgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLiAKKyAgICAgKiBHZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIAotICAgICAqCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICogQHNlZSA8Y29kZT5zZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC0zNDUsNDYgKzM0NSw0NiBAQAogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRMb2dXcml0ZXIiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGxvZ1dyaXRlcjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtZXRhZGF0YSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb25uZWN0aW9uJ3MgdW5kZXJseWluZyBFSVMgCi0gICAgICogcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZS4gCisgICAgICogR2V0cyB0aGUgbWV0YWRhdGEgaW5mb3JtYXRpb24gZm9yIHRoaXMgY29ubmVjdGlvbidzIHVuZGVybHlpbmcgRUlTCisgICAgICogcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhIGdldE1ldGFEYXRhKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0TWV0YURhdGEiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSh0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIGFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLiAKKyAgICAgKiBSZXR1cm5zIGFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCi0gICAgICoJCQkJCXRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqCQkJCQk8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJTm90U3VwcG9ydGVkRXhjZXB0aW9uCWlmIHVuZGVybHlpbmcgZGF0YXNvdXJjZSBpcyBub3QgYW4KLSAgICAgKgkJCQkJPGNvZGU+WEFEYXRhU291cmNlPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgorICAgICAqICAgICAgICAgICAgICAgICAgICB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgTm90U3VwcG9ydGVkRXhjZXB0aW9uICAgIGlmIHVuZGVybHlpbmcgZGF0YXNvdXJjZSBpcyBub3QgYW4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+WEFEYXRhU291cmNlPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlIGdldFhBUmVzb3VyY2UoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRYQVJlc291cmNlIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmKHhhciA9PSBudWxsKSB7Ci0JCSAgICAvKioKKyAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICAgICAgICAgKiBVc2luZyB0aGUgd3JhcHBlciBYQVJlc291cmNlLgogICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgeGFyID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5YQVJlc291cmNlSW1wbCgoKFhBQ29ubmVjdGlvbilwYykuZ2V0WEFSZXNvdXJjZSgpLCB0aGlzKTsKQEAgLTM5NywxNiArMzk3LDE2IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJDYW5ub3QgZ2V0IGFuIFhBUmVzb3VyY2UgZnJvbSBhIG5vbiBYQSBjb25uZWN0aW9uIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZW1vdmVzIGFuIGFscmVhZHkgcmVnaXN0ZXJlZCBjb25uZWN0aW9uIGV2ZW50IGxpc3RlbmVyIGZyb20gdGhlCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWxpc3RlbmVyCTxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPiB0byBiZSByZW1vdmVkCisgICAgICogQHBhcmFtICAgIGxpc3RlbmVyICAgIDxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPiB0byBiZSByZW1vdmVkCiAgICAgICogQHNlZSA8Y29kZT5hZGRDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByZW1vdmVDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcihDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBsaXN0ZW5lcikgewotCWxpc3RlbmVyID0gbnVsbDsKKyAgICBsaXN0ZW5lciA9IG51bGw7CiAgICAgfQogCiAgICAgLyoqCkBAIC00MTUsNyArNDE1LDcgQEAKICAgICAgKiBMb2NhbFRyYW5zYWN0aW9uIG9iamVjdCB3aGVuIGl0cyBiZWdpbigpIG1ldGhvZCBpcyBjYWxsZWQuCiAgICAgICovCiAgICAgdm9pZCB0cmFuc2FjdGlvblN0YXJ0ZWQoKSB7Ci0JdHJhbnNhY3Rpb25JblByb2dyZXNzID0gdHJ1ZTsJCisgICAgdHJhbnNhY3Rpb25JblByb2dyZXNzID0gdHJ1ZTsKICAgICB9CiAKICAgICAvKioKQEAgLTQyNCwxNiArNDI0LDE2IEBACiAgICAgICogTG9jYWxUcmFuc2FjdGlvbiBvYmplY3Qgd2hlbiBpdHMgZW5kKCkgbWV0aG9kIGlzIGNhbGxlZC4KICAgICAgKi8KICAgICB2b2lkIHRyYW5zYWN0aW9uQ29tcGxldGVkKCkgewotCXRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOwotCWlmKGNvbm5lY3Rpb25UeXBlID09IElTUE9PTEVEQ09OTkVDVElPTiB8fCBjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTikgeworICAgIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgIGlmKGNvbm5lY3Rpb25UeXBlID09IElTUE9PTEVEQ09OTkVDVElPTiB8fCBjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTikgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkID0gYWN0dWFsQ29ubmVjdGlvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpOwogICAgICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgLy9jaGVjayB3aGF0IHRvIGRvIGluIHRoaXMgY2FzZSEhCi0JCV9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLm5vdGdvdF90eF9pc29sdmwiKTsKKyAgICAgICAgICAgIC8vY2hlY2sgd2hhdCB0byBkbyBpbiB0aGlzIGNhc2UhIQorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5ub3Rnb3RfdHhfaXNvbHZsIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLQkgICAgdHJ5IHsKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGFjdHVhbENvbm5lY3Rpb24uY2xvc2UoKTsKICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKQEAgLTQ0MSw3ICs0NDEsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLQkgICAgICAgIAorCiAgICAgICAgIGlzQ2xlYW4gPSB0cnVlOwogCiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwpAQCAtNDUzLDI4ICs0NTMsMjggQEAKICAgICAgKiBvciBub3QuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSB7Ci0JcmV0dXJuIHRyYW5zYWN0aW9uSW5Qcm9ncmVzczsKKyAgICByZXR1cm4gdHJhbnNhY3Rpb25JblByb2dyZXNzOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCW91dAk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHBhcmFtICAgIG91dCAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICogQHNlZSA8Y29kZT5nZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKFByaW50V3JpdGVyIG91dCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIGxvZ1dyaXRlciA9IG91dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mIHRoZSBjb25uZWN0aW9uIGJlaW5nIGhlbGQgCisgICAgICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiB0aGUgY29ubmVjdGlvbiBiZWluZyBoZWxkCiAgICAgICogaW4gdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCXBvb2xlZENvbm4JPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAcmV0dXJuCWNvbm5lY3Rpb24gdHlwZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHBvb2xlZENvbm4gICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdHlwZQogICAgICAqLwogICAgIHByaXZhdGUgaW50IGdldENvbm5lY3Rpb25UeXBlKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubikgewogICAgICAgICBpZihwb29sZWRDb25uID09IG51bGwpIHsKQEAgLTQ4NSwyMiArNDg1LDIyIEBACiAgICAgICAgICAgICByZXR1cm4gSVNQT09MRURDT05ORUNUSU9OOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IAorICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdAogICAgICAqIGNyZWF0ZWQgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCBjcmVhdGVkIHRoaXMKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgY3JlYXRlZCB0aGlzCisgICAgICogICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQogICAgICAqLwogICAgIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBnZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKSB7CiAgICAgICAgIHJldHVybiAoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSltY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgYWN0dWFsIHNxbCBjb25uZWN0aW9uIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4gCisgICAgICogUmV0dXJucyB0aGUgYWN0dWFsIHNxbCBjb25uZWN0aW9uIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JdGhlIHBoeXNpY2FsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICB0aGUgcGh5c2ljYWwgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4KICAgICAgKi8KICAgICAvL0dKQ0lOVAogICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZ2V0QWN0dWFsQ29ubmVjdGlvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC01MDksOCArNTA5LDggQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYoYWN0dWFsQ29ubmVjdGlvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBwYy5nZXRDb25uZWN0aW9uKCk7Ci0JCX0KLQkJCisgICAgICAgIH0KKwogICAgICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewogICAgICAgICAgICAgICAgIHNxbGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKQEAgLTUxOCw4MSArNTE4LDgxIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGFjdHVhbENvbm5lY3Rpb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIAotICAgICAqCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCiAgICAgICovCiAgICAgUGFzc3dvcmRDcmVkZW50aWFsIGdldFBhc3N3b3JkQ3JlZGVudGlhbCgpIHsKICAgICAgICAgcmV0dXJuIHBhc3N3ZENyZWRlbnRpYWw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdCBhbmQgdGhyb3dzIGFuCiAgICAgICogZXhjZXB0aW9uIGlmIGl0IGlzIG5vdCB2YWxpZC4gQSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaXMgbm90IHZhbGlkIGlmCiAgICAgICogZGVzdHJveSBoYXMgbm90IGJlZW4gY2FsbGVkIGFuZCBubyBwaHlzaWNhbCBjb25uZWN0aW9uIGVycm9yIGhhcwogICAgICAqIG9jY3VycmVkIHJlbmRlcmluZyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiB1bnVzYWJsZS4KICAgICAgKgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgPGNvZGU+ZGVzdHJveTwvY29kZT4gaGFzIGJlZW4gY2FsbGVkIG9uIHRoaXMgCi0gICAgICoJCQkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSBvciBpZiBhIAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBvY2N1cnJlZCByZW5kZXJpbmcgaXQgdW51c2FibGUKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIDxjb2RlPmRlc3Ryb3k8L2NvZGU+IGhhcyBiZWVuIGNhbGxlZCBvbiB0aGlzCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSBvciBpZiBhCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGVycm9yIG9jY3VycmVkIHJlbmRlcmluZyBpdCB1bnVzYWJsZQogICAgICAqLwogICAgIC8vR0pDSU5UCiAgICAgdm9pZCBjaGVja0lmVmFsaWQoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihpc0Rlc3Ryb3llZCA9PSB0cnVlIHx8IGlzVXNhYmxlID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoaXMgTWFuYWdlZENvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzIHRoZSBwaHlzaWNhbCAiICsgCisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoaXMgTWFuYWdlZENvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzIHRoZSBwaHlzaWNhbCAiICsKICAgICAgICAgICAgICAgICAiY29ubmVjdGlvbiBpcyBub3QgdXNhYmxlLiIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB3aGVuIGl0cyBjbG9zZSBtZXRob2QgaXMKICAgICAgKiBjYWxsZWQuIFRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlICBpbnZhbGlkYXRlcyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKICAgICAgKiBhbmQgc2VuZHMgYSBDT05ORUNUSU9OX0NMT1NFRCBldmVudCB0byBhbGwgdGhlIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLgogICAgICAqCi0gICAgICogQHBhcmFtCWUJRXhjZXB0aW9uIHRoYXQgbWF5IGhhdmUgb2NjdXJlZCB3aGlsZSBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGhhbmRsZQotICAgICAqIEBwYXJhbQljb25uSG9sZGVyT2JqZWN0CTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgaGFzIGJlZW4gY2xvc2VkCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JaW4gY2FzZSBjbG9zaW5nIHRoZSBzcWwgY29ubmVjdGlvbiBnb3Qgb3V0IG9mCi0gICAgICogICAgICAgICAJICAgICAgICAgICAgCTxjb2RlPmdldENvbm5lY3Rpb248L2NvZGU+IG9uIHRoZSB1bmRlcmx5aW5nIAotICAgICAqCQkJCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IHRocm93cyBhbiBleGNlcHRpb24KKyAgICAgKiBAcGFyYW0gICAgZSAgICBFeGNlcHRpb24gdGhhdCBtYXkgaGF2ZSBvY2N1cmVkIHdoaWxlIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCisgICAgICogQHBhcmFtICAgIGNvbm5Ib2xkZXJPYmplY3QgICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBoYXMgYmVlbiBjbG9zZWQKKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBpbiBjYXNlIGNsb3NpbmcgdGhlIHNxbCBjb25uZWN0aW9uIGdvdCBvdXQgb2YKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+Z2V0Q29ubmVjdGlvbjwvY29kZT4gb24gdGhlIHVuZGVybHlpbmcKKyAgICAgKiAgICAgICAgICAgICAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiB0aHJvd3MgYW4gZXhjZXB0aW9uCiAgICAgICovCiAgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKEV4Y2VwdGlvbiBlLCBDb25uZWN0aW9uSG9sZGVyIGNvbm5Ib2xkZXJPYmplY3QpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBjb25uSG9sZGVyT2JqZWN0LmludmFsaWRhdGUoKTsKLSAgICAgICAgCisKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIGNlLnNldENvbm5lY3Rpb25IYW5kbGUoY29ubkhvbGRlck9iamVjdCk7CiAgICAgICAgIGxpc3RlbmVyLmNvbm5lY3Rpb25DbG9zZWQoY2UpOwotCQorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB3aGVuIGl0IGRldGVjdHMgYSBjb25uZWNpb24KICAgICAgKiByZWxhdGVkIGVycm9yLgogICAgICAqCi0gICAgICogQHBhcmFtCWUJRXhjZXB0aW9uIHRoYXQgaGFzIG9jY3VycmVkIGR1cmluZyBhbiBvcGVyYXRpb24gb24gdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KLSAgICAgKiBAcGFyYW0JY29ubkhvbGRlck9iamVjdAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGRldGVjdGVkIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQljb25uZWN0aW9uIGVycm9yCisgICAgICogQHBhcmFtICAgIGUgICAgRXhjZXB0aW9uIHRoYXQgaGFzIG9jY3VycmVkIGR1cmluZyBhbiBvcGVyYXRpb24gb24gdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gICAgY29ubkhvbGRlck9iamVjdCAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGRldGVjdGVkIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIGVycm9yCiAgICAgICovCi0gICAgdm9pZCBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChFeGNlcHRpb24gZSwgCisgICAgdm9pZCBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChFeGNlcHRpb24gZSwKICAgICAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyIGNvbm5Ib2xkZXJPYmplY3QpIHsKLQkgICAgCisKICAgICAgICAgIENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGNlbCA9IHRoaXMubGlzdGVuZXI7CiAgICAgICAgICBDb25uZWN0aW9uRXZlbnQgY2UgPSBudWxsOwogICAgICAgICAgY2UgPSBlID09IG51bGwgPyBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0VSUk9SX09DQ1VSUkVEKQogICAgICAgICAgICAgICAgICAgICA6IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fRVJST1JfT0NDVVJSRUQsIGUpOwogICAgICAgICAgaWYgKGNvbm5Ib2xkZXJPYmplY3QgIT0gbnVsbCkgewogICAgICAgICAgICAgIGNlLnNldENvbm5lY3Rpb25IYW5kbGUoY29ubkhvbGRlck9iamVjdCk7Ci0gICAgICAgICB9ICAgIAorICAgICAgICAgfQogCiAgICAgICAgICBjZWwuY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoY2UpOwogICAgICAgICAgaXNVc2FibGUgPSBmYWxzZTsKICAgICB9Ci0gICAgCi0gICAgCi0gICAgCisKKworCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hlbiBpdHMgc3RhcnQgbWV0aG9kCiAgICAgICogaGFzIGJlZW4gaW52b2tlZC4KQEAgLTYwNiw3ICs2MDYsNyBAQAogICAgICAgICAgICAgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoZSwgbnVsbCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aGVuIGl0cyBlbmQgbWV0aG9kCiAgICAgICogaGFzIGJlZW4gaW52b2tlZC4KQEAgLTYyMCw3ICs2MjAsNyBAQAogICAgICAgICAgICAgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoZSwgbnVsbCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgYSBDb25uZWN0aW9uIEhhbmRsZSB0byBjaGVjayBpZiBpdCBpcwogICAgICAqIHRoZSBhY3RpdmUgQ29ubmVjdGlvbiBIYW5kbGUuIElmIGl0IGlzIG5vdCB0aGUgYWN0aXZlIENvbm5lY3Rpb24KQEAgLTYyOSwyNCArNjI5LDI0IEBACiAgICAgICogQ29ubmVjdGlvbiBIYW5kbGUgb2JqZWN0IHRvIHRoaXMgb2JqZWN0IGlmIHRoZSBhY3RpdmUgQ29ubmVjdGlvbgogICAgICAqIEhhbmRsZSBpcyBudWxsLgogICAgICAqCi0gICAgICogQHBhcmFtCWNoCTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgcmVxdWVzdHMgdGhpcwotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHdoZXRoZXIKLSAgICAgKgkJCWl0IGNhbiBiZSBhY3RpdmUgb3Igbm90Ci0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JaW4gY2FzZSB0aGUgcGh5c2ljYWwgaXMgbm90IHZhbGlkIG9yCi0gICAgICoJCQkJdGhlcmUgaXMgYWxyZWFkeSBhbiBhY3RpdmUgY29ubmVjdGlvbiBoYW5kbGUKKyAgICAgKiBAcGFyYW0gICAgY2ggICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCByZXF1ZXN0cyB0aGlzCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugd2hldGhlcgorICAgICAqICAgICAgICAgICAgaXQgY2FuIGJlIGFjdGl2ZSBvciBub3QKKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBpbiBjYXNlIHRoZSBwaHlzaWNhbCBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICB0aGVyZSBpcyBhbHJlYWR5IGFuIGFjdGl2ZSBjb25uZWN0aW9uIGhhbmRsZQogICAgICAqLwotICAgICAKKwogICAgIHZvaWQgY2hlY2tJZkFjdGl2ZShDb25uZWN0aW9uSG9sZGVyIGNoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSB8fCBpc1VzYWJsZSA9PSBmYWxzZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbigiVGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHVzYWJsZSIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPT0gbnVsbCkgewogICAgICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNoOwogICAgICAgICAgICAgY2guc2V0QWN0aXZlKHRydWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgIT0gY2gpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGhhbmRsZSBjYW5ub3QgYmUgdXNlZCBhcyBhbm90aGVyIGNvbm5lY3Rpb24gaXMgY3VycmVudGx5IGFjdGl2ZSIpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhCmluZGV4IDIwZjAzYWEuLmY2NTBkNDEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiAvKioKICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzAzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgewogCkBAIC00MSw4MSArNDEsODEgQEAKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPglpZiBnZXR0aW5nIHRoZSBEYXRhYmFzZU1ldGFEYXRhIG9iamVjdCBmYWlscworICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiAgICBpZiBnZXR0aW5nIHRoZSBEYXRhYmFzZU1ldGFEYXRhIG9iamVjdCBmYWlscwogICAgICAqLwogICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhKE1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgICAgICAgICAgZG1kID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpLmdldE1ldGFEYXRhKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHByb2R1Y3QgbmFtZSBvZiB0aGUgdW5kZXJseWluZyBFSVMgaW5zdGFuY2UgY29ubmVjdGVkCiAgICAgICogdGhyb3VnaCB0aGUgTWFuYWdlZENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVByb2R1Y3QgbmFtZSBvZiB0aGUgRUlTIGluc3RhbmNlCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIFByb2R1Y3QgbmFtZSBvZiB0aGUgRUlTIGluc3RhbmNlCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEVJU1Byb2R1Y3ROYW1lKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0RGF0YWJhc2VQcm9kdWN0TmFtZSgpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kbmFtZSIsIHNxbGUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZG5hbWUiLCBzcWxlKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgdW5kZXJseWluZyBFSVMgaW5zdGFuY2UgY29ubmVjdGVkCiAgICAgICogdGhyb3VnaCB0aGUgTWFuYWdlZENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgRUlTIGluc3RhbmNlCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIFByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgRUlTIGluc3RhbmNlCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEVJU1Byb2R1Y3RWZXJzaW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0RGF0YWJhc2VQcm9kdWN0VmVyc2lvbigpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kdmVycyIsIHNxbGUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZHZlcnMiLCBzcWxlKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSwgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBtYXhpbXVtIGxpbWl0IG9uIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucwogICAgICAqIHRoYXQgYW4gRUlTIGluc3RhbmNlIGNhbiBzdXBwb3J0IGFjcm9zcyBjbGllbnQgcHJvY2Vzc2VzLgogICAgICAqCi0gICAgICogQHJldHVybglNYXhpbXVtIGxpbWl0IGZvciBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgTWF4aW11bSBsaW1pdCBmb3IgbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldE1heENvbm5lY3Rpb25zKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0TWF4Q29ubmVjdGlvbnMoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfbWF4Y29ubiIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfbWF4Y29ubiIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgbmFtZSBvZiB0aGUgdXNlciBhc3NvY2lhdGVkIHdpdGggdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLiBUaGUgbmFtZQogICAgICAqIGNvcnJlc3BvbmRzIHRvIHRoZSByZXNvdXJjZSBwcmluY2lwYWwgdW5kZXIgd2hvc2Ugd2hvc2Ugc2VjdXJpdHkgY29udGV4dCwgYSBjb25uZWN0aW9uCiAgICAgICogdG8gdGhlIEVJUyBpbnN0YW5jZSBoYXMgYmVlbiBlc3RhYmxpc2hlZC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbmFtZSBvZiB0aGUgdXNlcgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBuYW1lIG9mIHRoZSB1c2VyCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXJOYW1lKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgamFrYXJ0YS5yZXNvdXJjZS5zcGkuc2VjdXJpdHkuUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gbWMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCk7CiAgICAgICAgIGlmKHBjICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBwYy5nZXRVc2VyTmFtZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBtYy5nZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKS5nZXRVc2VyKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IDQyMjY1OGQuLjRjMjYwMDkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTMyLDM2ICszMiwzNiBAQAogLyoqCiAgKiBEYXRhIFNvdXJjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzAKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMwCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiAKIHB1YmxpYyBjbGFzcyBYQU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBleHRlbmRzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB7Ci0gICAKKwogICAgIHByaXZhdGUgdHJhbnNpZW50IGphdmF4LnNxbC5YQURhdGFTb3VyY2UgZGF0YVNvdXJjZU9iajsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CiAgICAgfQogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIEVJUyByZXNvdXJjZQogICAgICAqIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCi0gICAgICogICAgICAgCSAgICAgICAgICAgICAJYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+Ci0gICAgICogICAgICAgCSAgICAgICAgICAgICAJb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQotICAgICAqICAgICAgIAkJCQljcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0Ci0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdCAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwKICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC02OSwyMCArNjksMjAgQEAKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGMgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLCBzdWJqZWN0LCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoZGF0YVNvdXJjZU9iaiA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZihkc09iakJ1aWxkZXIgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGRzT2JqQnVpbGRlciA9IG5ldyBEYXRhU291cmNlT2JqZWN0QnVpbGRlcihzcGVjKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZU9iaiA9IChqYXZheC5zcWwuWEFEYXRhU291cmNlKSBkc09iakJ1aWxkZXIuY29uc3RydWN0RGF0YVNvdXJjZU9iamVjdCgpOwogICAgICAgICAgICAgfSBjYXRjaChDbGFzc0Nhc3RFeGNlcHRpb24gY2NlKSB7Ci0JICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jY2UiLCBjY2UpOworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY2NlIiwgY2NlKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5SZXNvdXJjZUV4Y2VwdGlvbihjY2UuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBqYXZheC5zcWwuWEFDb25uZWN0aW9uIHhhQ29ubiA9IG51bGw7CiAKICAgICAgICAgdHJ5IHsKQEAgLTEwNCw3ICsxMDQsNyBAQAogICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuRklORSwgImpkYmMuZXhjX2NyZWF0ZV94YV9jb25uIiwgc3FsZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uKCJjYW5ub3QgYWxsb2NhdGUgY29ubmVjdGlvbiIsIHNxbGUpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24oeGFDb25uLCBudWxsLCBwYywgdGhpcyk7CiAKICAgICAgICAgbWMuaW5pdGlhbGl6ZUNvbm5lY3Rpb25UeXBlKE1hbmFnZWRDb25uZWN0aW9uLklTWEFDT05ORUNUSU9OKTsKQEAgLTExMiwxNSArMTEyLDE1IEBACiAvLyAgICAgICAgdmFsaWRhdGVBbmRTZXRJc29sYXRpb24obWMpOwogICAgICAgICByZXR1cm4gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvIAorICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0bwogICAgICAqIGFub3RoZXIgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jb3RoZXIJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCi0gICAgICoJCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIG90aGVyICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCisgICAgICogICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTEzMSw0MDkgKzEzMSw0MDkgQEAKICAgICAgICAgICogaWYgYW5kIG9ubHkgaWYgdGhlaXIgcHJvcGVydGllcyBhcmUgdGhlIHNhbWUuCiAgICAgICAgICAqLwogICAgICAgICBpZihvdGhlciBpbnN0YW5jZW9mIGNvbS5zdW4uamRiY3JhLnNwaS5YQU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSkgewotICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLlhBTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG90aGVyTUNGID0gCisgICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuWEFNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnkgb3RoZXJNQ0YgPQogICAgICAgICAgICAgICAgIChjb20uc3VuLmpkYmNyYS5zcGkuWEFNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpIG90aGVyOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BlYy5lcXVhbHMob3RoZXJNQ0Yuc3BlYyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlcnZlck5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc2VydmVyTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHNlcnZlck5hbWUoU3RyaW5nIHNlcnZlck5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSwgc2VydmVyTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXNlcnZlck5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBzZXJ2ZXJOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0c2VydmVyTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlcnZlck5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc2VydmVyTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFNlcnZlck5hbWUoU3RyaW5nIHNlcnZlck5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSwgc2VydmVyTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXNlcnZlck5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBzZXJ2ZXJOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvcnROdW1iZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcG9ydE51bWJlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHBvcnROdW1iZXIoU3RyaW5nIHBvcnROdW1iZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiwgcG9ydE51bWJlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBvcnROdW1iZXIKLSAgICAgKiBAc2VlCTxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBwb3J0TnVtYmVyCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0cG9ydE51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvcnROdW1iZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcG9ydE51bWJlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFBvcnROdW1iZXIoU3RyaW5nIHBvcnROdW1iZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiwgcG9ydE51bWJlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBvcnROdW1iZXIKLSAgICAgKiBAc2VlCTxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBwb3J0TnVtYmVyCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UG9ydE51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGF0YWJhc2VOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGF0YWJhc2VOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkYXRhYmFzZU5hbWUoU3RyaW5nIGRhdGFiYXNlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUsIGRhdGFiYXNlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGF0YWJhc2VOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkYXRhYmFzZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRhdGFiYXNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkYXRhYmFzZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkYXRhYmFzZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERhdGFiYXNlTmFtZShTdHJpbmcgZGF0YWJhc2VOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSwgZGF0YWJhc2VOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkYXRhYmFzZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRhdGFiYXNlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGF0YWJhc2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRhdGFTb3VyY2VOYW1lKFN0cmluZyBkc24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUsIGRzbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHNuCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRzbgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkYXRhU291cmNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERhdGFTb3VyY2VOYW1lKFN0cmluZyBkc24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUsIGRzbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHNuCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRzbgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREYXRhU291cmNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZXNjCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZXNjICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRlc2NyaXB0aW9uKFN0cmluZyBkZXNjKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OLCBkZXNjKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVzYwotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZXNjCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRlc2NyaXB0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlc2MJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlc2MgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2MpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04sIGRlc2MpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglkZXNjCi0gICAgICogQHNlZQk8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlc2MKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlud1Byb3RvY29sCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbndQcm90b2NvbCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0bmV0d29ya1Byb3RvY29sKFN0cmluZyBud1Byb3RvY29sKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCwgbndQcm90b2NvbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbndQcm90b2NvbAotICAgICAqIEBzZWUJPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbndQcm90b2NvbAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0bmV0d29ya1Byb3RvY29sKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHBhcmFtCW53UHJvdG9jb2wJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBud1Byb3RvY29sICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrUHJvdG9jb2woU3RyaW5nIG53UHJvdG9jb2wpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MLCBud1Byb3RvY29sKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHJldHVybglud1Byb3RvY29sCi0gICAgICogQHNlZQk8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHJldHVybiAgICBud1Byb3RvY29sCisgICAgICogQHNlZSAgICA8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXROZXR3b3JrUHJvdG9jb2woKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlyb2xlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcm9sZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0cm9sZU5hbWUoU3RyaW5nIHJvbGVOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FLCByb2xlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglyb2xlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICByb2xlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRyb2xlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jcm9sZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJvbGVOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJvbGVOYW1lKFN0cmluZyByb2xlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSwgcm9sZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jcm9sZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcm9sZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Um9sZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSk7CiAgICAgfQogCi0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHBhcmFtCWxvZ2luVGltZU91dAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZU91dCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0bG9naW5UaW1lT3V0KFN0cmluZyBsb2dpblRpbWVPdXQpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VULCBsb2dpblRpbWVPdXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWxvZ2luVGltZW91dAotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbG9naW5UaW1lb3V0CisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRsb2dpblRpbWVPdXQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lT3V0CTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lT3V0ICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dpblRpbWVPdXQoU3RyaW5nIGxvZ2luVGltZU91dCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQsIGxvZ2luVGltZU91dCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbG9naW5UaW1lb3V0Ci0gICAgICogQHNlZQk8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHJldHVybiAgICBsb2dpblRpbWVvdXQKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldExvZ2luVGltZU91dCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlbGltCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVsaW0gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRlbGltaXRlcihTdHJpbmcgZGVsaW0pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSLCBkZWxpbSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHJldHVybglkZWxpbQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVsaW0KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRlbGltaXRlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlbGltCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVsaW0gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlbGltaXRlcihTdHJpbmcgZGVsaW0pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSLCBkZWxpbSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHJldHVybglkZWxpbQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVsaW0KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlbGltaXRlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHJpdmVyUHJvcHMJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHJpdmVyUHJvcHMgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkcml2ZXJQcm9wZXJ0aWVzKFN0cmluZyBkcml2ZXJQcm9wcykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTLCBkcml2ZXJQcm9wcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRyaXZlclByb3BzCi0gICAgICogQHNlZQk8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHJpdmVyUHJvcHMKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkcml2ZXJQcm9wZXJ0aWVzKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHJpdmVyUHJvcHMJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHJpdmVyUHJvcHMgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREcml2ZXJQcm9wZXJ0aWVzKFN0cmluZyBkcml2ZXJQcm9wcykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTLCBkcml2ZXJQcm9wcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRyaXZlclByb3BzCi0gICAgICogQHNlZQk8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHJpdmVyUHJvcHMKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREcml2ZXJQcm9wZXJ0aWVzKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7CkBAIC01NDMsMzUgKzU0MywzNSBAQAogICAgICAqIENoZWNrIGlmIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgcGFzc2VkIGZvciB0aGlzIGdldCBjb25uZWN0aW9uCiAgICAgICogcmVxdWVzdCBpcyBlcXVhbCB0byB0aGUgdXNlci9wYXNzd2Qgb2YgdGhpcyBjb25uZWN0aW9uIHBvb2wuCiAgICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoIFBhc3N3b3JkQ3JlZGVudGlhbCBwYywgU3RyaW5nIHVzZXIsIAorICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKCBQYXNzd29yZENyZWRlbnRpYWwgcGMsIFN0cmluZyB1c2VyLAogICAgICAgICBTdHJpbmcgcGFzc3dvcmQpIHsKLSAgICAgICAgCi0JLy9pZiBlcXVhbCBnZXQgZGlyZWN0IGNvbm5lY3Rpb24gZWxzZSAKLQkvL2dldCBjb25uZWN0aW9uIHdpdGggdXNlciBhbmQgcGFzc3dvcmQuCi0JCi0JaWYgKHVzZXIgPT0gbnVsbCAmJiBwYyA9PSBudWxsKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0KLQkKLQlpZiAoIHVzZXIgPT0gbnVsbCAmJiBwYyAhPSBudWxsICkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCX0KIAotCWlmKCBwYyA9PSBudWxsICkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JaWYgKCB1c2VyLmVxdWFscyggcGMuZ2V0VXNlck5hbWUoKSApICkgewotCSAgICBpZiAoIHBhc3N3b3JkID09IG51bGwgJiYgcGMuZ2V0UGFzc3dvcmQoKSA9PSBudWxsICkgewotCSAgICAgICAgcmV0dXJuIHRydWU7Ci0JICAgIH0KLQl9Ci0JCi0JaWYgKCB1c2VyLmVxdWFscyhwYy5nZXRVc2VyTmFtZSgpKSAmJiBwYXNzd29yZC5lcXVhbHMocGMuZ2V0UGFzc3dvcmQoKSkgKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0gCi0JCi0gICAgICAgIAotCXJldHVybiBmYWxzZTsKKyAgICAvL2lmIGVxdWFsIGdldCBkaXJlY3QgY29ubmVjdGlvbiBlbHNlCisgICAgLy9nZXQgY29ubmVjdGlvbiB3aXRoIHVzZXIgYW5kIHBhc3N3b3JkLgorCisgICAgaWYgKHVzZXIgPT0gbnVsbCAmJiBwYyA9PSBudWxsKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICggdXNlciA9PSBudWxsICYmIHBjICE9IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYoIHBjID09IG51bGwgKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICggdXNlci5lcXVhbHMoIHBjLmdldFVzZXJOYW1lKCkgKSApIHsKKyAgICAgICAgaWYgKCBwYXNzd29yZCA9PSBudWxsICYmIHBjLmdldFBhc3N3b3JkKCkgPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCB1c2VyLmVxdWFscyhwYy5nZXRVc2VyTmFtZSgpKSAmJiBwYXNzd29yZC5lcXVhbHMocGMuZ2V0UGFzc3dvcmQoKSkgKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworCisgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQppbmRleCBkYWQxZDc3Li40ODJmMzMyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCkBAIC0yNCwxNDggKzI0LDE0OCBAQAogLyoqCiAgKiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiB3cmFwcGVyIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMjMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzIzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgWEFSZXNvdXJjZUltcGwgaW1wbGVtZW50cyBYQVJlc291cmNlIHsKIAogICAgIFhBUmVzb3VyY2UgeGFyOwogICAgIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIFhBUmVzb3VyY2VJbXBsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGFyCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+Ci0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB4YXIgICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2VJbXBsKFhBUmVzb3VyY2UgeGFyLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLnhhciA9IHhhcjsKICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCB0aGUgZ2xvYmFsIHRyYW5zYWN0aW9uIHNwZWNpZmllZCBieSB4aWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKLSAgICAgKiBAcGFyYW0Jb25lUGhhc2UJSWYgdHJ1ZSwgdGhlIHJlc291cmNlIG1hbmFnZXIgc2hvdWxkIHVzZSBhIG9uZS1waGFzZSBjb21taXQgCi0gICAgICogICAgICAgCSAgICAgICAgCXByb3RvY29sIHRvIGNvbW1pdCB0aGUgd29yayBkb25lIG9uIGJlaGFsZiBvZiB4aWQuCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIG9uZVBoYXNlICAgIElmIHRydWUsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHNob3VsZCB1c2UgYSBvbmUtcGhhc2UgY29tbWl0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sIHRvIGNvbW1pdCB0aGUgd29yayBkb25lIG9uIGJlaGFsZiBvZiB4aWQuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KFhpZCB4aWQsIGJvb2xlYW4gb25lUGhhc2UpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vdGhlIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkIGNhbGwgaGFzIGNvbWUgaGVyZSBiZWNhc3VlCi0JLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKLQkvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAotCS8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcwotCS8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKLQkvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIC8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93CisgICAgLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKKyAgICAvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCisgICAgLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICAgICAgeGFyLmNvbW1pdCh4aWQsIG9uZVBoYXNlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbmRzIHRoZSB3b3JrIHBlcmZvcm1lZCBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2guCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBpcyB0aGUgc2FtZSBhcyB3aGF0IAotICAgICAqCQkJd2FzIHVzZWQgcHJldmlvdXNseSBpbiB0aGUgc3RhcnQgbWV0aG9kLgotICAgICAqIEBwYXJhbQlmbGFncwlPbmUgb2YgVE1TVUNDRVNTLCBUTUZBSUwsIG9yIFRNU1VTUEVORAorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQKKyAgICAgKiAgICAgICAgICAgIHdhcyB1c2VkIHByZXZpb3VzbHkgaW4gdGhlIHN0YXJ0IG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgZmxhZ3MgICAgT25lIG9mIFRNU1VDQ0VTUywgVE1GQUlMLCBvciBUTVNVU1BFTkQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICB4YXIuZW5kKHhpZCwgZmxhZ3MpOwogICAgICAgICAvL0dKQ0lOVAotCS8vbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICAvL21jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGVsbCB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgYSBoZXVyaXN0aWNhbGx5IGNvbXBsZXRlZCB0cmFuc2FjdGlvbiBicmFuY2guCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgeGFyLmZvcmdldCh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIE9idGFpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIHNldCBmb3IgdGhpcyAKKyAgICAgKiBPYnRhaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBzZXQgZm9yIHRoaXMKICAgICAgKiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcworICAgICAqIEByZXR1cm4gICAgdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcwogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0VHJhbnNhY3Rpb25UaW1lb3V0KCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5nZXRUcmFuc2FjdGlvblRpbWVvdXQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlIAotICAgICAqIHJlcHJlc2VudGVkIGJ5IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSByZXNvdWNlIG1hbmFnZXIgCisgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZQorICAgICAqIHJlcHJlc2VudGVkIGJ5IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSByZXNvdWNlIG1hbmFnZXIKICAgICAgKiBpbnN0YW5jZSByZXByZXNlbnRlZCBieSB0aGUgcGFyYW1ldGVyIHhhcmVzLgogICAgICAqCi0gICAgICogQHBhcmFtCXhhcmVzCUFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aG9zZSByZXNvdXJjZSBtYW5hZ2VyIAotICAgICAqIAkJCWluc3RhbmNlIGlzIHRvIGJlIGNvbXBhcmVkIHdpdGggdGhlIHJlc291cmNlCi0gICAgICogQHJldHVybgl0cnVlIGlmIGl0J3MgdGhlIHNhbWUgUk0gaW5zdGFuY2U7IG90aGVyd2lzZSBmYWxzZS4KKyAgICAgKiBAcGFyYW0gICAgeGFyZXMgICAgQW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdob3NlIHJlc291cmNlIG1hbmFnZXIKKyAgICAgKiAgICAgICAgICAgICBpbnN0YW5jZSBpcyB0byBiZSBjb21wYXJlZCB3aXRoIHRoZSByZXNvdXJjZQorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiBpdCdzIHRoZSBzYW1lIFJNIGluc3RhbmNlOyBvdGhlcndpc2UgZmFsc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNTYW1lUk0oWEFSZXNvdXJjZSB4YXJlcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5pc1NhbWVSTSh4YXJlcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQXNrIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIHByZXBhcmUgZm9yIGEgdHJhbnNhY3Rpb24gY29tbWl0IAorICAgICAqIEFzayB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBwcmVwYXJlIGZvciBhIHRyYW5zYWN0aW9uIGNvbW1pdAogICAgICAqIG9mIHRoZSB0cmFuc2FjdGlvbiBzcGVjaWZpZWQgaW4geGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCi0gICAgICogQHJldHVybglBIHZhbHVlIGluZGljYXRpbmcgdGhlIHJlc291cmNlIG1hbmFnZXIncyB2b3RlIG9uIHRoZSAKLSAgICAgKgkJb3V0Y29tZSBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSBwb3NzaWJsZSB2YWx1ZXMKLSAgICAgKgkJYXJlOiBYQV9SRE9OTFkgb3IgWEFfT0suIElmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHdhbnRzIAotICAgICAqCQl0byByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uLCBpdCBzaG91bGQgZG8gc28KLSAgICAgKgkJYnkgcmFpc2luZyBhbiBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4gaW4gdGhlIHByZXBhcmUgbWV0aG9kLgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEByZXR1cm4gICAgQSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSByZXNvdXJjZSBtYW5hZ2VyJ3Mgdm90ZSBvbiB0aGUKKyAgICAgKiAgICAgICAgb3V0Y29tZSBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSBwb3NzaWJsZSB2YWx1ZXMKKyAgICAgKiAgICAgICAgYXJlOiBYQV9SRE9OTFkgb3IgWEFfT0suIElmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHdhbnRzCisgICAgICogICAgICAgIHRvIHJvbGwgYmFjayB0aGUgdHJhbnNhY3Rpb24sIGl0IHNob3VsZCBkbyBzbworICAgICAqICAgICAgICBieSByYWlzaW5nIGFuIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPiBpbiB0aGUgcHJlcGFyZSBtZXRob2QuCiAgICAgICovCiAgICAgcHVibGljIGludCBwcmVwYXJlKFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIucHJlcGFyZSh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIE9idGFpbiBhIGxpc3Qgb2YgcHJlcGFyZWQgdHJhbnNhY3Rpb24gYnJhbmNoZXMgZnJvbSBhIHJlc291cmNlIG1hbmFnZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZmxhZwlPbmUgb2YgVE1TVEFSVFJTQ0FOLCBUTUVORFJTQ0FOLCBUTU5PRkxBR1MuIFRNTk9GTEFHUyAKLSAgICAgKgkJCW11c3QgYmUgdXNlZCB3aGVuIG5vIG90aGVyIGZsYWdzIGFyZSBzZXQgaW4gZmxhZ3MuCi0gICAgICogQHJldHVybglUaGUgcmVzb3VyY2UgbWFuYWdlciByZXR1cm5zIHplcm8gb3IgbW9yZSBYSURzIGZvciB0aGUgdHJhbnNhY3Rpb24gCi0gICAgICoJCWJyYW5jaGVzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBhIHByZXBhcmVkIG9yIGhldXJpc3RpY2FsbHkgCi0gICAgICoJCWNvbXBsZXRlZCBzdGF0ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgb3BlcmF0aW9uLCB0aGUgcmVzb3VyY2UKLSAgICAgKgkJbWFuYWdlciBzaG91bGQgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gICAgZmxhZyAgICBPbmUgb2YgVE1TVEFSVFJTQ0FOLCBUTUVORFJTQ0FOLCBUTU5PRkxBR1MuIFRNTk9GTEFHUworICAgICAqICAgICAgICAgICAgbXVzdCBiZSB1c2VkIHdoZW4gbm8gb3RoZXIgZmxhZ3MgYXJlIHNldCBpbiBmbGFncy4KKyAgICAgKiBAcmV0dXJuICAgIFRoZSByZXNvdXJjZSBtYW5hZ2VyIHJldHVybnMgemVybyBvciBtb3JlIFhJRHMgZm9yIHRoZSB0cmFuc2FjdGlvbgorICAgICAqICAgICAgICBicmFuY2hlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gYSBwcmVwYXJlZCBvciBoZXVyaXN0aWNhbGx5CisgICAgICogICAgICAgIGNvbXBsZXRlZCBzdGF0ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgb3BlcmF0aW9uLCB0aGUgcmVzb3VyY2UKKyAgICAgKiAgICAgICAgbWFuYWdlciBzaG91bGQgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgWGlkW10gcmVjb3ZlcihpbnQgZmxhZykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5yZWNvdmVyKGZsYWcpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEluZm9ybSB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byByb2xsIGJhY2sgd29yayBkb25lIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaAogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy90aGUgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQgY2FsbCBoYXMgY29tZSBoZXJlIGJlY2FzdWUKLQkvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdwotCS8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCi0JLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCi0JLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAotCS8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgorICAgIC8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93CisgICAgLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKKyAgICAvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCisgICAgLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCiAgICAgICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgICAgIHhhci5yb2xsYmFjayh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGZvciB0aGlzIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlY29uZHMJdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpcyBzZXQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZmFsc2UuCisgICAgICogQHBhcmFtICAgIHNlY29uZHMgICAgdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpcyBzZXQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZmFsc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnNldFRyYW5zYWN0aW9uVGltZW91dChzZWNvbmRzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTdGFydCB3b3JrIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaCBzcGVjaWZpZWQgaW4geGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzb3VyY2UKLSAgICAgKiBAcmV0dXJuCWZsYWdzCU9uZSBvZiBUTU5PRkxBR1MsIFRNSk9JTiwgb3IgVE1SRVNVTUUKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZQorICAgICAqIEByZXR1cm4gICAgZmxhZ3MgICAgT25lIG9mIFRNTk9GTEFHUywgVE1KT0lOLCBvciBUTVJFU1VNRQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy9HSkNJTlQKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCmluZGV4IGNlMzIxYWYuLjllN2YyNTMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YQpAQCAtMjYsOCArMjYsOCBAQAogLyoqCiAgKiBFeGVjdXRlIHRoZSBtZXRob2RzIGJhc2VkIG9uIHRoZSBwYXJhbWV0ZXJzLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCiBwdWJsaWMgY2xhc3MgTWV0aG9kRXhlY3V0b3IgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZXsKIApAQCAtMzksMTMwICszOSwxMzAgQEAKICAgICAvKioKICAgICAgKiBFeGNldXRlIGEgc2ltcGxlIHNldCBNZXRob2QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsdWUJVmFsdWUgdG8gYmUgc2V0LgotICAgICAqIEBwYXJhbQltZXRob2QJPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCW9iaglPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KKyAgICAgKiBAcGFyYW0gICAgdmFsdWUgICAgVmFsdWUgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICBtZXRob2QgICAgPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG9iaiAgICBPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KICAgICAgKiBAdGhyb3dzICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4sIGluIGNhc2Ugb2YgdGhlIG1pc21hdGNoIG9mIHBhcmFtZXRlciB2YWx1ZXMgb3IKLSAgICAgKgkJYSBzZWN1cml0eSB2aW9sYXRpb24uICAgICAKKyAgICAgKiAgICAgICAgYSBzZWN1cml0eSB2aW9sYXRpb24uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcnVuSmF2YUJlYW5NZXRob2QoU3RyaW5nIHZhbHVlLCBNZXRob2QgbWV0aG9kLCBPYmplY3Qgb2JqKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCWlmICh2YWx1ZT09bnVsbCB8fCB2YWx1ZS50cmltKCkuZXF1YWxzKCIiKSkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCXRyeSB7Ci0gICAgCSAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLSAgICAJICAgIGlmICggcGFyYW1ldGVycy5sZW5ndGggPT0gMSkgewotICAgIAkgICAgICAgIE9iamVjdFtdIHZhbHVlcyA9IG5ldyBPYmplY3RbMV07Ci0gICAgCSAgICAJdmFsdWVzWzBdID0gY29udmVydFR5cGUocGFyYW1ldGVyc1swXSwgdmFsdWUpOwotICAgIAkgICAgCW1ldGhvZC5pbnZva2Uob2JqLCB2YWx1ZXMpOwotICAgIAkgICAgfQotICAgIAl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOwotICAgIAl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9CisgICAgICAgIGlmICh2YWx1ZT09bnVsbCB8fCB2YWx1ZS50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKKyAgICAgICAgICAgIGlmICggcGFyYW1ldGVycy5sZW5ndGggPT0gMSkgeworICAgICAgICAgICAgICAgIE9iamVjdFtdIHZhbHVlcyA9IG5ldyBPYmplY3RbMV07CisgICAgICAgICAgICAgICAgdmFsdWVzWzBdID0gY29udmVydFR5cGUocGFyYW1ldGVyc1swXSwgdmFsdWUpOworICAgICAgICAgICAgICAgIG1ldGhvZC5pbnZva2Uob2JqLCB2YWx1ZXMpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBFeGVjdXRlcyB0aGUgbWV0aG9kLiAgICAgCisgICAgICogRXhlY3V0ZXMgdGhlIG1ldGhvZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltZXRob2QgPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCW9iaglPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KLSAgICAgKiBAcGFyYW0JdmFsdWVzCVBhcmFtZXRlciB2YWx1ZXMgZm9yIGV4ZWN1dGluZyB0aGUgbWV0aG9kLgorICAgICAqIEBwYXJhbSAgICBtZXRob2QgPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG9iaiAgICBPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KKyAgICAgKiBAcGFyYW0gICAgdmFsdWVzICAgIFBhcmFtZXRlciB2YWx1ZXMgZm9yIGV4ZWN1dGluZyB0aGUgbWV0aG9kLgogICAgICAqIEB0aHJvd3MgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiwgaW4gY2FzZSBvZiB0aGUgbWlzbWF0Y2ggb2YgcGFyYW1ldGVyIHZhbHVlcyBvcgotICAgICAqCQlhIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiAgICAgICAgYSBzZWN1cml0eSB2aW9sYXRpb24uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcnVuTWV0aG9kKE1ldGhvZCBtZXRob2QsIE9iamVjdCBvYmosIFZlY3RvciB2YWx1ZXMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJdHJ5IHsKLQkgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0JICAgIGlmICh2YWx1ZXMuc2l6ZSgpICE9IHBhcmFtZXRlcnMubGVuZ3RoKSB7Ci0JICAgICAgICByZXR1cm47Ci0JICAgIH0KLSAgICAJICAgIE9iamVjdFtdIGFjdHVhbFZhbHVlcyA9IG5ldyBPYmplY3RbcGFyYW1ldGVycy5sZW5ndGhdOwotICAgIAkgICAgZm9yIChpbnQgaSA9MDsgaTxwYXJhbWV0ZXJzLmxlbmd0aCA7IGkrKykgewotICAgIAkgICAgCVN0cmluZyB2YWwgPSAoU3RyaW5nKSB2YWx1ZXMuZ2V0KGkpOwotICAgIAkgICAgCWlmICh2YWwudHJpbSgpLmVxdWFscygiTlVMTCIpKSB7Ci0gICAgCSAgICAJICAgIGFjdHVhbFZhbHVlc1tpXSA9IG51bGw7Ci0gICAgCSAgICAJfSBlbHNlIHsKLSAgICAJICAgIAkgICAgYWN0dWFsVmFsdWVzW2ldID0gY29udmVydFR5cGUocGFyYW1ldGVyc1tpXSwgdmFsKTsKLSAgICAJICAgIAl9Ci0gICAgCSAgICB9Ci0gICAgCSAgICBtZXRob2QuaW52b2tlKG9iaiwgYWN0dWFsVmFsdWVzKTsKLSAgICAJfWNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOwotICAgIAl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9CisgICAgICAgIHRyeSB7CisgICAgICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOworICAgICAgICBpZiAodmFsdWVzLnNpemUoKSAhPSBwYXJhbWV0ZXJzLmxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICBPYmplY3RbXSBhY3R1YWxWYWx1ZXMgPSBuZXcgT2JqZWN0W3BhcmFtZXRlcnMubGVuZ3RoXTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPTA7IGk8cGFyYW1ldGVycy5sZW5ndGggOyBpKyspIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdmFsID0gKFN0cmluZykgdmFsdWVzLmdldChpKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsLnRyaW0oKS5lcXVhbHMoIk5VTEwiKSkgeworICAgICAgICAgICAgICAgICAgICBhY3R1YWxWYWx1ZXNbaV0gPSBudWxsOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlc1tpXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbaV0sIHZhbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbWV0aG9kLmludm9rZShvYmosIGFjdHVhbFZhbHVlcyk7CisgICAgICAgIH1jYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29udmVydHMgdGhlIHR5cGUgZnJvbSBTdHJpbmcgdG8gdGhlIENsYXNzIHR5cGUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHlwZQkJQ2xhc3MgbmFtZSB0byB3aGljaCB0aGUgY29udmVyc2lvbiBpcyByZXF1aXJlZC4KLSAgICAgKiBAcGFyYW0JcGFyYW1ldGVyCVN0cmluZyB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQuCi0gICAgICogQHJldHVybglDb252ZXJ0ZWQgdmFsdWUuCisgICAgICogQHBhcmFtICAgIHR5cGUgICAgICAgIENsYXNzIG5hbWUgdG8gd2hpY2ggdGhlIGNvbnZlcnNpb24gaXMgcmVxdWlyZWQuCisgICAgICogQHBhcmFtICAgIHBhcmFtZXRlciAgICBTdHJpbmcgdmFsdWUgdG8gYmUgY29udmVydGVkLgorICAgICAqIEByZXR1cm4gICAgQ29udmVydGVkIHZhbHVlLgogICAgICAqIEB0aHJvd3MgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiwgaW4gY2FzZSBvZiB0aGUgbWlzbWF0Y2ggb2YgcGFyYW1ldGVyIHZhbHVlcyBvcgotICAgICAqCQlhIHNlY3VyaXR5IHZpb2xhdGlvbi4gICAgIAorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwcml2YXRlIE9iamVjdCBjb252ZXJ0VHlwZShDbGFzcyB0eXBlLCBTdHJpbmcgcGFyYW1ldGVyKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCXRyeSB7Ci0gICAgCSAgICBTdHJpbmcgdHlwZU5hbWUgPSB0eXBlLmdldE5hbWUoKTsKLSAgICAJICAgIGlmICggdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU3RyaW5nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuT2JqZWN0IikpIHsKLSAgICAJICAgIAlyZXR1cm4gcGFyYW1ldGVyOwotICAgIAkgICAgfQotICAgIAkKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImludCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkludGVnZXIiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgSW50ZWdlcihwYXJhbWV0ZXIpOwotICAgIAkgICAgfQotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJzaG9ydCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlNob3J0IikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IFNob3J0KHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJ5dGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5CeXRlIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEJ5dGUocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygibG9uZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkxvbmciKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgTG9uZyhwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImZsb2F0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRmxvYXQiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgRmxvYXQocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZG91YmxlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRG91YmxlIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IERvdWJsZShwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0RlY2ltYWwiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnSW50ZWdlciIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJvb2xlYW4iKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Cb29sZWFuIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEJvb2xlYW4ocGFyYW1ldGVyKTsKLSAgICAgICAgICAgIH0JCQorICAgICAgICB0cnkgeworICAgICAgICAgICAgU3RyaW5nIHR5cGVOYW1lID0gdHlwZS5nZXROYW1lKCk7CisgICAgICAgICAgICBpZiAoIHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlN0cmluZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLk9iamVjdCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcjsKKyAgICAgICAgICAgIH0KIAotICAgIAkgICAgcmV0dXJuIHBhcmFtZXRlcjsKLSAgICAJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19uZmUiLCBwYXJhbWV0ZXIpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHBhcmFtZXRlcisiOiBOb3QgYSB2YWxpZCB2YWx1ZSBmb3IgdGhpcyBtZXRob2QgIik7Ci0gICAgCX0KKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImludCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkludGVnZXIiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSW50ZWdlcihwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJzaG9ydCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlNob3J0IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNob3J0KHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJ5dGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5CeXRlIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ5dGUocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygibG9uZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkxvbmciKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTG9uZyhwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJmbG9hdCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkZsb2F0IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0KHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImRvdWJsZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkRvdWJsZSIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEb3VibGUocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0RlY2ltYWwiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0ludGVnZXIiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYm9vbGVhbiIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJvb2xlYW4iKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQm9vbGVhbihwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyOworICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX25mZSIsIHBhcmFtZXRlcik7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24ocGFyYW1ldGVyKyI6IE5vdCBhIHZhbGlkIHZhbHVlIGZvciB0aGlzIG1ldGhvZCAiKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKaW5kZXggZmMxNDliZi4uZjAwOGU3ZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQpAQCAtMjksMzYgKzI5LDM2IEBACiAvKioKICAqIFNlY3VyaXR5VXRpbHMgZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMgotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjIKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBTZWN1cml0eVV0aWxzIHsKIAogICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LCBnaXZlbiAKLSAgICAgKiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgc3ViamVjdCBhbmQgdGhlIAotICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4uIEl0IGZpcnN0IGNoZWNrcyBpZiB0aGUgCi0gICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBpcyBudWxsIG9yIG5vdC4gSWYgaXQgaXMgbm90IG51bGwsIAorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LCBnaXZlbgorICAgICAqIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBzdWJqZWN0IGFuZCB0aGUKKyAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+LiBJdCBmaXJzdCBjaGVja3MgaWYgdGhlCisgICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBpcyBudWxsIG9yIG5vdC4gSWYgaXQgaXMgbm90IG51bGwsCiAgICAgICogaXQgY29uc3RydWN0cyBhIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IHdpdGgKICAgICAgKiB0aGUgdXNlciBhbmQgcGFzc3dvcmQgZmllbGRzIGZyb20gdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gYW5kIHJldHVybnMgdGhpcwotICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LiBJZiB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiAKLSAgICAgKiBpcyBudWxsLCBpdCByZXRyaWV2ZXMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0cyBmcm9tIAorICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LiBJZiB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgorICAgICAqIGlzIG51bGwsIGl0IHJldHJpZXZlcyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGZyb20KICAgICAgKiB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIGFuZCByZXR1cm5zIHRoZSBmaXJzdAotICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGEgCisgICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIGluc3RhbmNlIGVxdWl2YWxlbnQKICAgICAgKiB0byB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgcGFyYW1ldGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4KLSAgICAgKiBAcGFyYW0JaW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+Ci0gICAgICogQHJldHVybgk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4JZ2VuZXJpYyBleGNlcHRpb24gaWYgb3BlcmF0aW9uIGZhaWxzCi0gICAgICogQHRocm93cwk8Y29kZT5TZWN1cml0eUV4Y2VwdGlvbjwvY29kZT4JaWYgYWNjZXNzIHRvIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBpcyBkZW5pZWQKKyAgICAgKiBAcGFyYW0gICAgbWNmICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBpbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiAgICBnZW5lcmljIGV4Y2VwdGlvbiBpZiBvcGVyYXRpb24gZmFpbHMKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlNlY3VyaXR5RXhjZXB0aW9uPC9jb2RlPiAgICBpZiBhY2Nlc3MgdG8gdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIGlzIGRlbmllZAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgUGFzc3dvcmRDcmVkZW50aWFsIGdldFBhc3N3b3JkQ3JlZGVudGlhbChmaW5hbCBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLAogICAgICAgICAgZmluYWwgU3ViamVjdCBzdWJqZWN0LCBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKIAotCWlmIChpbmZvID09IG51bGwpIHsKKyAgICBpZiAoaW5mbyA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZiAoc3ViamVjdCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtODksMTQgKzg5LDE0IEBACiAgICAgICAgICAgICByZXR1cm4gcGM7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdHdvIHN0cmluZ3MgYXJlIGVxdWFsOyBmYWxzZSBvdGhlcndpc2UKLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3RyMQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHBhcmFtCXN0cjIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgdHdvIHN0cmluZ3MgYXJlIGVxdWFsCi0gICAgICogICAgICAgIAlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdHIxICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc3RyMiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSB0d28gc3RyaW5ncyBhcmUgZXF1YWwKKyAgICAgKiAgICAgICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHN0YXRpYyBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbChTdHJpbmcgc3RyMSwgU3RyaW5nIHN0cjIpIHsKICAgICAgICAgaWYgKHN0cjEgPT0gbnVsbCkgewpAQCAtMTA5LDEwICsxMDksMTAgQEAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdHdvIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0cyBhcmUgZXF1YWw7IGZhbHNlIG90aGVyd2lzZQogICAgICAqCi0gICAgICogQHBhcmFtCXBDMQk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICogQHBhcmFtCXBDMgk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSB0d28gUGFzc3dvcmRDcmVkZW50aWFscyBhcmUgZXF1YWwKLSAgICAgKiAgICAgICAgCWZhbHNlCW90aGVyd2lzZQorICAgICAqIEBwYXJhbSAgICBwQzEgICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwQzIgICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgdHdvIFBhc3N3b3JkQ3JlZGVudGlhbHMgYXJlIGVxdWFsCisgICAgICogICAgICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBzdGF0aWMgcHVibGljIGJvb2xlYW4gaXNQYXNzd29yZENyZWRlbnRpYWxFcXVhbChQYXNzd29yZENyZWRlbnRpYWwgcEMxLCBQYXNzd29yZENyZWRlbnRpYWwgcEMyKSB7CiAgICAgICAgIGlmIChwQzEgPT0gcEMyKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCmluZGV4IGE1NWJiZjAuLmYwNjBlN2QgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9Ii4iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy91dGlsIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgIDxqYXIgamFyZmlsZT0iJHtkaXN0LmRpcn0vJHtwa2cuZGlyfS91dGlsLmphciIgYmFzZWRpcj0iJHtjbGFzcy5kaXJ9IgogICAgICAgICBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxMyIgZGVwZW5kcz0iY29tcGlsZSIvPgogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxNCIgZGVwZW5kcz0iY29tcGlsZSIvPgogCkBAIC00NCw1ICs0NCw1IEBACiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+Ci0gIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggNDIzNDExNS4uZWQ2ZGJhYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSwyMCArMSwyMCBAQAotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOw0KLQ0KLUNSRUFURSBUQUJMRSBUWExFVkVMU1dJVENIICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMTAsICdhYmNkJyk7DQotSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMTEsICdwcXJzJyk7DQotDQotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsNCi0NCi1DUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSDIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIMiBWQUxVRVMoMSwgJ2FiY2QnKTsNCi1JTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIMiBWQUxVRVMoMiwgJ3BxcnMnKTsNCi0NCitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7CisKK0NSRUFURSBUQUJMRSBUWExFVkVMU1dJVENIICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0lOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDEwLCAnYWJjZCcpOworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMTEsICdwcXJzJyk7CisKK0Ryb3AgdGFibGUgVFhMRVZFTFNXSVRDSDI7CisKK0NSRUFURSBUQUJMRSBUWExFVkVMU1dJVENIMiAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIMiBWQUxVRVMoMSwgJ2FiY2QnKTsKK0lOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0gyIFZBTFVFUygyLCAncHFycycpOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCAwYzEyNDJmLi5kMTFhMTE1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEsMiArMSwyIEBACi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7DQotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsNCitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7CitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL1N1blJhWG1sL2NjaS1lbWJlZGRlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL1N1blJhWG1sL2NjaS1lbWJlZGRlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDVhZDBiMTIuLjA1ZGYxMjggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvU3VuUmFYbWwvY2NpLWVtYmVkZGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEyICsxNSwxMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY29ubmVjdG9yIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImNjaWJsYWNrYm94LnBhdGgiIHZhbHVlPSIuLi9saWIvY2NpYmxhY2tib3gtdHguamFyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1lbWJlZGRlZC1jY2kiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWVtYmVkZGVkLWNjaSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJkYi50eXBlIiB2YWx1ZT0icG9pbnRiYXNlIi8+CkBAIC0yOSw3ICsyOSw3IEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWNtcC1kYnNjaGVtYSIgdmFsdWU9ImRlc2NyaXB0b3Ivc2VjX2JhbmthZG1pbl9zY2hlbWEuZGJzY2hlbWEiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0icmFybmFtZSIgdmFsdWU9ImNjaWJsYWNrYm94LXR4Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0icmFybmFtZSIgdmFsdWU9ImNjaWJsYWNrYm94LXR4Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJqZGJjLmRyaXZlcnMiIHZhbHVlPSJjb20ucG9pbnRiYXNlLmpkYmMuamRiY1VuaXZlcnNhbERyaXZlciIvPgogCiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvY2NpLWVtYmVkZGVkL3NlcnZsZXQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL1N1blJhWG1sL2NjaS1lbWJlZGRlZC9idWlsZC54bWwKaW5kZXggMjljYWM1MC4uMTdiYjVhZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL1N1blJhWG1sL2NjaS1lbWJlZGRlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL1N1blJhWG1sL2NjaS1lbWJlZGRlZC9idWlsZC54bWwKQEAgLTkzLDcgKzkzLDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDwhLS0KLQlDdXN0b20gdGFyZ2V0IGZvciBjb21waWxhdGlvbiB3aXRoIGxvY2FsIGxpYnJhcmllcyBmb3IgY29ubmVjdG9yCisgICAgQ3VzdG9tIHRhcmdldCBmb3IgY29tcGlsYXRpb24gd2l0aCBsb2NhbCBsaWJyYXJpZXMgZm9yIGNvbm5lY3RvcgogICAgIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1jY2kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvY2xpZW50L0NvZmZlZUNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL1N1blJhWG1sL2NjaS1lbWJlZGRlZC9jbGllbnQvQ29mZmVlQ2xpZW50LmphdmEKaW5kZXggMDVjYTAzOC4uNzcxNDg3MCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL1N1blJhWG1sL2NjaS1lbWJlZGRlZC9jbGllbnQvQ29mZmVlQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL1N1blJhWG1sL2NjaS1lbWJlZGRlZC9jbGllbnQvQ29mZmVlQ2xpZW50LmphdmEKQEAgLTczLDQgKzczLDQgQEAKICAgICB9CiAKIAotfSAKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvZWpiL0NvZmZlZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvZWpiL0NvZmZlZUJlYW4uamF2YQppbmRleCA1NjNlZTNhLi4wNzA5YjE1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvU3VuUmFYbWwvY2NpLWVtYmVkZGVkL2VqYi9Db2ZmZWVCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL1N1blJhWG1sL2NjaS1lbWJlZGRlZC9lamIvQ29mZmVlQmVhbi5qYXZhCkBAIC0xMjgsNCArMTI4LDQgQEAKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7CiAgICAgfQogCi19IAorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL1N1blJhWG1sL2NjaS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL1N1blJhWG1sL2NjaS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGEyZTNmNjQuLmQwNmI5NzcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2kvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvU3VuUmFYbWwvY2NpL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEyICsxNSwxMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY29ubmVjdG9yIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImNjaWJsYWNrYm94LnBhdGgiIHZhbHVlPSIuLi9saWIvY2NpYmxhY2tib3gtdHguamFyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImNvbm5lY3Rvci1jY2kiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iY29ubmVjdG9yLWNjaSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJkYi50eXBlIiB2YWx1ZT0icG9pbnRiYXNlIi8+CkBAIC0yOSw3ICsyOSw3IEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWNtcC1kYnNjaGVtYSIgdmFsdWU9ImRlc2NyaXB0b3Ivc2VjX2JhbmthZG1pbl9zY2hlbWEuZGJzY2hlbWEiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0icmFybmFtZSIgdmFsdWU9ImNjaWJsYWNrYm94LXR4Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0icmFybmFtZSIgdmFsdWU9ImNjaWJsYWNrYm94LXR4Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJqZGJjLmRyaXZlcnMiIHZhbHVlPSJjb20ucG9pbnRiYXNlLmpkYmMuamRiY1VuaXZlcnNhbERyaXZlciIvPgogCiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvY29ubmVjdG9yLWNjaS9zZXJ2bGV0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvU3VuUmFYbWwvY2NpL2NsaWVudC9Db2ZmZWVDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2kvY2xpZW50L0NvZmZlZUNsaWVudC5qYXZhCmluZGV4IDY5ZDNiYzUuLmUwNTZjYjAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2kvY2xpZW50L0NvZmZlZUNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2kvY2xpZW50L0NvZmZlZUNsaWVudC5qYXZhCkBAIC03Myw0ICs3Myw0IEBACiAgICAgfQogCiAKLX0gCit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvU3VuUmFYbWwvY2NpL2VqYi9Db2ZmZWVCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvU3VuUmFYbWwvY2NpL2VqYi9Db2ZmZWVCZWFuLmphdmEKaW5kZXggMzc4ODJjNC4uYzQ1ZGQ3MCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL1N1blJhWG1sL2NjaS9lamIvQ29mZmVlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2kvZWpiL0NvZmZlZUJlYW4uamF2YQpAQCAtMTI4LDQgKzEyOCw0IEBACiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewogICAgIH0KIAotfSAKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2kvc3FsL2NjaS1wYi5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvU3VuUmFYbWwvY2NpL3NxbC9jY2ktcGIuc3FsCmluZGV4IDZjZDZkNGEuLmRmYWY5NTIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2kvc3FsL2NjaS1wYi5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL1N1blJhWG1sL2NjaS9zcWwvY2NpLXBiLnNxbApAQCAtMTYsNSArMTYsNSBAQAogTEFOR1VBR0UgSkFWQQogTU9ESUZJRVMgU1FMIERBVEEKIEVYVEVSTkFMIE5BTUUgJ1NhbXBsZUV4dGVybmFsTWV0aG9kcy5pbnNlcnRDb2ZmZWUnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjI5MGE0MS4uYzIzYTk1ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIzICsxNSwyMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2J1aWxkLnhtbAppbmRleCBhOWExMDkxLi4yY2EzMjg5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9idWlsZC54bWwKQEAgLTM3LDEwICszNywxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJpbmZvIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgCTxlY2hvIG1lc3NhZ2U9ImJ1aWxkLmNsYXNzZXMuZGlyIGlzICR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgCTxlY2hvIG1lc3NhZ2U9InMxYXN0ZXN0LmNsYXNzcGF0aCBpcyAke3MxYXN0ZXN0LmNsYXNzcGF0aH0iLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iYnVpbGQuY2xhc3Nlcy5kaXIgaXMgJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iczFhc3Rlc3QuY2xhc3NwYXRoIGlzICR7czFhc3Rlc3QuY2xhc3NwYXRofSIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgIAkgIDxlY2hvIG1lc3NhZ2U9ImFzc2VtYmxlLmRpciA9ICR7YXNzZW1ibGUuZGlyfSIvPgorICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImFzc2VtYmxlLmRpciA9ICR7YXNzZW1ibGUuZGlyfSIvPgogICAgICAgICA8IS0tYnVpbGQgYW5kIHBhY2thZ2UgLndhciBmaXJzdCBzbyBpdCBkb2Vzbid0IGNvbnRhaW4gZWpiIGJlYW4gIS0tPgogICAgICAgICA8IS0tY2xhc3NlcyB0aGF0IGhhdmUgQFN0YXRlbGVzcy9AU3RhdGV1bCAhLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgpAQCAtNzEsMjMgKzcxLDIzIEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IioqL0hlbGxvKiouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgICAgICAKKwogICAgICAgICA8YW50IGRpcj0icmEiIHRhcmdldD0iYWxsIi8+CiAKICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+ICAgIAorICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogCiAgICAgICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+CiAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KLSAgICAgICAgICA8L2ZpbGVzZXQ+ICAKKyAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJyYS8iPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5yYXIiLz4KICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgIDwvZWFyPgotICAgICAgICAKKwogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYTY4NDgzNy4uMTI4N2ZjZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvY2xpZW50L0NsaWVudC5qYXZhCkBAIC01OCw3ICs1OCw3IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRjTmFtZSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0Y05hbWUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB0aHJvdyBlOwpAQCAtNzksNyArNzksNyBAQAogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7CiAgICAgICAgIGlmIChjb2RlICE9IDIwMCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCmluZGV4IGFlYmQzYTEuLjNkNzE2MjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8bW9kdWxlPgogICAgICAgPGNvbm5lY3Rvcj5hb2QtcmEucmFyPC9jb25uZWN0b3I+CiAgICAgPC9tb2R1bGU+Ci0gICAgCisKICAgICA8YWRtaW5pc3RlcmVkLW9iamVjdD4KICAgICAgICA8ZGVzY3JpcHRpb24+Z2xvYmFsLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gYXBwbGljYXRpb24gREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgIDxuYW1lPmphdmE6Z2xvYmFsL2Vudi9FQVJfQWRtaW5PYmplY3Q8L25hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvZGVzY3JpcHRvci9jb25uZWN0b3ItcmVzb3VyY2UueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2Rlc2NyaXB0b3IvY29ubmVjdG9yLXJlc291cmNlLnhtbAppbmRleCBmYTZkZjcyLi4xMzFhYzAyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvZGVzY3JpcHRvci9jb25uZWN0b3ItcmVzb3VyY2UueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9kZXNjcmlwdG9yL2Nvbm5lY3Rvci1yZXNvdXJjZS54bWwKQEAgLTIwLDEyICsyMCwxMiBAQAogPGNvbm5lY3Rvci1yZXNvdXJjZSB4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKICAgICAgICAgICAgICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9qYXZhZWVfNy54c2Q+Ci0JPGRlc2NyaXB0aW9uPmdsb2JhbC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIGFwcGxpY2F0aW9uIEREPC9kZXNjcmlwdGlvbj4KLQk8bmFtZT5qYXZhOmdsb2JhbC9lbnYvQXBwbGljYXRpb25fTGV2ZWxfQ29ubmVjdGlvbkZhY3Rvcnk8L25hbWU+Ci0JPGNsYXNzLW5hbWU+amFrYXJ0YS5yZXNvdXJjZS5jY2kuQ29ubmVjdGlvbkZhY3Rvcnk8L2NsYXNzLW5hbWU+Ci0JPHJlc291cmNlLWFkYXB0ZXI+I2NyZC1yYTwvcmVzb3VyY2UtYWRhcHRlcj4KLQk8cHJvcGVydHk+Ci0JCTxuYW1lPnRyYW5zYWN0aW9uU3VwcG9ydDwvbmFtZT4KLQkJPHZhbHVlPkxvY2FsVHJhbnNhY3Rpb248L3ZhbHVlPgotCTwvcHJvcGVydHk+CisgICAgPGRlc2NyaXB0aW9uPmdsb2JhbC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIGFwcGxpY2F0aW9uIEREPC9kZXNjcmlwdGlvbj4KKyAgICA8bmFtZT5qYXZhOmdsb2JhbC9lbnYvQXBwbGljYXRpb25fTGV2ZWxfQ29ubmVjdGlvbkZhY3Rvcnk8L25hbWU+CisgICAgPGNsYXNzLW5hbWU+amFrYXJ0YS5yZXNvdXJjZS5jY2kuQ29ubmVjdGlvbkZhY3Rvcnk8L2NsYXNzLW5hbWU+CisgICAgPHJlc291cmNlLWFkYXB0ZXI+I2NyZC1yYTwvcmVzb3VyY2UtYWRhcHRlcj4KKyAgICA8cHJvcGVydHk+CisgICAgICAgIDxuYW1lPnRyYW5zYWN0aW9uU3VwcG9ydDwvbmFtZT4KKyAgICAgICAgPHZhbHVlPkxvY2FsVHJhbnNhY3Rpb248L3ZhbHVlPgorICAgIDwvcHJvcGVydHk+CiA8L2Nvbm5lY3Rvci1yZXNvdXJjZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggZTU3NGNkMS4uMzBlNTAwMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTE4LDkgKzE4LDkgQEAKIC0tPgogCiA8ZWpiLWphciB4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotICAgICAgICAgbWV0YWRhdGEtY29tcGxldGU9ImZhbHNlIiAKLSAgICAgICAgIHZlcnNpb249IjMuMiIgCisgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgICAgbWV0YWRhdGEtY29tcGxldGU9ImZhbHNlIgorICAgICAgICAgdmVyc2lvbj0iMy4yIgogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIGh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzIueHNkIj4KICAgPG1vZHVsZS1uYW1lPmFkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lamI8L21vZHVsZS1uYW1lPgogICA8ZW50ZXJwcmlzZS1iZWFucz4KQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgIDxlamItbmFtZT5IZWxsb1N0YXRlZnVsRUpCPC9lamItbmFtZT4KICAgICAgIDxidXNpbmVzcy1sb2NhbD5jb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24zLkhlbGxvU3RhdGVmdWw8L2J1c2luZXNzLWxvY2FsPgogICAgICAgPGVqYi1jbGFzcz5jb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24zLkhlbGxvU3RhdGVmdWxFSkI8L2VqYi1jbGFzcz4KLSAgICAgIAorCiAgICAgICA8YWRtaW5pc3RlcmVkLW9iamVjdD4KICAgICAgICAgPGRlc2NyaXB0aW9uPmdsb2JhbC1zY29wZSByZXNvdXJjZSB0byBiZSBtb2RpZmllZCBieSBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6Z2xvYmFsL2Vudi9IZWxsb1N0YXRlZnVsRUpCX01vZEJ5RERfQWRtaW5PYmplY3Q8L25hbWU+CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgPHZhbHVlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvYWRtaW5pc3RlcmVkLW9iamVjdD4KLSAgICAgIAorCiAgICAgICA8YWRtaW5pc3RlcmVkLW9iamVjdD4KICAgICAgICAgPGRlc2NyaXB0aW9uPm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6bW9kdWxlL2Vudi9IZWxsb1N0YXRlZnVsRUpCX0REX0FkbWluT2JqZWN0PC9uYW1lPgpAQCAtNjUsNyArNjUsNyBAQAogICAgICAgICAgIDx2YWx1ZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgICAKKwogICAgICAgPGFkbWluaXN0ZXJlZC1vYmplY3Q+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5hcHBsaWNhdGlvbi1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6YXBwL2Vudi9IZWxsb1N0YXRlZnVsRUpCX0REX0FkbWluT2JqZWN0PC9uYW1lPgpAQCAtNzcsNyArNzcsNyBAQAogICAgICAgICAgIDx2YWx1ZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgICAKKwogICAgICAgPGFkbWluaXN0ZXJlZC1vYmplY3Q+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5jb21wb25lbnQtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOmNvbXAvZW52L0hlbGxvU3RhdGVmdWxFSkJfRERfQWRtaW5PYmplY3Q8L25hbWU+CkBAIC04OSw3ICs4OSw3IEBACiAgICAgICAgICAgPHZhbHVlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvYWRtaW5pc3RlcmVkLW9iamVjdD4KLSAgICAgIAorCiAgICAgPC9zZXNzaW9uPgogICAgIDxzZXNzaW9uPgogICAgICAgPGRpc3BsYXktbmFtZT5IZWxsb0VKQjwvZGlzcGxheS1uYW1lPgpAQCAtMTIwLDcgKzEyMCw3IEBACiAgICAgICAgICAgPHZhbHVlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvYWRtaW5pc3RlcmVkLW9iamVjdD4KLSAgICAgIAorCiAgICAgICA8YWRtaW5pc3RlcmVkLW9iamVjdD4KICAgICAgICAgPGRlc2NyaXB0aW9uPmFwcGxpY2F0aW9uLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTphcHAvZW52L0hlbGxvRUpCX0REX0FkbWluT2JqZWN0PC9uYW1lPgpAQCAtMTU2LDggKzE1Niw4IEBACiAgICAgICAgICAgPHZhbHVlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvYWRtaW5pc3RlcmVkLW9iamVjdD4KLSAgICAgIAorCiAgICAgPC9zZXNzaW9uPgogICA8L2VudGVycHJpc2UtYmVhbnM+Ci0gIAorCiA8L2VqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA0ZDRjOTNhLi4wMzZlNDdmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTE4LDggKzE4LDggQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiICAgIAotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIHdlYi1hcHBfM18xLnhzZCIgICAKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgd2ViLWFwcF8zXzEueHNkIgogICAgICAgICAgdmVyc2lvbj0iMy4xIgogICAgICAgICAgbWV0YWRhdGEtY29tcGxldGU9ImZhbHNlIj4KIApAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICAgPHZhbHVlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC92YWx1ZT4KICAgICAgICA8L3Byb3BlcnR5PgogICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgCisKICAgICAgPGFkbWluaXN0ZXJlZC1vYmplY3Q+CiAgICAgICAgPGRlc2NyaXB0aW9uPm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIFdlYiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgPG5hbWU+amF2YTptb2R1bGUvZW52L1dlYl9ERF9BZG1pbk9iamVjdDwvbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9lamIvSGVsbG9FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9lamIvSGVsbG9FSkIuamF2YQppbmRleCBiZGE1OTYxLi4zYmIxODMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvZWpiL0hlbGxvRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2VqYi9IZWxsb0VKQi5qYXZhCkBAIC0zMywzNSArMzMsMzUgQEAKICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0geyJvcmcuZ2xhc3NmaXNoLmFkbWluLW9iamVjdC5yZXNUeXBlPWNvbm5lY3Rvci5NeUFkbWluT2JqZWN0In0KICAgICAgICAgICApLAogICAgICAgICAgIEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uKAotICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiZ2xvYmFsLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24iLCAKLSAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTpnbG9iYWwvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQWRtaW5PYmplY3QiLCAKKyAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImdsb2JhbC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uIiwKKyAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTpnbG9iYWwvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQWRtaW5PYmplY3QiLAogICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZSA9ICJqYWthcnRhLmptcy5EZXN0aW5hdGlvbiIsCiAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAiY29ubmVjdG9yLk15QWRtaW5PYmplY3QiLAogICAgICAgICAgICAgICAgcmVzb3VyY2VBZGFwdGVyPSIjYW9kLXJhIiwKICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7Im9yZy5nbGFzc2Zpc2guYWRtaW4tb2JqZWN0LnJlc1R5cGU9Y29ubmVjdG9yLk15QWRtaW5PYmplY3QifQogICAgICAgICAgICksCi0gICAgICAgICAgCisKICAgICAgICAgICBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImFwcGxpY2F0aW9uLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24iLCAKLSAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTphcHAvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQWRtaW5PYmplY3QiLCAKKyAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImFwcGxpY2F0aW9uLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24iLAorICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOmFwcC9lbnYvSGVsbG9FSkJfQW5ub3RhdGlvbl9BZG1pbk9iamVjdCIsCiAgICAgICAgICAgICAgICBpbnRlcmZhY2VOYW1lID0gImpha2FydGEuam1zLkRlc3RpbmF0aW9uIiwKICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9ICJjb25uZWN0b3IuTXlBZG1pbk9iamVjdCIsCiAgICAgICAgICAgICAgICByZXNvdXJjZUFkYXB0ZXI9IiNhb2QtcmEiLAogICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHsib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZT1jb25uZWN0b3IuTXlBZG1pbk9iamVjdCJ9CiAgICAgICAgICAgKSwKLSAgICAgICAgICAKKwogICAgICAgICAgIEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uKAotICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAibW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24iLCAKLSAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTptb2R1bGUvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQWRtaW5PYmplY3QiLCAKKyAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gIm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uIiwKKyAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTptb2R1bGUvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQWRtaW5PYmplY3QiLAogICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZSA9ICJqYWthcnRhLmptcy5EZXN0aW5hdGlvbiIsCiAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAiY29ubmVjdG9yLk15QWRtaW5PYmplY3QiLAogICAgICAgICAgICAgICAgcmVzb3VyY2VBZGFwdGVyPSIjYW9kLXJhIiwKICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7Im9yZy5nbGFzc2Zpc2guYWRtaW4tb2JqZWN0LnJlc1R5cGU9Y29ubmVjdG9yLk15QWRtaW5PYmplY3QifQogICAgICAgICAgICksCi0gICAgICAgICAgCisKICAgICAgICAgICBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uIiwgCi0gICAgICAgICAgICAgICBuYW1lID0gImphdmE6Y29tcC9lbnYvSGVsbG9FSkJfQW5ub3RhdGlvbl9BZG1pbk9iamVjdCIsIAorICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiY29tcG9uZW50LXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24iLAorICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOmNvbXAvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQWRtaW5PYmplY3QiLAogICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZSA9ICJqYWthcnRhLmptcy5EZXN0aW5hdGlvbiIsCiAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAiY29ubmVjdG9yLk15QWRtaW5PYmplY3QiLAogICAgICAgICAgICAgICAgcmVzb3VyY2VBZGFwdGVyPSIjYW9kLXJhIiwKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICBsb29rdXBBZG1pbk9iamVjdCgiamF2YTphcHAvZW52L0hlbGxvRUpCX0REX0FkbWluT2JqZWN0IiwgdHJ1ZSk7CiAgICAgICAgIGxvb2t1cEFkbWluT2JqZWN0KCJqYXZhOm1vZHVsZS9lbnYvSGVsbG9FSkJfRERfQWRtaW5PYmplY3QiLCB0cnVlKTsKICAgICAgICAgbG9va3VwQWRtaW5PYmplY3QoImphdmE6Y29tcC9lbnYvSGVsbG9FSkJfRERfQWRtaW5PYmplY3QiLCB0cnVlKTsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0VKQjo6aGVsbG8oKSIpOwogICAgIH0KIApAQCAtMTI3LDYgKzEyNyw2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvZWpiL0hlbGxvU3RhdGVmdWxFSkIuamF2YQppbmRleCA0NTg4OGZhLi5jOWM0MTBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvZWpiL0hlbGxvU3RhdGVmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvZWpiL0hlbGxvU3RhdGVmdWxFSkIuamF2YQpAQCAtMTE1LDcgKzExNSw3IEBACiAgICAgICAgIGxvb2t1cEFkbWluT2JqZWN0KCJqYXZhOmFwcC9lbnYvSGVsbG9FSkJfRERfQWRtaW5PYmplY3QiLCB0cnVlKTsKICAgICAgICAgbG9va3VwQWRtaW5PYmplY3QoImphdmE6bW9kdWxlL2Vudi9IZWxsb0VKQl9ERF9BZG1pbk9iamVjdCIsIHRydWUpOwogICAgICAgICBsb29rdXBBZG1pbk9iamVjdCgiamF2YTpjb21wL2Vudi9IZWxsb0VKQl9ERF9BZG1pbk9iamVjdCIsIGZhbHNlKTsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZWZ1bEVKQiBkYXRhc291cmNlLWRlZmluaXRpb25zIFN1Y2Nlc3MiKTsKIAogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0Fic3RyYWN0UmVzb3VyY2VBZGFwdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9BYnN0cmFjdFJlc291cmNlQWRhcHRlci5qYXZhCmluZGV4IDA3YjlkNzguLjBlZmNjNWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0Fic3RyYWN0UmVzb3VyY2VBZGFwdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvQWJzdHJhY3RSZXNvdXJjZUFkYXB0ZXIuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIHRlc3ROYW1lOwogICAgIHByb3RlY3RlZCBib29sZWFuIGRlYnVnID0gdHJ1ZTsKIAotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHRlc3ROYW1lOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCmluZGV4IDU1NTMzZDQuLmY1OWIyYjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIENvbnRyb2xzIHsKICAgICBwdWJsaWMgc3RhdGljIE9iamVjdCByZWFkeUxvY2sgPSBuZXcgT2JqZWN0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCmluZGV4IDdlMzYzNWYuLjJiZTY1ZjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgRGVsaXZlcnlXb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTMxLDcgKzMxLDcgQEAKICAgICBwcml2YXRlIFN0cmluZyBvcDsKICAgICBwcml2YXRlIGJvb2xlYW4ga2VlcENvdW50OwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudGVyID0gMDsKLSAgICAKKwogICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgU3RyaW5nIG9wKSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtMzksNyArMzksNyBAQAogICAgICAgICB0aGlzLmtlZXBDb3VudCA9IGZhbHNlOwogICAgIH0KIAotICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgCisgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLAogICAgICAgICAgICAgU3RyaW5nIG9wLCBib29sZWFuIGtlZXBDb3VudCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAKICAgICAgICAgZGVidWcoIkVOVEVSLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL01ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKICAgICAgICAgICAgIC8vZXAuYmVmb3JlRGVsaXZlcnkob25NZXNzYWdlKTsKQEAgLTczLDExICs3MywxMSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvL2VwLmFmdGVyRGVsaXZlcnkoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC04OCwxNCArODgsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCmluZGV4IDEwMGNhY2UuLmZhOTNmNjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKICAgICB9CiAKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGZvcmdldChYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UuZm9yZ2V0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgfQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucHJlcGFyZTogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgICAgICByZXR1cm4gWEFSZXNvdXJjZS5YQV9PSzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgWGlkW10gcmVjb3ZlcihpbnQgZmxhZykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnJlY292ZXI6ICIgKyBmbGFnVG9TdHJpbmcoZmxhZykpOwogICAgICAgICByZXR1cm4gbnVsbDsKQEAgLTY2LDcgKzY2LDcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBzZXRUcmFuc2FjdGlvblRpbWVvdXQoaW50IHNlY29uZHMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzdGFydChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5zdGFydDogIiArIHhpZFRvU3RyaW5nKHhpZCkgKyAiLCIgKwogICAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKaW5kZXggYjViMGYwMi4uNGM5YzAxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAvKioKICAqIGNvbGxlY3Rpb24gb2YgbWVzc2FnZXMuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CiAKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICBTdHJpbmcgY29tbWFuZCAgPSBhcmdzWzBdOwogICAgICAgIFN0cmluZyBkZXN0TmFtZSA9IGFyZ3NbMV07CiAgICAgICAgU3RyaW5nIG1lc3NhZ2UgID0gYXJnc1syXTsKLSAgIAorCiAgICAgICAgaWYgKCEiYWRkIi5lcXVhbHMoY29tbWFuZCkpIHsKICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTXlDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTXlDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IDlmMjQ2NDguLjkyMmU3MWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL015Q29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9NeUNvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKICAgICBwcml2YXRlIENvbm5lY3Rpb25NYW5hZ2VyIGNtOwogICAgIHByaXZhdGUgTXlNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmOwogICAgIHByaXZhdGUgUmVmZXJlbmNlIHJlZjsKLSAgICAKKwogICAgIHB1YmxpYyBNeUNvbm5lY3Rpb25GYWN0b3J5KE15TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiwgQ29ubmVjdGlvbk1hbmFnZXIgY20pIHsKICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgdGhpcy5tY2YgPSBtY2Y7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9NeU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTXlNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCAwNWIzMTE4Li5hNTYxNzYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9NeU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL015TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICBwcml2YXRlIENvbm5lY3Rpb25NYW5hZ2VyIGNtOwogICAgIHByaXZhdGUgUHJpbnRXcml0ZXIgd3JpdGVyOwogICAgIHByaXZhdGUgVHJhbnNhY3Rpb25TdXBwb3J0TGV2ZWwgdHJhbnNhY3Rpb25TdXBwb3J0ID0gVHJhbnNhY3Rpb25TdXBwb3J0TGV2ZWwuTG9jYWxUcmFuc2FjdGlvbjs7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3ROYW1lKCkgewogICAgICAgICByZXR1cm4gdGVzdE5hbWU7CiAgICAgfQpAQCAtNjksNyArNjksNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihTdWJqZWN0IHN1YmplY3QsICBDb25uZWN0aW9uUmVxdWVzdEluZm8gcmVxSW5mbykgCisgICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKFN1YmplY3Qgc3ViamVjdCwgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyByZXFJbmZvKQogICAgICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQpAQCAtODAsNyArODAsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhTZXQgY2FuZGlkYXRlcywgU3ViamVjdCBzdWIsICBDb25uZWN0aW9uUmVxdWVzdEluZm8gcmVxSW5mbykgCisgICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uIG1hdGNoTWFuYWdlZENvbm5lY3Rpb25zKFNldCBjYW5kaWRhdGVzLCBTdWJqZWN0IHN1YiwgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyByZXFJbmZvKQogICAgICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQppbmRleCA2MTQzODFlLi40NDg5OWEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE15V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zMSw3ICszMSw3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIHN0b3AgPSBmYWxzZTsKICAgICBwcml2YXRlIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeTsKICAgICBwcml2YXRlIFdvcmtNYW5hZ2VyIHdtOwotICAgIAorCiAgICAgcHVibGljIE15V29yaygKICAgICAgICAgICAgIFN0cmluZyBuYW1lLCBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksIFdvcmtNYW5hZ2VyIHdtKSB7CiAgICAgICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7CkBAIC00OSw3ICs0OSw3IEBACiAgICAgICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpOwogCiAgICAgICAgICAgICAgICAgLyoKQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTgxLDE0ICs4MSwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQppbmRleCA1MTJlNWM2Li40YjVlNWYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKQEAgLTI1LDEyICsyNSwxMiBAQAogICogc28gdGhhdCB0aGUgYXBwIHNlcnZlciBjYW4gaW5zdGFudGlhdGUgYW5kIGNvbmZpZ3VyZQogICogaXQgYXQgdGhlIHJ1bnRpbWUuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIEBBY3RpdmF0aW9uKAogICAgICAgICBtZXNzYWdlTGlzdGVuZXJzID0ge2Nvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzc30KICkKLXB1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYyAKK3B1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYwogICAgIGltcGxlbWVudHMgQWN0aXZhdGlvblNwZWMsIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByaXZhdGUgU3RyaW5nIGRlc3RpbmF0aW9uTmFtZTsKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uTmFtZSAoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uTmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvbk5hbWUgKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvbk5hbWUoKSBjYWxsZWQuLi4gbmFtZSA9ICIgKyBuYW1lKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbk5hbWUgPSBuYW1lOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25UeXBlKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvblR5cGU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25UeXBlIChTdHJpbmcgdHlwZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25UeXBlICgpIGNhbGxlZC4uLiB0eXBlID0gIiArIHR5cGUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uVHlwZT0gdHlwZTsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3RQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0UHJvcDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0UHJvcCAoU3RyaW5nIHRlc3RQcm9wKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0UHJvcCAoKSBjYWxsZWQuLi4gdGVzdFByb3AgPSAiICsgdGVzdFByb3ApOwogICAgICAgICB0aGlzLnRlc3RQcm9wID0gdGVzdFByb3A7CkBAIC03NCw3ICs3NCw3IEBACiAgICAgcHVibGljIEludGVnZXIgZ2V0VGVzdEludGVnZXJQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0SW50ZWdlclByb3A7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdEludGVnZXJQcm9wIChJbnRlZ2VyIHRlc3RQcm9wMSkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdEludGVnZXJQcm9wICgpIGNhbGxlZC4uLiB0ZXN0SW50ZWdlclByb3AgPSAiICsgdGVzdFByb3AxKTsKICAgICAgICAgdGhpcy50ZXN0SW50ZWdlclByb3AgPSB0ZXN0UHJvcDE7CkBAIC05OCw3ICs5OCw3IEBACiAKICAgICAgIH0KIAotICAgfSAKKyAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkZWJ1ZyAoU3RyaW5nIG1lc3NhZ2UpCiAgICAgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCmluZGV4IDI4ZDllMjkuLmQxYzI2YmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKQEAgLTI5LDE0ICsyOSwxNCBAQAogCiAvKioKICAqIFRoaXMgaXMgYSBzYW1wbGUgcmVzb3VyY2UgYWRhcHRlcgotICogCisgKgogICogQGF1dGhvciBRaW5ncWluZyBPdXlhbmcKICAqLwogQENvbm5lY3RvcigKIC8qIG1vZHVsZU5hbWU9Ik15IFNpbXBsZSBSQVIiLCAqLwotICAgIGRpc3BsYXlOYW1lID0gIlNpbXBsZSBSZXNvdXJjZSBBZGFwdGVyIiwgCi0gICAgdmVuZG9yTmFtZSA9ICJKYXZhIFNvZnR3YXJlIiwgCi0gICAgZWlzVHlwZSA9ICJHZW5lcmljIFR5cGUiLCAKKyAgICBkaXNwbGF5TmFtZSA9ICJTaW1wbGUgUmVzb3VyY2UgQWRhcHRlciIsCisgICAgdmVuZG9yTmFtZSA9ICJKYXZhIFNvZnR3YXJlIiwKKyAgICBlaXNUeXBlID0gIkdlbmVyaWMgVHlwZSIsCiAgICAgdmVyc2lvbiA9ICIxLjBBbHBoYSIsCiAgICAgdHJhbnNhY3Rpb25TdXBwb3J0PVRyYW5zYWN0aW9uU3VwcG9ydExldmVsLlhBVHJhbnNhY3Rpb24pCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQppbmRleCBlZTBmYWU5Li5lMjQ4NTA2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgVGVzdFdNV29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zNyw4ICszNyw4IEBACiAgICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUpIHsKICAgICAgICAgdGhpcyhpZCwgaXNSb2d1ZSwgZmFsc2UsIG51bGwpOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSwgCisKKyAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSwKICAgICAgICAgICAgIGJvb2xlYW4gZG9OZXN0LCBFeGVjdXRpb25Db250ZXh0IGN0eCkgewogICAgICAgICB0aGlzLmlkID0gaWQ7CiAgICAgICAgIHRoaXMuaXNSb2d1ZSA9IGlzUm9ndWU7CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKFdvcmtFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBpZiAoZXguZ2V0RXJyb3JDb2RlKCkuZXF1YWxzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmtFeGNlcHRpb24uVFhfQ09OQ1VSUkVOVF9XT1JLX0RJU0FMTE9XRUQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEFTUzogQ0FVR0hUIEVYUEVDVEVEID0gIiArIGV4LmdldEVycm9yQ29kZSgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZBSUw6IENBVUdIVCBVTkVYUEVDVEVEID0gIiArIGV4LmdldEVycm9yQ29kZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCiAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKG5lc3RlZFdvcmssIDEqMTAwMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvVjNXb3JrRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvVjNXb3JrRGlzcGF0Y2hlci5qYXZhCmluZGV4IDhhZGYzY2MuLjRiNDM3ODMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1YzV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9WM1dvcmtEaXNwYXRjaGVyLmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChuZXcgRmFrZVhBUmVzb3VyY2UoKSk7CiAgICAgICAgICAgICBpbnQgbnVtT2ZNZXNzYWdlcyA9IDE7CkBAIC03Miw3ICs3Miw3IEBACiAgICAgICAgICAgICBkZWJ1ZygiVjNXb3JrRGlzcGF0Y2hlciBjYWxsaW5nIERPTkUoKSIpOwogICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgZGVidWcoIlYzV29ya0Rpc3BhdGNoZXIgZmluaXNoZWQgY2FsbGluZyBET05FKCkiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCA0MjI0OWRjLi5hMTQ0NDNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBXb3JrRGlzcGF0Y2hlciBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC00MywxMSArNDMsMTEgQEAKICAgICBwcm90ZWN0ZWQgQWN0aXZhdGlvblNwZWMgc3BlYzsKICAgICBwcm90ZWN0ZWQgV29ya01hbmFnZXIgd207CiAgICAgcHJvdGVjdGVkIFhBVGVybWluYXRvciB4YTsKLSAgICAKKwogICAgIHB1YmxpYyBXb3JrRGlzcGF0Y2hlcigKICAgICAgICAgICAgIFN0cmluZyBpZCwKICAgICAgICAgICAgIEJvb3RzdHJhcENvbnRleHQgY3R4LAotICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LCAKKyAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwKICAgICAgICAgICAgIEFjdGl2YXRpb25TcGVjIHNwZWMpIHsKICAgICAgICAgdGhpcy5pZCAgICAgID0gaWQ7CiAgICAgICAgIHRoaXMuY3R4ICAgICA9IGN0eDsKQEAgLTYwLDcgKzYwLDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAKICAgICAgICAgZGVidWcoIkVOVEVSLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIGRlYnVnKCJXQUlULi4uIik7CkBAIC04MiwyNiArODIsMjYgQEAKICAgICAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgICAgICBNZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwotICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7IAorICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7CiAgICAgICAgICAgICAgICAgICAgIC8vd20uZG9Xb3JrKGQsIDAsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChuZXcgRmFrZVhBUmVzb3VyY2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIGludCBudW1PZk1lc3NhZ2VzID0gNTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9pbXBvcnRpbmcgdHJhbnNhY3Rpb24KIAogICAgICAgICAgICAgICAgICAgICAvL3dyaXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBFeGVjdXRpb25Db250ZXh0IGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwogCi0gICAgICAgICAgICAgICAgICAgIERlbGl2ZXJ5V29yayB3ID0gCisgICAgICAgICAgICAgICAgICAgIERlbGl2ZXJ5V29yayB3ID0KICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJXUklURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJET05FIFdSSVRFIFRPIERCIik7CiAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IG51bU9mTWVzc2FnZXM7CiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvcm9sbGJhY2sKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7CkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIkRFTEVURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJERUxFVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTE5NCw3ICsxOTQsNyBAQAogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBpZiAoWEFSZXNvdXJjZS5YQV9PSyA9PSB4YS5wcmVwYXJlKGVjLmdldFhpZCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiWEEgUFJFUEFSRS9DT01NSVQuIERPTkUgV1JJVEUgVE8gREIgIik7CkBAIC0yMDYsMTkgKzIwNiwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gMzsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZSBhbGwuCiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgMSwgIkRFTEVURV9BTEwiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkRPTkUgREVMRVRFIEFMTCBGUk9NIERCIik7CiAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IDA7CiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjQ1LDcgKzI0NSw3IEBACiAgICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtMjYwLDE0ICsyNjAsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMjkwLDEzICsyOTAsMTMgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vU2xlZXAgZm9yIDUgc2Vjb25kcwogICAgICAgICAgICAgLy9UaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDUqMTAwMCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIC8vTm90aWZ5IHRoZSBjbGllbnQgdG8gY2hlY2sgdGhlIHJlc3VsdHMKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5QWxsKCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnlBbGwoKTsKIAogICAgICAgICAgICAgICAgIC8vV2FpdCB1bnRpbCByZXN1bHRzIGFyZSB2ZXJpZmllZCBieSB0aGUgY2xpZW50Ci0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsKIAogICAgICAgICAgICAgICAgIGlmIChzdG9wKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKaW5kZXggNzdkYmYzNC4uNmJkOWU1NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKQEAgLTM2LDggKzM2LDggQEAKICAgICBwdWJsaWMgaW50IGJyYW5jaFF1YWxpZmllcjsKICAgICBwdWJsaWMgaW50IGdsb2JhbFR4SUQ7CiAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsgCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7IAorICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OworICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OwogCiAgICAgcHVibGljIFhJRCgpIHsKICAgICAgICAgaW50IGZvbyA9IElEKys7CkBAIC01NSwxMCArNTUsMTAgQEAKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgIC8vIEl0IGNhbid0IGJlIGVxdWFsCiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgb3RoZXIgPSAoWElEKW87ICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvdGhlciBYSUQsIG5vdyBwcm9wZXJseSBjYXN0Ci0gICAgICAgIAotICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRCAKKworICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRAogICAgICAgICAgICAgICAgICYmIHRoaXMuYnJhbmNoUXVhbGlmaWVyID09IG90aGVyLmJyYW5jaFF1YWxpZmllcgogICAgICAgICAgICAgICAgICYmIHRoaXMuZ2xvYmFsVHhJRCA9PSBvdGhlci5nbG9iYWxUeElEKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk4LDcgKzk4LDcgQEAKICAgICAgICAgICAgICAgICAiZm9ybWF0SUQoIiAgICAgKyBmb3JtYXRJRCAgICAgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImJyYW5jaFF1YWxpZmllciAoIiArIGJyYW5jaFF1YWxpZmllciArICIpLCAiICsKICAgICAgICAgICAgICAgICAiZ2xvYmFsVHhJRCgiICsgZ2xvYmFsVHhJRCArICIpfSIpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gczsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9zZXJ2bGV0L1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9zZXJ2bGV0L1NlcnZsZXQuamF2YQppbmRleCBmMzY1YzdmLi5lYTM1MTBiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvc2VydmxldC9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3NlcnZsZXQvU2VydmxldC5qYXZhCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUFkYXB0ZXI9IiNhb2QtcmEiLAogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHsib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZT1jb25uZWN0b3IuTXlBZG1pbk9iamVjdCJ9CiAgICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249Im1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTptb2R1bGUvZW52L1NlcnZsZXRfQWRtaW5PYmplY3QiLApAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VBZGFwdGVyPSIjYW9kLXJhIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7Im9yZy5nbGFzc2Zpc2guYWRtaW4tb2JqZWN0LnJlc1R5cGU9Y29ubmVjdG9yLk15QWRtaW5PYmplY3QifQogICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJjb21wb25lbnQtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gImphdmE6Y29tcC9lbnYvU2VydmxldF9BZG1pbk9iamVjdCIsCkBAIC05MSw3ICs5MSw3IEBACiAKICAgICBARUpCCiAgICAgcHJpdmF0ZSAgSGVsbG8gaGVsbG9TdGF0ZWxlc3M7Ci0gICAgCisKICAgICBARUpCKGJlYW5OYW1lID0gIkhlbGxvU3RhdGVmdWxFSkIiKQogICAgIHByaXZhdGUgIEhlbGxvU3RhdGVmdWwgaGVsbG9TdGF0ZWZ1bDsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDczOWQ0ZjUuLmRjZjAyZDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIzICsxNSwyMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2J1aWxkLnhtbAppbmRleCA1YjNiZWNkLi5jNWI3Nzk4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2J1aWxkLnhtbApAQCAtMzcsMjUgKzM3LDI1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImluZm8iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAJPGVjaG8gbWVzc2FnZT0iYnVpbGQuY2xhc3Nlcy5kaXIgaXMgJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLSAgICAJPGVjaG8gbWVzc2FnZT0iczFhc3Rlc3QuY2xhc3NwYXRoIGlzICR7czFhc3Rlc3QuY2xhc3NwYXRofSIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJidWlsZC5jbGFzc2VzLmRpciBpcyAke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJzMWFzdGVzdC5jbGFzc3BhdGggaXMgJHtzMWFzdGVzdC5jbGFzc3BhdGh9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtdXQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICA8amF2YWMgc3JjZGlyPSJ1dCIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCi0gICAgICAJICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9qdW5pdC5qYXI6JHtzMWFzdGVzdC5jbGFzc3BhdGh9IgotICAgICAgCSAgICBkZWJ1Zz0ib24iCisgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9qdW5pdC5qYXI6JHtzMWFzdGVzdC5jbGFzc3BhdGh9IgorICAgICAgICAgICAgICBkZWJ1Zz0ib24iCiAgICAgICAgICAgICBpbmNsdWRlYW50cnVudGltZT0iZmFsc2UiCi0gICAgICAJICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+CisgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC11dCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPCEtLSBidWlsZCBhIHNwZWNpYWwgZWFyIHdoaWNoIG9ubHkgaW5jbHVkZXMgZGVwbG95bWVudCBkZXNjcmlwdG9ycy0tPgogICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0vdGVtcCIvPgotICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gICAKLSAgICAgIDxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vZGVzY3JpcHRvci91dC1hcHBsaWNhdGlvbi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC1VVC5lYXIiPiAKKyAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CisgICAgICA8Y29weSBmaWxlPSIke2Jhc2VkaXJ9L2Rlc2NyaXB0b3IvdXQtYXBwbGljYXRpb24ueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC1VVC5lYXIiPgogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICAgIDwvZmlsZXNldD4KQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgIDx1bmphciBzcmM9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLVVULmVhciIgZGVzdD0iJHthc3NlbWJsZS5kaXJ9L3RlbXAvJHthcHBuYW1lfUFwcC1VVCIvPgogCiAgICAgPC90YXJnZXQ+Ci0gICAgCQorCiAgICAgPHRhcmdldCBuYW1lPSJydW4tdXQiIGRlcGVuZHM9ImNvbXBpbGUtdXQiPgogICAgICAgPGp1bml0IHByaW50c3VtbWFyeT0ieWVzIiBoYWx0b25lcnJvcj0ibm8iIGhhbHRvbmZhaWx1cmU9Im5vIiBmb3JrPSJ0cnVlIj4KICAgICAgICAgPGZvcm1hdHRlciB0eXBlPSJwbGFpbiIgdXNlZmlsZT0iZmFsc2UiLz4KQEAgLTk1LDcgKzk1LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgIAkgIDxlY2hvIG1lc3NhZ2U9ImFzc2VtYmxlLmRpciA9ICR7YXNzZW1ibGUuZGlyfSIvPgorICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImFzc2VtYmxlLmRpciA9ICR7YXNzZW1ibGUuZGlyfSIvPgogICAgICAgICA8IS0tYnVpbGQgYW5kIHBhY2thZ2UgLndhciBmaXJzdCBzbyBpdCBkb2Vzbid0IGNvbnRhaW4gZWpiIGJlYW4gIS0tPgogICAgICAgICA8IS0tY2xhc3NlcyB0aGF0IGhhdmUgQFN0YXRlbGVzcy9AU3RhdGV1bCAhLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgpAQCAtMTE4LDExICsxMTgsMTEgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iKiovSGVsbG8qKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIvPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtdXQiLz4KLSAgICAgICAgCisKICAgICAgICAgPGFudCBkaXI9InJhIiB0YXJnZXQ9ImFsbCIvPgogICAgIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGQ3ZTMwMDkuLjkyZjYwZWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vY2xpZW50L0NsaWVudC5qYXZhCkBAIC01OCw3ICs1OCw3IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRjTmFtZSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0Y05hbWUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB0aHJvdyBlOwpAQCAtNzksNyArNzksNyBAQAogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7CiAgICAgICAgIGlmIChjb2RlICE9IDIwMCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL2Nvbm5lY3Rvci1yZXNvdXJjZS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvY29ubmVjdG9yLXJlc291cmNlLnhtbAppbmRleCA1YzU0NGMxLi5hM2I5NDU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvY29ubmVjdG9yLXJlc291cmNlLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvY29ubmVjdG9yLXJlc291cmNlLnhtbApAQCAtMjAsMTIgKzIwLDEyIEBACiA8Y29ubmVjdG9yLXJlc291cmNlIHhtbG5zPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIgogICAgICAgICAgICAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSBodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2phdmFlZV83LnhzZD4KLQk8ZGVzY3JpcHRpb24+Z2xvYmFsLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gYXBwbGljYXRpb24gREQ8L2Rlc2NyaXB0aW9uPgotCTxuYW1lPmphdmE6Z2xvYmFsL2Vudi9BcHBsaWNhdGlvbl9MZXZlbF9Db25uZWN0aW9uRmFjdG9yeTwvbmFtZT4KLQk8Y2xhc3MtbmFtZT5qYWthcnRhLnJlc291cmNlLmNjaS5Db25uZWN0aW9uRmFjdG9yeTwvY2xhc3MtbmFtZT4KLQk8cmVzb3VyY2UtYWRhcHRlcj5jcmQtcmE8L3Jlc291cmNlLWFkYXB0ZXI+Ci0JPHByb3BlcnR5PgotCQk8bmFtZT50cmFuc2FjdGlvblN1cHBvcnQ8L25hbWU+Ci0JCTx2YWx1ZT5Mb2NhbFRyYW5zYWN0aW9uPC92YWx1ZT4KLQk8L3Byb3BlcnR5PgorICAgIDxkZXNjcmlwdGlvbj5nbG9iYWwtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBhcHBsaWNhdGlvbiBERDwvZGVzY3JpcHRpb24+CisgICAgPG5hbWU+amF2YTpnbG9iYWwvZW52L0FwcGxpY2F0aW9uX0xldmVsX0Nvbm5lY3Rpb25GYWN0b3J5PC9uYW1lPgorICAgIDxjbGFzcy1uYW1lPmpha2FydGEucmVzb3VyY2UuY2NpLkNvbm5lY3Rpb25GYWN0b3J5PC9jbGFzcy1uYW1lPgorICAgIDxyZXNvdXJjZS1hZGFwdGVyPmNyZC1yYTwvcmVzb3VyY2UtYWRhcHRlcj4KKyAgICA8cHJvcGVydHk+CisgICAgICAgIDxuYW1lPnRyYW5zYWN0aW9uU3VwcG9ydDwvbmFtZT4KKyAgICAgICAgPHZhbHVlPkxvY2FsVHJhbnNhY3Rpb248L3ZhbHVlPgorICAgIDwvcHJvcGVydHk+CiA8L2Nvbm5lY3Rvci1yZXNvdXJjZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCA4YjJiNWNmLi5hZDljZjJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0xOCw5ICsxOCw5IEBACiAtLT4KIAogPGVqYi1qYXIgeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLSAgICAgICAgIG1ldGFkYXRhLWNvbXBsZXRlPSJmYWxzZSIgCi0gICAgICAgICB2ZXJzaW9uPSIzLjIiIAorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICAgIG1ldGFkYXRhLWNvbXBsZXRlPSJmYWxzZSIKKyAgICAgICAgIHZlcnNpb249IjMuMiIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSBodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18yLnhzZCI+CiAgIDxtb2R1bGUtbmFtZT5hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZWpiPC9tb2R1bGUtbmFtZT4KICAgPGVudGVycHJpc2UtYmVhbnM+CkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICA8ZWpiLW5hbWU+SGVsbG9TdGF0ZWZ1bEVKQjwvZWpiLW5hbWU+CiAgICAgICA8YnVzaW5lc3MtbG9jYWw+Y29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uMy5IZWxsb1N0YXRlZnVsPC9idXNpbmVzcy1sb2NhbD4KICAgICAgIDxlamItY2xhc3M+Y29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uMy5IZWxsb1N0YXRlZnVsRUpCPC9lamItY2xhc3M+Ci0gICAgICAKKwogICAgICAgPGFkbWluaXN0ZXJlZC1vYmplY3Q+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5nbG9iYWwtc2NvcGUgcmVzb3VyY2UgdG8gYmUgbW9kaWZpZWQgYnkgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOmdsb2JhbC9lbnYvSGVsbG9TdGF0ZWZ1bEVKQl9Nb2RCeUREX0FkbWluT2JqZWN0PC9uYW1lPgpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICAgIDx2YWx1ZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgICAKKwogICAgICAgPGFkbWluaXN0ZXJlZC1vYmplY3Q+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5tb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOm1vZHVsZS9lbnYvSGVsbG9TdGF0ZWZ1bEVKQl9ERF9BZG1pbk9iamVjdDwvbmFtZT4KQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgICA8dmFsdWU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9hZG1pbmlzdGVyZWQtb2JqZWN0PgotICAgICAgCisKICAgICAgIDxhZG1pbmlzdGVyZWQtb2JqZWN0PgogICAgICAgICA8ZGVzY3JpcHRpb24+YXBwbGljYXRpb24tc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOmFwcC9lbnYvSGVsbG9TdGF0ZWZ1bEVKQl9ERF9BZG1pbk9iamVjdDwvbmFtZT4KQEAgLTc3LDcgKzc3LDcgQEAKICAgICAgICAgICA8dmFsdWU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9hZG1pbmlzdGVyZWQtb2JqZWN0PgotICAgICAgCisKICAgICAgIDxhZG1pbmlzdGVyZWQtb2JqZWN0PgogICAgICAgICA8ZGVzY3JpcHRpb24+Y29tcG9uZW50LXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTpjb21wL2Vudi9IZWxsb1N0YXRlZnVsRUpCX0REX0FkbWluT2JqZWN0PC9uYW1lPgpAQCAtODksNyArODksNyBAQAogICAgICAgICAgIDx2YWx1ZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgICAKKwogICAgIDwvc2Vzc2lvbj4KICAgICA8c2Vzc2lvbj4KICAgICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9FSkI8L2Rpc3BsYXktbmFtZT4KQEAgLTEyMCw3ICsxMjAsNyBAQAogICAgICAgICAgIDx2YWx1ZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgICAKKwogICAgICAgPGFkbWluaXN0ZXJlZC1vYmplY3Q+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5hcHBsaWNhdGlvbi1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6YXBwL2Vudi9IZWxsb0VKQl9ERF9BZG1pbk9iamVjdDwvbmFtZT4KQEAgLTE1Niw4ICsxNTYsOCBAQAogICAgICAgICAgIDx2YWx1ZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgICAKKwogICAgIDwvc2Vzc2lvbj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgotICAKKwogPC9lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LWFwcGxpY2F0aW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1hcHBsaWNhdGlvbi54bWwKaW5kZXggZGQzZmJlYy4uNjNhOWE4YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LWFwcGxpY2F0aW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtYXBwbGljYXRpb24ueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8YXBwbGljYXRpb24geG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjciCiAgICAgICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIGh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvYXBwbGljYXRpb25fNy54c2QiPgogICAgIDxkaXNwbGF5LW5hbWU+YWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uQXBwPC9kaXNwbGF5LW5hbWU+Ci0gICAgCisKICAgICA8bW9kdWxlPgogICAgICAgICA8amF2YT5hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tY2xpZW50LmphcjwvamF2YT4KICAgICA8L21vZHVsZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1lbnRpdHktZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtZW50aXR5LWVqYi1qYXIueG1sCmluZGV4IDY2YWE3YmEuLjdhYjJhOTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1lbnRpdHktZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LWVudGl0eS1lamItamFyLnhtbApAQCAtMTgsMTEgKzE4LDExIEBACiAtLT4KIAogPGVqYi1qYXIgeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLSAgICAgICAgIG1ldGFkYXRhLWNvbXBsZXRlPSJmYWxzZSIgdmVyc2lvbj0iMy4yIiAKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgICBtZXRhZGF0YS1jb21wbGV0ZT0iZmFsc2UiIHZlcnNpb249IjMuMiIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSBodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18yLnhzZCI+CiAgIDxtb2R1bGUtbmFtZT5hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZWpiPC9tb2R1bGUtbmFtZT4KLSAgCisKICAgPGVudGVycHJpc2UtYmVhbnM+CiAgICAgPGVudGl0eT4KICAgICAgIDxlamItbmFtZT5IZWxsb0VudGl0eTwvZWpiLW5hbWU+CkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgICAgPHZhbHVlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvYWRtaW5pc3RlcmVkLW9iamVjdD4KLSAgICAgIAorCiAgICAgICA8YWRtaW5pc3RlcmVkLW9iamVjdD4KICAgICAgICAgPGRlc2NyaXB0aW9uPm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6bW9kdWxlL2Vudi9FbnRpdHlfQWRtaW5PYmplY3Q8L25hbWU+CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgPHZhbHVlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvYWRtaW5pc3RlcmVkLW9iamVjdD4KLSAgICAgIAorCiAgICAgICA8YWRtaW5pc3RlcmVkLW9iamVjdD4KICAgICAgICAgPGRlc2NyaXB0aW9uPmNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6Y29tcC9lbnYvRW50aXR5X0FkbWluT2JqZWN0PC9uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LWludGVyY2VwdG9yLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LWludGVyY2VwdG9yLWVqYi1qYXIueG1sCmluZGV4IDI0OGI4NjEuLmM4ZTljOTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1pbnRlcmNlcHRvci1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtaW50ZXJjZXB0b3ItZWpiLWphci54bWwKQEAgLTE4LDggKzE4LDggQEAKIC0tPgogCiA8ZWpiLWphciB4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotICAgICAgICAgbWV0YWRhdGEtY29tcGxldGU9ImZhbHNlIiB2ZXJzaW9uPSIzLjIiIAorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICAgIG1ldGFkYXRhLWNvbXBsZXRlPSJmYWxzZSIgdmVyc2lvbj0iMy4yIgogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIGh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzIueHNkIj4KICAgPG1vZHVsZS1uYW1lPmFkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lamI8L21vZHVsZS1uYW1lPgogICA8aW50ZXJjZXB0b3JzPgpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICAgIDx2YWx1ZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgICAKKwogICAgICAgPGFkbWluaXN0ZXJlZC1vYmplY3Q+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5tb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOm1vZHVsZS9lbnYvSW50ZXJjZXB0b3JfQWRtaW5PYmplY3Q8L25hbWU+CkBAIC00OSw3ICs0OSw3IEBACiAgICAgICAgICAgPHZhbHVlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvYWRtaW5pc3RlcmVkLW9iamVjdD4KLSAgICAgIAorCiAgICAgICA8YWRtaW5pc3RlcmVkLW9iamVjdD4KICAgICAgICAgPGRlc2NyaXB0aW9uPmNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6Y29tcC9lbnYvSW50ZXJjZXB0b3JfQWRtaW5PYmplY3Q8L25hbWU+CkBAIC02Myw1ICs2Myw1IEBACiAgICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+CiAgICAgPC9pbnRlcmNlcHRvcj4KICAgPC9pbnRlcmNlcHRvcnM+Ci0gIAorCiA8L2VqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtbWRiLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LW1kYi1lamItamFyLnhtbAppbmRleCBlZmQ4OWY0Li43NGVjYWQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtbWRiLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1tZGItZWpiLWphci54bWwKQEAgLTE4LDggKzE4LDggQEAKIC0tPgogCiA8ZWpiLWphciB4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotICAgICAgICAgbWV0YWRhdGEtY29tcGxldGU9ImZhbHNlIiB2ZXJzaW9uPSIzLjIiIAorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICAgIG1ldGFkYXRhLWNvbXBsZXRlPSJmYWxzZSIgdmVyc2lvbj0iMy4yIgogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIGh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzIueHNkIj4KICAgPG1vZHVsZS1uYW1lPmFkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lamI8L21vZHVsZS1uYW1lPgogICA8ZW50ZXJwcmlzZS1iZWFucz4KQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICA8dmFsdWU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9hZG1pbmlzdGVyZWQtb2JqZWN0PgotICAgICAgCisKICAgICAgIDxhZG1pbmlzdGVyZWQtb2JqZWN0PgogICAgICAgICA8ZGVzY3JpcHRpb24+bW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTptb2R1bGUvZW52L01EQl9BZG1pbk9iamVjdDwvbmFtZT4KQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgICA8dmFsdWU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9hZG1pbmlzdGVyZWQtb2JqZWN0PgotICAgICAgCisKICAgICAgIDxhZG1pbmlzdGVyZWQtb2JqZWN0PgogICAgICAgICA8ZGVzY3JpcHRpb24+Y29tcG9uZW50LXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTpjb21wL2Vudi9NREJfQWRtaW5PYmplY3Q8L25hbWU+CkBAIC02NCw4ICs2NCw4IEBACiAgICAgICAgICAgPHZhbHVlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvYWRtaW5pc3RlcmVkLW9iamVjdD4KLSAgICAgIAorCiAgICAgPC9tZXNzYWdlLWRyaXZlbj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgotICAKKwogPC9lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LXNlc3Npb24tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtc2Vzc2lvbi1lamItamFyLnhtbAppbmRleCBjNzIyMjk1Li4zN2UwMDNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtc2Vzc2lvbi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtc2Vzc2lvbi1lamItamFyLnhtbApAQCAtMTgsOCArMTgsOCBAQAogLS0+CiAKIDxlamItamFyIHhtbG5zPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIgotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0gICAgICAgICBtZXRhZGF0YS1jb21wbGV0ZT0iZmFsc2UiIHZlcnNpb249IjMuMiIgCisgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgICAgbWV0YWRhdGEtY29tcGxldGU9ImZhbHNlIiB2ZXJzaW9uPSIzLjIiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9lamItamFyXzNfMi54c2QiPgogICA8bW9kdWxlLW5hbWU+YWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVqYjwvbW9kdWxlLW5hbWU+CiAgIDxlbnRlcnByaXNlLWJlYW5zPgpAQCAtMjgsNyArMjgsNyBAQAogICAgICAgPGVqYi1uYW1lPkhlbGxvU3RhdGVmdWxFSkI8L2VqYi1uYW1lPgogICAgICAgPGJ1c2luZXNzLWxvY2FsPmNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbjMuSGVsbG9TdGF0ZWZ1bDwvYnVzaW5lc3MtbG9jYWw+CiAgICAgICA8ZWpiLWNsYXNzPmNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbjMuSGVsbG9TdGF0ZWZ1bEVKQjwvZWpiLWNsYXNzPgotICAgICAgCisKICAgICAgIDxhZG1pbmlzdGVyZWQtb2JqZWN0PgogICAgICAgICA8ZGVzY3JpcHRpb24+Z2xvYmFsLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTpnbG9iYWwvZW52L1N0YXRlZnVsRUpCX0FkbWluT2JqZWN0PC9uYW1lPgpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgIDx2YWx1ZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgICAKKwogICAgICAgPGFkbWluaXN0ZXJlZC1vYmplY3Q+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5tb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOm1vZHVsZS9lbnYvU3RhdGVmdWxFSkJfQWRtaW5PYmplY3Q8L25hbWU+CkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgICAgPHZhbHVlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvYWRtaW5pc3RlcmVkLW9iamVjdD4KLSAgICAgIAorCiAgICAgICA8YWRtaW5pc3RlcmVkLW9iamVjdD4KICAgICAgICAgPGRlc2NyaXB0aW9uPmNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6Y29tcC9lbnYvU3RhdGVmdWxFSkJfQWRtaW5PYmplY3Q8L25hbWU+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgICAgPHZhbHVlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvYWRtaW5pc3RlcmVkLW9iamVjdD4KLSAgICAgIAorCiAgICAgPC9zZXNzaW9uPgogICAgIDxzZXNzaW9uPgogICAgICAgPGRpc3BsYXktbmFtZT5IZWxsb0VKQjwvZGlzcGxheS1uYW1lPgpAQCAtODMsNyArODMsNyBAQAogICAgICAgICAgIDx2YWx1ZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgICAKKwogICAgICAgPGFkbWluaXN0ZXJlZC1vYmplY3Q+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5tb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOm1vZHVsZS9lbnYvSGVsbG9FSkJfQWRtaW5PYmplY3Q8L25hbWU+CkBAIC05NSw3ICs5NSw3IEBACiAgICAgICAgICAgPHZhbHVlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvYWRtaW5pc3RlcmVkLW9iamVjdD4KLSAgICAgIAorCiAgICAgICA8YWRtaW5pc3RlcmVkLW9iamVjdD4KICAgICAgICAgPGRlc2NyaXB0aW9uPmNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6Y29tcC9lbnYvSGVsbG9FSkJfQWRtaW5PYmplY3Q8L25hbWU+CkBAIC0xMDcsOCArMTA3LDggQEAKICAgICAgICAgICA8dmFsdWU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9hZG1pbmlzdGVyZWQtb2JqZWN0PgotICAgICAgCisKICAgICA8L3Nlc3Npb24+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KLSAgCisKIDwvZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LXdlYi54bWwKaW5kZXggN2ZlMzE3ZS4uNjY0MzYwMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LXdlYi54bWwKQEAgLTE4LDggKzE4LDggQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiICAgIAotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIHdlYi1hcHBfM18xLnhzZCIgICAgCisgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIHdlYi1hcHBfM18xLnhzZCIKICAgICAgICAgIHZlcnNpb249IjMuMSI+CiAKICAgICA8ZGlzcGxheS1uYW1lPmFkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbjwvZGlzcGxheS1uYW1lPgpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAgPHZhbHVlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC92YWx1ZT4KICAgICAgICA8L3Byb3BlcnR5PgogICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgCisKICAgICAgPGFkbWluaXN0ZXJlZC1vYmplY3Q+CiAgICAgICAgPGRlc2NyaXB0aW9uPm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIFdlYiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgPG5hbWU+amF2YTptb2R1bGUvZW52L0FkbWluT2JqZWN0PC9uYW1lPgpAQCAtNjgsNiArNjgsNiBAQAogICAgICAgICAgPHZhbHVlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC92YWx1ZT4KICAgICAgICA8L3Byb3BlcnR5PgogICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgCisKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA5NDc2ZTM0Li5lMDJlZGI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMTgsOCArMTgsOCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIgotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgICAgCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgd2ViLWFwcF8zXzEueHNkIiAgIAorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSB3ZWItYXBwXzNfMS54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIzLjEiCiAgICAgICAgICBtZXRhZGF0YS1jb21wbGV0ZT0iZmFsc2UiPgogCkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgICA8dmFsdWU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3ZhbHVlPgogICAgICAgIDwvcHJvcGVydHk+CiAgICAgIDwvYWRtaW5pc3RlcmVkLW9iamVjdD4KLSAgICAKKwogICAgICA8YWRtaW5pc3RlcmVkLW9iamVjdD4KICAgICAgICA8ZGVzY3JpcHRpb24+bW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gV2ViIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICA8bmFtZT5qYXZhOm1vZHVsZS9lbnYvV2ViX0REX0FkbWluT2JqZWN0PC9uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9lamIvSGVsbG9FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZWpiL0hlbGxvRUpCLmphdmEKaW5kZXggZjI0M2M1NC4uZmNjZjkwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9lamIvSGVsbG9FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2VqYi9IZWxsb0VKQi5qYXZhCkBAIC0zMywzNSArMzMsMzUgQEAKICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0geyJvcmcuZ2xhc3NmaXNoLmFkbWluLW9iamVjdC5yZXNUeXBlPWNvbm5lY3Rvci5NeUFkbWluT2JqZWN0In0KICAgICAgICAgICApLAogICAgICAgICAgIEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uKAotICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiZ2xvYmFsLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24iLCAKLSAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTpnbG9iYWwvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQWRtaW5PYmplY3QiLCAKKyAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImdsb2JhbC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uIiwKKyAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTpnbG9iYWwvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQWRtaW5PYmplY3QiLAogICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZSA9ICJqYWthcnRhLmptcy5EZXN0aW5hdGlvbiIsCiAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAiY29ubmVjdG9yLk15QWRtaW5PYmplY3QiLAogICAgICAgICAgICAgICAgcmVzb3VyY2VBZGFwdGVyPSJhb2QtcmEiLAogICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHsib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZT1jb25uZWN0b3IuTXlBZG1pbk9iamVjdCJ9CiAgICAgICAgICAgKSwKLSAgICAgICAgICAKKwogICAgICAgICAgIEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uKAotICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiYXBwbGljYXRpb24tc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbiIsIAotICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOmFwcC9lbnYvSGVsbG9FSkJfQW5ub3RhdGlvbl9BZG1pbk9iamVjdCIsIAorICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiYXBwbGljYXRpb24tc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbiIsCisgICAgICAgICAgICAgICBuYW1lID0gImphdmE6YXBwL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0FkbWluT2JqZWN0IiwKICAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWUgPSAiamFrYXJ0YS5qbXMuRGVzdGluYXRpb24iLAogICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gImNvbm5lY3Rvci5NeUFkbWluT2JqZWN0IiwKICAgICAgICAgICAgICAgIHJlc291cmNlQWRhcHRlcj0iYW9kLXJhIiwKICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7Im9yZy5nbGFzc2Zpc2guYWRtaW4tb2JqZWN0LnJlc1R5cGU9Y29ubmVjdG9yLk15QWRtaW5PYmplY3QifQogICAgICAgICAgICksCi0gICAgICAgICAgCisKICAgICAgICAgICBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gIm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uIiwgCi0gICAgICAgICAgICAgICBuYW1lID0gImphdmE6bW9kdWxlL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0FkbWluT2JqZWN0IiwgCisgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJtb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbiIsCisgICAgICAgICAgICAgICBuYW1lID0gImphdmE6bW9kdWxlL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0FkbWluT2JqZWN0IiwKICAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWUgPSAiamFrYXJ0YS5qbXMuRGVzdGluYXRpb24iLAogICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gImNvbm5lY3Rvci5NeUFkbWluT2JqZWN0IiwKICAgICAgICAgICAgICAgIHJlc291cmNlQWRhcHRlcj0iYW9kLXJhIiwKICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7Im9yZy5nbGFzc2Zpc2guYWRtaW4tb2JqZWN0LnJlc1R5cGU9Y29ubmVjdG9yLk15QWRtaW5PYmplY3QifQogICAgICAgICAgICksCi0gICAgICAgICAgCisKICAgICAgICAgICBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uIiwgCi0gICAgICAgICAgICAgICBuYW1lID0gImphdmE6Y29tcC9lbnYvSGVsbG9FSkJfQW5ub3RhdGlvbl9BZG1pbk9iamVjdCIsIAorICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiY29tcG9uZW50LXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24iLAorICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOmNvbXAvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQWRtaW5PYmplY3QiLAogICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZSA9ICJqYWthcnRhLmptcy5EZXN0aW5hdGlvbiIsCiAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAiY29ubmVjdG9yLk15QWRtaW5PYmplY3QiLAogICAgICAgICAgICAgICAgcmVzb3VyY2VBZGFwdGVyPSJhb2QtcmEiLApAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgIGxvb2t1cEFkbWluT2JqZWN0KCJqYXZhOmFwcC9lbnYvSGVsbG9FSkJfRERfQWRtaW5PYmplY3QiLCB0cnVlKTsKICAgICAgICAgbG9va3VwQWRtaW5PYmplY3QoImphdmE6bW9kdWxlL2Vudi9IZWxsb0VKQl9ERF9BZG1pbk9iamVjdCIsIHRydWUpOwogICAgICAgICBsb29rdXBBZG1pbk9iamVjdCgiamF2YTpjb21wL2Vudi9IZWxsb0VKQl9ERF9BZG1pbk9iamVjdCIsIHRydWUpOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvRUpCOjpoZWxsbygpIik7CiAgICAgfQogCkBAIC0xMjcsNiArMTI3LDYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEKaW5kZXggZjMxMGI0NS4uMWNiY2VlMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZWpiL0hlbGxvU3RhdGVmdWxFSkIuamF2YQpAQCAtMTE1LDcgKzExNSw3IEBACiAgICAgICAgIGxvb2t1cEFkbWluT2JqZWN0KCJqYXZhOmFwcC9lbnYvSGVsbG9FSkJfRERfQWRtaW5PYmplY3QiLCB0cnVlKTsKICAgICAgICAgbG9va3VwQWRtaW5PYmplY3QoImphdmE6bW9kdWxlL2Vudi9IZWxsb0VKQl9ERF9BZG1pbk9iamVjdCIsIHRydWUpOwogICAgICAgICBsb29rdXBBZG1pbk9iamVjdCgiamF2YTpjb21wL2Vudi9IZWxsb0VKQl9ERF9BZG1pbk9iamVjdCIsIGZhbHNlKTsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZWZ1bEVKQiBkYXRhc291cmNlLWRlZmluaXRpb25zIFN1Y2Nlc3MiKTsKIAogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9BYnN0cmFjdFJlc291cmNlQWRhcHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL0Fic3RyYWN0UmVzb3VyY2VBZGFwdGVyLmphdmEKaW5kZXggMDdiOWQ3OC4uMGVmY2M1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL0Fic3RyYWN0UmVzb3VyY2VBZGFwdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL0Fic3RyYWN0UmVzb3VyY2VBZGFwdGVyLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKICAgICBwcml2YXRlIFN0cmluZyB0ZXN0TmFtZTsKICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBkZWJ1ZyA9IHRydWU7CiAKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdE5hbWUoKSB7CiAgICAgICAgIHJldHVybiB0ZXN0TmFtZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCmluZGV4IDU1NTMzZDQuLmY1OWIyYjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgQ29udHJvbHMgewogICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IHJlYWR5TG9jayA9IG5ldyBPYmplY3QoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQppbmRleCA3ZTM2MzVmLi4yYmU2NWY5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgRGVsaXZlcnlXb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTMxLDcgKzMxLDcgQEAKICAgICBwcml2YXRlIFN0cmluZyBvcDsKICAgICBwcml2YXRlIGJvb2xlYW4ga2VlcENvdW50OwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudGVyID0gMDsKLSAgICAKKwogICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgU3RyaW5nIG9wKSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtMzksNyArMzksNyBAQAogICAgICAgICB0aGlzLmtlZXBDb3VudCA9IGZhbHNlOwogICAgIH0KIAotICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgCisgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLAogICAgICAgICAgICAgU3RyaW5nIG9wLCBib29sZWFuIGtlZXBDb3VudCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAKICAgICAgICAgZGVidWcoIkVOVEVSLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL01ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKICAgICAgICAgICAgIC8vZXAuYmVmb3JlRGVsaXZlcnkob25NZXNzYWdlKTsKQEAgLTczLDExICs3MywxMSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvL2VwLmFmdGVyRGVsaXZlcnkoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC04OCwxNCArODgsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKaW5kZXggMTAwY2FjZS4uZmE5M2Y2MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLmZvcmdldDogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgIH0KQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnByZXBhcmU6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICAgICAgcmV0dXJuIFhBUmVzb3VyY2UuWEFfT0s7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5yZWNvdmVyOiAiICsgZmxhZ1RvU3RyaW5nKGZsYWcpKTsKICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc3RhcnQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2Uuc3RhcnQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpICsgIiwiICsKICAgICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKaW5kZXggYjViMGYwMi4uNGM5YzAxMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIC8qKgogICogY29sbGVjdGlvbiBvZiBtZXNzYWdlcy4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKIApAQCAtNTQsNyArNTQsNyBAQAogICAgICAgIFN0cmluZyBjb21tYW5kICA9IGFyZ3NbMF07CiAgICAgICAgU3RyaW5nIGRlc3ROYW1lID0gYXJnc1sxXTsKICAgICAgICBTdHJpbmcgbWVzc2FnZSAgPSBhcmdzWzJdOwotICAgCisKICAgICAgICBpZiAoISJhZGQiLmVxdWFscyhjb21tYW5kKSkgewogICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvTXlDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL015Q29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCA5ZjI0NjQ4Li45MjJlNzFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvTXlDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9NeUNvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKICAgICBwcml2YXRlIENvbm5lY3Rpb25NYW5hZ2VyIGNtOwogICAgIHByaXZhdGUgTXlNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmOwogICAgIHByaXZhdGUgUmVmZXJlbmNlIHJlZjsKLSAgICAKKwogICAgIHB1YmxpYyBNeUNvbm5lY3Rpb25GYWN0b3J5KE15TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiwgQ29ubmVjdGlvbk1hbmFnZXIgY20pIHsKICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgdGhpcy5tY2YgPSBtY2Y7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvTXlNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9NeU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IDA1YjMxMTguLmE1NjE3NjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9NeU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9NeU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC00NCw3ICs0NCw3IEBACiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsKICAgICBwcml2YXRlIFByaW50V3JpdGVyIHdyaXRlcjsKICAgICBwcml2YXRlIFRyYW5zYWN0aW9uU3VwcG9ydExldmVsIHRyYW5zYWN0aW9uU3VwcG9ydCA9IFRyYW5zYWN0aW9uU3VwcG9ydExldmVsLkxvY2FsVHJhbnNhY3Rpb247OwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHRlc3ROYW1lOwogICAgIH0KQEAgLTY5LDcgKzY5LDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24oU3ViamVjdCBzdWJqZWN0LCAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIHJlcUluZm8pIAorICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihTdWJqZWN0IHN1YmplY3QsICBDb25uZWN0aW9uUmVxdWVzdEluZm8gcmVxSW5mbykKICAgICAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KQEAgLTgwLDcgKzgwLDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMoU2V0IGNhbmRpZGF0ZXMsIFN1YmplY3Qgc3ViLCAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIHJlcUluZm8pIAorICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhTZXQgY2FuZGlkYXRlcywgU3ViamVjdCBzdWIsICBDb25uZWN0aW9uUmVxdWVzdEluZm8gcmVxSW5mbykKICAgICAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQppbmRleCA2MTQzODFlLi40NDg5OWEwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgTXlXb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTMxLDcgKzMxLDcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gc3RvcCA9IGZhbHNlOwogICAgIHByaXZhdGUgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5OwogICAgIHByaXZhdGUgV29ya01hbmFnZXIgd207Ci0gICAgCisKICAgICBwdWJsaWMgTXlXb3JrKAogICAgICAgICAgICAgU3RyaW5nIG5hbWUsIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwgV29ya01hbmFnZXIgd20pIHsKICAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTsKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgICAgICBNZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSk7CiAKICAgICAgICAgICAgICAgICAvKgpAQCAtNjYsNyArNjYsNyBAQAogICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtODEsMTQgKzgxLDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKaW5kZXggNTEyZTVjNi4uNGI1ZTVmMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKQEAgLTI1LDEyICsyNSwxMiBAQAogICogc28gdGhhdCB0aGUgYXBwIHNlcnZlciBjYW4gaW5zdGFudGlhdGUgYW5kIGNvbmZpZ3VyZQogICogaXQgYXQgdGhlIHJ1bnRpbWUuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIEBBY3RpdmF0aW9uKAogICAgICAgICBtZXNzYWdlTGlzdGVuZXJzID0ge2Nvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzc30KICkKLXB1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYyAKK3B1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYwogICAgIGltcGxlbWVudHMgQWN0aXZhdGlvblNwZWMsIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByaXZhdGUgU3RyaW5nIGRlc3RpbmF0aW9uTmFtZTsKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uTmFtZSAoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uTmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvbk5hbWUgKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvbk5hbWUoKSBjYWxsZWQuLi4gbmFtZSA9ICIgKyBuYW1lKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbk5hbWUgPSBuYW1lOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25UeXBlKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvblR5cGU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25UeXBlIChTdHJpbmcgdHlwZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25UeXBlICgpIGNhbGxlZC4uLiB0eXBlID0gIiArIHR5cGUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uVHlwZT0gdHlwZTsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3RQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0UHJvcDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0UHJvcCAoU3RyaW5nIHRlc3RQcm9wKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0UHJvcCAoKSBjYWxsZWQuLi4gdGVzdFByb3AgPSAiICsgdGVzdFByb3ApOwogICAgICAgICB0aGlzLnRlc3RQcm9wID0gdGVzdFByb3A7CkBAIC03NCw3ICs3NCw3IEBACiAgICAgcHVibGljIEludGVnZXIgZ2V0VGVzdEludGVnZXJQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0SW50ZWdlclByb3A7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdEludGVnZXJQcm9wIChJbnRlZ2VyIHRlc3RQcm9wMSkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdEludGVnZXJQcm9wICgpIGNhbGxlZC4uLiB0ZXN0SW50ZWdlclByb3AgPSAiICsgdGVzdFByb3AxKTsKICAgICAgICAgdGhpcy50ZXN0SW50ZWdlclByb3AgPSB0ZXN0UHJvcDE7CkBAIC05OCw3ICs5OCw3IEBACiAKICAgICAgIH0KIAotICAgfSAKKyAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkZWJ1ZyAoU3RyaW5nIG1lc3NhZ2UpCiAgICAgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKaW5kZXggMjhkOWUyOS4uZDFjMjZiYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCkBAIC0yOSwxNCArMjksMTQgQEAKIAogLyoqCiAgKiBUaGlzIGlzIGEgc2FtcGxlIHJlc291cmNlIGFkYXB0ZXIKLSAqIAorICoKICAqIEBhdXRob3IgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIEBDb25uZWN0b3IoCiAvKiBtb2R1bGVOYW1lPSJNeSBTaW1wbGUgUkFSIiwgKi8KLSAgICBkaXNwbGF5TmFtZSA9ICJTaW1wbGUgUmVzb3VyY2UgQWRhcHRlciIsIAotICAgIHZlbmRvck5hbWUgPSAiSmF2YSBTb2Z0d2FyZSIsIAotICAgIGVpc1R5cGUgPSAiR2VuZXJpYyBUeXBlIiwgCisgICAgZGlzcGxheU5hbWUgPSAiU2ltcGxlIFJlc291cmNlIEFkYXB0ZXIiLAorICAgIHZlbmRvck5hbWUgPSAiSmF2YSBTb2Z0d2FyZSIsCisgICAgZWlzVHlwZSA9ICJHZW5lcmljIFR5cGUiLAogICAgIHZlcnNpb24gPSAiMS4wQWxwaGEiLAogICAgIHRyYW5zYWN0aW9uU3VwcG9ydD1UcmFuc2FjdGlvblN1cHBvcnRMZXZlbC5YQVRyYW5zYWN0aW9uKQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQppbmRleCBlZTBmYWU5Li5lMjQ4NTA2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBUZXN0V01Xb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTM3LDggKzM3LDggQEAKICAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSkgewogICAgICAgICB0aGlzKGlkLCBpc1JvZ3VlLCBmYWxzZSwgbnVsbCk7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLCAKKworICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLAogICAgICAgICAgICAgYm9vbGVhbiBkb05lc3QsIEV4ZWN1dGlvbkNvbnRleHQgY3R4KSB7CiAgICAgICAgIHRoaXMuaWQgPSBpZDsKICAgICAgICAgdGhpcy5pc1JvZ3VlID0gaXNSb2d1ZTsKQEAgLTcyLDEwICs3MiwxMCBAQAogICAgICAgICAgICAgfSBjYXRjaCAoV29ya0V4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIGlmIChleC5nZXRFcnJvckNvZGUoKS5lcXVhbHMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya0V4Y2VwdGlvbi5UWF9DT05DVVJSRU5UX1dPUktfRElTQUxMT1dFRCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQVNTOiBDQVVHSFQgRVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKICAgICAgICAgICAgICAgICB3bS5kb1dvcmsobmVzdGVkV29yaywgMSoxMDAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICJGQUlMOiBDQVVHSFQgVU5FWFBFQ1RFRCA9ICIgKyBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvVjNXb3JrRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1YzV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCA4YWRmM2NjLi40YjQzNzgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvVjNXb3JrRGlzcGF0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9WM1dvcmtEaXNwYXRjaGVyLmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChuZXcgRmFrZVhBUmVzb3VyY2UoKSk7CiAgICAgICAgICAgICBpbnQgbnVtT2ZNZXNzYWdlcyA9IDE7CkBAIC03Miw3ICs3Miw3IEBACiAgICAgICAgICAgICBkZWJ1ZygiVjNXb3JrRGlzcGF0Y2hlciBjYWxsaW5nIERPTkUoKSIpOwogICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgZGVidWcoIlYzV29ya0Rpc3BhdGNoZXIgZmluaXNoZWQgY2FsbGluZyBET05FKCkiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCmluZGV4IDQyMjQ5ZGMuLmExNDQ0M2EgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgV29ya0Rpc3BhdGNoZXIgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtNDMsMTEgKzQzLDExIEBACiAgICAgcHJvdGVjdGVkIEFjdGl2YXRpb25TcGVjIHNwZWM7CiAgICAgcHJvdGVjdGVkIFdvcmtNYW5hZ2VyIHdtOwogICAgIHByb3RlY3RlZCBYQVRlcm1pbmF0b3IgeGE7Ci0gICAgCisKICAgICBwdWJsaWMgV29ya0Rpc3BhdGNoZXIoCiAgICAgICAgICAgICBTdHJpbmcgaWQsCiAgICAgICAgICAgICBCb290c3RyYXBDb250ZXh0IGN0eCwKLSAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwgCisgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIHRoaXMuaWQgICAgICA9IGlkOwogICAgICAgICB0aGlzLmN0eCAgICAgPSBjdHg7CkBAIC02MCw3ICs2MCw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICBkZWJ1ZygiV0FJVC4uLiIpOwpAQCAtODIsMjYgKzgyLDI2IEBACiAgICAgICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKTsKIAogICAgICAgICAgICAgICAgIGlmICghZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOyAKKyAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOwogICAgICAgICAgICAgICAgICAgICAvL3dtLmRvV29yayhkLCAwLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobmV3IEZha2VYQVJlc291cmNlKCkpOwogICAgICAgICAgICAgICAgICAgICBpbnQgbnVtT2ZNZXNzYWdlcyA9IDU7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vaW1wb3J0aW5nIHRyYW5zYWN0aW9uCiAKICAgICAgICAgICAgICAgICAgICAgLy93cml0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgRXhlY3V0aW9uQ29udGV4dCBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKIAotICAgICAgICAgICAgICAgICAgICBEZWxpdmVyeVdvcmsgdyA9IAorICAgICAgICAgICAgICAgICAgICBEZWxpdmVyeVdvcmsgdyA9CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiV1JJVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiRE9ORSBXUklURSBUTyBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSBudW1PZk1lc3NhZ2VzOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL3JvbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJERUxFVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTE0OSw3ICsxNDksNyBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiREVMRVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xOTQsNyArMTk0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKFhBUmVzb3VyY2UuWEFfT0sgPT0geGEucHJlcGFyZShlYy5nZXRYaWQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlhBIFBSRVBBUkUvQ09NTUlULiBET05FIFdSSVRFIFRPIERCICIpOwpAQCAtMjA2LDE5ICsyMDYsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IDM7CiAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUgYWxsLgogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIDEsICJERUxFVEVfQUxMIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJET05FIERFTEVURSBBTEwgRlJPTSBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAwOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI0NSw3ICsyNDUsNyBAQAogICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTI2MCwxNCArMjYwLDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTI5MCwxMyArMjkwLDEzIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL1NsZWVwIGZvciA1IHNlY29uZHMKICAgICAgICAgICAgIC8vVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCg1KjEwMDApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICAvL05vdGlmeSB0aGUgY2xpZW50IHRvIGNoZWNrIHRoZSByZXN1bHRzCi0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeUFsbCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5QWxsKCk7CiAKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgcmVzdWx0cyBhcmUgdmVyaWZpZWQgYnkgdGhlIGNsaWVudAotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7CiAKICAgICAgICAgICAgICAgICBpZiAoc3RvcCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKaW5kZXggNzdkYmYzNC4uNmJkOWU1NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQpAQCAtMzYsOCArMzYsOCBAQAogICAgIHB1YmxpYyBpbnQgYnJhbmNoUXVhbGlmaWVyOwogICAgIHB1YmxpYyBpbnQgZ2xvYmFsVHhJRDsKIAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OyAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsgCisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7CisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7CiAKICAgICBwdWJsaWMgWElEKCkgewogICAgICAgICBpbnQgZm9vID0gSUQrKzsKQEAgLTU1LDEwICs1NSwxMCBAQAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICAgLy8gSXQgY2FuJ3QgYmUgZXF1YWwKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBvdGhlciA9IChYSUQpbzsgICAgICAgICAgICAgICAgICAgLy8gVGhlIG90aGVyIFhJRCwgbm93IHByb3Blcmx5IGNhc3QKLSAgICAgICAgCi0gICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElEIAorCisgICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElECiAgICAgICAgICAgICAgICAgJiYgdGhpcy5icmFuY2hRdWFsaWZpZXIgPT0gb3RoZXIuYnJhbmNoUXVhbGlmaWVyCiAgICAgICAgICAgICAgICAgJiYgdGhpcy5nbG9iYWxUeElEID09IG90aGVyLmdsb2JhbFR4SUQpIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTgsNyArOTgsNyBAQAogICAgICAgICAgICAgICAgICJmb3JtYXRJRCgiICAgICArIGZvcm1hdElEICAgICArICIpLCAiICsKICAgICAgICAgICAgICAgICAiYnJhbmNoUXVhbGlmaWVyICgiICsgYnJhbmNoUXVhbGlmaWVyICsgIiksICIgKwogICAgICAgICAgICAgICAgICJnbG9iYWxUeElEKCIgKyBnbG9iYWxUeElEICsgIil9Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9zZXJ2bGV0L1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vc2VydmxldC9TZXJ2bGV0LmphdmEKaW5kZXggMWIxZWZhMS4uNWQzNTNjZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9zZXJ2bGV0L1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3NlcnZsZXQvU2VydmxldC5qYXZhCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUFkYXB0ZXI9ImFvZC1yYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0geyJvcmcuZ2xhc3NmaXNoLmFkbWluLW9iamVjdC5yZXNUeXBlPWNvbm5lY3Rvci5NeUFkbWluT2JqZWN0In0KICAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0ibW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOm1vZHVsZS9lbnYvU2VydmxldF9BZG1pbk9iamVjdCIsCkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUFkYXB0ZXI9ImFvZC1yYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0geyJvcmcuZ2xhc3NmaXNoLmFkbWluLW9iamVjdC5yZXNUeXBlPWNvbm5lY3Rvci5NeUFkbWluT2JqZWN0In0KICAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0iY29tcG9uZW50LXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOmNvbXAvZW52L1NlcnZsZXRfQWRtaW5PYmplY3QiLApAQCAtOTEsNyArOTEsNyBAQAogCiAgICAgQEVKQgogICAgIHByaXZhdGUgIEhlbGxvIGhlbGxvU3RhdGVsZXNzOwotICAgIAorCiAgICAgQEVKQihiZWFuTmFtZSA9ICJIZWxsb1N0YXRlZnVsRUpCIikKICAgICBwcml2YXRlICBIZWxsb1N0YXRlZnVsIGhlbGxvU3RhdGVmdWw7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vdXQvQXJjaGl2ZVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vdXQvQXJjaGl2ZVRlc3QuamF2YQppbmRleCA3MTA1YjJmLi5hMjEzOGE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3V0L0FyY2hpdmVUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi91dC9BcmNoaXZlVGVzdC5qYXZhCkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgIEFTVVJMQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIgPSBuZXcgQVNVUkxDbGFzc0xvYWRlcih0aGlzLmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKSk7CiAgICAgICAgIGNsYXNzTG9hZGVyLmFkZFVSTChhcmNoaXZlLnRvVVJMKCkpOwogICAgICAgICByZWFkZXIuc2V0Q2xhc3NMb2FkZXIoY2xhc3NMb2FkZXIpOwotICAgICAgICAKKwogICAgICAgICBBcHBsaWNhdGlvbiBhcHBsaWNhdGlvbkRlc2MgPSByZWFkZXIub3BlbihhcmNoaXZlKTsKIC8vICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tQWRtaW5pc3RlcmVkIG9iamVjdCBpbiBhcHBsaWNhdGlvbi54bWwtLS0tLS0tLS0tIik7CiAvLyAgICAgICAgZm9yKCBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvciBhb2RkOiBhcHBsaWNhdGlvbkRlc2MuZ2V0QWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3JzKCkpewpAQCAtNzgsOCArNzgsOCBAQAogLy8gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYW9kZC5nZXROYW1lKCkpOwogLy8gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOwogLy8gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIE1hcDxTdHJpbmcsQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3I+IGV4cGVjdGVkQU9ERHMgPSAKKworICAgICAgICBNYXA8U3RyaW5nLEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZEFPRERzID0KICAgICAgICAgICAgICAgICBuZXcgSGFzaE1hcDxTdHJpbmcsQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3I+KCk7CiAgICAgICAgIEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yIGRlc2M7CiAKQEAgLTEyOSw3ICsxMjksNyBAQAogICAgICAgICByZWFkZXIuc2V0QW5ub3RhdGlvblByb2Nlc3NpbmdSZXF1ZXN0ZWQodHJ1ZSk7CiAgICAgICAgIHJlYWRlci5zZXRDbGFzc0xvYWRlcihjbGFzc0xvYWRlcik7CiAgICAgICAgIGFzc2VydFRydWUoIkFyY2hpdmlzdCBzaG91bGQgaGFuZGxlIGFubm90YXRpb25zLiIsIHJlYWRlci5pc0Fubm90YXRpb25Qcm9jZXNzaW5nUmVxdWVzdGVkKCkpOwotICAgICAgICAKKwogICAgICAgICBXZWJCdW5kbGVEZXNjcmlwdG9yIHdlYkRlc2MgPSByZWFkZXIub3BlbihhcmNoaXZlKTsKIC8vICAgICAgICBmb3IoQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IgYW9kZCA6IHdlYkRlc2MuZ2V0QWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3JzKCkpewogLy8gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlc2NyaXB0aW9uID0gIithb2RkLmdldERlc2NyaXB0aW9uKCkpOwpAQCAtMTM4LDcgKzEzOCw3IEBACiAvLyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwogLy8gICAgICAgIH0KIAotICAgICAgICBNYXA8U3RyaW5nLEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZEFPRERzID0gCisgICAgICAgIE1hcDxTdHJpbmcsQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3I+IGV4cGVjdGVkQU9ERHMgPQogICAgICAgICAgICAgICAgIG5ldyBIYXNoTWFwPFN0cmluZyxBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvcj4oKTsKICAgICAgICAgQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IgZGVzYzsKIApAQCAtMTU5LDcgKzE1OSw3IEBACiAgICAgICAgIGRlc2Muc2V0UmVzb3VyY2VBZGFwdGVyKCJhb2QtcmEiKTsKICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZSIsICJjb25uZWN0b3IuTXlBZG1pbk9iamVjdCIpOwogICAgICAgICBleHBlY3RlZEFPRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7Ci0gICAgICAgIAorCiAgICAgICAgIGRlc2MgPSBuZXcgQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigiYXBwbGljYXRpb24tc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbiIpOwogICAgICAgICBkZXNjLnNldE5hbWUoImphdmE6YXBwL2Vudi9TZXJ2bGV0X0FkbWluT2JqZWN0Iik7CkBAIC0xNjgsNyArMTY4LDcgQEAKICAgICAgICAgZGVzYy5zZXRSZXNvdXJjZUFkYXB0ZXIoImFvZC1yYSIpOwogICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJvcmcuZ2xhc3NmaXNoLmFkbWluLW9iamVjdC5yZXNUeXBlIiwgImNvbm5lY3Rvci5NeUFkbWluT2JqZWN0Iik7CiAgICAgICAgIGV4cGVjdGVkQU9ERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgCisKICAgICAgICAgZGVzYyA9IG5ldyBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvcigpOwogICAgICAgICBkZXNjLnNldERlc2NyaXB0aW9uKCJtb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbiIpOwogICAgICAgICBkZXNjLnNldE5hbWUoImphdmE6bW9kdWxlL2Vudi9TZXJ2bGV0X0FkbWluT2JqZWN0Iik7CkBAIC0xNzcsNyArMTc3LDcgQEAKICAgICAgICAgZGVzYy5zZXRSZXNvdXJjZUFkYXB0ZXIoImFvZC1yYSIpOwogICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJvcmcuZ2xhc3NmaXNoLmFkbWluLW9iamVjdC5yZXNUeXBlIiwgImNvbm5lY3Rvci5NeUFkbWluT2JqZWN0Iik7CiAgICAgICAgIGV4cGVjdGVkQU9ERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgCisKICAgICAgICAgZGVzYyA9IG5ldyBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvcigpOwogICAgICAgICBkZXNjLnNldERlc2NyaXB0aW9uKCJjb21wb25lbnQtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbiIpOwogICAgICAgICBkZXNjLnNldE5hbWUoImphdmE6Y29tcC9lbnYvU2VydmxldF9BZG1pbk9iamVjdCIpOwpAQCAtMTg2LDcgKzE4Niw3IEBACiAgICAgICAgIGRlc2Muc2V0UmVzb3VyY2VBZGFwdGVyKCJhb2QtcmEiKTsKICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZSIsICJjb25uZWN0b3IuTXlBZG1pbk9iamVjdCIpOwogICAgICAgICBleHBlY3RlZEFPRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7Ci0gICAgICAgIAorCiAgICAgICAgIGRlc2MgPSBuZXcgQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigiZ2xvYmFsLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gV2ViIEREIik7CiAgICAgICAgIGRlc2Muc2V0TmFtZSgiamF2YTpnbG9iYWwvZW52L1dlYl9ERF9BZG1pbk9iamVjdCIpOwpAQCAtMTk1LDcgKzE5NSw3IEBACiAgICAgICAgIGRlc2Muc2V0UmVzb3VyY2VBZGFwdGVyKCJhb2QtcmEiKTsKICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZSIsICJjb25uZWN0b3IuTXlBZG1pbk9iamVjdCIpOwogICAgICAgICBleHBlY3RlZEFPRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7Ci0gICAgICAgIAorCiAgICAgICAgIGRlc2MgPSBuZXcgQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigiYXBwbGljYXRpb24tc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBXZWIgREQiKTsKICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOmFwcC9lbnYvV2ViX0REX0FkbWluT2JqZWN0Iik7CkBAIC0yMDQsNyArMjA0LDcgQEAKICAgICAgICAgZGVzYy5zZXRSZXNvdXJjZUFkYXB0ZXIoImFvZC1yYSIpOwogICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJvcmcuZ2xhc3NmaXNoLmFkbWluLW9iamVjdC5yZXNUeXBlIiwgImNvbm5lY3Rvci5NeUFkbWluT2JqZWN0Iik7CiAgICAgICAgIGV4cGVjdGVkQU9ERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgCisKICAgICAgICAgZGVzYyA9IG5ldyBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvcigpOwogICAgICAgICBkZXNjLnNldERlc2NyaXB0aW9uKCJtb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBXZWIgREQiKTsKICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOm1vZHVsZS9lbnYvV2ViX0REX0FkbWluT2JqZWN0Iik7CkBAIC0yMzUsNyArMjM1LDcgQEAKIAogICAgICAgICBBU1VSTENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyID0gbmV3IEFTVVJMQ2xhc3NMb2FkZXIodGhpcy5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwogICAgICAgICBjbGFzc0xvYWRlci5hZGRVUkwoYXJjaGl2ZS50b1VSTCgpKTsKLSAgICAgICAgICAgICAgIAorCiAgICAgICAgIEVqYkFyY2hpdmlzdCByZWFkZXIgPSAoRWpiQXJjaGl2aXN0KSBUZXN0VXRpbC5nZXRCeVR5cGUoRWpiQXJjaGl2aXN0LmNsYXNzKTsKICAgICAgICAgcmVhZGVyLnNldENsYXNzTG9hZGVyKGNsYXNzTG9hZGVyKTsKICAgICAgICAgcmVhZGVyLnNldEFubm90YXRpb25Qcm9jZXNzaW5nUmVxdWVzdGVkKHRydWUpOwpAQCAtMjUxLDggKzI1MSw4IEBACiAvLyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLSIpOwogLy8gICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIE1hcDxTdHJpbmcsQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3I+IGV4cGVjdGVkQU9ERHMgPSAKKworICAgICAgICBNYXA8U3RyaW5nLEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZEFPRERzID0KICAgICAgICAgICAgICAgICBuZXcgSGFzaE1hcDxTdHJpbmcsQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3I+KCk7CiAgICAgICAgIEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yIGRlc2M7CiAKQEAgLTM0OSw3ICszNDksNyBAQAogICAgICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZSIsICJjb25uZWN0b3IuTXlBZG1pbk9iamVjdCIpOwogICAgICAgICAgICAgZXhwZWN0ZWRBT0REcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vIGFkbWluaXN0ZXJlZC1vYmplY3QgaW4gYW5ub3RhdGlvbiBmb3Igc3RhdGVmdWwgRUpCCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc2MgPSBuZXcgQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKQEAgLTM2MCw3ICszNjAsNyBAQAogICAgICAgICAgICAgZGVzYy5zZXRSZXNvdXJjZUFkYXB0ZXIoImFvZC1yYSIpOwogICAgICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZSIsICJjb25uZWN0b3IuTXlBZG1pbk9iamVjdCIpOwogICAgICAgICAgICAgZXhwZWN0ZWRBT0REcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGRlc2MgPSBuZXcgQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgICAgIGRlc2Muc2V0RGVzY3JpcHRpb24oImFwcGxpY2F0aW9uLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24iKTsKICAgICAgICAgICAgIGRlc2Muc2V0TmFtZSgiamF2YTphcHAvZW52L0hlbGxvU3RhdGVmdWxFSkJfQW5ub3RhdGlvbl9BZG1pbk9iamVjdCIpOwpAQCAtMzk5LDcgKzM5OSw3IEBACiAgICAgICAgICAgICBkZXNjLnNldFJlc291cmNlQWRhcHRlcigiYW9kLXJhIik7CiAgICAgICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJvcmcuZ2xhc3NmaXNoLmFkbWluLW9iamVjdC5yZXNUeXBlIiwgImNvbm5lY3Rvci5NeUFkbWluT2JqZWN0Iik7CiAgICAgICAgICAgICBleHBlY3RlZEFPRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZGVzYyA9IG5ldyBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvcigpOwogICAgICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigiYXBwbGljYXRpb24tc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbiIpOwogICAgICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOmFwcC9lbnYvSGVsbG9FSkJfQW5ub3RhdGlvbl9BZG1pbk9iamVjdCIpOwpAQCAtNDA4LDcgKzQwOCw3IEBACiAgICAgICAgICAgICBkZXNjLnNldFJlc291cmNlQWRhcHRlcigiYW9kLXJhIik7CiAgICAgICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJvcmcuZ2xhc3NmaXNoLmFkbWluLW9iamVjdC5yZXNUeXBlIiwgImNvbm5lY3Rvci5NeUFkbWluT2JqZWN0Iik7CiAgICAgICAgICAgICBleHBlY3RlZEFPRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZGVzYyA9IG5ldyBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvcigpOwogICAgICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigibW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24iKTsKICAgICAgICAgICAgIGRlc2Muc2V0TmFtZSgiamF2YTptb2R1bGUvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQWRtaW5PYmplY3QiKTsKQEAgLTQxNyw3ICs0MTcsNyBAQAogICAgICAgICAgICAgZGVzYy5zZXRSZXNvdXJjZUFkYXB0ZXIoImFvZC1yYSIpOwogICAgICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZSIsICJjb25uZWN0b3IuTXlBZG1pbk9iamVjdCIpOwogICAgICAgICAgICAgZXhwZWN0ZWRBT0REcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGRlc2MgPSBuZXcgQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgICAgIGRlc2Muc2V0RGVzY3JpcHRpb24oImNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uIik7CiAgICAgICAgICAgICBkZXNjLnNldE5hbWUoImphdmE6Y29tcC9lbnYvSGVsbG9FSkJfQW5ub3RhdGlvbl9BZG1pbk9iamVjdCIpOwpAQCAtNDI3LDggKzQyNyw4IEBACiAgICAgICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJvcmcuZ2xhc3NmaXNoLmFkbWluLW9iamVjdC5yZXNUeXBlIiwgImNvbm5lY3Rvci5NeUFkbWluT2JqZWN0Iik7CiAgICAgICAgICAgICBleHBlY3RlZEFPRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgVGVzdFV0aWwuY29tcGFyZUFPREQoZXhwZWN0ZWRBT0REcywgYWN0dXJhbEFPRERzKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vdXQvRERUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3V0L0REVGVzdC5qYXZhCmluZGV4IGY0MTFjOWUuLjgyOTAzOTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vdXQvRERUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi91dC9ERFRlc3QuamF2YQpAQCAtNDYsMjMgKzQ2LDIzIEBACiAgICAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIudGVhckRvd24oKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB0ZXN0QXBwbGljYXRpb25ERCgpIHRocm93cyBFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB0Y05hbWUgPSAiYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWFwcGxpY2F0aW9uLURELXRlc3QiOwogICAgICAgICBJbnB1dFN0cmVhbSBkZElTPW51bGw7CiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIFN0cmluZyBkZEZpbGVOYW1lID0gInV0LWFwcGxpY2F0aW9uLnhtbCI7CiAgICAgICAgICAgICBGaWxlIGRkRmlsZSA9IG5ldyBGaWxlKGRlc2NyaXB0b3JEaXIsIGRkRmlsZU5hbWUpOwogICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIlRoZSBhcHBsaWNhdGlvbi54bWwgbm90IGZvdW5kOiAiK2RkRmlsZSxkZEZpbGUuZXhpc3RzKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGRkSVMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGRkRmlsZSk7CiAgICAgICAgICAgICBBcHBsaWNhdGlvbkRlcGxveW1lbnREZXNjcmlwdG9yRmlsZSBkZFJlYWRlciA9IG5ldyBBcHBsaWNhdGlvbkRlcGxveW1lbnREZXNjcmlwdG9yRmlsZSgpOwogICAgICAgICAgICAgQXBwbGljYXRpb24gYXBwbGljYXRpb24gPSAoQXBwbGljYXRpb24pIGRkUmVhZGVyLnJlYWQoIGRkSVMpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFNldDxSZXNvdXJjZURlc2NyaXB0b3I+IGFjdHVhbEFPRERzID0gYXBwbGljYXRpb24uZ2V0UmVzb3VyY2VEZXNjcmlwdG9ycyhKYXZhRUVSZXNvdXJjZVR5cGUuQU9ERCk7CiAKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3I+IGV4cGVjdGVkQU9ERHMgPSAKKyAgICAgICAgICAgIE1hcDxTdHJpbmcsQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3I+IGV4cGVjdGVkQU9ERHMgPQogICAgICAgICAgICAgICAgICAgICBuZXcgSGFzaE1hcDxTdHJpbmcsQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3I+KCk7CiAgICAgICAgICAgICBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvciBkZXNjOwogCkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgICAgICBkZXNjLnNldFJlc291cmNlQWRhcHRlcigiYW9kLXJhIik7CiAgICAgICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJvcmcuZ2xhc3NmaXNoLmFkbWluLW9iamVjdC5yZXNUeXBlIiwgImNvbm5lY3Rvci5NeUFkbWluT2JqZWN0Iik7CiAgICAgICAgICAgICBleHBlY3RlZEFPRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZGVzYyA9IG5ldyBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvcigpOwogICAgICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOmFwcC9lbnYvQWRtaW5PYmplY3QiKTsKICAgICAgICAgICAgIGRlc2Muc2V0SW50ZXJmYWNlTmFtZSgiamFrYXJ0YS5qbXMuRGVzdGluYXRpb24iKTsKQEAgLTg2LDcgKzg2LDcgQEAKIAogICAgICAgICAgICAgVGVzdFV0aWwuY29tcGFyZUFPREQoZXhwZWN0ZWRBT0REcywgYWN0dWFsQU9ERHMpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGNOYW1lLCBzdGF0LlBBU1MpOwotICAgICAgICAgICAgCisKICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRjTmFtZSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIHRocm93IGU7CkBAIC0xMDAsMTggKzEwMCwxOCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RTZXNzaW9uRUpCREQoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdGNOYW1lID0gImFkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1TZXNzaW9uLUVKQi1ERC10ZXN0IjsKICAgICAgICAgSW5wdXRTdHJlYW0gZGRJUz1udWxsOwogICAgICAgICB0cnl7CiAgICAgICAgICAgICBTdHJpbmcgZGRGaWxlTmFtZSA9ICJ1dC1zZXNzaW9uLWVqYi1qYXIueG1sIjsKICAgICAgICAgICAgIEZpbGUgZGRGaWxlID0gbmV3IEZpbGUoZGVzY3JpcHRvckRpciwgZGRGaWxlTmFtZSk7CiAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiVGhlIHV0LXNlc3Npb24tZWpiLWphci54bWwgbm90IGZvdW5kOiAiK2RkRmlsZSwgZGRGaWxlLmV4aXN0cygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBkZElTID0gbmV3IEZpbGVJbnB1dFN0cmVhbShkZEZpbGUpOwogICAgICAgICAgICAgRWpiRGVwbG95bWVudERlc2NyaXB0b3JGaWxlIGRkUmVhZGVyID0gbmV3IEVqYkRlcGxveW1lbnREZXNjcmlwdG9yRmlsZSgpOwogICAgICAgICAgICAgRWpiQnVuZGxlRGVzY3JpcHRvciBlamJCdW5kbGUgPSAoRWpiQnVuZGxlRGVzY3JpcHRvcikgZGRSZWFkZXIucmVhZCggZGRJUyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZm9yKEVqYkRlc2NyaXB0b3IgZWpiRGVzY3JpcHRvciA6IGVqYkJ1bmRsZS5nZXRFamJzKCkpewogICAgICAgICAgICAgICAgIGVqYkRlc2NyaXB0b3IuZ2V0UmVzb3VyY2VEZXNjcmlwdG9ycyhKYXZhRUVSZXNvdXJjZVR5cGUuQU9ERCk7CiAgICAgICAgICAgICAgICAgaWYoZWpiRGVzY3JpcHRvci5nZXROYW1lKCkuZXF1YWxzKCJIZWxsb1N0YXRlZnVsRUpCIikpewpAQCAtMTIyLDkgKzEyMiw5IEBACiAgICAgICAgICAgICAgICAgICAgIGZhaWwoIlVua25vd24gRUpCIGRlc2NyaXB0b3I6ICIrZWpiRGVzY3JpcHRvci5nZXROYW1lKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0Y05hbWUsIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGNOYW1lLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgdGhyb3cgZTsKQEAgLTEzNiw3ICsxMzYsNyBAQAogCiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgdGVzdFN0YXRlZnVsU2Vzc2lvbkVKQkREKEVqYkRlc2NyaXB0b3IgZWpiKSB0aHJvd3MgRXhjZXB0aW9uewogICAgICAgICBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvciBkZXNjOwogICAgICAgICBNYXA8U3RyaW5nLEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZEFPRERzID0gbmV3IEhhc2hNYXA8U3RyaW5nLEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yPigpOwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgICAgIGRlc2Muc2V0UmVzb3VyY2VBZGFwdGVyKCJhb2QtcmEiKTsKICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZSIsICJjb25uZWN0b3IuTXlBZG1pbk9iamVjdCIpOwogICAgICAgICBleHBlY3RlZEFPRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7Ci0gICAgICAgIAorCiAgICAgICAgIGRlc2MgPSBuZXcgQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigibW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREIik7CiAgICAgICAgIGRlc2Muc2V0TmFtZSgiamF2YTptb2R1bGUvZW52L1N0YXRlZnVsRUpCX0FkbWluT2JqZWN0Iik7CkBAIC0xNjksOSArMTY5LDkgQEAKICAgICAgICAgZXhwZWN0ZWRBT0REcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwogCiAgICAgICAgIFRlc3RVdGlsLmNvbXBhcmVBT0REKGV4cGVjdGVkQU9ERHMsIGVqYi5nZXRSZXNvdXJjZURlc2NyaXB0b3JzKEphdmFFRVJlc291cmNlVHlwZS5BT0REKSk7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3RTdGF0ZWxlc3NTZXNzaW9uRUpCREQoRWpiRGVzY3JpcHRvciBlamIpIHRocm93cyBFeGNlcHRpb257CiAgICAgICAgIEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yIGRlc2M7CiAgICAgICAgIE1hcDxTdHJpbmcsQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3I+IGV4cGVjdGVkQU9ERHMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3I+KCk7CkBAIC0xODQsNyArMTg0LDcgQEAKICAgICAgICAgZGVzYy5zZXRSZXNvdXJjZUFkYXB0ZXIoImFvZC1yYSIpOwogICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJvcmcuZ2xhc3NmaXNoLmFkbWluLW9iamVjdC5yZXNUeXBlIiwgImNvbm5lY3Rvci5NeUFkbWluT2JqZWN0Iik7CiAgICAgICAgIGV4cGVjdGVkQU9ERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgCisKICAgICAgICAgZGVzYyA9IG5ldyBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvcigpOwogICAgICAgICBkZXNjLnNldERlc2NyaXB0aW9uKCJtb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQiKTsKICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOm1vZHVsZS9lbnYvSGVsbG9FSkJfQWRtaW5PYmplY3QiKTsKQEAgLTIwNCwxOCArMjA0LDE4IEBACiAgICAgICAgIGV4cGVjdGVkQU9ERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKIAogICAgICAgICBUZXN0VXRpbC5jb21wYXJlQU9ERChleHBlY3RlZEFPRERzLCBlamIuZ2V0UmVzb3VyY2VEZXNjcmlwdG9ycyhKYXZhRUVSZXNvdXJjZVR5cGUuQU9ERCkpOwotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHRlc3RFbnRpdHlFSkJERCgpIHRocm93cyBFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB0Y05hbWUgPSAiYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLUVudGl0eS1FSkItREQtdGVzdCI7CiAgICAgICAgIElucHV0U3RyZWFtIGRkSVM9bnVsbDsKICAgICAgICAgdHJ5ewogICAgICAgICAgICAgU3RyaW5nIGRkRmlsZU5hbWUgPSAidXQtZW50aXR5LWVqYi1qYXIueG1sIjsKICAgICAgICAgICAgIEZpbGUgZGRGaWxlID0gbmV3IEZpbGUoZGVzY3JpcHRvckRpciwgZGRGaWxlTmFtZSk7CiAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiVGhlIHV0LWVudGl0eS1lamItamFyLnhtbCBub3QgZm91bmQ6ICIrZGRGaWxlLCBkZEZpbGUuZXhpc3RzKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGRkSVMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGRkRmlsZSk7CiAgICAgICAgICAgICBFamJEZXBsb3ltZW50RGVzY3JpcHRvckZpbGUgZGRSZWFkZXIgPSBuZXcgRWpiRGVwbG95bWVudERlc2NyaXB0b3JGaWxlKCk7CiAgICAgICAgICAgICBFamJCdW5kbGVEZXNjcmlwdG9yIGVqYkJ1bmRsZSA9IChFamJCdW5kbGVEZXNjcmlwdG9yKSBkZFJlYWRlci5yZWFkKCBkZElTKTsKQEAgLTIzMiw3ICsyMzIsNyBAQAogICAgICAgICAgICAgICAgIGRlc2Muc2V0UmVzb3VyY2VBZGFwdGVyKCJhb2QtcmEiKTsKICAgICAgICAgICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJvcmcuZ2xhc3NmaXNoLmFkbWluLW9iamVjdC5yZXNUeXBlIiwgImNvbm5lY3Rvci5NeUFkbWluT2JqZWN0Iik7CiAgICAgICAgICAgICAgICAgZXhwZWN0ZWRBT0REcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVzYyA9IG5ldyBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvcigpOwogICAgICAgICAgICAgICAgIGRlc2Muc2V0RGVzY3JpcHRpb24oIm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERCIpOwogICAgICAgICAgICAgICAgIGRlc2Muc2V0TmFtZSgiamF2YTptb2R1bGUvZW52L0VudGl0eV9BZG1pbk9iamVjdCIpOwpAQCAtMjU1LDcgKzI1NSw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRjTmFtZSwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0Y05hbWUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB0aHJvdyBlOwpAQCAtMjY5LDE0ICsyNjksMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0TURCRUpCREQoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdGNOYW1lID0gImFkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1NREItRUpCLURELXRlc3QiOwogICAgICAgICBJbnB1dFN0cmVhbSBkZElTPW51bGw7CiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIFN0cmluZyBkZEZpbGVOYW1lID0gInV0LW1kYi1lamItamFyLnhtbCI7CiAgICAgICAgICAgICBGaWxlIGRkRmlsZSA9IG5ldyBGaWxlKGRlc2NyaXB0b3JEaXIsIGRkRmlsZU5hbWUpOwogICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIlRoZSB1dC1tZGItZWpiLWphci54bWwgbm90IGZvdW5kOiAiK2RkRmlsZSwgZGRGaWxlLmV4aXN0cygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBkZElTID0gbmV3IEZpbGVJbnB1dFN0cmVhbShkZEZpbGUpOwogICAgICAgICAgICAgRWpiRGVwbG95bWVudERlc2NyaXB0b3JGaWxlIGRkUmVhZGVyID0gbmV3IEVqYkRlcGxveW1lbnREZXNjcmlwdG9yRmlsZSgpOwogICAgICAgICAgICAgRWpiQnVuZGxlRGVzY3JpcHRvciBlamJCdW5kbGUgPSAoRWpiQnVuZGxlRGVzY3JpcHRvcikgZGRSZWFkZXIucmVhZCggZGRJUyk7CkBAIC0yOTMsNyArMjkzLDcgQEAKICAgICAgICAgICAgICAgICBkZXNjLnNldFJlc291cmNlQWRhcHRlcigiYW9kLXJhIik7CiAgICAgICAgICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZSIsICJjb25uZWN0b3IuTXlBZG1pbk9iamVjdCIpOwogICAgICAgICAgICAgICAgIGV4cGVjdGVkQU9ERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlc2MgPSBuZXcgQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgICAgICAgICBkZXNjLnNldERlc2NyaXB0aW9uKCJtb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQiKTsKICAgICAgICAgICAgICAgICBkZXNjLnNldE5hbWUoImphdmE6bW9kdWxlL2Vudi9NREJfQWRtaW5PYmplY3QiKTsKQEAgLTMxNiw3ICszMTYsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0Y05hbWUsIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGNOYW1lLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgdGhyb3cgZTsKQEAgLTMzMCwxNCArMzMwLDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdEludGVyY2VwdG9yRUpCREQoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdGNOYW1lID0gImFkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1JbnRlcmNlcHRvci1FSkItREQtdGVzdCI7CiAgICAgICAgIElucHV0U3RyZWFtIGRkSVM9bnVsbDsKICAgICAgICAgdHJ5ewogICAgICAgICAgICAgU3RyaW5nIGRkRmlsZU5hbWUgPSAidXQtaW50ZXJjZXB0b3ItZWpiLWphci54bWwiOwogICAgICAgICAgICAgRmlsZSBkZEZpbGUgPSBuZXcgRmlsZShkZXNjcmlwdG9yRGlyLCBkZEZpbGVOYW1lKTsKICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCJUaGUgdXQtaW50ZXJjZXB0b3ItZWpiLWphci54bWwgbm90IGZvdW5kOiAiK2RkRmlsZSwgZGRGaWxlLmV4aXN0cygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBkZElTID0gbmV3IEZpbGVJbnB1dFN0cmVhbShkZEZpbGUpOwogICAgICAgICAgICAgRWpiRGVwbG95bWVudERlc2NyaXB0b3JGaWxlIGRkUmVhZGVyID0gbmV3IEVqYkRlcGxveW1lbnREZXNjcmlwdG9yRmlsZSgpOwogICAgICAgICAgICAgRWpiQnVuZGxlRGVzY3JpcHRvciBlamJCdW5kbGUgPSAoRWpiQnVuZGxlRGVzY3JpcHRvcikgZGRSZWFkZXIucmVhZCggZGRJUyk7CkBAIC0zNTQsNyArMzU0LDcgQEAKICAgICAgICAgICAgICAgICBkZXNjLnNldFJlc291cmNlQWRhcHRlcigiYW9kLXJhIik7CiAgICAgICAgICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZSIsICJjb25uZWN0b3IuTXlBZG1pbk9iamVjdCIpOwogICAgICAgICAgICAgICAgIGV4cGVjdGVkQU9ERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlc2MgPSBuZXcgQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgICAgICAgICBkZXNjLnNldERlc2NyaXB0aW9uKCJtb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQiKTsKICAgICAgICAgICAgICAgICBkZXNjLnNldE5hbWUoImphdmE6bW9kdWxlL2Vudi9JbnRlcmNlcHRvcl9BZG1pbk9iamVjdCIpOwpAQCAtMzc3LDcgKzM3Nyw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRjTmFtZSwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0Y05hbWUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB0aHJvdyBlOwpAQCAtMzkxLDE4ICszOTEsMTggQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0V2ViREQoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdGNOYW1lID0gImFkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1XZWItREQtdGVzdCI7CiAgICAgICAgIElucHV0U3RyZWFtIGRkSVM9bnVsbDsKICAgICAgICAgdHJ5ewogICAgICAgICAgICAgU3RyaW5nIGRkRmlsZU5hbWUgPSAidXQtd2ViLnhtbCI7CiAgICAgICAgICAgICBGaWxlIGRkRmlsZSA9IG5ldyBGaWxlKGRlc2NyaXB0b3JEaXIsIGRkRmlsZU5hbWUpOwogICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIlRoZSB1dC13ZWIueG1sIG5vdCBmb3VuZDogIitkZEZpbGUsIGRkRmlsZS5leGlzdHMoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZGRJUyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZGRGaWxlKTsKICAgICAgICAgICAgIFdlYkRlcGxveW1lbnREZXNjcmlwdG9yRmlsZSBkZFJlYWRlciA9IG5ldyBXZWJEZXBsb3ltZW50RGVzY3JpcHRvckZpbGUoKTsKICAgICAgICAgICAgIFdlYkJ1bmRsZURlc2NyaXB0b3Igd2ViQnVuZGxlID0gIGRkUmVhZGVyLnJlYWQoIGRkSVMpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yIGRlc2M7CiAgICAgICAgICAgICBNYXA8U3RyaW5nLEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZEFPRERzID0gbmV3IEhhc2hNYXA8U3RyaW5nLEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yPigpOwogCkBAIC00MTQsNyArNDE0LDcgQEAKICAgICAgICAgICAgIGRlc2Muc2V0UmVzb3VyY2VBZGFwdGVyKCJhb2QtcmEiKTsKICAgICAgICAgICAgIGRlc2MuYWRkUHJvcGVydHkoIm9yZy5nbGFzc2Zpc2guYWRtaW4tb2JqZWN0LnJlc1R5cGUiLCAiY29ubmVjdG9yLk15QWRtaW5PYmplY3QiKTsKICAgICAgICAgICAgIGV4cGVjdGVkQU9ERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBkZXNjID0gbmV3IEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yKCk7CiAgICAgICAgICAgICBkZXNjLnNldERlc2NyaXB0aW9uKCJhcHBsaWNhdGlvbi1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIFdlYiBERCIpOwogICAgICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOmFwcC9lbnYvQWRtaW5PYmplY3QiKTsKQEAgLTQzNiw3ICs0MzYsNyBAQAogICAgICAgICAgICAgVGVzdFV0aWwuY29tcGFyZUFPREQoZXhwZWN0ZWRBT0REcywgd2ViQnVuZGxlLmdldFJlc291cmNlRGVzY3JpcHRvcnMoSmF2YUVFUmVzb3VyY2VUeXBlLkFPREQpKTsKIAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGNOYW1lLCBzdGF0LlBBU1MpOwotICAgICAgICAgICAgCisKICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRjTmFtZSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIHRocm93IGU7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3V0L1Rlc3RVdGlsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3V0L1Rlc3RVdGlsLmphdmEKaW5kZXggNWIyMGY1OC4uMWY1YWNlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi91dC9UZXN0VXRpbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vdXQvVGVzdFV0aWwuamF2YQpAQCAtMjgsMzkgKzI4LDM5IEBACiAKIHB1YmxpYyBjbGFzcyBUZXN0VXRpbCB7CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgY29tcGFyZUFPREQoTWFwPFN0cmluZyxBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvcj4gZXhwZWN0ZWRBT0REcywgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGNvbXBhcmVBT0REKE1hcDxTdHJpbmcsQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3I+IGV4cGVjdGVkQU9ERHMsCiAgICAgICAgICAgICBTZXQ8UmVzb3VyY2VEZXNjcmlwdG9yPiBhY3R1YWxBT0REcykgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgZm9yKFJlc291cmNlRGVzY3JpcHRvciBkZXNjcmlwdG9yIDogYWN0dWFsQU9ERHMpewogICAgICAgICAgICAgQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IgYWN0dWFsRGVzYyA9IChBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvcilkZXNjcmlwdG9yOwogICAgICAgICAgICAgYXNzZXJ0Tm90TnVsbCgidGhlIG5hbWUgb2YgYWRtaW5pc3RlcmVkIG9iamVjdCBjYW5ub3QgYmUgbnVsbC4iLCBhY3R1YWxEZXNjLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IgZXhwZWN0ZWREZXNjID0gZXhwZWN0ZWRBT0REcy5nZXQoYWN0dWFsRGVzYy5nZXROYW1lKCkpOwogICAgICAgICAgICAgYXNzZXJ0Tm90TnVsbCgiVGhlIEFPRCBvZiB0aGUgbmFtZSBbIithY3R1YWxEZXNjLmdldE5hbWUoKSsiXSBpcyBub3QgZXhwZWN0ZWQuIiwgZXhwZWN0ZWREZXNjKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkZhaWwgdG8gdmVyaWZ5IGludGVyZmFjZS10eXBlIG9mIHRoZSBBT0REOiIrYWN0dWFsRGVzYy5nZXROYW1lKCksCiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRGVzYy5nZXRJbnRlcmZhY2VOYW1lKCksIGFjdHVhbERlc2MuZ2V0SW50ZXJmYWNlTmFtZSgpKTsKIAogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJGYWlsIHRvIHZlcmlmeSBjbGFzcy1uYW1lIG9mIHRoZSBBT0REOiIrYWN0dWFsRGVzYy5nZXROYW1lKCksCiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRGVzYy5nZXRDbGFzc05hbWUoKSwgYWN0dWFsRGVzYy5nZXRDbGFzc05hbWUoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJGYWlsIHRvIHZlcmlmeSBkZXNjcmlwdGlvbiBvZiB0aGUgQU9ERDoiK2FjdHVhbERlc2MuZ2V0TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICBleHBlY3RlZERlc2MuZ2V0RGVzY3JpcHRpb24oKSwgYWN0dWFsRGVzYy5nZXREZXNjcmlwdGlvbigpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkZhaWwgdG8gdmVyaWZ5IHJlc291cmNlQWRhcHRlciBvZiB0aGUgQU9ERDoiK2FjdHVhbERlc2MuZ2V0TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICBleHBlY3RlZERlc2MuZ2V0UmVzb3VyY2VBZGFwdGVyKCksIGFjdHVhbERlc2MuZ2V0UmVzb3VyY2VBZGFwdGVyKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFByb3BlcnRpZXMgZXhwZWN0ZWRQcm9wcyA9IGV4cGVjdGVkRGVzYy5nZXRQcm9wZXJ0aWVzKCk7CiAgICAgICAgICAgICBQcm9wZXJ0aWVzIGFjdHVhbFByb3BzID0gYWN0dWFsRGVzYy5nZXRQcm9wZXJ0aWVzKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZm9yKE9iamVjdCBuYW1lIDogYWN0dWFsUHJvcHMua2V5U2V0KCkpewogICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygiRmFpbCB0byB2ZXJpZnkgcHJvcGVydHkgKCIrbmFtZSsiKSBvZiB0aGUgQU9ERDoiK2FjdHVhbERlc2MuZ2V0TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRQcm9wcy5nZXQobmFtZSksIGFjdHVhbFByb3BzLmdldChuYW1lKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJGYWlsIHRvIHZlcmlmeSBzaXplIG9mIHByb3BlcnRpZXMgb2YgdGhlIEFPREQ6IithY3R1YWxEZXNjLmdldE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRQcm9wcy5zaXplKCksIGFjdHVhbFByb3BzLnNpemUoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZXhwZWN0ZWRBT0REcy5yZW1vdmUoYWN0dWFsRGVzYy5nZXROYW1lKCkpOwogICAgICAgICB9CiAgICAgICAgIGlmKGV4cGVjdGVkQU9ERHMuc2l6ZSgpPjApewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCmluZGV4IDM4YWYxOGMuLjI5MDU5MzIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKQEAgLTkxLDggKzkxLDggQEAKICAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgotCTxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8c2VjdXJpdHktaWRlbnRpdHk+CiAgICAgICAgIDx1c2UtY2FsbGVyLWlkZW50aXR5Lz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmluZGV4IDExNDZhNWEuLjBhN2UwZGEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbApAQCAtMzMsNyArMzMsNyBAQAogICAgICAgICAgICAgVGVzdEludGVnZXJQcm9wCiAgICAgICAgICAgPC9hY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgIDxhY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgICAgIDIgCisgICAgICAgICAgICAyCiAgICAgICAgICAgPC9hY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgPC9hY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPC9hY3RpdmF0aW9uLWNvbmZpZz4KQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+CiAgICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxqbmRpLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvam5kaS1uYW1lPgorICAgIDxqbmRpLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPGdlbi1jbGFzc2VzLz4KICAgICA8L2VqYj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKaW5kZXggNzVlYmRlMC4uYTAzNDUwZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKIAogICAgIHB1YmxpYyBNZXNzYWdlQ2hlY2tlckVKQigpIHt9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJiZWFuIGNyZWF0ZWQiKTsKICAgICAgICAgaGVsZENvbiA9IG51bGw7CkBAIC01OCwxMSArNTgsMTEgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgLy9UZWxsIHRoZSByZXNvdXJjZSBhZGFwdGVyIHRoZSBjbGllbnQgaXMgcmVhZHkgdG8gcnVuCi0gICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeUFsbCgpOyAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5QWxsKCk7CisKICAgICAgICAgICAgICAgICBkZWJ1ZygiTk9USUZJRUQuLi4gU1RBUlQgV0FJVElORyIpOwogICAgICAgICAgICAgICAgIC8vV2FpdCB1bnRpbCBiZWluZyB0b2xkIHRvIHJlYWQgZnJvbSB0aGUgZGF0YWJhc2UKLSAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkud2FpdCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkud2FpdCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtNzAsNyArNzAsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TWVzc2FnZUNvdW50KCkgewotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgIENvbm5lY3Rpb24gY29uID0gZ2V0RnJlc2hDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBpbnQgY291bnQxID0gZ2V0Q291bnQoY29uKTsKICAgICAgICAgICAgIGNvbi5jbG9zZSgpOwpAQCAtNzksNyArNzksNyBAQAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLm91dCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCX0KKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q291bnQoQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtMTA1LDcgKzEwNSw3IEBACiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICB1c2VyID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3VzZXIiKTsKICAgICAgICAgICAgIHBhc3N3b3JkID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3Bhc3N3b3JkIik7Ci0gICAgICAgICAgICB7IAorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAvL3Rlc3Qgd2hldGhlciB0aGUgYXBwcm9wcmlhdGUgYWRtaW4tb2JqZWN0LXJlc291cmNlcyBhcmUgY3JlYXRlZAogICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImVpcy9hb3JfMSIpOwogICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImVpcy9hb3JfMV8yIik7CkBAIC0xMTQsMTAgKzExNCwxMCBAQAogICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImVpcy9hb3JfMl80Iik7CiAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiZWlzL2Fvcl8zXzUiKTsKICAgICAgICAgICAgIH0KLQkgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2Vpcy90ZXN0QWRtaW4iKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMSU5HIElOSVRJTElaRSAiKTsKLQkgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExFRCBJTklUSUxJWkUgIiArIENvbnRyb2xzKTsKKyAgICAgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2Vpcy90ZXN0QWRtaW4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMSU5HIElOSVRJTElaRSAiKTsKKyAgICAgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExFRCBJTklUSUxJWkUgIiArIENvbnRyb2xzKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMTUyLDcgKzE1Miw3IEBACiAgICAgICAgICAgICBkZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChjb24gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBjb247CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTYyLDcgKzE2Miw3IEBACiAgICAgICAgICAgICB0aHJvdyBleDE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgY2xvc2VDb25uZWN0aW9uKENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgaWYgKGhlbGRDb24gIT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwppbmRleCBkYWQyMDdiLi4wYjM4YzE5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiBlamItamFyLnhtbD1NRVRBLUlORi9lamItamFyLnhtbAogc3VuLWVqYi1qYXIueG1sPU1FVEEtSU5GL3N1bi1lamItamFyLnhtbApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggODgwNjY0Zi4uMzg5ZDU5NCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw0NSArMjgsNDUgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgLy9zdXBlcihhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBkb1Rlc3QoKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCBjb25uZWN0b3IgMS41ICIrCi0JICAgICAgICAgICAgICJjb250cmFjdHMuIik7Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAiY29udHJhY3RzLiIpOworCiAgICAgICAgIFN0cmluZyByZXMgPSAiTk9UIFJVTiI7Ci0JZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CisgICAgZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CiAgICAgICAgIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmVzICA9ICJBTEwgVEVTVFMgUEFTU0VEIjsKLQkgICAgaW50IHRlc3RDb3VudCA9IDE7CisgICAgICAgIGludCB0ZXN0Q291bnQgPSAxOwogICAgICAgICAgICAgd2hpbGUgKCFkb25lKCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKICAgICAgICAgICAgICAgICBpZiAoIWRvbmUoKSkgewogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiUnVubmluZy4uLiIpOwogICAgICAgICAgICAgICAgICAgICBwYXNzID0gY2hlY2tSZXN1bHRzKGV4cGVjdGVkUmVzdWx0cygpKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkdvdCBleHBlY3RlZCByZXN1bHRzID0gIiArIHBhc3MpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RvIG5vdCBjb250aW51ZSBpZiBvbmUgdGVzdCBmYWlsZWQKICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXNzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSAiU09NRSBURVNUUyBGQUlMRUQiOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIklEIENvbm5lY3RvciAxLjUgdGVzdCAtICIgKyB0ZXN0Q291bnQsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiSUQgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gIiArIHRlc3RDb3VudCwgc3RhdC5QQVNTKTsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0JCXRlc3RDb3VudCArKzsKKyAgICAgICAgdGVzdENvdW50ICsrOwogICAgICAgICAgICAgfQogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNzYsMTQgKzc2LDE0IEBACiAgICAgICAgIH0KICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImFubm90YXRpb24tY29ubmVjdG9yMTYtbWl4ZWQtbW9kZUlEIik7CiAKLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkVYSVRJTkcuLi4gU1RBVFVTID0gIiArIHJlcyk7CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrUmVzdWx0cyhpbnQgbnVtKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgaW50IHJlc3VsdCA9IGNoZWNrZXIuZ2V0TWVzc2FnZUNvdW50KCk7CkBAIC05Miw3ICs5Miw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gZG9uZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gY2hlY2tlci5kb25lKCk7CkBAIC0xMDAsNyArMTAwLDcgQEAKIAogICAgIHByaXZhdGUgaW50IGV4cGVjdGVkUmVzdWx0cygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gY2hlY2tlci5leHBlY3RlZFJlc3VsdHMoKTsKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIG5vdGlmeUFuZFdhaXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgY2hlY2tlci5ub3RpZnlBbmRXYWl0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGU0YTU3MzUuLjNmYWNiZmUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCkBAIC0yOSw0MSArMjksNDEgQEAKIAogLyoqCiAgKi8KLXB1YmxpYyBjbGFzcyBNeU1lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sIAorcHVibGljIGNsYXNzIE15TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwKICAgICAgICAgTXlNZXNzYWdlTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjID0gbnVsbDsKICAgICBwcml2YXRlIENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yLCB3aGljaCBpcyBwdWJsaWMgYW5kIHRha2VzIG5vIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgTXlNZXNzYWdlQmVhbigpIHt9CiAKICAgICAvKioKLSAgICAgKiBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IAotICAgICAqIG5vdCBmaW5hbCBvciBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIAorICAgICAqIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQKKyAgICAgKiBub3QgZmluYWwgb3Igc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZAogICAgICAqIHdpdGggb25lIGFyZ3VtZW50IG9mIHR5cGUgamFrYXJ0YS5lamIuTWVzc2FnZURyaXZlbkNvbnRleHQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gbWRjICAgIHRoZSBjb250ZXh0IHRvIHNldAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYykgewotCXRoaXMubWRjID0gbWRjOworICAgIHRoaXMubWRjID0gbWRjOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIGVqYkNyZWF0ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKLSAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8gCisgICAgICogZWpiQ3JlYXRlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCisgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vCiAgICAgICogYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHsgfQogCiAgICAgLyoqCi0gICAgICogb25NZXNzYWdlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAorICAgICAqIG9uTWVzc2FnZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgogICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBvbmUgYXJndW1lbnQKICAgICAgKiBvZiB0eXBlIGpha2FydGEuam1zLk1lc3NhZ2UuCiAgICAgICoKLSAgICAgKiBDYXN0cyB0aGUgaW5jb21pbmcgTWVzc2FnZSB0byBhIFRleHRNZXNzYWdlIGFuZCBkaXNwbGF5cyAKKyAgICAgKiBDYXN0cyB0aGUgaW5jb21pbmcgTWVzc2FnZSB0byBhIFRleHRNZXNzYWdlIGFuZCBkaXNwbGF5cwogICAgICAqIHRoZSB0ZXh0LgogICAgICAqCiAgICAgICogQHBhcmFtIGluTWVzc2FnZSAgICB0aGUgaW5jb21pbmcgbWVzc2FnZQpAQCAtNzQsNyArNzQsNyBAQAogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiAoaW5NZXNzYWdlLmVuZHNXaXRoKCJXUklURSIpKSB7Ci0gICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJXUklURSIsIAorICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiV1JJVEUiLAogICAgICAgICAgICAgICAgICAgICAgICAgaW5NZXNzYWdlLnN1YnN0cmluZygwLCBpbk1lc3NhZ2UubGFzdEluZGV4T2YoIjoiKSkpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpbk1lc3NhZ2UuZW5kc1dpdGgoIkRFTEVURSIpKSB7CiAgICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJERUxFVEUiLApAQCAtOTAsMTAgKzkwLDEwIEBACiAgICAgICAgIH0KIAogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIGVqYlJlbW92ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKLSAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8gCisgICAgICogZWpiUmVtb3ZlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCisgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vCiAgICAgICogYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CkBAIC0xMDMsNjIgKzEwMyw2MiBAQAogCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGlkICAgID0gbWVzc2FnZS5zdWJzdHJpbmcoMCwgbWVzc2FnZS5pbmRleE9mKCI6IikpOwotICAgICAgICBTdHJpbmcgYm9keSAgPSBtZXNzYWdlLnN1YnN0cmluZyhtZXNzYWdlLmluZGV4T2YoIjoiKSsxKTsgCisgICAgICAgIFN0cmluZyBib2R5ICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKG1lc3NhZ2UuaW5kZXhPZigiOiIpKzEpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmICgiUkVBRCIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIlJlYWRpbmcgcm93IGZyb20gZGF0YWJhc2UuLi4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogCiAgICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgICAgZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gCisgICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPQogICAgICAgICAgICAgICAgICAgIlNFTEVDVCBpZCBmcm9tIG1lc3NhZ2VzIHdoZXJlIGlkID0gJ1FRJyI7CiAgICAgICAgICAgICAgICAgICBSZXN1bHRTZXQgcmVzdWx0cyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KTsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMubmV4dCgpOwotICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJRUSBoYXMgYmFsYW5jZSAiICsgCisgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5nZXRJbnQoImJhbGFuY2UiKSArICIgZG9sbGFycyIpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgc3RtdC5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVhZCBvbmUgYWNjb3VudFxuIik7CiAKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIldSSVRFIi5lcXVhbHMob3ApKSB7CiAKICAgICAgICAgICAgICAgICBkZWJ1ZygiSW5zZXJ0aW5nIG9uZSBtZXNzYWdlIGluIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgY3JlYXRlUm93KGlkLCBib2R5LCBkYkNvbm5lY3Rpb24pOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBvbmUgbWVzc2FnZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIkRFTEVURSIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIkRlbGV0aW5nIG9uZSBtZXNzYWdlIGZyb20gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVsZXRlUm93KGlkLCBkYkNvbm5lY3Rpb24pOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVsZXRlZCBvbmUgbWVzc2FnZVxuIik7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJERUxFVEVfQUxMIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgYWxsIG1lc3NhZ2VzIGZyb20gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CkBAIC0xNzEsNyArMTcxLDcgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy91bnN1cHBvcnRlZCBvcAogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfWZpbmFsbHl7CiAgICAgICAgICAgICB0cnl7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uLmNsb3NlKCk7CkBAIC0xODAsOSArMTgwLDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgY3JlYXRlUm93KFN0cmluZyBpZCwgU3RyaW5nIGJvZHksIAotICAgICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorCisgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVJvdyhTdHJpbmcgaWQsIFN0cmluZyBib2R5LAorICAgICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIC8vIENyZWF0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQpAQCAtMTk4LDkgKzE5OCw5IEBACiAgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlUm93KFN0cmluZyBpZCwgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVSb3coU3RyaW5nIGlkLCBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIERlbGV0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQogICAgICAgICBkZWJ1ZygiRGVsZXRlUm93IHdpdGggSUQgPSAiICsgaWQpOwogICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKQEAgLTIxMyw5ICsyMTMsOSBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUFsbChqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUFsbChqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIERlbGV0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQogICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gIkRFTEVURSBGUk9NIG1lc3NhZ2VzIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQppbmRleCAyNDNiYWY0Li5lZTcxNjI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2FwcC9zcmMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9hcHAvc3JjL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCkBAIC00NCwxNyArNDQsMTcgQEAKIAogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgSU9FeGNlcHRpb257CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhpcyBpcyB0byB0ZXN0IGNvbm5lY3RvciAxLjUgIisKLQkgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKKyAgICAgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKIAogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogCiAgICAgICAgIFN0cmluZyByZXMgPSAiTk9UIFJVTiI7Ci0gICAgCWRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOworICAgICAgICBkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKICAgICAgICAgYm9vbGVhbiBwYXNzID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXMgID0gIkFMTCBURVNUUyBQQVNTRUQiOwotCSAgICBpbnQgdGVzdENvdW50ID0gMTsKKyAgICAgICAgaW50IHRlc3RDb3VudCA9IDE7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiU3RhcnRpbmcgdGhlIHRlc3QiKTsKICAgICAgICAgICAgIG91dC5mbHVzaCgpOwogICAgICAgICAgICAgd2hpbGUgKCFkb25lKG91dCkpIHsKQEAgLTcwLDE4ICs3MCwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gIlNPTUUgVEVTVFMgRkFJTEVEIjsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSUQgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gIiArIHRlc3RDb3VudCArICIgRkFJTCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6RkFJTCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSUQgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gIiArIHRlc3RDb3VudCArICIgUEFTUyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOwotCQkgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiRU5EX09GX0VYRUNVVElPTiIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiRU5EX09GX0VYRUNVVElPTiIpOwotICAgICAgICAgICAgCisKIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW1wb3J0aW5nIHRyYW5zYWN0aW9uIHRlc3QgZmFpbGVkLiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGZlNzczNTMuLjVhNWYwYTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL2Fubm90YXRpb24tY29ubmVjdG9yMTYtbWl4ZWQtbW9kZS9zZXJ2bGV0Ii8+CiA8cHJvcGVydHkgbmFtZT0iaHR0cDpob3N0IiB2YWx1ZT0ibG9jYWxob3N0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYnVpbGQueG1sCmluZGV4IDMwODBkOWMuLmViZWQ4MTEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYnVpbGQueG1sCkBAIC04MSwxNSArODEsMTUgQEAKIDwhLS0KICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWJjbGllbnQtY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9ImNvbm5lY3RvcjEuNSAoZWFyIGJhc2VkKSIvPgotCSAgICA8L2FudGNhbGw+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJjb25uZWN0b3IxLjUgKGVhciBiYXNlZCkiLz4KKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogLS0+CiAKIDwhLS0KICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImFubm90YXRpb24tY29ubmVjdG9yMTYtbWl4ZWQtbW9kZSIgLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImFubm90YXRpb24tY29ubmVjdG9yMTYtbWl4ZWQtbW9kZSIgLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogLS0+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL01FVEEtSU5GL3JhLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvTUVUQS1JTkYvcmEueG1sCmluZGV4IDExYTBlMDQuLmY4OTY5YjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvTUVUQS1JTkYvcmEueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvTUVUQS1JTkYvcmEueG1sCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAgICAgICAgIDxpbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4gICAgICAgICAgCisgICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgICAgICAgICAgPG1lc3NhZ2VsaXN0ZW5lcj4KICAgICAgICAgICAgICAgICAgICAgPG1lc3NhZ2VsaXN0ZW5lci10eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyCkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8L2FjdGl2YXRpb25zcGVjLWNsYXNzPgogICAgICAgICAgICAgICAgICAgICA8L2FjdGl2YXRpb25zcGVjPgogICAgICAgICAgICAgICAgIDwvbWVzc2FnZWxpc3RlbmVyPgotICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4gICAgICAgICAgCisgICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPgogICAgICAgICA8L2luYm91bmQtcmVzb3VyY2VhZGFwdGVyPgogICAgICAgICA8YWRtaW5vYmplY3Q+CiAgICAgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvYnVpbGQueG1sCmluZGV4IGZmOWI3MzYuLmEwYzNmOTEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9idWlsZC54bWwKQEAgLTMwLDggKzMwLDggQEAKIAogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iID4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgotCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CisgICAgPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KKyAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgogICAgIDwvYW50Y2FsbD4KICAgICA8amFyIGphcmZpbGU9Ii4uL2dlbmVyaWMtcmEuamFyIiBiYXNlZGlyPSJjbGFzc2VzIgogICAgICAgICAgaW5jbHVkZXM9ImNvbm5lY3Rvci8qLmNsYXNzIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQppbmRleCA1NTUzM2Q0Li5mNTliMmIzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIENvbnRyb2xzIHsKICAgICBwdWJsaWMgc3RhdGljIE9iamVjdCByZWFkeUxvY2sgPSBuZXcgT2JqZWN0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKaW5kZXggNjU4MjMzZS4uZDczYzg2MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIERlbGl2ZXJ5V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zNiw3ICszNiw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgb3A7CiAgICAgcHJpdmF0ZSBib29sZWFuIGtlZXBDb3VudDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnRlciA9IDA7Ci0gICAgCisKICAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIFN0cmluZyBvcCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgdGhpcy5rZWVwQ291bnQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIAorICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywKICAgICAgICAgICAgIFN0cmluZyBvcCwgYm9vbGVhbiBrZWVwQ291bnQpIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC01NSw3ICs1NSw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9NZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7CiAgICAgICAgICAgICAvL2VwLmJlZm9yZURlbGl2ZXJ5KG9uTWVzc2FnZSk7CkBAIC03OCwxMSArNzgsMTEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy9lcC5hZnRlckRlbGl2ZXJ5KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtOTMsMTQgKzkzLDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCmluZGV4IDEwMGNhY2UuLmZhOTNmNjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwogICAgIH0KIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5mb3JnZXQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICB9CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5wcmVwYXJlOiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgICAgIHJldHVybiBYQVJlc291cmNlLlhBX09LOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBYaWRbXSByZWNvdmVyKGludCBmbGFnKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucmVjb3ZlcjogIiArIGZsYWdUb1N0cmluZyhmbGFnKSk7CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtNjYsNyArNjYsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnN0YXJ0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSArICIsIiArCiAgICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCmluZGV4IGI1YjBmMDIuLjRjOWMwMTIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAvKioKICAqIGNvbGxlY3Rpb24gb2YgbWVzc2FnZXMuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CiAKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICBTdHJpbmcgY29tbWFuZCAgPSBhcmdzWzBdOwogICAgICAgIFN0cmluZyBkZXN0TmFtZSA9IGFyZ3NbMV07CiAgICAgICAgU3RyaW5nIG1lc3NhZ2UgID0gYXJnc1syXTsKLSAgIAorCiAgICAgICAgaWYgKCEiYWRkIi5lcXVhbHMoY29tbWFuZCkpIHsKICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL015QWN0aXZhdGlvblNwZWNfMS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL015QWN0aXZhdGlvblNwZWNfMS5qYXZhCmluZGV4IDBhNWQ2NTUuLmM5ZTVmMjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFjdGl2YXRpb25TcGVjXzEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvTXlBY3RpdmF0aW9uU3BlY18xLmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKICAqIHNvIHRoYXQgdGhlIGFwcCBzZXJ2ZXIgY2FuIGluc3RhbnRpYXRlIGFuZCBjb25maWd1cmUKICAqIGl0IGF0IHRoZSBydW50aW1lLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBAQWN0aXZhdGlvbigKICAgICAgICAgbWVzc2FnZUxpc3RlbmVycyA9IHtjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXJfMS5jbGFzcywgY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzfQpAQCAtMzgsNyArMzgsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIHRlc3RQcm9wOwogICAgIHByaXZhdGUgSW50ZWdlciB0ZXN0SW50ZWdlclByb3A7CiAgICAgcHJpdmF0ZSBSZXNvdXJjZUFkYXB0ZXIgcmVzb3VyY2VhZGFwdGVyOwotICAgICAKKwogCiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvbk5hbWUgKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvbk5hbWU7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQppbmRleCA4Y2YzOWE1Li43NDIzNTY5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKQEAgLTUyLDEzICs1MiwxMyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CiAgICAgICAgIGlmIChyZXNldENvbnRyb2wuZXF1YWxzKCJCRUdJTk5JTkciKSkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5yZWFkeUxvY2spewogICAgICAgICAgICAgICAgIENvbnRyb2xzLmRvbmU9ZmFsc2U7CiAgICAgICAgICAgICB9Ci0JICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7Ci0JfQorICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBkb25lKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3RfSW50ZXJmYWNlXzIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0X0ludGVyZmFjZV8yLmphdmEKaW5kZXggNzllMjkzYi4uNDM5ZTYxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3RfSW50ZXJmYWNlXzIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdF9JbnRlcmZhY2VfMi5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbm5lY3RvcjsKIAogcHVibGljIGludGVyZmFjZSBNeUFkbWluT2JqZWN0X0ludGVyZmFjZV8yIHsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldEV4cGVjdGVkUmVzdWx0cyAoSW50ZWdlciB2YWx1ZSk7CiAKICAgICBwdWJsaWMgSW50ZWdlciBnZXRFeHBlY3RlZFJlc3VsdHMgKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdF9JbnRlcmZhY2VfMy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3RfSW50ZXJmYWNlXzMuamF2YQppbmRleCA0OTZkNmRkLi4wZDdjNTZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdF9JbnRlcmZhY2VfMy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0X0ludGVyZmFjZV8zLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29ubmVjdG9yOwogCiBwdWJsaWMgaW50ZXJmYWNlIE15QWRtaW5PYmplY3RfSW50ZXJmYWNlXzMgewotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RXhwZWN0ZWRSZXN1bHRzIChJbnRlZ2VyIHZhbHVlKTsKIAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldEV4cGVjdGVkUmVzdWx0cyAoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKaW5kZXggNGE5NjNkYy4uMTg5MjY5YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKQEAgLTI2LDkgKzI2LDkgQEAKICAqIHNvIHRoYXQgdGhlIGFwcCBzZXJ2ZXIgY2FuIGluc3RhbnRpYXRlIGFuZCBjb25maWd1cmUKICAqIGl0IGF0IHRoZSBydW50aW1lLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMgCitwdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMKICAgICBpbXBsZW1lbnRzIEFjdGl2YXRpb25TcGVjLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIFN0cmluZyBkZXN0aW5hdGlvbk5hbWU7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0UHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdFByb3A7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdFByb3AgKFN0cmluZyB0ZXN0UHJvcCkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdFByb3AgKCkgY2FsbGVkLi4uIHRlc3RQcm9wID0gIiArIHRlc3RQcm9wKTsKICAgICAgICAgdGhpcy50ZXN0UHJvcCA9IHRlc3RQcm9wOwpAQCAtNzUsNyArNzUsNyBAQAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldFRlc3RJbnRlZ2VyUHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdEludGVnZXJQcm9wOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RJbnRlZ2VyUHJvcCAoSW50ZWdlciB0ZXN0UHJvcDEpIHsKICAgICAgICAgZGVidWcoInNldFRlc3RJbnRlZ2VyUHJvcCAoKSBjYWxsZWQuLi4gdGVzdEludGVnZXJQcm9wID0gIiArIHRlc3RQcm9wMSk7CiAgICAgICAgIHRoaXMudGVzdEludGVnZXJQcm9wID0gdGVzdFByb3AxOwpAQCAtOTksNyArOTksNyBAQAogCiAgICAgICB9CiAKLSAgIH0gCisgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZGVidWcgKFN0cmluZyBtZXNzYWdlKQogICAgIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSQS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJBLmphdmEKaW5kZXggMGZiZDRlMi4uYzIwYjczOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJBLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJBLmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKIC8qKgogICogVGhpcyBpcyBhIHNhbXBsZSByZXNvdXJjZSBhZGFwdGVyCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIEBDb25uZWN0b3IoCiAgICBkaXNwbGF5TmFtZSA9ICJTaW1wbGUgUkEiLApAQCAtNzcsMTIgKzc3LDEyIEBACiAKICAgICAgICAgLy90ZXN0aW5nIGNyZWF0IHRpbWVyCiAgICAgICAgIFRpbWVyIHRpbWVyID0gbnVsbDsKLQkgIHRyeXsKLQkgICAgICB0aW1lciA9IGN0eC5jcmVhdGVUaW1lcigpOwotCSAgfSBjYXRjaChVbmF2YWlsYWJsZUV4Y2VwdGlvbiB1ZSkgewotCSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IiKTsKLQkgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIGZvcm0gYm9vdHN0cmFwIik7Ci0JICB9CisgICAgICB0cnl7CisgICAgICAgICAgdGltZXIgPSBjdHguY3JlYXRlVGltZXIoKTsKKyAgICAgIH0gY2F0Y2goVW5hdmFpbGFibGVFeGNlcHRpb24gdWUpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIik7CisgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJFcnJvciBmb3JtIGJvb3RzdHJhcCIpOworICAgICAgfQogICAgICAgICBkZWJ1ZygiMDA0LiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKICAgICAgICAgZGVidWcoIjAwNS4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKaW5kZXggNDc5MjQzMi4uZmZmZmY5NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCkBAIC0zNSw3ICszNSw3IEBACiAvKioKICAqIFRoaXMgaXMgYSBzYW1wbGUgcmVzb3VyY2UgYWRhcHRlcgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBAQ29ubmVjdG9yKAogICAgLyptb2R1bGVOYW1lPSJ0ZXN0IHJhIiwqLwpAQCAtNzQsMTIgKzc0LDEyIEBACiAKICAgICAgICAgLy90ZXN0aW5nIGNyZWF0IHRpbWVyCiAgICAgICAgIFRpbWVyIHRpbWVyID0gbnVsbDsKLQkgIHRyeXsKLQkgICAgICB0aW1lciA9IGN0eC5jcmVhdGVUaW1lcigpOwotCSAgfSBjYXRjaChVbmF2YWlsYWJsZUV4Y2VwdGlvbiB1ZSkgewotCSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IiKTsKLQkgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIGZvcm0gYm9vdHN0cmFwIik7Ci0JICB9CisgICAgICB0cnl7CisgICAgICAgICAgdGltZXIgPSBjdHguY3JlYXRlVGltZXIoKTsKKyAgICAgIH0gY2F0Y2goVW5hdmFpbGFibGVFeGNlcHRpb24gdWUpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIik7CisgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJFcnJvciBmb3JtIGJvb3RzdHJhcCIpOworICAgICAgfQogICAgICAgICBkZWJ1ZygiMDA0LiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKICAgICAgICAgZGVidWcoIjAwNS4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGxfMS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGxfMS5qYXZhCmluZGV4IGQ0Yjg1YjguLmRjYzViMDkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsXzEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbF8xLmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKIC8qKgogICogVGhpcyBpcyBhIHNhbXBsZSByZXNvdXJjZSBhZGFwdGVyCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIEBDb25uZWN0b3IoCiAgICBkaXNwbGF5TmFtZSA9ICJTaW1wbGUgUmVzb3VyY2UgQWRhcHRlciIsCkBAIC00OCw3ICs0OCw3IEBACiAgICBlaXNUeXBlID0gIkdlbmVyaWMgVHlwZSIsCiAgICB2ZXJzaW9uID0gIjEuMEFscGhhIgogKQotcHVibGljIGNsYXNzIFNpbXBsZVJlc291cmNlQWRhcHRlckltcGxfMSAKK3B1YmxpYyBjbGFzcyBTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsXzEKIGltcGxlbWVudHMgUmVzb3VyY2VBZGFwdGVyLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIEJvb3RzdHJhcENvbnRleHQgY3R4OwpAQCAtODQsMTEgKzg0LDExIEBACiAKICAgICBwdWJsaWMgdm9pZAogICAgIGVuZHBvaW50RGVhY3RpdmF0aW9uICgKLSAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZW5kcG9pbnRGYWN0b3J5LCAKKyAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZW5kcG9pbnRGYWN0b3J5LAogICAgICAgICAgICAgQWN0aXZhdGlvblNwZWMgc3BlYykgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJUaGlzIHJlc291cmNlLWFkYXB0ZXIgc2hvdWxkIG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiKTsgIAorICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJUaGlzIHJlc291cmNlLWFkYXB0ZXIgc2hvdWxkIG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiKTsKICAgICB9Ci0gIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHRlc3ROYW1lOwogICAgIH0KQEAgLTEyMCw3ICsxMjAsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbF0gPT0+ICIgKyBtZXNzYWdlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpIAorICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykKICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGxfMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGxfMi5qYXZhCmluZGV4IGRhNWFlMTkuLmE0NGYxYzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsXzIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbF8yLmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKIC8qKgogICogVGhpcyBpcyBhIHNhbXBsZSByZXNvdXJjZSBhZGFwdGVyCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIEBDb25uZWN0b3IoCiAgICBkaXNwbGF5TmFtZSA9ICJTaW1wbGUgUmVzb3VyY2UgQWRhcHRlciIsCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCmluZGV4IDY0YjcxYzQuLjc2MmUwM2UgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgV29ya0Rpc3BhdGNoZXIgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtNDQsMTEgKzQ0LDExIEBACiAgICAgcHJvdGVjdGVkIEFjdGl2YXRpb25TcGVjIHNwZWM7CiAgICAgcHJvdGVjdGVkIFdvcmtNYW5hZ2VyIHdtOwogICAgIHByb3RlY3RlZCBYQVRlcm1pbmF0b3IgeGE7Ci0gICAgCisKICAgICBwdWJsaWMgV29ya0Rpc3BhdGNoZXIoCiAgICAgICAgICAgICBTdHJpbmcgaWQsCiAgICAgICAgICAgICBCb290c3RyYXBDb250ZXh0IGN0eCwKLSAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwgCisgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIHRoaXMuaWQgICAgICA9IGlkOwogICAgICAgICB0aGlzLmN0eCAgICAgPSBjdHg7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICBkZWJ1ZygiV0FJVC4uLiIpOwpAQCAtODMsMjYgKzgzLDI2IEBACiAgICAgICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKTsKIAogICAgICAgICAgICAgICAgIGlmICghZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOyAKKyAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOwogICAgICAgICAgICAgICAgICAgICAvL3dtLmRvV29yayhkLCAwLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobmV3IEZha2VYQVJlc291cmNlKCkpOwogICAgICAgICAgICAgICAgICAgICBpbnQgbnVtT2ZNZXNzYWdlcyA9IDU7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vaW1wb3J0aW5nIHRyYW5zYWN0aW9uCiAKICAgICAgICAgICAgICAgICAgICAgLy93cml0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgRXhlY3V0aW9uQ29udGV4dCBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKIAotICAgICAgICAgICAgICAgICAgICBEZWxpdmVyeVdvcmsgdyA9IAorICAgICAgICAgICAgICAgICAgICBEZWxpdmVyeVdvcmsgdyA9CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiV1JJVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTExMCw3ICsxMTAsNyBAQAogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiRE9ORSBXUklURSBUTyBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSBudW1PZk1lc3NhZ2VzOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL3JvbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJERUxFVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTE1MCw3ICsxNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiREVMRVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xOTUsNyArMTk1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKFhBUmVzb3VyY2UuWEFfT0sgPT0geGEucHJlcGFyZShlYy5nZXRYaWQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlhBIFBSRVBBUkUvQ09NTUlULiBET05FIFdSSVRFIFRPIERCICIpOwpAQCAtMjA3LDE5ICsyMDcsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IDM7CiAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUgYWxsLgogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIDEsICJERUxFVEVfQUxMIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJET05FIERFTEVURSBBTEwgRlJPTSBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAwOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI0Niw3ICsyNDYsNyBAQAogICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTI2MSwxNCArMjYxLDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTI5MSwxMyArMjkxLDEzIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL1NsZWVwIGZvciA1IHNlY29uZHMKICAgICAgICAgICAgIC8vVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCg1KjEwMDApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICAvL05vdGlmeSB0aGUgY2xpZW50IHRvIGNoZWNrIHRoZSByZXN1bHRzCi0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeUFsbCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5QWxsKCk7CiAKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgcmVzdWx0cyBhcmUgdmVyaWZpZWQgYnkgdGhlIGNsaWVudAotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7CiAKICAgICAgICAgICAgICAgICBpZiAoc3RvcCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKaW5kZXggNzdkYmYzNC4uNmJkOWU1NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQpAQCAtMzYsOCArMzYsOCBAQAogICAgIHB1YmxpYyBpbnQgYnJhbmNoUXVhbGlmaWVyOwogICAgIHB1YmxpYyBpbnQgZ2xvYmFsVHhJRDsKIAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OyAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsgCisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7CisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7CiAKICAgICBwdWJsaWMgWElEKCkgewogICAgICAgICBpbnQgZm9vID0gSUQrKzsKQEAgLTU1LDEwICs1NSwxMCBAQAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICAgLy8gSXQgY2FuJ3QgYmUgZXF1YWwKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBvdGhlciA9IChYSUQpbzsgICAgICAgICAgICAgICAgICAgLy8gVGhlIG90aGVyIFhJRCwgbm93IHByb3Blcmx5IGNhc3QKLSAgICAgICAgCi0gICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElEIAorCisgICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElECiAgICAgICAgICAgICAgICAgJiYgdGhpcy5icmFuY2hRdWFsaWZpZXIgPT0gb3RoZXIuYnJhbmNoUXVhbGlmaWVyCiAgICAgICAgICAgICAgICAgJiYgdGhpcy5nbG9iYWxUeElEID09IG90aGVyLmdsb2JhbFR4SUQpIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTgsNyArOTgsNyBAQAogICAgICAgICAgICAgICAgICJmb3JtYXRJRCgiICAgICArIGZvcm1hdElEICAgICArICIpLCAiICsKICAgICAgICAgICAgICAgICAiYnJhbmNoUXVhbGlmaWVyICgiICsgYnJhbmNoUXVhbGlmaWVyICsgIiksICIgKwogICAgICAgICAgICAgICAgICJnbG9iYWxUeElEKCIgKyBnbG9iYWxUeElEICsgIil9Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbAppbmRleCAzOGFmMThjLi4yOTA1OTMyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbApAQCAtOTEsOCArOTEsOCBAQAogICAgICAgICA8cmVzLXNoYXJpbmctc2NvcGU+U2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+Ci0JPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgorICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgorICAgIDxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxzZWN1cml0eS1pZGVudGl0eT4KICAgICAgICAgPHVzZS1jYWxsZXItaWRlbnRpdHkvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmluZGV4IDExNDZhNWEuLjBhN2UwZGEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgICAgIFRlc3RJbnRlZ2VyUHJvcAogICAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICA8YWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgICAgICAyIAorICAgICAgICAgICAgMgogICAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHk+CiAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWc+CkBAIC04NSw3ICs4NSw3IEBACiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmVpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmVpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxnZW4tY2xhc3Nlcy8+CiAgICAgPC9lamI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQppbmRleCBlMjJmYTEwLi40MDc2ZTQ5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKIAogICAgIHB1YmxpYyBNZXNzYWdlQ2hlY2tlckVKQigpIHt9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJiZWFuIGNyZWF0ZWQiKTsKICAgICAgICAgaGVsZENvbiA9IG51bGw7CkBAIC03MCwxMSArNzAsMTEgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgLy9UZWxsIHRoZSByZXNvdXJjZSBhZGFwdGVyIHRoZSBjbGllbnQgaXMgcmVhZHkgdG8gcnVuCi0gICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeUFsbCgpOyAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5QWxsKCk7CisKICAgICAgICAgICAgICAgICBkZWJ1ZygiTk9USUZJRUQuLi4gU1RBUlQgV0FJVElORyIpOwogICAgICAgICAgICAgICAgIC8vV2FpdCB1bnRpbCBiZWluZyB0b2xkIHRvIHJlYWQgZnJvbSB0aGUgZGF0YWJhc2UKLSAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkud2FpdCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkud2FpdCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtOTMsMjIgKzkzLDIyIEBACiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRNZXNzYWdlQ291bnQoKSB7Ci0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBnZXRGcmVzaENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGludCBjb3VudDEgPSBnZXRDb3VudChjb24pOwogICAgICAgICAgICAgY29uLmNsb3NlKCk7Ci0gICAgICAgICAgICAKLQkgICAgLyoKKworICAgICAgICAvKgogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLmdldExvY2tPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnkoKTsKICAgICAgICAgICAgIH0KLQkgICAgKi8KLSAgICAgICAgICAgICAgICAKKyAgICAgICAgKi8KKwogICAgICAgICAgICAgcmV0dXJuIGNvdW50MTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5vdXQpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLQl9CisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgaW50IGdldENvdW50KENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKQEAgLTEzNCwxMCArMTM0LDEwIEBACiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICB1c2VyID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3VzZXIiKTsKICAgICAgICAgICAgIHBhc3N3b3JkID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3Bhc3N3b3JkIik7Ci0JICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvdGVzdEFkbWluIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTElORyBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKLQkgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExFRCBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iICsgQ29udHJvbHMpOworICAgICAgICBDb250cm9scyA9IChNeUFkbWluT2JqZWN0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL3Rlc3RBZG1pbiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExJTkcgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7CisgICAgICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMRUQgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIiArIENvbnRyb2xzKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMTcyLDcgKzE3Miw3IEBACiAgICAgICAgICAgICBkZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChjb24gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBjb247CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTgzLDcgKzE4Myw3IEBACiAgICAgICAgICAgICB0aHJvdyBleDE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgY2xvc2VDb25uZWN0aW9uKENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgaWYgKGhlbGRDb24gIT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2FwcC9zcmMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGFkMjA3Yi4uMGIzOGMxOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2FwcC9zcmMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIGVqYi1qYXIueG1sPU1FVEEtSU5GL2VqYi1qYXIueG1sCiBzdW4tZWpiLWphci54bWw9TUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYjg1ZWZkYS4uNzQ0MzAzMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsNDUgKzI4LDQ1IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIC8vc3VwZXIoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KCkgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgY29ubmVjdG9yIDEuNSAiKwotCSAgICAgICAgICAgICAiY29udHJhY3RzLiIpOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKKwogICAgICAgICBTdHJpbmcgcmVzID0gIk5PVCBSVU4iOwotCWRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOworICAgIGRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOwogICAgICAgICBib29sZWFuIHBhc3MgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7Ci0JICAgIGludCB0ZXN0Q291bnQgPSAxOworICAgICAgICBpbnQgdGVzdENvdW50ID0gMTsKICAgICAgICAgICAgIHdoaWxlICghZG9uZSgpKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFkb25lKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlJ1bm5pbmcuLi4iKTsKICAgICAgICAgICAgICAgICAgICAgcGFzcyA9IGNoZWNrUmVzdWx0cyhleHBlY3RlZFJlc3VsdHMoKSk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJHb3QgZXhwZWN0ZWQgcmVzdWx0cyA9ICIgKyBwYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kbyBub3QgY29udGludWUgaWYgb25lIHRlc3QgZmFpbGVkCiAgICAgICAgICAgICAgICAgICAgIGlmICghcGFzcykgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gIlNPTUUgVEVTVFMgRkFJTEVEIjsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJJRCBDb25uZWN0b3IgMS41IHRlc3QgLSAiICsgdGVzdENvdW50LCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIklEIENvbm5lY3RvciAxLjUgdGVzdCAtICIgKyB0ZXN0Q291bnQsIHN0YXQuUEFTUyk7Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotCQl0ZXN0Q291bnQgKys7CisgICAgICAgIHRlc3RDb3VudCArKzsKICAgICAgICAgICAgIH0KIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTc2LDE0ICs3NiwxNCBAQAogICAgICAgICB9CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJhbm5vdGF0aW9uLWNvbm5lY3RvcjE1SUQiKTsKIAotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiRVhJVElORy4uLiBTVEFUVVMgPSAiICsgcmVzKTsKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tSZXN1bHRzKGludCBudW0pIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICBpbnQgcmVzdWx0ID0gY2hlY2tlci5nZXRNZXNzYWdlQ291bnQoKTsKQEAgLTkyLDcgKzkyLDcgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBkb25lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIHJldHVybiBjaGVja2VyLmRvbmUoKTsKQEAgLTEwMCw3ICsxMDAsNyBAQAogCiAgICAgcHJpdmF0ZSBpbnQgZXhwZWN0ZWRSZXN1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIHJldHVybiBjaGVja2VyLmV4cGVjdGVkUmVzdWx0cygpOwpAQCAtMTA4LDcgKzEwOCw3IEBACiAKICAgICBwcml2YXRlIHZvaWQgbm90aWZ5QW5kV2FpdCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICBjaGVja2VyLm5vdGlmeUFuZFdhaXQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCmluZGV4IDQ3ZDc3NmYuLmM3Yjk5ZTggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQpAQCAtMzEsNDEgKzMxLDQxIEBACiAKIC8qKgogICovCi1wdWJsaWMgY2xhc3MgTXlNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLCAKK3B1YmxpYyBjbGFzcyBNeU1lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sCiAgICAgICAgIE15TWVzc2FnZUxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgdHJhbnNpZW50IE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYyA9IG51bGw7CiAgICAgcHJpdmF0ZSBDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3Rvciwgd2hpY2ggaXMgcHVibGljIGFuZCB0YWtlcyBubyBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIE15TWVzc2FnZUJlYW4oKSB7fQogCiAgICAgLyoqCi0gICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCAKLSAgICAgKiBub3QgZmluYWwgb3Igc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCAKKyAgICAgKiBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0CisgICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQKICAgICAgKiB3aXRoIG9uZSBhcmd1bWVudCBvZiB0eXBlIGpha2FydGEuZWpiLk1lc3NhZ2VEcml2ZW5Db250ZXh0LgogICAgICAqCiAgICAgICogQHBhcmFtIG1kYyAgICB0aGUgY29udGV4dCB0byBzZXQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dChNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMpIHsKLQl0aGlzLm1kYyA9IG1kYzsKKyAgICB0aGlzLm1kYyA9IG1kYzsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCi0gICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vIAorICAgICAqIGVqYkNyZWF0ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgorICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubwogICAgICAqIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7IH0KIAogICAgIC8qKgotICAgICAqIG9uTWVzc2FnZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKKyAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKICAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggb25lIGFyZ3VtZW50CiAgICAgICogb2YgdHlwZSBqYWthcnRhLmptcy5NZXNzYWdlLgogICAgICAqCi0gICAgICogQ2FzdHMgdGhlIGluY29taW5nIE1lc3NhZ2UgdG8gYSBUZXh0TWVzc2FnZSBhbmQgZGlzcGxheXMgCisgICAgICogQ2FzdHMgdGhlIGluY29taW5nIE1lc3NhZ2UgdG8gYSBUZXh0TWVzc2FnZSBhbmQgZGlzcGxheXMKICAgICAgKiB0aGUgdGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBpbk1lc3NhZ2UgICAgdGhlIGluY29taW5nIG1lc3NhZ2UKQEAgLTc2LDcgKzc2LDcgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiV1JJVEUiKSkgewotICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiV1JJVEUiLCAKKyAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGluTWVzc2FnZS5zdWJzdHJpbmcoMCwgaW5NZXNzYWdlLmxhc3RJbmRleE9mKCI6IikpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5NZXNzYWdlLmVuZHNXaXRoKCJERUxFVEUiKSkgewogICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiREVMRVRFIiwKQEAgLTkyLDEwICs5MiwxMCBAQAogICAgICAgICB9CiAKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBlamJSZW1vdmUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCi0gICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vIAorICAgICAqIGVqYlJlbW92ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgorICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubwogICAgICAqIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQpAQCAtMTA1LDYyICsxMDUsNjIgQEAKIAogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIFN0cmluZyBpZCAgICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKDAsIG1lc3NhZ2UuaW5kZXhPZigiOiIpKTsKLSAgICAgICAgU3RyaW5nIGJvZHkgID0gbWVzc2FnZS5zdWJzdHJpbmcobWVzc2FnZS5pbmRleE9mKCI6IikrMSk7IAorICAgICAgICBTdHJpbmcgYm9keSAgPSBtZXNzYWdlLnN1YnN0cmluZyhtZXNzYWdlLmluZGV4T2YoIjoiKSsxKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoIlJFQUQiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJSZWFkaW5nIHJvdyBmcm9tIGRhdGFiYXNlLi4uIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KIAogICAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9IAorICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0KICAgICAgICAgICAgICAgICAgICJTRUxFQ1QgaWQgZnJvbSBtZXNzYWdlcyB3aGVyZSBpZCA9ICdRUSciOwogICAgICAgICAgICAgICAgICAgUmVzdWx0U2V0IHJlc3VsdHMgPSBzdG10LmV4ZWN1dGVRdWVyeShxdWVyeSk7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArIAorICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJRUSBoYXMgYmFsYW5jZSAiICsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuZ2V0SW50KCJiYWxhbmNlIikgKyAiIGRvbGxhcnMiKTsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgIHN0bXQuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlYWQgb25lIGFjY291bnRcbiIpOwogCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJXUklURSIuZXF1YWxzKG9wKSkgewogCiAgICAgICAgICAgICAgICAgZGVidWcoIkluc2VydGluZyBvbmUgbWVzc2FnZSBpbiB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGNyZWF0ZVJvdyhpZCwgYm9keSwgZGJDb25uZWN0aW9uKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgb25lIG1lc3NhZ2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJERUxFVEUiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBvbmUgbWVzc2FnZSBmcm9tIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlbGV0ZVJvdyhpZCwgZGJDb25uZWN0aW9uKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlbGV0ZWQgb25lIG1lc3NhZ2VcbiIpOwogICAgICAgICAgICAgfSBlbHNlIGlmICgiREVMRVRFX0FMTCIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIkRlbGV0aW5nIGFsbCBtZXNzYWdlcyBmcm9tIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwpAQCAtMTcxLDcgKzE3MSw3IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vdW5zdXBwb3J0ZWQgb3AKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH1maW5hbGx5ewogICAgICAgICAgICAgdHJ5ewogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbi5jbG9zZSgpOwpAQCAtMTgwLDkgKzE4MCw5IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVJvdyhTdHJpbmcgaWQsIFN0cmluZyBib2R5LCAKLSAgICAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKworICAgIHByaXZhdGUgdm9pZCBjcmVhdGVSb3coU3RyaW5nIGlkLCBTdHJpbmcgYm9keSwKKyAgICAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICAvLyBDcmVhdGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKQEAgLTE5OCw5ICsxOTgsOSBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvdyhTdHJpbmcgaWQsIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlUm93KFN0cmluZyBpZCwgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICAvLyBEZWxldGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKICAgICAgICAgZGVidWcoIkRlbGV0ZVJvdyB3aXRoIElEID0gIiArIGlkKTsKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7CkBAIC0yMTMsOSArMjEzLDkgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVBbGwoamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVBbGwoamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICAvLyBEZWxldGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgIFN0cmluZyBxdWVyeSA9ICJERUxFVEUgRlJPTSBtZXNzYWdlcyI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9hcHAvc3JjL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCmluZGV4IDllMGQ2MWUuLmFhMmM1NGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9hcHAvc3JjL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9hcHAvc3JjL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCkBAIC00NCwxNyArNDQsMTcgQEAKIAogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgSU9FeGNlcHRpb257CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhpcyBpcyB0byB0ZXN0IGNvbm5lY3RvciAxLjUgIisKLQkgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKKyAgICAgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKIAogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogCiAgICAgICAgIFN0cmluZyByZXMgPSAiTk9UIFJVTiI7Ci0JZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CisgICAgZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CiAgICAgICAgIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmVzICA9ICJBTEwgVEVTVFMgUEFTU0VEIjsKLQkgICAgaW50IHRlc3RDb3VudCA9IDE7CisgICAgICAgIGludCB0ZXN0Q291bnQgPSAxOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIlN0YXJ0aW5nIHRoZSB0ZXN0Iik7CiAgICAgICAgICAgICBvdXQuZmx1c2goKTsKICAgICAgICAgICAgIHdoaWxlICghZG9uZShvdXQpKSB7CkBAIC03MCwxOCArNzAsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9ICJTT01FIFRFU1RTIEZBSUxFRCI7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIklEIENvbm5lY3RvciAxLjUgdGVzdCAtICIgKyB0ZXN0Q291bnQgKyAiIEZBSUwiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOkZBSUwiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIklEIENvbm5lY3RvciAxLjUgdGVzdCAtICIgKyB0ZXN0Q291bnQgKyAiIFBBU1MiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOlBBU1MiKTsKLQkJICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIkVORF9PRl9FWEVDVVRJT04iKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgb3V0LnByaW50bG4oIkVORF9PRl9FWEVDVVRJT04iKTsKLSAgICAgICAgICAgIAorCiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkltcG9ydGluZyB0cmFuc2FjdGlvbiB0ZXN0IGZhaWxlZC4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWZlMTM2YS4uMDIyNDkxYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL2Fubm90YXRpb24tY29ubmVjdG9yMTUvc2VydmxldCIvPgogPHByb3BlcnR5IG5hbWU9Imh0dHA6aG9zdCIgdmFsdWU9ImxvY2FsaG9zdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9idWlsZC54bWwKaW5kZXggYzgyYzFiNC4uMmM3YTdjNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvYnVpbGQueG1sCkBAIC04MCwxNSArODAsMTUgQEAKIDwhLS0KICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWJjbGllbnQtY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9ImNvbm5lY3RvcjEuNSAoZWFyIGJhc2VkKSIvPgotCSAgICA8L2FudGNhbGw+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJjb25uZWN0b3IxLjUgKGVhciBiYXNlZCkiLz4KKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogLS0+CiAKIDwhLS0KICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImFubm90YXRpb24tY29ubmVjdG9yMTUiIC8+CisgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJhbm5vdGF0aW9uLWNvbm5lY3RvcjE1IiAvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAtLT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9idWlsZC54bWwKaW5kZXggZmY4YmNjMi4uODQ5NmY2MCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9idWlsZC54bWwKQEAgLTMwLDggKzMwLDggQEAKIAogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iID4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgotCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CisgICAgPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KKyAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgogICAgIDwvYW50Y2FsbD4KICAgICA8amFyIGphcmZpbGU9Ii4uL2dlbmVyaWMtcmEuamFyIiBiYXNlZGlyPSJjbGFzc2VzIgogICAgICAgICAgaW5jbHVkZXM9ImNvbm5lY3Rvci8qLmNsYXNzIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvQWJzdHJhY3RSZXNvdXJjZUFkYXB0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0Fic3RyYWN0UmVzb3VyY2VBZGFwdGVyLmphdmEKaW5kZXggYzQ4OTJiMS4uMWQxZjZlNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvQWJzdHJhY3RSZXNvdXJjZUFkYXB0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9BYnN0cmFjdFJlc291cmNlQWRhcHRlci5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgdGVzdE5hbWU7CiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gZGVidWcgPSB0cnVlOwogCi0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3ROYW1lKCkgewogICAgICAgICByZXR1cm4gdGVzdE5hbWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKaW5kZXggNTU1MzNkNC4uZjU5YjJiMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgQ29udHJvbHMgewogICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IHJlYWR5TG9jayA9IG5ldyBPYmplY3QoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKaW5kZXggNjU4MjMzZS4uZDczYzg2MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBEZWxpdmVyeVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtMzYsNyArMzYsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIG9wOwogICAgIHByaXZhdGUgYm9vbGVhbiBrZWVwQ291bnQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ZXIgPSAwOwotICAgIAorCiAgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCBTdHJpbmcgb3ApIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIHRoaXMua2VlcENvdW50ID0gZmFsc2U7CiAgICAgfQogCi0gICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCAKKyAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsCiAgICAgICAgICAgICBTdHJpbmcgb3AsIGJvb2xlYW4ga2VlcENvdW50KSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNTUsNyArNTUsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwogICAgICAgICAgICAgLy9lcC5iZWZvcmVEZWxpdmVyeShvbk1lc3NhZ2UpOwpAQCAtNzgsMTEgKzc4LDExIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vZXAuYWZ0ZXJEZWxpdmVyeSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTkzLDE0ICs5MywxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKaW5kZXggMTAwY2FjZS4uZmE5M2Y2MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwogICAgIH0KIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5mb3JnZXQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICB9CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5wcmVwYXJlOiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgICAgIHJldHVybiBYQVJlc291cmNlLlhBX09LOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBYaWRbXSByZWNvdmVyKGludCBmbGFnKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucmVjb3ZlcjogIiArIGZsYWdUb1N0cmluZyhmbGFnKSk7CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtNjYsNyArNjYsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnN0YXJ0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSArICIsIiArCiAgICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQppbmRleCBiNWIwZjAyLi40YzljMDEyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIC8qKgogICogY29sbGVjdGlvbiBvZiBtZXNzYWdlcy4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKIApAQCAtNTQsNyArNTQsNyBAQAogICAgICAgIFN0cmluZyBjb21tYW5kICA9IGFyZ3NbMF07CiAgICAgICAgU3RyaW5nIGRlc3ROYW1lID0gYXJnc1sxXTsKICAgICAgICBTdHJpbmcgbWVzc2FnZSAgPSBhcmdzWzJdOwotICAgCisKICAgICAgICBpZiAoISJhZGQiLmVxdWFscyhjb21tYW5kKSkgewogICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKaW5kZXggMmU0Y2ZhOC4uMjA4NjNhOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQpAQCAtMzksMTMgKzM5LDEzIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrZ2V0UmVzZXRDb250cm9sKCkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IitnZXRSZXNldENvbnRyb2woKSk7CiAgICAgICAgIGlmIChnZXRSZXNldENvbnRyb2woKS5lcXVhbHMoIkJFR0lOTklORyIpKSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLnJlYWR5TG9jayl7CiAgICAgICAgICAgICAgICAgQ29udHJvbHMuZG9uZT1mYWxzZTsKICAgICAgICAgICAgIH0KLQkgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKLQl9CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGRvbmUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCmluZGV4IDJlY2VjNjMuLmE5YTg4ODEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgTXlXb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTM1LDcgKzM1LDcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gc3RvcCA9IGZhbHNlOwogICAgIHByaXZhdGUgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5OwogICAgIHByaXZhdGUgV29ya01hbmFnZXIgd207Ci0gICAgCisKICAgICBwdWJsaWMgTXlXb3JrKAogICAgICAgICAgICAgU3RyaW5nIG5hbWUsIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwgV29ya01hbmFnZXIgd20pIHsKICAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTsKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgICAgICBNZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSk7CiAKICAgICAgICAgICAgICAgICAvKgpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtODUsMTQgKzg1LDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCmluZGV4IDUxMmU1YzYuLjRiNWU1ZjEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQpAQCAtMjUsMTIgKzI1LDEyIEBACiAgKiBzbyB0aGF0IHRoZSBhcHAgc2VydmVyIGNhbiBpbnN0YW50aWF0ZSBhbmQgY29uZmlndXJlCiAgKiBpdCBhdCB0aGUgcnVudGltZS4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogQEFjdGl2YXRpb24oCiAgICAgICAgIG1lc3NhZ2VMaXN0ZW5lcnMgPSB7Y29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzfQogKQotcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjIAorcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjCiAgICAgaW1wbGVtZW50cyBBY3RpdmF0aW9uU3BlYywgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgZGVzdGluYXRpb25OYW1lOwpAQCAtNDcsNyArNDcsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25OYW1lICgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25OYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uTmFtZSAoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uTmFtZSgpIGNhbGxlZC4uLiBuYW1lID0gIiArIG5hbWUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uTmFtZSA9IG5hbWU7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvblR5cGUoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uVHlwZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvblR5cGUgKFN0cmluZyB0eXBlKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvblR5cGUgKCkgY2FsbGVkLi4uIHR5cGUgPSAiICsgdHlwZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25UeXBlPSB0eXBlOwpAQCAtNjUsNyArNjUsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdFByb3AoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLnRlc3RQcm9wOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RQcm9wIChTdHJpbmcgdGVzdFByb3ApIHsKICAgICAgICAgZGVidWcoInNldFRlc3RQcm9wICgpIGNhbGxlZC4uLiB0ZXN0UHJvcCA9ICIgKyB0ZXN0UHJvcCk7CiAgICAgICAgIHRoaXMudGVzdFByb3AgPSB0ZXN0UHJvcDsKQEAgLTc0LDcgKzc0LDcgQEAKICAgICBwdWJsaWMgSW50ZWdlciBnZXRUZXN0SW50ZWdlclByb3AoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLnRlc3RJbnRlZ2VyUHJvcDsKICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0SW50ZWdlclByb3AgKEludGVnZXIgdGVzdFByb3AxKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0SW50ZWdlclByb3AgKCkgY2FsbGVkLi4uIHRlc3RJbnRlZ2VyUHJvcCA9ICIgKyB0ZXN0UHJvcDEpOwogICAgICAgICB0aGlzLnRlc3RJbnRlZ2VyUHJvcCA9IHRlc3RQcm9wMTsKQEAgLTk4LDcgKzk4LDcgQEAKIAogICAgICAgfQogCi0gICB9IAorICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGRlYnVnIChTdHJpbmcgbWVzc2FnZSkKICAgICB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKaW5kZXggMTlhNWU0ZC4uMTMzNGI3ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQpAQCAtMzUsNyArMzUsNyBAQAogLyoqCiAgKiBUaGlzIGlzIGEgc2FtcGxlIHJlc291cmNlIGFkYXB0ZXIKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogQENvbm5lY3RvcigKICAgIC8qbW9kdWxlTmFtZT0iTXkgU2ltcGxlIFJBUiIsKi8KQEAgLTQ0LDcgKzQ0LDcgQEAKICAgIGVpc1R5cGUgPSAiR2VuZXJpYyBUeXBlIiwKICAgIHZlcnNpb24gPSAiMS4wQWxwaGEiCiApCi1wdWJsaWMgY2xhc3MgU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbCBleHRlbmRzIEFic3RyYWN0UmVzb3VyY2VBZGFwdGVyIAorcHVibGljIGNsYXNzIFNpbXBsZVJlc291cmNlQWRhcHRlckltcGwgZXh0ZW5kcyBBYnN0cmFjdFJlc291cmNlQWRhcHRlcgogaW1wbGVtZW50cyBSZXNvdXJjZUFkYXB0ZXIsIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByaXZhdGUgQm9vdHN0cmFwQ29udGV4dCBjdHg7CkBAIC01OCw3ICs1OCw3IEBACiAKICAgICBwdWJsaWMgdm9pZAogICAgIHN0YXJ0KEJvb3RzdHJhcENvbnRleHQgY3R4KSB0aHJvd3MgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCIwMDEuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogCiAgICAgICAgIHRoaXMuY3R4ID0gY3R4OwpAQCAtNjgsMTIgKzY4LDEyIEBACiAKICAgICAgICAgLy90ZXN0aW5nIGNyZWF0IHRpbWVyCiAgICAgICAgIFRpbWVyIHRpbWVyID0gbnVsbDsKLQkgIHRyeXsKLQkgICAgICB0aW1lciA9IGN0eC5jcmVhdGVUaW1lcigpOwotCSAgfSBjYXRjaChVbmF2YWlsYWJsZUV4Y2VwdGlvbiB1ZSkgewotCSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IiKTsKLQkgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIGZvcm0gYm9vdHN0cmFwIik7Ci0JICB9CisgICAgICB0cnl7CisgICAgICAgICAgdGltZXIgPSBjdHguY3JlYXRlVGltZXIoKTsKKyAgICAgIH0gY2F0Y2goVW5hdmFpbGFibGVFeGNlcHRpb24gdWUpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIik7CisgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJFcnJvciBmb3JtIGJvb3RzdHJhcCIpOworICAgICAgfQogICAgICAgICBkZWJ1ZygiMDA0LiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKICAgICAgICAgZGVidWcoIjAwNS4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAgICAgfQpAQCAtMTA4LDE1ICsxMDgsMTUgQEAKIAogICAgIHB1YmxpYyB2b2lkCiAgICAgZW5kcG9pbnREZWFjdGl2YXRpb24gKAotICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBlbmRwb2ludEZhY3RvcnksIAorICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBlbmRwb2ludEZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIGRlYnVnICgiZW5kcG9pbnREZWFjdGl2YXRpb24gY2FsbGVkLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgICgoV29ya0Rpc3BhdGNoZXIpIHdvcmspLnN0b3AoKTsKICAgICB9Ci0gIAogCi0gICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKSAKKworICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykKICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCmluZGV4IGJiMDU1MzQuLmRlOTNiYzEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBUZXN0V01Xb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTQyLDggKzQyLDggQEAKICAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSkgewogICAgICAgICB0aGlzKGlkLCBpc1JvZ3VlLCBmYWxzZSwgbnVsbCk7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLCAKKworICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLAogICAgICAgICAgICAgYm9vbGVhbiBkb05lc3QsIEV4ZWN1dGlvbkNvbnRleHQgY3R4KSB7CiAgICAgICAgIHRoaXMuaWQgPSBpZDsKICAgICAgICAgdGhpcy5pc1JvZ3VlID0gaXNSb2d1ZTsKQEAgLTc3LDEwICs3NywxMCBAQAogICAgICAgICAgICAgfSBjYXRjaCAoV29ya0V4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIGlmIChleC5nZXRFcnJvckNvZGUoKS5lcXVhbHMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya0V4Y2VwdGlvbi5UWF9DT05DVVJSRU5UX1dPUktfRElTQUxMT1dFRCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQVNTOiBDQVVHSFQgRVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKICAgICAgICAgICAgICAgICB3bS5kb1dvcmsobmVzdGVkV29yaywgMSoxMDAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICJGQUlMOiBDQVVHSFQgVU5FWFBFQ1RFRCA9ICIgKyBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9WM1dvcmtEaXNwYXRjaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9WM1dvcmtEaXNwYXRjaGVyLmphdmEKaW5kZXggOGFkZjNjYy4uNGI0Mzc4MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvVjNXb3JrRGlzcGF0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1YzV29ya0Rpc3BhdGNoZXIuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG5ldyBGYWtlWEFSZXNvdXJjZSgpKTsKICAgICAgICAgICAgIGludCBudW1PZk1lc3NhZ2VzID0gMTsKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgICAgIGRlYnVnKCJWM1dvcmtEaXNwYXRjaGVyIGNhbGxpbmcgRE9ORSgpIik7CiAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICBkZWJ1ZygiVjNXb3JrRGlzcGF0Y2hlciBmaW5pc2hlZCBjYWxsaW5nIERPTkUoKSIpOwotICAgICAgICAgICAgCisKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCmluZGV4IDY0YjcxYzQuLjc2MmUwM2UgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIFdvcmtEaXNwYXRjaGVyIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTQ0LDExICs0NCwxMSBAQAogICAgIHByb3RlY3RlZCBBY3RpdmF0aW9uU3BlYyBzcGVjOwogICAgIHByb3RlY3RlZCBXb3JrTWFuYWdlciB3bTsKICAgICBwcm90ZWN0ZWQgWEFUZXJtaW5hdG9yIHhhOwotICAgIAorCiAgICAgcHVibGljIFdvcmtEaXNwYXRjaGVyKAogICAgICAgICAgICAgU3RyaW5nIGlkLAogICAgICAgICAgICAgQm9vdHN0cmFwQ29udGV4dCBjdHgsCi0gICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksIAorICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LAogICAgICAgICAgICAgQWN0aXZhdGlvblNwZWMgc3BlYykgewogICAgICAgICB0aGlzLmlkICAgICAgPSBpZDsKICAgICAgICAgdGhpcy5jdHggICAgID0gY3R4OwpAQCAtNjEsNyArNjEsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgZGVidWcoIldBSVQuLi4iKTsKQEAgLTgzLDI2ICs4MywyNiBAQAogICAgICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSk7CiAKICAgICAgICAgICAgICAgICBpZiAoIWZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSkgewogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsgCisgICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsKICAgICAgICAgICAgICAgICAgICAgLy93bS5kb1dvcmsoZCwgMCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwogICAgICAgICAgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG5ldyBGYWtlWEFSZXNvdXJjZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaW50IG51bU9mTWVzc2FnZXMgPSA1OwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2ltcG9ydGluZyB0cmFuc2FjdGlvbgogCiAgICAgICAgICAgICAgICAgICAgIC8vd3JpdGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHQgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7CiAKLSAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPSAKKyAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIldSSVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkRPTkUgV1JJVEUgVE8gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gbnVtT2ZNZXNzYWdlczsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9yb2xsYmFjawogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiREVMRVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xNTAsNyArMTUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIkRFTEVURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTk1LDcgKzE5NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChYQVJlc291cmNlLlhBX09LID09IHhhLnByZXBhcmUoZWMuZ2V0WGlkKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJYQSBQUkVQQVJFL0NPTU1JVC4gRE9ORSBXUklURSBUTyBEQiAiKTsKQEAgLTIwNywxOSArMjA3LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlIGFsbC4KICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCAxLCAiREVMRVRFX0FMTCIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiRE9ORSBERUxFVEUgQUxMIEZST00gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gMDsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yNDYsNyArMjQ2LDcgQEAKICAgICAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC0yNjEsMTQgKzI2MSwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0yOTEsMTMgKzI5MSwxMyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9TbGVlcCBmb3IgNSBzZWNvbmRzCiAgICAgICAgICAgICAvL1RocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoNSoxMDAwKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgLy9Ob3RpZnkgdGhlIGNsaWVudCB0byBjaGVjayB0aGUgcmVzdWx0cwotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnlBbGwoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeUFsbCgpOwogCiAgICAgICAgICAgICAgICAgLy9XYWl0IHVudGlsIHJlc3VsdHMgYXJlIHZlcmlmaWVkIGJ5IHRoZSBjbGllbnQKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2sud2FpdCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2sud2FpdCgpOwogCiAgICAgICAgICAgICAgICAgaWYgKHN0b3ApIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQppbmRleCA3N2RiZjM0Li42YmQ5ZTU3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQpAQCAtMzYsOCArMzYsOCBAQAogICAgIHB1YmxpYyBpbnQgYnJhbmNoUXVhbGlmaWVyOwogICAgIHB1YmxpYyBpbnQgZ2xvYmFsVHhJRDsKIAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OyAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsgCisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7CisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7CiAKICAgICBwdWJsaWMgWElEKCkgewogICAgICAgICBpbnQgZm9vID0gSUQrKzsKQEAgLTU1LDEwICs1NSwxMCBAQAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICAgLy8gSXQgY2FuJ3QgYmUgZXF1YWwKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBvdGhlciA9IChYSUQpbzsgICAgICAgICAgICAgICAgICAgLy8gVGhlIG90aGVyIFhJRCwgbm93IHByb3Blcmx5IGNhc3QKLSAgICAgICAgCi0gICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElEIAorCisgICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElECiAgICAgICAgICAgICAgICAgJiYgdGhpcy5icmFuY2hRdWFsaWZpZXIgPT0gb3RoZXIuYnJhbmNoUXVhbGlmaWVyCiAgICAgICAgICAgICAgICAgJiYgdGhpcy5nbG9iYWxUeElEID09IG90aGVyLmdsb2JhbFR4SUQpIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTgsNyArOTgsNyBAQAogICAgICAgICAgICAgICAgICJmb3JtYXRJRCgiICAgICArIGZvcm1hdElEICAgICArICIpLCAiICsKICAgICAgICAgICAgICAgICAiYnJhbmNoUXVhbGlmaWVyICgiICsgYnJhbmNoUXVhbGlmaWVyICsgIiksICIgKwogICAgICAgICAgICAgICAgICJnbG9iYWxUeElEKCIgKyBnbG9iYWxUeElEICsgIil9Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTQwNDMxOS4uMjQ4NmEyZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWFubm90YXRpb24tc3ViY2xhc3NpbmciLz4KQEAgLTI0LDcgKzI0LDcgQEAKIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iYW5ub3RhdGlvbi1zdWJjbGFzc2luZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvYnVpbGQueG1sCmluZGV4IDlkM2VlMzcuLmZhNGNhZmUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9idWlsZC54bWwKQEAgLTMyLDcgKzMyLDcgQEAKICAgICAmY29tbW9uQnVpbGQ7CiAgICAgJmNvbW1vblJ1bjsKICAgICAmdGVzdHByb3BlcnRpZXM7Ci0gICAgCisKIDwhLS0KICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsc2V0dXAsZGVwbG95LXdhciwgcnVuLXdhciwgdW5kZXBsb3ktd2FyLCBkZXBsb3ktZWFyLCBydW4tZWFyLCB1bmRlcGxveS1lYXIsIHVuc2V0dXAiLz4KIApAQCAtNDEsMTUgKzQxLDE1IEBACiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLCBkaXNhYmxlLXJlc291cmNlLXZhbGlkYXRpb24sIGRlcGxveS1lYXIsIHNldHVwLCBydW4tZWFyLCB1bnNldHVwLCB1bmRlcGxveS1lYXIsIGVuYWJsZS1yZXNvdXJjZS12YWxpZGF0aW9uIi8+CiAKIDwhLS0KLQk8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgotCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhciIvPgotCTxhbnRjYWxsIHRhcmdldD0icnVuLXdhciIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktZWFyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJydW4tZWFyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1lYXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLXdhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktZWFyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tZWFyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1lYXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAiLz4KICAgICA8L3RhcmdldD4KIC0tPgogCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgICAgPGFudCBkaXI9InJhIiB0YXJnZXQ9ImNsZWFuIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbm5lY3RvciI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9zaW1wbGVCYW5rLnNxbCIvPgpAQCAtNjUsMzYgKzY1LDM2IEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtcG9vbCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXJlc291cmNlIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtYWRtaW4tb2JqZWN0Ii8+Ci0gICAgICAgIAorCiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcG9vbCI+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY29ubmVjdG9yLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJhLm5hbWUiIHZhbHVlPSIke2FwcG5hbWV9QXBwI2pkYmNyYSIvPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0aW9uLmRlZm5hbWUiIHZhbHVlPSJqYXZheC5zcWwuRGF0YVNvdXJjZSIvPgotCQkgICAgPHBhcmFtIG5hbWU9ImV4dHJhLXBhcmFtcyIgdmFsdWU9Ii0tbWF0Y2hjb25uZWN0aW9ucz1mYWxzZSIvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImV4dHJhLXBhcmFtcyIgdmFsdWU9Ii0tbWF0Y2hjb25uZWN0aW9ucz1mYWxzZSIvPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3IuY29ucG9vbC5uYW1lIiB2YWx1ZT0iZW1iZWRkZWQtcmEtcG9vbCIvPgogICAgICAgICAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC1vcmFjbGUtcHJvcHMiPgotCQk8cGFyYW0gbmFtZT0icG9vbC50eXBlIiB2YWx1ZT0iY29ubmVjdG9yIi8+Ci0JCTxwYXJhbSBuYW1lPSJjb25wb29sLm5hbWUiIHZhbHVlPSJlbWJlZGRlZC1yYS1wb29sIi8+Ci0JCTwvYW50Y2FsbD4KKyAgICAgICAgPHBhcmFtIG5hbWU9InBvb2wudHlwZSIgdmFsdWU9ImNvbm5lY3RvciIvPgorICAgICAgICA8cGFyYW0gbmFtZT0iY29ucG9vbC5uYW1lIiB2YWx1ZT0iZW1iZWRkZWQtcmEtcG9vbCIvPgorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImRpc2FibGUtcmVzb3VyY2UtdmFsaWRhdGlvbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWp2bS1vcHRpb25zIj4KLQkJPHBhcmFtIG5hbWU9Im9wdGlvbiIgdmFsdWU9Ii1EZGVwbG95bWVudC5yZXNvdXJjZS52YWxpZGF0aW9uPWZhbHNlIi8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlciIvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iZGlzYWJsZS1yZXNvdXJjZS12YWxpZGF0aW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtanZtLW9wdGlvbnMiPgorICAgICAgICA8cGFyYW0gbmFtZT0ib3B0aW9uIiB2YWx1ZT0iLURkZXBsb3ltZW50LnJlc291cmNlLnZhbGlkYXRpb249ZmFsc2UiLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyIi8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImVuYWJsZS1yZXNvdXJjZS12YWxpZGF0aW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtanZtLW9wdGlvbnMiPgotCQk8cGFyYW0gbmFtZT0ib3B0aW9uIiB2YWx1ZT0iLURkZXBsb3ltZW50LnJlc291cmNlLnZhbGlkYXRpb249ZmFsc2UiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyIi8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJlbmFibGUtcmVzb3VyY2UtdmFsaWRhdGlvbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWp2bS1vcHRpb25zIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wdGlvbiIgdmFsdWU9Ii1EZGVwbG95bWVudC5yZXNvdXJjZS52YWxpZGF0aW9uPWZhbHNlIi8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlciIvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJjcmVhdGUtcmVzb3VyY2UiPgorICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlIj4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jb25uZWN0b3ItcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmNvbnBvb2wubmFtZSIgdmFsdWU9ImVtYmVkZGVkLXJhLXBvb2wiLz4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmpuZGkubmFtZSIgdmFsdWU9ImpkYmMvZWpiLWFubm90YXRpb24tc3ViY2xhc3NpbmciLz4KQEAgLTEwNSwxOCArMTA1LDE4IEBACiAgICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWFkbWluLW9iamVjdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImNyZWF0ZS1hZG1pbi1vYmplY3QgLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gLS1yZXN0eXBlIGNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbiAtLXJhbmFtZSAke2FwcG5hbWV9QXBwI2pkYmNyYSAtLXByb3BlcnR5IFRhYmxlTmFtZT1jdXN0b21lcjI6Sm5kaU5hbWU9amRiYy9lamItYW5ub3RhdGlvbi1zdWJjbGFzc2luZzpTY2hlbWFOYW1lPURCVVNFUjpOb09mUm93cz0xIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iZWlzL2pkYmNBZG1pbiIvPgorICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9ImVpcy9qZGJjQWRtaW4iLz4KICAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgPC90YXJnZXQ+CiAKICAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtYWRtaW4tb2JqZWN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtYWRtaW4tb2JqZWN0Ii8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gZWlzL2pkYmNBZG1pbiIvPgotCSA8L2FudGNhbGw+Ci0JIDwhLS08YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPi0tPgorICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImRlbGV0ZS1hZG1pbi1vYmplY3QiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSBlaXMvamRiY0FkbWluIi8+CisgICAgIDwvYW50Y2FsbD4KKyAgICAgPCEtLTxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+LS0+CiAgICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0YXJ0Ij4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTI0LDE2ICsxMjQsMTYgQEAKICAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcmEtY29uZmlnIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iY3JlYXRlLXJlc291cmNlLWFkYXB0ZXItY29uZmlnICAtLXByb3BlcnR5IFJBUHJvcGVydHk9VkFMSUQiLz4KLQkgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke2FwcG5hbWV9QXBwI2pkYmNyYSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7YXBwbmFtZX1BcHAjamRiY3JhIi8+CiAgICAgICAgICA8L2FudGNhbGw+CiAgICAgIDwvdGFyZ2V0PgogCiAgICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJhLWNvbmZpZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iZGVsZXRlLXJlc291cmNlLWFkYXB0ZXItY29uZmlnIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCNqZGJjcmEiLz4KLQkgPC9hbnRjYWxsPgotCSA8IS0tPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4tLT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtcmVzb3VyY2UtYWRhcHRlci1jb25maWciLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke2FwcG5hbWV9QXBwI2pkYmNyYSIvPgorICAgICA8L2FudGNhbGw+CisgICAgIDwhLS08YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPi0tPgogICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCI+CkBAIC0xNDUsNyArMTQ1LDcgQEAKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1wb29sIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtYWRtaW4tb2JqZWN0Ii8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1wb29sIj4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1jb25uZWN0b3ItY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmNvbnBvb2wubmFtZSIgdmFsdWU9ImVtYmVkZGVkLXJhLXBvb2wiLz4KQEAgLTE1NSw3ICsxNTUsNyBAQAogICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtY29ubmVjdG9yLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5qbmRpLm5hbWUiIHZhbHVlPSJqZGJjL2VqYi1hbm5vdGF0aW9uLXN1YmNsYXNzaW5nIi8+Ci0JCTwvYW50Y2FsbD4KKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CkBAIC0xNzEsOSArMTcxLDkgQEAKICAgICAgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IENvbXBpbGluZyB0ZXN0IHNvdXJjZSBmaWxlcyIgbGV2ZWw9InZlcmJvc2UiLz4KICAgICAgIDxqYXZhYyBzcmNkaXI9InNlcnZsZXQiCiAgICAgICAgICBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKLQkgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH06cmEvcHVibGlzaC9pbnRlcm5hbC9jbGFzc2VzIgorICAgICBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofTpyYS9wdWJsaXNoL2ludGVybmFsL2NsYXNzZXMiCiAgICAgICAgICBkZWJ1Zz0ib24iCi0JIGZhaWxvbmVycm9yPSJ0cnVlIi8+CisgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+CiAgICAgIDwvdGFyZ2V0PgogCiAKQEAgLTE4MiwzNyArMTgyLDM3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlLCBidWlsZC1yYSI+Ci0gICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgPGFudCBkaXI9InJhIiB0YXJnZXQ9ImFzc2VtYmxlIi8+CiAKICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICA8L2FudGNhbGw+Ci0gICAgICAgCisKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgPC9hbnRjYWxsPgogCi0gICAgCisKICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+ICAgIAotICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiAKKyAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgorICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIgogICAgICBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+CiAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+Ci0gICAgPC9maWxlc2V0PiAgCisgICAgPC9maWxlc2V0PgogICAgIDxmaWxlc2V0IGRpcj0icmEvcHVibGlzaC9saWIiPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi5yYXIiLz4KICAgICA8L2ZpbGVzZXQ+CiAgICAgPC9lYXI+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCi0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtcGFzc3dvcmQtYWxpYXMiPiAKKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtcGFzc3dvcmQtYWxpYXMiPgogICAgICAgICAgPHBhcmFtIG5hbWU9InBhc3N3b3JkLmFsaWFzLm5hbWUiIHZhbHVlPSJBTElBU19URVNUX1BST1BFUlRZIi8+CiAgICAgICAgICA8cGFyYW0gbmFtZT0icGFzc3dvcmQuYWxpYXMuZmlsZSIgdmFsdWU9ImFsaWFzcGFzc3dvcmQudHh0Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KQEAgLTIyMywzMCArMjIzLDMwIEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktd2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLXdhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJhbm5vdGF0aW9uLWVtYmVkZGVkd2ViIChzdGFuZC1hbG9uZSB3YXIgYmFzZWQpIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJhbm5vdGF0aW9uLWVtYmVkZGVkd2ViIChzdGFuZC1hbG9uZSB3YXIgYmFzZWQpIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4tZWFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViY2xpZW50LWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9ImFubm90YXRpb24tZW1iZWRkZWR3ZWIgKGVhciBiYXNlZCkiLz4KLQk8L2FudGNhbGw+CisgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9ImFubm90YXRpb24tZW1iZWRkZWR3ZWIgKGVhciBiYXNlZCkiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1yYS1jb25maWciLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtcGFzc3dvcmQtYWxpYXMiPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJwYXNzd29yZC5hbGlhcy5uYW1lIiB2YWx1ZT0iQUxJQVNfVEVTVF9QUk9QRVJUWSIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktd2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDg4ZjFjMDIuLjRlMDEwNGUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yOSwyMCArMjksMjAgQEAKICAgICAgICAgPHJlcy1yZWYtbmFtZT5qZGJjL1NpbXBsZUJhbms8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qZGJjL2VqYi1hbm5vdGF0aW9uLXN1YmNsYXNzaW5nPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+IAotICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4gCi0gICAgIDxiZWFuLXBvb2w+IAotICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4gCi0gICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgIDwvYmVhbi1wb29sPiAKLSAgICAgIDxiZWFuLWNhY2hlPiAKLSAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4gCi0gICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4gCi0gICAgICA8L2JlYW4tY2FjaGU+IAorICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4KKyAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+CisgICAgIDxiZWFuLXBvb2w+CisgICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPgorICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+CisgICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICA8L2JlYW4tcG9vbD4KKyAgICAgIDxiZWFuLWNhY2hlPgorICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPgorICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgorICAgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogICAgIDxlamI+CiAgICAgICA8ZWpiLW5hbWU+Q3VzdG9tZXJDaGVja2luZ0VKQjwvZWpiLW5hbWU+CkBAIC01MSwyMCArNTEsMjAgQEAKICAgICAgICAgPHJlcy1yZWYtbmFtZT5qZGJjL1NpbXBsZUJhbms8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qZGJjL2VqYi1hbm5vdGF0aW9uLXN1YmNsYXNzaW5nPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+IAotICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4gCi0gICAgIDxiZWFuLXBvb2w+IAotICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4gCi0gICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4gCisgICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPgorICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4KKyAgICAgPGJlYW4tcG9vbD4KKyAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+CisgICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4KKyAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPgogICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgotICAgICAgPC9iZWFuLXBvb2w+IAotICAgICAgPGJlYW4tY2FjaGU+IAorICAgICAgPC9iZWFuLXBvb2w+CisgICAgICA8YmVhbi1jYWNoZT4KICAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4KICAgICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgogICAgICAgICAgIDxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9yZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4KICAgICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4KLSAgICAgIDwvYmVhbi1jYWNoZT4gCisgICAgICA8L2JlYW4tY2FjaGU+CiAgICAgPC9lamI+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KIDwvc3VuLWVqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2VqYi9DdXN0b21lci5qYXZhCmluZGV4IDhhOWIxMDUuLjE2MGVhYjkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2VqYi9DdXN0b21lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2VqYi9DdXN0b21lci5qYXZhCkBAIC00NCw0ICs0NCw0IEBACiAKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKaW5kZXggNjFkZTI5MS4uYjM0MWMzNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhCkBAIC0yMCw0ICsyMCw0IEBACiB7CiB9CiAKLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhCmluZGV4IGVlMGQxN2MuLjRiNTQ0NDQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQpAQCAtOTQsNSArOTQsNSBAQAogICB9CiAKIH0KLSAgICAKLSAgICAKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2VqYi9DdXN0b21lckVKQi5qYXZhCmluZGV4IGYwZGJhZDIuLjkyOWQxNWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2VqYi9DdXN0b21lckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2VqYi9DdXN0b21lckVKQi5qYXZhCkBAIC01Myw3ICs1Myw3IEBACiAKICAgcHVibGljIFN0cmluZyBnZXRBZGRyZXNzMSgpCiAgIHsKLSAgICByZXR1cm4gYWRkcmVzczE7IAorICAgIHJldHVybiBhZGRyZXNzMTsKICAgfQogCiAgIHB1YmxpYyBTdHJpbmcgZ2V0QWRkcmVzczIoKQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1FMIGV4Y2VwdGlvbiBvY2N1cmVkIGluIGVqYlJlbW92ZSBtZXRob2QiKTsKICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgIH0KLSAgICAKKwogICB9CiAKICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKQpAQCAtMjE0LDEyICsyMTQsMTIgQEAKICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgewogICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTUUxFeGNlcHRpb24gb2NjdXJyZWQgaW4gZWpiTG9hZCgpIG1ldGhvZCIpOwogICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9ICAgCisgICAgfQogICB9CiAKICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQogICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogfQotICAgICAgCi0gICAgCi0gICAgCisKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEKaW5kZXggMzM4YzkyMS4uODgzZTA0YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YQpAQCAtMjAsNCArMjAsNCBAQAogewogfQogCi0gIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEKaW5kZXggZjMwYjUwNi4uYjBjZTdiNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YQpAQCAtOTUsNiArOTUsNiBAQAogICB9CiAKIH0KLSAgICAgIAotICAgIAotICAgIAorCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWUyZWNhMC4uZmQyMWMzZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNCw3ICsxNCw3IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogIwogCi0gICAgCisKICMjIyBDb21wb25lbnQgUHJvcGVydGllcyAjIyMKIHNyYy5kaXI9c3JjCiBjb21wb25lbnQucHVibGlzaC5ob21lPS4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL2J1aWxkLnhtbAppbmRleCA1YzY1ZmQ1Li5lOTUwMDAyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvYnVpbGQueG1sCkBAIC0yMyw2MiArMjMsNjIgQEAKIAogPHByb2plY3QgbmFtZT0iSkRCQ0Nvbm5lY3RvciB0b3AgbGV2ZWwiIGRlZmF1bHQ9ImJ1aWxkIj4KICAgICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vamRiY3JhL3NwaSIvPgotICAgIAorCiAgICAgJmNvbW1vbjsKICAgICAmdGVzdGNvbW1vbjsKICAgICA8cHJvcGVydHkgZmlsZT0iLi9idWlsZC5wcm9wZXJ0aWVzIi8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlLGFzc2VtYmxlIiAvPgotICAgICAgICAgIAorCiAKICAgICA8IS0tIGluaXQuIEluaXRpYWxpemF0aW9uIGludm9sdmVzIGNyZWF0aW5nIHB1Ymxpc2hpbmcgZGlyZWN0b3JpZXMgYW5kCi0gICAgICAgICBPUyBzcGVjaWZpYyB0YXJnZXRzLiAtLT4gCisgICAgICAgICBPUyBzcGVjaWZpYyB0YXJnZXRzLiAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImluaXQiIGRlc2NyaXB0aW9uPSIke2NvbXBvbmVudC5uYW1lfSBpbml0aWFsaXphdGlvbiI+CiAgICAgICAgIDx0c3RhbXA+CiAgICAgICAgICAgICA8Zm9ybWF0IHByb3BlcnR5PSJzdGFydC50aW1lIiBwYXR0ZXJuPSJNTS9kZC95eXl5IGhoOm1tIGFhIi8+Ci0gICAgICAgIDwvdHN0YW1wPiAgICAKKyAgICAgICAgPC90c3RhbXA+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkJ1aWxkaW5nIGNvbXBvbmVudCAke2NvbXBvbmVudC5uYW1lfSIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iLz4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ii8+ICAgIAorICAgICAgICA8bWtkaXIgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iLz4KICAgICA8L3RhcmdldD4KLSAgICA8IS0tIGNvbXBpbGUgLS0+IAorICAgIDwhLS0gY29tcGlsZSAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQiCi0gICAgICAgICAgICBkZXNjcmlwdGlvbj0iQ29tcGlsZSBjb20vc3VuLyogY29tL2lwbGFuZXQvKiBzb3VyY2VzIj4gIAorICAgICAgICAgICAgZGVzY3JpcHRpb249IkNvbXBpbGUgY29tL3N1bi8qIGNvbS9pcGxhbmV0Lyogc291cmNlcyI+CiAgICAgICAgIDwhLS08ZWNobyBtZXNzYWdlPSJDb25uZWN0b3IgYXBpIHJlc2lkZXMgaW4gJHtjb25uZWN0b3ItYXBpLmphcn0iLz4tLT4KLSAgICAgICAgPGphdmFjIHNyY2Rpcj0iJHtzcmMuZGlyfSIgCisgICAgICAgIDxqYXZhYyBzcmNkaXI9IiR7c3JjLmRpcn0iCiAgICAgICAgICAgICAgICBkZXN0ZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iCi0JICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4KLQkgICAgICAgPGNsYXNzcGF0aD4KLQkgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMiPgotCSAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouamFyIiAvPgotCSAgICAgICAgICA8L2ZpbGVzZXQ+Ci0JICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+CisgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzIj4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIgLz4KKyAgICAgICAgICAgICAgPC9maWxlc2V0PgorICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImNvbS9zdW4vamRiY3JhLyoqIi8+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJjb20vc3VuL2FwcHNlcnYvKioiLz4KICAgICAgICAgPC9qYXZhYz4KICAgICA8L3RhcmdldD4KLSAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQiLz4KIAotICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSI+ICAgIAotICAgIAkKLQk8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjLmphciIgCi0gICAgICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosIAotICAgICAgICAgICAgY29tL3N1bi9hcHBzZXJ2LyoqLyosIGNvbS9zdW4vamRiY3JhL3V0aWwvKiovKiwgY29tL3N1bi9qZGJjcmEvY29tbW9uLyoqLyoiLz4gCi0gICAJCi0gICAgICAgIDxjb3B5IGZpbGU9IiR7c3JjLmRpcn0vY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwiIAotICAgICAgICAgICAgICAgIHRvZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiPgorCisgICAgPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiYy5qYXIiCisgICAgICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosCisgICAgICAgICAgICBjb20vc3VuL2FwcHNlcnYvKiovKiwgY29tL3N1bi9qZGJjcmEvdXRpbC8qKi8qLCBjb20vc3VuL2pkYmNyYS9jb21tb24vKiovKiIvPgorCisgICAgICAgIDxjb3B5IGZpbGU9IiR7c3JjLmRpcn0vY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwiCisgICAgICAgICAgICAgICAgdG9maWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjcmEucmFyIiAKLQkJYmFzZWRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9IiBpbmNsdWRlcz0iamRiYy5qYXIiPgorICAgICAgIDxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmNyYS5yYXIiCisgICAgICAgIGJhc2VkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIgaW5jbHVkZXM9ImpkYmMuamFyIj4KIAotICAgCQk8bWV0YWluZiBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgogCi0gICAJPGRlbGV0ZSBmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIi8+Ci0JCisgICAgICAgPGRlbGV0ZSBmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIi8+CisKICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXNjcmlwdGlvbj0iQ2xlYW4gdGhlIGJ1aWxkIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQppbmRleCA5ZjgzOTlhLi5iNmVmMzBiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCkBAIC0yMCwxNSArMjAsMTUgQEAKIGltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CiAKIC8qKgotICogVGhlIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24gCisgKiBUaGUgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+IGltcGxlbWVudGF0aW9uIG9mIFN1bk9ORSBhcHBsaWNhdGlvbgogICogc2VydmVyIHdpbGwgaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLiBBbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHdvdWxkIGJlIGFibGUKLSAqIHRvIHVzZSB0aGlzIGludGVyZmFjZSB0byBkbyB0aGUgZXh0ZW5kZWQgZnVuY3Rpb25hbGl0eSBleHBvc2VkIGJ5IFN1bk9ORSAKKyAqIHRvIHVzZSB0aGlzIGludGVyZmFjZSB0byBkbyB0aGUgZXh0ZW5kZWQgZnVuY3Rpb25hbGl0eSBleHBvc2VkIGJ5IFN1bk9ORQogICogYXBwbGljYXRpb24gc2VydmVyLgotICogPHA+QSBzYW1wbGUgY29kZSBmb3IgZ2V0dGluZyBkcml2ZXIncyBjb25uZWN0aW9uIGltcGxlbWVudGF0aW9uIHdvdWxkIGxpa2UgCisgKiA8cD5BIHNhbXBsZSBjb2RlIGZvciBnZXR0aW5nIGRyaXZlcidzIGNvbm5lY3Rpb24gaW1wbGVtZW50YXRpb24gd291bGQgbGlrZQogICogdGhlIGZvbGxvd2luZy4KICAqIDxwcmU+CiAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgIGNvbS5zdW4uYXBwc2Vydi5EYXRhU291cmNlIGRzID0gKGNvbS5zdW4uYXBwc2Vydi5EYXRhU091cmNlKSBpYy5sb29rdXAoImpkYmMvUG9pbnRCYXNlIik7IAorICAgICBjb20uc3VuLmFwcHNlcnYuRGF0YVNvdXJjZSBkcyA9IChjb20uc3VuLmFwcHNlcnYuRGF0YVNPdXJjZSkgaWMubG9va3VwKCJqZGJjL1BvaW50QmFzZSIpOwogICAgICBDb25uZWN0aW9uIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgQ29ubmVjdGlvbiBkcml2ZXJjb24gPSBkcy5nZXRDb25uZWN0aW9uKGNvbik7CiAKQEAgLTM2LDEzICszNiwxMyBAQAogCiAgICAgIGNvbi5jbG9zZSgpOwogICAgPC9wcmU+Ci0gKiAKKyAqCiAgKiBAYXV0aG9yIEJpbm9kIFAuRwogICovCiBwdWJsaWMgaW50ZXJmYWNlIERhdGFTb3VyY2UgZXh0ZW5kcyBqYXZheC5zcWwuRGF0YVNvdXJjZSB7CiAKICAgICAvKioKLSAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBTUUxDb25uZWN0aW9uIGZyb20gdGhlIENvbm5lY3Rpb24gd3JhcHBlciAKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBTUUxDb25uZWN0aW9uIGZyb20gdGhlIENvbm5lY3Rpb24gd3JhcHBlcgogICAgICAqIGltcGxlbWVudGF0aW9uIG9mIFN1bk9ORSBhcHBsaWNhdGlvbiBzZXJ2ZXIuIElmIGFuIGFjdHVhbCBjb25uZWN0aW9uIGlzCiAgICAgICogc3VwcGxpZWQgYXMgYXJndW1lbnQsIHRoZW4gaXQgd2lsbCBiZSBqdXN0IHJldHVybmVkLgogICAgICAqCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKaW5kZXggNzAwMjlmMS4uZTk2NmY5OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQpAQCAtMjcsMjIgKzI3LDIyIEBACiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwogLyoqCi0gKiBVdGlsaXR5IGNsYXNzLCB3aGljaCB3b3VsZCBjcmVhdGUgbmVjZXNzYXJ5IERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUgCisgKiBVdGlsaXR5IGNsYXNzLCB3aGljaCB3b3VsZCBjcmVhdGUgbmVjZXNzYXJ5IERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUKICAqIHNwZWNpZmljYXRpb24uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKLSAqIEBzZWUJCWNvbS5zdW4uamRiY3JhLmNvbW1vbi5EYXRhU291cmNlU3BlYwotICogQHNlZQkJY29tLnN1bi5qZGJjcmEudXRpbC5NZXRob2RFeGNlY3V0b3IKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCisgKiBAc2VlICAgICAgICBjb20uc3VuLmpkYmNyYS5jb21tb24uRGF0YVNvdXJjZVNwZWMKKyAqIEBzZWUgICAgICAgIGNvbS5zdW4uamRiY3JhLnV0aWwuTWV0aG9kRXhjZWN1dG9yCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlT2JqZWN0QnVpbGRlciBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCiAgICAgcHJpdmF0ZSBEYXRhU291cmNlU3BlYyBzcGVjOwotICAgIAorCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgZHJpdmVyUHJvcGVydGllcyA9IG51bGw7Ci0gICAgCi0gICAgcHJpdmF0ZSBNZXRob2RFeGVjdXRvciBleGVjdXRvciA9IG51bGw7ICAgIAotICAgIAorCisgICAgcHJpdmF0ZSBNZXRob2RFeGVjdXRvciBleGVjdXRvciA9IG51bGw7CisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTAsMTY5ICs1MCwxNjkgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3QgYSBEYXRhU291cmNlIE9iamVjdCBmcm9tIHRoZSBzcGVjLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzcGVjCTxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcGVjICAgIDxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIoRGF0YVNvdXJjZVNwZWMgc3BlYykgewotICAgIAl0aGlzLnNwZWMgPSBzcGVjOwotICAgIAlleGVjdXRvciA9IG5ldyBNZXRob2RFeGVjdXRvcigpOworICAgICAgICB0aGlzLnNwZWMgPSBzcGVjOworICAgICAgICBleGVjdXRvciA9IG5ldyBNZXRob2RFeGVjdXRvcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdCB0aGUgRGF0YVNvdXJjZSBPYmplY3QgZnJvbSB0aGUgc3BlYy4KICAgICAgKgotICAgICAqIEByZXR1cm4JT2JqZWN0IGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBEYXRhU291cmNlU3BlYy4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBpZiB0aGUgY2xhc3MgaXMgbm90IGZvdW5kIG9yIHNvbWUgaXNzdWUgaW4gZXhlY3V0aW5nCi0gICAgICoJCXNvbWUgbWV0aG9kLgorICAgICAqIEByZXR1cm4gICAgT2JqZWN0IGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBEYXRhU291cmNlU3BlYy4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBpZiB0aGUgY2xhc3MgaXMgbm90IGZvdW5kIG9yIHNvbWUgaXNzdWUgaW4gZXhlY3V0aW5nCisgICAgICogICAgICAgIHNvbWUgbWV0aG9kLgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgY29uc3RydWN0RGF0YVNvdXJjZU9iamVjdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJZHJpdmVyUHJvcGVydGllcyA9IHBhcnNlRHJpdmVyUHJvcGVydGllcyhzcGVjKTsKKyAgICAgICAgZHJpdmVyUHJvcGVydGllcyA9IHBhcnNlRHJpdmVyUHJvcGVydGllcyhzcGVjKTsKICAgICAgICAgT2JqZWN0IGRhdGFTb3VyY2VPYmplY3QgPSBnZXREYXRhU291cmNlT2JqZWN0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVjMtVEVTVCA6ICIgICsgZGF0YVNvdXJjZU9iamVjdCk7CiAgICAgICAgIE1ldGhvZFtdIG1ldGhvZHMgPSBkYXRhU291cmNlT2JqZWN0LmdldENsYXNzKCkuZ2V0TWV0aG9kcygpOwogICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG1ldGhvZHNbaV0uZ2V0TmFtZSgpOwotCSAgICBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRVc2VyIikpewkgICAgCQotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBhc3N3b3JkIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ2luVGltZU91dCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9nV3JpdGVyIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HV1JJVEVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhYmFzZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFTb3VyY2VOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERlc2NyaXB0aW9uIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXROZXR3b3JrUHJvdG9jb2wiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBvcnROdW1iZXIiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRSb2xlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRTZXJ2ZXJOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhTdGF0ZW1lbnRzIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYU1RBVEVNRU5UUyksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0SW5pdGlhbFBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuSU5JVElBTFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNaW5Qb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1JTlBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhQb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhJZGxlVGltZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWElETEVUSU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQcm9wZXJ0eUN5Y2xlIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUFJPUEVSVFlDWUNMRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKGRyaXZlclByb3BlcnRpZXMuY29udGFpbnNLZXkobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKSl7Ci0JICAgIAlWZWN0b3IgdmFsdWVzID0gKFZlY3RvcikgZHJpdmVyUHJvcGVydGllcy5nZXQobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKTsKLQkgICAgICAgIGV4ZWN1dG9yLnJ1bk1ldGhvZChtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QsIHZhbHVlcyk7Ci0JICAgIH0KKyAgICAgICAgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0VXNlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQYXNzd29yZCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dpblRpbWVPdXQiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ1dyaXRlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR1dSSVRFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YWJhc2VOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhU291cmNlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREZXNjcmlwdGlvbiIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXROZXR3b3JrUHJvdG9jb2wiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBvcnROdW1iZXIiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRSb2xlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRTZXJ2ZXJOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4U3RhdGVtZW50cyIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFNUQVRFTUVOVFMpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldEluaXRpYWxQb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLklOSVRJQUxQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWluUG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NSU5QT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4UG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4SWRsZVRpbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhJRExFVElNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UHJvcGVydHlDeWNsZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBST1BFUlRZQ1lDTEUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChkcml2ZXJQcm9wZXJ0aWVzLmNvbnRhaW5zS2V5KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSkpeworICAgICAgICAgICAgVmVjdG9yIHZhbHVlcyA9IChWZWN0b3IpIGRyaXZlclByb3BlcnRpZXMuZ2V0KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSk7CisgICAgICAgICAgICBleGVjdXRvci5ydW5NZXRob2QobWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0LCB2YWx1ZXMpOworICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2VPYmplY3Q7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSBleHRyYSBkcml2ZXIgcHJvcGVydGllcyBmcm9tIHRoZSBEYXRhU291cmNlU3BlYyBvYmplY3QgYW5kCiAgICAgICogcGFyc2UgdGhlbSB0byBhIHNldCBvZiBtZXRob2ROYW1lIGFuZCBwYXJhbWV0ZXJzLiBQcmVwYXJlIGEgaGFzaHRhYmxlCiAgICAgICogY29udGFpbmluZyB0aGVzZSBkZXRhaWxzIGFuZCByZXR1cm4uCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3BlYwk8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHJldHVybglIYXNodGFibGUgY29udGFpbmluZyBtZXRob2QgbmFtZXMgYW5kIHBhcmFtZXRlcnMsCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglJZiBkZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGFuZCBwcm9wZXJ0eSBzdHJpbmcKLSAgICAgKgkJCQkJaXMgbm90IG51bGwuCisgICAgICogQHBhcmFtICAgIHNwZWMgICAgPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgSGFzaHRhYmxlIGNvbnRhaW5pbmcgbWV0aG9kIG5hbWVzIGFuZCBwYXJhbWV0ZXJzLAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgSWYgZGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBhbmQgcHJvcGVydHkgc3RyaW5nCisgICAgICogICAgICAgICAgICAgICAgICAgIGlzIG5vdCBudWxsLgogICAgICAqLwogICAgIHByaXZhdGUgSGFzaHRhYmxlIHBhcnNlRHJpdmVyUHJvcGVydGllcyhEYXRhU291cmNlU3BlYyBzcGVjKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCVN0cmluZyBkZWxpbSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CisgICAgICAgIFN0cmluZyBkZWxpbSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAKICAgICAgICAgU3RyaW5nIHByb3AgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTKTsKLQlpZiAoIHByb3AgPT0gbnVsbCB8fCBwcm9wLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgIHJldHVybiBuZXcgSGFzaHRhYmxlKCk7Ci0JfSBlbHNlIGlmIChkZWxpbSA9PSBudWxsIHx8IGRlbGltLmVxdWFscygiIikpIHsKLQkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uICgiRGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiIpOwotCX0KLQkKLQlIYXNodGFibGUgcHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoKTsKLQlkZWxpbSA9IGRlbGltLnRyaW0oKTsJCi0JU3RyaW5nIHNlcCA9IGRlbGltK2RlbGltOwotCWludCBzZXBMZW4gPSBzZXAubGVuZ3RoKCk7Ci0JU3RyaW5nIGNhY2hlID0gcHJvcDsKLQlWZWN0b3IgbWV0aG9kcyA9IG5ldyBWZWN0b3IoKTsKLQkKLQl3aGlsZSAoY2FjaGUuaW5kZXhPZihzZXApICE9IC0xKSB7Ci0JICAgIGludCBpbmRleCA9IGNhY2hlLmluZGV4T2Yoc2VwKTsKLQkgICAgU3RyaW5nIG5hbWUgPSBjYWNoZS5zdWJzdHJpbmcoMCxpbmRleCk7Ci0JICAgIGlmIChuYW1lLnRyaW0oKSAhPSAiIikgewotCSAgICAgICAgbWV0aG9kcy5hZGQobmFtZSk7Ci0JICAgIAljYWNoZSA9IGNhY2hlLnN1YnN0cmluZyhpbmRleCtzZXBMZW4pOwotCSAgICB9Ci0JfQotCQotICAgIAlFbnVtZXJhdGlvbiBhbGxNZXRob2RzID0gbWV0aG9kcy5lbGVtZW50cygpOwotICAgIAl3aGlsZSAoYWxsTWV0aG9kcy5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgIAkgICAgU3RyaW5nIG9uZU1ldGhvZCA9IChTdHJpbmcpIGFsbE1ldGhvZHMubmV4dEVsZW1lbnQoKTsgICAgCSAgICAKLSAgICAJICAgIGlmICghb25lTWV0aG9kLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0gICAgCSAgICAJU3RyaW5nIG1ldGhvZE5hbWUgPSBudWxsOwotICAgIAkgICAgCVZlY3RvciBwYXJtcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAJICAgIAlTdHJpbmdUb2tlbml6ZXIgbWV0aG9kRGV0YWlscyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIob25lTWV0aG9kLGRlbGltKTsKLQkJZm9yIChpbnQgaT0wOyBtZXRob2REZXRhaWxzLmhhc01vcmVUb2tlbnMoKTtpKysgKSB7Ci0JCSAgICBTdHJpbmcgdG9rZW4gPSAoU3RyaW5nKSBtZXRob2REZXRhaWxzLm5leHRUb2tlbigpOwotCQkgICAgaWYgKGk9PTApIHsKLQkJICAgIAltZXRob2ROYW1lID0gdG9rZW4udG9VcHBlckNhc2UoKTsKLQkJICAgIH0gZWxzZSB7Ci0JCSAgICAJcGFybXMuYWRkKHRva2VuKTsJCSAgICAJCi0JCSAgICB9Ci0JCX0KLQkJcHJvcGVydGllcy5wdXQobWV0aG9kTmFtZSxwYXJtcyk7Ci0gICAgCSAgICB9ICAgIAkgICAgCi0gICAgCX0KLSAgICAJcmV0dXJuIHByb3BlcnRpZXM7CisgICAgaWYgKCBwcm9wID09IG51bGwgfHwgcHJvcC50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICByZXR1cm4gbmV3IEhhc2h0YWJsZSgpOworICAgIH0gZWxzZSBpZiAoZGVsaW0gPT0gbnVsbCB8fCBkZWxpbS5lcXVhbHMoIiIpKSB7CisgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbiAoIkRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24iKTsKICAgICB9Ci0gICAgCisKKyAgICBIYXNodGFibGUgcHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoKTsKKyAgICBkZWxpbSA9IGRlbGltLnRyaW0oKTsKKyAgICBTdHJpbmcgc2VwID0gZGVsaW0rZGVsaW07CisgICAgaW50IHNlcExlbiA9IHNlcC5sZW5ndGgoKTsKKyAgICBTdHJpbmcgY2FjaGUgPSBwcm9wOworICAgIFZlY3RvciBtZXRob2RzID0gbmV3IFZlY3RvcigpOworCisgICAgd2hpbGUgKGNhY2hlLmluZGV4T2Yoc2VwKSAhPSAtMSkgeworICAgICAgICBpbnQgaW5kZXggPSBjYWNoZS5pbmRleE9mKHNlcCk7CisgICAgICAgIFN0cmluZyBuYW1lID0gY2FjaGUuc3Vic3RyaW5nKDAsaW5kZXgpOworICAgICAgICBpZiAobmFtZS50cmltKCkgIT0gIiIpIHsKKyAgICAgICAgICAgIG1ldGhvZHMuYWRkKG5hbWUpOworICAgICAgICAgICAgY2FjaGUgPSBjYWNoZS5zdWJzdHJpbmcoaW5kZXgrc2VwTGVuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICAgICBFbnVtZXJhdGlvbiBhbGxNZXRob2RzID0gbWV0aG9kcy5lbGVtZW50cygpOworICAgICAgICB3aGlsZSAoYWxsTWV0aG9kcy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgU3RyaW5nIG9uZU1ldGhvZCA9IChTdHJpbmcpIGFsbE1ldGhvZHMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICghb25lTWV0aG9kLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBudWxsOworICAgICAgICAgICAgICAgIFZlY3RvciBwYXJtcyA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXIgbWV0aG9kRGV0YWlscyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIob25lTWV0aG9kLGRlbGltKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBtZXRob2REZXRhaWxzLmhhc01vcmVUb2tlbnMoKTtpKysgKSB7CisgICAgICAgICAgICBTdHJpbmcgdG9rZW4gPSAoU3RyaW5nKSBtZXRob2REZXRhaWxzLm5leHRUb2tlbigpOworICAgICAgICAgICAgaWYgKGk9PTApIHsKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gdG9rZW4udG9VcHBlckNhc2UoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFybXMuYWRkKHRva2VuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwcm9wZXJ0aWVzLnB1dChtZXRob2ROYW1lLHBhcm1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHJvcGVydGllczsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZSBzcGVjLgogICAgICAqCi0gICAgICogQHJldHVybglJbml0aWFsIERhdGFTb3VyY2UgT2JqZWN0IGluc3RhbmNlLgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IElmIGNsYXNzIG5hbWUgaXMgd3Jvbmcgb3IgY2xhc3NwYXRoIGlzIG5vdCBzZXQKLSAgICAgKgkJcHJvcGVybHkuCisgICAgICogQHJldHVybiAgICBJbml0aWFsIERhdGFTb3VyY2UgT2JqZWN0IGluc3RhbmNlLgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IElmIGNsYXNzIG5hbWUgaXMgd3Jvbmcgb3IgY2xhc3NwYXRoIGlzIG5vdCBzZXQKKyAgICAgKiAgICAgICAgcHJvcGVybHkuCiAgICAgICovCiAgICAgcHJpdmF0ZSBPYmplY3QgZ2V0RGF0YVNvdXJjZU9iamVjdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJU3RyaW5nIGNsYXNzTmFtZSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7Ci0gICAgICAgIHRyeSB7ICAgICAgICAgICAgCisgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOworICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgZGF0YVNvdXJjZUNsYXNzID0gQ2xhc3MuZm9yTmFtZShjbGFzc05hbWUpOwogICAgICAgICAgICAgT2JqZWN0IGRhdGFTb3VyY2VPYmplY3QgPSBkYXRhU291cmNlQ2xhc3MubmV3SW5zdGFuY2UoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVjMtVEVTVCA6ICIgICsgZGF0YVNvdXJjZU9iamVjdCk7CiAgICAgICAgICAgICByZXR1cm4gZGF0YVNvdXJjZU9iamVjdDsKICAgICAgICAgfSBjYXRjaChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGNmbmUpewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jbmZlX2RzIiwgY2ZuZSk7Ci0JCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NuZmVfZHMiLCBjZm5lKTsKKwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDbGFzcyBOYW1lIGlzIHdyb25nIG9yIENsYXNzIHBhdGggaXMgbm90IHNldCBmb3IgOiIgKyBjbGFzc05hbWUpOwogICAgICAgICB9IGNhdGNoKEluc3RhbnRpYXRpb25FeGNlcHRpb24gY2UpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaW5zdCIsIGNsYXNzTmFtZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2luc3QiLCBjbGFzc05hbWUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJFcnJvciBpbiBpbnN0YW50aWF0aW5nIiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBjZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hY2NfaW5zdCIsIGNsYXNzTmFtZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2FjY19pbnN0IiwgY2xhc3NOYW1lKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIEVycm9yIGluIGluc3RhbnRpYXRpbmciICsgY2xhc3NOYW1lKTsKICAgICAgICAgfQogICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQppbmRleCBlZjZjNGM5Li4zZGMxNTRkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCkBAIC0xOSw5MiArMTksOTIgQEAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwogCiAvKioKLSAqIEVuY2Fwc3VsYXRlIHRoZSBEYXRhU291cmNlIG9iamVjdCBkZXRhaWxzIG9idGFpbmVkIGZyb20gCisgKiBFbmNhcHN1bGF0ZSB0aGUgRGF0YVNvdXJjZSBvYmplY3QgZGV0YWlscyBvYnRhaW5lZCBmcm9tCiAgKiBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlU3BlYyBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUk5BTUUJCQkJPSAxOyAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVNTV09SRAkJCQk9IDI7ICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVUkwJCQkJCT0gMzsgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR0lOVElNRU9VVAkJCT0gNDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dXUklURVIJCQkJPSA1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFCQVNFTkFNRQkJCT0gNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFTkFNRQkJCT0gNzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDUklQVElPTgkJCQk9IDg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS1BST1RPQ09MCQkJPSA5OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUlROVU1CRVIJCQkJPSAxMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0xFTkFNRQkJCQk9IDExOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFUlZFUk5BTUUJCQkJPSAxMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhTVEFURU1FTlRTCQkJPSAxMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTklUSUFMUE9PTFNJWkUJCQk9IDE0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTlBPT0xTSVpFCQkJCT0gMTU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYUE9PTFNJWkUJCQkJPSAxNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhJRExFVElNRQkJCQk9IDE3OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZQ1lDTEUJCQk9IDE4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERSSVZFUlBST1BFUlRJRVMJCQk9IDE5OyAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTEFTU05BTUUJCQkJPSAyMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUxJTUlURVIJCQkJPSAyMTsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYQURBVEFTT1VSQ0UJCQk9IDIyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0UJCQkJPSAyMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OUE9PTERBVEFTT1VSQ0UJCT0gMjQ7Ci0gICAgICAKLSAgICAvL0dKQ0lOVCAgICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQJPSAyNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OTUVUSE9ECQkJPSAyNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OVEFCTEVOQU1FCQkJPSAyNzsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUUkFOU0FDVElPTklTT0xBVElPTgkJPSAyODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHVUFSQU5URUVJU09MQVRJT05MRVZFTAkJPSAyOTsKLSAgICAgICAgICAgIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRVJOQU1FICAgICAgICAgICAgICAgID0gMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVNTV09SRCAgICAgICAgICAgICAgICA9IDI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVJMICAgICAgICAgICAgICAgICAgICA9IDM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HSU5USU1FT1VUICAgICAgICAgICAgPSA0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR1dSSVRFUiAgICAgICAgICAgICAgICA9IDU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQUJBU0VOQU1FICAgICAgICAgICAgPSA2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0VOQU1FICAgICAgICAgICAgPSA3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFU0NSSVBUSU9OICAgICAgICAgICAgICAgID0gODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLUFJPVE9DT0wgICAgICAgICAgICA9IDk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9SVE5VTUJFUiAgICAgICAgICAgICAgICA9IDEwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPTEVOQU1FICAgICAgICAgICAgICAgID0gMTE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVkVSTkFNRSAgICAgICAgICAgICAgICA9IDEyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFNUQVRFTUVOVFMgICAgICAgICAgICA9IDEzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOSVRJQUxQT09MU0laRSAgICAgICAgICAgID0gMTQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOUE9PTFNJWkUgICAgICAgICAgICAgICAgPSAxNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhQT09MU0laRSAgICAgICAgICAgICAgICA9IDE2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWElETEVUSU1FICAgICAgICAgICAgICAgID0gMTc7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlDWUNMRSAgICAgICAgICAgID0gMTg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRFJJVkVSUFJPUEVSVElFUyAgICAgICAgICAgID0gMTk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xBU1NOQU1FICAgICAgICAgICAgICAgID0gMjA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVMSU1JVEVSICAgICAgICAgICAgICAgID0gMjE7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYQURBVEFTT1VSQ0UgICAgICAgICAgICA9IDIyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0UgICAgICAgICAgICAgICAgPSAyMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OUE9PTERBVEFTT1VSQ0UgICAgICAgID0gMjQ7CisKKyAgICAvL0dKQ0lOVAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQgICAgPSAyNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OTUVUSE9EICAgICAgICAgICAgPSAyNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OVEFCTEVOQU1FICAgICAgICAgICAgPSAyNzsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRSQU5TQUNUSU9OSVNPTEFUSU9OICAgICAgICA9IDI4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdVQVJBTlRFRUlTT0xBVElPTkxFVkVMICAgICAgICA9IDI5OworCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgZGV0YWlscyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgcHJvcGVydHkuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcHJvcGVydHkJUHJvcGVydHkgTmFtZSB0byBiZSBzZXQuCi0gICAgICogQHBhcmFtCXZhbHVlCQlWYWx1ZSBvZiBwcm9wZXJ0eSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIHByb3BlcnR5ICAgIFByb3BlcnR5IE5hbWUgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICB2YWx1ZSAgICAgICAgVmFsdWUgb2YgcHJvcGVydHkgdG8gYmUgc2V0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERldGFpbChpbnQgcHJvcGVydHksIFN0cmluZyB2YWx1ZSkgewotICAgIAlkZXRhaWxzLnB1dChuZXcgSW50ZWdlcihwcm9wZXJ0eSksdmFsdWUpOworICAgICAgICBkZXRhaWxzLnB1dChuZXcgSW50ZWdlcihwcm9wZXJ0eSksdmFsdWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUgb2YgcHJvcGVydHkKICAgICAgKgotICAgICAqIEByZXR1cm4JVmFsdWUgb2YgdGhlIHByb3BlcnR5LgorICAgICAqIEByZXR1cm4gICAgVmFsdWUgb2YgdGhlIHByb3BlcnR5LgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGV0YWlsKGludCBwcm9wZXJ0eSkgewotICAgIAlpZiAoZGV0YWlscy5jb250YWluc0tleShuZXcgSW50ZWdlcihwcm9wZXJ0eSkpKSB7Ci0gICAgCSAgICByZXR1cm4gKFN0cmluZykgZGV0YWlscy5nZXQobmV3IEludGVnZXIocHJvcGVydHkpKTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHJldHVybiBudWxsOwotICAgIAl9ICAgIAkKKyAgICAgICAgaWYgKGRldGFpbHMuY29udGFpbnNLZXkobmV3IEludGVnZXIocHJvcGVydHkpKSkgeworICAgICAgICAgICAgcmV0dXJuIChTdHJpbmcpIGRldGFpbHMuZ2V0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyB3aGV0aGVyIHR3byA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0cwogICAgICAqIGFyZSBlcXVhbCBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb2JqCUluc3RhbmNlIG9mIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG9iaiAgICBJbnN0YW5jZSBvZiA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7Ci0gICAgCWlmIChvYmogaW5zdGFuY2VvZiBEYXRhU291cmNlU3BlYykgewotICAgIAkgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5lcXVhbHMoKChEYXRhU291cmNlU3BlYylvYmopLmRldGFpbHMpOwotICAgIAl9Ci0gICAgCXJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGFTb3VyY2VTcGVjKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmVxdWFscygoKERhdGFTb3VyY2VTcGVjKW9iaikuZGV0YWlscyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgaGFzaENvZGUgb2YgdGhpcyA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybgloYXNoQ29kZSBvZiB0aGlzIG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2hDb2RlIG9mIHRoaXMgb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgCXJldHVybiB0aGlzLmRldGFpbHMuaGFzaENvZGUoKTsKLSAgICB9ICAgIAorICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmhhc2hDb2RlKCk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbAppbmRleCBlZjQzOGZjLi4zYjRmYWViIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iLiIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL2NvbW1vbiIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0zNiwxMyArMzYsMTMgQEAKIAogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxMyIgZGVwZW5kcz0iY29tcGlsZSIvPgogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxNCIgZGVwZW5kcz0iY29tcGlsZSIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxMyIgZGVwZW5kcz0icGFja2FnZSIvPgogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxNCIgZGVwZW5kcz0icGFja2FnZSIvPgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxMyIgZGVwZW5kcz0iY29tcGlsZTEzLCBwYWNrYWdlMTMiLz4KICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgotICAgIAorCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCmluZGV4IGE5NTZkOTcuLjExYWQ3NDYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKQEAgLTI0LDI0ICsyNCwyNCBAQAogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yOwogCiAvKioKLSAqIEhvbGRzIHRoZSBqYXZhLnNxbC5Db25uZWN0aW9uIG9iamVjdCwgd2hpY2ggaXMgdG8gYmUgCisgKiBIb2xkcyB0aGUgamF2YS5zcWwuQ29ubmVjdGlvbiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlCiAgKiBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uIHByb2dyYW0uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0aW9uSG9sZGVyIGltcGxlbWVudHMgQ29ubmVjdGlvbnsgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvbkhvbGRlciBpbXBsZW1lbnRzIENvbm5lY3Rpb257CiAKICAgICBwcml2YXRlIENvbm5lY3Rpb24gY29uOwotICAgIAorCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKLSAgICBwcml2YXRlIGJvb2xlYW4gd3JhcHBlZEFscmVhZHkgPSBmYWxzZTsgICAgCi0gICAgCisKKyAgICBwcml2YXRlIGJvb2xlYW4gd3JhcHBlZEFscmVhZHkgPSBmYWxzZTsKKwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0Nsb3NlZCA9IGZhbHNlOwotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIHZhbGlkID0gdHJ1ZTsKLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBhY3RpdmUgPSBmYWxzZTsKICAgICAvKioKICAgICAgKiBUaGUgYWN0aXZlIGZsYWcgaXMgZmFsc2Ugd2hlbiB0aGUgY29ubmVjdGlvbiBoYW5kbGUgaXMKQEAgLTUzLDIxOSArNTMsMjE5IEBACiAgICAgICogZnVuY3Rpb24sIHRoZSBhYm92ZSBtZXRob2QgaW52b2NhdGlvbiBzdWNjZWVkczsgb3RoZXJ3aXNlCiAgICAgICogYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KICAgICAgKi8KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYSBDb25uZWN0aW9uIGhvbGRlci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uSG9sZGVyKENvbm5lY3Rpb24gY29uLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLmNvbiA9IGNvbjsKICAgICAgICAgdGhpcy5tYyAgPSBtYzsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gdGhpcyBob2xkZXIgb2JqZWN0LgotICAgICAqIAotICAgICAqIEByZXR1cm4JQ29ubmVjdGlvbiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIENvbm5lY3Rpb24gb2JqZWN0LgogICAgICAqLwogICAgIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbigpIHsKLSAgICAJcmV0dXJuIGNvbjsKKyAgICAgICAgcmV0dXJuIGNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBmbGFnIHRvIGluZGljYXRlIHRoYXQsIHRoZSBjb25uZWN0aW9uIGlzIHdyYXBwZWQgYWxyZWFkeSBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jd3JhcEZsYWcJCisgICAgICogQHBhcmFtICAgIHdyYXBGbGFnCiAgICAgICovCiAgICAgdm9pZCB3cmFwcGVkKGJvb2xlYW4gd3JhcEZsYWcpewogICAgICAgICB0aGlzLndyYXBwZWRBbHJlYWR5ID0gd3JhcEZsYWc7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB3aGV0aGVyIGl0IGlzIHdyYXBwZWQgYWxyZWFkeSBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXdyYXBwZWQgZmxhZy4KKyAgICAgKiBAcmV0dXJuICAgIHdyYXBwZWQgZmxhZy4KICAgICAgKi8KICAgICBib29sZWFuIGlzV3JhcHBlZCgpewogICAgICAgICByZXR1cm4gd3JhcHBlZEFscmVhZHk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHJlc3BvbnNpYmxlCiAgICAgICogZm9yIHRoaXMgY29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqLwogICAgIE1hbmFnZWRDb25uZWN0aW9uIGdldE1hbmFnZWRDb25uZWN0aW9uKCkgewogICAgICAgICByZXR1cm4gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVwbGFjZSB0aGUgYWN0dWFsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCB3aXRoIHRoZSBvbmUKLSAgICAgKiBzdXBwbGllZC4gQWxzbyByZXBsYWNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBsaW5rLiAgICAgCisgICAgICogc3VwcGxpZWQuIEFsc28gcmVwbGFjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gbGluay4KICAgICAgKgotICAgICAqIEBwYXJhbQljb24gPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQltYyAgPGNvZGU+IE1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIGNvbiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG1jICA8Y29kZT4gTWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICB2b2lkIGFzc29jaWF0ZUNvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24sIE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7Ci0gICAgCXRoaXMubWMgPSBtYzsKLSAgICAJdGhpcy5jb24gPSBjb247CisgICAgICAgIHRoaXMubWMgPSBtYzsKKyAgICAgICAgdGhpcy5jb24gPSBjb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2xlYXJzIGFsbCB3YXJuaW5ncyByZXBvcnRlZCBmb3IgdGhlIHVuZGVybHlpbmcgY29ubmVjdGlvbiAgb2JqZWN0LgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjbGVhcldhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsgICAgCi0JY2hlY2tWYWxpZGl0eSgpOworICAgIHB1YmxpYyB2b2lkIGNsZWFyV2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgY29uLmNsZWFyV2FybmluZ3MoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDbG9zZXMgdGhlIGxvZ2ljYWwgY29ubmVjdGlvbi4gICAgCisgICAgICogQ2xvc2VzIHRoZSBsb2dpY2FsIGNvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICAgIGlzQ2xvc2VkID0gdHJ1ZTsKLSAgICAgICAgbWMuY29ubmVjdGlvbkNsb3NlZChudWxsLCB0aGlzKTsgICAgICAgIAorICAgICAgICBtYy5jb25uZWN0aW9uQ2xvc2VkKG51bGwsIHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEludmFsaWRhdGVzIHRoaXMgb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGludmFsaWRhdGUoKSB7Ci0gICAgCXZhbGlkID0gZmFsc2U7CisgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2xvc2VzIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGludm9sdmVkIGluIHRoaXMuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwotICAgIHZvaWQgYWN0dWFsQ2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueyAgICAKKyAgICB2b2lkIGFjdHVhbENsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgICAgY29uLmNsb3NlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IHRoZSBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbW1pdCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5jb21taXQoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5jb21taXQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4gICAgIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KGludCByZXN1bHRTZXRUeXBlLCBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudChyZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRIb2xkYWJpbGl0eQlSZXN1bHRTZXQgSG9sZGFiaWxpdHkuICAgICAKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LiAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgICAgIAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LCAKLSAgICAJCQkJICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJICAgICAKKyAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgICAgICAJCQkgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CiAgICAgfQotIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGF1dG8tY29tbWl0IG1vZGUgZm9yIHRoZSB1bmRlcmx5aW5nIDxjb2RlPiBDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGN1cnJlbnQgc3RhdGUgb2YgY29ubmVjdGlvbidzIGF1dG8tY29tbWl0IG1vZGUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBnZXRBdXRvQ29tbWl0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRBdXRvQ29tbWl0KCk7Ci0gICAgfSAgIAotIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRBdXRvQ29tbWl0KCk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSB1bmRlcmx5aW5nIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCdzIGNhdGFsb2cgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JQ2F0YWxvZyBOYW1lLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIENhdGFsb2cgTmFtZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDYXRhbG9nKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uZ2V0Q2F0YWxvZygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZAogICAgICAqIHVzaW5nIHRoaXMgY29ubmVjdGlvbiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhvbGRhYmlsaXR5IHZhbHVlLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIGhvbGRhYmlsaXR5IHZhbHVlLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldEhvbGRhYmlsaXR5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuCWNvbi5nZXRIb2xkYWJpbGl0eSgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuICAgIGNvbi5nZXRIb2xkYWJpbGl0eSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+RGF0YWJhc2VNZXRhRGF0YTwvY29kZT5vYmplY3QgZnJvbSB0aGUgdW5kZXJseWluZwogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT5EYXRhYmFzZU1ldGFEYXRhPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YWJhc2VNZXRhRGF0YSBnZXRNZXRhRGF0YSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0TWV0YURhdGEoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0TWV0YURhdGEoKTsKICAgICB9Ci0gCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhpcyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QncyBjdXJyZW50IHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KICAgICAgKgogICAgICAqIEByZXR1cm4gVHJhbnNhY3Rpb24gbGV2ZWwKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIAorICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoCiAgICAgICogPGNvZGU+IENvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JVHlwZU1hcCBzZXQgaW4gdGhpcyBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgVHlwZU1hcCBzZXQgaW4gdGhpcyBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBNYXAgZ2V0VHlwZU1hcCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0VHlwZU1hcCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRUeXBlTWFwKCk7CiAgICAgfQogCiAvKgpAQCAtMjc5LDE4NCArMjc5LDE4NCBAQAogICAgICAqIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gRmlyc3QgPGNvZGU+IFNRTFdhcm5pbmc8L2NvZGU+IE9iamVjdCBvciBudWxsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNRTFdhcm5pbmcgZ2V0V2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldFdhcm5pbmdzKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldFdhcm5pbmdzKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHdoZXRoZXIgdW5kZXJseWluZyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLgogICAgICAqCi0gICAgICogQHJldHVybgl0cnVlIGlmIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyBjbG9zZWQsIGZhbHNlCi0gICAgICogCQlpZiBpdCBpcyBjbG9zZWQuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLCBmYWxzZQorICAgICAqICAgICAgICAgaWYgaXQgaXMgY2xvc2VkLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0Nsb3NlZCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAlyZXR1cm4gaXNDbG9zZWQ7CisgICAgICAgIHJldHVybiBpc0Nsb3NlZDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgd2hldGhlciB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyByZWFkLW9ubHkuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBpcyByZWFkLW9ubHksIGZhbHNlIG90aGVyLXdpc2UKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gaXMgcmVhZC1vbmx5LCBmYWxzZSBvdGhlci13aXNlCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzUmVhZE9ubHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmlzUmVhZE9ubHkoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uaXNSZWFkT25seSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiBTUUwgc3RhdGVtZW50IGludG8gdGhlIHN5c3RlbSdzIG5hdGl2ZSBTUUwgZ3JhbW1lci4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIHN0YXRlbWVudCAsIHRvIGJlIGNvbnZlcnRlZC4KLSAgICAgKiBAcmV0dXJuCUNvbnZlcnRlZCBTUUwgc3RyaW5nLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBzdGF0ZW1lbnQgLCB0byBiZSBjb252ZXJ0ZWQuCisgICAgICogQHJldHVybiAgICBDb252ZXJ0ZWQgU1FMIHN0cmluZy4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBuYXRpdmVTUUwoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5uYXRpdmVTUUwoc3FsKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ubmF0aXZlU1FMKHNxbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQogICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CiAgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKLSAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQotICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgICAgICAKLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCSAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgIAkJCSAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsKTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKKyAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKKyAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCiAgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKICAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsKICAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlhdXRvR2VuZXJhdGVkS2V5cyBhIGZsYWcgaW5kaWNhdGluZyBBdXRvR2VuZXJhdGVkS2V5cyBuZWVkIHRvIGJlIHJldHVybmVkLgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCBhdXRvR2VuZXJhdGVkS2V5cykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxhdXRvR2VuZXJhdGVkS2V5cyk7Ci0gICAgfSAgICAKLSAgICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JY29sdW1uSW5kZXhlcyBhbiBhcnJheSBvZiBjb2x1bW4gaW5kZXhlcyBpbmRpY2F0aW5nIHRoZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlCi0gICAgICoJCXJldHVybmVkIGZyb20gdGhlIGluc2VydGVkIHJvdyBvciByb3dzLgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludFtdIGNvbHVtbkluZGV4ZXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uSW5kZXhlcyk7Ci0gICAgfSAgICAgICAgICAKLSAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCWludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgICAgICAgCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgIAkJCQkgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7Ci0gICAgfSAgICAgICAgICAgCiAKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKICAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQljb2x1bW5OYW1lcyBOYW1lIG9mIGJvdW5kIGNvbHVtbnMuCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGF1dG9HZW5lcmF0ZWRLZXlzIGEgZmxhZyBpbmRpY2F0aW5nIEF1dG9HZW5lcmF0ZWRLZXlzIG5lZWQgdG8gYmUgcmV0dXJuZWQuCiAgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCBhdXRvR2VuZXJhdGVkS2V5cykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGF1dG9HZW5lcmF0ZWRLZXlzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgY29sdW1uSW5kZXhlcyBhbiBhcnJheSBvZiBjb2x1bW4gaW5kZXhlcyBpbmRpY2F0aW5nIHRoZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlCisgICAgICogICAgICAgIHJldHVybmVkIGZyb20gdGhlIGluc2VydGVkIHJvdyBvciByb3dzLgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludFtdIGNvbHVtbkluZGV4ZXMpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5JbmRleGVzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0SG9sZGFiaWxpdHkgICAgUmVzdWx0U2V0IEhvbGRhYmlsaXR5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBjb2x1bW5OYW1lcyBOYW1lIG9mIGJvdW5kIGNvbHVtbnMuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgU3RyaW5nW10gY29sdW1uTmFtZXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uTmFtZXMpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5OYW1lcyk7CiAgICAgfQogCiAgICAgcHVibGljIENsb2IgY3JlYXRlQ2xvYigpIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtNTA2LDE2MiArNTA2LDE2MiBAQAogICAgIC8qKgogICAgICAqIFJlbW92ZXMgdGhlIGdpdmVuIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2F2ZXBvaW50CTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0Ci0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBzYXZlcG9pbnQgICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVsZWFzZVNhdmVwb2ludChTYXZlcG9pbnQgc2F2ZXBvaW50KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucmVsZWFzZVNhdmVwb2ludChzYXZlcG9pbnQpOwotICAgIH0gCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucmVsZWFzZVNhdmVwb2ludChzYXZlcG9pbnQpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFJvbGxzIGJhY2sgdGhlIGNoYW5nZXMgbWFkZSBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjaygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yb2xsYmFjaygpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJvbGxiYWNrKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUm9sbHMgYmFjayB0aGUgY2hhbmdlcyBtYWRlIGFmdGVyIHRoZSBzYXZlcG9pbnQuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soU2F2ZXBvaW50IHNhdmVwb2ludCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJvbGxiYWNrKHNhdmVwb2ludCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucm9sbGJhY2soc2F2ZXBvaW50KTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgYXV0by1jb21tbWl0IG1vZGUgb2YgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlhdXRvQ29tbWl0IGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB0aGUgYXV0by1jb21taXQgbW9kZS4gICAgIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgYXV0b0NvbW1pdCBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhlIGF1dG8tY29tbWl0IG1vZGUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEF1dG9Db21taXQoYm9vbGVhbiBhdXRvQ29tbWl0KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGF1dG9Db21taXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNhdGFsb2cgbmFtZSB0byB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2F0YWxvZwlDYXRhbG9nIG5hbWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBjYXRhbG9nICAgIENhdGFsb2cgbmFtZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q2F0YWxvZyhTdHJpbmcgY2F0YWxvZykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldENhdGFsb2coY2F0YWxvZyk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0Q2F0YWxvZyhjYXRhbG9nKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZCAKKyAgICAgKiBTZXRzIHRoZSBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZAogICAgICAqIHVzaW5nIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCWhvbGRhYmlsaXR5CUEgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBob2xkYWJpbGl0eSBjb25zdGFudAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgaG9sZGFiaWxpdHkgICAgQSA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IGhvbGRhYmlsaXR5IGNvbnN0YW50CisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEhvbGRhYmlsaXR5KGludCBob2xkYWJpbGl0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAgCWNvbi5zZXRIb2xkYWJpbGl0eShob2xkYWJpbGl0eSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICAgY29uLnNldEhvbGRhYmlsaXR5KGhvbGRhYmlsaXR5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBQdXRzIHRoZSBjb25uZWN0aW9uIGluIHJlYWQtb25seSBtb2RlIGFzIGEgaGludCB0byB0aGUgZHJpdmVyIHRvIAorICAgICAqIFB1dHMgdGhlIGNvbm5lY3Rpb24gaW4gcmVhZC1vbmx5IG1vZGUgYXMgYSBoaW50IHRvIHRoZSBkcml2ZXIgdG8KICAgICAgKiBwZXJmb3JtIGRhdGFiYXNlIG9wdGltaXphdGlvbnMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVhZE9ubHkgIHRydWUgZW5hYmxlcyByZWFkLW9ubHkgbW9kZSwgZmFsc2UgZGlzYWJsZXMgaXQuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICByZWFkT25seSAgdHJ1ZSBlbmFibGVzIHJlYWQtb25seSBtb2RlLCBmYWxzZSBkaXNhYmxlcyBpdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVhZE9ubHkoYm9vbGVhbiByZWFkT25seSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldFJlYWRPbmx5KHJlYWRPbmx5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRSZWFkT25seShyZWFkT25seSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhbmQgdW5uYW1lZCBzYXZlcG9pbnQgYW5kIHJldHVybnMgYW4gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KICAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNhdmVwb2ludCBzZXRTYXZlcG9pbnQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnNldFNhdmVwb2ludCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc2F2ZXBvaW50IHdpdGggdGhlIG5hbWUgYW5kIHJldHVybnMgYW4gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdC4KICAgICAgKgotICAgICAqIEBwYXJhbQluYW1lCU5hbWUgb2YgdGhlIHNhdmVwb2ludC4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbmFtZSAgICBOYW1lIG9mIHRoZSBzYXZlcG9pbnQuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNhdmVwb2ludCBzZXRTYXZlcG9pbnQoU3RyaW5nIG5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uc2V0U2F2ZXBvaW50KG5hbWUpOwotICAgIH0gICAgCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnNldFNhdmVwb2ludChuYW1lKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGV2ZWwgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbGV2ZWwgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2FjdGlvbklzb2xhdGlvbihpbnQgbGV2ZWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbihsZXZlbCk7Ci0gICAgfSAgICAgCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24obGV2ZWwpOworICAgIH0KKwogICAgIC8qKgotICAgICAqIEluc3RhbGxzIHRoZSBnaXZlbiA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhcyB0aGUgdHlvZSBtYXAgZm9yIHRoaXMgCisgICAgICogSW5zdGFsbHMgdGhlIGdpdmVuIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzIHRoZSB0eW9lIG1hcCBmb3IgdGhpcwogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCW1hcAk8Y29kZT5NYXA8L2NvZGU+IGEgTWFwIG9iamVjdCB0byBpbnN0YWxsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbWFwICAgIDxjb2RlPk1hcDwvY29kZT4gYSBNYXAgb2JqZWN0IHRvIGluc3RhbGwuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFR5cGVNYXAoTWFwIG1hcCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOwotICAgIAljb24uc2V0VHlwZU1hcChtYXApOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldFR5cGVNYXAobWFwKTsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE5ldHdvcmtUaW1lb3V0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5ldHdvcmtUaW1lb3V0KEV4ZWN1dG9yIGV4ZWN1dG9yLCBpbnQgbWlsbGlzZWNvbmRzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWJvcnQoRXhlY3V0b3IgZXhlY3V0b3IpICB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFNjaGVtYSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNjaGVtYShTdHJpbmcgc2NoZW1hKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIENoZWNrcyB0aGUgdmFsaWRpdHkgb2YgdGhpcyBvYmplY3QKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgY2hlY2tWYWxpZGl0eSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAlpZiAoaXNDbG9zZWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJDb25uZWN0aW9uIGNsb3NlZCIpOwotICAgIAlpZiAoIXZhbGlkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiSW52YWxpZCBDb25uZWN0aW9uIik7Ci0gICAgCWlmKGFjdGl2ZSA9PSBmYWxzZSkgewotICAgIAkgICAgbWMuY2hlY2tJZkFjdGl2ZSh0aGlzKTsKLSAgICAJfQorICAgICAgICBpZiAoaXNDbG9zZWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJDb25uZWN0aW9uIGNsb3NlZCIpOworICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiSW52YWxpZCBDb25uZWN0aW9uIik7CisgICAgICAgIGlmKGFjdGl2ZSA9PSBmYWxzZSkgeworICAgICAgICAgICAgbWMuY2hlY2tJZkFjdGl2ZSh0aGlzKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGFjdGl2ZSBmbGFnIHRvIHRydWUKICAgICAgKgotICAgICAqIEBwYXJhbQlhY3R2CWJvb2xlYW4KKyAgICAgKiBAcGFyYW0gICAgYWN0diAgICBib29sZWFuCiAgICAgICovCiAgICAgdm9pZCBzZXRBY3RpdmUoYm9vbGVhbiBhY3R2KSB7CiAgICAgICAgIGFjdGl2ZSA9IGFjdHY7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IGFjN2U3NDguLmYwNjc1YTQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0zMywxOSArMzMsMTkgQEAKICAqIFRoaXMgY2xhc3MgaXMgZXh0ZW5kZWQgYnkgdGhlIERhdGFTb3VyY2Ugc3BlY2lmaWMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZhY3RvcmllcwogICogYW5kIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGZvciB0aGUgPGNvZGU+RHJpdmVyTWFuYWdlcjwvY29kZT4uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIAotcHVibGljIGFic3RyYWN0IGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSwgCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LAogICAgIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKLSAgICAKKwogICAgIHByb3RlY3RlZCBEYXRhU291cmNlU3BlYyBzcGVjID0gbmV3IERhdGFTb3VyY2VTcGVjKCk7CiAgICAgcHJvdGVjdGVkIHRyYW5zaWVudCBEYXRhU291cmNlT2JqZWN0QnVpbGRlciBkc09iakJ1aWxkZXI7Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgamF2YS5pby5QcmludFdyaXRlciBsb2dXcml0ZXIgPSBudWxsOwogICAgIHByb3RlY3RlZCBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgcmEgPSBudWxsOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTU0LDggKzU0LDggQEAKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgQ29ubmVjdGlvbiBGYWN0b3J5IGluc3RhbmNlLiBUaGUgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uCiAgICAgICogb2YgdGhlIHJlc291cmNlIGFkYXB0ZXIgaXMgdXNlZCBoZXJlLgotICAgICAqIAotICAgICAqIEByZXR1cm4JR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGNyZWF0ZUNvbm5lY3Rpb25GYWN0b3J5KCkgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtNjMsMTYgKzYzLDE2IEBACiAgICAgICAgIH0KICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UgY2YgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UoCiAgICAgICAgICAgICAoamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KXRoaXMsIG51bGwpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIENvbm5lY3Rpb24gRmFjdG9yeSBpbnN0YW5jZS4gVGhlIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbgogICAgICAqIG9mIHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIgaXMgdXNlZCBoZXJlLgotICAgICAqIAotICAgICAqIEBwYXJhbQljeE1hbmFnZXIJPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHJldHVybglHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgorICAgICAqCisgICAgICogQHBhcmFtICAgIGN4TWFuYWdlciAgICA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcmV0dXJuICAgIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjcmVhdGVDb25uZWN0aW9uRmFjdG9yeShqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlciBjeE1hbmFnZXIpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTgwLDU1ICs4MCw1NSBAQAogICAgICAgICB9CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIGNmID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlKAogICAgICAgICAgICAgKGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSl0aGlzLCBjeE1hbmFnZXIpOwotICAgICAgICByZXR1cm4gY2Y7IAorICAgICAgICByZXR1cm4gY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIEVJUyByZXNvdXJjZQogICAgICAqIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCi0gICAgICogICAgICAgCSAgICAgICAgICAgICAJYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+Ci0gICAgICogICAgICAgCSAgICAgICAgICAgICAJb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQotICAgICAqICAgICAgIAkJCQljcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0Ci0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdCAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwKICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIC8qKgotICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0byAKKyAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8KICAgICAgKiBhbm90aGVyIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCW90aGVyCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCi0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQotICAgICAqCQlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBvdGhlciAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZQorICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQorICAgICAqICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgamF2YS5pby5QcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB7CiAgICAgICAgIHJldHVybiBsb2dXcml0ZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+c2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciBnZXRSZXNvdXJjZUFkYXB0ZXIoKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xMzYsMTEgKzEzNiwxMSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByYTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBoYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTQ4LDQxICsxNDgsNDEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc3BlYy5oYXNoQ29kZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgYSBtYXRjaGVkIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmcm9tIHRoZSBjYW5kaWRhdGUgCisgICAgICogUmV0dXJucyBhIG1hdGNoZWQgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZyb20gdGhlIGNhbmRpZGF0ZQogICAgICAqIHNldCBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0cy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29ubmVjdGlvblNldAk8Y29kZT5TZXQ8L2NvZGU+IG9mICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKgkJCQlvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCXN1YmplY3QJIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICoJCQlmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICoJCQkJZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCBpcyB0aGUgYmVzdCBtYXRjaCBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgYWNjZXNzaW5nIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPgotICAgICAqCQkJCQlwYXJhbWV0ZXIgb3IgdGhlIDxjb2RlPlNldDwvY29kZT4gb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICoJCQkJCW9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb25uZWN0aW9uU2V0ICAgIDxjb2RlPlNldDwvY29kZT4gb2YgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgIG9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICAgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiAgICAgICAgICAgIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZworICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiAgICAgICAgICAgICAgICBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IGlzIHRoZSBiZXN0IG1hdGNoIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBhY2Nlc3NpbmcgdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBvciB0aGUgPGNvZGU+U2V0PC9jb2RlPiBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgogICAgICAqLwotICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhqYXZhLnV0aWwuU2V0IGNvbm5lY3Rpb25TZXQsIAorICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhqYXZhLnV0aWwuU2V0IGNvbm5lY3Rpb25TZXQsCiAgICAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdCBzdWJqZWN0LCBDb25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbm5lY3Rpb25TZXQgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcywgc3ViamVjdCwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgIAorCiAgICAgICAgIGphdmEudXRpbC5JdGVyYXRvciBpdGVyID0gY29ubmVjdGlvblNldC5pdGVyYXRvcigpOwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBudWxsOwogICAgICAgICB3aGlsZShpdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtYyA9IChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24pIGl0ZXIubmV4dCgpOwogICAgICAgICAgICAgfSBjYXRjaChqYXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBuc2VlKSB7Ci0JICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pdGVyIik7CisgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pdGVyIik7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKG5zZWUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmKHBjID09IG51bGwgJiYgdGhpcy5lcXVhbHMobWMuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkpKSB7CkBAIC0xOTEsNyArMTkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZChtYyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYzsKICAgICAgICAgICAgICAgICB9IGNhdGNoKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7Ci0JICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfcmUiLCByZSk7CisgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfcmUiLCByZSk7CiAgICAgICAgICAgICAgICAgICAgIG1jLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKHJlLCBudWxsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYoU2VjdXJpdHlVdGlscy5pc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKHBjLCBtYy5nZXRQYXNzd29yZENyZWRlbnRpYWwoKSkgPT0gdHJ1ZSkgewpAQCAtMjAwLDQ1ICsyMDAsNDUgQEAKICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZChtYyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYzsKICAgICAgICAgICAgICAgICB9IGNhdGNoKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7Ci0JICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5yZSIpOworICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMucmUiKTsKICAgICAgICAgICAgICAgICAgICAgbWMuY29ubmVjdGlvbkVycm9yT2NjdXJyZWQocmUsIG51bGwpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvL0dKQ0lOVAogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyB0byBiZSB2YWxpZGF0ZWQgb3Igbm90CiAgICAgICogYW5kIHZhbGlkYXRlcyBpdCBvciByZXR1cm5zLgotICAgICAqIAotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAJCWlmIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIKICAgICAgKi8KICAgICB2b2lkIGlzVmFsaWQoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogCiAgICAgICAgIGlmKG1jLmlzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpIHsKLQkgICAgcmV0dXJuOworICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAKLSAgICAgICAgYm9vbGVhbiBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID0gCisKKyAgICAgICAgYm9vbGVhbiBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID0KICAgICAgICAgICAgIChuZXcgQm9vbGVhbihzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKS50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7CiAgICAgICAgIGlmKCBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID09IGZhbHNlIHx8IG1jID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIG1jLmNoZWNrSWZWYWxpZCgpOwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGFib3ZlIGNhbGwgY2hlY2tzIGlmIHRoZSBhY3R1YWwgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAgICAgKiBpcyB1c2FibGUgb3Igbm90LgogICAgICAgICAgKi8KICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKHZhbGlkYXRpb25NZXRob2QuZXF1YWxzKCJhdXRvLWNvbW1pdCIpID09IHRydWUpIHsKICAgICAgICAgICAgIGlzVmFsaWRCeUF1dG9Db21taXQoY29uKTsKICAgICAgICAgfSBlbHNlIGlmKHZhbGlkYXRpb25NZXRob2QuZXF1YWxzSWdub3JlQ2FzZSgibWV0YS1kYXRhIikgPT0gdHJ1ZSkgewpAQCAtMjQ5LDI4ICsyNDksMjggQEAKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIiKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IGNoZWNraW5nIGl0cyBhdXRvIGNvbW1pdCBwcm9wZXJ0eS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5QXV0b0NvbW1pdChqYXZhLnNxbC5Db25uZWN0aW9uIGNvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgLy8gTm90aWNlIHRoYXQgdXNpbmcgc29tZXRoaW5nIGxpa2UgCisgICAgICAgICAgIC8vIE5vdGljZSB0aGF0IHVzaW5nIHNvbWV0aGluZyBsaWtlCiAgICAgICAgICAgIC8vIGRiQ29uLnNldEF1dG9Db21taXQoZGJDb24uZ2V0QXV0b0NvbW1pdCgpKSB3aWxsIGNhdXNlIHByb2JsZW1zIHdpdGgKICAgICAgICAgICAgLy8gc29tZSBkcml2ZXJzIGxpa2Ugc3liYXNlCi0gICAgICAgICAgIC8vIFdlIGRvIG5vdCB2YWxpZGF0ZSBjb25uZWN0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IGVubGlzdGVkIAotCSAgIC8vaW4gYSB0cmFuc2FjdGlvbiAKLQkgICAvLyBXZSBjeWNsZSBhdXRvY29tbWl0IHRvIHRydWUgYW5kIGZhbHNlIHRvIGJ5LXBhc3MgZHJpdmVycyB0aGF0IAotCSAgIC8vIG1pZ2h0IGNhY2hlIHRoZSBjYWxsIHRvIHNldCBhdXRvY29taXR0CisgICAgICAgICAgIC8vIFdlIGRvIG5vdCB2YWxpZGF0ZSBjb25uZWN0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IGVubGlzdGVkCisgICAgICAgLy9pbiBhIHRyYW5zYWN0aW9uCisgICAgICAgLy8gV2UgY3ljbGUgYXV0b2NvbW1pdCB0byB0cnVlIGFuZCBmYWxzZSB0byBieS1wYXNzIGRyaXZlcnMgdGhhdAorICAgICAgIC8vIG1pZ2h0IGNhY2hlIHRoZSBjYWxsIHRvIHNldCBhdXRvY29taXR0CiAgICAgICAgICAgIC8vIEFsc28gbm90aWNlIHRoYXQgc29tZSBYQSBkYXRhIHNvdXJjZXMgd2lsbCB0aHJvdyBhbmQgZXhjZXB0aW9uIGlmCiAgICAgICAgICAgIC8vIHlvdSB0cnkgdG8gY2FsbCBzZXRBdXRvQ29tbWl0LCBmb3IgdGhlbSB0aGlzIG1ldGhvZCBpcyBub3QgcmVjb21tZW5kZWQKIApAQCAtMjgxLDkwICsyODEsOTAgQEAKICAgICAgICAgICAgICAgICBjb24ucm9sbGJhY2soKTsgLy8gcHJldmVudHMgdW5jb21wbGV0ZWQgdHJhbnNhY3Rpb24gZXhjZXB0aW9ucwogICAgICAgICAgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KHRydWUpOwogICAgICAgICAgICB9Ci0gICAgICAgIAotCSAgIGNvbi5zZXRBdXRvQ29tbWl0KGFjKTsKKworICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGFjKTsKIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2F1dG9jb21taXQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYXV0b2NvbW1pdCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IGNoZWNraW5nIGl0cyBtZXRhIGRhdGEuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeU1ldGFEYXRhKGphdmEuc3FsLkNvbm5lY3Rpb24gY29uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgamF2YS5zcWwuRGF0YWJhc2VNZXRhRGF0YSBkbWQgPSBjb24uZ2V0TWV0YURhdGEoKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgImdldHRpbmcgdGhlIG1ldGEgZGF0YSBmYWlsZWQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBxdWVyeWluZyBhIHRhYmxlLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHBhcmFtCXRhYmxlTmFtZQl0YWJsZSB3aGljaCBzaG91bGQgYmUgcXVlcmllZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEBwYXJhbSAgICB0YWJsZU5hbWUgICAgdGFibGUgd2hpY2ggc2hvdWxkIGJlIHF1ZXJpZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeVRhYmxlUXVlcnkoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24sIAorICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeVRhYmxlUXVlcnkoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24sCiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBqYXZhLnNxbC5TdGF0ZW1lbnQgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIGphdmEuc3FsLlJlc3VsdFNldCBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NICIgKyB0YWJsZU5hbWUpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2V4ZWN1dGUiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZXhlY3V0ZSIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInF1ZXJ5aW5nIHRoZSB0YWJsZSAiICsgdGFibGVOYW1lICsgIiBmYWlsZWQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBpc29sYXRpb24gbGV2ZWwgc3BlY2lmaWVkIGluIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CiAgICAgICogZm9yIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gcGFzc2VkLgogICAgICAqCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCi0gICAgICoJCQkJCW9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCisgICAgICogICAgICAgICAgICAgICAgICAgIG9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgc2V0SXNvbGF0aW9uKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJCi0gICAgCWphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgIAlpZihjb24gPT0gbnVsbCkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCQotICAgIAlTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKLSAgICAJaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKLSAgICAJICAgIHRyeSB7Ci0gICAgCSAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOwotICAgIAkgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gY291bGQgIgotICAgIAkgICAgICAgICAgICArICJub3QgYmUgc2V0OiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgfQotICAgIAl9CisKKyAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7CisgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKKyAgICAgICAgaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOworICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gY291bGQgIgorICAgICAgICAgICAgICAgICAgICArICJub3QgYmUgc2V0OiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVzZXRzIHRoZSBpc29sYXRpb24gbGV2ZWwgZm9yIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gcGFzc2VkLgogICAgICAqIElmIHRoZSB0cmFuc2FjdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmUKQEAgLTM3MywzODIgKzM3MywzODIgQEAKICAgICAgKiBpc29sYXRpb24gbGV2ZWwgZnJvbSB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQuIEVsc2UsCiAgICAgICogaXQgc2V0cyBpdCB0byB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIHBhc3NlZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAcGFyYW0JdHJhbklzb2wJaW50Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKLSAgICAgKgkJCQkJb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRyYW5Jc29sICAgIGludAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCisgICAgICogICAgICAgICAgICAgICAgICAgIG9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCiAgICAgICovCiAgICAgdm9pZCByZXNldElzb2xhdGlvbihjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMsIGludCB0cmFuSXNvbCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJCi0gICAgCWphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgIAlpZihjb24gPT0gbnVsbCkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCQotICAgIAlTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKLSAgICAJaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwotICAgIAkgICAgCi0gICAgCSAgICBpZihndWFyYW50ZWVJc29sYXRpb25MZXZlbCAhPSBudWxsICYmIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgICAgICBib29sZWFuIGd1YXJhbnRlZSA9IChuZXcgQm9vbGVhbihndWFyYW50ZWVJc29sYXRpb25MZXZlbC50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgCSAgICAgICAgCi0gICAgCSAgICAgICAgaWYoZ3VhcmFudGVlKSB7Ci0gICAgCSAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7Ci0gICAgCSAgICAgICAgICAgIHRyeSB7Ci0gICAgCSAgICAgICAgICAgICAgICBpZih0cmFuSXNvbGF0aW9uSW50ICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOwotICAgIAkgICAgICAgICAgICAgICAgfQotICAgIAkgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgotICAgIAkgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgfSBlbHNlIHsKLSAgICAJICAgICAgICAgICAgdHJ5IHsKLSAgICAJICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sKTsKLSAgICAJICAgICAgICAgICAgICAgIH0KLSAgICAJICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKLSAgICAJICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgICAgICAgICAgfQotICAgIAkgICAgICAgIH0KLSAgICAJICAgIH0KLSAgICAJfQorCisgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOworICAgICAgICBpZihjb24gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIFN0cmluZyBndWFyYW50ZWVJc29sYXRpb25MZXZlbCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKKworICAgICAgICAgICAgaWYoZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgIT0gbnVsbCAmJiBndWFyYW50ZWVJc29sYXRpb25MZXZlbC5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBndWFyYW50ZWUgPSAobmV3IEJvb2xlYW4oZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOworCisgICAgICAgICAgICAgICAgaWYoZ3VhcmFudGVlKSB7CisgICAgICAgICAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0cmFuSXNvbGF0aW9uSW50ICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CisgICAgICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGludGVnZXIgZXF1aXZhbGVudCBvZiB0aGUgc3RyaW5nIHNwZWNpZnlpbmcKICAgICAgKiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXRyYW5Jc29sYXRpb24Jc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbiBsZXZlbAotICAgICAqIEByZXR1cm4JdHJhbklzb2xhdGlvbkludAl0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gY29uc3RhbnQKLSAgICAgKgkJCQkJZm9yIHRoZSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uLgorICAgICAqIEBwYXJhbSAgICB0cmFuSXNvbGF0aW9uICAgIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5Jc29sYXRpb25JbnQgICAgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGNvbnN0YW50CisgICAgICogICAgICAgICAgICAgICAgICAgIGZvciB0aGUgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbi4KICAgICAgKi8KICAgICBwcml2YXRlIGludCBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludChTdHJpbmcgdHJhbklzb2xhdGlvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLXVuY29tbWl0dGVkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfVU5DT01NSVRURUQ7Ci0gICAgCX0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtY29tbWl0dGVkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfQ09NTUlUVEVEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZXBlYXRhYmxlLXJlYWQiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVQRUFUQUJMRV9SRUFEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJzZXJpYWxpemFibGUiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fU0VSSUFMSVpBQkxFOwotICAgIAl9IGVsc2UgewotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJJbnZhbGlkIHRyYW5zYWN0aW9uIGlzb2xhdGlvbjsgdGhlIHRyYW5zYWN0aW9uICIKLSAgICAJICAgICAgICArICJpc29sYXRpb24gbGV2ZWwgY2FuIGJlIGVtcHR5IG9yIGFueSBvZiB0aGUgZm9sbG93aW5nOiAiCi0gICAgCSAgICAgICAgICAgICsgInJlYWQtdW5jb21taXR0ZWQsIHJlYWQtY29tbWl0dGVkLCByZXBlYXRhYmxlLXJlYWQsIHNlcmlhbGl6YWJsZSIpOwotICAgIAl9CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC11bmNvbW1pdHRlZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX1VOQ09NTUlUVEVEOworICAgICAgICB9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLWNvbW1pdHRlZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX0NPTU1JVFRFRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVwZWF0YWJsZS1yZWFkIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFUEVBVEFCTEVfUkVBRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgic2VyaWFsaXphYmxlIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1NFUklBTElaQUJMRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiSW52YWxpZCB0cmFuc2FjdGlvbiBpc29sYXRpb247IHRoZSB0cmFuc2FjdGlvbiAiCisgICAgICAgICAgICAgICAgKyAiaXNvbGF0aW9uIGxldmVsIGNhbiBiZSBlbXB0eSBvciBhbnkgb2YgdGhlIGZvbGxvd2luZzogIgorICAgICAgICAgICAgICAgICAgICArICJyZWFkLXVuY29tbWl0dGVkLCByZWFkLWNvbW1pdHRlZCwgcmVwZWF0YWJsZS1yZWFkLCBzZXJpYWxpemFibGUiKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCW91dAk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgb3V0ICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihqYXZhLmlvLlByaW50V3JpdGVyIG91dCkgewogICAgICAgICBsb2dXcml0ZXIgPSBvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBhc3NvY2lhdGVkIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gSmF2YUJlYW4uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmEJPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPmdldFJlc291cmNlQWRhcHRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcmEgICAgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlc291cmNlQWRhcHRlcihqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgcmEpIHsKLSAgICAgICAgdGhpcy5yYSA9IHJhOyAgIAorICAgICAgICB0aGlzLnJhID0gcmE7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHVzZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFVzZXIoU3RyaW5nIHVzZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUsIHVzZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHJldHVybgl1c2VyCisgICAgICogQHJldHVybiAgICB1c2VyCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR1c2VyKFN0cmluZyB1c2VyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FLCB1c2VyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEByZXR1cm4JdXNlcgorICAgICAqIEByZXR1cm4gICAgdXNlcgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dXNlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHBhcmFtCXBhc3N3ZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBhc3N3ZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UGFzc3dvcmQoU3RyaW5nIHBhc3N3ZCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCwgcGFzc3dkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHJldHVybglwYXNzd2QKKyAgICAgKiBAcmV0dXJuICAgIHBhc3N3ZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFzc3dvcmQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEBwYXJhbQlwYXNzd2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwYXNzd2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHBhc3N3b3JkKFN0cmluZyBwYXNzd2QpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQsIHBhc3N3ZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEByZXR1cm4JcGFzc3dkCisgICAgICogQHJldHVybiAgICBwYXNzd2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2xhc3NOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY2xhc3NOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDbGFzc05hbWUoU3RyaW5nIGNsYXNzTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUsIGNsYXNzTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEByZXR1cm4JY2xhc3NOYW1lCisgICAgICogQHJldHVybiAgICBjbGFzc05hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENsYXNzTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEBwYXJhbQljbGFzc05hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjbGFzc05hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGNsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSwgY2xhc3NOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHJldHVybgljbGFzc05hbWUKKyAgICAgKiBAcmV0dXJuICAgIGNsYXNzTmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Y2xhc3NOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEBwYXJhbQljb25WbGRSZXEJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjb25WbGRSZXEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoU3RyaW5nIGNvblZsZFJlcSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVELCBjb25WbGRSZXEpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHJldHVybgljb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHBhcmFtCWNvblZsZFJlcQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNvblZsZFJlcSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Y29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZChTdHJpbmcgY29uVmxkUmVxKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQsIGNvblZsZFJlcSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdmFsaWRhdGlvbiBtZXRob2QgcmVxdWlyZWQKICAgICAgKgotICAgICAqIEBwYXJhbQl2YWxpZGF0aW9uTWV0aG9kCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdmFsaWRhdGlvbk1ldGhvZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VmFsaWRhdGlvbk1ldGhvZChTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCkgewogICAgICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCwgdmFsaWRhdGlvbk1ldGhvZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgY29ubmVjdGlvbiB2YWxpZGF0aW9uIG1ldGhvZCB0eXBlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXZhbGlkYXRpb24gbWV0aG9kCisgICAgICogQHJldHVybiAgICB2YWxpZGF0aW9uIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsaWRhdGlvbk1ldGhvZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHZhbGlkYXRpb24gbWV0aG9kIHJlcXVpcmVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsaWRhdGlvbk1ldGhvZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHZhbGlkYXRpb25NZXRob2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHZhbGlkYXRpb25NZXRob2QoU3RyaW5nIHZhbGlkYXRpb25NZXRob2QpIHsKICAgICAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QsIHZhbGlkYXRpb25NZXRob2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBtZXRob2QgdHlwZQogICAgICAqCi0gICAgICogQHJldHVybgl2YWxpZGF0aW9uIG1ldGhvZAorICAgICAqIEByZXR1cm4gICAgdmFsaWRhdGlvbiBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHZhbGlkYXRpb25NZXRob2QoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCXRhYmxlCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdGFibGUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25UYWJsZU5hbWUoU3RyaW5nIHRhYmxlKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUsIHRhYmxlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgl0YWJsZQorICAgICAqIEByZXR1cm4gICAgdGFibGUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbGlkYXRpb25UYWJsZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCXRhYmxlCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdGFibGUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHZhbGlkYXRpb25UYWJsZU5hbWUoU3RyaW5nIHRhYmxlKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUsIHRhYmxlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgl0YWJsZQorICAgICAqIEByZXR1cm4gICAgdGFibGUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHZhbGlkYXRpb25UYWJsZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEBwYXJhbQl0cm5Jc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cm5Jc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKFN0cmluZyB0cm5Jc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04sIHRybklzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEBwYXJhbQl0cm5Jc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cm5Jc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHRyYW5zYWN0aW9uSXNvbGF0aW9uKFN0cmluZyB0cm5Jc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04sIHRybklzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR0cmFuc2FjdGlvbklzb2xhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZAogICAgICAqCi0gICAgICogQHBhcmFtCWd1YXJhbnRlZUlzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGd1YXJhbnRlZUlzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCwgZ3VhcmFudGVlSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQorICAgICAqIEByZXR1cm4gICAgaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQKICAgICAgKgotICAgICAqIEBwYXJhbQlndWFyYW50ZWVJc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBndWFyYW50ZWVJc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKFN0cmluZyBndWFyYW50ZWVJc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwsIGd1YXJhbnRlZUlzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKKyAgICAgKiBAcmV0dXJuICAgIGlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQppbmRleCAwMWRjZmYwLi5iYjEyYjQ4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQpAQCAtMjQsOCArMjQsOCBAQAogLyoqCiAgKiA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDUKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzA1CisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBAQ29ubmVjdG9yKAogICAgICAgICBkZXNjcmlwdGlvbiA9ICJSZXNvdXJjZSBhZGFwdGVyIHdyYXBwaW5nIERhdGFzb3VyY2UgaW1wbGVtZW50YXRpb24gb2YgZHJpdmVyIiwKQEAgLTQ5LDUyICs0OSw1MiBAQAogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZW5kcG9pbnRBY3RpdmF0aW9uCiAgICAgICogd2hpY2gganVzdCB0aHJvd3MgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCW1lZgk8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlhcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWVmICAgIDxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGFzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVuZHBvaW50QWN0aXZhdGlvbihNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IG1lZiwgQWN0aXZhdGlvblNwZWMgYXMpIHRocm93cyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJUaGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIEpEQkMgY29ubmVjdG9yIik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBlbmRwb2ludERlYWN0aXZhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCW1lZgk8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlhcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWVmICAgIDxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGFzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVuZHBvaW50RGVhY3RpdmF0aW9uKE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgbWVmLCBBY3RpdmF0aW9uU3BlYyBhcykgewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZ2V0WEFSZXNvdXJjZXMKICAgICAgKiB3aGljaCBqdXN0IHRocm93cyA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3BlY3MJPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+IGFycmF5Ci0gICAgICogQHRocm93cwk8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNwZWNzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPiBhcnJheQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykgdGhyb3dzIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIlRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgSkRCQyBjb25uZWN0b3IiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBzdGFydCBtZXRob2QKICAgICAgKgotICAgICAqIEBwYXJhbQljdHgJPGNvZGU+Qm9vdHN0cmFwQ29udGV4dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY3R4ICAgIDxjb2RlPkJvb3RzdHJhcENvbnRleHQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RhcnQoQm9vdHN0cmFwQ29udGV4dCBjdHgpIHRocm93cyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzb3VyY2UgQWRhcHRlciBpcyBzdGFydGluZyB3aXRoIGNvbmZpZ3VyYXRpb24gOiIgKyByYVByb3ApOwogICAgICAgICBpZiAocmFQcm9wID09IG51bGwgfHwgIXJhUHJvcC5lcXVhbHMoIlZBTElEIikpIHsKLQkgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJSZXNvdXJjZSBhZGFwdGVyIGNhbm5vdCBzdGFydC4gSXQgaXMgY29uZmlndXJlZCBhcyA6ICIgKyByYVByb3ApOwotCX0gCisgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiUmVzb3VyY2UgYWRhcHRlciBjYW5ub3Qgc3RhcnQuIEl0IGlzIGNvbmZpZ3VyZWQgYXMgOiAiICsgcmFQcm9wKTsKICAgICB9Ci0gICAgCisgICAgfQorCiAgICAgLyoqCiAgICAgICogRW1wdHkgaW1wbGVtZW50YXRpb24gb2Ygc3RvcCBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdG9wKCkgewotICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0UkFQcm9wZXJ0eShTdHJpbmcgcykgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCmluZGV4IDVlMTRkNDQuLmZmMGYwMmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9IiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvc3BpIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTI5LDU1ICsyOSw1NSBAQAogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxNCI+Ci0gICAgCQotICAgIAk8bWtkaXIgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiLz4KLSAgICAJCi0JPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiIGJhc2VkaXI9IiR7Y2xhc3MuZGlyfSIKKworICAgICAgICA8bWtkaXIgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiLz4KKworICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCiAgICAgICAgIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosIGNvbS9zdW4vZ2pjL3V0aWwvKiovKiwgY29tL3N1bi9namMvY29tbW9uLyoqLyoiIGV4Y2x1ZGVzPSJjb20vc3VuL2dqYy9jY2kvKiovKixjb20vc3VuL2dqYy9zcGkvMS40LyoqLyoiLz4KLSAgICAgICAgCisKICAgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWNwLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1jcC54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEteGEueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS14YS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZG0ueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kbS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZHMueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kcy54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8ZGVsZXRlIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9jb20iLz4KLSAgIAk8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIvPgotICAgCTxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIvPgotICAgCQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8ZGVsZXRlIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9jb20iLz4KKyAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIvPgorICAgICAgIDxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIvPgorCiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTMiLz4KLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDE0LCBidWlsZDEzIi8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxNCwgYnVpbGQxMyIvPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sCmluZGV4IDM5YTUzMjUuLmQxMjZmYWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgICAgPG91dGJvdW5kLXJlc291cmNlYWRhcHRlcj4KICAgICAgICAgICAgIDxjb25uZWN0aW9uLWRlZmluaXRpb24+CiAgICAgICAgICAgICAgICAgPG1hbmFnZWRjb25uZWN0aW9uZmFjdG9yeS1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L21hbmFnZWRjb25uZWN0aW9uZmFjdG9yeS1jbGFzcz4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgdGhlc2UgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+CiAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlVzZXI8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZGJwYXNzd29yZDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5VUkw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+amRiYzpkZXJieTovL2xvY2FsaG9zdDoxNTI3L3Rlc3RkYjtjcmVhdGU9dHJ1ZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgpAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+T3JhY2xlIHRoaW4gZHJpdmVyIERhdGFzb3VyY2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNsYXNzTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5vcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RGF0YVNvdXJjZTQwPC9jb25maWctcHJvcGVydHktdmFsdWU+CkBAIC03Miw3ICs3Miw3IEBACiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb24taW50ZXJmYWNlPmphdmEuc3FsLkNvbm5lY3Rpb248L2Nvbm5lY3Rpb24taW50ZXJmYWNlPgogCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb24taW1wbC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcjwvY29ubmVjdGlvbi1pbXBsLWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8L2Nvbm5lY3Rpb24tZGVmaW5pdGlvbj4KIAogICAgICAgICAgICAgPHRyYW5zYWN0aW9uLXN1cHBvcnQ+TG9jYWxUcmFuc2FjdGlvbjwvdHJhbnNhY3Rpb24tc3VwcG9ydD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQppbmRleCBiMjE5Y2QyLi4xMjQ4MDljIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCkBAIC0yNCwyNiArMjQsMjYgQEAKIC8qKgogICogQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMQotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzEKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0aW9uTWFuYWdlciBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyeyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uTWFuYWdlciBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyewogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhIDxjb2RlPkNvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QgdG8gdGhlIDxjb2RlPkNvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0JaW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcmV0dXJuCUEgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvciBpbiBnZXR0aW5nIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gICAgbWNmICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBpbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgQSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBPYmplY3QuCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yIGluIGdldHRpbmcgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+LgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgYWxsb2NhdGVDb25uZWN0aW9uKE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsCi0gICAgCQkJCSAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8pIAotICAgIAkJCQkgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0JTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBtY2YuY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgaW5mbyk7Ci0JcmV0dXJuIG1jLmdldENvbm5lY3Rpb24obnVsbCwgaW5mbyk7ICAgIAkJCQkgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKQorICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CisgICAgTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBtY2YuY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgaW5mbyk7CisgICAgcmV0dXJuIG1jLmdldENvbm5lY3Rpb24obnVsbCwgaW5mbyk7CiAgICAgfQotICAgIAorCiAgICAgLyoKICAgICAgKiBUaGlzIGNsYXNzIGNvdWxkIGVmZmVjdGl2ZWx5IGltcGxlbWVudCBDb25uZWN0aW9uIHBvb2xpbmcgYWxzby4KICAgICAgKiBDb3VsZCBiZSBkb25lIGZvciBGQ1MuCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQppbmRleCAzOWM3ODc2Li5jNDc3ZmMyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEKQEAgLTE5LDEwICsxOSwxMCBAQAogLyoqCiAgKiBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMQotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzEKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm97IAorcHVibGljIGNsYXNzIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mb3sKIAogICAgIHByaXZhdGUgU3RyaW5nIHVzZXI7CiAgICAgcHJpdmF0ZSBTdHJpbmcgcGFzc3dvcmQ7CkBAIC0zMCw4ICszMCw4IEBACiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0cyBhIG5ldyA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdAogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJVXNlciBOYW1lLgotICAgICAqIEBwYXJhbQlwYXNzd29yZAlQYXNzd29yZAorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIFVzZXIgTmFtZS4KKyAgICAgKiBAcGFyYW0gICAgcGFzc3dvcmQgICAgUGFzc3dvcmQKICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvblJlcXVlc3RJbmZvKFN0cmluZyB1c2VyLCBTdHJpbmcgcGFzc3dvcmQpIHsKICAgICAgICAgdGhpcy51c2VyID0gdXNlcjsKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgbmFtZSBvZiB0aGUgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqCi0gICAgICogQHJldHVybglVc2VyIG5hbWUgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgorICAgICAqIEByZXR1cm4gICAgVXNlciBuYW1lIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXIoKSB7CiAgICAgICAgIHJldHVybiB1c2VyOwpAQCAtNTAsNyArNTAsNyBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgcGFzc3dvcmQgb2YgdGhlIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKgotICAgICAqIEByZXR1cm4JUGFzc3dvcmQgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgorICAgICAqIEByZXR1cm4gICAgUGFzc3dvcmQgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFzc3dvcmQoKSB7CiAgICAgICAgIHJldHVybiBwYXNzd29yZDsKQEAgLTU5LDcgKzU5LDcgQEAKICAgICAvKioKICAgICAgKiBWZXJpZnkgd2hldGhlciB0d28gQ29ubmVjdGlvblJlcXVlc3RJbmZvcyBhcmUgZXF1YWwuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVRydWUsIGlmIHRoZXkgYXJlIGVxdWFsIGFuZCBmYWxzZSBvdGhlcndpc2UuCisgICAgICogQHJldHVybiAgICBUcnVlLCBpZiB0aGV5IGFyZSBlcXVhbCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7CiAgICAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwpAQCAtNzUsMTggKzc1LDE4IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBoYXNoY29kZSBvZiB0aGUgb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybgloYXNoQ29kZS4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2hDb2RlLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CiAgICAgICAgIFN0cmluZyByZXN1bHQgPSAiIiArIHVzZXIgKyBwYXNzd29yZDsKICAgICAgICAgcmV0dXJuIHJlc3VsdC5oYXNoQ29kZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbXBhcmVzIHR3byBvYmplY3RzLgogICAgICAqCi0gICAgICogQHBhcmFtCW8xCUZpcnN0IG9iamVjdC4KLSAgICAgKiBAcGFyYW0JbzIJU2Vjb25kIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgbzEgICAgRmlyc3Qgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvMiAgICBTZWNvbmQgb2JqZWN0LgogICAgICAqLwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKE9iamVjdCBvMSwgT2JqZWN0IG8yKSB7CiAgICAgICAgIGlmIChvMSA9PSBudWxsKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKaW5kZXggYjRhNjMxNi4uYzhhYWY3NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtMzEsOCArMzEsOCBAQAogLyoqCiAgKiBEYXRhIFNvdXJjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzAKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMwCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiAKIEBDb25uZWN0aW9uRGVmaW5pdGlvbigKQEAgLTQyLDMxICs0MiwzMSBAQAogICAgICAgICBjb25uZWN0aW9uRmFjdG9yeUltcGwgPSBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZS5jbGFzcwogKQogcHVibGljIGNsYXNzIERTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGV4dGVuZHMgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHsKLSAgIAorCiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgamF2YXguc3FsLkRhdGFTb3VyY2UgZGF0YVNvdXJjZU9iajsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CiAgICAgfQogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIEVJUyByZXNvdXJjZQogICAgICAqIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCi0gICAgICogICAgICAgCSAgICAgICAgICAgICAJYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+Ci0gICAgICogICAgICAgCSAgICAgICAgICAgICAJb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQotICAgICAqICAgICAgIAkJCQljcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0Ci0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdCAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwKICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uIik7CiAgICAgICAgIH0KICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcywgc3ViamVjdCwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGRhdGFTb3VyY2VPYmogPT0gbnVsbCkgewogICAgICAgICAgICAgaWYoZHNPYmpCdWlsZGVyID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBkc09iakJ1aWxkZXIgPSBuZXcgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIoc3BlYyk7CkBAIC04NCwzNiArODQsMzYgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZU9iaiA9IChqYXZheC5zcWwuRGF0YVNvdXJjZSkgZHNPYmpCdWlsZGVyLmNvbnN0cnVjdERhdGFTb3VyY2VPYmplY3QoKTsKICAgICAgICAgICAgIH0gY2F0Y2goQ2xhc3NDYXN0RXhjZXB0aW9uIGNjZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY2NlIiwgY2NlKTsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NjZSIsIGNjZSk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2UuUmVzb3VyY2VFeGNlcHRpb24oY2NlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkc0Nvbm4gPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewotCSAgICAvKiBGb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIvcGFzc3dkIG9mIHRoZSBjb25uZWN0aW9uIHBvb2wgaXMKLQkgICAgICogZXF1YWwgdG8gdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdAotCSAgICAgKiBnZXQgYSBjb25uZWN0aW9uIGZyb20gdGhpcyBwb29sIGRpcmVjdGx5LgotCSAgICAgKiBmb3IgYWxsIG90aGVyIGNvbmRpdGlvbnMgZ28gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24KLQkgICAgICovCi0JICAgIGlmICggaXNFcXVhbCggcGMsIGdldFVzZXIoKSwgZ2V0UGFzc3dvcmQoKSApICkgewotCSAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24ocGMuZ2V0VXNlck5hbWUoKSwgCi0JCSAgICBuZXcgU3RyaW5nKHBjLmdldFBhc3N3b3JkKCkpKTsKLQkgICAgfQorICAgICAgICAvKiBGb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIvcGFzc3dkIG9mIHRoZSBjb25uZWN0aW9uIHBvb2wgaXMKKyAgICAgICAgICogZXF1YWwgdG8gdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdAorICAgICAgICAgKiBnZXQgYSBjb25uZWN0aW9uIGZyb20gdGhpcyBwb29sIGRpcmVjdGx5LgorICAgICAgICAgKiBmb3IgYWxsIG90aGVyIGNvbmRpdGlvbnMgZ28gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24KKyAgICAgICAgICovCisgICAgICAgIGlmICggaXNFcXVhbCggcGMsIGdldFVzZXIoKSwgZ2V0UGFzc3dvcmQoKSApICkgeworICAgICAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24ocGMuZ2V0VXNlck5hbWUoKSwKKyAgICAgICAgICAgIG5ldyBTdHJpbmcocGMuZ2V0UGFzc3dvcmQoKSkpOworICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKICAgICAgICAgICAgIHNxbGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19jcmVhdGVfY29ubiIsIHNxbGUpOwotICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGFsbG9jYXRlZDogIiArIAorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfY3JlYXRlX2Nvbm4iLCBzcWxlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQ6ICIgKwogICAgICAgICAgICAgICAgIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlYzLVRFU1QgOiB1bmFibGUgdG8gZ2V0IGNvbm5lY3Rpb24iKTsKLSAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVjMtVEVTVCA6IGdvdCBjb25uZWN0aW9uIik7Ci0gICAgICAgIAorCiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgZHNDb25uLCBwYywgdGhpcyk7CiAgICAgICAgIC8vR0pDSU5UCiAvKgpAQCAtMTIzLDE1ICsxMjMsMTUgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWMy1URVNUIDogcmV0dXJuaW5nIGNvbm5lY3Rpb24iKTsKICAgICAgICAgcmV0dXJuIG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0byAKKyAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8KICAgICAgKiBhbm90aGVyIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCW90aGVyCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCi0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQotICAgICAqCQlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBvdGhlciAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZQorICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQorICAgICAqICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xNDIsMjggKzE0MiwyOCBAQAogICAgICAgICAgKiBpZiBhbmQgb25seSBpZiB0aGVpciBwcm9wZXJ0aWVzIGFyZSB0aGUgc2FtZS4KICAgICAgICAgICovCiAgICAgICAgIGlmKG90aGVyIGluc3RhbmNlb2YgY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KSB7Ci0gICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnkgb3RoZXJNQ0YgPSAKKyAgICAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBvdGhlck1DRiA9CiAgICAgICAgICAgICAgICAgKGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSkgb3RoZXI7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5zcGVjLmVxdWFscyhvdGhlck1DRi5zcGVjKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2VydmVyTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzZXJ2ZXJOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0c2VydmVyTmFtZShTdHJpbmcgc2VydmVyTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FLCBzZXJ2ZXJOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jc2VydmVyTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHNlcnZlck5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRzZXJ2ZXJOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSk7CkBAIC0xNzgsMTIgKzE3OCwxMiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZXJ2ZXJOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNlcnZlck5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBAQ29uZmlnUHJvcGVydHkoCiAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSAibG9jYWxob3N0IiwKQEAgLTE5MiwxMiArMTkyLDEyIEBACiAgICAgcHVibGljIHZvaWQgc2V0U2VydmVyTmFtZShTdHJpbmcgc2VydmVyTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FLCBzZXJ2ZXJOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jc2VydmVyTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHNlcnZlck5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSk7CkBAIC0yMTksMzIgKzIxOSwzMiBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWxpYXNUZXN0ICgpIHsKICAgICAgICAgcmV0dXJuIGFsaWFzVGVzdDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb3J0TnVtYmVyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBvcnROdW1iZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRwb3J0TnVtYmVyKFN0cmluZyBwb3J0TnVtYmVyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIsIHBvcnROdW1iZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHJldHVybglwb3J0TnVtYmVyCi0gICAgICogQHNlZQk8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcG9ydE51bWJlcgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHBvcnROdW1iZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb3J0TnVtYmVyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBvcnROdW1iZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBAQ29uZmlnUHJvcGVydHkoCiAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSAiMTUyNyIsCkBAIC0yNTMsNDIgKzI1Myw0MiBAQAogICAgIHB1YmxpYyB2b2lkIHNldFBvcnROdW1iZXIoU3RyaW5nIHBvcnROdW1iZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiwgcG9ydE51bWJlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBvcnROdW1iZXIKLSAgICAgKiBAc2VlCTxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBwb3J0TnVtYmVyCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UG9ydE51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGF0YWJhc2VOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGF0YWJhc2VOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkYXRhYmFzZU5hbWUoU3RyaW5nIGRhdGFiYXNlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUsIGRhdGFiYXNlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGF0YWJhc2VOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkYXRhYmFzZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRhdGFiYXNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkYXRhYmFzZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkYXRhYmFzZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIEBDb25maWdQcm9wZXJ0eSgKICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT0idGVzdGRiIiwKQEAgLTI5Nyw0MiArMjk3LDQyIEBACiAgICAgcHVibGljIHZvaWQgc2V0RGF0YWJhc2VOYW1lKFN0cmluZyBkYXRhYmFzZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FLCBkYXRhYmFzZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRhdGFiYXNlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGF0YWJhc2VOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREYXRhYmFzZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGF0YVNvdXJjZU5hbWUoU3RyaW5nIGRzbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSwgZHNuKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkc24KLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHNuCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRhdGFTb3VyY2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgQENvbmZpZ1Byb3BlcnR5KAogICAgICAgICAgICAgdHlwZT1qYXZhLmxhbmcuU3RyaW5nLmNsYXNzCkBAIC0zNDAsMjAzICszNDAsMjAzIEBACiAgICAgcHVibGljIHZvaWQgc2V0RGF0YVNvdXJjZU5hbWUoU3RyaW5nIGRzbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSwgZHNuKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkc24KLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHNuCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERhdGFTb3VyY2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlc2MJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlc2MgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGVzY3JpcHRpb24oU3RyaW5nIGRlc2MpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04sIGRlc2MpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglkZXNjCi0gICAgICogQHNlZQk8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlc2MKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZGVzY3JpcHRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGVzYwk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVzYyAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzYykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiwgZGVzYyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRlc2MKLSAgICAgKiBAc2VlCTxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVzYworICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHBhcmFtCW53UHJvdG9jb2wJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBud1Byb3RvY29sICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRuZXR3b3JrUHJvdG9jb2woU3RyaW5nIG53UHJvdG9jb2wpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MLCBud1Byb3RvY29sKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHJldHVybglud1Byb3RvY29sCi0gICAgICogQHNlZQk8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHJldHVybiAgICBud1Byb3RvY29sCisgICAgICogQHNlZSAgICA8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRuZXR3b3JrUHJvdG9jb2woKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbndQcm90b2NvbAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG53UHJvdG9jb2wgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldE5ldHdvcmtQcm90b2NvbChTdHJpbmcgbndQcm90b2NvbCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wsIG53UHJvdG9jb2wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCW53UHJvdG9jb2wKLSAgICAgKiBAc2VlCTxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIG53UHJvdG9jb2wKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldE5ldHdvcmtQcm90b2NvbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXJvbGVOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICByb2xlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRyb2xlTmFtZShTdHJpbmcgcm9sZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUsIHJvbGVOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXJvbGVOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHJvbGVOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHJvbGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlyb2xlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcm9sZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Um9sZU5hbWUoU3RyaW5nIHJvbGVOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FLCByb2xlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglyb2xlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICByb2xlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRSb2xlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKTsKICAgICB9CiAKLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lT3V0CTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lT3V0ICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRsb2dpblRpbWVPdXQoU3RyaW5nIGxvZ2luVGltZU91dCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQsIGxvZ2luVGltZU91dCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbG9naW5UaW1lb3V0Ci0gICAgICogQHNlZQk8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHJldHVybiAgICBsb2dpblRpbWVvdXQKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGxvZ2luVGltZU91dCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVPdXQJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBsb2dpblRpbWVPdXQgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ2luVGltZU91dChTdHJpbmcgbG9naW5UaW1lT3V0KSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCwgbG9naW5UaW1lT3V0KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHJldHVybglsb2dpblRpbWVvdXQKLSAgICAgKiBAc2VlCTxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGxvZ2luVGltZW91dAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TG9naW5UaW1lT3V0KCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZWxpbWl0ZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGVsaW0JPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZWxpbSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGVsaW1pdGVyKFN0cmluZyBkZWxpbSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIsIGRlbGltKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZWxpbWl0ZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRlbGltCi0gICAgICogQHNlZQk8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZWxpbQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZGVsaW1pdGVyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZWxpbWl0ZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGVsaW0JPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZWxpbSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgQENvbmZpZ1Byb3BlcnR5KAogICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gIiMiLApAQCAtNTQ1LDUyICs1NDUsNTIgQEAKICAgICBwdWJsaWMgdm9pZCBzZXREZWxpbWl0ZXIoU3RyaW5nIGRlbGltKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUiwgZGVsaW0pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVsaW0KLSAgICAgKiBAc2VlCTxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlbGltCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZWxpbWl0ZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHBhcmFtCWRyaXZlclByb3BzCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRyaXZlclByb3BzICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZHJpdmVyUHJvcGVydGllcyhTdHJpbmcgZHJpdmVyUHJvcHMpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUywgZHJpdmVyUHJvcHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHJldHVybglkcml2ZXJQcm9wcwotICAgICAqIEBzZWUJPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRyaXZlclByb3BzCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZHJpdmVyUHJvcGVydGllcygpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHBhcmFtCWRyaXZlclByb3BzCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRyaXZlclByb3BzICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RHJpdmVyUHJvcGVydGllcyhTdHJpbmcgZHJpdmVyUHJvcHMpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUywgZHJpdmVyUHJvcHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHJldHVybglkcml2ZXJQcm9wcwotICAgICAqIEBzZWUJPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRyaXZlclByb3BzCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RHJpdmVyUHJvcGVydGllcygpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwpAQCAtNjAwLDM1ICs2MDAsMzUgQEAKICAgICAgKiBDaGVjayBpZiB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3NlZCBmb3IgdGhpcyBnZXQgY29ubmVjdGlvbgogICAgICAqIHJlcXVlc3QgaXMgZXF1YWwgdG8gdGhlIHVzZXIvcGFzc3dkIG9mIHRoaXMgY29ubmVjdGlvbiBwb29sLgogICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKCBQYXNzd29yZENyZWRlbnRpYWwgcGMsIFN0cmluZyB1c2VyLCAKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbCggUGFzc3dvcmRDcmVkZW50aWFsIHBjLCBTdHJpbmcgdXNlciwKICAgICAgICAgU3RyaW5nIHBhc3N3b3JkKSB7Ci0gICAgICAgIAotCS8vaWYgZXF1YWwgZ2V0IGRpcmVjdCBjb25uZWN0aW9uIGVsc2UgCi0JLy9nZXQgY29ubmVjdGlvbiB3aXRoIHVzZXIgYW5kIHBhc3N3b3JkLgotCQotCWlmICh1c2VyID09IG51bGwgJiYgcGMgPT0gbnVsbCkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JaWYgKCB1c2VyID09IG51bGwgJiYgcGMgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQl9CiAKLQlpZiggcGMgPT0gbnVsbCApIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfQotCQotCWlmICggdXNlci5lcXVhbHMoIHBjLmdldFVzZXJOYW1lKCkgKSApIHsKLQkgICAgaWYgKCBwYXNzd29yZCA9PSBudWxsICYmIHBjLmdldFBhc3N3b3JkKCkgPT0gbnVsbCApIHsKLQkgICAgICAgIHJldHVybiB0cnVlOwotCSAgICB9Ci0JfQotCQotCWlmICggdXNlci5lcXVhbHMocGMuZ2V0VXNlck5hbWUoKSkgJiYgcGFzc3dvcmQuZXF1YWxzKHBjLmdldFBhc3N3b3JkKCkpICkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9IAotCQotICAgICAgICAKLQlyZXR1cm4gZmFsc2U7CisgICAgLy9pZiBlcXVhbCBnZXQgZGlyZWN0IGNvbm5lY3Rpb24gZWxzZQorICAgIC8vZ2V0IGNvbm5lY3Rpb24gd2l0aCB1c2VyIGFuZCBwYXNzd29yZC4KKworICAgIGlmICh1c2VyID09IG51bGwgJiYgcGMgPT0gbnVsbCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIHVzZXIgPT0gbnVsbCAmJiBwYyAhPSBudWxsICkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmKCBwYyA9PSBudWxsICkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIHVzZXIuZXF1YWxzKCBwYy5nZXRVc2VyTmFtZSgpICkgKSB7CisgICAgICAgIGlmICggcGFzc3dvcmQgPT0gbnVsbCAmJiBwYy5nZXRQYXNzd29yZCgpID09IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggdXNlci5lcXVhbHMocGMuZ2V0VXNlck5hbWUoKSkgJiYgcGFzc3dvcmQuZXF1YWxzKHBjLmdldFBhc3N3b3JkKCkpICkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKworICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCmluZGV4IGQ5MDA4NWQuLjUxZjE3NzMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCkBAIC0yOCwyMiArMjgsMjIgQEAKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CiAvKioKLSAqIEhvbGRzIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlIAorICogSG9sZHMgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCwgd2hpY2ggaXMgdG8gYmUKICAqIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbS4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2UgaW1wbGVtZW50cyBqYXZheC5zcWwuRGF0YVNvdXJjZSwgamF2YS5pby5TZXJpYWxpemFibGUsCi0JCWNvbS5zdW4uYXBwc2Vydi5qZGJjcmEuRGF0YVNvdXJjZSwgamFrYXJ0YS5yZXNvdXJjZS5SZWZlcmVuY2VhYmxleyAKLQkJCQkgICAKKyAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmNyYS5EYXRhU291cmNlLCBqYWthcnRhLnJlc291cmNlLlJlZmVyZW5jZWFibGV7CisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2Y7Ci0gICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsJCQkJICAgCQkJCSAgIAorICAgIHByaXZhdGUgQ29ubmVjdGlvbk1hbmFnZXIgY207CiAgICAgcHJpdmF0ZSBpbnQgbG9naW5UaW1lb3V0OwogICAgIHByaXZhdGUgUHJpbnRXcml0ZXIgbG9nV3JpdGVyOwotICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwkJCQkgICAKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKICAgICBwcml2YXRlIFJlZmVyZW5jZSByZWZlcmVuY2U7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTEsNTggKzUxLDU4IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnID0gZmFsc2U7CiAKICAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdC4gVGhpcyBpcyBjcmVhdGVkIGJ5IHRoZSAKKyAgICAgKiBDb25zdHJ1Y3RzIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdC4gVGhpcyBpcyBjcmVhdGVkIGJ5IHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCAKLSAgICAgKgkJCWNyZWF0aW5nIHRoaXMgb2JqZWN0LgotICAgICAqIEBwYXJhbQljbQk8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gb2JqZWN0IGVpdGhlciBhc3NvY2lhdGVkCi0gICAgICoJCQl3aXRoIEFwcGxpY2F0aW9uIHNlcnZlciBvciBSZXNvdXJjZSBBZGFwdGVyLgorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgIGNyZWF0aW5nIHRoaXMgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBjbSAgICA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gb2JqZWN0IGVpdGhlciBhc3NvY2lhdGVkCisgICAgICogICAgICAgICAgICB3aXRoIEFwcGxpY2F0aW9uIHNlcnZlciBvciBSZXNvdXJjZSBBZGFwdGVyLgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhU291cmNlIChNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLCBDb25uZWN0aW9uTWFuYWdlciBjbSkgewotICAgIAl0aGlzLm1jZiA9IG1jZjsKLSAgICAJaWYgKGNtID09IG51bGwpIHsKLSAgICAJICAgIHRoaXMuY20gPSAoQ29ubmVjdGlvbk1hbmFnZXIpIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIoKTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHRoaXMuY20gPSBjbTsKLSAgICAJfSAgICAJCi0gICAgfSAgIAotICAgIAorICAgICAgICB0aGlzLm1jZiA9IG1jZjsKKyAgICAgICAgaWYgKGNtID09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuY20gPSAoQ29ubmVjdGlvbk1hbmFnZXIpIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuY20gPSBjbTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogCi0gICAgICogQHJldHVybgk8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLiAgICAgIAorICAgICAqCisgICAgICogQHJldHVybiAgICA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJdHJ5IHsKLSAgICAJICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixudWxsKTsgICAgCSAgICAKLSAgICAJfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixudWxsKTsKKyAgICAgICAgfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKIC8vIFRoaXMgaXMgdGVtcG9yYXJ5LiBUaGlzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gU0VWRVJFIGFmdGVyIFRQCi0JICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICByZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAJICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCX0KKyAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIAotICAgICAqIEBwYXJhbQl1c2VyCVVzZXIgbmFtZSBmb3IgdGhlIENvbm5lY3Rpb24uCi0gICAgICogQHBhcmFtCXB3ZAlQYXNzd29yZCBmb3IgdGhlIENvbm5lY3Rpb24uCi0gICAgICogQHJldHVybgk8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLiAgICAgIAorICAgICAqCisgICAgICogQHBhcmFtICAgIHVzZXIgICAgVXNlciBuYW1lIGZvciB0aGUgQ29ubmVjdGlvbi4KKyAgICAgKiBAcGFyYW0gICAgcHdkICAgIFBhc3N3b3JkIGZvciB0aGUgQ29ubmVjdGlvbi4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbihTdHJpbmcgdXNlciwgU3RyaW5nIHB3ZCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXRyeSB7Ci0gICAgCSAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbyA9IG5ldyBDb25uZWN0aW9uUmVxdWVzdEluZm8gKHVzZXIsIHB3ZCk7Ci0gICAgCSAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsaW5mbyk7Ci0gICAgCX0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbyA9IG5ldyBDb25uZWN0aW9uUmVxdWVzdEluZm8gKHVzZXIsIHB3ZCk7CisgICAgICAgICAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsaW5mbyk7CisgICAgICAgIH0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CiAvLyBUaGlzIGlzIHRlbXBvcmFyeS4gVGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIFNFVkVSRSBhZnRlciBUUAotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJfQotICAgIH0gICAgCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIKQEAgLTExNSw5MSArMTE1LDkxIEBACiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbihDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAKLSAgICAgICAgQ29ubmVjdGlvbiBkcml2ZXJDb24gPSBjb247IAorICAgICAgICBDb25uZWN0aW9uIGRyaXZlckNvbiA9IGNvbjsKICAgICAgICAgaWYgKGNvbiBpbnN0YW5jZW9mIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSB7Ci0gICAgICAgICAgIGRyaXZlckNvbiA9ICgoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIGNvbikuZ2V0Q29ubmVjdGlvbigpOyAKLSAgICAgICAgfSAKKyAgICAgICAgICAgZHJpdmVyQ29uID0gKChjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgY29uKS5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gZHJpdmVyQ29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9naW4gdGltZW91dAogICAgICAqCiAgICAgICogQHJldHVybiBsb2dpbiB0aW1lb3V0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0TG9naW5UaW1lb3V0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJcmV0dXJuCWxvZ2luVGltZW91dDsKKyAgICAgICAgcmV0dXJuICAgIGxvZ2luVGltZW91dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZ2luIHRpbWVvdXQKICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVvdXQJTG9naW4gdGltZW91dC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lb3V0ICAgIExvZ2luIHRpbWVvdXQuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9naW5UaW1lb3V0KGludCBsb2dpblRpbWVvdXQpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXRoaXMubG9naW5UaW1lb3V0ID0gbG9naW5UaW1lb3V0OworICAgICAgICB0aGlzLmxvZ2luVGltZW91dCA9IGxvZ2luVGltZW91dDsKICAgICB9Ci0gICAgCi0gICAgLyoqIAorCisgICAgLyoqCiAgICAgICogR2V0IHRoZSBsb2d3cml0ZXIgb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT4gUHJpbnRXcml0ZXIgPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIFByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXJldHVybglsb2dXcml0ZXI7CisgICAgICAgIHJldHVybiAgICBsb2dXcml0ZXI7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9nd3JpdGVyIG9uIHRoaXMgb2JqZWN0LgogICAgICAqCiAgICAgICogQHBhcmFtIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKFByaW50V3JpdGVyIGxvZ1dyaXRlcikgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7Ci0gICAgfSAgICAgICAgCi0gICAgICAgIAorICAgICAgICB0aGlzLmxvZ1dyaXRlciA9IGxvZ1dyaXRlcjsKKyAgICB9CisKICAgICBwdWJsaWMgTG9nZ2VyIGdldFBhcmVudExvZ2dlcigpIHRocm93cyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBmZWF0dXJlLiIpOwogICAgIH0KICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KKyAgICAgKiBAcmV0dXJuICAgIERlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7Ci0gICAgCXJldHVybiBkZXNjcmlwdGlvbjsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKICAgICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2NyaXB0aW9uKSB7Ci0gICAgCXRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgICB9ICAgIAotICAgIAorICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgfQorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSByZWZlcmVuY2UuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIDxjb2RlPlJlZmVyZW5jZTwvY29kZT5vYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIFJlZmVyZW5jZSBnZXRSZWZlcmVuY2UoKSB7Ci0gICAgCXJldHVybiByZWZlcmVuY2U7CisgICAgICAgIHJldHVybiByZWZlcmVuY2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSByZWZlcmVuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVmZXJlbmNlIDxjb2RlPlJlZmVyZW5jZTwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICByZWZlcmVuY2UgPGNvZGU+UmVmZXJlbmNlPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlKFJlZmVyZW5jZSByZWZlcmVuY2UpIHsKLSAgICAJdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7CisgICAgICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOwogICAgIH0KIAogICAgIHB1YmxpYyA8VD4gVCB1bndyYXAoQ2xhc3M8VD4gaWZhY2UpIHRocm93cyBTUUxFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCmluZGV4IDU3NGVkNjYuLmJlYzBkNmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKQEAgLTE4LDEzICsxOCwxMyBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEpkYmNTZXR1cEFkbWluIHsKIAotICAgIHB1YmxpYyB2b2lkIHNldFRhYmxlTmFtZShTdHJpbmcgZGIpOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRUYWJsZU5hbWUoU3RyaW5nIGRiKTsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFibGVOYW1lKCk7CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRKbmRpTmFtZShTdHJpbmcgbmFtZSk7IAorICAgIHB1YmxpYyB2b2lkIHNldEpuZGlOYW1lKFN0cmluZyBuYW1lKTsKIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Sm5kaU5hbWUoKTsgCisgICAgcHVibGljIFN0cmluZyBnZXRKbmRpTmFtZSgpOwogCiAgICAgcHVibGljIHZvaWQgc2V0U2NoZW1hTmFtZShTdHJpbmcgbmFtZSk7CiAKQEAgLTM0LDYgKzM0LDYgQEAKIAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldE5vT2ZSb3dzKCk7CiAKLSAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCk7IAorICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2V0dXAoKTsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKaW5kZXggZjg5YmU1Ny4uZmMzYTk1NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhCkBAIC04NCwxMSArODQsMTEgQEAKIAogcHJpdmF0ZSB2b2lkIHByaW50SGllcmFyY2h5KENsYXNzTG9hZGVyIGNsLCBpbnQgY250KXsKIHdoaWxlKGNsICE9IG51bGwpIHsKLQlmb3IoaW50IGkgPTA7IGkgPCBjbnQ7IGkrKykgCi0JCVN5c3RlbS5vdXQucHJpbnQoIiAiICk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgOiIgKyBjbCk7Ci0JY2wgPSBjbC5nZXRQYXJlbnQoKTsKLQljbnQgKz0gMzsKKyAgICBmb3IoaW50IGkgPTA7IGkgPCBjbnQ7IGkrKykKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICIgKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCA6IiArIGNsKTsKKyAgICBjbCA9IGNsLmdldFBhcmVudCgpOworICAgIGNudCArPSAzOwogfQogfQogCkBAIC05NywxMCArOTcsMTAgQEAKICAgICAgICAgZm9yKGludCBpID0wOyBpIDwgY250OyBpKyspCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICIgKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgb2YgQ2xhc3NMb2FkZXIgMSA6IiArIGNsMSk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgb2YgQ2xhc3NMb2FkZXIgMiA6IiArIGNsMik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJFUVVBTFMgOiAiICsgKGNsMSA9PSBjbDIpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCBvZiBDbGFzc0xvYWRlciAyIDoiICsgY2wyKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVRVUFMUyA6ICIgKyAoY2wxID09IGNsMikpOwogICAgICAgICBjbDEgPSBjbDEuZ2V0UGFyZW50KCk7Ci0JY2wyID0gY2wyLmdldFBhcmVudCgpOworICAgIGNsMiA9IGNsMi5nZXRQYXJlbnQoKTsKICAgICAgICAgY250ICs9IDM7CiB9CiB9CkBAIC0xMDksOTMgKzEwOSw5MyBAQAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2V0dXAoKXsKIAogICAgICAgICBpZiAoam5kaU5hbWU9PSBudWxsIHx8IGpuZGlOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgcmV0dXJuIGZhbHNlOwotCX0KKyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgICAgIGlmICh0YWJsZU5hbWU9PSBudWxsIHx8IHRhYmxlTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IG51bGw7Ci0JU3RhdGVtZW50IHMgPSBudWxsOwotCVJlc3VsdFNldCBycyA9IG51bGw7Ci0JYm9vbGVhbiBiID0gZmFsc2U7CisgICAgU3RhdGVtZW50IHMgPSBudWxsOworICAgIFJlc3VsdFNldCBycyA9IG51bGw7CisgICAgYm9vbGVhbiBiID0gZmFsc2U7CiAgICAgICAgIHRyeSB7Ci0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JLy9kZWJ1ZwotCUNsYXNzIGNseiA9IERhdGFTb3VyY2UuY2xhc3M7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgLy9kZWJ1ZworICAgIENsYXNzIGNseiA9IERhdGFTb3VyY2UuY2xhc3M7CiAvKgotCWlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJEYXRhU291cmNlJ3MgY2xhc3hzIDogIiArICBjbHouZ2V0TmFtZSgpICsgICIgY2xhc3Nsb2FkZXIgIiArIGNsei5nZXRDbGFzc0xvYWRlcigpKTsKLQkJcHJpbnRIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOwotCX0KLQlDbGFzcyBjbHMgPSBpYy5sb29rdXAoam5kaU5hbWUpLmdldENsYXNzKCk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgY2xhc3MncyA6ICIgKyBjbHMuZ2V0UGFja2FnZSgpICsgIjoiICsgY2xzLmdldE5hbWUoKSAgKyAiIGNsYXNzbG9hZGVyICIgICsgY2xzLmdldENsYXNzTG9hZGVyKCkpOwotCXByaW50SGllcmFyY2h5KGNscy5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKKyAgICBpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGF0YVNvdXJjZSdzIGNsYXN4cyA6ICIgKyAgY2x6LmdldE5hbWUoKSArICAiIGNsYXNzbG9hZGVyICIgKyBjbHouZ2V0Q2xhc3NMb2FkZXIoKSk7CisgICAgICAgIHByaW50SGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKKyAgICB9CisgICAgQ2xhc3MgY2xzID0gaWMubG9va3VwKGpuZGlOYW1lKS5nZXRDbGFzcygpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGNsYXNzJ3MgOiAiICsgY2xzLmdldFBhY2thZ2UoKSArICI6IiArIGNscy5nZXROYW1lKCkgICsgIiBjbGFzc2xvYWRlciAiICArIGNscy5nZXRDbGFzc0xvYWRlcigpKTsKKyAgICBwcmludEhpZXJhcmNoeShjbHMuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzbG9hZGVycyBlcXVhbCA/ICIgKyAgKGNsei5nZXRDbGFzc0xvYWRlcigpID09IGNscy5nZXRDbGFzc0xvYWRlcigpKSk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCImKiYqJiomKiBDb21wYXJpbmcgSGllcmFjaHkgRGF0YVNvdXJjZSB2cyBsb29rZWR1cCIpOwotCWlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKLQkJY29tcGFyZUhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKSwgY2xzLmdldENsYXNzTG9hZGVyKCksIDgpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzbG9hZGVycyBlcXVhbCA/ICIgKyAgKGNsei5nZXRDbGFzc0xvYWRlcigpID09IGNscy5nZXRDbGFzc0xvYWRlcigpKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCImKiYqJiomKiBDb21wYXJpbmcgSGllcmFjaHkgRGF0YVNvdXJjZSB2cyBsb29rZWR1cCIpOworICAgIGlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKKyAgICAgICAgY29tcGFyZUhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKSwgY2xzLmdldENsYXNzTG9hZGVyKCksIDgpOworICAgIH0KIAotCVN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGxvb2t1cCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGxvb2t1cCIpOwogKi8KLQlPYmplY3QgbyA9IGljLmxvb2t1cChqbmRpTmFtZSk7Ci0vLwlTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGxvb2t1cCBsb29rdXAiKTsKKyAgICBPYmplY3QgbyA9IGljLmxvb2t1cChqbmRpTmFtZSk7CisvLyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGxvb2t1cCBsb29rdXAiKTsKIAotCSAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpbyA7CisgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlvIDsKIC8qCi0JU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBjYXN0Iik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tIFRyeWluZyBvdXIgU3R1ZmYgISEhIik7Ci0JdHJ5IHsKLQkJQ2xhc3MgbzEgPSAoQ2xhc3MuZm9yTmFtZSgiY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UiKSk7Ci0JCUNsYXNzTG9hZGVyIGNsMSA9IG8xLmdldENsYXNzTG9hZGVyKCk7Ci0JCUNsYXNzTG9hZGVyIGNsMiA9IERhdGFTb3VyY2UuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDbDEgPT0gQ2wyIiArIChjbDEgPT0gY2wyKSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3NlcyBlcXVhbCIgKyAoRGF0YVNvdXJjZS5jbGFzcyA9PSBvMSkpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBjYXN0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tIFRyeWluZyBvdXIgU3R1ZmYgISEhIik7CisgICAgdHJ5IHsKKyAgICAgICAgQ2xhc3MgbzEgPSAoQ2xhc3MuZm9yTmFtZSgiY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UiKSk7CisgICAgICAgIENsYXNzTG9hZGVyIGNsMSA9IG8xLmdldENsYXNzTG9hZGVyKCk7CisgICAgICAgIENsYXNzTG9hZGVyIGNsMiA9IERhdGFTb3VyY2UuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbDEgPT0gQ2wyIiArIChjbDEgPT0gY2wyKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3NlcyBlcXVhbCIgKyAoRGF0YVNvdXJjZS5jbGFzcyA9PSBvMSkpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAqLwogICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBTdHJpbmcgZnVsbFRhYmxlTmFtZSA9IHRhYmxlTmFtZTsKLQkgICAgaWYgKHNjaGVtYU5hbWUgIT0gbnVsbCAmJiAoIShzY2hlbWFOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSkpIHsKLQkgICAgICAgIGZ1bGxUYWJsZU5hbWUgPSBzY2hlbWFOYW1lLnRyaW0oKSArICIuIiArIGZ1bGxUYWJsZU5hbWU7Ci0JICAgIH0KLQkgICAgU3RyaW5nIHFyeSA9ICJzZWxlY3QgKiBmcm9tICIgKyBmdWxsVGFibGVOYW1lOyAKKyAgICAgICAgU3RyaW5nIGZ1bGxUYWJsZU5hbWUgPSB0YWJsZU5hbWU7CisgICAgICAgIGlmIChzY2hlbWFOYW1lICE9IG51bGwgJiYgKCEoc2NoZW1hTmFtZS50cmltKCkuZXF1YWxzKCIiKSkpKSB7CisgICAgICAgICAgICBmdWxsVGFibGVOYW1lID0gc2NoZW1hTmFtZS50cmltKCkgKyAiLiIgKyBmdWxsVGFibGVOYW1lOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBxcnkgPSAic2VsZWN0ICogZnJvbSAiICsgZnVsbFRhYmxlTmFtZTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyBxdWVyeSA6IiArIHFyeSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0aW5nIHF1ZXJ5IDoiICsgcXJ5KTsKIAotCSAgICBzID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBycyA9IHMuZXhlY3V0ZVF1ZXJ5KHFyeSk7IAorICAgICAgICBzID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBycyA9IHMuZXhlY3V0ZVF1ZXJ5KHFyeSk7CiAKICAgICAgICAgICAgIGludCBpID0gMDsKLQkgICAgaWYgKHJzLm5leHQoKSkgewotCSAgICAgICAgaSsrOwotCSAgICB9CisgICAgICAgIGlmIChycy5uZXh0KCkpIHsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vIG9mIHJvd3MgZm91bmQ6IiArIGkpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJObyBvZiByb3dzIGV4cGVjdGVkOiIgKyBub09mUm93cyk7CiAKLQkgICAgaWYgKGkgPT0gbm9PZlJvd3MuaW50VmFsdWUoKSkgewotCSAgICAgICBiID0gdHJ1ZTsKLQkgICAgfSBlbHNlIHsKLQkgICAgICAgYiA9IGZhbHNlOwotCSAgICB9Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBiID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGlmIChycyAhPSBudWxsKSBycy5jbG9zZSgpOwotCSAgICAgICAgaWYgKHMgIT0gbnVsbCkgcy5jbG9zZSgpOwotCSAgICAgICAgaWYgKGNvbiAhPSBudWxsKSBjb24uY2xvc2UoKTsKKyAgICAgICAgaWYgKGkgPT0gbm9PZlJvd3MuaW50VmFsdWUoKSkgeworICAgICAgICAgICBiID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgYiA9IGZhbHNlOworICAgICAgICB9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBiID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChycyAhPSBudWxsKSBycy5jbG9zZSgpOworICAgICAgICAgICAgaWYgKHMgIT0gbnVsbCkgcy5jbG9zZSgpOworICAgICAgICAgICAgaWYgKGNvbiAhPSBudWxsKSBjb24uY2xvc2UoKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIH0KLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJSZXR1cm5pbmcgc2V0dXAgOiIgK2IpOwotCXJldHVybiBiOworICAgICAgICB9CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuaW5nIHNldHVwIDoiICtiKTsKKyAgICByZXR1cm4gYjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEKaW5kZXggOGViZTA1Ny4uYzU0YTIxNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEKQEAgLTIzLDQ1ICsyMyw0NSBAQAogLyoqCiAgKiA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzAzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIExvY2FsVHJhbnNhY3Rpb24gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Mb2NhbFRyYW5zYWN0aW9uIHsKLSAgICAKKwogICAgIHByaXZhdGUgTWFuYWdlZENvbm5lY3Rpb24gbWM7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4uCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IHJldHVybnMKLSAgICAgKgkJCXRoaXMgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gb2JqZWN0IGFzCi0gICAgICoJCQlhIHJlc3VsdCBvZiA8Y29kZT5nZXRMb2NhbFRyYW5zYWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCByZXR1cm5zCisgICAgICogICAgICAgICAgICB0aGlzIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IG9iamVjdCBhcworICAgICAqICAgICAgICAgICAgYSByZXN1bHQgb2YgPGNvZGU+Z2V0TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgTG9jYWxUcmFuc2FjdGlvbihNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLm1jID0gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQmVnaW4gYSBsb2NhbCB0cmFuc2FjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYmVnaW4oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uU3RhcnRlZCgpOworICAgIG1jLnRyYW5zYWN0aW9uU3RhcnRlZCgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpLnNldEF1dG9Db21taXQoZmFsc2UpOwogICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21taXQgYSBsb2NhbCB0cmFuc2FjdGlvbi4KLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uIG9yIGNvbW1pdHRpbmcgdGhlIHRyYW5zYWN0aW9uCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBvciBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbW1pdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIEV4Y2VwdGlvbiBlID0gbnVsbDsKQEAgLTcyLDE1ICs3MiwxNSBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJvbGxiYWNrIGEgbG9jYWwgdHJhbnNhY3Rpb24uCi0gICAgICogCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbiBvciByb2xsaW5nIGJhY2sgdGhlIHRyYW5zYWN0aW9uCisgICAgICoKKyAgICAgKiBAdGhyb3dzICAgIExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIG9yIHJvbGxpbmcgYmFjayB0aGUgdHJhbnNhY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjaygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CkBAIC05MCw3ICs5MCw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKaW5kZXggMzBmNDYwYS4uMmRhZDU5YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQpAQCAtNDEsOCArNDEsOCBAQAogLyoqCiAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMgotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjIKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbiBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIHsKIApAQCAtNTIsNyArNTIsNyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzRGVzdHJveWVkID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBib29sZWFuIGlzVXNhYmxlID0gdHJ1ZTsKLSAgICAKKwogICAgIHByaXZhdGUgaW50IGNvbm5lY3Rpb25UeXBlID0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTjsKICAgICBwcml2YXRlIFBvb2xlZENvbm5lY3Rpb24gcGMgPSBudWxsOwogICAgIHByaXZhdGUgamF2YS5zcWwuQ29ubmVjdGlvbiBhY3R1YWxDb25uZWN0aW9uID0gbnVsbDsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICBwcml2YXRlIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YgPSBudWxsOwogICAgIHByaXZhdGUgWEFSZXNvdXJjZSB4YXIgPSBudWxsOwogICAgIHB1YmxpYyBDb25uZWN0aW9uSG9sZGVyIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGU7Ci0gICAgCisKICAgICAvL0dKQ0lOVAogICAgIHByaXZhdGUgaW50IGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQ7CiAgICAgcHJpdmF0ZSBib29sZWFuIGlzQ2xlYW4gPSBmYWxzZTsKQEAgLTc3LDcxICs3Nyw3MSBAQAogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4gVGhlIHBvb2xlZENvbm4gcGFyYW1ldGVyIGlzIGV4cGVjdGVkCi0gICAgICogdG8gYmUgbnVsbCBhbmQgc3FsQ29ubiBwYXJhbWV0ZXIgaXMgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIGNhc2Ugd2hlcmUgCi0gICAgICogdGhlIGFjdHVhbCBjb25uZWN0aW9uIGlzIGdvdCBmcm9tIGEgbm9uIHBvb2xlZCBkYXRhc291cmNlIG9iamVjdC4gVGhlIAorICAgICAqIHRvIGJlIG51bGwgYW5kIHNxbENvbm4gcGFyYW1ldGVyIGlzIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiBjYXNlIHdoZXJlCisgICAgICogdGhlIGFjdHVhbCBjb25uZWN0aW9uIGlzIGdvdCBmcm9tIGEgbm9uIHBvb2xlZCBkYXRhc291cmNlIG9iamVjdC4gVGhlCiAgICAgICogcG9vbGVkQ29ubiBwYXJhbWV0ZXIgaXMgZXhwZWN0ZWQgdG8gYmUgbm9uIG51bGwgYW5kIHNxbENvbm4gcGFyYW1ldGVyCiAgICAgICogaXMgZXhwZWN0ZWQgdG8gYmUgbnVsbCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgZGF0YXNvdXJjZSBvYmplY3QgaXMgYQogICAgICAqIGNvbm5lY3Rpb24gcG9vbCBkYXRhc291cmNlIG9yIGFuIHhhIGRhdGFzb3VyY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcG9vbGVkQ29ubgk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgCi0gICAgICoJCQkJcGh5c2ljYWwgY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgcG9vbGVkCi0gICAgICoJCQkJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47IG51bGwgb3RoZXJ3aXNlCi0gICAgICogQHBhcmFtCXNxbENvbm4JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIHBoeXNpY2FsCi0gICAgICoJCQljb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBub24gcG9vbGVkIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OwotICAgICAqCQkJbnVsbCBvdGhlcndpc2UKLSAgICAgKiBAcGFyYW0JcGFzc3dkQ3JlZAlvYmplY3QgY29uYXRpbmluZyB0aGUKLSAgICAgKgkJCQl1c2VyIGFuZCBwYXNzd29yZCBmb3IgYWxsb2NhdGluZyB0aGUgY29ubmVjdGlvbgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0Ci0gICAgICoJCQkJCXRoYXQgY3JlYXRlZCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKLSAgICAgKgkJCQkJaXMgbm90IHRoZSBzYW1lIGFzIHJldHVybmVkIGJ5IDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKgkJCQkJb2JqZWN0IHBhc3NlZAorICAgICAqIEBwYXJhbSAgICBwb29sZWRDb25uICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZQorICAgICAqICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIHBvb2xlZAorICAgICAqICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OyBudWxsIG90aGVyd2lzZQorICAgICAqIEBwYXJhbSAgICBzcWxDb25uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgbm9uIHBvb2xlZCA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsKKyAgICAgKiAgICAgICAgICAgIG51bGwgb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHBhc3N3ZENyZWQgICAgb2JqZWN0IGNvbmF0aW5pbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgdXNlciBhbmQgcGFzc3dvcmQgZm9yIGFsbG9jYXRpbmcgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICB0aGF0IGNyZWF0ZWQgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgIGlzIG5vdCB0aGUgc2FtZSBhcyByZXR1cm5lZCBieSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIG9iamVjdCBwYXNzZWQKICAgICAgKi8KLSAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24oUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uLCBqYXZhLnNxbC5Db25uZWN0aW9uIHNxbENvbm4sIAorICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbihQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4sIGphdmEuc3FsLkNvbm5lY3Rpb24gc3FsQ29ubiwKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3N3ZENyZWQsIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKHBvb2xlZENvbm4gPT0gbnVsbCAmJiBzcWxDb25uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ29ubmVjdGlvbiBvYmplY3QgY2Fubm90IGJlIG51bGwiKTsKICAgICAgICAgfQogCi0JaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7Ci0JICAgIGFjdHVhbENvbm5lY3Rpb24gPSBzcWxDb25uOwotCX0KKyAgICBpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKKyAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IHNxbENvbm47CisgICAgfQogCiAgICAgICAgIHBjID0gcG9vbGVkQ29ubjsKICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBuZXcgSGFzaHRhYmxlKCk7CiAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBwYXNzd2RDcmVkOwogICAgICAgICB0aGlzLm1jZiA9IG1jZjsKLSAgICAgICAgaWYocGFzc3dkQ3JlZGVudGlhbCAhPSBudWxsICYmICAKKyAgICAgICAgaWYocGFzc3dkQ3JlZGVudGlhbCAhPSBudWxsICYmCiAgICAgICAgICAgICB0aGlzLm1jZi5lcXVhbHMocGFzc3dkQ3JlZGVudGlhbC5nZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKSkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB0aGF0IGhhcyBjcmVhdGVkIHRoaXMgIiArIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHRoYXQgaGFzIGNyZWF0ZWQgdGhpcyAiICsKICAgICAgICAgICAgICAgICAiTWFuYWdlZENvbm5lY3Rpb24gaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgcmV0dXJuZWQgYnkiICsKICAgICAgICAgICAgICAgICAgICAgIiB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIGZvciB0aGlzIE1hbmFnZWRDb25uZWN0aW9uIik7CiAgICAgICAgIH0KICAgICAgICAgbG9nV3JpdGVyID0gbWNmLmdldExvZ1dyaXRlcigpOwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLQljZSA9IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fQ0xPU0VEKTsKKyAgICBjZSA9IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fQ0xPU0VEKTsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBBZGRzIGEgY29ubmVjdGlvbiBldmVudCBsaXN0ZW5lciB0byB0aGUgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGlzdGVuZXIJPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxpc3RlbmVyICAgIDxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqIEBzZWUgPGNvZGU+cmVtb3ZlQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYWRkQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIoQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQl0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7CisgICAgdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBjaGFuZ2UgdGhlIGFzc29jaWF0aW9uIG9mIGFuIGFwcGxpY2F0aW9uLWxldmVsIAorICAgICAqIFVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBjaGFuZ2UgdGhlIGFzc29jaWF0aW9uIG9mIGFuIGFwcGxpY2F0aW9uLWxldmVsCiAgICAgICogY29ubmVjdGlvbiBoYW5kbGUgd2l0aCBhIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQljb25uZWN0aW9uCTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aAotICAgICAqCQkJCXRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlCi0gICAgICoJCQkJCXZhbGlkIG9yIHRoZSBjb25uZWN0aW9uIGhhbmRsZSBwYXNzZWQgaXMgbnVsbAorICAgICAqIEBwYXJhbSAgICBjb25uZWN0aW9uICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aAorICAgICAqICAgICAgICAgICAgICAgIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlCisgICAgICogICAgICAgICAgICAgICAgICAgIHZhbGlkIG9yIHRoZSBjb25uZWN0aW9uIGhhbmRsZSBwYXNzZWQgaXMgbnVsbAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGFzc29jaWF0ZUNvbm5lY3Rpb24oT2JqZWN0IGNvbm5lY3Rpb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xNTIsMTEgKzE1MiwxMSBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDb25uZWN0aW9uIGhhbmRsZSBjYW5ub3QgYmUgbnVsbCIpOwogICAgICAgICB9CiAgICAgICAgIENvbm5lY3Rpb25Ib2xkZXIgY2ggPSAoQ29ubmVjdGlvbkhvbGRlcikgY29ubmVjdGlvbjsKLSAgICAgICAgCisKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jID0gKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiljaC5nZXRNYW5hZ2VkQ29ubmVjdGlvbigpOwotCW1jLmFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotCWlzQ2xlYW4gPSBmYWxzZTsKLSAgICAgICAgCisgICAgbWMuYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CisgICAgaXNDbGVhbiA9IGZhbHNlOworCiAgICAgICAgIGNoLmFzc29jaWF0ZUNvbm5lY3Rpb24oYWN0dWFsQ29ubmVjdGlvbiwgdGhpcyk7CiAgICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgZXhwZWN0YXRpb24gZnJvbSB0aGUgYWJvdmUgbWV0aG9kIGlzIHRoYXQgdGhlIGNvbm5lY3Rpb24gaG9sZGVyCkBAIC0xNjUsMzQgKzE2NSwzNCBAQAogICAgICAgICAgKiB0byB0aGUgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2Ugd2l0aCB0aGlzIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLgogICAgICAgICAgKiBBbnkgcHJldmlvdXMgc3RhdGVtZW50cyBhbmQgcmVzdWx0IHNldHMgYWxzbyBuZWVkIHRvIGJlIHJlbW92ZWQuCiAgICAgICAgICAqLwotICAgICAgICAgCisKICAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgIT0gbnVsbCkgewogICAgICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZS5zZXRBY3RpdmUoZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNoLnNldEFjdGl2ZSh0cnVlKTsKLSAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNoOyAKKyAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNoOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEFwcGxpY2F0aW9uIHNlcnZlciBjYWxscyB0aGlzIG1ldGhvZCB0byBmb3JjZSBhbnkgY2xlYW51cCBvbiB0aGUgCisgICAgICogQXBwbGljYXRpb24gc2VydmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIGZvcmNlIGFueSBjbGVhbnVwIG9uIHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4gVGhpcyBtZXRob2QgY2FsbHMgdGhlIGludmFsaWRhdGUKICAgICAgKiBtZXRob2Qgb24gYWxsIENvbm5lY3Rpb25IYW5kbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUgdmFsaWQKKyAgICAgKgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZSB2YWxpZAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNsZWFudXAoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBjbGVhbnVwIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiBtYXkgbmVlZCB0byBzZXQgdGhlIGF1dG9jb21taXQgdG8gdHJ1ZSBmb3IgdGhlIG5vbi1wb29sZWQgY2FzZS4KICAgICAgICAgICovCiAgICAgICAgIC8vR0pDSU5UCi0JLy9pZiAoYWN0dWFsQ29ubmVjdGlvbiAhPSBudWxsKSB7Ci0JaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7CisgICAgLy9pZiAoYWN0dWFsQ29ubmVjdGlvbiAhPSBudWxsKSB7CisgICAgaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkID0gYWN0dWFsQ29ubmVjdGlvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CkBAIC0yMDEsMTcgKzIwMSwxNyBAQAogICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaXNDbGVhbiA9IHRydWU7Ci0gICAgICAgIAorCiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYWxsIHRoZSBjb25uZWN0aW9uIGhhbmRsZXMgZnJvbSB0aGUgdGFibGUKICAgICAgKiBvZiBjb25uZWN0aW9uIGhhbmRsZXMgYW5kIGludmFsaWRhdGVzIGFsbCBvZiB0aGVtIHNvIHRoYXQgYW55CiAgICAgICogb3BlcmF0aW9uIG9uIHRob3NlIGNvbm5lY3Rpb24gaGFuZGxlcyB0aHJvd3MgYW4gZXhjZXB0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhIHByb2JsZW0gaW4gcmV0cmlldmluZwotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJdGhlIGNvbm5lY3Rpb24gaGFuZGxlcworICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYSBwcm9ibGVtIGluIHJldHJpZXZpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25uZWN0aW9uIGhhbmRsZXMKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgaW52YWxpZGF0ZUFsbENvbm5lY3Rpb25IYW5kbGVzKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgU2V0IGhhbmRsZXMgPSBjb25uZWN0aW9uSGFuZGxlcy5rZXlTZXQoKTsKQEAgLTIyNiwyMiArMjI2LDIyIEBACiAgICAgICAgIH0KICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMuY2xlYXIoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBEZXN0cm95cyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiB0byB0aGUgdW5kZXJseWluZyByZXNvdXJjZSBtYW5hZ2VyLgotICAgICAqIAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2xvc2luZyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjbG9zaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBkZXN0cm95Iik7CiAgICAgICAgIH0KLQkvL0dKQ0lOVAotCWlmKGlzRGVzdHJveWVkID09IHRydWUpIHsKLQkgICAgcmV0dXJuOwkKLQl9CisgICAgLy9HSkNJTlQKKyAgICBpZihpc0Rlc3Ryb3llZCA9PSB0cnVlKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLQlhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKKyAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmKGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OIHx8IGNvbm5lY3Rpb25UeXBlID09IElTUE9PTEVEQ09OTkVDVElPTikgewogICAgICAgICAgICAgICAgIHBjLmNsb3NlKCk7CkBAIC0yNTUsMjggKzI1NSwyOCBAQAogICAgICAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlOwogICAgICAgICAgICAgcGFzc3dkQ3JlZGVudGlhbCA9IG51bGw7CiAgICAgICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG51bGw7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uIGhhcyBvY2N1cmVkIGR1cmluZyBkZXN0cm95OiAiIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgZm9sbG93aW5nIGV4Y2VwdGlvbiBoYXMgb2NjdXJlZCBkdXJpbmcgZGVzdHJveTogIgogICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgcGFzc3dkQ3JlZGVudGlhbCA9IG51bGw7CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbm5lY3Rpb24gaGFuZGxlIGZvciB0aGUgdW5kZXJseWluZyBwaHlzaWNhbCAKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbm5lY3Rpb24gaGFuZGxlIGZvciB0aGUgdW5kZXJseWluZyBwaHlzaWNhbAogICAgICAqIGNvbm5lY3Rpb24gcmVwcmVzZW50ZWQgYnkgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+IHBhcmFtZXRlciBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uCi0gICAgICogQHBhcmFtCWN4UmVxSW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGNhcnJpZXMgdGhlIHVzZXIgCi0gICAgICogICAgICAgCSAgICAgICAgIAlhbmQgcGFzc3dvcmQgcmVxdWlyZWQgZm9yIGdldHRpbmcgdGhpcyBjb25uZWN0aW9uLgotICAgICAqIEByZXR1cm4JQ29ubmVjdGlvbgl0aGUgY29ubmVjdGlvbiBoYW5kbGUgPGNvZGU+T2JqZWN0PC9jb2RlPgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlwaHlzaWNhbCBjb25uZWN0aW9uIGZyb20gdGhlIHBvb2xlZCBjb25uZWN0aW9uIAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJcGFzc3dvcmQgY3JlZGVudGlhbHMgb3IgcmVhdXRoZW50aWNhdGlvbiBpcyByZXF1ZXN0ZWQKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgbmVlZGVkIGZvciBhdXRoZW50aWNhdGlvbgorICAgICAqIEBwYXJhbSAgICBjeFJlcUluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBjYXJyaWVzIHRoZSB1c2VyCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBhbmQgcGFzc3dvcmQgcmVxdWlyZWQgZm9yIGdldHRpbmcgdGhpcyBjb25uZWN0aW9uLgorICAgICAqIEByZXR1cm4gICAgQ29ubmVjdGlvbiAgICB0aGUgY29ubmVjdGlvbiBoYW5kbGUgPGNvZGU+T2JqZWN0PC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24gZnJvbSB0aGUgcG9vbGVkIGNvbm5lY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkIGNyZWRlbnRpYWxzIG9yIHJlYXV0aGVudGljYXRpb24gaXMgcmVxdWVzdGVkCiAgICAgICovCi0gICAgcHVibGljIE9iamVjdCBnZXRDb25uZWN0aW9uKFN1YmplY3Qgc3ViLCBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXFJbmZvKSAKKyAgICBwdWJsaWMgT2JqZWN0IGdldENvbm5lY3Rpb24oU3ViamVjdCBzdWIsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcUluZm8pCiAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0Q29ubmVjdGlvbiIpOwpAQCAtMjg0LDE0ICsyODQsMTQgQEAKICAgICAgICAgY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbyA9IChjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvKSBjeFJlcUluZm87CiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYXNzd2RDcmVkID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcy5tY2YsIHN1YiwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZihTZWN1cml0eVV0aWxzLmlzUGFzc3dvcmRDcmVkZW50aWFsRXF1YWwodGhpcy5wYXNzd2RDcmVkZW50aWFsLCBwYXNzd2RDcmVkKSA9PSBmYWxzZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlNlY3VyaXR5RXhjZXB0aW9uKCJSZS1hdXRoZW50aWNhdGlvbiBub3Qgc3VwcG9ydGVkIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy9HSkNJTlQKICAgICAgICAgZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgZm9sbG93aW5nIGNvZGUgaW4gdGhlIGlmIHN0YXRlbWVudCBmaXJzdCBjaGVja3MgaWYgdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbgogICAgICAgICAgKiBpcyBjbGVhbiBvciBub3QuIElmIGl0IGlzLCBpdCByZXNldHMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCB0byB3aGF0CkBAIC0zMDEsMjggKzMwMSwyOCBAQAogICAgICAgICBpZihpc0NsZWFuKSB7CiAgICAgICAgICAgICAoKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpbWNmKS5yZXNldElzb2xhdGlvbih0aGlzLCBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgIAorCisKICAgICAgICAgQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0ID0gbmV3IENvbm5lY3Rpb25Ib2xkZXIoYWN0dWFsQ29ubmVjdGlvbiwgdGhpcyk7Ci0JaXNDbGVhbj1mYWxzZTsKLSAgICAgICAgCisgICAgaXNDbGVhbj1mYWxzZTsKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUuc2V0QWN0aXZlKGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBjb25uSG9sZGVyT2JqZWN0LnNldEFjdGl2ZSh0cnVlKTsKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNvbm5Ib2xkZXJPYmplY3Q7Ci0gCisKICAgICAgICAgcmV0dXJuIGNvbm5Ib2xkZXJPYmplY3Q7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhbiA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4gVGhlIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGludGVyZmFjZQotICAgICAqIGlzIHVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBtYW5hZ2UgbG9jYWwgdHJhbnNhY3Rpb25zIGZvciBhIFJNIGluc3RhbmNlLiAKKyAgICAgKiBpcyB1c2VkIGJ5IHRoZSBjb250YWluZXIgdG8gbWFuYWdlIGxvY2FsIHRyYW5zYWN0aW9ucyBmb3IgYSBSTSBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5Mb2NhbFRyYW5zYWN0aW9uIGdldExvY2FsVHJhbnNhY3Rpb24oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMzMxLDEzICszMzEsMTMgQEAKICAgICAgICAgY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIHJldHVybiBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkxvY2FsVHJhbnNhY3Rpb24odGhpcyk7CiAgICAgfQotICAgICAKKwogICAgIC8qKgotICAgICAqIEdldHMgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLiAKKyAgICAgKiBHZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIAotICAgICAqCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICogQHNlZSA8Y29kZT5zZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC0zNDUsNDYgKzM0NSw0NiBAQAogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRMb2dXcml0ZXIiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGxvZ1dyaXRlcjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtZXRhZGF0YSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb25uZWN0aW9uJ3MgdW5kZXJseWluZyBFSVMgCi0gICAgICogcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZS4gCisgICAgICogR2V0cyB0aGUgbWV0YWRhdGEgaW5mb3JtYXRpb24gZm9yIHRoaXMgY29ubmVjdGlvbidzIHVuZGVybHlpbmcgRUlTCisgICAgICogcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhIGdldE1ldGFEYXRhKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0TWV0YURhdGEiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSh0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIGFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLiAKKyAgICAgKiBSZXR1cm5zIGFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCi0gICAgICoJCQkJCXRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqCQkJCQk8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJTm90U3VwcG9ydGVkRXhjZXB0aW9uCWlmIHVuZGVybHlpbmcgZGF0YXNvdXJjZSBpcyBub3QgYW4KLSAgICAgKgkJCQkJPGNvZGU+WEFEYXRhU291cmNlPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgorICAgICAqICAgICAgICAgICAgICAgICAgICB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgTm90U3VwcG9ydGVkRXhjZXB0aW9uICAgIGlmIHVuZGVybHlpbmcgZGF0YXNvdXJjZSBpcyBub3QgYW4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+WEFEYXRhU291cmNlPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlIGdldFhBUmVzb3VyY2UoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRYQVJlc291cmNlIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmKHhhciA9PSBudWxsKSB7Ci0JCSAgICAvKioKKyAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICAgICAgICAgKiBVc2luZyB0aGUgd3JhcHBlciBYQVJlc291cmNlLgogICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgeGFyID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5YQVJlc291cmNlSW1wbCgoKFhBQ29ubmVjdGlvbilwYykuZ2V0WEFSZXNvdXJjZSgpLCB0aGlzKTsKQEAgLTM5NywxNiArMzk3LDE2IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJDYW5ub3QgZ2V0IGFuIFhBUmVzb3VyY2UgZnJvbSBhIG5vbiBYQSBjb25uZWN0aW9uIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZW1vdmVzIGFuIGFscmVhZHkgcmVnaXN0ZXJlZCBjb25uZWN0aW9uIGV2ZW50IGxpc3RlbmVyIGZyb20gdGhlCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWxpc3RlbmVyCTxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPiB0byBiZSByZW1vdmVkCisgICAgICogQHBhcmFtICAgIGxpc3RlbmVyICAgIDxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPiB0byBiZSByZW1vdmVkCiAgICAgICogQHNlZSA8Y29kZT5hZGRDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByZW1vdmVDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcihDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBsaXN0ZW5lcikgewotCWxpc3RlbmVyID0gbnVsbDsKKyAgICBsaXN0ZW5lciA9IG51bGw7CiAgICAgfQogCiAgICAgLyoqCkBAIC00MTUsNyArNDE1LDcgQEAKICAgICAgKiBMb2NhbFRyYW5zYWN0aW9uIG9iamVjdCB3aGVuIGl0cyBiZWdpbigpIG1ldGhvZCBpcyBjYWxsZWQuCiAgICAgICovCiAgICAgdm9pZCB0cmFuc2FjdGlvblN0YXJ0ZWQoKSB7Ci0JdHJhbnNhY3Rpb25JblByb2dyZXNzID0gdHJ1ZTsJCisgICAgdHJhbnNhY3Rpb25JblByb2dyZXNzID0gdHJ1ZTsKICAgICB9CiAKICAgICAvKioKQEAgLTQyNCwxNiArNDI0LDE2IEBACiAgICAgICogTG9jYWxUcmFuc2FjdGlvbiBvYmplY3Qgd2hlbiBpdHMgZW5kKCkgbWV0aG9kIGlzIGNhbGxlZC4KICAgICAgKi8KICAgICB2b2lkIHRyYW5zYWN0aW9uQ29tcGxldGVkKCkgewotCXRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOwotCWlmKGNvbm5lY3Rpb25UeXBlID09IElTUE9PTEVEQ09OTkVDVElPTiB8fCBjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTikgeworICAgIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgIGlmKGNvbm5lY3Rpb25UeXBlID09IElTUE9PTEVEQ09OTkVDVElPTiB8fCBjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTikgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkID0gYWN0dWFsQ29ubmVjdGlvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpOwogICAgICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgLy9jaGVjayB3aGF0IHRvIGRvIGluIHRoaXMgY2FzZSEhCi0JCV9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLm5vdGdvdF90eF9pc29sdmwiKTsKKyAgICAgICAgICAgIC8vY2hlY2sgd2hhdCB0byBkbyBpbiB0aGlzIGNhc2UhIQorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5ub3Rnb3RfdHhfaXNvbHZsIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLQkgICAgdHJ5IHsKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGFjdHVhbENvbm5lY3Rpb24uY2xvc2UoKTsKICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKQEAgLTQ0MSw3ICs0NDEsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLQkgICAgICAgIAorCiAgICAgICAgIGlzQ2xlYW4gPSB0cnVlOwogCiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwpAQCAtNDUzLDI4ICs0NTMsMjggQEAKICAgICAgKiBvciBub3QuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSB7Ci0JcmV0dXJuIHRyYW5zYWN0aW9uSW5Qcm9ncmVzczsKKyAgICByZXR1cm4gdHJhbnNhY3Rpb25JblByb2dyZXNzOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCW91dAk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHBhcmFtICAgIG91dCAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICogQHNlZSA8Y29kZT5nZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKFByaW50V3JpdGVyIG91dCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIGxvZ1dyaXRlciA9IG91dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mIHRoZSBjb25uZWN0aW9uIGJlaW5nIGhlbGQgCisgICAgICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiB0aGUgY29ubmVjdGlvbiBiZWluZyBoZWxkCiAgICAgICogaW4gdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCXBvb2xlZENvbm4JPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAcmV0dXJuCWNvbm5lY3Rpb24gdHlwZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHBvb2xlZENvbm4gICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdHlwZQogICAgICAqLwogICAgIHByaXZhdGUgaW50IGdldENvbm5lY3Rpb25UeXBlKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubikgewogICAgICAgICBpZihwb29sZWRDb25uID09IG51bGwpIHsKQEAgLTQ4NSwyMiArNDg1LDIyIEBACiAgICAgICAgICAgICByZXR1cm4gSVNQT09MRURDT05ORUNUSU9OOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IAorICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdAogICAgICAqIGNyZWF0ZWQgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCBjcmVhdGVkIHRoaXMKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgY3JlYXRlZCB0aGlzCisgICAgICogICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQogICAgICAqLwogICAgIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBnZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKSB7CiAgICAgICAgIHJldHVybiAoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSltY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgYWN0dWFsIHNxbCBjb25uZWN0aW9uIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4gCisgICAgICogUmV0dXJucyB0aGUgYWN0dWFsIHNxbCBjb25uZWN0aW9uIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JdGhlIHBoeXNpY2FsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICB0aGUgcGh5c2ljYWwgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4KICAgICAgKi8KICAgICAvL0dKQ0lOVAogICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZ2V0QWN0dWFsQ29ubmVjdGlvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC01MDksOCArNTA5LDggQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYoYWN0dWFsQ29ubmVjdGlvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBwYy5nZXRDb25uZWN0aW9uKCk7Ci0JCX0KLQkJCisgICAgICAgIH0KKwogICAgICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewogICAgICAgICAgICAgICAgIHNxbGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKQEAgLTUxOCw4MSArNTE4LDgxIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGFjdHVhbENvbm5lY3Rpb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIAotICAgICAqCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCiAgICAgICovCiAgICAgUGFzc3dvcmRDcmVkZW50aWFsIGdldFBhc3N3b3JkQ3JlZGVudGlhbCgpIHsKICAgICAgICAgcmV0dXJuIHBhc3N3ZENyZWRlbnRpYWw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdCBhbmQgdGhyb3dzIGFuCiAgICAgICogZXhjZXB0aW9uIGlmIGl0IGlzIG5vdCB2YWxpZC4gQSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaXMgbm90IHZhbGlkIGlmCiAgICAgICogZGVzdHJveSBoYXMgbm90IGJlZW4gY2FsbGVkIGFuZCBubyBwaHlzaWNhbCBjb25uZWN0aW9uIGVycm9yIGhhcwogICAgICAqIG9jY3VycmVkIHJlbmRlcmluZyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiB1bnVzYWJsZS4KICAgICAgKgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgPGNvZGU+ZGVzdHJveTwvY29kZT4gaGFzIGJlZW4gY2FsbGVkIG9uIHRoaXMgCi0gICAgICoJCQkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSBvciBpZiBhIAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBvY2N1cnJlZCByZW5kZXJpbmcgaXQgdW51c2FibGUKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIDxjb2RlPmRlc3Ryb3k8L2NvZGU+IGhhcyBiZWVuIGNhbGxlZCBvbiB0aGlzCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSBvciBpZiBhCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGVycm9yIG9jY3VycmVkIHJlbmRlcmluZyBpdCB1bnVzYWJsZQogICAgICAqLwogICAgIC8vR0pDSU5UCiAgICAgdm9pZCBjaGVja0lmVmFsaWQoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihpc0Rlc3Ryb3llZCA9PSB0cnVlIHx8IGlzVXNhYmxlID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoaXMgTWFuYWdlZENvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzIHRoZSBwaHlzaWNhbCAiICsgCisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoaXMgTWFuYWdlZENvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzIHRoZSBwaHlzaWNhbCAiICsKICAgICAgICAgICAgICAgICAiY29ubmVjdGlvbiBpcyBub3QgdXNhYmxlLiIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB3aGVuIGl0cyBjbG9zZSBtZXRob2QgaXMKICAgICAgKiBjYWxsZWQuIFRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlICBpbnZhbGlkYXRlcyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKICAgICAgKiBhbmQgc2VuZHMgYSBDT05ORUNUSU9OX0NMT1NFRCBldmVudCB0byBhbGwgdGhlIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLgogICAgICAqCi0gICAgICogQHBhcmFtCWUJRXhjZXB0aW9uIHRoYXQgbWF5IGhhdmUgb2NjdXJlZCB3aGlsZSBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGhhbmRsZQotICAgICAqIEBwYXJhbQljb25uSG9sZGVyT2JqZWN0CTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgaGFzIGJlZW4gY2xvc2VkCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JaW4gY2FzZSBjbG9zaW5nIHRoZSBzcWwgY29ubmVjdGlvbiBnb3Qgb3V0IG9mCi0gICAgICogICAgICAgICAJICAgICAgICAgICAgCTxjb2RlPmdldENvbm5lY3Rpb248L2NvZGU+IG9uIHRoZSB1bmRlcmx5aW5nIAotICAgICAqCQkJCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IHRocm93cyBhbiBleGNlcHRpb24KKyAgICAgKiBAcGFyYW0gICAgZSAgICBFeGNlcHRpb24gdGhhdCBtYXkgaGF2ZSBvY2N1cmVkIHdoaWxlIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCisgICAgICogQHBhcmFtICAgIGNvbm5Ib2xkZXJPYmplY3QgICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBoYXMgYmVlbiBjbG9zZWQKKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBpbiBjYXNlIGNsb3NpbmcgdGhlIHNxbCBjb25uZWN0aW9uIGdvdCBvdXQgb2YKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+Z2V0Q29ubmVjdGlvbjwvY29kZT4gb24gdGhlIHVuZGVybHlpbmcKKyAgICAgKiAgICAgICAgICAgICAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiB0aHJvd3MgYW4gZXhjZXB0aW9uCiAgICAgICovCiAgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKEV4Y2VwdGlvbiBlLCBDb25uZWN0aW9uSG9sZGVyIGNvbm5Ib2xkZXJPYmplY3QpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBjb25uSG9sZGVyT2JqZWN0LmludmFsaWRhdGUoKTsKLSAgICAgICAgCisKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIGNlLnNldENvbm5lY3Rpb25IYW5kbGUoY29ubkhvbGRlck9iamVjdCk7CiAgICAgICAgIGxpc3RlbmVyLmNvbm5lY3Rpb25DbG9zZWQoY2UpOwotCQorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB3aGVuIGl0IGRldGVjdHMgYSBjb25uZWNpb24KICAgICAgKiByZWxhdGVkIGVycm9yLgogICAgICAqCi0gICAgICogQHBhcmFtCWUJRXhjZXB0aW9uIHRoYXQgaGFzIG9jY3VycmVkIGR1cmluZyBhbiBvcGVyYXRpb24gb24gdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KLSAgICAgKiBAcGFyYW0JY29ubkhvbGRlck9iamVjdAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGRldGVjdGVkIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQljb25uZWN0aW9uIGVycm9yCisgICAgICogQHBhcmFtICAgIGUgICAgRXhjZXB0aW9uIHRoYXQgaGFzIG9jY3VycmVkIGR1cmluZyBhbiBvcGVyYXRpb24gb24gdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gICAgY29ubkhvbGRlck9iamVjdCAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGRldGVjdGVkIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIGVycm9yCiAgICAgICovCi0gICAgdm9pZCBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChFeGNlcHRpb24gZSwgCisgICAgdm9pZCBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChFeGNlcHRpb24gZSwKICAgICAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyIGNvbm5Ib2xkZXJPYmplY3QpIHsKLQkgICAgCisKICAgICAgICAgIENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGNlbCA9IHRoaXMubGlzdGVuZXI7CiAgICAgICAgICBDb25uZWN0aW9uRXZlbnQgY2UgPSBudWxsOwogICAgICAgICAgY2UgPSBlID09IG51bGwgPyBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0VSUk9SX09DQ1VSUkVEKQogICAgICAgICAgICAgICAgICAgICA6IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fRVJST1JfT0NDVVJSRUQsIGUpOwogICAgICAgICAgaWYgKGNvbm5Ib2xkZXJPYmplY3QgIT0gbnVsbCkgewogICAgICAgICAgICAgIGNlLnNldENvbm5lY3Rpb25IYW5kbGUoY29ubkhvbGRlck9iamVjdCk7Ci0gICAgICAgICB9ICAgIAorICAgICAgICAgfQogCiAgICAgICAgICBjZWwuY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoY2UpOwogICAgICAgICAgaXNVc2FibGUgPSBmYWxzZTsKICAgICB9Ci0gICAgCi0gICAgCi0gICAgCisKKworCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hlbiBpdHMgc3RhcnQgbWV0aG9kCiAgICAgICogaGFzIGJlZW4gaW52b2tlZC4KQEAgLTYwNiw3ICs2MDYsNyBAQAogICAgICAgICAgICAgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoZSwgbnVsbCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aGVuIGl0cyBlbmQgbWV0aG9kCiAgICAgICogaGFzIGJlZW4gaW52b2tlZC4KQEAgLTYyMCw3ICs2MjAsNyBAQAogICAgICAgICAgICAgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoZSwgbnVsbCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgYSBDb25uZWN0aW9uIEhhbmRsZSB0byBjaGVjayBpZiBpdCBpcwogICAgICAqIHRoZSBhY3RpdmUgQ29ubmVjdGlvbiBIYW5kbGUuIElmIGl0IGlzIG5vdCB0aGUgYWN0aXZlIENvbm5lY3Rpb24KQEAgLTYyOSwyNCArNjI5LDI0IEBACiAgICAgICogQ29ubmVjdGlvbiBIYW5kbGUgb2JqZWN0IHRvIHRoaXMgb2JqZWN0IGlmIHRoZSBhY3RpdmUgQ29ubmVjdGlvbgogICAgICAqIEhhbmRsZSBpcyBudWxsLgogICAgICAqCi0gICAgICogQHBhcmFtCWNoCTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgcmVxdWVzdHMgdGhpcwotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHdoZXRoZXIKLSAgICAgKgkJCWl0IGNhbiBiZSBhY3RpdmUgb3Igbm90Ci0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JaW4gY2FzZSB0aGUgcGh5c2ljYWwgaXMgbm90IHZhbGlkIG9yCi0gICAgICoJCQkJdGhlcmUgaXMgYWxyZWFkeSBhbiBhY3RpdmUgY29ubmVjdGlvbiBoYW5kbGUKKyAgICAgKiBAcGFyYW0gICAgY2ggICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCByZXF1ZXN0cyB0aGlzCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugd2hldGhlcgorICAgICAqICAgICAgICAgICAgaXQgY2FuIGJlIGFjdGl2ZSBvciBub3QKKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBpbiBjYXNlIHRoZSBwaHlzaWNhbCBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICB0aGVyZSBpcyBhbHJlYWR5IGFuIGFjdGl2ZSBjb25uZWN0aW9uIGhhbmRsZQogICAgICAqLwotICAgICAKKwogICAgIHZvaWQgY2hlY2tJZkFjdGl2ZShDb25uZWN0aW9uSG9sZGVyIGNoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSB8fCBpc1VzYWJsZSA9PSBmYWxzZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbigiVGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHVzYWJsZSIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPT0gbnVsbCkgewogICAgICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNoOwogICAgICAgICAgICAgY2guc2V0QWN0aXZlKHRydWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgIT0gY2gpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGhhbmRsZSBjYW5ub3QgYmUgdXNlZCBhcyBhbm90aGVyIGNvbm5lY3Rpb24gaXMgY3VycmVudGx5IGFjdGl2ZSIpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhCmluZGV4IDIwZjAzYWEuLmY2NTBkNDEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiAvKioKICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzAzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgewogCkBAIC00MSw4MSArNDEsODEgQEAKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPglpZiBnZXR0aW5nIHRoZSBEYXRhYmFzZU1ldGFEYXRhIG9iamVjdCBmYWlscworICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiAgICBpZiBnZXR0aW5nIHRoZSBEYXRhYmFzZU1ldGFEYXRhIG9iamVjdCBmYWlscwogICAgICAqLwogICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhKE1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgICAgICAgICAgZG1kID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpLmdldE1ldGFEYXRhKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHByb2R1Y3QgbmFtZSBvZiB0aGUgdW5kZXJseWluZyBFSVMgaW5zdGFuY2UgY29ubmVjdGVkCiAgICAgICogdGhyb3VnaCB0aGUgTWFuYWdlZENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVByb2R1Y3QgbmFtZSBvZiB0aGUgRUlTIGluc3RhbmNlCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIFByb2R1Y3QgbmFtZSBvZiB0aGUgRUlTIGluc3RhbmNlCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEVJU1Byb2R1Y3ROYW1lKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0RGF0YWJhc2VQcm9kdWN0TmFtZSgpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kbmFtZSIsIHNxbGUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZG5hbWUiLCBzcWxlKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgdW5kZXJseWluZyBFSVMgaW5zdGFuY2UgY29ubmVjdGVkCiAgICAgICogdGhyb3VnaCB0aGUgTWFuYWdlZENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgRUlTIGluc3RhbmNlCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIFByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgRUlTIGluc3RhbmNlCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEVJU1Byb2R1Y3RWZXJzaW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0RGF0YWJhc2VQcm9kdWN0VmVyc2lvbigpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kdmVycyIsIHNxbGUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZHZlcnMiLCBzcWxlKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSwgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBtYXhpbXVtIGxpbWl0IG9uIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucwogICAgICAqIHRoYXQgYW4gRUlTIGluc3RhbmNlIGNhbiBzdXBwb3J0IGFjcm9zcyBjbGllbnQgcHJvY2Vzc2VzLgogICAgICAqCi0gICAgICogQHJldHVybglNYXhpbXVtIGxpbWl0IGZvciBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgTWF4aW11bSBsaW1pdCBmb3IgbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldE1heENvbm5lY3Rpb25zKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0TWF4Q29ubmVjdGlvbnMoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfbWF4Y29ubiIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfbWF4Y29ubiIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgbmFtZSBvZiB0aGUgdXNlciBhc3NvY2lhdGVkIHdpdGggdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLiBUaGUgbmFtZQogICAgICAqIGNvcnJlc3BvbmRzIHRvIHRoZSByZXNvdXJjZSBwcmluY2lwYWwgdW5kZXIgd2hvc2Ugd2hvc2Ugc2VjdXJpdHkgY29udGV4dCwgYSBjb25uZWN0aW9uCiAgICAgICogdG8gdGhlIEVJUyBpbnN0YW5jZSBoYXMgYmVlbiBlc3RhYmxpc2hlZC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbmFtZSBvZiB0aGUgdXNlcgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBuYW1lIG9mIHRoZSB1c2VyCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXJOYW1lKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgamFrYXJ0YS5yZXNvdXJjZS5zcGkuc2VjdXJpdHkuUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gbWMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCk7CiAgICAgICAgIGlmKHBjICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBwYy5nZXRVc2VyTmFtZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBtYy5nZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKS5nZXRVc2VyKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCmluZGV4IGRhZDFkNzcuLjQ4MmYzMzIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKQEAgLTI0LDE0OCArMjQsMTQ4IEBACiAvKioKICAqIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IHdyYXBwZXIgZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8yMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMjMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBYQVJlc291cmNlSW1wbCBpbXBsZW1lbnRzIFhBUmVzb3VyY2UgewogCiAgICAgWEFSZXNvdXJjZSB4YXI7CiAgICAgTWFuYWdlZENvbm5lY3Rpb24gbWM7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgWEFSZXNvdXJjZUltcGwKICAgICAgKgotICAgICAqIEBwYXJhbQl4YXIJPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4KLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHhhciAgICA8Y29kZT5YQVJlc291cmNlPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgWEFSZXNvdXJjZUltcGwoWEFSZXNvdXJjZSB4YXIsIE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7CiAgICAgICAgIHRoaXMueGFyID0geGFyOwogICAgICAgICB0aGlzLm1jID0gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IHRoZSBnbG9iYWwgdHJhbnNhY3Rpb24gc3BlY2lmaWVkIGJ5IHhpZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgotICAgICAqIEBwYXJhbQlvbmVQaGFzZQlJZiB0cnVlLCB0aGUgcmVzb3VyY2UgbWFuYWdlciBzaG91bGQgdXNlIGEgb25lLXBoYXNlIGNvbW1pdCAKLSAgICAgKiAgICAgICAJICAgICAgICAJcHJvdG9jb2wgdG8gY29tbWl0IHRoZSB3b3JrIGRvbmUgb24gYmVoYWxmIG9mIHhpZC4KKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcGFyYW0gICAgb25lUGhhc2UgICAgSWYgdHJ1ZSwgdGhlIHJlc291cmNlIG1hbmFnZXIgc2hvdWxkIHVzZSBhIG9uZS1waGFzZSBjb21taXQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgdG8gY29tbWl0IHRoZSB3b3JrIGRvbmUgb24gYmVoYWxmIG9mIHhpZC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoWGlkIHhpZCwgYm9vbGVhbiBvbmVQaGFzZSkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy90aGUgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQgY2FsbCBoYXMgY29tZSBoZXJlIGJlY2FzdWUKLQkvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdwotCS8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCi0JLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCi0JLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAotCS8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgotCW1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKKyAgICAvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAorICAgIC8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcworICAgIC8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKKyAgICAvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKKyAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgICAgICB4YXIuY29tbWl0KHhpZCwgb25lUGhhc2UpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVuZHMgdGhlIHdvcmsgcGVyZm9ybWVkIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQgCi0gICAgICoJCQl3YXMgdXNlZCBwcmV2aW91c2x5IGluIHRoZSBzdGFydCBtZXRob2QuCi0gICAgICogQHBhcmFtCWZsYWdzCU9uZSBvZiBUTVNVQ0NFU1MsIFRNRkFJTCwgb3IgVE1TVVNQRU5ECisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdAorICAgICAqICAgICAgICAgICAgd2FzIHVzZWQgcHJldmlvdXNseSBpbiB0aGUgc3RhcnQgbWV0aG9kLgorICAgICAqIEBwYXJhbSAgICBmbGFncyAgICBPbmUgb2YgVE1TVUNDRVNTLCBUTUZBSUwsIG9yIFRNU1VTUEVORAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVuZChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHhhci5lbmQoeGlkLCBmbGFncyk7CiAgICAgICAgIC8vR0pDSU5UCi0JLy9tYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIC8vbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUZWxsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIGZvcmdldCBhYm91dCBhIGhldXJpc3RpY2FsbHkgY29tcGxldGVkIHRyYW5zYWN0aW9uIGJyYW5jaC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGZvcmdldChYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICB4YXIuZm9yZ2V0KHhpZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogT2J0YWluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgc2V0IGZvciB0aGlzIAorICAgICAqIE9idGFpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIHNldCBmb3IgdGhpcwogICAgICAqIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgl0aGUgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzCisgICAgICogQHJldHVybiAgICB0aGUgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRUcmFuc2FjdGlvblRpbWVvdXQoKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLmdldFRyYW5zYWN0aW9uVGltZW91dCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UgCi0gICAgICogcmVwcmVzZW50ZWQgYnkgdGhlIHRhcmdldCBvYmplY3QgaXMgdGhlIHNhbWUgYXMgdGhlIHJlc291Y2UgbWFuYWdlciAKKyAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlCisgICAgICogcmVwcmVzZW50ZWQgYnkgdGhlIHRhcmdldCBvYmplY3QgaXMgdGhlIHNhbWUgYXMgdGhlIHJlc291Y2UgbWFuYWdlcgogICAgICAqIGluc3RhbmNlIHJlcHJlc2VudGVkIGJ5IHRoZSBwYXJhbWV0ZXIgeGFyZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGFyZXMJQW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdob3NlIHJlc291cmNlIG1hbmFnZXIgCi0gICAgICogCQkJaW5zdGFuY2UgaXMgdG8gYmUgY29tcGFyZWQgd2l0aCB0aGUgcmVzb3VyY2UKLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgaXQncyB0aGUgc2FtZSBSTSBpbnN0YW5jZTsgb3RoZXJ3aXNlIGZhbHNlLgorICAgICAqIEBwYXJhbSAgICB4YXJlcyAgICBBbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hvc2UgcmVzb3VyY2UgbWFuYWdlcgorICAgICAqICAgICAgICAgICAgIGluc3RhbmNlIGlzIHRvIGJlIGNvbXBhcmVkIHdpdGggdGhlIHJlc291cmNlCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIGl0J3MgdGhlIHNhbWUgUk0gaW5zdGFuY2U7IG90aGVyd2lzZSBmYWxzZS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1NhbWVSTShYQVJlc291cmNlIHhhcmVzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLmlzU2FtZVJNKHhhcmVzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBBc2sgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gcHJlcGFyZSBmb3IgYSB0cmFuc2FjdGlvbiBjb21taXQgCisgICAgICogQXNrIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIHByZXBhcmUgZm9yIGEgdHJhbnNhY3Rpb24gY29tbWl0CiAgICAgICogb2YgdGhlIHRyYW5zYWN0aW9uIHNwZWNpZmllZCBpbiB4aWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKLSAgICAgKiBAcmV0dXJuCUEgdmFsdWUgaW5kaWNhdGluZyB0aGUgcmVzb3VyY2UgbWFuYWdlcidzIHZvdGUgb24gdGhlIAotICAgICAqCQlvdXRjb21lIG9mIHRoZSB0cmFuc2FjdGlvbi4gVGhlIHBvc3NpYmxlIHZhbHVlcwotICAgICAqCQlhcmU6IFhBX1JET05MWSBvciBYQV9PSy4gSWYgdGhlIHJlc291cmNlIG1hbmFnZXIgd2FudHMgCi0gICAgICoJCXRvIHJvbGwgYmFjayB0aGUgdHJhbnNhY3Rpb24sIGl0IHNob3VsZCBkbyBzbwotICAgICAqCQlieSByYWlzaW5nIGFuIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPiBpbiB0aGUgcHJlcGFyZSBtZXRob2QuCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHJldHVybiAgICBBIHZhbHVlIGluZGljYXRpbmcgdGhlIHJlc291cmNlIG1hbmFnZXIncyB2b3RlIG9uIHRoZQorICAgICAqICAgICAgICBvdXRjb21lIG9mIHRoZSB0cmFuc2FjdGlvbi4gVGhlIHBvc3NpYmxlIHZhbHVlcworICAgICAqICAgICAgICBhcmU6IFhBX1JET05MWSBvciBYQV9PSy4gSWYgdGhlIHJlc291cmNlIG1hbmFnZXIgd2FudHMKKyAgICAgKiAgICAgICAgdG8gcm9sbCBiYWNrIHRoZSB0cmFuc2FjdGlvbiwgaXQgc2hvdWxkIGRvIHNvCisgICAgICogICAgICAgIGJ5IHJhaXNpbmcgYW4gYXBwcm9wcmlhdGUgPGNvZGU+WEFFeGNlcHRpb248L2NvZGU+IGluIHRoZSBwcmVwYXJlIG1ldGhvZC4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IHByZXBhcmUoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5wcmVwYXJlKHhpZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogT2J0YWluIGEgbGlzdCBvZiBwcmVwYXJlZCB0cmFuc2FjdGlvbiBicmFuY2hlcyBmcm9tIGEgcmVzb3VyY2UgbWFuYWdlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlmbGFnCU9uZSBvZiBUTVNUQVJUUlNDQU4sIFRNRU5EUlNDQU4sIFRNTk9GTEFHUy4gVE1OT0ZMQUdTIAotICAgICAqCQkJbXVzdCBiZSB1c2VkIHdoZW4gbm8gb3RoZXIgZmxhZ3MgYXJlIHNldCBpbiBmbGFncy4KLSAgICAgKiBAcmV0dXJuCVRoZSByZXNvdXJjZSBtYW5hZ2VyIHJldHVybnMgemVybyBvciBtb3JlIFhJRHMgZm9yIHRoZSB0cmFuc2FjdGlvbiAKLSAgICAgKgkJYnJhbmNoZXMgdGhhdCBhcmUgY3VycmVudGx5IGluIGEgcHJlcGFyZWQgb3IgaGV1cmlzdGljYWxseSAKLSAgICAgKgkJY29tcGxldGVkIHN0YXRlLiBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBvcGVyYXRpb24sIHRoZSByZXNvdXJjZQotICAgICAqCQltYW5hZ2VyIHNob3VsZCB0aHJvdyB0aGUgYXBwcm9wcmlhdGUgPGNvZGU+WEFFeGNlcHRpb248L2NvZGU+LgorICAgICAqIEBwYXJhbSAgICBmbGFnICAgIE9uZSBvZiBUTVNUQVJUUlNDQU4sIFRNRU5EUlNDQU4sIFRNTk9GTEFHUy4gVE1OT0ZMQUdTCisgICAgICogICAgICAgICAgICBtdXN0IGJlIHVzZWQgd2hlbiBubyBvdGhlciBmbGFncyBhcmUgc2V0IGluIGZsYWdzLgorICAgICAqIEByZXR1cm4gICAgVGhlIHJlc291cmNlIG1hbmFnZXIgcmV0dXJucyB6ZXJvIG9yIG1vcmUgWElEcyBmb3IgdGhlIHRyYW5zYWN0aW9uCisgICAgICogICAgICAgIGJyYW5jaGVzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBhIHByZXBhcmVkIG9yIGhldXJpc3RpY2FsbHkKKyAgICAgKiAgICAgICAgY29tcGxldGVkIHN0YXRlLiBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBvcGVyYXRpb24sIHRoZSByZXNvdXJjZQorICAgICAqICAgICAgICBtYW5hZ2VyIHNob3VsZCB0aHJvdyB0aGUgYXBwcm9wcmlhdGUgPGNvZGU+WEFFeGNlcHRpb248L2NvZGU+LgogICAgICAqLwogICAgIHB1YmxpYyBYaWRbXSByZWNvdmVyKGludCBmbGFnKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnJlY292ZXIoZmxhZyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogSW5mb3JtIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIHJvbGwgYmFjayB3b3JrIGRvbmUgb24gYmVoYWxmIG9mIGEgdHJhbnNhY3Rpb24gYnJhbmNoCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjayhYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICAvL3RoZSBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCBjYWxsIGhhcyBjb21lIGhlcmUgYmVjYXN1ZQotCS8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93Ci0JLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKLQkvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKLQkvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCi0JLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCisgICAgLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKKyAgICAvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAorICAgIC8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcworICAgIC8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKKyAgICAvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKICAgICAgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICAgICAgeGFyLnJvbGxiYWNrKHhpZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgZm9yIHRoaXMgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2Vjb25kcwl0aGUgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzLgotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGlzIHNldCBzdWNjZXNzZnVsbHk7IG90aGVyd2lzZSBmYWxzZS4KKyAgICAgKiBAcGFyYW0gICAgc2Vjb25kcyAgICB0aGUgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzLgorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGlzIHNldCBzdWNjZXNzZnVsbHk7IG90aGVyd2lzZSBmYWxzZS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBzZXRUcmFuc2FjdGlvblRpbWVvdXQoaW50IHNlY29uZHMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KHNlY29uZHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFN0YXJ0IHdvcmsgb24gYmVoYWxmIG9mIGEgdHJhbnNhY3Rpb24gYnJhbmNoIHNwZWNpZmllZCBpbiB4aWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZQotICAgICAqIEByZXR1cm4JZmxhZ3MJT25lIG9mIFRNTk9GTEFHUywgVE1KT0lOLCBvciBUTVJFU1VNRQorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc291cmNlCisgICAgICogQHJldHVybiAgICBmbGFncyAgICBPbmUgb2YgVE1OT0ZMQUdTLCBUTUpPSU4sIG9yIFRNUkVTVU1FCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RhcnQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICAvL0dKQ0lOVApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL2J1aWxkLnhtbAppbmRleCA5Njc4NjhiLi42NDEwNTU3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iJHtnamMuaG9tZX0iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy9zcGkiLz4KLSAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0zNyw1ICszNyw1IEBACiAKICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQiLz4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YQppbmRleCBjZTMyMWFmLi45ZTdmMjUzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKQEAgLTI2LDggKzI2LDggQEAKIC8qKgogICogRXhlY3V0ZSB0aGUgbWV0aG9kcyBiYXNlZCBvbiB0aGUgcGFyYW1ldGVycy4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIE1ldGhvZEV4ZWN1dG9yIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAKQEAgLTM5LDEzMCArMzksMTMwIEBACiAgICAgLyoqCiAgICAgICogRXhjZXV0ZSBhIHNpbXBsZSBzZXQgTWV0aG9kLgogICAgICAqCi0gICAgICogQHBhcmFtCXZhbHVlCVZhbHVlIHRvIGJlIHNldC4KLSAgICAgKiBAcGFyYW0JbWV0aG9kCTxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQlvYmoJT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCisgICAgICogQHBhcmFtICAgIHZhbHVlICAgIFZhbHVlIHRvIGJlIHNldC4KKyAgICAgKiBAcGFyYW0gICAgbWV0aG9kICAgIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvYmogICAgT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLiAgICAgCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJ1bkphdmFCZWFuTWV0aG9kKFN0cmluZyB2YWx1ZSwgTWV0aG9kIG1ldGhvZCwgT2JqZWN0IG9iaikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlpZiAodmFsdWU9PW51bGwgfHwgdmFsdWUudHJpbSgpLmVxdWFscygiIikpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAl0cnkgewotICAgIAkgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0gICAgCSAgICBpZiAoIHBhcmFtZXRlcnMubGVuZ3RoID09IDEpIHsKLSAgICAJICAgICAgICBPYmplY3RbXSB2YWx1ZXMgPSBuZXcgT2JqZWN0WzFdOwotICAgIAkgICAgCXZhbHVlc1swXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbMF0sIHZhbHVlKTsKLSAgICAJICAgIAltZXRob2QuaW52b2tlKG9iaiwgdmFsdWVzKTsKLSAgICAJICAgIH0KLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfQorICAgICAgICBpZiAodmFsdWU9PW51bGwgfHwgdmFsdWUudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7CisgICAgICAgICAgICBpZiAoIHBhcmFtZXRlcnMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgICAgICBPYmplY3RbXSB2YWx1ZXMgPSBuZXcgT2JqZWN0WzFdOworICAgICAgICAgICAgICAgIHZhbHVlc1swXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbMF0sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBtZXRob2QuaW52b2tlKG9iaiwgdmFsdWVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogRXhlY3V0ZXMgdGhlIG1ldGhvZC4gICAgIAorICAgICAqIEV4ZWN1dGVzIHRoZSBtZXRob2QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWV0aG9kIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQlvYmoJT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCi0gICAgICogQHBhcmFtCXZhbHVlcwlQYXJhbWV0ZXIgdmFsdWVzIGZvciBleGVjdXRpbmcgdGhlIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgbWV0aG9kIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvYmogICAgT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCisgICAgICogQHBhcmFtICAgIHZhbHVlcyAgICBQYXJhbWV0ZXIgdmFsdWVzIGZvciBleGVjdXRpbmcgdGhlIG1ldGhvZC4KICAgICAgKiBAdGhyb3dzICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4sIGluIGNhc2Ugb2YgdGhlIG1pc21hdGNoIG9mIHBhcmFtZXRlciB2YWx1ZXMgb3IKLSAgICAgKgkJYSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJ1bk1ldGhvZChNZXRob2QgbWV0aG9kLCBPYmplY3Qgb2JqLCBWZWN0b3IgdmFsdWVzKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCXRyeSB7Ci0JICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotCSAgICBpZiAodmFsdWVzLnNpemUoKSAhPSBwYXJhbWV0ZXJzLmxlbmd0aCkgewotCSAgICAgICAgcmV0dXJuOwotCSAgICB9Ci0gICAgCSAgICBPYmplY3RbXSBhY3R1YWxWYWx1ZXMgPSBuZXcgT2JqZWN0W3BhcmFtZXRlcnMubGVuZ3RoXTsKLSAgICAJICAgIGZvciAoaW50IGkgPTA7IGk8cGFyYW1ldGVycy5sZW5ndGggOyBpKyspIHsKLSAgICAJICAgIAlTdHJpbmcgdmFsID0gKFN0cmluZykgdmFsdWVzLmdldChpKTsKLSAgICAJICAgIAlpZiAodmFsLnRyaW0oKS5lcXVhbHMoIk5VTEwiKSkgewotICAgIAkgICAgCSAgICBhY3R1YWxWYWx1ZXNbaV0gPSBudWxsOwotICAgIAkgICAgCX0gZWxzZSB7Ci0gICAgCSAgICAJICAgIGFjdHVhbFZhbHVlc1tpXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbaV0sIHZhbCk7Ci0gICAgCSAgICAJfQotICAgIAkgICAgfQotICAgIAkgICAgbWV0aG9kLmludm9rZShvYmosIGFjdHVhbFZhbHVlcyk7Ci0gICAgCX1jYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfQorICAgICAgICB0cnkgeworICAgICAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKKyAgICAgICAgaWYgKHZhbHVlcy5zaXplKCkgIT0gcGFyYW1ldGVycy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgT2JqZWN0W10gYWN0dWFsVmFsdWVzID0gbmV3IE9iamVjdFtwYXJhbWV0ZXJzLmxlbmd0aF07CisgICAgICAgICAgICBmb3IgKGludCBpID0wOyBpPHBhcmFtZXRlcnMubGVuZ3RoIDsgaSsrKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHZhbCA9IChTdHJpbmcpIHZhbHVlcy5nZXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbC50cmltKCkuZXF1YWxzKCJOVUxMIikpIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsVmFsdWVzW2ldID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhY3R1YWxWYWx1ZXNbaV0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzW2ldLCB2YWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1ldGhvZC5pbnZva2Uob2JqLCBhY3R1YWxWYWx1ZXMpOworICAgICAgICB9Y2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnZlcnRzIHRoZSB0eXBlIGZyb20gU3RyaW5nIHRvIHRoZSBDbGFzcyB0eXBlLgogICAgICAqCi0gICAgICogQHBhcmFtCXR5cGUJCUNsYXNzIG5hbWUgdG8gd2hpY2ggdGhlIGNvbnZlcnNpb24gaXMgcmVxdWlyZWQuCi0gICAgICogQHBhcmFtCXBhcmFtZXRlcglTdHJpbmcgdmFsdWUgdG8gYmUgY29udmVydGVkLgotICAgICAqIEByZXR1cm4JQ29udmVydGVkIHZhbHVlLgorICAgICAqIEBwYXJhbSAgICB0eXBlICAgICAgICBDbGFzcyBuYW1lIHRvIHdoaWNoIHRoZSBjb252ZXJzaW9uIGlzIHJlcXVpcmVkLgorICAgICAqIEBwYXJhbSAgICBwYXJhbWV0ZXIgICAgU3RyaW5nIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KKyAgICAgKiBAcmV0dXJuICAgIENvbnZlcnRlZCB2YWx1ZS4KICAgICAgKiBAdGhyb3dzICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4sIGluIGNhc2Ugb2YgdGhlIG1pc21hdGNoIG9mIHBhcmFtZXRlciB2YWx1ZXMgb3IKLSAgICAgKgkJYSBzZWN1cml0eSB2aW9sYXRpb24uICAgICAKKyAgICAgKiAgICAgICAgYSBzZWN1cml0eSB2aW9sYXRpb24uCiAgICAgICovCiAgICAgcHJpdmF0ZSBPYmplY3QgY29udmVydFR5cGUoQ2xhc3MgdHlwZSwgU3RyaW5nIHBhcmFtZXRlcikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAl0cnkgewotICAgIAkgICAgU3RyaW5nIHR5cGVOYW1lID0gdHlwZS5nZXROYW1lKCk7Ci0gICAgCSAgICBpZiAoIHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlN0cmluZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLk9iamVjdCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIHBhcmFtZXRlcjsKLSAgICAJICAgIH0KLSAgICAJCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJpbnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5JbnRlZ2VyIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEludGVnZXIocGFyYW1ldGVyKTsKLSAgICAJICAgIH0KLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygic2hvcnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TaG9ydCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBTaG9ydChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJieXRlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQnl0ZSIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBCeXRlKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImxvbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Mb25nIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IExvbmcocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJmbG9hdCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkZsb2F0IikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEZsb2F0KHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImRvdWJsZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkRvdWJsZSIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBEb3VibGUocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdEZWNpbWFsIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0ludGVnZXIiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJib29sZWFuIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQm9vbGVhbiIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBCb29sZWFuKHBhcmFtZXRlcik7Ci0gICAgICAgICAgICB9CQkKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFN0cmluZyB0eXBlTmFtZSA9IHR5cGUuZ2V0TmFtZSgpOworICAgICAgICAgICAgaWYgKCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TdHJpbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5PYmplY3QiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7CisgICAgICAgICAgICB9CiAKLSAgICAJICAgIHJldHVybiBwYXJhbWV0ZXI7Ci0gICAgCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbmZlIiwgcGFyYW1ldGVyKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihwYXJhbWV0ZXIrIjogTm90IGEgdmFsaWQgdmFsdWUgZm9yIHRoaXMgbWV0aG9kICIpOwotICAgIAl9CisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJpbnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5JbnRlZ2VyIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEludGVnZXIocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygic2hvcnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TaG9ydCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTaG9ydChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJieXRlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQnl0ZSIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCeXRlKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImxvbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Mb25nIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExvbmcocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZmxvYXQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5GbG9hdCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJkb3VibGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Eb3VibGUiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRG91YmxlKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdEZWNpbWFsIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdJbnRlZ2VyIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJvb2xlYW4iKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Cb29sZWFuIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJvb2xlYW4ocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcjsKKyAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19uZmUiLCBwYXJhbWV0ZXIpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHBhcmFtZXRlcisiOiBOb3QgYSB2YWxpZCB2YWx1ZSBmb3IgdGhpcyBtZXRob2QgIik7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCmluZGV4IGZjMTQ5YmYuLmYwMDhlN2YgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKQEAgLTI5LDM2ICsyOSwzNiBAQAogLyoqCiAgKiBTZWN1cml0eVV0aWxzIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjIKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIyCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgU2VjdXJpdHlVdGlscyB7CiAKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCwgZ2l2ZW4gCi0gICAgICogdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIHN1YmplY3QgYW5kIHRoZSAKLSAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+LiBJdCBmaXJzdCBjaGVja3MgaWYgdGhlIAotICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gaXMgbnVsbCBvciBub3QuIElmIGl0IGlzIG5vdCBudWxsLCAKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCwgZ2l2ZW4KKyAgICAgKiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgc3ViamVjdCBhbmQgdGhlCisgICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPi4gSXQgZmlyc3QgY2hlY2tzIGlmIHRoZQorICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gaXMgbnVsbCBvciBub3QuIElmIGl0IGlzIG5vdCBudWxsLAogICAgICAqIGl0IGNvbnN0cnVjdHMgYSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCB3aXRoCiAgICAgICogdGhlIHVzZXIgYW5kIHBhc3N3b3JkIGZpZWxkcyBmcm9tIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGFuZCByZXR1cm5zIHRoaXMKLSAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdC4gSWYgdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gCi0gICAgICogaXMgbnVsbCwgaXQgcmV0cmlldmVzIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdHMgZnJvbSAKKyAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdC4gSWYgdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KKyAgICAgKiBpcyBudWxsLCBpdCByZXRyaWV2ZXMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0cyBmcm9tCiAgICAgICogdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IHBhcmFtZXRlciBhbmQgcmV0dXJucyB0aGUgZmlyc3QKLSAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCB3aGljaCBjb250YWlucyBhIAorICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGEKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBpbnN0YW5jZSBlcXVpdmFsZW50CiAgICAgICogdG8gdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIHBhcmFtZXRlci4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+Ci0gICAgICogQHBhcmFtCWluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgotICAgICAqIEByZXR1cm4JPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CWdlbmVyaWMgZXhjZXB0aW9uIGlmIG9wZXJhdGlvbiBmYWlscwotICAgICAqIEB0aHJvd3MJPGNvZGU+U2VjdXJpdHlFeGNlcHRpb248L2NvZGU+CWlmIGFjY2VzcyB0byB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgaXMgZGVuaWVkCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgaW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gICAgZ2VuZXJpYyBleGNlcHRpb24gaWYgb3BlcmF0aW9uIGZhaWxzCisgICAgICogQHRocm93cyAgICA8Y29kZT5TZWN1cml0eUV4Y2VwdGlvbjwvY29kZT4gICAgaWYgYWNjZXNzIHRvIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBpcyBkZW5pZWQKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIFBhc3N3b3JkQ3JlZGVudGlhbCBnZXRQYXNzd29yZENyZWRlbnRpYWwoZmluYWwgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiwKICAgICAgICAgIGZpbmFsIFN1YmplY3Qgc3ViamVjdCwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAKLQlpZiAoaW5mbyA9PSBudWxsKSB7CisgICAgaWYgKGluZm8gPT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKHN1YmplY3QgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTg5LDE0ICs4OSwxNCBAQAogICAgICAgICAgICAgcmV0dXJuIHBjOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0cnVlIGlmIHR3byBzdHJpbmdzIGFyZSBlcXVhbDsgZmFsc2Ugb3RoZXJ3aXNlCi0gICAgICogCi0gICAgICogQHBhcmFtCXN0cjEJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBwYXJhbQlzdHIyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHR3byBzdHJpbmdzIGFyZSBlcXVhbAotICAgICAqICAgICAgICAJZmFsc2UJb3RoZXJ3aXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3RyMSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHN0cjIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgdHdvIHN0cmluZ3MgYXJlIGVxdWFsCisgICAgICogICAgICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBzdGF0aWMgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoU3RyaW5nIHN0cjEsIFN0cmluZyBzdHIyKSB7CiAgICAgICAgIGlmIChzdHIxID09IG51bGwpIHsKQEAgLTEwOSwxMCArMTA5LDEwIEBACiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0cnVlIGlmIHR3byA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdHMgYXJlIGVxdWFsOyBmYWxzZSBvdGhlcndpc2UKICAgICAgKgotICAgICAqIEBwYXJhbQlwQzEJPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqIEBwYXJhbQlwQzIJPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgdHdvIFBhc3N3b3JkQ3JlZGVudGlhbHMgYXJlIGVxdWFsCi0gICAgICogICAgICAgIAlmYWxzZQlvdGhlcndpc2UKKyAgICAgKiBAcGFyYW0gICAgcEMxICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcEMyICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHR3byBQYXNzd29yZENyZWRlbnRpYWxzIGFyZSBlcXVhbAorICAgICAqICAgICAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgc3RhdGljIHB1YmxpYyBib29sZWFuIGlzUGFzc3dvcmRDcmVkZW50aWFsRXF1YWwoUGFzc3dvcmRDcmVkZW50aWFsIHBDMSwgUGFzc3dvcmRDcmVkZW50aWFsIHBDMikgewogICAgICAgICBpZiAocEMxID09IHBDMikKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbAppbmRleCBhNTViYmYwLi5mMDYwZTdkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIuIiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvdXRpbCIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0zMyw3ICszMyw3IEBACiAgICAgICA8amFyIGphcmZpbGU9IiR7ZGlzdC5kaXJ9LyR7cGtnLmRpcn0vdXRpbC5qYXIiIGJhc2VkaXI9IiR7Y2xhc3MuZGlyfSIKICAgICAgICAgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTMiIGRlcGVuZHM9ImNvbXBpbGUiLz4KICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTQiIGRlcGVuZHM9ImNvbXBpbGUiLz4KIApAQCAtNDQsNSArNDQsNSBAQAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCwgcGFja2FnZTE0Ii8+CiAKICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgotICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhCmluZGV4IGJjN2I1NWQuLjk4OTJmZjYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEKQEAgLTE3LDE2ICsxNywxNiBAQAogcGFja2FnZSBzYW1wbGVzLmVqYi5zdWJjbGFzc2luZy5zZXJ2bGV0OwogCiBpbXBvcnQgamF2YS5pby4qOwotaW1wb3J0IGphdmEudXRpbC4qOyAKLWltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsgCi1pbXBvcnQgamF2YXgubmFtaW5nLio7IAotaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7IAotaW1wb3J0IGpha2FydGEuZWpiLio7IAoraW1wb3J0IGphdmEudXRpbC4qOworaW1wb3J0IGpha2FydGEuc2VydmxldC4qOworaW1wb3J0IGphdmF4Lm5hbWluZy4qOworaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7CitpbXBvcnQgamFrYXJ0YS5lamIuKjsKIAotaW1wb3J0IHNhbXBsZXMuZWpiLnN1YmNsYXNzaW5nLmVqYi4qOyAKK2ltcG9ydCBzYW1wbGVzLmVqYi5zdWJjbGFzc2luZy5lamIuKjsKIGltcG9ydCBjb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW47CiAKLXB1YmxpYyBjbGFzcyBTaW1wbGVCYW5rU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsgIAorcHVibGljIGNsYXNzIFNpbXBsZUJhbmtTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAKICAgSW5pdGlhbENvbnRleHQgaW5pdENvbnRleHQgPSBudWxsOwpAQCAtNDIsMTQgKzQyLDE0IEBACiAgIHsKICAgfQogCi0gIHB1YmxpYyB2b2lkIGRvR2V0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSAKLSAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgCisgIHB1YmxpYyB2b2lkIGRvR2V0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQorICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7Ci0gIH0gIAorICB9CiAKLSAgLyoqIGhhbmRsZXMgdGhlIEhUVFAgUE9TVCBvcGVyYXRpb24gKiovIAotICBwdWJsaWMgdm9pZCBkb1Bvc3QgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIAotICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAKKyAgLyoqIGhhbmRsZXMgdGhlIEhUVFAgUE9TVCBvcGVyYXRpb24gKiovCisgIHB1YmxpYyB2b2lkIGRvUG9zdCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKKyAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICBkb0xvb2t1cCgpOwogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2ltcGxlQmFua1NlcnZsZXQgaXMgZXhlY3V0aW5nIik7CiAgICAgU3RyaW5nIFNTTiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJTU04iKTsKQEAgLTY1LDE0ICs2NSwxNCBAQAogICAgIFN0cmluZyB6aXBDb2RlID0gIiI7CiAgICAgbG9uZyBjdXJyZW50U2F2aW5nc0JhbGFuY2UgPSAwOwogICAgIGxvbmcgY3VycmVudENoZWNraW5nQmFsYW5jZSA9IDA7Ci0gICAgIAorCiAgICAgU3RyaW5nIGFjdGlvbiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJhY3Rpb24iKTsKICAgICBpZiAoYWN0aW9uLmVxdWFscygiQ3JlYXRlIikpCiAgICAgewogICAgICAgbWVzc2FnZSA9ICJBZGQgQ3VzdG9tZXIiOwogICAgICAganNwID0gIi9TaW1wbGVCYW5rQWRkLmpzcCI7CiAgICAgfQotICAgIGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoIkFkZCBDdXN0b21lciIpKSAKKyAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJBZGQgQ3VzdG9tZXIiKSkKICAgICB7CiAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFkZCBDdXN0b21lciBidXR0b24gcHJlc3NlZCIpOwogICAgICAgU1NOID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoIlNTTiIpOwpAQCAtODksNyArODksNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSBjdXN0b21lclNhdmluZ3NMb2NhbEhvbWUuY3JlYXRlKFNTTiwgbGFzdE5hbWUsIGZpcnN0TmFtZSwgYWRkcmVzczEsIGFkZHJlc3MyLCBjaXR5LCBzdGF0ZSwgemlwQ29kZSk7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBjcmVhdGUgdGhlIGN1c3RvbWVyIHNhdmluZ3MgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIG1lc3NhZ2UgPSAiQ3VzdG9tZXIgQWRkZWQuIjsKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSBjdXN0b21lclNhdmluZ3NMb2NhbEhvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZmluZCB0aGUgY3VzdG9tZXIgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIGpzcCA9ICIvU2ltcGxlQmFua0VkaXQuanNwIjsKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSBjdXN0b21lclNhdmluZ3NMb2NhbEhvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZmluZCB0aGUgY3VzdG9tZXIgc2F2aW5ncyByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogICAgICAgbWVzc2FnZSA9ICJEZWxldGUgQ3VzdG9tZXIiOwpAQCAtMTI2LDEyICsxMjYsMTIgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzTG9jYWxIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKS5yZW1vdmUoKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGRlbGV0ZSB0aGUgY3VzdG9tZXIgc2F2aW5ncyBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBtZXNzYWdlID0gIkN1c3RvbWVyIERlbGV0ZWQuIjsKICAgICAgIGpzcCA9ICIvU2ltcGxlQmFua01lc3NhZ2UuanNwIjsKLSAgICB9ICAKKyAgICB9CiAKIAogICAgIGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoIlVwZGF0ZSIpKQpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5ncyA9IChDdXN0b21lclNhdmluZ3MpY3VzdG9tZXJTYXZpbmdzTG9jYWxIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIHNhdmluZ3MgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KIApAQCAtMTUwLDcgKzE1MCw3IEBACiAgICAgICAgIGN1c3RvbWVyQ2hlY2tpbmcgPSAoQ3VzdG9tZXJDaGVja2luZyljdXN0b21lckNoZWNraW5nTG9jYWxIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIGNoZWNraW5nIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAKQEAgLTIxMCw5ICsyMTAsOSBAQAogICAgIFJlcXVlc3REaXNwYXRjaGVyIGRpc3BhdGNoZXIgPSBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldFJlcXVlc3REaXNwYXRjaGVyKGpzcCk7CiAgICAgZGlzcGF0Y2hlci5pbmNsdWRlKHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICByZXR1cm47Ci0gIH0gCisgIH0KIAotICBwdWJsaWMgdm9pZCBkb0xvb2t1cCgpIAorICBwdWJsaWMgdm9pZCBkb0xvb2t1cCgpCiAgIHsKICAgICB0cnkgewogICAgICAgaW5pdENvbnRleHQgPSBuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbAppbmRleCBkZjlkZjM0Li4zM2E3MDY5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3NxbC9kcm9wQmFua1RhYmxlcy5zcWwKQEAgLTEgKzEgQEAKLWRyb3AgdGFibGUgY3VzdG9tZXIyOw0KK2Ryb3AgdGFibGUgY3VzdG9tZXIyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKaW5kZXggMjFiZTA2Mi4uYjc0MWZlZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCkBAIC03Miw0ICs3Miw0IEBACiAgICAgICA8cHJvcGVydHkgbmFtZT0iUmVzZXRDb250cm9sIiB2YWx1ZT0iQkVHSU5OSU5HIi8+CiAgICAgPC9hZG1pbi1vYmplY3QtcmVzb3VyY2U+LS0+CiAKLTwvcmVzb3VyY2VzPiAKKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWdmLXJlc291cmNlcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9NRVRBLUlORi9lamItZ2YtcmVzb3VyY2VzLnhtbAppbmRleCAwNDViZjE1Li43OTU0OWJiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9NRVRBLUlORi9lamItZ2YtcmVzb3VyY2VzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9NRVRBLUlORi9lamItZ2YtcmVzb3VyY2VzLnhtbApAQCAtNzIsNCArNzIsNCBAQAogCiAKICAgICA8amRiYy1yZXNvdXJjZSBlbmFibGVkPSJ0cnVlIiBqbmRpLW5hbWU9ImphdmE6bW9kdWxlL2pkYmMvbW9uaXRvcmluZy1kcyIgb2JqZWN0LXR5cGU9InVzZXIiIHBvb2wtbmFtZT0iamF2YTptb2R1bGUvamRiYy9tb25pdG9yaW5nLXBvb2wiLz4KLTwvcmVzb3VyY2VzPiAKKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbAppbmRleCA1ODJiNzgxLi4xMmZiNmQzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbApAQCAtMTE0LDggKzExNCw4IEBACiAgICAgICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KLQk8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CisgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+CisgICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPHNlY3VyaXR5LWlkZW50aXR5PgogICAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eS8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKaW5kZXggYjg4YTg2OC4uNjliMDE0OSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbApAQCAtMzIsNyArMzIsNyBAQAogICAgICAgICAgICAgVGVzdEludGVnZXJQcm9wCiAgICAgICAgICAgPC9hY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgIDxhY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgICAgIDIgCisgICAgICAgICAgICAyCiAgICAgICAgICAgPC9hY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgPC9hY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPC9hY3RpdmF0aW9uLWNvbmZpZz4KQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+CiAgICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxqbmRpLW5hbWU+amF2YTptb2R1bGUvZWlzL3Rlc3RBZG1pbjwvam5kaS1uYW1lPgorICAgIDxqbmRpLW5hbWU+amF2YTptb2R1bGUvZWlzL3Rlc3RBZG1pbjwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPGdlbi1jbGFzc2VzLz4KICAgICA8L2VqYj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvc3JjL01FVEEtSU5GL3dlYi1nZi1yZXNvdXJjZXMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvTUVUQS1JTkYvd2ViLWdmLXJlc291cmNlcy54bWwKaW5kZXggODEwNWExNS4uNjJkZjE2NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvTUVUQS1JTkYvd2ViLWdmLXJlc291cmNlcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvTUVUQS1JTkYvd2ViLWdmLXJlc291cmNlcy54bWwKQEAgLTY3LDQgKzY3LDQgQEAKIAogICAgIDxqZGJjLXJlc291cmNlIGVuYWJsZWQ9InRydWUiIGpuZGktbmFtZT0iamF2YTptb2R1bGUvamRiYy9tb25pdG9yaW5nLWRzIiBvYmplY3QtdHlwZT0idXNlciIgcG9vbC1uYW1lPSJqYXZhOm1vZHVsZS9qZGJjL21vbml0b3JpbmctcG9vbCIvPgogICAgIDxqZGJjLXJlc291cmNlIGVuYWJsZWQ9InRydWUiIGpuZGktbmFtZT0iamF2YTptb2R1bGUvamRiYy93ZWItbGV2ZWwtZHMiIG9iamVjdC10eXBlPSJ1c2VyIiBwb29sLW5hbWU9ImphdmE6bW9kdWxlL2pkYmMvd2ViLWxldmVsLXBvb2wiLz4KLTwvcmVzb3VyY2VzPiAKKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKaW5kZXggOTliZjI1ZC4uY2IzNzg4YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAKICAgICBwdWJsaWMgTWVzc2FnZUNoZWNrZXJFSkIoKSB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYmVhbiBjcmVhdGVkIik7CiAgICAgICAgIGhlbGRDb24gPSBudWxsOwpAQCAtMTI2LDExICsxMjYsMTEgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgLy9UZWxsIHRoZSByZXNvdXJjZSBhZGFwdGVyIHRoZSBjbGllbnQgaXMgcmVhZHkgdG8gcnVuCi0gICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeUFsbCgpOyAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5QWxsKCk7CisKICAgICAgICAgICAgICAgICBkZWJ1ZygiTk9USUZJRUQuLi4gU1RBUlQgV0FJVElORyIpOwogICAgICAgICAgICAgICAgIC8vV2FpdCB1bnRpbCBiZWluZyB0b2xkIHRvIHJlYWQgZnJvbSB0aGUgZGF0YWJhc2UKLSAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkud2FpdCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkud2FpdCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTQ5LDIyICsxNDksMjIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE1lc3NhZ2VDb3VudCgpIHsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGdldEZyZXNoQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgaW50IGNvdW50MSA9IGdldENvdW50KGNvbik7CiAgICAgICAgICAgICBjb24uY2xvc2UoKTsKLSAgICAgICAgICAgIAotCSAgICAvKgorCisgICAgICAgIC8qCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeSgpOwogICAgICAgICAgICAgfQotCSAgICAqLwotICAgICAgICAgICAgICAgIAorICAgICAgICAqLworCiAgICAgICAgICAgICByZXR1cm4gY291bnQxOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLm91dCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCX0KKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q291bnQoQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtMTkwLDEwICsxOTAsMTAgQEAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIHVzZXIgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvdXNlciIpOwogICAgICAgICAgICAgcGFzc3dvcmQgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvcGFzc3dvcmQiKTsKLQkgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2Vpcy90ZXN0QWRtaW4iKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMSU5HIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOwotCSAgICBDb250cm9scy5pbml0aWFsaXplKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTEVEIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIgKyBDb250cm9scyk7CisgICAgICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvdGVzdEFkbWluIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTElORyBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKKyAgICAgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExFRCBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iICsgQ29udHJvbHMpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0yMjgsNyArMjI4LDcgQEAKICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGNvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbjsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yMzksNyArMjM5LDcgQEAKICAgICAgICAgICAgIHRocm93IGV4MTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBjbG9zZUNvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBpZiAoaGVsZENvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwppbmRleCBkYWQyMDdiLi4wYjM4YzE5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogZWpiLWphci54bWw9TUVUQS1JTkYvZWpiLWphci54bWwKIHN1bi1lamItamFyLnhtbD1NRVRBLUlORi9zdW4tZWpiLWphci54bWwKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA3ZTAzMGI2Li44ZWY1Y2Q1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw0NSArMjgsNDUgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgLy9zdXBlcihhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBkb1Rlc3QoKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCBhcHAtc2NvcGVkLXJlc291cmNlcyAiKwotCSAgICAgICAgICAgICAiY29udHJhY3RzLiIpOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKKwogICAgICAgICBTdHJpbmcgcmVzID0gIk5PVCBSVU4iOwotCWRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOworICAgIGRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOwogICAgICAgICBib29sZWFuIHBhc3MgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7Ci0JICAgIGludCB0ZXN0Q291bnQgPSAxOworICAgICAgICBpbnQgdGVzdENvdW50ID0gMTsKICAgICAgICAgICAgIHdoaWxlICghZG9uZSgpKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFkb25lKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlJ1bm5pbmcuLi4iKTsKICAgICAgICAgICAgICAgICAgICAgcGFzcyA9IGNoZWNrUmVzdWx0cyhleHBlY3RlZFJlc3VsdHMoKSk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJHb3QgZXhwZWN0ZWQgcmVzdWx0cyA9ICIgKyBwYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kbyBub3QgY29udGludWUgaWYgb25lIHRlc3QgZmFpbGVkCiAgICAgICAgICAgICAgICAgICAgIGlmICghcGFzcykgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gIlNPTUUgVEVTVFMgRkFJTEVEIjsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJJRCBhcHAtc2NvcGVkLXJlc291cmNlcyB0ZXN0IC0gIiArIHRlc3RDb3VudCwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJJRCBhcHAtc2NvcGVkLXJlc291cmNlcyB0ZXN0IC0gIiArIHRlc3RDb3VudCwgc3RhdC5QQVNTKTsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0JCXRlc3RDb3VudCArKzsKKyAgICAgICAgdGVzdENvdW50ICsrOwogICAgICAgICAgICAgfQogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNzYsMTQgKzc2LDE0IEBACiAgICAgICAgIH0KICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImFwcC1zY29wZWQtcmVzb3VyY2VzSUQiKTsKIAotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiRVhJVElORy4uLiBTVEFUVVMgPSAiICsgcmVzKTsKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tSZXN1bHRzKGludCBudW0pIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICBpbnQgcmVzdWx0ID0gY2hlY2tlci5nZXRNZXNzYWdlQ291bnQoKTsKQEAgLTkyLDcgKzkyLDcgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBkb25lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIHJldHVybiBjaGVja2VyLmRvbmUoKTsKQEAgLTEwMCw3ICsxMDAsNyBAQAogCiAgICAgcHJpdmF0ZSBpbnQgZXhwZWN0ZWRSZXN1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIHJldHVybiBjaGVja2VyLmV4cGVjdGVkUmVzdWx0cygpOwpAQCAtMTA4LDcgKzEwOCw3IEBACiAKICAgICBwcml2YXRlIHZvaWQgbm90aWZ5QW5kV2FpdCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICBjaGVja2VyLm5vdGlmeUFuZFdhaXQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGI3NDI3YWEuLjYyYzQyYWQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQpAQCAtMjksNDEgKzI5LDQxIEBACiAKIC8qKgogICovCi1wdWJsaWMgY2xhc3MgTXlNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLCAKK3B1YmxpYyBjbGFzcyBNeU1lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sCiAgICAgICAgIE15TWVzc2FnZUxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgdHJhbnNpZW50IE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYyA9IG51bGw7CiAgICAgcHJpdmF0ZSBDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3Rvciwgd2hpY2ggaXMgcHVibGljIGFuZCB0YWtlcyBubyBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIE15TWVzc2FnZUJlYW4oKSB7fQogCiAgICAgLyoqCi0gICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCAKLSAgICAgKiBub3QgZmluYWwgb3Igc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCAKKyAgICAgKiBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0CisgICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQKICAgICAgKiB3aXRoIG9uZSBhcmd1bWVudCBvZiB0eXBlIGpha2FydGEuZWpiLk1lc3NhZ2VEcml2ZW5Db250ZXh0LgogICAgICAqCiAgICAgICogQHBhcmFtIG1kYyAgICB0aGUgY29udGV4dCB0byBzZXQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dChNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMpIHsKLQl0aGlzLm1kYyA9IG1kYzsKKyAgICB0aGlzLm1kYyA9IG1kYzsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCi0gICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vIAorICAgICAqIGVqYkNyZWF0ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgorICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubwogICAgICAqIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7IH0KIAogICAgIC8qKgotICAgICAqIG9uTWVzc2FnZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKKyAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKICAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggb25lIGFyZ3VtZW50CiAgICAgICogb2YgdHlwZSBqYWthcnRhLmptcy5NZXNzYWdlLgogICAgICAqCi0gICAgICogQ2FzdHMgdGhlIGluY29taW5nIE1lc3NhZ2UgdG8gYSBUZXh0TWVzc2FnZSBhbmQgZGlzcGxheXMgCisgICAgICogQ2FzdHMgdGhlIGluY29taW5nIE1lc3NhZ2UgdG8gYSBUZXh0TWVzc2FnZSBhbmQgZGlzcGxheXMKICAgICAgKiB0aGUgdGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBpbk1lc3NhZ2UgICAgdGhlIGluY29taW5nIG1lc3NhZ2UKQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgLy9sb2coIm9uTWVzc2FnZTo6IGdldENhbGxlclByaW5jaXBhbCA6ICIgKyBtZGMuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkpOwogICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigib25NZXNzYWdlIDogVGhyZWFkSUQgOiAiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkpOwogICAgICAgICBpZihtZGMuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkgIT0gbnVsbCl7Ci0gICAgICAgIAlsb2coIm9uTWVzc2FnZTo6IGdldENhbGxlclByaW5jaXBhbCBOYW1lIDogIiArIG1kYy5nZXRDYWxsZXJQcmluY2lwYWwoKS5nZXROYW1lKCkpOworICAgICAgICAgICAgbG9nKCJvbk1lc3NhZ2U6OiBnZXRDYWxsZXJQcmluY2lwYWwgTmFtZSA6ICIgKyBtZGMuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkuZ2V0TmFtZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGxvZygib25NZXNzYWdlIDogaXNDYWxsZXJJblJvbGUoJ2phZ2FkaXNoJykgOiAiICsgbWRjLmlzQ2FsbGVySW5Sb2xlKCJqYWdhZGlzaCIpKTsKQEAgLTgzLDcgKzgzLDcgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiV1JJVEUiKSkgewotICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiV1JJVEUiLCAKKyAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGluTWVzc2FnZS5zdWJzdHJpbmcoMCwgaW5NZXNzYWdlLmxhc3RJbmRleE9mKCI6IikpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5NZXNzYWdlLmVuZHNXaXRoKCJERUxFVEUiKSkgewogICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiREVMRVRFIiwKQEAgLTk3LDEwICs5NywxMCBAQAogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBlamJSZW1vdmUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCi0gICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vIAorICAgICAqIGVqYlJlbW92ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgorICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubwogICAgICAqIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQpAQCAtMTEwLDYyICsxMTAsNjIgQEAKIAogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIFN0cmluZyBpZCAgICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKDAsIG1lc3NhZ2UuaW5kZXhPZigiOiIpKTsKLSAgICAgICAgU3RyaW5nIGJvZHkgID0gbWVzc2FnZS5zdWJzdHJpbmcobWVzc2FnZS5pbmRleE9mKCI6IikrMSk7IAorICAgICAgICBTdHJpbmcgYm9keSAgPSBtZXNzYWdlLnN1YnN0cmluZyhtZXNzYWdlLmluZGV4T2YoIjoiKSsxKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoIlJFQUQiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJSZWFkaW5nIHJvdyBmcm9tIGRhdGFiYXNlLi4uIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KIAogICAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9IAorICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0KICAgICAgICAgICAgICAgICAgICJTRUxFQ1QgaWQgZnJvbSBtZXNzYWdlcyB3aGVyZSBpZCA9ICdRUSciOwogICAgICAgICAgICAgICAgICAgUmVzdWx0U2V0IHJlc3VsdHMgPSBzdG10LmV4ZWN1dGVRdWVyeShxdWVyeSk7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArIAorICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJRUSBoYXMgYmFsYW5jZSAiICsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuZ2V0SW50KCJiYWxhbmNlIikgKyAiIGRvbGxhcnMiKTsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgIHN0bXQuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlYWQgb25lIGFjY291bnRcbiIpOwogCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJXUklURSIuZXF1YWxzKG9wKSkgewogCiAgICAgICAgICAgICAgICAgZGVidWcoIkluc2VydGluZyBvbmUgbWVzc2FnZSBpbiB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGNyZWF0ZVJvdyhpZCwgYm9keSwgZGJDb25uZWN0aW9uKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgb25lIG1lc3NhZ2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJERUxFVEUiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBvbmUgbWVzc2FnZSBmcm9tIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlbGV0ZVJvdyhpZCwgZGJDb25uZWN0aW9uKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlbGV0ZWQgb25lIG1lc3NhZ2VcbiIpOwogICAgICAgICAgICAgfSBlbHNlIGlmICgiREVMRVRFX0FMTCIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIkRlbGV0aW5nIGFsbCBtZXNzYWdlcyBmcm9tIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwpAQCAtMTc2LDcgKzE3Niw3IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vdW5zdXBwb3J0ZWQgb3AKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH1maW5hbGx5ewogICAgICAgICAgICAgdHJ5ewogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbi5jbG9zZSgpOwpAQCAtMTg1LDkgKzE4NSw5IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVJvdyhTdHJpbmcgaWQsIFN0cmluZyBib2R5LCAKLSAgICAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKworICAgIHByaXZhdGUgdm9pZCBjcmVhdGVSb3coU3RyaW5nIGlkLCBTdHJpbmcgYm9keSwKKyAgICAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICAvLyBDcmVhdGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKQEAgLTIwMyw5ICsyMDMsOSBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvdyhTdHJpbmcgaWQsIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlUm93KFN0cmluZyBpZCwgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICAvLyBEZWxldGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKICAgICAgICAgZGVidWcoIkRlbGV0ZVJvdyB3aXRoIElEID0gIiArIGlkKTsKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7CkBAIC0yMTgsOSArMjE4LDkgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVBbGwoamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVBbGwoamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICAvLyBEZWxldGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgIFN0cmluZyBxdWVyeSA9ICJERUxFVEUgRlJPTSBtZXNzYWdlcyI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvc3JjL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCmluZGV4IDFlZTBkMTQuLjkzYWE5YWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvc3JjL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvc3JjL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBkb1Rlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhpcyBpcyB0byB0ZXN0IGFwcGxpY2F0aW9uLXNjb3BlZC1yZXNvdXJjZXMiKTsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhpcyBpcyB0byB0ZXN0IGFwcGxpY2F0aW9uLXNjb3BlZC1yZXNvdXJjZXMiKTsKIAogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYnVpbGQucHJvcGVydGllcwppbmRleCBjMWRiYmU4Li4zNDNkN2E3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvYXBwLXNjb3BlZC1yZXNvdXJjZXMvc2VydmxldCIvPgogPHByb3BlcnR5IG5hbWU9Imh0dHA6aG9zdCIgdmFsdWU9ImxvY2FsaG9zdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9idWlsZC54bWwKaW5kZXggNzVjM2EwYS4uOTMyNzI1ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYnVpbGQueG1sCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXQiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkaXNhYmxlLW1vbml0b3JpbmciLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudCBkaXI9InJhIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0iYXBwIiB0YXJnZXQ9ImFsbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCmluZGV4IGE5MzQ5ZmMuLjBmY2FiZGQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKQEAgLTQ4LDQgKzQ4LDQgQEAKICAgICAgIDxwcmluY2lwYWwtbWFwIGVpcy1wcmluY2lwYWw9ImVpcy1wcmFzYXRoIiBtYXBwZWQtcHJpbmNpcGFsPSJwcmFzYXRoIiAvPgogICAgICAgPHByaW5jaXBhbC1tYXAgZWlzLXByaW5jaXBhbD0iZWlzLWphZ2FkaXNoIiBtYXBwZWQtcHJpbmNpcGFsPSJqYWdhZGlzaCIgLz4KICAgICA8L3dvcmstc2VjdXJpdHktbWFwPgotPC9yZXNvdXJjZXM+IAorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvTUVUQS1JTkYvcmEueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL01FVEEtSU5GL3JhLnhtbAppbmRleCA5NzgxZTE2Li4zY2NmMjk2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvTUVUQS1JTkYvcmEueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9NRVRBLUlORi9yYS54bWwKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5LWNvbmZpZGVudGlhbD4KICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAgICAgICAgIDxpbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4gICAgICAgICAgCisgICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgICAgICAgICAgPG1lc3NhZ2VsaXN0ZW5lcj4KICAgICAgICAgICAgICAgICAgICAgPG1lc3NhZ2VsaXN0ZW5lci10eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8L2FjdGl2YXRpb25zcGVjLWNsYXNzPgogICAgICAgICAgICAgICAgICAgICA8L2FjdGl2YXRpb25zcGVjPgogICAgICAgICAgICAgICAgIDwvbWVzc2FnZWxpc3RlbmVyPgotICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4gICAgICAgICAgCisgICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPgogICAgICAgICA8L2luYm91bmQtcmVzb3VyY2VhZGFwdGVyPgogICAgICAgICA8YWRtaW5vYmplY3Q+CiAgICAgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2J1aWxkLnhtbAppbmRleCA0ZmZkNjk4Li42NzliYmRiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2J1aWxkLnhtbApAQCAtMzAsOCArMzAsOCBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+Ci0JPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KKyAgICA8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgorICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxqYXIgamFyZmlsZT0iLi4vZ2VuZXJpYy1yYS5qYXIiIGJhc2VkaXI9ImNsYXNzZXMiCiAgICAgICAgICBpbmNsdWRlcz0iY29ubmVjdG9yLyouY2xhc3MiIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQppbmRleCA1NTUzM2Q0Li5mNTliMmIzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBDb250cm9scyB7CiAgICAgcHVibGljIHN0YXRpYyBPYmplY3QgcmVhZHlMb2NrID0gbmV3IE9iamVjdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQppbmRleCA2NTgyMzNlLi5kNzNjODYyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIERlbGl2ZXJ5V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zNiw3ICszNiw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgb3A7CiAgICAgcHJpdmF0ZSBib29sZWFuIGtlZXBDb3VudDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnRlciA9IDA7Ci0gICAgCisKICAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIFN0cmluZyBvcCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgdGhpcy5rZWVwQ291bnQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIAorICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywKICAgICAgICAgICAgIFN0cmluZyBvcCwgYm9vbGVhbiBrZWVwQ291bnQpIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC01NSw3ICs1NSw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9NZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7CiAgICAgICAgICAgICAvL2VwLmJlZm9yZURlbGl2ZXJ5KG9uTWVzc2FnZSk7CkBAIC03OCwxMSArNzgsMTEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy9lcC5hZnRlckRlbGl2ZXJ5KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtOTMsMTQgKzkzLDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQppbmRleCAxMDBjYWNlLi5mYTkzZjYzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLmZvcmdldDogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgIH0KQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnByZXBhcmU6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICAgICAgcmV0dXJuIFhBUmVzb3VyY2UuWEFfT0s7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5yZWNvdmVyOiAiICsgZmxhZ1RvU3RyaW5nKGZsYWcpKTsKICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc3RhcnQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2Uuc3RhcnQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpICsgIiwiICsKICAgICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9zcmMvY29ubmVjdG9yL0pTUjMyMldvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9zcmMvY29ubmVjdG9yL0pTUjMyMldvcmsuamF2YQppbmRleCA1MTA3YWMxLi4wMjAzZjRhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9KU1IzMjJXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvSlNSMzIyV29yay5qYXZhCkBAIC00OCw2ICs0OCw2IEBACiAKICAgICBwdWJsaWMgdm9pZCBydW4oKXsKICAgICAgICAgc3VwZXIucnVuKCk7Ci0gICAgICAgIAorCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCmluZGV4IGE2OGE1YjcuLjljMjg4MTIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKQEAgLTUxLDExICs1MSwxMSBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CiAgICAgICAgIGlmIChyZXNldENvbnRyb2wuZXF1YWxzKCJCRUdJTk5JTkciKSkgewogICAgICAgICAgICBDb250cm9scy5kb25lPWZhbHNlOwotCSAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOwotCX0KKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gZG9uZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9zcmMvY29ubmVjdG9yL015U2VjdXJpdHlDb250ZXh0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9NeVNlY3VyaXR5Q29udGV4dC5qYXZhCmluZGV4IDMxNzhjMWMuLmUxOTA1MWUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9zcmMvY29ubmVjdG9yL015U2VjdXJpdHlDb250ZXh0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvTXlTZWN1cml0eUNvbnRleHQuamF2YQpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICBDYWxsZXJQcmluY2lwYWxDYWxsYmFjayBjcGMgPSBuZXcgQ2FsbGVyUHJpbmNpcGFsQ2FsbGJhY2soZXhlY1N1YmplY3QsIG5ldyBQcmluY2lwYWxJbXBsKHByaW5jaXBhbE5hbWUpKTsKICAgICAgICAgZGVidWcoInNldHRpbmcgY2FsbGVyIHByaW5jaXBhbCBjYWxsYmFjayB3aXRoIHByaW5jaXBhbCA6ICIgKyBwcmluY2lwYWxOYW1lKTsKICAgICAgICAgY2FsbGJhY2tzLmFkZChjcGMpOwotICAgICAgICAKKwogLyoKICAgICAgICAgR3JvdXBQcmluY2lwYWxDYWxsYmFjayBncGMgPSBuZXcgR3JvdXBQcmluY2lwYWxDYWxsYmFjayhleGVjU3ViamVjdCwgbnVsbCk7CiAgICAgICAgIGNhbGxiYWNrcy5hZGQoZ3BjKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCmluZGV4IDgxODJlZjUuLjNmY2U1NDQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQpAQCAtMjQsOSArMjQsOSBAQAogICogc28gdGhhdCB0aGUgYXBwIHNlcnZlciBjYW4gaW5zdGFudGlhdGUgYW5kIGNvbmZpZ3VyZQogICogaXQgYXQgdGhlIHJ1bnRpbWUuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYyAKK3B1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYwogICAgIGltcGxlbWVudHMgQWN0aXZhdGlvblNwZWMsIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByaXZhdGUgU3RyaW5nIGRlc3RpbmF0aW9uTmFtZTsKQEAgLTQzLDcgKzQzLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uTmFtZSAoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uTmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvbk5hbWUgKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvbk5hbWUoKSBjYWxsZWQuLi4gbmFtZSA9ICIgKyBuYW1lKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbk5hbWUgPSBuYW1lOwpAQCAtNTIsNyArNTIsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25UeXBlKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvblR5cGU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25UeXBlIChTdHJpbmcgdHlwZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25UeXBlICgpIGNhbGxlZC4uLiB0eXBlID0gIiArIHR5cGUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uVHlwZT0gdHlwZTsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3RQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0UHJvcDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0UHJvcCAoU3RyaW5nIHRlc3RQcm9wKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0UHJvcCAoKSBjYWxsZWQuLi4gdGVzdFByb3AgPSAiICsgdGVzdFByb3ApOwogICAgICAgICB0aGlzLnRlc3RQcm9wID0gdGVzdFByb3A7CkBAIC03MCw3ICs3MCw3IEBACiAgICAgcHVibGljIEludGVnZXIgZ2V0VGVzdEludGVnZXJQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0SW50ZWdlclByb3A7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdEludGVnZXJQcm9wIChJbnRlZ2VyIHRlc3RQcm9wMSkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdEludGVnZXJQcm9wICgpIGNhbGxlZC4uLiB0ZXN0SW50ZWdlclByb3AgPSAiICsgdGVzdFByb3AxKTsKICAgICAgICAgdGhpcy50ZXN0SW50ZWdlclByb3AgPSB0ZXN0UHJvcDE7CkBAIC05NCw3ICs5NCw3IEBACiAKICAgICAgIH0KIAotICAgfSAKKyAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkZWJ1ZyAoU3RyaW5nIG1lc3NhZ2UpCiAgICAgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKaW5kZXggZDgwMGY2MS4uN2RhMGQ3MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCkBAIC04Niw3ICs4Niw3IEBACiAKICAgICAgICAgICAgICAgICBpZiAoIWZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSkgewogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsgCisgICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsKICAgICAgICAgICAgICAgICAgICAgLy93bS5kb1dvcmsoZCwgMCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQppbmRleCAxOGE5NzBkLi5iMmE5MDZjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQpAQCAtMzUsOCArMzUsOCBAQAogICAgIHB1YmxpYyBpbnQgYnJhbmNoUXVhbGlmaWVyOwogICAgIHB1YmxpYyBpbnQgZ2xvYmFsVHhJRDsKIAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OyAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsgCisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7CisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7CiAKICAgICBwdWJsaWMgWElEKCkgewogICAgICAgICBpbnQgZm9vID0gSUQrKzsKQEAgLTU0LDEwICs1NCwxMCBAQAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICAgLy8gSXQgY2FuJ3QgYmUgZXF1YWwKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBvdGhlciA9IChYSUQpbzsgICAgICAgICAgICAgICAgICAgLy8gVGhlIG90aGVyIFhJRCwgbm93IHByb3Blcmx5IGNhc3QKLSAgICAgICAgCi0gICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElEIAorCisgICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElECiAgICAgICAgICAgICAgICAgJiYgdGhpcy5icmFuY2hRdWFsaWZpZXIgPT0gb3RoZXIuYnJhbmNoUXVhbGlmaWVyCiAgICAgICAgICAgICAgICAgJiYgdGhpcy5nbG9iYWxUeElEID09IG90aGVyLmdsb2JhbFR4SUQpIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTcsNyArOTcsNyBAQAogICAgICAgICAgICAgICAgICJmb3JtYXRJRCgiICAgICArIGZvcm1hdElEICAgICArICIpLCAiICsKICAgICAgICAgICAgICAgICAiYnJhbmNoUXVhbGlmaWVyICgiICsgYnJhbmNoUXVhbGlmaWVyICsgIiksICIgKwogICAgICAgICAgICAgICAgICJnbG9iYWxUeElEKCIgKyBnbG9iYWxUeElEICsgIil9Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL2FwcC9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9hcHAvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKaW5kZXggOTU1NGIzNy4uMjA2ODg1NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL2FwcC9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYXBwL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCkBAIC04NSwxMSArODUsMTEgQEAKICAgICA8cHJvcGVydHkgbmFtZT0iaW50VmFsdWUxIiB2YWx1ZT0iNDAiLz4KICAgPC9hZG1pbi1vYmplY3QtcmVzb3VyY2U+CiAKLTxjdXN0b20tcmVzb3VyY2UgcmVzLXR5cGU9ImphdmEubGFuZy5TdHJpbmciIGpuZGktbmFtZT0iamF2YTphcHAvY3VzdG9tL3ByaW1pdGl2ZS1yZXNvdXJjZSIgCis8Y3VzdG9tLXJlc291cmNlIHJlcy10eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiBqbmRpLW5hbWU9ImphdmE6YXBwL2N1c3RvbS9wcmltaXRpdmUtcmVzb3VyY2UiCiAgICAgIGZhY3RvcnktY2xhc3M9Im9yZy5nbGFzc2Zpc2gucmVzb3VyY2VzLmN1c3RvbS5mYWN0b3J5LlByaW1pdGl2ZXNBbmRTdHJpbmdGYWN0b3J5Ij4KICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2YWx1ZSIgdmFsdWU9IlRFU1QiIC8+CiAgICAgPC9jdXN0b20tcmVzb3VyY2U+CiA8amRiYy1yZXNvdXJjZSBwb29sLW5hbWU9ImphdmE6YXBwL3NyIiBqbmRpLW5hbWU9ImphdmE6YXBwL2pkYmMvc3IiICAvPgogPGpkYmMtcmVzb3VyY2UgcG9vbC1uYW1lPSJqYXZhOmFwcC9jb25uZWN0b3ItYmVhbi12YWxpZGF0aW9uLXBvb2wiIGpuZGktbmFtZT0iamF2YTphcHAvamRiYy9jb25uZWN0b3ItYmVhbi12YWxpZGF0aW9uLXJlc291cmNlIiAgLz4KIAotPC9yZXNvdXJjZXM+IAorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCmluZGV4IGM5NGEzNjUuLmY0NjA4YmYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCkBAIC05MSw4ICs5MSw4IEBACiAgICAgICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KLQk8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CisgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+CisgICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmphdmE6Y29tcC9lbnYvVmFsaWRhdG9yPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKaW5kZXggMGY1NjMyNC4uZWJlOTY0OSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbApAQCAtODgsMTMgKzg4LDEzIEBACiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmphdmE6YXBwL2Vpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmphdmE6YXBwL2Vpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgPHJlc291cmNlLWVudi1yZWY+CiAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5qYXZhOmNvbXAvZW52L1ZhbGlkYXRvcjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgogICAgIDxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+amFrYXJ0YS52YWxpZGF0aW9uLlZhbGlkYXRvcjwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgogICA8L3Jlc291cmNlLWVudi1yZWY+Ci0gIAorCiAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+amF2YTpjb21wL2Vudi9WYWxpZGF0b3JGYWN0b3J5PC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+CiAgICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5qYWthcnRhLnZhbGlkYXRpb24uVmFsaWRhdG9yRmFjdG9yeTwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKaW5kZXggNGE0NmUzYy4uMjViM2FlOCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCkBAIC04Niw3ICs4Niw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJiZWFuIGNyZWF0ZWQiKTsKICAgICAgICAgaGVsZENvbiA9IG51bGw7CkBAIC0xMjksMTEgKzEyOSwxMSBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5nZXRMb2NrT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICAvL1RlbGwgdGhlIHJlc291cmNlIGFkYXB0ZXIgdGhlIGNsaWVudCBpcyByZWFkeSB0byBydW4KLSAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5QWxsKCk7IAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnlBbGwoKTsKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJOT1RJRklFRC4uLiBTVEFSVCBXQUlUSU5HIik7CiAgICAgICAgICAgICAgICAgLy9XYWl0IHVudGlsIGJlaW5nIHRvbGQgdG8gcmVhZCBmcm9tIHRoZSBkYXRhYmFzZQotICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS53YWl0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0xNDEsMjIgKzE0MSwyMiBAQAogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TWVzc2FnZUNvdW50KCkgewotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgIENvbm5lY3Rpb24gY29uID0gZ2V0RnJlc2hDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBpbnQgY291bnQxID0gZ2V0Q291bnQoY29uKTsKICAgICAgICAgICAgIGNvbi5jbG9zZSgpOwotICAgICAgICAgICAgCi0JICAgIC8qCisKKyAgICAgICAgLyoKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5nZXRMb2NrT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5KCk7CiAgICAgICAgICAgICB9Ci0JICAgICovCi0gICAgICAgICAgICAgICAgCisgICAgICAgICovCisKICAgICAgICAgICAgIHJldHVybiBjb3VudDE7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0ub3V0KTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JfQorICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIGludCBnZXRDb3VudChDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CkBAIC0xODIsOCArMTgyLDggQEAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIHVzZXIgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvdXNlciIpOwogICAgICAgICAgICAgcGFzc3dvcmQgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvcGFzc3dvcmQiKTsKLQkgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2Vpcy90ZXN0QWRtaW4iKTsKLQkgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOworICAgICAgICBDb250cm9scyA9IChNeUFkbWluT2JqZWN0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL3Rlc3RBZG1pbiIpOworICAgICAgICBDb250cm9scy5pbml0aWFsaXplKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTE5MywxMiArMTkzLDEyIEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGlzQ29uc3RyYWludFZpb2xhdGlvbkV4Y2VwdGlvbihUaHJvd2FibGUgdCwgU3RyaW5nIGpuZGlOYW1lKXsKICAgICAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgaWYodCAhPSBudWxsKXsKLSAgICAgICAgICAgIAlpZih0IGluc3RhbmNlb2YgamFrYXJ0YS52YWxpZGF0aW9uLkNvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb24peworICAgICAgICAgICAgICAgIGlmKHQgaW5zdGFuY2VvZiBqYWthcnRhLnZhbGlkYXRpb24uQ29uc3RyYWludFZpb2xhdGlvbkV4Y2VwdGlvbil7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZvdW5kIENvbnN0cmFpbnQgVmlvbGF0aW9uIGZvciByZXNvdXJjZSBbIitqbmRpTmFtZSsiXSIgKyB0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICAgICAgIAlyZXN1bHQgPSB0cnVlOwotICAgICAgICAgICAgCX1lbHNlewotICAgICAgICAgICAgICAgICAJcmVzdWx0ID0gaXNDb25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uKHQuZ2V0Q2F1c2UoKSwgam5kaU5hbWUpOwotICAgICAgICAgICAgCX0KKyAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0NvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb24odC5nZXRDYXVzZSgpLCBqbmRpTmFtZSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0yMzIsNyArMjMyLDcgQEAKICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGNvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbjsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yNDMsNyArMjQzLDcgQEAKICAgICAgICAgICAgIHRocm93IGV4MTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBjbG9zZUNvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBpZiAoaGVsZENvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwppbmRleCBkYWQyMDdiLi4wYjM4YzE5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogZWpiLWphci54bWw9TUVUQS1JTkYvZWpiLWphci54bWwKIHN1bi1lamItamFyLnhtbD1NRVRBLUlORi9zdW4tZWpiLWphci54bWwKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA5NWExMzM4Li5iZjMyODEwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgICAgICAvLyAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3QgY291bnQgOiAiICsgdGVzdENvdW50KTsKICAgICAgICAgICAgICAgICB0ZXN0Q291bnQrKzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0IGNvdW50IDogIiArIHRlc3RDb3VudCk7CiAgICAgICAgICAgICBydW5BZG1pbk9iamVjdFRlc3QocmVzLCB0ZXN0Q291bnQrKywgImphdmE6YXBwL2Vpcy90ZXN0QWRtaW4iLCB0cnVlKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3QgY291bnQgOiAiICsgdGVzdENvdW50KTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGE0OGFhYjEuLmIzNzMwNTAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQpAQCAtMjksNDEgKzI5LDQxIEBACiAKIC8qKgogICovCi1wdWJsaWMgY2xhc3MgTXlNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLCAKK3B1YmxpYyBjbGFzcyBNeU1lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sCiAgICAgICAgIE15TWVzc2FnZUxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgdHJhbnNpZW50IE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYyA9IG51bGw7CiAgICAgcHJpdmF0ZSBDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3Rvciwgd2hpY2ggaXMgcHVibGljIGFuZCB0YWtlcyBubyBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIE15TWVzc2FnZUJlYW4oKSB7fQogCiAgICAgLyoqCi0gICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCAKLSAgICAgKiBub3QgZmluYWwgb3Igc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCAKKyAgICAgKiBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0CisgICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQKICAgICAgKiB3aXRoIG9uZSBhcmd1bWVudCBvZiB0eXBlIGpha2FydGEuZWpiLk1lc3NhZ2VEcml2ZW5Db250ZXh0LgogICAgICAqCiAgICAgICogQHBhcmFtIG1kYyAgICB0aGUgY29udGV4dCB0byBzZXQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dChNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMpIHsKLQl0aGlzLm1kYyA9IG1kYzsKKyAgICB0aGlzLm1kYyA9IG1kYzsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCi0gICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vIAorICAgICAqIGVqYkNyZWF0ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgorICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubwogICAgICAqIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7IH0KIAogICAgIC8qKgotICAgICAqIG9uTWVzc2FnZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKKyAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKICAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggb25lIGFyZ3VtZW50CiAgICAgICogb2YgdHlwZSBqYWthcnRhLmptcy5NZXNzYWdlLgogICAgICAqCi0gICAgICogQ2FzdHMgdGhlIGluY29taW5nIE1lc3NhZ2UgdG8gYSBUZXh0TWVzc2FnZSBhbmQgZGlzcGxheXMgCisgICAgICogQ2FzdHMgdGhlIGluY29taW5nIE1lc3NhZ2UgdG8gYSBUZXh0TWVzc2FnZSBhbmQgZGlzcGxheXMKICAgICAgKiB0aGUgdGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBpbk1lc3NhZ2UgICAgdGhlIGluY29taW5nIG1lc3NhZ2UKQEAgLTc0LDcgKzc0LDcgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiV1JJVEUiKSkgewotICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiV1JJVEUiLCAKKyAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGluTWVzc2FnZS5zdWJzdHJpbmcoMCwgaW5NZXNzYWdlLmxhc3RJbmRleE9mKCI6IikpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5NZXNzYWdlLmVuZHNXaXRoKCJERUxFVEUiKSkgewogICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiREVMRVRFIiwKQEAgLTkwLDEwICs5MCwxMCBAQAogICAgICAgICB9CiAKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBlamJSZW1vdmUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCi0gICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vIAorICAgICAqIGVqYlJlbW92ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgorICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubwogICAgICAqIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQpAQCAtMTAzLDYyICsxMDMsNjIgQEAKIAogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIFN0cmluZyBpZCAgICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKDAsIG1lc3NhZ2UuaW5kZXhPZigiOiIpKTsKLSAgICAgICAgU3RyaW5nIGJvZHkgID0gbWVzc2FnZS5zdWJzdHJpbmcobWVzc2FnZS5pbmRleE9mKCI6IikrMSk7IAorICAgICAgICBTdHJpbmcgYm9keSAgPSBtZXNzYWdlLnN1YnN0cmluZyhtZXNzYWdlLmluZGV4T2YoIjoiKSsxKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoIlJFQUQiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJSZWFkaW5nIHJvdyBmcm9tIGRhdGFiYXNlLi4uIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KIAogICAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9IAorICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0KICAgICAgICAgICAgICAgICAgICJTRUxFQ1QgaWQgZnJvbSBtZXNzYWdlcyB3aGVyZSBpZCA9ICdRUSciOwogICAgICAgICAgICAgICAgICAgUmVzdWx0U2V0IHJlc3VsdHMgPSBzdG10LmV4ZWN1dGVRdWVyeShxdWVyeSk7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArIAorICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJRUSBoYXMgYmFsYW5jZSAiICsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuZ2V0SW50KCJiYWxhbmNlIikgKyAiIGRvbGxhcnMiKTsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgIHN0bXQuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlYWQgb25lIGFjY291bnRcbiIpOwogCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJXUklURSIuZXF1YWxzKG9wKSkgewogCiAgICAgICAgICAgICAgICAgZGVidWcoIkluc2VydGluZyBvbmUgbWVzc2FnZSBpbiB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGNyZWF0ZVJvdyhpZCwgYm9keSwgZGJDb25uZWN0aW9uKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgb25lIG1lc3NhZ2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJERUxFVEUiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBvbmUgbWVzc2FnZSBmcm9tIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlbGV0ZVJvdyhpZCwgZGJDb25uZWN0aW9uKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlbGV0ZWQgb25lIG1lc3NhZ2VcbiIpOwogICAgICAgICAgICAgfSBlbHNlIGlmICgiREVMRVRFX0FMTCIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIkRlbGV0aW5nIGFsbCBtZXNzYWdlcyBmcm9tIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwpAQCAtMTY5LDcgKzE2OSw3IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vdW5zdXBwb3J0ZWQgb3AKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH1maW5hbGx5ewogICAgICAgICAgICAgdHJ5ewogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbi5jbG9zZSgpOwpAQCAtMTc4LDkgKzE3OCw5IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVJvdyhTdHJpbmcgaWQsIFN0cmluZyBib2R5LCAKLSAgICAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKworICAgIHByaXZhdGUgdm9pZCBjcmVhdGVSb3coU3RyaW5nIGlkLCBTdHJpbmcgYm9keSwKKyAgICAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICAvLyBDcmVhdGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKQEAgLTE5Niw5ICsxOTYsOSBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvdyhTdHJpbmcgaWQsIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlUm93KFN0cmluZyBpZCwgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICAvLyBEZWxldGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKICAgICAgICAgZGVidWcoIkRlbGV0ZVJvdyB3aXRoIElEID0gIiArIGlkKTsKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7CkBAIC0yMTEsOSArMjExLDkgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVBbGwoamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVBbGwoamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICAvLyBEZWxldGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgIFN0cmluZyBxdWVyeSA9ICJERUxFVEUgRlJPTSBtZXNzYWdlcyI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDVhYTM4YjMuLjEyZGU0NmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii9zaW1wbGUtY29ubmVjdG9yLWJlYW4tdmFsaWRhdGlvbi9zZXJ2bGV0Ii8+CiA8cHJvcGVydHkgbmFtZT0iaHR0cDpob3N0IiB2YWx1ZT0ibG9jYWxob3N0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL2J1aWxkLnhtbAppbmRleCBhNDc0MzJlLi40NTM5ZWExIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9idWlsZC54bWwKQEAgLTkzLDE0ICs5MywxNCBAQAogPCEtLQogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0iY29ubmVjdG9yMS41IChlYXIgYmFzZWQpIi8+Ci0JICAgIDwvYW50Y2FsbD4KKyAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9ImNvbm5lY3RvcjEuNSAoZWFyIGJhc2VkKSIvPgorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAtLT4KIAogICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0ic2ltcGxlLWNvbm5lY3Rvci1iZWFuLXZhbGlkYXRpb24iIC8+CisgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzaW1wbGUtY29ubmVjdG9yLWJlYW4tdmFsaWRhdGlvbiIgLz4KICAgICAgICAgPHBhcmFtICBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IlN0YW5kYWxvbmUtIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9NRVRBLUlORi9yYS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvTUVUQS1JTkYvcmEueG1sCmluZGV4IDgyNjM2ZDUuLjVjNzQ2MzAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9NRVRBLUlORi9yYS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL01FVEEtSU5GL3JhLnhtbApAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8aW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPgogICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXI+CiAgICAgICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXItdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lcgpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYy1jbGFzcz4KICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYz4KICAgICAgICAgICAgICAgICA8L21lc3NhZ2VsaXN0ZW5lcj4KLSAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4KICAgICAgICAgPC9pbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KICAgICAgICAgPGFkbWlub2JqZWN0PgogICAgICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L2FkbWlub2JqZWN0LWludGVyZmFjZT4KQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPC9hZG1pbm9iamVjdD4KIAotCTxhZG1pbm9iamVjdD4KKyAgICA8YWRtaW5vYmplY3Q+CiAgICAgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDE8L2FkbWlub2JqZWN0LWludGVyZmFjZT4KICAgICAgICAgICA8YWRtaW5vYmplY3QtY2xhc3M+Y29ubmVjdG9yLk15QWRtaW5PYmplY3QxPC9hZG1pbm9iamVjdC1jbGFzcz4KICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9idWlsZC54bWwKaW5kZXggYTFiYmU5Ny4uYzA1MzBkMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPGFudCBkaXI9InNyYyIgaW5oZXJpdEFsbD0iZmFsc2UiIHRhcmdldD0iYWxsIi8+CiAKICAgICA8amFyIGphcmZpbGU9ImdlbmVyaWMtcmEucmFyIiBiYXNlZGlyPSIuIgotICAgICAgICAgaW5jbHVkZXM9ImdlbmVyaWMtcmEuamFyLCBNRVRBLUlORi8qLnhtbCwgTUVUQS1JTkYvc2VydmljZXMvKiIgLz4gCisgICAgICAgICBpbmNsdWRlcz0iZ2VuZXJpYy1yYS5qYXIsIE1FVEEtSU5GLyoueG1sLCBNRVRBLUlORi9zZXJ2aWNlcy8qIiAvPgogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2J1aWxkLnhtbAppbmRleCBmZjhiY2MyLi44NDk2ZjYwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2J1aWxkLnhtbApAQCAtMzAsOCArMzAsOCBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+Ci0JPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KKyAgICA8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgorICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxqYXIgamFyZmlsZT0iLi4vZ2VuZXJpYy1yYS5qYXIiIGJhc2VkaXI9ImNsYXNzZXMiCiAgICAgICAgICBpbmNsdWRlcz0iY29ubmVjdG9yLyouY2xhc3MiIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQppbmRleCA1NTUzM2Q0Li5mNTliMmIzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBDb250cm9scyB7CiAgICAgcHVibGljIHN0YXRpYyBPYmplY3QgcmVhZHlMb2NrID0gbmV3IE9iamVjdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQppbmRleCA2NTgyMzNlLi5kNzNjODYyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIERlbGl2ZXJ5V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zNiw3ICszNiw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgb3A7CiAgICAgcHJpdmF0ZSBib29sZWFuIGtlZXBDb3VudDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnRlciA9IDA7Ci0gICAgCisKICAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIFN0cmluZyBvcCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgdGhpcy5rZWVwQ291bnQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIAorICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywKICAgICAgICAgICAgIFN0cmluZyBvcCwgYm9vbGVhbiBrZWVwQ291bnQpIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC01NSw3ICs1NSw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9NZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7CiAgICAgICAgICAgICAvL2VwLmJlZm9yZURlbGl2ZXJ5KG9uTWVzc2FnZSk7CkBAIC03OCwxMSArNzgsMTEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy9lcC5hZnRlckRlbGl2ZXJ5KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtOTMsMTQgKzkzLDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQppbmRleCAxMDBjYWNlLi5mYTkzZjYzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLmZvcmdldDogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgIH0KQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnByZXBhcmU6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICAgICAgcmV0dXJuIFhBUmVzb3VyY2UuWEFfT0s7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5yZWNvdmVyOiAiICsgZmxhZ1RvU3RyaW5nKGZsYWcpKTsKICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc3RhcnQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2Uuc3RhcnQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpICsgIiwiICsKICAgICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCmluZGV4IGI1YjBmMDIuLjRjOWMwMTIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogLyoqCiAgKiBjb2xsZWN0aW9uIG9mIG1lc3NhZ2VzLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgTWVzc2FnZXMgewogCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgU3RyaW5nIGNvbW1hbmQgID0gYXJnc1swXTsKICAgICAgICBTdHJpbmcgZGVzdE5hbWUgPSBhcmdzWzFdOwogICAgICAgIFN0cmluZyBtZXNzYWdlICA9IGFyZ3NbMl07Ci0gICAKKwogICAgICAgIGlmICghImFkZCIuZXF1YWxzKGNvbW1hbmQpKSB7CiAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQppbmRleCBiNzg1ZDIyLi5iYWNjNjhkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgcHVibGljIGludCBnZXRJbnRWYWx1ZSgpewogICAgICAgcmV0dXJuIGludFZhbHVlOwogICAgIH0KLSAKKwogICAgIEBDb25maWdQcm9wZXJ0eShkZWZhdWx0VmFsdWU9IjEiLCB0eXBlPWphdmEubGFuZy5JbnRlZ2VyLmNsYXNzKQogICAgIHB1YmxpYyB2b2lkIHNldEludFZhbHVlKGludCBpbnRWYWx1ZSl7CiAgICAgICB0aGlzLmludFZhbHVlID0gaW50VmFsdWU7CkBAIC03MSwxMyArNzEsMTMgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOwogICAgICAgICBpZiAocmVzZXRDb250cm9sLmVxdWFscygiQkVHSU5OSU5HIikpIHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMucmVhZHlMb2NrKXsKICAgICAgICAgICAgICAgICBDb250cm9scy5kb25lPWZhbHNlOwogICAgICAgICAgICAgfQotCSAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOwotCX0KKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gZG9uZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QxLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0MS5qYXZhCmluZGV4IDkyY2FlODEuLmEzMmY3ZjkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QxLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdDEuamF2YQpAQCAtNDcsNyArNDcsNyBAQAogICAgIHB1YmxpYyBpbnQgZ2V0SW50VmFsdWUoKXsKICAgICAgIHJldHVybiBpbnRWYWx1ZTsKICAgICB9Ci0gCisKICAgICBAQ29uZmlnUHJvcGVydHkodHlwZT1qYXZhLmxhbmcuSW50ZWdlci5jbGFzcykKICAgICBwdWJsaWMgdm9pZCBzZXRJbnRWYWx1ZShpbnQgaW50VmFsdWUpewogICAgICAgdGhpcy5pbnRWYWx1ZSA9IGludFZhbHVlOwpAQCAtODgsMTMgKzg4LDEzIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKICAgICAgICAgaWYgKHJlc2V0Q29udHJvbC5lcXVhbHMoIkJFR0lOTklORyIpKSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLnJlYWR5TG9jayl7CiAgICAgICAgICAgICAgICAgQ29udHJvbHMuZG9uZT1mYWxzZTsKICAgICAgICAgICAgIH0KLQkgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKLQl9CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGRvbmUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQppbmRleCA4ZjJkZjJmLi40NjA0NzE3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKQEAgLTI1LDkgKzI1LDkgQEAKICAqIHNvIHRoYXQgdGhlIGFwcCBzZXJ2ZXIgY2FuIGluc3RhbnRpYXRlIGFuZCBjb25maWd1cmUKICAqIGl0IGF0IHRoZSBydW50aW1lLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMgCitwdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMKICAgICBpbXBsZW1lbnRzIEFjdGl2YXRpb25TcGVjLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIFN0cmluZyBkZXN0aW5hdGlvbk5hbWU7CkBAIC00NCw3ICs0NCw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvbk5hbWUgKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvbk5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25OYW1lIChTdHJpbmcgbmFtZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25OYW1lKCkgY2FsbGVkLi4uIG5hbWUgPSAiICsgbmFtZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25OYW1lID0gbmFtZTsKQEAgLTUzLDE3ICs1MywxNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25UeXBlKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvblR5cGU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25UeXBlIChTdHJpbmcgdHlwZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25UeXBlICgpIGNhbGxlZC4uLiB0eXBlID0gIiArIHR5cGUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uVHlwZT0gdHlwZTsKICAgICB9CiAKLSAgICBATm90TnVsbCAKKyAgICBATm90TnVsbAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdFByb3AoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLnRlc3RQcm9wOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RQcm9wIChTdHJpbmcgdGVzdFByb3ApIHsKICAgICAgICAgZGVidWcoInNldFRlc3RQcm9wICgpIGNhbGxlZC4uLiB0ZXN0UHJvcCA9ICIgKyB0ZXN0UHJvcCk7CiAgICAgICAgIHRoaXMudGVzdFByb3AgPSB0ZXN0UHJvcDsKQEAgLTc0LDcgKzc0LDcgQEAKICAgICBwdWJsaWMgSW50ZWdlciBnZXRUZXN0SW50ZWdlclByb3AoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLnRlc3RJbnRlZ2VyUHJvcDsKICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0SW50ZWdlclByb3AgKEludGVnZXIgdGVzdFByb3AxKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0SW50ZWdlclByb3AgKCkgY2FsbGVkLi4uIHRlc3RJbnRlZ2VyUHJvcCA9ICIgKyB0ZXN0UHJvcDEpOwogICAgICAgICB0aGlzLnRlc3RJbnRlZ2VyUHJvcCA9IHRlc3RQcm9wMTsKQEAgLTEwMCw3ICsxMDAsNyBAQAogCiAgICAgICB9CiAKLSAgIH0gCisgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZGVidWcgKFN0cmluZyBtZXNzYWdlKQogICAgIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQppbmRleCAwM2Y1ODI4Li4yNmEyZGFkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCkBAIC00NSwxNCArNDUsMTQgQEAKIC8qKgogICogVGhpcyBpcyBhIHNhbXBsZSByZXNvdXJjZSBhZGFwdGVyCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsIAorcHVibGljIGNsYXNzIFNpbXBsZVJlc291cmNlQWRhcHRlckltcGwKIGltcGxlbWVudHMgUmVzb3VyY2VBZGFwdGVyLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIEJvb3RzdHJhcENvbnRleHQgY3R4OwogICAgIHByaXZhdGUgV29ya01hbmFnZXIgd207Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyB0ZXN0TmFtZTsKIAogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IHRydWU7CkBAIC02NCw3ICs2NCw3IEBACiAKICAgICBwdWJsaWMgdm9pZAogICAgIHN0YXJ0KEJvb3RzdHJhcENvbnRleHQgY3R4KSB0aHJvd3MgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCIwMDEuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogCiAgICAgICAgIHRoaXMuY3R4ID0gY3R4OwpAQCAtNzUsMTIgKzc1LDEyIEBACiAKICAgICAgICAgLy90ZXN0aW5nIGNyZWF0IHRpbWVyCiAgICAgICAgIFRpbWVyIHRpbWVyID0gbnVsbDsKLQkgIHRyeXsKLQkgICAgICB0aW1lciA9IGN0eC5jcmVhdGVUaW1lcigpOwotCSAgfSBjYXRjaChVbmF2YWlsYWJsZUV4Y2VwdGlvbiB1ZSkgewotCSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IiKTsKLQkgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIGZvcm0gYm9vdHN0cmFwIik7Ci0JICB9CisgICAgICB0cnl7CisgICAgICAgICAgdGltZXIgPSBjdHguY3JlYXRlVGltZXIoKTsKKyAgICAgIH0gY2F0Y2goVW5hdmFpbGFibGVFeGNlcHRpb24gdWUpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIik7CisgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJFcnJvciBmb3JtIGJvb3RzdHJhcCIpOworICAgICAgfQogICAgICAgICBkZWJ1ZygiMDA0LiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKIAogICAgICAgICBkZWJ1ZygiMDA1LiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKQEAgLTEyMCwxMyArMTIwLDEzIEBACiAKICAgICBwdWJsaWMgdm9pZAogICAgIGVuZHBvaW50RGVhY3RpdmF0aW9uICgKLSAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZW5kcG9pbnRGYWN0b3J5LCAKKyAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZW5kcG9pbnRGYWN0b3J5LAogICAgICAgICAgICAgQWN0aXZhdGlvblNwZWMgc3BlYykgewogICAgICAgICBkZWJ1ZyAoImVuZHBvaW50RGVhY3RpdmF0aW9uIGNhbGxlZC4uLiIpOwotICAgICAgICAKKwogICAgICAgICAoKFdvcmtEaXNwYXRjaGVyKSB3b3JrKS5zdG9wKCk7CiAgICAgfQotIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHRlc3ROYW1lOwogICAgIH0KQEAgLTEzNiw4ICsxMzYsOCBAQAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldEludFZhbHVlKCl7CiAgICAgICByZXR1cm4gaW50VmFsdWU7CiAgICAgfQotICAgCi0gICAgQENvbmZpZ1Byb3BlcnR5KHR5cGU9SW50ZWdlci5jbGFzcywgZGVmYXVsdFZhbHVlPSIxMCIpIAorCisgICAgQENvbmZpZ1Byb3BlcnR5KHR5cGU9SW50ZWdlci5jbGFzcywgZGVmYXVsdFZhbHVlPSIxMCIpCiAgICAgcHVibGljIHZvaWQgc2V0SW50VmFsdWUoSW50ZWdlciBpbnRWYWx1ZSl7CiAgICAgICB0aGlzLmludFZhbHVlID0gaW50VmFsdWU7CiAgICAgfQpAQCAtMTUzLDcgKzE1Myw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsXSA9PT4gIiArIG1lc3NhZ2UpOwogICAgIH0KIAotICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykgCisgICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKQogICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCA2ZTA1YjUzLi5lNzc2ZWFhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBXb3JrRGlzcGF0Y2hlciBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC00NCwxMSArNDQsMTEgQEAKICAgICBwcm90ZWN0ZWQgQWN0aXZhdGlvblNwZWMgc3BlYzsKICAgICBwcm90ZWN0ZWQgV29ya01hbmFnZXIgd207CiAgICAgcHJvdGVjdGVkIFhBVGVybWluYXRvciB4YTsKLSAgICAKKwogICAgIHB1YmxpYyBXb3JrRGlzcGF0Y2hlcigKICAgICAgICAgICAgIFN0cmluZyBpZCwKICAgICAgICAgICAgIEJvb3RzdHJhcENvbnRleHQgY3R4LAotICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LCAKKyAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwKICAgICAgICAgICAgIEFjdGl2YXRpb25TcGVjIHNwZWMpIHsKICAgICAgICAgdGhpcy5pZCAgICAgID0gaWQ7CiAgICAgICAgIHRoaXMuY3R4ICAgICA9IGN0eDsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAKICAgICAgICAgZGVidWcoIkVOVEVSLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIGRlYnVnKCJXQUlULi4uIik7CkBAIC0xMTEsMTUgKzExMSwxNSBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZSBhbGwuCiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgMSwgIkRFTEVURV9BTEwiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkRPTkUgREVMRVRFIEFMTCBGUk9NIERCIik7CiAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IDA7CiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMTU3LDE0ICsxNTcsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMTg3LDEzICsxODcsMTMgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vU2xlZXAgZm9yIDUgc2Vjb25kcwogICAgICAgICAgICAgLy9UaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDUqMTAwMCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIC8vTm90aWZ5IHRoZSBjbGllbnQgdG8gY2hlY2sgdGhlIHJlc3VsdHMKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5QWxsKCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnlBbGwoKTsKIAogICAgICAgICAgICAgICAgIC8vV2FpdCB1bnRpbCByZXN1bHRzIGFyZSB2ZXJpZmllZCBieSB0aGUgY2xpZW50Ci0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsKIAogICAgICAgICAgICAgICAgIGlmIChzdG9wKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKaW5kZXggNzc4MzdmNy4uMWQ1MDI0YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKQEAgLTM1LDggKzM1LDggQEAKICAgICBwdWJsaWMgaW50IGJyYW5jaFF1YWxpZmllcjsKICAgICBwdWJsaWMgaW50IGdsb2JhbFR4SUQ7CiAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsgCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7IAorICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OworICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OwogCiAgICAgcHVibGljIFhJRCgpIHsKICAgICAgICAgaW50IGZvbyA9IElEKys7CkBAIC01NCwxMCArNTQsMTAgQEAKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgIC8vIEl0IGNhbid0IGJlIGVxdWFsCiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgb3RoZXIgPSAoWElEKW87ICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvdGhlciBYSUQsIG5vdyBwcm9wZXJseSBjYXN0Ci0gICAgICAgIAotICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRCAKKworICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRAogICAgICAgICAgICAgICAgICYmIHRoaXMuYnJhbmNoUXVhbGlmaWVyID09IG90aGVyLmJyYW5jaFF1YWxpZmllcgogICAgICAgICAgICAgICAgICYmIHRoaXMuZ2xvYmFsVHhJRCA9PSBvdGhlci5nbG9iYWxUeElEKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk3LDcgKzk3LDcgQEAKICAgICAgICAgICAgICAgICAiZm9ybWF0SUQoIiAgICAgKyBmb3JtYXRJRCAgICAgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImJyYW5jaFF1YWxpZmllciAoIiArIGJyYW5jaFF1YWxpZmllciArICIpLCAiICsKICAgICAgICAgICAgICAgICAiZ2xvYmFsVHhJRCgiICsgZ2xvYmFsVHhJRCArICIpfSIpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gczsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbAppbmRleCBjOTRhMzY1Li5mNDYwOGJmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCkBAIC05MSw4ICs5MSw4IEBACiAgICAgICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KLQk8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CisgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+CisgICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmphdmE6Y29tcC9lbnYvVmFsaWRhdG9yPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAppbmRleCBhMjZjOWRiLi5jM2E5MDFhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKQEAgLTg4LDEzICs4OCwxMyBAQAogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+amF2YTpjb21wL2Vudi9WYWxpZGF0b3I8L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KICAgICA8cmVzb3VyY2UtZW52LXJlZi10eXBlPmpha2FydGEudmFsaWRhdGlvbi5WYWxpZGF0b3I8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KICAgPC9yZXNvdXJjZS1lbnYtcmVmPgotICAKKwogICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmphdmE6Y29tcC9lbnYvVmFsaWRhdG9yRmFjdG9yeTwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgogICAgIDxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+amFrYXJ0YS52YWxpZGF0aW9uLlZhbGlkYXRvckZhY3Rvcnk8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKaW5kZXggNTIzMWQ5Yi4uYzgwNmYwMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImJlYW4gY3JlYXRlZCIpOwogICAgICAgICBoZWxkQ29uID0gbnVsbDsKQEAgLTExMywxMSArMTEzLDExIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLmdldExvY2tPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIC8vVGVsbCB0aGUgcmVzb3VyY2UgYWRhcHRlciB0aGUgY2xpZW50IGlzIHJlYWR5IHRvIHJ1bgotICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnlBbGwoKTsgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeUFsbCgpOworCiAgICAgICAgICAgICAgICAgZGVidWcoIk5PVElGSUVELi4uIFNUQVJUIFdBSVRJTkciKTsKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgYmVpbmcgdG9sZCB0byByZWFkIGZyb20gdGhlIGRhdGFiYXNlCi0gICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTEyNSwyMiArMTI1LDIyIEBACiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRNZXNzYWdlQ291bnQoKSB7Ci0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBnZXRGcmVzaENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGludCBjb3VudDEgPSBnZXRDb3VudChjb24pOwogICAgICAgICAgICAgY29uLmNsb3NlKCk7Ci0gICAgICAgICAgICAKLQkgICAgLyoKKworICAgICAgICAvKgogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLmdldExvY2tPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnkoKTsKICAgICAgICAgICAgIH0KLQkgICAgKi8KLSAgICAgICAgICAgICAgICAKKyAgICAgICAgKi8KKwogICAgICAgICAgICAgcmV0dXJuIGNvdW50MTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5vdXQpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLQl9CisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgaW50IGdldENvdW50KENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKQEAgLTE2Niw4ICsxNjYsOCBAQAogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgdXNlciA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi91c2VyIik7CiAgICAgICAgICAgICBwYXNzd29yZCA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9wYXNzd29yZCIpOwotCSAgICBDb250cm9scyA9IChNeUFkbWluT2JqZWN0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL3Rlc3RBZG1pbiIpOwotCSAgICBDb250cm9scy5pbml0aWFsaXplKCk7CisgICAgICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvdGVzdEFkbWluIik7CisgICAgICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMTc3LDEyICsxNzcsMTIgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gaXNDb25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uKFRocm93YWJsZSB0LCBTdHJpbmcgam5kaU5hbWUpewogICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICBpZih0ICE9IG51bGwpewotICAgICAgICAgICAgCWlmKHQgaW5zdGFuY2VvZiBqYWthcnRhLnZhbGlkYXRpb24uQ29uc3RyYWludFZpb2xhdGlvbkV4Y2VwdGlvbil7CisgICAgICAgICAgICAgICAgaWYodCBpbnN0YW5jZW9mIGpha2FydGEudmFsaWRhdGlvbi5Db25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uKXsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRm91bmQgQ29uc3RyYWludCBWaW9sYXRpb24gZm9yIHJlc291cmNlIFsiK2puZGlOYW1lKyJdIiArIHQuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgICAgCXJlc3VsdCA9IHRydWU7Ci0gICAgICAgICAgICAJfWVsc2V7Ci0gICAgICAgICAgICAgICAgIAlyZXN1bHQgPSBpc0NvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb24odC5nZXRDYXVzZSgpLCBqbmRpTmFtZSk7Ci0gICAgICAgICAgICAJfQorICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzQ29uc3RyYWludFZpb2xhdGlvbkV4Y2VwdGlvbih0LmdldENhdXNlKCksIGpuZGlOYW1lKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTIxNiw3ICsyMTYsNyBAQAogICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoY29uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gY29uOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTIyNyw3ICsyMjcsNyBAQAogICAgICAgICAgICAgdGhyb3cgZXgxOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGNsb3NlQ29ubmVjdGlvbihDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmIChoZWxkQ29uICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGFkMjA3Yi4uMGIzOGMxOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogZWpiLWphci54bWw9TUVUQS1JTkYvZWpiLWphci54bWwKIHN1bi1lamItamFyLnhtbD1NRVRBLUlORi9zdW4tZWpiLWphci54bWwKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKaW5kZXggYTQ4YWFiMS4uYjM3MzA1MCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKQEAgLTI5LDQxICsyOSw0MSBAQAogCiAvKioKICAqLwotcHVibGljIGNsYXNzIE15TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwgCitwdWJsaWMgY2xhc3MgTXlNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLAogICAgICAgICBNeU1lc3NhZ2VMaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIHRyYW5zaWVudCBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMgPSBudWxsOwogICAgIHByaXZhdGUgQ29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IsIHdoaWNoIGlzIHB1YmxpYyBhbmQgdGFrZXMgbm8gYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyBNeU1lc3NhZ2VCZWFuKCkge30KIAogICAgIC8qKgotICAgICAqIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgCi0gICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgCisgICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dAorICAgICAqIG5vdCBmaW5hbCBvciBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kCiAgICAgICogd2l0aCBvbmUgYXJndW1lbnQgb2YgdHlwZSBqYWthcnRhLmVqYi5NZXNzYWdlRHJpdmVuQ29udGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBtZGMgICAgdGhlIGNvbnRleHQgdG8gc2V0CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjKSB7Ci0JdGhpcy5tZGMgPSBtZGM7CisgICAgdGhpcy5tZGMgPSBtZGM7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogZWpiQ3JlYXRlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgeyB9CiAKICAgICAvKioKLSAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCisgICAgICogb25NZXNzYWdlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCiAgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG9uZSBhcmd1bWVudAogICAgICAqIG9mIHR5cGUgamFrYXJ0YS5qbXMuTWVzc2FnZS4KICAgICAgKgotICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzIAorICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzCiAgICAgICogdGhlIHRleHQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gaW5NZXNzYWdlICAgIHRoZSBpbmNvbWluZyBtZXNzYWdlCkBAIC03NCw3ICs3NCw3IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmIChpbk1lc3NhZ2UuZW5kc1dpdGgoIldSSVRFIikpIHsKLSAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwgCisgICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJXUklURSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbk1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGluTWVzc2FnZS5sYXN0SW5kZXhPZigiOiIpKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiREVMRVRFIikpIHsKICAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIkRFTEVURSIsCkBAIC05MCwxMCArOTAsMTAgQEAKICAgICAgICAgfQogCiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogZWpiUmVtb3ZlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJSZW1vdmUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KQEAgLTEwMyw2MiArMTAzLDYyIEBACiAKICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBTdHJpbmcgaWQgICAgPSBtZXNzYWdlLnN1YnN0cmluZygwLCBtZXNzYWdlLmluZGV4T2YoIjoiKSk7Ci0gICAgICAgIFN0cmluZyBib2R5ICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKG1lc3NhZ2UuaW5kZXhPZigiOiIpKzEpOyAKKyAgICAgICAgU3RyaW5nIGJvZHkgID0gbWVzc2FnZS5zdWJzdHJpbmcobWVzc2FnZS5pbmRleE9mKCI6IikrMSk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKCJSRUFEIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiUmVhZGluZyByb3cgZnJvbSBkYXRhYmFzZS4uLiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAKICAgICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPSAKKyAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9CiAgICAgICAgICAgICAgICAgICAiU0VMRUNUIGlkIGZyb20gbWVzc2FnZXMgd2hlcmUgaWQgPSAnUVEnIjsKICAgICAgICAgICAgICAgICAgIFJlc3VsdFNldCByZXN1bHRzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKyAKKyAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArCiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmdldEludCgiYmFsYW5jZSIpICsgIiBkb2xsYXJzIik7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICBzdG10LmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWFkIG9uZSBhY2NvdW50XG4iKTsKIAogICAgICAgICAgICAgfSBlbHNlIGlmICgiV1JJVEUiLmVxdWFscyhvcCkpIHsKIAogICAgICAgICAgICAgICAgIGRlYnVnKCJJbnNlcnRpbmcgb25lIG1lc3NhZ2UgaW4gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBjcmVhdGVSb3coaWQsIGJvZHksIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIG9uZSBtZXNzYWdlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfSBlbHNlIGlmICgiREVMRVRFIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgb25lIG1lc3NhZ2UgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWxldGVSb3coaWQsIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWxldGVkIG9uZSBtZXNzYWdlXG4iKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIkRFTEVURV9BTEwiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBhbGwgbWVzc2FnZXMgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKQEAgLTE2OSw3ICsxNjksNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvL3Vuc3VwcG9ydGVkIG9wCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9ZmluYWxseXsKICAgICAgICAgICAgIHRyeXsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24uY2xvc2UoKTsKQEAgLTE3OCw5ICsxNzgsOSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBjcmVhdGVSb3coU3RyaW5nIGlkLCBTdHJpbmcgYm9keSwgCi0gICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisKKyAgICBwcml2YXRlIHZvaWQgY3JlYXRlUm93KFN0cmluZyBpZCwgU3RyaW5nIGJvZHksCisgICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgLy8gQ3JlYXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCkBAIC0xOTYsOSArMTk2LDkgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVSb3coU3RyaW5nIGlkLCBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvdyhTdHJpbmcgaWQsIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIGRlYnVnKCJEZWxldGVSb3cgd2l0aCBJRCA9ICIgKyBpZCk7CiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwpAQCAtMjExLDkgKzIxMSw5IEBACiAgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICBTdHJpbmcgcXVlcnkgPSAiREVMRVRFIEZST00gbWVzc2FnZXMiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDVhYTM4YjMuLjEyZGU0NmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3NpbXBsZS1jb25uZWN0b3ItYmVhbi12YWxpZGF0aW9uL3NlcnZsZXQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJodHRwOmhvc3QiIHZhbHVlPSJsb2NhbGhvc3QiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9idWlsZC54bWwKaW5kZXggYmM3YmRmZC4uZTExZjQ5NCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9idWlsZC54bWwKQEAgLTkzLDE0ICs5MywxNCBAQAogPCEtLQogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0iY29ubmVjdG9yMS41IChlYXIgYmFzZWQpIi8+Ci0JICAgIDwvYW50Y2FsbD4KKyAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9ImNvbm5lY3RvcjEuNSAoZWFyIGJhc2VkKSIvPgorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAtLT4KIAogICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0ic2ltcGxlLWNvbm5lY3Rvci1iZWFuLXZhbGlkYXRpb24iIC8+CisgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzaW1wbGUtY29ubmVjdG9yLWJlYW4tdmFsaWRhdGlvbiIgLz4KICAgICAgICAgPHBhcmFtICBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IlN0YW5kYWxvbmUtIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvTUVUQS1JTkYvcmEueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9NRVRBLUlORi9yYS54bWwKaW5kZXggODI2MzZkNS4uNWM3NDYzMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9NRVRBLUlORi9yYS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9NRVRBLUlORi9yYS54bWwKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPGluYm91bmQtcmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4KICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyPgogICAgICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyLXR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWMtY2xhc3M+CiAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWM+CiAgICAgICAgICAgICAgICAgPC9tZXNzYWdlbGlzdGVuZXI+Ci0gICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgIDwvaW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+CiAgICAgICAgIDxhZG1pbm9iamVjdD4KICAgICAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+CkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAgICAgICAgIDwvYWRtaW5vYmplY3Q+CiAKLQk8YWRtaW5vYmplY3Q+CisgICAgPGFkbWlub2JqZWN0PgogICAgICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29ubmVjdG9yLk15QWRtaW5PYmplY3QxPC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+CiAgICAgICAgICAgPGFkbWlub2JqZWN0LWNsYXNzPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0MTwvYWRtaW5vYmplY3QtY2xhc3M+CiAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9idWlsZC54bWwKaW5kZXggYTFiYmU5Ny4uYzA1MzBkMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8YW50IGRpcj0ic3JjIiBpbmhlcml0QWxsPSJmYWxzZSIgdGFyZ2V0PSJhbGwiLz4KIAogICAgIDxqYXIgamFyZmlsZT0iZ2VuZXJpYy1yYS5yYXIiIGJhc2VkaXI9Ii4iCi0gICAgICAgICBpbmNsdWRlcz0iZ2VuZXJpYy1yYS5qYXIsIE1FVEEtSU5GLyoueG1sLCBNRVRBLUlORi9zZXJ2aWNlcy8qIiAvPiAKKyAgICAgICAgIGluY2x1ZGVzPSJnZW5lcmljLXJhLmphciwgTUVUQS1JTkYvKi54bWwsIE1FVEEtSU5GL3NlcnZpY2VzLyoiIC8+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9idWlsZC54bWwKaW5kZXggZmY4YmNjMi4uODQ5NmY2MCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2J1aWxkLnhtbApAQCAtMzAsOCArMzAsOCBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+Ci0JPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KKyAgICA8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgorICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxqYXIgamFyZmlsZT0iLi4vZ2VuZXJpYy1yYS5qYXIiIGJhc2VkaXI9ImNsYXNzZXMiCiAgICAgICAgICBpbmNsdWRlcz0iY29ubmVjdG9yLyouY2xhc3MiIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCmluZGV4IDU1NTMzZDQuLmY1OWIyYjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgQ29udHJvbHMgewogICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IHJlYWR5TG9jayA9IG5ldyBPYmplY3QoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQppbmRleCA2NTgyMzNlLi5kNzNjODYyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgRGVsaXZlcnlXb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTM2LDcgKzM2LDcgQEAKICAgICBwcml2YXRlIFN0cmluZyBvcDsKICAgICBwcml2YXRlIGJvb2xlYW4ga2VlcENvdW50OwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudGVyID0gMDsKLSAgICAKKwogICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgU3RyaW5nIG9wKSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICB0aGlzLmtlZXBDb3VudCA9IGZhbHNlOwogICAgIH0KIAotICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgCisgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLAogICAgICAgICAgICAgU3RyaW5nIG9wLCBib29sZWFuIGtlZXBDb3VudCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAKICAgICAgICAgZGVidWcoIkVOVEVSLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL01ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKICAgICAgICAgICAgIC8vZXAuYmVmb3JlRGVsaXZlcnkob25NZXNzYWdlKTsKQEAgLTc4LDExICs3OCwxMSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvL2VwLmFmdGVyRGVsaXZlcnkoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC05MywxNCArOTMsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKaW5kZXggMTAwY2FjZS4uZmE5M2Y2MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLmZvcmdldDogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgIH0KQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnByZXBhcmU6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICAgICAgcmV0dXJuIFhBUmVzb3VyY2UuWEFfT0s7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5yZWNvdmVyOiAiICsgZmxhZ1RvU3RyaW5nKGZsYWcpKTsKICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc3RhcnQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2Uuc3RhcnQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpICsgIiwiICsKICAgICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKaW5kZXggYjViMGYwMi4uNGM5YzAxMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIC8qKgogICogY29sbGVjdGlvbiBvZiBtZXNzYWdlcy4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKIApAQCAtNTQsNyArNTQsNyBAQAogICAgICAgIFN0cmluZyBjb21tYW5kICA9IGFyZ3NbMF07CiAgICAgICAgU3RyaW5nIGRlc3ROYW1lID0gYXJnc1sxXTsKICAgICAgICBTdHJpbmcgbWVzc2FnZSAgPSBhcmdzWzJdOwotICAgCisKICAgICAgICBpZiAoISJhZGQiLmVxdWFscyhjb21tYW5kKSkgewogICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQppbmRleCBiNzg1ZDIyLi5iYWNjNjhkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICBwdWJsaWMgaW50IGdldEludFZhbHVlKCl7CiAgICAgICByZXR1cm4gaW50VmFsdWU7CiAgICAgfQotIAorCiAgICAgQENvbmZpZ1Byb3BlcnR5KGRlZmF1bHRWYWx1ZT0iMSIsIHR5cGU9amF2YS5sYW5nLkludGVnZXIuY2xhc3MpCiAgICAgcHVibGljIHZvaWQgc2V0SW50VmFsdWUoaW50IGludFZhbHVlKXsKICAgICAgIHRoaXMuaW50VmFsdWUgPSBpbnRWYWx1ZTsKQEAgLTcxLDEzICs3MSwxMyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CiAgICAgICAgIGlmIChyZXNldENvbnRyb2wuZXF1YWxzKCJCRUdJTk5JTkciKSkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5yZWFkeUxvY2spewogICAgICAgICAgICAgICAgIENvbnRyb2xzLmRvbmU9ZmFsc2U7CiAgICAgICAgICAgICB9Ci0JICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7Ci0JfQorICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBkb25lKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QxLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdDEuamF2YQppbmRleCA5MmNhZTgxLi5hMzJmN2Y5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdDEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdDEuamF2YQpAQCAtNDcsNyArNDcsNyBAQAogICAgIHB1YmxpYyBpbnQgZ2V0SW50VmFsdWUoKXsKICAgICAgIHJldHVybiBpbnRWYWx1ZTsKICAgICB9Ci0gCisKICAgICBAQ29uZmlnUHJvcGVydHkodHlwZT1qYXZhLmxhbmcuSW50ZWdlci5jbGFzcykKICAgICBwdWJsaWMgdm9pZCBzZXRJbnRWYWx1ZShpbnQgaW50VmFsdWUpewogICAgICAgdGhpcy5pbnRWYWx1ZSA9IGludFZhbHVlOwpAQCAtODgsMTMgKzg4LDEzIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKICAgICAgICAgaWYgKHJlc2V0Q29udHJvbC5lcXVhbHMoIkJFR0lOTklORyIpKSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLnJlYWR5TG9jayl7CiAgICAgICAgICAgICAgICAgQ29udHJvbHMuZG9uZT1mYWxzZTsKICAgICAgICAgICAgIH0KLQkgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKLQl9CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGRvbmUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCmluZGV4IDhmMmRmMmYuLjQ2MDQ3MTcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCkBAIC0yNSw5ICsyNSw5IEBACiAgKiBzbyB0aGF0IHRoZSBhcHAgc2VydmVyIGNhbiBpbnN0YW50aWF0ZSBhbmQgY29uZmlndXJlCiAgKiBpdCBhdCB0aGUgcnVudGltZS4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwotcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjIAorcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjCiAgICAgaW1wbGVtZW50cyBBY3RpdmF0aW9uU3BlYywgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgZGVzdGluYXRpb25OYW1lOwpAQCAtNDQsNyArNDQsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25OYW1lICgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25OYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uTmFtZSAoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uTmFtZSgpIGNhbGxlZC4uLiBuYW1lID0gIiArIG5hbWUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uTmFtZSA9IG5hbWU7CkBAIC01MywxNyArNTMsMTcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uVHlwZSgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25UeXBlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uVHlwZSAoU3RyaW5nIHR5cGUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uVHlwZSAoKSBjYWxsZWQuLi4gdHlwZSA9ICIgKyB0eXBlKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvblR5cGU9IHR5cGU7CiAgICAgfQogCi0gICAgQE5vdE51bGwgCisgICAgQE5vdE51bGwKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3RQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0UHJvcDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0UHJvcCAoU3RyaW5nIHRlc3RQcm9wKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0UHJvcCAoKSBjYWxsZWQuLi4gdGVzdFByb3AgPSAiICsgdGVzdFByb3ApOwogICAgICAgICB0aGlzLnRlc3RQcm9wID0gdGVzdFByb3A7CkBAIC03NCw3ICs3NCw3IEBACiAgICAgcHVibGljIEludGVnZXIgZ2V0VGVzdEludGVnZXJQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0SW50ZWdlclByb3A7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdEludGVnZXJQcm9wIChJbnRlZ2VyIHRlc3RQcm9wMSkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdEludGVnZXJQcm9wICgpIGNhbGxlZC4uLiB0ZXN0SW50ZWdlclByb3AgPSAiICsgdGVzdFByb3AxKTsKICAgICAgICAgdGhpcy50ZXN0SW50ZWdlclByb3AgPSB0ZXN0UHJvcDE7CkBAIC0xMDAsNyArMTAwLDcgQEAKIAogICAgICAgfQogCi0gICB9IAorICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGRlYnVnIChTdHJpbmcgbWVzc2FnZSkKICAgICB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQppbmRleCAwM2Y1ODI4Li4yNmEyZGFkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKQEAgLTQ1LDE0ICs0NSwxNCBAQAogLyoqCiAgKiBUaGlzIGlzIGEgc2FtcGxlIHJlc291cmNlIGFkYXB0ZXIKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwotcHVibGljIGNsYXNzIFNpbXBsZVJlc291cmNlQWRhcHRlckltcGwgCitwdWJsaWMgY2xhc3MgU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbAogaW1wbGVtZW50cyBSZXNvdXJjZUFkYXB0ZXIsIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByaXZhdGUgQm9vdHN0cmFwQ29udGV4dCBjdHg7CiAgICAgcHJpdmF0ZSBXb3JrTWFuYWdlciB3bTsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIHRlc3ROYW1lOwogCiAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnID0gdHJ1ZTsKQEAgLTY0LDcgKzY0LDcgQEAKIAogICAgIHB1YmxpYyB2b2lkCiAgICAgc3RhcnQoQm9vdHN0cmFwQ29udGV4dCBjdHgpIHRocm93cyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIjAwMS4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAKICAgICAgICAgdGhpcy5jdHggPSBjdHg7CkBAIC03NSwxMiArNzUsMTIgQEAKIAogICAgICAgICAvL3Rlc3RpbmcgY3JlYXQgdGltZXIKICAgICAgICAgVGltZXIgdGltZXIgPSBudWxsOwotCSAgdHJ5ewotCSAgICAgIHRpbWVyID0gY3R4LmNyZWF0ZVRpbWVyKCk7Ci0JICB9IGNhdGNoKFVuYXZhaWxhYmxlRXhjZXB0aW9uIHVlKSB7Ci0JICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciIpOwotCSAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiRXJyb3IgZm9ybSBib290c3RyYXAiKTsKLQkgIH0KKyAgICAgIHRyeXsKKyAgICAgICAgICB0aW1lciA9IGN0eC5jcmVhdGVUaW1lcigpOworICAgICAgfSBjYXRjaChVbmF2YWlsYWJsZUV4Y2VwdGlvbiB1ZSkgeworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IiKTsKKyAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIGZvcm0gYm9vdHN0cmFwIik7CisgICAgICB9CiAgICAgICAgIGRlYnVnKCIwMDQuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogCiAgICAgICAgIGRlYnVnKCIwMDUuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwpAQCAtMTIwLDEzICsxMjAsMTMgQEAKIAogICAgIHB1YmxpYyB2b2lkCiAgICAgZW5kcG9pbnREZWFjdGl2YXRpb24gKAotICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBlbmRwb2ludEZhY3RvcnksIAorICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBlbmRwb2ludEZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIGRlYnVnICgiZW5kcG9pbnREZWFjdGl2YXRpb24gY2FsbGVkLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgICgoV29ya0Rpc3BhdGNoZXIpIHdvcmspLnN0b3AoKTsKICAgICB9Ci0gCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3ROYW1lKCkgewogICAgICAgICByZXR1cm4gdGVzdE5hbWU7CiAgICAgfQpAQCAtMTM2LDggKzEzNiw4IEBACiAgICAgcHVibGljIEludGVnZXIgZ2V0SW50VmFsdWUoKXsKICAgICAgIHJldHVybiBpbnRWYWx1ZTsKICAgICB9Ci0gICAKLSAgICBAQ29uZmlnUHJvcGVydHkodHlwZT1JbnRlZ2VyLmNsYXNzLCBkZWZhdWx0VmFsdWU9IjEwIikgCisKKyAgICBAQ29uZmlnUHJvcGVydHkodHlwZT1JbnRlZ2VyLmNsYXNzLCBkZWZhdWx0VmFsdWU9IjEwIikKICAgICBwdWJsaWMgdm9pZCBzZXRJbnRWYWx1ZShJbnRlZ2VyIGludFZhbHVlKXsKICAgICAgIHRoaXMuaW50VmFsdWUgPSBpbnRWYWx1ZTsKICAgICB9CkBAIC0xNTMsNyArMTUzLDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NpbXBsZVJlc291cmNlQWRhcHRlckltcGxdID09PiAiICsgbWVzc2FnZSk7CiAgICAgfQogCi0gICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKSAKKyAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpCiAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKaW5kZXggNmUwNWI1My4uZTc3NmVhYSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBXb3JrRGlzcGF0Y2hlciBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC00NCwxMSArNDQsMTEgQEAKICAgICBwcm90ZWN0ZWQgQWN0aXZhdGlvblNwZWMgc3BlYzsKICAgICBwcm90ZWN0ZWQgV29ya01hbmFnZXIgd207CiAgICAgcHJvdGVjdGVkIFhBVGVybWluYXRvciB4YTsKLSAgICAKKwogICAgIHB1YmxpYyBXb3JrRGlzcGF0Y2hlcigKICAgICAgICAgICAgIFN0cmluZyBpZCwKICAgICAgICAgICAgIEJvb3RzdHJhcENvbnRleHQgY3R4LAotICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LCAKKyAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwKICAgICAgICAgICAgIEFjdGl2YXRpb25TcGVjIHNwZWMpIHsKICAgICAgICAgdGhpcy5pZCAgICAgID0gaWQ7CiAgICAgICAgIHRoaXMuY3R4ICAgICA9IGN0eDsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAKICAgICAgICAgZGVidWcoIkVOVEVSLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIGRlYnVnKCJXQUlULi4uIik7CkBAIC0xMTEsMTUgKzExMSwxNSBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZSBhbGwuCiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgMSwgIkRFTEVURV9BTEwiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkRPTkUgREVMRVRFIEFMTCBGUk9NIERCIik7CiAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IDA7CiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMTU3LDE0ICsxNTcsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMTg3LDEzICsxODcsMTMgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vU2xlZXAgZm9yIDUgc2Vjb25kcwogICAgICAgICAgICAgLy9UaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDUqMTAwMCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIC8vTm90aWZ5IHRoZSBjbGllbnQgdG8gY2hlY2sgdGhlIHJlc3VsdHMKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5QWxsKCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnlBbGwoKTsKIAogICAgICAgICAgICAgICAgIC8vV2FpdCB1bnRpbCByZXN1bHRzIGFyZSB2ZXJpZmllZCBieSB0aGUgY2xpZW50Ci0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsKIAogICAgICAgICAgICAgICAgIGlmIChzdG9wKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQppbmRleCA3NzgzN2Y3Li4xZDUwMjRiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCkBAIC0zNSw4ICszNSw4IEBACiAgICAgcHVibGljIGludCBicmFuY2hRdWFsaWZpZXI7CiAgICAgcHVibGljIGludCBnbG9iYWxUeElEOwogCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7IAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OyAKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsKIAogICAgIHB1YmxpYyBYSUQoKSB7CiAgICAgICAgIGludCBmb28gPSBJRCsrOwpAQCAtNTQsMTAgKzU0LDEwIEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAvLyBJdCBjYW4ndCBiZSBlcXVhbAogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG90aGVyID0gKFhJRClvOyAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3RoZXIgWElELCBub3cgcHJvcGVybHkgY2FzdAotICAgICAgICAKLSAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQgCisKKyAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQKICAgICAgICAgICAgICAgICAmJiB0aGlzLmJyYW5jaFF1YWxpZmllciA9PSBvdGhlci5icmFuY2hRdWFsaWZpZXIKICAgICAgICAgICAgICAgICAmJiB0aGlzLmdsb2JhbFR4SUQgPT0gb3RoZXIuZ2xvYmFsVHhJRCkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgICAgICAgICAgICAgImZvcm1hdElEKCIgICAgICsgZm9ybWF0SUQgICAgICsgIiksICIgKwogICAgICAgICAgICAgICAgICJicmFuY2hRdWFsaWZpZXIgKCIgKyBicmFuY2hRdWFsaWZpZXIgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImdsb2JhbFR4SUQoIiArIGdsb2JhbFR4SUQgKyAiKX0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHM7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWxkLnhtbAppbmRleCA3NmRkZjNmLi5iMjA5ZTkxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9idWlsZC54bWwKQEAgLTEzMyw3ICsxMzMsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci10YXJnZXQiIHZhbHVlPSJhbGwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwtd2l0aC1zZWN1cml0eS1tYW5hZ2VyIj4KICAgICAgIDxkZWxldGU+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9InRlc3RfcmVzdWx0cyoiLz4KQEAgLTIxMywzMiArMjEzLDMyIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbm5lY3Rvcl9ncm91cF8xIj4KLQkgICAgPGVjaG8gbWVzc2FnZT0iKioqKioqKioqKioqICBTdGFydGluZyBjb25uZWN0b3JfZ3JvdXBfMSAgKioqKioqKioqKioqIi8+ICAgIAorICAgICAgICA8ZWNobyBtZXNzYWdlPSIqKioqKioqKioqKiogIFN0YXJ0aW5nIGNvbm5lY3Rvcl9ncm91cF8xICAqKioqKioqKioqKioiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBjb25uZWN0b3IxLjUgIyNAQCIvPgogICAgICAgICA8YW50IGRpcj0iY29ubmVjdG9yMS41IiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLz4KIAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIGVtYmVkZGVkQ29ubmVjdG9yMS41ICMjQEAiLz4KICAgICAgICAgPGFudCBkaXI9Ii4uL2VtYmVkZGVkQ29ubmVjdG9yMS41IiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLz4KIAotCQk8ZWNobyBtZXNzYWdlPSJAQCMjIGVtYmVkZGVkd2ViICMjQEAiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBlbWJlZGRlZHdlYiAjI0BAIi8+CiAgICAgICAgIDxhbnQgZGlyPSJlbWJlZGRlZHdlYiIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+CiAKLQkJPGVjaG8gbWVzc2FnZT0iQEAjIyBtcSAjI0BAIi8+Ci0JCTxhbnQgZGlyPSIuLi9tcSIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgbXEgIyNAQCIvPgorICAgICAgICA8YW50IGRpcj0iLi4vbXEiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIvPgogCi0JCTxlY2hvIG1lc3NhZ2U9IkBAIyMgbm9uYWNjICMjQEAiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBub25hY2MgIyNAQCIvPgogICAgICAgICA8YW50IGRpcj0iLi4vbm9uYWNjIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLz4KIAotCQk8ZWNobyBtZXNzYWdlPSJAQCMjIHdlYjJjb25uZWN0b3IgIyNAQCIvPgotCQk8YW50IGRpcj0iLi4vd2ViMmNvbm5lY3RvciIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9IiAvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIHdlYjJjb25uZWN0b3IgIyNAQCIvPgorICAgICAgICA8YW50IGRpcj0iLi4vd2ViMmNvbm5lY3RvciIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9IiAvPgogCi0JCTxlY2hvIG1lc3NhZ2U9IkBAIyMgd2ViMmNvbm5lY3RvciAoc2Vjb25kIHRpbWUpICMjQEAiLz4KLQkJPGFudCBkaXI9Ii4uL3dlYjJjb25uZWN0b3IiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIgLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyB3ZWIyY29ubmVjdG9yIChzZWNvbmQgdGltZSkgIyNAQCIvPgorICAgICAgICA8YW50IGRpcj0iLi4vd2ViMmNvbm5lY3RvciIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9IiAvPgogCi0JCTxlY2hvIG1lc3NhZ2U9IkBAIyMgbm9uc3RyaW5nbWNmcHJvcGVydGllcyAjI0BAIi8+Ci0JCTxhbnQgZGlyPSJub25zdHJpbmdtY2Zwcm9wZXJ0aWVzIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBub25zdHJpbmdtY2Zwcm9wZXJ0aWVzICMjQEAiLz4KKyAgICAgICAgPGFudCBkaXI9Im5vbnN0cmluZ21jZnByb3BlcnRpZXMiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIvPgogCi0JCTxlY2hvIG1lc3NhZ2U9IkBAIyMgbm9uc3RyaW5ncmFwcm9wZXJ0aWVzICMjQEAiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBub25zdHJpbmdyYXByb3BlcnRpZXMgIyNAQCIvPgogICAgICAgICA8YW50IGRpcj0iLi4vbm9uc3RyaW5ncmFwcm9wZXJ0aWVzIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iIC8+CiAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyB0eGxldmVsc3dpdGNoICMjQEAiLz4KQEAgLTI1MCw4ICsyNTAsOCBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIGVqYiAzLjIgY29ubmVjdG9yIDEuNyBtZGIgdGVzdCMjQEAiLz4KICAgICAgICAgPGFudCBkaXI9ImVqYjMyLW1kYiIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+CiAKLQkJPGVjaG8gbWVzc2FnZT0iQEAjIyBTdW5SYVhtbCAjI0BAIi8+Ci0JCTxhbnQgZGlyPSJTdW5SYVhtbCIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgU3VuUmFYbWwgIyNAQCIvPgorICAgICAgICA8YW50IGRpcj0iU3VuUmFYbWwiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIvPgogCiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgc2VyaWFsaXphYmxldGVzdCAjI0BAIi8+CiAgICAgICAgIDxhbnQgZGlyPSJzZXJpYWxpemFibGV0ZXN0IiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLz4KQEAgLTI2NSwyMiArMjY1LDIyIEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgcmVkZXBsb3lSYXIgIyNAQCIvPgogICAgICAgICA8YW50IGRpcj0icmVkZXBsb3lSYXIiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIvPgogCi0JCTxlY2hvIG1lc3NhZ2U9IkBAIyMgYW5ub3RhdGlvbi1lbWJlZGRlZHdlYiAjI0BAIi8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgYW5ub3RhdGlvbi1lbWJlZGRlZHdlYiAjI0BAIi8+CiAgICAgICAgIDxhbnQgZGlyPSJhbm5vdGF0aW9uLWVtYmVkZGVkd2ViIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLz4KIAotCQk8ZWNobyBtZXNzYWdlPSJAQCMjIGluc3RhbGxlZCBsaWJyYXJpZXMgZW1iZWRkZWQgcmFyIEVYVEVOU0lPTl9MSVNUICMjQEAiLz4KLQkJPGFudCBkaXI9Imluc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQiIHRhcmdldD0iYWxsLWV4dCIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIGluc3RhbGxlZCBsaWJyYXJpZXMgZW1iZWRkZWQgcmFyIEVYVEVOU0lPTl9MSVNUICMjQEAiLz4KKyAgICAgICAgPGFudCBkaXI9Imluc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQiIHRhcmdldD0iYWxsLWV4dCIvPgogCi0JCTxlY2hvIG1lc3NhZ2U9IkBAIyMgZGVmYXVsdENvbm5lY3RvclJlc291cmNlICMjQEAiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBkZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UgIyNAQCIvPgogICAgICAgICA8YW50IGRpcj0iZGVmYXVsdENvbm5lY3RvclJlc291cmNlIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLz4KLQk8L3RhcmdldD4KKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29ubmVjdG9yX2dyb3VwXzIiPgotCTxlY2hvIG1lc3NhZ2U9IioqKioqKioqKioqKiAgU3RhcnRpbmcgY29ubmVjdG9yX2dyb3VwXzIgICoqKioqKioqKioqKiIvPgorICAgIDxlY2hvIG1lc3NhZ2U9IioqKioqKioqKioqKiAgU3RhcnRpbmcgY29ubmVjdG9yX2dyb3VwXzIgICoqKioqKioqKioqKiIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIGZvcmNlLWRlcGxveS1yYXIgIyNAQCIvPgogICAgICAgICA8YW50IGRpcj0iZm9yY2UtZGVwbG95LXJhciIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+CiAKLQkJPGVjaG8gbWVzc2FnZT0iQEAjIyBidWlsdC1pbi1jdXN0b20tcmVzb3VyY2VzICMjQEAiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBidWlsdC1pbi1jdXN0b20tcmVzb3VyY2VzICMjQEAiLz4KICAgICAgICAgPGFudCBkaXI9ImJ1aWx0LWluLWN1c3RvbS1yZXNvdXJjZXMiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIvPgogCiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgZGF0YXNvdXJjZS1kZWZpbml0aW9uIyNAQCIvPgpAQCAtMjkyLDMyICsyOTIsMzIgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29ubmVjdG9yX2dyb3VwXzMiPgotCTxlY2hvIG1lc3NhZ2U9IioqKioqKioqKioqKiAgU3RhcnRpbmcgY29ubmVjdG9yX2dyb3VwXzMgICoqKioqKioqKioqKiIvPgotCQk8ZWNobyBtZXNzYWdlPSJAQCMjIGNvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEjI0BAIi8+Ci0JCTxhbnQgZGlyPSJjb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLz4KKyAgICA8ZWNobyBtZXNzYWdlPSIqKioqKioqKioqKiogIFN0YXJ0aW5nIGNvbm5lY3Rvcl9ncm91cF8zICAqKioqKioqKioqKioiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBjb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhIyNAQCIvPgorICAgICAgICA8YW50IGRpcj0iY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYSIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+CiAKLQkJPGVjaG8gbWVzc2FnZT0iQEAjIyBhZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYSMjQEAiLz4KLQkJPGFudCBkaXI9ImFkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBhZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYSMjQEAiLz4KKyAgICAgICAgPGFudCBkaXI9ImFkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLz4KIAotCQk8ZWNobyBtZXNzYWdlPSJAQCMjIGFkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbiMjQEAiLz4KLQkJPGFudCBkaXI9ImFkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbiIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uIyNAQCIvPgorICAgICAgICA8YW50IGRpcj0iYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLz4KIAotCQk8ZWNobyBtZXNzYWdlPSJAQCMjIGptcy1jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbiMjQEAiLz4KLQkJPGFudCBkaXI9Imptcy1jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbiIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgam1zLWNvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uIyNAQCIvPgorICAgICAgICA8YW50IGRpcj0iam1zLWNvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLz4KICAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iY29ubmVjdG9yX2dyb3VwXzQiPgotCQk8ZWNobyBtZXNzYWdlPSIqKioqKioqKioqKiogIFN0YXJ0aW5nIGNvbm5lY3Rvcl9ncm91cF80ICAqKioqKioqKioqKioiLz4KLQkJPGVjaG8gbWVzc2FnZT0iQEAjIyBqbXMtZGVzdGluYXRpb24tZGVmaW5pdGlvbiMjQEAiLz4KLQkJPGFudCBkaXI9Imptcy1kZXN0aW5hdGlvbi1kZWZpbml0aW9uIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImNvbm5lY3Rvcl9ncm91cF80Ij4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iKioqKioqKioqKioqICBTdGFydGluZyBjb25uZWN0b3JfZ3JvdXBfNCAgKioqKioqKioqKioqIi8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgam1zLWRlc3RpbmF0aW9uLWRlZmluaXRpb24jI0BAIi8+CisgICAgICAgIDxhbnQgZGlyPSJqbXMtZGVzdGluYXRpb24tZGVmaW5pdGlvbiIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+CiAKLQkJPGVjaG8gbWVzc2FnZT0iQEAjIyBpbnN0YWxsZWQgbGlicmFyaWVzIEVYVEVOU0lPTl9MSVNUICMjQEAiLz4KLQkJPGFudCBkaXI9Imluc3RhbGxlZC1saWJyYXJpZXMiIHRhcmdldD0iYWxsLWV4dCIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIGluc3RhbGxlZCBsaWJyYXJpZXMgRVhURU5TSU9OX0xJU1QgIyNAQCIvPgorICAgICAgICA8YW50IGRpcj0iaW5zdGFsbGVkLWxpYnJhcmllcyIgdGFyZ2V0PSJhbGwtZXh0Ii8+CiAKLQkJPGVjaG8gbWVzc2FnZT0iQEAjIyBpbnN0YWxsZWQgbGlicmFyaWVzICgtLWxpYnJhcmllcykgIyNAQCIvPgotCQk8YW50IGRpcj0iaW5zdGFsbGVkLWxpYnJhcmllcyIgdGFyZ2V0PSJhbGwtLWxpYnJhcmllcyIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIGluc3RhbGxlZCBsaWJyYXJpZXMgKC0tbGlicmFyaWVzKSAjI0BAIi8+CisgICAgICAgIDxhbnQgZGlyPSJpbnN0YWxsZWQtbGlicmFyaWVzIiB0YXJnZXQ9ImFsbC0tbGlicmFyaWVzIi8+CiAKLQkJPGVjaG8gbWVzc2FnZT0iQEAjIyBzZWN1cml0eS1tYXAtd2ViI0BAIi8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgc2VjdXJpdHktbWFwLXdlYiNAQCIvPgogICAgICAgICA8YW50IGRpcj0ic2VjdXJpdHltYXB3ZWIiIHRhcmdldD0iYWxsIi8+CiAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyByYXItYWNjZXNzaWJpbGl0eSAjI0BAIi8+CkBAIC0zMjksMzEgKzMyOSwzMSBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIG9zZ2ktcmVzb3VyY2VzLXRlc3QgIyNAQCIvPgogICAgICAgICA8YW50IGRpcj0ib3NnaS1yZXNvdXJjZXMtdGVzdCIgdGFyZ2V0PSJhbGwiLz4KIAotICAgIAk8ZWNobyBtZXNzYWdlPSJAQCMjIGJlYW52YWxpZGF0aW9uLXNpbXBsZSAjI0BAIi8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgYmVhbnZhbGlkYXRpb24tc2ltcGxlICMjQEAiLz4KICAgICAgICAgPGFudCBkaXI9ImJlYW52YWxpZGF0aW9uLXNpbXBsZSIgdGFyZ2V0PSJhbGwiLz4KIAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIGJlYW52YWxpZGF0aW9uLXNpbXBsZSAjI0BAIi8+CiAgICAgICAgIDxhbnQgZGlyPSJiZWFudmFsaWRhdGlvbi1zaW1wbGUiIHRhcmdldD0iZW1iZWRkZWQtYWxsIi8+CiAKLQkJPCEtLWVjaG8gbWVzc2FnZT0iQEAjIyBkZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIgIyNAQCIvPgorICAgICAgICA8IS0tZWNobyBtZXNzYWdlPSJAQCMjIGRlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhciAjI0BAIi8+CiAgICAgICAgIDxhbnQgZGlyPSJkZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIvLS0+CiAKLQkJPCEtLWVjaG8gbWVzc2FnZT0iQEAjIyBjb25uZWN0b3IxLjYgIyNAQCIvPgorICAgICAgICA8IS0tZWNobyBtZXNzYWdlPSJAQCMjIGNvbm5lY3RvcjEuNiAjI0BAIi8+CiAgICAgICAgIDxhbnQgZGlyPSJjb25uZWN0b3IxLjYiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIvLS0+CiAKLQkJPCEtLWVjaG8gbWVzc2FnZT0iQEAjIyBBbm5vdGF0ZWQgQ29ubmVjdG9yMS41ICMjQEAiLz4KKyAgICAgICAgPCEtLWVjaG8gbWVzc2FnZT0iQEAjIyBBbm5vdGF0ZWQgQ29ubmVjdG9yMS41ICMjQEAiLz4KICAgICAgICAgPGFudCBkaXI9ImFubm90YXRpb24tY29ubmVjdG9yMS41IiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLy0tPgogICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJzdGFydC1yZWNvcmQiPgotCQk8cmVjb3JkIG5hbWU9ImNvbm5lY3Rvci5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InN0YXJ0LXJlY29yZCI+CisgICAgICAgIDxyZWNvcmQgbmFtZT0iY29ubmVjdG9yLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJzdG9wLXJlY29yZCI+Ci0JCTxyZWNvcmQgbmFtZT0iY29ubmVjdG9yLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJzdG9wLXJlY29yZCI+CisgICAgICAgIDxyZWNvcmQgbmFtZT0iY29ubmVjdG9yLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImNvbm5lY3RvciI+CisgICAgPHRhcmdldCBuYW1lPSJjb25uZWN0b3IiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbm5lY3Rvcl9ncm91cF8xIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29ubmVjdG9yX2dyb3VwXzIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb25uZWN0b3JfZ3JvdXBfMyIvPgpAQCAtNTAxLDcgKzUwMSw3IEBACiAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBjb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sICMjQEAiLz4KICAgICAgICAgPGFudCBkaXI9Ii4uL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwiIHRhcmdldD0iYWxsIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sICMjQEAiLz4KICAgICAgICAgPGFudCBkaXI9Ii4uL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbCIgdGFyZ2V0PSJhbGwiLz4KIApAQCAtNTE5LDcgKzUxOSw3IEBACiAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBpbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy14bWwgIyNAQCIvPgogICAgICAgICA8YW50IGRpcj0iaW5zdGFsbGVkLWxpYnJhcmllcy1yZXNvdXJjZXMiIHRhcmdldD0iYWxsLS1saWJyYXJpZXMiLz4KLSAgICAgICAgCisKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBjb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbCAjI0BAIi8+CiAgICAgICAgIDxhbnQgZGlyPSJjb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbCIgdGFyZ2V0PSJhbGwtd2l0aC1tYXBwaW5ncyIvPgogCkBAIC01MzcsNyArNTM3LDcgQEAKIAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIGNvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlICMjQEAiLz4KICAgICAgICAgPGFudCBkaXI9Ii4uL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlIiB0YXJnZXQ9ImFsbCIvPgotICAgICAgICAKKwogICAgICAgICA8ZWNobyBtZXNzYWdlPSJqcGEtdHhfcHJvcGFnYXRpb24tcmVzb3VyY2VzLXhtbCMjQEAiLz4KICAgICAgICAgPGFudCBkaXI9ImpwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sIiB0YXJnZXQ9ImFsbCIvPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYnVpbHQtaW4tY3VzdG9tLXJlc291cmNlcy1yZXNvdXJjZXMteG1sL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYnVpbHQtaW4tY3VzdG9tLXJlc291cmNlcy1yZXNvdXJjZXMteG1sL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzZlZDIyZS4uNWFkMjQ3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWx0LWluLWN1c3RvbS1yZXNvdXJjZXMtcmVzb3VyY2VzLXhtbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9idWlsdC1pbi1jdXN0b20tcmVzb3VyY2VzLXJlc291cmNlcy14bWwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLUN1c3RvbVJlc291cmNlRmFjdG9yaWVzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWx0LWluLWN1c3RvbS1yZXNvdXJjZXMtcmVzb3VyY2VzLXhtbC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYnVpbHQtaW4tY3VzdG9tLXJlc291cmNlcy1yZXNvdXJjZXMteG1sL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQppbmRleCBkNGEyY2ZmLi5hZTdlNWU3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYnVpbHQtaW4tY3VzdG9tLXJlc291cmNlcy1yZXNvdXJjZXMteG1sL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYnVpbHQtaW4tY3VzdG9tLXJlc291cmNlcy1yZXNvdXJjZXMteG1sL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQpAQCAtMzAsMTkgKzMwLDE5IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLSAJU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CisgICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwogCi0Jc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0U3VpdGUpOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24odGVzdFN1aXRlKTsKIAogICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQk1QSG9tZSIpOwotCVNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQorICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQogICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKIAogICAgICAgIHRyeXsKICAgICAvLyAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBcHBjbGllbnQgbG9va3VwICA6ICIgKyAgaWMubG9va3VwKCJqYXZhOmFwcC9jdXN0b20vbXktcHJvcGVydGllcy14bWwtZmlsZSIpKTsKLSAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpeyAKKyAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWx0LWluLWN1c3RvbS1yZXNvdXJjZXMtcmVzb3VyY2VzLXhtbC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWx0LWluLWN1c3RvbS1yZXNvdXJjZXMtcmVzb3VyY2VzLXhtbC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDRhOTYzMzAuLjkzZjg3NjIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9idWlsdC1pbi1jdXN0b20tcmVzb3VyY2VzLXJlc291cmNlcy14bWwvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYnVpbHQtaW4tY3VzdG9tLXJlc291cmNlcy1yZXNvdXJjZXMteG1sL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTcwLDYgKzcwLDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWx0LWluLWN1c3RvbS1yZXNvdXJjZXMtcmVzb3VyY2VzLXhtbC9kZXNjcmlwdG9yL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWx0LWluLWN1c3RvbS1yZXNvdXJjZXMtcmVzb3VyY2VzLXhtbC9kZXNjcmlwdG9yL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCmluZGV4IDRkMzMwZGQuLjNmYTI0NTAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9idWlsdC1pbi1jdXN0b20tcmVzb3VyY2VzLXJlc291cmNlcy14bWwvZGVzY3JpcHRvci9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYnVpbHQtaW4tY3VzdG9tLXJlc291cmNlcy1yZXNvdXJjZXMteG1sL2Rlc2NyaXB0b3IvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKQEAgLTU1LDQgKzU1LDQgQEAKICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJob3N0IiB2YWx1ZT0iamF2YS5zdW4uY29tIiAvPgogICAgICAgPHByb3BlcnR5IG5hbWU9InByb3RvY29sIiB2YWx1ZT0iaHR0cCIgLz4KICAgICA8L2N1c3RvbS1yZXNvdXJjZT4KLTwvcmVzb3VyY2VzPiAKKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWx0LWluLWN1c3RvbS1yZXNvdXJjZXMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9idWlsdC1pbi1jdXN0b20tcmVzb3VyY2VzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzZlZDIyZS4uNWFkMjQ3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWx0LWluLWN1c3RvbS1yZXNvdXJjZXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYnVpbHQtaW4tY3VzdG9tLXJlc291cmNlcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtQ3VzdG9tUmVzb3VyY2VGYWN0b3JpZXMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYnVpbHQtaW4tY3VzdG9tLXJlc291cmNlcy9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYnVpbHQtaW4tY3VzdG9tLXJlc291cmNlcy9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKaW5kZXggMjM0YzFhNC4uZDk3MWVmNyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWx0LWluLWN1c3RvbS1yZXNvdXJjZXMvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9idWlsdC1pbi1jdXN0b20tcmVzb3VyY2VzL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQpAQCAtMzAsMTMgKzMwLDEzIEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLSAJU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CisgICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwogCi0Jc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0U3VpdGUpOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24odGVzdFN1aXRlKTsKIAogICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQk1QSG9tZSIpOwotCVNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQorICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQogICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKIAogICAgIFNpbXBsZUJNUCBzaW1wbGVCTVAgPSBzaW1wbGVCTVBIb21lLmNyZWF0ZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWx0LWluLWN1c3RvbS1yZXNvdXJjZXMvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9idWlsdC1pbi1jdXN0b20tcmVzb3VyY2VzL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggZGViMDdhYi4uODkyNTI0OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWx0LWluLWN1c3RvbS1yZXNvdXJjZXMvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYnVpbHQtaW4tY3VzdG9tLXJlc291cmNlcy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC02Miw2ICs2Miw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25maWctcHJvcGVydHktYWNjZXNzb3ItdGVzdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2NvbmZpZy1wcm9wZXJ0eS1hY2Nlc3Nvci10ZXN0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODllYTBkNS4uN2ZjNTQwNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2NvbmZpZy1wcm9wZXJ0eS1hY2Nlc3Nvci10ZXN0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2NvbmZpZy1wcm9wZXJ0eS1hY2Nlc3Nvci10ZXN0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY29uZmlnLXByb3BlcnR5LWFjY2Vzc29yLXRlc3QiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0icmFyZmlsZSIgdmFsdWU9InJhci9ibGFja2JveC10eC5yYXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25maWctcHJvcGVydHktYWNjZXNzb3ItdGVzdC9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0pkYmNDb25uZWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29uZmlnLXByb3BlcnR5LWFjY2Vzc29yLXRlc3QvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9KZGJjQ29ubmVjdGlvbi5qYXZhCmluZGV4IGZhNjQ5NTkuLmJiMzY1NmEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25maWctcHJvcGVydHktYWNjZXNzb3ItdGVzdC9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0pkYmNDb25uZWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2NvbmZpZy1wcm9wZXJ0eS1hY2Nlc3Nvci10ZXN0L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvSmRiY0Nvbm5lY3Rpb24uamF2YQpAQCAtMTgzLDcgKzE4Myw3IEBACiAgICAgfQogCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgLy8gVEhFIEZPTExPV0lORyBBUElTIEFSRSBORVcgRlJPTSBKREsgMS40IC8vICAgICAgICAKKyAgICAvLyBUSEUgRk9MTE9XSU5HIEFQSVMgQVJFIE5FVyBGUk9NIEpESyAxLjQgLy8KICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogICAgIC8vLy8vLy8vLy8vLy8gIEJFR0lOICBKREsgMS40ICAvLy8vLy8vLy8vLy8vLwpAQCAtMzI5LDI3ICszMjksMjcgQEAKICAgICB9CiAKICAgICAvLy8vLy8vLy8vLy8vICBFTkQgIEpESyAxLjQgIC8vLy8vLy8vLy8vLy8vCi0gICAgCisKICAgICBwdWJsaWMgaW50IGdldE5ldHdvcmtUaW1lb3V0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5ldHdvcmtUaW1lb3V0KEV4ZWN1dG9yIGV4ZWN1dG9yLCBpbnQgbWlsbGlzZWNvbmRzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWJvcnQoRXhlY3V0b3IgZXhlY3V0b3IpICB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFNjaGVtYSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNjaGVtYShTdHJpbmcgc2NoZW1hKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKIAogICAgIHZvaWQgYXNzb2NpYXRlQ29ubmVjdGlvbihKZGJjTWFuYWdlZENvbm5lY3Rpb24gbmV3TWMpCiAgICAgICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2NvbmZpZy1wcm9wZXJ0eS1hY2Nlc3Nvci10ZXN0L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvTG9jYWxUeE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2NvbmZpZy1wcm9wZXJ0eS1hY2Nlc3Nvci10ZXN0L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvTG9jYWxUeE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IDBlNDdkZGMuLmE5Njg2MDEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25maWctcHJvcGVydHktYWNjZXNzb3ItdGVzdC9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0xvY2FsVHhNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29uZmlnLXByb3BlcnR5LWFjY2Vzc29yLXRlc3QvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9Mb2NhbFR4TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICBpZiAoIWdldEJvb2xlYW5XaXRoR2V0Qm9vbGVhbkFjY2Vzc29yKCkpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQmxhY2tib3ggUkFSIDogR2V0IEJvb2xlYW4gQWNjZXNzb3IgaXMgZmFsc2UiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoIWlzQm9vbGVhbldpdGhJc0Jvb2xlYW5BY2Nlc3NvcigpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkJsYWNrYm94IFJBUiA6IElzIEJvb2xlYW4gQWNjZXNzb3IgaXMgZmFsc2UiKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2NvbmZpZy1wcm9wZXJ0eS1hY2Nlc3Nvci10ZXN0L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvUmVzb3VyY2VBZGFwdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29uZmlnLXByb3BlcnR5LWFjY2Vzc29yLXRlc3QvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9SZXNvdXJjZUFkYXB0ZXIuamF2YQppbmRleCA4ZjJmMzU0Li43OTI1MDk4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29uZmlnLXByb3BlcnR5LWFjY2Vzc29yLXRlc3QvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9SZXNvdXJjZUFkYXB0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29uZmlnLXByb3BlcnR5LWFjY2Vzc29yLXRlc3QvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9SZXNvdXJjZUFkYXB0ZXIuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBhY3RpdmF0aW9uU3BlY3MpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBudWxsOyAgCisgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIAogICAgIHB1YmxpYyBCb290c3RyYXBDb250ZXh0IGdldEJvb3RzdHJhcENvbnRleHQoKXsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25maWctcHJvcGVydHktYWNjZXNzb3ItdGVzdC9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25maWctcHJvcGVydHktYWNjZXNzb3ItdGVzdC9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQppbmRleCBiZTM3OTUzLi41NWM2NWY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29uZmlnLXByb3BlcnR5LWFjY2Vzc29yLXRlc3Qvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2NvbmZpZy1wcm9wZXJ0eS1hY2Nlc3Nvci10ZXN0L3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgIH1jYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpewogICAgICAgICAgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0gY2F0Y2ggKENyZWF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOyAgCisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9ZmluYWxseXsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJFTkRfT0ZfVEVTVCIpOwogICAgICAgICAgICAgb3V0LmZsdXNoKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29uZmlnLXByb3BlcnR5LWFjY2Vzc29yLXRlc3Qvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2NvbmZpZy1wcm9wZXJ0eS1hY2Nlc3Nvci10ZXN0L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCA0MjM0MTE1Li5lZDZkYmFiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29uZmlnLXByb3BlcnR5LWFjY2Vzc29yLXRlc3Qvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25maWctcHJvcGVydHktYWNjZXNzb3ItdGVzdC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsMjAgKzEsMjAgQEAKLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsNCi0NCi1DUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSCAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDEwLCAnYWJjZCcpOw0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDExLCAncHFycycpOw0KLQ0KLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDI7DQotDQotQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0gyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSDIgVkFMVUVTKDEsICdhYmNkJyk7DQotSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSDIgVkFMVUVTKDIsICdwcXJzJyk7DQotDQorRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOworCitDUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSCAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxMCwgJ2FiY2QnKTsKK0lOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDExLCAncHFycycpOworCitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOworCitDUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSDIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSDIgVkFMVUVTKDEsICdhYmNkJyk7CitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIMiBWQUxVRVMoMiwgJ3BxcnMnKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2NvbmZpZy1wcm9wZXJ0eS1hY2Nlc3Nvci10ZXN0L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29uZmlnLXByb3BlcnR5LWFjY2Vzc29yLXRlc3Qvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCAwYzEyNDJmLi5kMTFhMTE1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29uZmlnLXByb3BlcnR5LWFjY2Vzc29yLXRlc3Qvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29uZmlnLXByb3BlcnR5LWFjY2Vzc29yLXRlc3Qvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSwyICsxLDIgQEAKLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsNCi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOw0KK0Ryb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsKK0Ryb3AgdGFibGUgVFhMRVZFTFNXSVRDSDI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvYnVpbGQucHJvcGVydGllcwppbmRleCA2MzAyZDg2Li45MjZlNTIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIzICsxNSwyMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL2J1aWxkLnhtbAppbmRleCBhMzExZWViLi5iZDY5MDc5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvYnVpbGQueG1sCkBAIC0zNywxMCArMzcsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iaW5mbyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgIAk8ZWNobyBtZXNzYWdlPSJidWlsZC5jbGFzc2VzLmRpciBpcyAke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotICAgIAk8ZWNobyBtZXNzYWdlPSJzMWFzdGVzdC5jbGFzc3BhdGggaXMgJHtzMWFzdGVzdC5jbGFzc3BhdGh9Ii8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkLmNsYXNzZXMuZGlyIGlzICR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9InMxYXN0ZXN0LmNsYXNzcGF0aCBpcyAke3MxYXN0ZXN0LmNsYXNzcGF0aH0iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCw3ICs0OCw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAJICA8ZWNobyBtZXNzYWdlPSJhc3NlbWJsZS5kaXIgPSAke2Fzc2VtYmxlLmRpcn0iLz4KKyAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJhc3NlbWJsZS5kaXIgPSAke2Fzc2VtYmxlLmRpcn0iLz4KICAgICAgICAgPCEtLWJ1aWxkIGFuZCBwYWNrYWdlIC53YXIgZmlyc3Qgc28gaXQgZG9lc24ndCBjb250YWluIGVqYiBiZWFuICEtLT4KICAgICAgICAgPCEtLWNsYXNzZXMgdGhhdCBoYXZlIEBTdGF0ZWxlc3MvQFN0YXRldWwgIS0tPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KQEAgLTcxLDIzICs3MSwyMyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIqKi9IZWxsbyoqLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAgCisKICAgICAgICAgPGFudCBkaXI9InJhIiB0YXJnZXQ9ImFsbCIvPgogCiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgICAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KIAogICAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgogICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+Ci0gICAgICAgICAgPC9maWxlc2V0PiAgCisgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgIDxmaWxlc2V0IGRpcj0icmEvIj4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioucmFyIi8+CiAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8L2Vhcj4KLSAgICAgICAgCisKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAxNzMwMWI5Li45NGJlMzUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvY2xpZW50L0NsaWVudC5qYXZhCkBAIC01OCw3ICs1OCw3IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRjTmFtZSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0Y05hbWUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB0aHJvdyBlOwpAQCAtNzksNyArNzksNyBAQAogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7CiAgICAgICAgIGlmIChjb2RlICE9IDIwMCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAppbmRleCA5OGZmZDY4Li45YTY4ZGM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgIDxtb2R1bGU+CiAgICAgICA8Y29ubmVjdG9yPmNmZC1yYS5yYXI8L2Nvbm5lY3Rvcj4KICAgICA8L21vZHVsZT4KLSAgICAKKwogCiAgICAgPGNvbm5lY3Rpb24tZmFjdG9yeT4KICAgICAgICA8ZGVzY3JpcHRpb24+Z2xvYmFsLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gYXBwbGljYXRpb24gREQ8L2Rlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvZGVzY3JpcHRvci9jb25uZWN0b3ItcmVzb3VyY2UueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvZGVzY3JpcHRvci9jb25uZWN0b3ItcmVzb3VyY2UueG1sCmluZGV4IDE0NGFiZDguLjMxOWQ2YWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL2Rlc2NyaXB0b3IvY29ubmVjdG9yLXJlc291cmNlLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9kZXNjcmlwdG9yL2Nvbm5lY3Rvci1yZXNvdXJjZS54bWwKQEAgLTIwLDEyICsyMCwxMiBAQAogPGNvbm5lY3Rpb24tZmFjdG9yeSB4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKICAgICAgICAgICAgICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9qYXZhZWVfNy54c2Q+Ci0JPGRlc2NyaXB0aW9uPmdsb2JhbC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIGFwcGxpY2F0aW9uIEREPC9kZXNjcmlwdGlvbj4KLQk8bmFtZT5qYXZhOmdsb2JhbC9lbnYvQXBwbGljYXRpb25fTGV2ZWxfQ29ubmVjdGlvbkZhY3Rvcnk8L25hbWU+Ci0JPGludGVyZmFjZS1uYW1lPmpha2FydGEucmVzb3VyY2UuY2NpLkNvbm5lY3Rpb25GYWN0b3J5PC9pbnRlcmZhY2UtbmFtZT4KLQk8cmVzb3VyY2UtYWRhcHRlcj5jZmQtcmE8L3Jlc291cmNlLWFkYXB0ZXI+Ci0JPHByb3BlcnR5PgotCQk8bmFtZT50cmFuc2FjdGlvblN1cHBvcnQ8L25hbWU+Ci0JCTx2YWx1ZT5Mb2NhbFRyYW5zYWN0aW9uPC92YWx1ZT4KLQk8L3Byb3BlcnR5PgorICAgIDxkZXNjcmlwdGlvbj5nbG9iYWwtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBhcHBsaWNhdGlvbiBERDwvZGVzY3JpcHRpb24+CisgICAgPG5hbWU+amF2YTpnbG9iYWwvZW52L0FwcGxpY2F0aW9uX0xldmVsX0Nvbm5lY3Rpb25GYWN0b3J5PC9uYW1lPgorICAgIDxpbnRlcmZhY2UtbmFtZT5qYWthcnRhLnJlc291cmNlLmNjaS5Db25uZWN0aW9uRmFjdG9yeTwvaW50ZXJmYWNlLW5hbWU+CisgICAgPHJlc291cmNlLWFkYXB0ZXI+Y2ZkLXJhPC9yZXNvdXJjZS1hZGFwdGVyPgorICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgPG5hbWU+dHJhbnNhY3Rpb25TdXBwb3J0PC9uYW1lPgorICAgICAgICA8dmFsdWU+TG9jYWxUcmFuc2FjdGlvbjwvdmFsdWU+CisgICAgPC9wcm9wZXJ0eT4KIDwvY29ubmVjdGlvbi1mYWN0b3J5PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggYzkxNDZiYy4uOGYyMTYxYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0xOCw5ICsxOCw5IEBACiAtLT4KIAogPGVqYi1qYXIgeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLSAgICAgICAgIG1ldGFkYXRhLWNvbXBsZXRlPSJmYWxzZSIgCi0gICAgICAgICB2ZXJzaW9uPSIzLjIiIAorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICAgIG1ldGFkYXRhLWNvbXBsZXRlPSJmYWxzZSIKKyAgICAgICAgIHZlcnNpb249IjMuMiIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSBodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18yLnhzZCI+CiAgIDxtb2R1bGUtbmFtZT5jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhLWVqYjwvbW9kdWxlLW5hbWU+CiAgIDxlbnRlcnByaXNlLWJlYW5zPgpAQCAtMjksNyArMjksNyBAQAogICAgICAgPGVqYi1uYW1lPkhlbGxvU3RhdGVmdWxFSkI8L2VqYi1uYW1lPgogICAgICAgPGJ1c2luZXNzLWxvY2FsPmNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbjMuSGVsbG9TdGF0ZWZ1bDwvYnVzaW5lc3MtbG9jYWw+CiAgICAgICA8ZWpiLWNsYXNzPmNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbjMuSGVsbG9TdGF0ZWZ1bEVKQjwvZWpiLWNsYXNzPgotICAgICAgCisKICAgICAgIDxjb25uZWN0aW9uLWZhY3Rvcnk+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5nbG9iYWwtc2NvcGUgcmVzb3VyY2UgdG8gYmUgbW9kaWZpZWQgYnkgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOmdsb2JhbC9lbnYvSGVsbG9TdGF0ZWZ1bEVKQl9Nb2RCeUREX0Nvbm5lY3Rpb25GYWN0b3J5PC9uYW1lPgpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICAgIDx2YWx1ZT5mb288L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9jb25uZWN0aW9uLWZhY3Rvcnk+Ci0gICAgICAKKwogICAgICAgPGNvbm5lY3Rpb24tZmFjdG9yeT4KICAgICAgICAgPGRlc2NyaXB0aW9uPm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6bW9kdWxlL2Vudi9IZWxsb1N0YXRlZnVsRUpCX0REX0Nvbm5lY3Rpb25GYWN0b3J5PC9uYW1lPgpAQCAtNjUsNyArNjUsNyBAQAogICAgICAgICAgIDx2YWx1ZT5mb288L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9jb25uZWN0aW9uLWZhY3Rvcnk+Ci0gICAgICAKKwogICAgICAgPGNvbm5lY3Rpb24tZmFjdG9yeT4KICAgICAgICAgPGRlc2NyaXB0aW9uPmFwcGxpY2F0aW9uLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTphcHAvZW52L0hlbGxvU3RhdGVmdWxFSkJfRERfQ29ubmVjdGlvbkZhY3Rvcnk8L25hbWU+CkBAIC03OSw3ICs3OSw3IEBACiAgICAgICAgICAgPHZhbHVlPmZvbzwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2Nvbm5lY3Rpb24tZmFjdG9yeT4KLSAgICAgIAorCiAgICAgICA8Y29ubmVjdGlvbi1mYWN0b3J5PgogICAgICAgICA8ZGVzY3JpcHRpb24+Y29tcG9uZW50LXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTpjb21wL2Vudi9IZWxsb1N0YXRlZnVsRUpCX0REX0Nvbm5lY3Rpb25GYWN0b3J5PC9uYW1lPgpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICAgIDx2YWx1ZT5mb288L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9jb25uZWN0aW9uLWZhY3Rvcnk+Ci0gICAgICAKKwogICAgIDwvc2Vzc2lvbj4KICAgICA8c2Vzc2lvbj4KICAgICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9FSkI8L2Rpc3BsYXktbmFtZT4KQEAgLTEyMiw3ICsxMjIsNyBAQAogICAgICAgICAgIDx2YWx1ZT5mb288L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9jb25uZWN0aW9uLWZhY3Rvcnk+Ci0gICAgICAKKwogICAgICAgPGNvbm5lY3Rpb24tZmFjdG9yeT4KICAgICAgICAgPGRlc2NyaXB0aW9uPmFwcGxpY2F0aW9uLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTphcHAvZW52L0hlbGxvRUpCX0REX0Nvbm5lY3Rpb25GYWN0b3J5PC9uYW1lPgpAQCAtMTU4LDggKzE1OCw4IEBACiAgICAgICAgICAgPHZhbHVlPmZvbzwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2Nvbm5lY3Rpb24tZmFjdG9yeT4KLSAgICAgIAorCiAgICAgPC9zZXNzaW9uPgogICA8L2VudGVycHJpc2UtYmVhbnM+Ci0gIAorCiA8L2VqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNDI1MWNmMC4uZmM4YTY1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMTgsOCArMTgsOCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIgotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgICAgCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgd2ViLWFwcF8zXzEueHNkIiAgIAorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSB3ZWItYXBwXzNfMS54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIzLjEiCiAgICAgICAgICBtZXRhZGF0YS1jb21wbGV0ZT0iZmFsc2UiPgogCkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICA8dmFsdWU+Zm9vPC92YWx1ZT4KICAgICAgICA8L3Byb3BlcnR5PgogICAgICA8L2Nvbm5lY3Rpb24tZmFjdG9yeT4KLSAgICAKKwogICAgICA8Y29ubmVjdGlvbi1mYWN0b3J5PgogICAgICAgIDxkZXNjcmlwdGlvbj5tb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBXZWIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgIDxuYW1lPmphdmE6bW9kdWxlL2Vudi9XZWJfRERfQ29ubmVjdGlvbkZhY3Rvcnk8L25hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9lamIvSGVsbG9FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL2VqYi9IZWxsb0VKQi5qYXZhCmluZGV4IGRhOTMxN2YuLjcxYTBmNjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL2VqYi9IZWxsb0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL2VqYi9IZWxsb0VKQi5qYXZhCkBAIC0zNiwzOSArMzYsMzkgQEAKICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0geyJ0ZXN0TmFtZT1mb28ifQogICAgICAgICAgICksCiAgICAgICAgICAgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImdsb2JhbC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24iLCAKLSAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTpnbG9iYWwvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQ29ubmVjdGlvbkZhY3RvcnkiLCAKLSAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWUgPSAiamFrYXJ0YS5yZXNvdXJjZS5jY2kuQ29ubmVjdGlvbkZhY3RvcnkiLCAKKyAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImdsb2JhbC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24iLAorICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOmdsb2JhbC9lbnYvSGVsbG9FSkJfQW5ub3RhdGlvbl9Db25uZWN0aW9uRmFjdG9yeSIsCisgICAgICAgICAgICAgICBpbnRlcmZhY2VOYW1lID0gImpha2FydGEucmVzb3VyY2UuY2NpLkNvbm5lY3Rpb25GYWN0b3J5IiwKICAgICAgICAgICAgICAgIHJlc291cmNlQWRhcHRlciA9ICIjY2ZkLXJhIiwKICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uU3VwcG9ydCA9IFRyYW5zYWN0aW9uU3VwcG9ydExldmVsLkxvY2FsVHJhbnNhY3Rpb24sCiAgICAgICAgICAgICAgICBtYXhQb29sU2l6ZSA9IDE2LAogICAgICAgICAgICAgICAgbWluUG9vbFNpemUgPSA0LAogICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHsidGVzdE5hbWU9Zm9vIn0KICAgICAgICAgICApLAotICAgICAgICAgIAorCiAgICAgICAgICAgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImFwcGxpY2F0aW9uLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbiIsIAotICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOmFwcC9lbnYvSGVsbG9FSkJfQW5ub3RhdGlvbl9Db25uZWN0aW9uRmFjdG9yeSIsIAotICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZSA9ICJqYWthcnRhLnJlc291cmNlLmNjaS5Db25uZWN0aW9uRmFjdG9yeSIsIAorICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiYXBwbGljYXRpb24tc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uIiwKKyAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTphcHAvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQ29ubmVjdGlvbkZhY3RvcnkiLAorICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZSA9ICJqYWthcnRhLnJlc291cmNlLmNjaS5Db25uZWN0aW9uRmFjdG9yeSIsCiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblN1cHBvcnQgPSBUcmFuc2FjdGlvblN1cHBvcnRMZXZlbC5YQVRyYW5zYWN0aW9uLAogICAgICAgICAgICAgICAgbWF4UG9vbFNpemUgPSAxNiwKICAgICAgICAgICAgICAgIG1pblBvb2xTaXplID0gNCwKICAgICAgICAgICAgICAgIHJlc291cmNlQWRhcHRlciA9ICIjY2ZkLXJhIiwKICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7InRlc3ROYW1lPWZvbyJ9CiAgICAgICAgICAgKSwKLSAgICAgICAgICAKKwogICAgICAgICAgIEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24oCi0gICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJtb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uIiwgCi0gICAgICAgICAgICAgICBuYW1lID0gImphdmE6bW9kdWxlL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0Nvbm5lY3Rpb25GYWN0b3J5IiwgCi0gICAgICAgICAgICAgICBpbnRlcmZhY2VOYW1lID0gImpha2FydGEucmVzb3VyY2UuY2NpLkNvbm5lY3Rpb25GYWN0b3J5IiwgCisgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJtb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uIiwKKyAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTptb2R1bGUvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQ29ubmVjdGlvbkZhY3RvcnkiLAorICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZSA9ICJqYWthcnRhLnJlc291cmNlLmNjaS5Db25uZWN0aW9uRmFjdG9yeSIsCiAgICAgICAgICAgICAgICByZXNvdXJjZUFkYXB0ZXIgPSAiI2NmZC1yYSIsCiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0geyJ0ZXN0TmFtZT1mb28ifQogICAgICAgICAgICksCi0gICAgICAgICAgCisKICAgICAgICAgICBAQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uKAotICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiY29tcG9uZW50LXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbiIsIAotICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOmNvbXAvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQ29ubmVjdGlvbkZhY3RvcnkiLCAKLSAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWUgPSAiamFrYXJ0YS5yZXNvdXJjZS5jY2kuQ29ubmVjdGlvbkZhY3RvcnkiLCAKKyAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24iLAorICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOmNvbXAvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQ29ubmVjdGlvbkZhY3RvcnkiLAorICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZSA9ICJqYWthcnRhLnJlc291cmNlLmNjaS5Db25uZWN0aW9uRmFjdG9yeSIsCiAgICAgICAgICAgICAgICByZXNvdXJjZUFkYXB0ZXIgPSAiI2NmZC1yYSIsCiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0geyJ0ZXN0TmFtZT1mb28ifQogICAgICAgICAgICkKQEAgLTgwLDcgKzgwLDcgQEAKIAogICAgIEBqYWthcnRhLmFubm90YXRpb24uUmVzb3VyY2UobmFtZT0iamF2YTpjb21wL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0Nvbm5lY3Rpb25GYWN0b3J5IikKICAgICBDb25uZWN0aW9uRmFjdG9yeSBjZjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29ubmVjdGlvbiBjID0gY2YuZ2V0Q29ubmVjdGlvbigpOwpAQCAtMTIzLDcgKzEyMyw3IEBACiAgICAgICAgIGxvb2t1cENvbm5lY3Rpb25GYWN0b3J5KCJqYXZhOmFwcC9lbnYvSGVsbG9FSkJfRERfQ29ubmVjdGlvbkZhY3RvcnkiLCB0cnVlKTsKICAgICAgICAgbG9va3VwQ29ubmVjdGlvbkZhY3RvcnkoImphdmE6bW9kdWxlL2Vudi9IZWxsb0VKQl9ERF9Db25uZWN0aW9uRmFjdG9yeSIsIHRydWUpOwogICAgICAgICBsb29rdXBDb25uZWN0aW9uRmFjdG9yeSgiamF2YTpjb21wL2Vudi9IZWxsb0VKQl9ERF9Db25uZWN0aW9uRmFjdG9yeSIsIHRydWUpOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvRUpCOjpoZWxsbygpIik7CiAgICAgfQogCkBAIC0xNTAsNiArMTUwLDYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvZWpiL0hlbGxvU3RhdGVmdWxFSkIuamF2YQppbmRleCBmMmU3NDAwLi4zOWZhNzQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEKQEAgLTEyMCw3ICsxMjAsNyBAQAogICAgICAgICBsb29rdXBDb25uZWN0aW9uRmFjdG9yeSgiamF2YTphcHAvZW52L0hlbGxvRUpCX0REX0Nvbm5lY3Rpb25GYWN0b3J5IiwgdHJ1ZSk7CiAgICAgICAgIGxvb2t1cENvbm5lY3Rpb25GYWN0b3J5KCJqYXZhOm1vZHVsZS9lbnYvSGVsbG9FSkJfRERfQ29ubmVjdGlvbkZhY3RvcnkiLCB0cnVlKTsKICAgICAgICAgbG9va3VwQ29ubmVjdGlvbkZhY3RvcnkoImphdmE6Y29tcC9lbnYvSGVsbG9FSkJfRERfQ29ubmVjdGlvbkZhY3RvcnkiLCBmYWxzZSk7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVmdWxFSkIgZGF0YXNvdXJjZS1kZWZpbml0aW9ucyBTdWNjZXNzIik7CiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0Fic3RyYWN0UmVzb3VyY2VBZGFwdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0Fic3RyYWN0UmVzb3VyY2VBZGFwdGVyLmphdmEKaW5kZXggMDdiOWQ3OC4uMGVmY2M1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9BYnN0cmFjdFJlc291cmNlQWRhcHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvQWJzdHJhY3RSZXNvdXJjZUFkYXB0ZXIuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIHRlc3ROYW1lOwogICAgIHByb3RlY3RlZCBib29sZWFuIGRlYnVnID0gdHJ1ZTsKIAotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHRlc3ROYW1lOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQppbmRleCA1NTUzM2Q0Li5mNTliMmIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgQ29udHJvbHMgewogICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IHJlYWR5TG9jayA9IG5ldyBPYmplY3QoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCmluZGV4IDAwMzQ0NjUuLmRjYTM3OWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIERlbGl2ZXJ5V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zMCw3ICszMCw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgb3A7CiAgICAgcHJpdmF0ZSBib29sZWFuIGtlZXBDb3VudDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnRlciA9IDA7Ci0gICAgCisKICAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIFN0cmluZyBvcCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgdGhpcy5rZWVwQ291bnQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIAorICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywKICAgICAgICAgICAgIFN0cmluZyBvcCwgYm9vbGVhbiBrZWVwQ291bnQpIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC00OSw3ICs0OSw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9NZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7CiAgICAgICAgICAgICAvL2VwLmJlZm9yZURlbGl2ZXJ5KG9uTWVzc2FnZSk7CkBAIC03MiwxMSArNzIsMTEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy9lcC5hZnRlckRlbGl2ZXJ5KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtODcsMTQgKzg3LDE0IEBACiAgICAgfQogCiAvLyAgICBwcml2YXRlIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0vLyAgICAgICAgCisvLwogLy8gICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogLy8gICAgICAgIHRyeSB7CiAvLyAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAvLyAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotLy8gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKy8vICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KIC8vICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLS8vICAgICAgICAgICAgCisvLwogLy8gICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogLy8gICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKIC8vICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKaW5kZXggMTAwY2FjZS4uZmE5M2Y2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKICAgICB9CiAKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGZvcmdldChYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UuZm9yZ2V0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgfQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucHJlcGFyZTogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgICAgICByZXR1cm4gWEFSZXNvdXJjZS5YQV9PSzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgWGlkW10gcmVjb3ZlcihpbnQgZmxhZykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnJlY292ZXI6ICIgKyBmbGFnVG9TdHJpbmcoZmxhZykpOwogICAgICAgICByZXR1cm4gbnVsbDsKQEAgLTY2LDcgKzY2LDcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBzZXRUcmFuc2FjdGlvblRpbWVvdXQoaW50IHNlY29uZHMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzdGFydChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5zdGFydDogIiArIHhpZFRvU3RyaW5nKHhpZCkgKyAiLCIgKwogICAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCmluZGV4IGI1YjBmMDIuLjRjOWMwMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIC8qKgogICogY29sbGVjdGlvbiBvZiBtZXNzYWdlcy4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKIApAQCAtNTQsNyArNTQsNyBAQAogICAgICAgIFN0cmluZyBjb21tYW5kICA9IGFyZ3NbMF07CiAgICAgICAgU3RyaW5nIGRlc3ROYW1lID0gYXJnc1sxXTsKICAgICAgICBTdHJpbmcgbWVzc2FnZSAgPSBhcmdzWzJdOwotICAgCisKICAgICAgICBpZiAoISJhZGQiLmVxdWFscyhjb21tYW5kKSkgewogICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL015Q29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTXlDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IDlmMjQ2NDguLjkyMmU3MWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTXlDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTXlDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsKICAgICBwcml2YXRlIE15TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZjsKICAgICBwcml2YXRlIFJlZmVyZW5jZSByZWY7Ci0gICAgCisKICAgICBwdWJsaWMgTXlDb25uZWN0aW9uRmFjdG9yeShNeU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsIENvbm5lY3Rpb25NYW5hZ2VyIGNtKSB7CiAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgIHRoaXMubWNmID0gbWNmOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9NeU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9NeU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IGYzNGU4M2IuLjI0NTA2YTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTXlNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL015TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICBwcml2YXRlIENvbm5lY3Rpb25NYW5hZ2VyIGNtOwogICAgIHByaXZhdGUgUHJpbnRXcml0ZXIgd3JpdGVyOwogICAgIHByaXZhdGUgVHJhbnNhY3Rpb25TdXBwb3J0TGV2ZWwgdHJhbnNhY3Rpb25TdXBwb3J0ID0gVHJhbnNhY3Rpb25TdXBwb3J0TGV2ZWwuTG9jYWxUcmFuc2FjdGlvbjs7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3ROYW1lKCkgewogICAgICAgICByZXR1cm4gdGVzdE5hbWU7CiAgICAgfQpAQCAtNjgsNyArNjgsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihTdWJqZWN0IHN1YmplY3QsICBDb25uZWN0aW9uUmVxdWVzdEluZm8gcmVxSW5mbykgCisgICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKFN1YmplY3Qgc3ViamVjdCwgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyByZXFJbmZvKQogICAgICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQpAQCAtNzksNyArNzksNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhTZXQgY2FuZGlkYXRlcywgU3ViamVjdCBzdWIsICBDb25uZWN0aW9uUmVxdWVzdEluZm8gcmVxSW5mbykgCisgICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uIG1hdGNoTWFuYWdlZENvbm5lY3Rpb25zKFNldCBjYW5kaWRhdGVzLCBTdWJqZWN0IHN1YiwgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyByZXFJbmZvKQogICAgICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKaW5kZXggNjE0MzgxZS4uNDQ4OTlhMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgTXlXb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTMxLDcgKzMxLDcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gc3RvcCA9IGZhbHNlOwogICAgIHByaXZhdGUgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5OwogICAgIHByaXZhdGUgV29ya01hbmFnZXIgd207Ci0gICAgCisKICAgICBwdWJsaWMgTXlXb3JrKAogICAgICAgICAgICAgU3RyaW5nIG5hbWUsIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwgV29ya01hbmFnZXIgd20pIHsKICAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTsKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgICAgICBNZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSk7CiAKICAgICAgICAgICAgICAgICAvKgpAQCAtNjYsNyArNjYsNyBAQAogICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtODEsMTQgKzgxLDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQppbmRleCA1MTJlNWM2Li40YjVlNWYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCkBAIC0yNSwxMiArMjUsMTIgQEAKICAqIHNvIHRoYXQgdGhlIGFwcCBzZXJ2ZXIgY2FuIGluc3RhbnRpYXRlIGFuZCBjb25maWd1cmUKICAqIGl0IGF0IHRoZSBydW50aW1lLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBAQWN0aXZhdGlvbigKICAgICAgICAgbWVzc2FnZUxpc3RlbmVycyA9IHtjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3N9CiApCi1wdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMgCitwdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMKICAgICBpbXBsZW1lbnRzIEFjdGl2YXRpb25TcGVjLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIFN0cmluZyBkZXN0aW5hdGlvbk5hbWU7CkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvbk5hbWUgKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvbk5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25OYW1lIChTdHJpbmcgbmFtZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25OYW1lKCkgY2FsbGVkLi4uIG5hbWUgPSAiICsgbmFtZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25OYW1lID0gbmFtZTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uVHlwZSgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25UeXBlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uVHlwZSAoU3RyaW5nIHR5cGUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uVHlwZSAoKSBjYWxsZWQuLi4gdHlwZSA9ICIgKyB0eXBlKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvblR5cGU9IHR5cGU7CkBAIC02NSw3ICs2NSw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0UHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdFByb3A7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdFByb3AgKFN0cmluZyB0ZXN0UHJvcCkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdFByb3AgKCkgY2FsbGVkLi4uIHRlc3RQcm9wID0gIiArIHRlc3RQcm9wKTsKICAgICAgICAgdGhpcy50ZXN0UHJvcCA9IHRlc3RQcm9wOwpAQCAtNzQsNyArNzQsNyBAQAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldFRlc3RJbnRlZ2VyUHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdEludGVnZXJQcm9wOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RJbnRlZ2VyUHJvcCAoSW50ZWdlciB0ZXN0UHJvcDEpIHsKICAgICAgICAgZGVidWcoInNldFRlc3RJbnRlZ2VyUHJvcCAoKSBjYWxsZWQuLi4gdGVzdEludGVnZXJQcm9wID0gIiArIHRlc3RQcm9wMSk7CiAgICAgICAgIHRoaXMudGVzdEludGVnZXJQcm9wID0gdGVzdFByb3AxOwpAQCAtOTgsNyArOTgsNyBAQAogCiAgICAgICB9CiAKLSAgIH0gCisgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZGVidWcgKFN0cmluZyBtZXNzYWdlKQogICAgIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKaW5kZXggMjU2MTFlZC4uM2ZkOWRlZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKQEAgLTI5LDE0ICsyOSwxNCBAQAogCiAvKioKICAqIFRoaXMgaXMgYSBzYW1wbGUgcmVzb3VyY2UgYWRhcHRlcgotICogCisgKgogICogQGF1dGhvciBRaW5ncWluZyBPdXlhbmcKICAqLwogQENvbm5lY3RvcigKIC8qIG1vZHVsZU5hbWU9Ik15IFNpbXBsZSBSQVIiLCAqLwotICAgIGRpc3BsYXlOYW1lID0gIlNpbXBsZSBSZXNvdXJjZSBBZGFwdGVyIiwgCi0gICAgdmVuZG9yTmFtZSA9ICJKYXZhIFNvZnR3YXJlIiwgCi0gICAgZWlzVHlwZSA9ICJHZW5lcmljIFR5cGUiLCAKKyAgICBkaXNwbGF5TmFtZSA9ICJTaW1wbGUgUmVzb3VyY2UgQWRhcHRlciIsCisgICAgdmVuZG9yTmFtZSA9ICJKYXZhIFNvZnR3YXJlIiwKKyAgICBlaXNUeXBlID0gIkdlbmVyaWMgVHlwZSIsCiAgICAgdmVyc2lvbiA9ICIxLjBBbHBoYSIsCiAgICAgdHJhbnNhY3Rpb25TdXBwb3J0PVRyYW5zYWN0aW9uU3VwcG9ydExldmVsLlhBVHJhbnNhY3Rpb24pCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKaW5kZXggZWUwZmFlOS4uZTI0ODUwNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBUZXN0V01Xb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTM3LDggKzM3LDggQEAKICAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSkgewogICAgICAgICB0aGlzKGlkLCBpc1JvZ3VlLCBmYWxzZSwgbnVsbCk7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLCAKKworICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLAogICAgICAgICAgICAgYm9vbGVhbiBkb05lc3QsIEV4ZWN1dGlvbkNvbnRleHQgY3R4KSB7CiAgICAgICAgIHRoaXMuaWQgPSBpZDsKICAgICAgICAgdGhpcy5pc1JvZ3VlID0gaXNSb2d1ZTsKQEAgLTcyLDEwICs3MiwxMCBAQAogICAgICAgICAgICAgfSBjYXRjaCAoV29ya0V4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIGlmIChleC5nZXRFcnJvckNvZGUoKS5lcXVhbHMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya0V4Y2VwdGlvbi5UWF9DT05DVVJSRU5UX1dPUktfRElTQUxMT1dFRCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQVNTOiBDQVVHSFQgRVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKICAgICAgICAgICAgICAgICB3bS5kb1dvcmsobmVzdGVkV29yaywgMSoxMDAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICJGQUlMOiBDQVVHSFQgVU5FWFBFQ1RFRCA9ICIgKyBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1YzV29ya0Rpc3BhdGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvVjNXb3JrRGlzcGF0Y2hlci5qYXZhCmluZGV4IDhhZGYzY2MuLjRiNDM3ODMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvVjNXb3JrRGlzcGF0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvVjNXb3JrRGlzcGF0Y2hlci5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobmV3IEZha2VYQVJlc291cmNlKCkpOwogICAgICAgICAgICAgaW50IG51bU9mTWVzc2FnZXMgPSAxOwpAQCAtNzIsNyArNzIsNyBAQAogICAgICAgICAgICAgZGVidWcoIlYzV29ya0Rpc3BhdGNoZXIgY2FsbGluZyBET05FKCkiKTsKICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgIGRlYnVnKCJWM1dvcmtEaXNwYXRjaGVyIGZpbmlzaGVkIGNhbGxpbmcgRE9ORSgpIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCmluZGV4IDQyMjQ5ZGMuLmExNDQ0M2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBXb3JrRGlzcGF0Y2hlciBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC00MywxMSArNDMsMTEgQEAKICAgICBwcm90ZWN0ZWQgQWN0aXZhdGlvblNwZWMgc3BlYzsKICAgICBwcm90ZWN0ZWQgV29ya01hbmFnZXIgd207CiAgICAgcHJvdGVjdGVkIFhBVGVybWluYXRvciB4YTsKLSAgICAKKwogICAgIHB1YmxpYyBXb3JrRGlzcGF0Y2hlcigKICAgICAgICAgICAgIFN0cmluZyBpZCwKICAgICAgICAgICAgIEJvb3RzdHJhcENvbnRleHQgY3R4LAotICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LCAKKyAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwKICAgICAgICAgICAgIEFjdGl2YXRpb25TcGVjIHNwZWMpIHsKICAgICAgICAgdGhpcy5pZCAgICAgID0gaWQ7CiAgICAgICAgIHRoaXMuY3R4ICAgICA9IGN0eDsKQEAgLTYwLDcgKzYwLDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAKICAgICAgICAgZGVidWcoIkVOVEVSLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIGRlYnVnKCJXQUlULi4uIik7CkBAIC04MiwyNiArODIsMjYgQEAKICAgICAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgICAgICBNZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwotICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7IAorICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7CiAgICAgICAgICAgICAgICAgICAgIC8vd20uZG9Xb3JrKGQsIDAsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChuZXcgRmFrZVhBUmVzb3VyY2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIGludCBudW1PZk1lc3NhZ2VzID0gNTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9pbXBvcnRpbmcgdHJhbnNhY3Rpb24KIAogICAgICAgICAgICAgICAgICAgICAvL3dyaXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBFeGVjdXRpb25Db250ZXh0IGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwogCi0gICAgICAgICAgICAgICAgICAgIERlbGl2ZXJ5V29yayB3ID0gCisgICAgICAgICAgICAgICAgICAgIERlbGl2ZXJ5V29yayB3ID0KICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJXUklURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJET05FIFdSSVRFIFRPIERCIik7CiAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IG51bU9mTWVzc2FnZXM7CiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvcm9sbGJhY2sKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7CkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIkRFTEVURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJERUxFVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTE5NCw3ICsxOTQsNyBAQAogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBpZiAoWEFSZXNvdXJjZS5YQV9PSyA9PSB4YS5wcmVwYXJlKGVjLmdldFhpZCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiWEEgUFJFUEFSRS9DT01NSVQuIERPTkUgV1JJVEUgVE8gREIgIik7CkBAIC0yMDYsMTkgKzIwNiwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gMzsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZSBhbGwuCiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgMSwgIkRFTEVURV9BTEwiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkRPTkUgREVMRVRFIEFMTCBGUk9NIERCIik7CiAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IDA7CiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjQ1LDcgKzI0NSw3IEBACiAgICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtMjYwLDE0ICsyNjAsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMjkwLDEzICsyOTAsMTMgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vU2xlZXAgZm9yIDUgc2Vjb25kcwogICAgICAgICAgICAgLy9UaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDUqMTAwMCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIC8vTm90aWZ5IHRoZSBjbGllbnQgdG8gY2hlY2sgdGhlIHJlc3VsdHMKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5QWxsKCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnlBbGwoKTsKIAogICAgICAgICAgICAgICAgIC8vV2FpdCB1bnRpbCByZXN1bHRzIGFyZSB2ZXJpZmllZCBieSB0aGUgY2xpZW50Ci0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsKIAogICAgICAgICAgICAgICAgIGlmIChzdG9wKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCmluZGV4IDc3ZGJmMzQuLjZiZDllNTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQpAQCAtMzYsOCArMzYsOCBAQAogICAgIHB1YmxpYyBpbnQgYnJhbmNoUXVhbGlmaWVyOwogICAgIHB1YmxpYyBpbnQgZ2xvYmFsVHhJRDsKIAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OyAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsgCisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7CisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7CiAKICAgICBwdWJsaWMgWElEKCkgewogICAgICAgICBpbnQgZm9vID0gSUQrKzsKQEAgLTU1LDEwICs1NSwxMCBAQAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICAgLy8gSXQgY2FuJ3QgYmUgZXF1YWwKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBvdGhlciA9IChYSUQpbzsgICAgICAgICAgICAgICAgICAgLy8gVGhlIG90aGVyIFhJRCwgbm93IHByb3Blcmx5IGNhc3QKLSAgICAgICAgCi0gICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElEIAorCisgICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElECiAgICAgICAgICAgICAgICAgJiYgdGhpcy5icmFuY2hRdWFsaWZpZXIgPT0gb3RoZXIuYnJhbmNoUXVhbGlmaWVyCiAgICAgICAgICAgICAgICAgJiYgdGhpcy5nbG9iYWxUeElEID09IG90aGVyLmdsb2JhbFR4SUQpIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTgsNyArOTgsNyBAQAogICAgICAgICAgICAgICAgICJmb3JtYXRJRCgiICAgICArIGZvcm1hdElEICAgICArICIpLCAiICsKICAgICAgICAgICAgICAgICAiYnJhbmNoUXVhbGlmaWVyICgiICsgYnJhbmNoUXVhbGlmaWVyICsgIiksICIgKwogICAgICAgICAgICAgICAgICJnbG9iYWxUeElEKCIgKyBnbG9iYWxUeElEICsgIil9Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvc2VydmxldC9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9zZXJ2bGV0L1NlcnZsZXQuamF2YQppbmRleCBhZDY4MmMyLi41MjlkNzE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9zZXJ2bGV0L1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9zZXJ2bGV0L1NlcnZsZXQuamF2YQpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbWluUG9vbFNpemUgPSA0LAogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHsidGVzdE5hbWU9Zm9vIn0KICAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJtb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTptb2R1bGUvZW52L1NlcnZsZXRfQ29ubmVjdGlvbkZhY3RvcnkiLApAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VBZGFwdGVyID0gIiNjZmQtcmEiLAogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHsidGVzdE5hbWU9Zm9vIn0KICAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJjb21wb25lbnQtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTpjb21wL2Vudi9TZXJ2bGV0X0Nvbm5lY3Rpb25GYWN0b3J5IiwKQEAgLTkzLDcgKzkzLDcgQEAKIAogICAgIEBFSkIKICAgICBwcml2YXRlICBIZWxsbyBoZWxsb1N0YXRlbGVzczsKLSAgICAKKwogICAgIEBFSkIoYmVhbk5hbWUgPSAiSGVsbG9TdGF0ZWZ1bEVKQiIpCiAgICAgcHJpdmF0ZSAgSGVsbG9TdGF0ZWZ1bCBoZWxsb1N0YXRlZnVsOwogCkBAIC0xMDksNyArMTA5LDcgQEAKIAogICAgICAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgLy8gQ29ubmVjdGlvbi1GYWN0b3J5LURlZmluaXRpb24gdGhyb3VnaCBBbm5vdGF0aW9uCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGZmZmFiYzAuLjFjODZhOWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMyArMTUsMjMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9idWlsZC54bWwKaW5kZXggZGY0ZDI0NC4uNjg5NzYyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vYnVpbGQueG1sCkBAIC0zNywyNSArMzcsMjUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iaW5mbyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgIAk8ZWNobyBtZXNzYWdlPSJidWlsZC5jbGFzc2VzLmRpciBpcyAke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotICAgIAk8ZWNobyBtZXNzYWdlPSJzMWFzdGVzdC5jbGFzc3BhdGggaXMgJHtzMWFzdGVzdC5jbGFzc3BhdGh9Ii8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkLmNsYXNzZXMuZGlyIGlzICR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9InMxYXN0ZXN0LmNsYXNzcGF0aCBpcyAke3MxYXN0ZXN0LmNsYXNzcGF0aH0iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS11dCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgIDxqYXZhYyBzcmNkaXI9InV0IiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKLSAgICAgIAkgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL2p1bml0Lmphcjoke3MxYXN0ZXN0LmNsYXNzcGF0aH0iCi0gICAgICAJICAgIGRlYnVnPSJvbiIKKyAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL2p1bml0Lmphcjoke3MxYXN0ZXN0LmNsYXNzcGF0aH0iCisgICAgICAgICAgICAgIGRlYnVnPSJvbiIKICAgICAgICAgICAgIGluY2x1ZGVhbnRydW50aW1lPSJmYWxzZSIKLSAgICAgIAkgICAgZmFpbG9uZXJyb3I9InRydWUiLz4KKyAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiLz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXV0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8IS0tIGJ1aWxkIGEgc3BlY2lhbCBlYXIgd2hpY2ggb25seSBpbmNsdWRlcyBkZXBsb3ltZW50IGRlc2NyaXB0b3JzLS0+CiAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS90ZW1wIi8+Ci0gICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgIAotICAgICAgPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS9kZXNjcmlwdG9yL3V0LWFwcGxpY2F0aW9uLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiICBmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLVVULmVhciI+IAorICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgICAgIDxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vZGVzY3JpcHRvci91dC1hcHBsaWNhdGlvbi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLVVULmVhciI+CiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgICAgPC9maWxlc2V0PgpAQCAtNzEsNyArNzEsNyBAQAogICAgICAgPHVuamFyIHNyYz0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAtVVQuZWFyIiBkZXN0PSIke2Fzc2VtYmxlLmRpcn0vdGVtcC8ke2FwcG5hbWV9QXBwLVVUIi8+CiAKICAgICA8L3RhcmdldD4KLSAgICAJCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi11dCIgZGVwZW5kcz0iY29tcGlsZS11dCI+CiAgICAgICA8anVuaXQgcHJpbnRzdW1tYXJ5PSJ5ZXMiIGhhbHRvbmVycm9yPSJubyIgaGFsdG9uZmFpbHVyZT0ibm8iIGZvcms9InRydWUiPgogICAgICAgICA8Zm9ybWF0dGVyIHR5cGU9InBsYWluIiB1c2VmaWxlPSJmYWxzZSIvPgpAQCAtOTUsNyArOTUsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgCSAgPGVjaG8gbWVzc2FnZT0iYXNzZW1ibGUuZGlyID0gJHthc3NlbWJsZS5kaXJ9Ii8+CisgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iYXNzZW1ibGUuZGlyID0gJHthc3NlbWJsZS5kaXJ9Ii8+CiAgICAgICAgIDwhLS1idWlsZCBhbmQgcGFja2FnZSAud2FyIGZpcnN0IHNvIGl0IGRvZXNuJ3QgY29udGFpbiBlamIgYmVhbiAhLS0+CiAgICAgICAgIDwhLS1jbGFzc2VzIHRoYXQgaGF2ZSBAU3RhdGVsZXNzL0BTdGF0ZXVsICEtLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CkBAIC0xMTgsMTEgKzExOCwxMSBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIqKi9IZWxsbyoqLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAgCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIi8+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC11dCIvPgotICAgICAgICAKKwogICAgICAgICA8YW50IGRpcj0icmEiIHRhcmdldD0iYWxsIi8+CiAgICAgPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGE4MzFiNGMuLjY3ODhjY2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNTgsNyArNTgsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0Y05hbWUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGNOYW1lLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgdGhyb3cgZTsKQEAgLTc5LDcgKzc5LDcgQEAKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKQogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOwogICAgICAgICBpZiAoY29kZSAhPSAyMDApIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL2Nvbm5lY3Rvci1yZXNvdXJjZS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci9jb25uZWN0b3ItcmVzb3VyY2UueG1sCmluZGV4IDE0NGFiZDguLjMxOWQ2YWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL2Nvbm5lY3Rvci1yZXNvdXJjZS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvY29ubmVjdG9yLXJlc291cmNlLnhtbApAQCAtMjAsMTIgKzIwLDEyIEBACiA8Y29ubmVjdGlvbi1mYWN0b3J5IHhtbG5zPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIgogICAgICAgICAgICAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSBodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2phdmFlZV83LnhzZD4KLQk8ZGVzY3JpcHRpb24+Z2xvYmFsLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gYXBwbGljYXRpb24gREQ8L2Rlc2NyaXB0aW9uPgotCTxuYW1lPmphdmE6Z2xvYmFsL2Vudi9BcHBsaWNhdGlvbl9MZXZlbF9Db25uZWN0aW9uRmFjdG9yeTwvbmFtZT4KLQk8aW50ZXJmYWNlLW5hbWU+amFrYXJ0YS5yZXNvdXJjZS5jY2kuQ29ubmVjdGlvbkZhY3Rvcnk8L2ludGVyZmFjZS1uYW1lPgotCTxyZXNvdXJjZS1hZGFwdGVyPmNmZC1yYTwvcmVzb3VyY2UtYWRhcHRlcj4KLQk8cHJvcGVydHk+Ci0JCTxuYW1lPnRyYW5zYWN0aW9uU3VwcG9ydDwvbmFtZT4KLQkJPHZhbHVlPkxvY2FsVHJhbnNhY3Rpb248L3ZhbHVlPgotCTwvcHJvcGVydHk+CisgICAgPGRlc2NyaXB0aW9uPmdsb2JhbC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIGFwcGxpY2F0aW9uIEREPC9kZXNjcmlwdGlvbj4KKyAgICA8bmFtZT5qYXZhOmdsb2JhbC9lbnYvQXBwbGljYXRpb25fTGV2ZWxfQ29ubmVjdGlvbkZhY3Rvcnk8L25hbWU+CisgICAgPGludGVyZmFjZS1uYW1lPmpha2FydGEucmVzb3VyY2UuY2NpLkNvbm5lY3Rpb25GYWN0b3J5PC9pbnRlcmZhY2UtbmFtZT4KKyAgICA8cmVzb3VyY2UtYWRhcHRlcj5jZmQtcmE8L3Jlc291cmNlLWFkYXB0ZXI+CisgICAgPHByb3BlcnR5PgorICAgICAgICA8bmFtZT50cmFuc2FjdGlvblN1cHBvcnQ8L25hbWU+CisgICAgICAgIDx2YWx1ZT5Mb2NhbFRyYW5zYWN0aW9uPC92YWx1ZT4KKyAgICA8L3Byb3BlcnR5PgogPC9jb25uZWN0aW9uLWZhY3Rvcnk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDg1OTNkZTYuLjZjMmZlMjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0xOCw5ICsxOCw5IEBACiAtLT4KIAogPGVqYi1qYXIgeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLSAgICAgICAgIG1ldGFkYXRhLWNvbXBsZXRlPSJmYWxzZSIgCi0gICAgICAgICB2ZXJzaW9uPSIzLjIiIAorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICAgIG1ldGFkYXRhLWNvbXBsZXRlPSJmYWxzZSIKKyAgICAgICAgIHZlcnNpb249IjMuMiIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSBodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18yLnhzZCI+CiAgIDxtb2R1bGUtbmFtZT5jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lamI8L21vZHVsZS1uYW1lPgogICA8ZW50ZXJwcmlzZS1iZWFucz4KQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgIDxlamItbmFtZT5IZWxsb1N0YXRlZnVsRUpCPC9lamItbmFtZT4KICAgICAgIDxidXNpbmVzcy1sb2NhbD5jb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24zLkhlbGxvU3RhdGVmdWw8L2J1c2luZXNzLWxvY2FsPgogICAgICAgPGVqYi1jbGFzcz5jb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24zLkhlbGxvU3RhdGVmdWxFSkI8L2VqYi1jbGFzcz4KLSAgICAgIAorCiAgICAgICA8Y29ubmVjdGlvbi1mYWN0b3J5PgogICAgICAgICA8ZGVzY3JpcHRpb24+Z2xvYmFsLXNjb3BlIHJlc291cmNlIHRvIGJlIG1vZGlmaWVkIGJ5IEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTpnbG9iYWwvZW52L0hlbGxvU3RhdGVmdWxFSkJfTW9kQnlERF9Db25uZWN0aW9uRmFjdG9yeTwvbmFtZT4KQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICA8dmFsdWU+Zm9vPC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvY29ubmVjdGlvbi1mYWN0b3J5PgotICAgICAgCisKICAgICAgIDxjb25uZWN0aW9uLWZhY3Rvcnk+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5tb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOm1vZHVsZS9lbnYvSGVsbG9TdGF0ZWZ1bEVKQl9ERF9Db25uZWN0aW9uRmFjdG9yeTwvbmFtZT4KQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgICA8dmFsdWU+Zm9vPC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvY29ubmVjdGlvbi1mYWN0b3J5PgotICAgICAgCisKICAgICAgIDxjb25uZWN0aW9uLWZhY3Rvcnk+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5hcHBsaWNhdGlvbi1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6YXBwL2Vudi9IZWxsb1N0YXRlZnVsRUpCX0REX0Nvbm5lY3Rpb25GYWN0b3J5PC9uYW1lPgpAQCAtNzksNyArNzksNyBAQAogICAgICAgICAgIDx2YWx1ZT5mb288L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9jb25uZWN0aW9uLWZhY3Rvcnk+Ci0gICAgICAKKwogICAgICAgPGNvbm5lY3Rpb24tZmFjdG9yeT4KICAgICAgICAgPGRlc2NyaXB0aW9uPmNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6Y29tcC9lbnYvSGVsbG9TdGF0ZWZ1bEVKQl9ERF9Db25uZWN0aW9uRmFjdG9yeTwvbmFtZT4KQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgICA8dmFsdWU+Zm9vPC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvY29ubmVjdGlvbi1mYWN0b3J5PgotICAgICAgCisKICAgICA8L3Nlc3Npb24+CiAgICAgPHNlc3Npb24+CiAgICAgICA8ZGlzcGxheS1uYW1lPkhlbGxvRUpCPC9kaXNwbGF5LW5hbWU+CkBAIC0xMjIsNyArMTIyLDcgQEAKICAgICAgICAgICA8dmFsdWU+Zm9vPC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvY29ubmVjdGlvbi1mYWN0b3J5PgotICAgICAgCisKICAgICAgIDxjb25uZWN0aW9uLWZhY3Rvcnk+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5hcHBsaWNhdGlvbi1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6YXBwL2Vudi9IZWxsb0VKQl9ERF9Db25uZWN0aW9uRmFjdG9yeTwvbmFtZT4KQEAgLTE1OCw4ICsxNTgsOCBAQAogICAgICAgICAgIDx2YWx1ZT5mb288L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9jb25uZWN0aW9uLWZhY3Rvcnk+Ci0gICAgICAKKwogICAgIDwvc2Vzc2lvbj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgotICAKKwogPC9lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtYXBwbGljYXRpb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtYXBwbGljYXRpb24ueG1sCmluZGV4IGQ2ZTgxMTUuLmUxNWJjYTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LWFwcGxpY2F0aW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1hcHBsaWNhdGlvbi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDxhcHBsaWNhdGlvbiB4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iNyIKICAgICAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9hcHBsaWNhdGlvbl83LnhzZCI+CiAgICAgPGRpc3BsYXktbmFtZT5jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbkFwcDwvZGlzcGxheS1uYW1lPgotICAgIAorCiAgICAgPG1vZHVsZT4KICAgICAgICAgPGphdmE+Y29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tY2xpZW50LmphcjwvamF2YT4KICAgICA8L21vZHVsZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LWVudGl0eS1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LWVudGl0eS1lamItamFyLnhtbAppbmRleCBiYzYwZWQ3Li42MTAwNjI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1lbnRpdHktZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtZW50aXR5LWVqYi1qYXIueG1sCkBAIC0xOCwxMSArMTgsMTEgQEAKIC0tPgogCiA8ZWpiLWphciB4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotICAgICAgICAgbWV0YWRhdGEtY29tcGxldGU9ImZhbHNlIiB2ZXJzaW9uPSIzLjIiIAorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICAgIG1ldGFkYXRhLWNvbXBsZXRlPSJmYWxzZSIgdmVyc2lvbj0iMy4yIgogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIGh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzIueHNkIj4KICAgPG1vZHVsZS1uYW1lPmNvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVqYjwvbW9kdWxlLW5hbWU+Ci0gIAorCiAgIDxlbnRlcnByaXNlLWJlYW5zPgogICAgIDxlbnRpdHk+CiAgICAgICA8ZWpiLW5hbWU+SGVsbG9FbnRpdHk8L2VqYi1uYW1lPgpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICAgIDx2YWx1ZT5mb288L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9jb25uZWN0aW9uLWZhY3Rvcnk+Ci0gICAgICAKKwogICAgICAgPGNvbm5lY3Rpb24tZmFjdG9yeT4KICAgICAgICAgPGRlc2NyaXB0aW9uPm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6bW9kdWxlL2Vudi9FbnRpdHlfQ29ubmVjdGlvbkZhY3Rvcnk8L25hbWU+CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgICAgPHZhbHVlPmZvbzwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2Nvbm5lY3Rpb24tZmFjdG9yeT4KLSAgICAgIAorCiAgICAgICA8Y29ubmVjdGlvbi1mYWN0b3J5PgogICAgICAgICA8ZGVzY3JpcHRpb24+Y29tcG9uZW50LXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTpjb21wL2Vudi9FbnRpdHlfQ29ubmVjdGlvbkZhY3Rvcnk8L25hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1pbnRlcmNlcHRvci1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LWludGVyY2VwdG9yLWVqYi1qYXIueG1sCmluZGV4IGIxMmIzZTQuLmE1NzRmYjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LWludGVyY2VwdG9yLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LWludGVyY2VwdG9yLWVqYi1qYXIueG1sCkBAIC0xOCw4ICsxOCw4IEBACiAtLT4KIAogPGVqYi1qYXIgeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLSAgICAgICAgIG1ldGFkYXRhLWNvbXBsZXRlPSJmYWxzZSIgdmVyc2lvbj0iMy4yIiAKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgICBtZXRhZGF0YS1jb21wbGV0ZT0iZmFsc2UiIHZlcnNpb249IjMuMiIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSBodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18yLnhzZCI+CiAgIDxtb2R1bGUtbmFtZT5jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lamI8L21vZHVsZS1uYW1lPgogICA8aW50ZXJjZXB0b3JzPgpAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgIDx2YWx1ZT5mb288L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9jb25uZWN0aW9uLWZhY3Rvcnk+Ci0gICAgICAKKwogICAgICAgPGNvbm5lY3Rpb24tZmFjdG9yeT4KICAgICAgICAgPGRlc2NyaXB0aW9uPm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6bW9kdWxlL2Vudi9JbnRlcmNlcHRvcl9Db25uZWN0aW9uRmFjdG9yeTwvbmFtZT4KQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgICA8dmFsdWU+Zm9vPC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvY29ubmVjdGlvbi1mYWN0b3J5PgotICAgICAgCisKICAgICAgIDxjb25uZWN0aW9uLWZhY3Rvcnk+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5jb21wb25lbnQtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOmNvbXAvZW52L0ludGVyY2VwdG9yX0Nvbm5lY3Rpb25GYWN0b3J5PC9uYW1lPgpAQCAtNjYsNSArNjYsNSBAQAogICAgICAgPC9jb25uZWN0aW9uLWZhY3Rvcnk+CiAgICAgPC9pbnRlcmNlcHRvcj4KICAgPC9pbnRlcmNlcHRvcnM+Ci0gIAorCiA8L2VqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1tZGItZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1tZGItZWpiLWphci54bWwKaW5kZXggY2M2Njg1MS4uNWU5OTdkZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtbWRiLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LW1kYi1lamItamFyLnhtbApAQCAtMTgsOCArMTgsOCBAQAogLS0+CiAKIDxlamItamFyIHhtbG5zPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIgotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0gICAgICAgICBtZXRhZGF0YS1jb21wbGV0ZT0iZmFsc2UiIHZlcnNpb249IjMuMiIgCisgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgICAgbWV0YWRhdGEtY29tcGxldGU9ImZhbHNlIiB2ZXJzaW9uPSIzLjIiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9lamItamFyXzNfMi54c2QiPgogICA8bW9kdWxlLW5hbWU+Y29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZWpiPC9tb2R1bGUtbmFtZT4KICAgPGVudGVycHJpc2UtYmVhbnM+CkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgICAgPHZhbHVlPmZvbzwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2Nvbm5lY3Rpb24tZmFjdG9yeT4KLSAgICAgIAorCiAgICAgICA8Y29ubmVjdGlvbi1mYWN0b3J5PgogICAgICAgICA8ZGVzY3JpcHRpb24+bW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTptb2R1bGUvZW52L01EQl9Db25uZWN0aW9uRmFjdG9yeTwvbmFtZT4KQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgICA8dmFsdWU+Zm9vPC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvY29ubmVjdGlvbi1mYWN0b3J5PgotICAgICAgCisKICAgICAgIDxjb25uZWN0aW9uLWZhY3Rvcnk+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5jb21wb25lbnQtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOmNvbXAvZW52L01EQl9Db25uZWN0aW9uRmFjdG9yeTwvbmFtZT4KQEAgLTY3LDggKzY3LDggQEAKICAgICAgICAgICA8dmFsdWU+Zm9vPC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvY29ubmVjdGlvbi1mYWN0b3J5PgotICAgICAgCisKICAgICA8L21lc3NhZ2UtZHJpdmVuPgogICA8L2VudGVycHJpc2UtYmVhbnM+Ci0gIAorCiA8L2VqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1zZXNzaW9uLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtc2Vzc2lvbi1lamItamFyLnhtbAppbmRleCA4NjVlZjNhLi4wYzgwNGYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1zZXNzaW9uLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LXNlc3Npb24tZWpiLWphci54bWwKQEAgLTE4LDggKzE4LDggQEAKIC0tPgogCiA8ZWpiLWphciB4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotICAgICAgICAgbWV0YWRhdGEtY29tcGxldGU9ImZhbHNlIiB2ZXJzaW9uPSIzLjIiIAorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICAgIG1ldGFkYXRhLWNvbXBsZXRlPSJmYWxzZSIgdmVyc2lvbj0iMy4yIgogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIGh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzIueHNkIj4KICAgPG1vZHVsZS1uYW1lPmNvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVqYjwvbW9kdWxlLW5hbWU+CiAgIDxlbnRlcnByaXNlLWJlYW5zPgpAQCAtMjgsNyArMjgsNyBAQAogICAgICAgPGVqYi1uYW1lPkhlbGxvU3RhdGVmdWxFSkI8L2VqYi1uYW1lPgogICAgICAgPGJ1c2luZXNzLWxvY2FsPmNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbjMuSGVsbG9TdGF0ZWZ1bDwvYnVzaW5lc3MtbG9jYWw+CiAgICAgICA8ZWpiLWNsYXNzPmNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbjMuSGVsbG9TdGF0ZWZ1bEVKQjwvZWpiLWNsYXNzPgotICAgICAgCisKICAgICAgIDxjb25uZWN0aW9uLWZhY3Rvcnk+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5nbG9iYWwtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOmdsb2JhbC9lbnYvU3RhdGVmdWxFSkJfQ29ubmVjdGlvbkZhY3Rvcnk8L25hbWU+CkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgICAgPHZhbHVlPmZvbzwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2Nvbm5lY3Rpb24tZmFjdG9yeT4KLSAgICAgIAorCiAgICAgICA8Y29ubmVjdGlvbi1mYWN0b3J5PgogICAgICAgICA8ZGVzY3JpcHRpb24+bW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTptb2R1bGUvZW52L1N0YXRlZnVsRUpCX0Nvbm5lY3Rpb25GYWN0b3J5PC9uYW1lPgpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAgIDx2YWx1ZT5mb288L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9jb25uZWN0aW9uLWZhY3Rvcnk+Ci0gICAgICAKKwogICAgICAgPGNvbm5lY3Rpb24tZmFjdG9yeT4KICAgICAgICAgPGRlc2NyaXB0aW9uPmNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6Y29tcC9lbnYvU3RhdGVmdWxFSkJfQ29ubmVjdGlvbkZhY3Rvcnk8L25hbWU+CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgICAgPHZhbHVlPmZvbzwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2Nvbm5lY3Rpb24tZmFjdG9yeT4KLSAgICAgIAorCiAgICAgPC9zZXNzaW9uPgogICAgIDxzZXNzaW9uPgogICAgICAgPGRpc3BsYXktbmFtZT5IZWxsb0VKQjwvZGlzcGxheS1uYW1lPgpAQCAtODgsNyArODgsNyBAQAogICAgICAgICAgIDx2YWx1ZT5mb288L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9jb25uZWN0aW9uLWZhY3Rvcnk+Ci0gICAgICAKKwogICAgICAgPGNvbm5lY3Rpb24tZmFjdG9yeT4KICAgICAgICAgPGRlc2NyaXB0aW9uPm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6bW9kdWxlL2Vudi9IZWxsb0VKQl9Db25uZWN0aW9uRmFjdG9yeTwvbmFtZT4KQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICAgIDx2YWx1ZT5mb288L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9jb25uZWN0aW9uLWZhY3Rvcnk+Ci0gICAgICAKKwogICAgICAgPGNvbm5lY3Rpb24tZmFjdG9yeT4KICAgICAgICAgPGRlc2NyaXB0aW9uPmNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6Y29tcC9lbnYvSGVsbG9FSkJfQ29ubmVjdGlvbkZhY3Rvcnk8L25hbWU+CkBAIC0xMTMsOCArMTEzLDggQEAKICAgICAgICAgICA8dmFsdWU+Zm9vPC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvY29ubmVjdGlvbi1mYWN0b3J5PgotICAgICAgCisKICAgICA8L3Nlc3Npb24+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KLSAgCisKIDwvZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC13ZWIueG1sCmluZGV4IDY5MjQ1MTcuLjAxYzExNDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtd2ViLnhtbApAQCAtMTgsOCArMTgsOCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIgotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgICAgCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgd2ViLWFwcF8zXzEueHNkIiAgICAKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgd2ViLWFwcF8zXzEueHNkIgogICAgICAgICAgdmVyc2lvbj0iMy4xIj4KIAogICAgIDxkaXNwbGF5LW5hbWU+Y29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb248L2Rpc3BsYXktbmFtZT4KQEAgLTYxLDcgKzYxLDcgQEAKICAgICAgICAgIDx2YWx1ZT5mb288L3ZhbHVlPgogICAgICAgIDwvcHJvcGVydHk+CiAgICAgIDwvY29ubmVjdGlvbi1mYWN0b3J5PgotICAgIAorCiAgICAgIDxjb25uZWN0aW9uLWZhY3Rvcnk+CiAgICAgICAgPGRlc2NyaXB0aW9uPm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIFdlYiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgPG5hbWU+amF2YTptb2R1bGUvZW52L0Nvbm5lY3Rpb25GYWN0b3J5PC9uYW1lPgpAQCAtNzIsNiArNzIsNiBAQAogICAgICAgICAgPHZhbHVlPmZvbzwvdmFsdWU+CiAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgPC9jb25uZWN0aW9uLWZhY3Rvcnk+Ci0gICAgCisKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMDk4MmEzNS4uZDBmNjE5ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOCw4ICsxOCw4IEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAgICAKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSB3ZWItYXBwXzNfMS54c2QiICAgCisgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIHdlYi1hcHBfM18xLnhzZCIKICAgICAgICAgIHZlcnNpb249IjMuMSIKICAgICAgICAgIG1ldGFkYXRhLWNvbXBsZXRlPSJmYWxzZSI+CiAKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgIDx2YWx1ZT5mb288L3ZhbHVlPgogICAgICAgIDwvcHJvcGVydHk+CiAgICAgIDwvY29ubmVjdGlvbi1mYWN0b3J5PgotICAgIAorCiAgICAgIDxjb25uZWN0aW9uLWZhY3Rvcnk+CiAgICAgICAgPGRlc2NyaXB0aW9uPm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIFdlYiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgPG5hbWU+amF2YTptb2R1bGUvZW52L1dlYl9ERF9Db25uZWN0aW9uRmFjdG9yeTwvbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9lamIvSGVsbG9FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9lamIvSGVsbG9FSkIuamF2YQppbmRleCA0N2VkOTJjLi5lNTBlYmVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZWpiL0hlbGxvRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2VqYi9IZWxsb0VKQi5qYXZhCkBAIC0zNiwzOSArMzYsMzkgQEAKICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0geyJ0ZXN0TmFtZT1mb28ifQogICAgICAgICAgICksCiAgICAgICAgICAgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImdsb2JhbC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24iLCAKLSAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTpnbG9iYWwvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQ29ubmVjdGlvbkZhY3RvcnkiLCAKLSAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWUgPSAiamFrYXJ0YS5yZXNvdXJjZS5jY2kuQ29ubmVjdGlvbkZhY3RvcnkiLCAKKyAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImdsb2JhbC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24iLAorICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOmdsb2JhbC9lbnYvSGVsbG9FSkJfQW5ub3RhdGlvbl9Db25uZWN0aW9uRmFjdG9yeSIsCisgICAgICAgICAgICAgICBpbnRlcmZhY2VOYW1lID0gImpha2FydGEucmVzb3VyY2UuY2NpLkNvbm5lY3Rpb25GYWN0b3J5IiwKICAgICAgICAgICAgICAgIHJlc291cmNlQWRhcHRlciA9ICJjZmQtcmEiLAogICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25TdXBwb3J0ID0gVHJhbnNhY3Rpb25TdXBwb3J0TGV2ZWwuTG9jYWxUcmFuc2FjdGlvbiwKICAgICAgICAgICAgICAgIG1heFBvb2xTaXplID0gMTYsCiAgICAgICAgICAgICAgICBtaW5Qb29sU2l6ZSA9IDQsCiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0geyJ0ZXN0TmFtZT1mb28ifQogICAgICAgICAgICksCi0gICAgICAgICAgCisKICAgICAgICAgICBAQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uKAotICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiYXBwbGljYXRpb24tc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uIiwgCi0gICAgICAgICAgICAgICBuYW1lID0gImphdmE6YXBwL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0Nvbm5lY3Rpb25GYWN0b3J5IiwgCi0gICAgICAgICAgICAgICBpbnRlcmZhY2VOYW1lID0gImpha2FydGEucmVzb3VyY2UuY2NpLkNvbm5lY3Rpb25GYWN0b3J5IiwgCisgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJhcHBsaWNhdGlvbi1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24iLAorICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOmFwcC9lbnYvSGVsbG9FSkJfQW5ub3RhdGlvbl9Db25uZWN0aW9uRmFjdG9yeSIsCisgICAgICAgICAgICAgICBpbnRlcmZhY2VOYW1lID0gImpha2FydGEucmVzb3VyY2UuY2NpLkNvbm5lY3Rpb25GYWN0b3J5IiwKICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uU3VwcG9ydCA9IFRyYW5zYWN0aW9uU3VwcG9ydExldmVsLlhBVHJhbnNhY3Rpb24sCiAgICAgICAgICAgICAgICBtYXhQb29sU2l6ZSA9IDE2LAogICAgICAgICAgICAgICAgbWluUG9vbFNpemUgPSA0LAogICAgICAgICAgICAgICAgcmVzb3VyY2VBZGFwdGVyID0gImNmZC1yYSIsCiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0geyJ0ZXN0TmFtZT1mb28ifQogICAgICAgICAgICksCi0gICAgICAgICAgCisKICAgICAgICAgICBAQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uKAotICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAibW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbiIsIAotICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOm1vZHVsZS9lbnYvSGVsbG9FSkJfQW5ub3RhdGlvbl9Db25uZWN0aW9uRmFjdG9yeSIsIAotICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZSA9ICJqYWthcnRhLnJlc291cmNlLmNjaS5Db25uZWN0aW9uRmFjdG9yeSIsIAorICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAibW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbiIsCisgICAgICAgICAgICAgICBuYW1lID0gImphdmE6bW9kdWxlL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0Nvbm5lY3Rpb25GYWN0b3J5IiwKKyAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWUgPSAiamFrYXJ0YS5yZXNvdXJjZS5jY2kuQ29ubmVjdGlvbkZhY3RvcnkiLAogICAgICAgICAgICAgICAgcmVzb3VyY2VBZGFwdGVyID0gImNmZC1yYSIsCiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0geyJ0ZXN0TmFtZT1mb28ifQogICAgICAgICAgICksCi0gICAgICAgICAgCisKICAgICAgICAgICBAQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uKAotICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiY29tcG9uZW50LXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbiIsIAotICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOmNvbXAvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQ29ubmVjdGlvbkZhY3RvcnkiLCAKLSAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWUgPSAiamFrYXJ0YS5yZXNvdXJjZS5jY2kuQ29ubmVjdGlvbkZhY3RvcnkiLCAKKyAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24iLAorICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOmNvbXAvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQ29ubmVjdGlvbkZhY3RvcnkiLAorICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZSA9ICJqYWthcnRhLnJlc291cmNlLmNjaS5Db25uZWN0aW9uRmFjdG9yeSIsCiAgICAgICAgICAgICAgICByZXNvdXJjZUFkYXB0ZXIgPSAiY2ZkLXJhIiwKICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7InRlc3ROYW1lPWZvbyJ9CiAgICAgICAgICAgKQpAQCAtODAsNyArODAsNyBAQAogCiAgICAgQGpha2FydGEuYW5ub3RhdGlvbi5SZXNvdXJjZShuYW1lPSJqYXZhOmNvbXAvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQ29ubmVjdGlvbkZhY3RvcnkiKQogICAgIENvbm5lY3Rpb25GYWN0b3J5IGNmOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaGVsbG8oKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb25uZWN0aW9uIGMgPSBjZi5nZXRDb25uZWN0aW9uKCk7CkBAIC0xMjMsNyArMTIzLDcgQEAKICAgICAgICAgbG9va3VwQ29ubmVjdGlvbkZhY3RvcnkoImphdmE6YXBwL2Vudi9IZWxsb0VKQl9ERF9Db25uZWN0aW9uRmFjdG9yeSIsIHRydWUpOwogICAgICAgICBsb29rdXBDb25uZWN0aW9uRmFjdG9yeSgiamF2YTptb2R1bGUvZW52L0hlbGxvRUpCX0REX0Nvbm5lY3Rpb25GYWN0b3J5IiwgdHJ1ZSk7CiAgICAgICAgIGxvb2t1cENvbm5lY3Rpb25GYWN0b3J5KCJqYXZhOmNvbXAvZW52L0hlbGxvRUpCX0REX0Nvbm5lY3Rpb25GYWN0b3J5IiwgdHJ1ZSk7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9FSkI6OmhlbGxvKCkiKTsKICAgICB9CiAKQEAgLTE1MCw2ICsxNTAsNiBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEKaW5kZXggZGQ1NzNiNy4uMzM0NTBlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEKQEAgLTEyMCw3ICsxMjAsNyBAQAogICAgICAgICBsb29rdXBDb25uZWN0aW9uRmFjdG9yeSgiamF2YTphcHAvZW52L0hlbGxvRUpCX0REX0Nvbm5lY3Rpb25GYWN0b3J5IiwgdHJ1ZSk7CiAgICAgICAgIGxvb2t1cENvbm5lY3Rpb25GYWN0b3J5KCJqYXZhOm1vZHVsZS9lbnYvSGVsbG9FSkJfRERfQ29ubmVjdGlvbkZhY3RvcnkiLCB0cnVlKTsKICAgICAgICAgbG9va3VwQ29ubmVjdGlvbkZhY3RvcnkoImphdmE6Y29tcC9lbnYvSGVsbG9FSkJfRERfQ29ubmVjdGlvbkZhY3RvcnkiLCBmYWxzZSk7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVmdWxFSkIgZGF0YXNvdXJjZS1kZWZpbml0aW9ucyBTdWNjZXNzIik7CiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9BYnN0cmFjdFJlc291cmNlQWRhcHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvQWJzdHJhY3RSZXNvdXJjZUFkYXB0ZXIuamF2YQppbmRleCAwN2I5ZDc4Li4wZWZjYzVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9BYnN0cmFjdFJlc291cmNlQWRhcHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL0Fic3RyYWN0UmVzb3VyY2VBZGFwdGVyLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKICAgICBwcml2YXRlIFN0cmluZyB0ZXN0TmFtZTsKICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBkZWJ1ZyA9IHRydWU7CiAKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdE5hbWUoKSB7CiAgICAgICAgIHJldHVybiB0ZXN0TmFtZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQppbmRleCA1NTUzM2Q0Li5mNTliMmIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBDb250cm9scyB7CiAgICAgcHVibGljIHN0YXRpYyBPYmplY3QgcmVhZHlMb2NrID0gbmV3IE9iamVjdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQppbmRleCAwMDM0NDY1Li5kY2EzNzlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIERlbGl2ZXJ5V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zMCw3ICszMCw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgb3A7CiAgICAgcHJpdmF0ZSBib29sZWFuIGtlZXBDb3VudDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnRlciA9IDA7Ci0gICAgCisKICAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIFN0cmluZyBvcCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgdGhpcy5rZWVwQ291bnQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIAorICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywKICAgICAgICAgICAgIFN0cmluZyBvcCwgYm9vbGVhbiBrZWVwQ291bnQpIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC00OSw3ICs0OSw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9NZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7CiAgICAgICAgICAgICAvL2VwLmJlZm9yZURlbGl2ZXJ5KG9uTWVzc2FnZSk7CkBAIC03MiwxMSArNzIsMTEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy9lcC5hZnRlckRlbGl2ZXJ5KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtODcsMTQgKzg3LDE0IEBACiAgICAgfQogCiAvLyAgICBwcml2YXRlIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0vLyAgICAgICAgCisvLwogLy8gICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogLy8gICAgICAgIHRyeSB7CiAvLyAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAvLyAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotLy8gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKy8vICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KIC8vICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLS8vICAgICAgICAgICAgCisvLwogLy8gICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogLy8gICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKIC8vICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQppbmRleCAxMDBjYWNlLi5mYTkzZjYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLmZvcmdldDogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgIH0KQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnByZXBhcmU6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICAgICAgcmV0dXJuIFhBUmVzb3VyY2UuWEFfT0s7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5yZWNvdmVyOiAiICsgZmxhZ1RvU3RyaW5nKGZsYWcpKTsKICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc3RhcnQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2Uuc3RhcnQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpICsgIiwiICsKICAgICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCmluZGV4IGI1YjBmMDIuLjRjOWMwMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogLyoqCiAgKiBjb2xsZWN0aW9uIG9mIG1lc3NhZ2VzLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgTWVzc2FnZXMgewogCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgU3RyaW5nIGNvbW1hbmQgID0gYXJnc1swXTsKICAgICAgICBTdHJpbmcgZGVzdE5hbWUgPSBhcmdzWzFdOwogICAgICAgIFN0cmluZyBtZXNzYWdlICA9IGFyZ3NbMl07Ci0gICAKKwogICAgICAgIGlmICghImFkZCIuZXF1YWxzKGNvbW1hbmQpKSB7CiAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL015Q29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL015Q29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCA5ZjI0NjQ4Li45MjJlNzFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9NeUNvbm5lY3Rpb25GYWN0b3J5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvTXlDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsKICAgICBwcml2YXRlIE15TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZjsKICAgICBwcml2YXRlIFJlZmVyZW5jZSByZWY7Ci0gICAgCisKICAgICBwdWJsaWMgTXlDb25uZWN0aW9uRmFjdG9yeShNeU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsIENvbm5lY3Rpb25NYW5hZ2VyIGNtKSB7CiAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgIHRoaXMubWNmID0gbWNmOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvTXlNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL015TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKaW5kZXggZjM0ZTgzYi4uMjQ1MDZhNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvTXlNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9NeU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsKICAgICBwcml2YXRlIFByaW50V3JpdGVyIHdyaXRlcjsKICAgICBwcml2YXRlIFRyYW5zYWN0aW9uU3VwcG9ydExldmVsIHRyYW5zYWN0aW9uU3VwcG9ydCA9IFRyYW5zYWN0aW9uU3VwcG9ydExldmVsLkxvY2FsVHJhbnNhY3Rpb247OwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHRlc3ROYW1lOwogICAgIH0KQEAgLTY4LDcgKzY4LDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24oU3ViamVjdCBzdWJqZWN0LCAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIHJlcUluZm8pIAorICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihTdWJqZWN0IHN1YmplY3QsICBDb25uZWN0aW9uUmVxdWVzdEluZm8gcmVxSW5mbykKICAgICAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KQEAgLTc5LDcgKzc5LDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMoU2V0IGNhbmRpZGF0ZXMsIFN1YmplY3Qgc3ViLCAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIHJlcUluZm8pIAorICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhTZXQgY2FuZGlkYXRlcywgU3ViamVjdCBzdWIsICBDb25uZWN0aW9uUmVxdWVzdEluZm8gcmVxSW5mbykKICAgICAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKaW5kZXggNjE0MzgxZS4uNDQ4OTlhMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBNeVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtMzEsNyArMzEsNyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBzdG9wID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3Rvcnk7CiAgICAgcHJpdmF0ZSBXb3JrTWFuYWdlciB3bTsKLSAgICAKKwogICAgIHB1YmxpYyBNeVdvcmsoCiAgICAgICAgICAgICBTdHJpbmcgbmFtZSwgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LCBXb3JrTWFuYWdlciB3bSkgewogICAgICAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5OwpAQCAtNDksNyArNDksNyBAQAogICAgICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKTsKIAogICAgICAgICAgICAgICAgIC8qCkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC04MSwxNCArODEsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKaW5kZXggNTEyZTVjNi4uNGI1ZTVmMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCkBAIC0yNSwxMiArMjUsMTIgQEAKICAqIHNvIHRoYXQgdGhlIGFwcCBzZXJ2ZXIgY2FuIGluc3RhbnRpYXRlIGFuZCBjb25maWd1cmUKICAqIGl0IGF0IHRoZSBydW50aW1lLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBAQWN0aXZhdGlvbigKICAgICAgICAgbWVzc2FnZUxpc3RlbmVycyA9IHtjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3N9CiApCi1wdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMgCitwdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMKICAgICBpbXBsZW1lbnRzIEFjdGl2YXRpb25TcGVjLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIFN0cmluZyBkZXN0aW5hdGlvbk5hbWU7CkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvbk5hbWUgKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvbk5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25OYW1lIChTdHJpbmcgbmFtZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25OYW1lKCkgY2FsbGVkLi4uIG5hbWUgPSAiICsgbmFtZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25OYW1lID0gbmFtZTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uVHlwZSgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25UeXBlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uVHlwZSAoU3RyaW5nIHR5cGUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uVHlwZSAoKSBjYWxsZWQuLi4gdHlwZSA9ICIgKyB0eXBlKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvblR5cGU9IHR5cGU7CkBAIC02NSw3ICs2NSw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0UHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdFByb3A7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdFByb3AgKFN0cmluZyB0ZXN0UHJvcCkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdFByb3AgKCkgY2FsbGVkLi4uIHRlc3RQcm9wID0gIiArIHRlc3RQcm9wKTsKICAgICAgICAgdGhpcy50ZXN0UHJvcCA9IHRlc3RQcm9wOwpAQCAtNzQsNyArNzQsNyBAQAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldFRlc3RJbnRlZ2VyUHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdEludGVnZXJQcm9wOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RJbnRlZ2VyUHJvcCAoSW50ZWdlciB0ZXN0UHJvcDEpIHsKICAgICAgICAgZGVidWcoInNldFRlc3RJbnRlZ2VyUHJvcCAoKSBjYWxsZWQuLi4gdGVzdEludGVnZXJQcm9wID0gIiArIHRlc3RQcm9wMSk7CiAgICAgICAgIHRoaXMudGVzdEludGVnZXJQcm9wID0gdGVzdFByb3AxOwpAQCAtOTgsNyArOTgsNyBAQAogCiAgICAgICB9CiAKLSAgIH0gCisgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZGVidWcgKFN0cmluZyBtZXNzYWdlKQogICAgIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQppbmRleCAyNTYxMWVkLi4zZmQ5ZGVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCkBAIC0yOSwxNCArMjksMTQgQEAKIAogLyoqCiAgKiBUaGlzIGlzIGEgc2FtcGxlIHJlc291cmNlIGFkYXB0ZXIKLSAqIAorICoKICAqIEBhdXRob3IgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIEBDb25uZWN0b3IoCiAvKiBtb2R1bGVOYW1lPSJNeSBTaW1wbGUgUkFSIiwgKi8KLSAgICBkaXNwbGF5TmFtZSA9ICJTaW1wbGUgUmVzb3VyY2UgQWRhcHRlciIsIAotICAgIHZlbmRvck5hbWUgPSAiSmF2YSBTb2Z0d2FyZSIsIAotICAgIGVpc1R5cGUgPSAiR2VuZXJpYyBUeXBlIiwgCisgICAgZGlzcGxheU5hbWUgPSAiU2ltcGxlIFJlc291cmNlIEFkYXB0ZXIiLAorICAgIHZlbmRvck5hbWUgPSAiSmF2YSBTb2Z0d2FyZSIsCisgICAgZWlzVHlwZSA9ICJHZW5lcmljIFR5cGUiLAogICAgIHZlcnNpb24gPSAiMS4wQWxwaGEiLAogICAgIHRyYW5zYWN0aW9uU3VwcG9ydD1UcmFuc2FjdGlvblN1cHBvcnRMZXZlbC5YQVRyYW5zYWN0aW9uKQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKaW5kZXggZWUwZmFlOS4uZTI0ODUwNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIFRlc3RXTVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtMzcsOCArMzcsOCBAQAogICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlKSB7CiAgICAgICAgIHRoaXMoaWQsIGlzUm9ndWUsIGZhbHNlLCBudWxsKTsKICAgICB9Ci0gICAgCi0gICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUsIAorCisgICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUsCiAgICAgICAgICAgICBib29sZWFuIGRvTmVzdCwgRXhlY3V0aW9uQ29udGV4dCBjdHgpIHsKICAgICAgICAgdGhpcy5pZCA9IGlkOwogICAgICAgICB0aGlzLmlzUm9ndWUgPSBpc1JvZ3VlOwpAQCAtNzIsMTAgKzcyLDEwIEBACiAgICAgICAgICAgICB9IGNhdGNoIChXb3JrRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICAgICAgaWYgKGV4LmdldEVycm9yQ29kZSgpLmVxdWFscygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JrRXhjZXB0aW9uLlRYX0NPTkNVUlJFTlRfV09SS19ESVNBTExPV0VEKSkgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBBU1M6IENBVUdIVCBFWFBFQ1RFRCA9ICIgKyBleC5nZXRFcnJvckNvZGUoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGQUlMOiBDQVVHSFQgVU5FWFBFQ1RFRCA9ICIgKyBleC5nZXRFcnJvckNvZGUoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtODcsNyArODcsNyBAQAogICAgICAgICAgICAgICAgIGVjLnNldFRyYW5zYWN0aW9uVGltZW91dCg1KjEwMDApOyAvLzUgc2Vjb25kcwogICAgICAgICAgICAgICAgIHdtLmRvV29yayhuZXN0ZWRXb3JrLCAxKjEwMDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgIkZBSUw6IENBVUdIVCBVTkVYUEVDVEVEID0gIiArIGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1YzV29ya0Rpc3BhdGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1YzV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCA4YWRmM2NjLi40YjQzNzgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9WM1dvcmtEaXNwYXRjaGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvVjNXb3JrRGlzcGF0Y2hlci5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobmV3IEZha2VYQVJlc291cmNlKCkpOwogICAgICAgICAgICAgaW50IG51bU9mTWVzc2FnZXMgPSAxOwpAQCAtNzIsNyArNzIsNyBAQAogICAgICAgICAgICAgZGVidWcoIlYzV29ya0Rpc3BhdGNoZXIgY2FsbGluZyBET05FKCkiKTsKICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgIGRlYnVnKCJWM1dvcmtEaXNwYXRjaGVyIGZpbmlzaGVkIGNhbGxpbmcgRE9ORSgpIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKaW5kZXggNDIyNDlkYy4uYTE0NDQzYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgV29ya0Rpc3BhdGNoZXIgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtNDMsMTEgKzQzLDExIEBACiAgICAgcHJvdGVjdGVkIEFjdGl2YXRpb25TcGVjIHNwZWM7CiAgICAgcHJvdGVjdGVkIFdvcmtNYW5hZ2VyIHdtOwogICAgIHByb3RlY3RlZCBYQVRlcm1pbmF0b3IgeGE7Ci0gICAgCisKICAgICBwdWJsaWMgV29ya0Rpc3BhdGNoZXIoCiAgICAgICAgICAgICBTdHJpbmcgaWQsCiAgICAgICAgICAgICBCb290c3RyYXBDb250ZXh0IGN0eCwKLSAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwgCisgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIHRoaXMuaWQgICAgICA9IGlkOwogICAgICAgICB0aGlzLmN0eCAgICAgPSBjdHg7CkBAIC02MCw3ICs2MCw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICBkZWJ1ZygiV0FJVC4uLiIpOwpAQCAtODIsMjYgKzgyLDI2IEBACiAgICAgICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKTsKIAogICAgICAgICAgICAgICAgIGlmICghZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOyAKKyAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOwogICAgICAgICAgICAgICAgICAgICAvL3dtLmRvV29yayhkLCAwLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobmV3IEZha2VYQVJlc291cmNlKCkpOwogICAgICAgICAgICAgICAgICAgICBpbnQgbnVtT2ZNZXNzYWdlcyA9IDU7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vaW1wb3J0aW5nIHRyYW5zYWN0aW9uCiAKICAgICAgICAgICAgICAgICAgICAgLy93cml0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgRXhlY3V0aW9uQ29udGV4dCBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKIAotICAgICAgICAgICAgICAgICAgICBEZWxpdmVyeVdvcmsgdyA9IAorICAgICAgICAgICAgICAgICAgICBEZWxpdmVyeVdvcmsgdyA9CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiV1JJVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiRE9ORSBXUklURSBUTyBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSBudW1PZk1lc3NhZ2VzOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL3JvbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJERUxFVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTE0OSw3ICsxNDksNyBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiREVMRVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xOTQsNyArMTk0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKFhBUmVzb3VyY2UuWEFfT0sgPT0geGEucHJlcGFyZShlYy5nZXRYaWQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlhBIFBSRVBBUkUvQ09NTUlULiBET05FIFdSSVRFIFRPIERCICIpOwpAQCAtMjA2LDE5ICsyMDYsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IDM7CiAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUgYWxsLgogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIDEsICJERUxFVEVfQUxMIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJET05FIERFTEVURSBBTEwgRlJPTSBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAwOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI0NSw3ICsyNDUsNyBAQAogICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTI2MCwxNCArMjYwLDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTI5MCwxMyArMjkwLDEzIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL1NsZWVwIGZvciA1IHNlY29uZHMKICAgICAgICAgICAgIC8vVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCg1KjEwMDApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICAvL05vdGlmeSB0aGUgY2xpZW50IHRvIGNoZWNrIHRoZSByZXN1bHRzCi0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeUFsbCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5QWxsKCk7CiAKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgcmVzdWx0cyBhcmUgdmVyaWZpZWQgYnkgdGhlIGNsaWVudAotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7CiAKICAgICAgICAgICAgICAgICBpZiAoc3RvcCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCmluZGV4IDc3ZGJmMzQuLjZiZDllNTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCkBAIC0zNiw4ICszNiw4IEBACiAgICAgcHVibGljIGludCBicmFuY2hRdWFsaWZpZXI7CiAgICAgcHVibGljIGludCBnbG9iYWxUeElEOwogCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7IAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OyAKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsKIAogICAgIHB1YmxpYyBYSUQoKSB7CiAgICAgICAgIGludCBmb28gPSBJRCsrOwpAQCAtNTUsMTAgKzU1LDEwIEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAvLyBJdCBjYW4ndCBiZSBlcXVhbAogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG90aGVyID0gKFhJRClvOyAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3RoZXIgWElELCBub3cgcHJvcGVybHkgY2FzdAotICAgICAgICAKLSAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQgCisKKyAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQKICAgICAgICAgICAgICAgICAmJiB0aGlzLmJyYW5jaFF1YWxpZmllciA9PSBvdGhlci5icmFuY2hRdWFsaWZpZXIKICAgICAgICAgICAgICAgICAmJiB0aGlzLmdsb2JhbFR4SUQgPT0gb3RoZXIuZ2xvYmFsVHhJRCkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05OCw3ICs5OCw3IEBACiAgICAgICAgICAgICAgICAgImZvcm1hdElEKCIgICAgICsgZm9ybWF0SUQgICAgICsgIiksICIgKwogICAgICAgICAgICAgICAgICJicmFuY2hRdWFsaWZpZXIgKCIgKyBicmFuY2hRdWFsaWZpZXIgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImdsb2JhbFR4SUQoIiArIGdsb2JhbFR4SUQgKyAiKX0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHM7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vc2VydmxldC9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vc2VydmxldC9TZXJ2bGV0LmphdmEKaW5kZXggNmE1MDQ3Zi4uMjJiZTRiOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3NlcnZsZXQvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9zZXJ2bGV0L1NlcnZsZXQuamF2YQpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbWluUG9vbFNpemUgPSA0LAogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHsidGVzdE5hbWU9Zm9vIn0KICAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJtb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTptb2R1bGUvZW52L1NlcnZsZXRfQ29ubmVjdGlvbkZhY3RvcnkiLApAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VBZGFwdGVyID0gImNmZC1yYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0geyJ0ZXN0TmFtZT1mb28ifQogICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBAQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249ImNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOmNvbXAvZW52L1NlcnZsZXRfQ29ubmVjdGlvbkZhY3RvcnkiLApAQCAtOTMsNyArOTMsNyBAQAogCiAgICAgQEVKQgogICAgIHByaXZhdGUgIEhlbGxvIGhlbGxvU3RhdGVsZXNzOwotICAgIAorCiAgICAgQEVKQihiZWFuTmFtZSA9ICJIZWxsb1N0YXRlZnVsRUpCIikKICAgICBwcml2YXRlICBIZWxsb1N0YXRlZnVsIGhlbGxvU3RhdGVmdWw7CiAKQEAgLTEwOSw3ICsxMDksNyBAQAogCiAgICAgICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAvLyBDb25uZWN0aW9uLUZhY3RvcnktRGVmaW5pdGlvbiB0aHJvdWdoIEFubm90YXRpb24KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi91dC9BcmNoaXZlVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3V0L0FyY2hpdmVUZXN0LmphdmEKaW5kZXggYmRjNDliZS4uNTUxNzFkMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3V0L0FyY2hpdmVUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3V0L0FyY2hpdmVUZXN0LmphdmEKQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgQVNVUkxDbGFzc0xvYWRlciBjbGFzc0xvYWRlciA9IG5ldyBBU1VSTENsYXNzTG9hZGVyKHRoaXMuZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsKICAgICAgICAgY2xhc3NMb2FkZXIuYWRkVVJMKGFyY2hpdmUudG9VUkwoKSk7CiAgICAgICAgIHJlYWRlci5zZXRDbGFzc0xvYWRlcihjbGFzc0xvYWRlcik7Ci0gICAgICAgIAorCiAgICAgICAgIEFwcGxpY2F0aW9uIGFwcGxpY2F0aW9uRGVzYyA9IHJlYWRlci5vcGVuKGFyY2hpdmUpOwogLy8gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS1Db25uZWN0b3IgcmVzb3J1Y2UgaW4gYXBwbGljYXRpb24ueG1sLS0tLS0tLS0tLSIpOwogLy8gICAgICAgIGZvciggQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvciBjZmRkOiBhcHBsaWNhdGlvbkRlc2MuZ2V0Q29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvcnMoKSl7CkBAIC04Miw4ICs4Miw4IEBACiAvLyAgICAgICAgICAgIH0KIC8vICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKIC8vICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBNYXA8U3RyaW5nLENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3I+IGV4cGVjdGVkQ0ZERHMgPSAKKworICAgICAgICBNYXA8U3RyaW5nLENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3I+IGV4cGVjdGVkQ0ZERHMgPQogICAgICAgICAgICAgICAgIG5ldyBIYXNoTWFwPFN0cmluZyxDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yPigpOwogICAgICAgICBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yIGRlc2M7CiAKQEAgLTEzNCwxMCArMTM0LDEwIEBACiAgICAgICAgIHJlYWRlci5zZXRBbm5vdGF0aW9uUHJvY2Vzc2luZ1JlcXVlc3RlZCh0cnVlKTsKICAgICAgICAgcmVhZGVyLnNldENsYXNzTG9hZGVyKGNsYXNzTG9hZGVyKTsKICAgICAgICAgYXNzZXJ0VHJ1ZSgiQXJjaGl2aXN0IHNob3VsZCBoYW5kbGUgYW5ub3RhdGlvbnMuIiwgcmVhZGVyLmlzQW5ub3RhdGlvblByb2Nlc3NpbmdSZXF1ZXN0ZWQoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIFdlYkJ1bmRsZURlc2NyaXB0b3Igd2ViRGVzYyA9IHJlYWRlci5vcGVuKGFyY2hpdmUpOwogCi0gICAgICAgIE1hcDxTdHJpbmcsQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvcj4gZXhwZWN0ZWRDRkREcyA9IAorICAgICAgICBNYXA8U3RyaW5nLENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3I+IGV4cGVjdGVkQ0ZERHMgPQogICAgICAgICAgICAgICAgIG5ldyBIYXNoTWFwPFN0cmluZyxDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yPigpOwogICAgICAgICBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yIGRlc2M7CiAKQEAgLTE1OSw3ICsxNTksNyBAQAogICAgICAgICBkZXNjLnNldE1pblBvb2xTaXplKDQpOwogICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJ0ZXN0TmFtZSIsICJmb28iKTsKICAgICAgICAgZXhwZWN0ZWRDRkREcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwotICAgICAgICAKKwogICAgICAgICBkZXNjID0gbmV3IENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigiYXBwbGljYXRpb24tc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uIik7CiAgICAgICAgIGRlc2Muc2V0TmFtZSgiamF2YTphcHAvZW52L1NlcnZsZXRfQ29ubmVjdGlvbkZhY3RvcnkiKTsKQEAgLTE3MCw3ICsxNzAsNyBAQAogICAgICAgICBkZXNjLnNldE1pblBvb2xTaXplKDQpOwogICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJ0ZXN0TmFtZSIsICJmb28iKTsKICAgICAgICAgZXhwZWN0ZWRDRkREcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwotICAgICAgICAKKwogICAgICAgICBkZXNjID0gbmV3IENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigibW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbiIpOwogICAgICAgICBkZXNjLnNldE5hbWUoImphdmE6bW9kdWxlL2Vudi9TZXJ2bGV0X0Nvbm5lY3Rpb25GYWN0b3J5Iik7CkBAIC0xNzgsNyArMTc4LDcgQEAKICAgICAgICAgZGVzYy5zZXRSZXNvdXJjZUFkYXB0ZXIoImNmZC1yYSIpOwogICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJ0ZXN0TmFtZSIsICJmb28iKTsKICAgICAgICAgZXhwZWN0ZWRDRkREcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwotICAgICAgICAKKwogICAgICAgICBkZXNjID0gbmV3IENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigiY29tcG9uZW50LXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbiIpOwogICAgICAgICBkZXNjLnNldE5hbWUoImphdmE6Y29tcC9lbnYvU2VydmxldF9Db25uZWN0aW9uRmFjdG9yeSIpOwpAQCAtMTg2LDcgKzE4Niw3IEBACiAgICAgICAgIGRlc2Muc2V0UmVzb3VyY2VBZGFwdGVyKCJjZmQtcmEiKTsKICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgidGVzdE5hbWUiLCAiZm9vIik7CiAgICAgICAgIGV4cGVjdGVkQ0ZERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgCisKICAgICAgICAgZGVzYyA9IG5ldyBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yKCk7CiAgICAgICAgIGRlc2Muc2V0RGVzY3JpcHRpb24oImdsb2JhbC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIFdlYiBERCIpOwogICAgICAgICBkZXNjLnNldE5hbWUoImphdmE6Z2xvYmFsL2Vudi9XZWJfRERfQ29ubmVjdGlvbkZhY3RvcnkiKTsKQEAgLTE5Nyw3ICsxOTcsNyBAQAogICAgICAgICBkZXNjLnNldE1pblBvb2xTaXplKDQpOwogICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJ0ZXN0TmFtZSIsICJmb28iKTsKICAgICAgICAgZXhwZWN0ZWRDRkREcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwotICAgICAgICAKKwogICAgICAgICBkZXNjID0gbmV3IENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigiYXBwbGljYXRpb24tc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBXZWIgREQiKTsKICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOmFwcC9lbnYvV2ViX0REX0Nvbm5lY3Rpb25GYWN0b3J5Iik7CkBAIC0yMDgsNyArMjA4LDcgQEAKICAgICAgICAgZGVzYy5zZXRNaW5Qb29sU2l6ZSg0KTsKICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgidGVzdE5hbWUiLCAiZm9vIik7CiAgICAgICAgIGV4cGVjdGVkQ0ZERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgCisKICAgICAgICAgZGVzYyA9IG5ldyBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yKCk7CiAgICAgICAgIGRlc2Muc2V0RGVzY3JpcHRpb24oIm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIFdlYiBERCIpOwogICAgICAgICBkZXNjLnNldE5hbWUoImphdmE6bW9kdWxlL2Vudi9XZWJfRERfQ29ubmVjdGlvbkZhY3RvcnkiKTsKQEAgLTIzOCw3ICsyMzgsNyBAQAogCiAgICAgICAgIEFTVVJMQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIgPSBuZXcgQVNVUkxDbGFzc0xvYWRlcih0aGlzLmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKSk7CiAgICAgICAgIGNsYXNzTG9hZGVyLmFkZFVSTChhcmNoaXZlLnRvVVJMKCkpOwotICAgICAgICAgICAgICAgCisKICAgICAgICAgRWpiQXJjaGl2aXN0IHJlYWRlciA9IChFamJBcmNoaXZpc3QpIFRlc3RVdGlsLmdldEJ5VHlwZShFamJBcmNoaXZpc3QuY2xhc3MpOwogICAgICAgICByZWFkZXIuc2V0Q2xhc3NMb2FkZXIoY2xhc3NMb2FkZXIpOwogICAgICAgICByZWFkZXIuc2V0QW5ub3RhdGlvblByb2Nlc3NpbmdSZXF1ZXN0ZWQodHJ1ZSk7CkBAIC0yNDksOCArMjQ5LDggQEAKICAgICAgICAgZm9yKCBFamJEZXNjcmlwdG9yIGVqYkRlc2M6IGVqYkJ1bmRsZURlc2MuZ2V0RWpicygpKXsKICAgICAgICAgICAgIGFjdHVyYWxDRkREcy5hZGRBbGwoZWpiRGVzYy5nZXRSZXNvdXJjZURlc2NyaXB0b3JzKEphdmFFRVJlc291cmNlVHlwZS5DRkQpKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTWFwPFN0cmluZyxDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZENGRERzID0gCisKKyAgICAgICAgTWFwPFN0cmluZyxDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZENGRERzID0KICAgICAgICAgICAgICAgICBuZXcgSGFzaE1hcDxTdHJpbmcsQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvcj4oKTsKICAgICAgICAgQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvciBkZXNjOwogCkBAIC0zNTAsNyArMzUwLDcgQEAKICAgICAgICAgICAgIGRlc2MuYWRkUHJvcGVydHkoInRlc3ROYW1lIiwgImZvbyIpOwogICAgICAgICAgICAgZXhwZWN0ZWRDRkREcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vIGNvbm5lY3Rpb24tZmFjdG9yeSBpbiBhbm5vdGF0aW9uIGZvciBzdGF0ZWZ1bCBFSkIKICAgICAgICAgewogICAgICAgICAgICAgZGVzYyA9IG5ldyBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yKCk7CkBAIC0zNjMsNyArMzYzLDcgQEAKICAgICAgICAgICAgIGRlc2Muc2V0TWluUG9vbFNpemUoNCk7CiAgICAgICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJ0ZXN0TmFtZSIsICJmb28iKTsKICAgICAgICAgICAgIGV4cGVjdGVkQ0ZERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBkZXNjID0gbmV3IENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgICAgIGRlc2Muc2V0RGVzY3JpcHRpb24oImFwcGxpY2F0aW9uLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbiIpOwogICAgICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOmFwcC9lbnYvSGVsbG9TdGF0ZWZ1bEVKQl9Bbm5vdGF0aW9uX0Nvbm5lY3Rpb25GYWN0b3J5Iik7CkBAIC00MDQsNyArNDA0LDcgQEAKICAgICAgICAgICAgIGRlc2Muc2V0TWluUG9vbFNpemUoNCk7CiAgICAgICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJ0ZXN0TmFtZSIsICJmb28iKTsKICAgICAgICAgICAgIGV4cGVjdGVkQ0ZERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBkZXNjID0gbmV3IENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgICAgIGRlc2Muc2V0RGVzY3JpcHRpb24oImFwcGxpY2F0aW9uLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbiIpOwogICAgICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOmFwcC9lbnYvSGVsbG9FSkJfQW5ub3RhdGlvbl9Db25uZWN0aW9uRmFjdG9yeSIpOwpAQCAtNDE1LDcgKzQxNSw3IEBACiAgICAgICAgICAgICBkZXNjLnNldE1pblBvb2xTaXplKDQpOwogICAgICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgidGVzdE5hbWUiLCAiZm9vIik7CiAgICAgICAgICAgICBleHBlY3RlZENGRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZGVzYyA9IG5ldyBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yKCk7CiAgICAgICAgICAgICBkZXNjLnNldERlc2NyaXB0aW9uKCJtb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uIik7CiAgICAgICAgICAgICBkZXNjLnNldE5hbWUoImphdmE6bW9kdWxlL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0Nvbm5lY3Rpb25GYWN0b3J5Iik7CkBAIC00MjMsNyArNDIzLDcgQEAKICAgICAgICAgICAgIGRlc2Muc2V0UmVzb3VyY2VBZGFwdGVyKCJjZmQtcmEiKTsKICAgICAgICAgICAgIGRlc2MuYWRkUHJvcGVydHkoInRlc3ROYW1lIiwgImZvbyIpOwogICAgICAgICAgICAgZXhwZWN0ZWRDRkREcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGRlc2MgPSBuZXcgQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvcigpOwogICAgICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigiY29tcG9uZW50LXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbiIpOwogICAgICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOmNvbXAvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQ29ubmVjdGlvbkZhY3RvcnkiKTsKQEAgLTQzMiw5ICs0MzIsOSBAQAogICAgICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgidGVzdE5hbWUiLCAiZm9vIik7CiAgICAgICAgICAgICBleHBlY3RlZENGRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgVGVzdFV0aWwuY29tcGFyZUNGREQoZXhwZWN0ZWRDRkREcywgYWN0dXJhbENGRERzKTsKIAogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3V0L0REVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3V0L0REVGVzdC5qYXZhCmluZGV4IDllNWY4ZjUuLjY5MGFlZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi91dC9ERFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vdXQvRERUZXN0LmphdmEKQEAgLTQ3LDIzICs0NywyMyBAQAogICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLnRlYXJEb3duKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdGVzdEFwcGxpY2F0aW9uREQoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdGNOYW1lID0gImNvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWFwcGxpY2F0aW9uLURELXRlc3QiOwogICAgICAgICBJbnB1dFN0cmVhbSBkZElTPW51bGw7CiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIFN0cmluZyBkZEZpbGVOYW1lID0gInV0LWFwcGxpY2F0aW9uLnhtbCI7CiAgICAgICAgICAgICBGaWxlIGRkRmlsZSA9IG5ldyBGaWxlKGRlc2NyaXB0b3JEaXIsIGRkRmlsZU5hbWUpOwogICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIlRoZSBhcHBsaWNhdGlvbi54bWwgbm90IGZvdW5kOiAiK2RkRmlsZSxkZEZpbGUuZXhpc3RzKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGRkSVMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGRkRmlsZSk7CiAgICAgICAgICAgICBBcHBsaWNhdGlvbkRlcGxveW1lbnREZXNjcmlwdG9yRmlsZSBkZFJlYWRlciA9IG5ldyBBcHBsaWNhdGlvbkRlcGxveW1lbnREZXNjcmlwdG9yRmlsZSgpOwogICAgICAgICAgICAgQXBwbGljYXRpb24gYXBwbGljYXRpb24gPSAoQXBwbGljYXRpb24pIGRkUmVhZGVyLnJlYWQoIGRkSVMpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFNldDxSZXNvdXJjZURlc2NyaXB0b3I+IGFjdHVhbENGRERzID0gYXBwbGljYXRpb24uZ2V0UmVzb3VyY2VEZXNjcmlwdG9ycyhKYXZhRUVSZXNvdXJjZVR5cGUuQ0ZEKTsKIAotICAgICAgICAgICAgTWFwPFN0cmluZyxDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZENGRERzID0gCisgICAgICAgICAgICBNYXA8U3RyaW5nLENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3I+IGV4cGVjdGVkQ0ZERHMgPQogICAgICAgICAgICAgICAgICAgICBuZXcgSGFzaE1hcDxTdHJpbmcsQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvcj4oKTsKICAgICAgICAgICAgIENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3IgZGVzYzsKIApAQCAtNzcsNyArNzcsNyBAQAogICAgICAgICAgICAgZGVzYy5zZXRNaW5Qb29sU2l6ZSg0KTsKICAgICAgICAgICAgIGRlc2MuYWRkUHJvcGVydHkoInRlc3ROYW1lIiwgImZvbyIpOwogICAgICAgICAgICAgZXhwZWN0ZWRDRkREcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGRlc2MgPSBuZXcgQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvcigpOwogICAgICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOmFwcC9lbnYvQ29ubmVjdGlvbkZhY3RvcnkiKTsKICAgICAgICAgICAgIGRlc2Muc2V0SW50ZXJmYWNlTmFtZSgiamFrYXJ0YS5yZXNvdXJjZS5jY2kuQ29ubmVjdGlvbkZhY3RvcnkiKTsKQEAgLTg5LDcgKzg5LDcgQEAKIAogICAgICAgICAgICAgVGVzdFV0aWwuY29tcGFyZUNGREQoZXhwZWN0ZWRDRkREcywgYWN0dWFsQ0ZERHMpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGNOYW1lLCBzdGF0LlBBU1MpOwotICAgICAgICAgICAgCisKICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRjTmFtZSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIHRocm93IGU7CkBAIC0xMDMsMTggKzEwMywxOCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RTZXNzaW9uRUpCREQoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdGNOYW1lID0gImNvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLVNlc3Npb24tRUpCLURELXRlc3QiOwogICAgICAgICBJbnB1dFN0cmVhbSBkZElTPW51bGw7CiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIFN0cmluZyBkZEZpbGVOYW1lID0gInV0LXNlc3Npb24tZWpiLWphci54bWwiOwogICAgICAgICAgICAgRmlsZSBkZEZpbGUgPSBuZXcgRmlsZShkZXNjcmlwdG9yRGlyLCBkZEZpbGVOYW1lKTsKICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCJUaGUgdXQtc2Vzc2lvbi1lamItamFyLnhtbCBub3QgZm91bmQ6ICIrZGRGaWxlLCBkZEZpbGUuZXhpc3RzKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGRkSVMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGRkRmlsZSk7CiAgICAgICAgICAgICBFamJEZXBsb3ltZW50RGVzY3JpcHRvckZpbGUgZGRSZWFkZXIgPSBuZXcgRWpiRGVwbG95bWVudERlc2NyaXB0b3JGaWxlKCk7CiAgICAgICAgICAgICBFamJCdW5kbGVEZXNjcmlwdG9yIGVqYkJ1bmRsZSA9IChFamJCdW5kbGVEZXNjcmlwdG9yKSBkZFJlYWRlci5yZWFkKCBkZElTKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBmb3IoRWpiRGVzY3JpcHRvciBlamJEZXNjcmlwdG9yIDogZWpiQnVuZGxlLmdldEVqYnMoKSl7CiAgICAgICAgICAgICAgICAgZWpiRGVzY3JpcHRvci5nZXRSZXNvdXJjZURlc2NyaXB0b3JzKEphdmFFRVJlc291cmNlVHlwZS5DRkQpOwogICAgICAgICAgICAgICAgIGlmKGVqYkRlc2NyaXB0b3IuZ2V0TmFtZSgpLmVxdWFscygiSGVsbG9TdGF0ZWZ1bEVKQiIpKXsKQEAgLTEyNSw5ICsxMjUsOSBAQAogICAgICAgICAgICAgICAgICAgICBmYWlsKCJVbmtub3duIEVKQiBkZXNjcmlwdG9yOiAiK2VqYkRlc2NyaXB0b3IuZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGNOYW1lLCBzdGF0LlBBU1MpOwotICAgICAgICAgICAgCisKICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRjTmFtZSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIHRocm93IGU7CkBAIC0xMzksNyArMTM5LDcgQEAKIAogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3RTdGF0ZWZ1bFNlc3Npb25FSkJERChFamJEZXNjcmlwdG9yIGVqYikgdGhyb3dzIEV4Y2VwdGlvbnsKICAgICAgICAgQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvciBkZXNjOwogICAgICAgICBNYXA8U3RyaW5nLENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3I+IGV4cGVjdGVkQ0ZERHMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvcj4oKTsKQEAgLTE1NCw3ICsxNTQsNyBAQAogICAgICAgICBkZXNjLnNldE1pblBvb2xTaXplKDQpOwogICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJ0ZXN0TmFtZSIsICJmb28iKTsKICAgICAgICAgZXhwZWN0ZWRDRkREcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwotICAgICAgICAKKwogICAgICAgICBkZXNjID0gbmV3IENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigibW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREIik7CiAgICAgICAgIGRlc2Muc2V0TmFtZSgiamF2YTptb2R1bGUvZW52L1N0YXRlZnVsRUpCX0Nvbm5lY3Rpb25GYWN0b3J5Iik7CkBAIC0xNzUsOSArMTc1LDkgQEAKICAgICAgICAgZXhwZWN0ZWRDRkREcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwogCiAgICAgICAgIFRlc3RVdGlsLmNvbXBhcmVDRkREKGV4cGVjdGVkQ0ZERHMsIGVqYi5nZXRSZXNvdXJjZURlc2NyaXB0b3JzKEphdmFFRVJlc291cmNlVHlwZS5DRkQpKTsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgdGVzdFN0YXRlbGVzc1Nlc3Npb25FSkJERChFamJEZXNjcmlwdG9yIGVqYikgdGhyb3dzIEV4Y2VwdGlvbnsKICAgICAgICAgQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvciBkZXNjOwogICAgICAgICBNYXA8U3RyaW5nLENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3I+IGV4cGVjdGVkQ0ZERHMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvcj4oKTsKQEAgLTE5Miw3ICsxOTIsNyBAQAogICAgICAgICBkZXNjLnNldE1pblBvb2xTaXplKDQpOwogICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJ0ZXN0TmFtZSIsICJmb28iKTsKICAgICAgICAgZXhwZWN0ZWRDRkREcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwotICAgICAgICAKKwogICAgICAgICBkZXNjID0gbmV3IENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigibW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREIik7CiAgICAgICAgIGRlc2Muc2V0TmFtZSgiamF2YTptb2R1bGUvZW52L0hlbGxvRUpCX0Nvbm5lY3Rpb25GYWN0b3J5Iik7CkBAIC0yMTMsMTggKzIxMywxOCBAQAogICAgICAgICBleHBlY3RlZENGRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7CiAKICAgICAgICAgVGVzdFV0aWwuY29tcGFyZUNGREQoZXhwZWN0ZWRDRkREcywgZWpiLmdldFJlc291cmNlRGVzY3JpcHRvcnMoSmF2YUVFUmVzb3VyY2VUeXBlLkNGRCkpOwotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHRlc3RFbnRpdHlFSkJERCgpIHRocm93cyBFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB0Y05hbWUgPSAiY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tRW50aXR5LUVKQi1ERC10ZXN0IjsKICAgICAgICAgSW5wdXRTdHJlYW0gZGRJUz1udWxsOwogICAgICAgICB0cnl7CiAgICAgICAgICAgICBTdHJpbmcgZGRGaWxlTmFtZSA9ICJ1dC1lbnRpdHktZWpiLWphci54bWwiOwogICAgICAgICAgICAgRmlsZSBkZEZpbGUgPSBuZXcgRmlsZShkZXNjcmlwdG9yRGlyLCBkZEZpbGVOYW1lKTsKICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCJUaGUgdXQtZW50aXR5LWVqYi1qYXIueG1sIG5vdCBmb3VuZDogIitkZEZpbGUsIGRkRmlsZS5leGlzdHMoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZGRJUyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZGRGaWxlKTsKICAgICAgICAgICAgIEVqYkRlcGxveW1lbnREZXNjcmlwdG9yRmlsZSBkZFJlYWRlciA9IG5ldyBFamJEZXBsb3ltZW50RGVzY3JpcHRvckZpbGUoKTsKICAgICAgICAgICAgIEVqYkJ1bmRsZURlc2NyaXB0b3IgZWpiQnVuZGxlID0gKEVqYkJ1bmRsZURlc2NyaXB0b3IpIGRkUmVhZGVyLnJlYWQoIGRkSVMpOwpAQCAtMjQzLDcgKzI0Myw3IEBACiAgICAgICAgICAgICAgICAgZGVzYy5zZXRNaW5Qb29sU2l6ZSg0KTsKICAgICAgICAgICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJ0ZXN0TmFtZSIsICJmb28iKTsKICAgICAgICAgICAgICAgICBleHBlY3RlZENGRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZXNjID0gbmV3IENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgICAgICAgICBkZXNjLnNldERlc2NyaXB0aW9uKCJtb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQiKTsKICAgICAgICAgICAgICAgICBkZXNjLnNldE5hbWUoImphdmE6bW9kdWxlL2Vudi9FbnRpdHlfQ29ubmVjdGlvbkZhY3RvcnkiKTsKQEAgLTI2Nyw3ICsyNjcsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0Y05hbWUsIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGNOYW1lLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgdGhyb3cgZTsKQEAgLTI4MSwxNCArMjgxLDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdE1EQkVKQkREKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHRjTmFtZSA9ICJjb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1NREItRUpCLURELXRlc3QiOwogICAgICAgICBJbnB1dFN0cmVhbSBkZElTPW51bGw7CiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIFN0cmluZyBkZEZpbGVOYW1lID0gInV0LW1kYi1lamItamFyLnhtbCI7CiAgICAgICAgICAgICBGaWxlIGRkRmlsZSA9IG5ldyBGaWxlKGRlc2NyaXB0b3JEaXIsIGRkRmlsZU5hbWUpOwogICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIlRoZSB1dC1tZGItZWpiLWphci54bWwgbm90IGZvdW5kOiAiK2RkRmlsZSwgZGRGaWxlLmV4aXN0cygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBkZElTID0gbmV3IEZpbGVJbnB1dFN0cmVhbShkZEZpbGUpOwogICAgICAgICAgICAgRWpiRGVwbG95bWVudERlc2NyaXB0b3JGaWxlIGRkUmVhZGVyID0gbmV3IEVqYkRlcGxveW1lbnREZXNjcmlwdG9yRmlsZSgpOwogICAgICAgICAgICAgRWpiQnVuZGxlRGVzY3JpcHRvciBlamJCdW5kbGUgPSAoRWpiQnVuZGxlRGVzY3JpcHRvcikgZGRSZWFkZXIucmVhZCggZGRJUyk7CkBAIC0zMDcsNyArMzA3LDcgQEAKICAgICAgICAgICAgICAgICBkZXNjLnNldE1pblBvb2xTaXplKDQpOwogICAgICAgICAgICAgICAgIGRlc2MuYWRkUHJvcGVydHkoInRlc3ROYW1lIiwgImZvbyIpOwogICAgICAgICAgICAgICAgIGV4cGVjdGVkQ0ZERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlc2MgPSBuZXcgQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvcigpOwogICAgICAgICAgICAgICAgIGRlc2Muc2V0RGVzY3JpcHRpb24oIm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERCIpOwogICAgICAgICAgICAgICAgIGRlc2Muc2V0TmFtZSgiamF2YTptb2R1bGUvZW52L01EQl9Db25uZWN0aW9uRmFjdG9yeSIpOwpAQCAtMzMxLDcgKzMzMSw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRjTmFtZSwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0Y05hbWUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB0aHJvdyBlOwpAQCAtMzQ1LDE0ICszNDUsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0SW50ZXJjZXB0b3JFSkJERCgpIHRocm93cyBFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB0Y05hbWUgPSAiY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tSW50ZXJjZXB0b3ItRUpCLURELXRlc3QiOwogICAgICAgICBJbnB1dFN0cmVhbSBkZElTPW51bGw7CiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIFN0cmluZyBkZEZpbGVOYW1lID0gInV0LWludGVyY2VwdG9yLWVqYi1qYXIueG1sIjsKICAgICAgICAgICAgIEZpbGUgZGRGaWxlID0gbmV3IEZpbGUoZGVzY3JpcHRvckRpciwgZGRGaWxlTmFtZSk7CiAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiVGhlIHV0LWludGVyY2VwdG9yLWVqYi1qYXIueG1sIG5vdCBmb3VuZDogIitkZEZpbGUsIGRkRmlsZS5leGlzdHMoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZGRJUyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZGRGaWxlKTsKICAgICAgICAgICAgIEVqYkRlcGxveW1lbnREZXNjcmlwdG9yRmlsZSBkZFJlYWRlciA9IG5ldyBFamJEZXBsb3ltZW50RGVzY3JpcHRvckZpbGUoKTsKICAgICAgICAgICAgIEVqYkJ1bmRsZURlc2NyaXB0b3IgZWpiQnVuZGxlID0gKEVqYkJ1bmRsZURlc2NyaXB0b3IpIGRkUmVhZGVyLnJlYWQoIGRkSVMpOwpAQCAtMzcxLDcgKzM3MSw3IEBACiAgICAgICAgICAgICAgICAgZGVzYy5zZXRNaW5Qb29sU2l6ZSg0KTsKICAgICAgICAgICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJ0ZXN0TmFtZSIsICJmb28iKTsKICAgICAgICAgICAgICAgICBleHBlY3RlZENGRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZXNjID0gbmV3IENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgICAgICAgICBkZXNjLnNldERlc2NyaXB0aW9uKCJtb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQiKTsKICAgICAgICAgICAgICAgICBkZXNjLnNldE5hbWUoImphdmE6bW9kdWxlL2Vudi9JbnRlcmNlcHRvcl9Db25uZWN0aW9uRmFjdG9yeSIpOwpAQCAtMzk1LDcgKzM5NSw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRjTmFtZSwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0Y05hbWUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB0aHJvdyBlOwpAQCAtNDA5LDE4ICs0MDksMTggQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0V2ViREQoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdGNOYW1lID0gImNvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLVdlYi1ERC10ZXN0IjsKICAgICAgICAgSW5wdXRTdHJlYW0gZGRJUz1udWxsOwogICAgICAgICB0cnl7CiAgICAgICAgICAgICBTdHJpbmcgZGRGaWxlTmFtZSA9ICJ1dC13ZWIueG1sIjsKICAgICAgICAgICAgIEZpbGUgZGRGaWxlID0gbmV3IEZpbGUoZGVzY3JpcHRvckRpciwgZGRGaWxlTmFtZSk7CiAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiVGhlIHV0LXdlYi54bWwgbm90IGZvdW5kOiAiK2RkRmlsZSwgZGRGaWxlLmV4aXN0cygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBkZElTID0gbmV3IEZpbGVJbnB1dFN0cmVhbShkZEZpbGUpOwogICAgICAgICAgICAgV2ViRGVwbG95bWVudERlc2NyaXB0b3JGaWxlIGRkUmVhZGVyID0gbmV3IFdlYkRlcGxveW1lbnREZXNjcmlwdG9yRmlsZSgpOwogICAgICAgICAgICAgV2ViQnVuZGxlRGVzY3JpcHRvciB3ZWJCdW5kbGUgPSAgZGRSZWFkZXIucmVhZCggZGRJUyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvciBkZXNjOwogICAgICAgICAgICAgTWFwPFN0cmluZyxDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZENGRERzID0gbmV3IEhhc2hNYXA8U3RyaW5nLENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3I+KCk7CiAKQEAgLTQzNCw3ICs0MzQsNyBAQAogICAgICAgICAgICAgZGVzYy5zZXRNaW5Qb29sU2l6ZSg0KTsKICAgICAgICAgICAgIGRlc2MuYWRkUHJvcGVydHkoInRlc3ROYW1lIiwgImZvbyIpOwogICAgICAgICAgICAgZXhwZWN0ZWRDRkREcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGRlc2MgPSBuZXcgQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvcigpOwogICAgICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigiYXBwbGljYXRpb24tc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBXZWIgREQiKTsKICAgICAgICAgICAgIGRlc2Muc2V0TmFtZSgiamF2YTphcHAvZW52L0Nvbm5lY3Rpb25GYWN0b3J5Iik7CkBAIC00NTcsNyArNDU3LDcgQEAKICAgICAgICAgICAgIFRlc3RVdGlsLmNvbXBhcmVDRkREKGV4cGVjdGVkQ0ZERHMsIHdlYkJ1bmRsZS5nZXRSZXNvdXJjZURlc2NyaXB0b3JzKEphdmFFRVJlc291cmNlVHlwZS5DRkQpKTsKIAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGNOYW1lLCBzdGF0LlBBU1MpOwotICAgICAgICAgICAgCisKICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRjTmFtZSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIHRocm93IGU7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vdXQvVGVzdFV0aWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi91dC9UZXN0VXRpbC5qYXZhCmluZGV4IDI0MTc4Y2QuLjdkYWRkN2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi91dC9UZXN0VXRpbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi91dC9UZXN0VXRpbC5qYXZhCkBAIC0yOSw0NSArMjksNDUgQEAKIAogcHVibGljIGNsYXNzIFRlc3RVdGlsIHsKIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBjb21wYXJlQ0ZERChNYXA8U3RyaW5nLENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3I+IGV4cGVjdGVkQ0ZERHMsIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBjb21wYXJlQ0ZERChNYXA8U3RyaW5nLENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3I+IGV4cGVjdGVkQ0ZERHMsCiAgICAgICAgICAgICBTZXQ8UmVzb3VyY2VEZXNjcmlwdG9yPiBhY3R1YWxDRkREcykgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgZm9yKERlc2NyaXB0b3IgZGVzY3JpcHRvciA6IGFjdHVhbENGRERzKXsKICAgICAgICAgICAgIENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3IgYWN0dWFsRGVzYyA9IChDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yKWRlc2NyaXB0b3I7CiAgICAgICAgICAgICBhc3NlcnROb3ROdWxsKCJ0aGUgbmFtZSBvZiBjb25uZWN0b3IgcmVzb3VyY2UgY2Fubm90IGJlIG51bGwuIiwgYWN0dWFsRGVzYy5nZXROYW1lKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3IgZXhwZWN0ZWREZXNjID0gZXhwZWN0ZWRDRkREcy5nZXQoYWN0dWFsRGVzYy5nZXROYW1lKCkpOwogICAgICAgICAgICAgYXNzZXJ0Tm90TnVsbCgiVGhlIENGRCBvZiB0aGUgbmFtZSBbIithY3R1YWxEZXNjLmdldE5hbWUoKSsiXSBpcyBub3QgZXhwZWN0ZWQuIiwgZXhwZWN0ZWREZXNjKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkZhaWwgdG8gdmVyaWZ5IGNsYXNzLW5hbWUgb2YgdGhlIENGREQ6IithY3R1YWxEZXNjLmdldE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWREZXNjLmdldEludGVyZmFjZU5hbWUoKSwgYWN0dWFsRGVzYy5nZXRJbnRlcmZhY2VOYW1lKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiRmFpbCB0byB2ZXJpZnkgcmVzb3VyY2UtYWRhcHRlciBvZiB0aGUgQ0ZERDoiK2FjdHVhbERlc2MuZ2V0TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICBleHBlY3RlZERlc2MuZ2V0UmVzb3VyY2VBZGFwdGVyKCksIGFjdHVhbERlc2MuZ2V0UmVzb3VyY2VBZGFwdGVyKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiRmFpbCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24tc3VwcG9ydCBvZiB0aGUgQ0ZERDoiK2FjdHVhbERlc2MuZ2V0TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICBleHBlY3RlZERlc2MuZ2V0VHJhbnNhY3Rpb25TdXBwb3J0KCksIGFjdHVhbERlc2MuZ2V0VHJhbnNhY3Rpb25TdXBwb3J0KCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiRmFpbCB0byB2ZXJpZnkgbWF4LXBvb2wtc2l6ZSBvZiB0aGUgQ0ZERDoiK2FjdHVhbERlc2MuZ2V0TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICBleHBlY3RlZERlc2MuZ2V0TWF4UG9vbFNpemUoKSwgYWN0dWFsRGVzYy5nZXRNYXhQb29sU2l6ZSgpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkZhaWwgdG8gdmVyaWZ5IG1pbi1wb29sLXNpemUgb2YgdGhlIENGREQ6IithY3R1YWxEZXNjLmdldE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWREZXNjLmdldE1pblBvb2xTaXplKCksIGFjdHVhbERlc2MuZ2V0TWluUG9vbFNpemUoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJGYWlsIHRvIHZlcmlmeSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0ZERDoiK2FjdHVhbERlc2MuZ2V0TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICBleHBlY3RlZERlc2MuZ2V0RGVzY3JpcHRpb24oKSwgYWN0dWFsRGVzYy5nZXREZXNjcmlwdGlvbigpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBQcm9wZXJ0aWVzIGV4cGVjdGVkUHJvcHMgPSBleHBlY3RlZERlc2MuZ2V0UHJvcGVydGllcygpOwogICAgICAgICAgICAgUHJvcGVydGllcyBhY3R1YWxQcm9wcyA9IGFjdHVhbERlc2MuZ2V0UHJvcGVydGllcygpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGZvcihPYmplY3QgbmFtZSA6IGFjdHVhbFByb3BzLmtleVNldCgpKXsKICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkZhaWwgdG8gdmVyaWZ5IHByb3BlcnR5ICgiK25hbWUrIikgb2YgdGhlIENGREQ6IithY3R1YWxEZXNjLmdldE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkUHJvcHMuZ2V0KG5hbWUpLCBhY3R1YWxQcm9wcy5nZXQobmFtZSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiRmFpbCB0byB2ZXJpZnkgc2l6ZSBvZiBwcm9wZXJ0aWVzIG9mIHRoZSBDRkREOiIrYWN0dWFsRGVzYy5nZXROYW1lKCksCiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkUHJvcHMuc2l6ZSgpLCBhY3R1YWxQcm9wcy5zaXplKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGV4cGVjdGVkQ0ZERHMucmVtb3ZlKGFjdHVhbERlc2MuZ2V0TmFtZSgpKTsKICAgICAgICAgfQogICAgICAgICBpZihleHBlY3RlZENGRERzLnNpemUoKT4wKXsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbAppbmRleCAzOGFmMThjLi4yOTA1OTMyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCkBAIC05MSw4ICs5MSw4IEBACiAgICAgICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KLQk8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CisgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+CisgICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPHNlY3VyaXR5LWlkZW50aXR5PgogICAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eS8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAppbmRleCAxMTQ2YTVhLi4wYTdlMGRhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgICAgIFRlc3RJbnRlZ2VyUHJvcAogICAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICA8YWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgICAgICAyIAorICAgICAgICAgICAgMgogICAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHk+CiAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWc+CkBAIC04NSw3ICs4NSw3IEBACiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmVpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmVpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxnZW4tY2xhc3Nlcy8+CiAgICAgPC9lamI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCmluZGV4IGUyMmZhMTAuLjQwNzZlNDkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAKICAgICBwdWJsaWMgTWVzc2FnZUNoZWNrZXJFSkIoKSB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYmVhbiBjcmVhdGVkIik7CiAgICAgICAgIGhlbGRDb24gPSBudWxsOwpAQCAtNzAsMTEgKzcwLDExIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLmdldExvY2tPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIC8vVGVsbCB0aGUgcmVzb3VyY2UgYWRhcHRlciB0aGUgY2xpZW50IGlzIHJlYWR5IHRvIHJ1bgotICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnlBbGwoKTsgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeUFsbCgpOworCiAgICAgICAgICAgICAgICAgZGVidWcoIk5PVElGSUVELi4uIFNUQVJUIFdBSVRJTkciKTsKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgYmVpbmcgdG9sZCB0byByZWFkIGZyb20gdGhlIGRhdGFiYXNlCi0gICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTkzLDIyICs5MywyMiBAQAogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TWVzc2FnZUNvdW50KCkgewotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgIENvbm5lY3Rpb24gY29uID0gZ2V0RnJlc2hDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBpbnQgY291bnQxID0gZ2V0Q291bnQoY29uKTsKICAgICAgICAgICAgIGNvbi5jbG9zZSgpOwotICAgICAgICAgICAgCi0JICAgIC8qCisKKyAgICAgICAgLyoKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5nZXRMb2NrT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5KCk7CiAgICAgICAgICAgICB9Ci0JICAgICovCi0gICAgICAgICAgICAgICAgCisgICAgICAgICovCisKICAgICAgICAgICAgIHJldHVybiBjb3VudDE7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0ub3V0KTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JfQorICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIGludCBnZXRDb3VudChDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CkBAIC0xMzQsMTAgKzEzNCwxMCBAQAogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgdXNlciA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi91c2VyIik7CiAgICAgICAgICAgICBwYXNzd29yZCA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9wYXNzd29yZCIpOwotCSAgICBDb250cm9scyA9IChNeUFkbWluT2JqZWN0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL3Rlc3RBZG1pbiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExJTkcgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7Ci0JICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMRUQgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIiArIENvbnRyb2xzKTsKKyAgICAgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2Vpcy90ZXN0QWRtaW4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMSU5HIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOworICAgICAgICBDb250cm9scy5pbml0aWFsaXplKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTEVEIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIgKyBDb250cm9scyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTE3Miw3ICsxNzIsNyBAQAogICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoY29uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gY29uOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTE4Myw3ICsxODMsNyBAQAogICAgICAgICAgICAgdGhyb3cgZXgxOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGNsb3NlQ29ubmVjdGlvbihDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmIChoZWxkQ29uICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGFkMjA3Yi4uMGIzOGMxOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogZWpiLWphci54bWw9TUVUQS1JTkYvZWpiLWphci54bWwKIHN1bi1lamItamFyLnhtbD1NRVRBLUlORi9zdW4tZWpiLWphci54bWwKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDFhZWU0NGIuLmY4MDIxNDEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsNDUgKzI4LDQ1IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIC8vc3VwZXIoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KCkgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgY29ubmVjdG9yIDEuNSAiKwotCSAgICAgICAgICAgICAiY29udHJhY3RzLiIpOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKKwogICAgICAgICBTdHJpbmcgcmVzID0gIk5PVCBSVU4iOwotCWRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOworICAgIGRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOwogICAgICAgICBib29sZWFuIHBhc3MgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7Ci0JICAgIGludCB0ZXN0Q291bnQgPSAxOworICAgICAgICBpbnQgdGVzdENvdW50ID0gMTsKICAgICAgICAgICAgIHdoaWxlICghZG9uZSgpKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFkb25lKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlJ1bm5pbmcuLi4iKTsKICAgICAgICAgICAgICAgICAgICAgcGFzcyA9IGNoZWNrUmVzdWx0cyhleHBlY3RlZFJlc3VsdHMoKSk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJHb3QgZXhwZWN0ZWQgcmVzdWx0cyA9ICIgKyBwYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kbyBub3QgY29udGludWUgaWYgb25lIHRlc3QgZmFpbGVkCiAgICAgICAgICAgICAgICAgICAgIGlmICghcGFzcykgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gIlNPTUUgVEVTVFMgRkFJTEVEIjsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gIiArIHRlc3RDb3VudCwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gIiArIHRlc3RDb3VudCwgc3RhdC5QQVNTKTsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0JCXRlc3RDb3VudCArKzsKKyAgICAgICAgdGVzdENvdW50ICsrOwogICAgICAgICAgICAgfQogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNzYsMTQgKzc2LDE0IEBACiAgICAgICAgIH0KICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImNvbm5lY3RvcjE1Iik7CiAKLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkVYSVRJTkcuLi4gU1RBVFVTID0gIiArIHJlcyk7CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrUmVzdWx0cyhpbnQgbnVtKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgaW50IHJlc3VsdCA9IGNoZWNrZXIuZ2V0TWVzc2FnZUNvdW50KCk7CkBAIC05Miw3ICs5Miw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gZG9uZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gY2hlY2tlci5kb25lKCk7CkBAIC0xMDAsNyArMTAwLDcgQEAKIAogICAgIHByaXZhdGUgaW50IGV4cGVjdGVkUmVzdWx0cygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gY2hlY2tlci5leHBlY3RlZFJlc3VsdHMoKTsKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIG5vdGlmeUFuZFdhaXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgY2hlY2tlci5ub3RpZnlBbmRXYWl0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGE0OGFhYjEuLmIzNzMwNTAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCkBAIC0yOSw0MSArMjksNDEgQEAKIAogLyoqCiAgKi8KLXB1YmxpYyBjbGFzcyBNeU1lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sIAorcHVibGljIGNsYXNzIE15TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwKICAgICAgICAgTXlNZXNzYWdlTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjID0gbnVsbDsKICAgICBwcml2YXRlIENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yLCB3aGljaCBpcyBwdWJsaWMgYW5kIHRha2VzIG5vIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgTXlNZXNzYWdlQmVhbigpIHt9CiAKICAgICAvKioKLSAgICAgKiBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IAotICAgICAqIG5vdCBmaW5hbCBvciBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIAorICAgICAqIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQKKyAgICAgKiBub3QgZmluYWwgb3Igc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZAogICAgICAqIHdpdGggb25lIGFyZ3VtZW50IG9mIHR5cGUgamFrYXJ0YS5lamIuTWVzc2FnZURyaXZlbkNvbnRleHQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gbWRjICAgIHRoZSBjb250ZXh0IHRvIHNldAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYykgewotCXRoaXMubWRjID0gbWRjOworICAgIHRoaXMubWRjID0gbWRjOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIGVqYkNyZWF0ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKLSAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8gCisgICAgICogZWpiQ3JlYXRlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCisgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vCiAgICAgICogYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHsgfQogCiAgICAgLyoqCi0gICAgICogb25NZXNzYWdlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAorICAgICAqIG9uTWVzc2FnZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgogICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBvbmUgYXJndW1lbnQKICAgICAgKiBvZiB0eXBlIGpha2FydGEuam1zLk1lc3NhZ2UuCiAgICAgICoKLSAgICAgKiBDYXN0cyB0aGUgaW5jb21pbmcgTWVzc2FnZSB0byBhIFRleHRNZXNzYWdlIGFuZCBkaXNwbGF5cyAKKyAgICAgKiBDYXN0cyB0aGUgaW5jb21pbmcgTWVzc2FnZSB0byBhIFRleHRNZXNzYWdlIGFuZCBkaXNwbGF5cwogICAgICAqIHRoZSB0ZXh0LgogICAgICAqCiAgICAgICogQHBhcmFtIGluTWVzc2FnZSAgICB0aGUgaW5jb21pbmcgbWVzc2FnZQpAQCAtNzQsNyArNzQsNyBAQAogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiAoaW5NZXNzYWdlLmVuZHNXaXRoKCJXUklURSIpKSB7Ci0gICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJXUklURSIsIAorICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiV1JJVEUiLAogICAgICAgICAgICAgICAgICAgICAgICAgaW5NZXNzYWdlLnN1YnN0cmluZygwLCBpbk1lc3NhZ2UubGFzdEluZGV4T2YoIjoiKSkpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpbk1lc3NhZ2UuZW5kc1dpdGgoIkRFTEVURSIpKSB7CiAgICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJERUxFVEUiLApAQCAtOTAsMTAgKzkwLDEwIEBACiAgICAgICAgIH0KIAogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIGVqYlJlbW92ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKLSAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8gCisgICAgICogZWpiUmVtb3ZlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCisgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vCiAgICAgICogYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CkBAIC0xMDMsNjIgKzEwMyw2MiBAQAogCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGlkICAgID0gbWVzc2FnZS5zdWJzdHJpbmcoMCwgbWVzc2FnZS5pbmRleE9mKCI6IikpOwotICAgICAgICBTdHJpbmcgYm9keSAgPSBtZXNzYWdlLnN1YnN0cmluZyhtZXNzYWdlLmluZGV4T2YoIjoiKSsxKTsgCisgICAgICAgIFN0cmluZyBib2R5ICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKG1lc3NhZ2UuaW5kZXhPZigiOiIpKzEpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmICgiUkVBRCIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIlJlYWRpbmcgcm93IGZyb20gZGF0YWJhc2UuLi4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogCiAgICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgICAgZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gCisgICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPQogICAgICAgICAgICAgICAgICAgIlNFTEVDVCBpZCBmcm9tIG1lc3NhZ2VzIHdoZXJlIGlkID0gJ1FRJyI7CiAgICAgICAgICAgICAgICAgICBSZXN1bHRTZXQgcmVzdWx0cyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KTsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMubmV4dCgpOwotICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJRUSBoYXMgYmFsYW5jZSAiICsgCisgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5nZXRJbnQoImJhbGFuY2UiKSArICIgZG9sbGFycyIpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgc3RtdC5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVhZCBvbmUgYWNjb3VudFxuIik7CiAKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIldSSVRFIi5lcXVhbHMob3ApKSB7CiAKICAgICAgICAgICAgICAgICBkZWJ1ZygiSW5zZXJ0aW5nIG9uZSBtZXNzYWdlIGluIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgY3JlYXRlUm93KGlkLCBib2R5LCBkYkNvbm5lY3Rpb24pOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBvbmUgbWVzc2FnZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIkRFTEVURSIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIkRlbGV0aW5nIG9uZSBtZXNzYWdlIGZyb20gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVsZXRlUm93KGlkLCBkYkNvbm5lY3Rpb24pOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVsZXRlZCBvbmUgbWVzc2FnZVxuIik7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJERUxFVEVfQUxMIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgYWxsIG1lc3NhZ2VzIGZyb20gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CkBAIC0xNjksNyArMTY5LDcgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy91bnN1cHBvcnRlZCBvcAogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfWZpbmFsbHl7CiAgICAgICAgICAgICB0cnl7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uLmNsb3NlKCk7CkBAIC0xNzgsOSArMTc4LDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgY3JlYXRlUm93KFN0cmluZyBpZCwgU3RyaW5nIGJvZHksIAotICAgICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorCisgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVJvdyhTdHJpbmcgaWQsIFN0cmluZyBib2R5LAorICAgICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIC8vIENyZWF0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQpAQCAtMTk2LDkgKzE5Niw5IEBACiAgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlUm93KFN0cmluZyBpZCwgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVSb3coU3RyaW5nIGlkLCBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIERlbGV0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQogICAgICAgICBkZWJ1ZygiRGVsZXRlUm93IHdpdGggSUQgPSAiICsgaWQpOwogICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKQEAgLTIxMSw5ICsyMTEsOSBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUFsbChqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUFsbChqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIERlbGV0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQogICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gIkRFTEVURSBGUk9NIG1lc3NhZ2VzIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQppbmRleCA0NTQ2NzU0Li4wNWU1MjY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2FwcC9zcmMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCkBAIC00NCwxNyArNDQsMTcgQEAKIAogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgSU9FeGNlcHRpb257CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhpcyBpcyB0byB0ZXN0IGNvbm5lY3RvciAxLjUgIisKLQkgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKKyAgICAgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKIAogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogCiAgICAgICAgIFN0cmluZyByZXMgPSAiTk9UIFJVTiI7Ci0JZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CisgICAgZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CiAgICAgICAgIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmVzICA9ICJBTEwgVEVTVFMgUEFTU0VEIjsKLQkgICAgaW50IHRlc3RDb3VudCA9IDE7CisgICAgICAgIGludCB0ZXN0Q291bnQgPSAxOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIlN0YXJ0aW5nIHRoZSB0ZXN0Iik7CiAgICAgICAgICAgICBvdXQuZmx1c2goKTsKICAgICAgICAgICAgIHdoaWxlICghZG9uZShvdXQpKSB7CkBAIC03MCwxOCArNzAsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9ICJTT01FIFRFU1RTIEZBSUxFRCI7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIklEIENvbm5lY3RvciAxLjUgdGVzdCAtICIgKyB0ZXN0Q291bnQgKyAiIEZBSUwiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOkZBSUwiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIklEIENvbm5lY3RvciAxLjUgdGVzdCAtICIgKyB0ZXN0Q291bnQgKyAiIFBBU1MiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOlBBU1MiKTsKLQkJICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIkVORF9PRl9FWEVDVVRJT04iKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgb3V0LnByaW50bG4oIkVORF9PRl9FWEVDVVRJT04iKTsKLSAgICAgICAgICAgIAorCiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkltcG9ydGluZyB0cmFuc2FjdGlvbiB0ZXN0IGZhaWxlZC4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYnVpbGQucHJvcGVydGllcwppbmRleCAxN2IyM2M5Li4zYzk0MmM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii9jb25uZWN0b3IxNS9zZXJ2bGV0Ii8+CiA8cHJvcGVydHkgbmFtZT0iaHR0cDpob3N0IiB2YWx1ZT0ibG9jYWxob3N0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYnVpbGQueG1sCmluZGV4IDRmZjE1NTguLjcwNTI2NjQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYnVpbGQueG1sCkBAIC04MSwxNSArODEsMTUgQEAKIDwhLS0KICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWJjbGllbnQtY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9ImNvbm5lY3RvcjEuNSAoZWFyIGJhc2VkKSIvPgotCSAgICA8L2FudGNhbGw+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJjb25uZWN0b3IxLjUgKGVhciBiYXNlZCkiLz4KKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogLS0+CiAKIDwhLS0KICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImNvbm5lY3RvcjE1IiAvPgorICAgIDxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iY29ubmVjdG9yMTUiIC8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIC0tPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9NRVRBLUlORi9yYS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL01FVEEtSU5GL3JhLnhtbAppbmRleCBiNjAwNmVmLi4zMmI0NmUzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL01FVEEtSU5GL3JhLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL01FVEEtSU5GL3JhLnhtbApAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8aW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPgogICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXI+CiAgICAgICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXItdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lcgpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYy1jbGFzcz4KICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYz4KICAgICAgICAgICAgICAgICA8L21lc3NhZ2VsaXN0ZW5lcj4KLSAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4KICAgICAgICAgPC9pbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KICAgICAgICAgPGFkbWlub2JqZWN0PgogICAgICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L2FkbWlub2JqZWN0LWludGVyZmFjZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2J1aWxkLnhtbAppbmRleCBmZjhiY2MyLi44NDk2ZjYwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvYnVpbGQueG1sCkBAIC0zMCw4ICszMCw4IEBACiAKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImluaXQtY29tbW9uIiA+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KLQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgorICAgIDxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+CisgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGphciBqYXJmaWxlPSIuLi9nZW5lcmljLXJhLmphciIgYmFzZWRpcj0iY2xhc3NlcyIKICAgICAgICAgIGluY2x1ZGVzPSJjb25uZWN0b3IvKi5jbGFzcyIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKaW5kZXggNTU1MzNkNC4uZjU5YjJiMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBDb250cm9scyB7CiAgICAgcHVibGljIHN0YXRpYyBPYmplY3QgcmVhZHlMb2NrID0gbmV3IE9iamVjdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCmluZGV4IGNiZWQzNDkuLjU3MTlmMjcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBEZWxpdmVyeVdvcmsgaW1wbGVtZW50cyBXb3JrLCBSZXNvdXJjZUFkYXB0ZXJBc3NvY2lhdGlvbiB7CiAKQEAgLTM5LDcgKzM5LDcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4ga2VlcENvdW50OwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudGVyID0gMDsKICAgICBwcm90ZWN0ZWQgUmVzb3VyY2VBZGFwdGVyIHJhQmVhbjsKLSAgICAKKwogICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgU3RyaW5nIG9wKSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICB0aGlzLmtlZXBDb3VudCA9IGZhbHNlOwogICAgIH0KIAotICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgCisgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLAogICAgICAgICAgICAgU3RyaW5nIG9wLCBib29sZWFuIGtlZXBDb3VudCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTk0LDExICs5NCwxMSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvL2VwLmFmdGVyRGVsaXZlcnkoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC0xMDksMTQgKzEwOSwxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQppbmRleCAxMDBjYWNlLi5mYTkzZjYzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKICAgICB9CiAKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGZvcmdldChYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UuZm9yZ2V0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgfQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucHJlcGFyZTogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgICAgICByZXR1cm4gWEFSZXNvdXJjZS5YQV9PSzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgWGlkW10gcmVjb3ZlcihpbnQgZmxhZykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnJlY292ZXI6ICIgKyBmbGFnVG9TdHJpbmcoZmxhZykpOwogICAgICAgICByZXR1cm4gbnVsbDsKQEAgLTY2LDcgKzY2LDcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBzZXRUcmFuc2FjdGlvblRpbWVvdXQoaW50IHNlY29uZHMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzdGFydChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5zdGFydDogIiArIHhpZFRvU3RyaW5nKHhpZCkgKyAiLCIgKwogICAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQppbmRleCBiNWIwZjAyLi40YzljMDEyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogLyoqCiAgKiBjb2xsZWN0aW9uIG9mIG1lc3NhZ2VzLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgTWVzc2FnZXMgewogCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgU3RyaW5nIGNvbW1hbmQgID0gYXJnc1swXTsKICAgICAgICBTdHJpbmcgZGVzdE5hbWUgPSBhcmdzWzFdOwogICAgICAgIFN0cmluZyBtZXNzYWdlICA9IGFyZ3NbMl07Ci0gICAKKwogICAgICAgIGlmICghImFkZCIuZXF1YWxzKGNvbW1hbmQpKSB7CiAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCmluZGV4IDEwNDgzZWQuLjFkMDJjNjIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQpAQCAtMzgsMTMgKzM4LDEzIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKICAgICAgICAgaWYgKHJlc2V0Q29udHJvbC5lcXVhbHMoIkJFR0lOTklORyIpKSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLnJlYWR5TG9jayl7CiAgICAgICAgICAgICAgICAgQ29udHJvbHMuZG9uZT1mYWxzZTsKICAgICAgICAgICAgIH0KLQkgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKLQl9CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGRvbmUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKaW5kZXggM2JkZWRhZi4uOWUwZWI5MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE15V29yayBpbXBsZW1lbnRzIFdvcmssIFJlc291cmNlQWRhcHRlckFzc29jaWF0aW9uIHsKIApAQCAtMzksNyArMzksNyBAQAogICAgIHByaXZhdGUgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5OwogICAgIHByaXZhdGUgV29ya01hbmFnZXIgd207CiAgICAgcHJvdGVjdGVkIFJlc291cmNlQWRhcHRlciByYUJlYW47Ci0gICAgCisKICAgICBwdWJsaWMgTXlXb3JrKAogICAgICAgICAgICAgU3RyaW5nIG5hbWUsIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwgV29ya01hbmFnZXIgd20pIHsKICAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTsKQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgICAgICBNZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSk7CiAKICAgICAgICAgICAgICAgICAvKgpAQCAtODMsNyArODMsNyBAQAogICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtOTgsMTQgKzk4LDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKaW5kZXggODE4MmVmNS4uM2ZjZTU0NCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKQEAgLTI0LDkgKzI0LDkgQEAKICAqIHNvIHRoYXQgdGhlIGFwcCBzZXJ2ZXIgY2FuIGluc3RhbnRpYXRlIGFuZCBjb25maWd1cmUKICAqIGl0IGF0IHRoZSBydW50aW1lLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMgCitwdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMKICAgICBpbXBsZW1lbnRzIEFjdGl2YXRpb25TcGVjLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIFN0cmluZyBkZXN0aW5hdGlvbk5hbWU7CkBAIC00Myw3ICs0Myw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvbk5hbWUgKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvbk5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25OYW1lIChTdHJpbmcgbmFtZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25OYW1lKCkgY2FsbGVkLi4uIG5hbWUgPSAiICsgbmFtZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25OYW1lID0gbmFtZTsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uVHlwZSgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25UeXBlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uVHlwZSAoU3RyaW5nIHR5cGUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uVHlwZSAoKSBjYWxsZWQuLi4gdHlwZSA9ICIgKyB0eXBlKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvblR5cGU9IHR5cGU7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0UHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdFByb3A7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdFByb3AgKFN0cmluZyB0ZXN0UHJvcCkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdFByb3AgKCkgY2FsbGVkLi4uIHRlc3RQcm9wID0gIiArIHRlc3RQcm9wKTsKICAgICAgICAgdGhpcy50ZXN0UHJvcCA9IHRlc3RQcm9wOwpAQCAtNzAsNyArNzAsNyBAQAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldFRlc3RJbnRlZ2VyUHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdEludGVnZXJQcm9wOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RJbnRlZ2VyUHJvcCAoSW50ZWdlciB0ZXN0UHJvcDEpIHsKICAgICAgICAgZGVidWcoInNldFRlc3RJbnRlZ2VyUHJvcCAoKSBjYWxsZWQuLi4gdGVzdEludGVnZXJQcm9wID0gIiArIHRlc3RQcm9wMSk7CiAgICAgICAgIHRoaXMudGVzdEludGVnZXJQcm9wID0gdGVzdFByb3AxOwpAQCAtOTQsNyArOTQsNyBAQAogCiAgICAgICB9CiAKLSAgIH0gCisgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZGVidWcgKFN0cmluZyBtZXNzYWdlKQogICAgIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCmluZGV4IDdjMjdlOTYuLjdiMGJiYmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQpAQCAtNDAsOSArNDAsOSBAQAogLyoqCiAgKiBUaGlzIGlzIGEgc2FtcGxlIHJlc291cmNlIGFkYXB0ZXIKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwotcHVibGljIGNsYXNzIFNpbXBsZVJlc291cmNlQWRhcHRlckltcGwgCitwdWJsaWMgY2xhc3MgU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbAogaW1wbGVtZW50cyBSZXNvdXJjZUFkYXB0ZXIsIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByaXZhdGUgQm9vdHN0cmFwQ29udGV4dCBjdHg7CkBAIC01OCw3ICs1OCw3IEBACiAKICAgICBwdWJsaWMgdm9pZAogICAgIHN0YXJ0KEJvb3RzdHJhcENvbnRleHQgY3R4KSB0aHJvd3MgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCIwMDEuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogCiAgICAgICAgIHRoaXMuY3R4ID0gY3R4OwpAQCAtNjgsMTIgKzY4LDEyIEBACiAKICAgICAgICAgLy90ZXN0aW5nIGNyZWF0IHRpbWVyCiAgICAgICAgIFRpbWVyIHRpbWVyID0gbnVsbDsKLQkgIHRyeXsKLQkgICAgICB0aW1lciA9IGN0eC5jcmVhdGVUaW1lcigpOwotCSAgfSBjYXRjaChVbmF2YWlsYWJsZUV4Y2VwdGlvbiB1ZSkgewotCSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IiKTsKLQkgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIGZvcm0gYm9vdHN0cmFwIik7Ci0JICB9CisgICAgICB0cnl7CisgICAgICAgICAgdGltZXIgPSBjdHguY3JlYXRlVGltZXIoKTsKKyAgICAgIH0gY2F0Y2goVW5hdmFpbGFibGVFeGNlcHRpb24gdWUpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIik7CisgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJFcnJvciBmb3JtIGJvb3RzdHJhcCIpOworICAgICAgfQogICAgICAgICBkZWJ1ZygiMDA0LiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKIAogLyoKQEAgLTkwLDE2ICs5MCwxNiBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBleCA9ICIgKyBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3hhLnJvbGxiYWNrKHhpZDEpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAqLwogLyoKICAgICAgICAgICB0cnkgewotICAgICAgICAgIAorCiAgICAgICAgICAgWEFUZXJtaW5hdG9yIHhhID0gY3R4LmdldFhBVGVybWluYXRvcigpOwotICAgICAgICAgIAorCiAgICAgICAgICAgWGlkIHhpZDEgPSBuZXcgWElEKCk7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgWElEMSA9ICIgKyB4aWQxKTsKLSAgICAgICAgICAKKwogICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHQgZWMgPSBuZXcgRXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgIGVjLnNldFhpZCh4aWQxKTsKICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKQEAgLTEwOSwxNCArMTA5LDE0IEBACiAgICAgICAgICAgd20uZG9Xb3JrKG91dHcsIDEqMTAwMCwgZWMsIG51bGwpOwogICAgICAgICAgIHhhLmNvbW1pdCh4aWQxLCB0cnVlKTsKICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAKKwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIGV4ID0gIiArIGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgeGEucm9sbGJhY2soeGlkMSk7CiAgICAgICAgICAgfQotICAgICAgICAgIAorCiAgICAgICAgICAgWGlkIHhpZDIgPSBuZXcgWElEKCk7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgWElEMiA9ICIgKyB4aWQyKTsKLSAgICAgICAgICAKKwogICAgICAgICAgIGVjID0gbmV3IEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICBlYy5zZXRYaWQoeGlkMik7CiAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICB9CiAKLSAgICAgICAgCisKICAgICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCAzOyBpKyspIHsKICAgICAgICAgICBUZXN0V01Xb3JrIHcgPSBuZXcgVGVzdFdNV29yayhpLCBmYWxzZSk7CiAgICAgICAgICAgdHJ5IHsKQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRkFJTDogQ0FVR0hUIGV4Y2VwdGlvbiA6IGkgPSAiICsgaSk7CiAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgfSAKKyAgICAgICAgICB9CiAgICAgICAgICAgfQogCiAgICAgICAgICAgZm9yIChpbnQgaSA9IDMgOyBpIDwgNjsgaSsrKSB7CkBAIC0yMjQsMTMgKzIyNCwxMyBAQAogCiAgICAgcHVibGljIHZvaWQKICAgICBlbmRwb2ludERlYWN0aXZhdGlvbiAoCi0gICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGVuZHBvaW50RmFjdG9yeSwgCisgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGVuZHBvaW50RmFjdG9yeSwKICAgICAgICAgICAgIEFjdGl2YXRpb25TcGVjIHNwZWMpIHsKICAgICAgICAgZGVidWcgKCJlbmRwb2ludERlYWN0aXZhdGlvbiBjYWxsZWQuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgKChXb3JrRGlzcGF0Y2hlcikgd29yaykuc3RvcCgpOwogICAgIH0KLSAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3ROYW1lKCkgewogICAgICAgICByZXR1cm4gdGVzdE5hbWU7CiAgICAgfQpAQCAtMjQ2LDcgKzI0Niw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsXSA9PT4gIiArIG1lc3NhZ2UpOwogICAgIH0KIAotICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykgCisgICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKQogICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQppbmRleCBiYjA1NTM0Li5kZTkzYmMxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBUZXN0V01Xb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTQyLDggKzQyLDggQEAKICAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSkgewogICAgICAgICB0aGlzKGlkLCBpc1JvZ3VlLCBmYWxzZSwgbnVsbCk7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLCAKKworICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLAogICAgICAgICAgICAgYm9vbGVhbiBkb05lc3QsIEV4ZWN1dGlvbkNvbnRleHQgY3R4KSB7CiAgICAgICAgIHRoaXMuaWQgPSBpZDsKICAgICAgICAgdGhpcy5pc1JvZ3VlID0gaXNSb2d1ZTsKQEAgLTc3LDEwICs3NywxMCBAQAogICAgICAgICAgICAgfSBjYXRjaCAoV29ya0V4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIGlmIChleC5nZXRFcnJvckNvZGUoKS5lcXVhbHMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya0V4Y2VwdGlvbi5UWF9DT05DVVJSRU5UX1dPUktfRElTQUxMT1dFRCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQVNTOiBDQVVHSFQgRVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKICAgICAgICAgICAgICAgICB3bS5kb1dvcmsobmVzdGVkV29yaywgMSoxMDAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICJGQUlMOiBDQVVHSFQgVU5FWFBFQ1RFRCA9ICIgKyBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvVjNXb3JrRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1YzV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCA4YWRmM2NjLi40YjQzNzgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvVjNXb3JrRGlzcGF0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9WM1dvcmtEaXNwYXRjaGVyLmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChuZXcgRmFrZVhBUmVzb3VyY2UoKSk7CiAgICAgICAgICAgICBpbnQgbnVtT2ZNZXNzYWdlcyA9IDE7CkBAIC03Miw3ICs3Miw3IEBACiAgICAgICAgICAgICBkZWJ1ZygiVjNXb3JrRGlzcGF0Y2hlciBjYWxsaW5nIERPTkUoKSIpOwogICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgZGVidWcoIlYzV29ya0Rpc3BhdGNoZXIgZmluaXNoZWQgY2FsbGluZyBET05FKCkiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCmluZGV4IDY0YjcxYzQuLjc2MmUwM2UgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgV29ya0Rpc3BhdGNoZXIgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtNDQsMTEgKzQ0LDExIEBACiAgICAgcHJvdGVjdGVkIEFjdGl2YXRpb25TcGVjIHNwZWM7CiAgICAgcHJvdGVjdGVkIFdvcmtNYW5hZ2VyIHdtOwogICAgIHByb3RlY3RlZCBYQVRlcm1pbmF0b3IgeGE7Ci0gICAgCisKICAgICBwdWJsaWMgV29ya0Rpc3BhdGNoZXIoCiAgICAgICAgICAgICBTdHJpbmcgaWQsCiAgICAgICAgICAgICBCb290c3RyYXBDb250ZXh0IGN0eCwKLSAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwgCisgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIHRoaXMuaWQgICAgICA9IGlkOwogICAgICAgICB0aGlzLmN0eCAgICAgPSBjdHg7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICBkZWJ1ZygiV0FJVC4uLiIpOwpAQCAtODMsMjYgKzgzLDI2IEBACiAgICAgICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKTsKIAogICAgICAgICAgICAgICAgIGlmICghZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOyAKKyAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOwogICAgICAgICAgICAgICAgICAgICAvL3dtLmRvV29yayhkLCAwLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobmV3IEZha2VYQVJlc291cmNlKCkpOwogICAgICAgICAgICAgICAgICAgICBpbnQgbnVtT2ZNZXNzYWdlcyA9IDU7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vaW1wb3J0aW5nIHRyYW5zYWN0aW9uCiAKICAgICAgICAgICAgICAgICAgICAgLy93cml0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgRXhlY3V0aW9uQ29udGV4dCBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKIAotICAgICAgICAgICAgICAgICAgICBEZWxpdmVyeVdvcmsgdyA9IAorICAgICAgICAgICAgICAgICAgICBEZWxpdmVyeVdvcmsgdyA9CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiV1JJVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTExMCw3ICsxMTAsNyBAQAogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiRE9ORSBXUklURSBUTyBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSBudW1PZk1lc3NhZ2VzOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL3JvbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJERUxFVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTE1MCw3ICsxNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiREVMRVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xOTUsNyArMTk1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKFhBUmVzb3VyY2UuWEFfT0sgPT0geGEucHJlcGFyZShlYy5nZXRYaWQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlhBIFBSRVBBUkUvQ09NTUlULiBET05FIFdSSVRFIFRPIERCICIpOwpAQCAtMjA3LDE5ICsyMDcsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IDM7CiAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUgYWxsLgogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIDEsICJERUxFVEVfQUxMIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJET05FIERFTEVURSBBTEwgRlJPTSBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAwOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI0Niw3ICsyNDYsNyBAQAogICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTI2MSwxNCArMjYxLDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTI5MSwxMyArMjkxLDEzIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL1NsZWVwIGZvciA1IHNlY29uZHMKICAgICAgICAgICAgIC8vVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCg1KjEwMDApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICAvL05vdGlmeSB0aGUgY2xpZW50IHRvIGNoZWNrIHRoZSByZXN1bHRzCi0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeUFsbCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5QWxsKCk7CiAKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgcmVzdWx0cyBhcmUgdmVyaWZpZWQgYnkgdGhlIGNsaWVudAotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7CiAKICAgICAgICAgICAgICAgICBpZiAoc3RvcCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKaW5kZXggNzdkYmYzNC4uNmJkOWU1NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQpAQCAtMzYsOCArMzYsOCBAQAogICAgIHB1YmxpYyBpbnQgYnJhbmNoUXVhbGlmaWVyOwogICAgIHB1YmxpYyBpbnQgZ2xvYmFsVHhJRDsKIAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OyAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsgCisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7CisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7CiAKICAgICBwdWJsaWMgWElEKCkgewogICAgICAgICBpbnQgZm9vID0gSUQrKzsKQEAgLTU1LDEwICs1NSwxMCBAQAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICAgLy8gSXQgY2FuJ3QgYmUgZXF1YWwKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBvdGhlciA9IChYSUQpbzsgICAgICAgICAgICAgICAgICAgLy8gVGhlIG90aGVyIFhJRCwgbm93IHByb3Blcmx5IGNhc3QKLSAgICAgICAgCi0gICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElEIAorCisgICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElECiAgICAgICAgICAgICAgICAgJiYgdGhpcy5icmFuY2hRdWFsaWZpZXIgPT0gb3RoZXIuYnJhbmNoUXVhbGlmaWVyCiAgICAgICAgICAgICAgICAgJiYgdGhpcy5nbG9iYWxUeElEID09IG90aGVyLmdsb2JhbFR4SUQpIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTgsNyArOTgsNyBAQAogICAgICAgICAgICAgICAgICJmb3JtYXRJRCgiICAgICArIGZvcm1hdElEICAgICArICIpLCAiICsKICAgICAgICAgICAgICAgICAiYnJhbmNoUXVhbGlmaWVyICgiICsgYnJhbmNoUXVhbGlmaWVyICsgIiksICIgKwogICAgICAgICAgICAgICAgICJnbG9iYWxUeElEKCIgKyBnbG9iYWxUeElEICsgIil9Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKaW5kZXggMDVhMDY4Ny4uYjNiMzE5YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCkBAIC03Myw0ICs3Myw0IEBACiAgICAgPGpkYmMtcmVzb3VyY2UgZW5hYmxlZD0idHJ1ZSIgam5kaS1uYW1lPSJqYXZhOmFwcC9qZGJjL1hBUG9pbnRiYXNlIiBvYmplY3QtdHlwZT0idXNlciIgcG9vbC1uYW1lPSJqYXZhOmFwcC9qZGJjLXBvaW50YmFzZS1wb29sMSIvPgogCiAKLTwvcmVzb3VyY2VzPiAKKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWdmLXJlc291cmNlcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9NRVRBLUlORi9lamItZ2YtcmVzb3VyY2VzLnhtbAppbmRleCAxYjNmOTVlLi5kZGNlNzRkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9NRVRBLUlORi9lamItZ2YtcmVzb3VyY2VzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9NRVRBLUlORi9lamItZ2YtcmVzb3VyY2VzLnhtbApAQCAtNTMsNCArNTMsNCBAQAogICAgIDwvamRiYy1jb25uZWN0aW9uLXBvb2w+CiAKICAgICA8amRiYy1yZXNvdXJjZSBlbmFibGVkPSJ0cnVlIiBqbmRpLW5hbWU9ImphdmE6bW9kdWxlL2pkYmMvZWpiLWxldmVsLWRzIiBvYmplY3QtdHlwZT0idXNlciIgcG9vbC1uYW1lPSJqYXZhOm1vZHVsZS9qZGJjL2VqYi1sZXZlbC1wb29sIi8+Ci08L3Jlc291cmNlcz4gCis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKaW5kZXggNTgyYjc4MS4uMTJmYjZkMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKQEAgLTExNCw4ICsxMTQsOCBAQAogICAgICAgICA8cmVzLXNoYXJpbmctc2NvcGU+U2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+Ci0JPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgorICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgorICAgIDxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxzZWN1cml0eS1pZGVudGl0eT4KICAgICAgICAgPHVzZS1jYWxsZXItaWRlbnRpdHkvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmluZGV4IGU0NjU3N2YuLmNiOGNkMjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgICAgIFRlc3RJbnRlZ2VyUHJvcAogICAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICA8YWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgICAgICAyIAorICAgICAgICAgICAgMgogICAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHk+CiAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWc+CkBAIC04NSw3ICs4NSw3IEBACiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmphdmE6YXBwL2Vpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmphdmE6YXBwL2Vpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxnZW4tY2xhc3Nlcy8+CiAgICAgPC9lamI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9NRVRBLUlORi93ZWItZ2YtcmVzb3VyY2VzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL01FVEEtSU5GL3dlYi1nZi1yZXNvdXJjZXMueG1sCmluZGV4IDgxNmQ1YTkuLmM2NThhMDcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL01FVEEtSU5GL3dlYi1nZi1yZXNvdXJjZXMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL01FVEEtSU5GL3dlYi1nZi1yZXNvdXJjZXMueG1sCkBAIC01Myw0ICs1Myw0IEBACiAgICAgPC9qZGJjLWNvbm5lY3Rpb24tcG9vbD4KIAogICAgIDxqZGJjLXJlc291cmNlIGVuYWJsZWQ9InRydWUiIGpuZGktbmFtZT0iamF2YTptb2R1bGUvamRiYy93ZWItbGV2ZWwtZHMiIG9iamVjdC10eXBlPSJ1c2VyIiBwb29sLW5hbWU9ImphdmE6bW9kdWxlL2pkYmMvd2ViLWxldmVsLXBvb2wiLz4KLTwvcmVzb3VyY2VzPiAKKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKaW5kZXggYTgzYzkyNC4uZThlZWRiMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAKICAgICBwdWJsaWMgTWVzc2FnZUNoZWNrZXJFSkIoKSB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYmVhbiBjcmVhdGVkIik7CiAgICAgICAgIGhlbGRDb24gPSBudWxsOwpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtYW8uZ2V0UkEoKSBpcyBudWxsIik7CiAgICAgICAgfQogICAgIH1jYXRjaChFeGNlcHRpb24gZSl7Ci0JZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgIH0KICAgICAgIHJldHVybiBwYXNzOwogICAgIH0KQEAgLTg2LDExICs4NiwxMSBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5nZXRMb2NrT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICAvL1RlbGwgdGhlIHJlc291cmNlIGFkYXB0ZXIgdGhlIGNsaWVudCBpcyByZWFkeSB0byBydW4KLSAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5QWxsKCk7IAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnlBbGwoKTsKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJOT1RJRklFRC4uLiBTVEFSVCBXQUlUSU5HIik7CiAgICAgICAgICAgICAgICAgLy9XYWl0IHVudGlsIGJlaW5nIHRvbGQgdG8gcmVhZCBmcm9tIHRoZSBkYXRhYmFzZQotICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS53YWl0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0xMDksMjIgKzEwOSwyMiBAQAogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TWVzc2FnZUNvdW50KCkgewotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgIENvbm5lY3Rpb24gY29uID0gZ2V0RnJlc2hDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBpbnQgY291bnQxID0gZ2V0Q291bnQoY29uKTsKICAgICAgICAgICAgIGNvbi5jbG9zZSgpOwotICAgICAgICAgICAgCi0JICAgIC8qCisKKyAgICAgICAgLyoKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5nZXRMb2NrT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5KCk7CiAgICAgICAgICAgICB9Ci0JICAgICovCi0gICAgICAgICAgICAgICAgCisgICAgICAgICovCisKICAgICAgICAgICAgIHJldHVybiBjb3VudDE7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0ub3V0KTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JfQorICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIGludCBnZXRDb3VudChDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CkBAIC0xNTAsMTAgKzE1MCwxMCBAQAogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgdXNlciA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi91c2VyIik7CiAgICAgICAgICAgICBwYXNzd29yZCA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9wYXNzd29yZCIpOwotCSAgICBDb250cm9scyA9IChNeUFkbWluT2JqZWN0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL3Rlc3RBZG1pbiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExJTkcgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7Ci0JICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMRUQgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIiArIENvbnRyb2xzKTsKKyAgICAgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2Vpcy90ZXN0QWRtaW4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMSU5HIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOworICAgICAgICBDb250cm9scy5pbml0aWFsaXplKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTEVEIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIgKyBDb250cm9scyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTE4OCw3ICsxODgsNyBAQAogICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoY29uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gY29uOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTE5OSw3ICsxOTksNyBAQAogICAgICAgICAgICAgdGhyb3cgZXgxOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGNsb3NlQ29ubmVjdGlvbihDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmIChoZWxkQ29uICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGRhZDIwN2IuLjBiMzhjMTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiBlamItamFyLnhtbD1NRVRBLUlORi9lamItamFyLnhtbAogc3VuLWVqYi1qYXIueG1sPU1FVEEtSU5GL3N1bi1lamItamFyLnhtbApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDIxZDQ0ODguLmM3NDMwZDYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDIyICsyOCwyMiBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgICAgICAvL3N1cGVyKGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdCgpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGhpcyBpcyB0byB0ZXN0IGNvbm5lY3RvciAxLjUgIisKLQkgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICJjb250cmFjdHMuIik7CisKICAgICAgICAgU3RyaW5nIHJlcyA9ICJOT1QgUlVOIjsKLQlkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKKyAgICBkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKICAgICAgICAgYm9vbGVhbiBwYXNzID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAKQEAgLTU0LDI2ICs1NCwyNiBAQAogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXMgID0gIkFMTCBURVNUUyBQQVNTRUQiOwotCSAgICBpbnQgdGVzdENvdW50ID0gMTsKKyAgICAgICAgaW50IHRlc3RDb3VudCA9IDE7CiAgICAgICAgICAgICB3aGlsZSAoIWRvbmUoKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwogICAgICAgICAgICAgICAgIGlmICghZG9uZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJSdW5uaW5nLi4uIik7CiAgICAgICAgICAgICAgICAgICAgIHBhc3MgPSBjaGVja1Jlc3VsdHMoZXhwZWN0ZWRSZXN1bHRzKCkpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR290IGV4cGVjdGVkIHJlc3VsdHMgPSAiICsgcGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZG8gbm90IGNvbnRpbnVlIGlmIG9uZSB0ZXN0IGZhaWxlZAogICAgICAgICAgICAgICAgICAgICBpZiAoIXBhc3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9ICJTT01FIFRFU1RTIEZBSUxFRCI7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiSUQgQ29ubmVjdG9yIDEuNiB0ZXN0IC0gIiArIHRlc3RDb3VudCwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJJRCBDb25uZWN0b3IgMS42IHRlc3QgLSAiICsgdGVzdENvdW50LCBzdGF0LlBBU1MpOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLQkJdGVzdENvdW50ICsrOworICAgICAgICB0ZXN0Q291bnQgKys7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC04MywxNCArODMsMTQgQEAKICAgICAgICAgfQogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiY29ubmVjdG9yMS42SUQiKTsKIAotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiRVhJVElORy4uLiBTVEFUVVMgPSAiICsgcmVzKTsKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tSZXN1bHRzKGludCBudW0pIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICBpbnQgcmVzdWx0ID0gY2hlY2tlci5nZXRNZXNzYWdlQ291bnQoKTsKQEAgLTk5LDcgKzk5LDcgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBkb25lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIHJldHVybiBjaGVja2VyLmRvbmUoKTsKQEAgLTEwNyw3ICsxMDcsNyBAQAogCiAgICAgcHJpdmF0ZSBpbnQgZXhwZWN0ZWRSZXN1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIHJldHVybiBjaGVja2VyLmV4cGVjdGVkUmVzdWx0cygpOwpAQCAtMTE1LDcgKzExNSw3IEBACiAKICAgICBwcml2YXRlIHZvaWQgbm90aWZ5QW5kV2FpdCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICBjaGVja2VyLm5vdGlmeUFuZFdhaXQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCmluZGV4IDE5YmZkYjQuLjI4YTU3NGMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQpAQCAtMzEsNDEgKzMxLDQxIEBACiAKIC8qKgogICovCi1wdWJsaWMgY2xhc3MgTXlNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLCAKK3B1YmxpYyBjbGFzcyBNeU1lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sCiAgICAgICAgIE15TWVzc2FnZUxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgdHJhbnNpZW50IE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYyA9IG51bGw7CiAgICAgcHJpdmF0ZSBDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3Rvciwgd2hpY2ggaXMgcHVibGljIGFuZCB0YWtlcyBubyBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIE15TWVzc2FnZUJlYW4oKSB7fQogCiAgICAgLyoqCi0gICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCAKLSAgICAgKiBub3QgZmluYWwgb3Igc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCAKKyAgICAgKiBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0CisgICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQKICAgICAgKiB3aXRoIG9uZSBhcmd1bWVudCBvZiB0eXBlIGpha2FydGEuZWpiLk1lc3NhZ2VEcml2ZW5Db250ZXh0LgogICAgICAqCiAgICAgICogQHBhcmFtIG1kYyAgICB0aGUgY29udGV4dCB0byBzZXQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dChNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMpIHsKLQl0aGlzLm1kYyA9IG1kYzsKKyAgICB0aGlzLm1kYyA9IG1kYzsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCi0gICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vIAorICAgICAqIGVqYkNyZWF0ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgorICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubwogICAgICAqIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7IH0KIAogICAgIC8qKgotICAgICAqIG9uTWVzc2FnZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKKyAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKICAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggb25lIGFyZ3VtZW50CiAgICAgICogb2YgdHlwZSBqYWthcnRhLmptcy5NZXNzYWdlLgogICAgICAqCi0gICAgICogQ2FzdHMgdGhlIGluY29taW5nIE1lc3NhZ2UgdG8gYSBUZXh0TWVzc2FnZSBhbmQgZGlzcGxheXMgCisgICAgICogQ2FzdHMgdGhlIGluY29taW5nIE1lc3NhZ2UgdG8gYSBUZXh0TWVzc2FnZSBhbmQgZGlzcGxheXMKICAgICAgKiB0aGUgdGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBpbk1lc3NhZ2UgICAgdGhlIGluY29taW5nIG1lc3NhZ2UKQEAgLTc2LDcgKzc2LDcgQEAKICAgICAgICAgLy9sb2coIm9uTWVzc2FnZTo6IGdldENhbGxlclByaW5jaXBhbCA6ICIgKyBtZGMuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkpOwogICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigib25NZXNzYWdlIDogVGhyZWFkSUQgOiAiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkpOwogICAgICAgICBpZihtZGMuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkgIT0gbnVsbCl7Ci0gICAgICAgIAlsb2coIm9uTWVzc2FnZTo6IGdldENhbGxlclByaW5jaXBhbCBOYW1lIDogIiArIG1kYy5nZXRDYWxsZXJQcmluY2lwYWwoKS5nZXROYW1lKCkpOworICAgICAgICAgICAgbG9nKCJvbk1lc3NhZ2U6OiBnZXRDYWxsZXJQcmluY2lwYWwgTmFtZSA6ICIgKyBtZGMuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkuZ2V0TmFtZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGxvZygib25NZXNzYWdlIDogaXNDYWxsZXJJblJvbGUoJ2phZ2FkaXNoJykgOiAiICsgbWRjLmlzQ2FsbGVySW5Sb2xlKCJqYWdhZGlzaCIpKTsKQEAgLTg1LDcgKzg1LDcgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiV1JJVEUiKSkgewotICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiV1JJVEUiLCAKKyAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGluTWVzc2FnZS5zdWJzdHJpbmcoMCwgaW5NZXNzYWdlLmxhc3RJbmRleE9mKCI6IikpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5NZXNzYWdlLmVuZHNXaXRoKCJERUxFVEUiKSkgewogICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiREVMRVRFIiwKQEAgLTk5LDEwICs5OSwxMCBAQAogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBlamJSZW1vdmUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCi0gICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vIAorICAgICAqIGVqYlJlbW92ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgorICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubwogICAgICAqIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQpAQCAtMTEyLDYyICsxMTIsNjIgQEAKIAogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIFN0cmluZyBpZCAgICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKDAsIG1lc3NhZ2UuaW5kZXhPZigiOiIpKTsKLSAgICAgICAgU3RyaW5nIGJvZHkgID0gbWVzc2FnZS5zdWJzdHJpbmcobWVzc2FnZS5pbmRleE9mKCI6IikrMSk7IAorICAgICAgICBTdHJpbmcgYm9keSAgPSBtZXNzYWdlLnN1YnN0cmluZyhtZXNzYWdlLmluZGV4T2YoIjoiKSsxKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoIlJFQUQiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJSZWFkaW5nIHJvdyBmcm9tIGRhdGFiYXNlLi4uIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KIAogICAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9IAorICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0KICAgICAgICAgICAgICAgICAgICJTRUxFQ1QgaWQgZnJvbSBtZXNzYWdlcyB3aGVyZSBpZCA9ICdRUSciOwogICAgICAgICAgICAgICAgICAgUmVzdWx0U2V0IHJlc3VsdHMgPSBzdG10LmV4ZWN1dGVRdWVyeShxdWVyeSk7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArIAorICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJRUSBoYXMgYmFsYW5jZSAiICsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuZ2V0SW50KCJiYWxhbmNlIikgKyAiIGRvbGxhcnMiKTsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgIHN0bXQuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlYWQgb25lIGFjY291bnRcbiIpOwogCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJXUklURSIuZXF1YWxzKG9wKSkgewogCiAgICAgICAgICAgICAgICAgZGVidWcoIkluc2VydGluZyBvbmUgbWVzc2FnZSBpbiB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGNyZWF0ZVJvdyhpZCwgYm9keSwgZGJDb25uZWN0aW9uKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgb25lIG1lc3NhZ2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJERUxFVEUiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBvbmUgbWVzc2FnZSBmcm9tIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlbGV0ZVJvdyhpZCwgZGJDb25uZWN0aW9uKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlbGV0ZWQgb25lIG1lc3NhZ2VcbiIpOwogICAgICAgICAgICAgfSBlbHNlIGlmICgiREVMRVRFX0FMTCIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIkRlbGV0aW5nIGFsbCBtZXNzYWdlcyBmcm9tIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwpAQCAtMTc4LDcgKzE3OCw3IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vdW5zdXBwb3J0ZWQgb3AKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH1maW5hbGx5ewogICAgICAgICAgICAgdHJ5ewogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbi5jbG9zZSgpOwpAQCAtMTg3LDkgKzE4Nyw5IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVJvdyhTdHJpbmcgaWQsIFN0cmluZyBib2R5LCAKLSAgICAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKworICAgIHByaXZhdGUgdm9pZCBjcmVhdGVSb3coU3RyaW5nIGlkLCBTdHJpbmcgYm9keSwKKyAgICAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICAvLyBDcmVhdGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKQEAgLTIwNSw5ICsyMDUsOSBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvdyhTdHJpbmcgaWQsIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlUm93KFN0cmluZyBpZCwgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICAvLyBEZWxldGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKICAgICAgICAgZGVidWcoIkRlbGV0ZVJvdyB3aXRoIElEID0gIiArIGlkKTsKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7CkBAIC0yMjAsOSArMjIwLDkgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVBbGwoamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVBbGwoamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICAvLyBEZWxldGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgIFN0cmluZyBxdWVyeSA9ICJERUxFVEUgRlJPTSBtZXNzYWdlcyI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCmluZGV4IGJlMzdhNGEuLmExYzYyZjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCkBAIC00NCwxNyArNDQsMTcgQEAKIAogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgSU9FeGNlcHRpb257CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhpcyBpcyB0byB0ZXN0IGNvbm5lY3RvciAxLjYgIisKLQkgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKKyAgICAgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKIAogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogCiAgICAgICAgIFN0cmluZyByZXMgPSAiTk9UIFJVTiI7Ci0JZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CisgICAgZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CiAgICAgICAgIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmVzICA9ICJBTEwgVEVTVFMgUEFTU0VEIjsKLQkgICAgaW50IHRlc3RDb3VudCA9IDE7CisgICAgICAgIGludCB0ZXN0Q291bnQgPSAxOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIlN0YXJ0aW5nIHRoZSB0ZXN0Iik7CiAgICAgICAgICAgICBvdXQuZmx1c2goKTsKIApAQCAtODEsMTggKzgxLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSAiU09NRSBURVNUUyBGQUlMRUQiOwogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJRCBDb25uZWN0b3IgMS42IHRlc3QgLSAiICsgdGVzdENvdW50ICsgIiBGQUlMIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpGQUlMIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJRCBDb25uZWN0b3IgMS42IHRlc3QgLSAiICsgdGVzdENvdW50ICsgIiBQQVNTIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7Ci0JCSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJFTkRfT0ZfRVhFQ1VUSU9OIik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG91dC5wcmludGxuKCJFTkRfT0ZfRVhFQ1VUSU9OIik7Ci0gICAgICAgICAgICAKKwogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbXBvcnRpbmcgdHJhbnNhY3Rpb24gdGVzdCBmYWlsZWQuIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDIwN2E0ODYuLjA4M2IyNjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii9jb25uZWN0b3IxNi9zZXJ2bGV0Ii8+CiA8cHJvcGVydHkgbmFtZT0iaHR0cDpob3N0IiB2YWx1ZT0ibG9jYWxob3N0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKaW5kZXggYTkzNDlmYy4uMGZjYWJkZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbApAQCAtNDgsNCArNDgsNCBAQAogICAgICAgPHByaW5jaXBhbC1tYXAgZWlzLXByaW5jaXBhbD0iZWlzLXByYXNhdGgiIG1hcHBlZC1wcmluY2lwYWw9InByYXNhdGgiIC8+CiAgICAgICA8cHJpbmNpcGFsLW1hcCBlaXMtcHJpbmNpcGFsPSJlaXMtamFnYWRpc2giIG1hcHBlZC1wcmluY2lwYWw9ImphZ2FkaXNoIiAvPgogICAgIDwvd29yay1zZWN1cml0eS1tYXA+Ci08L3Jlc291cmNlcz4gCis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9NRVRBLUlORi9yYS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvTUVUQS1JTkYvcmEueG1sCmluZGV4IDk3ODFlMTYuLjNjY2YyOTYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9NRVRBLUlORi9yYS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL01FVEEtSU5GL3JhLnhtbApAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHktY29uZmlkZW50aWFsPgogICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPGluYm91bmQtcmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4KICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyPgogICAgICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyLXR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWMtY2xhc3M+CiAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWM+CiAgICAgICAgICAgICAgICAgPC9tZXNzYWdlbGlzdGVuZXI+Ci0gICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgIDwvaW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+CiAgICAgICAgIDxhZG1pbm9iamVjdD4KICAgICAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvYnVpbGQueG1sCmluZGV4IGVkMjk4ODkuLjg1Mjg4MTggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvYnVpbGQueG1sCkBAIC0zMCw4ICszMCw4IEBACiAKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImluaXQtY29tbW9uIiA+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KLQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgorICAgIDxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+CisgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGphciBqYXJmaWxlPSIuLi9nZW5lcmljLXJhLmphciIgYmFzZWRpcj0iY2xhc3NlcyIKICAgICAgICAgIGluY2x1ZGVzPSJjb25uZWN0b3IvKi5jbGFzcyIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCmluZGV4IDU1NTMzZDQuLmY1OWIyYjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIENvbnRyb2xzIHsKICAgICBwdWJsaWMgc3RhdGljIE9iamVjdCByZWFkeUxvY2sgPSBuZXcgT2JqZWN0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCmluZGV4IDY1ODIzM2UuLmQ3M2M4NjIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgRGVsaXZlcnlXb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTM2LDcgKzM2LDcgQEAKICAgICBwcml2YXRlIFN0cmluZyBvcDsKICAgICBwcml2YXRlIGJvb2xlYW4ga2VlcENvdW50OwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudGVyID0gMDsKLSAgICAKKwogICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgU3RyaW5nIG9wKSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICB0aGlzLmtlZXBDb3VudCA9IGZhbHNlOwogICAgIH0KIAotICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgCisgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLAogICAgICAgICAgICAgU3RyaW5nIG9wLCBib29sZWFuIGtlZXBDb3VudCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAKICAgICAgICAgZGVidWcoIkVOVEVSLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL01ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKICAgICAgICAgICAgIC8vZXAuYmVmb3JlRGVsaXZlcnkob25NZXNzYWdlKTsKQEAgLTc4LDExICs3OCwxMSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvL2VwLmFmdGVyRGVsaXZlcnkoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC05MywxNCArOTMsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCmluZGV4IDEwMGNhY2UuLmZhOTNmNjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKICAgICB9CiAKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGZvcmdldChYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UuZm9yZ2V0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgfQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucHJlcGFyZTogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgICAgICByZXR1cm4gWEFSZXNvdXJjZS5YQV9PSzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgWGlkW10gcmVjb3ZlcihpbnQgZmxhZykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnJlY292ZXI6ICIgKyBmbGFnVG9TdHJpbmcoZmxhZykpOwogICAgICAgICByZXR1cm4gbnVsbDsKQEAgLTY2LDcgKzY2LDcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBzZXRUcmFuc2FjdGlvblRpbWVvdXQoaW50IHNlY29uZHMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzdGFydChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5zdGFydDogIiArIHhpZFRvU3RyaW5nKHhpZCkgKyAiLCIgKwogICAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvSlNSMzIyV29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvSlNSMzIyV29yay5qYXZhCmluZGV4IDUxMDdhYzEuLjAyMDNmNGEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL0pTUjMyMldvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9KU1IzMjJXb3JrLmphdmEKQEAgLTQ4LDYgKzQ4LDYgQEAKIAogICAgIHB1YmxpYyB2b2lkIHJ1bigpewogICAgICAgICBzdXBlci5ydW4oKTsKLSAgICAgICAgCisKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKaW5kZXggYTY4YTViNy4uOWMyODgxMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQpAQCAtNTEsMTEgKzUxLDExIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKICAgICAgICAgaWYgKHJlc2V0Q29udHJvbC5lcXVhbHMoIkJFR0lOTklORyIpKSB7CiAgICAgICAgICAgIENvbnRyb2xzLmRvbmU9ZmFsc2U7Ci0JICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7Ci0JfQorICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBkb25lKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvTXlTZWN1cml0eUNvbnRleHQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL015U2VjdXJpdHlDb250ZXh0LmphdmEKaW5kZXggMzE3OGMxYy4uZTE5MDUxZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvTXlTZWN1cml0eUNvbnRleHQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeVNlY3VyaXR5Q29udGV4dC5qYXZhCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIENhbGxlclByaW5jaXBhbENhbGxiYWNrIGNwYyA9IG5ldyBDYWxsZXJQcmluY2lwYWxDYWxsYmFjayhleGVjU3ViamVjdCwgbmV3IFByaW5jaXBhbEltcGwocHJpbmNpcGFsTmFtZSkpOwogICAgICAgICBkZWJ1Zygic2V0dGluZyBjYWxsZXIgcHJpbmNpcGFsIGNhbGxiYWNrIHdpdGggcHJpbmNpcGFsIDogIiArIHByaW5jaXBhbE5hbWUpOwogICAgICAgICBjYWxsYmFja3MuYWRkKGNwYyk7Ci0gICAgICAgIAorCiAvKgogICAgICAgICBHcm91cFByaW5jaXBhbENhbGxiYWNrIGdwYyA9IG5ldyBHcm91cFByaW5jaXBhbENhbGxiYWNrKGV4ZWNTdWJqZWN0LCBudWxsKTsKICAgICAgICAgY2FsbGJhY2tzLmFkZChncGMpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKaW5kZXggODE4MmVmNS4uM2ZjZTU0NCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiAgKiBzbyB0aGF0IHRoZSBhcHAgc2VydmVyIGNhbiBpbnN0YW50aWF0ZSBhbmQgY29uZmlndXJlCiAgKiBpdCBhdCB0aGUgcnVudGltZS4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwotcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjIAorcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjCiAgICAgaW1wbGVtZW50cyBBY3RpdmF0aW9uU3BlYywgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgZGVzdGluYXRpb25OYW1lOwpAQCAtNDMsNyArNDMsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25OYW1lICgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25OYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uTmFtZSAoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uTmFtZSgpIGNhbGxlZC4uLiBuYW1lID0gIiArIG5hbWUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uTmFtZSA9IG5hbWU7CkBAIC01Miw3ICs1Miw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvblR5cGUoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uVHlwZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvblR5cGUgKFN0cmluZyB0eXBlKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvblR5cGUgKCkgY2FsbGVkLi4uIHR5cGUgPSAiICsgdHlwZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25UeXBlPSB0eXBlOwpAQCAtNjEsNyArNjEsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdFByb3AoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLnRlc3RQcm9wOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RQcm9wIChTdHJpbmcgdGVzdFByb3ApIHsKICAgICAgICAgZGVidWcoInNldFRlc3RQcm9wICgpIGNhbGxlZC4uLiB0ZXN0UHJvcCA9ICIgKyB0ZXN0UHJvcCk7CiAgICAgICAgIHRoaXMudGVzdFByb3AgPSB0ZXN0UHJvcDsKQEAgLTcwLDcgKzcwLDcgQEAKICAgICBwdWJsaWMgSW50ZWdlciBnZXRUZXN0SW50ZWdlclByb3AoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLnRlc3RJbnRlZ2VyUHJvcDsKICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0SW50ZWdlclByb3AgKEludGVnZXIgdGVzdFByb3AxKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0SW50ZWdlclByb3AgKCkgY2FsbGVkLi4uIHRlc3RJbnRlZ2VyUHJvcCA9ICIgKyB0ZXN0UHJvcDEpOwogICAgICAgICB0aGlzLnRlc3RJbnRlZ2VyUHJvcCA9IHRlc3RQcm9wMTsKQEAgLTk0LDcgKzk0LDcgQEAKIAogICAgICAgfQogCi0gICB9IAorICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGRlYnVnIChTdHJpbmcgbWVzc2FnZSkKICAgICB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCBjMDFjMzFlLi42OWE3MjFiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKQEAgLTg2LDcgKzg2LDcgQEAKIAogICAgICAgICAgICAgICAgIGlmICghZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOyAKKyAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOwogICAgICAgICAgICAgICAgICAgICAvL3dtLmRvV29yayhkLCAwLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCmluZGV4IDE4YTk3MGQuLmIyYTkwNmMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCkBAIC0zNSw4ICszNSw4IEBACiAgICAgcHVibGljIGludCBicmFuY2hRdWFsaWZpZXI7CiAgICAgcHVibGljIGludCBnbG9iYWxUeElEOwogCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7IAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OyAKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsKIAogICAgIHB1YmxpYyBYSUQoKSB7CiAgICAgICAgIGludCBmb28gPSBJRCsrOwpAQCAtNTQsMTAgKzU0LDEwIEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAvLyBJdCBjYW4ndCBiZSBlcXVhbAogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG90aGVyID0gKFhJRClvOyAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3RoZXIgWElELCBub3cgcHJvcGVybHkgY2FzdAotICAgICAgICAKLSAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQgCisKKyAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQKICAgICAgICAgICAgICAgICAmJiB0aGlzLmJyYW5jaFF1YWxpZmllciA9PSBvdGhlci5icmFuY2hRdWFsaWZpZXIKICAgICAgICAgICAgICAgICAmJiB0aGlzLmdsb2JhbFR4SUQgPT0gb3RoZXIuZ2xvYmFsVHhJRCkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgICAgICAgICAgICAgImZvcm1hdElEKCIgICAgICsgZm9ybWF0SUQgICAgICsgIiksICIgKwogICAgICAgICAgICAgICAgICJicmFuY2hRdWFsaWZpZXIgKCIgKyBicmFuY2hRdWFsaWZpZXIgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImdsb2JhbFR4SUQoIiArIGdsb2JhbFR4SUQgKyAiKX0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHM7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKaW5kZXggNTgyYjc4MS4uMTJmYjZkMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbApAQCAtMTE0LDggKzExNCw4IEBACiAgICAgICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KLQk8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CisgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+CisgICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPHNlY3VyaXR5LWlkZW50aXR5PgogICAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eS8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAppbmRleCA0OWU4YzA3Li5iZTA5N2I3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKQEAgLTMyLDcgKzMyLDcgQEAKICAgICAgICAgICAgIFRlc3RJbnRlZ2VyUHJvcAogICAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICA8YWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgICAgICAyIAorICAgICAgICAgICAgMgogICAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHk+CiAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWc+CkBAIC04NCw3ICs4NCw3IEBACiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmVpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmVpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxnZW4tY2xhc3Nlcy8+CiAgICAgPC9lamI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCmluZGV4IGE4M2M5MjQuLmU4ZWVkYjAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAKICAgICBwdWJsaWMgTWVzc2FnZUNoZWNrZXJFSkIoKSB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYmVhbiBjcmVhdGVkIik7CiAgICAgICAgIGhlbGRDb24gPSBudWxsOwpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtYW8uZ2V0UkEoKSBpcyBudWxsIik7CiAgICAgICAgfQogICAgIH1jYXRjaChFeGNlcHRpb24gZSl7Ci0JZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgIH0KICAgICAgIHJldHVybiBwYXNzOwogICAgIH0KQEAgLTg2LDExICs4NiwxMSBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5nZXRMb2NrT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICAvL1RlbGwgdGhlIHJlc291cmNlIGFkYXB0ZXIgdGhlIGNsaWVudCBpcyByZWFkeSB0byBydW4KLSAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5QWxsKCk7IAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnlBbGwoKTsKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJOT1RJRklFRC4uLiBTVEFSVCBXQUlUSU5HIik7CiAgICAgICAgICAgICAgICAgLy9XYWl0IHVudGlsIGJlaW5nIHRvbGQgdG8gcmVhZCBmcm9tIHRoZSBkYXRhYmFzZQotICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS53YWl0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0xMDksMjIgKzEwOSwyMiBAQAogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TWVzc2FnZUNvdW50KCkgewotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgIENvbm5lY3Rpb24gY29uID0gZ2V0RnJlc2hDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBpbnQgY291bnQxID0gZ2V0Q291bnQoY29uKTsKICAgICAgICAgICAgIGNvbi5jbG9zZSgpOwotICAgICAgICAgICAgCi0JICAgIC8qCisKKyAgICAgICAgLyoKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5nZXRMb2NrT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5KCk7CiAgICAgICAgICAgICB9Ci0JICAgICovCi0gICAgICAgICAgICAgICAgCisgICAgICAgICovCisKICAgICAgICAgICAgIHJldHVybiBjb3VudDE7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0ub3V0KTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JfQorICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIGludCBnZXRDb3VudChDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CkBAIC0xNTAsMTAgKzE1MCwxMCBAQAogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgdXNlciA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi91c2VyIik7CiAgICAgICAgICAgICBwYXNzd29yZCA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9wYXNzd29yZCIpOwotCSAgICBDb250cm9scyA9IChNeUFkbWluT2JqZWN0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL3Rlc3RBZG1pbiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExJTkcgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7Ci0JICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMRUQgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIiArIENvbnRyb2xzKTsKKyAgICAgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2Vpcy90ZXN0QWRtaW4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMSU5HIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOworICAgICAgICBDb250cm9scy5pbml0aWFsaXplKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTEVEIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIgKyBDb250cm9scyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTE4OCw3ICsxODgsNyBAQAogICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoY29uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gY29uOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTE5OSw3ICsxOTksNyBAQAogICAgICAgICAgICAgdGhyb3cgZXgxOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGNsb3NlQ29ubmVjdGlvbihDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmIChoZWxkQ29uICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGFkMjA3Yi4uMGIzOGMxOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogZWpiLWphci54bWw9TUVUQS1JTkYvZWpiLWphci54bWwKIHN1bi1lamItamFyLnhtbD1NRVRBLUlORi9zdW4tZWpiLWphci54bWwKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDkzNDM1MDYuLjM5MzkyNTcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsNDUgKzI4LDQ1IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIC8vc3VwZXIoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KCkgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgY29ubmVjdG9yIDEuNSAiKwotCSAgICAgICAgICAgICAiY29udHJhY3RzLiIpOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKKwogICAgICAgICBTdHJpbmcgcmVzID0gIk5PVCBSVU4iOwotCWRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOworICAgIGRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOwogICAgICAgICBib29sZWFuIHBhc3MgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7Ci0JICAgIGludCB0ZXN0Q291bnQgPSAxOworICAgICAgICBpbnQgdGVzdENvdW50ID0gMTsKICAgICAgICAgICAgIHdoaWxlICghZG9uZSgpKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFkb25lKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlJ1bm5pbmcuLi4iKTsKICAgICAgICAgICAgICAgICAgICAgcGFzcyA9IGNoZWNrUmVzdWx0cyhleHBlY3RlZFJlc3VsdHMoKSk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJHb3QgZXhwZWN0ZWQgcmVzdWx0cyA9ICIgKyBwYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kbyBub3QgY29udGludWUgaWYgb25lIHRlc3QgZmFpbGVkCiAgICAgICAgICAgICAgICAgICAgIGlmICghcGFzcykgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gIlNPTUUgVEVTVFMgRkFJTEVEIjsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJJRCBDb25uZWN0b3IgMS42IHRlc3QgLSAiICsgdGVzdENvdW50LCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIklEIENvbm5lY3RvciAxLjYgdGVzdCAtICIgKyB0ZXN0Q291bnQsIHN0YXQuUEFTUyk7Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotCQl0ZXN0Q291bnQgKys7CisgICAgICAgIHRlc3RDb3VudCArKzsKICAgICAgICAgICAgIH0KIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTc2LDE0ICs3NiwxNCBAQAogICAgICAgICB9CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJjb25uZWN0b3IxLjZJRCIpOwogCi0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJFWElUSU5HLi4uIFNUQVRVUyA9ICIgKyByZXMpOwogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja1Jlc3VsdHMoaW50IG51bSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIGludCByZXN1bHQgPSBjaGVja2VyLmdldE1lc3NhZ2VDb3VudCgpOwpAQCAtOTIsNyArOTIsNyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIGRvbmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgcmV0dXJuIGNoZWNrZXIuZG9uZSgpOwpAQCAtMTAwLDcgKzEwMCw3IEBACiAKICAgICBwcml2YXRlIGludCBleHBlY3RlZFJlc3VsdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgcmV0dXJuIGNoZWNrZXIuZXhwZWN0ZWRSZXN1bHRzKCk7CkBAIC0xMDgsNyArMTA4LDcgQEAKIAogICAgIHByaXZhdGUgdm9pZCBub3RpZnlBbmRXYWl0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIGNoZWNrZXIubm90aWZ5QW5kV2FpdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQppbmRleCAxOWJmZGI0Li4yOGE1NzRjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQpAQCAtMzEsNDEgKzMxLDQxIEBACiAKIC8qKgogICovCi1wdWJsaWMgY2xhc3MgTXlNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLCAKK3B1YmxpYyBjbGFzcyBNeU1lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sCiAgICAgICAgIE15TWVzc2FnZUxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgdHJhbnNpZW50IE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYyA9IG51bGw7CiAgICAgcHJpdmF0ZSBDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3Rvciwgd2hpY2ggaXMgcHVibGljIGFuZCB0YWtlcyBubyBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIE15TWVzc2FnZUJlYW4oKSB7fQogCiAgICAgLyoqCi0gICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCAKLSAgICAgKiBub3QgZmluYWwgb3Igc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCAKKyAgICAgKiBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0CisgICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQKICAgICAgKiB3aXRoIG9uZSBhcmd1bWVudCBvZiB0eXBlIGpha2FydGEuZWpiLk1lc3NhZ2VEcml2ZW5Db250ZXh0LgogICAgICAqCiAgICAgICogQHBhcmFtIG1kYyAgICB0aGUgY29udGV4dCB0byBzZXQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dChNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMpIHsKLQl0aGlzLm1kYyA9IG1kYzsKKyAgICB0aGlzLm1kYyA9IG1kYzsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCi0gICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vIAorICAgICAqIGVqYkNyZWF0ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgorICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubwogICAgICAqIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7IH0KIAogICAgIC8qKgotICAgICAqIG9uTWVzc2FnZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKKyAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKICAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggb25lIGFyZ3VtZW50CiAgICAgICogb2YgdHlwZSBqYWthcnRhLmptcy5NZXNzYWdlLgogICAgICAqCi0gICAgICogQ2FzdHMgdGhlIGluY29taW5nIE1lc3NhZ2UgdG8gYSBUZXh0TWVzc2FnZSBhbmQgZGlzcGxheXMgCisgICAgICogQ2FzdHMgdGhlIGluY29taW5nIE1lc3NhZ2UgdG8gYSBUZXh0TWVzc2FnZSBhbmQgZGlzcGxheXMKICAgICAgKiB0aGUgdGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBpbk1lc3NhZ2UgICAgdGhlIGluY29taW5nIG1lc3NhZ2UKQEAgLTc2LDcgKzc2LDcgQEAKICAgICAgICAgLy9sb2coIm9uTWVzc2FnZTo6IGdldENhbGxlclByaW5jaXBhbCA6ICIgKyBtZGMuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkpOwogICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigib25NZXNzYWdlIDogVGhyZWFkSUQgOiAiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkpOwogICAgICAgICBpZihtZGMuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkgIT0gbnVsbCl7Ci0gICAgICAgIAlsb2coIm9uTWVzc2FnZTo6IGdldENhbGxlclByaW5jaXBhbCBOYW1lIDogIiArIG1kYy5nZXRDYWxsZXJQcmluY2lwYWwoKS5nZXROYW1lKCkpOworICAgICAgICAgICAgbG9nKCJvbk1lc3NhZ2U6OiBnZXRDYWxsZXJQcmluY2lwYWwgTmFtZSA6ICIgKyBtZGMuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkuZ2V0TmFtZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGxvZygib25NZXNzYWdlIDogaXNDYWxsZXJJblJvbGUoJ2phZ2FkaXNoJykgOiAiICsgbWRjLmlzQ2FsbGVySW5Sb2xlKCJqYWdhZGlzaCIpKTsKQEAgLTg1LDcgKzg1LDcgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiV1JJVEUiKSkgewotICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiV1JJVEUiLCAKKyAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGluTWVzc2FnZS5zdWJzdHJpbmcoMCwgaW5NZXNzYWdlLmxhc3RJbmRleE9mKCI6IikpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5NZXNzYWdlLmVuZHNXaXRoKCJERUxFVEUiKSkgewogICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiREVMRVRFIiwKQEAgLTk5LDEwICs5OSwxMCBAQAogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBlamJSZW1vdmUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCi0gICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vIAorICAgICAqIGVqYlJlbW92ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgorICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubwogICAgICAqIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQpAQCAtMTEyLDYyICsxMTIsNjIgQEAKIAogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIFN0cmluZyBpZCAgICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKDAsIG1lc3NhZ2UuaW5kZXhPZigiOiIpKTsKLSAgICAgICAgU3RyaW5nIGJvZHkgID0gbWVzc2FnZS5zdWJzdHJpbmcobWVzc2FnZS5pbmRleE9mKCI6IikrMSk7IAorICAgICAgICBTdHJpbmcgYm9keSAgPSBtZXNzYWdlLnN1YnN0cmluZyhtZXNzYWdlLmluZGV4T2YoIjoiKSsxKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoIlJFQUQiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJSZWFkaW5nIHJvdyBmcm9tIGRhdGFiYXNlLi4uIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KIAogICAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9IAorICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0KICAgICAgICAgICAgICAgICAgICJTRUxFQ1QgaWQgZnJvbSBtZXNzYWdlcyB3aGVyZSBpZCA9ICdRUSciOwogICAgICAgICAgICAgICAgICAgUmVzdWx0U2V0IHJlc3VsdHMgPSBzdG10LmV4ZWN1dGVRdWVyeShxdWVyeSk7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArIAorICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJRUSBoYXMgYmFsYW5jZSAiICsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuZ2V0SW50KCJiYWxhbmNlIikgKyAiIGRvbGxhcnMiKTsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgIHN0bXQuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlYWQgb25lIGFjY291bnRcbiIpOwogCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJXUklURSIuZXF1YWxzKG9wKSkgewogCiAgICAgICAgICAgICAgICAgZGVidWcoIkluc2VydGluZyBvbmUgbWVzc2FnZSBpbiB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGNyZWF0ZVJvdyhpZCwgYm9keSwgZGJDb25uZWN0aW9uKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgb25lIG1lc3NhZ2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJERUxFVEUiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBvbmUgbWVzc2FnZSBmcm9tIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlbGV0ZVJvdyhpZCwgZGJDb25uZWN0aW9uKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlbGV0ZWQgb25lIG1lc3NhZ2VcbiIpOwogICAgICAgICAgICAgfSBlbHNlIGlmICgiREVMRVRFX0FMTCIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIkRlbGV0aW5nIGFsbCBtZXNzYWdlcyBmcm9tIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwpAQCAtMTc4LDcgKzE3OCw3IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vdW5zdXBwb3J0ZWQgb3AKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH1maW5hbGx5ewogICAgICAgICAgICAgdHJ5ewogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbi5jbG9zZSgpOwpAQCAtMTg3LDkgKzE4Nyw5IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVJvdyhTdHJpbmcgaWQsIFN0cmluZyBib2R5LCAKLSAgICAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKworICAgIHByaXZhdGUgdm9pZCBjcmVhdGVSb3coU3RyaW5nIGlkLCBTdHJpbmcgYm9keSwKKyAgICAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICAvLyBDcmVhdGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKQEAgLTIwNSw5ICsyMDUsOSBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvdyhTdHJpbmcgaWQsIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlUm93KFN0cmluZyBpZCwgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICAvLyBEZWxldGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKICAgICAgICAgZGVidWcoIkRlbGV0ZVJvdyB3aXRoIElEID0gIiArIGlkKTsKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7CkBAIC0yMjAsOSArMjIwLDkgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVBbGwoamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVBbGwoamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICAvLyBEZWxldGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgIFN0cmluZyBxdWVyeSA9ICJERUxFVEUgRlJPTSBtZXNzYWdlcyI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L2FwcC9zcmMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L2FwcC9zcmMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKaW5kZXggYmUzN2E0YS4uYTFjNjJmNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9hcHAvc3JjL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQpAQCAtNDQsMTcgKzQ0LDE3IEBACiAKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIElPRXhjZXB0aW9uewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoaXMgaXMgdG8gdGVzdCBjb25uZWN0b3IgMS42ICIrCi0JICAgICAgICAgICAgICJjb250cmFjdHMuIik7CisgICAgICAgICAgICAgICAgICJjb250cmFjdHMuIik7CiAKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKIAogICAgICAgICBTdHJpbmcgcmVzID0gIk5PVCBSVU4iOwotCWRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOworICAgIGRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOwogICAgICAgICBib29sZWFuIHBhc3MgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7Ci0JICAgIGludCB0ZXN0Q291bnQgPSAxOworICAgICAgICBpbnQgdGVzdENvdW50ID0gMTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJTdGFydGluZyB0aGUgdGVzdCIpOwogICAgICAgICAgICAgb3V0LmZsdXNoKCk7CiAKQEAgLTgxLDE4ICs4MSwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gIlNPTUUgVEVTVFMgRkFJTEVEIjsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSUQgQ29ubmVjdG9yIDEuNiB0ZXN0IC0gIiArIHRlc3RDb3VudCArICIgRkFJTCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6RkFJTCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSUQgQ29ubmVjdG9yIDEuNiB0ZXN0IC0gIiArIHRlc3RDb3VudCArICIgUEFTUyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOwotCQkgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiRU5EX09GX0VYRUNVVElPTiIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiRU5EX09GX0VYRUNVVElPTiIpOwotICAgICAgICAgICAgCisKIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW1wb3J0aW5nIHRyYW5zYWN0aW9uIHRlc3QgZmFpbGVkLiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDIwN2E0ODYuLjA4M2IyNjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL2Nvbm5lY3RvcjE2L3NlcnZsZXQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJodHRwOmhvc3QiIHZhbHVlPSJsb2NhbGhvc3QiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9idWlsZC54bWwKaW5kZXggY2MxZGVjMC4uZjA0NzAxMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9idWlsZC54bWwKQEAgLTEzNCw3ICsxMzQsNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0b3JlLWRlZmF1bHQtc2VjdXJpdHktcGVybWlzc2lvbiIvPgotIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXBhc3N3b3JkLWFsaWFzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJwYXNzd29yZC5hbGlhcy5uYW1lIiB2YWx1ZT0iQUxJQVNfVEVTVF9QUk9QRVJUWSIvPgogICAgICAgICA8L2FudGNhbGw+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL01FVEEtSU5GL3JhLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvTUVUQS1JTkYvcmEueG1sCmluZGV4IGYyMmNhM2MuLmFkOTUwYzcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvTUVUQS1JTkYvcmEueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvTUVUQS1JTkYvcmEueG1sCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eS1jb25maWRlbnRpYWw+CiAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8aW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPgogICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXI+CiAgICAgICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXItdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lcgpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYy1jbGFzcz4KICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYz4KICAgICAgICAgICAgICAgICA8L21lc3NhZ2VsaXN0ZW5lcj4KLSAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4KICAgICAgICAgPC9pbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KICAgICAgICAgPGFkbWlub2JqZWN0PgogICAgICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L2FkbWlub2JqZWN0LWludGVyZmFjZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2J1aWxkLnhtbAppbmRleCBlZDI5ODg5Li44NTI4ODE4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvYnVpbGQueG1sCkBAIC0zMCw4ICszMCw4IEBACiAKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImluaXQtY29tbW9uIiA+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KLQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgorICAgIDxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+CisgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGphciBqYXJmaWxlPSIuLi9nZW5lcmljLXJhLmphciIgYmFzZWRpcj0iY2xhc3NlcyIKICAgICAgICAgIGluY2x1ZGVzPSJjb25uZWN0b3IvKi5jbGFzcyIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKaW5kZXggNTU1MzNkNC4uZjU5YjJiMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBDb250cm9scyB7CiAgICAgcHVibGljIHN0YXRpYyBPYmplY3QgcmVhZHlMb2NrID0gbmV3IE9iamVjdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCmluZGV4IDY1ODIzM2UuLmQ3M2M4NjIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBEZWxpdmVyeVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtMzYsNyArMzYsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIG9wOwogICAgIHByaXZhdGUgYm9vbGVhbiBrZWVwQ291bnQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ZXIgPSAwOwotICAgIAorCiAgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCBTdHJpbmcgb3ApIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIHRoaXMua2VlcENvdW50ID0gZmFsc2U7CiAgICAgfQogCi0gICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCAKKyAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsCiAgICAgICAgICAgICBTdHJpbmcgb3AsIGJvb2xlYW4ga2VlcENvdW50KSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNTUsNyArNTUsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwogICAgICAgICAgICAgLy9lcC5iZWZvcmVEZWxpdmVyeShvbk1lc3NhZ2UpOwpAQCAtNzgsMTEgKzc4LDExIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vZXAuYWZ0ZXJEZWxpdmVyeSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTkzLDE0ICs5MywxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQppbmRleCAxMDBjYWNlLi5mYTkzZjYzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKICAgICB9CiAKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGZvcmdldChYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UuZm9yZ2V0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgfQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucHJlcGFyZTogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgICAgICByZXR1cm4gWEFSZXNvdXJjZS5YQV9PSzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgWGlkW10gcmVjb3ZlcihpbnQgZmxhZykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnJlY292ZXI6ICIgKyBmbGFnVG9TdHJpbmcoZmxhZykpOwogICAgICAgICByZXR1cm4gbnVsbDsKQEAgLTY2LDcgKzY2LDcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBzZXRUcmFuc2FjdGlvblRpbWVvdXQoaW50IHNlY29uZHMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzdGFydChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5zdGFydDogIiArIHhpZFRvU3RyaW5nKHhpZCkgKyAiLCIgKwogICAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL0pTUjMyMldvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9KU1IzMjJXb3JrLmphdmEKaW5kZXggNTEwN2FjMS4uMDIwM2Y0YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL0pTUjMyMldvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvSlNSMzIyV29yay5qYXZhCkBAIC00OCw2ICs0OCw2IEBACiAKICAgICBwdWJsaWMgdm9pZCBydW4oKXsKICAgICAgICAgc3VwZXIucnVuKCk7Ci0gICAgICAgIAorCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKaW5kZXggMmIyOGQ2Mi4uOGU3YmFjMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCkBAIC03MywxMSArNzMsMTEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOwogICAgICAgICBpZiAocmVzZXRDb250cm9sLmVxdWFscygiQkVHSU5OSU5HIikpIHsKICAgICAgICAgICAgQ29udHJvbHMuZG9uZT1mYWxzZTsKLQkgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKLQl9CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGRvbmUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvTXlTZWN1cml0eUNvbnRleHQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9NeVNlY3VyaXR5Q29udGV4dC5qYXZhCmluZGV4IDMxNzhjMWMuLmUxOTA1MWUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9NeVNlY3VyaXR5Q29udGV4dC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9NeVNlY3VyaXR5Q29udGV4dC5qYXZhCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIENhbGxlclByaW5jaXBhbENhbGxiYWNrIGNwYyA9IG5ldyBDYWxsZXJQcmluY2lwYWxDYWxsYmFjayhleGVjU3ViamVjdCwgbmV3IFByaW5jaXBhbEltcGwocHJpbmNpcGFsTmFtZSkpOwogICAgICAgICBkZWJ1Zygic2V0dGluZyBjYWxsZXIgcHJpbmNpcGFsIGNhbGxiYWNrIHdpdGggcHJpbmNpcGFsIDogIiArIHByaW5jaXBhbE5hbWUpOwogICAgICAgICBjYWxsYmFja3MuYWRkKGNwYyk7Ci0gICAgICAgIAorCiAvKgogICAgICAgICBHcm91cFByaW5jaXBhbENhbGxiYWNrIGdwYyA9IG5ldyBHcm91cFByaW5jaXBhbENhbGxiYWNrKGV4ZWNTdWJqZWN0LCBudWxsKTsKICAgICAgICAgY2FsbGJhY2tzLmFkZChncGMpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQppbmRleCA4MTgyZWY1Li4zZmNlNTQ0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQpAQCAtMjQsOSArMjQsOSBAQAogICogc28gdGhhdCB0aGUgYXBwIHNlcnZlciBjYW4gaW5zdGFudGlhdGUgYW5kIGNvbmZpZ3VyZQogICogaXQgYXQgdGhlIHJ1bnRpbWUuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYyAKK3B1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYwogICAgIGltcGxlbWVudHMgQWN0aXZhdGlvblNwZWMsIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByaXZhdGUgU3RyaW5nIGRlc3RpbmF0aW9uTmFtZTsKQEAgLTQzLDcgKzQzLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uTmFtZSAoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uTmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvbk5hbWUgKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvbk5hbWUoKSBjYWxsZWQuLi4gbmFtZSA9ICIgKyBuYW1lKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbk5hbWUgPSBuYW1lOwpAQCAtNTIsNyArNTIsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25UeXBlKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvblR5cGU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25UeXBlIChTdHJpbmcgdHlwZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25UeXBlICgpIGNhbGxlZC4uLiB0eXBlID0gIiArIHR5cGUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uVHlwZT0gdHlwZTsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3RQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0UHJvcDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0UHJvcCAoU3RyaW5nIHRlc3RQcm9wKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0UHJvcCAoKSBjYWxsZWQuLi4gdGVzdFByb3AgPSAiICsgdGVzdFByb3ApOwogICAgICAgICB0aGlzLnRlc3RQcm9wID0gdGVzdFByb3A7CkBAIC03MCw3ICs3MCw3IEBACiAgICAgcHVibGljIEludGVnZXIgZ2V0VGVzdEludGVnZXJQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0SW50ZWdlclByb3A7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdEludGVnZXJQcm9wIChJbnRlZ2VyIHRlc3RQcm9wMSkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdEludGVnZXJQcm9wICgpIGNhbGxlZC4uLiB0ZXN0SW50ZWdlclByb3AgPSAiICsgdGVzdFByb3AxKTsKICAgICAgICAgdGhpcy50ZXN0SW50ZWdlclByb3AgPSB0ZXN0UHJvcDE7CkBAIC05NCw3ICs5NCw3IEBACiAKICAgICAgIH0KIAotICAgfSAKKyAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkZWJ1ZyAoU3RyaW5nIG1lc3NhZ2UpCiAgICAgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKaW5kZXggZDA3YzRlOS4uMDg2Nzg2MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCkBAIC04NCwxMSArODQsMTEgQEAKICAgICAgICAgICAgIHNwZWMudmFsaWRhdGUoKTsKICAgICAgICAgICAgIHdvcmsgPSBuZXcgV29ya0Rpc3BhdGNoZXIoIkRJU1BBVENIRVIiLCBjdHgsIGZhY3RvcnksIHNwZWMpOwogICAgICAgICAgICAgd20uc2NoZWR1bGVXb3JrKHdvcmssIDMwICogMTAwMCwgbnVsbCwgbnVsbCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy9UZXN0IGlmIGEgcmVzb3VyY2UgZGVmaW5lZCBpbiB0aGUgY29tcCdzIG5hbWVzcGFjZSBpcyBhdmFpbGFibGUKICAgICAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGxvb2tlZHVwIGluIFJBIGVuZHBvaW50QWN0aXZhdGlvbjoiICsgbyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZGVidWcoIkIuMDAxLiBTY2hlZHVsZWQgRGlzcGF0Y2hlciIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxvb2tlZHVwIGluIFJBIGVuZHBvaW50RGVhY3RpdmF0aW9uOiIgKyBvKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBFcnJvciB3aGlsZSBsb29raW5nIHVwIGluIGNvbXBvbmVudCBjb250ZXh0ICIgKwotICAgICAgICAgICAgCQkiaW4gZW5kcG9pbnREZWFjdGl2YXRpb24iKTsKKyAgICAgICAgICAgICAgICAgICAgImluIGVuZHBvaW50RGVhY3RpdmF0aW9uIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCA1MGFmMTg2Li43ZmRjYWZkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQpAQCAtODYsNyArODYsNyBAQAogCiAgICAgICAgICAgICAgICAgaWYgKCFmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwotICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7IAorICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7CiAgICAgICAgICAgICAgICAgICAgIC8vd20uZG9Xb3JrKGQsIDAsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQppbmRleCAxOGE5NzBkLi5iMmE5MDZjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCkBAIC0zNSw4ICszNSw4IEBACiAgICAgcHVibGljIGludCBicmFuY2hRdWFsaWZpZXI7CiAgICAgcHVibGljIGludCBnbG9iYWxUeElEOwogCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7IAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OyAKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsKIAogICAgIHB1YmxpYyBYSUQoKSB7CiAgICAgICAgIGludCBmb28gPSBJRCsrOwpAQCAtNTQsMTAgKzU0LDEwIEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAvLyBJdCBjYW4ndCBiZSBlcXVhbAogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG90aGVyID0gKFhJRClvOyAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3RoZXIgWElELCBub3cgcHJvcGVybHkgY2FzdAotICAgICAgICAKLSAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQgCisKKyAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQKICAgICAgICAgICAgICAgICAmJiB0aGlzLmJyYW5jaFF1YWxpZmllciA9PSBvdGhlci5icmFuY2hRdWFsaWZpZXIKICAgICAgICAgICAgICAgICAmJiB0aGlzLmdsb2JhbFR4SUQgPT0gb3RoZXIuZ2xvYmFsVHhJRCkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgICAgICAgICAgICAgImZvcm1hdElEKCIgICAgICsgZm9ybWF0SUQgICAgICsgIiksICIgKwogICAgICAgICAgICAgICAgICJicmFuY2hRdWFsaWZpZXIgKCIgKyBicmFuY2hRdWFsaWZpZXIgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImdsb2JhbFR4SUQoIiArIGdsb2JhbFR4SUQgKyAiKX0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHM7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY3VzdG9tLXJlc291cmNlcy1nZi1yZXNvdXJjZXMtbW9kdWxlLXNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2N1c3RvbS1yZXNvdXJjZXMtZ2YtcmVzb3VyY2VzLW1vZHVsZS1zY29wZWQvYnVpbGQucHJvcGVydGllcwppbmRleCA3NmVkMjJlLi41YWQyNDc2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY3VzdG9tLXJlc291cmNlcy1nZi1yZXNvdXJjZXMtbW9kdWxlLXNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jdXN0b20tcmVzb3VyY2VzLWdmLXJlc291cmNlcy1tb2R1bGUtc2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcC1DdXN0b21SZXNvdXJjZUZhY3RvcmllcyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jdXN0b20tcmVzb3VyY2VzLWdmLXJlc291cmNlcy1tb2R1bGUtc2NvcGVkL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jdXN0b20tcmVzb3VyY2VzLWdmLXJlc291cmNlcy1tb2R1bGUtc2NvcGVkL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQppbmRleCA4ZjJmNjg1Li40MzcwNGU0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY3VzdG9tLXJlc291cmNlcy1nZi1yZXNvdXJjZXMtbW9kdWxlLXNjb3BlZC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2N1c3RvbS1yZXNvdXJjZXMtZ2YtcmVzb3VyY2VzLW1vZHVsZS1zY29wZWQvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCkBAIC0zMCwxMyArMzAsMTMgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAotIAlTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKKyAgICAgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CiAKLQlzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RTdWl0ZSk7CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0U3VpdGUpOwogCiAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVCTVBIb21lIik7Ci0JU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCisgICAgU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCiAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZUJNUEhvbWUuY2xhc3MpOwogCiAgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY3VzdG9tLXJlc291cmNlcy1nZi1yZXNvdXJjZXMtbW9kdWxlLXNjb3BlZC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2N1c3RvbS1yZXNvdXJjZXMtZ2YtcmVzb3VyY2VzLW1vZHVsZS1zY29wZWQvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCA0YTk2MzMwLi45M2Y4NzYyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY3VzdG9tLXJlc291cmNlcy1nZi1yZXNvdXJjZXMtbW9kdWxlLXNjb3BlZC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jdXN0b20tcmVzb3VyY2VzLWdmLXJlc291cmNlcy1tb2R1bGUtc2NvcGVkL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTcwLDYgKzcwLDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2N1c3RvbS1yZXNvdXJjZXMtZ2YtcmVzb3VyY2VzLW1vZHVsZS1zY29wZWQvZGVzY3JpcHRvci9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jdXN0b20tcmVzb3VyY2VzLWdmLXJlc291cmNlcy1tb2R1bGUtc2NvcGVkL2Rlc2NyaXB0b3IvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKaW5kZXggODhkYzBhNy4uMzEzNDc5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2N1c3RvbS1yZXNvdXJjZXMtZ2YtcmVzb3VyY2VzLW1vZHVsZS1zY29wZWQvZGVzY3JpcHRvci9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY3VzdG9tLXJlc291cmNlcy1nZi1yZXNvdXJjZXMtbW9kdWxlLXNjb3BlZC9kZXNjcmlwdG9yL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCkBAIC01NSw0ICs1NSw0IEBACiAgICAgICA8cHJvcGVydHkgbmFtZT0iaG9zdCIgdmFsdWU9ImphdmEuc3VuLmNvbSIgLz4KICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwcm90b2NvbCIgdmFsdWU9Imh0dHAiIC8+CiAgICAgPC9jdXN0b20tcmVzb3VyY2U+Ci08L3Jlc291cmNlcz4gCis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kYXRhc291cmNlLWRlZmluaXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kYXRhc291cmNlLWRlZmluaXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCAxYzBlM2NkLi5mNmNiZmE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGF0YXNvdXJjZS1kZWZpbml0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RhdGFzb3VyY2UtZGVmaW5pdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMyArMTUsMjMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImRhdGFzb3VyY2UtZGVmaW5pdGlvbiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kYXRhc291cmNlLWRlZmluaXRpb24vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RhdGFzb3VyY2UtZGVmaW5pdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZGIyYmI5Ny4uNDc2NmFjMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RhdGFzb3VyY2UtZGVmaW5pdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RhdGFzb3VyY2UtZGVmaW5pdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTc3LDcgKzc3LDcgQEAKICAgICAgICAgICAgICAgICAvL1RoZSBvbmx5IHdheSB0byBjb25maXJtIHRoZSBmaXggZm9yIElUIDkyOTIgaXMgdGhhdCBhcHBjbGllbnQgY29uc29sZQogICAgICAgICAgICAgICAgIC8vc2hvdWxkIG5vdCBoYXZlICJpbnZhbGlkRGVzY3JpcHRvckZhaWx1cmVFeGNlcHRpb24iIHByaW50ZWQKICAgICAgICAgICAgICAgICAvL25vIGlzb2xhdGlvbiBsZXZlbCBzcGVjaWZpZWQKLQkJQERhdGFTb3VyY2VEZWZpbml0aW9uKG5hbWUgPSAiamF2YTpjb21wL2Vudi9BcHBjbGllbnRfRGF0YVNvdXJjZTIiLAorICAgICAgICBARGF0YVNvdXJjZURlZmluaXRpb24obmFtZSA9ICJqYXZhOmNvbXAvZW52L0FwcGNsaWVudF9EYXRhU291cmNlMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBtaW5Qb29sU2l6ZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsUG9vbFNpemUgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnRYQURhdGFTb3VyY2UiLApAQCAtMjEwLDcgKzIxMCw3IEBACiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGlmKGV4cGVjdFN1Y2Nlc3MpewotICAgICAgICAgICAgCWUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBmaW5hbGx5IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kYXRhc291cmNlLWRlZmluaXRpb24vZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RhdGFzb3VyY2UtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKaW5kZXggZTZmOTBmNS4uYWIwOWNjMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RhdGFzb3VyY2UtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RhdGFzb3VyY2UtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgPHZhbHVlPjtjcmVhdGU9dHJ1ZTwvdmFsdWU+CiAgICAgPC9wcm9wZXJ0eT4KICAgICA8bG9naW4tdGltZW91dD4wPC9sb2dpbi10aW1lb3V0PgotICAgIDx0cmFuc2FjdGlvbmFsPnRydWU8L3RyYW5zYWN0aW9uYWw+ICAgICAgICAKKyAgICA8dHJhbnNhY3Rpb25hbD50cnVlPC90cmFuc2FjdGlvbmFsPgogICAgIDxpc29sYXRpb24tbGV2ZWw+VFJBTlNBQ1RJT05fUkVQRUFUQUJMRV9SRUFEPC9pc29sYXRpb24tbGV2ZWw+CiAgICAgPGluaXRpYWwtcG9vbC1zaXplPi0xPC9pbml0aWFsLXBvb2wtc2l6ZT4KICAgICA8bWF4LXBvb2wtc2l6ZT4tMTwvbWF4LXBvb2wtc2l6ZT4KQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgPHZhbHVlPjtjcmVhdGU9dHJ1ZTwvdmFsdWU+CiAgICAgPC9wcm9wZXJ0eT4KICAgICA8bG9naW4tdGltZW91dD4wPC9sb2dpbi10aW1lb3V0PgotICAgIDx0cmFuc2FjdGlvbmFsPnRydWU8L3RyYW5zYWN0aW9uYWw+ICAgICAgICAKKyAgICA8dHJhbnNhY3Rpb25hbD50cnVlPC90cmFuc2FjdGlvbmFsPgogICAgIDxpc29sYXRpb24tbGV2ZWw+VFJBTlNBQ1RJT05fUkVQRUFUQUJMRV9SRUFEPC9pc29sYXRpb24tbGV2ZWw+CiAgICAgPGluaXRpYWwtcG9vbC1zaXplPi0xPC9pbml0aWFsLXBvb2wtc2l6ZT4KICAgICA8bWF4LXBvb2wtc2l6ZT4tMTwvbWF4LXBvb2wtc2l6ZT4KQEAgLTg4LDcgKzg4LDcgQEAKICAgICAgICAgPHZhbHVlPjtjcmVhdGU9dHJ1ZTwvdmFsdWU+CiAgICAgPC9wcm9wZXJ0eT4KICAgICA8bG9naW4tdGltZW91dD4wPC9sb2dpbi10aW1lb3V0PgotICAgIDx0cmFuc2FjdGlvbmFsPnRydWU8L3RyYW5zYWN0aW9uYWw+ICAgICAgICAKKyAgICA8dHJhbnNhY3Rpb25hbD50cnVlPC90cmFuc2FjdGlvbmFsPgogICAgIDxpc29sYXRpb24tbGV2ZWw+VFJBTlNBQ1RJT05fUkVQRUFUQUJMRV9SRUFEPC9pc29sYXRpb24tbGV2ZWw+CiAgICAgPGluaXRpYWwtcG9vbC1zaXplPi0xPC9pbml0aWFsLXBvb2wtc2l6ZT4KICAgICA8bWF4LXBvb2wtc2l6ZT4tMTwvbWF4LXBvb2wtc2l6ZT4KQEAgLTExMCw3ICsxMTAsNyBAQAogICAgICAgICA8dmFsdWU+O2NyZWF0ZT10cnVlPC92YWx1ZT4KICAgICA8L3Byb3BlcnR5PgogICAgIDxsb2dpbi10aW1lb3V0PjMwMDwvbG9naW4tdGltZW91dD4KLSAgICA8dHJhbnNhY3Rpb25hbD5mYWxzZTwvdHJhbnNhY3Rpb25hbD4gICAgCisgICAgPHRyYW5zYWN0aW9uYWw+ZmFsc2U8L3RyYW5zYWN0aW9uYWw+CiAgICAgPGlzb2xhdGlvbi1sZXZlbD5UUkFOU0FDVElPTl9SRVBFQVRBQkxFX1JFQUQ8L2lzb2xhdGlvbi1sZXZlbD4KICAgICA8aW5pdGlhbC1wb29sLXNpemU+MTwvaW5pdGlhbC1wb29sLXNpemU+CiAgICAgPG1heC1wb29sLXNpemU+MjwvbWF4LXBvb2wtc2l6ZT4KQEAgLTEzMSw3ICsxMzEsNyBAQAogICAgICAgICA8dmFsdWU+O2NyZWF0ZT10cnVlPC92YWx1ZT4KICAgICA8L3Byb3BlcnR5PgogICAgIDxsb2dpbi10aW1lb3V0PjA8L2xvZ2luLXRpbWVvdXQ+Ci0gICAgPHRyYW5zYWN0aW9uYWw+dHJ1ZTwvdHJhbnNhY3Rpb25hbD4gICAgCisgICAgPHRyYW5zYWN0aW9uYWw+dHJ1ZTwvdHJhbnNhY3Rpb25hbD4KICAgICA8aXNvbGF0aW9uLWxldmVsPlRSQU5TQUNUSU9OX1JFUEVBVEFCTEVfUkVBRDwvaXNvbGF0aW9uLWxldmVsPgogICAgIDxpbml0aWFsLXBvb2wtc2l6ZT4tMTwvaW5pdGlhbC1wb29sLXNpemU+CiAgICAgPG1heC1wb29sLXNpemU+LTE8L21heC1wb29sLXNpemU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGF0YXNvdXJjZS1kZWZpbml0aW9uL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kYXRhc291cmNlLWRlZmluaXRpb24vZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDYyMDYzYzUuLjFjNDUzNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kYXRhc291cmNlLWRlZmluaXRpb24vZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kYXRhc291cmNlLWRlZmluaXRpb24vZGVzY3JpcHRvci93ZWIueG1sCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgICA8dmFsdWU+O2NyZWF0ZT10cnVlPC92YWx1ZT4KICAgICAgICA8L3Byb3BlcnR5PgogICAgICA8L2RhdGEtc291cmNlPgotICAgICAKKwogICAgICA8ZGF0YS1zb3VyY2U+CiAgICAgICAgPG5hbWU+amF2YTpjb21wL2Vudi9TZXJ2bGV0X0REX0RhdGFTb3VyY2U8L25hbWU+CiAgICAgICAgPGNsYXNzLW5hbWU+b3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERhdGFTb3VyY2U8L2NsYXNzLW5hbWU+CkBAIC01OCw2ICs1OCw2IEBACiAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgPC9kYXRhLXNvdXJjZT4KIAotICAgIAorCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kYXRhc291cmNlLWRlZmluaXRpb24vZWpiL0hlbGxvRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGF0YXNvdXJjZS1kZWZpbml0aW9uL2VqYi9IZWxsb0VKQi5qYXZhCmluZGV4IDlhZGI5YTIuLjljNzUzZjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kYXRhc291cmNlLWRlZmluaXRpb24vZWpiL0hlbGxvRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RhdGFzb3VyY2UtZGVmaW5pdGlvbi9lamIvSGVsbG9FSkIuamF2YQpAQCAtMzQsMTMgKzM0LDEzIEBACiAgICAgICAgIHZhbHVlID0gewogICAgICAgICAgICAgICAgIC8vcHVyZSBhbm5vdGF0aW9uIHRoYXQgaGFzIHVybCBhbmQgbm8gc3RhbmRhcmQgcHJvcGVydGllcwogICAgICAgICAgICAgICAgIC8vdGVzdC1jYXNlIGZvciBpc3N1ZS0xNDkxOAotCQlARGF0YVNvdXJjZURlZmluaXRpb24obmFtZT0iamF2YTphcHAvamRiYy9hcHBkc19kcml2ZXIiLAotICAgICAgIAkgCQljbGFzc05hbWU9Im9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiLAotICAgICAgICAJCXVzZXI9ImRidXNlciIsCi0gICAgICAgIAkJcGFzc3dvcmQ9ImRicGFzc3dvcmQiLAotICAgICAgICAJCXRyYW5zYWN0aW9uYWw9ZmFsc2UsCi0gICAgICAgIAkJdXJsPSJqZGJjOmRlcmJ5Oi8vbG9jYWxob3N0OjE1MjcvdGVzdGRiO2NyZWF0ZT10cnVlIgotCQkpLAorICAgICAgICBARGF0YVNvdXJjZURlZmluaXRpb24obmFtZT0iamF2YTphcHAvamRiYy9hcHBkc19kcml2ZXIiLAorICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9Im9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiLAorICAgICAgICAgICAgICAgIHVzZXI9ImRidXNlciIsCisgICAgICAgICAgICAgICAgcGFzc3dvcmQ9ImRicGFzc3dvcmQiLAorICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uYWw9ZmFsc2UsCisgICAgICAgICAgICAgICAgdXJsPSJqZGJjOmRlcmJ5Oi8vbG9jYWxob3N0OjE1MjcvdGVzdGRiO2NyZWF0ZT10cnVlIgorICAgICAgICApLAogCiAgICAgICAgICAgICAgICAgQERhdGFTb3VyY2VEZWZpbml0aW9uKG5hbWUgPSAiamF2YTpnbG9iYWwvZW52L0hlbGxvRUpCX0RhdGFTb3VyY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZFhBRGF0YVNvdXJjZSIsCkBAIC03MywxMyArNzMsMTMgQEAKICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgIC8vIGFubm90YXRpb24gKyBERCB3aGVyZSBVUkwgc3BlY2lmaWVkIGluIGFubm90YXRpb24gd2lucwogICAgICAgICAgICAgICAgIC8vdGVzdC1jYXNlIGZvciBpc3N1ZS0xNDkxOAotCQlARGF0YVNvdXJjZURlZmluaXRpb24obmFtZT0iamF2YTptb2R1bGUvZW52L0hlbGxvRUpCX0RhdGFTb3VyY2VfZHJpdmVyIiwKLSAgICAgICAgCQljbGFzc05hbWU9Im9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiLAotICAgICAgICAJCXVzZXI9ImRidXNlciIsCi0gICAgICAgIAkJcGFzc3dvcmQ9ImRicGFzc3dvcmQiLAotICAgICAgICAJCXRyYW5zYWN0aW9uYWw9ZmFsc2UsCi0gICAgICAgIAkJdXJsPSJqZGJjOmRlcmJ5Oi8vbG9jYWxob3N0OjE1MjcvdGVzdGRiO2NyZWF0ZT10cnVlIgotCQkpCisgICAgICAgIEBEYXRhU291cmNlRGVmaW5pdGlvbihuYW1lPSJqYXZhOm1vZHVsZS9lbnYvSGVsbG9FSkJfRGF0YVNvdXJjZV9kcml2ZXIiLAorICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0ib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciIsCisgICAgICAgICAgICAgICAgdXNlcj0iZGJ1c2VyIiwKKyAgICAgICAgICAgICAgICBwYXNzd29yZD0iZGJwYXNzd29yZCIsCisgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25hbD1mYWxzZSwKKyAgICAgICAgICAgICAgICB1cmw9ImpkYmM6ZGVyYnk6Ly9sb2NhbGhvc3Q6MTUyNy90ZXN0ZGI7Y3JlYXRlPXRydWUiCisgICAgICAgICkKICAgICAgICAgfQogKQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGF0YXNvdXJjZS1kZWZpbml0aW9uL2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGF0YXNvdXJjZS1kZWZpbml0aW9uL2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEKaW5kZXggZGIzMGQxMi4uMDY4YWU1YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RhdGFzb3VyY2UtZGVmaW5pdGlvbi9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kYXRhc291cmNlLWRlZmluaXRpb24vZWpiL0hlbGxvU3RhdGVmdWxFSkIuamF2YQpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAgICAgICAgICksCiAKICAgICAgICAgICAgICAgICAvLyBvbmx5IHVzZXIgc2hvdWxkIGJlIGNvbnNpZGVyZWQuCi0gICAgICAgICAgICAgICAgLy8gaW5jb3JyZWN0IHZhbHVlcyBmb3IgOiBjbGFzc05hbWUsIHBvcnROdW1iZXIsIHVybCwgcHJvcGVydGllcyB3aGljaCBzaG91bGQgYmUgaWdub3JlZCAKKyAgICAgICAgICAgICAgICAvLyBpbmNvcnJlY3QgdmFsdWVzIGZvciA6IGNsYXNzTmFtZSwgcG9ydE51bWJlciwgdXJsLCBwcm9wZXJ0aWVzIHdoaWNoIHNob3VsZCBiZSBpZ25vcmVkCiAgICAgICAgICAgICAgICAgQERhdGFTb3VyY2VEZWZpbml0aW9uKG5hbWUgPSAiamF2YTpnbG9iYWwvZW52L0hlbGxvU3RhdGVmdWxFSkJfRERfRGF0YVNvdXJjZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBtaW5Qb29sU2l6ZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsUG9vbFNpemUgPSAwLApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9hcHAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9hcHAvYnVpbGQueG1sCmluZGV4IDEyNDllMDkuLjUyMGJmNTEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvYXBwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL2FwcC9idWlsZC54bWwKQEAgLTM2LDggKzM2LDggQEAKICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyIi8+CiAgPCEtLQogICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImdlbmVyaWMtZW1iZWRkZWQiLz4KLQk8cGFyYW0gbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJnZW5lcmljLWVtYmVkZGVkIi8+CisgICAgPHBhcmFtIG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgogICAgPC9hbnRjYWxsPgogIC0tPgogICA8L3RhcmdldD4KQEAgLTU1LDggKzU1LDggQEAKICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgPGZpbGVzZXQgZGlyPSIuLi9yYSI+CiAgICAgICAgICAgIDwhLS0gIDxpbmNsdWRlIG5hbWU9IioucmFyIi8+IC0tPgotCSAgIDwhLS08aW5jbHVkZSBuYW1lPSJzaXZhamRiY3JhLnJhciIvPi0tPgotCSAgIDxpbmNsdWRlIG5hbWU9ImdlbmVyaWMtcmEucmFyIi8+CisgICAgICAgPCEtLTxpbmNsdWRlIG5hbWU9InNpdmFqZGJjcmEucmFyIi8+LS0+CisgICAgICAgPGluY2x1ZGUgbmFtZT0iZ2VuZXJpYy1yYS5yYXIiLz4KICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0vbGliIj4KICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmVwb3J0ZXIuamFyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGNjZjI0MzMuLjE1MDUxNTAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIGVqYi1qYXIueG1sPU1FVEEtSU5GL2VqYi1qYXIueG1sCiBzdW4tZWpiLWphci54bWw9TUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCmluZGV4IDBmYzU3ZDYuLmNjMmIzNzAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCkBAIC0xMjEsMTcgKzEyMSwxNyBAQAogICAgICAgICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oImRidXNlciIsImRicGFzc3dvcmQiKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9IAorICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0KICAgICAgICAgICAgICAgICAgICJTRUxFQ1QgaWQgZnJvbSBtZXNzYWdlcyB3aGVyZSBpZCA9ICdRUSciOwogICAgICAgICAgICAgICAgICAgUmVzdWx0U2V0IHJlc3VsdHMgPSBzdG10LmV4ZWN1dGVRdWVyeShxdWVyeSk7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArIAorICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJRUSBoYXMgYmFsYW5jZSAiICsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuZ2V0SW50KCJiYWxhbmNlIikgKyAiIGRvbGxhcnMiKTsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgIHN0bXQuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlYWQgb25lIGFjY291bnRcbiIpOwogICAgICAgICAgICAgICAgICovCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvYnVpbGQucHJvcGVydGllcwppbmRleCA5NDUwZDBkLi41NjM1NDM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii9kZWZhdWx0UmVzb3VyY2Uvc2VydmxldCIvPgogPHByb3BlcnR5IG5hbWU9Imh0dHA6aG9zdCIgdmFsdWU9ImxvY2FsaG9zdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL2J1aWxkLnhtbAppbmRleCA1YjBkM2RkLi5jNGJhMmQ2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL2J1aWxkLnhtbApAQCAtNTIsNyArNTIsNyBAQAogPCEtLQogICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iZ2VuZXJpYy1lbWJlZGRlZCIgLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImdlbmVyaWMtZW1iZWRkZWQiIC8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIC0tPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9NRVRBLUlORi9yYS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL01FVEEtSU5GL3JhLnhtbAppbmRleCAyY2EyZWJjLi4yMWRlYjkzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL01FVEEtSU5GL3JhLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL01FVEEtSU5GL3JhLnhtbApAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8aW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPgogICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXI+CiAgICAgICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXItdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lcgpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYy1jbGFzcz4KICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYz4KICAgICAgICAgICAgICAgICA8L21lc3NhZ2VsaXN0ZW5lcj4KLSAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4KICAgICAgICAgPC9pbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KICAgICAgICAgPGFkbWlub2JqZWN0PgogICAgICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L2FkbWlub2JqZWN0LWludGVyZmFjZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9idWlsZC54bWwKaW5kZXggOTYxNDZmZi4uNDZlYzdjNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKIAogICAgIDxqYXIgamFyZmlsZT0iZ2VuZXJpYy1yYS5yYXIiIGJhc2VkaXI9Ii4iCiAgICAgICAgICBpbmNsdWRlcz0iZ2VuZXJpYy1yYS5qYXIsIE1FVEEtSU5GL3JhLnhtbCIgLz4KLQkgPGVjaG8gbWVzc2FnZT0iaW5zaWRlIGFsbCBvZiByYSBidWlsZC54bWwiPjwvZWNobz4KKyAgICAgPGVjaG8gbWVzc2FnZT0iaW5zaWRlIGFsbCBvZiByYSBidWlsZC54bWwiPjwvZWNobz4KICAgPC90YXJnZXQ+CiA8IS0tIEBTaXZhIFRoaXMgZGVwbG95L3VuZGVwbG95IHRhcmdldCBpcyBuZXZlciBjYWxsZWQgYXMgaXQgaXMgYW4gZW1iZWRkZWQgUkEgLS0+CiAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9idWlsZC54bWwKaW5kZXggZmY4YmNjMi4uODQ5NmY2MCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2J1aWxkLnhtbApAQCAtMzAsOCArMzAsOCBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+Ci0JPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KKyAgICA8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgorICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxqYXIgamFyZmlsZT0iLi4vZ2VuZXJpYy1yYS5qYXIiIGJhc2VkaXI9ImNsYXNzZXMiCiAgICAgICAgICBpbmNsdWRlcz0iY29ubmVjdG9yLyouY2xhc3MiIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCmluZGV4IDU1NTMzZDQuLmY1OWIyYjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgQ29udHJvbHMgewogICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IHJlYWR5TG9jayA9IG5ldyBPYmplY3QoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQppbmRleCA2NTgyMzNlLi5kNzNjODYyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgRGVsaXZlcnlXb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTM2LDcgKzM2LDcgQEAKICAgICBwcml2YXRlIFN0cmluZyBvcDsKICAgICBwcml2YXRlIGJvb2xlYW4ga2VlcENvdW50OwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudGVyID0gMDsKLSAgICAKKwogICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgU3RyaW5nIG9wKSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICB0aGlzLmtlZXBDb3VudCA9IGZhbHNlOwogICAgIH0KIAotICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgCisgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLAogICAgICAgICAgICAgU3RyaW5nIG9wLCBib29sZWFuIGtlZXBDb3VudCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAKICAgICAgICAgZGVidWcoIkVOVEVSLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL01ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKICAgICAgICAgICAgIC8vZXAuYmVmb3JlRGVsaXZlcnkob25NZXNzYWdlKTsKQEAgLTc4LDExICs3OCwxMSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvL2VwLmFmdGVyRGVsaXZlcnkoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC05MywxNCArOTMsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKaW5kZXggMTAwY2FjZS4uZmE5M2Y2MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLmZvcmdldDogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgIH0KQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnByZXBhcmU6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICAgICAgcmV0dXJuIFhBUmVzb3VyY2UuWEFfT0s7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5yZWNvdmVyOiAiICsgZmxhZ1RvU3RyaW5nKGZsYWcpKTsKICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc3RhcnQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2Uuc3RhcnQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpICsgIiwiICsKICAgICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKaW5kZXggYjViMGYwMi4uNGM5YzAxMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIC8qKgogICogY29sbGVjdGlvbiBvZiBtZXNzYWdlcy4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKIApAQCAtNTQsNyArNTQsNyBAQAogICAgICAgIFN0cmluZyBjb21tYW5kICA9IGFyZ3NbMF07CiAgICAgICAgU3RyaW5nIGRlc3ROYW1lID0gYXJnc1sxXTsKICAgICAgICBTdHJpbmcgbWVzc2FnZSAgPSBhcmdzWzJdOwotICAgCisKICAgICAgICBpZiAoISJhZGQiLmVxdWFscyhjb21tYW5kKSkgewogICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQppbmRleCA4NjJmOWZmLi5kMTk5ZDAxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKQEAgLTM4LDExICszOCwxMSBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CiAgICAgICAgIGlmIChyZXNldENvbnRyb2wuZXF1YWxzKCJCRUdJTk5JTkciKSkgewogICAgICAgICAgICBDb250cm9scy5kb25lPWZhbHNlOwotCSAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOwotCX0KKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gZG9uZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQppbmRleCAyZWNlYzYzLi5hOWE4ODgxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgTXlXb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTM1LDcgKzM1LDcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gc3RvcCA9IGZhbHNlOwogICAgIHByaXZhdGUgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5OwogICAgIHByaXZhdGUgV29ya01hbmFnZXIgd207Ci0gICAgCisKICAgICBwdWJsaWMgTXlXb3JrKAogICAgICAgICAgICAgU3RyaW5nIG5hbWUsIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwgV29ya01hbmFnZXIgd20pIHsKICAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTsKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgICAgICBNZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSk7CiAKICAgICAgICAgICAgICAgICAvKgpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtODUsMTQgKzg1LDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKaW5kZXggOTQ2ZDk4Ny4uYmI3OTE4ZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKQEAgLTI0LDkgKzI0LDkgQEAKICAqIHNvIHRoYXQgdGhlIGFwcCBzZXJ2ZXIgY2FuIGluc3RhbnRpYXRlIGFuZCBjb25maWd1cmUKICAqIGl0IGF0IHRoZSBydW50aW1lLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMgCitwdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMKICAgICBpbXBsZW1lbnRzIEFjdGl2YXRpb25TcGVjLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIFN0cmluZyBkZXN0aW5hdGlvbk5hbWU7CkBAIC00Miw3ICs0Miw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvbk5hbWUgKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvbk5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25OYW1lIChTdHJpbmcgbmFtZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25OYW1lKCkgY2FsbGVkLi4uIG5hbWUgPSAiICsgbmFtZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25OYW1lID0gbmFtZTsKQEAgLTUxLDcgKzUxLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uVHlwZSgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25UeXBlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uVHlwZSAoU3RyaW5nIHR5cGUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uVHlwZSAoKSBjYWxsZWQuLi4gdHlwZSA9ICIgKyB0eXBlKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvblR5cGU9IHR5cGU7CkBAIC02MCw3ICs2MCw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0UHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdFByb3A7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdFByb3AgKFN0cmluZyB0ZXN0UHJvcCkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdFByb3AgKCkgY2FsbGVkLi4uIHRlc3RQcm9wID0gIiArIHRlc3RQcm9wKTsKICAgICAgICAgdGhpcy50ZXN0UHJvcCA9IHRlc3RQcm9wOwpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICB0aGlzLnJlc291cmNlYWRhcHRlciA9IHJhOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHZhbGlkYXRlKCkge30gCisgICAgcHVibGljIHZvaWQgdmFsaWRhdGUoKSB7fQogCiAgICAgcHJpdmF0ZSB2b2lkIGRlYnVnIChTdHJpbmcgbWVzc2FnZSkKICAgICB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQppbmRleCA1ODgxM2IzLi40YzVkOThmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKQEAgLTQwLDkgKzQwLDkgQEAKIC8qKgogICogVGhpcyBpcyBhIHNhbXBsZSByZXNvdXJjZSBhZGFwdGVyCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsIAorcHVibGljIGNsYXNzIFNpbXBsZVJlc291cmNlQWRhcHRlckltcGwKIGltcGxlbWVudHMgUmVzb3VyY2VBZGFwdGVyLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIEJvb3RzdHJhcENvbnRleHQgY3R4OwpAQCAtNTgsNyArNTgsNyBAQAogCiAgICAgcHVibGljIHZvaWQKICAgICBzdGFydChCb290c3RyYXBDb250ZXh0IGN0eCkgdGhyb3dzIFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiMDAxLiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKIAogICAgICAgICB0aGlzLmN0eCA9IGN0eDsKQEAgLTY4LDIyICs2OCwyMiBAQAogCiAgICAgICAgIC8vdGVzdGluZyBjcmVhdCB0aW1lcgogICAgICAgICBUaW1lciB0aW1lciA9IG51bGw7Ci0JICB0cnl7Ci0JICAgICAgdGltZXIgPSBjdHguY3JlYXRlVGltZXIoKTsKLQkgIH0gY2F0Y2goVW5hdmFpbGFibGVFeGNlcHRpb24gdWUpIHsKLQkgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIik7Ci0JICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJFcnJvciBmb3JtIGJvb3RzdHJhcCIpOwotCSAgfQorICAgICAgdHJ5eworICAgICAgICAgIHRpbWVyID0gY3R4LmNyZWF0ZVRpbWVyKCk7CisgICAgICB9IGNhdGNoKFVuYXZhaWxhYmxlRXhjZXB0aW9uIHVlKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciIpOworICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiRXJyb3IgZm9ybSBib290c3RyYXAiKTsKKyAgICAgIH0KICAgICAgICAgZGVidWcoIjAwNC4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAKIC8qCiAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAKKwogICAgICAgICAgIFhBVGVybWluYXRvciB4YSA9IGN0eC5nZXRYQVRlcm1pbmF0b3IoKTsKLSAgICAgICAgICAKKwogICAgICAgICAgIFhpZCB4aWQxID0gbmV3IFhJRCgpOwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFhJRDEgPSAiICsgeGlkMSk7Ci0gICAgICAgICAgCisKICAgICAgICAgICBFeGVjdXRpb25Db250ZXh0IGVjID0gbmV3IEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICBlYy5zZXRYaWQoeGlkMSk7CiAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCkBAIC05MywxNCArOTMsMTQgQEAKICAgICAgICAgICB3bS5kb1dvcmsob3V0dywgMSoxMDAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgeGEuY29tbWl0KHhpZDEsIHRydWUpOwogICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgIAorCiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgZXggPSAiICsgZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICB4YS5yb2xsYmFjayh4aWQxKTsKICAgICAgICAgICB9Ci0gICAgICAgICAgCisKICAgICAgICAgICBYaWQgeGlkMiA9IG5ldyBYSUQoKTsKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBYSUQyID0gIiArIHhpZDIpOwotICAgICAgICAgIAorCiAgICAgICAgICAgZWMgPSBuZXcgRXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgIGVjLnNldFhpZCh4aWQyKTsKICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKQEAgLTExNyw3ICsxMTcsNyBAQAogICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgIH0KIAotICAgICAgICAKKwogICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IDM7IGkrKykgewogICAgICAgICAgIFRlc3RXTVdvcmsgdyA9IG5ldyBUZXN0V01Xb3JrKGksIGZhbHNlKTsKICAgICAgICAgICB0cnkgewpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGQUlMOiBDQVVHSFQgZXhjZXB0aW9uIDogaSA9ICIgKyBpKTsKICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICB9IAorICAgICAgICAgIH0KICAgICAgICAgICB9CiAKICAgICAgICAgICBmb3IgKGludCBpID0gMyA7IGkgPCA2OyBpKyspIHsKQEAgLTIwNiwxMiArMjA2LDEyIEBACiAKICAgICBwdWJsaWMgdm9pZAogICAgIGVuZHBvaW50RGVhY3RpdmF0aW9uICgKLSAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZW5kcG9pbnRGYWN0b3J5LCAKKyAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZW5kcG9pbnRGYWN0b3J5LAogICAgICAgICAgICAgQWN0aXZhdGlvblNwZWMgc3BlYykgewogICAgICAgICBkZWJ1ZyAoImVuZHBvaW50RGVhY3RpdmF0aW9uIGNhbGxlZC4uLiIpOwogICAgICAgICAoKFdvcmtEaXNwYXRjaGVyKSB3b3JrKS5zdG9wKCk7CiAgICAgfQotICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdE5hbWUoKSB7CiAgICAgICAgIHJldHVybiB0ZXN0TmFtZTsKICAgICB9CkBAIC0yMjcsNyArMjI3LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NpbXBsZVJlc291cmNlQWRhcHRlckltcGxdID09PiAiICsgbWVzc2FnZSk7CiAgICAgfQogCi0gICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKSAKKyAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpCiAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCmluZGV4IDdlNTg1YTMuLjljZDA2NjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIFRlc3RXTVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtNDIsOCArNDIsOCBAQAogICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlKSB7CiAgICAgICAgIHRoaXMoaWQsIGlzUm9ndWUsIGZhbHNlLCBudWxsKTsKICAgICB9Ci0gICAgCi0gICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUsIAorCisgICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUsCiAgICAgICAgICAgICBib29sZWFuIGRvTmVzdCwgRXhlY3V0aW9uQ29udGV4dCBjdHgpIHsKICAgICAgICAgdGhpcy5pZCA9IGlkOwogICAgICAgICB0aGlzLmlzUm9ndWUgPSBpc1JvZ3VlOwpAQCAtNzcsMTAgKzc3LDEwIEBACiAgICAgICAgICAgICB9IGNhdGNoIChXb3JrRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICAgICAgaWYgKGV4LmdldEVycm9yQ29kZSgpLmVxdWFscygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JrRXhjZXB0aW9uLlRYX0NPTkNVUlJFTlRfV09SS19ESVNBTExPV0VEKSkgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBBU1M6IENBVUdIVCBFWFBFQ1RFRCA9ICIgKyBleC5nZXRFcnJvckNvZGUoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGQUlMOiBDQVVHSFQgVU5FWFBFQ1RFRCA9ICIgKyBleC5nZXRFcnJvckNvZGUoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtOTIsNyArOTIsNyBAQAogICAgICAgICAgICAgICAgIGVjLnNldFRyYW5zYWN0aW9uVGltZW91dCg1KjEwMDApOyAvLzUgc2Vjb25kcwogICAgICAgICAgICAgICAgIHdtLmRvV29yayhuZXN0ZWRXb3JrLCAxKjEwMDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgIkZBSUw6IENBVUdIVCBVTkVYUEVDVEVEID0gIiArIGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKaW5kZXggMzRhNjA0Zi4uY2Q5OGM0NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBXb3JrRGlzcGF0Y2hlciBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC00NCwxMSArNDQsMTEgQEAKICAgICBwcml2YXRlIEFjdGl2YXRpb25TcGVjIHNwZWM7CiAgICAgcHJpdmF0ZSBXb3JrTWFuYWdlciB3bTsKICAgICBwcml2YXRlIFhBVGVybWluYXRvciB4YTsKLSAgICAKKwogICAgIHB1YmxpYyBXb3JrRGlzcGF0Y2hlcigKICAgICAgICAgICAgIFN0cmluZyBpZCwKICAgICAgICAgICAgIEJvb3RzdHJhcENvbnRleHQgY3R4LAotICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LCAKKyAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwKICAgICAgICAgICAgIEFjdGl2YXRpb25TcGVjIHNwZWMpIHsKICAgICAgICAgdGhpcy5pZCAgICAgID0gaWQ7CiAgICAgICAgIHRoaXMuY3R4ICAgICA9IGN0eDsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAKICAgICAgICAgZGVidWcoIkVOVEVSLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIGRlYnVnKCJXQUlULi4uIik7CkBAIC04MywyNiArODMsMjYgQEAKICAgICAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgICAgICBNZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwotICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7IAorICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7CiAgICAgICAgICAgICAgICAgICAgIC8vd20uZG9Xb3JrKGQsIDAsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChuZXcgRmFrZVhBUmVzb3VyY2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIGludCBudW1PZk1lc3NhZ2VzID0gNTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9pbXBvcnRpbmcgdHJhbnNhY3Rpb24KIAogICAgICAgICAgICAgICAgICAgICAvL3dyaXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBFeGVjdXRpb25Db250ZXh0IGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwogCi0gICAgICAgICAgICAgICAgICAgIERlbGl2ZXJ5V29yayB3ID0gCisgICAgICAgICAgICAgICAgICAgIERlbGl2ZXJ5V29yayB3ID0KICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJXUklURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJET05FIFdSSVRFIFRPIERCIik7CiAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IG51bU9mTWVzc2FnZXM7CiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvcm9sbGJhY2sKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7CkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIkRFTEVURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTUwLDcgKzE1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJERUxFVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTE5NSw3ICsxOTUsNyBAQAogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBpZiAoWEFSZXNvdXJjZS5YQV9PSyA9PSB4YS5wcmVwYXJlKGVjLmdldFhpZCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiWEEgUFJFUEFSRS9DT01NSVQuIERPTkUgV1JJVEUgVE8gREIgIik7CkBAIC0yMDcsMTkgKzIwNywxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gMzsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZSBhbGwuCiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgMSwgIkRFTEVURV9BTEwiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkRPTkUgREVMRVRFIEFMTCBGUk9NIERCIik7CiAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IDA7CiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjQzLDcgKzI0Myw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC0yNTgsMTQgKzI1OCwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0yODgsMTMgKzI4OCwxMyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9TbGVlcCBmb3IgNSBzZWNvbmRzCiAgICAgICAgICAgICAvL1RocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoNSoxMDAwKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgLy9Ob3RpZnkgdGhlIGNsaWVudCB0byBjaGVjayB0aGUgcmVzdWx0cwotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnkoKTsgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeSgpOworCiAgICAgICAgICAgICAgICAgLy9XYWl0IHVudGlsIHJlc3VsdHMgYXJlIHZlcmlmaWVkIGJ5IHRoZSBjbGllbnQKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2sud2FpdCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2sud2FpdCgpOwogCiAgICAgICAgICAgICAgICAgaWYgKHN0b3ApIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzEwLDcgKzMxMCw3IEBACiAgICAgICAgICAgICBDb250cm9scy5kb25lID0gdHJ1ZTsKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICAvL05vdGlmeSB0aGUgY2xpZW50IHRvIGNoZWNrIHRoZSByZXN1bHRzCi0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeSgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKaW5kZXggNzdkYmYzNC4uNmJkOWU1NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQpAQCAtMzYsOCArMzYsOCBAQAogICAgIHB1YmxpYyBpbnQgYnJhbmNoUXVhbGlmaWVyOwogICAgIHB1YmxpYyBpbnQgZ2xvYmFsVHhJRDsKIAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OyAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsgCisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7CisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7CiAKICAgICBwdWJsaWMgWElEKCkgewogICAgICAgICBpbnQgZm9vID0gSUQrKzsKQEAgLTU1LDEwICs1NSwxMCBAQAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICAgLy8gSXQgY2FuJ3QgYmUgZXF1YWwKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBvdGhlciA9IChYSUQpbzsgICAgICAgICAgICAgICAgICAgLy8gVGhlIG90aGVyIFhJRCwgbm93IHByb3Blcmx5IGNhc3QKLSAgICAgICAgCi0gICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElEIAorCisgICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElECiAgICAgICAgICAgICAgICAgJiYgdGhpcy5icmFuY2hRdWFsaWZpZXIgPT0gb3RoZXIuYnJhbmNoUXVhbGlmaWVyCiAgICAgICAgICAgICAgICAgJiYgdGhpcy5nbG9iYWxUeElEID09IG90aGVyLmdsb2JhbFR4SUQpIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTgsNyArOTgsNyBAQAogICAgICAgICAgICAgICAgICJmb3JtYXRJRCgiICAgICArIGZvcm1hdElEICAgICArICIpLCAiICsKICAgICAgICAgICAgICAgICAiYnJhbmNoUXVhbGlmaWVyICgiICsgYnJhbmNoUXVhbGlmaWVyICsgIiksICIgKwogICAgICAgICAgICAgICAgICJnbG9iYWxUeElEKCIgKyBnbG9iYWxUeElEICsgIil9Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9hcHAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9hcHAvYnVpbGQueG1sCmluZGV4IGM2MGU2MDkuLjJiZDY5ZjUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvYXBwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL2FwcC9idWlsZC54bWwKQEAgLTM2LDggKzM2LDggQEAKICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyIi8+CiAgPCEtLQogICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImdlbmVyaWMtZW1iZWRkZWQiLz4KLQk8cGFyYW0gbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJnZW5lcmljLWVtYmVkZGVkIi8+CisgICAgPHBhcmFtIG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgogICAgPC9hbnRjYWxsPgogIC0tPgogICA8L3RhcmdldD4KQEAgLTU1LDggKzU1LDggQEAKICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgPGZpbGVzZXQgZGlyPSIuLi9yYSI+CiAgICAgICAgICAgIDwhLS0gIDxpbmNsdWRlIG5hbWU9IioucmFyIi8+IC0tPgotCSAgIDxpbmNsdWRlIG5hbWU9InNpdmFqZGJjcmEucmFyIi8+Ci0JICAgPGluY2x1ZGUgbmFtZT0iZ2VuZXJpYy1yYS5yYXIiLz4KKyAgICAgICA8aW5jbHVkZSBuYW1lPSJzaXZhamRiY3JhLnJhciIvPgorICAgICAgIDxpbmNsdWRlIG5hbWU9ImdlbmVyaWMtcmEucmFyIi8+CiAgICAgICAgPC9maWxlc2V0PgogICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9L2xpYiI+CiAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJlcG9ydGVyLmphciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwppbmRleCBjY2YyNDMzLi4xNTA1MTUwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiBlamItamFyLnhtbD1NRVRBLUlORi9lamItamFyLnhtbAogc3VuLWVqYi1qYXIueG1sPU1FVEEtSU5GL3N1bi1lamItamFyLnhtbApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQppbmRleCA5MGJhMDU1Li5iODQyMGYzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQpAQCAtMTIzLDE3ICsxMjMsMTcgQEAKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCJkYnVzZXIiLCJkYnBhc3N3b3JkIik7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPSAKKyAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9CiAgICAgICAgICAgICAgICAgICAiU0VMRUNUIGlkIGZyb20gbWVzc2FnZXMgd2hlcmUgaWQgPSAnUVEnIjsKICAgICAgICAgICAgICAgICAgIFJlc3VsdFNldCByZXN1bHRzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKyAKKyAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArCiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmdldEludCgiYmFsYW5jZSIpICsgIiBkb2xsYXJzIik7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICBzdG10LmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWFkIG9uZSBhY2NvdW50XG4iKTsKICAgICAgICAgICAgICAgICAqLwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTQ1MGQwZC4uNTYzNTQzOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvZGVmYXVsdFJlc291cmNlL3NlcnZsZXQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJodHRwOmhvc3QiIHZhbHVlPSJsb2NhbGhvc3QiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvTUVUQS1JTkYvcmEueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9NRVRBLUlORi9yYS54bWwKaW5kZXggMmNhMmViYy4uMjFkZWI5MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9NRVRBLUlORi9yYS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9NRVRBLUlORi9yYS54bWwKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPGluYm91bmQtcmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4KICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyPgogICAgICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyLXR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWMtY2xhc3M+CiAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWM+CiAgICAgICAgICAgICAgICAgPC9tZXNzYWdlbGlzdGVuZXI+Ci0gICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgIDwvaW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+CiAgICAgICAgIDxhZG1pbm9iamVjdD4KICAgICAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvYnVpbGQueG1sCmluZGV4IDk2MTQ2ZmYuLjQ2ZWM3YzQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAKICAgICA8amFyIGphcmZpbGU9ImdlbmVyaWMtcmEucmFyIiBiYXNlZGlyPSIuIgogICAgICAgICAgaW5jbHVkZXM9ImdlbmVyaWMtcmEuamFyLCBNRVRBLUlORi9yYS54bWwiIC8+Ci0JIDxlY2hvIG1lc3NhZ2U9Imluc2lkZSBhbGwgb2YgcmEgYnVpbGQueG1sIj48L2VjaG8+CisgICAgIDxlY2hvIG1lc3NhZ2U9Imluc2lkZSBhbGwgb2YgcmEgYnVpbGQueG1sIj48L2VjaG8+CiAgIDwvdGFyZ2V0PgogPCEtLSBAU2l2YSBUaGlzIGRlcGxveS91bmRlcGxveSB0YXJnZXQgaXMgbmV2ZXIgY2FsbGVkIGFzIGl0IGlzIGFuIGVtYmVkZGVkIFJBIC0tPgogICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvYnVpbGQueG1sCmluZGV4IGZmOGJjYzIuLjg0OTZmNjAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9idWlsZC54bWwKQEAgLTMwLDggKzMwLDggQEAKIAogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iID4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgotCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CisgICAgPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KKyAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgogICAgIDwvYW50Y2FsbD4KICAgICA8amFyIGphcmZpbGU9Ii4uL2dlbmVyaWMtcmEuamFyIiBiYXNlZGlyPSJjbGFzc2VzIgogICAgICAgICAgaW5jbHVkZXM9ImNvbm5lY3Rvci8qLmNsYXNzIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQppbmRleCA1NTUzM2Q0Li5mNTliMmIzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIENvbnRyb2xzIHsKICAgICBwdWJsaWMgc3RhdGljIE9iamVjdCByZWFkeUxvY2sgPSBuZXcgT2JqZWN0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKaW5kZXggNjU4MjMzZS4uZDczYzg2MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIERlbGl2ZXJ5V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zNiw3ICszNiw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgb3A7CiAgICAgcHJpdmF0ZSBib29sZWFuIGtlZXBDb3VudDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnRlciA9IDA7Ci0gICAgCisKICAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIFN0cmluZyBvcCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgdGhpcy5rZWVwQ291bnQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIAorICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywKICAgICAgICAgICAgIFN0cmluZyBvcCwgYm9vbGVhbiBrZWVwQ291bnQpIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC01NSw3ICs1NSw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9NZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7CiAgICAgICAgICAgICAvL2VwLmJlZm9yZURlbGl2ZXJ5KG9uTWVzc2FnZSk7CkBAIC03OCwxMSArNzgsMTEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy9lcC5hZnRlckRlbGl2ZXJ5KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtOTMsMTQgKzkzLDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCmluZGV4IDEwMGNhY2UuLmZhOTNmNjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwogICAgIH0KIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5mb3JnZXQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICB9CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5wcmVwYXJlOiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgICAgIHJldHVybiBYQVJlc291cmNlLlhBX09LOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBYaWRbXSByZWNvdmVyKGludCBmbGFnKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucmVjb3ZlcjogIiArIGZsYWdUb1N0cmluZyhmbGFnKSk7CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtNjYsNyArNjYsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnN0YXJ0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSArICIsIiArCiAgICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCmluZGV4IGI1YjBmMDIuLjRjOWMwMTIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAvKioKICAqIGNvbGxlY3Rpb24gb2YgbWVzc2FnZXMuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CiAKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICBTdHJpbmcgY29tbWFuZCAgPSBhcmdzWzBdOwogICAgICAgIFN0cmluZyBkZXN0TmFtZSA9IGFyZ3NbMV07CiAgICAgICAgU3RyaW5nIG1lc3NhZ2UgID0gYXJnc1syXTsKLSAgIAorCiAgICAgICAgaWYgKCEiYWRkIi5lcXVhbHMoY29tbWFuZCkpIHsKICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKaW5kZXggODYyZjlmZi4uZDE5OWQwMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCkBAIC0zOCwxMSArMzgsMTEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOwogICAgICAgICBpZiAocmVzZXRDb250cm9sLmVxdWFscygiQkVHSU5OSU5HIikpIHsKICAgICAgICAgICAgQ29udHJvbHMuZG9uZT1mYWxzZTsKLQkgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKLQl9CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGRvbmUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKaW5kZXggMmVjZWM2My4uYTlhODg4MSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE15V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zNSw3ICszNSw3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIHN0b3AgPSBmYWxzZTsKICAgICBwcml2YXRlIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeTsKICAgICBwcml2YXRlIFdvcmtNYW5hZ2VyIHdtOwotICAgIAorCiAgICAgcHVibGljIE15V29yaygKICAgICAgICAgICAgIFN0cmluZyBuYW1lLCBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksIFdvcmtNYW5hZ2VyIHdtKSB7CiAgICAgICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpOwogCiAgICAgICAgICAgICAgICAgLyoKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTg1LDE0ICs4NSwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCmluZGV4IDk0NmQ5ODcuLmJiNzkxOGUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiAgKiBzbyB0aGF0IHRoZSBhcHAgc2VydmVyIGNhbiBpbnN0YW50aWF0ZSBhbmQgY29uZmlndXJlCiAgKiBpdCBhdCB0aGUgcnVudGltZS4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwotcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjIAorcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjCiAgICAgaW1wbGVtZW50cyBBY3RpdmF0aW9uU3BlYywgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgZGVzdGluYXRpb25OYW1lOwpAQCAtNDIsNyArNDIsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25OYW1lICgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25OYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uTmFtZSAoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uTmFtZSgpIGNhbGxlZC4uLiBuYW1lID0gIiArIG5hbWUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uTmFtZSA9IG5hbWU7CkBAIC01MSw3ICs1MSw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvblR5cGUoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uVHlwZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvblR5cGUgKFN0cmluZyB0eXBlKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvblR5cGUgKCkgY2FsbGVkLi4uIHR5cGUgPSAiICsgdHlwZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25UeXBlPSB0eXBlOwpAQCAtNjAsNyArNjAsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdFByb3AoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLnRlc3RQcm9wOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RQcm9wIChTdHJpbmcgdGVzdFByb3ApIHsKICAgICAgICAgZGVidWcoInNldFRlc3RQcm9wICgpIGNhbGxlZC4uLiB0ZXN0UHJvcCA9ICIgKyB0ZXN0UHJvcCk7CiAgICAgICAgIHRoaXMudGVzdFByb3AgPSB0ZXN0UHJvcDsKQEAgLTc2LDcgKzc2LDcgQEAKICAgICAgICAgdGhpcy5yZXNvdXJjZWFkYXB0ZXIgPSByYTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCB2YWxpZGF0ZSgpIHt9IAorICAgIHB1YmxpYyB2b2lkIHZhbGlkYXRlKCkge30KIAogICAgIHByaXZhdGUgdm9pZCBkZWJ1ZyAoU3RyaW5nIG1lc3NhZ2UpCiAgICAgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKaW5kZXggNTg4MTNiMy4uNGM1ZDk4ZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCkBAIC00MCw5ICs0MCw5IEBACiAvKioKICAqIFRoaXMgaXMgYSBzYW1wbGUgcmVzb3VyY2UgYWRhcHRlcgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbCAKK3B1YmxpYyBjbGFzcyBTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsCiBpbXBsZW1lbnRzIFJlc291cmNlQWRhcHRlciwgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJpdmF0ZSBCb290c3RyYXBDb250ZXh0IGN0eDsKQEAgLTU4LDcgKzU4LDcgQEAKIAogICAgIHB1YmxpYyB2b2lkCiAgICAgc3RhcnQoQm9vdHN0cmFwQ29udGV4dCBjdHgpIHRocm93cyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIjAwMS4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAKICAgICAgICAgdGhpcy5jdHggPSBjdHg7CkBAIC02OCwyMiArNjgsMjIgQEAKIAogICAgICAgICAvL3Rlc3RpbmcgY3JlYXQgdGltZXIKICAgICAgICAgVGltZXIgdGltZXIgPSBudWxsOwotCSAgdHJ5ewotCSAgICAgIHRpbWVyID0gY3R4LmNyZWF0ZVRpbWVyKCk7Ci0JICB9IGNhdGNoKFVuYXZhaWxhYmxlRXhjZXB0aW9uIHVlKSB7Ci0JICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciIpOwotCSAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiRXJyb3IgZm9ybSBib290c3RyYXAiKTsKLQkgIH0KKyAgICAgIHRyeXsKKyAgICAgICAgICB0aW1lciA9IGN0eC5jcmVhdGVUaW1lcigpOworICAgICAgfSBjYXRjaChVbmF2YWlsYWJsZUV4Y2VwdGlvbiB1ZSkgeworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IiKTsKKyAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIGZvcm0gYm9vdHN0cmFwIik7CisgICAgICB9CiAgICAgICAgIGRlYnVnKCIwMDQuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogCiAvKgogICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgCisKICAgICAgICAgICBYQVRlcm1pbmF0b3IgeGEgPSBjdHguZ2V0WEFUZXJtaW5hdG9yKCk7Ci0gICAgICAgICAgCisKICAgICAgICAgICBYaWQgeGlkMSA9IG5ldyBYSUQoKTsKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBYSUQxID0gIiArIHhpZDEpOwotICAgICAgICAgIAorCiAgICAgICAgICAgRXhlY3V0aW9uQ29udGV4dCBlYyA9IG5ldyBFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgZWMuc2V0WGlkKHhpZDEpOwogICAgICAgICAgIGVjLnNldFRyYW5zYWN0aW9uVGltZW91dCg1KjEwMDApOyAvLzUgc2Vjb25kcwpAQCAtOTMsMTQgKzkzLDE0IEBACiAgICAgICAgICAgd20uZG9Xb3JrKG91dHcsIDEqMTAwMCwgZWMsIG51bGwpOwogICAgICAgICAgIHhhLmNvbW1pdCh4aWQxLCB0cnVlKTsKICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAKKwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIGV4ID0gIiArIGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgeGEucm9sbGJhY2soeGlkMSk7CiAgICAgICAgICAgfQotICAgICAgICAgIAorCiAgICAgICAgICAgWGlkIHhpZDIgPSBuZXcgWElEKCk7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgWElEMiA9ICIgKyB4aWQyKTsKLSAgICAgICAgICAKKwogICAgICAgICAgIGVjID0gbmV3IEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICBlYy5zZXRYaWQoeGlkMik7CiAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCkBAIC0xMTcsNyArMTE3LDcgQEAKICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICB9CiAKLSAgICAgICAgCisKICAgICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCAzOyBpKyspIHsKICAgICAgICAgICBUZXN0V01Xb3JrIHcgPSBuZXcgVGVzdFdNV29yayhpLCBmYWxzZSk7CiAgICAgICAgICAgdHJ5IHsKQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRkFJTDogQ0FVR0hUIGV4Y2VwdGlvbiA6IGkgPSAiICsgaSk7CiAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgfSAKKyAgICAgICAgICB9CiAgICAgICAgICAgfQogCiAgICAgICAgICAgZm9yIChpbnQgaSA9IDMgOyBpIDwgNjsgaSsrKSB7CkBAIC0yMDYsMTIgKzIwNiwxMiBAQAogCiAgICAgcHVibGljIHZvaWQKICAgICBlbmRwb2ludERlYWN0aXZhdGlvbiAoCi0gICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGVuZHBvaW50RmFjdG9yeSwgCisgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGVuZHBvaW50RmFjdG9yeSwKICAgICAgICAgICAgIEFjdGl2YXRpb25TcGVjIHNwZWMpIHsKICAgICAgICAgZGVidWcgKCJlbmRwb2ludERlYWN0aXZhdGlvbiBjYWxsZWQuLi4iKTsKICAgICAgICAgKChXb3JrRGlzcGF0Y2hlcikgd29yaykuc3RvcCgpOwogICAgIH0KLSAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3ROYW1lKCkgewogICAgICAgICByZXR1cm4gdGVzdE5hbWU7CiAgICAgfQpAQCAtMjI3LDcgKzIyNyw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsXSA9PT4gIiArIG1lc3NhZ2UpOwogICAgIH0KIAotICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykgCisgICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKQogICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQppbmRleCA3ZTU4NWEzLi45Y2QwNjYzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBUZXN0V01Xb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTQyLDggKzQyLDggQEAKICAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSkgewogICAgICAgICB0aGlzKGlkLCBpc1JvZ3VlLCBmYWxzZSwgbnVsbCk7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLCAKKworICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLAogICAgICAgICAgICAgYm9vbGVhbiBkb05lc3QsIEV4ZWN1dGlvbkNvbnRleHQgY3R4KSB7CiAgICAgICAgIHRoaXMuaWQgPSBpZDsKICAgICAgICAgdGhpcy5pc1JvZ3VlID0gaXNSb2d1ZTsKQEAgLTc3LDEwICs3NywxMCBAQAogICAgICAgICAgICAgfSBjYXRjaCAoV29ya0V4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIGlmIChleC5nZXRFcnJvckNvZGUoKS5lcXVhbHMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya0V4Y2VwdGlvbi5UWF9DT05DVVJSRU5UX1dPUktfRElTQUxMT1dFRCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQVNTOiBDQVVHSFQgRVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKICAgICAgICAgICAgICAgICB3bS5kb1dvcmsobmVzdGVkV29yaywgMSoxMDAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICJGQUlMOiBDQVVHSFQgVU5FWFBFQ1RFRCA9ICIgKyBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCmluZGV4IDM0YTYwNGYuLmNkOThjNDUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgV29ya0Rpc3BhdGNoZXIgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtNDQsMTEgKzQ0LDExIEBACiAgICAgcHJpdmF0ZSBBY3RpdmF0aW9uU3BlYyBzcGVjOwogICAgIHByaXZhdGUgV29ya01hbmFnZXIgd207CiAgICAgcHJpdmF0ZSBYQVRlcm1pbmF0b3IgeGE7Ci0gICAgCisKICAgICBwdWJsaWMgV29ya0Rpc3BhdGNoZXIoCiAgICAgICAgICAgICBTdHJpbmcgaWQsCiAgICAgICAgICAgICBCb290c3RyYXBDb250ZXh0IGN0eCwKLSAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwgCisgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIHRoaXMuaWQgICAgICA9IGlkOwogICAgICAgICB0aGlzLmN0eCAgICAgPSBjdHg7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICBkZWJ1ZygiV0FJVC4uLiIpOwpAQCAtODMsMjYgKzgzLDI2IEBACiAgICAgICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKTsKIAogICAgICAgICAgICAgICAgIGlmICghZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOyAKKyAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOwogICAgICAgICAgICAgICAgICAgICAvL3dtLmRvV29yayhkLCAwLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobmV3IEZha2VYQVJlc291cmNlKCkpOwogICAgICAgICAgICAgICAgICAgICBpbnQgbnVtT2ZNZXNzYWdlcyA9IDU7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vaW1wb3J0aW5nIHRyYW5zYWN0aW9uCiAKICAgICAgICAgICAgICAgICAgICAgLy93cml0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgRXhlY3V0aW9uQ29udGV4dCBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKIAotICAgICAgICAgICAgICAgICAgICBEZWxpdmVyeVdvcmsgdyA9IAorICAgICAgICAgICAgICAgICAgICBEZWxpdmVyeVdvcmsgdyA9CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiV1JJVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTExMCw3ICsxMTAsNyBAQAogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiRE9ORSBXUklURSBUTyBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSBudW1PZk1lc3NhZ2VzOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL3JvbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJERUxFVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTE1MCw3ICsxNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiREVMRVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xOTUsNyArMTk1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKFhBUmVzb3VyY2UuWEFfT0sgPT0geGEucHJlcGFyZShlYy5nZXRYaWQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlhBIFBSRVBBUkUvQ09NTUlULiBET05FIFdSSVRFIFRPIERCICIpOwpAQCAtMjA3LDE5ICsyMDcsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IDM7CiAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUgYWxsLgogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIDEsICJERUxFVEVfQUxMIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJET05FIERFTEVURSBBTEwgRlJPTSBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAwOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI0Myw3ICsyNDMsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtMjU4LDE0ICsyNTgsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMjg4LDEzICsyODgsMTMgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vU2xlZXAgZm9yIDUgc2Vjb25kcwogICAgICAgICAgICAgLy9UaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDUqMTAwMCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIC8vTm90aWZ5IHRoZSBjbGllbnQgdG8gY2hlY2sgdGhlIHJlc3VsdHMKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5KCk7IAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnkoKTsKKwogICAgICAgICAgICAgICAgIC8vV2FpdCB1bnRpbCByZXN1bHRzIGFyZSB2ZXJpZmllZCBieSB0aGUgY2xpZW50Ci0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsKIAogICAgICAgICAgICAgICAgIGlmIChzdG9wKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTMxMCw3ICszMTAsNyBAQAogICAgICAgICAgICAgQ29udHJvbHMuZG9uZSA9IHRydWU7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgLy9Ob3RpZnkgdGhlIGNsaWVudCB0byBjaGVjayB0aGUgcmVzdWx0cwotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnkoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCmluZGV4IDc3ZGJmMzQuLjZiZDllNTcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKQEAgLTM2LDggKzM2LDggQEAKICAgICBwdWJsaWMgaW50IGJyYW5jaFF1YWxpZmllcjsKICAgICBwdWJsaWMgaW50IGdsb2JhbFR4SUQ7CiAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsgCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7IAorICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OworICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OwogCiAgICAgcHVibGljIFhJRCgpIHsKICAgICAgICAgaW50IGZvbyA9IElEKys7CkBAIC01NSwxMCArNTUsMTAgQEAKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgIC8vIEl0IGNhbid0IGJlIGVxdWFsCiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgb3RoZXIgPSAoWElEKW87ICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvdGhlciBYSUQsIG5vdyBwcm9wZXJseSBjYXN0Ci0gICAgICAgIAotICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRCAKKworICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRAogICAgICAgICAgICAgICAgICYmIHRoaXMuYnJhbmNoUXVhbGlmaWVyID09IG90aGVyLmJyYW5jaFF1YWxpZmllcgogICAgICAgICAgICAgICAgICYmIHRoaXMuZ2xvYmFsVHhJRCA9PSBvdGhlci5nbG9iYWxUeElEKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk4LDcgKzk4LDcgQEAKICAgICAgICAgICAgICAgICAiZm9ybWF0SUQoIiAgICAgKyBmb3JtYXRJRCAgICAgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImJyYW5jaFF1YWxpZmllciAoIiArIGJyYW5jaFF1YWxpZmllciArICIpLCAiICsKICAgICAgICAgICAgICAgICAiZ2xvYmFsVHhJRCgiICsgZ2xvYmFsVHhJRCArICIpfSIpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gczsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGUyY2M3NWQuLmRjMTljOWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTYgKzE1LDE2IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXN1YmNsYXNzaW5nIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zdWJjbGFzc2luZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0ic3ViY2xhc3NpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2J1aWxkLnhtbAppbmRleCBjZjIxZTFkLi5lMWI1ZjIwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvYnVpbGQueG1sCkBAIC0zMiwxNCArMzIsMTQgQEAKICAgICAmY29tbW9uQnVpbGQ7CiAgICAgJmNvbW1vblJ1bjsKICAgICAmdGVzdHByb3BlcnRpZXM7Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsIGRlcGxveS1lYXIsIHNldHVwLCBydW4tZWFyLCB1bnNldHVwLCB1bmRlcGxveS1lYXIiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8YW50IGRpcj0icmEiIHRhcmdldD0iY2xlYW4iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29ubmVjdG9yIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL3NpbXBsZUJhbmsuc3FsIi8+CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wQmFua1RhYmxlcy5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50IGRpcj0icmEiIHRhcmdldD0iY29tcGlsZSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KQEAgLTY1LDkgKzY1LDkgQEAKICAgICAgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IENvbXBpbGluZyB0ZXN0IHNvdXJjZSBmaWxlcyIgbGV2ZWw9InZlcmJvc2UiLz4KICAgICAgIDxqYXZhYyBzcmNkaXI9InNlcnZsZXQiCiAgICAgICAgICBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKLQkgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH06cmEvcHVibGlzaC9pbnRlcm5hbC9jbGFzc2VzIgorICAgICBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofTpyYS9wdWJsaXNoL2ludGVybmFsL2NsYXNzZXMiCiAgICAgICAgICBkZWJ1Zz0ib24iCi0JIGZhaWxvbmVycm9yPSJ0cnVlIi8+CisgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+CiAgICAgIDwvdGFyZ2V0PgogCiAKQEAgLTc2LDQxICs3Niw0MSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgPGFudCBkaXI9InJhIiB0YXJnZXQ9ImFzc2VtYmxlIi8+CiAKICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICA8L2FudGNhbGw+Ci0gICAgICAgCisKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgPC9hbnRjYWxsPgogCi0gICAgCisKICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+ICAgIAotICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS9NRVRBLUlORiIvPiAgICAKKyAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgorICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS9NRVRBLUlORiIvPgogICAgICAgICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3IvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJ0cnVlIiAgZmlsdGVyaW5nPSJ0cnVlIj4KICAgICAgICAgICA8L2NvcHk+CiAgICAgICAgICAgPGNvcHkgZmlsZT0iZGVzY3JpcHRvci9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIgdG9maWxlPSIke2Fzc2VtYmxlLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJ0cnVlIiAgZmlsdGVyaW5nPSJ0cnVlIj4KICAgICAgICAgICA8L2NvcHk+Ci0gICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIAorICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIgogICAgICBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+CiAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi8qLnhtbCIvPgotICAgIDwvZmlsZXNldD4gIAorICAgIDwvZmlsZXNldD4KICAgICA8ZmlsZXNldCBkaXI9InJhL3B1Ymxpc2gvbGliIj4KICAgICAgIDxpbmNsdWRlIG5hbWU9IioucmFyIi8+CiAgICAgPC9maWxlc2V0PgogICAgIDwvZWFyPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktZWFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTE4LDI4ICsxMTgsMjggQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS13YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4td2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViY2xpZW50LWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9ImVtYmVkZGVkd2ViIChzdGFuZC1hbG9uZSB3YXIgYmFzZWQpIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJlbWJlZGRlZHdlYiAoc3RhbmQtYWxvbmUgd2FyIGJhc2VkKSIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJlbWJlZGRlZHdlYiAoZWFyIGJhc2VkKSIvPgotCTwvYW50Y2FsbD4KKyAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0iZW1iZWRkZWR3ZWIgKGVhciBiYXNlZCkiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZXh0cmEtcGFyYW1zIiB2YWx1ZT0iLS1jYXNjYWRlPXRydWUiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LXdhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZGVzY3JpcHRvci9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2Rlc2NyaXB0b3IvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKaW5kZXggZGIxMjk4MC4uOTU3Yjg4NCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZGVzY3JpcHRvci9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9kZXNjcmlwdG9yL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCkBAIC01OCw0ICs1OCw0IEBACiAgPHJlc291cmNlLWFkYXB0ZXItY29uZmlnIHJlc291cmNlLWFkYXB0ZXItbmFtZT0id2ViLXN1YmNsYXNzaW5nQXBwI2pkYmNyYSI+CiAgICAgICA8cHJvcGVydHkgbmFtZT0iUkFQcm9wZXJ0eSIgdmFsdWU9IlZBTElEIj48L3Byb3BlcnR5PgogICAgIDwvcmVzb3VyY2UtYWRhcHRlci1jb25maWc+Ci08L3Jlc291cmNlcz4gCis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggNzk5NWNlMy4uNTFmM2JlYyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI5LDIwICsyOSwyMCBAQAogICAgICAgICA8cmVzLXJlZi1uYW1lPmpkYmMvU2ltcGxlQmFuazwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmphdmE6YXBwL2pkYmMvZWpiLXN1YmNsYXNzaW5nPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+IAotICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4gCi0gICAgIDxiZWFuLXBvb2w+IAotICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4gCi0gICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgIDwvYmVhbi1wb29sPiAKLSAgICAgIDxiZWFuLWNhY2hlPiAKLSAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4gCi0gICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4gCi0gICAgICA8L2JlYW4tY2FjaGU+IAorICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4KKyAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+CisgICAgIDxiZWFuLXBvb2w+CisgICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPgorICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+CisgICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICA8L2JlYW4tcG9vbD4KKyAgICAgIDxiZWFuLWNhY2hlPgorICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPgorICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgorICAgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogICAgIDxlamI+CiAgICAgICA8ZWpiLW5hbWU+Q3VzdG9tZXJDaGVja2luZ0VKQjwvZWpiLW5hbWU+CkBAIC01MSwyMCArNTEsMjAgQEAKICAgICAgICAgPHJlcy1yZWYtbmFtZT5qZGJjL1NpbXBsZUJhbms8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qYXZhOmFwcC9qZGJjL2VqYi1zdWJjbGFzc2luZzwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPiAKLSAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+IAotICAgICA8YmVhbi1wb29sPiAKLSAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+IAotICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+IAotICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+IAorICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4KKyAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+CisgICAgIDxiZWFuLXBvb2w+CisgICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPgorICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+CisgICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4KICAgICAgICAgPHBvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KLSAgICAgIDwvYmVhbi1wb29sPiAKLSAgICAgIDxiZWFuLWNhY2hlPiAKKyAgICAgIDwvYmVhbi1wb29sPgorICAgICAgPGJlYW4tY2FjaGU+CiAgICAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+CiAgICAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KICAgICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkxSVTwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+Ci0gICAgICA8L2JlYW4tY2FjaGU+IAorICAgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogICA8L2VudGVycHJpc2UtYmVhbnM+CiA8L3N1bi1lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZWpiL0N1c3RvbWVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9lamIvQ3VzdG9tZXIuamF2YQppbmRleCA4YTliMTA1Li4xNjBlYWI5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9lamIvQ3VzdG9tZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9lamIvQ3VzdG9tZXIuamF2YQpAQCAtNDQsNCArNDQsNCBAQAogCiB9CiAKLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhCmluZGV4IDYxZGUyOTEuLmIzNDFjMzQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YQpAQCAtMjAsNCArMjAsNCBAQAogewogfQogCi0gIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQppbmRleCBlZTBkMTdjLi40YjU0NDQ0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEKQEAgLTk0LDUgKzk0LDUgQEAKICAgfQogCiB9Ci0gICAgCi0gICAgCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZWpiL0N1c3RvbWVyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9lamIvQ3VzdG9tZXJFSkIuamF2YQppbmRleCAwNTIwYjYwLi4wNzIyMGRiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9lamIvQ3VzdG9tZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9lamIvQ3VzdG9tZXJFSkIuamF2YQpAQCAtNTMsNyArNTMsNyBAQAogCiAgIHB1YmxpYyBTdHJpbmcgZ2V0QWRkcmVzczEoKQogICB7Ci0gICAgcmV0dXJuIGFkZHJlc3MxOyAKKyAgICByZXR1cm4gYWRkcmVzczE7CiAgIH0KIAogICBwdWJsaWMgU3RyaW5nIGdldEFkZHJlc3MyKCkKQEAgLTEzOSw3ICsxMzksNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNRTCBleGNlcHRpb24gb2NjdXJlZCBpbiBlamJSZW1vdmUgbWV0aG9kIik7CiAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICB9Ci0gICAgCisKICAgfQogCiAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkKQEAgLTIwNiwxMiArMjA2LDEyIEBACiAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1FMRXhjZXB0aW9uIG9jY3VycmVkIGluIGVqYkxvYWQoKSBtZXRob2QiKTsKICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfSAgIAorICAgIH0KICAgfQogCiAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIH0KLSAgICAgIAotICAgIAotICAgIAorCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhCmluZGV4IDMzOGM5MjEuLjg4M2UwNGEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEKQEAgLTIwLDQgKzIwLDQgQEAKIHsKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhCmluZGV4IGYzMGI1MDYuLmIwY2U3YjUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEKQEAgLTk1LDYgKzk1LDYgQEAKICAgfQogCiB9Ci0gICAgICAKLSAgICAKLSAgICAKKworCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGVlMmVjYTAuLmZkMjFjM2QgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvYnVpbGQucHJvcGVydGllcwpAQCAtMTQsNyArMTQsNyBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKICMKIAotICAgIAorCiAjIyMgQ29tcG9uZW50IFByb3BlcnRpZXMgIyMjCiBzcmMuZGlyPXNyYwogY29tcG9uZW50LnB1Ymxpc2guaG9tZT0uCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9idWlsZC54bWwKaW5kZXggZWJlYTg3Yi4uMzRmNjM2NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL2J1aWxkLnhtbApAQCAtMjMsNjIgKzIzLDYyIEBACiAKIDxwcm9qZWN0IG5hbWU9IkpEQkNDb25uZWN0b3IgdG9wIGxldmVsIiBkZWZhdWx0PSJidWlsZCI+CiAgICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2pkYmNyYS9zcGkiLz4KLSAgICAKKwogICAgICZjb21tb247CiAgICAgJnRlc3Rjb21tb247CiAgICAgPHByb3BlcnR5IGZpbGU9Ii4vYnVpbGQucHJvcGVydGllcyIvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSxhc3NlbWJsZSIgLz4KLSAgICAgICAgICAKKwogCiAgICAgPCEtLSBpbml0LiBJbml0aWFsaXphdGlvbiBpbnZvbHZlcyBjcmVhdGluZyBwdWJsaXNoaW5nIGRpcmVjdG9yaWVzIGFuZAotICAgICAgICAgT1Mgc3BlY2lmaWMgdGFyZ2V0cy4gLS0+IAorICAgICAgICAgT1Mgc3BlY2lmaWMgdGFyZ2V0cy4gLS0+CiAgICAgPHRhcmdldCBuYW1lPSJpbml0IiBkZXNjcmlwdGlvbj0iJHtjb21wb25lbnQubmFtZX0gaW5pdGlhbGl6YXRpb24iPgogICAgICAgICA8dHN0YW1wPgogICAgICAgICAgICAgPGZvcm1hdCBwcm9wZXJ0eT0ic3RhcnQudGltZSIgcGF0dGVybj0iTU0vZGQveXl5eSBoaDptbSBhYSIvPgotICAgICAgICA8L3RzdGFtcD4gICAgCisgICAgICAgIDwvdHN0YW1wPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJCdWlsZGluZyBjb21wb25lbnQgJHtjb21wb25lbnQubmFtZX0iLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIvPiAgICAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgPCEtLSBjb21waWxlIC0tPiAKKyAgICA8IS0tIGNvbXBpbGUgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0IgotICAgICAgICAgICAgZGVzY3JpcHRpb249IkNvbXBpbGUgY29tL3N1bi8qIGNvbS9pcGxhbmV0Lyogc291cmNlcyI+ICAKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDb21waWxlIGNvbS9zdW4vKiBjb20vaXBsYW5ldC8qIHNvdXJjZXMiPgogICAgICAgICA8IS0tPGVjaG8gbWVzc2FnZT0iQ29ubmVjdG9yIGFwaSByZXNpZGVzIGluICR7Y29ubmVjdG9yLWFwaS5qYXJ9Ii8+LS0+Ci0gICAgICAgIDxqYXZhYyBzcmNkaXI9IiR7c3JjLmRpcn0iIAorICAgICAgICA8amF2YWMgc3JjZGlyPSIke3NyYy5kaXJ9IgogICAgICAgICAgICAgICAgZGVzdGRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IgotCSAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+Ci0JICAgICAgIDxjbGFzc3BhdGg+Ci0JICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzIj4KLQkgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qYXIiIC8+Ci0JICAgICAgICAgIDwvZmlsZXNldD4KLQkgICAgICAgPC9jbGFzc3BhdGg+CisgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4KKyAgICAgICAgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMiPgorICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIgLz4KKyAgICAgICAgICAgICAgPC9maWxlc2V0PgorICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImNvbS9zdW4vamRiY3JhLyoqIi8+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJjb20vc3VuL2FwcHNlcnYvKioiLz4KICAgICAgICAgPC9qYXZhYz4KICAgICA8L3RhcmdldD4KLSAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQiLz4KIAotICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSI+ICAgIAotICAgIAkKLQk8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjLmphciIgCi0gICAgICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosIAotICAgICAgICAgICAgY29tL3N1bi9hcHBzZXJ2LyoqLyosIGNvbS9zdW4vamRiY3JhL3V0aWwvKiovKiwgY29tL3N1bi9qZGJjcmEvY29tbW9uLyoqLyoiLz4gCi0gICAJCi0gICAgICAgIDxjb3B5IGZpbGU9IiR7c3JjLmRpcn0vY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwiIAotICAgICAgICAgICAgICAgIHRvZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiPgorCisgICAgPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiYy5qYXIiCisgICAgICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosCisgICAgICAgICAgICBjb20vc3VuL2FwcHNlcnYvKiovKiwgY29tL3N1bi9qZGJjcmEvdXRpbC8qKi8qLCBjb20vc3VuL2pkYmNyYS9jb21tb24vKiovKiIvPgorCisgICAgICAgIDxjb3B5IGZpbGU9IiR7c3JjLmRpcn0vY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwiCisgICAgICAgICAgICAgICAgdG9maWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjcmEucmFyIiAKLQkJYmFzZWRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9IiBpbmNsdWRlcz0iamRiYy5qYXIiPgorICAgICAgIDxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmNyYS5yYXIiCisgICAgICAgIGJhc2VkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIgaW5jbHVkZXM9ImpkYmMuamFyIj4KIAotICAgCQk8bWV0YWluZiBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgogCi0gICAJPGRlbGV0ZSBmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIi8+Ci0JCisgICAgICAgPGRlbGV0ZSBmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIi8+CisKICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXNjcmlwdGlvbj0iQ2xlYW4gdGhlIGJ1aWxkIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQppbmRleCA5ZjgzOTlhLi5iNmVmMzBiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCkBAIC0yMCwxNSArMjAsMTUgQEAKIGltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CiAKIC8qKgotICogVGhlIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24gCisgKiBUaGUgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+IGltcGxlbWVudGF0aW9uIG9mIFN1bk9ORSBhcHBsaWNhdGlvbgogICogc2VydmVyIHdpbGwgaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLiBBbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHdvdWxkIGJlIGFibGUKLSAqIHRvIHVzZSB0aGlzIGludGVyZmFjZSB0byBkbyB0aGUgZXh0ZW5kZWQgZnVuY3Rpb25hbGl0eSBleHBvc2VkIGJ5IFN1bk9ORSAKKyAqIHRvIHVzZSB0aGlzIGludGVyZmFjZSB0byBkbyB0aGUgZXh0ZW5kZWQgZnVuY3Rpb25hbGl0eSBleHBvc2VkIGJ5IFN1bk9ORQogICogYXBwbGljYXRpb24gc2VydmVyLgotICogPHA+QSBzYW1wbGUgY29kZSBmb3IgZ2V0dGluZyBkcml2ZXIncyBjb25uZWN0aW9uIGltcGxlbWVudGF0aW9uIHdvdWxkIGxpa2UgCisgKiA8cD5BIHNhbXBsZSBjb2RlIGZvciBnZXR0aW5nIGRyaXZlcidzIGNvbm5lY3Rpb24gaW1wbGVtZW50YXRpb24gd291bGQgbGlrZQogICogdGhlIGZvbGxvd2luZy4KICAqIDxwcmU+CiAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgIGNvbS5zdW4uYXBwc2Vydi5EYXRhU291cmNlIGRzID0gKGNvbS5zdW4uYXBwc2Vydi5EYXRhU091cmNlKSBpYy5sb29rdXAoImpkYmMvUG9pbnRCYXNlIik7IAorICAgICBjb20uc3VuLmFwcHNlcnYuRGF0YVNvdXJjZSBkcyA9IChjb20uc3VuLmFwcHNlcnYuRGF0YVNPdXJjZSkgaWMubG9va3VwKCJqZGJjL1BvaW50QmFzZSIpOwogICAgICBDb25uZWN0aW9uIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgQ29ubmVjdGlvbiBkcml2ZXJjb24gPSBkcy5nZXRDb25uZWN0aW9uKGNvbik7CiAKQEAgLTM2LDEzICszNiwxMyBAQAogCiAgICAgIGNvbi5jbG9zZSgpOwogICAgPC9wcmU+Ci0gKiAKKyAqCiAgKiBAYXV0aG9yIEJpbm9kIFAuRwogICovCiBwdWJsaWMgaW50ZXJmYWNlIERhdGFTb3VyY2UgZXh0ZW5kcyBqYXZheC5zcWwuRGF0YVNvdXJjZSB7CiAKICAgICAvKioKLSAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBTUUxDb25uZWN0aW9uIGZyb20gdGhlIENvbm5lY3Rpb24gd3JhcHBlciAKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBTUUxDb25uZWN0aW9uIGZyb20gdGhlIENvbm5lY3Rpb24gd3JhcHBlcgogICAgICAqIGltcGxlbWVudGF0aW9uIG9mIFN1bk9ORSBhcHBsaWNhdGlvbiBzZXJ2ZXIuIElmIGFuIGFjdHVhbCBjb25uZWN0aW9uIGlzCiAgICAgICogc3VwcGxpZWQgYXMgYXJndW1lbnQsIHRoZW4gaXQgd2lsbCBiZSBqdXN0IHJldHVybmVkLgogICAgICAqCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKaW5kZXggNzAwMjlmMS4uZTk2NmY5OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQpAQCAtMjcsMjIgKzI3LDIyIEBACiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwogLyoqCi0gKiBVdGlsaXR5IGNsYXNzLCB3aGljaCB3b3VsZCBjcmVhdGUgbmVjZXNzYXJ5IERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUgCisgKiBVdGlsaXR5IGNsYXNzLCB3aGljaCB3b3VsZCBjcmVhdGUgbmVjZXNzYXJ5IERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUKICAqIHNwZWNpZmljYXRpb24uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKLSAqIEBzZWUJCWNvbS5zdW4uamRiY3JhLmNvbW1vbi5EYXRhU291cmNlU3BlYwotICogQHNlZQkJY29tLnN1bi5qZGJjcmEudXRpbC5NZXRob2RFeGNlY3V0b3IKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCisgKiBAc2VlICAgICAgICBjb20uc3VuLmpkYmNyYS5jb21tb24uRGF0YVNvdXJjZVNwZWMKKyAqIEBzZWUgICAgICAgIGNvbS5zdW4uamRiY3JhLnV0aWwuTWV0aG9kRXhjZWN1dG9yCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlT2JqZWN0QnVpbGRlciBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCiAgICAgcHJpdmF0ZSBEYXRhU291cmNlU3BlYyBzcGVjOwotICAgIAorCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgZHJpdmVyUHJvcGVydGllcyA9IG51bGw7Ci0gICAgCi0gICAgcHJpdmF0ZSBNZXRob2RFeGVjdXRvciBleGVjdXRvciA9IG51bGw7ICAgIAotICAgIAorCisgICAgcHJpdmF0ZSBNZXRob2RFeGVjdXRvciBleGVjdXRvciA9IG51bGw7CisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTAsMTY5ICs1MCwxNjkgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3QgYSBEYXRhU291cmNlIE9iamVjdCBmcm9tIHRoZSBzcGVjLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzcGVjCTxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcGVjICAgIDxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIoRGF0YVNvdXJjZVNwZWMgc3BlYykgewotICAgIAl0aGlzLnNwZWMgPSBzcGVjOwotICAgIAlleGVjdXRvciA9IG5ldyBNZXRob2RFeGVjdXRvcigpOworICAgICAgICB0aGlzLnNwZWMgPSBzcGVjOworICAgICAgICBleGVjdXRvciA9IG5ldyBNZXRob2RFeGVjdXRvcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdCB0aGUgRGF0YVNvdXJjZSBPYmplY3QgZnJvbSB0aGUgc3BlYy4KICAgICAgKgotICAgICAqIEByZXR1cm4JT2JqZWN0IGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBEYXRhU291cmNlU3BlYy4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBpZiB0aGUgY2xhc3MgaXMgbm90IGZvdW5kIG9yIHNvbWUgaXNzdWUgaW4gZXhlY3V0aW5nCi0gICAgICoJCXNvbWUgbWV0aG9kLgorICAgICAqIEByZXR1cm4gICAgT2JqZWN0IGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBEYXRhU291cmNlU3BlYy4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBpZiB0aGUgY2xhc3MgaXMgbm90IGZvdW5kIG9yIHNvbWUgaXNzdWUgaW4gZXhlY3V0aW5nCisgICAgICogICAgICAgIHNvbWUgbWV0aG9kLgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgY29uc3RydWN0RGF0YVNvdXJjZU9iamVjdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJZHJpdmVyUHJvcGVydGllcyA9IHBhcnNlRHJpdmVyUHJvcGVydGllcyhzcGVjKTsKKyAgICAgICAgZHJpdmVyUHJvcGVydGllcyA9IHBhcnNlRHJpdmVyUHJvcGVydGllcyhzcGVjKTsKICAgICAgICAgT2JqZWN0IGRhdGFTb3VyY2VPYmplY3QgPSBnZXREYXRhU291cmNlT2JqZWN0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVjMtVEVTVCA6ICIgICsgZGF0YVNvdXJjZU9iamVjdCk7CiAgICAgICAgIE1ldGhvZFtdIG1ldGhvZHMgPSBkYXRhU291cmNlT2JqZWN0LmdldENsYXNzKCkuZ2V0TWV0aG9kcygpOwogICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG1ldGhvZHNbaV0uZ2V0TmFtZSgpOwotCSAgICBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRVc2VyIikpewkgICAgCQotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBhc3N3b3JkIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ2luVGltZU91dCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9nV3JpdGVyIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HV1JJVEVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhYmFzZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFTb3VyY2VOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERlc2NyaXB0aW9uIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXROZXR3b3JrUHJvdG9jb2wiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBvcnROdW1iZXIiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRSb2xlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRTZXJ2ZXJOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhTdGF0ZW1lbnRzIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYU1RBVEVNRU5UUyksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0SW5pdGlhbFBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuSU5JVElBTFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNaW5Qb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1JTlBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhQb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhJZGxlVGltZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWElETEVUSU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQcm9wZXJ0eUN5Y2xlIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUFJPUEVSVFlDWUNMRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKGRyaXZlclByb3BlcnRpZXMuY29udGFpbnNLZXkobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKSl7Ci0JICAgIAlWZWN0b3IgdmFsdWVzID0gKFZlY3RvcikgZHJpdmVyUHJvcGVydGllcy5nZXQobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKTsKLQkgICAgICAgIGV4ZWN1dG9yLnJ1bk1ldGhvZChtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QsIHZhbHVlcyk7Ci0JICAgIH0KKyAgICAgICAgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0VXNlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQYXNzd29yZCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dpblRpbWVPdXQiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ1dyaXRlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR1dSSVRFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YWJhc2VOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhU291cmNlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREZXNjcmlwdGlvbiIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXROZXR3b3JrUHJvdG9jb2wiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBvcnROdW1iZXIiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRSb2xlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRTZXJ2ZXJOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4U3RhdGVtZW50cyIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFNUQVRFTUVOVFMpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldEluaXRpYWxQb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLklOSVRJQUxQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWluUG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NSU5QT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4UG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4SWRsZVRpbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhJRExFVElNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UHJvcGVydHlDeWNsZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBST1BFUlRZQ1lDTEUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChkcml2ZXJQcm9wZXJ0aWVzLmNvbnRhaW5zS2V5KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSkpeworICAgICAgICAgICAgVmVjdG9yIHZhbHVlcyA9IChWZWN0b3IpIGRyaXZlclByb3BlcnRpZXMuZ2V0KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSk7CisgICAgICAgICAgICBleGVjdXRvci5ydW5NZXRob2QobWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0LCB2YWx1ZXMpOworICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2VPYmplY3Q7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSBleHRyYSBkcml2ZXIgcHJvcGVydGllcyBmcm9tIHRoZSBEYXRhU291cmNlU3BlYyBvYmplY3QgYW5kCiAgICAgICogcGFyc2UgdGhlbSB0byBhIHNldCBvZiBtZXRob2ROYW1lIGFuZCBwYXJhbWV0ZXJzLiBQcmVwYXJlIGEgaGFzaHRhYmxlCiAgICAgICogY29udGFpbmluZyB0aGVzZSBkZXRhaWxzIGFuZCByZXR1cm4uCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3BlYwk8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHJldHVybglIYXNodGFibGUgY29udGFpbmluZyBtZXRob2QgbmFtZXMgYW5kIHBhcmFtZXRlcnMsCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglJZiBkZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGFuZCBwcm9wZXJ0eSBzdHJpbmcKLSAgICAgKgkJCQkJaXMgbm90IG51bGwuCisgICAgICogQHBhcmFtICAgIHNwZWMgICAgPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgSGFzaHRhYmxlIGNvbnRhaW5pbmcgbWV0aG9kIG5hbWVzIGFuZCBwYXJhbWV0ZXJzLAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgSWYgZGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBhbmQgcHJvcGVydHkgc3RyaW5nCisgICAgICogICAgICAgICAgICAgICAgICAgIGlzIG5vdCBudWxsLgogICAgICAqLwogICAgIHByaXZhdGUgSGFzaHRhYmxlIHBhcnNlRHJpdmVyUHJvcGVydGllcyhEYXRhU291cmNlU3BlYyBzcGVjKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCVN0cmluZyBkZWxpbSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CisgICAgICAgIFN0cmluZyBkZWxpbSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAKICAgICAgICAgU3RyaW5nIHByb3AgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTKTsKLQlpZiAoIHByb3AgPT0gbnVsbCB8fCBwcm9wLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgIHJldHVybiBuZXcgSGFzaHRhYmxlKCk7Ci0JfSBlbHNlIGlmIChkZWxpbSA9PSBudWxsIHx8IGRlbGltLmVxdWFscygiIikpIHsKLQkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uICgiRGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiIpOwotCX0KLQkKLQlIYXNodGFibGUgcHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoKTsKLQlkZWxpbSA9IGRlbGltLnRyaW0oKTsJCi0JU3RyaW5nIHNlcCA9IGRlbGltK2RlbGltOwotCWludCBzZXBMZW4gPSBzZXAubGVuZ3RoKCk7Ci0JU3RyaW5nIGNhY2hlID0gcHJvcDsKLQlWZWN0b3IgbWV0aG9kcyA9IG5ldyBWZWN0b3IoKTsKLQkKLQl3aGlsZSAoY2FjaGUuaW5kZXhPZihzZXApICE9IC0xKSB7Ci0JICAgIGludCBpbmRleCA9IGNhY2hlLmluZGV4T2Yoc2VwKTsKLQkgICAgU3RyaW5nIG5hbWUgPSBjYWNoZS5zdWJzdHJpbmcoMCxpbmRleCk7Ci0JICAgIGlmIChuYW1lLnRyaW0oKSAhPSAiIikgewotCSAgICAgICAgbWV0aG9kcy5hZGQobmFtZSk7Ci0JICAgIAljYWNoZSA9IGNhY2hlLnN1YnN0cmluZyhpbmRleCtzZXBMZW4pOwotCSAgICB9Ci0JfQotCQotICAgIAlFbnVtZXJhdGlvbiBhbGxNZXRob2RzID0gbWV0aG9kcy5lbGVtZW50cygpOwotICAgIAl3aGlsZSAoYWxsTWV0aG9kcy5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgIAkgICAgU3RyaW5nIG9uZU1ldGhvZCA9IChTdHJpbmcpIGFsbE1ldGhvZHMubmV4dEVsZW1lbnQoKTsgICAgCSAgICAKLSAgICAJICAgIGlmICghb25lTWV0aG9kLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0gICAgCSAgICAJU3RyaW5nIG1ldGhvZE5hbWUgPSBudWxsOwotICAgIAkgICAgCVZlY3RvciBwYXJtcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAJICAgIAlTdHJpbmdUb2tlbml6ZXIgbWV0aG9kRGV0YWlscyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIob25lTWV0aG9kLGRlbGltKTsKLQkJZm9yIChpbnQgaT0wOyBtZXRob2REZXRhaWxzLmhhc01vcmVUb2tlbnMoKTtpKysgKSB7Ci0JCSAgICBTdHJpbmcgdG9rZW4gPSAoU3RyaW5nKSBtZXRob2REZXRhaWxzLm5leHRUb2tlbigpOwotCQkgICAgaWYgKGk9PTApIHsKLQkJICAgIAltZXRob2ROYW1lID0gdG9rZW4udG9VcHBlckNhc2UoKTsKLQkJICAgIH0gZWxzZSB7Ci0JCSAgICAJcGFybXMuYWRkKHRva2VuKTsJCSAgICAJCi0JCSAgICB9Ci0JCX0KLQkJcHJvcGVydGllcy5wdXQobWV0aG9kTmFtZSxwYXJtcyk7Ci0gICAgCSAgICB9ICAgIAkgICAgCi0gICAgCX0KLSAgICAJcmV0dXJuIHByb3BlcnRpZXM7CisgICAgaWYgKCBwcm9wID09IG51bGwgfHwgcHJvcC50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICByZXR1cm4gbmV3IEhhc2h0YWJsZSgpOworICAgIH0gZWxzZSBpZiAoZGVsaW0gPT0gbnVsbCB8fCBkZWxpbS5lcXVhbHMoIiIpKSB7CisgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbiAoIkRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24iKTsKICAgICB9Ci0gICAgCisKKyAgICBIYXNodGFibGUgcHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoKTsKKyAgICBkZWxpbSA9IGRlbGltLnRyaW0oKTsKKyAgICBTdHJpbmcgc2VwID0gZGVsaW0rZGVsaW07CisgICAgaW50IHNlcExlbiA9IHNlcC5sZW5ndGgoKTsKKyAgICBTdHJpbmcgY2FjaGUgPSBwcm9wOworICAgIFZlY3RvciBtZXRob2RzID0gbmV3IFZlY3RvcigpOworCisgICAgd2hpbGUgKGNhY2hlLmluZGV4T2Yoc2VwKSAhPSAtMSkgeworICAgICAgICBpbnQgaW5kZXggPSBjYWNoZS5pbmRleE9mKHNlcCk7CisgICAgICAgIFN0cmluZyBuYW1lID0gY2FjaGUuc3Vic3RyaW5nKDAsaW5kZXgpOworICAgICAgICBpZiAobmFtZS50cmltKCkgIT0gIiIpIHsKKyAgICAgICAgICAgIG1ldGhvZHMuYWRkKG5hbWUpOworICAgICAgICAgICAgY2FjaGUgPSBjYWNoZS5zdWJzdHJpbmcoaW5kZXgrc2VwTGVuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICAgICBFbnVtZXJhdGlvbiBhbGxNZXRob2RzID0gbWV0aG9kcy5lbGVtZW50cygpOworICAgICAgICB3aGlsZSAoYWxsTWV0aG9kcy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgU3RyaW5nIG9uZU1ldGhvZCA9IChTdHJpbmcpIGFsbE1ldGhvZHMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICghb25lTWV0aG9kLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBudWxsOworICAgICAgICAgICAgICAgIFZlY3RvciBwYXJtcyA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXIgbWV0aG9kRGV0YWlscyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIob25lTWV0aG9kLGRlbGltKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBtZXRob2REZXRhaWxzLmhhc01vcmVUb2tlbnMoKTtpKysgKSB7CisgICAgICAgICAgICBTdHJpbmcgdG9rZW4gPSAoU3RyaW5nKSBtZXRob2REZXRhaWxzLm5leHRUb2tlbigpOworICAgICAgICAgICAgaWYgKGk9PTApIHsKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gdG9rZW4udG9VcHBlckNhc2UoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFybXMuYWRkKHRva2VuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwcm9wZXJ0aWVzLnB1dChtZXRob2ROYW1lLHBhcm1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHJvcGVydGllczsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZSBzcGVjLgogICAgICAqCi0gICAgICogQHJldHVybglJbml0aWFsIERhdGFTb3VyY2UgT2JqZWN0IGluc3RhbmNlLgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IElmIGNsYXNzIG5hbWUgaXMgd3Jvbmcgb3IgY2xhc3NwYXRoIGlzIG5vdCBzZXQKLSAgICAgKgkJcHJvcGVybHkuCisgICAgICogQHJldHVybiAgICBJbml0aWFsIERhdGFTb3VyY2UgT2JqZWN0IGluc3RhbmNlLgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IElmIGNsYXNzIG5hbWUgaXMgd3Jvbmcgb3IgY2xhc3NwYXRoIGlzIG5vdCBzZXQKKyAgICAgKiAgICAgICAgcHJvcGVybHkuCiAgICAgICovCiAgICAgcHJpdmF0ZSBPYmplY3QgZ2V0RGF0YVNvdXJjZU9iamVjdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJU3RyaW5nIGNsYXNzTmFtZSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7Ci0gICAgICAgIHRyeSB7ICAgICAgICAgICAgCisgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOworICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgZGF0YVNvdXJjZUNsYXNzID0gQ2xhc3MuZm9yTmFtZShjbGFzc05hbWUpOwogICAgICAgICAgICAgT2JqZWN0IGRhdGFTb3VyY2VPYmplY3QgPSBkYXRhU291cmNlQ2xhc3MubmV3SW5zdGFuY2UoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVjMtVEVTVCA6ICIgICsgZGF0YVNvdXJjZU9iamVjdCk7CiAgICAgICAgICAgICByZXR1cm4gZGF0YVNvdXJjZU9iamVjdDsKICAgICAgICAgfSBjYXRjaChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGNmbmUpewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jbmZlX2RzIiwgY2ZuZSk7Ci0JCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NuZmVfZHMiLCBjZm5lKTsKKwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDbGFzcyBOYW1lIGlzIHdyb25nIG9yIENsYXNzIHBhdGggaXMgbm90IHNldCBmb3IgOiIgKyBjbGFzc05hbWUpOwogICAgICAgICB9IGNhdGNoKEluc3RhbnRpYXRpb25FeGNlcHRpb24gY2UpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaW5zdCIsIGNsYXNzTmFtZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2luc3QiLCBjbGFzc05hbWUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJFcnJvciBpbiBpbnN0YW50aWF0aW5nIiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBjZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hY2NfaW5zdCIsIGNsYXNzTmFtZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2FjY19pbnN0IiwgY2xhc3NOYW1lKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIEVycm9yIGluIGluc3RhbnRpYXRpbmciICsgY2xhc3NOYW1lKTsKICAgICAgICAgfQogICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQppbmRleCBlZjZjNGM5Li4zZGMxNTRkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCkBAIC0xOSw5MiArMTksOTIgQEAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwogCiAvKioKLSAqIEVuY2Fwc3VsYXRlIHRoZSBEYXRhU291cmNlIG9iamVjdCBkZXRhaWxzIG9idGFpbmVkIGZyb20gCisgKiBFbmNhcHN1bGF0ZSB0aGUgRGF0YVNvdXJjZSBvYmplY3QgZGV0YWlscyBvYnRhaW5lZCBmcm9tCiAgKiBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlU3BlYyBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUk5BTUUJCQkJPSAxOyAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVNTV09SRAkJCQk9IDI7ICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVUkwJCQkJCT0gMzsgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR0lOVElNRU9VVAkJCT0gNDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dXUklURVIJCQkJPSA1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFCQVNFTkFNRQkJCT0gNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFTkFNRQkJCT0gNzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDUklQVElPTgkJCQk9IDg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS1BST1RPQ09MCQkJPSA5OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUlROVU1CRVIJCQkJPSAxMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0xFTkFNRQkJCQk9IDExOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFUlZFUk5BTUUJCQkJPSAxMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhTVEFURU1FTlRTCQkJPSAxMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTklUSUFMUE9PTFNJWkUJCQk9IDE0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTlBPT0xTSVpFCQkJCT0gMTU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYUE9PTFNJWkUJCQkJPSAxNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhJRExFVElNRQkJCQk9IDE3OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZQ1lDTEUJCQk9IDE4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERSSVZFUlBST1BFUlRJRVMJCQk9IDE5OyAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTEFTU05BTUUJCQkJPSAyMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUxJTUlURVIJCQkJPSAyMTsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYQURBVEFTT1VSQ0UJCQk9IDIyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0UJCQkJPSAyMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OUE9PTERBVEFTT1VSQ0UJCT0gMjQ7Ci0gICAgICAKLSAgICAvL0dKQ0lOVCAgICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQJPSAyNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OTUVUSE9ECQkJPSAyNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OVEFCTEVOQU1FCQkJPSAyNzsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUUkFOU0FDVElPTklTT0xBVElPTgkJPSAyODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHVUFSQU5URUVJU09MQVRJT05MRVZFTAkJPSAyOTsKLSAgICAgICAgICAgIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRVJOQU1FICAgICAgICAgICAgICAgID0gMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVNTV09SRCAgICAgICAgICAgICAgICA9IDI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVJMICAgICAgICAgICAgICAgICAgICA9IDM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HSU5USU1FT1VUICAgICAgICAgICAgPSA0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR1dSSVRFUiAgICAgICAgICAgICAgICA9IDU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQUJBU0VOQU1FICAgICAgICAgICAgPSA2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0VOQU1FICAgICAgICAgICAgPSA3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFU0NSSVBUSU9OICAgICAgICAgICAgICAgID0gODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLUFJPVE9DT0wgICAgICAgICAgICA9IDk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9SVE5VTUJFUiAgICAgICAgICAgICAgICA9IDEwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPTEVOQU1FICAgICAgICAgICAgICAgID0gMTE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVkVSTkFNRSAgICAgICAgICAgICAgICA9IDEyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFNUQVRFTUVOVFMgICAgICAgICAgICA9IDEzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOSVRJQUxQT09MU0laRSAgICAgICAgICAgID0gMTQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOUE9PTFNJWkUgICAgICAgICAgICAgICAgPSAxNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhQT09MU0laRSAgICAgICAgICAgICAgICA9IDE2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWElETEVUSU1FICAgICAgICAgICAgICAgID0gMTc7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlDWUNMRSAgICAgICAgICAgID0gMTg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRFJJVkVSUFJPUEVSVElFUyAgICAgICAgICAgID0gMTk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xBU1NOQU1FICAgICAgICAgICAgICAgID0gMjA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVMSU1JVEVSICAgICAgICAgICAgICAgID0gMjE7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYQURBVEFTT1VSQ0UgICAgICAgICAgICA9IDIyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0UgICAgICAgICAgICAgICAgPSAyMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OUE9PTERBVEFTT1VSQ0UgICAgICAgID0gMjQ7CisKKyAgICAvL0dKQ0lOVAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQgICAgPSAyNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OTUVUSE9EICAgICAgICAgICAgPSAyNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OVEFCTEVOQU1FICAgICAgICAgICAgPSAyNzsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRSQU5TQUNUSU9OSVNPTEFUSU9OICAgICAgICA9IDI4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdVQVJBTlRFRUlTT0xBVElPTkxFVkVMICAgICAgICA9IDI5OworCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgZGV0YWlscyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgcHJvcGVydHkuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcHJvcGVydHkJUHJvcGVydHkgTmFtZSB0byBiZSBzZXQuCi0gICAgICogQHBhcmFtCXZhbHVlCQlWYWx1ZSBvZiBwcm9wZXJ0eSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIHByb3BlcnR5ICAgIFByb3BlcnR5IE5hbWUgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICB2YWx1ZSAgICAgICAgVmFsdWUgb2YgcHJvcGVydHkgdG8gYmUgc2V0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERldGFpbChpbnQgcHJvcGVydHksIFN0cmluZyB2YWx1ZSkgewotICAgIAlkZXRhaWxzLnB1dChuZXcgSW50ZWdlcihwcm9wZXJ0eSksdmFsdWUpOworICAgICAgICBkZXRhaWxzLnB1dChuZXcgSW50ZWdlcihwcm9wZXJ0eSksdmFsdWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUgb2YgcHJvcGVydHkKICAgICAgKgotICAgICAqIEByZXR1cm4JVmFsdWUgb2YgdGhlIHByb3BlcnR5LgorICAgICAqIEByZXR1cm4gICAgVmFsdWUgb2YgdGhlIHByb3BlcnR5LgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGV0YWlsKGludCBwcm9wZXJ0eSkgewotICAgIAlpZiAoZGV0YWlscy5jb250YWluc0tleShuZXcgSW50ZWdlcihwcm9wZXJ0eSkpKSB7Ci0gICAgCSAgICByZXR1cm4gKFN0cmluZykgZGV0YWlscy5nZXQobmV3IEludGVnZXIocHJvcGVydHkpKTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHJldHVybiBudWxsOwotICAgIAl9ICAgIAkKKyAgICAgICAgaWYgKGRldGFpbHMuY29udGFpbnNLZXkobmV3IEludGVnZXIocHJvcGVydHkpKSkgeworICAgICAgICAgICAgcmV0dXJuIChTdHJpbmcpIGRldGFpbHMuZ2V0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyB3aGV0aGVyIHR3byA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0cwogICAgICAqIGFyZSBlcXVhbCBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb2JqCUluc3RhbmNlIG9mIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG9iaiAgICBJbnN0YW5jZSBvZiA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7Ci0gICAgCWlmIChvYmogaW5zdGFuY2VvZiBEYXRhU291cmNlU3BlYykgewotICAgIAkgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5lcXVhbHMoKChEYXRhU291cmNlU3BlYylvYmopLmRldGFpbHMpOwotICAgIAl9Ci0gICAgCXJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGFTb3VyY2VTcGVjKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmVxdWFscygoKERhdGFTb3VyY2VTcGVjKW9iaikuZGV0YWlscyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgaGFzaENvZGUgb2YgdGhpcyA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybgloYXNoQ29kZSBvZiB0aGlzIG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2hDb2RlIG9mIHRoaXMgb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgCXJldHVybiB0aGlzLmRldGFpbHMuaGFzaENvZGUoKTsKLSAgICB9ICAgIAorICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmhhc2hDb2RlKCk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbAppbmRleCBlZjQzOGZjLi4zYjRmYWViIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iLiIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL2NvbW1vbiIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0zNiwxMyArMzYsMTMgQEAKIAogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxMyIgZGVwZW5kcz0iY29tcGlsZSIvPgogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxNCIgZGVwZW5kcz0iY29tcGlsZSIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxMyIgZGVwZW5kcz0icGFja2FnZSIvPgogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxNCIgZGVwZW5kcz0icGFja2FnZSIvPgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxMyIgZGVwZW5kcz0iY29tcGlsZTEzLCBwYWNrYWdlMTMiLz4KICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgotICAgIAorCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCmluZGV4IGE5NTZkOTcuLjExYWQ3NDYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKQEAgLTI0LDI0ICsyNCwyNCBAQAogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yOwogCiAvKioKLSAqIEhvbGRzIHRoZSBqYXZhLnNxbC5Db25uZWN0aW9uIG9iamVjdCwgd2hpY2ggaXMgdG8gYmUgCisgKiBIb2xkcyB0aGUgamF2YS5zcWwuQ29ubmVjdGlvbiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlCiAgKiBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uIHByb2dyYW0uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0aW9uSG9sZGVyIGltcGxlbWVudHMgQ29ubmVjdGlvbnsgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvbkhvbGRlciBpbXBsZW1lbnRzIENvbm5lY3Rpb257CiAKICAgICBwcml2YXRlIENvbm5lY3Rpb24gY29uOwotICAgIAorCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKLSAgICBwcml2YXRlIGJvb2xlYW4gd3JhcHBlZEFscmVhZHkgPSBmYWxzZTsgICAgCi0gICAgCisKKyAgICBwcml2YXRlIGJvb2xlYW4gd3JhcHBlZEFscmVhZHkgPSBmYWxzZTsKKwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0Nsb3NlZCA9IGZhbHNlOwotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIHZhbGlkID0gdHJ1ZTsKLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBhY3RpdmUgPSBmYWxzZTsKICAgICAvKioKICAgICAgKiBUaGUgYWN0aXZlIGZsYWcgaXMgZmFsc2Ugd2hlbiB0aGUgY29ubmVjdGlvbiBoYW5kbGUgaXMKQEAgLTUzLDIxOSArNTMsMjE5IEBACiAgICAgICogZnVuY3Rpb24sIHRoZSBhYm92ZSBtZXRob2QgaW52b2NhdGlvbiBzdWNjZWVkczsgb3RoZXJ3aXNlCiAgICAgICogYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KICAgICAgKi8KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYSBDb25uZWN0aW9uIGhvbGRlci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uSG9sZGVyKENvbm5lY3Rpb24gY29uLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLmNvbiA9IGNvbjsKICAgICAgICAgdGhpcy5tYyAgPSBtYzsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gdGhpcyBob2xkZXIgb2JqZWN0LgotICAgICAqIAotICAgICAqIEByZXR1cm4JQ29ubmVjdGlvbiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIENvbm5lY3Rpb24gb2JqZWN0LgogICAgICAqLwogICAgIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbigpIHsKLSAgICAJcmV0dXJuIGNvbjsKKyAgICAgICAgcmV0dXJuIGNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBmbGFnIHRvIGluZGljYXRlIHRoYXQsIHRoZSBjb25uZWN0aW9uIGlzIHdyYXBwZWQgYWxyZWFkeSBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jd3JhcEZsYWcJCisgICAgICogQHBhcmFtICAgIHdyYXBGbGFnCiAgICAgICovCiAgICAgdm9pZCB3cmFwcGVkKGJvb2xlYW4gd3JhcEZsYWcpewogICAgICAgICB0aGlzLndyYXBwZWRBbHJlYWR5ID0gd3JhcEZsYWc7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB3aGV0aGVyIGl0IGlzIHdyYXBwZWQgYWxyZWFkeSBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXdyYXBwZWQgZmxhZy4KKyAgICAgKiBAcmV0dXJuICAgIHdyYXBwZWQgZmxhZy4KICAgICAgKi8KICAgICBib29sZWFuIGlzV3JhcHBlZCgpewogICAgICAgICByZXR1cm4gd3JhcHBlZEFscmVhZHk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHJlc3BvbnNpYmxlCiAgICAgICogZm9yIHRoaXMgY29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqLwogICAgIE1hbmFnZWRDb25uZWN0aW9uIGdldE1hbmFnZWRDb25uZWN0aW9uKCkgewogICAgICAgICByZXR1cm4gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVwbGFjZSB0aGUgYWN0dWFsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCB3aXRoIHRoZSBvbmUKLSAgICAgKiBzdXBwbGllZC4gQWxzbyByZXBsYWNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBsaW5rLiAgICAgCisgICAgICogc3VwcGxpZWQuIEFsc28gcmVwbGFjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gbGluay4KICAgICAgKgotICAgICAqIEBwYXJhbQljb24gPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQltYyAgPGNvZGU+IE1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIGNvbiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG1jICA8Y29kZT4gTWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICB2b2lkIGFzc29jaWF0ZUNvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24sIE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7Ci0gICAgCXRoaXMubWMgPSBtYzsKLSAgICAJdGhpcy5jb24gPSBjb247CisgICAgICAgIHRoaXMubWMgPSBtYzsKKyAgICAgICAgdGhpcy5jb24gPSBjb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2xlYXJzIGFsbCB3YXJuaW5ncyByZXBvcnRlZCBmb3IgdGhlIHVuZGVybHlpbmcgY29ubmVjdGlvbiAgb2JqZWN0LgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjbGVhcldhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsgICAgCi0JY2hlY2tWYWxpZGl0eSgpOworICAgIHB1YmxpYyB2b2lkIGNsZWFyV2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgY29uLmNsZWFyV2FybmluZ3MoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDbG9zZXMgdGhlIGxvZ2ljYWwgY29ubmVjdGlvbi4gICAgCisgICAgICogQ2xvc2VzIHRoZSBsb2dpY2FsIGNvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICAgIGlzQ2xvc2VkID0gdHJ1ZTsKLSAgICAgICAgbWMuY29ubmVjdGlvbkNsb3NlZChudWxsLCB0aGlzKTsgICAgICAgIAorICAgICAgICBtYy5jb25uZWN0aW9uQ2xvc2VkKG51bGwsIHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEludmFsaWRhdGVzIHRoaXMgb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGludmFsaWRhdGUoKSB7Ci0gICAgCXZhbGlkID0gZmFsc2U7CisgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2xvc2VzIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGludm9sdmVkIGluIHRoaXMuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwotICAgIHZvaWQgYWN0dWFsQ2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueyAgICAKKyAgICB2b2lkIGFjdHVhbENsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgICAgY29uLmNsb3NlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IHRoZSBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbW1pdCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5jb21taXQoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5jb21taXQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4gICAgIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KGludCByZXN1bHRTZXRUeXBlLCBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudChyZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRIb2xkYWJpbGl0eQlSZXN1bHRTZXQgSG9sZGFiaWxpdHkuICAgICAKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LiAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgICAgIAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LCAKLSAgICAJCQkJICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJICAgICAKKyAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgICAgICAJCQkgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CiAgICAgfQotIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGF1dG8tY29tbWl0IG1vZGUgZm9yIHRoZSB1bmRlcmx5aW5nIDxjb2RlPiBDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGN1cnJlbnQgc3RhdGUgb2YgY29ubmVjdGlvbidzIGF1dG8tY29tbWl0IG1vZGUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBnZXRBdXRvQ29tbWl0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRBdXRvQ29tbWl0KCk7Ci0gICAgfSAgIAotIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRBdXRvQ29tbWl0KCk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSB1bmRlcmx5aW5nIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCdzIGNhdGFsb2cgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JQ2F0YWxvZyBOYW1lLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIENhdGFsb2cgTmFtZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDYXRhbG9nKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uZ2V0Q2F0YWxvZygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZAogICAgICAqIHVzaW5nIHRoaXMgY29ubmVjdGlvbiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhvbGRhYmlsaXR5IHZhbHVlLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIGhvbGRhYmlsaXR5IHZhbHVlLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldEhvbGRhYmlsaXR5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuCWNvbi5nZXRIb2xkYWJpbGl0eSgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuICAgIGNvbi5nZXRIb2xkYWJpbGl0eSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+RGF0YWJhc2VNZXRhRGF0YTwvY29kZT5vYmplY3QgZnJvbSB0aGUgdW5kZXJseWluZwogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT5EYXRhYmFzZU1ldGFEYXRhPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YWJhc2VNZXRhRGF0YSBnZXRNZXRhRGF0YSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0TWV0YURhdGEoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0TWV0YURhdGEoKTsKICAgICB9Ci0gCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhpcyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QncyBjdXJyZW50IHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KICAgICAgKgogICAgICAqIEByZXR1cm4gVHJhbnNhY3Rpb24gbGV2ZWwKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIAorICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoCiAgICAgICogPGNvZGU+IENvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JVHlwZU1hcCBzZXQgaW4gdGhpcyBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgVHlwZU1hcCBzZXQgaW4gdGhpcyBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBNYXAgZ2V0VHlwZU1hcCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0VHlwZU1hcCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRUeXBlTWFwKCk7CiAgICAgfQogCiAvKgpAQCAtMjc5LDE4NCArMjc5LDE4NCBAQAogICAgICAqIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gRmlyc3QgPGNvZGU+IFNRTFdhcm5pbmc8L2NvZGU+IE9iamVjdCBvciBudWxsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNRTFdhcm5pbmcgZ2V0V2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldFdhcm5pbmdzKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldFdhcm5pbmdzKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHdoZXRoZXIgdW5kZXJseWluZyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLgogICAgICAqCi0gICAgICogQHJldHVybgl0cnVlIGlmIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyBjbG9zZWQsIGZhbHNlCi0gICAgICogCQlpZiBpdCBpcyBjbG9zZWQuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLCBmYWxzZQorICAgICAqICAgICAgICAgaWYgaXQgaXMgY2xvc2VkLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0Nsb3NlZCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAlyZXR1cm4gaXNDbG9zZWQ7CisgICAgICAgIHJldHVybiBpc0Nsb3NlZDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgd2hldGhlciB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyByZWFkLW9ubHkuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBpcyByZWFkLW9ubHksIGZhbHNlIG90aGVyLXdpc2UKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gaXMgcmVhZC1vbmx5LCBmYWxzZSBvdGhlci13aXNlCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzUmVhZE9ubHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmlzUmVhZE9ubHkoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uaXNSZWFkT25seSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiBTUUwgc3RhdGVtZW50IGludG8gdGhlIHN5c3RlbSdzIG5hdGl2ZSBTUUwgZ3JhbW1lci4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIHN0YXRlbWVudCAsIHRvIGJlIGNvbnZlcnRlZC4KLSAgICAgKiBAcmV0dXJuCUNvbnZlcnRlZCBTUUwgc3RyaW5nLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBzdGF0ZW1lbnQgLCB0byBiZSBjb252ZXJ0ZWQuCisgICAgICogQHJldHVybiAgICBDb252ZXJ0ZWQgU1FMIHN0cmluZy4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBuYXRpdmVTUUwoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5uYXRpdmVTUUwoc3FsKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ubmF0aXZlU1FMKHNxbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQogICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CiAgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKLSAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQotICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgICAgICAKLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCSAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgIAkJCSAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsKTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKKyAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKKyAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCiAgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKICAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsKICAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlhdXRvR2VuZXJhdGVkS2V5cyBhIGZsYWcgaW5kaWNhdGluZyBBdXRvR2VuZXJhdGVkS2V5cyBuZWVkIHRvIGJlIHJldHVybmVkLgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCBhdXRvR2VuZXJhdGVkS2V5cykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxhdXRvR2VuZXJhdGVkS2V5cyk7Ci0gICAgfSAgICAKLSAgICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JY29sdW1uSW5kZXhlcyBhbiBhcnJheSBvZiBjb2x1bW4gaW5kZXhlcyBpbmRpY2F0aW5nIHRoZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlCi0gICAgICoJCXJldHVybmVkIGZyb20gdGhlIGluc2VydGVkIHJvdyBvciByb3dzLgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludFtdIGNvbHVtbkluZGV4ZXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uSW5kZXhlcyk7Ci0gICAgfSAgICAgICAgICAKLSAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCWludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgICAgICAgCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgIAkJCQkgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7Ci0gICAgfSAgICAgICAgICAgCiAKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKICAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQljb2x1bW5OYW1lcyBOYW1lIG9mIGJvdW5kIGNvbHVtbnMuCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGF1dG9HZW5lcmF0ZWRLZXlzIGEgZmxhZyBpbmRpY2F0aW5nIEF1dG9HZW5lcmF0ZWRLZXlzIG5lZWQgdG8gYmUgcmV0dXJuZWQuCiAgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCBhdXRvR2VuZXJhdGVkS2V5cykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGF1dG9HZW5lcmF0ZWRLZXlzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgY29sdW1uSW5kZXhlcyBhbiBhcnJheSBvZiBjb2x1bW4gaW5kZXhlcyBpbmRpY2F0aW5nIHRoZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlCisgICAgICogICAgICAgIHJldHVybmVkIGZyb20gdGhlIGluc2VydGVkIHJvdyBvciByb3dzLgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludFtdIGNvbHVtbkluZGV4ZXMpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5JbmRleGVzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0SG9sZGFiaWxpdHkgICAgUmVzdWx0U2V0IEhvbGRhYmlsaXR5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBjb2x1bW5OYW1lcyBOYW1lIG9mIGJvdW5kIGNvbHVtbnMuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgU3RyaW5nW10gY29sdW1uTmFtZXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uTmFtZXMpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5OYW1lcyk7CiAgICAgfQogCiAgICAgcHVibGljIENsb2IgY3JlYXRlQ2xvYigpIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtNTA2LDE2MiArNTA2LDE2MiBAQAogICAgIC8qKgogICAgICAqIFJlbW92ZXMgdGhlIGdpdmVuIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2F2ZXBvaW50CTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0Ci0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBzYXZlcG9pbnQgICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVsZWFzZVNhdmVwb2ludChTYXZlcG9pbnQgc2F2ZXBvaW50KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucmVsZWFzZVNhdmVwb2ludChzYXZlcG9pbnQpOwotICAgIH0gCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucmVsZWFzZVNhdmVwb2ludChzYXZlcG9pbnQpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFJvbGxzIGJhY2sgdGhlIGNoYW5nZXMgbWFkZSBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjaygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yb2xsYmFjaygpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJvbGxiYWNrKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUm9sbHMgYmFjayB0aGUgY2hhbmdlcyBtYWRlIGFmdGVyIHRoZSBzYXZlcG9pbnQuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soU2F2ZXBvaW50IHNhdmVwb2ludCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJvbGxiYWNrKHNhdmVwb2ludCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucm9sbGJhY2soc2F2ZXBvaW50KTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgYXV0by1jb21tbWl0IG1vZGUgb2YgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlhdXRvQ29tbWl0IGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB0aGUgYXV0by1jb21taXQgbW9kZS4gICAgIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgYXV0b0NvbW1pdCBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhlIGF1dG8tY29tbWl0IG1vZGUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEF1dG9Db21taXQoYm9vbGVhbiBhdXRvQ29tbWl0KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGF1dG9Db21taXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNhdGFsb2cgbmFtZSB0byB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2F0YWxvZwlDYXRhbG9nIG5hbWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBjYXRhbG9nICAgIENhdGFsb2cgbmFtZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q2F0YWxvZyhTdHJpbmcgY2F0YWxvZykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldENhdGFsb2coY2F0YWxvZyk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0Q2F0YWxvZyhjYXRhbG9nKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZCAKKyAgICAgKiBTZXRzIHRoZSBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZAogICAgICAqIHVzaW5nIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCWhvbGRhYmlsaXR5CUEgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBob2xkYWJpbGl0eSBjb25zdGFudAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgaG9sZGFiaWxpdHkgICAgQSA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IGhvbGRhYmlsaXR5IGNvbnN0YW50CisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEhvbGRhYmlsaXR5KGludCBob2xkYWJpbGl0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAgCWNvbi5zZXRIb2xkYWJpbGl0eShob2xkYWJpbGl0eSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICAgY29uLnNldEhvbGRhYmlsaXR5KGhvbGRhYmlsaXR5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBQdXRzIHRoZSBjb25uZWN0aW9uIGluIHJlYWQtb25seSBtb2RlIGFzIGEgaGludCB0byB0aGUgZHJpdmVyIHRvIAorICAgICAqIFB1dHMgdGhlIGNvbm5lY3Rpb24gaW4gcmVhZC1vbmx5IG1vZGUgYXMgYSBoaW50IHRvIHRoZSBkcml2ZXIgdG8KICAgICAgKiBwZXJmb3JtIGRhdGFiYXNlIG9wdGltaXphdGlvbnMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVhZE9ubHkgIHRydWUgZW5hYmxlcyByZWFkLW9ubHkgbW9kZSwgZmFsc2UgZGlzYWJsZXMgaXQuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICByZWFkT25seSAgdHJ1ZSBlbmFibGVzIHJlYWQtb25seSBtb2RlLCBmYWxzZSBkaXNhYmxlcyBpdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVhZE9ubHkoYm9vbGVhbiByZWFkT25seSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldFJlYWRPbmx5KHJlYWRPbmx5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRSZWFkT25seShyZWFkT25seSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhbmQgdW5uYW1lZCBzYXZlcG9pbnQgYW5kIHJldHVybnMgYW4gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KICAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNhdmVwb2ludCBzZXRTYXZlcG9pbnQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnNldFNhdmVwb2ludCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc2F2ZXBvaW50IHdpdGggdGhlIG5hbWUgYW5kIHJldHVybnMgYW4gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdC4KICAgICAgKgotICAgICAqIEBwYXJhbQluYW1lCU5hbWUgb2YgdGhlIHNhdmVwb2ludC4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbmFtZSAgICBOYW1lIG9mIHRoZSBzYXZlcG9pbnQuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNhdmVwb2ludCBzZXRTYXZlcG9pbnQoU3RyaW5nIG5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uc2V0U2F2ZXBvaW50KG5hbWUpOwotICAgIH0gICAgCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnNldFNhdmVwb2ludChuYW1lKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGV2ZWwgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbGV2ZWwgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2FjdGlvbklzb2xhdGlvbihpbnQgbGV2ZWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbihsZXZlbCk7Ci0gICAgfSAgICAgCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24obGV2ZWwpOworICAgIH0KKwogICAgIC8qKgotICAgICAqIEluc3RhbGxzIHRoZSBnaXZlbiA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhcyB0aGUgdHlvZSBtYXAgZm9yIHRoaXMgCisgICAgICogSW5zdGFsbHMgdGhlIGdpdmVuIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzIHRoZSB0eW9lIG1hcCBmb3IgdGhpcwogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCW1hcAk8Y29kZT5NYXA8L2NvZGU+IGEgTWFwIG9iamVjdCB0byBpbnN0YWxsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbWFwICAgIDxjb2RlPk1hcDwvY29kZT4gYSBNYXAgb2JqZWN0IHRvIGluc3RhbGwuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFR5cGVNYXAoTWFwIG1hcCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOwotICAgIAljb24uc2V0VHlwZU1hcChtYXApOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldFR5cGVNYXAobWFwKTsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE5ldHdvcmtUaW1lb3V0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5ldHdvcmtUaW1lb3V0KEV4ZWN1dG9yIGV4ZWN1dG9yLCBpbnQgbWlsbGlzZWNvbmRzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWJvcnQoRXhlY3V0b3IgZXhlY3V0b3IpICB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFNjaGVtYSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNjaGVtYShTdHJpbmcgc2NoZW1hKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIENoZWNrcyB0aGUgdmFsaWRpdHkgb2YgdGhpcyBvYmplY3QKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgY2hlY2tWYWxpZGl0eSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAlpZiAoaXNDbG9zZWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJDb25uZWN0aW9uIGNsb3NlZCIpOwotICAgIAlpZiAoIXZhbGlkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiSW52YWxpZCBDb25uZWN0aW9uIik7Ci0gICAgCWlmKGFjdGl2ZSA9PSBmYWxzZSkgewotICAgIAkgICAgbWMuY2hlY2tJZkFjdGl2ZSh0aGlzKTsKLSAgICAJfQorICAgICAgICBpZiAoaXNDbG9zZWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJDb25uZWN0aW9uIGNsb3NlZCIpOworICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiSW52YWxpZCBDb25uZWN0aW9uIik7CisgICAgICAgIGlmKGFjdGl2ZSA9PSBmYWxzZSkgeworICAgICAgICAgICAgbWMuY2hlY2tJZkFjdGl2ZSh0aGlzKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGFjdGl2ZSBmbGFnIHRvIHRydWUKICAgICAgKgotICAgICAqIEBwYXJhbQlhY3R2CWJvb2xlYW4KKyAgICAgKiBAcGFyYW0gICAgYWN0diAgICBib29sZWFuCiAgICAgICovCiAgICAgdm9pZCBzZXRBY3RpdmUoYm9vbGVhbiBhY3R2KSB7CiAgICAgICAgIGFjdGl2ZSA9IGFjdHY7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IGFjN2U3NDguLmYwNjc1YTQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0zMywxOSArMzMsMTkgQEAKICAqIFRoaXMgY2xhc3MgaXMgZXh0ZW5kZWQgYnkgdGhlIERhdGFTb3VyY2Ugc3BlY2lmaWMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZhY3RvcmllcwogICogYW5kIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGZvciB0aGUgPGNvZGU+RHJpdmVyTWFuYWdlcjwvY29kZT4uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIAotcHVibGljIGFic3RyYWN0IGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSwgCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LAogICAgIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKLSAgICAKKwogICAgIHByb3RlY3RlZCBEYXRhU291cmNlU3BlYyBzcGVjID0gbmV3IERhdGFTb3VyY2VTcGVjKCk7CiAgICAgcHJvdGVjdGVkIHRyYW5zaWVudCBEYXRhU291cmNlT2JqZWN0QnVpbGRlciBkc09iakJ1aWxkZXI7Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgamF2YS5pby5QcmludFdyaXRlciBsb2dXcml0ZXIgPSBudWxsOwogICAgIHByb3RlY3RlZCBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgcmEgPSBudWxsOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTU0LDggKzU0LDggQEAKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgQ29ubmVjdGlvbiBGYWN0b3J5IGluc3RhbmNlLiBUaGUgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uCiAgICAgICogb2YgdGhlIHJlc291cmNlIGFkYXB0ZXIgaXMgdXNlZCBoZXJlLgotICAgICAqIAotICAgICAqIEByZXR1cm4JR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGNyZWF0ZUNvbm5lY3Rpb25GYWN0b3J5KCkgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtNjMsMTYgKzYzLDE2IEBACiAgICAgICAgIH0KICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UgY2YgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UoCiAgICAgICAgICAgICAoamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KXRoaXMsIG51bGwpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIENvbm5lY3Rpb24gRmFjdG9yeSBpbnN0YW5jZS4gVGhlIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbgogICAgICAqIG9mIHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIgaXMgdXNlZCBoZXJlLgotICAgICAqIAotICAgICAqIEBwYXJhbQljeE1hbmFnZXIJPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHJldHVybglHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgorICAgICAqCisgICAgICogQHBhcmFtICAgIGN4TWFuYWdlciAgICA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcmV0dXJuICAgIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjcmVhdGVDb25uZWN0aW9uRmFjdG9yeShqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlciBjeE1hbmFnZXIpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTgwLDU1ICs4MCw1NSBAQAogICAgICAgICB9CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIGNmID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlKAogICAgICAgICAgICAgKGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSl0aGlzLCBjeE1hbmFnZXIpOwotICAgICAgICByZXR1cm4gY2Y7IAorICAgICAgICByZXR1cm4gY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIEVJUyByZXNvdXJjZQogICAgICAqIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCi0gICAgICogICAgICAgCSAgICAgICAgICAgICAJYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+Ci0gICAgICogICAgICAgCSAgICAgICAgICAgICAJb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQotICAgICAqICAgICAgIAkJCQljcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0Ci0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdCAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwKICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIC8qKgotICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0byAKKyAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8KICAgICAgKiBhbm90aGVyIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCW90aGVyCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCi0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQotICAgICAqCQlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBvdGhlciAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZQorICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQorICAgICAqICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgamF2YS5pby5QcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB7CiAgICAgICAgIHJldHVybiBsb2dXcml0ZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+c2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciBnZXRSZXNvdXJjZUFkYXB0ZXIoKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xMzYsMTEgKzEzNiwxMSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByYTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBoYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTQ4LDQxICsxNDgsNDEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc3BlYy5oYXNoQ29kZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgYSBtYXRjaGVkIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmcm9tIHRoZSBjYW5kaWRhdGUgCisgICAgICogUmV0dXJucyBhIG1hdGNoZWQgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZyb20gdGhlIGNhbmRpZGF0ZQogICAgICAqIHNldCBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0cy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29ubmVjdGlvblNldAk8Y29kZT5TZXQ8L2NvZGU+IG9mICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKgkJCQlvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCXN1YmplY3QJIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICoJCQlmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICoJCQkJZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCBpcyB0aGUgYmVzdCBtYXRjaCBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgYWNjZXNzaW5nIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPgotICAgICAqCQkJCQlwYXJhbWV0ZXIgb3IgdGhlIDxjb2RlPlNldDwvY29kZT4gb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICoJCQkJCW9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb25uZWN0aW9uU2V0ICAgIDxjb2RlPlNldDwvY29kZT4gb2YgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgIG9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICAgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiAgICAgICAgICAgIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZworICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiAgICAgICAgICAgICAgICBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IGlzIHRoZSBiZXN0IG1hdGNoIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBhY2Nlc3NpbmcgdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBvciB0aGUgPGNvZGU+U2V0PC9jb2RlPiBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgogICAgICAqLwotICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhqYXZhLnV0aWwuU2V0IGNvbm5lY3Rpb25TZXQsIAorICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhqYXZhLnV0aWwuU2V0IGNvbm5lY3Rpb25TZXQsCiAgICAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdCBzdWJqZWN0LCBDb25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbm5lY3Rpb25TZXQgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcywgc3ViamVjdCwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgIAorCiAgICAgICAgIGphdmEudXRpbC5JdGVyYXRvciBpdGVyID0gY29ubmVjdGlvblNldC5pdGVyYXRvcigpOwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBudWxsOwogICAgICAgICB3aGlsZShpdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtYyA9IChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24pIGl0ZXIubmV4dCgpOwogICAgICAgICAgICAgfSBjYXRjaChqYXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBuc2VlKSB7Ci0JICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pdGVyIik7CisgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pdGVyIik7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKG5zZWUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmKHBjID09IG51bGwgJiYgdGhpcy5lcXVhbHMobWMuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkpKSB7CkBAIC0xOTEsNyArMTkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZChtYyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYzsKICAgICAgICAgICAgICAgICB9IGNhdGNoKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7Ci0JICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfcmUiLCByZSk7CisgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfcmUiLCByZSk7CiAgICAgICAgICAgICAgICAgICAgIG1jLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKHJlLCBudWxsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYoU2VjdXJpdHlVdGlscy5pc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKHBjLCBtYy5nZXRQYXNzd29yZENyZWRlbnRpYWwoKSkgPT0gdHJ1ZSkgewpAQCAtMjAwLDQ1ICsyMDAsNDUgQEAKICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZChtYyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYzsKICAgICAgICAgICAgICAgICB9IGNhdGNoKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7Ci0JICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5yZSIpOworICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMucmUiKTsKICAgICAgICAgICAgICAgICAgICAgbWMuY29ubmVjdGlvbkVycm9yT2NjdXJyZWQocmUsIG51bGwpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvL0dKQ0lOVAogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyB0byBiZSB2YWxpZGF0ZWQgb3Igbm90CiAgICAgICogYW5kIHZhbGlkYXRlcyBpdCBvciByZXR1cm5zLgotICAgICAqIAotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAJCWlmIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIKICAgICAgKi8KICAgICB2b2lkIGlzVmFsaWQoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogCiAgICAgICAgIGlmKG1jLmlzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpIHsKLQkgICAgcmV0dXJuOworICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAKLSAgICAgICAgYm9vbGVhbiBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID0gCisKKyAgICAgICAgYm9vbGVhbiBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID0KICAgICAgICAgICAgIChuZXcgQm9vbGVhbihzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKS50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7CiAgICAgICAgIGlmKCBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID09IGZhbHNlIHx8IG1jID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIG1jLmNoZWNrSWZWYWxpZCgpOwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGFib3ZlIGNhbGwgY2hlY2tzIGlmIHRoZSBhY3R1YWwgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAgICAgKiBpcyB1c2FibGUgb3Igbm90LgogICAgICAgICAgKi8KICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKHZhbGlkYXRpb25NZXRob2QuZXF1YWxzKCJhdXRvLWNvbW1pdCIpID09IHRydWUpIHsKICAgICAgICAgICAgIGlzVmFsaWRCeUF1dG9Db21taXQoY29uKTsKICAgICAgICAgfSBlbHNlIGlmKHZhbGlkYXRpb25NZXRob2QuZXF1YWxzSWdub3JlQ2FzZSgibWV0YS1kYXRhIikgPT0gdHJ1ZSkgewpAQCAtMjQ5LDI4ICsyNDksMjggQEAKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIiKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IGNoZWNraW5nIGl0cyBhdXRvIGNvbW1pdCBwcm9wZXJ0eS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5QXV0b0NvbW1pdChqYXZhLnNxbC5Db25uZWN0aW9uIGNvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgLy8gTm90aWNlIHRoYXQgdXNpbmcgc29tZXRoaW5nIGxpa2UgCisgICAgICAgICAgIC8vIE5vdGljZSB0aGF0IHVzaW5nIHNvbWV0aGluZyBsaWtlCiAgICAgICAgICAgIC8vIGRiQ29uLnNldEF1dG9Db21taXQoZGJDb24uZ2V0QXV0b0NvbW1pdCgpKSB3aWxsIGNhdXNlIHByb2JsZW1zIHdpdGgKICAgICAgICAgICAgLy8gc29tZSBkcml2ZXJzIGxpa2Ugc3liYXNlCi0gICAgICAgICAgIC8vIFdlIGRvIG5vdCB2YWxpZGF0ZSBjb25uZWN0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IGVubGlzdGVkIAotCSAgIC8vaW4gYSB0cmFuc2FjdGlvbiAKLQkgICAvLyBXZSBjeWNsZSBhdXRvY29tbWl0IHRvIHRydWUgYW5kIGZhbHNlIHRvIGJ5LXBhc3MgZHJpdmVycyB0aGF0IAotCSAgIC8vIG1pZ2h0IGNhY2hlIHRoZSBjYWxsIHRvIHNldCBhdXRvY29taXR0CisgICAgICAgICAgIC8vIFdlIGRvIG5vdCB2YWxpZGF0ZSBjb25uZWN0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IGVubGlzdGVkCisgICAgICAgLy9pbiBhIHRyYW5zYWN0aW9uCisgICAgICAgLy8gV2UgY3ljbGUgYXV0b2NvbW1pdCB0byB0cnVlIGFuZCBmYWxzZSB0byBieS1wYXNzIGRyaXZlcnMgdGhhdAorICAgICAgIC8vIG1pZ2h0IGNhY2hlIHRoZSBjYWxsIHRvIHNldCBhdXRvY29taXR0CiAgICAgICAgICAgIC8vIEFsc28gbm90aWNlIHRoYXQgc29tZSBYQSBkYXRhIHNvdXJjZXMgd2lsbCB0aHJvdyBhbmQgZXhjZXB0aW9uIGlmCiAgICAgICAgICAgIC8vIHlvdSB0cnkgdG8gY2FsbCBzZXRBdXRvQ29tbWl0LCBmb3IgdGhlbSB0aGlzIG1ldGhvZCBpcyBub3QgcmVjb21tZW5kZWQKIApAQCAtMjgxLDkwICsyODEsOTAgQEAKICAgICAgICAgICAgICAgICBjb24ucm9sbGJhY2soKTsgLy8gcHJldmVudHMgdW5jb21wbGV0ZWQgdHJhbnNhY3Rpb24gZXhjZXB0aW9ucwogICAgICAgICAgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KHRydWUpOwogICAgICAgICAgICB9Ci0gICAgICAgIAotCSAgIGNvbi5zZXRBdXRvQ29tbWl0KGFjKTsKKworICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGFjKTsKIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2F1dG9jb21taXQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYXV0b2NvbW1pdCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IGNoZWNraW5nIGl0cyBtZXRhIGRhdGEuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeU1ldGFEYXRhKGphdmEuc3FsLkNvbm5lY3Rpb24gY29uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgamF2YS5zcWwuRGF0YWJhc2VNZXRhRGF0YSBkbWQgPSBjb24uZ2V0TWV0YURhdGEoKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgImdldHRpbmcgdGhlIG1ldGEgZGF0YSBmYWlsZWQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBxdWVyeWluZyBhIHRhYmxlLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHBhcmFtCXRhYmxlTmFtZQl0YWJsZSB3aGljaCBzaG91bGQgYmUgcXVlcmllZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEBwYXJhbSAgICB0YWJsZU5hbWUgICAgdGFibGUgd2hpY2ggc2hvdWxkIGJlIHF1ZXJpZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeVRhYmxlUXVlcnkoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24sIAorICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeVRhYmxlUXVlcnkoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24sCiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBqYXZhLnNxbC5TdGF0ZW1lbnQgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIGphdmEuc3FsLlJlc3VsdFNldCBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NICIgKyB0YWJsZU5hbWUpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2V4ZWN1dGUiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZXhlY3V0ZSIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInF1ZXJ5aW5nIHRoZSB0YWJsZSAiICsgdGFibGVOYW1lICsgIiBmYWlsZWQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBpc29sYXRpb24gbGV2ZWwgc3BlY2lmaWVkIGluIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CiAgICAgICogZm9yIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gcGFzc2VkLgogICAgICAqCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCi0gICAgICoJCQkJCW9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCisgICAgICogICAgICAgICAgICAgICAgICAgIG9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgc2V0SXNvbGF0aW9uKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJCi0gICAgCWphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgIAlpZihjb24gPT0gbnVsbCkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCQotICAgIAlTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKLSAgICAJaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKLSAgICAJICAgIHRyeSB7Ci0gICAgCSAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOwotICAgIAkgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gY291bGQgIgotICAgIAkgICAgICAgICAgICArICJub3QgYmUgc2V0OiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgfQotICAgIAl9CisKKyAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7CisgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKKyAgICAgICAgaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOworICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gY291bGQgIgorICAgICAgICAgICAgICAgICAgICArICJub3QgYmUgc2V0OiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVzZXRzIHRoZSBpc29sYXRpb24gbGV2ZWwgZm9yIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gcGFzc2VkLgogICAgICAqIElmIHRoZSB0cmFuc2FjdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmUKQEAgLTM3MywzODIgKzM3MywzODIgQEAKICAgICAgKiBpc29sYXRpb24gbGV2ZWwgZnJvbSB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQuIEVsc2UsCiAgICAgICogaXQgc2V0cyBpdCB0byB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIHBhc3NlZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAcGFyYW0JdHJhbklzb2wJaW50Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKLSAgICAgKgkJCQkJb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRyYW5Jc29sICAgIGludAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCisgICAgICogICAgICAgICAgICAgICAgICAgIG9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCiAgICAgICovCiAgICAgdm9pZCByZXNldElzb2xhdGlvbihjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMsIGludCB0cmFuSXNvbCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJCi0gICAgCWphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgIAlpZihjb24gPT0gbnVsbCkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCQotICAgIAlTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKLSAgICAJaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwotICAgIAkgICAgCi0gICAgCSAgICBpZihndWFyYW50ZWVJc29sYXRpb25MZXZlbCAhPSBudWxsICYmIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgICAgICBib29sZWFuIGd1YXJhbnRlZSA9IChuZXcgQm9vbGVhbihndWFyYW50ZWVJc29sYXRpb25MZXZlbC50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgCSAgICAgICAgCi0gICAgCSAgICAgICAgaWYoZ3VhcmFudGVlKSB7Ci0gICAgCSAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7Ci0gICAgCSAgICAgICAgICAgIHRyeSB7Ci0gICAgCSAgICAgICAgICAgICAgICBpZih0cmFuSXNvbGF0aW9uSW50ICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOwotICAgIAkgICAgICAgICAgICAgICAgfQotICAgIAkgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgotICAgIAkgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgfSBlbHNlIHsKLSAgICAJICAgICAgICAgICAgdHJ5IHsKLSAgICAJICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sKTsKLSAgICAJICAgICAgICAgICAgICAgIH0KLSAgICAJICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKLSAgICAJICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgICAgICAgICAgfQotICAgIAkgICAgICAgIH0KLSAgICAJICAgIH0KLSAgICAJfQorCisgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOworICAgICAgICBpZihjb24gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIFN0cmluZyBndWFyYW50ZWVJc29sYXRpb25MZXZlbCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKKworICAgICAgICAgICAgaWYoZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgIT0gbnVsbCAmJiBndWFyYW50ZWVJc29sYXRpb25MZXZlbC5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBndWFyYW50ZWUgPSAobmV3IEJvb2xlYW4oZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOworCisgICAgICAgICAgICAgICAgaWYoZ3VhcmFudGVlKSB7CisgICAgICAgICAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0cmFuSXNvbGF0aW9uSW50ICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CisgICAgICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGludGVnZXIgZXF1aXZhbGVudCBvZiB0aGUgc3RyaW5nIHNwZWNpZnlpbmcKICAgICAgKiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXRyYW5Jc29sYXRpb24Jc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbiBsZXZlbAotICAgICAqIEByZXR1cm4JdHJhbklzb2xhdGlvbkludAl0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gY29uc3RhbnQKLSAgICAgKgkJCQkJZm9yIHRoZSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uLgorICAgICAqIEBwYXJhbSAgICB0cmFuSXNvbGF0aW9uICAgIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5Jc29sYXRpb25JbnQgICAgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGNvbnN0YW50CisgICAgICogICAgICAgICAgICAgICAgICAgIGZvciB0aGUgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbi4KICAgICAgKi8KICAgICBwcml2YXRlIGludCBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludChTdHJpbmcgdHJhbklzb2xhdGlvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLXVuY29tbWl0dGVkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfVU5DT01NSVRURUQ7Ci0gICAgCX0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtY29tbWl0dGVkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfQ09NTUlUVEVEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZXBlYXRhYmxlLXJlYWQiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVQRUFUQUJMRV9SRUFEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJzZXJpYWxpemFibGUiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fU0VSSUFMSVpBQkxFOwotICAgIAl9IGVsc2UgewotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJJbnZhbGlkIHRyYW5zYWN0aW9uIGlzb2xhdGlvbjsgdGhlIHRyYW5zYWN0aW9uICIKLSAgICAJICAgICAgICArICJpc29sYXRpb24gbGV2ZWwgY2FuIGJlIGVtcHR5IG9yIGFueSBvZiB0aGUgZm9sbG93aW5nOiAiCi0gICAgCSAgICAgICAgICAgICsgInJlYWQtdW5jb21taXR0ZWQsIHJlYWQtY29tbWl0dGVkLCByZXBlYXRhYmxlLXJlYWQsIHNlcmlhbGl6YWJsZSIpOwotICAgIAl9CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC11bmNvbW1pdHRlZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX1VOQ09NTUlUVEVEOworICAgICAgICB9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLWNvbW1pdHRlZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX0NPTU1JVFRFRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVwZWF0YWJsZS1yZWFkIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFUEVBVEFCTEVfUkVBRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgic2VyaWFsaXphYmxlIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1NFUklBTElaQUJMRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiSW52YWxpZCB0cmFuc2FjdGlvbiBpc29sYXRpb247IHRoZSB0cmFuc2FjdGlvbiAiCisgICAgICAgICAgICAgICAgKyAiaXNvbGF0aW9uIGxldmVsIGNhbiBiZSBlbXB0eSBvciBhbnkgb2YgdGhlIGZvbGxvd2luZzogIgorICAgICAgICAgICAgICAgICAgICArICJyZWFkLXVuY29tbWl0dGVkLCByZWFkLWNvbW1pdHRlZCwgcmVwZWF0YWJsZS1yZWFkLCBzZXJpYWxpemFibGUiKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCW91dAk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgb3V0ICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihqYXZhLmlvLlByaW50V3JpdGVyIG91dCkgewogICAgICAgICBsb2dXcml0ZXIgPSBvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBhc3NvY2lhdGVkIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gSmF2YUJlYW4uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmEJPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPmdldFJlc291cmNlQWRhcHRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcmEgICAgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlc291cmNlQWRhcHRlcihqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgcmEpIHsKLSAgICAgICAgdGhpcy5yYSA9IHJhOyAgIAorICAgICAgICB0aGlzLnJhID0gcmE7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHVzZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFVzZXIoU3RyaW5nIHVzZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUsIHVzZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHJldHVybgl1c2VyCisgICAgICogQHJldHVybiAgICB1c2VyCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR1c2VyKFN0cmluZyB1c2VyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FLCB1c2VyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEByZXR1cm4JdXNlcgorICAgICAqIEByZXR1cm4gICAgdXNlcgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dXNlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHBhcmFtCXBhc3N3ZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBhc3N3ZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UGFzc3dvcmQoU3RyaW5nIHBhc3N3ZCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCwgcGFzc3dkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHJldHVybglwYXNzd2QKKyAgICAgKiBAcmV0dXJuICAgIHBhc3N3ZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFzc3dvcmQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEBwYXJhbQlwYXNzd2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwYXNzd2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHBhc3N3b3JkKFN0cmluZyBwYXNzd2QpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQsIHBhc3N3ZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEByZXR1cm4JcGFzc3dkCisgICAgICogQHJldHVybiAgICBwYXNzd2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2xhc3NOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY2xhc3NOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDbGFzc05hbWUoU3RyaW5nIGNsYXNzTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUsIGNsYXNzTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEByZXR1cm4JY2xhc3NOYW1lCisgICAgICogQHJldHVybiAgICBjbGFzc05hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENsYXNzTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEBwYXJhbQljbGFzc05hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjbGFzc05hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGNsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSwgY2xhc3NOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHJldHVybgljbGFzc05hbWUKKyAgICAgKiBAcmV0dXJuICAgIGNsYXNzTmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Y2xhc3NOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEBwYXJhbQljb25WbGRSZXEJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjb25WbGRSZXEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoU3RyaW5nIGNvblZsZFJlcSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVELCBjb25WbGRSZXEpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHJldHVybgljb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHBhcmFtCWNvblZsZFJlcQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNvblZsZFJlcSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Y29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZChTdHJpbmcgY29uVmxkUmVxKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQsIGNvblZsZFJlcSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdmFsaWRhdGlvbiBtZXRob2QgcmVxdWlyZWQKICAgICAgKgotICAgICAqIEBwYXJhbQl2YWxpZGF0aW9uTWV0aG9kCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdmFsaWRhdGlvbk1ldGhvZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VmFsaWRhdGlvbk1ldGhvZChTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCkgewogICAgICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCwgdmFsaWRhdGlvbk1ldGhvZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgY29ubmVjdGlvbiB2YWxpZGF0aW9uIG1ldGhvZCB0eXBlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXZhbGlkYXRpb24gbWV0aG9kCisgICAgICogQHJldHVybiAgICB2YWxpZGF0aW9uIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsaWRhdGlvbk1ldGhvZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHZhbGlkYXRpb24gbWV0aG9kIHJlcXVpcmVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsaWRhdGlvbk1ldGhvZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHZhbGlkYXRpb25NZXRob2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHZhbGlkYXRpb25NZXRob2QoU3RyaW5nIHZhbGlkYXRpb25NZXRob2QpIHsKICAgICAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QsIHZhbGlkYXRpb25NZXRob2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBtZXRob2QgdHlwZQogICAgICAqCi0gICAgICogQHJldHVybgl2YWxpZGF0aW9uIG1ldGhvZAorICAgICAqIEByZXR1cm4gICAgdmFsaWRhdGlvbiBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHZhbGlkYXRpb25NZXRob2QoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCXRhYmxlCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdGFibGUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25UYWJsZU5hbWUoU3RyaW5nIHRhYmxlKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUsIHRhYmxlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgl0YWJsZQorICAgICAqIEByZXR1cm4gICAgdGFibGUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbGlkYXRpb25UYWJsZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCXRhYmxlCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdGFibGUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHZhbGlkYXRpb25UYWJsZU5hbWUoU3RyaW5nIHRhYmxlKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUsIHRhYmxlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgl0YWJsZQorICAgICAqIEByZXR1cm4gICAgdGFibGUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHZhbGlkYXRpb25UYWJsZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEBwYXJhbQl0cm5Jc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cm5Jc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKFN0cmluZyB0cm5Jc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04sIHRybklzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEBwYXJhbQl0cm5Jc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cm5Jc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHRyYW5zYWN0aW9uSXNvbGF0aW9uKFN0cmluZyB0cm5Jc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04sIHRybklzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR0cmFuc2FjdGlvbklzb2xhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZAogICAgICAqCi0gICAgICogQHBhcmFtCWd1YXJhbnRlZUlzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGd1YXJhbnRlZUlzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCwgZ3VhcmFudGVlSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQorICAgICAqIEByZXR1cm4gICAgaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQKICAgICAgKgotICAgICAqIEBwYXJhbQlndWFyYW50ZWVJc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBndWFyYW50ZWVJc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKFN0cmluZyBndWFyYW50ZWVJc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwsIGd1YXJhbnRlZUlzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKKyAgICAgKiBAcmV0dXJuICAgIGlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQppbmRleCA1NTViZTc3Li5lYTU0MDc2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQpAQCAtMjYsOCArMjYsOCBAQAogLyoqCiAgKiA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDUKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzA1CisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgUmVzb3VyY2VBZGFwdGVyIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHsKIApAQCAtMzcsNTIgKzM3LDUyIEBACiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBlbmRwb2ludEFjdGl2YXRpb24KICAgICAgKiB3aGljaCBqdXN0IHRocm93cyA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWVmCTxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCWFzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgotICAgICAqIEB0aHJvd3MJPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtZWYgICAgPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgYXMgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kcG9pbnRBY3RpdmF0aW9uKE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgbWVmLCBBY3RpdmF0aW9uU3BlYyBhcykgdGhyb3dzIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIlRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgSkRCQyBjb25uZWN0b3IiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBtZXRob2QgaW1wbGVtZW50YXRpb24gZm9yIGVuZHBvaW50RGVhY3RpdmF0aW9uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWVmCTxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCWFzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtZWYgICAgPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgYXMgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kcG9pbnREZWFjdGl2YXRpb24oTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBtZWYsIEFjdGl2YXRpb25TcGVjIGFzKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBnZXRYQVJlc291cmNlcwogICAgICAqIHdoaWNoIGp1c3QgdGhyb3dzIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcGVjcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4gYXJyYXkKLSAgICAgKiBAdGhyb3dzCTxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc3BlY3MgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+IGFycmF5CisgICAgICogQHRocm93cyAgICA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKSB0aHJvd3MgTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiVGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBKREJDIGNvbm5lY3RvciIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IGltcGxlbWVudGF0aW9uIG9mIHN0YXJ0IG1ldGhvZAogICAgICAqCi0gICAgICogQHBhcmFtCWN0eAk8Y29kZT5Cb290c3RyYXBDb250ZXh0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjdHggICAgPGNvZGU+Qm9vdHN0cmFwQ29udGV4dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdGFydChCb290c3RyYXBDb250ZXh0IGN0eCkgdGhyb3dzIFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNvdXJjZSBBZGFwdGVyIGlzIHN0YXJ0aW5nIHdpdGggY29uZmlndXJhdGlvbiA6IiArIHJhUHJvcCk7CiAgICAgICAgIGlmIChyYVByb3AgPT0gbnVsbCB8fCAhcmFQcm9wLmVxdWFscygiVkFMSUQiKSkgewotCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIlJlc291cmNlIGFkYXB0ZXIgY2Fubm90IHN0YXJ0LiBJdCBpcyBjb25maWd1cmVkIGFzIDogIiArIHJhUHJvcCk7Ci0JfSAKKyAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJSZXNvdXJjZSBhZGFwdGVyIGNhbm5vdCBzdGFydC4gSXQgaXMgY29uZmlndXJlZCBhcyA6ICIgKyByYVByb3ApOwogICAgIH0KLSAgICAKKyAgICB9CisKICAgICAvKioKICAgICAgKiBFbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBzdG9wIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0b3AoKSB7Ci0gICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRSQVByb3BlcnR5KFN0cmluZyBzKSB7CkBAIC05Miw1ICs5Miw1IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRSQVByb3BlcnR5KCkgewogICAgICAgICByZXR1cm4gcmFQcm9wOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCmluZGV4IDVlMTRkNDQuLmZmMGYwMmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9IiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvc3BpIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTI5LDU1ICsyOSw1NSBAQAogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxNCI+Ci0gICAgCQotICAgIAk8bWtkaXIgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiLz4KLSAgICAJCi0JPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiIGJhc2VkaXI9IiR7Y2xhc3MuZGlyfSIKKworICAgICAgICA8bWtkaXIgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiLz4KKworICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCiAgICAgICAgIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosIGNvbS9zdW4vZ2pjL3V0aWwvKiovKiwgY29tL3N1bi9namMvY29tbW9uLyoqLyoiIGV4Y2x1ZGVzPSJjb20vc3VuL2dqYy9jY2kvKiovKixjb20vc3VuL2dqYy9zcGkvMS40LyoqLyoiLz4KLSAgICAgICAgCisKICAgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWNwLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1jcC54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEteGEueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS14YS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZG0ueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kbS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZHMueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kcy54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8ZGVsZXRlIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9jb20iLz4KLSAgIAk8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIvPgotICAgCTxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIvPgotICAgCQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8ZGVsZXRlIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9jb20iLz4KKyAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIvPgorICAgICAgIDxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIvPgorCiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTMiLz4KLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDE0LCBidWlsZDEzIi8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxNCwgYnVpbGQxMyIvPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sCmluZGV4IDI3N2VmYmEuLmY3ZWE4MmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwKQEAgLTIyLDY5ICsyMiw2OSBAQAogICAgICAgICAgICB2ZXJzaW9uPSIxLjUiPgogCiAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgotICAgIDwhLS0gVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYSAKKyAgICA8IS0tIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEKICAgICAgICAgIGRlc2NyaXB0aW9uIGZvciB0aGUgcmVzb3VyY2UgYWRhcHRlci4KICAgICAtLT4KICAgICA8ZGVzY3JpcHRpb24+UmVzb3VyY2UgYWRhcHRlciB3cmFwcGluZyBEYXRhc291cmNlIGltcGxlbWVudGF0aW9uIG9mIGRyaXZlcjwvZGVzY3JpcHRpb24+Ci0gICAgCisKICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkaXNwbGF5LW5hbWUiIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgotICAgIDwhLS0gVGhlIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhIG5hbWUgdGhhdCAKKyAgICA8IS0tIFRoZSBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYSBuYW1lIHRoYXQKICAgICAgICAgIGlzIGludGVuZGVkIHRvIGJlIGRpc3BsYXllZCBieSB0b29scy4KICAgICAtLT4KICAgICA8ZGlzcGxheS1uYW1lPkRhdGFTb3VyY2UgUmVzb3VyY2UgQWRhcHRlcjwvZGlzcGxheS1uYW1lPgotICAgIAorCiAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiaWNvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+CiAgICAgPCEtLSBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxpY29uPgotICAgICAgICAgICAgVGhpcyAic21hbGwtaWNvbiIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UuIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIAotICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgxNiB4IDE2KSAKKyAgICAgICAgICAgIFRoaXMgInNtYWxsLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgxNiB4IDE2KQogICAgICAgICAgICAgaWNvbiAtIEpQRUcgb3IgR0lGIGltYWdlLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgICAgICA8c21hbGwtaWNvbj5zbWFsbGljb24uanBnPC9zbWFsbC1pY29uPgotICAgICAgICAKLSAgICAgICAgICAgIFRoaXMgImxhcmdlLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSAKLSAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMzIgeCAzMikgCisKKyAgICAgICAgICAgIFRoaXMgImxhcmdlLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgzMiB4IDMyKQogICAgICAgICAgICAgaWNvbiAtIEpQRUcgb3IgR0lGIGltYWdlLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCi0gICAgICAgICAgICA8bGFyZ2UtaWNvbj5sYXJnZWljb24uanBnPC9sYXJnZS1pY29uPiAgIAorICAgICAgICAgICAgPGxhcmdlLWljb24+bGFyZ2VpY29uLmpwZzwvbGFyZ2UtaWNvbj4KICAgICAgICAgPC9pY29uPgogICAgIC0tPgogICAgIDxpY29uPgogICAgICAgICA8c21hbGwtaWNvbj48L3NtYWxsLWljb24+Ci0gICAgICAgIDxsYXJnZS1pY29uPjwvbGFyZ2UtaWNvbj4gICAKKyAgICAgICAgPGxhcmdlLWljb24+PC9sYXJnZS1pY29uPgogICAgIDwvaWNvbj4KLSAgICAKKwogICAgIDwhLS0gVGhlICJ2ZW5kb3ItbmFtZSIgZWxlbWVudCBzaG91bGQgb2NjdXIgZXhhY3RseSBvbmNlLiAtLT4KICAgICA8IS0tIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGRyaXZlciB2ZW5kb3IuIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgPHZlbmRvci1uYW1lPlhZWiBJTkMuPC92ZW5kb3ItbmFtZT4KICAgICAtLT4KICAgICA8dmVuZG9yLW5hbWU+U3VuIE1pY3Jvc3lzdGVtczwvdmVuZG9yLW5hbWU+Ci0gICAgCisKICAgICA8IS0tIFRoZSAiZWlzLXR5cGUiIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGV4YWN0bHkgb25jZS4gLS0+Ci0gICAgPCEtLSBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSBkYXRhYmFzZSwgZm9yIGV4YW1wbGUgdGhlIHByb2R1Y3QgbmFtZSBvZiAKKyAgICA8IS0tIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIGRhdGFiYXNlLCBmb3IgZXhhbXBsZSB0aGUgcHJvZHVjdCBuYW1lIG9mCiAgICAgICAgICB0aGUgZGF0YWJhc2UgaW5kZXBlbmRlbnQgb2YgYW55IHZlcnNpb24gaW5mb3JtYXRpb24uIFRoZSBmb2xsb3dpbmcKICAgICAgICAgIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxlaXMtdHlwZT5YWVo8L2Vpcy10eXBlPgogICAgIC0tPgogICAgIDxlaXMtdHlwZT5EYXRhYmFzZTwvZWlzLXR5cGU+Ci0gICAgCisKICAgICA8IS0tIFRoZSAicmVzb3VyY2VhZGFwdGVyLXZlcnNpb24iIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGV4YWN0bHkgb25jZS4gLS0+Ci0gICAgPCEtLSBUaGlzIHNwZWNpZmllcyBhIHN0cmluZyBiYXNlZCB2ZXJzaW9uIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGZyb20gCisgICAgPCEtLSBUaGlzIHNwZWNpZmllcyBhIHN0cmluZyBiYXNlZCB2ZXJzaW9uIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGZyb20KICAgICAgICAgIHRoZSBkcml2ZXIgdmVuZG9yLiBUaGUgZGVmYXVsdCBpcyBiZWluZyBzZXQgYXMgMS4wLiBUaGUgZHJpdmVyCiAgICAgICAgICB2ZW5kb3IgY2FuIGNoYW5nZSBpdCBhcyByZXF1aXJlZC4KICAgICAtLT4KICAgICA8cmVzb3VyY2VhZGFwdGVyLXZlcnNpb24+MS4wPC9yZXNvdXJjZWFkYXB0ZXItdmVyc2lvbj4KLSAgICAKKwogICAgIDwhLS0gVGhpcyAibGljZW5zZSIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UgLS0+CiAgICAgPCEtLSBUaGlzIHNwZWNpZmllcyBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzIGZvciB0aGUgcmVzb3VyY2UgYWRhcHRlciBtb2R1bGUuCiAgICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxsaWNlbnNlPgogICAgICAgICAgICAgVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBpbmNsdWRpbmcgMC4KICAgICAgICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gCi0gICAgICAgICAgICAgICAgcHJvdmlkZSBhIGRlc2NyaXB0aW9uIGZvciB0aGUgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBvZiB0aGUgCi0gICAgICAgICAgICAgICAgcmVzb3VyY2UgYWRhcHRlciBsaWtlIGR1cmF0aW9uIG9mIGxpY2Vuc2UsIG51bWJlcm9mIGNvbm5lY3Rpb24gCisgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvCisgICAgICAgICAgICAgICAgcHJvdmlkZSBhIGRlc2NyaXB0aW9uIGZvciB0aGUgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBvZiB0aGUKKyAgICAgICAgICAgICAgICByZXNvdXJjZSBhZGFwdGVyIGxpa2UgZHVyYXRpb24gb2YgbGljZW5zZSwgbnVtYmVyb2YgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9ucy4KICAgICAgICAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgICAgIAorCiAgICAgICAgICAgICBUaGlzIHNwZWNpZmllcyB3aGV0aGVyIGEgbGljZW5zZSBpcyByZXF1aXJlZCB0byBkZXBsb3kgYW5kIHVzZSB0aGUgcmVzb3VyY2UgYWRhcHRlci4KICAgICAgICAgICAgIERlZmF1bHQgaXMgZmFsc2UuCiAgICAgICAgICAgICA8bGljZW5zZS1yZXF1aXJlZD5mYWxzZTwvbGljZW5zZS1yZXF1aXJlZD4KQEAgLTkzLDI0ICs5MywyNCBAQAogICAgIDxsaWNlbnNlPgogICAgICAgICA8bGljZW5zZS1yZXF1aXJlZD5mYWxzZTwvbGljZW5zZS1yZXF1aXJlZD4KICAgICA8L2xpY2Vuc2U+Ci0gICAgCisKICAgICA8cmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAKLSAgICAgICAgPCEtLSAKLSAgICAgICAgICAgIFRoZSAiY29uZmlnLXByb3BlcnR5IiBlbGVtZW50cyBjYW4gaGF2ZSB6ZXJvIG9yIG1vcmUgImRlc2NyaXB0aW9uIiAKKworICAgICAgICA8IS0tCisgICAgICAgICAgICBUaGUgImNvbmZpZy1wcm9wZXJ0eSIgZWxlbWVudHMgY2FuIGhhdmUgemVybyBvciBtb3JlICJkZXNjcmlwdGlvbiIKICAgICAgICAgICAgIGVsZW1lbnRzLiBUaGUgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBhcmUgbm90IGJlaW5nIGluY2x1ZGVkCiAgICAgICAgICAgICBpbiB0aGUgImNvbmZpZy1wcm9wZXJ0eSIgZWxlbWVudHMgYmVsb3cuIFRoZSBkcml2ZXIgdmVuZG9yIGNhbgogICAgICAgICAgICAgYWRkIHRoZW0gYXMgcmVxdWlyZWQuCiAgICAgICAgIC0tPgotICAgICAgICAKKwogICAgICAgICA8cmVzb3VyY2VhZGFwdGVyLWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5SZXNvdXJjZUFkYXB0ZXI8L3Jlc291cmNlYWRhcHRlci1jbGFzcz4KLSAgICAgICAgCisKICAgICAgICAgPG91dGJvdW5kLXJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgCisKICAgICAgICAgICAgIDxjb25uZWN0aW9uLWRlZmluaXRpb24+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8bWFuYWdlZGNvbm5lY3Rpb25mYWN0b3J5LWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvbWFuYWdlZGNvbm5lY3Rpb25mYWN0b3J5LWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiB0aGVzZSBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+U2VydmVyTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT50ZXN0ZGI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KIAotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Vc2VyPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmRidXNlcjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgpAQCAtMTM5LDEyICsxMzksMTIgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5kYnVzZXI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KIAotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5QYXNzd29yZDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5kYnBhc3N3b3JkPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlVSTDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5qZGJjOmRlcmJ5Oi8vbG9jYWxob3N0OjE1MjcvdGVzdGRiO2NyZWF0ZT10cnVlPC9jb25maWctcHJvcGVydHktdmFsdWU+CkBAIC0xNTQsNyArMTU0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5Pi0tPgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5EZXNjcmlwdGlvbjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5PcmFjbGUgdGhpbiBkcml2ZXIgRGF0YXNvdXJjZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgpAQCAtMTY1LDE3ICsxNjUsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Sb2xlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+TG9naW5UaW1lT3V0PC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RHJpdmVyUHJvcGVydGllczwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KQEAgLTE4Niw3ICsxODYsNyBAQAogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+IzwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5DbGFzc05hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+b3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERhdGFTb3VyY2U0MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgpAQCAtMTk4LDgyICsxOTgsODIgQEAKICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAKIDwhLS0KLSAgICAgIAkJPGNvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZmFsc2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uTWV0aG9kPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VHJhbnNhY3Rpb25Jc29sYXRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZmFsc2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25NZXRob2Q8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uVGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VHJhbnNhY3Rpb25Jc29sYXRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5HdWFyYW50ZWVJc29sYXRpb25MZXZlbDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogLS0+CiAKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbmZhY3RvcnktaW50ZXJmYWNlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb25uZWN0aW9uZmFjdG9yeS1pbnRlcmZhY2U+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbmZhY3RvcnktaW1wbC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZTwvY29ubmVjdGlvbmZhY3RvcnktaW1wbC1jbGFzcz4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uLWludGVyZmFjZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb25uZWN0aW9uLWludGVyZmFjZT4KLSAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbi1pbXBsLWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyPC9jb25uZWN0aW9uLWltcGwtY2xhc3M+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIDwvY29ubmVjdGlvbi1kZWZpbml0aW9uPgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDx0cmFuc2FjdGlvbi1zdXBwb3J0PkxvY2FsVHJhbnNhY3Rpb248L3RyYW5zYWN0aW9uLXN1cHBvcnQ+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPGF1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbT4KICAgICAgICAgICAgICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+CiAgICAgICAgICAgICAgICAgPCEtLSBOb3QgaW5jbHVkaW5nIHRoZSAiZGVzY3JpcHRpb24iIGVsZW1lbnQgLS0+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8YXV0aGVudGljYXRpb24tbWVjaGFuaXNtLXR5cGU+QmFzaWNQYXNzd29yZDwvYXV0aGVudGljYXRpb24tbWVjaGFuaXNtLXR5cGU+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y3JlZGVudGlhbC1pbnRlcmZhY2U+amF2YXgucmVzb3VyY2Uuc3BpLnNlY3VyaXR5LlBhc3N3b3JkQ3JlZGVudGlhbDwvY3JlZGVudGlhbC1pbnRlcmZhY2U+CiAgICAgICAgICAgICA8L2F1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbT4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8cmVhdXRoZW50aWNhdGlvbi1zdXBwb3J0PmZhbHNlPC9yZWF1dGhlbnRpY2F0aW9uLXN1cHBvcnQ+Ci0gICAgICAgICAgICAKKwogICAgICAgICA8L291dGJvdW5kLXJlc291cmNlYWRhcHRlcj4KLQk8YWRtaW5vYmplY3Q+Ci0JICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluPC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+Ci0JICAgICAgIDxhZG1pbm9iamVjdC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW5JbXBsPC9hZG1pbm9iamVjdC1jbGFzcz4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+U2NoZW1hTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5KbmRpTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Ob09mUm93czwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLkludGVnZXI8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4wPC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgIDxhZG1pbm9iamVjdD4KKyAgICAgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW48L2FkbWlub2JqZWN0LWludGVyZmFjZT4KKyAgICAgICAgICAgPGFkbWlub2JqZWN0LWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbkltcGw8L2FkbWlub2JqZWN0LWNsYXNzPgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5TY2hlbWFOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkpuZGlOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPk5vT2ZSb3dzPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuSW50ZWdlcjwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAgICAgICAgIDwvYWRtaW5vYmplY3Q+Ci0gICAgICAgIAorCiAgICAgPC9yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgCisKIDwvY29ubmVjdG9yPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCmluZGV4IGIyMTljZDIuLjEyNDgwOWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKQEAgLTI0LDI2ICsyNCwyNiBAQAogLyoqCiAgKiBDb25uZWN0aW9uTWFuYWdlciBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwotcHVibGljIGNsYXNzIENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvbk1hbmFnZXJ7IAorcHVibGljIGNsYXNzIENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvbk1hbmFnZXJ7CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGEgPGNvZGU+Q29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdCB0byB0aGUgPGNvZGU+Q29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQlpbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gb2JqZWN0LgotICAgICAqIEByZXR1cm4JQSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBPYmplY3QuCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yIGluIGdldHRpbmcgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+LgorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIGluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICBBIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gZ2V0dGluZyB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4uCiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBhbGxvY2F0ZUNvbm5lY3Rpb24oTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiwKLSAgICAJCQkJICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykgCi0gICAgCQkJCSAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLQlNYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG1jZi5jcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihudWxsLCBpbmZvKTsKLQlyZXR1cm4gbWMuZ2V0Q29ubmVjdGlvbihudWxsLCBpbmZvKTsgICAgCQkJCSAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKKyAgICBNYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG1jZi5jcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihudWxsLCBpbmZvKTsKKyAgICByZXR1cm4gbWMuZ2V0Q29ubmVjdGlvbihudWxsLCBpbmZvKTsKICAgICB9Ci0gICAgCisKICAgICAvKgogICAgICAqIFRoaXMgY2xhc3MgY291bGQgZWZmZWN0aXZlbHkgaW1wbGVtZW50IENvbm5lY3Rpb24gcG9vbGluZyBhbHNvLgogICAgICAqIENvdWxkIGJlIGRvbmUgZm9yIEZDUy4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCmluZGV4IDM5Yzc4NzYuLmM0NzdmYzIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQpAQCAtMTksMTAgKzE5LDEwIEBACiAvKioKICAqIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwotcHVibGljIGNsYXNzIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mb3sgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgdXNlcjsKICAgICBwcml2YXRlIFN0cmluZyBwYXNzd29yZDsKQEAgLTMwLDggKzMwLDggQEAKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gb2JqZWN0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcglVc2VyIE5hbWUuCi0gICAgICogQHBhcmFtCXBhc3N3b3JkCVBhc3N3b3JkCisgICAgICogQHBhcmFtICAgIHVzZXIgICAgVXNlciBOYW1lLgorICAgICAqIEBwYXJhbSAgICBwYXNzd29yZCAgICBQYXNzd29yZAogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uUmVxdWVzdEluZm8oU3RyaW5nIHVzZXIsIFN0cmluZyBwYXNzd29yZCkgewogICAgICAgICB0aGlzLnVzZXIgPSB1c2VyOwpAQCAtNDEsNyArNDEsNyBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgdXNlciBuYW1lIG9mIHRoZSBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVVzZXIgbmFtZSBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCisgICAgICogQHJldHVybiAgICBVc2VyIG5hbWUgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlcigpIHsKICAgICAgICAgcmV0dXJuIHVzZXI7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBwYXNzd29yZCBvZiB0aGUgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqCi0gICAgICogQHJldHVybglQYXNzd29yZCBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCisgICAgICogQHJldHVybiAgICBQYXNzd29yZCBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRQYXNzd29yZCgpIHsKICAgICAgICAgcmV0dXJuIHBhc3N3b3JkOwpAQCAtNTksNyArNTksNyBAQAogICAgIC8qKgogICAgICAqIFZlcmlmeSB3aGV0aGVyIHR3byBDb25uZWN0aW9uUmVxdWVzdEluZm9zIGFyZSBlcXVhbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JVHJ1ZSwgaWYgdGhleSBhcmUgZXF1YWwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKiBAcmV0dXJuICAgIFRydWUsIGlmIHRoZXkgYXJlIGVxdWFsIGFuZCBmYWxzZSBvdGhlcndpc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKICAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CkBAIC03NSwxOCArNzUsMTggQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGhhc2hjb2RlIG9mIHRoZSBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhhc2hDb2RlLgorICAgICAqIEByZXR1cm4gICAgaGFzaENvZGUuCiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKICAgICAgICAgU3RyaW5nIHJlc3VsdCA9ICIiICsgdXNlciArIHBhc3N3b3JkOwogICAgICAgICByZXR1cm4gcmVzdWx0Lmhhc2hDb2RlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tcGFyZXMgdHdvIG9iamVjdHMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbzEJRmlyc3Qgb2JqZWN0LgotICAgICAqIEBwYXJhbQlvMglTZWNvbmQgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvMSAgICBGaXJzdCBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG8yICAgIFNlY29uZCBvYmplY3QuCiAgICAgICovCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKICAgICAgICAgaWYgKG8xID09IG51bGwpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCBhOWZhNWYxLi5iMWZjMGU1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0zMSwzNiArMzEsMzYgQEAKIC8qKgogICogRGF0YSBTb3VyY2UgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMwCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMAorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogCiBwdWJsaWMgY2xhc3MgRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgZXh0ZW5kcyBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgewotICAgCisKICAgICBwcml2YXRlIHRyYW5zaWVudCBqYXZheC5zcWwuRGF0YVNvdXJjZSBkYXRhU291cmNlT2JqOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKICAgICB9CiAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnID0gZmFsc2U7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgbmV3IHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgRUlTIHJlc291cmNlCiAgICAgICogbWFuYWdlci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBwYXJhbQljeFJlcXVlc3RJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0Ci0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAk8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCi0gICAgICogICAgICAgCQkJCWNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0Ci0gICAgICogQHRocm93cwlTZWN1cml0eUV4Y2VwdGlvbglpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0IAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqCQkJCQkJcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gICAgY3hSZXF1ZXN0SW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAorICAgICAqIEB0aHJvd3MgICAgU2VjdXJpdHlFeGNlcHRpb24gICAgaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdCBzdWJqZWN0LAogICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGMgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLCBzdWJqZWN0LCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoZGF0YVNvdXJjZU9iaiA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZihkc09iakJ1aWxkZXIgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGRzT2JqQnVpbGRlciA9IG5ldyBEYXRhU291cmNlT2JqZWN0QnVpbGRlcihzcGVjKTsKQEAgLTc4LDM2ICs3OCwzNiBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBkYXRhU291cmNlT2JqID0gKGphdmF4LnNxbC5EYXRhU291cmNlKSBkc09iakJ1aWxkZXIuY29uc3RydWN0RGF0YVNvdXJjZU9iamVjdCgpOwogICAgICAgICAgICAgfSBjYXRjaChDbGFzc0Nhc3RFeGNlcHRpb24gY2NlKSB7Ci0JICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jY2UiLCBjY2UpOworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY2NlIiwgY2NlKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5SZXNvdXJjZUV4Y2VwdGlvbihjY2UuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRzQ29ubiA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7Ci0JICAgIC8qIEZvciB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlci9wYXNzd2Qgb2YgdGhlIGNvbm5lY3Rpb24gcG9vbCBpcwotCSAgICAgKiBlcXVhbCB0byB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIGZvciB0aGUgY29ubmVjdGlvbiByZXF1ZXN0Ci0JICAgICAqIGdldCBhIGNvbm5lY3Rpb24gZnJvbSB0aGlzIHBvb2wgZGlyZWN0bHkuCi0JICAgICAqIGZvciBhbGwgb3RoZXIgY29uZGl0aW9ucyBnbyBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbgotCSAgICAgKi8KLQkgICAgaWYgKCBpc0VxdWFsKCBwYywgZ2V0VXNlcigpLCBnZXRQYXNzd29yZCgpICkgKSB7Ci0JICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24oKTsKLQkgICAgfSBlbHNlIHsKLQkgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbihwYy5nZXRVc2VyTmFtZSgpLCAKLQkJICAgIG5ldyBTdHJpbmcocGMuZ2V0UGFzc3dvcmQoKSkpOwotCSAgICB9CisgICAgICAgIC8qIEZvciB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlci9wYXNzd2Qgb2YgdGhlIGNvbm5lY3Rpb24gcG9vbCBpcworICAgICAgICAgKiBlcXVhbCB0byB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIGZvciB0aGUgY29ubmVjdGlvbiByZXF1ZXN0CisgICAgICAgICAqIGdldCBhIGNvbm5lY3Rpb24gZnJvbSB0aGlzIHBvb2wgZGlyZWN0bHkuCisgICAgICAgICAqIGZvciBhbGwgb3RoZXIgY29uZGl0aW9ucyBnbyBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBpc0VxdWFsKCBwYywgZ2V0VXNlcigpLCBnZXRQYXNzd29yZCgpICkgKSB7CisgICAgICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbihwYy5nZXRVc2VyTmFtZSgpLAorICAgICAgICAgICAgbmV3IFN0cmluZyhwYy5nZXRQYXNzd29yZCgpKSk7CisgICAgICAgIH0KICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewogICAgICAgICAgICAgc3FsZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2NyZWF0ZV9jb25uIiwgc3FsZSk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBjb3VsZCBub3QgYmUgYWxsb2NhdGVkOiAiICsgCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19jcmVhdGVfY29ubiIsIHNxbGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGFsbG9jYXRlZDogIiArCiAgICAgICAgICAgICAgICAgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVjMtVEVTVCA6IHVuYWJsZSB0byBnZXQgY29ubmVjdGlvbiIpOwotICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWMy1URVNUIDogZ290IGNvbm5lY3Rpb24iKTsKLSAgICAgICAgCisKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbihudWxsLCBkc0Nvbm4sIHBjLCB0aGlzKTsKICAgICAgICAgLy9HSkNJTlQKIC8qCkBAIC0xMTcsMTUgKzExNywxNSBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlYzLVRFU1QgOiByZXR1cm5pbmcgY29ubmVjdGlvbiIpOwogICAgICAgICByZXR1cm4gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvIAorICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0bwogICAgICAqIGFub3RoZXIgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jb3RoZXIJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCi0gICAgICoJCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIG90aGVyICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCisgICAgICogICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTEzNiw0MDkgKzEzNiw0MDkgQEAKICAgICAgICAgICogaWYgYW5kIG9ubHkgaWYgdGhlaXIgcHJvcGVydGllcyBhcmUgdGhlIHNhbWUuCiAgICAgICAgICAqLwogICAgICAgICBpZihvdGhlciBpbnN0YW5jZW9mIGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSkgewotICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG90aGVyTUNGID0gCisgICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnkgb3RoZXJNQ0YgPQogICAgICAgICAgICAgICAgIChjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpIG90aGVyOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BlYy5lcXVhbHMob3RoZXJNQ0Yuc3BlYyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlcnZlck5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc2VydmVyTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHNlcnZlck5hbWUoU3RyaW5nIHNlcnZlck5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSwgc2VydmVyTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXNlcnZlck5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBzZXJ2ZXJOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0c2VydmVyTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlcnZlck5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc2VydmVyTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFNlcnZlck5hbWUoU3RyaW5nIHNlcnZlck5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSwgc2VydmVyTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXNlcnZlck5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBzZXJ2ZXJOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvcnROdW1iZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcG9ydE51bWJlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHBvcnROdW1iZXIoU3RyaW5nIHBvcnROdW1iZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiwgcG9ydE51bWJlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBvcnROdW1iZXIKLSAgICAgKiBAc2VlCTxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBwb3J0TnVtYmVyCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0cG9ydE51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvcnROdW1iZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcG9ydE51bWJlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFBvcnROdW1iZXIoU3RyaW5nIHBvcnROdW1iZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiwgcG9ydE51bWJlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBvcnROdW1iZXIKLSAgICAgKiBAc2VlCTxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBwb3J0TnVtYmVyCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UG9ydE51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGF0YWJhc2VOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGF0YWJhc2VOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkYXRhYmFzZU5hbWUoU3RyaW5nIGRhdGFiYXNlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUsIGRhdGFiYXNlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGF0YWJhc2VOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkYXRhYmFzZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRhdGFiYXNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkYXRhYmFzZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkYXRhYmFzZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERhdGFiYXNlTmFtZShTdHJpbmcgZGF0YWJhc2VOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSwgZGF0YWJhc2VOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkYXRhYmFzZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRhdGFiYXNlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGF0YWJhc2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRhdGFTb3VyY2VOYW1lKFN0cmluZyBkc24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUsIGRzbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHNuCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRzbgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkYXRhU291cmNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERhdGFTb3VyY2VOYW1lKFN0cmluZyBkc24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUsIGRzbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHNuCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRzbgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREYXRhU291cmNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZXNjCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZXNjICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRlc2NyaXB0aW9uKFN0cmluZyBkZXNjKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OLCBkZXNjKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVzYwotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZXNjCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRlc2NyaXB0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlc2MJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlc2MgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2MpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04sIGRlc2MpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglkZXNjCi0gICAgICogQHNlZQk8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlc2MKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlud1Byb3RvY29sCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbndQcm90b2NvbCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0bmV0d29ya1Byb3RvY29sKFN0cmluZyBud1Byb3RvY29sKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCwgbndQcm90b2NvbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbndQcm90b2NvbAotICAgICAqIEBzZWUJPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbndQcm90b2NvbAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0bmV0d29ya1Byb3RvY29sKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHBhcmFtCW53UHJvdG9jb2wJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBud1Byb3RvY29sICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrUHJvdG9jb2woU3RyaW5nIG53UHJvdG9jb2wpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MLCBud1Byb3RvY29sKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHJldHVybglud1Byb3RvY29sCi0gICAgICogQHNlZQk8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHJldHVybiAgICBud1Byb3RvY29sCisgICAgICogQHNlZSAgICA8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXROZXR3b3JrUHJvdG9jb2woKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlyb2xlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcm9sZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0cm9sZU5hbWUoU3RyaW5nIHJvbGVOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FLCByb2xlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglyb2xlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICByb2xlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRyb2xlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jcm9sZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJvbGVOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJvbGVOYW1lKFN0cmluZyByb2xlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSwgcm9sZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jcm9sZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcm9sZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Um9sZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSk7CiAgICAgfQogCi0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHBhcmFtCWxvZ2luVGltZU91dAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZU91dCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0bG9naW5UaW1lT3V0KFN0cmluZyBsb2dpblRpbWVPdXQpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VULCBsb2dpblRpbWVPdXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWxvZ2luVGltZW91dAotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbG9naW5UaW1lb3V0CisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRsb2dpblRpbWVPdXQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lT3V0CTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lT3V0ICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dpblRpbWVPdXQoU3RyaW5nIGxvZ2luVGltZU91dCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQsIGxvZ2luVGltZU91dCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbG9naW5UaW1lb3V0Ci0gICAgICogQHNlZQk8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHJldHVybiAgICBsb2dpblRpbWVvdXQKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldExvZ2luVGltZU91dCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlbGltCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVsaW0gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRlbGltaXRlcihTdHJpbmcgZGVsaW0pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSLCBkZWxpbSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHJldHVybglkZWxpbQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVsaW0KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRlbGltaXRlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlbGltCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVsaW0gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlbGltaXRlcihTdHJpbmcgZGVsaW0pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSLCBkZWxpbSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHJldHVybglkZWxpbQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVsaW0KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlbGltaXRlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHJpdmVyUHJvcHMJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHJpdmVyUHJvcHMgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkcml2ZXJQcm9wZXJ0aWVzKFN0cmluZyBkcml2ZXJQcm9wcykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTLCBkcml2ZXJQcm9wcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRyaXZlclByb3BzCi0gICAgICogQHNlZQk8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHJpdmVyUHJvcHMKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkcml2ZXJQcm9wZXJ0aWVzKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHJpdmVyUHJvcHMJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHJpdmVyUHJvcHMgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREcml2ZXJQcm9wZXJ0aWVzKFN0cmluZyBkcml2ZXJQcm9wcykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTLCBkcml2ZXJQcm9wcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRyaXZlclByb3BzCi0gICAgICogQHNlZQk8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHJpdmVyUHJvcHMKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREcml2ZXJQcm9wZXJ0aWVzKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7CkBAIC01NDgsMzUgKzU0OCwzNSBAQAogICAgICAqIENoZWNrIGlmIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgcGFzc2VkIGZvciB0aGlzIGdldCBjb25uZWN0aW9uCiAgICAgICogcmVxdWVzdCBpcyBlcXVhbCB0byB0aGUgdXNlci9wYXNzd2Qgb2YgdGhpcyBjb25uZWN0aW9uIHBvb2wuCiAgICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoIFBhc3N3b3JkQ3JlZGVudGlhbCBwYywgU3RyaW5nIHVzZXIsIAorICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKCBQYXNzd29yZENyZWRlbnRpYWwgcGMsIFN0cmluZyB1c2VyLAogICAgICAgICBTdHJpbmcgcGFzc3dvcmQpIHsKLSAgICAgICAgCi0JLy9pZiBlcXVhbCBnZXQgZGlyZWN0IGNvbm5lY3Rpb24gZWxzZSAKLQkvL2dldCBjb25uZWN0aW9uIHdpdGggdXNlciBhbmQgcGFzc3dvcmQuCi0JCi0JaWYgKHVzZXIgPT0gbnVsbCAmJiBwYyA9PSBudWxsKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0KLQkKLQlpZiAoIHVzZXIgPT0gbnVsbCAmJiBwYyAhPSBudWxsICkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCX0KIAotCWlmKCBwYyA9PSBudWxsICkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JaWYgKCB1c2VyLmVxdWFscyggcGMuZ2V0VXNlck5hbWUoKSApICkgewotCSAgICBpZiAoIHBhc3N3b3JkID09IG51bGwgJiYgcGMuZ2V0UGFzc3dvcmQoKSA9PSBudWxsICkgewotCSAgICAgICAgcmV0dXJuIHRydWU7Ci0JICAgIH0KLQl9Ci0JCi0JaWYgKCB1c2VyLmVxdWFscyhwYy5nZXRVc2VyTmFtZSgpKSAmJiBwYXNzd29yZC5lcXVhbHMocGMuZ2V0UGFzc3dvcmQoKSkgKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0gCi0JCi0gICAgICAgIAotCXJldHVybiBmYWxzZTsKKyAgICAvL2lmIGVxdWFsIGdldCBkaXJlY3QgY29ubmVjdGlvbiBlbHNlCisgICAgLy9nZXQgY29ubmVjdGlvbiB3aXRoIHVzZXIgYW5kIHBhc3N3b3JkLgorCisgICAgaWYgKHVzZXIgPT0gbnVsbCAmJiBwYyA9PSBudWxsKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICggdXNlciA9PSBudWxsICYmIHBjICE9IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYoIHBjID09IG51bGwgKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICggdXNlci5lcXVhbHMoIHBjLmdldFVzZXJOYW1lKCkgKSApIHsKKyAgICAgICAgaWYgKCBwYXNzd29yZCA9PSBudWxsICYmIHBjLmdldFBhc3N3b3JkKCkgPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCB1c2VyLmVxdWFscyhwYy5nZXRVc2VyTmFtZSgpKSAmJiBwYXNzd29yZC5lcXVhbHMocGMuZ2V0UGFzc3dvcmQoKSkgKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworCisgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKaW5kZXggZDkwMDg1ZC4uNTFmMTc3MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKQEAgLTI4LDIyICsyOCwyMiBAQAogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKIC8qKgotICogSG9sZHMgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCwgd2hpY2ggaXMgdG8gYmUgCisgKiBIb2xkcyB0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LCB3aGljaCBpcyB0byBiZQogICogcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCiBwdWJsaWMgY2xhc3MgRGF0YVNvdXJjZSBpbXBsZW1lbnRzIGphdmF4LnNxbC5EYXRhU291cmNlLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSwKLQkJY29tLnN1bi5hcHBzZXJ2LmpkYmNyYS5EYXRhU291cmNlLCBqYWthcnRhLnJlc291cmNlLlJlZmVyZW5jZWFibGV7IAotCQkJCSAgIAorICAgICAgICBjb20uc3VuLmFwcHNlcnYuamRiY3JhLkRhdGFTb3VyY2UsIGpha2FydGEucmVzb3VyY2UuUmVmZXJlbmNlYWJsZXsKKwogICAgIHByaXZhdGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZjsKLSAgICBwcml2YXRlIENvbm5lY3Rpb25NYW5hZ2VyIGNtOwkJCQkgICAJCQkJICAgCisgICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsKICAgICBwcml2YXRlIGludCBsb2dpblRpbWVvdXQ7CiAgICAgcHJpdmF0ZSBQcmludFdyaXRlciBsb2dXcml0ZXI7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CQkJCSAgIAorICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwogICAgIHByaXZhdGUgUmVmZXJlbmNlIHJlZmVyZW5jZTsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC01MSw1OCArNTEsNTggQEAKICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKIAogICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0LiBUaGlzIGlzIGNyZWF0ZWQgYnkgdGhlIAorICAgICAqIENvbnN0cnVjdHMgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0LiBUaGlzIGlzIGNyZWF0ZWQgYnkgdGhlCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IAotICAgICAqCQkJY3JlYXRpbmcgdGhpcyBvYmplY3QuCi0gICAgICogQHBhcmFtCWNtCTxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBvYmplY3QgZWl0aGVyIGFzc29jaWF0ZWQKLSAgICAgKgkJCXdpdGggQXBwbGljYXRpb24gc2VydmVyIG9yIFJlc291cmNlIEFkYXB0ZXIuCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgY3JlYXRpbmcgdGhpcyBvYmplY3QuCisgICAgICogQHBhcmFtICAgIGNtICAgIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBvYmplY3QgZWl0aGVyIGFzc29jaWF0ZWQKKyAgICAgKiAgICAgICAgICAgIHdpdGggQXBwbGljYXRpb24gc2VydmVyIG9yIFJlc291cmNlIEFkYXB0ZXIuCiAgICAgICovCiAgICAgcHVibGljIERhdGFTb3VyY2UgKE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsIENvbm5lY3Rpb25NYW5hZ2VyIGNtKSB7Ci0gICAgCXRoaXMubWNmID0gbWNmOwotICAgIAlpZiAoY20gPT0gbnVsbCkgewotICAgIAkgICAgdGhpcy5jbSA9IChDb25uZWN0aW9uTWFuYWdlcikgbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uTWFuYWdlcigpOwotICAgIAl9IGVsc2UgewotICAgIAkgICAgdGhpcy5jbSA9IGNtOwotICAgIAl9ICAgIAkKLSAgICB9ICAgCi0gICAgCisgICAgICAgIHRoaXMubWNmID0gbWNmOworICAgICAgICBpZiAoY20gPT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5jbSA9IChDb25uZWN0aW9uTWFuYWdlcikgbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uTWFuYWdlcigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5jbSA9IGNtOworICAgICAgICB9CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuCTxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuICAgICAgCisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbigpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAl0cnkgewotICAgIAkgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLG51bGwpOyAgICAJICAgIAotICAgIAl9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLG51bGwpOworICAgICAgICB9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewogLy8gVGhpcyBpcyB0ZW1wb3JhcnkuIFRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byBTRVZFUkUgYWZ0ZXIgVFAKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIHJlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIAkgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJfQorICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogCi0gICAgICogQHBhcmFtCXVzZXIJVXNlciBuYW1lIGZvciB0aGUgQ29ubmVjdGlvbi4KLSAgICAgKiBAcGFyYW0JcHdkCVBhc3N3b3JkIGZvciB0aGUgQ29ubmVjdGlvbi4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuICAgICAgCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICBVc2VyIG5hbWUgZm9yIHRoZSBDb25uZWN0aW9uLgorICAgICAqIEBwYXJhbSAgICBwd2QgICAgUGFzc3dvcmQgZm9yIHRoZSBDb25uZWN0aW9uLgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uKFN0cmluZyB1c2VyLCBTdHJpbmcgcHdkKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJdHJ5IHsKLSAgICAJICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvID0gbmV3IENvbm5lY3Rpb25SZXF1ZXN0SW5mbyAodXNlciwgcHdkKTsKLSAgICAJICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixpbmZvKTsKLSAgICAJfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvID0gbmV3IENvbm5lY3Rpb25SZXF1ZXN0SW5mbyAodXNlciwgcHdkKTsKKyAgICAgICAgICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixpbmZvKTsKKyAgICAgICAgfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKIC8vIFRoaXMgaXMgdGVtcG9yYXJ5LiBUaGlzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gU0VWRVJFIGFmdGVyIFRQCi0JICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOwotICAgIAl9Ci0gICAgfSAgICAKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBTUUxDb25uZWN0aW9uIGZyb20gdGhlIENvbm5lY3Rpb24gd3JhcHBlcgpAQCAtMTE1LDkxICsxMTUsOTEgQEAKICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uKENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKIAotICAgICAgICBDb25uZWN0aW9uIGRyaXZlckNvbiA9IGNvbjsgCisgICAgICAgIENvbm5lY3Rpb24gZHJpdmVyQ29uID0gY29uOwogICAgICAgICBpZiAoY29uIGluc3RhbmNlb2YgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIHsKLSAgICAgICAgICAgZHJpdmVyQ29uID0gKChjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgY29uKS5nZXRDb25uZWN0aW9uKCk7IAotICAgICAgICB9IAorICAgICAgICAgICBkcml2ZXJDb24gPSAoKGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSBjb24pLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBkcml2ZXJDb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSBsb2dpbiB0aW1lb3V0CiAgICAgICoKICAgICAgKiBAcmV0dXJuIGxvZ2luIHRpbWVvdXQuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRMb2dpblRpbWVvdXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAlyZXR1cm4JbG9naW5UaW1lb3V0OworICAgICAgICByZXR1cm4gICAgbG9naW5UaW1lb3V0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9naW4gdGltZW91dAogICAgICAqCi0gICAgICogQHBhcmFtCWxvZ2luVGltZW91dAlMb2dpbiB0aW1lb3V0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEBwYXJhbSAgICBsb2dpblRpbWVvdXQgICAgTG9naW4gdGltZW91dC4KKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dpblRpbWVvdXQoaW50IGxvZ2luVGltZW91dCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJdGhpcy5sb2dpblRpbWVvdXQgPSBsb2dpblRpbWVvdXQ7CisgICAgICAgIHRoaXMubG9naW5UaW1lb3V0ID0gbG9naW5UaW1lb3V0OwogICAgIH0KLSAgICAKLSAgICAvKiogCisKKyAgICAvKioKICAgICAgKiBHZXQgdGhlIGxvZ3dyaXRlciBvYmplY3QuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmludFdyaXRlciA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KICAgICAgKi8KICAgICBwdWJsaWMgUHJpbnRXcml0ZXIgZ2V0TG9nV3JpdGVyKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJcmV0dXJuCWxvZ1dyaXRlcjsKKyAgICAgICAgcmV0dXJuICAgIGxvZ1dyaXRlcjsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBsb2d3cml0ZXIgb24gdGhpcyBvYmplY3QuCiAgICAgICoKICAgICAgKiBAcGFyYW0gPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dXcml0ZXIoUHJpbnRXcml0ZXIgbG9nV3JpdGVyKSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAl0aGlzLmxvZ1dyaXRlciA9IGxvZ1dyaXRlcjsKLSAgICB9ICAgICAgICAKLSAgICAgICAgCisgICAgICAgIHRoaXMubG9nV3JpdGVyID0gbG9nV3JpdGVyOworICAgIH0KKwogICAgIHB1YmxpYyBMb2dnZXIgZ2V0UGFyZW50TG9nZ2VyKCkgdGhyb3dzIFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IGZlYXR1cmUuIik7CiAgICAgfQogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCURlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgorICAgICAqIEByZXR1cm4gICAgRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKLSAgICAJcmV0dXJuIGRlc2NyaXB0aW9uOworICAgICAgICByZXR1cm4gZGVzY3JpcHRpb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgogICAgICAqIEBwYXJhbSBkZXNjcmlwdGlvbiBEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzY3JpcHRpb24pIHsKLSAgICAJdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotICAgIH0gICAgCi0gICAgCisgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIHJlZmVyZW5jZS4KICAgICAgKgogICAgICAqIEByZXR1cm4gPGNvZGU+UmVmZXJlbmNlPC9jb2RlPm9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgUmVmZXJlbmNlIGdldFJlZmVyZW5jZSgpIHsKLSAgICAJcmV0dXJuIHJlZmVyZW5jZTsKKyAgICAgICAgcmV0dXJuIHJlZmVyZW5jZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIHJlZmVyZW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZWZlcmVuY2UgPGNvZGU+UmVmZXJlbmNlPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIHJlZmVyZW5jZSA8Y29kZT5SZWZlcmVuY2U8L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSZWZlcmVuY2UoUmVmZXJlbmNlIHJlZmVyZW5jZSkgewotICAgIAl0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTsKKyAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7CiAgICAgfQogCiAgICAgcHVibGljIDxUPiBUIHVud3JhcChDbGFzczxUPiBpZmFjZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKaW5kZXggNTc0ZWQ2Ni4uYmVjMGQ2YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQpAQCAtMTgsMTMgKzE4LDEzIEBACiAKIHB1YmxpYyBpbnRlcmZhY2UgSmRiY1NldHVwQWRtaW4gewogCi0gICAgcHVibGljIHZvaWQgc2V0VGFibGVOYW1lKFN0cmluZyBkYik7IAorICAgIHB1YmxpYyB2b2lkIHNldFRhYmxlTmFtZShTdHJpbmcgZGIpOwogCiAgICAgcHVibGljIFN0cmluZyBnZXRUYWJsZU5hbWUoKTsKIAotICAgIHB1YmxpYyB2b2lkIHNldEpuZGlOYW1lKFN0cmluZyBuYW1lKTsgCisgICAgcHVibGljIHZvaWQgc2V0Sm5kaU5hbWUoU3RyaW5nIG5hbWUpOwogCi0gICAgcHVibGljIFN0cmluZyBnZXRKbmRpTmFtZSgpOyAKKyAgICBwdWJsaWMgU3RyaW5nIGdldEpuZGlOYW1lKCk7CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTY2hlbWFOYW1lKFN0cmluZyBuYW1lKTsKIApAQCAtMzQsNiArMzQsNiBAQAogCiAgICAgcHVibGljIEludGVnZXIgZ2V0Tm9PZlJvd3MoKTsKIAotICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2V0dXAoKTsgCisgICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZXR1cCgpOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQppbmRleCAzYmQ3Y2FkLi5mZWM3NDQzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKQEAgLTY1LDExICs2NSwxMSBAQAogCiBwcml2YXRlIHZvaWQgcHJpbnRIaWVyYXJjaHkoQ2xhc3NMb2FkZXIgY2wsIGludCBjbnQpewogd2hpbGUoY2wgIT0gbnVsbCkgewotCWZvcihpbnQgaSA9MDsgaSA8IGNudDsgaSsrKSAKLQkJU3lzdGVtLm91dC5wcmludCgiICIgKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCA6IiArIGNsKTsKLQljbCA9IGNsLmdldFBhcmVudCgpOwotCWNudCArPSAzOworICAgIGZvcihpbnQgaSA9MDsgaSA8IGNudDsgaSsrKQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIgIiApOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIDoiICsgY2wpOworICAgIGNsID0gY2wuZ2V0UGFyZW50KCk7CisgICAgY250ICs9IDM7CiB9CiB9CiAKQEAgLTc4LDEwICs3OCwxMCBAQAogICAgICAgICBmb3IoaW50IGkgPTA7IGkgPCBjbnQ7IGkrKykKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIgIiApOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCBvZiBDbGFzc0xvYWRlciAxIDoiICsgY2wxKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCBvZiBDbGFzc0xvYWRlciAyIDoiICsgY2wyKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkVRVUFMUyA6ICIgKyAoY2wxID09IGNsMikpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIG9mIENsYXNzTG9hZGVyIDIgOiIgKyBjbDIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRVFVQUxTIDogIiArIChjbDEgPT0gY2wyKSk7CiAgICAgICAgIGNsMSA9IGNsMS5nZXRQYXJlbnQoKTsKLQljbDIgPSBjbDIuZ2V0UGFyZW50KCk7CisgICAgY2wyID0gY2wyLmdldFBhcmVudCgpOwogICAgICAgICBjbnQgKz0gMzsKIH0KIH0KQEAgLTkwLDkzICs5MCw5MyBAQAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2V0dXAoKXsKIAogICAgICAgICBpZiAoam5kaU5hbWU9PSBudWxsIHx8IGpuZGlOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgcmV0dXJuIGZhbHNlOwotCX0KKyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgICAgIGlmICh0YWJsZU5hbWU9PSBudWxsIHx8IHRhYmxlTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IG51bGw7Ci0JU3RhdGVtZW50IHMgPSBudWxsOwotCVJlc3VsdFNldCBycyA9IG51bGw7Ci0JYm9vbGVhbiBiID0gZmFsc2U7CisgICAgU3RhdGVtZW50IHMgPSBudWxsOworICAgIFJlc3VsdFNldCBycyA9IG51bGw7CisgICAgYm9vbGVhbiBiID0gZmFsc2U7CiAgICAgICAgIHRyeSB7Ci0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JLy9kZWJ1ZwotCUNsYXNzIGNseiA9IERhdGFTb3VyY2UuY2xhc3M7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgLy9kZWJ1ZworICAgIENsYXNzIGNseiA9IERhdGFTb3VyY2UuY2xhc3M7CiAvKgotCWlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJEYXRhU291cmNlJ3MgY2xhc3hzIDogIiArICBjbHouZ2V0TmFtZSgpICsgICIgY2xhc3Nsb2FkZXIgIiArIGNsei5nZXRDbGFzc0xvYWRlcigpKTsKLQkJcHJpbnRIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOwotCX0KLQlDbGFzcyBjbHMgPSBpYy5sb29rdXAoam5kaU5hbWUpLmdldENsYXNzKCk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgY2xhc3MncyA6ICIgKyBjbHMuZ2V0UGFja2FnZSgpICsgIjoiICsgY2xzLmdldE5hbWUoKSAgKyAiIGNsYXNzbG9hZGVyICIgICsgY2xzLmdldENsYXNzTG9hZGVyKCkpOwotCXByaW50SGllcmFyY2h5KGNscy5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKKyAgICBpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGF0YVNvdXJjZSdzIGNsYXN4cyA6ICIgKyAgY2x6LmdldE5hbWUoKSArICAiIGNsYXNzbG9hZGVyICIgKyBjbHouZ2V0Q2xhc3NMb2FkZXIoKSk7CisgICAgICAgIHByaW50SGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKKyAgICB9CisgICAgQ2xhc3MgY2xzID0gaWMubG9va3VwKGpuZGlOYW1lKS5nZXRDbGFzcygpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGNsYXNzJ3MgOiAiICsgY2xzLmdldFBhY2thZ2UoKSArICI6IiArIGNscy5nZXROYW1lKCkgICsgIiBjbGFzc2xvYWRlciAiICArIGNscy5nZXRDbGFzc0xvYWRlcigpKTsKKyAgICBwcmludEhpZXJhcmNoeShjbHMuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzbG9hZGVycyBlcXVhbCA/ICIgKyAgKGNsei5nZXRDbGFzc0xvYWRlcigpID09IGNscy5nZXRDbGFzc0xvYWRlcigpKSk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCImKiYqJiomKiBDb21wYXJpbmcgSGllcmFjaHkgRGF0YVNvdXJjZSB2cyBsb29rZWR1cCIpOwotCWlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKLQkJY29tcGFyZUhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKSwgY2xzLmdldENsYXNzTG9hZGVyKCksIDgpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzbG9hZGVycyBlcXVhbCA/ICIgKyAgKGNsei5nZXRDbGFzc0xvYWRlcigpID09IGNscy5nZXRDbGFzc0xvYWRlcigpKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCImKiYqJiomKiBDb21wYXJpbmcgSGllcmFjaHkgRGF0YVNvdXJjZSB2cyBsb29rZWR1cCIpOworICAgIGlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKKyAgICAgICAgY29tcGFyZUhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKSwgY2xzLmdldENsYXNzTG9hZGVyKCksIDgpOworICAgIH0KIAotCVN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGxvb2t1cCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGxvb2t1cCIpOwogKi8KLQlPYmplY3QgbyA9IGljLmxvb2t1cChqbmRpTmFtZSk7Ci0vLwlTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGxvb2t1cCBsb29rdXAiKTsKKyAgICBPYmplY3QgbyA9IGljLmxvb2t1cChqbmRpTmFtZSk7CisvLyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGxvb2t1cCBsb29rdXAiKTsKIAotCSAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpbyA7CisgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlvIDsKIC8qCi0JU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBjYXN0Iik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tIFRyeWluZyBvdXIgU3R1ZmYgISEhIik7Ci0JdHJ5IHsKLQkJQ2xhc3MgbzEgPSAoQ2xhc3MuZm9yTmFtZSgiY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UiKSk7Ci0JCUNsYXNzTG9hZGVyIGNsMSA9IG8xLmdldENsYXNzTG9hZGVyKCk7Ci0JCUNsYXNzTG9hZGVyIGNsMiA9IERhdGFTb3VyY2UuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDbDEgPT0gQ2wyIiArIChjbDEgPT0gY2wyKSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3NlcyBlcXVhbCIgKyAoRGF0YVNvdXJjZS5jbGFzcyA9PSBvMSkpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBjYXN0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tIFRyeWluZyBvdXIgU3R1ZmYgISEhIik7CisgICAgdHJ5IHsKKyAgICAgICAgQ2xhc3MgbzEgPSAoQ2xhc3MuZm9yTmFtZSgiY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UiKSk7CisgICAgICAgIENsYXNzTG9hZGVyIGNsMSA9IG8xLmdldENsYXNzTG9hZGVyKCk7CisgICAgICAgIENsYXNzTG9hZGVyIGNsMiA9IERhdGFTb3VyY2UuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbDEgPT0gQ2wyIiArIChjbDEgPT0gY2wyKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3NlcyBlcXVhbCIgKyAoRGF0YVNvdXJjZS5jbGFzcyA9PSBvMSkpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAqLwogICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBTdHJpbmcgZnVsbFRhYmxlTmFtZSA9IHRhYmxlTmFtZTsKLQkgICAgaWYgKHNjaGVtYU5hbWUgIT0gbnVsbCAmJiAoIShzY2hlbWFOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSkpIHsKLQkgICAgICAgIGZ1bGxUYWJsZU5hbWUgPSBzY2hlbWFOYW1lLnRyaW0oKSArICIuIiArIGZ1bGxUYWJsZU5hbWU7Ci0JICAgIH0KLQkgICAgU3RyaW5nIHFyeSA9ICJzZWxlY3QgKiBmcm9tICIgKyBmdWxsVGFibGVOYW1lOyAKKyAgICAgICAgU3RyaW5nIGZ1bGxUYWJsZU5hbWUgPSB0YWJsZU5hbWU7CisgICAgICAgIGlmIChzY2hlbWFOYW1lICE9IG51bGwgJiYgKCEoc2NoZW1hTmFtZS50cmltKCkuZXF1YWxzKCIiKSkpKSB7CisgICAgICAgICAgICBmdWxsVGFibGVOYW1lID0gc2NoZW1hTmFtZS50cmltKCkgKyAiLiIgKyBmdWxsVGFibGVOYW1lOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBxcnkgPSAic2VsZWN0ICogZnJvbSAiICsgZnVsbFRhYmxlTmFtZTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyBxdWVyeSA6IiArIHFyeSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0aW5nIHF1ZXJ5IDoiICsgcXJ5KTsKIAotCSAgICBzID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBycyA9IHMuZXhlY3V0ZVF1ZXJ5KHFyeSk7IAorICAgICAgICBzID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBycyA9IHMuZXhlY3V0ZVF1ZXJ5KHFyeSk7CiAKICAgICAgICAgICAgIGludCBpID0gMDsKLQkgICAgaWYgKHJzLm5leHQoKSkgewotCSAgICAgICAgaSsrOwotCSAgICB9CisgICAgICAgIGlmIChycy5uZXh0KCkpIHsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vIG9mIHJvd3MgZm91bmQ6IiArIGkpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJObyBvZiByb3dzIGV4cGVjdGVkOiIgKyBub09mUm93cyk7CiAKLQkgICAgaWYgKGkgPT0gbm9PZlJvd3MuaW50VmFsdWUoKSkgewotCSAgICAgICBiID0gdHJ1ZTsKLQkgICAgfSBlbHNlIHsKLQkgICAgICAgYiA9IGZhbHNlOwotCSAgICB9Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBiID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGlmIChycyAhPSBudWxsKSBycy5jbG9zZSgpOwotCSAgICAgICAgaWYgKHMgIT0gbnVsbCkgcy5jbG9zZSgpOwotCSAgICAgICAgaWYgKGNvbiAhPSBudWxsKSBjb24uY2xvc2UoKTsKKyAgICAgICAgaWYgKGkgPT0gbm9PZlJvd3MuaW50VmFsdWUoKSkgeworICAgICAgICAgICBiID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgYiA9IGZhbHNlOworICAgICAgICB9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBiID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChycyAhPSBudWxsKSBycy5jbG9zZSgpOworICAgICAgICAgICAgaWYgKHMgIT0gbnVsbCkgcy5jbG9zZSgpOworICAgICAgICAgICAgaWYgKGNvbiAhPSBudWxsKSBjb24uY2xvc2UoKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIH0KLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJSZXR1cm5pbmcgc2V0dXAgOiIgK2IpOwotCXJldHVybiBiOworICAgICAgICB9CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuaW5nIHNldHVwIDoiICtiKTsKKyAgICByZXR1cm4gYjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEKaW5kZXggOGViZTA1Ny4uYzU0YTIxNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEKQEAgLTIzLDQ1ICsyMyw0NSBAQAogLyoqCiAgKiA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzAzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIExvY2FsVHJhbnNhY3Rpb24gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Mb2NhbFRyYW5zYWN0aW9uIHsKLSAgICAKKwogICAgIHByaXZhdGUgTWFuYWdlZENvbm5lY3Rpb24gbWM7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4uCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IHJldHVybnMKLSAgICAgKgkJCXRoaXMgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gb2JqZWN0IGFzCi0gICAgICoJCQlhIHJlc3VsdCBvZiA8Y29kZT5nZXRMb2NhbFRyYW5zYWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCByZXR1cm5zCisgICAgICogICAgICAgICAgICB0aGlzIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IG9iamVjdCBhcworICAgICAqICAgICAgICAgICAgYSByZXN1bHQgb2YgPGNvZGU+Z2V0TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgTG9jYWxUcmFuc2FjdGlvbihNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLm1jID0gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQmVnaW4gYSBsb2NhbCB0cmFuc2FjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYmVnaW4oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uU3RhcnRlZCgpOworICAgIG1jLnRyYW5zYWN0aW9uU3RhcnRlZCgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpLnNldEF1dG9Db21taXQoZmFsc2UpOwogICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21taXQgYSBsb2NhbCB0cmFuc2FjdGlvbi4KLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uIG9yIGNvbW1pdHRpbmcgdGhlIHRyYW5zYWN0aW9uCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBvciBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbW1pdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIEV4Y2VwdGlvbiBlID0gbnVsbDsKQEAgLTcyLDE1ICs3MiwxNSBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJvbGxiYWNrIGEgbG9jYWwgdHJhbnNhY3Rpb24uCi0gICAgICogCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbiBvciByb2xsaW5nIGJhY2sgdGhlIHRyYW5zYWN0aW9uCisgICAgICoKKyAgICAgKiBAdGhyb3dzICAgIExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIG9yIHJvbGxpbmcgYmFjayB0aGUgdHJhbnNhY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjaygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CkBAIC05MCw3ICs5MCw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKaW5kZXggMzBmNDYwYS4uMmRhZDU5YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQpAQCAtNDEsOCArNDEsOCBAQAogLyoqCiAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMgotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjIKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbiBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIHsKIApAQCAtNTIsNyArNTIsNyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzRGVzdHJveWVkID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBib29sZWFuIGlzVXNhYmxlID0gdHJ1ZTsKLSAgICAKKwogICAgIHByaXZhdGUgaW50IGNvbm5lY3Rpb25UeXBlID0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTjsKICAgICBwcml2YXRlIFBvb2xlZENvbm5lY3Rpb24gcGMgPSBudWxsOwogICAgIHByaXZhdGUgamF2YS5zcWwuQ29ubmVjdGlvbiBhY3R1YWxDb25uZWN0aW9uID0gbnVsbDsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICBwcml2YXRlIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YgPSBudWxsOwogICAgIHByaXZhdGUgWEFSZXNvdXJjZSB4YXIgPSBudWxsOwogICAgIHB1YmxpYyBDb25uZWN0aW9uSG9sZGVyIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGU7Ci0gICAgCisKICAgICAvL0dKQ0lOVAogICAgIHByaXZhdGUgaW50IGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQ7CiAgICAgcHJpdmF0ZSBib29sZWFuIGlzQ2xlYW4gPSBmYWxzZTsKQEAgLTc3LDcxICs3Nyw3MSBAQAogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4gVGhlIHBvb2xlZENvbm4gcGFyYW1ldGVyIGlzIGV4cGVjdGVkCi0gICAgICogdG8gYmUgbnVsbCBhbmQgc3FsQ29ubiBwYXJhbWV0ZXIgaXMgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIGNhc2Ugd2hlcmUgCi0gICAgICogdGhlIGFjdHVhbCBjb25uZWN0aW9uIGlzIGdvdCBmcm9tIGEgbm9uIHBvb2xlZCBkYXRhc291cmNlIG9iamVjdC4gVGhlIAorICAgICAqIHRvIGJlIG51bGwgYW5kIHNxbENvbm4gcGFyYW1ldGVyIGlzIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiBjYXNlIHdoZXJlCisgICAgICogdGhlIGFjdHVhbCBjb25uZWN0aW9uIGlzIGdvdCBmcm9tIGEgbm9uIHBvb2xlZCBkYXRhc291cmNlIG9iamVjdC4gVGhlCiAgICAgICogcG9vbGVkQ29ubiBwYXJhbWV0ZXIgaXMgZXhwZWN0ZWQgdG8gYmUgbm9uIG51bGwgYW5kIHNxbENvbm4gcGFyYW1ldGVyCiAgICAgICogaXMgZXhwZWN0ZWQgdG8gYmUgbnVsbCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgZGF0YXNvdXJjZSBvYmplY3QgaXMgYQogICAgICAqIGNvbm5lY3Rpb24gcG9vbCBkYXRhc291cmNlIG9yIGFuIHhhIGRhdGFzb3VyY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcG9vbGVkQ29ubgk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgCi0gICAgICoJCQkJcGh5c2ljYWwgY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgcG9vbGVkCi0gICAgICoJCQkJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47IG51bGwgb3RoZXJ3aXNlCi0gICAgICogQHBhcmFtCXNxbENvbm4JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIHBoeXNpY2FsCi0gICAgICoJCQljb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBub24gcG9vbGVkIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OwotICAgICAqCQkJbnVsbCBvdGhlcndpc2UKLSAgICAgKiBAcGFyYW0JcGFzc3dkQ3JlZAlvYmplY3QgY29uYXRpbmluZyB0aGUKLSAgICAgKgkJCQl1c2VyIGFuZCBwYXNzd29yZCBmb3IgYWxsb2NhdGluZyB0aGUgY29ubmVjdGlvbgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0Ci0gICAgICoJCQkJCXRoYXQgY3JlYXRlZCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKLSAgICAgKgkJCQkJaXMgbm90IHRoZSBzYW1lIGFzIHJldHVybmVkIGJ5IDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKgkJCQkJb2JqZWN0IHBhc3NlZAorICAgICAqIEBwYXJhbSAgICBwb29sZWRDb25uICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZQorICAgICAqICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIHBvb2xlZAorICAgICAqICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OyBudWxsIG90aGVyd2lzZQorICAgICAqIEBwYXJhbSAgICBzcWxDb25uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgbm9uIHBvb2xlZCA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsKKyAgICAgKiAgICAgICAgICAgIG51bGwgb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHBhc3N3ZENyZWQgICAgb2JqZWN0IGNvbmF0aW5pbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgdXNlciBhbmQgcGFzc3dvcmQgZm9yIGFsbG9jYXRpbmcgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICB0aGF0IGNyZWF0ZWQgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgIGlzIG5vdCB0aGUgc2FtZSBhcyByZXR1cm5lZCBieSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIG9iamVjdCBwYXNzZWQKICAgICAgKi8KLSAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24oUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uLCBqYXZhLnNxbC5Db25uZWN0aW9uIHNxbENvbm4sIAorICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbihQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4sIGphdmEuc3FsLkNvbm5lY3Rpb24gc3FsQ29ubiwKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3N3ZENyZWQsIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKHBvb2xlZENvbm4gPT0gbnVsbCAmJiBzcWxDb25uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ29ubmVjdGlvbiBvYmplY3QgY2Fubm90IGJlIG51bGwiKTsKICAgICAgICAgfQogCi0JaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7Ci0JICAgIGFjdHVhbENvbm5lY3Rpb24gPSBzcWxDb25uOwotCX0KKyAgICBpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKKyAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IHNxbENvbm47CisgICAgfQogCiAgICAgICAgIHBjID0gcG9vbGVkQ29ubjsKICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBuZXcgSGFzaHRhYmxlKCk7CiAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBwYXNzd2RDcmVkOwogICAgICAgICB0aGlzLm1jZiA9IG1jZjsKLSAgICAgICAgaWYocGFzc3dkQ3JlZGVudGlhbCAhPSBudWxsICYmICAKKyAgICAgICAgaWYocGFzc3dkQ3JlZGVudGlhbCAhPSBudWxsICYmCiAgICAgICAgICAgICB0aGlzLm1jZi5lcXVhbHMocGFzc3dkQ3JlZGVudGlhbC5nZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKSkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB0aGF0IGhhcyBjcmVhdGVkIHRoaXMgIiArIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHRoYXQgaGFzIGNyZWF0ZWQgdGhpcyAiICsKICAgICAgICAgICAgICAgICAiTWFuYWdlZENvbm5lY3Rpb24gaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgcmV0dXJuZWQgYnkiICsKICAgICAgICAgICAgICAgICAgICAgIiB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIGZvciB0aGlzIE1hbmFnZWRDb25uZWN0aW9uIik7CiAgICAgICAgIH0KICAgICAgICAgbG9nV3JpdGVyID0gbWNmLmdldExvZ1dyaXRlcigpOwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLQljZSA9IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fQ0xPU0VEKTsKKyAgICBjZSA9IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fQ0xPU0VEKTsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBBZGRzIGEgY29ubmVjdGlvbiBldmVudCBsaXN0ZW5lciB0byB0aGUgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGlzdGVuZXIJPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxpc3RlbmVyICAgIDxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqIEBzZWUgPGNvZGU+cmVtb3ZlQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYWRkQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIoQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQl0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7CisgICAgdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBjaGFuZ2UgdGhlIGFzc29jaWF0aW9uIG9mIGFuIGFwcGxpY2F0aW9uLWxldmVsIAorICAgICAqIFVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBjaGFuZ2UgdGhlIGFzc29jaWF0aW9uIG9mIGFuIGFwcGxpY2F0aW9uLWxldmVsCiAgICAgICogY29ubmVjdGlvbiBoYW5kbGUgd2l0aCBhIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQljb25uZWN0aW9uCTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aAotICAgICAqCQkJCXRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlCi0gICAgICoJCQkJCXZhbGlkIG9yIHRoZSBjb25uZWN0aW9uIGhhbmRsZSBwYXNzZWQgaXMgbnVsbAorICAgICAqIEBwYXJhbSAgICBjb25uZWN0aW9uICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aAorICAgICAqICAgICAgICAgICAgICAgIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlCisgICAgICogICAgICAgICAgICAgICAgICAgIHZhbGlkIG9yIHRoZSBjb25uZWN0aW9uIGhhbmRsZSBwYXNzZWQgaXMgbnVsbAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGFzc29jaWF0ZUNvbm5lY3Rpb24oT2JqZWN0IGNvbm5lY3Rpb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xNTIsMTEgKzE1MiwxMSBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDb25uZWN0aW9uIGhhbmRsZSBjYW5ub3QgYmUgbnVsbCIpOwogICAgICAgICB9CiAgICAgICAgIENvbm5lY3Rpb25Ib2xkZXIgY2ggPSAoQ29ubmVjdGlvbkhvbGRlcikgY29ubmVjdGlvbjsKLSAgICAgICAgCisKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jID0gKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiljaC5nZXRNYW5hZ2VkQ29ubmVjdGlvbigpOwotCW1jLmFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotCWlzQ2xlYW4gPSBmYWxzZTsKLSAgICAgICAgCisgICAgbWMuYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CisgICAgaXNDbGVhbiA9IGZhbHNlOworCiAgICAgICAgIGNoLmFzc29jaWF0ZUNvbm5lY3Rpb24oYWN0dWFsQ29ubmVjdGlvbiwgdGhpcyk7CiAgICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgZXhwZWN0YXRpb24gZnJvbSB0aGUgYWJvdmUgbWV0aG9kIGlzIHRoYXQgdGhlIGNvbm5lY3Rpb24gaG9sZGVyCkBAIC0xNjUsMzQgKzE2NSwzNCBAQAogICAgICAgICAgKiB0byB0aGUgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2Ugd2l0aCB0aGlzIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLgogICAgICAgICAgKiBBbnkgcHJldmlvdXMgc3RhdGVtZW50cyBhbmQgcmVzdWx0IHNldHMgYWxzbyBuZWVkIHRvIGJlIHJlbW92ZWQuCiAgICAgICAgICAqLwotICAgICAgICAgCisKICAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgIT0gbnVsbCkgewogICAgICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZS5zZXRBY3RpdmUoZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNoLnNldEFjdGl2ZSh0cnVlKTsKLSAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNoOyAKKyAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNoOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEFwcGxpY2F0aW9uIHNlcnZlciBjYWxscyB0aGlzIG1ldGhvZCB0byBmb3JjZSBhbnkgY2xlYW51cCBvbiB0aGUgCisgICAgICogQXBwbGljYXRpb24gc2VydmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIGZvcmNlIGFueSBjbGVhbnVwIG9uIHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4gVGhpcyBtZXRob2QgY2FsbHMgdGhlIGludmFsaWRhdGUKICAgICAgKiBtZXRob2Qgb24gYWxsIENvbm5lY3Rpb25IYW5kbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUgdmFsaWQKKyAgICAgKgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZSB2YWxpZAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNsZWFudXAoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBjbGVhbnVwIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiBtYXkgbmVlZCB0byBzZXQgdGhlIGF1dG9jb21taXQgdG8gdHJ1ZSBmb3IgdGhlIG5vbi1wb29sZWQgY2FzZS4KICAgICAgICAgICovCiAgICAgICAgIC8vR0pDSU5UCi0JLy9pZiAoYWN0dWFsQ29ubmVjdGlvbiAhPSBudWxsKSB7Ci0JaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7CisgICAgLy9pZiAoYWN0dWFsQ29ubmVjdGlvbiAhPSBudWxsKSB7CisgICAgaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkID0gYWN0dWFsQ29ubmVjdGlvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CkBAIC0yMDEsMTcgKzIwMSwxNyBAQAogICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaXNDbGVhbiA9IHRydWU7Ci0gICAgICAgIAorCiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYWxsIHRoZSBjb25uZWN0aW9uIGhhbmRsZXMgZnJvbSB0aGUgdGFibGUKICAgICAgKiBvZiBjb25uZWN0aW9uIGhhbmRsZXMgYW5kIGludmFsaWRhdGVzIGFsbCBvZiB0aGVtIHNvIHRoYXQgYW55CiAgICAgICogb3BlcmF0aW9uIG9uIHRob3NlIGNvbm5lY3Rpb24gaGFuZGxlcyB0aHJvd3MgYW4gZXhjZXB0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhIHByb2JsZW0gaW4gcmV0cmlldmluZwotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJdGhlIGNvbm5lY3Rpb24gaGFuZGxlcworICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYSBwcm9ibGVtIGluIHJldHJpZXZpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25uZWN0aW9uIGhhbmRsZXMKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgaW52YWxpZGF0ZUFsbENvbm5lY3Rpb25IYW5kbGVzKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgU2V0IGhhbmRsZXMgPSBjb25uZWN0aW9uSGFuZGxlcy5rZXlTZXQoKTsKQEAgLTIyNiwyMiArMjI2LDIyIEBACiAgICAgICAgIH0KICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMuY2xlYXIoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBEZXN0cm95cyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiB0byB0aGUgdW5kZXJseWluZyByZXNvdXJjZSBtYW5hZ2VyLgotICAgICAqIAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2xvc2luZyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjbG9zaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBkZXN0cm95Iik7CiAgICAgICAgIH0KLQkvL0dKQ0lOVAotCWlmKGlzRGVzdHJveWVkID09IHRydWUpIHsKLQkgICAgcmV0dXJuOwkKLQl9CisgICAgLy9HSkNJTlQKKyAgICBpZihpc0Rlc3Ryb3llZCA9PSB0cnVlKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLQlhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKKyAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmKGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OIHx8IGNvbm5lY3Rpb25UeXBlID09IElTUE9PTEVEQ09OTkVDVElPTikgewogICAgICAgICAgICAgICAgIHBjLmNsb3NlKCk7CkBAIC0yNTUsMjggKzI1NSwyOCBAQAogICAgICAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlOwogICAgICAgICAgICAgcGFzc3dkQ3JlZGVudGlhbCA9IG51bGw7CiAgICAgICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG51bGw7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uIGhhcyBvY2N1cmVkIGR1cmluZyBkZXN0cm95OiAiIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgZm9sbG93aW5nIGV4Y2VwdGlvbiBoYXMgb2NjdXJlZCBkdXJpbmcgZGVzdHJveTogIgogICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgcGFzc3dkQ3JlZGVudGlhbCA9IG51bGw7CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbm5lY3Rpb24gaGFuZGxlIGZvciB0aGUgdW5kZXJseWluZyBwaHlzaWNhbCAKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbm5lY3Rpb24gaGFuZGxlIGZvciB0aGUgdW5kZXJseWluZyBwaHlzaWNhbAogICAgICAqIGNvbm5lY3Rpb24gcmVwcmVzZW50ZWQgYnkgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+IHBhcmFtZXRlciBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uCi0gICAgICogQHBhcmFtCWN4UmVxSW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGNhcnJpZXMgdGhlIHVzZXIgCi0gICAgICogICAgICAgCSAgICAgICAgIAlhbmQgcGFzc3dvcmQgcmVxdWlyZWQgZm9yIGdldHRpbmcgdGhpcyBjb25uZWN0aW9uLgotICAgICAqIEByZXR1cm4JQ29ubmVjdGlvbgl0aGUgY29ubmVjdGlvbiBoYW5kbGUgPGNvZGU+T2JqZWN0PC9jb2RlPgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlwaHlzaWNhbCBjb25uZWN0aW9uIGZyb20gdGhlIHBvb2xlZCBjb25uZWN0aW9uIAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJcGFzc3dvcmQgY3JlZGVudGlhbHMgb3IgcmVhdXRoZW50aWNhdGlvbiBpcyByZXF1ZXN0ZWQKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgbmVlZGVkIGZvciBhdXRoZW50aWNhdGlvbgorICAgICAqIEBwYXJhbSAgICBjeFJlcUluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBjYXJyaWVzIHRoZSB1c2VyCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBhbmQgcGFzc3dvcmQgcmVxdWlyZWQgZm9yIGdldHRpbmcgdGhpcyBjb25uZWN0aW9uLgorICAgICAqIEByZXR1cm4gICAgQ29ubmVjdGlvbiAgICB0aGUgY29ubmVjdGlvbiBoYW5kbGUgPGNvZGU+T2JqZWN0PC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24gZnJvbSB0aGUgcG9vbGVkIGNvbm5lY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkIGNyZWRlbnRpYWxzIG9yIHJlYXV0aGVudGljYXRpb24gaXMgcmVxdWVzdGVkCiAgICAgICovCi0gICAgcHVibGljIE9iamVjdCBnZXRDb25uZWN0aW9uKFN1YmplY3Qgc3ViLCBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXFJbmZvKSAKKyAgICBwdWJsaWMgT2JqZWN0IGdldENvbm5lY3Rpb24oU3ViamVjdCBzdWIsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcUluZm8pCiAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0Q29ubmVjdGlvbiIpOwpAQCAtMjg0LDE0ICsyODQsMTQgQEAKICAgICAgICAgY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbyA9IChjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvKSBjeFJlcUluZm87CiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYXNzd2RDcmVkID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcy5tY2YsIHN1YiwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZihTZWN1cml0eVV0aWxzLmlzUGFzc3dvcmRDcmVkZW50aWFsRXF1YWwodGhpcy5wYXNzd2RDcmVkZW50aWFsLCBwYXNzd2RDcmVkKSA9PSBmYWxzZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlNlY3VyaXR5RXhjZXB0aW9uKCJSZS1hdXRoZW50aWNhdGlvbiBub3Qgc3VwcG9ydGVkIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy9HSkNJTlQKICAgICAgICAgZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgZm9sbG93aW5nIGNvZGUgaW4gdGhlIGlmIHN0YXRlbWVudCBmaXJzdCBjaGVja3MgaWYgdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbgogICAgICAgICAgKiBpcyBjbGVhbiBvciBub3QuIElmIGl0IGlzLCBpdCByZXNldHMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCB0byB3aGF0CkBAIC0zMDEsMjggKzMwMSwyOCBAQAogICAgICAgICBpZihpc0NsZWFuKSB7CiAgICAgICAgICAgICAoKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpbWNmKS5yZXNldElzb2xhdGlvbih0aGlzLCBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgIAorCisKICAgICAgICAgQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0ID0gbmV3IENvbm5lY3Rpb25Ib2xkZXIoYWN0dWFsQ29ubmVjdGlvbiwgdGhpcyk7Ci0JaXNDbGVhbj1mYWxzZTsKLSAgICAgICAgCisgICAgaXNDbGVhbj1mYWxzZTsKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUuc2V0QWN0aXZlKGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBjb25uSG9sZGVyT2JqZWN0LnNldEFjdGl2ZSh0cnVlKTsKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNvbm5Ib2xkZXJPYmplY3Q7Ci0gCisKICAgICAgICAgcmV0dXJuIGNvbm5Ib2xkZXJPYmplY3Q7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhbiA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4gVGhlIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGludGVyZmFjZQotICAgICAqIGlzIHVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBtYW5hZ2UgbG9jYWwgdHJhbnNhY3Rpb25zIGZvciBhIFJNIGluc3RhbmNlLiAKKyAgICAgKiBpcyB1c2VkIGJ5IHRoZSBjb250YWluZXIgdG8gbWFuYWdlIGxvY2FsIHRyYW5zYWN0aW9ucyBmb3IgYSBSTSBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5Mb2NhbFRyYW5zYWN0aW9uIGdldExvY2FsVHJhbnNhY3Rpb24oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMzMxLDEzICszMzEsMTMgQEAKICAgICAgICAgY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIHJldHVybiBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkxvY2FsVHJhbnNhY3Rpb24odGhpcyk7CiAgICAgfQotICAgICAKKwogICAgIC8qKgotICAgICAqIEdldHMgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLiAKKyAgICAgKiBHZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIAotICAgICAqCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICogQHNlZSA8Y29kZT5zZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC0zNDUsNDYgKzM0NSw0NiBAQAogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRMb2dXcml0ZXIiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGxvZ1dyaXRlcjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtZXRhZGF0YSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb25uZWN0aW9uJ3MgdW5kZXJseWluZyBFSVMgCi0gICAgICogcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZS4gCisgICAgICogR2V0cyB0aGUgbWV0YWRhdGEgaW5mb3JtYXRpb24gZm9yIHRoaXMgY29ubmVjdGlvbidzIHVuZGVybHlpbmcgRUlTCisgICAgICogcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhIGdldE1ldGFEYXRhKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0TWV0YURhdGEiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSh0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIGFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLiAKKyAgICAgKiBSZXR1cm5zIGFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCi0gICAgICoJCQkJCXRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqCQkJCQk8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJTm90U3VwcG9ydGVkRXhjZXB0aW9uCWlmIHVuZGVybHlpbmcgZGF0YXNvdXJjZSBpcyBub3QgYW4KLSAgICAgKgkJCQkJPGNvZGU+WEFEYXRhU291cmNlPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgorICAgICAqICAgICAgICAgICAgICAgICAgICB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgTm90U3VwcG9ydGVkRXhjZXB0aW9uICAgIGlmIHVuZGVybHlpbmcgZGF0YXNvdXJjZSBpcyBub3QgYW4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+WEFEYXRhU291cmNlPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlIGdldFhBUmVzb3VyY2UoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRYQVJlc291cmNlIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmKHhhciA9PSBudWxsKSB7Ci0JCSAgICAvKioKKyAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICAgICAgICAgKiBVc2luZyB0aGUgd3JhcHBlciBYQVJlc291cmNlLgogICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgeGFyID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5YQVJlc291cmNlSW1wbCgoKFhBQ29ubmVjdGlvbilwYykuZ2V0WEFSZXNvdXJjZSgpLCB0aGlzKTsKQEAgLTM5NywxNiArMzk3LDE2IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJDYW5ub3QgZ2V0IGFuIFhBUmVzb3VyY2UgZnJvbSBhIG5vbiBYQSBjb25uZWN0aW9uIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZW1vdmVzIGFuIGFscmVhZHkgcmVnaXN0ZXJlZCBjb25uZWN0aW9uIGV2ZW50IGxpc3RlbmVyIGZyb20gdGhlCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWxpc3RlbmVyCTxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPiB0byBiZSByZW1vdmVkCisgICAgICogQHBhcmFtICAgIGxpc3RlbmVyICAgIDxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPiB0byBiZSByZW1vdmVkCiAgICAgICogQHNlZSA8Y29kZT5hZGRDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByZW1vdmVDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcihDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBsaXN0ZW5lcikgewotCWxpc3RlbmVyID0gbnVsbDsKKyAgICBsaXN0ZW5lciA9IG51bGw7CiAgICAgfQogCiAgICAgLyoqCkBAIC00MTUsNyArNDE1LDcgQEAKICAgICAgKiBMb2NhbFRyYW5zYWN0aW9uIG9iamVjdCB3aGVuIGl0cyBiZWdpbigpIG1ldGhvZCBpcyBjYWxsZWQuCiAgICAgICovCiAgICAgdm9pZCB0cmFuc2FjdGlvblN0YXJ0ZWQoKSB7Ci0JdHJhbnNhY3Rpb25JblByb2dyZXNzID0gdHJ1ZTsJCisgICAgdHJhbnNhY3Rpb25JblByb2dyZXNzID0gdHJ1ZTsKICAgICB9CiAKICAgICAvKioKQEAgLTQyNCwxNiArNDI0LDE2IEBACiAgICAgICogTG9jYWxUcmFuc2FjdGlvbiBvYmplY3Qgd2hlbiBpdHMgZW5kKCkgbWV0aG9kIGlzIGNhbGxlZC4KICAgICAgKi8KICAgICB2b2lkIHRyYW5zYWN0aW9uQ29tcGxldGVkKCkgewotCXRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOwotCWlmKGNvbm5lY3Rpb25UeXBlID09IElTUE9PTEVEQ09OTkVDVElPTiB8fCBjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTikgeworICAgIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgIGlmKGNvbm5lY3Rpb25UeXBlID09IElTUE9PTEVEQ09OTkVDVElPTiB8fCBjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTikgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkID0gYWN0dWFsQ29ubmVjdGlvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpOwogICAgICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgLy9jaGVjayB3aGF0IHRvIGRvIGluIHRoaXMgY2FzZSEhCi0JCV9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLm5vdGdvdF90eF9pc29sdmwiKTsKKyAgICAgICAgICAgIC8vY2hlY2sgd2hhdCB0byBkbyBpbiB0aGlzIGNhc2UhIQorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5ub3Rnb3RfdHhfaXNvbHZsIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLQkgICAgdHJ5IHsKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGFjdHVhbENvbm5lY3Rpb24uY2xvc2UoKTsKICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKQEAgLTQ0MSw3ICs0NDEsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLQkgICAgICAgIAorCiAgICAgICAgIGlzQ2xlYW4gPSB0cnVlOwogCiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwpAQCAtNDUzLDI4ICs0NTMsMjggQEAKICAgICAgKiBvciBub3QuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSB7Ci0JcmV0dXJuIHRyYW5zYWN0aW9uSW5Qcm9ncmVzczsKKyAgICByZXR1cm4gdHJhbnNhY3Rpb25JblByb2dyZXNzOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCW91dAk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHBhcmFtICAgIG91dCAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICogQHNlZSA8Y29kZT5nZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKFByaW50V3JpdGVyIG91dCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIGxvZ1dyaXRlciA9IG91dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mIHRoZSBjb25uZWN0aW9uIGJlaW5nIGhlbGQgCisgICAgICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiB0aGUgY29ubmVjdGlvbiBiZWluZyBoZWxkCiAgICAgICogaW4gdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCXBvb2xlZENvbm4JPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAcmV0dXJuCWNvbm5lY3Rpb24gdHlwZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHBvb2xlZENvbm4gICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdHlwZQogICAgICAqLwogICAgIHByaXZhdGUgaW50IGdldENvbm5lY3Rpb25UeXBlKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubikgewogICAgICAgICBpZihwb29sZWRDb25uID09IG51bGwpIHsKQEAgLTQ4NSwyMiArNDg1LDIyIEBACiAgICAgICAgICAgICByZXR1cm4gSVNQT09MRURDT05ORUNUSU9OOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IAorICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdAogICAgICAqIGNyZWF0ZWQgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCBjcmVhdGVkIHRoaXMKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgY3JlYXRlZCB0aGlzCisgICAgICogICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQogICAgICAqLwogICAgIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBnZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKSB7CiAgICAgICAgIHJldHVybiAoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSltY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgYWN0dWFsIHNxbCBjb25uZWN0aW9uIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4gCisgICAgICogUmV0dXJucyB0aGUgYWN0dWFsIHNxbCBjb25uZWN0aW9uIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JdGhlIHBoeXNpY2FsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICB0aGUgcGh5c2ljYWwgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4KICAgICAgKi8KICAgICAvL0dKQ0lOVAogICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZ2V0QWN0dWFsQ29ubmVjdGlvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC01MDksOCArNTA5LDggQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYoYWN0dWFsQ29ubmVjdGlvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBwYy5nZXRDb25uZWN0aW9uKCk7Ci0JCX0KLQkJCisgICAgICAgIH0KKwogICAgICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewogICAgICAgICAgICAgICAgIHNxbGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKQEAgLTUxOCw4MSArNTE4LDgxIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGFjdHVhbENvbm5lY3Rpb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIAotICAgICAqCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCiAgICAgICovCiAgICAgUGFzc3dvcmRDcmVkZW50aWFsIGdldFBhc3N3b3JkQ3JlZGVudGlhbCgpIHsKICAgICAgICAgcmV0dXJuIHBhc3N3ZENyZWRlbnRpYWw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdCBhbmQgdGhyb3dzIGFuCiAgICAgICogZXhjZXB0aW9uIGlmIGl0IGlzIG5vdCB2YWxpZC4gQSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaXMgbm90IHZhbGlkIGlmCiAgICAgICogZGVzdHJveSBoYXMgbm90IGJlZW4gY2FsbGVkIGFuZCBubyBwaHlzaWNhbCBjb25uZWN0aW9uIGVycm9yIGhhcwogICAgICAqIG9jY3VycmVkIHJlbmRlcmluZyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiB1bnVzYWJsZS4KICAgICAgKgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgPGNvZGU+ZGVzdHJveTwvY29kZT4gaGFzIGJlZW4gY2FsbGVkIG9uIHRoaXMgCi0gICAgICoJCQkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSBvciBpZiBhIAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBvY2N1cnJlZCByZW5kZXJpbmcgaXQgdW51c2FibGUKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIDxjb2RlPmRlc3Ryb3k8L2NvZGU+IGhhcyBiZWVuIGNhbGxlZCBvbiB0aGlzCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSBvciBpZiBhCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGVycm9yIG9jY3VycmVkIHJlbmRlcmluZyBpdCB1bnVzYWJsZQogICAgICAqLwogICAgIC8vR0pDSU5UCiAgICAgdm9pZCBjaGVja0lmVmFsaWQoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihpc0Rlc3Ryb3llZCA9PSB0cnVlIHx8IGlzVXNhYmxlID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoaXMgTWFuYWdlZENvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzIHRoZSBwaHlzaWNhbCAiICsgCisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoaXMgTWFuYWdlZENvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzIHRoZSBwaHlzaWNhbCAiICsKICAgICAgICAgICAgICAgICAiY29ubmVjdGlvbiBpcyBub3QgdXNhYmxlLiIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB3aGVuIGl0cyBjbG9zZSBtZXRob2QgaXMKICAgICAgKiBjYWxsZWQuIFRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlICBpbnZhbGlkYXRlcyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKICAgICAgKiBhbmQgc2VuZHMgYSBDT05ORUNUSU9OX0NMT1NFRCBldmVudCB0byBhbGwgdGhlIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLgogICAgICAqCi0gICAgICogQHBhcmFtCWUJRXhjZXB0aW9uIHRoYXQgbWF5IGhhdmUgb2NjdXJlZCB3aGlsZSBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGhhbmRsZQotICAgICAqIEBwYXJhbQljb25uSG9sZGVyT2JqZWN0CTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgaGFzIGJlZW4gY2xvc2VkCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JaW4gY2FzZSBjbG9zaW5nIHRoZSBzcWwgY29ubmVjdGlvbiBnb3Qgb3V0IG9mCi0gICAgICogICAgICAgICAJICAgICAgICAgICAgCTxjb2RlPmdldENvbm5lY3Rpb248L2NvZGU+IG9uIHRoZSB1bmRlcmx5aW5nIAotICAgICAqCQkJCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IHRocm93cyBhbiBleGNlcHRpb24KKyAgICAgKiBAcGFyYW0gICAgZSAgICBFeGNlcHRpb24gdGhhdCBtYXkgaGF2ZSBvY2N1cmVkIHdoaWxlIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCisgICAgICogQHBhcmFtICAgIGNvbm5Ib2xkZXJPYmplY3QgICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBoYXMgYmVlbiBjbG9zZWQKKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBpbiBjYXNlIGNsb3NpbmcgdGhlIHNxbCBjb25uZWN0aW9uIGdvdCBvdXQgb2YKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+Z2V0Q29ubmVjdGlvbjwvY29kZT4gb24gdGhlIHVuZGVybHlpbmcKKyAgICAgKiAgICAgICAgICAgICAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiB0aHJvd3MgYW4gZXhjZXB0aW9uCiAgICAgICovCiAgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKEV4Y2VwdGlvbiBlLCBDb25uZWN0aW9uSG9sZGVyIGNvbm5Ib2xkZXJPYmplY3QpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBjb25uSG9sZGVyT2JqZWN0LmludmFsaWRhdGUoKTsKLSAgICAgICAgCisKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIGNlLnNldENvbm5lY3Rpb25IYW5kbGUoY29ubkhvbGRlck9iamVjdCk7CiAgICAgICAgIGxpc3RlbmVyLmNvbm5lY3Rpb25DbG9zZWQoY2UpOwotCQorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB3aGVuIGl0IGRldGVjdHMgYSBjb25uZWNpb24KICAgICAgKiByZWxhdGVkIGVycm9yLgogICAgICAqCi0gICAgICogQHBhcmFtCWUJRXhjZXB0aW9uIHRoYXQgaGFzIG9jY3VycmVkIGR1cmluZyBhbiBvcGVyYXRpb24gb24gdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KLSAgICAgKiBAcGFyYW0JY29ubkhvbGRlck9iamVjdAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGRldGVjdGVkIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQljb25uZWN0aW9uIGVycm9yCisgICAgICogQHBhcmFtICAgIGUgICAgRXhjZXB0aW9uIHRoYXQgaGFzIG9jY3VycmVkIGR1cmluZyBhbiBvcGVyYXRpb24gb24gdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gICAgY29ubkhvbGRlck9iamVjdCAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGRldGVjdGVkIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIGVycm9yCiAgICAgICovCi0gICAgdm9pZCBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChFeGNlcHRpb24gZSwgCisgICAgdm9pZCBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChFeGNlcHRpb24gZSwKICAgICAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyIGNvbm5Ib2xkZXJPYmplY3QpIHsKLQkgICAgCisKICAgICAgICAgIENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGNlbCA9IHRoaXMubGlzdGVuZXI7CiAgICAgICAgICBDb25uZWN0aW9uRXZlbnQgY2UgPSBudWxsOwogICAgICAgICAgY2UgPSBlID09IG51bGwgPyBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0VSUk9SX09DQ1VSUkVEKQogICAgICAgICAgICAgICAgICAgICA6IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fRVJST1JfT0NDVVJSRUQsIGUpOwogICAgICAgICAgaWYgKGNvbm5Ib2xkZXJPYmplY3QgIT0gbnVsbCkgewogICAgICAgICAgICAgIGNlLnNldENvbm5lY3Rpb25IYW5kbGUoY29ubkhvbGRlck9iamVjdCk7Ci0gICAgICAgICB9ICAgIAorICAgICAgICAgfQogCiAgICAgICAgICBjZWwuY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoY2UpOwogICAgICAgICAgaXNVc2FibGUgPSBmYWxzZTsKICAgICB9Ci0gICAgCi0gICAgCi0gICAgCisKKworCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hlbiBpdHMgc3RhcnQgbWV0aG9kCiAgICAgICogaGFzIGJlZW4gaW52b2tlZC4KQEAgLTYwNiw3ICs2MDYsNyBAQAogICAgICAgICAgICAgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoZSwgbnVsbCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aGVuIGl0cyBlbmQgbWV0aG9kCiAgICAgICogaGFzIGJlZW4gaW52b2tlZC4KQEAgLTYyMCw3ICs2MjAsNyBAQAogICAgICAgICAgICAgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoZSwgbnVsbCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgYSBDb25uZWN0aW9uIEhhbmRsZSB0byBjaGVjayBpZiBpdCBpcwogICAgICAqIHRoZSBhY3RpdmUgQ29ubmVjdGlvbiBIYW5kbGUuIElmIGl0IGlzIG5vdCB0aGUgYWN0aXZlIENvbm5lY3Rpb24KQEAgLTYyOSwyNCArNjI5LDI0IEBACiAgICAgICogQ29ubmVjdGlvbiBIYW5kbGUgb2JqZWN0IHRvIHRoaXMgb2JqZWN0IGlmIHRoZSBhY3RpdmUgQ29ubmVjdGlvbgogICAgICAqIEhhbmRsZSBpcyBudWxsLgogICAgICAqCi0gICAgICogQHBhcmFtCWNoCTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgcmVxdWVzdHMgdGhpcwotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHdoZXRoZXIKLSAgICAgKgkJCWl0IGNhbiBiZSBhY3RpdmUgb3Igbm90Ci0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JaW4gY2FzZSB0aGUgcGh5c2ljYWwgaXMgbm90IHZhbGlkIG9yCi0gICAgICoJCQkJdGhlcmUgaXMgYWxyZWFkeSBhbiBhY3RpdmUgY29ubmVjdGlvbiBoYW5kbGUKKyAgICAgKiBAcGFyYW0gICAgY2ggICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCByZXF1ZXN0cyB0aGlzCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugd2hldGhlcgorICAgICAqICAgICAgICAgICAgaXQgY2FuIGJlIGFjdGl2ZSBvciBub3QKKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBpbiBjYXNlIHRoZSBwaHlzaWNhbCBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICB0aGVyZSBpcyBhbHJlYWR5IGFuIGFjdGl2ZSBjb25uZWN0aW9uIGhhbmRsZQogICAgICAqLwotICAgICAKKwogICAgIHZvaWQgY2hlY2tJZkFjdGl2ZShDb25uZWN0aW9uSG9sZGVyIGNoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSB8fCBpc1VzYWJsZSA9PSBmYWxzZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbigiVGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHVzYWJsZSIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPT0gbnVsbCkgewogICAgICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNoOwogICAgICAgICAgICAgY2guc2V0QWN0aXZlKHRydWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgIT0gY2gpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGhhbmRsZSBjYW5ub3QgYmUgdXNlZCBhcyBhbm90aGVyIGNvbm5lY3Rpb24gaXMgY3VycmVudGx5IGFjdGl2ZSIpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhCmluZGV4IDIwZjAzYWEuLmY2NTBkNDEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiAvKioKICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzAzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgewogCkBAIC00MSw4MSArNDEsODEgQEAKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPglpZiBnZXR0aW5nIHRoZSBEYXRhYmFzZU1ldGFEYXRhIG9iamVjdCBmYWlscworICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiAgICBpZiBnZXR0aW5nIHRoZSBEYXRhYmFzZU1ldGFEYXRhIG9iamVjdCBmYWlscwogICAgICAqLwogICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhKE1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgICAgICAgICAgZG1kID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpLmdldE1ldGFEYXRhKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHByb2R1Y3QgbmFtZSBvZiB0aGUgdW5kZXJseWluZyBFSVMgaW5zdGFuY2UgY29ubmVjdGVkCiAgICAgICogdGhyb3VnaCB0aGUgTWFuYWdlZENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVByb2R1Y3QgbmFtZSBvZiB0aGUgRUlTIGluc3RhbmNlCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIFByb2R1Y3QgbmFtZSBvZiB0aGUgRUlTIGluc3RhbmNlCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEVJU1Byb2R1Y3ROYW1lKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0RGF0YWJhc2VQcm9kdWN0TmFtZSgpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kbmFtZSIsIHNxbGUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZG5hbWUiLCBzcWxlKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgdW5kZXJseWluZyBFSVMgaW5zdGFuY2UgY29ubmVjdGVkCiAgICAgICogdGhyb3VnaCB0aGUgTWFuYWdlZENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgRUlTIGluc3RhbmNlCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIFByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgRUlTIGluc3RhbmNlCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEVJU1Byb2R1Y3RWZXJzaW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0RGF0YWJhc2VQcm9kdWN0VmVyc2lvbigpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kdmVycyIsIHNxbGUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZHZlcnMiLCBzcWxlKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSwgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBtYXhpbXVtIGxpbWl0IG9uIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucwogICAgICAqIHRoYXQgYW4gRUlTIGluc3RhbmNlIGNhbiBzdXBwb3J0IGFjcm9zcyBjbGllbnQgcHJvY2Vzc2VzLgogICAgICAqCi0gICAgICogQHJldHVybglNYXhpbXVtIGxpbWl0IGZvciBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgTWF4aW11bSBsaW1pdCBmb3IgbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldE1heENvbm5lY3Rpb25zKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0TWF4Q29ubmVjdGlvbnMoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfbWF4Y29ubiIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfbWF4Y29ubiIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgbmFtZSBvZiB0aGUgdXNlciBhc3NvY2lhdGVkIHdpdGggdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLiBUaGUgbmFtZQogICAgICAqIGNvcnJlc3BvbmRzIHRvIHRoZSByZXNvdXJjZSBwcmluY2lwYWwgdW5kZXIgd2hvc2Ugd2hvc2Ugc2VjdXJpdHkgY29udGV4dCwgYSBjb25uZWN0aW9uCiAgICAgICogdG8gdGhlIEVJUyBpbnN0YW5jZSBoYXMgYmVlbiBlc3RhYmxpc2hlZC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbmFtZSBvZiB0aGUgdXNlcgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBuYW1lIG9mIHRoZSB1c2VyCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXJOYW1lKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgamFrYXJ0YS5yZXNvdXJjZS5zcGkuc2VjdXJpdHkuUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gbWMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCk7CiAgICAgICAgIGlmKHBjICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBwYy5nZXRVc2VyTmFtZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBtYy5nZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKS5nZXRVc2VyKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCmluZGV4IGRhZDFkNzcuLjQ4MmYzMzIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKQEAgLTI0LDE0OCArMjQsMTQ4IEBACiAvKioKICAqIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IHdyYXBwZXIgZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8yMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMjMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBYQVJlc291cmNlSW1wbCBpbXBsZW1lbnRzIFhBUmVzb3VyY2UgewogCiAgICAgWEFSZXNvdXJjZSB4YXI7CiAgICAgTWFuYWdlZENvbm5lY3Rpb24gbWM7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgWEFSZXNvdXJjZUltcGwKICAgICAgKgotICAgICAqIEBwYXJhbQl4YXIJPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4KLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHhhciAgICA8Y29kZT5YQVJlc291cmNlPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgWEFSZXNvdXJjZUltcGwoWEFSZXNvdXJjZSB4YXIsIE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7CiAgICAgICAgIHRoaXMueGFyID0geGFyOwogICAgICAgICB0aGlzLm1jID0gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IHRoZSBnbG9iYWwgdHJhbnNhY3Rpb24gc3BlY2lmaWVkIGJ5IHhpZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgotICAgICAqIEBwYXJhbQlvbmVQaGFzZQlJZiB0cnVlLCB0aGUgcmVzb3VyY2UgbWFuYWdlciBzaG91bGQgdXNlIGEgb25lLXBoYXNlIGNvbW1pdCAKLSAgICAgKiAgICAgICAJICAgICAgICAJcHJvdG9jb2wgdG8gY29tbWl0IHRoZSB3b3JrIGRvbmUgb24gYmVoYWxmIG9mIHhpZC4KKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcGFyYW0gICAgb25lUGhhc2UgICAgSWYgdHJ1ZSwgdGhlIHJlc291cmNlIG1hbmFnZXIgc2hvdWxkIHVzZSBhIG9uZS1waGFzZSBjb21taXQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgdG8gY29tbWl0IHRoZSB3b3JrIGRvbmUgb24gYmVoYWxmIG9mIHhpZC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoWGlkIHhpZCwgYm9vbGVhbiBvbmVQaGFzZSkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy90aGUgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQgY2FsbCBoYXMgY29tZSBoZXJlIGJlY2FzdWUKLQkvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdwotCS8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCi0JLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCi0JLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAotCS8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgotCW1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKKyAgICAvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAorICAgIC8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcworICAgIC8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKKyAgICAvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKKyAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgICAgICB4YXIuY29tbWl0KHhpZCwgb25lUGhhc2UpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVuZHMgdGhlIHdvcmsgcGVyZm9ybWVkIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQgCi0gICAgICoJCQl3YXMgdXNlZCBwcmV2aW91c2x5IGluIHRoZSBzdGFydCBtZXRob2QuCi0gICAgICogQHBhcmFtCWZsYWdzCU9uZSBvZiBUTVNVQ0NFU1MsIFRNRkFJTCwgb3IgVE1TVVNQRU5ECisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdAorICAgICAqICAgICAgICAgICAgd2FzIHVzZWQgcHJldmlvdXNseSBpbiB0aGUgc3RhcnQgbWV0aG9kLgorICAgICAqIEBwYXJhbSAgICBmbGFncyAgICBPbmUgb2YgVE1TVUNDRVNTLCBUTUZBSUwsIG9yIFRNU1VTUEVORAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVuZChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHhhci5lbmQoeGlkLCBmbGFncyk7CiAgICAgICAgIC8vR0pDSU5UCi0JLy9tYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIC8vbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUZWxsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIGZvcmdldCBhYm91dCBhIGhldXJpc3RpY2FsbHkgY29tcGxldGVkIHRyYW5zYWN0aW9uIGJyYW5jaC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGZvcmdldChYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICB4YXIuZm9yZ2V0KHhpZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogT2J0YWluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgc2V0IGZvciB0aGlzIAorICAgICAqIE9idGFpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIHNldCBmb3IgdGhpcwogICAgICAqIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgl0aGUgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzCisgICAgICogQHJldHVybiAgICB0aGUgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRUcmFuc2FjdGlvblRpbWVvdXQoKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLmdldFRyYW5zYWN0aW9uVGltZW91dCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UgCi0gICAgICogcmVwcmVzZW50ZWQgYnkgdGhlIHRhcmdldCBvYmplY3QgaXMgdGhlIHNhbWUgYXMgdGhlIHJlc291Y2UgbWFuYWdlciAKKyAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlCisgICAgICogcmVwcmVzZW50ZWQgYnkgdGhlIHRhcmdldCBvYmplY3QgaXMgdGhlIHNhbWUgYXMgdGhlIHJlc291Y2UgbWFuYWdlcgogICAgICAqIGluc3RhbmNlIHJlcHJlc2VudGVkIGJ5IHRoZSBwYXJhbWV0ZXIgeGFyZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGFyZXMJQW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdob3NlIHJlc291cmNlIG1hbmFnZXIgCi0gICAgICogCQkJaW5zdGFuY2UgaXMgdG8gYmUgY29tcGFyZWQgd2l0aCB0aGUgcmVzb3VyY2UKLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgaXQncyB0aGUgc2FtZSBSTSBpbnN0YW5jZTsgb3RoZXJ3aXNlIGZhbHNlLgorICAgICAqIEBwYXJhbSAgICB4YXJlcyAgICBBbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hvc2UgcmVzb3VyY2UgbWFuYWdlcgorICAgICAqICAgICAgICAgICAgIGluc3RhbmNlIGlzIHRvIGJlIGNvbXBhcmVkIHdpdGggdGhlIHJlc291cmNlCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIGl0J3MgdGhlIHNhbWUgUk0gaW5zdGFuY2U7IG90aGVyd2lzZSBmYWxzZS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1NhbWVSTShYQVJlc291cmNlIHhhcmVzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLmlzU2FtZVJNKHhhcmVzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBBc2sgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gcHJlcGFyZSBmb3IgYSB0cmFuc2FjdGlvbiBjb21taXQgCisgICAgICogQXNrIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIHByZXBhcmUgZm9yIGEgdHJhbnNhY3Rpb24gY29tbWl0CiAgICAgICogb2YgdGhlIHRyYW5zYWN0aW9uIHNwZWNpZmllZCBpbiB4aWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKLSAgICAgKiBAcmV0dXJuCUEgdmFsdWUgaW5kaWNhdGluZyB0aGUgcmVzb3VyY2UgbWFuYWdlcidzIHZvdGUgb24gdGhlIAotICAgICAqCQlvdXRjb21lIG9mIHRoZSB0cmFuc2FjdGlvbi4gVGhlIHBvc3NpYmxlIHZhbHVlcwotICAgICAqCQlhcmU6IFhBX1JET05MWSBvciBYQV9PSy4gSWYgdGhlIHJlc291cmNlIG1hbmFnZXIgd2FudHMgCi0gICAgICoJCXRvIHJvbGwgYmFjayB0aGUgdHJhbnNhY3Rpb24sIGl0IHNob3VsZCBkbyBzbwotICAgICAqCQlieSByYWlzaW5nIGFuIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPiBpbiB0aGUgcHJlcGFyZSBtZXRob2QuCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHJldHVybiAgICBBIHZhbHVlIGluZGljYXRpbmcgdGhlIHJlc291cmNlIG1hbmFnZXIncyB2b3RlIG9uIHRoZQorICAgICAqICAgICAgICBvdXRjb21lIG9mIHRoZSB0cmFuc2FjdGlvbi4gVGhlIHBvc3NpYmxlIHZhbHVlcworICAgICAqICAgICAgICBhcmU6IFhBX1JET05MWSBvciBYQV9PSy4gSWYgdGhlIHJlc291cmNlIG1hbmFnZXIgd2FudHMKKyAgICAgKiAgICAgICAgdG8gcm9sbCBiYWNrIHRoZSB0cmFuc2FjdGlvbiwgaXQgc2hvdWxkIGRvIHNvCisgICAgICogICAgICAgIGJ5IHJhaXNpbmcgYW4gYXBwcm9wcmlhdGUgPGNvZGU+WEFFeGNlcHRpb248L2NvZGU+IGluIHRoZSBwcmVwYXJlIG1ldGhvZC4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IHByZXBhcmUoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5wcmVwYXJlKHhpZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogT2J0YWluIGEgbGlzdCBvZiBwcmVwYXJlZCB0cmFuc2FjdGlvbiBicmFuY2hlcyBmcm9tIGEgcmVzb3VyY2UgbWFuYWdlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlmbGFnCU9uZSBvZiBUTVNUQVJUUlNDQU4sIFRNRU5EUlNDQU4sIFRNTk9GTEFHUy4gVE1OT0ZMQUdTIAotICAgICAqCQkJbXVzdCBiZSB1c2VkIHdoZW4gbm8gb3RoZXIgZmxhZ3MgYXJlIHNldCBpbiBmbGFncy4KLSAgICAgKiBAcmV0dXJuCVRoZSByZXNvdXJjZSBtYW5hZ2VyIHJldHVybnMgemVybyBvciBtb3JlIFhJRHMgZm9yIHRoZSB0cmFuc2FjdGlvbiAKLSAgICAgKgkJYnJhbmNoZXMgdGhhdCBhcmUgY3VycmVudGx5IGluIGEgcHJlcGFyZWQgb3IgaGV1cmlzdGljYWxseSAKLSAgICAgKgkJY29tcGxldGVkIHN0YXRlLiBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBvcGVyYXRpb24sIHRoZSByZXNvdXJjZQotICAgICAqCQltYW5hZ2VyIHNob3VsZCB0aHJvdyB0aGUgYXBwcm9wcmlhdGUgPGNvZGU+WEFFeGNlcHRpb248L2NvZGU+LgorICAgICAqIEBwYXJhbSAgICBmbGFnICAgIE9uZSBvZiBUTVNUQVJUUlNDQU4sIFRNRU5EUlNDQU4sIFRNTk9GTEFHUy4gVE1OT0ZMQUdTCisgICAgICogICAgICAgICAgICBtdXN0IGJlIHVzZWQgd2hlbiBubyBvdGhlciBmbGFncyBhcmUgc2V0IGluIGZsYWdzLgorICAgICAqIEByZXR1cm4gICAgVGhlIHJlc291cmNlIG1hbmFnZXIgcmV0dXJucyB6ZXJvIG9yIG1vcmUgWElEcyBmb3IgdGhlIHRyYW5zYWN0aW9uCisgICAgICogICAgICAgIGJyYW5jaGVzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBhIHByZXBhcmVkIG9yIGhldXJpc3RpY2FsbHkKKyAgICAgKiAgICAgICAgY29tcGxldGVkIHN0YXRlLiBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBvcGVyYXRpb24sIHRoZSByZXNvdXJjZQorICAgICAqICAgICAgICBtYW5hZ2VyIHNob3VsZCB0aHJvdyB0aGUgYXBwcm9wcmlhdGUgPGNvZGU+WEFFeGNlcHRpb248L2NvZGU+LgogICAgICAqLwogICAgIHB1YmxpYyBYaWRbXSByZWNvdmVyKGludCBmbGFnKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnJlY292ZXIoZmxhZyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogSW5mb3JtIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIHJvbGwgYmFjayB3b3JrIGRvbmUgb24gYmVoYWxmIG9mIGEgdHJhbnNhY3Rpb24gYnJhbmNoCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjayhYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICAvL3RoZSBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCBjYWxsIGhhcyBjb21lIGhlcmUgYmVjYXN1ZQotCS8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93Ci0JLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKLQkvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKLQkvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCi0JLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCisgICAgLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKKyAgICAvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAorICAgIC8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcworICAgIC8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKKyAgICAvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKICAgICAgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICAgICAgeGFyLnJvbGxiYWNrKHhpZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgZm9yIHRoaXMgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2Vjb25kcwl0aGUgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzLgotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGlzIHNldCBzdWNjZXNzZnVsbHk7IG90aGVyd2lzZSBmYWxzZS4KKyAgICAgKiBAcGFyYW0gICAgc2Vjb25kcyAgICB0aGUgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzLgorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGlzIHNldCBzdWNjZXNzZnVsbHk7IG90aGVyd2lzZSBmYWxzZS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBzZXRUcmFuc2FjdGlvblRpbWVvdXQoaW50IHNlY29uZHMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KHNlY29uZHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFN0YXJ0IHdvcmsgb24gYmVoYWxmIG9mIGEgdHJhbnNhY3Rpb24gYnJhbmNoIHNwZWNpZmllZCBpbiB4aWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZQotICAgICAqIEByZXR1cm4JZmxhZ3MJT25lIG9mIFRNTk9GTEFHUywgVE1KT0lOLCBvciBUTVJFU1VNRQorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc291cmNlCisgICAgICogQHJldHVybiAgICBmbGFncyAgICBPbmUgb2YgVE1OT0ZMQUdTLCBUTUpPSU4sIG9yIFRNUkVTVU1FCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RhcnQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICAvL0dKQ0lOVApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL2J1aWxkLnhtbAppbmRleCA5Njc4NjhiLi42NDEwNTU3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iJHtnamMuaG9tZX0iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy9zcGkiLz4KLSAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0zNyw1ICszNyw1IEBACiAKICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQiLz4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YQppbmRleCBjZTMyMWFmLi45ZTdmMjUzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKQEAgLTI2LDggKzI2LDggQEAKIC8qKgogICogRXhlY3V0ZSB0aGUgbWV0aG9kcyBiYXNlZCBvbiB0aGUgcGFyYW1ldGVycy4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIE1ldGhvZEV4ZWN1dG9yIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAKQEAgLTM5LDEzMCArMzksMTMwIEBACiAgICAgLyoqCiAgICAgICogRXhjZXV0ZSBhIHNpbXBsZSBzZXQgTWV0aG9kLgogICAgICAqCi0gICAgICogQHBhcmFtCXZhbHVlCVZhbHVlIHRvIGJlIHNldC4KLSAgICAgKiBAcGFyYW0JbWV0aG9kCTxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQlvYmoJT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCisgICAgICogQHBhcmFtICAgIHZhbHVlICAgIFZhbHVlIHRvIGJlIHNldC4KKyAgICAgKiBAcGFyYW0gICAgbWV0aG9kICAgIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvYmogICAgT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLiAgICAgCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJ1bkphdmFCZWFuTWV0aG9kKFN0cmluZyB2YWx1ZSwgTWV0aG9kIG1ldGhvZCwgT2JqZWN0IG9iaikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlpZiAodmFsdWU9PW51bGwgfHwgdmFsdWUudHJpbSgpLmVxdWFscygiIikpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAl0cnkgewotICAgIAkgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0gICAgCSAgICBpZiAoIHBhcmFtZXRlcnMubGVuZ3RoID09IDEpIHsKLSAgICAJICAgICAgICBPYmplY3RbXSB2YWx1ZXMgPSBuZXcgT2JqZWN0WzFdOwotICAgIAkgICAgCXZhbHVlc1swXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbMF0sIHZhbHVlKTsKLSAgICAJICAgIAltZXRob2QuaW52b2tlKG9iaiwgdmFsdWVzKTsKLSAgICAJICAgIH0KLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfQorICAgICAgICBpZiAodmFsdWU9PW51bGwgfHwgdmFsdWUudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7CisgICAgICAgICAgICBpZiAoIHBhcmFtZXRlcnMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgICAgICBPYmplY3RbXSB2YWx1ZXMgPSBuZXcgT2JqZWN0WzFdOworICAgICAgICAgICAgICAgIHZhbHVlc1swXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbMF0sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBtZXRob2QuaW52b2tlKG9iaiwgdmFsdWVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogRXhlY3V0ZXMgdGhlIG1ldGhvZC4gICAgIAorICAgICAqIEV4ZWN1dGVzIHRoZSBtZXRob2QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWV0aG9kIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQlvYmoJT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCi0gICAgICogQHBhcmFtCXZhbHVlcwlQYXJhbWV0ZXIgdmFsdWVzIGZvciBleGVjdXRpbmcgdGhlIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgbWV0aG9kIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvYmogICAgT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCisgICAgICogQHBhcmFtICAgIHZhbHVlcyAgICBQYXJhbWV0ZXIgdmFsdWVzIGZvciBleGVjdXRpbmcgdGhlIG1ldGhvZC4KICAgICAgKiBAdGhyb3dzICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4sIGluIGNhc2Ugb2YgdGhlIG1pc21hdGNoIG9mIHBhcmFtZXRlciB2YWx1ZXMgb3IKLSAgICAgKgkJYSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJ1bk1ldGhvZChNZXRob2QgbWV0aG9kLCBPYmplY3Qgb2JqLCBWZWN0b3IgdmFsdWVzKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCXRyeSB7Ci0JICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotCSAgICBpZiAodmFsdWVzLnNpemUoKSAhPSBwYXJhbWV0ZXJzLmxlbmd0aCkgewotCSAgICAgICAgcmV0dXJuOwotCSAgICB9Ci0gICAgCSAgICBPYmplY3RbXSBhY3R1YWxWYWx1ZXMgPSBuZXcgT2JqZWN0W3BhcmFtZXRlcnMubGVuZ3RoXTsKLSAgICAJICAgIGZvciAoaW50IGkgPTA7IGk8cGFyYW1ldGVycy5sZW5ndGggOyBpKyspIHsKLSAgICAJICAgIAlTdHJpbmcgdmFsID0gKFN0cmluZykgdmFsdWVzLmdldChpKTsKLSAgICAJICAgIAlpZiAodmFsLnRyaW0oKS5lcXVhbHMoIk5VTEwiKSkgewotICAgIAkgICAgCSAgICBhY3R1YWxWYWx1ZXNbaV0gPSBudWxsOwotICAgIAkgICAgCX0gZWxzZSB7Ci0gICAgCSAgICAJICAgIGFjdHVhbFZhbHVlc1tpXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbaV0sIHZhbCk7Ci0gICAgCSAgICAJfQotICAgIAkgICAgfQotICAgIAkgICAgbWV0aG9kLmludm9rZShvYmosIGFjdHVhbFZhbHVlcyk7Ci0gICAgCX1jYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfQorICAgICAgICB0cnkgeworICAgICAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKKyAgICAgICAgaWYgKHZhbHVlcy5zaXplKCkgIT0gcGFyYW1ldGVycy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgT2JqZWN0W10gYWN0dWFsVmFsdWVzID0gbmV3IE9iamVjdFtwYXJhbWV0ZXJzLmxlbmd0aF07CisgICAgICAgICAgICBmb3IgKGludCBpID0wOyBpPHBhcmFtZXRlcnMubGVuZ3RoIDsgaSsrKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHZhbCA9IChTdHJpbmcpIHZhbHVlcy5nZXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbC50cmltKCkuZXF1YWxzKCJOVUxMIikpIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsVmFsdWVzW2ldID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhY3R1YWxWYWx1ZXNbaV0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzW2ldLCB2YWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1ldGhvZC5pbnZva2Uob2JqLCBhY3R1YWxWYWx1ZXMpOworICAgICAgICB9Y2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnZlcnRzIHRoZSB0eXBlIGZyb20gU3RyaW5nIHRvIHRoZSBDbGFzcyB0eXBlLgogICAgICAqCi0gICAgICogQHBhcmFtCXR5cGUJCUNsYXNzIG5hbWUgdG8gd2hpY2ggdGhlIGNvbnZlcnNpb24gaXMgcmVxdWlyZWQuCi0gICAgICogQHBhcmFtCXBhcmFtZXRlcglTdHJpbmcgdmFsdWUgdG8gYmUgY29udmVydGVkLgotICAgICAqIEByZXR1cm4JQ29udmVydGVkIHZhbHVlLgorICAgICAqIEBwYXJhbSAgICB0eXBlICAgICAgICBDbGFzcyBuYW1lIHRvIHdoaWNoIHRoZSBjb252ZXJzaW9uIGlzIHJlcXVpcmVkLgorICAgICAqIEBwYXJhbSAgICBwYXJhbWV0ZXIgICAgU3RyaW5nIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KKyAgICAgKiBAcmV0dXJuICAgIENvbnZlcnRlZCB2YWx1ZS4KICAgICAgKiBAdGhyb3dzICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4sIGluIGNhc2Ugb2YgdGhlIG1pc21hdGNoIG9mIHBhcmFtZXRlciB2YWx1ZXMgb3IKLSAgICAgKgkJYSBzZWN1cml0eSB2aW9sYXRpb24uICAgICAKKyAgICAgKiAgICAgICAgYSBzZWN1cml0eSB2aW9sYXRpb24uCiAgICAgICovCiAgICAgcHJpdmF0ZSBPYmplY3QgY29udmVydFR5cGUoQ2xhc3MgdHlwZSwgU3RyaW5nIHBhcmFtZXRlcikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAl0cnkgewotICAgIAkgICAgU3RyaW5nIHR5cGVOYW1lID0gdHlwZS5nZXROYW1lKCk7Ci0gICAgCSAgICBpZiAoIHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlN0cmluZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLk9iamVjdCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIHBhcmFtZXRlcjsKLSAgICAJICAgIH0KLSAgICAJCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJpbnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5JbnRlZ2VyIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEludGVnZXIocGFyYW1ldGVyKTsKLSAgICAJICAgIH0KLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygic2hvcnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TaG9ydCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBTaG9ydChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJieXRlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQnl0ZSIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBCeXRlKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImxvbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Mb25nIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IExvbmcocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJmbG9hdCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkZsb2F0IikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEZsb2F0KHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImRvdWJsZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkRvdWJsZSIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBEb3VibGUocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdEZWNpbWFsIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0ludGVnZXIiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJib29sZWFuIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQm9vbGVhbiIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBCb29sZWFuKHBhcmFtZXRlcik7Ci0gICAgICAgICAgICB9CQkKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFN0cmluZyB0eXBlTmFtZSA9IHR5cGUuZ2V0TmFtZSgpOworICAgICAgICAgICAgaWYgKCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TdHJpbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5PYmplY3QiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7CisgICAgICAgICAgICB9CiAKLSAgICAJICAgIHJldHVybiBwYXJhbWV0ZXI7Ci0gICAgCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbmZlIiwgcGFyYW1ldGVyKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihwYXJhbWV0ZXIrIjogTm90IGEgdmFsaWQgdmFsdWUgZm9yIHRoaXMgbWV0aG9kICIpOwotICAgIAl9CisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJpbnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5JbnRlZ2VyIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEludGVnZXIocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygic2hvcnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TaG9ydCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTaG9ydChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJieXRlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQnl0ZSIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCeXRlKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImxvbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Mb25nIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExvbmcocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZmxvYXQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5GbG9hdCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJkb3VibGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Eb3VibGUiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRG91YmxlKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdEZWNpbWFsIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdJbnRlZ2VyIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJvb2xlYW4iKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Cb29sZWFuIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJvb2xlYW4ocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcjsKKyAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19uZmUiLCBwYXJhbWV0ZXIpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHBhcmFtZXRlcisiOiBOb3QgYSB2YWxpZCB2YWx1ZSBmb3IgdGhpcyBtZXRob2QgIik7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCmluZGV4IGZjMTQ5YmYuLmYwMDhlN2YgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKQEAgLTI5LDM2ICsyOSwzNiBAQAogLyoqCiAgKiBTZWN1cml0eVV0aWxzIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjIKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIyCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgU2VjdXJpdHlVdGlscyB7CiAKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCwgZ2l2ZW4gCi0gICAgICogdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIHN1YmplY3QgYW5kIHRoZSAKLSAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+LiBJdCBmaXJzdCBjaGVja3MgaWYgdGhlIAotICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gaXMgbnVsbCBvciBub3QuIElmIGl0IGlzIG5vdCBudWxsLCAKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCwgZ2l2ZW4KKyAgICAgKiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgc3ViamVjdCBhbmQgdGhlCisgICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPi4gSXQgZmlyc3QgY2hlY2tzIGlmIHRoZQorICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gaXMgbnVsbCBvciBub3QuIElmIGl0IGlzIG5vdCBudWxsLAogICAgICAqIGl0IGNvbnN0cnVjdHMgYSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCB3aXRoCiAgICAgICogdGhlIHVzZXIgYW5kIHBhc3N3b3JkIGZpZWxkcyBmcm9tIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGFuZCByZXR1cm5zIHRoaXMKLSAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdC4gSWYgdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gCi0gICAgICogaXMgbnVsbCwgaXQgcmV0cmlldmVzIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdHMgZnJvbSAKKyAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdC4gSWYgdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KKyAgICAgKiBpcyBudWxsLCBpdCByZXRyaWV2ZXMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0cyBmcm9tCiAgICAgICogdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IHBhcmFtZXRlciBhbmQgcmV0dXJucyB0aGUgZmlyc3QKLSAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCB3aGljaCBjb250YWlucyBhIAorICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGEKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBpbnN0YW5jZSBlcXVpdmFsZW50CiAgICAgICogdG8gdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIHBhcmFtZXRlci4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+Ci0gICAgICogQHBhcmFtCWluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgotICAgICAqIEByZXR1cm4JPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CWdlbmVyaWMgZXhjZXB0aW9uIGlmIG9wZXJhdGlvbiBmYWlscwotICAgICAqIEB0aHJvd3MJPGNvZGU+U2VjdXJpdHlFeGNlcHRpb248L2NvZGU+CWlmIGFjY2VzcyB0byB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgaXMgZGVuaWVkCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgaW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gICAgZ2VuZXJpYyBleGNlcHRpb24gaWYgb3BlcmF0aW9uIGZhaWxzCisgICAgICogQHRocm93cyAgICA8Y29kZT5TZWN1cml0eUV4Y2VwdGlvbjwvY29kZT4gICAgaWYgYWNjZXNzIHRvIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBpcyBkZW5pZWQKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIFBhc3N3b3JkQ3JlZGVudGlhbCBnZXRQYXNzd29yZENyZWRlbnRpYWwoZmluYWwgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiwKICAgICAgICAgIGZpbmFsIFN1YmplY3Qgc3ViamVjdCwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAKLQlpZiAoaW5mbyA9PSBudWxsKSB7CisgICAgaWYgKGluZm8gPT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKHN1YmplY3QgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTg5LDE0ICs4OSwxNCBAQAogICAgICAgICAgICAgcmV0dXJuIHBjOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0cnVlIGlmIHR3byBzdHJpbmdzIGFyZSBlcXVhbDsgZmFsc2Ugb3RoZXJ3aXNlCi0gICAgICogCi0gICAgICogQHBhcmFtCXN0cjEJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBwYXJhbQlzdHIyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHR3byBzdHJpbmdzIGFyZSBlcXVhbAotICAgICAqICAgICAgICAJZmFsc2UJb3RoZXJ3aXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3RyMSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHN0cjIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgdHdvIHN0cmluZ3MgYXJlIGVxdWFsCisgICAgICogICAgICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBzdGF0aWMgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoU3RyaW5nIHN0cjEsIFN0cmluZyBzdHIyKSB7CiAgICAgICAgIGlmIChzdHIxID09IG51bGwpIHsKQEAgLTEwOSwxMCArMTA5LDEwIEBACiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0cnVlIGlmIHR3byA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdHMgYXJlIGVxdWFsOyBmYWxzZSBvdGhlcndpc2UKICAgICAgKgotICAgICAqIEBwYXJhbQlwQzEJPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqIEBwYXJhbQlwQzIJPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgdHdvIFBhc3N3b3JkQ3JlZGVudGlhbHMgYXJlIGVxdWFsCi0gICAgICogICAgICAgIAlmYWxzZQlvdGhlcndpc2UKKyAgICAgKiBAcGFyYW0gICAgcEMxICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcEMyICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHR3byBQYXNzd29yZENyZWRlbnRpYWxzIGFyZSBlcXVhbAorICAgICAqICAgICAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgc3RhdGljIHB1YmxpYyBib29sZWFuIGlzUGFzc3dvcmRDcmVkZW50aWFsRXF1YWwoUGFzc3dvcmRDcmVkZW50aWFsIHBDMSwgUGFzc3dvcmRDcmVkZW50aWFsIHBDMikgewogICAgICAgICBpZiAocEMxID09IHBDMikKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbAppbmRleCBhNTViYmYwLi5mMDYwZTdkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIuIiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvdXRpbCIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0zMyw3ICszMyw3IEBACiAgICAgICA8amFyIGphcmZpbGU9IiR7ZGlzdC5kaXJ9LyR7cGtnLmRpcn0vdXRpbC5qYXIiIGJhc2VkaXI9IiR7Y2xhc3MuZGlyfSIKICAgICAgICAgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTMiIGRlcGVuZHM9ImNvbXBpbGUiLz4KICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTQiIGRlcGVuZHM9ImNvbXBpbGUiLz4KIApAQCAtNDQsNSArNDQsNSBAQAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCwgcGFja2FnZTE0Ii8+CiAKICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgotICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhCmluZGV4IGVmZGYwZDcuLmUyMDlhYWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEKQEAgLTE3LDE2ICsxNywxNiBAQAogcGFja2FnZSBzYW1wbGVzLmVqYi5zdWJjbGFzc2luZy5zZXJ2bGV0OwogCiBpbXBvcnQgamF2YS5pby4qOwotaW1wb3J0IGphdmEudXRpbC4qOyAKLWltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsgCi1pbXBvcnQgamF2YXgubmFtaW5nLio7IAotaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7IAotaW1wb3J0IGpha2FydGEuZWpiLio7IAoraW1wb3J0IGphdmEudXRpbC4qOworaW1wb3J0IGpha2FydGEuc2VydmxldC4qOworaW1wb3J0IGphdmF4Lm5hbWluZy4qOworaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7CitpbXBvcnQgamFrYXJ0YS5lamIuKjsKIAotaW1wb3J0IHNhbXBsZXMuZWpiLnN1YmNsYXNzaW5nLmVqYi4qOyAKK2ltcG9ydCBzYW1wbGVzLmVqYi5zdWJjbGFzc2luZy5lamIuKjsKIGltcG9ydCBjb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW47CiAKLXB1YmxpYyBjbGFzcyBTaW1wbGVCYW5rU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsgIAorcHVibGljIGNsYXNzIFNpbXBsZUJhbmtTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAKICAgSW5pdGlhbENvbnRleHQgaW5pdENvbnRleHQgPSBudWxsOwpAQCAtNDIsMTQgKzQyLDE0IEBACiAgIHsKICAgfQogCi0gIHB1YmxpYyB2b2lkIGRvR2V0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSAKLSAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgCisgIHB1YmxpYyB2b2lkIGRvR2V0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQorICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7Ci0gIH0gIAorICB9CiAKLSAgLyoqIGhhbmRsZXMgdGhlIEhUVFAgUE9TVCBvcGVyYXRpb24gKiovIAotICBwdWJsaWMgdm9pZCBkb1Bvc3QgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIAotICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAKKyAgLyoqIGhhbmRsZXMgdGhlIEhUVFAgUE9TVCBvcGVyYXRpb24gKiovCisgIHB1YmxpYyB2b2lkIGRvUG9zdCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKKyAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICBkb0xvb2t1cCgpOwogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2ltcGxlQmFua1NlcnZsZXQgaXMgZXhlY3V0aW5nIik7CiAgICAgU3RyaW5nIFNTTiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJTU04iKTsKQEAgLTY1LDE0ICs2NSwxNCBAQAogICAgIFN0cmluZyB6aXBDb2RlID0gIiI7CiAgICAgbG9uZyBjdXJyZW50U2F2aW5nc0JhbGFuY2UgPSAwOwogICAgIGxvbmcgY3VycmVudENoZWNraW5nQmFsYW5jZSA9IDA7Ci0gICAgIAorCiAgICAgU3RyaW5nIGFjdGlvbiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJhY3Rpb24iKTsKICAgICBpZiAoYWN0aW9uLmVxdWFscygiQ3JlYXRlIikpCiAgICAgewogICAgICAgbWVzc2FnZSA9ICJBZGQgQ3VzdG9tZXIiOwogICAgICAganNwID0gIi9TaW1wbGVCYW5rQWRkLmpzcCI7CiAgICAgfQotICAgIGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoIkFkZCBDdXN0b21lciIpKSAKKyAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJBZGQgQ3VzdG9tZXIiKSkKICAgICB7CiAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFkZCBDdXN0b21lciBidXR0b24gcHJlc3NlZCIpOwogICAgICAgU1NOID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoIlNTTiIpOwpAQCAtODksNyArODksNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSBjdXN0b21lclNhdmluZ3NMb2NhbEhvbWUuY3JlYXRlKFNTTiwgbGFzdE5hbWUsIGZpcnN0TmFtZSwgYWRkcmVzczEsIGFkZHJlc3MyLCBjaXR5LCBzdGF0ZSwgemlwQ29kZSk7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBjcmVhdGUgdGhlIGN1c3RvbWVyIHNhdmluZ3MgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIG1lc3NhZ2UgPSAiQ3VzdG9tZXIgQWRkZWQuIjsKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSBjdXN0b21lclNhdmluZ3NMb2NhbEhvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZmluZCB0aGUgY3VzdG9tZXIgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIGpzcCA9ICIvU2ltcGxlQmFua0VkaXQuanNwIjsKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSBjdXN0b21lclNhdmluZ3NMb2NhbEhvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZmluZCB0aGUgY3VzdG9tZXIgc2F2aW5ncyByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogICAgICAgbWVzc2FnZSA9ICJEZWxldGUgQ3VzdG9tZXIiOwpAQCAtMTI2LDEyICsxMjYsMTIgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzTG9jYWxIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKS5yZW1vdmUoKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGRlbGV0ZSB0aGUgY3VzdG9tZXIgc2F2aW5ncyBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBtZXNzYWdlID0gIkN1c3RvbWVyIERlbGV0ZWQuIjsKICAgICAgIGpzcCA9ICIvU2ltcGxlQmFua01lc3NhZ2UuanNwIjsKLSAgICB9ICAKKyAgICB9CiAKIAogICAgIGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoIlVwZGF0ZSIpKQpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5ncyA9IChDdXN0b21lclNhdmluZ3MpY3VzdG9tZXJTYXZpbmdzTG9jYWxIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIHNhdmluZ3MgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KIApAQCAtMTUwLDcgKzE1MCw3IEBACiAgICAgICAgIGN1c3RvbWVyQ2hlY2tpbmcgPSAoQ3VzdG9tZXJDaGVja2luZyljdXN0b21lckNoZWNraW5nTG9jYWxIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIGNoZWNraW5nIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAKQEAgLTIxMCw5ICsyMTAsOSBAQAogICAgIFJlcXVlc3REaXNwYXRjaGVyIGRpc3BhdGNoZXIgPSBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldFJlcXVlc3REaXNwYXRjaGVyKGpzcCk7CiAgICAgZGlzcGF0Y2hlci5pbmNsdWRlKHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICByZXR1cm47Ci0gIH0gCisgIH0KIAotICBwdWJsaWMgdm9pZCBkb0xvb2t1cCgpIAorICBwdWJsaWMgdm9pZCBkb0xvb2t1cCgpCiAgIHsKICAgICB0cnkgewogICAgICAgaW5pdENvbnRleHQgPSBuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbAppbmRleCBkZjlkZjM0Li4zM2E3MDY5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3NxbC9kcm9wQmFua1RhYmxlcy5zcWwKQEAgLTEgKzEgQEAKLWRyb3AgdGFibGUgY3VzdG9tZXIyOw0KK2Ryb3AgdGFibGUgY3VzdG9tZXIyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvYnVpbGQucHJvcGVydGllcwppbmRleCBlMmNjNzVkLi5kYzE5YzliIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTYgKzE1LDE2IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXN1YmNsYXNzaW5nIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zdWJjbGFzc2luZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0ic3ViY2xhc3NpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvYnVpbGQueG1sCmluZGV4IGQ3ZTdmYTEuLmM3MDA2NTQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL2J1aWxkLnhtbApAQCAtMzIsNyArMzIsNyBAQAogICAgICZjb21tb25CdWlsZDsKICAgICAmY29tbW9uUnVuOwogICAgICZ0ZXN0cHJvcGVydGllczsKLSAgICAKKwogPCEtLQogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxzZXR1cCxkZXBsb3ktd2FyLCBydW4td2FyLCB1bmRlcGxveS13YXIsIGRlcGxveS1lYXIsIHJ1bi1lYXIsIHVuZGVwbG95LWVhciwgdW5zZXR1cCIvPgogCkBAIC00MSwxNSArNDEsMTUgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsIGRpc2FibGUtcmVzb3VyY2UtdmFsaWRhdGlvbiwgZGVwbG95LWVhciwgc2V0dXAsIHJ1bi1lYXIsIHVuc2V0dXAsIHVuZGVwbG95LWVhciwgZW5hYmxlLXJlc291cmNlLXZhbGlkYXRpb24iLz4KIAogPCEtLQotCTxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJydW4td2FyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1lYXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1bi1lYXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWVhciIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4td2FyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1lYXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1lYXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWVhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgogICAgIDwvdGFyZ2V0PgogLS0+CiAKQEAgLTU3LDQxICs1Nyw0MSBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICAgIDxhbnQgZGlyPSJyYSIgdGFyZ2V0PSJjbGVhbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCI+Ci0gICAgCTxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29ubmVjdG9yIj4KLSAgICAgICAgCTxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9zaW1wbGVCYW5rLnNxbCIvPgotICAgIAk8L2FudGNhbGw+Ci0gICAgCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXBvb2wiLz4KLSAgICAJPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtcmVzb3VyY2UiLz4KLSAgICAJPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtYWRtaW4tb2JqZWN0Ii8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29ubmVjdG9yIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9zaW1wbGVCYW5rLnNxbCIvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXBvb2wiLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtcmVzb3VyY2UiLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtYWRtaW4tb2JqZWN0Ii8+CiAgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImRpc2FibGUtcmVzb3VyY2UtdmFsaWRhdGlvbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWp2bS1vcHRpb25zIj4KLQkJCTxwYXJhbSBuYW1lPSJvcHRpb24iIHZhbHVlPSItRGRlcGxveW1lbnQucmVzb3VyY2UudmFsaWRhdGlvbj1mYWxzZSIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXIiLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImRpc2FibGUtcmVzb3VyY2UtdmFsaWRhdGlvbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWp2bS1vcHRpb25zIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcHRpb24iIHZhbHVlPSItRGRlcGxveW1lbnQucmVzb3VyY2UudmFsaWRhdGlvbj1mYWxzZSIvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXIiLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iZW5hYmxlLXJlc291cmNlLXZhbGlkYXRpb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qdm0tb3B0aW9ucyI+Ci0JCQk8cGFyYW0gbmFtZT0ib3B0aW9uIiB2YWx1ZT0iLURkZXBsb3ltZW50LnJlc291cmNlLnZhbGlkYXRpb249ZmFsc2UiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyIi8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJlbmFibGUtcmVzb3VyY2UtdmFsaWRhdGlvbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWp2bS1vcHRpb25zIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcHRpb24iIHZhbHVlPSItRGRlcGxveW1lbnQucmVzb3VyY2UudmFsaWRhdGlvbj1mYWxzZSIvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXIiLz4KKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXBvb2wiPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jb25uZWN0b3ItY29ubnBvb2wtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY29ubmVjdG9yLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJhLm5hbWUiIHZhbHVlPSIke2FwcG5hbWV9QXBwI2pkYmNyYSIvPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJleHRyYS1wYXJhbXMiIHZhbHVlPSItLW1hdGNoY29ubmVjdGlvbnM9ZmFsc2UiLz4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdGlvbi5kZWZuYW1lIiB2YWx1ZT0iamF2YXguc3FsLkRhdGFTb3VyY2UiLz4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmNvbnBvb2wubmFtZSIgdmFsdWU9ImVtYmVkZGVkLXJhLXBvb2wiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC1vcmFjbGUtcHJvcHMiPgotCQk8cGFyYW0gbmFtZT0icG9vbC50eXBlIiB2YWx1ZT0iY29ubmVjdG9yIi8+Ci0JCTxwYXJhbSBuYW1lPSJjb25wb29sLm5hbWUiIHZhbHVlPSJlbWJlZGRlZC1yYS1wb29sIi8+Ci0JCTwvYW50Y2FsbD4KKyAgICAgICAgPHBhcmFtIG5hbWU9InBvb2wudHlwZSIgdmFsdWU9ImNvbm5lY3RvciIvPgorICAgICAgICA8cGFyYW0gbmFtZT0iY29ucG9vbC5uYW1lIiB2YWx1ZT0iZW1iZWRkZWQtcmEtcG9vbCIvPgorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcmVzb3VyY2UiPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWNvbm5lY3Rvci1yZXNvdXJjZS1jb21tb24iPgpAQCAtMTA0LDE4ICsxMDQsMTggQEAKICAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtYWRtaW4tb2JqZWN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iY3JlYXRlLWFkbWluLW9iamVjdCAtLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSAtLXJlc3R5cGUgY29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluIC0tcmFuYW1lICR7YXBwbmFtZX1BcHAjamRiY3JhIC0tcHJvcGVydHkgVGFibGVOYW1lPWN1c3RvbWVyMjpKbmRpTmFtZT1qZGJjL2VqYi1zdWJjbGFzc2luZzpTY2hlbWFOYW1lPURCVVNFUjpOb09mUm93cz0xIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iZWlzL2pkYmNBZG1pbiIvPgorICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9ImVpcy9qZGJjQWRtaW4iLz4KICAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgPC90YXJnZXQ+CiAKICAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtYWRtaW4tb2JqZWN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtYWRtaW4tb2JqZWN0Ii8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gZWlzL2pkYmNBZG1pbiIvPgotCSA8L2FudGNhbGw+Ci0JIDwhLS08YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPi0tPgorICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImRlbGV0ZS1hZG1pbi1vYmplY3QiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSBlaXMvamRiY0FkbWluIi8+CisgICAgIDwvYW50Y2FsbD4KKyAgICAgPCEtLTxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+LS0+CiAgICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0YXJ0Ij4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTIzLDE2ICsxMjMsMTYgQEAKICAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcmEtY29uZmlnIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iY3JlYXRlLXJlc291cmNlLWFkYXB0ZXItY29uZmlnICAtLXByb3BlcnR5IFJBUHJvcGVydHk9VkFMSUQiLz4KLQkgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke2FwcG5hbWV9QXBwI2pkYmNyYSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7YXBwbmFtZX1BcHAjamRiY3JhIi8+CiAgICAgICAgICA8L2FudGNhbGw+CiAgICAgIDwvdGFyZ2V0PgogCiAgICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJhLWNvbmZpZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iZGVsZXRlLXJlc291cmNlLWFkYXB0ZXItY29uZmlnIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCNqZGJjcmEiLz4KLQkgPC9hbnRjYWxsPgotCSA8IS0tPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4tLT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtcmVzb3VyY2UtYWRhcHRlci1jb25maWciLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke2FwcG5hbWV9QXBwI2pkYmNyYSIvPgorICAgICA8L2FudGNhbGw+CisgICAgIDwhLS08YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPi0tPgogICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCI+CkBAIC0xNDQsNyArMTQ0LDcgQEAKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1wb29sIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtYWRtaW4tb2JqZWN0Ii8+LS0+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1wb29sIj4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1jb25uZWN0b3ItY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmNvbnBvb2wubmFtZSIgdmFsdWU9ImVtYmVkZGVkLXJhLXBvb2wiLz4KQEAgLTE1NCw3ICsxNTQsNyBAQAogICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtY29ubmVjdG9yLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5qbmRpLm5hbWUiIHZhbHVlPSJqZGJjL2VqYi1zdWJjbGFzc2luZyIvPgotCQk8L2FudGNhbGw+CisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgpAQCAtMTcwLDkgKzE3MCw5IEBACiAgICAgICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBDb21waWxpbmcgdGVzdCBzb3VyY2UgZmlsZXMiIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgICA8amF2YWMgc3JjZGlyPSJzZXJ2bGV0IgogICAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCi0JIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9OnJhL3B1Ymxpc2gvaW50ZXJuYWwvY2xhc3NlcyIKKyAgICAgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH06cmEvcHVibGlzaC9pbnRlcm5hbC9jbGFzc2VzIgogICAgICAgICAgZGVidWc9Im9uIgotCSBmYWlsb25lcnJvcj0idHJ1ZSIvPgorICAgICBmYWlsb25lcnJvcj0idHJ1ZSIvPgogICAgICA8L3RhcmdldD4KIAogCkBAIC0xODEsMzUgKzE4MSwzNSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgPGFudCBkaXI9InJhIiB0YXJnZXQ9ImFzc2VtYmxlIi8+CiAKICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICA8L2FudGNhbGw+Ci0gICAgICAgCisKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgPC9hbnRjYWxsPgogCi0gICAgCisKICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+ICAgIAotICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiAKKyAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgorICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIgogICAgICBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+CiAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+Ci0gICAgPC9maWxlc2V0PiAgCisgICAgPC9maWxlc2V0PgogICAgIDxmaWxlc2V0IGRpcj0icmEvcHVibGlzaC9saWIiPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi5yYXIiLz4KICAgICA8L2ZpbGVzZXQ+CiAgICAgPC9lYXI+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCi0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtcmEtY29uZmlnIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgpAQCAtMjE4LDI5ICsyMTgsMjkgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS13YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4td2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViY2xpZW50LWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9ImVtYmVkZGVkd2ViIChzdGFuZC1hbG9uZSB3YXIgYmFzZWQpIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJlbWJlZGRlZHdlYiAoc3RhbmQtYWxvbmUgd2FyIGJhc2VkKSIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJlbWJlZGRlZHdlYiAoZWFyIGJhc2VkKSIvPgotCTwvYW50Y2FsbD4KKyAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0iZW1iZWRkZWR3ZWIgKGVhciBiYXNlZCkiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1yYS1jb25maWciLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImV4dHJhLXBhcmFtcyIgdmFsdWU9Ii0tY2FzY2FkZT10cnVlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS13YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCAxZDEyMDBkLi5kZjRiYjkzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yOSwyMCArMjksMjAgQEAKICAgICAgICAgPHJlcy1yZWYtbmFtZT5qZGJjL1NpbXBsZUJhbms8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qZGJjL2VqYi1zdWJjbGFzc2luZzwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPiAKLSAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+IAotICAgICA8YmVhbi1wb29sPiAKLSAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+IAotICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+IAotICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+IAotICAgICAgICAgPHBvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4gCi0gICAgICA8L2JlYW4tcG9vbD4gCi0gICAgICA8YmVhbi1jYWNoZT4gCi0gICAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+IAotICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkxSVTwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+IAotICAgICAgPC9iZWFuLWNhY2hlPiAKKyAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+CisgICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPgorICAgICA8YmVhbi1wb29sPgorICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+CisgICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgPC9iZWFuLXBvb2w+CisgICAgICA8YmVhbi1jYWNoZT4KKyAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4KKyAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4KKyAgICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KICAgICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPkN1c3RvbWVyQ2hlY2tpbmdFSkI8L2VqYi1uYW1lPgpAQCAtNTEsMjAgKzUxLDIwIEBACiAgICAgICAgIDxyZXMtcmVmLW5hbWU+amRiYy9TaW1wbGVCYW5rPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9lamItc3ViY2xhc3Npbmc8L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4gCi0gICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPiAKLSAgICAgPGJlYW4tcG9vbD4gCi0gICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPiAKLSAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PiAKLSAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPiAKKyAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+CisgICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPgorICAgICA8YmVhbi1wb29sPgorICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+CiAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+Ci0gICAgICA8L2JlYW4tcG9vbD4gCi0gICAgICA8YmVhbi1jYWNoZT4gCisgICAgICA8L2JlYW4tcG9vbD4KKyAgICAgIDxiZWFuLWNhY2hlPgogICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPgogICAgICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgogICAgICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgotICAgICAgPC9iZWFuLWNhY2hlPiAKKyAgICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgogPC9zdW4tZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXIuamF2YQppbmRleCA4YTliMTA1Li4xNjBlYWI5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lci5qYXZhCkBAIC00NCw0ICs0NCw0IEBACiAKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YQppbmRleCA2MWRlMjkxLi5iMzQxYzM0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YQpAQCAtMjAsNCArMjAsNCBAQAogewogfQogCi0gIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhCmluZGV4IGVlMGQxN2MuLjRiNTQ0NDQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhCkBAIC05NCw1ICs5NCw1IEBACiAgIH0KIAogfQotICAgIAotICAgIAorCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJFSkIuamF2YQppbmRleCAwNTIwYjYwLi4wNzIyMGRiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lckVKQi5qYXZhCkBAIC01Myw3ICs1Myw3IEBACiAKICAgcHVibGljIFN0cmluZyBnZXRBZGRyZXNzMSgpCiAgIHsKLSAgICByZXR1cm4gYWRkcmVzczE7IAorICAgIHJldHVybiBhZGRyZXNzMTsKICAgfQogCiAgIHB1YmxpYyBTdHJpbmcgZ2V0QWRkcmVzczIoKQpAQCAtMTM5LDcgKzEzOSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1FMIGV4Y2VwdGlvbiBvY2N1cmVkIGluIGVqYlJlbW92ZSBtZXRob2QiKTsKICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgIH0KLSAgICAKKwogICB9CiAKICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKQpAQCAtMjA2LDEyICsyMDYsMTIgQEAKICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgewogICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTUUxFeGNlcHRpb24gb2NjdXJyZWQgaW4gZWpiTG9hZCgpIG1ldGhvZCIpOwogICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9ICAgCisgICAgfQogICB9CiAKICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQogICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogfQotICAgICAgCi0gICAgCi0gICAgCisKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YQppbmRleCAzMzhjOTIxLi44ODNlMDRhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEKQEAgLTIwLDQgKzIwLDQgQEAKIHsKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEKaW5kZXggZjMwYjUwNi4uYjBjZTdiNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhCkBAIC05NSw2ICs5NSw2IEBACiAgIH0KIAogfQotICAgICAgCi0gICAgCi0gICAgCisKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGVlMmVjYTAuLmZkMjFjM2QgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNCw3ICsxNCw3IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogIwogCi0gICAgCisKICMjIyBDb21wb25lbnQgUHJvcGVydGllcyAjIyMKIHNyYy5kaXI9c3JjCiBjb21wb25lbnQucHVibGlzaC5ob21lPS4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvYnVpbGQueG1sCmluZGV4IGNiNmZmMzEuLjIzYTFhMGMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL2J1aWxkLnhtbApAQCAtMjMsNjIgKzIzLDYyIEBACiAKIDxwcm9qZWN0IG5hbWU9IkpEQkNDb25uZWN0b3IgdG9wIGxldmVsIiBkZWZhdWx0PSJidWlsZCI+CiAgICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2pkYmNyYS9zcGkiLz4KLSAgICAKKwogICAgICZjb21tb247CiAgICAgJnRlc3Rjb21tb247CiAgICAgPHByb3BlcnR5IGZpbGU9Ii4vYnVpbGQucHJvcGVydGllcyIvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSxhc3NlbWJsZSIgLz4KLSAgICAgICAgICAKKwogCiAgICAgPCEtLSBpbml0LiBJbml0aWFsaXphdGlvbiBpbnZvbHZlcyBjcmVhdGluZyBwdWJsaXNoaW5nIGRpcmVjdG9yaWVzIGFuZAotICAgICAgICAgT1Mgc3BlY2lmaWMgdGFyZ2V0cy4gLS0+IAorICAgICAgICAgT1Mgc3BlY2lmaWMgdGFyZ2V0cy4gLS0+CiAgICAgPHRhcmdldCBuYW1lPSJpbml0IiBkZXNjcmlwdGlvbj0iJHtjb21wb25lbnQubmFtZX0gaW5pdGlhbGl6YXRpb24iPgogICAgICAgICA8dHN0YW1wPgogICAgICAgICAgICAgPGZvcm1hdCBwcm9wZXJ0eT0ic3RhcnQudGltZSIgcGF0dGVybj0iTU0vZGQveXl5eSBoaDptbSBhYSIvPgotICAgICAgICA8L3RzdGFtcD4gICAgCisgICAgICAgIDwvdHN0YW1wPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJCdWlsZGluZyBjb21wb25lbnQgJHtjb21wb25lbnQubmFtZX0iLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIvPiAgICAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgPCEtLSBjb21waWxlIC0tPiAKKyAgICA8IS0tIGNvbXBpbGUgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0IgotICAgICAgICAgICAgZGVzY3JpcHRpb249IkNvbXBpbGUgY29tL3N1bi8qIGNvbS9pcGxhbmV0Lyogc291cmNlcyI+ICAKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDb21waWxlIGNvbS9zdW4vKiBjb20vaXBsYW5ldC8qIHNvdXJjZXMiPgogICAgICAgICA8IS0tPGVjaG8gbWVzc2FnZT0iQ29ubmVjdG9yIGFwaSByZXNpZGVzIGluICR7Y29ubmVjdG9yLWFwaS5qYXJ9Ii8+LS0+Ci0gICAgICAgIDxqYXZhYyBzcmNkaXI9IiR7c3JjLmRpcn0iIAorICAgICAgICA8amF2YWMgc3JjZGlyPSIke3NyYy5kaXJ9IgogICAgICAgICAgICAgICAgZGVzdGRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IgotCSAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+Ci0JICAgICAgIDxjbGFzc3BhdGg+Ci0JICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzIj4KLQkgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qYXIiIC8+Ci0JICAgICAgICAgIDwvZmlsZXNldD4KLQkgICAgICAgPC9jbGFzc3BhdGg+CisgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4KKyAgICAgICAgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMiPgorICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIgLz4KKyAgICAgICAgICAgICAgPC9maWxlc2V0PgorICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImNvbS9zdW4vamRiY3JhLyoqIi8+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJjb20vc3VuL2FwcHNlcnYvKioiLz4KICAgICAgICAgPC9qYXZhYz4KICAgICA8L3RhcmdldD4KLSAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQiLz4KIAotICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSI+ICAgIAotICAgIAkKLQk8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjLmphciIgCi0gICAgICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosIAotICAgICAgICAgICAgY29tL3N1bi9hcHBzZXJ2LyoqLyosIGNvbS9zdW4vamRiY3JhL3V0aWwvKiovKiwgY29tL3N1bi9qZGJjcmEvY29tbW9uLyoqLyoiLz4gCi0gICAJCi0gICAgICAgIDxjb3B5IGZpbGU9IiR7c3JjLmRpcn0vY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwiIAotICAgICAgICAgICAgICAgIHRvZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiPgorCisgICAgPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiYy5qYXIiCisgICAgICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosCisgICAgICAgICAgICBjb20vc3VuL2FwcHNlcnYvKiovKiwgY29tL3N1bi9qZGJjcmEvdXRpbC8qKi8qLCBjb20vc3VuL2pkYmNyYS9jb21tb24vKiovKiIvPgorCisgICAgICAgIDxjb3B5IGZpbGU9IiR7c3JjLmRpcn0vY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwiCisgICAgICAgICAgICAgICAgdG9maWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjcmEucmFyIiAKLQkJYmFzZWRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9IiBpbmNsdWRlcz0iamRiYy5qYXIiPgorICAgICAgIDxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmNyYS5yYXIiCisgICAgICAgIGJhc2VkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIgaW5jbHVkZXM9ImpkYmMuamFyIj4KIAotICAgCQk8bWV0YWluZiBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgogCi0gICAJPGRlbGV0ZSBmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIi8+Ci0JCisgICAgICAgPGRlbGV0ZSBmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIi8+CisKICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXNjcmlwdGlvbj0iQ2xlYW4gdGhlIGJ1aWxkIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCmluZGV4IDlmODM5OWEuLmI2ZWYzMGIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQpAQCAtMjAsMTUgKzIwLDE1IEBACiBpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOwogCiAvKioKLSAqIFRoZSA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uIAorICogVGhlIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24KICAqIHNlcnZlciB3aWxsIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4gQW4gYXBwbGljYXRpb24gcHJvZ3JhbSB3b3VsZCBiZSBhYmxlCi0gKiB0byB1c2UgdGhpcyBpbnRlcmZhY2UgdG8gZG8gdGhlIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCBieSBTdW5PTkUgCisgKiB0byB1c2UgdGhpcyBpbnRlcmZhY2UgdG8gZG8gdGhlIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCBieSBTdW5PTkUKICAqIGFwcGxpY2F0aW9uIHNlcnZlci4KLSAqIDxwPkEgc2FtcGxlIGNvZGUgZm9yIGdldHRpbmcgZHJpdmVyJ3MgY29ubmVjdGlvbiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBsaWtlIAorICogPHA+QSBzYW1wbGUgY29kZSBmb3IgZ2V0dGluZyBkcml2ZXIncyBjb25uZWN0aW9uIGltcGxlbWVudGF0aW9uIHdvdWxkIGxpa2UKICAqIHRoZSBmb2xsb3dpbmcuCiAgKiA8cHJlPgogICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICBjb20uc3VuLmFwcHNlcnYuRGF0YVNvdXJjZSBkcyA9IChjb20uc3VuLmFwcHNlcnYuRGF0YVNPdXJjZSkgaWMubG9va3VwKCJqZGJjL1BvaW50QmFzZSIpOyAKKyAgICAgY29tLnN1bi5hcHBzZXJ2LkRhdGFTb3VyY2UgZHMgPSAoY29tLnN1bi5hcHBzZXJ2LkRhdGFTT3VyY2UpIGljLmxvb2t1cCgiamRiYy9Qb2ludEJhc2UiKTsKICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgIENvbm5lY3Rpb24gZHJpdmVyY29uID0gZHMuZ2V0Q29ubmVjdGlvbihjb24pOwogCkBAIC0zNiwxMyArMzYsMTMgQEAKIAogICAgICBjb24uY2xvc2UoKTsKICAgIDwvcHJlPgotICogCisgKgogICogQGF1dGhvciBCaW5vZCBQLkcKICAqLwogcHVibGljIGludGVyZmFjZSBEYXRhU291cmNlIGV4dGVuZHMgamF2YXguc3FsLkRhdGFTb3VyY2UgewogCiAgICAgLyoqCi0gICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIgCisgICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIKICAgICAgKiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24gc2VydmVyLiBJZiBhbiBhY3R1YWwgY29ubmVjdGlvbiBpcwogICAgICAqIHN1cHBsaWVkIGFzIGFyZ3VtZW50LCB0aGVuIGl0IHdpbGwgYmUganVzdCByZXR1cm5lZC4KICAgICAgKgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKaW5kZXggNzAwMjlmMS4uZTk2NmY5OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCkBAIC0yNywyMiArMjcsMjIgQEAKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CiAvKioKLSAqIFV0aWxpdHkgY2xhc3MsIHdoaWNoIHdvdWxkIGNyZWF0ZSBuZWNlc3NhcnkgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZSAKKyAqIFV0aWxpdHkgY2xhc3MsIHdoaWNoIHdvdWxkIGNyZWF0ZSBuZWNlc3NhcnkgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZQogICogc3BlY2lmaWNhdGlvbi4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRwotICogQHNlZQkJY29tLnN1bi5qZGJjcmEuY29tbW9uLkRhdGFTb3VyY2VTcGVjCi0gKiBAc2VlCQljb20uc3VuLmpkYmNyYS51dGlsLk1ldGhvZEV4Y2VjdXRvcgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKKyAqIEBzZWUgICAgICAgIGNvbS5zdW4uamRiY3JhLmNvbW1vbi5EYXRhU291cmNlU3BlYworICogQHNlZSAgICAgICAgY29tLnN1bi5qZGJjcmEudXRpbC5NZXRob2RFeGNlY3V0b3IKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2VPYmplY3RCdWlsZGVyIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAKICAgICBwcml2YXRlIERhdGFTb3VyY2VTcGVjIHNwZWM7Ci0gICAgCisKICAgICBwcml2YXRlIEhhc2h0YWJsZSBkcml2ZXJQcm9wZXJ0aWVzID0gbnVsbDsKLSAgICAKLSAgICBwcml2YXRlIE1ldGhvZEV4ZWN1dG9yIGV4ZWN1dG9yID0gbnVsbDsgICAgCi0gICAgCisKKyAgICBwcml2YXRlIE1ldGhvZEV4ZWN1dG9yIGV4ZWN1dG9yID0gbnVsbDsKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC01MCwxNjkgKzUwLDE2OSBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdCBhIERhdGFTb3VyY2UgT2JqZWN0IGZyb20gdGhlIHNwZWMuCi0gICAgICogCi0gICAgICogQHBhcmFtCXNwZWMJPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtICAgIHNwZWMgICAgPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhU291cmNlT2JqZWN0QnVpbGRlcihEYXRhU291cmNlU3BlYyBzcGVjKSB7Ci0gICAgCXRoaXMuc3BlYyA9IHNwZWM7Ci0gICAgCWV4ZWN1dG9yID0gbmV3IE1ldGhvZEV4ZWN1dG9yKCk7CisgICAgICAgIHRoaXMuc3BlYyA9IHNwZWM7CisgICAgICAgIGV4ZWN1dG9yID0gbmV3IE1ldGhvZEV4ZWN1dG9yKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0IHRoZSBEYXRhU291cmNlIE9iamVjdCBmcm9tIHRoZSBzcGVjLgogICAgICAqCi0gICAgICogQHJldHVybglPYmplY3QgY29uc3RydWN0ZWQgdXNpbmcgdGhlIERhdGFTb3VyY2VTcGVjLgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IGlmIHRoZSBjbGFzcyBpcyBub3QgZm91bmQgb3Igc29tZSBpc3N1ZSBpbiBleGVjdXRpbmcKLSAgICAgKgkJc29tZSBtZXRob2QuCisgICAgICogQHJldHVybiAgICBPYmplY3QgY29uc3RydWN0ZWQgdXNpbmcgdGhlIERhdGFTb3VyY2VTcGVjLgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IGlmIHRoZSBjbGFzcyBpcyBub3QgZm91bmQgb3Igc29tZSBpc3N1ZSBpbiBleGVjdXRpbmcKKyAgICAgKiAgICAgICAgc29tZSBtZXRob2QuCiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjb25zdHJ1Y3REYXRhU291cmNlT2JqZWN0KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlkcml2ZXJQcm9wZXJ0aWVzID0gcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKHNwZWMpOworICAgICAgICBkcml2ZXJQcm9wZXJ0aWVzID0gcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKHNwZWMpOwogICAgICAgICBPYmplY3QgZGF0YVNvdXJjZU9iamVjdCA9IGdldERhdGFTb3VyY2VPYmplY3QoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWMy1URVNUIDogIiAgKyBkYXRhU291cmNlT2JqZWN0KTsKICAgICAgICAgTWV0aG9kW10gbWV0aG9kcyA9IGRhdGFTb3VyY2VPYmplY3QuZ2V0Q2xhc3MoKS5nZXRNZXRob2RzKCk7CiAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gbWV0aG9kc1tpXS5nZXROYW1lKCk7Ci0JICAgIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFVzZXIiKSl7CSAgICAJCi0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UGFzc3dvcmQiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9naW5UaW1lT3V0IikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dXcml0ZXIiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dXUklURVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFiYXNlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YVNvdXJjZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGVzY3JpcHRpb24iKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE5ldHdvcmtQcm90b2NvbCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UG9ydE51bWJlciIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFJvbGVOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFNlcnZlck5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFN0YXRlbWVudHMiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhTVEFURU1FTlRTKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRJbml0aWFsUG9vbFNpemUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5JTklUSUFMUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1pblBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUlOUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heElkbGVUaW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYSURMRVRJTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFByb3BlcnR5Q3ljbGUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QUk9QRVJUWUNZQ0xFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAoZHJpdmVyUHJvcGVydGllcy5jb250YWluc0tleShtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpKXsKLQkgICAgCVZlY3RvciB2YWx1ZXMgPSAoVmVjdG9yKSBkcml2ZXJQcm9wZXJ0aWVzLmdldChtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpOwotCSAgICAgICAgZXhlY3V0b3IucnVuTWV0aG9kKG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCwgdmFsdWVzKTsKLQkgICAgfQorICAgICAgICBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRVc2VyIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBhc3N3b3JkIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ2luVGltZU91dCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9nV3JpdGVyIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HV1JJVEVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhYmFzZU5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFTb3VyY2VOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERlc2NyaXB0aW9uIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE5ldHdvcmtQcm90b2NvbCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UG9ydE51bWJlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFJvbGVOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFNlcnZlck5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhTdGF0ZW1lbnRzIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYU1RBVEVNRU5UUyksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0SW5pdGlhbFBvb2xTaXplIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuSU5JVElBTFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNaW5Qb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1JTlBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhQb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhJZGxlVGltZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWElETEVUSU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQcm9wZXJ0eUN5Y2xlIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUFJPUEVSVFlDWUNMRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKGRyaXZlclByb3BlcnRpZXMuY29udGFpbnNLZXkobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKSl7CisgICAgICAgICAgICBWZWN0b3IgdmFsdWVzID0gKFZlY3RvcikgZHJpdmVyUHJvcGVydGllcy5nZXQobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKTsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bk1ldGhvZChtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QsIHZhbHVlcyk7CisgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gZGF0YVNvdXJjZU9iamVjdDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGV4dHJhIGRyaXZlciBwcm9wZXJ0aWVzIGZyb20gdGhlIERhdGFTb3VyY2VTcGVjIG9iamVjdCBhbmQKICAgICAgKiBwYXJzZSB0aGVtIHRvIGEgc2V0IG9mIG1ldGhvZE5hbWUgYW5kIHBhcmFtZXRlcnMuIFByZXBhcmUgYSBoYXNodGFibGUKICAgICAgKiBjb250YWluaW5nIHRoZXNlIGRldGFpbHMgYW5kIHJldHVybi4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcGVjCTxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcmV0dXJuCUhhc2h0YWJsZSBjb250YWluaW5nIG1ldGhvZCBuYW1lcyBhbmQgcGFyYW1ldGVycywKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCUlmIGRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgYW5kIHByb3BlcnR5IHN0cmluZwotICAgICAqCQkJCQlpcyBub3QgbnVsbC4KKyAgICAgKiBAcGFyYW0gICAgc3BlYyAgICA8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICBIYXNodGFibGUgY29udGFpbmluZyBtZXRob2QgbmFtZXMgYW5kIHBhcmFtZXRlcnMsCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBJZiBkZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGFuZCBwcm9wZXJ0eSBzdHJpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgaXMgbm90IG51bGwuCiAgICAgICovCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKERhdGFTb3VyY2VTcGVjIHNwZWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJU3RyaW5nIGRlbGltID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKKyAgICAgICAgU3RyaW5nIGRlbGltID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKIAogICAgICAgICBTdHJpbmcgcHJvcCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwotCWlmICggcHJvcCA9PSBudWxsIHx8IHByb3AudHJpbSgpLmVxdWFscygiIikpIHsKLQkgICAgcmV0dXJuIG5ldyBIYXNodGFibGUoKTsKLQl9IGVsc2UgaWYgKGRlbGltID09IG51bGwgfHwgZGVsaW0uZXF1YWxzKCIiKSkgewotCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24gKCJEZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGluIHRoZSBjb25maWd1cmF0aW9uIik7Ci0JfQotCQotCUhhc2h0YWJsZSBwcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOwotCWRlbGltID0gZGVsaW0udHJpbSgpOwkKLQlTdHJpbmcgc2VwID0gZGVsaW0rZGVsaW07Ci0JaW50IHNlcExlbiA9IHNlcC5sZW5ndGgoKTsKLQlTdHJpbmcgY2FjaGUgPSBwcm9wOwotCVZlY3RvciBtZXRob2RzID0gbmV3IFZlY3RvcigpOwotCQotCXdoaWxlIChjYWNoZS5pbmRleE9mKHNlcCkgIT0gLTEpIHsKLQkgICAgaW50IGluZGV4ID0gY2FjaGUuaW5kZXhPZihzZXApOwotCSAgICBTdHJpbmcgbmFtZSA9IGNhY2hlLnN1YnN0cmluZygwLGluZGV4KTsKLQkgICAgaWYgKG5hbWUudHJpbSgpICE9ICIiKSB7Ci0JICAgICAgICBtZXRob2RzLmFkZChuYW1lKTsKLQkgICAgCWNhY2hlID0gY2FjaGUuc3Vic3RyaW5nKGluZGV4K3NlcExlbik7Ci0JICAgIH0KLQl9Ci0JCi0gICAgCUVudW1lcmF0aW9uIGFsbE1ldGhvZHMgPSBtZXRob2RzLmVsZW1lbnRzKCk7Ci0gICAgCXdoaWxlIChhbGxNZXRob2RzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgCSAgICBTdHJpbmcgb25lTWV0aG9kID0gKFN0cmluZykgYWxsTWV0aG9kcy5uZXh0RWxlbWVudCgpOyAgICAJICAgIAotICAgIAkgICAgaWYgKCFvbmVNZXRob2QudHJpbSgpLmVxdWFscygiIikpIHsKLSAgICAJICAgIAlTdHJpbmcgbWV0aG9kTmFtZSA9IG51bGw7Ci0gICAgCSAgICAJVmVjdG9yIHBhcm1zID0gbmV3IFZlY3RvcigpOwotICAgIAkgICAgCVN0cmluZ1Rva2VuaXplciBtZXRob2REZXRhaWxzID0gbmV3IFN0cmluZ1Rva2VuaXplcihvbmVNZXRob2QsZGVsaW0pOwotCQlmb3IgKGludCBpPTA7IG1ldGhvZERldGFpbHMuaGFzTW9yZVRva2VucygpO2krKyApIHsKLQkJICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIG1ldGhvZERldGFpbHMubmV4dFRva2VuKCk7Ci0JCSAgICBpZiAoaT09MCkgewotCQkgICAgCW1ldGhvZE5hbWUgPSB0b2tlbi50b1VwcGVyQ2FzZSgpOwotCQkgICAgfSBlbHNlIHsKLQkJICAgIAlwYXJtcy5hZGQodG9rZW4pOwkJICAgIAkKLQkJICAgIH0KLQkJfQotCQlwcm9wZXJ0aWVzLnB1dChtZXRob2ROYW1lLHBhcm1zKTsKLSAgICAJICAgIH0gICAgCSAgICAKLSAgICAJfQotICAgIAlyZXR1cm4gcHJvcGVydGllczsKKyAgICBpZiAoIHByb3AgPT0gbnVsbCB8fCBwcm9wLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgIHJldHVybiBuZXcgSGFzaHRhYmxlKCk7CisgICAgfSBlbHNlIGlmIChkZWxpbSA9PSBudWxsIHx8IGRlbGltLmVxdWFscygiIikpIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uICgiRGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiIpOwogICAgIH0KLSAgICAKKworICAgIEhhc2h0YWJsZSBwcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOworICAgIGRlbGltID0gZGVsaW0udHJpbSgpOworICAgIFN0cmluZyBzZXAgPSBkZWxpbStkZWxpbTsKKyAgICBpbnQgc2VwTGVuID0gc2VwLmxlbmd0aCgpOworICAgIFN0cmluZyBjYWNoZSA9IHByb3A7CisgICAgVmVjdG9yIG1ldGhvZHMgPSBuZXcgVmVjdG9yKCk7CisKKyAgICB3aGlsZSAoY2FjaGUuaW5kZXhPZihzZXApICE9IC0xKSB7CisgICAgICAgIGludCBpbmRleCA9IGNhY2hlLmluZGV4T2Yoc2VwKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBjYWNoZS5zdWJzdHJpbmcoMCxpbmRleCk7CisgICAgICAgIGlmIChuYW1lLnRyaW0oKSAhPSAiIikgeworICAgICAgICAgICAgbWV0aG9kcy5hZGQobmFtZSk7CisgICAgICAgICAgICBjYWNoZSA9IGNhY2hlLnN1YnN0cmluZyhpbmRleCtzZXBMZW4pOworICAgICAgICB9CisgICAgfQorCisgICAgICAgIEVudW1lcmF0aW9uIGFsbE1ldGhvZHMgPSBtZXRob2RzLmVsZW1lbnRzKCk7CisgICAgICAgIHdoaWxlIChhbGxNZXRob2RzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBTdHJpbmcgb25lTWV0aG9kID0gKFN0cmluZykgYWxsTWV0aG9kcy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgaWYgKCFvbmVNZXRob2QudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG51bGw7CisgICAgICAgICAgICAgICAgVmVjdG9yIHBhcm1zID0gbmV3IFZlY3RvcigpOworICAgICAgICAgICAgICAgIFN0cmluZ1Rva2VuaXplciBtZXRob2REZXRhaWxzID0gbmV3IFN0cmluZ1Rva2VuaXplcihvbmVNZXRob2QsZGVsaW0pOworICAgICAgICBmb3IgKGludCBpPTA7IG1ldGhvZERldGFpbHMuaGFzTW9yZVRva2VucygpO2krKyApIHsKKyAgICAgICAgICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIG1ldGhvZERldGFpbHMubmV4dFRva2VuKCk7CisgICAgICAgICAgICBpZiAoaT09MCkgeworICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSB0b2tlbi50b1VwcGVyQ2FzZSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJtcy5hZGQodG9rZW4pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHByb3BlcnRpZXMucHV0KG1ldGhvZE5hbWUscGFybXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzOworICAgIH0KKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBEYXRhc291cmNlIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlIHNwZWMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCUluaXRpYWwgRGF0YVNvdXJjZSBPYmplY3QgaW5zdGFuY2UuCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gSWYgY2xhc3MgbmFtZSBpcyB3cm9uZyBvciBjbGFzc3BhdGggaXMgbm90IHNldAotICAgICAqCQlwcm9wZXJseS4KKyAgICAgKiBAcmV0dXJuICAgIEluaXRpYWwgRGF0YVNvdXJjZSBPYmplY3QgaW5zdGFuY2UuCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gSWYgY2xhc3MgbmFtZSBpcyB3cm9uZyBvciBjbGFzc3BhdGggaXMgbm90IHNldAorICAgICAqICAgICAgICBwcm9wZXJseS4KICAgICAgKi8KICAgICBwcml2YXRlIE9iamVjdCBnZXREYXRhU291cmNlT2JqZWN0KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlTdHJpbmcgY2xhc3NOYW1lID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKLSAgICAgICAgdHJ5IHsgICAgICAgICAgICAKKyAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBkYXRhU291cmNlQ2xhc3MgPSBDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSk7CiAgICAgICAgICAgICBPYmplY3QgZGF0YVNvdXJjZU9iamVjdCA9IGRhdGFTb3VyY2VDbGFzcy5uZXdJbnN0YW5jZSgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWMy1URVNUIDogIiAgKyBkYXRhU291cmNlT2JqZWN0KTsKICAgICAgICAgICAgIHJldHVybiBkYXRhU291cmNlT2JqZWN0OwogICAgICAgICB9IGNhdGNoKENsYXNzTm90Rm91bmRFeGNlcHRpb24gY2ZuZSl7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NuZmVfZHMiLCBjZm5lKTsKLQkKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY25mZV9kcyIsIGNmbmUpOworCiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNsYXNzIE5hbWUgaXMgd3Jvbmcgb3IgQ2xhc3MgcGF0aCBpcyBub3Qgc2V0IGZvciA6IiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBjZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pbnN0IiwgY2xhc3NOYW1lKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaW5zdCIsIGNsYXNzTmFtZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkVycm9yIGluIGluc3RhbnRpYXRpbmciICsgY2xhc3NOYW1lKTsKICAgICAgICAgfSBjYXRjaChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGNlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2FjY19pbnN0IiwgY2xhc3NOYW1lKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYWNjX2luc3QiLCBjbGFzc05hbWUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgRXJyb3IgaW4gaW5zdGFudGlhdGluZyIgKyBjbGFzc05hbWUpOwogICAgICAgICB9CiAgICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKaW5kZXggZWY2YzRjOS4uM2RjMTU0ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCkBAIC0xOSw5MiArMTksOTIgQEAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwogCiAvKioKLSAqIEVuY2Fwc3VsYXRlIHRoZSBEYXRhU291cmNlIG9iamVjdCBkZXRhaWxzIG9idGFpbmVkIGZyb20gCisgKiBFbmNhcHN1bGF0ZSB0aGUgRGF0YVNvdXJjZSBvYmplY3QgZGV0YWlscyBvYnRhaW5lZCBmcm9tCiAgKiBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlU3BlYyBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUk5BTUUJCQkJPSAxOyAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVNTV09SRAkJCQk9IDI7ICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVUkwJCQkJCT0gMzsgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR0lOVElNRU9VVAkJCT0gNDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dXUklURVIJCQkJPSA1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFCQVNFTkFNRQkJCT0gNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFTkFNRQkJCT0gNzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDUklQVElPTgkJCQk9IDg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS1BST1RPQ09MCQkJPSA5OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUlROVU1CRVIJCQkJPSAxMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0xFTkFNRQkJCQk9IDExOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFUlZFUk5BTUUJCQkJPSAxMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhTVEFURU1FTlRTCQkJPSAxMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTklUSUFMUE9PTFNJWkUJCQk9IDE0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTlBPT0xTSVpFCQkJCT0gMTU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYUE9PTFNJWkUJCQkJPSAxNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhJRExFVElNRQkJCQk9IDE3OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZQ1lDTEUJCQk9IDE4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERSSVZFUlBST1BFUlRJRVMJCQk9IDE5OyAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTEFTU05BTUUJCQkJPSAyMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUxJTUlURVIJCQkJPSAyMTsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYQURBVEFTT1VSQ0UJCQk9IDIyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0UJCQkJPSAyMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OUE9PTERBVEFTT1VSQ0UJCT0gMjQ7Ci0gICAgICAKLSAgICAvL0dKQ0lOVCAgICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQJPSAyNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OTUVUSE9ECQkJPSAyNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OVEFCTEVOQU1FCQkJPSAyNzsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUUkFOU0FDVElPTklTT0xBVElPTgkJPSAyODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHVUFSQU5URUVJU09MQVRJT05MRVZFTAkJPSAyOTsKLSAgICAgICAgICAgIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRVJOQU1FICAgICAgICAgICAgICAgID0gMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVNTV09SRCAgICAgICAgICAgICAgICA9IDI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVJMICAgICAgICAgICAgICAgICAgICA9IDM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HSU5USU1FT1VUICAgICAgICAgICAgPSA0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR1dSSVRFUiAgICAgICAgICAgICAgICA9IDU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQUJBU0VOQU1FICAgICAgICAgICAgPSA2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0VOQU1FICAgICAgICAgICAgPSA3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFU0NSSVBUSU9OICAgICAgICAgICAgICAgID0gODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLUFJPVE9DT0wgICAgICAgICAgICA9IDk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9SVE5VTUJFUiAgICAgICAgICAgICAgICA9IDEwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPTEVOQU1FICAgICAgICAgICAgICAgID0gMTE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVkVSTkFNRSAgICAgICAgICAgICAgICA9IDEyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFNUQVRFTUVOVFMgICAgICAgICAgICA9IDEzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOSVRJQUxQT09MU0laRSAgICAgICAgICAgID0gMTQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOUE9PTFNJWkUgICAgICAgICAgICAgICAgPSAxNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhQT09MU0laRSAgICAgICAgICAgICAgICA9IDE2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWElETEVUSU1FICAgICAgICAgICAgICAgID0gMTc7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlDWUNMRSAgICAgICAgICAgID0gMTg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRFJJVkVSUFJPUEVSVElFUyAgICAgICAgICAgID0gMTk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xBU1NOQU1FICAgICAgICAgICAgICAgID0gMjA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVMSU1JVEVSICAgICAgICAgICAgICAgID0gMjE7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYQURBVEFTT1VSQ0UgICAgICAgICAgICA9IDIyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0UgICAgICAgICAgICAgICAgPSAyMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OUE9PTERBVEFTT1VSQ0UgICAgICAgID0gMjQ7CisKKyAgICAvL0dKQ0lOVAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQgICAgPSAyNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OTUVUSE9EICAgICAgICAgICAgPSAyNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OVEFCTEVOQU1FICAgICAgICAgICAgPSAyNzsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRSQU5TQUNUSU9OSVNPTEFUSU9OICAgICAgICA9IDI4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdVQVJBTlRFRUlTT0xBVElPTkxFVkVMICAgICAgICA9IDI5OworCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgZGV0YWlscyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgcHJvcGVydHkuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcHJvcGVydHkJUHJvcGVydHkgTmFtZSB0byBiZSBzZXQuCi0gICAgICogQHBhcmFtCXZhbHVlCQlWYWx1ZSBvZiBwcm9wZXJ0eSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIHByb3BlcnR5ICAgIFByb3BlcnR5IE5hbWUgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICB2YWx1ZSAgICAgICAgVmFsdWUgb2YgcHJvcGVydHkgdG8gYmUgc2V0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERldGFpbChpbnQgcHJvcGVydHksIFN0cmluZyB2YWx1ZSkgewotICAgIAlkZXRhaWxzLnB1dChuZXcgSW50ZWdlcihwcm9wZXJ0eSksdmFsdWUpOworICAgICAgICBkZXRhaWxzLnB1dChuZXcgSW50ZWdlcihwcm9wZXJ0eSksdmFsdWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUgb2YgcHJvcGVydHkKICAgICAgKgotICAgICAqIEByZXR1cm4JVmFsdWUgb2YgdGhlIHByb3BlcnR5LgorICAgICAqIEByZXR1cm4gICAgVmFsdWUgb2YgdGhlIHByb3BlcnR5LgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGV0YWlsKGludCBwcm9wZXJ0eSkgewotICAgIAlpZiAoZGV0YWlscy5jb250YWluc0tleShuZXcgSW50ZWdlcihwcm9wZXJ0eSkpKSB7Ci0gICAgCSAgICByZXR1cm4gKFN0cmluZykgZGV0YWlscy5nZXQobmV3IEludGVnZXIocHJvcGVydHkpKTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHJldHVybiBudWxsOwotICAgIAl9ICAgIAkKKyAgICAgICAgaWYgKGRldGFpbHMuY29udGFpbnNLZXkobmV3IEludGVnZXIocHJvcGVydHkpKSkgeworICAgICAgICAgICAgcmV0dXJuIChTdHJpbmcpIGRldGFpbHMuZ2V0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyB3aGV0aGVyIHR3byA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0cwogICAgICAqIGFyZSBlcXVhbCBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb2JqCUluc3RhbmNlIG9mIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG9iaiAgICBJbnN0YW5jZSBvZiA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7Ci0gICAgCWlmIChvYmogaW5zdGFuY2VvZiBEYXRhU291cmNlU3BlYykgewotICAgIAkgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5lcXVhbHMoKChEYXRhU291cmNlU3BlYylvYmopLmRldGFpbHMpOwotICAgIAl9Ci0gICAgCXJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGFTb3VyY2VTcGVjKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmVxdWFscygoKERhdGFTb3VyY2VTcGVjKW9iaikuZGV0YWlscyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgaGFzaENvZGUgb2YgdGhpcyA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybgloYXNoQ29kZSBvZiB0aGlzIG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2hDb2RlIG9mIHRoaXMgb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgCXJldHVybiB0aGlzLmRldGFpbHMuaGFzaENvZGUoKTsKLSAgICB9ICAgIAorICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmhhc2hDb2RlKCk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sCmluZGV4IGVmNDM4ZmMuLjNiNGZhZWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9Ii4iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy9jb21tb24iLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzYsMTMgKzM2LDEzIEBACiAKICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTMiIGRlcGVuZHM9ImNvbXBpbGUiLz4KICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTQiIGRlcGVuZHM9ImNvbXBpbGUiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTMiIGRlcGVuZHM9InBhY2thZ2UiLz4KICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTQiIGRlcGVuZHM9InBhY2thZ2UiLz4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTMiIGRlcGVuZHM9ImNvbXBpbGUxMywgcGFja2FnZTEzIi8+CiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KLSAgICAKKwogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCmluZGV4IGE5NTZkOTcuLjExYWQ3NDYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQpAQCAtMjQsMjQgKzI0LDI0IEBACiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3I7CiAKIC8qKgotICogSG9sZHMgdGhlIGphdmEuc3FsLkNvbm5lY3Rpb24gb2JqZWN0LCB3aGljaCBpcyB0byBiZSAKKyAqIEhvbGRzIHRoZSBqYXZhLnNxbC5Db25uZWN0aW9uIG9iamVjdCwgd2hpY2ggaXMgdG8gYmUKICAqIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbS4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwotcHVibGljIGNsYXNzIENvbm5lY3Rpb25Ib2xkZXIgaW1wbGVtZW50cyBDb25uZWN0aW9ueyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uSG9sZGVyIGltcGxlbWVudHMgQ29ubmVjdGlvbnsKIAogICAgIHByaXZhdGUgQ29ubmVjdGlvbiBjb247Ci0gICAgCisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAotICAgIHByaXZhdGUgYm9vbGVhbiB3cmFwcGVkQWxyZWFkeSA9IGZhbHNlOyAgICAKLSAgICAKKworICAgIHByaXZhdGUgYm9vbGVhbiB3cmFwcGVkQWxyZWFkeSA9IGZhbHNlOworCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzQ2xvc2VkID0gZmFsc2U7Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gdmFsaWQgPSB0cnVlOwotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGFjdGl2ZSA9IGZhbHNlOwogICAgIC8qKgogICAgICAqIFRoZSBhY3RpdmUgZmxhZyBpcyBmYWxzZSB3aGVuIHRoZSBjb25uZWN0aW9uIGhhbmRsZSBpcwpAQCAtNTMsMjE5ICs1MywyMTkgQEAKICAgICAgKiBmdW5jdGlvbiwgdGhlIGFib3ZlIG1ldGhvZCBpbnZvY2F0aW9uIHN1Y2NlZWRzOyBvdGhlcndpc2UKICAgICAgKiBhbiBleGNlcHRpb24gaXMgdGhyb3duLgogICAgICAqLwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0cyBhIENvbm5lY3Rpb24gaG9sZGVyLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb25Ib2xkZXIoQ29ubmVjdGlvbiBjb24sIE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7CiAgICAgICAgIHRoaXMuY29uID0gY29uOwogICAgICAgICB0aGlzLm1jICA9IG1jOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiB0aGlzIGhvbGRlciBvYmplY3QuCi0gICAgICogCi0gICAgICogQHJldHVybglDb25uZWN0aW9uIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgQ29ubmVjdGlvbiBvYmplY3QuCiAgICAgICovCiAgICAgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uKCkgewotICAgIAlyZXR1cm4gY29uOworICAgICAgICByZXR1cm4gY29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCwgdGhlIGNvbm5lY3Rpb24gaXMgd3JhcHBlZCBhbHJlYWR5IG9yIG5vdC4KICAgICAgKgotICAgICAqIEBwYXJhbQl3cmFwRmxhZwkKKyAgICAgKiBAcGFyYW0gICAgd3JhcEZsYWcKICAgICAgKi8KICAgICB2b2lkIHdyYXBwZWQoYm9vbGVhbiB3cmFwRmxhZyl7CiAgICAgICAgIHRoaXMud3JhcHBlZEFscmVhZHkgPSB3cmFwRmxhZzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHdoZXRoZXIgaXQgaXMgd3JhcHBlZCBhbHJlYWR5IG9yIG5vdC4KICAgICAgKgotICAgICAqIEByZXR1cm4Jd3JhcHBlZCBmbGFnLgorICAgICAqIEByZXR1cm4gICAgd3JhcHBlZCBmbGFnLgogICAgICAqLwogICAgIGJvb2xlYW4gaXNXcmFwcGVkKCl7CiAgICAgICAgIHJldHVybiB3cmFwcGVkQWxyZWFkeTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UgcmVzcG9uc2libGUKICAgICAgKiBmb3IgdGhpcyBjb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICovCiAgICAgTWFuYWdlZENvbm5lY3Rpb24gZ2V0TWFuYWdlZENvbm5lY3Rpb24oKSB7CiAgICAgICAgIHJldHVybiBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXBsYWNlIHRoZSBhY3R1YWwgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IHdpdGggdGhlIG9uZQotICAgICAqIHN1cHBsaWVkLiBBbHNvIHJlcGxhY2UgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGxpbmsuICAgICAKKyAgICAgKiBzdXBwbGllZC4gQWxzbyByZXBsYWNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBsaW5rLgogICAgICAqCi0gICAgICogQHBhcmFtCWNvbiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCW1jICA8Y29kZT4gTWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgY29uIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgbWMgIDxjb2RlPiBNYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHZvaWQgYXNzb2NpYXRlQ29ubmVjdGlvbihDb25uZWN0aW9uIGNvbiwgTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKLSAgICAJdGhpcy5tYyA9IG1jOwotICAgIAl0aGlzLmNvbiA9IGNvbjsKKyAgICAgICAgdGhpcy5tYyA9IG1jOworICAgICAgICB0aGlzLmNvbiA9IGNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDbGVhcnMgYWxsIHdhcm5pbmdzIHJlcG9ydGVkIGZvciB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9uICBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNsZWFyV2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueyAgICAKLQljaGVja1ZhbGlkaXR5KCk7CisgICAgcHVibGljIHZvaWQgY2xlYXJXYXJuaW5ncygpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBjb24uY2xlYXJXYXJuaW5ncygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENsb3NlcyB0aGUgbG9naWNhbCBjb25uZWN0aW9uLiAgICAKKyAgICAgKiBDbG9zZXMgdGhlIGxvZ2ljYWwgY29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgICAgaXNDbG9zZWQgPSB0cnVlOwotICAgICAgICBtYy5jb25uZWN0aW9uQ2xvc2VkKG51bGwsIHRoaXMpOyAgICAgICAgCisgICAgICAgIG1jLmNvbm5lY3Rpb25DbG9zZWQobnVsbCwgdGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogSW52YWxpZGF0ZXMgdGhpcyBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgaW52YWxpZGF0ZSgpIHsKLSAgICAJdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDbG9zZXMgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaW52b2x2ZWQgaW4gdGhpcy4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCi0gICAgdm9pZCBhY3R1YWxDbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257ICAgIAorICAgIHZvaWQgYWN0dWFsQ2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgICBjb24uY2xvc2UoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21taXQgdGhlIGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLmNvbW1pdCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLmNvbW1pdCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzdGF0ZW1lbnQgZnJvbSB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzdGF0ZW1lbnQgZnJvbSB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LiAgICAgCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoaW50IHJlc3VsdFNldFR5cGUsIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgIAotICAgICAqIEByZXR1cm4JPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAgICAgCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0SG9sZGFiaWxpdHkgICAgUmVzdWx0U2V0IEhvbGRhYmlsaXR5LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwotICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KGludCByZXN1bHRTZXRUeXBlLCBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksIAotICAgIAkJCQkgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkgICAgIAorICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KGludCByZXN1bHRTZXRUeXBlLCBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQocmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCi0gICAgICAgIAkJCSAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKICAgICB9Ci0gCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgYXV0by1jb21taXQgbW9kZSBmb3IgdGhlIHVuZGVybHlpbmcgPGNvZGU+IENvbm5lY3Rpb248L2NvZGU+LgogICAgICAqCiAgICAgICogQHJldHVybiBUaGUgY3VycmVudCBzdGF0ZSBvZiBjb25uZWN0aW9uJ3MgYXV0by1jb21taXQgbW9kZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGdldEF1dG9Db21taXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldEF1dG9Db21taXQoKTsKLSAgICB9ICAgCi0gCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldEF1dG9Db21taXQoKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHVuZGVybHlpbmcgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0J3MgY2F0YWxvZyBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglDYXRhbG9nIE5hbWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgQ2F0YWxvZyBOYW1lLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENhdGFsb2coKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5nZXRDYXRhbG9nKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGhvbGRhYmlsaXR5IG9mIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gb2JqZWN0cyBjcmVhdGVkCiAgICAgICogdXNpbmcgdGhpcyBjb25uZWN0aW9uIG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaG9sZGFiaWxpdHkgdmFsdWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgaG9sZGFiaWxpdHkgdmFsdWUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0SG9sZGFiaWxpdHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4JY29uLmdldEhvbGRhYmlsaXR5KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gICAgY29uLmdldEhvbGRhYmlsaXR5KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT5EYXRhYmFzZU1ldGFEYXRhPC9jb2RlPm9iamVjdCBmcm9tIHRoZSB1bmRlcmx5aW5nCiAgICAgICogPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIDxjb2RlPkRhdGFiYXNlTWV0YURhdGE8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhYmFzZU1ldGFEYXRhIGdldE1ldGFEYXRhKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRNZXRhRGF0YSgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRNZXRhRGF0YSgpOwogICAgIH0KLSAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCdzIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgogICAgICAqCiAgICAgICogQHJldHVybiBUcmFuc2FjdGlvbiBsZXZlbAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIGludCBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggCisgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhc3NvY2lhdGVkIHdpdGgKICAgICAgKiA8Y29kZT4gQ29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybglUeXBlTWFwIHNldCBpbiB0aGlzIG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICBUeXBlTWFwIHNldCBpbiB0aGlzIG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIE1hcCBnZXRUeXBlTWFwKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRUeXBlTWFwKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldFR5cGVNYXAoKTsKICAgICB9CiAKIC8qCkBAIC0yNzksMTg0ICsyNzksMTg0IEBACiAgICAgICogPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiBGaXJzdCA8Y29kZT4gU1FMV2FybmluZzwvY29kZT4gT2JqZWN0IG9yIG51bGwuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU1FMV2FybmluZyBnZXRXYXJuaW5ncygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0V2FybmluZ3MoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0V2FybmluZ3MoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgd2hldGhlciB1bmRlcmx5aW5nIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyBjbG9zZWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIGNsb3NlZCwgZmFsc2UKLSAgICAgKiAJCWlmIGl0IGlzIGNsb3NlZC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyBjbG9zZWQsIGZhbHNlCisgICAgICogICAgICAgICBpZiBpdCBpcyBjbG9zZWQuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzQ2xvc2VkKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXJldHVybiBpc0Nsb3NlZDsKKyAgICAgICAgcmV0dXJuIGlzQ2xvc2VkOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB3aGV0aGVyIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIHJlYWQtb25seS4KICAgICAgKgotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IGlzIHJlYWQtb25seSwgZmFsc2Ugb3RoZXItd2lzZQotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBpcyByZWFkLW9ubHksIGZhbHNlIG90aGVyLXdpc2UKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNSZWFkT25seSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uaXNSZWFkT25seSgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5pc1JlYWRPbmx5KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29udmVydHMgdGhlIGdpdmVuIFNRTCBzdGF0ZW1lbnQgaW50byB0aGUgc3lzdGVtJ3MgbmF0aXZlIFNRTCBncmFtbWVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgc3RhdGVtZW50ICwgdG8gYmUgY29udmVydGVkLgotICAgICAqIEByZXR1cm4JQ29udmVydGVkIFNRTCBzdHJpbmcuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIHN0YXRlbWVudCAsIHRvIGJlIGNvbnZlcnRlZC4KKyAgICAgKiBAcmV0dXJuICAgIENvbnZlcnRlZCBTUUwgc3RyaW5nLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIG5hdGl2ZVNRTChTdHJpbmcgc3FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLm5hdGl2ZVNRTChzcWwpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5uYXRpdmVTUUwoc3FsKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCiAgICAgICogc3RvcmVkIHByb2NlZHVyZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKICAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQotICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQlpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCQotICAgIAlyZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCi0gICAgICogc3RvcmVkIHByb2NlZHVyZXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRIb2xkYWJpbGl0eQlSZXN1bHRTZXQgSG9sZGFiaWxpdHkuICAgICAgICAgIAotICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCi0gICAgCQkJICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwpOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQorICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQorICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0SG9sZGFiaWxpdHkgICAgUmVzdWx0U2V0IEhvbGRhYmlsaXR5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKICAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAogICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwpOwogICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCWF1dG9HZW5lcmF0ZWRLZXlzIGEgZmxhZyBpbmRpY2F0aW5nIEF1dG9HZW5lcmF0ZWRLZXlzIG5lZWQgdG8gYmUgcmV0dXJuZWQuCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IGF1dG9HZW5lcmF0ZWRLZXlzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGF1dG9HZW5lcmF0ZWRLZXlzKTsKLSAgICB9ICAgIAotICAgICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQljb2x1bW5JbmRleGVzIGFuIGFycmF5IG9mIGNvbHVtbiBpbmRleGVzIGluZGljYXRpbmcgdGhlIGNvbHVtbnMgdGhhdCBzaG91bGQgYmUKLSAgICAgKgkJcmV0dXJuZWQgZnJvbSB0aGUgaW5zZXJ0ZWQgcm93IG9yIHJvd3MuCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50W10gY29sdW1uSW5kZXhlcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5JbmRleGVzKTsKLSAgICB9ICAgICAgICAgIAotIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgICAgICAKLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCSAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCi0gICAgCQkJCSAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKLSAgICB9ICAgICAgICAgICAKIAogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZwogICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCWNvbHVtbk5hbWVzIE5hbWUgb2YgYm91bmQgY29sdW1ucy4KKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgYXV0b0dlbmVyYXRlZEtleXMgYSBmbGFnIGluZGljYXRpbmcgQXV0b0dlbmVyYXRlZEtleXMgbmVlZCB0byBiZSByZXR1cm5lZC4KICAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IGF1dG9HZW5lcmF0ZWRLZXlzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsYXV0b0dlbmVyYXRlZEtleXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBjb2x1bW5JbmRleGVzIGFuIGFycmF5IG9mIGNvbHVtbiBpbmRleGVzIGluZGljYXRpbmcgdGhlIGNvbHVtbnMgdGhhdCBzaG91bGQgYmUKKyAgICAgKiAgICAgICAgcmV0dXJuZWQgZnJvbSB0aGUgaW5zZXJ0ZWQgcm93IG9yIHJvd3MuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50W10gY29sdW1uSW5kZXhlcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbkluZGV4ZXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRIb2xkYWJpbGl0eSAgICBSZXN1bHRTZXQgSG9sZGFiaWxpdHkuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGNvbHVtbk5hbWVzIE5hbWUgb2YgYm91bmQgY29sdW1ucy4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBTdHJpbmdbXSBjb2x1bW5OYW1lcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5OYW1lcyk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbk5hbWVzKTsKICAgICB9CiAKICAgICBwdWJsaWMgQ2xvYiBjcmVhdGVDbG9iKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CkBAIC01MDYsMTYyICs1MDYsMTYyIEBACiAgICAgLyoqCiAgICAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4gPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QgZnJvbSB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlzYXZlcG9pbnQJPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHNhdmVwb2ludCAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByZWxlYXNlU2F2ZXBvaW50KFNhdmVwb2ludCBzYXZlcG9pbnQpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yZWxlYXNlU2F2ZXBvaW50KHNhdmVwb2ludCk7Ci0gICAgfSAKLSAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5yZWxlYXNlU2F2ZXBvaW50KHNhdmVwb2ludCk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUm9sbHMgYmFjayB0aGUgY2hhbmdlcyBtYWRlIGluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLyAgICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJvbGxiYWNrKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucm9sbGJhY2soKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSb2xscyBiYWNrIHRoZSBjaGFuZ2VzIG1hZGUgYWZ0ZXIgdGhlIHNhdmVwb2ludC4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjayhTYXZlcG9pbnQgc2F2ZXBvaW50KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucm9sbGJhY2soc2F2ZXBvaW50KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5yb2xsYmFjayhzYXZlcG9pbnQpOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBhdXRvLWNvbW1taXQgbW9kZSBvZiB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCWF1dG9Db21taXQgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBhdXRvLWNvbW1pdCBtb2RlLiAgICAgCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBhdXRvQ29tbWl0IGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB0aGUgYXV0by1jb21taXQgbW9kZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0QXV0b0NvbW1pdChib29sZWFuIGF1dG9Db21taXQpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRBdXRvQ29tbWl0KGF1dG9Db21taXQpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldEF1dG9Db21taXQoYXV0b0NvbW1pdCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgY2F0YWxvZyBuYW1lIHRvIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QKICAgICAgKgotICAgICAqIEBwYXJhbQljYXRhbG9nCUNhdGFsb2cgbmFtZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGNhdGFsb2cgICAgQ2F0YWxvZyBuYW1lLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDYXRhbG9nKFN0cmluZyBjYXRhbG9nKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0Q2F0YWxvZyhjYXRhbG9nKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRDYXRhbG9nKGNhdGFsb2cpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFNldHMgdGhlIGhvbGRhYmlsaXR5IG9mIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gb2JqZWN0cyBjcmVhdGVkIAorICAgICAqIFNldHMgdGhlIGhvbGRhYmlsaXR5IG9mIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gb2JqZWN0cyBjcmVhdGVkCiAgICAgICogdXNpbmcgdGhpcyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JaG9sZGFiaWxpdHkJQSA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IGhvbGRhYmlsaXR5IGNvbnN0YW50Ci0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBob2xkYWJpbGl0eSAgICBBIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gaG9sZGFiaWxpdHkgY29uc3RhbnQKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0SG9sZGFiaWxpdHkoaW50IGhvbGRhYmlsaXR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgICAJY29uLnNldEhvbGRhYmlsaXR5KGhvbGRhYmlsaXR5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgICBjb24uc2V0SG9sZGFiaWxpdHkoaG9sZGFiaWxpdHkpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFB1dHMgdGhlIGNvbm5lY3Rpb24gaW4gcmVhZC1vbmx5IG1vZGUgYXMgYSBoaW50IHRvIHRoZSBkcml2ZXIgdG8gCisgICAgICogUHV0cyB0aGUgY29ubmVjdGlvbiBpbiByZWFkLW9ubHkgbW9kZSBhcyBhIGhpbnQgdG8gdGhlIGRyaXZlciB0bwogICAgICAqIHBlcmZvcm0gZGF0YWJhc2Ugb3B0aW1pemF0aW9ucy4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZWFkT25seSAgdHJ1ZSBlbmFibGVzIHJlYWQtb25seSBtb2RlLCBmYWxzZSBkaXNhYmxlcyBpdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHJlYWRPbmx5ICB0cnVlIGVuYWJsZXMgcmVhZC1vbmx5IG1vZGUsIGZhbHNlIGRpc2FibGVzIGl0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSZWFkT25seShib29sZWFuIHJlYWRPbmx5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0UmVhZE9ubHkocmVhZE9ubHkpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldFJlYWRPbmx5KHJlYWRPbmx5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGFuZCB1bm5hbWVkIHNhdmVwb2ludCBhbmQgcmV0dXJucyBhbiBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGF0LgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgogICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU2F2ZXBvaW50IHNldFNhdmVwb2ludCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uc2V0U2F2ZXBvaW50KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnNldFNhdmVwb2ludCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzYXZlcG9pbnQgd2l0aCB0aGUgbmFtZSBhbmQgcmV0dXJucyBhbiBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGF0LgogICAgICAqCi0gICAgICogQHBhcmFtCW5hbWUJTmFtZSBvZiB0aGUgc2F2ZXBvaW50LgotICAgICAqIEByZXR1cm4JPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBuYW1lICAgIE5hbWUgb2YgdGhlIHNhdmVwb2ludC4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU2F2ZXBvaW50IHNldFNhdmVwb2ludChTdHJpbmcgbmFtZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQobmFtZSk7Ci0gICAgfSAgICAKLSAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uc2V0U2F2ZXBvaW50KG5hbWUpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlsZXZlbCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBsZXZlbCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKGludCBsZXZlbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKGxldmVsKTsKLSAgICB9ICAgICAKLSAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbihsZXZlbCk7CisgICAgfQorCiAgICAgLyoqCi0gICAgICogSW5zdGFsbHMgdGhlIGdpdmVuIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzIHRoZSB0eW9lIG1hcCBmb3IgdGhpcyAKKyAgICAgKiBJbnN0YWxscyB0aGUgZ2l2ZW4gPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXMgdGhlIHR5b2UgbWFwIGZvciB0aGlzCiAgICAgICogPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWFwCTxjb2RlPk1hcDwvY29kZT4gYSBNYXAgb2JqZWN0IHRvIGluc3RhbGwuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBtYXAgICAgPGNvZGU+TWFwPC9jb2RlPiBhIE1hcCBvYmplY3QgdG8gaW5zdGFsbC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VHlwZU1hcChNYXAgbWFwKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7Ci0gICAgCWNvbi5zZXRUeXBlTWFwKG1hcCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0VHlwZU1hcChtYXApOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TmV0d29ya1RpbWVvdXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0TmV0d29ya1RpbWVvdXQoRXhlY3V0b3IgZXhlY3V0b3IsIGludCBtaWxsaXNlY29uZHMpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhYm9ydChFeGVjdXRvciBleGVjdXRvcikgIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2NoZW1hKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0U2NoZW1hKFN0cmluZyBzY2hlbWEpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIHRoZSB2YWxpZGl0eSBvZiB0aGlzIG9iamVjdAogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBjaGVja1ZhbGlkaXR5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCWlmIChpc0Nsb3NlZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkNvbm5lY3Rpb24gY2xvc2VkIik7Ci0gICAgCWlmICghdmFsaWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJJbnZhbGlkIENvbm5lY3Rpb24iKTsKLSAgICAJaWYoYWN0aXZlID09IGZhbHNlKSB7Ci0gICAgCSAgICBtYy5jaGVja0lmQWN0aXZlKHRoaXMpOwotICAgIAl9CisgICAgICAgIGlmIChpc0Nsb3NlZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkNvbm5lY3Rpb24gY2xvc2VkIik7CisgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJJbnZhbGlkIENvbm5lY3Rpb24iKTsKKyAgICAgICAgaWYoYWN0aXZlID09IGZhbHNlKSB7CisgICAgICAgICAgICBtYy5jaGVja0lmQWN0aXZlKHRoaXMpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgYWN0aXZlIGZsYWcgdG8gdHJ1ZQogICAgICAqCi0gICAgICogQHBhcmFtCWFjdHYJYm9vbGVhbgorICAgICAqIEBwYXJhbSAgICBhY3R2ICAgIGJvb2xlYW4KICAgICAgKi8KICAgICB2b2lkIHNldEFjdGl2ZShib29sZWFuIGFjdHYpIHsKICAgICAgICAgYWN0aXZlID0gYWN0djsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCBhYzdlNzQ4Li5mMDY3NWE0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0zMywxOSArMzMsMTkgQEAKICAqIFRoaXMgY2xhc3MgaXMgZXh0ZW5kZWQgYnkgdGhlIERhdGFTb3VyY2Ugc3BlY2lmaWMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZhY3RvcmllcwogICogYW5kIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGZvciB0aGUgPGNvZGU+RHJpdmVyTWFuYWdlcjwvY29kZT4uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIAotcHVibGljIGFic3RyYWN0IGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSwgCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LAogICAgIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKLSAgICAKKwogICAgIHByb3RlY3RlZCBEYXRhU291cmNlU3BlYyBzcGVjID0gbmV3IERhdGFTb3VyY2VTcGVjKCk7CiAgICAgcHJvdGVjdGVkIHRyYW5zaWVudCBEYXRhU291cmNlT2JqZWN0QnVpbGRlciBkc09iakJ1aWxkZXI7Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgamF2YS5pby5QcmludFdyaXRlciBsb2dXcml0ZXIgPSBudWxsOwogICAgIHByb3RlY3RlZCBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgcmEgPSBudWxsOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTU0LDggKzU0LDggQEAKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgQ29ubmVjdGlvbiBGYWN0b3J5IGluc3RhbmNlLiBUaGUgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uCiAgICAgICogb2YgdGhlIHJlc291cmNlIGFkYXB0ZXIgaXMgdXNlZCBoZXJlLgotICAgICAqIAotICAgICAqIEByZXR1cm4JR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGNyZWF0ZUNvbm5lY3Rpb25GYWN0b3J5KCkgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtNjMsMTYgKzYzLDE2IEBACiAgICAgICAgIH0KICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UgY2YgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UoCiAgICAgICAgICAgICAoamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KXRoaXMsIG51bGwpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIENvbm5lY3Rpb24gRmFjdG9yeSBpbnN0YW5jZS4gVGhlIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbgogICAgICAqIG9mIHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIgaXMgdXNlZCBoZXJlLgotICAgICAqIAotICAgICAqIEBwYXJhbQljeE1hbmFnZXIJPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHJldHVybglHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgorICAgICAqCisgICAgICogQHBhcmFtICAgIGN4TWFuYWdlciAgICA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcmV0dXJuICAgIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjcmVhdGVDb25uZWN0aW9uRmFjdG9yeShqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlciBjeE1hbmFnZXIpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTgwLDU1ICs4MCw1NSBAQAogICAgICAgICB9CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIGNmID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlKAogICAgICAgICAgICAgKGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSl0aGlzLCBjeE1hbmFnZXIpOwotICAgICAgICByZXR1cm4gY2Y7IAorICAgICAgICByZXR1cm4gY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIEVJUyByZXNvdXJjZQogICAgICAqIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCi0gICAgICogICAgICAgCSAgICAgICAgICAgICAJYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+Ci0gICAgICogICAgICAgCSAgICAgICAgICAgICAJb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQotICAgICAqICAgICAgIAkJCQljcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0Ci0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdCAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwKICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIC8qKgotICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0byAKKyAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8KICAgICAgKiBhbm90aGVyIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCW90aGVyCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCi0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQotICAgICAqCQlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBvdGhlciAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZQorICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQorICAgICAqICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgamF2YS5pby5QcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB7CiAgICAgICAgIHJldHVybiBsb2dXcml0ZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+c2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciBnZXRSZXNvdXJjZUFkYXB0ZXIoKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xMzYsMTEgKzEzNiwxMSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByYTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBoYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTQ4LDQxICsxNDgsNDEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc3BlYy5oYXNoQ29kZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgYSBtYXRjaGVkIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmcm9tIHRoZSBjYW5kaWRhdGUgCisgICAgICogUmV0dXJucyBhIG1hdGNoZWQgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZyb20gdGhlIGNhbmRpZGF0ZQogICAgICAqIHNldCBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0cy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29ubmVjdGlvblNldAk8Y29kZT5TZXQ8L2NvZGU+IG9mICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKgkJCQlvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCXN1YmplY3QJIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICoJCQlmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICoJCQkJZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCBpcyB0aGUgYmVzdCBtYXRjaCBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgYWNjZXNzaW5nIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPgotICAgICAqCQkJCQlwYXJhbWV0ZXIgb3IgdGhlIDxjb2RlPlNldDwvY29kZT4gb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICoJCQkJCW9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb25uZWN0aW9uU2V0ICAgIDxjb2RlPlNldDwvY29kZT4gb2YgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgIG9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICAgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiAgICAgICAgICAgIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZworICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiAgICAgICAgICAgICAgICBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IGlzIHRoZSBiZXN0IG1hdGNoIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBhY2Nlc3NpbmcgdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBvciB0aGUgPGNvZGU+U2V0PC9jb2RlPiBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgogICAgICAqLwotICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhqYXZhLnV0aWwuU2V0IGNvbm5lY3Rpb25TZXQsIAorICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhqYXZhLnV0aWwuU2V0IGNvbm5lY3Rpb25TZXQsCiAgICAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdCBzdWJqZWN0LCBDb25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbm5lY3Rpb25TZXQgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcywgc3ViamVjdCwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgIAorCiAgICAgICAgIGphdmEudXRpbC5JdGVyYXRvciBpdGVyID0gY29ubmVjdGlvblNldC5pdGVyYXRvcigpOwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBudWxsOwogICAgICAgICB3aGlsZShpdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtYyA9IChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24pIGl0ZXIubmV4dCgpOwogICAgICAgICAgICAgfSBjYXRjaChqYXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBuc2VlKSB7Ci0JICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pdGVyIik7CisgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pdGVyIik7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKG5zZWUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmKHBjID09IG51bGwgJiYgdGhpcy5lcXVhbHMobWMuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkpKSB7CkBAIC0xOTEsNyArMTkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZChtYyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYzsKICAgICAgICAgICAgICAgICB9IGNhdGNoKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7Ci0JICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfcmUiLCByZSk7CisgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfcmUiLCByZSk7CiAgICAgICAgICAgICAgICAgICAgIG1jLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKHJlLCBudWxsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYoU2VjdXJpdHlVdGlscy5pc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKHBjLCBtYy5nZXRQYXNzd29yZENyZWRlbnRpYWwoKSkgPT0gdHJ1ZSkgewpAQCAtMjAwLDQ1ICsyMDAsNDUgQEAKICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZChtYyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYzsKICAgICAgICAgICAgICAgICB9IGNhdGNoKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7Ci0JICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5yZSIpOworICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMucmUiKTsKICAgICAgICAgICAgICAgICAgICAgbWMuY29ubmVjdGlvbkVycm9yT2NjdXJyZWQocmUsIG51bGwpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvL0dKQ0lOVAogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyB0byBiZSB2YWxpZGF0ZWQgb3Igbm90CiAgICAgICogYW5kIHZhbGlkYXRlcyBpdCBvciByZXR1cm5zLgotICAgICAqIAotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAJCWlmIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIKICAgICAgKi8KICAgICB2b2lkIGlzVmFsaWQoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogCiAgICAgICAgIGlmKG1jLmlzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpIHsKLQkgICAgcmV0dXJuOworICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAKLSAgICAgICAgYm9vbGVhbiBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID0gCisKKyAgICAgICAgYm9vbGVhbiBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID0KICAgICAgICAgICAgIChuZXcgQm9vbGVhbihzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKS50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7CiAgICAgICAgIGlmKCBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID09IGZhbHNlIHx8IG1jID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIG1jLmNoZWNrSWZWYWxpZCgpOwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGFib3ZlIGNhbGwgY2hlY2tzIGlmIHRoZSBhY3R1YWwgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAgICAgKiBpcyB1c2FibGUgb3Igbm90LgogICAgICAgICAgKi8KICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKHZhbGlkYXRpb25NZXRob2QuZXF1YWxzKCJhdXRvLWNvbW1pdCIpID09IHRydWUpIHsKICAgICAgICAgICAgIGlzVmFsaWRCeUF1dG9Db21taXQoY29uKTsKICAgICAgICAgfSBlbHNlIGlmKHZhbGlkYXRpb25NZXRob2QuZXF1YWxzSWdub3JlQ2FzZSgibWV0YS1kYXRhIikgPT0gdHJ1ZSkgewpAQCAtMjQ5LDI4ICsyNDksMjggQEAKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIiKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IGNoZWNraW5nIGl0cyBhdXRvIGNvbW1pdCBwcm9wZXJ0eS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5QXV0b0NvbW1pdChqYXZhLnNxbC5Db25uZWN0aW9uIGNvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgLy8gTm90aWNlIHRoYXQgdXNpbmcgc29tZXRoaW5nIGxpa2UgCisgICAgICAgICAgIC8vIE5vdGljZSB0aGF0IHVzaW5nIHNvbWV0aGluZyBsaWtlCiAgICAgICAgICAgIC8vIGRiQ29uLnNldEF1dG9Db21taXQoZGJDb24uZ2V0QXV0b0NvbW1pdCgpKSB3aWxsIGNhdXNlIHByb2JsZW1zIHdpdGgKICAgICAgICAgICAgLy8gc29tZSBkcml2ZXJzIGxpa2Ugc3liYXNlCi0gICAgICAgICAgIC8vIFdlIGRvIG5vdCB2YWxpZGF0ZSBjb25uZWN0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IGVubGlzdGVkIAotCSAgIC8vaW4gYSB0cmFuc2FjdGlvbiAKLQkgICAvLyBXZSBjeWNsZSBhdXRvY29tbWl0IHRvIHRydWUgYW5kIGZhbHNlIHRvIGJ5LXBhc3MgZHJpdmVycyB0aGF0IAotCSAgIC8vIG1pZ2h0IGNhY2hlIHRoZSBjYWxsIHRvIHNldCBhdXRvY29taXR0CisgICAgICAgICAgIC8vIFdlIGRvIG5vdCB2YWxpZGF0ZSBjb25uZWN0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IGVubGlzdGVkCisgICAgICAgLy9pbiBhIHRyYW5zYWN0aW9uCisgICAgICAgLy8gV2UgY3ljbGUgYXV0b2NvbW1pdCB0byB0cnVlIGFuZCBmYWxzZSB0byBieS1wYXNzIGRyaXZlcnMgdGhhdAorICAgICAgIC8vIG1pZ2h0IGNhY2hlIHRoZSBjYWxsIHRvIHNldCBhdXRvY29taXR0CiAgICAgICAgICAgIC8vIEFsc28gbm90aWNlIHRoYXQgc29tZSBYQSBkYXRhIHNvdXJjZXMgd2lsbCB0aHJvdyBhbmQgZXhjZXB0aW9uIGlmCiAgICAgICAgICAgIC8vIHlvdSB0cnkgdG8gY2FsbCBzZXRBdXRvQ29tbWl0LCBmb3IgdGhlbSB0aGlzIG1ldGhvZCBpcyBub3QgcmVjb21tZW5kZWQKIApAQCAtMjgxLDkwICsyODEsOTAgQEAKICAgICAgICAgICAgICAgICBjb24ucm9sbGJhY2soKTsgLy8gcHJldmVudHMgdW5jb21wbGV0ZWQgdHJhbnNhY3Rpb24gZXhjZXB0aW9ucwogICAgICAgICAgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KHRydWUpOwogICAgICAgICAgICB9Ci0gICAgICAgIAotCSAgIGNvbi5zZXRBdXRvQ29tbWl0KGFjKTsKKworICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGFjKTsKIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2F1dG9jb21taXQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYXV0b2NvbW1pdCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IGNoZWNraW5nIGl0cyBtZXRhIGRhdGEuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeU1ldGFEYXRhKGphdmEuc3FsLkNvbm5lY3Rpb24gY29uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgamF2YS5zcWwuRGF0YWJhc2VNZXRhRGF0YSBkbWQgPSBjb24uZ2V0TWV0YURhdGEoKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgImdldHRpbmcgdGhlIG1ldGEgZGF0YSBmYWlsZWQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBxdWVyeWluZyBhIHRhYmxlLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHBhcmFtCXRhYmxlTmFtZQl0YWJsZSB3aGljaCBzaG91bGQgYmUgcXVlcmllZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEBwYXJhbSAgICB0YWJsZU5hbWUgICAgdGFibGUgd2hpY2ggc2hvdWxkIGJlIHF1ZXJpZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeVRhYmxlUXVlcnkoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24sIAorICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeVRhYmxlUXVlcnkoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24sCiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBqYXZhLnNxbC5TdGF0ZW1lbnQgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIGphdmEuc3FsLlJlc3VsdFNldCBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NICIgKyB0YWJsZU5hbWUpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2V4ZWN1dGUiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZXhlY3V0ZSIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInF1ZXJ5aW5nIHRoZSB0YWJsZSAiICsgdGFibGVOYW1lICsgIiBmYWlsZWQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBpc29sYXRpb24gbGV2ZWwgc3BlY2lmaWVkIGluIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CiAgICAgICogZm9yIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gcGFzc2VkLgogICAgICAqCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCi0gICAgICoJCQkJCW9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCisgICAgICogICAgICAgICAgICAgICAgICAgIG9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgc2V0SXNvbGF0aW9uKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJCi0gICAgCWphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgIAlpZihjb24gPT0gbnVsbCkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCQotICAgIAlTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKLSAgICAJaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKLSAgICAJICAgIHRyeSB7Ci0gICAgCSAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOwotICAgIAkgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gY291bGQgIgotICAgIAkgICAgICAgICAgICArICJub3QgYmUgc2V0OiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgfQotICAgIAl9CisKKyAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7CisgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKKyAgICAgICAgaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOworICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gY291bGQgIgorICAgICAgICAgICAgICAgICAgICArICJub3QgYmUgc2V0OiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVzZXRzIHRoZSBpc29sYXRpb24gbGV2ZWwgZm9yIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gcGFzc2VkLgogICAgICAqIElmIHRoZSB0cmFuc2FjdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmUKQEAgLTM3MywzODIgKzM3MywzODIgQEAKICAgICAgKiBpc29sYXRpb24gbGV2ZWwgZnJvbSB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQuIEVsc2UsCiAgICAgICogaXQgc2V0cyBpdCB0byB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIHBhc3NlZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAcGFyYW0JdHJhbklzb2wJaW50Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKLSAgICAgKgkJCQkJb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRyYW5Jc29sICAgIGludAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCisgICAgICogICAgICAgICAgICAgICAgICAgIG9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCiAgICAgICovCiAgICAgdm9pZCByZXNldElzb2xhdGlvbihjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMsIGludCB0cmFuSXNvbCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJCi0gICAgCWphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgIAlpZihjb24gPT0gbnVsbCkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCQotICAgIAlTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKLSAgICAJaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwotICAgIAkgICAgCi0gICAgCSAgICBpZihndWFyYW50ZWVJc29sYXRpb25MZXZlbCAhPSBudWxsICYmIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgICAgICBib29sZWFuIGd1YXJhbnRlZSA9IChuZXcgQm9vbGVhbihndWFyYW50ZWVJc29sYXRpb25MZXZlbC50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgCSAgICAgICAgCi0gICAgCSAgICAgICAgaWYoZ3VhcmFudGVlKSB7Ci0gICAgCSAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7Ci0gICAgCSAgICAgICAgICAgIHRyeSB7Ci0gICAgCSAgICAgICAgICAgICAgICBpZih0cmFuSXNvbGF0aW9uSW50ICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOwotICAgIAkgICAgICAgICAgICAgICAgfQotICAgIAkgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgotICAgIAkgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgfSBlbHNlIHsKLSAgICAJICAgICAgICAgICAgdHJ5IHsKLSAgICAJICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sKTsKLSAgICAJICAgICAgICAgICAgICAgIH0KLSAgICAJICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKLSAgICAJICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgICAgICAgICAgfQotICAgIAkgICAgICAgIH0KLSAgICAJICAgIH0KLSAgICAJfQorCisgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOworICAgICAgICBpZihjb24gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIFN0cmluZyBndWFyYW50ZWVJc29sYXRpb25MZXZlbCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKKworICAgICAgICAgICAgaWYoZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgIT0gbnVsbCAmJiBndWFyYW50ZWVJc29sYXRpb25MZXZlbC5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBndWFyYW50ZWUgPSAobmV3IEJvb2xlYW4oZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOworCisgICAgICAgICAgICAgICAgaWYoZ3VhcmFudGVlKSB7CisgICAgICAgICAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0cmFuSXNvbGF0aW9uSW50ICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CisgICAgICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGludGVnZXIgZXF1aXZhbGVudCBvZiB0aGUgc3RyaW5nIHNwZWNpZnlpbmcKICAgICAgKiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXRyYW5Jc29sYXRpb24Jc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbiBsZXZlbAotICAgICAqIEByZXR1cm4JdHJhbklzb2xhdGlvbkludAl0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gY29uc3RhbnQKLSAgICAgKgkJCQkJZm9yIHRoZSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uLgorICAgICAqIEBwYXJhbSAgICB0cmFuSXNvbGF0aW9uICAgIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5Jc29sYXRpb25JbnQgICAgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGNvbnN0YW50CisgICAgICogICAgICAgICAgICAgICAgICAgIGZvciB0aGUgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbi4KICAgICAgKi8KICAgICBwcml2YXRlIGludCBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludChTdHJpbmcgdHJhbklzb2xhdGlvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLXVuY29tbWl0dGVkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfVU5DT01NSVRURUQ7Ci0gICAgCX0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtY29tbWl0dGVkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfQ09NTUlUVEVEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZXBlYXRhYmxlLXJlYWQiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVQRUFUQUJMRV9SRUFEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJzZXJpYWxpemFibGUiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fU0VSSUFMSVpBQkxFOwotICAgIAl9IGVsc2UgewotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJJbnZhbGlkIHRyYW5zYWN0aW9uIGlzb2xhdGlvbjsgdGhlIHRyYW5zYWN0aW9uICIKLSAgICAJICAgICAgICArICJpc29sYXRpb24gbGV2ZWwgY2FuIGJlIGVtcHR5IG9yIGFueSBvZiB0aGUgZm9sbG93aW5nOiAiCi0gICAgCSAgICAgICAgICAgICsgInJlYWQtdW5jb21taXR0ZWQsIHJlYWQtY29tbWl0dGVkLCByZXBlYXRhYmxlLXJlYWQsIHNlcmlhbGl6YWJsZSIpOwotICAgIAl9CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC11bmNvbW1pdHRlZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX1VOQ09NTUlUVEVEOworICAgICAgICB9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLWNvbW1pdHRlZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX0NPTU1JVFRFRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVwZWF0YWJsZS1yZWFkIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFUEVBVEFCTEVfUkVBRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgic2VyaWFsaXphYmxlIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1NFUklBTElaQUJMRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiSW52YWxpZCB0cmFuc2FjdGlvbiBpc29sYXRpb247IHRoZSB0cmFuc2FjdGlvbiAiCisgICAgICAgICAgICAgICAgKyAiaXNvbGF0aW9uIGxldmVsIGNhbiBiZSBlbXB0eSBvciBhbnkgb2YgdGhlIGZvbGxvd2luZzogIgorICAgICAgICAgICAgICAgICAgICArICJyZWFkLXVuY29tbWl0dGVkLCByZWFkLWNvbW1pdHRlZCwgcmVwZWF0YWJsZS1yZWFkLCBzZXJpYWxpemFibGUiKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCW91dAk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgb3V0ICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihqYXZhLmlvLlByaW50V3JpdGVyIG91dCkgewogICAgICAgICBsb2dXcml0ZXIgPSBvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBhc3NvY2lhdGVkIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gSmF2YUJlYW4uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmEJPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPmdldFJlc291cmNlQWRhcHRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcmEgICAgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlc291cmNlQWRhcHRlcihqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgcmEpIHsKLSAgICAgICAgdGhpcy5yYSA9IHJhOyAgIAorICAgICAgICB0aGlzLnJhID0gcmE7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHVzZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFVzZXIoU3RyaW5nIHVzZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUsIHVzZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHJldHVybgl1c2VyCisgICAgICogQHJldHVybiAgICB1c2VyCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR1c2VyKFN0cmluZyB1c2VyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FLCB1c2VyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEByZXR1cm4JdXNlcgorICAgICAqIEByZXR1cm4gICAgdXNlcgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dXNlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHBhcmFtCXBhc3N3ZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBhc3N3ZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UGFzc3dvcmQoU3RyaW5nIHBhc3N3ZCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCwgcGFzc3dkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHJldHVybglwYXNzd2QKKyAgICAgKiBAcmV0dXJuICAgIHBhc3N3ZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFzc3dvcmQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEBwYXJhbQlwYXNzd2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwYXNzd2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHBhc3N3b3JkKFN0cmluZyBwYXNzd2QpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQsIHBhc3N3ZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEByZXR1cm4JcGFzc3dkCisgICAgICogQHJldHVybiAgICBwYXNzd2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2xhc3NOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY2xhc3NOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDbGFzc05hbWUoU3RyaW5nIGNsYXNzTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUsIGNsYXNzTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEByZXR1cm4JY2xhc3NOYW1lCisgICAgICogQHJldHVybiAgICBjbGFzc05hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENsYXNzTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEBwYXJhbQljbGFzc05hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjbGFzc05hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGNsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSwgY2xhc3NOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHJldHVybgljbGFzc05hbWUKKyAgICAgKiBAcmV0dXJuICAgIGNsYXNzTmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Y2xhc3NOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEBwYXJhbQljb25WbGRSZXEJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjb25WbGRSZXEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoU3RyaW5nIGNvblZsZFJlcSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVELCBjb25WbGRSZXEpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHJldHVybgljb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHBhcmFtCWNvblZsZFJlcQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNvblZsZFJlcSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Y29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZChTdHJpbmcgY29uVmxkUmVxKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQsIGNvblZsZFJlcSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdmFsaWRhdGlvbiBtZXRob2QgcmVxdWlyZWQKICAgICAgKgotICAgICAqIEBwYXJhbQl2YWxpZGF0aW9uTWV0aG9kCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdmFsaWRhdGlvbk1ldGhvZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VmFsaWRhdGlvbk1ldGhvZChTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCkgewogICAgICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCwgdmFsaWRhdGlvbk1ldGhvZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgY29ubmVjdGlvbiB2YWxpZGF0aW9uIG1ldGhvZCB0eXBlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXZhbGlkYXRpb24gbWV0aG9kCisgICAgICogQHJldHVybiAgICB2YWxpZGF0aW9uIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsaWRhdGlvbk1ldGhvZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHZhbGlkYXRpb24gbWV0aG9kIHJlcXVpcmVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsaWRhdGlvbk1ldGhvZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHZhbGlkYXRpb25NZXRob2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHZhbGlkYXRpb25NZXRob2QoU3RyaW5nIHZhbGlkYXRpb25NZXRob2QpIHsKICAgICAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QsIHZhbGlkYXRpb25NZXRob2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBtZXRob2QgdHlwZQogICAgICAqCi0gICAgICogQHJldHVybgl2YWxpZGF0aW9uIG1ldGhvZAorICAgICAqIEByZXR1cm4gICAgdmFsaWRhdGlvbiBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHZhbGlkYXRpb25NZXRob2QoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCXRhYmxlCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdGFibGUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25UYWJsZU5hbWUoU3RyaW5nIHRhYmxlKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUsIHRhYmxlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgl0YWJsZQorICAgICAqIEByZXR1cm4gICAgdGFibGUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbGlkYXRpb25UYWJsZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCXRhYmxlCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdGFibGUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHZhbGlkYXRpb25UYWJsZU5hbWUoU3RyaW5nIHRhYmxlKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUsIHRhYmxlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgl0YWJsZQorICAgICAqIEByZXR1cm4gICAgdGFibGUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHZhbGlkYXRpb25UYWJsZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEBwYXJhbQl0cm5Jc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cm5Jc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKFN0cmluZyB0cm5Jc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04sIHRybklzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEBwYXJhbQl0cm5Jc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cm5Jc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHRyYW5zYWN0aW9uSXNvbGF0aW9uKFN0cmluZyB0cm5Jc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04sIHRybklzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR0cmFuc2FjdGlvbklzb2xhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZAogICAgICAqCi0gICAgICogQHBhcmFtCWd1YXJhbnRlZUlzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGd1YXJhbnRlZUlzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCwgZ3VhcmFudGVlSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQorICAgICAqIEByZXR1cm4gICAgaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQKICAgICAgKgotICAgICAqIEBwYXJhbQlndWFyYW50ZWVJc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBndWFyYW50ZWVJc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKFN0cmluZyBndWFyYW50ZWVJc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwsIGd1YXJhbnRlZUlzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKKyAgICAgKiBAcmV0dXJuICAgIGlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhCmluZGV4IDU1NWJlNzcuLmVhNTQwNzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKQEAgLTI2LDggKzI2LDggQEAKIC8qKgogICogPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzA1Ci0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wNQorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFJlc291cmNlQWRhcHRlciBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciB7CiAKQEAgLTM3LDUyICszNyw1MiBAQAogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZW5kcG9pbnRBY3RpdmF0aW9uCiAgICAgICogd2hpY2gganVzdCB0aHJvd3MgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCW1lZgk8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlhcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWVmICAgIDxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGFzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVuZHBvaW50QWN0aXZhdGlvbihNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IG1lZiwgQWN0aXZhdGlvblNwZWMgYXMpIHRocm93cyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJUaGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIEpEQkMgY29ubmVjdG9yIik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBlbmRwb2ludERlYWN0aXZhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCW1lZgk8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlhcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWVmICAgIDxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGFzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVuZHBvaW50RGVhY3RpdmF0aW9uKE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgbWVmLCBBY3RpdmF0aW9uU3BlYyBhcykgewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZ2V0WEFSZXNvdXJjZXMKICAgICAgKiB3aGljaCBqdXN0IHRocm93cyA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3BlY3MJPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+IGFycmF5Ci0gICAgICogQHRocm93cwk8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNwZWNzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPiBhcnJheQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykgdGhyb3dzIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIlRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgSkRCQyBjb25uZWN0b3IiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBzdGFydCBtZXRob2QKICAgICAgKgotICAgICAqIEBwYXJhbQljdHgJPGNvZGU+Qm9vdHN0cmFwQ29udGV4dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY3R4ICAgIDxjb2RlPkJvb3RzdHJhcENvbnRleHQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RhcnQoQm9vdHN0cmFwQ29udGV4dCBjdHgpIHRocm93cyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzb3VyY2UgQWRhcHRlciBpcyBzdGFydGluZyB3aXRoIGNvbmZpZ3VyYXRpb24gOiIgKyByYVByb3ApOwogICAgICAgICBpZiAocmFQcm9wID09IG51bGwgfHwgIXJhUHJvcC5lcXVhbHMoIlZBTElEIikpIHsKLQkgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJSZXNvdXJjZSBhZGFwdGVyIGNhbm5vdCBzdGFydC4gSXQgaXMgY29uZmlndXJlZCBhcyA6ICIgKyByYVByb3ApOwotCX0gCisgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiUmVzb3VyY2UgYWRhcHRlciBjYW5ub3Qgc3RhcnQuIEl0IGlzIGNvbmZpZ3VyZWQgYXMgOiAiICsgcmFQcm9wKTsKICAgICB9Ci0gICAgCisgICAgfQorCiAgICAgLyoqCiAgICAgICogRW1wdHkgaW1wbGVtZW50YXRpb24gb2Ygc3RvcCBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdG9wKCkgewotICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0UkFQcm9wZXJ0eShTdHJpbmcgcykgewpAQCAtOTIsNSArOTIsNSBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UkFQcm9wZXJ0eSgpIHsKICAgICAgICAgcmV0dXJuIHJhUHJvcDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCmluZGV4IDVlMTRkNDQuLmZmMGYwMmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iJHtnamMuaG9tZX0iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy9zcGkiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMjksNTUgKzI5LDU1IEBACiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0icGFja2FnZTE0Ij4KLSAgICAJCi0gICAgCTxta2RpciBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIvPgotICAgIAkKLQk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIgYmFzZWRpcj0iJHtjbGFzcy5kaXJ9IgorCisgICAgICAgIDxta2RpciBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIvPgorCisgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiIGJhc2VkaXI9IiR7Y2xhc3MuZGlyfSIKICAgICAgICAgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiwgY29tL3N1bi9namMvdXRpbC8qKi8qLCBjb20vc3VuL2dqYy9jb21tb24vKiovKiIgZXhjbHVkZXM9ImNvbS9zdW4vZ2pjL2NjaS8qKi8qLGNvbS9zdW4vZ2pjL3NwaS8xLjQvKiovKiIvPgotICAgICAgICAKKwogICAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2NwLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtY3AueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWNwLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2NwLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS14YS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2NwLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLXhhLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kbS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRtLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kcy54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRzLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxkZWxldGUgZGlyPSIke2dqYy5ob21lfS9kaXN0L2NvbSIvPgotICAgCTxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIi8+Ci0gICAJPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIi8+Ci0gICAJCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxkZWxldGUgZGlyPSIke2dqYy5ob21lfS9kaXN0L2NvbSIvPgorICAgICAgIDxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIi8+CisgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIi8+CisKICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxMyIvPgotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTQsIGJ1aWxkMTMiLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDE0LCBidWlsZDEzIi8+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbAppbmRleCAyNzdlZmJhLi5mN2VhODJiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwKQEAgLTIyLDY5ICsyMiw2OSBAQAogICAgICAgICAgICB2ZXJzaW9uPSIxLjUiPgogCiAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgotICAgIDwhLS0gVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYSAKKyAgICA8IS0tIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEKICAgICAgICAgIGRlc2NyaXB0aW9uIGZvciB0aGUgcmVzb3VyY2UgYWRhcHRlci4KICAgICAtLT4KICAgICA8ZGVzY3JpcHRpb24+UmVzb3VyY2UgYWRhcHRlciB3cmFwcGluZyBEYXRhc291cmNlIGltcGxlbWVudGF0aW9uIG9mIGRyaXZlcjwvZGVzY3JpcHRpb24+Ci0gICAgCisKICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkaXNwbGF5LW5hbWUiIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgotICAgIDwhLS0gVGhlIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhIG5hbWUgdGhhdCAKKyAgICA8IS0tIFRoZSBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYSBuYW1lIHRoYXQKICAgICAgICAgIGlzIGludGVuZGVkIHRvIGJlIGRpc3BsYXllZCBieSB0b29scy4KICAgICAtLT4KICAgICA8ZGlzcGxheS1uYW1lPkRhdGFTb3VyY2UgUmVzb3VyY2UgQWRhcHRlcjwvZGlzcGxheS1uYW1lPgotICAgIAorCiAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiaWNvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+CiAgICAgPCEtLSBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxpY29uPgotICAgICAgICAgICAgVGhpcyAic21hbGwtaWNvbiIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UuIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIAotICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgxNiB4IDE2KSAKKyAgICAgICAgICAgIFRoaXMgInNtYWxsLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgxNiB4IDE2KQogICAgICAgICAgICAgaWNvbiAtIEpQRUcgb3IgR0lGIGltYWdlLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgICAgICA8c21hbGwtaWNvbj5zbWFsbGljb24uanBnPC9zbWFsbC1pY29uPgotICAgICAgICAKLSAgICAgICAgICAgIFRoaXMgImxhcmdlLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSAKLSAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMzIgeCAzMikgCisKKyAgICAgICAgICAgIFRoaXMgImxhcmdlLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgzMiB4IDMyKQogICAgICAgICAgICAgaWNvbiAtIEpQRUcgb3IgR0lGIGltYWdlLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCi0gICAgICAgICAgICA8bGFyZ2UtaWNvbj5sYXJnZWljb24uanBnPC9sYXJnZS1pY29uPiAgIAorICAgICAgICAgICAgPGxhcmdlLWljb24+bGFyZ2VpY29uLmpwZzwvbGFyZ2UtaWNvbj4KICAgICAgICAgPC9pY29uPgogICAgIC0tPgogICAgIDxpY29uPgogICAgICAgICA8c21hbGwtaWNvbj48L3NtYWxsLWljb24+Ci0gICAgICAgIDxsYXJnZS1pY29uPjwvbGFyZ2UtaWNvbj4gICAKKyAgICAgICAgPGxhcmdlLWljb24+PC9sYXJnZS1pY29uPgogICAgIDwvaWNvbj4KLSAgICAKKwogICAgIDwhLS0gVGhlICJ2ZW5kb3ItbmFtZSIgZWxlbWVudCBzaG91bGQgb2NjdXIgZXhhY3RseSBvbmNlLiAtLT4KICAgICA8IS0tIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGRyaXZlciB2ZW5kb3IuIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgPHZlbmRvci1uYW1lPlhZWiBJTkMuPC92ZW5kb3ItbmFtZT4KICAgICAtLT4KICAgICA8dmVuZG9yLW5hbWU+U3VuIE1pY3Jvc3lzdGVtczwvdmVuZG9yLW5hbWU+Ci0gICAgCisKICAgICA8IS0tIFRoZSAiZWlzLXR5cGUiIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGV4YWN0bHkgb25jZS4gLS0+Ci0gICAgPCEtLSBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSBkYXRhYmFzZSwgZm9yIGV4YW1wbGUgdGhlIHByb2R1Y3QgbmFtZSBvZiAKKyAgICA8IS0tIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIGRhdGFiYXNlLCBmb3IgZXhhbXBsZSB0aGUgcHJvZHVjdCBuYW1lIG9mCiAgICAgICAgICB0aGUgZGF0YWJhc2UgaW5kZXBlbmRlbnQgb2YgYW55IHZlcnNpb24gaW5mb3JtYXRpb24uIFRoZSBmb2xsb3dpbmcKICAgICAgICAgIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxlaXMtdHlwZT5YWVo8L2Vpcy10eXBlPgogICAgIC0tPgogICAgIDxlaXMtdHlwZT5EYXRhYmFzZTwvZWlzLXR5cGU+Ci0gICAgCisKICAgICA8IS0tIFRoZSAicmVzb3VyY2VhZGFwdGVyLXZlcnNpb24iIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGV4YWN0bHkgb25jZS4gLS0+Ci0gICAgPCEtLSBUaGlzIHNwZWNpZmllcyBhIHN0cmluZyBiYXNlZCB2ZXJzaW9uIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGZyb20gCisgICAgPCEtLSBUaGlzIHNwZWNpZmllcyBhIHN0cmluZyBiYXNlZCB2ZXJzaW9uIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGZyb20KICAgICAgICAgIHRoZSBkcml2ZXIgdmVuZG9yLiBUaGUgZGVmYXVsdCBpcyBiZWluZyBzZXQgYXMgMS4wLiBUaGUgZHJpdmVyCiAgICAgICAgICB2ZW5kb3IgY2FuIGNoYW5nZSBpdCBhcyByZXF1aXJlZC4KICAgICAtLT4KICAgICA8cmVzb3VyY2VhZGFwdGVyLXZlcnNpb24+MS4wPC9yZXNvdXJjZWFkYXB0ZXItdmVyc2lvbj4KLSAgICAKKwogICAgIDwhLS0gVGhpcyAibGljZW5zZSIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UgLS0+CiAgICAgPCEtLSBUaGlzIHNwZWNpZmllcyBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzIGZvciB0aGUgcmVzb3VyY2UgYWRhcHRlciBtb2R1bGUuCiAgICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxsaWNlbnNlPgogICAgICAgICAgICAgVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBpbmNsdWRpbmcgMC4KICAgICAgICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gCi0gICAgICAgICAgICAgICAgcHJvdmlkZSBhIGRlc2NyaXB0aW9uIGZvciB0aGUgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBvZiB0aGUgCi0gICAgICAgICAgICAgICAgcmVzb3VyY2UgYWRhcHRlciBsaWtlIGR1cmF0aW9uIG9mIGxpY2Vuc2UsIG51bWJlcm9mIGNvbm5lY3Rpb24gCisgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvCisgICAgICAgICAgICAgICAgcHJvdmlkZSBhIGRlc2NyaXB0aW9uIGZvciB0aGUgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBvZiB0aGUKKyAgICAgICAgICAgICAgICByZXNvdXJjZSBhZGFwdGVyIGxpa2UgZHVyYXRpb24gb2YgbGljZW5zZSwgbnVtYmVyb2YgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9ucy4KICAgICAgICAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgICAgIAorCiAgICAgICAgICAgICBUaGlzIHNwZWNpZmllcyB3aGV0aGVyIGEgbGljZW5zZSBpcyByZXF1aXJlZCB0byBkZXBsb3kgYW5kIHVzZSB0aGUgcmVzb3VyY2UgYWRhcHRlci4KICAgICAgICAgICAgIERlZmF1bHQgaXMgZmFsc2UuCiAgICAgICAgICAgICA8bGljZW5zZS1yZXF1aXJlZD5mYWxzZTwvbGljZW5zZS1yZXF1aXJlZD4KQEAgLTkzLDI0ICs5MywyNCBAQAogICAgIDxsaWNlbnNlPgogICAgICAgICA8bGljZW5zZS1yZXF1aXJlZD5mYWxzZTwvbGljZW5zZS1yZXF1aXJlZD4KICAgICA8L2xpY2Vuc2U+Ci0gICAgCisKICAgICA8cmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAKLSAgICAgICAgPCEtLSAKLSAgICAgICAgICAgIFRoZSAiY29uZmlnLXByb3BlcnR5IiBlbGVtZW50cyBjYW4gaGF2ZSB6ZXJvIG9yIG1vcmUgImRlc2NyaXB0aW9uIiAKKworICAgICAgICA8IS0tCisgICAgICAgICAgICBUaGUgImNvbmZpZy1wcm9wZXJ0eSIgZWxlbWVudHMgY2FuIGhhdmUgemVybyBvciBtb3JlICJkZXNjcmlwdGlvbiIKICAgICAgICAgICAgIGVsZW1lbnRzLiBUaGUgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBhcmUgbm90IGJlaW5nIGluY2x1ZGVkCiAgICAgICAgICAgICBpbiB0aGUgImNvbmZpZy1wcm9wZXJ0eSIgZWxlbWVudHMgYmVsb3cuIFRoZSBkcml2ZXIgdmVuZG9yIGNhbgogICAgICAgICAgICAgYWRkIHRoZW0gYXMgcmVxdWlyZWQuCiAgICAgICAgIC0tPgotICAgICAgICAKKwogICAgICAgICA8cmVzb3VyY2VhZGFwdGVyLWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5SZXNvdXJjZUFkYXB0ZXI8L3Jlc291cmNlYWRhcHRlci1jbGFzcz4KLSAgICAgICAgCisKICAgICAgICAgPG91dGJvdW5kLXJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgCisKICAgICAgICAgICAgIDxjb25uZWN0aW9uLWRlZmluaXRpb24+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8bWFuYWdlZGNvbm5lY3Rpb25mYWN0b3J5LWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvbWFuYWdlZGNvbm5lY3Rpb25mYWN0b3J5LWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiB0aGVzZSBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+U2VydmVyTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT50ZXN0ZGI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KIAotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Vc2VyPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmRidXNlcjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgpAQCAtMTM5LDEyICsxMzksMTIgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5kYnVzZXI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KIAotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5QYXNzd29yZDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5kYnBhc3N3b3JkPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlVSTDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5qZGJjOmRlcmJ5Oi8vbG9jYWxob3N0OjE1MjcvdGVzdGRiO2NyZWF0ZT10cnVlPC9jb25maWctcHJvcGVydHktdmFsdWU+CkBAIC0xNTQsNyArMTU0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5Pi0tPgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5EZXNjcmlwdGlvbjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5PcmFjbGUgdGhpbiBkcml2ZXIgRGF0YXNvdXJjZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgpAQCAtMTY1LDE3ICsxNjUsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Sb2xlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+TG9naW5UaW1lT3V0PC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RHJpdmVyUHJvcGVydGllczwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KQEAgLTE4Niw3ICsxODYsNyBAQAogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+IzwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5DbGFzc05hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+b3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERhdGFTb3VyY2U0MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgpAQCAtMTk4LDgyICsxOTgsODIgQEAKICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAKIDwhLS0KLSAgICAgIAkJPGNvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZmFsc2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uTWV0aG9kPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VHJhbnNhY3Rpb25Jc29sYXRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZmFsc2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25NZXRob2Q8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uVGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VHJhbnNhY3Rpb25Jc29sYXRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5HdWFyYW50ZWVJc29sYXRpb25MZXZlbDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogLS0+CiAKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbmZhY3RvcnktaW50ZXJmYWNlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb25uZWN0aW9uZmFjdG9yeS1pbnRlcmZhY2U+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbmZhY3RvcnktaW1wbC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZTwvY29ubmVjdGlvbmZhY3RvcnktaW1wbC1jbGFzcz4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uLWludGVyZmFjZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb25uZWN0aW9uLWludGVyZmFjZT4KLSAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbi1pbXBsLWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyPC9jb25uZWN0aW9uLWltcGwtY2xhc3M+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIDwvY29ubmVjdGlvbi1kZWZpbml0aW9uPgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDx0cmFuc2FjdGlvbi1zdXBwb3J0PkxvY2FsVHJhbnNhY3Rpb248L3RyYW5zYWN0aW9uLXN1cHBvcnQ+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPGF1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbT4KICAgICAgICAgICAgICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+CiAgICAgICAgICAgICAgICAgPCEtLSBOb3QgaW5jbHVkaW5nIHRoZSAiZGVzY3JpcHRpb24iIGVsZW1lbnQgLS0+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8YXV0aGVudGljYXRpb24tbWVjaGFuaXNtLXR5cGU+QmFzaWNQYXNzd29yZDwvYXV0aGVudGljYXRpb24tbWVjaGFuaXNtLXR5cGU+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y3JlZGVudGlhbC1pbnRlcmZhY2U+amF2YXgucmVzb3VyY2Uuc3BpLnNlY3VyaXR5LlBhc3N3b3JkQ3JlZGVudGlhbDwvY3JlZGVudGlhbC1pbnRlcmZhY2U+CiAgICAgICAgICAgICA8L2F1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbT4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8cmVhdXRoZW50aWNhdGlvbi1zdXBwb3J0PmZhbHNlPC9yZWF1dGhlbnRpY2F0aW9uLXN1cHBvcnQ+Ci0gICAgICAgICAgICAKKwogICAgICAgICA8L291dGJvdW5kLXJlc291cmNlYWRhcHRlcj4KLQk8YWRtaW5vYmplY3Q+Ci0JICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluPC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+Ci0JICAgICAgIDxhZG1pbm9iamVjdC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW5JbXBsPC9hZG1pbm9iamVjdC1jbGFzcz4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+U2NoZW1hTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5KbmRpTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Ob09mUm93czwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLkludGVnZXI8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4wPC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgIDxhZG1pbm9iamVjdD4KKyAgICAgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW48L2FkbWlub2JqZWN0LWludGVyZmFjZT4KKyAgICAgICAgICAgPGFkbWlub2JqZWN0LWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbkltcGw8L2FkbWlub2JqZWN0LWNsYXNzPgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5TY2hlbWFOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkpuZGlOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPk5vT2ZSb3dzPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuSW50ZWdlcjwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAgICAgICAgIDwvYWRtaW5vYmplY3Q+Ci0gICAgICAgIAorCiAgICAgPC9yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgCisKIDwvY29ubmVjdG9yPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKaW5kZXggYjIxOWNkMi4uMTI0ODA5YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCkBAIC0yNCwyNiArMjQsMjYgQEAKIC8qKgogICogQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMQotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzEKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0aW9uTWFuYWdlciBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyeyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uTWFuYWdlciBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyewogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhIDxjb2RlPkNvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QgdG8gdGhlIDxjb2RlPkNvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0JaW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcmV0dXJuCUEgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvciBpbiBnZXR0aW5nIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gICAgbWNmICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBpbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgQSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBPYmplY3QuCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yIGluIGdldHRpbmcgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+LgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgYWxsb2NhdGVDb25uZWN0aW9uKE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsCi0gICAgCQkJCSAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8pIAotICAgIAkJCQkgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0JTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBtY2YuY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgaW5mbyk7Ci0JcmV0dXJuIG1jLmdldENvbm5lY3Rpb24obnVsbCwgaW5mbyk7ICAgIAkJCQkgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKQorICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CisgICAgTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBtY2YuY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgaW5mbyk7CisgICAgcmV0dXJuIG1jLmdldENvbm5lY3Rpb24obnVsbCwgaW5mbyk7CiAgICAgfQotICAgIAorCiAgICAgLyoKICAgICAgKiBUaGlzIGNsYXNzIGNvdWxkIGVmZmVjdGl2ZWx5IGltcGxlbWVudCBDb25uZWN0aW9uIHBvb2xpbmcgYWxzby4KICAgICAgKiBDb3VsZCBiZSBkb25lIGZvciBGQ1MuCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCmluZGV4IDM5Yzc4NzYuLmM0NzdmYzIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCkBAIC0xOSwxMCArMTksMTAgQEAKIC8qKgogICogQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZveyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm97CiAKICAgICBwcml2YXRlIFN0cmluZyB1c2VyOwogICAgIHByaXZhdGUgU3RyaW5nIHBhc3N3b3JkOwpAQCAtMzAsOCArMzAsOCBAQAogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCVVzZXIgTmFtZS4KLSAgICAgKiBAcGFyYW0JcGFzc3dvcmQJUGFzc3dvcmQKKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICBVc2VyIE5hbWUuCisgICAgICogQHBhcmFtICAgIHBhc3N3b3JkICAgIFBhc3N3b3JkCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyhTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkKSB7CiAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7CkBAIC00MSw3ICs0MSw3IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSB1c2VyIG5hbWUgb2YgdGhlIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKgotICAgICAqIEByZXR1cm4JVXNlciBuYW1lIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KKyAgICAgKiBAcmV0dXJuICAgIFVzZXIgbmFtZSBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyKCkgewogICAgICAgICByZXR1cm4gdXNlcjsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHBhc3N3b3JkIG9mIHRoZSBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVBhc3N3b3JkIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KKyAgICAgKiBAcmV0dXJuICAgIFBhc3N3b3JkIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gcGFzc3dvcmQ7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgLyoqCiAgICAgICogVmVyaWZ5IHdoZXRoZXIgdHdvIENvbm5lY3Rpb25SZXF1ZXN0SW5mb3MgYXJlIGVxdWFsLgogICAgICAqCi0gICAgICogQHJldHVybglUcnVlLCBpZiB0aGV5IGFyZSBlcXVhbCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqIEByZXR1cm4gICAgVHJ1ZSwgaWYgdGhleSBhcmUgZXF1YWwgYW5kIGZhbHNlIG90aGVyd2lzZS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewogICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTsKQEAgLTc1LDE4ICs3NSwxOCBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgaGFzaGNvZGUgb2YgdGhlIG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaENvZGUuCisgICAgICogQHJldHVybiAgICBoYXNoQ29kZS4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewogICAgICAgICBTdHJpbmcgcmVzdWx0ID0gIiIgKyB1c2VyICsgcGFzc3dvcmQ7CiAgICAgICAgIHJldHVybiByZXN1bHQuaGFzaENvZGUoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21wYXJlcyB0d28gb2JqZWN0cy4KICAgICAgKgotICAgICAqIEBwYXJhbQlvMQlGaXJzdCBvYmplY3QuCi0gICAgICogQHBhcmFtCW8yCVNlY29uZCBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG8xICAgIEZpcnN0IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgbzIgICAgU2Vjb25kIG9iamVjdC4KICAgICAgKi8KICAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbChPYmplY3QgbzEsIE9iamVjdCBvMikgewogICAgICAgICBpZiAobzEgPT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKaW5kZXggYTlmYTVmMS4uYjFmYzBlNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0zMSwzNiArMzEsMzYgQEAKIC8qKgogICogRGF0YSBTb3VyY2UgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMwCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMAorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogCiBwdWJsaWMgY2xhc3MgRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgZXh0ZW5kcyBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgewotICAgCisKICAgICBwcml2YXRlIHRyYW5zaWVudCBqYXZheC5zcWwuRGF0YVNvdXJjZSBkYXRhU291cmNlT2JqOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKICAgICB9CiAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnID0gZmFsc2U7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgbmV3IHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgRUlTIHJlc291cmNlCiAgICAgICogbWFuYWdlci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBwYXJhbQljeFJlcXVlc3RJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0Ci0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAk8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCi0gICAgICogICAgICAgCQkJCWNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0Ci0gICAgICogQHRocm93cwlTZWN1cml0eUV4Y2VwdGlvbglpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0IAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqCQkJCQkJcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gICAgY3hSZXF1ZXN0SW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAorICAgICAqIEB0aHJvd3MgICAgU2VjdXJpdHlFeGNlcHRpb24gICAgaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdCBzdWJqZWN0LAogICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGMgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLCBzdWJqZWN0LCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoZGF0YVNvdXJjZU9iaiA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZihkc09iakJ1aWxkZXIgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGRzT2JqQnVpbGRlciA9IG5ldyBEYXRhU291cmNlT2JqZWN0QnVpbGRlcihzcGVjKTsKQEAgLTc4LDM2ICs3OCwzNiBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBkYXRhU291cmNlT2JqID0gKGphdmF4LnNxbC5EYXRhU291cmNlKSBkc09iakJ1aWxkZXIuY29uc3RydWN0RGF0YVNvdXJjZU9iamVjdCgpOwogICAgICAgICAgICAgfSBjYXRjaChDbGFzc0Nhc3RFeGNlcHRpb24gY2NlKSB7Ci0JICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jY2UiLCBjY2UpOworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY2NlIiwgY2NlKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5SZXNvdXJjZUV4Y2VwdGlvbihjY2UuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRzQ29ubiA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7Ci0JICAgIC8qIEZvciB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlci9wYXNzd2Qgb2YgdGhlIGNvbm5lY3Rpb24gcG9vbCBpcwotCSAgICAgKiBlcXVhbCB0byB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIGZvciB0aGUgY29ubmVjdGlvbiByZXF1ZXN0Ci0JICAgICAqIGdldCBhIGNvbm5lY3Rpb24gZnJvbSB0aGlzIHBvb2wgZGlyZWN0bHkuCi0JICAgICAqIGZvciBhbGwgb3RoZXIgY29uZGl0aW9ucyBnbyBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbgotCSAgICAgKi8KLQkgICAgaWYgKCBpc0VxdWFsKCBwYywgZ2V0VXNlcigpLCBnZXRQYXNzd29yZCgpICkgKSB7Ci0JICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24oKTsKLQkgICAgfSBlbHNlIHsKLQkgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbihwYy5nZXRVc2VyTmFtZSgpLCAKLQkJICAgIG5ldyBTdHJpbmcocGMuZ2V0UGFzc3dvcmQoKSkpOwotCSAgICB9CisgICAgICAgIC8qIEZvciB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlci9wYXNzd2Qgb2YgdGhlIGNvbm5lY3Rpb24gcG9vbCBpcworICAgICAgICAgKiBlcXVhbCB0byB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIGZvciB0aGUgY29ubmVjdGlvbiByZXF1ZXN0CisgICAgICAgICAqIGdldCBhIGNvbm5lY3Rpb24gZnJvbSB0aGlzIHBvb2wgZGlyZWN0bHkuCisgICAgICAgICAqIGZvciBhbGwgb3RoZXIgY29uZGl0aW9ucyBnbyBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBpc0VxdWFsKCBwYywgZ2V0VXNlcigpLCBnZXRQYXNzd29yZCgpICkgKSB7CisgICAgICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbihwYy5nZXRVc2VyTmFtZSgpLAorICAgICAgICAgICAgbmV3IFN0cmluZyhwYy5nZXRQYXNzd29yZCgpKSk7CisgICAgICAgIH0KICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewogICAgICAgICAgICAgc3FsZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2NyZWF0ZV9jb25uIiwgc3FsZSk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBjb3VsZCBub3QgYmUgYWxsb2NhdGVkOiAiICsgCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19jcmVhdGVfY29ubiIsIHNxbGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGFsbG9jYXRlZDogIiArCiAgICAgICAgICAgICAgICAgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVjMtVEVTVCA6IHVuYWJsZSB0byBnZXQgY29ubmVjdGlvbiIpOwotICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWMy1URVNUIDogZ290IGNvbm5lY3Rpb24iKTsKLSAgICAgICAgCisKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbihudWxsLCBkc0Nvbm4sIHBjLCB0aGlzKTsKICAgICAgICAgLy9HSkNJTlQKIC8qCkBAIC0xMTcsMTUgKzExNywxNSBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlYzLVRFU1QgOiByZXR1cm5pbmcgY29ubmVjdGlvbiIpOwogICAgICAgICByZXR1cm4gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvIAorICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0bwogICAgICAqIGFub3RoZXIgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jb3RoZXIJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCi0gICAgICoJCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIG90aGVyICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCisgICAgICogICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTEzNiw0MDkgKzEzNiw0MDkgQEAKICAgICAgICAgICogaWYgYW5kIG9ubHkgaWYgdGhlaXIgcHJvcGVydGllcyBhcmUgdGhlIHNhbWUuCiAgICAgICAgICAqLwogICAgICAgICBpZihvdGhlciBpbnN0YW5jZW9mIGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSkgewotICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG90aGVyTUNGID0gCisgICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnkgb3RoZXJNQ0YgPQogICAgICAgICAgICAgICAgIChjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpIG90aGVyOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BlYy5lcXVhbHMob3RoZXJNQ0Yuc3BlYyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlcnZlck5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc2VydmVyTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHNlcnZlck5hbWUoU3RyaW5nIHNlcnZlck5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSwgc2VydmVyTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXNlcnZlck5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBzZXJ2ZXJOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0c2VydmVyTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlcnZlck5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc2VydmVyTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFNlcnZlck5hbWUoU3RyaW5nIHNlcnZlck5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSwgc2VydmVyTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXNlcnZlck5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBzZXJ2ZXJOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvcnROdW1iZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcG9ydE51bWJlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHBvcnROdW1iZXIoU3RyaW5nIHBvcnROdW1iZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiwgcG9ydE51bWJlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBvcnROdW1iZXIKLSAgICAgKiBAc2VlCTxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBwb3J0TnVtYmVyCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0cG9ydE51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvcnROdW1iZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcG9ydE51bWJlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFBvcnROdW1iZXIoU3RyaW5nIHBvcnROdW1iZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiwgcG9ydE51bWJlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBvcnROdW1iZXIKLSAgICAgKiBAc2VlCTxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBwb3J0TnVtYmVyCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UG9ydE51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGF0YWJhc2VOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGF0YWJhc2VOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkYXRhYmFzZU5hbWUoU3RyaW5nIGRhdGFiYXNlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUsIGRhdGFiYXNlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGF0YWJhc2VOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkYXRhYmFzZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRhdGFiYXNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkYXRhYmFzZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkYXRhYmFzZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERhdGFiYXNlTmFtZShTdHJpbmcgZGF0YWJhc2VOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSwgZGF0YWJhc2VOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkYXRhYmFzZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRhdGFiYXNlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGF0YWJhc2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRhdGFTb3VyY2VOYW1lKFN0cmluZyBkc24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUsIGRzbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHNuCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRzbgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkYXRhU291cmNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERhdGFTb3VyY2VOYW1lKFN0cmluZyBkc24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUsIGRzbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHNuCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRzbgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREYXRhU291cmNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZXNjCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZXNjICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRlc2NyaXB0aW9uKFN0cmluZyBkZXNjKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OLCBkZXNjKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVzYwotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZXNjCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRlc2NyaXB0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlc2MJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlc2MgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2MpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04sIGRlc2MpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglkZXNjCi0gICAgICogQHNlZQk8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlc2MKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlud1Byb3RvY29sCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbndQcm90b2NvbCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0bmV0d29ya1Byb3RvY29sKFN0cmluZyBud1Byb3RvY29sKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCwgbndQcm90b2NvbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbndQcm90b2NvbAotICAgICAqIEBzZWUJPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbndQcm90b2NvbAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0bmV0d29ya1Byb3RvY29sKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHBhcmFtCW53UHJvdG9jb2wJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBud1Byb3RvY29sICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrUHJvdG9jb2woU3RyaW5nIG53UHJvdG9jb2wpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MLCBud1Byb3RvY29sKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHJldHVybglud1Byb3RvY29sCi0gICAgICogQHNlZQk8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHJldHVybiAgICBud1Byb3RvY29sCisgICAgICogQHNlZSAgICA8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXROZXR3b3JrUHJvdG9jb2woKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlyb2xlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcm9sZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0cm9sZU5hbWUoU3RyaW5nIHJvbGVOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FLCByb2xlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglyb2xlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICByb2xlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRyb2xlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jcm9sZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJvbGVOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJvbGVOYW1lKFN0cmluZyByb2xlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSwgcm9sZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jcm9sZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcm9sZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Um9sZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSk7CiAgICAgfQogCi0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHBhcmFtCWxvZ2luVGltZU91dAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZU91dCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0bG9naW5UaW1lT3V0KFN0cmluZyBsb2dpblRpbWVPdXQpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VULCBsb2dpblRpbWVPdXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWxvZ2luVGltZW91dAotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbG9naW5UaW1lb3V0CisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRsb2dpblRpbWVPdXQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lT3V0CTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lT3V0ICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dpblRpbWVPdXQoU3RyaW5nIGxvZ2luVGltZU91dCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQsIGxvZ2luVGltZU91dCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbG9naW5UaW1lb3V0Ci0gICAgICogQHNlZQk8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHJldHVybiAgICBsb2dpblRpbWVvdXQKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldExvZ2luVGltZU91dCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlbGltCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVsaW0gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRlbGltaXRlcihTdHJpbmcgZGVsaW0pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSLCBkZWxpbSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHJldHVybglkZWxpbQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVsaW0KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRlbGltaXRlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlbGltCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVsaW0gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlbGltaXRlcihTdHJpbmcgZGVsaW0pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSLCBkZWxpbSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHJldHVybglkZWxpbQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVsaW0KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlbGltaXRlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHJpdmVyUHJvcHMJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHJpdmVyUHJvcHMgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkcml2ZXJQcm9wZXJ0aWVzKFN0cmluZyBkcml2ZXJQcm9wcykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTLCBkcml2ZXJQcm9wcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRyaXZlclByb3BzCi0gICAgICogQHNlZQk8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHJpdmVyUHJvcHMKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkcml2ZXJQcm9wZXJ0aWVzKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHJpdmVyUHJvcHMJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHJpdmVyUHJvcHMgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREcml2ZXJQcm9wZXJ0aWVzKFN0cmluZyBkcml2ZXJQcm9wcykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTLCBkcml2ZXJQcm9wcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRyaXZlclByb3BzCi0gICAgICogQHNlZQk8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHJpdmVyUHJvcHMKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREcml2ZXJQcm9wZXJ0aWVzKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7CkBAIC01NDgsMzUgKzU0OCwzNSBAQAogICAgICAqIENoZWNrIGlmIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgcGFzc2VkIGZvciB0aGlzIGdldCBjb25uZWN0aW9uCiAgICAgICogcmVxdWVzdCBpcyBlcXVhbCB0byB0aGUgdXNlci9wYXNzd2Qgb2YgdGhpcyBjb25uZWN0aW9uIHBvb2wuCiAgICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoIFBhc3N3b3JkQ3JlZGVudGlhbCBwYywgU3RyaW5nIHVzZXIsIAorICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKCBQYXNzd29yZENyZWRlbnRpYWwgcGMsIFN0cmluZyB1c2VyLAogICAgICAgICBTdHJpbmcgcGFzc3dvcmQpIHsKLSAgICAgICAgCi0JLy9pZiBlcXVhbCBnZXQgZGlyZWN0IGNvbm5lY3Rpb24gZWxzZSAKLQkvL2dldCBjb25uZWN0aW9uIHdpdGggdXNlciBhbmQgcGFzc3dvcmQuCi0JCi0JaWYgKHVzZXIgPT0gbnVsbCAmJiBwYyA9PSBudWxsKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0KLQkKLQlpZiAoIHVzZXIgPT0gbnVsbCAmJiBwYyAhPSBudWxsICkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCX0KIAotCWlmKCBwYyA9PSBudWxsICkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JaWYgKCB1c2VyLmVxdWFscyggcGMuZ2V0VXNlck5hbWUoKSApICkgewotCSAgICBpZiAoIHBhc3N3b3JkID09IG51bGwgJiYgcGMuZ2V0UGFzc3dvcmQoKSA9PSBudWxsICkgewotCSAgICAgICAgcmV0dXJuIHRydWU7Ci0JICAgIH0KLQl9Ci0JCi0JaWYgKCB1c2VyLmVxdWFscyhwYy5nZXRVc2VyTmFtZSgpKSAmJiBwYXNzd29yZC5lcXVhbHMocGMuZ2V0UGFzc3dvcmQoKSkgKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0gCi0JCi0gICAgICAgIAotCXJldHVybiBmYWxzZTsKKyAgICAvL2lmIGVxdWFsIGdldCBkaXJlY3QgY29ubmVjdGlvbiBlbHNlCisgICAgLy9nZXQgY29ubmVjdGlvbiB3aXRoIHVzZXIgYW5kIHBhc3N3b3JkLgorCisgICAgaWYgKHVzZXIgPT0gbnVsbCAmJiBwYyA9PSBudWxsKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICggdXNlciA9PSBudWxsICYmIHBjICE9IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYoIHBjID09IG51bGwgKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICggdXNlci5lcXVhbHMoIHBjLmdldFVzZXJOYW1lKCkgKSApIHsKKyAgICAgICAgaWYgKCBwYXNzd29yZCA9PSBudWxsICYmIHBjLmdldFBhc3N3b3JkKCkgPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCB1c2VyLmVxdWFscyhwYy5nZXRVc2VyTmFtZSgpKSAmJiBwYXNzd29yZC5lcXVhbHMocGMuZ2V0UGFzc3dvcmQoKSkgKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworCisgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YQppbmRleCBkOTAwODVkLi41MWYxNzczIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCkBAIC0yOCwyMiArMjgsMjIgQEAKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CiAvKioKLSAqIEhvbGRzIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlIAorICogSG9sZHMgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCwgd2hpY2ggaXMgdG8gYmUKICAqIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbS4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2UgaW1wbGVtZW50cyBqYXZheC5zcWwuRGF0YVNvdXJjZSwgamF2YS5pby5TZXJpYWxpemFibGUsCi0JCWNvbS5zdW4uYXBwc2Vydi5qZGJjcmEuRGF0YVNvdXJjZSwgamFrYXJ0YS5yZXNvdXJjZS5SZWZlcmVuY2VhYmxleyAKLQkJCQkgICAKKyAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmNyYS5EYXRhU291cmNlLCBqYWthcnRhLnJlc291cmNlLlJlZmVyZW5jZWFibGV7CisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2Y7Ci0gICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsJCQkJICAgCQkJCSAgIAorICAgIHByaXZhdGUgQ29ubmVjdGlvbk1hbmFnZXIgY207CiAgICAgcHJpdmF0ZSBpbnQgbG9naW5UaW1lb3V0OwogICAgIHByaXZhdGUgUHJpbnRXcml0ZXIgbG9nV3JpdGVyOwotICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwkJCQkgICAKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKICAgICBwcml2YXRlIFJlZmVyZW5jZSByZWZlcmVuY2U7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTEsNTggKzUxLDU4IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnID0gZmFsc2U7CiAKICAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdC4gVGhpcyBpcyBjcmVhdGVkIGJ5IHRoZSAKKyAgICAgKiBDb25zdHJ1Y3RzIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdC4gVGhpcyBpcyBjcmVhdGVkIGJ5IHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCAKLSAgICAgKgkJCWNyZWF0aW5nIHRoaXMgb2JqZWN0LgotICAgICAqIEBwYXJhbQljbQk8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gb2JqZWN0IGVpdGhlciBhc3NvY2lhdGVkCi0gICAgICoJCQl3aXRoIEFwcGxpY2F0aW9uIHNlcnZlciBvciBSZXNvdXJjZSBBZGFwdGVyLgorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgIGNyZWF0aW5nIHRoaXMgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBjbSAgICA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gb2JqZWN0IGVpdGhlciBhc3NvY2lhdGVkCisgICAgICogICAgICAgICAgICB3aXRoIEFwcGxpY2F0aW9uIHNlcnZlciBvciBSZXNvdXJjZSBBZGFwdGVyLgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhU291cmNlIChNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLCBDb25uZWN0aW9uTWFuYWdlciBjbSkgewotICAgIAl0aGlzLm1jZiA9IG1jZjsKLSAgICAJaWYgKGNtID09IG51bGwpIHsKLSAgICAJICAgIHRoaXMuY20gPSAoQ29ubmVjdGlvbk1hbmFnZXIpIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIoKTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHRoaXMuY20gPSBjbTsKLSAgICAJfSAgICAJCi0gICAgfSAgIAotICAgIAorICAgICAgICB0aGlzLm1jZiA9IG1jZjsKKyAgICAgICAgaWYgKGNtID09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuY20gPSAoQ29ubmVjdGlvbk1hbmFnZXIpIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuY20gPSBjbTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogCi0gICAgICogQHJldHVybgk8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLiAgICAgIAorICAgICAqCisgICAgICogQHJldHVybiAgICA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJdHJ5IHsKLSAgICAJICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixudWxsKTsgICAgCSAgICAKLSAgICAJfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixudWxsKTsKKyAgICAgICAgfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKIC8vIFRoaXMgaXMgdGVtcG9yYXJ5LiBUaGlzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gU0VWRVJFIGFmdGVyIFRQCi0JICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICByZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAJICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCX0KKyAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIAotICAgICAqIEBwYXJhbQl1c2VyCVVzZXIgbmFtZSBmb3IgdGhlIENvbm5lY3Rpb24uCi0gICAgICogQHBhcmFtCXB3ZAlQYXNzd29yZCBmb3IgdGhlIENvbm5lY3Rpb24uCi0gICAgICogQHJldHVybgk8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLiAgICAgIAorICAgICAqCisgICAgICogQHBhcmFtICAgIHVzZXIgICAgVXNlciBuYW1lIGZvciB0aGUgQ29ubmVjdGlvbi4KKyAgICAgKiBAcGFyYW0gICAgcHdkICAgIFBhc3N3b3JkIGZvciB0aGUgQ29ubmVjdGlvbi4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbihTdHJpbmcgdXNlciwgU3RyaW5nIHB3ZCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXRyeSB7Ci0gICAgCSAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbyA9IG5ldyBDb25uZWN0aW9uUmVxdWVzdEluZm8gKHVzZXIsIHB3ZCk7Ci0gICAgCSAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsaW5mbyk7Ci0gICAgCX0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbyA9IG5ldyBDb25uZWN0aW9uUmVxdWVzdEluZm8gKHVzZXIsIHB3ZCk7CisgICAgICAgICAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsaW5mbyk7CisgICAgICAgIH0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CiAvLyBUaGlzIGlzIHRlbXBvcmFyeS4gVGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIFNFVkVSRSBhZnRlciBUUAotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJfQotICAgIH0gICAgCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIKQEAgLTExNSw5MSArMTE1LDkxIEBACiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbihDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAKLSAgICAgICAgQ29ubmVjdGlvbiBkcml2ZXJDb24gPSBjb247IAorICAgICAgICBDb25uZWN0aW9uIGRyaXZlckNvbiA9IGNvbjsKICAgICAgICAgaWYgKGNvbiBpbnN0YW5jZW9mIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSB7Ci0gICAgICAgICAgIGRyaXZlckNvbiA9ICgoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIGNvbikuZ2V0Q29ubmVjdGlvbigpOyAKLSAgICAgICAgfSAKKyAgICAgICAgICAgZHJpdmVyQ29uID0gKChjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgY29uKS5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gZHJpdmVyQ29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9naW4gdGltZW91dAogICAgICAqCiAgICAgICogQHJldHVybiBsb2dpbiB0aW1lb3V0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0TG9naW5UaW1lb3V0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJcmV0dXJuCWxvZ2luVGltZW91dDsKKyAgICAgICAgcmV0dXJuICAgIGxvZ2luVGltZW91dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZ2luIHRpbWVvdXQKICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVvdXQJTG9naW4gdGltZW91dC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lb3V0ICAgIExvZ2luIHRpbWVvdXQuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9naW5UaW1lb3V0KGludCBsb2dpblRpbWVvdXQpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXRoaXMubG9naW5UaW1lb3V0ID0gbG9naW5UaW1lb3V0OworICAgICAgICB0aGlzLmxvZ2luVGltZW91dCA9IGxvZ2luVGltZW91dDsKICAgICB9Ci0gICAgCi0gICAgLyoqIAorCisgICAgLyoqCiAgICAgICogR2V0IHRoZSBsb2d3cml0ZXIgb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT4gUHJpbnRXcml0ZXIgPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIFByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXJldHVybglsb2dXcml0ZXI7CisgICAgICAgIHJldHVybiAgICBsb2dXcml0ZXI7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9nd3JpdGVyIG9uIHRoaXMgb2JqZWN0LgogICAgICAqCiAgICAgICogQHBhcmFtIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKFByaW50V3JpdGVyIGxvZ1dyaXRlcikgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7Ci0gICAgfSAgICAgICAgCi0gICAgICAgIAorICAgICAgICB0aGlzLmxvZ1dyaXRlciA9IGxvZ1dyaXRlcjsKKyAgICB9CisKICAgICBwdWJsaWMgTG9nZ2VyIGdldFBhcmVudExvZ2dlcigpIHRocm93cyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBmZWF0dXJlLiIpOwogICAgIH0KICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KKyAgICAgKiBAcmV0dXJuICAgIERlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7Ci0gICAgCXJldHVybiBkZXNjcmlwdGlvbjsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKICAgICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2NyaXB0aW9uKSB7Ci0gICAgCXRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgICB9ICAgIAotICAgIAorICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgfQorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSByZWZlcmVuY2UuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIDxjb2RlPlJlZmVyZW5jZTwvY29kZT5vYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIFJlZmVyZW5jZSBnZXRSZWZlcmVuY2UoKSB7Ci0gICAgCXJldHVybiByZWZlcmVuY2U7CisgICAgICAgIHJldHVybiByZWZlcmVuY2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSByZWZlcmVuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVmZXJlbmNlIDxjb2RlPlJlZmVyZW5jZTwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICByZWZlcmVuY2UgPGNvZGU+UmVmZXJlbmNlPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlKFJlZmVyZW5jZSByZWZlcmVuY2UpIHsKLSAgICAJdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7CisgICAgICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOwogICAgIH0KIAogICAgIHB1YmxpYyA8VD4gVCB1bndyYXAoQ2xhc3M8VD4gaWZhY2UpIHRocm93cyBTUUxFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKaW5kZXggNTc0ZWQ2Ni4uYmVjMGQ2YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCkBAIC0xOCwxMyArMTgsMTMgQEAKIAogcHVibGljIGludGVyZmFjZSBKZGJjU2V0dXBBZG1pbiB7CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRUYWJsZU5hbWUoU3RyaW5nIGRiKTsgCisgICAgcHVibGljIHZvaWQgc2V0VGFibGVOYW1lKFN0cmluZyBkYik7CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRhYmxlTmFtZSgpOwogCi0gICAgcHVibGljIHZvaWQgc2V0Sm5kaU5hbWUoU3RyaW5nIG5hbWUpOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRKbmRpTmFtZShTdHJpbmcgbmFtZSk7CiAKLSAgICBwdWJsaWMgU3RyaW5nIGdldEpuZGlOYW1lKCk7IAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0Sm5kaU5hbWUoKTsKIAogICAgIHB1YmxpYyB2b2lkIHNldFNjaGVtYU5hbWUoU3RyaW5nIG5hbWUpOwogCkBAIC0zNCw2ICszNCw2IEBACiAKICAgICBwdWJsaWMgSW50ZWdlciBnZXROb09mUm93cygpOwogCi0gICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZXR1cCgpOyAKKyAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCk7CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKaW5kZXggM2JkN2NhZC4uZmVjNzQ0MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKQEAgLTY1LDExICs2NSwxMSBAQAogCiBwcml2YXRlIHZvaWQgcHJpbnRIaWVyYXJjaHkoQ2xhc3NMb2FkZXIgY2wsIGludCBjbnQpewogd2hpbGUoY2wgIT0gbnVsbCkgewotCWZvcihpbnQgaSA9MDsgaSA8IGNudDsgaSsrKSAKLQkJU3lzdGVtLm91dC5wcmludCgiICIgKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCA6IiArIGNsKTsKLQljbCA9IGNsLmdldFBhcmVudCgpOwotCWNudCArPSAzOworICAgIGZvcihpbnQgaSA9MDsgaSA8IGNudDsgaSsrKQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIgIiApOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIDoiICsgY2wpOworICAgIGNsID0gY2wuZ2V0UGFyZW50KCk7CisgICAgY250ICs9IDM7CiB9CiB9CiAKQEAgLTc4LDEwICs3OCwxMCBAQAogICAgICAgICBmb3IoaW50IGkgPTA7IGkgPCBjbnQ7IGkrKykKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIgIiApOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCBvZiBDbGFzc0xvYWRlciAxIDoiICsgY2wxKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCBvZiBDbGFzc0xvYWRlciAyIDoiICsgY2wyKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkVRVUFMUyA6ICIgKyAoY2wxID09IGNsMikpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIG9mIENsYXNzTG9hZGVyIDIgOiIgKyBjbDIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRVFVQUxTIDogIiArIChjbDEgPT0gY2wyKSk7CiAgICAgICAgIGNsMSA9IGNsMS5nZXRQYXJlbnQoKTsKLQljbDIgPSBjbDIuZ2V0UGFyZW50KCk7CisgICAgY2wyID0gY2wyLmdldFBhcmVudCgpOwogICAgICAgICBjbnQgKz0gMzsKIH0KIH0KQEAgLTkwLDkzICs5MCw5MyBAQAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2V0dXAoKXsKIAogICAgICAgICBpZiAoam5kaU5hbWU9PSBudWxsIHx8IGpuZGlOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgcmV0dXJuIGZhbHNlOwotCX0KKyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgICAgIGlmICh0YWJsZU5hbWU9PSBudWxsIHx8IHRhYmxlTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IG51bGw7Ci0JU3RhdGVtZW50IHMgPSBudWxsOwotCVJlc3VsdFNldCBycyA9IG51bGw7Ci0JYm9vbGVhbiBiID0gZmFsc2U7CisgICAgU3RhdGVtZW50IHMgPSBudWxsOworICAgIFJlc3VsdFNldCBycyA9IG51bGw7CisgICAgYm9vbGVhbiBiID0gZmFsc2U7CiAgICAgICAgIHRyeSB7Ci0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JLy9kZWJ1ZwotCUNsYXNzIGNseiA9IERhdGFTb3VyY2UuY2xhc3M7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgLy9kZWJ1ZworICAgIENsYXNzIGNseiA9IERhdGFTb3VyY2UuY2xhc3M7CiAvKgotCWlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJEYXRhU291cmNlJ3MgY2xhc3hzIDogIiArICBjbHouZ2V0TmFtZSgpICsgICIgY2xhc3Nsb2FkZXIgIiArIGNsei5nZXRDbGFzc0xvYWRlcigpKTsKLQkJcHJpbnRIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOwotCX0KLQlDbGFzcyBjbHMgPSBpYy5sb29rdXAoam5kaU5hbWUpLmdldENsYXNzKCk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgY2xhc3MncyA6ICIgKyBjbHMuZ2V0UGFja2FnZSgpICsgIjoiICsgY2xzLmdldE5hbWUoKSAgKyAiIGNsYXNzbG9hZGVyICIgICsgY2xzLmdldENsYXNzTG9hZGVyKCkpOwotCXByaW50SGllcmFyY2h5KGNscy5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKKyAgICBpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGF0YVNvdXJjZSdzIGNsYXN4cyA6ICIgKyAgY2x6LmdldE5hbWUoKSArICAiIGNsYXNzbG9hZGVyICIgKyBjbHouZ2V0Q2xhc3NMb2FkZXIoKSk7CisgICAgICAgIHByaW50SGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKKyAgICB9CisgICAgQ2xhc3MgY2xzID0gaWMubG9va3VwKGpuZGlOYW1lKS5nZXRDbGFzcygpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGNsYXNzJ3MgOiAiICsgY2xzLmdldFBhY2thZ2UoKSArICI6IiArIGNscy5nZXROYW1lKCkgICsgIiBjbGFzc2xvYWRlciAiICArIGNscy5nZXRDbGFzc0xvYWRlcigpKTsKKyAgICBwcmludEhpZXJhcmNoeShjbHMuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzbG9hZGVycyBlcXVhbCA/ICIgKyAgKGNsei5nZXRDbGFzc0xvYWRlcigpID09IGNscy5nZXRDbGFzc0xvYWRlcigpKSk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCImKiYqJiomKiBDb21wYXJpbmcgSGllcmFjaHkgRGF0YVNvdXJjZSB2cyBsb29rZWR1cCIpOwotCWlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKLQkJY29tcGFyZUhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKSwgY2xzLmdldENsYXNzTG9hZGVyKCksIDgpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzbG9hZGVycyBlcXVhbCA/ICIgKyAgKGNsei5nZXRDbGFzc0xvYWRlcigpID09IGNscy5nZXRDbGFzc0xvYWRlcigpKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCImKiYqJiomKiBDb21wYXJpbmcgSGllcmFjaHkgRGF0YVNvdXJjZSB2cyBsb29rZWR1cCIpOworICAgIGlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKKyAgICAgICAgY29tcGFyZUhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKSwgY2xzLmdldENsYXNzTG9hZGVyKCksIDgpOworICAgIH0KIAotCVN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGxvb2t1cCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGxvb2t1cCIpOwogKi8KLQlPYmplY3QgbyA9IGljLmxvb2t1cChqbmRpTmFtZSk7Ci0vLwlTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGxvb2t1cCBsb29rdXAiKTsKKyAgICBPYmplY3QgbyA9IGljLmxvb2t1cChqbmRpTmFtZSk7CisvLyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGxvb2t1cCBsb29rdXAiKTsKIAotCSAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpbyA7CisgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlvIDsKIC8qCi0JU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBjYXN0Iik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tIFRyeWluZyBvdXIgU3R1ZmYgISEhIik7Ci0JdHJ5IHsKLQkJQ2xhc3MgbzEgPSAoQ2xhc3MuZm9yTmFtZSgiY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UiKSk7Ci0JCUNsYXNzTG9hZGVyIGNsMSA9IG8xLmdldENsYXNzTG9hZGVyKCk7Ci0JCUNsYXNzTG9hZGVyIGNsMiA9IERhdGFTb3VyY2UuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDbDEgPT0gQ2wyIiArIChjbDEgPT0gY2wyKSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3NlcyBlcXVhbCIgKyAoRGF0YVNvdXJjZS5jbGFzcyA9PSBvMSkpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBjYXN0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tIFRyeWluZyBvdXIgU3R1ZmYgISEhIik7CisgICAgdHJ5IHsKKyAgICAgICAgQ2xhc3MgbzEgPSAoQ2xhc3MuZm9yTmFtZSgiY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UiKSk7CisgICAgICAgIENsYXNzTG9hZGVyIGNsMSA9IG8xLmdldENsYXNzTG9hZGVyKCk7CisgICAgICAgIENsYXNzTG9hZGVyIGNsMiA9IERhdGFTb3VyY2UuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbDEgPT0gQ2wyIiArIChjbDEgPT0gY2wyKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3NlcyBlcXVhbCIgKyAoRGF0YVNvdXJjZS5jbGFzcyA9PSBvMSkpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAqLwogICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBTdHJpbmcgZnVsbFRhYmxlTmFtZSA9IHRhYmxlTmFtZTsKLQkgICAgaWYgKHNjaGVtYU5hbWUgIT0gbnVsbCAmJiAoIShzY2hlbWFOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSkpIHsKLQkgICAgICAgIGZ1bGxUYWJsZU5hbWUgPSBzY2hlbWFOYW1lLnRyaW0oKSArICIuIiArIGZ1bGxUYWJsZU5hbWU7Ci0JICAgIH0KLQkgICAgU3RyaW5nIHFyeSA9ICJzZWxlY3QgKiBmcm9tICIgKyBmdWxsVGFibGVOYW1lOyAKKyAgICAgICAgU3RyaW5nIGZ1bGxUYWJsZU5hbWUgPSB0YWJsZU5hbWU7CisgICAgICAgIGlmIChzY2hlbWFOYW1lICE9IG51bGwgJiYgKCEoc2NoZW1hTmFtZS50cmltKCkuZXF1YWxzKCIiKSkpKSB7CisgICAgICAgICAgICBmdWxsVGFibGVOYW1lID0gc2NoZW1hTmFtZS50cmltKCkgKyAiLiIgKyBmdWxsVGFibGVOYW1lOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBxcnkgPSAic2VsZWN0ICogZnJvbSAiICsgZnVsbFRhYmxlTmFtZTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyBxdWVyeSA6IiArIHFyeSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0aW5nIHF1ZXJ5IDoiICsgcXJ5KTsKIAotCSAgICBzID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBycyA9IHMuZXhlY3V0ZVF1ZXJ5KHFyeSk7IAorICAgICAgICBzID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBycyA9IHMuZXhlY3V0ZVF1ZXJ5KHFyeSk7CiAKICAgICAgICAgICAgIGludCBpID0gMDsKLQkgICAgaWYgKHJzLm5leHQoKSkgewotCSAgICAgICAgaSsrOwotCSAgICB9CisgICAgICAgIGlmIChycy5uZXh0KCkpIHsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vIG9mIHJvd3MgZm91bmQ6IiArIGkpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJObyBvZiByb3dzIGV4cGVjdGVkOiIgKyBub09mUm93cyk7CiAKLQkgICAgaWYgKGkgPT0gbm9PZlJvd3MuaW50VmFsdWUoKSkgewotCSAgICAgICBiID0gdHJ1ZTsKLQkgICAgfSBlbHNlIHsKLQkgICAgICAgYiA9IGZhbHNlOwotCSAgICB9Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBiID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGlmIChycyAhPSBudWxsKSBycy5jbG9zZSgpOwotCSAgICAgICAgaWYgKHMgIT0gbnVsbCkgcy5jbG9zZSgpOwotCSAgICAgICAgaWYgKGNvbiAhPSBudWxsKSBjb24uY2xvc2UoKTsKKyAgICAgICAgaWYgKGkgPT0gbm9PZlJvd3MuaW50VmFsdWUoKSkgeworICAgICAgICAgICBiID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgYiA9IGZhbHNlOworICAgICAgICB9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBiID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChycyAhPSBudWxsKSBycy5jbG9zZSgpOworICAgICAgICAgICAgaWYgKHMgIT0gbnVsbCkgcy5jbG9zZSgpOworICAgICAgICAgICAgaWYgKGNvbiAhPSBudWxsKSBjb24uY2xvc2UoKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIH0KLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJSZXR1cm5pbmcgc2V0dXAgOiIgK2IpOwotCXJldHVybiBiOworICAgICAgICB9CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuaW5nIHNldHVwIDoiICtiKTsKKyAgICByZXR1cm4gYjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YQppbmRleCA4ZWJlMDU3Li5jNTRhMjE2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCkBAIC0yMyw0NSArMjMsNDUgQEAKIC8qKgogICogPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBMb2NhbFRyYW5zYWN0aW9uIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTG9jYWxUcmFuc2FjdGlvbiB7Ci0gICAgCisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+LgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCByZXR1cm5zCi0gICAgICoJCQl0aGlzIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IG9iamVjdCBhcwotICAgICAqCQkJYSByZXN1bHQgb2YgPGNvZGU+Z2V0TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgcmV0dXJucworICAgICAqICAgICAgICAgICAgdGhpcyA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBvYmplY3QgYXMKKyAgICAgKiAgICAgICAgICAgIGEgcmVzdWx0IG9mIDxjb2RlPmdldExvY2FsVHJhbnNhY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIExvY2FsVHJhbnNhY3Rpb24oTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEJlZ2luIGEgbG9jYWwgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGJlZ2luKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvblN0YXJ0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvblN0YXJ0ZWQoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKS5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IGEgbG9jYWwgdHJhbnNhY3Rpb24uCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbiBvciBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gb3IgY29tbWl0dGluZyB0aGUgdHJhbnNhY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBFeGNlcHRpb24gZSA9IG51bGw7CkBAIC03MiwxNSArNzIsMTUgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSb2xsYmFjayBhIGxvY2FsIHRyYW5zYWN0aW9uLgotICAgICAqIAotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24gb3Igcm9sbGluZyBiYWNrIHRoZSB0cmFuc2FjdGlvbgorICAgICAqCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBvciByb2xsaW5nIGJhY2sgdGhlIHRyYW5zYWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKaW5kZXggMzBmNDYwYS4uMmRhZDU5YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCkBAIC00MSw4ICs0MSw4IEBACiAvKioKICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIyCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMgorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gewogCkBAIC01Miw3ICs1Miw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gaXNEZXN0cm95ZWQgPSBmYWxzZTsKICAgICBwcml2YXRlIGJvb2xlYW4gaXNVc2FibGUgPSB0cnVlOwotICAgIAorCiAgICAgcHJpdmF0ZSBpbnQgY29ubmVjdGlvblR5cGUgPSBJU05PVEFQT09MRURDT05ORUNUSU9OOwogICAgIHByaXZhdGUgUG9vbGVkQ29ubmVjdGlvbiBwYyA9IG51bGw7CiAgICAgcHJpdmF0ZSBqYXZhLnNxbC5Db25uZWN0aW9uIGFjdHVhbENvbm5lY3Rpb24gPSBudWxsOwpAQCAtNjIsNyArNjIsNyBAQAogICAgIHByaXZhdGUgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiA9IG51bGw7CiAgICAgcHJpdmF0ZSBYQVJlc291cmNlIHhhciA9IG51bGw7CiAgICAgcHVibGljIENvbm5lY3Rpb25Ib2xkZXIgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZTsKLSAgICAKKwogICAgIC8vR0pDSU5UCiAgICAgcHJpdmF0ZSBpbnQgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZDsKICAgICBwcml2YXRlIGJvb2xlYW4gaXNDbGVhbiA9IGZhbHNlOwpAQCAtNzcsNzEgKzc3LDcxIEBACiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LiBUaGUgcG9vbGVkQ29ubiBwYXJhbWV0ZXIgaXMgZXhwZWN0ZWQKLSAgICAgKiB0byBiZSBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlciBpcyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gY2FzZSB3aGVyZSAKLSAgICAgKiB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaXMgZ290IGZyb20gYSBub24gcG9vbGVkIGRhdGFzb3VyY2Ugb2JqZWN0LiBUaGUgCisgICAgICogdG8gYmUgbnVsbCBhbmQgc3FsQ29ubiBwYXJhbWV0ZXIgaXMgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIGNhc2Ugd2hlcmUKKyAgICAgKiB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaXMgZ290IGZyb20gYSBub24gcG9vbGVkIGRhdGFzb3VyY2Ugb2JqZWN0LiBUaGUKICAgICAgKiBwb29sZWRDb25uIHBhcmFtZXRlciBpcyBleHBlY3RlZCB0byBiZSBub24gbnVsbCBhbmQgc3FsQ29ubiBwYXJhbWV0ZXIKICAgICAgKiBpcyBleHBlY3RlZCB0byBiZSBudWxsIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBkYXRhc291cmNlIG9iamVjdCBpcyBhCiAgICAgICogY29ubmVjdGlvbiBwb29sIGRhdGFzb3VyY2Ugb3IgYW4geGEgZGF0YXNvdXJjZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb29sZWRDb25uCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSAKLSAgICAgKgkJCQlwaHlzaWNhbCBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBwb29sZWQKLSAgICAgKgkJCQk8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsgbnVsbCBvdGhlcndpc2UKLSAgICAgKiBAcGFyYW0Jc3FsQ29ubgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCWNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIG5vbiBwb29sZWQgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47Ci0gICAgICoJCQludWxsIG90aGVyd2lzZQotICAgICAqIEBwYXJhbQlwYXNzd2RDcmVkCW9iamVjdCBjb25hdGluaW5nIHRoZQotICAgICAqCQkJCXVzZXIgYW5kIHBhc3N3b3JkIGZvciBhbGxvY2F0aW5nIHRoZSBjb25uZWN0aW9uCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKLSAgICAgKgkJCQkJdGhhdCBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqCQkJCQlpcyBub3QgdGhlIHNhbWUgYXMgcmV0dXJuZWQgYnkgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqCQkJCQlvYmplY3QgcGFzc2VkCisgICAgICogQHBhcmFtICAgIHBvb2xlZENvbm4gICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlCisgICAgICogICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgcG9vbGVkCisgICAgICogICAgICAgICAgICAgICAgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47IG51bGwgb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHNxbENvbm4gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBub24gcG9vbGVkIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OworICAgICAqICAgICAgICAgICAgbnVsbCBvdGhlcndpc2UKKyAgICAgKiBAcGFyYW0gICAgcGFzc3dkQ3JlZCAgICBvYmplY3QgY29uYXRpbmluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICB1c2VyIGFuZCBwYXNzd29yZCBmb3IgYWxsb2NhdGluZyB0aGUgY29ubmVjdGlvbgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgIHRoYXQgY3JlYXRlZCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgaXMgbm90IHRoZSBzYW1lIGFzIHJldHVybmVkIGJ5IDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb2JqZWN0IHBhc3NlZAogICAgICAqLwotICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbihQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4sIGphdmEuc3FsLkNvbm5lY3Rpb24gc3FsQ29ubiwgCisgICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubiwgamF2YS5zcWwuQ29ubmVjdGlvbiBzcWxDb25uLAogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGFzc3dkQ3JlZCwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYocG9vbGVkQ29ubiA9PSBudWxsICYmIHNxbENvbm4gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDb25uZWN0aW9uIG9iamVjdCBjYW5ub3QgYmUgbnVsbCIpOwogICAgICAgICB9CiAKLQlpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKLQkgICAgYWN0dWFsQ29ubmVjdGlvbiA9IHNxbENvbm47Ci0JfQorICAgIGlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgeworICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gc3FsQ29ubjsKKyAgICB9CiAKICAgICAgICAgcGMgPSBwb29sZWRDb25uOwogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG5ldyBIYXNodGFibGUoKTsKICAgICAgICAgcGFzc3dkQ3JlZGVudGlhbCA9IHBhc3N3ZENyZWQ7CiAgICAgICAgIHRoaXMubWNmID0gbWNmOwotICAgICAgICBpZihwYXNzd2RDcmVkZW50aWFsICE9IG51bGwgJiYgIAorICAgICAgICBpZihwYXNzd2RDcmVkZW50aWFsICE9IG51bGwgJiYKICAgICAgICAgICAgIHRoaXMubWNmLmVxdWFscyhwYXNzd2RDcmVkZW50aWFsLmdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpKSA9PSBmYWxzZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHRoYXQgaGFzIGNyZWF0ZWQgdGhpcyAiICsgCisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgdGhhdCBoYXMgY3JlYXRlZCB0aGlzICIgKwogICAgICAgICAgICAgICAgICJNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSByZXR1cm5lZCBieSIgKwogICAgICAgICAgICAgICAgICAgICAiIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgZm9yIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgICAgICBsb2dXcml0ZXIgPSBtY2YuZ2V0TG9nV3JpdGVyKCk7CiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotCWNlID0gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9DTE9TRUQpOworICAgIGNlID0gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9DTE9TRUQpOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIEFkZHMgYSBjb25uZWN0aW9uIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlsaXN0ZW5lcgk8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbGlzdGVuZXIgICAgPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICogQHNlZSA8Y29kZT5yZW1vdmVDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhZGRDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcihDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBsaXN0ZW5lcikgewotCXRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjsKKyAgICB0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVXNlZCBieSB0aGUgY29udGFpbmVyIHRvIGNoYW5nZSB0aGUgYXNzb2NpYXRpb24gb2YgYW4gYXBwbGljYXRpb24tbGV2ZWwgCisgICAgICogVXNlZCBieSB0aGUgY29udGFpbmVyIHRvIGNoYW5nZSB0aGUgYXNzb2NpYXRpb24gb2YgYW4gYXBwbGljYXRpb24tbGV2ZWwKICAgICAgKiBjb25uZWN0aW9uIGhhbmRsZSB3aXRoIGEgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWNvbm5lY3Rpb24JPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoCi0gICAgICoJCQkJdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUKLSAgICAgKgkJCQkJdmFsaWQgb3IgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIHBhc3NlZCBpcyBudWxsCisgICAgICogQHBhcmFtICAgIGNvbm5lY3Rpb24gICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoCisgICAgICogICAgICAgICAgICAgICAgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdmFsaWQgb3IgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIHBhc3NlZCBpcyBudWxsCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYXNzb2NpYXRlQ29ubmVjdGlvbihPYmplY3QgY29ubmVjdGlvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTE1MiwxMSArMTUyLDExIEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNvbm5lY3Rpb24gaGFuZGxlIGNhbm5vdCBiZSBudWxsIik7CiAgICAgICAgIH0KICAgICAgICAgQ29ubmVjdGlvbkhvbGRlciBjaCA9IChDb25uZWN0aW9uSG9sZGVyKSBjb25uZWN0aW9uOwotICAgICAgICAKKwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSAoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uKWNoLmdldE1hbmFnZWRDb25uZWN0aW9uKCk7Ci0JbWMuYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0JaXNDbGVhbiA9IGZhbHNlOwotICAgICAgICAKKyAgICBtYy5hY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKKyAgICBpc0NsZWFuID0gZmFsc2U7CisKICAgICAgICAgY2guYXNzb2NpYXRlQ29ubmVjdGlvbihhY3R1YWxDb25uZWN0aW9uLCB0aGlzKTsKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBleHBlY3RhdGlvbiBmcm9tIHRoZSBhYm92ZSBtZXRob2QgaXMgdGhhdCB0aGUgY29ubmVjdGlvbiBob2xkZXIKQEAgLTE2NSwzNCArMTY1LDM0IEBACiAgICAgICAgICAqIHRvIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZSB3aXRoIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2UuCiAgICAgICAgICAqIEFueSBwcmV2aW91cyBzdGF0ZW1lbnRzIGFuZCByZXN1bHQgc2V0cyBhbHNvIG5lZWQgdG8gYmUgcmVtb3ZlZC4KICAgICAgICAgICovCi0gICAgICAgICAKKwogICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlLnNldEFjdGl2ZShmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgY2guc2V0QWN0aXZlKHRydWUpOwotICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7IAorICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQXBwbGljYXRpb24gc2VydmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIGZvcmNlIGFueSBjbGVhbnVwIG9uIHRoZSAKKyAgICAgKiBBcHBsaWNhdGlvbiBzZXJ2ZXIgY2FsbHMgdGhpcyBtZXRob2QgdG8gZm9yY2UgYW55IGNsZWFudXAgb24gdGhlCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLiBUaGlzIG1ldGhvZCBjYWxscyB0aGUgaW52YWxpZGF0ZQogICAgICAqIG1ldGhvZCBvbiBhbGwgQ29ubmVjdGlvbkhhbmRsZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgotICAgICAqIAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZSB2YWxpZAorICAgICAqCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlIHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY2xlYW51cCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGNsZWFudXAiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgLyoqCiAgICAgICAgICAqIG1heSBuZWVkIHRvIHNldCB0aGUgYXV0b2NvbW1pdCB0byB0cnVlIGZvciB0aGUgbm9uLXBvb2xlZCBjYXNlLgogICAgICAgICAgKi8KICAgICAgICAgLy9HSkNJTlQKLQkvL2lmIChhY3R1YWxDb25uZWN0aW9uICE9IG51bGwpIHsKLQlpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKKyAgICAvL2lmIChhY3R1YWxDb25uZWN0aW9uICE9IG51bGwpIHsKKyAgICBpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQgPSBhY3R1YWxDb25uZWN0aW9uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKQEAgLTIwMSwxNyArMjAxLDE3IEBACiAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpc0NsZWFuID0gdHJ1ZTsKLSAgICAgICAgCisKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhbGwgdGhlIGNvbm5lY3Rpb24gaGFuZGxlcyBmcm9tIHRoZSB0YWJsZQogICAgICAqIG9mIGNvbm5lY3Rpb24gaGFuZGxlcyBhbmQgaW52YWxpZGF0ZXMgYWxsIG9mIHRoZW0gc28gdGhhdCBhbnkKICAgICAgKiBvcGVyYXRpb24gb24gdGhvc2UgY29ubmVjdGlvbiBoYW5kbGVzIHRocm93cyBhbiBleGNlcHRpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGEgcHJvYmxlbSBpbiByZXRyaWV2aW5nCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAl0aGUgY29ubmVjdGlvbiBoYW5kbGVzCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhIHByb2JsZW0gaW4gcmV0cmlldmluZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbm5lY3Rpb24gaGFuZGxlcwogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBpbnZhbGlkYXRlQWxsQ29ubmVjdGlvbkhhbmRsZXMoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBTZXQgaGFuZGxlcyA9IGNvbm5lY3Rpb25IYW5kbGVzLmtleVNldCgpOwpAQCAtMjI2LDIyICsyMjYsMjIgQEAKICAgICAgICAgfQogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcy5jbGVhcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIERlc3Ryb3lzIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIHJlc291cmNlIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjbG9zaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNsb3NpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGRlc3Ryb3kiKTsKICAgICAgICAgfQotCS8vR0pDSU5UCi0JaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSkgewotCSAgICByZXR1cm47CQotCX0KKyAgICAvL0dKQ0lOVAorICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotCWFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOworICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OKSB7CiAgICAgICAgICAgICAgICAgcGMuY2xvc2UoKTsKQEAgLTI1NSwyOCArMjU1LDI4IEBACiAgICAgICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7CiAgICAgICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gbnVsbDsKICAgICAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbnVsbDsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGZvbGxvd2luZyBleGNlcHRpb24gaGFzIG9jY3VyZWQgZHVyaW5nIGRlc3Ryb3k6ICIgCisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uIGhhcyBvY2N1cmVkIGR1cmluZyBkZXN0cm95OiAiCiAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlOwogICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gbnVsbDsKICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcgY29ubmVjdGlvbiBoYW5kbGUgZm9yIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIAorICAgICAqIENyZWF0ZXMgYSBuZXcgY29ubmVjdGlvbiBoYW5kbGUgZm9yIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsCiAgICAgICogY29ubmVjdGlvbiByZXByZXNlbnRlZCBieSB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIG5lZWRlZCBmb3IgYXV0aGVudGljYXRpb24KLSAgICAgKiBAcGFyYW0JY3hSZXFJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gY2FycmllcyB0aGUgdXNlciAKLSAgICAgKiAgICAgICAJICAgICAgICAgCWFuZCBwYXNzd29yZCByZXF1aXJlZCBmb3IgZ2V0dGluZyB0aGlzIGNvbm5lY3Rpb24uCi0gICAgICogQHJldHVybglDb25uZWN0aW9uCXRoZSBjb25uZWN0aW9uIGhhbmRsZSA8Y29kZT5PYmplY3Q8L2NvZGU+Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBoeXNpY2FsIGNvbm5lY3Rpb24gZnJvbSB0aGUgcG9vbGVkIGNvbm5lY3Rpb24gCi0gICAgICogQHRocm93cwlTZWN1cml0eUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlwYXNzd29yZCBjcmVkZW50aWFscyBvciByZWF1dGhlbnRpY2F0aW9uIGlzIHJlcXVlc3RlZAorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IHBhcmFtZXRlciBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uCisgICAgICogQHBhcmFtICAgIGN4UmVxSW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGNhcnJpZXMgdGhlIHVzZXIKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBwYXNzd29yZCByZXF1aXJlZCBmb3IgZ2V0dGluZyB0aGlzIGNvbm5lY3Rpb24uCisgICAgICogQHJldHVybiAgICBDb25uZWN0aW9uICAgIHRoZSBjb25uZWN0aW9uIGhhbmRsZSA8Y29kZT5PYmplY3Q8L2NvZGU+CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sZWQgY29ubmVjdGlvbgorICAgICAqIEB0aHJvd3MgICAgU2VjdXJpdHlFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQgY3JlZGVudGlhbHMgb3IgcmVhdXRoZW50aWNhdGlvbiBpcyByZXF1ZXN0ZWQKICAgICAgKi8KLSAgICBwdWJsaWMgT2JqZWN0IGdldENvbm5lY3Rpb24oU3ViamVjdCBzdWIsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcUluZm8pIAorICAgIHB1YmxpYyBPYmplY3QgZ2V0Q29ubmVjdGlvbihTdWJqZWN0IHN1YiwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxSW5mbykKICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRDb25uZWN0aW9uIik7CkBAIC0yODQsMTQgKzI4NCwxNCBAQAogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvID0gKGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8pIGN4UmVxSW5mbzsKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3N3ZENyZWQgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLm1jZiwgc3ViLCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIGlmKFNlY3VyaXR5VXRpbHMuaXNQYXNzd29yZENyZWRlbnRpYWxFcXVhbCh0aGlzLnBhc3N3ZENyZWRlbnRpYWwsIHBhc3N3ZENyZWQpID09IGZhbHNlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5zcGkuU2VjdXJpdHlFeGNlcHRpb24oIlJlLWF1dGhlbnRpY2F0aW9uIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvL0dKQ0lOVAogICAgICAgICBnZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gCisKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBmb2xsb3dpbmcgY29kZSBpbiB0aGUgaWYgc3RhdGVtZW50IGZpcnN0IGNoZWNrcyBpZiB0aGlzIE1hbmFnZWRDb25uZWN0aW9uCiAgICAgICAgICAqIGlzIGNsZWFuIG9yIG5vdC4gSWYgaXQgaXMsIGl0IHJlc2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIHRvIHdoYXQKQEAgLTMwMSwyOCArMzAxLDI4IEBACiAgICAgICAgIGlmKGlzQ2xlYW4pIHsKICAgICAgICAgICAgICgoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSltY2YpLnJlc2V0SXNvbGF0aW9uKHRoaXMsIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAgCisKKwogICAgICAgICBDb25uZWN0aW9uSG9sZGVyIGNvbm5Ib2xkZXJPYmplY3QgPSBuZXcgQ29ubmVjdGlvbkhvbGRlcihhY3R1YWxDb25uZWN0aW9uLCB0aGlzKTsKLQlpc0NsZWFuPWZhbHNlOwotICAgICAgICAKKyAgICBpc0NsZWFuPWZhbHNlOworCiAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgIT0gbnVsbCkgewogICAgICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZS5zZXRBY3RpdmUoZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNvbm5Ib2xkZXJPYmplY3Quc2V0QWN0aXZlKHRydWUpOwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY29ubkhvbGRlck9iamVjdDsKLSAKKwogICAgICAgICByZXR1cm4gY29ubkhvbGRlck9iamVjdDsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGFuIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlLiBUaGUgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW50ZXJmYWNlCi0gICAgICogaXMgdXNlZCBieSB0aGUgY29udGFpbmVyIHRvIG1hbmFnZSBsb2NhbCB0cmFuc2FjdGlvbnMgZm9yIGEgUk0gaW5zdGFuY2UuIAorICAgICAqIGlzIHVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBtYW5hZ2UgbG9jYWwgdHJhbnNhY3Rpb25zIGZvciBhIFJNIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLkxvY2FsVHJhbnNhY3Rpb24gZ2V0TG9jYWxUcmFuc2FjdGlvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0zMzEsMTMgKzMzMSwxMyBAQAogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgcmV0dXJuIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTG9jYWxUcmFuc2FjdGlvbih0aGlzKTsKICAgICB9Ci0gICAgIAorCiAgICAgLyoqCi0gICAgICogR2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuIAorICAgICAqIEdldHMgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKiBAc2VlIDxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgUHJpbnRXcml0ZXIgZ2V0TG9nV3JpdGVyKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKQEAgLTM0NSw0NiArMzQ1LDQ2IEBACiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldExvZ1dyaXRlciIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbG9nV3JpdGVyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEdldHMgdGhlIG1ldGFkYXRhIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbm5lY3Rpb24ncyB1bmRlcmx5aW5nIEVJUyAKLSAgICAgKiByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlLiAKKyAgICAgKiBHZXRzIHRoZSBtZXRhZGF0YSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb25uZWN0aW9uJ3MgdW5kZXJseWluZyBFSVMKKyAgICAgKiByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgZ2V0TWV0YURhdGEoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRNZXRhRGF0YSIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhKHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgYW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuIAorICAgICAqIFJldHVybnMgYW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKLSAgICAgKgkJCQkJdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlOb3RTdXBwb3J0ZWRFeGNlcHRpb24JaWYgdW5kZXJseWluZyBkYXRhc291cmNlIGlzIG5vdCBhbgotICAgICAqCQkJCQk8Y29kZT5YQURhdGFTb3VyY2U8L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgICAgIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gICAgaWYgdW5kZXJseWluZyBkYXRhc291cmNlIGlzIG5vdCBhbgorICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5YQURhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2UgZ2V0WEFSZXNvdXJjZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldFhBUmVzb3VyY2UiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYoeGFyID09IG51bGwpIHsKLQkJICAgIC8qKgorICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgICAgICAqIFVzaW5nIHRoZSB3cmFwcGVyIFhBUmVzb3VyY2UuCiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICB4YXIgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLlhBUmVzb3VyY2VJbXBsKCgoWEFDb25uZWN0aW9uKXBjKS5nZXRYQVJlc291cmNlKCksIHRoaXMpOwpAQCAtMzk3LDE2ICszOTcsMTYgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkNhbm5vdCBnZXQgYW4gWEFSZXNvdXJjZSBmcm9tIGEgbm9uIFhBIGNvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlbW92ZXMgYW4gYWxyZWFkeSByZWdpc3RlcmVkIGNvbm5lY3Rpb24gZXZlbnQgbGlzdGVuZXIgZnJvbSB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGlzdGVuZXIJPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+IHRvIGJlIHJlbW92ZWQKKyAgICAgKiBAcGFyYW0gICAgbGlzdGVuZXIgICAgPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+IHRvIGJlIHJlbW92ZWQKICAgICAgKiBAc2VlIDxjb2RlPmFkZENvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJlbW92ZUNvbm5lY3Rpb25FdmVudExpc3RlbmVyKENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JbGlzdGVuZXIgPSBudWxsOworICAgIGxpc3RlbmVyID0gbnVsbDsKICAgICB9CiAKICAgICAvKioKQEAgLTQxNSw3ICs0MTUsNyBAQAogICAgICAqIExvY2FsVHJhbnNhY3Rpb24gb2JqZWN0IHdoZW4gaXRzIGJlZ2luKCkgbWV0aG9kIGlzIGNhbGxlZC4KICAgICAgKi8KICAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZCgpIHsKLQl0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOwkKKyAgICB0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDI0LDE2ICs0MjQsMTYgQEAKICAgICAgKiBMb2NhbFRyYW5zYWN0aW9uIG9iamVjdCB3aGVuIGl0cyBlbmQoKSBtZXRob2QgaXMgY2FsbGVkLgogICAgICAqLwogICAgIHZvaWQgdHJhbnNhY3Rpb25Db21wbGV0ZWQoKSB7Ci0JdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7Ci0JaWYoY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OIHx8IGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OKSB7CisgICAgdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7CisgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OIHx8IGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQgPSBhY3R1YWxDb25uZWN0aW9uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7CiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAvL2NoZWNrIHdoYXQgdG8gZG8gaW4gdGhpcyBjYXNlISEKLQkJX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMubm90Z290X3R4X2lzb2x2bCIpOworICAgICAgICAgICAgLy9jaGVjayB3aGF0IHRvIGRvIGluIHRoaXMgY2FzZSEhCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLm5vdGdvdF90eF9pc29sdmwiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotCSAgICB0cnkgeworCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbi5jbG9zZSgpOwogICAgICAgICAgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewpAQCAtNDQxLDcgKzQ0MSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotCSAgICAgICAgCisKICAgICAgICAgaXNDbGVhbiA9IHRydWU7CiAKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CkBAIC00NTMsMjggKzQ1MywyOCBAQAogICAgICAqIG9yIG5vdC4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpIHsKLQlyZXR1cm4gdHJhbnNhY3Rpb25JblByb2dyZXNzOworICAgIHJldHVybiB0cmFuc2FjdGlvbkluUHJvZ3Jlc3M7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb3V0CTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcwotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcGFyYW0gICAgb3V0ICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKiBAc2VlIDxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dXcml0ZXIoUHJpbnRXcml0ZXIgb3V0KSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgbG9nV3JpdGVyID0gb3V0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgdGhlIHR5cGUgb2YgdGhlIGNvbm5lY3Rpb24gYmVpbmcgaGVsZCAKKyAgICAgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mIHRoZSBjb25uZWN0aW9uIGJlaW5nIGhlbGQKICAgICAgKiBpbiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JcG9vbGVkQ29ubgk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEByZXR1cm4JY29ubmVjdGlvbiB0eXBlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgcG9vbGVkQ29ubiAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB0eXBlCiAgICAgICovCiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q29ubmVjdGlvblR5cGUoUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uKSB7CiAgICAgICAgIGlmKHBvb2xlZENvbm4gPT0gbnVsbCkgewpAQCAtNDg1LDIyICs0ODUsMjIgQEAKICAgICAgICAgICAgIHJldHVybiBJU1BPT0xFRENPTk5FQ1RJT047CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgCisgICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0CiAgICAgICogY3JlYXRlZCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IGNyZWF0ZWQgdGhpcwotICAgICAqCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCBjcmVhdGVkIHRoaXMKKyAgICAgKiAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCiAgICAgICovCiAgICAgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpIHsKICAgICAgICAgcmV0dXJuIChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KW1jZjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgc3FsIGNvbm5lY3Rpb24gZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LiAKKyAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgc3FsIGNvbm5lY3Rpb24gZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgogICAgICAqCi0gICAgICogQHJldHVybgl0aGUgcGh5c2ljYWwgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRoZSBwaHlzaWNhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPgogICAgICAqLwogICAgIC8vR0pDSU5UCiAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBnZXRBY3R1YWxDb25uZWN0aW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKQEAgLTUwOSw4ICs1MDksOCBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZihhY3R1YWxDb25uZWN0aW9uID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IHBjLmdldENvbm5lY3Rpb24oKTsKLQkJfQotCQkKKyAgICAgICAgfQorCiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CiAgICAgICAgICAgICAgICAgc3FsZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwpAQCAtNTE4LDgxICs1MTgsODEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYWN0dWFsQ29ubmVjdGlvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKICAgICAgKi8KICAgICBQYXNzd29yZENyZWRlbnRpYWwgZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCkgewogICAgICAgICByZXR1cm4gcGFzc3dkQ3JlZGVudGlhbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90IGFuZCB0aHJvd3MgYW4KICAgICAgKiBleGNlcHRpb24gaWYgaXQgaXMgbm90IHZhbGlkLiBBIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyBub3QgdmFsaWQgaWYKICAgICAgKiBkZXN0cm95IGhhcyBub3QgYmVlbiBjYWxsZWQgYW5kIG5vIHBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3IgaGFzCiAgICAgICogb2NjdXJyZWQgcmVuZGVyaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIHVudXNhYmxlLgogICAgICAqCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiA8Y29kZT5kZXN0cm95PC9jb2RlPiBoYXMgYmVlbiBjYWxsZWQgb24gdGhpcyAKLSAgICAgKgkJCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIG9yIGlmIGEgCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlwaHlzaWNhbCBjb25uZWN0aW9uIGVycm9yIG9jY3VycmVkIHJlbmRlcmluZyBpdCB1bnVzYWJsZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgPGNvZGU+ZGVzdHJveTwvY29kZT4gaGFzIGJlZW4gY2FsbGVkIG9uIHRoaXMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIG9yIGlmIGEKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJyZWQgcmVuZGVyaW5nIGl0IHVudXNhYmxlCiAgICAgICovCiAgICAgLy9HSkNJTlQKICAgICB2b2lkIGNoZWNrSWZWYWxpZCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUgfHwgaXNVc2FibGUgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgdGhlIHBoeXNpY2FsICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgdGhlIHBoeXNpY2FsICIgKwogICAgICAgICAgICAgICAgICJjb25uZWN0aW9uIGlzIG5vdCB1c2FibGUuIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHdoZW4gaXRzIGNsb3NlIG1ldGhvZCBpcwogICAgICAqIGNhbGxlZC4gVGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UgIGludmFsaWRhdGVzIHRoZSBjb25uZWN0aW9uIGhhbmRsZQogICAgICAqIGFuZCBzZW5kcyBhIENPTk5FQ1RJT05fQ0xPU0VEIGV2ZW50IHRvIGFsbCB0aGUgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZQlFeGNlcHRpb24gdGhhdCBtYXkgaGF2ZSBvY2N1cmVkIHdoaWxlIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCi0gICAgICogQHBhcmFtCWNvbm5Ib2xkZXJPYmplY3QJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBoYXMgYmVlbiBjbG9zZWQKLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglpbiBjYXNlIGNsb3NpbmcgdGhlIHNxbCBjb25uZWN0aW9uIGdvdCBvdXQgb2YKLSAgICAgKiAgICAgICAgIAkgICAgICAgICAgICAJPGNvZGU+Z2V0Q29ubmVjdGlvbjwvY29kZT4gb24gdGhlIHVuZGVybHlpbmcgCi0gICAgICoJCQkJPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gdGhyb3dzIGFuIGV4Y2VwdGlvbgorICAgICAqIEBwYXJhbSAgICBlICAgIEV4Y2VwdGlvbiB0aGF0IG1heSBoYXZlIG9jY3VyZWQgd2hpbGUgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKKyAgICAgKiBAcGFyYW0gICAgY29ubkhvbGRlck9iamVjdCAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGhhcyBiZWVuIGNsb3NlZAorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIGluIGNhc2UgY2xvc2luZyB0aGUgc3FsIGNvbm5lY3Rpb24gZ290IG91dCBvZgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5nZXRDb25uZWN0aW9uPC9jb2RlPiBvbiB0aGUgdW5kZXJseWluZworICAgICAqICAgICAgICAgICAgICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IHRocm93cyBhbiBleGNlcHRpb24KICAgICAgKi8KICAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoRXhjZXB0aW9uIGUsIENvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGNvbm5Ib2xkZXJPYmplY3QuaW52YWxpZGF0ZSgpOwotICAgICAgICAKKwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgY2Uuc2V0Q29ubmVjdGlvbkhhbmRsZShjb25uSG9sZGVyT2JqZWN0KTsKICAgICAgICAgbGlzdGVuZXIuY29ubmVjdGlvbkNsb3NlZChjZSk7Ci0JCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHdoZW4gaXQgZGV0ZWN0cyBhIGNvbm5lY2lvbgogICAgICAqIHJlbGF0ZWQgZXJyb3IuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZQlFeGNlcHRpb24gdGhhdCBoYXMgb2NjdXJyZWQgZHVyaW5nIGFuIG9wZXJhdGlvbiBvbiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgotICAgICAqIEBwYXJhbQljb25uSG9sZGVyT2JqZWN0CTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgZGV0ZWN0ZWQgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCWNvbm5lY3Rpb24gZXJyb3IKKyAgICAgKiBAcGFyYW0gICAgZSAgICBFeGNlcHRpb24gdGhhdCBoYXMgb2NjdXJyZWQgZHVyaW5nIGFuIG9wZXJhdGlvbiBvbiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSAgICBjb25uSG9sZGVyT2JqZWN0ICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgZGV0ZWN0ZWQgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gZXJyb3IKICAgICAgKi8KLSAgICB2b2lkIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKEV4Y2VwdGlvbiBlLCAKKyAgICB2b2lkIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKEV4Y2VwdGlvbiBlLAogICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCkgewotCSAgICAKKwogICAgICAgICAgQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgY2VsID0gdGhpcy5saXN0ZW5lcjsKICAgICAgICAgIENvbm5lY3Rpb25FdmVudCBjZSA9IG51bGw7CiAgICAgICAgICBjZSA9IGUgPT0gbnVsbCA/IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fRVJST1JfT0NDVVJSRUQpCiAgICAgICAgICAgICAgICAgICAgIDogbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9FUlJPUl9PQ0NVUlJFRCwgZSk7CiAgICAgICAgICBpZiAoY29ubkhvbGRlck9iamVjdCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgY2Uuc2V0Q29ubmVjdGlvbkhhbmRsZShjb25uSG9sZGVyT2JqZWN0KTsKLSAgICAgICAgIH0gICAgCisgICAgICAgICB9CiAKICAgICAgICAgIGNlbC5jb25uZWN0aW9uRXJyb3JPY2N1cnJlZChjZSk7CiAgICAgICAgICBpc1VzYWJsZSA9IGZhbHNlOwogICAgIH0KLSAgICAKLSAgICAKLSAgICAKKworCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aGVuIGl0cyBzdGFydCBtZXRob2QKICAgICAgKiBoYXMgYmVlbiBpbnZva2VkLgpAQCAtNjA2LDcgKzYwNiw3IEBACiAgICAgICAgICAgICBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChlLCBudWxsKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdoZW4gaXRzIGVuZCBtZXRob2QKICAgICAgKiBoYXMgYmVlbiBpbnZva2VkLgpAQCAtNjIwLDcgKzYyMCw3IEBACiAgICAgICAgICAgICBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChlLCBudWxsKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBhIENvbm5lY3Rpb24gSGFuZGxlIHRvIGNoZWNrIGlmIGl0IGlzCiAgICAgICogdGhlIGFjdGl2ZSBDb25uZWN0aW9uIEhhbmRsZS4gSWYgaXQgaXMgbm90IHRoZSBhY3RpdmUgQ29ubmVjdGlvbgpAQCAtNjI5LDI0ICs2MjksMjQgQEAKICAgICAgKiBDb25uZWN0aW9uIEhhbmRsZSBvYmplY3QgdG8gdGhpcyBvYmplY3QgaWYgdGhlIGFjdGl2ZSBDb25uZWN0aW9uCiAgICAgICogSGFuZGxlIGlzIG51bGwuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2gJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCByZXF1ZXN0cyB0aGlzCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugd2hldGhlcgotICAgICAqCQkJaXQgY2FuIGJlIGFjdGl2ZSBvciBub3QKLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglpbiBjYXNlIHRoZSBwaHlzaWNhbCBpcyBub3QgdmFsaWQgb3IKLSAgICAgKgkJCQl0aGVyZSBpcyBhbHJlYWR5IGFuIGFjdGl2ZSBjb25uZWN0aW9uIGhhbmRsZQorICAgICAqIEBwYXJhbSAgICBjaCAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IHJlcXVlc3RzIHRoaXMKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSB3aGV0aGVyCisgICAgICogICAgICAgICAgICBpdCBjYW4gYmUgYWN0aXZlIG9yIG5vdAorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIGluIGNhc2UgdGhlIHBoeXNpY2FsIGlzIG5vdCB2YWxpZCBvcgorICAgICAqICAgICAgICAgICAgICAgIHRoZXJlIGlzIGFscmVhZHkgYW4gYWN0aXZlIGNvbm5lY3Rpb24gaGFuZGxlCiAgICAgICovCi0gICAgIAorCiAgICAgdm9pZCBjaGVja0lmQWN0aXZlKENvbm5lY3Rpb25Ib2xkZXIgY2gpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBpZihpc0Rlc3Ryb3llZCA9PSB0cnVlIHx8IGlzVXNhYmxlID09IGZhbHNlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJUaGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdXNhYmxlIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9PSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7CiAgICAgICAgICAgICBjaC5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBjaCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaGFuZGxlIGNhbm5vdCBiZSB1c2VkIGFzIGFub3RoZXIgY29ubmVjdGlvbiBpcyBjdXJyZW50bHkgYWN0aXZlIik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQppbmRleCAyMGYwM2FhLi5mNjUwZDQxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiAvKioKICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzAzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgewogCkBAIC00MSw4MSArNDEsODEgQEAKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPglpZiBnZXR0aW5nIHRoZSBEYXRhYmFzZU1ldGFEYXRhIG9iamVjdCBmYWlscworICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiAgICBpZiBnZXR0aW5nIHRoZSBEYXRhYmFzZU1ldGFEYXRhIG9iamVjdCBmYWlscwogICAgICAqLwogICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhKE1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgICAgICAgICAgZG1kID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpLmdldE1ldGFEYXRhKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHByb2R1Y3QgbmFtZSBvZiB0aGUgdW5kZXJseWluZyBFSVMgaW5zdGFuY2UgY29ubmVjdGVkCiAgICAgICogdGhyb3VnaCB0aGUgTWFuYWdlZENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVByb2R1Y3QgbmFtZSBvZiB0aGUgRUlTIGluc3RhbmNlCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIFByb2R1Y3QgbmFtZSBvZiB0aGUgRUlTIGluc3RhbmNlCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEVJU1Byb2R1Y3ROYW1lKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0RGF0YWJhc2VQcm9kdWN0TmFtZSgpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kbmFtZSIsIHNxbGUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZG5hbWUiLCBzcWxlKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgdW5kZXJseWluZyBFSVMgaW5zdGFuY2UgY29ubmVjdGVkCiAgICAgICogdGhyb3VnaCB0aGUgTWFuYWdlZENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgRUlTIGluc3RhbmNlCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIFByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgRUlTIGluc3RhbmNlCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEVJU1Byb2R1Y3RWZXJzaW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0RGF0YWJhc2VQcm9kdWN0VmVyc2lvbigpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kdmVycyIsIHNxbGUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZHZlcnMiLCBzcWxlKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSwgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBtYXhpbXVtIGxpbWl0IG9uIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucwogICAgICAqIHRoYXQgYW4gRUlTIGluc3RhbmNlIGNhbiBzdXBwb3J0IGFjcm9zcyBjbGllbnQgcHJvY2Vzc2VzLgogICAgICAqCi0gICAgICogQHJldHVybglNYXhpbXVtIGxpbWl0IGZvciBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgTWF4aW11bSBsaW1pdCBmb3IgbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldE1heENvbm5lY3Rpb25zKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0TWF4Q29ubmVjdGlvbnMoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfbWF4Y29ubiIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfbWF4Y29ubiIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgbmFtZSBvZiB0aGUgdXNlciBhc3NvY2lhdGVkIHdpdGggdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLiBUaGUgbmFtZQogICAgICAqIGNvcnJlc3BvbmRzIHRvIHRoZSByZXNvdXJjZSBwcmluY2lwYWwgdW5kZXIgd2hvc2Ugd2hvc2Ugc2VjdXJpdHkgY29udGV4dCwgYSBjb25uZWN0aW9uCiAgICAgICogdG8gdGhlIEVJUyBpbnN0YW5jZSBoYXMgYmVlbiBlc3RhYmxpc2hlZC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbmFtZSBvZiB0aGUgdXNlcgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBuYW1lIG9mIHRoZSB1c2VyCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXJOYW1lKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgamFrYXJ0YS5yZXNvdXJjZS5zcGkuc2VjdXJpdHkuUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gbWMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCk7CiAgICAgICAgIGlmKHBjICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBwYy5nZXRVc2VyTmFtZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBtYy5nZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKS5nZXRVc2VyKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKaW5kZXggZGFkMWQ3Ny4uNDgyZjMzMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCkBAIC0yNCwxNDggKzI0LDE0OCBAQAogLyoqCiAgKiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiB3cmFwcGVyIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMjMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzIzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgWEFSZXNvdXJjZUltcGwgaW1wbGVtZW50cyBYQVJlc291cmNlIHsKIAogICAgIFhBUmVzb3VyY2UgeGFyOwogICAgIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIFhBUmVzb3VyY2VJbXBsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGFyCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+Ci0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB4YXIgICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2VJbXBsKFhBUmVzb3VyY2UgeGFyLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLnhhciA9IHhhcjsKICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCB0aGUgZ2xvYmFsIHRyYW5zYWN0aW9uIHNwZWNpZmllZCBieSB4aWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKLSAgICAgKiBAcGFyYW0Jb25lUGhhc2UJSWYgdHJ1ZSwgdGhlIHJlc291cmNlIG1hbmFnZXIgc2hvdWxkIHVzZSBhIG9uZS1waGFzZSBjb21taXQgCi0gICAgICogICAgICAgCSAgICAgICAgCXByb3RvY29sIHRvIGNvbW1pdCB0aGUgd29yayBkb25lIG9uIGJlaGFsZiBvZiB4aWQuCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIG9uZVBoYXNlICAgIElmIHRydWUsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHNob3VsZCB1c2UgYSBvbmUtcGhhc2UgY29tbWl0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sIHRvIGNvbW1pdCB0aGUgd29yayBkb25lIG9uIGJlaGFsZiBvZiB4aWQuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KFhpZCB4aWQsIGJvb2xlYW4gb25lUGhhc2UpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vdGhlIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkIGNhbGwgaGFzIGNvbWUgaGVyZSBiZWNhc3VlCi0JLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKLQkvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAotCS8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcwotCS8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKLQkvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIC8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93CisgICAgLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKKyAgICAvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCisgICAgLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICAgICAgeGFyLmNvbW1pdCh4aWQsIG9uZVBoYXNlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbmRzIHRoZSB3b3JrIHBlcmZvcm1lZCBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2guCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBpcyB0aGUgc2FtZSBhcyB3aGF0IAotICAgICAqCQkJd2FzIHVzZWQgcHJldmlvdXNseSBpbiB0aGUgc3RhcnQgbWV0aG9kLgotICAgICAqIEBwYXJhbQlmbGFncwlPbmUgb2YgVE1TVUNDRVNTLCBUTUZBSUwsIG9yIFRNU1VTUEVORAorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQKKyAgICAgKiAgICAgICAgICAgIHdhcyB1c2VkIHByZXZpb3VzbHkgaW4gdGhlIHN0YXJ0IG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgZmxhZ3MgICAgT25lIG9mIFRNU1VDQ0VTUywgVE1GQUlMLCBvciBUTVNVU1BFTkQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICB4YXIuZW5kKHhpZCwgZmxhZ3MpOwogICAgICAgICAvL0dKQ0lOVAotCS8vbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICAvL21jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGVsbCB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgYSBoZXVyaXN0aWNhbGx5IGNvbXBsZXRlZCB0cmFuc2FjdGlvbiBicmFuY2guCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgeGFyLmZvcmdldCh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIE9idGFpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIHNldCBmb3IgdGhpcyAKKyAgICAgKiBPYnRhaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBzZXQgZm9yIHRoaXMKICAgICAgKiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcworICAgICAqIEByZXR1cm4gICAgdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcwogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0VHJhbnNhY3Rpb25UaW1lb3V0KCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5nZXRUcmFuc2FjdGlvblRpbWVvdXQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlIAotICAgICAqIHJlcHJlc2VudGVkIGJ5IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSByZXNvdWNlIG1hbmFnZXIgCisgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZQorICAgICAqIHJlcHJlc2VudGVkIGJ5IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSByZXNvdWNlIG1hbmFnZXIKICAgICAgKiBpbnN0YW5jZSByZXByZXNlbnRlZCBieSB0aGUgcGFyYW1ldGVyIHhhcmVzLgogICAgICAqCi0gICAgICogQHBhcmFtCXhhcmVzCUFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aG9zZSByZXNvdXJjZSBtYW5hZ2VyIAotICAgICAqIAkJCWluc3RhbmNlIGlzIHRvIGJlIGNvbXBhcmVkIHdpdGggdGhlIHJlc291cmNlCi0gICAgICogQHJldHVybgl0cnVlIGlmIGl0J3MgdGhlIHNhbWUgUk0gaW5zdGFuY2U7IG90aGVyd2lzZSBmYWxzZS4KKyAgICAgKiBAcGFyYW0gICAgeGFyZXMgICAgQW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdob3NlIHJlc291cmNlIG1hbmFnZXIKKyAgICAgKiAgICAgICAgICAgICBpbnN0YW5jZSBpcyB0byBiZSBjb21wYXJlZCB3aXRoIHRoZSByZXNvdXJjZQorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiBpdCdzIHRoZSBzYW1lIFJNIGluc3RhbmNlOyBvdGhlcndpc2UgZmFsc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNTYW1lUk0oWEFSZXNvdXJjZSB4YXJlcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5pc1NhbWVSTSh4YXJlcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQXNrIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIHByZXBhcmUgZm9yIGEgdHJhbnNhY3Rpb24gY29tbWl0IAorICAgICAqIEFzayB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBwcmVwYXJlIGZvciBhIHRyYW5zYWN0aW9uIGNvbW1pdAogICAgICAqIG9mIHRoZSB0cmFuc2FjdGlvbiBzcGVjaWZpZWQgaW4geGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCi0gICAgICogQHJldHVybglBIHZhbHVlIGluZGljYXRpbmcgdGhlIHJlc291cmNlIG1hbmFnZXIncyB2b3RlIG9uIHRoZSAKLSAgICAgKgkJb3V0Y29tZSBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSBwb3NzaWJsZSB2YWx1ZXMKLSAgICAgKgkJYXJlOiBYQV9SRE9OTFkgb3IgWEFfT0suIElmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHdhbnRzIAotICAgICAqCQl0byByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uLCBpdCBzaG91bGQgZG8gc28KLSAgICAgKgkJYnkgcmFpc2luZyBhbiBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4gaW4gdGhlIHByZXBhcmUgbWV0aG9kLgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEByZXR1cm4gICAgQSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSByZXNvdXJjZSBtYW5hZ2VyJ3Mgdm90ZSBvbiB0aGUKKyAgICAgKiAgICAgICAgb3V0Y29tZSBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSBwb3NzaWJsZSB2YWx1ZXMKKyAgICAgKiAgICAgICAgYXJlOiBYQV9SRE9OTFkgb3IgWEFfT0suIElmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHdhbnRzCisgICAgICogICAgICAgIHRvIHJvbGwgYmFjayB0aGUgdHJhbnNhY3Rpb24sIGl0IHNob3VsZCBkbyBzbworICAgICAqICAgICAgICBieSByYWlzaW5nIGFuIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPiBpbiB0aGUgcHJlcGFyZSBtZXRob2QuCiAgICAgICovCiAgICAgcHVibGljIGludCBwcmVwYXJlKFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIucHJlcGFyZSh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIE9idGFpbiBhIGxpc3Qgb2YgcHJlcGFyZWQgdHJhbnNhY3Rpb24gYnJhbmNoZXMgZnJvbSBhIHJlc291cmNlIG1hbmFnZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZmxhZwlPbmUgb2YgVE1TVEFSVFJTQ0FOLCBUTUVORFJTQ0FOLCBUTU5PRkxBR1MuIFRNTk9GTEFHUyAKLSAgICAgKgkJCW11c3QgYmUgdXNlZCB3aGVuIG5vIG90aGVyIGZsYWdzIGFyZSBzZXQgaW4gZmxhZ3MuCi0gICAgICogQHJldHVybglUaGUgcmVzb3VyY2UgbWFuYWdlciByZXR1cm5zIHplcm8gb3IgbW9yZSBYSURzIGZvciB0aGUgdHJhbnNhY3Rpb24gCi0gICAgICoJCWJyYW5jaGVzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBhIHByZXBhcmVkIG9yIGhldXJpc3RpY2FsbHkgCi0gICAgICoJCWNvbXBsZXRlZCBzdGF0ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgb3BlcmF0aW9uLCB0aGUgcmVzb3VyY2UKLSAgICAgKgkJbWFuYWdlciBzaG91bGQgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gICAgZmxhZyAgICBPbmUgb2YgVE1TVEFSVFJTQ0FOLCBUTUVORFJTQ0FOLCBUTU5PRkxBR1MuIFRNTk9GTEFHUworICAgICAqICAgICAgICAgICAgbXVzdCBiZSB1c2VkIHdoZW4gbm8gb3RoZXIgZmxhZ3MgYXJlIHNldCBpbiBmbGFncy4KKyAgICAgKiBAcmV0dXJuICAgIFRoZSByZXNvdXJjZSBtYW5hZ2VyIHJldHVybnMgemVybyBvciBtb3JlIFhJRHMgZm9yIHRoZSB0cmFuc2FjdGlvbgorICAgICAqICAgICAgICBicmFuY2hlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gYSBwcmVwYXJlZCBvciBoZXVyaXN0aWNhbGx5CisgICAgICogICAgICAgIGNvbXBsZXRlZCBzdGF0ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgb3BlcmF0aW9uLCB0aGUgcmVzb3VyY2UKKyAgICAgKiAgICAgICAgbWFuYWdlciBzaG91bGQgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgWGlkW10gcmVjb3ZlcihpbnQgZmxhZykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5yZWNvdmVyKGZsYWcpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEluZm9ybSB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byByb2xsIGJhY2sgd29yayBkb25lIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaAogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy90aGUgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQgY2FsbCBoYXMgY29tZSBoZXJlIGJlY2FzdWUKLQkvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdwotCS8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCi0JLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCi0JLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAotCS8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgorICAgIC8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93CisgICAgLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKKyAgICAvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCisgICAgLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCiAgICAgICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgICAgIHhhci5yb2xsYmFjayh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGZvciB0aGlzIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlY29uZHMJdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpcyBzZXQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZmFsc2UuCisgICAgICogQHBhcmFtICAgIHNlY29uZHMgICAgdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpcyBzZXQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZmFsc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnNldFRyYW5zYWN0aW9uVGltZW91dChzZWNvbmRzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTdGFydCB3b3JrIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaCBzcGVjaWZpZWQgaW4geGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzb3VyY2UKLSAgICAgKiBAcmV0dXJuCWZsYWdzCU9uZSBvZiBUTU5PRkxBR1MsIFRNSk9JTiwgb3IgVE1SRVNVTUUKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZQorICAgICAqIEByZXR1cm4gICAgZmxhZ3MgICAgT25lIG9mIFRNTk9GTEFHUywgVE1KT0lOLCBvciBUTVJFU1VNRQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy9HSkNJTlQKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL2J1aWxkLnhtbAppbmRleCA5Njc4NjhiLi42NDEwNTU3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIke2dqYy5ob21lfSIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3NwaSIvPgotIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTM3LDUgKzM3LDUgQEAKIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCIvPgogCi0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKaW5kZXggY2UzMjFhZi4uOWU3ZjI1MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKQEAgLTI2LDggKzI2LDggQEAKIC8qKgogICogRXhlY3V0ZSB0aGUgbWV0aG9kcyBiYXNlZCBvbiB0aGUgcGFyYW1ldGVycy4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIE1ldGhvZEV4ZWN1dG9yIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAKQEAgLTM5LDEzMCArMzksMTMwIEBACiAgICAgLyoqCiAgICAgICogRXhjZXV0ZSBhIHNpbXBsZSBzZXQgTWV0aG9kLgogICAgICAqCi0gICAgICogQHBhcmFtCXZhbHVlCVZhbHVlIHRvIGJlIHNldC4KLSAgICAgKiBAcGFyYW0JbWV0aG9kCTxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQlvYmoJT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCisgICAgICogQHBhcmFtICAgIHZhbHVlICAgIFZhbHVlIHRvIGJlIHNldC4KKyAgICAgKiBAcGFyYW0gICAgbWV0aG9kICAgIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvYmogICAgT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLiAgICAgCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJ1bkphdmFCZWFuTWV0aG9kKFN0cmluZyB2YWx1ZSwgTWV0aG9kIG1ldGhvZCwgT2JqZWN0IG9iaikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlpZiAodmFsdWU9PW51bGwgfHwgdmFsdWUudHJpbSgpLmVxdWFscygiIikpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAl0cnkgewotICAgIAkgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0gICAgCSAgICBpZiAoIHBhcmFtZXRlcnMubGVuZ3RoID09IDEpIHsKLSAgICAJICAgICAgICBPYmplY3RbXSB2YWx1ZXMgPSBuZXcgT2JqZWN0WzFdOwotICAgIAkgICAgCXZhbHVlc1swXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbMF0sIHZhbHVlKTsKLSAgICAJICAgIAltZXRob2QuaW52b2tlKG9iaiwgdmFsdWVzKTsKLSAgICAJICAgIH0KLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfQorICAgICAgICBpZiAodmFsdWU9PW51bGwgfHwgdmFsdWUudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7CisgICAgICAgICAgICBpZiAoIHBhcmFtZXRlcnMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgICAgICBPYmplY3RbXSB2YWx1ZXMgPSBuZXcgT2JqZWN0WzFdOworICAgICAgICAgICAgICAgIHZhbHVlc1swXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbMF0sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBtZXRob2QuaW52b2tlKG9iaiwgdmFsdWVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogRXhlY3V0ZXMgdGhlIG1ldGhvZC4gICAgIAorICAgICAqIEV4ZWN1dGVzIHRoZSBtZXRob2QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWV0aG9kIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQlvYmoJT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCi0gICAgICogQHBhcmFtCXZhbHVlcwlQYXJhbWV0ZXIgdmFsdWVzIGZvciBleGVjdXRpbmcgdGhlIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgbWV0aG9kIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvYmogICAgT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCisgICAgICogQHBhcmFtICAgIHZhbHVlcyAgICBQYXJhbWV0ZXIgdmFsdWVzIGZvciBleGVjdXRpbmcgdGhlIG1ldGhvZC4KICAgICAgKiBAdGhyb3dzICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4sIGluIGNhc2Ugb2YgdGhlIG1pc21hdGNoIG9mIHBhcmFtZXRlciB2YWx1ZXMgb3IKLSAgICAgKgkJYSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJ1bk1ldGhvZChNZXRob2QgbWV0aG9kLCBPYmplY3Qgb2JqLCBWZWN0b3IgdmFsdWVzKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCXRyeSB7Ci0JICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotCSAgICBpZiAodmFsdWVzLnNpemUoKSAhPSBwYXJhbWV0ZXJzLmxlbmd0aCkgewotCSAgICAgICAgcmV0dXJuOwotCSAgICB9Ci0gICAgCSAgICBPYmplY3RbXSBhY3R1YWxWYWx1ZXMgPSBuZXcgT2JqZWN0W3BhcmFtZXRlcnMubGVuZ3RoXTsKLSAgICAJICAgIGZvciAoaW50IGkgPTA7IGk8cGFyYW1ldGVycy5sZW5ndGggOyBpKyspIHsKLSAgICAJICAgIAlTdHJpbmcgdmFsID0gKFN0cmluZykgdmFsdWVzLmdldChpKTsKLSAgICAJICAgIAlpZiAodmFsLnRyaW0oKS5lcXVhbHMoIk5VTEwiKSkgewotICAgIAkgICAgCSAgICBhY3R1YWxWYWx1ZXNbaV0gPSBudWxsOwotICAgIAkgICAgCX0gZWxzZSB7Ci0gICAgCSAgICAJICAgIGFjdHVhbFZhbHVlc1tpXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbaV0sIHZhbCk7Ci0gICAgCSAgICAJfQotICAgIAkgICAgfQotICAgIAkgICAgbWV0aG9kLmludm9rZShvYmosIGFjdHVhbFZhbHVlcyk7Ci0gICAgCX1jYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfQorICAgICAgICB0cnkgeworICAgICAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKKyAgICAgICAgaWYgKHZhbHVlcy5zaXplKCkgIT0gcGFyYW1ldGVycy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgT2JqZWN0W10gYWN0dWFsVmFsdWVzID0gbmV3IE9iamVjdFtwYXJhbWV0ZXJzLmxlbmd0aF07CisgICAgICAgICAgICBmb3IgKGludCBpID0wOyBpPHBhcmFtZXRlcnMubGVuZ3RoIDsgaSsrKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHZhbCA9IChTdHJpbmcpIHZhbHVlcy5nZXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbC50cmltKCkuZXF1YWxzKCJOVUxMIikpIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsVmFsdWVzW2ldID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhY3R1YWxWYWx1ZXNbaV0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzW2ldLCB2YWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1ldGhvZC5pbnZva2Uob2JqLCBhY3R1YWxWYWx1ZXMpOworICAgICAgICB9Y2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnZlcnRzIHRoZSB0eXBlIGZyb20gU3RyaW5nIHRvIHRoZSBDbGFzcyB0eXBlLgogICAgICAqCi0gICAgICogQHBhcmFtCXR5cGUJCUNsYXNzIG5hbWUgdG8gd2hpY2ggdGhlIGNvbnZlcnNpb24gaXMgcmVxdWlyZWQuCi0gICAgICogQHBhcmFtCXBhcmFtZXRlcglTdHJpbmcgdmFsdWUgdG8gYmUgY29udmVydGVkLgotICAgICAqIEByZXR1cm4JQ29udmVydGVkIHZhbHVlLgorICAgICAqIEBwYXJhbSAgICB0eXBlICAgICAgICBDbGFzcyBuYW1lIHRvIHdoaWNoIHRoZSBjb252ZXJzaW9uIGlzIHJlcXVpcmVkLgorICAgICAqIEBwYXJhbSAgICBwYXJhbWV0ZXIgICAgU3RyaW5nIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KKyAgICAgKiBAcmV0dXJuICAgIENvbnZlcnRlZCB2YWx1ZS4KICAgICAgKiBAdGhyb3dzICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4sIGluIGNhc2Ugb2YgdGhlIG1pc21hdGNoIG9mIHBhcmFtZXRlciB2YWx1ZXMgb3IKLSAgICAgKgkJYSBzZWN1cml0eSB2aW9sYXRpb24uICAgICAKKyAgICAgKiAgICAgICAgYSBzZWN1cml0eSB2aW9sYXRpb24uCiAgICAgICovCiAgICAgcHJpdmF0ZSBPYmplY3QgY29udmVydFR5cGUoQ2xhc3MgdHlwZSwgU3RyaW5nIHBhcmFtZXRlcikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAl0cnkgewotICAgIAkgICAgU3RyaW5nIHR5cGVOYW1lID0gdHlwZS5nZXROYW1lKCk7Ci0gICAgCSAgICBpZiAoIHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlN0cmluZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLk9iamVjdCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIHBhcmFtZXRlcjsKLSAgICAJICAgIH0KLSAgICAJCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJpbnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5JbnRlZ2VyIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEludGVnZXIocGFyYW1ldGVyKTsKLSAgICAJICAgIH0KLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygic2hvcnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TaG9ydCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBTaG9ydChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJieXRlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQnl0ZSIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBCeXRlKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImxvbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Mb25nIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IExvbmcocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJmbG9hdCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkZsb2F0IikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEZsb2F0KHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImRvdWJsZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkRvdWJsZSIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBEb3VibGUocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdEZWNpbWFsIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0ludGVnZXIiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJib29sZWFuIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQm9vbGVhbiIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBCb29sZWFuKHBhcmFtZXRlcik7Ci0gICAgICAgICAgICB9CQkKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFN0cmluZyB0eXBlTmFtZSA9IHR5cGUuZ2V0TmFtZSgpOworICAgICAgICAgICAgaWYgKCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TdHJpbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5PYmplY3QiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7CisgICAgICAgICAgICB9CiAKLSAgICAJICAgIHJldHVybiBwYXJhbWV0ZXI7Ci0gICAgCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbmZlIiwgcGFyYW1ldGVyKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihwYXJhbWV0ZXIrIjogTm90IGEgdmFsaWQgdmFsdWUgZm9yIHRoaXMgbWV0aG9kICIpOwotICAgIAl9CisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJpbnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5JbnRlZ2VyIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEludGVnZXIocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygic2hvcnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TaG9ydCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTaG9ydChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJieXRlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQnl0ZSIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCeXRlKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImxvbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Mb25nIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExvbmcocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZmxvYXQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5GbG9hdCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJkb3VibGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Eb3VibGUiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRG91YmxlKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdEZWNpbWFsIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdJbnRlZ2VyIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJvb2xlYW4iKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Cb29sZWFuIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJvb2xlYW4ocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcjsKKyAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19uZmUiLCBwYXJhbWV0ZXIpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHBhcmFtZXRlcisiOiBOb3QgYSB2YWxpZCB2YWx1ZSBmb3IgdGhpcyBtZXRob2QgIik7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKaW5kZXggZmMxNDliZi4uZjAwOGU3ZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCkBAIC0yOSwzNiArMjksMzYgQEAKIC8qKgogICogU2VjdXJpdHlVdGlscyBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIyCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMgorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFNlY3VyaXR5VXRpbHMgewogCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QsIGdpdmVuIAotICAgICAqIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBzdWJqZWN0IGFuZCB0aGUgCi0gICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPi4gSXQgZmlyc3QgY2hlY2tzIGlmIHRoZSAKLSAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGlzIG51bGwgb3Igbm90LiBJZiBpdCBpcyBub3QgbnVsbCwgCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QsIGdpdmVuCisgICAgICogdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIHN1YmplY3QgYW5kIHRoZQorICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4uIEl0IGZpcnN0IGNoZWNrcyBpZiB0aGUKKyAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGlzIG51bGwgb3Igbm90LiBJZiBpdCBpcyBub3QgbnVsbCwKICAgICAgKiBpdCBjb25zdHJ1Y3RzIGEgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2l0aAogICAgICAqIHRoZSB1c2VyIGFuZCBwYXNzd29yZCBmaWVsZHMgZnJvbSB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBhbmQgcmV0dXJucyB0aGlzCi0gICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QuIElmIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IAotICAgICAqIGlzIG51bGwsIGl0IHJldHJpZXZlcyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGZyb20gCisgICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QuIElmIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CisgICAgICogaXMgbnVsbCwgaXQgcmV0cmlldmVzIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdHMgZnJvbQogICAgICAqIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgYW5kIHJldHVybnMgdGhlIGZpcnN0Ci0gICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYSAKKyAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCB3aGljaCBjb250YWlucyBhCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgaW5zdGFuY2UgZXF1aXZhbGVudAogICAgICAqIHRvIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBwYXJhbWV0ZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPgotICAgICAqIEBwYXJhbQlpbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPglnZW5lcmljIGV4Y2VwdGlvbiBpZiBvcGVyYXRpb24gZmFpbHMKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlNlY3VyaXR5RXhjZXB0aW9uPC9jb2RlPglpZiBhY2Nlc3MgdG8gdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIGlzIGRlbmllZAorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+ICAgIGdlbmVyaWMgZXhjZXB0aW9uIGlmIG9wZXJhdGlvbiBmYWlscworICAgICAqIEB0aHJvd3MgICAgPGNvZGU+U2VjdXJpdHlFeGNlcHRpb248L2NvZGU+ICAgIGlmIGFjY2VzcyB0byB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgaXMgZGVuaWVkCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBQYXNzd29yZENyZWRlbnRpYWwgZ2V0UGFzc3dvcmRDcmVkZW50aWFsKGZpbmFsIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsCiAgICAgICAgICBmaW5hbCBTdWJqZWN0IHN1YmplY3QsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogCi0JaWYgKGluZm8gPT0gbnVsbCkgeworICAgIGlmIChpbmZvID09IG51bGwpIHsKICAgICAgICAgICAgIGlmIChzdWJqZWN0ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC04OSwxNCArODksMTQgQEAKICAgICAgICAgICAgIHJldHVybiBwYzsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0d28gc3RyaW5ncyBhcmUgZXF1YWw7IGZhbHNlIG90aGVyd2lzZQotICAgICAqIAotICAgICAqIEBwYXJhbQlzdHIxCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAcGFyYW0Jc3RyMgk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSB0d28gc3RyaW5ncyBhcmUgZXF1YWwKLSAgICAgKiAgICAgICAgCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHN0cjEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzdHIyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHR3byBzdHJpbmdzIGFyZSBlcXVhbAorICAgICAqICAgICAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgc3RhdGljIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKFN0cmluZyBzdHIxLCBTdHJpbmcgc3RyMikgewogICAgICAgICBpZiAoc3RyMSA9PSBudWxsKSB7CkBAIC0xMDksMTAgKzEwOSwxMCBAQAogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0d28gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGFyZSBlcXVhbDsgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcEMxCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAcGFyYW0JcEMyCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHR3byBQYXNzd29yZENyZWRlbnRpYWxzIGFyZSBlcXVhbAotICAgICAqICAgICAgICAJZmFsc2UJb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHBDMSAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBDMiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSB0d28gUGFzc3dvcmRDcmVkZW50aWFscyBhcmUgZXF1YWwKKyAgICAgKiAgICAgICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHN0YXRpYyBwdWJsaWMgYm9vbGVhbiBpc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKFBhc3N3b3JkQ3JlZGVudGlhbCBwQzEsIFBhc3N3b3JkQ3JlZGVudGlhbCBwQzIpIHsKICAgICAgICAgaWYgKHBDMSA9PSBwQzIpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbAppbmRleCBhNTViYmYwLi5mMDYwZTdkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9Ii4iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy91dGlsIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgIDxqYXIgamFyZmlsZT0iJHtkaXN0LmRpcn0vJHtwa2cuZGlyfS91dGlsLmphciIgYmFzZWRpcj0iJHtjbGFzcy5kaXJ9IgogICAgICAgICBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxMyIgZGVwZW5kcz0iY29tcGlsZSIvPgogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxNCIgZGVwZW5kcz0iY29tcGlsZSIvPgogCkBAIC00NCw1ICs0NCw1IEBACiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+Ci0gIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YQppbmRleCBiYzdiNTVkLi45ODkyZmY2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEKQEAgLTE3LDE2ICsxNywxNiBAQAogcGFja2FnZSBzYW1wbGVzLmVqYi5zdWJjbGFzc2luZy5zZXJ2bGV0OwogCiBpbXBvcnQgamF2YS5pby4qOwotaW1wb3J0IGphdmEudXRpbC4qOyAKLWltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsgCi1pbXBvcnQgamF2YXgubmFtaW5nLio7IAotaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7IAotaW1wb3J0IGpha2FydGEuZWpiLio7IAoraW1wb3J0IGphdmEudXRpbC4qOworaW1wb3J0IGpha2FydGEuc2VydmxldC4qOworaW1wb3J0IGphdmF4Lm5hbWluZy4qOworaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7CitpbXBvcnQgamFrYXJ0YS5lamIuKjsKIAotaW1wb3J0IHNhbXBsZXMuZWpiLnN1YmNsYXNzaW5nLmVqYi4qOyAKK2ltcG9ydCBzYW1wbGVzLmVqYi5zdWJjbGFzc2luZy5lamIuKjsKIGltcG9ydCBjb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW47CiAKLXB1YmxpYyBjbGFzcyBTaW1wbGVCYW5rU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsgIAorcHVibGljIGNsYXNzIFNpbXBsZUJhbmtTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAKICAgSW5pdGlhbENvbnRleHQgaW5pdENvbnRleHQgPSBudWxsOwpAQCAtNDIsMTQgKzQyLDE0IEBACiAgIHsKICAgfQogCi0gIHB1YmxpYyB2b2lkIGRvR2V0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSAKLSAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgCisgIHB1YmxpYyB2b2lkIGRvR2V0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQorICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7Ci0gIH0gIAorICB9CiAKLSAgLyoqIGhhbmRsZXMgdGhlIEhUVFAgUE9TVCBvcGVyYXRpb24gKiovIAotICBwdWJsaWMgdm9pZCBkb1Bvc3QgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIAotICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAKKyAgLyoqIGhhbmRsZXMgdGhlIEhUVFAgUE9TVCBvcGVyYXRpb24gKiovCisgIHB1YmxpYyB2b2lkIGRvUG9zdCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKKyAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICBkb0xvb2t1cCgpOwogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2ltcGxlQmFua1NlcnZsZXQgaXMgZXhlY3V0aW5nIik7CiAgICAgU3RyaW5nIFNTTiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJTU04iKTsKQEAgLTY1LDE0ICs2NSwxNCBAQAogICAgIFN0cmluZyB6aXBDb2RlID0gIiI7CiAgICAgbG9uZyBjdXJyZW50U2F2aW5nc0JhbGFuY2UgPSAwOwogICAgIGxvbmcgY3VycmVudENoZWNraW5nQmFsYW5jZSA9IDA7Ci0gICAgIAorCiAgICAgU3RyaW5nIGFjdGlvbiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJhY3Rpb24iKTsKICAgICBpZiAoYWN0aW9uLmVxdWFscygiQ3JlYXRlIikpCiAgICAgewogICAgICAgbWVzc2FnZSA9ICJBZGQgQ3VzdG9tZXIiOwogICAgICAganNwID0gIi9TaW1wbGVCYW5rQWRkLmpzcCI7CiAgICAgfQotICAgIGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoIkFkZCBDdXN0b21lciIpKSAKKyAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJBZGQgQ3VzdG9tZXIiKSkKICAgICB7CiAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFkZCBDdXN0b21lciBidXR0b24gcHJlc3NlZCIpOwogICAgICAgU1NOID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoIlNTTiIpOwpAQCAtODksNyArODksNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSBjdXN0b21lclNhdmluZ3NMb2NhbEhvbWUuY3JlYXRlKFNTTiwgbGFzdE5hbWUsIGZpcnN0TmFtZSwgYWRkcmVzczEsIGFkZHJlc3MyLCBjaXR5LCBzdGF0ZSwgemlwQ29kZSk7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBjcmVhdGUgdGhlIGN1c3RvbWVyIHNhdmluZ3MgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIG1lc3NhZ2UgPSAiQ3VzdG9tZXIgQWRkZWQuIjsKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSBjdXN0b21lclNhdmluZ3NMb2NhbEhvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZmluZCB0aGUgY3VzdG9tZXIgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIGpzcCA9ICIvU2ltcGxlQmFua0VkaXQuanNwIjsKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSBjdXN0b21lclNhdmluZ3NMb2NhbEhvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZmluZCB0aGUgY3VzdG9tZXIgc2F2aW5ncyByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogICAgICAgbWVzc2FnZSA9ICJEZWxldGUgQ3VzdG9tZXIiOwpAQCAtMTI2LDEyICsxMjYsMTIgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzTG9jYWxIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKS5yZW1vdmUoKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGRlbGV0ZSB0aGUgY3VzdG9tZXIgc2F2aW5ncyBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBtZXNzYWdlID0gIkN1c3RvbWVyIERlbGV0ZWQuIjsKICAgICAgIGpzcCA9ICIvU2ltcGxlQmFua01lc3NhZ2UuanNwIjsKLSAgICB9ICAKKyAgICB9CiAKIAogICAgIGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoIlVwZGF0ZSIpKQpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5ncyA9IChDdXN0b21lclNhdmluZ3MpY3VzdG9tZXJTYXZpbmdzTG9jYWxIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIHNhdmluZ3MgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KIApAQCAtMTUwLDcgKzE1MCw3IEBACiAgICAgICAgIGN1c3RvbWVyQ2hlY2tpbmcgPSAoQ3VzdG9tZXJDaGVja2luZyljdXN0b21lckNoZWNraW5nTG9jYWxIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIGNoZWNraW5nIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAKQEAgLTIxMCw5ICsyMTAsOSBAQAogICAgIFJlcXVlc3REaXNwYXRjaGVyIGRpc3BhdGNoZXIgPSBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldFJlcXVlc3REaXNwYXRjaGVyKGpzcCk7CiAgICAgZGlzcGF0Y2hlci5pbmNsdWRlKHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICByZXR1cm47Ci0gIH0gCisgIH0KIAotICBwdWJsaWMgdm9pZCBkb0xvb2t1cCgpIAorICBwdWJsaWMgdm9pZCBkb0xvb2t1cCgpCiAgIHsKICAgICB0cnkgewogICAgICAgaW5pdENvbnRleHQgPSBuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCmluZGV4IGRmOWRmMzQuLjMzYTcwNjkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCkBAIC0xICsxIEBACi1kcm9wIHRhYmxlIGN1c3RvbWVyMjsNCitkcm9wIHRhYmxlIGN1c3RvbWVyMjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2FwcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9hcHAvYnVpbGQueG1sCmluZGV4IDUzZjhkZGUuLjUwMWYzN2MgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2FwcC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvYXBwL2J1aWxkLnhtbApAQCAtMzYsOCArMzYsOCBAQAogICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXIiLz4KICA8IS0tCiAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iZ2VuZXJpYy1lbWJlZGRlZCIvPgotCTxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImdlbmVyaWMtZW1iZWRkZWQiLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CiAgICA8L2FudGNhbGw+CiAgLS0+CiAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKaW5kZXggZTk0MDQyYi4uOGU1NDdjNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCkBAIC0zMyw4ICszMyw4IEBACiAgICAgICA8c2Vzc2lvbi10eXBlPlN0YXRlbGVzczwvc2Vzc2lvbi10eXBlPgogICAgICAgPHRyYW5zYWN0aW9uLXR5cGU+Q29udGFpbmVyPC90cmFuc2FjdGlvbi10eXBlPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+Ci0JPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW48L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPHNlY3VyaXR5LWlkZW50aXR5PgogICAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eS8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmluZGV4IGU3M2NiNDYuLjNmZGUyMzAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgPGVqYj4KICAgICAgIDxlamItbmFtZT5NeVZlcnNpb25DaGVja2VyPC9lamItbmFtZT4KICAgICAgIDxqbmRpLW5hbWU+TXlWZXJzaW9uQ2hlY2tlcjwvam5kaS1uYW1lPgotPCEtLSAgICAgIAorPCEtLQogICAgIDxpb3Itc2VjdXJpdHktY29uZmlnPgogICAgICAgICA8dHJhbnNwb3J0LWNvbmZpZz4KICAgICAgICAgICA8aW50ZWdyaXR5PnN1cHBvcnRlZDwvaW50ZWdyaXR5PgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgICAgICAgPGNhbGxlci1wcm9wYWdhdGlvbj5zdXBwb3J0ZWQ8L2NhbGxlci1wcm9wYWdhdGlvbj4KICAgICAgICAgPC9zYXMtY29udGV4dD4KICAgICAgIDwvaW9yLXNlY3VyaXR5LWNvbmZpZz4KLS0tPiAgICAKKy0tPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+CiAgICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxqbmRpLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvam5kaS1uYW1lPgorICAgIDxqbmRpLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPGdlbi1jbGFzc2VzLz4KICAgICA8L2VqYj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggN2VkYjM1Ny4uNzY2M2VkNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI3LDM2ICsyNywzNiBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiQ2xpZW50OiBBcmdzOiAiKTsKLQlmb3IoaW50IGkgPSAwIDsgaTwgYXJncy5sZW5ndGg7IGkrKykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsaWVudDogQXJnczogIiArIGFyZ3NbaV0pOwotCX0KLQlJbnRlZ2VyIHZlcnNpb25OdW1iZXIgPSBuZXcgSW50ZWdlcihhcmdzWzBdKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsaWVudDogQXJnczogIik7CisgICAgZm9yKGludCBpID0gMCA7IGk8IGFyZ3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGllbnQ6IEFyZ3M6ICIgKyBhcmdzW2ldKTsKKyAgICB9CisgICAgSW50ZWdlciB2ZXJzaW9uTnVtYmVyID0gbmV3IEludGVnZXIoYXJnc1swXSk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QodmVyc2lvbk51bWJlci5pbnRWYWx1ZSgpKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdChpbnQgdmVyc2lvblRvVGVzdCkgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgcmVkZXBsb3ltZW50IG9mIGNvbm5lY3RvcnMgIisKLQkgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICJjb250cmFjdHMuIik7CisKICAgICAgICAgU3RyaW5nIHJlcyA9ICJOT1QgUlVOIjsKLQlkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKKyAgICBkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKICAgICAgICAgYm9vbGVhbiBwYXNzID0gZmFsc2U7CiAgICAgICAgIHRyeSB7Ci0JCXBhc3MgPSBjaGVja1Jlc3VsdHModmVyc2lvblRvVGVzdCk7Ci0JCWRlYnVnKCJHb3QgZXhwZWN0ZWQgcmVzdWx0cyA9ICIgKyBwYXNzKTsKLQkJCi0JCS8vZG8gbm90IGNvbnRpbnVlIGlmIG9uZSB0ZXN0IGZhaWxlZAotCQlpZiAoIXBhc3MpIHsKLQkJCXJlcyA9ICJTT01FIFRFU1RTIEZBSUxFRCI7Ci0JCQlzdGF0LmFkZFN0YXR1cygiUmVkZXBsb3kgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gIiwgc3RhdC5GQUlMKTsKLQkJfSBlbHNlIHsKLQkJCXJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7Ci0JCQlzdGF0LmFkZFN0YXR1cygiUmVkZXBsb3kgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gIiAsIHN0YXQuUEFTUyk7Ci0JCX0KKyAgICAgICAgcGFzcyA9IGNoZWNrUmVzdWx0cyh2ZXJzaW9uVG9UZXN0KTsKKyAgICAgICAgZGVidWcoIkdvdCBleHBlY3RlZCByZXN1bHRzID0gIiArIHBhc3MpOworCisgICAgICAgIC8vZG8gbm90IGNvbnRpbnVlIGlmIG9uZSB0ZXN0IGZhaWxlZAorICAgICAgICBpZiAoIXBhc3MpIHsKKyAgICAgICAgICAgIHJlcyA9ICJTT01FIFRFU1RTIEZBSUxFRCI7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiUmVkZXBsb3kgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiUmVkZXBsb3kgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gIiAsIHN0YXQuUEFTUyk7CisgICAgICAgIH0KIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVkZXBsb3kgY29ubmVjdG9yIHRlc3QgZmFpbGVkLiIpOwpAQCAtNjgsMjAgKzY4LDIwIEBACiAgICAgICAgIGRlYnVnKCJFWElUSU5HLi4uIFNUQVRVUyA9ICIgKyByZXMpOwogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja1Jlc3VsdHMoaW50IG51bSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAgIGRlYnVnKCJjaGVja1Jlc3VsdCIgKyBudW0pOwotCSAgICBkZWJ1ZygiZ290IGluaXRpYWwgY29udGV4dCIgKyAobmV3IEluaXRpYWxDb250ZXh0KCkpLnRvU3RyaW5nKCkpOworICAgICAgICBkZWJ1ZygiY2hlY2tSZXN1bHQiICsgbnVtKTsKKyAgICAgICAgZGVidWcoImdvdCBpbml0aWFsIGNvbnRleHQiICsgKG5ldyBJbml0aWFsQ29udGV4dCgpKS50b1N0cmluZygpKTsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlWZXJzaW9uQ2hlY2tlciIpOwotCWRlYnVnKCJnb3QgbyIgKyBvKTsKLSAgICAgICAgVmVyc2lvbkNoZWNrZXJIb21lICBob21lID0gKFZlcnNpb25DaGVja2VySG9tZSkgCisgICAgZGVidWcoImdvdCBvIiArIG8pOworICAgICAgICBWZXJzaW9uQ2hlY2tlckhvbWUgIGhvbWUgPSAoVmVyc2lvbkNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIFZlcnNpb25DaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIGRlYnVnKCJnb3QgaG9tZSIgKyBob21lKTsKLQkgICAgVmVyc2lvbkNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7Ci0JICAgIGRlYnVnKCJnb3QgbyIgKyBjaGVja2VyKTsKKyAgICAgICAgVmVyc2lvbkNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CisgICAgICAgIGRlYnVnKCJnb3QgbyIgKyBjaGVja2VyKTsKICAgICAgICAgLy9wcm9ibGVtIGhlcmUhCi0JaW50IHJlc3VsdCA9IGNoZWNrZXIuZ2V0VmVyc2lvbigpOwotCWRlYnVnKCJjaGVja1Jlc3VsdCIgKyByZXN1bHQpOworICAgIGludCByZXN1bHQgPSBjaGVja2VyLmdldFZlcnNpb24oKTsKKyAgICBkZWJ1ZygiY2hlY2tSZXN1bHQiICsgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PSBudW07CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9hcHAvc3JjL2VqYi9WZXJzaW9uQ2hlY2tlckVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvYXBwL3NyYy9lamIvVmVyc2lvbkNoZWNrZXJFSkIuamF2YQppbmRleCBhMDA5MTNhLi42ODIxMWQ4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9hcHAvc3JjL2VqYi9WZXJzaW9uQ2hlY2tlckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2FwcC9zcmMvZWpiL1ZlcnNpb25DaGVja2VyRUpCLmphdmEKQEAgLTIzLDQ3ICsyMyw0NyBAQAogaW1wb3J0IGNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjsKIAogcHVibGljIGNsYXNzIFZlcnNpb25DaGVja2VyRUpCIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewotCXByaXZhdGUgSW5pdGlhbENvbnRleHQgaW5pdENvbnRleHQgPSBudWxsOwotCXByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2Vzc2lvbkNvbnRleHQgPSBudWxsOworICAgIHByaXZhdGUgSW5pdGlhbENvbnRleHQgaW5pdENvbnRleHQgPSBudWxsOworICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2Vzc2lvbkNvbnRleHQgPSBudWxsOwogCiAKICAgICBwdWJsaWMgVmVyc2lvbkNoZWNrZXJFSkIoKSB7CiAgICAgZGVidWcoIkNvbnN0cnVjdG9yIik7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7Ci0JCWRlYnVnKCJlamJDcmVhdGUoKSIpOworICAgICAgICBkZWJ1ZygiZWpiQ3JlYXRlKCkiKTsKICAgICB9CiAKIAogICAgIHB1YmxpYyBpbnQgZ2V0VmVyc2lvbigpewotCSAgICB0cnkgewotCSAgICAgIGluaXRDb250ZXh0ID0gbmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIG9jY3VyZWQgd2hlbiBjcmVhdGluZyBJbml0aWFsQ29udGV4dDogIiArIGUudG9TdHJpbmcoKSk7Ci0JICAgICAgcmV0dXJuIC0xOwotCSAgICB9Ci0JCi0JICAgIHRyeSB7Ci0JICAgICAgSmRiY1NldHVwQWRtaW4gamEgPSAoSmRiY1NldHVwQWRtaW4pIGluaXRDb250ZXh0Lmxvb2t1cCgiZWlzL2pkYmNBZG1pbiIpOwotCSAgICAgIGludCB2ZXJzaW9ubm8gPSAgamEuZ2V0VmVyc2lvbigpOwotCSAgICAgIGRlYnVnKCJWZXJzaW9uIG51bWJlciBpcyAiICsgdmVyc2lvbm5vKTsKLQkgICAgICByZXR1cm4gdmVyc2lvbm5vOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCSAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgaW5pdENvbnRleHQgPSBuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gb2NjdXJlZCB3aGVuIGNyZWF0aW5nIEluaXRpYWxDb250ZXh0OiAiICsgZS50b1N0cmluZygpKTsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgIEpkYmNTZXR1cEFkbWluIGphID0gKEpkYmNTZXR1cEFkbWluKSBpbml0Q29udGV4dC5sb29rdXAoImVpcy9qZGJjQWRtaW4iKTsKKyAgICAgICAgICBpbnQgdmVyc2lvbm5vID0gIGphLmdldFZlcnNpb24oKTsKKyAgICAgICAgICBkZWJ1ZygiVmVyc2lvbiBudW1iZXIgaXMgIiArIHZlcnNpb25ubyk7CisgICAgICAgICAgcmV0dXJuIHZlcnNpb25ubzsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQogICAgIH0KIAogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgY29udGV4dCkgewotCSAgICBkZWJ1ZygiIGJlYW4gcmVtb3ZlZCIpOworICAgICAgICBkZWJ1ZygiIGJlYW4gcmVtb3ZlZCIpOwogICAgICAgICBzZXNzaW9uQ29udGV4dCA9IGNvbnRleHQ7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewotCSAgICBkZWJ1ZygiIGJlYW4gcmVtb3ZlZCIpOworICAgICAgICBkZWJ1ZygiIGJlYW4gcmVtb3ZlZCIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZmIyYjRkOC4uNDQ1NjNlNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImZvcmNlLWRlcGxveSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmFyIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yYXIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogCiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9idWlsZC54bWwKaW5kZXggODUxZGVkNS4uODI4YjAwNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnQgZGlyPSJyYSIgaW5oZXJpdEFsbD0iZmFsc2UiIHRhcmdldD0iY29tcGlsZSIvPgotICAgICAgICAKKwogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzMWFzdGVzdC5jbGFzc3BhdGgiIHZhbHVlPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH06Li9yYS9wdWJsaXNoL2ludGVybmFsL2NsYXNzZXMvIi8+CkBAIC0xMzQsNyArMTM0LDcgQEAKIAogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXB0d28iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3kiLz4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuV2ViVGVzdCI+CkBAIC0yMjAsNyArMjIwLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJmYWlsb25lcnJvciIgdmFsdWU9InRydWUiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcG9vbCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWNvbm5lY3Rvci1jb25ucG9vbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5jb25wb29sLm5hbWUiIHZhbHVlPSJ2ZXJzaW9udGVzdC1yYS1wb29sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZjk5OWE4YS4uNDkyZTc5YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjcsMzUgKzI3LDM1IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJDbGllbnQ6IEFyZ3M6ICIpOwotCWZvcihpbnQgaSA9IDAgOyBpPCBhcmdzLmxlbmd0aDsgaSsrKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2xpZW50OiBBcmdzOiAiICsgYXJnc1tpXSk7Ci0JfQotCUludGVnZXIgdmVyc2lvbk51bWJlciA9IG5ldyBJbnRlZ2VyKGFyZ3NbMF0pOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2xpZW50OiBBcmdzOiAiKTsKKyAgICBmb3IoaW50IGkgPSAwIDsgaTwgYXJncy5sZW5ndGg7IGkrKykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsaWVudDogQXJnczogIiArIGFyZ3NbaV0pOworICAgIH0KKyAgICBJbnRlZ2VyIHZlcnNpb25OdW1iZXIgPSBuZXcgSW50ZWdlcihhcmdzWzBdKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCh2ZXJzaW9uTnVtYmVyLmludFZhbHVlKCkpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KGludCB2ZXJzaW9uVG9UZXN0KSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCByZWRlcGxveW1lbnQgb2YgY29ubmVjdG9yIG1vZHVsZXMuIFRlc3RpbmcgdmVyc2lvbiAiICsgdmVyc2lvblRvVGVzdCk7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyByZXMgPSAiTk9UIFJVTiI7Ci0JZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CisgICAgZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CiAgICAgICAgIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwogICAgICAgICB0cnkgewotCQlwYXNzID0gY2hlY2tSZXN1bHRzKHZlcnNpb25Ub1Rlc3QpOwotCQlkZWJ1ZygiR290IGV4cGVjdGVkIHJlc3VsdHMgPSAiICsgcGFzcyk7Ci0JCQotCQkvL2RvIG5vdCBjb250aW51ZSBpZiBvbmUgdGVzdCBmYWlsZWQKLQkJaWYgKCFwYXNzKSB7Ci0JCQlyZXMgPSAiU09NRSBURVNUUyBGQUlMRUQiOwotCQkJc3RhdC5hZGRTdGF0dXMoIlJlZGVwbG95IENvbm5lY3RvciAxLjUgdGVzdCAtIFZlcnNpb24gOiAiKyB2ZXJzaW9uVG9UZXN0LCBzdGF0LkZBSUwpOwotCQl9IGVsc2UgewotCQkJcmVzICA9ICJBTEwgVEVTVFMgUEFTU0VEIjsKLQkJCXN0YXQuYWRkU3RhdHVzKCJSZWRlcGxveSBDb25uZWN0b3IgMS41IHRlc3QgLSBWZXJzaW9uIDogIiArIHZlcnNpb25Ub1Rlc3QgLCBzdGF0LlBBU1MpOwotCQl9CisgICAgICAgIHBhc3MgPSBjaGVja1Jlc3VsdHModmVyc2lvblRvVGVzdCk7CisgICAgICAgIGRlYnVnKCJHb3QgZXhwZWN0ZWQgcmVzdWx0cyA9ICIgKyBwYXNzKTsKKworICAgICAgICAvL2RvIG5vdCBjb250aW51ZSBpZiBvbmUgdGVzdCBmYWlsZWQKKyAgICAgICAgaWYgKCFwYXNzKSB7CisgICAgICAgICAgICByZXMgPSAiU09NRSBURVNUUyBGQUlMRUQiOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlJlZGVwbG95IENvbm5lY3RvciAxLjUgdGVzdCAtIFZlcnNpb24gOiAiKyB2ZXJzaW9uVG9UZXN0LCBzdGF0LkZBSUwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVzICA9ICJBTEwgVEVTVFMgUEFTU0VEIjsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJSZWRlcGxveSBDb25uZWN0b3IgMS41IHRlc3QgLSBWZXJzaW9uIDogIiArIHZlcnNpb25Ub1Rlc3QgLCBzdGF0LlBBU1MpOworICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWRlcGxveSBjb25uZWN0b3IgdGVzdCBmYWlsZWQuIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTY2LDIwICs2NiwyMCBAQAogICAgICAgICBkZWJ1ZygiRVhJVElORy4uLiBTVEFUVVMgPSAiICsgcmVzKTsKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tSZXN1bHRzKGludCBudW0pIHRocm93cyBFeGNlcHRpb24gewotCSAgICBkZWJ1ZygiY2hlY2tSZXN1bHQiICsgbnVtKTsKLQkgICAgZGVidWcoImdvdCBpbml0aWFsIGNvbnRleHQiICsgKG5ldyBJbml0aWFsQ29udGV4dCgpKS50b1N0cmluZygpKTsKKyAgICAgICAgZGVidWcoImNoZWNrUmVzdWx0IiArIG51bSk7CisgICAgICAgIGRlYnVnKCJnb3QgaW5pdGlhbCBjb250ZXh0IiArIChuZXcgSW5pdGlhbENvbnRleHQoKSkudG9TdHJpbmcoKSk7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL015VmVyc2lvbkNoZWNrZXIiKTsKLQlkZWJ1ZygiZ290IG8iICsgbyk7Ci0gICAgICAgIFZlcnNpb25DaGVja2VySG9tZSAgaG9tZSA9IChWZXJzaW9uQ2hlY2tlckhvbWUpIAorICAgIGRlYnVnKCJnb3QgbyIgKyBvKTsKKyAgICAgICAgVmVyc2lvbkNoZWNrZXJIb21lICBob21lID0gKFZlcnNpb25DaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBWZXJzaW9uQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBkZWJ1ZygiZ290IGhvbWUiICsgaG9tZSk7Ci0JICAgIFZlcnNpb25DaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwotCSAgICBkZWJ1ZygiZ290IG8iICsgY2hlY2tlcik7CisgICAgICAgIFZlcnNpb25DaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOworICAgICAgICBkZWJ1ZygiZ290IG8iICsgY2hlY2tlcik7CiAgICAgICAgIC8vcHJvYmxlbSBoZXJlIQotCWludCByZXN1bHQgPSBjaGVja2VyLmdldFZlcnNpb24oKTsKLQlkZWJ1ZygiY2hlY2tSZXN1bHQiICsgcmVzdWx0KTsKKyAgICBpbnQgcmVzdWx0ID0gY2hlY2tlci5nZXRWZXJzaW9uKCk7CisgICAgZGVidWcoImNoZWNrUmVzdWx0IiArIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQgPT0gbnVtOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggZTk0MDQyYi4uOGU1NDdjNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0zMyw4ICszMyw4IEBACiAgICAgICA8c2Vzc2lvbi10eXBlPlN0YXRlbGVzczwvc2Vzc2lvbi10eXBlPgogICAgICAgPHRyYW5zYWN0aW9uLXR5cGU+Q29udGFpbmVyPC90cmFuc2FjdGlvbi10eXBlPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+Ci0JPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW48L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPHNlY3VyaXR5LWlkZW50aXR5PgogICAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eS8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IGNjNWEzZjkuLmUxNDY3MjIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgPGVqYj4KICAgICAgIDxlamItbmFtZT5NeVZlcnNpb25DaGVja2VyPC9lamItbmFtZT4KICAgICAgIDxqbmRpLW5hbWU+ZWpiL015VmVyc2lvbkNoZWNrZXI8L2puZGktbmFtZT4KLTwhLS0gICAgICAKKzwhLS0KICAgICA8aW9yLXNlY3VyaXR5LWNvbmZpZz4KICAgICAgICAgPHRyYW5zcG9ydC1jb25maWc+CiAgICAgICAgICAgPGludGVncml0eT5zdXBwb3J0ZWQ8L2ludGVncml0eT4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgICAgICAgIDxjYWxsZXItcHJvcGFnYXRpb24+c3VwcG9ydGVkPC9jYWxsZXItcHJvcGFnYXRpb24+CiAgICAgICAgIDwvc2FzLWNvbnRleHQ+CiAgICAgICA8L2lvci1zZWN1cml0eS1jb25maWc+Ci0tLT4gICAgCistLT4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmVpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmVpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxnZW4tY2xhc3Nlcy8+CiAgICAgPC9lamI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvYnVpbGQucHJvcGVydGllcwppbmRleCBlZTJlY2EwLi5mZDIxYzNkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE0LDcgKzE0LDcgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAjCiAKLSAgICAKKwogIyMjIENvbXBvbmVudCBQcm9wZXJ0aWVzICMjIwogc3JjLmRpcj1zcmMKIGNvbXBvbmVudC5wdWJsaXNoLmhvbWU9LgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvYnVpbGQueG1sCmluZGV4IDczZTk4MDUuLmE5ODhlYjggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9idWlsZC54bWwKQEAgLTIzLDYyICsyMyw2MiBAQAogCiA8cHJvamVjdCBuYW1lPSJKREJDQ29ubmVjdG9yIHRvcCBsZXZlbCIgZGVmYXVsdD0iYnVpbGQiPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9qZGJjcmEvc3BpIi8+Ci0gICAgCisKICAgICAmY29tbW9uOwogICAgICZ0ZXN0Y29tbW9uOwogICAgIDxwcm9wZXJ0eSBmaWxlPSIuL2J1aWxkLnByb3BlcnRpZXMiLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUsYXNzZW1ibGUiIC8+Ci0gICAgICAgICAgCisKIAogICAgIDwhLS0gaW5pdC4gSW5pdGlhbGl6YXRpb24gaW52b2x2ZXMgY3JlYXRpbmcgcHVibGlzaGluZyBkaXJlY3RvcmllcyBhbmQKLSAgICAgICAgIE9TIHNwZWNpZmljIHRhcmdldHMuIC0tPiAKKyAgICAgICAgIE9TIHNwZWNpZmljIHRhcmdldHMuIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iaW5pdCIgZGVzY3JpcHRpb249IiR7Y29tcG9uZW50Lm5hbWV9IGluaXRpYWxpemF0aW9uIj4KICAgICAgICAgPHRzdGFtcD4KICAgICAgICAgICAgIDxmb3JtYXQgcHJvcGVydHk9InN0YXJ0LnRpbWUiIHBhdHRlcm49Ik1NL2RkL3l5eXkgaGg6bW0gYWEiLz4KLSAgICAgICAgPC90c3RhbXA+ICAgIAorICAgICAgICA8L3RzdGFtcD4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQnVpbGRpbmcgY29tcG9uZW50ICR7Y29tcG9uZW50Lm5hbWV9Ii8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIvPgotICAgICAgICA8bWtkaXIgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iLz4gICAgCisgICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIvPgogICAgIDwvdGFyZ2V0PgotICAgIDwhLS0gY29tcGlsZSAtLT4gCisgICAgPCEtLSBjb21waWxlIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdCIKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDb21waWxlIGNvbS9zdW4vKiBjb20vaXBsYW5ldC8qIHNvdXJjZXMiPiAgCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0iQ29tcGlsZSBjb20vc3VuLyogY29tL2lwbGFuZXQvKiBzb3VyY2VzIj4KICAgICAgICAgPCEtLTxlY2hvIG1lc3NhZ2U9IkNvbm5lY3RvciBhcGkgcmVzaWRlcyBpbiAke2Nvbm5lY3Rvci1hcGkuamFyfSIvPi0tPgotICAgICAgICA8amF2YWMgc3JjZGlyPSIke3NyYy5kaXJ9IiAKKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iJHtzcmMuZGlyfSIKICAgICAgICAgICAgICAgIGRlc3RkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIKLQkgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPgotCSAgICAgICA8Y2xhc3NwYXRoPgotCSAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMiPgotCSAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIgLz4KLQkgICAgICAgICAgIDwvZmlsZXNldD4KLQkgICAgICAgPC9jbGFzc3BhdGg+CisgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4KKyAgICAgICAgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzIj4KKyAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qYXIiIC8+CisgICAgICAgICAgICAgICA8L2ZpbGVzZXQ+CisgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iY29tL3N1bi9qZGJjcmEvKioiLz4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImNvbS9zdW4vYXBwc2Vydi8qKiIvPgogICAgICAgICA8L2phdmFjPgogICAgIDwvdGFyZ2V0PgotICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCIvPgogCi0gICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIj4gICAgCi0gICAgCQotCTxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmMuamFyIiAKLSAgICAgICAgICAgIGJhc2VkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiwgCi0gICAgICAgICAgICBjb20vc3VuL2FwcHNlcnYvKiovKiwgY29tL3N1bi9qZGJjcmEvdXRpbC8qKi8qLCBjb20vc3VuL2pkYmNyYS9jb21tb24vKiovKiIvPiAKLSAgIAkKLSAgICAgICAgPGNvcHkgZmlsZT0iJHtzcmMuZGlyfS9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbCIgCi0gICAgICAgICAgICAgICAgdG9maWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSI+CisKKyAgICA8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjLmphciIKKyAgICAgICAgICAgIGJhc2VkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiwKKyAgICAgICAgICAgIGNvbS9zdW4vYXBwc2Vydi8qKi8qLCBjb20vc3VuL2pkYmNyYS91dGlsLyoqLyosIGNvbS9zdW4vamRiY3JhL2NvbW1vbi8qKi8qIi8+CisKKyAgICAgICAgPGNvcHkgZmlsZT0iJHtzcmMuZGlyfS9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbCIKKyAgICAgICAgICAgICAgICB0b2ZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3Rlc3RqZGJjcmEucmFyIiAKLQkJYmFzZWRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9IiBpbmNsdWRlcz0iamRiYy5qYXIiPgorICAgICAgIDxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3Rlc3RqZGJjcmEucmFyIgorICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iIGluY2x1ZGVzPSJqZGJjLmphciI+CiAKLSAgIAkJPG1ldGFpbmYgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KIAotICAgCTxkZWxldGUgZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIvPgotCQorICAgICAgIDxkZWxldGUgZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIvPgorCiAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVzY3JpcHRpb249IkNsZWFuIHRoZSBidWlsZCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKaW5kZXggOWY4Mzk5YS4uYjZlZjMwYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQpAQCAtMjAsMTUgKzIwLDE1IEBACiBpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOwogCiAvKioKLSAqIFRoZSA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uIAorICogVGhlIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24KICAqIHNlcnZlciB3aWxsIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4gQW4gYXBwbGljYXRpb24gcHJvZ3JhbSB3b3VsZCBiZSBhYmxlCi0gKiB0byB1c2UgdGhpcyBpbnRlcmZhY2UgdG8gZG8gdGhlIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCBieSBTdW5PTkUgCisgKiB0byB1c2UgdGhpcyBpbnRlcmZhY2UgdG8gZG8gdGhlIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCBieSBTdW5PTkUKICAqIGFwcGxpY2F0aW9uIHNlcnZlci4KLSAqIDxwPkEgc2FtcGxlIGNvZGUgZm9yIGdldHRpbmcgZHJpdmVyJ3MgY29ubmVjdGlvbiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBsaWtlIAorICogPHA+QSBzYW1wbGUgY29kZSBmb3IgZ2V0dGluZyBkcml2ZXIncyBjb25uZWN0aW9uIGltcGxlbWVudGF0aW9uIHdvdWxkIGxpa2UKICAqIHRoZSBmb2xsb3dpbmcuCiAgKiA8cHJlPgogICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICBjb20uc3VuLmFwcHNlcnYuRGF0YVNvdXJjZSBkcyA9IChjb20uc3VuLmFwcHNlcnYuRGF0YVNPdXJjZSkgaWMubG9va3VwKCJqZGJjL1BvaW50QmFzZSIpOyAKKyAgICAgY29tLnN1bi5hcHBzZXJ2LkRhdGFTb3VyY2UgZHMgPSAoY29tLnN1bi5hcHBzZXJ2LkRhdGFTT3VyY2UpIGljLmxvb2t1cCgiamRiYy9Qb2ludEJhc2UiKTsKICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgIENvbm5lY3Rpb24gZHJpdmVyY29uID0gZHMuZ2V0Q29ubmVjdGlvbihjb24pOwogCkBAIC0zNiwxMyArMzYsMTMgQEAKIAogICAgICBjb24uY2xvc2UoKTsKICAgIDwvcHJlPgotICogCisgKgogICogQGF1dGhvciBCaW5vZCBQLkcKICAqLwogcHVibGljIGludGVyZmFjZSBEYXRhU291cmNlIGV4dGVuZHMgamF2YXguc3FsLkRhdGFTb3VyY2UgewogCiAgICAgLyoqCi0gICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIgCisgICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIKICAgICAgKiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24gc2VydmVyLiBJZiBhbiBhY3R1YWwgY29ubmVjdGlvbiBpcwogICAgICAqIHN1cHBsaWVkIGFzIGFyZ3VtZW50LCB0aGVuIGl0IHdpbGwgYmUganVzdCByZXR1cm5lZC4KICAgICAgKgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCmluZGV4IGMyODIyZTIuLjZhMzY2YjAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKQEAgLTI3LDIyICsyNywyMiBAQAogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKIC8qKgotICogVXRpbGl0eSBjbGFzcywgd2hpY2ggd291bGQgY3JlYXRlIG5lY2Vzc2FyeSBEYXRhc291cmNlIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlIAorICogVXRpbGl0eSBjbGFzcywgd2hpY2ggd291bGQgY3JlYXRlIG5lY2Vzc2FyeSBEYXRhc291cmNlIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlCiAgKiBzcGVjaWZpY2F0aW9uLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCi0gKiBAc2VlCQljb20uc3VuLmpkYmNyYS5jb21tb24uRGF0YVNvdXJjZVNwZWMKLSAqIEBzZWUJCWNvbS5zdW4uamRiY3JhLnV0aWwuTWV0aG9kRXhjZWN1dG9yCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRworICogQHNlZSAgICAgICAgY29tLnN1bi5qZGJjcmEuY29tbW9uLkRhdGFTb3VyY2VTcGVjCisgKiBAc2VlICAgICAgICBjb20uc3VuLmpkYmNyYS51dGlsLk1ldGhvZEV4Y2VjdXRvcgogICovCiBwdWJsaWMgY2xhc3MgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZXsKIAogICAgIHByaXZhdGUgRGF0YVNvdXJjZVNwZWMgc3BlYzsKLSAgICAKKwogICAgIHByaXZhdGUgSGFzaHRhYmxlIGRyaXZlclByb3BlcnRpZXMgPSBudWxsOwotICAgIAotICAgIHByaXZhdGUgTWV0aG9kRXhlY3V0b3IgZXhlY3V0b3IgPSBudWxsOyAgICAKLSAgICAKKworICAgIHByaXZhdGUgTWV0aG9kRXhlY3V0b3IgZXhlY3V0b3IgPSBudWxsOworCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTUwLDE2NyArNTAsMTY3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnID0gZmFsc2U7CiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0IGEgRGF0YVNvdXJjZSBPYmplY3QgZnJvbSB0aGUgc3BlYy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3BlYwk8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3BlYyAgICA8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIERhdGFTb3VyY2VPYmplY3RCdWlsZGVyKERhdGFTb3VyY2VTcGVjIHNwZWMpIHsKLSAgICAJdGhpcy5zcGVjID0gc3BlYzsKLSAgICAJZXhlY3V0b3IgPSBuZXcgTWV0aG9kRXhlY3V0b3IoKTsKKyAgICAgICAgdGhpcy5zcGVjID0gc3BlYzsKKyAgICAgICAgZXhlY3V0b3IgPSBuZXcgTWV0aG9kRXhlY3V0b3IoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3QgdGhlIERhdGFTb3VyY2UgT2JqZWN0IGZyb20gdGhlIHNwZWMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCU9iamVjdCBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgRGF0YVNvdXJjZVNwZWMuCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gaWYgdGhlIGNsYXNzIGlzIG5vdCBmb3VuZCBvciBzb21lIGlzc3VlIGluIGV4ZWN1dGluZwotICAgICAqCQlzb21lIG1ldGhvZC4KKyAgICAgKiBAcmV0dXJuICAgIE9iamVjdCBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgRGF0YVNvdXJjZVNwZWMuCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gaWYgdGhlIGNsYXNzIGlzIG5vdCBmb3VuZCBvciBzb21lIGlzc3VlIGluIGV4ZWN1dGluZworICAgICAqICAgICAgICBzb21lIG1ldGhvZC4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGNvbnN0cnVjdERhdGFTb3VyY2VPYmplY3QoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCWRyaXZlclByb3BlcnRpZXMgPSBwYXJzZURyaXZlclByb3BlcnRpZXMoc3BlYyk7CisgICAgICAgIGRyaXZlclByb3BlcnRpZXMgPSBwYXJzZURyaXZlclByb3BlcnRpZXMoc3BlYyk7CiAgICAgICAgIE9iamVjdCBkYXRhU291cmNlT2JqZWN0ID0gZ2V0RGF0YVNvdXJjZU9iamVjdCgpOwogICAgICAgICBNZXRob2RbXSBtZXRob2RzID0gZGF0YVNvdXJjZU9iamVjdC5nZXRDbGFzcygpLmdldE1ldGhvZHMoKTsKICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBtZXRob2RzW2ldLmdldE5hbWUoKTsKLQkgICAgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0VXNlciIpKXsJICAgIAkKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQYXNzd29yZCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dpblRpbWVPdXQiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ1dyaXRlciIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR1dSSVRFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YWJhc2VOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhU291cmNlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREZXNjcmlwdGlvbiIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TmV0d29ya1Byb3RvY29sIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQb3J0TnVtYmVyIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0Um9sZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0U2VydmVyTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4U3RhdGVtZW50cyIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFNUQVRFTUVOVFMpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldEluaXRpYWxQb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLklOSVRJQUxQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWluUG9vbFNpemUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NSU5QT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4UG9vbFNpemUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4SWRsZVRpbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhJRExFVElNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UHJvcGVydHlDeWNsZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBST1BFUlRZQ1lDTEUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChkcml2ZXJQcm9wZXJ0aWVzLmNvbnRhaW5zS2V5KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSkpewotCSAgICAJVmVjdG9yIHZhbHVlcyA9IChWZWN0b3IpIGRyaXZlclByb3BlcnRpZXMuZ2V0KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSk7Ci0JICAgICAgICBleGVjdXRvci5ydW5NZXRob2QobWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0LCB2YWx1ZXMpOwotCSAgICB9CisgICAgICAgIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFVzZXIiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UGFzc3dvcmQiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9naW5UaW1lT3V0IikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dXcml0ZXIiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dXUklURVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFiYXNlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YVNvdXJjZU5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGVzY3JpcHRpb24iKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TmV0d29ya1Byb3RvY29sIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQb3J0TnVtYmVyIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0Um9sZU5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0U2VydmVyTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFN0YXRlbWVudHMiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhTVEFURU1FTlRTKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRJbml0aWFsUG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5JTklUSUFMUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1pblBvb2xTaXplIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUlOUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFBvb2xTaXplIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heElkbGVUaW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYSURMRVRJTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFByb3BlcnR5Q3ljbGUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QUk9QRVJUWUNZQ0xFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAoZHJpdmVyUHJvcGVydGllcy5jb250YWluc0tleShtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpKXsKKyAgICAgICAgICAgIFZlY3RvciB2YWx1ZXMgPSAoVmVjdG9yKSBkcml2ZXJQcm9wZXJ0aWVzLmdldChtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpOworICAgICAgICAgICAgZXhlY3V0b3IucnVuTWV0aG9kKG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCwgdmFsdWVzKTsKKyAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBkYXRhU291cmNlT2JqZWN0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgZXh0cmEgZHJpdmVyIHByb3BlcnRpZXMgZnJvbSB0aGUgRGF0YVNvdXJjZVNwZWMgb2JqZWN0IGFuZAogICAgICAqIHBhcnNlIHRoZW0gdG8gYSBzZXQgb2YgbWV0aG9kTmFtZSBhbmQgcGFyYW1ldGVycy4gUHJlcGFyZSBhIGhhc2h0YWJsZQogICAgICAqIGNvbnRhaW5pbmcgdGhlc2UgZGV0YWlscyBhbmQgcmV0dXJuLgogICAgICAqCi0gICAgICogQHBhcmFtCXNwZWMJPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEByZXR1cm4JSGFzaHRhYmxlIGNvbnRhaW5pbmcgbWV0aG9kIG5hbWVzIGFuZCBwYXJhbWV0ZXJzLAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JSWYgZGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBhbmQgcHJvcGVydHkgc3RyaW5nCi0gICAgICoJCQkJCWlzIG5vdCBudWxsLgorICAgICAqIEBwYXJhbSAgICBzcGVjICAgIDxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIEhhc2h0YWJsZSBjb250YWluaW5nIG1ldGhvZCBuYW1lcyBhbmQgcGFyYW1ldGVycywKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIElmIGRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgYW5kIHByb3BlcnR5IHN0cmluZworICAgICAqICAgICAgICAgICAgICAgICAgICBpcyBub3QgbnVsbC4KICAgICAgKi8KICAgICBwcml2YXRlIEhhc2h0YWJsZSBwYXJzZURyaXZlclByb3BlcnRpZXMoRGF0YVNvdXJjZVNwZWMgc3BlYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlTdHJpbmcgZGVsaW0gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOworICAgICAgICBTdHJpbmcgZGVsaW0gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogCiAgICAgICAgIFN0cmluZyBwcm9wID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7Ci0JaWYgKCBwcm9wID09IG51bGwgfHwgcHJvcC50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgICByZXR1cm4gbmV3IEhhc2h0YWJsZSgpOwotCX0gZWxzZSBpZiAoZGVsaW0gPT0gbnVsbCB8fCBkZWxpbS5lcXVhbHMoIiIpKSB7Ci0JICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbiAoIkRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24iKTsKLQl9Ci0JCi0JSGFzaHRhYmxlIHByb3BlcnRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JZGVsaW0gPSBkZWxpbS50cmltKCk7CQotCVN0cmluZyBzZXAgPSBkZWxpbStkZWxpbTsKLQlpbnQgc2VwTGVuID0gc2VwLmxlbmd0aCgpOwotCVN0cmluZyBjYWNoZSA9IHByb3A7Ci0JVmVjdG9yIG1ldGhvZHMgPSBuZXcgVmVjdG9yKCk7Ci0JCi0Jd2hpbGUgKGNhY2hlLmluZGV4T2Yoc2VwKSAhPSAtMSkgewotCSAgICBpbnQgaW5kZXggPSBjYWNoZS5pbmRleE9mKHNlcCk7Ci0JICAgIFN0cmluZyBuYW1lID0gY2FjaGUuc3Vic3RyaW5nKDAsaW5kZXgpOwotCSAgICBpZiAobmFtZS50cmltKCkgIT0gIiIpIHsKLQkgICAgICAgIG1ldGhvZHMuYWRkKG5hbWUpOwotCSAgICAJY2FjaGUgPSBjYWNoZS5zdWJzdHJpbmcoaW5kZXgrc2VwTGVuKTsKLQkgICAgfQotCX0KLQkKLSAgICAJRW51bWVyYXRpb24gYWxsTWV0aG9kcyA9IG1ldGhvZHMuZWxlbWVudHMoKTsKLSAgICAJd2hpbGUgKGFsbE1ldGhvZHMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAJICAgIFN0cmluZyBvbmVNZXRob2QgPSAoU3RyaW5nKSBhbGxNZXRob2RzLm5leHRFbGVtZW50KCk7ICAgIAkgICAgCi0gICAgCSAgICBpZiAoIW9uZU1ldGhvZC50cmltKCkuZXF1YWxzKCIiKSkgewotICAgIAkgICAgCVN0cmluZyBtZXRob2ROYW1lID0gbnVsbDsKLSAgICAJICAgIAlWZWN0b3IgcGFybXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCSAgICAJU3RyaW5nVG9rZW5pemVyIG1ldGhvZERldGFpbHMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKG9uZU1ldGhvZCxkZWxpbSk7Ci0JCWZvciAoaW50IGk9MDsgbWV0aG9kRGV0YWlscy5oYXNNb3JlVG9rZW5zKCk7aSsrICkgewotCQkgICAgU3RyaW5nIHRva2VuID0gKFN0cmluZykgbWV0aG9kRGV0YWlscy5uZXh0VG9rZW4oKTsKLQkJICAgIGlmIChpPT0wKSB7Ci0JCSAgICAJbWV0aG9kTmFtZSA9IHRva2VuLnRvVXBwZXJDYXNlKCk7Ci0JCSAgICB9IGVsc2UgewotCQkgICAgCXBhcm1zLmFkZCh0b2tlbik7CQkgICAgCQotCQkgICAgfQotCQl9Ci0JCXByb3BlcnRpZXMucHV0KG1ldGhvZE5hbWUscGFybXMpOwotICAgIAkgICAgfSAgICAJICAgIAotICAgIAl9Ci0gICAgCXJldHVybiBwcm9wZXJ0aWVzOworICAgIGlmICggcHJvcCA9PSBudWxsIHx8IHByb3AudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBIYXNodGFibGUoKTsKKyAgICB9IGVsc2UgaWYgKGRlbGltID09IG51bGwgfHwgZGVsaW0uZXF1YWxzKCIiKSkgeworICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24gKCJEZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGluIHRoZSBjb25maWd1cmF0aW9uIik7CiAgICAgfQotICAgIAorCisgICAgSGFzaHRhYmxlIHByb3BlcnRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgZGVsaW0gPSBkZWxpbS50cmltKCk7CisgICAgU3RyaW5nIHNlcCA9IGRlbGltK2RlbGltOworICAgIGludCBzZXBMZW4gPSBzZXAubGVuZ3RoKCk7CisgICAgU3RyaW5nIGNhY2hlID0gcHJvcDsKKyAgICBWZWN0b3IgbWV0aG9kcyA9IG5ldyBWZWN0b3IoKTsKKworICAgIHdoaWxlIChjYWNoZS5pbmRleE9mKHNlcCkgIT0gLTEpIHsKKyAgICAgICAgaW50IGluZGV4ID0gY2FjaGUuaW5kZXhPZihzZXApOworICAgICAgICBTdHJpbmcgbmFtZSA9IGNhY2hlLnN1YnN0cmluZygwLGluZGV4KTsKKyAgICAgICAgaWYgKG5hbWUudHJpbSgpICE9ICIiKSB7CisgICAgICAgICAgICBtZXRob2RzLmFkZChuYW1lKTsKKyAgICAgICAgICAgIGNhY2hlID0gY2FjaGUuc3Vic3RyaW5nKGluZGV4K3NlcExlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAgICAgRW51bWVyYXRpb24gYWxsTWV0aG9kcyA9IG1ldGhvZHMuZWxlbWVudHMoKTsKKyAgICAgICAgd2hpbGUgKGFsbE1ldGhvZHMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBvbmVNZXRob2QgPSAoU3RyaW5nKSBhbGxNZXRob2RzLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICBpZiAoIW9uZU1ldGhvZC50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gbnVsbDsKKyAgICAgICAgICAgICAgICBWZWN0b3IgcGFybXMgPSBuZXcgVmVjdG9yKCk7CisgICAgICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIG1ldGhvZERldGFpbHMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKG9uZU1ldGhvZCxkZWxpbSk7CisgICAgICAgIGZvciAoaW50IGk9MDsgbWV0aG9kRGV0YWlscy5oYXNNb3JlVG9rZW5zKCk7aSsrICkgeworICAgICAgICAgICAgU3RyaW5nIHRva2VuID0gKFN0cmluZykgbWV0aG9kRGV0YWlscy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgIGlmIChpPT0wKSB7CisgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSA9IHRva2VuLnRvVXBwZXJDYXNlKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBhcm1zLmFkZCh0b2tlbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHJvcGVydGllcy5wdXQobWV0aG9kTmFtZSxwYXJtcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUgc3BlYy4KICAgICAgKgotICAgICAqIEByZXR1cm4JSW5pdGlhbCBEYXRhU291cmNlIE9iamVjdCBpbnN0YW5jZS4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBJZiBjbGFzcyBuYW1lIGlzIHdyb25nIG9yIGNsYXNzcGF0aCBpcyBub3Qgc2V0Ci0gICAgICoJCXByb3Blcmx5LgorICAgICAqIEByZXR1cm4gICAgSW5pdGlhbCBEYXRhU291cmNlIE9iamVjdCBpbnN0YW5jZS4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBJZiBjbGFzcyBuYW1lIGlzIHdyb25nIG9yIGNsYXNzcGF0aCBpcyBub3Qgc2V0CisgICAgICogICAgICAgIHByb3Blcmx5LgogICAgICAqLwogICAgIHByaXZhdGUgT2JqZWN0IGdldERhdGFTb3VyY2VPYmplY3QoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCVN0cmluZyBjbGFzc05hbWUgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOwotICAgICAgICB0cnkgeyAgICAgICAgICAgIAorICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIGRhdGFTb3VyY2VDbGFzcyA9IENsYXNzLmZvck5hbWUoY2xhc3NOYW1lKTsKICAgICAgICAgICAgIE9iamVjdCBkYXRhU291cmNlT2JqZWN0ID0gZGF0YVNvdXJjZUNsYXNzLm5ld0luc3RhbmNlKCk7CiAgICAgICAgICAgICByZXR1cm4gZGF0YVNvdXJjZU9iamVjdDsKICAgICAgICAgfSBjYXRjaChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGNmbmUpewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jbmZlX2RzIiwgY2ZuZSk7Ci0JCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NuZmVfZHMiLCBjZm5lKTsKKwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDbGFzcyBOYW1lIGlzIHdyb25nIG9yIENsYXNzIHBhdGggaXMgbm90IHNldCBmb3IgOiIgKyBjbGFzc05hbWUpOwogICAgICAgICB9IGNhdGNoKEluc3RhbnRpYXRpb25FeGNlcHRpb24gY2UpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaW5zdCIsIGNsYXNzTmFtZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2luc3QiLCBjbGFzc05hbWUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJFcnJvciBpbiBpbnN0YW50aWF0aW5nIiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBjZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hY2NfaW5zdCIsIGNsYXNzTmFtZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2FjY19pbnN0IiwgY2xhc3NOYW1lKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIEVycm9yIGluIGluc3RhbnRpYXRpbmciICsgY2xhc3NOYW1lKTsKICAgICAgICAgfQogICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQppbmRleCBlZjZjNGM5Li4zZGMxNTRkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCkBAIC0xOSw5MiArMTksOTIgQEAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwogCiAvKioKLSAqIEVuY2Fwc3VsYXRlIHRoZSBEYXRhU291cmNlIG9iamVjdCBkZXRhaWxzIG9idGFpbmVkIGZyb20gCisgKiBFbmNhcHN1bGF0ZSB0aGUgRGF0YVNvdXJjZSBvYmplY3QgZGV0YWlscyBvYnRhaW5lZCBmcm9tCiAgKiBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlU3BlYyBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUk5BTUUJCQkJPSAxOyAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVNTV09SRAkJCQk9IDI7ICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVUkwJCQkJCT0gMzsgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR0lOVElNRU9VVAkJCT0gNDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dXUklURVIJCQkJPSA1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFCQVNFTkFNRQkJCT0gNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFTkFNRQkJCT0gNzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDUklQVElPTgkJCQk9IDg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS1BST1RPQ09MCQkJPSA5OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUlROVU1CRVIJCQkJPSAxMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0xFTkFNRQkJCQk9IDExOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFUlZFUk5BTUUJCQkJPSAxMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhTVEFURU1FTlRTCQkJPSAxMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTklUSUFMUE9PTFNJWkUJCQk9IDE0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTlBPT0xTSVpFCQkJCT0gMTU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYUE9PTFNJWkUJCQkJPSAxNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhJRExFVElNRQkJCQk9IDE3OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZQ1lDTEUJCQk9IDE4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERSSVZFUlBST1BFUlRJRVMJCQk9IDE5OyAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTEFTU05BTUUJCQkJPSAyMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUxJTUlURVIJCQkJPSAyMTsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYQURBVEFTT1VSQ0UJCQk9IDIyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0UJCQkJPSAyMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OUE9PTERBVEFTT1VSQ0UJCT0gMjQ7Ci0gICAgICAKLSAgICAvL0dKQ0lOVCAgICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQJPSAyNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OTUVUSE9ECQkJPSAyNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OVEFCTEVOQU1FCQkJPSAyNzsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUUkFOU0FDVElPTklTT0xBVElPTgkJPSAyODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHVUFSQU5URUVJU09MQVRJT05MRVZFTAkJPSAyOTsKLSAgICAgICAgICAgIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRVJOQU1FICAgICAgICAgICAgICAgID0gMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVNTV09SRCAgICAgICAgICAgICAgICA9IDI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVJMICAgICAgICAgICAgICAgICAgICA9IDM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HSU5USU1FT1VUICAgICAgICAgICAgPSA0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR1dSSVRFUiAgICAgICAgICAgICAgICA9IDU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQUJBU0VOQU1FICAgICAgICAgICAgPSA2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0VOQU1FICAgICAgICAgICAgPSA3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFU0NSSVBUSU9OICAgICAgICAgICAgICAgID0gODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLUFJPVE9DT0wgICAgICAgICAgICA9IDk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9SVE5VTUJFUiAgICAgICAgICAgICAgICA9IDEwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPTEVOQU1FICAgICAgICAgICAgICAgID0gMTE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVkVSTkFNRSAgICAgICAgICAgICAgICA9IDEyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFNUQVRFTUVOVFMgICAgICAgICAgICA9IDEzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOSVRJQUxQT09MU0laRSAgICAgICAgICAgID0gMTQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOUE9PTFNJWkUgICAgICAgICAgICAgICAgPSAxNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhQT09MU0laRSAgICAgICAgICAgICAgICA9IDE2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWElETEVUSU1FICAgICAgICAgICAgICAgID0gMTc7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlDWUNMRSAgICAgICAgICAgID0gMTg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRFJJVkVSUFJPUEVSVElFUyAgICAgICAgICAgID0gMTk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xBU1NOQU1FICAgICAgICAgICAgICAgID0gMjA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVMSU1JVEVSICAgICAgICAgICAgICAgID0gMjE7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYQURBVEFTT1VSQ0UgICAgICAgICAgICA9IDIyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0UgICAgICAgICAgICAgICAgPSAyMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OUE9PTERBVEFTT1VSQ0UgICAgICAgID0gMjQ7CisKKyAgICAvL0dKQ0lOVAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQgICAgPSAyNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OTUVUSE9EICAgICAgICAgICAgPSAyNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OVEFCTEVOQU1FICAgICAgICAgICAgPSAyNzsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRSQU5TQUNUSU9OSVNPTEFUSU9OICAgICAgICA9IDI4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdVQVJBTlRFRUlTT0xBVElPTkxFVkVMICAgICAgICA9IDI5OworCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgZGV0YWlscyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgcHJvcGVydHkuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcHJvcGVydHkJUHJvcGVydHkgTmFtZSB0byBiZSBzZXQuCi0gICAgICogQHBhcmFtCXZhbHVlCQlWYWx1ZSBvZiBwcm9wZXJ0eSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIHByb3BlcnR5ICAgIFByb3BlcnR5IE5hbWUgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICB2YWx1ZSAgICAgICAgVmFsdWUgb2YgcHJvcGVydHkgdG8gYmUgc2V0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERldGFpbChpbnQgcHJvcGVydHksIFN0cmluZyB2YWx1ZSkgewotICAgIAlkZXRhaWxzLnB1dChuZXcgSW50ZWdlcihwcm9wZXJ0eSksdmFsdWUpOworICAgICAgICBkZXRhaWxzLnB1dChuZXcgSW50ZWdlcihwcm9wZXJ0eSksdmFsdWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUgb2YgcHJvcGVydHkKICAgICAgKgotICAgICAqIEByZXR1cm4JVmFsdWUgb2YgdGhlIHByb3BlcnR5LgorICAgICAqIEByZXR1cm4gICAgVmFsdWUgb2YgdGhlIHByb3BlcnR5LgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGV0YWlsKGludCBwcm9wZXJ0eSkgewotICAgIAlpZiAoZGV0YWlscy5jb250YWluc0tleShuZXcgSW50ZWdlcihwcm9wZXJ0eSkpKSB7Ci0gICAgCSAgICByZXR1cm4gKFN0cmluZykgZGV0YWlscy5nZXQobmV3IEludGVnZXIocHJvcGVydHkpKTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHJldHVybiBudWxsOwotICAgIAl9ICAgIAkKKyAgICAgICAgaWYgKGRldGFpbHMuY29udGFpbnNLZXkobmV3IEludGVnZXIocHJvcGVydHkpKSkgeworICAgICAgICAgICAgcmV0dXJuIChTdHJpbmcpIGRldGFpbHMuZ2V0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyB3aGV0aGVyIHR3byA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0cwogICAgICAqIGFyZSBlcXVhbCBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb2JqCUluc3RhbmNlIG9mIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG9iaiAgICBJbnN0YW5jZSBvZiA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7Ci0gICAgCWlmIChvYmogaW5zdGFuY2VvZiBEYXRhU291cmNlU3BlYykgewotICAgIAkgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5lcXVhbHMoKChEYXRhU291cmNlU3BlYylvYmopLmRldGFpbHMpOwotICAgIAl9Ci0gICAgCXJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGFTb3VyY2VTcGVjKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmVxdWFscygoKERhdGFTb3VyY2VTcGVjKW9iaikuZGV0YWlscyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgaGFzaENvZGUgb2YgdGhpcyA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybgloYXNoQ29kZSBvZiB0aGlzIG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2hDb2RlIG9mIHRoaXMgb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgCXJldHVybiB0aGlzLmRldGFpbHMuaGFzaENvZGUoKTsKLSAgICB9ICAgIAorICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmhhc2hDb2RlKCk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbAppbmRleCBlZjQzOGZjLi4zYjRmYWViIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iLiIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL2NvbW1vbiIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0zNiwxMyArMzYsMTMgQEAKIAogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxMyIgZGVwZW5kcz0iY29tcGlsZSIvPgogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxNCIgZGVwZW5kcz0iY29tcGlsZSIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxMyIgZGVwZW5kcz0icGFja2FnZSIvPgogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxNCIgZGVwZW5kcz0icGFja2FnZSIvPgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxMyIgZGVwZW5kcz0iY29tcGlsZTEzLCBwYWNrYWdlMTMiLz4KICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgotICAgIAorCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCmluZGV4IGJmY2JmMGIuLjRlYmVkNmUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKQEAgLTI0LDI0ICsyNCwyNCBAQAogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yOwogCiAvKioKLSAqIEhvbGRzIHRoZSBqYXZhLnNxbC5Db25uZWN0aW9uIG9iamVjdCwgd2hpY2ggaXMgdG8gYmUgCisgKiBIb2xkcyB0aGUgamF2YS5zcWwuQ29ubmVjdGlvbiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlCiAgKiBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uIHByb2dyYW0uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0aW9uSG9sZGVyIGltcGxlbWVudHMgQ29ubmVjdGlvbnsgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvbkhvbGRlciBpbXBsZW1lbnRzIENvbm5lY3Rpb257CiAKICAgICBwcml2YXRlIENvbm5lY3Rpb24gY29uOwotICAgIAorCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKLSAgICBwcml2YXRlIGJvb2xlYW4gd3JhcHBlZEFscmVhZHkgPSBmYWxzZTsgICAgCi0gICAgCisKKyAgICBwcml2YXRlIGJvb2xlYW4gd3JhcHBlZEFscmVhZHkgPSBmYWxzZTsKKwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0Nsb3NlZCA9IGZhbHNlOwotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIHZhbGlkID0gdHJ1ZTsKLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBhY3RpdmUgPSBmYWxzZTsKICAgICAvKioKICAgICAgKiBUaGUgYWN0aXZlIGZsYWcgaXMgZmFsc2Ugd2hlbiB0aGUgY29ubmVjdGlvbiBoYW5kbGUgaXMKQEAgLTUzLDIxOSArNTMsMjE5IEBACiAgICAgICogZnVuY3Rpb24sIHRoZSBhYm92ZSBtZXRob2QgaW52b2NhdGlvbiBzdWNjZWVkczsgb3RoZXJ3aXNlCiAgICAgICogYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KICAgICAgKi8KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYSBDb25uZWN0aW9uIGhvbGRlci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uSG9sZGVyKENvbm5lY3Rpb24gY29uLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLmNvbiA9IGNvbjsKICAgICAgICAgdGhpcy5tYyAgPSBtYzsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gdGhpcyBob2xkZXIgb2JqZWN0LgotICAgICAqIAotICAgICAqIEByZXR1cm4JQ29ubmVjdGlvbiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIENvbm5lY3Rpb24gb2JqZWN0LgogICAgICAqLwogICAgIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbigpIHsKLSAgICAJcmV0dXJuIGNvbjsKKyAgICAgICAgcmV0dXJuIGNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBmbGFnIHRvIGluZGljYXRlIHRoYXQsIHRoZSBjb25uZWN0aW9uIGlzIHdyYXBwZWQgYWxyZWFkeSBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jd3JhcEZsYWcJCisgICAgICogQHBhcmFtICAgIHdyYXBGbGFnCiAgICAgICovCiAgICAgdm9pZCB3cmFwcGVkKGJvb2xlYW4gd3JhcEZsYWcpewogICAgICAgICB0aGlzLndyYXBwZWRBbHJlYWR5ID0gd3JhcEZsYWc7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB3aGV0aGVyIGl0IGlzIHdyYXBwZWQgYWxyZWFkeSBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXdyYXBwZWQgZmxhZy4KKyAgICAgKiBAcmV0dXJuICAgIHdyYXBwZWQgZmxhZy4KICAgICAgKi8KICAgICBib29sZWFuIGlzV3JhcHBlZCgpewogICAgICAgICByZXR1cm4gd3JhcHBlZEFscmVhZHk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHJlc3BvbnNpYmxlCiAgICAgICogZm9yIHRoaXMgY29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqLwogICAgIE1hbmFnZWRDb25uZWN0aW9uIGdldE1hbmFnZWRDb25uZWN0aW9uKCkgewogICAgICAgICByZXR1cm4gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVwbGFjZSB0aGUgYWN0dWFsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCB3aXRoIHRoZSBvbmUKLSAgICAgKiBzdXBwbGllZC4gQWxzbyByZXBsYWNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBsaW5rLiAgICAgCisgICAgICogc3VwcGxpZWQuIEFsc28gcmVwbGFjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gbGluay4KICAgICAgKgotICAgICAqIEBwYXJhbQljb24gPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQltYyAgPGNvZGU+IE1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIGNvbiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG1jICA8Y29kZT4gTWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICB2b2lkIGFzc29jaWF0ZUNvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24sIE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7Ci0gICAgCXRoaXMubWMgPSBtYzsKLSAgICAJdGhpcy5jb24gPSBjb247CisgICAgICAgIHRoaXMubWMgPSBtYzsKKyAgICAgICAgdGhpcy5jb24gPSBjb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2xlYXJzIGFsbCB3YXJuaW5ncyByZXBvcnRlZCBmb3IgdGhlIHVuZGVybHlpbmcgY29ubmVjdGlvbiAgb2JqZWN0LgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjbGVhcldhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsgICAgCi0JY2hlY2tWYWxpZGl0eSgpOworICAgIHB1YmxpYyB2b2lkIGNsZWFyV2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgY29uLmNsZWFyV2FybmluZ3MoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDbG9zZXMgdGhlIGxvZ2ljYWwgY29ubmVjdGlvbi4gICAgCisgICAgICogQ2xvc2VzIHRoZSBsb2dpY2FsIGNvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICAgIGlzQ2xvc2VkID0gdHJ1ZTsKLSAgICAgICAgbWMuY29ubmVjdGlvbkNsb3NlZChudWxsLCB0aGlzKTsgICAgICAgIAorICAgICAgICBtYy5jb25uZWN0aW9uQ2xvc2VkKG51bGwsIHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEludmFsaWRhdGVzIHRoaXMgb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGludmFsaWRhdGUoKSB7Ci0gICAgCXZhbGlkID0gZmFsc2U7CisgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2xvc2VzIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGludm9sdmVkIGluIHRoaXMuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwotICAgIHZvaWQgYWN0dWFsQ2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueyAgICAKKyAgICB2b2lkIGFjdHVhbENsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgICAgY29uLmNsb3NlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IHRoZSBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbW1pdCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5jb21taXQoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5jb21taXQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4gICAgIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KGludCByZXN1bHRTZXRUeXBlLCBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudChyZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRIb2xkYWJpbGl0eQlSZXN1bHRTZXQgSG9sZGFiaWxpdHkuICAgICAKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LiAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgICAgIAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LCAKLSAgICAJCQkJICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJICAgICAKKyAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgICAgICAJCQkgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CiAgICAgfQotIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGF1dG8tY29tbWl0IG1vZGUgZm9yIHRoZSB1bmRlcmx5aW5nIDxjb2RlPiBDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGN1cnJlbnQgc3RhdGUgb2YgY29ubmVjdGlvbidzIGF1dG8tY29tbWl0IG1vZGUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBnZXRBdXRvQ29tbWl0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRBdXRvQ29tbWl0KCk7Ci0gICAgfSAgIAotIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRBdXRvQ29tbWl0KCk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSB1bmRlcmx5aW5nIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCdzIGNhdGFsb2cgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JQ2F0YWxvZyBOYW1lLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIENhdGFsb2cgTmFtZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDYXRhbG9nKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uZ2V0Q2F0YWxvZygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZAogICAgICAqIHVzaW5nIHRoaXMgY29ubmVjdGlvbiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhvbGRhYmlsaXR5IHZhbHVlLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIGhvbGRhYmlsaXR5IHZhbHVlLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldEhvbGRhYmlsaXR5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuCWNvbi5nZXRIb2xkYWJpbGl0eSgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuICAgIGNvbi5nZXRIb2xkYWJpbGl0eSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+RGF0YWJhc2VNZXRhRGF0YTwvY29kZT5vYmplY3QgZnJvbSB0aGUgdW5kZXJseWluZwogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT5EYXRhYmFzZU1ldGFEYXRhPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YWJhc2VNZXRhRGF0YSBnZXRNZXRhRGF0YSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0TWV0YURhdGEoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0TWV0YURhdGEoKTsKICAgICB9Ci0gCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhpcyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QncyBjdXJyZW50IHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KICAgICAgKgogICAgICAqIEByZXR1cm4gVHJhbnNhY3Rpb24gbGV2ZWwKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIAorICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoCiAgICAgICogPGNvZGU+IENvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JVHlwZU1hcCBzZXQgaW4gdGhpcyBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgVHlwZU1hcCBzZXQgaW4gdGhpcyBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBNYXAgZ2V0VHlwZU1hcCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0VHlwZU1hcCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRUeXBlTWFwKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0yNzMsMTg0ICsyNzMsMTg0IEBACiAgICAgICogPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiBGaXJzdCA8Y29kZT4gU1FMV2FybmluZzwvY29kZT4gT2JqZWN0IG9yIG51bGwuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU1FMV2FybmluZyBnZXRXYXJuaW5ncygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0V2FybmluZ3MoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0V2FybmluZ3MoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgd2hldGhlciB1bmRlcmx5aW5nIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyBjbG9zZWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIGNsb3NlZCwgZmFsc2UKLSAgICAgKiAJCWlmIGl0IGlzIGNsb3NlZC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyBjbG9zZWQsIGZhbHNlCisgICAgICogICAgICAgICBpZiBpdCBpcyBjbG9zZWQuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzQ2xvc2VkKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXJldHVybiBpc0Nsb3NlZDsKKyAgICAgICAgcmV0dXJuIGlzQ2xvc2VkOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB3aGV0aGVyIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIHJlYWQtb25seS4KICAgICAgKgotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IGlzIHJlYWQtb25seSwgZmFsc2Ugb3RoZXItd2lzZQotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBpcyByZWFkLW9ubHksIGZhbHNlIG90aGVyLXdpc2UKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNSZWFkT25seSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uaXNSZWFkT25seSgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5pc1JlYWRPbmx5KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29udmVydHMgdGhlIGdpdmVuIFNRTCBzdGF0ZW1lbnQgaW50byB0aGUgc3lzdGVtJ3MgbmF0aXZlIFNRTCBncmFtbWVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgc3RhdGVtZW50ICwgdG8gYmUgY29udmVydGVkLgotICAgICAqIEByZXR1cm4JQ29udmVydGVkIFNRTCBzdHJpbmcuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIHN0YXRlbWVudCAsIHRvIGJlIGNvbnZlcnRlZC4KKyAgICAgKiBAcmV0dXJuICAgIENvbnZlcnRlZCBTUUwgc3RyaW5nLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIG5hdGl2ZVNRTChTdHJpbmcgc3FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLm5hdGl2ZVNRTChzcWwpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5uYXRpdmVTUUwoc3FsKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCiAgICAgICogc3RvcmVkIHByb2NlZHVyZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKICAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQotICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQlpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCQotICAgIAlyZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCi0gICAgICogc3RvcmVkIHByb2NlZHVyZXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRIb2xkYWJpbGl0eQlSZXN1bHRTZXQgSG9sZGFiaWxpdHkuICAgICAgICAgIAotICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCi0gICAgCQkJICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwpOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQorICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQorICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0SG9sZGFiaWxpdHkgICAgUmVzdWx0U2V0IEhvbGRhYmlsaXR5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKICAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAogICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwpOwogICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCWF1dG9HZW5lcmF0ZWRLZXlzIGEgZmxhZyBpbmRpY2F0aW5nIEF1dG9HZW5lcmF0ZWRLZXlzIG5lZWQgdG8gYmUgcmV0dXJuZWQuCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IGF1dG9HZW5lcmF0ZWRLZXlzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGF1dG9HZW5lcmF0ZWRLZXlzKTsKLSAgICB9ICAgIAotICAgICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQljb2x1bW5JbmRleGVzIGFuIGFycmF5IG9mIGNvbHVtbiBpbmRleGVzIGluZGljYXRpbmcgdGhlIGNvbHVtbnMgdGhhdCBzaG91bGQgYmUKLSAgICAgKgkJcmV0dXJuZWQgZnJvbSB0aGUgaW5zZXJ0ZWQgcm93IG9yIHJvd3MuCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50W10gY29sdW1uSW5kZXhlcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5JbmRleGVzKTsKLSAgICB9ICAgICAgICAgIAotIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgICAgICAKLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCSAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCi0gICAgCQkJCSAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKLSAgICB9ICAgICAgICAgICAKIAogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZwogICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCWNvbHVtbk5hbWVzIE5hbWUgb2YgYm91bmQgY29sdW1ucy4KKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgYXV0b0dlbmVyYXRlZEtleXMgYSBmbGFnIGluZGljYXRpbmcgQXV0b0dlbmVyYXRlZEtleXMgbmVlZCB0byBiZSByZXR1cm5lZC4KICAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IGF1dG9HZW5lcmF0ZWRLZXlzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsYXV0b0dlbmVyYXRlZEtleXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBjb2x1bW5JbmRleGVzIGFuIGFycmF5IG9mIGNvbHVtbiBpbmRleGVzIGluZGljYXRpbmcgdGhlIGNvbHVtbnMgdGhhdCBzaG91bGQgYmUKKyAgICAgKiAgICAgICAgcmV0dXJuZWQgZnJvbSB0aGUgaW5zZXJ0ZWQgcm93IG9yIHJvd3MuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50W10gY29sdW1uSW5kZXhlcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbkluZGV4ZXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRIb2xkYWJpbGl0eSAgICBSZXN1bHRTZXQgSG9sZGFiaWxpdHkuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGNvbHVtbk5hbWVzIE5hbWUgb2YgYm91bmQgY29sdW1ucy4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBTdHJpbmdbXSBjb2x1bW5OYW1lcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5OYW1lcyk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbk5hbWVzKTsKICAgICB9CiAKICAgICBwdWJsaWMgQ2xvYiBjcmVhdGVDbG9iKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CkBAIC01MDAsMTYyICs1MDAsMTYyIEBACiAgICAgLyoqCiAgICAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4gPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QgZnJvbSB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlzYXZlcG9pbnQJPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHNhdmVwb2ludCAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByZWxlYXNlU2F2ZXBvaW50KFNhdmVwb2ludCBzYXZlcG9pbnQpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yZWxlYXNlU2F2ZXBvaW50KHNhdmVwb2ludCk7Ci0gICAgfSAKLSAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5yZWxlYXNlU2F2ZXBvaW50KHNhdmVwb2ludCk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUm9sbHMgYmFjayB0aGUgY2hhbmdlcyBtYWRlIGluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLyAgICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJvbGxiYWNrKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucm9sbGJhY2soKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSb2xscyBiYWNrIHRoZSBjaGFuZ2VzIG1hZGUgYWZ0ZXIgdGhlIHNhdmVwb2ludC4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjayhTYXZlcG9pbnQgc2F2ZXBvaW50KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucm9sbGJhY2soc2F2ZXBvaW50KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5yb2xsYmFjayhzYXZlcG9pbnQpOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBhdXRvLWNvbW1taXQgbW9kZSBvZiB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCWF1dG9Db21taXQgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBhdXRvLWNvbW1pdCBtb2RlLiAgICAgCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBhdXRvQ29tbWl0IGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB0aGUgYXV0by1jb21taXQgbW9kZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0QXV0b0NvbW1pdChib29sZWFuIGF1dG9Db21taXQpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRBdXRvQ29tbWl0KGF1dG9Db21taXQpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldEF1dG9Db21taXQoYXV0b0NvbW1pdCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgY2F0YWxvZyBuYW1lIHRvIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QKICAgICAgKgotICAgICAqIEBwYXJhbQljYXRhbG9nCUNhdGFsb2cgbmFtZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGNhdGFsb2cgICAgQ2F0YWxvZyBuYW1lLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDYXRhbG9nKFN0cmluZyBjYXRhbG9nKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0Q2F0YWxvZyhjYXRhbG9nKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRDYXRhbG9nKGNhdGFsb2cpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFNldHMgdGhlIGhvbGRhYmlsaXR5IG9mIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gb2JqZWN0cyBjcmVhdGVkIAorICAgICAqIFNldHMgdGhlIGhvbGRhYmlsaXR5IG9mIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gb2JqZWN0cyBjcmVhdGVkCiAgICAgICogdXNpbmcgdGhpcyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JaG9sZGFiaWxpdHkJQSA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IGhvbGRhYmlsaXR5IGNvbnN0YW50Ci0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBob2xkYWJpbGl0eSAgICBBIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gaG9sZGFiaWxpdHkgY29uc3RhbnQKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0SG9sZGFiaWxpdHkoaW50IGhvbGRhYmlsaXR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgICAJY29uLnNldEhvbGRhYmlsaXR5KGhvbGRhYmlsaXR5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgICBjb24uc2V0SG9sZGFiaWxpdHkoaG9sZGFiaWxpdHkpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFB1dHMgdGhlIGNvbm5lY3Rpb24gaW4gcmVhZC1vbmx5IG1vZGUgYXMgYSBoaW50IHRvIHRoZSBkcml2ZXIgdG8gCisgICAgICogUHV0cyB0aGUgY29ubmVjdGlvbiBpbiByZWFkLW9ubHkgbW9kZSBhcyBhIGhpbnQgdG8gdGhlIGRyaXZlciB0bwogICAgICAqIHBlcmZvcm0gZGF0YWJhc2Ugb3B0aW1pemF0aW9ucy4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZWFkT25seSAgdHJ1ZSBlbmFibGVzIHJlYWQtb25seSBtb2RlLCBmYWxzZSBkaXNhYmxlcyBpdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHJlYWRPbmx5ICB0cnVlIGVuYWJsZXMgcmVhZC1vbmx5IG1vZGUsIGZhbHNlIGRpc2FibGVzIGl0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSZWFkT25seShib29sZWFuIHJlYWRPbmx5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0UmVhZE9ubHkocmVhZE9ubHkpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldFJlYWRPbmx5KHJlYWRPbmx5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGFuZCB1bm5hbWVkIHNhdmVwb2ludCBhbmQgcmV0dXJucyBhbiBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGF0LgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgogICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU2F2ZXBvaW50IHNldFNhdmVwb2ludCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uc2V0U2F2ZXBvaW50KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnNldFNhdmVwb2ludCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzYXZlcG9pbnQgd2l0aCB0aGUgbmFtZSBhbmQgcmV0dXJucyBhbiBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGF0LgogICAgICAqCi0gICAgICogQHBhcmFtCW5hbWUJTmFtZSBvZiB0aGUgc2F2ZXBvaW50LgotICAgICAqIEByZXR1cm4JPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBuYW1lICAgIE5hbWUgb2YgdGhlIHNhdmVwb2ludC4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU2F2ZXBvaW50IHNldFNhdmVwb2ludChTdHJpbmcgbmFtZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQobmFtZSk7Ci0gICAgfSAgICAKLSAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uc2V0U2F2ZXBvaW50KG5hbWUpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlsZXZlbCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBsZXZlbCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKGludCBsZXZlbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKGxldmVsKTsKLSAgICB9ICAgICAKLSAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbihsZXZlbCk7CisgICAgfQorCiAgICAgLyoqCi0gICAgICogSW5zdGFsbHMgdGhlIGdpdmVuIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzIHRoZSB0eW9lIG1hcCBmb3IgdGhpcyAKKyAgICAgKiBJbnN0YWxscyB0aGUgZ2l2ZW4gPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXMgdGhlIHR5b2UgbWFwIGZvciB0aGlzCiAgICAgICogPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWFwCTxjb2RlPk1hcDwvY29kZT4gYSBNYXAgb2JqZWN0IHRvIGluc3RhbGwuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBtYXAgICAgPGNvZGU+TWFwPC9jb2RlPiBhIE1hcCBvYmplY3QgdG8gaW5zdGFsbC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VHlwZU1hcChNYXAgbWFwKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7Ci0gICAgCWNvbi5zZXRUeXBlTWFwKG1hcCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0VHlwZU1hcChtYXApOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TmV0d29ya1RpbWVvdXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0TmV0d29ya1RpbWVvdXQoRXhlY3V0b3IgZXhlY3V0b3IsIGludCBtaWxsaXNlY29uZHMpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhYm9ydChFeGVjdXRvciBleGVjdXRvcikgIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2NoZW1hKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0U2NoZW1hKFN0cmluZyBzY2hlbWEpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIHRoZSB2YWxpZGl0eSBvZiB0aGlzIG9iamVjdAogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBjaGVja1ZhbGlkaXR5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCWlmIChpc0Nsb3NlZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkNvbm5lY3Rpb24gY2xvc2VkIik7Ci0gICAgCWlmICghdmFsaWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJJbnZhbGlkIENvbm5lY3Rpb24iKTsKLSAgICAJaWYoYWN0aXZlID09IGZhbHNlKSB7Ci0gICAgCSAgICBtYy5jaGVja0lmQWN0aXZlKHRoaXMpOwotICAgIAl9CisgICAgICAgIGlmIChpc0Nsb3NlZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkNvbm5lY3Rpb24gY2xvc2VkIik7CisgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJJbnZhbGlkIENvbm5lY3Rpb24iKTsKKyAgICAgICAgaWYoYWN0aXZlID09IGZhbHNlKSB7CisgICAgICAgICAgICBtYy5jaGVja0lmQWN0aXZlKHRoaXMpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgYWN0aXZlIGZsYWcgdG8gdHJ1ZQogICAgICAqCi0gICAgICogQHBhcmFtCWFjdHYJYm9vbGVhbgorICAgICAqIEBwYXJhbSAgICBhY3R2ICAgIGJvb2xlYW4KICAgICAgKi8KICAgICB2b2lkIHNldEFjdGl2ZShib29sZWFuIGFjdHYpIHsKICAgICAgICAgYWN0aXZlID0gYWN0djsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKaW5kZXggYWM3ZTc0OC4uZjA2NzVhNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTMzLDE5ICszMywxOSBAQAogICogVGhpcyBjbGFzcyBpcyBleHRlbmRlZCBieSB0aGUgRGF0YVNvdXJjZSBzcGVjaWZpYyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gZmFjdG9yaWVzCiAgKiBhbmQgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gZm9yIHRoZSA8Y29kZT5Ecml2ZXJNYW5hZ2VyPC9jb2RlPi4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzAzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LCAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnksCiAgICAgamF2YS5pby5TZXJpYWxpemFibGUgewotICAgIAorCiAgICAgcHJvdGVjdGVkIERhdGFTb3VyY2VTcGVjIHNwZWMgPSBuZXcgRGF0YVNvdXJjZVNwZWMoKTsKICAgICBwcm90ZWN0ZWQgdHJhbnNpZW50IERhdGFTb3VyY2VPYmplY3RCdWlsZGVyIGRzT2JqQnVpbGRlcjsKLSAgICAKKwogICAgIHByb3RlY3RlZCBqYXZhLmlvLlByaW50V3JpdGVyIGxvZ1dyaXRlciA9IG51bGw7CiAgICAgcHJvdGVjdGVkIGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciByYSA9IG51bGw7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTQsOCArNTQsOCBAQAogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBDb25uZWN0aW9uIEZhY3RvcnkgaW5zdGFuY2UuIFRoZSA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gaW1wbGVtZW50YXRpb24KICAgICAgKiBvZiB0aGUgcmVzb3VyY2UgYWRhcHRlciBpcyB1c2VkIGhlcmUuCi0gICAgICogCi0gICAgICogQHJldHVybglHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgorICAgICAqCisgICAgICogQHJldHVybiAgICBHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgY3JlYXRlQ29ubmVjdGlvbkZhY3RvcnkoKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC02MywxNiArNjMsMTYgQEAKICAgICAgICAgfQogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSBjZiA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSgKICAgICAgICAgICAgIChqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpdGhpcywgbnVsbCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBjZjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgQ29ubmVjdGlvbiBGYWN0b3J5IGluc3RhbmNlLiBUaGUgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uCiAgICAgICogb2YgdGhlIGFwcGxpY2F0aW9uIHNlcnZlciBpcyB1c2VkIGhlcmUuCi0gICAgICogCi0gICAgICogQHBhcmFtCWN4TWFuYWdlcgk8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcmV0dXJuCUdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY3hNYW5hZ2VyICAgIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEByZXR1cm4gICAgR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGNyZWF0ZUNvbm5lY3Rpb25GYWN0b3J5KGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyIGN4TWFuYWdlcikgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtODAsNTUgKzgwLDU1IEBACiAgICAgICAgIH0KICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UgY2YgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UoCiAgICAgICAgICAgICAoamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KXRoaXMsIGN4TWFuYWdlcik7Ci0gICAgICAgIHJldHVybiBjZjsgCisgICAgICAgIHJldHVybiBjZjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgbmV3IHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgRUlTIHJlc291cmNlCiAgICAgICogbWFuYWdlci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBwYXJhbQljeFJlcXVlc3RJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0Ci0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAk8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCi0gICAgICogICAgICAgCQkJCWNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0Ci0gICAgICogQHRocm93cwlTZWN1cml0eUV4Y2VwdGlvbglpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0IAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqCQkJCQkJcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gICAgY3hSZXF1ZXN0SW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAorICAgICAqIEB0aHJvd3MgICAgU2VjdXJpdHlFeGNlcHRpb24gICAgaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdCBzdWJqZWN0LAogICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uOwotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvIAorICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0bwogICAgICAqIGFub3RoZXIgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jb3RoZXIJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCi0gICAgICoJCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIG90aGVyICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCisgICAgICogICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpOwotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHNlZQk8Y29kZT5zZXRMb2dXcml0ZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBqYXZhLmlvLlByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHsKICAgICAgICAgcmV0dXJuIGxvZ1dyaXRlcjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHNlZQk8Y29kZT5zZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJlc291cmNlQWRhcHRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIGdldFJlc291cmNlQWRhcHRlcigpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTEzNiwxMSArMTM2LDExIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJhOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LgogICAgICAqCi0gICAgICogQHJldHVybgloYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCl7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xNDgsNDEgKzE0OCw0MSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzcGVjLmhhc2hDb2RlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyBhIG1hdGNoZWQgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZyb20gdGhlIGNhbmRpZGF0ZSAKKyAgICAgKiBSZXR1cm5zIGEgbWF0Y2hlZCA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gZnJvbSB0aGUgY2FuZGlkYXRlCiAgICAgICogc2V0IG9mIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3RzLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb25uZWN0aW9uU2V0CTxjb2RlPlNldDwvY29kZT4gb2YgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqCQkJCW9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAkgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKgkJCWZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZwotICAgICAqIEBwYXJhbQljeFJlcXVlc3RJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKgkJCQlmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IGlzIHRoZSBiZXN0IG1hdGNoIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBhY2Nlc3NpbmcgdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+Ci0gICAgICoJCQkJCXBhcmFtZXRlciBvciB0aGUgPGNvZGU+U2V0PC9jb2RlPiBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKgkJCQkJb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbm5lY3Rpb25TZXQgICAgPGNvZGU+U2V0PC9jb2RlPiBvZiAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgICBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqICAgICAgICAgICAgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqICAgICAgICAgICAgICAgIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZworICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgaXMgdGhlIGJlc3QgbWF0Y2ggc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGFjY2Vzc2luZyB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIG9yIHRoZSA8Y29kZT5TZXQ8L2NvZGU+IG9mIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICBvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCiAgICAgICovCi0gICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1hdGNoTWFuYWdlZENvbm5lY3Rpb25zKGphdmEudXRpbC5TZXQgY29ubmVjdGlvblNldCwgCisgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1hdGNoTWFuYWdlZENvbm5lY3Rpb25zKGphdmEudXRpbC5TZXQgY29ubmVjdGlvblNldCwKICAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0IHN1YmplY3QsIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIG1hdGNoTWFuYWdlZENvbm5lY3Rpb25zIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoY29ubmVjdGlvblNldCA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGMgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLCBzdWJqZWN0LCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgCisKICAgICAgICAgamF2YS51dGlsLkl0ZXJhdG9yIGl0ZXIgPSBjb25uZWN0aW9uU2V0Lml0ZXJhdG9yKCk7CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG51bGw7CiAgICAgICAgIHdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1jID0gKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbikgaXRlci5uZXh0KCk7CiAgICAgICAgICAgICB9IGNhdGNoKGphdmEudXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uIG5zZWUpIHsKLQkgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2l0ZXIiKTsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2l0ZXIiKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24obnNlZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYocGMgPT0gbnVsbCAmJiB0aGlzLmVxdWFscyhtYy5nZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKSkpIHsKQEAgLTE5MSw3ICsxOTEsNyBAQAogICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkKG1jKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1jOwogICAgICAgICAgICAgICAgIH0gY2F0Y2goUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKLQkgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19yZSIsIHJlKTsKKyAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19yZSIsIHJlKTsKICAgICAgICAgICAgICAgICAgICAgbWMuY29ubmVjdGlvbkVycm9yT2NjdXJyZWQocmUsIG51bGwpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZihTZWN1cml0eVV0aWxzLmlzUGFzc3dvcmRDcmVkZW50aWFsRXF1YWwocGMsIG1jLmdldFBhc3N3b3JkQ3JlZGVudGlhbCgpKSA9PSB0cnVlKSB7CkBAIC0yMDAsNDUgKzIwMCw0NSBAQAogICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkKG1jKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1jOwogICAgICAgICAgICAgICAgIH0gY2F0Y2goUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKLQkgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLnJlIik7CisgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5yZSIpOwogICAgICAgICAgICAgICAgICAgICBtYy5jb25uZWN0aW9uRXJyb3JPY2N1cnJlZChyZSwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogICAgIC8vR0pDSU5UCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGlzIHRvIGJlIHZhbGlkYXRlZCBvciBub3QKICAgICAgKiBhbmQgdmFsaWRhdGVzIGl0IG9yIHJldHVybnMuCi0gICAgICogCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgotICAgICAqICAgICAgICAJICAgICAgICAgIAkJaWYgdmFsaWRhdGlvbiBtZXRob2QgaXMgbm90IHByb3BlcgorICAgICAqCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmFsaWRhdGlvbiBtZXRob2QgaXMgbm90IHByb3BlcgogICAgICAqLwogICAgIHZvaWQgaXNWYWxpZChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAKICAgICAgICAgaWYobWMuaXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSkgewotCSAgICByZXR1cm47CisgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgIAotICAgICAgICBib29sZWFuIGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQgPSAKKworICAgICAgICBib29sZWFuIGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQgPQogICAgICAgICAgICAgKG5ldyBCb29sZWFuKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpLnRvTG93ZXJDYXNlKCkpKS5ib29sZWFuVmFsdWUoKTsKICAgICAgICAgaWYoIGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQgPT0gZmFsc2UgfHwgbWMgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIFN0cmluZyB2YWxpZGF0aW9uTWV0aG9kID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCkudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgCisKICAgICAgICAgbWMuY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgYWJvdmUgY2FsbCBjaGVja3MgaWYgdGhlIGFjdHVhbCBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICAgICAqIGlzIHVzYWJsZSBvciBub3QuCiAgICAgICAgICAqLwogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAgICAgICAgCisKICAgICAgICAgaWYodmFsaWRhdGlvbk1ldGhvZC5lcXVhbHMoImF1dG8tY29tbWl0IikgPT0gdHJ1ZSkgewogICAgICAgICAgICAgaXNWYWxpZEJ5QXV0b0NvbW1pdChjb24pOwogICAgICAgICB9IGVsc2UgaWYodmFsaWRhdGlvbk1ldGhvZC5lcXVhbHNJZ25vcmVDYXNlKCJtZXRhLWRhdGEiKSA9PSB0cnVlKSB7CkBAIC0yNDksMjggKzI0OSwyOCBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgdmFsaWRhdGlvbiBtZXRob2QgaXMgbm90IHByb3BlciIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90CiAgICAgICogYnkgY2hlY2tpbmcgaXRzIGF1dG8gY29tbWl0IHByb3BlcnR5LgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlBdXRvQ29tbWl0KGphdmEuc3FsLkNvbm5lY3Rpb24gY29uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewotICAgICAgICAgICAvLyBOb3RpY2UgdGhhdCB1c2luZyBzb21ldGhpbmcgbGlrZSAKKyAgICAgICAgICAgLy8gTm90aWNlIHRoYXQgdXNpbmcgc29tZXRoaW5nIGxpa2UKICAgICAgICAgICAgLy8gZGJDb24uc2V0QXV0b0NvbW1pdChkYkNvbi5nZXRBdXRvQ29tbWl0KCkpIHdpbGwgY2F1c2UgcHJvYmxlbXMgd2l0aAogICAgICAgICAgICAvLyBzb21lIGRyaXZlcnMgbGlrZSBzeWJhc2UKLSAgICAgICAgICAgLy8gV2UgZG8gbm90IHZhbGlkYXRlIGNvbm5lY3Rpb25zIHRoYXQgYXJlIGFscmVhZHkgZW5saXN0ZWQgCi0JICAgLy9pbiBhIHRyYW5zYWN0aW9uIAotCSAgIC8vIFdlIGN5Y2xlIGF1dG9jb21taXQgdG8gdHJ1ZSBhbmQgZmFsc2UgdG8gYnktcGFzcyBkcml2ZXJzIHRoYXQgCi0JICAgLy8gbWlnaHQgY2FjaGUgdGhlIGNhbGwgdG8gc2V0IGF1dG9jb21pdHQKKyAgICAgICAgICAgLy8gV2UgZG8gbm90IHZhbGlkYXRlIGNvbm5lY3Rpb25zIHRoYXQgYXJlIGFscmVhZHkgZW5saXN0ZWQKKyAgICAgICAvL2luIGEgdHJhbnNhY3Rpb24KKyAgICAgICAvLyBXZSBjeWNsZSBhdXRvY29tbWl0IHRvIHRydWUgYW5kIGZhbHNlIHRvIGJ5LXBhc3MgZHJpdmVycyB0aGF0CisgICAgICAgLy8gbWlnaHQgY2FjaGUgdGhlIGNhbGwgdG8gc2V0IGF1dG9jb21pdHQKICAgICAgICAgICAgLy8gQWxzbyBub3RpY2UgdGhhdCBzb21lIFhBIGRhdGEgc291cmNlcyB3aWxsIHRocm93IGFuZCBleGNlcHRpb24gaWYKICAgICAgICAgICAgLy8geW91IHRyeSB0byBjYWxsIHNldEF1dG9Db21taXQsIGZvciB0aGVtIHRoaXMgbWV0aG9kIGlzIG5vdCByZWNvbW1lbmRlZAogCkBAIC0yODEsOTAgKzI4MSw5MCBAQAogICAgICAgICAgICAgICAgIGNvbi5yb2xsYmFjaygpOyAvLyBwcmV2ZW50cyB1bmNvbXBsZXRlZCB0cmFuc2FjdGlvbiBleGNlcHRpb25zCiAgICAgICAgICAgICAgICAgY29uLnNldEF1dG9Db21taXQodHJ1ZSk7CiAgICAgICAgICAgIH0KLSAgICAgICAgCi0JICAgY29uLnNldEF1dG9Db21taXQoYWMpOworCisgICAgICAgY29uLnNldEF1dG9Db21taXQoYWMpOwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYXV0b2NvbW1pdCIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hdXRvY29tbWl0Iik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90CiAgICAgICogYnkgY2hlY2tpbmcgaXRzIG1ldGEgZGF0YS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5TWV0YURhdGEoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBqYXZhLnNxbC5EYXRhYmFzZU1ldGFEYXRhIGRtZCA9IGNvbi5nZXRNZXRhRGF0YSgpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAiZ2V0dGluZyB0aGUgbWV0YSBkYXRhIGZhaWxlZDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IHF1ZXJ5aW5nIGEgdGFibGUuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAcGFyYW0JdGFibGVOYW1lCXRhYmxlIHdoaWNoIHNob3VsZCBiZSBxdWVyaWVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHBhcmFtICAgIHRhYmxlTmFtZSAgICB0YWJsZSB3aGljaCBzaG91bGQgYmUgcXVlcmllZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5VGFibGVRdWVyeShqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiwgCisgICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5VGFibGVRdWVyeShqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiwKICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGphdmEuc3FsLlN0YXRlbWVudCBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgamF2YS5zcWwuUmVzdWx0U2V0IHJzID0gc3RtdC5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gIiArIHRhYmxlTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZXhlY3V0ZSIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19leGVjdXRlIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAicXVlcnlpbmcgdGhlIHRhYmxlICIgKyB0YWJsZU5hbWUgKyAiIGZhaWxlZDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGlzb2xhdGlvbiBsZXZlbCBzcGVjaWZpZWQgaW4gdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KICAgICAgKiBmb3IgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBwYXNzZWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKLSAgICAgKgkJCQkJb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBzZXRJc29sYXRpb24oY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotICAgIAkKLSAgICAJamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gICAgCWlmKGNvbiA9PSBudWxsKSB7Ci0gICAgCSAgICByZXR1cm47Ci0gICAgCX0KLSAgICAJCi0gICAgCVN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwotICAgIAlpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7Ci0gICAgCSAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOwotICAgIAkgICAgdHJ5IHsKLSAgICAJICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7Ci0gICAgCSAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBjb3VsZCAiCi0gICAgCSAgICAgICAgICAgICsgIm5vdCBiZSBzZXQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICB9Ci0gICAgCX0KKworICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKKyAgICAgICAgaWYoY29uID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOworICAgICAgICBpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7CisgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CisgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBjb3VsZCAiCisgICAgICAgICAgICAgICAgICAgICsgIm5vdCBiZSBzZXQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXNldHMgdGhlIGlzb2xhdGlvbiBsZXZlbCBmb3IgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBwYXNzZWQuCiAgICAgICogSWYgdGhlIHRyYW5zYWN0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZQpAQCAtMzczLDM4MiArMzczLDM4MiBAQAogICAgICAqIGlzb2xhdGlvbiBsZXZlbCBmcm9tIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZC4gRWxzZSwKICAgICAgKiBpdCBzZXRzIGl0IHRvIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gcGFzc2VkLgogICAgICAqCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEBwYXJhbQl0cmFuSXNvbAlpbnQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAotICAgICAqCQkJCQlvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdHJhbklzb2wgICAgaW50CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICB2b2lkIHJlc2V0SXNvbGF0aW9uKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYywgaW50IHRyYW5Jc29sKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotICAgIAkKLSAgICAJamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gICAgCWlmKGNvbiA9PSBudWxsKSB7Ci0gICAgCSAgICByZXR1cm47Ci0gICAgCX0KLSAgICAJCi0gICAgCVN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwotICAgIAlpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7Ci0gICAgCSAgICBTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7Ci0gICAgCSAgICAKLSAgICAJICAgIGlmKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsICE9IG51bGwgJiYgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwuZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgICAgIGJvb2xlYW4gZ3VhcmFudGVlID0gKG5ldyBCb29sZWFuKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLnRvTG93ZXJDYXNlKCkpKS5ib29sZWFuVmFsdWUoKTsKLSAgICAJICAgICAgICAKLSAgICAJICAgICAgICBpZihndWFyYW50ZWUpIHsKLSAgICAJICAgICAgICAgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKLSAgICAJICAgICAgICAgICAgdHJ5IHsKLSAgICAJICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sYXRpb25JbnQgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKLSAgICAJICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7Ci0gICAgCSAgICAgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCi0gICAgCSAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICAgICAgICAgIH0KLSAgICAJICAgICAgICB9IGVsc2UgewotICAgIAkgICAgICAgICAgICB0cnkgewotICAgIAkgICAgICAgICAgICAgICAgaWYodHJhbklzb2wgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKLSAgICAJICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2wpOwotICAgIAkgICAgICAgICAgICAgICAgfQotICAgIAkgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgotICAgIAkgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgfQotICAgIAkgICAgfQotICAgIAl9CisKKyAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7CisgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKKyAgICAgICAgaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOworCisgICAgICAgICAgICBpZihndWFyYW50ZWVJc29sYXRpb25MZXZlbCAhPSBudWxsICYmIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgICAgICBib29sZWFuIGd1YXJhbnRlZSA9IChuZXcgQm9vbGVhbihndWFyYW50ZWVJc29sYXRpb25MZXZlbC50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7CisKKyAgICAgICAgICAgICAgICBpZihndWFyYW50ZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sYXRpb25JbnQgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYodHJhbklzb2wgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2wpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CisgICAgICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgaW50ZWdlciBlcXVpdmFsZW50IG9mIHRoZSBzdHJpbmcgc3BlY2lmeWluZwogICAgICAqIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHJhbklzb2xhdGlvbglzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uIGxldmVsCi0gICAgICogQHJldHVybgl0cmFuSXNvbGF0aW9uSW50CXRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBjb25zdGFudAotICAgICAqCQkJCQlmb3IgdGhlIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24uCisgICAgICogQHBhcmFtICAgIHRyYW5Jc29sYXRpb24gICAgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbklzb2xhdGlvbkludCAgICB0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gY29uc3RhbnQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uLgogICAgICAqLwogICAgIHByaXZhdGUgaW50IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KFN0cmluZyB0cmFuSXNvbGF0aW9uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotICAgIAlpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtdW5jb21taXR0ZWQiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9VTkNPTU1JVFRFRDsKLSAgICAJfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC1jb21taXR0ZWQiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9DT01NSVRURUQ7Ci0gICAgCX0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlcGVhdGFibGUtcmVhZCIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRVBFQVRBQkxFX1JFQUQ7Ci0gICAgCX0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInNlcmlhbGl6YWJsZSIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9TRVJJQUxJWkFCTEU7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkludmFsaWQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uOyB0aGUgdHJhbnNhY3Rpb24gIgotICAgIAkgICAgICAgICsgImlzb2xhdGlvbiBsZXZlbCBjYW4gYmUgZW1wdHkgb3IgYW55IG9mIHRoZSBmb2xsb3dpbmc6ICIKLSAgICAJICAgICAgICAgICAgKyAicmVhZC11bmNvbW1pdHRlZCwgcmVhZC1jb21taXR0ZWQsIHJlcGVhdGFibGUtcmVhZCwgc2VyaWFsaXphYmxlIik7Ci0gICAgCX0KKyAgICAgICAgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLXVuY29tbWl0dGVkIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfVU5DT01NSVRURUQ7CisgICAgICAgIH0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtY29tbWl0dGVkIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfQ09NTUlUVEVEOworICAgICAgICB9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZXBlYXRhYmxlLXJlYWQiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVQRUFUQUJMRV9SRUFEOworICAgICAgICB9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJzZXJpYWxpemFibGUiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fU0VSSUFMSVpBQkxFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJJbnZhbGlkIHRyYW5zYWN0aW9uIGlzb2xhdGlvbjsgdGhlIHRyYW5zYWN0aW9uICIKKyAgICAgICAgICAgICAgICArICJpc29sYXRpb24gbGV2ZWwgY2FuIGJlIGVtcHR5IG9yIGFueSBvZiB0aGUgZm9sbG93aW5nOiAiCisgICAgICAgICAgICAgICAgICAgICsgInJlYWQtdW5jb21taXR0ZWQsIHJlYWQtY29tbWl0dGVkLCByZXBlYXRhYmxlLXJlYWQsIHNlcmlhbGl6YWJsZSIpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb3V0CTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBvdXQgICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKGphdmEuaW8uUHJpbnRXcml0ZXIgb3V0KSB7CiAgICAgICAgIGxvZ1dyaXRlciA9IG91dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGFzc29jaWF0ZWQgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBKYXZhQmVhbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlyYQk8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+Z2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICByYSAgICA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5nZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVzb3VyY2VBZGFwdGVyKGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciByYSkgewotICAgICAgICB0aGlzLnJhID0gcmE7ICAgCisgICAgICAgIHRoaXMucmEgPSByYTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VXNlcihTdHJpbmcgdXNlcikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSwgdXNlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXVzZXIKKyAgICAgKiBAcmV0dXJuICAgIHVzZXIKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHVzZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHVzZXIoU3RyaW5nIHVzZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUsIHVzZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHJldHVybgl1c2VyCisgICAgICogQHJldHVybiAgICB1c2VyCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR1c2VyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcGFzc3dkCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcGFzc3dkICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRQYXNzd29yZChTdHJpbmcgcGFzc3dkKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JELCBwYXNzd2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBhc3N3ZAorICAgICAqIEByZXR1cm4gICAgcGFzc3dkCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRQYXNzd29yZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHBhcmFtCXBhc3N3ZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBhc3N3ZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0cGFzc3dvcmQoU3RyaW5nIHBhc3N3ZCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCwgcGFzc3dkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHJldHVybglwYXNzd2QKKyAgICAgKiBAcmV0dXJuICAgIHBhc3N3ZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0cGFzc3dvcmQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEBwYXJhbQljbGFzc05hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjbGFzc05hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSwgY2xhc3NOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHJldHVybgljbGFzc05hbWUKKyAgICAgKiBAcmV0dXJuICAgIGNsYXNzTmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2xhc3NOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHBhcmFtCWNsYXNzTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNsYXNzTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Y2xhc3NOYW1lKFN0cmluZyBjbGFzc05hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FLCBjbGFzc05hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNsYXNzTmFtZQorICAgICAqIEByZXR1cm4gICAgY2xhc3NOYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRjbGFzc05hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHBhcmFtCWNvblZsZFJlcQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNvblZsZFJlcSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZChTdHJpbmcgY29uVmxkUmVxKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQsIGNvblZsZFJlcSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29uVmxkUmVxCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY29uVmxkUmVxICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKFN0cmluZyBjb25WbGRSZXEpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCwgY29uVmxkUmVxKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEByZXR1cm4JY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CisgICAgICogQHJldHVybiAgICBjb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB2YWxpZGF0aW9uIG1ldGhvZCByZXF1aXJlZAogICAgICAqCi0gICAgICogQHBhcmFtCXZhbGlkYXRpb25NZXRob2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB2YWxpZGF0aW9uTWV0aG9kICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRWYWxpZGF0aW9uTWV0aG9kKFN0cmluZyB2YWxpZGF0aW9uTWV0aG9kKSB7CiAgICAgICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9ELCB2YWxpZGF0aW9uTWV0aG9kKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBjb25uZWN0aW9uIHZhbGlkYXRpb24gbWV0aG9kIHR5cGUKICAgICAgKgotICAgICAqIEByZXR1cm4JdmFsaWRhdGlvbiBtZXRob2QKKyAgICAgKiBAcmV0dXJuICAgIHZhbGlkYXRpb24gbWV0aG9kCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRWYWxpZGF0aW9uTWV0aG9kKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdmFsaWRhdGlvbiBtZXRob2QgcmVxdWlyZWQKICAgICAgKgotICAgICAqIEBwYXJhbQl2YWxpZGF0aW9uTWV0aG9kCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdmFsaWRhdGlvbk1ldGhvZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dmFsaWRhdGlvbk1ldGhvZChTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCkgewogICAgICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCwgdmFsaWRhdGlvbk1ldGhvZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgY29ubmVjdGlvbiB2YWxpZGF0aW9uIG1ldGhvZCB0eXBlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXZhbGlkYXRpb24gbWV0aG9kCisgICAgICogQHJldHVybiAgICB2YWxpZGF0aW9uIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dmFsaWRhdGlvbk1ldGhvZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdGFibGUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0YWJsZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VmFsaWRhdGlvblRhYmxlTmFtZShTdHJpbmcgdGFibGUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSwgdGFibGUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRhYmxlCisgICAgICogQHJldHVybiAgICB0YWJsZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsaWRhdGlvblRhYmxlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdGFibGUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0YWJsZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dmFsaWRhdGlvblRhYmxlTmFtZShTdHJpbmcgdGFibGUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSwgdGFibGUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRhYmxlCisgICAgICogQHJldHVybiAgICB0YWJsZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dmFsaWRhdGlvblRhYmxlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHBhcmFtCXRybklzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRybklzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oU3RyaW5nIHRybklzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTiwgdHJuSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCisgICAgICogQHJldHVybiAgICB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHBhcmFtCXRybklzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRybklzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dHJhbnNhY3Rpb25Jc29sYXRpb24oU3RyaW5nIHRybklzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTiwgdHJuSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCisgICAgICogQHJldHVybiAgICB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHRyYW5zYWN0aW9uSXNvbGF0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZ3VhcmFudGVlSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZ3VhcmFudGVlSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRHdWFyYW50ZWVJc29sYXRpb25MZXZlbChTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMLCBndWFyYW50ZWVJc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybglpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCisgICAgICogQHJldHVybiAgICBpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRHdWFyYW50ZWVJc29sYXRpb25MZXZlbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZAogICAgICAqCi0gICAgICogQHBhcmFtCWd1YXJhbnRlZUlzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGd1YXJhbnRlZUlzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Z3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCwgZ3VhcmFudGVlSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQorICAgICAqIEByZXR1cm4gICAgaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Z3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhCmluZGV4IGU2MDMzOGYuLmM1YWRhNDYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhCkBAIC0yNiw4ICsyNiw4IEBACiAvKioKICAqIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wNQotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDUKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBSZXNvdXJjZUFkYXB0ZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgewogcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkVSU0lPTiA9IDI7CkBAIC0zNywzOSArMzcsMzkgQEAKICAgICAgKiBFbXB0eSBtZXRob2QgaW1wbGVtZW50YXRpb24gZm9yIGVuZHBvaW50QWN0aXZhdGlvbgogICAgICAqIHdoaWNoIGp1c3QgdGhyb3dzIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltZWYJPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KLSAgICAgKiBAcGFyYW0JYXMJPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+Ci0gICAgICogQHRocm93cwk8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1lZiAgICA8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBhcyAgICA8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmRwb2ludEFjdGl2YXRpb24oTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBtZWYsIEFjdGl2YXRpb25TcGVjIGFzKSB0aHJvd3MgTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiVGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBKREJDIGNvbm5lY3RvciIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZW5kcG9pbnREZWFjdGl2YXRpb24KICAgICAgKgotICAgICAqIEBwYXJhbQltZWYJPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KLSAgICAgKiBAcGFyYW0JYXMJPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1lZiAgICA8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBhcyAgICA8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmRwb2ludERlYWN0aXZhdGlvbihNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IG1lZiwgQWN0aXZhdGlvblNwZWMgYXMpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBtZXRob2QgaW1wbGVtZW50YXRpb24gZm9yIGdldFhBUmVzb3VyY2VzCiAgICAgICogd2hpY2gganVzdCB0aHJvd3MgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCXNwZWNzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPiBhcnJheQotICAgICAqIEB0aHJvd3MJPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzcGVjcyAgICA8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4gYXJyYXkKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpIHRocm93cyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJUaGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIEpEQkMgY29ubmVjdG9yIik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgaW1wbGVtZW50YXRpb24gb2Ygc3RhcnQgbWV0aG9kCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY3R4CTxjb2RlPkJvb3RzdHJhcENvbnRleHQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGN0eCAgICA8Y29kZT5Cb290c3RyYXBDb250ZXh0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KEJvb3RzdHJhcENvbnRleHQgY3R4KSB0aHJvd3MgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24gewogLyoKQEAgLTc3LDE2ICs3NywxNiBAQAogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzb3VyY2UgQWRhcHRlciBpcyBzdGFydGluZyB3aXRoIGNvbmZpZ3VyYXRpb24gOiIgKyByYVByb3ApOwogICAgICAgICBpZiAocmFQcm9wID09IG51bGwgfHwgIXJhUHJvcC5lcXVhbHMoIlZBTElEIikpIHsKLQkgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJSZXNvdXJjZSBhZGFwdGVyIGNhbm5vdCBzdGFydC4gSXQgaXMgY29uZmlndXJlZCBhcyA6ICIgKyByYVByb3ApOwotCX0gCisgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiUmVzb3VyY2UgYWRhcHRlciBjYW5ub3Qgc3RhcnQuIEl0IGlzIGNvbmZpZ3VyZWQgYXMgOiAiICsgcmFQcm9wKTsKKyAgICB9CiAqLwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IGltcGxlbWVudGF0aW9uIG9mIHN0b3AgbWV0aG9kCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RvcCgpIHsKLSAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFJBUHJvcGVydHkoU3RyaW5nIHMpIHsKQEAgLTk2LDUgKzk2LDUgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFJBUHJvcGVydHkoKSB7CiAgICAgICAgIHJldHVybiByYVByb3A7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKaW5kZXggNWUxNGQ0NC4uZmYwZjAyYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iJHtnamMuaG9tZX0iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy9zcGkiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMjksNTUgKzI5LDU1IEBACiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0icGFja2FnZTE0Ij4KLSAgICAJCi0gICAgCTxta2RpciBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIvPgotICAgIAkKLQk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIgYmFzZWRpcj0iJHtjbGFzcy5kaXJ9IgorCisgICAgICAgIDxta2RpciBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIvPgorCisgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiIGJhc2VkaXI9IiR7Y2xhc3MuZGlyfSIKICAgICAgICAgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiwgY29tL3N1bi9namMvdXRpbC8qKi8qLCBjb20vc3VuL2dqYy9jb21tb24vKiovKiIgZXhjbHVkZXM9ImNvbS9zdW4vZ2pjL2NjaS8qKi8qLGNvbS9zdW4vZ2pjL3NwaS8xLjQvKiovKiIvPgotICAgICAgICAKKwogICAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2NwLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtY3AueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWNwLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2NwLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS14YS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2NwLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLXhhLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kbS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRtLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kcy54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRzLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxkZWxldGUgZGlyPSIke2dqYy5ob21lfS9kaXN0L2NvbSIvPgotICAgCTxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIi8+Ci0gICAJPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIi8+Ci0gICAJCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxkZWxldGUgZGlyPSIke2dqYy5ob21lfS9kaXN0L2NvbSIvPgorICAgICAgIDxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIi8+CisgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIi8+CisKICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxMyIvPgotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTQsIGJ1aWxkMTMiLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDE0LCBidWlsZDEzIi8+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwKaW5kZXggNjBlMWU0ZS4uNjVlOGZiNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbApAQCAtMjIsNjkgKzIyLDY5IEBACiAgICAgICAgICAgIHZlcnNpb249IjEuNSI+CiAKICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+Ci0gICAgPCEtLSBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhIAorICAgIDwhLS0gVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYQogICAgICAgICAgZGVzY3JpcHRpb24gZm9yIHRoZSByZXNvdXJjZSBhZGFwdGVyLgogICAgIC0tPgogICAgIDxkZXNjcmlwdGlvbj5SZXNvdXJjZSBhZGFwdGVyIHdyYXBwaW5nIERhdGFzb3VyY2UgaW1wbGVtZW50YXRpb24gb2YgZHJpdmVyPC9kZXNjcmlwdGlvbj4KLSAgICAKKwogICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRpc3BsYXktbmFtZSIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+Ci0gICAgPCEtLSBUaGUgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEgbmFtZSB0aGF0IAorICAgIDwhLS0gVGhlIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhIG5hbWUgdGhhdAogICAgICAgICAgaXMgaW50ZW5kZWQgdG8gYmUgZGlzcGxheWVkIGJ5IHRvb2xzLgogICAgIC0tPgogICAgIDxkaXNwbGF5LW5hbWU+RGF0YVNvdXJjZSBSZXNvdXJjZSBBZGFwdGVyPC9kaXNwbGF5LW5hbWU+Ci0gICAgCisKICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJpY29uIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KICAgICA8IS0tIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgPGljb24+Ci0gICAgICAgICAgICBUaGlzICJzbWFsbC1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgCi0gICAgICAgICAgICBhYnNvbHV0ZSBvciB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgc21hbGwgKDE2IHggMTYpIAorICAgICAgICAgICAgVGhpcyAic21hbGwtaWNvbiIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UuIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlCisgICAgICAgICAgICBhYnNvbHV0ZSBvciB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgc21hbGwgKDE2IHggMTYpCiAgICAgICAgICAgICBpY29uIC0gSlBFRyBvciBHSUYgaW1hZ2UuIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgICAgIDxzbWFsbC1pY29uPnNtYWxsaWNvbi5qcGc8L3NtYWxsLWljb24+Ci0gICAgICAgIAotICAgICAgICAgICAgVGhpcyAibGFyZ2UtaWNvbiIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UuIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIAotICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgzMiB4IDMyKSAKKworICAgICAgICAgICAgVGhpcyAibGFyZ2UtaWNvbiIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UuIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlCisgICAgICAgICAgICBhYnNvbHV0ZSBvciB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgc21hbGwgKDMyIHggMzIpCiAgICAgICAgICAgICBpY29uIC0gSlBFRyBvciBHSUYgaW1hZ2UuIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KLSAgICAgICAgICAgIDxsYXJnZS1pY29uPmxhcmdlaWNvbi5qcGc8L2xhcmdlLWljb24+ICAgCisgICAgICAgICAgICA8bGFyZ2UtaWNvbj5sYXJnZWljb24uanBnPC9sYXJnZS1pY29uPgogICAgICAgICA8L2ljb24+CiAgICAgLS0+CiAgICAgPGljb24+CiAgICAgICAgIDxzbWFsbC1pY29uPjwvc21hbGwtaWNvbj4KLSAgICAgICAgPGxhcmdlLWljb24+PC9sYXJnZS1pY29uPiAgIAorICAgICAgICA8bGFyZ2UtaWNvbj48L2xhcmdlLWljb24+CiAgICAgPC9pY29uPgotICAgIAorCiAgICAgPCEtLSBUaGUgInZlbmRvci1uYW1lIiBlbGVtZW50IHNob3VsZCBvY2N1ciBleGFjdGx5IG9uY2UuIC0tPgogICAgIDwhLS0gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgZHJpdmVyIHZlbmRvci4gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICA8dmVuZG9yLW5hbWU+WFlaIElOQy48L3ZlbmRvci1uYW1lPgogICAgIC0tPgogICAgIDx2ZW5kb3ItbmFtZT5TdW4gTWljcm9zeXN0ZW1zPC92ZW5kb3ItbmFtZT4KLSAgICAKKwogICAgIDwhLS0gVGhlICJlaXMtdHlwZSIgZWxlbWVudCBzaG91bGQgb2NjdXIgZXhhY3RseSBvbmNlLiAtLT4KLSAgICA8IS0tIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIGRhdGFiYXNlLCBmb3IgZXhhbXBsZSB0aGUgcHJvZHVjdCBuYW1lIG9mIAorICAgIDwhLS0gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgZGF0YWJhc2UsIGZvciBleGFtcGxlIHRoZSBwcm9kdWN0IG5hbWUgb2YKICAgICAgICAgIHRoZSBkYXRhYmFzZSBpbmRlcGVuZGVudCBvZiBhbnkgdmVyc2lvbiBpbmZvcm1hdGlvbi4gVGhlIGZvbGxvd2luZwogICAgICAgICAgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgPGVpcy10eXBlPlhZWjwvZWlzLXR5cGU+CiAgICAgLS0+CiAgICAgPGVpcy10eXBlPkRhdGFiYXNlPC9laXMtdHlwZT4KLSAgICAKKwogICAgIDwhLS0gVGhlICJyZXNvdXJjZWFkYXB0ZXItdmVyc2lvbiIgZWxlbWVudCBzaG91bGQgb2NjdXIgZXhhY3RseSBvbmNlLiAtLT4KLSAgICA8IS0tIFRoaXMgc3BlY2lmaWVzIGEgc3RyaW5nIGJhc2VkIHZlcnNpb24gb2YgdGhlIHJlc291cmNlIGFkYXB0ZXIgZnJvbSAKKyAgICA8IS0tIFRoaXMgc3BlY2lmaWVzIGEgc3RyaW5nIGJhc2VkIHZlcnNpb24gb2YgdGhlIHJlc291cmNlIGFkYXB0ZXIgZnJvbQogICAgICAgICAgdGhlIGRyaXZlciB2ZW5kb3IuIFRoZSBkZWZhdWx0IGlzIGJlaW5nIHNldCBhcyAxLjAuIFRoZSBkcml2ZXIKICAgICAgICAgIHZlbmRvciBjYW4gY2hhbmdlIGl0IGFzIHJlcXVpcmVkLgogICAgIC0tPgogICAgIDxyZXNvdXJjZWFkYXB0ZXItdmVyc2lvbj4xLjA8L3Jlc291cmNlYWRhcHRlci12ZXJzaW9uPgotICAgIAorCiAgICAgPCEtLSBUaGlzICJsaWNlbnNlIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZSAtLT4KICAgICA8IS0tIFRoaXMgc3BlY2lmaWVzIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgZm9yIHRoZSByZXNvdXJjZSBhZGFwdGVyIG1vZHVsZS4KICAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgPGxpY2Vuc2U+CiAgICAgICAgICAgICBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwLgogICAgICAgICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byAKLSAgICAgICAgICAgICAgICBwcm92aWRlIGEgZGVzY3JpcHRpb24gZm9yIHRoZSBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzIG9mIHRoZSAKLSAgICAgICAgICAgICAgICByZXNvdXJjZSBhZGFwdGVyIGxpa2UgZHVyYXRpb24gb2YgbGljZW5zZSwgbnVtYmVyb2YgY29ubmVjdGlvbiAKKyAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8KKyAgICAgICAgICAgICAgICBwcm92aWRlIGEgZGVzY3JpcHRpb24gZm9yIHRoZSBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzIG9mIHRoZQorICAgICAgICAgICAgICAgIHJlc291cmNlIGFkYXB0ZXIgbGlrZSBkdXJhdGlvbiBvZiBsaWNlbnNlLCBudW1iZXJvZiBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb25zLgogICAgICAgICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgICAgICAgCisKICAgICAgICAgICAgIFRoaXMgc3BlY2lmaWVzIHdoZXRoZXIgYSBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGRlcGxveSBhbmQgdXNlIHRoZSByZXNvdXJjZSBhZGFwdGVyLgogICAgICAgICAgICAgRGVmYXVsdCBpcyBmYWxzZS4KICAgICAgICAgICAgIDxsaWNlbnNlLXJlcXVpcmVkPmZhbHNlPC9saWNlbnNlLXJlcXVpcmVkPgpAQCAtOTMsMjQgKzkzLDI0IEBACiAgICAgPGxpY2Vuc2U+CiAgICAgICAgIDxsaWNlbnNlLXJlcXVpcmVkPmZhbHNlPC9saWNlbnNlLXJlcXVpcmVkPgogICAgIDwvbGljZW5zZT4KLSAgICAKKwogICAgIDxyZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgIAotICAgICAgICA8IS0tIAotICAgICAgICAgICAgVGhlICJjb25maWctcHJvcGVydHkiIGVsZW1lbnRzIGNhbiBoYXZlIHplcm8gb3IgbW9yZSAiZGVzY3JpcHRpb24iIAorCisgICAgICAgIDwhLS0KKyAgICAgICAgICAgIFRoZSAiY29uZmlnLXByb3BlcnR5IiBlbGVtZW50cyBjYW4gaGF2ZSB6ZXJvIG9yIG1vcmUgImRlc2NyaXB0aW9uIgogICAgICAgICAgICAgZWxlbWVudHMuIFRoZSAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGFyZSBub3QgYmVpbmcgaW5jbHVkZWQKICAgICAgICAgICAgIGluIHRoZSAiY29uZmlnLXByb3BlcnR5IiBlbGVtZW50cyBiZWxvdy4gVGhlIGRyaXZlciB2ZW5kb3IgY2FuCiAgICAgICAgICAgICBhZGQgdGhlbSBhcyByZXF1aXJlZC4KICAgICAgICAgLS0+Ci0gICAgICAgIAorCiAgICAgICAgIDxyZXNvdXJjZWFkYXB0ZXItY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLlJlc291cmNlQWRhcHRlcjwvcmVzb3VyY2VhZGFwdGVyLWNsYXNzPgotICAgICAgICAKKwogICAgICAgICA8b3V0Ym91bmQtcmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAKKwogICAgICAgICAgICAgPGNvbm5lY3Rpb24tZGVmaW5pdGlvbj4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxtYW5hZ2VkY29ubmVjdGlvbmZhY3RvcnktY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9tYW5hZ2VkY29ubmVjdGlvbmZhY3RvcnktY2xhc3M+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mIHRoZXNlIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgogICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5TZXJ2ZXJOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KQEAgLTEyMiwxMzYgKzEyMiwxMzYgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjkwOTI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VXNlcjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5EQlVTRVI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+UGFzc3dvcmQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+REJQQVNTV09SRDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5EYXRhYmFzZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+amRiYzpwb2ludGJhc2U6c2VydmVyOi8vbG9jYWxob3N0OjkwOTIvc3FlLXNhbXBsZXMsbmV3PC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkRhdGFTb3VyY2VOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5EZXNjcmlwdGlvbjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5PcmFjbGUgdGhpbiBkcml2ZXIgRGF0YXNvdXJjZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+TmV0d29ya1Byb3RvY29sPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Sb2xlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+TG9naW5UaW1lT3V0PC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RHJpdmVyUHJvcGVydGllczwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RGVsaW1pdGVyPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPiM8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Q2xhc3NOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmNvbS5wb2ludGJhc2UuamRiYy5qZGJjRGF0YVNvdXJjZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgCQk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZmFsc2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uTWV0aG9kPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VHJhbnNhY3Rpb25Jc29sYXRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZmFsc2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25NZXRob2Q8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uVGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VHJhbnNhY3Rpb25Jc29sYXRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5HdWFyYW50ZWVJc29sYXRpb25MZXZlbDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb25mYWN0b3J5LWludGVyZmFjZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29ubmVjdGlvbmZhY3RvcnktaW50ZXJmYWNlPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb25mYWN0b3J5LWltcGwtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2U8L2Nvbm5lY3Rpb25mYWN0b3J5LWltcGwtY2xhc3M+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbi1pbnRlcmZhY2U+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29ubmVjdGlvbi1pbnRlcmZhY2U+Ci0gICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb24taW1wbC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcjwvY29ubmVjdGlvbi1pbXBsLWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8L2Nvbm5lY3Rpb24tZGVmaW5pdGlvbj4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8dHJhbnNhY3Rpb24tc3VwcG9ydD5Mb2NhbFRyYW5zYWN0aW9uPC90cmFuc2FjdGlvbi1zdXBwb3J0PgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxhdXRoZW50aWNhdGlvbi1tZWNoYW5pc20+CiAgICAgICAgICAgICAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgogICAgICAgICAgICAgICAgIDwhLS0gTm90IGluY2x1ZGluZyB0aGUgImRlc2NyaXB0aW9uIiBlbGVtZW50IC0tPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGF1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbS10eXBlPkJhc2ljUGFzc3dvcmQ8L2F1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbS10eXBlPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNyZWRlbnRpYWwtaW50ZXJmYWNlPmphdmF4LnJlc291cmNlLnNwaS5zZWN1cml0eS5QYXNzd29yZENyZWRlbnRpYWw8L2NyZWRlbnRpYWwtaW50ZXJmYWNlPgogICAgICAgICAgICAgPC9hdXRoZW50aWNhdGlvbi1tZWNoYW5pc20+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPHJlYXV0aGVudGljYXRpb24tc3VwcG9ydD5mYWxzZTwvcmVhdXRoZW50aWNhdGlvbi1zdXBwb3J0PgotICAgICAgICAgICAgCisKICAgICAgICAgPC9vdXRib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0JPGFkbWlub2JqZWN0PgotCSAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgotCSAgICAgICA8YWRtaW5vYmplY3QtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluSW1wbDwvYWRtaW5vYmplY3QtY2xhc3M+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlNjaGVtYU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Sm5kaU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Tm9PZlJvd3M8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5JbnRlZ2VyPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICA8YWRtaW5vYmplY3Q+CisgICAgICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluPC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+CisgICAgICAgICAgIDxhZG1pbm9iamVjdC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW5JbXBsPC9hZG1pbm9iamVjdC1jbGFzcz4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+U2NoZW1hTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5KbmRpTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Ob09mUm93czwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLkludGVnZXI8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4wPC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8L2FkbWlub2JqZWN0PgotICAgICAgICAKKwogICAgIDwvcmVzb3VyY2VhZGFwdGVyPgotICAgIAorCiA8L2Nvbm5lY3Rvcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQppbmRleCBiMjE5Y2QyLi4xMjQ4MDljIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCkBAIC0yNCwyNiArMjQsMjYgQEAKIC8qKgogICogQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMQotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzEKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0aW9uTWFuYWdlciBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyeyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uTWFuYWdlciBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyewogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhIDxjb2RlPkNvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QgdG8gdGhlIDxjb2RlPkNvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0JaW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcmV0dXJuCUEgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvciBpbiBnZXR0aW5nIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gICAgbWNmICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBpbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgQSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBPYmplY3QuCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yIGluIGdldHRpbmcgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+LgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgYWxsb2NhdGVDb25uZWN0aW9uKE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsCi0gICAgCQkJCSAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8pIAotICAgIAkJCQkgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0JTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBtY2YuY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgaW5mbyk7Ci0JcmV0dXJuIG1jLmdldENvbm5lY3Rpb24obnVsbCwgaW5mbyk7ICAgIAkJCQkgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKQorICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CisgICAgTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBtY2YuY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgaW5mbyk7CisgICAgcmV0dXJuIG1jLmdldENvbm5lY3Rpb24obnVsbCwgaW5mbyk7CiAgICAgfQotICAgIAorCiAgICAgLyoKICAgICAgKiBUaGlzIGNsYXNzIGNvdWxkIGVmZmVjdGl2ZWx5IGltcGxlbWVudCBDb25uZWN0aW9uIHBvb2xpbmcgYWxzby4KICAgICAgKiBDb3VsZCBiZSBkb25lIGZvciBGQ1MuCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQppbmRleCAzOWM3ODc2Li5jNDc3ZmMyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEKQEAgLTE5LDEwICsxOSwxMCBAQAogLyoqCiAgKiBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMQotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzEKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm97IAorcHVibGljIGNsYXNzIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mb3sKIAogICAgIHByaXZhdGUgU3RyaW5nIHVzZXI7CiAgICAgcHJpdmF0ZSBTdHJpbmcgcGFzc3dvcmQ7CkBAIC0zMCw4ICszMCw4IEBACiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0cyBhIG5ldyA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdAogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJVXNlciBOYW1lLgotICAgICAqIEBwYXJhbQlwYXNzd29yZAlQYXNzd29yZAorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIFVzZXIgTmFtZS4KKyAgICAgKiBAcGFyYW0gICAgcGFzc3dvcmQgICAgUGFzc3dvcmQKICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvblJlcXVlc3RJbmZvKFN0cmluZyB1c2VyLCBTdHJpbmcgcGFzc3dvcmQpIHsKICAgICAgICAgdGhpcy51c2VyID0gdXNlcjsKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgbmFtZSBvZiB0aGUgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqCi0gICAgICogQHJldHVybglVc2VyIG5hbWUgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgorICAgICAqIEByZXR1cm4gICAgVXNlciBuYW1lIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXIoKSB7CiAgICAgICAgIHJldHVybiB1c2VyOwpAQCAtNTAsNyArNTAsNyBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgcGFzc3dvcmQgb2YgdGhlIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKgotICAgICAqIEByZXR1cm4JUGFzc3dvcmQgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgorICAgICAqIEByZXR1cm4gICAgUGFzc3dvcmQgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFzc3dvcmQoKSB7CiAgICAgICAgIHJldHVybiBwYXNzd29yZDsKQEAgLTU5LDcgKzU5LDcgQEAKICAgICAvKioKICAgICAgKiBWZXJpZnkgd2hldGhlciB0d28gQ29ubmVjdGlvblJlcXVlc3RJbmZvcyBhcmUgZXF1YWwuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVRydWUsIGlmIHRoZXkgYXJlIGVxdWFsIGFuZCBmYWxzZSBvdGhlcndpc2UuCisgICAgICogQHJldHVybiAgICBUcnVlLCBpZiB0aGV5IGFyZSBlcXVhbCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7CiAgICAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwpAQCAtNzUsMTggKzc1LDE4IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBoYXNoY29kZSBvZiB0aGUgb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybgloYXNoQ29kZS4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2hDb2RlLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CiAgICAgICAgIFN0cmluZyByZXN1bHQgPSAiIiArIHVzZXIgKyBwYXNzd29yZDsKICAgICAgICAgcmV0dXJuIHJlc3VsdC5oYXNoQ29kZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbXBhcmVzIHR3byBvYmplY3RzLgogICAgICAqCi0gICAgICogQHBhcmFtCW8xCUZpcnN0IG9iamVjdC4KLSAgICAgKiBAcGFyYW0JbzIJU2Vjb25kIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgbzEgICAgRmlyc3Qgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvMiAgICBTZWNvbmQgb2JqZWN0LgogICAgICAqLwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKE9iamVjdCBvMSwgT2JqZWN0IG8yKSB7CiAgICAgICAgIGlmIChvMSA9PSBudWxsKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKaW5kZXggNDExYjczZi4uZDk4NzRhMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtMzEsMzYgKzMxLDM2IEBACiAvKioKICAqIERhdGEgU291cmNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMAotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzAKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIAogcHVibGljIGNsYXNzIERTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGV4dGVuZHMgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHsKLSAgIAorCiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgamF2YXguc3FsLkRhdGFTb3VyY2UgZGF0YVNvdXJjZU9iajsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CiAgICAgfQogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIEVJUyByZXNvdXJjZQogICAgICAqIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCi0gICAgICogICAgICAgCSAgICAgICAgICAgICAJYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+Ci0gICAgICogICAgICAgCSAgICAgICAgICAgICAJb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQotICAgICAqICAgICAgIAkJCQljcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0Ci0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdCAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwKICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC02OCw1NSArNjgsNTUgQEAKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGMgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLCBzdWJqZWN0LCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoZGF0YVNvdXJjZU9iaiA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZihkc09iakJ1aWxkZXIgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGRzT2JqQnVpbGRlciA9IG5ldyBEYXRhU291cmNlT2JqZWN0QnVpbGRlcihzcGVjKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZU9iaiA9IChqYXZheC5zcWwuRGF0YVNvdXJjZSkgZHNPYmpCdWlsZGVyLmNvbnN0cnVjdERhdGFTb3VyY2VPYmplY3QoKTsKICAgICAgICAgICAgIH0gY2F0Y2goQ2xhc3NDYXN0RXhjZXB0aW9uIGNjZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY2NlIiwgY2NlKTsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NjZSIsIGNjZSk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2UuUmVzb3VyY2VFeGNlcHRpb24oY2NlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkc0Nvbm4gPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewotCSAgICAvKiBGb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIvcGFzc3dkIG9mIHRoZSBjb25uZWN0aW9uIHBvb2wgaXMKLQkgICAgICogZXF1YWwgdG8gdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdAotCSAgICAgKiBnZXQgYSBjb25uZWN0aW9uIGZyb20gdGhpcyBwb29sIGRpcmVjdGx5LgotCSAgICAgKiBmb3IgYWxsIG90aGVyIGNvbmRpdGlvbnMgZ28gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24KLQkgICAgICovCi0JICAgIGlmICggaXNFcXVhbCggcGMsIGdldFVzZXIoKSwgZ2V0UGFzc3dvcmQoKSApICkgewotCSAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24ocGMuZ2V0VXNlck5hbWUoKSwgCi0JCSAgICBuZXcgU3RyaW5nKHBjLmdldFBhc3N3b3JkKCkpKTsKLQkgICAgfQorICAgICAgICAvKiBGb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIvcGFzc3dkIG9mIHRoZSBjb25uZWN0aW9uIHBvb2wgaXMKKyAgICAgICAgICogZXF1YWwgdG8gdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdAorICAgICAgICAgKiBnZXQgYSBjb25uZWN0aW9uIGZyb20gdGhpcyBwb29sIGRpcmVjdGx5LgorICAgICAgICAgKiBmb3IgYWxsIG90aGVyIGNvbmRpdGlvbnMgZ28gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24KKyAgICAgICAgICovCisgICAgICAgIGlmICggaXNFcXVhbCggcGMsIGdldFVzZXIoKSwgZ2V0UGFzc3dvcmQoKSApICkgeworICAgICAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24ocGMuZ2V0VXNlck5hbWUoKSwKKyAgICAgICAgICAgIG5ldyBTdHJpbmcocGMuZ2V0UGFzc3dvcmQoKSkpOworICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2NyZWF0ZV9jb25uIiwgc3FsZSk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBjb3VsZCBub3QgYmUgYWxsb2NhdGVkOiAiICsgCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19jcmVhdGVfY29ubiIsIHNxbGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGFsbG9jYXRlZDogIiArCiAgICAgICAgICAgICAgICAgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgZHNDb25uLCBwYywgdGhpcyk7CiAgICAgICAgIC8vR0pDSU5UCiAgICAgICAgIHNldElzb2xhdGlvbihtYyk7CiAgICAgICAgIGlzVmFsaWQobWMpOwogICAgICAgICByZXR1cm4gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvIAorICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0bwogICAgICAqIGFub3RoZXIgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jb3RoZXIJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCi0gICAgICoJCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIG90aGVyICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCisgICAgICogICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTEyNyw0MDkgKzEyNyw0MDkgQEAKICAgICAgICAgICogaWYgYW5kIG9ubHkgaWYgdGhlaXIgcHJvcGVydGllcyBhcmUgdGhlIHNhbWUuCiAgICAgICAgICAqLwogICAgICAgICBpZihvdGhlciBpbnN0YW5jZW9mIGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSkgewotICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG90aGVyTUNGID0gCisgICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnkgb3RoZXJNQ0YgPQogICAgICAgICAgICAgICAgIChjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpIG90aGVyOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BlYy5lcXVhbHMob3RoZXJNQ0Yuc3BlYyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlcnZlck5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc2VydmVyTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHNlcnZlck5hbWUoU3RyaW5nIHNlcnZlck5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSwgc2VydmVyTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXNlcnZlck5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBzZXJ2ZXJOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0c2VydmVyTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlcnZlck5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc2VydmVyTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFNlcnZlck5hbWUoU3RyaW5nIHNlcnZlck5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSwgc2VydmVyTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXNlcnZlck5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBzZXJ2ZXJOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvcnROdW1iZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcG9ydE51bWJlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHBvcnROdW1iZXIoU3RyaW5nIHBvcnROdW1iZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiwgcG9ydE51bWJlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBvcnROdW1iZXIKLSAgICAgKiBAc2VlCTxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBwb3J0TnVtYmVyCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0cG9ydE51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvcnROdW1iZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcG9ydE51bWJlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFBvcnROdW1iZXIoU3RyaW5nIHBvcnROdW1iZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiwgcG9ydE51bWJlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBvcnROdW1iZXIKLSAgICAgKiBAc2VlCTxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBwb3J0TnVtYmVyCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UG9ydE51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGF0YWJhc2VOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGF0YWJhc2VOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkYXRhYmFzZU5hbWUoU3RyaW5nIGRhdGFiYXNlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUsIGRhdGFiYXNlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGF0YWJhc2VOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkYXRhYmFzZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRhdGFiYXNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkYXRhYmFzZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkYXRhYmFzZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERhdGFiYXNlTmFtZShTdHJpbmcgZGF0YWJhc2VOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSwgZGF0YWJhc2VOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkYXRhYmFzZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRhdGFiYXNlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGF0YWJhc2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRhdGFTb3VyY2VOYW1lKFN0cmluZyBkc24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUsIGRzbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHNuCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRzbgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkYXRhU291cmNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERhdGFTb3VyY2VOYW1lKFN0cmluZyBkc24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUsIGRzbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHNuCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRzbgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREYXRhU291cmNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZXNjCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZXNjICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRlc2NyaXB0aW9uKFN0cmluZyBkZXNjKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OLCBkZXNjKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVzYwotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZXNjCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRlc2NyaXB0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlc2MJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlc2MgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2MpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04sIGRlc2MpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglkZXNjCi0gICAgICogQHNlZQk8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlc2MKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlud1Byb3RvY29sCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbndQcm90b2NvbCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0bmV0d29ya1Byb3RvY29sKFN0cmluZyBud1Byb3RvY29sKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCwgbndQcm90b2NvbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbndQcm90b2NvbAotICAgICAqIEBzZWUJPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbndQcm90b2NvbAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0bmV0d29ya1Byb3RvY29sKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHBhcmFtCW53UHJvdG9jb2wJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBud1Byb3RvY29sICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrUHJvdG9jb2woU3RyaW5nIG53UHJvdG9jb2wpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MLCBud1Byb3RvY29sKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHJldHVybglud1Byb3RvY29sCi0gICAgICogQHNlZQk8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHJldHVybiAgICBud1Byb3RvY29sCisgICAgICogQHNlZSAgICA8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXROZXR3b3JrUHJvdG9jb2woKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlyb2xlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcm9sZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0cm9sZU5hbWUoU3RyaW5nIHJvbGVOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FLCByb2xlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglyb2xlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICByb2xlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRyb2xlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jcm9sZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJvbGVOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJvbGVOYW1lKFN0cmluZyByb2xlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSwgcm9sZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jcm9sZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcm9sZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Um9sZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSk7CiAgICAgfQogCi0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHBhcmFtCWxvZ2luVGltZU91dAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZU91dCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0bG9naW5UaW1lT3V0KFN0cmluZyBsb2dpblRpbWVPdXQpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VULCBsb2dpblRpbWVPdXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWxvZ2luVGltZW91dAotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbG9naW5UaW1lb3V0CisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRsb2dpblRpbWVPdXQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lT3V0CTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lT3V0ICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dpblRpbWVPdXQoU3RyaW5nIGxvZ2luVGltZU91dCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQsIGxvZ2luVGltZU91dCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbG9naW5UaW1lb3V0Ci0gICAgICogQHNlZQk8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHJldHVybiAgICBsb2dpblRpbWVvdXQKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldExvZ2luVGltZU91dCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlbGltCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVsaW0gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRlbGltaXRlcihTdHJpbmcgZGVsaW0pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSLCBkZWxpbSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHJldHVybglkZWxpbQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVsaW0KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRlbGltaXRlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlbGltCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVsaW0gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlbGltaXRlcihTdHJpbmcgZGVsaW0pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSLCBkZWxpbSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHJldHVybglkZWxpbQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVsaW0KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlbGltaXRlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHJpdmVyUHJvcHMJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHJpdmVyUHJvcHMgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkcml2ZXJQcm9wZXJ0aWVzKFN0cmluZyBkcml2ZXJQcm9wcykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTLCBkcml2ZXJQcm9wcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRyaXZlclByb3BzCi0gICAgICogQHNlZQk8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHJpdmVyUHJvcHMKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkcml2ZXJQcm9wZXJ0aWVzKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHJpdmVyUHJvcHMJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHJpdmVyUHJvcHMgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREcml2ZXJQcm9wZXJ0aWVzKFN0cmluZyBkcml2ZXJQcm9wcykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTLCBkcml2ZXJQcm9wcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRyaXZlclByb3BzCi0gICAgICogQHNlZQk8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHJpdmVyUHJvcHMKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREcml2ZXJQcm9wZXJ0aWVzKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7CkBAIC01MzksMzUgKzUzOSwzNSBAQAogICAgICAqIENoZWNrIGlmIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgcGFzc2VkIGZvciB0aGlzIGdldCBjb25uZWN0aW9uCiAgICAgICogcmVxdWVzdCBpcyBlcXVhbCB0byB0aGUgdXNlci9wYXNzd2Qgb2YgdGhpcyBjb25uZWN0aW9uIHBvb2wuCiAgICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoIFBhc3N3b3JkQ3JlZGVudGlhbCBwYywgU3RyaW5nIHVzZXIsIAorICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKCBQYXNzd29yZENyZWRlbnRpYWwgcGMsIFN0cmluZyB1c2VyLAogICAgICAgICBTdHJpbmcgcGFzc3dvcmQpIHsKLSAgICAgICAgCi0JLy9pZiBlcXVhbCBnZXQgZGlyZWN0IGNvbm5lY3Rpb24gZWxzZSAKLQkvL2dldCBjb25uZWN0aW9uIHdpdGggdXNlciBhbmQgcGFzc3dvcmQuCi0JCi0JaWYgKHVzZXIgPT0gbnVsbCAmJiBwYyA9PSBudWxsKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0KLQkKLQlpZiAoIHVzZXIgPT0gbnVsbCAmJiBwYyAhPSBudWxsICkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCX0KIAotCWlmKCBwYyA9PSBudWxsICkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JaWYgKCB1c2VyLmVxdWFscyggcGMuZ2V0VXNlck5hbWUoKSApICkgewotCSAgICBpZiAoIHBhc3N3b3JkID09IG51bGwgJiYgcGMuZ2V0UGFzc3dvcmQoKSA9PSBudWxsICkgewotCSAgICAgICAgcmV0dXJuIHRydWU7Ci0JICAgIH0KLQl9Ci0JCi0JaWYgKCB1c2VyLmVxdWFscyhwYy5nZXRVc2VyTmFtZSgpKSAmJiBwYXNzd29yZC5lcXVhbHMocGMuZ2V0UGFzc3dvcmQoKSkgKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0gCi0JCi0gICAgICAgIAotCXJldHVybiBmYWxzZTsKKyAgICAvL2lmIGVxdWFsIGdldCBkaXJlY3QgY29ubmVjdGlvbiBlbHNlCisgICAgLy9nZXQgY29ubmVjdGlvbiB3aXRoIHVzZXIgYW5kIHBhc3N3b3JkLgorCisgICAgaWYgKHVzZXIgPT0gbnVsbCAmJiBwYyA9PSBudWxsKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICggdXNlciA9PSBudWxsICYmIHBjICE9IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYoIHBjID09IG51bGwgKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICggdXNlci5lcXVhbHMoIHBjLmdldFVzZXJOYW1lKCkgKSApIHsKKyAgICAgICAgaWYgKCBwYXNzd29yZCA9PSBudWxsICYmIHBjLmdldFBhc3N3b3JkKCkgPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCB1c2VyLmVxdWFscyhwYy5nZXRVc2VyTmFtZSgpKSAmJiBwYXNzd29yZC5lcXVhbHMocGMuZ2V0UGFzc3dvcmQoKSkgKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworCisgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKaW5kZXggMjA2ODQzMC4uNzM5ZmY0ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKQEAgLTI4LDIyICsyOCwyMiBAQAogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKIC8qKgotICogSG9sZHMgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCwgd2hpY2ggaXMgdG8gYmUgCisgKiBIb2xkcyB0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LCB3aGljaCBpcyB0byBiZQogICogcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCiBwdWJsaWMgY2xhc3MgRGF0YVNvdXJjZSBpbXBsZW1lbnRzIGphdmF4LnNxbC5EYXRhU291cmNlLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSwKLQkJY29tLnN1bi5hcHBzZXJ2LmpkYmNyYS5EYXRhU291cmNlLCBqYWthcnRhLnJlc291cmNlLlJlZmVyZW5jZWFibGV7IAotCQkJCSAgIAorICAgICAgICBjb20uc3VuLmFwcHNlcnYuamRiY3JhLkRhdGFTb3VyY2UsIGpha2FydGEucmVzb3VyY2UuUmVmZXJlbmNlYWJsZXsKKwogICAgIHByaXZhdGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZjsKLSAgICBwcml2YXRlIENvbm5lY3Rpb25NYW5hZ2VyIGNtOwkJCQkgICAJCQkJICAgCisgICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsKICAgICBwcml2YXRlIGludCBsb2dpblRpbWVvdXQ7CiAgICAgcHJpdmF0ZSBQcmludFdyaXRlciBsb2dXcml0ZXI7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CQkJCSAgIAorICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwogICAgIHByaXZhdGUgUmVmZXJlbmNlIHJlZmVyZW5jZTsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC01MSw1NyArNTEsNTcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKIAogICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0LiBUaGlzIGlzIGNyZWF0ZWQgYnkgdGhlIAorICAgICAqIENvbnN0cnVjdHMgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0LiBUaGlzIGlzIGNyZWF0ZWQgYnkgdGhlCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IAotICAgICAqCQkJY3JlYXRpbmcgdGhpcyBvYmplY3QuCi0gICAgICogQHBhcmFtCWNtCTxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBvYmplY3QgZWl0aGVyIGFzc29jaWF0ZWQKLSAgICAgKgkJCXdpdGggQXBwbGljYXRpb24gc2VydmVyIG9yIFJlc291cmNlIEFkYXB0ZXIuCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgY3JlYXRpbmcgdGhpcyBvYmplY3QuCisgICAgICogQHBhcmFtICAgIGNtICAgIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBvYmplY3QgZWl0aGVyIGFzc29jaWF0ZWQKKyAgICAgKiAgICAgICAgICAgIHdpdGggQXBwbGljYXRpb24gc2VydmVyIG9yIFJlc291cmNlIEFkYXB0ZXIuCiAgICAgICovCiAgICAgcHVibGljIERhdGFTb3VyY2UgKE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsIENvbm5lY3Rpb25NYW5hZ2VyIGNtKSB7Ci0gICAgCXRoaXMubWNmID0gbWNmOwotICAgIAlpZiAoY20gPT0gbnVsbCkgewotICAgIAkgICAgdGhpcy5jbSA9IChDb25uZWN0aW9uTWFuYWdlcikgbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uTWFuYWdlcigpOwotICAgIAl9IGVsc2UgewotICAgIAkgICAgdGhpcy5jbSA9IGNtOwotICAgIAl9ICAgIAkKLSAgICB9ICAgCi0gICAgCisgICAgICAgIHRoaXMubWNmID0gbWNmOworICAgICAgICBpZiAoY20gPT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5jbSA9IChDb25uZWN0aW9uTWFuYWdlcikgbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uTWFuYWdlcigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5jbSA9IGNtOworICAgICAgICB9CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuCTxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuICAgICAgCisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbigpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAl0cnkgewotICAgIAkgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLG51bGwpOyAgICAJICAgIAotICAgIAl9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLG51bGwpOworICAgICAgICB9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewogLy8gVGhpcyBpcyB0ZW1wb3JhcnkuIFRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byBTRVZFUkUgYWZ0ZXIgVFAKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCX0KKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIAotICAgICAqIEBwYXJhbQl1c2VyCVVzZXIgbmFtZSBmb3IgdGhlIENvbm5lY3Rpb24uCi0gICAgICogQHBhcmFtCXB3ZAlQYXNzd29yZCBmb3IgdGhlIENvbm5lY3Rpb24uCi0gICAgICogQHJldHVybgk8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLiAgICAgIAorICAgICAqCisgICAgICogQHBhcmFtICAgIHVzZXIgICAgVXNlciBuYW1lIGZvciB0aGUgQ29ubmVjdGlvbi4KKyAgICAgKiBAcGFyYW0gICAgcHdkICAgIFBhc3N3b3JkIGZvciB0aGUgQ29ubmVjdGlvbi4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbihTdHJpbmcgdXNlciwgU3RyaW5nIHB3ZCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXRyeSB7Ci0gICAgCSAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbyA9IG5ldyBDb25uZWN0aW9uUmVxdWVzdEluZm8gKHVzZXIsIHB3ZCk7Ci0gICAgCSAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsaW5mbyk7Ci0gICAgCX0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbyA9IG5ldyBDb25uZWN0aW9uUmVxdWVzdEluZm8gKHVzZXIsIHB3ZCk7CisgICAgICAgICAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsaW5mbyk7CisgICAgICAgIH0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CiAvLyBUaGlzIGlzIHRlbXBvcmFyeS4gVGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIFNFVkVSRSBhZnRlciBUUAotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJfQotICAgIH0gICAgCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIKQEAgLTExNCw5MSArMTE0LDkxIEBACiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbihDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAKLSAgICAgICAgQ29ubmVjdGlvbiBkcml2ZXJDb24gPSBjb247IAorICAgICAgICBDb25uZWN0aW9uIGRyaXZlckNvbiA9IGNvbjsKICAgICAgICAgaWYgKGNvbiBpbnN0YW5jZW9mIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSB7Ci0gICAgICAgICAgIGRyaXZlckNvbiA9ICgoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIGNvbikuZ2V0Q29ubmVjdGlvbigpOyAKLSAgICAgICAgfSAKKyAgICAgICAgICAgZHJpdmVyQ29uID0gKChjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgY29uKS5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gZHJpdmVyQ29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9naW4gdGltZW91dAogICAgICAqCiAgICAgICogQHJldHVybiBsb2dpbiB0aW1lb3V0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0TG9naW5UaW1lb3V0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJcmV0dXJuCWxvZ2luVGltZW91dDsKKyAgICAgICAgcmV0dXJuICAgIGxvZ2luVGltZW91dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZ2luIHRpbWVvdXQKICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVvdXQJTG9naW4gdGltZW91dC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lb3V0ICAgIExvZ2luIHRpbWVvdXQuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9naW5UaW1lb3V0KGludCBsb2dpblRpbWVvdXQpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXRoaXMubG9naW5UaW1lb3V0ID0gbG9naW5UaW1lb3V0OworICAgICAgICB0aGlzLmxvZ2luVGltZW91dCA9IGxvZ2luVGltZW91dDsKICAgICB9Ci0gICAgCi0gICAgLyoqIAorCisgICAgLyoqCiAgICAgICogR2V0IHRoZSBsb2d3cml0ZXIgb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT4gUHJpbnRXcml0ZXIgPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIFByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXJldHVybglsb2dXcml0ZXI7CisgICAgICAgIHJldHVybiAgICBsb2dXcml0ZXI7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9nd3JpdGVyIG9uIHRoaXMgb2JqZWN0LgogICAgICAqCiAgICAgICogQHBhcmFtIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKFByaW50V3JpdGVyIGxvZ1dyaXRlcikgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7Ci0gICAgfSAgICAgICAgCi0gICAgICAgIAorICAgICAgICB0aGlzLmxvZ1dyaXRlciA9IGxvZ1dyaXRlcjsKKyAgICB9CisKICAgICBwdWJsaWMgTG9nZ2VyIGdldFBhcmVudExvZ2dlcigpIHRocm93cyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBmZWF0dXJlLiIpOwogICAgIH0KICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KKyAgICAgKiBAcmV0dXJuICAgIERlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7Ci0gICAgCXJldHVybiBkZXNjcmlwdGlvbjsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKICAgICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2NyaXB0aW9uKSB7Ci0gICAgCXRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgICB9ICAgIAotICAgIAorICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgfQorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSByZWZlcmVuY2UuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIDxjb2RlPlJlZmVyZW5jZTwvY29kZT5vYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIFJlZmVyZW5jZSBnZXRSZWZlcmVuY2UoKSB7Ci0gICAgCXJldHVybiByZWZlcmVuY2U7CisgICAgICAgIHJldHVybiByZWZlcmVuY2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSByZWZlcmVuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVmZXJlbmNlIDxjb2RlPlJlZmVyZW5jZTwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICByZWZlcmVuY2UgPGNvZGU+UmVmZXJlbmNlPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlKFJlZmVyZW5jZSByZWZlcmVuY2UpIHsKLSAgICAJdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7CisgICAgICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOwogICAgIH0KIAogICAgIHB1YmxpYyA8VD4gVCB1bndyYXAoQ2xhc3M8VD4gaWZhY2UpIHRocm93cyBTUUxFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCmluZGV4IGFlMTZiNTEuLjgyNDUxMGQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKQEAgLTE4LDEzICsxOCwxMyBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEpkYmNTZXR1cEFkbWluIHsKIAotICAgIHB1YmxpYyB2b2lkIHNldFRhYmxlTmFtZShTdHJpbmcgZGIpOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRUYWJsZU5hbWUoU3RyaW5nIGRiKTsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFibGVOYW1lKCk7CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRKbmRpTmFtZShTdHJpbmcgbmFtZSk7IAorICAgIHB1YmxpYyB2b2lkIHNldEpuZGlOYW1lKFN0cmluZyBuYW1lKTsKIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Sm5kaU5hbWUoKTsgCisgICAgcHVibGljIFN0cmluZyBnZXRKbmRpTmFtZSgpOwogCiAgICAgcHVibGljIHZvaWQgc2V0U2NoZW1hTmFtZShTdHJpbmcgbmFtZSk7CiAKQEAgLTM0LDggKzM0LDggQEAKIAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldE5vT2ZSb3dzKCk7CiAKLSAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCk7IAotICAgIAorICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2V0dXAoKTsKKwogICAgIHB1YmxpYyBpbnQgZ2V0VmVyc2lvbigpOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQppbmRleCAxYTllNWM2Li5jNzJkNzRjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKQEAgLTY2LDYyICs2Niw2MiBAQAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2V0dXAoKXsKIAogICAgICAgICBpZiAoam5kaU5hbWU9PSBudWxsIHx8IGpuZGlOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgcmV0dXJuIGZhbHNlOwotCX0KKyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgICAgIGlmICh0YWJsZU5hbWU9PSBudWxsIHx8IHRhYmxlTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IG51bGw7Ci0JU3RhdGVtZW50IHMgPSBudWxsOwotCVJlc3VsdFNldCBycyA9IG51bGw7Ci0JYm9vbGVhbiBiID0gZmFsc2U7CisgICAgU3RhdGVtZW50IHMgPSBudWxsOworICAgIFJlc3VsdFNldCBycyA9IG51bGw7CisgICAgYm9vbGVhbiBiID0gZmFsc2U7CiAgICAgICAgIHRyeSB7Ci0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKGpuZGlOYW1lKTsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoam5kaU5hbWUpOwogICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBTdHJpbmcgZnVsbFRhYmxlTmFtZSA9IHRhYmxlTmFtZTsKLQkgICAgaWYgKHNjaGVtYU5hbWUgIT0gbnVsbCAmJiAoIShzY2hlbWFOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSkpIHsKLQkgICAgICAgIGZ1bGxUYWJsZU5hbWUgPSBzY2hlbWFOYW1lLnRyaW0oKSArICIuIiArIGZ1bGxUYWJsZU5hbWU7Ci0JICAgIH0KLQkgICAgU3RyaW5nIHFyeSA9ICJzZWxlY3QgKiBmcm9tICIgKyBmdWxsVGFibGVOYW1lOyAKKyAgICAgICAgU3RyaW5nIGZ1bGxUYWJsZU5hbWUgPSB0YWJsZU5hbWU7CisgICAgICAgIGlmIChzY2hlbWFOYW1lICE9IG51bGwgJiYgKCEoc2NoZW1hTmFtZS50cmltKCkuZXF1YWxzKCIiKSkpKSB7CisgICAgICAgICAgICBmdWxsVGFibGVOYW1lID0gc2NoZW1hTmFtZS50cmltKCkgKyAiLiIgKyBmdWxsVGFibGVOYW1lOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBxcnkgPSAic2VsZWN0ICogZnJvbSAiICsgZnVsbFRhYmxlTmFtZTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyBxdWVyeSA6IiArIHFyeSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0aW5nIHF1ZXJ5IDoiICsgcXJ5KTsKIAotCSAgICBzID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBycyA9IHMuZXhlY3V0ZVF1ZXJ5KHFyeSk7IAorICAgICAgICBzID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBycyA9IHMuZXhlY3V0ZVF1ZXJ5KHFyeSk7CiAKICAgICAgICAgICAgIGludCBpID0gMDsKLQkgICAgaWYgKHJzLm5leHQoKSkgewotCSAgICAgICAgaSsrOwotCSAgICB9CisgICAgICAgIGlmIChycy5uZXh0KCkpIHsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vIG9mIHJvd3MgZm91bmQ6IiArIGkpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJObyBvZiByb3dzIGV4cGVjdGVkOiIgKyBub09mUm93cyk7CiAKLQkgICAgaWYgKGkgPT0gbm9PZlJvd3MuaW50VmFsdWUoKSkgewotCSAgICAgICBiID0gdHJ1ZTsKLQkgICAgfSBlbHNlIHsKLQkgICAgICAgYiA9IGZhbHNlOwotCSAgICB9Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBiID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGlmIChycyAhPSBudWxsKSBycy5jbG9zZSgpOwotCSAgICAgICAgaWYgKHMgIT0gbnVsbCkgcy5jbG9zZSgpOwotCSAgICAgICAgaWYgKGNvbiAhPSBudWxsKSBjb24uY2xvc2UoKTsKKyAgICAgICAgaWYgKGkgPT0gbm9PZlJvd3MuaW50VmFsdWUoKSkgeworICAgICAgICAgICBiID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgYiA9IGZhbHNlOworICAgICAgICB9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBiID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChycyAhPSBudWxsKSBycy5jbG9zZSgpOworICAgICAgICAgICAgaWYgKHMgIT0gbnVsbCkgcy5jbG9zZSgpOworICAgICAgICAgICAgaWYgKGNvbiAhPSBudWxsKSBjb24uY2xvc2UoKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIH0KLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJSZXR1cm5pbmcgc2V0dXAgOiIgK2IpOwotCXJldHVybiBiOworICAgICAgICB9CiAgICAgfQotICAgIAorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuaW5nIHNldHVwIDoiICtiKTsKKyAgICByZXR1cm4gYjsKKyAgICB9CisKICAgICBwdWJsaWMgaW50IGdldFZlcnNpb24oKXsKLQkgICAgcmV0dXJuIFJlc291cmNlQWRhcHRlci5WRVJTSU9OOworICAgICAgICByZXR1cm4gUmVzb3VyY2VBZGFwdGVyLlZFUlNJT047CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCmluZGV4IDhlYmUwNTcuLmM1NGEyMTYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCkBAIC0yMyw0NSArMjMsNDUgQEAKIC8qKgogICogPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBMb2NhbFRyYW5zYWN0aW9uIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTG9jYWxUcmFuc2FjdGlvbiB7Ci0gICAgCisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+LgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCByZXR1cm5zCi0gICAgICoJCQl0aGlzIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IG9iamVjdCBhcwotICAgICAqCQkJYSByZXN1bHQgb2YgPGNvZGU+Z2V0TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgcmV0dXJucworICAgICAqICAgICAgICAgICAgdGhpcyA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBvYmplY3QgYXMKKyAgICAgKiAgICAgICAgICAgIGEgcmVzdWx0IG9mIDxjb2RlPmdldExvY2FsVHJhbnNhY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIExvY2FsVHJhbnNhY3Rpb24oTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEJlZ2luIGEgbG9jYWwgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGJlZ2luKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvblN0YXJ0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvblN0YXJ0ZWQoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKS5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IGEgbG9jYWwgdHJhbnNhY3Rpb24uCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbiBvciBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gb3IgY29tbWl0dGluZyB0aGUgdHJhbnNhY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBFeGNlcHRpb24gZSA9IG51bGw7CkBAIC03MiwxNSArNzIsMTUgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSb2xsYmFjayBhIGxvY2FsIHRyYW5zYWN0aW9uLgotICAgICAqIAotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24gb3Igcm9sbGluZyBiYWNrIHRoZSB0cmFuc2FjdGlvbgorICAgICAqCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBvciByb2xsaW5nIGJhY2sgdGhlIHRyYW5zYWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCmluZGV4IDMwZjQ2MGEuLjJkYWQ1OWEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKQEAgLTQxLDggKzQxLDggQEAKIC8qKgogICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjIKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIyCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb24gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiB7CiAKQEAgLTUyLDcgKzUyLDcgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBpc0Rlc3Ryb3llZCA9IGZhbHNlOwogICAgIHByaXZhdGUgYm9vbGVhbiBpc1VzYWJsZSA9IHRydWU7Ci0gICAgCisKICAgICBwcml2YXRlIGludCBjb25uZWN0aW9uVHlwZSA9IElTTk9UQVBPT0xFRENPTk5FQ1RJT047CiAgICAgcHJpdmF0ZSBQb29sZWRDb25uZWN0aW9uIHBjID0gbnVsbDsKICAgICBwcml2YXRlIGphdmEuc3FsLkNvbm5lY3Rpb24gYWN0dWFsQ29ubmVjdGlvbiA9IG51bGw7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgcHJpdmF0ZSBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmID0gbnVsbDsKICAgICBwcml2YXRlIFhBUmVzb3VyY2UgeGFyID0gbnVsbDsKICAgICBwdWJsaWMgQ29ubmVjdGlvbkhvbGRlciBhY3RpdmVDb25uZWN0aW9uSGFuZGxlOwotICAgIAorCiAgICAgLy9HSkNJTlQKICAgICBwcml2YXRlIGludCBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkOwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0NsZWFuID0gZmFsc2U7CkBAIC03Nyw3MSArNzcsNzEgQEAKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uIFRoZSBwb29sZWRDb25uIHBhcmFtZXRlciBpcyBleHBlY3RlZAotICAgICAqIHRvIGJlIG51bGwgYW5kIHNxbENvbm4gcGFyYW1ldGVyIGlzIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiBjYXNlIHdoZXJlIAotICAgICAqIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpcyBnb3QgZnJvbSBhIG5vbiBwb29sZWQgZGF0YXNvdXJjZSBvYmplY3QuIFRoZSAKKyAgICAgKiB0byBiZSBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlciBpcyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gY2FzZSB3aGVyZQorICAgICAqIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpcyBnb3QgZnJvbSBhIG5vbiBwb29sZWQgZGF0YXNvdXJjZSBvYmplY3QuIFRoZQogICAgICAqIHBvb2xlZENvbm4gcGFyYW1ldGVyIGlzIGV4cGVjdGVkIHRvIGJlIG5vbiBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlcgogICAgICAqIGlzIGV4cGVjdGVkIHRvIGJlIG51bGwgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGRhdGFzb3VyY2Ugb2JqZWN0IGlzIGEKICAgICAgKiBjb25uZWN0aW9uIHBvb2wgZGF0YXNvdXJjZSBvciBhbiB4YSBkYXRhc291cmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvb2xlZENvbm4JPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIAotICAgICAqCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIHBvb2xlZAotICAgICAqCQkJCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OyBudWxsIG90aGVyd2lzZQotICAgICAqIEBwYXJhbQlzcWxDb25uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSBwaHlzaWNhbAotICAgICAqCQkJY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgbm9uIHBvb2xlZCA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsKLSAgICAgKgkJCW51bGwgb3RoZXJ3aXNlCi0gICAgICogQHBhcmFtCXBhc3N3ZENyZWQJb2JqZWN0IGNvbmF0aW5pbmcgdGhlCi0gICAgICoJCQkJdXNlciBhbmQgcGFzc3dvcmQgZm9yIGFsbG9jYXRpbmcgdGhlIGNvbm5lY3Rpb24KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdAotICAgICAqCQkJCQl0aGF0IGNyZWF0ZWQgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0Ci0gICAgICoJCQkJCWlzIG5vdCB0aGUgc2FtZSBhcyByZXR1cm5lZCBieSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICoJCQkJCW9iamVjdCBwYXNzZWQKKyAgICAgKiBAcGFyYW0gICAgcG9vbGVkQ29ubiAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBwb29sZWQKKyAgICAgKiAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsgbnVsbCBvdGhlcndpc2UKKyAgICAgKiBAcGFyYW0gICAgc3FsQ29ubiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIG5vbiBwb29sZWQgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47CisgICAgICogICAgICAgICAgICBudWxsIG90aGVyd2lzZQorICAgICAqIEBwYXJhbSAgICBwYXNzd2RDcmVkICAgIG9iamVjdCBjb25hdGluaW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgIHVzZXIgYW5kIHBhc3N3b3JkIGZvciBhbGxvY2F0aW5nIHRoZSBjb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdGhhdCBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICBpcyBub3QgdGhlIHNhbWUgYXMgcmV0dXJuZWQgYnkgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICBvYmplY3QgcGFzc2VkCiAgICAgICovCi0gICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubiwgamF2YS5zcWwuQ29ubmVjdGlvbiBzcWxDb25uLCAKKyAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24oUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uLCBqYXZhLnNxbC5Db25uZWN0aW9uIHNxbENvbm4sCiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYXNzd2RDcmVkLCBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihwb29sZWRDb25uID09IG51bGwgJiYgc3FsQ29ubiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNvbm5lY3Rpb24gb2JqZWN0IGNhbm5vdCBiZSBudWxsIik7CiAgICAgICAgIH0KIAotCWlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgewotCSAgICBhY3R1YWxDb25uZWN0aW9uID0gc3FsQ29ubjsKLQl9CisgICAgaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7CisgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBzcWxDb25uOworICAgIH0KIAogICAgICAgICBwYyA9IHBvb2xlZENvbm47CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbmV3IEhhc2h0YWJsZSgpOwogICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gcGFzc3dkQ3JlZDsKICAgICAgICAgdGhpcy5tY2YgPSBtY2Y7Ci0gICAgICAgIGlmKHBhc3N3ZENyZWRlbnRpYWwgIT0gbnVsbCAmJiAgCisgICAgICAgIGlmKHBhc3N3ZENyZWRlbnRpYWwgIT0gbnVsbCAmJgogICAgICAgICAgICAgdGhpcy5tY2YuZXF1YWxzKHBhc3N3ZENyZWRlbnRpYWwuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgdGhhdCBoYXMgY3JlYXRlZCB0aGlzICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB0aGF0IGhhcyBjcmVhdGVkIHRoaXMgIiArCiAgICAgICAgICAgICAgICAgIk1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHJldHVybmVkIGJ5IiArCiAgICAgICAgICAgICAgICAgICAgICIgdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiIpOwogICAgICAgICB9CiAgICAgICAgIGxvZ1dyaXRlciA9IG1jZi5nZXRMb2dXcml0ZXIoKTsKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0JY2UgPSBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0NMT1NFRCk7CisgICAgY2UgPSBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0NMT1NFRCk7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogQWRkcyBhIGNvbm5lY3Rpb24gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWxpc3RlbmVyCTxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBsaXN0ZW5lciAgICA8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKiBAc2VlIDxjb2RlPnJlbW92ZUNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGFkZENvbm5lY3Rpb25FdmVudExpc3RlbmVyKENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyOworICAgIHRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBVc2VkIGJ5IHRoZSBjb250YWluZXIgdG8gY2hhbmdlIHRoZSBhc3NvY2lhdGlvbiBvZiBhbiBhcHBsaWNhdGlvbi1sZXZlbCAKKyAgICAgKiBVc2VkIGJ5IHRoZSBjb250YWluZXIgdG8gY2hhbmdlIHRoZSBhc3NvY2lhdGlvbiBvZiBhbiBhcHBsaWNhdGlvbi1sZXZlbAogICAgICAqIGNvbm5lY3Rpb24gaGFuZGxlIHdpdGggYSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29ubmVjdGlvbgk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKLSAgICAgKgkJCQl0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZQotICAgICAqCQkJCQl2YWxpZCBvciB0aGUgY29ubmVjdGlvbiBoYW5kbGUgcGFzc2VkIGlzIG51bGwKKyAgICAgKiBAcGFyYW0gICAgY29ubmVjdGlvbiAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgKiAgICAgICAgICAgICAgICB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZQorICAgICAqICAgICAgICAgICAgICAgICAgICB2YWxpZCBvciB0aGUgY29ubmVjdGlvbiBoYW5kbGUgcGFzc2VkIGlzIG51bGwKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhc3NvY2lhdGVDb25uZWN0aW9uKE9iamVjdCBjb25uZWN0aW9uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTUyLDExICsxNTIsMTEgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ29ubmVjdGlvbiBoYW5kbGUgY2Fubm90IGJlIG51bGwiKTsKICAgICAgICAgfQogICAgICAgICBDb25uZWN0aW9uSG9sZGVyIGNoID0gKENvbm5lY3Rpb25Ib2xkZXIpIGNvbm5lY3Rpb247Ci0gICAgICAgIAorCiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24pY2guZ2V0TWFuYWdlZENvbm5lY3Rpb24oKTsKLQltYy5hY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLQlpc0NsZWFuID0gZmFsc2U7Ci0gICAgICAgIAorICAgIG1jLmFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOworICAgIGlzQ2xlYW4gPSBmYWxzZTsKKwogICAgICAgICBjaC5hc3NvY2lhdGVDb25uZWN0aW9uKGFjdHVhbENvbm5lY3Rpb24sIHRoaXMpOwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGV4cGVjdGF0aW9uIGZyb20gdGhlIGFib3ZlIG1ldGhvZCBpcyB0aGF0IHRoZSBjb25uZWN0aW9uIGhvbGRlcgpAQCAtMTY1LDM0ICsxNjUsMzQgQEAKICAgICAgICAgICogdG8gdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlIHdpdGggdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4KICAgICAgICAgICogQW55IHByZXZpb3VzIHN0YXRlbWVudHMgYW5kIHJlc3VsdCBzZXRzIGFsc28gbmVlZCB0byBiZSByZW1vdmVkLgogICAgICAgICAgKi8KLSAgICAgICAgIAorCiAgICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUuc2V0QWN0aXZlKGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBjaC5zZXRBY3RpdmUodHJ1ZSk7Ci0gICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsgCisgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBBcHBsaWNhdGlvbiBzZXJ2ZXIgY2FsbHMgdGhpcyBtZXRob2QgdG8gZm9yY2UgYW55IGNsZWFudXAgb24gdGhlIAorICAgICAqIEFwcGxpY2F0aW9uIHNlcnZlciBjYWxscyB0aGlzIG1ldGhvZCB0byBmb3JjZSBhbnkgY2xlYW51cCBvbiB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuIFRoaXMgbWV0aG9kIGNhbGxzIHRoZSBpbnZhbGlkYXRlCiAgICAgICogbWV0aG9kIG9uIGFsbCBDb25uZWN0aW9uSGFuZGxlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCi0gICAgICogCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlIHZhbGlkCisgICAgICoKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjbGVhbnVwKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gY2xlYW51cCIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICAvKioKICAgICAgICAgICogbWF5IG5lZWQgdG8gc2V0IHRoZSBhdXRvY29tbWl0IHRvIHRydWUgZm9yIHRoZSBub24tcG9vbGVkIGNhc2UuCiAgICAgICAgICAqLwogICAgICAgICAvL0dKQ0lOVAotCS8vaWYgKGFjdHVhbENvbm5lY3Rpb24gIT0gbnVsbCkgewotCWlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgeworICAgIC8vaWYgKGFjdHVhbENvbm5lY3Rpb24gIT0gbnVsbCkgeworICAgIGlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCA9IGFjdHVhbENvbm5lY3Rpb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewpAQCAtMjAxLDE3ICsyMDEsMTcgQEAKICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlzQ2xlYW4gPSB0cnVlOwotICAgICAgICAKKwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGFsbCB0aGUgY29ubmVjdGlvbiBoYW5kbGVzIGZyb20gdGhlIHRhYmxlCiAgICAgICogb2YgY29ubmVjdGlvbiBoYW5kbGVzIGFuZCBpbnZhbGlkYXRlcyBhbGwgb2YgdGhlbSBzbyB0aGF0IGFueQogICAgICAqIG9wZXJhdGlvbiBvbiB0aG9zZSBjb25uZWN0aW9uIGhhbmRsZXMgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYSBwcm9ibGVtIGluIHJldHJpZXZpbmcKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXRoZSBjb25uZWN0aW9uIGhhbmRsZXMKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBpbiByZXRyaWV2aW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29ubmVjdGlvbiBoYW5kbGVzCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGludmFsaWRhdGVBbGxDb25uZWN0aW9uSGFuZGxlcygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIFNldCBoYW5kbGVzID0gY29ubmVjdGlvbkhhbmRsZXMua2V5U2V0KCk7CkBAIC0yMjYsMjIgKzIyNiwyMiBAQAogICAgICAgICB9CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzLmNsZWFyKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRGVzdHJveXMgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgcmVzb3VyY2UgbWFuYWdlci4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNsb3NpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2xvc2luZyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZGVzdHJveSIpOwogICAgICAgICB9Ci0JLy9HSkNJTlQKLQlpZihpc0Rlc3Ryb3llZCA9PSB0cnVlKSB7Ci0JICAgIHJldHVybjsJCi0JfQorICAgIC8vR0pDSU5UCisgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSkgeworICAgICAgICByZXR1cm47CisgICAgfQogCi0JYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CisgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTiB8fCBjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04pIHsKICAgICAgICAgICAgICAgICBwYy5jbG9zZSgpOwpAQCAtMjU1LDI4ICsyNTUsMjggQEAKICAgICAgICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBudWxsOwogICAgICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBudWxsOwotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgZm9sbG93aW5nIGV4Y2VwdGlvbiBoYXMgb2NjdXJlZCBkdXJpbmcgZGVzdHJveTogIiAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGZvbGxvd2luZyBleGNlcHRpb24gaGFzIG9jY3VyZWQgZHVyaW5nIGRlc3Ryb3k6ICIKICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7CiAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBudWxsOwogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBjb25uZWN0aW9uIGhhbmRsZSBmb3IgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgCisgICAgICogQ3JlYXRlcyBhIG5ldyBjb25uZWN0aW9uIGhhbmRsZSBmb3IgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwKICAgICAgKiBjb25uZWN0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgbmVlZGVkIGZvciBhdXRoZW50aWNhdGlvbgotICAgICAqIEBwYXJhbQljeFJlcUluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBjYXJyaWVzIHRoZSB1c2VyIAotICAgICAqICAgICAgIAkgICAgICAgICAJYW5kIHBhc3N3b3JkIHJlcXVpcmVkIGZvciBnZXR0aW5nIHRoaXMgY29ubmVjdGlvbi4KLSAgICAgKiBAcmV0dXJuCUNvbm5lY3Rpb24JdGhlIGNvbm5lY3Rpb24gaGFuZGxlIDxjb2RlPk9iamVjdDwvY29kZT4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJcGh5c2ljYWwgY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sZWQgY29ubmVjdGlvbiAKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBhc3N3b3JkIGNyZWRlbnRpYWxzIG9yIHJlYXV0aGVudGljYXRpb24gaXMgcmVxdWVzdGVkCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIG5lZWRlZCBmb3IgYXV0aGVudGljYXRpb24KKyAgICAgKiBAcGFyYW0gICAgY3hSZXFJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gY2FycmllcyB0aGUgdXNlcgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHBhc3N3b3JkIHJlcXVpcmVkIGZvciBnZXR0aW5nIHRoaXMgY29ubmVjdGlvbi4KKyAgICAgKiBAcmV0dXJuICAgIENvbm5lY3Rpb24gICAgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIDxjb2RlPk9iamVjdDwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGZyb20gdGhlIHBvb2xlZCBjb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCBjcmVkZW50aWFscyBvciByZWF1dGhlbnRpY2F0aW9uIGlzIHJlcXVlc3RlZAogICAgICAqLwotICAgIHB1YmxpYyBPYmplY3QgZ2V0Q29ubmVjdGlvbihTdWJqZWN0IHN1YiwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxSW5mbykgCisgICAgcHVibGljIE9iamVjdCBnZXRDb25uZWN0aW9uKFN1YmplY3Qgc3ViLCBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXFJbmZvKQogICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldENvbm5lY3Rpb24iKTsKQEAgLTI4NCwxNCArMjg0LDE0IEBACiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8gPSAoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbykgY3hSZXFJbmZvOwogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGFzc3dkQ3JlZCA9IFNlY3VyaXR5VXRpbHMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKHRoaXMubWNmLCBzdWIsIGN4UmVxdWVzdEluZm8pOwotICAgICAgICAgICAgCisKICAgICAgICAgaWYoU2VjdXJpdHlVdGlscy5pc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKHRoaXMucGFzc3dkQ3JlZGVudGlhbCwgcGFzc3dkQ3JlZCkgPT0gZmFsc2UpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLnNwaS5TZWN1cml0eUV4Y2VwdGlvbigiUmUtYXV0aGVudGljYXRpb24gbm90IHN1cHBvcnRlZCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vR0pDSU5UCiAgICAgICAgIGdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAKKwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGZvbGxvd2luZyBjb2RlIGluIHRoZSBpZiBzdGF0ZW1lbnQgZmlyc3QgY2hlY2tzIGlmIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24KICAgICAgICAgICogaXMgY2xlYW4gb3Igbm90LiBJZiBpdCBpcywgaXQgcmVzZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgdG8gd2hhdApAQCAtMzAxLDI4ICszMDEsMjggQEAKICAgICAgICAgaWYoaXNDbGVhbikgewogICAgICAgICAgICAgKChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KW1jZikucmVzZXRJc29sYXRpb24odGhpcywgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAKKworCiAgICAgICAgIENvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCA9IG5ldyBDb25uZWN0aW9uSG9sZGVyKGFjdHVhbENvbm5lY3Rpb24sIHRoaXMpOwotCWlzQ2xlYW49ZmFsc2U7Ci0gICAgICAgIAorICAgIGlzQ2xlYW49ZmFsc2U7CisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlLnNldEFjdGl2ZShmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgY29ubkhvbGRlck9iamVjdC5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjb25uSG9sZGVyT2JqZWN0OwotIAorCiAgICAgICAgIHJldHVybiBjb25uSG9sZGVyT2JqZWN0OwotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgYW4gPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW5zdGFuY2UuIFRoZSA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnRlcmZhY2UKLSAgICAgKiBpcyB1c2VkIGJ5IHRoZSBjb250YWluZXIgdG8gbWFuYWdlIGxvY2FsIHRyYW5zYWN0aW9ucyBmb3IgYSBSTSBpbnN0YW5jZS4gCisgICAgICogaXMgdXNlZCBieSB0aGUgY29udGFpbmVyIHRvIG1hbmFnZSBsb2NhbCB0cmFuc2FjdGlvbnMgZm9yIGEgUk0gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTG9jYWxUcmFuc2FjdGlvbiBnZXRMb2NhbFRyYW5zYWN0aW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTMzMSwxMyArMzMxLDEzIEBACiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICByZXR1cm4gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5Mb2NhbFRyYW5zYWN0aW9uKHRoaXMpOwogICAgIH0KLSAgICAgCisKICAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4gCisgICAgICogR2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqIEBzZWUgPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBQcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtMzQ1LDQ2ICszNDUsNDYgQEAKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0TG9nV3JpdGVyIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBsb2dXcml0ZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogR2V0cyB0aGUgbWV0YWRhdGEgaW5mb3JtYXRpb24gZm9yIHRoaXMgY29ubmVjdGlvbidzIHVuZGVybHlpbmcgRUlTIAotICAgICAqIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UuIAorICAgICAqIEdldHMgdGhlIG1ldGFkYXRhIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbm5lY3Rpb24ncyB1bmRlcmx5aW5nIEVJUworICAgICAqIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSBnZXRNZXRhRGF0YSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldE1ldGFEYXRhIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEodGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyBhbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4gCisgICAgICogUmV0dXJucyBhbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgotICAgICAqCQkJCQl0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCU5vdFN1cHBvcnRlZEV4Y2VwdGlvbglpZiB1bmRlcmx5aW5nIGRhdGFzb3VyY2UgaXMgbm90IGFuCi0gICAgICoJCQkJCTxjb2RlPlhBRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiAgICBpZiB1bmRlcmx5aW5nIGRhdGFzb3VyY2UgaXMgbm90IGFuCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPlhBRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgWEFSZXNvdXJjZSBnZXRYQVJlc291cmNlKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0WEFSZXNvdXJjZSIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTikgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZih4YXIgPT0gbnVsbCkgewotCQkgICAgLyoqCisgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgICogVXNpbmcgdGhlIHdyYXBwZXIgWEFSZXNvdXJjZS4KICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgIHhhciA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuWEFSZXNvdXJjZUltcGwoKChYQUNvbm5lY3Rpb24pcGMpLmdldFhBUmVzb3VyY2UoKSwgdGhpcyk7CkBAIC0zOTcsMTYgKzM5NywxNiBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiQ2Fubm90IGdldCBhbiBYQVJlc291cmNlIGZyb20gYSBub24gWEEgY29ubmVjdGlvbiIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVtb3ZlcyBhbiBhbHJlYWR5IHJlZ2lzdGVyZWQgY29ubmVjdGlvbiBldmVudCBsaXN0ZW5lciBmcm9tIHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlsaXN0ZW5lcgk8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4gdG8gYmUgcmVtb3ZlZAorICAgICAqIEBwYXJhbSAgICBsaXN0ZW5lciAgICA8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4gdG8gYmUgcmVtb3ZlZAogICAgICAqIEBzZWUgPGNvZGU+YWRkQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIoQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQlsaXN0ZW5lciA9IG51bGw7CisgICAgbGlzdGVuZXIgPSBudWxsOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDE1LDcgKzQxNSw3IEBACiAgICAgICogTG9jYWxUcmFuc2FjdGlvbiBvYmplY3Qgd2hlbiBpdHMgYmVnaW4oKSBtZXRob2QgaXMgY2FsbGVkLgogICAgICAqLwogICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKCkgewotCXRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IHRydWU7CQorICAgIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IHRydWU7CiAgICAgfQogCiAgICAgLyoqCkBAIC00MjQsMTYgKzQyNCwxNiBAQAogICAgICAqIExvY2FsVHJhbnNhY3Rpb24gb2JqZWN0IHdoZW4gaXRzIGVuZCgpIG1ldGhvZCBpcyBjYWxsZWQuCiAgICAgICovCiAgICAgdm9pZCB0cmFuc2FjdGlvbkNvbXBsZXRlZCgpIHsKLQl0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKLQlpZihjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKKyAgICB0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCA9IGFjdHVhbENvbm5lY3Rpb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgIC8vY2hlY2sgd2hhdCB0byBkbyBpbiB0aGlzIGNhc2UhIQotCQlfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5ub3Rnb3RfdHhfaXNvbHZsIik7CisgICAgICAgICAgICAvL2NoZWNrIHdoYXQgdG8gZG8gaW4gdGhpcyBjYXNlISEKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMubm90Z290X3R4X2lzb2x2bCIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0JICAgIHRyeSB7CisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CkBAIC00NDEsNyArNDQxLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0JICAgICAgICAKKwogICAgICAgICBpc0NsZWFuID0gdHJ1ZTsKIAogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKQEAgLTQ1MywyOCArNDUzLDI4IEBACiAgICAgICogb3Igbm90LgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkgewotCXJldHVybiB0cmFuc2FjdGlvbkluUHJvZ3Jlc3M7CisgICAgcmV0dXJuIHRyYW5zYWN0aW9uSW5Qcm9ncmVzczsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlvdXQJPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEBwYXJhbSAgICBvdXQgICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqIEBzZWUgPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihQcmludFdyaXRlciBvdXQpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICBsb2dXcml0ZXIgPSBvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiB0aGUgY29ubmVjdGlvbiBiZWluZyBoZWxkIAorICAgICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgdGhlIHR5cGUgb2YgdGhlIGNvbm5lY3Rpb24gYmVpbmcgaGVsZAogICAgICAqIGluIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgotICAgICAqIAotICAgICAqIEBwYXJhbQlwb29sZWRDb25uCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHJldHVybgljb25uZWN0aW9uIHR5cGUKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBwb29sZWRDb25uICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBjb25uZWN0aW9uIHR5cGUKICAgICAgKi8KICAgICBwcml2YXRlIGludCBnZXRDb25uZWN0aW9uVHlwZShQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4pIHsKICAgICAgICAgaWYocG9vbGVkQ29ubiA9PSBudWxsKSB7CkBAIC00ODUsMjIgKzQ4NSwyMiBAQAogICAgICAgICAgICAgcmV0dXJuIElTUE9PTEVEQ09OTkVDVElPTjsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCAKKyAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQKICAgICAgKiBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgY3JlYXRlZCB0aGlzCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IGNyZWF0ZWQgdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKICAgICAgKi8KICAgICBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkgewogICAgICAgICByZXR1cm4gKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpbWNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBzcWwgY29ubmVjdGlvbiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uIAorICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBzcWwgY29ubmVjdGlvbiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRoZSBwaHlzaWNhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgdGhlIHBoeXNpY2FsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgLy9HSkNJTlQKICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGdldEFjdHVhbENvbm5lY3Rpb24oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtNTA5LDggKzUwOSw4IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmKGFjdHVhbENvbm5lY3Rpb24gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gcGMuZ2V0Q29ubmVjdGlvbigpOwotCQl9Ci0JCQorICAgICAgICB9CisKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKICAgICAgICAgICAgICAgICBzcWxlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CkBAIC01MTgsODEgKzUxOCw4MSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBhY3R1YWxDb25uZWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHJldHVybiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQogICAgICAqLwogICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBnZXRQYXNzd29yZENyZWRlbnRpYWwoKSB7CiAgICAgICAgIHJldHVybiBwYXNzd2RDcmVkZW50aWFsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QgYW5kIHRocm93cyBhbgogICAgICAqIGV4Y2VwdGlvbiBpZiBpdCBpcyBub3QgdmFsaWQuIEEgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGlzIG5vdCB2YWxpZCBpZgogICAgICAqIGRlc3Ryb3kgaGFzIG5vdCBiZWVuIGNhbGxlZCBhbmQgbm8gcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBoYXMKICAgICAgKiBvY2N1cnJlZCByZW5kZXJpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gdW51c2FibGUuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIDxjb2RlPmRlc3Ryb3k8L2NvZGU+IGhhcyBiZWVuIGNhbGxlZCBvbiB0aGlzIAotICAgICAqCQkJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugb3IgaWYgYSAKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJyZWQgcmVuZGVyaW5nIGl0IHVudXNhYmxlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiA8Y29kZT5kZXN0cm95PC9jb2RlPiBoYXMgYmVlbiBjYWxsZWQgb24gdGhpcworICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugb3IgaWYgYQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBvY2N1cnJlZCByZW5kZXJpbmcgaXQgdW51c2FibGUKICAgICAgKi8KICAgICAvL0dKQ0lOVAogICAgIHZvaWQgY2hlY2tJZlZhbGlkKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSB8fCBpc1VzYWJsZSA9PSBmYWxzZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGlzIE1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyB0aGUgcGh5c2ljYWwgIiArIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGlzIE1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyB0aGUgcGh5c2ljYWwgIiArCiAgICAgICAgICAgICAgICAgImNvbm5lY3Rpb24gaXMgbm90IHVzYWJsZS4iKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gd2hlbiBpdHMgY2xvc2UgbWV0aG9kIGlzCiAgICAgICogY2FsbGVkLiBUaGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSAgaW52YWxpZGF0ZXMgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCiAgICAgICogYW5kIHNlbmRzIGEgQ09OTkVDVElPTl9DTE9TRUQgZXZlbnQgdG8gYWxsIHRoZSByZWdpc3RlcmVkIGV2ZW50IGxpc3RlbmVycy4KICAgICAgKgotICAgICAqIEBwYXJhbQllCUV4Y2VwdGlvbiB0aGF0IG1heSBoYXZlIG9jY3VyZWQgd2hpbGUgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKLSAgICAgKiBAcGFyYW0JY29ubkhvbGRlck9iamVjdAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGhhcyBiZWVuIGNsb3NlZAotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCWluIGNhc2UgY2xvc2luZyB0aGUgc3FsIGNvbm5lY3Rpb24gZ290IG91dCBvZgotICAgICAqICAgICAgICAgCSAgICAgICAgICAgIAk8Y29kZT5nZXRDb25uZWN0aW9uPC9jb2RlPiBvbiB0aGUgdW5kZXJseWluZyAKLSAgICAgKgkJCQk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiB0aHJvd3MgYW4gZXhjZXB0aW9uCisgICAgICogQHBhcmFtICAgIGUgICAgRXhjZXB0aW9uIHRoYXQgbWF5IGhhdmUgb2NjdXJlZCB3aGlsZSBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGhhbmRsZQorICAgICAqIEBwYXJhbSAgICBjb25uSG9sZGVyT2JqZWN0ICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgaGFzIGJlZW4gY2xvc2VkCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgaW4gY2FzZSBjbG9zaW5nIHRoZSBzcWwgY29ubmVjdGlvbiBnb3Qgb3V0IG9mCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPmdldENvbm5lY3Rpb248L2NvZGU+IG9uIHRoZSB1bmRlcmx5aW5nCisgICAgICogICAgICAgICAgICAgICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gdGhyb3dzIGFuIGV4Y2VwdGlvbgogICAgICAqLwogICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChFeGNlcHRpb24gZSwgQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgY29ubkhvbGRlck9iamVjdC5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICBjZS5zZXRDb25uZWN0aW9uSGFuZGxlKGNvbm5Ib2xkZXJPYmplY3QpOwogICAgICAgICBsaXN0ZW5lci5jb25uZWN0aW9uQ2xvc2VkKGNlKTsKLQkKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gd2hlbiBpdCBkZXRlY3RzIGEgY29ubmVjaW9uCiAgICAgICogcmVsYXRlZCBlcnJvci4KICAgICAgKgotICAgICAqIEBwYXJhbQllCUV4Y2VwdGlvbiB0aGF0IGhhcyBvY2N1cnJlZCBkdXJpbmcgYW4gb3BlcmF0aW9uIG9uIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCi0gICAgICogQHBhcmFtCWNvbm5Ib2xkZXJPYmplY3QJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBkZXRlY3RlZCB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJY29ubmVjdGlvbiBlcnJvcgorICAgICAqIEBwYXJhbSAgICBlICAgIEV4Y2VwdGlvbiB0aGF0IGhhcyBvY2N1cnJlZCBkdXJpbmcgYW4gb3BlcmF0aW9uIG9uIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIGNvbm5Ib2xkZXJPYmplY3QgICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBkZXRlY3RlZCB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBlcnJvcgogICAgICAqLwotICAgIHZvaWQgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoRXhjZXB0aW9uIGUsIAorICAgIHZvaWQgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoRXhjZXB0aW9uIGUsCiAgICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0KSB7Ci0JICAgIAorCiAgICAgICAgICBDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBjZWwgPSB0aGlzLmxpc3RlbmVyOwogICAgICAgICAgQ29ubmVjdGlvbkV2ZW50IGNlID0gbnVsbDsKICAgICAgICAgIGNlID0gZSA9PSBudWxsID8gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9FUlJPUl9PQ0NVUlJFRCkKICAgICAgICAgICAgICAgICAgICAgOiBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0VSUk9SX09DQ1VSUkVELCBlKTsKICAgICAgICAgIGlmIChjb25uSG9sZGVyT2JqZWN0ICE9IG51bGwpIHsKICAgICAgICAgICAgICBjZS5zZXRDb25uZWN0aW9uSGFuZGxlKGNvbm5Ib2xkZXJPYmplY3QpOwotICAgICAgICAgfSAgICAKKyAgICAgICAgIH0KIAogICAgICAgICAgY2VsLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGNlKTsKICAgICAgICAgIGlzVXNhYmxlID0gZmFsc2U7CiAgICAgfQotICAgIAotICAgIAotICAgIAorCisKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdoZW4gaXRzIHN0YXJ0IG1ldGhvZAogICAgICAqIGhhcyBiZWVuIGludm9rZWQuCkBAIC02MDYsNyArNjA2LDcgQEAKICAgICAgICAgICAgIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGUsIG51bGwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hlbiBpdHMgZW5kIG1ldGhvZAogICAgICAqIGhhcyBiZWVuIGludm9rZWQuCkBAIC02MjAsNyArNjIwLDcgQEAKICAgICAgICAgICAgIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGUsIG51bGwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGEgQ29ubmVjdGlvbiBIYW5kbGUgdG8gY2hlY2sgaWYgaXQgaXMKICAgICAgKiB0aGUgYWN0aXZlIENvbm5lY3Rpb24gSGFuZGxlLiBJZiBpdCBpcyBub3QgdGhlIGFjdGl2ZSBDb25uZWN0aW9uCkBAIC02MjksMjQgKzYyOSwyNCBAQAogICAgICAqIENvbm5lY3Rpb24gSGFuZGxlIG9iamVjdCB0byB0aGlzIG9iamVjdCBpZiB0aGUgYWN0aXZlIENvbm5lY3Rpb24KICAgICAgKiBIYW5kbGUgaXMgbnVsbC4KICAgICAgKgotICAgICAqIEBwYXJhbQljaAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IHJlcXVlc3RzIHRoaXMKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSB3aGV0aGVyCi0gICAgICoJCQlpdCBjYW4gYmUgYWN0aXZlIG9yIG5vdAotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCWluIGNhc2UgdGhlIHBoeXNpY2FsIGlzIG5vdCB2YWxpZCBvcgotICAgICAqCQkJCXRoZXJlIGlzIGFscmVhZHkgYW4gYWN0aXZlIGNvbm5lY3Rpb24gaGFuZGxlCisgICAgICogQHBhcmFtICAgIGNoICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgcmVxdWVzdHMgdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHdoZXRoZXIKKyAgICAgKiAgICAgICAgICAgIGl0IGNhbiBiZSBhY3RpdmUgb3Igbm90CisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgaW4gY2FzZSB0aGUgcGh5c2ljYWwgaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgdGhlcmUgaXMgYWxyZWFkeSBhbiBhY3RpdmUgY29ubmVjdGlvbiBoYW5kbGUKICAgICAgKi8KLSAgICAgCisKICAgICB2b2lkIGNoZWNrSWZBY3RpdmUoQ29ubmVjdGlvbkhvbGRlciBjaCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUgfHwgaXNVc2FibGUgPT0gZmFsc2UpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIlRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB1c2FibGUiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlID09IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsKICAgICAgICAgICAgIGNoLnNldEFjdGl2ZSh0cnVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IGNoKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBoYW5kbGUgY2Fubm90IGJlIHVzZWQgYXMgYW5vdGhlciBjb25uZWN0aW9uIGlzIGN1cnJlbnRseSBhY3RpdmUiKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQppbmRleCAyMGYwM2FhLi5mNjUwZDQxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogLyoqCiAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzAzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhIHsKIApAQCAtNDEsODEgKzQxLDgxIEBACiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4JaWYgZ2V0dGluZyB0aGUgRGF0YWJhc2VNZXRhRGF0YSBvYmplY3QgZmFpbHMKKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gICAgaWYgZ2V0dGluZyB0aGUgRGF0YWJhc2VNZXRhRGF0YSBvYmplY3QgZmFpbHMKICAgICAgKi8KICAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YShNYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICAgICAgICAgIGRtZCA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKS5nZXRNZXRhRGF0YSgpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBwcm9kdWN0IG5hbWUgb2YgdGhlIHVuZGVybHlpbmcgRUlTIGluc3RhbmNlIGNvbm5lY3RlZAogICAgICAqIHRocm91Z2ggdGhlIE1hbmFnZWRDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglQcm9kdWN0IG5hbWUgb2YgdGhlIEVJUyBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBQcm9kdWN0IG5hbWUgb2YgdGhlIEVJUyBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFSVNQcm9kdWN0TmFtZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldERhdGFiYXNlUHJvZHVjdE5hbWUoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZG5hbWUiLCBzcWxlKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2RuYW1lIiwgc3FsZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBwcm9kdWN0IHZlcnNpb24gb2YgdGhlIHVuZGVybHlpbmcgRUlTIGluc3RhbmNlIGNvbm5lY3RlZAogICAgICAqIHRocm91Z2ggdGhlIE1hbmFnZWRDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglQcm9kdWN0IHZlcnNpb24gb2YgdGhlIEVJUyBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBQcm9kdWN0IHZlcnNpb24gb2YgdGhlIEVJUyBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFSVNQcm9kdWN0VmVyc2lvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldERhdGFiYXNlUHJvZHVjdFZlcnNpb24oKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZHZlcnMiLCBzcWxlKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2R2ZXJzIiwgc3FsZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCksIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgbWF4aW11bSBsaW1pdCBvbiBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKICAgICAgKiB0aGF0IGFuIEVJUyBpbnN0YW5jZSBjYW4gc3VwcG9ydCBhY3Jvc3MgY2xpZW50IHByb2Nlc3Nlcy4KICAgICAgKgotICAgICAqIEByZXR1cm4JTWF4aW11bSBsaW1pdCBmb3IgbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIE1heGltdW0gbGltaXQgZm9yIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucworICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRNYXhDb25uZWN0aW9ucygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldE1heENvbm5lY3Rpb25zKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX21heGNvbm4iKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX21heGNvbm4iKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIG5hbWUgb2YgdGhlIHVzZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4gVGhlIG5hbWUKICAgICAgKiBjb3JyZXNwb25kcyB0byB0aGUgcmVzb3VyY2UgcHJpbmNpcGFsIHVuZGVyIHdob3NlIHdob3NlIHNlY3VyaXR5IGNvbnRleHQsIGEgY29ubmVjdGlvbgogICAgICAqIHRvIHRoZSBFSVMgaW5zdGFuY2UgaGFzIGJlZW4gZXN0YWJsaXNoZWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCW5hbWUgb2YgdGhlIHVzZXIKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbmFtZSBvZiB0aGUgdXNlcgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyTmFtZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGpha2FydGEucmVzb3VyY2Uuc3BpLnNlY3VyaXR5LlBhc3N3b3JkQ3JlZGVudGlhbCBwYyA9IG1jLmdldFBhc3N3b3JkQ3JlZGVudGlhbCgpOwogICAgICAgICBpZihwYyAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gcGMuZ2V0VXNlck5hbWUoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbWMuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkuZ2V0VXNlcigpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQppbmRleCBkYWQxZDc3Li40ODJmMzMyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCkBAIC0yNCwxNDggKzI0LDE0OCBAQAogLyoqCiAgKiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiB3cmFwcGVyIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMjMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzIzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgWEFSZXNvdXJjZUltcGwgaW1wbGVtZW50cyBYQVJlc291cmNlIHsKIAogICAgIFhBUmVzb3VyY2UgeGFyOwogICAgIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIFhBUmVzb3VyY2VJbXBsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGFyCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+Ci0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB4YXIgICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2VJbXBsKFhBUmVzb3VyY2UgeGFyLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLnhhciA9IHhhcjsKICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCB0aGUgZ2xvYmFsIHRyYW5zYWN0aW9uIHNwZWNpZmllZCBieSB4aWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKLSAgICAgKiBAcGFyYW0Jb25lUGhhc2UJSWYgdHJ1ZSwgdGhlIHJlc291cmNlIG1hbmFnZXIgc2hvdWxkIHVzZSBhIG9uZS1waGFzZSBjb21taXQgCi0gICAgICogICAgICAgCSAgICAgICAgCXByb3RvY29sIHRvIGNvbW1pdCB0aGUgd29yayBkb25lIG9uIGJlaGFsZiBvZiB4aWQuCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIG9uZVBoYXNlICAgIElmIHRydWUsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHNob3VsZCB1c2UgYSBvbmUtcGhhc2UgY29tbWl0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sIHRvIGNvbW1pdCB0aGUgd29yayBkb25lIG9uIGJlaGFsZiBvZiB4aWQuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KFhpZCB4aWQsIGJvb2xlYW4gb25lUGhhc2UpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vdGhlIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkIGNhbGwgaGFzIGNvbWUgaGVyZSBiZWNhc3VlCi0JLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKLQkvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAotCS8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcwotCS8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKLQkvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIC8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93CisgICAgLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKKyAgICAvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCisgICAgLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICAgICAgeGFyLmNvbW1pdCh4aWQsIG9uZVBoYXNlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbmRzIHRoZSB3b3JrIHBlcmZvcm1lZCBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2guCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBpcyB0aGUgc2FtZSBhcyB3aGF0IAotICAgICAqCQkJd2FzIHVzZWQgcHJldmlvdXNseSBpbiB0aGUgc3RhcnQgbWV0aG9kLgotICAgICAqIEBwYXJhbQlmbGFncwlPbmUgb2YgVE1TVUNDRVNTLCBUTUZBSUwsIG9yIFRNU1VTUEVORAorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQKKyAgICAgKiAgICAgICAgICAgIHdhcyB1c2VkIHByZXZpb3VzbHkgaW4gdGhlIHN0YXJ0IG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgZmxhZ3MgICAgT25lIG9mIFRNU1VDQ0VTUywgVE1GQUlMLCBvciBUTVNVU1BFTkQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICB4YXIuZW5kKHhpZCwgZmxhZ3MpOwogICAgICAgICAvL0dKQ0lOVAotCS8vbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICAvL21jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGVsbCB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgYSBoZXVyaXN0aWNhbGx5IGNvbXBsZXRlZCB0cmFuc2FjdGlvbiBicmFuY2guCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgeGFyLmZvcmdldCh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIE9idGFpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIHNldCBmb3IgdGhpcyAKKyAgICAgKiBPYnRhaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBzZXQgZm9yIHRoaXMKICAgICAgKiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcworICAgICAqIEByZXR1cm4gICAgdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcwogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0VHJhbnNhY3Rpb25UaW1lb3V0KCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5nZXRUcmFuc2FjdGlvblRpbWVvdXQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlIAotICAgICAqIHJlcHJlc2VudGVkIGJ5IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSByZXNvdWNlIG1hbmFnZXIgCisgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZQorICAgICAqIHJlcHJlc2VudGVkIGJ5IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSByZXNvdWNlIG1hbmFnZXIKICAgICAgKiBpbnN0YW5jZSByZXByZXNlbnRlZCBieSB0aGUgcGFyYW1ldGVyIHhhcmVzLgogICAgICAqCi0gICAgICogQHBhcmFtCXhhcmVzCUFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aG9zZSByZXNvdXJjZSBtYW5hZ2VyIAotICAgICAqIAkJCWluc3RhbmNlIGlzIHRvIGJlIGNvbXBhcmVkIHdpdGggdGhlIHJlc291cmNlCi0gICAgICogQHJldHVybgl0cnVlIGlmIGl0J3MgdGhlIHNhbWUgUk0gaW5zdGFuY2U7IG90aGVyd2lzZSBmYWxzZS4KKyAgICAgKiBAcGFyYW0gICAgeGFyZXMgICAgQW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdob3NlIHJlc291cmNlIG1hbmFnZXIKKyAgICAgKiAgICAgICAgICAgICBpbnN0YW5jZSBpcyB0byBiZSBjb21wYXJlZCB3aXRoIHRoZSByZXNvdXJjZQorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiBpdCdzIHRoZSBzYW1lIFJNIGluc3RhbmNlOyBvdGhlcndpc2UgZmFsc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNTYW1lUk0oWEFSZXNvdXJjZSB4YXJlcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5pc1NhbWVSTSh4YXJlcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQXNrIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIHByZXBhcmUgZm9yIGEgdHJhbnNhY3Rpb24gY29tbWl0IAorICAgICAqIEFzayB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBwcmVwYXJlIGZvciBhIHRyYW5zYWN0aW9uIGNvbW1pdAogICAgICAqIG9mIHRoZSB0cmFuc2FjdGlvbiBzcGVjaWZpZWQgaW4geGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCi0gICAgICogQHJldHVybglBIHZhbHVlIGluZGljYXRpbmcgdGhlIHJlc291cmNlIG1hbmFnZXIncyB2b3RlIG9uIHRoZSAKLSAgICAgKgkJb3V0Y29tZSBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSBwb3NzaWJsZSB2YWx1ZXMKLSAgICAgKgkJYXJlOiBYQV9SRE9OTFkgb3IgWEFfT0suIElmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHdhbnRzIAotICAgICAqCQl0byByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uLCBpdCBzaG91bGQgZG8gc28KLSAgICAgKgkJYnkgcmFpc2luZyBhbiBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4gaW4gdGhlIHByZXBhcmUgbWV0aG9kLgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEByZXR1cm4gICAgQSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSByZXNvdXJjZSBtYW5hZ2VyJ3Mgdm90ZSBvbiB0aGUKKyAgICAgKiAgICAgICAgb3V0Y29tZSBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSBwb3NzaWJsZSB2YWx1ZXMKKyAgICAgKiAgICAgICAgYXJlOiBYQV9SRE9OTFkgb3IgWEFfT0suIElmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHdhbnRzCisgICAgICogICAgICAgIHRvIHJvbGwgYmFjayB0aGUgdHJhbnNhY3Rpb24sIGl0IHNob3VsZCBkbyBzbworICAgICAqICAgICAgICBieSByYWlzaW5nIGFuIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPiBpbiB0aGUgcHJlcGFyZSBtZXRob2QuCiAgICAgICovCiAgICAgcHVibGljIGludCBwcmVwYXJlKFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIucHJlcGFyZSh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIE9idGFpbiBhIGxpc3Qgb2YgcHJlcGFyZWQgdHJhbnNhY3Rpb24gYnJhbmNoZXMgZnJvbSBhIHJlc291cmNlIG1hbmFnZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZmxhZwlPbmUgb2YgVE1TVEFSVFJTQ0FOLCBUTUVORFJTQ0FOLCBUTU5PRkxBR1MuIFRNTk9GTEFHUyAKLSAgICAgKgkJCW11c3QgYmUgdXNlZCB3aGVuIG5vIG90aGVyIGZsYWdzIGFyZSBzZXQgaW4gZmxhZ3MuCi0gICAgICogQHJldHVybglUaGUgcmVzb3VyY2UgbWFuYWdlciByZXR1cm5zIHplcm8gb3IgbW9yZSBYSURzIGZvciB0aGUgdHJhbnNhY3Rpb24gCi0gICAgICoJCWJyYW5jaGVzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBhIHByZXBhcmVkIG9yIGhldXJpc3RpY2FsbHkgCi0gICAgICoJCWNvbXBsZXRlZCBzdGF0ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgb3BlcmF0aW9uLCB0aGUgcmVzb3VyY2UKLSAgICAgKgkJbWFuYWdlciBzaG91bGQgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gICAgZmxhZyAgICBPbmUgb2YgVE1TVEFSVFJTQ0FOLCBUTUVORFJTQ0FOLCBUTU5PRkxBR1MuIFRNTk9GTEFHUworICAgICAqICAgICAgICAgICAgbXVzdCBiZSB1c2VkIHdoZW4gbm8gb3RoZXIgZmxhZ3MgYXJlIHNldCBpbiBmbGFncy4KKyAgICAgKiBAcmV0dXJuICAgIFRoZSByZXNvdXJjZSBtYW5hZ2VyIHJldHVybnMgemVybyBvciBtb3JlIFhJRHMgZm9yIHRoZSB0cmFuc2FjdGlvbgorICAgICAqICAgICAgICBicmFuY2hlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gYSBwcmVwYXJlZCBvciBoZXVyaXN0aWNhbGx5CisgICAgICogICAgICAgIGNvbXBsZXRlZCBzdGF0ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgb3BlcmF0aW9uLCB0aGUgcmVzb3VyY2UKKyAgICAgKiAgICAgICAgbWFuYWdlciBzaG91bGQgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgWGlkW10gcmVjb3ZlcihpbnQgZmxhZykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5yZWNvdmVyKGZsYWcpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEluZm9ybSB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byByb2xsIGJhY2sgd29yayBkb25lIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaAogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy90aGUgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQgY2FsbCBoYXMgY29tZSBoZXJlIGJlY2FzdWUKLQkvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdwotCS8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCi0JLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCi0JLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAotCS8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgorICAgIC8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93CisgICAgLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKKyAgICAvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCisgICAgLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCiAgICAgICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgICAgIHhhci5yb2xsYmFjayh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGZvciB0aGlzIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlY29uZHMJdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpcyBzZXQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZmFsc2UuCisgICAgICogQHBhcmFtICAgIHNlY29uZHMgICAgdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpcyBzZXQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZmFsc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnNldFRyYW5zYWN0aW9uVGltZW91dChzZWNvbmRzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTdGFydCB3b3JrIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaCBzcGVjaWZpZWQgaW4geGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzb3VyY2UKLSAgICAgKiBAcmV0dXJuCWZsYWdzCU9uZSBvZiBUTU5PRkxBR1MsIFRNSk9JTiwgb3IgVE1SRVNVTUUKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZQorICAgICAqIEByZXR1cm4gICAgZmxhZ3MgICAgT25lIG9mIFRNTk9GTEFHUywgVE1KT0lOLCBvciBUTVJFU1VNRQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy9HSkNJTlQKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKaW5kZXggOTY3ODY4Yi4uNjQxMDU1NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9IiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvc3BpIi8+Ci0gCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzcsNSArMzcsNSBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0Ii8+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKaW5kZXggY2UzMjFhZi4uOWU3ZjI1MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCkBAIC0yNiw4ICsyNiw4IEBACiAvKioKICAqIEV4ZWN1dGUgdGhlIG1ldGhvZHMgYmFzZWQgb24gdGhlIHBhcmFtZXRlcnMuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBNZXRob2RFeGVjdXRvciBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCkBAIC0zOSwxMzAgKzM5LDEzMCBAQAogICAgIC8qKgogICAgICAqIEV4Y2V1dGUgYSBzaW1wbGUgc2V0IE1ldGhvZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl2YWx1ZQlWYWx1ZSB0byBiZSBzZXQuCi0gICAgICogQHBhcmFtCW1ldGhvZAk8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0Jb2JqCU9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgorICAgICAqIEBwYXJhbSAgICB2YWx1ZSAgICBWYWx1ZSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIG1ldGhvZCAgICA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIE9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgogICAgICAqIEB0aHJvd3MgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiwgaW4gY2FzZSBvZiB0aGUgbWlzbWF0Y2ggb2YgcGFyYW1ldGVyIHZhbHVlcyBvcgotICAgICAqCQlhIHNlY3VyaXR5IHZpb2xhdGlvbi4gICAgIAorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBydW5KYXZhQmVhbk1ldGhvZChTdHJpbmcgdmFsdWUsIE1ldGhvZCBtZXRob2QsIE9iamVjdCBvYmopIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJaWYgKHZhbHVlPT1udWxsIHx8IHZhbHVlLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0gICAgCSAgICByZXR1cm47Ci0gICAgCX0KLSAgICAJdHJ5IHsKLSAgICAJICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotICAgIAkgICAgaWYgKCBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAxKSB7Ci0gICAgCSAgICAgICAgT2JqZWN0W10gdmFsdWVzID0gbmV3IE9iamVjdFsxXTsKLSAgICAJICAgIAl2YWx1ZXNbMF0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzWzBdLCB2YWx1ZSk7Ci0gICAgCSAgICAJbWV0aG9kLmludm9rZShvYmosIHZhbHVlcyk7Ci0gICAgCSAgICB9Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0KKyAgICAgICAgaWYgKHZhbHVlPT1udWxsIHx8IHZhbHVlLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOworICAgICAgICAgICAgaWYgKCBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICAgICAgT2JqZWN0W10gdmFsdWVzID0gbmV3IE9iamVjdFsxXTsKKyAgICAgICAgICAgICAgICB2YWx1ZXNbMF0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzWzBdLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgbWV0aG9kLmludm9rZShvYmosIHZhbHVlcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEV4ZWN1dGVzIHRoZSBtZXRob2QuICAgICAKKyAgICAgKiBFeGVjdXRlcyB0aGUgbWV0aG9kLgogICAgICAqCi0gICAgICogQHBhcmFtCW1ldGhvZCA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0Jb2JqCU9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgotICAgICAqIEBwYXJhbQl2YWx1ZXMJUGFyYW1ldGVyIHZhbHVlcyBmb3IgZXhlY3V0aW5nIHRoZSBtZXRob2QuCisgICAgICogQHBhcmFtICAgIG1ldGhvZCA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIE9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgorICAgICAqIEBwYXJhbSAgICB2YWx1ZXMgICAgUGFyYW1ldGVyIHZhbHVlcyBmb3IgZXhlY3V0aW5nIHRoZSBtZXRob2QuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBydW5NZXRob2QoTWV0aG9kIG1ldGhvZCwgT2JqZWN0IG9iaiwgVmVjdG9yIHZhbHVlcykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAl0cnkgewotCSAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLQkgICAgaWYgKHZhbHVlcy5zaXplKCkgIT0gcGFyYW1ldGVycy5sZW5ndGgpIHsKLQkgICAgICAgIHJldHVybjsKLQkgICAgfQotICAgIAkgICAgT2JqZWN0W10gYWN0dWFsVmFsdWVzID0gbmV3IE9iamVjdFtwYXJhbWV0ZXJzLmxlbmd0aF07Ci0gICAgCSAgICBmb3IgKGludCBpID0wOyBpPHBhcmFtZXRlcnMubGVuZ3RoIDsgaSsrKSB7Ci0gICAgCSAgICAJU3RyaW5nIHZhbCA9IChTdHJpbmcpIHZhbHVlcy5nZXQoaSk7Ci0gICAgCSAgICAJaWYgKHZhbC50cmltKCkuZXF1YWxzKCJOVUxMIikpIHsKLSAgICAJICAgIAkgICAgYWN0dWFsVmFsdWVzW2ldID0gbnVsbDsKLSAgICAJICAgIAl9IGVsc2UgewotICAgIAkgICAgCSAgICBhY3R1YWxWYWx1ZXNbaV0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzW2ldLCB2YWwpOwotICAgIAkgICAgCX0KLSAgICAJICAgIH0KLSAgICAJICAgIG1ldGhvZC5pbnZva2Uob2JqLCBhY3R1YWxWYWx1ZXMpOwotICAgIAl9Y2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7CisgICAgICAgIGlmICh2YWx1ZXMuc2l6ZSgpICE9IHBhcmFtZXRlcnMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIE9iamVjdFtdIGFjdHVhbFZhbHVlcyA9IG5ldyBPYmplY3RbcGFyYW1ldGVycy5sZW5ndGhdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9MDsgaTxwYXJhbWV0ZXJzLmxlbmd0aCA7IGkrKykgeworICAgICAgICAgICAgICAgIFN0cmluZyB2YWwgPSAoU3RyaW5nKSB2YWx1ZXMuZ2V0KGkpOworICAgICAgICAgICAgICAgIGlmICh2YWwudHJpbSgpLmVxdWFscygiTlVMTCIpKSB7CisgICAgICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlc1tpXSA9IG51bGw7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsVmFsdWVzW2ldID0gY29udmVydFR5cGUocGFyYW1ldGVyc1tpXSwgdmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZXRob2QuaW52b2tlKG9iaiwgYWN0dWFsVmFsdWVzKTsKKyAgICAgICAgfWNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb252ZXJ0cyB0aGUgdHlwZSBmcm9tIFN0cmluZyB0byB0aGUgQ2xhc3MgdHlwZS4KICAgICAgKgotICAgICAqIEBwYXJhbQl0eXBlCQlDbGFzcyBuYW1lIHRvIHdoaWNoIHRoZSBjb252ZXJzaW9uIGlzIHJlcXVpcmVkLgotICAgICAqIEBwYXJhbQlwYXJhbWV0ZXIJU3RyaW5nIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KLSAgICAgKiBAcmV0dXJuCUNvbnZlcnRlZCB2YWx1ZS4KKyAgICAgKiBAcGFyYW0gICAgdHlwZSAgICAgICAgQ2xhc3MgbmFtZSB0byB3aGljaCB0aGUgY29udmVyc2lvbiBpcyByZXF1aXJlZC4KKyAgICAgKiBAcGFyYW0gICAgcGFyYW1ldGVyICAgIFN0cmluZyB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQuCisgICAgICogQHJldHVybiAgICBDb252ZXJ0ZWQgdmFsdWUuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLiAgICAgCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHByaXZhdGUgT2JqZWN0IGNvbnZlcnRUeXBlKENsYXNzIHR5cGUsIFN0cmluZyBwYXJhbWV0ZXIpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJdHJ5IHsKLSAgICAJICAgIFN0cmluZyB0eXBlTmFtZSA9IHR5cGUuZ2V0TmFtZSgpOwotICAgIAkgICAgaWYgKCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TdHJpbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5PYmplY3QiKSkgewotICAgIAkgICAgCXJldHVybiBwYXJhbWV0ZXI7Ci0gICAgCSAgICB9Ci0gICAgCQotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiaW50IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuSW50ZWdlciIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBJbnRlZ2VyKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9Ci0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoInNob3J0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU2hvcnQiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgU2hvcnQocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYnl0ZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJ5dGUiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgQnl0ZShwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJsb25nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuTG9uZyIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBMb25nKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZmxvYXQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5GbG9hdCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBGbG9hdChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJkb3VibGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Eb3VibGUiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgRG91YmxlKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnRGVjaW1hbCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdJbnRlZ2VyIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYm9vbGVhbiIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJvb2xlYW4iKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgQm9vbGVhbihwYXJhbWV0ZXIpOwotICAgICAgICAgICAgfQkJCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTdHJpbmcgdHlwZU5hbWUgPSB0eXBlLmdldE5hbWUoKTsKKyAgICAgICAgICAgIGlmICggdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU3RyaW5nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuT2JqZWN0IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyOworICAgICAgICAgICAgfQogCi0gICAgCSAgICByZXR1cm4gcGFyYW1ldGVyOwotICAgIAl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX25mZSIsIHBhcmFtZXRlcik7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24ocGFyYW1ldGVyKyI6IE5vdCBhIHZhbGlkIHZhbHVlIGZvciB0aGlzIG1ldGhvZCAiKTsKLSAgICAJfQorICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiaW50IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuSW50ZWdlciIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoInNob3J0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU2hvcnQiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2hvcnQocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYnl0ZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJ5dGUiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQnl0ZShwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJsb25nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuTG9uZyIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMb25nKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImZsb2F0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRmxvYXQiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZG91YmxlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRG91YmxlIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERvdWJsZShwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnRGVjaW1hbCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnSW50ZWdlciIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJib29sZWFuIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQm9vbGVhbiIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCb29sZWFuKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7CisgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbmZlIiwgcGFyYW1ldGVyKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihwYXJhbWV0ZXIrIjogTm90IGEgdmFsaWQgdmFsdWUgZm9yIHRoaXMgbWV0aG9kICIpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQppbmRleCBmYzE0OWJmLi5mMDA4ZTdmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCkBAIC0yOSwzNiArMjksMzYgQEAKIC8qKgogICogU2VjdXJpdHlVdGlscyBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIyCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMgorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFNlY3VyaXR5VXRpbHMgewogCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QsIGdpdmVuIAotICAgICAqIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBzdWJqZWN0IGFuZCB0aGUgCi0gICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPi4gSXQgZmlyc3QgY2hlY2tzIGlmIHRoZSAKLSAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGlzIG51bGwgb3Igbm90LiBJZiBpdCBpcyBub3QgbnVsbCwgCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QsIGdpdmVuCisgICAgICogdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIHN1YmplY3QgYW5kIHRoZQorICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4uIEl0IGZpcnN0IGNoZWNrcyBpZiB0aGUKKyAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGlzIG51bGwgb3Igbm90LiBJZiBpdCBpcyBub3QgbnVsbCwKICAgICAgKiBpdCBjb25zdHJ1Y3RzIGEgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2l0aAogICAgICAqIHRoZSB1c2VyIGFuZCBwYXNzd29yZCBmaWVsZHMgZnJvbSB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBhbmQgcmV0dXJucyB0aGlzCi0gICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QuIElmIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IAotICAgICAqIGlzIG51bGwsIGl0IHJldHJpZXZlcyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGZyb20gCisgICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QuIElmIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CisgICAgICogaXMgbnVsbCwgaXQgcmV0cmlldmVzIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdHMgZnJvbQogICAgICAqIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgYW5kIHJldHVybnMgdGhlIGZpcnN0Ci0gICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYSAKKyAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCB3aGljaCBjb250YWlucyBhCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgaW5zdGFuY2UgZXF1aXZhbGVudAogICAgICAqIHRvIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBwYXJhbWV0ZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPgotICAgICAqIEBwYXJhbQlpbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPglnZW5lcmljIGV4Y2VwdGlvbiBpZiBvcGVyYXRpb24gZmFpbHMKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlNlY3VyaXR5RXhjZXB0aW9uPC9jb2RlPglpZiBhY2Nlc3MgdG8gdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIGlzIGRlbmllZAorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+ICAgIGdlbmVyaWMgZXhjZXB0aW9uIGlmIG9wZXJhdGlvbiBmYWlscworICAgICAqIEB0aHJvd3MgICAgPGNvZGU+U2VjdXJpdHlFeGNlcHRpb248L2NvZGU+ICAgIGlmIGFjY2VzcyB0byB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgaXMgZGVuaWVkCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBQYXNzd29yZENyZWRlbnRpYWwgZ2V0UGFzc3dvcmRDcmVkZW50aWFsKGZpbmFsIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsCiAgICAgICAgICBmaW5hbCBTdWJqZWN0IHN1YmplY3QsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogCi0JaWYgKGluZm8gPT0gbnVsbCkgeworICAgIGlmIChpbmZvID09IG51bGwpIHsKICAgICAgICAgICAgIGlmIChzdWJqZWN0ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC04OSwxNCArODksMTQgQEAKICAgICAgICAgICAgIHJldHVybiBwYzsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0d28gc3RyaW5ncyBhcmUgZXF1YWw7IGZhbHNlIG90aGVyd2lzZQotICAgICAqIAotICAgICAqIEBwYXJhbQlzdHIxCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAcGFyYW0Jc3RyMgk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSB0d28gc3RyaW5ncyBhcmUgZXF1YWwKLSAgICAgKiAgICAgICAgCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHN0cjEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzdHIyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHR3byBzdHJpbmdzIGFyZSBlcXVhbAorICAgICAqICAgICAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgc3RhdGljIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKFN0cmluZyBzdHIxLCBTdHJpbmcgc3RyMikgewogICAgICAgICBpZiAoc3RyMSA9PSBudWxsKSB7CkBAIC0xMDksMTAgKzEwOSwxMCBAQAogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0d28gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGFyZSBlcXVhbDsgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcEMxCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAcGFyYW0JcEMyCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHR3byBQYXNzd29yZENyZWRlbnRpYWxzIGFyZSBlcXVhbAotICAgICAqICAgICAgICAJZmFsc2UJb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHBDMSAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBDMiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSB0d28gUGFzc3dvcmRDcmVkZW50aWFscyBhcmUgZXF1YWwKKyAgICAgKiAgICAgICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHN0YXRpYyBwdWJsaWMgYm9vbGVhbiBpc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKFBhc3N3b3JkQ3JlZGVudGlhbCBwQzEsIFBhc3N3b3JkQ3JlZGVudGlhbCBwQzIpIHsKICAgICAgICAgaWYgKHBDMSA9PSBwQzIpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKaW5kZXggYTU1YmJmMC4uZjA2MGU3ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iLiIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3V0aWwiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzMsNyArMzMsNyBAQAogICAgICAgPGphciBqYXJmaWxlPSIke2Rpc3QuZGlyfS8ke3BrZy5kaXJ9L3V0aWwuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCiAgICAgICAgIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyoiLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTEzIiBkZXBlbmRzPSJjb21waWxlIi8+CiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTE0IiBkZXBlbmRzPSJjb21waWxlIi8+CiAKQEAgLTQ0LDUgKzQ0LDUgQEAKICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KLSAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDU5MjNmZTMuLjg2MmEwODQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iaW5zdGFsbGVkLWxpYnJhcmllcyIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZW1iZWRkZWQiLz4KQEAgLTI0LDcgKzI0LDcgQEAKIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iaW5zdGFsbGVkX2xpYnJhcmllc19lbWJlZGRlZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvYnVpbGQueG1sCmluZGV4IDkwODljMGMuLjlhOTEzZjkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9idWlsZC54bWwKQEAgLTQyLDIyICs0MiwyMiBAQAogICAgIDx0YXJnZXQgbmFtZT0iYWxsLWV4dCIgZGVwZW5kcz0iY2xlYW4sIGRpc2FibGUtcmVzb3VyY2UtdmFsaWRhdGlvbiwgYnVpbGQtcmEtd2l0aC1leHRlbnNpb24sIGJ1aWxkLCBkZXBsb3ktZWFyLCBzZXR1cCwgcnVuLWVhciwgdW5zZXR1cCwgdW5kZXBsb3ktZWFyLCBlbmFibGUtcmVzb3VyY2UtdmFsaWRhdGlvbiIvPgogCiA8IS0tCi0JPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgotCTxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1bi13YXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhciIvPgotCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWVhciIvPgotCTxhbnRjYWxsIHRhcmdldD0icnVuLWVhciIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktZWFyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi13YXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWVhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWVhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktZWFyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CiAgICAgPC90YXJnZXQ+CiAtLT4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbm5lY3RvciI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9zaW1wbGVCYW5rLnNxbCIvPgpAQCAtNzEsMTMgKzcxLDEzIEBACiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY29ubmVjdG9yLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJhLm5hbWUiIHZhbHVlPSIke2FwcG5hbWV9QXBwI2pkYmNyYSIvPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0aW9uLmRlZm5hbWUiIHZhbHVlPSJqYXZheC5zcWwuRGF0YVNvdXJjZSIvPgotCQkgICAgPHBhcmFtIG5hbWU9ImV4dHJhLXBhcmFtcyIgdmFsdWU9Ii0tbWF0Y2hjb25uZWN0aW9ucz1mYWxzZSIvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImV4dHJhLXBhcmFtcyIgdmFsdWU9Ii0tbWF0Y2hjb25uZWN0aW9ucz1mYWxzZSIvPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3IuY29ucG9vbC5uYW1lIiB2YWx1ZT0iZW1iZWRkZWQtcmEtcG9vbCIvPgogICAgICAgICAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC1vcmFjbGUtcHJvcHMiPgotCQk8cGFyYW0gbmFtZT0icG9vbC50eXBlIiB2YWx1ZT0iY29ubmVjdG9yIi8+Ci0JCTxwYXJhbSBuYW1lPSJjb25wb29sLm5hbWUiIHZhbHVlPSJlbWJlZGRlZC1yYS1wb29sIi8+Ci0JCTwvYW50Y2FsbD4KKyAgICAgICAgPHBhcmFtIG5hbWU9InBvb2wudHlwZSIgdmFsdWU9ImNvbm5lY3RvciIvPgorICAgICAgICA8cGFyYW0gbmFtZT0iY29ucG9vbC5uYW1lIiB2YWx1ZT0iZW1iZWRkZWQtcmEtcG9vbCIvPgorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcmVzb3VyY2UiPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWNvbm5lY3Rvci1yZXNvdXJjZS1jb21tb24iPgpAQCAtODYsNTMgKzg2LDUzIEBACiAgICAgICAgICAgICAgICAgPC9hbnRjYWxsPgogICAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iZGlzYWJsZS1yZXNvdXJjZS12YWxpZGF0aW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtanZtLW9wdGlvbnMiPgotCQkJPHBhcmFtIG5hbWU9Im9wdGlvbiIgdmFsdWU9Ii1EZGVwbG95bWVudC5yZXNvdXJjZS52YWxpZGF0aW9uPWZhbHNlIi8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlciIvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iZGlzYWJsZS1yZXNvdXJjZS12YWxpZGF0aW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtanZtLW9wdGlvbnMiPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wdGlvbiIgdmFsdWU9Ii1EZGVwbG95bWVudC5yZXNvdXJjZS52YWxpZGF0aW9uPWZhbHNlIi8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlciIvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJlbmFibGUtcmVzb3VyY2UtdmFsaWRhdGlvbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWp2bS1vcHRpb25zIj4KLQkJCTxwYXJhbSBuYW1lPSJvcHRpb24iIHZhbHVlPSItRGRlcGxveW1lbnQucmVzb3VyY2UudmFsaWRhdGlvbj1mYWxzZSIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXIiLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImVuYWJsZS1yZXNvdXJjZS12YWxpZGF0aW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtanZtLW9wdGlvbnMiPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wdGlvbiIgdmFsdWU9Ii1EZGVwbG95bWVudC5yZXNvdXJjZS52YWxpZGF0aW9uPWZhbHNlIi8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlciIvPgorICAgIDwvdGFyZ2V0PgogCiAKICAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtYWRtaW4tb2JqZWN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iY3JlYXRlLWFkbWluLW9iamVjdCAtLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSAtLXJlc3R5cGUgY29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluIC0tcmFuYW1lICR7YXBwbmFtZX1BcHAjamRiY3JhIC0tcHJvcGVydHkgVGFibGVOYW1lPWN1c3RvbWVyMjpKbmRpTmFtZT1qZGJjL2VqYi1pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkOlNjaGVtYU5hbWU9REJVU0VSOk5vT2ZSb3dzPTEiLz4KLQkgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSJlaXMvamRiY0FkbWluIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iZWlzL2pkYmNBZG1pbiIvPgogICAgICAgICAgPC9hbnRjYWxsPgogICAgICA8L3RhcmdldD4KIAogICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1hZG1pbi1vYmplY3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImRlbGV0ZS1hZG1pbi1vYmplY3QiLz4KLQkgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSBlaXMvamRiY0FkbWluIi8+Ci0JIDwvYW50Y2FsbD4KLQkgPCEtLTxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+LS0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iZGVsZXRlLWFkbWluLW9iamVjdCIvPgorICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IGVpcy9qZGJjQWRtaW4iLz4KKyAgICAgPC9hbnRjYWxsPgorICAgICA8IS0tPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4tLT4KICAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RhcnQiPgogICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAKKwogICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yYS1jb25maWciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJjcmVhdGUtcmVzb3VyY2UtYWRhcHRlci1jb25maWcgIC0tcHJvcGVydHkgUkFQcm9wZXJ0eT1WQUxJRCIvPgotCSAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7YXBwbmFtZX1BcHAjamRiY3JhIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCNqZGJjcmEiLz4KICAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgPC90YXJnZXQ+CiAKICAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmEtY29uZmlnIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtcmVzb3VyY2UtYWRhcHRlci1jb25maWciLz4KLQkgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke2FwcG5hbWV9QXBwI2pkYmNyYSIvPgotCSA8L2FudGNhbGw+Ci0JIDwhLS08YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPi0tPgorICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImRlbGV0ZS1yZXNvdXJjZS1hZGFwdGVyLWNvbmZpZyIvPgorICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7YXBwbmFtZX1BcHAjamRiY3JhIi8+CisgICAgIDwvYW50Y2FsbD4KKyAgICAgPCEtLTxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+LS0+CiAgICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIj4KQEAgLTE0NCw3ICsxNDQsNyBAQAogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXBvb2wiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1hZG1pbi1vYmplY3QiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXBvb2wiPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWNvbm5lY3Rvci1jb25ucG9vbC1jb21tb24iPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3IuY29ucG9vbC5uYW1lIiB2YWx1ZT0iZW1iZWRkZWQtcmEtcG9vbCIvPgpAQCAtMTU0LDcgKzE1NCw3IEBACiAgICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlIj4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1jb25uZWN0b3ItcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmpuZGkubmFtZSIgdmFsdWU9ImpkYmMvZWpiLWluc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQiLz4KLQkJPC9hbnRjYWxsPgorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KQEAgLTE2OSw5ICsxNjksOSBAQAogICAgICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogQ29tcGlsaW5nIHRlc3Qgc291cmNlIGZpbGVzIiBsZXZlbD0idmVyYm9zZSIvPgogICAgICAgPGphdmFjIHNyY2Rpcj0ic2VydmxldCIKICAgICAgICAgIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgotCSBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofTpyYS9wdWJsaXNoL2ludGVybmFsL2NsYXNzZXMiCisgICAgIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9OnJhL3B1Ymxpc2gvaW50ZXJuYWwvY2xhc3NlcyIKICAgICAgICAgIGRlYnVnPSJvbiIKLQkgZmFpbG9uZXJyb3I9InRydWUiLz4KKyAgICAgZmFpbG9uZXJyb3I9InRydWUiLz4KICAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0ICBuYW1lPSJidWlsZC1yYS13aXRoLWV4dGVuc2lvbiI+CkBAIC0xODksMjcgKzE4OSwyNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAKICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICA8L2FudGNhbGw+Ci0gICAgICAgCisKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgPC9hbnRjYWxsPgogCi0gICAgCisKICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+ICAgIAotICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiAKKyAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgorICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIgogICAgICBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+CiAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+Ci0gICAgPC9maWxlc2V0PiAgCisgICAgPC9maWxlc2V0PgogICAgIDxmaWxlc2V0IGRpcj0icmEvcHVibGlzaC9saWIiPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi5yYXIiLz4KICAgICA8L2ZpbGVzZXQ+CkBAIC0yNDUsMjggKzI0NSwyOCBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LXdhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi13YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWJjbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0iaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZCAoc3RhbmQtYWxvbmUgd2FyIGJhc2VkKSIvPgotCTwvYW50Y2FsbD4KKyAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0iaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZCAoc3RhbmQtYWxvbmUgd2FyIGJhc2VkKSIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJpbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkIChlYXIgYmFzZWQpIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJpbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkIChlYXIgYmFzZWQpIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtcmEtY29uZmlnIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5pbnN0YWxsLWxpYnJhcnkiLz4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS13YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggY2Y1NWUyMS4uMGEzMTE2MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI5LDIwICsyOSwyMCBAQAogICAgICAgICA8cmVzLXJlZi1uYW1lPmpkYmMvU2ltcGxlQmFuazwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmpkYmMvZWpiLWluc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQ8L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4gCi0gICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPiAKLSAgICAgPGJlYW4tcG9vbD4gCi0gICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPiAKLSAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PiAKLSAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPiAKLSAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgPC9iZWFuLXBvb2w+IAotICAgICAgPGJlYW4tY2FjaGU+IAotICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPiAKLSAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4gCi0gICAgICAgIDxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9yZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4gCi0gICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PiAKLSAgICAgIDwvYmVhbi1jYWNoZT4gCisgICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPgorICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4KKyAgICAgPGJlYW4tcG9vbD4KKyAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+CisgICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4KKyAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPgorICAgICAgICAgPHBvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgIDwvYmVhbi1wb29sPgorICAgICAgPGJlYW4tY2FjaGU+CisgICAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+CisgICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICAgIDxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9yZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkxSVTwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+CisgICAgICA8L2JlYW4tY2FjaGU+CiAgICAgPC9lamI+CiAgICAgPGVqYj4KICAgICAgIDxlamItbmFtZT5DdXN0b21lckNoZWNraW5nRUpCPC9lamItbmFtZT4KQEAgLTUxLDIwICs1MSwyMCBAQAogICAgICAgICA8cmVzLXJlZi1uYW1lPmpkYmMvU2ltcGxlQmFuazwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmpkYmMvZWpiLWluc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQ8L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4gCi0gICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPiAKLSAgICAgPGJlYW4tcG9vbD4gCi0gICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPiAKLSAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PiAKLSAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPiAKKyAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+CisgICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPgorICAgICA8YmVhbi1wb29sPgorICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+CiAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+Ci0gICAgICA8L2JlYW4tcG9vbD4gCi0gICAgICA8YmVhbi1jYWNoZT4gCisgICAgICA8L2JlYW4tcG9vbD4KKyAgICAgIDxiZWFuLWNhY2hlPgogICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPgogICAgICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgogICAgICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgotICAgICAgPC9iZWFuLWNhY2hlPiAKKyAgICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgogPC9zdW4tZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2VqYi9DdXN0b21lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvZWpiL0N1c3RvbWVyLmphdmEKaW5kZXggYWM5Yzk3MS4uZjgzMjRiYSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvZWpiL0N1c3RvbWVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvZWpiL0N1c3RvbWVyLmphdmEKQEAgLTQ0LDQgKzQ0LDQgQEAKIAogfQogCi0gIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YQppbmRleCAxMTQ5ZjM4Li5jMTIwMGE3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKQEAgLTIwLDQgKzIwLDQgQEAKIHsKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEKaW5kZXggODJjNDFhNi4uODg2OGU2YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhCkBAIC05NCw1ICs5NCw1IEBACiAgIH0KIAogfQotICAgIAotICAgIAorCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2VqYi9DdXN0b21lckVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvZWpiL0N1c3RvbWVyRUpCLmphdmEKaW5kZXggMGY5YzlhZi4uYWI4NzAzMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvZWpiL0N1c3RvbWVyRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvZWpiL0N1c3RvbWVyRUpCLmphdmEKQEAgLTUzLDcgKzUzLDcgQEAKIAogICBwdWJsaWMgU3RyaW5nIGdldEFkZHJlc3MxKCkKICAgewotICAgIHJldHVybiBhZGRyZXNzMTsgCisgICAgcmV0dXJuIGFkZHJlc3MxOwogICB9CiAKICAgcHVibGljIFN0cmluZyBnZXRBZGRyZXNzMigpCkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTUUwgZXhjZXB0aW9uIG9jY3VyZWQgaW4gZWpiUmVtb3ZlIG1ldGhvZCIpOwogICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgfQotICAgIAorCiAgIH0KIAogICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpCkBAIC0yMTQsMTIgKzIxNCwxMiBAQAogICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CiAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNRTEV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBlamJMb2FkKCkgbWV0aG9kIik7CiAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0gICAKKyAgICB9CiAgIH0KIAogICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9CiAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiB9Ci0gICAgICAKLSAgICAKLSAgICAKKworCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YQppbmRleCBhZTQwYzY4Li4zNjc1NzExIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhCkBAIC0yMCw0ICsyMCw0IEBACiB7CiB9CiAKLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YQppbmRleCA5ZjViNzZiLi5kNThiYWI1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhCkBAIC05NSw2ICs5NSw2IEBACiAgIH0KIAogfQotICAgICAgCi0gICAgCi0gICAgCisKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvYnVpbGQucHJvcGVydGllcwppbmRleCBlZTJlY2EwLi5mZDIxYzNkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE0LDcgKzE0LDcgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAjCiAKLSAgICAKKwogIyMjIENvbXBvbmVudCBQcm9wZXJ0aWVzICMjIwogc3JjLmRpcj1zcmMKIGNvbXBvbmVudC5wdWJsaXNoLmhvbWU9LgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvYnVpbGQueG1sCmluZGV4IDA0NWQ3OTQuLmZiMzA5NzIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9idWlsZC54bWwKQEAgLTIxLDY0ICsyMSw2NCBAQAogICA8IUVOVElUWSB0ZXN0Y29tbW9uIFNZU1RFTSAiLi4vLi4vLi4vLi4vLi4vY29uZmlnL3Byb3BlcnRpZXMueG1sIj4KIF0+CiAKLTxwcm9qZWN0IG5hbWU9IkpEQkNDb25uZWN0b3IgdG9wIGxldmVsIiBkZWZhdWx0PSJidWlsZCI+ICAKKzxwcm9qZWN0IG5hbWU9IkpEQkNDb25uZWN0b3IgdG9wIGxldmVsIiBkZWZhdWx0PSJidWlsZCI+CiAgICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2pkYmNyYS9zcGkiLz4KLSAgICAKKwogICAgICZjb21tb247CiAgICAgJnRlc3Rjb21tb247CiAgICAgPHByb3BlcnR5IGZpbGU9Ii4vYnVpbGQucHJvcGVydGllcyIvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY2xlYW4sY29tcGlsZSxhc3NlbWJsZSIvPgotICAgICAgICAgIAorCiAKICAgICA8IS0tIGluaXQuIEluaXRpYWxpemF0aW9uIGludm9sdmVzIGNyZWF0aW5nIHB1Ymxpc2hpbmcgZGlyZWN0b3JpZXMgYW5kCi0gICAgICAgICBPUyBzcGVjaWZpYyB0YXJnZXRzLiAtLT4gCisgICAgICAgICBPUyBzcGVjaWZpYyB0YXJnZXRzLiAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImluaXQiIGRlc2NyaXB0aW9uPSIke2NvbXBvbmVudC5uYW1lfSBpbml0aWFsaXphdGlvbiI+CiAgICAgICAgIDx0c3RhbXA+CiAgICAgICAgICAgICA8Zm9ybWF0IHByb3BlcnR5PSJzdGFydC50aW1lIiBwYXR0ZXJuPSJNTS9kZC95eXl5IGhoOm1tIGFhIi8+Ci0gICAgICAgIDwvdHN0YW1wPiAgICAKKyAgICAgICAgPC90c3RhbXA+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkJ1aWxkaW5nIGNvbXBvbmVudCAke2NvbXBvbmVudC5uYW1lfSIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iLz4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ii8+ICAgIAorICAgICAgICA8bWtkaXIgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iLz4KICAgICA8L3RhcmdldD4KLSAgICA8IS0tIGNvbXBpbGUgLS0+IAorICAgIDwhLS0gY29tcGlsZSAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQiCi0gICAgICAgICAgICBkZXNjcmlwdGlvbj0iQ29tcGlsZSBjb20vc3VuLyogY29tL2lwbGFuZXQvKiBzb3VyY2VzIj4gIAorICAgICAgICAgICAgZGVzY3JpcHRpb249IkNvbXBpbGUgY29tL3N1bi8qIGNvbS9pcGxhbmV0Lyogc291cmNlcyI+CiAgICAgICAgIDwhLS08ZWNobyBtZXNzYWdlPSJDb25uZWN0b3IgYXBpIHJlc2lkZXMgaW4gJHtjb25uZWN0b3ItYXBpLmphcn0iLz4tLT4KLSAgICAgICAgPGphdmFjIHNyY2Rpcj0iJHtzcmMuZGlyfSIgCisgICAgICAgIDxqYXZhYyBzcmNkaXI9IiR7c3JjLmRpcn0iCiAgICAgICAgICAgICAgICBkZXN0ZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iCi0JICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4KLQkgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPgorICAgICAgICA8Y2xhc3NwYXRoPgogICAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzIj4KLQkgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouamFyIiAvPgorICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qYXIiIC8+CiAgICAgICAgICAgICAgICAgPC9maWxlc2V0PgotCSAgICA8L2NsYXNzcGF0aD4KKyAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJjb20vc3VuL2pkYmNyYS8qKiIvPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iY29tL3N1bi9hcHBzZXJ2LyoqIi8+CiAgICAgICAgIDwvamF2YWM+CiAgICAgPC90YXJnZXQ+Ci0gICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkIi8+CiAKLSAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiPiAgICAKLSAgICAJCi0JPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiYy5qYXIiICBtYW5pZmVzdD0iJHtqYXIubWZ9IgotICAgICAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IiBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLCAKLSAgICAgICAgICAgIGNvbS9zdW4vYXBwc2Vydi8qKi8qLCBjb20vc3VuL2pkYmNyYS91dGlsLyoqLyosIGNvbS9zdW4vamRiY3JhL2NvbW1vbi8qKi8qIi8+IAotICAgCQotICAgICAgICA8Y29weSBmaWxlPSIke3NyYy5kaXJ9L2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIiAKLSAgICAgICAgICAgICAgICB0b2ZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIj4KKworICAgIDxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmMuamFyIiAgbWFuaWZlc3Q9IiR7amFyLm1mfSIKKyAgICAgICAgICAgIGJhc2VkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiwKKyAgICAgICAgICAgIGNvbS9zdW4vYXBwc2Vydi8qKi8qLCBjb20vc3VuL2pkYmNyYS91dGlsLyoqLyosIGNvbS9zdW4vamRiY3JhL2NvbW1vbi8qKi8qIi8+CisKKyAgICAgICAgPGNvcHkgZmlsZT0iJHtzcmMuZGlyfS9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbCIKKyAgICAgICAgICAgICAgICB0b2ZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmNyYS5yYXIiIAotCQliYXNlZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iIG1hbmlmZXN0PSIke3Jhci5tZn0iIGV4Y2x1ZGVzPSJqZGJjLmphciI+CisgICAgICAgPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiY3JhLnJhciIKKyAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9IiBtYW5pZmVzdD0iJHtyYXIubWZ9IiBleGNsdWRlcz0iamRiYy5qYXIiPgogCi0gICAJCTxtZXRhaW5mIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CiAKLSAgIAk8ZGVsZXRlIGZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiLz4KLQkKKyAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiLz4KKwogICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlc2NyaXB0aW9uPSJDbGVhbiB0aGUgYnVpbGQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCmluZGV4IDlmODM5OWEuLmI2ZWYzMGIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKQEAgLTIwLDE1ICsyMCwxNSBAQAogaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKIAogLyoqCi0gKiBUaGUgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+IGltcGxlbWVudGF0aW9uIG9mIFN1bk9ORSBhcHBsaWNhdGlvbiAKKyAqIFRoZSA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uCiAgKiBzZXJ2ZXIgd2lsbCBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UuIEFuIGFwcGxpY2F0aW9uIHByb2dyYW0gd291bGQgYmUgYWJsZQotICogdG8gdXNlIHRoaXMgaW50ZXJmYWNlIHRvIGRvIHRoZSBleHRlbmRlZCBmdW5jdGlvbmFsaXR5IGV4cG9zZWQgYnkgU3VuT05FIAorICogdG8gdXNlIHRoaXMgaW50ZXJmYWNlIHRvIGRvIHRoZSBleHRlbmRlZCBmdW5jdGlvbmFsaXR5IGV4cG9zZWQgYnkgU3VuT05FCiAgKiBhcHBsaWNhdGlvbiBzZXJ2ZXIuCi0gKiA8cD5BIHNhbXBsZSBjb2RlIGZvciBnZXR0aW5nIGRyaXZlcidzIGNvbm5lY3Rpb24gaW1wbGVtZW50YXRpb24gd291bGQgbGlrZSAKKyAqIDxwPkEgc2FtcGxlIGNvZGUgZm9yIGdldHRpbmcgZHJpdmVyJ3MgY29ubmVjdGlvbiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBsaWtlCiAgKiB0aGUgZm9sbG93aW5nLgogICogPHByZT4KICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgY29tLnN1bi5hcHBzZXJ2LkRhdGFTb3VyY2UgZHMgPSAoY29tLnN1bi5hcHBzZXJ2LkRhdGFTT3VyY2UpIGljLmxvb2t1cCgiamRiYy9Qb2ludEJhc2UiKTsgCisgICAgIGNvbS5zdW4uYXBwc2Vydi5EYXRhU291cmNlIGRzID0gKGNvbS5zdW4uYXBwc2Vydi5EYXRhU091cmNlKSBpYy5sb29rdXAoImpkYmMvUG9pbnRCYXNlIik7CiAgICAgIENvbm5lY3Rpb24gY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICBDb25uZWN0aW9uIGRyaXZlcmNvbiA9IGRzLmdldENvbm5lY3Rpb24oY29uKTsKIApAQCAtMzYsMTMgKzM2LDEzIEBACiAKICAgICAgY29uLmNsb3NlKCk7CiAgICA8L3ByZT4KLSAqIAorICoKICAqIEBhdXRob3IgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgRGF0YVNvdXJjZSBleHRlbmRzIGphdmF4LnNxbC5EYXRhU291cmNlIHsKIAogICAgIC8qKgotICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyIAorICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyCiAgICAgICogaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uIHNlcnZlci4gSWYgYW4gYWN0dWFsIGNvbm5lY3Rpb24gaXMKICAgICAgKiBzdXBwbGllZCBhcyBhcmd1bWVudCwgdGhlbiBpdCB3aWxsIGJlIGp1c3QgcmV0dXJuZWQuCiAgICAgICoKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQppbmRleCA3MDAyOWYxLi5lOTY2Zjk4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCkBAIC0yNywyMiArMjcsMjIgQEAKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CiAvKioKLSAqIFV0aWxpdHkgY2xhc3MsIHdoaWNoIHdvdWxkIGNyZWF0ZSBuZWNlc3NhcnkgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZSAKKyAqIFV0aWxpdHkgY2xhc3MsIHdoaWNoIHdvdWxkIGNyZWF0ZSBuZWNlc3NhcnkgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZQogICogc3BlY2lmaWNhdGlvbi4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRwotICogQHNlZQkJY29tLnN1bi5qZGJjcmEuY29tbW9uLkRhdGFTb3VyY2VTcGVjCi0gKiBAc2VlCQljb20uc3VuLmpkYmNyYS51dGlsLk1ldGhvZEV4Y2VjdXRvcgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKKyAqIEBzZWUgICAgICAgIGNvbS5zdW4uamRiY3JhLmNvbW1vbi5EYXRhU291cmNlU3BlYworICogQHNlZSAgICAgICAgY29tLnN1bi5qZGJjcmEudXRpbC5NZXRob2RFeGNlY3V0b3IKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2VPYmplY3RCdWlsZGVyIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAKICAgICBwcml2YXRlIERhdGFTb3VyY2VTcGVjIHNwZWM7Ci0gICAgCisKICAgICBwcml2YXRlIEhhc2h0YWJsZSBkcml2ZXJQcm9wZXJ0aWVzID0gbnVsbDsKLSAgICAKLSAgICBwcml2YXRlIE1ldGhvZEV4ZWN1dG9yIGV4ZWN1dG9yID0gbnVsbDsgICAgCi0gICAgCisKKyAgICBwcml2YXRlIE1ldGhvZEV4ZWN1dG9yIGV4ZWN1dG9yID0gbnVsbDsKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC01MCwxNjkgKzUwLDE2OSBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdCBhIERhdGFTb3VyY2UgT2JqZWN0IGZyb20gdGhlIHNwZWMuCi0gICAgICogCi0gICAgICogQHBhcmFtCXNwZWMJPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtICAgIHNwZWMgICAgPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhU291cmNlT2JqZWN0QnVpbGRlcihEYXRhU291cmNlU3BlYyBzcGVjKSB7Ci0gICAgCXRoaXMuc3BlYyA9IHNwZWM7Ci0gICAgCWV4ZWN1dG9yID0gbmV3IE1ldGhvZEV4ZWN1dG9yKCk7CisgICAgICAgIHRoaXMuc3BlYyA9IHNwZWM7CisgICAgICAgIGV4ZWN1dG9yID0gbmV3IE1ldGhvZEV4ZWN1dG9yKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0IHRoZSBEYXRhU291cmNlIE9iamVjdCBmcm9tIHRoZSBzcGVjLgogICAgICAqCi0gICAgICogQHJldHVybglPYmplY3QgY29uc3RydWN0ZWQgdXNpbmcgdGhlIERhdGFTb3VyY2VTcGVjLgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IGlmIHRoZSBjbGFzcyBpcyBub3QgZm91bmQgb3Igc29tZSBpc3N1ZSBpbiBleGVjdXRpbmcKLSAgICAgKgkJc29tZSBtZXRob2QuCisgICAgICogQHJldHVybiAgICBPYmplY3QgY29uc3RydWN0ZWQgdXNpbmcgdGhlIERhdGFTb3VyY2VTcGVjLgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IGlmIHRoZSBjbGFzcyBpcyBub3QgZm91bmQgb3Igc29tZSBpc3N1ZSBpbiBleGVjdXRpbmcKKyAgICAgKiAgICAgICAgc29tZSBtZXRob2QuCiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjb25zdHJ1Y3REYXRhU291cmNlT2JqZWN0KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlkcml2ZXJQcm9wZXJ0aWVzID0gcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKHNwZWMpOworICAgICAgICBkcml2ZXJQcm9wZXJ0aWVzID0gcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKHNwZWMpOwogICAgICAgICBPYmplY3QgZGF0YVNvdXJjZU9iamVjdCA9IGdldERhdGFTb3VyY2VPYmplY3QoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWMy1URVNUIDogIiAgKyBkYXRhU291cmNlT2JqZWN0KTsKICAgICAgICAgTWV0aG9kW10gbWV0aG9kcyA9IGRhdGFTb3VyY2VPYmplY3QuZ2V0Q2xhc3MoKS5nZXRNZXRob2RzKCk7CiAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gbWV0aG9kc1tpXS5nZXROYW1lKCk7Ci0JICAgIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFVzZXIiKSl7CSAgICAJCi0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UGFzc3dvcmQiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9naW5UaW1lT3V0IikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dXcml0ZXIiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dXUklURVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFiYXNlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YVNvdXJjZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGVzY3JpcHRpb24iKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE5ldHdvcmtQcm90b2NvbCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UG9ydE51bWJlciIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFJvbGVOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFNlcnZlck5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFN0YXRlbWVudHMiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhTVEFURU1FTlRTKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRJbml0aWFsUG9vbFNpemUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5JTklUSUFMUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1pblBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUlOUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heElkbGVUaW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYSURMRVRJTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFByb3BlcnR5Q3ljbGUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QUk9QRVJUWUNZQ0xFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAoZHJpdmVyUHJvcGVydGllcy5jb250YWluc0tleShtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpKXsKLQkgICAgCVZlY3RvciB2YWx1ZXMgPSAoVmVjdG9yKSBkcml2ZXJQcm9wZXJ0aWVzLmdldChtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpOwotCSAgICAgICAgZXhlY3V0b3IucnVuTWV0aG9kKG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCwgdmFsdWVzKTsKLQkgICAgfQorICAgICAgICBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRVc2VyIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBhc3N3b3JkIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ2luVGltZU91dCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9nV3JpdGVyIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HV1JJVEVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhYmFzZU5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFTb3VyY2VOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERlc2NyaXB0aW9uIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE5ldHdvcmtQcm90b2NvbCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UG9ydE51bWJlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFJvbGVOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFNlcnZlck5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhTdGF0ZW1lbnRzIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYU1RBVEVNRU5UUyksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0SW5pdGlhbFBvb2xTaXplIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuSU5JVElBTFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNaW5Qb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1JTlBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhQb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhJZGxlVGltZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWElETEVUSU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQcm9wZXJ0eUN5Y2xlIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUFJPUEVSVFlDWUNMRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKGRyaXZlclByb3BlcnRpZXMuY29udGFpbnNLZXkobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKSl7CisgICAgICAgICAgICBWZWN0b3IgdmFsdWVzID0gKFZlY3RvcikgZHJpdmVyUHJvcGVydGllcy5nZXQobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKTsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bk1ldGhvZChtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QsIHZhbHVlcyk7CisgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gZGF0YVNvdXJjZU9iamVjdDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGV4dHJhIGRyaXZlciBwcm9wZXJ0aWVzIGZyb20gdGhlIERhdGFTb3VyY2VTcGVjIG9iamVjdCBhbmQKICAgICAgKiBwYXJzZSB0aGVtIHRvIGEgc2V0IG9mIG1ldGhvZE5hbWUgYW5kIHBhcmFtZXRlcnMuIFByZXBhcmUgYSBoYXNodGFibGUKICAgICAgKiBjb250YWluaW5nIHRoZXNlIGRldGFpbHMgYW5kIHJldHVybi4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcGVjCTxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcmV0dXJuCUhhc2h0YWJsZSBjb250YWluaW5nIG1ldGhvZCBuYW1lcyBhbmQgcGFyYW1ldGVycywKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCUlmIGRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgYW5kIHByb3BlcnR5IHN0cmluZwotICAgICAqCQkJCQlpcyBub3QgbnVsbC4KKyAgICAgKiBAcGFyYW0gICAgc3BlYyAgICA8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICBIYXNodGFibGUgY29udGFpbmluZyBtZXRob2QgbmFtZXMgYW5kIHBhcmFtZXRlcnMsCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBJZiBkZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGFuZCBwcm9wZXJ0eSBzdHJpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgaXMgbm90IG51bGwuCiAgICAgICovCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKERhdGFTb3VyY2VTcGVjIHNwZWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJU3RyaW5nIGRlbGltID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKKyAgICAgICAgU3RyaW5nIGRlbGltID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKIAogICAgICAgICBTdHJpbmcgcHJvcCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwotCWlmICggcHJvcCA9PSBudWxsIHx8IHByb3AudHJpbSgpLmVxdWFscygiIikpIHsKLQkgICAgcmV0dXJuIG5ldyBIYXNodGFibGUoKTsKLQl9IGVsc2UgaWYgKGRlbGltID09IG51bGwgfHwgZGVsaW0uZXF1YWxzKCIiKSkgewotCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24gKCJEZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGluIHRoZSBjb25maWd1cmF0aW9uIik7Ci0JfQotCQotCUhhc2h0YWJsZSBwcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOwotCWRlbGltID0gZGVsaW0udHJpbSgpOwkKLQlTdHJpbmcgc2VwID0gZGVsaW0rZGVsaW07Ci0JaW50IHNlcExlbiA9IHNlcC5sZW5ndGgoKTsKLQlTdHJpbmcgY2FjaGUgPSBwcm9wOwotCVZlY3RvciBtZXRob2RzID0gbmV3IFZlY3RvcigpOwotCQotCXdoaWxlIChjYWNoZS5pbmRleE9mKHNlcCkgIT0gLTEpIHsKLQkgICAgaW50IGluZGV4ID0gY2FjaGUuaW5kZXhPZihzZXApOwotCSAgICBTdHJpbmcgbmFtZSA9IGNhY2hlLnN1YnN0cmluZygwLGluZGV4KTsKLQkgICAgaWYgKG5hbWUudHJpbSgpICE9ICIiKSB7Ci0JICAgICAgICBtZXRob2RzLmFkZChuYW1lKTsKLQkgICAgCWNhY2hlID0gY2FjaGUuc3Vic3RyaW5nKGluZGV4K3NlcExlbik7Ci0JICAgIH0KLQl9Ci0JCi0gICAgCUVudW1lcmF0aW9uIGFsbE1ldGhvZHMgPSBtZXRob2RzLmVsZW1lbnRzKCk7Ci0gICAgCXdoaWxlIChhbGxNZXRob2RzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgCSAgICBTdHJpbmcgb25lTWV0aG9kID0gKFN0cmluZykgYWxsTWV0aG9kcy5uZXh0RWxlbWVudCgpOyAgICAJICAgIAotICAgIAkgICAgaWYgKCFvbmVNZXRob2QudHJpbSgpLmVxdWFscygiIikpIHsKLSAgICAJICAgIAlTdHJpbmcgbWV0aG9kTmFtZSA9IG51bGw7Ci0gICAgCSAgICAJVmVjdG9yIHBhcm1zID0gbmV3IFZlY3RvcigpOwotICAgIAkgICAgCVN0cmluZ1Rva2VuaXplciBtZXRob2REZXRhaWxzID0gbmV3IFN0cmluZ1Rva2VuaXplcihvbmVNZXRob2QsZGVsaW0pOwotCQlmb3IgKGludCBpPTA7IG1ldGhvZERldGFpbHMuaGFzTW9yZVRva2VucygpO2krKyApIHsKLQkJICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIG1ldGhvZERldGFpbHMubmV4dFRva2VuKCk7Ci0JCSAgICBpZiAoaT09MCkgewotCQkgICAgCW1ldGhvZE5hbWUgPSB0b2tlbi50b1VwcGVyQ2FzZSgpOwotCQkgICAgfSBlbHNlIHsKLQkJICAgIAlwYXJtcy5hZGQodG9rZW4pOwkJICAgIAkKLQkJICAgIH0KLQkJfQotCQlwcm9wZXJ0aWVzLnB1dChtZXRob2ROYW1lLHBhcm1zKTsKLSAgICAJICAgIH0gICAgCSAgICAKLSAgICAJfQotICAgIAlyZXR1cm4gcHJvcGVydGllczsKKyAgICBpZiAoIHByb3AgPT0gbnVsbCB8fCBwcm9wLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgIHJldHVybiBuZXcgSGFzaHRhYmxlKCk7CisgICAgfSBlbHNlIGlmIChkZWxpbSA9PSBudWxsIHx8IGRlbGltLmVxdWFscygiIikpIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uICgiRGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiIpOwogICAgIH0KLSAgICAKKworICAgIEhhc2h0YWJsZSBwcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOworICAgIGRlbGltID0gZGVsaW0udHJpbSgpOworICAgIFN0cmluZyBzZXAgPSBkZWxpbStkZWxpbTsKKyAgICBpbnQgc2VwTGVuID0gc2VwLmxlbmd0aCgpOworICAgIFN0cmluZyBjYWNoZSA9IHByb3A7CisgICAgVmVjdG9yIG1ldGhvZHMgPSBuZXcgVmVjdG9yKCk7CisKKyAgICB3aGlsZSAoY2FjaGUuaW5kZXhPZihzZXApICE9IC0xKSB7CisgICAgICAgIGludCBpbmRleCA9IGNhY2hlLmluZGV4T2Yoc2VwKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBjYWNoZS5zdWJzdHJpbmcoMCxpbmRleCk7CisgICAgICAgIGlmIChuYW1lLnRyaW0oKSAhPSAiIikgeworICAgICAgICAgICAgbWV0aG9kcy5hZGQobmFtZSk7CisgICAgICAgICAgICBjYWNoZSA9IGNhY2hlLnN1YnN0cmluZyhpbmRleCtzZXBMZW4pOworICAgICAgICB9CisgICAgfQorCisgICAgICAgIEVudW1lcmF0aW9uIGFsbE1ldGhvZHMgPSBtZXRob2RzLmVsZW1lbnRzKCk7CisgICAgICAgIHdoaWxlIChhbGxNZXRob2RzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBTdHJpbmcgb25lTWV0aG9kID0gKFN0cmluZykgYWxsTWV0aG9kcy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgaWYgKCFvbmVNZXRob2QudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG51bGw7CisgICAgICAgICAgICAgICAgVmVjdG9yIHBhcm1zID0gbmV3IFZlY3RvcigpOworICAgICAgICAgICAgICAgIFN0cmluZ1Rva2VuaXplciBtZXRob2REZXRhaWxzID0gbmV3IFN0cmluZ1Rva2VuaXplcihvbmVNZXRob2QsZGVsaW0pOworICAgICAgICBmb3IgKGludCBpPTA7IG1ldGhvZERldGFpbHMuaGFzTW9yZVRva2VucygpO2krKyApIHsKKyAgICAgICAgICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIG1ldGhvZERldGFpbHMubmV4dFRva2VuKCk7CisgICAgICAgICAgICBpZiAoaT09MCkgeworICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSB0b2tlbi50b1VwcGVyQ2FzZSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJtcy5hZGQodG9rZW4pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHByb3BlcnRpZXMucHV0KG1ldGhvZE5hbWUscGFybXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzOworICAgIH0KKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBEYXRhc291cmNlIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlIHNwZWMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCUluaXRpYWwgRGF0YVNvdXJjZSBPYmplY3QgaW5zdGFuY2UuCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gSWYgY2xhc3MgbmFtZSBpcyB3cm9uZyBvciBjbGFzc3BhdGggaXMgbm90IHNldAotICAgICAqCQlwcm9wZXJseS4KKyAgICAgKiBAcmV0dXJuICAgIEluaXRpYWwgRGF0YVNvdXJjZSBPYmplY3QgaW5zdGFuY2UuCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gSWYgY2xhc3MgbmFtZSBpcyB3cm9uZyBvciBjbGFzc3BhdGggaXMgbm90IHNldAorICAgICAqICAgICAgICBwcm9wZXJseS4KICAgICAgKi8KICAgICBwcml2YXRlIE9iamVjdCBnZXREYXRhU291cmNlT2JqZWN0KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlTdHJpbmcgY2xhc3NOYW1lID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKLSAgICAgICAgdHJ5IHsgICAgICAgICAgICAKKyAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBkYXRhU291cmNlQ2xhc3MgPSBDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSk7CiAgICAgICAgICAgICBPYmplY3QgZGF0YVNvdXJjZU9iamVjdCA9IGRhdGFTb3VyY2VDbGFzcy5uZXdJbnN0YW5jZSgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWMy1URVNUIDogIiAgKyBkYXRhU291cmNlT2JqZWN0KTsKICAgICAgICAgICAgIHJldHVybiBkYXRhU291cmNlT2JqZWN0OwogICAgICAgICB9IGNhdGNoKENsYXNzTm90Rm91bmRFeGNlcHRpb24gY2ZuZSl7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NuZmVfZHMiLCBjZm5lKTsKLQkKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY25mZV9kcyIsIGNmbmUpOworCiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNsYXNzIE5hbWUgaXMgd3Jvbmcgb3IgQ2xhc3MgcGF0aCBpcyBub3Qgc2V0IGZvciA6IiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBjZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pbnN0IiwgY2xhc3NOYW1lKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaW5zdCIsIGNsYXNzTmFtZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkVycm9yIGluIGluc3RhbnRpYXRpbmciICsgY2xhc3NOYW1lKTsKICAgICAgICAgfSBjYXRjaChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGNlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2FjY19pbnN0IiwgY2xhc3NOYW1lKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYWNjX2luc3QiLCBjbGFzc05hbWUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgRXJyb3IgaW4gaW5zdGFudGlhdGluZyIgKyBjbGFzc05hbWUpOwogICAgICAgICB9CiAgICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCmluZGV4IGVmNmM0YzkuLjNkYzE1NGQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKQEAgLTE5LDkyICsxOSw5MiBAQAogaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7CiAKIC8qKgotICogRW5jYXBzdWxhdGUgdGhlIERhdGFTb3VyY2Ugb2JqZWN0IGRldGFpbHMgb2J0YWluZWQgZnJvbSAKKyAqIEVuY2Fwc3VsYXRlIHRoZSBEYXRhU291cmNlIG9iamVjdCBkZXRhaWxzIG9idGFpbmVkIGZyb20KICAqIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2VTcGVjIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VSTkFNRQkJCQk9IDE7ICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBU1NXT1JECQkJCT0gMjsgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVSTAkJCQkJPSAzOyAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HSU5USU1FT1VUCQkJPSA0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR1dSSVRFUgkJCQk9IDU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQUJBU0VOQU1FCQkJPSA2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0VOQU1FCQkJPSA3OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFU0NSSVBUSU9OCQkJCT0gODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLUFJPVE9DT0wJCQk9IDk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9SVE5VTUJFUgkJCQk9IDEwOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPTEVOQU1FCQkJCT0gMTE7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVkVSTkFNRQkJCQk9IDEyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFNUQVRFTUVOVFMJCQk9IDEzOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOSVRJQUxQT09MU0laRQkJCT0gMTQ7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOUE9PTFNJWkUJCQkJPSAxNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhQT09MU0laRQkJCQk9IDE2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWElETEVUSU1FCQkJCT0gMTc7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlDWUNMRQkJCT0gMTg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRFJJVkVSUFJPUEVSVElFUwkJCT0gMTk7ICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMQVNTTkFNRQkJCQk9IDIwOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFTElNSVRFUgkJCQk9IDIxOwotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFhBREFUQVNPVVJDRQkJCT0gMjI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRQkJCQk9IDIzOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05QT09MREFUQVNPVVJDRQkJPSAyNDsKLSAgICAgIAotICAgIC8vR0pDSU5UICAgICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRAk9IDI1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05NRVRIT0QJCQk9IDI2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05UQUJMRU5BTUUJCQk9IDI3OwotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRSQU5TQUNUSU9OSVNPTEFUSU9OCQk9IDI4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdVQVJBTlRFRUlTT0xBVElPTkxFVkVMCQk9IDI5OwotICAgICAgICAgICAgCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUk5BTUUgICAgICAgICAgICAgICAgPSAxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBU1NXT1JEICAgICAgICAgICAgICAgID0gMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVUkwgICAgICAgICAgICAgICAgICAgID0gMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dJTlRJTUVPVVQgICAgICAgICAgICA9IDQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HV1JJVEVSICAgICAgICAgICAgICAgID0gNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBQkFTRU5BTUUgICAgICAgICAgICA9IDY7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRU5BTUUgICAgICAgICAgICA9IDc7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgPSA4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktQUk9UT0NPTCAgICAgICAgICAgID0gOTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1JUTlVNQkVSICAgICAgICAgICAgICAgID0gMTA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9MRU5BTUUgICAgICAgICAgICAgICAgPSAxMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVJWRVJOQU1FICAgICAgICAgICAgICAgID0gMTI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYU1RBVEVNRU5UUyAgICAgICAgICAgID0gMTM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5JVElBTFBPT0xTSVpFICAgICAgICAgICAgPSAxNDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSU5QT09MU0laRSAgICAgICAgICAgICAgICA9IDE1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFBPT0xTSVpFICAgICAgICAgICAgICAgID0gMTY7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYSURMRVRJTUUgICAgICAgICAgICAgICAgPSAxNzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWUNZQ0xFICAgICAgICAgICAgPSAxODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEUklWRVJQUk9QRVJUSUVTICAgICAgICAgICAgPSAxOTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTEFTU05BTUUgICAgICAgICAgICAgICAgPSAyMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUxJTUlURVIgICAgICAgICAgICAgICAgPSAyMTsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFhBREFUQVNPVVJDRSAgICAgICAgICAgID0gMjI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRSAgICAgICAgICAgICAgICA9IDIzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05QT09MREFUQVNPVVJDRSAgICAgICAgPSAyNDsKKworICAgIC8vR0pDSU5UCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCAgICA9IDI1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05NRVRIT0QgICAgICAgICAgICA9IDI2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05UQUJMRU5BTUUgICAgICAgICAgICA9IDI3OworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNBQ1RJT05JU09MQVRJT04gICAgICAgID0gMjg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwgICAgICAgID0gMjk7CisKICAgICBwcml2YXRlIEhhc2h0YWJsZSBkZXRhaWxzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBwcm9wZXJ0eS4KICAgICAgKgotICAgICAqIEBwYXJhbQlwcm9wZXJ0eQlQcm9wZXJ0eSBOYW1lIHRvIGJlIHNldC4KLSAgICAgKiBAcGFyYW0JdmFsdWUJCVZhbHVlIG9mIHByb3BlcnR5IHRvIGJlIHNldC4KKyAgICAgKiBAcGFyYW0gICAgcHJvcGVydHkgICAgUHJvcGVydHkgTmFtZSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIHZhbHVlICAgICAgICBWYWx1ZSBvZiBwcm9wZXJ0eSB0byBiZSBzZXQuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGV0YWlsKGludCBwcm9wZXJ0eSwgU3RyaW5nIHZhbHVlKSB7Ci0gICAgCWRldGFpbHMucHV0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSx2YWx1ZSk7CisgICAgICAgIGRldGFpbHMucHV0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSx2YWx1ZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSB2YWx1ZSBvZiBwcm9wZXJ0eQogICAgICAqCi0gICAgICogQHJldHVybglWYWx1ZSBvZiB0aGUgcHJvcGVydHkuCisgICAgICogQHJldHVybiAgICBWYWx1ZSBvZiB0aGUgcHJvcGVydHkuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZXRhaWwoaW50IHByb3BlcnR5KSB7Ci0gICAgCWlmIChkZXRhaWxzLmNvbnRhaW5zS2V5KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSkpIHsKLSAgICAJICAgIHJldHVybiAoU3RyaW5nKSBkZXRhaWxzLmdldChuZXcgSW50ZWdlcihwcm9wZXJ0eSkpOwotICAgIAl9IGVsc2UgewotICAgIAkgICAgcmV0dXJuIG51bGw7Ci0gICAgCX0gICAgCQorICAgICAgICBpZiAoZGV0YWlscy5jb250YWluc0tleShuZXcgSW50ZWdlcihwcm9wZXJ0eSkpKSB7CisgICAgICAgICAgICByZXR1cm4gKFN0cmluZykgZGV0YWlscy5nZXQobmV3IEludGVnZXIocHJvcGVydHkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIHdoZXRoZXIgdHdvIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3RzCiAgICAgICogYXJlIGVxdWFsIG9yIG5vdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlvYmoJSW5zdGFuY2Ugb2YgPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIEluc3RhbmNlIG9mIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKLSAgICAJaWYgKG9iaiBpbnN0YW5jZW9mIERhdGFTb3VyY2VTcGVjKSB7Ci0gICAgCSAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmVxdWFscygoKERhdGFTb3VyY2VTcGVjKW9iaikuZGV0YWlscyk7Ci0gICAgCX0KLSAgICAJcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgRGF0YVNvdXJjZVNwZWMpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmRldGFpbHMuZXF1YWxzKCgoRGF0YVNvdXJjZVNwZWMpb2JqKS5kZXRhaWxzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBoYXNoQ29kZSBvZiB0aGlzIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhhc2hDb2RlIG9mIHRoaXMgb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgaGFzaENvZGUgb2YgdGhpcyBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKLSAgICAJcmV0dXJuIHRoaXMuZGV0YWlscy5oYXNoQ29kZSgpOwotICAgIH0gICAgCisgICAgICAgIHJldHVybiB0aGlzLmRldGFpbHMuaGFzaENvZGUoKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sCmluZGV4IGVmNDM4ZmMuLjNiNGZhZWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIuIiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvY29tbW9uIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTM2LDEzICszNiwxMyBAQAogCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTEzIiBkZXBlbmRzPSJjb21waWxlIi8+CiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTE0IiBkZXBlbmRzPSJjb21waWxlIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0icGFja2FnZTEzIiBkZXBlbmRzPSJwYWNrYWdlIi8+CiAgIDx0YXJnZXQgbmFtZT0icGFja2FnZTE0IiBkZXBlbmRzPSJwYWNrYWdlIi8+CiAKICAgPHRhcmdldCBuYW1lPSJidWlsZDEzIiBkZXBlbmRzPSJjb21waWxlMTMsIHBhY2thZ2UxMyIvPgogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCwgcGFja2FnZTE0Ii8+Ci0gICAgCisKICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKaW5kZXggYTk1NmQ5Ny4uMTFhZDc0NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQpAQCAtMjQsMjQgKzI0LDI0IEBACiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3I7CiAKIC8qKgotICogSG9sZHMgdGhlIGphdmEuc3FsLkNvbm5lY3Rpb24gb2JqZWN0LCB3aGljaCBpcyB0byBiZSAKKyAqIEhvbGRzIHRoZSBqYXZhLnNxbC5Db25uZWN0aW9uIG9iamVjdCwgd2hpY2ggaXMgdG8gYmUKICAqIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbS4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwotcHVibGljIGNsYXNzIENvbm5lY3Rpb25Ib2xkZXIgaW1wbGVtZW50cyBDb25uZWN0aW9ueyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uSG9sZGVyIGltcGxlbWVudHMgQ29ubmVjdGlvbnsKIAogICAgIHByaXZhdGUgQ29ubmVjdGlvbiBjb247Ci0gICAgCisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAotICAgIHByaXZhdGUgYm9vbGVhbiB3cmFwcGVkQWxyZWFkeSA9IGZhbHNlOyAgICAKLSAgICAKKworICAgIHByaXZhdGUgYm9vbGVhbiB3cmFwcGVkQWxyZWFkeSA9IGZhbHNlOworCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzQ2xvc2VkID0gZmFsc2U7Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gdmFsaWQgPSB0cnVlOwotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGFjdGl2ZSA9IGZhbHNlOwogICAgIC8qKgogICAgICAqIFRoZSBhY3RpdmUgZmxhZyBpcyBmYWxzZSB3aGVuIHRoZSBjb25uZWN0aW9uIGhhbmRsZSBpcwpAQCAtNTMsMjE5ICs1MywyMTkgQEAKICAgICAgKiBmdW5jdGlvbiwgdGhlIGFib3ZlIG1ldGhvZCBpbnZvY2F0aW9uIHN1Y2NlZWRzOyBvdGhlcndpc2UKICAgICAgKiBhbiBleGNlcHRpb24gaXMgdGhyb3duLgogICAgICAqLwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0cyBhIENvbm5lY3Rpb24gaG9sZGVyLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb25Ib2xkZXIoQ29ubmVjdGlvbiBjb24sIE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7CiAgICAgICAgIHRoaXMuY29uID0gY29uOwogICAgICAgICB0aGlzLm1jICA9IG1jOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiB0aGlzIGhvbGRlciBvYmplY3QuCi0gICAgICogCi0gICAgICogQHJldHVybglDb25uZWN0aW9uIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgQ29ubmVjdGlvbiBvYmplY3QuCiAgICAgICovCiAgICAgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uKCkgewotICAgIAlyZXR1cm4gY29uOworICAgICAgICByZXR1cm4gY29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCwgdGhlIGNvbm5lY3Rpb24gaXMgd3JhcHBlZCBhbHJlYWR5IG9yIG5vdC4KICAgICAgKgotICAgICAqIEBwYXJhbQl3cmFwRmxhZwkKKyAgICAgKiBAcGFyYW0gICAgd3JhcEZsYWcKICAgICAgKi8KICAgICB2b2lkIHdyYXBwZWQoYm9vbGVhbiB3cmFwRmxhZyl7CiAgICAgICAgIHRoaXMud3JhcHBlZEFscmVhZHkgPSB3cmFwRmxhZzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHdoZXRoZXIgaXQgaXMgd3JhcHBlZCBhbHJlYWR5IG9yIG5vdC4KICAgICAgKgotICAgICAqIEByZXR1cm4Jd3JhcHBlZCBmbGFnLgorICAgICAqIEByZXR1cm4gICAgd3JhcHBlZCBmbGFnLgogICAgICAqLwogICAgIGJvb2xlYW4gaXNXcmFwcGVkKCl7CiAgICAgICAgIHJldHVybiB3cmFwcGVkQWxyZWFkeTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UgcmVzcG9uc2libGUKICAgICAgKiBmb3IgdGhpcyBjb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICovCiAgICAgTWFuYWdlZENvbm5lY3Rpb24gZ2V0TWFuYWdlZENvbm5lY3Rpb24oKSB7CiAgICAgICAgIHJldHVybiBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXBsYWNlIHRoZSBhY3R1YWwgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IHdpdGggdGhlIG9uZQotICAgICAqIHN1cHBsaWVkLiBBbHNvIHJlcGxhY2UgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGxpbmsuICAgICAKKyAgICAgKiBzdXBwbGllZC4gQWxzbyByZXBsYWNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBsaW5rLgogICAgICAqCi0gICAgICogQHBhcmFtCWNvbiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCW1jICA8Y29kZT4gTWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgY29uIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgbWMgIDxjb2RlPiBNYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHZvaWQgYXNzb2NpYXRlQ29ubmVjdGlvbihDb25uZWN0aW9uIGNvbiwgTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKLSAgICAJdGhpcy5tYyA9IG1jOwotICAgIAl0aGlzLmNvbiA9IGNvbjsKKyAgICAgICAgdGhpcy5tYyA9IG1jOworICAgICAgICB0aGlzLmNvbiA9IGNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDbGVhcnMgYWxsIHdhcm5pbmdzIHJlcG9ydGVkIGZvciB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9uICBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNsZWFyV2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueyAgICAKLQljaGVja1ZhbGlkaXR5KCk7CisgICAgcHVibGljIHZvaWQgY2xlYXJXYXJuaW5ncygpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBjb24uY2xlYXJXYXJuaW5ncygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENsb3NlcyB0aGUgbG9naWNhbCBjb25uZWN0aW9uLiAgICAKKyAgICAgKiBDbG9zZXMgdGhlIGxvZ2ljYWwgY29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgICAgaXNDbG9zZWQgPSB0cnVlOwotICAgICAgICBtYy5jb25uZWN0aW9uQ2xvc2VkKG51bGwsIHRoaXMpOyAgICAgICAgCisgICAgICAgIG1jLmNvbm5lY3Rpb25DbG9zZWQobnVsbCwgdGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogSW52YWxpZGF0ZXMgdGhpcyBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgaW52YWxpZGF0ZSgpIHsKLSAgICAJdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDbG9zZXMgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaW52b2x2ZWQgaW4gdGhpcy4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCi0gICAgdm9pZCBhY3R1YWxDbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257ICAgIAorICAgIHZvaWQgYWN0dWFsQ2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgICBjb24uY2xvc2UoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21taXQgdGhlIGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLmNvbW1pdCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLmNvbW1pdCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzdGF0ZW1lbnQgZnJvbSB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzdGF0ZW1lbnQgZnJvbSB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LiAgICAgCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoaW50IHJlc3VsdFNldFR5cGUsIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgIAotICAgICAqIEByZXR1cm4JPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAgICAgCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0SG9sZGFiaWxpdHkgICAgUmVzdWx0U2V0IEhvbGRhYmlsaXR5LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwotICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KGludCByZXN1bHRTZXRUeXBlLCBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksIAotICAgIAkJCQkgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkgICAgIAorICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KGludCByZXN1bHRTZXRUeXBlLCBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQocmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCi0gICAgICAgIAkJCSAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKICAgICB9Ci0gCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgYXV0by1jb21taXQgbW9kZSBmb3IgdGhlIHVuZGVybHlpbmcgPGNvZGU+IENvbm5lY3Rpb248L2NvZGU+LgogICAgICAqCiAgICAgICogQHJldHVybiBUaGUgY3VycmVudCBzdGF0ZSBvZiBjb25uZWN0aW9uJ3MgYXV0by1jb21taXQgbW9kZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGdldEF1dG9Db21taXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldEF1dG9Db21taXQoKTsKLSAgICB9ICAgCi0gCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldEF1dG9Db21taXQoKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHVuZGVybHlpbmcgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0J3MgY2F0YWxvZyBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglDYXRhbG9nIE5hbWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgQ2F0YWxvZyBOYW1lLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENhdGFsb2coKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5nZXRDYXRhbG9nKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGhvbGRhYmlsaXR5IG9mIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gb2JqZWN0cyBjcmVhdGVkCiAgICAgICogdXNpbmcgdGhpcyBjb25uZWN0aW9uIG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaG9sZGFiaWxpdHkgdmFsdWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgaG9sZGFiaWxpdHkgdmFsdWUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0SG9sZGFiaWxpdHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4JY29uLmdldEhvbGRhYmlsaXR5KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gICAgY29uLmdldEhvbGRhYmlsaXR5KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT5EYXRhYmFzZU1ldGFEYXRhPC9jb2RlPm9iamVjdCBmcm9tIHRoZSB1bmRlcmx5aW5nCiAgICAgICogPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIDxjb2RlPkRhdGFiYXNlTWV0YURhdGE8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhYmFzZU1ldGFEYXRhIGdldE1ldGFEYXRhKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRNZXRhRGF0YSgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRNZXRhRGF0YSgpOwogICAgIH0KLSAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCdzIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgogICAgICAqCiAgICAgICogQHJldHVybiBUcmFuc2FjdGlvbiBsZXZlbAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIGludCBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggCisgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhc3NvY2lhdGVkIHdpdGgKICAgICAgKiA8Y29kZT4gQ29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybglUeXBlTWFwIHNldCBpbiB0aGlzIG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICBUeXBlTWFwIHNldCBpbiB0aGlzIG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIE1hcCBnZXRUeXBlTWFwKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRUeXBlTWFwKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldFR5cGVNYXAoKTsKICAgICB9CiAKIC8qCkBAIC0yNzksMTg0ICsyNzksMTg0IEBACiAgICAgICogPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiBGaXJzdCA8Y29kZT4gU1FMV2FybmluZzwvY29kZT4gT2JqZWN0IG9yIG51bGwuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU1FMV2FybmluZyBnZXRXYXJuaW5ncygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0V2FybmluZ3MoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0V2FybmluZ3MoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgd2hldGhlciB1bmRlcmx5aW5nIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyBjbG9zZWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIGNsb3NlZCwgZmFsc2UKLSAgICAgKiAJCWlmIGl0IGlzIGNsb3NlZC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyBjbG9zZWQsIGZhbHNlCisgICAgICogICAgICAgICBpZiBpdCBpcyBjbG9zZWQuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzQ2xvc2VkKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXJldHVybiBpc0Nsb3NlZDsKKyAgICAgICAgcmV0dXJuIGlzQ2xvc2VkOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB3aGV0aGVyIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIHJlYWQtb25seS4KICAgICAgKgotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IGlzIHJlYWQtb25seSwgZmFsc2Ugb3RoZXItd2lzZQotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBpcyByZWFkLW9ubHksIGZhbHNlIG90aGVyLXdpc2UKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNSZWFkT25seSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uaXNSZWFkT25seSgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5pc1JlYWRPbmx5KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29udmVydHMgdGhlIGdpdmVuIFNRTCBzdGF0ZW1lbnQgaW50byB0aGUgc3lzdGVtJ3MgbmF0aXZlIFNRTCBncmFtbWVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgc3RhdGVtZW50ICwgdG8gYmUgY29udmVydGVkLgotICAgICAqIEByZXR1cm4JQ29udmVydGVkIFNRTCBzdHJpbmcuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIHN0YXRlbWVudCAsIHRvIGJlIGNvbnZlcnRlZC4KKyAgICAgKiBAcmV0dXJuICAgIENvbnZlcnRlZCBTUUwgc3RyaW5nLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIG5hdGl2ZVNRTChTdHJpbmcgc3FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLm5hdGl2ZVNRTChzcWwpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5uYXRpdmVTUUwoc3FsKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCiAgICAgICogc3RvcmVkIHByb2NlZHVyZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKICAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQotICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQlpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCQotICAgIAlyZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCi0gICAgICogc3RvcmVkIHByb2NlZHVyZXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRIb2xkYWJpbGl0eQlSZXN1bHRTZXQgSG9sZGFiaWxpdHkuICAgICAgICAgIAotICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCi0gICAgCQkJICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwpOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQorICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQorICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0SG9sZGFiaWxpdHkgICAgUmVzdWx0U2V0IEhvbGRhYmlsaXR5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKICAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAogICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwpOwogICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCWF1dG9HZW5lcmF0ZWRLZXlzIGEgZmxhZyBpbmRpY2F0aW5nIEF1dG9HZW5lcmF0ZWRLZXlzIG5lZWQgdG8gYmUgcmV0dXJuZWQuCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IGF1dG9HZW5lcmF0ZWRLZXlzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGF1dG9HZW5lcmF0ZWRLZXlzKTsKLSAgICB9ICAgIAotICAgICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQljb2x1bW5JbmRleGVzIGFuIGFycmF5IG9mIGNvbHVtbiBpbmRleGVzIGluZGljYXRpbmcgdGhlIGNvbHVtbnMgdGhhdCBzaG91bGQgYmUKLSAgICAgKgkJcmV0dXJuZWQgZnJvbSB0aGUgaW5zZXJ0ZWQgcm93IG9yIHJvd3MuCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50W10gY29sdW1uSW5kZXhlcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5JbmRleGVzKTsKLSAgICB9ICAgICAgICAgIAotIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgICAgICAKLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCSAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCi0gICAgCQkJCSAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKLSAgICB9ICAgICAgICAgICAKIAogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZwogICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCWNvbHVtbk5hbWVzIE5hbWUgb2YgYm91bmQgY29sdW1ucy4KKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgYXV0b0dlbmVyYXRlZEtleXMgYSBmbGFnIGluZGljYXRpbmcgQXV0b0dlbmVyYXRlZEtleXMgbmVlZCB0byBiZSByZXR1cm5lZC4KICAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IGF1dG9HZW5lcmF0ZWRLZXlzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsYXV0b0dlbmVyYXRlZEtleXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBjb2x1bW5JbmRleGVzIGFuIGFycmF5IG9mIGNvbHVtbiBpbmRleGVzIGluZGljYXRpbmcgdGhlIGNvbHVtbnMgdGhhdCBzaG91bGQgYmUKKyAgICAgKiAgICAgICAgcmV0dXJuZWQgZnJvbSB0aGUgaW5zZXJ0ZWQgcm93IG9yIHJvd3MuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50W10gY29sdW1uSW5kZXhlcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbkluZGV4ZXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRIb2xkYWJpbGl0eSAgICBSZXN1bHRTZXQgSG9sZGFiaWxpdHkuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGNvbHVtbk5hbWVzIE5hbWUgb2YgYm91bmQgY29sdW1ucy4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBTdHJpbmdbXSBjb2x1bW5OYW1lcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5OYW1lcyk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbk5hbWVzKTsKICAgICB9CiAKICAgICBwdWJsaWMgQ2xvYiBjcmVhdGVDbG9iKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CkBAIC01MDYsMTYyICs1MDYsMTYyIEBACiAgICAgLyoqCiAgICAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4gPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QgZnJvbSB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlzYXZlcG9pbnQJPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHNhdmVwb2ludCAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByZWxlYXNlU2F2ZXBvaW50KFNhdmVwb2ludCBzYXZlcG9pbnQpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yZWxlYXNlU2F2ZXBvaW50KHNhdmVwb2ludCk7Ci0gICAgfSAKLSAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5yZWxlYXNlU2F2ZXBvaW50KHNhdmVwb2ludCk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUm9sbHMgYmFjayB0aGUgY2hhbmdlcyBtYWRlIGluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLyAgICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJvbGxiYWNrKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucm9sbGJhY2soKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSb2xscyBiYWNrIHRoZSBjaGFuZ2VzIG1hZGUgYWZ0ZXIgdGhlIHNhdmVwb2ludC4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjayhTYXZlcG9pbnQgc2F2ZXBvaW50KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucm9sbGJhY2soc2F2ZXBvaW50KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5yb2xsYmFjayhzYXZlcG9pbnQpOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBhdXRvLWNvbW1taXQgbW9kZSBvZiB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCWF1dG9Db21taXQgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBhdXRvLWNvbW1pdCBtb2RlLiAgICAgCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBhdXRvQ29tbWl0IGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB0aGUgYXV0by1jb21taXQgbW9kZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0QXV0b0NvbW1pdChib29sZWFuIGF1dG9Db21taXQpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRBdXRvQ29tbWl0KGF1dG9Db21taXQpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldEF1dG9Db21taXQoYXV0b0NvbW1pdCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgY2F0YWxvZyBuYW1lIHRvIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QKICAgICAgKgotICAgICAqIEBwYXJhbQljYXRhbG9nCUNhdGFsb2cgbmFtZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGNhdGFsb2cgICAgQ2F0YWxvZyBuYW1lLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDYXRhbG9nKFN0cmluZyBjYXRhbG9nKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0Q2F0YWxvZyhjYXRhbG9nKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRDYXRhbG9nKGNhdGFsb2cpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFNldHMgdGhlIGhvbGRhYmlsaXR5IG9mIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gb2JqZWN0cyBjcmVhdGVkIAorICAgICAqIFNldHMgdGhlIGhvbGRhYmlsaXR5IG9mIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gb2JqZWN0cyBjcmVhdGVkCiAgICAgICogdXNpbmcgdGhpcyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JaG9sZGFiaWxpdHkJQSA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IGhvbGRhYmlsaXR5IGNvbnN0YW50Ci0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBob2xkYWJpbGl0eSAgICBBIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gaG9sZGFiaWxpdHkgY29uc3RhbnQKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0SG9sZGFiaWxpdHkoaW50IGhvbGRhYmlsaXR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgICAJY29uLnNldEhvbGRhYmlsaXR5KGhvbGRhYmlsaXR5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgICBjb24uc2V0SG9sZGFiaWxpdHkoaG9sZGFiaWxpdHkpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFB1dHMgdGhlIGNvbm5lY3Rpb24gaW4gcmVhZC1vbmx5IG1vZGUgYXMgYSBoaW50IHRvIHRoZSBkcml2ZXIgdG8gCisgICAgICogUHV0cyB0aGUgY29ubmVjdGlvbiBpbiByZWFkLW9ubHkgbW9kZSBhcyBhIGhpbnQgdG8gdGhlIGRyaXZlciB0bwogICAgICAqIHBlcmZvcm0gZGF0YWJhc2Ugb3B0aW1pemF0aW9ucy4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZWFkT25seSAgdHJ1ZSBlbmFibGVzIHJlYWQtb25seSBtb2RlLCBmYWxzZSBkaXNhYmxlcyBpdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHJlYWRPbmx5ICB0cnVlIGVuYWJsZXMgcmVhZC1vbmx5IG1vZGUsIGZhbHNlIGRpc2FibGVzIGl0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSZWFkT25seShib29sZWFuIHJlYWRPbmx5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0UmVhZE9ubHkocmVhZE9ubHkpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldFJlYWRPbmx5KHJlYWRPbmx5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGFuZCB1bm5hbWVkIHNhdmVwb2ludCBhbmQgcmV0dXJucyBhbiBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGF0LgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgogICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU2F2ZXBvaW50IHNldFNhdmVwb2ludCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uc2V0U2F2ZXBvaW50KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnNldFNhdmVwb2ludCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzYXZlcG9pbnQgd2l0aCB0aGUgbmFtZSBhbmQgcmV0dXJucyBhbiBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGF0LgogICAgICAqCi0gICAgICogQHBhcmFtCW5hbWUJTmFtZSBvZiB0aGUgc2F2ZXBvaW50LgotICAgICAqIEByZXR1cm4JPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBuYW1lICAgIE5hbWUgb2YgdGhlIHNhdmVwb2ludC4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU2F2ZXBvaW50IHNldFNhdmVwb2ludChTdHJpbmcgbmFtZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQobmFtZSk7Ci0gICAgfSAgICAKLSAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uc2V0U2F2ZXBvaW50KG5hbWUpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlsZXZlbCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBsZXZlbCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKGludCBsZXZlbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKGxldmVsKTsKLSAgICB9ICAgICAKLSAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbihsZXZlbCk7CisgICAgfQorCiAgICAgLyoqCi0gICAgICogSW5zdGFsbHMgdGhlIGdpdmVuIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzIHRoZSB0eW9lIG1hcCBmb3IgdGhpcyAKKyAgICAgKiBJbnN0YWxscyB0aGUgZ2l2ZW4gPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXMgdGhlIHR5b2UgbWFwIGZvciB0aGlzCiAgICAgICogPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWFwCTxjb2RlPk1hcDwvY29kZT4gYSBNYXAgb2JqZWN0IHRvIGluc3RhbGwuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBtYXAgICAgPGNvZGU+TWFwPC9jb2RlPiBhIE1hcCBvYmplY3QgdG8gaW5zdGFsbC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VHlwZU1hcChNYXAgbWFwKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7Ci0gICAgCWNvbi5zZXRUeXBlTWFwKG1hcCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0VHlwZU1hcChtYXApOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TmV0d29ya1RpbWVvdXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0TmV0d29ya1RpbWVvdXQoRXhlY3V0b3IgZXhlY3V0b3IsIGludCBtaWxsaXNlY29uZHMpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhYm9ydChFeGVjdXRvciBleGVjdXRvcikgIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2NoZW1hKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0U2NoZW1hKFN0cmluZyBzY2hlbWEpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIHRoZSB2YWxpZGl0eSBvZiB0aGlzIG9iamVjdAogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBjaGVja1ZhbGlkaXR5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCWlmIChpc0Nsb3NlZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkNvbm5lY3Rpb24gY2xvc2VkIik7Ci0gICAgCWlmICghdmFsaWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJJbnZhbGlkIENvbm5lY3Rpb24iKTsKLSAgICAJaWYoYWN0aXZlID09IGZhbHNlKSB7Ci0gICAgCSAgICBtYy5jaGVja0lmQWN0aXZlKHRoaXMpOwotICAgIAl9CisgICAgICAgIGlmIChpc0Nsb3NlZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkNvbm5lY3Rpb24gY2xvc2VkIik7CisgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJJbnZhbGlkIENvbm5lY3Rpb24iKTsKKyAgICAgICAgaWYoYWN0aXZlID09IGZhbHNlKSB7CisgICAgICAgICAgICBtYy5jaGVja0lmQWN0aXZlKHRoaXMpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgYWN0aXZlIGZsYWcgdG8gdHJ1ZQogICAgICAqCi0gICAgICogQHBhcmFtCWFjdHYJYm9vbGVhbgorICAgICAqIEBwYXJhbSAgICBhY3R2ICAgIGJvb2xlYW4KICAgICAgKi8KICAgICB2b2lkIHNldEFjdGl2ZShib29sZWFuIGFjdHYpIHsKICAgICAgICAgYWN0aXZlID0gYWN0djsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKaW5kZXggYWM3ZTc0OC4uZjA2NzVhNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTMzLDE5ICszMywxOSBAQAogICogVGhpcyBjbGFzcyBpcyBleHRlbmRlZCBieSB0aGUgRGF0YVNvdXJjZSBzcGVjaWZpYyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gZmFjdG9yaWVzCiAgKiBhbmQgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gZm9yIHRoZSA8Y29kZT5Ecml2ZXJNYW5hZ2VyPC9jb2RlPi4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzAzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LCAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnksCiAgICAgamF2YS5pby5TZXJpYWxpemFibGUgewotICAgIAorCiAgICAgcHJvdGVjdGVkIERhdGFTb3VyY2VTcGVjIHNwZWMgPSBuZXcgRGF0YVNvdXJjZVNwZWMoKTsKICAgICBwcm90ZWN0ZWQgdHJhbnNpZW50IERhdGFTb3VyY2VPYmplY3RCdWlsZGVyIGRzT2JqQnVpbGRlcjsKLSAgICAKKwogICAgIHByb3RlY3RlZCBqYXZhLmlvLlByaW50V3JpdGVyIGxvZ1dyaXRlciA9IG51bGw7CiAgICAgcHJvdGVjdGVkIGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciByYSA9IG51bGw7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTQsOCArNTQsOCBAQAogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBDb25uZWN0aW9uIEZhY3RvcnkgaW5zdGFuY2UuIFRoZSA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gaW1wbGVtZW50YXRpb24KICAgICAgKiBvZiB0aGUgcmVzb3VyY2UgYWRhcHRlciBpcyB1c2VkIGhlcmUuCi0gICAgICogCi0gICAgICogQHJldHVybglHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgorICAgICAqCisgICAgICogQHJldHVybiAgICBHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgY3JlYXRlQ29ubmVjdGlvbkZhY3RvcnkoKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC02MywxNiArNjMsMTYgQEAKICAgICAgICAgfQogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSBjZiA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSgKICAgICAgICAgICAgIChqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpdGhpcywgbnVsbCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBjZjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgQ29ubmVjdGlvbiBGYWN0b3J5IGluc3RhbmNlLiBUaGUgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uCiAgICAgICogb2YgdGhlIGFwcGxpY2F0aW9uIHNlcnZlciBpcyB1c2VkIGhlcmUuCi0gICAgICogCi0gICAgICogQHBhcmFtCWN4TWFuYWdlcgk8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcmV0dXJuCUdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY3hNYW5hZ2VyICAgIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEByZXR1cm4gICAgR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGNyZWF0ZUNvbm5lY3Rpb25GYWN0b3J5KGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyIGN4TWFuYWdlcikgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtODAsNTUgKzgwLDU1IEBACiAgICAgICAgIH0KICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UgY2YgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UoCiAgICAgICAgICAgICAoamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KXRoaXMsIGN4TWFuYWdlcik7Ci0gICAgICAgIHJldHVybiBjZjsgCisgICAgICAgIHJldHVybiBjZjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgbmV3IHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgRUlTIHJlc291cmNlCiAgICAgICogbWFuYWdlci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBwYXJhbQljeFJlcXVlc3RJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0Ci0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAk8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCi0gICAgICogICAgICAgCQkJCWNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0Ci0gICAgICogQHRocm93cwlTZWN1cml0eUV4Y2VwdGlvbglpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0IAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqCQkJCQkJcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gICAgY3hSZXF1ZXN0SW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAorICAgICAqIEB0aHJvd3MgICAgU2VjdXJpdHlFeGNlcHRpb24gICAgaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdCBzdWJqZWN0LAogICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uOwotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvIAorICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0bwogICAgICAqIGFub3RoZXIgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jb3RoZXIJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCi0gICAgICoJCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIG90aGVyICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCisgICAgICogICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpOwotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHNlZQk8Y29kZT5zZXRMb2dXcml0ZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBqYXZhLmlvLlByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHsKICAgICAgICAgcmV0dXJuIGxvZ1dyaXRlcjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHNlZQk8Y29kZT5zZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJlc291cmNlQWRhcHRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIGdldFJlc291cmNlQWRhcHRlcigpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTEzNiwxMSArMTM2LDExIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJhOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LgogICAgICAqCi0gICAgICogQHJldHVybgloYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCl7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xNDgsNDEgKzE0OCw0MSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzcGVjLmhhc2hDb2RlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyBhIG1hdGNoZWQgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZyb20gdGhlIGNhbmRpZGF0ZSAKKyAgICAgKiBSZXR1cm5zIGEgbWF0Y2hlZCA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gZnJvbSB0aGUgY2FuZGlkYXRlCiAgICAgICogc2V0IG9mIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3RzLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb25uZWN0aW9uU2V0CTxjb2RlPlNldDwvY29kZT4gb2YgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqCQkJCW9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAkgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKgkJCWZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZwotICAgICAqIEBwYXJhbQljeFJlcXVlc3RJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKgkJCQlmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IGlzIHRoZSBiZXN0IG1hdGNoIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBhY2Nlc3NpbmcgdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+Ci0gICAgICoJCQkJCXBhcmFtZXRlciBvciB0aGUgPGNvZGU+U2V0PC9jb2RlPiBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKgkJCQkJb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbm5lY3Rpb25TZXQgICAgPGNvZGU+U2V0PC9jb2RlPiBvZiAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgICBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqICAgICAgICAgICAgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqICAgICAgICAgICAgICAgIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZworICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgaXMgdGhlIGJlc3QgbWF0Y2ggc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGFjY2Vzc2luZyB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIG9yIHRoZSA8Y29kZT5TZXQ8L2NvZGU+IG9mIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICBvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCiAgICAgICovCi0gICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1hdGNoTWFuYWdlZENvbm5lY3Rpb25zKGphdmEudXRpbC5TZXQgY29ubmVjdGlvblNldCwgCisgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1hdGNoTWFuYWdlZENvbm5lY3Rpb25zKGphdmEudXRpbC5TZXQgY29ubmVjdGlvblNldCwKICAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0IHN1YmplY3QsIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIG1hdGNoTWFuYWdlZENvbm5lY3Rpb25zIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoY29ubmVjdGlvblNldCA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGMgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLCBzdWJqZWN0LCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgCisKICAgICAgICAgamF2YS51dGlsLkl0ZXJhdG9yIGl0ZXIgPSBjb25uZWN0aW9uU2V0Lml0ZXJhdG9yKCk7CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG51bGw7CiAgICAgICAgIHdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1jID0gKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbikgaXRlci5uZXh0KCk7CiAgICAgICAgICAgICB9IGNhdGNoKGphdmEudXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uIG5zZWUpIHsKLQkgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2l0ZXIiKTsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2l0ZXIiKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24obnNlZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYocGMgPT0gbnVsbCAmJiB0aGlzLmVxdWFscyhtYy5nZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKSkpIHsKQEAgLTE5MSw3ICsxOTEsNyBAQAogICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkKG1jKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1jOwogICAgICAgICAgICAgICAgIH0gY2F0Y2goUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKLQkgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19yZSIsIHJlKTsKKyAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19yZSIsIHJlKTsKICAgICAgICAgICAgICAgICAgICAgbWMuY29ubmVjdGlvbkVycm9yT2NjdXJyZWQocmUsIG51bGwpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZihTZWN1cml0eVV0aWxzLmlzUGFzc3dvcmRDcmVkZW50aWFsRXF1YWwocGMsIG1jLmdldFBhc3N3b3JkQ3JlZGVudGlhbCgpKSA9PSB0cnVlKSB7CkBAIC0yMDAsNDUgKzIwMCw0NSBAQAogICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkKG1jKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1jOwogICAgICAgICAgICAgICAgIH0gY2F0Y2goUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKLQkgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLnJlIik7CisgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5yZSIpOwogICAgICAgICAgICAgICAgICAgICBtYy5jb25uZWN0aW9uRXJyb3JPY2N1cnJlZChyZSwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogICAgIC8vR0pDSU5UCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGlzIHRvIGJlIHZhbGlkYXRlZCBvciBub3QKICAgICAgKiBhbmQgdmFsaWRhdGVzIGl0IG9yIHJldHVybnMuCi0gICAgICogCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgotICAgICAqICAgICAgICAJICAgICAgICAgIAkJaWYgdmFsaWRhdGlvbiBtZXRob2QgaXMgbm90IHByb3BlcgorICAgICAqCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmFsaWRhdGlvbiBtZXRob2QgaXMgbm90IHByb3BlcgogICAgICAqLwogICAgIHZvaWQgaXNWYWxpZChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAKICAgICAgICAgaWYobWMuaXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSkgewotCSAgICByZXR1cm47CisgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgIAotICAgICAgICBib29sZWFuIGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQgPSAKKworICAgICAgICBib29sZWFuIGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQgPQogICAgICAgICAgICAgKG5ldyBCb29sZWFuKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpLnRvTG93ZXJDYXNlKCkpKS5ib29sZWFuVmFsdWUoKTsKICAgICAgICAgaWYoIGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQgPT0gZmFsc2UgfHwgbWMgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIFN0cmluZyB2YWxpZGF0aW9uTWV0aG9kID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCkudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgCisKICAgICAgICAgbWMuY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgYWJvdmUgY2FsbCBjaGVja3MgaWYgdGhlIGFjdHVhbCBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICAgICAqIGlzIHVzYWJsZSBvciBub3QuCiAgICAgICAgICAqLwogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAgICAgICAgCisKICAgICAgICAgaWYodmFsaWRhdGlvbk1ldGhvZC5lcXVhbHMoImF1dG8tY29tbWl0IikgPT0gdHJ1ZSkgewogICAgICAgICAgICAgaXNWYWxpZEJ5QXV0b0NvbW1pdChjb24pOwogICAgICAgICB9IGVsc2UgaWYodmFsaWRhdGlvbk1ldGhvZC5lcXVhbHNJZ25vcmVDYXNlKCJtZXRhLWRhdGEiKSA9PSB0cnVlKSB7CkBAIC0yNDksMjggKzI0OSwyOCBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgdmFsaWRhdGlvbiBtZXRob2QgaXMgbm90IHByb3BlciIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90CiAgICAgICogYnkgY2hlY2tpbmcgaXRzIGF1dG8gY29tbWl0IHByb3BlcnR5LgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlBdXRvQ29tbWl0KGphdmEuc3FsLkNvbm5lY3Rpb24gY29uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewotICAgICAgICAgICAvLyBOb3RpY2UgdGhhdCB1c2luZyBzb21ldGhpbmcgbGlrZSAKKyAgICAgICAgICAgLy8gTm90aWNlIHRoYXQgdXNpbmcgc29tZXRoaW5nIGxpa2UKICAgICAgICAgICAgLy8gZGJDb24uc2V0QXV0b0NvbW1pdChkYkNvbi5nZXRBdXRvQ29tbWl0KCkpIHdpbGwgY2F1c2UgcHJvYmxlbXMgd2l0aAogICAgICAgICAgICAvLyBzb21lIGRyaXZlcnMgbGlrZSBzeWJhc2UKLSAgICAgICAgICAgLy8gV2UgZG8gbm90IHZhbGlkYXRlIGNvbm5lY3Rpb25zIHRoYXQgYXJlIGFscmVhZHkgZW5saXN0ZWQgCi0JICAgLy9pbiBhIHRyYW5zYWN0aW9uIAotCSAgIC8vIFdlIGN5Y2xlIGF1dG9jb21taXQgdG8gdHJ1ZSBhbmQgZmFsc2UgdG8gYnktcGFzcyBkcml2ZXJzIHRoYXQgCi0JICAgLy8gbWlnaHQgY2FjaGUgdGhlIGNhbGwgdG8gc2V0IGF1dG9jb21pdHQKKyAgICAgICAgICAgLy8gV2UgZG8gbm90IHZhbGlkYXRlIGNvbm5lY3Rpb25zIHRoYXQgYXJlIGFscmVhZHkgZW5saXN0ZWQKKyAgICAgICAvL2luIGEgdHJhbnNhY3Rpb24KKyAgICAgICAvLyBXZSBjeWNsZSBhdXRvY29tbWl0IHRvIHRydWUgYW5kIGZhbHNlIHRvIGJ5LXBhc3MgZHJpdmVycyB0aGF0CisgICAgICAgLy8gbWlnaHQgY2FjaGUgdGhlIGNhbGwgdG8gc2V0IGF1dG9jb21pdHQKICAgICAgICAgICAgLy8gQWxzbyBub3RpY2UgdGhhdCBzb21lIFhBIGRhdGEgc291cmNlcyB3aWxsIHRocm93IGFuZCBleGNlcHRpb24gaWYKICAgICAgICAgICAgLy8geW91IHRyeSB0byBjYWxsIHNldEF1dG9Db21taXQsIGZvciB0aGVtIHRoaXMgbWV0aG9kIGlzIG5vdCByZWNvbW1lbmRlZAogCkBAIC0yODEsOTAgKzI4MSw5MCBAQAogICAgICAgICAgICAgICAgIGNvbi5yb2xsYmFjaygpOyAvLyBwcmV2ZW50cyB1bmNvbXBsZXRlZCB0cmFuc2FjdGlvbiBleGNlcHRpb25zCiAgICAgICAgICAgICAgICAgY29uLnNldEF1dG9Db21taXQodHJ1ZSk7CiAgICAgICAgICAgIH0KLSAgICAgICAgCi0JICAgY29uLnNldEF1dG9Db21taXQoYWMpOworCisgICAgICAgY29uLnNldEF1dG9Db21taXQoYWMpOwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYXV0b2NvbW1pdCIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hdXRvY29tbWl0Iik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90CiAgICAgICogYnkgY2hlY2tpbmcgaXRzIG1ldGEgZGF0YS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5TWV0YURhdGEoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBqYXZhLnNxbC5EYXRhYmFzZU1ldGFEYXRhIGRtZCA9IGNvbi5nZXRNZXRhRGF0YSgpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAiZ2V0dGluZyB0aGUgbWV0YSBkYXRhIGZhaWxlZDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IHF1ZXJ5aW5nIGEgdGFibGUuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAcGFyYW0JdGFibGVOYW1lCXRhYmxlIHdoaWNoIHNob3VsZCBiZSBxdWVyaWVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHBhcmFtICAgIHRhYmxlTmFtZSAgICB0YWJsZSB3aGljaCBzaG91bGQgYmUgcXVlcmllZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5VGFibGVRdWVyeShqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiwgCisgICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5VGFibGVRdWVyeShqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiwKICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGphdmEuc3FsLlN0YXRlbWVudCBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgamF2YS5zcWwuUmVzdWx0U2V0IHJzID0gc3RtdC5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gIiArIHRhYmxlTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZXhlY3V0ZSIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19leGVjdXRlIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAicXVlcnlpbmcgdGhlIHRhYmxlICIgKyB0YWJsZU5hbWUgKyAiIGZhaWxlZDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGlzb2xhdGlvbiBsZXZlbCBzcGVjaWZpZWQgaW4gdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KICAgICAgKiBmb3IgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBwYXNzZWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKLSAgICAgKgkJCQkJb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBzZXRJc29sYXRpb24oY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotICAgIAkKLSAgICAJamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gICAgCWlmKGNvbiA9PSBudWxsKSB7Ci0gICAgCSAgICByZXR1cm47Ci0gICAgCX0KLSAgICAJCi0gICAgCVN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwotICAgIAlpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7Ci0gICAgCSAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOwotICAgIAkgICAgdHJ5IHsKLSAgICAJICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7Ci0gICAgCSAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBjb3VsZCAiCi0gICAgCSAgICAgICAgICAgICsgIm5vdCBiZSBzZXQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICB9Ci0gICAgCX0KKworICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKKyAgICAgICAgaWYoY29uID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOworICAgICAgICBpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7CisgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CisgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBjb3VsZCAiCisgICAgICAgICAgICAgICAgICAgICsgIm5vdCBiZSBzZXQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXNldHMgdGhlIGlzb2xhdGlvbiBsZXZlbCBmb3IgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBwYXNzZWQuCiAgICAgICogSWYgdGhlIHRyYW5zYWN0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZQpAQCAtMzczLDM4MiArMzczLDM4MiBAQAogICAgICAqIGlzb2xhdGlvbiBsZXZlbCBmcm9tIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZC4gRWxzZSwKICAgICAgKiBpdCBzZXRzIGl0IHRvIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gcGFzc2VkLgogICAgICAqCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEBwYXJhbQl0cmFuSXNvbAlpbnQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAotICAgICAqCQkJCQlvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdHJhbklzb2wgICAgaW50CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICB2b2lkIHJlc2V0SXNvbGF0aW9uKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYywgaW50IHRyYW5Jc29sKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotICAgIAkKLSAgICAJamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gICAgCWlmKGNvbiA9PSBudWxsKSB7Ci0gICAgCSAgICByZXR1cm47Ci0gICAgCX0KLSAgICAJCi0gICAgCVN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwotICAgIAlpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7Ci0gICAgCSAgICBTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7Ci0gICAgCSAgICAKLSAgICAJICAgIGlmKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsICE9IG51bGwgJiYgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwuZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgICAgIGJvb2xlYW4gZ3VhcmFudGVlID0gKG5ldyBCb29sZWFuKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLnRvTG93ZXJDYXNlKCkpKS5ib29sZWFuVmFsdWUoKTsKLSAgICAJICAgICAgICAKLSAgICAJICAgICAgICBpZihndWFyYW50ZWUpIHsKLSAgICAJICAgICAgICAgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKLSAgICAJICAgICAgICAgICAgdHJ5IHsKLSAgICAJICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sYXRpb25JbnQgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKLSAgICAJICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7Ci0gICAgCSAgICAgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCi0gICAgCSAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICAgICAgICAgIH0KLSAgICAJICAgICAgICB9IGVsc2UgewotICAgIAkgICAgICAgICAgICB0cnkgewotICAgIAkgICAgICAgICAgICAgICAgaWYodHJhbklzb2wgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKLSAgICAJICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2wpOwotICAgIAkgICAgICAgICAgICAgICAgfQotICAgIAkgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgotICAgIAkgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgfQotICAgIAkgICAgfQotICAgIAl9CisKKyAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7CisgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKKyAgICAgICAgaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOworCisgICAgICAgICAgICBpZihndWFyYW50ZWVJc29sYXRpb25MZXZlbCAhPSBudWxsICYmIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgICAgICBib29sZWFuIGd1YXJhbnRlZSA9IChuZXcgQm9vbGVhbihndWFyYW50ZWVJc29sYXRpb25MZXZlbC50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7CisKKyAgICAgICAgICAgICAgICBpZihndWFyYW50ZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sYXRpb25JbnQgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYodHJhbklzb2wgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2wpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CisgICAgICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgaW50ZWdlciBlcXVpdmFsZW50IG9mIHRoZSBzdHJpbmcgc3BlY2lmeWluZwogICAgICAqIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHJhbklzb2xhdGlvbglzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uIGxldmVsCi0gICAgICogQHJldHVybgl0cmFuSXNvbGF0aW9uSW50CXRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBjb25zdGFudAotICAgICAqCQkJCQlmb3IgdGhlIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24uCisgICAgICogQHBhcmFtICAgIHRyYW5Jc29sYXRpb24gICAgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbklzb2xhdGlvbkludCAgICB0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gY29uc3RhbnQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uLgogICAgICAqLwogICAgIHByaXZhdGUgaW50IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KFN0cmluZyB0cmFuSXNvbGF0aW9uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotICAgIAlpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtdW5jb21taXR0ZWQiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9VTkNPTU1JVFRFRDsKLSAgICAJfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC1jb21taXR0ZWQiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9DT01NSVRURUQ7Ci0gICAgCX0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlcGVhdGFibGUtcmVhZCIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRVBFQVRBQkxFX1JFQUQ7Ci0gICAgCX0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInNlcmlhbGl6YWJsZSIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9TRVJJQUxJWkFCTEU7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkludmFsaWQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uOyB0aGUgdHJhbnNhY3Rpb24gIgotICAgIAkgICAgICAgICsgImlzb2xhdGlvbiBsZXZlbCBjYW4gYmUgZW1wdHkgb3IgYW55IG9mIHRoZSBmb2xsb3dpbmc6ICIKLSAgICAJICAgICAgICAgICAgKyAicmVhZC11bmNvbW1pdHRlZCwgcmVhZC1jb21taXR0ZWQsIHJlcGVhdGFibGUtcmVhZCwgc2VyaWFsaXphYmxlIik7Ci0gICAgCX0KKyAgICAgICAgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLXVuY29tbWl0dGVkIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfVU5DT01NSVRURUQ7CisgICAgICAgIH0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtY29tbWl0dGVkIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfQ09NTUlUVEVEOworICAgICAgICB9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZXBlYXRhYmxlLXJlYWQiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVQRUFUQUJMRV9SRUFEOworICAgICAgICB9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJzZXJpYWxpemFibGUiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fU0VSSUFMSVpBQkxFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJJbnZhbGlkIHRyYW5zYWN0aW9uIGlzb2xhdGlvbjsgdGhlIHRyYW5zYWN0aW9uICIKKyAgICAgICAgICAgICAgICArICJpc29sYXRpb24gbGV2ZWwgY2FuIGJlIGVtcHR5IG9yIGFueSBvZiB0aGUgZm9sbG93aW5nOiAiCisgICAgICAgICAgICAgICAgICAgICsgInJlYWQtdW5jb21taXR0ZWQsIHJlYWQtY29tbWl0dGVkLCByZXBlYXRhYmxlLXJlYWQsIHNlcmlhbGl6YWJsZSIpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb3V0CTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBvdXQgICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKGphdmEuaW8uUHJpbnRXcml0ZXIgb3V0KSB7CiAgICAgICAgIGxvZ1dyaXRlciA9IG91dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGFzc29jaWF0ZWQgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBKYXZhQmVhbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlyYQk8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+Z2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICByYSAgICA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5nZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVzb3VyY2VBZGFwdGVyKGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciByYSkgewotICAgICAgICB0aGlzLnJhID0gcmE7ICAgCisgICAgICAgIHRoaXMucmEgPSByYTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VXNlcihTdHJpbmcgdXNlcikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSwgdXNlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXVzZXIKKyAgICAgKiBAcmV0dXJuICAgIHVzZXIKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHVzZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHVzZXIoU3RyaW5nIHVzZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUsIHVzZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHJldHVybgl1c2VyCisgICAgICogQHJldHVybiAgICB1c2VyCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR1c2VyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcGFzc3dkCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcGFzc3dkICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRQYXNzd29yZChTdHJpbmcgcGFzc3dkKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JELCBwYXNzd2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBhc3N3ZAorICAgICAqIEByZXR1cm4gICAgcGFzc3dkCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRQYXNzd29yZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHBhcmFtCXBhc3N3ZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBhc3N3ZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0cGFzc3dvcmQoU3RyaW5nIHBhc3N3ZCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCwgcGFzc3dkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHJldHVybglwYXNzd2QKKyAgICAgKiBAcmV0dXJuICAgIHBhc3N3ZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0cGFzc3dvcmQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEBwYXJhbQljbGFzc05hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjbGFzc05hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSwgY2xhc3NOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHJldHVybgljbGFzc05hbWUKKyAgICAgKiBAcmV0dXJuICAgIGNsYXNzTmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2xhc3NOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHBhcmFtCWNsYXNzTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNsYXNzTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Y2xhc3NOYW1lKFN0cmluZyBjbGFzc05hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FLCBjbGFzc05hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNsYXNzTmFtZQorICAgICAqIEByZXR1cm4gICAgY2xhc3NOYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRjbGFzc05hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHBhcmFtCWNvblZsZFJlcQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNvblZsZFJlcSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZChTdHJpbmcgY29uVmxkUmVxKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQsIGNvblZsZFJlcSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29uVmxkUmVxCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY29uVmxkUmVxICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKFN0cmluZyBjb25WbGRSZXEpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCwgY29uVmxkUmVxKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEByZXR1cm4JY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CisgICAgICogQHJldHVybiAgICBjb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB2YWxpZGF0aW9uIG1ldGhvZCByZXF1aXJlZAogICAgICAqCi0gICAgICogQHBhcmFtCXZhbGlkYXRpb25NZXRob2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB2YWxpZGF0aW9uTWV0aG9kICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRWYWxpZGF0aW9uTWV0aG9kKFN0cmluZyB2YWxpZGF0aW9uTWV0aG9kKSB7CiAgICAgICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9ELCB2YWxpZGF0aW9uTWV0aG9kKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBjb25uZWN0aW9uIHZhbGlkYXRpb24gbWV0aG9kIHR5cGUKICAgICAgKgotICAgICAqIEByZXR1cm4JdmFsaWRhdGlvbiBtZXRob2QKKyAgICAgKiBAcmV0dXJuICAgIHZhbGlkYXRpb24gbWV0aG9kCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRWYWxpZGF0aW9uTWV0aG9kKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdmFsaWRhdGlvbiBtZXRob2QgcmVxdWlyZWQKICAgICAgKgotICAgICAqIEBwYXJhbQl2YWxpZGF0aW9uTWV0aG9kCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdmFsaWRhdGlvbk1ldGhvZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dmFsaWRhdGlvbk1ldGhvZChTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCkgewogICAgICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCwgdmFsaWRhdGlvbk1ldGhvZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgY29ubmVjdGlvbiB2YWxpZGF0aW9uIG1ldGhvZCB0eXBlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXZhbGlkYXRpb24gbWV0aG9kCisgICAgICogQHJldHVybiAgICB2YWxpZGF0aW9uIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dmFsaWRhdGlvbk1ldGhvZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdGFibGUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0YWJsZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VmFsaWRhdGlvblRhYmxlTmFtZShTdHJpbmcgdGFibGUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSwgdGFibGUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRhYmxlCisgICAgICogQHJldHVybiAgICB0YWJsZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsaWRhdGlvblRhYmxlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdGFibGUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0YWJsZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dmFsaWRhdGlvblRhYmxlTmFtZShTdHJpbmcgdGFibGUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSwgdGFibGUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRhYmxlCisgICAgICogQHJldHVybiAgICB0YWJsZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dmFsaWRhdGlvblRhYmxlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHBhcmFtCXRybklzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRybklzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oU3RyaW5nIHRybklzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTiwgdHJuSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCisgICAgICogQHJldHVybiAgICB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHBhcmFtCXRybklzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRybklzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dHJhbnNhY3Rpb25Jc29sYXRpb24oU3RyaW5nIHRybklzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTiwgdHJuSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCisgICAgICogQHJldHVybiAgICB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHRyYW5zYWN0aW9uSXNvbGF0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZ3VhcmFudGVlSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZ3VhcmFudGVlSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRHdWFyYW50ZWVJc29sYXRpb25MZXZlbChTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMLCBndWFyYW50ZWVJc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybglpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCisgICAgICogQHJldHVybiAgICBpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRHdWFyYW50ZWVJc29sYXRpb25MZXZlbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZAogICAgICAqCi0gICAgICogQHBhcmFtCWd1YXJhbnRlZUlzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGd1YXJhbnRlZUlzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Z3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCwgZ3VhcmFudGVlSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQorICAgICAqIEByZXR1cm4gICAgaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Z3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhCmluZGV4IDFiZTRkZWQuLjQzNjI1NjEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhCkBAIC0yNCw4ICsyNCw4IEBACiAvKioKICAqIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wNQotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDUKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIEBDb25uZWN0b3IoCiAgICAgICAgIGRlc2NyaXB0aW9uID0gIlJlc291cmNlIGFkYXB0ZXIgd3JhcHBpbmcgRGF0YXNvdXJjZSBpbXBsZW1lbnRhdGlvbiBvZiBkcml2ZXIiLApAQCAtNDksNTIgKzQ5LDUyIEBACiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBlbmRwb2ludEFjdGl2YXRpb24KICAgICAgKiB3aGljaCBqdXN0IHRocm93cyA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWVmCTxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCWFzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgotICAgICAqIEB0aHJvd3MJPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtZWYgICAgPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgYXMgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kcG9pbnRBY3RpdmF0aW9uKE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgbWVmLCBBY3RpdmF0aW9uU3BlYyBhcykgdGhyb3dzIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIlRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgSkRCQyBjb25uZWN0b3IiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBtZXRob2QgaW1wbGVtZW50YXRpb24gZm9yIGVuZHBvaW50RGVhY3RpdmF0aW9uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWVmCTxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCWFzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtZWYgICAgPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgYXMgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kcG9pbnREZWFjdGl2YXRpb24oTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBtZWYsIEFjdGl2YXRpb25TcGVjIGFzKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBnZXRYQVJlc291cmNlcwogICAgICAqIHdoaWNoIGp1c3QgdGhyb3dzIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcGVjcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4gYXJyYXkKLSAgICAgKiBAdGhyb3dzCTxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc3BlY3MgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+IGFycmF5CisgICAgICogQHRocm93cyAgICA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKSB0aHJvd3MgTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiVGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBKREJDIGNvbm5lY3RvciIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IGltcGxlbWVudGF0aW9uIG9mIHN0YXJ0IG1ldGhvZAogICAgICAqCi0gICAgICogQHBhcmFtCWN0eAk8Y29kZT5Cb290c3RyYXBDb250ZXh0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjdHggICAgPGNvZGU+Qm9vdHN0cmFwQ29udGV4dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdGFydChCb290c3RyYXBDb250ZXh0IGN0eCkgdGhyb3dzIFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNvdXJjZSBBZGFwdGVyIGlzIHN0YXJ0aW5nIHdpdGggY29uZmlndXJhdGlvbiA6IiArIHJhUHJvcCk7CiAgICAgICAgIGlmIChyYVByb3AgPT0gbnVsbCB8fCAhcmFQcm9wLmVxdWFscygiVkFMSUQiKSkgewotCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIlJlc291cmNlIGFkYXB0ZXIgY2Fubm90IHN0YXJ0LiBJdCBpcyBjb25maWd1cmVkIGFzIDogIiArIHJhUHJvcCk7Ci0JfSAKKyAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJSZXNvdXJjZSBhZGFwdGVyIGNhbm5vdCBzdGFydC4gSXQgaXMgY29uZmlndXJlZCBhcyA6ICIgKyByYVByb3ApOwogICAgIH0KLSAgICAKKyAgICB9CisKICAgICAvKioKICAgICAgKiBFbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBzdG9wIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0b3AoKSB7Ci0gICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRSQVByb3BlcnR5KFN0cmluZyBzKSB7CkBAIC0xMDQsNSArMTA0LDUgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFJBUHJvcGVydHkoKSB7CiAgICAgICAgIHJldHVybiByYVByb3A7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKaW5kZXggNWUxNGQ0NC4uZmYwZjAyYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iJHtnamMuaG9tZX0iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy9zcGkiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMjksNTUgKzI5LDU1IEBACiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0icGFja2FnZTE0Ij4KLSAgICAJCi0gICAgCTxta2RpciBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIvPgotICAgIAkKLQk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIgYmFzZWRpcj0iJHtjbGFzcy5kaXJ9IgorCisgICAgICAgIDxta2RpciBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIvPgorCisgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiIGJhc2VkaXI9IiR7Y2xhc3MuZGlyfSIKICAgICAgICAgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiwgY29tL3N1bi9namMvdXRpbC8qKi8qLCBjb20vc3VuL2dqYy9jb21tb24vKiovKiIgZXhjbHVkZXM9ImNvbS9zdW4vZ2pjL2NjaS8qKi8qLGNvbS9zdW4vZ2pjL3NwaS8xLjQvKiovKiIvPgotICAgICAgICAKKwogICAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2NwLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtY3AueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWNwLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2NwLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS14YS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2NwLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLXhhLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kbS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRtLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kcy54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRzLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxkZWxldGUgZGlyPSIke2dqYy5ob21lfS9kaXN0L2NvbSIvPgotICAgCTxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIi8+Ci0gICAJPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIi8+Ci0gICAJCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxkZWxldGUgZGlyPSIke2dqYy5ob21lfS9kaXN0L2NvbSIvPgorICAgICAgIDxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIi8+CisgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIi8+CisKICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxMyIvPgotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTQsIGJ1aWxkMTMiLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDE0LCBidWlsZDEzIi8+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwKaW5kZXggMmMyOWJlNi4uMDljZTYzZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbApAQCAtMjgsNyArMjgsNyBAQAogICAgICAgICA8b3V0Ym91bmQtcmVzb3VyY2VhZGFwdGVyPgogICAgICAgICAgICAgPGNvbm5lY3Rpb24tZGVmaW5pdGlvbj4KICAgICAgICAgICAgICAgICA8bWFuYWdlZGNvbm5lY3Rpb25mYWN0b3J5LWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvbWFuYWdlZGNvbm5lY3Rpb25mYWN0b3J5LWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiB0aGVzZSBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VXNlcjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT50ZXN0ZGI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VVJMPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmpkYmM6ZGVyYnk6Ly9sb2NhbGhvc3Q6MTUyNy90ZXN0ZGI7Y3JlYXRlPXRydWU8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPk9yYWNsZSB0aGluIGRyaXZlciBEYXRhc291cmNlPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5DbGFzc05hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+b3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERhdGFTb3VyY2U0MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgpAQCAtNzcsNyArNzcsNyBAQAogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uLWludGVyZmFjZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb25uZWN0aW9uLWludGVyZmFjZT4KIAogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uLWltcGwtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXI8L2Nvbm5lY3Rpb24taW1wbC1jbGFzcz4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgPC9jb25uZWN0aW9uLWRlZmluaXRpb24+CiAKICAgICAgICAgICAgIDx0cmFuc2FjdGlvbi1zdXBwb3J0PkxvY2FsVHJhbnNhY3Rpb248L3RyYW5zYWN0aW9uLXN1cHBvcnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKaW5kZXggYjIxOWNkMi4uMTI0ODA5YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQpAQCAtMjQsMjYgKzI0LDI2IEBACiAvKioKICAqIENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlcnsgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlcnsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgYSA8Y29kZT5Db25uZWN0aW9uIDwvY29kZT4gb2JqZWN0IHRvIHRoZSA8Y29kZT5Db25uZWN0aW9uRmFjdG9yeTwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCWluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHJldHVybglBIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gZ2V0dGluZyB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4uCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgaW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIEEgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvciBpbiBnZXR0aW5nIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGFsbG9jYXRlQ29ubmVjdGlvbihNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLAotICAgIAkJCQkgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKSAKLSAgICAJCQkJICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotCU1hbmFnZWRDb25uZWN0aW9uIG1jID0gbWNmLmNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGluZm8pOwotCXJldHVybiBtYy5nZXRDb25uZWN0aW9uKG51bGwsIGluZm8pOyAgICAJCQkJICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24geworICAgIE1hbmFnZWRDb25uZWN0aW9uIG1jID0gbWNmLmNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGluZm8pOworICAgIHJldHVybiBtYy5nZXRDb25uZWN0aW9uKG51bGwsIGluZm8pOwogICAgIH0KLSAgICAKKwogICAgIC8qCiAgICAgICogVGhpcyBjbGFzcyBjb3VsZCBlZmZlY3RpdmVseSBpbXBsZW1lbnQgQ29ubmVjdGlvbiBwb29saW5nIGFsc28uCiAgICAgICogQ291bGQgYmUgZG9uZSBmb3IgRkNTLgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEKaW5kZXggMzljNzg3Ni4uYzQ3N2ZjMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCkBAIC0xOSwxMCArMTksMTAgQEAKIC8qKgogICogQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZveyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm97CiAKICAgICBwcml2YXRlIFN0cmluZyB1c2VyOwogICAgIHByaXZhdGUgU3RyaW5nIHBhc3N3b3JkOwpAQCAtMzAsOCArMzAsOCBAQAogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCVVzZXIgTmFtZS4KLSAgICAgKiBAcGFyYW0JcGFzc3dvcmQJUGFzc3dvcmQKKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICBVc2VyIE5hbWUuCisgICAgICogQHBhcmFtICAgIHBhc3N3b3JkICAgIFBhc3N3b3JkCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyhTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkKSB7CiAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7CkBAIC00MSw3ICs0MSw3IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSB1c2VyIG5hbWUgb2YgdGhlIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKgotICAgICAqIEByZXR1cm4JVXNlciBuYW1lIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KKyAgICAgKiBAcmV0dXJuICAgIFVzZXIgbmFtZSBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyKCkgewogICAgICAgICByZXR1cm4gdXNlcjsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHBhc3N3b3JkIG9mIHRoZSBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVBhc3N3b3JkIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KKyAgICAgKiBAcmV0dXJuICAgIFBhc3N3b3JkIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gcGFzc3dvcmQ7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgLyoqCiAgICAgICogVmVyaWZ5IHdoZXRoZXIgdHdvIENvbm5lY3Rpb25SZXF1ZXN0SW5mb3MgYXJlIGVxdWFsLgogICAgICAqCi0gICAgICogQHJldHVybglUcnVlLCBpZiB0aGV5IGFyZSBlcXVhbCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqIEByZXR1cm4gICAgVHJ1ZSwgaWYgdGhleSBhcmUgZXF1YWwgYW5kIGZhbHNlIG90aGVyd2lzZS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewogICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTsKQEAgLTc1LDE4ICs3NSwxOCBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgaGFzaGNvZGUgb2YgdGhlIG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaENvZGUuCisgICAgICogQHJldHVybiAgICBoYXNoQ29kZS4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewogICAgICAgICBTdHJpbmcgcmVzdWx0ID0gIiIgKyB1c2VyICsgcGFzc3dvcmQ7CiAgICAgICAgIHJldHVybiByZXN1bHQuaGFzaENvZGUoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21wYXJlcyB0d28gb2JqZWN0cy4KICAgICAgKgotICAgICAqIEBwYXJhbQlvMQlGaXJzdCBvYmplY3QuCi0gICAgICogQHBhcmFtCW8yCVNlY29uZCBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG8xICAgIEZpcnN0IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgbzIgICAgU2Vjb25kIG9iamVjdC4KICAgICAgKi8KICAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbChPYmplY3QgbzEsIE9iamVjdCBvMikgewogICAgICAgICBpZiAobzEgPT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IDg1OTE2ZTUuLjk5YTQ2ZTEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTMxLDggKzMxLDggQEAKIC8qKgogICogRGF0YSBTb3VyY2UgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMwCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMAorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogCiBAQ29ubmVjdGlvbkRlZmluaXRpb24oCkBAIC00MiwzMSArNDIsMzEgQEAKICAgICAgICAgY29ubmVjdGlvbkZhY3RvcnlJbXBsID0gY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UuY2xhc3MKICkKIHB1YmxpYyBjbGFzcyBEU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBleHRlbmRzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB7Ci0gICAKKwogICAgIHByaXZhdGUgdHJhbnNpZW50IGphdmF4LnNxbC5EYXRhU291cmNlIGRhdGFTb3VyY2VPYmo7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwogICAgIH0KICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBuZXcgcGh5c2ljYWwgY29ubmVjdGlvbiB0byB0aGUgdW5kZXJseWluZyBFSVMgcmVzb3VyY2UKICAgICAgKiBtYW5hZ2VyLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCWFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCW9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKLSAgICAgKiAgICAgICAJCQkJY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QgCi0gICAgICogQHRocm93cwlSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCQlwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0CisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24oamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0IHN1YmplY3QsCiAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbiIpOwogICAgICAgICB9CiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYyA9IFNlY3VyaXR5VXRpbHMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKHRoaXMsIHN1YmplY3QsIGN4UmVxdWVzdEluZm8pOwotICAgICAgICAKKwogICAgICAgICBpZihkYXRhU291cmNlT2JqID09IG51bGwpIHsKICAgICAgICAgICAgIGlmKGRzT2JqQnVpbGRlciA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgZHNPYmpCdWlsZGVyID0gbmV3IERhdGFTb3VyY2VPYmplY3RCdWlsZGVyKHNwZWMpOwpAQCAtODQsMzYgKzg0LDM2IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VPYmogPSAoamF2YXguc3FsLkRhdGFTb3VyY2UpIGRzT2JqQnVpbGRlci5jb25zdHJ1Y3REYXRhU291cmNlT2JqZWN0KCk7CiAgICAgICAgICAgICB9IGNhdGNoKENsYXNzQ2FzdEV4Y2VwdGlvbiBjY2UpIHsKLQkgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NjZSIsIGNjZSk7CisgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jY2UiLCBjY2UpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLlJlc291cmNlRXhjZXB0aW9uKGNjZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZHNDb25uID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKLQkgICAgLyogRm9yIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2VyL3Bhc3N3ZCBvZiB0aGUgY29ubmVjdGlvbiBwb29sIGlzCi0JICAgICAqIGVxdWFsIHRvIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgZm9yIHRoZSBjb25uZWN0aW9uIHJlcXVlc3QKLQkgICAgICogZ2V0IGEgY29ubmVjdGlvbiBmcm9tIHRoaXMgcG9vbCBkaXJlY3RseS4KLQkgICAgICogZm9yIGFsbCBvdGhlciBjb25kaXRpb25zIGdvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uCi0JICAgICAqLwotCSAgICBpZiAoIGlzRXF1YWwoIHBjLCBnZXRVc2VyKCksIGdldFBhc3N3b3JkKCkgKSApIHsKLQkgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbigpOwotCSAgICB9IGVsc2UgewotCSAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKHBjLmdldFVzZXJOYW1lKCksIAotCQkgICAgbmV3IFN0cmluZyhwYy5nZXRQYXNzd29yZCgpKSk7Ci0JICAgIH0KKyAgICAgICAgLyogRm9yIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2VyL3Bhc3N3ZCBvZiB0aGUgY29ubmVjdGlvbiBwb29sIGlzCisgICAgICAgICAqIGVxdWFsIHRvIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgZm9yIHRoZSBjb25uZWN0aW9uIHJlcXVlc3QKKyAgICAgICAgICogZ2V0IGEgY29ubmVjdGlvbiBmcm9tIHRoaXMgcG9vbCBkaXJlY3RseS4KKyAgICAgICAgICogZm9yIGFsbCBvdGhlciBjb25kaXRpb25zIGdvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uCisgICAgICAgICAqLworICAgICAgICBpZiAoIGlzRXF1YWwoIHBjLCBnZXRVc2VyKCksIGdldFBhc3N3b3JkKCkgKSApIHsKKyAgICAgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKHBjLmdldFVzZXJOYW1lKCksCisgICAgICAgICAgICBuZXcgU3RyaW5nKHBjLmdldFBhc3N3b3JkKCkpKTsKKyAgICAgICAgfQogICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CiAgICAgICAgICAgICBzcWxlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfY3JlYXRlX2Nvbm4iLCBzcWxlKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQ6ICIgKyAKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2NyZWF0ZV9jb25uIiwgc3FsZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBjb3VsZCBub3QgYmUgYWxsb2NhdGVkOiAiICsKICAgICAgICAgICAgICAgICBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWMy1URVNUIDogdW5hYmxlIHRvIGdldCBjb25uZWN0aW9uIik7Ci0gICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlYzLVRFU1QgOiBnb3QgY29ubmVjdGlvbiIpOwotICAgICAgICAKKwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGRzQ29ubiwgcGMsIHRoaXMpOwogICAgICAgICAvL0dKQ0lOVAogLyoKQEAgLTEyMywxNSArMTIzLDE1IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVjMtVEVTVCA6IHJldHVybmluZyBjb25uZWN0aW9uIik7CiAgICAgICAgIHJldHVybiBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8gCisgICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvCiAgICAgICogYW5vdGhlciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LgotICAgICAqIAotICAgICAqIEBwYXJhbQlvdGhlcgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZSAKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKLSAgICAgKgkJZmFsc2UJb3RoZXJ3aXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgb3RoZXIgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKKyAgICAgKiAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvdGhlcikgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTQyLDM4ICsxNDIsMzggQEAKICAgICAgICAgICogaWYgYW5kIG9ubHkgaWYgdGhlaXIgcHJvcGVydGllcyBhcmUgdGhlIHNhbWUuCiAgICAgICAgICAqLwogICAgICAgICBpZihvdGhlciBpbnN0YW5jZW9mIGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSkgewotICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG90aGVyTUNGID0gCisgICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnkgb3RoZXJNQ0YgPQogICAgICAgICAgICAgICAgIChjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpIG90aGVyOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BlYy5lcXVhbHMob3RoZXJNQ0Yuc3BlYyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlcnZlck5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc2VydmVyTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHNlcnZlck5hbWUoU3RyaW5nIHNlcnZlck5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSwgc2VydmVyTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXNlcnZlck5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBzZXJ2ZXJOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0c2VydmVyTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlcnZlck5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc2VydmVyTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIEBDb25maWdQcm9wZXJ0eSgKICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9ICJsb2NhbGhvc3QiLApAQCAtMTgyLDQyICsxODIsNDIgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJOYW1lKFN0cmluZyBzZXJ2ZXJOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUsIHNlcnZlck5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglzZXJ2ZXJOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgc2VydmVyTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlck5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb3J0TnVtYmVyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBvcnROdW1iZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRwb3J0TnVtYmVyKFN0cmluZyBwb3J0TnVtYmVyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIsIHBvcnROdW1iZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHJldHVybglwb3J0TnVtYmVyCi0gICAgICogQHNlZQk8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcG9ydE51bWJlcgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHBvcnROdW1iZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb3J0TnVtYmVyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBvcnROdW1iZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBAQ29uZmlnUHJvcGVydHkoCiAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSAiMTUyNyIsCkBAIC0yMjYsNDIgKzIyNiw0MiBAQAogICAgIHB1YmxpYyB2b2lkIHNldFBvcnROdW1iZXIoU3RyaW5nIHBvcnROdW1iZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiwgcG9ydE51bWJlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBvcnROdW1iZXIKLSAgICAgKiBAc2VlCTxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBwb3J0TnVtYmVyCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UG9ydE51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGF0YWJhc2VOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGF0YWJhc2VOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkYXRhYmFzZU5hbWUoU3RyaW5nIGRhdGFiYXNlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUsIGRhdGFiYXNlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGF0YWJhc2VOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkYXRhYmFzZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRhdGFiYXNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkYXRhYmFzZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkYXRhYmFzZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIEBDb25maWdQcm9wZXJ0eSgKICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT0idGVzdGRiIiwKQEAgLTI3MCw0MiArMjcwLDQyIEBACiAgICAgcHVibGljIHZvaWQgc2V0RGF0YWJhc2VOYW1lKFN0cmluZyBkYXRhYmFzZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FLCBkYXRhYmFzZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRhdGFiYXNlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGF0YWJhc2VOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREYXRhYmFzZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGF0YVNvdXJjZU5hbWUoU3RyaW5nIGRzbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSwgZHNuKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkc24KLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHNuCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRhdGFTb3VyY2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgQENvbmZpZ1Byb3BlcnR5KAogICAgICAgICAgICAgdHlwZT1qYXZhLmxhbmcuU3RyaW5nLmNsYXNzCkBAIC0zMTMsMjAzICszMTMsMjAzIEBACiAgICAgcHVibGljIHZvaWQgc2V0RGF0YVNvdXJjZU5hbWUoU3RyaW5nIGRzbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSwgZHNuKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkc24KLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHNuCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERhdGFTb3VyY2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlc2MJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlc2MgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGVzY3JpcHRpb24oU3RyaW5nIGRlc2MpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04sIGRlc2MpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglkZXNjCi0gICAgICogQHNlZQk8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlc2MKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZGVzY3JpcHRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGVzYwk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVzYyAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzYykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiwgZGVzYyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRlc2MKLSAgICAgKiBAc2VlCTxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVzYworICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHBhcmFtCW53UHJvdG9jb2wJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBud1Byb3RvY29sICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRuZXR3b3JrUHJvdG9jb2woU3RyaW5nIG53UHJvdG9jb2wpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MLCBud1Byb3RvY29sKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHJldHVybglud1Byb3RvY29sCi0gICAgICogQHNlZQk8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHJldHVybiAgICBud1Byb3RvY29sCisgICAgICogQHNlZSAgICA8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRuZXR3b3JrUHJvdG9jb2woKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbndQcm90b2NvbAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG53UHJvdG9jb2wgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldE5ldHdvcmtQcm90b2NvbChTdHJpbmcgbndQcm90b2NvbCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wsIG53UHJvdG9jb2wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCW53UHJvdG9jb2wKLSAgICAgKiBAc2VlCTxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIG53UHJvdG9jb2wKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldE5ldHdvcmtQcm90b2NvbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXJvbGVOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICByb2xlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRyb2xlTmFtZShTdHJpbmcgcm9sZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUsIHJvbGVOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXJvbGVOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHJvbGVOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHJvbGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlyb2xlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcm9sZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Um9sZU5hbWUoU3RyaW5nIHJvbGVOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FLCByb2xlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglyb2xlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICByb2xlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRSb2xlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKTsKICAgICB9CiAKLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lT3V0CTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lT3V0ICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRsb2dpblRpbWVPdXQoU3RyaW5nIGxvZ2luVGltZU91dCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQsIGxvZ2luVGltZU91dCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbG9naW5UaW1lb3V0Ci0gICAgICogQHNlZQk8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHJldHVybiAgICBsb2dpblRpbWVvdXQKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGxvZ2luVGltZU91dCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVPdXQJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBsb2dpblRpbWVPdXQgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ2luVGltZU91dChTdHJpbmcgbG9naW5UaW1lT3V0KSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCwgbG9naW5UaW1lT3V0KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHJldHVybglsb2dpblRpbWVvdXQKLSAgICAgKiBAc2VlCTxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGxvZ2luVGltZW91dAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TG9naW5UaW1lT3V0KCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZWxpbWl0ZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGVsaW0JPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZWxpbSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGVsaW1pdGVyKFN0cmluZyBkZWxpbSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIsIGRlbGltKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZWxpbWl0ZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRlbGltCi0gICAgICogQHNlZQk8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZWxpbQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZGVsaW1pdGVyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZWxpbWl0ZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGVsaW0JPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZWxpbSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgQENvbmZpZ1Byb3BlcnR5KAogICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gIiMiLApAQCAtNTE4LDUyICs1MTgsNTIgQEAKICAgICBwdWJsaWMgdm9pZCBzZXREZWxpbWl0ZXIoU3RyaW5nIGRlbGltKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUiwgZGVsaW0pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVsaW0KLSAgICAgKiBAc2VlCTxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlbGltCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZWxpbWl0ZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHBhcmFtCWRyaXZlclByb3BzCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRyaXZlclByb3BzICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZHJpdmVyUHJvcGVydGllcyhTdHJpbmcgZHJpdmVyUHJvcHMpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUywgZHJpdmVyUHJvcHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHJldHVybglkcml2ZXJQcm9wcwotICAgICAqIEBzZWUJPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRyaXZlclByb3BzCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZHJpdmVyUHJvcGVydGllcygpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHBhcmFtCWRyaXZlclByb3BzCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRyaXZlclByb3BzICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RHJpdmVyUHJvcGVydGllcyhTdHJpbmcgZHJpdmVyUHJvcHMpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUywgZHJpdmVyUHJvcHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHJldHVybglkcml2ZXJQcm9wcwotICAgICAqIEBzZWUJPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRyaXZlclByb3BzCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RHJpdmVyUHJvcGVydGllcygpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwpAQCAtNTczLDM1ICs1NzMsMzUgQEAKICAgICAgKiBDaGVjayBpZiB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3NlZCBmb3IgdGhpcyBnZXQgY29ubmVjdGlvbgogICAgICAqIHJlcXVlc3QgaXMgZXF1YWwgdG8gdGhlIHVzZXIvcGFzc3dkIG9mIHRoaXMgY29ubmVjdGlvbiBwb29sLgogICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKCBQYXNzd29yZENyZWRlbnRpYWwgcGMsIFN0cmluZyB1c2VyLCAKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbCggUGFzc3dvcmRDcmVkZW50aWFsIHBjLCBTdHJpbmcgdXNlciwKICAgICAgICAgU3RyaW5nIHBhc3N3b3JkKSB7Ci0gICAgICAgIAotCS8vaWYgZXF1YWwgZ2V0IGRpcmVjdCBjb25uZWN0aW9uIGVsc2UgCi0JLy9nZXQgY29ubmVjdGlvbiB3aXRoIHVzZXIgYW5kIHBhc3N3b3JkLgotCQotCWlmICh1c2VyID09IG51bGwgJiYgcGMgPT0gbnVsbCkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JaWYgKCB1c2VyID09IG51bGwgJiYgcGMgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQl9CiAKLQlpZiggcGMgPT0gbnVsbCApIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfQotCQotCWlmICggdXNlci5lcXVhbHMoIHBjLmdldFVzZXJOYW1lKCkgKSApIHsKLQkgICAgaWYgKCBwYXNzd29yZCA9PSBudWxsICYmIHBjLmdldFBhc3N3b3JkKCkgPT0gbnVsbCApIHsKLQkgICAgICAgIHJldHVybiB0cnVlOwotCSAgICB9Ci0JfQotCQotCWlmICggdXNlci5lcXVhbHMocGMuZ2V0VXNlck5hbWUoKSkgJiYgcGFzc3dvcmQuZXF1YWxzKHBjLmdldFBhc3N3b3JkKCkpICkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9IAotCQotICAgICAgICAKLQlyZXR1cm4gZmFsc2U7CisgICAgLy9pZiBlcXVhbCBnZXQgZGlyZWN0IGNvbm5lY3Rpb24gZWxzZQorICAgIC8vZ2V0IGNvbm5lY3Rpb24gd2l0aCB1c2VyIGFuZCBwYXNzd29yZC4KKworICAgIGlmICh1c2VyID09IG51bGwgJiYgcGMgPT0gbnVsbCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIHVzZXIgPT0gbnVsbCAmJiBwYyAhPSBudWxsICkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmKCBwYyA9PSBudWxsICkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIHVzZXIuZXF1YWxzKCBwYy5nZXRVc2VyTmFtZSgpICkgKSB7CisgICAgICAgIGlmICggcGFzc3dvcmQgPT0gbnVsbCAmJiBwYy5nZXRQYXNzd29yZCgpID09IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggdXNlci5lcXVhbHMocGMuZ2V0VXNlck5hbWUoKSkgJiYgcGFzc3dvcmQuZXF1YWxzKHBjLmdldFBhc3N3b3JkKCkpICkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKworICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCmluZGV4IGQ5MDA4NWQuLjUxZjE3NzMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCkBAIC0yOCwyMiArMjgsMjIgQEAKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CiAvKioKLSAqIEhvbGRzIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlIAorICogSG9sZHMgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCwgd2hpY2ggaXMgdG8gYmUKICAqIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbS4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2UgaW1wbGVtZW50cyBqYXZheC5zcWwuRGF0YVNvdXJjZSwgamF2YS5pby5TZXJpYWxpemFibGUsCi0JCWNvbS5zdW4uYXBwc2Vydi5qZGJjcmEuRGF0YVNvdXJjZSwgamFrYXJ0YS5yZXNvdXJjZS5SZWZlcmVuY2VhYmxleyAKLQkJCQkgICAKKyAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmNyYS5EYXRhU291cmNlLCBqYWthcnRhLnJlc291cmNlLlJlZmVyZW5jZWFibGV7CisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2Y7Ci0gICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsJCQkJICAgCQkJCSAgIAorICAgIHByaXZhdGUgQ29ubmVjdGlvbk1hbmFnZXIgY207CiAgICAgcHJpdmF0ZSBpbnQgbG9naW5UaW1lb3V0OwogICAgIHByaXZhdGUgUHJpbnRXcml0ZXIgbG9nV3JpdGVyOwotICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwkJCQkgICAKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKICAgICBwcml2YXRlIFJlZmVyZW5jZSByZWZlcmVuY2U7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTEsNTggKzUxLDU4IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnID0gZmFsc2U7CiAKICAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdC4gVGhpcyBpcyBjcmVhdGVkIGJ5IHRoZSAKKyAgICAgKiBDb25zdHJ1Y3RzIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdC4gVGhpcyBpcyBjcmVhdGVkIGJ5IHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCAKLSAgICAgKgkJCWNyZWF0aW5nIHRoaXMgb2JqZWN0LgotICAgICAqIEBwYXJhbQljbQk8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gb2JqZWN0IGVpdGhlciBhc3NvY2lhdGVkCi0gICAgICoJCQl3aXRoIEFwcGxpY2F0aW9uIHNlcnZlciBvciBSZXNvdXJjZSBBZGFwdGVyLgorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgIGNyZWF0aW5nIHRoaXMgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBjbSAgICA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gb2JqZWN0IGVpdGhlciBhc3NvY2lhdGVkCisgICAgICogICAgICAgICAgICB3aXRoIEFwcGxpY2F0aW9uIHNlcnZlciBvciBSZXNvdXJjZSBBZGFwdGVyLgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhU291cmNlIChNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLCBDb25uZWN0aW9uTWFuYWdlciBjbSkgewotICAgIAl0aGlzLm1jZiA9IG1jZjsKLSAgICAJaWYgKGNtID09IG51bGwpIHsKLSAgICAJICAgIHRoaXMuY20gPSAoQ29ubmVjdGlvbk1hbmFnZXIpIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIoKTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHRoaXMuY20gPSBjbTsKLSAgICAJfSAgICAJCi0gICAgfSAgIAotICAgIAorICAgICAgICB0aGlzLm1jZiA9IG1jZjsKKyAgICAgICAgaWYgKGNtID09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuY20gPSAoQ29ubmVjdGlvbk1hbmFnZXIpIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuY20gPSBjbTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogCi0gICAgICogQHJldHVybgk8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLiAgICAgIAorICAgICAqCisgICAgICogQHJldHVybiAgICA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJdHJ5IHsKLSAgICAJICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixudWxsKTsgICAgCSAgICAKLSAgICAJfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixudWxsKTsKKyAgICAgICAgfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKIC8vIFRoaXMgaXMgdGVtcG9yYXJ5LiBUaGlzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gU0VWRVJFIGFmdGVyIFRQCi0JICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICByZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAJICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCX0KKyAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIAotICAgICAqIEBwYXJhbQl1c2VyCVVzZXIgbmFtZSBmb3IgdGhlIENvbm5lY3Rpb24uCi0gICAgICogQHBhcmFtCXB3ZAlQYXNzd29yZCBmb3IgdGhlIENvbm5lY3Rpb24uCi0gICAgICogQHJldHVybgk8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLiAgICAgIAorICAgICAqCisgICAgICogQHBhcmFtICAgIHVzZXIgICAgVXNlciBuYW1lIGZvciB0aGUgQ29ubmVjdGlvbi4KKyAgICAgKiBAcGFyYW0gICAgcHdkICAgIFBhc3N3b3JkIGZvciB0aGUgQ29ubmVjdGlvbi4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbihTdHJpbmcgdXNlciwgU3RyaW5nIHB3ZCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXRyeSB7Ci0gICAgCSAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbyA9IG5ldyBDb25uZWN0aW9uUmVxdWVzdEluZm8gKHVzZXIsIHB3ZCk7Ci0gICAgCSAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsaW5mbyk7Ci0gICAgCX0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbyA9IG5ldyBDb25uZWN0aW9uUmVxdWVzdEluZm8gKHVzZXIsIHB3ZCk7CisgICAgICAgICAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsaW5mbyk7CisgICAgICAgIH0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CiAvLyBUaGlzIGlzIHRlbXBvcmFyeS4gVGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIFNFVkVSRSBhZnRlciBUUAotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJfQotICAgIH0gICAgCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIKQEAgLTExNSw5MSArMTE1LDkxIEBACiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbihDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAKLSAgICAgICAgQ29ubmVjdGlvbiBkcml2ZXJDb24gPSBjb247IAorICAgICAgICBDb25uZWN0aW9uIGRyaXZlckNvbiA9IGNvbjsKICAgICAgICAgaWYgKGNvbiBpbnN0YW5jZW9mIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSB7Ci0gICAgICAgICAgIGRyaXZlckNvbiA9ICgoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIGNvbikuZ2V0Q29ubmVjdGlvbigpOyAKLSAgICAgICAgfSAKKyAgICAgICAgICAgZHJpdmVyQ29uID0gKChjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgY29uKS5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gZHJpdmVyQ29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9naW4gdGltZW91dAogICAgICAqCiAgICAgICogQHJldHVybiBsb2dpbiB0aW1lb3V0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0TG9naW5UaW1lb3V0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJcmV0dXJuCWxvZ2luVGltZW91dDsKKyAgICAgICAgcmV0dXJuICAgIGxvZ2luVGltZW91dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZ2luIHRpbWVvdXQKICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVvdXQJTG9naW4gdGltZW91dC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lb3V0ICAgIExvZ2luIHRpbWVvdXQuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9naW5UaW1lb3V0KGludCBsb2dpblRpbWVvdXQpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXRoaXMubG9naW5UaW1lb3V0ID0gbG9naW5UaW1lb3V0OworICAgICAgICB0aGlzLmxvZ2luVGltZW91dCA9IGxvZ2luVGltZW91dDsKICAgICB9Ci0gICAgCi0gICAgLyoqIAorCisgICAgLyoqCiAgICAgICogR2V0IHRoZSBsb2d3cml0ZXIgb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT4gUHJpbnRXcml0ZXIgPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIFByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXJldHVybglsb2dXcml0ZXI7CisgICAgICAgIHJldHVybiAgICBsb2dXcml0ZXI7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9nd3JpdGVyIG9uIHRoaXMgb2JqZWN0LgogICAgICAqCiAgICAgICogQHBhcmFtIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKFByaW50V3JpdGVyIGxvZ1dyaXRlcikgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7Ci0gICAgfSAgICAgICAgCi0gICAgICAgIAorICAgICAgICB0aGlzLmxvZ1dyaXRlciA9IGxvZ1dyaXRlcjsKKyAgICB9CisKICAgICBwdWJsaWMgTG9nZ2VyIGdldFBhcmVudExvZ2dlcigpIHRocm93cyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBmZWF0dXJlLiIpOwogICAgIH0KICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KKyAgICAgKiBAcmV0dXJuICAgIERlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7Ci0gICAgCXJldHVybiBkZXNjcmlwdGlvbjsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKICAgICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2NyaXB0aW9uKSB7Ci0gICAgCXRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgICB9ICAgIAotICAgIAorICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgfQorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSByZWZlcmVuY2UuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIDxjb2RlPlJlZmVyZW5jZTwvY29kZT5vYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIFJlZmVyZW5jZSBnZXRSZWZlcmVuY2UoKSB7Ci0gICAgCXJldHVybiByZWZlcmVuY2U7CisgICAgICAgIHJldHVybiByZWZlcmVuY2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSByZWZlcmVuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVmZXJlbmNlIDxjb2RlPlJlZmVyZW5jZTwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICByZWZlcmVuY2UgPGNvZGU+UmVmZXJlbmNlPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlKFJlZmVyZW5jZSByZWZlcmVuY2UpIHsKLSAgICAJdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7CisgICAgICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOwogICAgIH0KIAogICAgIHB1YmxpYyA8VD4gVCB1bndyYXAoQ2xhc3M8VD4gaWZhY2UpIHRocm93cyBTUUxFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCmluZGV4IDU3NGVkNjYuLmJlYzBkNmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKQEAgLTE4LDEzICsxOCwxMyBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEpkYmNTZXR1cEFkbWluIHsKIAotICAgIHB1YmxpYyB2b2lkIHNldFRhYmxlTmFtZShTdHJpbmcgZGIpOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRUYWJsZU5hbWUoU3RyaW5nIGRiKTsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFibGVOYW1lKCk7CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRKbmRpTmFtZShTdHJpbmcgbmFtZSk7IAorICAgIHB1YmxpYyB2b2lkIHNldEpuZGlOYW1lKFN0cmluZyBuYW1lKTsKIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Sm5kaU5hbWUoKTsgCisgICAgcHVibGljIFN0cmluZyBnZXRKbmRpTmFtZSgpOwogCiAgICAgcHVibGljIHZvaWQgc2V0U2NoZW1hTmFtZShTdHJpbmcgbmFtZSk7CiAKQEAgLTM0LDYgKzM0LDYgQEAKIAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldE5vT2ZSb3dzKCk7CiAKLSAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCk7IAorICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2V0dXAoKTsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKaW5kZXggZjg5YmU1Ny4uZmMzYTk1NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhCkBAIC04NCwxMSArODQsMTEgQEAKIAogcHJpdmF0ZSB2b2lkIHByaW50SGllcmFyY2h5KENsYXNzTG9hZGVyIGNsLCBpbnQgY250KXsKIHdoaWxlKGNsICE9IG51bGwpIHsKLQlmb3IoaW50IGkgPTA7IGkgPCBjbnQ7IGkrKykgCi0JCVN5c3RlbS5vdXQucHJpbnQoIiAiICk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgOiIgKyBjbCk7Ci0JY2wgPSBjbC5nZXRQYXJlbnQoKTsKLQljbnQgKz0gMzsKKyAgICBmb3IoaW50IGkgPTA7IGkgPCBjbnQ7IGkrKykKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICIgKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCA6IiArIGNsKTsKKyAgICBjbCA9IGNsLmdldFBhcmVudCgpOworICAgIGNudCArPSAzOwogfQogfQogCkBAIC05NywxMCArOTcsMTAgQEAKICAgICAgICAgZm9yKGludCBpID0wOyBpIDwgY250OyBpKyspCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICIgKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgb2YgQ2xhc3NMb2FkZXIgMSA6IiArIGNsMSk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgb2YgQ2xhc3NMb2FkZXIgMiA6IiArIGNsMik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJFUVVBTFMgOiAiICsgKGNsMSA9PSBjbDIpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCBvZiBDbGFzc0xvYWRlciAyIDoiICsgY2wyKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVRVUFMUyA6ICIgKyAoY2wxID09IGNsMikpOwogICAgICAgICBjbDEgPSBjbDEuZ2V0UGFyZW50KCk7Ci0JY2wyID0gY2wyLmdldFBhcmVudCgpOworICAgIGNsMiA9IGNsMi5nZXRQYXJlbnQoKTsKICAgICAgICAgY250ICs9IDM7CiB9CiB9CkBAIC0xMDksOTMgKzEwOSw5MyBAQAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2V0dXAoKXsKIAogICAgICAgICBpZiAoam5kaU5hbWU9PSBudWxsIHx8IGpuZGlOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgcmV0dXJuIGZhbHNlOwotCX0KKyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgICAgIGlmICh0YWJsZU5hbWU9PSBudWxsIHx8IHRhYmxlTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IG51bGw7Ci0JU3RhdGVtZW50IHMgPSBudWxsOwotCVJlc3VsdFNldCBycyA9IG51bGw7Ci0JYm9vbGVhbiBiID0gZmFsc2U7CisgICAgU3RhdGVtZW50IHMgPSBudWxsOworICAgIFJlc3VsdFNldCBycyA9IG51bGw7CisgICAgYm9vbGVhbiBiID0gZmFsc2U7CiAgICAgICAgIHRyeSB7Ci0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JLy9kZWJ1ZwotCUNsYXNzIGNseiA9IERhdGFTb3VyY2UuY2xhc3M7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgLy9kZWJ1ZworICAgIENsYXNzIGNseiA9IERhdGFTb3VyY2UuY2xhc3M7CiAvKgotCWlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJEYXRhU291cmNlJ3MgY2xhc3hzIDogIiArICBjbHouZ2V0TmFtZSgpICsgICIgY2xhc3Nsb2FkZXIgIiArIGNsei5nZXRDbGFzc0xvYWRlcigpKTsKLQkJcHJpbnRIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOwotCX0KLQlDbGFzcyBjbHMgPSBpYy5sb29rdXAoam5kaU5hbWUpLmdldENsYXNzKCk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgY2xhc3MncyA6ICIgKyBjbHMuZ2V0UGFja2FnZSgpICsgIjoiICsgY2xzLmdldE5hbWUoKSAgKyAiIGNsYXNzbG9hZGVyICIgICsgY2xzLmdldENsYXNzTG9hZGVyKCkpOwotCXByaW50SGllcmFyY2h5KGNscy5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKKyAgICBpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGF0YVNvdXJjZSdzIGNsYXN4cyA6ICIgKyAgY2x6LmdldE5hbWUoKSArICAiIGNsYXNzbG9hZGVyICIgKyBjbHouZ2V0Q2xhc3NMb2FkZXIoKSk7CisgICAgICAgIHByaW50SGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKKyAgICB9CisgICAgQ2xhc3MgY2xzID0gaWMubG9va3VwKGpuZGlOYW1lKS5nZXRDbGFzcygpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGNsYXNzJ3MgOiAiICsgY2xzLmdldFBhY2thZ2UoKSArICI6IiArIGNscy5nZXROYW1lKCkgICsgIiBjbGFzc2xvYWRlciAiICArIGNscy5nZXRDbGFzc0xvYWRlcigpKTsKKyAgICBwcmludEhpZXJhcmNoeShjbHMuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzbG9hZGVycyBlcXVhbCA/ICIgKyAgKGNsei5nZXRDbGFzc0xvYWRlcigpID09IGNscy5nZXRDbGFzc0xvYWRlcigpKSk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCImKiYqJiomKiBDb21wYXJpbmcgSGllcmFjaHkgRGF0YVNvdXJjZSB2cyBsb29rZWR1cCIpOwotCWlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKLQkJY29tcGFyZUhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKSwgY2xzLmdldENsYXNzTG9hZGVyKCksIDgpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzbG9hZGVycyBlcXVhbCA/ICIgKyAgKGNsei5nZXRDbGFzc0xvYWRlcigpID09IGNscy5nZXRDbGFzc0xvYWRlcigpKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCImKiYqJiomKiBDb21wYXJpbmcgSGllcmFjaHkgRGF0YVNvdXJjZSB2cyBsb29rZWR1cCIpOworICAgIGlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKKyAgICAgICAgY29tcGFyZUhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKSwgY2xzLmdldENsYXNzTG9hZGVyKCksIDgpOworICAgIH0KIAotCVN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGxvb2t1cCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGxvb2t1cCIpOwogKi8KLQlPYmplY3QgbyA9IGljLmxvb2t1cChqbmRpTmFtZSk7Ci0vLwlTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGxvb2t1cCBsb29rdXAiKTsKKyAgICBPYmplY3QgbyA9IGljLmxvb2t1cChqbmRpTmFtZSk7CisvLyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGxvb2t1cCBsb29rdXAiKTsKIAotCSAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpbyA7CisgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlvIDsKIC8qCi0JU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBjYXN0Iik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tIFRyeWluZyBvdXIgU3R1ZmYgISEhIik7Ci0JdHJ5IHsKLQkJQ2xhc3MgbzEgPSAoQ2xhc3MuZm9yTmFtZSgiY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UiKSk7Ci0JCUNsYXNzTG9hZGVyIGNsMSA9IG8xLmdldENsYXNzTG9hZGVyKCk7Ci0JCUNsYXNzTG9hZGVyIGNsMiA9IERhdGFTb3VyY2UuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDbDEgPT0gQ2wyIiArIChjbDEgPT0gY2wyKSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3NlcyBlcXVhbCIgKyAoRGF0YVNvdXJjZS5jbGFzcyA9PSBvMSkpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBjYXN0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tIFRyeWluZyBvdXIgU3R1ZmYgISEhIik7CisgICAgdHJ5IHsKKyAgICAgICAgQ2xhc3MgbzEgPSAoQ2xhc3MuZm9yTmFtZSgiY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UiKSk7CisgICAgICAgIENsYXNzTG9hZGVyIGNsMSA9IG8xLmdldENsYXNzTG9hZGVyKCk7CisgICAgICAgIENsYXNzTG9hZGVyIGNsMiA9IERhdGFTb3VyY2UuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbDEgPT0gQ2wyIiArIChjbDEgPT0gY2wyKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3NlcyBlcXVhbCIgKyAoRGF0YVNvdXJjZS5jbGFzcyA9PSBvMSkpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAqLwogICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBTdHJpbmcgZnVsbFRhYmxlTmFtZSA9IHRhYmxlTmFtZTsKLQkgICAgaWYgKHNjaGVtYU5hbWUgIT0gbnVsbCAmJiAoIShzY2hlbWFOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSkpIHsKLQkgICAgICAgIGZ1bGxUYWJsZU5hbWUgPSBzY2hlbWFOYW1lLnRyaW0oKSArICIuIiArIGZ1bGxUYWJsZU5hbWU7Ci0JICAgIH0KLQkgICAgU3RyaW5nIHFyeSA9ICJzZWxlY3QgKiBmcm9tICIgKyBmdWxsVGFibGVOYW1lOyAKKyAgICAgICAgU3RyaW5nIGZ1bGxUYWJsZU5hbWUgPSB0YWJsZU5hbWU7CisgICAgICAgIGlmIChzY2hlbWFOYW1lICE9IG51bGwgJiYgKCEoc2NoZW1hTmFtZS50cmltKCkuZXF1YWxzKCIiKSkpKSB7CisgICAgICAgICAgICBmdWxsVGFibGVOYW1lID0gc2NoZW1hTmFtZS50cmltKCkgKyAiLiIgKyBmdWxsVGFibGVOYW1lOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBxcnkgPSAic2VsZWN0ICogZnJvbSAiICsgZnVsbFRhYmxlTmFtZTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyBxdWVyeSA6IiArIHFyeSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0aW5nIHF1ZXJ5IDoiICsgcXJ5KTsKIAotCSAgICBzID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBycyA9IHMuZXhlY3V0ZVF1ZXJ5KHFyeSk7IAorICAgICAgICBzID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBycyA9IHMuZXhlY3V0ZVF1ZXJ5KHFyeSk7CiAKICAgICAgICAgICAgIGludCBpID0gMDsKLQkgICAgaWYgKHJzLm5leHQoKSkgewotCSAgICAgICAgaSsrOwotCSAgICB9CisgICAgICAgIGlmIChycy5uZXh0KCkpIHsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vIG9mIHJvd3MgZm91bmQ6IiArIGkpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJObyBvZiByb3dzIGV4cGVjdGVkOiIgKyBub09mUm93cyk7CiAKLQkgICAgaWYgKGkgPT0gbm9PZlJvd3MuaW50VmFsdWUoKSkgewotCSAgICAgICBiID0gdHJ1ZTsKLQkgICAgfSBlbHNlIHsKLQkgICAgICAgYiA9IGZhbHNlOwotCSAgICB9Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBiID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGlmIChycyAhPSBudWxsKSBycy5jbG9zZSgpOwotCSAgICAgICAgaWYgKHMgIT0gbnVsbCkgcy5jbG9zZSgpOwotCSAgICAgICAgaWYgKGNvbiAhPSBudWxsKSBjb24uY2xvc2UoKTsKKyAgICAgICAgaWYgKGkgPT0gbm9PZlJvd3MuaW50VmFsdWUoKSkgeworICAgICAgICAgICBiID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgYiA9IGZhbHNlOworICAgICAgICB9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBiID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChycyAhPSBudWxsKSBycy5jbG9zZSgpOworICAgICAgICAgICAgaWYgKHMgIT0gbnVsbCkgcy5jbG9zZSgpOworICAgICAgICAgICAgaWYgKGNvbiAhPSBudWxsKSBjb24uY2xvc2UoKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIH0KLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJSZXR1cm5pbmcgc2V0dXAgOiIgK2IpOwotCXJldHVybiBiOworICAgICAgICB9CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuaW5nIHNldHVwIDoiICtiKTsKKyAgICByZXR1cm4gYjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEKaW5kZXggOGViZTA1Ny4uYzU0YTIxNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEKQEAgLTIzLDQ1ICsyMyw0NSBAQAogLyoqCiAgKiA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzAzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIExvY2FsVHJhbnNhY3Rpb24gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Mb2NhbFRyYW5zYWN0aW9uIHsKLSAgICAKKwogICAgIHByaXZhdGUgTWFuYWdlZENvbm5lY3Rpb24gbWM7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4uCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IHJldHVybnMKLSAgICAgKgkJCXRoaXMgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gb2JqZWN0IGFzCi0gICAgICoJCQlhIHJlc3VsdCBvZiA8Y29kZT5nZXRMb2NhbFRyYW5zYWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCByZXR1cm5zCisgICAgICogICAgICAgICAgICB0aGlzIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IG9iamVjdCBhcworICAgICAqICAgICAgICAgICAgYSByZXN1bHQgb2YgPGNvZGU+Z2V0TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgTG9jYWxUcmFuc2FjdGlvbihNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLm1jID0gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQmVnaW4gYSBsb2NhbCB0cmFuc2FjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYmVnaW4oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uU3RhcnRlZCgpOworICAgIG1jLnRyYW5zYWN0aW9uU3RhcnRlZCgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpLnNldEF1dG9Db21taXQoZmFsc2UpOwogICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21taXQgYSBsb2NhbCB0cmFuc2FjdGlvbi4KLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uIG9yIGNvbW1pdHRpbmcgdGhlIHRyYW5zYWN0aW9uCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBvciBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbW1pdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIEV4Y2VwdGlvbiBlID0gbnVsbDsKQEAgLTcyLDE1ICs3MiwxNSBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJvbGxiYWNrIGEgbG9jYWwgdHJhbnNhY3Rpb24uCi0gICAgICogCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbiBvciByb2xsaW5nIGJhY2sgdGhlIHRyYW5zYWN0aW9uCisgICAgICoKKyAgICAgKiBAdGhyb3dzICAgIExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIG9yIHJvbGxpbmcgYmFjayB0aGUgdHJhbnNhY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjaygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CkBAIC05MCw3ICs5MCw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKaW5kZXggMzBmNDYwYS4uMmRhZDU5YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQpAQCAtNDEsOCArNDEsOCBAQAogLyoqCiAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMgotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjIKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbiBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIHsKIApAQCAtNTIsNyArNTIsNyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzRGVzdHJveWVkID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBib29sZWFuIGlzVXNhYmxlID0gdHJ1ZTsKLSAgICAKKwogICAgIHByaXZhdGUgaW50IGNvbm5lY3Rpb25UeXBlID0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTjsKICAgICBwcml2YXRlIFBvb2xlZENvbm5lY3Rpb24gcGMgPSBudWxsOwogICAgIHByaXZhdGUgamF2YS5zcWwuQ29ubmVjdGlvbiBhY3R1YWxDb25uZWN0aW9uID0gbnVsbDsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICBwcml2YXRlIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YgPSBudWxsOwogICAgIHByaXZhdGUgWEFSZXNvdXJjZSB4YXIgPSBudWxsOwogICAgIHB1YmxpYyBDb25uZWN0aW9uSG9sZGVyIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGU7Ci0gICAgCisKICAgICAvL0dKQ0lOVAogICAgIHByaXZhdGUgaW50IGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQ7CiAgICAgcHJpdmF0ZSBib29sZWFuIGlzQ2xlYW4gPSBmYWxzZTsKQEAgLTc3LDcxICs3Nyw3MSBAQAogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4gVGhlIHBvb2xlZENvbm4gcGFyYW1ldGVyIGlzIGV4cGVjdGVkCi0gICAgICogdG8gYmUgbnVsbCBhbmQgc3FsQ29ubiBwYXJhbWV0ZXIgaXMgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIGNhc2Ugd2hlcmUgCi0gICAgICogdGhlIGFjdHVhbCBjb25uZWN0aW9uIGlzIGdvdCBmcm9tIGEgbm9uIHBvb2xlZCBkYXRhc291cmNlIG9iamVjdC4gVGhlIAorICAgICAqIHRvIGJlIG51bGwgYW5kIHNxbENvbm4gcGFyYW1ldGVyIGlzIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiBjYXNlIHdoZXJlCisgICAgICogdGhlIGFjdHVhbCBjb25uZWN0aW9uIGlzIGdvdCBmcm9tIGEgbm9uIHBvb2xlZCBkYXRhc291cmNlIG9iamVjdC4gVGhlCiAgICAgICogcG9vbGVkQ29ubiBwYXJhbWV0ZXIgaXMgZXhwZWN0ZWQgdG8gYmUgbm9uIG51bGwgYW5kIHNxbENvbm4gcGFyYW1ldGVyCiAgICAgICogaXMgZXhwZWN0ZWQgdG8gYmUgbnVsbCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgZGF0YXNvdXJjZSBvYmplY3QgaXMgYQogICAgICAqIGNvbm5lY3Rpb24gcG9vbCBkYXRhc291cmNlIG9yIGFuIHhhIGRhdGFzb3VyY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcG9vbGVkQ29ubgk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgCi0gICAgICoJCQkJcGh5c2ljYWwgY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgcG9vbGVkCi0gICAgICoJCQkJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47IG51bGwgb3RoZXJ3aXNlCi0gICAgICogQHBhcmFtCXNxbENvbm4JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIHBoeXNpY2FsCi0gICAgICoJCQljb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBub24gcG9vbGVkIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OwotICAgICAqCQkJbnVsbCBvdGhlcndpc2UKLSAgICAgKiBAcGFyYW0JcGFzc3dkQ3JlZAlvYmplY3QgY29uYXRpbmluZyB0aGUKLSAgICAgKgkJCQl1c2VyIGFuZCBwYXNzd29yZCBmb3IgYWxsb2NhdGluZyB0aGUgY29ubmVjdGlvbgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0Ci0gICAgICoJCQkJCXRoYXQgY3JlYXRlZCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKLSAgICAgKgkJCQkJaXMgbm90IHRoZSBzYW1lIGFzIHJldHVybmVkIGJ5IDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKgkJCQkJb2JqZWN0IHBhc3NlZAorICAgICAqIEBwYXJhbSAgICBwb29sZWRDb25uICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZQorICAgICAqICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIHBvb2xlZAorICAgICAqICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OyBudWxsIG90aGVyd2lzZQorICAgICAqIEBwYXJhbSAgICBzcWxDb25uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgbm9uIHBvb2xlZCA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsKKyAgICAgKiAgICAgICAgICAgIG51bGwgb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHBhc3N3ZENyZWQgICAgb2JqZWN0IGNvbmF0aW5pbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgdXNlciBhbmQgcGFzc3dvcmQgZm9yIGFsbG9jYXRpbmcgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICB0aGF0IGNyZWF0ZWQgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgIGlzIG5vdCB0aGUgc2FtZSBhcyByZXR1cm5lZCBieSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIG9iamVjdCBwYXNzZWQKICAgICAgKi8KLSAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24oUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uLCBqYXZhLnNxbC5Db25uZWN0aW9uIHNxbENvbm4sIAorICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbihQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4sIGphdmEuc3FsLkNvbm5lY3Rpb24gc3FsQ29ubiwKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3N3ZENyZWQsIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKHBvb2xlZENvbm4gPT0gbnVsbCAmJiBzcWxDb25uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ29ubmVjdGlvbiBvYmplY3QgY2Fubm90IGJlIG51bGwiKTsKICAgICAgICAgfQogCi0JaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7Ci0JICAgIGFjdHVhbENvbm5lY3Rpb24gPSBzcWxDb25uOwotCX0KKyAgICBpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKKyAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IHNxbENvbm47CisgICAgfQogCiAgICAgICAgIHBjID0gcG9vbGVkQ29ubjsKICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBuZXcgSGFzaHRhYmxlKCk7CiAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBwYXNzd2RDcmVkOwogICAgICAgICB0aGlzLm1jZiA9IG1jZjsKLSAgICAgICAgaWYocGFzc3dkQ3JlZGVudGlhbCAhPSBudWxsICYmICAKKyAgICAgICAgaWYocGFzc3dkQ3JlZGVudGlhbCAhPSBudWxsICYmCiAgICAgICAgICAgICB0aGlzLm1jZi5lcXVhbHMocGFzc3dkQ3JlZGVudGlhbC5nZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKSkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB0aGF0IGhhcyBjcmVhdGVkIHRoaXMgIiArIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHRoYXQgaGFzIGNyZWF0ZWQgdGhpcyAiICsKICAgICAgICAgICAgICAgICAiTWFuYWdlZENvbm5lY3Rpb24gaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgcmV0dXJuZWQgYnkiICsKICAgICAgICAgICAgICAgICAgICAgIiB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIGZvciB0aGlzIE1hbmFnZWRDb25uZWN0aW9uIik7CiAgICAgICAgIH0KICAgICAgICAgbG9nV3JpdGVyID0gbWNmLmdldExvZ1dyaXRlcigpOwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLQljZSA9IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fQ0xPU0VEKTsKKyAgICBjZSA9IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fQ0xPU0VEKTsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBBZGRzIGEgY29ubmVjdGlvbiBldmVudCBsaXN0ZW5lciB0byB0aGUgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGlzdGVuZXIJPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxpc3RlbmVyICAgIDxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqIEBzZWUgPGNvZGU+cmVtb3ZlQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYWRkQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIoQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQl0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7CisgICAgdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBjaGFuZ2UgdGhlIGFzc29jaWF0aW9uIG9mIGFuIGFwcGxpY2F0aW9uLWxldmVsIAorICAgICAqIFVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBjaGFuZ2UgdGhlIGFzc29jaWF0aW9uIG9mIGFuIGFwcGxpY2F0aW9uLWxldmVsCiAgICAgICogY29ubmVjdGlvbiBoYW5kbGUgd2l0aCBhIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQljb25uZWN0aW9uCTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aAotICAgICAqCQkJCXRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlCi0gICAgICoJCQkJCXZhbGlkIG9yIHRoZSBjb25uZWN0aW9uIGhhbmRsZSBwYXNzZWQgaXMgbnVsbAorICAgICAqIEBwYXJhbSAgICBjb25uZWN0aW9uICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aAorICAgICAqICAgICAgICAgICAgICAgIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlCisgICAgICogICAgICAgICAgICAgICAgICAgIHZhbGlkIG9yIHRoZSBjb25uZWN0aW9uIGhhbmRsZSBwYXNzZWQgaXMgbnVsbAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGFzc29jaWF0ZUNvbm5lY3Rpb24oT2JqZWN0IGNvbm5lY3Rpb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xNTIsMTEgKzE1MiwxMSBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDb25uZWN0aW9uIGhhbmRsZSBjYW5ub3QgYmUgbnVsbCIpOwogICAgICAgICB9CiAgICAgICAgIENvbm5lY3Rpb25Ib2xkZXIgY2ggPSAoQ29ubmVjdGlvbkhvbGRlcikgY29ubmVjdGlvbjsKLSAgICAgICAgCisKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jID0gKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiljaC5nZXRNYW5hZ2VkQ29ubmVjdGlvbigpOwotCW1jLmFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotCWlzQ2xlYW4gPSBmYWxzZTsKLSAgICAgICAgCisgICAgbWMuYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CisgICAgaXNDbGVhbiA9IGZhbHNlOworCiAgICAgICAgIGNoLmFzc29jaWF0ZUNvbm5lY3Rpb24oYWN0dWFsQ29ubmVjdGlvbiwgdGhpcyk7CiAgICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgZXhwZWN0YXRpb24gZnJvbSB0aGUgYWJvdmUgbWV0aG9kIGlzIHRoYXQgdGhlIGNvbm5lY3Rpb24gaG9sZGVyCkBAIC0xNjUsMzQgKzE2NSwzNCBAQAogICAgICAgICAgKiB0byB0aGUgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2Ugd2l0aCB0aGlzIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLgogICAgICAgICAgKiBBbnkgcHJldmlvdXMgc3RhdGVtZW50cyBhbmQgcmVzdWx0IHNldHMgYWxzbyBuZWVkIHRvIGJlIHJlbW92ZWQuCiAgICAgICAgICAqLwotICAgICAgICAgCisKICAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgIT0gbnVsbCkgewogICAgICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZS5zZXRBY3RpdmUoZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNoLnNldEFjdGl2ZSh0cnVlKTsKLSAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNoOyAKKyAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNoOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEFwcGxpY2F0aW9uIHNlcnZlciBjYWxscyB0aGlzIG1ldGhvZCB0byBmb3JjZSBhbnkgY2xlYW51cCBvbiB0aGUgCisgICAgICogQXBwbGljYXRpb24gc2VydmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIGZvcmNlIGFueSBjbGVhbnVwIG9uIHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4gVGhpcyBtZXRob2QgY2FsbHMgdGhlIGludmFsaWRhdGUKICAgICAgKiBtZXRob2Qgb24gYWxsIENvbm5lY3Rpb25IYW5kbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUgdmFsaWQKKyAgICAgKgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZSB2YWxpZAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNsZWFudXAoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBjbGVhbnVwIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiBtYXkgbmVlZCB0byBzZXQgdGhlIGF1dG9jb21taXQgdG8gdHJ1ZSBmb3IgdGhlIG5vbi1wb29sZWQgY2FzZS4KICAgICAgICAgICovCiAgICAgICAgIC8vR0pDSU5UCi0JLy9pZiAoYWN0dWFsQ29ubmVjdGlvbiAhPSBudWxsKSB7Ci0JaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7CisgICAgLy9pZiAoYWN0dWFsQ29ubmVjdGlvbiAhPSBudWxsKSB7CisgICAgaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkID0gYWN0dWFsQ29ubmVjdGlvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CkBAIC0yMDEsMTcgKzIwMSwxNyBAQAogICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaXNDbGVhbiA9IHRydWU7Ci0gICAgICAgIAorCiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYWxsIHRoZSBjb25uZWN0aW9uIGhhbmRsZXMgZnJvbSB0aGUgdGFibGUKICAgICAgKiBvZiBjb25uZWN0aW9uIGhhbmRsZXMgYW5kIGludmFsaWRhdGVzIGFsbCBvZiB0aGVtIHNvIHRoYXQgYW55CiAgICAgICogb3BlcmF0aW9uIG9uIHRob3NlIGNvbm5lY3Rpb24gaGFuZGxlcyB0aHJvd3MgYW4gZXhjZXB0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhIHByb2JsZW0gaW4gcmV0cmlldmluZwotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJdGhlIGNvbm5lY3Rpb24gaGFuZGxlcworICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYSBwcm9ibGVtIGluIHJldHJpZXZpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25uZWN0aW9uIGhhbmRsZXMKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgaW52YWxpZGF0ZUFsbENvbm5lY3Rpb25IYW5kbGVzKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgU2V0IGhhbmRsZXMgPSBjb25uZWN0aW9uSGFuZGxlcy5rZXlTZXQoKTsKQEAgLTIyNiwyMiArMjI2LDIyIEBACiAgICAgICAgIH0KICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMuY2xlYXIoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBEZXN0cm95cyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiB0byB0aGUgdW5kZXJseWluZyByZXNvdXJjZSBtYW5hZ2VyLgotICAgICAqIAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2xvc2luZyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjbG9zaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBkZXN0cm95Iik7CiAgICAgICAgIH0KLQkvL0dKQ0lOVAotCWlmKGlzRGVzdHJveWVkID09IHRydWUpIHsKLQkgICAgcmV0dXJuOwkKLQl9CisgICAgLy9HSkNJTlQKKyAgICBpZihpc0Rlc3Ryb3llZCA9PSB0cnVlKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLQlhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKKyAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmKGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OIHx8IGNvbm5lY3Rpb25UeXBlID09IElTUE9PTEVEQ09OTkVDVElPTikgewogICAgICAgICAgICAgICAgIHBjLmNsb3NlKCk7CkBAIC0yNTUsMjggKzI1NSwyOCBAQAogICAgICAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlOwogICAgICAgICAgICAgcGFzc3dkQ3JlZGVudGlhbCA9IG51bGw7CiAgICAgICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG51bGw7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uIGhhcyBvY2N1cmVkIGR1cmluZyBkZXN0cm95OiAiIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgZm9sbG93aW5nIGV4Y2VwdGlvbiBoYXMgb2NjdXJlZCBkdXJpbmcgZGVzdHJveTogIgogICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgcGFzc3dkQ3JlZGVudGlhbCA9IG51bGw7CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbm5lY3Rpb24gaGFuZGxlIGZvciB0aGUgdW5kZXJseWluZyBwaHlzaWNhbCAKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbm5lY3Rpb24gaGFuZGxlIGZvciB0aGUgdW5kZXJseWluZyBwaHlzaWNhbAogICAgICAqIGNvbm5lY3Rpb24gcmVwcmVzZW50ZWQgYnkgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+IHBhcmFtZXRlciBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uCi0gICAgICogQHBhcmFtCWN4UmVxSW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGNhcnJpZXMgdGhlIHVzZXIgCi0gICAgICogICAgICAgCSAgICAgICAgIAlhbmQgcGFzc3dvcmQgcmVxdWlyZWQgZm9yIGdldHRpbmcgdGhpcyBjb25uZWN0aW9uLgotICAgICAqIEByZXR1cm4JQ29ubmVjdGlvbgl0aGUgY29ubmVjdGlvbiBoYW5kbGUgPGNvZGU+T2JqZWN0PC9jb2RlPgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlwaHlzaWNhbCBjb25uZWN0aW9uIGZyb20gdGhlIHBvb2xlZCBjb25uZWN0aW9uIAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJcGFzc3dvcmQgY3JlZGVudGlhbHMgb3IgcmVhdXRoZW50aWNhdGlvbiBpcyByZXF1ZXN0ZWQKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgbmVlZGVkIGZvciBhdXRoZW50aWNhdGlvbgorICAgICAqIEBwYXJhbSAgICBjeFJlcUluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBjYXJyaWVzIHRoZSB1c2VyCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBhbmQgcGFzc3dvcmQgcmVxdWlyZWQgZm9yIGdldHRpbmcgdGhpcyBjb25uZWN0aW9uLgorICAgICAqIEByZXR1cm4gICAgQ29ubmVjdGlvbiAgICB0aGUgY29ubmVjdGlvbiBoYW5kbGUgPGNvZGU+T2JqZWN0PC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24gZnJvbSB0aGUgcG9vbGVkIGNvbm5lY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkIGNyZWRlbnRpYWxzIG9yIHJlYXV0aGVudGljYXRpb24gaXMgcmVxdWVzdGVkCiAgICAgICovCi0gICAgcHVibGljIE9iamVjdCBnZXRDb25uZWN0aW9uKFN1YmplY3Qgc3ViLCBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXFJbmZvKSAKKyAgICBwdWJsaWMgT2JqZWN0IGdldENvbm5lY3Rpb24oU3ViamVjdCBzdWIsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcUluZm8pCiAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0Q29ubmVjdGlvbiIpOwpAQCAtMjg0LDE0ICsyODQsMTQgQEAKICAgICAgICAgY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbyA9IChjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvKSBjeFJlcUluZm87CiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYXNzd2RDcmVkID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcy5tY2YsIHN1YiwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZihTZWN1cml0eVV0aWxzLmlzUGFzc3dvcmRDcmVkZW50aWFsRXF1YWwodGhpcy5wYXNzd2RDcmVkZW50aWFsLCBwYXNzd2RDcmVkKSA9PSBmYWxzZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlNlY3VyaXR5RXhjZXB0aW9uKCJSZS1hdXRoZW50aWNhdGlvbiBub3Qgc3VwcG9ydGVkIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy9HSkNJTlQKICAgICAgICAgZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgZm9sbG93aW5nIGNvZGUgaW4gdGhlIGlmIHN0YXRlbWVudCBmaXJzdCBjaGVja3MgaWYgdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbgogICAgICAgICAgKiBpcyBjbGVhbiBvciBub3QuIElmIGl0IGlzLCBpdCByZXNldHMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCB0byB3aGF0CkBAIC0zMDEsMjggKzMwMSwyOCBAQAogICAgICAgICBpZihpc0NsZWFuKSB7CiAgICAgICAgICAgICAoKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpbWNmKS5yZXNldElzb2xhdGlvbih0aGlzLCBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgIAorCisKICAgICAgICAgQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0ID0gbmV3IENvbm5lY3Rpb25Ib2xkZXIoYWN0dWFsQ29ubmVjdGlvbiwgdGhpcyk7Ci0JaXNDbGVhbj1mYWxzZTsKLSAgICAgICAgCisgICAgaXNDbGVhbj1mYWxzZTsKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUuc2V0QWN0aXZlKGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBjb25uSG9sZGVyT2JqZWN0LnNldEFjdGl2ZSh0cnVlKTsKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNvbm5Ib2xkZXJPYmplY3Q7Ci0gCisKICAgICAgICAgcmV0dXJuIGNvbm5Ib2xkZXJPYmplY3Q7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhbiA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4gVGhlIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGludGVyZmFjZQotICAgICAqIGlzIHVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBtYW5hZ2UgbG9jYWwgdHJhbnNhY3Rpb25zIGZvciBhIFJNIGluc3RhbmNlLiAKKyAgICAgKiBpcyB1c2VkIGJ5IHRoZSBjb250YWluZXIgdG8gbWFuYWdlIGxvY2FsIHRyYW5zYWN0aW9ucyBmb3IgYSBSTSBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5Mb2NhbFRyYW5zYWN0aW9uIGdldExvY2FsVHJhbnNhY3Rpb24oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMzMxLDEzICszMzEsMTMgQEAKICAgICAgICAgY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIHJldHVybiBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkxvY2FsVHJhbnNhY3Rpb24odGhpcyk7CiAgICAgfQotICAgICAKKwogICAgIC8qKgotICAgICAqIEdldHMgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLiAKKyAgICAgKiBHZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIAotICAgICAqCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICogQHNlZSA8Y29kZT5zZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC0zNDUsNDYgKzM0NSw0NiBAQAogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRMb2dXcml0ZXIiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGxvZ1dyaXRlcjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtZXRhZGF0YSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb25uZWN0aW9uJ3MgdW5kZXJseWluZyBFSVMgCi0gICAgICogcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZS4gCisgICAgICogR2V0cyB0aGUgbWV0YWRhdGEgaW5mb3JtYXRpb24gZm9yIHRoaXMgY29ubmVjdGlvbidzIHVuZGVybHlpbmcgRUlTCisgICAgICogcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhIGdldE1ldGFEYXRhKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0TWV0YURhdGEiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSh0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIGFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLiAKKyAgICAgKiBSZXR1cm5zIGFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCi0gICAgICoJCQkJCXRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqCQkJCQk8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJTm90U3VwcG9ydGVkRXhjZXB0aW9uCWlmIHVuZGVybHlpbmcgZGF0YXNvdXJjZSBpcyBub3QgYW4KLSAgICAgKgkJCQkJPGNvZGU+WEFEYXRhU291cmNlPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgorICAgICAqICAgICAgICAgICAgICAgICAgICB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgTm90U3VwcG9ydGVkRXhjZXB0aW9uICAgIGlmIHVuZGVybHlpbmcgZGF0YXNvdXJjZSBpcyBub3QgYW4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+WEFEYXRhU291cmNlPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlIGdldFhBUmVzb3VyY2UoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRYQVJlc291cmNlIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmKHhhciA9PSBudWxsKSB7Ci0JCSAgICAvKioKKyAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICAgICAgICAgKiBVc2luZyB0aGUgd3JhcHBlciBYQVJlc291cmNlLgogICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgeGFyID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5YQVJlc291cmNlSW1wbCgoKFhBQ29ubmVjdGlvbilwYykuZ2V0WEFSZXNvdXJjZSgpLCB0aGlzKTsKQEAgLTM5NywxNiArMzk3LDE2IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJDYW5ub3QgZ2V0IGFuIFhBUmVzb3VyY2UgZnJvbSBhIG5vbiBYQSBjb25uZWN0aW9uIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZW1vdmVzIGFuIGFscmVhZHkgcmVnaXN0ZXJlZCBjb25uZWN0aW9uIGV2ZW50IGxpc3RlbmVyIGZyb20gdGhlCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWxpc3RlbmVyCTxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPiB0byBiZSByZW1vdmVkCisgICAgICogQHBhcmFtICAgIGxpc3RlbmVyICAgIDxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPiB0byBiZSByZW1vdmVkCiAgICAgICogQHNlZSA8Y29kZT5hZGRDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByZW1vdmVDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcihDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBsaXN0ZW5lcikgewotCWxpc3RlbmVyID0gbnVsbDsKKyAgICBsaXN0ZW5lciA9IG51bGw7CiAgICAgfQogCiAgICAgLyoqCkBAIC00MTUsNyArNDE1LDcgQEAKICAgICAgKiBMb2NhbFRyYW5zYWN0aW9uIG9iamVjdCB3aGVuIGl0cyBiZWdpbigpIG1ldGhvZCBpcyBjYWxsZWQuCiAgICAgICovCiAgICAgdm9pZCB0cmFuc2FjdGlvblN0YXJ0ZWQoKSB7Ci0JdHJhbnNhY3Rpb25JblByb2dyZXNzID0gdHJ1ZTsJCisgICAgdHJhbnNhY3Rpb25JblByb2dyZXNzID0gdHJ1ZTsKICAgICB9CiAKICAgICAvKioKQEAgLTQyNCwxNiArNDI0LDE2IEBACiAgICAgICogTG9jYWxUcmFuc2FjdGlvbiBvYmplY3Qgd2hlbiBpdHMgZW5kKCkgbWV0aG9kIGlzIGNhbGxlZC4KICAgICAgKi8KICAgICB2b2lkIHRyYW5zYWN0aW9uQ29tcGxldGVkKCkgewotCXRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOwotCWlmKGNvbm5lY3Rpb25UeXBlID09IElTUE9PTEVEQ09OTkVDVElPTiB8fCBjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTikgeworICAgIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgIGlmKGNvbm5lY3Rpb25UeXBlID09IElTUE9PTEVEQ09OTkVDVElPTiB8fCBjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTikgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkID0gYWN0dWFsQ29ubmVjdGlvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpOwogICAgICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgLy9jaGVjayB3aGF0IHRvIGRvIGluIHRoaXMgY2FzZSEhCi0JCV9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLm5vdGdvdF90eF9pc29sdmwiKTsKKyAgICAgICAgICAgIC8vY2hlY2sgd2hhdCB0byBkbyBpbiB0aGlzIGNhc2UhIQorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5ub3Rnb3RfdHhfaXNvbHZsIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLQkgICAgdHJ5IHsKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGFjdHVhbENvbm5lY3Rpb24uY2xvc2UoKTsKICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKQEAgLTQ0MSw3ICs0NDEsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLQkgICAgICAgIAorCiAgICAgICAgIGlzQ2xlYW4gPSB0cnVlOwogCiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwpAQCAtNDUzLDI4ICs0NTMsMjggQEAKICAgICAgKiBvciBub3QuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSB7Ci0JcmV0dXJuIHRyYW5zYWN0aW9uSW5Qcm9ncmVzczsKKyAgICByZXR1cm4gdHJhbnNhY3Rpb25JblByb2dyZXNzOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCW91dAk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHBhcmFtICAgIG91dCAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICogQHNlZSA8Y29kZT5nZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKFByaW50V3JpdGVyIG91dCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIGxvZ1dyaXRlciA9IG91dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mIHRoZSBjb25uZWN0aW9uIGJlaW5nIGhlbGQgCisgICAgICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiB0aGUgY29ubmVjdGlvbiBiZWluZyBoZWxkCiAgICAgICogaW4gdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCXBvb2xlZENvbm4JPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAcmV0dXJuCWNvbm5lY3Rpb24gdHlwZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHBvb2xlZENvbm4gICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdHlwZQogICAgICAqLwogICAgIHByaXZhdGUgaW50IGdldENvbm5lY3Rpb25UeXBlKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubikgewogICAgICAgICBpZihwb29sZWRDb25uID09IG51bGwpIHsKQEAgLTQ4NSwyMiArNDg1LDIyIEBACiAgICAgICAgICAgICByZXR1cm4gSVNQT09MRURDT05ORUNUSU9OOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IAorICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdAogICAgICAqIGNyZWF0ZWQgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCBjcmVhdGVkIHRoaXMKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgY3JlYXRlZCB0aGlzCisgICAgICogICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQogICAgICAqLwogICAgIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBnZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKSB7CiAgICAgICAgIHJldHVybiAoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSltY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgYWN0dWFsIHNxbCBjb25uZWN0aW9uIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4gCisgICAgICogUmV0dXJucyB0aGUgYWN0dWFsIHNxbCBjb25uZWN0aW9uIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JdGhlIHBoeXNpY2FsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICB0aGUgcGh5c2ljYWwgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4KICAgICAgKi8KICAgICAvL0dKQ0lOVAogICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZ2V0QWN0dWFsQ29ubmVjdGlvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC01MDksOCArNTA5LDggQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYoYWN0dWFsQ29ubmVjdGlvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBwYy5nZXRDb25uZWN0aW9uKCk7Ci0JCX0KLQkJCisgICAgICAgIH0KKwogICAgICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewogICAgICAgICAgICAgICAgIHNxbGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKQEAgLTUxOCw4MSArNTE4LDgxIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGFjdHVhbENvbm5lY3Rpb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIAotICAgICAqCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCiAgICAgICovCiAgICAgUGFzc3dvcmRDcmVkZW50aWFsIGdldFBhc3N3b3JkQ3JlZGVudGlhbCgpIHsKICAgICAgICAgcmV0dXJuIHBhc3N3ZENyZWRlbnRpYWw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdCBhbmQgdGhyb3dzIGFuCiAgICAgICogZXhjZXB0aW9uIGlmIGl0IGlzIG5vdCB2YWxpZC4gQSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaXMgbm90IHZhbGlkIGlmCiAgICAgICogZGVzdHJveSBoYXMgbm90IGJlZW4gY2FsbGVkIGFuZCBubyBwaHlzaWNhbCBjb25uZWN0aW9uIGVycm9yIGhhcwogICAgICAqIG9jY3VycmVkIHJlbmRlcmluZyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiB1bnVzYWJsZS4KICAgICAgKgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgPGNvZGU+ZGVzdHJveTwvY29kZT4gaGFzIGJlZW4gY2FsbGVkIG9uIHRoaXMgCi0gICAgICoJCQkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSBvciBpZiBhIAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBvY2N1cnJlZCByZW5kZXJpbmcgaXQgdW51c2FibGUKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIDxjb2RlPmRlc3Ryb3k8L2NvZGU+IGhhcyBiZWVuIGNhbGxlZCBvbiB0aGlzCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSBvciBpZiBhCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGVycm9yIG9jY3VycmVkIHJlbmRlcmluZyBpdCB1bnVzYWJsZQogICAgICAqLwogICAgIC8vR0pDSU5UCiAgICAgdm9pZCBjaGVja0lmVmFsaWQoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihpc0Rlc3Ryb3llZCA9PSB0cnVlIHx8IGlzVXNhYmxlID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoaXMgTWFuYWdlZENvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzIHRoZSBwaHlzaWNhbCAiICsgCisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoaXMgTWFuYWdlZENvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzIHRoZSBwaHlzaWNhbCAiICsKICAgICAgICAgICAgICAgICAiY29ubmVjdGlvbiBpcyBub3QgdXNhYmxlLiIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB3aGVuIGl0cyBjbG9zZSBtZXRob2QgaXMKICAgICAgKiBjYWxsZWQuIFRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlICBpbnZhbGlkYXRlcyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKICAgICAgKiBhbmQgc2VuZHMgYSBDT05ORUNUSU9OX0NMT1NFRCBldmVudCB0byBhbGwgdGhlIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLgogICAgICAqCi0gICAgICogQHBhcmFtCWUJRXhjZXB0aW9uIHRoYXQgbWF5IGhhdmUgb2NjdXJlZCB3aGlsZSBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGhhbmRsZQotICAgICAqIEBwYXJhbQljb25uSG9sZGVyT2JqZWN0CTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgaGFzIGJlZW4gY2xvc2VkCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JaW4gY2FzZSBjbG9zaW5nIHRoZSBzcWwgY29ubmVjdGlvbiBnb3Qgb3V0IG9mCi0gICAgICogICAgICAgICAJICAgICAgICAgICAgCTxjb2RlPmdldENvbm5lY3Rpb248L2NvZGU+IG9uIHRoZSB1bmRlcmx5aW5nIAotICAgICAqCQkJCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IHRocm93cyBhbiBleGNlcHRpb24KKyAgICAgKiBAcGFyYW0gICAgZSAgICBFeGNlcHRpb24gdGhhdCBtYXkgaGF2ZSBvY2N1cmVkIHdoaWxlIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCisgICAgICogQHBhcmFtICAgIGNvbm5Ib2xkZXJPYmplY3QgICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBoYXMgYmVlbiBjbG9zZWQKKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBpbiBjYXNlIGNsb3NpbmcgdGhlIHNxbCBjb25uZWN0aW9uIGdvdCBvdXQgb2YKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+Z2V0Q29ubmVjdGlvbjwvY29kZT4gb24gdGhlIHVuZGVybHlpbmcKKyAgICAgKiAgICAgICAgICAgICAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiB0aHJvd3MgYW4gZXhjZXB0aW9uCiAgICAgICovCiAgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKEV4Y2VwdGlvbiBlLCBDb25uZWN0aW9uSG9sZGVyIGNvbm5Ib2xkZXJPYmplY3QpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBjb25uSG9sZGVyT2JqZWN0LmludmFsaWRhdGUoKTsKLSAgICAgICAgCisKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIGNlLnNldENvbm5lY3Rpb25IYW5kbGUoY29ubkhvbGRlck9iamVjdCk7CiAgICAgICAgIGxpc3RlbmVyLmNvbm5lY3Rpb25DbG9zZWQoY2UpOwotCQorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB3aGVuIGl0IGRldGVjdHMgYSBjb25uZWNpb24KICAgICAgKiByZWxhdGVkIGVycm9yLgogICAgICAqCi0gICAgICogQHBhcmFtCWUJRXhjZXB0aW9uIHRoYXQgaGFzIG9jY3VycmVkIGR1cmluZyBhbiBvcGVyYXRpb24gb24gdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KLSAgICAgKiBAcGFyYW0JY29ubkhvbGRlck9iamVjdAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGRldGVjdGVkIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQljb25uZWN0aW9uIGVycm9yCisgICAgICogQHBhcmFtICAgIGUgICAgRXhjZXB0aW9uIHRoYXQgaGFzIG9jY3VycmVkIGR1cmluZyBhbiBvcGVyYXRpb24gb24gdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gICAgY29ubkhvbGRlck9iamVjdCAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGRldGVjdGVkIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIGVycm9yCiAgICAgICovCi0gICAgdm9pZCBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChFeGNlcHRpb24gZSwgCisgICAgdm9pZCBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChFeGNlcHRpb24gZSwKICAgICAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyIGNvbm5Ib2xkZXJPYmplY3QpIHsKLQkgICAgCisKICAgICAgICAgIENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGNlbCA9IHRoaXMubGlzdGVuZXI7CiAgICAgICAgICBDb25uZWN0aW9uRXZlbnQgY2UgPSBudWxsOwogICAgICAgICAgY2UgPSBlID09IG51bGwgPyBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0VSUk9SX09DQ1VSUkVEKQogICAgICAgICAgICAgICAgICAgICA6IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fRVJST1JfT0NDVVJSRUQsIGUpOwogICAgICAgICAgaWYgKGNvbm5Ib2xkZXJPYmplY3QgIT0gbnVsbCkgewogICAgICAgICAgICAgIGNlLnNldENvbm5lY3Rpb25IYW5kbGUoY29ubkhvbGRlck9iamVjdCk7Ci0gICAgICAgICB9ICAgIAorICAgICAgICAgfQogCiAgICAgICAgICBjZWwuY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoY2UpOwogICAgICAgICAgaXNVc2FibGUgPSBmYWxzZTsKICAgICB9Ci0gICAgCi0gICAgCi0gICAgCisKKworCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hlbiBpdHMgc3RhcnQgbWV0aG9kCiAgICAgICogaGFzIGJlZW4gaW52b2tlZC4KQEAgLTYwNiw3ICs2MDYsNyBAQAogICAgICAgICAgICAgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoZSwgbnVsbCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aGVuIGl0cyBlbmQgbWV0aG9kCiAgICAgICogaGFzIGJlZW4gaW52b2tlZC4KQEAgLTYyMCw3ICs2MjAsNyBAQAogICAgICAgICAgICAgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoZSwgbnVsbCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgYSBDb25uZWN0aW9uIEhhbmRsZSB0byBjaGVjayBpZiBpdCBpcwogICAgICAqIHRoZSBhY3RpdmUgQ29ubmVjdGlvbiBIYW5kbGUuIElmIGl0IGlzIG5vdCB0aGUgYWN0aXZlIENvbm5lY3Rpb24KQEAgLTYyOSwyNCArNjI5LDI0IEBACiAgICAgICogQ29ubmVjdGlvbiBIYW5kbGUgb2JqZWN0IHRvIHRoaXMgb2JqZWN0IGlmIHRoZSBhY3RpdmUgQ29ubmVjdGlvbgogICAgICAqIEhhbmRsZSBpcyBudWxsLgogICAgICAqCi0gICAgICogQHBhcmFtCWNoCTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgcmVxdWVzdHMgdGhpcwotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHdoZXRoZXIKLSAgICAgKgkJCWl0IGNhbiBiZSBhY3RpdmUgb3Igbm90Ci0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JaW4gY2FzZSB0aGUgcGh5c2ljYWwgaXMgbm90IHZhbGlkIG9yCi0gICAgICoJCQkJdGhlcmUgaXMgYWxyZWFkeSBhbiBhY3RpdmUgY29ubmVjdGlvbiBoYW5kbGUKKyAgICAgKiBAcGFyYW0gICAgY2ggICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCByZXF1ZXN0cyB0aGlzCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugd2hldGhlcgorICAgICAqICAgICAgICAgICAgaXQgY2FuIGJlIGFjdGl2ZSBvciBub3QKKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBpbiBjYXNlIHRoZSBwaHlzaWNhbCBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICB0aGVyZSBpcyBhbHJlYWR5IGFuIGFjdGl2ZSBjb25uZWN0aW9uIGhhbmRsZQogICAgICAqLwotICAgICAKKwogICAgIHZvaWQgY2hlY2tJZkFjdGl2ZShDb25uZWN0aW9uSG9sZGVyIGNoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSB8fCBpc1VzYWJsZSA9PSBmYWxzZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbigiVGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHVzYWJsZSIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPT0gbnVsbCkgewogICAgICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNoOwogICAgICAgICAgICAgY2guc2V0QWN0aXZlKHRydWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgIT0gY2gpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGhhbmRsZSBjYW5ub3QgYmUgdXNlZCBhcyBhbm90aGVyIGNvbm5lY3Rpb24gaXMgY3VycmVudGx5IGFjdGl2ZSIpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhCmluZGV4IDIwZjAzYWEuLmY2NTBkNDEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiAvKioKICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzAzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgewogCkBAIC00MSw4MSArNDEsODEgQEAKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPglpZiBnZXR0aW5nIHRoZSBEYXRhYmFzZU1ldGFEYXRhIG9iamVjdCBmYWlscworICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiAgICBpZiBnZXR0aW5nIHRoZSBEYXRhYmFzZU1ldGFEYXRhIG9iamVjdCBmYWlscwogICAgICAqLwogICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhKE1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgICAgICAgICAgZG1kID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpLmdldE1ldGFEYXRhKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHByb2R1Y3QgbmFtZSBvZiB0aGUgdW5kZXJseWluZyBFSVMgaW5zdGFuY2UgY29ubmVjdGVkCiAgICAgICogdGhyb3VnaCB0aGUgTWFuYWdlZENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVByb2R1Y3QgbmFtZSBvZiB0aGUgRUlTIGluc3RhbmNlCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIFByb2R1Y3QgbmFtZSBvZiB0aGUgRUlTIGluc3RhbmNlCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEVJU1Byb2R1Y3ROYW1lKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0RGF0YWJhc2VQcm9kdWN0TmFtZSgpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kbmFtZSIsIHNxbGUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZG5hbWUiLCBzcWxlKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgdW5kZXJseWluZyBFSVMgaW5zdGFuY2UgY29ubmVjdGVkCiAgICAgICogdGhyb3VnaCB0aGUgTWFuYWdlZENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgRUlTIGluc3RhbmNlCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIFByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgRUlTIGluc3RhbmNlCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEVJU1Byb2R1Y3RWZXJzaW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0RGF0YWJhc2VQcm9kdWN0VmVyc2lvbigpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kdmVycyIsIHNxbGUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZHZlcnMiLCBzcWxlKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSwgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBtYXhpbXVtIGxpbWl0IG9uIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucwogICAgICAqIHRoYXQgYW4gRUlTIGluc3RhbmNlIGNhbiBzdXBwb3J0IGFjcm9zcyBjbGllbnQgcHJvY2Vzc2VzLgogICAgICAqCi0gICAgICogQHJldHVybglNYXhpbXVtIGxpbWl0IGZvciBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgTWF4aW11bSBsaW1pdCBmb3IgbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldE1heENvbm5lY3Rpb25zKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0TWF4Q29ubmVjdGlvbnMoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfbWF4Y29ubiIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfbWF4Y29ubiIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgbmFtZSBvZiB0aGUgdXNlciBhc3NvY2lhdGVkIHdpdGggdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLiBUaGUgbmFtZQogICAgICAqIGNvcnJlc3BvbmRzIHRvIHRoZSByZXNvdXJjZSBwcmluY2lwYWwgdW5kZXIgd2hvc2Ugd2hvc2Ugc2VjdXJpdHkgY29udGV4dCwgYSBjb25uZWN0aW9uCiAgICAgICogdG8gdGhlIEVJUyBpbnN0YW5jZSBoYXMgYmVlbiBlc3RhYmxpc2hlZC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbmFtZSBvZiB0aGUgdXNlcgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBuYW1lIG9mIHRoZSB1c2VyCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXJOYW1lKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgamFrYXJ0YS5yZXNvdXJjZS5zcGkuc2VjdXJpdHkuUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gbWMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCk7CiAgICAgICAgIGlmKHBjICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBwYy5nZXRVc2VyTmFtZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBtYy5nZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKS5nZXRVc2VyKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCmluZGV4IGRhZDFkNzcuLjQ4MmYzMzIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKQEAgLTI0LDE0OCArMjQsMTQ4IEBACiAvKioKICAqIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IHdyYXBwZXIgZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8yMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMjMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBYQVJlc291cmNlSW1wbCBpbXBsZW1lbnRzIFhBUmVzb3VyY2UgewogCiAgICAgWEFSZXNvdXJjZSB4YXI7CiAgICAgTWFuYWdlZENvbm5lY3Rpb24gbWM7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgWEFSZXNvdXJjZUltcGwKICAgICAgKgotICAgICAqIEBwYXJhbQl4YXIJPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4KLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHhhciAgICA8Y29kZT5YQVJlc291cmNlPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgWEFSZXNvdXJjZUltcGwoWEFSZXNvdXJjZSB4YXIsIE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7CiAgICAgICAgIHRoaXMueGFyID0geGFyOwogICAgICAgICB0aGlzLm1jID0gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IHRoZSBnbG9iYWwgdHJhbnNhY3Rpb24gc3BlY2lmaWVkIGJ5IHhpZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgotICAgICAqIEBwYXJhbQlvbmVQaGFzZQlJZiB0cnVlLCB0aGUgcmVzb3VyY2UgbWFuYWdlciBzaG91bGQgdXNlIGEgb25lLXBoYXNlIGNvbW1pdCAKLSAgICAgKiAgICAgICAJICAgICAgICAJcHJvdG9jb2wgdG8gY29tbWl0IHRoZSB3b3JrIGRvbmUgb24gYmVoYWxmIG9mIHhpZC4KKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcGFyYW0gICAgb25lUGhhc2UgICAgSWYgdHJ1ZSwgdGhlIHJlc291cmNlIG1hbmFnZXIgc2hvdWxkIHVzZSBhIG9uZS1waGFzZSBjb21taXQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgdG8gY29tbWl0IHRoZSB3b3JrIGRvbmUgb24gYmVoYWxmIG9mIHhpZC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoWGlkIHhpZCwgYm9vbGVhbiBvbmVQaGFzZSkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy90aGUgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQgY2FsbCBoYXMgY29tZSBoZXJlIGJlY2FzdWUKLQkvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdwotCS8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCi0JLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCi0JLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAotCS8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgotCW1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKKyAgICAvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAorICAgIC8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcworICAgIC8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKKyAgICAvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKKyAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgICAgICB4YXIuY29tbWl0KHhpZCwgb25lUGhhc2UpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVuZHMgdGhlIHdvcmsgcGVyZm9ybWVkIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQgCi0gICAgICoJCQl3YXMgdXNlZCBwcmV2aW91c2x5IGluIHRoZSBzdGFydCBtZXRob2QuCi0gICAgICogQHBhcmFtCWZsYWdzCU9uZSBvZiBUTVNVQ0NFU1MsIFRNRkFJTCwgb3IgVE1TVVNQRU5ECisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdAorICAgICAqICAgICAgICAgICAgd2FzIHVzZWQgcHJldmlvdXNseSBpbiB0aGUgc3RhcnQgbWV0aG9kLgorICAgICAqIEBwYXJhbSAgICBmbGFncyAgICBPbmUgb2YgVE1TVUNDRVNTLCBUTUZBSUwsIG9yIFRNU1VTUEVORAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVuZChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHhhci5lbmQoeGlkLCBmbGFncyk7CiAgICAgICAgIC8vR0pDSU5UCi0JLy9tYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIC8vbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUZWxsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIGZvcmdldCBhYm91dCBhIGhldXJpc3RpY2FsbHkgY29tcGxldGVkIHRyYW5zYWN0aW9uIGJyYW5jaC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGZvcmdldChYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICB4YXIuZm9yZ2V0KHhpZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogT2J0YWluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgc2V0IGZvciB0aGlzIAorICAgICAqIE9idGFpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIHNldCBmb3IgdGhpcwogICAgICAqIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgl0aGUgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzCisgICAgICogQHJldHVybiAgICB0aGUgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRUcmFuc2FjdGlvblRpbWVvdXQoKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLmdldFRyYW5zYWN0aW9uVGltZW91dCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UgCi0gICAgICogcmVwcmVzZW50ZWQgYnkgdGhlIHRhcmdldCBvYmplY3QgaXMgdGhlIHNhbWUgYXMgdGhlIHJlc291Y2UgbWFuYWdlciAKKyAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlCisgICAgICogcmVwcmVzZW50ZWQgYnkgdGhlIHRhcmdldCBvYmplY3QgaXMgdGhlIHNhbWUgYXMgdGhlIHJlc291Y2UgbWFuYWdlcgogICAgICAqIGluc3RhbmNlIHJlcHJlc2VudGVkIGJ5IHRoZSBwYXJhbWV0ZXIgeGFyZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGFyZXMJQW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdob3NlIHJlc291cmNlIG1hbmFnZXIgCi0gICAgICogCQkJaW5zdGFuY2UgaXMgdG8gYmUgY29tcGFyZWQgd2l0aCB0aGUgcmVzb3VyY2UKLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgaXQncyB0aGUgc2FtZSBSTSBpbnN0YW5jZTsgb3RoZXJ3aXNlIGZhbHNlLgorICAgICAqIEBwYXJhbSAgICB4YXJlcyAgICBBbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hvc2UgcmVzb3VyY2UgbWFuYWdlcgorICAgICAqICAgICAgICAgICAgIGluc3RhbmNlIGlzIHRvIGJlIGNvbXBhcmVkIHdpdGggdGhlIHJlc291cmNlCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIGl0J3MgdGhlIHNhbWUgUk0gaW5zdGFuY2U7IG90aGVyd2lzZSBmYWxzZS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1NhbWVSTShYQVJlc291cmNlIHhhcmVzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLmlzU2FtZVJNKHhhcmVzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBBc2sgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gcHJlcGFyZSBmb3IgYSB0cmFuc2FjdGlvbiBjb21taXQgCisgICAgICogQXNrIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIHByZXBhcmUgZm9yIGEgdHJhbnNhY3Rpb24gY29tbWl0CiAgICAgICogb2YgdGhlIHRyYW5zYWN0aW9uIHNwZWNpZmllZCBpbiB4aWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKLSAgICAgKiBAcmV0dXJuCUEgdmFsdWUgaW5kaWNhdGluZyB0aGUgcmVzb3VyY2UgbWFuYWdlcidzIHZvdGUgb24gdGhlIAotICAgICAqCQlvdXRjb21lIG9mIHRoZSB0cmFuc2FjdGlvbi4gVGhlIHBvc3NpYmxlIHZhbHVlcwotICAgICAqCQlhcmU6IFhBX1JET05MWSBvciBYQV9PSy4gSWYgdGhlIHJlc291cmNlIG1hbmFnZXIgd2FudHMgCi0gICAgICoJCXRvIHJvbGwgYmFjayB0aGUgdHJhbnNhY3Rpb24sIGl0IHNob3VsZCBkbyBzbwotICAgICAqCQlieSByYWlzaW5nIGFuIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPiBpbiB0aGUgcHJlcGFyZSBtZXRob2QuCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHJldHVybiAgICBBIHZhbHVlIGluZGljYXRpbmcgdGhlIHJlc291cmNlIG1hbmFnZXIncyB2b3RlIG9uIHRoZQorICAgICAqICAgICAgICBvdXRjb21lIG9mIHRoZSB0cmFuc2FjdGlvbi4gVGhlIHBvc3NpYmxlIHZhbHVlcworICAgICAqICAgICAgICBhcmU6IFhBX1JET05MWSBvciBYQV9PSy4gSWYgdGhlIHJlc291cmNlIG1hbmFnZXIgd2FudHMKKyAgICAgKiAgICAgICAgdG8gcm9sbCBiYWNrIHRoZSB0cmFuc2FjdGlvbiwgaXQgc2hvdWxkIGRvIHNvCisgICAgICogICAgICAgIGJ5IHJhaXNpbmcgYW4gYXBwcm9wcmlhdGUgPGNvZGU+WEFFeGNlcHRpb248L2NvZGU+IGluIHRoZSBwcmVwYXJlIG1ldGhvZC4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IHByZXBhcmUoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5wcmVwYXJlKHhpZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogT2J0YWluIGEgbGlzdCBvZiBwcmVwYXJlZCB0cmFuc2FjdGlvbiBicmFuY2hlcyBmcm9tIGEgcmVzb3VyY2UgbWFuYWdlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlmbGFnCU9uZSBvZiBUTVNUQVJUUlNDQU4sIFRNRU5EUlNDQU4sIFRNTk9GTEFHUy4gVE1OT0ZMQUdTIAotICAgICAqCQkJbXVzdCBiZSB1c2VkIHdoZW4gbm8gb3RoZXIgZmxhZ3MgYXJlIHNldCBpbiBmbGFncy4KLSAgICAgKiBAcmV0dXJuCVRoZSByZXNvdXJjZSBtYW5hZ2VyIHJldHVybnMgemVybyBvciBtb3JlIFhJRHMgZm9yIHRoZSB0cmFuc2FjdGlvbiAKLSAgICAgKgkJYnJhbmNoZXMgdGhhdCBhcmUgY3VycmVudGx5IGluIGEgcHJlcGFyZWQgb3IgaGV1cmlzdGljYWxseSAKLSAgICAgKgkJY29tcGxldGVkIHN0YXRlLiBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBvcGVyYXRpb24sIHRoZSByZXNvdXJjZQotICAgICAqCQltYW5hZ2VyIHNob3VsZCB0aHJvdyB0aGUgYXBwcm9wcmlhdGUgPGNvZGU+WEFFeGNlcHRpb248L2NvZGU+LgorICAgICAqIEBwYXJhbSAgICBmbGFnICAgIE9uZSBvZiBUTVNUQVJUUlNDQU4sIFRNRU5EUlNDQU4sIFRNTk9GTEFHUy4gVE1OT0ZMQUdTCisgICAgICogICAgICAgICAgICBtdXN0IGJlIHVzZWQgd2hlbiBubyBvdGhlciBmbGFncyBhcmUgc2V0IGluIGZsYWdzLgorICAgICAqIEByZXR1cm4gICAgVGhlIHJlc291cmNlIG1hbmFnZXIgcmV0dXJucyB6ZXJvIG9yIG1vcmUgWElEcyBmb3IgdGhlIHRyYW5zYWN0aW9uCisgICAgICogICAgICAgIGJyYW5jaGVzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBhIHByZXBhcmVkIG9yIGhldXJpc3RpY2FsbHkKKyAgICAgKiAgICAgICAgY29tcGxldGVkIHN0YXRlLiBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBvcGVyYXRpb24sIHRoZSByZXNvdXJjZQorICAgICAqICAgICAgICBtYW5hZ2VyIHNob3VsZCB0aHJvdyB0aGUgYXBwcm9wcmlhdGUgPGNvZGU+WEFFeGNlcHRpb248L2NvZGU+LgogICAgICAqLwogICAgIHB1YmxpYyBYaWRbXSByZWNvdmVyKGludCBmbGFnKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnJlY292ZXIoZmxhZyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogSW5mb3JtIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIHJvbGwgYmFjayB3b3JrIGRvbmUgb24gYmVoYWxmIG9mIGEgdHJhbnNhY3Rpb24gYnJhbmNoCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjayhYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICAvL3RoZSBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCBjYWxsIGhhcyBjb21lIGhlcmUgYmVjYXN1ZQotCS8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93Ci0JLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKLQkvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKLQkvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCi0JLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCisgICAgLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKKyAgICAvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAorICAgIC8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcworICAgIC8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKKyAgICAvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKICAgICAgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICAgICAgeGFyLnJvbGxiYWNrKHhpZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgZm9yIHRoaXMgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2Vjb25kcwl0aGUgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzLgotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGlzIHNldCBzdWNjZXNzZnVsbHk7IG90aGVyd2lzZSBmYWxzZS4KKyAgICAgKiBAcGFyYW0gICAgc2Vjb25kcyAgICB0aGUgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzLgorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGlzIHNldCBzdWNjZXNzZnVsbHk7IG90aGVyd2lzZSBmYWxzZS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBzZXRUcmFuc2FjdGlvblRpbWVvdXQoaW50IHNlY29uZHMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KHNlY29uZHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFN0YXJ0IHdvcmsgb24gYmVoYWxmIG9mIGEgdHJhbnNhY3Rpb24gYnJhbmNoIHNwZWNpZmllZCBpbiB4aWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZQotICAgICAqIEByZXR1cm4JZmxhZ3MJT25lIG9mIFRNTk9GTEFHUywgVE1KT0lOLCBvciBUTVJFU1VNRQorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc291cmNlCisgICAgICogQHJldHVybiAgICBmbGFncyAgICBPbmUgb2YgVE1OT0ZMQUdTLCBUTUpPSU4sIG9yIFRNUkVTVU1FCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RhcnQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICAvL0dKQ0lOVApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL2J1aWxkLnhtbAppbmRleCA5Njc4NjhiLi42NDEwNTU3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iJHtnamMuaG9tZX0iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy9zcGkiLz4KLSAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0zNyw1ICszNyw1IEBACiAKICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQiLz4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YQppbmRleCBjZTMyMWFmLi45ZTdmMjUzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKQEAgLTI2LDggKzI2LDggQEAKIC8qKgogICogRXhlY3V0ZSB0aGUgbWV0aG9kcyBiYXNlZCBvbiB0aGUgcGFyYW1ldGVycy4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIE1ldGhvZEV4ZWN1dG9yIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAKQEAgLTM5LDEzMCArMzksMTMwIEBACiAgICAgLyoqCiAgICAgICogRXhjZXV0ZSBhIHNpbXBsZSBzZXQgTWV0aG9kLgogICAgICAqCi0gICAgICogQHBhcmFtCXZhbHVlCVZhbHVlIHRvIGJlIHNldC4KLSAgICAgKiBAcGFyYW0JbWV0aG9kCTxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQlvYmoJT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCisgICAgICogQHBhcmFtICAgIHZhbHVlICAgIFZhbHVlIHRvIGJlIHNldC4KKyAgICAgKiBAcGFyYW0gICAgbWV0aG9kICAgIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvYmogICAgT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLiAgICAgCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJ1bkphdmFCZWFuTWV0aG9kKFN0cmluZyB2YWx1ZSwgTWV0aG9kIG1ldGhvZCwgT2JqZWN0IG9iaikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlpZiAodmFsdWU9PW51bGwgfHwgdmFsdWUudHJpbSgpLmVxdWFscygiIikpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAl0cnkgewotICAgIAkgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0gICAgCSAgICBpZiAoIHBhcmFtZXRlcnMubGVuZ3RoID09IDEpIHsKLSAgICAJICAgICAgICBPYmplY3RbXSB2YWx1ZXMgPSBuZXcgT2JqZWN0WzFdOwotICAgIAkgICAgCXZhbHVlc1swXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbMF0sIHZhbHVlKTsKLSAgICAJICAgIAltZXRob2QuaW52b2tlKG9iaiwgdmFsdWVzKTsKLSAgICAJICAgIH0KLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfQorICAgICAgICBpZiAodmFsdWU9PW51bGwgfHwgdmFsdWUudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7CisgICAgICAgICAgICBpZiAoIHBhcmFtZXRlcnMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgICAgICBPYmplY3RbXSB2YWx1ZXMgPSBuZXcgT2JqZWN0WzFdOworICAgICAgICAgICAgICAgIHZhbHVlc1swXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbMF0sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBtZXRob2QuaW52b2tlKG9iaiwgdmFsdWVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogRXhlY3V0ZXMgdGhlIG1ldGhvZC4gICAgIAorICAgICAqIEV4ZWN1dGVzIHRoZSBtZXRob2QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWV0aG9kIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQlvYmoJT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCi0gICAgICogQHBhcmFtCXZhbHVlcwlQYXJhbWV0ZXIgdmFsdWVzIGZvciBleGVjdXRpbmcgdGhlIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgbWV0aG9kIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvYmogICAgT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCisgICAgICogQHBhcmFtICAgIHZhbHVlcyAgICBQYXJhbWV0ZXIgdmFsdWVzIGZvciBleGVjdXRpbmcgdGhlIG1ldGhvZC4KICAgICAgKiBAdGhyb3dzICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4sIGluIGNhc2Ugb2YgdGhlIG1pc21hdGNoIG9mIHBhcmFtZXRlciB2YWx1ZXMgb3IKLSAgICAgKgkJYSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJ1bk1ldGhvZChNZXRob2QgbWV0aG9kLCBPYmplY3Qgb2JqLCBWZWN0b3IgdmFsdWVzKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCXRyeSB7Ci0JICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotCSAgICBpZiAodmFsdWVzLnNpemUoKSAhPSBwYXJhbWV0ZXJzLmxlbmd0aCkgewotCSAgICAgICAgcmV0dXJuOwotCSAgICB9Ci0gICAgCSAgICBPYmplY3RbXSBhY3R1YWxWYWx1ZXMgPSBuZXcgT2JqZWN0W3BhcmFtZXRlcnMubGVuZ3RoXTsKLSAgICAJICAgIGZvciAoaW50IGkgPTA7IGk8cGFyYW1ldGVycy5sZW5ndGggOyBpKyspIHsKLSAgICAJICAgIAlTdHJpbmcgdmFsID0gKFN0cmluZykgdmFsdWVzLmdldChpKTsKLSAgICAJICAgIAlpZiAodmFsLnRyaW0oKS5lcXVhbHMoIk5VTEwiKSkgewotICAgIAkgICAgCSAgICBhY3R1YWxWYWx1ZXNbaV0gPSBudWxsOwotICAgIAkgICAgCX0gZWxzZSB7Ci0gICAgCSAgICAJICAgIGFjdHVhbFZhbHVlc1tpXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbaV0sIHZhbCk7Ci0gICAgCSAgICAJfQotICAgIAkgICAgfQotICAgIAkgICAgbWV0aG9kLmludm9rZShvYmosIGFjdHVhbFZhbHVlcyk7Ci0gICAgCX1jYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfQorICAgICAgICB0cnkgeworICAgICAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKKyAgICAgICAgaWYgKHZhbHVlcy5zaXplKCkgIT0gcGFyYW1ldGVycy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgT2JqZWN0W10gYWN0dWFsVmFsdWVzID0gbmV3IE9iamVjdFtwYXJhbWV0ZXJzLmxlbmd0aF07CisgICAgICAgICAgICBmb3IgKGludCBpID0wOyBpPHBhcmFtZXRlcnMubGVuZ3RoIDsgaSsrKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHZhbCA9IChTdHJpbmcpIHZhbHVlcy5nZXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbC50cmltKCkuZXF1YWxzKCJOVUxMIikpIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsVmFsdWVzW2ldID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhY3R1YWxWYWx1ZXNbaV0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzW2ldLCB2YWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1ldGhvZC5pbnZva2Uob2JqLCBhY3R1YWxWYWx1ZXMpOworICAgICAgICB9Y2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnZlcnRzIHRoZSB0eXBlIGZyb20gU3RyaW5nIHRvIHRoZSBDbGFzcyB0eXBlLgogICAgICAqCi0gICAgICogQHBhcmFtCXR5cGUJCUNsYXNzIG5hbWUgdG8gd2hpY2ggdGhlIGNvbnZlcnNpb24gaXMgcmVxdWlyZWQuCi0gICAgICogQHBhcmFtCXBhcmFtZXRlcglTdHJpbmcgdmFsdWUgdG8gYmUgY29udmVydGVkLgotICAgICAqIEByZXR1cm4JQ29udmVydGVkIHZhbHVlLgorICAgICAqIEBwYXJhbSAgICB0eXBlICAgICAgICBDbGFzcyBuYW1lIHRvIHdoaWNoIHRoZSBjb252ZXJzaW9uIGlzIHJlcXVpcmVkLgorICAgICAqIEBwYXJhbSAgICBwYXJhbWV0ZXIgICAgU3RyaW5nIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KKyAgICAgKiBAcmV0dXJuICAgIENvbnZlcnRlZCB2YWx1ZS4KICAgICAgKiBAdGhyb3dzICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4sIGluIGNhc2Ugb2YgdGhlIG1pc21hdGNoIG9mIHBhcmFtZXRlciB2YWx1ZXMgb3IKLSAgICAgKgkJYSBzZWN1cml0eSB2aW9sYXRpb24uICAgICAKKyAgICAgKiAgICAgICAgYSBzZWN1cml0eSB2aW9sYXRpb24uCiAgICAgICovCiAgICAgcHJpdmF0ZSBPYmplY3QgY29udmVydFR5cGUoQ2xhc3MgdHlwZSwgU3RyaW5nIHBhcmFtZXRlcikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAl0cnkgewotICAgIAkgICAgU3RyaW5nIHR5cGVOYW1lID0gdHlwZS5nZXROYW1lKCk7Ci0gICAgCSAgICBpZiAoIHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlN0cmluZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLk9iamVjdCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIHBhcmFtZXRlcjsKLSAgICAJICAgIH0KLSAgICAJCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJpbnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5JbnRlZ2VyIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEludGVnZXIocGFyYW1ldGVyKTsKLSAgICAJICAgIH0KLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygic2hvcnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TaG9ydCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBTaG9ydChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJieXRlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQnl0ZSIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBCeXRlKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImxvbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Mb25nIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IExvbmcocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJmbG9hdCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkZsb2F0IikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEZsb2F0KHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImRvdWJsZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkRvdWJsZSIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBEb3VibGUocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdEZWNpbWFsIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0ludGVnZXIiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJib29sZWFuIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQm9vbGVhbiIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBCb29sZWFuKHBhcmFtZXRlcik7Ci0gICAgICAgICAgICB9CQkKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFN0cmluZyB0eXBlTmFtZSA9IHR5cGUuZ2V0TmFtZSgpOworICAgICAgICAgICAgaWYgKCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TdHJpbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5PYmplY3QiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7CisgICAgICAgICAgICB9CiAKLSAgICAJICAgIHJldHVybiBwYXJhbWV0ZXI7Ci0gICAgCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbmZlIiwgcGFyYW1ldGVyKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihwYXJhbWV0ZXIrIjogTm90IGEgdmFsaWQgdmFsdWUgZm9yIHRoaXMgbWV0aG9kICIpOwotICAgIAl9CisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJpbnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5JbnRlZ2VyIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEludGVnZXIocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygic2hvcnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TaG9ydCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTaG9ydChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJieXRlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQnl0ZSIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCeXRlKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImxvbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Mb25nIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExvbmcocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZmxvYXQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5GbG9hdCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJkb3VibGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Eb3VibGUiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRG91YmxlKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdEZWNpbWFsIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdJbnRlZ2VyIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJvb2xlYW4iKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Cb29sZWFuIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJvb2xlYW4ocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcjsKKyAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19uZmUiLCBwYXJhbWV0ZXIpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHBhcmFtZXRlcisiOiBOb3QgYSB2YWxpZCB2YWx1ZSBmb3IgdGhpcyBtZXRob2QgIik7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCmluZGV4IGZjMTQ5YmYuLmYwMDhlN2YgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKQEAgLTI5LDM2ICsyOSwzNiBAQAogLyoqCiAgKiBTZWN1cml0eVV0aWxzIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjIKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIyCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgU2VjdXJpdHlVdGlscyB7CiAKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCwgZ2l2ZW4gCi0gICAgICogdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIHN1YmplY3QgYW5kIHRoZSAKLSAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+LiBJdCBmaXJzdCBjaGVja3MgaWYgdGhlIAotICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gaXMgbnVsbCBvciBub3QuIElmIGl0IGlzIG5vdCBudWxsLCAKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCwgZ2l2ZW4KKyAgICAgKiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgc3ViamVjdCBhbmQgdGhlCisgICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPi4gSXQgZmlyc3QgY2hlY2tzIGlmIHRoZQorICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gaXMgbnVsbCBvciBub3QuIElmIGl0IGlzIG5vdCBudWxsLAogICAgICAqIGl0IGNvbnN0cnVjdHMgYSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCB3aXRoCiAgICAgICogdGhlIHVzZXIgYW5kIHBhc3N3b3JkIGZpZWxkcyBmcm9tIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGFuZCByZXR1cm5zIHRoaXMKLSAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdC4gSWYgdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gCi0gICAgICogaXMgbnVsbCwgaXQgcmV0cmlldmVzIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdHMgZnJvbSAKKyAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdC4gSWYgdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KKyAgICAgKiBpcyBudWxsLCBpdCByZXRyaWV2ZXMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0cyBmcm9tCiAgICAgICogdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IHBhcmFtZXRlciBhbmQgcmV0dXJucyB0aGUgZmlyc3QKLSAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCB3aGljaCBjb250YWlucyBhIAorICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGEKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBpbnN0YW5jZSBlcXVpdmFsZW50CiAgICAgICogdG8gdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIHBhcmFtZXRlci4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+Ci0gICAgICogQHBhcmFtCWluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgotICAgICAqIEByZXR1cm4JPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CWdlbmVyaWMgZXhjZXB0aW9uIGlmIG9wZXJhdGlvbiBmYWlscwotICAgICAqIEB0aHJvd3MJPGNvZGU+U2VjdXJpdHlFeGNlcHRpb248L2NvZGU+CWlmIGFjY2VzcyB0byB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgaXMgZGVuaWVkCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgaW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gICAgZ2VuZXJpYyBleGNlcHRpb24gaWYgb3BlcmF0aW9uIGZhaWxzCisgICAgICogQHRocm93cyAgICA8Y29kZT5TZWN1cml0eUV4Y2VwdGlvbjwvY29kZT4gICAgaWYgYWNjZXNzIHRvIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBpcyBkZW5pZWQKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIFBhc3N3b3JkQ3JlZGVudGlhbCBnZXRQYXNzd29yZENyZWRlbnRpYWwoZmluYWwgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiwKICAgICAgICAgIGZpbmFsIFN1YmplY3Qgc3ViamVjdCwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAKLQlpZiAoaW5mbyA9PSBudWxsKSB7CisgICAgaWYgKGluZm8gPT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKHN1YmplY3QgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTg5LDE0ICs4OSwxNCBAQAogICAgICAgICAgICAgcmV0dXJuIHBjOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0cnVlIGlmIHR3byBzdHJpbmdzIGFyZSBlcXVhbDsgZmFsc2Ugb3RoZXJ3aXNlCi0gICAgICogCi0gICAgICogQHBhcmFtCXN0cjEJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBwYXJhbQlzdHIyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHR3byBzdHJpbmdzIGFyZSBlcXVhbAotICAgICAqICAgICAgICAJZmFsc2UJb3RoZXJ3aXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3RyMSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHN0cjIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgdHdvIHN0cmluZ3MgYXJlIGVxdWFsCisgICAgICogICAgICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBzdGF0aWMgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoU3RyaW5nIHN0cjEsIFN0cmluZyBzdHIyKSB7CiAgICAgICAgIGlmIChzdHIxID09IG51bGwpIHsKQEAgLTEwOSwxMCArMTA5LDEwIEBACiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0cnVlIGlmIHR3byA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdHMgYXJlIGVxdWFsOyBmYWxzZSBvdGhlcndpc2UKICAgICAgKgotICAgICAqIEBwYXJhbQlwQzEJPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqIEBwYXJhbQlwQzIJPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgdHdvIFBhc3N3b3JkQ3JlZGVudGlhbHMgYXJlIGVxdWFsCi0gICAgICogICAgICAgIAlmYWxzZQlvdGhlcndpc2UKKyAgICAgKiBAcGFyYW0gICAgcEMxICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcEMyICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHR3byBQYXNzd29yZENyZWRlbnRpYWxzIGFyZSBlcXVhbAorICAgICAqICAgICAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgc3RhdGljIHB1YmxpYyBib29sZWFuIGlzUGFzc3dvcmRDcmVkZW50aWFsRXF1YWwoUGFzc3dvcmRDcmVkZW50aWFsIHBDMSwgUGFzc3dvcmRDcmVkZW50aWFsIHBDMikgewogICAgICAgICBpZiAocEMxID09IHBDMikKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbAppbmRleCBhNTViYmYwLi5mMDYwZTdkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIuIiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvdXRpbCIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0zMyw3ICszMyw3IEBACiAgICAgICA8amFyIGphcmZpbGU9IiR7ZGlzdC5kaXJ9LyR7cGtnLmRpcn0vdXRpbC5qYXIiIGJhc2VkaXI9IiR7Y2xhc3MuZGlyfSIKICAgICAgICAgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTMiIGRlcGVuZHM9ImNvbXBpbGUiLz4KICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTQiIGRlcGVuZHM9ImNvbXBpbGUiLz4KIApAQCAtNDQsNSArNDQsNSBAQAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCwgcGFja2FnZTE0Ii8+CiAKICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgotICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhCmluZGV4IGE4MjA1Y2YuLmJlOWQyZjUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEKQEAgLTE3LDE2ICsxNywxNiBAQAogcGFja2FnZSBzYW1wbGVzLmVqYi5pbnN0YWxsZWRfbGlicmFyaWVzX2VtYmVkZGVkLnNlcnZsZXQ7CiAKIGltcG9ydCBqYXZhLmlvLio7Ci1pbXBvcnQgamF2YS51dGlsLio7IAotaW1wb3J0IGpha2FydGEuc2VydmxldC4qOyAKLWltcG9ydCBqYXZheC5uYW1pbmcuKjsgCi1pbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsgCi1pbXBvcnQgamFrYXJ0YS5lamIuKjsgCitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7CitpbXBvcnQgamF2YXgubmFtaW5nLio7CitpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKK2ltcG9ydCBqYWthcnRhLmVqYi4qOwogCiBpbXBvcnQgc2FtcGxlcy5lamIuaW5zdGFsbGVkX2xpYnJhcmllc19lbWJlZGRlZC5lamIuKjsKIGltcG9ydCBjb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW47CiAKLXB1YmxpYyBjbGFzcyBTaW1wbGVCYW5rU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsgIAorcHVibGljIGNsYXNzIFNpbXBsZUJhbmtTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAKICAgSW5pdGlhbENvbnRleHQgaW5pdENvbnRleHQgPSBudWxsOwpAQCAtNDIsMTQgKzQyLDE0IEBACiAgIHsKICAgfQogCi0gIHB1YmxpYyB2b2lkIGRvR2V0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSAKLSAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgCisgIHB1YmxpYyB2b2lkIGRvR2V0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQorICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7Ci0gIH0gIAorICB9CiAKLSAgLyoqIGhhbmRsZXMgdGhlIEhUVFAgUE9TVCBvcGVyYXRpb24gKiovIAotICBwdWJsaWMgdm9pZCBkb1Bvc3QgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIAotICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAKKyAgLyoqIGhhbmRsZXMgdGhlIEhUVFAgUE9TVCBvcGVyYXRpb24gKiovCisgIHB1YmxpYyB2b2lkIGRvUG9zdCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKKyAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICBkb0xvb2t1cCgpOwogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2ltcGxlQmFua1NlcnZsZXQgaXMgZXhlY3V0aW5nIik7CiAgICAgU3RyaW5nIFNTTiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJTU04iKTsKQEAgLTY1LDE0ICs2NSwxNCBAQAogICAgIFN0cmluZyB6aXBDb2RlID0gIiI7CiAgICAgbG9uZyBjdXJyZW50U2F2aW5nc0JhbGFuY2UgPSAwOwogICAgIGxvbmcgY3VycmVudENoZWNraW5nQmFsYW5jZSA9IDA7Ci0gICAgIAorCiAgICAgU3RyaW5nIGFjdGlvbiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJhY3Rpb24iKTsKICAgICBpZiAoYWN0aW9uLmVxdWFscygiQ3JlYXRlIikpCiAgICAgewogICAgICAgbWVzc2FnZSA9ICJBZGQgQ3VzdG9tZXIiOwogICAgICAganNwID0gIi9TaW1wbGVCYW5rQWRkLmpzcCI7CiAgICAgfQotICAgIGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoIkFkZCBDdXN0b21lciIpKSAKKyAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJBZGQgQ3VzdG9tZXIiKSkKICAgICB7CiAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFkZCBDdXN0b21lciBidXR0b24gcHJlc3NlZCIpOwogICAgICAgU1NOID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoIlNTTiIpOwpAQCAtODksNyArODksNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSBjdXN0b21lclNhdmluZ3NMb2NhbEhvbWUuY3JlYXRlKFNTTiwgbGFzdE5hbWUsIGZpcnN0TmFtZSwgYWRkcmVzczEsIGFkZHJlc3MyLCBjaXR5LCBzdGF0ZSwgemlwQ29kZSk7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBjcmVhdGUgdGhlIGN1c3RvbWVyIHNhdmluZ3MgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIG1lc3NhZ2UgPSAiQ3VzdG9tZXIgQWRkZWQuIjsKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSBjdXN0b21lclNhdmluZ3NMb2NhbEhvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZmluZCB0aGUgY3VzdG9tZXIgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIGpzcCA9ICIvU2ltcGxlQmFua0VkaXQuanNwIjsKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSBjdXN0b21lclNhdmluZ3NMb2NhbEhvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZmluZCB0aGUgY3VzdG9tZXIgc2F2aW5ncyByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogICAgICAgbWVzc2FnZSA9ICJEZWxldGUgQ3VzdG9tZXIiOwpAQCAtMTI2LDEyICsxMjYsMTIgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzTG9jYWxIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKS5yZW1vdmUoKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGRlbGV0ZSB0aGUgY3VzdG9tZXIgc2F2aW5ncyBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBtZXNzYWdlID0gIkN1c3RvbWVyIERlbGV0ZWQuIjsKICAgICAgIGpzcCA9ICIvU2ltcGxlQmFua01lc3NhZ2UuanNwIjsKLSAgICB9ICAKKyAgICB9CiAKIAogICAgIGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoIlVwZGF0ZSIpKQpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5ncyA9IChDdXN0b21lclNhdmluZ3MpY3VzdG9tZXJTYXZpbmdzTG9jYWxIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIHNhdmluZ3MgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KIApAQCAtMTUwLDcgKzE1MCw3IEBACiAgICAgICAgIGN1c3RvbWVyQ2hlY2tpbmcgPSAoQ3VzdG9tZXJDaGVja2luZyljdXN0b21lckNoZWNraW5nTG9jYWxIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIGNoZWNraW5nIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAKQEAgLTIxMCw5ICsyMTAsOSBAQAogICAgIFJlcXVlc3REaXNwYXRjaGVyIGRpc3BhdGNoZXIgPSBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldFJlcXVlc3REaXNwYXRjaGVyKGpzcCk7CiAgICAgZGlzcGF0Y2hlci5pbmNsdWRlKHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICByZXR1cm47Ci0gIH0gCisgIH0KIAotICBwdWJsaWMgdm9pZCBkb0xvb2t1cCgpIAorICBwdWJsaWMgdm9pZCBkb0xvb2t1cCgpCiAgIHsKICAgICB0cnkgewogICAgICAgaW5pdENvbnRleHQgPSBuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbAppbmRleCBkZjlkZjM0Li4zM2E3MDY5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3NxbC9kcm9wQmFua1RhYmxlcy5zcWwKQEAgLTEgKzEgQEAKLWRyb3AgdGFibGUgY3VzdG9tZXIyOw0KK2Ryb3AgdGFibGUgY3VzdG9tZXIyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1yZXNvdXJjZXMvYnVpbGQucHJvcGVydGllcwppbmRleCA0NDM0ZjAxLi43ZTFiMGMxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1yZXNvdXJjZXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1yZXNvdXJjZXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJpbnN0YWxsZWQtbGlicmFyaWVzLXRlc3QiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0icmFyZmlsZSIgdmFsdWU9InJhci9ibGFja2JveC10eC5yYXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy9kZXNjcmlwdG9yL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL2Rlc2NyaXB0b3IvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKaW5kZXggNzFkODljNC4uYWZjZmJkMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL2Rlc2NyaXB0b3IvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL2Rlc2NyaXB0b3IvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKQEAgLTQ2LDQgKzQ2LDQgQEAKICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm9vbGVhbldpdGhHZXRCb29sZWFuQWNjZXNzb3IiIHZhbHVlPSJ0cnVlIiAvPgogICAgICAgICA8L2Nvbm5lY3Rvci1jb25uZWN0aW9uLXBvb2w+CiAgICAgICAgIDxjb25uZWN0b3ItcmVzb3VyY2UgcG9vbC1uYW1lPSJpbnN0YWxsZWQtbGlicmFyaWVzLXRlc3QtY2NwIiBqbmRpLW5hbWU9ImVpcy9jb25uZWN0b3ItcmVzb3VyY2UiICAvPgotPC9yZXNvdXJjZXM+IAorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1yZXNvdXJjZXMvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9KZGJjQ29ubmVjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvSmRiY0Nvbm5lY3Rpb24uamF2YQppbmRleCBmYTY0OTU5Li5iYjM2NTZhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1yZXNvdXJjZXMvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9KZGJjQ29ubmVjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0pkYmNDb25uZWN0aW9uLmphdmEKQEAgLTE4Myw3ICsxODMsNyBAQAogICAgIH0KIAogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIC8vIFRIRSBGT0xMT1dJTkcgQVBJUyBBUkUgTkVXIEZST00gSkRLIDEuNCAvLyAgICAgICAgCisgICAgLy8gVEhFIEZPTExPV0lORyBBUElTIEFSRSBORVcgRlJPTSBKREsgMS40IC8vCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKICAgICAvLy8vLy8vLy8vLy8vICBCRUdJTiAgSkRLIDEuNCAgLy8vLy8vLy8vLy8vLy8KQEAgLTMyOSwyNyArMzI5LDI3IEBACiAgICAgfQogCiAgICAgLy8vLy8vLy8vLy8vLyAgRU5EICBKREsgMS40ICAvLy8vLy8vLy8vLy8vLwotICAgIAorCiAgICAgcHVibGljIGludCBnZXROZXR3b3JrVGltZW91dCgpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrVGltZW91dChFeGVjdXRvciBleGVjdXRvciwgaW50IG1pbGxpc2Vjb25kcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFib3J0KEV4ZWN1dG9yIGV4ZWN1dG9yKSAgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRTY2hlbWEoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTY2hlbWEoU3RyaW5nIHNjaGVtYSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAKICAgICB2b2lkIGFzc29jaWF0ZUNvbm5lY3Rpb24oSmRiY01hbmFnZWRDb25uZWN0aW9uIG5ld01jKQogICAgICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0xvY2FsVHhNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0xvY2FsVHhNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCAwZTQ3ZGRjLi5hOTY4NjAxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1yZXNvdXJjZXMvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9Mb2NhbFR4TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvTG9jYWxUeE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgaWYgKCFnZXRCb29sZWFuV2l0aEdldEJvb2xlYW5BY2Nlc3NvcigpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkJsYWNrYm94IFJBUiA6IEdldCBCb29sZWFuIEFjY2Vzc29yIGlzIGZhbHNlIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKCFpc0Jvb2xlYW5XaXRoSXNCb29sZWFuQWNjZXNzb3IoKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJCbGFja2JveCBSQVIgOiBJcyBCb29sZWFuIEFjY2Vzc29yIGlzIGZhbHNlIik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L1Jlc291cmNlQWRhcHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvUmVzb3VyY2VBZGFwdGVyLmphdmEKaW5kZXggOGYyZjM1NC4uNzkyNTA5OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvUmVzb3VyY2VBZGFwdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvUmVzb3VyY2VBZGFwdGVyLmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gYWN0aXZhdGlvblNwZWNzKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gbnVsbDsgIAorICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKICAgICBwdWJsaWMgQm9vdHN0cmFwQ29udGV4dCBnZXRCb290c3RyYXBDb250ZXh0KCl7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1yZXNvdXJjZXMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1yZXNvdXJjZXMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKaW5kZXggMGZiMTQwNi4uMzYyODQ5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICB9Y2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKXsKICAgICAgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9IGNhdGNoIChDcmVhdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsgIAorICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfWZpbmFsbHl7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiRU5EX09GX1RFU1QiKTsKICAgICAgICAgICAgIG91dC5mbHVzaCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggNDIzNDExNS4uZWQ2ZGJhYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1yZXNvdXJjZXMvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDIwICsxLDIwIEBACi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7DQotDQotQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0ggKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxMCwgJ2FiY2QnKTsNCi1JTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxMSwgJ3BxcnMnKTsNCi0NCi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOw0KLQ0KLUNSRUFURSBUQUJMRSBUWExFVkVMU1dJVENIMiAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0gyIFZBTFVFUygxLCAnYWJjZCcpOw0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0gyIFZBTFVFUygyLCAncHFycycpOw0KLQ0KK0Ryb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsKKworQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0ggKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMTAsICdhYmNkJyk7CitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxMSwgJ3BxcnMnKTsKKworRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsKKworQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0gyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0lOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0gyIFZBTFVFUygxLCAnYWJjZCcpOworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSDIgVkFMVUVTKDIsICdwcXJzJyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggMGMxMjQyZi4uZDExYTExNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEsMiArMSwyIEBACi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7DQotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsNCitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7CitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDQzNGYwMS4uN2UxYjBjMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Imluc3RhbGxlZC1saWJyYXJpZXMtdGVzdCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJyYXJmaWxlIiB2YWx1ZT0icmFyL2JsYWNrYm94LXR4LnJhciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9KZGJjQ29ubmVjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9KZGJjQ29ubmVjdGlvbi5qYXZhCmluZGV4IGZhNjQ5NTkuLmJiMzY1NmEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzL3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvSmRiY0Nvbm5lY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0pkYmNDb25uZWN0aW9uLmphdmEKQEAgLTE4Myw3ICsxODMsNyBAQAogICAgIH0KIAogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIC8vIFRIRSBGT0xMT1dJTkcgQVBJUyBBUkUgTkVXIEZST00gSkRLIDEuNCAvLyAgICAgICAgCisgICAgLy8gVEhFIEZPTExPV0lORyBBUElTIEFSRSBORVcgRlJPTSBKREsgMS40IC8vCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKICAgICAvLy8vLy8vLy8vLy8vICBCRUdJTiAgSkRLIDEuNCAgLy8vLy8vLy8vLy8vLy8KQEAgLTMyOSwyNyArMzI5LDI3IEBACiAgICAgfQogCiAgICAgLy8vLy8vLy8vLy8vLyAgRU5EICBKREsgMS40ICAvLy8vLy8vLy8vLy8vLwotICAgIAorCiAgICAgcHVibGljIGludCBnZXROZXR3b3JrVGltZW91dCgpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrVGltZW91dChFeGVjdXRvciBleGVjdXRvciwgaW50IG1pbGxpc2Vjb25kcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFib3J0KEV4ZWN1dG9yIGV4ZWN1dG9yKSAgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRTY2hlbWEoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTY2hlbWEoU3RyaW5nIHNjaGVtYSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAKICAgICB2b2lkIGFzc29jaWF0ZUNvbm5lY3Rpb24oSmRiY01hbmFnZWRDb25uZWN0aW9uIG5ld01jKQogICAgICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzL3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvTG9jYWxUeE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9Mb2NhbFR4TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKaW5kZXggMGU0N2RkYy4uYTk2ODYwMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9Mb2NhbFR4TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9Mb2NhbFR4TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICBpZiAoIWdldEJvb2xlYW5XaXRoR2V0Qm9vbGVhbkFjY2Vzc29yKCkpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQmxhY2tib3ggUkFSIDogR2V0IEJvb2xlYW4gQWNjZXNzb3IgaXMgZmFsc2UiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoIWlzQm9vbGVhbldpdGhJc0Jvb2xlYW5BY2Nlc3NvcigpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkJsYWNrYm94IFJBUiA6IElzIEJvb2xlYW4gQWNjZXNzb3IgaXMgZmFsc2UiKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9SZXNvdXJjZUFkYXB0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzL3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvUmVzb3VyY2VBZGFwdGVyLmphdmEKaW5kZXggOGYyZjM1NC4uNzkyNTA5OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9SZXNvdXJjZUFkYXB0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L1Jlc291cmNlQWRhcHRlci5qYXZhCkBAIC00NCw3ICs0NCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIGFjdGl2YXRpb25TcGVjcykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIG51bGw7ICAKKyAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCiAgICAgcHVibGljIEJvb3RzdHJhcENvbnRleHQgZ2V0Qm9vdHN0cmFwQ29udGV4dCgpewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQppbmRleCAwZmIxNDA2Li4zNjI4NDliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICB9Y2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKXsKICAgICAgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9IGNhdGNoIChDcmVhdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsgIAorICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfWZpbmFsbHl7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiRU5EX09GX1RFU1QiKTsKICAgICAgICAgICAgIG91dC5mbHVzaCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDQyMzQxMTUuLmVkNmRiYWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsMjAgKzEsMjAgQEAKLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsNCi0NCi1DUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSCAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDEwLCAnYWJjZCcpOw0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDExLCAncHFycycpOw0KLQ0KLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDI7DQotDQotQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0gyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSDIgVkFMVUVTKDEsICdhYmNkJyk7DQotSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSDIgVkFMVUVTKDIsICdwcXJzJyk7DQotDQorRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOworCitDUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSCAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxMCwgJ2FiY2QnKTsKK0lOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDExLCAncHFycycpOworCitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOworCitDUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSDIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSDIgVkFMVUVTKDEsICdhYmNkJyk7CitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIMiBWQUxVRVMoMiwgJ3BxcnMnKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggMGMxMjQyZi4uZDExYTExNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xLDIgKzEsMiBAQAotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOw0KLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDI7DQorRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOworRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qbXMtY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qbXMtY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCA4OGFhYWVhLi42Y2QxZGRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvam1zLWNvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ptcy1jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqbXMtY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvam1zLWRlc3RpbmF0aW9uLWRlZmluaXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qbXMtZGVzdGluYXRpb24tZGVmaW5pdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDkwZDE4NGUuLjkzZWMyZTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qbXMtZGVzdGluYXRpb24tZGVmaW5pdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qbXMtZGVzdGluYXRpb24tZGVmaW5pdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqbXMtZGVzdGluYXRpb24tZGVmaW5pdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNWQ3ODIzMy4uMjk5NTU5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMwLXBlcnNpc3RlbmNlLXR4X3Byb3BhZ2F0aW9uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNpbXBsZS5jbGllbnQiIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLnBlcnNpc3RlbmNlLnR4X3Byb3BhZ2F0aW9uLmNsaWVudC5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgpAQCAtMjYsMTAgKzI2LDEwIEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2J1aWxkLnhtbAppbmRleCA3MTMzMzRjLi5kNzdlNjgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy94YSIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+IAorICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy14YS1wb29sLnByb3BlcnR5LmNvbm5lY3Rpb25BdHRyaWJ1dGVzPTtjcmVhdGU9dHJ1ZSIvPgpAQCAtODEsMTAgKzgxLDEwIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9L2xpYiIvPgotICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIgCisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1saWIuamFyIgogICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIGluY2x1ZGVzPSIqKi9QZXJzb24uY2xhc3MiPgotICAgICAgICA8L2phcj4gICAgICAgIAorICAgICAgICA8L2phcj4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LXBhcjEuamFyIj4KICAgICAgICAgICAgICA8bWV0YWluZiBmaWxlPSJkZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbCIvPgogICAgICAgICA8L2phcj4KQEAgLTkyLDkgKzkyLDkgQEAKICAgICAgICAgICA8L2NvcHk+LS0+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TZnVsKi5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TZnVsLmNsYXNzIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZ2xhc3NmaXNoLXJlc291cmNlcy1lYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIvPgogICAgICAgICA8L2FudGNhbGw+CkBAIC0xMDMsOSArMTAzLDkgQEAKICAgICAgICAgICAgICBpbmNsdWRlcz0ibGliLyR7YXBwbmFtZX0tbGliLmphciwgbGliLyR7YXBwbmFtZX0tcGFyMS5qYXIiPgogICAgICAgICA8L2phcj4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC0xMTQsMTAgKzExNCwxMCBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KIDwhLS0gICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtc3RhbmRhbG9uZSIvPi0tPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA3NDY3YzQxLi42MDYwNTkzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcyA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkkgYW0gaW4gY2xpZW50Iik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgVXNlclRyYW5zYWN0aW9uIHV0eCA9IChVc2VyVHJhbnNhY3Rpb24pKG5ldyBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJqYXZhOmNvbXAvVXNlclRyYW5zYWN0aW9uIik7CiAgICAgICAgICAgICBkcyA9IChEYXRhU291cmNlKShuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiamF2YTphcHAvamRiYy94YSIpOwogCkBAIC03OCw3ICs3OCw3IEBACiAKICAgICAgICAgICAgIHV0eC5iZWdpbigpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJ1dHguYmVnaW4gY2FsbGVkICIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBzID0gY29ubmVjdGlvbi5wcmVwYXJlU3RhdGVtZW50KCJpbnNlcnQgaW50byBFSkIzMF9QRVJTSVNURU5DRV9FRU1fSU5KRUNUSU9OX1BFUlNPTiB2YWx1ZXMoJzEnLCAnMScpIik7CiAgICAgICAgICAgICBzLmV4ZWN1dGUoKTsKQEAgLTk0LDcgKzk0LDcgQEAKICAgICAgICAgICAgICAgICB1dHgucm9sbGJhY2soKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oInV0eC5yb2xsYmFjayBjYWxsZWQgIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gbWFwLmtleVNldCgpLml0ZXJhdG9yKCk7CiAgICAgICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSBpdGVyLm5leHQoKTsKQEAgLTEyNSw3ICsxMjUsNyBAQAogCiAgICAgICAgIH0KIAotICAgIAlyZXR1cm47CisgICAgICAgIHJldHVybjsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2Rlc2NyaXB0b3IvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvZGVzY3JpcHRvci9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbAppbmRleCAwNzg2YzU0Li5jY2RlYWE0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvZGVzY3JpcHRvci9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvZGVzY3JpcHRvci9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbApAQCAtNTEsNCArNTEsNCBAQAogICAgICAgPHByb3BlcnR5IG5hbWU9ImNvbm5lY3Rpb25BdHRyaWJ1dGVzIiB2YWx1ZT0iO2NyZWF0ZT10cnVlIiAvPgogICAgIDwvamRiYy1jb25uZWN0aW9uLXBvb2w+CiAgICAgPGpkYmMtcmVzb3VyY2UgcG9vbC1uYW1lPSJqYXZhOmFwcC9qZGJjLXhhLXBvb2wiIGpuZGktbmFtZT0iamF2YTphcHAvamRiYy94YSIgLz4KLTwvcmVzb3VyY2VzPiAKKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2VqYi9QZXJzb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9lamIvUGVyc29uLmphdmEKaW5kZXggMTQzNThmZi4uOTUyY2JlYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2VqYi9QZXJzb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvZWpiL1BlcnNvbi5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CiAgICAgfQogCi0gICAgQE92ZXJyaWRlIAorICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgIHJldHVybiAiUGVyc29uOiAobmFtZT0iICsgbmFtZSArICI7IGRhdGE9ICIgKyBkYXRhICsgIikiOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9lamIvU2Z1bEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9lamIvU2Z1bEJlYW4uamF2YQppbmRleCAzZDRmMzBiLi40YjI0ZGY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvZWpiL1NmdWxCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2VqYi9TZnVsQmVhbi5qYXZhCkBAIC0zNCwyNSArMzQsMjUgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CiAKIEBTdGF0ZWZ1bAotQEVKQihuYW1lPSJlamIvU2Z1bEJlYW4iLCAKK0BFSkIobmFtZT0iZWpiL1NmdWxCZWFuIiwKICAgICAgICAgYmVhbkludGVyZmFjZT1jb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLnBlcnNpc3RlbmNlLnR4X3Byb3BhZ2F0aW9uLlNmdWxEZWxlZ2F0ZS5jbGFzcykKIAogcHVibGljIGNsYXNzIFNmdWxCZWFuCiAgICAgaW1wbGVtZW50cyBTZnVsIHsKIAogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7Ci0gICAgCisKICAgICBwcml2YXRlIEBFSkIgU2Z1bERlbGVnYXRlIGRlbGVnYXRlOwotICAgIAorCiAgICAgcHJpdmF0ZSBAUGVyc2lzdGVuY2VDb250ZXh0KHVuaXROYW1lPSJsaWIvZWpiLWVqYjMwLXBlcnNpc3RlbmNlLXR4X3Byb3BhZ2F0aW9uLXBhcjEuamFyI2VtIiwKLSAgICAgICAgICAgICAgICB0eXBlPVBlcnNpc3RlbmNlQ29udGV4dFR5cGUuRVhURU5ERUQpIAorICAgICAgICAgICAgICAgIHR5cGU9UGVyc2lzdGVuY2VDb250ZXh0VHlwZS5FWFRFTkRFRCkKICAgICAgICAgICAgIEVudGl0eU1hbmFnZXIgZXh0ZW5kZWRFTTsKLSAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN0cmluZyBsb29rdXBOYW1lID0gImphdmE6Y29tcC9lbnYvZWpiL1NmdWxCZWFuIjsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpbml0Q3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBkZWxlZ2F0ZSA9IChTZnVsRGVsZWdhdGUpIGluaXRDdHgubG9va3VwKGxvb2t1cE5hbWUpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTYyLDcgKzYyLDcgQEAKIAogICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBCb29sZWFuPiBkb1Rlc3RzKCkgewogICAgICAgICBQZXJzb24gcGVyc29uID0gbmV3IFBlcnNvbihuYW1lKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGRlbGVnYXRlTmFtZSA9ICJkZWxnbmFtZV8iICsgbmFtZTsKICAgICAgICAgU3RyaW5nIGRlbGVnYXRlRGF0YT0gImRlbGdkYXRhOiAiICsgbmFtZTsKICAgICAgICAgZGVsZWdhdGUuY3JlYXRlKGRlbGVnYXRlTmFtZSwgZGVsZWdhdGVEYXRhKTsKQEAgLTcxLDggKzcxLDggQEAKIAogICAgICAgICBleHRlbmRlZEVNLnBlcnNpc3QocGVyc29uKTsKICAgICAgICAgUGVyc29uIGZvdW5kUGVyc29uID0gZGVsZWdhdGUuZmluZChuYW1lKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgTWFwPFN0cmluZywgQm9vbGVhbj4gbWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBCb29sZWFuPigpOwogICAgICAgICBtYXAucHV0KCJmaW5kRGVsZWdhdGVDcmVhdGVkUGVyc29uIiwgKGRQZXJzb24gIT0gbnVsbCkpOwogICAgICAgICBtYXAucHV0KCJkZWxlZ2F0ZUZvdW5kTWUiLCAoZm91bmRQZXJzb24gIT0gbnVsbCkpOwpAQCAtMTAwLDUgKzEwMCw1IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlbW92ZWQ7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvZWpiL1NmdWxEZWxlZ2F0ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2VqYi9TZnVsRGVsZWdhdGUuamF2YQppbmRleCA2MmQyMDk3Li4zMzdhNDNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvZWpiL1NmdWxEZWxlZ2F0ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9lamIvU2Z1bERlbGVnYXRlLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKICAgICBQZXJzb24gZmluZChTdHJpbmcgbmFtZSk7CiAKICAgICBib29sZWFuIHJlbW92ZShTdHJpbmcgbmFtZSk7Ci0gICAgCisKICAgICBFbnRpdHlNYW5hZ2VyIGdldEVNKCk7CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9lamIvU2Z1bERlbGVnYXRlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2VqYi9TZnVsRGVsZWdhdGVCZWFuLmphdmEKaW5kZXggOGE5NmUyMC4uZjdhN2FhZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2VqYi9TZnVsRGVsZWdhdGVCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2VqYi9TZnVsRGVsZWdhdGVCZWFuLmphdmEKQEAgLTM3LDEyICszNywxMiBAQAogICAgIHB1YmxpYyBFbnRpdHlNYW5hZ2VyIGdldEVNKCkgewogICAgICAgICByZXR1cm4gZXh0ZW5kZWRFTTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgUGVyc29uIGNyZWF0ZShTdHJpbmcgbmFtZSwgU3RyaW5nIGRhdGEpIHsKIAogICAgICAgICBQZXJzb24gcCA9IG5ldyBQZXJzb24obmFtZSk7CiAgICAgICAgIHAuc2V0RGF0YShkYXRhKTsKLSAgICAgICAgCisKICAgICAgICAgZXh0ZW5kZWRFTS5wZXJzaXN0KHApOwogICAgICAgICByZXR1cm4gcDsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvc3FsL2NyZWF0ZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvc3FsL2NyZWF0ZS5zcWwKaW5kZXggZmE2MDc0Mi4uYzBhYjQzZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL3NxbC9jcmVhdGUuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9zcWwvY3JlYXRlLnNxbApAQCAtMSw0ICsxLDQgQEAKLUNSRUFURSBUQUJMRSBFSkIzMF9QRVJTSVNURU5DRV9FRU1fSU5KRUNUSU9OX1BFUlNPTiAoDQotICAgIE5BTUUgVkFSQ0hBUigyNTYpIE5PVCBOVUxMIFBSSU1BUlkgS0VZLA0KLSAgICBEQVRBIFZBUkNIQVIoMjU2KQ0KLSk7DQorQ1JFQVRFIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTV9JTkpFQ1RJT05fUEVSU09OICgKKyAgICBOQU1FIFZBUkNIQVIoMjU2KSBOT1QgTlVMTCBQUklNQVJZIEtFWSwKKyAgICBEQVRBIFZBUkNIQVIoMjU2KQorKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9zcWwvZHJvcC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvc3FsL2Ryb3Auc3FsCmluZGV4IDVlYjEzNmYuLmQwMTJjNjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9zcWwvZHJvcC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL3NxbC9kcm9wLnNxbApAQCAtMSArMSBAQAotRFJPUCBUQUJMRSBFSkIzMF9QRVJTSVNURU5DRV9FRU1fSU5KRUNUSU9OX1BFUlNPTjsNCitEUk9QIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTV9JTkpFQ1RJT05fUEVSU09OOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbAppbmRleCAyMWJlMDYyLi5iNzQxZmVkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbApAQCAtNzIsNCArNzIsNCBAQAogICAgICAgPHByb3BlcnR5IG5hbWU9IlJlc2V0Q29udHJvbCIgdmFsdWU9IkJFR0lOTklORyIvPgogICAgIDwvYWRtaW4tb2JqZWN0LXJlc291cmNlPi0tPgogCi08L3Jlc291cmNlcz4gCis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9NRVRBLUlORi9lamItZ2YtcmVzb3VyY2VzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9NRVRBLUlORi9lamItZ2YtcmVzb3VyY2VzLnhtbAppbmRleCAzZWFlNDAzLi4zODk3NzlhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWdmLXJlc291cmNlcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvc3JjL01FVEEtSU5GL2VqYi1nZi1yZXNvdXJjZXMueG1sCkBAIC01Nyw0ICs1Nyw0IEBACiAgICAgIDxhZG1pbi1vYmplY3QtcmVzb3VyY2UgZW5hYmxlZD0idHJ1ZSIgam5kaS1uYW1lPSJqYXZhOm1vZHVsZS9laXMvdGVzdEFkbWluIiBvYmplY3QtdHlwZT0idXNlciIgcmVzLWFkYXB0ZXI9ImdlbmVyaWMtcmEiIHJlcy10eXBlPSJjb25uZWN0b3IuTXlBZG1pbk9iamVjdCI+CiAgICAgICA8cHJvcGVydHkgbmFtZT0iUmVzZXRDb250cm9sIiB2YWx1ZT0iQkVHSU5OSU5HIi8+CiAgICAgPC9hZG1pbi1vYmplY3QtcmVzb3VyY2U+Ci08L3Jlc291cmNlcz4gCis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbAppbmRleCA1ODJiNzgxLi4xMmZiNmQzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCkBAIC0xMTQsOCArMTE0LDggQEAKICAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgotCTxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8c2VjdXJpdHktaWRlbnRpdHk+CiAgICAgICAgIDx1c2UtY2FsbGVyLWlkZW50aXR5Lz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmluZGV4IGI4OGE4NjguLjY5YjAxNDkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbApAQCAtMzIsNyArMzIsNyBAQAogICAgICAgICAgICAgVGVzdEludGVnZXJQcm9wCiAgICAgICAgICAgPC9hY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgIDxhY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgICAgIDIgCisgICAgICAgICAgICAyCiAgICAgICAgICAgPC9hY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgPC9hY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPC9hY3RpdmF0aW9uLWNvbmZpZz4KQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+CiAgICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxqbmRpLW5hbWU+amF2YTptb2R1bGUvZWlzL3Rlc3RBZG1pbjwvam5kaS1uYW1lPgorICAgIDxqbmRpLW5hbWU+amF2YTptb2R1bGUvZWlzL3Rlc3RBZG1pbjwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPGdlbi1jbGFzc2VzLz4KICAgICA8L2VqYj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9NRVRBLUlORi93ZWItZ2YtcmVzb3VyY2VzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9NRVRBLUlORi93ZWItZ2YtcmVzb3VyY2VzLnhtbAppbmRleCA4MTZkNWE5Li5jNjU4YTA3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvTUVUQS1JTkYvd2ViLWdmLXJlc291cmNlcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvc3JjL01FVEEtSU5GL3dlYi1nZi1yZXNvdXJjZXMueG1sCkBAIC01Myw0ICs1Myw0IEBACiAgICAgPC9qZGJjLWNvbm5lY3Rpb24tcG9vbD4KIAogICAgIDxqZGJjLXJlc291cmNlIGVuYWJsZWQ9InRydWUiIGpuZGktbmFtZT0iamF2YTptb2R1bGUvamRiYy93ZWItbGV2ZWwtZHMiIG9iamVjdC10eXBlPSJ1c2VyIiBwb29sLW5hbWU9ImphdmE6bW9kdWxlL2pkYmMvd2ViLWxldmVsLXBvb2wiLz4KLTwvcmVzb3VyY2VzPiAKKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQppbmRleCAzZjY1M2UzLi5lNGE1MGY0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogCiAgICAgcHVibGljIE1lc3NhZ2VDaGVja2VyRUpCKCkge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImJlYW4gY3JlYXRlZCIpOwogICAgICAgICBoZWxkQ29uID0gbnVsbDsKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWFvLmdldFJBKCkgaXMgbnVsbCIpOwogICAgICAgIH0KICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewotCWUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICB9CiAKICB0cnl7CkBAIC05NywxMSArOTcsMTEgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgLy9UZWxsIHRoZSByZXNvdXJjZSBhZGFwdGVyIHRoZSBjbGllbnQgaXMgcmVhZHkgdG8gcnVuCi0gICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeUFsbCgpOyAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5QWxsKCk7CisKICAgICAgICAgICAgICAgICBkZWJ1ZygiTk9USUZJRUQuLi4gU1RBUlQgV0FJVElORyIpOwogICAgICAgICAgICAgICAgIC8vV2FpdCB1bnRpbCBiZWluZyB0b2xkIHRvIHJlYWQgZnJvbSB0aGUgZGF0YWJhc2UKLSAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkud2FpdCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkud2FpdCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTIwLDIyICsxMjAsMjIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE1lc3NhZ2VDb3VudCgpIHsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGdldEZyZXNoQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgaW50IGNvdW50MSA9IGdldENvdW50KGNvbik7CiAgICAgICAgICAgICBjb24uY2xvc2UoKTsKLSAgICAgICAgICAgIAotCSAgICAvKgorCisgICAgICAgIC8qCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeSgpOwogICAgICAgICAgICAgfQotCSAgICAqLwotICAgICAgICAgICAgICAgIAorICAgICAgICAqLworCiAgICAgICAgICAgICByZXR1cm4gY291bnQxOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLm91dCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCX0KKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q291bnQoQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtMTYxLDEwICsxNjEsMTAgQEAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIHVzZXIgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvdXNlciIpOwogICAgICAgICAgICAgcGFzc3dvcmQgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvcGFzc3dvcmQiKTsKLQkgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2Vpcy90ZXN0QWRtaW4iKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMSU5HIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOwotCSAgICBDb250cm9scy5pbml0aWFsaXplKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTEVEIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIgKyBDb250cm9scyk7CisgICAgICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvdGVzdEFkbWluIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTElORyBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKKyAgICAgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExFRCBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iICsgQ29udHJvbHMpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0xOTksNyArMTk5LDcgQEAKICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGNvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbjsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yMTAsNyArMjEwLDcgQEAKICAgICAgICAgICAgIHRocm93IGV4MTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBjbG9zZUNvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBpZiAoaGVsZENvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGRhZDIwN2IuLjBiMzhjMTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIGVqYi1qYXIueG1sPU1FVEEtSU5GL2VqYi1qYXIueG1sCiBzdW4tZWpiLWphci54bWw9TUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA5MzQzNTA2Li4zOTM5MjU3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDQ1ICsyOCw0NSBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgICAgICAvL3N1cGVyKGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdCgpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGhpcyBpcyB0byB0ZXN0IGNvbm5lY3RvciAxLjUgIisKLQkgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICJjb250cmFjdHMuIik7CisKICAgICAgICAgU3RyaW5nIHJlcyA9ICJOT1QgUlVOIjsKLQlkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKKyAgICBkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKICAgICAgICAgYm9vbGVhbiBwYXNzID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXMgID0gIkFMTCBURVNUUyBQQVNTRUQiOwotCSAgICBpbnQgdGVzdENvdW50ID0gMTsKKyAgICAgICAgaW50IHRlc3RDb3VudCA9IDE7CiAgICAgICAgICAgICB3aGlsZSAoIWRvbmUoKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwogICAgICAgICAgICAgICAgIGlmICghZG9uZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJSdW5uaW5nLi4uIik7CiAgICAgICAgICAgICAgICAgICAgIHBhc3MgPSBjaGVja1Jlc3VsdHMoZXhwZWN0ZWRSZXN1bHRzKCkpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR290IGV4cGVjdGVkIHJlc3VsdHMgPSAiICsgcGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZG8gbm90IGNvbnRpbnVlIGlmIG9uZSB0ZXN0IGZhaWxlZAogICAgICAgICAgICAgICAgICAgICBpZiAoIXBhc3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9ICJTT01FIFRFU1RTIEZBSUxFRCI7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiSUQgQ29ubmVjdG9yIDEuNiB0ZXN0IC0gIiArIHRlc3RDb3VudCwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJJRCBDb25uZWN0b3IgMS42IHRlc3QgLSAiICsgdGVzdENvdW50LCBzdGF0LlBBU1MpOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLQkJdGVzdENvdW50ICsrOworICAgICAgICB0ZXN0Q291bnQgKys7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC03NiwxNCArNzYsMTQgQEAKICAgICAgICAgfQogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiY29ubmVjdG9yMS42SUQiKTsKIAotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiRVhJVElORy4uLiBTVEFUVVMgPSAiICsgcmVzKTsKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tSZXN1bHRzKGludCBudW0pIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICBpbnQgcmVzdWx0ID0gY2hlY2tlci5nZXRNZXNzYWdlQ291bnQoKTsKQEAgLTkyLDcgKzkyLDcgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBkb25lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIHJldHVybiBjaGVja2VyLmRvbmUoKTsKQEAgLTEwMCw3ICsxMDAsNyBAQAogCiAgICAgcHJpdmF0ZSBpbnQgZXhwZWN0ZWRSZXN1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIHJldHVybiBjaGVja2VyLmV4cGVjdGVkUmVzdWx0cygpOwpAQCAtMTA4LDcgKzEwOCw3IEBACiAKICAgICBwcml2YXRlIHZvaWQgbm90aWZ5QW5kV2FpdCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICBjaGVja2VyLm5vdGlmeUFuZFdhaXQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKaW5kZXggYjc0MjdhYS4uNjJjNDJhZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKQEAgLTI5LDQxICsyOSw0MSBAQAogCiAvKioKICAqLwotcHVibGljIGNsYXNzIE15TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwgCitwdWJsaWMgY2xhc3MgTXlNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLAogICAgICAgICBNeU1lc3NhZ2VMaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIHRyYW5zaWVudCBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMgPSBudWxsOwogICAgIHByaXZhdGUgQ29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IsIHdoaWNoIGlzIHB1YmxpYyBhbmQgdGFrZXMgbm8gYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyBNeU1lc3NhZ2VCZWFuKCkge30KIAogICAgIC8qKgotICAgICAqIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgCi0gICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgCisgICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dAorICAgICAqIG5vdCBmaW5hbCBvciBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kCiAgICAgICogd2l0aCBvbmUgYXJndW1lbnQgb2YgdHlwZSBqYWthcnRhLmVqYi5NZXNzYWdlRHJpdmVuQ29udGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBtZGMgICAgdGhlIGNvbnRleHQgdG8gc2V0CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjKSB7Ci0JdGhpcy5tZGMgPSBtZGM7CisgICAgdGhpcy5tZGMgPSBtZGM7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogZWpiQ3JlYXRlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgeyB9CiAKICAgICAvKioKLSAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCisgICAgICogb25NZXNzYWdlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCiAgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG9uZSBhcmd1bWVudAogICAgICAqIG9mIHR5cGUgamFrYXJ0YS5qbXMuTWVzc2FnZS4KICAgICAgKgotICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzIAorICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzCiAgICAgICogdGhlIHRleHQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gaW5NZXNzYWdlICAgIHRoZSBpbmNvbWluZyBtZXNzYWdlCkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgIC8vbG9nKCJvbk1lc3NhZ2U6OiBnZXRDYWxsZXJQcmluY2lwYWwgOiAiICsgbWRjLmdldENhbGxlclByaW5jaXBhbCgpKTsKICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIm9uTWVzc2FnZSA6IFRocmVhZElEIDogIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpKTsKICAgICAgICAgaWYobWRjLmdldENhbGxlclByaW5jaXBhbCgpICE9IG51bGwpewotICAgICAgICAJbG9nKCJvbk1lc3NhZ2U6OiBnZXRDYWxsZXJQcmluY2lwYWwgTmFtZSA6ICIgKyBtZGMuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkuZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgIGxvZygib25NZXNzYWdlOjogZ2V0Q2FsbGVyUHJpbmNpcGFsIE5hbWUgOiAiICsgbWRjLmdldENhbGxlclByaW5jaXBhbCgpLmdldE5hbWUoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBsb2coIm9uTWVzc2FnZSA6IGlzQ2FsbGVySW5Sb2xlKCdqYWdhZGlzaCcpIDogIiArIG1kYy5pc0NhbGxlckluUm9sZSgiamFnYWRpc2giKSk7CkBAIC04Myw3ICs4Myw3IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmIChpbk1lc3NhZ2UuZW5kc1dpdGgoIldSSVRFIikpIHsKLSAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwgCisgICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJXUklURSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbk1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGluTWVzc2FnZS5sYXN0SW5kZXhPZigiOiIpKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiREVMRVRFIikpIHsKICAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIkRFTEVURSIsCkBAIC05NywxMCArOTcsMTAgQEAKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogZWpiUmVtb3ZlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJSZW1vdmUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KQEAgLTExMCw2MiArMTEwLDYyIEBACiAKICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBTdHJpbmcgaWQgICAgPSBtZXNzYWdlLnN1YnN0cmluZygwLCBtZXNzYWdlLmluZGV4T2YoIjoiKSk7Ci0gICAgICAgIFN0cmluZyBib2R5ICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKG1lc3NhZ2UuaW5kZXhPZigiOiIpKzEpOyAKKyAgICAgICAgU3RyaW5nIGJvZHkgID0gbWVzc2FnZS5zdWJzdHJpbmcobWVzc2FnZS5pbmRleE9mKCI6IikrMSk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKCJSRUFEIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiUmVhZGluZyByb3cgZnJvbSBkYXRhYmFzZS4uLiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAKICAgICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPSAKKyAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9CiAgICAgICAgICAgICAgICAgICAiU0VMRUNUIGlkIGZyb20gbWVzc2FnZXMgd2hlcmUgaWQgPSAnUVEnIjsKICAgICAgICAgICAgICAgICAgIFJlc3VsdFNldCByZXN1bHRzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKyAKKyAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArCiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmdldEludCgiYmFsYW5jZSIpICsgIiBkb2xsYXJzIik7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICBzdG10LmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWFkIG9uZSBhY2NvdW50XG4iKTsKIAogICAgICAgICAgICAgfSBlbHNlIGlmICgiV1JJVEUiLmVxdWFscyhvcCkpIHsKIAogICAgICAgICAgICAgICAgIGRlYnVnKCJJbnNlcnRpbmcgb25lIG1lc3NhZ2UgaW4gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBjcmVhdGVSb3coaWQsIGJvZHksIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIG9uZSBtZXNzYWdlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfSBlbHNlIGlmICgiREVMRVRFIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgb25lIG1lc3NhZ2UgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWxldGVSb3coaWQsIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWxldGVkIG9uZSBtZXNzYWdlXG4iKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIkRFTEVURV9BTEwiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBhbGwgbWVzc2FnZXMgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKQEAgLTE3Niw3ICsxNzYsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvL3Vuc3VwcG9ydGVkIG9wCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9ZmluYWxseXsKICAgICAgICAgICAgIHRyeXsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24uY2xvc2UoKTsKQEAgLTE4NSw5ICsxODUsOSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBjcmVhdGVSb3coU3RyaW5nIGlkLCBTdHJpbmcgYm9keSwgCi0gICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisKKyAgICBwcml2YXRlIHZvaWQgY3JlYXRlUm93KFN0cmluZyBpZCwgU3RyaW5nIGJvZHksCisgICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgLy8gQ3JlYXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCkBAIC0yMDMsOSArMjAzLDkgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVSb3coU3RyaW5nIGlkLCBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvdyhTdHJpbmcgaWQsIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIGRlYnVnKCJEZWxldGVSb3cgd2l0aCBJRCA9ICIgKyBpZCk7CiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwpAQCAtMjE4LDkgKzIxOCw5IEBACiAgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICBTdHJpbmcgcXVlcnkgPSAiREVMRVRFIEZST00gbWVzc2FnZXMiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvc3JjL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvc3JjL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCmluZGV4IGVhMGQ1ZDEuLjk3YTYzZTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKQEAgLTQ1LDE3ICs0NSwxNyBAQAogCiAgICAgcHVibGljIFN0cmluZyBkb1Rlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBJT0V4Y2VwdGlvbnsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGlzIGlzIHRvIHRlc3QgY29ubmVjdG9yIDEuNiAiKwotCSAgICAgICAgICAgICAiY29udHJhY3RzLiIpOworICAgICAgICAgICAgICAgICAiY29udHJhY3RzLiIpOwogCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CiAKICAgICAgICAgU3RyaW5nIHJlcyA9ICJOT1QgUlVOIjsKLQlkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKKyAgICBkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKICAgICAgICAgYm9vbGVhbiBwYXNzID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXMgID0gIkFMTCBURVNUUyBQQVNTRUQiOwotCSAgICBpbnQgdGVzdENvdW50ID0gMTsKKyAgICAgICAgaW50IHRlc3RDb3VudCA9IDE7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiU3RhcnRpbmcgdGhlIHRlc3QiKTsKICAgICAgICAgICAgIG91dC5mbHVzaCgpOwogCkBAIC05NCwxOCArOTQsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9ICJTT01FIFRFU1RTIEZBSUxFRCI7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIklEIENvbm5lY3RvciAxLjYgdGVzdCAtICIgKyB0ZXN0Q291bnQgKyAiIEZBSUwiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOkZBSUwiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIklEIENvbm5lY3RvciAxLjYgdGVzdCAtICIgKyB0ZXN0Q291bnQgKyAiIFBBU1MiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOlBBU1MiKTsKLQkJICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIkVORF9PRl9FWEVDVVRJT04iKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgb3V0LnByaW50bG4oIkVORF9PRl9FWEVDVVRJT04iKTsKLSAgICAgICAgICAgIAorCiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkltcG9ydGluZyB0cmFuc2FjdGlvbiB0ZXN0IGZhaWxlZC4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYnVpbGQucHJvcGVydGllcwppbmRleCAyMDdhNDg2Li4wODNiMjYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii9jb25uZWN0b3IxNi9zZXJ2bGV0Ii8+CiA8cHJvcGVydHkgbmFtZT0iaHR0cDpob3N0IiB2YWx1ZT0ibG9jYWxob3N0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbAppbmRleCBhOTM0OWZjLi4wZmNhYmRkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKQEAgLTQ4LDQgKzQ4LDQgQEAKICAgICAgIDxwcmluY2lwYWwtbWFwIGVpcy1wcmluY2lwYWw9ImVpcy1wcmFzYXRoIiBtYXBwZWQtcHJpbmNpcGFsPSJwcmFzYXRoIiAvPgogICAgICAgPHByaW5jaXBhbC1tYXAgZWlzLXByaW5jaXBhbD0iZWlzLWphZ2FkaXNoIiBtYXBwZWQtcHJpbmNpcGFsPSJqYWdhZGlzaCIgLz4KICAgICA8L3dvcmstc2VjdXJpdHktbWFwPgotPC9yZXNvdXJjZXM+IAorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL01FVEEtSU5GL3JhLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvTUVUQS1JTkYvcmEueG1sCmluZGV4IDk3ODFlMTYuLjNjY2YyOTYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvTUVUQS1JTkYvcmEueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvTUVUQS1JTkYvcmEueG1sCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eS1jb25maWRlbnRpYWw+CiAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8aW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPgogICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXI+CiAgICAgICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXItdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lcgpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYy1jbGFzcz4KICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYz4KICAgICAgICAgICAgICAgICA8L21lc3NhZ2VsaXN0ZW5lcj4KLSAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4KICAgICAgICAgPC9pbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KICAgICAgICAgPGFkbWlub2JqZWN0PgogICAgICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L2FkbWlub2JqZWN0LWludGVyZmFjZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2J1aWxkLnhtbAppbmRleCBlZDI5ODg5Li44NTI4ODE4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvYnVpbGQueG1sCkBAIC0zMCw4ICszMCw4IEBACiAKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImluaXQtY29tbW9uIiA+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KLQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgorICAgIDxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+CisgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGphciBqYXJmaWxlPSIuLi9nZW5lcmljLXJhLmphciIgYmFzZWRpcj0iY2xhc3NlcyIKICAgICAgICAgIGluY2x1ZGVzPSJjb25uZWN0b3IvKi5jbGFzcyIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKaW5kZXggNTU1MzNkNC4uZjU5YjJiMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBDb250cm9scyB7CiAgICAgcHVibGljIHN0YXRpYyBPYmplY3QgcmVhZHlMb2NrID0gbmV3IE9iamVjdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCmluZGV4IDY1ODIzM2UuLmQ3M2M4NjIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBEZWxpdmVyeVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtMzYsNyArMzYsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIG9wOwogICAgIHByaXZhdGUgYm9vbGVhbiBrZWVwQ291bnQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ZXIgPSAwOwotICAgIAorCiAgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCBTdHJpbmcgb3ApIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIHRoaXMua2VlcENvdW50ID0gZmFsc2U7CiAgICAgfQogCi0gICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCAKKyAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsCiAgICAgICAgICAgICBTdHJpbmcgb3AsIGJvb2xlYW4ga2VlcENvdW50KSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNTUsNyArNTUsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwogICAgICAgICAgICAgLy9lcC5iZWZvcmVEZWxpdmVyeShvbk1lc3NhZ2UpOwpAQCAtNzgsMTEgKzc4LDExIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vZXAuYWZ0ZXJEZWxpdmVyeSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTkzLDE0ICs5MywxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQppbmRleCAxMDBjYWNlLi5mYTkzZjYzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKICAgICB9CiAKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGZvcmdldChYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UuZm9yZ2V0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgfQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucHJlcGFyZTogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgICAgICByZXR1cm4gWEFSZXNvdXJjZS5YQV9PSzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgWGlkW10gcmVjb3ZlcihpbnQgZmxhZykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnJlY292ZXI6ICIgKyBmbGFnVG9TdHJpbmcoZmxhZykpOwogICAgICAgICByZXR1cm4gbnVsbDsKQEAgLTY2LDcgKzY2LDcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBzZXRUcmFuc2FjdGlvblRpbWVvdXQoaW50IHNlY29uZHMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzdGFydChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5zdGFydDogIiArIHhpZFRvU3RyaW5nKHhpZCkgKyAiLCIgKwogICAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL0pTUjMyMldvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2Nvbm5lY3Rvci9KU1IzMjJXb3JrLmphdmEKaW5kZXggNTEwN2FjMS4uMDIwM2Y0YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL0pTUjMyMldvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9jb25uZWN0b3IvSlNSMzIyV29yay5qYXZhCkBAIC00OCw2ICs0OCw2IEBACiAKICAgICBwdWJsaWMgdm9pZCBydW4oKXsKICAgICAgICAgc3VwZXIucnVuKCk7Ci0gICAgICAgIAorCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKaW5kZXggYTY4YTViNy4uOWMyODgxMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCkBAIC01MSwxMSArNTEsMTEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOwogICAgICAgICBpZiAocmVzZXRDb250cm9sLmVxdWFscygiQkVHSU5OSU5HIikpIHsKICAgICAgICAgICAgQ29udHJvbHMuZG9uZT1mYWxzZTsKLQkgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKLQl9CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGRvbmUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9jb25uZWN0b3IvTXlTZWN1cml0eUNvbnRleHQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2Nvbm5lY3Rvci9NeVNlY3VyaXR5Q29udGV4dC5qYXZhCmluZGV4IDMxNzhjMWMuLmUxOTA1MWUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2Nvbm5lY3Rvci9NeVNlY3VyaXR5Q29udGV4dC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2Nvbm5lY3Rvci9NeVNlY3VyaXR5Q29udGV4dC5qYXZhCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIENhbGxlclByaW5jaXBhbENhbGxiYWNrIGNwYyA9IG5ldyBDYWxsZXJQcmluY2lwYWxDYWxsYmFjayhleGVjU3ViamVjdCwgbmV3IFByaW5jaXBhbEltcGwocHJpbmNpcGFsTmFtZSkpOwogICAgICAgICBkZWJ1Zygic2V0dGluZyBjYWxsZXIgcHJpbmNpcGFsIGNhbGxiYWNrIHdpdGggcHJpbmNpcGFsIDogIiArIHByaW5jaXBhbE5hbWUpOwogICAgICAgICBjYWxsYmFja3MuYWRkKGNwYyk7Ci0gICAgICAgIAorCiAvKgogICAgICAgICBHcm91cFByaW5jaXBhbENhbGxiYWNrIGdwYyA9IG5ldyBHcm91cFByaW5jaXBhbENhbGxiYWNrKGV4ZWNTdWJqZWN0LCBudWxsKTsKICAgICAgICAgY2FsbGJhY2tzLmFkZChncGMpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQppbmRleCA4MTgyZWY1Li4zZmNlNTQ0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQpAQCAtMjQsOSArMjQsOSBAQAogICogc28gdGhhdCB0aGUgYXBwIHNlcnZlciBjYW4gaW5zdGFudGlhdGUgYW5kIGNvbmZpZ3VyZQogICogaXQgYXQgdGhlIHJ1bnRpbWUuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYyAKK3B1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYwogICAgIGltcGxlbWVudHMgQWN0aXZhdGlvblNwZWMsIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByaXZhdGUgU3RyaW5nIGRlc3RpbmF0aW9uTmFtZTsKQEAgLTQzLDcgKzQzLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uTmFtZSAoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uTmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvbk5hbWUgKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvbk5hbWUoKSBjYWxsZWQuLi4gbmFtZSA9ICIgKyBuYW1lKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbk5hbWUgPSBuYW1lOwpAQCAtNTIsNyArNTIsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25UeXBlKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvblR5cGU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25UeXBlIChTdHJpbmcgdHlwZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25UeXBlICgpIGNhbGxlZC4uLiB0eXBlID0gIiArIHR5cGUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uVHlwZT0gdHlwZTsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3RQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0UHJvcDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0UHJvcCAoU3RyaW5nIHRlc3RQcm9wKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0UHJvcCAoKSBjYWxsZWQuLi4gdGVzdFByb3AgPSAiICsgdGVzdFByb3ApOwogICAgICAgICB0aGlzLnRlc3RQcm9wID0gdGVzdFByb3A7CkBAIC03MCw3ICs3MCw3IEBACiAgICAgcHVibGljIEludGVnZXIgZ2V0VGVzdEludGVnZXJQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0SW50ZWdlclByb3A7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdEludGVnZXJQcm9wIChJbnRlZ2VyIHRlc3RQcm9wMSkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdEludGVnZXJQcm9wICgpIGNhbGxlZC4uLiB0ZXN0SW50ZWdlclByb3AgPSAiICsgdGVzdFByb3AxKTsKICAgICAgICAgdGhpcy50ZXN0SW50ZWdlclByb3AgPSB0ZXN0UHJvcDE7CkBAIC05NCw3ICs5NCw3IEBACiAKICAgICAgIH0KIAotICAgfSAKKyAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkZWJ1ZyAoU3RyaW5nIG1lc3NhZ2UpCiAgICAgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCBkZGZmMDA1Li40ZTkyMWEyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQpAQCAtODYsNyArODYsNyBAQAogCiAgICAgICAgICAgICAgICAgaWYgKCFmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwotICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7IAorICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7CiAgICAgICAgICAgICAgICAgICAgIC8vd20uZG9Xb3JrKGQsIDAsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQppbmRleCAxOGE5NzBkLi5iMmE5MDZjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCkBAIC0zNSw4ICszNSw4IEBACiAgICAgcHVibGljIGludCBicmFuY2hRdWFsaWZpZXI7CiAgICAgcHVibGljIGludCBnbG9iYWxUeElEOwogCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7IAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OyAKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsKIAogICAgIHB1YmxpYyBYSUQoKSB7CiAgICAgICAgIGludCBmb28gPSBJRCsrOwpAQCAtNTQsMTAgKzU0LDEwIEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAvLyBJdCBjYW4ndCBiZSBlcXVhbAogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG90aGVyID0gKFhJRClvOyAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3RoZXIgWElELCBub3cgcHJvcGVybHkgY2FzdAotICAgICAgICAKLSAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQgCisKKyAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQKICAgICAgICAgICAgICAgICAmJiB0aGlzLmJyYW5jaFF1YWxpZmllciA9PSBvdGhlci5icmFuY2hRdWFsaWZpZXIKICAgICAgICAgICAgICAgICAmJiB0aGlzLmdsb2JhbFR4SUQgPT0gb3RoZXIuZ2xvYmFsVHhJRCkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgICAgICAgICAgICAgImZvcm1hdElEKCIgICAgICsgZm9ybWF0SUQgICAgICsgIiksICIgKwogICAgICAgICAgICAgICAgICJicmFuY2hRdWFsaWZpZXIgKCIgKyBicmFuY2hRdWFsaWZpZXIgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImdsb2JhbFR4SUQoIiArIGdsb2JhbFR4SUQgKyAiKX0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHM7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKaW5kZXggM2JiNDU0OS4uOGNkZjg1OSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbApAQCAtNzMsNCArNzMsNCBAQAogICAgIDwvYWRtaW4tb2JqZWN0LXJlc291cmNlPgogCiAKLTwvcmVzb3VyY2VzPiAKKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9NRVRBLUlORi9lamItZ2YtcmVzb3VyY2VzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWdmLXJlc291cmNlcy54bWwKaW5kZXggZmU0YTA5MC4uZDdmOGY5YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9NRVRBLUlORi9lamItZ2YtcmVzb3VyY2VzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvc3JjL01FVEEtSU5GL2VqYi1nZi1yZXNvdXJjZXMueG1sCkBAIC01Myw0ICs1Myw0IEBACiAgICAgPC9qZGJjLWNvbm5lY3Rpb24tcG9vbD4KIAogICAgIDxqZGJjLXJlc291cmNlIGVuYWJsZWQ9InRydWUiIGpuZGktbmFtZT0iamF2YTptb2R1bGUvamRiYy9lamItbGV2ZWwtZHMiIG9iamVjdC10eXBlPSJ1c2VyIiBwb29sLW5hbWU9ImphdmE6bW9kdWxlL2pkYmMvZWpiLWxldmVsLXBvb2wiLz4KLTwvcmVzb3VyY2VzPiAKKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKaW5kZXggNTgyYjc4MS4uMTJmYjZkMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCkBAIC0xMTQsOCArMTE0LDggQEAKICAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgotCTxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8c2VjdXJpdHktaWRlbnRpdHk+CiAgICAgICAgIDx1c2UtY2FsbGVyLWlkZW50aXR5Lz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKaW5kZXggZTQ2NTc3Zi4uY2I4Y2QyMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgICAgIFRlc3RJbnRlZ2VyUHJvcAogICAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICA8YWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgICAgICAyIAorICAgICAgICAgICAgMgogICAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHk+CiAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWc+CkBAIC04NSw3ICs4NSw3IEBACiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmphdmE6YXBwL2Vpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmphdmE6YXBwL2Vpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxnZW4tY2xhc3Nlcy8+CiAgICAgPC9lamI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvc3JjL01FVEEtSU5GL3dlYi1nZi1yZXNvdXJjZXMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9NRVRBLUlORi93ZWItZ2YtcmVzb3VyY2VzLnhtbAppbmRleCBhZTZmYzExLi44YzI5NzZmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvc3JjL01FVEEtSU5GL3dlYi1nZi1yZXNvdXJjZXMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9zcmMvTUVUQS1JTkYvd2ViLWdmLXJlc291cmNlcy54bWwKQEAgLTUzLDQgKzUzLDQgQEAKICAgICA8L2pkYmMtY29ubmVjdGlvbi1wb29sPgogCiAgICAgPGpkYmMtcmVzb3VyY2UgZW5hYmxlZD0idHJ1ZSIgam5kaS1uYW1lPSJqZGJjL3dlYi1sZXZlbC1kcyIgb2JqZWN0LXR5cGU9InVzZXIiIHBvb2wtbmFtZT0iamRiYy93ZWItbGV2ZWwtcG9vbCIvPgotPC9yZXNvdXJjZXM+IAorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKaW5kZXggYjY0OGU5MS4uMjFmN2U5MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogCiAgICAgcHVibGljIE1lc3NhZ2VDaGVja2VyRUpCKCkge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImJlYW4gY3JlYXRlZCIpOwogICAgICAgICBoZWxkQ29uID0gbnVsbDsKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWFvLmdldFJBKCkgaXMgbnVsbCIpOwogICAgICAgIH0KICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewotCWUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICB9CiAKICB0cnl7CkBAIC05OCwxMSArOTgsMTEgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgLy9UZWxsIHRoZSByZXNvdXJjZSBhZGFwdGVyIHRoZSBjbGllbnQgaXMgcmVhZHkgdG8gcnVuCi0gICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeUFsbCgpOyAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5QWxsKCk7CisKICAgICAgICAgICAgICAgICBkZWJ1ZygiTk9USUZJRUQuLi4gU1RBUlQgV0FJVElORyIpOwogICAgICAgICAgICAgICAgIC8vV2FpdCB1bnRpbCBiZWluZyB0b2xkIHRvIHJlYWQgZnJvbSB0aGUgZGF0YWJhc2UKLSAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkud2FpdCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkud2FpdCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTIxLDIyICsxMjEsMjIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE1lc3NhZ2VDb3VudCgpIHsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGdldEZyZXNoQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgaW50IGNvdW50MSA9IGdldENvdW50KGNvbik7CiAgICAgICAgICAgICBjb24uY2xvc2UoKTsKLSAgICAgICAgICAgIAotCSAgICAvKgorCisgICAgICAgIC8qCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeSgpOwogICAgICAgICAgICAgfQotCSAgICAqLwotICAgICAgICAgICAgICAgIAorICAgICAgICAqLworCiAgICAgICAgICAgICByZXR1cm4gY291bnQxOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLm91dCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCX0KKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q291bnQoQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtMTYyLDEwICsxNjIsMTAgQEAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIHVzZXIgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvdXNlciIpOwogICAgICAgICAgICAgcGFzc3dvcmQgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvcGFzc3dvcmQiKTsKLQkgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2Vpcy90ZXN0QWRtaW4iKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMSU5HIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOwotCSAgICBDb250cm9scy5pbml0aWFsaXplKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTEVEIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIgKyBDb250cm9scyk7CisgICAgICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvdGVzdEFkbWluIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTElORyBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKKyAgICAgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExFRCBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iICsgQ29udHJvbHMpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0yMDAsNyArMjAwLDcgQEAKICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGNvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbjsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yMTEsNyArMjExLDcgQEAKICAgICAgICAgICAgIHRocm93IGV4MTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBjbG9zZUNvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBpZiAoaGVsZENvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGFkMjA3Yi4uMGIzOGMxOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiBlamItamFyLnhtbD1NRVRBLUlORi9lamItamFyLnhtbAogc3VuLWVqYi1qYXIueG1sPU1FVEEtSU5GL3N1bi1lamItamFyLnhtbApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA5MzQzNTA2Li4zOTM5MjU3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsNDUgKzI4LDQ1IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIC8vc3VwZXIoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KCkgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgY29ubmVjdG9yIDEuNSAiKwotCSAgICAgICAgICAgICAiY29udHJhY3RzLiIpOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKKwogICAgICAgICBTdHJpbmcgcmVzID0gIk5PVCBSVU4iOwotCWRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOworICAgIGRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOwogICAgICAgICBib29sZWFuIHBhc3MgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7Ci0JICAgIGludCB0ZXN0Q291bnQgPSAxOworICAgICAgICBpbnQgdGVzdENvdW50ID0gMTsKICAgICAgICAgICAgIHdoaWxlICghZG9uZSgpKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFkb25lKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlJ1bm5pbmcuLi4iKTsKICAgICAgICAgICAgICAgICAgICAgcGFzcyA9IGNoZWNrUmVzdWx0cyhleHBlY3RlZFJlc3VsdHMoKSk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJHb3QgZXhwZWN0ZWQgcmVzdWx0cyA9ICIgKyBwYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kbyBub3QgY29udGludWUgaWYgb25lIHRlc3QgZmFpbGVkCiAgICAgICAgICAgICAgICAgICAgIGlmICghcGFzcykgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gIlNPTUUgVEVTVFMgRkFJTEVEIjsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJJRCBDb25uZWN0b3IgMS42IHRlc3QgLSAiICsgdGVzdENvdW50LCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIklEIENvbm5lY3RvciAxLjYgdGVzdCAtICIgKyB0ZXN0Q291bnQsIHN0YXQuUEFTUyk7Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotCQl0ZXN0Q291bnQgKys7CisgICAgICAgIHRlc3RDb3VudCArKzsKICAgICAgICAgICAgIH0KIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTc2LDE0ICs3NiwxNCBAQAogICAgICAgICB9CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJjb25uZWN0b3IxLjZJRCIpOwogCi0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJFWElUSU5HLi4uIFNUQVRVUyA9ICIgKyByZXMpOwogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja1Jlc3VsdHMoaW50IG51bSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIGludCByZXN1bHQgPSBjaGVja2VyLmdldE1lc3NhZ2VDb3VudCgpOwpAQCAtOTIsNyArOTIsNyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIGRvbmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgcmV0dXJuIGNoZWNrZXIuZG9uZSgpOwpAQCAtMTAwLDcgKzEwMCw3IEBACiAKICAgICBwcml2YXRlIGludCBleHBlY3RlZFJlc3VsdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgcmV0dXJuIGNoZWNrZXIuZXhwZWN0ZWRSZXN1bHRzKCk7CkBAIC0xMDgsNyArMTA4LDcgQEAKIAogICAgIHByaXZhdGUgdm9pZCBub3RpZnlBbmRXYWl0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIGNoZWNrZXIubm90aWZ5QW5kV2FpdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCmluZGV4IDc4YTNlZTkuLjNhYjBjMmEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKQEAgLTMwLDQxICszMCw0MSBAQAogCiAvKioKICAqLwotcHVibGljIGNsYXNzIE15TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwgCitwdWJsaWMgY2xhc3MgTXlNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLAogICAgICAgICBNeU1lc3NhZ2VMaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIHRyYW5zaWVudCBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMgPSBudWxsOwogICAgIHByaXZhdGUgQ29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IsIHdoaWNoIGlzIHB1YmxpYyBhbmQgdGFrZXMgbm8gYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyBNeU1lc3NhZ2VCZWFuKCkge30KIAogICAgIC8qKgotICAgICAqIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgCi0gICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgCisgICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dAorICAgICAqIG5vdCBmaW5hbCBvciBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kCiAgICAgICogd2l0aCBvbmUgYXJndW1lbnQgb2YgdHlwZSBqYWthcnRhLmVqYi5NZXNzYWdlRHJpdmVuQ29udGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBtZGMgICAgdGhlIGNvbnRleHQgdG8gc2V0CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjKSB7Ci0JdGhpcy5tZGMgPSBtZGM7CisgICAgdGhpcy5tZGMgPSBtZGM7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogZWpiQ3JlYXRlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgeyB9CiAKICAgICAvKioKLSAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCisgICAgICogb25NZXNzYWdlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCiAgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG9uZSBhcmd1bWVudAogICAgICAqIG9mIHR5cGUgamFrYXJ0YS5qbXMuTWVzc2FnZS4KICAgICAgKgotICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzIAorICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzCiAgICAgICogdGhlIHRleHQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gaW5NZXNzYWdlICAgIHRoZSBpbmNvbWluZyBtZXNzYWdlCkBAIC03NSw3ICs3NSw3IEBACiAgICAgICAgIC8vbG9nKCJvbk1lc3NhZ2U6OiBnZXRDYWxsZXJQcmluY2lwYWwgOiAiICsgbWRjLmdldENhbGxlclByaW5jaXBhbCgpKTsKICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIm9uTWVzc2FnZSA6IFRocmVhZElEIDogIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpKTsKICAgICAgICAgaWYobWRjLmdldENhbGxlclByaW5jaXBhbCgpICE9IG51bGwpewotICAgICAgICAJbG9nKCJvbk1lc3NhZ2U6OiBnZXRDYWxsZXJQcmluY2lwYWwgTmFtZSA6ICIgKyBtZGMuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkuZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgIGxvZygib25NZXNzYWdlOjogZ2V0Q2FsbGVyUHJpbmNpcGFsIE5hbWUgOiAiICsgbWRjLmdldENhbGxlclByaW5jaXBhbCgpLmdldE5hbWUoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBsb2coIm9uTWVzc2FnZSA6IGlzQ2FsbGVySW5Sb2xlKCdqYWdhZGlzaCcpIDogIiArIG1kYy5pc0NhbGxlckluUm9sZSgiamFnYWRpc2giKSk7CkBAIC04NCw3ICs4NCw3IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmIChpbk1lc3NhZ2UuZW5kc1dpdGgoIldSSVRFIikpIHsKLSAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwgCisgICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJXUklURSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbk1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGluTWVzc2FnZS5sYXN0SW5kZXhPZigiOiIpKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiREVMRVRFIikpIHsKICAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIkRFTEVURSIsCkBAIC05OCwxMCArOTgsMTAgQEAKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogZWpiUmVtb3ZlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJSZW1vdmUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KQEAgLTExMSw2MiArMTExLDYyIEBACiAKICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBTdHJpbmcgaWQgICAgPSBtZXNzYWdlLnN1YnN0cmluZygwLCBtZXNzYWdlLmluZGV4T2YoIjoiKSk7Ci0gICAgICAgIFN0cmluZyBib2R5ICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKG1lc3NhZ2UuaW5kZXhPZigiOiIpKzEpOyAKKyAgICAgICAgU3RyaW5nIGJvZHkgID0gbWVzc2FnZS5zdWJzdHJpbmcobWVzc2FnZS5pbmRleE9mKCI6IikrMSk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKCJSRUFEIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiUmVhZGluZyByb3cgZnJvbSBkYXRhYmFzZS4uLiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAKICAgICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPSAKKyAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9CiAgICAgICAgICAgICAgICAgICAiU0VMRUNUIGlkIGZyb20gbWVzc2FnZXMgd2hlcmUgaWQgPSAnUVEnIjsKICAgICAgICAgICAgICAgICAgIFJlc3VsdFNldCByZXN1bHRzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKyAKKyAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArCiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmdldEludCgiYmFsYW5jZSIpICsgIiBkb2xsYXJzIik7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICBzdG10LmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWFkIG9uZSBhY2NvdW50XG4iKTsKIAogICAgICAgICAgICAgfSBlbHNlIGlmICgiV1JJVEUiLmVxdWFscyhvcCkpIHsKIAogICAgICAgICAgICAgICAgIGRlYnVnKCJJbnNlcnRpbmcgb25lIG1lc3NhZ2UgaW4gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBjcmVhdGVSb3coaWQsIGJvZHksIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIG9uZSBtZXNzYWdlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfSBlbHNlIGlmICgiREVMRVRFIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgb25lIG1lc3NhZ2UgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWxldGVSb3coaWQsIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWxldGVkIG9uZSBtZXNzYWdlXG4iKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIkRFTEVURV9BTEwiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBhbGwgbWVzc2FnZXMgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKQEAgLTE3Nyw3ICsxNzcsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvL3Vuc3VwcG9ydGVkIG9wCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9ZmluYWxseXsKICAgICAgICAgICAgIHRyeXsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24uY2xvc2UoKTsKQEAgLTE4Niw5ICsxODYsOSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBjcmVhdGVSb3coU3RyaW5nIGlkLCBTdHJpbmcgYm9keSwgCi0gICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisKKyAgICBwcml2YXRlIHZvaWQgY3JlYXRlUm93KFN0cmluZyBpZCwgU3RyaW5nIGJvZHksCisgICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgLy8gQ3JlYXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCkBAIC0yMDQsOSArMjA0LDkgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVSb3coU3RyaW5nIGlkLCBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvdyhTdHJpbmcgaWQsIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIGRlYnVnKCJEZWxldGVSb3cgd2l0aCBJRCA9ICIgKyBpZCk7CiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwpAQCAtMjE5LDkgKzIxOSw5IEBACiAgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICBTdHJpbmcgcXVlcnkgPSAiREVMRVRFIEZST00gbWVzc2FnZXMiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9zcmMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKaW5kZXggYWM4OWUzNi4uNjM4NzhjNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvc3JjL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCkBAIC00NSwxNyArNDUsMTcgQEAKIAogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgSU9FeGNlcHRpb257CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhpcyBpcyB0byB0ZXN0IGNvbm5lY3RvciAxLjYgIisKLQkgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKKyAgICAgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKIAogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogCiAgICAgICAgIFN0cmluZyByZXMgPSAiTk9UIFJVTiI7Ci0JZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CisgICAgZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CiAgICAgICAgIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmVzICA9ICJBTEwgVEVTVFMgUEFTU0VEIjsKLQkgICAgaW50IHRlc3RDb3VudCA9IDE7CisgICAgICAgIGludCB0ZXN0Q291bnQgPSAxOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIlN0YXJ0aW5nIHRoZSB0ZXN0Iik7CiAgICAgICAgICAgICBvdXQuZmx1c2goKTsKIApAQCAtOTQsMTggKzk0LDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSAiU09NRSBURVNUUyBGQUlMRUQiOwogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJRCBDb25uZWN0b3IgMS42IHRlc3QgLSAiICsgdGVzdENvdW50ICsgIiBGQUlMIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpGQUlMIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJRCBDb25uZWN0b3IgMS42IHRlc3QgLSAiICsgdGVzdENvdW50ICsgIiBQQVNTIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7Ci0JCSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJFTkRfT0ZfRVhFQ1VUSU9OIik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG91dC5wcmludGxuKCJFTkRfT0ZfRVhFQ1VUSU9OIik7Ci0gICAgICAgICAgICAKKwogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbXBvcnRpbmcgdHJhbnNhY3Rpb24gdGVzdCBmYWlsZWQuIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYnVpbGQucHJvcGVydGllcwppbmRleCAyMDdhNDg2Li4wODNiMjYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL2Nvbm5lY3RvcjE2L3NlcnZsZXQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJodHRwOmhvc3QiIHZhbHVlPSJsb2NhbGhvc3QiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKaW5kZXggYTkzNDlmYy4uMGZjYWJkZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKQEAgLTQ4LDQgKzQ4LDQgQEAKICAgICAgIDxwcmluY2lwYWwtbWFwIGVpcy1wcmluY2lwYWw9ImVpcy1wcmFzYXRoIiBtYXBwZWQtcHJpbmNpcGFsPSJwcmFzYXRoIiAvPgogICAgICAgPHByaW5jaXBhbC1tYXAgZWlzLXByaW5jaXBhbD0iZWlzLWphZ2FkaXNoIiBtYXBwZWQtcHJpbmNpcGFsPSJqYWdhZGlzaCIgLz4KICAgICA8L3dvcmstc2VjdXJpdHktbWFwPgotPC9yZXNvdXJjZXM+IAorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9NRVRBLUlORi9yYS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9NRVRBLUlORi9yYS54bWwKaW5kZXggOTc4MWUxNi4uM2NjZjI5NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvTUVUQS1JTkYvcmEueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL01FVEEtSU5GL3JhLnhtbApAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHktY29uZmlkZW50aWFsPgogICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPGluYm91bmQtcmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4KICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyPgogICAgICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyLXR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWMtY2xhc3M+CiAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWM+CiAgICAgICAgICAgICAgICAgPC9tZXNzYWdlbGlzdGVuZXI+Ci0gICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgIDwvaW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+CiAgICAgICAgIDxhZG1pbm9iamVjdD4KICAgICAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2J1aWxkLnhtbAppbmRleCBlZDI5ODg5Li44NTI4ODE4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9idWlsZC54bWwKQEAgLTMwLDggKzMwLDggQEAKIAogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iID4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgotCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CisgICAgPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KKyAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgogICAgIDwvYW50Y2FsbD4KICAgICA8amFyIGphcmZpbGU9Ii4uL2dlbmVyaWMtcmEuamFyIiBiYXNlZGlyPSJjbGFzc2VzIgogICAgICAgICAgaW5jbHVkZXM9ImNvbm5lY3Rvci8qLmNsYXNzIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCmluZGV4IDU1NTMzZDQuLmY1OWIyYjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBDb250cm9scyB7CiAgICAgcHVibGljIHN0YXRpYyBPYmplY3QgcmVhZHlMb2NrID0gbmV3IE9iamVjdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKaW5kZXggNjU4MjMzZS4uZDczYzg2MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgRGVsaXZlcnlXb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTM2LDcgKzM2LDcgQEAKICAgICBwcml2YXRlIFN0cmluZyBvcDsKICAgICBwcml2YXRlIGJvb2xlYW4ga2VlcENvdW50OwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudGVyID0gMDsKLSAgICAKKwogICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgU3RyaW5nIG9wKSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICB0aGlzLmtlZXBDb3VudCA9IGZhbHNlOwogICAgIH0KIAotICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgCisgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLAogICAgICAgICAgICAgU3RyaW5nIG9wLCBib29sZWFuIGtlZXBDb3VudCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAKICAgICAgICAgZGVidWcoIkVOVEVSLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL01ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKICAgICAgICAgICAgIC8vZXAuYmVmb3JlRGVsaXZlcnkob25NZXNzYWdlKTsKQEAgLTc4LDExICs3OCwxMSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvL2VwLmFmdGVyRGVsaXZlcnkoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC05MywxNCArOTMsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQppbmRleCAxMDBjYWNlLi5mYTkzZjYzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwogICAgIH0KIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5mb3JnZXQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICB9CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5wcmVwYXJlOiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgICAgIHJldHVybiBYQVJlc291cmNlLlhBX09LOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBYaWRbXSByZWNvdmVyKGludCBmbGFnKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucmVjb3ZlcjogIiArIGZsYWdUb1N0cmluZyhmbGFnKSk7CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtNjYsNyArNjYsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnN0YXJ0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSArICIsIiArCiAgICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL0pTUjMyMldvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9jb25uZWN0b3IvSlNSMzIyV29yay5qYXZhCmluZGV4IDUxMDdhYzEuLjAyMDNmNGEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9jb25uZWN0b3IvSlNSMzIyV29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9jb25uZWN0b3IvSlNSMzIyV29yay5qYXZhCkBAIC00OCw2ICs0OCw2IEBACiAKICAgICBwdWJsaWMgdm9pZCBydW4oKXsKICAgICAgICAgc3VwZXIucnVuKCk7Ci0gICAgICAgIAorCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQppbmRleCBhNjhhNWI3Li45YzI4ODEyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQpAQCAtNTEsMTEgKzUxLDExIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKICAgICAgICAgaWYgKHJlc2V0Q29udHJvbC5lcXVhbHMoIkJFR0lOTklORyIpKSB7CiAgICAgICAgICAgIENvbnRyb2xzLmRvbmU9ZmFsc2U7Ci0JICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7Ci0JfQorICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBkb25lKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeVNlY3VyaXR5Q29udGV4dC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeVNlY3VyaXR5Q29udGV4dC5qYXZhCmluZGV4IDMxNzhjMWMuLmUxOTA1MWUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9jb25uZWN0b3IvTXlTZWN1cml0eUNvbnRleHQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL015U2VjdXJpdHlDb250ZXh0LmphdmEKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgQ2FsbGVyUHJpbmNpcGFsQ2FsbGJhY2sgY3BjID0gbmV3IENhbGxlclByaW5jaXBhbENhbGxiYWNrKGV4ZWNTdWJqZWN0LCBuZXcgUHJpbmNpcGFsSW1wbChwcmluY2lwYWxOYW1lKSk7CiAgICAgICAgIGRlYnVnKCJzZXR0aW5nIGNhbGxlciBwcmluY2lwYWwgY2FsbGJhY2sgd2l0aCBwcmluY2lwYWwgOiAiICsgcHJpbmNpcGFsTmFtZSk7CiAgICAgICAgIGNhbGxiYWNrcy5hZGQoY3BjKTsKLSAgICAgICAgCisKIC8qCiAgICAgICAgIEdyb3VwUHJpbmNpcGFsQ2FsbGJhY2sgZ3BjID0gbmV3IEdyb3VwUHJpbmNpcGFsQ2FsbGJhY2soZXhlY1N1YmplY3QsIG51bGwpOwogICAgICAgICBjYWxsYmFja3MuYWRkKGdwYyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKaW5kZXggODE4MmVmNS4uM2ZjZTU0NCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQpAQCAtMjQsOSArMjQsOSBAQAogICogc28gdGhhdCB0aGUgYXBwIHNlcnZlciBjYW4gaW5zdGFudGlhdGUgYW5kIGNvbmZpZ3VyZQogICogaXQgYXQgdGhlIHJ1bnRpbWUuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYyAKK3B1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYwogICAgIGltcGxlbWVudHMgQWN0aXZhdGlvblNwZWMsIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByaXZhdGUgU3RyaW5nIGRlc3RpbmF0aW9uTmFtZTsKQEAgLTQzLDcgKzQzLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uTmFtZSAoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uTmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvbk5hbWUgKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvbk5hbWUoKSBjYWxsZWQuLi4gbmFtZSA9ICIgKyBuYW1lKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbk5hbWUgPSBuYW1lOwpAQCAtNTIsNyArNTIsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25UeXBlKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvblR5cGU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25UeXBlIChTdHJpbmcgdHlwZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25UeXBlICgpIGNhbGxlZC4uLiB0eXBlID0gIiArIHR5cGUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uVHlwZT0gdHlwZTsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3RQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0UHJvcDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0UHJvcCAoU3RyaW5nIHRlc3RQcm9wKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0UHJvcCAoKSBjYWxsZWQuLi4gdGVzdFByb3AgPSAiICsgdGVzdFByb3ApOwogICAgICAgICB0aGlzLnRlc3RQcm9wID0gdGVzdFByb3A7CkBAIC03MCw3ICs3MCw3IEBACiAgICAgcHVibGljIEludGVnZXIgZ2V0VGVzdEludGVnZXJQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0SW50ZWdlclByb3A7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdEludGVnZXJQcm9wIChJbnRlZ2VyIHRlc3RQcm9wMSkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdEludGVnZXJQcm9wICgpIGNhbGxlZC4uLiB0ZXN0SW50ZWdlclByb3AgPSAiICsgdGVzdFByb3AxKTsKICAgICAgICAgdGhpcy50ZXN0SW50ZWdlclByb3AgPSB0ZXN0UHJvcDE7CkBAIC05NCw3ICs5NCw3IEBACiAKICAgICAgIH0KIAotICAgfSAKKyAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkZWJ1ZyAoU3RyaW5nIG1lc3NhZ2UpCiAgICAgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCmluZGV4IGRkZmYwMDUuLjRlOTIxYTIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKQEAgLTg2LDcgKzg2LDcgQEAKIAogICAgICAgICAgICAgICAgIGlmICghZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOyAKKyAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOwogICAgICAgICAgICAgICAgICAgICAvL3dtLmRvV29yayhkLCAwLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQppbmRleCAxOGE5NzBkLi5iMmE5MDZjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKQEAgLTM1LDggKzM1LDggQEAKICAgICBwdWJsaWMgaW50IGJyYW5jaFF1YWxpZmllcjsKICAgICBwdWJsaWMgaW50IGdsb2JhbFR4SUQ7CiAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsgCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7IAorICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OworICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OwogCiAgICAgcHVibGljIFhJRCgpIHsKICAgICAgICAgaW50IGZvbyA9IElEKys7CkBAIC01NCwxMCArNTQsMTAgQEAKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgIC8vIEl0IGNhbid0IGJlIGVxdWFsCiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgb3RoZXIgPSAoWElEKW87ICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvdGhlciBYSUQsIG5vdyBwcm9wZXJseSBjYXN0Ci0gICAgICAgIAotICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRCAKKworICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRAogICAgICAgICAgICAgICAgICYmIHRoaXMuYnJhbmNoUXVhbGlmaWVyID09IG90aGVyLmJyYW5jaFF1YWxpZmllcgogICAgICAgICAgICAgICAgICYmIHRoaXMuZ2xvYmFsVHhJRCA9PSBvdGhlci5nbG9iYWxUeElEKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk3LDcgKzk3LDcgQEAKICAgICAgICAgICAgICAgICAiZm9ybWF0SUQoIiAgICAgKyBmb3JtYXRJRCAgICAgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImJyYW5jaFF1YWxpZmllciAoIiArIGJyYW5jaFF1YWxpZmllciArICIpLCAiICsKICAgICAgICAgICAgICAgICAiZ2xvYmFsVHhJRCgiICsgZ2xvYmFsVHhJRCArICIpfSIpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gczsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGUyY2M3NWQuLmRjMTljOWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTYgKzE1LDE2IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXN1YmNsYXNzaW5nIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zdWJjbGFzc2luZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0ic3ViY2xhc3NpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2J1aWxkLnhtbAppbmRleCA4MGQwN2M0Li43NWVhYTViIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvYnVpbGQueG1sCkBAIC0zMSw3ICszMSw3IEBACiAgICAgJmNvbW1vbkJ1aWxkOwogICAgICZjb21tb25SdW47CiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwotICAgIAorCiA8IS0tCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLHNldHVwLGRlcGxveS13YXIsIHJ1bi13YXIsIHVuZGVwbG95LXdhciwgZGVwbG95LWVhciwgcnVuLWVhciwgdW5kZXBsb3ktZWFyLCB1bnNldHVwIi8+CiAKQEAgLTQwLDE1ICs0MCwxNSBAQAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCwgZGlzYWJsZS1yZXNvdXJjZS12YWxpZGF0aW9uLCBkZXBsb3ktZWFyLCBzZXR1cCwgcnVuLWVhciwgdW5zZXR1cCwgdW5kZXBsb3ktZWFyLCBlbmFibGUtcmVzb3VyY2UtdmFsaWRhdGlvbiIvPgogCiA8IS0tCi0JPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgotCTxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1bi13YXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhciIvPgotCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWVhciIvPgotCTxhbnRjYWxsIHRhcmdldD0icnVuLWVhciIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktZWFyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi13YXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWVhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWVhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktZWFyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CiAgICAgPC90YXJnZXQ+CiAtLT4KIApAQCAtNTYsNyArNTYsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICAgIDxhbnQgZGlyPSJyYSIgdGFyZ2V0PSJjbGVhbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29ubmVjdG9yIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL3NpbXBsZUJhbmsuc3FsIi8+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtcG9vbCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXJlc291cmNlIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtYWRtaW4tb2JqZWN0Ii8+Ci0gICAgICAgIAorCiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcG9vbCI+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY29ubmVjdG9yLWNvbm5wb29sLWNvbW1vbiI+CkBAIC04NCwzNyArODQsMzcgQEAKICAgICAgICAgICAgICAgICA8L2FudGNhbGw+CiAgICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJkaXNhYmxlLXJlc291cmNlLXZhbGlkYXRpb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qdm0tb3B0aW9ucyI+Ci0JCQk8cGFyYW0gbmFtZT0ib3B0aW9uIiB2YWx1ZT0iLURkZXBsb3ltZW50LnJlc291cmNlLnZhbGlkYXRpb249ZmFsc2UiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyIi8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJkaXNhYmxlLXJlc291cmNlLXZhbGlkYXRpb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qdm0tb3B0aW9ucyI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3B0aW9uIiB2YWx1ZT0iLURkZXBsb3ltZW50LnJlc291cmNlLnZhbGlkYXRpb249ZmFsc2UiLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyIi8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImVuYWJsZS1yZXNvdXJjZS12YWxpZGF0aW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtanZtLW9wdGlvbnMiPgotCQkJPHBhcmFtIG5hbWU9Im9wdGlvbiIgdmFsdWU9Ii1EZGVwbG95bWVudC5yZXNvdXJjZS52YWxpZGF0aW9uPWZhbHNlIi8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlciIvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iZW5hYmxlLXJlc291cmNlLXZhbGlkYXRpb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qdm0tb3B0aW9ucyI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3B0aW9uIiB2YWx1ZT0iLURkZXBsb3ltZW50LnJlc291cmNlLnZhbGlkYXRpb249ZmFsc2UiLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyIi8+CisgICAgPC90YXJnZXQ+CiAKIAogICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1hZG1pbi1vYmplY3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDwhLS08cHJvcGVydHkgZmlsZT0iLi4vY29uZmlnL29yYWNsZS5wcm9wZXJ0aWVzIi8+LS0+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iY3JlYXRlLWFkbWluLW9iamVjdCAtLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSAtLXJlc3R5cGUgY29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluIC0tcmFuYW1lICR7YXBwbmFtZX1BcHAjamRiY3JhIC0tcHJvcGVydHkgVGFibGVOYW1lPWN1c3RvbWVyMjpKbmRpTmFtZT1qZGJjL2VqYi1zdWJjbGFzc2luZzpTY2hlbWFOYW1lPURCVVNFUjpOb09mUm93cz0xIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iZWlzL2pkYmNBZG1pbiIvPgorICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9ImVpcy9qZGJjQWRtaW4iLz4KICAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgPC90YXJnZXQ+CiAKICAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtYWRtaW4tb2JqZWN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtYWRtaW4tb2JqZWN0Ii8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gZWlzL2pkYmNBZG1pbiIvPgotCSA8L2FudGNhbGw+Ci08IS0tCSA8YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPi0tPgorICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImRlbGV0ZS1hZG1pbi1vYmplY3QiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSBlaXMvamRiY0FkbWluIi8+CisgICAgIDwvYW50Y2FsbD4KKzwhLS0gICAgIDxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+LS0+CiAgICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0YXJ0Ij4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTIyLDE2ICsxMjIsMTYgQEAKICAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcmEtY29uZmlnIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iY3JlYXRlLXJlc291cmNlLWFkYXB0ZXItY29uZmlnICAtLXByb3BlcnR5IFJBUHJvcGVydHk9VkFMSUQiLz4KLQkgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke2FwcG5hbWV9QXBwI2pkYmNyYSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7YXBwbmFtZX1BcHAjamRiY3JhIi8+CiAgICAgICAgICA8L2FudGNhbGw+CiAgICAgIDwvdGFyZ2V0PgogCiAgICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJhLWNvbmZpZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iZGVsZXRlLXJlc291cmNlLWFkYXB0ZXItY29uZmlnIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCNqZGJjcmEiLz4KLQkgPC9hbnRjYWxsPgotPCEtLQkgPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4tLT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtcmVzb3VyY2UtYWRhcHRlci1jb25maWciLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke2FwcG5hbWV9QXBwI2pkYmNyYSIvPgorICAgICA8L2FudGNhbGw+Cis8IS0tICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPi0tPgogICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCI+CkBAIC0xNDMsNyArMTQzLDcgQEAKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1wb29sIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtYWRtaW4tb2JqZWN0Ii8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1wb29sIj4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1jb25uZWN0b3ItY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmNvbnBvb2wubmFtZSIgdmFsdWU9ImVtYmVkZGVkLXJhLXBvb2wiLz4KQEAgLTE1Myw3ICsxNTMsNyBAQAogICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtY29ubmVjdG9yLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5qbmRpLm5hbWUiIHZhbHVlPSJqZGJjL2VqYi1zdWJjbGFzc2luZyIvPgotCQk8L2FudGNhbGw+CisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgpAQCAtMTY5LDkgKzE2OSw5IEBACiAgICAgICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBDb21waWxpbmcgdGVzdCBzb3VyY2UgZmlsZXMiIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgICA8amF2YWMgc3JjZGlyPSJzZXJ2bGV0IgogICAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCi0JIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9OnJhL3B1Ymxpc2gvaW50ZXJuYWwvY2xhc3NlcyIKKyAgICAgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH06cmEvcHVibGlzaC9pbnRlcm5hbC9jbGFzc2VzIgogICAgICAgICAgZGVidWc9Im9uIgotCSBmYWlsb25lcnJvcj0idHJ1ZSIvPgorICAgICBmYWlsb25lcnJvcj0idHJ1ZSIvPgogICAgICA8L3RhcmdldD4KIAogCkBAIC0xODAsMzQgKzE4MCwzNCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgPGFudCBkaXI9InJhIiB0YXJnZXQ9ImFzc2VtYmxlIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgPC9hbnRjYWxsPgotICAgICAgIAorCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+CiAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgIDwvYW50Y2FsbD4KIAotICAgIAorCiAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgICAKLSAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgCisgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIKICAgICAgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgogICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgotICAgIDwvZmlsZXNldD4gIAorICAgIDwvZmlsZXNldD4KICAgICA8ZmlsZXNldCBkaXI9InJhL3B1Ymxpc2gvbGliIj4KICAgICAgIDxpbmNsdWRlIG5hbWU9IioucmFyIi8+CiAgICAgPC9maWxlc2V0PgogICAgIDwvZWFyPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktZWFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXJhLWNvbmZpZyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KQEAgLTIxNiwyNyArMjE2LDI3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktd2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLXdhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJub24tc3RyaW5nLW1jZi1wcm9wZXJ0aWVzIChzdGFuZC1hbG9uZSB3YXIgYmFzZWQpIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJub24tc3RyaW5nLW1jZi1wcm9wZXJ0aWVzIChzdGFuZC1hbG9uZSB3YXIgYmFzZWQpIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4tZWFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViY2xpZW50LWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9Im5vbi1zdHJpbmctbWNmLXByb3BlcnRpZXMgKGVhciBiYXNlZCkiLz4KLQk8L2FudGNhbGw+CisgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9Im5vbi1zdHJpbmctbWNmLXByb3BlcnRpZXMgKGVhciBiYXNlZCkiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1yYS1jb25maWciLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS13YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggMWQxMjAwZC4uZGY0YmI5MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI5LDIwICsyOSwyMCBAQAogICAgICAgICA8cmVzLXJlZi1uYW1lPmpkYmMvU2ltcGxlQmFuazwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmpkYmMvZWpiLXN1YmNsYXNzaW5nPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+IAotICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4gCi0gICAgIDxiZWFuLXBvb2w+IAotICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4gCi0gICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgIDwvYmVhbi1wb29sPiAKLSAgICAgIDxiZWFuLWNhY2hlPiAKLSAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4gCi0gICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4gCi0gICAgICA8L2JlYW4tY2FjaGU+IAorICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4KKyAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+CisgICAgIDxiZWFuLXBvb2w+CisgICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPgorICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+CisgICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICA8L2JlYW4tcG9vbD4KKyAgICAgIDxiZWFuLWNhY2hlPgorICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPgorICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgorICAgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogICAgIDxlamI+CiAgICAgICA8ZWpiLW5hbWU+Q3VzdG9tZXJDaGVja2luZ0VKQjwvZWpiLW5hbWU+CkBAIC01MSwyMCArNTEsMjAgQEAKICAgICAgICAgPHJlcy1yZWYtbmFtZT5qZGJjL1NpbXBsZUJhbms8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qZGJjL2VqYi1zdWJjbGFzc2luZzwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPiAKLSAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+IAotICAgICA8YmVhbi1wb29sPiAKLSAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+IAotICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+IAotICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+IAorICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4KKyAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+CisgICAgIDxiZWFuLXBvb2w+CisgICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPgorICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+CisgICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4KICAgICAgICAgPHBvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KLSAgICAgIDwvYmVhbi1wb29sPiAKLSAgICAgIDxiZWFuLWNhY2hlPiAKKyAgICAgIDwvYmVhbi1wb29sPgorICAgICAgPGJlYW4tY2FjaGU+CiAgICAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+CiAgICAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KICAgICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkxSVTwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+Ci0gICAgICA8L2JlYW4tY2FjaGU+IAorICAgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogICA8L2VudGVycHJpc2UtYmVhbnM+CiA8L3N1bi1lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXIuamF2YQppbmRleCAwODEwN2E1Li4wYjJiNDlhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXIuamF2YQpAQCAtNDcsNCArNDcsNCBAQAogCiB9CiAKLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhCmluZGV4IDYxZGUyOTEuLmIzNDFjMzQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YQpAQCAtMjAsNCArMjAsNCBAQAogewogfQogCi0gIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQppbmRleCA5MDkzYjdlLi5iNjkwMDk5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEKQEAgLTkyLDUgKzkyLDUgQEAKICAgfQogCiB9Ci0gICAgCi0gICAgCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJFSkIuamF2YQppbmRleCAwNTIwYjYwLi4wNzIyMGRiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJFSkIuamF2YQpAQCAtNTMsNyArNTMsNyBAQAogCiAgIHB1YmxpYyBTdHJpbmcgZ2V0QWRkcmVzczEoKQogICB7Ci0gICAgcmV0dXJuIGFkZHJlc3MxOyAKKyAgICByZXR1cm4gYWRkcmVzczE7CiAgIH0KIAogICBwdWJsaWMgU3RyaW5nIGdldEFkZHJlc3MyKCkKQEAgLTEzOSw3ICsxMzksNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNRTCBleGNlcHRpb24gb2NjdXJlZCBpbiBlamJSZW1vdmUgbWV0aG9kIik7CiAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICB9Ci0gICAgCisKICAgfQogCiAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkKQEAgLTIwNiwxMiArMjA2LDEyIEBACiAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1FMRXhjZXB0aW9uIG9jY3VycmVkIGluIGVqYkxvYWQoKSBtZXRob2QiKTsKICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfSAgIAorICAgIH0KICAgfQogCiAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIH0KLSAgICAgIAotICAgIAotICAgIAorCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhCmluZGV4IDMzOGM5MjEuLjg4M2UwNGEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEKQEAgLTIwLDQgKzIwLDQgQEAKIHsKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhCmluZGV4IGYzMGI1MDYuLmIwY2U3YjUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEKQEAgLTk1LDYgKzk1LDYgQEAKICAgfQogCiB9Ci0gICAgICAKLSAgICAKLSAgICAKKworCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGVlMmVjYTAuLmZkMjFjM2QgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvYnVpbGQucHJvcGVydGllcwpAQCAtMTQsNyArMTQsNyBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKICMKIAotICAgIAorCiAjIyMgQ29tcG9uZW50IFByb3BlcnRpZXMgIyMjCiBzcmMuZGlyPXNyYwogY29tcG9uZW50LnB1Ymxpc2guaG9tZT0uCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9idWlsZC54bWwKaW5kZXggNzQ0ODRmZS4uMmI2NzQ0NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL2J1aWxkLnhtbApAQCAtMjMsNjIgKzIzLDYyIEBACiAKIDxwcm9qZWN0IG5hbWU9IkpEQkNDb25uZWN0b3IgdG9wIGxldmVsIiBkZWZhdWx0PSJidWlsZCI+CiAgICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2pkYmNyYS9zcGkiLz4KLSAgICAKKwogICAgICZjb21tb247CiAgICAgJnRlc3Rjb21tb247CiAgICAgPHByb3BlcnR5IGZpbGU9Ii4vYnVpbGQucHJvcGVydGllcyIvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSxhc3NlbWJsZSIgLz4KLSAgICAgICAgICAKKwogCiAgICAgPCEtLSBpbml0LiBJbml0aWFsaXphdGlvbiBpbnZvbHZlcyBjcmVhdGluZyBwdWJsaXNoaW5nIGRpcmVjdG9yaWVzIGFuZAotICAgICAgICAgT1Mgc3BlY2lmaWMgdGFyZ2V0cy4gLS0+IAorICAgICAgICAgT1Mgc3BlY2lmaWMgdGFyZ2V0cy4gLS0+CiAgICAgPHRhcmdldCBuYW1lPSJpbml0IiBkZXNjcmlwdGlvbj0iJHtjb21wb25lbnQubmFtZX0gaW5pdGlhbGl6YXRpb24iPgogICAgICAgICA8dHN0YW1wPgogICAgICAgICAgICAgPGZvcm1hdCBwcm9wZXJ0eT0ic3RhcnQudGltZSIgcGF0dGVybj0iTU0vZGQveXl5eSBoaDptbSBhYSIvPgotICAgICAgICA8L3RzdGFtcD4gICAgCisgICAgICAgIDwvdHN0YW1wPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJCdWlsZGluZyBjb21wb25lbnQgJHtjb21wb25lbnQubmFtZX0iLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIvPiAgICAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgPCEtLSBjb21waWxlIC0tPiAKKyAgICA8IS0tIGNvbXBpbGUgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0IgotICAgICAgICAgICAgZGVzY3JpcHRpb249IkNvbXBpbGUgY29tL3N1bi8qIGNvbS9pcGxhbmV0Lyogc291cmNlcyI+ICAKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDb21waWxlIGNvbS9zdW4vKiBjb20vaXBsYW5ldC8qIHNvdXJjZXMiPgogICAgICAgICA8IS0tPGVjaG8gbWVzc2FnZT0iQ29ubmVjdG9yIGFwaSByZXNpZGVzIGluICR7Y29ubmVjdG9yLWFwaS5qYXJ9Ii8+LS0+Ci0gICAgICAgIDxqYXZhYyBzcmNkaXI9IiR7c3JjLmRpcn0iIAorICAgICAgICA8amF2YWMgc3JjZGlyPSIke3NyYy5kaXJ9IgogICAgICAgICAgICAgICAgZGVzdGRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IgotCSAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+Ci0JICAgICAgIDxjbGFzc3BhdGg+Ci0JICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzIj4KLQkgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouamFyIiAvPgotCSAgICAgICAgICA8L2ZpbGVzZXQ+Ci0JICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+CisgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzIj4KKyAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouamFyIiAvPgorICAgICAgICAgICAgICA8L2ZpbGVzZXQ+CisgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iY29tL3N1bi9qZGJjcmEvKioiLz4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImNvbS9zdW4vYXBwc2Vydi8qKiIvPgogICAgICAgICA8L2phdmFjPgogICAgIDwvdGFyZ2V0PgotICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCIvPgogCi0gICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIj4gICAgCi0gICAgCQotCTxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmMuamFyIiAKLSAgICAgICAgICAgIGJhc2VkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiwgCi0gICAgICAgICAgICBjb20vc3VuL2FwcHNlcnYvKiovKiwgY29tL3N1bi9qZGJjcmEvdXRpbC8qKi8qLCBjb20vc3VuL2pkYmNyYS9jb21tb24vKiovKiIvPiAKLSAgIAkKLSAgICAgICAgPGNvcHkgZmlsZT0iJHtzcmMuZGlyfS9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbCIgCi0gICAgICAgICAgICAgICAgdG9maWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSI+CisKKyAgICA8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjLmphciIKKyAgICAgICAgICAgIGJhc2VkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiwKKyAgICAgICAgICAgIGNvbS9zdW4vYXBwc2Vydi8qKi8qLCBjb20vc3VuL2pkYmNyYS91dGlsLyoqLyosIGNvbS9zdW4vamRiY3JhL2NvbW1vbi8qKi8qIi8+CisKKyAgICAgICAgPGNvcHkgZmlsZT0iJHtzcmMuZGlyfS9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbCIKKyAgICAgICAgICAgICAgICB0b2ZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmNyYS5yYXIiIAotCQliYXNlZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iIGluY2x1ZGVzPSJqZGJjLmphciI+CisgICAgICAgPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiY3JhLnJhciIKKyAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9IiBpbmNsdWRlcz0iamRiYy5qYXIiPgogCi0gICAJCTxtZXRhaW5mIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CiAKLSAgIAk8ZGVsZXRlIGZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiLz4KLQkKKyAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiLz4KKwogICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlc2NyaXB0aW9uPSJDbGVhbiB0aGUgYnVpbGQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCmluZGV4IDlmODM5OWEuLmI2ZWYzMGIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKQEAgLTIwLDE1ICsyMCwxNSBAQAogaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKIAogLyoqCi0gKiBUaGUgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+IGltcGxlbWVudGF0aW9uIG9mIFN1bk9ORSBhcHBsaWNhdGlvbiAKKyAqIFRoZSA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uCiAgKiBzZXJ2ZXIgd2lsbCBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UuIEFuIGFwcGxpY2F0aW9uIHByb2dyYW0gd291bGQgYmUgYWJsZQotICogdG8gdXNlIHRoaXMgaW50ZXJmYWNlIHRvIGRvIHRoZSBleHRlbmRlZCBmdW5jdGlvbmFsaXR5IGV4cG9zZWQgYnkgU3VuT05FIAorICogdG8gdXNlIHRoaXMgaW50ZXJmYWNlIHRvIGRvIHRoZSBleHRlbmRlZCBmdW5jdGlvbmFsaXR5IGV4cG9zZWQgYnkgU3VuT05FCiAgKiBhcHBsaWNhdGlvbiBzZXJ2ZXIuCi0gKiA8cD5BIHNhbXBsZSBjb2RlIGZvciBnZXR0aW5nIGRyaXZlcidzIGNvbm5lY3Rpb24gaW1wbGVtZW50YXRpb24gd291bGQgbGlrZSAKKyAqIDxwPkEgc2FtcGxlIGNvZGUgZm9yIGdldHRpbmcgZHJpdmVyJ3MgY29ubmVjdGlvbiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBsaWtlCiAgKiB0aGUgZm9sbG93aW5nLgogICogPHByZT4KICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgY29tLnN1bi5hcHBzZXJ2LkRhdGFTb3VyY2UgZHMgPSAoY29tLnN1bi5hcHBzZXJ2LkRhdGFTT3VyY2UpIGljLmxvb2t1cCgiamRiYy9Qb2ludEJhc2UiKTsgCisgICAgIGNvbS5zdW4uYXBwc2Vydi5EYXRhU291cmNlIGRzID0gKGNvbS5zdW4uYXBwc2Vydi5EYXRhU091cmNlKSBpYy5sb29rdXAoImpkYmMvUG9pbnRCYXNlIik7CiAgICAgIENvbm5lY3Rpb24gY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICBDb25uZWN0aW9uIGRyaXZlcmNvbiA9IGRzLmdldENvbm5lY3Rpb24oY29uKTsKIApAQCAtMzYsMTMgKzM2LDEzIEBACiAKICAgICAgY29uLmNsb3NlKCk7CiAgICA8L3ByZT4KLSAqIAorICoKICAqIEBhdXRob3IgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgRGF0YVNvdXJjZSBleHRlbmRzIGphdmF4LnNxbC5EYXRhU291cmNlIHsKIAogICAgIC8qKgotICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyIAorICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyCiAgICAgICogaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uIHNlcnZlci4gSWYgYW4gYWN0dWFsIGNvbm5lY3Rpb24gaXMKICAgICAgKiBzdXBwbGllZCBhcyBhcmd1bWVudCwgdGhlbiBpdCB3aWxsIGJlIGp1c3QgcmV0dXJuZWQuCiAgICAgICoKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQppbmRleCBjMjgyMmUyLi42YTM2NmIwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCkBAIC0yNywyMiArMjcsMjIgQEAKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CiAvKioKLSAqIFV0aWxpdHkgY2xhc3MsIHdoaWNoIHdvdWxkIGNyZWF0ZSBuZWNlc3NhcnkgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZSAKKyAqIFV0aWxpdHkgY2xhc3MsIHdoaWNoIHdvdWxkIGNyZWF0ZSBuZWNlc3NhcnkgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZQogICogc3BlY2lmaWNhdGlvbi4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRwotICogQHNlZQkJY29tLnN1bi5qZGJjcmEuY29tbW9uLkRhdGFTb3VyY2VTcGVjCi0gKiBAc2VlCQljb20uc3VuLmpkYmNyYS51dGlsLk1ldGhvZEV4Y2VjdXRvcgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKKyAqIEBzZWUgICAgICAgIGNvbS5zdW4uamRiY3JhLmNvbW1vbi5EYXRhU291cmNlU3BlYworICogQHNlZSAgICAgICAgY29tLnN1bi5qZGJjcmEudXRpbC5NZXRob2RFeGNlY3V0b3IKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2VPYmplY3RCdWlsZGVyIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAKICAgICBwcml2YXRlIERhdGFTb3VyY2VTcGVjIHNwZWM7Ci0gICAgCisKICAgICBwcml2YXRlIEhhc2h0YWJsZSBkcml2ZXJQcm9wZXJ0aWVzID0gbnVsbDsKLSAgICAKLSAgICBwcml2YXRlIE1ldGhvZEV4ZWN1dG9yIGV4ZWN1dG9yID0gbnVsbDsgICAgCi0gICAgCisKKyAgICBwcml2YXRlIE1ldGhvZEV4ZWN1dG9yIGV4ZWN1dG9yID0gbnVsbDsKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC01MCwxNjcgKzUwLDE2NyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdCBhIERhdGFTb3VyY2UgT2JqZWN0IGZyb20gdGhlIHNwZWMuCi0gICAgICogCi0gICAgICogQHBhcmFtCXNwZWMJPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtICAgIHNwZWMgICAgPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhU291cmNlT2JqZWN0QnVpbGRlcihEYXRhU291cmNlU3BlYyBzcGVjKSB7Ci0gICAgCXRoaXMuc3BlYyA9IHNwZWM7Ci0gICAgCWV4ZWN1dG9yID0gbmV3IE1ldGhvZEV4ZWN1dG9yKCk7CisgICAgICAgIHRoaXMuc3BlYyA9IHNwZWM7CisgICAgICAgIGV4ZWN1dG9yID0gbmV3IE1ldGhvZEV4ZWN1dG9yKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0IHRoZSBEYXRhU291cmNlIE9iamVjdCBmcm9tIHRoZSBzcGVjLgogICAgICAqCi0gICAgICogQHJldHVybglPYmplY3QgY29uc3RydWN0ZWQgdXNpbmcgdGhlIERhdGFTb3VyY2VTcGVjLgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IGlmIHRoZSBjbGFzcyBpcyBub3QgZm91bmQgb3Igc29tZSBpc3N1ZSBpbiBleGVjdXRpbmcKLSAgICAgKgkJc29tZSBtZXRob2QuCisgICAgICogQHJldHVybiAgICBPYmplY3QgY29uc3RydWN0ZWQgdXNpbmcgdGhlIERhdGFTb3VyY2VTcGVjLgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IGlmIHRoZSBjbGFzcyBpcyBub3QgZm91bmQgb3Igc29tZSBpc3N1ZSBpbiBleGVjdXRpbmcKKyAgICAgKiAgICAgICAgc29tZSBtZXRob2QuCiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjb25zdHJ1Y3REYXRhU291cmNlT2JqZWN0KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlkcml2ZXJQcm9wZXJ0aWVzID0gcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKHNwZWMpOworICAgICAgICBkcml2ZXJQcm9wZXJ0aWVzID0gcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKHNwZWMpOwogICAgICAgICBPYmplY3QgZGF0YVNvdXJjZU9iamVjdCA9IGdldERhdGFTb3VyY2VPYmplY3QoKTsKICAgICAgICAgTWV0aG9kW10gbWV0aG9kcyA9IGRhdGFTb3VyY2VPYmplY3QuZ2V0Q2xhc3MoKS5nZXRNZXRob2RzKCk7CiAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gbWV0aG9kc1tpXS5nZXROYW1lKCk7Ci0JICAgIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFVzZXIiKSl7CSAgICAJCi0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UGFzc3dvcmQiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9naW5UaW1lT3V0IikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dXcml0ZXIiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dXUklURVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFiYXNlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YVNvdXJjZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGVzY3JpcHRpb24iKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE5ldHdvcmtQcm90b2NvbCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UG9ydE51bWJlciIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFJvbGVOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFNlcnZlck5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFN0YXRlbWVudHMiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhTVEFURU1FTlRTKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRJbml0aWFsUG9vbFNpemUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5JTklUSUFMUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1pblBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUlOUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heElkbGVUaW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYSURMRVRJTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFByb3BlcnR5Q3ljbGUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QUk9QRVJUWUNZQ0xFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAoZHJpdmVyUHJvcGVydGllcy5jb250YWluc0tleShtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpKXsKLQkgICAgCVZlY3RvciB2YWx1ZXMgPSAoVmVjdG9yKSBkcml2ZXJQcm9wZXJ0aWVzLmdldChtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpOwotCSAgICAgICAgZXhlY3V0b3IucnVuTWV0aG9kKG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCwgdmFsdWVzKTsKLQkgICAgfQorICAgICAgICBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRVc2VyIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBhc3N3b3JkIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ2luVGltZU91dCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9nV3JpdGVyIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HV1JJVEVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhYmFzZU5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFTb3VyY2VOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERlc2NyaXB0aW9uIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE5ldHdvcmtQcm90b2NvbCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UG9ydE51bWJlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFJvbGVOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFNlcnZlck5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhTdGF0ZW1lbnRzIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYU1RBVEVNRU5UUyksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0SW5pdGlhbFBvb2xTaXplIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuSU5JVElBTFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNaW5Qb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1JTlBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhQb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhJZGxlVGltZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWElETEVUSU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQcm9wZXJ0eUN5Y2xlIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUFJPUEVSVFlDWUNMRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKGRyaXZlclByb3BlcnRpZXMuY29udGFpbnNLZXkobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKSl7CisgICAgICAgICAgICBWZWN0b3IgdmFsdWVzID0gKFZlY3RvcikgZHJpdmVyUHJvcGVydGllcy5nZXQobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKTsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bk1ldGhvZChtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QsIHZhbHVlcyk7CisgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gZGF0YVNvdXJjZU9iamVjdDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGV4dHJhIGRyaXZlciBwcm9wZXJ0aWVzIGZyb20gdGhlIERhdGFTb3VyY2VTcGVjIG9iamVjdCBhbmQKICAgICAgKiBwYXJzZSB0aGVtIHRvIGEgc2V0IG9mIG1ldGhvZE5hbWUgYW5kIHBhcmFtZXRlcnMuIFByZXBhcmUgYSBoYXNodGFibGUKICAgICAgKiBjb250YWluaW5nIHRoZXNlIGRldGFpbHMgYW5kIHJldHVybi4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcGVjCTxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcmV0dXJuCUhhc2h0YWJsZSBjb250YWluaW5nIG1ldGhvZCBuYW1lcyBhbmQgcGFyYW1ldGVycywKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCUlmIGRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgYW5kIHByb3BlcnR5IHN0cmluZwotICAgICAqCQkJCQlpcyBub3QgbnVsbC4KKyAgICAgKiBAcGFyYW0gICAgc3BlYyAgICA8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICBIYXNodGFibGUgY29udGFpbmluZyBtZXRob2QgbmFtZXMgYW5kIHBhcmFtZXRlcnMsCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBJZiBkZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGFuZCBwcm9wZXJ0eSBzdHJpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgaXMgbm90IG51bGwuCiAgICAgICovCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKERhdGFTb3VyY2VTcGVjIHNwZWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJU3RyaW5nIGRlbGltID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKKyAgICAgICAgU3RyaW5nIGRlbGltID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKIAogICAgICAgICBTdHJpbmcgcHJvcCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwotCWlmICggcHJvcCA9PSBudWxsIHx8IHByb3AudHJpbSgpLmVxdWFscygiIikpIHsKLQkgICAgcmV0dXJuIG5ldyBIYXNodGFibGUoKTsKLQl9IGVsc2UgaWYgKGRlbGltID09IG51bGwgfHwgZGVsaW0uZXF1YWxzKCIiKSkgewotCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24gKCJEZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGluIHRoZSBjb25maWd1cmF0aW9uIik7Ci0JfQotCQotCUhhc2h0YWJsZSBwcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOwotCWRlbGltID0gZGVsaW0udHJpbSgpOwkKLQlTdHJpbmcgc2VwID0gZGVsaW0rZGVsaW07Ci0JaW50IHNlcExlbiA9IHNlcC5sZW5ndGgoKTsKLQlTdHJpbmcgY2FjaGUgPSBwcm9wOwotCVZlY3RvciBtZXRob2RzID0gbmV3IFZlY3RvcigpOwotCQotCXdoaWxlIChjYWNoZS5pbmRleE9mKHNlcCkgIT0gLTEpIHsKLQkgICAgaW50IGluZGV4ID0gY2FjaGUuaW5kZXhPZihzZXApOwotCSAgICBTdHJpbmcgbmFtZSA9IGNhY2hlLnN1YnN0cmluZygwLGluZGV4KTsKLQkgICAgaWYgKG5hbWUudHJpbSgpICE9ICIiKSB7Ci0JICAgICAgICBtZXRob2RzLmFkZChuYW1lKTsKLQkgICAgCWNhY2hlID0gY2FjaGUuc3Vic3RyaW5nKGluZGV4K3NlcExlbik7Ci0JICAgIH0KLQl9Ci0JCi0gICAgCUVudW1lcmF0aW9uIGFsbE1ldGhvZHMgPSBtZXRob2RzLmVsZW1lbnRzKCk7Ci0gICAgCXdoaWxlIChhbGxNZXRob2RzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgCSAgICBTdHJpbmcgb25lTWV0aG9kID0gKFN0cmluZykgYWxsTWV0aG9kcy5uZXh0RWxlbWVudCgpOyAgICAJICAgIAotICAgIAkgICAgaWYgKCFvbmVNZXRob2QudHJpbSgpLmVxdWFscygiIikpIHsKLSAgICAJICAgIAlTdHJpbmcgbWV0aG9kTmFtZSA9IG51bGw7Ci0gICAgCSAgICAJVmVjdG9yIHBhcm1zID0gbmV3IFZlY3RvcigpOwotICAgIAkgICAgCVN0cmluZ1Rva2VuaXplciBtZXRob2REZXRhaWxzID0gbmV3IFN0cmluZ1Rva2VuaXplcihvbmVNZXRob2QsZGVsaW0pOwotCQlmb3IgKGludCBpPTA7IG1ldGhvZERldGFpbHMuaGFzTW9yZVRva2VucygpO2krKyApIHsKLQkJICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIG1ldGhvZERldGFpbHMubmV4dFRva2VuKCk7Ci0JCSAgICBpZiAoaT09MCkgewotCQkgICAgCW1ldGhvZE5hbWUgPSB0b2tlbi50b1VwcGVyQ2FzZSgpOwotCQkgICAgfSBlbHNlIHsKLQkJICAgIAlwYXJtcy5hZGQodG9rZW4pOwkJICAgIAkKLQkJICAgIH0KLQkJfQotCQlwcm9wZXJ0aWVzLnB1dChtZXRob2ROYW1lLHBhcm1zKTsKLSAgICAJICAgIH0gICAgCSAgICAKLSAgICAJfQotICAgIAlyZXR1cm4gcHJvcGVydGllczsKKyAgICBpZiAoIHByb3AgPT0gbnVsbCB8fCBwcm9wLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgIHJldHVybiBuZXcgSGFzaHRhYmxlKCk7CisgICAgfSBlbHNlIGlmIChkZWxpbSA9PSBudWxsIHx8IGRlbGltLmVxdWFscygiIikpIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uICgiRGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiIpOwogICAgIH0KLSAgICAKKworICAgIEhhc2h0YWJsZSBwcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOworICAgIGRlbGltID0gZGVsaW0udHJpbSgpOworICAgIFN0cmluZyBzZXAgPSBkZWxpbStkZWxpbTsKKyAgICBpbnQgc2VwTGVuID0gc2VwLmxlbmd0aCgpOworICAgIFN0cmluZyBjYWNoZSA9IHByb3A7CisgICAgVmVjdG9yIG1ldGhvZHMgPSBuZXcgVmVjdG9yKCk7CisKKyAgICB3aGlsZSAoY2FjaGUuaW5kZXhPZihzZXApICE9IC0xKSB7CisgICAgICAgIGludCBpbmRleCA9IGNhY2hlLmluZGV4T2Yoc2VwKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBjYWNoZS5zdWJzdHJpbmcoMCxpbmRleCk7CisgICAgICAgIGlmIChuYW1lLnRyaW0oKSAhPSAiIikgeworICAgICAgICAgICAgbWV0aG9kcy5hZGQobmFtZSk7CisgICAgICAgICAgICBjYWNoZSA9IGNhY2hlLnN1YnN0cmluZyhpbmRleCtzZXBMZW4pOworICAgICAgICB9CisgICAgfQorCisgICAgICAgIEVudW1lcmF0aW9uIGFsbE1ldGhvZHMgPSBtZXRob2RzLmVsZW1lbnRzKCk7CisgICAgICAgIHdoaWxlIChhbGxNZXRob2RzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBTdHJpbmcgb25lTWV0aG9kID0gKFN0cmluZykgYWxsTWV0aG9kcy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgaWYgKCFvbmVNZXRob2QudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG51bGw7CisgICAgICAgICAgICAgICAgVmVjdG9yIHBhcm1zID0gbmV3IFZlY3RvcigpOworICAgICAgICAgICAgICAgIFN0cmluZ1Rva2VuaXplciBtZXRob2REZXRhaWxzID0gbmV3IFN0cmluZ1Rva2VuaXplcihvbmVNZXRob2QsZGVsaW0pOworICAgICAgICBmb3IgKGludCBpPTA7IG1ldGhvZERldGFpbHMuaGFzTW9yZVRva2VucygpO2krKyApIHsKKyAgICAgICAgICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIG1ldGhvZERldGFpbHMubmV4dFRva2VuKCk7CisgICAgICAgICAgICBpZiAoaT09MCkgeworICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSB0b2tlbi50b1VwcGVyQ2FzZSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJtcy5hZGQodG9rZW4pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHByb3BlcnRpZXMucHV0KG1ldGhvZE5hbWUscGFybXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzOworICAgIH0KKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBEYXRhc291cmNlIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlIHNwZWMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCUluaXRpYWwgRGF0YVNvdXJjZSBPYmplY3QgaW5zdGFuY2UuCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gSWYgY2xhc3MgbmFtZSBpcyB3cm9uZyBvciBjbGFzc3BhdGggaXMgbm90IHNldAotICAgICAqCQlwcm9wZXJseS4KKyAgICAgKiBAcmV0dXJuICAgIEluaXRpYWwgRGF0YVNvdXJjZSBPYmplY3QgaW5zdGFuY2UuCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gSWYgY2xhc3MgbmFtZSBpcyB3cm9uZyBvciBjbGFzc3BhdGggaXMgbm90IHNldAorICAgICAqICAgICAgICBwcm9wZXJseS4KICAgICAgKi8KICAgICBwcml2YXRlIE9iamVjdCBnZXREYXRhU291cmNlT2JqZWN0KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlTdHJpbmcgY2xhc3NOYW1lID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKLSAgICAgICAgdHJ5IHsgICAgICAgICAgICAKKyAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBkYXRhU291cmNlQ2xhc3MgPSBDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSk7CiAgICAgICAgICAgICBPYmplY3QgZGF0YVNvdXJjZU9iamVjdCA9IGRhdGFTb3VyY2VDbGFzcy5uZXdJbnN0YW5jZSgpOwogICAgICAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2VPYmplY3Q7CiAgICAgICAgIH0gY2F0Y2goQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBjZm5lKXsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY25mZV9kcyIsIGNmbmUpOwotCQorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jbmZlX2RzIiwgY2ZuZSk7CisKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ2xhc3MgTmFtZSBpcyB3cm9uZyBvciBDbGFzcyBwYXRoIGlzIG5vdCBzZXQgZm9yIDoiICsgY2xhc3NOYW1lKTsKICAgICAgICAgfSBjYXRjaChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGNlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2luc3QiLCBjbGFzc05hbWUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pbnN0IiwgY2xhc3NOYW1lKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiRXJyb3IgaW4gaW5zdGFudGlhdGluZyIgKyBjbGFzc05hbWUpOwogICAgICAgICB9IGNhdGNoKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gY2UpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYWNjX2luc3QiLCBjbGFzc05hbWUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hY2NfaW5zdCIsIGNsYXNzTmFtZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBFcnJvciBpbiBpbnN0YW50aWF0aW5nIiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0KICAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKaW5kZXggZWY2YzRjOS4uM2RjMTU0ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQpAQCAtMTksOTIgKzE5LDkyIEBACiBpbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKIAogLyoqCi0gKiBFbmNhcHN1bGF0ZSB0aGUgRGF0YVNvdXJjZSBvYmplY3QgZGV0YWlscyBvYnRhaW5lZCBmcm9tIAorICogRW5jYXBzdWxhdGUgdGhlIERhdGFTb3VyY2Ugb2JqZWN0IGRldGFpbHMgb2J0YWluZWQgZnJvbQogICogTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCiBwdWJsaWMgY2xhc3MgRGF0YVNvdXJjZVNwZWMgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZXsKIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRVJOQU1FCQkJCT0gMTsgICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFTU1dPUkQJCQkJPSAyOyAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVJMCQkJCQk9IDM7ICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dJTlRJTUVPVVQJCQk9IDQ7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HV1JJVEVSCQkJCT0gNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBQkFTRU5BTUUJCQk9IDY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRU5BTUUJCQk9IDc7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVTQ1JJUFRJT04JCQkJPSA4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktQUk9UT0NPTAkJCT0gOTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1JUTlVNQkVSCQkJCT0gMTA7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9MRU5BTUUJCQkJPSAxMTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVJWRVJOQU1FCQkJCT0gMTI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYU1RBVEVNRU5UUwkJCT0gMTM7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5JVElBTFBPT0xTSVpFCQkJPSAxNDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSU5QT09MU0laRQkJCQk9IDE1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFBPT0xTSVpFCQkJCT0gMTY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYSURMRVRJTUUJCQkJPSAxNzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWUNZQ0xFCQkJPSAxODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEUklWRVJQUk9QRVJUSUVTCQkJPSAxOTsgICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xBU1NOQU1FCQkJCT0gMjA7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVMSU1JVEVSCQkJCT0gMjE7Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWEFEQVRBU09VUkNFCQkJPSAyMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFCQkJCT0gMjM7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlBPT0xEQVRBU09VUkNFCQk9IDI0OwotICAgICAgCi0gICAgLy9HSkNJTlQgICAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVECT0gMjU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTk1FVEhPRAkJCT0gMjY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTlRBQkxFTkFNRQkJCT0gMjc7Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNBQ1RJT05JU09MQVRJT04JCT0gMjg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwJCT0gMjk7Ci0gICAgICAgICAgICAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VSTkFNRSAgICAgICAgICAgICAgICA9IDE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFTU1dPUkQgICAgICAgICAgICAgICAgPSAyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVSTCAgICAgICAgICAgICAgICAgICAgPSAzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR0lOVElNRU9VVCAgICAgICAgICAgID0gNDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dXUklURVIgICAgICAgICAgICAgICAgPSA1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFCQVNFTkFNRSAgICAgICAgICAgID0gNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFTkFNRSAgICAgICAgICAgID0gNzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDUklQVElPTiAgICAgICAgICAgICAgICA9IDg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS1BST1RPQ09MICAgICAgICAgICAgPSA5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUlROVU1CRVIgICAgICAgICAgICAgICAgPSAxMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0xFTkFNRSAgICAgICAgICAgICAgICA9IDExOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFUlZFUk5BTUUgICAgICAgICAgICAgICAgPSAxMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhTVEFURU1FTlRTICAgICAgICAgICAgPSAxMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTklUSUFMUE9PTFNJWkUgICAgICAgICAgICA9IDE0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTlBPT0xTSVpFICAgICAgICAgICAgICAgID0gMTU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYUE9PTFNJWkUgICAgICAgICAgICAgICAgPSAxNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhJRExFVElNRSAgICAgICAgICAgICAgICA9IDE3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZQ1lDTEUgICAgICAgICAgICA9IDE4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERSSVZFUlBST1BFUlRJRVMgICAgICAgICAgICA9IDE5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMQVNTTkFNRSAgICAgICAgICAgICAgICA9IDIwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFTElNSVRFUiAgICAgICAgICAgICAgICA9IDIxOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWEFEQVRBU09VUkNFICAgICAgICAgICAgPSAyMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFICAgICAgICAgICAgICAgID0gMjM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlBPT0xEQVRBU09VUkNFICAgICAgICA9IDI0OworCisgICAgLy9HSkNJTlQKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEICAgID0gMjU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTk1FVEhPRCAgICAgICAgICAgID0gMjY7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTlRBQkxFTkFNRSAgICAgICAgICAgID0gMjc7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUUkFOU0FDVElPTklTT0xBVElPTiAgICAgICAgPSAyODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHVUFSQU5URUVJU09MQVRJT05MRVZFTCAgICAgICAgPSAyOTsKKwogICAgIHByaXZhdGUgSGFzaHRhYmxlIGRldGFpbHMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIHByb3BlcnR5LgogICAgICAqCi0gICAgICogQHBhcmFtCXByb3BlcnR5CVByb3BlcnR5IE5hbWUgdG8gYmUgc2V0LgotICAgICAqIEBwYXJhbQl2YWx1ZQkJVmFsdWUgb2YgcHJvcGVydHkgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICBwcm9wZXJ0eSAgICBQcm9wZXJ0eSBOYW1lIHRvIGJlIHNldC4KKyAgICAgKiBAcGFyYW0gICAgdmFsdWUgICAgICAgIFZhbHVlIG9mIHByb3BlcnR5IHRvIGJlIHNldC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREZXRhaWwoaW50IHByb3BlcnR5LCBTdHJpbmcgdmFsdWUpIHsKLSAgICAJZGV0YWlscy5wdXQobmV3IEludGVnZXIocHJvcGVydHkpLHZhbHVlKTsKKyAgICAgICAgZGV0YWlscy5wdXQobmV3IEludGVnZXIocHJvcGVydHkpLHZhbHVlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIHByb3BlcnR5CiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4KKyAgICAgKiBAcmV0dXJuICAgIFZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERldGFpbChpbnQgcHJvcGVydHkpIHsKLSAgICAJaWYgKGRldGFpbHMuY29udGFpbnNLZXkobmV3IEludGVnZXIocHJvcGVydHkpKSkgewotICAgIAkgICAgcmV0dXJuIChTdHJpbmcpIGRldGFpbHMuZ2V0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSk7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCSAgICByZXR1cm4gbnVsbDsKLSAgICAJfSAgICAJCisgICAgICAgIGlmIChkZXRhaWxzLmNvbnRhaW5zS2V5KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSkpIHsKKyAgICAgICAgICAgIHJldHVybiAoU3RyaW5nKSBkZXRhaWxzLmdldChuZXcgSW50ZWdlcihwcm9wZXJ0eSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3Mgd2hldGhlciB0d28gPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdHMKICAgICAgKiBhcmUgZXF1YWwgb3Igbm90LgogICAgICAqCi0gICAgICogQHBhcmFtCW9iaglJbnN0YW5jZSBvZiA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvYmogICAgSW5zdGFuY2Ugb2YgPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewotICAgIAlpZiAob2JqIGluc3RhbmNlb2YgRGF0YVNvdXJjZVNwZWMpIHsKLSAgICAJICAgIHJldHVybiB0aGlzLmRldGFpbHMuZXF1YWxzKCgoRGF0YVNvdXJjZVNwZWMpb2JqKS5kZXRhaWxzKTsKLSAgICAJfQotICAgIAlyZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBEYXRhU291cmNlU3BlYykgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5lcXVhbHMoKChEYXRhU291cmNlU3BlYylvYmopLmRldGFpbHMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGhhc2hDb2RlIG9mIHRoaXMgPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaENvZGUgb2YgdGhpcyBvYmplY3QuCisgICAgICogQHJldHVybiAgICBoYXNoQ29kZSBvZiB0aGlzIG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgIAlyZXR1cm4gdGhpcy5kZXRhaWxzLmhhc2hDb2RlKCk7Ci0gICAgfSAgICAKKyAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5oYXNoQ29kZSgpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKaW5kZXggZWY0MzhmYy4uM2I0ZmFlYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9Ii4iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy9jb21tb24iLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzYsMTMgKzM2LDEzIEBACiAKICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTMiIGRlcGVuZHM9ImNvbXBpbGUiLz4KICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTQiIGRlcGVuZHM9ImNvbXBpbGUiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTMiIGRlcGVuZHM9InBhY2thZ2UiLz4KICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTQiIGRlcGVuZHM9InBhY2thZ2UiLz4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTMiIGRlcGVuZHM9ImNvbXBpbGUxMywgcGFja2FnZTEzIi8+CiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KLSAgICAKKwogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQppbmRleCBiZmNiZjBiLi40ZWJlZDZlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCkBAIC0yNCwyNCArMjQsMjQgQEAKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcjsKIAogLyoqCi0gKiBIb2xkcyB0aGUgamF2YS5zcWwuQ29ubmVjdGlvbiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlIAorICogSG9sZHMgdGhlIGphdmEuc3FsLkNvbm5lY3Rpb24gb2JqZWN0LCB3aGljaCBpcyB0byBiZQogICogcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvbkhvbGRlciBpbXBsZW1lbnRzIENvbm5lY3Rpb257IAorcHVibGljIGNsYXNzIENvbm5lY3Rpb25Ib2xkZXIgaW1wbGVtZW50cyBDb25uZWN0aW9uewogCiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uIGNvbjsKLSAgICAKKwogICAgIHByaXZhdGUgTWFuYWdlZENvbm5lY3Rpb24gbWM7Ci0gICAgCi0gICAgcHJpdmF0ZSBib29sZWFuIHdyYXBwZWRBbHJlYWR5ID0gZmFsc2U7ICAgIAotICAgIAorCisgICAgcHJpdmF0ZSBib29sZWFuIHdyYXBwZWRBbHJlYWR5ID0gZmFsc2U7CisKICAgICBwcml2YXRlIGJvb2xlYW4gaXNDbG9zZWQgPSBmYWxzZTsKLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiB2YWxpZCA9IHRydWU7Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gYWN0aXZlID0gZmFsc2U7CiAgICAgLyoqCiAgICAgICogVGhlIGFjdGl2ZSBmbGFnIGlzIGZhbHNlIHdoZW4gdGhlIGNvbm5lY3Rpb24gaGFuZGxlIGlzCkBAIC01MywyMTkgKzUzLDIxOSBAQAogICAgICAqIGZ1bmN0aW9uLCB0aGUgYWJvdmUgbWV0aG9kIGludm9jYXRpb24gc3VjY2VlZHM7IG90aGVyd2lzZQogICAgICAqIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICAgICovCi0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGEgQ29ubmVjdGlvbiBob2xkZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvbkhvbGRlcihDb25uZWN0aW9uIGNvbiwgTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy5jb24gPSBjb247CiAgICAgICAgIHRoaXMubWMgID0gbWM7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIHRoaXMgaG9sZGVyIG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuCUNvbm5lY3Rpb24gb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybiAgICBDb25uZWN0aW9uIG9iamVjdC4KICAgICAgKi8KICAgICBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oKSB7Ci0gICAgCXJldHVybiBjb247CisgICAgICAgIHJldHVybiBjb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZmxhZyB0byBpbmRpY2F0ZSB0aGF0LCB0aGUgY29ubmVjdGlvbiBpcyB3cmFwcGVkIGFscmVhZHkgb3Igbm90LgogICAgICAqCi0gICAgICogQHBhcmFtCXdyYXBGbGFnCQorICAgICAqIEBwYXJhbSAgICB3cmFwRmxhZwogICAgICAqLwogICAgIHZvaWQgd3JhcHBlZChib29sZWFuIHdyYXBGbGFnKXsKICAgICAgICAgdGhpcy53cmFwcGVkQWxyZWFkeSA9IHdyYXBGbGFnOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgd2hldGhlciBpdCBpcyB3cmFwcGVkIGFscmVhZHkgb3Igbm90LgogICAgICAqCi0gICAgICogQHJldHVybgl3cmFwcGVkIGZsYWcuCisgICAgICogQHJldHVybiAgICB3cmFwcGVkIGZsYWcuCiAgICAgICovCiAgICAgYm9vbGVhbiBpc1dyYXBwZWQoKXsKICAgICAgICAgcmV0dXJuIHdyYXBwZWRBbHJlYWR5OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSByZXNwb25zaWJsZQogICAgICAqIGZvciB0aGlzIGNvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKi8KICAgICBNYW5hZ2VkQ29ubmVjdGlvbiBnZXRNYW5hZ2VkQ29ubmVjdGlvbigpIHsKICAgICAgICAgcmV0dXJuIG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlcGxhY2UgdGhlIGFjdHVhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3Qgd2l0aCB0aGUgb25lCi0gICAgICogc3VwcGxpZWQuIEFsc28gcmVwbGFjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gbGluay4gICAgIAorICAgICAqIHN1cHBsaWVkLiBBbHNvIHJlcGxhY2UgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGxpbmsuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29uIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0JbWMgIDxjb2RlPiBNYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBjb24gPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBtYyAgPGNvZGU+IE1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgdm9pZCBhc3NvY2lhdGVDb25uZWN0aW9uKENvbm5lY3Rpb24gY29uLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewotICAgIAl0aGlzLm1jID0gbWM7Ci0gICAgCXRoaXMuY29uID0gY29uOworICAgICAgICB0aGlzLm1jID0gbWM7CisgICAgICAgIHRoaXMuY29uID0gY29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENsZWFycyBhbGwgd2FybmluZ3MgcmVwb3J0ZWQgZm9yIHRoZSB1bmRlcmx5aW5nIGNvbm5lY3Rpb24gIG9iamVjdC4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgY2xlYXJXYXJuaW5ncygpIHRocm93cyBTUUxFeGNlcHRpb257ICAgIAotCWNoZWNrVmFsaWRpdHkoKTsKKyAgICBwdWJsaWMgdm9pZCBjbGVhcldhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIGNvbi5jbGVhcldhcm5pbmdzKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2xvc2VzIHRoZSBsb2dpY2FsIGNvbm5lY3Rpb24uICAgIAorICAgICAqIENsb3NlcyB0aGUgbG9naWNhbCBjb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgICBpc0Nsb3NlZCA9IHRydWU7Ci0gICAgICAgIG1jLmNvbm5lY3Rpb25DbG9zZWQobnVsbCwgdGhpcyk7ICAgICAgICAKKyAgICAgICAgbWMuY29ubmVjdGlvbkNsb3NlZChudWxsLCB0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBJbnZhbGlkYXRlcyB0aGlzIG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBpbnZhbGlkYXRlKCkgewotICAgIAl2YWxpZCA9IGZhbHNlOworICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENsb3NlcyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpbnZvbHZlZCBpbiB0aGlzLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICB2b2lkIGFjdHVhbENsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsgICAgCisgICAgdm9pZCBhY3R1YWxDbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICAgIGNvbi5jbG9zZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCB0aGUgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uY29tbWl0KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uY29tbWl0KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEByZXR1cm4JPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuICAgICAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQocmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzdGF0ZW1lbnQgZnJvbSB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4gCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRIb2xkYWJpbGl0eSAgICBSZXN1bHRTZXQgSG9sZGFiaWxpdHkuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCi0gICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoaW50IHJlc3VsdFNldFR5cGUsIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCSAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCSAgICAgCisgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoaW50IHJlc3VsdFNldFR5cGUsIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudChyZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAgICAgCQkJICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOwogICAgIH0KLSAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBhdXRvLWNvbW1pdCBtb2RlIGZvciB0aGUgdW5kZXJseWluZyA8Y29kZT4gQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IHN0YXRlIG9mIGNvbm5lY3Rpb24ncyBhdXRvLWNvbW1pdCBtb2RlLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZ2V0QXV0b0NvbW1pdCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0QXV0b0NvbW1pdCgpOwotICAgIH0gICAKLSAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0QXV0b0NvbW1pdCgpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgdW5kZXJseWluZyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QncyBjYXRhbG9nIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCUNhdGFsb2cgTmFtZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICBDYXRhbG9nIE5hbWUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2F0YWxvZygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmdldENhdGFsb2coKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgaG9sZGFiaWxpdHkgb2YgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBvYmplY3RzIGNyZWF0ZWQKICAgICAgKiB1c2luZyB0aGlzIGNvbm5lY3Rpb24gb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybglob2xkYWJpbGl0eSB2YWx1ZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICBob2xkYWJpbGl0eSB2YWx1ZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRIb2xkYWJpbGl0eSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybgljb24uZ2V0SG9sZGFiaWxpdHkoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiAgICBjb24uZ2V0SG9sZGFiaWxpdHkoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPkRhdGFiYXNlTWV0YURhdGE8L2NvZGU+b2JqZWN0IGZyb20gdGhlIHVuZGVybHlpbmcKICAgICAgKiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gPGNvZGU+RGF0YWJhc2VNZXRhRGF0YTwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIERhdGFiYXNlTWV0YURhdGEgZ2V0TWV0YURhdGEoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldE1ldGFEYXRhKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldE1ldGFEYXRhKCk7CiAgICAgfQotIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0J3MgY3VycmVudCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRyYW5zYWN0aW9uIGxldmVsCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLyAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCAKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aAogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uPC9jb2RlPiBPYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVR5cGVNYXAgc2V0IGluIHRoaXMgb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIFR5cGVNYXAgc2V0IGluIHRoaXMgb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgTWFwIGdldFR5cGVNYXAoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldFR5cGVNYXAoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0VHlwZU1hcCgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMjczLDE4NCArMjczLDE4NCBAQAogICAgICAqIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gRmlyc3QgPGNvZGU+IFNRTFdhcm5pbmc8L2NvZGU+IE9iamVjdCBvciBudWxsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNRTFdhcm5pbmcgZ2V0V2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldFdhcm5pbmdzKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldFdhcm5pbmdzKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHdoZXRoZXIgdW5kZXJseWluZyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLgogICAgICAqCi0gICAgICogQHJldHVybgl0cnVlIGlmIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyBjbG9zZWQsIGZhbHNlCi0gICAgICogCQlpZiBpdCBpcyBjbG9zZWQuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLCBmYWxzZQorICAgICAqICAgICAgICAgaWYgaXQgaXMgY2xvc2VkLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0Nsb3NlZCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAlyZXR1cm4gaXNDbG9zZWQ7CisgICAgICAgIHJldHVybiBpc0Nsb3NlZDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgd2hldGhlciB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyByZWFkLW9ubHkuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBpcyByZWFkLW9ubHksIGZhbHNlIG90aGVyLXdpc2UKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gaXMgcmVhZC1vbmx5LCBmYWxzZSBvdGhlci13aXNlCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzUmVhZE9ubHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmlzUmVhZE9ubHkoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uaXNSZWFkT25seSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiBTUUwgc3RhdGVtZW50IGludG8gdGhlIHN5c3RlbSdzIG5hdGl2ZSBTUUwgZ3JhbW1lci4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIHN0YXRlbWVudCAsIHRvIGJlIGNvbnZlcnRlZC4KLSAgICAgKiBAcmV0dXJuCUNvbnZlcnRlZCBTUUwgc3RyaW5nLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBzdGF0ZW1lbnQgLCB0byBiZSBjb252ZXJ0ZWQuCisgICAgICogQHJldHVybiAgICBDb252ZXJ0ZWQgU1FMIHN0cmluZy4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBuYXRpdmVTUUwoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5uYXRpdmVTUUwoc3FsKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ubmF0aXZlU1FMKHNxbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQogICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CiAgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKLSAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQotICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgICAgICAKLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCSAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgIAkJCSAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsKTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKKyAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKKyAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCiAgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKICAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsKICAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlhdXRvR2VuZXJhdGVkS2V5cyBhIGZsYWcgaW5kaWNhdGluZyBBdXRvR2VuZXJhdGVkS2V5cyBuZWVkIHRvIGJlIHJldHVybmVkLgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCBhdXRvR2VuZXJhdGVkS2V5cykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxhdXRvR2VuZXJhdGVkS2V5cyk7Ci0gICAgfSAgICAKLSAgICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JY29sdW1uSW5kZXhlcyBhbiBhcnJheSBvZiBjb2x1bW4gaW5kZXhlcyBpbmRpY2F0aW5nIHRoZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlCi0gICAgICoJCXJldHVybmVkIGZyb20gdGhlIGluc2VydGVkIHJvdyBvciByb3dzLgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludFtdIGNvbHVtbkluZGV4ZXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uSW5kZXhlcyk7Ci0gICAgfSAgICAgICAgICAKLSAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCWludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgICAgICAgCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgIAkJCQkgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7Ci0gICAgfSAgICAgICAgICAgCiAKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKICAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQljb2x1bW5OYW1lcyBOYW1lIG9mIGJvdW5kIGNvbHVtbnMuCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGF1dG9HZW5lcmF0ZWRLZXlzIGEgZmxhZyBpbmRpY2F0aW5nIEF1dG9HZW5lcmF0ZWRLZXlzIG5lZWQgdG8gYmUgcmV0dXJuZWQuCiAgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCBhdXRvR2VuZXJhdGVkS2V5cykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGF1dG9HZW5lcmF0ZWRLZXlzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgY29sdW1uSW5kZXhlcyBhbiBhcnJheSBvZiBjb2x1bW4gaW5kZXhlcyBpbmRpY2F0aW5nIHRoZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlCisgICAgICogICAgICAgIHJldHVybmVkIGZyb20gdGhlIGluc2VydGVkIHJvdyBvciByb3dzLgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludFtdIGNvbHVtbkluZGV4ZXMpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5JbmRleGVzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0SG9sZGFiaWxpdHkgICAgUmVzdWx0U2V0IEhvbGRhYmlsaXR5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBjb2x1bW5OYW1lcyBOYW1lIG9mIGJvdW5kIGNvbHVtbnMuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgU3RyaW5nW10gY29sdW1uTmFtZXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uTmFtZXMpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5OYW1lcyk7CiAgICAgfQogCiAgICAgcHVibGljIENsb2IgY3JlYXRlQ2xvYigpIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtNTAwLDE2MiArNTAwLDE2MiBAQAogICAgIC8qKgogICAgICAqIFJlbW92ZXMgdGhlIGdpdmVuIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2F2ZXBvaW50CTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0Ci0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBzYXZlcG9pbnQgICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVsZWFzZVNhdmVwb2ludChTYXZlcG9pbnQgc2F2ZXBvaW50KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucmVsZWFzZVNhdmVwb2ludChzYXZlcG9pbnQpOwotICAgIH0gCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucmVsZWFzZVNhdmVwb2ludChzYXZlcG9pbnQpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFJvbGxzIGJhY2sgdGhlIGNoYW5nZXMgbWFkZSBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjaygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yb2xsYmFjaygpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJvbGxiYWNrKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUm9sbHMgYmFjayB0aGUgY2hhbmdlcyBtYWRlIGFmdGVyIHRoZSBzYXZlcG9pbnQuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soU2F2ZXBvaW50IHNhdmVwb2ludCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJvbGxiYWNrKHNhdmVwb2ludCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucm9sbGJhY2soc2F2ZXBvaW50KTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgYXV0by1jb21tbWl0IG1vZGUgb2YgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlhdXRvQ29tbWl0IGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB0aGUgYXV0by1jb21taXQgbW9kZS4gICAgIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgYXV0b0NvbW1pdCBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhlIGF1dG8tY29tbWl0IG1vZGUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEF1dG9Db21taXQoYm9vbGVhbiBhdXRvQ29tbWl0KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGF1dG9Db21taXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNhdGFsb2cgbmFtZSB0byB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2F0YWxvZwlDYXRhbG9nIG5hbWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBjYXRhbG9nICAgIENhdGFsb2cgbmFtZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q2F0YWxvZyhTdHJpbmcgY2F0YWxvZykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldENhdGFsb2coY2F0YWxvZyk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0Q2F0YWxvZyhjYXRhbG9nKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZCAKKyAgICAgKiBTZXRzIHRoZSBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZAogICAgICAqIHVzaW5nIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCWhvbGRhYmlsaXR5CUEgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBob2xkYWJpbGl0eSBjb25zdGFudAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgaG9sZGFiaWxpdHkgICAgQSA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IGhvbGRhYmlsaXR5IGNvbnN0YW50CisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEhvbGRhYmlsaXR5KGludCBob2xkYWJpbGl0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAgCWNvbi5zZXRIb2xkYWJpbGl0eShob2xkYWJpbGl0eSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICAgY29uLnNldEhvbGRhYmlsaXR5KGhvbGRhYmlsaXR5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBQdXRzIHRoZSBjb25uZWN0aW9uIGluIHJlYWQtb25seSBtb2RlIGFzIGEgaGludCB0byB0aGUgZHJpdmVyIHRvIAorICAgICAqIFB1dHMgdGhlIGNvbm5lY3Rpb24gaW4gcmVhZC1vbmx5IG1vZGUgYXMgYSBoaW50IHRvIHRoZSBkcml2ZXIgdG8KICAgICAgKiBwZXJmb3JtIGRhdGFiYXNlIG9wdGltaXphdGlvbnMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVhZE9ubHkgIHRydWUgZW5hYmxlcyByZWFkLW9ubHkgbW9kZSwgZmFsc2UgZGlzYWJsZXMgaXQuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICByZWFkT25seSAgdHJ1ZSBlbmFibGVzIHJlYWQtb25seSBtb2RlLCBmYWxzZSBkaXNhYmxlcyBpdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVhZE9ubHkoYm9vbGVhbiByZWFkT25seSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldFJlYWRPbmx5KHJlYWRPbmx5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRSZWFkT25seShyZWFkT25seSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhbmQgdW5uYW1lZCBzYXZlcG9pbnQgYW5kIHJldHVybnMgYW4gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KICAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNhdmVwb2ludCBzZXRTYXZlcG9pbnQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnNldFNhdmVwb2ludCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc2F2ZXBvaW50IHdpdGggdGhlIG5hbWUgYW5kIHJldHVybnMgYW4gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdC4KICAgICAgKgotICAgICAqIEBwYXJhbQluYW1lCU5hbWUgb2YgdGhlIHNhdmVwb2ludC4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbmFtZSAgICBOYW1lIG9mIHRoZSBzYXZlcG9pbnQuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNhdmVwb2ludCBzZXRTYXZlcG9pbnQoU3RyaW5nIG5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uc2V0U2F2ZXBvaW50KG5hbWUpOwotICAgIH0gICAgCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnNldFNhdmVwb2ludChuYW1lKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGV2ZWwgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbGV2ZWwgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2FjdGlvbklzb2xhdGlvbihpbnQgbGV2ZWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbihsZXZlbCk7Ci0gICAgfSAgICAgCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24obGV2ZWwpOworICAgIH0KKwogICAgIC8qKgotICAgICAqIEluc3RhbGxzIHRoZSBnaXZlbiA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhcyB0aGUgdHlvZSBtYXAgZm9yIHRoaXMgCisgICAgICogSW5zdGFsbHMgdGhlIGdpdmVuIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzIHRoZSB0eW9lIG1hcCBmb3IgdGhpcwogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCW1hcAk8Y29kZT5NYXA8L2NvZGU+IGEgTWFwIG9iamVjdCB0byBpbnN0YWxsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbWFwICAgIDxjb2RlPk1hcDwvY29kZT4gYSBNYXAgb2JqZWN0IHRvIGluc3RhbGwuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFR5cGVNYXAoTWFwIG1hcCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOwotICAgIAljb24uc2V0VHlwZU1hcChtYXApOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldFR5cGVNYXAobWFwKTsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE5ldHdvcmtUaW1lb3V0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5ldHdvcmtUaW1lb3V0KEV4ZWN1dG9yIGV4ZWN1dG9yLCBpbnQgbWlsbGlzZWNvbmRzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWJvcnQoRXhlY3V0b3IgZXhlY3V0b3IpICB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFNjaGVtYSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNjaGVtYShTdHJpbmcgc2NoZW1hKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIENoZWNrcyB0aGUgdmFsaWRpdHkgb2YgdGhpcyBvYmplY3QKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgY2hlY2tWYWxpZGl0eSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAlpZiAoaXNDbG9zZWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJDb25uZWN0aW9uIGNsb3NlZCIpOwotICAgIAlpZiAoIXZhbGlkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiSW52YWxpZCBDb25uZWN0aW9uIik7Ci0gICAgCWlmKGFjdGl2ZSA9PSBmYWxzZSkgewotICAgIAkgICAgbWMuY2hlY2tJZkFjdGl2ZSh0aGlzKTsKLSAgICAJfQorICAgICAgICBpZiAoaXNDbG9zZWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJDb25uZWN0aW9uIGNsb3NlZCIpOworICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiSW52YWxpZCBDb25uZWN0aW9uIik7CisgICAgICAgIGlmKGFjdGl2ZSA9PSBmYWxzZSkgeworICAgICAgICAgICAgbWMuY2hlY2tJZkFjdGl2ZSh0aGlzKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGFjdGl2ZSBmbGFnIHRvIHRydWUKICAgICAgKgotICAgICAqIEBwYXJhbQlhY3R2CWJvb2xlYW4KKyAgICAgKiBAcGFyYW0gICAgYWN0diAgICBib29sZWFuCiAgICAgICovCiAgICAgdm9pZCBzZXRBY3RpdmUoYm9vbGVhbiBhY3R2KSB7CiAgICAgICAgIGFjdGl2ZSA9IGFjdHY7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IGFjN2U3NDguLmYwNjc1YTQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0zMywxOSArMzMsMTkgQEAKICAqIFRoaXMgY2xhc3MgaXMgZXh0ZW5kZWQgYnkgdGhlIERhdGFTb3VyY2Ugc3BlY2lmaWMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZhY3RvcmllcwogICogYW5kIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGZvciB0aGUgPGNvZGU+RHJpdmVyTWFuYWdlcjwvY29kZT4uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIAotcHVibGljIGFic3RyYWN0IGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSwgCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LAogICAgIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKLSAgICAKKwogICAgIHByb3RlY3RlZCBEYXRhU291cmNlU3BlYyBzcGVjID0gbmV3IERhdGFTb3VyY2VTcGVjKCk7CiAgICAgcHJvdGVjdGVkIHRyYW5zaWVudCBEYXRhU291cmNlT2JqZWN0QnVpbGRlciBkc09iakJ1aWxkZXI7Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgamF2YS5pby5QcmludFdyaXRlciBsb2dXcml0ZXIgPSBudWxsOwogICAgIHByb3RlY3RlZCBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgcmEgPSBudWxsOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTU0LDggKzU0LDggQEAKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgQ29ubmVjdGlvbiBGYWN0b3J5IGluc3RhbmNlLiBUaGUgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uCiAgICAgICogb2YgdGhlIHJlc291cmNlIGFkYXB0ZXIgaXMgdXNlZCBoZXJlLgotICAgICAqIAotICAgICAqIEByZXR1cm4JR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGNyZWF0ZUNvbm5lY3Rpb25GYWN0b3J5KCkgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtNjMsMTYgKzYzLDE2IEBACiAgICAgICAgIH0KICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UgY2YgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UoCiAgICAgICAgICAgICAoamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KXRoaXMsIG51bGwpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIENvbm5lY3Rpb24gRmFjdG9yeSBpbnN0YW5jZS4gVGhlIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbgogICAgICAqIG9mIHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIgaXMgdXNlZCBoZXJlLgotICAgICAqIAotICAgICAqIEBwYXJhbQljeE1hbmFnZXIJPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHJldHVybglHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgorICAgICAqCisgICAgICogQHBhcmFtICAgIGN4TWFuYWdlciAgICA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcmV0dXJuICAgIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjcmVhdGVDb25uZWN0aW9uRmFjdG9yeShqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlciBjeE1hbmFnZXIpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTgwLDU1ICs4MCw1NSBAQAogICAgICAgICB9CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIGNmID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlKAogICAgICAgICAgICAgKGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSl0aGlzLCBjeE1hbmFnZXIpOwotICAgICAgICByZXR1cm4gY2Y7IAorICAgICAgICByZXR1cm4gY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIEVJUyByZXNvdXJjZQogICAgICAqIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCi0gICAgICogICAgICAgCSAgICAgICAgICAgICAJYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+Ci0gICAgICogICAgICAgCSAgICAgICAgICAgICAJb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQotICAgICAqICAgICAgIAkJCQljcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0Ci0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdCAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwKICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIC8qKgotICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0byAKKyAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8KICAgICAgKiBhbm90aGVyIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCW90aGVyCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCi0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQotICAgICAqCQlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBvdGhlciAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZQorICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQorICAgICAqICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgamF2YS5pby5QcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB7CiAgICAgICAgIHJldHVybiBsb2dXcml0ZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+c2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciBnZXRSZXNvdXJjZUFkYXB0ZXIoKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xMzYsMTEgKzEzNiwxMSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByYTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBoYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTQ4LDQxICsxNDgsNDEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc3BlYy5oYXNoQ29kZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgYSBtYXRjaGVkIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmcm9tIHRoZSBjYW5kaWRhdGUgCisgICAgICogUmV0dXJucyBhIG1hdGNoZWQgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZyb20gdGhlIGNhbmRpZGF0ZQogICAgICAqIHNldCBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0cy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29ubmVjdGlvblNldAk8Y29kZT5TZXQ8L2NvZGU+IG9mICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKgkJCQlvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCXN1YmplY3QJIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICoJCQlmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICoJCQkJZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCBpcyB0aGUgYmVzdCBtYXRjaCBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgYWNjZXNzaW5nIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPgotICAgICAqCQkJCQlwYXJhbWV0ZXIgb3IgdGhlIDxjb2RlPlNldDwvY29kZT4gb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICoJCQkJCW9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb25uZWN0aW9uU2V0ICAgIDxjb2RlPlNldDwvY29kZT4gb2YgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgIG9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICAgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiAgICAgICAgICAgIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZworICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiAgICAgICAgICAgICAgICBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IGlzIHRoZSBiZXN0IG1hdGNoIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBhY2Nlc3NpbmcgdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBvciB0aGUgPGNvZGU+U2V0PC9jb2RlPiBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgogICAgICAqLwotICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhqYXZhLnV0aWwuU2V0IGNvbm5lY3Rpb25TZXQsIAorICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhqYXZhLnV0aWwuU2V0IGNvbm5lY3Rpb25TZXQsCiAgICAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdCBzdWJqZWN0LCBDb25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbm5lY3Rpb25TZXQgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcywgc3ViamVjdCwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgIAorCiAgICAgICAgIGphdmEudXRpbC5JdGVyYXRvciBpdGVyID0gY29ubmVjdGlvblNldC5pdGVyYXRvcigpOwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBudWxsOwogICAgICAgICB3aGlsZShpdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtYyA9IChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24pIGl0ZXIubmV4dCgpOwogICAgICAgICAgICAgfSBjYXRjaChqYXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBuc2VlKSB7Ci0JICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pdGVyIik7CisgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pdGVyIik7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKG5zZWUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmKHBjID09IG51bGwgJiYgdGhpcy5lcXVhbHMobWMuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkpKSB7CkBAIC0xOTEsNyArMTkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZChtYyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYzsKICAgICAgICAgICAgICAgICB9IGNhdGNoKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7Ci0JICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfcmUiLCByZSk7CisgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfcmUiLCByZSk7CiAgICAgICAgICAgICAgICAgICAgIG1jLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKHJlLCBudWxsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYoU2VjdXJpdHlVdGlscy5pc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKHBjLCBtYy5nZXRQYXNzd29yZENyZWRlbnRpYWwoKSkgPT0gdHJ1ZSkgewpAQCAtMjAwLDQ1ICsyMDAsNDUgQEAKICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZChtYyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYzsKICAgICAgICAgICAgICAgICB9IGNhdGNoKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7Ci0JICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5yZSIpOworICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMucmUiKTsKICAgICAgICAgICAgICAgICAgICAgbWMuY29ubmVjdGlvbkVycm9yT2NjdXJyZWQocmUsIG51bGwpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvL0dKQ0lOVAogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyB0byBiZSB2YWxpZGF0ZWQgb3Igbm90CiAgICAgICogYW5kIHZhbGlkYXRlcyBpdCBvciByZXR1cm5zLgotICAgICAqIAotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAJCWlmIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIKICAgICAgKi8KICAgICB2b2lkIGlzVmFsaWQoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogCiAgICAgICAgIGlmKG1jLmlzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpIHsKLQkgICAgcmV0dXJuOworICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAKLSAgICAgICAgYm9vbGVhbiBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID0gCisKKyAgICAgICAgYm9vbGVhbiBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID0KICAgICAgICAgICAgIChuZXcgQm9vbGVhbihzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKS50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7CiAgICAgICAgIGlmKCBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID09IGZhbHNlIHx8IG1jID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIG1jLmNoZWNrSWZWYWxpZCgpOwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGFib3ZlIGNhbGwgY2hlY2tzIGlmIHRoZSBhY3R1YWwgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAgICAgKiBpcyB1c2FibGUgb3Igbm90LgogICAgICAgICAgKi8KICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKHZhbGlkYXRpb25NZXRob2QuZXF1YWxzKCJhdXRvLWNvbW1pdCIpID09IHRydWUpIHsKICAgICAgICAgICAgIGlzVmFsaWRCeUF1dG9Db21taXQoY29uKTsKICAgICAgICAgfSBlbHNlIGlmKHZhbGlkYXRpb25NZXRob2QuZXF1YWxzSWdub3JlQ2FzZSgibWV0YS1kYXRhIikgPT0gdHJ1ZSkgewpAQCAtMjQ5LDI4ICsyNDksMjggQEAKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIiKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IGNoZWNraW5nIGl0cyBhdXRvIGNvbW1pdCBwcm9wZXJ0eS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5QXV0b0NvbW1pdChqYXZhLnNxbC5Db25uZWN0aW9uIGNvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgLy8gTm90aWNlIHRoYXQgdXNpbmcgc29tZXRoaW5nIGxpa2UgCisgICAgICAgICAgIC8vIE5vdGljZSB0aGF0IHVzaW5nIHNvbWV0aGluZyBsaWtlCiAgICAgICAgICAgIC8vIGRiQ29uLnNldEF1dG9Db21taXQoZGJDb24uZ2V0QXV0b0NvbW1pdCgpKSB3aWxsIGNhdXNlIHByb2JsZW1zIHdpdGgKICAgICAgICAgICAgLy8gc29tZSBkcml2ZXJzIGxpa2Ugc3liYXNlCi0gICAgICAgICAgIC8vIFdlIGRvIG5vdCB2YWxpZGF0ZSBjb25uZWN0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IGVubGlzdGVkIAotCSAgIC8vaW4gYSB0cmFuc2FjdGlvbiAKLQkgICAvLyBXZSBjeWNsZSBhdXRvY29tbWl0IHRvIHRydWUgYW5kIGZhbHNlIHRvIGJ5LXBhc3MgZHJpdmVycyB0aGF0IAotCSAgIC8vIG1pZ2h0IGNhY2hlIHRoZSBjYWxsIHRvIHNldCBhdXRvY29taXR0CisgICAgICAgICAgIC8vIFdlIGRvIG5vdCB2YWxpZGF0ZSBjb25uZWN0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IGVubGlzdGVkCisgICAgICAgLy9pbiBhIHRyYW5zYWN0aW9uCisgICAgICAgLy8gV2UgY3ljbGUgYXV0b2NvbW1pdCB0byB0cnVlIGFuZCBmYWxzZSB0byBieS1wYXNzIGRyaXZlcnMgdGhhdAorICAgICAgIC8vIG1pZ2h0IGNhY2hlIHRoZSBjYWxsIHRvIHNldCBhdXRvY29taXR0CiAgICAgICAgICAgIC8vIEFsc28gbm90aWNlIHRoYXQgc29tZSBYQSBkYXRhIHNvdXJjZXMgd2lsbCB0aHJvdyBhbmQgZXhjZXB0aW9uIGlmCiAgICAgICAgICAgIC8vIHlvdSB0cnkgdG8gY2FsbCBzZXRBdXRvQ29tbWl0LCBmb3IgdGhlbSB0aGlzIG1ldGhvZCBpcyBub3QgcmVjb21tZW5kZWQKIApAQCAtMjgxLDkwICsyODEsOTAgQEAKICAgICAgICAgICAgICAgICBjb24ucm9sbGJhY2soKTsgLy8gcHJldmVudHMgdW5jb21wbGV0ZWQgdHJhbnNhY3Rpb24gZXhjZXB0aW9ucwogICAgICAgICAgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KHRydWUpOwogICAgICAgICAgICB9Ci0gICAgICAgIAotCSAgIGNvbi5zZXRBdXRvQ29tbWl0KGFjKTsKKworICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGFjKTsKIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2F1dG9jb21taXQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYXV0b2NvbW1pdCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IGNoZWNraW5nIGl0cyBtZXRhIGRhdGEuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeU1ldGFEYXRhKGphdmEuc3FsLkNvbm5lY3Rpb24gY29uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgamF2YS5zcWwuRGF0YWJhc2VNZXRhRGF0YSBkbWQgPSBjb24uZ2V0TWV0YURhdGEoKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgImdldHRpbmcgdGhlIG1ldGEgZGF0YSBmYWlsZWQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBxdWVyeWluZyBhIHRhYmxlLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHBhcmFtCXRhYmxlTmFtZQl0YWJsZSB3aGljaCBzaG91bGQgYmUgcXVlcmllZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEBwYXJhbSAgICB0YWJsZU5hbWUgICAgdGFibGUgd2hpY2ggc2hvdWxkIGJlIHF1ZXJpZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeVRhYmxlUXVlcnkoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24sIAorICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeVRhYmxlUXVlcnkoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24sCiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBqYXZhLnNxbC5TdGF0ZW1lbnQgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIGphdmEuc3FsLlJlc3VsdFNldCBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NICIgKyB0YWJsZU5hbWUpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2V4ZWN1dGUiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZXhlY3V0ZSIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInF1ZXJ5aW5nIHRoZSB0YWJsZSAiICsgdGFibGVOYW1lICsgIiBmYWlsZWQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBpc29sYXRpb24gbGV2ZWwgc3BlY2lmaWVkIGluIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CiAgICAgICogZm9yIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gcGFzc2VkLgogICAgICAqCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCi0gICAgICoJCQkJCW9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCisgICAgICogICAgICAgICAgICAgICAgICAgIG9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgc2V0SXNvbGF0aW9uKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJCi0gICAgCWphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgIAlpZihjb24gPT0gbnVsbCkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCQotICAgIAlTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKLSAgICAJaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKLSAgICAJICAgIHRyeSB7Ci0gICAgCSAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOwotICAgIAkgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gY291bGQgIgotICAgIAkgICAgICAgICAgICArICJub3QgYmUgc2V0OiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgfQotICAgIAl9CisKKyAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7CisgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKKyAgICAgICAgaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOworICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gY291bGQgIgorICAgICAgICAgICAgICAgICAgICArICJub3QgYmUgc2V0OiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVzZXRzIHRoZSBpc29sYXRpb24gbGV2ZWwgZm9yIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gcGFzc2VkLgogICAgICAqIElmIHRoZSB0cmFuc2FjdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmUKQEAgLTM3MywzODIgKzM3MywzODIgQEAKICAgICAgKiBpc29sYXRpb24gbGV2ZWwgZnJvbSB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQuIEVsc2UsCiAgICAgICogaXQgc2V0cyBpdCB0byB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIHBhc3NlZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAcGFyYW0JdHJhbklzb2wJaW50Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKLSAgICAgKgkJCQkJb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRyYW5Jc29sICAgIGludAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCisgICAgICogICAgICAgICAgICAgICAgICAgIG9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCiAgICAgICovCiAgICAgdm9pZCByZXNldElzb2xhdGlvbihjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMsIGludCB0cmFuSXNvbCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJCi0gICAgCWphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgIAlpZihjb24gPT0gbnVsbCkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCQotICAgIAlTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKLSAgICAJaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwotICAgIAkgICAgCi0gICAgCSAgICBpZihndWFyYW50ZWVJc29sYXRpb25MZXZlbCAhPSBudWxsICYmIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgICAgICBib29sZWFuIGd1YXJhbnRlZSA9IChuZXcgQm9vbGVhbihndWFyYW50ZWVJc29sYXRpb25MZXZlbC50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgCSAgICAgICAgCi0gICAgCSAgICAgICAgaWYoZ3VhcmFudGVlKSB7Ci0gICAgCSAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7Ci0gICAgCSAgICAgICAgICAgIHRyeSB7Ci0gICAgCSAgICAgICAgICAgICAgICBpZih0cmFuSXNvbGF0aW9uSW50ICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOwotICAgIAkgICAgICAgICAgICAgICAgfQotICAgIAkgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgotICAgIAkgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgfSBlbHNlIHsKLSAgICAJICAgICAgICAgICAgdHJ5IHsKLSAgICAJICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sKTsKLSAgICAJICAgICAgICAgICAgICAgIH0KLSAgICAJICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKLSAgICAJICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgICAgICAgICAgfQotICAgIAkgICAgICAgIH0KLSAgICAJICAgIH0KLSAgICAJfQorCisgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOworICAgICAgICBpZihjb24gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIFN0cmluZyBndWFyYW50ZWVJc29sYXRpb25MZXZlbCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKKworICAgICAgICAgICAgaWYoZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgIT0gbnVsbCAmJiBndWFyYW50ZWVJc29sYXRpb25MZXZlbC5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBndWFyYW50ZWUgPSAobmV3IEJvb2xlYW4oZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOworCisgICAgICAgICAgICAgICAgaWYoZ3VhcmFudGVlKSB7CisgICAgICAgICAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0cmFuSXNvbGF0aW9uSW50ICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CisgICAgICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGludGVnZXIgZXF1aXZhbGVudCBvZiB0aGUgc3RyaW5nIHNwZWNpZnlpbmcKICAgICAgKiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXRyYW5Jc29sYXRpb24Jc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbiBsZXZlbAotICAgICAqIEByZXR1cm4JdHJhbklzb2xhdGlvbkludAl0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gY29uc3RhbnQKLSAgICAgKgkJCQkJZm9yIHRoZSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uLgorICAgICAqIEBwYXJhbSAgICB0cmFuSXNvbGF0aW9uICAgIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5Jc29sYXRpb25JbnQgICAgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGNvbnN0YW50CisgICAgICogICAgICAgICAgICAgICAgICAgIGZvciB0aGUgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbi4KICAgICAgKi8KICAgICBwcml2YXRlIGludCBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludChTdHJpbmcgdHJhbklzb2xhdGlvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLXVuY29tbWl0dGVkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfVU5DT01NSVRURUQ7Ci0gICAgCX0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtY29tbWl0dGVkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfQ09NTUlUVEVEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZXBlYXRhYmxlLXJlYWQiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVQRUFUQUJMRV9SRUFEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJzZXJpYWxpemFibGUiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fU0VSSUFMSVpBQkxFOwotICAgIAl9IGVsc2UgewotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJJbnZhbGlkIHRyYW5zYWN0aW9uIGlzb2xhdGlvbjsgdGhlIHRyYW5zYWN0aW9uICIKLSAgICAJICAgICAgICArICJpc29sYXRpb24gbGV2ZWwgY2FuIGJlIGVtcHR5IG9yIGFueSBvZiB0aGUgZm9sbG93aW5nOiAiCi0gICAgCSAgICAgICAgICAgICsgInJlYWQtdW5jb21taXR0ZWQsIHJlYWQtY29tbWl0dGVkLCByZXBlYXRhYmxlLXJlYWQsIHNlcmlhbGl6YWJsZSIpOwotICAgIAl9CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC11bmNvbW1pdHRlZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX1VOQ09NTUlUVEVEOworICAgICAgICB9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLWNvbW1pdHRlZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX0NPTU1JVFRFRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVwZWF0YWJsZS1yZWFkIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFUEVBVEFCTEVfUkVBRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgic2VyaWFsaXphYmxlIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1NFUklBTElaQUJMRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiSW52YWxpZCB0cmFuc2FjdGlvbiBpc29sYXRpb247IHRoZSB0cmFuc2FjdGlvbiAiCisgICAgICAgICAgICAgICAgKyAiaXNvbGF0aW9uIGxldmVsIGNhbiBiZSBlbXB0eSBvciBhbnkgb2YgdGhlIGZvbGxvd2luZzogIgorICAgICAgICAgICAgICAgICAgICArICJyZWFkLXVuY29tbWl0dGVkLCByZWFkLWNvbW1pdHRlZCwgcmVwZWF0YWJsZS1yZWFkLCBzZXJpYWxpemFibGUiKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCW91dAk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgb3V0ICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihqYXZhLmlvLlByaW50V3JpdGVyIG91dCkgewogICAgICAgICBsb2dXcml0ZXIgPSBvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBhc3NvY2lhdGVkIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gSmF2YUJlYW4uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmEJPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPmdldFJlc291cmNlQWRhcHRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcmEgICAgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlc291cmNlQWRhcHRlcihqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgcmEpIHsKLSAgICAgICAgdGhpcy5yYSA9IHJhOyAgIAorICAgICAgICB0aGlzLnJhID0gcmE7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHVzZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFVzZXIoU3RyaW5nIHVzZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUsIHVzZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHJldHVybgl1c2VyCisgICAgICogQHJldHVybiAgICB1c2VyCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR1c2VyKFN0cmluZyB1c2VyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FLCB1c2VyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEByZXR1cm4JdXNlcgorICAgICAqIEByZXR1cm4gICAgdXNlcgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dXNlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHBhcmFtCXBhc3N3ZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBhc3N3ZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UGFzc3dvcmQoU3RyaW5nIHBhc3N3ZCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCwgcGFzc3dkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHJldHVybglwYXNzd2QKKyAgICAgKiBAcmV0dXJuICAgIHBhc3N3ZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFzc3dvcmQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEBwYXJhbQlwYXNzd2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwYXNzd2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHBhc3N3b3JkKFN0cmluZyBwYXNzd2QpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQsIHBhc3N3ZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEByZXR1cm4JcGFzc3dkCisgICAgICogQHJldHVybiAgICBwYXNzd2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2xhc3NOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY2xhc3NOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDbGFzc05hbWUoU3RyaW5nIGNsYXNzTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUsIGNsYXNzTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEByZXR1cm4JY2xhc3NOYW1lCisgICAgICogQHJldHVybiAgICBjbGFzc05hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENsYXNzTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEBwYXJhbQljbGFzc05hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjbGFzc05hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGNsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSwgY2xhc3NOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHJldHVybgljbGFzc05hbWUKKyAgICAgKiBAcmV0dXJuICAgIGNsYXNzTmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Y2xhc3NOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEBwYXJhbQljb25WbGRSZXEJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjb25WbGRSZXEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoU3RyaW5nIGNvblZsZFJlcSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVELCBjb25WbGRSZXEpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHJldHVybgljb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHBhcmFtCWNvblZsZFJlcQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNvblZsZFJlcSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Y29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZChTdHJpbmcgY29uVmxkUmVxKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQsIGNvblZsZFJlcSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdmFsaWRhdGlvbiBtZXRob2QgcmVxdWlyZWQKICAgICAgKgotICAgICAqIEBwYXJhbQl2YWxpZGF0aW9uTWV0aG9kCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdmFsaWRhdGlvbk1ldGhvZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VmFsaWRhdGlvbk1ldGhvZChTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCkgewogICAgICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCwgdmFsaWRhdGlvbk1ldGhvZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgY29ubmVjdGlvbiB2YWxpZGF0aW9uIG1ldGhvZCB0eXBlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXZhbGlkYXRpb24gbWV0aG9kCisgICAgICogQHJldHVybiAgICB2YWxpZGF0aW9uIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsaWRhdGlvbk1ldGhvZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHZhbGlkYXRpb24gbWV0aG9kIHJlcXVpcmVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsaWRhdGlvbk1ldGhvZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHZhbGlkYXRpb25NZXRob2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHZhbGlkYXRpb25NZXRob2QoU3RyaW5nIHZhbGlkYXRpb25NZXRob2QpIHsKICAgICAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QsIHZhbGlkYXRpb25NZXRob2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBtZXRob2QgdHlwZQogICAgICAqCi0gICAgICogQHJldHVybgl2YWxpZGF0aW9uIG1ldGhvZAorICAgICAqIEByZXR1cm4gICAgdmFsaWRhdGlvbiBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHZhbGlkYXRpb25NZXRob2QoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCXRhYmxlCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdGFibGUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25UYWJsZU5hbWUoU3RyaW5nIHRhYmxlKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUsIHRhYmxlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgl0YWJsZQorICAgICAqIEByZXR1cm4gICAgdGFibGUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbGlkYXRpb25UYWJsZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCXRhYmxlCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdGFibGUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHZhbGlkYXRpb25UYWJsZU5hbWUoU3RyaW5nIHRhYmxlKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUsIHRhYmxlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgl0YWJsZQorICAgICAqIEByZXR1cm4gICAgdGFibGUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHZhbGlkYXRpb25UYWJsZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEBwYXJhbQl0cm5Jc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cm5Jc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKFN0cmluZyB0cm5Jc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04sIHRybklzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEBwYXJhbQl0cm5Jc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cm5Jc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHRyYW5zYWN0aW9uSXNvbGF0aW9uKFN0cmluZyB0cm5Jc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04sIHRybklzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR0cmFuc2FjdGlvbklzb2xhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZAogICAgICAqCi0gICAgICogQHBhcmFtCWd1YXJhbnRlZUlzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGd1YXJhbnRlZUlzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCwgZ3VhcmFudGVlSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQorICAgICAqIEByZXR1cm4gICAgaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQKICAgICAgKgotICAgICAqIEBwYXJhbQlndWFyYW50ZWVJc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBndWFyYW50ZWVJc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKFN0cmluZyBndWFyYW50ZWVJc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwsIGd1YXJhbnRlZUlzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKKyAgICAgKiBAcmV0dXJuICAgIGlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQppbmRleCA1NTViZTc3Li5lYTU0MDc2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQpAQCAtMjYsOCArMjYsOCBAQAogLyoqCiAgKiA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDUKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzA1CisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgUmVzb3VyY2VBZGFwdGVyIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHsKIApAQCAtMzcsNTIgKzM3LDUyIEBACiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBlbmRwb2ludEFjdGl2YXRpb24KICAgICAgKiB3aGljaCBqdXN0IHRocm93cyA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWVmCTxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCWFzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgotICAgICAqIEB0aHJvd3MJPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtZWYgICAgPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgYXMgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kcG9pbnRBY3RpdmF0aW9uKE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgbWVmLCBBY3RpdmF0aW9uU3BlYyBhcykgdGhyb3dzIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIlRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgSkRCQyBjb25uZWN0b3IiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBtZXRob2QgaW1wbGVtZW50YXRpb24gZm9yIGVuZHBvaW50RGVhY3RpdmF0aW9uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWVmCTxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCWFzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtZWYgICAgPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgYXMgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kcG9pbnREZWFjdGl2YXRpb24oTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBtZWYsIEFjdGl2YXRpb25TcGVjIGFzKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBnZXRYQVJlc291cmNlcwogICAgICAqIHdoaWNoIGp1c3QgdGhyb3dzIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcGVjcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4gYXJyYXkKLSAgICAgKiBAdGhyb3dzCTxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc3BlY3MgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+IGFycmF5CisgICAgICogQHRocm93cyAgICA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKSB0aHJvd3MgTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiVGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBKREJDIGNvbm5lY3RvciIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IGltcGxlbWVudGF0aW9uIG9mIHN0YXJ0IG1ldGhvZAogICAgICAqCi0gICAgICogQHBhcmFtCWN0eAk8Y29kZT5Cb290c3RyYXBDb250ZXh0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjdHggICAgPGNvZGU+Qm9vdHN0cmFwQ29udGV4dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdGFydChCb290c3RyYXBDb250ZXh0IGN0eCkgdGhyb3dzIFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNvdXJjZSBBZGFwdGVyIGlzIHN0YXJ0aW5nIHdpdGggY29uZmlndXJhdGlvbiA6IiArIHJhUHJvcCk7CiAgICAgICAgIGlmIChyYVByb3AgPT0gbnVsbCB8fCAhcmFQcm9wLmVxdWFscygiVkFMSUQiKSkgewotCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIlJlc291cmNlIGFkYXB0ZXIgY2Fubm90IHN0YXJ0LiBJdCBpcyBjb25maWd1cmVkIGFzIDogIiArIHJhUHJvcCk7Ci0JfSAKKyAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJSZXNvdXJjZSBhZGFwdGVyIGNhbm5vdCBzdGFydC4gSXQgaXMgY29uZmlndXJlZCBhcyA6ICIgKyByYVByb3ApOwogICAgIH0KLSAgICAKKyAgICB9CisKICAgICAvKioKICAgICAgKiBFbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBzdG9wIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0b3AoKSB7Ci0gICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRSQVByb3BlcnR5KFN0cmluZyBzKSB7CkBAIC05Miw1ICs5Miw1IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRSQVByb3BlcnR5KCkgewogICAgICAgICByZXR1cm4gcmFQcm9wOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCmluZGV4IDVlMTRkNDQuLmZmMGYwMmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9IiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvc3BpIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTI5LDU1ICsyOSw1NSBAQAogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxNCI+Ci0gICAgCQotICAgIAk8bWtkaXIgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiLz4KLSAgICAJCi0JPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiIGJhc2VkaXI9IiR7Y2xhc3MuZGlyfSIKKworICAgICAgICA8bWtkaXIgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiLz4KKworICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCiAgICAgICAgIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosIGNvbS9zdW4vZ2pjL3V0aWwvKiovKiwgY29tL3N1bi9namMvY29tbW9uLyoqLyoiIGV4Y2x1ZGVzPSJjb20vc3VuL2dqYy9jY2kvKiovKixjb20vc3VuL2dqYy9zcGkvMS40LyoqLyoiLz4KLSAgICAgICAgCisKICAgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWNwLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1jcC54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEteGEueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS14YS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZG0ueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kbS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZHMueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kcy54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8ZGVsZXRlIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9jb20iLz4KLSAgIAk8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIvPgotICAgCTxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIvPgotICAgCQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8ZGVsZXRlIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9jb20iLz4KKyAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIvPgorICAgICAgIDxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIvPgorCiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTMiLz4KLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDE0LCBidWlsZDEzIi8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxNCwgYnVpbGQxMyIvPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sCmluZGV4IDBmM2Q1MTAuLjE3M2JmZWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwKQEAgLTIyLDY5ICsyMiw2OSBAQAogICAgICAgICAgICB2ZXJzaW9uPSIxLjUiPgogCiAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgotICAgIDwhLS0gVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYSAKKyAgICA8IS0tIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEKICAgICAgICAgIGRlc2NyaXB0aW9uIGZvciB0aGUgcmVzb3VyY2UgYWRhcHRlci4KICAgICAtLT4KICAgICA8ZGVzY3JpcHRpb24+UmVzb3VyY2UgYWRhcHRlciB3cmFwcGluZyBEYXRhc291cmNlIGltcGxlbWVudGF0aW9uIG9mIGRyaXZlcjwvZGVzY3JpcHRpb24+Ci0gICAgCisKICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkaXNwbGF5LW5hbWUiIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgotICAgIDwhLS0gVGhlIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhIG5hbWUgdGhhdCAKKyAgICA8IS0tIFRoZSBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYSBuYW1lIHRoYXQKICAgICAgICAgIGlzIGludGVuZGVkIHRvIGJlIGRpc3BsYXllZCBieSB0b29scy4KICAgICAtLT4KICAgICA8ZGlzcGxheS1uYW1lPkRhdGFTb3VyY2UgUmVzb3VyY2UgQWRhcHRlcjwvZGlzcGxheS1uYW1lPgotICAgIAorCiAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiaWNvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+CiAgICAgPCEtLSBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxpY29uPgotICAgICAgICAgICAgVGhpcyAic21hbGwtaWNvbiIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UuIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIAotICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgxNiB4IDE2KSAKKyAgICAgICAgICAgIFRoaXMgInNtYWxsLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgxNiB4IDE2KQogICAgICAgICAgICAgaWNvbiAtIEpQRUcgb3IgR0lGIGltYWdlLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgICAgICA8c21hbGwtaWNvbj5zbWFsbGljb24uanBnPC9zbWFsbC1pY29uPgotICAgICAgICAKLSAgICAgICAgICAgIFRoaXMgImxhcmdlLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSAKLSAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMzIgeCAzMikgCisKKyAgICAgICAgICAgIFRoaXMgImxhcmdlLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgzMiB4IDMyKQogICAgICAgICAgICAgaWNvbiAtIEpQRUcgb3IgR0lGIGltYWdlLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCi0gICAgICAgICAgICA8bGFyZ2UtaWNvbj5sYXJnZWljb24uanBnPC9sYXJnZS1pY29uPiAgIAorICAgICAgICAgICAgPGxhcmdlLWljb24+bGFyZ2VpY29uLmpwZzwvbGFyZ2UtaWNvbj4KICAgICAgICAgPC9pY29uPgogICAgIC0tPgogICAgIDxpY29uPgogICAgICAgICA8c21hbGwtaWNvbj48L3NtYWxsLWljb24+Ci0gICAgICAgIDxsYXJnZS1pY29uPjwvbGFyZ2UtaWNvbj4gICAKKyAgICAgICAgPGxhcmdlLWljb24+PC9sYXJnZS1pY29uPgogICAgIDwvaWNvbj4KLSAgICAKKwogICAgIDwhLS0gVGhlICJ2ZW5kb3ItbmFtZSIgZWxlbWVudCBzaG91bGQgb2NjdXIgZXhhY3RseSBvbmNlLiAtLT4KICAgICA8IS0tIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGRyaXZlciB2ZW5kb3IuIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgPHZlbmRvci1uYW1lPlhZWiBJTkMuPC92ZW5kb3ItbmFtZT4KICAgICAtLT4KICAgICA8dmVuZG9yLW5hbWU+U3VuIE1pY3Jvc3lzdGVtczwvdmVuZG9yLW5hbWU+Ci0gICAgCisKICAgICA8IS0tIFRoZSAiZWlzLXR5cGUiIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGV4YWN0bHkgb25jZS4gLS0+Ci0gICAgPCEtLSBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSBkYXRhYmFzZSwgZm9yIGV4YW1wbGUgdGhlIHByb2R1Y3QgbmFtZSBvZiAKKyAgICA8IS0tIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIGRhdGFiYXNlLCBmb3IgZXhhbXBsZSB0aGUgcHJvZHVjdCBuYW1lIG9mCiAgICAgICAgICB0aGUgZGF0YWJhc2UgaW5kZXBlbmRlbnQgb2YgYW55IHZlcnNpb24gaW5mb3JtYXRpb24uIFRoZSBmb2xsb3dpbmcKICAgICAgICAgIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxlaXMtdHlwZT5YWVo8L2Vpcy10eXBlPgogICAgIC0tPgogICAgIDxlaXMtdHlwZT5EYXRhYmFzZTwvZWlzLXR5cGU+Ci0gICAgCisKICAgICA8IS0tIFRoZSAicmVzb3VyY2VhZGFwdGVyLXZlcnNpb24iIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGV4YWN0bHkgb25jZS4gLS0+Ci0gICAgPCEtLSBUaGlzIHNwZWNpZmllcyBhIHN0cmluZyBiYXNlZCB2ZXJzaW9uIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGZyb20gCisgICAgPCEtLSBUaGlzIHNwZWNpZmllcyBhIHN0cmluZyBiYXNlZCB2ZXJzaW9uIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGZyb20KICAgICAgICAgIHRoZSBkcml2ZXIgdmVuZG9yLiBUaGUgZGVmYXVsdCBpcyBiZWluZyBzZXQgYXMgMS4wLiBUaGUgZHJpdmVyCiAgICAgICAgICB2ZW5kb3IgY2FuIGNoYW5nZSBpdCBhcyByZXF1aXJlZC4KICAgICAtLT4KICAgICA8cmVzb3VyY2VhZGFwdGVyLXZlcnNpb24+MS4wPC9yZXNvdXJjZWFkYXB0ZXItdmVyc2lvbj4KLSAgICAKKwogICAgIDwhLS0gVGhpcyAibGljZW5zZSIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UgLS0+CiAgICAgPCEtLSBUaGlzIHNwZWNpZmllcyBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzIGZvciB0aGUgcmVzb3VyY2UgYWRhcHRlciBtb2R1bGUuCiAgICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxsaWNlbnNlPgogICAgICAgICAgICAgVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBpbmNsdWRpbmcgMC4KICAgICAgICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gCi0gICAgICAgICAgICAgICAgcHJvdmlkZSBhIGRlc2NyaXB0aW9uIGZvciB0aGUgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBvZiB0aGUgCi0gICAgICAgICAgICAgICAgcmVzb3VyY2UgYWRhcHRlciBsaWtlIGR1cmF0aW9uIG9mIGxpY2Vuc2UsIG51bWJlcm9mIGNvbm5lY3Rpb24gCisgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvCisgICAgICAgICAgICAgICAgcHJvdmlkZSBhIGRlc2NyaXB0aW9uIGZvciB0aGUgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBvZiB0aGUKKyAgICAgICAgICAgICAgICByZXNvdXJjZSBhZGFwdGVyIGxpa2UgZHVyYXRpb24gb2YgbGljZW5zZSwgbnVtYmVyb2YgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9ucy4KICAgICAgICAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgICAgIAorCiAgICAgICAgICAgICBUaGlzIHNwZWNpZmllcyB3aGV0aGVyIGEgbGljZW5zZSBpcyByZXF1aXJlZCB0byBkZXBsb3kgYW5kIHVzZSB0aGUgcmVzb3VyY2UgYWRhcHRlci4KICAgICAgICAgICAgIERlZmF1bHQgaXMgZmFsc2UuCiAgICAgICAgICAgICA8bGljZW5zZS1yZXF1aXJlZD5mYWxzZTwvbGljZW5zZS1yZXF1aXJlZD4KQEAgLTkzLDI0ICs5MywyNCBAQAogICAgIDxsaWNlbnNlPgogICAgICAgICA8bGljZW5zZS1yZXF1aXJlZD5mYWxzZTwvbGljZW5zZS1yZXF1aXJlZD4KICAgICA8L2xpY2Vuc2U+Ci0gICAgCisKICAgICA8cmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAKLSAgICAgICAgPCEtLSAKLSAgICAgICAgICAgIFRoZSAiY29uZmlnLXByb3BlcnR5IiBlbGVtZW50cyBjYW4gaGF2ZSB6ZXJvIG9yIG1vcmUgImRlc2NyaXB0aW9uIiAKKworICAgICAgICA8IS0tCisgICAgICAgICAgICBUaGUgImNvbmZpZy1wcm9wZXJ0eSIgZWxlbWVudHMgY2FuIGhhdmUgemVybyBvciBtb3JlICJkZXNjcmlwdGlvbiIKICAgICAgICAgICAgIGVsZW1lbnRzLiBUaGUgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBhcmUgbm90IGJlaW5nIGluY2x1ZGVkCiAgICAgICAgICAgICBpbiB0aGUgImNvbmZpZy1wcm9wZXJ0eSIgZWxlbWVudHMgYmVsb3cuIFRoZSBkcml2ZXIgdmVuZG9yIGNhbgogICAgICAgICAgICAgYWRkIHRoZW0gYXMgcmVxdWlyZWQuCiAgICAgICAgIC0tPgotICAgICAgICAKKwogICAgICAgICA8cmVzb3VyY2VhZGFwdGVyLWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5SZXNvdXJjZUFkYXB0ZXI8L3Jlc291cmNlYWRhcHRlci1jbGFzcz4KLSAgICAgICAgCisKICAgICAgICAgPG91dGJvdW5kLXJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgCisKICAgICAgICAgICAgIDxjb25uZWN0aW9uLWRlZmluaXRpb24+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8bWFuYWdlZGNvbm5lY3Rpb25mYWN0b3J5LWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvbWFuYWdlZGNvbm5lY3Rpb25mYWN0b3J5LWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiB0aGVzZSBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+U2VydmVyTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT50ZXN0ZGI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KIAotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Vc2VyPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmRidXNlcjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgpAQCAtMTM5LDEyICsxMzksMTIgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5kYnVzZXI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KIAotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5QYXNzd29yZDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5kYnBhc3N3b3JkPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlVSTDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5qZGJjOmRlcmJ5Oi8vbG9jYWxob3N0OjE1MjcvdGVzdGRiO2NyZWF0ZT10cnVlPC9jb25maWctcHJvcGVydHktdmFsdWU+CkBAIC0xNTQsNyArMTU0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5Pi0tPgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5EZXNjcmlwdGlvbjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5PcmFjbGUgdGhpbiBkcml2ZXIgRGF0YXNvdXJjZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgpAQCAtMTY1LDE3ICsxNjUsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Sb2xlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+TG9naW5UaW1lT3V0PC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RHJpdmVyUHJvcGVydGllczwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KQEAgLTE4Niw3ICsxODYsNyBAQAogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+IzwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5DbGFzc05hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+b3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERhdGFTb3VyY2U0MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgpAQCAtMTk3LDMxICsxOTcsMzEgQEAKICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjtjcmVhdGU9dHJ1ZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KIAotICAgICAgCQk8Y29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Q29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZDwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5mYWxzZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25NZXRob2Q8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VmFsaWRhdGlvblRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5UcmFuc2FjdGlvbklzb2xhdGlvbjwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5HdWFyYW50ZWVJc29sYXRpb25MZXZlbDwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PiAKKyAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZmFsc2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25NZXRob2Q8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uVGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VHJhbnNhY3Rpb25Jc29sYXRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5HdWFyYW50ZWVJc29sYXRpb25MZXZlbDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogPCEtLSBwcm9wZXJ0aWVzIHRvIHRlc3Qgc2V0dGluZyBvZiBhIG5vbi1TdHJpbmcgdmFsdWUgd2l0aCBvdmVycmlkZGVuIHNldHRlcnMgLS0+CiAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPk5vblN0cmluZ1dpdGhOb092ZXJyaWRkZW5TZXR0ZXI8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgpAQCAtMjM1LDU0ICsyMzUsNTQgQEAKICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KIAogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uZmFjdG9yeS1pbnRlcmZhY2U+amF2YXguc3FsLkRhdGFTb3VyY2U8L2Nvbm5lY3Rpb25mYWN0b3J5LWludGVyZmFjZT4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uZmFjdG9yeS1pbXBsLWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlPC9jb25uZWN0aW9uZmFjdG9yeS1pbXBsLWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb24taW50ZXJmYWNlPmphdmEuc3FsLkNvbm5lY3Rpb248L2Nvbm5lY3Rpb24taW50ZXJmYWNlPgotICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uLWltcGwtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXI8L2Nvbm5lY3Rpb24taW1wbC1jbGFzcz4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgPC9jb25uZWN0aW9uLWRlZmluaXRpb24+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPHRyYW5zYWN0aW9uLXN1cHBvcnQ+TG9jYWxUcmFuc2FjdGlvbjwvdHJhbnNhY3Rpb24tc3VwcG9ydD4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8YXV0aGVudGljYXRpb24tbWVjaGFuaXNtPgogICAgICAgICAgICAgICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KICAgICAgICAgICAgICAgICA8IS0tIE5vdCBpbmNsdWRpbmcgdGhlICJkZXNjcmlwdGlvbiIgZWxlbWVudCAtLT4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxhdXRoZW50aWNhdGlvbi1tZWNoYW5pc20tdHlwZT5CYXNpY1Bhc3N3b3JkPC9hdXRoZW50aWNhdGlvbi1tZWNoYW5pc20tdHlwZT4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjcmVkZW50aWFsLWludGVyZmFjZT5qYXZheC5yZXNvdXJjZS5zcGkuc2VjdXJpdHkuUGFzc3dvcmRDcmVkZW50aWFsPC9jcmVkZW50aWFsLWludGVyZmFjZT4KICAgICAgICAgICAgIDwvYXV0aGVudGljYXRpb24tbWVjaGFuaXNtPgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxyZWF1dGhlbnRpY2F0aW9uLXN1cHBvcnQ+ZmFsc2U8L3JlYXV0aGVudGljYXRpb24tc3VwcG9ydD4KLSAgICAgICAgICAgIAorCiAgICAgICAgIDwvb3V0Ym91bmQtcmVzb3VyY2VhZGFwdGVyPgotCTxhZG1pbm9iamVjdD4KLQkgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW48L2FkbWlub2JqZWN0LWludGVyZmFjZT4KLQkgICAgICAgPGFkbWlub2JqZWN0LWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbkltcGw8L2FkbWlub2JqZWN0LWNsYXNzPgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5TY2hlbWFOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkpuZGlOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPk5vT2ZSb3dzPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuSW50ZWdlcjwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgPGFkbWlub2JqZWN0PgorICAgICAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgorICAgICAgICAgICA8YWRtaW5vYmplY3QtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluSW1wbDwvYWRtaW5vYmplY3QtY2xhc3M+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlNjaGVtYU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Sm5kaU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Tm9PZlJvd3M8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5JbnRlZ2VyPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPC9hZG1pbm9iamVjdD4KLSAgICAgICAgCisKICAgICA8L3Jlc291cmNlYWRhcHRlcj4KLSAgICAKKwogPC9jb25uZWN0b3I+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKaW5kZXggYjIxOWNkMi4uMTI0ODA5YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQpAQCAtMjQsMjYgKzI0LDI2IEBACiAvKioKICAqIENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlcnsgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlcnsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgYSA8Y29kZT5Db25uZWN0aW9uIDwvY29kZT4gb2JqZWN0IHRvIHRoZSA8Y29kZT5Db25uZWN0aW9uRmFjdG9yeTwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCWluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHJldHVybglBIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gZ2V0dGluZyB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4uCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgaW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIEEgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvciBpbiBnZXR0aW5nIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGFsbG9jYXRlQ29ubmVjdGlvbihNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLAotICAgIAkJCQkgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKSAKLSAgICAJCQkJICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotCU1hbmFnZWRDb25uZWN0aW9uIG1jID0gbWNmLmNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGluZm8pOwotCXJldHVybiBtYy5nZXRDb25uZWN0aW9uKG51bGwsIGluZm8pOyAgICAJCQkJICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24geworICAgIE1hbmFnZWRDb25uZWN0aW9uIG1jID0gbWNmLmNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGluZm8pOworICAgIHJldHVybiBtYy5nZXRDb25uZWN0aW9uKG51bGwsIGluZm8pOwogICAgIH0KLSAgICAKKwogICAgIC8qCiAgICAgICogVGhpcyBjbGFzcyBjb3VsZCBlZmZlY3RpdmVseSBpbXBsZW1lbnQgQ29ubmVjdGlvbiBwb29saW5nIGFsc28uCiAgICAgICogQ291bGQgYmUgZG9uZSBmb3IgRkNTLgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEKaW5kZXggMzljNzg3Ni4uYzQ3N2ZjMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCkBAIC0xOSwxMCArMTksMTAgQEAKIC8qKgogICogQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZveyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm97CiAKICAgICBwcml2YXRlIFN0cmluZyB1c2VyOwogICAgIHByaXZhdGUgU3RyaW5nIHBhc3N3b3JkOwpAQCAtMzAsOCArMzAsOCBAQAogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCVVzZXIgTmFtZS4KLSAgICAgKiBAcGFyYW0JcGFzc3dvcmQJUGFzc3dvcmQKKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICBVc2VyIE5hbWUuCisgICAgICogQHBhcmFtICAgIHBhc3N3b3JkICAgIFBhc3N3b3JkCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyhTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkKSB7CiAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7CkBAIC00MSw3ICs0MSw3IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSB1c2VyIG5hbWUgb2YgdGhlIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKgotICAgICAqIEByZXR1cm4JVXNlciBuYW1lIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KKyAgICAgKiBAcmV0dXJuICAgIFVzZXIgbmFtZSBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyKCkgewogICAgICAgICByZXR1cm4gdXNlcjsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHBhc3N3b3JkIG9mIHRoZSBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVBhc3N3b3JkIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KKyAgICAgKiBAcmV0dXJuICAgIFBhc3N3b3JkIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gcGFzc3dvcmQ7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgLyoqCiAgICAgICogVmVyaWZ5IHdoZXRoZXIgdHdvIENvbm5lY3Rpb25SZXF1ZXN0SW5mb3MgYXJlIGVxdWFsLgogICAgICAqCi0gICAgICogQHJldHVybglUcnVlLCBpZiB0aGV5IGFyZSBlcXVhbCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqIEByZXR1cm4gICAgVHJ1ZSwgaWYgdGhleSBhcmUgZXF1YWwgYW5kIGZhbHNlIG90aGVyd2lzZS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewogICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTsKQEAgLTc1LDE4ICs3NSwxOCBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgaGFzaGNvZGUgb2YgdGhlIG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaENvZGUuCisgICAgICogQHJldHVybiAgICBoYXNoQ29kZS4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewogICAgICAgICBTdHJpbmcgcmVzdWx0ID0gIiIgKyB1c2VyICsgcGFzc3dvcmQ7CiAgICAgICAgIHJldHVybiByZXN1bHQuaGFzaENvZGUoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21wYXJlcyB0d28gb2JqZWN0cy4KICAgICAgKgotICAgICAqIEBwYXJhbQlvMQlGaXJzdCBvYmplY3QuCi0gICAgICogQHBhcmFtCW8yCVNlY29uZCBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG8xICAgIEZpcnN0IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgbzIgICAgU2Vjb25kIG9iamVjdC4KICAgICAgKi8KICAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbChPYmplY3QgbzEsIE9iamVjdCBvMikgewogICAgICAgICBpZiAobzEgPT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IDRiZjlmZWQuLjMyMzQwMzIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTMxLDE0ICszMSwxNCBAQAogLyoqCiAgKiBEYXRhIFNvdXJjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzAKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMwCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiAKIHB1YmxpYyBjbGFzcyBEU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBleHRlbmRzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB7Ci0gICAKKwogICAgIHByaXZhdGUgdHJhbnNpZW50IGphdmF4LnNxbC5EYXRhU291cmNlIGRhdGFTb3VyY2VPYmo7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNDksMTkgKzQ5LDE5IEBACiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIEVJUyByZXNvdXJjZQogICAgICAqIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCi0gICAgICogICAgICAgCSAgICAgICAgICAgICAJYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+Ci0gICAgICogICAgICAgCSAgICAgICAgICAgICAJb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQotICAgICAqICAgICAgIAkJCQljcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0Ci0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdCAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwKICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC02OSw1NSArNjksNTUgQEAKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGMgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLCBzdWJqZWN0LCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoZGF0YVNvdXJjZU9iaiA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZihkc09iakJ1aWxkZXIgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGRzT2JqQnVpbGRlciA9IG5ldyBEYXRhU291cmNlT2JqZWN0QnVpbGRlcihzcGVjKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZU9iaiA9IChqYXZheC5zcWwuRGF0YVNvdXJjZSkgZHNPYmpCdWlsZGVyLmNvbnN0cnVjdERhdGFTb3VyY2VPYmplY3QoKTsKICAgICAgICAgICAgIH0gY2F0Y2goQ2xhc3NDYXN0RXhjZXB0aW9uIGNjZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY2NlIiwgY2NlKTsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NjZSIsIGNjZSk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2UuUmVzb3VyY2VFeGNlcHRpb24oY2NlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkc0Nvbm4gPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewotCSAgICAvKiBGb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIvcGFzc3dkIG9mIHRoZSBjb25uZWN0aW9uIHBvb2wgaXMKLQkgICAgICogZXF1YWwgdG8gdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdAotCSAgICAgKiBnZXQgYSBjb25uZWN0aW9uIGZyb20gdGhpcyBwb29sIGRpcmVjdGx5LgotCSAgICAgKiBmb3IgYWxsIG90aGVyIGNvbmRpdGlvbnMgZ28gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24KLQkgICAgICovCi0JICAgIGlmICggaXNFcXVhbCggcGMsIGdldFVzZXIoKSwgZ2V0UGFzc3dvcmQoKSApICkgewotCSAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24ocGMuZ2V0VXNlck5hbWUoKSwgCi0JCSAgICBuZXcgU3RyaW5nKHBjLmdldFBhc3N3b3JkKCkpKTsKLQkgICAgfQorICAgICAgICAvKiBGb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIvcGFzc3dkIG9mIHRoZSBjb25uZWN0aW9uIHBvb2wgaXMKKyAgICAgICAgICogZXF1YWwgdG8gdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdAorICAgICAgICAgKiBnZXQgYSBjb25uZWN0aW9uIGZyb20gdGhpcyBwb29sIGRpcmVjdGx5LgorICAgICAgICAgKiBmb3IgYWxsIG90aGVyIGNvbmRpdGlvbnMgZ28gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24KKyAgICAgICAgICovCisgICAgICAgIGlmICggaXNFcXVhbCggcGMsIGdldFVzZXIoKSwgZ2V0UGFzc3dvcmQoKSApICkgeworICAgICAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24ocGMuZ2V0VXNlck5hbWUoKSwKKyAgICAgICAgICAgIG5ldyBTdHJpbmcocGMuZ2V0UGFzc3dvcmQoKSkpOworICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2NyZWF0ZV9jb25uIiwgc3FsZSk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBjb3VsZCBub3QgYmUgYWxsb2NhdGVkOiAiICsgCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19jcmVhdGVfY29ubiIsIHNxbGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGFsbG9jYXRlZDogIiArCiAgICAgICAgICAgICAgICAgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgZHNDb25uLCBwYywgdGhpcyk7CiAgICAgICAgIC8vR0pDSU5UCiAgICAgICAgIHNldElzb2xhdGlvbihtYyk7CiAgICAgICAgIGlzVmFsaWQobWMpOwogICAgICAgICByZXR1cm4gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvIAorICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0bwogICAgICAqIGFub3RoZXIgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jb3RoZXIJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCi0gICAgICoJCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIG90aGVyICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCisgICAgICogICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTEyOCw0MDkgKzEyOCw0MDkgQEAKICAgICAgICAgICogaWYgYW5kIG9ubHkgaWYgdGhlaXIgcHJvcGVydGllcyBhcmUgdGhlIHNhbWUuCiAgICAgICAgICAqLwogICAgICAgICBpZihvdGhlciBpbnN0YW5jZW9mIGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSkgewotICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG90aGVyTUNGID0gCisgICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnkgb3RoZXJNQ0YgPQogICAgICAgICAgICAgICAgIChjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpIG90aGVyOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BlYy5lcXVhbHMob3RoZXJNQ0Yuc3BlYyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlcnZlck5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc2VydmVyTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHNlcnZlck5hbWUoU3RyaW5nIHNlcnZlck5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSwgc2VydmVyTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXNlcnZlck5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBzZXJ2ZXJOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0c2VydmVyTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlcnZlck5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc2VydmVyTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFNlcnZlck5hbWUoU3RyaW5nIHNlcnZlck5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSwgc2VydmVyTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXNlcnZlck5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBzZXJ2ZXJOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvcnROdW1iZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcG9ydE51bWJlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHBvcnROdW1iZXIoU3RyaW5nIHBvcnROdW1iZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiwgcG9ydE51bWJlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBvcnROdW1iZXIKLSAgICAgKiBAc2VlCTxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBwb3J0TnVtYmVyCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0cG9ydE51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvcnROdW1iZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcG9ydE51bWJlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFBvcnROdW1iZXIoU3RyaW5nIHBvcnROdW1iZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiwgcG9ydE51bWJlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBvcnROdW1iZXIKLSAgICAgKiBAc2VlCTxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBwb3J0TnVtYmVyCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UG9ydE51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGF0YWJhc2VOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGF0YWJhc2VOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkYXRhYmFzZU5hbWUoU3RyaW5nIGRhdGFiYXNlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUsIGRhdGFiYXNlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGF0YWJhc2VOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkYXRhYmFzZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRhdGFiYXNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkYXRhYmFzZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkYXRhYmFzZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERhdGFiYXNlTmFtZShTdHJpbmcgZGF0YWJhc2VOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSwgZGF0YWJhc2VOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkYXRhYmFzZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRhdGFiYXNlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGF0YWJhc2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRhdGFTb3VyY2VOYW1lKFN0cmluZyBkc24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUsIGRzbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHNuCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRzbgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkYXRhU291cmNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERhdGFTb3VyY2VOYW1lKFN0cmluZyBkc24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUsIGRzbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHNuCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRzbgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREYXRhU291cmNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZXNjCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZXNjICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRlc2NyaXB0aW9uKFN0cmluZyBkZXNjKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OLCBkZXNjKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVzYwotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZXNjCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRlc2NyaXB0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlc2MJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlc2MgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2MpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04sIGRlc2MpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglkZXNjCi0gICAgICogQHNlZQk8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlc2MKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlud1Byb3RvY29sCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbndQcm90b2NvbCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0bmV0d29ya1Byb3RvY29sKFN0cmluZyBud1Byb3RvY29sKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCwgbndQcm90b2NvbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbndQcm90b2NvbAotICAgICAqIEBzZWUJPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbndQcm90b2NvbAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0bmV0d29ya1Byb3RvY29sKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHBhcmFtCW53UHJvdG9jb2wJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBud1Byb3RvY29sICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrUHJvdG9jb2woU3RyaW5nIG53UHJvdG9jb2wpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MLCBud1Byb3RvY29sKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHJldHVybglud1Byb3RvY29sCi0gICAgICogQHNlZQk8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHJldHVybiAgICBud1Byb3RvY29sCisgICAgICogQHNlZSAgICA8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXROZXR3b3JrUHJvdG9jb2woKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlyb2xlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcm9sZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0cm9sZU5hbWUoU3RyaW5nIHJvbGVOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FLCByb2xlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglyb2xlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICByb2xlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRyb2xlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jcm9sZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJvbGVOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJvbGVOYW1lKFN0cmluZyByb2xlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSwgcm9sZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jcm9sZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcm9sZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Um9sZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSk7CiAgICAgfQogCi0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHBhcmFtCWxvZ2luVGltZU91dAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZU91dCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0bG9naW5UaW1lT3V0KFN0cmluZyBsb2dpblRpbWVPdXQpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VULCBsb2dpblRpbWVPdXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWxvZ2luVGltZW91dAotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbG9naW5UaW1lb3V0CisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRsb2dpblRpbWVPdXQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lT3V0CTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lT3V0ICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dpblRpbWVPdXQoU3RyaW5nIGxvZ2luVGltZU91dCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQsIGxvZ2luVGltZU91dCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbG9naW5UaW1lb3V0Ci0gICAgICogQHNlZQk8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHJldHVybiAgICBsb2dpblRpbWVvdXQKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldExvZ2luVGltZU91dCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlbGltCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVsaW0gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRlbGltaXRlcihTdHJpbmcgZGVsaW0pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSLCBkZWxpbSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHJldHVybglkZWxpbQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVsaW0KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRlbGltaXRlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlbGltCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVsaW0gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlbGltaXRlcihTdHJpbmcgZGVsaW0pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSLCBkZWxpbSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHJldHVybglkZWxpbQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVsaW0KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlbGltaXRlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHJpdmVyUHJvcHMJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHJpdmVyUHJvcHMgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkcml2ZXJQcm9wZXJ0aWVzKFN0cmluZyBkcml2ZXJQcm9wcykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTLCBkcml2ZXJQcm9wcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRyaXZlclByb3BzCi0gICAgICogQHNlZQk8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHJpdmVyUHJvcHMKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkcml2ZXJQcm9wZXJ0aWVzKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHJpdmVyUHJvcHMJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHJpdmVyUHJvcHMgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREcml2ZXJQcm9wZXJ0aWVzKFN0cmluZyBkcml2ZXJQcm9wcykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTLCBkcml2ZXJQcm9wcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRyaXZlclByb3BzCi0gICAgICogQHNlZQk8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHJpdmVyUHJvcHMKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREcml2ZXJQcm9wZXJ0aWVzKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7CkBAIC01MzgsMTkgKzUzOCwxOSBAQAogCiAgICAgcHVibGljIERvdWJsZSBnZXROb25TdHJpbmdXaXRoTm9PdmVycmlkZGVuU2V0dGVyKCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgOiBnZXROb25TdHJpbmdXaXRoTm9PdmVycmlkZGVuU2V0dGVyKCkgY2FsbGVkIik7Ci0JcmV0dXJuIHRoaXMubm9uU3RyaW5nV2l0aE5vT3ZlcnJpZGRlblNldHRlcjsKKyAgICByZXR1cm4gdGhpcy5ub25TdHJpbmdXaXRoTm9PdmVycmlkZGVuU2V0dGVyOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldE5vblN0cmluZ1dpdGhOb092ZXJyaWRkZW5TZXR0ZXIoRG91YmxlIGRibCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IDogc2V0Tm9uU3RyaW5nV2l0aE5vT3ZlcnJpZGRlblNldHRlcigpIGNhbGxlZCIpOwotCXRoaXMubm9uU3RyaW5nV2l0aE5vT3ZlcnJpZGRlblNldHRlciA9IGRibDsKKyAgICB0aGlzLm5vblN0cmluZ1dpdGhOb092ZXJyaWRkZW5TZXR0ZXIgPSBkYmw7CiAgICAgfQogCiAgICAgcHVibGljIERvdWJsZSBnZXROb25TdHJpbmdXaXRoT3ZlcnJpZGRlblNldHRlcigpewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IDogZ2V0Tm9uU3RyaW5nV2l0aE92ZXJyaWRkZW5TZXR0ZXIoKSBjYWxsZWQiKTsKICAgICAgICAgcmV0dXJuIHRoaXMubm9uU3RyaW5nV2l0aE92ZXJyaWRkZW5TZXR0ZXI7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5vblN0cmluZ1dpdGhPdmVycmlkZGVuU2V0dGVyKERvdWJsZSBkYmwpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSA6IHNldE5vblN0cmluZ1dpdGhPdmVycmlkZGVuU2V0dGVyKERvdWJsZSkgY2FsbGVkIik7CiAgICAgICAgIHRoaXMubm9uU3RyaW5nV2l0aE92ZXJyaWRkZW5TZXR0ZXIgPSBkYmw7CkBAIC01NjcsMzUgKzU2NywzNSBAQAogICAgICAqIENoZWNrIGlmIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgcGFzc2VkIGZvciB0aGlzIGdldCBjb25uZWN0aW9uCiAgICAgICogcmVxdWVzdCBpcyBlcXVhbCB0byB0aGUgdXNlci9wYXNzd2Qgb2YgdGhpcyBjb25uZWN0aW9uIHBvb2wuCiAgICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoIFBhc3N3b3JkQ3JlZGVudGlhbCBwYywgU3RyaW5nIHVzZXIsIAorICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKCBQYXNzd29yZENyZWRlbnRpYWwgcGMsIFN0cmluZyB1c2VyLAogICAgICAgICBTdHJpbmcgcGFzc3dvcmQpIHsKLSAgICAgICAgCi0JLy9pZiBlcXVhbCBnZXQgZGlyZWN0IGNvbm5lY3Rpb24gZWxzZSAKLQkvL2dldCBjb25uZWN0aW9uIHdpdGggdXNlciBhbmQgcGFzc3dvcmQuCi0JCi0JaWYgKHVzZXIgPT0gbnVsbCAmJiBwYyA9PSBudWxsKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0KLQkKLQlpZiAoIHVzZXIgPT0gbnVsbCAmJiBwYyAhPSBudWxsICkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCX0KIAotCWlmKCBwYyA9PSBudWxsICkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JaWYgKCB1c2VyLmVxdWFscyggcGMuZ2V0VXNlck5hbWUoKSApICkgewotCSAgICBpZiAoIHBhc3N3b3JkID09IG51bGwgJiYgcGMuZ2V0UGFzc3dvcmQoKSA9PSBudWxsICkgewotCSAgICAgICAgcmV0dXJuIHRydWU7Ci0JICAgIH0KLQl9Ci0JCi0JaWYgKCB1c2VyLmVxdWFscyhwYy5nZXRVc2VyTmFtZSgpKSAmJiBwYXNzd29yZC5lcXVhbHMocGMuZ2V0UGFzc3dvcmQoKSkgKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0gCi0JCi0gICAgICAgIAotCXJldHVybiBmYWxzZTsKKyAgICAvL2lmIGVxdWFsIGdldCBkaXJlY3QgY29ubmVjdGlvbiBlbHNlCisgICAgLy9nZXQgY29ubmVjdGlvbiB3aXRoIHVzZXIgYW5kIHBhc3N3b3JkLgorCisgICAgaWYgKHVzZXIgPT0gbnVsbCAmJiBwYyA9PSBudWxsKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICggdXNlciA9PSBudWxsICYmIHBjICE9IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYoIHBjID09IG51bGwgKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICggdXNlci5lcXVhbHMoIHBjLmdldFVzZXJOYW1lKCkgKSApIHsKKyAgICAgICAgaWYgKCBwYXNzd29yZCA9PSBudWxsICYmIHBjLmdldFBhc3N3b3JkKCkgPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCB1c2VyLmVxdWFscyhwYy5nZXRVc2VyTmFtZSgpKSAmJiBwYXNzd29yZC5lcXVhbHMocGMuZ2V0UGFzc3dvcmQoKSkgKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworCisgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKaW5kZXggMjA2ODQzMC4uNzM5ZmY0ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKQEAgLTI4LDIyICsyOCwyMiBAQAogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKIC8qKgotICogSG9sZHMgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCwgd2hpY2ggaXMgdG8gYmUgCisgKiBIb2xkcyB0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LCB3aGljaCBpcyB0byBiZQogICogcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCiBwdWJsaWMgY2xhc3MgRGF0YVNvdXJjZSBpbXBsZW1lbnRzIGphdmF4LnNxbC5EYXRhU291cmNlLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSwKLQkJY29tLnN1bi5hcHBzZXJ2LmpkYmNyYS5EYXRhU291cmNlLCBqYWthcnRhLnJlc291cmNlLlJlZmVyZW5jZWFibGV7IAotCQkJCSAgIAorICAgICAgICBjb20uc3VuLmFwcHNlcnYuamRiY3JhLkRhdGFTb3VyY2UsIGpha2FydGEucmVzb3VyY2UuUmVmZXJlbmNlYWJsZXsKKwogICAgIHByaXZhdGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZjsKLSAgICBwcml2YXRlIENvbm5lY3Rpb25NYW5hZ2VyIGNtOwkJCQkgICAJCQkJICAgCisgICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsKICAgICBwcml2YXRlIGludCBsb2dpblRpbWVvdXQ7CiAgICAgcHJpdmF0ZSBQcmludFdyaXRlciBsb2dXcml0ZXI7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CQkJCSAgIAorICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwogICAgIHByaXZhdGUgUmVmZXJlbmNlIHJlZmVyZW5jZTsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC01MSw1NyArNTEsNTcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKIAogICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0LiBUaGlzIGlzIGNyZWF0ZWQgYnkgdGhlIAorICAgICAqIENvbnN0cnVjdHMgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0LiBUaGlzIGlzIGNyZWF0ZWQgYnkgdGhlCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IAotICAgICAqCQkJY3JlYXRpbmcgdGhpcyBvYmplY3QuCi0gICAgICogQHBhcmFtCWNtCTxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBvYmplY3QgZWl0aGVyIGFzc29jaWF0ZWQKLSAgICAgKgkJCXdpdGggQXBwbGljYXRpb24gc2VydmVyIG9yIFJlc291cmNlIEFkYXB0ZXIuCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgY3JlYXRpbmcgdGhpcyBvYmplY3QuCisgICAgICogQHBhcmFtICAgIGNtICAgIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBvYmplY3QgZWl0aGVyIGFzc29jaWF0ZWQKKyAgICAgKiAgICAgICAgICAgIHdpdGggQXBwbGljYXRpb24gc2VydmVyIG9yIFJlc291cmNlIEFkYXB0ZXIuCiAgICAgICovCiAgICAgcHVibGljIERhdGFTb3VyY2UgKE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsIENvbm5lY3Rpb25NYW5hZ2VyIGNtKSB7Ci0gICAgCXRoaXMubWNmID0gbWNmOwotICAgIAlpZiAoY20gPT0gbnVsbCkgewotICAgIAkgICAgdGhpcy5jbSA9IChDb25uZWN0aW9uTWFuYWdlcikgbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uTWFuYWdlcigpOwotICAgIAl9IGVsc2UgewotICAgIAkgICAgdGhpcy5jbSA9IGNtOwotICAgIAl9ICAgIAkKLSAgICB9ICAgCi0gICAgCisgICAgICAgIHRoaXMubWNmID0gbWNmOworICAgICAgICBpZiAoY20gPT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5jbSA9IChDb25uZWN0aW9uTWFuYWdlcikgbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uTWFuYWdlcigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5jbSA9IGNtOworICAgICAgICB9CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuCTxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuICAgICAgCisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbigpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAl0cnkgewotICAgIAkgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLG51bGwpOyAgICAJICAgIAotICAgIAl9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLG51bGwpOworICAgICAgICB9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewogLy8gVGhpcyBpcyB0ZW1wb3JhcnkuIFRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byBTRVZFUkUgYWZ0ZXIgVFAKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCX0KKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIAotICAgICAqIEBwYXJhbQl1c2VyCVVzZXIgbmFtZSBmb3IgdGhlIENvbm5lY3Rpb24uCi0gICAgICogQHBhcmFtCXB3ZAlQYXNzd29yZCBmb3IgdGhlIENvbm5lY3Rpb24uCi0gICAgICogQHJldHVybgk8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLiAgICAgIAorICAgICAqCisgICAgICogQHBhcmFtICAgIHVzZXIgICAgVXNlciBuYW1lIGZvciB0aGUgQ29ubmVjdGlvbi4KKyAgICAgKiBAcGFyYW0gICAgcHdkICAgIFBhc3N3b3JkIGZvciB0aGUgQ29ubmVjdGlvbi4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbihTdHJpbmcgdXNlciwgU3RyaW5nIHB3ZCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXRyeSB7Ci0gICAgCSAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbyA9IG5ldyBDb25uZWN0aW9uUmVxdWVzdEluZm8gKHVzZXIsIHB3ZCk7Ci0gICAgCSAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsaW5mbyk7Ci0gICAgCX0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbyA9IG5ldyBDb25uZWN0aW9uUmVxdWVzdEluZm8gKHVzZXIsIHB3ZCk7CisgICAgICAgICAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsaW5mbyk7CisgICAgICAgIH0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CiAvLyBUaGlzIGlzIHRlbXBvcmFyeS4gVGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIFNFVkVSRSBhZnRlciBUUAotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJfQotICAgIH0gICAgCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIKQEAgLTExNCw5MSArMTE0LDkxIEBACiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbihDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAKLSAgICAgICAgQ29ubmVjdGlvbiBkcml2ZXJDb24gPSBjb247IAorICAgICAgICBDb25uZWN0aW9uIGRyaXZlckNvbiA9IGNvbjsKICAgICAgICAgaWYgKGNvbiBpbnN0YW5jZW9mIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSB7Ci0gICAgICAgICAgIGRyaXZlckNvbiA9ICgoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIGNvbikuZ2V0Q29ubmVjdGlvbigpOyAKLSAgICAgICAgfSAKKyAgICAgICAgICAgZHJpdmVyQ29uID0gKChjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgY29uKS5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gZHJpdmVyQ29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9naW4gdGltZW91dAogICAgICAqCiAgICAgICogQHJldHVybiBsb2dpbiB0aW1lb3V0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0TG9naW5UaW1lb3V0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJcmV0dXJuCWxvZ2luVGltZW91dDsKKyAgICAgICAgcmV0dXJuICAgIGxvZ2luVGltZW91dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZ2luIHRpbWVvdXQKICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVvdXQJTG9naW4gdGltZW91dC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lb3V0ICAgIExvZ2luIHRpbWVvdXQuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9naW5UaW1lb3V0KGludCBsb2dpblRpbWVvdXQpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXRoaXMubG9naW5UaW1lb3V0ID0gbG9naW5UaW1lb3V0OworICAgICAgICB0aGlzLmxvZ2luVGltZW91dCA9IGxvZ2luVGltZW91dDsKICAgICB9Ci0gICAgCi0gICAgLyoqIAorCisgICAgLyoqCiAgICAgICogR2V0IHRoZSBsb2d3cml0ZXIgb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT4gUHJpbnRXcml0ZXIgPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIFByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXJldHVybglsb2dXcml0ZXI7CisgICAgICAgIHJldHVybiAgICBsb2dXcml0ZXI7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9nd3JpdGVyIG9uIHRoaXMgb2JqZWN0LgogICAgICAqCiAgICAgICogQHBhcmFtIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKFByaW50V3JpdGVyIGxvZ1dyaXRlcikgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7Ci0gICAgfSAgICAgICAgCi0gICAgICAgIAorICAgICAgICB0aGlzLmxvZ1dyaXRlciA9IGxvZ1dyaXRlcjsKKyAgICB9CisKICAgICBwdWJsaWMgTG9nZ2VyIGdldFBhcmVudExvZ2dlcigpIHRocm93cyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBmZWF0dXJlLiIpOwogICAgIH0KICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KKyAgICAgKiBAcmV0dXJuICAgIERlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7Ci0gICAgCXJldHVybiBkZXNjcmlwdGlvbjsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKICAgICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2NyaXB0aW9uKSB7Ci0gICAgCXRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgICB9ICAgIAotICAgIAorICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgfQorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSByZWZlcmVuY2UuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIDxjb2RlPlJlZmVyZW5jZTwvY29kZT5vYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIFJlZmVyZW5jZSBnZXRSZWZlcmVuY2UoKSB7Ci0gICAgCXJldHVybiByZWZlcmVuY2U7CisgICAgICAgIHJldHVybiByZWZlcmVuY2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSByZWZlcmVuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVmZXJlbmNlIDxjb2RlPlJlZmVyZW5jZTwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICByZWZlcmVuY2UgPGNvZGU+UmVmZXJlbmNlPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlKFJlZmVyZW5jZSByZWZlcmVuY2UpIHsKLSAgICAJdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7CisgICAgICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOwogICAgIH0KIAogICAgIHB1YmxpYyA8VD4gVCB1bndyYXAoQ2xhc3M8VD4gaWZhY2UpIHRocm93cyBTUUxFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCmluZGV4IDU3NGVkNjYuLmJlYzBkNmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKQEAgLTE4LDEzICsxOCwxMyBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEpkYmNTZXR1cEFkbWluIHsKIAotICAgIHB1YmxpYyB2b2lkIHNldFRhYmxlTmFtZShTdHJpbmcgZGIpOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRUYWJsZU5hbWUoU3RyaW5nIGRiKTsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFibGVOYW1lKCk7CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRKbmRpTmFtZShTdHJpbmcgbmFtZSk7IAorICAgIHB1YmxpYyB2b2lkIHNldEpuZGlOYW1lKFN0cmluZyBuYW1lKTsKIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Sm5kaU5hbWUoKTsgCisgICAgcHVibGljIFN0cmluZyBnZXRKbmRpTmFtZSgpOwogCiAgICAgcHVibGljIHZvaWQgc2V0U2NoZW1hTmFtZShTdHJpbmcgbmFtZSk7CiAKQEAgLTM0LDYgKzM0LDYgQEAKIAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldE5vT2ZSb3dzKCk7CiAKLSAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCk7IAorICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2V0dXAoKTsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKaW5kZXggM2JkN2NhZC4uZmVjNzQ0MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhCkBAIC02NSwxMSArNjUsMTEgQEAKIAogcHJpdmF0ZSB2b2lkIHByaW50SGllcmFyY2h5KENsYXNzTG9hZGVyIGNsLCBpbnQgY250KXsKIHdoaWxlKGNsICE9IG51bGwpIHsKLQlmb3IoaW50IGkgPTA7IGkgPCBjbnQ7IGkrKykgCi0JCVN5c3RlbS5vdXQucHJpbnQoIiAiICk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgOiIgKyBjbCk7Ci0JY2wgPSBjbC5nZXRQYXJlbnQoKTsKLQljbnQgKz0gMzsKKyAgICBmb3IoaW50IGkgPTA7IGkgPCBjbnQ7IGkrKykKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICIgKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCA6IiArIGNsKTsKKyAgICBjbCA9IGNsLmdldFBhcmVudCgpOworICAgIGNudCArPSAzOwogfQogfQogCkBAIC03OCwxMCArNzgsMTAgQEAKICAgICAgICAgZm9yKGludCBpID0wOyBpIDwgY250OyBpKyspCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICIgKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgb2YgQ2xhc3NMb2FkZXIgMSA6IiArIGNsMSk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgb2YgQ2xhc3NMb2FkZXIgMiA6IiArIGNsMik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJFUVVBTFMgOiAiICsgKGNsMSA9PSBjbDIpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCBvZiBDbGFzc0xvYWRlciAyIDoiICsgY2wyKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVRVUFMUyA6ICIgKyAoY2wxID09IGNsMikpOwogICAgICAgICBjbDEgPSBjbDEuZ2V0UGFyZW50KCk7Ci0JY2wyID0gY2wyLmdldFBhcmVudCgpOworICAgIGNsMiA9IGNsMi5nZXRQYXJlbnQoKTsKICAgICAgICAgY250ICs9IDM7CiB9CiB9CkBAIC05MCw5MyArOTAsOTMgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCl7CiAKICAgICAgICAgaWYgKGpuZGlOYW1lPT0gbnVsbCB8fCBqbmRpTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgICAgICBpZiAodGFibGVOYW1lPT0gbnVsbCB8fCB0YWJsZU5hbWUudHJpbSgpLmVxdWFscygiIikpIHsKLQkgICByZXR1cm4gZmFsc2U7Ci0JfQorICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwotCVN0YXRlbWVudCBzID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMgPSBudWxsOwotCWJvb2xlYW4gYiA9IGZhbHNlOworICAgIFN0YXRlbWVudCBzID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMgPSBudWxsOworICAgIGJvb2xlYW4gYiA9IGZhbHNlOwogICAgICAgICB0cnkgewotCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCS8vZGVidWcKLQlDbGFzcyBjbHogPSBEYXRhU291cmNlLmNsYXNzOworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIC8vZGVidWcKKyAgICBDbGFzcyBjbHogPSBEYXRhU291cmNlLmNsYXNzOwogLyoKLQlpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiRGF0YVNvdXJjZSdzIGNsYXN4cyA6ICIgKyAgY2x6LmdldE5hbWUoKSArICAiIGNsYXNzbG9hZGVyICIgKyBjbHouZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0JCXByaW50SGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKLQl9Ci0JQ2xhc3MgY2xzID0gaWMubG9va3VwKGpuZGlOYW1lKS5nZXRDbGFzcygpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGNsYXNzJ3MgOiAiICsgY2xzLmdldFBhY2thZ2UoKSArICI6IiArIGNscy5nZXROYW1lKCkgICsgIiBjbGFzc2xvYWRlciAiICArIGNscy5nZXRDbGFzc0xvYWRlcigpKTsKLQlwcmludEhpZXJhcmNoeShjbHMuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7CisgICAgaWYoY2x6LmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRhdGFTb3VyY2UncyBjbGFzeHMgOiAiICsgIGNsei5nZXROYW1lKCkgKyAgIiBjbGFzc2xvYWRlciAiICsgY2x6LmdldENsYXNzTG9hZGVyKCkpOworICAgICAgICBwcmludEhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7CisgICAgfQorICAgIENsYXNzIGNscyA9IGljLmxvb2t1cChqbmRpTmFtZSkuZ2V0Q2xhc3MoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBjbGFzcydzIDogIiArIGNscy5nZXRQYWNrYWdlKCkgKyAiOiIgKyBjbHMuZ2V0TmFtZSgpICArICIgY2xhc3Nsb2FkZXIgIiAgKyBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSk7CisgICAgcHJpbnRIaWVyYXJjaHkoY2xzLmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2xvYWRlcnMgZXF1YWwgPyAiICsgIChjbHouZ2V0Q2xhc3NMb2FkZXIoKSA9PSBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSkpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiJiomKiYqJiogQ29tcGFyaW5nIEhpZXJhY2h5IERhdGFTb3VyY2UgdnMgbG9va2VkdXAiKTsKLQlpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7Ci0JCWNvbXBhcmVIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCksIGNscy5nZXRDbGFzc0xvYWRlcigpLCA4KTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2xvYWRlcnMgZXF1YWwgPyAiICsgIChjbHouZ2V0Q2xhc3NMb2FkZXIoKSA9PSBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiJiomKiYqJiogQ29tcGFyaW5nIEhpZXJhY2h5IERhdGFTb3VyY2UgdnMgbG9va2VkdXAiKTsKKyAgICBpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7CisgICAgICAgIGNvbXBhcmVIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCksIGNscy5nZXRDbGFzc0xvYWRlcigpLCA4KTsKKyAgICB9CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBsb29rdXAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBsb29rdXAiKTsKICovCi0JT2JqZWN0IG8gPSBpYy5sb29rdXAoam5kaU5hbWUpOwotLy8JU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBsb29rdXAgbG9va3VwIik7CisgICAgT2JqZWN0IG8gPSBpYy5sb29rdXAoam5kaU5hbWUpOworLy8gICAgU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBsb29rdXAgbG9va3VwIik7CiAKLQkgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKW8gOworICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpbyA7CiAvKgotCVN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgY2FzdCIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLSBUcnlpbmcgb3VyIFN0dWZmICEhISIpOwotCXRyeSB7Ci0JCUNsYXNzIG8xID0gKENsYXNzLmZvck5hbWUoImNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIikpOwotCQlDbGFzc0xvYWRlciBjbDEgPSBvMS5nZXRDbGFzc0xvYWRlcigpOwotCQlDbGFzc0xvYWRlciBjbDIgPSBEYXRhU291cmNlLmNsYXNzLmdldENsYXNzTG9hZGVyKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2wxID09IENsMiIgKyAoY2wxID09IGNsMikpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzZXMgZXF1YWwiICsgKERhdGFTb3VyY2UuY2xhc3MgPT0gbzEpKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgY2FzdCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLSBUcnlpbmcgb3VyIFN0dWZmICEhISIpOworICAgIHRyeSB7CisgICAgICAgIENsYXNzIG8xID0gKENsYXNzLmZvck5hbWUoImNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIikpOworICAgICAgICBDbGFzc0xvYWRlciBjbDEgPSBvMS5nZXRDbGFzc0xvYWRlcigpOworICAgICAgICBDbGFzc0xvYWRlciBjbDIgPSBEYXRhU291cmNlLmNsYXNzLmdldENsYXNzTG9hZGVyKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2wxID09IENsMiIgKyAoY2wxID09IGNsMikpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzZXMgZXF1YWwiICsgKERhdGFTb3VyY2UuY2xhc3MgPT0gbzEpKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogKi8KICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgU3RyaW5nIGZ1bGxUYWJsZU5hbWUgPSB0YWJsZU5hbWU7Ci0JICAgIGlmIChzY2hlbWFOYW1lICE9IG51bGwgJiYgKCEoc2NoZW1hTmFtZS50cmltKCkuZXF1YWxzKCIiKSkpKSB7Ci0JICAgICAgICBmdWxsVGFibGVOYW1lID0gc2NoZW1hTmFtZS50cmltKCkgKyAiLiIgKyBmdWxsVGFibGVOYW1lOwotCSAgICB9Ci0JICAgIFN0cmluZyBxcnkgPSAic2VsZWN0ICogZnJvbSAiICsgZnVsbFRhYmxlTmFtZTsgCisgICAgICAgIFN0cmluZyBmdWxsVGFibGVOYW1lID0gdGFibGVOYW1lOworICAgICAgICBpZiAoc2NoZW1hTmFtZSAhPSBudWxsICYmICghKHNjaGVtYU5hbWUudHJpbSgpLmVxdWFscygiIikpKSkgeworICAgICAgICAgICAgZnVsbFRhYmxlTmFtZSA9IHNjaGVtYU5hbWUudHJpbSgpICsgIi4iICsgZnVsbFRhYmxlTmFtZTsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgcXJ5ID0gInNlbGVjdCAqIGZyb20gIiArIGZ1bGxUYWJsZU5hbWU7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRpbmcgcXVlcnkgOiIgKyBxcnkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyBxdWVyeSA6IiArIHFyeSk7CiAKLQkgICAgcyA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgcnMgPSBzLmV4ZWN1dGVRdWVyeShxcnkpOyAKKyAgICAgICAgcyA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgcnMgPSBzLmV4ZWN1dGVRdWVyeShxcnkpOwogCiAgICAgICAgICAgICBpbnQgaSA9IDA7Ci0JICAgIGlmIChycy5uZXh0KCkpIHsKLQkgICAgICAgIGkrKzsKLQkgICAgfQorICAgICAgICBpZiAocnMubmV4dCgpKSB7CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJObyBvZiByb3dzIGZvdW5kOiIgKyBpKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gb2Ygcm93cyBleHBlY3RlZDoiICsgbm9PZlJvd3MpOwogCi0JICAgIGlmIChpID09IG5vT2ZSb3dzLmludFZhbHVlKCkpIHsKLQkgICAgICAgYiA9IHRydWU7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgIGIgPSBmYWxzZTsKLQkgICAgfQotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgYiA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBpZiAocnMgIT0gbnVsbCkgcnMuY2xvc2UoKTsKLQkgICAgICAgIGlmIChzICE9IG51bGwpIHMuY2xvc2UoKTsKLQkgICAgICAgIGlmIChjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7CisgICAgICAgIGlmIChpID09IG5vT2ZSb3dzLmludFZhbHVlKCkpIHsKKyAgICAgICAgICAgYiA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgIGIgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgYiA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAocnMgIT0gbnVsbCkgcnMuY2xvc2UoKTsKKyAgICAgICAgICAgIGlmIChzICE9IG51bGwpIHMuY2xvc2UoKTsKKyAgICAgICAgICAgIGlmIChjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICB9Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuaW5nIHNldHVwIDoiICtiKTsKLQlyZXR1cm4gYjsKKyAgICAgICAgfQorICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJldHVybmluZyBzZXR1cCA6IiArYik7CisgICAgcmV0dXJuIGI7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCmluZGV4IDhlYmUwNTcuLmM1NGEyMTYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCkBAIC0yMyw0NSArMjMsNDUgQEAKIC8qKgogICogPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBMb2NhbFRyYW5zYWN0aW9uIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTG9jYWxUcmFuc2FjdGlvbiB7Ci0gICAgCisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+LgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCByZXR1cm5zCi0gICAgICoJCQl0aGlzIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IG9iamVjdCBhcwotICAgICAqCQkJYSByZXN1bHQgb2YgPGNvZGU+Z2V0TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgcmV0dXJucworICAgICAqICAgICAgICAgICAgdGhpcyA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBvYmplY3QgYXMKKyAgICAgKiAgICAgICAgICAgIGEgcmVzdWx0IG9mIDxjb2RlPmdldExvY2FsVHJhbnNhY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIExvY2FsVHJhbnNhY3Rpb24oTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEJlZ2luIGEgbG9jYWwgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGJlZ2luKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvblN0YXJ0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvblN0YXJ0ZWQoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKS5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IGEgbG9jYWwgdHJhbnNhY3Rpb24uCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbiBvciBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gb3IgY29tbWl0dGluZyB0aGUgdHJhbnNhY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBFeGNlcHRpb24gZSA9IG51bGw7CkBAIC03MiwxNSArNzIsMTUgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSb2xsYmFjayBhIGxvY2FsIHRyYW5zYWN0aW9uLgotICAgICAqIAotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24gb3Igcm9sbGluZyBiYWNrIHRoZSB0cmFuc2FjdGlvbgorICAgICAqCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBvciByb2xsaW5nIGJhY2sgdGhlIHRyYW5zYWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCmluZGV4IDMwZjQ2MGEuLjJkYWQ1OWEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKQEAgLTQxLDggKzQxLDggQEAKIC8qKgogICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjIKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIyCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb24gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiB7CiAKQEAgLTUyLDcgKzUyLDcgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBpc0Rlc3Ryb3llZCA9IGZhbHNlOwogICAgIHByaXZhdGUgYm9vbGVhbiBpc1VzYWJsZSA9IHRydWU7Ci0gICAgCisKICAgICBwcml2YXRlIGludCBjb25uZWN0aW9uVHlwZSA9IElTTk9UQVBPT0xFRENPTk5FQ1RJT047CiAgICAgcHJpdmF0ZSBQb29sZWRDb25uZWN0aW9uIHBjID0gbnVsbDsKICAgICBwcml2YXRlIGphdmEuc3FsLkNvbm5lY3Rpb24gYWN0dWFsQ29ubmVjdGlvbiA9IG51bGw7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgcHJpdmF0ZSBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmID0gbnVsbDsKICAgICBwcml2YXRlIFhBUmVzb3VyY2UgeGFyID0gbnVsbDsKICAgICBwdWJsaWMgQ29ubmVjdGlvbkhvbGRlciBhY3RpdmVDb25uZWN0aW9uSGFuZGxlOwotICAgIAorCiAgICAgLy9HSkNJTlQKICAgICBwcml2YXRlIGludCBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkOwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0NsZWFuID0gZmFsc2U7CkBAIC03Nyw3MSArNzcsNzEgQEAKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uIFRoZSBwb29sZWRDb25uIHBhcmFtZXRlciBpcyBleHBlY3RlZAotICAgICAqIHRvIGJlIG51bGwgYW5kIHNxbENvbm4gcGFyYW1ldGVyIGlzIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiBjYXNlIHdoZXJlIAotICAgICAqIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpcyBnb3QgZnJvbSBhIG5vbiBwb29sZWQgZGF0YXNvdXJjZSBvYmplY3QuIFRoZSAKKyAgICAgKiB0byBiZSBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlciBpcyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gY2FzZSB3aGVyZQorICAgICAqIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpcyBnb3QgZnJvbSBhIG5vbiBwb29sZWQgZGF0YXNvdXJjZSBvYmplY3QuIFRoZQogICAgICAqIHBvb2xlZENvbm4gcGFyYW1ldGVyIGlzIGV4cGVjdGVkIHRvIGJlIG5vbiBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlcgogICAgICAqIGlzIGV4cGVjdGVkIHRvIGJlIG51bGwgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGRhdGFzb3VyY2Ugb2JqZWN0IGlzIGEKICAgICAgKiBjb25uZWN0aW9uIHBvb2wgZGF0YXNvdXJjZSBvciBhbiB4YSBkYXRhc291cmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvb2xlZENvbm4JPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIAotICAgICAqCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIHBvb2xlZAotICAgICAqCQkJCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OyBudWxsIG90aGVyd2lzZQotICAgICAqIEBwYXJhbQlzcWxDb25uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSBwaHlzaWNhbAotICAgICAqCQkJY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgbm9uIHBvb2xlZCA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsKLSAgICAgKgkJCW51bGwgb3RoZXJ3aXNlCi0gICAgICogQHBhcmFtCXBhc3N3ZENyZWQJb2JqZWN0IGNvbmF0aW5pbmcgdGhlCi0gICAgICoJCQkJdXNlciBhbmQgcGFzc3dvcmQgZm9yIGFsbG9jYXRpbmcgdGhlIGNvbm5lY3Rpb24KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdAotICAgICAqCQkJCQl0aGF0IGNyZWF0ZWQgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0Ci0gICAgICoJCQkJCWlzIG5vdCB0aGUgc2FtZSBhcyByZXR1cm5lZCBieSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICoJCQkJCW9iamVjdCBwYXNzZWQKKyAgICAgKiBAcGFyYW0gICAgcG9vbGVkQ29ubiAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBwb29sZWQKKyAgICAgKiAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsgbnVsbCBvdGhlcndpc2UKKyAgICAgKiBAcGFyYW0gICAgc3FsQ29ubiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIG5vbiBwb29sZWQgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47CisgICAgICogICAgICAgICAgICBudWxsIG90aGVyd2lzZQorICAgICAqIEBwYXJhbSAgICBwYXNzd2RDcmVkICAgIG9iamVjdCBjb25hdGluaW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgIHVzZXIgYW5kIHBhc3N3b3JkIGZvciBhbGxvY2F0aW5nIHRoZSBjb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdGhhdCBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICBpcyBub3QgdGhlIHNhbWUgYXMgcmV0dXJuZWQgYnkgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICBvYmplY3QgcGFzc2VkCiAgICAgICovCi0gICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubiwgamF2YS5zcWwuQ29ubmVjdGlvbiBzcWxDb25uLCAKKyAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24oUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uLCBqYXZhLnNxbC5Db25uZWN0aW9uIHNxbENvbm4sCiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYXNzd2RDcmVkLCBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihwb29sZWRDb25uID09IG51bGwgJiYgc3FsQ29ubiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNvbm5lY3Rpb24gb2JqZWN0IGNhbm5vdCBiZSBudWxsIik7CiAgICAgICAgIH0KIAotCWlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgewotCSAgICBhY3R1YWxDb25uZWN0aW9uID0gc3FsQ29ubjsKLQl9CisgICAgaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7CisgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBzcWxDb25uOworICAgIH0KIAogICAgICAgICBwYyA9IHBvb2xlZENvbm47CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbmV3IEhhc2h0YWJsZSgpOwogICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gcGFzc3dkQ3JlZDsKICAgICAgICAgdGhpcy5tY2YgPSBtY2Y7Ci0gICAgICAgIGlmKHBhc3N3ZENyZWRlbnRpYWwgIT0gbnVsbCAmJiAgCisgICAgICAgIGlmKHBhc3N3ZENyZWRlbnRpYWwgIT0gbnVsbCAmJgogICAgICAgICAgICAgdGhpcy5tY2YuZXF1YWxzKHBhc3N3ZENyZWRlbnRpYWwuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgdGhhdCBoYXMgY3JlYXRlZCB0aGlzICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB0aGF0IGhhcyBjcmVhdGVkIHRoaXMgIiArCiAgICAgICAgICAgICAgICAgIk1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHJldHVybmVkIGJ5IiArCiAgICAgICAgICAgICAgICAgICAgICIgdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiIpOwogICAgICAgICB9CiAgICAgICAgIGxvZ1dyaXRlciA9IG1jZi5nZXRMb2dXcml0ZXIoKTsKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0JY2UgPSBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0NMT1NFRCk7CisgICAgY2UgPSBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0NMT1NFRCk7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogQWRkcyBhIGNvbm5lY3Rpb24gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWxpc3RlbmVyCTxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBsaXN0ZW5lciAgICA8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKiBAc2VlIDxjb2RlPnJlbW92ZUNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGFkZENvbm5lY3Rpb25FdmVudExpc3RlbmVyKENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyOworICAgIHRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBVc2VkIGJ5IHRoZSBjb250YWluZXIgdG8gY2hhbmdlIHRoZSBhc3NvY2lhdGlvbiBvZiBhbiBhcHBsaWNhdGlvbi1sZXZlbCAKKyAgICAgKiBVc2VkIGJ5IHRoZSBjb250YWluZXIgdG8gY2hhbmdlIHRoZSBhc3NvY2lhdGlvbiBvZiBhbiBhcHBsaWNhdGlvbi1sZXZlbAogICAgICAqIGNvbm5lY3Rpb24gaGFuZGxlIHdpdGggYSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29ubmVjdGlvbgk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKLSAgICAgKgkJCQl0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZQotICAgICAqCQkJCQl2YWxpZCBvciB0aGUgY29ubmVjdGlvbiBoYW5kbGUgcGFzc2VkIGlzIG51bGwKKyAgICAgKiBAcGFyYW0gICAgY29ubmVjdGlvbiAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgKiAgICAgICAgICAgICAgICB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZQorICAgICAqICAgICAgICAgICAgICAgICAgICB2YWxpZCBvciB0aGUgY29ubmVjdGlvbiBoYW5kbGUgcGFzc2VkIGlzIG51bGwKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhc3NvY2lhdGVDb25uZWN0aW9uKE9iamVjdCBjb25uZWN0aW9uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTUyLDExICsxNTIsMTEgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ29ubmVjdGlvbiBoYW5kbGUgY2Fubm90IGJlIG51bGwiKTsKICAgICAgICAgfQogICAgICAgICBDb25uZWN0aW9uSG9sZGVyIGNoID0gKENvbm5lY3Rpb25Ib2xkZXIpIGNvbm5lY3Rpb247Ci0gICAgICAgIAorCiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24pY2guZ2V0TWFuYWdlZENvbm5lY3Rpb24oKTsKLQltYy5hY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLQlpc0NsZWFuID0gZmFsc2U7Ci0gICAgICAgIAorICAgIG1jLmFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOworICAgIGlzQ2xlYW4gPSBmYWxzZTsKKwogICAgICAgICBjaC5hc3NvY2lhdGVDb25uZWN0aW9uKGFjdHVhbENvbm5lY3Rpb24sIHRoaXMpOwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGV4cGVjdGF0aW9uIGZyb20gdGhlIGFib3ZlIG1ldGhvZCBpcyB0aGF0IHRoZSBjb25uZWN0aW9uIGhvbGRlcgpAQCAtMTY1LDM0ICsxNjUsMzQgQEAKICAgICAgICAgICogdG8gdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlIHdpdGggdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4KICAgICAgICAgICogQW55IHByZXZpb3VzIHN0YXRlbWVudHMgYW5kIHJlc3VsdCBzZXRzIGFsc28gbmVlZCB0byBiZSByZW1vdmVkLgogICAgICAgICAgKi8KLSAgICAgICAgIAorCiAgICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUuc2V0QWN0aXZlKGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBjaC5zZXRBY3RpdmUodHJ1ZSk7Ci0gICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsgCisgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBBcHBsaWNhdGlvbiBzZXJ2ZXIgY2FsbHMgdGhpcyBtZXRob2QgdG8gZm9yY2UgYW55IGNsZWFudXAgb24gdGhlIAorICAgICAqIEFwcGxpY2F0aW9uIHNlcnZlciBjYWxscyB0aGlzIG1ldGhvZCB0byBmb3JjZSBhbnkgY2xlYW51cCBvbiB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuIFRoaXMgbWV0aG9kIGNhbGxzIHRoZSBpbnZhbGlkYXRlCiAgICAgICogbWV0aG9kIG9uIGFsbCBDb25uZWN0aW9uSGFuZGxlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCi0gICAgICogCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlIHZhbGlkCisgICAgICoKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjbGVhbnVwKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gY2xlYW51cCIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICAvKioKICAgICAgICAgICogbWF5IG5lZWQgdG8gc2V0IHRoZSBhdXRvY29tbWl0IHRvIHRydWUgZm9yIHRoZSBub24tcG9vbGVkIGNhc2UuCiAgICAgICAgICAqLwogICAgICAgICAvL0dKQ0lOVAotCS8vaWYgKGFjdHVhbENvbm5lY3Rpb24gIT0gbnVsbCkgewotCWlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgeworICAgIC8vaWYgKGFjdHVhbENvbm5lY3Rpb24gIT0gbnVsbCkgeworICAgIGlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCA9IGFjdHVhbENvbm5lY3Rpb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewpAQCAtMjAxLDE3ICsyMDEsMTcgQEAKICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlzQ2xlYW4gPSB0cnVlOwotICAgICAgICAKKwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGFsbCB0aGUgY29ubmVjdGlvbiBoYW5kbGVzIGZyb20gdGhlIHRhYmxlCiAgICAgICogb2YgY29ubmVjdGlvbiBoYW5kbGVzIGFuZCBpbnZhbGlkYXRlcyBhbGwgb2YgdGhlbSBzbyB0aGF0IGFueQogICAgICAqIG9wZXJhdGlvbiBvbiB0aG9zZSBjb25uZWN0aW9uIGhhbmRsZXMgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYSBwcm9ibGVtIGluIHJldHJpZXZpbmcKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXRoZSBjb25uZWN0aW9uIGhhbmRsZXMKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBpbiByZXRyaWV2aW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29ubmVjdGlvbiBoYW5kbGVzCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGludmFsaWRhdGVBbGxDb25uZWN0aW9uSGFuZGxlcygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIFNldCBoYW5kbGVzID0gY29ubmVjdGlvbkhhbmRsZXMua2V5U2V0KCk7CkBAIC0yMjYsMjIgKzIyNiwyMiBAQAogICAgICAgICB9CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzLmNsZWFyKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRGVzdHJveXMgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgcmVzb3VyY2UgbWFuYWdlci4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNsb3NpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2xvc2luZyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZGVzdHJveSIpOwogICAgICAgICB9Ci0JLy9HSkNJTlQKLQlpZihpc0Rlc3Ryb3llZCA9PSB0cnVlKSB7Ci0JICAgIHJldHVybjsJCi0JfQorICAgIC8vR0pDSU5UCisgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSkgeworICAgICAgICByZXR1cm47CisgICAgfQogCi0JYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CisgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTiB8fCBjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04pIHsKICAgICAgICAgICAgICAgICBwYy5jbG9zZSgpOwpAQCAtMjU1LDI4ICsyNTUsMjggQEAKICAgICAgICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBudWxsOwogICAgICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBudWxsOwotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgZm9sbG93aW5nIGV4Y2VwdGlvbiBoYXMgb2NjdXJlZCBkdXJpbmcgZGVzdHJveTogIiAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGZvbGxvd2luZyBleGNlcHRpb24gaGFzIG9jY3VyZWQgZHVyaW5nIGRlc3Ryb3k6ICIKICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7CiAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBudWxsOwogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBjb25uZWN0aW9uIGhhbmRsZSBmb3IgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgCisgICAgICogQ3JlYXRlcyBhIG5ldyBjb25uZWN0aW9uIGhhbmRsZSBmb3IgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwKICAgICAgKiBjb25uZWN0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgbmVlZGVkIGZvciBhdXRoZW50aWNhdGlvbgotICAgICAqIEBwYXJhbQljeFJlcUluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBjYXJyaWVzIHRoZSB1c2VyIAotICAgICAqICAgICAgIAkgICAgICAgICAJYW5kIHBhc3N3b3JkIHJlcXVpcmVkIGZvciBnZXR0aW5nIHRoaXMgY29ubmVjdGlvbi4KLSAgICAgKiBAcmV0dXJuCUNvbm5lY3Rpb24JdGhlIGNvbm5lY3Rpb24gaGFuZGxlIDxjb2RlPk9iamVjdDwvY29kZT4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJcGh5c2ljYWwgY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sZWQgY29ubmVjdGlvbiAKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBhc3N3b3JkIGNyZWRlbnRpYWxzIG9yIHJlYXV0aGVudGljYXRpb24gaXMgcmVxdWVzdGVkCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIG5lZWRlZCBmb3IgYXV0aGVudGljYXRpb24KKyAgICAgKiBAcGFyYW0gICAgY3hSZXFJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gY2FycmllcyB0aGUgdXNlcgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHBhc3N3b3JkIHJlcXVpcmVkIGZvciBnZXR0aW5nIHRoaXMgY29ubmVjdGlvbi4KKyAgICAgKiBAcmV0dXJuICAgIENvbm5lY3Rpb24gICAgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIDxjb2RlPk9iamVjdDwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGZyb20gdGhlIHBvb2xlZCBjb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCBjcmVkZW50aWFscyBvciByZWF1dGhlbnRpY2F0aW9uIGlzIHJlcXVlc3RlZAogICAgICAqLwotICAgIHB1YmxpYyBPYmplY3QgZ2V0Q29ubmVjdGlvbihTdWJqZWN0IHN1YiwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxSW5mbykgCisgICAgcHVibGljIE9iamVjdCBnZXRDb25uZWN0aW9uKFN1YmplY3Qgc3ViLCBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXFJbmZvKQogICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldENvbm5lY3Rpb24iKTsKQEAgLTI4NCwxNCArMjg0LDE0IEBACiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8gPSAoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbykgY3hSZXFJbmZvOwogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGFzc3dkQ3JlZCA9IFNlY3VyaXR5VXRpbHMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKHRoaXMubWNmLCBzdWIsIGN4UmVxdWVzdEluZm8pOwotICAgICAgICAgICAgCisKICAgICAgICAgaWYoU2VjdXJpdHlVdGlscy5pc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKHRoaXMucGFzc3dkQ3JlZGVudGlhbCwgcGFzc3dkQ3JlZCkgPT0gZmFsc2UpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLnNwaS5TZWN1cml0eUV4Y2VwdGlvbigiUmUtYXV0aGVudGljYXRpb24gbm90IHN1cHBvcnRlZCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vR0pDSU5UCiAgICAgICAgIGdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAKKwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGZvbGxvd2luZyBjb2RlIGluIHRoZSBpZiBzdGF0ZW1lbnQgZmlyc3QgY2hlY2tzIGlmIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24KICAgICAgICAgICogaXMgY2xlYW4gb3Igbm90LiBJZiBpdCBpcywgaXQgcmVzZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgdG8gd2hhdApAQCAtMzAxLDI4ICszMDEsMjggQEAKICAgICAgICAgaWYoaXNDbGVhbikgewogICAgICAgICAgICAgKChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KW1jZikucmVzZXRJc29sYXRpb24odGhpcywgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAKKworCiAgICAgICAgIENvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCA9IG5ldyBDb25uZWN0aW9uSG9sZGVyKGFjdHVhbENvbm5lY3Rpb24sIHRoaXMpOwotCWlzQ2xlYW49ZmFsc2U7Ci0gICAgICAgIAorICAgIGlzQ2xlYW49ZmFsc2U7CisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlLnNldEFjdGl2ZShmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgY29ubkhvbGRlck9iamVjdC5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjb25uSG9sZGVyT2JqZWN0OwotIAorCiAgICAgICAgIHJldHVybiBjb25uSG9sZGVyT2JqZWN0OwotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgYW4gPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW5zdGFuY2UuIFRoZSA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnRlcmZhY2UKLSAgICAgKiBpcyB1c2VkIGJ5IHRoZSBjb250YWluZXIgdG8gbWFuYWdlIGxvY2FsIHRyYW5zYWN0aW9ucyBmb3IgYSBSTSBpbnN0YW5jZS4gCisgICAgICogaXMgdXNlZCBieSB0aGUgY29udGFpbmVyIHRvIG1hbmFnZSBsb2NhbCB0cmFuc2FjdGlvbnMgZm9yIGEgUk0gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTG9jYWxUcmFuc2FjdGlvbiBnZXRMb2NhbFRyYW5zYWN0aW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTMzMSwxMyArMzMxLDEzIEBACiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICByZXR1cm4gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5Mb2NhbFRyYW5zYWN0aW9uKHRoaXMpOwogICAgIH0KLSAgICAgCisKICAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4gCisgICAgICogR2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqIEBzZWUgPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBQcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtMzQ1LDQ2ICszNDUsNDYgQEAKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0TG9nV3JpdGVyIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBsb2dXcml0ZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogR2V0cyB0aGUgbWV0YWRhdGEgaW5mb3JtYXRpb24gZm9yIHRoaXMgY29ubmVjdGlvbidzIHVuZGVybHlpbmcgRUlTIAotICAgICAqIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UuIAorICAgICAqIEdldHMgdGhlIG1ldGFkYXRhIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbm5lY3Rpb24ncyB1bmRlcmx5aW5nIEVJUworICAgICAqIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSBnZXRNZXRhRGF0YSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldE1ldGFEYXRhIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEodGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyBhbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4gCisgICAgICogUmV0dXJucyBhbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgotICAgICAqCQkJCQl0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCU5vdFN1cHBvcnRlZEV4Y2VwdGlvbglpZiB1bmRlcmx5aW5nIGRhdGFzb3VyY2UgaXMgbm90IGFuCi0gICAgICoJCQkJCTxjb2RlPlhBRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiAgICBpZiB1bmRlcmx5aW5nIGRhdGFzb3VyY2UgaXMgbm90IGFuCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPlhBRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgWEFSZXNvdXJjZSBnZXRYQVJlc291cmNlKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0WEFSZXNvdXJjZSIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTikgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZih4YXIgPT0gbnVsbCkgewotCQkgICAgLyoqCisgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgICogVXNpbmcgdGhlIHdyYXBwZXIgWEFSZXNvdXJjZS4KICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgIHhhciA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuWEFSZXNvdXJjZUltcGwoKChYQUNvbm5lY3Rpb24pcGMpLmdldFhBUmVzb3VyY2UoKSwgdGhpcyk7CkBAIC0zOTcsMTYgKzM5NywxNiBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiQ2Fubm90IGdldCBhbiBYQVJlc291cmNlIGZyb20gYSBub24gWEEgY29ubmVjdGlvbiIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVtb3ZlcyBhbiBhbHJlYWR5IHJlZ2lzdGVyZWQgY29ubmVjdGlvbiBldmVudCBsaXN0ZW5lciBmcm9tIHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlsaXN0ZW5lcgk8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4gdG8gYmUgcmVtb3ZlZAorICAgICAqIEBwYXJhbSAgICBsaXN0ZW5lciAgICA8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4gdG8gYmUgcmVtb3ZlZAogICAgICAqIEBzZWUgPGNvZGU+YWRkQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIoQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQlsaXN0ZW5lciA9IG51bGw7CisgICAgbGlzdGVuZXIgPSBudWxsOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDE1LDcgKzQxNSw3IEBACiAgICAgICogTG9jYWxUcmFuc2FjdGlvbiBvYmplY3Qgd2hlbiBpdHMgYmVnaW4oKSBtZXRob2QgaXMgY2FsbGVkLgogICAgICAqLwogICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKCkgewotCXRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IHRydWU7CQorICAgIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IHRydWU7CiAgICAgfQogCiAgICAgLyoqCkBAIC00MjQsMTYgKzQyNCwxNiBAQAogICAgICAqIExvY2FsVHJhbnNhY3Rpb24gb2JqZWN0IHdoZW4gaXRzIGVuZCgpIG1ldGhvZCBpcyBjYWxsZWQuCiAgICAgICovCiAgICAgdm9pZCB0cmFuc2FjdGlvbkNvbXBsZXRlZCgpIHsKLQl0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKLQlpZihjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKKyAgICB0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCA9IGFjdHVhbENvbm5lY3Rpb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgIC8vY2hlY2sgd2hhdCB0byBkbyBpbiB0aGlzIGNhc2UhIQotCQlfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5ub3Rnb3RfdHhfaXNvbHZsIik7CisgICAgICAgICAgICAvL2NoZWNrIHdoYXQgdG8gZG8gaW4gdGhpcyBjYXNlISEKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMubm90Z290X3R4X2lzb2x2bCIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0JICAgIHRyeSB7CisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CkBAIC00NDEsNyArNDQxLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0JICAgICAgICAKKwogICAgICAgICBpc0NsZWFuID0gdHJ1ZTsKIAogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKQEAgLTQ1MywyOCArNDUzLDI4IEBACiAgICAgICogb3Igbm90LgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkgewotCXJldHVybiB0cmFuc2FjdGlvbkluUHJvZ3Jlc3M7CisgICAgcmV0dXJuIHRyYW5zYWN0aW9uSW5Qcm9ncmVzczsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlvdXQJPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEBwYXJhbSAgICBvdXQgICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqIEBzZWUgPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihQcmludFdyaXRlciBvdXQpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICBsb2dXcml0ZXIgPSBvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiB0aGUgY29ubmVjdGlvbiBiZWluZyBoZWxkIAorICAgICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgdGhlIHR5cGUgb2YgdGhlIGNvbm5lY3Rpb24gYmVpbmcgaGVsZAogICAgICAqIGluIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgotICAgICAqIAotICAgICAqIEBwYXJhbQlwb29sZWRDb25uCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHJldHVybgljb25uZWN0aW9uIHR5cGUKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBwb29sZWRDb25uICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBjb25uZWN0aW9uIHR5cGUKICAgICAgKi8KICAgICBwcml2YXRlIGludCBnZXRDb25uZWN0aW9uVHlwZShQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4pIHsKICAgICAgICAgaWYocG9vbGVkQ29ubiA9PSBudWxsKSB7CkBAIC00ODUsMjIgKzQ4NSwyMiBAQAogICAgICAgICAgICAgcmV0dXJuIElTUE9PTEVEQ09OTkVDVElPTjsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCAKKyAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQKICAgICAgKiBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgY3JlYXRlZCB0aGlzCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IGNyZWF0ZWQgdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKICAgICAgKi8KICAgICBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkgewogICAgICAgICByZXR1cm4gKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpbWNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBzcWwgY29ubmVjdGlvbiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uIAorICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBzcWwgY29ubmVjdGlvbiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRoZSBwaHlzaWNhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgdGhlIHBoeXNpY2FsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgLy9HSkNJTlQKICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGdldEFjdHVhbENvbm5lY3Rpb24oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtNTA5LDggKzUwOSw4IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmKGFjdHVhbENvbm5lY3Rpb24gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gcGMuZ2V0Q29ubmVjdGlvbigpOwotCQl9Ci0JCQorICAgICAgICB9CisKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKICAgICAgICAgICAgICAgICBzcWxlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CkBAIC01MTgsODEgKzUxOCw4MSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBhY3R1YWxDb25uZWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHJldHVybiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQogICAgICAqLwogICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBnZXRQYXNzd29yZENyZWRlbnRpYWwoKSB7CiAgICAgICAgIHJldHVybiBwYXNzd2RDcmVkZW50aWFsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QgYW5kIHRocm93cyBhbgogICAgICAqIGV4Y2VwdGlvbiBpZiBpdCBpcyBub3QgdmFsaWQuIEEgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGlzIG5vdCB2YWxpZCBpZgogICAgICAqIGRlc3Ryb3kgaGFzIG5vdCBiZWVuIGNhbGxlZCBhbmQgbm8gcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBoYXMKICAgICAgKiBvY2N1cnJlZCByZW5kZXJpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gdW51c2FibGUuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIDxjb2RlPmRlc3Ryb3k8L2NvZGU+IGhhcyBiZWVuIGNhbGxlZCBvbiB0aGlzIAotICAgICAqCQkJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugb3IgaWYgYSAKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJyZWQgcmVuZGVyaW5nIGl0IHVudXNhYmxlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiA8Y29kZT5kZXN0cm95PC9jb2RlPiBoYXMgYmVlbiBjYWxsZWQgb24gdGhpcworICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugb3IgaWYgYQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBvY2N1cnJlZCByZW5kZXJpbmcgaXQgdW51c2FibGUKICAgICAgKi8KICAgICAvL0dKQ0lOVAogICAgIHZvaWQgY2hlY2tJZlZhbGlkKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSB8fCBpc1VzYWJsZSA9PSBmYWxzZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGlzIE1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyB0aGUgcGh5c2ljYWwgIiArIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGlzIE1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyB0aGUgcGh5c2ljYWwgIiArCiAgICAgICAgICAgICAgICAgImNvbm5lY3Rpb24gaXMgbm90IHVzYWJsZS4iKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gd2hlbiBpdHMgY2xvc2UgbWV0aG9kIGlzCiAgICAgICogY2FsbGVkLiBUaGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSAgaW52YWxpZGF0ZXMgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCiAgICAgICogYW5kIHNlbmRzIGEgQ09OTkVDVElPTl9DTE9TRUQgZXZlbnQgdG8gYWxsIHRoZSByZWdpc3RlcmVkIGV2ZW50IGxpc3RlbmVycy4KICAgICAgKgotICAgICAqIEBwYXJhbQllCUV4Y2VwdGlvbiB0aGF0IG1heSBoYXZlIG9jY3VyZWQgd2hpbGUgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKLSAgICAgKiBAcGFyYW0JY29ubkhvbGRlck9iamVjdAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGhhcyBiZWVuIGNsb3NlZAotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCWluIGNhc2UgY2xvc2luZyB0aGUgc3FsIGNvbm5lY3Rpb24gZ290IG91dCBvZgotICAgICAqICAgICAgICAgCSAgICAgICAgICAgIAk8Y29kZT5nZXRDb25uZWN0aW9uPC9jb2RlPiBvbiB0aGUgdW5kZXJseWluZyAKLSAgICAgKgkJCQk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiB0aHJvd3MgYW4gZXhjZXB0aW9uCisgICAgICogQHBhcmFtICAgIGUgICAgRXhjZXB0aW9uIHRoYXQgbWF5IGhhdmUgb2NjdXJlZCB3aGlsZSBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGhhbmRsZQorICAgICAqIEBwYXJhbSAgICBjb25uSG9sZGVyT2JqZWN0ICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgaGFzIGJlZW4gY2xvc2VkCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgaW4gY2FzZSBjbG9zaW5nIHRoZSBzcWwgY29ubmVjdGlvbiBnb3Qgb3V0IG9mCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPmdldENvbm5lY3Rpb248L2NvZGU+IG9uIHRoZSB1bmRlcmx5aW5nCisgICAgICogICAgICAgICAgICAgICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gdGhyb3dzIGFuIGV4Y2VwdGlvbgogICAgICAqLwogICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChFeGNlcHRpb24gZSwgQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgY29ubkhvbGRlck9iamVjdC5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICBjZS5zZXRDb25uZWN0aW9uSGFuZGxlKGNvbm5Ib2xkZXJPYmplY3QpOwogICAgICAgICBsaXN0ZW5lci5jb25uZWN0aW9uQ2xvc2VkKGNlKTsKLQkKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gd2hlbiBpdCBkZXRlY3RzIGEgY29ubmVjaW9uCiAgICAgICogcmVsYXRlZCBlcnJvci4KICAgICAgKgotICAgICAqIEBwYXJhbQllCUV4Y2VwdGlvbiB0aGF0IGhhcyBvY2N1cnJlZCBkdXJpbmcgYW4gb3BlcmF0aW9uIG9uIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCi0gICAgICogQHBhcmFtCWNvbm5Ib2xkZXJPYmplY3QJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBkZXRlY3RlZCB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJY29ubmVjdGlvbiBlcnJvcgorICAgICAqIEBwYXJhbSAgICBlICAgIEV4Y2VwdGlvbiB0aGF0IGhhcyBvY2N1cnJlZCBkdXJpbmcgYW4gb3BlcmF0aW9uIG9uIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIGNvbm5Ib2xkZXJPYmplY3QgICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBkZXRlY3RlZCB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBlcnJvcgogICAgICAqLwotICAgIHZvaWQgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoRXhjZXB0aW9uIGUsIAorICAgIHZvaWQgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoRXhjZXB0aW9uIGUsCiAgICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0KSB7Ci0JICAgIAorCiAgICAgICAgICBDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBjZWwgPSB0aGlzLmxpc3RlbmVyOwogICAgICAgICAgQ29ubmVjdGlvbkV2ZW50IGNlID0gbnVsbDsKICAgICAgICAgIGNlID0gZSA9PSBudWxsID8gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9FUlJPUl9PQ0NVUlJFRCkKICAgICAgICAgICAgICAgICAgICAgOiBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0VSUk9SX09DQ1VSUkVELCBlKTsKICAgICAgICAgIGlmIChjb25uSG9sZGVyT2JqZWN0ICE9IG51bGwpIHsKICAgICAgICAgICAgICBjZS5zZXRDb25uZWN0aW9uSGFuZGxlKGNvbm5Ib2xkZXJPYmplY3QpOwotICAgICAgICAgfSAgICAKKyAgICAgICAgIH0KIAogICAgICAgICAgY2VsLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGNlKTsKICAgICAgICAgIGlzVXNhYmxlID0gZmFsc2U7CiAgICAgfQotICAgIAotICAgIAotICAgIAorCisKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdoZW4gaXRzIHN0YXJ0IG1ldGhvZAogICAgICAqIGhhcyBiZWVuIGludm9rZWQuCkBAIC02MDYsNyArNjA2LDcgQEAKICAgICAgICAgICAgIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGUsIG51bGwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hlbiBpdHMgZW5kIG1ldGhvZAogICAgICAqIGhhcyBiZWVuIGludm9rZWQuCkBAIC02MjAsNyArNjIwLDcgQEAKICAgICAgICAgICAgIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGUsIG51bGwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGEgQ29ubmVjdGlvbiBIYW5kbGUgdG8gY2hlY2sgaWYgaXQgaXMKICAgICAgKiB0aGUgYWN0aXZlIENvbm5lY3Rpb24gSGFuZGxlLiBJZiBpdCBpcyBub3QgdGhlIGFjdGl2ZSBDb25uZWN0aW9uCkBAIC02MjksMjQgKzYyOSwyNCBAQAogICAgICAqIENvbm5lY3Rpb24gSGFuZGxlIG9iamVjdCB0byB0aGlzIG9iamVjdCBpZiB0aGUgYWN0aXZlIENvbm5lY3Rpb24KICAgICAgKiBIYW5kbGUgaXMgbnVsbC4KICAgICAgKgotICAgICAqIEBwYXJhbQljaAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IHJlcXVlc3RzIHRoaXMKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSB3aGV0aGVyCi0gICAgICoJCQlpdCBjYW4gYmUgYWN0aXZlIG9yIG5vdAotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCWluIGNhc2UgdGhlIHBoeXNpY2FsIGlzIG5vdCB2YWxpZCBvcgotICAgICAqCQkJCXRoZXJlIGlzIGFscmVhZHkgYW4gYWN0aXZlIGNvbm5lY3Rpb24gaGFuZGxlCisgICAgICogQHBhcmFtICAgIGNoICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgcmVxdWVzdHMgdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHdoZXRoZXIKKyAgICAgKiAgICAgICAgICAgIGl0IGNhbiBiZSBhY3RpdmUgb3Igbm90CisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgaW4gY2FzZSB0aGUgcGh5c2ljYWwgaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgdGhlcmUgaXMgYWxyZWFkeSBhbiBhY3RpdmUgY29ubmVjdGlvbiBoYW5kbGUKICAgICAgKi8KLSAgICAgCisKICAgICB2b2lkIGNoZWNrSWZBY3RpdmUoQ29ubmVjdGlvbkhvbGRlciBjaCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUgfHwgaXNVc2FibGUgPT0gZmFsc2UpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIlRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB1c2FibGUiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlID09IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsKICAgICAgICAgICAgIGNoLnNldEFjdGl2ZSh0cnVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IGNoKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBoYW5kbGUgY2Fubm90IGJlIHVzZWQgYXMgYW5vdGhlciBjb25uZWN0aW9uIGlzIGN1cnJlbnRseSBhY3RpdmUiKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQppbmRleCAyMGYwM2FhLi5mNjUwZDQxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogLyoqCiAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzAzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhIHsKIApAQCAtNDEsODEgKzQxLDgxIEBACiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4JaWYgZ2V0dGluZyB0aGUgRGF0YWJhc2VNZXRhRGF0YSBvYmplY3QgZmFpbHMKKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gICAgaWYgZ2V0dGluZyB0aGUgRGF0YWJhc2VNZXRhRGF0YSBvYmplY3QgZmFpbHMKICAgICAgKi8KICAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YShNYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICAgICAgICAgIGRtZCA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKS5nZXRNZXRhRGF0YSgpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBwcm9kdWN0IG5hbWUgb2YgdGhlIHVuZGVybHlpbmcgRUlTIGluc3RhbmNlIGNvbm5lY3RlZAogICAgICAqIHRocm91Z2ggdGhlIE1hbmFnZWRDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglQcm9kdWN0IG5hbWUgb2YgdGhlIEVJUyBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBQcm9kdWN0IG5hbWUgb2YgdGhlIEVJUyBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFSVNQcm9kdWN0TmFtZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldERhdGFiYXNlUHJvZHVjdE5hbWUoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZG5hbWUiLCBzcWxlKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2RuYW1lIiwgc3FsZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBwcm9kdWN0IHZlcnNpb24gb2YgdGhlIHVuZGVybHlpbmcgRUlTIGluc3RhbmNlIGNvbm5lY3RlZAogICAgICAqIHRocm91Z2ggdGhlIE1hbmFnZWRDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglQcm9kdWN0IHZlcnNpb24gb2YgdGhlIEVJUyBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBQcm9kdWN0IHZlcnNpb24gb2YgdGhlIEVJUyBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFSVNQcm9kdWN0VmVyc2lvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldERhdGFiYXNlUHJvZHVjdFZlcnNpb24oKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZHZlcnMiLCBzcWxlKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2R2ZXJzIiwgc3FsZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCksIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgbWF4aW11bSBsaW1pdCBvbiBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKICAgICAgKiB0aGF0IGFuIEVJUyBpbnN0YW5jZSBjYW4gc3VwcG9ydCBhY3Jvc3MgY2xpZW50IHByb2Nlc3Nlcy4KICAgICAgKgotICAgICAqIEByZXR1cm4JTWF4aW11bSBsaW1pdCBmb3IgbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIE1heGltdW0gbGltaXQgZm9yIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucworICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRNYXhDb25uZWN0aW9ucygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldE1heENvbm5lY3Rpb25zKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX21heGNvbm4iKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX21heGNvbm4iKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIG5hbWUgb2YgdGhlIHVzZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4gVGhlIG5hbWUKICAgICAgKiBjb3JyZXNwb25kcyB0byB0aGUgcmVzb3VyY2UgcHJpbmNpcGFsIHVuZGVyIHdob3NlIHdob3NlIHNlY3VyaXR5IGNvbnRleHQsIGEgY29ubmVjdGlvbgogICAgICAqIHRvIHRoZSBFSVMgaW5zdGFuY2UgaGFzIGJlZW4gZXN0YWJsaXNoZWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCW5hbWUgb2YgdGhlIHVzZXIKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbmFtZSBvZiB0aGUgdXNlcgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyTmFtZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGpha2FydGEucmVzb3VyY2Uuc3BpLnNlY3VyaXR5LlBhc3N3b3JkQ3JlZGVudGlhbCBwYyA9IG1jLmdldFBhc3N3b3JkQ3JlZGVudGlhbCgpOwogICAgICAgICBpZihwYyAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gcGMuZ2V0VXNlck5hbWUoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbWMuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkuZ2V0VXNlcigpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQppbmRleCBkYWQxZDc3Li40ODJmMzMyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCkBAIC0yNCwxNDggKzI0LDE0OCBAQAogLyoqCiAgKiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiB3cmFwcGVyIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMjMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzIzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgWEFSZXNvdXJjZUltcGwgaW1wbGVtZW50cyBYQVJlc291cmNlIHsKIAogICAgIFhBUmVzb3VyY2UgeGFyOwogICAgIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIFhBUmVzb3VyY2VJbXBsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGFyCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+Ci0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB4YXIgICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2VJbXBsKFhBUmVzb3VyY2UgeGFyLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLnhhciA9IHhhcjsKICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCB0aGUgZ2xvYmFsIHRyYW5zYWN0aW9uIHNwZWNpZmllZCBieSB4aWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKLSAgICAgKiBAcGFyYW0Jb25lUGhhc2UJSWYgdHJ1ZSwgdGhlIHJlc291cmNlIG1hbmFnZXIgc2hvdWxkIHVzZSBhIG9uZS1waGFzZSBjb21taXQgCi0gICAgICogICAgICAgCSAgICAgICAgCXByb3RvY29sIHRvIGNvbW1pdCB0aGUgd29yayBkb25lIG9uIGJlaGFsZiBvZiB4aWQuCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIG9uZVBoYXNlICAgIElmIHRydWUsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHNob3VsZCB1c2UgYSBvbmUtcGhhc2UgY29tbWl0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sIHRvIGNvbW1pdCB0aGUgd29yayBkb25lIG9uIGJlaGFsZiBvZiB4aWQuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KFhpZCB4aWQsIGJvb2xlYW4gb25lUGhhc2UpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vdGhlIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkIGNhbGwgaGFzIGNvbWUgaGVyZSBiZWNhc3VlCi0JLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKLQkvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAotCS8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcwotCS8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKLQkvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIC8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93CisgICAgLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKKyAgICAvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCisgICAgLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICAgICAgeGFyLmNvbW1pdCh4aWQsIG9uZVBoYXNlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbmRzIHRoZSB3b3JrIHBlcmZvcm1lZCBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2guCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBpcyB0aGUgc2FtZSBhcyB3aGF0IAotICAgICAqCQkJd2FzIHVzZWQgcHJldmlvdXNseSBpbiB0aGUgc3RhcnQgbWV0aG9kLgotICAgICAqIEBwYXJhbQlmbGFncwlPbmUgb2YgVE1TVUNDRVNTLCBUTUZBSUwsIG9yIFRNU1VTUEVORAorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQKKyAgICAgKiAgICAgICAgICAgIHdhcyB1c2VkIHByZXZpb3VzbHkgaW4gdGhlIHN0YXJ0IG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgZmxhZ3MgICAgT25lIG9mIFRNU1VDQ0VTUywgVE1GQUlMLCBvciBUTVNVU1BFTkQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICB4YXIuZW5kKHhpZCwgZmxhZ3MpOwogICAgICAgICAvL0dKQ0lOVAotCS8vbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICAvL21jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGVsbCB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgYSBoZXVyaXN0aWNhbGx5IGNvbXBsZXRlZCB0cmFuc2FjdGlvbiBicmFuY2guCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgeGFyLmZvcmdldCh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIE9idGFpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIHNldCBmb3IgdGhpcyAKKyAgICAgKiBPYnRhaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBzZXQgZm9yIHRoaXMKICAgICAgKiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcworICAgICAqIEByZXR1cm4gICAgdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcwogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0VHJhbnNhY3Rpb25UaW1lb3V0KCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5nZXRUcmFuc2FjdGlvblRpbWVvdXQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlIAotICAgICAqIHJlcHJlc2VudGVkIGJ5IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSByZXNvdWNlIG1hbmFnZXIgCisgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZQorICAgICAqIHJlcHJlc2VudGVkIGJ5IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSByZXNvdWNlIG1hbmFnZXIKICAgICAgKiBpbnN0YW5jZSByZXByZXNlbnRlZCBieSB0aGUgcGFyYW1ldGVyIHhhcmVzLgogICAgICAqCi0gICAgICogQHBhcmFtCXhhcmVzCUFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aG9zZSByZXNvdXJjZSBtYW5hZ2VyIAotICAgICAqIAkJCWluc3RhbmNlIGlzIHRvIGJlIGNvbXBhcmVkIHdpdGggdGhlIHJlc291cmNlCi0gICAgICogQHJldHVybgl0cnVlIGlmIGl0J3MgdGhlIHNhbWUgUk0gaW5zdGFuY2U7IG90aGVyd2lzZSBmYWxzZS4KKyAgICAgKiBAcGFyYW0gICAgeGFyZXMgICAgQW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdob3NlIHJlc291cmNlIG1hbmFnZXIKKyAgICAgKiAgICAgICAgICAgICBpbnN0YW5jZSBpcyB0byBiZSBjb21wYXJlZCB3aXRoIHRoZSByZXNvdXJjZQorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiBpdCdzIHRoZSBzYW1lIFJNIGluc3RhbmNlOyBvdGhlcndpc2UgZmFsc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNTYW1lUk0oWEFSZXNvdXJjZSB4YXJlcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5pc1NhbWVSTSh4YXJlcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQXNrIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIHByZXBhcmUgZm9yIGEgdHJhbnNhY3Rpb24gY29tbWl0IAorICAgICAqIEFzayB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBwcmVwYXJlIGZvciBhIHRyYW5zYWN0aW9uIGNvbW1pdAogICAgICAqIG9mIHRoZSB0cmFuc2FjdGlvbiBzcGVjaWZpZWQgaW4geGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCi0gICAgICogQHJldHVybglBIHZhbHVlIGluZGljYXRpbmcgdGhlIHJlc291cmNlIG1hbmFnZXIncyB2b3RlIG9uIHRoZSAKLSAgICAgKgkJb3V0Y29tZSBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSBwb3NzaWJsZSB2YWx1ZXMKLSAgICAgKgkJYXJlOiBYQV9SRE9OTFkgb3IgWEFfT0suIElmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHdhbnRzIAotICAgICAqCQl0byByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uLCBpdCBzaG91bGQgZG8gc28KLSAgICAgKgkJYnkgcmFpc2luZyBhbiBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4gaW4gdGhlIHByZXBhcmUgbWV0aG9kLgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEByZXR1cm4gICAgQSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSByZXNvdXJjZSBtYW5hZ2VyJ3Mgdm90ZSBvbiB0aGUKKyAgICAgKiAgICAgICAgb3V0Y29tZSBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSBwb3NzaWJsZSB2YWx1ZXMKKyAgICAgKiAgICAgICAgYXJlOiBYQV9SRE9OTFkgb3IgWEFfT0suIElmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHdhbnRzCisgICAgICogICAgICAgIHRvIHJvbGwgYmFjayB0aGUgdHJhbnNhY3Rpb24sIGl0IHNob3VsZCBkbyBzbworICAgICAqICAgICAgICBieSByYWlzaW5nIGFuIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPiBpbiB0aGUgcHJlcGFyZSBtZXRob2QuCiAgICAgICovCiAgICAgcHVibGljIGludCBwcmVwYXJlKFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIucHJlcGFyZSh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIE9idGFpbiBhIGxpc3Qgb2YgcHJlcGFyZWQgdHJhbnNhY3Rpb24gYnJhbmNoZXMgZnJvbSBhIHJlc291cmNlIG1hbmFnZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZmxhZwlPbmUgb2YgVE1TVEFSVFJTQ0FOLCBUTUVORFJTQ0FOLCBUTU5PRkxBR1MuIFRNTk9GTEFHUyAKLSAgICAgKgkJCW11c3QgYmUgdXNlZCB3aGVuIG5vIG90aGVyIGZsYWdzIGFyZSBzZXQgaW4gZmxhZ3MuCi0gICAgICogQHJldHVybglUaGUgcmVzb3VyY2UgbWFuYWdlciByZXR1cm5zIHplcm8gb3IgbW9yZSBYSURzIGZvciB0aGUgdHJhbnNhY3Rpb24gCi0gICAgICoJCWJyYW5jaGVzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBhIHByZXBhcmVkIG9yIGhldXJpc3RpY2FsbHkgCi0gICAgICoJCWNvbXBsZXRlZCBzdGF0ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgb3BlcmF0aW9uLCB0aGUgcmVzb3VyY2UKLSAgICAgKgkJbWFuYWdlciBzaG91bGQgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gICAgZmxhZyAgICBPbmUgb2YgVE1TVEFSVFJTQ0FOLCBUTUVORFJTQ0FOLCBUTU5PRkxBR1MuIFRNTk9GTEFHUworICAgICAqICAgICAgICAgICAgbXVzdCBiZSB1c2VkIHdoZW4gbm8gb3RoZXIgZmxhZ3MgYXJlIHNldCBpbiBmbGFncy4KKyAgICAgKiBAcmV0dXJuICAgIFRoZSByZXNvdXJjZSBtYW5hZ2VyIHJldHVybnMgemVybyBvciBtb3JlIFhJRHMgZm9yIHRoZSB0cmFuc2FjdGlvbgorICAgICAqICAgICAgICBicmFuY2hlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gYSBwcmVwYXJlZCBvciBoZXVyaXN0aWNhbGx5CisgICAgICogICAgICAgIGNvbXBsZXRlZCBzdGF0ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgb3BlcmF0aW9uLCB0aGUgcmVzb3VyY2UKKyAgICAgKiAgICAgICAgbWFuYWdlciBzaG91bGQgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgWGlkW10gcmVjb3ZlcihpbnQgZmxhZykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5yZWNvdmVyKGZsYWcpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEluZm9ybSB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byByb2xsIGJhY2sgd29yayBkb25lIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaAogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy90aGUgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQgY2FsbCBoYXMgY29tZSBoZXJlIGJlY2FzdWUKLQkvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdwotCS8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCi0JLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCi0JLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAotCS8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgorICAgIC8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93CisgICAgLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKKyAgICAvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCisgICAgLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCiAgICAgICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgICAgIHhhci5yb2xsYmFjayh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGZvciB0aGlzIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlY29uZHMJdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpcyBzZXQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZmFsc2UuCisgICAgICogQHBhcmFtICAgIHNlY29uZHMgICAgdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpcyBzZXQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZmFsc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnNldFRyYW5zYWN0aW9uVGltZW91dChzZWNvbmRzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTdGFydCB3b3JrIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaCBzcGVjaWZpZWQgaW4geGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzb3VyY2UKLSAgICAgKiBAcmV0dXJuCWZsYWdzCU9uZSBvZiBUTU5PRkxBR1MsIFRNSk9JTiwgb3IgVE1SRVNVTUUKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZQorICAgICAqIEByZXR1cm4gICAgZmxhZ3MgICAgT25lIG9mIFRNTk9GTEFHUywgVE1KT0lOLCBvciBUTVJFU1VNRQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy9HSkNJTlQKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKaW5kZXggOTY3ODY4Yi4uNjQxMDU1NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9IiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvc3BpIi8+Ci0gCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzcsNSArMzcsNSBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0Ii8+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKaW5kZXggY2UzMjFhZi4uOWU3ZjI1MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCkBAIC0yNiw4ICsyNiw4IEBACiAvKioKICAqIEV4ZWN1dGUgdGhlIG1ldGhvZHMgYmFzZWQgb24gdGhlIHBhcmFtZXRlcnMuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBNZXRob2RFeGVjdXRvciBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCkBAIC0zOSwxMzAgKzM5LDEzMCBAQAogICAgIC8qKgogICAgICAqIEV4Y2V1dGUgYSBzaW1wbGUgc2V0IE1ldGhvZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl2YWx1ZQlWYWx1ZSB0byBiZSBzZXQuCi0gICAgICogQHBhcmFtCW1ldGhvZAk8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0Jb2JqCU9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgorICAgICAqIEBwYXJhbSAgICB2YWx1ZSAgICBWYWx1ZSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIG1ldGhvZCAgICA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIE9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgogICAgICAqIEB0aHJvd3MgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiwgaW4gY2FzZSBvZiB0aGUgbWlzbWF0Y2ggb2YgcGFyYW1ldGVyIHZhbHVlcyBvcgotICAgICAqCQlhIHNlY3VyaXR5IHZpb2xhdGlvbi4gICAgIAorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBydW5KYXZhQmVhbk1ldGhvZChTdHJpbmcgdmFsdWUsIE1ldGhvZCBtZXRob2QsIE9iamVjdCBvYmopIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJaWYgKHZhbHVlPT1udWxsIHx8IHZhbHVlLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0gICAgCSAgICByZXR1cm47Ci0gICAgCX0KLSAgICAJdHJ5IHsKLSAgICAJICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotICAgIAkgICAgaWYgKCBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAxKSB7Ci0gICAgCSAgICAgICAgT2JqZWN0W10gdmFsdWVzID0gbmV3IE9iamVjdFsxXTsKLSAgICAJICAgIAl2YWx1ZXNbMF0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzWzBdLCB2YWx1ZSk7Ci0gICAgCSAgICAJbWV0aG9kLmludm9rZShvYmosIHZhbHVlcyk7Ci0gICAgCSAgICB9Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0KKyAgICAgICAgaWYgKHZhbHVlPT1udWxsIHx8IHZhbHVlLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOworICAgICAgICAgICAgaWYgKCBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICAgICAgT2JqZWN0W10gdmFsdWVzID0gbmV3IE9iamVjdFsxXTsKKyAgICAgICAgICAgICAgICB2YWx1ZXNbMF0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzWzBdLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgbWV0aG9kLmludm9rZShvYmosIHZhbHVlcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEV4ZWN1dGVzIHRoZSBtZXRob2QuICAgICAKKyAgICAgKiBFeGVjdXRlcyB0aGUgbWV0aG9kLgogICAgICAqCi0gICAgICogQHBhcmFtCW1ldGhvZCA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0Jb2JqCU9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgotICAgICAqIEBwYXJhbQl2YWx1ZXMJUGFyYW1ldGVyIHZhbHVlcyBmb3IgZXhlY3V0aW5nIHRoZSBtZXRob2QuCisgICAgICogQHBhcmFtICAgIG1ldGhvZCA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIE9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgorICAgICAqIEBwYXJhbSAgICB2YWx1ZXMgICAgUGFyYW1ldGVyIHZhbHVlcyBmb3IgZXhlY3V0aW5nIHRoZSBtZXRob2QuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBydW5NZXRob2QoTWV0aG9kIG1ldGhvZCwgT2JqZWN0IG9iaiwgVmVjdG9yIHZhbHVlcykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAl0cnkgewotCSAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLQkgICAgaWYgKHZhbHVlcy5zaXplKCkgIT0gcGFyYW1ldGVycy5sZW5ndGgpIHsKLQkgICAgICAgIHJldHVybjsKLQkgICAgfQotICAgIAkgICAgT2JqZWN0W10gYWN0dWFsVmFsdWVzID0gbmV3IE9iamVjdFtwYXJhbWV0ZXJzLmxlbmd0aF07Ci0gICAgCSAgICBmb3IgKGludCBpID0wOyBpPHBhcmFtZXRlcnMubGVuZ3RoIDsgaSsrKSB7Ci0gICAgCSAgICAJU3RyaW5nIHZhbCA9IChTdHJpbmcpIHZhbHVlcy5nZXQoaSk7Ci0gICAgCSAgICAJaWYgKHZhbC50cmltKCkuZXF1YWxzKCJOVUxMIikpIHsKLSAgICAJICAgIAkgICAgYWN0dWFsVmFsdWVzW2ldID0gbnVsbDsKLSAgICAJICAgIAl9IGVsc2UgewotICAgIAkgICAgCSAgICBhY3R1YWxWYWx1ZXNbaV0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzW2ldLCB2YWwpOwotICAgIAkgICAgCX0KLSAgICAJICAgIH0KLSAgICAJICAgIG1ldGhvZC5pbnZva2Uob2JqLCBhY3R1YWxWYWx1ZXMpOwotICAgIAl9Y2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7CisgICAgICAgIGlmICh2YWx1ZXMuc2l6ZSgpICE9IHBhcmFtZXRlcnMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIE9iamVjdFtdIGFjdHVhbFZhbHVlcyA9IG5ldyBPYmplY3RbcGFyYW1ldGVycy5sZW5ndGhdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9MDsgaTxwYXJhbWV0ZXJzLmxlbmd0aCA7IGkrKykgeworICAgICAgICAgICAgICAgIFN0cmluZyB2YWwgPSAoU3RyaW5nKSB2YWx1ZXMuZ2V0KGkpOworICAgICAgICAgICAgICAgIGlmICh2YWwudHJpbSgpLmVxdWFscygiTlVMTCIpKSB7CisgICAgICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlc1tpXSA9IG51bGw7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsVmFsdWVzW2ldID0gY29udmVydFR5cGUocGFyYW1ldGVyc1tpXSwgdmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZXRob2QuaW52b2tlKG9iaiwgYWN0dWFsVmFsdWVzKTsKKyAgICAgICAgfWNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb252ZXJ0cyB0aGUgdHlwZSBmcm9tIFN0cmluZyB0byB0aGUgQ2xhc3MgdHlwZS4KICAgICAgKgotICAgICAqIEBwYXJhbQl0eXBlCQlDbGFzcyBuYW1lIHRvIHdoaWNoIHRoZSBjb252ZXJzaW9uIGlzIHJlcXVpcmVkLgotICAgICAqIEBwYXJhbQlwYXJhbWV0ZXIJU3RyaW5nIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KLSAgICAgKiBAcmV0dXJuCUNvbnZlcnRlZCB2YWx1ZS4KKyAgICAgKiBAcGFyYW0gICAgdHlwZSAgICAgICAgQ2xhc3MgbmFtZSB0byB3aGljaCB0aGUgY29udmVyc2lvbiBpcyByZXF1aXJlZC4KKyAgICAgKiBAcGFyYW0gICAgcGFyYW1ldGVyICAgIFN0cmluZyB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQuCisgICAgICogQHJldHVybiAgICBDb252ZXJ0ZWQgdmFsdWUuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLiAgICAgCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHByaXZhdGUgT2JqZWN0IGNvbnZlcnRUeXBlKENsYXNzIHR5cGUsIFN0cmluZyBwYXJhbWV0ZXIpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJdHJ5IHsKLSAgICAJICAgIFN0cmluZyB0eXBlTmFtZSA9IHR5cGUuZ2V0TmFtZSgpOwotICAgIAkgICAgaWYgKCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TdHJpbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5PYmplY3QiKSkgewotICAgIAkgICAgCXJldHVybiBwYXJhbWV0ZXI7Ci0gICAgCSAgICB9Ci0gICAgCQotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiaW50IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuSW50ZWdlciIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBJbnRlZ2VyKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9Ci0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoInNob3J0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU2hvcnQiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgU2hvcnQocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYnl0ZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJ5dGUiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgQnl0ZShwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJsb25nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuTG9uZyIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBMb25nKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZmxvYXQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5GbG9hdCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBGbG9hdChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJkb3VibGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Eb3VibGUiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgRG91YmxlKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnRGVjaW1hbCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdJbnRlZ2VyIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYm9vbGVhbiIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJvb2xlYW4iKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgQm9vbGVhbihwYXJhbWV0ZXIpOwotICAgICAgICAgICAgfQkJCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTdHJpbmcgdHlwZU5hbWUgPSB0eXBlLmdldE5hbWUoKTsKKyAgICAgICAgICAgIGlmICggdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU3RyaW5nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuT2JqZWN0IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyOworICAgICAgICAgICAgfQogCi0gICAgCSAgICByZXR1cm4gcGFyYW1ldGVyOwotICAgIAl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX25mZSIsIHBhcmFtZXRlcik7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24ocGFyYW1ldGVyKyI6IE5vdCBhIHZhbGlkIHZhbHVlIGZvciB0aGlzIG1ldGhvZCAiKTsKLSAgICAJfQorICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiaW50IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuSW50ZWdlciIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoInNob3J0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU2hvcnQiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2hvcnQocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYnl0ZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJ5dGUiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQnl0ZShwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJsb25nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuTG9uZyIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMb25nKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImZsb2F0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRmxvYXQiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZG91YmxlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRG91YmxlIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERvdWJsZShwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnRGVjaW1hbCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnSW50ZWdlciIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJib29sZWFuIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQm9vbGVhbiIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCb29sZWFuKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7CisgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbmZlIiwgcGFyYW1ldGVyKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihwYXJhbWV0ZXIrIjogTm90IGEgdmFsaWQgdmFsdWUgZm9yIHRoaXMgbWV0aG9kICIpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQppbmRleCBmYzE0OWJmLi5mMDA4ZTdmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCkBAIC0yOSwzNiArMjksMzYgQEAKIC8qKgogICogU2VjdXJpdHlVdGlscyBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIyCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMgorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFNlY3VyaXR5VXRpbHMgewogCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QsIGdpdmVuIAotICAgICAqIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBzdWJqZWN0IGFuZCB0aGUgCi0gICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPi4gSXQgZmlyc3QgY2hlY2tzIGlmIHRoZSAKLSAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGlzIG51bGwgb3Igbm90LiBJZiBpdCBpcyBub3QgbnVsbCwgCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QsIGdpdmVuCisgICAgICogdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIHN1YmplY3QgYW5kIHRoZQorICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4uIEl0IGZpcnN0IGNoZWNrcyBpZiB0aGUKKyAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGlzIG51bGwgb3Igbm90LiBJZiBpdCBpcyBub3QgbnVsbCwKICAgICAgKiBpdCBjb25zdHJ1Y3RzIGEgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2l0aAogICAgICAqIHRoZSB1c2VyIGFuZCBwYXNzd29yZCBmaWVsZHMgZnJvbSB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBhbmQgcmV0dXJucyB0aGlzCi0gICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QuIElmIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IAotICAgICAqIGlzIG51bGwsIGl0IHJldHJpZXZlcyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGZyb20gCisgICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QuIElmIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CisgICAgICogaXMgbnVsbCwgaXQgcmV0cmlldmVzIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdHMgZnJvbQogICAgICAqIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgYW5kIHJldHVybnMgdGhlIGZpcnN0Ci0gICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYSAKKyAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCB3aGljaCBjb250YWlucyBhCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgaW5zdGFuY2UgZXF1aXZhbGVudAogICAgICAqIHRvIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBwYXJhbWV0ZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPgotICAgICAqIEBwYXJhbQlpbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPglnZW5lcmljIGV4Y2VwdGlvbiBpZiBvcGVyYXRpb24gZmFpbHMKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlNlY3VyaXR5RXhjZXB0aW9uPC9jb2RlPglpZiBhY2Nlc3MgdG8gdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIGlzIGRlbmllZAorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+ICAgIGdlbmVyaWMgZXhjZXB0aW9uIGlmIG9wZXJhdGlvbiBmYWlscworICAgICAqIEB0aHJvd3MgICAgPGNvZGU+U2VjdXJpdHlFeGNlcHRpb248L2NvZGU+ICAgIGlmIGFjY2VzcyB0byB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgaXMgZGVuaWVkCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBQYXNzd29yZENyZWRlbnRpYWwgZ2V0UGFzc3dvcmRDcmVkZW50aWFsKGZpbmFsIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsCiAgICAgICAgICBmaW5hbCBTdWJqZWN0IHN1YmplY3QsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogCi0JaWYgKGluZm8gPT0gbnVsbCkgeworICAgIGlmIChpbmZvID09IG51bGwpIHsKICAgICAgICAgICAgIGlmIChzdWJqZWN0ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC04OSwxNCArODksMTQgQEAKICAgICAgICAgICAgIHJldHVybiBwYzsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0d28gc3RyaW5ncyBhcmUgZXF1YWw7IGZhbHNlIG90aGVyd2lzZQotICAgICAqIAotICAgICAqIEBwYXJhbQlzdHIxCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAcGFyYW0Jc3RyMgk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSB0d28gc3RyaW5ncyBhcmUgZXF1YWwKLSAgICAgKiAgICAgICAgCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHN0cjEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzdHIyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHR3byBzdHJpbmdzIGFyZSBlcXVhbAorICAgICAqICAgICAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgc3RhdGljIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKFN0cmluZyBzdHIxLCBTdHJpbmcgc3RyMikgewogICAgICAgICBpZiAoc3RyMSA9PSBudWxsKSB7CkBAIC0xMDksMTAgKzEwOSwxMCBAQAogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0d28gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGFyZSBlcXVhbDsgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcEMxCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAcGFyYW0JcEMyCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHR3byBQYXNzd29yZENyZWRlbnRpYWxzIGFyZSBlcXVhbAotICAgICAqICAgICAgICAJZmFsc2UJb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHBDMSAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBDMiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSB0d28gUGFzc3dvcmRDcmVkZW50aWFscyBhcmUgZXF1YWwKKyAgICAgKiAgICAgICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHN0YXRpYyBwdWJsaWMgYm9vbGVhbiBpc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKFBhc3N3b3JkQ3JlZGVudGlhbCBwQzEsIFBhc3N3b3JkQ3JlZGVudGlhbCBwQzIpIHsKICAgICAgICAgaWYgKHBDMSA9PSBwQzIpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKaW5kZXggYTU1YmJmMC4uZjA2MGU3ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iLiIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3V0aWwiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzMsNyArMzMsNyBAQAogICAgICAgPGphciBqYXJmaWxlPSIke2Rpc3QuZGlyfS8ke3BrZy5kaXJ9L3V0aWwuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCiAgICAgICAgIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyoiLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTEzIiBkZXBlbmRzPSJjb21waWxlIi8+CiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTE0IiBkZXBlbmRzPSJjb21waWxlIi8+CiAKQEAgLTQ0LDUgKzQ0LDUgQEAKICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KLSAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YQppbmRleCBlZTM2OTVmLi5hNDVkYzBmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhCkBAIC0xNywxNSArMTcsMTUgQEAKIHBhY2thZ2Ugc2FtcGxlcy5lamIuc3ViY2xhc3Npbmcuc2VydmxldDsKIAogaW1wb3J0IGphdmEuaW8uKjsKLWltcG9ydCBqYXZhLnV0aWwuKjsgCi1pbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7IAotaW1wb3J0IGphdmF4Lm5hbWluZy4qOyAKLWltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOyAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsKK2ltcG9ydCBqYXZheC5uYW1pbmcuKjsKK2ltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogCi1pbXBvcnQgc2FtcGxlcy5lamIuc3ViY2xhc3NpbmcuZWpiLio7IAoraW1wb3J0IHNhbXBsZXMuZWpiLnN1YmNsYXNzaW5nLmVqYi4qOwogaW1wb3J0IGNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjsKIAotcHVibGljIGNsYXNzIFNpbXBsZUJhbmtTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgeyAgCitwdWJsaWMgY2xhc3MgU2ltcGxlQmFua1NlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKIAogICBJbml0aWFsQ29udGV4dCBpbml0Q29udGV4dCA9IG51bGw7CkBAIC00MSwxMyArNDEsMTMgQEAKICAgewogICB9CiAKLSAgcHVibGljIHZvaWQgZG9HZXQgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIAotICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAKKyAgcHVibGljIHZvaWQgZG9HZXQgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCisgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgfSAgCisgIH0KIAotICAvKiogaGFuZGxlcyB0aGUgSFRUUCBQT1NUIG9wZXJhdGlvbiAqKi8gCi0gIHB1YmxpYyB2b2lkIGRvUG9zdCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgCisgIC8qKiBoYW5kbGVzIHRoZSBIVFRQIFBPU1Qgb3BlcmF0aW9uICoqLworICBwdWJsaWMgdm9pZCBkb1Bvc3QgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKIApAQCAtNTcsNyArNTcsNyBAQAogICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgfQotICAgICAgCisKICAgICBkb0xvb2t1cCgpOwogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2ltcGxlQmFua1NlcnZsZXQgaXMgZXhlY3V0aW5nIik7CiAgICAgU3RyaW5nIFNTTiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJTU04iKTsKQEAgLTczLDE0ICs3MywxNCBAQAogICAgIFN0cmluZyB6aXBDb2RlID0gIiI7CiAgICAgbG9uZyBjdXJyZW50U2F2aW5nc0JhbGFuY2UgPSAwOwogICAgIGxvbmcgY3VycmVudENoZWNraW5nQmFsYW5jZSA9IDA7Ci0gICAgIAorCiAgICAgU3RyaW5nIGFjdGlvbiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJhY3Rpb24iKTsKICAgICBpZiAoYWN0aW9uLmVxdWFscygiQ3JlYXRlIikpCiAgICAgewogICAgICAgbWVzc2FnZSA9ICJBZGQgQ3VzdG9tZXIiOwogICAgICAganNwID0gIi9TaW1wbGVCYW5rQWRkLmpzcCI7CiAgICAgfQotICAgIGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoIkFkZCBDdXN0b21lciIpKSAKKyAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJBZGQgQ3VzdG9tZXIiKSkKICAgICB7CiAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFkZCBDdXN0b21lciBidXR0b24gcHJlc3NlZCIpOwogICAgICAgU1NOID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoIlNTTiIpOwpAQCAtOTcsNyArOTcsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSBjdXN0b21lclNhdmluZ3NIb21lLmNyZWF0ZShTU04sIGxhc3ROYW1lLCBmaXJzdE5hbWUsIGFkZHJlc3MxLCBhZGRyZXNzMiwgY2l0eSwgc3RhdGUsIHppcENvZGUpOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgY3JlYXRlIHRoZSBjdXN0b21lciBzYXZpbmdzIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBtZXNzYWdlID0gIkN1c3RvbWVyIEFkZGVkLiI7CkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gY3VzdG9tZXJTYXZpbmdzSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTik7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBmaW5kIHRoZSBjdXN0b21lciByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogICAgICAganNwID0gIi9TaW1wbGVCYW5rRWRpdC5qc3AiOwpAQCAtMTIyLDcgKzEyMiw3IEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5ncyA9IGN1c3RvbWVyU2F2aW5nc0hvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZmluZCB0aGUgY3VzdG9tZXIgc2F2aW5ncyByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogICAgICAgbWVzc2FnZSA9ICJEZWxldGUgQ3VzdG9tZXIiOwpAQCAtMTM0LDEyICsxMzQsMTIgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTikucmVtb3ZlKCk7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBkZWxldGUgdGhlIGN1c3RvbWVyIHNhdmluZ3MgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogICAgICAgbWVzc2FnZSA9ICJDdXN0b21lciBEZWxldGVkLiI7CiAgICAgICBqc3AgPSAiL1NpbXBsZUJhbmtNZXNzYWdlLmpzcCI7Ci0gICAgfSAgCisgICAgfQogCiAKICAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJVcGRhdGUiKSkKQEAgLTE0OSw3ICsxNDksNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSAoQ3VzdG9tZXJTYXZpbmdzKWN1c3RvbWVyU2F2aW5nc0hvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZmluZCB0aGUgY3VzdG9tZXIgc2F2aW5ncyByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogCkBAIC0xNTgsNyArMTU4LDcgQEAKICAgICAgICAgY3VzdG9tZXJDaGVja2luZyA9IChDdXN0b21lckNoZWNraW5nKWN1c3RvbWVyQ2hlY2tpbmdIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIGNoZWNraW5nIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAKQEAgLTIxOCw5ICsyMTgsOSBAQAogICAgIFJlcXVlc3REaXNwYXRjaGVyIGRpc3BhdGNoZXIgPSBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldFJlcXVlc3REaXNwYXRjaGVyKGpzcCk7CiAgICAgZGlzcGF0Y2hlci5pbmNsdWRlKHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICByZXR1cm47Ci0gIH0gCisgIH0KIAotICBwdWJsaWMgdm9pZCBkb0xvb2t1cCgpIAorICBwdWJsaWMgdm9pZCBkb0xvb2t1cCgpCiAgIHsKICAgICB0cnkgewogICAgICAgaW5pdENvbnRleHQgPSBuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbAppbmRleCBkZjlkZjM0Li4zM2E3MDY5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3NxbC9kcm9wQmFua1RhYmxlcy5zcWwKQEAgLTEgKzEgQEAKLWRyb3AgdGFibGUgY3VzdG9tZXIyOw0KK2Ryb3AgdGFibGUgY3VzdG9tZXIyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL29zZ2ktcmVzb3VyY2VzLXRlc3QvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9vc2dpLXJlc291cmNlcy10ZXN0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTJjYzc1ZC4uZGMxOWM5YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL29zZ2ktcmVzb3VyY2VzLXRlc3QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvb3NnaS1yZXNvdXJjZXMtdGVzdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNiArMTUsMTYgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc3ViY2xhc3NpbmciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXN1YmNsYXNzaW5nIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSJzdWJjbGFzc2luZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL29zZ2ktcmVzb3VyY2VzLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL29zZ2lfcmVzb3VyY2VzX3Rlc3QvUmVzb3VyY2VzVGVzdEFjdGl2YXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL29zZ2ktcmVzb3VyY2VzLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL29zZ2lfcmVzb3VyY2VzX3Rlc3QvUmVzb3VyY2VzVGVzdEFjdGl2YXRvci5qYXZhCmluZGV4IDcyZjM2N2EuLmE0ZDNiNTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9vc2dpLXJlc291cmNlcy10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9vc2dpX3Jlc291cmNlc190ZXN0L1Jlc291cmNlc1Rlc3RBY3RpdmF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvb3NnaS1yZXNvdXJjZXMtdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvb3NnaV9yZXNvdXJjZXNfdGVzdC9SZXNvdXJjZXNUZXN0QWN0aXZhdG9yLmphdmEKQEAgLTkyLDcgKzkyLDcgQEAKIAogLyoKICAgICAgICAgdGVzdEpkYmNSZXNvdXJjZXMobnVsbCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRlc3RKZGJjUmVzb3VyY2VzKCIob3NnaS5qZGJjLmRyaXZlci5jbGFzcz1vcmFjbGUuamRiYy5wb29sLk9yYWNsZURhdGFTb3VyY2UpIik7CiAKICAgICAgICAgdGVzdEpkYmNSZXNvdXJjZXMoIihqbmRpLW5hbWU9amRiYy9vcmFjbGVfdHlwZTRfcmVzb3VyY2UpIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yYXItYWNjZXNzaWJpbGl0eS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDgzNWM3Y2YuLjBlZTY2MWYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yYXItYWNjZXNzaWJpbGl0eS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yYXItYWNjZXNzaWJpbGl0eS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InJhci1hY2Nlc3NpYmlsaXR5LXRlc3QiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0icmFyZmlsZSIgdmFsdWU9InJhci9ibGFja2JveC10eC5yYXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yYXItYWNjZXNzaWJpbGl0eS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvYnVpbGQueG1sCmluZGV4IGQ0MjNlMTEuLmM3MDAzNTYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yYXItYWNjZXNzaWJpbGl0eS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L2J1aWxkLnhtbApAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImV4cGVjdGVkX2NvdW50IiB2YWx1ZT0iMiIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCmluZGV4IDZjNDA1NmEuLjJkZDAyNzMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yYXItYWNjZXNzaWJpbGl0eS9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgICAgICBPYmplY3QgbyA9IGN0eC5sb29rdXAocmVzKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNMQVNTX05BTUU6ICIrby5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDTEFTU19MT0FERVI6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNMQVNTX0xPQURFUjogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpLmxvYWRDbGFzcyhvLmdldENsYXNzKCkuZ2V0TmFtZSgpKS5nZXRDbGFzc0xvYWRlcigpKTsKICAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICAgfWNhdGNoKFRocm93YWJsZSBlKXsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yYXItYWNjZXNzaWJpbGl0eS9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0pkYmNDb25uZWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9KZGJjQ29ubmVjdGlvbi5qYXZhCmluZGV4IDcwMTAwYjguLmViNTEzMjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yYXItYWNjZXNzaWJpbGl0eS9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0pkYmNDb25uZWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvSmRiY0Nvbm5lY3Rpb24uamF2YQpAQCAtMTg0LDcgKzE4NCw3IEBACiAgICAgfQogCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgLy8gVEhFIEZPTExPV0lORyBBUElTIEFSRSBORVcgRlJPTSBKREsgMS40IC8vICAgICAgICAKKyAgICAvLyBUSEUgRk9MTE9XSU5HIEFQSVMgQVJFIE5FVyBGUk9NIEpESyAxLjQgLy8KICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogICAgIC8vLy8vLy8vLy8vLy8gIEJFR0lOICBKREsgMS40ICAvLy8vLy8vLy8vLy8vLwpAQCAtMzMwLDI3ICszMzAsMjcgQEAKICAgICB9CiAKICAgICAvLy8vLy8vLy8vLy8vICBFTkQgIEpESyAxLjQgIC8vLy8vLy8vLy8vLy8vCi0gICAgCisKICAgICBwdWJsaWMgaW50IGdldE5ldHdvcmtUaW1lb3V0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5ldHdvcmtUaW1lb3V0KEV4ZWN1dG9yIGV4ZWN1dG9yLCBpbnQgbWlsbGlzZWNvbmRzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWJvcnQoRXhlY3V0b3IgZXhlY3V0b3IpICB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFNjaGVtYSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNjaGVtYShTdHJpbmcgc2NoZW1hKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKIAogICAgIHZvaWQgYXNzb2NpYXRlQ29ubmVjdGlvbihKZGJjTWFuYWdlZENvbm5lY3Rpb24gbmV3TWMpCiAgICAgICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvTG9jYWxUeE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvTG9jYWxUeE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IDI0ODA1MTguLjFiMjNiMDQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yYXItYWNjZXNzaWJpbGl0eS9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0xvY2FsVHhNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9Mb2NhbFR4TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICBpZiAoIWdldEJvb2xlYW5XaXRoR2V0Qm9vbGVhbkFjY2Vzc29yKCkpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQmxhY2tib3ggUkFSIDogR2V0IEJvb2xlYW4gQWNjZXNzb3IgaXMgZmFsc2UiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoIWlzQm9vbGVhbldpdGhJc0Jvb2xlYW5BY2Nlc3NvcigpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkJsYWNrYm94IFJBUiA6IElzIEJvb2xlYW4gQWNjZXNzb3IgaXMgZmFsc2UiKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvUmVzb3VyY2VBZGFwdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9SZXNvdXJjZUFkYXB0ZXIuamF2YQppbmRleCA5ZDc4ZTZhLi5kZTcwZDRhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9SZXNvdXJjZUFkYXB0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9SZXNvdXJjZUFkYXB0ZXIuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBhY3RpdmF0aW9uU3BlY3MpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBudWxsOyAgCisgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIAogICAgIHB1YmxpYyBCb290c3RyYXBDb250ZXh0IGdldEJvb3RzdHJhcENvbnRleHQoKXsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yYXItYWNjZXNzaWJpbGl0eS9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yYXItYWNjZXNzaWJpbGl0eS9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQppbmRleCA0NTE0ZjNlLi41ODYxNGI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCkBAIC03Niw3ICs3Niw3IEBACiAgICAgICAgIH1jYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpewogICAgICAgICAgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0gY2F0Y2ggKENyZWF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOyAgCisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9ZmluYWxseXsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJFTkRfT0ZfVEVTVCIpOwogICAgICAgICAgICAgb3V0LmZsdXNoKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCA0MjM0MTE1Li5lZDZkYmFiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yYXItYWNjZXNzaWJpbGl0eS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsMjAgKzEsMjAgQEAKLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsNCi0NCi1DUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSCAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDEwLCAnYWJjZCcpOw0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDExLCAncHFycycpOw0KLQ0KLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDI7DQotDQotQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0gyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSDIgVkFMVUVTKDEsICdhYmNkJyk7DQotSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSDIgVkFMVUVTKDIsICdwcXJzJyk7DQotDQorRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOworCitDUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSCAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxMCwgJ2FiY2QnKTsKK0lOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDExLCAncHFycycpOworCitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOworCitDUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSDIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSDIgVkFMVUVTKDEsICdhYmNkJyk7CitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIMiBWQUxVRVMoMiwgJ3BxcnMnKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCAwYzEyNDJmLi5kMTFhMTE1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSwyICsxLDIgQEAKLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsNCi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOw0KK0Ryb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsKK0Ryb3AgdGFibGUgVFhMRVZFTFNXSVRDSDI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvYXBwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9hcHAvYnVpbGQueG1sCmluZGV4IDUzZjhkZGUuLjUwMWYzN2MgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9hcHAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9hcHAvYnVpbGQueG1sCkBAIC0zNiw4ICszNiw4IEBACiAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhciIvPgogIDwhLS0KICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJnZW5lcmljLWVtYmVkZGVkIi8+Ci0JPHBhcmFtIG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgorICAgIDxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iZ2VuZXJpYy1lbWJlZGRlZCIvPgorICAgIDxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KICAgIDwvYW50Y2FsbD4KICAtLT4KICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCmluZGV4IGU5NDA0MmIuLjhlNTQ3YzQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCkBAIC0zMyw4ICszMyw4IEBACiAgICAgICA8c2Vzc2lvbi10eXBlPlN0YXRlbGVzczwvc2Vzc2lvbi10eXBlPgogICAgICAgPHRyYW5zYWN0aW9uLXR5cGU+Q29udGFpbmVyPC90cmFuc2FjdGlvbi10eXBlPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+Ci0JPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW48L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPHNlY3VyaXR5LWlkZW50aXR5PgogICAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eS8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKaW5kZXggZTczY2I0Ni4uM2ZkZTIzMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbApAQCAtMjUsNyArMjUsNyBAQAogICAgIDxlamI+CiAgICAgICA8ZWpiLW5hbWU+TXlWZXJzaW9uQ2hlY2tlcjwvZWpiLW5hbWU+CiAgICAgICA8am5kaS1uYW1lPk15VmVyc2lvbkNoZWNrZXI8L2puZGktbmFtZT4KLTwhLS0gICAgICAKKzwhLS0KICAgICA8aW9yLXNlY3VyaXR5LWNvbmZpZz4KICAgICAgICAgPHRyYW5zcG9ydC1jb25maWc+CiAgICAgICAgICAgPGludGVncml0eT5zdXBwb3J0ZWQ8L2ludGVncml0eT4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgICAgICAgIDxjYWxsZXItcHJvcGFnYXRpb24+c3VwcG9ydGVkPC9jYWxsZXItcHJvcGFnYXRpb24+CiAgICAgICAgIDwvc2FzLWNvbnRleHQ+CiAgICAgICA8L2lvci1zZWN1cml0eS1jb25maWc+Ci0tLT4gICAgCistLT4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmVpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmVpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxnZW4tY2xhc3Nlcy8+CiAgICAgPC9lamI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggN2VkYjM1Ny4uNzY2M2VkNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjcsMzYgKzI3LDM2IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJDbGllbnQ6IEFyZ3M6ICIpOwotCWZvcihpbnQgaSA9IDAgOyBpPCBhcmdzLmxlbmd0aDsgaSsrKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2xpZW50OiBBcmdzOiAiICsgYXJnc1tpXSk7Ci0JfQotCUludGVnZXIgdmVyc2lvbk51bWJlciA9IG5ldyBJbnRlZ2VyKGFyZ3NbMF0pOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2xpZW50OiBBcmdzOiAiKTsKKyAgICBmb3IoaW50IGkgPSAwIDsgaTwgYXJncy5sZW5ndGg7IGkrKykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsaWVudDogQXJnczogIiArIGFyZ3NbaV0pOworICAgIH0KKyAgICBJbnRlZ2VyIHZlcnNpb25OdW1iZXIgPSBuZXcgSW50ZWdlcihhcmdzWzBdKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCh2ZXJzaW9uTnVtYmVyLmludFZhbHVlKCkpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KGludCB2ZXJzaW9uVG9UZXN0KSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCByZWRlcGxveW1lbnQgb2YgY29ubmVjdG9ycyAiKwotCSAgICAgICAgICAgICAiY29udHJhY3RzLiIpOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKKwogICAgICAgICBTdHJpbmcgcmVzID0gIk5PVCBSVU4iOwotCWRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOworICAgIGRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOwogICAgICAgICBib29sZWFuIHBhc3MgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKLQkJcGFzcyA9IGNoZWNrUmVzdWx0cyh2ZXJzaW9uVG9UZXN0KTsKLQkJZGVidWcoIkdvdCBleHBlY3RlZCByZXN1bHRzID0gIiArIHBhc3MpOwotCQkKLQkJLy9kbyBub3QgY29udGludWUgaWYgb25lIHRlc3QgZmFpbGVkCi0JCWlmICghcGFzcykgewotCQkJcmVzID0gIlNPTUUgVEVTVFMgRkFJTEVEIjsKLQkJCXN0YXQuYWRkU3RhdHVzKCJSZWRlcGxveSBDb25uZWN0b3IgMS41IHRlc3QgLSAiLCBzdGF0LkZBSUwpOwotCQl9IGVsc2UgewotCQkJcmVzICA9ICJBTEwgVEVTVFMgUEFTU0VEIjsKLQkJCXN0YXQuYWRkU3RhdHVzKCJSZWRlcGxveSBDb25uZWN0b3IgMS41IHRlc3QgLSAiICwgc3RhdC5QQVNTKTsKLQkJfQorICAgICAgICBwYXNzID0gY2hlY2tSZXN1bHRzKHZlcnNpb25Ub1Rlc3QpOworICAgICAgICBkZWJ1ZygiR290IGV4cGVjdGVkIHJlc3VsdHMgPSAiICsgcGFzcyk7CisKKyAgICAgICAgLy9kbyBub3QgY29udGludWUgaWYgb25lIHRlc3QgZmFpbGVkCisgICAgICAgIGlmICghcGFzcykgeworICAgICAgICAgICAgcmVzID0gIlNPTUUgVEVTVFMgRkFJTEVEIjsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJSZWRlcGxveSBDb25uZWN0b3IgMS41IHRlc3QgLSAiLCBzdGF0LkZBSUwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVzICA9ICJBTEwgVEVTVFMgUEFTU0VEIjsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJSZWRlcGxveSBDb25uZWN0b3IgMS41IHRlc3QgLSAiICwgc3RhdC5QQVNTKTsKKyAgICAgICAgfQogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWRlcGxveSBjb25uZWN0b3IgdGVzdCBmYWlsZWQuIik7CkBAIC02OCwyMCArNjgsMjAgQEAKICAgICAgICAgZGVidWcoIkVYSVRJTkcuLi4gU1RBVFVTID0gIiArIHJlcyk7CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrUmVzdWx0cyhpbnQgbnVtKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkgICAgZGVidWcoImNoZWNrUmVzdWx0IiArIG51bSk7Ci0JICAgIGRlYnVnKCJnb3QgaW5pdGlhbCBjb250ZXh0IiArIChuZXcgSW5pdGlhbENvbnRleHQoKSkudG9TdHJpbmcoKSk7CisgICAgICAgIGRlYnVnKCJjaGVja1Jlc3VsdCIgKyBudW0pOworICAgICAgICBkZWJ1ZygiZ290IGluaXRpYWwgY29udGV4dCIgKyAobmV3IEluaXRpYWxDb250ZXh0KCkpLnRvU3RyaW5nKCkpOwogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeVZlcnNpb25DaGVja2VyIik7Ci0JZGVidWcoImdvdCBvIiArIG8pOwotICAgICAgICBWZXJzaW9uQ2hlY2tlckhvbWUgIGhvbWUgPSAoVmVyc2lvbkNoZWNrZXJIb21lKSAKKyAgICBkZWJ1ZygiZ290IG8iICsgbyk7CisgICAgICAgIFZlcnNpb25DaGVja2VySG9tZSAgaG9tZSA9IChWZXJzaW9uQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgVmVyc2lvbkNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgZGVidWcoImdvdCBob21lIiArIGhvbWUpOwotCSAgICBWZXJzaW9uQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKLQkgICAgZGVidWcoImdvdCBvIiArIGNoZWNrZXIpOworICAgICAgICBWZXJzaW9uQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKKyAgICAgICAgZGVidWcoImdvdCBvIiArIGNoZWNrZXIpOwogICAgICAgICAvL3Byb2JsZW0gaGVyZSEKLQlpbnQgcmVzdWx0ID0gY2hlY2tlci5nZXRWZXJzaW9uKCk7Ci0JZGVidWcoImNoZWNrUmVzdWx0IiArIHJlc3VsdCk7CisgICAgaW50IHJlc3VsdCA9IGNoZWNrZXIuZ2V0VmVyc2lvbigpOworICAgIGRlYnVnKCJjaGVja1Jlc3VsdCIgKyByZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0ID09IG51bTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9hcHAvc3JjL2VqYi9WZXJzaW9uQ2hlY2tlckVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2FwcC9zcmMvZWpiL1ZlcnNpb25DaGVja2VyRUpCLmphdmEKaW5kZXggYTAwOTEzYS4uNjgyMTFkOCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2FwcC9zcmMvZWpiL1ZlcnNpb25DaGVja2VyRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2FwcC9zcmMvZWpiL1ZlcnNpb25DaGVja2VyRUpCLmphdmEKQEAgLTIzLDQ3ICsyMyw0NyBAQAogaW1wb3J0IGNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjsKIAogcHVibGljIGNsYXNzIFZlcnNpb25DaGVja2VyRUpCIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewotCXByaXZhdGUgSW5pdGlhbENvbnRleHQgaW5pdENvbnRleHQgPSBudWxsOwotCXByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2Vzc2lvbkNvbnRleHQgPSBudWxsOworICAgIHByaXZhdGUgSW5pdGlhbENvbnRleHQgaW5pdENvbnRleHQgPSBudWxsOworICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2Vzc2lvbkNvbnRleHQgPSBudWxsOwogCiAKICAgICBwdWJsaWMgVmVyc2lvbkNoZWNrZXJFSkIoKSB7CiAgICAgZGVidWcoIkNvbnN0cnVjdG9yIik7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7Ci0JCWRlYnVnKCJlamJDcmVhdGUoKSIpOworICAgICAgICBkZWJ1ZygiZWpiQ3JlYXRlKCkiKTsKICAgICB9CiAKIAogICAgIHB1YmxpYyBpbnQgZ2V0VmVyc2lvbigpewotCSAgICB0cnkgewotCSAgICAgIGluaXRDb250ZXh0ID0gbmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIG9jY3VyZWQgd2hlbiBjcmVhdGluZyBJbml0aWFsQ29udGV4dDogIiArIGUudG9TdHJpbmcoKSk7Ci0JICAgICAgcmV0dXJuIC0xOwotCSAgICB9Ci0JCi0JICAgIHRyeSB7Ci0JICAgICAgSmRiY1NldHVwQWRtaW4gamEgPSAoSmRiY1NldHVwQWRtaW4pIGluaXRDb250ZXh0Lmxvb2t1cCgiZWlzL2pkYmNBZG1pbiIpOwotCSAgICAgIGludCB2ZXJzaW9ubm8gPSAgamEuZ2V0VmVyc2lvbigpOwotCSAgICAgIGRlYnVnKCJWZXJzaW9uIG51bWJlciBpcyAiICsgdmVyc2lvbm5vKTsKLQkgICAgICByZXR1cm4gdmVyc2lvbm5vOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCSAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgaW5pdENvbnRleHQgPSBuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gb2NjdXJlZCB3aGVuIGNyZWF0aW5nIEluaXRpYWxDb250ZXh0OiAiICsgZS50b1N0cmluZygpKTsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgIEpkYmNTZXR1cEFkbWluIGphID0gKEpkYmNTZXR1cEFkbWluKSBpbml0Q29udGV4dC5sb29rdXAoImVpcy9qZGJjQWRtaW4iKTsKKyAgICAgICAgICBpbnQgdmVyc2lvbm5vID0gIGphLmdldFZlcnNpb24oKTsKKyAgICAgICAgICBkZWJ1ZygiVmVyc2lvbiBudW1iZXIgaXMgIiArIHZlcnNpb25ubyk7CisgICAgICAgICAgcmV0dXJuIHZlcnNpb25ubzsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQogICAgIH0KIAogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgY29udGV4dCkgewotCSAgICBkZWJ1ZygiIGJlYW4gcmVtb3ZlZCIpOworICAgICAgICBkZWJ1ZygiIGJlYW4gcmVtb3ZlZCIpOwogICAgICAgICBzZXNzaW9uQ29udGV4dCA9IGNvbnRleHQ7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewotCSAgICBkZWJ1ZygiIGJlYW4gcmVtb3ZlZCIpOworICAgICAgICBkZWJ1ZygiIGJlYW4gcmVtb3ZlZCIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvYnVpbGQucHJvcGVydGllcwppbmRleCAxNDkzZDEyLi5iMDBmYjE2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJyZWRlcGxveSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmFyIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yYXIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogCiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBmOTk5YThhLi40OTJlNzlhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI3LDM1ICsyNywzNSBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiQ2xpZW50OiBBcmdzOiAiKTsKLQlmb3IoaW50IGkgPSAwIDsgaTwgYXJncy5sZW5ndGg7IGkrKykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsaWVudDogQXJnczogIiArIGFyZ3NbaV0pOwotCX0KLQlJbnRlZ2VyIHZlcnNpb25OdW1iZXIgPSBuZXcgSW50ZWdlcihhcmdzWzBdKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsaWVudDogQXJnczogIik7CisgICAgZm9yKGludCBpID0gMCA7IGk8IGFyZ3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGllbnQ6IEFyZ3M6ICIgKyBhcmdzW2ldKTsKKyAgICB9CisgICAgSW50ZWdlciB2ZXJzaW9uTnVtYmVyID0gbmV3IEludGVnZXIoYXJnc1swXSk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QodmVyc2lvbk51bWJlci5pbnRWYWx1ZSgpKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdChpbnQgdmVyc2lvblRvVGVzdCkgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgcmVkZXBsb3ltZW50IG9mIGNvbm5lY3RvciBtb2R1bGVzLiBUZXN0aW5nIHZlcnNpb24gIiArIHZlcnNpb25Ub1Rlc3QpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgcmVzID0gIk5PVCBSVU4iOwotCWRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOworICAgIGRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOwogICAgICAgICBib29sZWFuIHBhc3MgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKLQkJcGFzcyA9IGNoZWNrUmVzdWx0cyh2ZXJzaW9uVG9UZXN0KTsKLQkJZGVidWcoIkdvdCBleHBlY3RlZCByZXN1bHRzID0gIiArIHBhc3MpOwotCQkKLQkJLy9kbyBub3QgY29udGludWUgaWYgb25lIHRlc3QgZmFpbGVkCi0JCWlmICghcGFzcykgewotCQkJcmVzID0gIlNPTUUgVEVTVFMgRkFJTEVEIjsKLQkJCXN0YXQuYWRkU3RhdHVzKCJSZWRlcGxveSBDb25uZWN0b3IgMS41IHRlc3QgLSBWZXJzaW9uIDogIisgdmVyc2lvblRvVGVzdCwgc3RhdC5GQUlMKTsKLQkJfSBlbHNlIHsKLQkJCXJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7Ci0JCQlzdGF0LmFkZFN0YXR1cygiUmVkZXBsb3kgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gVmVyc2lvbiA6ICIgKyB2ZXJzaW9uVG9UZXN0ICwgc3RhdC5QQVNTKTsKLQkJfQorICAgICAgICBwYXNzID0gY2hlY2tSZXN1bHRzKHZlcnNpb25Ub1Rlc3QpOworICAgICAgICBkZWJ1ZygiR290IGV4cGVjdGVkIHJlc3VsdHMgPSAiICsgcGFzcyk7CisKKyAgICAgICAgLy9kbyBub3QgY29udGludWUgaWYgb25lIHRlc3QgZmFpbGVkCisgICAgICAgIGlmICghcGFzcykgeworICAgICAgICAgICAgcmVzID0gIlNPTUUgVEVTVFMgRkFJTEVEIjsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJSZWRlcGxveSBDb25uZWN0b3IgMS41IHRlc3QgLSBWZXJzaW9uIDogIisgdmVyc2lvblRvVGVzdCwgc3RhdC5GQUlMKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiUmVkZXBsb3kgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gVmVyc2lvbiA6ICIgKyB2ZXJzaW9uVG9UZXN0ICwgc3RhdC5QQVNTKTsKKyAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVkZXBsb3kgY29ubmVjdG9yIHRlc3QgZmFpbGVkLiIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC02NiwyMCArNjYsMjAgQEAKICAgICAgICAgZGVidWcoIkVYSVRJTkcuLi4gU1RBVFVTID0gIiArIHJlcyk7CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrUmVzdWx0cyhpbnQgbnVtKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkgICAgZGVidWcoImNoZWNrUmVzdWx0IiArIG51bSk7Ci0JICAgIGRlYnVnKCJnb3QgaW5pdGlhbCBjb250ZXh0IiArIChuZXcgSW5pdGlhbENvbnRleHQoKSkudG9TdHJpbmcoKSk7CisgICAgICAgIGRlYnVnKCJjaGVja1Jlc3VsdCIgKyBudW0pOworICAgICAgICBkZWJ1ZygiZ290IGluaXRpYWwgY29udGV4dCIgKyAobmV3IEluaXRpYWxDb250ZXh0KCkpLnRvU3RyaW5nKCkpOwogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9NeVZlcnNpb25DaGVja2VyIik7Ci0JZGVidWcoImdvdCBvIiArIG8pOwotICAgICAgICBWZXJzaW9uQ2hlY2tlckhvbWUgIGhvbWUgPSAoVmVyc2lvbkNoZWNrZXJIb21lKSAKKyAgICBkZWJ1ZygiZ290IG8iICsgbyk7CisgICAgICAgIFZlcnNpb25DaGVja2VySG9tZSAgaG9tZSA9IChWZXJzaW9uQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgVmVyc2lvbkNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgZGVidWcoImdvdCBob21lIiArIGhvbWUpOwotCSAgICBWZXJzaW9uQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKLQkgICAgZGVidWcoImdvdCBvIiArIGNoZWNrZXIpOworICAgICAgICBWZXJzaW9uQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKKyAgICAgICAgZGVidWcoImdvdCBvIiArIGNoZWNrZXIpOwogICAgICAgICAvL3Byb2JsZW0gaGVyZSEKLQlpbnQgcmVzdWx0ID0gY2hlY2tlci5nZXRWZXJzaW9uKCk7Ci0JZGVidWcoImNoZWNrUmVzdWx0IiArIHJlc3VsdCk7CisgICAgaW50IHJlc3VsdCA9IGNoZWNrZXIuZ2V0VmVyc2lvbigpOworICAgIGRlYnVnKCJjaGVja1Jlc3VsdCIgKyByZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0ID09IG51bTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggZTk0MDQyYi4uOGU1NDdjNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTMzLDggKzMzLDggQEAKICAgICAgIDxzZXNzaW9uLXR5cGU+U3RhdGVsZXNzPC9zZXNzaW9uLXR5cGU+CiAgICAgICA8dHJhbnNhY3Rpb24tdHlwZT5Db250YWluZXI8L3RyYW5zYWN0aW9uLXR5cGU+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KLQk8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgorICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgorICAgIDxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8c2VjdXJpdHktaWRlbnRpdHk+CiAgICAgICAgIDx1c2UtY2FsbGVyLWlkZW50aXR5Lz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCBjYzVhM2Y5Li5lMTQ2NzIyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgPGVqYj4KICAgICAgIDxlamItbmFtZT5NeVZlcnNpb25DaGVja2VyPC9lamItbmFtZT4KICAgICAgIDxqbmRpLW5hbWU+ZWpiL015VmVyc2lvbkNoZWNrZXI8L2puZGktbmFtZT4KLTwhLS0gICAgICAKKzwhLS0KICAgICA8aW9yLXNlY3VyaXR5LWNvbmZpZz4KICAgICAgICAgPHRyYW5zcG9ydC1jb25maWc+CiAgICAgICAgICAgPGludGVncml0eT5zdXBwb3J0ZWQ8L2ludGVncml0eT4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgICAgICAgIDxjYWxsZXItcHJvcGFnYXRpb24+c3VwcG9ydGVkPC9jYWxsZXItcHJvcGFnYXRpb24+CiAgICAgICAgIDwvc2FzLWNvbnRleHQ+CiAgICAgICA8L2lvci1zZWN1cml0eS1jb25maWc+Ci0tLT4gICAgCistLT4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmVpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmVpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxnZW4tY2xhc3Nlcy8+CiAgICAgPC9lamI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvZWpiL1ZlcnNpb25DaGVja2VyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvZWpiL1ZlcnNpb25DaGVja2VyRUpCLmphdmEKaW5kZXggYWMxNDdjYy4uMTk0OTQ3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2VqYi9WZXJzaW9uQ2hlY2tlckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9lamIvVmVyc2lvbkNoZWNrZXJFSkIuamF2YQpAQCAtMzIsMTUgKzMyLDE1IEBACiAvL2ltcG9ydCBjb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW47CiAKIHB1YmxpYyBjbGFzcyBWZXJzaW9uQ2hlY2tlckVKQiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKLQlwcml2YXRlIEluaXRpYWxDb250ZXh0IGluaXRDb250ZXh0ID0gbnVsbDsKLQlwcml2YXRlIFNlc3Npb25Db250ZXh0IHNlc3Npb25Db250ZXh0ID0gbnVsbDsKKyAgICBwcml2YXRlIEluaXRpYWxDb250ZXh0IGluaXRDb250ZXh0ID0gbnVsbDsKKyAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNlc3Npb25Db250ZXh0ID0gbnVsbDsKIAogCiAgICAgcHVibGljIFZlcnNpb25DaGVja2VyRUpCKCkgewogICAgICAgICBkZWJ1ZygiQ29uc3RydWN0b3IiKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKICAgICAgICAgZGVidWcoImVqYkNyZWF0ZSgpIik7CiAgICAgfQpAQCAtNDgsMjQgKzQ4LDI0IEBACiAKICAgICBwdWJsaWMgaW50IGdldFZlcnNpb24oKXsKICAgICAgICAgICAgIGRlYnVnKCJDaGVja2luZyB0aGUgdmVyc2lvbiEhISEhISEhISEhISEhISEhISEhISEhISEhISEiKTsKLQkgICAgdHJ5IHsKLQkgICAgICBpbml0Q29udGV4dCA9IG5ldyBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBvY2N1cmVkIHdoZW4gY3JlYXRpbmcgSW5pdGlhbENvbnRleHQ6ICIgKyBlLnRvU3RyaW5nKCkpOworICAgICAgICB0cnkgeworICAgICAgICAgIGluaXRDb250ZXh0ID0gbmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIG9jY3VyZWQgd2hlbiBjcmVhdGluZyBJbml0aWFsQ29udGV4dDogIiArIGUudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgICAgcmV0dXJuIC0xOwotCSAgICB9Ci0JCi0JICAgIHRyeSB7Ci0JICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluIGphID0gKGNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbikgaW5pdENvbnRleHQubG9va3VwKCJlaXMvdGVzdEFkbWluIik7Ci0JICAgICAgaW50IHZlcnNpb25ubyA9ICBqYS5nZXRWZXJzaW9uKCk7Ci0JICAgICAgZGVidWcoIlZlcnNpb24gbnVtYmVyIGlzICIgKyB2ZXJzaW9ubm8pOwotCSAgICAgIHJldHVybiB2ZXJzaW9ubm87Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JICAgIH0KLSAgICAgICAgICAgIAorICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7CisgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluIGphID0gKGNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbikgaW5pdENvbnRleHQubG9va3VwKCJlaXMvdGVzdEFkbWluIik7CisgICAgICAgICAgaW50IHZlcnNpb25ubyA9ICBqYS5nZXRWZXJzaW9uKCk7CisgICAgICAgICAgZGVidWcoIlZlcnNpb24gbnVtYmVyIGlzICIgKyB2ZXJzaW9ubm8pOworICAgICAgICAgIHJldHVybiB2ZXJzaW9ubm87CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKwogICAgICAgICAgICAvLyByZXR1cm4gLTE7CiAgICAgfQogCkBAIC03Niw3ICs3Niw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewotCSAgICBkZWJ1ZygiIGJlYW4gcmVtb3ZlZCIpOworICAgICAgICBkZWJ1ZygiIGJlYW4gcmVtb3ZlZCIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvYnVpbGQucHJvcGVydGllcwppbmRleCBlZTJlY2EwLi5mZDIxYzNkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvYnVpbGQucHJvcGVydGllcwpAQCAtMTQsNyArMTQsNyBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKICMKIAotICAgIAorCiAjIyMgQ29tcG9uZW50IFByb3BlcnRpZXMgIyMjCiBzcmMuZGlyPXNyYwogY29tcG9uZW50LnB1Ymxpc2guaG9tZT0uCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL2J1aWxkLnhtbAppbmRleCAxNWYzNDVhLi5lZjU5ZWJhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9idWlsZC54bWwKQEAgLTIzLDYyICsyMyw2MiBAQAogCiA8cHJvamVjdCBuYW1lPSJKREJDQ29ubmVjdG9yIHRvcCBsZXZlbCIgZGVmYXVsdD0iYnVpbGQiPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9qZGJjcmEvc3BpIi8+Ci0gICAgCisKICAgICAmY29tbW9uOwogICAgICZ0ZXN0Y29tbW9uOwogICAgIDxwcm9wZXJ0eSBmaWxlPSIuL2J1aWxkLnByb3BlcnRpZXMiLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUsYXNzZW1ibGUiIC8+Ci0gICAgICAgICAgCisKIAogICAgIDwhLS0gaW5pdC4gSW5pdGlhbGl6YXRpb24gaW52b2x2ZXMgY3JlYXRpbmcgcHVibGlzaGluZyBkaXJlY3RvcmllcyBhbmQKLSAgICAgICAgIE9TIHNwZWNpZmljIHRhcmdldHMuIC0tPiAKKyAgICAgICAgIE9TIHNwZWNpZmljIHRhcmdldHMuIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iaW5pdCIgZGVzY3JpcHRpb249IiR7Y29tcG9uZW50Lm5hbWV9IGluaXRpYWxpemF0aW9uIj4KICAgICAgICAgPHRzdGFtcD4KICAgICAgICAgICAgIDxmb3JtYXQgcHJvcGVydHk9InN0YXJ0LnRpbWUiIHBhdHRlcm49Ik1NL2RkL3l5eXkgaGg6bW0gYWEiLz4KLSAgICAgICAgPC90c3RhbXA+ICAgIAorICAgICAgICA8L3RzdGFtcD4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQnVpbGRpbmcgY29tcG9uZW50ICR7Y29tcG9uZW50Lm5hbWV9Ii8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIvPgotICAgICAgICA8bWtkaXIgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iLz4gICAgCisgICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIvPgogICAgIDwvdGFyZ2V0PgotICAgIDwhLS0gY29tcGlsZSAtLT4gCisgICAgPCEtLSBjb21waWxlIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdCIKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDb21waWxlIGNvbS9zdW4vKiBjb20vaXBsYW5ldC8qIHNvdXJjZXMiPiAgCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0iQ29tcGlsZSBjb20vc3VuLyogY29tL2lwbGFuZXQvKiBzb3VyY2VzIj4KICAgICAgICAgPCEtLTxlY2hvIG1lc3NhZ2U9IkNvbm5lY3RvciBhcGkgcmVzaWRlcyBpbiAke2Nvbm5lY3Rvci1hcGkuamFyfSIvPi0tPgotICAgICAgICA8amF2YWMgc3JjZGlyPSIke3NyYy5kaXJ9IiAKKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iJHtzcmMuZGlyfSIKICAgICAgICAgICAgICAgIGRlc3RkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIKLQkgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPgotCSAgICAgICA8Y2xhc3NwYXRoPgotCQkgICA8ZmlsZXNldCBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcyI+Ci0JCSAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouamFyIiAvPgotCQkgICA8L2ZpbGVzZXQ+Ci0JICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+CisgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzIj4KKyAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qYXIiIC8+CisgICAgICAgICAgIDwvZmlsZXNldD4KKyAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJjb20vc3VuL2pkYmNyYS8qKiIvPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iY29tL3N1bi9hcHBzZXJ2LyoqIi8+CiAgICAgICAgIDwvamF2YWM+CiAgICAgPC90YXJnZXQ+Ci0gICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkIi8+CiAKLSAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiPiAgICAKLSAgICAJCi0JPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiYy5qYXIiIAotICAgICAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IiBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLCAKLSAgICAgICAgICAgIGNvbS9zdW4vYXBwc2Vydi8qKi8qLCBjb20vc3VuL2pkYmNyYS91dGlsLyoqLyosIGNvbS9zdW4vamRiY3JhL2NvbW1vbi8qKi8qIi8+IAotICAgCQotICAgICAgICA8Y29weSBmaWxlPSIke3NyYy5kaXJ9L2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIiAKLSAgICAgICAgICAgICAgICB0b2ZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIj4KKworICAgIDxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmMuamFyIgorICAgICAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IiBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLAorICAgICAgICAgICAgY29tL3N1bi9hcHBzZXJ2LyoqLyosIGNvbS9zdW4vamRiY3JhL3V0aWwvKiovKiwgY29tL3N1bi9qZGJjcmEvY29tbW9uLyoqLyoiLz4KKworICAgICAgICA8Y29weSBmaWxlPSIke3NyYy5kaXJ9L2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIgorICAgICAgICAgICAgICAgIHRvZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vdGVzdGpkYmNyYS5yYXIiIAotCQliYXNlZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iIGluY2x1ZGVzPSJqZGJjLmphciI+CisgICAgICAgPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vdGVzdGpkYmNyYS5yYXIiCisgICAgICAgIGJhc2VkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIgaW5jbHVkZXM9ImpkYmMuamFyIj4KIAotICAgCQk8bWV0YWluZiBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgogCi0gICAJPGRlbGV0ZSBmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIi8+Ci0JCisgICAgICAgPGRlbGV0ZSBmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIi8+CisKICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXNjcmlwdGlvbj0iQ2xlYW4gdGhlIGJ1aWxkIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCmluZGV4IDlmODM5OWEuLmI2ZWYzMGIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQpAQCAtMjAsMTUgKzIwLDE1IEBACiBpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOwogCiAvKioKLSAqIFRoZSA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uIAorICogVGhlIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24KICAqIHNlcnZlciB3aWxsIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4gQW4gYXBwbGljYXRpb24gcHJvZ3JhbSB3b3VsZCBiZSBhYmxlCi0gKiB0byB1c2UgdGhpcyBpbnRlcmZhY2UgdG8gZG8gdGhlIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCBieSBTdW5PTkUgCisgKiB0byB1c2UgdGhpcyBpbnRlcmZhY2UgdG8gZG8gdGhlIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCBieSBTdW5PTkUKICAqIGFwcGxpY2F0aW9uIHNlcnZlci4KLSAqIDxwPkEgc2FtcGxlIGNvZGUgZm9yIGdldHRpbmcgZHJpdmVyJ3MgY29ubmVjdGlvbiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBsaWtlIAorICogPHA+QSBzYW1wbGUgY29kZSBmb3IgZ2V0dGluZyBkcml2ZXIncyBjb25uZWN0aW9uIGltcGxlbWVudGF0aW9uIHdvdWxkIGxpa2UKICAqIHRoZSBmb2xsb3dpbmcuCiAgKiA8cHJlPgogICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICBjb20uc3VuLmFwcHNlcnYuRGF0YVNvdXJjZSBkcyA9IChjb20uc3VuLmFwcHNlcnYuRGF0YVNPdXJjZSkgaWMubG9va3VwKCJqZGJjL1BvaW50QmFzZSIpOyAKKyAgICAgY29tLnN1bi5hcHBzZXJ2LkRhdGFTb3VyY2UgZHMgPSAoY29tLnN1bi5hcHBzZXJ2LkRhdGFTT3VyY2UpIGljLmxvb2t1cCgiamRiYy9Qb2ludEJhc2UiKTsKICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgIENvbm5lY3Rpb24gZHJpdmVyY29uID0gZHMuZ2V0Q29ubmVjdGlvbihjb24pOwogCkBAIC0zNiwxMyArMzYsMTMgQEAKIAogICAgICBjb24uY2xvc2UoKTsKICAgIDwvcHJlPgotICogCisgKgogICogQGF1dGhvciBCaW5vZCBQLkcKICAqLwogcHVibGljIGludGVyZmFjZSBEYXRhU291cmNlIGV4dGVuZHMgamF2YXguc3FsLkRhdGFTb3VyY2UgewogCiAgICAgLyoqCi0gICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIgCisgICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIKICAgICAgKiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24gc2VydmVyLiBJZiBhbiBhY3R1YWwgY29ubmVjdGlvbiBpcwogICAgICAqIHN1cHBsaWVkIGFzIGFyZ3VtZW50LCB0aGVuIGl0IHdpbGwgYmUganVzdCByZXR1cm5lZC4KICAgICAgKgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKaW5kZXggYzI4MjJlMi4uNmEzNjZiMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCkBAIC0yNywyMiArMjcsMjIgQEAKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CiAvKioKLSAqIFV0aWxpdHkgY2xhc3MsIHdoaWNoIHdvdWxkIGNyZWF0ZSBuZWNlc3NhcnkgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZSAKKyAqIFV0aWxpdHkgY2xhc3MsIHdoaWNoIHdvdWxkIGNyZWF0ZSBuZWNlc3NhcnkgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZQogICogc3BlY2lmaWNhdGlvbi4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRwotICogQHNlZQkJY29tLnN1bi5qZGJjcmEuY29tbW9uLkRhdGFTb3VyY2VTcGVjCi0gKiBAc2VlCQljb20uc3VuLmpkYmNyYS51dGlsLk1ldGhvZEV4Y2VjdXRvcgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKKyAqIEBzZWUgICAgICAgIGNvbS5zdW4uamRiY3JhLmNvbW1vbi5EYXRhU291cmNlU3BlYworICogQHNlZSAgICAgICAgY29tLnN1bi5qZGJjcmEudXRpbC5NZXRob2RFeGNlY3V0b3IKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2VPYmplY3RCdWlsZGVyIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAKICAgICBwcml2YXRlIERhdGFTb3VyY2VTcGVjIHNwZWM7Ci0gICAgCisKICAgICBwcml2YXRlIEhhc2h0YWJsZSBkcml2ZXJQcm9wZXJ0aWVzID0gbnVsbDsKLSAgICAKLSAgICBwcml2YXRlIE1ldGhvZEV4ZWN1dG9yIGV4ZWN1dG9yID0gbnVsbDsgICAgCi0gICAgCisKKyAgICBwcml2YXRlIE1ldGhvZEV4ZWN1dG9yIGV4ZWN1dG9yID0gbnVsbDsKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC01MCwxNjcgKzUwLDE2NyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdCBhIERhdGFTb3VyY2UgT2JqZWN0IGZyb20gdGhlIHNwZWMuCi0gICAgICogCi0gICAgICogQHBhcmFtCXNwZWMJPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtICAgIHNwZWMgICAgPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhU291cmNlT2JqZWN0QnVpbGRlcihEYXRhU291cmNlU3BlYyBzcGVjKSB7Ci0gICAgCXRoaXMuc3BlYyA9IHNwZWM7Ci0gICAgCWV4ZWN1dG9yID0gbmV3IE1ldGhvZEV4ZWN1dG9yKCk7CisgICAgICAgIHRoaXMuc3BlYyA9IHNwZWM7CisgICAgICAgIGV4ZWN1dG9yID0gbmV3IE1ldGhvZEV4ZWN1dG9yKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0IHRoZSBEYXRhU291cmNlIE9iamVjdCBmcm9tIHRoZSBzcGVjLgogICAgICAqCi0gICAgICogQHJldHVybglPYmplY3QgY29uc3RydWN0ZWQgdXNpbmcgdGhlIERhdGFTb3VyY2VTcGVjLgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IGlmIHRoZSBjbGFzcyBpcyBub3QgZm91bmQgb3Igc29tZSBpc3N1ZSBpbiBleGVjdXRpbmcKLSAgICAgKgkJc29tZSBtZXRob2QuCisgICAgICogQHJldHVybiAgICBPYmplY3QgY29uc3RydWN0ZWQgdXNpbmcgdGhlIERhdGFTb3VyY2VTcGVjLgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IGlmIHRoZSBjbGFzcyBpcyBub3QgZm91bmQgb3Igc29tZSBpc3N1ZSBpbiBleGVjdXRpbmcKKyAgICAgKiAgICAgICAgc29tZSBtZXRob2QuCiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjb25zdHJ1Y3REYXRhU291cmNlT2JqZWN0KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlkcml2ZXJQcm9wZXJ0aWVzID0gcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKHNwZWMpOworICAgICAgICBkcml2ZXJQcm9wZXJ0aWVzID0gcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKHNwZWMpOwogICAgICAgICBPYmplY3QgZGF0YVNvdXJjZU9iamVjdCA9IGdldERhdGFTb3VyY2VPYmplY3QoKTsKICAgICAgICAgTWV0aG9kW10gbWV0aG9kcyA9IGRhdGFTb3VyY2VPYmplY3QuZ2V0Q2xhc3MoKS5nZXRNZXRob2RzKCk7CiAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gbWV0aG9kc1tpXS5nZXROYW1lKCk7Ci0JICAgIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFVzZXIiKSl7CSAgICAJCi0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UGFzc3dvcmQiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9naW5UaW1lT3V0IikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dXcml0ZXIiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dXUklURVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFiYXNlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YVNvdXJjZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGVzY3JpcHRpb24iKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE5ldHdvcmtQcm90b2NvbCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UG9ydE51bWJlciIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFJvbGVOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFNlcnZlck5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFN0YXRlbWVudHMiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhTVEFURU1FTlRTKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRJbml0aWFsUG9vbFNpemUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5JTklUSUFMUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1pblBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUlOUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heElkbGVUaW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYSURMRVRJTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFByb3BlcnR5Q3ljbGUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QUk9QRVJUWUNZQ0xFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAoZHJpdmVyUHJvcGVydGllcy5jb250YWluc0tleShtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpKXsKLQkgICAgCVZlY3RvciB2YWx1ZXMgPSAoVmVjdG9yKSBkcml2ZXJQcm9wZXJ0aWVzLmdldChtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpOwotCSAgICAgICAgZXhlY3V0b3IucnVuTWV0aG9kKG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCwgdmFsdWVzKTsKLQkgICAgfQorICAgICAgICBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRVc2VyIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBhc3N3b3JkIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ2luVGltZU91dCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9nV3JpdGVyIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HV1JJVEVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhYmFzZU5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFTb3VyY2VOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERlc2NyaXB0aW9uIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE5ldHdvcmtQcm90b2NvbCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UG9ydE51bWJlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFJvbGVOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFNlcnZlck5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhTdGF0ZW1lbnRzIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYU1RBVEVNRU5UUyksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0SW5pdGlhbFBvb2xTaXplIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuSU5JVElBTFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNaW5Qb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1JTlBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhQb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhJZGxlVGltZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWElETEVUSU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQcm9wZXJ0eUN5Y2xlIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUFJPUEVSVFlDWUNMRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKGRyaXZlclByb3BlcnRpZXMuY29udGFpbnNLZXkobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKSl7CisgICAgICAgICAgICBWZWN0b3IgdmFsdWVzID0gKFZlY3RvcikgZHJpdmVyUHJvcGVydGllcy5nZXQobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKTsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bk1ldGhvZChtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QsIHZhbHVlcyk7CisgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gZGF0YVNvdXJjZU9iamVjdDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGV4dHJhIGRyaXZlciBwcm9wZXJ0aWVzIGZyb20gdGhlIERhdGFTb3VyY2VTcGVjIG9iamVjdCBhbmQKICAgICAgKiBwYXJzZSB0aGVtIHRvIGEgc2V0IG9mIG1ldGhvZE5hbWUgYW5kIHBhcmFtZXRlcnMuIFByZXBhcmUgYSBoYXNodGFibGUKICAgICAgKiBjb250YWluaW5nIHRoZXNlIGRldGFpbHMgYW5kIHJldHVybi4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcGVjCTxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcmV0dXJuCUhhc2h0YWJsZSBjb250YWluaW5nIG1ldGhvZCBuYW1lcyBhbmQgcGFyYW1ldGVycywKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCUlmIGRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgYW5kIHByb3BlcnR5IHN0cmluZwotICAgICAqCQkJCQlpcyBub3QgbnVsbC4KKyAgICAgKiBAcGFyYW0gICAgc3BlYyAgICA8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICBIYXNodGFibGUgY29udGFpbmluZyBtZXRob2QgbmFtZXMgYW5kIHBhcmFtZXRlcnMsCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBJZiBkZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGFuZCBwcm9wZXJ0eSBzdHJpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgaXMgbm90IG51bGwuCiAgICAgICovCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKERhdGFTb3VyY2VTcGVjIHNwZWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJU3RyaW5nIGRlbGltID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKKyAgICAgICAgU3RyaW5nIGRlbGltID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKIAogICAgICAgICBTdHJpbmcgcHJvcCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwotCWlmICggcHJvcCA9PSBudWxsIHx8IHByb3AudHJpbSgpLmVxdWFscygiIikpIHsKLQkgICAgcmV0dXJuIG5ldyBIYXNodGFibGUoKTsKLQl9IGVsc2UgaWYgKGRlbGltID09IG51bGwgfHwgZGVsaW0uZXF1YWxzKCIiKSkgewotCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24gKCJEZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGluIHRoZSBjb25maWd1cmF0aW9uIik7Ci0JfQotCQotCUhhc2h0YWJsZSBwcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOwotCWRlbGltID0gZGVsaW0udHJpbSgpOwkKLQlTdHJpbmcgc2VwID0gZGVsaW0rZGVsaW07Ci0JaW50IHNlcExlbiA9IHNlcC5sZW5ndGgoKTsKLQlTdHJpbmcgY2FjaGUgPSBwcm9wOwotCVZlY3RvciBtZXRob2RzID0gbmV3IFZlY3RvcigpOwotCQotCXdoaWxlIChjYWNoZS5pbmRleE9mKHNlcCkgIT0gLTEpIHsKLQkgICAgaW50IGluZGV4ID0gY2FjaGUuaW5kZXhPZihzZXApOwotCSAgICBTdHJpbmcgbmFtZSA9IGNhY2hlLnN1YnN0cmluZygwLGluZGV4KTsKLQkgICAgaWYgKG5hbWUudHJpbSgpICE9ICIiKSB7Ci0JICAgICAgICBtZXRob2RzLmFkZChuYW1lKTsKLQkgICAgCWNhY2hlID0gY2FjaGUuc3Vic3RyaW5nKGluZGV4K3NlcExlbik7Ci0JICAgIH0KLQl9Ci0JCi0gICAgCUVudW1lcmF0aW9uIGFsbE1ldGhvZHMgPSBtZXRob2RzLmVsZW1lbnRzKCk7Ci0gICAgCXdoaWxlIChhbGxNZXRob2RzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgCSAgICBTdHJpbmcgb25lTWV0aG9kID0gKFN0cmluZykgYWxsTWV0aG9kcy5uZXh0RWxlbWVudCgpOyAgICAJICAgIAotICAgIAkgICAgaWYgKCFvbmVNZXRob2QudHJpbSgpLmVxdWFscygiIikpIHsKLSAgICAJICAgIAlTdHJpbmcgbWV0aG9kTmFtZSA9IG51bGw7Ci0gICAgCSAgICAJVmVjdG9yIHBhcm1zID0gbmV3IFZlY3RvcigpOwotICAgIAkgICAgCVN0cmluZ1Rva2VuaXplciBtZXRob2REZXRhaWxzID0gbmV3IFN0cmluZ1Rva2VuaXplcihvbmVNZXRob2QsZGVsaW0pOwotCQlmb3IgKGludCBpPTA7IG1ldGhvZERldGFpbHMuaGFzTW9yZVRva2VucygpO2krKyApIHsKLQkJICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIG1ldGhvZERldGFpbHMubmV4dFRva2VuKCk7Ci0JCSAgICBpZiAoaT09MCkgewotCQkgICAgCW1ldGhvZE5hbWUgPSB0b2tlbi50b1VwcGVyQ2FzZSgpOwotCQkgICAgfSBlbHNlIHsKLQkJICAgIAlwYXJtcy5hZGQodG9rZW4pOwkJICAgIAkKLQkJICAgIH0KLQkJfQotCQlwcm9wZXJ0aWVzLnB1dChtZXRob2ROYW1lLHBhcm1zKTsKLSAgICAJICAgIH0gICAgCSAgICAKLSAgICAJfQotICAgIAlyZXR1cm4gcHJvcGVydGllczsKKyAgICBpZiAoIHByb3AgPT0gbnVsbCB8fCBwcm9wLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgIHJldHVybiBuZXcgSGFzaHRhYmxlKCk7CisgICAgfSBlbHNlIGlmIChkZWxpbSA9PSBudWxsIHx8IGRlbGltLmVxdWFscygiIikpIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uICgiRGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiIpOwogICAgIH0KLSAgICAKKworICAgIEhhc2h0YWJsZSBwcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOworICAgIGRlbGltID0gZGVsaW0udHJpbSgpOworICAgIFN0cmluZyBzZXAgPSBkZWxpbStkZWxpbTsKKyAgICBpbnQgc2VwTGVuID0gc2VwLmxlbmd0aCgpOworICAgIFN0cmluZyBjYWNoZSA9IHByb3A7CisgICAgVmVjdG9yIG1ldGhvZHMgPSBuZXcgVmVjdG9yKCk7CisKKyAgICB3aGlsZSAoY2FjaGUuaW5kZXhPZihzZXApICE9IC0xKSB7CisgICAgICAgIGludCBpbmRleCA9IGNhY2hlLmluZGV4T2Yoc2VwKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBjYWNoZS5zdWJzdHJpbmcoMCxpbmRleCk7CisgICAgICAgIGlmIChuYW1lLnRyaW0oKSAhPSAiIikgeworICAgICAgICAgICAgbWV0aG9kcy5hZGQobmFtZSk7CisgICAgICAgICAgICBjYWNoZSA9IGNhY2hlLnN1YnN0cmluZyhpbmRleCtzZXBMZW4pOworICAgICAgICB9CisgICAgfQorCisgICAgICAgIEVudW1lcmF0aW9uIGFsbE1ldGhvZHMgPSBtZXRob2RzLmVsZW1lbnRzKCk7CisgICAgICAgIHdoaWxlIChhbGxNZXRob2RzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBTdHJpbmcgb25lTWV0aG9kID0gKFN0cmluZykgYWxsTWV0aG9kcy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgaWYgKCFvbmVNZXRob2QudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG51bGw7CisgICAgICAgICAgICAgICAgVmVjdG9yIHBhcm1zID0gbmV3IFZlY3RvcigpOworICAgICAgICAgICAgICAgIFN0cmluZ1Rva2VuaXplciBtZXRob2REZXRhaWxzID0gbmV3IFN0cmluZ1Rva2VuaXplcihvbmVNZXRob2QsZGVsaW0pOworICAgICAgICBmb3IgKGludCBpPTA7IG1ldGhvZERldGFpbHMuaGFzTW9yZVRva2VucygpO2krKyApIHsKKyAgICAgICAgICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIG1ldGhvZERldGFpbHMubmV4dFRva2VuKCk7CisgICAgICAgICAgICBpZiAoaT09MCkgeworICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSB0b2tlbi50b1VwcGVyQ2FzZSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJtcy5hZGQodG9rZW4pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHByb3BlcnRpZXMucHV0KG1ldGhvZE5hbWUscGFybXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzOworICAgIH0KKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBEYXRhc291cmNlIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlIHNwZWMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCUluaXRpYWwgRGF0YVNvdXJjZSBPYmplY3QgaW5zdGFuY2UuCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gSWYgY2xhc3MgbmFtZSBpcyB3cm9uZyBvciBjbGFzc3BhdGggaXMgbm90IHNldAotICAgICAqCQlwcm9wZXJseS4KKyAgICAgKiBAcmV0dXJuICAgIEluaXRpYWwgRGF0YVNvdXJjZSBPYmplY3QgaW5zdGFuY2UuCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gSWYgY2xhc3MgbmFtZSBpcyB3cm9uZyBvciBjbGFzc3BhdGggaXMgbm90IHNldAorICAgICAqICAgICAgICBwcm9wZXJseS4KICAgICAgKi8KICAgICBwcml2YXRlIE9iamVjdCBnZXREYXRhU291cmNlT2JqZWN0KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlTdHJpbmcgY2xhc3NOYW1lID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKLSAgICAgICAgdHJ5IHsgICAgICAgICAgICAKKyAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBkYXRhU291cmNlQ2xhc3MgPSBDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSk7CiAgICAgICAgICAgICBPYmplY3QgZGF0YVNvdXJjZU9iamVjdCA9IGRhdGFTb3VyY2VDbGFzcy5uZXdJbnN0YW5jZSgpOwogICAgICAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2VPYmplY3Q7CiAgICAgICAgIH0gY2F0Y2goQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBjZm5lKXsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY25mZV9kcyIsIGNmbmUpOwotCQorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jbmZlX2RzIiwgY2ZuZSk7CisKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ2xhc3MgTmFtZSBpcyB3cm9uZyBvciBDbGFzcyBwYXRoIGlzIG5vdCBzZXQgZm9yIDoiICsgY2xhc3NOYW1lKTsKICAgICAgICAgfSBjYXRjaChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGNlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2luc3QiLCBjbGFzc05hbWUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pbnN0IiwgY2xhc3NOYW1lKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiRXJyb3IgaW4gaW5zdGFudGlhdGluZyIgKyBjbGFzc05hbWUpOwogICAgICAgICB9IGNhdGNoKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gY2UpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYWNjX2luc3QiLCBjbGFzc05hbWUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hY2NfaW5zdCIsIGNsYXNzTmFtZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBFcnJvciBpbiBpbnN0YW50aWF0aW5nIiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0KICAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQppbmRleCBlZjZjNGM5Li4zZGMxNTRkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKQEAgLTE5LDkyICsxOSw5MiBAQAogaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7CiAKIC8qKgotICogRW5jYXBzdWxhdGUgdGhlIERhdGFTb3VyY2Ugb2JqZWN0IGRldGFpbHMgb2J0YWluZWQgZnJvbSAKKyAqIEVuY2Fwc3VsYXRlIHRoZSBEYXRhU291cmNlIG9iamVjdCBkZXRhaWxzIG9idGFpbmVkIGZyb20KICAqIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2VTcGVjIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VSTkFNRQkJCQk9IDE7ICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBU1NXT1JECQkJCT0gMjsgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVSTAkJCQkJPSAzOyAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HSU5USU1FT1VUCQkJPSA0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR1dSSVRFUgkJCQk9IDU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQUJBU0VOQU1FCQkJPSA2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0VOQU1FCQkJPSA3OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFU0NSSVBUSU9OCQkJCT0gODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLUFJPVE9DT0wJCQk9IDk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9SVE5VTUJFUgkJCQk9IDEwOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPTEVOQU1FCQkJCT0gMTE7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVkVSTkFNRQkJCQk9IDEyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFNUQVRFTUVOVFMJCQk9IDEzOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOSVRJQUxQT09MU0laRQkJCT0gMTQ7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOUE9PTFNJWkUJCQkJPSAxNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhQT09MU0laRQkJCQk9IDE2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWElETEVUSU1FCQkJCT0gMTc7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlDWUNMRQkJCT0gMTg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRFJJVkVSUFJPUEVSVElFUwkJCT0gMTk7ICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMQVNTTkFNRQkJCQk9IDIwOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFTElNSVRFUgkJCQk9IDIxOwotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFhBREFUQVNPVVJDRQkJCT0gMjI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRQkJCQk9IDIzOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05QT09MREFUQVNPVVJDRQkJPSAyNDsKLSAgICAgIAotICAgIC8vR0pDSU5UICAgICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRAk9IDI1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05NRVRIT0QJCQk9IDI2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05UQUJMRU5BTUUJCQk9IDI3OwotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRSQU5TQUNUSU9OSVNPTEFUSU9OCQk9IDI4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdVQVJBTlRFRUlTT0xBVElPTkxFVkVMCQk9IDI5OwotICAgICAgICAgICAgCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUk5BTUUgICAgICAgICAgICAgICAgPSAxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBU1NXT1JEICAgICAgICAgICAgICAgID0gMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVUkwgICAgICAgICAgICAgICAgICAgID0gMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dJTlRJTUVPVVQgICAgICAgICAgICA9IDQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HV1JJVEVSICAgICAgICAgICAgICAgID0gNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBQkFTRU5BTUUgICAgICAgICAgICA9IDY7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRU5BTUUgICAgICAgICAgICA9IDc7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgPSA4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktQUk9UT0NPTCAgICAgICAgICAgID0gOTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1JUTlVNQkVSICAgICAgICAgICAgICAgID0gMTA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9MRU5BTUUgICAgICAgICAgICAgICAgPSAxMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVJWRVJOQU1FICAgICAgICAgICAgICAgID0gMTI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYU1RBVEVNRU5UUyAgICAgICAgICAgID0gMTM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5JVElBTFBPT0xTSVpFICAgICAgICAgICAgPSAxNDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSU5QT09MU0laRSAgICAgICAgICAgICAgICA9IDE1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFBPT0xTSVpFICAgICAgICAgICAgICAgID0gMTY7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYSURMRVRJTUUgICAgICAgICAgICAgICAgPSAxNzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWUNZQ0xFICAgICAgICAgICAgPSAxODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEUklWRVJQUk9QRVJUSUVTICAgICAgICAgICAgPSAxOTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTEFTU05BTUUgICAgICAgICAgICAgICAgPSAyMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUxJTUlURVIgICAgICAgICAgICAgICAgPSAyMTsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFhBREFUQVNPVVJDRSAgICAgICAgICAgID0gMjI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRSAgICAgICAgICAgICAgICA9IDIzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05QT09MREFUQVNPVVJDRSAgICAgICAgPSAyNDsKKworICAgIC8vR0pDSU5UCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCAgICA9IDI1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05NRVRIT0QgICAgICAgICAgICA9IDI2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05UQUJMRU5BTUUgICAgICAgICAgICA9IDI3OworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNBQ1RJT05JU09MQVRJT04gICAgICAgID0gMjg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwgICAgICAgID0gMjk7CisKICAgICBwcml2YXRlIEhhc2h0YWJsZSBkZXRhaWxzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBwcm9wZXJ0eS4KICAgICAgKgotICAgICAqIEBwYXJhbQlwcm9wZXJ0eQlQcm9wZXJ0eSBOYW1lIHRvIGJlIHNldC4KLSAgICAgKiBAcGFyYW0JdmFsdWUJCVZhbHVlIG9mIHByb3BlcnR5IHRvIGJlIHNldC4KKyAgICAgKiBAcGFyYW0gICAgcHJvcGVydHkgICAgUHJvcGVydHkgTmFtZSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIHZhbHVlICAgICAgICBWYWx1ZSBvZiBwcm9wZXJ0eSB0byBiZSBzZXQuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGV0YWlsKGludCBwcm9wZXJ0eSwgU3RyaW5nIHZhbHVlKSB7Ci0gICAgCWRldGFpbHMucHV0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSx2YWx1ZSk7CisgICAgICAgIGRldGFpbHMucHV0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSx2YWx1ZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSB2YWx1ZSBvZiBwcm9wZXJ0eQogICAgICAqCi0gICAgICogQHJldHVybglWYWx1ZSBvZiB0aGUgcHJvcGVydHkuCisgICAgICogQHJldHVybiAgICBWYWx1ZSBvZiB0aGUgcHJvcGVydHkuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZXRhaWwoaW50IHByb3BlcnR5KSB7Ci0gICAgCWlmIChkZXRhaWxzLmNvbnRhaW5zS2V5KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSkpIHsKLSAgICAJICAgIHJldHVybiAoU3RyaW5nKSBkZXRhaWxzLmdldChuZXcgSW50ZWdlcihwcm9wZXJ0eSkpOwotICAgIAl9IGVsc2UgewotICAgIAkgICAgcmV0dXJuIG51bGw7Ci0gICAgCX0gICAgCQorICAgICAgICBpZiAoZGV0YWlscy5jb250YWluc0tleShuZXcgSW50ZWdlcihwcm9wZXJ0eSkpKSB7CisgICAgICAgICAgICByZXR1cm4gKFN0cmluZykgZGV0YWlscy5nZXQobmV3IEludGVnZXIocHJvcGVydHkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIHdoZXRoZXIgdHdvIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3RzCiAgICAgICogYXJlIGVxdWFsIG9yIG5vdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlvYmoJSW5zdGFuY2Ugb2YgPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIEluc3RhbmNlIG9mIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKLSAgICAJaWYgKG9iaiBpbnN0YW5jZW9mIERhdGFTb3VyY2VTcGVjKSB7Ci0gICAgCSAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmVxdWFscygoKERhdGFTb3VyY2VTcGVjKW9iaikuZGV0YWlscyk7Ci0gICAgCX0KLSAgICAJcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgRGF0YVNvdXJjZVNwZWMpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmRldGFpbHMuZXF1YWxzKCgoRGF0YVNvdXJjZVNwZWMpb2JqKS5kZXRhaWxzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBoYXNoQ29kZSBvZiB0aGlzIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhhc2hDb2RlIG9mIHRoaXMgb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgaGFzaENvZGUgb2YgdGhpcyBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKLSAgICAJcmV0dXJuIHRoaXMuZGV0YWlscy5oYXNoQ29kZSgpOwotICAgIH0gICAgCisgICAgICAgIHJldHVybiB0aGlzLmRldGFpbHMuaGFzaENvZGUoKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKaW5kZXggZWY0MzhmYy4uM2I0ZmFlYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iLiIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL2NvbW1vbiIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0zNiwxMyArMzYsMTMgQEAKIAogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxMyIgZGVwZW5kcz0iY29tcGlsZSIvPgogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxNCIgZGVwZW5kcz0iY29tcGlsZSIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxMyIgZGVwZW5kcz0icGFja2FnZSIvPgogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxNCIgZGVwZW5kcz0icGFja2FnZSIvPgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxMyIgZGVwZW5kcz0iY29tcGlsZTEzLCBwYWNrYWdlMTMiLz4KICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgotICAgIAorCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKaW5kZXggYmZjYmYwYi4uNGViZWQ2ZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCkBAIC0yNCwyNCArMjQsMjQgQEAKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcjsKIAogLyoqCi0gKiBIb2xkcyB0aGUgamF2YS5zcWwuQ29ubmVjdGlvbiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlIAorICogSG9sZHMgdGhlIGphdmEuc3FsLkNvbm5lY3Rpb24gb2JqZWN0LCB3aGljaCBpcyB0byBiZQogICogcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvbkhvbGRlciBpbXBsZW1lbnRzIENvbm5lY3Rpb257IAorcHVibGljIGNsYXNzIENvbm5lY3Rpb25Ib2xkZXIgaW1wbGVtZW50cyBDb25uZWN0aW9uewogCiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uIGNvbjsKLSAgICAKKwogICAgIHByaXZhdGUgTWFuYWdlZENvbm5lY3Rpb24gbWM7Ci0gICAgCi0gICAgcHJpdmF0ZSBib29sZWFuIHdyYXBwZWRBbHJlYWR5ID0gZmFsc2U7ICAgIAotICAgIAorCisgICAgcHJpdmF0ZSBib29sZWFuIHdyYXBwZWRBbHJlYWR5ID0gZmFsc2U7CisKICAgICBwcml2YXRlIGJvb2xlYW4gaXNDbG9zZWQgPSBmYWxzZTsKLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiB2YWxpZCA9IHRydWU7Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gYWN0aXZlID0gZmFsc2U7CiAgICAgLyoqCiAgICAgICogVGhlIGFjdGl2ZSBmbGFnIGlzIGZhbHNlIHdoZW4gdGhlIGNvbm5lY3Rpb24gaGFuZGxlIGlzCkBAIC01MywyMTkgKzUzLDIxOSBAQAogICAgICAqIGZ1bmN0aW9uLCB0aGUgYWJvdmUgbWV0aG9kIGludm9jYXRpb24gc3VjY2VlZHM7IG90aGVyd2lzZQogICAgICAqIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICAgICovCi0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGEgQ29ubmVjdGlvbiBob2xkZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvbkhvbGRlcihDb25uZWN0aW9uIGNvbiwgTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy5jb24gPSBjb247CiAgICAgICAgIHRoaXMubWMgID0gbWM7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIHRoaXMgaG9sZGVyIG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuCUNvbm5lY3Rpb24gb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybiAgICBDb25uZWN0aW9uIG9iamVjdC4KICAgICAgKi8KICAgICBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oKSB7Ci0gICAgCXJldHVybiBjb247CisgICAgICAgIHJldHVybiBjb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZmxhZyB0byBpbmRpY2F0ZSB0aGF0LCB0aGUgY29ubmVjdGlvbiBpcyB3cmFwcGVkIGFscmVhZHkgb3Igbm90LgogICAgICAqCi0gICAgICogQHBhcmFtCXdyYXBGbGFnCQorICAgICAqIEBwYXJhbSAgICB3cmFwRmxhZwogICAgICAqLwogICAgIHZvaWQgd3JhcHBlZChib29sZWFuIHdyYXBGbGFnKXsKICAgICAgICAgdGhpcy53cmFwcGVkQWxyZWFkeSA9IHdyYXBGbGFnOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgd2hldGhlciBpdCBpcyB3cmFwcGVkIGFscmVhZHkgb3Igbm90LgogICAgICAqCi0gICAgICogQHJldHVybgl3cmFwcGVkIGZsYWcuCisgICAgICogQHJldHVybiAgICB3cmFwcGVkIGZsYWcuCiAgICAgICovCiAgICAgYm9vbGVhbiBpc1dyYXBwZWQoKXsKICAgICAgICAgcmV0dXJuIHdyYXBwZWRBbHJlYWR5OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSByZXNwb25zaWJsZQogICAgICAqIGZvciB0aGlzIGNvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKi8KICAgICBNYW5hZ2VkQ29ubmVjdGlvbiBnZXRNYW5hZ2VkQ29ubmVjdGlvbigpIHsKICAgICAgICAgcmV0dXJuIG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlcGxhY2UgdGhlIGFjdHVhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3Qgd2l0aCB0aGUgb25lCi0gICAgICogc3VwcGxpZWQuIEFsc28gcmVwbGFjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gbGluay4gICAgIAorICAgICAqIHN1cHBsaWVkLiBBbHNvIHJlcGxhY2UgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGxpbmsuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29uIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0JbWMgIDxjb2RlPiBNYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBjb24gPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBtYyAgPGNvZGU+IE1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgdm9pZCBhc3NvY2lhdGVDb25uZWN0aW9uKENvbm5lY3Rpb24gY29uLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewotICAgIAl0aGlzLm1jID0gbWM7Ci0gICAgCXRoaXMuY29uID0gY29uOworICAgICAgICB0aGlzLm1jID0gbWM7CisgICAgICAgIHRoaXMuY29uID0gY29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENsZWFycyBhbGwgd2FybmluZ3MgcmVwb3J0ZWQgZm9yIHRoZSB1bmRlcmx5aW5nIGNvbm5lY3Rpb24gIG9iamVjdC4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgY2xlYXJXYXJuaW5ncygpIHRocm93cyBTUUxFeGNlcHRpb257ICAgIAotCWNoZWNrVmFsaWRpdHkoKTsKKyAgICBwdWJsaWMgdm9pZCBjbGVhcldhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIGNvbi5jbGVhcldhcm5pbmdzKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2xvc2VzIHRoZSBsb2dpY2FsIGNvbm5lY3Rpb24uICAgIAorICAgICAqIENsb3NlcyB0aGUgbG9naWNhbCBjb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgICBpc0Nsb3NlZCA9IHRydWU7Ci0gICAgICAgIG1jLmNvbm5lY3Rpb25DbG9zZWQobnVsbCwgdGhpcyk7ICAgICAgICAKKyAgICAgICAgbWMuY29ubmVjdGlvbkNsb3NlZChudWxsLCB0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBJbnZhbGlkYXRlcyB0aGlzIG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBpbnZhbGlkYXRlKCkgewotICAgIAl2YWxpZCA9IGZhbHNlOworICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENsb3NlcyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpbnZvbHZlZCBpbiB0aGlzLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICB2b2lkIGFjdHVhbENsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsgICAgCisgICAgdm9pZCBhY3R1YWxDbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICAgIGNvbi5jbG9zZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCB0aGUgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uY29tbWl0KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uY29tbWl0KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEByZXR1cm4JPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuICAgICAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQocmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzdGF0ZW1lbnQgZnJvbSB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4gCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRIb2xkYWJpbGl0eSAgICBSZXN1bHRTZXQgSG9sZGFiaWxpdHkuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCi0gICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoaW50IHJlc3VsdFNldFR5cGUsIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCSAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCSAgICAgCisgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoaW50IHJlc3VsdFNldFR5cGUsIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudChyZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAgICAgCQkJICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOwogICAgIH0KLSAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBhdXRvLWNvbW1pdCBtb2RlIGZvciB0aGUgdW5kZXJseWluZyA8Y29kZT4gQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IHN0YXRlIG9mIGNvbm5lY3Rpb24ncyBhdXRvLWNvbW1pdCBtb2RlLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZ2V0QXV0b0NvbW1pdCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0QXV0b0NvbW1pdCgpOwotICAgIH0gICAKLSAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0QXV0b0NvbW1pdCgpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgdW5kZXJseWluZyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QncyBjYXRhbG9nIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCUNhdGFsb2cgTmFtZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICBDYXRhbG9nIE5hbWUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2F0YWxvZygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmdldENhdGFsb2coKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgaG9sZGFiaWxpdHkgb2YgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBvYmplY3RzIGNyZWF0ZWQKICAgICAgKiB1c2luZyB0aGlzIGNvbm5lY3Rpb24gb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybglob2xkYWJpbGl0eSB2YWx1ZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICBob2xkYWJpbGl0eSB2YWx1ZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRIb2xkYWJpbGl0eSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybgljb24uZ2V0SG9sZGFiaWxpdHkoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiAgICBjb24uZ2V0SG9sZGFiaWxpdHkoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPkRhdGFiYXNlTWV0YURhdGE8L2NvZGU+b2JqZWN0IGZyb20gdGhlIHVuZGVybHlpbmcKICAgICAgKiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gPGNvZGU+RGF0YWJhc2VNZXRhRGF0YTwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIERhdGFiYXNlTWV0YURhdGEgZ2V0TWV0YURhdGEoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldE1ldGFEYXRhKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldE1ldGFEYXRhKCk7CiAgICAgfQotIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0J3MgY3VycmVudCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRyYW5zYWN0aW9uIGxldmVsCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLyAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCAKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aAogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uPC9jb2RlPiBPYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVR5cGVNYXAgc2V0IGluIHRoaXMgb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIFR5cGVNYXAgc2V0IGluIHRoaXMgb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgTWFwIGdldFR5cGVNYXAoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldFR5cGVNYXAoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0VHlwZU1hcCgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMjczLDE4NCArMjczLDE4NCBAQAogICAgICAqIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gRmlyc3QgPGNvZGU+IFNRTFdhcm5pbmc8L2NvZGU+IE9iamVjdCBvciBudWxsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNRTFdhcm5pbmcgZ2V0V2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldFdhcm5pbmdzKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldFdhcm5pbmdzKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHdoZXRoZXIgdW5kZXJseWluZyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLgogICAgICAqCi0gICAgICogQHJldHVybgl0cnVlIGlmIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyBjbG9zZWQsIGZhbHNlCi0gICAgICogCQlpZiBpdCBpcyBjbG9zZWQuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLCBmYWxzZQorICAgICAqICAgICAgICAgaWYgaXQgaXMgY2xvc2VkLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0Nsb3NlZCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAlyZXR1cm4gaXNDbG9zZWQ7CisgICAgICAgIHJldHVybiBpc0Nsb3NlZDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgd2hldGhlciB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyByZWFkLW9ubHkuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBpcyByZWFkLW9ubHksIGZhbHNlIG90aGVyLXdpc2UKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gaXMgcmVhZC1vbmx5LCBmYWxzZSBvdGhlci13aXNlCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzUmVhZE9ubHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmlzUmVhZE9ubHkoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uaXNSZWFkT25seSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiBTUUwgc3RhdGVtZW50IGludG8gdGhlIHN5c3RlbSdzIG5hdGl2ZSBTUUwgZ3JhbW1lci4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIHN0YXRlbWVudCAsIHRvIGJlIGNvbnZlcnRlZC4KLSAgICAgKiBAcmV0dXJuCUNvbnZlcnRlZCBTUUwgc3RyaW5nLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBzdGF0ZW1lbnQgLCB0byBiZSBjb252ZXJ0ZWQuCisgICAgICogQHJldHVybiAgICBDb252ZXJ0ZWQgU1FMIHN0cmluZy4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBuYXRpdmVTUUwoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5uYXRpdmVTUUwoc3FsKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ubmF0aXZlU1FMKHNxbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQogICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CiAgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKLSAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQotICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgICAgICAKLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCSAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgIAkJCSAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsKTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKKyAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKKyAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCiAgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKICAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsKICAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlhdXRvR2VuZXJhdGVkS2V5cyBhIGZsYWcgaW5kaWNhdGluZyBBdXRvR2VuZXJhdGVkS2V5cyBuZWVkIHRvIGJlIHJldHVybmVkLgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCBhdXRvR2VuZXJhdGVkS2V5cykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxhdXRvR2VuZXJhdGVkS2V5cyk7Ci0gICAgfSAgICAKLSAgICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JY29sdW1uSW5kZXhlcyBhbiBhcnJheSBvZiBjb2x1bW4gaW5kZXhlcyBpbmRpY2F0aW5nIHRoZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlCi0gICAgICoJCXJldHVybmVkIGZyb20gdGhlIGluc2VydGVkIHJvdyBvciByb3dzLgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludFtdIGNvbHVtbkluZGV4ZXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uSW5kZXhlcyk7Ci0gICAgfSAgICAgICAgICAKLSAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCWludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgICAgICAgCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgIAkJCQkgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7Ci0gICAgfSAgICAgICAgICAgCiAKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKICAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQljb2x1bW5OYW1lcyBOYW1lIG9mIGJvdW5kIGNvbHVtbnMuCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGF1dG9HZW5lcmF0ZWRLZXlzIGEgZmxhZyBpbmRpY2F0aW5nIEF1dG9HZW5lcmF0ZWRLZXlzIG5lZWQgdG8gYmUgcmV0dXJuZWQuCiAgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCBhdXRvR2VuZXJhdGVkS2V5cykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGF1dG9HZW5lcmF0ZWRLZXlzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgY29sdW1uSW5kZXhlcyBhbiBhcnJheSBvZiBjb2x1bW4gaW5kZXhlcyBpbmRpY2F0aW5nIHRoZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlCisgICAgICogICAgICAgIHJldHVybmVkIGZyb20gdGhlIGluc2VydGVkIHJvdyBvciByb3dzLgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludFtdIGNvbHVtbkluZGV4ZXMpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5JbmRleGVzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0SG9sZGFiaWxpdHkgICAgUmVzdWx0U2V0IEhvbGRhYmlsaXR5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBjb2x1bW5OYW1lcyBOYW1lIG9mIGJvdW5kIGNvbHVtbnMuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgU3RyaW5nW10gY29sdW1uTmFtZXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uTmFtZXMpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5OYW1lcyk7CiAgICAgfQogCiAgICAgcHVibGljIENsb2IgY3JlYXRlQ2xvYigpIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtNTAwLDE2MiArNTAwLDE2MiBAQAogICAgIC8qKgogICAgICAqIFJlbW92ZXMgdGhlIGdpdmVuIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2F2ZXBvaW50CTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0Ci0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBzYXZlcG9pbnQgICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVsZWFzZVNhdmVwb2ludChTYXZlcG9pbnQgc2F2ZXBvaW50KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucmVsZWFzZVNhdmVwb2ludChzYXZlcG9pbnQpOwotICAgIH0gCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucmVsZWFzZVNhdmVwb2ludChzYXZlcG9pbnQpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFJvbGxzIGJhY2sgdGhlIGNoYW5nZXMgbWFkZSBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjaygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yb2xsYmFjaygpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJvbGxiYWNrKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUm9sbHMgYmFjayB0aGUgY2hhbmdlcyBtYWRlIGFmdGVyIHRoZSBzYXZlcG9pbnQuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soU2F2ZXBvaW50IHNhdmVwb2ludCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJvbGxiYWNrKHNhdmVwb2ludCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucm9sbGJhY2soc2F2ZXBvaW50KTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgYXV0by1jb21tbWl0IG1vZGUgb2YgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlhdXRvQ29tbWl0IGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB0aGUgYXV0by1jb21taXQgbW9kZS4gICAgIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgYXV0b0NvbW1pdCBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhlIGF1dG8tY29tbWl0IG1vZGUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEF1dG9Db21taXQoYm9vbGVhbiBhdXRvQ29tbWl0KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGF1dG9Db21taXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNhdGFsb2cgbmFtZSB0byB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2F0YWxvZwlDYXRhbG9nIG5hbWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBjYXRhbG9nICAgIENhdGFsb2cgbmFtZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q2F0YWxvZyhTdHJpbmcgY2F0YWxvZykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldENhdGFsb2coY2F0YWxvZyk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0Q2F0YWxvZyhjYXRhbG9nKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZCAKKyAgICAgKiBTZXRzIHRoZSBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZAogICAgICAqIHVzaW5nIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCWhvbGRhYmlsaXR5CUEgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBob2xkYWJpbGl0eSBjb25zdGFudAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgaG9sZGFiaWxpdHkgICAgQSA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IGhvbGRhYmlsaXR5IGNvbnN0YW50CisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEhvbGRhYmlsaXR5KGludCBob2xkYWJpbGl0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAgCWNvbi5zZXRIb2xkYWJpbGl0eShob2xkYWJpbGl0eSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICAgY29uLnNldEhvbGRhYmlsaXR5KGhvbGRhYmlsaXR5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBQdXRzIHRoZSBjb25uZWN0aW9uIGluIHJlYWQtb25seSBtb2RlIGFzIGEgaGludCB0byB0aGUgZHJpdmVyIHRvIAorICAgICAqIFB1dHMgdGhlIGNvbm5lY3Rpb24gaW4gcmVhZC1vbmx5IG1vZGUgYXMgYSBoaW50IHRvIHRoZSBkcml2ZXIgdG8KICAgICAgKiBwZXJmb3JtIGRhdGFiYXNlIG9wdGltaXphdGlvbnMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVhZE9ubHkgIHRydWUgZW5hYmxlcyByZWFkLW9ubHkgbW9kZSwgZmFsc2UgZGlzYWJsZXMgaXQuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICByZWFkT25seSAgdHJ1ZSBlbmFibGVzIHJlYWQtb25seSBtb2RlLCBmYWxzZSBkaXNhYmxlcyBpdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVhZE9ubHkoYm9vbGVhbiByZWFkT25seSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldFJlYWRPbmx5KHJlYWRPbmx5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRSZWFkT25seShyZWFkT25seSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhbmQgdW5uYW1lZCBzYXZlcG9pbnQgYW5kIHJldHVybnMgYW4gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KICAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNhdmVwb2ludCBzZXRTYXZlcG9pbnQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnNldFNhdmVwb2ludCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc2F2ZXBvaW50IHdpdGggdGhlIG5hbWUgYW5kIHJldHVybnMgYW4gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdC4KICAgICAgKgotICAgICAqIEBwYXJhbQluYW1lCU5hbWUgb2YgdGhlIHNhdmVwb2ludC4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbmFtZSAgICBOYW1lIG9mIHRoZSBzYXZlcG9pbnQuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNhdmVwb2ludCBzZXRTYXZlcG9pbnQoU3RyaW5nIG5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uc2V0U2F2ZXBvaW50KG5hbWUpOwotICAgIH0gICAgCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnNldFNhdmVwb2ludChuYW1lKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGV2ZWwgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbGV2ZWwgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2FjdGlvbklzb2xhdGlvbihpbnQgbGV2ZWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbihsZXZlbCk7Ci0gICAgfSAgICAgCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24obGV2ZWwpOworICAgIH0KKwogICAgIC8qKgotICAgICAqIEluc3RhbGxzIHRoZSBnaXZlbiA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhcyB0aGUgdHlvZSBtYXAgZm9yIHRoaXMgCisgICAgICogSW5zdGFsbHMgdGhlIGdpdmVuIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzIHRoZSB0eW9lIG1hcCBmb3IgdGhpcwogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCW1hcAk8Y29kZT5NYXA8L2NvZGU+IGEgTWFwIG9iamVjdCB0byBpbnN0YWxsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbWFwICAgIDxjb2RlPk1hcDwvY29kZT4gYSBNYXAgb2JqZWN0IHRvIGluc3RhbGwuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFR5cGVNYXAoTWFwIG1hcCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOwotICAgIAljb24uc2V0VHlwZU1hcChtYXApOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldFR5cGVNYXAobWFwKTsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE5ldHdvcmtUaW1lb3V0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5ldHdvcmtUaW1lb3V0KEV4ZWN1dG9yIGV4ZWN1dG9yLCBpbnQgbWlsbGlzZWNvbmRzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWJvcnQoRXhlY3V0b3IgZXhlY3V0b3IpICB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFNjaGVtYSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNjaGVtYShTdHJpbmcgc2NoZW1hKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIENoZWNrcyB0aGUgdmFsaWRpdHkgb2YgdGhpcyBvYmplY3QKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgY2hlY2tWYWxpZGl0eSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAlpZiAoaXNDbG9zZWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJDb25uZWN0aW9uIGNsb3NlZCIpOwotICAgIAlpZiAoIXZhbGlkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiSW52YWxpZCBDb25uZWN0aW9uIik7Ci0gICAgCWlmKGFjdGl2ZSA9PSBmYWxzZSkgewotICAgIAkgICAgbWMuY2hlY2tJZkFjdGl2ZSh0aGlzKTsKLSAgICAJfQorICAgICAgICBpZiAoaXNDbG9zZWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJDb25uZWN0aW9uIGNsb3NlZCIpOworICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiSW52YWxpZCBDb25uZWN0aW9uIik7CisgICAgICAgIGlmKGFjdGl2ZSA9PSBmYWxzZSkgeworICAgICAgICAgICAgbWMuY2hlY2tJZkFjdGl2ZSh0aGlzKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGFjdGl2ZSBmbGFnIHRvIHRydWUKICAgICAgKgotICAgICAqIEBwYXJhbQlhY3R2CWJvb2xlYW4KKyAgICAgKiBAcGFyYW0gICAgYWN0diAgICBib29sZWFuCiAgICAgICovCiAgICAgdm9pZCBzZXRBY3RpdmUoYm9vbGVhbiBhY3R2KSB7CiAgICAgICAgIGFjdGl2ZSA9IGFjdHY7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKaW5kZXggYWM3ZTc0OC4uZjA2NzVhNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtMzMsMTkgKzMzLDE5IEBACiAgKiBUaGlzIGNsYXNzIGlzIGV4dGVuZGVkIGJ5IHRoZSBEYXRhU291cmNlIHNwZWNpZmljIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmYWN0b3JpZXMKICAqIGFuZCB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBmb3IgdGhlIDxjb2RlPkRyaXZlck1hbmFnZXI8L2NvZGU+LgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzAzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiAKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnksIAorcHVibGljIGFic3RyYWN0IGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSwKICAgICBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgRGF0YVNvdXJjZVNwZWMgc3BlYyA9IG5ldyBEYXRhU291cmNlU3BlYygpOwogICAgIHByb3RlY3RlZCB0cmFuc2llbnQgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIgZHNPYmpCdWlsZGVyOwotICAgIAorCiAgICAgcHJvdGVjdGVkIGphdmEuaW8uUHJpbnRXcml0ZXIgbG9nV3JpdGVyID0gbnVsbDsKICAgICBwcm90ZWN0ZWQgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHJhID0gbnVsbDsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC01NCw4ICs1NCw4IEBACiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIENvbm5lY3Rpb24gRmFjdG9yeSBpbnN0YW5jZS4gVGhlIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbgogICAgICAqIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGlzIHVzZWQgaGVyZS4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuCUdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjcmVhdGVDb25uZWN0aW9uRmFjdG9yeSgpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTYzLDE2ICs2MywxNiBAQAogICAgICAgICB9CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIGNmID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlKAogICAgICAgICAgICAgKGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSl0aGlzLCBudWxsKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBDb25uZWN0aW9uIEZhY3RvcnkgaW5zdGFuY2UuIFRoZSA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gaW1wbGVtZW50YXRpb24KICAgICAgKiBvZiB0aGUgYXBwbGljYXRpb24gc2VydmVyIGlzIHVzZWQgaGVyZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY3hNYW5hZ2VyCTxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEByZXR1cm4JR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjeE1hbmFnZXIgICAgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHJldHVybiAgICBHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgY3JlYXRlQ29ubmVjdGlvbkZhY3RvcnkoamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIgY3hNYW5hZ2VyKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC04MCw1NSArODAsNTUgQEAKICAgICAgICAgfQogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSBjZiA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSgKICAgICAgICAgICAgIChqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpdGhpcywgY3hNYW5hZ2VyKTsKLSAgICAgICAgcmV0dXJuIGNmOyAKKyAgICAgICAgcmV0dXJuIGNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBuZXcgcGh5c2ljYWwgY29ubmVjdGlvbiB0byB0aGUgdW5kZXJseWluZyBFSVMgcmVzb3VyY2UKICAgICAgKiBtYW5hZ2VyLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCWFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCW9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKLSAgICAgKiAgICAgICAJCQkJY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QgCi0gICAgICogQHRocm93cwlSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCQlwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0CisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24oamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0IHN1YmplY3QsCiAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb247Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8gCisgICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvCiAgICAgICogYW5vdGhlciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LgotICAgICAqIAotICAgICAqIEBwYXJhbQlvdGhlcgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZSAKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKLSAgICAgKgkJZmFsc2UJb3RoZXJ3aXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgb3RoZXIgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKKyAgICAgKiAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvdGhlcik7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGphdmEuaW8uUHJpbnRXcml0ZXIgZ2V0TG9nV3JpdGVyKCkgewogICAgICAgICByZXR1cm4gbG9nV3JpdGVyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJlc291cmNlQWRhcHRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgZ2V0UmVzb3VyY2VBZGFwdGVyKCkgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTM2LDExICsxMzYsMTEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmE7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CisgICAgICogQHJldHVybiAgICBoYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKXsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTE0OCw0MSArMTQ4LDQxIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHNwZWMuaGFzaENvZGUoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbWF0Y2hlZCA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gZnJvbSB0aGUgY2FuZGlkYXRlIAorICAgICAqIFJldHVybnMgYSBtYXRjaGVkIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmcm9tIHRoZSBjYW5kaWRhdGUKICAgICAgKiBzZXQgb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdHMuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbm5lY3Rpb25TZXQJPGNvZGU+U2V0PC9jb2RlPiBvZiAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICoJCQkJb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBwYXJhbQlzdWJqZWN0CSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqCQkJZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqCQkJCWZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZwotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgaXMgdGhlIGJlc3QgbWF0Y2ggc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGFjY2Vzc2luZyB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4KLSAgICAgKgkJCQkJcGFyYW1ldGVyIG9yIHRoZSA8Y29kZT5TZXQ8L2NvZGU+IG9mIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqCQkJCQlvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29ubmVjdGlvblNldCAgICA8Y29kZT5TZXQ8L2NvZGU+IG9mICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICBvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogICAgICAgICAgICBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKKyAgICAgKiBAcGFyYW0gICAgY3hSZXF1ZXN0SW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogICAgICAgICAgICAgICAgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCBpcyB0aGUgYmVzdCBtYXRjaCBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgYWNjZXNzaW5nIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgb3IgdGhlIDxjb2RlPlNldDwvY29kZT4gb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIG9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKICAgICAgKi8KLSAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMoamF2YS51dGlsLlNldCBjb25uZWN0aW9uU2V0LCAKKyAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMoamF2YS51dGlsLlNldCBjb25uZWN0aW9uU2V0LAogICAgICAgICBqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihjb25uZWN0aW9uU2V0ID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYyA9IFNlY3VyaXR5VXRpbHMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKHRoaXMsIHN1YmplY3QsIGN4UmVxdWVzdEluZm8pOwotICAgICAgICAKKwogICAgICAgICBqYXZhLnV0aWwuSXRlcmF0b3IgaXRlciA9IGNvbm5lY3Rpb25TZXQuaXRlcmF0b3IoKTsKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jID0gbnVsbDsKICAgICAgICAgd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgbWMgPSAoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uKSBpdGVyLm5leHQoKTsKICAgICAgICAgICAgIH0gY2F0Y2goamF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNlcHRpb24gbnNlZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaXRlciIpOworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaXRlciIpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihuc2VlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZihwYyA9PSBudWxsICYmIHRoaXMuZXF1YWxzKG1jLmdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpKSkgewpAQCAtMTkxLDcgKzE5MSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQobWMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWM7CiAgICAgICAgICAgICAgICAgfSBjYXRjaChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewotCSAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3JlIiwgcmUpOworICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3JlIiwgcmUpOwogICAgICAgICAgICAgICAgICAgICBtYy5jb25uZWN0aW9uRXJyb3JPY2N1cnJlZChyZSwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmKFNlY3VyaXR5VXRpbHMuaXNQYXNzd29yZENyZWRlbnRpYWxFcXVhbChwYywgbWMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCkpID09IHRydWUpIHsKQEAgLTIwMCw0NSArMjAwLDQ1IEBACiAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQobWMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWM7CiAgICAgICAgICAgICAgICAgfSBjYXRjaChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewotCSAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMucmUiKTsKKyAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLnJlIik7CiAgICAgICAgICAgICAgICAgICAgIG1jLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKHJlLCBudWxsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLy9HSkNJTlQKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaXMgdG8gYmUgdmFsaWRhdGVkIG9yIG5vdAogICAgICAqIGFuZCB2YWxpZGF0ZXMgaXQgb3IgcmV0dXJucy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCi0gICAgICogICAgICAgIAkgICAgICAgICAgCQlpZiB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyCiAgICAgICovCiAgICAgdm9pZCBpc1ZhbGlkKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKIAogICAgICAgICBpZihtYy5pc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKSB7Ci0JICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgCi0gICAgICAgIGJvb2xlYW4gY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9IAorCisgICAgICAgIGJvb2xlYW4gY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9CiAgICAgICAgICAgICAobmV3IEJvb2xlYW4oc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCkudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOwogICAgICAgICBpZiggY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9PSBmYWxzZSB8fCBtYyA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgU3RyaW5nIHZhbGlkYXRpb25NZXRob2QgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAKKwogICAgICAgICBtYy5jaGVja0lmVmFsaWQoKTsKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBhYm92ZSBjYWxsIGNoZWNrcyBpZiB0aGUgYWN0dWFsIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgICAgICogaXMgdXNhYmxlIG9yIG5vdC4KICAgICAgICAgICovCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgICAgICAKKwogICAgICAgICBpZih2YWxpZGF0aW9uTWV0aG9kLmVxdWFscygiYXV0by1jb21taXQiKSA9PSB0cnVlKSB7CiAgICAgICAgICAgICBpc1ZhbGlkQnlBdXRvQ29tbWl0KGNvbik7CiAgICAgICAgIH0gZWxzZSBpZih2YWxpZGF0aW9uTWV0aG9kLmVxdWFsc0lnbm9yZUNhc2UoIm1ldGEtZGF0YSIpID09IHRydWUpIHsKQEAgLTI0OSwyOCArMjQ5LDI4IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBjaGVja2luZyBpdHMgYXV0byBjb21taXQgcHJvcGVydHkuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeUF1dG9Db21taXQoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgIC8vIE5vdGljZSB0aGF0IHVzaW5nIHNvbWV0aGluZyBsaWtlIAorICAgICAgICAgICAvLyBOb3RpY2UgdGhhdCB1c2luZyBzb21ldGhpbmcgbGlrZQogICAgICAgICAgICAvLyBkYkNvbi5zZXRBdXRvQ29tbWl0KGRiQ29uLmdldEF1dG9Db21taXQoKSkgd2lsbCBjYXVzZSBwcm9ibGVtcyB3aXRoCiAgICAgICAgICAgIC8vIHNvbWUgZHJpdmVycyBsaWtlIHN5YmFzZQotICAgICAgICAgICAvLyBXZSBkbyBub3QgdmFsaWRhdGUgY29ubmVjdGlvbnMgdGhhdCBhcmUgYWxyZWFkeSBlbmxpc3RlZCAKLQkgICAvL2luIGEgdHJhbnNhY3Rpb24gCi0JICAgLy8gV2UgY3ljbGUgYXV0b2NvbW1pdCB0byB0cnVlIGFuZCBmYWxzZSB0byBieS1wYXNzIGRyaXZlcnMgdGhhdCAKLQkgICAvLyBtaWdodCBjYWNoZSB0aGUgY2FsbCB0byBzZXQgYXV0b2NvbWl0dAorICAgICAgICAgICAvLyBXZSBkbyBub3QgdmFsaWRhdGUgY29ubmVjdGlvbnMgdGhhdCBhcmUgYWxyZWFkeSBlbmxpc3RlZAorICAgICAgIC8vaW4gYSB0cmFuc2FjdGlvbgorICAgICAgIC8vIFdlIGN5Y2xlIGF1dG9jb21taXQgdG8gdHJ1ZSBhbmQgZmFsc2UgdG8gYnktcGFzcyBkcml2ZXJzIHRoYXQKKyAgICAgICAvLyBtaWdodCBjYWNoZSB0aGUgY2FsbCB0byBzZXQgYXV0b2NvbWl0dAogICAgICAgICAgICAvLyBBbHNvIG5vdGljZSB0aGF0IHNvbWUgWEEgZGF0YSBzb3VyY2VzIHdpbGwgdGhyb3cgYW5kIGV4Y2VwdGlvbiBpZgogICAgICAgICAgICAvLyB5b3UgdHJ5IHRvIGNhbGwgc2V0QXV0b0NvbW1pdCwgZm9yIHRoZW0gdGhpcyBtZXRob2QgaXMgbm90IHJlY29tbWVuZGVkCiAKQEAgLTI4MSw5MCArMjgxLDkwIEBACiAgICAgICAgICAgICAgICAgY29uLnJvbGxiYWNrKCk7IC8vIHByZXZlbnRzIHVuY29tcGxldGVkIHRyYW5zYWN0aW9uIGV4Y2VwdGlvbnMKICAgICAgICAgICAgICAgICBjb24uc2V0QXV0b0NvbW1pdCh0cnVlKTsKICAgICAgICAgICAgfQotICAgICAgICAKLQkgICBjb24uc2V0QXV0b0NvbW1pdChhYyk7CisKKyAgICAgICBjb24uc2V0QXV0b0NvbW1pdChhYyk7CiAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hdXRvY29tbWl0Iik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2F1dG9jb21taXQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBjaGVja2luZyBpdHMgbWV0YSBkYXRhLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlNZXRhRGF0YShqYXZhLnNxbC5Db25uZWN0aW9uIGNvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGphdmEuc3FsLkRhdGFiYXNlTWV0YURhdGEgZG1kID0gY29uLmdldE1ldGFEYXRhKCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJnZXR0aW5nIHRoZSBtZXRhIGRhdGEgZmFpbGVkOiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90CiAgICAgICogYnkgcXVlcnlpbmcgYSB0YWJsZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEBwYXJhbQl0YWJsZU5hbWUJdGFibGUgd2hpY2ggc2hvdWxkIGJlIHF1ZXJpZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAcGFyYW0gICAgdGFibGVOYW1lICAgIHRhYmxlIHdoaWNoIHNob3VsZCBiZSBxdWVyaWVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlUYWJsZVF1ZXJ5KGphdmEuc3FsLkNvbm5lY3Rpb24gY29uLCAKKyAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlUYWJsZVF1ZXJ5KGphdmEuc3FsLkNvbm5lY3Rpb24gY29uLAogICAgICAgICBTdHJpbmcgdGFibGVOYW1lKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgamF2YS5zcWwuU3RhdGVtZW50IHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICBqYXZhLnNxbC5SZXN1bHRTZXQgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSAiICsgdGFibGVOYW1lKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19leGVjdXRlIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2V4ZWN1dGUiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJxdWVyeWluZyB0aGUgdGFibGUgIiArIHRhYmxlTmFtZSArICIgZmFpbGVkOiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgaXNvbGF0aW9uIGxldmVsIHNwZWNpZmllZCBpbiB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgogICAgICAqIGZvciB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHBhc3NlZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAotICAgICAqCQkJCQlvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAorICAgICAqICAgICAgICAgICAgICAgICAgICBvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIHNldElzb2xhdGlvbihjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCQotICAgIAlqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAgICAJaWYoY29uID09IG51bGwpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAkKLSAgICAJU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7Ci0gICAgCSAgICB0cnkgewotICAgIAkgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKLSAgICAJICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGNvdWxkICIKLSAgICAJICAgICAgICAgICAgKyAibm90IGJlIHNldDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgIH0KLSAgICAJfQorCisgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOworICAgICAgICBpZihjb24gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKKyAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGNvdWxkICIKKyAgICAgICAgICAgICAgICAgICAgKyAibm90IGJlIHNldDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlc2V0cyB0aGUgaXNvbGF0aW9uIGxldmVsIGZvciB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHBhc3NlZC4KICAgICAgKiBJZiB0aGUgdHJhbnNhY3Rpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgb25lCkBAIC0zNzMsMzgyICszNzMsMzgyIEBACiAgICAgICogaXNvbGF0aW9uIGxldmVsIGZyb20gdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkLiBFbHNlLAogICAgICAqIGl0IHNldHMgaXQgdG8gdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBwYXNzZWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHBhcmFtCXRyYW5Jc29sCWludAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCi0gICAgICoJCQkJCW9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cmFuSXNvbCAgICBpbnQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAorICAgICAqICAgICAgICAgICAgICAgICAgICBvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgogICAgICAqLwogICAgIHZvaWQgcmVzZXRJc29sYXRpb24oY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jLCBpbnQgdHJhbklzb2wpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCQotICAgIAlqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAgICAJaWYoY29uID09IG51bGwpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAkKLSAgICAJU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgIFN0cmluZyBndWFyYW50ZWVJc29sYXRpb25MZXZlbCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKLSAgICAJICAgIAotICAgIAkgICAgaWYoZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgIT0gbnVsbCAmJiBndWFyYW50ZWVJc29sYXRpb25MZXZlbC5lcXVhbHMoIiIpID09IGZhbHNlKSB7Ci0gICAgCSAgICAgICAgYm9vbGVhbiBndWFyYW50ZWUgPSAobmV3IEJvb2xlYW4oZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOwotICAgIAkgICAgICAgIAotICAgIAkgICAgICAgIGlmKGd1YXJhbnRlZSkgewotICAgIAkgICAgICAgICAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOwotICAgIAkgICAgICAgICAgICB0cnkgewotICAgIAkgICAgICAgICAgICAgICAgaWYodHJhbklzb2xhdGlvbkludCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgewotICAgIAkgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKLSAgICAJICAgICAgICAgICAgICAgIH0KLSAgICAJICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKLSAgICAJICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgICAgICAgICAgfQotICAgIAkgICAgICAgIH0gZWxzZSB7Ci0gICAgCSAgICAgICAgICAgIHRyeSB7Ci0gICAgCSAgICAgICAgICAgICAgICBpZih0cmFuSXNvbCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgewotICAgIAkgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbCk7Ci0gICAgCSAgICAgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCi0gICAgCSAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICAgICAgICAgIH0KLSAgICAJICAgICAgICB9Ci0gICAgCSAgICB9Ci0gICAgCX0KKworICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKKyAgICAgICAgaWYoY29uID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOworICAgICAgICBpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICBTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CisKKyAgICAgICAgICAgIGlmKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsICE9IG51bGwgJiYgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwuZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgICAgIGJvb2xlYW4gZ3VhcmFudGVlID0gKG5ldyBCb29sZWFuKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLnRvTG93ZXJDYXNlKCkpKS5ib29sZWFuVmFsdWUoKTsKKworICAgICAgICAgICAgICAgIGlmKGd1YXJhbnRlZSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYodHJhbklzb2xhdGlvbkludCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0cmFuSXNvbCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBpbnRlZ2VyIGVxdWl2YWxlbnQgb2YgdGhlIHN0cmluZyBzcGVjaWZ5aW5nCiAgICAgICogdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQl0cmFuSXNvbGF0aW9uCXN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24gbGV2ZWwKLSAgICAgKiBAcmV0dXJuCXRyYW5Jc29sYXRpb25JbnQJdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGNvbnN0YW50Ci0gICAgICoJCQkJCWZvciB0aGUgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbi4KKyAgICAgKiBAcGFyYW0gICAgdHJhbklzb2xhdGlvbiAgICBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uIGxldmVsCisgICAgICogQHJldHVybiAgICB0cmFuSXNvbGF0aW9uSW50ICAgIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBjb25zdGFudAorICAgICAqICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24uCiAgICAgICovCiAgICAgcHJpdmF0ZSBpbnQgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQoU3RyaW5nIHRyYW5Jc29sYXRpb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC11bmNvbW1pdHRlZCIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX1VOQ09NTUlUVEVEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLWNvbW1pdHRlZCIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX0NPTU1JVFRFRDsKLSAgICAJfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVwZWF0YWJsZS1yZWFkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFUEVBVEFCTEVfUkVBRDsKLSAgICAJfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgic2VyaWFsaXphYmxlIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1NFUklBTElaQUJMRTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiSW52YWxpZCB0cmFuc2FjdGlvbiBpc29sYXRpb247IHRoZSB0cmFuc2FjdGlvbiAiCi0gICAgCSAgICAgICAgKyAiaXNvbGF0aW9uIGxldmVsIGNhbiBiZSBlbXB0eSBvciBhbnkgb2YgdGhlIGZvbGxvd2luZzogIgotICAgIAkgICAgICAgICAgICArICJyZWFkLXVuY29tbWl0dGVkLCByZWFkLWNvbW1pdHRlZCwgcmVwZWF0YWJsZS1yZWFkLCBzZXJpYWxpemFibGUiKTsKLSAgICAJfQorICAgICAgICBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtdW5jb21taXR0ZWQiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9VTkNPTU1JVFRFRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC1jb21taXR0ZWQiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9DT01NSVRURUQ7CisgICAgICAgIH0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlcGVhdGFibGUtcmVhZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRVBFQVRBQkxFX1JFQUQ7CisgICAgICAgIH0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInNlcmlhbGl6YWJsZSIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9TRVJJQUxJWkFCTEU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkludmFsaWQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uOyB0aGUgdHJhbnNhY3Rpb24gIgorICAgICAgICAgICAgICAgICsgImlzb2xhdGlvbiBsZXZlbCBjYW4gYmUgZW1wdHkgb3IgYW55IG9mIHRoZSBmb2xsb3dpbmc6ICIKKyAgICAgICAgICAgICAgICAgICAgKyAicmVhZC11bmNvbW1pdHRlZCwgcmVhZC1jb21taXR0ZWQsIHJlcGVhdGFibGUtcmVhZCwgc2VyaWFsaXphYmxlIik7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlvdXQJPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dXcml0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG91dCAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dXcml0ZXIoamF2YS5pby5QcmludFdyaXRlciBvdXQpIHsKICAgICAgICAgbG9nV3JpdGVyID0gb3V0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgYXNzb2NpYXRlZCA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IEphdmFCZWFuLgogICAgICAqCi0gICAgICogQHBhcmFtCXJhCTxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHNlZQk8Y29kZT5nZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJhICAgIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJlc291cmNlQWRhcHRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUFkYXB0ZXIoamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHJhKSB7Ci0gICAgICAgIHRoaXMucmEgPSByYTsgICAKKyAgICAgICAgdGhpcy5yYSA9IHJhOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRVc2VyKFN0cmluZyB1c2VyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FLCB1c2VyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEByZXR1cm4JdXNlcgorICAgICAqIEByZXR1cm4gICAgdXNlcgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dXNlcihTdHJpbmcgdXNlcikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSwgdXNlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXVzZXIKKyAgICAgKiBAcmV0dXJuICAgIHVzZXIKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHVzZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEBwYXJhbQlwYXNzd2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwYXNzd2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFBhc3N3b3JkKFN0cmluZyBwYXNzd2QpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQsIHBhc3N3ZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEByZXR1cm4JcGFzc3dkCisgICAgICogQHJldHVybiAgICBwYXNzd2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcGFzc3dkCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcGFzc3dkICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRwYXNzd29yZChTdHJpbmcgcGFzc3dkKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JELCBwYXNzd2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBhc3N3ZAorICAgICAqIEByZXR1cm4gICAgcGFzc3dkCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRwYXNzd29yZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHBhcmFtCWNsYXNzTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNsYXNzTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q2xhc3NOYW1lKFN0cmluZyBjbGFzc05hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FLCBjbGFzc05hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNsYXNzTmFtZQorICAgICAqIEByZXR1cm4gICAgY2xhc3NOYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDbGFzc05hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2xhc3NOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY2xhc3NOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRjbGFzc05hbWUoU3RyaW5nIGNsYXNzTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUsIGNsYXNzTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEByZXR1cm4JY2xhc3NOYW1lCisgICAgICogQHJldHVybiAgICBjbGFzc05hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGNsYXNzTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29uVmxkUmVxCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY29uVmxkUmVxICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKFN0cmluZyBjb25WbGRSZXEpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCwgY29uVmxkUmVxKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEByZXR1cm4JY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CisgICAgICogQHJldHVybiAgICBjb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEBwYXJhbQljb25WbGRSZXEJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjb25WbGRSZXEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoU3RyaW5nIGNvblZsZFJlcSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVELCBjb25WbGRSZXEpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHJldHVybgljb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Y29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHZhbGlkYXRpb24gbWV0aG9kIHJlcXVpcmVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsaWRhdGlvbk1ldGhvZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHZhbGlkYXRpb25NZXRob2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25NZXRob2QoU3RyaW5nIHZhbGlkYXRpb25NZXRob2QpIHsKICAgICAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QsIHZhbGlkYXRpb25NZXRob2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBtZXRob2QgdHlwZQogICAgICAqCi0gICAgICogQHJldHVybgl2YWxpZGF0aW9uIG1ldGhvZAorICAgICAqIEByZXR1cm4gICAgdmFsaWRhdGlvbiBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbGlkYXRpb25NZXRob2QoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB2YWxpZGF0aW9uIG1ldGhvZCByZXF1aXJlZAogICAgICAqCi0gICAgICogQHBhcmFtCXZhbGlkYXRpb25NZXRob2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB2YWxpZGF0aW9uTWV0aG9kICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR2YWxpZGF0aW9uTWV0aG9kKFN0cmluZyB2YWxpZGF0aW9uTWV0aG9kKSB7CiAgICAgICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9ELCB2YWxpZGF0aW9uTWV0aG9kKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBjb25uZWN0aW9uIHZhbGlkYXRpb24gbWV0aG9kIHR5cGUKICAgICAgKgotICAgICAqIEByZXR1cm4JdmFsaWRhdGlvbiBtZXRob2QKKyAgICAgKiBAcmV0dXJuICAgIHZhbGlkYXRpb24gbWV0aG9kCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR2YWxpZGF0aW9uTWV0aG9kKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEBwYXJhbQl0YWJsZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRhYmxlICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRWYWxpZGF0aW9uVGFibGVOYW1lKFN0cmluZyB0YWJsZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FLCB0YWJsZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JdGFibGUKKyAgICAgKiBAcmV0dXJuICAgIHRhYmxlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRWYWxpZGF0aW9uVGFibGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEBwYXJhbQl0YWJsZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRhYmxlICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR2YWxpZGF0aW9uVGFibGVOYW1lKFN0cmluZyB0YWJsZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FLCB0YWJsZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JdGFibGUKKyAgICAgKiBAcmV0dXJuICAgIHRhYmxlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR2YWxpZGF0aW9uVGFibGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHJuSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdHJuSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2FjdGlvbklzb2xhdGlvbihTdHJpbmcgdHJuSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OLCB0cm5Jc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybgl0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHJuSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdHJuSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR0cmFuc2FjdGlvbklzb2xhdGlvbihTdHJpbmcgdHJuSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OLCB0cm5Jc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybgl0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dHJhbnNhY3Rpb25Jc29sYXRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQKICAgICAgKgotICAgICAqIEBwYXJhbQlndWFyYW50ZWVJc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBndWFyYW50ZWVJc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKFN0cmluZyBndWFyYW50ZWVJc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwsIGd1YXJhbnRlZUlzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKKyAgICAgKiBAcmV0dXJuICAgIGlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZ3VhcmFudGVlSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZ3VhcmFudGVlSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRndWFyYW50ZWVJc29sYXRpb25MZXZlbChTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMLCBndWFyYW50ZWVJc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybglpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCisgICAgICogQHJldHVybiAgICBpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRndWFyYW50ZWVJc29sYXRpb25MZXZlbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQppbmRleCBlNjAzMzhmLi5jNWFkYTQ2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhCkBAIC0yNiw4ICsyNiw4IEBACiAvKioKICAqIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wNQotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDUKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBSZXNvdXJjZUFkYXB0ZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgewogcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkVSU0lPTiA9IDI7CkBAIC0zNywzOSArMzcsMzkgQEAKICAgICAgKiBFbXB0eSBtZXRob2QgaW1wbGVtZW50YXRpb24gZm9yIGVuZHBvaW50QWN0aXZhdGlvbgogICAgICAqIHdoaWNoIGp1c3QgdGhyb3dzIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltZWYJPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KLSAgICAgKiBAcGFyYW0JYXMJPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+Ci0gICAgICogQHRocm93cwk8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1lZiAgICA8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBhcyAgICA8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmRwb2ludEFjdGl2YXRpb24oTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBtZWYsIEFjdGl2YXRpb25TcGVjIGFzKSB0aHJvd3MgTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiVGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBKREJDIGNvbm5lY3RvciIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZW5kcG9pbnREZWFjdGl2YXRpb24KICAgICAgKgotICAgICAqIEBwYXJhbQltZWYJPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KLSAgICAgKiBAcGFyYW0JYXMJPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1lZiAgICA8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBhcyAgICA8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmRwb2ludERlYWN0aXZhdGlvbihNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IG1lZiwgQWN0aXZhdGlvblNwZWMgYXMpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBtZXRob2QgaW1wbGVtZW50YXRpb24gZm9yIGdldFhBUmVzb3VyY2VzCiAgICAgICogd2hpY2gganVzdCB0aHJvd3MgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCXNwZWNzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPiBhcnJheQotICAgICAqIEB0aHJvd3MJPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzcGVjcyAgICA8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4gYXJyYXkKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpIHRocm93cyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJUaGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIEpEQkMgY29ubmVjdG9yIik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgaW1wbGVtZW50YXRpb24gb2Ygc3RhcnQgbWV0aG9kCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY3R4CTxjb2RlPkJvb3RzdHJhcENvbnRleHQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGN0eCAgICA8Y29kZT5Cb290c3RyYXBDb250ZXh0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KEJvb3RzdHJhcENvbnRleHQgY3R4KSB0aHJvd3MgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24gewogLyoKQEAgLTc3LDE2ICs3NywxNiBAQAogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzb3VyY2UgQWRhcHRlciBpcyBzdGFydGluZyB3aXRoIGNvbmZpZ3VyYXRpb24gOiIgKyByYVByb3ApOwogICAgICAgICBpZiAocmFQcm9wID09IG51bGwgfHwgIXJhUHJvcC5lcXVhbHMoIlZBTElEIikpIHsKLQkgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJSZXNvdXJjZSBhZGFwdGVyIGNhbm5vdCBzdGFydC4gSXQgaXMgY29uZmlndXJlZCBhcyA6ICIgKyByYVByb3ApOwotCX0gCisgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiUmVzb3VyY2UgYWRhcHRlciBjYW5ub3Qgc3RhcnQuIEl0IGlzIGNvbmZpZ3VyZWQgYXMgOiAiICsgcmFQcm9wKTsKKyAgICB9CiAqLwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IGltcGxlbWVudGF0aW9uIG9mIHN0b3AgbWV0aG9kCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RvcCgpIHsKLSAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFJBUHJvcGVydHkoU3RyaW5nIHMpIHsKQEAgLTk2LDUgKzk2LDUgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFJBUHJvcGVydHkoKSB7CiAgICAgICAgIHJldHVybiByYVByb3A7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbAppbmRleCA1ZTE0ZDQ0Li5mZjBmMDJiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9IiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvc3BpIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTI5LDU1ICsyOSw1NSBAQAogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxNCI+Ci0gICAgCQotICAgIAk8bWtkaXIgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiLz4KLSAgICAJCi0JPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiIGJhc2VkaXI9IiR7Y2xhc3MuZGlyfSIKKworICAgICAgICA8bWtkaXIgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiLz4KKworICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCiAgICAgICAgIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosIGNvbS9zdW4vZ2pjL3V0aWwvKiovKiwgY29tL3N1bi9namMvY29tbW9uLyoqLyoiIGV4Y2x1ZGVzPSJjb20vc3VuL2dqYy9jY2kvKiovKixjb20vc3VuL2dqYy9zcGkvMS40LyoqLyoiLz4KLSAgICAgICAgCisKICAgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWNwLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1jcC54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEteGEueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS14YS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZG0ueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kbS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZHMueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kcy54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8ZGVsZXRlIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9jb20iLz4KLSAgIAk8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIvPgotICAgCTxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIvPgotICAgCQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8ZGVsZXRlIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9jb20iLz4KKyAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIvPgorICAgICAgIDxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIvPgorCiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTMiLz4KLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDE0LCBidWlsZDEzIi8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxNCwgYnVpbGQxMyIvPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwKaW5kZXggNjBlMWU0ZS4uNjVlOGZiNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sCkBAIC0yMiw2OSArMjIsNjkgQEAKICAgICAgICAgICAgdmVyc2lvbj0iMS41Ij4KIAogICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KLSAgICA8IS0tIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEgCisgICAgPCEtLSBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhCiAgICAgICAgICBkZXNjcmlwdGlvbiBmb3IgdGhlIHJlc291cmNlIGFkYXB0ZXIuCiAgICAgLS0+CiAgICAgPGRlc2NyaXB0aW9uPlJlc291cmNlIGFkYXB0ZXIgd3JhcHBpbmcgRGF0YXNvdXJjZSBpbXBsZW1lbnRhdGlvbiBvZiBkcml2ZXI8L2Rlc2NyaXB0aW9uPgotICAgIAorCiAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGlzcGxheS1uYW1lIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KLSAgICA8IS0tIFRoZSBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYSBuYW1lIHRoYXQgCisgICAgPCEtLSBUaGUgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEgbmFtZSB0aGF0CiAgICAgICAgICBpcyBpbnRlbmRlZCB0byBiZSBkaXNwbGF5ZWQgYnkgdG9vbHMuCiAgICAgLS0+CiAgICAgPGRpc3BsYXktbmFtZT5EYXRhU291cmNlIFJlc291cmNlIEFkYXB0ZXI8L2Rpc3BsYXktbmFtZT4KLSAgICAKKwogICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImljb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgogICAgIDwhLS0gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICA8aWNvbj4KLSAgICAgICAgICAgIFRoaXMgInNtYWxsLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSAKLSAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMTYgeCAxNikgCisgICAgICAgICAgICBUaGlzICJzbWFsbC1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUKKyAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMTYgeCAxNikKICAgICAgICAgICAgIGljb24gLSBKUEVHIG9yIEdJRiBpbWFnZS4gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICAgICAgPHNtYWxsLWljb24+c21hbGxpY29uLmpwZzwvc21hbGwtaWNvbj4KLSAgICAgICAgCi0gICAgICAgICAgICBUaGlzICJsYXJnZS1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgCi0gICAgICAgICAgICBhYnNvbHV0ZSBvciB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgc21hbGwgKDMyIHggMzIpIAorCisgICAgICAgICAgICBUaGlzICJsYXJnZS1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUKKyAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMzIgeCAzMikKICAgICAgICAgICAgIGljb24gLSBKUEVHIG9yIEdJRiBpbWFnZS4gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgotICAgICAgICAgICAgPGxhcmdlLWljb24+bGFyZ2VpY29uLmpwZzwvbGFyZ2UtaWNvbj4gICAKKyAgICAgICAgICAgIDxsYXJnZS1pY29uPmxhcmdlaWNvbi5qcGc8L2xhcmdlLWljb24+CiAgICAgICAgIDwvaWNvbj4KICAgICAtLT4KICAgICA8aWNvbj4KICAgICAgICAgPHNtYWxsLWljb24+PC9zbWFsbC1pY29uPgotICAgICAgICA8bGFyZ2UtaWNvbj48L2xhcmdlLWljb24+ICAgCisgICAgICAgIDxsYXJnZS1pY29uPjwvbGFyZ2UtaWNvbj4KICAgICA8L2ljb24+Ci0gICAgCisKICAgICA8IS0tIFRoZSAidmVuZG9yLW5hbWUiIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGV4YWN0bHkgb25jZS4gLS0+CiAgICAgPCEtLSBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBkcml2ZXIgdmVuZG9yLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDx2ZW5kb3ItbmFtZT5YWVogSU5DLjwvdmVuZG9yLW5hbWU+CiAgICAgLS0+CiAgICAgPHZlbmRvci1uYW1lPlN1biBNaWNyb3N5c3RlbXM8L3ZlbmRvci1uYW1lPgotICAgIAorCiAgICAgPCEtLSBUaGUgImVpcy10eXBlIiBlbGVtZW50IHNob3VsZCBvY2N1ciBleGFjdGx5IG9uY2UuIC0tPgotICAgIDwhLS0gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgZGF0YWJhc2UsIGZvciBleGFtcGxlIHRoZSBwcm9kdWN0IG5hbWUgb2YgCisgICAgPCEtLSBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSBkYXRhYmFzZSwgZm9yIGV4YW1wbGUgdGhlIHByb2R1Y3QgbmFtZSBvZgogICAgICAgICAgdGhlIGRhdGFiYXNlIGluZGVwZW5kZW50IG9mIGFueSB2ZXJzaW9uIGluZm9ybWF0aW9uLiBUaGUgZm9sbG93aW5nCiAgICAgICAgICBpcyBhbiBleGFtcGxlLgogICAgICAgICA8ZWlzLXR5cGU+WFlaPC9laXMtdHlwZT4KICAgICAtLT4KICAgICA8ZWlzLXR5cGU+RGF0YWJhc2U8L2Vpcy10eXBlPgotICAgIAorCiAgICAgPCEtLSBUaGUgInJlc291cmNlYWRhcHRlci12ZXJzaW9uIiBlbGVtZW50IHNob3VsZCBvY2N1ciBleGFjdGx5IG9uY2UuIC0tPgotICAgIDwhLS0gVGhpcyBzcGVjaWZpZXMgYSBzdHJpbmcgYmFzZWQgdmVyc2lvbiBvZiB0aGUgcmVzb3VyY2UgYWRhcHRlciBmcm9tIAorICAgIDwhLS0gVGhpcyBzcGVjaWZpZXMgYSBzdHJpbmcgYmFzZWQgdmVyc2lvbiBvZiB0aGUgcmVzb3VyY2UgYWRhcHRlciBmcm9tCiAgICAgICAgICB0aGUgZHJpdmVyIHZlbmRvci4gVGhlIGRlZmF1bHQgaXMgYmVpbmcgc2V0IGFzIDEuMC4gVGhlIGRyaXZlcgogICAgICAgICAgdmVuZG9yIGNhbiBjaGFuZ2UgaXQgYXMgcmVxdWlyZWQuCiAgICAgLS0+CiAgICAgPHJlc291cmNlYWRhcHRlci12ZXJzaW9uPjEuMDwvcmVzb3VyY2VhZGFwdGVyLXZlcnNpb24+Ci0gICAgCisKICAgICA8IS0tIFRoaXMgImxpY2Vuc2UiIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlIC0tPgogICAgIDwhLS0gVGhpcyBzcGVjaWZpZXMgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBmb3IgdGhlIHJlc291cmNlIGFkYXB0ZXIgbW9kdWxlLgogICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICA8bGljZW5zZT4KICAgICAgICAgICAgIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAuCiAgICAgICAgICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIAotICAgICAgICAgICAgICAgIHByb3ZpZGUgYSBkZXNjcmlwdGlvbiBmb3IgdGhlIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgb2YgdGhlIAotICAgICAgICAgICAgICAgIHJlc291cmNlIGFkYXB0ZXIgbGlrZSBkdXJhdGlvbiBvZiBsaWNlbnNlLCBudW1iZXJvZiBjb25uZWN0aW9uIAorICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0bworICAgICAgICAgICAgICAgIHByb3ZpZGUgYSBkZXNjcmlwdGlvbiBmb3IgdGhlIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgb2YgdGhlCisgICAgICAgICAgICAgICAgcmVzb3VyY2UgYWRhcHRlciBsaWtlIGR1cmF0aW9uIG9mIGxpY2Vuc2UsIG51bWJlcm9mIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICByZXN0cmljdGlvbnMuCiAgICAgICAgICAgICA8L2Rlc2NyaXB0aW9uPgotICAgICAgICAKKwogICAgICAgICAgICAgVGhpcyBzcGVjaWZpZXMgd2hldGhlciBhIGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gZGVwbG95IGFuZCB1c2UgdGhlIHJlc291cmNlIGFkYXB0ZXIuCiAgICAgICAgICAgICBEZWZhdWx0IGlzIGZhbHNlLgogICAgICAgICAgICAgPGxpY2Vuc2UtcmVxdWlyZWQ+ZmFsc2U8L2xpY2Vuc2UtcmVxdWlyZWQ+CkBAIC05MywyNCArOTMsMjQgQEAKICAgICA8bGljZW5zZT4KICAgICAgICAgPGxpY2Vuc2UtcmVxdWlyZWQ+ZmFsc2U8L2xpY2Vuc2UtcmVxdWlyZWQ+CiAgICAgPC9saWNlbnNlPgotICAgIAorCiAgICAgPHJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgCi0gICAgICAgIDwhLS0gCi0gICAgICAgICAgICBUaGUgImNvbmZpZy1wcm9wZXJ0eSIgZWxlbWVudHMgY2FuIGhhdmUgemVybyBvciBtb3JlICJkZXNjcmlwdGlvbiIgCisKKyAgICAgICAgPCEtLQorICAgICAgICAgICAgVGhlICJjb25maWctcHJvcGVydHkiIGVsZW1lbnRzIGNhbiBoYXZlIHplcm8gb3IgbW9yZSAiZGVzY3JpcHRpb24iCiAgICAgICAgICAgICBlbGVtZW50cy4gVGhlICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgYXJlIG5vdCBiZWluZyBpbmNsdWRlZAogICAgICAgICAgICAgaW4gdGhlICJjb25maWctcHJvcGVydHkiIGVsZW1lbnRzIGJlbG93LiBUaGUgZHJpdmVyIHZlbmRvciBjYW4KICAgICAgICAgICAgIGFkZCB0aGVtIGFzIHJlcXVpcmVkLgogICAgICAgICAtLT4KLSAgICAgICAgCisKICAgICAgICAgPHJlc291cmNlYWRhcHRlci1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuUmVzb3VyY2VBZGFwdGVyPC9yZXNvdXJjZWFkYXB0ZXItY2xhc3M+Ci0gICAgICAgIAorCiAgICAgICAgIDxvdXRib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgIAorCiAgICAgICAgICAgICA8Y29ubmVjdGlvbi1kZWZpbml0aW9uPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPG1hbmFnZWRjb25uZWN0aW9uZmFjdG9yeS1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L21hbmFnZWRjb25uZWN0aW9uZmFjdG9yeS1jbGFzcz4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgdGhlc2UgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+CiAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlNlcnZlck5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgpAQCAtMTIyLDEzNiArMTIyLDEzNiBAQAogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+OTA5MjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Vc2VyPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPkRCVVNFUjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5QYXNzd29yZDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5EQlBBU1NXT1JEPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkRhdGFiYXNlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5qZGJjOnBvaW50YmFzZTpzZXJ2ZXI6Ly9sb2NhbGhvc3Q6OTA5Mi9zcWUtc2FtcGxlcyxuZXc8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RGF0YVNvdXJjZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkRlc2NyaXB0aW9uPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPk9yYWNsZSB0aGluIGRyaXZlciBEYXRhc291cmNlPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5OZXR3b3JrUHJvdG9jb2w8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlJvbGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Mb2dpblRpbWVPdXQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Ecml2ZXJQcm9wZXJ0aWVzPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5EZWxpbWl0ZXI8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+IzwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5DbGFzc05hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+Y29tLnBvaW50YmFzZS5qZGJjLmpkYmNEYXRhU291cmNlPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAJCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Q29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZDwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5mYWxzZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25NZXRob2Q8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VmFsaWRhdGlvblRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5UcmFuc2FjdGlvbklzb2xhdGlvbjwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5HdWFyYW50ZWVJc29sYXRpb25MZXZlbDwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Q29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5mYWxzZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VmFsaWRhdGlvbk1ldGhvZDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5UcmFuc2FjdGlvbklzb2xhdGlvbjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkd1YXJhbnRlZUlzb2xhdGlvbkxldmVsPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbmZhY3RvcnktaW50ZXJmYWNlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb25uZWN0aW9uZmFjdG9yeS1pbnRlcmZhY2U+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbmZhY3RvcnktaW1wbC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZTwvY29ubmVjdGlvbmZhY3RvcnktaW1wbC1jbGFzcz4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uLWludGVyZmFjZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb25uZWN0aW9uLWludGVyZmFjZT4KLSAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbi1pbXBsLWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyPC9jb25uZWN0aW9uLWltcGwtY2xhc3M+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIDwvY29ubmVjdGlvbi1kZWZpbml0aW9uPgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDx0cmFuc2FjdGlvbi1zdXBwb3J0PkxvY2FsVHJhbnNhY3Rpb248L3RyYW5zYWN0aW9uLXN1cHBvcnQ+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPGF1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbT4KICAgICAgICAgICAgICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+CiAgICAgICAgICAgICAgICAgPCEtLSBOb3QgaW5jbHVkaW5nIHRoZSAiZGVzY3JpcHRpb24iIGVsZW1lbnQgLS0+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8YXV0aGVudGljYXRpb24tbWVjaGFuaXNtLXR5cGU+QmFzaWNQYXNzd29yZDwvYXV0aGVudGljYXRpb24tbWVjaGFuaXNtLXR5cGU+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y3JlZGVudGlhbC1pbnRlcmZhY2U+amF2YXgucmVzb3VyY2Uuc3BpLnNlY3VyaXR5LlBhc3N3b3JkQ3JlZGVudGlhbDwvY3JlZGVudGlhbC1pbnRlcmZhY2U+CiAgICAgICAgICAgICA8L2F1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbT4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8cmVhdXRoZW50aWNhdGlvbi1zdXBwb3J0PmZhbHNlPC9yZWF1dGhlbnRpY2F0aW9uLXN1cHBvcnQ+Ci0gICAgICAgICAgICAKKwogICAgICAgICA8L291dGJvdW5kLXJlc291cmNlYWRhcHRlcj4KLQk8YWRtaW5vYmplY3Q+Ci0JICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluPC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+Ci0JICAgICAgIDxhZG1pbm9iamVjdC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW5JbXBsPC9hZG1pbm9iamVjdC1jbGFzcz4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+U2NoZW1hTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5KbmRpTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Ob09mUm93czwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLkludGVnZXI8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4wPC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgIDxhZG1pbm9iamVjdD4KKyAgICAgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW48L2FkbWlub2JqZWN0LWludGVyZmFjZT4KKyAgICAgICAgICAgPGFkbWlub2JqZWN0LWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbkltcGw8L2FkbWlub2JqZWN0LWNsYXNzPgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5TY2hlbWFOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkpuZGlOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPk5vT2ZSb3dzPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuSW50ZWdlcjwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAgICAgICAgIDwvYWRtaW5vYmplY3Q+Ci0gICAgICAgIAorCiAgICAgPC9yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgCisKIDwvY29ubmVjdG9yPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKaW5kZXggYjIxOWNkMi4uMTI0ODA5YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCkBAIC0yNCwyNiArMjQsMjYgQEAKIC8qKgogICogQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMQotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzEKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0aW9uTWFuYWdlciBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyeyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uTWFuYWdlciBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyewogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhIDxjb2RlPkNvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QgdG8gdGhlIDxjb2RlPkNvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0JaW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcmV0dXJuCUEgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvciBpbiBnZXR0aW5nIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gICAgbWNmICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBpbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgQSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBPYmplY3QuCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yIGluIGdldHRpbmcgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+LgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgYWxsb2NhdGVDb25uZWN0aW9uKE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsCi0gICAgCQkJCSAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8pIAotICAgIAkJCQkgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0JTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBtY2YuY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgaW5mbyk7Ci0JcmV0dXJuIG1jLmdldENvbm5lY3Rpb24obnVsbCwgaW5mbyk7ICAgIAkJCQkgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKQorICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CisgICAgTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBtY2YuY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgaW5mbyk7CisgICAgcmV0dXJuIG1jLmdldENvbm5lY3Rpb24obnVsbCwgaW5mbyk7CiAgICAgfQotICAgIAorCiAgICAgLyoKICAgICAgKiBUaGlzIGNsYXNzIGNvdWxkIGVmZmVjdGl2ZWx5IGltcGxlbWVudCBDb25uZWN0aW9uIHBvb2xpbmcgYWxzby4KICAgICAgKiBDb3VsZCBiZSBkb25lIGZvciBGQ1MuCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCmluZGV4IDM5Yzc4NzYuLmM0NzdmYzIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCkBAIC0xOSwxMCArMTksMTAgQEAKIC8qKgogICogQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZveyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm97CiAKICAgICBwcml2YXRlIFN0cmluZyB1c2VyOwogICAgIHByaXZhdGUgU3RyaW5nIHBhc3N3b3JkOwpAQCAtMzAsOCArMzAsOCBAQAogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCVVzZXIgTmFtZS4KLSAgICAgKiBAcGFyYW0JcGFzc3dvcmQJUGFzc3dvcmQKKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICBVc2VyIE5hbWUuCisgICAgICogQHBhcmFtICAgIHBhc3N3b3JkICAgIFBhc3N3b3JkCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyhTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkKSB7CiAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7CkBAIC00MSw3ICs0MSw3IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSB1c2VyIG5hbWUgb2YgdGhlIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKgotICAgICAqIEByZXR1cm4JVXNlciBuYW1lIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KKyAgICAgKiBAcmV0dXJuICAgIFVzZXIgbmFtZSBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyKCkgewogICAgICAgICByZXR1cm4gdXNlcjsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHBhc3N3b3JkIG9mIHRoZSBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVBhc3N3b3JkIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KKyAgICAgKiBAcmV0dXJuICAgIFBhc3N3b3JkIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gcGFzc3dvcmQ7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgLyoqCiAgICAgICogVmVyaWZ5IHdoZXRoZXIgdHdvIENvbm5lY3Rpb25SZXF1ZXN0SW5mb3MgYXJlIGVxdWFsLgogICAgICAqCi0gICAgICogQHJldHVybglUcnVlLCBpZiB0aGV5IGFyZSBlcXVhbCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqIEByZXR1cm4gICAgVHJ1ZSwgaWYgdGhleSBhcmUgZXF1YWwgYW5kIGZhbHNlIG90aGVyd2lzZS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewogICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTsKQEAgLTc1LDE4ICs3NSwxOCBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgaGFzaGNvZGUgb2YgdGhlIG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaENvZGUuCisgICAgICogQHJldHVybiAgICBoYXNoQ29kZS4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewogICAgICAgICBTdHJpbmcgcmVzdWx0ID0gIiIgKyB1c2VyICsgcGFzc3dvcmQ7CiAgICAgICAgIHJldHVybiByZXN1bHQuaGFzaENvZGUoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21wYXJlcyB0d28gb2JqZWN0cy4KICAgICAgKgotICAgICAqIEBwYXJhbQlvMQlGaXJzdCBvYmplY3QuCi0gICAgICogQHBhcmFtCW8yCVNlY29uZCBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG8xICAgIEZpcnN0IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgbzIgICAgU2Vjb25kIG9iamVjdC4KICAgICAgKi8KICAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbChPYmplY3QgbzEsIE9iamVjdCBvMikgewogICAgICAgICBpZiAobzEgPT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKaW5kZXggNDExYjczZi4uZDk4NzRhMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0zMSwzNiArMzEsMzYgQEAKIC8qKgogICogRGF0YSBTb3VyY2UgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMwCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMAorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogCiBwdWJsaWMgY2xhc3MgRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgZXh0ZW5kcyBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgewotICAgCisKICAgICBwcml2YXRlIHRyYW5zaWVudCBqYXZheC5zcWwuRGF0YVNvdXJjZSBkYXRhU291cmNlT2JqOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKICAgICB9CiAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnID0gZmFsc2U7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgbmV3IHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgRUlTIHJlc291cmNlCiAgICAgICogbWFuYWdlci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBwYXJhbQljeFJlcXVlc3RJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0Ci0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAk8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCi0gICAgICogICAgICAgCQkJCWNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0Ci0gICAgICogQHRocm93cwlTZWN1cml0eUV4Y2VwdGlvbglpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0IAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqCQkJCQkJcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gICAgY3hSZXF1ZXN0SW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAorICAgICAqIEB0aHJvd3MgICAgU2VjdXJpdHlFeGNlcHRpb24gICAgaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdCBzdWJqZWN0LAogICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKQEAgLTY4LDU1ICs2OCw1NSBAQAogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbiIpOwogICAgICAgICB9CiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYyA9IFNlY3VyaXR5VXRpbHMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKHRoaXMsIHN1YmplY3QsIGN4UmVxdWVzdEluZm8pOwotICAgICAgICAKKwogICAgICAgICBpZihkYXRhU291cmNlT2JqID09IG51bGwpIHsKICAgICAgICAgICAgIGlmKGRzT2JqQnVpbGRlciA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgZHNPYmpCdWlsZGVyID0gbmV3IERhdGFTb3VyY2VPYmplY3RCdWlsZGVyKHNwZWMpOwogICAgICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBkYXRhU291cmNlT2JqID0gKGphdmF4LnNxbC5EYXRhU291cmNlKSBkc09iakJ1aWxkZXIuY29uc3RydWN0RGF0YVNvdXJjZU9iamVjdCgpOwogICAgICAgICAgICAgfSBjYXRjaChDbGFzc0Nhc3RFeGNlcHRpb24gY2NlKSB7Ci0JICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jY2UiLCBjY2UpOworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY2NlIiwgY2NlKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5SZXNvdXJjZUV4Y2VwdGlvbihjY2UuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRzQ29ubiA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7Ci0JICAgIC8qIEZvciB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlci9wYXNzd2Qgb2YgdGhlIGNvbm5lY3Rpb24gcG9vbCBpcwotCSAgICAgKiBlcXVhbCB0byB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIGZvciB0aGUgY29ubmVjdGlvbiByZXF1ZXN0Ci0JICAgICAqIGdldCBhIGNvbm5lY3Rpb24gZnJvbSB0aGlzIHBvb2wgZGlyZWN0bHkuCi0JICAgICAqIGZvciBhbGwgb3RoZXIgY29uZGl0aW9ucyBnbyBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbgotCSAgICAgKi8KLQkgICAgaWYgKCBpc0VxdWFsKCBwYywgZ2V0VXNlcigpLCBnZXRQYXNzd29yZCgpICkgKSB7Ci0JICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24oKTsKLQkgICAgfSBlbHNlIHsKLQkgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbihwYy5nZXRVc2VyTmFtZSgpLCAKLQkJICAgIG5ldyBTdHJpbmcocGMuZ2V0UGFzc3dvcmQoKSkpOwotCSAgICB9CisgICAgICAgIC8qIEZvciB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlci9wYXNzd2Qgb2YgdGhlIGNvbm5lY3Rpb24gcG9vbCBpcworICAgICAgICAgKiBlcXVhbCB0byB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIGZvciB0aGUgY29ubmVjdGlvbiByZXF1ZXN0CisgICAgICAgICAqIGdldCBhIGNvbm5lY3Rpb24gZnJvbSB0aGlzIHBvb2wgZGlyZWN0bHkuCisgICAgICAgICAqIGZvciBhbGwgb3RoZXIgY29uZGl0aW9ucyBnbyBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBpc0VxdWFsKCBwYywgZ2V0VXNlcigpLCBnZXRQYXNzd29yZCgpICkgKSB7CisgICAgICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbihwYy5nZXRVc2VyTmFtZSgpLAorICAgICAgICAgICAgbmV3IFN0cmluZyhwYy5nZXRQYXNzd29yZCgpKSk7CisgICAgICAgIH0KICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfY3JlYXRlX2Nvbm4iLCBzcWxlKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQ6ICIgKyAKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2NyZWF0ZV9jb25uIiwgc3FsZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBjb3VsZCBub3QgYmUgYWxsb2NhdGVkOiAiICsKICAgICAgICAgICAgICAgICBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbihudWxsLCBkc0Nvbm4sIHBjLCB0aGlzKTsKICAgICAgICAgLy9HSkNJTlQKICAgICAgICAgc2V0SXNvbGF0aW9uKG1jKTsKICAgICAgICAgaXNWYWxpZChtYyk7CiAgICAgICAgIHJldHVybiBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8gCisgICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvCiAgICAgICogYW5vdGhlciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LgotICAgICAqIAotICAgICAqIEBwYXJhbQlvdGhlcgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZSAKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKLSAgICAgKgkJZmFsc2UJb3RoZXJ3aXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgb3RoZXIgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKKyAgICAgKiAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvdGhlcikgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTI3LDQwOSArMTI3LDQwOSBAQAogICAgICAgICAgKiBpZiBhbmQgb25seSBpZiB0aGVpciBwcm9wZXJ0aWVzIGFyZSB0aGUgc2FtZS4KICAgICAgICAgICovCiAgICAgICAgIGlmKG90aGVyIGluc3RhbmNlb2YgY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KSB7Ci0gICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnkgb3RoZXJNQ0YgPSAKKyAgICAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBvdGhlck1DRiA9CiAgICAgICAgICAgICAgICAgKGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSkgb3RoZXI7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5zcGVjLmVxdWFscyhvdGhlck1DRi5zcGVjKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2VydmVyTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzZXJ2ZXJOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0c2VydmVyTmFtZShTdHJpbmcgc2VydmVyTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FLCBzZXJ2ZXJOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jc2VydmVyTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHNlcnZlck5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRzZXJ2ZXJOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2VydmVyTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzZXJ2ZXJOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0U2VydmVyTmFtZShTdHJpbmcgc2VydmVyTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FLCBzZXJ2ZXJOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jc2VydmVyTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHNlcnZlck5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcG9ydE51bWJlcgk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwb3J0TnVtYmVyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0cG9ydE51bWJlcihTdHJpbmcgcG9ydE51bWJlcikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSLCBwb3J0TnVtYmVyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JcG9ydE51bWJlcgotICAgICAqIEBzZWUJPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHBvcnROdW1iZXIKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRwb3J0TnVtYmVyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcG9ydE51bWJlcgk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwb3J0TnVtYmVyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UG9ydE51bWJlcihTdHJpbmcgcG9ydE51bWJlcikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSLCBwb3J0TnVtYmVyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JcG9ydE51bWJlcgotICAgICAqIEBzZWUJPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHBvcnROdW1iZXIKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRQb3J0TnVtYmVyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkYXRhYmFzZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkYXRhYmFzZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRhdGFiYXNlTmFtZShTdHJpbmcgZGF0YWJhc2VOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSwgZGF0YWJhc2VOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkYXRhYmFzZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRhdGFiYXNlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZGF0YWJhc2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRhdGFiYXNlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRhdGFiYXNlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGF0YWJhc2VOYW1lKFN0cmluZyBkYXRhYmFzZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FLCBkYXRhYmFzZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRhdGFiYXNlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGF0YWJhc2VOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREYXRhYmFzZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGF0YVNvdXJjZU5hbWUoU3RyaW5nIGRzbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSwgZHNuKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkc24KLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHNuCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRhdGFTb3VyY2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGF0YVNvdXJjZU5hbWUoU3RyaW5nIGRzbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSwgZHNuKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkc24KLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHNuCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERhdGFTb3VyY2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlc2MJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlc2MgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGVzY3JpcHRpb24oU3RyaW5nIGRlc2MpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04sIGRlc2MpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglkZXNjCi0gICAgICogQHNlZQk8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlc2MKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZGVzY3JpcHRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGVzYwk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVzYyAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzYykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiwgZGVzYyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRlc2MKLSAgICAgKiBAc2VlCTxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVzYworICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHBhcmFtCW53UHJvdG9jb2wJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBud1Byb3RvY29sICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRuZXR3b3JrUHJvdG9jb2woU3RyaW5nIG53UHJvdG9jb2wpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MLCBud1Byb3RvY29sKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHJldHVybglud1Byb3RvY29sCi0gICAgICogQHNlZQk8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHJldHVybiAgICBud1Byb3RvY29sCisgICAgICogQHNlZSAgICA8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRuZXR3b3JrUHJvdG9jb2woKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbndQcm90b2NvbAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG53UHJvdG9jb2wgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldE5ldHdvcmtQcm90b2NvbChTdHJpbmcgbndQcm90b2NvbCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wsIG53UHJvdG9jb2wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCW53UHJvdG9jb2wKLSAgICAgKiBAc2VlCTxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIG53UHJvdG9jb2wKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldE5ldHdvcmtQcm90b2NvbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXJvbGVOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICByb2xlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRyb2xlTmFtZShTdHJpbmcgcm9sZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUsIHJvbGVOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXJvbGVOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHJvbGVOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHJvbGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlyb2xlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcm9sZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Um9sZU5hbWUoU3RyaW5nIHJvbGVOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FLCByb2xlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglyb2xlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICByb2xlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRSb2xlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKTsKICAgICB9CiAKLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lT3V0CTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lT3V0ICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRsb2dpblRpbWVPdXQoU3RyaW5nIGxvZ2luVGltZU91dCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQsIGxvZ2luVGltZU91dCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbG9naW5UaW1lb3V0Ci0gICAgICogQHNlZQk8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHJldHVybiAgICBsb2dpblRpbWVvdXQKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGxvZ2luVGltZU91dCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVPdXQJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBsb2dpblRpbWVPdXQgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ2luVGltZU91dChTdHJpbmcgbG9naW5UaW1lT3V0KSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCwgbG9naW5UaW1lT3V0KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHJldHVybglsb2dpblRpbWVvdXQKLSAgICAgKiBAc2VlCTxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGxvZ2luVGltZW91dAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TG9naW5UaW1lT3V0KCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZWxpbWl0ZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGVsaW0JPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZWxpbSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGVsaW1pdGVyKFN0cmluZyBkZWxpbSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIsIGRlbGltKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZWxpbWl0ZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRlbGltCi0gICAgICogQHNlZQk8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZWxpbQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZGVsaW1pdGVyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZWxpbWl0ZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGVsaW0JPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZWxpbSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVsaW1pdGVyKFN0cmluZyBkZWxpbSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIsIGRlbGltKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZWxpbWl0ZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRlbGltCi0gICAgICogQHNlZQk8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZWxpbQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVsaW1pdGVyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkcml2ZXIgc3BlY2lmaWMgcHJvcGVydGllcy4KICAgICAgKgotICAgICAqIEBwYXJhbQlkcml2ZXJQcm9wcwk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkcml2ZXJQcm9wcyAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRyaXZlclByb3BlcnRpZXMoU3RyaW5nIGRyaXZlclByb3BzKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMsIGRyaXZlclByb3BzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkcml2ZXIgc3BlY2lmaWMgcHJvcGVydGllcy4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHJpdmVyUHJvcHMKLSAgICAgKiBAc2VlCTxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkcml2ZXJQcm9wcworICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRyaXZlclByb3BlcnRpZXMoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkcml2ZXIgc3BlY2lmaWMgcHJvcGVydGllcy4KICAgICAgKgotICAgICAqIEBwYXJhbQlkcml2ZXJQcm9wcwk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkcml2ZXJQcm9wcyAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERyaXZlclByb3BlcnRpZXMoU3RyaW5nIGRyaXZlclByb3BzKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMsIGRyaXZlclByb3BzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkcml2ZXIgc3BlY2lmaWMgcHJvcGVydGllcy4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHJpdmVyUHJvcHMKLSAgICAgKiBAc2VlCTxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkcml2ZXJQcm9wcworICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERyaXZlclByb3BlcnRpZXMoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTKTsKQEAgLTUzOSwzNSArNTM5LDM1IEBACiAgICAgICogQ2hlY2sgaWYgdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBwYXNzZWQgZm9yIHRoaXMgZ2V0IGNvbm5lY3Rpb24KICAgICAgKiByZXF1ZXN0IGlzIGVxdWFsIHRvIHRoZSB1c2VyL3Bhc3N3ZCBvZiB0aGlzIGNvbm5lY3Rpb24gcG9vbC4KICAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbCggUGFzc3dvcmRDcmVkZW50aWFsIHBjLCBTdHJpbmcgdXNlciwgCisgICAgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoIFBhc3N3b3JkQ3JlZGVudGlhbCBwYywgU3RyaW5nIHVzZXIsCiAgICAgICAgIFN0cmluZyBwYXNzd29yZCkgewotICAgICAgICAKLQkvL2lmIGVxdWFsIGdldCBkaXJlY3QgY29ubmVjdGlvbiBlbHNlIAotCS8vZ2V0IGNvbm5lY3Rpb24gd2l0aCB1c2VyIGFuZCBwYXNzd29yZC4KLQkKLQlpZiAodXNlciA9PSBudWxsICYmIHBjID09IG51bGwpIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfQotCQotCWlmICggdXNlciA9PSBudWxsICYmIHBjICE9IG51bGwgKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0JfQogCi0JaWYoIHBjID09IG51bGwgKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0KLQkKLQlpZiAoIHVzZXIuZXF1YWxzKCBwYy5nZXRVc2VyTmFtZSgpICkgKSB7Ci0JICAgIGlmICggcGFzc3dvcmQgPT0gbnVsbCAmJiBwYy5nZXRQYXNzd29yZCgpID09IG51bGwgKSB7Ci0JICAgICAgICByZXR1cm4gdHJ1ZTsKLQkgICAgfQotCX0KLQkKLQlpZiAoIHVzZXIuZXF1YWxzKHBjLmdldFVzZXJOYW1lKCkpICYmIHBhc3N3b3JkLmVxdWFscyhwYy5nZXRQYXNzd29yZCgpKSApIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfSAKLQkKLSAgICAgICAgCi0JcmV0dXJuIGZhbHNlOworICAgIC8vaWYgZXF1YWwgZ2V0IGRpcmVjdCBjb25uZWN0aW9uIGVsc2UKKyAgICAvL2dldCBjb25uZWN0aW9uIHdpdGggdXNlciBhbmQgcGFzc3dvcmQuCisKKyAgICBpZiAodXNlciA9PSBudWxsICYmIHBjID09IG51bGwpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCB1c2VyID09IG51bGwgJiYgcGMgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiggcGMgPT0gbnVsbCApIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCB1c2VyLmVxdWFscyggcGMuZ2V0VXNlck5hbWUoKSApICkgeworICAgICAgICBpZiAoIHBhc3N3b3JkID09IG51bGwgJiYgcGMuZ2V0UGFzc3dvcmQoKSA9PSBudWxsICkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIHVzZXIuZXF1YWxzKHBjLmdldFVzZXJOYW1lKCkpICYmIHBhc3N3b3JkLmVxdWFscyhwYy5nZXRQYXNzd29yZCgpKSApIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisKKyAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCmluZGV4IDIwNjg0MzAuLjczOWZmNGQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKQEAgLTI4LDIyICsyOCwyMiBAQAogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKIC8qKgotICogSG9sZHMgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCwgd2hpY2ggaXMgdG8gYmUgCisgKiBIb2xkcyB0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LCB3aGljaCBpcyB0byBiZQogICogcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCiBwdWJsaWMgY2xhc3MgRGF0YVNvdXJjZSBpbXBsZW1lbnRzIGphdmF4LnNxbC5EYXRhU291cmNlLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSwKLQkJY29tLnN1bi5hcHBzZXJ2LmpkYmNyYS5EYXRhU291cmNlLCBqYWthcnRhLnJlc291cmNlLlJlZmVyZW5jZWFibGV7IAotCQkJCSAgIAorICAgICAgICBjb20uc3VuLmFwcHNlcnYuamRiY3JhLkRhdGFTb3VyY2UsIGpha2FydGEucmVzb3VyY2UuUmVmZXJlbmNlYWJsZXsKKwogICAgIHByaXZhdGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZjsKLSAgICBwcml2YXRlIENvbm5lY3Rpb25NYW5hZ2VyIGNtOwkJCQkgICAJCQkJICAgCisgICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsKICAgICBwcml2YXRlIGludCBsb2dpblRpbWVvdXQ7CiAgICAgcHJpdmF0ZSBQcmludFdyaXRlciBsb2dXcml0ZXI7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CQkJCSAgIAorICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwogICAgIHByaXZhdGUgUmVmZXJlbmNlIHJlZmVyZW5jZTsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC01MSw1NyArNTEsNTcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKIAogICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0LiBUaGlzIGlzIGNyZWF0ZWQgYnkgdGhlIAorICAgICAqIENvbnN0cnVjdHMgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0LiBUaGlzIGlzIGNyZWF0ZWQgYnkgdGhlCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IAotICAgICAqCQkJY3JlYXRpbmcgdGhpcyBvYmplY3QuCi0gICAgICogQHBhcmFtCWNtCTxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBvYmplY3QgZWl0aGVyIGFzc29jaWF0ZWQKLSAgICAgKgkJCXdpdGggQXBwbGljYXRpb24gc2VydmVyIG9yIFJlc291cmNlIEFkYXB0ZXIuCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgY3JlYXRpbmcgdGhpcyBvYmplY3QuCisgICAgICogQHBhcmFtICAgIGNtICAgIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBvYmplY3QgZWl0aGVyIGFzc29jaWF0ZWQKKyAgICAgKiAgICAgICAgICAgIHdpdGggQXBwbGljYXRpb24gc2VydmVyIG9yIFJlc291cmNlIEFkYXB0ZXIuCiAgICAgICovCiAgICAgcHVibGljIERhdGFTb3VyY2UgKE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsIENvbm5lY3Rpb25NYW5hZ2VyIGNtKSB7Ci0gICAgCXRoaXMubWNmID0gbWNmOwotICAgIAlpZiAoY20gPT0gbnVsbCkgewotICAgIAkgICAgdGhpcy5jbSA9IChDb25uZWN0aW9uTWFuYWdlcikgbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uTWFuYWdlcigpOwotICAgIAl9IGVsc2UgewotICAgIAkgICAgdGhpcy5jbSA9IGNtOwotICAgIAl9ICAgIAkKLSAgICB9ICAgCi0gICAgCisgICAgICAgIHRoaXMubWNmID0gbWNmOworICAgICAgICBpZiAoY20gPT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5jbSA9IChDb25uZWN0aW9uTWFuYWdlcikgbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uTWFuYWdlcigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5jbSA9IGNtOworICAgICAgICB9CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuCTxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuICAgICAgCisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbigpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAl0cnkgewotICAgIAkgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLG51bGwpOyAgICAJICAgIAotICAgIAl9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLG51bGwpOworICAgICAgICB9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewogLy8gVGhpcyBpcyB0ZW1wb3JhcnkuIFRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byBTRVZFUkUgYWZ0ZXIgVFAKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCX0KKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIAotICAgICAqIEBwYXJhbQl1c2VyCVVzZXIgbmFtZSBmb3IgdGhlIENvbm5lY3Rpb24uCi0gICAgICogQHBhcmFtCXB3ZAlQYXNzd29yZCBmb3IgdGhlIENvbm5lY3Rpb24uCi0gICAgICogQHJldHVybgk8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLiAgICAgIAorICAgICAqCisgICAgICogQHBhcmFtICAgIHVzZXIgICAgVXNlciBuYW1lIGZvciB0aGUgQ29ubmVjdGlvbi4KKyAgICAgKiBAcGFyYW0gICAgcHdkICAgIFBhc3N3b3JkIGZvciB0aGUgQ29ubmVjdGlvbi4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbihTdHJpbmcgdXNlciwgU3RyaW5nIHB3ZCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXRyeSB7Ci0gICAgCSAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbyA9IG5ldyBDb25uZWN0aW9uUmVxdWVzdEluZm8gKHVzZXIsIHB3ZCk7Ci0gICAgCSAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsaW5mbyk7Ci0gICAgCX0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbyA9IG5ldyBDb25uZWN0aW9uUmVxdWVzdEluZm8gKHVzZXIsIHB3ZCk7CisgICAgICAgICAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsaW5mbyk7CisgICAgICAgIH0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CiAvLyBUaGlzIGlzIHRlbXBvcmFyeS4gVGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIFNFVkVSRSBhZnRlciBUUAotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJfQotICAgIH0gICAgCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIKQEAgLTExNCw5MSArMTE0LDkxIEBACiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbihDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAKLSAgICAgICAgQ29ubmVjdGlvbiBkcml2ZXJDb24gPSBjb247IAorICAgICAgICBDb25uZWN0aW9uIGRyaXZlckNvbiA9IGNvbjsKICAgICAgICAgaWYgKGNvbiBpbnN0YW5jZW9mIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSB7Ci0gICAgICAgICAgIGRyaXZlckNvbiA9ICgoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIGNvbikuZ2V0Q29ubmVjdGlvbigpOyAKLSAgICAgICAgfSAKKyAgICAgICAgICAgZHJpdmVyQ29uID0gKChjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgY29uKS5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gZHJpdmVyQ29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9naW4gdGltZW91dAogICAgICAqCiAgICAgICogQHJldHVybiBsb2dpbiB0aW1lb3V0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0TG9naW5UaW1lb3V0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJcmV0dXJuCWxvZ2luVGltZW91dDsKKyAgICAgICAgcmV0dXJuICAgIGxvZ2luVGltZW91dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZ2luIHRpbWVvdXQKICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVvdXQJTG9naW4gdGltZW91dC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lb3V0ICAgIExvZ2luIHRpbWVvdXQuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9naW5UaW1lb3V0KGludCBsb2dpblRpbWVvdXQpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXRoaXMubG9naW5UaW1lb3V0ID0gbG9naW5UaW1lb3V0OworICAgICAgICB0aGlzLmxvZ2luVGltZW91dCA9IGxvZ2luVGltZW91dDsKICAgICB9Ci0gICAgCi0gICAgLyoqIAorCisgICAgLyoqCiAgICAgICogR2V0IHRoZSBsb2d3cml0ZXIgb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT4gUHJpbnRXcml0ZXIgPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIFByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXJldHVybglsb2dXcml0ZXI7CisgICAgICAgIHJldHVybiAgICBsb2dXcml0ZXI7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9nd3JpdGVyIG9uIHRoaXMgb2JqZWN0LgogICAgICAqCiAgICAgICogQHBhcmFtIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKFByaW50V3JpdGVyIGxvZ1dyaXRlcikgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7Ci0gICAgfSAgICAgICAgCi0gICAgICAgIAorICAgICAgICB0aGlzLmxvZ1dyaXRlciA9IGxvZ1dyaXRlcjsKKyAgICB9CisKICAgICBwdWJsaWMgTG9nZ2VyIGdldFBhcmVudExvZ2dlcigpIHRocm93cyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBmZWF0dXJlLiIpOwogICAgIH0KICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KKyAgICAgKiBAcmV0dXJuICAgIERlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7Ci0gICAgCXJldHVybiBkZXNjcmlwdGlvbjsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKICAgICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2NyaXB0aW9uKSB7Ci0gICAgCXRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgICB9ICAgIAotICAgIAorICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgfQorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSByZWZlcmVuY2UuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIDxjb2RlPlJlZmVyZW5jZTwvY29kZT5vYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIFJlZmVyZW5jZSBnZXRSZWZlcmVuY2UoKSB7Ci0gICAgCXJldHVybiByZWZlcmVuY2U7CisgICAgICAgIHJldHVybiByZWZlcmVuY2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSByZWZlcmVuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVmZXJlbmNlIDxjb2RlPlJlZmVyZW5jZTwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICByZWZlcmVuY2UgPGNvZGU+UmVmZXJlbmNlPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlKFJlZmVyZW5jZSByZWZlcmVuY2UpIHsKLSAgICAJdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7CisgICAgICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOwogICAgIH0KIAogICAgIHB1YmxpYyA8VD4gVCB1bndyYXAoQ2xhc3M8VD4gaWZhY2UpIHRocm93cyBTUUxFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKaW5kZXggYWUxNmI1MS4uODI0NTEwZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCkBAIC0xOCwxMyArMTgsMTMgQEAKIAogcHVibGljIGludGVyZmFjZSBKZGJjU2V0dXBBZG1pbiB7CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRUYWJsZU5hbWUoU3RyaW5nIGRiKTsgCisgICAgcHVibGljIHZvaWQgc2V0VGFibGVOYW1lKFN0cmluZyBkYik7CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRhYmxlTmFtZSgpOwogCi0gICAgcHVibGljIHZvaWQgc2V0Sm5kaU5hbWUoU3RyaW5nIG5hbWUpOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRKbmRpTmFtZShTdHJpbmcgbmFtZSk7CiAKLSAgICBwdWJsaWMgU3RyaW5nIGdldEpuZGlOYW1lKCk7IAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0Sm5kaU5hbWUoKTsKIAogICAgIHB1YmxpYyB2b2lkIHNldFNjaGVtYU5hbWUoU3RyaW5nIG5hbWUpOwogCkBAIC0zNCw4ICszNCw4IEBACiAKICAgICBwdWJsaWMgSW50ZWdlciBnZXROb09mUm93cygpOwogCi0gICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZXR1cCgpOyAKLSAgICAKKyAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCk7CisKICAgICBwdWJsaWMgaW50IGdldFZlcnNpb24oKTsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQppbmRleCAxYTllNWM2Li5jNzJkNzRjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQpAQCAtNjYsNjIgKzY2LDYyIEBACiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZXR1cCgpewogCiAgICAgICAgIGlmIChqbmRpTmFtZT09IG51bGwgfHwgam5kaU5hbWUudHJpbSgpLmVxdWFscygiIikpIHsKLQkgICByZXR1cm4gZmFsc2U7Ci0JfQorICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICAgICAgaWYgKHRhYmxlTmFtZT09IG51bGwgfHwgdGFibGVOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgcmV0dXJuIGZhbHNlOwotCX0KKyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKLQlTdGF0ZW1lbnQgcyA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzID0gbnVsbDsKLQlib29sZWFuIGIgPSBmYWxzZTsKKyAgICBTdGF0ZW1lbnQgcyA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzID0gbnVsbDsKKyAgICBib29sZWFuIGIgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKLQkgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoam5kaU5hbWUpOworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cChqbmRpTmFtZSk7CiAgICAgICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIFN0cmluZyBmdWxsVGFibGVOYW1lID0gdGFibGVOYW1lOwotCSAgICBpZiAoc2NoZW1hTmFtZSAhPSBudWxsICYmICghKHNjaGVtYU5hbWUudHJpbSgpLmVxdWFscygiIikpKSkgewotCSAgICAgICAgZnVsbFRhYmxlTmFtZSA9IHNjaGVtYU5hbWUudHJpbSgpICsgIi4iICsgZnVsbFRhYmxlTmFtZTsKLQkgICAgfQotCSAgICBTdHJpbmcgcXJ5ID0gInNlbGVjdCAqIGZyb20gIiArIGZ1bGxUYWJsZU5hbWU7IAorICAgICAgICBTdHJpbmcgZnVsbFRhYmxlTmFtZSA9IHRhYmxlTmFtZTsKKyAgICAgICAgaWYgKHNjaGVtYU5hbWUgIT0gbnVsbCAmJiAoIShzY2hlbWFOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSkpIHsKKyAgICAgICAgICAgIGZ1bGxUYWJsZU5hbWUgPSBzY2hlbWFOYW1lLnRyaW0oKSArICIuIiArIGZ1bGxUYWJsZU5hbWU7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHFyeSA9ICJzZWxlY3QgKiBmcm9tICIgKyBmdWxsVGFibGVOYW1lOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0aW5nIHF1ZXJ5IDoiICsgcXJ5KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRpbmcgcXVlcnkgOiIgKyBxcnkpOwogCi0JICAgIHMgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHJzID0gcy5leGVjdXRlUXVlcnkocXJ5KTsgCisgICAgICAgIHMgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHJzID0gcy5leGVjdXRlUXVlcnkocXJ5KTsKIAogICAgICAgICAgICAgaW50IGkgPSAwOwotCSAgICBpZiAocnMubmV4dCgpKSB7Ci0JICAgICAgICBpKys7Ci0JICAgIH0KKyAgICAgICAgaWYgKHJzLm5leHQoKSkgeworICAgICAgICAgICAgaSsrOworICAgICAgICB9CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gb2Ygcm93cyBmb3VuZDoiICsgaSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vIG9mIHJvd3MgZXhwZWN0ZWQ6IiArIG5vT2ZSb3dzKTsKIAotCSAgICBpZiAoaSA9PSBub09mUm93cy5pbnRWYWx1ZSgpKSB7Ci0JICAgICAgIGIgPSB0cnVlOwotCSAgICB9IGVsc2UgewotCSAgICAgICBiID0gZmFsc2U7Ci0JICAgIH0KLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIGIgPSBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICB0cnkgewotCSAgICAgICAgaWYgKHJzICE9IG51bGwpIHJzLmNsb3NlKCk7Ci0JICAgICAgICBpZiAocyAhPSBudWxsKSBzLmNsb3NlKCk7Ci0JICAgICAgICBpZiAoY29uICE9IG51bGwpIGNvbi5jbG9zZSgpOworICAgICAgICBpZiAoaSA9PSBub09mUm93cy5pbnRWYWx1ZSgpKSB7CisgICAgICAgICAgIGIgPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICBiID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIGIgPSBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKHJzICE9IG51bGwpIHJzLmNsb3NlKCk7CisgICAgICAgICAgICBpZiAocyAhPSBudWxsKSBzLmNsb3NlKCk7CisgICAgICAgICAgICBpZiAoY29uICE9IG51bGwpIGNvbi5jbG9zZSgpOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgfQotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIlJldHVybmluZyBzZXR1cCA6IiArYik7Ci0JcmV0dXJuIGI7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXR1cm5pbmcgc2V0dXAgOiIgK2IpOworICAgIHJldHVybiBiOworICAgIH0KKwogICAgIHB1YmxpYyBpbnQgZ2V0VmVyc2lvbigpewotCSAgICByZXR1cm4gUmVzb3VyY2VBZGFwdGVyLlZFUlNJT047CisgICAgICAgIHJldHVybiBSZXNvdXJjZUFkYXB0ZXIuVkVSU0lPTjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YQppbmRleCA4ZWJlMDU3Li5jNTRhMjE2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCkBAIC0yMyw0NSArMjMsNDUgQEAKIC8qKgogICogPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBMb2NhbFRyYW5zYWN0aW9uIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTG9jYWxUcmFuc2FjdGlvbiB7Ci0gICAgCisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+LgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCByZXR1cm5zCi0gICAgICoJCQl0aGlzIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IG9iamVjdCBhcwotICAgICAqCQkJYSByZXN1bHQgb2YgPGNvZGU+Z2V0TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgcmV0dXJucworICAgICAqICAgICAgICAgICAgdGhpcyA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBvYmplY3QgYXMKKyAgICAgKiAgICAgICAgICAgIGEgcmVzdWx0IG9mIDxjb2RlPmdldExvY2FsVHJhbnNhY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIExvY2FsVHJhbnNhY3Rpb24oTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEJlZ2luIGEgbG9jYWwgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGJlZ2luKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvblN0YXJ0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvblN0YXJ0ZWQoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKS5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IGEgbG9jYWwgdHJhbnNhY3Rpb24uCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbiBvciBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gb3IgY29tbWl0dGluZyB0aGUgdHJhbnNhY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBFeGNlcHRpb24gZSA9IG51bGw7CkBAIC03MiwxNSArNzIsMTUgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSb2xsYmFjayBhIGxvY2FsIHRyYW5zYWN0aW9uLgotICAgICAqIAotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24gb3Igcm9sbGluZyBiYWNrIHRoZSB0cmFuc2FjdGlvbgorICAgICAqCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBvciByb2xsaW5nIGJhY2sgdGhlIHRyYW5zYWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKaW5kZXggMzBmNDYwYS4uMmRhZDU5YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCkBAIC00MSw4ICs0MSw4IEBACiAvKioKICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIyCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMgorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gewogCkBAIC01Miw3ICs1Miw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gaXNEZXN0cm95ZWQgPSBmYWxzZTsKICAgICBwcml2YXRlIGJvb2xlYW4gaXNVc2FibGUgPSB0cnVlOwotICAgIAorCiAgICAgcHJpdmF0ZSBpbnQgY29ubmVjdGlvblR5cGUgPSBJU05PVEFQT09MRURDT05ORUNUSU9OOwogICAgIHByaXZhdGUgUG9vbGVkQ29ubmVjdGlvbiBwYyA9IG51bGw7CiAgICAgcHJpdmF0ZSBqYXZhLnNxbC5Db25uZWN0aW9uIGFjdHVhbENvbm5lY3Rpb24gPSBudWxsOwpAQCAtNjIsNyArNjIsNyBAQAogICAgIHByaXZhdGUgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiA9IG51bGw7CiAgICAgcHJpdmF0ZSBYQVJlc291cmNlIHhhciA9IG51bGw7CiAgICAgcHVibGljIENvbm5lY3Rpb25Ib2xkZXIgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZTsKLSAgICAKKwogICAgIC8vR0pDSU5UCiAgICAgcHJpdmF0ZSBpbnQgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZDsKICAgICBwcml2YXRlIGJvb2xlYW4gaXNDbGVhbiA9IGZhbHNlOwpAQCAtNzcsNzEgKzc3LDcxIEBACiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LiBUaGUgcG9vbGVkQ29ubiBwYXJhbWV0ZXIgaXMgZXhwZWN0ZWQKLSAgICAgKiB0byBiZSBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlciBpcyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gY2FzZSB3aGVyZSAKLSAgICAgKiB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaXMgZ290IGZyb20gYSBub24gcG9vbGVkIGRhdGFzb3VyY2Ugb2JqZWN0LiBUaGUgCisgICAgICogdG8gYmUgbnVsbCBhbmQgc3FsQ29ubiBwYXJhbWV0ZXIgaXMgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIGNhc2Ugd2hlcmUKKyAgICAgKiB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaXMgZ290IGZyb20gYSBub24gcG9vbGVkIGRhdGFzb3VyY2Ugb2JqZWN0LiBUaGUKICAgICAgKiBwb29sZWRDb25uIHBhcmFtZXRlciBpcyBleHBlY3RlZCB0byBiZSBub24gbnVsbCBhbmQgc3FsQ29ubiBwYXJhbWV0ZXIKICAgICAgKiBpcyBleHBlY3RlZCB0byBiZSBudWxsIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBkYXRhc291cmNlIG9iamVjdCBpcyBhCiAgICAgICogY29ubmVjdGlvbiBwb29sIGRhdGFzb3VyY2Ugb3IgYW4geGEgZGF0YXNvdXJjZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb29sZWRDb25uCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSAKLSAgICAgKgkJCQlwaHlzaWNhbCBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBwb29sZWQKLSAgICAgKgkJCQk8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsgbnVsbCBvdGhlcndpc2UKLSAgICAgKiBAcGFyYW0Jc3FsQ29ubgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCWNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIG5vbiBwb29sZWQgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47Ci0gICAgICoJCQludWxsIG90aGVyd2lzZQotICAgICAqIEBwYXJhbQlwYXNzd2RDcmVkCW9iamVjdCBjb25hdGluaW5nIHRoZQotICAgICAqCQkJCXVzZXIgYW5kIHBhc3N3b3JkIGZvciBhbGxvY2F0aW5nIHRoZSBjb25uZWN0aW9uCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKLSAgICAgKgkJCQkJdGhhdCBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqCQkJCQlpcyBub3QgdGhlIHNhbWUgYXMgcmV0dXJuZWQgYnkgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqCQkJCQlvYmplY3QgcGFzc2VkCisgICAgICogQHBhcmFtICAgIHBvb2xlZENvbm4gICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlCisgICAgICogICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgcG9vbGVkCisgICAgICogICAgICAgICAgICAgICAgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47IG51bGwgb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHNxbENvbm4gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBub24gcG9vbGVkIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OworICAgICAqICAgICAgICAgICAgbnVsbCBvdGhlcndpc2UKKyAgICAgKiBAcGFyYW0gICAgcGFzc3dkQ3JlZCAgICBvYmplY3QgY29uYXRpbmluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICB1c2VyIGFuZCBwYXNzd29yZCBmb3IgYWxsb2NhdGluZyB0aGUgY29ubmVjdGlvbgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgIHRoYXQgY3JlYXRlZCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgaXMgbm90IHRoZSBzYW1lIGFzIHJldHVybmVkIGJ5IDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb2JqZWN0IHBhc3NlZAogICAgICAqLwotICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbihQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4sIGphdmEuc3FsLkNvbm5lY3Rpb24gc3FsQ29ubiwgCisgICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubiwgamF2YS5zcWwuQ29ubmVjdGlvbiBzcWxDb25uLAogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGFzc3dkQ3JlZCwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYocG9vbGVkQ29ubiA9PSBudWxsICYmIHNxbENvbm4gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDb25uZWN0aW9uIG9iamVjdCBjYW5ub3QgYmUgbnVsbCIpOwogICAgICAgICB9CiAKLQlpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKLQkgICAgYWN0dWFsQ29ubmVjdGlvbiA9IHNxbENvbm47Ci0JfQorICAgIGlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgeworICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gc3FsQ29ubjsKKyAgICB9CiAKICAgICAgICAgcGMgPSBwb29sZWRDb25uOwogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG5ldyBIYXNodGFibGUoKTsKICAgICAgICAgcGFzc3dkQ3JlZGVudGlhbCA9IHBhc3N3ZENyZWQ7CiAgICAgICAgIHRoaXMubWNmID0gbWNmOwotICAgICAgICBpZihwYXNzd2RDcmVkZW50aWFsICE9IG51bGwgJiYgIAorICAgICAgICBpZihwYXNzd2RDcmVkZW50aWFsICE9IG51bGwgJiYKICAgICAgICAgICAgIHRoaXMubWNmLmVxdWFscyhwYXNzd2RDcmVkZW50aWFsLmdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpKSA9PSBmYWxzZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHRoYXQgaGFzIGNyZWF0ZWQgdGhpcyAiICsgCisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgdGhhdCBoYXMgY3JlYXRlZCB0aGlzICIgKwogICAgICAgICAgICAgICAgICJNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSByZXR1cm5lZCBieSIgKwogICAgICAgICAgICAgICAgICAgICAiIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgZm9yIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgICAgICBsb2dXcml0ZXIgPSBtY2YuZ2V0TG9nV3JpdGVyKCk7CiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotCWNlID0gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9DTE9TRUQpOworICAgIGNlID0gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9DTE9TRUQpOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIEFkZHMgYSBjb25uZWN0aW9uIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlsaXN0ZW5lcgk8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbGlzdGVuZXIgICAgPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICogQHNlZSA8Y29kZT5yZW1vdmVDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhZGRDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcihDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBsaXN0ZW5lcikgewotCXRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjsKKyAgICB0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVXNlZCBieSB0aGUgY29udGFpbmVyIHRvIGNoYW5nZSB0aGUgYXNzb2NpYXRpb24gb2YgYW4gYXBwbGljYXRpb24tbGV2ZWwgCisgICAgICogVXNlZCBieSB0aGUgY29udGFpbmVyIHRvIGNoYW5nZSB0aGUgYXNzb2NpYXRpb24gb2YgYW4gYXBwbGljYXRpb24tbGV2ZWwKICAgICAgKiBjb25uZWN0aW9uIGhhbmRsZSB3aXRoIGEgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWNvbm5lY3Rpb24JPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoCi0gICAgICoJCQkJdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUKLSAgICAgKgkJCQkJdmFsaWQgb3IgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIHBhc3NlZCBpcyBudWxsCisgICAgICogQHBhcmFtICAgIGNvbm5lY3Rpb24gICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoCisgICAgICogICAgICAgICAgICAgICAgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdmFsaWQgb3IgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIHBhc3NlZCBpcyBudWxsCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYXNzb2NpYXRlQ29ubmVjdGlvbihPYmplY3QgY29ubmVjdGlvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTE1MiwxMSArMTUyLDExIEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNvbm5lY3Rpb24gaGFuZGxlIGNhbm5vdCBiZSBudWxsIik7CiAgICAgICAgIH0KICAgICAgICAgQ29ubmVjdGlvbkhvbGRlciBjaCA9IChDb25uZWN0aW9uSG9sZGVyKSBjb25uZWN0aW9uOwotICAgICAgICAKKwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSAoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uKWNoLmdldE1hbmFnZWRDb25uZWN0aW9uKCk7Ci0JbWMuYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0JaXNDbGVhbiA9IGZhbHNlOwotICAgICAgICAKKyAgICBtYy5hY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKKyAgICBpc0NsZWFuID0gZmFsc2U7CisKICAgICAgICAgY2guYXNzb2NpYXRlQ29ubmVjdGlvbihhY3R1YWxDb25uZWN0aW9uLCB0aGlzKTsKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBleHBlY3RhdGlvbiBmcm9tIHRoZSBhYm92ZSBtZXRob2QgaXMgdGhhdCB0aGUgY29ubmVjdGlvbiBob2xkZXIKQEAgLTE2NSwzNCArMTY1LDM0IEBACiAgICAgICAgICAqIHRvIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZSB3aXRoIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2UuCiAgICAgICAgICAqIEFueSBwcmV2aW91cyBzdGF0ZW1lbnRzIGFuZCByZXN1bHQgc2V0cyBhbHNvIG5lZWQgdG8gYmUgcmVtb3ZlZC4KICAgICAgICAgICovCi0gICAgICAgICAKKwogICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlLnNldEFjdGl2ZShmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgY2guc2V0QWN0aXZlKHRydWUpOwotICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7IAorICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQXBwbGljYXRpb24gc2VydmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIGZvcmNlIGFueSBjbGVhbnVwIG9uIHRoZSAKKyAgICAgKiBBcHBsaWNhdGlvbiBzZXJ2ZXIgY2FsbHMgdGhpcyBtZXRob2QgdG8gZm9yY2UgYW55IGNsZWFudXAgb24gdGhlCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLiBUaGlzIG1ldGhvZCBjYWxscyB0aGUgaW52YWxpZGF0ZQogICAgICAqIG1ldGhvZCBvbiBhbGwgQ29ubmVjdGlvbkhhbmRsZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgotICAgICAqIAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZSB2YWxpZAorICAgICAqCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlIHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY2xlYW51cCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGNsZWFudXAiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgLyoqCiAgICAgICAgICAqIG1heSBuZWVkIHRvIHNldCB0aGUgYXV0b2NvbW1pdCB0byB0cnVlIGZvciB0aGUgbm9uLXBvb2xlZCBjYXNlLgogICAgICAgICAgKi8KICAgICAgICAgLy9HSkNJTlQKLQkvL2lmIChhY3R1YWxDb25uZWN0aW9uICE9IG51bGwpIHsKLQlpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKKyAgICAvL2lmIChhY3R1YWxDb25uZWN0aW9uICE9IG51bGwpIHsKKyAgICBpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQgPSBhY3R1YWxDb25uZWN0aW9uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKQEAgLTIwMSwxNyArMjAxLDE3IEBACiAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpc0NsZWFuID0gdHJ1ZTsKLSAgICAgICAgCisKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhbGwgdGhlIGNvbm5lY3Rpb24gaGFuZGxlcyBmcm9tIHRoZSB0YWJsZQogICAgICAqIG9mIGNvbm5lY3Rpb24gaGFuZGxlcyBhbmQgaW52YWxpZGF0ZXMgYWxsIG9mIHRoZW0gc28gdGhhdCBhbnkKICAgICAgKiBvcGVyYXRpb24gb24gdGhvc2UgY29ubmVjdGlvbiBoYW5kbGVzIHRocm93cyBhbiBleGNlcHRpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGEgcHJvYmxlbSBpbiByZXRyaWV2aW5nCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAl0aGUgY29ubmVjdGlvbiBoYW5kbGVzCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhIHByb2JsZW0gaW4gcmV0cmlldmluZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbm5lY3Rpb24gaGFuZGxlcwogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBpbnZhbGlkYXRlQWxsQ29ubmVjdGlvbkhhbmRsZXMoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBTZXQgaGFuZGxlcyA9IGNvbm5lY3Rpb25IYW5kbGVzLmtleVNldCgpOwpAQCAtMjI2LDIyICsyMjYsMjIgQEAKICAgICAgICAgfQogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcy5jbGVhcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIERlc3Ryb3lzIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIHJlc291cmNlIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjbG9zaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNsb3NpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGRlc3Ryb3kiKTsKICAgICAgICAgfQotCS8vR0pDSU5UCi0JaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSkgewotCSAgICByZXR1cm47CQotCX0KKyAgICAvL0dKQ0lOVAorICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotCWFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOworICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OKSB7CiAgICAgICAgICAgICAgICAgcGMuY2xvc2UoKTsKQEAgLTI1NSwyOCArMjU1LDI4IEBACiAgICAgICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7CiAgICAgICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gbnVsbDsKICAgICAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbnVsbDsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGZvbGxvd2luZyBleGNlcHRpb24gaGFzIG9jY3VyZWQgZHVyaW5nIGRlc3Ryb3k6ICIgCisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uIGhhcyBvY2N1cmVkIGR1cmluZyBkZXN0cm95OiAiCiAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlOwogICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gbnVsbDsKICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcgY29ubmVjdGlvbiBoYW5kbGUgZm9yIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIAorICAgICAqIENyZWF0ZXMgYSBuZXcgY29ubmVjdGlvbiBoYW5kbGUgZm9yIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsCiAgICAgICogY29ubmVjdGlvbiByZXByZXNlbnRlZCBieSB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIG5lZWRlZCBmb3IgYXV0aGVudGljYXRpb24KLSAgICAgKiBAcGFyYW0JY3hSZXFJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gY2FycmllcyB0aGUgdXNlciAKLSAgICAgKiAgICAgICAJICAgICAgICAgCWFuZCBwYXNzd29yZCByZXF1aXJlZCBmb3IgZ2V0dGluZyB0aGlzIGNvbm5lY3Rpb24uCi0gICAgICogQHJldHVybglDb25uZWN0aW9uCXRoZSBjb25uZWN0aW9uIGhhbmRsZSA8Y29kZT5PYmplY3Q8L2NvZGU+Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBoeXNpY2FsIGNvbm5lY3Rpb24gZnJvbSB0aGUgcG9vbGVkIGNvbm5lY3Rpb24gCi0gICAgICogQHRocm93cwlTZWN1cml0eUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlwYXNzd29yZCBjcmVkZW50aWFscyBvciByZWF1dGhlbnRpY2F0aW9uIGlzIHJlcXVlc3RlZAorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IHBhcmFtZXRlciBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uCisgICAgICogQHBhcmFtICAgIGN4UmVxSW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGNhcnJpZXMgdGhlIHVzZXIKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBwYXNzd29yZCByZXF1aXJlZCBmb3IgZ2V0dGluZyB0aGlzIGNvbm5lY3Rpb24uCisgICAgICogQHJldHVybiAgICBDb25uZWN0aW9uICAgIHRoZSBjb25uZWN0aW9uIGhhbmRsZSA8Y29kZT5PYmplY3Q8L2NvZGU+CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sZWQgY29ubmVjdGlvbgorICAgICAqIEB0aHJvd3MgICAgU2VjdXJpdHlFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQgY3JlZGVudGlhbHMgb3IgcmVhdXRoZW50aWNhdGlvbiBpcyByZXF1ZXN0ZWQKICAgICAgKi8KLSAgICBwdWJsaWMgT2JqZWN0IGdldENvbm5lY3Rpb24oU3ViamVjdCBzdWIsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcUluZm8pIAorICAgIHB1YmxpYyBPYmplY3QgZ2V0Q29ubmVjdGlvbihTdWJqZWN0IHN1YiwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxSW5mbykKICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRDb25uZWN0aW9uIik7CkBAIC0yODQsMTQgKzI4NCwxNCBAQAogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvID0gKGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8pIGN4UmVxSW5mbzsKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3N3ZENyZWQgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLm1jZiwgc3ViLCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIGlmKFNlY3VyaXR5VXRpbHMuaXNQYXNzd29yZENyZWRlbnRpYWxFcXVhbCh0aGlzLnBhc3N3ZENyZWRlbnRpYWwsIHBhc3N3ZENyZWQpID09IGZhbHNlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5zcGkuU2VjdXJpdHlFeGNlcHRpb24oIlJlLWF1dGhlbnRpY2F0aW9uIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvL0dKQ0lOVAogICAgICAgICBnZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gCisKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBmb2xsb3dpbmcgY29kZSBpbiB0aGUgaWYgc3RhdGVtZW50IGZpcnN0IGNoZWNrcyBpZiB0aGlzIE1hbmFnZWRDb25uZWN0aW9uCiAgICAgICAgICAqIGlzIGNsZWFuIG9yIG5vdC4gSWYgaXQgaXMsIGl0IHJlc2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIHRvIHdoYXQKQEAgLTMwMSwyOCArMzAxLDI4IEBACiAgICAgICAgIGlmKGlzQ2xlYW4pIHsKICAgICAgICAgICAgICgoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSltY2YpLnJlc2V0SXNvbGF0aW9uKHRoaXMsIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAgCisKKwogICAgICAgICBDb25uZWN0aW9uSG9sZGVyIGNvbm5Ib2xkZXJPYmplY3QgPSBuZXcgQ29ubmVjdGlvbkhvbGRlcihhY3R1YWxDb25uZWN0aW9uLCB0aGlzKTsKLQlpc0NsZWFuPWZhbHNlOwotICAgICAgICAKKyAgICBpc0NsZWFuPWZhbHNlOworCiAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgIT0gbnVsbCkgewogICAgICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZS5zZXRBY3RpdmUoZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNvbm5Ib2xkZXJPYmplY3Quc2V0QWN0aXZlKHRydWUpOwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY29ubkhvbGRlck9iamVjdDsKLSAKKwogICAgICAgICByZXR1cm4gY29ubkhvbGRlck9iamVjdDsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGFuIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlLiBUaGUgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW50ZXJmYWNlCi0gICAgICogaXMgdXNlZCBieSB0aGUgY29udGFpbmVyIHRvIG1hbmFnZSBsb2NhbCB0cmFuc2FjdGlvbnMgZm9yIGEgUk0gaW5zdGFuY2UuIAorICAgICAqIGlzIHVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBtYW5hZ2UgbG9jYWwgdHJhbnNhY3Rpb25zIGZvciBhIFJNIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLkxvY2FsVHJhbnNhY3Rpb24gZ2V0TG9jYWxUcmFuc2FjdGlvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0zMzEsMTMgKzMzMSwxMyBAQAogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgcmV0dXJuIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTG9jYWxUcmFuc2FjdGlvbih0aGlzKTsKICAgICB9Ci0gICAgIAorCiAgICAgLyoqCi0gICAgICogR2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuIAorICAgICAqIEdldHMgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKiBAc2VlIDxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgUHJpbnRXcml0ZXIgZ2V0TG9nV3JpdGVyKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKQEAgLTM0NSw0NiArMzQ1LDQ2IEBACiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldExvZ1dyaXRlciIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbG9nV3JpdGVyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEdldHMgdGhlIG1ldGFkYXRhIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbm5lY3Rpb24ncyB1bmRlcmx5aW5nIEVJUyAKLSAgICAgKiByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlLiAKKyAgICAgKiBHZXRzIHRoZSBtZXRhZGF0YSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb25uZWN0aW9uJ3MgdW5kZXJseWluZyBFSVMKKyAgICAgKiByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgZ2V0TWV0YURhdGEoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRNZXRhRGF0YSIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhKHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgYW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuIAorICAgICAqIFJldHVybnMgYW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKLSAgICAgKgkJCQkJdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlOb3RTdXBwb3J0ZWRFeGNlcHRpb24JaWYgdW5kZXJseWluZyBkYXRhc291cmNlIGlzIG5vdCBhbgotICAgICAqCQkJCQk8Y29kZT5YQURhdGFTb3VyY2U8L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgICAgIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gICAgaWYgdW5kZXJseWluZyBkYXRhc291cmNlIGlzIG5vdCBhbgorICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5YQURhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2UgZ2V0WEFSZXNvdXJjZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldFhBUmVzb3VyY2UiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYoeGFyID09IG51bGwpIHsKLQkJICAgIC8qKgorICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgICAgICAqIFVzaW5nIHRoZSB3cmFwcGVyIFhBUmVzb3VyY2UuCiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICB4YXIgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLlhBUmVzb3VyY2VJbXBsKCgoWEFDb25uZWN0aW9uKXBjKS5nZXRYQVJlc291cmNlKCksIHRoaXMpOwpAQCAtMzk3LDE2ICszOTcsMTYgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkNhbm5vdCBnZXQgYW4gWEFSZXNvdXJjZSBmcm9tIGEgbm9uIFhBIGNvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlbW92ZXMgYW4gYWxyZWFkeSByZWdpc3RlcmVkIGNvbm5lY3Rpb24gZXZlbnQgbGlzdGVuZXIgZnJvbSB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGlzdGVuZXIJPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+IHRvIGJlIHJlbW92ZWQKKyAgICAgKiBAcGFyYW0gICAgbGlzdGVuZXIgICAgPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+IHRvIGJlIHJlbW92ZWQKICAgICAgKiBAc2VlIDxjb2RlPmFkZENvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJlbW92ZUNvbm5lY3Rpb25FdmVudExpc3RlbmVyKENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JbGlzdGVuZXIgPSBudWxsOworICAgIGxpc3RlbmVyID0gbnVsbDsKICAgICB9CiAKICAgICAvKioKQEAgLTQxNSw3ICs0MTUsNyBAQAogICAgICAqIExvY2FsVHJhbnNhY3Rpb24gb2JqZWN0IHdoZW4gaXRzIGJlZ2luKCkgbWV0aG9kIGlzIGNhbGxlZC4KICAgICAgKi8KICAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZCgpIHsKLQl0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOwkKKyAgICB0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDI0LDE2ICs0MjQsMTYgQEAKICAgICAgKiBMb2NhbFRyYW5zYWN0aW9uIG9iamVjdCB3aGVuIGl0cyBlbmQoKSBtZXRob2QgaXMgY2FsbGVkLgogICAgICAqLwogICAgIHZvaWQgdHJhbnNhY3Rpb25Db21wbGV0ZWQoKSB7Ci0JdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7Ci0JaWYoY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OIHx8IGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OKSB7CisgICAgdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7CisgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OIHx8IGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQgPSBhY3R1YWxDb25uZWN0aW9uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7CiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAvL2NoZWNrIHdoYXQgdG8gZG8gaW4gdGhpcyBjYXNlISEKLQkJX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMubm90Z290X3R4X2lzb2x2bCIpOworICAgICAgICAgICAgLy9jaGVjayB3aGF0IHRvIGRvIGluIHRoaXMgY2FzZSEhCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLm5vdGdvdF90eF9pc29sdmwiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotCSAgICB0cnkgeworCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbi5jbG9zZSgpOwogICAgICAgICAgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewpAQCAtNDQxLDcgKzQ0MSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotCSAgICAgICAgCisKICAgICAgICAgaXNDbGVhbiA9IHRydWU7CiAKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CkBAIC00NTMsMjggKzQ1MywyOCBAQAogICAgICAqIG9yIG5vdC4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpIHsKLQlyZXR1cm4gdHJhbnNhY3Rpb25JblByb2dyZXNzOworICAgIHJldHVybiB0cmFuc2FjdGlvbkluUHJvZ3Jlc3M7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb3V0CTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcwotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcGFyYW0gICAgb3V0ICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKiBAc2VlIDxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dXcml0ZXIoUHJpbnRXcml0ZXIgb3V0KSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgbG9nV3JpdGVyID0gb3V0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgdGhlIHR5cGUgb2YgdGhlIGNvbm5lY3Rpb24gYmVpbmcgaGVsZCAKKyAgICAgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mIHRoZSBjb25uZWN0aW9uIGJlaW5nIGhlbGQKICAgICAgKiBpbiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JcG9vbGVkQ29ubgk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEByZXR1cm4JY29ubmVjdGlvbiB0eXBlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgcG9vbGVkQ29ubiAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB0eXBlCiAgICAgICovCiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q29ubmVjdGlvblR5cGUoUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uKSB7CiAgICAgICAgIGlmKHBvb2xlZENvbm4gPT0gbnVsbCkgewpAQCAtNDg1LDIyICs0ODUsMjIgQEAKICAgICAgICAgICAgIHJldHVybiBJU1BPT0xFRENPTk5FQ1RJT047CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgCisgICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0CiAgICAgICogY3JlYXRlZCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IGNyZWF0ZWQgdGhpcwotICAgICAqCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCBjcmVhdGVkIHRoaXMKKyAgICAgKiAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCiAgICAgICovCiAgICAgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpIHsKICAgICAgICAgcmV0dXJuIChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KW1jZjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgc3FsIGNvbm5lY3Rpb24gZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LiAKKyAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgc3FsIGNvbm5lY3Rpb24gZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgogICAgICAqCi0gICAgICogQHJldHVybgl0aGUgcGh5c2ljYWwgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRoZSBwaHlzaWNhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPgogICAgICAqLwogICAgIC8vR0pDSU5UCiAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBnZXRBY3R1YWxDb25uZWN0aW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKQEAgLTUwOSw4ICs1MDksOCBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZihhY3R1YWxDb25uZWN0aW9uID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IHBjLmdldENvbm5lY3Rpb24oKTsKLQkJfQotCQkKKyAgICAgICAgfQorCiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CiAgICAgICAgICAgICAgICAgc3FsZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwpAQCAtNTE4LDgxICs1MTgsODEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYWN0dWFsQ29ubmVjdGlvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKICAgICAgKi8KICAgICBQYXNzd29yZENyZWRlbnRpYWwgZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCkgewogICAgICAgICByZXR1cm4gcGFzc3dkQ3JlZGVudGlhbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90IGFuZCB0aHJvd3MgYW4KICAgICAgKiBleGNlcHRpb24gaWYgaXQgaXMgbm90IHZhbGlkLiBBIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyBub3QgdmFsaWQgaWYKICAgICAgKiBkZXN0cm95IGhhcyBub3QgYmVlbiBjYWxsZWQgYW5kIG5vIHBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3IgaGFzCiAgICAgICogb2NjdXJyZWQgcmVuZGVyaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIHVudXNhYmxlLgogICAgICAqCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiA8Y29kZT5kZXN0cm95PC9jb2RlPiBoYXMgYmVlbiBjYWxsZWQgb24gdGhpcyAKLSAgICAgKgkJCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIG9yIGlmIGEgCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlwaHlzaWNhbCBjb25uZWN0aW9uIGVycm9yIG9jY3VycmVkIHJlbmRlcmluZyBpdCB1bnVzYWJsZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgPGNvZGU+ZGVzdHJveTwvY29kZT4gaGFzIGJlZW4gY2FsbGVkIG9uIHRoaXMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIG9yIGlmIGEKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJyZWQgcmVuZGVyaW5nIGl0IHVudXNhYmxlCiAgICAgICovCiAgICAgLy9HSkNJTlQKICAgICB2b2lkIGNoZWNrSWZWYWxpZCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUgfHwgaXNVc2FibGUgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgdGhlIHBoeXNpY2FsICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgdGhlIHBoeXNpY2FsICIgKwogICAgICAgICAgICAgICAgICJjb25uZWN0aW9uIGlzIG5vdCB1c2FibGUuIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHdoZW4gaXRzIGNsb3NlIG1ldGhvZCBpcwogICAgICAqIGNhbGxlZC4gVGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UgIGludmFsaWRhdGVzIHRoZSBjb25uZWN0aW9uIGhhbmRsZQogICAgICAqIGFuZCBzZW5kcyBhIENPTk5FQ1RJT05fQ0xPU0VEIGV2ZW50IHRvIGFsbCB0aGUgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZQlFeGNlcHRpb24gdGhhdCBtYXkgaGF2ZSBvY2N1cmVkIHdoaWxlIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCi0gICAgICogQHBhcmFtCWNvbm5Ib2xkZXJPYmplY3QJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBoYXMgYmVlbiBjbG9zZWQKLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglpbiBjYXNlIGNsb3NpbmcgdGhlIHNxbCBjb25uZWN0aW9uIGdvdCBvdXQgb2YKLSAgICAgKiAgICAgICAgIAkgICAgICAgICAgICAJPGNvZGU+Z2V0Q29ubmVjdGlvbjwvY29kZT4gb24gdGhlIHVuZGVybHlpbmcgCi0gICAgICoJCQkJPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gdGhyb3dzIGFuIGV4Y2VwdGlvbgorICAgICAqIEBwYXJhbSAgICBlICAgIEV4Y2VwdGlvbiB0aGF0IG1heSBoYXZlIG9jY3VyZWQgd2hpbGUgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKKyAgICAgKiBAcGFyYW0gICAgY29ubkhvbGRlck9iamVjdCAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGhhcyBiZWVuIGNsb3NlZAorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIGluIGNhc2UgY2xvc2luZyB0aGUgc3FsIGNvbm5lY3Rpb24gZ290IG91dCBvZgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5nZXRDb25uZWN0aW9uPC9jb2RlPiBvbiB0aGUgdW5kZXJseWluZworICAgICAqICAgICAgICAgICAgICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IHRocm93cyBhbiBleGNlcHRpb24KICAgICAgKi8KICAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoRXhjZXB0aW9uIGUsIENvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGNvbm5Ib2xkZXJPYmplY3QuaW52YWxpZGF0ZSgpOwotICAgICAgICAKKwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgY2Uuc2V0Q29ubmVjdGlvbkhhbmRsZShjb25uSG9sZGVyT2JqZWN0KTsKICAgICAgICAgbGlzdGVuZXIuY29ubmVjdGlvbkNsb3NlZChjZSk7Ci0JCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHdoZW4gaXQgZGV0ZWN0cyBhIGNvbm5lY2lvbgogICAgICAqIHJlbGF0ZWQgZXJyb3IuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZQlFeGNlcHRpb24gdGhhdCBoYXMgb2NjdXJyZWQgZHVyaW5nIGFuIG9wZXJhdGlvbiBvbiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgotICAgICAqIEBwYXJhbQljb25uSG9sZGVyT2JqZWN0CTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgZGV0ZWN0ZWQgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCWNvbm5lY3Rpb24gZXJyb3IKKyAgICAgKiBAcGFyYW0gICAgZSAgICBFeGNlcHRpb24gdGhhdCBoYXMgb2NjdXJyZWQgZHVyaW5nIGFuIG9wZXJhdGlvbiBvbiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSAgICBjb25uSG9sZGVyT2JqZWN0ICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgZGV0ZWN0ZWQgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gZXJyb3IKICAgICAgKi8KLSAgICB2b2lkIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKEV4Y2VwdGlvbiBlLCAKKyAgICB2b2lkIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKEV4Y2VwdGlvbiBlLAogICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCkgewotCSAgICAKKwogICAgICAgICAgQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgY2VsID0gdGhpcy5saXN0ZW5lcjsKICAgICAgICAgIENvbm5lY3Rpb25FdmVudCBjZSA9IG51bGw7CiAgICAgICAgICBjZSA9IGUgPT0gbnVsbCA/IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fRVJST1JfT0NDVVJSRUQpCiAgICAgICAgICAgICAgICAgICAgIDogbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9FUlJPUl9PQ0NVUlJFRCwgZSk7CiAgICAgICAgICBpZiAoY29ubkhvbGRlck9iamVjdCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgY2Uuc2V0Q29ubmVjdGlvbkhhbmRsZShjb25uSG9sZGVyT2JqZWN0KTsKLSAgICAgICAgIH0gICAgCisgICAgICAgICB9CiAKICAgICAgICAgIGNlbC5jb25uZWN0aW9uRXJyb3JPY2N1cnJlZChjZSk7CiAgICAgICAgICBpc1VzYWJsZSA9IGZhbHNlOwogICAgIH0KLSAgICAKLSAgICAKLSAgICAKKworCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aGVuIGl0cyBzdGFydCBtZXRob2QKICAgICAgKiBoYXMgYmVlbiBpbnZva2VkLgpAQCAtNjA2LDcgKzYwNiw3IEBACiAgICAgICAgICAgICBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChlLCBudWxsKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdoZW4gaXRzIGVuZCBtZXRob2QKICAgICAgKiBoYXMgYmVlbiBpbnZva2VkLgpAQCAtNjIwLDcgKzYyMCw3IEBACiAgICAgICAgICAgICBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChlLCBudWxsKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBhIENvbm5lY3Rpb24gSGFuZGxlIHRvIGNoZWNrIGlmIGl0IGlzCiAgICAgICogdGhlIGFjdGl2ZSBDb25uZWN0aW9uIEhhbmRsZS4gSWYgaXQgaXMgbm90IHRoZSBhY3RpdmUgQ29ubmVjdGlvbgpAQCAtNjI5LDI0ICs2MjksMjQgQEAKICAgICAgKiBDb25uZWN0aW9uIEhhbmRsZSBvYmplY3QgdG8gdGhpcyBvYmplY3QgaWYgdGhlIGFjdGl2ZSBDb25uZWN0aW9uCiAgICAgICogSGFuZGxlIGlzIG51bGwuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2gJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCByZXF1ZXN0cyB0aGlzCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugd2hldGhlcgotICAgICAqCQkJaXQgY2FuIGJlIGFjdGl2ZSBvciBub3QKLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglpbiBjYXNlIHRoZSBwaHlzaWNhbCBpcyBub3QgdmFsaWQgb3IKLSAgICAgKgkJCQl0aGVyZSBpcyBhbHJlYWR5IGFuIGFjdGl2ZSBjb25uZWN0aW9uIGhhbmRsZQorICAgICAqIEBwYXJhbSAgICBjaCAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IHJlcXVlc3RzIHRoaXMKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSB3aGV0aGVyCisgICAgICogICAgICAgICAgICBpdCBjYW4gYmUgYWN0aXZlIG9yIG5vdAorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIGluIGNhc2UgdGhlIHBoeXNpY2FsIGlzIG5vdCB2YWxpZCBvcgorICAgICAqICAgICAgICAgICAgICAgIHRoZXJlIGlzIGFscmVhZHkgYW4gYWN0aXZlIGNvbm5lY3Rpb24gaGFuZGxlCiAgICAgICovCi0gICAgIAorCiAgICAgdm9pZCBjaGVja0lmQWN0aXZlKENvbm5lY3Rpb25Ib2xkZXIgY2gpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBpZihpc0Rlc3Ryb3llZCA9PSB0cnVlIHx8IGlzVXNhYmxlID09IGZhbHNlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJUaGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdXNhYmxlIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9PSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7CiAgICAgICAgICAgICBjaC5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBjaCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaGFuZGxlIGNhbm5vdCBiZSB1c2VkIGFzIGFub3RoZXIgY29ubmVjdGlvbiBpcyBjdXJyZW50bHkgYWN0aXZlIik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQppbmRleCAyMGYwM2FhLi5mNjUwZDQxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiAvKioKICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzAzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgewogCkBAIC00MSw4MSArNDEsODEgQEAKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPglpZiBnZXR0aW5nIHRoZSBEYXRhYmFzZU1ldGFEYXRhIG9iamVjdCBmYWlscworICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiAgICBpZiBnZXR0aW5nIHRoZSBEYXRhYmFzZU1ldGFEYXRhIG9iamVjdCBmYWlscwogICAgICAqLwogICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhKE1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgICAgICAgICAgZG1kID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpLmdldE1ldGFEYXRhKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHByb2R1Y3QgbmFtZSBvZiB0aGUgdW5kZXJseWluZyBFSVMgaW5zdGFuY2UgY29ubmVjdGVkCiAgICAgICogdGhyb3VnaCB0aGUgTWFuYWdlZENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVByb2R1Y3QgbmFtZSBvZiB0aGUgRUlTIGluc3RhbmNlCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIFByb2R1Y3QgbmFtZSBvZiB0aGUgRUlTIGluc3RhbmNlCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEVJU1Byb2R1Y3ROYW1lKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0RGF0YWJhc2VQcm9kdWN0TmFtZSgpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kbmFtZSIsIHNxbGUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZG5hbWUiLCBzcWxlKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgdW5kZXJseWluZyBFSVMgaW5zdGFuY2UgY29ubmVjdGVkCiAgICAgICogdGhyb3VnaCB0aGUgTWFuYWdlZENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgRUlTIGluc3RhbmNlCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIFByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgRUlTIGluc3RhbmNlCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEVJU1Byb2R1Y3RWZXJzaW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0RGF0YWJhc2VQcm9kdWN0VmVyc2lvbigpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kdmVycyIsIHNxbGUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZHZlcnMiLCBzcWxlKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSwgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBtYXhpbXVtIGxpbWl0IG9uIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucwogICAgICAqIHRoYXQgYW4gRUlTIGluc3RhbmNlIGNhbiBzdXBwb3J0IGFjcm9zcyBjbGllbnQgcHJvY2Vzc2VzLgogICAgICAqCi0gICAgICogQHJldHVybglNYXhpbXVtIGxpbWl0IGZvciBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgTWF4aW11bSBsaW1pdCBmb3IgbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldE1heENvbm5lY3Rpb25zKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0TWF4Q29ubmVjdGlvbnMoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfbWF4Y29ubiIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfbWF4Y29ubiIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgbmFtZSBvZiB0aGUgdXNlciBhc3NvY2lhdGVkIHdpdGggdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLiBUaGUgbmFtZQogICAgICAqIGNvcnJlc3BvbmRzIHRvIHRoZSByZXNvdXJjZSBwcmluY2lwYWwgdW5kZXIgd2hvc2Ugd2hvc2Ugc2VjdXJpdHkgY29udGV4dCwgYSBjb25uZWN0aW9uCiAgICAgICogdG8gdGhlIEVJUyBpbnN0YW5jZSBoYXMgYmVlbiBlc3RhYmxpc2hlZC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbmFtZSBvZiB0aGUgdXNlcgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBuYW1lIG9mIHRoZSB1c2VyCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXJOYW1lKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgamFrYXJ0YS5yZXNvdXJjZS5zcGkuc2VjdXJpdHkuUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gbWMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCk7CiAgICAgICAgIGlmKHBjICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBwYy5nZXRVc2VyTmFtZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBtYy5nZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKS5nZXRVc2VyKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKaW5kZXggZGFkMWQ3Ny4uNDgyZjMzMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCkBAIC0yNCwxNDggKzI0LDE0OCBAQAogLyoqCiAgKiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiB3cmFwcGVyIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMjMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzIzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgWEFSZXNvdXJjZUltcGwgaW1wbGVtZW50cyBYQVJlc291cmNlIHsKIAogICAgIFhBUmVzb3VyY2UgeGFyOwogICAgIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIFhBUmVzb3VyY2VJbXBsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGFyCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+Ci0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB4YXIgICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2VJbXBsKFhBUmVzb3VyY2UgeGFyLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLnhhciA9IHhhcjsKICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCB0aGUgZ2xvYmFsIHRyYW5zYWN0aW9uIHNwZWNpZmllZCBieSB4aWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKLSAgICAgKiBAcGFyYW0Jb25lUGhhc2UJSWYgdHJ1ZSwgdGhlIHJlc291cmNlIG1hbmFnZXIgc2hvdWxkIHVzZSBhIG9uZS1waGFzZSBjb21taXQgCi0gICAgICogICAgICAgCSAgICAgICAgCXByb3RvY29sIHRvIGNvbW1pdCB0aGUgd29yayBkb25lIG9uIGJlaGFsZiBvZiB4aWQuCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIG9uZVBoYXNlICAgIElmIHRydWUsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHNob3VsZCB1c2UgYSBvbmUtcGhhc2UgY29tbWl0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sIHRvIGNvbW1pdCB0aGUgd29yayBkb25lIG9uIGJlaGFsZiBvZiB4aWQuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KFhpZCB4aWQsIGJvb2xlYW4gb25lUGhhc2UpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vdGhlIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkIGNhbGwgaGFzIGNvbWUgaGVyZSBiZWNhc3VlCi0JLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKLQkvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAotCS8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcwotCS8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKLQkvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIC8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93CisgICAgLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKKyAgICAvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCisgICAgLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICAgICAgeGFyLmNvbW1pdCh4aWQsIG9uZVBoYXNlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbmRzIHRoZSB3b3JrIHBlcmZvcm1lZCBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2guCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBpcyB0aGUgc2FtZSBhcyB3aGF0IAotICAgICAqCQkJd2FzIHVzZWQgcHJldmlvdXNseSBpbiB0aGUgc3RhcnQgbWV0aG9kLgotICAgICAqIEBwYXJhbQlmbGFncwlPbmUgb2YgVE1TVUNDRVNTLCBUTUZBSUwsIG9yIFRNU1VTUEVORAorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQKKyAgICAgKiAgICAgICAgICAgIHdhcyB1c2VkIHByZXZpb3VzbHkgaW4gdGhlIHN0YXJ0IG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgZmxhZ3MgICAgT25lIG9mIFRNU1VDQ0VTUywgVE1GQUlMLCBvciBUTVNVU1BFTkQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICB4YXIuZW5kKHhpZCwgZmxhZ3MpOwogICAgICAgICAvL0dKQ0lOVAotCS8vbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICAvL21jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGVsbCB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgYSBoZXVyaXN0aWNhbGx5IGNvbXBsZXRlZCB0cmFuc2FjdGlvbiBicmFuY2guCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgeGFyLmZvcmdldCh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIE9idGFpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIHNldCBmb3IgdGhpcyAKKyAgICAgKiBPYnRhaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBzZXQgZm9yIHRoaXMKICAgICAgKiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcworICAgICAqIEByZXR1cm4gICAgdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcwogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0VHJhbnNhY3Rpb25UaW1lb3V0KCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5nZXRUcmFuc2FjdGlvblRpbWVvdXQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlIAotICAgICAqIHJlcHJlc2VudGVkIGJ5IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSByZXNvdWNlIG1hbmFnZXIgCisgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZQorICAgICAqIHJlcHJlc2VudGVkIGJ5IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSByZXNvdWNlIG1hbmFnZXIKICAgICAgKiBpbnN0YW5jZSByZXByZXNlbnRlZCBieSB0aGUgcGFyYW1ldGVyIHhhcmVzLgogICAgICAqCi0gICAgICogQHBhcmFtCXhhcmVzCUFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aG9zZSByZXNvdXJjZSBtYW5hZ2VyIAotICAgICAqIAkJCWluc3RhbmNlIGlzIHRvIGJlIGNvbXBhcmVkIHdpdGggdGhlIHJlc291cmNlCi0gICAgICogQHJldHVybgl0cnVlIGlmIGl0J3MgdGhlIHNhbWUgUk0gaW5zdGFuY2U7IG90aGVyd2lzZSBmYWxzZS4KKyAgICAgKiBAcGFyYW0gICAgeGFyZXMgICAgQW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdob3NlIHJlc291cmNlIG1hbmFnZXIKKyAgICAgKiAgICAgICAgICAgICBpbnN0YW5jZSBpcyB0byBiZSBjb21wYXJlZCB3aXRoIHRoZSByZXNvdXJjZQorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiBpdCdzIHRoZSBzYW1lIFJNIGluc3RhbmNlOyBvdGhlcndpc2UgZmFsc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNTYW1lUk0oWEFSZXNvdXJjZSB4YXJlcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5pc1NhbWVSTSh4YXJlcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQXNrIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIHByZXBhcmUgZm9yIGEgdHJhbnNhY3Rpb24gY29tbWl0IAorICAgICAqIEFzayB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBwcmVwYXJlIGZvciBhIHRyYW5zYWN0aW9uIGNvbW1pdAogICAgICAqIG9mIHRoZSB0cmFuc2FjdGlvbiBzcGVjaWZpZWQgaW4geGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCi0gICAgICogQHJldHVybglBIHZhbHVlIGluZGljYXRpbmcgdGhlIHJlc291cmNlIG1hbmFnZXIncyB2b3RlIG9uIHRoZSAKLSAgICAgKgkJb3V0Y29tZSBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSBwb3NzaWJsZSB2YWx1ZXMKLSAgICAgKgkJYXJlOiBYQV9SRE9OTFkgb3IgWEFfT0suIElmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHdhbnRzIAotICAgICAqCQl0byByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uLCBpdCBzaG91bGQgZG8gc28KLSAgICAgKgkJYnkgcmFpc2luZyBhbiBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4gaW4gdGhlIHByZXBhcmUgbWV0aG9kLgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEByZXR1cm4gICAgQSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSByZXNvdXJjZSBtYW5hZ2VyJ3Mgdm90ZSBvbiB0aGUKKyAgICAgKiAgICAgICAgb3V0Y29tZSBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSBwb3NzaWJsZSB2YWx1ZXMKKyAgICAgKiAgICAgICAgYXJlOiBYQV9SRE9OTFkgb3IgWEFfT0suIElmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHdhbnRzCisgICAgICogICAgICAgIHRvIHJvbGwgYmFjayB0aGUgdHJhbnNhY3Rpb24sIGl0IHNob3VsZCBkbyBzbworICAgICAqICAgICAgICBieSByYWlzaW5nIGFuIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPiBpbiB0aGUgcHJlcGFyZSBtZXRob2QuCiAgICAgICovCiAgICAgcHVibGljIGludCBwcmVwYXJlKFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIucHJlcGFyZSh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIE9idGFpbiBhIGxpc3Qgb2YgcHJlcGFyZWQgdHJhbnNhY3Rpb24gYnJhbmNoZXMgZnJvbSBhIHJlc291cmNlIG1hbmFnZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZmxhZwlPbmUgb2YgVE1TVEFSVFJTQ0FOLCBUTUVORFJTQ0FOLCBUTU5PRkxBR1MuIFRNTk9GTEFHUyAKLSAgICAgKgkJCW11c3QgYmUgdXNlZCB3aGVuIG5vIG90aGVyIGZsYWdzIGFyZSBzZXQgaW4gZmxhZ3MuCi0gICAgICogQHJldHVybglUaGUgcmVzb3VyY2UgbWFuYWdlciByZXR1cm5zIHplcm8gb3IgbW9yZSBYSURzIGZvciB0aGUgdHJhbnNhY3Rpb24gCi0gICAgICoJCWJyYW5jaGVzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBhIHByZXBhcmVkIG9yIGhldXJpc3RpY2FsbHkgCi0gICAgICoJCWNvbXBsZXRlZCBzdGF0ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgb3BlcmF0aW9uLCB0aGUgcmVzb3VyY2UKLSAgICAgKgkJbWFuYWdlciBzaG91bGQgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gICAgZmxhZyAgICBPbmUgb2YgVE1TVEFSVFJTQ0FOLCBUTUVORFJTQ0FOLCBUTU5PRkxBR1MuIFRNTk9GTEFHUworICAgICAqICAgICAgICAgICAgbXVzdCBiZSB1c2VkIHdoZW4gbm8gb3RoZXIgZmxhZ3MgYXJlIHNldCBpbiBmbGFncy4KKyAgICAgKiBAcmV0dXJuICAgIFRoZSByZXNvdXJjZSBtYW5hZ2VyIHJldHVybnMgemVybyBvciBtb3JlIFhJRHMgZm9yIHRoZSB0cmFuc2FjdGlvbgorICAgICAqICAgICAgICBicmFuY2hlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gYSBwcmVwYXJlZCBvciBoZXVyaXN0aWNhbGx5CisgICAgICogICAgICAgIGNvbXBsZXRlZCBzdGF0ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgb3BlcmF0aW9uLCB0aGUgcmVzb3VyY2UKKyAgICAgKiAgICAgICAgbWFuYWdlciBzaG91bGQgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgWGlkW10gcmVjb3ZlcihpbnQgZmxhZykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5yZWNvdmVyKGZsYWcpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEluZm9ybSB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byByb2xsIGJhY2sgd29yayBkb25lIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaAogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy90aGUgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQgY2FsbCBoYXMgY29tZSBoZXJlIGJlY2FzdWUKLQkvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdwotCS8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCi0JLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCi0JLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAotCS8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgorICAgIC8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93CisgICAgLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKKyAgICAvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCisgICAgLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCiAgICAgICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgICAgIHhhci5yb2xsYmFjayh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGZvciB0aGlzIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlY29uZHMJdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpcyBzZXQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZmFsc2UuCisgICAgICogQHBhcmFtICAgIHNlY29uZHMgICAgdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpcyBzZXQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZmFsc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnNldFRyYW5zYWN0aW9uVGltZW91dChzZWNvbmRzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTdGFydCB3b3JrIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaCBzcGVjaWZpZWQgaW4geGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzb3VyY2UKLSAgICAgKiBAcmV0dXJuCWZsYWdzCU9uZSBvZiBUTU5PRkxBR1MsIFRNSk9JTiwgb3IgVE1SRVNVTUUKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZQorICAgICAqIEByZXR1cm4gICAgZmxhZ3MgICAgT25lIG9mIFRNTk9GTEFHUywgVE1KT0lOLCBvciBUTVJFU1VNRQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy9HSkNJTlQKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL2J1aWxkLnhtbAppbmRleCA5Njc4NjhiLi42NDEwNTU3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIke2dqYy5ob21lfSIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3NwaSIvPgotIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTM3LDUgKzM3LDUgQEAKIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCIvPgogCi0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKaW5kZXggY2UzMjFhZi4uOWU3ZjI1MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKQEAgLTI2LDggKzI2LDggQEAKIC8qKgogICogRXhlY3V0ZSB0aGUgbWV0aG9kcyBiYXNlZCBvbiB0aGUgcGFyYW1ldGVycy4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIE1ldGhvZEV4ZWN1dG9yIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAKQEAgLTM5LDEzMCArMzksMTMwIEBACiAgICAgLyoqCiAgICAgICogRXhjZXV0ZSBhIHNpbXBsZSBzZXQgTWV0aG9kLgogICAgICAqCi0gICAgICogQHBhcmFtCXZhbHVlCVZhbHVlIHRvIGJlIHNldC4KLSAgICAgKiBAcGFyYW0JbWV0aG9kCTxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQlvYmoJT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCisgICAgICogQHBhcmFtICAgIHZhbHVlICAgIFZhbHVlIHRvIGJlIHNldC4KKyAgICAgKiBAcGFyYW0gICAgbWV0aG9kICAgIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvYmogICAgT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLiAgICAgCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJ1bkphdmFCZWFuTWV0aG9kKFN0cmluZyB2YWx1ZSwgTWV0aG9kIG1ldGhvZCwgT2JqZWN0IG9iaikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlpZiAodmFsdWU9PW51bGwgfHwgdmFsdWUudHJpbSgpLmVxdWFscygiIikpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAl0cnkgewotICAgIAkgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0gICAgCSAgICBpZiAoIHBhcmFtZXRlcnMubGVuZ3RoID09IDEpIHsKLSAgICAJICAgICAgICBPYmplY3RbXSB2YWx1ZXMgPSBuZXcgT2JqZWN0WzFdOwotICAgIAkgICAgCXZhbHVlc1swXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbMF0sIHZhbHVlKTsKLSAgICAJICAgIAltZXRob2QuaW52b2tlKG9iaiwgdmFsdWVzKTsKLSAgICAJICAgIH0KLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfQorICAgICAgICBpZiAodmFsdWU9PW51bGwgfHwgdmFsdWUudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7CisgICAgICAgICAgICBpZiAoIHBhcmFtZXRlcnMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgICAgICBPYmplY3RbXSB2YWx1ZXMgPSBuZXcgT2JqZWN0WzFdOworICAgICAgICAgICAgICAgIHZhbHVlc1swXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbMF0sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBtZXRob2QuaW52b2tlKG9iaiwgdmFsdWVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogRXhlY3V0ZXMgdGhlIG1ldGhvZC4gICAgIAorICAgICAqIEV4ZWN1dGVzIHRoZSBtZXRob2QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWV0aG9kIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQlvYmoJT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCi0gICAgICogQHBhcmFtCXZhbHVlcwlQYXJhbWV0ZXIgdmFsdWVzIGZvciBleGVjdXRpbmcgdGhlIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgbWV0aG9kIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvYmogICAgT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCisgICAgICogQHBhcmFtICAgIHZhbHVlcyAgICBQYXJhbWV0ZXIgdmFsdWVzIGZvciBleGVjdXRpbmcgdGhlIG1ldGhvZC4KICAgICAgKiBAdGhyb3dzICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4sIGluIGNhc2Ugb2YgdGhlIG1pc21hdGNoIG9mIHBhcmFtZXRlciB2YWx1ZXMgb3IKLSAgICAgKgkJYSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJ1bk1ldGhvZChNZXRob2QgbWV0aG9kLCBPYmplY3Qgb2JqLCBWZWN0b3IgdmFsdWVzKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCXRyeSB7Ci0JICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotCSAgICBpZiAodmFsdWVzLnNpemUoKSAhPSBwYXJhbWV0ZXJzLmxlbmd0aCkgewotCSAgICAgICAgcmV0dXJuOwotCSAgICB9Ci0gICAgCSAgICBPYmplY3RbXSBhY3R1YWxWYWx1ZXMgPSBuZXcgT2JqZWN0W3BhcmFtZXRlcnMubGVuZ3RoXTsKLSAgICAJICAgIGZvciAoaW50IGkgPTA7IGk8cGFyYW1ldGVycy5sZW5ndGggOyBpKyspIHsKLSAgICAJICAgIAlTdHJpbmcgdmFsID0gKFN0cmluZykgdmFsdWVzLmdldChpKTsKLSAgICAJICAgIAlpZiAodmFsLnRyaW0oKS5lcXVhbHMoIk5VTEwiKSkgewotICAgIAkgICAgCSAgICBhY3R1YWxWYWx1ZXNbaV0gPSBudWxsOwotICAgIAkgICAgCX0gZWxzZSB7Ci0gICAgCSAgICAJICAgIGFjdHVhbFZhbHVlc1tpXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbaV0sIHZhbCk7Ci0gICAgCSAgICAJfQotICAgIAkgICAgfQotICAgIAkgICAgbWV0aG9kLmludm9rZShvYmosIGFjdHVhbFZhbHVlcyk7Ci0gICAgCX1jYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfQorICAgICAgICB0cnkgeworICAgICAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKKyAgICAgICAgaWYgKHZhbHVlcy5zaXplKCkgIT0gcGFyYW1ldGVycy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgT2JqZWN0W10gYWN0dWFsVmFsdWVzID0gbmV3IE9iamVjdFtwYXJhbWV0ZXJzLmxlbmd0aF07CisgICAgICAgICAgICBmb3IgKGludCBpID0wOyBpPHBhcmFtZXRlcnMubGVuZ3RoIDsgaSsrKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHZhbCA9IChTdHJpbmcpIHZhbHVlcy5nZXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbC50cmltKCkuZXF1YWxzKCJOVUxMIikpIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsVmFsdWVzW2ldID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhY3R1YWxWYWx1ZXNbaV0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzW2ldLCB2YWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1ldGhvZC5pbnZva2Uob2JqLCBhY3R1YWxWYWx1ZXMpOworICAgICAgICB9Y2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnZlcnRzIHRoZSB0eXBlIGZyb20gU3RyaW5nIHRvIHRoZSBDbGFzcyB0eXBlLgogICAgICAqCi0gICAgICogQHBhcmFtCXR5cGUJCUNsYXNzIG5hbWUgdG8gd2hpY2ggdGhlIGNvbnZlcnNpb24gaXMgcmVxdWlyZWQuCi0gICAgICogQHBhcmFtCXBhcmFtZXRlcglTdHJpbmcgdmFsdWUgdG8gYmUgY29udmVydGVkLgotICAgICAqIEByZXR1cm4JQ29udmVydGVkIHZhbHVlLgorICAgICAqIEBwYXJhbSAgICB0eXBlICAgICAgICBDbGFzcyBuYW1lIHRvIHdoaWNoIHRoZSBjb252ZXJzaW9uIGlzIHJlcXVpcmVkLgorICAgICAqIEBwYXJhbSAgICBwYXJhbWV0ZXIgICAgU3RyaW5nIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KKyAgICAgKiBAcmV0dXJuICAgIENvbnZlcnRlZCB2YWx1ZS4KICAgICAgKiBAdGhyb3dzICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4sIGluIGNhc2Ugb2YgdGhlIG1pc21hdGNoIG9mIHBhcmFtZXRlciB2YWx1ZXMgb3IKLSAgICAgKgkJYSBzZWN1cml0eSB2aW9sYXRpb24uICAgICAKKyAgICAgKiAgICAgICAgYSBzZWN1cml0eSB2aW9sYXRpb24uCiAgICAgICovCiAgICAgcHJpdmF0ZSBPYmplY3QgY29udmVydFR5cGUoQ2xhc3MgdHlwZSwgU3RyaW5nIHBhcmFtZXRlcikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAl0cnkgewotICAgIAkgICAgU3RyaW5nIHR5cGVOYW1lID0gdHlwZS5nZXROYW1lKCk7Ci0gICAgCSAgICBpZiAoIHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlN0cmluZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLk9iamVjdCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIHBhcmFtZXRlcjsKLSAgICAJICAgIH0KLSAgICAJCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJpbnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5JbnRlZ2VyIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEludGVnZXIocGFyYW1ldGVyKTsKLSAgICAJICAgIH0KLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygic2hvcnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TaG9ydCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBTaG9ydChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJieXRlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQnl0ZSIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBCeXRlKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImxvbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Mb25nIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IExvbmcocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJmbG9hdCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkZsb2F0IikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEZsb2F0KHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImRvdWJsZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkRvdWJsZSIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBEb3VibGUocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdEZWNpbWFsIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0ludGVnZXIiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJib29sZWFuIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQm9vbGVhbiIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBCb29sZWFuKHBhcmFtZXRlcik7Ci0gICAgICAgICAgICB9CQkKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFN0cmluZyB0eXBlTmFtZSA9IHR5cGUuZ2V0TmFtZSgpOworICAgICAgICAgICAgaWYgKCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TdHJpbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5PYmplY3QiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7CisgICAgICAgICAgICB9CiAKLSAgICAJICAgIHJldHVybiBwYXJhbWV0ZXI7Ci0gICAgCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbmZlIiwgcGFyYW1ldGVyKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihwYXJhbWV0ZXIrIjogTm90IGEgdmFsaWQgdmFsdWUgZm9yIHRoaXMgbWV0aG9kICIpOwotICAgIAl9CisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJpbnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5JbnRlZ2VyIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEludGVnZXIocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygic2hvcnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TaG9ydCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTaG9ydChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJieXRlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQnl0ZSIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCeXRlKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImxvbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Mb25nIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExvbmcocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZmxvYXQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5GbG9hdCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJkb3VibGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Eb3VibGUiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRG91YmxlKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdEZWNpbWFsIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdJbnRlZ2VyIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJvb2xlYW4iKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Cb29sZWFuIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJvb2xlYW4ocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcjsKKyAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19uZmUiLCBwYXJhbWV0ZXIpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHBhcmFtZXRlcisiOiBOb3QgYSB2YWxpZCB2YWx1ZSBmb3IgdGhpcyBtZXRob2QgIik7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKaW5kZXggZmMxNDliZi4uZjAwOGU3ZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCkBAIC0yOSwzNiArMjksMzYgQEAKIC8qKgogICogU2VjdXJpdHlVdGlscyBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIyCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMgorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFNlY3VyaXR5VXRpbHMgewogCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QsIGdpdmVuIAotICAgICAqIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBzdWJqZWN0IGFuZCB0aGUgCi0gICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPi4gSXQgZmlyc3QgY2hlY2tzIGlmIHRoZSAKLSAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGlzIG51bGwgb3Igbm90LiBJZiBpdCBpcyBub3QgbnVsbCwgCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QsIGdpdmVuCisgICAgICogdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIHN1YmplY3QgYW5kIHRoZQorICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4uIEl0IGZpcnN0IGNoZWNrcyBpZiB0aGUKKyAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGlzIG51bGwgb3Igbm90LiBJZiBpdCBpcyBub3QgbnVsbCwKICAgICAgKiBpdCBjb25zdHJ1Y3RzIGEgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2l0aAogICAgICAqIHRoZSB1c2VyIGFuZCBwYXNzd29yZCBmaWVsZHMgZnJvbSB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBhbmQgcmV0dXJucyB0aGlzCi0gICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QuIElmIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IAotICAgICAqIGlzIG51bGwsIGl0IHJldHJpZXZlcyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGZyb20gCisgICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QuIElmIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CisgICAgICogaXMgbnVsbCwgaXQgcmV0cmlldmVzIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdHMgZnJvbQogICAgICAqIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgYW5kIHJldHVybnMgdGhlIGZpcnN0Ci0gICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYSAKKyAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCB3aGljaCBjb250YWlucyBhCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgaW5zdGFuY2UgZXF1aXZhbGVudAogICAgICAqIHRvIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBwYXJhbWV0ZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPgotICAgICAqIEBwYXJhbQlpbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPglnZW5lcmljIGV4Y2VwdGlvbiBpZiBvcGVyYXRpb24gZmFpbHMKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlNlY3VyaXR5RXhjZXB0aW9uPC9jb2RlPglpZiBhY2Nlc3MgdG8gdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIGlzIGRlbmllZAorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+ICAgIGdlbmVyaWMgZXhjZXB0aW9uIGlmIG9wZXJhdGlvbiBmYWlscworICAgICAqIEB0aHJvd3MgICAgPGNvZGU+U2VjdXJpdHlFeGNlcHRpb248L2NvZGU+ICAgIGlmIGFjY2VzcyB0byB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgaXMgZGVuaWVkCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBQYXNzd29yZENyZWRlbnRpYWwgZ2V0UGFzc3dvcmRDcmVkZW50aWFsKGZpbmFsIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsCiAgICAgICAgICBmaW5hbCBTdWJqZWN0IHN1YmplY3QsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogCi0JaWYgKGluZm8gPT0gbnVsbCkgeworICAgIGlmIChpbmZvID09IG51bGwpIHsKICAgICAgICAgICAgIGlmIChzdWJqZWN0ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC04OSwxNCArODksMTQgQEAKICAgICAgICAgICAgIHJldHVybiBwYzsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0d28gc3RyaW5ncyBhcmUgZXF1YWw7IGZhbHNlIG90aGVyd2lzZQotICAgICAqIAotICAgICAqIEBwYXJhbQlzdHIxCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAcGFyYW0Jc3RyMgk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSB0d28gc3RyaW5ncyBhcmUgZXF1YWwKLSAgICAgKiAgICAgICAgCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHN0cjEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzdHIyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHR3byBzdHJpbmdzIGFyZSBlcXVhbAorICAgICAqICAgICAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgc3RhdGljIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKFN0cmluZyBzdHIxLCBTdHJpbmcgc3RyMikgewogICAgICAgICBpZiAoc3RyMSA9PSBudWxsKSB7CkBAIC0xMDksMTAgKzEwOSwxMCBAQAogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0d28gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGFyZSBlcXVhbDsgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcEMxCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAcGFyYW0JcEMyCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHR3byBQYXNzd29yZENyZWRlbnRpYWxzIGFyZSBlcXVhbAotICAgICAqICAgICAgICAJZmFsc2UJb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHBDMSAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBDMiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSB0d28gUGFzc3dvcmRDcmVkZW50aWFscyBhcmUgZXF1YWwKKyAgICAgKiAgICAgICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHN0YXRpYyBwdWJsaWMgYm9vbGVhbiBpc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKFBhc3N3b3JkQ3JlZGVudGlhbCBwQzEsIFBhc3N3b3JkQ3JlZGVudGlhbCBwQzIpIHsKICAgICAgICAgaWYgKHBDMSA9PSBwQzIpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbAppbmRleCBhNTViYmYwLi5mMDYwZTdkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9Ii4iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy91dGlsIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgIDxqYXIgamFyZmlsZT0iJHtkaXN0LmRpcn0vJHtwa2cuZGlyfS91dGlsLmphciIgYmFzZWRpcj0iJHtjbGFzcy5kaXJ9IgogICAgICAgICBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxMyIgZGVwZW5kcz0iY29tcGlsZSIvPgogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxNCIgZGVwZW5kcz0iY29tcGlsZSIvPgogCkBAIC00NCw1ICs0NCw1IEBACiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+Ci0gIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKaW5kZXggYzliNjdiMi4uOTFjMmQ0MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQpAQCAtNTIsMjIgKzUyLDIyIEBACiAKIAogICAgICAgICBTdHJpbmcgcmVzID0gIk5PVCBSVU4iOwotCSAgICBkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKKyAgICAgICAgZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CiAgICAgICAgIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwogICAgICAgICB0cnkgewotCQlwYXNzID0gY2hlY2tSZXN1bHRzKHZlcnNpb25Ub1Rlc3QpOwotCQlkZWJ1ZygiR290IGV4cGVjdGVkIHJlc3VsdHMgPSAiICsgcGFzcyk7CisgICAgICAgIHBhc3MgPSBjaGVja1Jlc3VsdHModmVyc2lvblRvVGVzdCk7CisgICAgICAgIGRlYnVnKCJHb3QgZXhwZWN0ZWQgcmVzdWx0cyA9ICIgKyBwYXNzKTsKIAotCQkvL2RvIG5vdCBjb250aW51ZSBpZiBvbmUgdGVzdCBmYWlsZWQKLQkJaWYgKCFwYXNzKSB7Ci0JCQlyZXMgPSAiU09NRSBURVNUUyBGQUlMRUQiOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJSZWRlcGxveSBDb25uZWN0b3IgMS41IHRlc3QgLSBWZXJzaW9uIDogIisgdmVyc2lvblRvVGVzdCArICIgRkFJTCIpOworICAgICAgICAvL2RvIG5vdCBjb250aW51ZSBpZiBvbmUgdGVzdCBmYWlsZWQKKyAgICAgICAgaWYgKCFwYXNzKSB7CisgICAgICAgICAgICByZXMgPSAiU09NRSBURVNUUyBGQUlMRUQiOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWRlcGxveSBDb25uZWN0b3IgMS41IHRlc3QgLSBWZXJzaW9uIDogIisgdmVyc2lvblRvVGVzdCArICIgRkFJTCIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6RkFJTCIpOwotCQl9IGVsc2UgewotCQkJcmVzICA9ICJBTEwgVEVTVFMgUEFTU0VEIjsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiUmVkZXBsb3kgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gVmVyc2lvbiA6ICIrIHZlcnNpb25Ub1Rlc3QgKyAiIFBBU1MiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlZGVwbG95IENvbm5lY3RvciAxLjUgdGVzdCAtIFZlcnNpb24gOiAiKyB2ZXJzaW9uVG9UZXN0ICsgIiBQQVNTIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7Ci0JCX0KKyAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVkZXBsb3kgY29ubmVjdG9yIHRlc3QgZmFpbGVkLiIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC04MywxOCArODMsMTggQEAKICAgICB9CiAKICAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tSZXN1bHRzKGludCBudW0pIHRocm93cyBFeGNlcHRpb24gewotCSAgICBkZWJ1ZygiY2hlY2tSZXN1bHQiICsgbnVtKTsKLQkgICAgZGVidWcoImdvdCBpbml0aWFsIGNvbnRleHQiICsgKG5ldyBJbml0aWFsQ29udGV4dCgpKS50b1N0cmluZygpKTsKKyAgICAgICAgZGVidWcoImNoZWNrUmVzdWx0IiArIG51bSk7CisgICAgICAgIGRlYnVnKCJnb3QgaW5pdGlhbCBjb250ZXh0IiArIChuZXcgSW5pdGlhbENvbnRleHQoKSkudG9TdHJpbmcoKSk7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL015VmVyc2lvbkNoZWNrZXIiKTsKLQlkZWJ1ZygiZ290IG8iICsgbyk7CisgICAgZGVidWcoImdvdCBvIiArIG8pOwogICAgICAgICBWZXJzaW9uQ2hlY2tlckhvbWUgaG9tZSA9IChWZXJzaW9uQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgVmVyc2lvbkNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgZGVidWcoImdvdCBob21lIiArIGhvbWUpOwotCSAgICBWZXJzaW9uQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKLQkgICAgZGVidWcoImdvdCBvIiArIGNoZWNrZXIpOworICAgICAgICBWZXJzaW9uQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKKyAgICAgICAgZGVidWcoImdvdCBvIiArIGNoZWNrZXIpOwogICAgICAgICAvL3Byb2JsZW0gaGVyZSEKLQlpbnQgcmVzdWx0ID0gY2hlY2tlci5nZXRWZXJzaW9uKCk7Ci0JZGVidWcoImNoZWNrUmVzdWx0IiArIHJlc3VsdCk7CisgICAgaW50IHJlc3VsdCA9IGNoZWNrZXIuZ2V0VmVyc2lvbigpOworICAgIGRlYnVnKCJjaGVja1Jlc3VsdCIgKyByZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0ID09IG51bTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZXBvcnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlcG9ydC54bWwKaW5kZXggNjVhMzJhZS4uMDk0ZTM2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlcG9ydC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlcG9ydC54bWwKQEAgLTIzLDcgKzIzLDcgQEAKIDx0YXJnZXQgbmFtZT0icmVwb3J0Ij4KIDxlY2hvIG1lc3NhZ2U9IkNvbXBhcmluZyByZXN1bHRzIHdpdGggZXhwZWN0ZWQgcmVzdWx0cyIvPgogCi0gCisKICAgICA8eHNsdCBzdHlsZT0iJHtzdHlsZXNoZWV0fSIKICAgICAgICAgICAgIGluPSIke3htbGZpbGV9IiBvdXQ9IiR7aHRtbGZpbGV9IgogICAgICAgICAgICAgYmFzZWRpcj0iLiIgZGVzdGRpcj0iLiIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ydW5fdGVzdC5zaCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ydW5fdGVzdC5zaAppbmRleCA0ZTlhNDEyLi43MDRmMWRkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcnVuX3Rlc3Quc2gKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3J1bl90ZXN0LnNoCkBAIC0xOCw3ICsxOCw3IEBACiBsaXN0X3Rlc3RfaWRzKCl7CiAgIGVjaG8gY29ubmVjdG9yX2FsbCBjb25uZWN0b3JfZ3JvdXBfMSBjb25uZWN0b3JfZ3JvdXBfMiBjb25uZWN0b3JfZ3JvdXBfMyBjb25uZWN0b3JfZ3JvdXBfNAogfQotIAorCiB0ZXN0X3J1bigpewogICAjdGVzdCBmdW5jdGlvbnMgZ29lcyBoZXJlLCBtYXZlbiB0ZXN0IG9yIGFudCB0ZXN0IGV0Yy4KICAgZXhwb3J0IEhVRFNPTj10cnVlCkBAIC00NSwxNiArNDUsMTYgQEAKIH0KIAogZ2V0X3Rlc3RfdGFyZ2V0KCl7Ci0JY2FzZSAkezF9IGluCi0JCWNvbm5lY3Rvcl9hbGwgKQotCQkJVEFSR0VUPWFsbAotCQkJZXhwb3J0IFRBUkdFVDs7CisgICAgY2FzZSAkezF9IGluCisgICAgICAgIGNvbm5lY3Rvcl9hbGwgKQorICAgICAgICAgICAgVEFSR0VUPWFsbAorICAgICAgICAgICAgZXhwb3J0IFRBUkdFVDs7CiAgICogKQogICAgIFRBUkdFVD0kMQogICAgIGV4cG9ydCBUQVJHRVQ7OwotCWVzYWMKKyAgICBlc2FjCiB9Ci0gCisKIE9QVD0kezF9CiBURVNUX0lEPSR7Mn0KIHNvdXJjZSBgZGlybmFtZSAkezB9YC8uLi8uLi8uLi8uLi9jb21tb25fdGVzdC5zaApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlY3VyaXR5bWFwd2ViL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VjdXJpdHltYXB3ZWIvYnVpbGQucHJvcGVydGllcwppbmRleCAwYzY4YWQ0Li5lYzA3ZjIyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VjdXJpdHltYXB3ZWIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VjdXJpdHltYXB3ZWIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY29ubmVjdG9yL3NlY3VyaXR5bWFwd2ViIi8+CiA8cHJvcGVydHkgbmFtZT0icG9vbG5hbWUiIHZhbHVlPSJNeVBvb2wiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZWN1cml0eW1hcHdlYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VjdXJpdHltYXB3ZWIvYnVpbGQueG1sCmluZGV4IGZhYjlkMGIuLjkzY2UzZjggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZWN1cml0eW1hcHdlYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlY3VyaXR5bWFwd2ViL2J1aWxkLnhtbApAQCAtMTMwLDcgKzEzMCw3IEBACiAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICA8YXJnIGxpbmU9ImRvbWFpbi5yZXNvdXJjZXMuY29ubmVjdG9yLWNvbm5lY3Rpb24tcG9vbC4ke3Bvb2xuYW1lfS5wcm9wZXJ0eS5QYXNzd29yZD0ke2RiLnB3ZH0iLz4KICAgICA8L2V4ZWM+Ci0gICAKKwogICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgPGFyZyBsaW5lPSJzZXQiLz4KICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZXJpYWxpemFibGV0ZXN0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VyaWFsaXphYmxldGVzdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDFiNTk4NWYuLmY2MzM1N2EgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZXJpYWxpemFibGV0ZXN0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlcmlhbGl6YWJsZXRlc3QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjb25uZWN0b3Itc2VyaWFsaXphYmxlLXRlc3QiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJyYXJmaWxlIiB2YWx1ZT0icmFyL2JsYWNrYm94LXR4LnJhciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlcmlhbGl6YWJsZXRlc3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlcmlhbGl6YWJsZXRlc3QvYnVpbGQueG1sCmluZGV4IDdjZDdkZjYuLjYyNmJiZDkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZXJpYWxpemFibGV0ZXN0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VyaWFsaXphYmxldGVzdC9idWlsZC54bWwKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgICAgICAgICBzcmNkaXI9Ii4iCiAgICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50L1dlYlRlc3QuamF2YSIgZGVzdGRpcj0iLiIvPgotICAgICAgICAKKwogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VyaWFsaXphYmxldGVzdC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VyaWFsaXphYmxldGVzdC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOTZmODcyZC4uNDY4YjcyYSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlcmlhbGl6YWJsZXRlc3QvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZXJpYWxpemFibGV0ZXN0L2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDksNyArNDksNyBAQAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCQorCiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlcmlhbGl6YWJsZXRlc3QvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9Cb290c3RyYXBIb2xkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZXJpYWxpemFibGV0ZXN0L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvQm9vdHN0cmFwSG9sZGVyLmphdmEKaW5kZXggOTk0Y2FkOC4uMzkwNzQ0ZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlcmlhbGl6YWJsZXRlc3QvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9Cb290c3RyYXBIb2xkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VyaWFsaXphYmxldGVzdC9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0Jvb3RzdHJhcEhvbGRlci5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgcHJpdmF0ZSBXb3JrTWFuYWdlciB3bTsKIAogICAgIHB1YmxpYyBCb290c3RyYXBIb2xkZXIoQm9vdHN0cmFwQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7ICAgIAorICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OwogICAgICAgICB0aGlzLndtID0gKFdvcmtNYW5hZ2VyKSBtYWtlQ29weU9mT2JqZWN0KGNvbnRleHQuZ2V0V29ya01hbmFnZXIoKSk7CiAgICAgICAgIGNoZWNrRXF1YWxpdHkod20sIGNvbnRleHQuZ2V0V29ya01hbmFnZXIoKSk7CiAgICAgICAgIHRoaXMueGF0ID0gKFhBVGVybWluYXRvcikgbWFrZUNvcHlPZk9iamVjdChjb250ZXh0LmdldFhBVGVybWluYXRvcigpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZXJpYWxpemFibGV0ZXN0L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvSmRiY0Nvbm5lY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZXJpYWxpemFibGV0ZXN0L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvSmRiY0Nvbm5lY3Rpb24uamF2YQppbmRleCA2YTcyNjdjLi5kNThhZjQ0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VyaWFsaXphYmxldGVzdC9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0pkYmNDb25uZWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlcmlhbGl6YWJsZXRlc3QvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9KZGJjQ29ubmVjdGlvbi5qYXZhCkBAIC0xODMsNyArMTgzLDcgQEAKICAgICB9CiAKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAvLyBUSEUgRk9MTE9XSU5HIEFQSVMgQVJFIE5FVyBGUk9NIEpESyAxLjQgLy8gICAgICAgIAorICAgIC8vIFRIRSBGT0xMT1dJTkcgQVBJUyBBUkUgTkVXIEZST00gSkRLIDEuNCAvLwogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiAgICAgLy8vLy8vLy8vLy8vLyAgQkVHSU4gIEpESyAxLjQgIC8vLy8vLy8vLy8vLy8vCkBAIC0zMjksMjcgKzMyOSwyNyBAQAogICAgIH0KIAogICAgIC8vLy8vLy8vLy8vLy8gIEVORCAgSkRLIDEuNCAgLy8vLy8vLy8vLy8vLy8KLSAgICAKKwogICAgIHB1YmxpYyBpbnQgZ2V0TmV0d29ya1RpbWVvdXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0TmV0d29ya1RpbWVvdXQoRXhlY3V0b3IgZXhlY3V0b3IsIGludCBtaWxsaXNlY29uZHMpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhYm9ydChFeGVjdXRvciBleGVjdXRvcikgIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2NoZW1hKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0U2NoZW1hKFN0cmluZyBzY2hlbWEpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogCiAgICAgdm9pZCBhc3NvY2lhdGVDb25uZWN0aW9uKEpkYmNNYW5hZ2VkQ29ubmVjdGlvbiBuZXdNYykKICAgICAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VyaWFsaXphYmxldGVzdC9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L1Jlc291cmNlQWRhcHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlcmlhbGl6YWJsZXRlc3QvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9SZXNvdXJjZUFkYXB0ZXIuamF2YQppbmRleCA4ZjJmMzU0Li43OTI1MDk4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VyaWFsaXphYmxldGVzdC9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L1Jlc291cmNlQWRhcHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZXJpYWxpemFibGV0ZXN0L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvUmVzb3VyY2VBZGFwdGVyLmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gYWN0aXZhdGlvblNwZWNzKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gbnVsbDsgIAorICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKICAgICBwdWJsaWMgQm9vdHN0cmFwQ29udGV4dCBnZXRCb290c3RyYXBDb250ZXh0KCl7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VyaWFsaXphYmxldGVzdC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VyaWFsaXphYmxldGVzdC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggNDIzNDExNS4uZWQ2ZGJhYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlcmlhbGl6YWJsZXRlc3Qvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZXJpYWxpemFibGV0ZXN0L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSwyMCArMSwyMCBAQAotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOw0KLQ0KLUNSRUFURSBUQUJMRSBUWExFVkVMU1dJVENIICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMTAsICdhYmNkJyk7DQotSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMTEsICdwcXJzJyk7DQotDQotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsNCi0NCi1DUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSDIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIMiBWQUxVRVMoMSwgJ2FiY2QnKTsNCi1JTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIMiBWQUxVRVMoMiwgJ3BxcnMnKTsNCi0NCitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7CisKK0NSRUFURSBUQUJMRSBUWExFVkVMU1dJVENIICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0lOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDEwLCAnYWJjZCcpOworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMTEsICdwcXJzJyk7CisKK0Ryb3AgdGFibGUgVFhMRVZFTFNXSVRDSDI7CisKK0NSRUFURSBUQUJMRSBUWExFVkVMU1dJVENIMiAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIMiBWQUxVRVMoMSwgJ2FiY2QnKTsKK0lOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0gyIFZBTFVFUygyLCAncHFycycpOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VyaWFsaXphYmxldGVzdC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlcmlhbGl6YWJsZXRlc3Qvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCAwYzEyNDJmLi5kMTFhMTE1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VyaWFsaXphYmxldGVzdC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZXJpYWxpemFibGV0ZXN0L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEsMiArMSwyIEBACi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7DQotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsNCitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7CitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTJjYzc1ZC4uZGMxOWM5YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNiArMTUsMTYgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc3ViY2xhc3NpbmciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXN1YmNsYXNzaW5nIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSJzdWJjbGFzc2luZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvYnVpbGQueG1sCmluZGV4IDBmZDA5MGEuLjUyZWQzNGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9idWlsZC54bWwKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAmY29tbW9uQnVpbGQ7CiAgICAgJmNvbW1vblJ1bjsKICAgICAmdGVzdHByb3BlcnRpZXM7Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsIHNldHVwLCBkZXBsb3ktZWFyLCBydW4tZWFyLCAgdW5kZXBsb3ktZWFyLCB1bnNldHVwIi8+CiAKIApAQCAtMzksMTQgKzM5LDE0IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgICAgPGFudCBkaXI9InJhIiB0YXJnZXQ9ImNsZWFuIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIj4KICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29ubmVjdG9yIj4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvc2ltcGxlQmFuay5zcWwiLz4KICAgICAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAgCisKICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXJhLWNvbmZpZyIvPgotICAgICAgICAKKwogICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktcmFyLWNvbW1vbiI+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJhcmZpbGUiIHZhbHVlPSJyYS9wdWJsaXNoL2xpYi9qZGJjcmEucmFyIi8+CiAgICAgICAgICAgICA8L2FudGNhbGw+CkBAIC04MCwxOCArODAsMTggQEAKICAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtYWRtaW4tb2JqZWN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iY3JlYXRlLWFkbWluLW9iamVjdCAtLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSAtLXJlc3R5cGUgY29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluIC0tcmFuYW1lIGpkYmNyYSAtLXByb3BlcnR5IFRhYmxlTmFtZT1jdXN0b21lcjI6Sm5kaU5hbWU9amRiYy9lamItc3ViY2xhc3Npbmc6U2NoZW1hTmFtZT1EQlVTRVI6Tm9PZlJvd3M9MSIvPgotCSAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9ImVpcy9qZGJjQWRtaW4iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSJlaXMvamRiY0FkbWluIi8+CiAgICAgICAgICA8L2FudGNhbGw+CiAgICAgIDwvdGFyZ2V0PgogCiAgICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLWFkbWluLW9iamVjdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iZGVsZXRlLWFkbWluLW9iamVjdCIvPgotCSAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IGVpcy9qZGJjQWRtaW4iLz4KLQkgPC9hbnRjYWxsPgotCSA8IS0tPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4tLT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtYWRtaW4tb2JqZWN0Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gZWlzL2pkYmNBZG1pbiIvPgorICAgICA8L2FudGNhbGw+CisgICAgIDwhLS08YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPi0tPgogICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmVzdGFydCI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTk5LDMxICs5OSwzMSBAQAogICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yYS1jb25maWciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJjcmVhdGUtcmVzb3VyY2UtYWRhcHRlci1jb25maWcgIC0tcHJvcGVydHkgUkFQcm9wZXJ0eT1WQUxJRCIvPgotCSAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9ImpkYmNyYSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9ImpkYmNyYSIvPgogICAgICAgICAgPC9hbnRjYWxsPgogICAgICA8L3RhcmdldD4KIAogICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yYS1jb25maWciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImRlbGV0ZS1yZXNvdXJjZS1hZGFwdGVyLWNvbmZpZyIvPgotCSAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9ImpkYmNyYSIvPgotCSA8L2FudGNhbGw+Ci0JIDwhLS08YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPi0tPgorICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImRlbGV0ZS1yZXNvdXJjZS1hZGFwdGVyLWNvbmZpZyIvPgorICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9ImpkYmNyYSIvPgorICAgICA8L2FudGNhbGw+CisgICAgIDwhLS08YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPi0tPgogICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCI+Ci0JICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29ubmVjdG9yIj4KLSAgICAgICAgCTxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wQmFua1RhYmxlcy5zcWwiLz4KLQkgICAgICA8L2FudGNhbGw+Ci0JCi0JICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXJlc291cmNlIi8+Ci0JICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXBvb2wiLz4KLQkgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtYWRtaW4tb2JqZWN0Ii8+Ci0JICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktcmFyLWNvbW1vbiI+Ci0JICAgIAk8cGFyYW0gbmFtZT0idW5kZXBsb3lyYXIiIHZhbHVlPSJqZGJjcmEiLz4KLQkgICAgPC9hbnRjYWxsPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbm5lY3RvciI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcEJhbmtUYWJsZXMuc3FsIi8+CisgICAgICAgICAgPC9hbnRjYWxsPgorCisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXJlc291cmNlIi8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXBvb2wiLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtYWRtaW4tb2JqZWN0Ii8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktcmFyLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0idW5kZXBsb3lyYXIiIHZhbHVlPSJqZGJjcmEiLz4KKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcG9vbCI+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtY29ubmVjdG9yLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5jb25wb29sLm5hbWUiIHZhbHVlPSJzdGFuZGFsb25lLXJhLXBvb2wiLz4KQEAgLTEzMyw3ICsxMzMsNyBAQAogICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtY29ubmVjdG9yLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5qbmRpLm5hbWUiIHZhbHVlPSJqZGJjL2VqYi1zdWJjbGFzc2luZyIvPgotCQk8L2FudGNhbGw+CisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgpAQCAtMTQ5LDkgKzE0OSw5IEBACiAgICAgICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBDb21waWxpbmcgdGVzdCBzb3VyY2UgZmlsZXMiIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgICA8amF2YWMgc3JjZGlyPSJzZXJ2bGV0IgogICAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCi0JIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9OnJhL3B1Ymxpc2gvaW50ZXJuYWwvY2xhc3NlcyIKKyAgICAgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH06cmEvcHVibGlzaC9pbnRlcm5hbC9jbGFzc2VzIgogICAgICAgICAgZGVidWc9Im9uIgotCSBmYWlsb25lcnJvcj0idHJ1ZSIvPgorICAgICBmYWlsb25lcnJvcj0idHJ1ZSIvPgogICAgICA8L3RhcmdldD4KIAogCkBAIC0xNjAsMzEgKzE2MCwzMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgPGFudCBkaXI9InJhIiB0YXJnZXQ9ImFzc2VtYmxlIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgPC9hbnRjYWxsPgotICAgICAgIAorCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+CiAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgIDwvYW50Y2FsbD4KIAotICAgIAorCiAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgICAKLSAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgCisgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIKICAgICAgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgotICAgIAk8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+Ci0gCSAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KLQkgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgotCSAgICA8L2ZpbGVzZXQ+CisgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KKyAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgorICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CisgICAgICAgIDwvZmlsZXNldD4KICAgICA8L2Vhcj4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTE5MiwyNyArMTkyLDI3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktd2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLXdhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tY29ubmVjdG9yIChzdGFuZC1hbG9uZSB3YXIgYW5kIHJhciBiYXNlZCkiLz4KLQk8L2FudGNhbGw+CisgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9IndlYi10by1jb25uZWN0b3IgKHN0YW5kLWFsb25lIHdhciBhbmQgcmFyIGJhc2VkKSIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tY29ubmVjdG9yIChlYXIgYmFzZWQpIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tY29ubmVjdG9yIChlYXIgYmFzZWQpIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXJhLWNvbmZpZyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LXdhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCAxZDEyMDBkLi5kZjRiYjkzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjksMjAgKzI5LDIwIEBACiAgICAgICAgIDxyZXMtcmVmLW5hbWU+amRiYy9TaW1wbGVCYW5rPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9lamItc3ViY2xhc3Npbmc8L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4gCi0gICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPiAKLSAgICAgPGJlYW4tcG9vbD4gCi0gICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPiAKLSAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PiAKLSAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPiAKLSAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgPC9iZWFuLXBvb2w+IAotICAgICAgPGJlYW4tY2FjaGU+IAotICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPiAKLSAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4gCi0gICAgICAgIDxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9yZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4gCi0gICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PiAKLSAgICAgIDwvYmVhbi1jYWNoZT4gCisgICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPgorICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4KKyAgICAgPGJlYW4tcG9vbD4KKyAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+CisgICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4KKyAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPgorICAgICAgICAgPHBvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgIDwvYmVhbi1wb29sPgorICAgICAgPGJlYW4tY2FjaGU+CisgICAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+CisgICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICAgIDxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9yZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkxSVTwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+CisgICAgICA8L2JlYW4tY2FjaGU+CiAgICAgPC9lamI+CiAgICAgPGVqYj4KICAgICAgIDxlamItbmFtZT5DdXN0b21lckNoZWNraW5nRUpCPC9lamItbmFtZT4KQEAgLTUxLDIwICs1MSwyMCBAQAogICAgICAgICA8cmVzLXJlZi1uYW1lPmpkYmMvU2ltcGxlQmFuazwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmpkYmMvZWpiLXN1YmNsYXNzaW5nPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+IAotICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4gCi0gICAgIDxiZWFuLXBvb2w+IAotICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4gCi0gICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4gCisgICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPgorICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4KKyAgICAgPGJlYW4tcG9vbD4KKyAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+CisgICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4KKyAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPgogICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgotICAgICAgPC9iZWFuLXBvb2w+IAotICAgICAgPGJlYW4tY2FjaGU+IAorICAgICAgPC9iZWFuLXBvb2w+CisgICAgICA8YmVhbi1jYWNoZT4KICAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4KICAgICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgogICAgICAgICAgIDxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9yZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4KICAgICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4KLSAgICAgIDwvYmVhbi1jYWNoZT4gCisgICAgICA8L2JlYW4tY2FjaGU+CiAgICAgPC9lamI+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KIDwvc3VuLWVqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9lamIvQ3VzdG9tZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL2VqYi9DdXN0b21lci5qYXZhCmluZGV4IDU5MjJmMzEuLjM2MTVlMTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL2VqYi9DdXN0b21lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL2VqYi9DdXN0b21lci5qYXZhCkBAIC00Niw0ICs0Niw0IEBACiAKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKaW5kZXggZmYxNWU3ZS4uODlkYzMyMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhCkBAIC0yMiw0ICsyMiw0IEBACiB7CiB9CiAKLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhCmluZGV4IGVlMGQxN2MuLjRiNTQ0NDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQpAQCAtOTQsNSArOTQsNSBAQAogICB9CiAKIH0KLSAgICAKLSAgICAKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9lamIvQ3VzdG9tZXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL2VqYi9DdXN0b21lckVKQi5qYXZhCmluZGV4IDA1MjBiNjAuLjA3MjIwZGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL2VqYi9DdXN0b21lckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL2VqYi9DdXN0b21lckVKQi5qYXZhCkBAIC01Myw3ICs1Myw3IEBACiAKICAgcHVibGljIFN0cmluZyBnZXRBZGRyZXNzMSgpCiAgIHsKLSAgICByZXR1cm4gYWRkcmVzczE7IAorICAgIHJldHVybiBhZGRyZXNzMTsKICAgfQogCiAgIHB1YmxpYyBTdHJpbmcgZ2V0QWRkcmVzczIoKQpAQCAtMTM5LDcgKzEzOSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1FMIGV4Y2VwdGlvbiBvY2N1cmVkIGluIGVqYlJlbW92ZSBtZXRob2QiKTsKICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgIH0KLSAgICAKKwogICB9CiAKICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKQpAQCAtMjA2LDEyICsyMDYsMTIgQEAKICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgewogICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTUUxFeGNlcHRpb24gb2NjdXJyZWQgaW4gZWpiTG9hZCgpIG1ldGhvZCIpOwogICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9ICAgCisgICAgfQogICB9CiAKICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQogICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogfQotICAgICAgCi0gICAgCi0gICAgCisKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEKaW5kZXggMjc0MDY5Mi4uYzQ1YTFjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YQpAQCAtMjIsNCArMjIsNCBAQAogewogfQogCi0gIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEKaW5kZXggZjMwYjUwNi4uYjBjZTdiNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YQpAQCAtOTUsNiArOTUsNiBAQAogICB9CiAKIH0KLSAgICAgIAotICAgIAotICAgIAorCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWUyZWNhMC4uZmQyMWMzZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNCw3ICsxNCw3IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogIwogCi0gICAgCisKICMjIyBDb21wb25lbnQgUHJvcGVydGllcyAjIyMKIHNyYy5kaXI9c3JjCiBjb21wb25lbnQucHVibGlzaC5ob21lPS4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL2J1aWxkLnhtbAppbmRleCBjYjY2YTQ1Li4zYWNlZWYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvYnVpbGQueG1sCkBAIC0yMyw2MiArMjMsNjIgQEAKIAogPHByb2plY3QgbmFtZT0iSkRCQ0Nvbm5lY3RvciB0b3AgbGV2ZWwiIGRlZmF1bHQ9ImJ1aWxkIj4KICAgICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vamRiY3JhL3NwaSIvPgotICAgIAorCiAgICAgJmNvbW1vbjsKICAgICAmdGVzdGNvbW1vbjsKICAgICA8cHJvcGVydHkgZmlsZT0iLi9idWlsZC5wcm9wZXJ0aWVzIi8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlLGFzc2VtYmxlIiAvPgotICAgICAgICAgIAorCiAKICAgICA8IS0tIGluaXQuIEluaXRpYWxpemF0aW9uIGludm9sdmVzIGNyZWF0aW5nIHB1Ymxpc2hpbmcgZGlyZWN0b3JpZXMgYW5kCi0gICAgICAgICBPUyBzcGVjaWZpYyB0YXJnZXRzLiAtLT4gCisgICAgICAgICBPUyBzcGVjaWZpYyB0YXJnZXRzLiAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImluaXQiIGRlc2NyaXB0aW9uPSIke2NvbXBvbmVudC5uYW1lfSBpbml0aWFsaXphdGlvbiI+CiAgICAgICAgIDx0c3RhbXA+CiAgICAgICAgICAgICA8Zm9ybWF0IHByb3BlcnR5PSJzdGFydC50aW1lIiBwYXR0ZXJuPSJNTS9kZC95eXl5IGhoOm1tIGFhIi8+Ci0gICAgICAgIDwvdHN0YW1wPiAgICAKKyAgICAgICAgPC90c3RhbXA+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkJ1aWxkaW5nIGNvbXBvbmVudCAke2NvbXBvbmVudC5uYW1lfSIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iLz4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ii8+ICAgIAorICAgICAgICA8bWtkaXIgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iLz4KICAgICA8L3RhcmdldD4KLSAgICA8IS0tIGNvbXBpbGUgLS0+IAorICAgIDwhLS0gY29tcGlsZSAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQiCi0gICAgICAgICAgICBkZXNjcmlwdGlvbj0iQ29tcGlsZSBjb20vc3VuLyogY29tL2lwbGFuZXQvKiBzb3VyY2VzIj4gIAorICAgICAgICAgICAgZGVzY3JpcHRpb249IkNvbXBpbGUgY29tL3N1bi8qIGNvbS9pcGxhbmV0Lyogc291cmNlcyI+CiAgICAgICAgIDwhLS08ZWNobyBtZXNzYWdlPSJDb25uZWN0b3IgYXBpIHJlc2lkZXMgaW4gJHtjb25uZWN0b3ItYXBpLmphcn0iLz4tLT4KLSAgICAgICAgPGphdmFjIHNyY2Rpcj0iJHtzcmMuZGlyfSIgCisgICAgICAgIDxqYXZhYyBzcmNkaXI9IiR7c3JjLmRpcn0iCiAgICAgICAgICAgICAgICBkZXN0ZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoPgotCQk8ZmlsZXNldCBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcyI+Ci0JCSAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIgLz4KLQkJPC9maWxlc2V0PgorICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcyI+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIgLz4KKyAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJjb20vc3VuL2pkYmNyYS8qKiIvPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iY29tL3N1bi9hcHBzZXJ2LyoqIi8+CiAgICAgICAgIDwvamF2YWM+CiAgICAgPC90YXJnZXQ+Ci0gICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkIi8+CiAKLSAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiPiAgICAKLSAgICAJCi0JPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiYy5qYXIiIAotICAgICAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IiBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLCAKLSAgICAgICAgICAgIGNvbS9zdW4vYXBwc2Vydi8qKi8qLCBjb20vc3VuL2pkYmNyYS91dGlsLyoqLyosIGNvbS9zdW4vamRiY3JhL2NvbW1vbi8qKi8qIi8+IAotICAgCQotICAgICAgICA8Y29weSBmaWxlPSIke3NyYy5kaXJ9L2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIiAKLSAgICAgICAgICAgICAgICB0b2ZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIj4KKworICAgIDxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmMuamFyIgorICAgICAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IiBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLAorICAgICAgICAgICAgY29tL3N1bi9hcHBzZXJ2LyoqLyosIGNvbS9zdW4vamRiY3JhL3V0aWwvKiovKiwgY29tL3N1bi9qZGJjcmEvY29tbW9uLyoqLyoiLz4KKworICAgICAgICA8Y29weSBmaWxlPSIke3NyYy5kaXJ9L2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIgorICAgICAgICAgICAgICAgIHRvZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiY3JhLnJhciIgCi0JCWJhc2VkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIgaW5jbHVkZXM9ImpkYmMuamFyIj4KKyAgICAgICA8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjcmEucmFyIgorICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iIGluY2x1ZGVzPSJqZGJjLmphciI+CiAKLSAgIAkJPG1ldGFpbmYgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KIAotICAgCTxkZWxldGUgZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIvPgotCQorICAgICAgIDxkZWxldGUgZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIvPgorCiAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVzY3JpcHRpb249IkNsZWFuIHRoZSBidWlsZCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKaW5kZXggOWY4Mzk5YS4uYjZlZjMwYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQpAQCAtMjAsMTUgKzIwLDE1IEBACiBpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOwogCiAvKioKLSAqIFRoZSA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uIAorICogVGhlIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24KICAqIHNlcnZlciB3aWxsIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4gQW4gYXBwbGljYXRpb24gcHJvZ3JhbSB3b3VsZCBiZSBhYmxlCi0gKiB0byB1c2UgdGhpcyBpbnRlcmZhY2UgdG8gZG8gdGhlIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCBieSBTdW5PTkUgCisgKiB0byB1c2UgdGhpcyBpbnRlcmZhY2UgdG8gZG8gdGhlIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCBieSBTdW5PTkUKICAqIGFwcGxpY2F0aW9uIHNlcnZlci4KLSAqIDxwPkEgc2FtcGxlIGNvZGUgZm9yIGdldHRpbmcgZHJpdmVyJ3MgY29ubmVjdGlvbiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBsaWtlIAorICogPHA+QSBzYW1wbGUgY29kZSBmb3IgZ2V0dGluZyBkcml2ZXIncyBjb25uZWN0aW9uIGltcGxlbWVudGF0aW9uIHdvdWxkIGxpa2UKICAqIHRoZSBmb2xsb3dpbmcuCiAgKiA8cHJlPgogICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICBjb20uc3VuLmFwcHNlcnYuRGF0YVNvdXJjZSBkcyA9IChjb20uc3VuLmFwcHNlcnYuRGF0YVNPdXJjZSkgaWMubG9va3VwKCJqZGJjL1BvaW50QmFzZSIpOyAKKyAgICAgY29tLnN1bi5hcHBzZXJ2LkRhdGFTb3VyY2UgZHMgPSAoY29tLnN1bi5hcHBzZXJ2LkRhdGFTT3VyY2UpIGljLmxvb2t1cCgiamRiYy9Qb2ludEJhc2UiKTsKICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgIENvbm5lY3Rpb24gZHJpdmVyY29uID0gZHMuZ2V0Q29ubmVjdGlvbihjb24pOwogCkBAIC0zNiwxMyArMzYsMTMgQEAKIAogICAgICBjb24uY2xvc2UoKTsKICAgIDwvcHJlPgotICogCisgKgogICogQGF1dGhvciBCaW5vZCBQLkcKICAqLwogcHVibGljIGludGVyZmFjZSBEYXRhU291cmNlIGV4dGVuZHMgamF2YXguc3FsLkRhdGFTb3VyY2UgewogCiAgICAgLyoqCi0gICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIgCisgICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIKICAgICAgKiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24gc2VydmVyLiBJZiBhbiBhY3R1YWwgY29ubmVjdGlvbiBpcwogICAgICAqIHN1cHBsaWVkIGFzIGFyZ3VtZW50LCB0aGVuIGl0IHdpbGwgYmUganVzdCByZXR1cm5lZC4KICAgICAgKgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCmluZGV4IGMyODIyZTIuLjZhMzY2YjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKQEAgLTI3LDIyICsyNywyMiBAQAogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKIC8qKgotICogVXRpbGl0eSBjbGFzcywgd2hpY2ggd291bGQgY3JlYXRlIG5lY2Vzc2FyeSBEYXRhc291cmNlIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlIAorICogVXRpbGl0eSBjbGFzcywgd2hpY2ggd291bGQgY3JlYXRlIG5lY2Vzc2FyeSBEYXRhc291cmNlIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlCiAgKiBzcGVjaWZpY2F0aW9uLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCi0gKiBAc2VlCQljb20uc3VuLmpkYmNyYS5jb21tb24uRGF0YVNvdXJjZVNwZWMKLSAqIEBzZWUJCWNvbS5zdW4uamRiY3JhLnV0aWwuTWV0aG9kRXhjZWN1dG9yCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRworICogQHNlZSAgICAgICAgY29tLnN1bi5qZGJjcmEuY29tbW9uLkRhdGFTb3VyY2VTcGVjCisgKiBAc2VlICAgICAgICBjb20uc3VuLmpkYmNyYS51dGlsLk1ldGhvZEV4Y2VjdXRvcgogICovCiBwdWJsaWMgY2xhc3MgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZXsKIAogICAgIHByaXZhdGUgRGF0YVNvdXJjZVNwZWMgc3BlYzsKLSAgICAKKwogICAgIHByaXZhdGUgSGFzaHRhYmxlIGRyaXZlclByb3BlcnRpZXMgPSBudWxsOwotICAgIAotICAgIHByaXZhdGUgTWV0aG9kRXhlY3V0b3IgZXhlY3V0b3IgPSBudWxsOyAgICAKLSAgICAKKworICAgIHByaXZhdGUgTWV0aG9kRXhlY3V0b3IgZXhlY3V0b3IgPSBudWxsOworCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTUwLDE2NyArNTAsMTY3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnID0gZmFsc2U7CiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0IGEgRGF0YVNvdXJjZSBPYmplY3QgZnJvbSB0aGUgc3BlYy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3BlYwk8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3BlYyAgICA8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIERhdGFTb3VyY2VPYmplY3RCdWlsZGVyKERhdGFTb3VyY2VTcGVjIHNwZWMpIHsKLSAgICAJdGhpcy5zcGVjID0gc3BlYzsKLSAgICAJZXhlY3V0b3IgPSBuZXcgTWV0aG9kRXhlY3V0b3IoKTsKKyAgICAgICAgdGhpcy5zcGVjID0gc3BlYzsKKyAgICAgICAgZXhlY3V0b3IgPSBuZXcgTWV0aG9kRXhlY3V0b3IoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3QgdGhlIERhdGFTb3VyY2UgT2JqZWN0IGZyb20gdGhlIHNwZWMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCU9iamVjdCBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgRGF0YVNvdXJjZVNwZWMuCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gaWYgdGhlIGNsYXNzIGlzIG5vdCBmb3VuZCBvciBzb21lIGlzc3VlIGluIGV4ZWN1dGluZwotICAgICAqCQlzb21lIG1ldGhvZC4KKyAgICAgKiBAcmV0dXJuICAgIE9iamVjdCBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgRGF0YVNvdXJjZVNwZWMuCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gaWYgdGhlIGNsYXNzIGlzIG5vdCBmb3VuZCBvciBzb21lIGlzc3VlIGluIGV4ZWN1dGluZworICAgICAqICAgICAgICBzb21lIG1ldGhvZC4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGNvbnN0cnVjdERhdGFTb3VyY2VPYmplY3QoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCWRyaXZlclByb3BlcnRpZXMgPSBwYXJzZURyaXZlclByb3BlcnRpZXMoc3BlYyk7CisgICAgICAgIGRyaXZlclByb3BlcnRpZXMgPSBwYXJzZURyaXZlclByb3BlcnRpZXMoc3BlYyk7CiAgICAgICAgIE9iamVjdCBkYXRhU291cmNlT2JqZWN0ID0gZ2V0RGF0YVNvdXJjZU9iamVjdCgpOwogICAgICAgICBNZXRob2RbXSBtZXRob2RzID0gZGF0YVNvdXJjZU9iamVjdC5nZXRDbGFzcygpLmdldE1ldGhvZHMoKTsKICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBtZXRob2RzW2ldLmdldE5hbWUoKTsKLQkgICAgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0VXNlciIpKXsJICAgIAkKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQYXNzd29yZCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dpblRpbWVPdXQiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ1dyaXRlciIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR1dSSVRFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YWJhc2VOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhU291cmNlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREZXNjcmlwdGlvbiIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TmV0d29ya1Byb3RvY29sIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQb3J0TnVtYmVyIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0Um9sZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0U2VydmVyTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4U3RhdGVtZW50cyIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFNUQVRFTUVOVFMpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldEluaXRpYWxQb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLklOSVRJQUxQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWluUG9vbFNpemUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NSU5QT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4UG9vbFNpemUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4SWRsZVRpbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhJRExFVElNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UHJvcGVydHlDeWNsZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBST1BFUlRZQ1lDTEUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChkcml2ZXJQcm9wZXJ0aWVzLmNvbnRhaW5zS2V5KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSkpewotCSAgICAJVmVjdG9yIHZhbHVlcyA9IChWZWN0b3IpIGRyaXZlclByb3BlcnRpZXMuZ2V0KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSk7Ci0JICAgICAgICBleGVjdXRvci5ydW5NZXRob2QobWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0LCB2YWx1ZXMpOwotCSAgICB9CisgICAgICAgIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFVzZXIiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UGFzc3dvcmQiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9naW5UaW1lT3V0IikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dXcml0ZXIiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dXUklURVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFiYXNlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YVNvdXJjZU5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGVzY3JpcHRpb24iKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TmV0d29ya1Byb3RvY29sIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQb3J0TnVtYmVyIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0Um9sZU5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0U2VydmVyTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFN0YXRlbWVudHMiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhTVEFURU1FTlRTKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRJbml0aWFsUG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5JTklUSUFMUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1pblBvb2xTaXplIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUlOUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFBvb2xTaXplIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heElkbGVUaW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYSURMRVRJTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFByb3BlcnR5Q3ljbGUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QUk9QRVJUWUNZQ0xFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAoZHJpdmVyUHJvcGVydGllcy5jb250YWluc0tleShtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpKXsKKyAgICAgICAgICAgIFZlY3RvciB2YWx1ZXMgPSAoVmVjdG9yKSBkcml2ZXJQcm9wZXJ0aWVzLmdldChtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpOworICAgICAgICAgICAgZXhlY3V0b3IucnVuTWV0aG9kKG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCwgdmFsdWVzKTsKKyAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBkYXRhU291cmNlT2JqZWN0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgZXh0cmEgZHJpdmVyIHByb3BlcnRpZXMgZnJvbSB0aGUgRGF0YVNvdXJjZVNwZWMgb2JqZWN0IGFuZAogICAgICAqIHBhcnNlIHRoZW0gdG8gYSBzZXQgb2YgbWV0aG9kTmFtZSBhbmQgcGFyYW1ldGVycy4gUHJlcGFyZSBhIGhhc2h0YWJsZQogICAgICAqIGNvbnRhaW5pbmcgdGhlc2UgZGV0YWlscyBhbmQgcmV0dXJuLgogICAgICAqCi0gICAgICogQHBhcmFtCXNwZWMJPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEByZXR1cm4JSGFzaHRhYmxlIGNvbnRhaW5pbmcgbWV0aG9kIG5hbWVzIGFuZCBwYXJhbWV0ZXJzLAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JSWYgZGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBhbmQgcHJvcGVydHkgc3RyaW5nCi0gICAgICoJCQkJCWlzIG5vdCBudWxsLgorICAgICAqIEBwYXJhbSAgICBzcGVjICAgIDxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIEhhc2h0YWJsZSBjb250YWluaW5nIG1ldGhvZCBuYW1lcyBhbmQgcGFyYW1ldGVycywKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIElmIGRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgYW5kIHByb3BlcnR5IHN0cmluZworICAgICAqICAgICAgICAgICAgICAgICAgICBpcyBub3QgbnVsbC4KICAgICAgKi8KICAgICBwcml2YXRlIEhhc2h0YWJsZSBwYXJzZURyaXZlclByb3BlcnRpZXMoRGF0YVNvdXJjZVNwZWMgc3BlYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlTdHJpbmcgZGVsaW0gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOworICAgICAgICBTdHJpbmcgZGVsaW0gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogCiAgICAgICAgIFN0cmluZyBwcm9wID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7Ci0JaWYgKCBwcm9wID09IG51bGwgfHwgcHJvcC50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgICByZXR1cm4gbmV3IEhhc2h0YWJsZSgpOwotCX0gZWxzZSBpZiAoZGVsaW0gPT0gbnVsbCB8fCBkZWxpbS5lcXVhbHMoIiIpKSB7Ci0JICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbiAoIkRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24iKTsKLQl9Ci0JCi0JSGFzaHRhYmxlIHByb3BlcnRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JZGVsaW0gPSBkZWxpbS50cmltKCk7CQotCVN0cmluZyBzZXAgPSBkZWxpbStkZWxpbTsKLQlpbnQgc2VwTGVuID0gc2VwLmxlbmd0aCgpOwotCVN0cmluZyBjYWNoZSA9IHByb3A7Ci0JVmVjdG9yIG1ldGhvZHMgPSBuZXcgVmVjdG9yKCk7Ci0JCi0Jd2hpbGUgKGNhY2hlLmluZGV4T2Yoc2VwKSAhPSAtMSkgewotCSAgICBpbnQgaW5kZXggPSBjYWNoZS5pbmRleE9mKHNlcCk7Ci0JICAgIFN0cmluZyBuYW1lID0gY2FjaGUuc3Vic3RyaW5nKDAsaW5kZXgpOwotCSAgICBpZiAobmFtZS50cmltKCkgIT0gIiIpIHsKLQkgICAgICAgIG1ldGhvZHMuYWRkKG5hbWUpOwotCSAgICAJY2FjaGUgPSBjYWNoZS5zdWJzdHJpbmcoaW5kZXgrc2VwTGVuKTsKLQkgICAgfQotCX0KLQkKLSAgICAJRW51bWVyYXRpb24gYWxsTWV0aG9kcyA9IG1ldGhvZHMuZWxlbWVudHMoKTsKLSAgICAJd2hpbGUgKGFsbE1ldGhvZHMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAJICAgIFN0cmluZyBvbmVNZXRob2QgPSAoU3RyaW5nKSBhbGxNZXRob2RzLm5leHRFbGVtZW50KCk7ICAgIAkgICAgCi0gICAgCSAgICBpZiAoIW9uZU1ldGhvZC50cmltKCkuZXF1YWxzKCIiKSkgewotICAgIAkgICAgCVN0cmluZyBtZXRob2ROYW1lID0gbnVsbDsKLSAgICAJICAgIAlWZWN0b3IgcGFybXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCSAgICAJU3RyaW5nVG9rZW5pemVyIG1ldGhvZERldGFpbHMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKG9uZU1ldGhvZCxkZWxpbSk7Ci0JCWZvciAoaW50IGk9MDsgbWV0aG9kRGV0YWlscy5oYXNNb3JlVG9rZW5zKCk7aSsrICkgewotCQkgICAgU3RyaW5nIHRva2VuID0gKFN0cmluZykgbWV0aG9kRGV0YWlscy5uZXh0VG9rZW4oKTsKLQkJICAgIGlmIChpPT0wKSB7Ci0JCSAgICAJbWV0aG9kTmFtZSA9IHRva2VuLnRvVXBwZXJDYXNlKCk7Ci0JCSAgICB9IGVsc2UgewotCQkgICAgCXBhcm1zLmFkZCh0b2tlbik7CQkgICAgCQotCQkgICAgfQotCQl9Ci0JCXByb3BlcnRpZXMucHV0KG1ldGhvZE5hbWUscGFybXMpOwotICAgIAkgICAgfSAgICAJICAgIAotICAgIAl9Ci0gICAgCXJldHVybiBwcm9wZXJ0aWVzOworICAgIGlmICggcHJvcCA9PSBudWxsIHx8IHByb3AudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBIYXNodGFibGUoKTsKKyAgICB9IGVsc2UgaWYgKGRlbGltID09IG51bGwgfHwgZGVsaW0uZXF1YWxzKCIiKSkgeworICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24gKCJEZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGluIHRoZSBjb25maWd1cmF0aW9uIik7CiAgICAgfQotICAgIAorCisgICAgSGFzaHRhYmxlIHByb3BlcnRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgZGVsaW0gPSBkZWxpbS50cmltKCk7CisgICAgU3RyaW5nIHNlcCA9IGRlbGltK2RlbGltOworICAgIGludCBzZXBMZW4gPSBzZXAubGVuZ3RoKCk7CisgICAgU3RyaW5nIGNhY2hlID0gcHJvcDsKKyAgICBWZWN0b3IgbWV0aG9kcyA9IG5ldyBWZWN0b3IoKTsKKworICAgIHdoaWxlIChjYWNoZS5pbmRleE9mKHNlcCkgIT0gLTEpIHsKKyAgICAgICAgaW50IGluZGV4ID0gY2FjaGUuaW5kZXhPZihzZXApOworICAgICAgICBTdHJpbmcgbmFtZSA9IGNhY2hlLnN1YnN0cmluZygwLGluZGV4KTsKKyAgICAgICAgaWYgKG5hbWUudHJpbSgpICE9ICIiKSB7CisgICAgICAgICAgICBtZXRob2RzLmFkZChuYW1lKTsKKyAgICAgICAgICAgIGNhY2hlID0gY2FjaGUuc3Vic3RyaW5nKGluZGV4K3NlcExlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAgICAgRW51bWVyYXRpb24gYWxsTWV0aG9kcyA9IG1ldGhvZHMuZWxlbWVudHMoKTsKKyAgICAgICAgd2hpbGUgKGFsbE1ldGhvZHMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBvbmVNZXRob2QgPSAoU3RyaW5nKSBhbGxNZXRob2RzLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICBpZiAoIW9uZU1ldGhvZC50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gbnVsbDsKKyAgICAgICAgICAgICAgICBWZWN0b3IgcGFybXMgPSBuZXcgVmVjdG9yKCk7CisgICAgICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIG1ldGhvZERldGFpbHMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKG9uZU1ldGhvZCxkZWxpbSk7CisgICAgICAgIGZvciAoaW50IGk9MDsgbWV0aG9kRGV0YWlscy5oYXNNb3JlVG9rZW5zKCk7aSsrICkgeworICAgICAgICAgICAgU3RyaW5nIHRva2VuID0gKFN0cmluZykgbWV0aG9kRGV0YWlscy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgIGlmIChpPT0wKSB7CisgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSA9IHRva2VuLnRvVXBwZXJDYXNlKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBhcm1zLmFkZCh0b2tlbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHJvcGVydGllcy5wdXQobWV0aG9kTmFtZSxwYXJtcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUgc3BlYy4KICAgICAgKgotICAgICAqIEByZXR1cm4JSW5pdGlhbCBEYXRhU291cmNlIE9iamVjdCBpbnN0YW5jZS4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBJZiBjbGFzcyBuYW1lIGlzIHdyb25nIG9yIGNsYXNzcGF0aCBpcyBub3Qgc2V0Ci0gICAgICoJCXByb3Blcmx5LgorICAgICAqIEByZXR1cm4gICAgSW5pdGlhbCBEYXRhU291cmNlIE9iamVjdCBpbnN0YW5jZS4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBJZiBjbGFzcyBuYW1lIGlzIHdyb25nIG9yIGNsYXNzcGF0aCBpcyBub3Qgc2V0CisgICAgICogICAgICAgIHByb3Blcmx5LgogICAgICAqLwogICAgIHByaXZhdGUgT2JqZWN0IGdldERhdGFTb3VyY2VPYmplY3QoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCVN0cmluZyBjbGFzc05hbWUgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOwotICAgICAgICB0cnkgeyAgICAgICAgICAgIAorICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIGRhdGFTb3VyY2VDbGFzcyA9IENsYXNzLmZvck5hbWUoY2xhc3NOYW1lKTsKICAgICAgICAgICAgIE9iamVjdCBkYXRhU291cmNlT2JqZWN0ID0gZGF0YVNvdXJjZUNsYXNzLm5ld0luc3RhbmNlKCk7CiAgICAgICAgICAgICByZXR1cm4gZGF0YVNvdXJjZU9iamVjdDsKICAgICAgICAgfSBjYXRjaChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGNmbmUpewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jbmZlX2RzIiwgY2ZuZSk7Ci0JCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NuZmVfZHMiLCBjZm5lKTsKKwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDbGFzcyBOYW1lIGlzIHdyb25nIG9yIENsYXNzIHBhdGggaXMgbm90IHNldCBmb3IgOiIgKyBjbGFzc05hbWUpOwogICAgICAgICB9IGNhdGNoKEluc3RhbnRpYXRpb25FeGNlcHRpb24gY2UpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaW5zdCIsIGNsYXNzTmFtZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2luc3QiLCBjbGFzc05hbWUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJFcnJvciBpbiBpbnN0YW50aWF0aW5nIiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBjZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hY2NfaW5zdCIsIGNsYXNzTmFtZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2FjY19pbnN0IiwgY2xhc3NOYW1lKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIEVycm9yIGluIGluc3RhbnRpYXRpbmciICsgY2xhc3NOYW1lKTsKICAgICAgICAgfQogICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQppbmRleCBlZjZjNGM5Li4zZGMxNTRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCkBAIC0xOSw5MiArMTksOTIgQEAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwogCiAvKioKLSAqIEVuY2Fwc3VsYXRlIHRoZSBEYXRhU291cmNlIG9iamVjdCBkZXRhaWxzIG9idGFpbmVkIGZyb20gCisgKiBFbmNhcHN1bGF0ZSB0aGUgRGF0YVNvdXJjZSBvYmplY3QgZGV0YWlscyBvYnRhaW5lZCBmcm9tCiAgKiBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlU3BlYyBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUk5BTUUJCQkJPSAxOyAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVNTV09SRAkJCQk9IDI7ICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVUkwJCQkJCT0gMzsgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR0lOVElNRU9VVAkJCT0gNDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dXUklURVIJCQkJPSA1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFCQVNFTkFNRQkJCT0gNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFTkFNRQkJCT0gNzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDUklQVElPTgkJCQk9IDg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS1BST1RPQ09MCQkJPSA5OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUlROVU1CRVIJCQkJPSAxMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0xFTkFNRQkJCQk9IDExOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFUlZFUk5BTUUJCQkJPSAxMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhTVEFURU1FTlRTCQkJPSAxMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTklUSUFMUE9PTFNJWkUJCQk9IDE0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTlBPT0xTSVpFCQkJCT0gMTU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYUE9PTFNJWkUJCQkJPSAxNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhJRExFVElNRQkJCQk9IDE3OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZQ1lDTEUJCQk9IDE4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERSSVZFUlBST1BFUlRJRVMJCQk9IDE5OyAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTEFTU05BTUUJCQkJPSAyMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUxJTUlURVIJCQkJPSAyMTsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYQURBVEFTT1VSQ0UJCQk9IDIyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0UJCQkJPSAyMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OUE9PTERBVEFTT1VSQ0UJCT0gMjQ7Ci0gICAgICAKLSAgICAvL0dKQ0lOVCAgICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQJPSAyNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OTUVUSE9ECQkJPSAyNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OVEFCTEVOQU1FCQkJPSAyNzsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUUkFOU0FDVElPTklTT0xBVElPTgkJPSAyODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHVUFSQU5URUVJU09MQVRJT05MRVZFTAkJPSAyOTsKLSAgICAgICAgICAgIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRVJOQU1FICAgICAgICAgICAgICAgID0gMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVNTV09SRCAgICAgICAgICAgICAgICA9IDI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVJMICAgICAgICAgICAgICAgICAgICA9IDM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HSU5USU1FT1VUICAgICAgICAgICAgPSA0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR1dSSVRFUiAgICAgICAgICAgICAgICA9IDU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQUJBU0VOQU1FICAgICAgICAgICAgPSA2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0VOQU1FICAgICAgICAgICAgPSA3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFU0NSSVBUSU9OICAgICAgICAgICAgICAgID0gODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLUFJPVE9DT0wgICAgICAgICAgICA9IDk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9SVE5VTUJFUiAgICAgICAgICAgICAgICA9IDEwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPTEVOQU1FICAgICAgICAgICAgICAgID0gMTE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVkVSTkFNRSAgICAgICAgICAgICAgICA9IDEyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFNUQVRFTUVOVFMgICAgICAgICAgICA9IDEzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOSVRJQUxQT09MU0laRSAgICAgICAgICAgID0gMTQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOUE9PTFNJWkUgICAgICAgICAgICAgICAgPSAxNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhQT09MU0laRSAgICAgICAgICAgICAgICA9IDE2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWElETEVUSU1FICAgICAgICAgICAgICAgID0gMTc7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlDWUNMRSAgICAgICAgICAgID0gMTg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRFJJVkVSUFJPUEVSVElFUyAgICAgICAgICAgID0gMTk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xBU1NOQU1FICAgICAgICAgICAgICAgID0gMjA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVMSU1JVEVSICAgICAgICAgICAgICAgID0gMjE7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYQURBVEFTT1VSQ0UgICAgICAgICAgICA9IDIyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0UgICAgICAgICAgICAgICAgPSAyMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OUE9PTERBVEFTT1VSQ0UgICAgICAgID0gMjQ7CisKKyAgICAvL0dKQ0lOVAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQgICAgPSAyNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OTUVUSE9EICAgICAgICAgICAgPSAyNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OVEFCTEVOQU1FICAgICAgICAgICAgPSAyNzsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRSQU5TQUNUSU9OSVNPTEFUSU9OICAgICAgICA9IDI4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdVQVJBTlRFRUlTT0xBVElPTkxFVkVMICAgICAgICA9IDI5OworCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgZGV0YWlscyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgcHJvcGVydHkuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcHJvcGVydHkJUHJvcGVydHkgTmFtZSB0byBiZSBzZXQuCi0gICAgICogQHBhcmFtCXZhbHVlCQlWYWx1ZSBvZiBwcm9wZXJ0eSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIHByb3BlcnR5ICAgIFByb3BlcnR5IE5hbWUgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICB2YWx1ZSAgICAgICAgVmFsdWUgb2YgcHJvcGVydHkgdG8gYmUgc2V0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERldGFpbChpbnQgcHJvcGVydHksIFN0cmluZyB2YWx1ZSkgewotICAgIAlkZXRhaWxzLnB1dChuZXcgSW50ZWdlcihwcm9wZXJ0eSksdmFsdWUpOworICAgICAgICBkZXRhaWxzLnB1dChuZXcgSW50ZWdlcihwcm9wZXJ0eSksdmFsdWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUgb2YgcHJvcGVydHkKICAgICAgKgotICAgICAqIEByZXR1cm4JVmFsdWUgb2YgdGhlIHByb3BlcnR5LgorICAgICAqIEByZXR1cm4gICAgVmFsdWUgb2YgdGhlIHByb3BlcnR5LgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGV0YWlsKGludCBwcm9wZXJ0eSkgewotICAgIAlpZiAoZGV0YWlscy5jb250YWluc0tleShuZXcgSW50ZWdlcihwcm9wZXJ0eSkpKSB7Ci0gICAgCSAgICByZXR1cm4gKFN0cmluZykgZGV0YWlscy5nZXQobmV3IEludGVnZXIocHJvcGVydHkpKTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHJldHVybiBudWxsOwotICAgIAl9ICAgIAkKKyAgICAgICAgaWYgKGRldGFpbHMuY29udGFpbnNLZXkobmV3IEludGVnZXIocHJvcGVydHkpKSkgeworICAgICAgICAgICAgcmV0dXJuIChTdHJpbmcpIGRldGFpbHMuZ2V0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyB3aGV0aGVyIHR3byA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0cwogICAgICAqIGFyZSBlcXVhbCBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb2JqCUluc3RhbmNlIG9mIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG9iaiAgICBJbnN0YW5jZSBvZiA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7Ci0gICAgCWlmIChvYmogaW5zdGFuY2VvZiBEYXRhU291cmNlU3BlYykgewotICAgIAkgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5lcXVhbHMoKChEYXRhU291cmNlU3BlYylvYmopLmRldGFpbHMpOwotICAgIAl9Ci0gICAgCXJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGFTb3VyY2VTcGVjKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmVxdWFscygoKERhdGFTb3VyY2VTcGVjKW9iaikuZGV0YWlscyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgaGFzaENvZGUgb2YgdGhpcyA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybgloYXNoQ29kZSBvZiB0aGlzIG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2hDb2RlIG9mIHRoaXMgb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgCXJldHVybiB0aGlzLmRldGFpbHMuaGFzaENvZGUoKTsKLSAgICB9ICAgIAorICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmhhc2hDb2RlKCk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbAppbmRleCBlZjQzOGZjLi4zYjRmYWViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iLiIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL2NvbW1vbiIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0zNiwxMyArMzYsMTMgQEAKIAogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxMyIgZGVwZW5kcz0iY29tcGlsZSIvPgogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxNCIgZGVwZW5kcz0iY29tcGlsZSIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxMyIgZGVwZW5kcz0icGFja2FnZSIvPgogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxNCIgZGVwZW5kcz0icGFja2FnZSIvPgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxMyIgZGVwZW5kcz0iY29tcGlsZTEzLCBwYWNrYWdlMTMiLz4KICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgotICAgIAorCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCmluZGV4IGRiYjU3MjkuLmJlYWJlNTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKQEAgLTI0LDI0ICsyNCwyNCBAQAogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yOwogCiAvKioKLSAqIEhvbGRzIHRoZSBqYXZhLnNxbC5Db25uZWN0aW9uIG9iamVjdCwgd2hpY2ggaXMgdG8gYmUgCisgKiBIb2xkcyB0aGUgamF2YS5zcWwuQ29ubmVjdGlvbiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlCiAgKiBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uIHByb2dyYW0uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0aW9uSG9sZGVyIGltcGxlbWVudHMgQ29ubmVjdGlvbnsgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvbkhvbGRlciBpbXBsZW1lbnRzIENvbm5lY3Rpb257CiAKICAgICBwcml2YXRlIENvbm5lY3Rpb24gY29uOwotICAgIAorCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKLSAgICBwcml2YXRlIGJvb2xlYW4gd3JhcHBlZEFscmVhZHkgPSBmYWxzZTsgICAgCi0gICAgCisKKyAgICBwcml2YXRlIGJvb2xlYW4gd3JhcHBlZEFscmVhZHkgPSBmYWxzZTsKKwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0Nsb3NlZCA9IGZhbHNlOwotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIHZhbGlkID0gdHJ1ZTsKLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBhY3RpdmUgPSBmYWxzZTsKICAgICAvKioKICAgICAgKiBUaGUgYWN0aXZlIGZsYWcgaXMgZmFsc2Ugd2hlbiB0aGUgY29ubmVjdGlvbiBoYW5kbGUgaXMKQEAgLTUzLDIxOSArNTMsMjE5IEBACiAgICAgICogZnVuY3Rpb24sIHRoZSBhYm92ZSBtZXRob2QgaW52b2NhdGlvbiBzdWNjZWVkczsgb3RoZXJ3aXNlCiAgICAgICogYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KICAgICAgKi8KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYSBDb25uZWN0aW9uIGhvbGRlci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uSG9sZGVyKENvbm5lY3Rpb24gY29uLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLmNvbiA9IGNvbjsKICAgICAgICAgdGhpcy5tYyAgPSBtYzsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gdGhpcyBob2xkZXIgb2JqZWN0LgotICAgICAqIAotICAgICAqIEByZXR1cm4JQ29ubmVjdGlvbiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIENvbm5lY3Rpb24gb2JqZWN0LgogICAgICAqLwogICAgIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbigpIHsKLSAgICAJcmV0dXJuIGNvbjsKKyAgICAgICAgcmV0dXJuIGNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBmbGFnIHRvIGluZGljYXRlIHRoYXQsIHRoZSBjb25uZWN0aW9uIGlzIHdyYXBwZWQgYWxyZWFkeSBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jd3JhcEZsYWcJCisgICAgICogQHBhcmFtICAgIHdyYXBGbGFnCiAgICAgICovCiAgICAgdm9pZCB3cmFwcGVkKGJvb2xlYW4gd3JhcEZsYWcpewogICAgICAgICB0aGlzLndyYXBwZWRBbHJlYWR5ID0gd3JhcEZsYWc7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB3aGV0aGVyIGl0IGlzIHdyYXBwZWQgYWxyZWFkeSBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXdyYXBwZWQgZmxhZy4KKyAgICAgKiBAcmV0dXJuICAgIHdyYXBwZWQgZmxhZy4KICAgICAgKi8KICAgICBib29sZWFuIGlzV3JhcHBlZCgpewogICAgICAgICByZXR1cm4gd3JhcHBlZEFscmVhZHk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHJlc3BvbnNpYmxlCiAgICAgICogZm9yIHRoaXMgY29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqLwogICAgIE1hbmFnZWRDb25uZWN0aW9uIGdldE1hbmFnZWRDb25uZWN0aW9uKCkgewogICAgICAgICByZXR1cm4gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVwbGFjZSB0aGUgYWN0dWFsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCB3aXRoIHRoZSBvbmUKLSAgICAgKiBzdXBwbGllZC4gQWxzbyByZXBsYWNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBsaW5rLiAgICAgCisgICAgICogc3VwcGxpZWQuIEFsc28gcmVwbGFjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gbGluay4KICAgICAgKgotICAgICAqIEBwYXJhbQljb24gPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQltYyAgPGNvZGU+IE1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIGNvbiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG1jICA8Y29kZT4gTWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICB2b2lkIGFzc29jaWF0ZUNvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24sIE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7Ci0gICAgCXRoaXMubWMgPSBtYzsKLSAgICAJdGhpcy5jb24gPSBjb247CisgICAgICAgIHRoaXMubWMgPSBtYzsKKyAgICAgICAgdGhpcy5jb24gPSBjb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2xlYXJzIGFsbCB3YXJuaW5ncyByZXBvcnRlZCBmb3IgdGhlIHVuZGVybHlpbmcgY29ubmVjdGlvbiAgb2JqZWN0LgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjbGVhcldhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsgICAgCi0JY2hlY2tWYWxpZGl0eSgpOworICAgIHB1YmxpYyB2b2lkIGNsZWFyV2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgY29uLmNsZWFyV2FybmluZ3MoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDbG9zZXMgdGhlIGxvZ2ljYWwgY29ubmVjdGlvbi4gICAgCisgICAgICogQ2xvc2VzIHRoZSBsb2dpY2FsIGNvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICAgIGlzQ2xvc2VkID0gdHJ1ZTsKLSAgICAgICAgbWMuY29ubmVjdGlvbkNsb3NlZChudWxsLCB0aGlzKTsgICAgICAgIAorICAgICAgICBtYy5jb25uZWN0aW9uQ2xvc2VkKG51bGwsIHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEludmFsaWRhdGVzIHRoaXMgb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGludmFsaWRhdGUoKSB7Ci0gICAgCXZhbGlkID0gZmFsc2U7CisgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2xvc2VzIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGludm9sdmVkIGluIHRoaXMuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwotICAgIHZvaWQgYWN0dWFsQ2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueyAgICAKKyAgICB2b2lkIGFjdHVhbENsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgICAgY29uLmNsb3NlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IHRoZSBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbW1pdCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5jb21taXQoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5jb21taXQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4gICAgIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KGludCByZXN1bHRTZXRUeXBlLCBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudChyZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRIb2xkYWJpbGl0eQlSZXN1bHRTZXQgSG9sZGFiaWxpdHkuICAgICAKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LiAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgICAgIAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LCAKLSAgICAJCQkJICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJICAgICAKKyAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgICAgICAJCQkgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CiAgICAgfQotIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGF1dG8tY29tbWl0IG1vZGUgZm9yIHRoZSB1bmRlcmx5aW5nIDxjb2RlPiBDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGN1cnJlbnQgc3RhdGUgb2YgY29ubmVjdGlvbidzIGF1dG8tY29tbWl0IG1vZGUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBnZXRBdXRvQ29tbWl0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRBdXRvQ29tbWl0KCk7Ci0gICAgfSAgIAotIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRBdXRvQ29tbWl0KCk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSB1bmRlcmx5aW5nIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCdzIGNhdGFsb2cgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JQ2F0YWxvZyBOYW1lLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIENhdGFsb2cgTmFtZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDYXRhbG9nKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uZ2V0Q2F0YWxvZygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZAogICAgICAqIHVzaW5nIHRoaXMgY29ubmVjdGlvbiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhvbGRhYmlsaXR5IHZhbHVlLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIGhvbGRhYmlsaXR5IHZhbHVlLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldEhvbGRhYmlsaXR5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuCWNvbi5nZXRIb2xkYWJpbGl0eSgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuICAgIGNvbi5nZXRIb2xkYWJpbGl0eSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+RGF0YWJhc2VNZXRhRGF0YTwvY29kZT5vYmplY3QgZnJvbSB0aGUgdW5kZXJseWluZwogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT5EYXRhYmFzZU1ldGFEYXRhPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YWJhc2VNZXRhRGF0YSBnZXRNZXRhRGF0YSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0TWV0YURhdGEoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0TWV0YURhdGEoKTsKICAgICB9Ci0gCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhpcyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QncyBjdXJyZW50IHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KICAgICAgKgogICAgICAqIEByZXR1cm4gVHJhbnNhY3Rpb24gbGV2ZWwKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIAorICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoCiAgICAgICogPGNvZGU+IENvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JVHlwZU1hcCBzZXQgaW4gdGhpcyBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgVHlwZU1hcCBzZXQgaW4gdGhpcyBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBNYXAgZ2V0VHlwZU1hcCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0VHlwZU1hcCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRUeXBlTWFwKCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0VHlwZU1hcChNYXA8U3RyaW5nLCBDbGFzczw/Pj4gbWFwKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKQEAgLTI3NywxODQgKzI3NywxODQgQEAKICAgICAgKiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIEZpcnN0IDxjb2RlPiBTUUxXYXJuaW5nPC9jb2RlPiBPYmplY3Qgb3IgbnVsbC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTUUxXYXJuaW5nIGdldFdhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRXYXJuaW5ncygpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRXYXJuaW5ncygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB3aGV0aGVyIHVuZGVybHlpbmcgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIGNsb3NlZC4KICAgICAgKgotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLCBmYWxzZQotICAgICAqIAkJaWYgaXQgaXMgY2xvc2VkLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIGNsb3NlZCwgZmFsc2UKKyAgICAgKiAgICAgICAgIGlmIGl0IGlzIGNsb3NlZC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNDbG9zZWQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJcmV0dXJuIGlzQ2xvc2VkOworICAgICAgICByZXR1cm4gaXNDbG9zZWQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHdoZXRoZXIgdGhpcyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgcmVhZC1vbmx5LgogICAgICAqCi0gICAgICogQHJldHVybgl0cnVlIGlmIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gaXMgcmVhZC1vbmx5LCBmYWxzZSBvdGhlci13aXNlCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IGlzIHJlYWQtb25seSwgZmFsc2Ugb3RoZXItd2lzZQorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1JlYWRPbmx5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5pc1JlYWRPbmx5KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmlzUmVhZE9ubHkoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gU1FMIHN0YXRlbWVudCBpbnRvIHRoZSBzeXN0ZW0ncyBuYXRpdmUgU1FMIGdyYW1tZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBzdGF0ZW1lbnQgLCB0byBiZSBjb252ZXJ0ZWQuCi0gICAgICogQHJldHVybglDb252ZXJ0ZWQgU1FMIHN0cmluZy4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgc3RhdGVtZW50ICwgdG8gYmUgY29udmVydGVkLgorICAgICAqIEByZXR1cm4gICAgQ29udmVydGVkIFNRTCBzdHJpbmcuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgbmF0aXZlU1FMKFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ubmF0aXZlU1FMKHNxbCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLm5hdGl2ZVNRTChzcWwpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKICAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAogICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCi0gICAgICogc3RvcmVkIHByb2NlZHVyZXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCWludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJCi0gICAgCXJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKLSAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgICAgICAgCi0gICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAJCQkgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCk7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCisgICAgICogc3RvcmVkIHByb2NlZHVyZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCisgICAgICogc3RvcmVkIHByb2NlZHVyZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRIb2xkYWJpbGl0eSAgICBSZXN1bHRTZXQgSG9sZGFiaWxpdHkuCisgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZwogICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CiAgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCk7CiAgICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JYXV0b0dlbmVyYXRlZEtleXMgYSBmbGFnIGluZGljYXRpbmcgQXV0b0dlbmVyYXRlZEtleXMgbmVlZCB0byBiZSByZXR1cm5lZC4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgYXV0b0dlbmVyYXRlZEtleXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsYXV0b0dlbmVyYXRlZEtleXMpOwotICAgIH0gICAgCi0gICAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCWNvbHVtbkluZGV4ZXMgYW4gYXJyYXkgb2YgY29sdW1uIGluZGV4ZXMgaW5kaWNhdGluZyB0aGUgY29sdW1ucyB0aGF0IHNob3VsZCBiZQotICAgICAqCQlyZXR1cm5lZCBmcm9tIHRoZSBpbnNlcnRlZCByb3cgb3Igcm93cy4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnRbXSBjb2x1bW5JbmRleGVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbkluZGV4ZXMpOwotICAgIH0gICAgICAgICAgCi0gCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQlpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCQotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRIb2xkYWJpbGl0eQlSZXN1bHRTZXQgSG9sZGFiaWxpdHkuICAgICAgICAgIAotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAJCQkJICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOwotICAgIH0gICAgICAgICAgIAogCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCiAgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JY29sdW1uTmFtZXMgTmFtZSBvZiBib3VuZCBjb2x1bW5zLgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBhdXRvR2VuZXJhdGVkS2V5cyBhIGZsYWcgaW5kaWNhdGluZyBBdXRvR2VuZXJhdGVkS2V5cyBuZWVkIHRvIGJlIHJldHVybmVkLgogICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgYXV0b0dlbmVyYXRlZEtleXMpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxhdXRvR2VuZXJhdGVkS2V5cyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGNvbHVtbkluZGV4ZXMgYW4gYXJyYXkgb2YgY29sdW1uIGluZGV4ZXMgaW5kaWNhdGluZyB0aGUgY29sdW1ucyB0aGF0IHNob3VsZCBiZQorICAgICAqICAgICAgICByZXR1cm5lZCBmcm9tIHRoZSBpbnNlcnRlZCByb3cgb3Igcm93cy4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnRbXSBjb2x1bW5JbmRleGVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uSW5kZXhlcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgY29sdW1uTmFtZXMgTmFtZSBvZiBib3VuZCBjb2x1bW5zLgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIFN0cmluZ1tdIGNvbHVtbk5hbWVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbk5hbWVzKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uTmFtZXMpOwogICAgIH0KIAogICAgIHB1YmxpYyBDbG9iIGNyZWF0ZUNsb2IoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKQEAgLTUwNCwxNTAgKzUwNCwxNTAgQEAKICAgICAvKioKICAgICAgKiBSZW1vdmVzIHRoZSBnaXZlbiA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXNhdmVwb2ludAk8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgc2F2ZXBvaW50ICAgIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0CisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJlbGVhc2VTYXZlcG9pbnQoU2F2ZXBvaW50IHNhdmVwb2ludCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJlbGVhc2VTYXZlcG9pbnQoc2F2ZXBvaW50KTsKLSAgICB9IAotICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJlbGVhc2VTYXZlcG9pbnQoc2F2ZXBvaW50KTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBSb2xscyBiYWNrIHRoZSBjaGFuZ2VzIG1hZGUgaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucm9sbGJhY2soKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5yb2xsYmFjaygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJvbGxzIGJhY2sgdGhlIGNoYW5nZXMgbWFkZSBhZnRlciB0aGUgc2F2ZXBvaW50LgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLyAgICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKFNhdmVwb2ludCBzYXZlcG9pbnQpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yb2xsYmFjayhzYXZlcG9pbnQpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJvbGxiYWNrKHNhdmVwb2ludCk7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGF1dG8tY29tbW1pdCBtb2RlIG9mIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JYXV0b0NvbW1pdCBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhlIGF1dG8tY29tbWl0IG1vZGUuICAgICAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGF1dG9Db21taXQgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBhdXRvLWNvbW1pdCBtb2RlLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRBdXRvQ29tbWl0KGJvb2xlYW4gYXV0b0NvbW1pdCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldEF1dG9Db21taXQoYXV0b0NvbW1pdCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjYXRhbG9nIG5hbWUgdG8gdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdAogICAgICAqCi0gICAgICogQHBhcmFtCWNhdGFsb2cJQ2F0YWxvZyBuYW1lLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgY2F0YWxvZyAgICBDYXRhbG9nIG5hbWUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENhdGFsb2coU3RyaW5nIGNhdGFsb2cpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRDYXRhbG9nKGNhdGFsb2cpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldENhdGFsb2coY2F0YWxvZyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogU2V0cyB0aGUgaG9sZGFiaWxpdHkgb2YgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBvYmplY3RzIGNyZWF0ZWQgCisgICAgICogU2V0cyB0aGUgaG9sZGFiaWxpdHkgb2YgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBvYmplY3RzIGNyZWF0ZWQKICAgICAgKiB1c2luZyB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlob2xkYWJpbGl0eQlBIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gaG9sZGFiaWxpdHkgY29uc3RhbnQKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGhvbGRhYmlsaXR5ICAgIEEgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBob2xkYWJpbGl0eSBjb25zdGFudAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRIb2xkYWJpbGl0eShpbnQgaG9sZGFiaWxpdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgIAljb24uc2V0SG9sZGFiaWxpdHkoaG9sZGFiaWxpdHkpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgIGNvbi5zZXRIb2xkYWJpbGl0eShob2xkYWJpbGl0eSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUHV0cyB0aGUgY29ubmVjdGlvbiBpbiByZWFkLW9ubHkgbW9kZSBhcyBhIGhpbnQgdG8gdGhlIGRyaXZlciB0byAKKyAgICAgKiBQdXRzIHRoZSBjb25uZWN0aW9uIGluIHJlYWQtb25seSBtb2RlIGFzIGEgaGludCB0byB0aGUgZHJpdmVyIHRvCiAgICAgICogcGVyZm9ybSBkYXRhYmFzZSBvcHRpbWl6YXRpb25zLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlYWRPbmx5ICB0cnVlIGVuYWJsZXMgcmVhZC1vbmx5IG1vZGUsIGZhbHNlIGRpc2FibGVzIGl0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVhZE9ubHkgIHRydWUgZW5hYmxlcyByZWFkLW9ubHkgbW9kZSwgZmFsc2UgZGlzYWJsZXMgaXQuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlYWRPbmx5KGJvb2xlYW4gcmVhZE9ubHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRSZWFkT25seShyZWFkT25seSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0UmVhZE9ubHkocmVhZE9ubHkpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYW5kIHVubmFtZWQgc2F2ZXBvaW50IGFuZCByZXR1cm5zIGFuIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoYXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCiAgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTYXZlcG9pbnQgc2V0U2F2ZXBvaW50KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uc2V0U2F2ZXBvaW50KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHNhdmVwb2ludCB3aXRoIHRoZSBuYW1lIGFuZCByZXR1cm5zIGFuIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoYXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbmFtZQlOYW1lIG9mIHRoZSBzYXZlcG9pbnQuCi0gICAgICogQHJldHVybgk8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIG5hbWUgICAgTmFtZSBvZiB0aGUgc2F2ZXBvaW50LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTYXZlcG9pbnQgc2V0U2F2ZXBvaW50KFN0cmluZyBuYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnNldFNhdmVwb2ludChuYW1lKTsKLSAgICB9ICAgIAotICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQobmFtZSk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgogICAgICAqCi0gICAgICogQHBhcmFtCWxldmVsIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGxldmVsIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oaW50IGxldmVsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24obGV2ZWwpOwotICAgIH0gICAgIAotICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKGxldmVsKTsKKyAgICB9CisKICAgICBwdWJsaWMgaW50IGdldE5ldHdvcmtUaW1lb3V0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5ldHdvcmtUaW1lb3V0KEV4ZWN1dG9yIGV4ZWN1dG9yLCBpbnQgbWlsbGlzZWNvbmRzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWJvcnQoRXhlY3V0b3IgZXhlY3V0b3IpICB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFNjaGVtYSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNjaGVtYShTdHJpbmcgc2NoZW1hKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIENoZWNrcyB0aGUgdmFsaWRpdHkgb2YgdGhpcyBvYmplY3QKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgY2hlY2tWYWxpZGl0eSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAlpZiAoaXNDbG9zZWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJDb25uZWN0aW9uIGNsb3NlZCIpOwotICAgIAlpZiAoIXZhbGlkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiSW52YWxpZCBDb25uZWN0aW9uIik7Ci0gICAgCWlmKGFjdGl2ZSA9PSBmYWxzZSkgewotICAgIAkgICAgbWMuY2hlY2tJZkFjdGl2ZSh0aGlzKTsKLSAgICAJfQorICAgICAgICBpZiAoaXNDbG9zZWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJDb25uZWN0aW9uIGNsb3NlZCIpOworICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiSW52YWxpZCBDb25uZWN0aW9uIik7CisgICAgICAgIGlmKGFjdGl2ZSA9PSBmYWxzZSkgeworICAgICAgICAgICAgbWMuY2hlY2tJZkFjdGl2ZSh0aGlzKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGFjdGl2ZSBmbGFnIHRvIHRydWUKICAgICAgKgotICAgICAqIEBwYXJhbQlhY3R2CWJvb2xlYW4KKyAgICAgKiBAcGFyYW0gICAgYWN0diAgICBib29sZWFuCiAgICAgICovCiAgICAgdm9pZCBzZXRBY3RpdmUoYm9vbGVhbiBhY3R2KSB7CiAgICAgICAgIGFjdGl2ZSA9IGFjdHY7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IGFjN2U3NDguLmYwNjc1YTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0zMywxOSArMzMsMTkgQEAKICAqIFRoaXMgY2xhc3MgaXMgZXh0ZW5kZWQgYnkgdGhlIERhdGFTb3VyY2Ugc3BlY2lmaWMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZhY3RvcmllcwogICogYW5kIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGZvciB0aGUgPGNvZGU+RHJpdmVyTWFuYWdlcjwvY29kZT4uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIAotcHVibGljIGFic3RyYWN0IGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSwgCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LAogICAgIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKLSAgICAKKwogICAgIHByb3RlY3RlZCBEYXRhU291cmNlU3BlYyBzcGVjID0gbmV3IERhdGFTb3VyY2VTcGVjKCk7CiAgICAgcHJvdGVjdGVkIHRyYW5zaWVudCBEYXRhU291cmNlT2JqZWN0QnVpbGRlciBkc09iakJ1aWxkZXI7Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgamF2YS5pby5QcmludFdyaXRlciBsb2dXcml0ZXIgPSBudWxsOwogICAgIHByb3RlY3RlZCBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgcmEgPSBudWxsOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTU0LDggKzU0LDggQEAKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgQ29ubmVjdGlvbiBGYWN0b3J5IGluc3RhbmNlLiBUaGUgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uCiAgICAgICogb2YgdGhlIHJlc291cmNlIGFkYXB0ZXIgaXMgdXNlZCBoZXJlLgotICAgICAqIAotICAgICAqIEByZXR1cm4JR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGNyZWF0ZUNvbm5lY3Rpb25GYWN0b3J5KCkgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtNjMsMTYgKzYzLDE2IEBACiAgICAgICAgIH0KICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UgY2YgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UoCiAgICAgICAgICAgICAoamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KXRoaXMsIG51bGwpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIENvbm5lY3Rpb24gRmFjdG9yeSBpbnN0YW5jZS4gVGhlIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbgogICAgICAqIG9mIHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIgaXMgdXNlZCBoZXJlLgotICAgICAqIAotICAgICAqIEBwYXJhbQljeE1hbmFnZXIJPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHJldHVybglHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgorICAgICAqCisgICAgICogQHBhcmFtICAgIGN4TWFuYWdlciAgICA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcmV0dXJuICAgIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjcmVhdGVDb25uZWN0aW9uRmFjdG9yeShqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlciBjeE1hbmFnZXIpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTgwLDU1ICs4MCw1NSBAQAogICAgICAgICB9CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIGNmID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlKAogICAgICAgICAgICAgKGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSl0aGlzLCBjeE1hbmFnZXIpOwotICAgICAgICByZXR1cm4gY2Y7IAorICAgICAgICByZXR1cm4gY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIEVJUyByZXNvdXJjZQogICAgICAqIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCi0gICAgICogICAgICAgCSAgICAgICAgICAgICAJYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+Ci0gICAgICogICAgICAgCSAgICAgICAgICAgICAJb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQotICAgICAqICAgICAgIAkJCQljcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0Ci0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdCAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwKICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIC8qKgotICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0byAKKyAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8KICAgICAgKiBhbm90aGVyIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCW90aGVyCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCi0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQotICAgICAqCQlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBvdGhlciAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZQorICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQorICAgICAqICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgamF2YS5pby5QcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB7CiAgICAgICAgIHJldHVybiBsb2dXcml0ZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+c2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciBnZXRSZXNvdXJjZUFkYXB0ZXIoKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xMzYsMTEgKzEzNiwxMSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByYTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBoYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTQ4LDQxICsxNDgsNDEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc3BlYy5oYXNoQ29kZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgYSBtYXRjaGVkIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmcm9tIHRoZSBjYW5kaWRhdGUgCisgICAgICogUmV0dXJucyBhIG1hdGNoZWQgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZyb20gdGhlIGNhbmRpZGF0ZQogICAgICAqIHNldCBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0cy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29ubmVjdGlvblNldAk8Y29kZT5TZXQ8L2NvZGU+IG9mICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKgkJCQlvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCXN1YmplY3QJIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICoJCQlmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICoJCQkJZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCBpcyB0aGUgYmVzdCBtYXRjaCBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgYWNjZXNzaW5nIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPgotICAgICAqCQkJCQlwYXJhbWV0ZXIgb3IgdGhlIDxjb2RlPlNldDwvY29kZT4gb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICoJCQkJCW9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb25uZWN0aW9uU2V0ICAgIDxjb2RlPlNldDwvY29kZT4gb2YgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgIG9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICAgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiAgICAgICAgICAgIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZworICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiAgICAgICAgICAgICAgICBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IGlzIHRoZSBiZXN0IG1hdGNoIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBhY2Nlc3NpbmcgdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBvciB0aGUgPGNvZGU+U2V0PC9jb2RlPiBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgogICAgICAqLwotICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhqYXZhLnV0aWwuU2V0IGNvbm5lY3Rpb25TZXQsIAorICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhqYXZhLnV0aWwuU2V0IGNvbm5lY3Rpb25TZXQsCiAgICAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdCBzdWJqZWN0LCBDb25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbm5lY3Rpb25TZXQgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcywgc3ViamVjdCwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgIAorCiAgICAgICAgIGphdmEudXRpbC5JdGVyYXRvciBpdGVyID0gY29ubmVjdGlvblNldC5pdGVyYXRvcigpOwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBudWxsOwogICAgICAgICB3aGlsZShpdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtYyA9IChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24pIGl0ZXIubmV4dCgpOwogICAgICAgICAgICAgfSBjYXRjaChqYXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBuc2VlKSB7Ci0JICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pdGVyIik7CisgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pdGVyIik7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKG5zZWUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmKHBjID09IG51bGwgJiYgdGhpcy5lcXVhbHMobWMuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkpKSB7CkBAIC0xOTEsNyArMTkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZChtYyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYzsKICAgICAgICAgICAgICAgICB9IGNhdGNoKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7Ci0JICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfcmUiLCByZSk7CisgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfcmUiLCByZSk7CiAgICAgICAgICAgICAgICAgICAgIG1jLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKHJlLCBudWxsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYoU2VjdXJpdHlVdGlscy5pc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKHBjLCBtYy5nZXRQYXNzd29yZENyZWRlbnRpYWwoKSkgPT0gdHJ1ZSkgewpAQCAtMjAwLDQ1ICsyMDAsNDUgQEAKICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZChtYyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYzsKICAgICAgICAgICAgICAgICB9IGNhdGNoKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7Ci0JICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5yZSIpOworICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMucmUiKTsKICAgICAgICAgICAgICAgICAgICAgbWMuY29ubmVjdGlvbkVycm9yT2NjdXJyZWQocmUsIG51bGwpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvL0dKQ0lOVAogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyB0byBiZSB2YWxpZGF0ZWQgb3Igbm90CiAgICAgICogYW5kIHZhbGlkYXRlcyBpdCBvciByZXR1cm5zLgotICAgICAqIAotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAJCWlmIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIKICAgICAgKi8KICAgICB2b2lkIGlzVmFsaWQoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogCiAgICAgICAgIGlmKG1jLmlzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpIHsKLQkgICAgcmV0dXJuOworICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAKLSAgICAgICAgYm9vbGVhbiBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID0gCisKKyAgICAgICAgYm9vbGVhbiBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID0KICAgICAgICAgICAgIChuZXcgQm9vbGVhbihzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKS50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7CiAgICAgICAgIGlmKCBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID09IGZhbHNlIHx8IG1jID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIG1jLmNoZWNrSWZWYWxpZCgpOwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGFib3ZlIGNhbGwgY2hlY2tzIGlmIHRoZSBhY3R1YWwgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAgICAgKiBpcyB1c2FibGUgb3Igbm90LgogICAgICAgICAgKi8KICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKHZhbGlkYXRpb25NZXRob2QuZXF1YWxzKCJhdXRvLWNvbW1pdCIpID09IHRydWUpIHsKICAgICAgICAgICAgIGlzVmFsaWRCeUF1dG9Db21taXQoY29uKTsKICAgICAgICAgfSBlbHNlIGlmKHZhbGlkYXRpb25NZXRob2QuZXF1YWxzSWdub3JlQ2FzZSgibWV0YS1kYXRhIikgPT0gdHJ1ZSkgewpAQCAtMjQ5LDI4ICsyNDksMjggQEAKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIiKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IGNoZWNraW5nIGl0cyBhdXRvIGNvbW1pdCBwcm9wZXJ0eS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5QXV0b0NvbW1pdChqYXZhLnNxbC5Db25uZWN0aW9uIGNvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgLy8gTm90aWNlIHRoYXQgdXNpbmcgc29tZXRoaW5nIGxpa2UgCisgICAgICAgICAgIC8vIE5vdGljZSB0aGF0IHVzaW5nIHNvbWV0aGluZyBsaWtlCiAgICAgICAgICAgIC8vIGRiQ29uLnNldEF1dG9Db21taXQoZGJDb24uZ2V0QXV0b0NvbW1pdCgpKSB3aWxsIGNhdXNlIHByb2JsZW1zIHdpdGgKICAgICAgICAgICAgLy8gc29tZSBkcml2ZXJzIGxpa2Ugc3liYXNlCi0gICAgICAgICAgIC8vIFdlIGRvIG5vdCB2YWxpZGF0ZSBjb25uZWN0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IGVubGlzdGVkIAotCSAgIC8vaW4gYSB0cmFuc2FjdGlvbiAKLQkgICAvLyBXZSBjeWNsZSBhdXRvY29tbWl0IHRvIHRydWUgYW5kIGZhbHNlIHRvIGJ5LXBhc3MgZHJpdmVycyB0aGF0IAotCSAgIC8vIG1pZ2h0IGNhY2hlIHRoZSBjYWxsIHRvIHNldCBhdXRvY29taXR0CisgICAgICAgICAgIC8vIFdlIGRvIG5vdCB2YWxpZGF0ZSBjb25uZWN0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IGVubGlzdGVkCisgICAgICAgLy9pbiBhIHRyYW5zYWN0aW9uCisgICAgICAgLy8gV2UgY3ljbGUgYXV0b2NvbW1pdCB0byB0cnVlIGFuZCBmYWxzZSB0byBieS1wYXNzIGRyaXZlcnMgdGhhdAorICAgICAgIC8vIG1pZ2h0IGNhY2hlIHRoZSBjYWxsIHRvIHNldCBhdXRvY29taXR0CiAgICAgICAgICAgIC8vIEFsc28gbm90aWNlIHRoYXQgc29tZSBYQSBkYXRhIHNvdXJjZXMgd2lsbCB0aHJvdyBhbmQgZXhjZXB0aW9uIGlmCiAgICAgICAgICAgIC8vIHlvdSB0cnkgdG8gY2FsbCBzZXRBdXRvQ29tbWl0LCBmb3IgdGhlbSB0aGlzIG1ldGhvZCBpcyBub3QgcmVjb21tZW5kZWQKIApAQCAtMjgxLDkwICsyODEsOTAgQEAKICAgICAgICAgICAgICAgICBjb24ucm9sbGJhY2soKTsgLy8gcHJldmVudHMgdW5jb21wbGV0ZWQgdHJhbnNhY3Rpb24gZXhjZXB0aW9ucwogICAgICAgICAgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KHRydWUpOwogICAgICAgICAgICB9Ci0gICAgICAgIAotCSAgIGNvbi5zZXRBdXRvQ29tbWl0KGFjKTsKKworICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGFjKTsKIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2F1dG9jb21taXQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYXV0b2NvbW1pdCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IGNoZWNraW5nIGl0cyBtZXRhIGRhdGEuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeU1ldGFEYXRhKGphdmEuc3FsLkNvbm5lY3Rpb24gY29uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgamF2YS5zcWwuRGF0YWJhc2VNZXRhRGF0YSBkbWQgPSBjb24uZ2V0TWV0YURhdGEoKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgImdldHRpbmcgdGhlIG1ldGEgZGF0YSBmYWlsZWQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBxdWVyeWluZyBhIHRhYmxlLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHBhcmFtCXRhYmxlTmFtZQl0YWJsZSB3aGljaCBzaG91bGQgYmUgcXVlcmllZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEBwYXJhbSAgICB0YWJsZU5hbWUgICAgdGFibGUgd2hpY2ggc2hvdWxkIGJlIHF1ZXJpZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeVRhYmxlUXVlcnkoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24sIAorICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeVRhYmxlUXVlcnkoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24sCiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBqYXZhLnNxbC5TdGF0ZW1lbnQgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIGphdmEuc3FsLlJlc3VsdFNldCBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NICIgKyB0YWJsZU5hbWUpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2V4ZWN1dGUiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZXhlY3V0ZSIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInF1ZXJ5aW5nIHRoZSB0YWJsZSAiICsgdGFibGVOYW1lICsgIiBmYWlsZWQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBpc29sYXRpb24gbGV2ZWwgc3BlY2lmaWVkIGluIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CiAgICAgICogZm9yIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gcGFzc2VkLgogICAgICAqCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCi0gICAgICoJCQkJCW9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCisgICAgICogICAgICAgICAgICAgICAgICAgIG9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgc2V0SXNvbGF0aW9uKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJCi0gICAgCWphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgIAlpZihjb24gPT0gbnVsbCkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCQotICAgIAlTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKLSAgICAJaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKLSAgICAJICAgIHRyeSB7Ci0gICAgCSAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOwotICAgIAkgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gY291bGQgIgotICAgIAkgICAgICAgICAgICArICJub3QgYmUgc2V0OiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgfQotICAgIAl9CisKKyAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7CisgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKKyAgICAgICAgaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOworICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gY291bGQgIgorICAgICAgICAgICAgICAgICAgICArICJub3QgYmUgc2V0OiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVzZXRzIHRoZSBpc29sYXRpb24gbGV2ZWwgZm9yIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gcGFzc2VkLgogICAgICAqIElmIHRoZSB0cmFuc2FjdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmUKQEAgLTM3MywzODIgKzM3MywzODIgQEAKICAgICAgKiBpc29sYXRpb24gbGV2ZWwgZnJvbSB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQuIEVsc2UsCiAgICAgICogaXQgc2V0cyBpdCB0byB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIHBhc3NlZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAcGFyYW0JdHJhbklzb2wJaW50Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKLSAgICAgKgkJCQkJb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRyYW5Jc29sICAgIGludAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCisgICAgICogICAgICAgICAgICAgICAgICAgIG9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCiAgICAgICovCiAgICAgdm9pZCByZXNldElzb2xhdGlvbihjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMsIGludCB0cmFuSXNvbCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJCi0gICAgCWphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgIAlpZihjb24gPT0gbnVsbCkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCQotICAgIAlTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKLSAgICAJaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwotICAgIAkgICAgCi0gICAgCSAgICBpZihndWFyYW50ZWVJc29sYXRpb25MZXZlbCAhPSBudWxsICYmIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgICAgICBib29sZWFuIGd1YXJhbnRlZSA9IChuZXcgQm9vbGVhbihndWFyYW50ZWVJc29sYXRpb25MZXZlbC50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgCSAgICAgICAgCi0gICAgCSAgICAgICAgaWYoZ3VhcmFudGVlKSB7Ci0gICAgCSAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7Ci0gICAgCSAgICAgICAgICAgIHRyeSB7Ci0gICAgCSAgICAgICAgICAgICAgICBpZih0cmFuSXNvbGF0aW9uSW50ICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOwotICAgIAkgICAgICAgICAgICAgICAgfQotICAgIAkgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgotICAgIAkgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgfSBlbHNlIHsKLSAgICAJICAgICAgICAgICAgdHJ5IHsKLSAgICAJICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sKTsKLSAgICAJICAgICAgICAgICAgICAgIH0KLSAgICAJICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKLSAgICAJICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgICAgICAgICAgfQotICAgIAkgICAgICAgIH0KLSAgICAJICAgIH0KLSAgICAJfQorCisgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOworICAgICAgICBpZihjb24gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIFN0cmluZyBndWFyYW50ZWVJc29sYXRpb25MZXZlbCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKKworICAgICAgICAgICAgaWYoZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgIT0gbnVsbCAmJiBndWFyYW50ZWVJc29sYXRpb25MZXZlbC5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBndWFyYW50ZWUgPSAobmV3IEJvb2xlYW4oZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOworCisgICAgICAgICAgICAgICAgaWYoZ3VhcmFudGVlKSB7CisgICAgICAgICAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0cmFuSXNvbGF0aW9uSW50ICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CisgICAgICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGludGVnZXIgZXF1aXZhbGVudCBvZiB0aGUgc3RyaW5nIHNwZWNpZnlpbmcKICAgICAgKiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXRyYW5Jc29sYXRpb24Jc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbiBsZXZlbAotICAgICAqIEByZXR1cm4JdHJhbklzb2xhdGlvbkludAl0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gY29uc3RhbnQKLSAgICAgKgkJCQkJZm9yIHRoZSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uLgorICAgICAqIEBwYXJhbSAgICB0cmFuSXNvbGF0aW9uICAgIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5Jc29sYXRpb25JbnQgICAgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGNvbnN0YW50CisgICAgICogICAgICAgICAgICAgICAgICAgIGZvciB0aGUgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbi4KICAgICAgKi8KICAgICBwcml2YXRlIGludCBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludChTdHJpbmcgdHJhbklzb2xhdGlvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLXVuY29tbWl0dGVkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfVU5DT01NSVRURUQ7Ci0gICAgCX0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtY29tbWl0dGVkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfQ09NTUlUVEVEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZXBlYXRhYmxlLXJlYWQiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVQRUFUQUJMRV9SRUFEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJzZXJpYWxpemFibGUiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fU0VSSUFMSVpBQkxFOwotICAgIAl9IGVsc2UgewotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJJbnZhbGlkIHRyYW5zYWN0aW9uIGlzb2xhdGlvbjsgdGhlIHRyYW5zYWN0aW9uICIKLSAgICAJICAgICAgICArICJpc29sYXRpb24gbGV2ZWwgY2FuIGJlIGVtcHR5IG9yIGFueSBvZiB0aGUgZm9sbG93aW5nOiAiCi0gICAgCSAgICAgICAgICAgICsgInJlYWQtdW5jb21taXR0ZWQsIHJlYWQtY29tbWl0dGVkLCByZXBlYXRhYmxlLXJlYWQsIHNlcmlhbGl6YWJsZSIpOwotICAgIAl9CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC11bmNvbW1pdHRlZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX1VOQ09NTUlUVEVEOworICAgICAgICB9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLWNvbW1pdHRlZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX0NPTU1JVFRFRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVwZWF0YWJsZS1yZWFkIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFUEVBVEFCTEVfUkVBRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgic2VyaWFsaXphYmxlIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1NFUklBTElaQUJMRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiSW52YWxpZCB0cmFuc2FjdGlvbiBpc29sYXRpb247IHRoZSB0cmFuc2FjdGlvbiAiCisgICAgICAgICAgICAgICAgKyAiaXNvbGF0aW9uIGxldmVsIGNhbiBiZSBlbXB0eSBvciBhbnkgb2YgdGhlIGZvbGxvd2luZzogIgorICAgICAgICAgICAgICAgICAgICArICJyZWFkLXVuY29tbWl0dGVkLCByZWFkLWNvbW1pdHRlZCwgcmVwZWF0YWJsZS1yZWFkLCBzZXJpYWxpemFibGUiKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCW91dAk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgb3V0ICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihqYXZhLmlvLlByaW50V3JpdGVyIG91dCkgewogICAgICAgICBsb2dXcml0ZXIgPSBvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBhc3NvY2lhdGVkIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gSmF2YUJlYW4uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmEJPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPmdldFJlc291cmNlQWRhcHRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcmEgICAgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlc291cmNlQWRhcHRlcihqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgcmEpIHsKLSAgICAgICAgdGhpcy5yYSA9IHJhOyAgIAorICAgICAgICB0aGlzLnJhID0gcmE7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHVzZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFVzZXIoU3RyaW5nIHVzZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUsIHVzZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHJldHVybgl1c2VyCisgICAgICogQHJldHVybiAgICB1c2VyCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR1c2VyKFN0cmluZyB1c2VyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FLCB1c2VyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEByZXR1cm4JdXNlcgorICAgICAqIEByZXR1cm4gICAgdXNlcgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dXNlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHBhcmFtCXBhc3N3ZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBhc3N3ZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UGFzc3dvcmQoU3RyaW5nIHBhc3N3ZCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCwgcGFzc3dkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHJldHVybglwYXNzd2QKKyAgICAgKiBAcmV0dXJuICAgIHBhc3N3ZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFzc3dvcmQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEBwYXJhbQlwYXNzd2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwYXNzd2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHBhc3N3b3JkKFN0cmluZyBwYXNzd2QpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQsIHBhc3N3ZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEByZXR1cm4JcGFzc3dkCisgICAgICogQHJldHVybiAgICBwYXNzd2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2xhc3NOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY2xhc3NOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDbGFzc05hbWUoU3RyaW5nIGNsYXNzTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUsIGNsYXNzTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEByZXR1cm4JY2xhc3NOYW1lCisgICAgICogQHJldHVybiAgICBjbGFzc05hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENsYXNzTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEBwYXJhbQljbGFzc05hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjbGFzc05hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGNsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSwgY2xhc3NOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHJldHVybgljbGFzc05hbWUKKyAgICAgKiBAcmV0dXJuICAgIGNsYXNzTmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Y2xhc3NOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEBwYXJhbQljb25WbGRSZXEJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjb25WbGRSZXEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoU3RyaW5nIGNvblZsZFJlcSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVELCBjb25WbGRSZXEpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHJldHVybgljb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHBhcmFtCWNvblZsZFJlcQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNvblZsZFJlcSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Y29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZChTdHJpbmcgY29uVmxkUmVxKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQsIGNvblZsZFJlcSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdmFsaWRhdGlvbiBtZXRob2QgcmVxdWlyZWQKICAgICAgKgotICAgICAqIEBwYXJhbQl2YWxpZGF0aW9uTWV0aG9kCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdmFsaWRhdGlvbk1ldGhvZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VmFsaWRhdGlvbk1ldGhvZChTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCkgewogICAgICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCwgdmFsaWRhdGlvbk1ldGhvZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgY29ubmVjdGlvbiB2YWxpZGF0aW9uIG1ldGhvZCB0eXBlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXZhbGlkYXRpb24gbWV0aG9kCisgICAgICogQHJldHVybiAgICB2YWxpZGF0aW9uIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsaWRhdGlvbk1ldGhvZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHZhbGlkYXRpb24gbWV0aG9kIHJlcXVpcmVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsaWRhdGlvbk1ldGhvZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHZhbGlkYXRpb25NZXRob2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHZhbGlkYXRpb25NZXRob2QoU3RyaW5nIHZhbGlkYXRpb25NZXRob2QpIHsKICAgICAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QsIHZhbGlkYXRpb25NZXRob2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBtZXRob2QgdHlwZQogICAgICAqCi0gICAgICogQHJldHVybgl2YWxpZGF0aW9uIG1ldGhvZAorICAgICAqIEByZXR1cm4gICAgdmFsaWRhdGlvbiBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHZhbGlkYXRpb25NZXRob2QoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCXRhYmxlCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdGFibGUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25UYWJsZU5hbWUoU3RyaW5nIHRhYmxlKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUsIHRhYmxlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgl0YWJsZQorICAgICAqIEByZXR1cm4gICAgdGFibGUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbGlkYXRpb25UYWJsZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCXRhYmxlCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdGFibGUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHZhbGlkYXRpb25UYWJsZU5hbWUoU3RyaW5nIHRhYmxlKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUsIHRhYmxlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgl0YWJsZQorICAgICAqIEByZXR1cm4gICAgdGFibGUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHZhbGlkYXRpb25UYWJsZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEBwYXJhbQl0cm5Jc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cm5Jc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKFN0cmluZyB0cm5Jc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04sIHRybklzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEBwYXJhbQl0cm5Jc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cm5Jc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHRyYW5zYWN0aW9uSXNvbGF0aW9uKFN0cmluZyB0cm5Jc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04sIHRybklzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR0cmFuc2FjdGlvbklzb2xhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZAogICAgICAqCi0gICAgICogQHBhcmFtCWd1YXJhbnRlZUlzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGd1YXJhbnRlZUlzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCwgZ3VhcmFudGVlSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQorICAgICAqIEByZXR1cm4gICAgaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQKICAgICAgKgotICAgICAqIEBwYXJhbQlndWFyYW50ZWVJc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBndWFyYW50ZWVJc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKFN0cmluZyBndWFyYW50ZWVJc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwsIGd1YXJhbnRlZUlzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKKyAgICAgKiBAcmV0dXJuICAgIGlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQppbmRleCA1NTViZTc3Li5lYTU0MDc2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQpAQCAtMjYsOCArMjYsOCBAQAogLyoqCiAgKiA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDUKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzA1CisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgUmVzb3VyY2VBZGFwdGVyIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHsKIApAQCAtMzcsNTIgKzM3LDUyIEBACiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBlbmRwb2ludEFjdGl2YXRpb24KICAgICAgKiB3aGljaCBqdXN0IHRocm93cyA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWVmCTxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCWFzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgotICAgICAqIEB0aHJvd3MJPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtZWYgICAgPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgYXMgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kcG9pbnRBY3RpdmF0aW9uKE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgbWVmLCBBY3RpdmF0aW9uU3BlYyBhcykgdGhyb3dzIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIlRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgSkRCQyBjb25uZWN0b3IiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBtZXRob2QgaW1wbGVtZW50YXRpb24gZm9yIGVuZHBvaW50RGVhY3RpdmF0aW9uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWVmCTxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCWFzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtZWYgICAgPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgYXMgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kcG9pbnREZWFjdGl2YXRpb24oTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBtZWYsIEFjdGl2YXRpb25TcGVjIGFzKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBnZXRYQVJlc291cmNlcwogICAgICAqIHdoaWNoIGp1c3QgdGhyb3dzIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcGVjcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4gYXJyYXkKLSAgICAgKiBAdGhyb3dzCTxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc3BlY3MgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+IGFycmF5CisgICAgICogQHRocm93cyAgICA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKSB0aHJvd3MgTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiVGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBKREJDIGNvbm5lY3RvciIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IGltcGxlbWVudGF0aW9uIG9mIHN0YXJ0IG1ldGhvZAogICAgICAqCi0gICAgICogQHBhcmFtCWN0eAk8Y29kZT5Cb290c3RyYXBDb250ZXh0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjdHggICAgPGNvZGU+Qm9vdHN0cmFwQ29udGV4dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdGFydChCb290c3RyYXBDb250ZXh0IGN0eCkgdGhyb3dzIFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNvdXJjZSBBZGFwdGVyIGlzIHN0YXJ0aW5nIHdpdGggY29uZmlndXJhdGlvbiA6IiArIHJhUHJvcCk7CiAgICAgICAgIGlmIChyYVByb3AgPT0gbnVsbCB8fCAhcmFQcm9wLmVxdWFscygiVkFMSUQiKSkgewotCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIlJlc291cmNlIGFkYXB0ZXIgY2Fubm90IHN0YXJ0LiBJdCBpcyBjb25maWd1cmVkIGFzIDogIiArIHJhUHJvcCk7Ci0JfSAKKyAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJSZXNvdXJjZSBhZGFwdGVyIGNhbm5vdCBzdGFydC4gSXQgaXMgY29uZmlndXJlZCBhcyA6ICIgKyByYVByb3ApOwogICAgIH0KLSAgICAKKyAgICB9CisKICAgICAvKioKICAgICAgKiBFbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBzdG9wIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0b3AoKSB7Ci0gICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRSQVByb3BlcnR5KFN0cmluZyBzKSB7CkBAIC05Miw1ICs5Miw1IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRSQVByb3BlcnR5KCkgewogICAgICAgICByZXR1cm4gcmFQcm9wOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCmluZGV4IDVlMTRkNDQuLmZmMGYwMmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9IiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvc3BpIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTI5LDU1ICsyOSw1NSBAQAogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxNCI+Ci0gICAgCQotICAgIAk8bWtkaXIgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiLz4KLSAgICAJCi0JPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiIGJhc2VkaXI9IiR7Y2xhc3MuZGlyfSIKKworICAgICAgICA8bWtkaXIgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiLz4KKworICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCiAgICAgICAgIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosIGNvbS9zdW4vZ2pjL3V0aWwvKiovKiwgY29tL3N1bi9namMvY29tbW9uLyoqLyoiIGV4Y2x1ZGVzPSJjb20vc3VuL2dqYy9jY2kvKiovKixjb20vc3VuL2dqYy9zcGkvMS40LyoqLyoiLz4KLSAgICAgICAgCisKICAgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWNwLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1jcC54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEteGEueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS14YS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZG0ueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kbS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZHMueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kcy54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8ZGVsZXRlIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9jb20iLz4KLSAgIAk8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIvPgotICAgCTxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIvPgotICAgCQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8ZGVsZXRlIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9jb20iLz4KKyAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIvPgorICAgICAgIDxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIvPgorCiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTMiLz4KLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDE0LCBidWlsZDEzIi8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxNCwgYnVpbGQxMyIvPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sCmluZGV4IGRmNDU3NzcuLmE4OTdmMDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwKQEAgLTIyLDY5ICsyMiw2OSBAQAogICAgICAgICAgICB2ZXJzaW9uPSIxLjUiPgogCiAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgotICAgIDwhLS0gVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYSAKKyAgICA8IS0tIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEKICAgICAgICAgIGRlc2NyaXB0aW9uIGZvciB0aGUgcmVzb3VyY2UgYWRhcHRlci4KICAgICAtLT4KICAgICA8ZGVzY3JpcHRpb24+UmVzb3VyY2UgYWRhcHRlciB3cmFwcGluZyBEYXRhc291cmNlIGltcGxlbWVudGF0aW9uIG9mIGRyaXZlcjwvZGVzY3JpcHRpb24+Ci0gICAgCisKICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkaXNwbGF5LW5hbWUiIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgotICAgIDwhLS0gVGhlIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhIG5hbWUgdGhhdCAKKyAgICA8IS0tIFRoZSBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYSBuYW1lIHRoYXQKICAgICAgICAgIGlzIGludGVuZGVkIHRvIGJlIGRpc3BsYXllZCBieSB0b29scy4KICAgICAtLT4KICAgICA8ZGlzcGxheS1uYW1lPkRhdGFTb3VyY2UgUmVzb3VyY2UgQWRhcHRlcjwvZGlzcGxheS1uYW1lPgotICAgIAorCiAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiaWNvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+CiAgICAgPCEtLSBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxpY29uPgotICAgICAgICAgICAgVGhpcyAic21hbGwtaWNvbiIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UuIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIAotICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgxNiB4IDE2KSAKKyAgICAgICAgICAgIFRoaXMgInNtYWxsLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgxNiB4IDE2KQogICAgICAgICAgICAgaWNvbiAtIEpQRUcgb3IgR0lGIGltYWdlLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgICAgICA8c21hbGwtaWNvbj5zbWFsbGljb24uanBnPC9zbWFsbC1pY29uPgotICAgICAgICAKLSAgICAgICAgICAgIFRoaXMgImxhcmdlLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSAKLSAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMzIgeCAzMikgCisKKyAgICAgICAgICAgIFRoaXMgImxhcmdlLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgzMiB4IDMyKQogICAgICAgICAgICAgaWNvbiAtIEpQRUcgb3IgR0lGIGltYWdlLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCi0gICAgICAgICAgICA8bGFyZ2UtaWNvbj5sYXJnZWljb24uanBnPC9sYXJnZS1pY29uPiAgIAorICAgICAgICAgICAgPGxhcmdlLWljb24+bGFyZ2VpY29uLmpwZzwvbGFyZ2UtaWNvbj4KICAgICAgICAgPC9pY29uPgogICAgIC0tPgogICAgIDxpY29uPgogICAgICAgICA8c21hbGwtaWNvbj48L3NtYWxsLWljb24+Ci0gICAgICAgIDxsYXJnZS1pY29uPjwvbGFyZ2UtaWNvbj4gICAKKyAgICAgICAgPGxhcmdlLWljb24+PC9sYXJnZS1pY29uPgogICAgIDwvaWNvbj4KLSAgICAKKwogICAgIDwhLS0gVGhlICJ2ZW5kb3ItbmFtZSIgZWxlbWVudCBzaG91bGQgb2NjdXIgZXhhY3RseSBvbmNlLiAtLT4KICAgICA8IS0tIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGRyaXZlciB2ZW5kb3IuIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgPHZlbmRvci1uYW1lPlhZWiBJTkMuPC92ZW5kb3ItbmFtZT4KICAgICAtLT4KICAgICA8dmVuZG9yLW5hbWU+U3VuIE1pY3Jvc3lzdGVtczwvdmVuZG9yLW5hbWU+Ci0gICAgCisKICAgICA8IS0tIFRoZSAiZWlzLXR5cGUiIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGV4YWN0bHkgb25jZS4gLS0+Ci0gICAgPCEtLSBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSBkYXRhYmFzZSwgZm9yIGV4YW1wbGUgdGhlIHByb2R1Y3QgbmFtZSBvZiAKKyAgICA8IS0tIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIGRhdGFiYXNlLCBmb3IgZXhhbXBsZSB0aGUgcHJvZHVjdCBuYW1lIG9mCiAgICAgICAgICB0aGUgZGF0YWJhc2UgaW5kZXBlbmRlbnQgb2YgYW55IHZlcnNpb24gaW5mb3JtYXRpb24uIFRoZSBmb2xsb3dpbmcKICAgICAgICAgIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxlaXMtdHlwZT5YWVo8L2Vpcy10eXBlPgogICAgIC0tPgogICAgIDxlaXMtdHlwZT5EYXRhYmFzZTwvZWlzLXR5cGU+Ci0gICAgCisKICAgICA8IS0tIFRoZSAicmVzb3VyY2VhZGFwdGVyLXZlcnNpb24iIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGV4YWN0bHkgb25jZS4gLS0+Ci0gICAgPCEtLSBUaGlzIHNwZWNpZmllcyBhIHN0cmluZyBiYXNlZCB2ZXJzaW9uIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGZyb20gCisgICAgPCEtLSBUaGlzIHNwZWNpZmllcyBhIHN0cmluZyBiYXNlZCB2ZXJzaW9uIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGZyb20KICAgICAgICAgIHRoZSBkcml2ZXIgdmVuZG9yLiBUaGUgZGVmYXVsdCBpcyBiZWluZyBzZXQgYXMgMS4wLiBUaGUgZHJpdmVyCiAgICAgICAgICB2ZW5kb3IgY2FuIGNoYW5nZSBpdCBhcyByZXF1aXJlZC4KICAgICAtLT4KICAgICA8cmVzb3VyY2VhZGFwdGVyLXZlcnNpb24+MS4wPC9yZXNvdXJjZWFkYXB0ZXItdmVyc2lvbj4KLSAgICAKKwogICAgIDwhLS0gVGhpcyAibGljZW5zZSIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UgLS0+CiAgICAgPCEtLSBUaGlzIHNwZWNpZmllcyBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzIGZvciB0aGUgcmVzb3VyY2UgYWRhcHRlciBtb2R1bGUuCiAgICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxsaWNlbnNlPgogICAgICAgICAgICAgVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBpbmNsdWRpbmcgMC4KICAgICAgICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gCi0gICAgICAgICAgICAgICAgcHJvdmlkZSBhIGRlc2NyaXB0aW9uIGZvciB0aGUgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBvZiB0aGUgCi0gICAgICAgICAgICAgICAgcmVzb3VyY2UgYWRhcHRlciBsaWtlIGR1cmF0aW9uIG9mIGxpY2Vuc2UsIG51bWJlcm9mIGNvbm5lY3Rpb24gCisgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvCisgICAgICAgICAgICAgICAgcHJvdmlkZSBhIGRlc2NyaXB0aW9uIGZvciB0aGUgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBvZiB0aGUKKyAgICAgICAgICAgICAgICByZXNvdXJjZSBhZGFwdGVyIGxpa2UgZHVyYXRpb24gb2YgbGljZW5zZSwgbnVtYmVyb2YgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9ucy4KICAgICAgICAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgICAgIAorCiAgICAgICAgICAgICBUaGlzIHNwZWNpZmllcyB3aGV0aGVyIGEgbGljZW5zZSBpcyByZXF1aXJlZCB0byBkZXBsb3kgYW5kIHVzZSB0aGUgcmVzb3VyY2UgYWRhcHRlci4KICAgICAgICAgICAgIERlZmF1bHQgaXMgZmFsc2UuCiAgICAgICAgICAgICA8bGljZW5zZS1yZXF1aXJlZD5mYWxzZTwvbGljZW5zZS1yZXF1aXJlZD4KQEAgLTkzLDI0ICs5MywyNCBAQAogICAgIDxsaWNlbnNlPgogICAgICAgICA8bGljZW5zZS1yZXF1aXJlZD5mYWxzZTwvbGljZW5zZS1yZXF1aXJlZD4KICAgICA8L2xpY2Vuc2U+Ci0gICAgCisKICAgICA8cmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAKLSAgICAgICAgPCEtLSAKLSAgICAgICAgICAgIFRoZSAiY29uZmlnLXByb3BlcnR5IiBlbGVtZW50cyBjYW4gaGF2ZSB6ZXJvIG9yIG1vcmUgImRlc2NyaXB0aW9uIiAKKworICAgICAgICA8IS0tCisgICAgICAgICAgICBUaGUgImNvbmZpZy1wcm9wZXJ0eSIgZWxlbWVudHMgY2FuIGhhdmUgemVybyBvciBtb3JlICJkZXNjcmlwdGlvbiIKICAgICAgICAgICAgIGVsZW1lbnRzLiBUaGUgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBhcmUgbm90IGJlaW5nIGluY2x1ZGVkCiAgICAgICAgICAgICBpbiB0aGUgImNvbmZpZy1wcm9wZXJ0eSIgZWxlbWVudHMgYmVsb3cuIFRoZSBkcml2ZXIgdmVuZG9yIGNhbgogICAgICAgICAgICAgYWRkIHRoZW0gYXMgcmVxdWlyZWQuCiAgICAgICAgIC0tPgotICAgICAgICAKKwogICAgICAgICA8cmVzb3VyY2VhZGFwdGVyLWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5SZXNvdXJjZUFkYXB0ZXI8L3Jlc291cmNlYWRhcHRlci1jbGFzcz4KLSAgICAgICAgCisKICAgICAgICAgPG91dGJvdW5kLXJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgCisKICAgICAgICAgICAgIDxjb25uZWN0aW9uLWRlZmluaXRpb24+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8bWFuYWdlZGNvbm5lY3Rpb25mYWN0b3J5LWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvbWFuYWdlZGNvbm5lY3Rpb25mYWN0b3J5LWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiB0aGVzZSBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+U2VydmVyTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT50ZXN0ZGI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KIAotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Vc2VyPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmRidXNlcjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgpAQCAtMTM5LDEyICsxMzksMTIgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5kYnVzZXI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KIAotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5QYXNzd29yZDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5kYnBhc3N3b3JkPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlVSTDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5qZGJjOmRlcmJ5Oi8vbG9jYWxob3N0OjE1MjcvdGVzdGRiO2NyZWF0ZT10cnVlPC9jb25maWctcHJvcGVydHktdmFsdWU+CkBAIC0xNTQsNyArMTU0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5Pi0tPgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5EZXNjcmlwdGlvbjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5PcmFjbGUgdGhpbiBkcml2ZXIgRGF0YXNvdXJjZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgpAQCAtMTY1LDE3ICsxNjUsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Sb2xlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+TG9naW5UaW1lT3V0PC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RHJpdmVyUHJvcGVydGllczwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KQEAgLTE4Niw3ICsxODYsNyBAQAogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+IzwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5DbGFzc05hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+b3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERhdGFTb3VyY2U0MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgpAQCAtMTk4LDgyICsxOTgsODIgQEAKICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAKIDwhLS0KLSAgICAgIAkJPGNvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZmFsc2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uTWV0aG9kPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VHJhbnNhY3Rpb25Jc29sYXRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZmFsc2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25NZXRob2Q8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uVGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VHJhbnNhY3Rpb25Jc29sYXRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5HdWFyYW50ZWVJc29sYXRpb25MZXZlbDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogLS0+CiAKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbmZhY3RvcnktaW50ZXJmYWNlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb25uZWN0aW9uZmFjdG9yeS1pbnRlcmZhY2U+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbmZhY3RvcnktaW1wbC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZTwvY29ubmVjdGlvbmZhY3RvcnktaW1wbC1jbGFzcz4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uLWludGVyZmFjZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb25uZWN0aW9uLWludGVyZmFjZT4KLSAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbi1pbXBsLWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyPC9jb25uZWN0aW9uLWltcGwtY2xhc3M+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIDwvY29ubmVjdGlvbi1kZWZpbml0aW9uPgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDx0cmFuc2FjdGlvbi1zdXBwb3J0PkxvY2FsVHJhbnNhY3Rpb248L3RyYW5zYWN0aW9uLXN1cHBvcnQ+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPGF1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbT4KICAgICAgICAgICAgICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+CiAgICAgICAgICAgICAgICAgPCEtLSBOb3QgaW5jbHVkaW5nIHRoZSAiZGVzY3JpcHRpb24iIGVsZW1lbnQgLS0+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8YXV0aGVudGljYXRpb24tbWVjaGFuaXNtLXR5cGU+QmFzaWNQYXNzd29yZDwvYXV0aGVudGljYXRpb24tbWVjaGFuaXNtLXR5cGU+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y3JlZGVudGlhbC1pbnRlcmZhY2U+amFrYXJ0YS5yZXNvdXJjZS5zcGkuc2VjdXJpdHkuUGFzc3dvcmRDcmVkZW50aWFsPC9jcmVkZW50aWFsLWludGVyZmFjZT4KICAgICAgICAgICAgIDwvYXV0aGVudGljYXRpb24tbWVjaGFuaXNtPgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxyZWF1dGhlbnRpY2F0aW9uLXN1cHBvcnQ+ZmFsc2U8L3JlYXV0aGVudGljYXRpb24tc3VwcG9ydD4KLSAgICAgICAgICAgIAorCiAgICAgICAgIDwvb3V0Ym91bmQtcmVzb3VyY2VhZGFwdGVyPgotCTxhZG1pbm9iamVjdD4KLQkgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW48L2FkbWlub2JqZWN0LWludGVyZmFjZT4KLQkgICAgICAgPGFkbWlub2JqZWN0LWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbkltcGw8L2FkbWlub2JqZWN0LWNsYXNzPgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5TY2hlbWFOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkpuZGlOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPk5vT2ZSb3dzPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuSW50ZWdlcjwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgPGFkbWlub2JqZWN0PgorICAgICAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgorICAgICAgICAgICA8YWRtaW5vYmplY3QtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluSW1wbDwvYWRtaW5vYmplY3QtY2xhc3M+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlNjaGVtYU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Sm5kaU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Tm9PZlJvd3M8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5JbnRlZ2VyPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPC9hZG1pbm9iamVjdD4KLSAgICAgICAgCisKICAgICA8L3Jlc291cmNlYWRhcHRlcj4KLSAgICAKKwogPC9jb25uZWN0b3I+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKaW5kZXggYjIxOWNkMi4uMTI0ODA5YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQpAQCAtMjQsMjYgKzI0LDI2IEBACiAvKioKICAqIENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlcnsgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlcnsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgYSA8Y29kZT5Db25uZWN0aW9uIDwvY29kZT4gb2JqZWN0IHRvIHRoZSA8Y29kZT5Db25uZWN0aW9uRmFjdG9yeTwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCWluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHJldHVybglBIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gZ2V0dGluZyB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4uCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgaW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIEEgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvciBpbiBnZXR0aW5nIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGFsbG9jYXRlQ29ubmVjdGlvbihNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLAotICAgIAkJCQkgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKSAKLSAgICAJCQkJICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotCU1hbmFnZWRDb25uZWN0aW9uIG1jID0gbWNmLmNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGluZm8pOwotCXJldHVybiBtYy5nZXRDb25uZWN0aW9uKG51bGwsIGluZm8pOyAgICAJCQkJICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24geworICAgIE1hbmFnZWRDb25uZWN0aW9uIG1jID0gbWNmLmNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGluZm8pOworICAgIHJldHVybiBtYy5nZXRDb25uZWN0aW9uKG51bGwsIGluZm8pOwogICAgIH0KLSAgICAKKwogICAgIC8qCiAgICAgICogVGhpcyBjbGFzcyBjb3VsZCBlZmZlY3RpdmVseSBpbXBsZW1lbnQgQ29ubmVjdGlvbiBwb29saW5nIGFsc28uCiAgICAgICogQ291bGQgYmUgZG9uZSBmb3IgRkNTLgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEKaW5kZXggMzljNzg3Ni4uYzQ3N2ZjMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCkBAIC0xOSwxMCArMTksMTAgQEAKIC8qKgogICogQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZveyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm97CiAKICAgICBwcml2YXRlIFN0cmluZyB1c2VyOwogICAgIHByaXZhdGUgU3RyaW5nIHBhc3N3b3JkOwpAQCAtMzAsOCArMzAsOCBAQAogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCVVzZXIgTmFtZS4KLSAgICAgKiBAcGFyYW0JcGFzc3dvcmQJUGFzc3dvcmQKKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICBVc2VyIE5hbWUuCisgICAgICogQHBhcmFtICAgIHBhc3N3b3JkICAgIFBhc3N3b3JkCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyhTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkKSB7CiAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7CkBAIC00MSw3ICs0MSw3IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSB1c2VyIG5hbWUgb2YgdGhlIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKgotICAgICAqIEByZXR1cm4JVXNlciBuYW1lIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KKyAgICAgKiBAcmV0dXJuICAgIFVzZXIgbmFtZSBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyKCkgewogICAgICAgICByZXR1cm4gdXNlcjsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHBhc3N3b3JkIG9mIHRoZSBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVBhc3N3b3JkIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KKyAgICAgKiBAcmV0dXJuICAgIFBhc3N3b3JkIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gcGFzc3dvcmQ7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgLyoqCiAgICAgICogVmVyaWZ5IHdoZXRoZXIgdHdvIENvbm5lY3Rpb25SZXF1ZXN0SW5mb3MgYXJlIGVxdWFsLgogICAgICAqCi0gICAgICogQHJldHVybglUcnVlLCBpZiB0aGV5IGFyZSBlcXVhbCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqIEByZXR1cm4gICAgVHJ1ZSwgaWYgdGhleSBhcmUgZXF1YWwgYW5kIGZhbHNlIG90aGVyd2lzZS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewogICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTsKQEAgLTc1LDE4ICs3NSwxOCBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgaGFzaGNvZGUgb2YgdGhlIG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaENvZGUuCisgICAgICogQHJldHVybiAgICBoYXNoQ29kZS4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewogICAgICAgICBTdHJpbmcgcmVzdWx0ID0gIiIgKyB1c2VyICsgcGFzc3dvcmQ7CiAgICAgICAgIHJldHVybiByZXN1bHQuaGFzaENvZGUoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21wYXJlcyB0d28gb2JqZWN0cy4KICAgICAgKgotICAgICAqIEBwYXJhbQlvMQlGaXJzdCBvYmplY3QuCi0gICAgICogQHBhcmFtCW8yCVNlY29uZCBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG8xICAgIEZpcnN0IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgbzIgICAgU2Vjb25kIG9iamVjdC4KICAgICAgKi8KICAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbChPYmplY3QgbzEsIE9iamVjdCBvMikgewogICAgICAgICBpZiAobzEgPT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IGI2N2QyM2EuLjY1Mzc1NTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTMxLDM2ICszMSwzNiBAQAogLyoqCiAgKiBEYXRhIFNvdXJjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzAKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMwCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiAKIHB1YmxpYyBjbGFzcyBEU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBleHRlbmRzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB7Ci0gICAKKwogICAgIHByaXZhdGUgdHJhbnNpZW50IGphdmF4LnNxbC5EYXRhU291cmNlIGRhdGFTb3VyY2VPYmo7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwogICAgIH0KICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBuZXcgcGh5c2ljYWwgY29ubmVjdGlvbiB0byB0aGUgdW5kZXJseWluZyBFSVMgcmVzb3VyY2UKICAgICAgKiBtYW5hZ2VyLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCWFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCW9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKLSAgICAgKiAgICAgICAJCQkJY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QgCi0gICAgICogQHRocm93cwlSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCQlwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0CisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24oamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0IHN1YmplY3QsCiAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtNjgsNTggKzY4LDU4IEBACiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uIik7CiAgICAgICAgIH0KICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcywgc3ViamVjdCwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGRhdGFTb3VyY2VPYmogPT0gbnVsbCkgewogICAgICAgICAgICAgaWYoZHNPYmpCdWlsZGVyID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBkc09iakJ1aWxkZXIgPSBuZXcgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIoc3BlYyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VPYmogPSAoamF2YXguc3FsLkRhdGFTb3VyY2UpIGRzT2JqQnVpbGRlci5jb25zdHJ1Y3REYXRhU291cmNlT2JqZWN0KCk7CiAgICAgICAgICAgICB9IGNhdGNoKENsYXNzQ2FzdEV4Y2VwdGlvbiBjY2UpIHsKLQkgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NjZSIsIGNjZSk7CisgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jY2UiLCBjY2UpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLlJlc291cmNlRXhjZXB0aW9uKGNjZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZHNDb25uID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKLQkgICAgLyogRm9yIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2VyL3Bhc3N3ZCBvZiB0aGUgY29ubmVjdGlvbiBwb29sIGlzCi0JICAgICAqIGVxdWFsIHRvIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgZm9yIHRoZSBjb25uZWN0aW9uIHJlcXVlc3QKLQkgICAgICogZ2V0IGEgY29ubmVjdGlvbiBmcm9tIHRoaXMgcG9vbCBkaXJlY3RseS4KLQkgICAgICogZm9yIGFsbCBvdGhlciBjb25kaXRpb25zIGdvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uCi0JICAgICAqLwotCSAgICBpZiAoIGlzRXF1YWwoIHBjLCBnZXRVc2VyKCksIGdldFBhc3N3b3JkKCkgKSApIHsKLQkgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbigpOwotCSAgICB9IGVsc2UgewotCSAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKHBjLmdldFVzZXJOYW1lKCksIAotCQkgICAgbmV3IFN0cmluZyhwYy5nZXRQYXNzd29yZCgpKSk7Ci0JICAgIH0KKyAgICAgICAgLyogRm9yIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2VyL3Bhc3N3ZCBvZiB0aGUgY29ubmVjdGlvbiBwb29sIGlzCisgICAgICAgICAqIGVxdWFsIHRvIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgZm9yIHRoZSBjb25uZWN0aW9uIHJlcXVlc3QKKyAgICAgICAgICogZ2V0IGEgY29ubmVjdGlvbiBmcm9tIHRoaXMgcG9vbCBkaXJlY3RseS4KKyAgICAgICAgICogZm9yIGFsbCBvdGhlciBjb25kaXRpb25zIGdvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uCisgICAgICAgICAqLworICAgICAgICBpZiAoIGlzRXF1YWwoIHBjLCBnZXRVc2VyKCksIGdldFBhc3N3b3JkKCkgKSApIHsKKyAgICAgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKHBjLmdldFVzZXJOYW1lKCksCisgICAgICAgICAgICBuZXcgU3RyaW5nKHBjLmdldFBhc3N3b3JkKCkpKTsKKyAgICAgICAgfQogICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CiAgICAgICAgICAgICBzcWxlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfY3JlYXRlX2Nvbm4iLCBzcWxlKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQ6ICIgKyAKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2NyZWF0ZV9jb25uIiwgc3FsZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBjb3VsZCBub3QgYmUgYWxsb2NhdGVkOiAiICsKICAgICAgICAgICAgICAgICBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpewotICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbihudWxsLCBkc0Nvbm4sIHBjLCB0aGlzKTsKICAgICAgICAgLy9HSkNJTlQKICAgICAgICAgLypzZXRJc29sYXRpb24obWMpOwogICAgICAgICBpc1ZhbGlkKG1jKTsgKi8KICAgICAgICAgcmV0dXJuIG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0byAKKyAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8KICAgICAgKiBhbm90aGVyIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCW90aGVyCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCi0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQotICAgICAqCQlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBvdGhlciAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZQorICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQorICAgICAqICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xMzAsNDA5ICsxMzAsNDA5IEBACiAgICAgICAgICAqIGlmIGFuZCBvbmx5IGlmIHRoZWlyIHByb3BlcnRpZXMgYXJlIHRoZSBzYW1lLgogICAgICAgICAgKi8KICAgICAgICAgaWYob3RoZXIgaW5zdGFuY2VvZiBjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpIHsKLSAgICAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBvdGhlck1DRiA9IAorICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG90aGVyTUNGID0KICAgICAgICAgICAgICAgICAoY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KSBvdGhlcjsKICAgICAgICAgICAgIHJldHVybiB0aGlzLnNwZWMuZXF1YWxzKG90aGVyTUNGLnNwZWMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZXJ2ZXJOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNlcnZlck5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRzZXJ2ZXJOYW1lKFN0cmluZyBzZXJ2ZXJOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUsIHNlcnZlck5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglzZXJ2ZXJOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgc2VydmVyTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHNlcnZlck5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZXJ2ZXJOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNlcnZlck5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJOYW1lKFN0cmluZyBzZXJ2ZXJOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUsIHNlcnZlck5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglzZXJ2ZXJOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgc2VydmVyTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlck5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb3J0TnVtYmVyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBvcnROdW1iZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRwb3J0TnVtYmVyKFN0cmluZyBwb3J0TnVtYmVyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIsIHBvcnROdW1iZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHJldHVybglwb3J0TnVtYmVyCi0gICAgICogQHNlZQk8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcG9ydE51bWJlcgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHBvcnROdW1iZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb3J0TnVtYmVyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBvcnROdW1iZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRQb3J0TnVtYmVyKFN0cmluZyBwb3J0TnVtYmVyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIsIHBvcnROdW1iZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHJldHVybglwb3J0TnVtYmVyCi0gICAgICogQHNlZQk8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcG9ydE51bWJlcgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBvcnROdW1iZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRhdGFiYXNlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRhdGFiYXNlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGF0YWJhc2VOYW1lKFN0cmluZyBkYXRhYmFzZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FLCBkYXRhYmFzZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRhdGFiYXNlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGF0YWJhc2VOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkYXRhYmFzZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGF0YWJhc2VOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGF0YWJhc2VOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREYXRhYmFzZU5hbWUoU3RyaW5nIGRhdGFiYXNlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUsIGRhdGFiYXNlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGF0YWJhc2VOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkYXRhYmFzZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERhdGFiYXNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkYXRhU291cmNlTmFtZShTdHJpbmcgZHNuKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FLCBkc24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRzbgotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkc24KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZGF0YVNvdXJjZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREYXRhU291cmNlTmFtZShTdHJpbmcgZHNuKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FLCBkc24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRzbgotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkc24KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGF0YVNvdXJjZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGVzYwk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVzYyAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkZXNjcmlwdGlvbihTdHJpbmcgZGVzYykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiwgZGVzYyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRlc2MKLSAgICAgKiBAc2VlCTxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVzYworICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkZXNjcmlwdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZXNjCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZXNjICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OLCBkZXNjKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVzYwotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZXNjCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbndQcm90b2NvbAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG53UHJvdG9jb2wgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldG5ldHdvcmtQcm90b2NvbChTdHJpbmcgbndQcm90b2NvbCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wsIG53UHJvdG9jb2wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCW53UHJvdG9jb2wKLSAgICAgKiBAc2VlCTxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIG53UHJvdG9jb2wKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldG5ldHdvcmtQcm90b2NvbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlud1Byb3RvY29sCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbndQcm90b2NvbCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TmV0d29ya1Byb3RvY29sKFN0cmluZyBud1Byb3RvY29sKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCwgbndQcm90b2NvbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbndQcm90b2NvbAotICAgICAqIEBzZWUJPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbndQcm90b2NvbAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmV0d29ya1Byb3RvY29sKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jcm9sZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJvbGVOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHJvbGVOYW1lKFN0cmluZyByb2xlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSwgcm9sZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jcm9sZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcm9sZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0cm9sZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXJvbGVOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICByb2xlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSb2xlTmFtZShTdHJpbmcgcm9sZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUsIHJvbGVOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXJvbGVOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHJvbGVOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFJvbGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpOwogICAgIH0KIAotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVPdXQJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBsb2dpblRpbWVPdXQgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGxvZ2luVGltZU91dChTdHJpbmcgbG9naW5UaW1lT3V0KSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCwgbG9naW5UaW1lT3V0KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHJldHVybglsb2dpblRpbWVvdXQKLSAgICAgKiBAc2VlCTxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGxvZ2luVGltZW91dAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0bG9naW5UaW1lT3V0KCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHBhcmFtCWxvZ2luVGltZU91dAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZU91dCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9naW5UaW1lT3V0KFN0cmluZyBsb2dpblRpbWVPdXQpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VULCBsb2dpblRpbWVPdXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWxvZ2luVGltZW91dAotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbG9naW5UaW1lb3V0CisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRMb2dpblRpbWVPdXQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZWxpbQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlbGltICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkZWxpbWl0ZXIoU3RyaW5nIGRlbGltKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUiwgZGVsaW0pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVsaW0KLSAgICAgKiBAc2VlCTxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlbGltCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkZWxpbWl0ZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZWxpbQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlbGltICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREZWxpbWl0ZXIoU3RyaW5nIGRlbGltKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUiwgZGVsaW0pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVsaW0KLSAgICAgKiBAc2VlCTxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlbGltCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZWxpbWl0ZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHBhcmFtCWRyaXZlclByb3BzCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRyaXZlclByb3BzICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZHJpdmVyUHJvcGVydGllcyhTdHJpbmcgZHJpdmVyUHJvcHMpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUywgZHJpdmVyUHJvcHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHJldHVybglkcml2ZXJQcm9wcwotICAgICAqIEBzZWUJPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRyaXZlclByb3BzCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZHJpdmVyUHJvcGVydGllcygpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHBhcmFtCWRyaXZlclByb3BzCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRyaXZlclByb3BzICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RHJpdmVyUHJvcGVydGllcyhTdHJpbmcgZHJpdmVyUHJvcHMpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUywgZHJpdmVyUHJvcHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHJldHVybglkcml2ZXJQcm9wcwotICAgICAqIEBzZWUJPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRyaXZlclByb3BzCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RHJpdmVyUHJvcGVydGllcygpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwpAQCAtNTQyLDM1ICs1NDIsMzUgQEAKICAgICAgKiBDaGVjayBpZiB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3NlZCBmb3IgdGhpcyBnZXQgY29ubmVjdGlvbgogICAgICAqIHJlcXVlc3QgaXMgZXF1YWwgdG8gdGhlIHVzZXIvcGFzc3dkIG9mIHRoaXMgY29ubmVjdGlvbiBwb29sLgogICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKCBQYXNzd29yZENyZWRlbnRpYWwgcGMsIFN0cmluZyB1c2VyLCAKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbCggUGFzc3dvcmRDcmVkZW50aWFsIHBjLCBTdHJpbmcgdXNlciwKICAgICAgICAgU3RyaW5nIHBhc3N3b3JkKSB7Ci0gICAgICAgIAotCS8vaWYgZXF1YWwgZ2V0IGRpcmVjdCBjb25uZWN0aW9uIGVsc2UgCi0JLy9nZXQgY29ubmVjdGlvbiB3aXRoIHVzZXIgYW5kIHBhc3N3b3JkLgotCQotCWlmICh1c2VyID09IG51bGwgJiYgcGMgPT0gbnVsbCkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JaWYgKCB1c2VyID09IG51bGwgJiYgcGMgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQl9CiAKLQlpZiggcGMgPT0gbnVsbCApIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfQotCQotCWlmICggdXNlci5lcXVhbHMoIHBjLmdldFVzZXJOYW1lKCkgKSApIHsKLQkgICAgaWYgKCBwYXNzd29yZCA9PSBudWxsICYmIHBjLmdldFBhc3N3b3JkKCkgPT0gbnVsbCApIHsKLQkgICAgICAgIHJldHVybiB0cnVlOwotCSAgICB9Ci0JfQotCQotCWlmICggdXNlci5lcXVhbHMocGMuZ2V0VXNlck5hbWUoKSkgJiYgcGFzc3dvcmQuZXF1YWxzKHBjLmdldFBhc3N3b3JkKCkpICkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9IAotCQotICAgICAgICAKLQlyZXR1cm4gZmFsc2U7CisgICAgLy9pZiBlcXVhbCBnZXQgZGlyZWN0IGNvbm5lY3Rpb24gZWxzZQorICAgIC8vZ2V0IGNvbm5lY3Rpb24gd2l0aCB1c2VyIGFuZCBwYXNzd29yZC4KKworICAgIGlmICh1c2VyID09IG51bGwgJiYgcGMgPT0gbnVsbCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIHVzZXIgPT0gbnVsbCAmJiBwYyAhPSBudWxsICkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmKCBwYyA9PSBudWxsICkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIHVzZXIuZXF1YWxzKCBwYy5nZXRVc2VyTmFtZSgpICkgKSB7CisgICAgICAgIGlmICggcGFzc3dvcmQgPT0gbnVsbCAmJiBwYy5nZXRQYXNzd29yZCgpID09IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggdXNlci5lcXVhbHMocGMuZ2V0VXNlck5hbWUoKSkgJiYgcGFzc3dvcmQuZXF1YWxzKHBjLmdldFBhc3N3b3JkKCkpICkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKworICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCmluZGV4IDMwZGExZmUuLjI5NWMzZmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCkBAIC0yOCwyMiArMjgsMjIgQEAKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CiAvKioKLSAqIEhvbGRzIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlIAorICogSG9sZHMgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCwgd2hpY2ggaXMgdG8gYmUKICAqIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbS4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2UgaW1wbGVtZW50cyBqYXZheC5zcWwuRGF0YVNvdXJjZSwgamF2YS5pby5TZXJpYWxpemFibGUsCi0JCWNvbS5zdW4uYXBwc2Vydi5qZGJjcmEuRGF0YVNvdXJjZSwgamFrYXJ0YS5yZXNvdXJjZS5SZWZlcmVuY2VhYmxleyAKLQkJCQkgICAKKyAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmNyYS5EYXRhU291cmNlLCBqYWthcnRhLnJlc291cmNlLlJlZmVyZW5jZWFibGV7CisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2Y7Ci0gICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsJCQkJICAgCQkJCSAgIAorICAgIHByaXZhdGUgQ29ubmVjdGlvbk1hbmFnZXIgY207CiAgICAgcHJpdmF0ZSBpbnQgbG9naW5UaW1lb3V0OwogICAgIHByaXZhdGUgUHJpbnRXcml0ZXIgbG9nV3JpdGVyOwotICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwkJCQkgICAKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKICAgICBwcml2YXRlIFJlZmVyZW5jZSByZWZlcmVuY2U7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTEsNTcgKzUxLDU3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnID0gZmFsc2U7CiAKICAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdC4gVGhpcyBpcyBjcmVhdGVkIGJ5IHRoZSAKKyAgICAgKiBDb25zdHJ1Y3RzIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdC4gVGhpcyBpcyBjcmVhdGVkIGJ5IHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCAKLSAgICAgKgkJCWNyZWF0aW5nIHRoaXMgb2JqZWN0LgotICAgICAqIEBwYXJhbQljbQk8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gb2JqZWN0IGVpdGhlciBhc3NvY2lhdGVkCi0gICAgICoJCQl3aXRoIEFwcGxpY2F0aW9uIHNlcnZlciBvciBSZXNvdXJjZSBBZGFwdGVyLgorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgIGNyZWF0aW5nIHRoaXMgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBjbSAgICA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gb2JqZWN0IGVpdGhlciBhc3NvY2lhdGVkCisgICAgICogICAgICAgICAgICB3aXRoIEFwcGxpY2F0aW9uIHNlcnZlciBvciBSZXNvdXJjZSBBZGFwdGVyLgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhU291cmNlIChNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLCBDb25uZWN0aW9uTWFuYWdlciBjbSkgewotICAgIAl0aGlzLm1jZiA9IG1jZjsKLSAgICAJaWYgKGNtID09IG51bGwpIHsKLSAgICAJICAgIHRoaXMuY20gPSAoQ29ubmVjdGlvbk1hbmFnZXIpIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIoKTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHRoaXMuY20gPSBjbTsKLSAgICAJfSAgICAJCi0gICAgfSAgIAotICAgIAorICAgICAgICB0aGlzLm1jZiA9IG1jZjsKKyAgICAgICAgaWYgKGNtID09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuY20gPSAoQ29ubmVjdGlvbk1hbmFnZXIpIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuY20gPSBjbTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogCi0gICAgICogQHJldHVybgk8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLiAgICAgIAorICAgICAqCisgICAgICogQHJldHVybiAgICA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJdHJ5IHsKLSAgICAJICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixudWxsKTsgICAgCSAgICAKLSAgICAJfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixudWxsKTsKKyAgICAgICAgfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKIC8vIFRoaXMgaXMgdGVtcG9yYXJ5LiBUaGlzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gU0VWRVJFIGFmdGVyIFRQCi0JICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZSk7Ci0gICAgCX0KKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogCi0gICAgICogQHBhcmFtCXVzZXIJVXNlciBuYW1lIGZvciB0aGUgQ29ubmVjdGlvbi4KLSAgICAgKiBAcGFyYW0JcHdkCVBhc3N3b3JkIGZvciB0aGUgQ29ubmVjdGlvbi4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuICAgICAgCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICBVc2VyIG5hbWUgZm9yIHRoZSBDb25uZWN0aW9uLgorICAgICAqIEBwYXJhbSAgICBwd2QgICAgUGFzc3dvcmQgZm9yIHRoZSBDb25uZWN0aW9uLgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uKFN0cmluZyB1c2VyLCBTdHJpbmcgcHdkKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJdHJ5IHsKLSAgICAJICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvID0gbmV3IENvbm5lY3Rpb25SZXF1ZXN0SW5mbyAodXNlciwgcHdkKTsKLSAgICAJICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixpbmZvKTsKLSAgICAJfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvID0gbmV3IENvbm5lY3Rpb25SZXF1ZXN0SW5mbyAodXNlciwgcHdkKTsKKyAgICAgICAgICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixpbmZvKTsKKyAgICAgICAgfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKIC8vIFRoaXMgaXMgdGVtcG9yYXJ5LiBUaGlzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gU0VWRVJFIGFmdGVyIFRQCi0JICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZSk7Ci0gICAgCX0KLSAgICB9ICAgIAorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUpOworICAgICAgICB9CisgICAgfQogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIKQEAgLTExNCw5MSArMTE0LDkxIEBACiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbihDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAKLSAgICAgICAgQ29ubmVjdGlvbiBkcml2ZXJDb24gPSBjb247IAorICAgICAgICBDb25uZWN0aW9uIGRyaXZlckNvbiA9IGNvbjsKICAgICAgICAgaWYgKGNvbiBpbnN0YW5jZW9mIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSB7Ci0gICAgICAgICAgIGRyaXZlckNvbiA9ICgoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIGNvbikuZ2V0Q29ubmVjdGlvbigpOyAKLSAgICAgICAgfSAKKyAgICAgICAgICAgZHJpdmVyQ29uID0gKChjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgY29uKS5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gZHJpdmVyQ29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9naW4gdGltZW91dAogICAgICAqCiAgICAgICogQHJldHVybiBsb2dpbiB0aW1lb3V0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0TG9naW5UaW1lb3V0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJcmV0dXJuCWxvZ2luVGltZW91dDsKKyAgICAgICAgcmV0dXJuICAgIGxvZ2luVGltZW91dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZ2luIHRpbWVvdXQKICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVvdXQJTG9naW4gdGltZW91dC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lb3V0ICAgIExvZ2luIHRpbWVvdXQuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9naW5UaW1lb3V0KGludCBsb2dpblRpbWVvdXQpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXRoaXMubG9naW5UaW1lb3V0ID0gbG9naW5UaW1lb3V0OworICAgICAgICB0aGlzLmxvZ2luVGltZW91dCA9IGxvZ2luVGltZW91dDsKICAgICB9Ci0gICAgCi0gICAgLyoqIAorCisgICAgLyoqCiAgICAgICogR2V0IHRoZSBsb2d3cml0ZXIgb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT4gUHJpbnRXcml0ZXIgPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIFByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXJldHVybglsb2dXcml0ZXI7CisgICAgICAgIHJldHVybiAgICBsb2dXcml0ZXI7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9nd3JpdGVyIG9uIHRoaXMgb2JqZWN0LgogICAgICAqCiAgICAgICogQHBhcmFtIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKFByaW50V3JpdGVyIGxvZ1dyaXRlcikgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7Ci0gICAgfSAgICAgICAgCi0gICAgICAgIAorICAgICAgICB0aGlzLmxvZ1dyaXRlciA9IGxvZ1dyaXRlcjsKKyAgICB9CisKICAgICBwdWJsaWMgTG9nZ2VyIGdldFBhcmVudExvZ2dlcigpIHRocm93cyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBmZWF0dXJlLiIpOwogICAgIH0KICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KKyAgICAgKiBAcmV0dXJuICAgIERlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7Ci0gICAgCXJldHVybiBkZXNjcmlwdGlvbjsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKICAgICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2NyaXB0aW9uKSB7Ci0gICAgCXRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgICB9ICAgIAotICAgIAorICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgfQorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSByZWZlcmVuY2UuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIDxjb2RlPlJlZmVyZW5jZTwvY29kZT5vYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIFJlZmVyZW5jZSBnZXRSZWZlcmVuY2UoKSB7Ci0gICAgCXJldHVybiByZWZlcmVuY2U7CisgICAgICAgIHJldHVybiByZWZlcmVuY2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSByZWZlcmVuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVmZXJlbmNlIDxjb2RlPlJlZmVyZW5jZTwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICByZWZlcmVuY2UgPGNvZGU+UmVmZXJlbmNlPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlKFJlZmVyZW5jZSByZWZlcmVuY2UpIHsKLSAgICAJdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7CisgICAgICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOwogICAgIH0KIAogICAgIHB1YmxpYyA8VD4gVCB1bndyYXAoQ2xhc3M8VD4gaWZhY2UpIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtMjA2LDYgKzIwNiw2IEBACiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gaXNXcmFwcGVyRm9yKENsYXNzPD8+IGlmYWNlKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQppbmRleCA1NzRlZDY2Li5iZWMwZDZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCkBAIC0xOCwxMyArMTgsMTMgQEAKIAogcHVibGljIGludGVyZmFjZSBKZGJjU2V0dXBBZG1pbiB7CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRUYWJsZU5hbWUoU3RyaW5nIGRiKTsgCisgICAgcHVibGljIHZvaWQgc2V0VGFibGVOYW1lKFN0cmluZyBkYik7CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRhYmxlTmFtZSgpOwogCi0gICAgcHVibGljIHZvaWQgc2V0Sm5kaU5hbWUoU3RyaW5nIG5hbWUpOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRKbmRpTmFtZShTdHJpbmcgbmFtZSk7CiAKLSAgICBwdWJsaWMgU3RyaW5nIGdldEpuZGlOYW1lKCk7IAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0Sm5kaU5hbWUoKTsKIAogICAgIHB1YmxpYyB2b2lkIHNldFNjaGVtYU5hbWUoU3RyaW5nIG5hbWUpOwogCkBAIC0zNCw2ICszNCw2IEBACiAKICAgICBwdWJsaWMgSW50ZWdlciBnZXROb09mUm93cygpOwogCi0gICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZXR1cCgpOyAKKyAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCk7CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhCmluZGV4IDNiZDdjYWQuLmZlYzc0NDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQpAQCAtNjUsMTEgKzY1LDExIEBACiAKIHByaXZhdGUgdm9pZCBwcmludEhpZXJhcmNoeShDbGFzc0xvYWRlciBjbCwgaW50IGNudCl7CiB3aGlsZShjbCAhPSBudWxsKSB7Ci0JZm9yKGludCBpID0wOyBpIDwgY250OyBpKyspIAotCQlTeXN0ZW0ub3V0LnByaW50KCIgIiApOwotCVN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIDoiICsgY2wpOwotCWNsID0gY2wuZ2V0UGFyZW50KCk7Ci0JY250ICs9IDM7CisgICAgZm9yKGludCBpID0wOyBpIDwgY250OyBpKyspCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiAiICk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgOiIgKyBjbCk7CisgICAgY2wgPSBjbC5nZXRQYXJlbnQoKTsKKyAgICBjbnQgKz0gMzsKIH0KIH0KIApAQCAtNzgsMTAgKzc4LDEwIEBACiAgICAgICAgIGZvcihpbnQgaSA9MDsgaSA8IGNudDsgaSsrKQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiAiICk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIG9mIENsYXNzTG9hZGVyIDEgOiIgKyBjbDEpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIG9mIENsYXNzTG9hZGVyIDIgOiIgKyBjbDIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiRVFVQUxTIDogIiArIChjbDEgPT0gY2wyKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgb2YgQ2xhc3NMb2FkZXIgMiA6IiArIGNsMik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJFUVVBTFMgOiAiICsgKGNsMSA9PSBjbDIpKTsKICAgICAgICAgY2wxID0gY2wxLmdldFBhcmVudCgpOwotCWNsMiA9IGNsMi5nZXRQYXJlbnQoKTsKKyAgICBjbDIgPSBjbDIuZ2V0UGFyZW50KCk7CiAgICAgICAgIGNudCArPSAzOwogfQogfQpAQCAtOTAsOTMgKzkwLDkzIEBACiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZXR1cCgpewogCiAgICAgICAgIGlmIChqbmRpTmFtZT09IG51bGwgfHwgam5kaU5hbWUudHJpbSgpLmVxdWFscygiIikpIHsKLQkgICByZXR1cm4gZmFsc2U7Ci0JfQorICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICAgICAgaWYgKHRhYmxlTmFtZT09IG51bGwgfHwgdGFibGVOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgcmV0dXJuIGZhbHNlOwotCX0KKyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKLQlTdGF0ZW1lbnQgcyA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzID0gbnVsbDsKLQlib29sZWFuIGIgPSBmYWxzZTsKKyAgICBTdGF0ZW1lbnQgcyA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzID0gbnVsbDsKKyAgICBib29sZWFuIGIgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKLQkgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkvL2RlYnVnCi0JQ2xhc3MgY2x6ID0gRGF0YVNvdXJjZS5jbGFzczsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAvL2RlYnVnCisgICAgQ2xhc3MgY2x6ID0gRGF0YVNvdXJjZS5jbGFzczsKIC8qCi0JaWYoY2x6LmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRhdGFTb3VyY2UncyBjbGFzeHMgOiAiICsgIGNsei5nZXROYW1lKCkgKyAgIiBjbGFzc2xvYWRlciAiICsgY2x6LmdldENsYXNzTG9hZGVyKCkpOwotCQlwcmludEhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7Ci0JfQotCUNsYXNzIGNscyA9IGljLmxvb2t1cChqbmRpTmFtZSkuZ2V0Q2xhc3MoKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBjbGFzcydzIDogIiArIGNscy5nZXRQYWNrYWdlKCkgKyAiOiIgKyBjbHMuZ2V0TmFtZSgpICArICIgY2xhc3Nsb2FkZXIgIiAgKyBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0JcHJpbnRIaWVyYXJjaHkoY2xzLmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOworICAgIGlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEYXRhU291cmNlJ3MgY2xhc3hzIDogIiArICBjbHouZ2V0TmFtZSgpICsgICIgY2xhc3Nsb2FkZXIgIiArIGNsei5nZXRDbGFzc0xvYWRlcigpKTsKKyAgICAgICAgcHJpbnRIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOworICAgIH0KKyAgICBDbGFzcyBjbHMgPSBpYy5sb29rdXAoam5kaU5hbWUpLmdldENsYXNzKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgY2xhc3MncyA6ICIgKyBjbHMuZ2V0UGFja2FnZSgpICsgIjoiICsgY2xzLmdldE5hbWUoKSAgKyAiIGNsYXNzbG9hZGVyICIgICsgY2xzLmdldENsYXNzTG9hZGVyKCkpOworICAgIHByaW50SGllcmFyY2h5KGNscy5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3Nsb2FkZXJzIGVxdWFsID8gIiArICAoY2x6LmdldENsYXNzTG9hZGVyKCkgPT0gY2xzLmdldENsYXNzTG9hZGVyKCkpKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIiYqJiomKiYqIENvbXBhcmluZyBIaWVyYWNoeSBEYXRhU291cmNlIHZzIGxvb2tlZHVwIik7Ci0JaWYoY2x6LmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgewotCQljb21wYXJlSGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLCBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSwgOCk7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3Nsb2FkZXJzIGVxdWFsID8gIiArICAoY2x6LmdldENsYXNzTG9hZGVyKCkgPT0gY2xzLmdldENsYXNzTG9hZGVyKCkpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiYqJiomKiYqIENvbXBhcmluZyBIaWVyYWNoeSBEYXRhU291cmNlIHZzIGxvb2tlZHVwIik7CisgICAgaWYoY2x6LmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgeworICAgICAgICBjb21wYXJlSGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLCBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSwgOCk7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgbG9va3VwIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgbG9va3VwIik7CiAqLwotCU9iamVjdCBvID0gaWMubG9va3VwKGpuZGlOYW1lKTsKLS8vCVN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgbG9va3VwIGxvb2t1cCIpOworICAgIE9iamVjdCBvID0gaWMubG9va3VwKGpuZGlOYW1lKTsKKy8vICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgbG9va3VwIGxvb2t1cCIpOwogCi0JICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlvIDsKKyAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKW8gOwogLyoKLQlTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGNhc3QiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0gVHJ5aW5nIG91ciBTdHVmZiAhISEiKTsKLQl0cnkgewotCQlDbGFzcyBvMSA9IChDbGFzcy5mb3JOYW1lKCJjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSIpKTsKLQkJQ2xhc3NMb2FkZXIgY2wxID0gbzEuZ2V0Q2xhc3NMb2FkZXIoKTsKLQkJQ2xhc3NMb2FkZXIgY2wyID0gRGF0YVNvdXJjZS5jbGFzcy5nZXRDbGFzc0xvYWRlcigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsMSA9PSBDbDIiICsgKGNsMSA9PSBjbDIpKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2VzIGVxdWFsIiArIChEYXRhU291cmNlLmNsYXNzID09IG8xKSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGNhc3QiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0gVHJ5aW5nIG91ciBTdHVmZiAhISEiKTsKKyAgICB0cnkgeworICAgICAgICBDbGFzcyBvMSA9IChDbGFzcy5mb3JOYW1lKCJjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSIpKTsKKyAgICAgICAgQ2xhc3NMb2FkZXIgY2wxID0gbzEuZ2V0Q2xhc3NMb2FkZXIoKTsKKyAgICAgICAgQ2xhc3NMb2FkZXIgY2wyID0gRGF0YVNvdXJjZS5jbGFzcy5nZXRDbGFzc0xvYWRlcigpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsMSA9PSBDbDIiICsgKGNsMSA9PSBjbDIpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2VzIGVxdWFsIiArIChEYXRhU291cmNlLmNsYXNzID09IG8xKSk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICovCiAgICAgICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIFN0cmluZyBmdWxsVGFibGVOYW1lID0gdGFibGVOYW1lOwotCSAgICBpZiAoc2NoZW1hTmFtZSAhPSBudWxsICYmICghKHNjaGVtYU5hbWUudHJpbSgpLmVxdWFscygiIikpKSkgewotCSAgICAgICAgZnVsbFRhYmxlTmFtZSA9IHNjaGVtYU5hbWUudHJpbSgpICsgIi4iICsgZnVsbFRhYmxlTmFtZTsKLQkgICAgfQotCSAgICBTdHJpbmcgcXJ5ID0gInNlbGVjdCAqIGZyb20gIiArIGZ1bGxUYWJsZU5hbWU7IAorICAgICAgICBTdHJpbmcgZnVsbFRhYmxlTmFtZSA9IHRhYmxlTmFtZTsKKyAgICAgICAgaWYgKHNjaGVtYU5hbWUgIT0gbnVsbCAmJiAoIShzY2hlbWFOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSkpIHsKKyAgICAgICAgICAgIGZ1bGxUYWJsZU5hbWUgPSBzY2hlbWFOYW1lLnRyaW0oKSArICIuIiArIGZ1bGxUYWJsZU5hbWU7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHFyeSA9ICJzZWxlY3QgKiBmcm9tICIgKyBmdWxsVGFibGVOYW1lOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0aW5nIHF1ZXJ5IDoiICsgcXJ5KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRpbmcgcXVlcnkgOiIgKyBxcnkpOwogCi0JICAgIHMgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHJzID0gcy5leGVjdXRlUXVlcnkocXJ5KTsgCisgICAgICAgIHMgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHJzID0gcy5leGVjdXRlUXVlcnkocXJ5KTsKIAogICAgICAgICAgICAgaW50IGkgPSAwOwotCSAgICBpZiAocnMubmV4dCgpKSB7Ci0JICAgICAgICBpKys7Ci0JICAgIH0KKyAgICAgICAgaWYgKHJzLm5leHQoKSkgeworICAgICAgICAgICAgaSsrOworICAgICAgICB9CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gb2Ygcm93cyBmb3VuZDoiICsgaSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vIG9mIHJvd3MgZXhwZWN0ZWQ6IiArIG5vT2ZSb3dzKTsKIAotCSAgICBpZiAoaSA9PSBub09mUm93cy5pbnRWYWx1ZSgpKSB7Ci0JICAgICAgIGIgPSB0cnVlOwotCSAgICB9IGVsc2UgewotCSAgICAgICBiID0gZmFsc2U7Ci0JICAgIH0KLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIGIgPSBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICB0cnkgewotCSAgICAgICAgaWYgKHJzICE9IG51bGwpIHJzLmNsb3NlKCk7Ci0JICAgICAgICBpZiAocyAhPSBudWxsKSBzLmNsb3NlKCk7Ci0JICAgICAgICBpZiAoY29uICE9IG51bGwpIGNvbi5jbG9zZSgpOworICAgICAgICBpZiAoaSA9PSBub09mUm93cy5pbnRWYWx1ZSgpKSB7CisgICAgICAgICAgIGIgPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICBiID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIGIgPSBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKHJzICE9IG51bGwpIHJzLmNsb3NlKCk7CisgICAgICAgICAgICBpZiAocyAhPSBudWxsKSBzLmNsb3NlKCk7CisgICAgICAgICAgICBpZiAoY29uICE9IG51bGwpIGNvbi5jbG9zZSgpOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgfQotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIlJldHVybmluZyBzZXR1cCA6IiArYik7Ci0JcmV0dXJuIGI7CisgICAgICAgIH0KKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXR1cm5pbmcgc2V0dXAgOiIgK2IpOworICAgIHJldHVybiBiOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YQppbmRleCA4ZWJlMDU3Li5jNTRhMjE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YQpAQCAtMjMsNDUgKzIzLDQ1IEBACiAvKioKICAqIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzAzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTG9jYWxUcmFuc2FjdGlvbiBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkxvY2FsVHJhbnNhY3Rpb24gewotICAgIAorCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPi4KLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgcmV0dXJucwotICAgICAqCQkJdGhpcyA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBvYmplY3QgYXMKLSAgICAgKgkJCWEgcmVzdWx0IG9mIDxjb2RlPmdldExvY2FsVHJhbnNhY3Rpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IHJldHVybnMKKyAgICAgKiAgICAgICAgICAgIHRoaXMgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gb2JqZWN0IGFzCisgICAgICogICAgICAgICAgICBhIHJlc3VsdCBvZiA8Y29kZT5nZXRMb2NhbFRyYW5zYWN0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBMb2NhbFRyYW5zYWN0aW9uKE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7CiAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBCZWdpbiBhIGxvY2FsIHRyYW5zYWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBiZWdpbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25TdGFydGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25TdGFydGVkKCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCkuc2V0QXV0b0NvbW1pdChmYWxzZSk7CiAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCBhIGxvY2FsIHRyYW5zYWN0aW9uLgotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24gb3IgY29tbWl0dGluZyB0aGUgdHJhbnNhY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIG9yIGNvbW1pdHRpbmcgdGhlIHRyYW5zYWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgRXhjZXB0aW9uIGUgPSBudWxsOwpAQCAtNzIsMTUgKzcyLDE1IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUm9sbGJhY2sgYSBsb2NhbCB0cmFuc2FjdGlvbi4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uIG9yIHJvbGxpbmcgYmFjayB0aGUgdHJhbnNhY3Rpb24KKyAgICAgKgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gb3Igcm9sbGluZyBiYWNrIHRoZSB0cmFuc2FjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQppbmRleCAzMGY0NjBhLi4yZGFkNTlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCkBAIC00MSw4ICs0MSw4IEBACiAvKioKICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIyCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMgorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gewogCkBAIC01Miw3ICs1Miw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gaXNEZXN0cm95ZWQgPSBmYWxzZTsKICAgICBwcml2YXRlIGJvb2xlYW4gaXNVc2FibGUgPSB0cnVlOwotICAgIAorCiAgICAgcHJpdmF0ZSBpbnQgY29ubmVjdGlvblR5cGUgPSBJU05PVEFQT09MRURDT05ORUNUSU9OOwogICAgIHByaXZhdGUgUG9vbGVkQ29ubmVjdGlvbiBwYyA9IG51bGw7CiAgICAgcHJpdmF0ZSBqYXZhLnNxbC5Db25uZWN0aW9uIGFjdHVhbENvbm5lY3Rpb24gPSBudWxsOwpAQCAtNjIsNyArNjIsNyBAQAogICAgIHByaXZhdGUgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiA9IG51bGw7CiAgICAgcHJpdmF0ZSBYQVJlc291cmNlIHhhciA9IG51bGw7CiAgICAgcHVibGljIENvbm5lY3Rpb25Ib2xkZXIgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZTsKLSAgICAKKwogICAgIC8vR0pDSU5UCiAgICAgcHJpdmF0ZSBpbnQgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZDsKICAgICBwcml2YXRlIGJvb2xlYW4gaXNDbGVhbiA9IGZhbHNlOwpAQCAtNzcsNzEgKzc3LDcxIEBACiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LiBUaGUgcG9vbGVkQ29ubiBwYXJhbWV0ZXIgaXMgZXhwZWN0ZWQKLSAgICAgKiB0byBiZSBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlciBpcyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gY2FzZSB3aGVyZSAKLSAgICAgKiB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaXMgZ290IGZyb20gYSBub24gcG9vbGVkIGRhdGFzb3VyY2Ugb2JqZWN0LiBUaGUgCisgICAgICogdG8gYmUgbnVsbCBhbmQgc3FsQ29ubiBwYXJhbWV0ZXIgaXMgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIGNhc2Ugd2hlcmUKKyAgICAgKiB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaXMgZ290IGZyb20gYSBub24gcG9vbGVkIGRhdGFzb3VyY2Ugb2JqZWN0LiBUaGUKICAgICAgKiBwb29sZWRDb25uIHBhcmFtZXRlciBpcyBleHBlY3RlZCB0byBiZSBub24gbnVsbCBhbmQgc3FsQ29ubiBwYXJhbWV0ZXIKICAgICAgKiBpcyBleHBlY3RlZCB0byBiZSBudWxsIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBkYXRhc291cmNlIG9iamVjdCBpcyBhCiAgICAgICogY29ubmVjdGlvbiBwb29sIGRhdGFzb3VyY2Ugb3IgYW4geGEgZGF0YXNvdXJjZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb29sZWRDb25uCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSAKLSAgICAgKgkJCQlwaHlzaWNhbCBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBwb29sZWQKLSAgICAgKgkJCQk8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsgbnVsbCBvdGhlcndpc2UKLSAgICAgKiBAcGFyYW0Jc3FsQ29ubgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCWNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIG5vbiBwb29sZWQgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47Ci0gICAgICoJCQludWxsIG90aGVyd2lzZQotICAgICAqIEBwYXJhbQlwYXNzd2RDcmVkCW9iamVjdCBjb25hdGluaW5nIHRoZQotICAgICAqCQkJCXVzZXIgYW5kIHBhc3N3b3JkIGZvciBhbGxvY2F0aW5nIHRoZSBjb25uZWN0aW9uCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKLSAgICAgKgkJCQkJdGhhdCBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqCQkJCQlpcyBub3QgdGhlIHNhbWUgYXMgcmV0dXJuZWQgYnkgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqCQkJCQlvYmplY3QgcGFzc2VkCisgICAgICogQHBhcmFtICAgIHBvb2xlZENvbm4gICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlCisgICAgICogICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgcG9vbGVkCisgICAgICogICAgICAgICAgICAgICAgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47IG51bGwgb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHNxbENvbm4gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBub24gcG9vbGVkIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OworICAgICAqICAgICAgICAgICAgbnVsbCBvdGhlcndpc2UKKyAgICAgKiBAcGFyYW0gICAgcGFzc3dkQ3JlZCAgICBvYmplY3QgY29uYXRpbmluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICB1c2VyIGFuZCBwYXNzd29yZCBmb3IgYWxsb2NhdGluZyB0aGUgY29ubmVjdGlvbgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgIHRoYXQgY3JlYXRlZCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgaXMgbm90IHRoZSBzYW1lIGFzIHJldHVybmVkIGJ5IDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb2JqZWN0IHBhc3NlZAogICAgICAqLwotICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbihQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4sIGphdmEuc3FsLkNvbm5lY3Rpb24gc3FsQ29ubiwgCisgICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubiwgamF2YS5zcWwuQ29ubmVjdGlvbiBzcWxDb25uLAogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGFzc3dkQ3JlZCwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYocG9vbGVkQ29ubiA9PSBudWxsICYmIHNxbENvbm4gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDb25uZWN0aW9uIG9iamVjdCBjYW5ub3QgYmUgbnVsbCIpOwogICAgICAgICB9CiAKLQlpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKLQkgICAgYWN0dWFsQ29ubmVjdGlvbiA9IHNxbENvbm47Ci0JfQorICAgIGlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgeworICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gc3FsQ29ubjsKKyAgICB9CiAKICAgICAgICAgcGMgPSBwb29sZWRDb25uOwogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG5ldyBIYXNodGFibGUoKTsKICAgICAgICAgcGFzc3dkQ3JlZGVudGlhbCA9IHBhc3N3ZENyZWQ7CiAgICAgICAgIHRoaXMubWNmID0gbWNmOwotICAgICAgICBpZihwYXNzd2RDcmVkZW50aWFsICE9IG51bGwgJiYgIAorICAgICAgICBpZihwYXNzd2RDcmVkZW50aWFsICE9IG51bGwgJiYKICAgICAgICAgICAgIHRoaXMubWNmLmVxdWFscyhwYXNzd2RDcmVkZW50aWFsLmdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpKSA9PSBmYWxzZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHRoYXQgaGFzIGNyZWF0ZWQgdGhpcyAiICsgCisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgdGhhdCBoYXMgY3JlYXRlZCB0aGlzICIgKwogICAgICAgICAgICAgICAgICJNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSByZXR1cm5lZCBieSIgKwogICAgICAgICAgICAgICAgICAgICAiIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgZm9yIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgICAgICBsb2dXcml0ZXIgPSBtY2YuZ2V0TG9nV3JpdGVyKCk7CiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotCWNlID0gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9DTE9TRUQpOworICAgIGNlID0gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9DTE9TRUQpOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIEFkZHMgYSBjb25uZWN0aW9uIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlsaXN0ZW5lcgk8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbGlzdGVuZXIgICAgPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICogQHNlZSA8Y29kZT5yZW1vdmVDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhZGRDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcihDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBsaXN0ZW5lcikgewotCXRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjsKKyAgICB0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVXNlZCBieSB0aGUgY29udGFpbmVyIHRvIGNoYW5nZSB0aGUgYXNzb2NpYXRpb24gb2YgYW4gYXBwbGljYXRpb24tbGV2ZWwgCisgICAgICogVXNlZCBieSB0aGUgY29udGFpbmVyIHRvIGNoYW5nZSB0aGUgYXNzb2NpYXRpb24gb2YgYW4gYXBwbGljYXRpb24tbGV2ZWwKICAgICAgKiBjb25uZWN0aW9uIGhhbmRsZSB3aXRoIGEgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWNvbm5lY3Rpb24JPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoCi0gICAgICoJCQkJdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUKLSAgICAgKgkJCQkJdmFsaWQgb3IgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIHBhc3NlZCBpcyBudWxsCisgICAgICogQHBhcmFtICAgIGNvbm5lY3Rpb24gICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoCisgICAgICogICAgICAgICAgICAgICAgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdmFsaWQgb3IgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIHBhc3NlZCBpcyBudWxsCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYXNzb2NpYXRlQ29ubmVjdGlvbihPYmplY3QgY29ubmVjdGlvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTE1MiwxMSArMTUyLDExIEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNvbm5lY3Rpb24gaGFuZGxlIGNhbm5vdCBiZSBudWxsIik7CiAgICAgICAgIH0KICAgICAgICAgQ29ubmVjdGlvbkhvbGRlciBjaCA9IChDb25uZWN0aW9uSG9sZGVyKSBjb25uZWN0aW9uOwotICAgICAgICAKKwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSAoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uKWNoLmdldE1hbmFnZWRDb25uZWN0aW9uKCk7Ci0JbWMuYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0JaXNDbGVhbiA9IGZhbHNlOwotICAgICAgICAKKyAgICBtYy5hY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKKyAgICBpc0NsZWFuID0gZmFsc2U7CisKICAgICAgICAgY2guYXNzb2NpYXRlQ29ubmVjdGlvbihhY3R1YWxDb25uZWN0aW9uLCB0aGlzKTsKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBleHBlY3RhdGlvbiBmcm9tIHRoZSBhYm92ZSBtZXRob2QgaXMgdGhhdCB0aGUgY29ubmVjdGlvbiBob2xkZXIKQEAgLTE2NSwzNCArMTY1LDM0IEBACiAgICAgICAgICAqIHRvIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZSB3aXRoIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2UuCiAgICAgICAgICAqIEFueSBwcmV2aW91cyBzdGF0ZW1lbnRzIGFuZCByZXN1bHQgc2V0cyBhbHNvIG5lZWQgdG8gYmUgcmVtb3ZlZC4KICAgICAgICAgICovCi0gICAgICAgICAKKwogICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlLnNldEFjdGl2ZShmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgY2guc2V0QWN0aXZlKHRydWUpOwotICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7IAorICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQXBwbGljYXRpb24gc2VydmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIGZvcmNlIGFueSBjbGVhbnVwIG9uIHRoZSAKKyAgICAgKiBBcHBsaWNhdGlvbiBzZXJ2ZXIgY2FsbHMgdGhpcyBtZXRob2QgdG8gZm9yY2UgYW55IGNsZWFudXAgb24gdGhlCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLiBUaGlzIG1ldGhvZCBjYWxscyB0aGUgaW52YWxpZGF0ZQogICAgICAqIG1ldGhvZCBvbiBhbGwgQ29ubmVjdGlvbkhhbmRsZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgotICAgICAqIAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZSB2YWxpZAorICAgICAqCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlIHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY2xlYW51cCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGNsZWFudXAiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgLyoqCiAgICAgICAgICAqIG1heSBuZWVkIHRvIHNldCB0aGUgYXV0b2NvbW1pdCB0byB0cnVlIGZvciB0aGUgbm9uLXBvb2xlZCBjYXNlLgogICAgICAgICAgKi8KICAgICAgICAgLy9HSkNJTlQKLQkvL2lmIChhY3R1YWxDb25uZWN0aW9uICE9IG51bGwpIHsKLQlpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKKyAgICAvL2lmIChhY3R1YWxDb25uZWN0aW9uICE9IG51bGwpIHsKKyAgICBpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQgPSBhY3R1YWxDb25uZWN0aW9uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKQEAgLTIwMSwxNyArMjAxLDE3IEBACiAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpc0NsZWFuID0gdHJ1ZTsKLSAgICAgICAgCisKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhbGwgdGhlIGNvbm5lY3Rpb24gaGFuZGxlcyBmcm9tIHRoZSB0YWJsZQogICAgICAqIG9mIGNvbm5lY3Rpb24gaGFuZGxlcyBhbmQgaW52YWxpZGF0ZXMgYWxsIG9mIHRoZW0gc28gdGhhdCBhbnkKICAgICAgKiBvcGVyYXRpb24gb24gdGhvc2UgY29ubmVjdGlvbiBoYW5kbGVzIHRocm93cyBhbiBleGNlcHRpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGEgcHJvYmxlbSBpbiByZXRyaWV2aW5nCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAl0aGUgY29ubmVjdGlvbiBoYW5kbGVzCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhIHByb2JsZW0gaW4gcmV0cmlldmluZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbm5lY3Rpb24gaGFuZGxlcwogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBpbnZhbGlkYXRlQWxsQ29ubmVjdGlvbkhhbmRsZXMoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBTZXQgaGFuZGxlcyA9IGNvbm5lY3Rpb25IYW5kbGVzLmtleVNldCgpOwpAQCAtMjI2LDIyICsyMjYsMjIgQEAKICAgICAgICAgfQogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcy5jbGVhcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIERlc3Ryb3lzIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIHJlc291cmNlIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjbG9zaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNsb3NpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGRlc3Ryb3kiKTsKICAgICAgICAgfQotCS8vR0pDSU5UCi0JaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSkgewotCSAgICByZXR1cm47CQotCX0KKyAgICAvL0dKQ0lOVAorICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotCWFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOworICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OKSB7CiAgICAgICAgICAgICAgICAgcGMuY2xvc2UoKTsKQEAgLTI1NSwyOCArMjU1LDI4IEBACiAgICAgICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7CiAgICAgICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gbnVsbDsKICAgICAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbnVsbDsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGZvbGxvd2luZyBleGNlcHRpb24gaGFzIG9jY3VyZWQgZHVyaW5nIGRlc3Ryb3k6ICIgCisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uIGhhcyBvY2N1cmVkIGR1cmluZyBkZXN0cm95OiAiCiAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlOwogICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gbnVsbDsKICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcgY29ubmVjdGlvbiBoYW5kbGUgZm9yIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIAorICAgICAqIENyZWF0ZXMgYSBuZXcgY29ubmVjdGlvbiBoYW5kbGUgZm9yIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsCiAgICAgICogY29ubmVjdGlvbiByZXByZXNlbnRlZCBieSB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIG5lZWRlZCBmb3IgYXV0aGVudGljYXRpb24KLSAgICAgKiBAcGFyYW0JY3hSZXFJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gY2FycmllcyB0aGUgdXNlciAKLSAgICAgKiAgICAgICAJICAgICAgICAgCWFuZCBwYXNzd29yZCByZXF1aXJlZCBmb3IgZ2V0dGluZyB0aGlzIGNvbm5lY3Rpb24uCi0gICAgICogQHJldHVybglDb25uZWN0aW9uCXRoZSBjb25uZWN0aW9uIGhhbmRsZSA8Y29kZT5PYmplY3Q8L2NvZGU+Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBoeXNpY2FsIGNvbm5lY3Rpb24gZnJvbSB0aGUgcG9vbGVkIGNvbm5lY3Rpb24gCi0gICAgICogQHRocm93cwlTZWN1cml0eUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlwYXNzd29yZCBjcmVkZW50aWFscyBvciByZWF1dGhlbnRpY2F0aW9uIGlzIHJlcXVlc3RlZAorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IHBhcmFtZXRlciBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uCisgICAgICogQHBhcmFtICAgIGN4UmVxSW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGNhcnJpZXMgdGhlIHVzZXIKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBwYXNzd29yZCByZXF1aXJlZCBmb3IgZ2V0dGluZyB0aGlzIGNvbm5lY3Rpb24uCisgICAgICogQHJldHVybiAgICBDb25uZWN0aW9uICAgIHRoZSBjb25uZWN0aW9uIGhhbmRsZSA8Y29kZT5PYmplY3Q8L2NvZGU+CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sZWQgY29ubmVjdGlvbgorICAgICAqIEB0aHJvd3MgICAgU2VjdXJpdHlFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQgY3JlZGVudGlhbHMgb3IgcmVhdXRoZW50aWNhdGlvbiBpcyByZXF1ZXN0ZWQKICAgICAgKi8KLSAgICBwdWJsaWMgT2JqZWN0IGdldENvbm5lY3Rpb24oU3ViamVjdCBzdWIsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcUluZm8pIAorICAgIHB1YmxpYyBPYmplY3QgZ2V0Q29ubmVjdGlvbihTdWJqZWN0IHN1YiwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxSW5mbykKICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRDb25uZWN0aW9uIik7CkBAIC0yODQsMTQgKzI4NCwxNCBAQAogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvID0gKGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8pIGN4UmVxSW5mbzsKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3N3ZENyZWQgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLm1jZiwgc3ViLCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIGlmKFNlY3VyaXR5VXRpbHMuaXNQYXNzd29yZENyZWRlbnRpYWxFcXVhbCh0aGlzLnBhc3N3ZENyZWRlbnRpYWwsIHBhc3N3ZENyZWQpID09IGZhbHNlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5zcGkuU2VjdXJpdHlFeGNlcHRpb24oIlJlLWF1dGhlbnRpY2F0aW9uIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvL0dKQ0lOVAogICAgICAgICBnZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gCisKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBmb2xsb3dpbmcgY29kZSBpbiB0aGUgaWYgc3RhdGVtZW50IGZpcnN0IGNoZWNrcyBpZiB0aGlzIE1hbmFnZWRDb25uZWN0aW9uCiAgICAgICAgICAqIGlzIGNsZWFuIG9yIG5vdC4gSWYgaXQgaXMsIGl0IHJlc2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIHRvIHdoYXQKQEAgLTMwMSwyOCArMzAxLDI4IEBACiAgICAgICAgIGlmKGlzQ2xlYW4pIHsKICAgICAgICAgICAgICgoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSltY2YpLnJlc2V0SXNvbGF0aW9uKHRoaXMsIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAgCisKKwogICAgICAgICBDb25uZWN0aW9uSG9sZGVyIGNvbm5Ib2xkZXJPYmplY3QgPSBuZXcgQ29ubmVjdGlvbkhvbGRlcihhY3R1YWxDb25uZWN0aW9uLCB0aGlzKTsKLQlpc0NsZWFuPWZhbHNlOwotICAgICAgICAKKyAgICBpc0NsZWFuPWZhbHNlOworCiAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgIT0gbnVsbCkgewogICAgICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZS5zZXRBY3RpdmUoZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNvbm5Ib2xkZXJPYmplY3Quc2V0QWN0aXZlKHRydWUpOwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY29ubkhvbGRlck9iamVjdDsKLSAKKwogICAgICAgICByZXR1cm4gY29ubkhvbGRlck9iamVjdDsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGFuIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlLiBUaGUgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW50ZXJmYWNlCi0gICAgICogaXMgdXNlZCBieSB0aGUgY29udGFpbmVyIHRvIG1hbmFnZSBsb2NhbCB0cmFuc2FjdGlvbnMgZm9yIGEgUk0gaW5zdGFuY2UuIAorICAgICAqIGlzIHVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBtYW5hZ2UgbG9jYWwgdHJhbnNhY3Rpb25zIGZvciBhIFJNIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLkxvY2FsVHJhbnNhY3Rpb24gZ2V0TG9jYWxUcmFuc2FjdGlvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0zMzEsMTMgKzMzMSwxMyBAQAogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgcmV0dXJuIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTG9jYWxUcmFuc2FjdGlvbih0aGlzKTsKICAgICB9Ci0gICAgIAorCiAgICAgLyoqCi0gICAgICogR2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuIAorICAgICAqIEdldHMgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKiBAc2VlIDxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgUHJpbnRXcml0ZXIgZ2V0TG9nV3JpdGVyKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKQEAgLTM0NSw0NiArMzQ1LDQ2IEBACiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldExvZ1dyaXRlciIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbG9nV3JpdGVyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEdldHMgdGhlIG1ldGFkYXRhIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbm5lY3Rpb24ncyB1bmRlcmx5aW5nIEVJUyAKLSAgICAgKiByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlLiAKKyAgICAgKiBHZXRzIHRoZSBtZXRhZGF0YSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb25uZWN0aW9uJ3MgdW5kZXJseWluZyBFSVMKKyAgICAgKiByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgZ2V0TWV0YURhdGEoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRNZXRhRGF0YSIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhKHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgYW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuIAorICAgICAqIFJldHVybnMgYW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKLSAgICAgKgkJCQkJdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlOb3RTdXBwb3J0ZWRFeGNlcHRpb24JaWYgdW5kZXJseWluZyBkYXRhc291cmNlIGlzIG5vdCBhbgotICAgICAqCQkJCQk8Y29kZT5YQURhdGFTb3VyY2U8L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgICAgIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gICAgaWYgdW5kZXJseWluZyBkYXRhc291cmNlIGlzIG5vdCBhbgorICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5YQURhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2UgZ2V0WEFSZXNvdXJjZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldFhBUmVzb3VyY2UiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYoeGFyID09IG51bGwpIHsKLQkJICAgIC8qKgorICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgICAgICAqIFVzaW5nIHRoZSB3cmFwcGVyIFhBUmVzb3VyY2UuCiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICB4YXIgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLlhBUmVzb3VyY2VJbXBsKCgoWEFDb25uZWN0aW9uKXBjKS5nZXRYQVJlc291cmNlKCksIHRoaXMpOwpAQCAtMzk3LDE2ICszOTcsMTYgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkNhbm5vdCBnZXQgYW4gWEFSZXNvdXJjZSBmcm9tIGEgbm9uIFhBIGNvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlbW92ZXMgYW4gYWxyZWFkeSByZWdpc3RlcmVkIGNvbm5lY3Rpb24gZXZlbnQgbGlzdGVuZXIgZnJvbSB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGlzdGVuZXIJPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+IHRvIGJlIHJlbW92ZWQKKyAgICAgKiBAcGFyYW0gICAgbGlzdGVuZXIgICAgPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+IHRvIGJlIHJlbW92ZWQKICAgICAgKiBAc2VlIDxjb2RlPmFkZENvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJlbW92ZUNvbm5lY3Rpb25FdmVudExpc3RlbmVyKENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JbGlzdGVuZXIgPSBudWxsOworICAgIGxpc3RlbmVyID0gbnVsbDsKICAgICB9CiAKICAgICAvKioKQEAgLTQxNSw3ICs0MTUsNyBAQAogICAgICAqIExvY2FsVHJhbnNhY3Rpb24gb2JqZWN0IHdoZW4gaXRzIGJlZ2luKCkgbWV0aG9kIGlzIGNhbGxlZC4KICAgICAgKi8KICAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZCgpIHsKLQl0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOwkKKyAgICB0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDI0LDE2ICs0MjQsMTYgQEAKICAgICAgKiBMb2NhbFRyYW5zYWN0aW9uIG9iamVjdCB3aGVuIGl0cyBlbmQoKSBtZXRob2QgaXMgY2FsbGVkLgogICAgICAqLwogICAgIHZvaWQgdHJhbnNhY3Rpb25Db21wbGV0ZWQoKSB7Ci0JdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7Ci0JaWYoY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OIHx8IGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OKSB7CisgICAgdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7CisgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OIHx8IGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQgPSBhY3R1YWxDb25uZWN0aW9uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7CiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAvL2NoZWNrIHdoYXQgdG8gZG8gaW4gdGhpcyBjYXNlISEKLQkJX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMubm90Z290X3R4X2lzb2x2bCIpOworICAgICAgICAgICAgLy9jaGVjayB3aGF0IHRvIGRvIGluIHRoaXMgY2FzZSEhCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLm5vdGdvdF90eF9pc29sdmwiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotCSAgICB0cnkgeworCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbi5jbG9zZSgpOwogICAgICAgICAgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewpAQCAtNDQxLDcgKzQ0MSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotCSAgICAgICAgCisKICAgICAgICAgaXNDbGVhbiA9IHRydWU7CiAKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CkBAIC00NTMsMjggKzQ1MywyOCBAQAogICAgICAqIG9yIG5vdC4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpIHsKLQlyZXR1cm4gdHJhbnNhY3Rpb25JblByb2dyZXNzOworICAgIHJldHVybiB0cmFuc2FjdGlvbkluUHJvZ3Jlc3M7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb3V0CTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcwotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcGFyYW0gICAgb3V0ICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKiBAc2VlIDxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dXcml0ZXIoUHJpbnRXcml0ZXIgb3V0KSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgbG9nV3JpdGVyID0gb3V0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgdGhlIHR5cGUgb2YgdGhlIGNvbm5lY3Rpb24gYmVpbmcgaGVsZCAKKyAgICAgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mIHRoZSBjb25uZWN0aW9uIGJlaW5nIGhlbGQKICAgICAgKiBpbiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JcG9vbGVkQ29ubgk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEByZXR1cm4JY29ubmVjdGlvbiB0eXBlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgcG9vbGVkQ29ubiAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB0eXBlCiAgICAgICovCiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q29ubmVjdGlvblR5cGUoUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uKSB7CiAgICAgICAgIGlmKHBvb2xlZENvbm4gPT0gbnVsbCkgewpAQCAtNDg1LDIyICs0ODUsMjIgQEAKICAgICAgICAgICAgIHJldHVybiBJU1BPT0xFRENPTk5FQ1RJT047CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgCisgICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0CiAgICAgICogY3JlYXRlZCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IGNyZWF0ZWQgdGhpcwotICAgICAqCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCBjcmVhdGVkIHRoaXMKKyAgICAgKiAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCiAgICAgICovCiAgICAgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpIHsKICAgICAgICAgcmV0dXJuIChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KW1jZjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgc3FsIGNvbm5lY3Rpb24gZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LiAKKyAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgc3FsIGNvbm5lY3Rpb24gZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgogICAgICAqCi0gICAgICogQHJldHVybgl0aGUgcGh5c2ljYWwgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRoZSBwaHlzaWNhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPgogICAgICAqLwogICAgIC8vR0pDSU5UCiAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBnZXRBY3R1YWxDb25uZWN0aW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKQEAgLTUwOSw4ICs1MDksOCBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZihhY3R1YWxDb25uZWN0aW9uID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IHBjLmdldENvbm5lY3Rpb24oKTsKLQkJfQotCQkKKyAgICAgICAgfQorCiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CiAgICAgICAgICAgICAgICAgc3FsZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwpAQCAtNTE4LDgxICs1MTgsODEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYWN0dWFsQ29ubmVjdGlvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKICAgICAgKi8KICAgICBQYXNzd29yZENyZWRlbnRpYWwgZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCkgewogICAgICAgICByZXR1cm4gcGFzc3dkQ3JlZGVudGlhbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90IGFuZCB0aHJvd3MgYW4KICAgICAgKiBleGNlcHRpb24gaWYgaXQgaXMgbm90IHZhbGlkLiBBIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyBub3QgdmFsaWQgaWYKICAgICAgKiBkZXN0cm95IGhhcyBub3QgYmVlbiBjYWxsZWQgYW5kIG5vIHBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3IgaGFzCiAgICAgICogb2NjdXJyZWQgcmVuZGVyaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIHVudXNhYmxlLgogICAgICAqCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiA8Y29kZT5kZXN0cm95PC9jb2RlPiBoYXMgYmVlbiBjYWxsZWQgb24gdGhpcyAKLSAgICAgKgkJCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIG9yIGlmIGEgCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlwaHlzaWNhbCBjb25uZWN0aW9uIGVycm9yIG9jY3VycmVkIHJlbmRlcmluZyBpdCB1bnVzYWJsZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgPGNvZGU+ZGVzdHJveTwvY29kZT4gaGFzIGJlZW4gY2FsbGVkIG9uIHRoaXMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIG9yIGlmIGEKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJyZWQgcmVuZGVyaW5nIGl0IHVudXNhYmxlCiAgICAgICovCiAgICAgLy9HSkNJTlQKICAgICB2b2lkIGNoZWNrSWZWYWxpZCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUgfHwgaXNVc2FibGUgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgdGhlIHBoeXNpY2FsICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgdGhlIHBoeXNpY2FsICIgKwogICAgICAgICAgICAgICAgICJjb25uZWN0aW9uIGlzIG5vdCB1c2FibGUuIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHdoZW4gaXRzIGNsb3NlIG1ldGhvZCBpcwogICAgICAqIGNhbGxlZC4gVGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UgIGludmFsaWRhdGVzIHRoZSBjb25uZWN0aW9uIGhhbmRsZQogICAgICAqIGFuZCBzZW5kcyBhIENPTk5FQ1RJT05fQ0xPU0VEIGV2ZW50IHRvIGFsbCB0aGUgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZQlFeGNlcHRpb24gdGhhdCBtYXkgaGF2ZSBvY2N1cmVkIHdoaWxlIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCi0gICAgICogQHBhcmFtCWNvbm5Ib2xkZXJPYmplY3QJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBoYXMgYmVlbiBjbG9zZWQKLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglpbiBjYXNlIGNsb3NpbmcgdGhlIHNxbCBjb25uZWN0aW9uIGdvdCBvdXQgb2YKLSAgICAgKiAgICAgICAgIAkgICAgICAgICAgICAJPGNvZGU+Z2V0Q29ubmVjdGlvbjwvY29kZT4gb24gdGhlIHVuZGVybHlpbmcgCi0gICAgICoJCQkJPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gdGhyb3dzIGFuIGV4Y2VwdGlvbgorICAgICAqIEBwYXJhbSAgICBlICAgIEV4Y2VwdGlvbiB0aGF0IG1heSBoYXZlIG9jY3VyZWQgd2hpbGUgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKKyAgICAgKiBAcGFyYW0gICAgY29ubkhvbGRlck9iamVjdCAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGhhcyBiZWVuIGNsb3NlZAorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIGluIGNhc2UgY2xvc2luZyB0aGUgc3FsIGNvbm5lY3Rpb24gZ290IG91dCBvZgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5nZXRDb25uZWN0aW9uPC9jb2RlPiBvbiB0aGUgdW5kZXJseWluZworICAgICAqICAgICAgICAgICAgICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IHRocm93cyBhbiBleGNlcHRpb24KICAgICAgKi8KICAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoRXhjZXB0aW9uIGUsIENvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGNvbm5Ib2xkZXJPYmplY3QuaW52YWxpZGF0ZSgpOwotICAgICAgICAKKwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgY2Uuc2V0Q29ubmVjdGlvbkhhbmRsZShjb25uSG9sZGVyT2JqZWN0KTsKICAgICAgICAgbGlzdGVuZXIuY29ubmVjdGlvbkNsb3NlZChjZSk7Ci0JCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHdoZW4gaXQgZGV0ZWN0cyBhIGNvbm5lY2lvbgogICAgICAqIHJlbGF0ZWQgZXJyb3IuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZQlFeGNlcHRpb24gdGhhdCBoYXMgb2NjdXJyZWQgZHVyaW5nIGFuIG9wZXJhdGlvbiBvbiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgotICAgICAqIEBwYXJhbQljb25uSG9sZGVyT2JqZWN0CTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgZGV0ZWN0ZWQgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCWNvbm5lY3Rpb24gZXJyb3IKKyAgICAgKiBAcGFyYW0gICAgZSAgICBFeGNlcHRpb24gdGhhdCBoYXMgb2NjdXJyZWQgZHVyaW5nIGFuIG9wZXJhdGlvbiBvbiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSAgICBjb25uSG9sZGVyT2JqZWN0ICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgZGV0ZWN0ZWQgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gZXJyb3IKICAgICAgKi8KLSAgICB2b2lkIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKEV4Y2VwdGlvbiBlLCAKKyAgICB2b2lkIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKEV4Y2VwdGlvbiBlLAogICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCkgewotCSAgICAKKwogICAgICAgICAgQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgY2VsID0gdGhpcy5saXN0ZW5lcjsKICAgICAgICAgIENvbm5lY3Rpb25FdmVudCBjZSA9IG51bGw7CiAgICAgICAgICBjZSA9IGUgPT0gbnVsbCA/IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fRVJST1JfT0NDVVJSRUQpCiAgICAgICAgICAgICAgICAgICAgIDogbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9FUlJPUl9PQ0NVUlJFRCwgZSk7CiAgICAgICAgICBpZiAoY29ubkhvbGRlck9iamVjdCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgY2Uuc2V0Q29ubmVjdGlvbkhhbmRsZShjb25uSG9sZGVyT2JqZWN0KTsKLSAgICAgICAgIH0gICAgCisgICAgICAgICB9CiAKICAgICAgICAgIGNlbC5jb25uZWN0aW9uRXJyb3JPY2N1cnJlZChjZSk7CiAgICAgICAgICBpc1VzYWJsZSA9IGZhbHNlOwogICAgIH0KLSAgICAKLSAgICAKLSAgICAKKworCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aGVuIGl0cyBzdGFydCBtZXRob2QKICAgICAgKiBoYXMgYmVlbiBpbnZva2VkLgpAQCAtNjA2LDcgKzYwNiw3IEBACiAgICAgICAgICAgICBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChlLCBudWxsKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdoZW4gaXRzIGVuZCBtZXRob2QKICAgICAgKiBoYXMgYmVlbiBpbnZva2VkLgpAQCAtNjIwLDcgKzYyMCw3IEBACiAgICAgICAgICAgICBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChlLCBudWxsKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBhIENvbm5lY3Rpb24gSGFuZGxlIHRvIGNoZWNrIGlmIGl0IGlzCiAgICAgICogdGhlIGFjdGl2ZSBDb25uZWN0aW9uIEhhbmRsZS4gSWYgaXQgaXMgbm90IHRoZSBhY3RpdmUgQ29ubmVjdGlvbgpAQCAtNjI5LDI0ICs2MjksMjQgQEAKICAgICAgKiBDb25uZWN0aW9uIEhhbmRsZSBvYmplY3QgdG8gdGhpcyBvYmplY3QgaWYgdGhlIGFjdGl2ZSBDb25uZWN0aW9uCiAgICAgICogSGFuZGxlIGlzIG51bGwuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2gJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCByZXF1ZXN0cyB0aGlzCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugd2hldGhlcgotICAgICAqCQkJaXQgY2FuIGJlIGFjdGl2ZSBvciBub3QKLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglpbiBjYXNlIHRoZSBwaHlzaWNhbCBpcyBub3QgdmFsaWQgb3IKLSAgICAgKgkJCQl0aGVyZSBpcyBhbHJlYWR5IGFuIGFjdGl2ZSBjb25uZWN0aW9uIGhhbmRsZQorICAgICAqIEBwYXJhbSAgICBjaCAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IHJlcXVlc3RzIHRoaXMKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSB3aGV0aGVyCisgICAgICogICAgICAgICAgICBpdCBjYW4gYmUgYWN0aXZlIG9yIG5vdAorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIGluIGNhc2UgdGhlIHBoeXNpY2FsIGlzIG5vdCB2YWxpZCBvcgorICAgICAqICAgICAgICAgICAgICAgIHRoZXJlIGlzIGFscmVhZHkgYW4gYWN0aXZlIGNvbm5lY3Rpb24gaGFuZGxlCiAgICAgICovCi0gICAgIAorCiAgICAgdm9pZCBjaGVja0lmQWN0aXZlKENvbm5lY3Rpb25Ib2xkZXIgY2gpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBpZihpc0Rlc3Ryb3llZCA9PSB0cnVlIHx8IGlzVXNhYmxlID09IGZhbHNlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJUaGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdXNhYmxlIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9PSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7CiAgICAgICAgICAgICBjaC5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBjaCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaGFuZGxlIGNhbm5vdCBiZSB1c2VkIGFzIGFub3RoZXIgY29ubmVjdGlvbiBpcyBjdXJyZW50bHkgYWN0aXZlIik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEKaW5kZXggMjBmMDNhYS4uZjY1MGQ0MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIC8qKgogICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSB7CiAKQEAgLTQxLDgxICs0MSw4MSBAQAogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CWlmIGdldHRpbmcgdGhlIERhdGFiYXNlTWV0YURhdGEgb2JqZWN0IGZhaWxzCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+ICAgIGlmIGdldHRpbmcgdGhlIERhdGFiYXNlTWV0YURhdGEgb2JqZWN0IGZhaWxzCiAgICAgICovCiAgICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEoTWFuYWdlZENvbm5lY3Rpb24gbWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB0aGlzLm1jID0gbWM7CiAgICAgICAgICAgICBkbWQgPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCkuZ2V0TWV0YURhdGEoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgcHJvZHVjdCBuYW1lIG9mIHRoZSB1bmRlcmx5aW5nIEVJUyBpbnN0YW5jZSBjb25uZWN0ZWQKICAgICAgKiB0aHJvdWdoIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JUHJvZHVjdCBuYW1lIG9mIHRoZSBFSVMgaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgUHJvZHVjdCBuYW1lIG9mIHRoZSBFSVMgaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RUlTUHJvZHVjdE5hbWUoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIGRtZC5nZXREYXRhYmFzZVByb2R1Y3ROYW1lKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2RuYW1lIiwgc3FsZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kbmFtZSIsIHNxbGUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgcHJvZHVjdCB2ZXJzaW9uIG9mIHRoZSB1bmRlcmx5aW5nIEVJUyBpbnN0YW5jZSBjb25uZWN0ZWQKICAgICAgKiB0aHJvdWdoIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JUHJvZHVjdCB2ZXJzaW9uIG9mIHRoZSBFSVMgaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgUHJvZHVjdCB2ZXJzaW9uIG9mIHRoZSBFSVMgaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RUlTUHJvZHVjdFZlcnNpb24oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIGRtZC5nZXREYXRhYmFzZVByb2R1Y3RWZXJzaW9uKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2R2ZXJzIiwgc3FsZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kdmVycyIsIHNxbGUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpLCBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIG1heGltdW0gbGltaXQgb24gbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCiAgICAgICogdGhhdCBhbiBFSVMgaW5zdGFuY2UgY2FuIHN1cHBvcnQgYWNyb3NzIGNsaWVudCBwcm9jZXNzZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCU1heGltdW0gbGltaXQgZm9yIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucwotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBNYXhpbXVtIGxpbWl0IGZvciBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0TWF4Q29ubmVjdGlvbnMoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIGRtZC5nZXRNYXhDb25uZWN0aW9ucygpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19tYXhjb25uIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19tYXhjb25uIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBuYW1lIG9mIHRoZSB1c2VyIGFzc29jaWF0ZWQgd2l0aCB0aGUgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2UuIFRoZSBuYW1lCiAgICAgICogY29ycmVzcG9uZHMgdG8gdGhlIHJlc291cmNlIHByaW5jaXBhbCB1bmRlciB3aG9zZSB3aG9zZSBzZWN1cml0eSBjb250ZXh0LCBhIGNvbm5lY3Rpb24KICAgICAgKiB0byB0aGUgRUlTIGluc3RhbmNlIGhhcyBiZWVuIGVzdGFibGlzaGVkLgogICAgICAqCi0gICAgICogQHJldHVybgluYW1lIG9mIHRoZSB1c2VyCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIG5hbWUgb2YgdGhlIHVzZXIKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlck5hbWUoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBqYWthcnRhLnJlc291cmNlLnNwaS5zZWN1cml0eS5QYXNzd29yZENyZWRlbnRpYWwgcGMgPSBtYy5nZXRQYXNzd29yZENyZWRlbnRpYWwoKTsKICAgICAgICAgaWYocGMgIT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIHBjLmdldFVzZXJOYW1lKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG1jLmdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpLmdldFVzZXIoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKaW5kZXggZGFkMWQ3Ny4uNDgyZjMzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQpAQCAtMjQsMTQ4ICsyNCwxNDggQEAKIC8qKgogICogPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gd3JhcHBlciBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzIzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8yMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFhBUmVzb3VyY2VJbXBsIGltcGxlbWVudHMgWEFSZXNvdXJjZSB7CiAKICAgICBYQVJlc291cmNlIHhhcjsKICAgICBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciBYQVJlc291cmNlSW1wbAogICAgICAqCi0gICAgICogQHBhcmFtCXhhcgk8Y29kZT5YQVJlc291cmNlPC9jb2RlPgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgeGFyICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlSW1wbChYQVJlc291cmNlIHhhciwgTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy54YXIgPSB4YXI7CiAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21taXQgdGhlIGdsb2JhbCB0cmFuc2FjdGlvbiBzcGVjaWZpZWQgYnkgeGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCi0gICAgICogQHBhcmFtCW9uZVBoYXNlCUlmIHRydWUsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHNob3VsZCB1c2UgYSBvbmUtcGhhc2UgY29tbWl0IAotICAgICAqICAgICAgIAkgICAgICAgIAlwcm90b2NvbCB0byBjb21taXQgdGhlIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgeGlkLgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEBwYXJhbSAgICBvbmVQaGFzZSAgICBJZiB0cnVlLCB0aGUgcmVzb3VyY2UgbWFuYWdlciBzaG91bGQgdXNlIGEgb25lLXBoYXNlIGNvbW1pdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbCB0byBjb21taXQgdGhlIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgeGlkLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbW1pdChYaWQgeGlkLCBib29sZWFuIG9uZVBoYXNlKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICAvL3RoZSBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCBjYWxsIGhhcyBjb21lIGhlcmUgYmVjYXN1ZQotCS8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93Ci0JLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKLQkvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKLQkvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCi0JLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICAvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdworICAgIC8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCisgICAgLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCisgICAgLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAorICAgIC8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgorICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgICAgIHhhci5jb21taXQoeGlkLCBvbmVQaGFzZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW5kcyB0aGUgd29yayBwZXJmb3JtZWQgb24gYmVoYWxmIG9mIGEgdHJhbnNhY3Rpb24gYnJhbmNoLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCAKLSAgICAgKgkJCXdhcyB1c2VkIHByZXZpb3VzbHkgaW4gdGhlIHN0YXJ0IG1ldGhvZC4KLSAgICAgKiBAcGFyYW0JZmxhZ3MJT25lIG9mIFRNU1VDQ0VTUywgVE1GQUlMLCBvciBUTVNVU1BFTkQKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBpcyB0aGUgc2FtZSBhcyB3aGF0CisgICAgICogICAgICAgICAgICB3YXMgdXNlZCBwcmV2aW91c2x5IGluIHRoZSBzdGFydCBtZXRob2QuCisgICAgICogQHBhcmFtICAgIGZsYWdzICAgIE9uZSBvZiBUTVNVQ0NFU1MsIFRNRkFJTCwgb3IgVE1TVVNQRU5ECiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kKFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgeGFyLmVuZCh4aWQsIGZsYWdzKTsKICAgICAgICAgLy9HSkNJTlQKLQkvL21jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgLy9tYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRlbGwgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IGEgaGV1cmlzdGljYWxseSBjb21wbGV0ZWQgdHJhbnNhY3Rpb24gYnJhbmNoLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHhhci5mb3JnZXQoeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBPYnRhaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBzZXQgZm9yIHRoaXMgCisgICAgICogT2J0YWluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgc2V0IGZvciB0aGlzCiAgICAgICogPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMKKyAgICAgKiBAcmV0dXJuICAgIHRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMKICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldFRyYW5zYWN0aW9uVGltZW91dCgpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIuZ2V0VHJhbnNhY3Rpb25UaW1lb3V0KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZSAKLSAgICAgKiByZXByZXNlbnRlZCBieSB0aGUgdGFyZ2V0IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgcmVzb3VjZSBtYW5hZ2VyIAorICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UKKyAgICAgKiByZXByZXNlbnRlZCBieSB0aGUgdGFyZ2V0IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgcmVzb3VjZSBtYW5hZ2VyCiAgICAgICogaW5zdGFuY2UgcmVwcmVzZW50ZWQgYnkgdGhlIHBhcmFtZXRlciB4YXJlcy4KICAgICAgKgotICAgICAqIEBwYXJhbQl4YXJlcwlBbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hvc2UgcmVzb3VyY2UgbWFuYWdlciAKLSAgICAgKiAJCQlpbnN0YW5jZSBpcyB0byBiZSBjb21wYXJlZCB3aXRoIHRoZSByZXNvdXJjZQotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiBpdCdzIHRoZSBzYW1lIFJNIGluc3RhbmNlOyBvdGhlcndpc2UgZmFsc2UuCisgICAgICogQHBhcmFtICAgIHhhcmVzICAgIEFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aG9zZSByZXNvdXJjZSBtYW5hZ2VyCisgICAgICogICAgICAgICAgICAgaW5zdGFuY2UgaXMgdG8gYmUgY29tcGFyZWQgd2l0aCB0aGUgcmVzb3VyY2UKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgaXQncyB0aGUgc2FtZSBSTSBpbnN0YW5jZTsgb3RoZXJ3aXNlIGZhbHNlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzU2FtZVJNKFhBUmVzb3VyY2UgeGFyZXMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIuaXNTYW1lUk0oeGFyZXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEFzayB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBwcmVwYXJlIGZvciBhIHRyYW5zYWN0aW9uIGNvbW1pdCAKKyAgICAgKiBBc2sgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gcHJlcGFyZSBmb3IgYSB0cmFuc2FjdGlvbiBjb21taXQKICAgICAgKiBvZiB0aGUgdHJhbnNhY3Rpb24gc3BlY2lmaWVkIGluIHhpZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgotICAgICAqIEByZXR1cm4JQSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSByZXNvdXJjZSBtYW5hZ2VyJ3Mgdm90ZSBvbiB0aGUgCi0gICAgICoJCW91dGNvbWUgb2YgdGhlIHRyYW5zYWN0aW9uLiBUaGUgcG9zc2libGUgdmFsdWVzCi0gICAgICoJCWFyZTogWEFfUkRPTkxZIG9yIFhBX09LLiBJZiB0aGUgcmVzb3VyY2UgbWFuYWdlciB3YW50cyAKLSAgICAgKgkJdG8gcm9sbCBiYWNrIHRoZSB0cmFuc2FjdGlvbiwgaXQgc2hvdWxkIGRvIHNvCi0gICAgICoJCWJ5IHJhaXNpbmcgYW4gYXBwcm9wcmlhdGUgPGNvZGU+WEFFeGNlcHRpb248L2NvZGU+IGluIHRoZSBwcmVwYXJlIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcmV0dXJuICAgIEEgdmFsdWUgaW5kaWNhdGluZyB0aGUgcmVzb3VyY2UgbWFuYWdlcidzIHZvdGUgb24gdGhlCisgICAgICogICAgICAgIG91dGNvbWUgb2YgdGhlIHRyYW5zYWN0aW9uLiBUaGUgcG9zc2libGUgdmFsdWVzCisgICAgICogICAgICAgIGFyZTogWEFfUkRPTkxZIG9yIFhBX09LLiBJZiB0aGUgcmVzb3VyY2UgbWFuYWdlciB3YW50cworICAgICAqICAgICAgICB0byByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uLCBpdCBzaG91bGQgZG8gc28KKyAgICAgKiAgICAgICAgYnkgcmFpc2luZyBhbiBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4gaW4gdGhlIHByZXBhcmUgbWV0aG9kLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgcHJlcGFyZShYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnByZXBhcmUoeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBPYnRhaW4gYSBsaXN0IG9mIHByZXBhcmVkIHRyYW5zYWN0aW9uIGJyYW5jaGVzIGZyb20gYSByZXNvdXJjZSBtYW5hZ2VyLgogICAgICAqCi0gICAgICogQHBhcmFtCWZsYWcJT25lIG9mIFRNU1RBUlRSU0NBTiwgVE1FTkRSU0NBTiwgVE1OT0ZMQUdTLiBUTU5PRkxBR1MgCi0gICAgICoJCQltdXN0IGJlIHVzZWQgd2hlbiBubyBvdGhlciBmbGFncyBhcmUgc2V0IGluIGZsYWdzLgotICAgICAqIEByZXR1cm4JVGhlIHJlc291cmNlIG1hbmFnZXIgcmV0dXJucyB6ZXJvIG9yIG1vcmUgWElEcyBmb3IgdGhlIHRyYW5zYWN0aW9uIAotICAgICAqCQlicmFuY2hlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gYSBwcmVwYXJlZCBvciBoZXVyaXN0aWNhbGx5IAotICAgICAqCQljb21wbGV0ZWQgc3RhdGUuIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIG9wZXJhdGlvbiwgdGhlIHJlc291cmNlCi0gICAgICoJCW1hbmFnZXIgc2hvdWxkIHRocm93IHRoZSBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4uCisgICAgICogQHBhcmFtICAgIGZsYWcgICAgT25lIG9mIFRNU1RBUlRSU0NBTiwgVE1FTkRSU0NBTiwgVE1OT0ZMQUdTLiBUTU5PRkxBR1MKKyAgICAgKiAgICAgICAgICAgIG11c3QgYmUgdXNlZCB3aGVuIG5vIG90aGVyIGZsYWdzIGFyZSBzZXQgaW4gZmxhZ3MuCisgICAgICogQHJldHVybiAgICBUaGUgcmVzb3VyY2UgbWFuYWdlciByZXR1cm5zIHplcm8gb3IgbW9yZSBYSURzIGZvciB0aGUgdHJhbnNhY3Rpb24KKyAgICAgKiAgICAgICAgYnJhbmNoZXMgdGhhdCBhcmUgY3VycmVudGx5IGluIGEgcHJlcGFyZWQgb3IgaGV1cmlzdGljYWxseQorICAgICAqICAgICAgICBjb21wbGV0ZWQgc3RhdGUuIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIG9wZXJhdGlvbiwgdGhlIHJlc291cmNlCisgICAgICogICAgICAgIG1hbmFnZXIgc2hvdWxkIHRocm93IHRoZSBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4uCiAgICAgICovCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIucmVjb3ZlcihmbGFnKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBJbmZvcm0gdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gcm9sbCBiYWNrIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2gKICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vdGhlIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkIGNhbGwgaGFzIGNvbWUgaGVyZSBiZWNhc3VlCi0JLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKLQkvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAotCS8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcwotCS8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKLQkvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKKyAgICAvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdworICAgIC8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCisgICAgLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCisgICAgLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAorICAgIC8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgogICAgICAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgICAgICB4YXIucm9sbGJhY2soeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBmb3IgdGhpcyA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZWNvbmRzCXRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMuCi0gICAgICogQHJldHVybgl0cnVlIGlmIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaXMgc2V0IHN1Y2Nlc3NmdWxseTsgb3RoZXJ3aXNlIGZhbHNlLgorICAgICAqIEBwYXJhbSAgICBzZWNvbmRzICAgIHRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMuCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaXMgc2V0IHN1Y2Nlc3NmdWxseTsgb3RoZXJ3aXNlIGZhbHNlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5zZXRUcmFuc2FjdGlvblRpbWVvdXQoc2Vjb25kcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU3RhcnQgd29yayBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2ggc3BlY2lmaWVkIGluIHhpZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc291cmNlCi0gICAgICogQHJldHVybglmbGFncwlPbmUgb2YgVE1OT0ZMQUdTLCBUTUpPSU4sIG9yIFRNUkVTVU1FCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzb3VyY2UKKyAgICAgKiBAcmV0dXJuICAgIGZsYWdzICAgIE9uZSBvZiBUTU5PRkxBR1MsIFRNSk9JTiwgb3IgVE1SRVNVTUUKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdGFydChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vR0pDSU5UCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YQppbmRleCBjZTMyMWFmLi45ZTdmMjUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKQEAgLTI2LDggKzI2LDggQEAKIC8qKgogICogRXhlY3V0ZSB0aGUgbWV0aG9kcyBiYXNlZCBvbiB0aGUgcGFyYW1ldGVycy4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIE1ldGhvZEV4ZWN1dG9yIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAKQEAgLTM5LDEzMCArMzksMTMwIEBACiAgICAgLyoqCiAgICAgICogRXhjZXV0ZSBhIHNpbXBsZSBzZXQgTWV0aG9kLgogICAgICAqCi0gICAgICogQHBhcmFtCXZhbHVlCVZhbHVlIHRvIGJlIHNldC4KLSAgICAgKiBAcGFyYW0JbWV0aG9kCTxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQlvYmoJT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCisgICAgICogQHBhcmFtICAgIHZhbHVlICAgIFZhbHVlIHRvIGJlIHNldC4KKyAgICAgKiBAcGFyYW0gICAgbWV0aG9kICAgIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvYmogICAgT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLiAgICAgCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJ1bkphdmFCZWFuTWV0aG9kKFN0cmluZyB2YWx1ZSwgTWV0aG9kIG1ldGhvZCwgT2JqZWN0IG9iaikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlpZiAodmFsdWU9PW51bGwgfHwgdmFsdWUudHJpbSgpLmVxdWFscygiIikpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAl0cnkgewotICAgIAkgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0gICAgCSAgICBpZiAoIHBhcmFtZXRlcnMubGVuZ3RoID09IDEpIHsKLSAgICAJICAgICAgICBPYmplY3RbXSB2YWx1ZXMgPSBuZXcgT2JqZWN0WzFdOwotICAgIAkgICAgCXZhbHVlc1swXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbMF0sIHZhbHVlKTsKLSAgICAJICAgIAltZXRob2QuaW52b2tlKG9iaiwgdmFsdWVzKTsKLSAgICAJICAgIH0KLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfQorICAgICAgICBpZiAodmFsdWU9PW51bGwgfHwgdmFsdWUudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7CisgICAgICAgICAgICBpZiAoIHBhcmFtZXRlcnMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgICAgICBPYmplY3RbXSB2YWx1ZXMgPSBuZXcgT2JqZWN0WzFdOworICAgICAgICAgICAgICAgIHZhbHVlc1swXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbMF0sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBtZXRob2QuaW52b2tlKG9iaiwgdmFsdWVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogRXhlY3V0ZXMgdGhlIG1ldGhvZC4gICAgIAorICAgICAqIEV4ZWN1dGVzIHRoZSBtZXRob2QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWV0aG9kIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQlvYmoJT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCi0gICAgICogQHBhcmFtCXZhbHVlcwlQYXJhbWV0ZXIgdmFsdWVzIGZvciBleGVjdXRpbmcgdGhlIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgbWV0aG9kIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvYmogICAgT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCisgICAgICogQHBhcmFtICAgIHZhbHVlcyAgICBQYXJhbWV0ZXIgdmFsdWVzIGZvciBleGVjdXRpbmcgdGhlIG1ldGhvZC4KICAgICAgKiBAdGhyb3dzICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4sIGluIGNhc2Ugb2YgdGhlIG1pc21hdGNoIG9mIHBhcmFtZXRlciB2YWx1ZXMgb3IKLSAgICAgKgkJYSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJ1bk1ldGhvZChNZXRob2QgbWV0aG9kLCBPYmplY3Qgb2JqLCBWZWN0b3IgdmFsdWVzKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCXRyeSB7Ci0JICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotCSAgICBpZiAodmFsdWVzLnNpemUoKSAhPSBwYXJhbWV0ZXJzLmxlbmd0aCkgewotCSAgICAgICAgcmV0dXJuOwotCSAgICB9Ci0gICAgCSAgICBPYmplY3RbXSBhY3R1YWxWYWx1ZXMgPSBuZXcgT2JqZWN0W3BhcmFtZXRlcnMubGVuZ3RoXTsKLSAgICAJICAgIGZvciAoaW50IGkgPTA7IGk8cGFyYW1ldGVycy5sZW5ndGggOyBpKyspIHsKLSAgICAJICAgIAlTdHJpbmcgdmFsID0gKFN0cmluZykgdmFsdWVzLmdldChpKTsKLSAgICAJICAgIAlpZiAodmFsLnRyaW0oKS5lcXVhbHMoIk5VTEwiKSkgewotICAgIAkgICAgCSAgICBhY3R1YWxWYWx1ZXNbaV0gPSBudWxsOwotICAgIAkgICAgCX0gZWxzZSB7Ci0gICAgCSAgICAJICAgIGFjdHVhbFZhbHVlc1tpXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbaV0sIHZhbCk7Ci0gICAgCSAgICAJfQotICAgIAkgICAgfQotICAgIAkgICAgbWV0aG9kLmludm9rZShvYmosIGFjdHVhbFZhbHVlcyk7Ci0gICAgCX1jYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfQorICAgICAgICB0cnkgeworICAgICAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKKyAgICAgICAgaWYgKHZhbHVlcy5zaXplKCkgIT0gcGFyYW1ldGVycy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgT2JqZWN0W10gYWN0dWFsVmFsdWVzID0gbmV3IE9iamVjdFtwYXJhbWV0ZXJzLmxlbmd0aF07CisgICAgICAgICAgICBmb3IgKGludCBpID0wOyBpPHBhcmFtZXRlcnMubGVuZ3RoIDsgaSsrKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHZhbCA9IChTdHJpbmcpIHZhbHVlcy5nZXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbC50cmltKCkuZXF1YWxzKCJOVUxMIikpIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsVmFsdWVzW2ldID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhY3R1YWxWYWx1ZXNbaV0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzW2ldLCB2YWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1ldGhvZC5pbnZva2Uob2JqLCBhY3R1YWxWYWx1ZXMpOworICAgICAgICB9Y2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnZlcnRzIHRoZSB0eXBlIGZyb20gU3RyaW5nIHRvIHRoZSBDbGFzcyB0eXBlLgogICAgICAqCi0gICAgICogQHBhcmFtCXR5cGUJCUNsYXNzIG5hbWUgdG8gd2hpY2ggdGhlIGNvbnZlcnNpb24gaXMgcmVxdWlyZWQuCi0gICAgICogQHBhcmFtCXBhcmFtZXRlcglTdHJpbmcgdmFsdWUgdG8gYmUgY29udmVydGVkLgotICAgICAqIEByZXR1cm4JQ29udmVydGVkIHZhbHVlLgorICAgICAqIEBwYXJhbSAgICB0eXBlICAgICAgICBDbGFzcyBuYW1lIHRvIHdoaWNoIHRoZSBjb252ZXJzaW9uIGlzIHJlcXVpcmVkLgorICAgICAqIEBwYXJhbSAgICBwYXJhbWV0ZXIgICAgU3RyaW5nIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KKyAgICAgKiBAcmV0dXJuICAgIENvbnZlcnRlZCB2YWx1ZS4KICAgICAgKiBAdGhyb3dzICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4sIGluIGNhc2Ugb2YgdGhlIG1pc21hdGNoIG9mIHBhcmFtZXRlciB2YWx1ZXMgb3IKLSAgICAgKgkJYSBzZWN1cml0eSB2aW9sYXRpb24uICAgICAKKyAgICAgKiAgICAgICAgYSBzZWN1cml0eSB2aW9sYXRpb24uCiAgICAgICovCiAgICAgcHJpdmF0ZSBPYmplY3QgY29udmVydFR5cGUoQ2xhc3MgdHlwZSwgU3RyaW5nIHBhcmFtZXRlcikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAl0cnkgewotICAgIAkgICAgU3RyaW5nIHR5cGVOYW1lID0gdHlwZS5nZXROYW1lKCk7Ci0gICAgCSAgICBpZiAoIHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlN0cmluZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLk9iamVjdCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIHBhcmFtZXRlcjsKLSAgICAJICAgIH0KLSAgICAJCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJpbnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5JbnRlZ2VyIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEludGVnZXIocGFyYW1ldGVyKTsKLSAgICAJICAgIH0KLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygic2hvcnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TaG9ydCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBTaG9ydChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJieXRlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQnl0ZSIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBCeXRlKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImxvbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Mb25nIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IExvbmcocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJmbG9hdCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkZsb2F0IikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEZsb2F0KHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImRvdWJsZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkRvdWJsZSIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBEb3VibGUocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdEZWNpbWFsIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0ludGVnZXIiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJib29sZWFuIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQm9vbGVhbiIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBCb29sZWFuKHBhcmFtZXRlcik7Ci0gICAgICAgICAgICB9CQkKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFN0cmluZyB0eXBlTmFtZSA9IHR5cGUuZ2V0TmFtZSgpOworICAgICAgICAgICAgaWYgKCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TdHJpbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5PYmplY3QiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7CisgICAgICAgICAgICB9CiAKLSAgICAJICAgIHJldHVybiBwYXJhbWV0ZXI7Ci0gICAgCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbmZlIiwgcGFyYW1ldGVyKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihwYXJhbWV0ZXIrIjogTm90IGEgdmFsaWQgdmFsdWUgZm9yIHRoaXMgbWV0aG9kICIpOwotICAgIAl9CisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJpbnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5JbnRlZ2VyIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEludGVnZXIocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygic2hvcnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TaG9ydCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTaG9ydChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJieXRlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQnl0ZSIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCeXRlKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImxvbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Mb25nIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExvbmcocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZmxvYXQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5GbG9hdCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJkb3VibGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Eb3VibGUiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRG91YmxlKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdEZWNpbWFsIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdJbnRlZ2VyIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJvb2xlYW4iKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Cb29sZWFuIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJvb2xlYW4ocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcjsKKyAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19uZmUiLCBwYXJhbWV0ZXIpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHBhcmFtZXRlcisiOiBOb3QgYSB2YWxpZCB2YWx1ZSBmb3IgdGhpcyBtZXRob2QgIik7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCmluZGV4IGZjMTQ5YmYuLmYwMDhlN2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKQEAgLTI5LDM2ICsyOSwzNiBAQAogLyoqCiAgKiBTZWN1cml0eVV0aWxzIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjIKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIyCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgU2VjdXJpdHlVdGlscyB7CiAKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCwgZ2l2ZW4gCi0gICAgICogdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIHN1YmplY3QgYW5kIHRoZSAKLSAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+LiBJdCBmaXJzdCBjaGVja3MgaWYgdGhlIAotICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gaXMgbnVsbCBvciBub3QuIElmIGl0IGlzIG5vdCBudWxsLCAKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCwgZ2l2ZW4KKyAgICAgKiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgc3ViamVjdCBhbmQgdGhlCisgICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPi4gSXQgZmlyc3QgY2hlY2tzIGlmIHRoZQorICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gaXMgbnVsbCBvciBub3QuIElmIGl0IGlzIG5vdCBudWxsLAogICAgICAqIGl0IGNvbnN0cnVjdHMgYSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCB3aXRoCiAgICAgICogdGhlIHVzZXIgYW5kIHBhc3N3b3JkIGZpZWxkcyBmcm9tIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGFuZCByZXR1cm5zIHRoaXMKLSAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdC4gSWYgdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gCi0gICAgICogaXMgbnVsbCwgaXQgcmV0cmlldmVzIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdHMgZnJvbSAKKyAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdC4gSWYgdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KKyAgICAgKiBpcyBudWxsLCBpdCByZXRyaWV2ZXMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0cyBmcm9tCiAgICAgICogdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IHBhcmFtZXRlciBhbmQgcmV0dXJucyB0aGUgZmlyc3QKLSAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCB3aGljaCBjb250YWlucyBhIAorICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGEKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBpbnN0YW5jZSBlcXVpdmFsZW50CiAgICAgICogdG8gdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIHBhcmFtZXRlci4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+Ci0gICAgICogQHBhcmFtCWluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgotICAgICAqIEByZXR1cm4JPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CWdlbmVyaWMgZXhjZXB0aW9uIGlmIG9wZXJhdGlvbiBmYWlscwotICAgICAqIEB0aHJvd3MJPGNvZGU+U2VjdXJpdHlFeGNlcHRpb248L2NvZGU+CWlmIGFjY2VzcyB0byB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgaXMgZGVuaWVkCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgaW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gICAgZ2VuZXJpYyBleGNlcHRpb24gaWYgb3BlcmF0aW9uIGZhaWxzCisgICAgICogQHRocm93cyAgICA8Y29kZT5TZWN1cml0eUV4Y2VwdGlvbjwvY29kZT4gICAgaWYgYWNjZXNzIHRvIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBpcyBkZW5pZWQKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIFBhc3N3b3JkQ3JlZGVudGlhbCBnZXRQYXNzd29yZENyZWRlbnRpYWwoZmluYWwgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiwKICAgICAgICAgIGZpbmFsIFN1YmplY3Qgc3ViamVjdCwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAKLQlpZiAoaW5mbyA9PSBudWxsKSB7CisgICAgaWYgKGluZm8gPT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKHN1YmplY3QgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTg5LDE0ICs4OSwxNCBAQAogICAgICAgICAgICAgcmV0dXJuIHBjOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0cnVlIGlmIHR3byBzdHJpbmdzIGFyZSBlcXVhbDsgZmFsc2Ugb3RoZXJ3aXNlCi0gICAgICogCi0gICAgICogQHBhcmFtCXN0cjEJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBwYXJhbQlzdHIyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHR3byBzdHJpbmdzIGFyZSBlcXVhbAotICAgICAqICAgICAgICAJZmFsc2UJb3RoZXJ3aXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3RyMSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHN0cjIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgdHdvIHN0cmluZ3MgYXJlIGVxdWFsCisgICAgICogICAgICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBzdGF0aWMgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoU3RyaW5nIHN0cjEsIFN0cmluZyBzdHIyKSB7CiAgICAgICAgIGlmIChzdHIxID09IG51bGwpIHsKQEAgLTEwOSwxMCArMTA5LDEwIEBACiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0cnVlIGlmIHR3byA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdHMgYXJlIGVxdWFsOyBmYWxzZSBvdGhlcndpc2UKICAgICAgKgotICAgICAqIEBwYXJhbQlwQzEJPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqIEBwYXJhbQlwQzIJPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgdHdvIFBhc3N3b3JkQ3JlZGVudGlhbHMgYXJlIGVxdWFsCi0gICAgICogICAgICAgIAlmYWxzZQlvdGhlcndpc2UKKyAgICAgKiBAcGFyYW0gICAgcEMxICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcEMyICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHR3byBQYXNzd29yZENyZWRlbnRpYWxzIGFyZSBlcXVhbAorICAgICAqICAgICAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgc3RhdGljIHB1YmxpYyBib29sZWFuIGlzUGFzc3dvcmRDcmVkZW50aWFsRXF1YWwoUGFzc3dvcmRDcmVkZW50aWFsIHBDMSwgUGFzc3dvcmRDcmVkZW50aWFsIHBDMikgewogICAgICAgICBpZiAocEMxID09IHBDMikKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbAppbmRleCBhNTViYmYwLi5mMDYwZTdkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIuIiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvdXRpbCIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0zMyw3ICszMyw3IEBACiAgICAgICA8amFyIGphcmZpbGU9IiR7ZGlzdC5kaXJ9LyR7cGtnLmRpcn0vdXRpbC5qYXIiIGJhc2VkaXI9IiR7Y2xhc3MuZGlyfSIKICAgICAgICAgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTMiIGRlcGVuZHM9ImNvbXBpbGUiLz4KICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTQiIGRlcGVuZHM9ImNvbXBpbGUiLz4KIApAQCAtNDQsNSArNDQsNSBAQAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCwgcGFja2FnZTE0Ii8+CiAKICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgotICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3Ivc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3Ivc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhCmluZGV4IDk2ZTgzYTUuLmUxNDAwNmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEKQEAgLTE3LDE3ICsxNywxNyBAQAogcGFja2FnZSBzYW1wbGVzLmVqYi5zdWJjbGFzc2luZy5zZXJ2bGV0OwogCiBpbXBvcnQgamF2YS5pby4qOwotaW1wb3J0IGphdmEudXRpbC4qOyAKLWltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsgCi1pbXBvcnQgamF2YXgubmFtaW5nLio7IAotaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7IAoraW1wb3J0IGphdmEudXRpbC4qOworaW1wb3J0IGpha2FydGEuc2VydmxldC4qOworaW1wb3J0IGphdmF4Lm5hbWluZy4qOworaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7CiBpbXBvcnQgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0OwotaW1wb3J0IGpha2FydGEuZWpiLio7IAoraW1wb3J0IGpha2FydGEuZWpiLio7CiAKLWltcG9ydCBzYW1wbGVzLmVqYi5zdWJjbGFzc2luZy5lamIuKjsgCitpbXBvcnQgc2FtcGxlcy5lamIuc3ViY2xhc3NpbmcuZWpiLio7CiBpbXBvcnQgY29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluOwogCi1wdWJsaWMgY2xhc3MgU2ltcGxlQmFua1NlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7ICAKK3B1YmxpYyBjbGFzcyBTaW1wbGVCYW5rU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogCiAgIEluaXRpYWxDb250ZXh0IGluaXRDb250ZXh0ID0gbnVsbDsKQEAgLTQ0LDE0ICs0NCwxNCBAQAogICAgIGRvTG9va3VwKCk7CiAgIH0KIAotICBwdWJsaWMgdm9pZCBkb0dldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgCi0gICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7IAorICBwdWJsaWMgdm9pZCBkb0dldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKKyAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwotICB9ICAKKyAgfQogCi0gIC8qKiBoYW5kbGVzIHRoZSBIVFRQIFBPU1Qgb3BlcmF0aW9uICoqLyAKLSAgcHVibGljIHZvaWQgZG9Qb3N0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSAKLSAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgCisgIC8qKiBoYW5kbGVzIHRoZSBIVFRQIFBPU1Qgb3BlcmF0aW9uICoqLworICBwdWJsaWMgdm9pZCBkb1Bvc3QgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCisgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTaW1wbGVCYW5rU2VydmxldCBpcyBleGVjdXRpbmciKTsKICAgICBTdHJpbmcgU1NOID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoIlNTTiIpOwogCkBAIC02NiwxNCArNjYsMTQgQEAKICAgICBTdHJpbmcgemlwQ29kZSA9ICIiOwogICAgIGxvbmcgY3VycmVudFNhdmluZ3NCYWxhbmNlID0gMDsKICAgICBsb25nIGN1cnJlbnRDaGVja2luZ0JhbGFuY2UgPSAwOwotICAgICAKKwogICAgIFN0cmluZyBhY3Rpb24gPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiYWN0aW9uIik7CiAgICAgaWYgKGFjdGlvbi5lcXVhbHMoIkNyZWF0ZSIpKQogICAgIHsKICAgICAgIG1lc3NhZ2UgPSAiQWRkIEN1c3RvbWVyIjsKICAgICAgIGpzcCA9ICIvU2ltcGxlQmFua0FkZC5qc3AiOwogICAgIH0KLSAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJBZGQgQ3VzdG9tZXIiKSkgCisgICAgZWxzZSBpZiAoYWN0aW9uLmVxdWFscygiQWRkIEN1c3RvbWVyIikpCiAgICAgewogICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZGQgQ3VzdG9tZXIgYnV0dG9uIHByZXNzZWQiKTsKICAgICAgIFNTTiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJTU04iKTsKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gY3VzdG9tZXJTYXZpbmdzSG9tZS5jcmVhdGUoU1NOLCBsYXN0TmFtZSwgZmlyc3ROYW1lLCBhZGRyZXNzMSwgYWRkcmVzczIsIGNpdHksIHN0YXRlLCB6aXBDb2RlKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGNyZWF0ZSB0aGUgY3VzdG9tZXIgc2F2aW5ncyByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogICAgICAgbWVzc2FnZSA9ICJDdXN0b21lciBBZGRlZC4iOwpAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5ncyA9IGN1c3RvbWVyU2F2aW5nc0hvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZmluZCB0aGUgY3VzdG9tZXIgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIGpzcCA9ICIvU2ltcGxlQmFua0VkaXQuanNwIjsKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSBjdXN0b21lclNhdmluZ3NIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIHNhdmluZ3MgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIG1lc3NhZ2UgPSAiRGVsZXRlIEN1c3RvbWVyIjsKQEAgLTEyNywxMiArMTI3LDEyIEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5nc0hvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pLnJlbW92ZSgpOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZGVsZXRlIHRoZSBjdXN0b21lciBzYXZpbmdzIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIG1lc3NhZ2UgPSAiQ3VzdG9tZXIgRGVsZXRlZC4iOwogICAgICAganNwID0gIi9TaW1wbGVCYW5rTWVzc2FnZS5qc3AiOwotICAgIH0gIAorICAgIH0KIAogCiAgICAgZWxzZSBpZiAoYWN0aW9uLmVxdWFscygiVXBkYXRlIikpCkBAIC0xNDIsNyArMTQyLDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gKEN1c3RvbWVyU2F2aW5ncyljdXN0b21lclNhdmluZ3NIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIHNhdmluZ3MgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KIApAQCAtMTUxLDcgKzE1MSw3IEBACiAgICAgICAgIGN1c3RvbWVyQ2hlY2tpbmcgPSAoQ3VzdG9tZXJDaGVja2luZyljdXN0b21lckNoZWNraW5nSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTik7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBmaW5kIHRoZSBjdXN0b21lciBjaGVja2luZyByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogCkBAIC0yMTEsOSArMjExLDkgQEAKICAgICBSZXF1ZXN0RGlzcGF0Y2hlciBkaXNwYXRjaGVyID0gZ2V0U2VydmxldENvbnRleHQoKS5nZXRSZXF1ZXN0RGlzcGF0Y2hlcihqc3ApOwogICAgIGRpc3BhdGNoZXIuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgcmV0dXJuOwotICB9IAorICB9CiAKLSAgcHVibGljIHZvaWQgZG9Mb29rdXAoKSAKKyAgcHVibGljIHZvaWQgZG9Mb29rdXAoKQogICB7CiAgICAgdHJ5IHsKICAgICAgIGluaXRDb250ZXh0ID0gbmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3Ivc3FsL2Ryb3BCYW5rVGFibGVzLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3NxbC9kcm9wQmFua1RhYmxlcy5zcWwKaW5kZXggZGY5ZGYzNC4uMzNhNzA2OSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3Ivc3FsL2Ryb3BCYW5rVGFibGVzLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCkBAIC0xICsxIEBACi1kcm9wIHRhYmxlIGN1c3RvbWVyMjsNCitkcm9wIHRhYmxlIGN1c3RvbWVyMjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvRGVwbG95bWVudFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvRGVwbG95bWVudFRlc3QuamF2YQppbmRleCBmMGE2NTkzLi5hODBjMWZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L0RlcGxveW1lbnRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9EZXBsb3ltZW50VGVzdC5qYXZhCkBAIC00MCwxNiArNDAsMTYgQEAKICAqIEBhdXRob3I6IHRqcXVpbm4KICAqLwogcHVibGljIGFic3RyYWN0IGNsYXNzIERlcGxveW1lbnRUZXN0IHsKLSAgICAKKwogICAgIC8qKiBpbmRpY2F0ZXMgaWYgdGhlIHRlc3QgY2xhc3MgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgeWV0ICovCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7Ci0gICAgCisKICAgICAvKiogYW50IHByb2plY3QgYmFzZWQgb24gdGhlIGJ1aWxkLnhtbCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgKi8KICAgICBwcm90ZWN0ZWQgUHJvamVjdCBwcm9qZWN0OwotICAgIAorCiAgICAgLyoqIHRoZSBidWlsZC54bWwgZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgKi8KICAgICBwcm90ZWN0ZWQgRmlsZSBidWlsZEZpbGU7Ci0gICAgCisKICAgICAvKiogT3VyIGN1cnJlbnQgbWVzc2FnZSBvdXRwdXQgc3RhdHVzLiBGb2xsb3dzIFByb2plY3QuTVNHX1hYWC4gKi8KICAgICBwcml2YXRlIGludCBtc2dPdXRwdXRMZXZlbCA9IFByb2plY3QuTVNHX0lORk87CiAKQEAgLTU3LDcgKzU3LDcgQEAKICAgICBwcml2YXRlIFByaW50U3RyZWFtIG91dDsKICAgICBwcml2YXRlIFByaW50U3RyZWFtIGVycjsKICAgICBwcml2YXRlIElucHV0U3RyZWFtIGluOwotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhlIEFudCBsb2dnZXIgY2xhc3MuIFRoZXJlIG1heSBiZSBvbmx5IG9uZSBsb2dnZXIuIEl0IHdpbGwgaGF2ZQogICAgICAqIHRoZSByaWdodCB0byB1c2UgdGhlICdvdXQnIFByaW50U3RyZWFtLiBUaGUgY2xhc3MgbXVzdCBpbXBsZW1lbnRzIHRoZQpAQCAtNjksNyArNjksNyBAQAogICAgIHB1YmxpYyBEZXBsb3ltZW50VGVzdCgpIHsKICAgICAgICAgaW5pdCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqUmVwb3J0cyBpZiB0aGUgY2xhc3MgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgb3Igbm90LgogICAgICAqQHJldHVybiB3aGV0aGVyIHRoZSBpbml0aWFsaXplZCBoYXMgb2NjdXJyZWQgb3Igbm90CkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNJbml0ZWQoKSB7CiAgICAgICAgIHJldHVybiBpc0luaXRlZDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKlByZXBhcmUgdGhlIGNhbGxhYmxlIGFudCBlbnZpcm9ubWVudCBmb3IgdGhlIHRlc3QuCiAgICAgICovCkBAIC04NywxMiArODcsMTIgQEAKICAgICAgICAgICAgIGVyciA9IFN5c3RlbS5lcnI7CiAgICAgICAgICAgICBvdXQgPSBTeXN0ZW0ub3V0OwogICAgICAgICAgICAgaW4gPSBTeXN0ZW0uaW47Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqVXNlIHRoZSBidWlsZC54bWwgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBidWlsZEZpbGUgPSBuZXcgRmlsZSgiYnVpbGQueG1sIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqVG8gY2FsbCBpbnRvIGFudCwgY3JlYXRlIGEgbmV3IFByb2plY3QgYW5kIHByZXBhcmUgaXQgZm9yIHVzZS4KICAgICAgICAgICAgICAqLwpAQCAtMTAwLDE5ICsxMDAsMTkgQEAKIC8vICAgICAgICAgICAgbXNnT3V0cHV0TGV2ZWwgPSBQcm9qZWN0Lk1TR19WRVJCT1NFOwogICAgICAgICAgICAgcHJvamVjdC5hZGRCdWlsZExpc3RlbmVyKGNyZWF0ZUxvZ2dlcigpKTsKICAgICAgICAgICAgIHByb2plY3Quc2V0QmFzZWRpcigiLiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHByb2plY3QuaW5pdCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKlNldCB1cCB0aGUgcHJvamVjdCB0byB1c2UgdGhlIGJ1aWxkLnhtbCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIFByb2plY3RIZWxwZXIgaGVscGVyID0gUHJvamVjdEhlbHBlci5nZXRQcm9qZWN0SGVscGVyKCk7CiAgICAgICAgICAgICBoZWxwZXIucGFyc2UocHJvamVjdCwgYnVpbGRGaWxlKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpc0luaXRlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKkFzc2VtYmxlcyB0aGUgcmVxdWlyZWQgamFyLCB3YXIsIGVhciBmaWxlcywgZXRjLgogICAgICAqLwpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgcHJvdGVjdGVkIHZvaWQgZGVwbG95KCkgewogICAgICAgICBwcm9qZWN0LmV4ZWN1dGVUYXJnZXQoImRlcGxveS5hc2FkbWluIik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICpSZWRlcGxveXMgdGhlIGFwcGxpY2F0aW9uIHVzaW5nIGFzYWRtaW4uCiAgICAgICpSZW1vdmVzIGFwcCByZWZzIGZpcnN0LCB0aGVuIGRlcGxveXMsIHRoZW4gY3JlYXRlcyBhcHAgcmVmcy4KQEAgLTE0Nyw3ICsxNDcsNyBAQAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIGNsZWFuKCkgewogICAgICAgICBwcm9qZWN0LmV4ZWN1dGVUYXJnZXQoImNsZWFuIik7Ci0gICAgfSAgICAKKyAgICB9CiAKICAgICAvKioKICAgICAgKkNvbnN0cnVjdHMgYW4gRXhlY1Rhc2sgaW5zdGFuY2UsIGxpbmtlZCB0byB0aGUgY3VycmVudCBwcm9qZWN0LCBmb3IKQEAgLTE2MCw3ICsxNjAsNyBAQAogICAgIHByb3RlY3RlZCBFeGVjVGFzayBwcmVwYXJlUnVuRXhlY1Rhc2soKSB7CiAgICAgICAgIC8qCiAgICAgICAgICBUaGlzIGlzIHRoZSBhbnQgZXhjZXJwdCBpbWl0YXRlZCBieSB0aGUgZXhlYyB0YXNrIGJ1aWx0IGJ5IHRoaXMgbWV0aG9kOgotICAgICAgICAgCisKICAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIgcmVzdWx0cHJvcGVydHk9InJlc3VsdCIgZmFpbG9uZXJyb3I9ImZhbHNlIiBvdXRwdXQ9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIj4KICAgICAgICAgICAgICAgICAgICAgPGFyZyBsaW5lPSItY2xpZW50ICR7YXJjaGl2ZWRpcn0vJHt0ZXN0TmFtZX1DbGllbnQuamFyIi8+CiAgICAgICAgICAgICAgICAgPC9leGVjPgpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgICAgIGV4ZWMuc2V0VGFza05hbWUoInJ1bmNsaWVudCIpOwogICAgICAgICByZXR1cm4gZXhlYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKlByZXBhcmVzIGEgY29tbWFuZCBsaW5lIGFyZ3VtZW50IG9iamVjdCBmb3IgdXNlIHdpdGggdGhlIGFwcGNsaWVudAogICAgICAqZXhlYyB0YXNrIHRoYXQgdXNlcyB0aGUgZGVmYXVsdCBzZXQgb2YgYXJndW1lbnRzOiB0aGUgZGVmYXVsdApAQCAtMTg4LDcgKzE4OCw3IEBACiAgICAgICAgIGFyZy5zZXRMaW5lKCItY2xpZW50ICIgKyBhcmNoaXZlRGlyICsgIi8iICsgdGVzdE5hbWUgKyAiQ2xpZW50LmphciIpOwogICAgICAgICByZXR1cm4gYXJnOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgZXhlY3V0aW5nIHRoZSBhcHAgY2xpZW50CiAgICAgICovCkBAIC0xOTcsNyArMTk3LDcgQEAKICAgICAgICAgcHJlcGFyZVJ1bkNvbW1hbmRsaW5lQXJnKGV4ZWMpOwogICAgICAgICBleGVjLmV4ZWN1dGUoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKlByZXBhcmVzIHRoZSB0ZXN0IGVudmlyb25tZW50IGJ5IGNsZWFuaW5nIHRoZSBidWlsZCBkaXJlY3RvcnkKICAgICAgKmFuZCBhc3NlbWJsaW5nIHRoZSByZXF1aXJlZCBqYXIgZmlsZXMuCkBAIC0yMDcsNyArMjA3LDcgQEAKICAgICAgICAgY2xlYW4oKTsKICAgICAgICAgYXNzZW1ibGUoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKkNsZWFucyB1cCBhZnRlciBhbGwgdGVzdHMgaGF2ZSBydW4uICBJbiB0aGlzIGNhc2UsIHVuZGVwbG95cwogICAgICAqdGhlIGFwcGxpY2F0aW9uLgpAQCAtMjE4LDcgKzIxOCw3IEBACiAgICAgfQogCiAgICAgLy8gVGhlIGZvbGxvd2luZyBpcyBpbnNwaXJlZCBieSB0aGUgY29kZSBpbiBhbnQgaXRzZWxmLgotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBidWlsZCBsb2dnZXIgZm9yIHNlbmRpbmcgYnVpbGQgZXZlbnRzIHRvIHRoZSBhbnQKICAgICAgKiBsb2cuCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Fubm90YXRpb24vYXBwY2xpZW50L3NyYy9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYW5ub3RhdGlvbi9hcHBjbGllbnQvc3JjL0NsaWVudC5qYXZhCmluZGV4IDA4NDk4ZDEuLjczYzg0ZDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYW5ub3RhdGlvbi9hcHBjbGllbnQvc3JjL0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYW5ub3RhdGlvbi9hcHBjbGllbnQvc3JjL0NsaWVudC5qYXZhCkBAIC0yMSw4ICsyMSw4IEBACiBpbXBvcnQgdGVzdC5lamIuc3RhdGVmdWwuU0ZIZWxsbzsKIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBTRkhlbGxvIHNmdWwxOyAKLSAgICBwcml2YXRlIHN0YXRpYyBARUpCKG5hbWU9ImVqYi9zZmhlbGxvIikgU0ZIZWxsbyBzZnVsMjsgCisgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBTRkhlbGxvIHNmdWwxOworICAgIHByaXZhdGUgc3RhdGljIEBFSkIobmFtZT0iZWpiL3NmaGVsbG8iKSBTRkhlbGxvIHNmdWwyOwogCiAgICAgcHVibGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hbm5vdGF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYW5ub3RhdGlvbi9idWlsZC54bWwKaW5kZXggNzYwNTQ3MC4uZGQ1ZTE1MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hbm5vdGF0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Fubm90YXRpb24vYnVpbGQueG1sCkBAIC0yMywyNCArMjMsMjQgQEAKIAogPHByb2plY3QgbmFtZT0iZWpiIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0JJmNvbW1vbkJ1aWxkOworICAgICZjb21tb25CdWlsZDsKIAotCTx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgotCQk8ZGVsZXRlIGRpcj0iJHthbm5vdGF0aW9uLnJlcG9ydC5kaXJ9Ii8+CisgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CisgICAgICAgIDxkZWxldGUgZGlyPSIke2Fubm90YXRpb24ucmVwb3J0LmRpcn0iLz4KIAotCQk8YW50IGRpcj0iZWpiIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2VqYiIvPgotCQk8L2FudD4KLQkJPGFudCBkaXI9ImFwcGNsaWVudCIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9hcHBjbGllbnQiLz4KLQkJPC9hbnQ+Ci0JCTxhbnQgZGlyPSJ3ZWIiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vd2ViIi8+Ci0JCTwvYW50PgotCQk8YW50IGRpcj0iaW5oZXJpdGFuY2UiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vaW5oZXJpdGFuY2UiLz4KLQkJPC9hbnQ+CisgICAgICAgIDxhbnQgZGlyPSJlamIiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vZWpiIi8+CisgICAgICAgIDwvYW50PgorICAgICAgICA8YW50IGRpcj0iYXBwY2xpZW50IiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2FwcGNsaWVudCIvPgorICAgICAgICA8L2FudD4KKyAgICAgICAgPGFudCBkaXI9IndlYiIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS93ZWIiLz4KKyAgICAgICAgPC9hbnQ+CisgICAgICAgIDxhbnQgZGlyPSJpbmhlcml0YW5jZSIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9pbmhlcml0YW5jZSIvPgorICAgICAgICA8L2FudD4KIAotCTwvdGFyZ2V0PgorICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Fubm90YXRpb24vZWpiL3NyYy9JbnRlcmNlcHRvckIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYW5ub3RhdGlvbi9lamIvc3JjL0ludGVyY2VwdG9yQi5qYXZhCmluZGV4IDU1MGM2ZmIuLmM4YmRjMGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYW5ub3RhdGlvbi9lamIvc3JjL0ludGVyY2VwdG9yQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYW5ub3RhdGlvbi9lamIvc3JjL0ludGVyY2VwdG9yQi5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgQEFyb3VuZEludm9rZQogICAgIE9iamVjdCBhcm91bmRJbnZva2VCKEludm9jYXRpb25Db250ZXh0IGN0eCkgewogICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9ICAKKyAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHZvaWQgcHJlRGVzdHJveSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYW5ub3RhdGlvbi93ZWIvc3JjL1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Fubm90YXRpb24vd2ViL3NyYy9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDQzNjc5MzkuLmM5OGZlYmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYW5ub3RhdGlvbi93ZWIvc3JjL1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hbm5vdGF0aW9uL3dlYi9zcmMvU2VydmxldFRlc3QuamF2YQpAQCAtMzEsOCArMzEsOCBAQAogCiBARGVjbGFyZVJvbGVzKHsic3RhZmYifSkKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCB7Ci0gICAgcHJpdmF0ZSBARUpCIFNGSGVsbG8gc2Z1bDE7IAotICAgIHByaXZhdGUgQEVKQihuYW1lPSJlamIvc2ZoZWxsbyIpIFNGSGVsbG8gc2Z1bDI7IAorICAgIHByaXZhdGUgQEVKQiBTRkhlbGxvIHNmdWwxOworICAgIHByaXZhdGUgQEVKQihuYW1lPSJlamIvc2ZoZWxsbyIpIFNGSGVsbG8gc2Z1bDI7CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCiAgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYXV0b2RlcGxveS9idWlsZC54bWwKaW5kZXggZjcxYjNhZC4uOGJlNDk2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvYnVpbGQueG1sCkBAIC0yNCwxNSArMjQsMTUgQEAKIAogPHByb2plY3QgbmFtZT0iYXV0b2RlcGxveSIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotCSZjb21tb25CdWlsZDsKLSAgICAgICAgCisgICAgJmNvbW1vbkJ1aWxkOworCiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhdXRvZGVwbG95LnV0aWwuYnVpbGQiIHZhbHVlPSIke2J1aWxkfS91dGlsIi8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhdXRvZGVwbG95LmFyY2hpdmUubmFtZSIgdmFsdWU9InNlcnZsZXRvbmx5LndhciIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iYXV0b2RlcGxveS5hcmNoaXZlIiB2YWx1ZT0iLi4vLi4vYnVpbGQvd2FyL3NlcnZsZXRvbmx5LyR7YXV0b2RlcGxveS5hcmNoaXZlLm5hbWV9Ii8+Ci0gICAgICAgIAorCiAgICAgICAgICZhdXRvZGVwbG95VXRpbDsKIAotCTx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgorICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgogCiAgICAgICAgICAgICA8IS0tCiAgICAgICAgICAgICAgICAgQnVpbGQgdGhlIGNvbW1vbiB0b29scyB1c2VkIGJ5IGF1dG9kZXBsb3kgdGVzdHMuCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgICAgICA8YW50IGRpcj0iLi4vd2FyL3NlcnZsZXRvbmx5IiB0YXJnZXQ9ImFzc2VtYmxlIj4KICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS93YXIvc2VydmxldG9ubHkiLz4KICAgICAgICAgICAgIDwvYW50PgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxhbnQgZGlyPSJzaW1wbGUiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgogICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3NpbXBsZSIvPgogICAgICAgICAgICAgPC9hbnQ+CkBAIC01NSwxNCArNTUsMTQgQEAKICAgICAgICAgICAgIDxhbnQgZGlyPSJzbG93Q29weSIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CiAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vc2xvd0NvcHkiLz4KICAgICAgICAgICAgIDwvYW50PgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDwhLS0gY29tbWVudGVkIG91dCBiZWNhdXNlIGxvZyBzZWFyY2ggb24gTGludXggZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZCAtLT4KICAgICAgICAgICAgIDwhLS0KICAgICAgICAgICAgICAgICAgICAgPGFudCBkaXI9IndpdGhFSkIiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3dpdGhFSkIiLz4KICAgICAgICAgICAgICAgICAgICAgPC9hbnQ+CiAgICAgICAgICAgICAtLT4KLSAgICAgICAgCi0JPC90YXJnZXQ+CisKKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L3NpbXBsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvc2ltcGxlL2J1aWxkLnhtbAppbmRleCA4ZGEzODczLi4wZDQyYTkwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvc2ltcGxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvc2ltcGxlL2J1aWxkLnhtbApAQCAtMjIsMzggKzIyLDM4IEBACiA8IUVOVElUWSBjb21tb25CdWlsZCBTWVNURU0gIi4vLi4vLi4vY29uZmlnL2NvbW1vbi54bWwiPgogXT4KIDwhLS0KLSAgICBUaGlzIG1ha2VzIHN1cmUgdGhhdCByZWRlcGxveW1lbnQgb2YgYW4gYXV0b2RlcGxveWVkIGFwcCB3b3Jrcy4gIFNwZWNpZmljYWxseSwgCisgICAgVGhpcyBtYWtlcyBzdXJlIHRoYXQgcmVkZXBsb3ltZW50IG9mIGFuIGF1dG9kZXBsb3llZCBhcHAgd29ya3MuICBTcGVjaWZpY2FsbHksCiAgICAgaXQgdGVzdHMgdGhhdCB0aGUgdmFsaWRhdGlvbnMgKGdvdmVybmluZyBhcHAgcmVmY3MgaW4gcGFydGljdWxhcikgcGFzcyBhcwogICAgIHRoZSBhdXRvZGVwbG95ZWQgYXBwIGlzIHJlbW92ZWQgYW5kIHRoZW4gcmVkZXBsb3llZC4KIC0tPgotIAorCiA8cHJvamVjdCBuYW1lPSJhdXRvZGVwbG95LXNpbXBsZSIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotIAkmY29tbW9uQnVpbGQ7CisgICAgICZjb21tb25CdWlsZDsKICAgICAgICAgJmF1dG9kZXBsb3lVdGlsOwogCiAgICAgPHByb3BlcnR5IG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0ic2ltcGxlYXV0b2RlcGxveSIvPgotICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXN1bHQucHJvcGVydHkuZmlsZSIgdmFsdWU9IiR7YnVpbGR9L3Jlc3VsdC5wcm9wZXJ0aWVzIi8+Ci08ZWNobz5pbiBzaW1wbGUvYnVpbGQueG1sIGFuZCBidWlsZCBpcyAke2J1aWxkfTwvZWNobz4gICAgICAgICAgICAKKzxlY2hvPmluIHNpbXBsZS9idWlsZC54bWwgYW5kIGJ1aWxkIGlzICR7YnVpbGR9PC9lY2hvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KIAogICAgIDwvdGFyZ2V0PgotCQorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0icHJlcGFyZSI+Ci0gICAgICAgIAorCiAgICAgICAgIDxlY2hvPlVzaW5nIHByZXZpb3VzbHktYnVpbHQgJHthdXRvZGVwbG95LmFyY2hpdmV9PC9lY2hvPgogICAgICAgICA8IS0tCiAgICAgICAgICAgICBTb21lIGVhcmxpZXIgdGVzdHMgc2hvdWxkIGhhdmUgcnVuIGFscmVhZHksIHNvIHRoZSBhcHAgd2UgdXNlIGZvciBhdXRvZGVwbG95IHRlc3RpbmcKICAgICAgICAgICAgIHNob3VsZCBhbHJlYWR5IGJlIGluIHBsYWNlIGluIHRoZSBidWlsZCBkaXJlY3RvcnkuCiAgICAgICAgIC0tPgogICAgIDwvdGFyZ2V0PgotICAgIAotCQotICAgIAorCisKKwogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiIGRlcGVuZHM9ImJ1aWxkIj4KLSAgICAgICAgCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRlc2NyaXB0aW9uIiB2YWx1ZT0iYXV0b2RlcGxveS9zaW1wbGUgVGVzdCBhdXRvZGVwbG95LCBhdXRvLXJlZGVwbG95LCBhbmQgYXV0b3VuZGVwbG95Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICAgIHJlY29yZCB0aGUgcmVzdWx0cyBvZiB0aGUgYXV0b2RlcGxveSBkaXJlY3RvcnkgbW9uaXRvcmluZyBKYXZhIGNsYXNzLgogICAgICAgICAtLT4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke3Jlc3VsdC5wcm9wZXJ0eS5maWxlfSIgcXVpZXQ9InRydWUiLz4KLSAgICAgICAgCisKICAgICAgICAgPCEtLQogICAgICAgICAgICAgRG8gdGhlIGF1dG8tZGVwbG95bWVudC4KICAgICAgICAtLT4KQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDwhLS0KLSAgICAgICAgICAgIFJlZGVwbG95IHRoZSBhcmNoaXZlLiAgVGhpcyB1c2VkIHRvIHRyaWdnZXIgYW4gZXJyb3IgYmVjYXVzZSB0aGUgCisgICAgICAgICAgICBSZWRlcGxveSB0aGUgYXJjaGl2ZS4gIFRoaXMgdXNlZCB0byB0cmlnZ2VyIGFuIGVycm9yIGJlY2F1c2UgdGhlCiAgICAgICAgICAgICBhcHAgcmVmIHdhcyBub3QgcmVtb3ZlZCBiZWZvcmUgdGhlIGFwcCB3YXMgcmVtb3ZlZC4KICAgICAgICAgLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LmF1dG9kZXBsb3kiPgpAQCAtMTEzLDcgKzExMyw3IEBACiAgICAgICAgICAgICAgICAgPGVxdWFscyBhcmcxPSIke3NpbXBsZS5hdXRvZGVwbG95LnVuZGVwbG95UmVzdWx0fSIgYXJnMj0iMCIvPgogICAgICAgICAgICAgPC9hbmQ+CiAgICAgICAgIDwvY29uZGl0aW9uPgotICAgICAgICAKKwogICAgICAgICA8IS0tCiAgICAgICAgICAgICBJZiB0aGUgcHJvcGVydHkgInJlc3VsdCIgd2FzIG5vdCBzZXQgYnkgdGhlICJjb25kaXRpb24iIHRhc2sganVzdCBhYm92ZSB0aGVuIHNvbWV0aGluZwogICAgICAgICAgICAgd2VudCB3cm9uZyBhbmQgd2Ugc2V0IHJlc3VsdCB0byAxIG5vdy4KQEAgLTEyMywxMiArMTIzLDEyIEBACiAgICAgICAgICAgICAgICAgPGlzc2V0IHByb3BlcnR5PSJyZXN1bHQiLz4KICAgICAgICAgICAgIDwvbm90PgogICAgICAgICA8L2NvbmRpdGlvbj4KLSAgICAgICAgCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwcm9jZXNzUmVzdWx0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXN1bHQiIHZhbHVlPSIke3Jlc3VsdH0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2ciIHZhbHVlPSIke2J1aWxkfS9vdXRwdXQubG9nIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgIDwvdGFyZ2V0PgotICAgIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvc2xvd0NvcHkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L3Nsb3dDb3B5L2J1aWxkLnhtbAppbmRleCAzNzE3MGQyLi5lMDdkMzM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvc2xvd0NvcHkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYXV0b2RlcGxveS9zbG93Q29weS9idWlsZC54bWwKQEAgLTIyLDIxICsyMiwyMSBAQAogPCFFTlRJVFkgY29tbW9uQnVpbGQgU1lTVEVNICIuLy4uLy4uL2NvbmZpZy9jb21tb24ueG1sIj4KIF0+CiA8IS0tCi0gICAgTm90ZSB0aGF0IHRoaXMgY3VycmVudGx5IGFzc3VtZXMgdGhhdCB0aGUgZWFyL2VhcndpdGhlamIgYW5kIGVqYi9zdGF0ZWxlc3NoZWxsbyBwcm9qZWN0cyBoYXZlIHJ1biB0byBidWlsZCAKKyAgICBOb3RlIHRoYXQgdGhpcyBjdXJyZW50bHkgYXNzdW1lcyB0aGF0IHRoZSBlYXIvZWFyd2l0aGVqYiBhbmQgZWpiL3N0YXRlbGVzc2hlbGxvIHByb2plY3RzIGhhdmUgcnVuIHRvIGJ1aWxkCiAgICAgdGhlIGVhciB1c2VkIGZvciB0aGlzIHRlc3QuCiAKICAgICBBbHNvIG5vdGUgdGhhdCB0aGlzIHRlc3QgZXhwZWN0cyB0aGUgJ2dyZXAnIGNvbW1hbmQgdG8gYmUgcHJlc2VudCBpbiB0aGUgb3BlcmF0aW5nIGVudmlyb25tZW50LgotICAgIFRoaXMgaXMgZmluZSBvbiBTb2xhcmlzIGFuZCBMaW51eCBzeXN0ZW1zLCBhbmQgc2hvdWxkIGJlIGZpbmUgb24gV2luZG93cyBzeXN0ZW1zIHByZXBhcmVkIAotICAgIGFjY29yZGluZyB0byB0aGUgcmVxdWlyZW1lbnRzIGZvciBidWlsZGluZyB0aGUgYXBwIHNlcnZlci4gIAorICAgIFRoaXMgaXMgZmluZSBvbiBTb2xhcmlzIGFuZCBMaW51eCBzeXN0ZW1zLCBhbmQgc2hvdWxkIGJlIGZpbmUgb24gV2luZG93cyBzeXN0ZW1zIHByZXBhcmVkCisgICAgYWNjb3JkaW5nIHRvIHRoZSByZXF1aXJlbWVudHMgZm9yIGJ1aWxkaW5nIHRoZSBhcHAgc2VydmVyLgogLS0+Ci0gCisKIDxwcm9qZWN0IG5hbWU9ImF1dG9kZXBsb3ktc2xvd2NvcHkiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLSAJJmNvbW1vbkJ1aWxkOworICAgICAmY29tbW9uQnVpbGQ7CiAgICAgICAgICZhdXRvZGVwbG95VXRpbDsKIAogICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9InNsb3djb3B5Ii8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iaW5wdXRBcmNoaXZlIiB2YWx1ZT0iJHthdXRvZGVwbG95LmFyY2hpdmV9Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXRBcmNoaXZlIiB2YWx1ZT0iJHthdXRvZGVwbG95LmRpcn0vJHthdXRvZGVwbG95LmFyY2hpdmUubmFtZX0iLz4KQEAgLTQ3LDQxICs0Nyw0MSBAQAogICAgICAgICAgICAgaW50ZXJ2YWwgd2l0aCB3aGljaCB0aGUgYXV0b2RlcGxveSB0aHJlYWQgcmVjaGVja3MgdGhlIGZpbGVzCiAgICAgICAgICAgICBpbiB0aGUgYXV0b2RlcGxveSBkaXJlY3RvcnkuICBCeSB1c2luZyBhIHNldHRpbmcgc2lnbmlmaWNhbnRseQogICAgICAgICAgICAgbG9uZ2VyIHRoYW4gdGhlIDItc2Vjb25kIGF1dG9kZXBsb3kgcGVyaW9kLCB3ZSB0ZXN0IHR3byBjb2RlIHBhdGhzIGluIHRoZQotICAgICAgICAgICAgYXV0b2RlcGxveSBjb2RlLiAKLSAgICAgICAgICAgIAorICAgICAgICAgICAgYXV0b2RlcGxveSBjb2RlLgorCiAgICAgICAgICAgICBPbmUgY29kZSBwYXRoIHN1cHByZXNzZXMgYSByZXRyeSBvZiB0aGUgZmlsZQogICAgICAgICAgICAgaWYgaXQgaGFzIGZhaWxlZCB0byBvcGVuIHN1Y2Nlc3NmdWxseSBhcyBhbiBhcmNoaXZlIHByZXZpb3VzbHkKICAgICAgICAgICAgIGFuZCBoYXMgZ3Jvd24gaW4gc2l6ZSBzaW5jZSB0aGUgbGFzdCBjaGVjayBvZiB0aGUgZmlsZS4gIFRoZQogICAgICAgICAgICAgYXNzdW1wdGlvbiBpbiB0aGlzIGNhc2UgaXMgdGhhdCwgc2luY2UgdGhlIGZpbGUgaGFzIGdyb3duIHNpbmNlIHRoZQotICAgICAgICAgICAgbGFzdCBjaGVjaywgaXQgbWlnaHQgY29udGludWUgdG8gZ3JvdyBhbmQgc28gd2UgZGVjaWRlIG5vdCB0byAKKyAgICAgICAgICAgIGxhc3QgY2hlY2ssIGl0IG1pZ2h0IGNvbnRpbnVlIHRvIGdyb3cgYW5kIHNvIHdlIGRlY2lkZSBub3QgdG8KICAgICAgICAgICAgIHJldHJ5IGl0IGF0IHRoYXQgbW9tZW50LgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFRoZSBvdGhlciBjb2RlIHBhdGggZGV0ZWN0cyBydW5zIHdoZW4gdGhlCiAgICAgICAgICAgICBzaXplIGhhcyBub3QgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBjaGVjay4gIFRoaXMgc2V0IG9mIGxvZ2ljCiAgICAgICAgICAgICB0aGVuIHRyaWVzIHRvIG9wZW4gdGhlIGZpbGUgYXMgYW4gYXJjaGl2ZQogICAgICAgICAgICAgYWdhaW4uICAoSGVyZSwgdGhlIGFzc3VtcHRpb24gaXMgdGhhdCBzaW5jZSB0aGUgZmlsZSBkaWQKICAgICAgICAgICAgIG5vdCBncm93IHNpbmNlIHRoZSBwcmV2aW91cyBjaGVjaywgaXQgbWlnaHQgYmUgZG9uZSBncm93aW5nIGFuZAotICAgICAgICAgICAgdGhlcmVmb3JlIGl0IG1ha2VzIHNlbnNlIHRvIHRyeSB0byBvcGVuIGl0IGFnYWluIG5vdykuICAKLSAgICAgICAgICAgIEZvciBtb3N0IG9mIHRoZSBpdGVyYXRpb25zLCB0aGlzIGNvZGUgcGF0aCBmaW5kcyB0aGF0IHRoZSBhcmNoaXZlIAorICAgICAgICAgICAgdGhlcmVmb3JlIGl0IG1ha2VzIHNlbnNlIHRvIHRyeSB0byBvcGVuIGl0IGFnYWluIG5vdykuCisgICAgICAgICAgICBGb3IgbW9zdCBvZiB0aGUgaXRlcmF0aW9ucywgdGhpcyBjb2RlIHBhdGggZmluZHMgdGhhdCB0aGUgYXJjaGl2ZQogICAgICAgICAgICAgc3RpbGwgd2lsbCBub3Qgb3BlbiBjb3JyZWN0bHkgLSBiZWNhdXNlIHRoZSBzbG93IGNvcHkgaXMgc3RpbGwKICAgICAgICAgICAgIGluIHByb2dyZXNzIC0gYW5kIGRvZXMgbm90IGZ1cnRoZXIgd29yayB3aXRoIHRoZSBmaWxlIGluIHRoZQogICAgICAgICAgICAgY3VycmVudCBpdGVyYXRpb24gYnV0IGxlYXZlcyB0aGUgZmlsZSBpbiB0aGUgbWFwIG9mIGZpbGVzIHRvIGJlCi0gICAgICAgICAgICBtb25pdG9yZWQuICAKLSAgICAgICAgICAgIAorICAgICAgICAgICAgbW9uaXRvcmVkLgorCiAgICAgICAgICAgICBBdCBsYXN0LCB3aGVuIHRoZSBjb3B5IGNvbXBsZXRlcywgYW4gaXRlcmF0aW9uIGRpc2NvdmVycyB0aGF0CiAgICAgICAgICAgICB0aGUgZmlsZSBzaXplIGhhcyBiZWVuIHN0YWJsZSBzaW5jZSB0aGUgbGFzdCB0aW1lIHRocm91Z2ggYW5kCiAgICAgICAgICAgICB0aGUgYXR0ZW1wdCB0byBvcGVuIHRoZSBmaWxlIGFzIGFuIGFyY2hpdmUgc3VjY2VlZHMuICBUaGUgZmlsZQogICAgICAgICAgICAgaXMgdGhlbiBhdXRvZGVwbG95ZWQgbm9ybWFsbHkuCiAgICAgICAgIC0tPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2xvd2NvcHkuZGVsYXkiIHZhbHVlPSI0MDAwIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXN1bHQucHJvcGVydHkuZmlsZSIgdmFsdWU9IiR7YnVpbGR9L3Jlc3VsdC5wcm9wZXJ0aWVzIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9IiAvPgogICAgIDwvdGFyZ2V0PgotCQorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0icHJlcGFyZSI+Ci0gICAgICAgIAorCiAgICAgICAgIDxlY2hvPlVzaW5nIHByZXZpb3VzbHktYnVpbHQgJHtpbnB1dEFyY2hpdmV9PC9lY2hvPgogICAgICAgICA8IS0tCiAgICAgICAgICAgICBTb21lIGVhcmxpZXIgdGVzdHMgc2hvdWxkIGhhdmUgcnVuIGFscmVhZHksIHNvIHRoZSBhcHAgd2UgdXNlIGZvciBhdXRvZGVwbG95IHRlc3RpbmcKQEAgLTg5LDkgKzg5LDkgQEAKICAgICAgICAgLS0+CiAKICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiIGRlcGVuZHM9ImJ1aWxkIj4KLSAgICAgICAgCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRlc2NyaXB0aW9uIiB2YWx1ZT0iYXV0b2RlcGxveS9zbG93IFRlc3QgYXV0b2RlcGxveSB3aXRoIHNsb3dseS1jb3BpZWQgZmlsZSIvPgogICAgICAgICA8L2FudGNhbGw+CkBAIC0xMDEsMTEgKzEwMSwxMSBAQAogICAgICAgICAgICAgcmVjb3JkIHRoZSByZXN1bHRzIG9mIHRoZSBhdXRvZGVwbG95IGRpcmVjdG9yeSBtb25pdG9yaW5nIEphdmEgY2xhc3MuCiAgICAgICAgIC0tPgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7cmVzdWx0LnByb3BlcnR5LmZpbGV9IiBxdWlldD0idHJ1ZSIvPgotICAgICAgICAKKwogICAgICAgICA8dHN0YW1wIHByZWZpeD0ic2xvd2NvcHkiPgogICAgICAgICAgICAgPGZvcm1hdCBwcm9wZXJ0eT0iTk9XIiBwYXR0ZXJuPSIke2RhdGVGb3JtYXR9Ii8+CiAgICAgICAgIDwvdHN0YW1wPgotICAgICAgICAKKwogICAgICAgICA8IS0tCiAgICAgICAgICAgICBEbyB0aGUgYXV0by1kZXBsb3ltZW50IGJ1dCB1c2UgdGhlIHNwZWNpYWwgdG9vbCB0aGF0IGNvcGllcyBzbG93bHkuCiAgICAgICAgICAtLT4KQEAgLTEyNiwxMSArMTI2LDExIEBACiAgICAgICAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJhdXRvZGVwbG95LmNvbXBpbGUuY2xhc3NwYXRoIi8+CiAKICAgICAgICAgPC9qYXZhV2l0aFJlc3VsdD4KLSAgICAgICAgCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2VNb25pdG9yVG9XYWl0Rm9yQXV0b2RlcGxveUNvbXBsZXRpb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZy5pZCIgdmFsdWU9IjIiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgICAgICAKKwogICAgICAgICA8IS0tCiAgICAgICAgICAgICBOb3cgdW5kZXBsb3kgdGhlIGFwcC4KICAgICAgICAgLS0+CkBAIC0xNTksNyArMTU5LDcgQEAKICAgICAgICAgICAgICAgICA8ZXF1YWxzIGFyZzE9IiR7c2xvdy5hdXRvZGVwbG95LnVuZGVwbG95UmVzdWx0fSIgYXJnMj0iMCIvPgogICAgICAgICAgICAgPC9hbmQ+CiAgICAgICAgIDwvY29uZGl0aW9uPgotICAgICAgICAKKwogICAgICAgICA8IS0tCiAgICAgICAgICAgICBJZiB0aGUgcHJvcGVydHkgInJlc3VsdCIgd2FzIG5vdCBzZXQgYnkgdGhlICJjb25kaXRpb24iIHRhc2sganVzdCBhYm92ZSB0aGVuIHNvbWV0aGluZwogICAgICAgICAgICAgd2VudCB3cm9uZyBhbmQgd2Ugc2V0IHJlc3VsdCB0byAxIG5vdy4KQEAgLTE2OSwxNCArMTY5LDE0IEBACiAgICAgICAgICAgICAgICAgPGlzc2V0IHByb3BlcnR5PSJyZXN1bHQiLz4KICAgICAgICAgICAgIDwvbm90PgogICAgICAgICA8L2NvbmRpdGlvbj4KLSAgICAgICAgCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwcm9jZXNzUmVzdWx0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXN1bHQiIHZhbHVlPSIke3Jlc3VsdH0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2ciIHZhbHVlPSIke2J1aWxkfS9vdXRwdXQubG9nIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1c2VNb25pdG9yVG9XYWl0Rm9yQXV0b2RlcGxveUNvbXBsZXRpb24iPgogICAgICAgICA8amF2YVdpdGhSZXN1bHQKICAgICAgICAgICAgICAgICBmb3JrPSJ0cnVlIgpAQCAtMTk1LDE3ICsxOTUsMTcgQEAKICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7ZGF0ZUZvcm1hdH0iLz4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7c2xvd2NvcHkuTk9XfSIvPgogICAgICAgICA8L2phdmFXaXRoUmVzdWx0PgotICAgICAgICAKKwogICAgICAgICA8IS0tCi0gICAgICAgICAgICBUaGUgcmVzdWx0IHByb3BlcnR5IG5hbWUgdXNlZCBpbiB0aGUgbmV4dCB0YXNrIGlzIGFuIGFyZ3VtZW50IHRvIHRoZSBjYWxsZWQgdGFyZ2V0LiAgCisgICAgICAgICAgICBUaGUgcmVzdWx0IHByb3BlcnR5IG5hbWUgdXNlZCBpbiB0aGUgbmV4dCB0YXNrIGlzIGFuIGFyZ3VtZW50IHRvIHRoZSBjYWxsZWQgdGFyZ2V0LgogICAgICAgICAgICAgTm90ZSB0aGF0IHRoZSBlY2hvIGlzIGEgbGl0dGxlIG9kZGx5IGZvcm1hdHRlZC4gIFRoZSA8L2VjaG8+IGlzIG9uIGEgbGluZSBieSBpdHNlbGYgYW5kIGxlZnQtanVzdGlmaWVkIHNvCiAgICAgICAgICAgICB0aGF0IHRoZSBvdXRwdXQgdG8gdGhlIGZpbGUgYmVpbmcgd3JpdHRlbiB3aWxsIHJlc2lkZSBvbiBhIGxpbmUgYnkgaXRzZWxmLiAgVGhlCiAgICAgICAgICAgICBsZWZ0LWp1c3RpZmljYXRpb24gaXMgbm90IHJlYWxseSBuZWVkZWQgYnV0IHRoZSBwcm9wZXJ0aWVzIGZpbGUgbG9va3MgYSBiaXQgbmljZXIKLSAgICAgICAgICAgIGlmIHlvdSBvcGVuIGl0IGluIGFuIGVkaXRvci4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgbmV4dCBsaW5lIGluIHRoZSBwcm9wZXJ0aWVzIGZpbGUgYmVpbmcgCisgICAgICAgICAgICBpZiB5b3Ugb3BlbiBpdCBpbiBhbiBlZGl0b3IuICBUaGlzIGlzIGJlY2F1c2UgdGhlIG5leHQgbGluZSBpbiB0aGUgcHJvcGVydGllcyBmaWxlIGJlaW5nCiAgICAgICAgICAgICB3cml0dGVuIGlzIGluZGVudGVkIGFzIGZhciBhcyB0aGUgPC9lY2hvPiBpcyBpbmRlbnRlZCBoZXJlIGluIHRoZSBidWlsZC54bWwgZmlsZS4KICAgICAgICAgLS0+CiAgICAgICAgIDxlY2hvIGZpbGU9IiR7cmVzdWx0LnByb3BlcnR5LmZpbGV9IiBhcHBlbmQ9InRydWUiPiR7cmVzdWx0UHJvcGVydHlOYW1lfT0ke2F1dG9kZXBsb3lSZXN1bHR9Ci08L2VjaG8+ICAgICAgICAgIAorPC9lY2hvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvdXRpbC9BdXRvRGVwbG95TW9uaXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L3V0aWwvQXV0b0RlcGxveU1vbml0b3IuamF2YQppbmRleCBjZjUwMWIyLi41MzIwMzY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvdXRpbC9BdXRvRGVwbG95TW9uaXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYXV0b2RlcGxveS91dGlsL0F1dG9EZXBsb3lNb25pdG9yLmphdmEKQEAgLTQ1LDMxICs0NSwzMSBAQAogICAqIEBhdXRob3IgIHRqcXVpbm4KICAgKi8KIHB1YmxpYyBjbGFzcyBBdXRvRGVwbG95TW9uaXRvciB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIERFQlVHID0gQm9vbGVhbi5nZXRCb29sZWFuKCJtb25pdG9yLmRlYnVnIik7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgSVRFUkFUSU9OX0xJTUlUID0gSW50ZWdlci5nZXRJbnRlZ2VyKCJtb25pdG9yLml0ZXJhdGlvbkxpbWl0IiwgNjAgKiAyIC8qIGRlZmF1bHQgPSB0d28gbWludXRlcyAqLykuaW50VmFsdWUoKTsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIGFyY2hpdmVOYW1lID0gbnVsbDsKLSAgICAKKwogLy8gICAgcHJpdmF0ZSBTdHJpbmcgYXV0b2RlcGxveURpclNwZWMgPSBudWxsOwotICAgIAorCiAgICAgcHJpdmF0ZSBGaWxlIGF1dG9kZXBsb3lEaXIgPSBudWxsOwogCiAvLyAgICBwcml2YXRlIFN0cmluZyB0aW1lc3RhbXBGb3JtYXQgPSBudWxsOwotICAgIAorCiAvLyAgICBwcml2YXRlIFN0cmluZyB0aW1lc3RhbXBTdHJpbmcgPSBudWxsOwotICAgIAorCiAgICAgcHJpdmF0ZSBsb25nIHRpbWVzdGFtcDsKLSAgICAKKwogICAgIHByaXZhdGUgRGF0ZSBzdGFydFRpbWUgPSBudWxsOwotICAgIAorCiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIExJTkVfU0VQID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOwotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgQXV0b0RlcGxveWVyICovCiAgICAgcHVibGljIEF1dG9EZXBsb3lNb25pdG9yKCkgewogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAgKiBAcGFyYW0gYXJncyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwogICAgICAgKi8KQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgICAgICAgIHVzYWdlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBhcmNoaXZlTmFtZSA9IGFyZ3NbMF07CiAgICAgICAgIFN0cmluZyBhdXRvZGVwbG95RGlyU3BlYyA9IGFyZ3NbMV07CiAgICAgICAgIFN0cmluZyB0aW1lc3RhbXBGb3JtYXQgPSBhcmdzWzJdOwpAQCAtOTUsMjEgKzk1LDIxIEBACiAgICAgICAgIGRlYnVnKCJBdXRvZGVwbG95IGRpcmVjdG9yeTogIiArIGF1dG9kZXBsb3lEaXIuZ2V0QWJzb2x1dGVQYXRoKCkpOwogCiAgICAgICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8qCiAgICAgICAgICAqQ2hlY2sgYXV0by1kZXBsb3kgZGlyZWN0b3J5LgogICAgICAgICAgKi8KICAgICAgICAgaWYgKCAhIGF1dG9kZXBsb3lEaXIuZXhpc3RzKCkpIHsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoTElORV9TRVApLmFwcGVuZCgiQXV0b2RlcGxveSBkaXJlY3RvcnkgIiArIGF1dG9kZXBsb3lEaXIuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiIGRvZXMgbm90IGV4aXN0IGJ1dCBzaG91bGQuIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLyoKICAgICAgICAgICpDaGVjayBhcmNoaXZlIGZpbGUgbmFtZS4KICAgICAgICAgICovCiAgICAgICAgIGlmIChhcmNoaXZlTmFtZS5sZW5ndGgoKSA9PSAwKSB7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKExJTkVfU0VQKS5hcHBlbmQoIkFyY2hpdmUgZmlsZSBuYW1lIG11c3Qgbm90IGJlIGVtcHR5IGJ1dCBpcy4iKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvKgogICAgICAgICAgKkNoZWNrIHRoZSB0aW1lc3RhbXAgZm9ybWF0IGFuZCB2YWx1ZS4KICAgICAgICAgICovCkBAIC0xMjIsMTIgKzEyMiwxMiBAQAogICAgICAgICB9IGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBwZSkgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChMSU5FX1NFUCkuYXBwZW5kKCJDb3VsZCBub3QgaW50ZXJwcmV0IHRpbWVzdGFtcCAiICsgdGltZXN0YW1wU3RyaW5nICsgIiB1c2luZyBmb3JtYXQgIiArIHRpbWVzdGFtcEZvcm1hdCkuYXBwZW5kKExJTkVfU0VQKS5hcHBlbmQoIiAgICAiKS5hcHBlbmQocGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCgpID4gMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihyZXN1bHQudG9TdHJpbmcoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIGludCBydW4oU3RyaW5nW10gYXJncykgewogICAgICAgICAvKgogICAgICAgICAgKlRoZSBjYWxsaW5nIHNjcmlwdCBzaG91bGQgcGFzcyB0aGVzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzOgpAQCAtMTQxLDkgKzE0MSw5IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHByb2Nlc3NBcmd1bWVudHMoYXJncyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqVGhlIHRpbWVzdGFtcCBoYW5kbGluZyBhbGxvd3MgdGhlIGxvZ2ljIGJlbG93IHRvIGlkZW50aWZ5IGEgbWFya2VyIGZpbGUgKC4uLl9kZXBsb3llZCwgCisgICAgICAgICAgICAgKlRoZSB0aW1lc3RhbXAgaGFuZGxpbmcgYWxsb3dzIHRoZSBsb2dpYyBiZWxvdyB0byBpZGVudGlmeSBhIG1hcmtlciBmaWxlICguLi5fZGVwbG95ZWQsCiAgICAgICAgICAgICAgKi4uLl91bmRlcGxveWVkLCAuLi5fZGVwbG95RmFpbGVkLCAuLi5fdW5kZXBsb3lGYWlsZWQpIHRoYXQgd2FzIGNyZWF0ZWQgYWZ0ZXIgdGhlCiAgICAgICAgICAgICAgKmFyY2hpdmUgd2FzIGRlcG9zaXRlZCBpbnRvIChmb3IgYXV0b2RlcGxveSkgb3IgcmVtb3ZlZCBmcm9tIChmb3IgYXV0b3VuZGVwbG95KSB0aGUKICAgICAgICAgICAgICAqYXV0b2RlcGxveSBkaXJlY3RvcnkuICBXZSBuZWVkIHRvIGRvIHRoaXMgdG8gbWFrZSBzdXJlIHdlIGRvIG5vdCBhY2NpZGVudGFsbHkgdGFrZQpAQCAtMTU1LDE2ICsxNTUsMTYgQEAKICAgICAgICAgICAgICAqRm9yIGF1dG8tZGVwbG95LCB0aGUgYXJjaGl2ZSB3aWxsIGhhdmUganVzdCBiZWVuIGNvcGllZCBpbnRvIHRoZSBhdXRvZGVwbG95IGRpcmVjdG9yeS4KICAgICAgICAgICAgICAqRm9yIGF1dG8tdW5kZXBsb3ksIHRoZSBhcmNoaXZlIHdpbGwgaGF2ZSBqdXN0IGJlZW4gZGVsZXRlZCBmcm9tIHRoZXJlLiAgVGhlIGZpbGUgZmlsdGVyCiAgICAgICAgICAgICAgKmJlbG93IHVzZXMgYm90aCB0aGUgZmlsZSBuYW1lIGFuZCBhbHNvIGEgdGltZXN0YW1wIHRvIG1ha2Ugc3VyZSBpdCBhY2NlcHRzCi0gICAgICAgICAgICAgKm1hcmtlciBmaWxlcyBjcmVhdGVkIGFmdGVyIHRoZSBhcmNoaXZlIGl0c2VsZi4gIAorICAgICAgICAgICAgICptYXJrZXIgZmlsZXMgY3JlYXRlZCBhZnRlciB0aGUgYXJjaGl2ZSBpdHNlbGYuCiAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICpOb3RlIHRoYXQgdGhlIGZvbGxvd2luZyBpcyBib3RoIGEgZGVjbGFyYXRpb24gb2YgdGhlIGZpbHRlciBhbmQgaXRzIGluaXRpYWxpemF0aW9uIGJ5CiAgICAgICAgICAgICAgKmludm9raW5nIGl0cyBpbml0IG1ldGhvZC4KICAgICAgICAgICAgICAqLwogCi0gICAgICAgICAgICBGaWxlRmlsdGVyIGZpbHRlciA9IG5ldyBGaWxlRmlsdGVyICgpIHsgCisgICAgICAgICAgICBGaWxlRmlsdGVyIGZpbHRlciA9IG5ldyBGaWxlRmlsdGVyICgpIHsKIAogICAgICAgICAgICAgICAgIHByaXZhdGUgbG9uZyB0aW1lc3RhbXA7Ci0gICAgICAgICAgICAgICAgcHJpdmF0ZSBTdHJpbmcgYXJjaGl2ZU5hbWUgPSBudWxsOyAKKyAgICAgICAgICAgICAgICBwcml2YXRlIFN0cmluZyBhcmNoaXZlTmFtZSA9IG51bGw7CiAKICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBjYW5kaWRhdGVGaWxlKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qCkBAIC0xNzYsNyArMTc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgbG9uZyBjYW5kaWRhdGVUaW1lc3RhbXAgPSBjYW5kaWRhdGVGaWxlLmxhc3RNb2RpZmllZCgpOwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY2FuZGlkYXRlTmFtZUFuZFR5cGUgPSBjYW5kaWRhdGVGaWxlU3BlYy5zdWJzdHJpbmcoY2FuZGlkYXRlRmlsZVNwZWMubGFzdEluZGV4T2YoRmlsZS5zZXBhcmF0b3IpICsgMSk7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjYW5kaWRhdGVUeXBlID0gY2FuZGlkYXRlRmlsZVNwZWMuc3Vic3RyaW5nKGNhbmRpZGF0ZUZpbGVTcGVjLmxhc3RJbmRleE9mKCcuJykgKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBhbnN3ZXIgPSAoY2FuZGlkYXRlVGltZXN0YW1wID4gdGhpcy50aW1lc3RhbXApCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoY2FuZGlkYXRlTmFtZUFuZFR5cGUuZXF1YWxzKGFyY2hpdmVOYW1lICsgQXV0b0RlcGxveUNvbnN0YW50cy5ERVBMT1lFRCkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVOYW1lQW5kVHlwZS5lcXVhbHMoYXJjaGl2ZU5hbWUgKyBBdXRvRGVwbG95Q29uc3RhbnRzLlVOREVQTE9ZRUQpIHx8CkBAIC0xOTYsMTEgKzE5NiwxMSBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfS5pbml0KGFyY2hpdmVOYW1lLCB0aW1lc3RhbXApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEZpbGUgW10gbWF0Y2hlcyA9IG51bGw7CiAKICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKkJlZ2luIHdhaXRpbmcgZm9yIGEgbmV3IG1hcmtlciBmaWxlIHRvIGFwcGVhciBpbiB0aGUgYXV0b2RlcGxveSBkaXJlY3RvcnkuICBEb24ndCB3YWl0IGxvbmdlciB0aGFuIAorICAgICAgICAgICAgICpCZWdpbiB3YWl0aW5nIGZvciBhIG5ldyBtYXJrZXIgZmlsZSB0byBhcHBlYXIgaW4gdGhlIGF1dG9kZXBsb3kgZGlyZWN0b3J5LiAgRG9uJ3Qgd2FpdCBsb25nZXIgdGhhbgogICAgICAgICAgICAgICp0d28gbWludXRlcyAoYnkgZGVmYXVsdCkgaW4gY2FzZSB0aGVyZSBpcyBzb21lIHByb2JsZW0uCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGludCBpdGVyYXRpb25Db3VudCA9IDA7CkBAIC0yMTQsNyArMjE0LDcgQEAKICAgICAgICAgICAgICAgICBtYXRjaGVzID0gYXV0b2RlcGxveURpci5saXN0RmlsZXMoZmlsdGVyKTsKIAogICAgICAgICAgICAgfSB3aGlsZSAoIChtYXRjaGVzLmxlbmd0aCA9PSAwKSAmJiAoaXRlcmF0aW9uQ291bnQrKyA8IElURVJBVElPTl9MSU1JVCkpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICpSZXR1cm4gMCBpZiB0aGUgbWFya2VyIGZpbGUgZm91bmQgZW5kcyB3aXRoIF9kZXBsb3llZCwgMSBpZiB0aGUgbWFya2VyIGVuZHMgd2l0aAogICAgICAgICAgICAgICpfZGVwbG95RmFpbGVkLCBhbmQgLTEgb3RoZXJ3aXNlLgpAQCAtMjQzLDcgKzI0Myw3IEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgdXNhZ2UoKSB7CiAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6Iik7CiAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiICAgIGF1dG9kZXBsb3kubG9hZGVyLmNsaWVudC5BdXRvRGVwbG95TW9uaXRvciA8YXJjaGl2ZS1uYW1lPiA8YXV0b2RlcGxveS1kaXJlY3Rvcnk+IDxTaW1wbGVEYXRlRm9ybWF0LXBhdHRlcm4tZm9yLXRpbWVzdGFtcD4gPHRpbWVzdGFtcC12YWx1ZT4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYXV0b2RlcGxveS91dGlsL1Nsb3dDb3B5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvdXRpbC9TbG93Q29weS5qYXZhCmluZGV4IDkyNGFiMzEuLjk5ZmU1MGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYXV0b2RlcGxveS91dGlsL1Nsb3dDb3B5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L3V0aWwvU2xvd0NvcHkuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogCiAvKioKICAqUHJvdmlkZXMgYSB3YXkgdG8gdGVzdCBhdXRvZGVwbG95ZXIncyBiZWhhdmlvciB3aGVuIGFuIGF1dG9kZXBsb3llZCBmaWxlIGlzCi0gKmNvcGllZCBpbnRvIHRoZSBhdXRvZGVwbG95IGRpcmVjdG9yeSBzbG93bHkuIAorICpjb3BpZWQgaW50byB0aGUgYXV0b2RlcGxveSBkaXJlY3Rvcnkgc2xvd2x5LgogICoKICAqVXNhZ2U6CiAgKgpAQCAtNDksMTcgKzQ5LDE3IEBACiAgKiBAYXV0aG9yICB0anF1aW5uCiAgKi8KIHB1YmxpYyBjbGFzcyBTbG93Q29weSB7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBTbG93Q29weSAqLwogICAgIHB1YmxpYyBTbG93Q29weSgpIHsKICAgICB9Ci0gIAorCiAgICAgLyoqIGRlZmF1bHQgZGVsYXkgYmV0d2VlbiBzdWNjZXNzaXZlIHdyaXRlcyBvZiBkYXRhIHRvIHRoZSBvdXRwdXQgZmlsZSAqLwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgREVGQVVMVF9ERUxBWSA9IDIwMDsgLy8gbWlsbGlzZWNvbmRzCi0gICAgCisKICAgICAvKiogc2l6ZSBvZiByZWFkIGFuZCB3cml0ZSBidWZmZXIgKi8KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQlVGRkVSX1NJWkUgPSAxMDI0OwotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgbmV3IFNsb3dDb3B5KCkucnVuKGFyZ3MpOwpAQCAtNjksMjIgKzY5LDIyIEBACiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBydW4oU3RyaW5nIFtdIGFyZ3MpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihBcnJheXMudG9TdHJpbmcoYXJncykpOwogICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAzKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDb21tYW5kIGxpbmUgYXJncyBtdXN0IHNwZWNpZnkgcHJvbXB0L3RpbWVkLCB0aGUgb3JpZ2luYWwgZmlsZSwgYW5kIHRoZSB0YXJnZXQgZmlsZSIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8qCi0gICAgICAgICAqR2V0IGRlbGF5IGZyb20gZGVmYXVsdCBhbmQgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgaWYgdGhlIGRlbGF5IGlzIAorICAgICAgICAgKkdldCBkZWxheSBmcm9tIGRlZmF1bHQgYW5kIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGlmIHRoZSBkZWxheSBpcwogICAgICAgICAgKnNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLgogICAgICAgICAgKi8KICAgICAgICAgbG9uZyBkZWxheSA9IERFRkFVTFRfREVMQVk7CiAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDMpIHsKICAgICAgICAgICAgIGRlbGF5ID0gSW50ZWdlci5kZWNvZGUoYXJnc1szXSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLyoKICAgICAgICAgICpGb3IgaW50ZXJhY3RpdmUgdXNlLCB0aGUgdG9vbCB3b3VsZCBsaWtlIHRvIGxldCB0aGUgdXNlciBwcmVzcyBhCiAgICAgICAgICAqa2V5IGVhY2ggdGltZSBhIHJlYWQvd3JpdGUgaXMgdG8gb2NjdXIuICBUaGlzIGRvZXNuJ3QgeWV0IHdvcmsgYW5kCkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgIGJvb2xlYW4gdXNlUHJvbXB0RGVsYXkgPSBhcmdzWzBdLmVxdWFsc0lnbm9yZUNhc2UoInByb21wdCIpOwogICAgICAgICBGaWxlIG9sZEYgPSBuZXcgRmlsZShhcmdzWzFdKTsKICAgICAgICAgRmlsZSBuZXdGID0gbmV3IEZpbGUoYXJnc1syXSk7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2xvdyBjb3B5IHN0YXJ0aW5nXG4iICsKICAgICAgICAgICAgICAgICAiICBtb2RlOiAiICsgYXJnc1swXSArICJcbiIgKwogICAgICAgICAgICAgICAgICIgIGlucHV0IGZpbGU6ICIgKyBvbGRGLmdldEFic29sdXRlUGF0aCgpICsgIlxuIiArCkBAIC0xMDYsMTUgKzEwNiwxNSBAQAogICAgICAgICBGaWxlSW5wdXRTdHJlYW0gZmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShvbGRGKTsKICAgICAgICAgYnl0ZSBbXSBkYXRhID0gbmV3IGJ5dGUgW0JVRkZFUl9TSVpFXTsKICAgICAgICAgaW50IGJ5dGVzUmVhZDsKLSAgICAgICAgCisKICAgICAgICAgU2Nhbm5lciBzY2FubmVyID0gbnVsbDsKICAgICAgICAgYm9vbGVhbiBjb250aW51ZVByb21wdGluZyA9IHVzZVByb21wdERlbGF5OwogICAgICAgICBTdHJpbmcgbGluZVNlcCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKHVzZVByb21wdERlbGF5KSB7CiAgICAgICAgICAgICBzY2FubmVyID0gbmV3IFNjYW5uZXIoU3lzdGVtLmluKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpbnQgdG90YWxCeXRlc1JlYWQgPSAwOwogICAgICAgICAvKgogICAgICAgICAgKlJlcGVhdCB0aGUgY3ljbGUgb2YgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBmaWxlIGFuZCB3cml0aW5nIHRvIHRoZQpAQCAtMTQwLDEzICsxNDAsMTMgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZpbmlzaGVkIGNvcHlpbmcgIiArIHRvdGFsQnl0ZXNSZWFkICsgIiBieXRlcyBhdCAiICsgbmV3IERhdGUoKS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBpZiAoZm9zICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBmb3MuY2xvc2UoKTsKICAgICAgICAgICAgICAgICBmb3MgPSBudWxsOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZpcyAhPSBudWxsKSB7IAorICAgICAgICAgICAgaWYgKGZpcyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgZmlzLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgZmlzID0gbnVsbDsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYXV0b2RlcGxveS91dGlsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYXV0b2RlcGxveS91dGlsL2J1aWxkLnhtbAppbmRleCA1Zjg2MDQxLi41MzIwMGMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvdXRpbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L3V0aWwvYnVpbGQueG1sCkBAIC0yMywxNyArMjMsMTcgQEAKIF0+CiAKIDxwcm9qZWN0IG5hbWU9ImF1dG9kZXBsb3ktdXRpbCIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KLQkmY29tbW9uQnVpbGQ7CisgICAgJmNvbW1vbkJ1aWxkOwogICAgICAgICAmYXV0b2RlcGxveVV0aWw7CiAKICAgICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KICAgICA8L3RhcmdldD4KLQkKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICAKKwogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJwcmVwYXJlIj4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIKICAgICAgICAgICAgICAgIGRlc3RkaXI9IiR7YnVpbGR9IgpAQCAtNDYsNSArNDYsNSBAQAogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiIGRlcGVuZHM9ImJ1aWxkIj4KICAgICAgICAgPGVjaG8+QXV0b2RlcGxveSB1dGlsIGNvbW1vbiB0b29scyBhcmUgcmVhZHk8L2VjaG8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYXV0b2RlcGxveS91dGlsL3V0aWwueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L3V0aWwvdXRpbC54bWwKaW5kZXggZjViMzlmNS4uZjUyODUyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L3V0aWwvdXRpbC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L3V0aWwvdXRpbC54bWwKQEAgLTIwLDIzICsyMCwyMyBAQAogICAgVGhpcyBmaWxlIHNob3VsZCBiZSBpbmNsdWRlZCBieSBhbGwgYXV0b2RlcGxveW1lbnQgYnVpbGQueG1sIGZpbGVzIGFuZAogICAgZGVmaW5lcyBwcm9wZXJ0aWVzIGFuZCB0YXNrcyB1c2VkIGJ5IG11bHRpcGxlIGF1dG8tZGVwbG95IHRlc3RzLgogLS0+Ci0gCisKICAgICA8cHJvcGVydHkgbmFtZT0iZGF0ZUZvcm1hdCIgdmFsdWU9Inl5eXktTU0tZGQtSEg6bW06c3MiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iYXV0b2RlcGxveS5kaXIiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95Ii8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImF1dG9kZXBsb3kudXRpbC5idWlsZCIgdmFsdWU9IiR7dGVzdHNSb290fS9idWlsZC9hdXRvZGVwbG95L3V0aWwiLz4KLSAgICAKKwogICAgIDxwYXRoIGlkPSJhdXRvZGVwbG95LmNvbXBpbGUuY2xhc3NwYXRoIj4KICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2luc3R9L2xpYi9qYXZhZWUuamFyIi8+CiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtqYXZhLmhvbWV9L2xpYi90b29scy5qYXIiLz4KICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMvZGVwbG95bWVudC1hdXRvZGVwbG95LmphciIvPgogICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7YXV0b2RlcGxveS51dGlsLmJ1aWxkfSIvPgotICAgIDwvcGF0aD4gICAgCisgICAgPC9wYXRoPgogCiAgICAgPCEtLQogICAgICAgICBUaGlzIHRhcmdldCBydW5zIGEgSmF2YSBjbGFzcyB0aGF0IHdhdGNoZXMgdGhlIGFwcCBzZXJ2ZXIncyBhdXRvZGVwbG95IGRpcmVjdG9yeSBhbmQgZGV0ZWN0cwogICAgICAgICB3aGVuIHRoZSBhcHAgc2VydmVyIGhhcyBkZXBsb3llZCBvciB1bmRlcGxveWVkIHRoZSBhcHAgKG9yIGhhcyByZXBvcnRlZCBhIGZhaWx1cmUgdG8gZG8gc28pIGJ5IG9ic2VydmluZwotICAgICAgICB3aGVuIHRoZSBtYXJrZXIgZmlsZXMgYXBwZWFyIGluIHRoZSBkaXJlY3RvcnkuICAKLSAgICAgICAgCisgICAgICAgIHdoZW4gdGhlIG1hcmtlciBmaWxlcyBhcHBlYXIgaW4gdGhlIGRpcmVjdG9yeS4KKwogICAgICAgICBUaGUgdGFyZ2V0IHJlY29yZHMgaXRzIHJlc3VsdHMgaW4gYSB0ZW1wb3JhcnkgcHJvcGVydGllcyBmaWxlIGluIHRoZSAke2J1aWxkfSBkaXJlY3RvcnkuCiAgICAgICAgIFRoaXMgcHJvdmlkZXMgYSBzaW1wbGUgd2F5IChyZWxhdGl2ZWx5IHNpbXBsZSwgYXQgbGVhc3QpIHRvIHVzZSB0aGUgc2FtZSB0YXJnZXQgbW9yZSB0aGFuIG9uY2UKICAgICAgICAgYW5kIHN0b3JlIGRpZmZlcmVudCByZXN1bHQgdmFsdWVzIGluIGEgd2F5IHRoYXQgY2FuIGJlIHJldHJpZXZlZCBhbmQgdXNlZCBmcm9tIHRoZSBtYWluCkBAIC02NCwzOSArNjQsMzkgQEAKIC0tPgogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FyZy5saXN0fSIvPgogICAgICAgICA8L2phdmFXaXRoUmVzdWx0PgotICAgICAgICAKKwogICAgICAgICA8IS0tCi0gICAgICAgICAgICBUaGUgcmVzdWx0IHByb3BlcnR5IG5hbWUgdXNlZCBpbiB0aGUgbmV4dCB0YXNrIGlzIGFuIGFyZ3VtZW50IHRvIHRoZSBjYWxsZWQgdGFyZ2V0LiAgCisgICAgICAgICAgICBUaGUgcmVzdWx0IHByb3BlcnR5IG5hbWUgdXNlZCBpbiB0aGUgbmV4dCB0YXNrIGlzIGFuIGFyZ3VtZW50IHRvIHRoZSBjYWxsZWQgdGFyZ2V0LgogICAgICAgICAgICAgTm90ZSB0aGF0IHRoZSBlY2hvIGlzIGEgbGl0dGxlIG9kZGx5IGZvcm1hdHRlZC4gIFRoZSA8L2VjaG8+IGlzIG9uIGEgbGluZSBieSBpdHNlbGYgYW5kIGxlZnQtanVzdGlmaWVkIHNvCiAgICAgICAgICAgICB0aGF0IHRoZSBvdXRwdXQgdG8gdGhlIGZpbGUgYmVpbmcgd3JpdHRlbiB3aWxsIHJlc2lkZSBvbiBhIGxpbmUgYnkgaXRzZWxmLiAgVGhlCiAgICAgICAgICAgICBsZWZ0LWp1c3RpZmljYXRpb24gaXMgbm90IHJlYWxseSBuZWVkZWQgYnV0IHRoZSBwcm9wZXJ0aWVzIGZpbGUgbG9va3MgYSBiaXQgbmljZXIKLSAgICAgICAgICAgIGlmIHlvdSBvcGVuIGl0IGluIGFuIGVkaXRvci4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgbmV4dCBsaW5lIGluIHRoZSBwcm9wZXJ0aWVzIGZpbGUgYmVpbmcgCisgICAgICAgICAgICBpZiB5b3Ugb3BlbiBpdCBpbiBhbiBlZGl0b3IuICBUaGlzIGlzIGJlY2F1c2UgdGhlIG5leHQgbGluZSBpbiB0aGUgcHJvcGVydGllcyBmaWxlIGJlaW5nCiAgICAgICAgICAgICB3cml0dGVuIGlzIGluZGVudGVkIGFzIGZhciBhcyB0aGUgPC9lY2hvPiBpcyBpbmRlbnRlZCBoZXJlIGluIHRoZSBidWlsZC54bWwgZmlsZS4KICAgICAgICAgLS0+CiAgICAgICAgIDxlY2hvIGZpbGU9IiR7cmVzdWx0LnByb3BlcnR5LmZpbGV9IiBhcHBlbmQ9InRydWUiPiR7cmVzdWx0UHJvcGVydHlOYW1lfT0ke2F1dG9kZXBsb3lSZXN1bHR9CiA8L2VjaG8+Ci0gICAgICAgIAorCiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS5hdXRvZGVwbG95Ij4KLSAgICAKKwogICAgIDwhLS0KLSAgICAgICAgVG8gbW9uaXRvciBhdXRvLWRlcGxveW1lbnQgb3IgYXV0by11bmRlcGxveW1lbnQsIHdlIHN0YXJ0IGJ5IGdldHRpbmcgdGhlIGN1cnJlbnQgdGltZS4gIAotICAgICAgICBUaGVuIHdlIGNvcHkgdGhlIGFyY2hpdmUgZmlsZSBpbnRvIHRoZSBhdXRvZGVwbG95IGRpcmVjdG9yeSAoZm9yIGF1dG8tZGVwbG95KSBvciBkZWxldGUgCisgICAgICAgIFRvIG1vbml0b3IgYXV0by1kZXBsb3ltZW50IG9yIGF1dG8tdW5kZXBsb3ltZW50LCB3ZSBzdGFydCBieSBnZXR0aW5nIHRoZSBjdXJyZW50IHRpbWUuCisgICAgICAgIFRoZW4gd2UgY29weSB0aGUgYXJjaGl2ZSBmaWxlIGludG8gdGhlIGF1dG9kZXBsb3kgZGlyZWN0b3J5IChmb3IgYXV0by1kZXBsb3kpIG9yIGRlbGV0ZQogICAgICAgICBpdCAoZm9yIGF1dG8tdW5kZXBsb3kpLiAgQWxsIG1hcmtlciBmaWxlcyBjcmVhdGVkIGJ5IHRoZSBzZXJ2ZXIgZHVyaW5nIGF1dG8tZGVwbG95bWVudCBvZgogICAgICAgICB0aGUgbmV3bHktY29waWVkIGFyY2hpdmUgZmlsZSB3aWxsIGhhdmUgbGF0ZXIgdGltZXN0YW1wcyB0aGFuIHRoZSB0aW1lc3RhbXAganVzdCBjcmVhdGVkLgotICAgICAgICBUaGVyZSBjb3VsZCBiZSBlYXJsaWVyIG1hcmtlciBmaWxlcyBmb3IgdGhlIHNhbWUgYXJjaGl2ZSBpbiB0aGUgZGlyZWN0b3J5IGFuZCB0aGUgbW9uaXRvciAKKyAgICAgICAgVGhlcmUgY291bGQgYmUgZWFybGllciBtYXJrZXIgZmlsZXMgZm9yIHRoZSBzYW1lIGFyY2hpdmUgaW4gdGhlIGRpcmVjdG9yeSBhbmQgdGhlIG1vbml0b3IKICAgICAgICAgd2FudHMgdG8gaWdub3JlIHRob3NlLCB3aGljaCBpcyB3aHkgd2UgZ2V0IHRoZSBjdXJyZW50IHRpbWUgYW5kIHBhc3MgaXQgdG8gdGhlIG1vbml0b3IuCi0gICAgICAgIAorCiAgICAgICAgIFRoZSBtb25pdG9yIHdpbGwgY2hlY2sgZm9yIG1hcmtlciBmaWxlcyBmb3IgdGhlIGNvcGllZCBhcmNoaXZlIGZpbGUKLSAgICAgICAgYW5kIHdob3NlIGxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgYXJlIGFmdGVyIHRoZSBjdXJyZW50IHRpbWVzdGFtcCwgcmV0dXJuaW5nIDAgaWYgdGhlIAotICAgICAgICBhdXRvLWRlcGxveWVyIGNyZWF0ZXMgYSBfZGVwbG95ZWQgb3IgX3VuZGVwbG95ZWQgZmlsZSwgMSBpZiBpdCBjcmVhdGVzIGEgX2RlcGxveV9mYWlsZWQgCisgICAgICAgIGFuZCB3aG9zZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIGFyZSBhZnRlciB0aGUgY3VycmVudCB0aW1lc3RhbXAsIHJldHVybmluZyAwIGlmIHRoZQorICAgICAgICBhdXRvLWRlcGxveWVyIGNyZWF0ZXMgYSBfZGVwbG95ZWQgb3IgX3VuZGVwbG95ZWQgZmlsZSwgMSBpZiBpdCBjcmVhdGVzIGEgX2RlcGxveV9mYWlsZWQKICAgICAgICAgb3IgX3VuZGVwbG95X2ZhaWxlZCBmaWxlLCBhbmQgLTEgaWYgaXQgcmVjb2duaXplZCBubyBtYXJrZXIgZmlsZS4KICAgICAtLT4KICAgICAgICAgPHRzdGFtcCBwcmVmaXg9ImRlcGxveSI+CiAgICAgICAgICAgICA8Zm9ybWF0IHByb3BlcnR5PSJOT1ciIHBhdHRlcm49IiR7ZGF0ZUZvcm1hdH0iLz4KICAgICAgICAgPC90c3RhbXA+Ci0gICAgICAgIAorCiAgICAgICAgIDwhLS0gUGF1c2U7IHNvbWUgZmlsZSBzeXN0ZW1zIHJlY29yZCBmaWxlIHJldiBkYXRlL3RpbWUgdG8gMi1zZWNvbmQgcHJlY2lzaW9uIC0tPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMiIvPgogCkBAIC0xMDQsNyArMTA0LDcgQEAKICAgICAgICAgICAgIFRyaWdnZXIgdGhlIGF1dG8tZGVwbG95LgogICAgICAgICAtLT4KICAgICAgICAgPGNvcHkgZmlsZT0iJHthcmNoaXZlLmZpbGV9IiB0b2Rpcj0iJHthdXRvZGVwbG95LmRpcn0iIG92ZXJ3cml0ZT0idHJ1ZSIvPgotICAgICAgICAKKwogICAgICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJsb2cuaWQiIHZhbHVlPSIxIj4KICAgICAgICAgICAgIDxub3Q+CiAgICAgICAgICAgICAgICAgPGlzc2V0IHByb3BlcnR5PSJsb2cuaWQiLz4KQEAgLTEyMCwxMSArMTIwLDExIEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nLmlkIiB2YWx1ZT0iJHtsb2cuaWR9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LmF1dG91bmRlcGxveSI+Ci0gICAgCisKICAgICAgICAgPCEtLQotICAgICAgICAgICAgVGhpcyB0YXJnZXQgd29ya3MgdmVyeSBtdWNoIGxpa2UgdGhlIGRlcGxveS5hdXRvZGVwbG95IHRhcmdldCBleGNlcHQgdGhhdCBpbnN0ZWFkIG9mIAorICAgICAgICAgICAgVGhpcyB0YXJnZXQgd29ya3MgdmVyeSBtdWNoIGxpa2UgdGhlIGRlcGxveS5hdXRvZGVwbG95IHRhcmdldCBleGNlcHQgdGhhdCBpbnN0ZWFkIG9mCiAgICAgICAgICAgICBjb3B5aW5nIHRoZSBhcmNoaXZlIGludG8gdGhlIGF1dG9kZXBsb3kgZGlyZWN0b3J5IGl0IGRlbGV0ZXMgdGhlIHByZXZpb3VzbHkgY29waWVkCiAgICAgICAgICAgICBhcmNoaXZlIGZyb20gdGhhdCBkaXJlY3RvcnkuCiAgICAgICAgIC0tPgpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgICAgIDxkZWxldGUgcXVpZXQ9InRydWUiPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2F1dG9kZXBsb3kuZGlyfSIgaW5jbHVkZXM9IiR7YXJjaGl2ZS5uYW1lfSIvPgogICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgCisKICAgICAgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0ibG9nLmlkIiB2YWx1ZT0iMiI+CiAgICAgICAgICAgICA8bm90PgogICAgICAgICAgICAgICAgIDxpc3NldCBwcm9wZXJ0eT0ibG9nLmlkIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvd2l0aEVKQi9BdXRvRGVwbG95TW9uaXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L3dpdGhFSkIvQXV0b0RlcGxveU1vbml0b3IuamF2YQppbmRleCBjYjVjODI3Li5jMzg4ZWQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvd2l0aEVKQi9BdXRvRGVwbG95TW9uaXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYXV0b2RlcGxveS93aXRoRUpCL0F1dG9EZXBsb3lNb25pdG9yLmphdmEKQEAgLTQ1LDMxICs0NSwzMSBAQAogICAqIEBhdXRob3IgIHRqcXVpbm4KICAgKi8KIHB1YmxpYyBjbGFzcyBBdXRvRGVwbG95TW9uaXRvciB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIERFQlVHID0gQm9vbGVhbi5nZXRCb29sZWFuKCJtb25pdG9yLmRlYnVnIik7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgSVRFUkFUSU9OX0xJTUlUID0gSW50ZWdlci5nZXRJbnRlZ2VyKCJtb25pdG9yLml0ZXJhdGlvbkxpbWl0IiwgNjAgKiAyIC8qIGRlZmF1bHQgPSB0d28gbWludXRlcyAqLykuaW50VmFsdWUoKTsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIGFyY2hpdmVOYW1lID0gbnVsbDsKLSAgICAKKwogLy8gICAgcHJpdmF0ZSBTdHJpbmcgYXV0b2RlcGxveURpclNwZWMgPSBudWxsOwotICAgIAorCiAgICAgcHJpdmF0ZSBGaWxlIGF1dG9kZXBsb3lEaXIgPSBudWxsOwogCiAvLyAgICBwcml2YXRlIFN0cmluZyB0aW1lc3RhbXBGb3JtYXQgPSBudWxsOwotICAgIAorCiAvLyAgICBwcml2YXRlIFN0cmluZyB0aW1lc3RhbXBTdHJpbmcgPSBudWxsOwotICAgIAorCiAgICAgcHJpdmF0ZSBsb25nIHRpbWVzdGFtcDsKLSAgICAKKwogICAgIHByaXZhdGUgRGF0ZSBzdGFydFRpbWUgPSBudWxsOwotICAgIAorCiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIExJTkVfU0VQID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOwotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgQXV0b0RlcGxveWVyICovCiAgICAgcHVibGljIEF1dG9EZXBsb3lNb25pdG9yKCkgewogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAgKiBAcGFyYW0gYXJncyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwogICAgICAgKi8KQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgICAgICAgIHVzYWdlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBhcmNoaXZlTmFtZSA9IGFyZ3NbMF07CiAgICAgICAgIFN0cmluZyBhdXRvZGVwbG95RGlyU3BlYyA9IGFyZ3NbMV07CiAgICAgICAgIFN0cmluZyB0aW1lc3RhbXBGb3JtYXQgPSBhcmdzWzJdOwpAQCAtOTUsMjEgKzk1LDIxIEBACiAgICAgICAgIGRlYnVnKCJBdXRvZGVwbG95IGRpcmVjdG9yeTogIiArIGF1dG9kZXBsb3lEaXIuZ2V0QWJzb2x1dGVQYXRoKCkpOwogCiAgICAgICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8qCiAgICAgICAgICAqQ2hlY2sgYXV0by1kZXBsb3kgZGlyZWN0b3J5LgogICAgICAgICAgKi8KICAgICAgICAgaWYgKCAhIGF1dG9kZXBsb3lEaXIuZXhpc3RzKCkpIHsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoTElORV9TRVApLmFwcGVuZCgiQXV0b2RlcGxveSBkaXJlY3RvcnkgIiArIGF1dG9kZXBsb3lEaXIuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiIGRvZXMgbm90IGV4aXN0IGJ1dCBzaG91bGQuIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLyoKICAgICAgICAgICpDaGVjayBhcmNoaXZlIGZpbGUgbmFtZS4KICAgICAgICAgICovCiAgICAgICAgIGlmIChhcmNoaXZlTmFtZS5sZW5ndGgoKSA9PSAwKSB7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKExJTkVfU0VQKS5hcHBlbmQoIkFyY2hpdmUgZmlsZSBuYW1lIG11c3Qgbm90IGJlIGVtcHR5IGJ1dCBpcy4iKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvKgogICAgICAgICAgKkNoZWNrIHRoZSB0aW1lc3RhbXAgZm9ybWF0IGFuZCB2YWx1ZS4KICAgICAgICAgICovCkBAIC0xMjIsMTIgKzEyMiwxMiBAQAogICAgICAgICB9IGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBwZSkgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChMSU5FX1NFUCkuYXBwZW5kKCJDb3VsZCBub3QgaW50ZXJwcmV0IHRpbWVzdGFtcCAiICsgdGltZXN0YW1wU3RyaW5nICsgIiB1c2luZyBmb3JtYXQgIiArIHRpbWVzdGFtcEZvcm1hdCkuYXBwZW5kKExJTkVfU0VQKS5hcHBlbmQoIiAgICAiKS5hcHBlbmQocGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCgpID4gMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihyZXN1bHQudG9TdHJpbmcoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIGludCBydW4oU3RyaW5nW10gYXJncykgewogICAgICAgICAvKgogICAgICAgICAgKlRoZSBjYWxsaW5nIHNjcmlwdCBzaG91bGQgcGFzcyB0aGVzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzOgpAQCAtMTQxLDkgKzE0MSw5IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHByb2Nlc3NBcmd1bWVudHMoYXJncyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqVGhlIHRpbWVzdGFtcCBoYW5kbGluZyBhbGxvd3MgdGhlIGxvZ2ljIGJlbG93IHRvIGlkZW50aWZ5IGEgbWFya2VyIGZpbGUgKC4uLl9kZXBsb3llZCwgCisgICAgICAgICAgICAgKlRoZSB0aW1lc3RhbXAgaGFuZGxpbmcgYWxsb3dzIHRoZSBsb2dpYyBiZWxvdyB0byBpZGVudGlmeSBhIG1hcmtlciBmaWxlICguLi5fZGVwbG95ZWQsCiAgICAgICAgICAgICAgKi4uLl91bmRlcGxveWVkLCAuLi5fZGVwbG95RmFpbGVkLCAuLi5fdW5kZXBsb3lGYWlsZWQpIHRoYXQgd2FzIGNyZWF0ZWQgYWZ0ZXIgdGhlCiAgICAgICAgICAgICAgKmFyY2hpdmUgd2FzIGRlcG9zaXRlZCBpbnRvIChmb3IgYXV0b2RlcGxveSkgb3IgcmVtb3ZlZCBmcm9tIChmb3IgYXV0b3VuZGVwbG95KSB0aGUKICAgICAgICAgICAgICAqYXV0b2RlcGxveSBkaXJlY3RvcnkuICBXZSBuZWVkIHRvIGRvIHRoaXMgdG8gbWFrZSBzdXJlIHdlIGRvIG5vdCBhY2NpZGVudGFsbHkgdGFrZQpAQCAtMTU1LDE2ICsxNTUsMTYgQEAKICAgICAgICAgICAgICAqRm9yIGF1dG8tZGVwbG95LCB0aGUgYXJjaGl2ZSB3aWxsIGhhdmUganVzdCBiZWVuIGNvcGllZCBpbnRvIHRoZSBhdXRvZGVwbG95IGRpcmVjdG9yeS4KICAgICAgICAgICAgICAqRm9yIGF1dG8tdW5kZXBsb3ksIHRoZSBhcmNoaXZlIHdpbGwgaGF2ZSBqdXN0IGJlZW4gZGVsZXRlZCBmcm9tIHRoZXJlLiAgVGhlIGZpbGUgZmlsdGVyCiAgICAgICAgICAgICAgKmJlbG93IHVzZXMgYm90aCB0aGUgZmlsZSBuYW1lIGFuZCBhbHNvIGEgdGltZXN0YW1wIHRvIG1ha2Ugc3VyZSBpdCBhY2NlcHRzCi0gICAgICAgICAgICAgKm1hcmtlciBmaWxlcyBjcmVhdGVkIGFmdGVyIHRoZSBhcmNoaXZlIGl0c2VsZi4gIAorICAgICAgICAgICAgICptYXJrZXIgZmlsZXMgY3JlYXRlZCBhZnRlciB0aGUgYXJjaGl2ZSBpdHNlbGYuCiAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICpOb3RlIHRoYXQgdGhlIGZvbGxvd2luZyBpcyBib3RoIGEgZGVjbGFyYXRpb24gb2YgdGhlIGZpbHRlciBhbmQgaXRzIGluaXRpYWxpemF0aW9uIGJ5CiAgICAgICAgICAgICAgKmludm9raW5nIGl0cyBpbml0IG1ldGhvZC4KICAgICAgICAgICAgICAqLwogCi0gICAgICAgICAgICBGaWxlRmlsdGVyIGZpbHRlciA9IG5ldyBGaWxlRmlsdGVyICgpIHsgCisgICAgICAgICAgICBGaWxlRmlsdGVyIGZpbHRlciA9IG5ldyBGaWxlRmlsdGVyICgpIHsKIAogICAgICAgICAgICAgICAgIHByaXZhdGUgbG9uZyB0aW1lc3RhbXA7Ci0gICAgICAgICAgICAgICAgcHJpdmF0ZSBTdHJpbmcgYXJjaGl2ZU5hbWUgPSBudWxsOyAKKyAgICAgICAgICAgICAgICBwcml2YXRlIFN0cmluZyBhcmNoaXZlTmFtZSA9IG51bGw7CiAKICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBjYW5kaWRhdGVGaWxlKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qCkBAIC0xNzYsNyArMTc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgbG9uZyBjYW5kaWRhdGVUaW1lc3RhbXAgPSBjYW5kaWRhdGVGaWxlLmxhc3RNb2RpZmllZCgpOwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY2FuZGlkYXRlTmFtZUFuZFR5cGUgPSBjYW5kaWRhdGVGaWxlU3BlYy5zdWJzdHJpbmcoY2FuZGlkYXRlRmlsZVNwZWMubGFzdEluZGV4T2YoRmlsZS5zZXBhcmF0b3IpICsgMSk7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjYW5kaWRhdGVUeXBlID0gY2FuZGlkYXRlRmlsZVNwZWMuc3Vic3RyaW5nKGNhbmRpZGF0ZUZpbGVTcGVjLmxhc3RJbmRleE9mKCcuJykgKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBhbnN3ZXIgPSAoY2FuZGlkYXRlVGltZXN0YW1wID4gdGhpcy50aW1lc3RhbXApCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoY2FuZGlkYXRlTmFtZUFuZFR5cGUuZXF1YWxzKGFyY2hpdmVOYW1lICsgQXV0b0RlcGxveUNvbnN0YW50cy5ERVBMT1lFRCkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVOYW1lQW5kVHlwZS5lcXVhbHMoYXJjaGl2ZU5hbWUgKyBBdXRvRGVwbG95Q29uc3RhbnRzLlVOREVQTE9ZRUQpIHx8CkBAIC0xOTYsMTEgKzE5NiwxMSBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfS5pbml0KGFyY2hpdmVOYW1lLCB0aW1lc3RhbXApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEZpbGUgW10gbWF0Y2hlcyA9IG51bGw7CiAKICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKkJlZ2luIHdhaXRpbmcgZm9yIGEgbmV3IG1hcmtlciBmaWxlIHRvIGFwcGVhciBpbiB0aGUgYXV0b2RlcGxveSBkaXJlY3RvcnkuICBEb24ndCB3YWl0IGxvbmdlciB0aGFuIAorICAgICAgICAgICAgICpCZWdpbiB3YWl0aW5nIGZvciBhIG5ldyBtYXJrZXIgZmlsZSB0byBhcHBlYXIgaW4gdGhlIGF1dG9kZXBsb3kgZGlyZWN0b3J5LiAgRG9uJ3Qgd2FpdCBsb25nZXIgdGhhbgogICAgICAgICAgICAgICp0d28gbWludXRlcyAoYnkgZGVmYXVsdCkgaW4gY2FzZSB0aGVyZSBpcyBzb21lIHByb2JsZW0uCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGludCBpdGVyYXRpb25Db3VudCA9IDA7CkBAIC0yMTQsNyArMjE0LDcgQEAKICAgICAgICAgICAgICAgICBtYXRjaGVzID0gYXV0b2RlcGxveURpci5saXN0RmlsZXMoZmlsdGVyKTsKIAogICAgICAgICAgICAgfSB3aGlsZSAoIChtYXRjaGVzLmxlbmd0aCA9PSAwKSAmJiAoaXRlcmF0aW9uQ291bnQgPCBJVEVSQVRJT05fTElNSVQpKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqUmV0dXJuIDAgaWYgdGhlIG1hcmtlciBmaWxlIGZvdW5kIGVuZHMgd2l0aCBfZGVwbG95ZWQsIDEgaWYgdGhlIG1hcmtlciBlbmRzIHdpdGgKICAgICAgICAgICAgICAqX2RlcGxveUZhaWxlZCwgYW5kIC0xIG90aGVyd2lzZS4KQEAgLTI0Myw3ICsyNDMsNyBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHVzYWdlKCkgewogICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVzYWdlOiIpOwogICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIiAgICBhdXRvZGVwbG95LmxvYWRlci5jbGllbnQuQXV0b0RlcGxveU1vbml0b3IgPGFyY2hpdmUtbmFtZT4gPGF1dG9kZXBsb3ktZGlyZWN0b3J5PiA8U2ltcGxlRGF0ZUZvcm1hdC1wYXR0ZXJuLWZvci10aW1lc3RhbXA+IDx0aW1lc3RhbXAtdmFsdWU+Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvd2l0aEVKQi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvd2l0aEVKQi9idWlsZC54bWwKaW5kZXggYzVlMGU4NC4uZjkxYzk0YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L3dpdGhFSkIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYXV0b2RlcGxveS93aXRoRUpCL2J1aWxkLnhtbApAQCAtMjIsMzYgKzIyLDM2IEBACiBdPgogCiA8IS0tCi0gICAgTm90ZSB0aGF0IHRoaXMgY3VycmVudGx5IGFzc3VtZXMgdGhhdCB0aGUgZWFyL2VhcndpdGhlamIgYW5kIGVqYi9zdGF0ZWxlc3NoZWxsbyBwcm9qZWN0cyBoYXZlIHJ1biB0byBidWlsZCAKKyAgICBOb3RlIHRoYXQgdGhpcyBjdXJyZW50bHkgYXNzdW1lcyB0aGF0IHRoZSBlYXIvZWFyd2l0aGVqYiBhbmQgZWpiL3N0YXRlbGVzc2hlbGxvIHByb2plY3RzIGhhdmUgcnVuIHRvIGJ1aWxkCiAgICAgdGhlIGVhciB1c2VkIGZvciB0aGlzIHRlc3QuCiAKICAgICBBbHNvIG5vdGUgdGhhdCB0aGlzIHRlc3QgZXhwZWN0cyB0aGUgJ2dyZXAnIGNvbW1hbmQgdG8gYmUgcHJlc2VudCBpbiB0aGUgb3BlcmF0aW5nIGVudmlyb25tZW50LgotICAgIFRoaXMgaXMgZmluZSBvbiBTb2xhcmlzIGFuZCBMaW51eCBzeXN0ZW1zLCBhbmQgc2hvdWxkIGJlIGZpbmUgb24gV2luZG93cyBzeXN0ZW1zIHByZXBhcmVkIAotICAgIGFjY29yZGluZyB0byB0aGUgcmVxdWlyZW1lbnRzIGZvciBidWlsZGluZyB0aGUgYXBwIHNlcnZlci4gIAorICAgIFRoaXMgaXMgZmluZSBvbiBTb2xhcmlzIGFuZCBMaW51eCBzeXN0ZW1zLCBhbmQgc2hvdWxkIGJlIGZpbmUgb24gV2luZG93cyBzeXN0ZW1zIHByZXBhcmVkCisgICAgYWNjb3JkaW5nIHRvIHRoZSByZXF1aXJlbWVudHMgZm9yIGJ1aWxkaW5nIHRoZSBhcHAgc2VydmVyLgogLS0+Ci0gCisKIDxwcm9qZWN0IG5hbWU9ImF1dG9kZXBsb3lXaXRoRUpCIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0gCSZjb21tb25CdWlsZDsKKyAgICAgJmNvbW1vbkJ1aWxkOwogCiAgICAgPHByb3BlcnR5IG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0id2l0aEVKQiIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRlRm9ybWF0IiB2YWx1ZT0ieXl5eS1NTS1kZC1ISDptbTpzcy5TU1MiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iYXJjaGl2ZWRpciIgdmFsdWU9IiR7YnVpbGR9L2FyY2hpdmVzIi8+Ci0gICAgCisKICAgICA8IS0tCiAgICAgICAgIFRoZSBmb2xsb3dpbmcgcHJvcGVydHkgZGVmaW5lcyB0aGUgZXhjZXB0aW9uIHRleHQgdGhhdCBhcHBlYXJzIGluIHRoZSBzZXJ2ZXIubG9nIGZpbGUgaWYKICAgICAgICAgdGhlIGJ1ZyBpcyBwcmVzZW50LgogICAgIC0tPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJleGNlcHRpb25UZXh0IiB2YWx1ZT0iRUpCQ2xhc3NMb2FkZXIgaW5zdGFuY2UgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHNodXRkb3duIi8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iYXJjaGl2ZU5hbWUiIHZhbHVlPSJlYXJ3aXRoZWpiLmVhciIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iYWxsLmVhciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vJHthcmNoaXZlTmFtZX0iLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNlcnZlci5sb2cuZmlsZSIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2xvZ3Mvc2VydmVyLmxvZyIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iYXV0b2RlcGxveS5kaXIiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXN1bHQucHJvcGVydHkuZmlsZSIgdmFsdWU9IiR7YnVpbGR9L3Jlc3VsdC5wcm9wZXJ0aWVzIi8+Ci0gICAgICAgIAotICAgICAgICAgICAgCisKKwogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KICAgICAgICAgPHBhdGggaWQ9InRlc3QuY29tcGlsZS5jbGFzc3BhdGgiPgogICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2luc3R9L2xpYi9qMmVlLmphciIvPgpAQCAtNjAsMTUgKzYwLDE1IEBACiAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7YnVpbGR9Ii8+CiAgICAgICAgIDwvcGF0aD4KICAgICA8L3RhcmdldD4KLQkKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9InByZXBhcmUiPgotICAgICAgICAKKwogICAgICAgICA8ZWNobz5CdWlsZGluZyBlYXI8L2VjaG8+CiAgICAgICAgIDwhLS0KICAgICAgICAgICAgIFRoZSBlYXJsaWVyIHRlc3RzIHNob3VsZCBoYXZlIHJ1biBhbHJlYWR5LCBzbyB0aGUgYXBwIHdlIHVzZSBmb3IgYXV0b2RlcGxveSB0ZXN0aW5nCiAgICAgICAgICAgICBzaG91bGQgYWxyZWFkeSBiZSBpbiBwbGFjZS4KICAgICAgICAgLS0+Ci0gICAgICAgIAorCiA8IS0tCiAgICAgICAgIDxhbnQgZGlyPSIke3Rlc3RzUm9vdH0vZWpiL3N0YXRlbGVzc2hlbGxvIiB0YXJnZXQ9ImFzc2VtYmxlIj4KICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7dGVzdHNSb290fS9idWlsZC9lamIvc3RhdGVsZXNzaGVsbG8iLz4KQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgPC9hbnQ+CiAtLT4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0icHJlcGFyZSI+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iCiAgICAgICAgICAgICAgICBkZXN0ZGlyPSIke2J1aWxkfSIKQEAgLTg3LDEyICs4NywxMiBAQAogICAgICAgICAgICAgPGNsYXNzcGF0aCByZWZpZD0idGVzdC5jb21waWxlLmNsYXNzcGF0aCIvPgogICAgICAgICA8L2phdmFjPgogICAgIDwvdGFyZ2V0PgotCQorCiAgICAgPCEtLQogICAgICAgICBUaGlzIHRhcmdldCBydW5zIGEgSmF2YSBjbGFzcyB0aGF0IHdhdGNoZXMgdGhlIGFwcCBzZXJ2ZXIncyBhdXRvZGVwbG95IGRpcmVjdG9yeSBhbmQgZGV0ZWN0cwogICAgICAgICB3aGVuIHRoZSBhcHAgc2VydmVyIGhhcyBkZXBsb3llZCBvciB1bmRlcGxveWVkIHRoZSBhcHAgKG9yIGhhcyByZXBvcnRlZCBhIGZhaWx1cmUgdG8gZG8gc28pIGJ5IG9ic2VydmluZwotICAgICAgICB3aGVuIHRoZSBtYXJrZXIgZmlsZXMgYXBwZWFyIGluIHRoZSBkaXJlY3RvcnkuICAKLSAgICAgICAgCisgICAgICAgIHdoZW4gdGhlIG1hcmtlciBmaWxlcyBhcHBlYXIgaW4gdGhlIGRpcmVjdG9yeS4KKwogICAgICAgICBUaGUgdGFyZ2V0IHJlY29yZHMgaXRzIHJlc3VsdHMgaW4gYSB0ZW1wb3JhcnkgcHJvcGVydGllcyBmaWxlIGluIHRoZSAke2J1aWxkfSBkaXJlY3RvcnkuCiAgICAgICAgIFRoaXMgcHJvdmlkZXMgYSBzaW1wbGUgd2F5IChyZWxhdGl2ZWx5IHNpbXBsZSwgYXQgbGVhc3QpIHRvIHVzZSB0aGUgc2FtZSB0YXJnZXQgbW9yZSB0aGFuIG9uY2UKICAgICAgICAgYW5kIHN0b3JlIGRpZmZlcmVudCByZXN1bHQgdmFsdWVzIGluIGEgd2F5IHRoYXQgY2FuIGJlIHJldHJpZXZlZCBhbmQgdXNlZCBmcm9tIHRoZSBtYWluCkBAIC0xMTcsNDQgKzExNyw0NCBAQAogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXJnLmxpc3R9Ii8+CiAgICAgICAgIDwvamF2YVdpdGhSZXN1bHQ+Ci0gICAgICAgIAorCiAgICAgICAgIDwhLS0KLSAgICAgICAgICAgIFRoZSByZXN1bHQgcHJvcGVydHkgbmFtZSB1c2VkIGluIHRoZSBuZXh0IHRhc2sgaXMgYW4gYXJndW1lbnQgdG8gdGhlIGNhbGxlZCB0YXJnZXQuICAKKyAgICAgICAgICAgIFRoZSByZXN1bHQgcHJvcGVydHkgbmFtZSB1c2VkIGluIHRoZSBuZXh0IHRhc2sgaXMgYW4gYXJndW1lbnQgdG8gdGhlIGNhbGxlZCB0YXJnZXQuCiAgICAgICAgICAgICBOb3RlIHRoYXQgdGhlIGVjaG8gaXMgYSBsaXR0bGUgb2RkbHkgZm9ybWF0dGVkLiAgVGhlIDwvZWNobz4gaXMgb24gYSBsaW5lIGJ5IGl0c2VsZiBhbmQgbGVmdC1qdXN0aWZpZWQgc28KICAgICAgICAgICAgIHRoYXQgdGhlIG91dHB1dCB0byB0aGUgZmlsZSBiZWluZyB3cml0dGVuIHdpbGwgcmVzaWRlIG9uIGEgbGluZSBieSBpdHNlbGYuICBUaGUKICAgICAgICAgICAgIGxlZnQtanVzdGlmaWNhdGlvbiBpcyBub3QgcmVhbGx5IG5lZWRlZCBidXQgdGhlIHByb3BlcnRpZXMgZmlsZSBsb29rcyBhIGJpdCBuaWNlcgotICAgICAgICAgICAgaWYgeW91IG9wZW4gaXQgaW4gYW4gZWRpdG9yLiAgVGhpcyBpcyBiZWNhdXNlIHRoZSBuZXh0IGxpbmUgaW4gdGhlIHByb3BlcnRpZXMgZmlsZSBiZWluZyAKKyAgICAgICAgICAgIGlmIHlvdSBvcGVuIGl0IGluIGFuIGVkaXRvci4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgbmV4dCBsaW5lIGluIHRoZSBwcm9wZXJ0aWVzIGZpbGUgYmVpbmcKICAgICAgICAgICAgIHdyaXR0ZW4gaXMgaW5kZW50ZWQgYXMgZmFyIGFzIHRoZSA8L2VjaG8+IGlzIGluZGVudGVkIGhlcmUgaW4gdGhlIGJ1aWxkLnhtbCBmaWxlLgogICAgICAgICAtLT4KICAgICAgICAgPGVjaG8gZmlsZT0iJHtyZXN1bHQucHJvcGVydHkuZmlsZX0iIGFwcGVuZD0idHJ1ZSI+JHtyZXN1bHRQcm9wZXJ0eU5hbWV9PSR7YXV0b2RlcGxveVJlc3VsdH0KIDwvZWNobz4KLSAgICAgICAgCisKICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LmF1dG9kZXBsb3kiPgotICAgIAorCiAgICAgPCEtLQotICAgICAgICBUbyBtb25pdG9yIGF1dG8tZGVwbG95bWVudCBvciBhdXRvLXVuZGVwbG95bWVudCwgd2Ugc3RhcnQgYnkgZ2V0dGluZyB0aGUgY3VycmVudCB0aW1lLiAgCi0gICAgICAgIFRoZW4gd2UgY29weSB0aGUgYXJjaGl2ZSBmaWxlIGludG8gdGhlIGF1dG9kZXBsb3kgZGlyZWN0b3J5IChmb3IgYXV0by1kZXBsb3kpIG9yIGRlbGV0ZSAKKyAgICAgICAgVG8gbW9uaXRvciBhdXRvLWRlcGxveW1lbnQgb3IgYXV0by11bmRlcGxveW1lbnQsIHdlIHN0YXJ0IGJ5IGdldHRpbmcgdGhlIGN1cnJlbnQgdGltZS4KKyAgICAgICAgVGhlbiB3ZSBjb3B5IHRoZSBhcmNoaXZlIGZpbGUgaW50byB0aGUgYXV0b2RlcGxveSBkaXJlY3RvcnkgKGZvciBhdXRvLWRlcGxveSkgb3IgZGVsZXRlCiAgICAgICAgIGl0IChmb3IgYXV0by11bmRlcGxveSkuICBBbGwgbWFya2VyIGZpbGVzIGNyZWF0ZWQgYnkgdGhlIHNlcnZlciBkdXJpbmcgYXV0by1kZXBsb3ltZW50IG9mCiAgICAgICAgIHRoZSBuZXdseS1jb3BpZWQgYXJjaGl2ZSBmaWxlIHdpbGwgaGF2ZSBsYXRlciB0aW1lc3RhbXBzIHRoYW4gdGhlIHRpbWVzdGFtcCBqdXN0IGNyZWF0ZWQuCi0gICAgICAgIFRoZXJlIGNvdWxkIGJlIGVhcmxpZXIgbWFya2VyIGZpbGVzIGZvciB0aGUgc2FtZSBhcmNoaXZlIGluIHRoZSBkaXJlY3RvcnkgYW5kIHRoZSBtb25pdG9yIAorICAgICAgICBUaGVyZSBjb3VsZCBiZSBlYXJsaWVyIG1hcmtlciBmaWxlcyBmb3IgdGhlIHNhbWUgYXJjaGl2ZSBpbiB0aGUgZGlyZWN0b3J5IGFuZCB0aGUgbW9uaXRvcgogICAgICAgICB3YW50cyB0byBpZ25vcmUgdGhvc2UsIHdoaWNoIGlzIHdoeSB3ZSBnZXQgdGhlIGN1cnJlbnQgdGltZSBhbmQgcGFzcyBpdCB0byB0aGUgbW9uaXRvci4KLSAgICAgICAgCisKICAgICAgICAgVGhlIG1vbml0b3Igd2lsbCBjaGVjayBmb3IgbWFya2VyIGZpbGVzIGZvciB0aGUgY29waWVkIGFyY2hpdmUgZmlsZQotICAgICAgICBhbmQgd2hvc2UgbGFzdCBtb2RpZmljYXRpb24gdGltZSBhcmUgYWZ0ZXIgdGhlIGN1cnJlbnQgdGltZXN0YW1wLCByZXR1cm5pbmcgMCBpZiB0aGUgCi0gICAgICAgIGF1dG8tZGVwbG95ZXIgY3JlYXRlcyBhIF9kZXBsb3llZCBvciBfdW5kZXBsb3llZCBmaWxlLCAxIGlmIGl0IGNyZWF0ZXMgYSBfZGVwbG95X2ZhaWxlZCAKKyAgICAgICAgYW5kIHdob3NlIGxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgYXJlIGFmdGVyIHRoZSBjdXJyZW50IHRpbWVzdGFtcCwgcmV0dXJuaW5nIDAgaWYgdGhlCisgICAgICAgIGF1dG8tZGVwbG95ZXIgY3JlYXRlcyBhIF9kZXBsb3llZCBvciBfdW5kZXBsb3llZCBmaWxlLCAxIGlmIGl0IGNyZWF0ZXMgYSBfZGVwbG95X2ZhaWxlZAogICAgICAgICBvciBfdW5kZXBsb3lfZmFpbGVkIGZpbGUsIGFuZCAtMSBpZiBpdCByZWNvZ25pemVkIG5vIG1hcmtlciBmaWxlLgogICAgIC0tPgogICAgICAgICA8dHN0YW1wIHByZWZpeD0iZGVwbG95Ij4KICAgICAgICAgICAgIDxmb3JtYXQgcHJvcGVydHk9Ik5PVyIgcGF0dGVybj0iJHtkYXRlRm9ybWF0fSIvPgogICAgICAgICA8L3RzdGFtcD4KLSAgICAgICAgCisKICAgICAgICAgPCEtLQogICAgICAgICAgICAgVHJpZ2dlciB0aGUgYXV0by1kZXBsb3kuCiAgICAgICAgIC0tPgogICAgICAgICA8Y29weSBmaWxlPSIke2FyY2hpdmUuZmlsZX0iIHRvZGlyPSIke2F1dG9kZXBsb3kuZGlyfSIgb3ZlcndyaXRlPSJ0cnVlIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDwhLS0KICAgICAgICAgICAgIFVzZSB0aGUgbW9uaXRvciB0byBkZXRlY3Qgd2hlbiB0aGUgYXV0by1kZXBsb3kgaGFzIGNvbXBsZXRlZC4KICAgICAgICAgLS0+CkBAIC0xNjUsMjUgKzE2NSwyNSBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZy5pZCIgdmFsdWU9IjEiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kuYXV0b3VuZGVwbG95Ij4KLSAgICAKKwogICAgICAgICA8IS0tCi0gICAgICAgICAgICBUaGlzIHRhcmdldCB3b3JrcyB2ZXJ5IG11Y2ggbGlrZSB0aGUgZGVwbG95LmF1dG9kZXBsb3kgdGFyZ2V0IGV4Y2VwdCB0aGF0IGluc3RlYWQgb2YgCisgICAgICAgICAgICBUaGlzIHRhcmdldCB3b3JrcyB2ZXJ5IG11Y2ggbGlrZSB0aGUgZGVwbG95LmF1dG9kZXBsb3kgdGFyZ2V0IGV4Y2VwdCB0aGF0IGluc3RlYWQgb2YKICAgICAgICAgICAgIGNvcHlpbmcgdGhlIGFyY2hpdmUgaW50byB0aGUgYXV0b2RlcGxveSBkaXJlY3RvcnkgaXQgZGVsZXRlcyB0aGUgcHJldmlvdXNseSBjb3BpZWQKICAgICAgICAgICAgIGFyY2hpdmUgZnJvbSB0aGF0IGRpcmVjdG9yeS4KICAgICAgICAgLS0+CiAgICAgICAgIDx0c3RhbXAgcHJlZml4PSJ1bmRlcGxveSI+CiAgICAgICAgICAgICA8Zm9ybWF0IHByb3BlcnR5PSJOT1ciIHBhdHRlcm49IiR7ZGF0ZUZvcm1hdH0iLz4KICAgICAgICAgPC90c3RhbXA+Ci0gICAgICAgIAorCiAgICAgICAgIDwhLS0KICAgICAgICAgICAgIFRyaWdnZXIgYXV0by11bmRlcGxveSBieSBkZWxldGluZyB0aGUgZmlsZS4KICAgICAgICAgLS0+CiAgICAgICAgIDxkZWxldGUgcXVpZXQ9InRydWUiPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2F1dG9kZXBsb3kuZGlyfSIgaW5jbHVkZXM9IiR7YXJjaGl2ZU5hbWV9Ii8+CiAgICAgICAgIDwvZGVsZXRlPgotICAgICAgICAKKwogICAgICAgICA8ZWNobz5XYWl0aW5nIGZvciBhdXRvdW5kZXBsb3ltZW50IHRvIGNvbXBsZXRlLi4uPC9lY2hvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bkF1dG9EZXBsb3lNb25pdG9yIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9IiR7YXJjaGl2ZU5hbWV9ICR7YXV0b2RlcGxveS5kaXJ9ICR7ZGF0ZUZvcm1hdH0gJHt1bmRlcGxveS5OT1d9Ii8+CkBAIC0xOTcsMTQgKzE5NywxNCBAQAogICAgICAgICAgICAgU2VlIGlmIHRoZSBleGNlcHRpb24gdGV4dCBhcHBlYXJzIGluIHRoZSBzZXJ2ZXIubG9nIGZpbGUuICBUaGlzIHN0ZXAgYXNzdW1lcyB0aGUgb3BlcmF0aW5nCiAgICAgICAgICAgICBlbnZpcm9ubWVudCBzdXBwb3J0cyB0aGUgZ3JlcCBjb21tYW5kLiAgVGhpcyBzaG91bGQgYmUgZmluZSBmb3IgU29sYXJpcyBhbmQgTGludXggc3lzdGVtcwogICAgICAgICAgICAgYW5kIGZvciBXaW5kb3dzIHN5c3RlbXMgdGhhdCBzdXBwb3J0IGJ1aWxkaW5nIHRoZSBwcm9kdWN0LgotICAgICAgICAgICAgCi0gICAgICAgICAgICBUaGUgb3V0cHV0IGZyb20gdGhlIGdyZXAgaXMgc2F2ZWQgaW50byBhIHByb3BlcnR5IChncmVwT3V0cHV0KSx0aGVuIHRoZSBwcm9wZXJ0eSBpcyB3cml0dGVuIAorCisgICAgICAgICAgICBUaGUgb3V0cHV0IGZyb20gdGhlIGdyZXAgaXMgc2F2ZWQgaW50byBhIHByb3BlcnR5IChncmVwT3V0cHV0KSx0aGVuIHRoZSBwcm9wZXJ0eSBpcyB3cml0dGVuCiAgICAgICAgICAgICBpbnRvIGEgZmlsZS4gIFRoZSBmaWxlIHRvIGJlIHdyaXR0ZW4gKG91dHB1dC5maWxlKSBpcyBhbHNvIHByb3ZpZGVkIGFzIGFuIGFyZ3VtZW50IHNvIHRoaXMKLSAgICAgICAgICAgIHRhcmdldCBjYW4gYmUgY2FsbGVkIGZyb20gZGlmZmVyZW50IHBsYWNlcyBhbmQgdGhlIHJlc3VsdHMgc3RvcmVkIGluIGRpZmZlcmVudCBmaWxlcyBmb3IgCisgICAgICAgICAgICB0YXJnZXQgY2FuIGJlIGNhbGxlZCBmcm9tIGRpZmZlcmVudCBwbGFjZXMgYW5kIHRoZSByZXN1bHRzIHN0b3JlZCBpbiBkaWZmZXJlbnQgZmlsZXMgZm9yCiAgICAgICAgICAgICBsYXRlciBjb21wYXJpc29uLgogICAgICAgICAtLT4KLSAgICAgICAgPGV4ZWMgCi0gICAgICAgICAgICBleGVjdXRhYmxlPSJncmVwIiAKKyAgICAgICAgPGV4ZWMKKyAgICAgICAgICAgIGV4ZWN1dGFibGU9ImdyZXAiCiAgICAgICAgICAgICByZXN1bHRwcm9wZXJ0eT0iZ3JlcFJlc3VsdCIKICAgICAgICAgICAgIG91dHB1dHByb3BlcnR5PSJncmVwT3V0cHV0IgogICAgICAgICAgICAgPgpAQCAtMjIwLDI2ICsyMjAsMjYgQEAKICAgICAgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0ic3RhdHVzTWVzc2FnZSIgdmFsdWU9IlRoZSBwcmVjZWRpbmcgUmVzdWx0OiAxIG1lc3NhZ2UgaXMgZXhwZWN0ZWQ7IGl0IG1lYW5zIGdyZXAgZGlkIG5vdCBmaW5kIHRoZSBlcnJvciBzdHJpbmcuIj4KICAgICAgICAgICAgIDxlcXVhbHMgYXJnMT0iJHtncmVwUmVzdWx0fSIgYXJnMj0iMSIvPgogICAgICAgICA8L2NvbmRpdGlvbj4KLSAgICAgICAgCisKICAgICAgICAgPHByb3BlcnR5IG5hbWU9InN0YXR1c01lc3NhZ2UiIHZhbHVlPSIiLz4KICAgICAgICAgPGVjaG8+JHtzdGF0dXNNZXNzYWdlfTwvZWNobz4KLSAgICAgICAgCisKICAgICAgICAgPGVjaG8gZmlsZT0iJHtvdXRwdXQuZmlsZX0iPiR7Z3JlcE91dHB1dH08L2VjaG8+CiAgICAgICAgIDxlY2hvIGZpbGU9IiR7cmVzdWx0LnByb3BlcnR5LmZpbGV9IiBhcHBlbmQ9InRydWUiPiR7cmVzdWx0UHJvcGVydHlOYW1lfT0ke2dyZXBSZXN1bHR9CiA8L2VjaG8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAJCQorCiAgICAgPHRhcmdldCBuYW1lPSJjaGVja0ZvclJlZ3Jlc3Npb24iIGlmPSJmaWxlTWF0Y2hFcnJvciI+CiAgICAgICAgIDxlY2hvPiR7ZmlsZU1hdGNoRXJyb3J9CiAKIFRoZSBzdHJpbmcgIiR7ZXhjZXB0aW9uVGV4dH0iIHdhcyBmb3VuZCwgaW1wbHlpbmcgdGhhdCB0aGUgYnVnIGlzIHByZXNlbnQuCiA8L2VjaG8+Ci0gICAgPC90YXJnZXQ+CQotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KLSAgICAgICAgCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRlc2NyaXB0aW9uIiB2YWx1ZT0iYXV0b2RlcGxveS9sb2FkZXJ0ZXN0IFRlc3QgYXV0b2RlcGxveSBhbmQgY29udGV4dCBjbGFzcyBsb2FkZXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgpAQCAtMjQ5LDcgKzI0OSw3IEBACiAgICAgICAgICAgICByZWNvcmQgdGhlIHJlc3VsdHMgb2YgdGhlIGF1dG9kZXBsb3kgZGlyZWN0b3J5IG1vbml0b3JpbmcgSmF2YSBjbGFzcy4KICAgICAgICAgLS0+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHtyZXN1bHQucHJvcGVydHkuZmlsZX0iIHF1aWV0PSJ0cnVlIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDwhLS0KICAgICAgICAgICAgIERvIHRoZSBhdXRvLWRlcGxveW1lbnQuCiAgICAgICAgLS0+CkBAIC0yNjQsNyArMjY0LDcgQEAKICAgICAgICAgICAgIFdlIGRvIHRoaXMgbm93LCBiZWZvcmUgdW5kZXBsb3lpbmcsIGFuZCBjYXB0dXJlIHRoZSBvdXRwdXQgaW4gYSBmaWxlLiAgVGhlbiB3ZSdsbAogICAgICAgICAgICAgZG8gdGhlIHNhbWUgdGhpbmcgYWZ0ZXIgdW5kZXBsb3lpbmcsIGNhcHR1cmluZyB0aGF0IG91dHB1dCB0byBzIHNlcGFyYXRlIGZpbGUuICBXZQogICAgICAgICAgICAgaG9wZSB0aGUgdHdvIG91dHB1dCBmaWxlcyB3aWxsIGJlIHRoZSBzYW1lLCBtZWFuaW5nIHRoYXQgbm8gbmV3IGV4Y2VwdGlvbnMgd2VyZQotICAgICAgICAgICAgdGhyb3duIGFzIGEgcmVzdWx0IG9mIHRoZSB1bmRlcGxveS4gIElmIHRoZSBidWcgaGFzIHJlc3VyZmFjZWQsIHRoZW4gdGhlIHNlY29uZCAKKyAgICAgICAgICAgIHRocm93biBhcyBhIHJlc3VsdCBvZiB0aGUgdW5kZXBsb3kuICBJZiB0aGUgYnVnIGhhcyByZXN1cmZhY2VkLCB0aGVuIHRoZSBzZWNvbmQKICAgICAgICAgICAgIG91dHB1dCBmaWxlIHdpbGwgY29udGFpbiBhbiBhZGRpdGlvbmFsIGV4Y2VwdGlvbiBhcyBjb21wYXJlZCB0byB0aGUgZmlyc3Qgb3V0cHV0IGZpbGUuCiAgICAgICAgIC0tPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNlYXJjaEZvckV4Y2VwdGlvbiI+CkBAIC0zMDAsNyArMzAwLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXN1bHRQcm9wZXJ0eU5hbWUiIHZhbHVlPSJzZWNvbmRTZWFyY2hSZXN1bHQiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvdXRwdXQuZmlsZSIgdmFsdWU9IiR7YnVpbGR9L2FmdGVyMm5kZGVwbG95LmxvZyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgIAorCiAgICAgICAgIDwhLS0KICAgICAgICAgICAgIEF1dG91bmRlcGxveSB0aGUgYXBwIG9uY2UgbW9yZSBqdXN0IHRvIGNsZWFuIHVwLgogICAgICAgICAtLT4KQEAgLTMyNiwxMCArMzI2LDEwIEBACiAgICAgICAgICAgICAgICAgPGZpbGVzbWF0Y2ggZmlsZTE9IiR7YnVpbGR9L2JlZm9yZTJuZGRlcGxveS5sb2ciIGZpbGUyPSIke2J1aWxkfS9hZnRlcjJuZGRlcGxveS5sb2ciLz4KICAgICAgICAgICAgIDwvbm90PgogICAgICAgICA8L2NvbmRpdGlvbj4KLSAgICAgICAgCisKICAgICAgICAgPCEtLQogICAgICAgICAgICAgRGVjaWRlIHdoZXRoZXIgdGhlIHRlc3Qgd2FzIHN1Y2Nlc3NmdWwgb3Igbm90LiAgTWFrZSBzdXJlIHRoYXQgdGhlIGRlcGxveSBhbmQKLSAgICAgICAgICAgIHVuZGVwbG95IHJlc3VsdHMgYXJlIGdvb2QgYW5kIHRoYXQgdGhlIGdyZXAgZm9yIHRoZSBlcnJvciBzdHJpbmcgb2YgdGhlIHNlcnZlci5sb2cgCisgICAgICAgICAgICB1bmRlcGxveSByZXN1bHRzIGFyZSBnb29kIGFuZCB0aGF0IHRoZSBncmVwIGZvciB0aGUgZXJyb3Igc3RyaW5nIG9mIHRoZSBzZXJ2ZXIubG9nCiAgICAgICAgICAgICBmaWxlIHdhcyB0aGUgc2FtZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBzZWNvbmQgYXV0b2RlcGxveW1lbnQuICBXZSBkb24ndCByZWFsbHkgY2FyZQogICAgICAgICAgICAgaWYgdGhlIHNlY29uZCB1bmRlcGxveSB3b3JrZWQgb3Igbm90IHNvIHdlIGRvbid0IGNoZWNrIGl0cyByZXN1bHQgcHJvcGVydHkgaGVyZS4KICAgICAgICAgLS0+CkBAIC0zNDMsOSArMzQzLDkgQEAKICAgICAgICAgICAgICAgICA8L25vdD4KICAgICAgICAgICAgIDwvYW5kPgogICAgICAgICA8L2NvbmRpdGlvbj4KLSAgICAgICAgCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjaGVja0ZvclJlZ3Jlc3Npb24iLz4KLSAgICAgICAgCisKICAgICAgICAgPCEtLQogICAgICAgICAgICAgSWYgdGhlIHByb3BlcnR5ICJyZXN1bHQiIHdhcyBub3Qgc2V0IGJ5IHRoZSAiY29uZGl0aW9uIiB0YXNrIGp1c3QgYWJvdmUgdGhlbiBzb21ldGhpbmcKICAgICAgICAgICAgIHdlbnQgd3JvbmcgYW5kIHdlIHNldCByZXN1bHQgdG8gMSBub3cuICBOb3JtYWxseSBjaGVja0ZvclJlZ3Jlc3Npb24gd2lsbCBzZXQgdGhlIHZhbHVlIHRvIDAgb3IgMS4KQEAgLTM1NSwxMiArMzU1LDEyIEBACiAgICAgICAgICAgICAgICAgPGlzc2V0IHByb3BlcnR5PSJyZXN1bHQiLz4KICAgICAgICAgICAgIDwvbm90PgogICAgICAgICA8L2NvbmRpdGlvbj4KLSAgICAgICAgCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwcm9jZXNzUmVzdWx0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXN1bHQiIHZhbHVlPSIke3Jlc3VsdH0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2ciIHZhbHVlPSIke2J1aWxkfS9vdXRwdXQubG9nIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgIDwvdGFyZ2V0PgotICAgIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2J1aWxkLW5nLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYnVpbGQtbmcueG1sCmluZGV4IDFlODJmMmYuLmJjNDJiYTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYnVpbGQtbmcueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYnVpbGQtbmcueG1sCkBAIC0yMCw1NSArMjAsNTUgQEAKIDwhLS0KICAgICBUaGlzIGFudCBzY3JpcHQgcnVucyBUZXN0TkcgdG8gbWFuYWdlIHRlc3RzIGluIGEgR2xhc3NGaXNoIGRlcGxveW1lbnQgZGV2dGVzdAogICAgIGRpcmVjdG9yeS4gIE5vdGUgdGhhdCB0aGlzIHNjcmlwdCBleHBlY3RzOgotIAorCiAgICAgLSAgRW52aXJvbm1lbnQgdmFyaWFibGVzOgogICAgICAgICBBUFNfSE9NRSBzaG91bGQgcG9pbnQgdG8gdGhlIEdsYXNzRmlzaCBhcHBzZXJ2LXRlc3RzIGRpcmVjdG9yeQogICAgICAgICBKQVZBX0hPTUUgc2hvdWxkIHBvaW50IHRvIHRoZSBKREsgdG8gYmUgdXNlZCBmb3IgdGVzdGluZwotICAgICAgICAKLSAgICAtIFRoZSBUZXN0TkcgamFyIGZpbGUgYmUgcGxhY2VkIGF0ICR7QVBTX0hPTUV9L2xpYiB3aXRoIHRoZSBuYW1lIHRlc3RuZy5qYXIuICAKLSAgICBJbiB0aGUgbmVhciBmdXR1cmUgdGhlIFRlc3RORyBqYXIgbWF5IGJlY29tZSBhdmFpbGFibGUgZnJvbSB0aGUgR2xhc3NGaXNoIAorCisgICAgLSBUaGUgVGVzdE5HIGphciBmaWxlIGJlIHBsYWNlZCBhdCAke0FQU19IT01FfS9saWIgd2l0aCB0aGUgbmFtZSB0ZXN0bmcuamFyLgorICAgIEluIHRoZSBuZWFyIGZ1dHVyZSB0aGUgVGVzdE5HIGphciBtYXkgYmVjb21lIGF2YWlsYWJsZSBmcm9tIHRoZSBHbGFzc0Zpc2gKICAgICBzaXRlLiAgVW50aWwgdGhlbiB0ZXN0ZXJzIHdobyB3aXNoIHRvIHVzZSBpdCBzaG91bGQgZG93bmxvYWQgaXQgdGhlbXNlbHZlcwotICAgIGZyb20gaHR0cDovL3d3dy50ZXN0bmcub3JnIGFuZCBjb3B5IHRoZSBqYXIgZmlsZSBmcm9tIHRoYXQgZG93bmxvYWQgYXMgCisgICAgZnJvbSBodHRwOi8vd3d3LnRlc3RuZy5vcmcgYW5kIGNvcHkgdGhlIGphciBmaWxlIGZyb20gdGhhdCBkb3dubG9hZCBhcwogICAgIHRlc3RuZy5qYXIgaW50byAke0FQU19IT01FfS9saWIuCi0gICAgCisKICAgICAtICBPbmUgb3IgbW9yZSBKYXZhIGNsYXNzZXMgb2YgYW55IG5hbWUgZXhpc3QgYXQgdGhlIGxvd2VzdC1sZXZlbCB0ZXN0Ci0gICAgZGlyZWN0b3J5LiAgKEZvciBleGFtcGxlLCBzdWNoIGEgZGlyZWN0b3J5IGlzIGVqYjMwL2Vhci9zZXNzaW9uLikgIFRoZXNlIAorICAgIGRpcmVjdG9yeS4gIChGb3IgZXhhbXBsZSwgc3VjaCBhIGRpcmVjdG9yeSBpcyBlamIzMC9lYXIvc2Vzc2lvbi4pICBUaGVzZQogICAgIGNsYXNzZXMgYXJlIHJlcXVpcmVkIHRvIHVzZSB0aGUgVGVzdE5HIGFubm90YXRpb25zIHRvIGlkZW50aWZ5IGFuZAogICAgIGRlc2NyaWJlIHRoZSB0ZXN0IG1ldGhvZHMgdG8gYmUgcnVuLiAgVGhleSBtdXN0IGFsc28gKHRlbXBvcmFyaWx5IGF0IGxlYXN0KQogICAgIHJlc2lkZSBpbiBhIHBhY2thZ2UgdGhhdCBlbmRzIHdpdGggLnRlc3RuZyBzbyB0aGUgdGVzdG5nIHRhc2sgYmVsb3cgY2FuCiAgICAgZWZmaWNpZW50bHkgc2VsZWN0IHdoaWNoIC5jbGFzcyBmaWxlcyB0byBjaGVjayBmb3IgVGVzdE5HIGFubm90YXRpb25zLgogCi0gICAgU3VjaCBjbGFzc2VzIG1heSBleHRlbmQgRGVwbG95bWVudFRlc3QgKGluIHRoZSBHbGFzc0Zpc2ggcmVwb3NpdG9yeSBhdCAKLSAgICAke0FQU19IT01FfS9kZXZ0ZXN0cy9kZXBsb3ltZW50L0RlcGxveW1lbnRUZXN0LmphdmEpIGlmIHRoZXkgd2lzaCBidXQgCisgICAgU3VjaCBjbGFzc2VzIG1heSBleHRlbmQgRGVwbG95bWVudFRlc3QgKGluIHRoZSBHbGFzc0Zpc2ggcmVwb3NpdG9yeSBhdAorICAgICR7QVBTX0hPTUV9L2RldnRlc3RzL2RlcGxveW1lbnQvRGVwbG95bWVudFRlc3QuamF2YSkgaWYgdGhleSB3aXNoIGJ1dAogICAgIHRoZXkgYXJlIG5vdCByZXF1aXJlZCB0byBkbyBzby4KLSAgICAKKwogICAgIFRvIHVzZSBUZXN0TkcgdG8gcnVuIHN1Y2ggdGVzdHMsIGNkIHRvIHRoZSBsb3dlci1sZXZlbCB0ZXN0IGRpcmVjdG9yeQotICAgIG9mIGludGVyZXN0IGFuZCBpbnZva2UgYW50IHNwZWNpZnlpbmcgdGhpcyBmaWxlLiAgCi0gICAgCi0gICAgTm90ZSB0aGF0IHRoaXMgc2NyaXB0IGFuZCB0aGUgdGVzdCBjbGFzc2VzIGFyZSBmYWlybHkgc2ltcGxlIGFuZCB3aWxsIAotICAgIGxpa2VseSBldm9sdmUgYW5kIGltcHJvdmUgb3ZlciB0aW1lLiAgCi0gICAgICAgIAorICAgIG9mIGludGVyZXN0IGFuZCBpbnZva2UgYW50IHNwZWNpZnlpbmcgdGhpcyBmaWxlLgorCisgICAgTm90ZSB0aGF0IHRoaXMgc2NyaXB0IGFuZCB0aGUgdGVzdCBjbGFzc2VzIGFyZSBmYWlybHkgc2ltcGxlIGFuZCB3aWxsCisgICAgbGlrZWx5IGV2b2x2ZSBhbmQgaW1wcm92ZSBvdmVyIHRpbWUuCisKIC0tPgogCiA8cHJvamVjdCBkZWZhdWx0PSJydW4tdGVzdCIgYmFzZWRpcj0iLiI+CiAKICAgICA8cHJvcGVydHkgZW52aXJvbm1lbnQ9ImVudm5nIi8+Ci0gICAgCi0gICAgPCEtLSAKKworICAgIDwhLS0KICAgICAgICAgQ3VycmVudGx5LCBkZXBsb3ltZW50IGRldnRlc3RzIHVzZXIgdGhlaXIgb3duIGJ1aWxkIGFyZWEuCiAgICAgLS0+CiAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGwuZGV2dGVzdHMuaG9tZSIgdmFsdWU9IiR7ZW52bmcuQVBTX0hPTUV9L2RldnRlc3RzL2RlcGxveW1lbnQiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbC5idWlsZC5kaXIiIHZhbHVlPSIke2RlcGwuZGV2dGVzdHMuaG9tZX0vYnVpbGQiLz4KLSAgICAKLSAgPCEtLSAKKworICA8IS0tCiAgICAgQ2xhc3NwYXRoIGZvciB0aGUgVGVzdE5HIGphciBhbmQgdGhlIGJ1aWxkIGNsYXNzIGRpcmVjdG9yeS4gIFRoZSB0ZXN0IGZpbGVzCiAgICAgdGhlbXNlbHZlcyB3aWxsIGJlIGNvbXBpbGVkIGludG8gdGhlIGRlcGxveW1lbnQgZGV2dGVzdCBidWlsZCBkaXJlY3RvcnkuCi0gICAgCisKICAgICBDdXJyZW50bHksIHRoZSBUZXN0TkctZHJpdmVuIGRlcGxveW1lbnQgZGV2dGVzdHMgdXNlIGNhbGxhYmxlIGFudCwgc28gdGhlCi0gICAgdmFyaW91cyBhbnQgamFycyBuZWVkIHRvIGJlIGluIHRoZSBjbGFzcyBwYXRoLiAgQWxzbywgdGhlIGRldnRlc3RzIAorICAgIHZhcmlvdXMgYW50IGphcnMgbmVlZCB0byBiZSBpbiB0aGUgY2xhc3MgcGF0aC4gIEFsc28sIHRoZSBkZXZ0ZXN0cwogICAgIHJlcXVpcmUgY29tcGlsYXRpb24gb2YgSmF2YSBmaWxlcywgc28gdG9vbHMuamFyIG11c3QgYmUgaW4gdGhlIGNsYXNzcGF0aAogICAgIGZvciB0aGUgY29tcGlsZXIgdG8gYmUgZm91bmQgd2hlbiBhbnQgaXMgaW52b2tlZCBmcm9tIHRoZSBUZXN0TkcgdGVzdC4KLSAgICAKKwogICAtLT4KICAgPHBhdGggaWQ9ImNwIj4KICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52bmcuQVBTX0hPTUV9L2xpYi90ZXN0bmcuamFyIi8+CkBAIC03OCw3ICs3OCw3IEBACiAgICAgPC9maWxlc2V0PgogICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnZuZy5KQVZBX0hPTUV9L2xpYi90b29scy5qYXIiLz4KICAgPC9wYXRoPgotIAorCiAgIDwhLS0gRGVmaW5lIHRoZSB0YXNrIGZvciBydW5uaW5nIHRlc3RuZyAtLT4KICAgPHRhc2tkZWYgbmFtZT0idGVzdG5nIiBjbGFzc3BhdGhyZWY9ImNwIgogICAgICAgICAgICBjbGFzc25hbWU9Im9yZy50ZXN0bmcuVGVzdE5HQW50VGFzayIgLz4KQEAgLTkwLDE5ICs5MCwxOSBAQAogICAgIGZpbGUuCiAgIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS10ZXN0cyI+Ci0gICAgICAgIDxqYXZhYyAKLSAgICAgICAgICAgIHNyY2Rpcj0iJHt1c2VyLmRpcn06JHtkZXBsLmRldnRlc3RzLmhvbWV9IiAKKyAgICAgICAgPGphdmFjCisgICAgICAgICAgICBzcmNkaXI9IiR7dXNlci5kaXJ9OiR7ZGVwbC5kZXZ0ZXN0cy5ob21lfSIKICAgICAgICAgICAgIGluY2x1ZGVzPSIqLmphdmEiCi0gICAgICAgICAgICBkZXN0ZGlyPSIke2RlcGwuYnVpbGQuZGlyfSIgCi0gICAgICAgICAgICBkZWJ1Zz0ib24iIAorICAgICAgICAgICAgZGVzdGRpcj0iJHtkZXBsLmJ1aWxkLmRpcn0iCisgICAgICAgICAgICBkZWJ1Zz0ib24iCiAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoPgogICAgICAgICAgICAgICAgIDxwYXRoIHJlZmlkPSJjcCIvPgogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YWM+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gPCEtLSAKKworIDwhLS0KICAgICBSdW4gdXNpbmcgYWxsIHRlc3RzLCBsb29raW5nIGluIHRob3NlIC5jbGFzcyBmaWxlcyBmb3Igd2hpY2ggdGhlIHBhY2thZ2UKICAgICBlbmRzIHdpdGggLnRlc3RuZyAoZm9yIGVmZmljaWVuY3kgb2Ygc2VhcmNoaW5nIG9ubHkpLgogIC0tPgpAQCAtMTExLDUgKzExMSw1IEBACiAgICAgICA8Y2xhc3NmaWxlc2V0IGRpcj0iJHtkZXBsLmJ1aWxkLmRpcn0iIGluY2x1ZGVzPSIqKi90ZXN0bmcvKi5jbGFzcyIvPgogICAgIDwvdGVzdG5nPgogICA8L3RhcmdldD4KLSAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2J1aWxkLnhtbAppbmRleCA3ODI2MjAwLi43NmRkYjViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgICAgICA8L2FudD4KICAgICAgICAgPGFudCBkaXI9ImVhciIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CiAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9lYXIiLz4KLSAgICAgICAgPC9hbnQ+ICAgICAgICAgICAgICAgIAorICAgICAgICA8L2FudD4KICAgICAgICAgPGFudCBkaXI9Impzcjg4IiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2pzcjg4Ii8+CiAgICAgICAgIDwvYW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9jb25maWcvY29tbW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvY29uZmlnL2NvbW1vbi54bWwKaW5kZXggM2NiYTRjMC4uMWE5ODdlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9jb25maWcvY29tbW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2NvbmZpZy9jb21tb24ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAtLT4KIAogPCEtLQotICAgIFRhcmdldHMgdG8gYmUgc2hhcmVkIGJ5IGFsbCB1bml0IHRlc3RzIAorICAgIFRhcmdldHMgdG8gYmUgc2hhcmVkIGJ5IGFsbCB1bml0IHRlc3RzCiAtLT4KIAogPCEtLSBjb25maWd1cmF0aW9uIC0tPgpAQCAtNDAsNyArNDAsNyBAQAogPHByb3BlcnR5IG5hbWU9ImN1c3RvbXRhc2tzLmRlc3QiIHZhbHVlPSIke3Rlc3RzUm9vdH0vdXRpbC9idWlsZC9jdXN0b21BbnRUYXNrcyIvPgogPHByb3BlcnR5IG5hbWU9ImN1c3RvbXRhc2tzLmphciIgdmFsdWU9IiR7Y3VzdG9tdGFza3MuZGVzdH0vY3VzdG9tQW50VGFza3MuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0ianVuaXQuamFyIiB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2RlcGxveW1lbnQvanVuaXQtNC4xMi5qYXIiIC8+Ci08cHJvcGVydHkgbmFtZT0iYW5ub3RhdGlvbi5yZXBvcnQuZGlyIiB2YWx1ZT0iJHt0ZXN0c1Jvb3R9L2Fubm90YXRpb24vcmVwb3J0Ii8+IAorPHByb3BlcnR5IG5hbWU9ImFubm90YXRpb24ucmVwb3J0LmRpciIgdmFsdWU9IiR7dGVzdHNSb290fS9hbm5vdGF0aW9uL3JlcG9ydCIvPgogPHByb3BlcnR5IG5hbWU9InRlc3REb21haW4iIHZhbHVlPSJkZXBsdGVzdC1kb21haW4iLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0U2VydmVyIiB2YWx1ZT0iZGVwbHRlc3Qtc2VydmVyIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdENsdXN0ZXIiIHZhbHVlPSJkZXBsdGVzdC1jbHVzdGVyIi8+CkBAIC03NywxMyArNzcsMTMgQEAKICAgICB1dGlsIGRpcmVjdG9yeSBmb3IgaXRzIG93biBidWlsZC54bWwgYW5kIHRoZSBzb3VyY2UgZmlsZXMuCiAtLT4KIAotICAgICAgICAKKwogPHRhcmdldCBuYW1lPSJpbml0IiBkZXBlbmRzPSJpbml0Lm9zLGluaXQudG9vbHMsc2V0QXNhZG1pbkFyZ3MiPgogICAgIDxnZXQgc3JjPSJodHRwczovL3JlcG8xLm1hdmVuLm9yZy9tYXZlbjIvanVuaXQvanVuaXQvNC4xMi9qdW5pdC00LjEyLmphciIgZGVzdD0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2RlcGxveW1lbnQvanVuaXQtNC4xMi5qYXIiIHVzZXRpbWVzdGFtcD0idHJ1ZSIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJyb290IiB2YWx1ZT0iJHtiYXNlZGlyfSIvPgogCiAgICAgPGF2YWlsYWJsZSBwcm9wZXJ0eT0iY2x1c3Rlci5leGlzdHMiIGZpbGU9IiR7czFhcy5ob21lfS9kb21haW5zLyR7dGVzdERvbWFpbn0iLz4KLSAgICAKKwogICAgIDxhdmFpbGFibGUgcHJvcGVydHk9IlNldHVwU3RhcnRlZCIgZmlsZT0iJHtidWlsZH0vc2V0dXBkb25lIi8+CiAKICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJFRSIgdmFsdWU9InRydWUiPgpAQCAtOTIsNyArOTIsNyBAQAogICAgICAgICAgICAgPGVxdWFscyBhcmcxPSIke2Vudi5ERVBMX1RBUkdFVH0iIGFyZzI9IkNMVVNURVIiLz4KICAgICAgICAgPC9vcj4KICAgICA8L2NvbmRpdGlvbj4KLSAgICAKKwogICAgIDxjb25kaXRpb24gcHJvcGVydHk9ImRvQ2x1c3RlciI+CiAgICAgICAgIDxlcXVhbHMgYXJnMT0iJHtlbnYuREVQTF9UQVJHRVR9IiBhcmcyPSJDTFVTVEVSIi8+CiAgICAgPC9jb25kaXRpb24+CkBAIC0xMDAsNyArMTAwLDcgQEAKICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJkb0luc3RhbmNlIj4KICAgICAgICAgPGVxdWFscyBhcmcxPSIke2Vudi5ERVBMX1RBUkdFVH0iIGFyZzI9IlNFUlZFUiIvPgogICAgIDwvY29uZGl0aW9uPgotICAgIAorCiAgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0iUEUiPgogICAgICAgICA8YW5kPgogICAgICAgICAgICAgPG5vdD4KQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgIDxwcm9wZXJ0eSBuYW1lPSJzMWFzLnNlY3VyZSIgdmFsdWU9ImZhbHNlIi8+CiAKICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJydW4uanNyODgiIHZhbHVlPSJmYWxzZSI+Ci0gICAgICAgIDxlcXVhbHMgYXJnMT0iJHtydW4uanNyODh9IiBhcmcyPSJmYWxzZSIgLz4gCisgICAgICAgIDxlcXVhbHMgYXJnMT0iJHtydW4uanNyODh9IiBhcmcyPSJmYWxzZSIgLz4KICAgICA8L2NvbmRpdGlvbj4KIAogICAgIDxjb25kaXRpb24gcHJvcGVydHk9Impzcjg4LnVyaSIgdmFsdWU9ImRlcGxveWVyOlN1bjpBcHBTZXJ2ZXI6OiR7YWRtaW4uaG9zdH06JHthZG1pbi5wb3J0fTpodHRwcyI+CkBAIC0xNDQsMTMgKzE0NCwxMyBAQAogCiAgICAgPCEtLQogICAgICAgICBTZWUgaWYgdGhlIGN1c3RvbSBhbnQgdGFza3MgamFyIGZpbGUgaXMgdXAtdG8tZGF0ZSBhcyBjb21wYXJlIHRvIHRoZSBzb3VyY2UgZmlsZXMuICBUaGUKLSAgICAgICAgcmVzdWx0aW5nIHByb3BlcnR5IHdpbGwgY29udHJvbCB3aGV0aGVyIHRoZSB0YXNrcyBhcmUgY29tcGlsZWQgYW5kIHRoZSBqYXIgZmlsZSBidWlsdCAKKyAgICAgICAgcmVzdWx0aW5nIHByb3BlcnR5IHdpbGwgY29udHJvbCB3aGV0aGVyIHRoZSB0YXNrcyBhcmUgY29tcGlsZWQgYW5kIHRoZSBqYXIgZmlsZSBidWlsdAogICAgICAgICBiZWNhdXNlIHRoZSBpbml0LmN1c3RvbXRhc2tzIHRhc2sgdXNlcyB1bmxlc3M9ImN1c3RvbXRhc2tzLnVwdG9kYXRlLiIKICAgICAtLT4KICAgICA8dXB0b2RhdGUgcHJvcGVydHk9ImN1c3RvbXRhc2tzLnVwdG9kYXRlIiB0YXJnZXRmaWxlPSIke2N1c3RvbXRhc2tzLmphcn0iPgogICAgICAgICA8c3JjZmlsZXMgZGlyPSIke2N1c3RvbXRhc2tzLnNyY30iIGluY2x1ZGVzPSIqLmphdmEiLz4KICAgICA8L3VwdG9kYXRlPgotICAgIAorCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJpbml0LmN1c3RvbXRhc2tzIi8+CiAgICAgPHRhc2tkZWYgbmFtZT0iamF2YVdpdGhSZXN1bHQiIGNsYXNzbmFtZT0iZGV2dGVzdHMuZGVwbG95bWVudC51dGlsLkphdmFXaXRoUmVzdWx0IiBjbGFzc3BhdGg9IiR7Y3VzdG9tdGFza3MuamFyfSIvPgogCkBAIC0zMTIsMTIgKzMxMiwxMiBAQAogPC90YXJnZXQ+CiAKIDwhLS0KLSAgICBUaGUgZm9sbG93aW5nIHRhcmdldCBjb21waWxlcyBhbGwgSmF2YSBmaWxlcyB0aGF0IGFyZSB1c2VkIGluIGN1c3RvbSBBbnQgdGFza3MgYW5kIHBsYWNlcyB0aGVtIGludG8gYSAKKyAgICBUaGUgZm9sbG93aW5nIHRhcmdldCBjb21waWxlcyBhbGwgSmF2YSBmaWxlcyB0aGF0IGFyZSB1c2VkIGluIGN1c3RvbSBBbnQgdGFza3MgYW5kIHBsYWNlcyB0aGVtIGludG8gYQogICAgIGphciBmaWxlLiAgU3Vic2VxdWVudCB0YXNrZGVmcyBjYW4gdGhlbiByZWZlciB0byB0aGUgamFyIGZpbGUuCi0gICAgCisKICAgICBOb3RlIHRoYXQgdGhlIGNvbXBpbGF0aW9uIGFuZCBjb25zdHJ1Y3Rpb24gb2YgdGhlIGphciBmaWxlIHdpbGwgb2NjdXIgb25seSBpZiB0aGUgamFyIGZpbGUgaXMgb2Jzb2xldGUKICAgICBjb21wYXJlZCB0byB0aGUgamF2YSBzb3VyY2VzLCB0aGFua3MgdG8gdGhlIHVwdG9kYXRlIHNldHRpbmcgb2YgY3VzdG9tdGFza3MudXB0b2RhdGUgaW4gdGhlIGluaXQgdGFyZ2V0LgotICAgIAorCiAgICAgTm90ZSBhbHNvIHRoYXQgd2UgdXNlIGEgc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5IHNvIHdlIGNhbiBjYXB0dXJlIG9ubHkgdGhlIGN1c3RvbSB0YXNrIC5jbGFzcyBmaWxlcyBpbnRvCiAgICAgdGhlIGphciBhbmQgbm90IGFsbCAuY2xhc3MgZmlsZXMgdW5kZXIgdGhlIHV0aWwgdHJlZS4KIC0tPgpAQCAtMzM0LDcgKzMzNCw3IEBACiAgICAgICAgICAgICA8cGF0aCBsb2NhdGlvbj0iJHtjdXN0b210YXNrcy5kZXN0fSIvPiA8IS0tIGZvciBjcm9zcy1kZXBlbmRlbmNpZXMsIGlmIGFueSwgYW1vbmcgY3VzdG9tIHRhc2sgY2xhc3NlcyBhbmQvb3IgaGVscGVycyAtLT4KICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgPC9qYXZhYz4KLSAgICA8amFyIAorICAgIDxqYXIKICAgICAgICAgZGVzdGZpbGU9IiR7Y3VzdG9tdGFza3MuamFyfSIKICAgICAgICAgYmFzZWRpcj0iJHtjdXN0b210YXNrcy5kZXN0fSIKICAgICAgICAgaW5jbHVkZXM9IioqLyouY2xhc3MiCkBAIC0zNTMsNyArMzUzLDcgQEAKIEFTX0FETUlOX01BU1RFUlBBU1NXT1JEPWNoYW5nZWl0CiAgIDwvZWNobz4KICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24ucnVuLmFzYWRtaW4iPgotICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgogICAgICAgICAgICB2YWx1ZT0iY3JlYXRlLWZpbGUtdXNlciAke0FTQURNSU4tQVJHUy1OT1BBU1NXRH0gLS1wYXNzd29yZGZpbGUgJHt1c2VyLnBhc3N3b3JkLmZpbGV9IC0tZWNobz10cnVlIC0tdGVyc2U9dHJ1ZSAke2FyZy5saXN0fSIvPgogICAgIDwvYW50Y2FsbD4KICAgPGRlbGV0ZSBmaWxlPSIke3VzZXIucGFzc3dvcmQuZmlsZX0iIGZhaWxvbmVycm9yPSJmYWxzZSIvPgpAQCAtMzYzLDcgKzM2Myw3IEBACiA8IS0tIHNldCBkb3R0ZWQgbmFtZSBlbmFibGUgdXNpbmcgYXNhZG1pbiAtLT4KIDx0YXJnZXQgbmFtZT0iY29tbW9uLmRvdHRlZC5lbmFibGUucmVmLmFzYWRtaW4iIGRlcGVuZHM9InNldEluc3RhbmNlTmFtZSI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24ucnVuLmFzYWRtaW4iPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICB2YWx1ZT0ic2V0IHNlcnZlcnMuc2VydmVyLiR7ZGVwbHRlc3QuaW5zdGFuY2UubmFtZX0uYXBwbGljYXRpb24tcmVmLiR7dGVzdE5hbWV9LmVuYWJsZWQ9dHJ1ZSIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRvdHRlZC5lbmFibGVBcHBPbkluc3RhbmNlIj4KQEAgLTQxMiw3ICs0MTIsNyBAQAogPCEtLSBAcGFyYW0gJHthcmcubGlzdH0gKHJlcXVpcmVkKSAtLT4KIDx0YXJnZXQgbmFtZT0iY29tbW9uLmRpc2FibGUuYXNhZG1pbiIgZGVwZW5kcz0ic2V0QXNhZG1pbkFyZ3MiPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLnJ1bi5hc2FkbWluIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgogICAgICAgICAgICAgICAgdmFsdWU9ImRpc2FibGUgJHtBU0FETUlOLUFSR1N9ICR7YXJnLmxpc3R9Ii8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGlzYWJsZUFwcE9uSW5zdGFuY2UiPgpAQCAtNDk0LDcgKzQ5NCw3IEBACiA8IS0tIEBwYXJhbSAke2FyZy5saXN0fSAocmVxdWlyZWQpIC0tPgogPHRhcmdldCBuYW1lPSJjb21tb24uZGVwbG95LmFzYWRtaW4iIGRlcGVuZHM9InNldEFzYWRtaW5BcmdzIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5ydW4uYXNhZG1pbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKICAgICAgICAgICAgICAgIHZhbHVlPSIke2RlcGxveX0gJHtBU0FETUlOLUFSR1N9ICR7YXJnLmxpc3R9Ii8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlQXBwUmVmIj4KQEAgLTUwNyw3ICs1MDcsNyBAQAogICAgICAgICA8cGFyYW0gbmFtZT0idGVzdE5hbWUiIHZhbHVlPSIke3Rlc3ROYW1lfSIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5ydW4uYXNhZG1pbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKICAgICAgICAgICAgICAgIHZhbHVlPSIke2RlcGxveX0gJHtBU0FETUlOLUFSR1N9IC0tZm9yY2U9dHJ1ZSAke2FyZy5saXN0fSIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZUFwcFJlZiI+CkBAIC01MTksNyArNTE5LDcgQEAKIDwhLS0gQHBhcmFtICR7YXJnLmxpc3R9IChyZXF1aXJlZCkgLS0+CiA8dGFyZ2V0IG5hbWU9ImNvbW1vbi5kZXBsb3kub3NnaS5hc2FkbWluIiBkZXBlbmRzPSJzZXRBc2FkbWluQXJncyI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24ucnVuLmFzYWRtaW4iPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICB2YWx1ZT0iJHtkZXBsb3l9ICR7QVNBRE1JTi1BUkdTfSAtLXR5cGUgb3NnaSAke2FyZy5saXN0fSIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZUFwcFJlZiI+CkBAIC01MzIsNyArNTMyLDcgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iJHt0ZXN0TmFtZX0iLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24ucnVuLmFzYWRtaW4iPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICB2YWx1ZT0iJHtkZXBsb3l9ICR7QVNBRE1JTi1BUkdTfSAtLXR5cGUgb3NnaSAtLWZvcmNlPXRydWUgJHthcmcubGlzdH0iLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGVBcHBSZWYiPgpAQCAtNTQ3LDcgKzU0Nyw3IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLnJ1bi5hc2FkbWluIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgogICAgICAgICAgICAgICAgdmFsdWU9IiR7dW5kZXBsb3l9ICR7QVNBRE1JTi1BUkdTfSAke2FyZy5saXN0fSIvPgogICAgIDwvYW50Y2FsbD4KIDwvdGFyZ2V0PgpAQCAtNTcxLDcgKzU3MSw3IEBACiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZUFwcFJlZiIgZGVwZW5kcz0iaW5pdCxzZXRFbmFibGVkIiBpZj0iZG9DbHVzdGVyIiB1bmxlc3M9ImRvUm9sbGluZ1VwZ3JhZGUiPgogICAgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0ZSBBcHBsaWNhdGlvbiBSZWZlcmVuY2UgZm9yICR7dGVzdE5hbWV9Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24ucnVuLmFzYWRtaW4iPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICB2YWx1ZT0iY3JlYXRlLWFwcGxpY2F0aW9uLXJlZiAtLXVzZXIgJHthZG1pbi51c2VyfSAtLXBhc3N3b3JkZmlsZSAke3Bhc3N3b3JkRmlsZX0gLS1wb3J0ICR7YWRtaW4ucG9ydH0gLS10YXJnZXQgJHt0ZXN0U2VydmVyfSAtLWVuYWJsZWQgJHtlbmFibGVkfSAke3Rlc3ROYW1lfSIvPgogICAgIDwvYW50Y2FsbD4KIDwvdGFyZ2V0PgpAQCAtNTc5LDcgKzU3OSw3IEBACiA8dGFyZ2V0IG5hbWU9ImRlbEFwcFJlZiIgZGVwZW5kcz0iaW5pdCIgaWY9ImRvQ2x1c3RlciI+CiAgICAgPGVjaG8gbWVzc2FnZT0iRGVsZXRlIEFwcGxpY2F0aW9uIFJlZmVyZW5jZSBmb3IgJHt0ZXN0TmFtZX0iLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5ydW4uYXNhZG1pbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKICAgICAgICAgICAgICAgIHZhbHVlPSJkZWxldGUtYXBwbGljYXRpb24tcmVmIC0tdXNlciAke2FkbWluLnVzZXJ9IC0tcGFzc3dvcmRmaWxlICR7cGFzc3dvcmRGaWxlfSAtLXBvcnQgJHthZG1pbi5wb3J0fSAtLXRhcmdldCAke3Rlc3RTZXJ2ZXJ9ICR7dGVzdE5hbWV9Ii8+CiAgICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+CkBAIC02MDIsNyArNjAyLDcgQEAKIAogPHRhcmdldCBuYW1lPSJkb3R0ZWQuZW5hYmxlQXBwT25JbnN0YW5jZSIgZGVwZW5kcz0iaW5pdCIgaWY9ImRvQ2x1c3RlciI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24ucnVuLmFzYWRtaW4iPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICB2YWx1ZT0ic2V0IHNlcnZlcnMuc2VydmVyLiR7dGVzdFNlcnZlcn0uYXBwbGljYXRpb24tcmVmLiR7dGVzdE5hbWV9LmVuYWJsZWQ9dHJ1ZSIvPgogICAgIDwvYW50Y2FsbD4KIDwvdGFyZ2V0PgpAQCAtNzk1LDcgKzc5NSw3IEBACiAKICAgICA8IS0tCiAgICAgICAgIER1ZSB0byBkaWZmZXJlbmNlcyBpbiBjb21tYW5kIGxpbmUgcGFyc2luZyBvbiBXaW5kb3dzIGFuZCBub24tV2luZG93cyBzeXN0ZW1zIHdlIG5lZWQKLSAgICAgICAgdG8gcGFzcyB0aGUgcG9zc2libHktZW1wdHkgYWRtaW4ucGFzc3dvcmQgZGlmZmVyZW50bHkuICAKKyAgICAgICAgdG8gcGFzcyB0aGUgcG9zc2libHktZW1wdHkgYWRtaW4ucGFzc3dvcmQgZGlmZmVyZW50bHkuCiAgICAgLS0+CiAgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0iYWRtaW4ucGFzc3dvcmQuYXJnIiB2YWx1ZT0iJnF1b3Q7JHthZG1pbi5wYXNzd29yZH0mcXVvdDsiIGVsc2U9IiR7YWRtaW4ucGFzc3dvcmR9Ij4KICAgICAgICAgPG9zIGZhbWlseT0id2luZG93cyIvPgpAQCAtODAzLDcgKzgwMyw3IEBACiAKICAgICA8ZWNobyBtZXNzYWdlPSJKU1I4OERlcGxveWVyICR7Y29tbWFuZH0gJHtqc3I4OC51cml9ICR7YWRtaW4udXNlcn0gJHthZG1pbi5wYXNzd29yZH0gICR7YXJnLmxpc3R9Ii8+CiAgICAgPGphdmFXaXRoUmVzdWx0Ci0gICAgICAgICAgICBmb3JrPSJ0cnVlIiAKKyAgICAgICAgICAgIGZvcms9InRydWUiCiAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCiAgICAgICAgICAgICBqdm09IiR7SkFWQX0iCiAgICAgICAgICAgICBjbGFzc25hbWU9ImRldnRlc3RzLmRlcGxveW1lbnQudXRpbC5KU1I4OERlcGxveWVyIgpAQCAtODk1LDggKzg5NSw4IEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJ0cmFuc2Zvcm0iIGRlcGVuZHM9ImluaXQiPgotICAgIDxzdHlsZSBpbj0iJHtyb290fS90ZXN0cy1yZXN1bHRzLnhtbCIgCi0gICAgICAgICAgIG91dD0iJHtyb290fS9yZXN1bHRzLmh0bWwiIGV4dGVuc2lvbj0iLmh0bWwiIAorICAgIDxzdHlsZSBpbj0iJHtyb290fS90ZXN0cy1yZXN1bHRzLnhtbCIKKyAgICAgICAgICAgb3V0PSIke3Jvb3R9L3Jlc3VsdHMuaHRtbCIgZXh0ZW5zaW9uPSIuaHRtbCIKICAgICAgICAgICAgc3R5bGU9IiR7dGVzdHNSb290fS9jb25maWcvY29udmVydC54c2wiIGRlc3RkaXI9Ii4iLz4KICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJoYXNBbm5vdGF0aW9uIj4KICAgICAgICAgPCEtLSBuZWVkIGEgYmV0dGVyIHdheSB0byBjaGVjayBpZiBhbm5vdGF0aW9uIGlzIGV4ZWN1dGVkIGZvciB0aGlzIHJ1biAtLT4KQEAgLTkwOCw3ICs5MDgsNyBAQAogICAgICAgICAgICA8L29yPgogICAgICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7YW5ub3RhdGlvbi5yZXBvcnQuZGlyfSIvPgogICAgICAgICA8L2FuZD4KLSAgICA8L2NvbmRpdGlvbj4gCisgICAgPC9jb25kaXRpb24+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJqdXRyYW5zZm9ybSIvPgogPC90YXJnZXQ+CiAKQEAgLTkzNCw4ICs5MzQsOCBAQAogICAgIDxkZWxldGUgZGlyPSIke2Fubm90YXRpb24ucmVwb3J0LmRpcn0iLz4KIDwvdGFyZ2V0PgogCi08IS0tIAotICAgIFRhcmdldHMgdG8gcHJvY2VzcyB0aGUgdGVzdCByZXN1bHRzIAorPCEtLQorICAgIFRhcmdldHMgdG8gcHJvY2VzcyB0aGUgdGVzdCByZXN1bHRzCiAtLT4KIDx0YXJnZXQgbmFtZT0icHJvY2Vzc1Jlc3VsdCI+CiAgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0idGVzdFBhc3NlZCI+CkBAIC05NTYsMTEgKzk1NiwxMSBAQAogICAgIDxjb25kaXRpb24gcHJvcGVydHk9InN0YXR1c1Byb3ZpZGVkIj4KICAgICAgICAgPG9yPgogICAgICAgICAgICAgPGVxdWFscyBhcmcxPSIke3Jlc3VsdH0iIGFyZzI9IjAiLz4KLSAgICAgICAgICAgIDxlcXVhbHMgYXJnMT0iJHtyZXN1bHR9IiBhcmcyPSItMSIvPgkJCQkKLSAgICAgICAgICAgIDxlcXVhbHMgYXJnMT0iJHtyZXN1bHR9IiBhcmcyPSIxIi8+CQkJCQorICAgICAgICAgICAgPGVxdWFscyBhcmcxPSIke3Jlc3VsdH0iIGFyZzI9Ii0xIi8+CisgICAgICAgICAgICA8ZXF1YWxzIGFyZzE9IiR7cmVzdWx0fSIgYXJnMj0iMSIvPgogICAgICAgICA8L29yPgogICAgIDwvY29uZGl0aW9uPgotICAgIDxkaXJuYW1lIHByb3BlcnR5PSJhbnRmaWxlLmRpciIgZmlsZT0iJHthbnQuZmlsZX0iLz4JCQorICAgIDxkaXJuYW1lIHByb3BlcnR5PSJhbnRmaWxlLmRpciIgZmlsZT0iJHthbnQuZmlsZX0iLz4KICAgICA8YmFzZW5hbWUgcHJvcGVydHk9ImN1cnJlbnQuZGlyIiBmaWxlPSIke2FudGZpbGUuZGlyfSIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZmFpbGVkIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RuYW1lIiB2YWx1ZT0iJHtjdXJyZW50LmRpcn0iLz4KQEAgLTk3NCw3ICs5NzQsNyBAQAogPC90YXJnZXQ+CiAKIDwhLS0KLSAgUGFyYW10ZXJzOiAKKyAgUGFyYW10ZXJzOgogICAgIHRlc3RuYW1lIC0gbmFtZSBvZiB0aGUgdGVzdAogICAgIHJlc3VsdCAtIG51bWVyaWMgdmFsdWUgb2YgdGhlIGV4aXQgc3RhdHVzIGZyb20gdGhlIGNsaWVudAogICAgIHN0YXR1cyAtIHR5cGljYWxseSBGQUlMRUQgb3IgVU5LTk9XTgpAQCAtMTAwNyw3ICsxMDA3LDcgQEAKIDx0YXJnZXQgbmFtZT0icGFzc2VkIiBpZj0idGVzdFBhc3NlZCI+CiAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCAke3Rlc3RuYW1lfSBQYXNzZWQiLz4KICAgICA8Y29uY2F0IGRlc3RmaWxlPSIke3Jvb3R9L3Rlc3RzLXJlc3VsdHMueG1sIiBhcHBlbmQ9InllcyI+Jmx0O3Jlc3VsdCBzdGF0dXM9IlBBU1NFRCIgbG9nPSIke2xvZ30iLz48L2NvbmNhdD4KLSAgICA8Y29uY2F0IGRlc3RmaWxlPSIke3Jvb3R9L3Rlc3RzLXJlc3VsdHMueG1sIiBhcHBlbmQ9InllcyI+Jmx0Oy90ZXN0PjwvY29uY2F0PgkKKyAgICA8Y29uY2F0IGRlc3RmaWxlPSIke3Jvb3R9L3Rlc3RzLXJlc3VsdHMueG1sIiBhcHBlbmQ9InllcyI+Jmx0Oy90ZXN0PjwvY29uY2F0PgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0idW5rbm93biIgdW5sZXNzPSJzdGF0dXNQcm92aWRlZCI+CkBAIC0xMDE4LDIyICsxMDE4LDIyIEBACiAKIDwhLS0gQHBhcmFtICR7ZGVzY3JpcHRpb259IChyZXF1aXJlZCkgLS0+CiA8dGFyZ2V0IG5hbWU9ImRlY2xhcmUtdGVzdCI+Ci0gICAgPGRpcm5hbWUgcHJvcGVydHk9ImFudGZpbGUuZGlyIiBmaWxlPSIke2FudC5maWxlfSIvPgkJCisgICAgPGRpcm5hbWUgcHJvcGVydHk9ImFudGZpbGUuZGlyIiBmaWxlPSIke2FudC5maWxlfSIvPgogICAgIDxiYXNlbmFtZSBwcm9wZXJ0eT0iY3VycmVudC5kaXIiIGZpbGU9IiR7YW50ZmlsZS5kaXJ9Ii8+CiAgICAgPGVjaG8gbWVzc2FnZT0iU3RhcnRpbmcgdGVzdCAke2N1cnJlbnQuZGlyfSAke2Rlc2NyaXB0aW9ufSIvPgogICAgIDxjb25jYXQgZGVzdGZpbGU9IiR7cm9vdH0vdGVzdHMtcmVzdWx0cy54bWwiIGFwcGVuZD0ieWVzIj4mbHQ7dGVzdCBuYW1lPSIke2N1cnJlbnQuZGlyfSIgZGVzY3JpcHRpb249IiR7ZGVzY3JpcHRpb259Ij48L2NvbmNhdD4KIDwvdGFyZ2V0PgogCi08IS0tIAotICAgIFRhcmdldHMgcHJpdmF0ZSB0byB0aGlzIHhtbCBmaWxlIG9ubHkgCis8IS0tCisgICAgVGFyZ2V0cyBwcml2YXRlIHRvIHRoaXMgeG1sIGZpbGUgb25seQogLS0+CiA8dGFyZ2V0IG5hbWU9InByZVRlc3RzUnVuIiBkZXBlbmRzPSJjbGVhbiI+Ci0gICAgPGRpcm5hbWUgcHJvcGVydHk9ImFudGZpbGUuZGlyIiBmaWxlPSIke2FudC5maWxlfSIvPgkJCisgICAgPGRpcm5hbWUgcHJvcGVydHk9ImFudGZpbGUuZGlyIiBmaWxlPSIke2FudC5maWxlfSIvPgogICAgIDxiYXNlbmFtZSBwcm9wZXJ0eT0iY3VycmVudC5kaXIiIGZpbGU9IiR7YW50ZmlsZS5kaXJ9Ii8+CiAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyBhbGwgJHtjdXJyZW50LmRpcn0gZGV2dGVzdHMiLz4KICAgICA8bWtkaXIgZGlyPSIke3Rlc3RzUm9vdH0vYnVpbGQvYXJjaGl2ZXMiLz4KICAgICA8ZGVsZXRlIGZpbGU9IiR7cm9vdH0vdGVzdHMtcmVzdWx0cy54bWwiLz4KLSAgICA8Y29uY2F0IGRlc3RmaWxlPSIke3Jvb3R9L3Rlc3RzLXJlc3VsdHMueG1sIiBhcHBlbmQ9InllcyI+Jmx0O3Rlc3RzPjwvY29uY2F0PgkJCisgICAgPGNvbmNhdCBkZXN0ZmlsZT0iJHtyb290fS90ZXN0cy1yZXN1bHRzLnhtbCIgYXBwZW5kPSJ5ZXMiPiZsdDt0ZXN0cz48L2NvbmNhdD4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InJlc3RhcnQuc2VydmVyIj4KQEAgLTEwNTQsNyArMTA1NCw3IEBACiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICAgICA8YXJnIGxpbmU9Imxpc3QtaW5zdGFuY2VzIC0tcG9ydCAke2FkbWluLnBvcnR9IC0tdXNlciAke2FkbWluLnVzZXJ9IC0tcGFzc3dvcmRmaWxlICR7cGFzc3dvcmRGaWxlfSIvPgogICAgIDwvZXhlYz4KLSAgICA8bWtkaXIgZGlyPSIke2J1aWxkfS9zZXR1cGRvbmUiLz4gICAgCisgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0vc2V0dXBkb25lIi8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJzZXR1cERvbWFpbiI+CkBAIC0xMTQ5LDcgKzExNDksNyBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iZGVsZXRlQ2x1c3RlciIgaWY9ImRvQ2x1c3RlciI+Ci0gICAgPCEtLSBzdG9wLWNsdXN0ZXIgZG9lcyBub3Qgd29yayBzbyB1c2Ugc3RvcC1pbnN0YW5jZSB0byBtYWtlIHN1cmUgCisgICAgPCEtLSBzdG9wLWNsdXN0ZXIgZG9lcyBub3Qgd29yayBzbyB1c2Ugc3RvcC1pbnN0YW5jZSB0byBtYWtlIHN1cmUKICAgICAgICAgIGluc3RhbmNlIGlzIHN0b3BwZWQgYmVmb3JlIGRlbGV0aW5nIGl0IC0tPgogICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcuLi4gYXNhZG1pbiBzdG9wLWluc3RhbmNlIi8+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CkBAIC0xMTk4LDcgKzExOTgsNyBAQAogICAgIDxjb3B5IHRvZGlyPSJzZXJ2ZXItbG9ncy8ke3Rlc3RTZXJ2ZXJ9L2xvZ3MiPgogICAgICAgIDxmaWxlc2V0IGRpcj0iJHt0ZXN0U2VydmVyLmRpcn0vbG9ncyIgaW5jbHVkZXM9IioubG9nICoubG9nLioiLz4KICAgICA8L2NvcHk+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjb3B5Q2x1c3RlckxvZyIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY29weUNsdXN0ZXJMb2ciLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZUluc3RhbmNlIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGVDbHVzdGVyIi8+CiAgICAgPGRlbGV0ZSBkaXI9IiR7czFhcy5ob21lfS9ub2RlYWdlbnRzIi8+CkBAIC0xMjEzLDcgKzEyMTMsNyBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0icG9zdFRlc3RzUnVuIj4KLSAgICA8Y29uY2F0IGRlc3RmaWxlPSIke3Jvb3R9L3Rlc3RzLXJlc3VsdHMueG1sIiBhcHBlbmQ9InllcyI+Jmx0Oy90ZXN0cz48L2NvbmNhdD4JCQorICAgIDxjb25jYXQgZGVzdGZpbGU9IiR7cm9vdH0vdGVzdHMtcmVzdWx0cy54bWwiIGFwcGVuZD0ieWVzIj4mbHQ7L3Rlc3RzPjwvY29uY2F0PgogICAgIDxlY2hvIG1lc3NhZ2U9IlByb2Nlc3NpbmcgdGVzdHMgcmVzdWx0cyIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0idHJhbnNmb3JtIi8+CiAgICAgPGxvYWRmaWxlIHNyY0ZpbGU9InJlc3VsdHMuaHRtbCIgcHJvcGVydHk9InJlc3VsdHMiLz4KQEAgLTEyNTIsMTQgKzEyNTIsMTQgQEAKICAgICA8cHJvcGVydHkgbmFtZT0iQVBQQ0xJRU5UIiB2YWx1ZT0iJHtzMWFzLmhvbWV9L2Jpbi9hcHBjbGllbnQuYmF0Ii8+CiA8L3RhcmdldD4KIAotPCEtLSAKLSAgICBUYXJnZXRzIHRvIGJlIGRlcHJlY2F0ZWQgCis8IS0tCisgICAgVGFyZ2V0cyB0byBiZSBkZXByZWNhdGVkCiAtLT4KIAogPHRhcmdldCBuYW1lPSJwcmVwYXJlLWpzcjg4IiA+CiAgICAgPGFudCBkaXI9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L3Rlc3RlciIgdGFyZ2V0PSJjb21waWxlIj4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0iLz4KLSAgICA8L2FudD4JCisgICAgPC9hbnQ+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJqc3I4OC1kZXBsb3kiIGRlcGVuZHM9InByZXBhcmUtanNyODgiID4KQEAgLTEyNzYsNyArMTI3Niw3IEBACiAgICAgICAgIDxhcmcgdmFsdWU9IiR7YWRtaW4udXNlcn0iLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHthZG1pbi5wYXNzd29yZH0iLz4KICAgICA8L2phdmE+Ci08L3RhcmdldD4gIAorPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0ibGlzdCI+CiAgICAgPGVjaG8gbWVzc2FnZT0iQWxsIEFWQUlMQUJMRSBtb2R1bGVzIi8+CkBAIC0xMzAxLDggKzEzMDEsOCBAQAogPCEtLQogICBPbiBXaW5kb3dzLCBhbnQgaGFuZ3Mgd2hlbiBpdCBydW5zIGFuIGFzYWRtaW4gY29tbWFuZCB0aGF0IHN0YXJ0cyBhIHByb2Nlc3MuCiAgIFRvIHdvcmsgYXJvdW5kIHRoYXQsIHRoaXMgdGFzayBkaXN0aW5ndWlzaGVzIGJldHdlZW4gV2luZG93cyBhbmQgbm9uLVdpbmRvd3MKLSAgc3lzdGVtcyBhbmQgdXNlcyBhIGN1c3RvbSBhbnQgdGFzayBmb3IgV2luZG93cy4gCi0gIAorICBzeXN0ZW1zIGFuZCB1c2VzIGEgY3VzdG9tIGFudCB0YXNrIGZvciBXaW5kb3dzLgorCiAgIEFueSB0ZXN0IHRoYXQgbmVlZHMgdG8gc3RhcnQgYSBwcm9jZXNzIHNob3VsZCBOT1QgdXNlICR7QVNBRE1JTn0gZGlyZWN0bHkKICAgYnV0IHNob3VsZCBjYWxsIHRoaXMgc3RhcnQtcHJvY2VzcyB0YXJnZXQgaW5zdGVhZC4gIFBhc3MgdGhlIGNvbW1hbmQgbGluZQogICB0byBiZSBydW4gYXMgPHBhcmFtIG5hbWU9ImxpbmUiIHZhbHVlPSIuLi4iLz4uCkBAIC0xMzIwLDcgKzEzMjAsNyBAQAogICAgICAgPGlzc2V0IHByb3BlcnR5PSJzdGFydC10YXJnZXQiLz4KICAgICA8L25vdD4KICAgPC9jb25kaXRpb24+Ci0gIAorCiAgIDwhLS0KICAgICBJbnZva2UgdGhlIHRhcmdldCBqdXN0IGNob3Nlbi4KICAgLS0+CkBAIC0xMzQ3LDcgKzEzNDcsNyBAQAogPC90YXJnZXQ+CiAKIDwhLS0KLSAgRm9yIG5vbi1XaW5kb3dzIHN5c3RlbXMsIGFudCB3b3JrcyBmaW5lIHdoZW4gaW52b2tpbmcgYXNhZG1pbiB0byBzdGFydCBhIAorICBGb3Igbm9uLVdpbmRvd3Mgc3lzdGVtcywgYW50IHdvcmtzIGZpbmUgd2hlbiBpbnZva2luZyBhc2FkbWluIHRvIHN0YXJ0IGEKICAgcHJvY2Vzcywgc28gZG8gaXQgdGhhdCB3YXkgZm9yIHRob3NlIHN5c3RlbXMuCiAtLT4KIDx0YXJnZXQgbmFtZT0ic3RhcnQtcHJvY2Vzcy1ub24td2luZG93cyI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Rlc2NyaXB0b3JfZnJlZV96b25lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGVzY3JpcHRvcl9mcmVlX3pvbmUvYnVpbGQueG1sCmluZGV4IDZkNjkyM2MuLjU2N2QyMTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGVzY3JpcHRvcl9mcmVlX3pvbmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGVzY3JpcHRvcl9mcmVlX3pvbmUvYnVpbGQueG1sCkBAIC0yMywxMSArMjMsMTEgQEAKIAogPHByb2plY3QgbmFtZT0iZWFyIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0JJmNvbW1vbkJ1aWxkOworICAgICZjb21tb25CdWlsZDsKIAotCTx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgotCQk8YW50IGRpcj0iZWFyIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2VhciIvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KKyAgICAgICAgPGFudCBkaXI9ImVhciIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9lYXIiLz4KKyAgICAgICAgPC9hbnQ+CisgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Rlc2NyaXB0b3JfZnJlZV96b25lL2Vhci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Rlc2NyaXB0b3JfZnJlZV96b25lL2Vhci9idWlsZC54bWwKaW5kZXggYjE4NGUxZC4uYjcxMzQxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGVzY3JpcHRvcl9mcmVlX3pvbmUvZWFyL2J1aWxkLnhtbApAQCAtMjMsMTcgKzIzLDE3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImVhciIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotCSZjb21tb25CdWlsZDsKKyAgICAmY29tbW9uQnVpbGQ7CiAKLQk8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KLQkJPGFudCBkaXI9Im5vX2FwcHhtbCIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9ub19hcHB4bWwiLz4KLQkJPC9hbnQ+Ci0JCTxhbnQgZGlyPSJkaXJfZGVwbG95IiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2Rpcl9kZXBsb3kiLz4KLQkJPC9hbnQ+Ci0JCTxhbnQgZGlyPSJub19hcHB4bWxfMiIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9ub19hcHB4bWxfMiIvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KKyAgICAgICAgPGFudCBkaXI9Im5vX2FwcHhtbCIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9ub19hcHB4bWwiLz4KKyAgICAgICAgPC9hbnQ+CisgICAgICAgIDxhbnQgZGlyPSJkaXJfZGVwbG95IiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2Rpcl9kZXBsb3kiLz4KKyAgICAgICAgPC9hbnQ+CisgICAgICAgIDxhbnQgZGlyPSJub19hcHB4bWxfMiIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9ub19hcHB4bWxfMiIvPgorICAgICAgICA8L2FudD4KKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGVzY3JpcHRvcl9mcmVlX3pvbmUvZWFyL2Rpcl9kZXBsb3kvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvZGlyX2RlcGxveS9idWlsZC54bWwKaW5kZXggOGViMGUxMi4uOTVkZThlMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvZGlyX2RlcGxveS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvZGlyX2RlcGxveS9idWlsZC54bWwKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb20vc3VuL3MxYXNkZXYvZGVwbG95bWVudC9ub2FwcHhtbC9lamIvU2Z1bC5jbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb20vc3VuL3MxYXNkZXYvZGVwbG95bWVudC9ub2FwcHhtbC9lamIvU2xlc3MuY2xhc3MiLz4KICAgICAgICAgPC9qYXI+Ci0gICAgICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkfS8ke3Rlc3ROYW1lfS9lamJfamFyIj4gCisgICAgICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkfS8ke3Rlc3ROYW1lfS9lamJfamFyIj4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZH0iIGluY2x1ZGVzPSJjb20vc3VuL3MxYXNkZXYvZGVwbG95bWVudC9ub2FwcHhtbC9lamIvKiouY2xhc3MiLz4KICAgICAgICAgPC9jb3B5PgogICAgICAgICA8Y29weSBmaWxlPSIuL2VqYi9NQU5JRkVTVC5NRiIgdG9kaXI9IiR7YnVpbGR9LyR7dGVzdE5hbWV9L2VqYl9qYXIvTUVUQS1JTkYiLz4KQEAgLTc5LDExICs3OSwxMSBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQiIGRlcGVuZHM9InByZXBhcmUsc2V0T3JiUG9ydDIiPgotICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iIAotICAgICAgICAgICAgICByZXN1bHRwcm9wZXJ0eT0icmVzdWx0IiAKLSAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIiAKKyAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9IgorICAgICAgICAgICAgICByZXN1bHRwcm9wZXJ0eT0icmVzdWx0IgorICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCiAgICAgICAgICAgICAgIG91dHB1dD0iJHtidWlsZH0vJHtsb2cuaWR9Lm91dHB1dC5sb2ciPgogICAgICAgICAgIDxhcmcgbGluZT0iLXRhcmdldHNlcnZlciAke2FwcGNsaWVudC50YXJnZXRzZXJ2ZXJzfSAtY2xpZW50ICR7YXBwY2xpZW50Lmphcn0iLz4KICAgICAgICAgPC9leGVjPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvZGlyX2RlcGxveS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Rlc2NyaXB0b3JfZnJlZV96b25lL2Vhci9kaXJfZGVwbG95L2NsaWVudC9DbGllbnQuamF2YQppbmRleCA1MjkzODY1Li4zNTMzYTIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Rlc2NyaXB0b3JfZnJlZV96b25lL2Vhci9kaXJfZGVwbG95L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Rlc2NyaXB0b3JfZnJlZV96b25lL2Vhci9kaXJfZGVwbG95L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykge30KIAogICAgIEBFSkIKQEAgLTQzLDIxICs0MywyMSBAQAogCiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oImludm9raW5nIHN0YXRlbGVzcyIpOwogICAgICAgICAgICAgc2xlc3MuaGVsbG8oKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIHBhc3MoKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcGFzcygpIHsKICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJQQVNTRUQ6IGRlc2NyaXB0b3JfZnJlZV96b25lL2Vhci9ub19hcHB4bWwiKTsKICAgICAgICAgU3lzdGVtLmV4aXQoMCk7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwcml2YXRlIHZvaWQgZmFpbCgpIHsKICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJGQUlMRUQ6IGRlc2NyaXB0b3JfZnJlZV96b25lL2Vhci9ub19hcHB4bWwiKTsKICAgICAgICAgU3lzdGVtLmV4aXQoLTEpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvbm9fYXBweG1sL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGVzY3JpcHRvcl9mcmVlX3pvbmUvZWFyL25vX2FwcHhtbC9idWlsZC54bWwKaW5kZXggNGJkNDkwMC4uOWQxMTQ1MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvbm9fYXBweG1sL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Rlc2NyaXB0b3JfZnJlZV96b25lL2Vhci9ub19hcHB4bWwvYnVpbGQueG1sCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGR9IgogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9ImNvbS9zdW4vczFhc2Rldi9kZXBsb3ltZW50L25vYXBweG1sL2VqYi8qKi5jbGFzcyIvPgogICAgICAgICA8L2phcj4KLSAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtwb3J0YWJsZS5lYXJ9Ij4gCisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7cG9ydGFibGUuZWFyfSI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGR9IiBpbmNsdWRlcz0idXRpbC5qYXIsIGVqYi5qYXIiLz4KICAgICAgICAgPC9qYXI+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIG1hbmlmZXN0PSJjbGllbnQvTUFOSUZFU1QuTUYiPgpAQCAtODUsNyArODUsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kuanNyODgiIGRlcGVuZHM9InByZXBhcmUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5kZXBsb3kuanNyODgiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0iJHtwb3J0YWJsZS5lYXJ9ICR7ZGVwbG95cGxhbi5qYXJ9Ii8+CkBAIC0xMjUsOSArMTI1LDkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50IiBkZXBlbmRzPSJwcmVwYXJlLHNldE9yYlBvcnQyIj4KLSAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9IiAKLSAgICAgICAgICAgICAgcmVzdWx0cHJvcGVydHk9InJlc3VsdCIgCi0gICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIgCisgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIKKyAgICAgICAgICAgICAgcmVzdWx0cHJvcGVydHk9InJlc3VsdCIKKyAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgogICAgICAgICAgICAgICBvdXRwdXQ9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIj4KICAgICAgICAgICA8YXJnIGxpbmU9Ii10YXJnZXRzZXJ2ZXIgJHthcHBjbGllbnQudGFyZ2V0c2VydmVyc30gLWNsaWVudCAke2FwcGNsaWVudC5qYXJ9Ii8+CiAgICAgICAgIDwvZXhlYz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGVzY3JpcHRvcl9mcmVlX3pvbmUvZWFyL25vX2FwcHhtbC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Rlc2NyaXB0b3JfZnJlZV96b25lL2Vhci9ub19hcHB4bWwvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDUyOTM4NjUuLjM1MzNhMjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGVzY3JpcHRvcl9mcmVlX3pvbmUvZWFyL25vX2FwcHhtbC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvbm9fYXBweG1sL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykge30KIAogICAgIEBFSkIKQEAgLTQzLDIxICs0MywyMSBAQAogCiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oImludm9raW5nIHN0YXRlbGVzcyIpOwogICAgICAgICAgICAgc2xlc3MuaGVsbG8oKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIHBhc3MoKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcGFzcygpIHsKICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJQQVNTRUQ6IGRlc2NyaXB0b3JfZnJlZV96b25lL2Vhci9ub19hcHB4bWwiKTsKICAgICAgICAgU3lzdGVtLmV4aXQoMCk7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwcml2YXRlIHZvaWQgZmFpbCgpIHsKICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJGQUlMRUQ6IGRlc2NyaXB0b3JfZnJlZV96b25lL2Vhci9ub19hcHB4bWwiKTsKICAgICAgICAgU3lzdGVtLmV4aXQoLTEpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvbm9fYXBweG1sXzIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvbm9fYXBweG1sXzIvYnVpbGQueG1sCmluZGV4IDhiMjI0ZmIuLmQyNTZhNjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGVzY3JpcHRvcl9mcmVlX3pvbmUvZWFyL25vX2FwcHhtbF8yL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Rlc2NyaXB0b3JfZnJlZV96b25lL2Vhci9ub19hcHB4bWxfMi9idWlsZC54bWwKQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb20vc3VuL3MxYXNkZXYvZGVwbG95bWVudC9ub2FwcHhtbC9lamIvU2Z1bC5jbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb20vc3VuL3MxYXNkZXYvZGVwbG95bWVudC9ub2FwcHhtbC9lamIvU2xlc3MuY2xhc3MiLz4KICAgICAgICAgPC9qYXI+Ci0gICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7cG9ydGFibGUuZWFyfSI+IAorICAgICAgICA8amFyIGRlc3RmaWxlPSIke3BvcnRhYmxlLmVhcn0iPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkfSIgaW5jbHVkZXM9ImxpYi91dGlsLmphciwgZWpiL2VqYi5qYXIsIHdlYi93ZWIud2FyLCBjbGllbnQvYXBwY2xpZW50LmphciIvPgogICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KQEAgLTk0LDcgKzk0LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95Lmpzcjg4IiBkZXBlbmRzPSJwcmVwYXJlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24uZGVwbG95Lmpzcjg4Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9IiR7cG9ydGFibGUuZWFyfSAke2RlcGxveXBsYW4uamFyfSIvPgpAQCAtMTM0LDkgKzEzNCw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCIgZGVwZW5kcz0icHJlcGFyZSxzZXRPcmJQb3J0MixzZXRIdHRwUG9ydDIiPgotICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iIAotICAgICAgICAgICAgICByZXN1bHRwcm9wZXJ0eT0icmVzdWx0IiAKLSAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIiAKKyAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9IgorICAgICAgICAgICAgICByZXN1bHRwcm9wZXJ0eT0icmVzdWx0IgorICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCiAgICAgICAgICAgICAgIG91dHB1dD0iJHtidWlsZH0vJHtsb2cuaWR9Lm91dHB1dC5sb2ciPgogICAgICAgICAgIDxhcmcgbGluZT0iLXRhcmdldHNlcnZlciAke2FwcGNsaWVudC50YXJnZXRzZXJ2ZXJzfSAtY2xpZW50ICR7dGVzdE5hbWV9Q2xpZW50LmphciBodHRwOi8vJHtodHRwLmhvc3R9OiR7ZGVwbHRlc3QucG9ydH0vd2ViIi8+CiAgICAgICAgIDwvZXhlYz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGVzY3JpcHRvcl9mcmVlX3pvbmUvZWFyL25vX2FwcHhtbF8yL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGVzY3JpcHRvcl9mcmVlX3pvbmUvZWFyL25vX2FwcHhtbF8yL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAxZjg3NWVhLi45ZWFkMjlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Rlc2NyaXB0b3JfZnJlZV96b25lL2Vhci9ub19hcHB4bWxfMi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvbm9fYXBweG1sXzIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNyw4ICsyNyw4IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykge30KIAogICAgIEBFSkIKQEAgLTU0LDIxICs1NCwyMSBAQAogICAgICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgICAgICBwYXNzKCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHBhc3MoKSB7CiAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiUEFTU0VEOiBkZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvbm9fYXBweG1sXzIiKTsKICAgICAgICAgU3lzdGVtLmV4aXQoMCk7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwcml2YXRlIHZvaWQgZmFpbCgpIHsKICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJGQUlMRUQ6IGRlc2NyaXB0b3JfZnJlZV96b25lL2Vhci9ub19hcHB4bWxfMiIpOwogICAgICAgICBTeXN0ZW0uZXhpdCgtMSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9idWlsZC54bWwKaW5kZXggOTdjY2YxNi4uOWY5MTkyNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2J1aWxkLnhtbApAQCAtMjMsOSArMjMsOSBAQAogCiA8cHJvamVjdCBuYW1lPSJkaXJkZXBsb3kiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLQkmY29tbW9uQnVpbGQ7Ci0gICAgICAgIAotCTx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiIGlmPSJQRSI+CisgICAgJmNvbW1vbkJ1aWxkOworCisgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCIgaWY9IlBFIj4KICAgICAgICAgICAgIDxhbnQgZGlyPSJlYXIiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgogICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2VhciIvPgogICAgICAgICAgICAgPC9hbnQ+CkBAIC00NCw2ICs0NCw2IEBACiAgICAgICAgICAgICA8YW50IGRpcj0id2Fyd2l0aHN1ZmZpeCIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CiAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vd2Fyd2l0aHN1ZmZpeCIvPgogICAgICAgICAgICAgPC9hbnQ+Ci0JPC90YXJnZXQ+CisgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2NsaWVudC9IZWxsb0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvY2xpZW50L0hlbGxvQ2xpZW50LmphdmEKaW5kZXggOTgyZTgxZi4uNWFjMzY1MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvY2xpZW50L0hlbGxvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvY2xpZW50L0hlbGxvQ2xpZW50LmphdmEKQEAgLTI4LDExICsyOCwxMSBAQAogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCi0JYm9vbGVhbiB0ZXN0UG9zaXRpdmUgPSAoQm9vbGVhbi52YWx1ZU9mKGFyZ3NbMF0pKS5ib29sZWFuVmFsdWUoKTsKLQlpZih0ZXN0UG9zaXRpdmUpCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBleHBlY3RzIHN1Y2Nlc3NmdWwgcmVzdWx0Iik7Ci0JZWxzZQotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3QgZXhwZWN0ZWQgdG8gZmFpbCIpOworICAgIGJvb2xlYW4gdGVzdFBvc2l0aXZlID0gKEJvb2xlYW4udmFsdWVPZihhcmdzWzBdKSkuYm9vbGVhblZhbHVlKCk7CisgICAgaWYodGVzdFBvc2l0aXZlKQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3QgZXhwZWN0cyBzdWNjZXNzZnVsIHJlc3VsdCIpOworICAgIGVsc2UKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0IGV4cGVjdGVkIHRvIGZhaWwiKTsKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwpAQCAtNzUsMjkgKzc1LDI5IEBACiAKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWx1cmUhICBDYXVnaHQgdW5hc2tlZCBmb3IgRXhjZXB0aW9uIik7Ci0JCSAgICBTeXN0ZW0uZXhpdCgtMSk7CisgICAgICAgICAgICBTeXN0ZW0uZXhpdCgtMSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKAogICAgICAgICAgICAgICAgICJDbGllbnQgaXMgbm93IHRyeWluZyB0byByZW1vdmUgdGhlIHNlc3Npb24gYmVhblxuIik7CiAgICAgICAgICAgICBoci5yZW1vdmUoKTsKICAgICAgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIG5lKSB7Ci0JICAgIGlmKHRlc3RQb3NpdGl2ZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBleGNlcHRpb24gd2hpbGUgaW5pdGlhbGl6aW5nIGNvbnRleHQgOiAiICsKLQkJCQkgICBuZS5nZXRNZXNzYWdlKCkgKyAiIFxuIik7Ci0JCVN5c3RlbS5leGl0KC0xKTsKLQkgICAgfSBlbHNlIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJSZWNkIGV4Y2VwdGlvbiBhcyBleHBlY3RlZCIpOwotCSAgICB9CisgICAgICAgIGlmKHRlc3RQb3NpdGl2ZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBleGNlcHRpb24gd2hpbGUgaW5pdGlhbGl6aW5nIGNvbnRleHQgOiAiICsKKyAgICAgICAgICAgICAgICAgICBuZS5nZXRNZXNzYWdlKCkgKyAiIFxuIik7CisgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNkIGV4Y2VwdGlvbiBhcyBleHBlY3RlZCIpOworICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiByZSkgewotCSAgICBpZih0ZXN0UG9zaXRpdmUpIHsKLQkJcmUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbiggIlNlc3Npb24gYmVhbnMgY291bGQgbm90IGJlIHJlbW92ZWQgYnkgdGhlIGNsaWVudC5cbiIpOwotCQlTeXN0ZW0uZXhpdCgtMSk7Ci0JICAgIH0gZWxzZSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiUmVjZCBleGNlcHRpb24gYXMgZXhwZWN0ZWQiKTsKLQkgICAgfQotCX0KKyAgICAgICAgaWYodGVzdFBvc2l0aXZlKSB7CisgICAgICAgIHJlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJTZXNzaW9uIGJlYW5zIGNvdWxkIG5vdCBiZSByZW1vdmVkIGJ5IHRoZSBjbGllbnQuXG4iKTsKKyAgICAgICAgU3lzdGVtLmV4aXQoLTEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2QgZXhjZXB0aW9uIGFzIGV4cGVjdGVkIik7CisgICAgICAgIH0KKyAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigKICAgICAgICAgICAgICJTZXNzaW9uIGJlYW4gd2FzIHN1Y2Nlc3NmdWxseSByZW1vdmVkIGJ5IHRoZSBjbGllbnQuXG4iKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCBkZTAzY2EzLi4xMmVlZTNlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgVGVzdENsaWVudCBjbGllbnQgPSBuZXcgVGVzdENsaWVudCgpOwogICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgU3RyaW5nIHVybCA9IGFyZ3NbMF07CkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgICAgICAgICAgbG9nKCJDYXVnaHQgRVhQRUNURUQgSU9FeGNlcHRpb246ICIgKyBleCk7CiAgICAgICAgICAgICAgICAgcGFzcygpOwogICAgICAgICAgICAgfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2Vhci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lYXIvYnVpbGQueG1sCmluZGV4IDI4NjYxMTQuLmU0NzJjZTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2Vhci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWFyL2J1aWxkLnhtbApAQCAtMjIsMjMgKzIyLDIzIEBACiBdPgogCiA8IS0tCi0gIFRlc3QgZGlyZWN0b3J5IGRlcGxveW1lbnQgZm9yIGVhciB3aXRoIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgc3VjaCAKKyAgVGVzdCBkaXJlY3RvcnkgZGVwbG95bWVudCBmb3IgZWFyIHdpdGggZGlyZWN0b3J5IHN0cnVjdHVyZSBzdWNoCiAgIGFzIGZvby9iYXJfd2FyCiAtLT4KLSAKKwogPHByb2plY3QgbmFtZT0iZGlyZWN0b3J5RGVwbG95LUVhciIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotIAkmY29tbW9uQnVpbGQ7CisgICAgICZjb21tb25CdWlsZDsKIAogICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9ImRpckRlcGxveUVhciIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0Um9vdCIgdmFsdWU9IiR7dGVzdE5hbWV9V2ViIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImVhci5idWlsZC5kaXIiIHZhbHVlPSIke2J1aWxkfS8ke3Rlc3ROYW1lfSIvPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJlamIuYnVpbGQuZGlyIiAKKyAgICA8cHJvcGVydHkgbmFtZT0iZWpiLmJ1aWxkLmRpciIKICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWFyLmJ1aWxkLmRpcn0vJHt0ZXN0TmFtZX1FamJfamFyIi8+Ci0gICAgPHByb3BlcnR5IG5hbWU9IndlYi5idWlsZC5kaXIiIAorICAgIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIuYnVpbGQuZGlyIgogICAgICAgICAgICAgICB2YWx1ZT0iJHtlYXIuYnVpbGQuZGlyfS8ke3Rlc3ROYW1lfVdlYl93YXIiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iY2xpZW50LmJ1aWxkLmRpciIgdmFsdWU9IiR7YnVpbGR9L2NsaWVudCIvPgotICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+CiAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0iIC8+CiAgICAgICAgPG1rZGlyIGRpcj0iJHtlYXIuYnVpbGQuZGlyfSIgLz4KQEAgLTY1LDExICs2NSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzcGF0aCByZWZpZD0iZ2Z2My5jbGFzc3BhdGgiLz4KICAgICAgICAgPC9qYXZhYz4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIgdG9kaXI9IiR7d2ViLmJ1aWxkLmRpcn0vV0VCLUlORiIvPgotICAgICAgICAgICAgPGNvcHkgZmlsZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIgCi0gICAgICAgICAgICAgICAgICB0b2Rpcj0iJHt3ZWIuYnVpbGQuZGlyfS9XRUItSU5GIiAKKyAgICAgICAgICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiCisgICAgICAgICAgICAgICAgICB0b2Rpcj0iJHt3ZWIuYnVpbGQuZGlyfS9XRUItSU5GIgogICAgICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgICAgICAgPGNvcHkgdG9kaXI9IiR7d2ViLmJ1aWxkLmRpcn0iPgogICAgICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJ3YXIiIGluY2x1ZGVzPSIqLmpzcCwgKi5odG1sIi8+CkBAIC03OCwxOCArNzgsMTggQEAKICAgICAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0id2FyIiBpbmNsdWRlcz0iKnByb3BlcnRpZXMiLz4KICAgICAgICAgICAgICA8L2NvcHk+CiAgICAgICAgICAgICAgPG1rZGlyIGRpcj0iJHtlamIuYnVpbGQuZGlyfS9NRVRBLUlORiIvPgotICAgICAgICAgICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiIAorICAgICAgICAgICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiCiAgICAgICAgICAgICAgICAgICAgdG9kaXI9IiR7ZWpiLmJ1aWxkLmRpcn0vTUVUQS1JTkYiLz4KLSAgICAgICAgICAgICA8Y29weSBmaWxlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIgCi0gICAgICAgICAgICAgICAgICAgdG9kaXI9IiR7ZWpiLmJ1aWxkLmRpcn0vTUVUQS1JTkYiIAorICAgICAgICAgICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIgorICAgICAgICAgICAgICAgICAgIHRvZGlyPSIke2VqYi5idWlsZC5kaXJ9L01FVEEtSU5GIgogICAgICAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICAgICAgIDxta2RpciBkaXI9IiR7ZWFyLmJ1aWxkLmRpcn0vTUVUQS1JTkYiLz4KIAogICAgICAgICAgICAgIDwhLS0gYXBwbGljYXRpb24ueG1sIGlzIG9wdGlvbmFsCi0gICAgICAgICAgICAgPGNvcHkgZmlsZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiIAorICAgICAgICAgICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIgogICAgICAgICAgICAgICAgICAgIHRvZGlyPSIke2Vhci5idWlsZC5kaXJ9L01FVEEtSU5GIi8+CiAgICAgICAgICAgICAgLS0+Ci0gICAgICAgICAgICAgPGNvcHkgZmlsZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIiAKKyAgICAgICAgICAgICA8Y29weSBmaWxlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiCiAgICAgICAgICAgICAgICAgICAgdG9kaXI9IiR7ZWFyLmJ1aWxkLmRpcn0vTUVUQS1JTkYiCiAgICAgICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgPC90YXJnZXQ+CkBAIC0xMTYsNyArMTE2LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9InJ1bi5wb3NpdGl2ZSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLnBvc2l0aXZlIiBkZXBlbmRzPSJzZXRIdHRwUG9ydCI+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1cmwiIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7ZGVwbHRlc3QucG9ydH0vJHtjb250ZXh0Um9vdH0iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQiPgpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nLmlkIiB2YWx1ZT0iJHtsb2cuaWR9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi5uZWdhdGl2ZSIgZGVwZW5kcz0ic2V0SHR0cFBvcnQiPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0idXJsIiB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2RlcGx0ZXN0LnBvcnR9LyR7Y29udGV4dFJvb3R9LyR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50Ij4KQEAgLTEzMiw3ICsxMzIsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZy5pZCIgdmFsdWU9IiR7bG9nLmlkfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQiIGRlcGVuZHM9ImluaXQiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0Q2xpZW50ICR7YXJnLmxpc3R9Ii8+CiAgICAgICAgIDxqYXZhV2l0aFJlc3VsdApAQCAtMTQ0LDcgKzE0NCw3IEBACiAgICAgICAgICAgICByZXN1bHRwcm9wZXJ0eT0icmVzdWx0Ij4KICAgICAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsSG9zdD0ke2h0dHAuaG9zdH0iLz4KICAgICAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydD0ke29yYi5wb3J0fSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgPGNsYXNzcGF0aD4KICAgICAgICAgICAgICAgICA8cGF0aCByZWZpZD0iZ2Z2My5jbGFzc3BhdGgiLz4KICAgICAgICAgICAgICAgICA8cGF0aCBsb2NhdGlvbj0iJHtjbGllbnQuYnVpbGQuZGlyfSIvPgpAQCAtMTUyLDEzICsxNTIsMTMgQEAKIAogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FyZy5saXN0fSIvPgogICAgICAgICA8L2phdmFXaXRoUmVzdWx0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InByb2Nlc3NSZXN1bHQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3VsdCIgdmFsdWU9IiR7cmVzdWx0fSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZyIgdmFsdWU9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc3NlbWJsZSIvPgogICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVjbGFyZS10ZXN0Ij4KQEAgLTE2Niw3ICsxNjYsNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95ZGlyLmFzYWRtaW4iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ucG9zaXRpdmUiPjxwYXJhbSBuYW1lPSJsb2cuaWQiIHZhbHVlPSIxIi8+PC9hbnRjYWxsPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlY2xhcmUtdGVzdCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGVzY3JpcHRpb24iIHZhbHVlPSJkaXJlY3RvcnlkZXBsb3kvZWFyIFRlc3QgYXNhZG1pbiByZWRlcGxveWRpciIvPgogICAgICAgICA8L2FudGNhbGw+CkBAIC0xODMsNSArMTgzLDUgQEAKICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGR9Ii8+CiAgICAgPC90YXJnZXQ+CiAKLSAgICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWFyL2VqYi9HcmVldGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lYXIvZWpiL0dyZWV0ZXIuamF2YQppbmRleCA5MDQ3ZTY0Li4zYWNlOGQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lYXIvZWpiL0dyZWV0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lYXIvZWpiL0dyZWV0ZXIuamF2YQpAQCAtMjYsMTIgKzI2LDEyIEBACiAgKiB0byBvYnRhaW4gcmVmZXJlbmNlcyB0byB0aGUgYmVhbidzIHJlbW90ZSBpbnRlcmZhY2UgKEdyZWV0ZXIsIGluIHRoaXMgY2FzZSkuCiAgKgogICovCi1wdWJsaWMgaW50ZXJmYWNlIEdyZWV0ZXIgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJPYmplY3QgeyAKK3B1YmxpYyBpbnRlcmZhY2UgR3JlZXRlciBleHRlbmRzIGpha2FydGEuZWpiLkVKQk9iamVjdCB7CiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhIGdyZWV0aW5nLgogICAgICAqIEByZXR1cm4gcmV0dXJucyBhIGdyZWV0aW5nIGFzIGEgc3RyaW5nLgogICAgICAqIEBleGNlcHRpb24gdGhyb3dzIGEgUmVtb3RlRXhjZXB0aW9uLgogICAgICAqCiAgICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRHcmVldGluZygpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAotfSAKKyAgICBwdWJsaWMgU3RyaW5nIGdldEdyZWV0aW5nKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2Vhci9lamIvR3JlZXRlckVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWFyL2VqYi9HcmVldGVyRUpCLmphdmEKaW5kZXggYjZiYjU2ZC4uMTMyNGFiZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWFyL2VqYi9HcmVldGVyRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWFyL2VqYi9HcmVldGVyRUpCLmphdmEKQEAgLTE2LDc1ICsxNiw3NSBAQAogCiBwYWNrYWdlIHNhbXBsZXMuZWpiLnN0YXRlbGVzcy5zaW1wbGUuZWpiOwogCi1pbXBvcnQgamF2YS51dGlsLio7IAotaW1wb3J0IGphdmEuaW8uKjsgCitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamF2YS5pby4qOwogCiAvKioKICAqIEEgc2ltcGxlIHN0YXRlbGVzcyBiZWFuIGZvciB0aGUgSGVsbG9Xb3JsZCBhcHBsaWNhdGlvbi4gVGhpcyBiZWFuIGltcGxlbWVudHMgb25lCiAgKiBidXNpbmVzcyBtZXRob2QgYXMgZGVjbGFyZWQgYnkgdGhlIHJlbW90ZSBpbnRlcmZhY2UuCiAgKi8KLXB1YmxpYyBjbGFzcyBHcmVldGVyRUpCIGltcGxlbWVudHMgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW4geyAKK3B1YmxpYyBjbGFzcyBHcmVldGVyRUpCIGltcGxlbWVudHMgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW4gewogCi0gICAgcHJpdmF0ZSAgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQgbV9jdHggPSBudWxsOyAKLSAgIAorICAgIHByaXZhdGUgIGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0IG1fY3R4ID0gbnVsbDsKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHNlc3Npb24gY29udGV4dC4gUmVxdWlyZWQgYnkgRUpCIHNwZWMuCiAgICAgICogQHBhcmFtIGN0eCBBIFNlc3Npb25Db250ZXh0IG9iamVjdC4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dCBjdHgpIHsgCi0gICAgICAgIG1fY3R4ID0gY3R4OyAKLSAgICB9IAorICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0IGN0eCkgeworICAgICAgICBtX2N0eCA9IGN0eDsKKyAgICB9CiAKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgYmVhbi4gUmVxdWlyZWQgYnkgRUpCIHNwZWMuCiAgICAgICogQGV4Y2VwdGlvbiB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb24sIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiB7IAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYkNyZWF0ZSgpIG9uIG9iaiAiICsgdGhpcyk7IAotICAgIH0gCisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlamJDcmVhdGUoKSBvbiBvYmogIiArIHRoaXMpOworICAgIH0KIAogICAgIC8qKgogICAgICAqIFJlbW92ZXMgdGhlIGJlYW4uIFJlcXVpcmVkIGJ5IEVKQiBzcGVjLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsgCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiUmVtb3ZlKCkgb24gb2JqICIgKyB0aGlzKTsgCi0gICAgfSAKKyAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiUmVtb3ZlKCkgb24gb2JqICIgKyB0aGlzKTsKKyAgICB9CiAKICAgICAvKioKICAgICAgKiBMb2FkcyB0aGUgc3RhdGUgb2YgdGhlIGJlYW4gZnJvbSBzZWNvbmRhcnkgc3RvcmFnZS4gUmVxdWlyZWQgYnkgRUpCIHNwZWMuCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7IAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYkFjdGl2YXRlKCkgb24gb2JqICIgKyB0aGlzKTsgCi0gICAgfSAKKyAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlamJBY3RpdmF0ZSgpIG9uIG9iaiAiICsgdGhpcyk7CisgICAgfQogCiAgICAgLyoqCiAgICAgICogU2VyaWFsaXplcyB0aGUgc3RhdGUgb2YgdGhlIGJlYW4gdG8gc2Vjb25kYXJ5IHN0b3JhZ2UuIFJlcXVpcmVkIGJ5IEVKQiBzcGVjLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsgCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiUGFzc2l2YXRlKCkgb24gb2JqICIgKyB0aGlzKTsgCi0gICAgfSAKKyAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiUGFzc2l2YXRlKCkgb24gb2JqICIgKyB0aGlzKTsKKyAgICB9CiAKICAgICAvKioKICAgICAgKiBSZXF1aXJlZCBieSBFSkIgc3BlYy4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBHcmVldGVyKCkgeyAKLSAgICB9IAorICAgIHB1YmxpYyB2b2lkIEdyZWV0ZXIoKSB7CisgICAgfQogCiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGEgZ3JlZXRpbmcsIGJhc2VkIG9uIHRoZSB0aW1lIG9mIHRoZSBkYXkuCiAgICAgICogQHJldHVybiByZXR1cm5zIGEgZ3JlZXRpbmcgYXMgYSBzdHJpbmcuCiAgICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRHcmVldGluZygpIHsgCi0gICAgICAgIFN0cmluZyBtZXNzYWdlID0gbnVsbDsgCi0gICAgICAgIENhbGVuZGFyIGNhbGVuZGFyID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKCk7IAotICAgICAgICBpbnQgY3VycmVudEhvdXIgPSBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpOyAKLSAgICAgICAgaWYoY3VycmVudEhvdXIgPCAxMikgbWVzc2FnZSA9ICJtb3JuaW5nIjsgCi0gICAgICAgIGVsc2UgeyAKLSAgICAgICAgICBpZiggKGN1cnJlbnRIb3VyID49IDEyKSAmJiAKLSAgICAgICAgICAgIChjYWxlbmRhci5nZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpIDwgMTgpKSBtZXNzYWdlID0gImFmdGVybm9vbiI7IAotICAgICAgICAgIGVsc2UgbWVzc2FnZSA9ICJldmVuaW5nIjsgCi0gICAgICAgIH0gCi0gICAgICAgIHJldHVybiBtZXNzYWdlOyAKLSAgICB9IAotfSAKKyAgICBwdWJsaWMgU3RyaW5nIGdldEdyZWV0aW5nKCkgeworICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IG51bGw7CisgICAgICAgIENhbGVuZGFyIGNhbGVuZGFyID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKCk7CisgICAgICAgIGludCBjdXJyZW50SG91ciA9IGNhbGVuZGFyLmdldChDYWxlbmRhci5IT1VSX09GX0RBWSk7CisgICAgICAgIGlmKGN1cnJlbnRIb3VyIDwgMTIpIG1lc3NhZ2UgPSAibW9ybmluZyI7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGlmKCAoY3VycmVudEhvdXIgPj0gMTIpICYmCisgICAgICAgICAgICAoY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZKSA8IDE4KSkgbWVzc2FnZSA9ICJhZnRlcm5vb24iOworICAgICAgICAgIGVsc2UgbWVzc2FnZSA9ICJldmVuaW5nIjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWVzc2FnZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lYXIvZWpiL0dyZWV0ZXJIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lYXIvZWpiL0dyZWV0ZXJIb21lLmphdmEKaW5kZXggMTJkMDIzYS4uYTk3MmJhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWFyL2VqYi9HcmVldGVySG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2Vhci9lamIvR3JlZXRlckhvbWUuamF2YQpAQCAtMjEsMTEgKzIxLDExIEBACiAgKiB0byBvYnRhaW4gcmVmZXJlbmNlcyB0byB0aGUgYmVhbidzIHJlbW90ZSBpbnRlcmZhY2UuCiAgKgogICovCi1wdWJsaWMgaW50ZXJmYWNlIEdyZWV0ZXJIb21lIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCSG9tZSB7IAorcHVibGljIGludGVyZmFjZSBHcmVldGVySG9tZSBleHRlbmRzIGpha2FydGEuZWpiLkVKQkhvbWUgewogICAgIC8qKgogICAgICAqIEdldHMgYSByZWZlcmVuY2UgdG8gdGhlIHJlbW90ZSBpbnRlcmZhY2UgdG8gdGhlIEdyZWV0ZXIgYmVhbi4KICAgICAgKiBAZXhjZXB0aW9uIHRocm93cyBDcmVhdGVFeGNlcHRpb24gYW5kIFJlbW90ZUV4Y2VwdGlvbi4KICAgICAgKgogICAgICAqLwotICAgIHB1YmxpYyBHcmVldGVyIGNyZWF0ZSgpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsgCi19IAorICAgIHB1YmxpYyBHcmVldGVyIGNyZWF0ZSgpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2Vhci93YXIvR3JlZXRlclNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2Vhci93YXIvR3JlZXRlclNlcnZsZXQuamF2YQppbmRleCAwMDM1ZjBlLi42ZGExYmRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lYXIvd2FyL0dyZWV0ZXJTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWFyL3dhci9HcmVldGVyU2VydmxldC5qYXZhCkBAIC0xNiwxMDQgKzE2LDEwNCBAQAogCiBwYWNrYWdlIHNhbXBsZXMuZWpiLnN0YXRlbGVzcy5zaW1wbGUuc2VydmxldDsKIAotaW1wb3J0IGphdmEuaW8uKjsgCi1pbXBvcnQgamF2YS51dGlsLio7IAotaW1wb3J0IGpha2FydGEuc2VydmxldC4qOyAKLWltcG9ydCBqYXZheC5uYW1pbmcuKjsgCi1pbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsgCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEudXRpbC4qOworaW1wb3J0IGpha2FydGEuc2VydmxldC4qOworaW1wb3J0IGphdmF4Lm5hbWluZy4qOworaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7CiBpbXBvcnQgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0OwotaW1wb3J0IGpha2FydGEuZWpiLio7IAoraW1wb3J0IGpha2FydGEuZWpiLio7CiAKLWltcG9ydCBzYW1wbGVzLmVqYi5zdGF0ZWxlc3Muc2ltcGxlLmVqYi4qOyAKK2ltcG9ydCBzYW1wbGVzLmVqYi5zdGF0ZWxlc3Muc2ltcGxlLmVqYi4qOwogCiAvKioKICAqIFRoaXMgc2VydmxldCBpcyByZXNwb25zaWJsZSBmb3IgdGhyb3dpbmcgdGhlIGh0bWwgcGFnZXMgZm9yIHRoZSBIZWxsb1dvcmxkIGFwcGxpY2F0aW9uLgogICovCi1wdWJsaWMgY2xhc3MgR3JlZXRlclNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7ICAKK3B1YmxpYyBjbGFzcyBHcmVldGVyU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgLyoqCiAgICAgKiBUaGUgZG9HZXQgbWV0aG9kIG9mIHRoZSBzZXJ2bGV0LiBIYW5kbGVzIGFsbCBodHRwIEdFVCByZXF1ZXN0LgogICAgICogUmVxdWlyZWQgYnkgdGhlIHNlcnZsZXQgc3BlY2lmaWNhdGlvbi4KICAgICAqIEBleGNlcHRpb24gdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gYW5kIElPRXhjZXB0aW9uLgogICAgICovCi0gICBwdWJsaWMgdm9pZCBkb0dldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgCi0gICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7IAorICAgcHVibGljIHZvaWQgZG9HZXQgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCisgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKLSAgICAgICAgamFrYXJ0YS5lamIuSGFuZGxlIGJlYW5IYW5kbGU7IAotICAgICAgICBHcmVldGVyIG15R3JlZXRlckJlYW47IAotICAgICAgICBHcmVldGVySG9tZSBteUdyZWV0ZXJIb21lOyAKKyAgICAgICAgamFrYXJ0YS5lamIuSGFuZGxlIGJlYW5IYW5kbGU7CisgICAgICAgIEdyZWV0ZXIgbXlHcmVldGVyQmVhbjsKKyAgICAgICAgR3JlZXRlckhvbWUgbXlHcmVldGVySG9tZTsKICAgICAgICAgR3JlZXRlciBteUdyZWV0ZXJSZW1vdGU7Ci0gCi0gICAgICAgIEluaXRpYWxDb250ZXh0IGluaXRDb250ZXh0ID0gbnVsbDsgCi0gICAgICAgIEhhc2h0YWJsZSBlbnYgPSBuZXcgamF2YS51dGlsLkhhc2h0YWJsZSgxKTsgCisKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaW5pdENvbnRleHQgPSBudWxsOworICAgICAgICBIYXNodGFibGUgZW52ID0gbmV3IGphdmEudXRpbC5IYXNodGFibGUoMSk7CiAgICAgICAgIFJlc291cmNlQnVuZGxlIHJiID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJMb2NhbFN0cmluZ3MiLCBMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuIityYi5nZXRTdHJpbmcoImdyZWV0aW5nX3NlcnZsZXQiKSsgIi4uLiIpOyAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG4iK3JiLmdldFN0cmluZygiZ3JlZXRpbmdfc2VydmxldCIpKyAiLi4uIik7CiAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJiLmdldFN0cmluZygicmV0cmlldmluZ19qbmRpIikpOyAKLSAgICAgICAgdHJ5IHsgCi0gICAgICAgICAgICBpbml0Q29udGV4dCA9IG5ldyBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQoKTsgCi0gICAgICAgIH0gIAotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgCi0gICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJiLmdldFN0cmluZygiZXhjZXB0aW9uIikrIjogIiArIGUudG9TdHJpbmcoKSk7IAotICAgICAgICAgIHJldHVybjsgCi0gICAgICAgIH0gCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyYi5nZXRTdHJpbmcoInJldHJpZXZpbmdfam5kaSIpKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGluaXRDb250ZXh0ID0gbmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyYi5nZXRTdHJpbmcoImV4Y2VwdGlvbiIpKyI6ICIgKyBlLnRvU3RyaW5nKCkpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAgIHRyeSB7IAotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJiLmdldFN0cmluZygibG9va2luZ191cCIpKTsgCi0gICAgICAgICAgICBTdHJpbmcgSk5ESU5hbWUgPSAiamF2YTpjb21wL2Vudi9lamIvZ3JlZXRlciI7IAotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJiLmdldFN0cmluZygibG9va2luZyIpKyI6ICIgKyBKTkRJTmFtZSk7IAotICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRDb250ZXh0Lmxvb2t1cChKTkRJTmFtZSk7IAorICAgICAgICB0cnkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJiLmdldFN0cmluZygibG9va2luZ191cCIpKTsKKyAgICAgICAgICAgIFN0cmluZyBKTkRJTmFtZSA9ICJqYXZhOmNvbXAvZW52L2VqYi9ncmVldGVyIjsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyYi5nZXRTdHJpbmcoImxvb2tpbmciKSsiOiAiICsgSk5ESU5hbWUpOworICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRDb250ZXh0Lmxvb2t1cChKTkRJTmFtZSk7CiAgICAgICAgICAgICBteUdyZWV0ZXJIb21lID0gKEdyZWV0ZXJIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyZWV0ZXJIb21lLmNsYXNzKTsKLSAgICAgICAgfSAgCi0gICAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlKSB7IAotICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyYi5nZXRTdHJpbmcoImdyZWV0ZXJfYmVhbiIpKyIgLSAiICsgIAotICAgICAgICAgICByYi5nZXRTdHJpbmcoImlzX3JlZ2lzdGVyZWQiKSsiPzogIiArIGUudG9TdHJpbmcoKSk7IAotICAgICAgICByZXR1cm47IAotICAgICAgICB9IAotICAgICAgICB0cnkgeyAKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyYi5nZXRTdHJpbmcoImNyZWF0aW5nIikpOyAKLSAgICAgICAgICAgIG15R3JlZXRlclJlbW90ZSA9IG15R3JlZXRlckhvbWUuY3JlYXRlKCk7ICAKLSAgICAgICAgfSAKLSAgICAgICAgY2F0Y2goQ3JlYXRlRXhjZXB0aW9uIGUpIHsgCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmIuZ2V0U3RyaW5nKCJjb3VsZF9ub3QiKSsiOiAiKyAgCi0gICAgICAgICAgICBlLnRvU3RyaW5nKCkpOyAKLSAgICAgICAgICAgIHJldHVybjsgCi0gICAgICAgIH0gIAorICAgICAgICB9CisgICAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJiLmdldFN0cmluZygiZ3JlZXRlcl9iZWFuIikrIiAtICIgKworICAgICAgICAgICByYi5nZXRTdHJpbmcoImlzX3JlZ2lzdGVyZWQiKSsiPzogIiArIGUudG9TdHJpbmcoKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJiLmdldFN0cmluZygiY3JlYXRpbmciKSk7CisgICAgICAgICAgICBteUdyZWV0ZXJSZW1vdGUgPSBteUdyZWV0ZXJIb21lLmNyZWF0ZSgpOworICAgICAgICB9CisgICAgICAgIGNhdGNoKENyZWF0ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmIuZ2V0U3RyaW5nKCJjb3VsZF9ub3QiKSsiOiAiKworICAgICAgICAgICAgZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyYi5nZXRTdHJpbmcoImdldHRpbmciKSk7IAotICAgICAgICBTdHJpbmcgdGhlTWVzc2FnZSA9IG15R3JlZXRlclJlbW90ZS5nZXRHcmVldGluZygpOyAgCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyYi5nZXRTdHJpbmcoImdvdCIpKyI6ICIgKyB0aGVNZXNzYWdlKTsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyYi5nZXRTdHJpbmcoImdldHRpbmciKSk7CisgICAgICAgIFN0cmluZyB0aGVNZXNzYWdlID0gbXlHcmVldGVyUmVtb3RlLmdldEdyZWV0aW5nKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyYi5nZXRTdHJpbmcoImdvdCIpKyI6ICIgKyB0aGVNZXNzYWdlKTsKIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmIuZ2V0U3RyaW5nKCJzdG9yaW5nIikpOyAKLSAgICAgICAgcmVxdWVzdC5zZXRBdHRyaWJ1dGUoIm1lc3NhZ2UiLCB0aGVNZXNzYWdlKTsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyYi5nZXRTdHJpbmcoInN0b3JpbmciKSk7CisgICAgICAgIHJlcXVlc3Quc2V0QXR0cmlidXRlKCJtZXNzYWdlIiwgdGhlTWVzc2FnZSk7CiAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJiLmdldFN0cmluZygiZGlzcGF0Y2hpbmciKSk7IAotICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7IAotICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciBkaXNwYXRjaGVyOyAKLSAgICAgICAgZGlzcGF0Y2hlciA9IGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0UmVxdWVzdERpc3BhdGNoZXIgCi0gICAgICAgICAoIi9HcmVldGVyVmlldy5qc3AiKTsgCi0gICAgICAgIGRpc3BhdGNoZXIuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7IAotICAgICAgICByZXR1cm47ICAKLSAgICB9ICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJiLmdldFN0cmluZygiZGlzcGF0Y2hpbmciKSk7CisgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgZGlzcGF0Y2hlcjsKKyAgICAgICAgZGlzcGF0Y2hlciA9IGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0UmVxdWVzdERpc3BhdGNoZXIKKyAgICAgICAgICgiL0dyZWV0ZXJWaWV3LmpzcCIpOworICAgICAgICBkaXNwYXRjaGVyLmluY2x1ZGUocmVxdWVzdCwgcmVzcG9uc2UpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAvKioKICAgICAqIFRoZSBkb1Bvc3QgbWV0aG9kIG9mIHRoZSBzZXJ2bGV0LiBIYW5kbGVzIGFsbCBodHRwIFBPU1QgcmVxdWVzdC4KICAgICAqIFJlcXVpcmVkIGJ5IHRoZSBzZXJ2bGV0IHNwZWNpZmljYXRpb24uCiAgICAgKiBAZXhjZXB0aW9uIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIGFuZCBJT0V4Y2VwdGlvbi4KICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGRvUG9zdCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgCi0gICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgCi0gICAgICAgIGRvR2V0KHJlcXVlc3QscmVzcG9uc2UpOyAKLSAgICB9IAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKKyAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworICAgICAgICBkb0dldChyZXF1ZXN0LHJlc3BvbnNlKTsKKyAgICB9CiAKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc2VydmxldCBpbmZvIGFzIGEgU3RyaW5nLgogICAgICogQHJldHVybiByZXR1cm5zIHRoZSBzZXJ2bGV0IGluZm8gYXMgYSBTdHJpbmcuCiAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlcnZsZXRJbmZvKCkgeyAKKyAgICBwdWJsaWMgU3RyaW5nIGdldFNlcnZsZXRJbmZvKCkgewogICAgICAgICBSZXNvdXJjZUJ1bmRsZSByYiA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgiTG9jYWxTdHJpbmdzIiwgTG9jYWxlLmdldERlZmF1bHQoKSk7Ci0gICAgICAgIHJldHVybiByYi5nZXRTdHJpbmcoImNhbGwiKSsiLiI7IAotICAgIH0gCi19IAorICAgICAgICByZXR1cm4gcmIuZ2V0U3RyaW5nKCJjYWxsIikrIi4iOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2Vhci93YXIvTG9jYWxTdHJpbmdzLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lYXIvd2FyL0xvY2FsU3RyaW5ncy5wcm9wZXJ0aWVzCmluZGV4IDg3MWZjZTYuLmEyOGExYTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2Vhci93YXIvTG9jYWxTdHJpbmdzLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWFyL3dhci9Mb2NhbFN0cmluZ3MucHJvcGVydGllcwpAQCAtMTksMTkgKzE5LDE5IEBACiBncmVldGVyX3RpdGxlPUdyZWV0ZXIKIGhlbGxvX3dvcmxkPUhlbGxvIFdvcmxkCiBnb29kPUdvb2QKLWVuam95X3lvdXI9RW5qb3kgeW91ciAKK2Vuam95X3lvdXI9RW5qb3kgeW91clx1MDAyMAogCiBncmVldGluZ19zZXJ2bGV0PUdyZWV0ZXJTZXJ2bGV0IGlzIGV4ZWN1dGluZwotcmV0cmlldmluZ19qbmRpPVJldHJpZXZpbmcgSk5ESSBpbml0aWFsIGNvbnRleHQgICAgICAgCi1leGNlcHRpb249RXhjZXB0aW9uIGNyZWF0aW5nIEluaXRpYWxDb250ZXh0ICAgICAgICAgIAotbG9va2luZ191cD1Mb29raW5nIHVwIGdyZWV0ZXIgYmVhbiBob21lIGludGVyZmFjZSAKK3JldHJpZXZpbmdfam5kaT1SZXRyaWV2aW5nIEpOREkgaW5pdGlhbCBjb250ZXh0ICAgICAgXHUwMDIwCitleGNlcHRpb249RXhjZXB0aW9uIGNyZWF0aW5nIEluaXRpYWxDb250ZXh0ICAgICAgICAgXHUwMDIwCitsb29raW5nX3VwPUxvb2tpbmcgdXAgZ3JlZXRlciBiZWFuIGhvbWUgaW50ZXJmYWNlXHUwMDIwCiBsb29raW5nPUxvb2tpbmcgdXAKLWdyZWV0ZXJfYmVhbj1HcmVldGVyIGJlYW4gaG9tZSBub3QgZm91bmQgICAKLWlzX3JlZ2lzdGVyZWQ9SXMgYmVhbiByZWdpc3RlcmVkIHdpdGggSk5ESSAgICAgICAgICAgICAKK2dyZWV0ZXJfYmVhbj1HcmVldGVyIGJlYW4gaG9tZSBub3QgZm91bmQgIFx1MDAyMAoraXNfcmVnaXN0ZXJlZD1JcyBiZWFuIHJlZ2lzdGVyZWQgd2l0aCBKTkRJICAgICAgICAgICAgXHUwMDIwCiBjcmVhdGluZz1DcmVhdGluZyB0aGUgZ3JlZXRlciBiZWFuCi1jb3VsZF9ub3Q9Q291bGQgbm90IGNyZWF0ZSB0aGUgZ3JlZXRlciBiZWFuIAorY291bGRfbm90PUNvdWxkIG5vdCBjcmVhdGUgdGhlIGdyZWV0ZXIgYmVhblx1MDAyMAogZ2V0dGluZz1HZXR0aW5nIHRoZSBtZXNzYWdlIGZyb20gdGhlIGdyZWV0ZXIgYmVhbgotZ290PUdvdCB0aGlzIG1lc3NhZ2UgZnJvbSBncmVldGVyIGJlYW4gCitnb3Q9R290IHRoaXMgbWVzc2FnZSBmcm9tIGdyZWV0ZXIgYmVhblx1MDAyMAogc3RvcmluZz1TdG9yaW5nIHRoZSBtZXNzYWdlIGluIHJlcXVlc3Qgb2JqZWN0Ci1kaXNwYXRjaGluZz1EaXNwYXRjaGluZyBKU1AgZm9yIG91dHB1dCAgIAorZGlzcGF0Y2hpbmc9RGlzcGF0Y2hpbmcgSlNQIGZvciBvdXRwdXQgIFx1MDAyMAogY2FsbD1DYWxsIGEgc2Vzc2lvbiBiZWFuIGZyb20gYSBzZXJ2bGV0IGFuZCBkZWxpdmVyIHJlc3VsdCB2aWEgYSBKU1AKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2VhcndpdGhzdWZmaXgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWFyd2l0aHN1ZmZpeC9idWlsZC54bWwKaW5kZXggMGQzMDRhOC4uNTAwYjg1NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWFyd2l0aHN1ZmZpeC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWFyd2l0aHN1ZmZpeC9idWlsZC54bWwKQEAgLTIyLDIzICsyMiwyMyBAQAogXT4KIAogPCEtLQotICBUZXN0IGRpcmVjdG9yeSBkZXBsb3ltZW50IGZvciBlYXIgd2l0aCBkaXJlY3Rvcnkgc3RydWN0dXJlIHN1Y2ggCisgIFRlc3QgZGlyZWN0b3J5IGRlcGxveW1lbnQgZm9yIGVhciB3aXRoIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgc3VjaAogICBhcyBmb28uZWFyL2Jhci53YXIKIC0tPgotIAorCiA8cHJvamVjdCBuYW1lPSJkaXJlY3RvcnlEZXBsb3ktd2l0aEVhclN1ZmZpeCIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotIAkmY29tbW9uQnVpbGQ7CisgICAgICZjb21tb25CdWlsZDsKIAogICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9ImRpckRlcGxveVdpdGhFYXJTdWZmaXgiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iY29udGV4dFJvb3QiIHZhbHVlPSIke3Rlc3ROYW1lfVdlYiIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJlYXIuYnVpbGQuZGlyIiB2YWx1ZT0iJHtidWlsZH0vJHt0ZXN0TmFtZX0uZWFyIi8+Ci0gICAgPHByb3BlcnR5IG5hbWU9ImVqYi5idWlsZC5kaXIiIAorICAgIDxwcm9wZXJ0eSBuYW1lPSJlamIuYnVpbGQuZGlyIgogICAgICAgICAgICAgICB2YWx1ZT0iJHtlYXIuYnVpbGQuZGlyfS8ke3Rlc3ROYW1lfUVqYi5qYXIiLz4KLSAgICA8cHJvcGVydHkgbmFtZT0id2ViLmJ1aWxkLmRpciIgCisgICAgPHByb3BlcnR5IG5hbWU9IndlYi5idWlsZC5kaXIiCiAgICAgICAgICAgICAgIHZhbHVlPSIke2Vhci5idWlsZC5kaXJ9LyR7dGVzdE5hbWV9V2ViLndhciIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGllbnQuYnVpbGQuZGlyIiB2YWx1ZT0iJHtidWlsZH0vY2xpZW50Ii8+Ci0gICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJwcmVwYXJlIiBkZXBlbmRzPSJpbml0Ij4KICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KICAgICAgICA8bWtkaXIgZGlyPSIke2Vhci5idWlsZC5kaXJ9IiAvPgpAQCAtNjYsMTEgKzY2LDExIEBACiAgICAgICAgIDwvamF2YWM+CiAKICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgICAgIDxjb3B5IGZpbGU9Ii4uL2Vhci9kZXNjcmlwdG9yL3dlYi54bWwiIHRvZGlyPSIke3dlYi5idWlsZC5kaXJ9L1dFQi1JTkYiLz4KLSAgICAgICAgICAgIDxjb3B5IGZpbGU9Ii4uL2Vhci9kZXNjcmlwdG9yL3N1bi13ZWIueG1sIiAKLSAgICAgICAgICAgICAgICAgIHRvZGlyPSIke3dlYi5idWlsZC5kaXJ9L1dFQi1JTkYiIAorICAgICAgICAgICAgPGNvcHkgZmlsZT0iLi4vZWFyL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwiCisgICAgICAgICAgICAgICAgICB0b2Rpcj0iJHt3ZWIuYnVpbGQuZGlyfS9XRUItSU5GIgogICAgICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgICAgICAgPGNvcHkgdG9kaXI9IiR7d2ViLmJ1aWxkLmRpcn0iPgogICAgICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuLi9lYXIvd2FyIiBpbmNsdWRlcz0iKi5qc3AsICouaHRtbCIvPgpAQCAtNzksMTggKzc5LDE4IEBACiAgICAgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4uL2Vhci93YXIiIGluY2x1ZGVzPSIqcHJvcGVydGllcyIvPgogICAgICAgICAgICAgIDwvY29weT4KICAgICAgICAgICAgICA8bWtkaXIgZGlyPSIke2VqYi5idWlsZC5kaXJ9L01FVEEtSU5GIi8+Ci0gICAgICAgICAgICAgPGNvcHkgZmlsZT0iLi4vZWFyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwiIAorICAgICAgICAgICAgIDxjb3B5IGZpbGU9Ii4uL2Vhci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIgogICAgICAgICAgICAgICAgICAgIHRvZGlyPSIke2VqYi5idWlsZC5kaXJ9L01FVEEtSU5GIi8+Ci0gICAgICAgICAgICAgPGNvcHkgZmlsZT0iLi4vZWFyL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIiAKLSAgICAgICAgICAgICAgICAgICB0b2Rpcj0iJHtlamIuYnVpbGQuZGlyfS9NRVRBLUlORiIgCisgICAgICAgICAgICAgPGNvcHkgZmlsZT0iLi4vZWFyL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIgorICAgICAgICAgICAgICAgICAgIHRvZGlyPSIke2VqYi5idWlsZC5kaXJ9L01FVEEtSU5GIgogICAgICAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICAgICAgIDxta2RpciBkaXI9IiR7ZWFyLmJ1aWxkLmRpcn0vTUVUQS1JTkYiLz4KIAogICAgICAgICAgICAgIDwhLS0gYXBwbGljYXRpb24ueG1sIGlzIG9wdGlvbmFsCi0gICAgICAgICAgICAgPGNvcHkgZmlsZT0iLi4vZWFyL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIiAKKyAgICAgICAgICAgICA8Y29weSBmaWxlPSIuLi9lYXIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiCiAgICAgICAgICAgICAgICAgICAgdG9kaXI9IiR7ZWFyLmJ1aWxkLmRpcn0vTUVUQS1JTkYiLz4KICAgICAgICAgICAgICAtLT4KLSAgICAgICAgICAgICA8Y29weSBmaWxlPSIuLi9lYXIvZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIiAKKyAgICAgICAgICAgICA8Y29weSBmaWxlPSIuLi9lYXIvZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIgogICAgICAgICAgICAgICAgICAgIHRvZGlyPSIke2Vhci5idWlsZC5kaXJ9L01FVEEtSU5GIgogICAgICAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTE3LDcgKzExNyw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJydW4ucG9zaXRpdmUiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi5wb3NpdGl2ZSIgZGVwZW5kcz0ic2V0SHR0cFBvcnQiPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0idXJsIiB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2RlcGx0ZXN0LnBvcnR9LyR7Y29udGV4dFJvb3R9Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50Ij4KQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZy5pZCIgdmFsdWU9IiR7bG9nLmlkfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4ubmVnYXRpdmUiIGRlcGVuZHM9InNldEh0dHBQb3J0Ij4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVybCIgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtkZXBsdGVzdC5wb3J0fS8ke2NvbnRleHRSb290fS8ke3Rlc3ROYW1lfSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudCI+CkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2cuaWQiIHZhbHVlPSIke2xvZy5pZH0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50IiBkZXBlbmRzPSJpbml0Ij4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdENsaWVudCAke2FyZy5saXN0fSIvPgogICAgICAgICA8amF2YVdpdGhSZXN1bHQKQEAgLTE0NSwyMSArMTQ1LDIxIEBACiAgICAgICAgICAgICByZXN1bHRwcm9wZXJ0eT0icmVzdWx0Ij4KICAgICAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsSG9zdD0ke2h0dHAuaG9zdH0iLz4KICAgICAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydD0ke29yYi5wb3J0fSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIDxjbGFzc3BhdGg+ICAgICAgICAgICAgICAgIAorCisgICAgICAgICAgICA8Y2xhc3NwYXRoPgogICAgICAgICAgICAgICAgIDxwYXRoIHJlZmlkPSJnZnYzLmNsYXNzcGF0aCIvPgogICAgICAgICAgICAgICAgIDxwYXRoIGxvY2F0aW9uPSIke2NsaWVudC5idWlsZC5kaXJ9Ii8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KIAogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FyZy5saXN0fSIvPgogICAgICAgICA8L2phdmFXaXRoUmVzdWx0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InByb2Nlc3NSZXN1bHQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3VsdCIgdmFsdWU9IiR7cmVzdWx0fSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZyIgdmFsdWU9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc3NlbWJsZSIvPgogICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVjbGFyZS10ZXN0Ij4KQEAgLTE2Nyw3ICsxNjcsNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95ZGlyLmFzYWRtaW4iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ucG9zaXRpdmUiPjxwYXJhbSBuYW1lPSJsb2cuaWQiIHZhbHVlPSIxIi8+PC9hbnRjYWxsPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlY2xhcmUtdGVzdCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGVzY3JpcHRpb24iIHZhbHVlPSJkaXJlY3RvcnlkZXBsb3kvZWFyV2l0aFN1ZmZpeCBUZXN0IGFzYWRtaW4gcmVkZXBsb3lkaXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgpAQCAtMTg0LDUgKzE4NCw1IEBACiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkfSIvPgogICAgIDwvdGFyZ2V0PgogCi0gICAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2VqYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lamIvYnVpbGQueG1sCmluZGV4IGQ4Y2Q1YzUuLmVmNDcyMTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2VqYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWpiL2J1aWxkLnhtbApAQCAtMjIsMTkgKzIyLDE5IEBACiBdPgogCiA8IS0tCi0gIFRlc3QgZGlyZWN0b3J5IGRlcGxveW1lbnQgZm9yIGVqYiB3aXRoIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgc3VjaCAKKyAgVGVzdCBkaXJlY3RvcnkgZGVwbG95bWVudCBmb3IgZWpiIHdpdGggZGlyZWN0b3J5IHN0cnVjdHVyZSBzdWNoCiAgIGFzIGJhcgogLS0+Ci0gCisKIDxwcm9qZWN0IG5hbWU9ImRpcmVjdG9yeURlcGxveS1FamIiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLSAJJmNvbW1vbkJ1aWxkOworICAgICAmY29tbW9uQnVpbGQ7CiAKICAgICA8cHJvcGVydHkgbmFtZT0idGVzdE5hbWUiIHZhbHVlPSJkaXJEZXBsb3lFamIiLz4KLSAgICA8cHJvcGVydHkgbmFtZT0iZWpiLmJ1aWxkLmRpciIgCisgICAgPHByb3BlcnR5IG5hbWU9ImVqYi5idWlsZC5kaXIiCiAgICAgICAgICAgICAgIHZhbHVlPSIke2J1aWxkfS8ke3Rlc3ROYW1lfSIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGllbnQuYnVpbGQuZGlyIiB2YWx1ZT0iJHtidWlsZH0vY2xpZW50Ii8+Ci0gICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJwcmVwYXJlIiBkZXBlbmRzPSJpbml0Ij4KICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KICAgICAgICA8bWtkaXIgZGlyPSIke2VqYi5idWlsZC5kaXJ9IiAvPgpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgICAgPC9qYXZhYz4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgICAgICA8bWtkaXIgZGlyPSIke2VqYi5idWlsZC5kaXJ9L01FVEEtSU5GIi8+CiAgICAgICAgICAgICAgPGNvcHkgZmlsZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIKQEAgLTc3LDcgKzc3LDcgQEAKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iLS1uYW1lICR7dGVzdE5hbWV9IC0tcmV0cmlldmUgJHtjbGllbnQuYnVpbGQuZGlyfSAke2J1aWxkfS8ke3Rlc3ROYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS5hc2FkbWluIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24udW5kZXBsb3kuYXNhZG1pbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCkBAIC05NCw3ICs5NCw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idGd0UG9ydCIgdmFsdWU9IiR7ZGVwbHRlc3Qub3JicG9ydH0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLm5lZ2F0aXZlIiBkZXBlbmRzPSJpbml0LHNldE9yYlBvcnQiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSJmYWxzZSIvPgpAQCAtMTExLDI3ICsxMTEsMjcgQEAKICAgICAgICAgICAgIGNsYXNzbmFtZT0ic3RhbmRhbG9uZWNsaWVudC5IZWxsb0NsaWVudCIKICAgICAgICAgICAgIG91dHB1dD0iJHtidWlsZH0vJHtsb2cuaWR9Lm91dHB1dC5sb2ciCiAgICAgICAgICAgICByZXN1bHRwcm9wZXJ0eT0icmVzdWx0Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsSG9zdD0ke2h0dHAuaG9zdH0iLz4KICAgICAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydD0ke3RndFBvcnR9Ii8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8Y2xhc3NwYXRoPgogICAgICAgICAgICAgICAgIDxwYXRoIHJlZmlkPSJnZnYzLmNsYXNzcGF0aCIvPgogICAgICAgICAgICAgICAgIDxwYXRoIGxvY2F0aW9uPSIke2VqYi5idWlsZC5kaXJ9Ii8+CiAgICAgICAgICAgICAgICAgPHBhdGggbG9jYXRpb249IiR7Y2xpZW50LmJ1aWxkLmRpcn0iLz4KICAgICAgICAgICAgICAgICA8cGF0aCBsb2NhdGlvbj0iJHtjbGllbnQuYnVpbGQuZGlyfS9kaXJEZXBsb3lFamJDbGllbnQuamFyIi8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxhcmcgbGluZT0iJHthcmcubGlzdH0iLz4KICAgICAgICAgPC9qYXZhV2l0aFJlc3VsdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwcm9jZXNzUmVzdWx0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXN1bHQiIHZhbHVlPSIke3Jlc3VsdH0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2ciIHZhbHVlPSIke2J1aWxkfS8ke2xvZy5pZH0ub3V0cHV0LmxvZyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNzZW1ibGUiLz4KICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlY2xhcmUtdGVzdCI+CkBAIC0xNjEsNSArMTYxLDUgQEAKICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGR9Ii8+CiAgICAgPC90YXJnZXQ+CiAKLSAgICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWpiL2VqYi9TdGF0ZWxlc3NoZWxsb0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWpiL2VqYi9TdGF0ZWxlc3NoZWxsb0VKQi5qYXZhCmluZGV4IGY0YjYxMWQuLmVjM2Y2OWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2VqYi9lamIvU3RhdGVsZXNzaGVsbG9FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lamIvZWpiL1N0YXRlbGVzc2hlbGxvRUpCLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMjYsMTEgKzI2LDExIEBACiAKIHB1YmxpYyBjbGFzcyBTdGF0ZWxlc3NoZWxsb0VKQiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjOwotICAgIAorCiAgICAgcHVibGljIFN0YXRlbGVzc2hlbGxvRUpCKCl7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGlzU3RhdGVsZXNzaGVsbG8oKSB0aHJvd3MgRUpCRXhjZXB0aW9uIHsKQEAgLTUyLDQ3ICs1Miw0NyBAQAogCiAKIAotCURvdWJsZSBkID0gbnVsbDsKLQlTdHJpbmcgbmFtZSA9IG51bGw7Ci0JU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoIlN0YXRlbGVzc2hlbGxvIEVKQiAtIGNoZWNrZWQgZW52aXJvbm1lbnQgcHJvcGVydGllcyBmb3IgdXNlciAiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbGVzc2hlbGxvRUpCIGlzIHNheWluZyBoZWxsbyB0byB1c2VyXG4iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIk5vdyBnb2luZyBmb3J3YXJkIHdpdGggcmVhZGluZyB0aGUgZW52aXJvbm1lbnQgcHJvcGVydGllc1xuIik7CisgICAgRG91YmxlIGQgPSBudWxsOworICAgIFN0cmluZyBuYW1lID0gbnVsbDsKKyAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigiU3RhdGVsZXNzaGVsbG8gRUpCIC0gY2hlY2tlZCBlbnZpcm9ubWVudCBwcm9wZXJ0aWVzIGZvciB1c2VyICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVsZXNzaGVsbG9FSkIgaXMgc2F5aW5nIGhlbGxvIHRvIHVzZXJcbiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm93IGdvaW5nIGZvcndhcmQgd2l0aCByZWFkaW5nIHRoZSBlbnZpcm9ubWVudCBwcm9wZXJ0aWVzXG4iKTsKIAotCXRyeSB7Ci0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIG5hbWUgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvdXNlciIpOwotCSAgICBidWZmZXIuYXBwZW5kKG5hbWUpOwotCSAgICBidWZmZXIuYXBwZW5kKCJcbmFuZCBmb3IgbnVtYmVyIHdoaWNoIGlzID0gIik7Ci0JICAgIGQgPSAoRG91YmxlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvbnVtYmVyIik7Ci0JICAgIGJ1ZmZlci5hcHBlbmQoZCk7Ci0JICAgIGJ1ZmZlci5hcHBlbmQoIlxuIik7Ci0JfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gZSkgeworICAgIHRyeSB7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIG5hbWUgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvdXNlciIpOworICAgICAgICBidWZmZXIuYXBwZW5kKG5hbWUpOworICAgICAgICBidWZmZXIuYXBwZW5kKCJcbmFuZCBmb3IgbnVtYmVyIHdoaWNoIGlzID0gIik7CisgICAgICAgIGQgPSAoRG91YmxlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvbnVtYmVyIik7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoZCk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoIlxuIik7CisgICAgfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCX0KLQlpZihkID09IG51bGwpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiV3JvbmcgdmFsdWUgZm9yIGVudmlyb25tZW50IHByb3BlcnR5Iik7Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbihidWZmZXIpOworICAgIH0KKyAgICBpZihkID09IG51bGwpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiV3JvbmcgdmFsdWUgZm9yIGVudmlyb25tZW50IHByb3BlcnR5Iik7CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbihidWZmZXIpOwogICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhidWZmZXIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlckRlZmluZWRFeGNlcHRpb24oKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBTdGF0ZWxlc3NoZWxsb0V4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhyb3dpbmcgYSBVc2VyIERlZmluZWQgRXhjZXB0aW9uIik7CiAgICAgICAgIHRocm93IG5ldyBTdGF0ZWxlc3NoZWxsb0V4Y2VwdGlvbigidGVzdCBleGNlcHRpb24iKTsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JCisKICAgICAgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lamIvZWpiL1N0YXRlbGVzc2hlbGxvRXhjZXB0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lamIvZWpiL1N0YXRlbGVzc2hlbGxvRXhjZXB0aW9uLmphdmEKaW5kZXggOTQzZWIzOS4uYjg4MjU3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWpiL2VqYi9TdGF0ZWxlc3NoZWxsb0V4Y2VwdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2VqYi9lamIvU3RhdGVsZXNzaGVsbG9FeGNlcHRpb24uamF2YQpAQCAtMTksOSArMTksOSBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIAogcHVibGljIGNsYXNzIFN0YXRlbGVzc2hlbGxvRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsKLSAgICAKKwogICAgIHB1YmxpYyBTdGF0ZWxlc3NoZWxsb0V4Y2VwdGlvbihTdHJpbmcgc3RyKSB7Ci0Jc3VwZXIoc3RyKTsKKyAgICBzdXBlcihzdHIpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWpid2l0aHN1ZmZpeC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lamJ3aXRoc3VmZml4L2J1aWxkLnhtbAppbmRleCAwOTMxNGIyLi45OTkyOTJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lamJ3aXRoc3VmZml4L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lamJ3aXRoc3VmZml4L2J1aWxkLnhtbApAQCAtMjIsMTkgKzIyLDE5IEBACiBdPgogCiA8IS0tCi0gIFRlc3QgZGlyZWN0b3J5IGRlcGxveW1lbnQgZm9yIGVqYiB3aXRoIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgc3VjaCAKKyAgVGVzdCBkaXJlY3RvcnkgZGVwbG95bWVudCBmb3IgZWpiIHdpdGggZGlyZWN0b3J5IHN0cnVjdHVyZSBzdWNoCiAgIGFzIGJhci5qYXIKIC0tPgotIAorCiA8cHJvamVjdCBuYW1lPSJkaXJlY3RvcnlEZXBsb3ktd2l0aEVqYlN1ZmZpeCIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotIAkmY29tbW9uQnVpbGQ7CisgICAgICZjb21tb25CdWlsZDsKIAogICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9ImRpckRlcGxveVdpdGhFamJTdWZmaXgiLz4KLSAgICA8cHJvcGVydHkgbmFtZT0iZWpiLmJ1aWxkLmRpciIgCisgICAgPHByb3BlcnR5IG5hbWU9ImVqYi5idWlsZC5kaXIiCiAgICAgICAgICAgICAgIHZhbHVlPSIke2J1aWxkfS8ke3Rlc3ROYW1lfS5qYXIiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iY2xpZW50LmJ1aWxkLmRpciIgdmFsdWU9IiR7YnVpbGR9L2NsaWVudCIvPgotICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+CiAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0iIC8+CiAgICAgICAgPG1rZGlyIGRpcj0iJHtlamIuYnVpbGQuZGlyfSIgLz4KQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgICA8L2phdmFjPgogCiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgICAgICAgPG1rZGlyIGRpcj0iJHtlamIuYnVpbGQuZGlyfS9NRVRBLUlORiIvPgogICAgICAgICAgICAgIDxjb3B5IGZpbGU9Ii4uL2VqYi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIgpAQCAtOTUsNyArOTUsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InRndFBvcnQiIHZhbHVlPSIke2RlcGx0ZXN0Lm9yYnBvcnR9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi5uZWdhdGl2ZSIgZGVwZW5kcz0iaW5pdCxzZXRPcmJQb3J0Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0iZmFsc2UiLz4KQEAgLTExMiwyNyArMTEyLDI3IEBACiAgICAgICAgICAgICBjbGFzc25hbWU9InN0YW5kYWxvbmVjbGllbnQuSGVsbG9DbGllbnQiCiAgICAgICAgICAgICBvdXRwdXQ9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIgogICAgICAgICAgICAgcmVzdWx0cHJvcGVydHk9InJlc3VsdCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbEhvc3Q9JHtodHRwLmhvc3R9Ii8+CiAgICAgICAgICAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHt0Z3RQb3J0fSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgPGNsYXNzcGF0aD4KICAgICAgICAgICAgICAgICA8cGF0aCByZWZpZD0iZ2Z2My5jbGFzc3BhdGgiLz4KICAgICAgICAgICAgICAgICA8cGF0aCBsb2NhdGlvbj0iJHtlamIuYnVpbGQuZGlyfSIvPgogICAgICAgICAgICAgICAgIDxwYXRoIGxvY2F0aW9uPSIke2NsaWVudC5idWlsZC5kaXJ9Ii8+CiAgICAgICAgICAgICAgICAgPHBhdGggbG9jYXRpb249IiR7Y2xpZW50LmJ1aWxkLmRpcn0vZGlyRGVwbG95V2l0aEVqYlN1ZmZpeENsaWVudC5qYXIiLz4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FyZy5saXN0fSIvPgogICAgICAgICA8L2phdmFXaXRoUmVzdWx0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InByb2Nlc3NSZXN1bHQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3VsdCIgdmFsdWU9IiR7cmVzdWx0fSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZyIgdmFsdWU9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPC90YXJnZXQ+CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc3NlbWJsZSIvPgogICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVjbGFyZS10ZXN0Ij4KQEAgLTE2Miw1ICsxNjIsNSBAQAogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZH0iLz4KICAgICA8L3RhcmdldD4KIAotICAgIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS93YXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvd2FyL2J1aWxkLnhtbAppbmRleCA1Y2VmMTBlLi4yZmVjYTY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS93YXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L3dhci9idWlsZC54bWwKQEAgLTIyLDIwICsyMiwyMCBAQAogXT4KIAogPCEtLQotICBUZXN0IGRpcmVjdG9yeSBkZXBsb3ltZW50IGZvciB3YXIgd2l0aCBkaXJlY3Rvcnkgc3RydWN0dXJlIHN1Y2ggCisgIFRlc3QgZGlyZWN0b3J5IGRlcGxveW1lbnQgZm9yIHdhciB3aXRoIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgc3VjaAogICBhcyBiYXIKIC0tPgotIAorCiA8cHJvamVjdCBuYW1lPSJkaXJlY3RvcnlEZXBsb3ktV2FyIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0gCSZjb21tb25CdWlsZDsKKyAgICAgJmNvbW1vbkJ1aWxkOwogCiAgICAgPHByb3BlcnR5IG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iZGlyRGVwbG95V2FyIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImNvbnRleHRSb290IiB2YWx1ZT0iZm9vIi8+Ci0gICAgPHByb3BlcnR5IG5hbWU9IndlYi5idWlsZC5kaXIiIAorICAgIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIuYnVpbGQuZGlyIgogICAgICAgICAgICAgICB2YWx1ZT0iJHtidWlsZH0vJHt0ZXN0TmFtZX0iLz4KICAgICA8cHJvcGVydHkgbmFtZT0iY2xpZW50LmJ1aWxkLmRpciIgdmFsdWU9IiR7YnVpbGR9L2NsaWVudCIvPgotICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+CiAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0iIC8+CiAgICAgICAgPG1rZGlyIGRpcj0iJHt3ZWIuYnVpbGQuZGlyfSIgLz4KQEAgLTU2LDExICs1NiwxMSBAQAogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgICAgPC9qYXZhYz4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIgdG9kaXI9IiR7d2ViLmJ1aWxkLmRpcn0vV0VCLUlORiIvPgotICAgICAgICAgICAgPGNvcHkgZmlsZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIgCi0gICAgICAgICAgICAgICAgICB0b2Rpcj0iJHt3ZWIuYnVpbGQuZGlyfS9XRUItSU5GIiAKKyAgICAgICAgICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiCisgICAgICAgICAgICAgICAgICB0b2Rpcj0iJHt3ZWIuYnVpbGQuZGlyfS9XRUItSU5GIgogICAgICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTc3LDcgKzc3LDcgQEAKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iLS1uYW1lICR7dGVzdE5hbWV9ICR7YnVpbGR9LyR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LmFzYWRtaW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi51bmRlcGxveS5hc2FkbWluIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKQEAgLTg2LDcgKzg2LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9InJ1bi5wb3NpdGl2ZSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLnBvc2l0aXZlIiBkZXBlbmRzPSJzZXRIdHRwUG9ydCI+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1cmwiIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7ZGVwbHRlc3QucG9ydH0vJHtjb250ZXh0Um9vdH0vc2VydmxldG9ubHkiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQiPgpAQCAtOTQsNyArOTQsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZy5pZCIgdmFsdWU9IiR7bG9nLmlkfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4ubmVnYXRpdmUiIGRlcGVuZHM9InNldEh0dHBQb3J0Ij4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVybCIgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtkZXBsdGVzdC5wb3J0fS8ke2NvbnRleHRSb290fS8ke3Rlc3ROYW1lfSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudCI+CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2cuaWQiIHZhbHVlPSIke2xvZy5pZH0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50IiBkZXBlbmRzPSJpbml0Ij4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdENsaWVudCAke2FyZy5saXN0fSIvPgogICAgICAgICA8amF2YVdpdGhSZXN1bHQKQEAgLTExNCwyMSArMTE0LDIxIEBACiAgICAgICAgICAgICByZXN1bHRwcm9wZXJ0eT0icmVzdWx0Ij4KICAgICAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsSG9zdD0ke2h0dHAuaG9zdH0iLz4KICAgICAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydD0ke29yYi5wb3J0fSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgPGNsYXNzcGF0aD4KICAgICAgICAgICAgICAgICA8cGF0aCByZWZpZD0iZ2Z2My5jbGFzc3BhdGgiLz4KICAgICAgICAgICAgICAgICA8cGF0aCBsb2NhdGlvbj0iJHtjbGllbnQuYnVpbGQuZGlyfSIvPgogICAgICAgICAgICAgPC9jbGFzc3BhdGg+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXJnLmxpc3R9Ii8+CiAgICAgICAgIDwvamF2YVdpdGhSZXN1bHQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icHJvY2Vzc1Jlc3VsdCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0IiB2YWx1ZT0iJHtyZXN1bHR9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nIiB2YWx1ZT0iJHtidWlsZH0vJHtsb2cuaWR9Lm91dHB1dC5sb2ciLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzc2VtYmxlIi8+CiAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgpAQCAtMTM2LDcgKzEzNiw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3lkaXIuYXNhZG1pbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi5wb3NpdGl2ZSI+PHBhcmFtIG5hbWU9ImxvZy5pZCIgdmFsdWU9IjEiLz48L2FudGNhbGw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVjbGFyZS10ZXN0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXNjcmlwdGlvbiIgdmFsdWU9ImRpcmVjdG9yeWRlcGxveS93YXIgVGVzdCBhc2FkbWluIHJlZGVwbG95ZGlyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KQEAgLTE1Myw1ICsxNTMsNSBAQAogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZH0iLz4KICAgICA8L3RhcmdldD4KIAotICAgIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS93YXIvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvd2FyL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBkOTMyMWVmLi42YWY2YjRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS93YXIvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L3dhci9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTE4LDggKzE4LDggQEAKIC0tPgogCiA8d2ViLWFwcCB2ZXJzaW9uPSIyLjQiCi0gICAgICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICAgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIgorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+CiAgIDxkaXNwbGF5LW5hbWU+c2VydmxldG9ubHk8L2Rpc3BsYXktbmFtZT4KICAgPHNlcnZsZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS93YXJ3aXRoc3VmZml4L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L3dhcndpdGhzdWZmaXgvYnVpbGQueG1sCmluZGV4IDlhYWQ3ZDQuLjY1MTc4MmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L3dhcndpdGhzdWZmaXgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L3dhcndpdGhzdWZmaXgvYnVpbGQueG1sCkBAIC0yMiwyMCArMjIsMjAgQEAKIF0+CiAKIDwhLS0KLSAgVGVzdCBkaXJlY3RvcnkgZGVwbG95bWVudCBmb3Igd2FyIHdpdGggZGlyZWN0b3J5IHN0cnVjdHVyZSBzdWNoIAorICBUZXN0IGRpcmVjdG9yeSBkZXBsb3ltZW50IGZvciB3YXIgd2l0aCBkaXJlY3Rvcnkgc3RydWN0dXJlIHN1Y2gKICAgYXMgYmFyLndhcgogLS0+Ci0gCisKIDxwcm9qZWN0IG5hbWU9ImRpcmVjdG9yeURlcGxveS13aXRoV2FyU3VmZml4IiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0gCSZjb21tb25CdWlsZDsKKyAgICAgJmNvbW1vbkJ1aWxkOwogCiAgICAgPHByb3BlcnR5IG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iZGlyRGVwbG95V2l0aFdhclN1ZmZpeCIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0Um9vdCIgdmFsdWU9ImZvbyIvPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIuYnVpbGQuZGlyIiAKKyAgICA8cHJvcGVydHkgbmFtZT0id2ViLmJ1aWxkLmRpciIKICAgICAgICAgICAgICAgdmFsdWU9IiR7YnVpbGR9LyR7dGVzdE5hbWV9LndhciIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGllbnQuYnVpbGQuZGlyIiB2YWx1ZT0iJHtidWlsZH0vY2xpZW50Ii8+Ci0gICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJwcmVwYXJlIiBkZXBlbmRzPSJpbml0Ij4KICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KICAgICAgICA8bWtkaXIgZGlyPSIke3dlYi5idWlsZC5kaXJ9IiAvPgpAQCAtNTYsMTEgKzU2LDExIEBACiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgICA8L2phdmFjPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICAgICAgPGNvcHkgZmlsZT0iLi4vd2FyL2Rlc2NyaXB0b3Ivd2ViLnhtbCIgdG9kaXI9IiR7d2ViLmJ1aWxkLmRpcn0vV0VCLUlORiIvPgotICAgICAgICAgICAgPGNvcHkgZmlsZT0iLi4vd2FyL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwiIAotICAgICAgICAgICAgICAgICAgdG9kaXI9IiR7d2ViLmJ1aWxkLmRpcn0vV0VCLUlORiIgCisgICAgICAgICAgICA8Y29weSBmaWxlPSIuLi93YXIvZGVzY3JpcHRvci9zdW4td2ViLnhtbCIKKyAgICAgICAgICAgICAgICAgIHRvZGlyPSIke3dlYi5idWlsZC5kaXJ9L1dFQi1JTkYiCiAgICAgICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICA8L3RhcmdldD4KIApAQCAtODYsNyArODYsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0icnVuLnBvc2l0aXZlIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4ucG9zaXRpdmUiIGRlcGVuZHM9InNldEh0dHBQb3J0Ij4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVybCIgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtkZXBsdGVzdC5wb3J0fS8ke2NvbnRleHRSb290fS9zZXJ2bGV0b25seSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudCI+CkBAIC05NCw3ICs5NCw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nLmlkIiB2YWx1ZT0iJHtsb2cuaWR9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi5uZWdhdGl2ZSIgZGVwZW5kcz0ic2V0SHR0cFBvcnQiPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0idXJsIiB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2RlcGx0ZXN0LnBvcnR9LyR7Y29udGV4dFJvb3R9LyR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50Ij4KQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZy5pZCIgdmFsdWU9IiR7bG9nLmlkfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQiIGRlcGVuZHM9ImluaXQiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0Q2xpZW50ICR7YXJnLmxpc3R9Ii8+CiAgICAgICAgIDxqYXZhV2l0aFJlc3VsdApAQCAtMTE0LDIxICsxMTQsMjEgQEAKICAgICAgICAgICAgIHJlc3VsdHByb3BlcnR5PSJyZXN1bHQiPgogICAgICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxIb3N0PSR7aHR0cC5ob3N0fSIvPgogICAgICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0PSR7b3JiLnBvcnR9Ii8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8Y2xhc3NwYXRoPgogICAgICAgICAgICAgICAgICA8cGF0aCByZWZpZD0iZ2Z2My5jbGFzc3BhdGgiLz4KICAgICAgICAgICAgICAgICA8cGF0aCBsb2NhdGlvbj0iJHtjbGllbnQuYnVpbGQuZGlyfSIvPgogICAgICAgICAgICAgPC9jbGFzc3BhdGg+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXJnLmxpc3R9Ii8+CiAgICAgICAgIDwvamF2YVdpdGhSZXN1bHQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icHJvY2Vzc1Jlc3VsdCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0IiB2YWx1ZT0iJHtyZXN1bHR9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nIiB2YWx1ZT0iJHtidWlsZH0vJHtsb2cuaWR9Lm91dHB1dC5sb2ciLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzc2VtYmxlIi8+CiAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgpAQCAtMTM2LDcgKzEzNiw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3lkaXIuYXNhZG1pbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi5wb3NpdGl2ZSI+PHBhcmFtIG5hbWU9ImxvZy5pZCIgdmFsdWU9IjEiLz48L2FudGNhbGw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVjbGFyZS10ZXN0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXNjcmlwdGlvbiIgdmFsdWU9ImRpcmVjdG9yeWRlcGxveS93YXJXaXRoU3VmZml4IFRlc3QgYXNhZG1pbiByZWRlcGxveWRpciIvPgogICAgICAgICA8L2FudGNhbGw+CkBAIC0xNTMsNSArMTUzLDUgQEAKICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGR9Ii8+CiAgICAgPC90YXJnZXQ+CiAKLSAgICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kb2wvb3ZlcnJpZGUvT3ZlcnJpZGVUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RvbC9vdmVycmlkZS9PdmVycmlkZVRlc3QuamF2YQppbmRleCAwNjZmN2YwLi5mODI3OTExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RvbC9vdmVycmlkZS9PdmVycmlkZVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RvbC9vdmVycmlkZS9PdmVycmlkZVRlc3QuamF2YQpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICBBcmNoaXZpc3QgYXJjaGl2aXN0ID0gbnVsbDsKIAogICAgICAgICBSZWFkYWJsZUFyY2hpdmUgYXJjaGl2ZSA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIGZpcnN0IHJlYWQvcGFyc2UgYW5kIHdyaXRlIG91dCB0aGUgb3JpZ2luYWwgdmFsaWQgYXJjaGl2ZQogICAgICAgICB0cnkgewogICAgICAgICAgICAgRmlsZSBhcmNoaXZlRmlsZSA9IG5ldyBGaWxlKGZpbGVOYW1lKTsKQEAgLTg2LDggKzg2LDggQEAKICAgICAgICAgICAgIGFyY2hpdmlzdC5zZXRBbm5vdGF0aW9uUHJvY2Vzc2luZ1JlcXVlc3RlZCh0cnVlKTsKICAgICAgICAgICAgIEpuZGlOYW1lRW52aXJvbm1lbnQgbmFtZUVudiA9IChKbmRpTmFtZUVudmlyb25tZW50KWFyY2hpdmlzdC5vcGVuKGFyY2hpdmVGaWxlKTsKIAotICAgICAgICAgICAgU2V0PFJlc291cmNlUmVmZXJlbmNlRGVzY3JpcHRvcj4gcmVzUmVmRGVzY3MgPSBuYW1lRW52LmdldFJlc291cmNlUmVmZXJlbmNlRGVzY3JpcHRvcnMoKTsgCi0gCisgICAgICAgICAgICBTZXQ8UmVzb3VyY2VSZWZlcmVuY2VEZXNjcmlwdG9yPiByZXNSZWZEZXNjcyA9IG5hbWVFbnYuZ2V0UmVzb3VyY2VSZWZlcmVuY2VEZXNjcmlwdG9ycygpOworCiAgICAgICAgICAgICBmb3IgKFJlc291cmNlUmVmZXJlbmNlRGVzY3JpcHRvciByZXNSZWYgOiByZXNSZWZEZXNjcykgewogICAgICAgICAgICAgICAgIFN0cmluZyByZWZOYW1lID0gcmVzUmVmLmdldE5hbWUoKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgam5kaU5hbWUgPSByZXNSZWYuZ2V0Sm5kaU5hbWUoKTsKQEAgLTk3LDExICs5NywxMSBAQAogICAgICAgICAgICAgICAgIFN0cmluZyBhdXRoID0gcmVzUmVmLmdldEF1dGhvcml6YXRpb24oKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgc2NvcGUgPSByZXNSZWYuZ2V0U2hhcmluZ1Njb3BlKCk7CiAgICAgICAgICAgICAgICAgbG9nICgiUmVzb3VyY2UgcmVmIFsiICsgcmVmTmFtZSArICJdIHdpdGggSk5ESSBuYW1lOiAiICsgam5kaU5hbWUgKyAiLCBkZXNjcmlwdGlvbjogIiArIGRlc2NyaXB0aW9uICsgIiwgYXV0aG9yaXphdGlvbjogIiArIGF1dGggKyAiLCBzaGFyaW5nIHNjb3BlOiAiICsgc2NvcGUgKyAiLCBtYXBwZWROYW1lOiAiICsgbWFwcGVkTmFtZSArICIsIGxvb2t1cE5hbWU6ICIgKyBsb29rdXBOYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAocmVmTmFtZS5lcXVhbHMoIm15RFM3IikgJiYgCisgICAgICAgICAgICAgICAgaWYgKHJlZk5hbWUuZXF1YWxzKCJteURTNyIpICYmCiAgICAgICAgICAgICAgICAgICAgICFkZXNjcmlwdGlvbi5lcXVhbHMoRVhQRUNURURfUkVTT1VSQ0VfREVTQ1JJUFRJT04pKSB7CiAgICAgICAgICAgICAgICAgICAgIGxvZygiRGVzY3JpcHRvciBkaWQgbm90IG92ZXJyaWRlIHRoZSBAUmVzb3VyY2UgZGVzY3JpcHRpb24gYXR0cmlidXRlIGFzIGV4cGVjdGVkIik7CiAgICAgICAgICAgICAgICAgICAgIGZhaWwoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlZk5hbWUuZXF1YWxzKCJteURTNWFuZDYiKSkgeyAKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlZk5hbWUuZXF1YWxzKCJteURTNWFuZDYiKSkgewogICAgICAgICAgICAgICAgICAgICBTZXQ8SW5qZWN0aW9uVGFyZ2V0PiB0YXJnZXRzID0gcmVzUmVmLmdldEluamVjdGlvblRhcmdldHMoKTsKICAgICAgICAgICAgICAgICAgICAgZm9yIChJbmplY3Rpb25UYXJnZXQgdGFyZ2V0IDogdGFyZ2V0cykgewogICAgICAgICAgICAgICAgICAgICAgICBsb2coIlRhcmdldCBjbGFzcyBuYW1lOiAiICsgdGFyZ2V0LmdldENsYXNzTmFtZSgpKTsKQEAgLTExMSwyOCArMTExLDI4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBsb2coIlRoZSBhZGRpdGlvbmFsIGluamVjdGlvbiB0YXJnZXQgc3BlY2lmaWVkIGluIHRoZSBkZXNjcmlwdG9yIGlzIG5vdCB1c2VkIGFzIGV4cGVjdGVkIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlZk5hbWUuZXF1YWxzKCJteURTOCIpICYmIAorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVmTmFtZS5lcXVhbHMoIm15RFM4IikgJiYKICAgICAgICAgICAgICAgICAgICAgIW1hcHBlZE5hbWUuZXF1YWxzKEVYUEVDVEVEX1JFU09VUkNFX0pORElfTkFNRSkpIHsKICAgICAgICAgICAgICAgICAgICAgbG9nKCJEZXNjcmlwdG9yIGRpZCBub3Qgb3ZlcnJpZGUgdGhlIEBSZXNvdXJjZSBtYXBwZWQtbmFtZSBhdHRyaWJ1dGUgYXMgZXhwZWN0ZWQiKTsKICAgICAgICAgICAgICAgICAgICAgZmFpbCgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVmTmFtZS5lcXVhbHMoIm15RFM3IikgJiYgCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZWZOYW1lLmVxdWFscygibXlEUzciKSAmJgogICAgICAgICAgICAgICAgICAgICAhc2NvcGUuZXF1YWxzKEVYUEVDVEVEX1JFU09VUkNFX1NIQVJJTkdfU0NPUEUpKSB7CiAgICAgICAgICAgICAgICAgICAgIGxvZygiRGVzY3JpcHRvciBkaWQgbm90IG92ZXJyaWRlIHRoZSBAUmVzb3VyY2Ugc2hhcmluZyBzY29wZSBhdHRyaWJ1dGUgYXMgZXhwZWN0ZWQiKTsKICAgICAgICAgICAgICAgICAgICAgZmFpbCgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVmTmFtZS5lcXVhbHMoIm15RFM3IikgJiYgCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZWZOYW1lLmVxdWFscygibXlEUzciKSAmJgogICAgICAgICAgICAgICAgICAgICAhYXV0aC5lcXVhbHMoRVhQRUNURURfUkVTT1VSQ0VfQVVUSE9SSVpBVElPTikpIHsKICAgICAgICAgICAgICAgICAgICAgbG9nKCJEZXNjcmlwdG9yIGRpZCBub3Qgb3ZlcnJpZGUgdGhlIEBSZXNvdXJjZSBhdXRob3JpemF0aW9uIGF0dHJpYnV0ZSBhcyBleHBlY3RlZCIpOwogICAgICAgICAgICAgICAgICAgICBmYWlsKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZWZOYW1lLmVxdWFscygibXlEUzciKSAmJiAKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlZk5hbWUuZXF1YWxzKCJteURTNyIpICYmCiAgICAgICAgICAgICAgICAgICAgICFsb29rdXBOYW1lLmVxdWFscyhFWFBFQ1RFRF9SRVNPVVJDRV9KTkRJX05BTUUpKSB7CiAgICAgICAgICAgICAgICAgICAgIGxvZygiRGVzY3JpcHRvciBkaWQgbm90IG92ZXJyaWRlIHRoZSBAUmVzb3VyY2UgbG9va3VwIG5hbWUgYXR0cmlidXRlIGFzIGV4cGVjdGVkIik7CiAgICAgICAgICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgbG9nKCJJbnB1dCBhcmNoaXZlOiBbIiArIGZpbGVOYW1lICsgCisgICAgICAgICAgICBsb2coIklucHV0IGFyY2hpdmU6IFsiICsgZmlsZU5hbWUgKwogICAgICAgICAgICAgICAgICJdIGlzIG5vdCB2YWxpZCIpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9IGZpbmFsbHkgewpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgICAgICAgICBTdGFydHVwQ29udGV4dCBzdGFydHVwQ29udGV4dCA9IG5ldyBTdGFydHVwQ29udGV4dCgpOwogCiAgICAgICAgICAgICBTZXJ2aWNlTG9jYXRvclV0aWxpdGllcy5hZGRPbmVDb25zdGFudChzZXJ2aWNlTG9jYXRvciwgc3RhcnR1cENvbnRleHQpOwotICAgICAgICAgICAgU2VydmljZUxvY2F0b3JVdGlsaXRpZXMuYWRkT25lQ29uc3RhbnQoc2VydmljZUxvY2F0b3IsIAorICAgICAgICAgICAgU2VydmljZUxvY2F0b3JVdGlsaXRpZXMuYWRkT25lQ29uc3RhbnQoc2VydmljZUxvY2F0b3IsCiAgICAgICAgICAgICAgICAgbmV3IFByb2Nlc3NFbnZpcm9ubWVudChQcm9jZXNzRW52aXJvbm1lbnQuUHJvY2Vzc1R5cGUuT3RoZXIpKTsKIAogICAgICAgICAgICAgR2xvYmFscy5zZXREZWZhdWx0SGFiaXRhdChzZXJ2aWNlTG9jYXRvcik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RvbC9vdmVycmlkZS9PdmVycmlkZVRlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RvbC9vdmVycmlkZS9PdmVycmlkZVRlc3RTZXJ2bGV0LmphdmEKaW5kZXggNTZiMzZiYS4uNGM4NDMyZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kb2wvb3ZlcnJpZGUvT3ZlcnJpZGVUZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZG9sL292ZXJyaWRlL092ZXJyaWRlVGVzdFNlcnZsZXQuamF2YQpAQCAtNzUsNiArNzUsNiBAQAogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDYW5ub3QgZ2V0IGxvZ2luIHRpbWVvdXQ6ICIgKyBleCk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RvbC92YWxpZGF0aW9uL1ZhbGlkYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kb2wvdmFsaWRhdGlvbi9WYWxpZGF0b3IuamF2YQppbmRleCA2YWFkYTEwLi5jNmNhYTNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RvbC92YWxpZGF0aW9uL1ZhbGlkYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZG9sL3ZhbGlkYXRpb24vVmFsaWRhdG9yLmphdmEKQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgQXJjaGl2aXN0IGFyY2hpdmlzdCA9IG51bGw7CiAKICAgICAgICAgUmVhZGFibGVBcmNoaXZlIGFyY2hpdmUgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICAvLyBmaXJzdCByZWFkL3BhcnNlIGFuZCB3cml0ZSBvdXQgdGhlIG9yaWdpbmFsIHZhbGlkIGFyY2hpdmUKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEZpbGUgYXJjaGl2ZUZpbGUgPSBuZXcgRmlsZShmaWxlTmFtZSk7CkBAIC03NCwxMSArNzQsMTEgQEAKICAgICAgICAgICAgIGFyY2hpdmlzdCA9IGFyY2hpdmlzdEZhY3RvcnkuZ2V0QXJjaGl2aXN0KGFyY2hpdmVUeXBlKTsKICAgICAgICAgICAgIGFyY2hpdmlzdC5zZXRIYW5kbGVSdW50aW1lSW5mbyh0cnVlKTsKICAgICAgICAgICAgIGFyY2hpdmlzdC5zZXRBcmNoaXZlVXJpKGZpbGVOYW1lKTsKLQkgICAgYXJjaGl2aXN0LnNldFhNTFZhbGlkYXRpb24odHJ1ZSk7Ci0JICAgIGFyY2hpdmlzdC5zZXRYTUxWYWxpZGF0aW9uTGV2ZWwoImZ1bGwiKTsKKyAgICAgICAgYXJjaGl2aXN0LnNldFhNTFZhbGlkYXRpb24odHJ1ZSk7CisgICAgICAgIGFyY2hpdmlzdC5zZXRYTUxWYWxpZGF0aW9uTGV2ZWwoImZ1bGwiKTsKICAgICAgICAgICAgIGFyY2hpdmlzdC5zZXRSdW50aW1lWE1MVmFsaWRhdGlvbih0cnVlKTsKICAgICAgICAgICAgIGFyY2hpdmlzdC5zZXRSdW50aW1lWE1MVmFsaWRhdGlvbkxldmVsKCJmdWxsIik7Ci0gICAgICAgICAgICBsb2coIlJlYWRpbmcvcGFyc2luZyB0aGUgb3JnaW5hbCBhcmNoaXZlOiAiICsgCisgICAgICAgICAgICBsb2coIlJlYWRpbmcvcGFyc2luZyB0aGUgb3JnaW5hbCBhcmNoaXZlOiAiICsKICAgICAgICAgICAgICAgICBmaWxlTmFtZSk7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBhcmNoaXZpc3Qub3BlbihhcmNoaXZlRmlsZSk7CkBAIC04OSwxMiArODksMTIgQEAKICAgICAgICAgICAgICAgICB0aHJvdyBleDsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9nKCJXcml0aW5nIG91dCB0aGUgYXJjaGl2ZSB0bzogIiArIAorICAgICAgICAgICAgbG9nKCJXcml0aW5nIG91dCB0aGUgYXJjaGl2ZSB0bzogIiArCiAgICAgICAgICAgICAgICAgb3V0cHV0RmlsZU5hbWUpOwogICAgICAgICAgICAgYXJjaGl2aXN0LndyaXRlKGFyY2hpdmUsIG91dHB1dEZpbGVOYW1lKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICBsb2coIklucHV0IGFyY2hpdmU6IFsiICsgZmlsZU5hbWUgKyAKKyAgICAgICAgICAgIGxvZygiSW5wdXQgYXJjaGl2ZTogWyIgKyBmaWxlTmFtZSArCiAgICAgICAgICAgICAgICAgIl0gaXMgbm90IHZhbGlkIik7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0gZmluYWxseSB7CkBAIC0xMTksMTIgKzExOSwxMiBAQAogICAgICAgICAgICAgYXJjaGl2aXN0LnNldFhNTFZhbGlkYXRpb25MZXZlbCgiZnVsbCIpOwogICAgICAgICAgICAgYXJjaGl2aXN0LnNldFJ1bnRpbWVYTUxWYWxpZGF0aW9uKHRydWUpOwogICAgICAgICAgICAgYXJjaGl2aXN0LnNldFJ1bnRpbWVYTUxWYWxpZGF0aW9uTGV2ZWwoImZ1bGwiKTsKLSAgICAgICAgICAgIGxvZygiUmVhZGluZy9wYXJzaW5nIHRoZSBvdXRwdXQgYXJjaGl2ZSIgKyAKKyAgICAgICAgICAgIGxvZygiUmVhZGluZy9wYXJzaW5nIHRoZSBvdXRwdXQgYXJjaGl2ZSIgKwogICAgICAgICAgICAgICAgIG91dHB1dEZpbGVOYW1lKTsKICAgICAgICAgICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvciA9IGFyY2hpdmlzdC5vcGVuKGFyY2hpdmVGaWxlKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICBsb2coIlRoZSBpbnB1dCBhcmNoaXZlOiBbIiArIG91dHB1dEZpbGVOYW1lICsgCisgICAgICAgICAgICBsb2coIlRoZSBpbnB1dCBhcmNoaXZlOiBbIiArIG91dHB1dEZpbGVOYW1lICsKICAgICAgICAgICAgICAgICAiXSBpcyBub3QgdmFsaWQiKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtMTM0LDcgKzEzNCw3IEBACiAgICAgICAgICAgICBhcmNoaXZpc3Qud3JpdGUoYXJjaGl2ZSwgb3V0cHV0RmlsZU5hbWUyKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICBsb2coIlRoZSBvdXRwdXQgYXJjaGl2ZTogWyIgKyBvdXRwdXRGaWxlTmFtZTIgKyAKKyAgICAgICAgICAgIGxvZygiVGhlIG91dHB1dCBhcmNoaXZlOiBbIiArIG91dHB1dEZpbGVOYW1lMiArCiAgICAgICAgICAgICAgICAgIl0gaXMgbm90IHZhbGlkIik7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0gZmluYWxseSB7CkBAIC0xOTMsNyArMTkzLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0RXh0ZW5zaW9uKFN0cmluZyBmaWxlKSB7Ci0gICAgICAgIFN0cmluZyBleHQgPSBmaWxlLnN1YnN0cmluZyhmaWxlLmxhc3RJbmRleE9mKCIuIikpOyAgICAgICAgCisgICAgICAgIFN0cmluZyBleHQgPSBmaWxlLnN1YnN0cmluZyhmaWxlLmxhc3RJbmRleE9mKCIuIikpOwogICAgICAgICByZXR1cm4gZXh0OwogICAgIH0KIApAQCAtMjA1LDcgKzIwNSw3IEBACiAgICAgICAgICAgICBTdGFydHVwQ29udGV4dCBzdGFydHVwQ29udGV4dCA9IG5ldyBTdGFydHVwQ29udGV4dCgpOwogCiAgICAgICAgICAgICBTZXJ2aWNlTG9jYXRvclV0aWxpdGllcy5hZGRPbmVDb25zdGFudChzZXJ2aWNlTG9jYXRvciwgc3RhcnR1cENvbnRleHQpOwotICAgICAgICAgICAgU2VydmljZUxvY2F0b3JVdGlsaXRpZXMuYWRkT25lQ29uc3RhbnQoc2VydmljZUxvY2F0b3IsIAorICAgICAgICAgICAgU2VydmljZUxvY2F0b3JVdGlsaXRpZXMuYWRkT25lQ29uc3RhbnQoc2VydmljZUxvY2F0b3IsCiAgICAgICAgICAgICAgICAgbmV3IFByb2Nlc3NFbnZpcm9ubWVudChQcm9jZXNzRW52aXJvbm1lbnQuUHJvY2Vzc1R5cGUuT3RoZXIpKTsKIAogICAgICAgICAgICAgR2xvYmFscy5zZXREZWZhdWx0SGFiaXRhdChzZXJ2aWNlTG9jYXRvcik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RvbC92YWxpZGF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZG9sL3ZhbGlkYXRpb24vYnVpbGQueG1sCmluZGV4IGFkZmFiODIuLjlhZjhlNTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZG9sL3ZhbGlkYXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZG9sL3ZhbGlkYXRpb24vYnVpbGQueG1sCkBAIC0yOCw0MiArMjgsNDIgQEAKICAgICA8cHJvcGVydHkgbmFtZT0idGVzdE5hbWUiIHZhbHVlPSJ2YWxpZGF0aW9uIi8+CiAKICAgICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsaWRhdGlvbi53YXIiIAorICAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsaWRhdGlvbi53YXIiCiAgICAgICAgICAgICB2YWx1ZT0iJHtidWlsZH0vd2FyLyR7dGVzdE5hbWV9LndhciIvPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsaWRhdGlvbi5qYXIiIAorICAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsaWRhdGlvbi5qYXIiCiAgICAgICAgICAgICB2YWx1ZT0iJHtidWlsZH0vZWpiLyR7dGVzdE5hbWV9LWVqYi5qYXIiLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24ucmFyIiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24ucmFyIgogICAgICAgICAgICAgdmFsdWU9IiR7YnVpbGR9L3Jhci8ke3Rlc3ROYW1lfS5yYXIiLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24uY2FyIiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24uY2FyIgogICAgICAgICAgICAgdmFsdWU9IiR7YnVpbGR9L2Nhci8ke3Rlc3ROYW1lfS1jbGllbnQuamFyIi8+CiAKLSAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24ud2xzUmFyIiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24ud2xzUmFyIgogICAgICAgICAgICAgdmFsdWU9IiR7YnVpbGR9L3dsc1Jhci8ke3Rlc3ROYW1lfS5yYXIiLz4KIAogICAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsaWRhdGlvbi5lYXIuZGlyIiB2YWx1ZT0iJHtidWlsZH0vZWFyIi8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2YWxpZGF0aW9uLmVhci53YXIiIAorICAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsaWRhdGlvbi5lYXIud2FyIgogICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7dmFsaWRhdGlvbi5lYXIuZGlyfS8ke3Rlc3ROYW1lfS53YXIiLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24uZWFyLmphciIgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2YWxpZGF0aW9uLmVhci5qYXIiCiAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHt2YWxpZGF0aW9uLmVhci5kaXJ9LyR7dGVzdE5hbWV9LWVqYi5qYXIiLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24uZWFyLnJhciIgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2YWxpZGF0aW9uLmVhci5yYXIiCiAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHt2YWxpZGF0aW9uLmVhci5kaXJ9LyR7dGVzdE5hbWV9LnJhciIvPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsaWRhdGlvbi5lYXIuY2FyIiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24uZWFyLmNhciIKICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke3ZhbGlkYXRpb24uZWFyLmRpcn0vJHt0ZXN0TmFtZX0tY2xpZW50LmphciIvPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsaWRhdGlvbi5lYXIiIAorICAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsaWRhdGlvbi5lYXIiCiAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHt2YWxpZGF0aW9uLmVhci5kaXJ9LyR7dGVzdE5hbWV9LmVhciIvPgogCiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2YWxpZGF0aW9uLndsc0Vhci5kaXIiIHZhbHVlPSIke2J1aWxkfS93bHNFYXIiLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24ud2xzRWFyLndsc1JhciIgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2YWxpZGF0aW9uLndsc0Vhci53bHNSYXIiCiAgICAgICAgICAgICAgICAgIHZhbHVlPSIke3ZhbGlkYXRpb24ud2xzRWFyLmRpcn0vJHt0ZXN0TmFtZX0ucmFyIi8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2YWxpZGF0aW9uLndsc0VhciIgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2YWxpZGF0aW9uLndsc0VhciIKICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke3ZhbGlkYXRpb24ud2xzRWFyLmRpcn0vJHt0ZXN0TmFtZX0uZWFyIi8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2YWxpZGF0aW9uLndsc0VhcjIuZGlyIiB2YWx1ZT0iJHtidWlsZH0vd2xzRWFyMiIvPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsaWRhdGlvbi53bHNFYXIyIiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24ud2xzRWFyMiIKICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke3ZhbGlkYXRpb24ud2xzRWFyMi5kaXJ9LyR7dGVzdE5hbWV9LmVhciIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsaWRhdGlvbi53bHNFYXIzLmRpciIgdmFsdWU9IiR7YnVpbGR9L3dsc0VhcjMiLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24ud2xzRWFyMy53bHNSYXIiIAorICAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsaWRhdGlvbi53bHNFYXIzLndsc1JhciIKICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7dmFsaWRhdGlvbi53bHNFYXIzLmRpcn0vJHt0ZXN0TmFtZX0ucmFyIi8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2YWxpZGF0aW9uLndsc0VhcjMiIAorICAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsaWRhdGlvbi53bHNFYXIzIgogICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7dmFsaWRhdGlvbi53bHNFYXIzLmRpcn0vJHt0ZXN0TmFtZX0uZWFyIi8+CiAKICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0vd2FyIi8+CkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHt2YWxpZGF0aW9uLmVhci53YXJ9IiBiYXNlZGlyPSIke2Jhc2VkaXJ9L2Vhci93YXIiLz4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHt2YWxpZGF0aW9uLmVhci5qYXJ9IiBiYXNlZGlyPSIke2Jhc2VkaXJ9L2Vhci9lamIiLz4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHt2YWxpZGF0aW9uLmVhci5yYXJ9IiBiYXNlZGlyPSIke2Jhc2VkaXJ9L2Vhci9yYXIiLz4KLSAgICAgICAgPGphciBkZXN0ZmlsZT0iJHt2YWxpZGF0aW9uLmVhci5jYXJ9IiBiYXNlZGlyPSIke2Jhc2VkaXJ9L2Vhci9jYXIiIAorICAgICAgICA8amFyIGRlc3RmaWxlPSIke3ZhbGlkYXRpb24uZWFyLmNhcn0iIGJhc2VkaXI9IiR7YmFzZWRpcn0vZWFyL2NhciIKICAgICAgICAgICAgICBtYW5pZmVzdD0iJHtiYXNlZGlyfS9lYXIvY2FyL01FVEEtSU5GL01BTklGRVNULk1GIi8+CiAgICAgICAgIDxjb3B5IHRvZGlyPSIke3ZhbGlkYXRpb24uZWFyLmRpcn0iPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Jhc2VkaXJ9L2VhciIgaW5jbHVkZXM9Ik1FVEEtSU5GLyoiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZG9sL3ZhbGlkYXRpb24vZWpiL01FVEEtSU5GL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kb2wvdmFsaWRhdGlvbi9lamIvTUVUQS1JTkYvZWpiLWphci54bWwKaW5kZXggN2ZjNDg4MC4uODIxZGU1NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kb2wvdmFsaWRhdGlvbi9lamIvTUVUQS1JTkYvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kb2wvdmFsaWRhdGlvbi9lamIvTUVUQS1JTkYvZWpiLWphci54bWwKQEAgLTM3LDEzICszNywxMyBAQAogICAgICAgPGVudi1lbnRyeT4KICAgICAgICAgPGRlc2NyaXB0aW9uPmJlYXMgZW52IGVudHJ5cjwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxlbnYtZW50cnktbmFtZT5CRUFTPC9lbnYtZW50cnktbmFtZT4KLQk8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLkRvdWJsZSA8L2Vudi1lbnRyeS10eXBlPgotCTxlbnYtZW50cnktdmFsdWU+MTAwLjA8L2Vudi1lbnRyeS12YWx1ZT4KKyAgICA8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLkRvdWJsZSA8L2Vudi1lbnRyeS10eXBlPgorICAgIDxlbnYtZW50cnktdmFsdWU+MTAwLjA8L2Vudi1lbnRyeS12YWx1ZT4KICAgICAgIDwvZW52LWVudHJ5PgogICAgICAgPGVudi1lbnRyeT4KICAgICAgICAgPGVudi1lbnRyeS1uYW1lPk1TRlQ8L2Vudi1lbnRyeS1uYW1lPgotCTxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuRG91YmxlIDwvZW52LWVudHJ5LXR5cGU+Ci0JPGVudi1lbnRyeS12YWx1ZT4xNTAuMDwvZW52LWVudHJ5LXZhbHVlPgorICAgIDxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuRG91YmxlIDwvZW52LWVudHJ5LXR5cGU+CisgICAgPGVudi1lbnRyeS12YWx1ZT4xNTAuMDwvZW52LWVudHJ5LXZhbHVlPgogICAgICAgPC9lbnYtZW50cnk+CiAgICAgICA8ZWpiLXJlZj4KICAgICAgICAgPGRlc2NyaXB0aW9uPmVucm9sbGVyIHJlZjwvZGVzY3JpcHRpb24+CkBAIC01NDgsNyArNTQ4LDcgQEAKICAgICA8Y29udGFpbmVyLXRyYW5zYWN0aW9uPgogICAgICAgPG1ldGhvZD4KICAgICAgICAgPGVqYi1uYW1lPnN0YXRlZnVsU2Vzc2lvbjwvZWpiLW5hbWU+Ci0JPG1ldGhvZC1uYW1lPio8L21ldGhvZC1uYW1lPgorICAgIDxtZXRob2QtbmFtZT4qPC9tZXRob2QtbmFtZT4KICAgICAgIDwvbWV0aG9kPgogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgpAQCAtNTYzLDYgKzU2Myw2IEBACiAgICAgICAgIDwvbWV0aG9kLXBhcmFtcz4KICAgICAgIDwvbWV0aG9kPgogICAgIDwvZXhjbHVkZS1saXN0PgotICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+ICAKKyAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgogICA8ZWpiLWNsaWVudC1qYXI+Y2FydC1lamItY2xpZW50LmphcjwvZWpiLWNsaWVudC1qYXI+CiA8L2VqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RvbC92YWxpZGF0aW9uL2VqYi9NRVRBLUlORi9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RvbC92YWxpZGF0aW9uL2VqYi9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKaW5kZXggNDA2NGFiYy4uYjAwNmMzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kb2wvdmFsaWRhdGlvbi9lamIvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZG9sL3ZhbGlkYXRpb24vZWpiL01FVEEtSU5GL3N1bi1lamItamFyLnhtbApAQCAtMjMsNyArMjMsNyBAQAogICAgIDx1bmlxdWUtaWQ+MTwvdW5pcXVlLWlkPgogICAgIDxlamI+CiAgICAgICA8ZWpiLW5hbWU+c3RhdGVmdWxTZXNzaW9uPC9lamItbmFtZT4KLSAgICAgIDxqbmRpLW5hbWU+TXlUcmFkZXJCZWFuPC9qbmRpLW5hbWU+ICAgICAgCisgICAgICA8am5kaS1uYW1lPk15VHJhZGVyQmVhbjwvam5kaS1uYW1lPgogICAgIDwvZWpiPgogICA8L2VudGVycHJpc2UtYmVhbnM+CiAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9hcHBtZ3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvYXBwbWd0L2J1aWxkLnhtbAppbmRleCBmOGEyZDk5Li5jYzZjZTk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9hcHBtZ3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2FwcG1ndC9idWlsZC54bWwKQEAgLTU4LDcgKzU4LDcgQEAKICAgICAgICAgICAgIDxjbGFzc2VzIGRpcj0iJHtidWlsZH0iLz4KICAgICAgICAgPC93YXI+CiAKLSAgICAgICAgIAorCiAgICAgICAgIDxjb3B5IGZpbGU9ImFwcGxpY2F0aW9uLnhtbCIgdG9kaXI9IiR7YnVpbGR9L2FyY2hpdmUvTUVUQS1JTkYiLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHthbGwud2FyfSIgdG9kaXI9IiR7YnVpbGR9L2FyY2hpdmUiLz4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthbGwuZWFyfSIgYmFzZWRpcj0iJHtidWlsZH0vYXJjaGl2ZSIvPgpAQCAtOTIsMTYgKzkyLDE2IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZW5hYmxlLmFzYWRtaW4iPiAKKyAgICA8dGFyZ2V0IG5hbWU9ImVuYWJsZS5hc2FkbWluIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24uZW5hYmxlLmFzYWRtaW4iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkaXNhYmxlLmFzYWRtaW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5kaXNhYmxlLmFzYWRtaW4iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgpAQCAtMzczLDcgKzM3Myw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZXh0cmEuYXJncyIgdmFsdWU9IiR7Y3VzdG9taXplZC5jb25maWcuY2xpZW50LmFyZ3N9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNoZWNrLmFkZGVkLmN1c3RvbWl6YXRpb24uYW5kLnN1cHByZXNzZWQub3JpZ2luYWwuY29uZmlnIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjaGVjay5hZGRpdGl2ZS5jdXN0b21pemF0aW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2cuaWQiIHZhbHVlPSIke2xvZy5pZH0uMSIvPgpAQCAtMzk2LDcgKzM5Niw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZXh0cmEuYXJncyIgdmFsdWU9Ii1wYXJhbSBidWlsdGluPWluLWFwcCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNsb2JiZXIiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2FsbC5lYXJ9Ii8+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvYnVpbGQueG1sCmluZGV4IDk5ZmNkOWIuLmNlODM5MWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9idWlsZC54bWwKQEAgLTIzLDQwICsyMyw0MCBAQAogCiA8cHJvamVjdCBuYW1lPSJlYXIiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLQkmY29tbW9uQnVpbGQ7CisgICAgJmNvbW1vbkJ1aWxkOwogCi0JPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+Ci0JCTxhbnQgZGlyPSJlYXJ3aXRod2FyIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2VhcndpdGh3YXIiLz4KLQkJPC9hbnQ+Ci0JCTxhbnQgZGlyPSJlYXJ3aXRoZWpiIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2VhcndpdGhlamIiLz4KLQkJPC9hbnQ+Ci0JCTwhLS1hbnQgZGlyPSJ3c3RvZWpiIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3dzdG9lamIiLz4KLQkJPC9hbnQ+Ci0JCTxhbnQgZGlyPSJlYXJ3aXRoYWxsIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2VhcndpdGhhbGwiLz4KLQkJPC9hbnQtLT4KLQkJPGFudCBkaXI9ImVhcndpdGhhbGwyIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2VhcndpdGhhbGwyIi8+Ci0JCTwvYW50PgotCQk8YW50IGRpcj0idW5pcXVlY3IiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vdW5pcXVlY3IiLz4KLQkJPC9hbnQ+Ci0JCTxhbnQgZGlyPSJsaWJDbGFzc1BhdGgiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vbGliQ2xhc3NQYXRoIi8+Ci0JCTwvYW50PgotICAgICAgICAgICAgICAgIAorICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgorICAgICAgICA8YW50IGRpcj0iZWFyd2l0aHdhciIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9lYXJ3aXRod2FyIi8+CisgICAgICAgIDwvYW50PgorICAgICAgICA8YW50IGRpcj0iZWFyd2l0aGVqYiIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9lYXJ3aXRoZWpiIi8+CisgICAgICAgIDwvYW50PgorICAgICAgICA8IS0tYW50IGRpcj0id3N0b2VqYiIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS93c3RvZWpiIi8+CisgICAgICAgIDwvYW50PgorICAgICAgICA8YW50IGRpcj0iZWFyd2l0aGFsbCIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9lYXJ3aXRoYWxsIi8+CisgICAgICAgIDwvYW50LS0+CisgICAgICAgIDxhbnQgZGlyPSJlYXJ3aXRoYWxsMiIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9lYXJ3aXRoYWxsMiIvPgorICAgICAgICA8L2FudD4KKyAgICAgICAgPGFudCBkaXI9InVuaXF1ZWNyIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3VuaXF1ZWNyIi8+CisgICAgICAgIDwvYW50PgorICAgICAgICA8YW50IGRpcj0ibGliQ2xhc3NQYXRoIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2xpYkNsYXNzUGF0aCIvPgorICAgICAgICA8L2FudD4KKwogICAgICAgICAgICAgICAgIDxhbnQgZGlyPSJsaWJjbGFzc3BhdGgyIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2xpYmNsYXNzcGF0aDIiLz4KLQkJPC9hbnQ+Ci0JCTxhbnQgZGlyPSJtYW5pZmVzdENsYXNzUGF0aCIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9tYW5pZmVzdENsYXNzUGF0aCIvPgotCQk8L2FudD4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2xpYmNsYXNzcGF0aDIiLz4KKyAgICAgICAgPC9hbnQ+CisgICAgICAgIDxhbnQgZGlyPSJtYW5pZmVzdENsYXNzUGF0aCIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9tYW5pZmVzdENsYXNzUGF0aCIvPgorICAgICAgICA8L2FudD4KIAogICAgICAgICAgICAgICAgIDxhbnQgZGlyPSJhcHBtZ3QiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgogICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9hcHBtZ3QiLz4KICAgICAgICAgICAgICAgICA8L2FudD4KLQk8L3RhcmdldD4KKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbC9idWlsZC54bWwKaW5kZXggM2U0ZDlmMy4uNTAwZGMyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbC9idWlsZC54bWwKQEAgLTI0LDY4ICsyNCw2OCBAQAogPHByb2plY3QgbmFtZT0iSGVsbG9TZXJ2aWNlV1MiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKICAgICAmY29tbW9uQnVpbGQ7Ci0JCisKICAgICA8cHJvcGVydHkgbmFtZT0idGVzdE5hbWUiIHZhbHVlPSJTYXlIZWxsb1dTIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImFyY2hpdmVkaXIiIHZhbHVlPSIke2J1aWxkfS9hcmNoaXZlcyIvPgogICAgIDx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJiaW5hcnkiIHZhbHVlPSIke2J1aWxkfS9XRUItSU5GL2NsYXNzZXMiLz4KLQkJPHByb3BlcnR5IG5hbWU9IndzZGwiIHZhbHVlPSIke2J1aWxkfS9XRUItSU5GL3dzZGwiLz4KLQkJPG1rZGlyIGRpcj0iJHtiaW5hcnl9IiAvPgotCQk8bWtkaXIgZGlyPSIke3dzZGx9Ii8+Ci0JCTxta2RpciBkaXI9IiR7YnVpbGR9L2VqYiIvPgotCQk8cHJvcGVydHkgbmFtZT0icG9ydGFibGUud2FyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9zYXloZWxsby1wb3J0YWJsZS53YXIiLz4KLQkJPHByb3BlcnR5IG5hbWU9InBvcnRhYmxlLmphciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vc3RhdGVsZXNzaGVsbG8tcG9ydGFibGUuamFyIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJwb3J0YWJsZS5lYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L3NheWhlbGxvLXBvcnRhYmxlLmVhciIvPgotCQk8cHJvcGVydHkgbmFtZT0iYWxsLndhciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vc2F5aGVsbG8ud2FyIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJhbGwuamFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9zdGF0ZWxlc3NoZWxsby5qYXIiLz4KLQkJPHByb3BlcnR5IG5hbWU9ImFsbC5lYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L3NheWhlbGxvLmVhciIvPgotCQk8cHJvcGVydHkgbmFtZT0iZGVwbG95cGxhbi5qYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L3NheWhlbGxvLWRlcGxveXBsYW4uamFyIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJiaW5hcnkiIHZhbHVlPSIke2J1aWxkfS9XRUItSU5GL2NsYXNzZXMiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9IndzZGwiIHZhbHVlPSIke2J1aWxkfS9XRUItSU5GL3dzZGwiLz4KKyAgICAgICAgPG1rZGlyIGRpcj0iJHtiaW5hcnl9IiAvPgorICAgICAgICA8bWtkaXIgZGlyPSIke3dzZGx9Ii8+CisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9L2VqYiIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0icG9ydGFibGUud2FyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9zYXloZWxsby1wb3J0YWJsZS53YXIiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InBvcnRhYmxlLmphciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vc3RhdGVsZXNzaGVsbG8tcG9ydGFibGUuamFyIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwb3J0YWJsZS5lYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L3NheWhlbGxvLXBvcnRhYmxlLmVhciIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iYWxsLndhciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vc2F5aGVsbG8ud2FyIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhbGwuamFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9zdGF0ZWxlc3NoZWxsby5qYXIiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImFsbC5lYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L3NheWhlbGxvLmVhciIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95cGxhbi5qYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L3NheWhlbGxvLWRlcGxveXBsYW4uamFyIi8+CiAgICAgPC90YXJnZXQ+Ci0JCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9InByZXBhcmUiPgogICAgICAgICA8amF2YWMgc3JjZGlyPSJzdGF0ZWxlc3NoZWxsbyIgZGVzdGRpcj0iJHtidWlsZH0vZWpiIj4KICAgICAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJnZnYzLmNsYXNzcGF0aCIvPgogICAgICAgICA8L2phdmFjPgotCQk8amF2YWMgc3JjZGlyPSJoZWxsb3NlcnZpY2UiIGRlc3RkaXI9IiR7YmluYXJ5fSI+CisgICAgICAgIDxqYXZhYyBzcmNkaXI9ImhlbGxvc2VydmljZSIgZGVzdGRpcj0iJHtiaW5hcnl9Ij4KICAgICAgICAgICAgICAgICAgICAgPGNsYXNzcGF0aCByZWZpZD0iZ2Z2My5jbGFzc3BhdGgiLz4KICAgICAgICAgICAgICAgICA8L2phdmFjPgotCQk8ZWNobyBtZXNzYWdlPSJpbnZva2luZyB3c2NvbXBpbGUgdG8gZ2VuZXJhdGUgd3NkbCBmaWxlIi8+Ci0JCTxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSI+Ci0JCQk8YXJnIGxpbmU9Ii1kZWZpbmUgY29uZmlnLWludGVyZmFjZS54bWwgIC1kICR7YmluYXJ5fSAtbmQgJHt3c2RsfSAtY2xhc3NwYXRoICR7YmluYXJ5fSAtbWFwcGluZyAke2J1aWxkfS9tYXBwaW5nLnhtbCIvPgotCSAJPC9leGVjPgkJCQkJCisgICAgICAgIDxlY2hvIG1lc3NhZ2U9Imludm9raW5nIHdzY29tcGlsZSB0byBnZW5lcmF0ZSB3c2RsIGZpbGUiLz4KKyAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9Ij4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iLWRlZmluZSBjb25maWctaW50ZXJmYWNlLnhtbCAgLWQgJHtiaW5hcnl9IC1uZCAke3dzZGx9IC1jbGFzc3BhdGggJHtiaW5hcnl9IC1tYXBwaW5nICR7YnVpbGR9L21hcHBpbmcueG1sIi8+CisgICAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+Ci0JCisKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4KLQkJPGNvcHkgZmlsZT0id2ViLnhtbCIgdG9kaXI9IiR7YnVpbGR9L1dFQi1JTkYiLz4KLQkJPGNvcHkgZmlsZT0id2Vic2VydmljZXMueG1sIiB0b2Rpcj0iJHtidWlsZH0vV0VCLUlORiIvPgotCQk8amFyIGRlc3RmaWxlPSIke3BvcnRhYmxlLndhcn0iIGJhc2VkaXI9IiR7YnVpbGR9Ii8+Ci0JCTxjb3B5IGZpbGU9InN1bi13ZWIueG1sIiB0b2Rpcj0iJHtidWlsZH0vV0VCLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0JCTxqYXIgZGVzdGZpbGU9IiR7YWxsLndhcn0iIGJhc2VkaXI9IiR7YnVpbGR9Ii8+CisgICAgICAgIDxjb3B5IGZpbGU9IndlYi54bWwiIHRvZGlyPSIke2J1aWxkfS9XRUItSU5GIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IndlYnNlcnZpY2VzLnhtbCIgdG9kaXI9IiR7YnVpbGR9L1dFQi1JTkYiLz4KKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtwb3J0YWJsZS53YXJ9IiBiYXNlZGlyPSIke2J1aWxkfSIvPgorICAgICAgICA8Y29weSBmaWxlPSJzdW4td2ViLnhtbCIgdG9kaXI9IiR7YnVpbGR9L1dFQi1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2FsbC53YXJ9IiBiYXNlZGlyPSIke2J1aWxkfSIvPgogCi0JCTxta2RpciBkaXI9IiR7YnVpbGR9L2VqYi9NRVRBLUlORiIvPgotCQk8Y29weSBmaWxlPSJlamItamFyLnhtbCIgdG9kaXI9IiR7YnVpbGR9L2VqYi9NRVRBLUlORiIvPgotCQk8amFyIGRlc3RmaWxlPSIke3BvcnRhYmxlLmphcn0iIGJhc2VkaXI9IiR7YnVpbGR9L2VqYiIvPgotCQk8Y29weSBmaWxlPSJzdW4tZWpiLWphci54bWwiIHRvZGlyPSIke2J1aWxkfS9lamIvTUVUQS1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotCQk8amFyIGRlc3RmaWxlPSIke2FsbC5qYXJ9IiBiYXNlZGlyPSIke2J1aWxkfS9lamIiLz4KKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0vZWpiL01FVEEtSU5GIi8+CisgICAgICAgIDxjb3B5IGZpbGU9ImVqYi1qYXIueG1sIiB0b2Rpcj0iJHtidWlsZH0vZWpiL01FVEEtSU5GIi8+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7cG9ydGFibGUuamFyfSIgYmFzZWRpcj0iJHtidWlsZH0vZWpiIi8+CisgICAgICAgIDxjb3B5IGZpbGU9InN1bi1lamItamFyLnhtbCIgdG9kaXI9IiR7YnVpbGR9L2VqYi9NRVRBLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YWxsLmphcn0iIGJhc2VkaXI9IiR7YnVpbGR9L2VqYiIvPgogCi0JCTxta2RpciBkaXI9IiR7YnVpbGR9L3BsYW4iLz4KLQkJPGNvcHkgZmlsZT0ic3VuLWVqYi1qYXIueG1sIiB0b2ZpbGU9IiR7YnVpbGR9L3BsYW4vc3RhdGVsZXNzaGVsbG8tcG9ydGFibGUuamFyLnN1bi1lamItamFyLnhtbCIvPgotCQk8Y29weSBmaWxlPSJzdW4td2ViLnhtbCIgdG9maWxlPSIke2J1aWxkfS9wbGFuL3NheWhlbGxvLXBvcnRhYmxlLndhci5zdW4td2ViLnhtbCIvPgotCQk8amFyIGRlc3RmaWxlPSIke2RlcGxveXBsYW4uamFyfSIgYmFzZWRpcj0iJHtidWlsZH0vcGxhbiIvPgorICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfS9wbGFuIi8+CisgICAgICAgIDxjb3B5IGZpbGU9InN1bi1lamItamFyLnhtbCIgdG9maWxlPSIke2J1aWxkfS9wbGFuL3N0YXRlbGVzc2hlbGxvLXBvcnRhYmxlLmphci5zdW4tZWpiLWphci54bWwiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0ic3VuLXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZH0vcGxhbi9zYXloZWxsby1wb3J0YWJsZS53YXIuc3VuLXdlYi54bWwiLz4KKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtkZXBsb3lwbGFuLmphcn0iIGJhc2VkaXI9IiR7YnVpbGR9L3BsYW4iLz4KIAotCQk8bWtkaXIgZGlyPSIke2J1aWxkfS9lYXIiLz4KLQkJPG1rZGlyIGRpcj0iJHtidWlsZH0vZWFyL01FVEEtSU5GIi8+Ci0JCTxjb3B5IGZpbGU9ImFwcGxpY2F0aW9uLnhtbCIgdG9kaXI9IiR7YnVpbGR9L2Vhci9NRVRBLUlORiIvPgotCQk8Y29weSBmaWxlPSIke2FsbC53YXJ9IiB0b2Rpcj0iJHtidWlsZH0vZWFyIi8+Ci0JCTxjb3B5IGZpbGU9IiR7YWxsLmphcn0iIHRvZGlyPSIke2J1aWxkfS9lYXIiLz4KLQkJPGphciBkZXN0ZmlsZT0iJHthbGwuZWFyfSIgYmFzZWRpcj0iJHtidWlsZH0vZWFyIi8+Ci0JCTxkZWxldGUgZmlsZT0iJHtidWlsZH0vZWFyL3NheWhlbGxvLndhciIvPgotCQk8ZGVsZXRlIGZpbGU9IiR7YnVpbGR9L2Vhci9zdGF0ZWxlc3NoZWxsby5qYXIiLz4KLQkJPGRlbGV0ZSBmaWxlPSIke2J1aWxkfS9lYXIvTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+Ci0JCTxjb3B5IGZpbGU9InBvcnRhYmxlLWFwcC54bWwiIHRvZmlsZT0iJHtidWlsZH0vZWFyL01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgotCQk8Y29weSBmaWxlPSIke3BvcnRhYmxlLndhcn0iIHRvZGlyPSIke2J1aWxkfS9lYXIiLz4KLQkJPGNvcHkgZmlsZT0iJHtwb3J0YWJsZS5qYXJ9IiB0b2Rpcj0iJHtidWlsZH0vZWFyIi8+Ci0JCTxqYXIgZGVzdGZpbGU9IiR7cG9ydGFibGUuZWFyfSIgYmFzZWRpcj0iJHtidWlsZH0vZWFyIi8+CisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9L2VhciIvPgorICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfS9lYXIvTUVUQS1JTkYiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iYXBwbGljYXRpb24ueG1sIiB0b2Rpcj0iJHtidWlsZH0vZWFyL01FVEEtSU5GIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7YWxsLndhcn0iIHRvZGlyPSIke2J1aWxkfS9lYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHthbGwuamFyfSIgdG9kaXI9IiR7YnVpbGR9L2VhciIvPgorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2FsbC5lYXJ9IiBiYXNlZGlyPSIke2J1aWxkfS9lYXIiLz4KKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2J1aWxkfS9lYXIvc2F5aGVsbG8ud2FyIi8+CisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtidWlsZH0vZWFyL3N0YXRlbGVzc2hlbGxvLmphciIvPgorICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YnVpbGR9L2Vhci9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0icG9ydGFibGUtYXBwLnhtbCIgdG9maWxlPSIke2J1aWxkfS9lYXIvTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7cG9ydGFibGUud2FyfSIgdG9kaXI9IiR7YnVpbGR9L2VhciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke3BvcnRhYmxlLmphcn0iIHRvZGlyPSIke2J1aWxkfS9lYXIiLz4KKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtwb3J0YWJsZS5lYXJ9IiBiYXNlZGlyPSIke2J1aWxkfS9lYXIiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LmFzYWRtaW4iIGRlcGVuZHM9InByZXBhcmUiPgpAQCAtOTMsMTAgKzkzLDEwIEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSItLW5hbWUgJHt0ZXN0TmFtZX0gJHthbGwuZWFyfSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxlY2hvIG1lc3NhZ2U9IkNyZWF0ZSBjbGllbnQgd2Vic2VydmljZXMgYXJ0aWZhY3RzIi8+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9Ij4KLQkJPGFyZyBsaW5lPSItZ2VuOmNsaWVudCAta2VlcCAtZCAke2JpbmFyeX0gLWNsYXNzcGF0aCAke2JpbmFyeX0gY29uZmlnLWludGVyZmFjZS54bWwiLz4KLQk8L2V4ZWM+CisgICAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRlIGNsaWVudCB3ZWJzZXJ2aWNlcyBhcnRpZmFjdHMiLz4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iPgorICAgICAgICA8YXJnIGxpbmU9Ii1nZW46Y2xpZW50IC1rZWVwIC1kICR7YmluYXJ5fSAtY2xhc3NwYXRoICR7YmluYXJ5fSBjb25maWctaW50ZXJmYWNlLnhtbCIvPgorICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVkZXBsb3kuYXNhZG1pbiIgZGVwZW5kcz0icHJlcGFyZSI+CkBAIC0xMDQsMTAgKzEwNCwxMCBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0iLS1uYW1lICR7dGVzdE5hbWV9ICR7YWxsLmVhcn0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8ZWNobyBtZXNzYWdlPSJDcmVhdGUgY2xpZW50IHdlYnNlcnZpY2VzIGFydGlmYWN0cyIvPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSI+Ci0JCTxhcmcgbGluZT0iLWdlbjpjbGllbnQgLWtlZXAgLWQgJHtiaW5hcnl9IC1jbGFzc3BhdGggJHtiaW5hcnl9IGNvbmZpZy1pbnRlcmZhY2UueG1sIi8+Ci0JPC9leGVjPgorICAgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0ZSBjbGllbnQgd2Vic2VydmljZXMgYXJ0aWZhY3RzIi8+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9Ij4KKyAgICAgICAgPGFyZyBsaW5lPSItZ2VuOmNsaWVudCAta2VlcCAtZCAke2JpbmFyeX0gLWNsYXNzcGF0aCAke2JpbmFyeX0gY29uZmlnLWludGVyZmFjZS54bWwiLz4KKyAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LmFzYWRtaW4iPgpAQCAtMTc2LDcgKzE3Niw3IEBACiAgICAgICAgIDxqYXZhV2l0aFJlc3VsdAogICAgICAgICAgICAgZm9yaz0idHJ1ZSIKICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGp2bT0iJHtKQVZBfSIJCisgICAgICAgICAgICBqdm09IiR7SkFWQX0iCiAgICAgICAgICAgICBjbGFzc25hbWU9InN0YXRpY3N0dWJjbGllbnQuU2F5SGVsbG9DbGllbnQiCiAgICAgICAgICAgICBvdXRwdXQ9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIgogICAgICAgICAgICAgcmVzdWx0cHJvcGVydHk9InJlc3VsdCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsL2NvbmZpZy1pbnRlcmZhY2UueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbC9jb25maWctaW50ZXJmYWNlLnhtbAppbmRleCBhOTlkOWMwLi44OTQ3ODlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsL2NvbmZpZy1pbnRlcmZhY2UueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwvY29uZmlnLWludGVyZmFjZS54bWwKQEAgLTE5LDExICsxOSwxMSBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8c2VydmljZSAKLSAgICAgIG5hbWU9IlNheUhlbGxvU2VydmljZSIgCi0gICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpEZXBsb3ltZW50V2ViU2VydmljZVRlc3QiIAotICAgICAgdHlwZU5hbWVzcGFjZT0idXJuOkRlcGxveW1lbnRXZWJTZXJ2aWNlVGVzdCIgCisgIDxzZXJ2aWNlCisgICAgICBuYW1lPSJTYXlIZWxsb1NlcnZpY2UiCisgICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpEZXBsb3ltZW50V2ViU2VydmljZVRlc3QiCisgICAgICB0eXBlTmFtZXNwYWNlPSJ1cm46RGVwbG95bWVudFdlYlNlcnZpY2VUZXN0IgogICAgICAgcGFja2FnZU5hbWU9ImhlbGxvc2VydmljZSI+CiAgICAgICA8aW50ZXJmYWNlIG5hbWU9ImhlbGxvc2VydmljZS5TYXlIZWxsbyIvPgogICA8L3NlcnZpY2U+Ci08L2NvbmZpZ3VyYXRpb24+IAorPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbC9oZWxsb3NlcnZpY2UvU2F5SGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwvaGVsbG9zZXJ2aWNlL1NheUhlbGxvLmphdmEKaW5kZXggMDc3NGQ2MS4uZDI1MzM1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbC9oZWxsb3NlcnZpY2UvU2F5SGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsL2hlbGxvc2VydmljZS9TYXlIZWxsby5qYXZhCkBAIC0xNSw3ICsxNSw3IEBACiAgKi8KIAogIHBhY2thZ2UgaGVsbG9zZXJ2aWNlOwotIAorCiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlOwogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIApAQCAtMjMsMTEgKzIzLDExIEBACiAgICogVGhpcyBpcyBhIG1pbmltdW0gV2ViU2VydmljZSBpbnRlcmZhY2UKICAgKi8KICAgcHVibGljIGludGVyZmFjZSBTYXlIZWxsbyAgZXh0ZW5kcyBSZW1vdGUgewotICAJCi0gIAkvKgotICAJICogQHJldHVybiBhIGhlbGxvIHN0cmluZwotICAJICovCi0gIAkgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgbmFtZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgCisKKyAgICAgIC8qCisgICAgICAgKiBAcmV0dXJuIGEgaGVsbG8gc3RyaW5nCisgICAgICAgKi8KKyAgICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyBuYW1lKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworCiAgIH0KLSAgCQorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsL2hlbGxvc2VydmljZS9TYXlIZWxsb0ltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwvaGVsbG9zZXJ2aWNlL1NheUhlbGxvSW1wbC5qYXZhCmluZGV4IGVkNDQ5YTYuLjkzZTg1OTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwvaGVsbG9zZXJ2aWNlL1NheUhlbGxvSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwvaGVsbG9zZXJ2aWNlL1NheUhlbGxvSW1wbC5qYXZhCkBAIC0yNCwzMiArMjQsMzIgQEAKIAogcHVibGljIGNsYXNzIFNheUhlbGxvSW1wbCBpbXBsZW1lbnRzIFNheUhlbGxvIHsKIAotCXB1YmxpYyBTdHJpbmcgbWVzc2FnZSA9Ik1lc3NhZ2UgZnJvbSBzZXJ2bGV0IGlzIDogQm9uam91ciAiOworICAgIHB1YmxpYyBTdHJpbmcgbWVzc2FnZSA9Ik1lc3NhZ2UgZnJvbSBzZXJ2bGV0IGlzIDogQm9uam91ciAiOwogCi0JcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgcykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JICAgIHRyeSB7CisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgcykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgIHRyeSB7CiAKLQkJQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKLQkJLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCi0JCWphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9NeVN0YXRlbGVzc2hlbGxvIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOworICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKKyAgICAgICAgamF2YS5sYW5nLk9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL015U3RhdGVsZXNzaGVsbG8iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7CiAKLQkJU3RhdGVsZXNzaGVsbG9Ib21lIGhvbWUgPQotCQkgICAgKFN0YXRlbGVzc2hlbGxvSG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KAotCQkJCW9ianJlZiwgU3RhdGVsZXNzaGVsbG9Ib21lLmNsYXNzKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKKyAgICAgICAgU3RhdGVsZXNzaGVsbG9Ib21lIGhvbWUgPQorICAgICAgICAgICAgKFN0YXRlbGVzc2hlbGxvSG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KAorICAgICAgICAgICAgICAgIG9ianJlZiwgU3RhdGVsZXNzaGVsbG9Ib21lLmNsYXNzKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKIAotCQlTdGF0ZWxlc3NoZWxsbyBociA9IGhvbWUuY3JlYXRlKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiR290IHRoZSBFSkIhISIpOworICAgICAgICBTdGF0ZWxlc3NoZWxsbyBociA9IGhvbWUuY3JlYXRlKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwogCi0JCS8vIGludm9rZSBtZXRob2Qgb24gdGhlIEVKQgotCQltZXNzYWdlID0gaHIuc2F5U3RhdGVsZXNzaGVsbG8oKSArICI7IiArIG1lc3NhZ2UgKyBzOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNlcnZsZXQgc2F5SGVsbG9JbXBsIHJlY2QgZXhjZXB0aW9uIDogIiArCi0JCQkJICAgZS5nZXRNZXNzYWdlKCkpOwotCQllLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9Ci0JICAgIHJldHVybiBtZXNzYWdlOwotCX0gCisgICAgICAgIC8vIGludm9rZSBtZXRob2Qgb24gdGhlIEVKQgorICAgICAgICBtZXNzYWdlID0gaHIuc2F5U3RhdGVsZXNzaGVsbG8oKSArICI7IiArIG1lc3NhZ2UgKyBzOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlcnZsZXQgc2F5SGVsbG9JbXBsIHJlY2QgZXhjZXB0aW9uIDogIiArCisgICAgICAgICAgICAgICAgICAgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtZXNzYWdlOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwvc3RhdGVsZXNzaGVsbG8vU3RhdGVsZXNzaGVsbG9FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwvc3RhdGVsZXNzaGVsbG8vU3RhdGVsZXNzaGVsbG9FSkIuamF2YQppbmRleCA0OTMzODUwLi43NGJlZDc2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsL3N0YXRlbGVzc2hlbGxvL1N0YXRlbGVzc2hlbGxvRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbC9zdGF0ZWxlc3NoZWxsby9TdGF0ZWxlc3NoZWxsb0VKQi5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIHN0YXRlbGVzc2hlbGxvOwogCiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMjUsMjYgKzI1LDI2IEBACiAKIHB1YmxpYyBjbGFzcyBTdGF0ZWxlc3NoZWxsb0VKQiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjOwotICAgIAorCiAgICAgcHVibGljIFN0YXRlbGVzc2hlbGxvRUpCKCl7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgc2F5U3RhdGVsZXNzaGVsbG8oKSB0aHJvd3MgRUpCRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbGVzc2hlbGxvRUpCIGlzIHNheWluZyBoZWxsbyB0byB1c2VyXG4iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbGVzc2hlbGxvRUpCIGlzIHNheWluZyBoZWxsbyB0byB1c2VyXG4iKTsKICAgICAgICAgcmV0dXJuKCJBIEJpZyBoZWxsbyBmcm9tIHN0YXRlbGVzcyBIRUxMTyIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JCisKICAgICAgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsL3N0YXRpY3N0dWJjbGllbnQvU2F5SGVsbG9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwvc3RhdGljc3R1YmNsaWVudC9TYXlIZWxsb0NsaWVudC5qYXZhCmluZGV4IDgwMTAwNjQuLmQ2MWY3OGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwvc3RhdGljc3R1YmNsaWVudC9TYXlIZWxsb0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwvc3RhdGljc3R1YmNsaWVudC9TYXlIZWxsb0NsaWVudC5qYXZhCkBAIC0yNiwyOCArMjYsMjggQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbmRwb2ludCBhZGRyZXNzID0gIiArIGFyZ3NbMF0pOwotCWJvb2xlYW4gdGVzdFBvc2l0aXZlID0gKEJvb2xlYW4udmFsdWVPZihhcmdzWzFdKSkuYm9vbGVhblZhbHVlKCk7CisgICAgYm9vbGVhbiB0ZXN0UG9zaXRpdmUgPSAoQm9vbGVhbi52YWx1ZU9mKGFyZ3NbMV0pKS5ib29sZWFuVmFsdWUoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN0dWIgc3R1YiA9IGNyZWF0ZVByb3h5KCk7CiAgICAgICAgICAgICBzdHViLl9zZXRQcm9wZXJ0eQogICAgICAgICAgICAgICAoamF2YXgueG1sLnJwYy5TdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCi0gICAgICAgICAgICAgICBhcmdzWzBdKTsgCi0JCQlTYXlIZWxsbyBoZWxsbyA9IChTYXlIZWxsbylzdHViOworICAgICAgICAgICAgICAgYXJnc1swXSk7CisgICAgICAgICAgICBTYXlIZWxsbyBoZWxsbyA9IChTYXlIZWxsbylzdHViOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGhlbGxvLnNheUhlbGxvKCJKZXJvbWUgISIpKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIGlmKHRlc3RQb3NpdGl2ZSkgewotCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJU3lzdGVtLmV4aXQoLTEpOwotCSAgICB9IGVsc2UgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiByZWNkIGFzIGV4cGVjdGVkIik7Ci0JICAgIH0KLQl9Ci0JU3lzdGVtLmV4aXQoMCk7Ci0gICAgfSAgICAKKyAgICAgICAgaWYodGVzdFBvc2l0aXZlKSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBTeXN0ZW0uZXhpdCgtMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIHJlY2QgYXMgZXhwZWN0ZWQiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBTeXN0ZW0uZXhpdCgwKTsKKyAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHViIGNyZWF0ZVByb3h5KCkgewogICAgICAgICAvLyBOb3RlOiBNeUhlbGxvU2VydmljZV9JbXBsIGlzIGltcGxlbWVudGF0aW9uLXNwZWNpZmljLgotICAgICAgICByZXR1cm4gCisgICAgICAgIHJldHVybgogICAgICAgICAoU3R1YikgKG5ldyBTYXlIZWxsb1NlcnZpY2VfSW1wbCgpLmdldFNheUhlbGxvUG9ydCgpKTsKICAgICB9Ci19IAorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbC9zdW4td2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwvc3VuLXdlYi54bWwKaW5kZXggZjZlZmYzOS4uODczZmQ3OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbC9zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsL3N1bi13ZWIueG1sCkBAIC0yMSw2ICsyMSw2IEBACiA8c3VuLXdlYi1hcHA+CiAgICAgPGVqYi1yZWY+CiAgICAgICAgIDxlamItcmVmLW5hbWU+ZWpiL015U3RhdGVsZXNzaGVsbG88L2VqYi1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmVqYi9NeVN0YXRlbGVzc2hlbGxvPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5lamIvTXlTdGF0ZWxlc3NoZWxsbzwvam5kaS1uYW1lPgogICAgIDwvZWpiLXJlZj4KIDwvc3VuLXdlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9UZXN0Q2xpZW50LmphdmEKaW5kZXggMzRlOTY2MC4uNDkxNTVlMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL1Rlc3RDbGllbnQuamF2YQpAQCAtMjksNyArMjksNyBAQAogICAgICAgICBUZXN0Q2xpZW50IGNsaWVudCA9IG5ldyBUZXN0Q2xpZW50KCk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBTdHJpbmcgdXJsID0gYXJnc1swXTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgICAgICAgICBsb2coIkNhdWdodCBFWFBFQ1RFRCBJT0V4Y2VwdGlvbjogIiArIGV4KTsKICAgICAgICAgICAgICAgICBwYXNzKCk7CiAgICAgICAgICAgICB9Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvVGVzdERlcGxPcmRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvVGVzdERlcGxPcmRlci5qYXZhCmluZGV4IDFlZmU3N2IuLmE3YTlhMjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL1Rlc3REZXBsT3JkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9UZXN0RGVwbE9yZGVyLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgICAgVGVzdERlcGxPcmRlciBjbGllbnQgPSBuZXcgVGVzdERlcGxPcmRlcigpOwogICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgU3RyaW5nIHBhdGggPSBhcmdzWzBdOwpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICAgICAgfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL1Rlc3REZXBsT3JkZXIyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9UZXN0RGVwbE9yZGVyMi5qYXZhCmluZGV4IDcyMTZhOTguLjcxMmY2NmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL1Rlc3REZXBsT3JkZXIyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvVGVzdERlcGxPcmRlcjIuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgICAgICBUZXN0RGVwbE9yZGVyMiBjbGllbnQgPSBuZXcgVGVzdERlcGxPcmRlcjIoKTsKICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIFN0cmluZyBwYXRoID0gYXJnc1swXTsKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgIH0KLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9hcHBsaWNhdGlvbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9hcHBsaWNhdGlvbi54bWwKaW5kZXggNWI1YzVkNy4uZjMxYzYzYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvYXBwbGljYXRpb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL2FwcGxpY2F0aW9uLnhtbApAQCAtMjcsNyArMjcsNyBAQAogICA8L21vZHVsZT4KICAgPCEtLQogICA8bW9kdWxlPgotICAgIDxqYXZhPmFwcC1jbGllbnQtaWMuamFyPC9qYXZhPiAKKyAgICA8amF2YT5hcHAtY2xpZW50LWljLmphcjwvamF2YT4KICAgPC9tb2R1bGU+CiAgIC0tPgogICA8bW9kdWxlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvYnVpbGQueG1sCmluZGV4IDBmM2NlNTEuLmU5NmJiMjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9idWlsZC54bWwKQEAgLTEyOSw3ICsxMjksNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iJHthcHBOYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS5hc2FkbWluLndhciIgZGVwZW5kcz0icHJlcGFyZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLmRlcGxveS5hc2FkbWluIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9Ii0tZGVwbG95bWVudG9yZGVyIDEwMiAke3Rlc3RXYXJ9Ii8+CkBAIC0yMDAsOSArMjAwLDkgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJlbmFibGUuYXNhZG1pbiI+IAorICAgIDx0YXJnZXQgbmFtZT0iZW5hYmxlLmFzYWRtaW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5lbmFibGUuYXNhZG1pbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke2FwcE5hbWV9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdE5hbWUiIHZhbHVlPSIke2FwcE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KQEAgLTIxMCw3ICsyMTAsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJkaXNhYmxlLmFzYWRtaW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5kaXNhYmxlLmFzYWRtaW4iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthcHBOYW1lfSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iJHthcHBOYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+CkBAIC0yNDgsNyArMjQ4LDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCi0gICA8IS0tIGFzIGl0J3Mgbm90IGVhc3kgdG8gaW1wbGVtZW50IHRoZSB1bmRlcGxveS1zdHJlYW0gdXNpbmcgdGhlIAorICAgPCEtLSBhcyBpdCdzIG5vdCBlYXN5IHRvIGltcGxlbWVudCB0aGUgdW5kZXBsb3ktc3RyZWFtIHVzaW5nIHRoZQogICAgICAgICBjdXJyZW50IEpTUjg4IERlcGxveWVyLCBsZXQncyBqdXN0IHVuZGVwbG95IGFsbCAtLT4KICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LXN0cmVhbS5qc3I4OCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLnVuZGVwbG95Lmpzcjg4Ij4KQEAgLTI4OSw3ICsyODksNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZy5pZCIgdmFsdWU9IiR7bG9nLmlkfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCIgZGVwZW5kcz0iaW5pdCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3RDbGllbnQgJHthcmcubGlzdH0iLz4KICAgICAgICAgPGphdmFXaXRoUmVzdWx0CkBAIC00MTIsMTUgKzQxMiwxNSBAQAogICAgIDx0YXJnZXQgbmFtZT0iYWRkQ2x1c3RlclJlZnMiIGRlcGVuZHM9InByZXBhcmUiIGlmPSJkb0NsdXN0ZXIiPgogICAgICAgICA8IS0tIGNyZWF0ZS1hcHAtcmVmIHRvIGNsdXN0ZXIgLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLnJ1bi5hc2FkbWluIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImNyZWF0ZS1hcHBsaWNhdGlvbi1yZWYgLS1wb3J0ICR7YWRtaW4ucG9ydH0gLS11c2VyICR7YWRtaW4udXNlcn0gLS1wYXNzd29yZGZpbGUgJHtwYXNzd29yZEZpbGV9IC0tdGFyZ2V0ICR7dGVzdENsdXN0ZXJ9ICR7YXBwTmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxDbHVzdGVyUmVmcyIgZGVwZW5kcz0icHJlcGFyZSIgaWY9ImRvQ2x1c3RlciI+CiAgICAgICAgIDwhLS0gZGVsZXRlLWFwcC1yZWYgdG8gcmVtb3RlIGluc3RhbmNlIHNlcnZlciAtLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24ucnVuLmFzYWRtaW4iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iZGVsZXRlLWFwcGxpY2F0aW9uLXJlZiAtLXBvcnQgJHthZG1pbi5wb3J0fSAtLXVzZXIgJHthZG1pbi51c2VyfSAtLXBhc3N3b3JkZmlsZSAke3Bhc3N3b3JkRmlsZX0gLS10YXJnZXQgJHt0ZXN0Q2x1c3Rlcn0gJHthcHBOYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CkBAIC00MzEsNyArNDMxLDcgQEAKIAogICAgICAgICA8IS0tIGRlcGxveW1lbnQgdG8gRG9tYWluIC0tPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5ydW4uYXNhZG1pbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSJkZXBsb3kgLS1wb3J0ICR7YWRtaW4ucG9ydH0gLS11c2VyICR7YWRtaW4udXNlcn0gLS1wYXNzd29yZGZpbGUgJHtwYXNzd29yZEZpbGV9IC0tdGFyZ2V0IGRvbWFpbiAke2FsbC5lYXJ9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KIApAQCAtNDUyLDcgKzQ1Miw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYWRkSW5zdGFuY2VSZWYiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhZGRDbHVzdGVyUmVmcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5ydW4uYXNhZG1pbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSJkZXBsb3kgLS1wb3J0ICR7YWRtaW4ucG9ydH0gLS11c2VyICR7YWRtaW4udXNlcn0gLS1wYXNzd29yZGZpbGUgJHtwYXNzd29yZEZpbGV9IC0tZm9yY2U9dHJ1ZSAtLXRhcmdldCBkb21haW4gJHthbGwuZWFyfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLnBvc2l0aXZlIj4KQEAgLTQ4MCw3ICs0ODAsNyBAQAogCiAgICAgICAgIDwhLS0gdW5kZXBsb3kgZnJvbSBEb21haW4gLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLnJ1bi5hc2FkbWluIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9InVuZGVwbG95IC0tcG9ydCAke2FkbWluLnBvcnR9IC0tdXNlciAke2FkbWluLnVzZXJ9IC0tcGFzc3dvcmRmaWxlICR7cGFzc3dvcmRGaWxlfSAtLXRhcmdldCBkb21haW4gJHthcHBOYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9qdXN0YmVhbi9KdXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvanVzdGJlYW4vSnVzdEJlYW4uamF2YQppbmRleCAwOTgxZGNiLi5kMDBlZmU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9qdXN0YmVhbi9KdXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL2p1c3RiZWFuL0p1c3RCZWFuLmphdmEKQEAgLTIxLDExICsyMSwxMSBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEp1c3RCZWFuIGV4dGVuZHMgRUpCT2JqZWN0IHsKIAotICAgIHB1YmxpYyB2b2lkIAotICAgIGxvZyhTdHJpbmcgbWVzc2FnZSkgCisgICAgcHVibGljIHZvaWQKKyAgICBsb2coU3RyaW5nIG1lc3NhZ2UpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgU3RyaW5nW10KLSAgICBmaW5kQWxsTWFyYmxlcygpIAorICAgIGZpbmRBbGxNYXJibGVzKCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL2p1c3RiZWFuL0p1c3RCZWFuSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvanVzdGJlYW4vSnVzdEJlYW5Ib21lLmphdmEKaW5kZXggNTM5ZmI3MC4uM2M5N2FiNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvanVzdGJlYW4vSnVzdEJlYW5Ib21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvanVzdGJlYW4vSnVzdEJlYW5Ib21lLmphdmEKQEAgLTE5LDExICsxOSwxMSBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJIb21lOwogaW1wb3J0IGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKLSAKKwogcHVibGljIGludGVyZmFjZSBKdXN0QmVhbkhvbWUgZXh0ZW5kcyBFSkJIb21lIHsKLSAKLSAgICBwdWJsaWMgSnVzdEJlYW4gCi0gICAgY3JlYXRlKCkgCisKKyAgICBwdWJsaWMgSnVzdEJlYW4KKyAgICBjcmVhdGUoKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBDcmVhdGVFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL2p1c3RiZWFuL0p1c3RTZXNzaW9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvanVzdGJlYW4vSnVzdFNlc3Npb25CZWFuLmphdmEKaW5kZXggNDJiM2RmOC4uNzEzZWZiZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvanVzdGJlYW4vSnVzdFNlc3Npb25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvanVzdGJlYW4vSnVzdFNlc3Npb25CZWFuLmphdmEKQEAgLTIxLDI1ICsyMSwyNSBAQAogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogCiBwdWJsaWMgY2xhc3MgSnVzdFNlc3Npb25CZWFuIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewotIAorCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjdHg7Ci0gICAgCi0gICAgcHVibGljIHZvaWQgCi0gICAgZWpiQ3JlYXRlKCkgCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gCisKKyAgICBwdWJsaWMgdm9pZAorICAgIGVqYkNyZWF0ZSgpCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24KICAgICB7CiAgICAgICAgIGxvZygiSnVzdFNlc3Npb25CZWFuLmVqYkNyZWF0ZSgpLi4uIik7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgCi0gICAgZWpiUmVtb3ZlKCkgCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gCisgICAgcHVibGljIHZvaWQKKyAgICBlamJSZW1vdmUoKQorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uCiAgICAgewogICAgICAgICBsb2coIkp1c3RTZXNzaW9uQmVhbi5lamJSZW1vdmUoKS4uLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkCi0gICAgbG9nKFN0cmluZyBtZXNzYWdlKSAKKyAgICBsb2coU3RyaW5nIG1lc3NhZ2UpCiAgICAgewogICAgICAgICBMb2cubG9nKG1lc3NhZ2UpOwogICAgIH0KQEAgLTUzLDQzICs1Myw0MyBAQAogICAgICAgICBzdHJBcnJheVsxXSA9ICJZb3UgaGF2ZSBsb3N0IGFsbCB5b3VyIG1hcmJsZXMuIjsKICAgICAgICAgcmV0dXJuIHN0ckFycmF5OwogICAgIH0KLSAgICAKLSAgICAKLSAgICAvKiogCisKKworICAgIC8qKgogICAgICAqIGVqYkRlc3Ryb3kgLSBjYWxsZWQgYnkgdGhlIENvbnRhaW5lciBiZWZvcmUgdGhpcyBiZWFuIGlzIGRlc3Ryb3llZC4KLSAgICAgKi8gCi0gICAgcHVibGljIHZvaWQgCi0gICAgZWpiRGVzdHJveSgpIAorICAgICAqLworICAgIHB1YmxpYyB2b2lkCisgICAgZWpiRGVzdHJveSgpCiAgICAgewogICAgICAgICBsb2coIkp1c3RTZXNzaW9uQmVhbi5lamJEZXN0cm95KCkuLi4iKTsKICAgICB9Ci0gICAgCi0gICAgLyoqIAotICAgICAqIGVqYkFjdGl2YXRlIC0gY2FsbGVkIGJ5IHRoZSBDb250YWluZXIgYWZ0ZXIgdGhpcyBiZWFuIGluc3RhbmNlIAorCisgICAgLyoqCisgICAgICogZWpiQWN0aXZhdGUgLSBjYWxsZWQgYnkgdGhlIENvbnRhaW5lciBhZnRlciB0aGlzIGJlYW4gaW5zdGFuY2UKICAgICAgKiBpcyBhY3RpdmF0ZWQgZnJvbSBpdHMgcGFzc2l2ZSBzdGF0ZS4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCAKLSAgICBlamJBY3RpdmF0ZSgpIAorICAgIHB1YmxpYyB2b2lkCisgICAgZWpiQWN0aXZhdGUoKQogICAgIHsKICAgICAgICAgbG9nKCJKdXN0U2Vzc2lvbkJlYW4uZWpiQWN0aXZhdGUoKS4uLiIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIGVqYlBhc3NpdmF0ZSAtIGNhbGxlZCBieSB0aGUgQ29udGFpbmVyIGJlZm9yZSB0aGlzIGJlYW4gaW5zdGFuY2UgCi0gICAgICogaXMgcHV0IGluIHBhc3NpdmUgc3RhdGUuIAotICAgICAqLyAKLSAgICBwdWJsaWMgdm9pZCAKLSAgICBlamJQYXNzaXZhdGUoKSAKKyAgICAgKiBlamJQYXNzaXZhdGUgLSBjYWxsZWQgYnkgdGhlIENvbnRhaW5lciBiZWZvcmUgdGhpcyBiZWFuIGluc3RhbmNlCisgICAgICogaXMgcHV0IGluIHBhc3NpdmUgc3RhdGUuCisgICAgICovCisgICAgcHVibGljIHZvaWQKKyAgICBlamJQYXNzaXZhdGUoKQogICAgIHsKICAgICAgICAgbG9nKCJKdXN0U2Vzc2lvbkJlYW4uZWpiUGFzc2l2YXRlKCkuLi4iKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBzZXRTZXNzaW9uQ29udGV4dCAtIGNhbGxlZCBieSB0aGUgQ29udGFpbmVyIGFmdGVyIGNyZWF0aW9uIG9mIHRoaXMKICAgICAgKiBiZWFuIGluc3RhbmNlLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIAotICAgIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IGNvbnRleHQpIAorICAgIHB1YmxpYyB2b2lkCisgICAgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgY29udGV4dCkKICAgICB7CiAgICAgICAgIGxvZygiSnVzdFNlc3Npb25CZWFuLnNldFNlc3Npb25Db250ZXh0KGN0eCkuLi4gY3R4ID0gIiArIGN0eCk7CiAgICAgICAgIGN0eCA9IGNvbnRleHQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9qdXN0YmVhbi9Mb2cuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL2p1c3RiZWFuL0xvZy5qYXZhCmluZGV4IGYzYjVlNTUuLjM0YWE0ZjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL2p1c3RiZWFuL0xvZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL2p1c3RiZWFuL0xvZy5qYXZhCkBAIC0xNiw3ICsxNiw3IEBACiAKIHBhY2thZ2UganVzdGJlYW47CiAKLXB1YmxpYyBjbGFzcyBMb2cgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZSAKK3B1YmxpYyBjbGFzcyBMb2cgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZQogewogICBwdWJsaWMgc3RhdGljIHZvaWQKICAgbG9nIChTdHJpbmcgbWVzc2FnZSkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL2p1c3R3ZWIvSnVzdFdlYlNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL2p1c3R3ZWIvSnVzdFdlYlNlcnZsZXQuamF2YQppbmRleCA5ZDhiMjlmLi5lMGI3ODk2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9qdXN0d2ViL0p1c3RXZWJTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvanVzdHdlYi9KdXN0V2ViU2VydmxldC5qYXZhCkBAIC01Miw3ICs1Miw3IEBACiAgICAgfQogICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfSAgICAgICAgCisgICAgfQogCiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKdXN0V2ViU2VydmxldC5zZXJ2aWNlKCkuLi4gSnVzdEJlYW4gY3JlYXRlZC4iKTsKICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVTRVJOQU1FID0gIiArIGdldEluaXRQYXJhbWV0ZXIoIlVTRVJOQU1FIikpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGVqYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoZWpiL2J1aWxkLnhtbAppbmRleCA0OWFjZDJjLi44NjZjYzY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoZWpiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoZWpiL2J1aWxkLnhtbApAQCAtMjAsNyArMjAsNyBAQAogCiA8IUVOVElUWSBjb21tb25CdWlsZCBTWVNURU0gIi4vLi4vLi4vY29uZmlnL2NvbW1vbi54bWwiPgogXT4KLSAKKwogPHByb2plY3QgbmFtZT0ic3RhdGVsZXNzaGVsbG8iIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKICAgICAmY29tbW9uQnVpbGQ7CkBAIC0yOCw1MSArMjgsNTEgQEAKICAgICA8cHJvcGVydHkgbmFtZT0idGVzdE5hbWUiIHZhbHVlPSJTdGF0ZWxlc3NIZWxsb0VqYiIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJhcmNoaXZlZGlyIiB2YWx1ZT0iJHtidWlsZH0vYXJjaGl2ZXMiLz4KICAgICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgotCQk8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KLQkJPG1rZGlyIGRpcj0iJHthcmNoaXZlZGlyfSIgLz4KLQkJPHByb3BlcnR5IG5hbWU9InBvcnRhYmxlLmVhciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vZWFyd2l0aGVqYi1wb3J0YWJsZS5lYXIiLz4KLQkJPHByb3BlcnR5IG5hbWU9InBvcnRhYmxlLmphciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vZWFyd2l0aGVqYi1wb3J0YWJsZS5qYXIiLz4KLQkJPHByb3BlcnR5IG5hbWU9ImFsbC5lYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L2VhcndpdGhlamIuZWFyIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJhbGwuamFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9lYXJ3aXRoZWpiLmphciIvPgotCQk8cHJvcGVydHkgbmFtZT0iZGVwbG95cGxhbi5qYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L2VhcndpdGhlamItZGVwbG95cGxhbi5qYXIiLz4KKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0iIC8+CisgICAgICAgIDxta2RpciBkaXI9IiR7YXJjaGl2ZWRpcn0iIC8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwb3J0YWJsZS5lYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L2VhcndpdGhlamItcG9ydGFibGUuZWFyIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwb3J0YWJsZS5qYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L2VhcndpdGhlamItcG9ydGFibGUuamFyIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhbGwuZWFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9lYXJ3aXRoZWpiLmVhciIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iYWxsLmphciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vZWFyd2l0aGVqYi5qYXIiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveXBsYW4uamFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9lYXJ3aXRoZWpiLWRlcGxveXBsYW4uamFyIi8+CiAgICAgPC90YXJnZXQ+Ci0JCisKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJwcmVwYXJlIj4KLQkgICAgICAgPGphciBkZXN0ZmlsZT0iJHtkZXBsb3lwbGFuLmphcn0iPgotCSAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Jhc2VkaXJ9IiBpbmNsdWRlcz0ic3VuLWVqYi1qYXIueG1sIi8+Ci0JCTwvamFyPgkgICAKKyAgICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtkZXBsb3lwbGFuLmphcn0iPgorICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Jhc2VkaXJ9IiBpbmNsdWRlcz0ic3VuLWVqYi1qYXIueG1sIi8+CisgICAgICAgIDwvamFyPgogCi0JCTxta2RpciBkaXI9IiR7YnVpbGR9L01FVEEtSU5GIi8+Ci0JCTxjb3B5IGZpbGU9ImVqYi1qYXIueG1sIiB0b2Rpcj0iJHtidWlsZH0vTUVUQS1JTkYiLz4KLQkJPGphciBkZXN0ZmlsZT0iJHtwb3J0YWJsZS5qYXJ9Ij4KLQkJICAgPGZpbGVzZXQgZGlyPSIuLi8uLi9idWlsZC9lamIvc3RhdGVsZXNzaGVsbG8iIAorICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfS9NRVRBLUlORiIvPgorICAgICAgICA8Y29weSBmaWxlPSJlamItamFyLnhtbCIgdG9kaXI9IiR7YnVpbGR9L01FVEEtSU5GIi8+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7cG9ydGFibGUuamFyfSI+CisgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLi4vLi4vYnVpbGQvZWpiL3N0YXRlbGVzc2hlbGxvIgogICAgICAgICAgICAgICAgICAgICBleGNsdWRlcz0iKiovYXJjaGl2ZXMvKioiLz4KLQkJICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkfSIKKyAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkfSIKICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZXM9IioqL2FyY2hpdmVzLyoqIi8+Ci0JCTwvamFyPgorICAgICAgICA8L2phcj4KIAotCQk8Y29weSBmaWxlPSJzdW4tZWpiLWphci54bWwiIHRvZGlyPSIke2J1aWxkfS9NRVRBLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0JCTxqYXIgZGVzdGZpbGU9IiR7YWxsLmphcn0iPgotCQkgICA8ZmlsZXNldCBkaXI9Ii4uLy4uL2J1aWxkL2VqYi9zdGF0ZWxlc3NoZWxsbyIvPgotCQkgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGR9IgorICAgICAgICA8Y29weSBmaWxlPSJzdW4tZWpiLWphci54bWwiIHRvZGlyPSIke2J1aWxkfS9NRVRBLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YWxsLmphcn0iPgorICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4uLy4uL2J1aWxkL2VqYi9zdGF0ZWxlc3NoZWxsbyIvPgorICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGR9IgogICAgICAgICAgICAgICAgICAgICBleGNsdWRlcz0iKiovYXJjaGl2ZXMvKioiLz4KLQkJPC9qYXI+CisgICAgICAgIDwvamFyPgogCi0JCTxta2RpciBkaXI9IiR7YnVpbGR9L01FVEEtSU5GIi8+Ci0JCTxjb3B5IGZpbGU9InBvcnRhYmxlLWFwcC54bWwiIHRvZmlsZT0iJHtidWlsZH0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+Ci0JCTxjb3B5IGZpbGU9IiR7cG9ydGFibGUuamFyfSIgdG9kaXI9IiR7YnVpbGR9Ii8+Ci0JCTxqYXIgZGVzdGZpbGU9IiR7cG9ydGFibGUuZWFyfSIgYmFzZWRpcj0iJHtidWlsZH0iIGV4Y2x1ZGVzPSIqKmVqYi1qYXIueG1sIi8+CisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9L01FVEEtSU5GIi8+CisgICAgICAgIDxjb3B5IGZpbGU9InBvcnRhYmxlLWFwcC54bWwiIHRvZmlsZT0iJHtidWlsZH0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7cG9ydGFibGUuamFyfSIgdG9kaXI9IiR7YnVpbGR9Ii8+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7cG9ydGFibGUuZWFyfSIgYmFzZWRpcj0iJHtidWlsZH0iIGV4Y2x1ZGVzPSIqKmVqYi1qYXIueG1sIi8+CiAKLQkJPGRlbGV0ZSBmaWxlPSIke2J1aWxkfS9lYXJ3aXRoZWpiLXBvcnRhYmxlLmphciIvPgotCQk8ZGVsZXRlIGZpbGU9IiR7YnVpbGR9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgotCQk8ZGVsZXRlIGZpbGU9IiR7YnVpbGR9L01FVEEtSU5GL3N1bi1lamItamFyLnhtbCIvPgotCQk8ZGVsZXRlIGZpbGU9IiR7YnVpbGR9L01FVEEtSU5GL2VqYi1qYXIueG1sIi8+Ci0JCTxkZWxldGUgZmlsZT0iJHtidWlsZH0vZWFyd2l0aGVqYi1wb3J0YWJsZS5qYXIiLz4KLQkJPGNvcHkgZmlsZT0iYXBwbGljYXRpb24ueG1sIiB0b2Rpcj0iJHtidWlsZH0vTUVUQS1JTkYiLz4KLQkJPGNvcHkgZmlsZT0iYWx0LWVqYmphci54bWwiIHRvZGlyPSIke2J1aWxkfSIvPgotCQk8Y29weSBmaWxlPSJzdW4tYWx0LWVqYmphci54bWwiIHRvZGlyPSIke2J1aWxkfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0JCTxjb3B5IGZpbGU9IiR7YWxsLmphcn0iIHRvZGlyPSIke2J1aWxkfSIvPgotCQk8amFyIGRlc3RmaWxlPSIke2FsbC5lYXJ9IiBiYXNlZGlyPSIke2J1aWxkfSIgZXhjbHVkZXM9IioqL2FyY2hpdmVzLyoqIi8+CisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtidWlsZH0vZWFyd2l0aGVqYi1wb3J0YWJsZS5qYXIiLz4KKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2J1aWxkfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2J1aWxkfS9NRVRBLUlORi9zdW4tZWpiLWphci54bWwiLz4KKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2J1aWxkfS9NRVRBLUlORi9lamItamFyLnhtbCIvPgorICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YnVpbGR9L2VhcndpdGhlamItcG9ydGFibGUuamFyIi8+CisgICAgICAgIDxjb3B5IGZpbGU9ImFwcGxpY2F0aW9uLnhtbCIgdG9kaXI9IiR7YnVpbGR9L01FVEEtSU5GIi8+CisgICAgICAgIDxjb3B5IGZpbGU9ImFsdC1lamJqYXIueG1sIiB0b2Rpcj0iJHtidWlsZH0iLz4KKyAgICAgICAgPGNvcHkgZmlsZT0ic3VuLWFsdC1lamJqYXIueG1sIiB0b2Rpcj0iJHtidWlsZH0iIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2FsbC5qYXJ9IiB0b2Rpcj0iJHtidWlsZH0iLz4KKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthbGwuZWFyfSIgYmFzZWRpcj0iJHtidWlsZH0iIGV4Y2x1ZGVzPSIqKi9hcmNoaXZlcy8qKiIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kuYXNhZG1pbiIgZGVwZW5kcz0icHJlcGFyZSI+CkBAIC0xMzEsNyArMTMxLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LmF1dG9kZXBsb3kiPgogICAgIDwvdGFyZ2V0PgotCQorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9InJ1bi5wb3NpdGl2ZSIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4ucG9zaXRpdmUiIGRlcGVuZHM9ImluaXQsc2V0T3JiUG9ydCI+CkBAIC0xODksNyArMTg5LDcgQEAKICAgICAgICAgPGphdmFXaXRoUmVzdWx0CiAgICAgICAgICAgICBmb3JrPSJ0cnVlIgogICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAganZtPSIke0pBVkF9IgkKKyAgICAgICAgICAgIGp2bT0iJHtKQVZBfSIKICAgICAgICAgICAgIGNsYXNzbmFtZT0ic3RhbmRhbG9uZWNsaWVudC5IZWxsb0NsaWVudCIKICAgICAgICAgICAgIG91dHB1dD0iJHtidWlsZH0vJHtsb2cuaWR9Lm91dHB1dC5sb2ciCiAgICAgICAgICAgICByZXN1bHRwcm9wZXJ0eT0icmVzdWx0Ij4KQEAgLTIwNSw3ICsyMDUsNyBAQAogICAgICAgICAgICAgICAgIDxwYXRoIGxvY2F0aW9uPSIke2FyY2hpdmVkaXJ9L2VhcndpdGhlamIuamFyIi8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KIAotCSAgICA8YXJnIGxpbmU9IiR7YXJnLmxpc3R9Ii8+CisgICAgICAgIDxhcmcgbGluZT0iJHthcmcubGlzdH0iLz4KICAgICAgICAgPC9qYXZhV2l0aFJlc3VsdD4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InByb2Nlc3NSZXN1bHQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aHdhci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRod2FyL2J1aWxkLnhtbAppbmRleCAyNGJiZGI3Li4yNWUzNzUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRod2FyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRod2FyL2J1aWxkLnhtbApAQCAtMTY1LDcgKzE2NSw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nLmlkIiB2YWx1ZT0iJHtsb2cuaWR9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50IiBkZXBlbmRzPSJpbml0Ij4KICAgICAgICAgPGphdmFXaXRoUmVzdWx0CiAgICAgICAgICAgICBmb3JrPSJ0cnVlIgpAQCAtMjExLDEzICsyMTEsMTMgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ubmVnYXRpdmUiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZy5pZCIgdmFsdWU9IjMiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXNjIiB2YWx1ZT0iZWFyL2VhcndpdGh3YXIgVGVzdCBhc2FkbWluIGRpc2FibGUiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAKKyAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZW5hYmxlLmFzYWRtaW4iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ucG9zaXRpdmUiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZy5pZCIgdmFsdWU9IjQiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXNjIiB2YWx1ZT0iZWFyL2VhcndpdGh3YXIgVGVzdCBhc2FkbWluIGVuYWJsZSIvPgotICAgICAgICA8L2FudGNhbGw+IAorICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS5hc2FkbWluIi8+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9jbGllbnQvaTE4bi9zaW1wbGUvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL2NsaWVudC9pMThuL3NpbXBsZS9UZXN0Q2xpZW50LmphdmEKaW5kZXggNDIzMjkwMi4uMDRmMTAxYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL2NsaWVudC9pMThuL3NpbXBsZS9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL2NsaWVudC9pMThuL3NpbXBsZS9UZXN0Q2xpZW50LmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgVGVzdENsaWVudCBjbGllbnQgPSBuZXcgVGVzdENsaWVudCgpOwogICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgU3RyaW5nIHVybCA9IGFyZ3NbMF07CkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgICAgICAgICAgbG9nKCJDYXVnaHQgRVhQRUNURUQgSU9FeGNlcHRpb246ICIgKyBleCk7CiAgICAgICAgICAgICAgICAgcGFzcygpOwogICAgICAgICAgICAgfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9kZXNjcmlwdG9yL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKaW5kZXggZjdmODYyNy4uYzkwODc5NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKQEAgLTIyLDggKzIyLDggQEAKIDxzdW4td2ViLWFwcD4KICAgPHNlc3Npb24tY29uZmlnPgogICAgIDxzZXNzaW9uLW1hbmFnZXIvPgotICA8L3Nlc3Npb24tY29uZmlnPiAgCi0gIDxqc3AtY29uZmlnLz4gCisgIDwvc2Vzc2lvbi1jb25maWc+CisgIDxqc3AtY29uZmlnLz4KICAgPGxvY2FsZS1jaGFyc2V0LWluZm8gZGVmYXVsdC1sb2NhbGU9ImphIj4KICAgICAgIDxsb2NhbGUtY2hhcnNldC1tYXAgY2hhcnNldD0iRVVDLUpQIiBsb2NhbGU9ImphIiBhZ2VudD0iTW96aWxsYS80LjcgW2VuXSAoWDExOyBJOyBTdW5PUyA1Ljggc3VuNHUpIj4KICAgICAgICAgPGRlc2NyaXB0aW9uPkNoYXJzZXQgbWFwcGluZyBmb3IgSmFwYW5lc2UgbG9jYWxlPC9kZXNjcmlwdGlvbj4KQEAgLTM2LDExICszNiwxMSBAQAogICAgICAgPC9sb2NhbGUtY2hhcnNldC1tYXA+CiAgICAgICA8bG9jYWxlLWNoYXJzZXQtbWFwIGNoYXJzZXQ9IlNoaWZ0X0pJUyIgbG9jYWxlPSJqYSIgYWdlbnQ9Ik1vemlsbGEvNC43OSBbZW5dIChXaW5kb3dzIE5UIDUuMDsgVSkiPgogICAgICAgICA8ZGVzY3JpcHRpb24+Q2hhcnNldCBtYXBwaW5nIGZvciBKYXBhbmVzZSBsb2NhbGU8L2Rlc2NyaXB0aW9uPgotICAgICAgPC9sb2NhbGUtY2hhcnNldC1tYXA+ICAgICAgCisgICAgICA8L2xvY2FsZS1jaGFyc2V0LW1hcD4KICAgICAgIDxsb2NhbGUtY2hhcnNldC1tYXAgY2hhcnNldD0iSVNPLTg4NTktMSIgbG9jYWxlPSJkZV9ERSI+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5DaGFyc2V0IG1hcHBpbmcgZm9yIEdlcm1hbiBsb2NhbGU8L2Rlc2NyaXB0aW9uPgogICAgICAgPC9sb2NhbGUtY2hhcnNldC1tYXA+CiAgICAgICA8cGFyYW1ldGVyLWVuY29kaW5nIGZvcm0taGludC1maWVsZD0iY2hhcnNldHZhbCIgLz4KLSAgPC9sb2NhbGUtY2hhcnNldC1pbmZvPiAgCisgIDwvbG9jYWxlLWNoYXJzZXQtaW5mbz4KIDwvc3VuLXdlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL2J1aWxkLnhtbAppbmRleCA4NzY3YzE0Li44NDAzZGUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvbWlzYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2MvYnVpbGQueG1sCkBAIC0yMywzMCArMjMsMzAgQEAKIAogPHByb2plY3QgbmFtZT0iaTE4bi1zaW1wbGUiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLQkmY29tbW9uQnVpbGQ7CisgICAgJmNvbW1vbkJ1aWxkOwogICAgIDxwcm9wZXJ0eSBuYW1lPSJhcmNoaXZlZGlyIiB2YWx1ZT0iJHtidWlsZH0vYXJjaGl2ZXMiLz4KIAotCTx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+CisgICAgPHRhcmdldCBuYW1lPSJwcmVwYXJlIiBkZXBlbmRzPSJpbml0Ij4KICAgICAgICAgICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KICAgICAgICAgPC90YXJnZXQ+CiAKLQkKLQk8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9InByZXBhcmUiPgotCQk8amF2YWMgc3JjZGlyPSJzYW1wbGVzIiBkZXN0ZGlyPSIke2J1aWxkfSI+Ci0JICAgIAk8Y2xhc3NwYXRoPgotCSAgICAJICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7aW5zdH0vbGliL2oyZWUuamFyIi8+Ci0JICAgIAkgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtpbnN0fS9saWIvYXBwc2Vydi1ydC5qYXIiLz4JICAgIAkgIAotICAgIAkJICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7YnVpbGR9L1dFQi1JTkYvbGliL2xpYnJhcnkuamFyIi8+Ci0JCSAgICA8L2NsYXNzcGF0aD4JCQotCQkgPC9qYXZhYz4KLQk8L3RhcmdldD4KLQkKLQk8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4KLQkJPGphciBkZXN0ZmlsZT0iJHthcmNoaXZlZGlyfS9hL2IvaTE4bi1zaW1wbGUuamFyIiAKLSAgICAgICAgICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGR9Ii8+Ci0JPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIiBkZXBlbmRzPSJhc3NlbWJsZSI+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJwcmVwYXJlIj4KKyAgICAgICAgPGphdmFjIHNyY2Rpcj0ic2FtcGxlcyIgZGVzdGRpcj0iJHtidWlsZH0iPgorICAgICAgICAgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2luc3R9L2xpYi9qMmVlLmphciIvPgorICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7aW5zdH0vbGliL2FwcHNlcnYtcnQuamFyIi8+CisgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtidWlsZH0vV0VCLUlORi9saWIvbGlicmFyeS5qYXIiLz4KKyAgICAgICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICAgPC9qYXZhYz4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImNvbXBpbGUiPgorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2FyY2hpdmVkaXJ9L2EvYi9pMThuLXNpbXBsZS5qYXIiCisgICAgICAgICAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkfSIvPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCIgZGVwZW5kcz0iYXNzZW1ibGUiPgorICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL2kxOG50YWcvTWVzc2FnZVRhZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9pMThudGFnL01lc3NhZ2VUYWcuamF2YQppbmRleCA1NmQxNmYyLi5iODRiMTRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL2kxOG50YWcvTWVzc2FnZVRhZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvaTE4bnRhZy9NZXNzYWdlVGFnLmphdmEKQEAgLTI2LDExMCArMjYsMTEwIEBACiAvKioKICAqIEEgc2ltcGxlIG1lc3NhZ2UgdGFnaGFuZGxlciB0byBkaXNwbGF5IGxvY2FsaXplZCBtZXNzYWdlIGZyb20gYSByZXNvdXJjZSBidW5kbGUgYmFzZWQgb24ganNwIHJlcXVlc3QKICAqIEBhdXRob3IgIENoYW5kIEJhc2hhCi0gKiBAdmVyc2lvbgkxLjAKKyAqIEB2ZXJzaW9uICAgIDEuMAogICovCiAKIHB1YmxpYyBjbGFzcyBNZXNzYWdlVGFnIGV4dGVuZHMgVGFnU3VwcG9ydCB7CiAKLSAgICBwcml2YXRlIFN0cmluZyBrZXkJCQk9IG51bGw7Ci0JcHJpdmF0ZSBTdHJpbmcgYnVuZGxlTmFtZQk9IG51bGw7Ci0JcHJpdmF0ZSBTdHJpbmcgbGFuZ3VhZ2UJCT0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZyBjb3VudHJ5CQk9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgdmFyaWFudAkJPSBudWxsOworICAgIHByaXZhdGUgU3RyaW5nIGtleSAgICAgICAgICAgID0gbnVsbDsKKyAgICBwcml2YXRlIFN0cmluZyBidW5kbGVOYW1lICAgID0gbnVsbDsKKyAgICBwcml2YXRlIFN0cmluZyBsYW5ndWFnZSAgICAgICAgPSBudWxsOworICAgIHByaXZhdGUgU3RyaW5nIGNvdW50cnkgICAgICAgID0gbnVsbDsKKyAgICBwcml2YXRlIFN0cmluZyB2YXJpYW50ICAgICAgICA9IG51bGw7CiAKLQkvKioKLQkgKiBTZXQgdGhlIHVzZXIgcHJlZmVycmVkIGxhbmd1YWdlCi0JICovCi0JcHVibGljIHZvaWQgc2V0TGFuZ3VhZ2UoU3RyaW5nIGxhbmcpIHsKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHVzZXIgcHJlZmVycmVkIGxhbmd1YWdlCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0TGFuZ3VhZ2UoU3RyaW5nIGxhbmcpIHsKICAgICAgICAgdGhpcy5sYW5ndWFnZSA9IGxhbmc7Ci0JfQotCi0gICAgLyoqCi0JICogR2V0IHRoZSB1c2VyIHByZWZlcnJlZCBsYW5ndWFnZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TGFuZ3VhZ2UoKSB7Ci0JCXJldHVybiBsYW5ndWFnZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdGhlIHVzZXIgcHJlZmVycmVkIGNvdW50cnkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRDb3VudHJ5KFN0cmluZyBjb3VudHJ5KSB7Ci0JCXRoaXMuY291bnRyeSA9IGNvdW50cnk7Ci0JfQotCi0gICAgLyoqCi0JICogR2V0IHRoZSB1c2VyIHByZWZlcnJlZCBjb3VudHJ5Ci0JICovCi0JcHVibGljIFN0cmluZyBnZXRDb3VudHJ5KCkgewotCQlyZXR1cm4gY291bnRyeTsKICAgICB9CiAKICAgICAvKioKLQkgKiBTZXQgdGhlIHVzZXIgcHJlZmVycmVkIHZhcmlhbnQKLQkgKi8KKyAgICAgKiBHZXQgdGhlIHVzZXIgcHJlZmVycmVkIGxhbmd1YWdlCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRMYW5ndWFnZSgpIHsKKyAgICAgICAgcmV0dXJuIGxhbmd1YWdlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgdXNlciBwcmVmZXJyZWQgY291bnRyeQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldENvdW50cnkoU3RyaW5nIGNvdW50cnkpIHsKKyAgICAgICAgdGhpcy5jb3VudHJ5ID0gY291bnRyeTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIHVzZXIgcHJlZmVycmVkIGNvdW50cnkKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldENvdW50cnkoKSB7CisgICAgICAgIHJldHVybiBjb3VudHJ5OworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgdXNlciBwcmVmZXJyZWQgdmFyaWFudAorICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFZhcmlhbnQoU3RyaW5nIHZhcmlhbnQpIHsKLQkgICAgdGhpcy52YXJpYW50ID0gdmFyaWFudDsKLQl9Ci0KLSAgICAvKioKLQkgKiBHZXQgdGhlIHVzZXIgcHJlZmVycmVkIHZhcmlhbnQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFZhcmlhbnQoKSB7Ci0JICAgIHJldHVybiB2YXJpYW50OworICAgICAgICB0aGlzLnZhcmlhbnQgPSB2YXJpYW50OwogICAgIH0KIAogICAgIC8qKgotCSAqIFNldCB0aGUgdXNlciBwcmVmZXJyZWQgcmVzb3VyY2UgYnVuZGxlIG5hbWUKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXROYW1lIChTdHJpbmcgbmFtZSkgewotCQl0aGlzLmJ1bmRsZU5hbWUgPSBuYW1lOwotCX0KKyAgICAgKiBHZXQgdGhlIHVzZXIgcHJlZmVycmVkIHZhcmlhbnQKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldFZhcmlhbnQoKSB7CisgICAgICAgIHJldHVybiB2YXJpYW50OworICAgIH0KIAogICAgIC8qKgotCSAqIFNldCB0aGUgbWVzc2FnZSBrZXkgcmVxdWlyZWQgdG8gcmV0cmlldmUgbWVzc2FnZSBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUKLQkgKi8KKyAgICAgKiBTZXQgdGhlIHVzZXIgcHJlZmVycmVkIHJlc291cmNlIGJ1bmRsZSBuYW1lCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0TmFtZSAoU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgdGhpcy5idW5kbGVOYW1lID0gbmFtZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIG1lc3NhZ2Uga2V5IHJlcXVpcmVkIHRvIHJldHJpZXZlIG1lc3NhZ2UgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlCisgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0S2V5KFN0cmluZyBrZXkpIHsKICAgICAgICAgdGhpcy5rZXkgPSBrZXk7CiAgICAgfQogCiAgICAgLyoqCi0JICogR2V0IHRoZSBtZXNzYWdlIGtleSByZXF1aXJlZCB0byByZXRyaWV2ZSBtZXNzYWdlIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZQotCSAqLworICAgICAqIEdldCB0aGUgbWVzc2FnZSBrZXkgcmVxdWlyZWQgdG8gcmV0cmlldmUgbWVzc2FnZSBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUKKyAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEtleSgpIHsKICAgICAgICAgcmV0dXJuIGtleTsKICAgICB9CiAKICAgICAvKioKLQkgKiBHZXRzIHRoZSB1c2VyIHByZWZlcnJlZCByZXNvdXJjZSBidW5kbGUgbmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuIGJ1bmRsZU5hbWU7Ci0JfQorICAgICAqIEdldHMgdGhlIHVzZXIgcHJlZmVycmVkIHJlc291cmNlIGJ1bmRsZSBuYW1lCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworICAgICAgICByZXR1cm4gYnVuZGxlTmFtZTsKKyAgICB9CiAKICAgICAvKioKLQkgKiBXaWxsIGJlIGNhbGxlZCBieSB0aGUgSlNQIEVuZ2luZSB3aGVuIGl0IGVuY291bnRlcnMgdGhlIHN0YXJ0IG9mIHRoZSB0YWcKLQkgKi8KKyAgICAgKiBXaWxsIGJlIGNhbGxlZCBieSB0aGUgSlNQIEVuZ2luZSB3aGVuIGl0IGVuY291bnRlcnMgdGhlIHN0YXJ0IG9mIHRoZSB0YWcKKyAgICAgKi8KICAgICBwdWJsaWMgaW50IGRvU3RhcnRUYWcoKSB0aHJvd3MgSnNwVGFnRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIEVWQUxfQk9EWV9JTkNMVURFOwogICAgIH0KIAogICAgIC8qKgotCSAqIFdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBKU1AgRW5naW5lIHdoZW4gaXQgZW5jb3VudGVycyB0aGUgZW5kIG9mIHRoZSB0YWcKLQkgKi8KKyAgICAgKiBXaWxsIGJlIGNhbGxlZCBieSB0aGUgSlNQIEVuZ2luZSB3aGVuIGl0IGVuY291bnRlcnMgdGhlIGVuZCBvZiB0aGUgdGFnCisgICAgICovCiAgICAgcHVibGljIGludCBkb0VuZFRhZygpIHRocm93cyBKc3BUYWdFeGNlcHRpb24gewogICAgICAgICB0cnkgewotCQkJaWYobGFuZ3VhZ2UgIT0gbnVsbCkgewotCQkJCWlmKCBjb3VudHJ5ID09IG51bGwpCi0JCQkJCWNvdW50cnkgPSAiIjsKLQkJCQlpZih2YXJpYW50ID09IG51bGwpCi0JCQkJCXZhcmlhbnQgPSAiIjsKLQkJCX0gZWxzZSBsYW5ndWFnZSA9ICJlbiI7Ci0JCQlqYXZhLnV0aWwuTG9jYWxlIGxvY2FsZSA9IG5ldyBMb2NhbGUobGFuZ3VhZ2UsIGNvdW50cnksIHZhcmlhbnQpOwotCQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKGJ1bmRsZU5hbWUsIGxvY2FsZSk7Ci0JCQlTdHJpbmcgbWVzc2FnZSA9IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KTsKLQkJCXBhZ2VDb250ZXh0LmdldE91dCgpLndyaXRlKCJNZXNzYWdlIGZyb20gcmVzb3VyY2UgYnVuZGxlOiIgKyBtZXNzYWdlKTsKLQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgaWYobGFuZ3VhZ2UgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmKCBjb3VudHJ5ID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgIGNvdW50cnkgPSAiIjsKKyAgICAgICAgICAgICAgICBpZih2YXJpYW50ID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSAiIjsKKyAgICAgICAgICAgIH0gZWxzZSBsYW5ndWFnZSA9ICJlbiI7CisgICAgICAgICAgICBqYXZhLnV0aWwuTG9jYWxlIGxvY2FsZSA9IG5ldyBMb2NhbGUobGFuZ3VhZ2UsIGNvdW50cnksIHZhcmlhbnQpOworICAgICAgICAgICAgUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKGJ1bmRsZU5hbWUsIGxvY2FsZSk7CisgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KTsKKyAgICAgICAgICAgIHBhZ2VDb250ZXh0LmdldE91dCgpLndyaXRlKCJNZXNzYWdlIGZyb20gcmVzb3VyY2UgYnVuZGxlOiIgKyBtZXNzYWdlKTsKKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEpzcFRhZ0V4Y2VwdGlvbigiRXJyb3I6ICIgKyBlKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gRVZBTF9QQUdFOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L0ZvcndhcmRlZFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9Gb3J3YXJkZWRTZXJ2bGV0LmphdmEKaW5kZXggMDg0MGZjMC4uMGVkNmVhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L0ZvcndhcmRlZFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvRm9yd2FyZGVkU2VydmxldC5qYXZhCkBAIC0xNiw3ICsxNiw3IEBACiAvKioKICAqIFNlcnZsZXQgZm9yd2FyZGVkIGZyb20gU2ltcGxlSTE4blNlcnZsZXQKICAqIEBhdXRob3IgIENoYW5kIEJhc2hhCi0gKiBAdmVyc2lvbgkxLjAKKyAqIEB2ZXJzaW9uICAgIDEuMAogICovCiBwdWJsaWMgY2xhc3MgRm9yd2FyZGVkU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIApAQCAtNDAsMTEgKzQwLDExIEBACiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1JlcXVlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICBTdHJpbmcgY2hhcnNldHZhbAkJCT0JcmVxLmdldFBhcmFtZXRlcigiY2hhcnNldHZhbCIpOworICAgICAgICBTdHJpbmcgY2hhcnNldHZhbCAgICAgICAgICAgID0gICAgcmVxLmdldFBhcmFtZXRlcigiY2hhcnNldHZhbCIpOwogICAgICAgICByZXEuc2V0Q2hhcmFjdGVyRW5jb2RpbmcoY2hhcnNldHZhbCk7CiAgICAgICAgIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sO2NoYXJzZXQ9IiArIGNoYXJzZXR2YWwgKyAiIik7Ci0gICAgICAgIGphdmEuaW8uUHJpbnRXcml0ZXIgb3V0CQk9CXJlcy5nZXRXcml0ZXIoKTsKLSAgICAgICAgU3RyaW5nIG5hbWUJCQkJCT0JcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOworICAgICAgICBqYXZhLmlvLlByaW50V3JpdGVyIG91dCAgICAgICAgPSAgICByZXMuZ2V0V3JpdGVyKCk7CisgICAgICAgIFN0cmluZyBuYW1lICAgICAgICAgICAgICAgICAgICA9ICAgIHJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+U2VydmxldDwvdGl0bGU+Iik7CkBAIC01Miw4ICs1Miw4IEBACiAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxIMz4gVGhpcyBpcyB0aGUgbmFtZSBmcm9tIGZvcndhcmRlZCBzZXJ2bGV0IDwvSDM+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8SDQ+IFRoZSBuYW1lIGVudGVyZWQgd2FzOiIgKyBuYW1lICsgIjwvaDQ+Iik7Ci0JCW91dC5wcmludGxuKCI8YnI+Iik7Ci0JCW91dC5wcmludGxuKCI8UD48QlI+PEEgSFJFRj1cIi9pMThuLXNpbXBsZVwiPkJhY2sgdG8gc2FtcGxlIGhvbWU8L0E+PC9QPiIpOworICAgICAgICBvdXQucHJpbnRsbigiPGJyPiIpOworICAgICAgICBvdXQucHJpbnRsbigiPFA+PEJSPjxBIEhSRUY9XCIvaTE4bi1zaW1wbGVcIj5CYWNrIHRvIHNhbXBsZSBob21lPC9BPjwvUD4iKTsKICAgICAgICAgb3V0LnByaW50bG4oIjwvYm9keT4iKTsKICAgICAgICAgb3V0LnByaW50bG4oIjwvaHRtbD4iKTsKICAgICAgICAgb3V0LmNsb3NlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvSW5jbHVkZWRTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvSW5jbHVkZWRTZXJ2bGV0LmphdmEKaW5kZXggYzMxNWI0Ni4uZGM3ZjllNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L0luY2x1ZGVkU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9JbmNsdWRlZFNlcnZsZXQuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogLyoqCiAgKiBTZXJ2bGV0IGluY2x1ZGVkIGluIFNpbXBsZUkxOG5TZXJ2bGV0CiAgKiBAYXV0aG9yICBDaGFuZCBCYXNoYQotICogQHZlcnNpb24JMS4wCisgKiBAdmVyc2lvbiAgICAxLjAKICAqLwogcHVibGljIGNsYXNzIEluY2x1ZGVkU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIApAQCAtNDIsMTUgKzQyLDE1IEBACiAgICAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1JlcXVlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewogICAgICAgICB0cnkgewotCQkJamF2YS5pby5QcmludFdyaXRlciBvdXQJPQlyZXMuZ2V0V3JpdGVyKCk7Ci0JCQlTdHJpbmcgbmFtZQkJCQk9CXJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKKyAgICAgICAgICAgIGphdmEuaW8uUHJpbnRXcml0ZXIgb3V0ICAgID0gICAgcmVzLmdldFdyaXRlcigpOworICAgICAgICAgICAgU3RyaW5nIG5hbWUgICAgICAgICAgICAgICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CiAKLQkJCW91dC5wcmludGxuKCI8SDM+IFRoaXMgaXMgdGhlIG5hbWUgZnJvbSBpbmNsdWRlZCBzZXJ2bGV0IDwvSDM+Iik7Ci0JCQlvdXQucHJpbnRsbigiPEg0PiBUaGUgbmFtZSBlbnRlcmVkIHdhczoiICsgbmFtZSArICI8L2g0PiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxIMz4gVGhpcyBpcyB0aGUgbmFtZSBmcm9tIGluY2x1ZGVkIHNlcnZsZXQgPC9IMz4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8SDQ+IFRoZSBuYW1lIGVudGVyZWQgd2FzOiIgKyBuYW1lICsgIjwvaDQ+Iik7CiAKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKiogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IG1ldGhvZC4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9Mb2NhbGVDaGFyc2V0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L0xvY2FsZUNoYXJzZXRTZXJ2bGV0LmphdmEKaW5kZXggNGU3ODA0My4uZTAxNDk3NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L0xvY2FsZUNoYXJzZXRTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L0xvY2FsZUNoYXJzZXRTZXJ2bGV0LmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIAogICogQGF1dGhvciAgQ2hhbmQgQmFzaGEKIAotICogQHZlcnNpb24JMS4wCisgKiBAdmVyc2lvbiAgICAxLjAKIAogICovCiAKQEAgLTUyLDE1ICs1MiwxNSBAQAogCiAKIAotICAgICAgICBTdHJpbmcgbmFtZQkJCT0JcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOworICAgICAgICBTdHJpbmcgbmFtZSAgICAgICAgICAgID0gICAgcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOwogCi0gICAgICAgIFN0cmluZyBjaGFyc2V0dmFsCT0JcmVxLmdldENoYXJhY3RlckVuY29kaW5nKCk7CisgICAgICAgIFN0cmluZyBjaGFyc2V0dmFsICAgID0gICAgcmVxLmdldENoYXJhY3RlckVuY29kaW5nKCk7CiAKICAgICAgICAgaWYgKGNoYXJzZXR2YWwgIT0gbnVsbCkgewogCi0gICAgICAgIAlyZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDtjaGFyc2V0PSIgKyBjaGFyc2V0dmFsICsgIiIpOworICAgICAgICAgICAgcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7Y2hhcnNldD0iICsgY2hhcnNldHZhbCArICIiKTsKIAotCQl9IGVsc2UgcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7Y2hhcnNldD1VVEYtOCIpOworICAgICAgICB9IGVsc2UgcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7Y2hhcnNldD1VVEYtOCIpOwogCiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlcy5nZXRXcml0ZXIoKTsKIApAQCAtODIsOSArODIsOSBAQAogCiAgICAgICAgIG91dC5wcmludGxuKCI8YnI+Iik7CiAKLQkJb3V0LnByaW50bG4oIjxQPjxCUj48QSBIUkVGPVwiL2kxOG4tc2ltcGxlXCI+QmFjayB0byBzYW1wbGUgaG9tZTwvQT48L1A+Iik7CisgICAgICAgIG91dC5wcmludGxuKCI8UD48QlI+PEEgSFJFRj1cIi9pMThuLXNpbXBsZVwiPkJhY2sgdG8gc2FtcGxlIGhvbWU8L0E+PC9QPiIpOwogCi0JCW91dC5wcmludGxuKCI8L2JvZHk+PC9odG1sPiIpOworICAgICAgICBvdXQucHJpbnRsbigiPC9ib2R5PjwvaHRtbD4iKTsKIAogICAgICAgICBvdXQuY2xvc2UoKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L1NpbXBsZUZpbHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L1NpbXBsZUZpbHRlci5qYXZhCmluZGV4IGM0YWExZDcuLjQ1Y2FiMGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9TaW1wbGVGaWx0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvU2ltcGxlRmlsdGVyLmphdmEKQEAgLTIxLDkgKzIxLDkgQEAKIAogcHVibGljIGNsYXNzIFNpbXBsZUZpbHRlciBpbXBsZW1lbnRzIEZpbHRlciB7CiAKLSAgICBwcml2YXRlIEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcJPSBudWxsOwotICAgIHByaXZhdGUgYm9vbGVhbiB1c2VmaWx0ZXIJCQk9IGZhbHNlOwotICAgIHByaXZhdGUgU3RyaW5nIGVuY29kaW5nCQkJCT0gbnVsbDsKKyAgICBwcml2YXRlIEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcgICAgPSBudWxsOworICAgIHByaXZhdGUgYm9vbGVhbiB1c2VmaWx0ZXIgICAgICAgICAgICA9IGZhbHNlOworICAgIHByaXZhdGUgU3RyaW5nIGVuY29kaW5nICAgICAgICAgICAgICAgID0gbnVsbDsKIAogICAgIC8qKgogICAgICAqIENhbGxlZCBieSB0aGUgd2ViIGNvbnRhaW5lciB0byBpbmRpY2F0ZSB0byBhIGZpbHRlciB0aGF0IGl0IGlzIGJlaW5nIHBsYWNlZCBpbnRvIHNlcnZpY2UKQEAgLTMxLDE2ICszMSwxNiBAQAogICAgICAqIEBwYXJhbSBmaWx0ZXJDb25maWcgVGhlIGZpbHRlciBjb25maWd1cmF0aW9uIG9iamVjdAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGluaXQoRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewotCQl0cnkgewotCQkJdGhpcy5maWx0ZXJDb25maWcJPQlmaWx0ZXJDb25maWc7Ci0JCQlTdHJpbmcgcGFyYW0JCT0JZmlsdGVyQ29uZmlnLmdldEluaXRQYXJhbWV0ZXIoInVzZWZpbHRlciIpOwotCQkJdGhpcy5lbmNvZGluZwkJPQlmaWx0ZXJDb25maWcuZ2V0SW5pdFBhcmFtZXRlcigiZW5jb2RpbmciKTsKLQkJCWlmIChwYXJhbS5lcXVhbHMoInRydWUiKSkgewotCQkJCXRoaXMudXNlZmlsdGVyCT0JdHJ1ZTsKLQkJCX0KLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHRoaXMuZmlsdGVyQ29uZmlnICAgID0gICAgZmlsdGVyQ29uZmlnOworICAgICAgICAgICAgU3RyaW5nIHBhcmFtICAgICAgICA9ICAgIGZpbHRlckNvbmZpZy5nZXRJbml0UGFyYW1ldGVyKCJ1c2VmaWx0ZXIiKTsKKyAgICAgICAgICAgIHRoaXMuZW5jb2RpbmcgICAgICAgID0gICAgZmlsdGVyQ29uZmlnLmdldEluaXRQYXJhbWV0ZXIoImVuY29kaW5nIik7CisgICAgICAgICAgICBpZiAocGFyYW0uZXF1YWxzKCJ0cnVlIikpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnVzZWZpbHRlciAgICA9ICAgIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCkBAIC01MSwxOCArNTEsMTggQEAKICAgICAgKiBAcGFyYW0gY2hhaW4gVGhlIGZpbHRlciBjaGFpbiB3ZSBhcmUgcHJvY2Vzc2luZwogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywgRmlsdGVyQ2hhaW4gY2hhaW4pCi0JdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKLQkJdHJ5IHsKLSAgICAgICAgCWlmICh1c2VmaWx0ZXIpIHsKLSAgICAgICAgCSAgICBTdHJpbmcgZW5jb2RpbmcgPSBnZXRFbmNvZGluZyhyZXEpOwotICAgICAgICAJICAgIGlmIChlbmNvZGluZyAhPSBudWxsKSB7Ci0gICAgICAgIAkgICAgICAgIHJlcS5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbmNvZGluZyk7Ci0JCQkJfQotCQkJfQotICAgICAgICAJY2hhaW4uZG9GaWx0ZXIocmVxLCByZXMpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQorICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAodXNlZmlsdGVyKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcocmVxKTsKKyAgICAgICAgICAgICAgICBpZiAoZW5jb2RpbmcgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICByZXEuc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW5jb2RpbmcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoYWluLmRvRmlsdGVyKHJlcSwgcmVzKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgKiBDYWxsZWQgYnkgdGhlIHdlYiBjb250YWluZXIgdG8gaW5kaWNhdGUgdG8gYSBmaWx0ZXIgdGhhdCBpdCBpcyBiZWluZyB0YWtlbiBvdXQgb2Ygc2VydmljZS4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewotICAgICAgICB0aGlzLmVuY29kaW5nCQk9IG51bGw7Ci0gICAgICAgIHRoaXMuZmlsdGVyQ29uZmlnCT0gbnVsbDsKKyAgICAgICAgdGhpcy5lbmNvZGluZyAgICAgICAgPSBudWxsOworICAgICAgICB0aGlzLmZpbHRlckNvbmZpZyAgICA9IG51bGw7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L1NpbXBsZUZpbHRlclNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9TaW1wbGVGaWx0ZXJTZXJ2bGV0LmphdmEKaW5kZXggNGU2MmVkMC4uYTY0MTBhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L1NpbXBsZUZpbHRlclNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvU2ltcGxlRmlsdGVyU2VydmxldC5qYXZhCkBAIC00MCwxMCArNDAsMTAgQEAKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZyBjaGFyc2V0dmFsID0gcmVxLmdldENoYXJhY3RlckVuY29kaW5nKCk7CiAgICAgICAgIGlmIChjaGFyc2V0dmFsICE9IG51bGwpIHsKLSAgICAgICAgCXJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sO2NoYXJzZXQ9IiArIGNoYXJzZXR2YWwgKyAiIik7Ci0JCX0gZWxzZSByZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDtjaGFyc2V0PVVURi04Iik7Ci0gICAgICAgIGphdmEuaW8uUHJpbnRXcml0ZXIgb3V0CQk9CXJlcy5nZXRXcml0ZXIoKTsKLSAgICAgICAgU3RyaW5nIG5hbWUJCQkJCT0JcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOworICAgICAgICAgICAgcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7Y2hhcnNldD0iICsgY2hhcnNldHZhbCArICIiKTsKKyAgICAgICAgfSBlbHNlIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sO2NoYXJzZXQ9VVRGLTgiKTsKKyAgICAgICAgamF2YS5pby5QcmludFdyaXRlciBvdXQgICAgICAgID0gICAgcmVzLmdldFdyaXRlcigpOworICAgICAgICBTdHJpbmcgbmFtZSAgICAgICAgICAgICAgICAgICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CiAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwogICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlNpbXBsZSBzZXJ2bGV0IHRvIHZlcmlmeSB0aGUgZmlsdGVyPC90aXRsZT4iKTsKQEAgLTUxLDggKzUxLDggQEAKICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICBvdXQucHJpbnRsbigiPEgzPiBUaGlzIGlzIHRoZSBuYW1lIHlvdSBoYXZlIGVudGVyZWQgIiArIG5hbWUgKyAiPC9IMz4iKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxIND4gVGhlIGNoYXJhY3RlciBlbmNvZGluZyBzZXQgYnkgdGhlIGZpbHRlciBpczogIiArIGNoYXJzZXR2YWwgKyAiPC9oND4iKTsKLQkJb3V0LnByaW50bG4oIjxicj4iKTsKLQkJb3V0LnByaW50bG4oIjxQPjxCUj48QSBIUkVGPVwiL2kxOG4tc2ltcGxlXCI+QmFjayB0byBzYW1wbGUgaG9tZTwvQT48L1A+Iik7CisgICAgICAgIG91dC5wcmludGxuKCI8YnI+Iik7CisgICAgICAgIG91dC5wcmludGxuKCI8UD48QlI+PEEgSFJFRj1cIi9pMThuLXNpbXBsZVwiPkJhY2sgdG8gc2FtcGxlIGhvbWU8L0E+PC9QPiIpOwogICAgICAgICBvdXQucHJpbnRsbigiPC9ib2R5PiIpOwogICAgICAgICBvdXQucHJpbnRsbigiPC9odG1sPiIpOwogICAgICAgICBvdXQuY2xvc2UoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9TaW1wbGVJMThuU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L1NpbXBsZUkxOG5TZXJ2bGV0LmphdmEKaW5kZXggYmEwMmEyYy4uMTEzMjQ5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L1NpbXBsZUkxOG5TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L1NpbXBsZUkxOG5TZXJ2bGV0LmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFRoaXMgaXMgYSBzaW1wbGUgc2VydmxldCB0aGF0IGRlbW9uc3RyYXRlcyBzb21lIG9mIG1vc3QgY29tbW9ubHkgdXNlZCBpMThuIGZlYXR1cmVzIG9mCiAgKiB0aGUgQXBwbGljYXRpb24gU2VydmVyJ3MgSmF2YSBTZXJ2bGV0IEFQSSBJbXBsZW1lbnRhdGlvbgogICogQGF1dGhvciAgQ2hhbmQgQmFzaGEKLSAqIEB2ZXJzaW9uCTEuMAorICogQHZlcnNpb24gICAgMS4wCiAgKi8KIHB1YmxpYyBjbGFzcyBTaW1wbGVJMThuU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIApAQCAtNDQsODAgKzQ0LDgwIEBACiAgICAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1JlcXVlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewogICAgICAgICB0cnkgewotCQkJSHR0cFNlc3Npb24gc2Vzc2lvbgk9CXJlcS5nZXRTZXNzaW9uKGZhbHNlKTsKLQkJCWlmKHNlc3Npb24gIT0gbnVsbCkgewotCQkJCVN0cmluZyBzZXNzaW9uY2hhcnNldCA9IChTdHJpbmcpc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNoYXJzZXQiKTsKLQkJCQl0cnkgewotCQkJCQlyZXEuc2V0Q2hhcmFjdGVyRW5jb2Rpbmcoc2Vzc2lvbmNoYXJzZXQpOwotCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCQkJfQotCQkJU3RyaW5nIGZ1bmMJCT0JcmVxLmdldFBhcmFtZXRlcigiZnVuYyIpOwotCQkJU3RyaW5nIGFjdGlvbgk9CXJlcS5nZXRQYXJhbWV0ZXIoImFjdGlvbiIpOworICAgICAgICAgICAgSHR0cFNlc3Npb24gc2Vzc2lvbiAgICA9ICAgIHJlcS5nZXRTZXNzaW9uKGZhbHNlKTsKKyAgICAgICAgICAgIGlmKHNlc3Npb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIFN0cmluZyBzZXNzaW9uY2hhcnNldCA9IChTdHJpbmcpc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNoYXJzZXQiKTsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICByZXEuc2V0Q2hhcmFjdGVyRW5jb2Rpbmcoc2Vzc2lvbmNoYXJzZXQpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nIGZ1bmMgICAgICAgID0gICAgcmVxLmdldFBhcmFtZXRlcigiZnVuYyIpOworICAgICAgICAgICAgU3RyaW5nIGFjdGlvbiAgICA9ICAgIHJlcS5nZXRQYXJhbWV0ZXIoImFjdGlvbiIpOwogCi0JCQlpZihmdW5jLmVxdWFscygic2VuZElucHV0IikpIHsKLQkJCQlTdHJpbmcgY2hhcnNldHZhbAk9CXJlcS5nZXRQYXJhbWV0ZXIoImNoYXJzZXR2YWwiKTsKLQkJCQlzZW5kSW5wdXQgKHJlcSwgcmVzLCBjaGFyc2V0dmFsLCBhY3Rpb24pOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoIGFjdGlvbi5lcXVhbHMoImZvcm1hdERhdGUiKSApIHsKLQkJCQkJZm9ybWF0RGF0ZSAocmVxLCByZXMpOwotCQkJCX0gZWxzZSBpZiAoIGFjdGlvbi5lcXVhbHMoInNldENoYXJFbmNvZGluZyIpICkgewotCQkJCQlzZXRDaGFyRW5jb2RpbmcgKHJlcSwgcmVzKTsKLQkJCQl9IGVsc2UgaWYgKCBhY3Rpb24uZXF1YWxzKCJpbmNsdWRlU2VydmxldCIpICkgewotCQkJCQlpbmNsdWRlU2VydmxldCAocmVxLCByZXMpOwotCQkJCX0gZWxzZSBpZiAoIGFjdGlvbi5lcXVhbHMoImZvcndhcmRTZXJ2bGV0IikgKSB7Ci0JCQkJCWZvcndhcmRTZXJ2bGV0IChyZXEsIHJlcyk7Ci0JCQkJfSBlbHNlIGlmICggYWN0aW9uLmVxdWFscygic2VuZEVycm9yTWVzc2FnZSIpICkgewotCQkJCQlzZW5kRXJyb3JNZXNzYWdlIChyZXEsIHJlcyk7Ci0JCQkJfSBlbHNlIGlmICggYWN0aW9uLmVxdWFscygidXNlUmVzb3VyY2VCdW5kbGUiKSApIHsKLQkJCQkJdXNlUmVzb3VyY2VCdW5kbGUgKHJlcSwgcmVzKTsKLQkJCQl9IGVsc2UgaWYgKCBhY3Rpb24uZXF1YWxzKCJmb3J3YXJkSnNwIikgKSB7Ci0JCQkJCWZvcndhcmRKc3AgKHJlcSwgcmVzKTsKLQkJCQl9Ci0JCQl9Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCS8qKiBTZXRzIHRoZSBjaGFyc2V0IGF0dHJpYnV0ZSB0byB0aGUgc2Vzc2lvbiBhbmQgZ2VuZXJhdGVzIGFuIGlucHV0IGZvcm0KLQkgKiAgQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0Ci0JICogIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCisgICAgICAgICAgICBpZihmdW5jLmVxdWFscygic2VuZElucHV0IikpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgY2hhcnNldHZhbCAgICA9ICAgIHJlcS5nZXRQYXJhbWV0ZXIoImNoYXJzZXR2YWwiKTsKKyAgICAgICAgICAgICAgICBzZW5kSW5wdXQgKHJlcSwgcmVzLCBjaGFyc2V0dmFsLCBhY3Rpb24pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIGFjdGlvbi5lcXVhbHMoImZvcm1hdERhdGUiKSApIHsKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0RGF0ZSAocmVxLCByZXMpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGFjdGlvbi5lcXVhbHMoInNldENoYXJFbmNvZGluZyIpICkgeworICAgICAgICAgICAgICAgICAgICBzZXRDaGFyRW5jb2RpbmcgKHJlcSwgcmVzKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBhY3Rpb24uZXF1YWxzKCJpbmNsdWRlU2VydmxldCIpICkgeworICAgICAgICAgICAgICAgICAgICBpbmNsdWRlU2VydmxldCAocmVxLCByZXMpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGFjdGlvbi5lcXVhbHMoImZvcndhcmRTZXJ2bGV0IikgKSB7CisgICAgICAgICAgICAgICAgICAgIGZvcndhcmRTZXJ2bGV0IChyZXEsIHJlcyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggYWN0aW9uLmVxdWFscygic2VuZEVycm9yTWVzc2FnZSIpICkgeworICAgICAgICAgICAgICAgICAgICBzZW5kRXJyb3JNZXNzYWdlIChyZXEsIHJlcyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggYWN0aW9uLmVxdWFscygidXNlUmVzb3VyY2VCdW5kbGUiKSApIHsKKyAgICAgICAgICAgICAgICAgICAgdXNlUmVzb3VyY2VCdW5kbGUgKHJlcSwgcmVzKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBhY3Rpb24uZXF1YWxzKCJmb3J3YXJkSnNwIikgKSB7CisgICAgICAgICAgICAgICAgICAgIGZvcndhcmRKc3AgKHJlcSwgcmVzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgfQorICAgIC8qKiBTZXRzIHRoZSBjaGFyc2V0IGF0dHJpYnV0ZSB0byB0aGUgc2Vzc2lvbiBhbmQgZ2VuZXJhdGVzIGFuIGlucHV0IGZvcm0KKyAgICAgKiAgQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CisgICAgICogIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCiAgICAgICovCi0JcHJvdGVjdGVkIHZvaWQgc2VuZElucHV0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcywgU3RyaW5nIGNoYXJzZXR2YWwsIFN0cmluZyBhY3Rpb24pCisgICAgcHJvdGVjdGVkIHZvaWQgc2VuZElucHV0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcywgU3RyaW5nIGNoYXJzZXR2YWwsIFN0cmluZyBhY3Rpb24pCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJdHJ5IHsKLQkJCUh0dHBTZXNzaW9uIHNlc3Npb24JPQlyZXEuZ2V0U2Vzc2lvbih0cnVlKTsKLQkJCXNlc3Npb24uc2V0QXR0cmlidXRlKCJjaGFyc2V0IiwgY2hhcnNldHZhbCk7Ci0JCQlyZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDsgY2hhcnNldD0iICsgY2hhcnNldHZhbCk7Ci0JCQlQcmludFdyaXRlciBvdXQgPSByZXMuZ2V0V3JpdGVyKCk7Ci0JCQlvdXQucHJpbnRsbigiPGh0bWw+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGhlYWQ+Iik7Ci0JCQlvdXQucHJpbnRsbigiPHRpdGxlPlNlcnZsZXQgaTE4biBzYW1wbGVzPC90aXRsZT48L2hlYWQ+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGJvZHk+PGJyPiIpOwotCQkJb3V0LnByaW50bG4oIjxQPjxGT05UIEZBQ0U9XCJUaW1lcyBOZXcgUm9tYW5cIj48Rk9OVCBTSVpFPTY+PEI+U2VydmxldCBpMThuIHNhbXBsZXM8L0I+PC9GT05UPjwvRk9OVD48L1A+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGZvcm0gbmFtZT1cImkxOG4tc2ltcGxlXCIgbWV0aG9kPVwicG9zdFwiIGFjdGlvbj1cIi9pMThuLXNpbXBsZS9TaW1wbGVJMThuU2VydmxldFwiPiIpOwotCQkJb3V0LnByaW50bG4oIjx0YWJsZT4iKTsKLQkJCW91dC5wcmludGxuKCI8dHI+Iik7Ci0JCQlvdXQucHJpbnRsbigiPHRkPjxIMz5QbGVhc2UgZW50ZXIgeW91ciBuYW1lOjwvSDM+PC90ZD4iKTsKLQkJCW91dC5wcmludGxuKCI8dGQ+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIm5hbWVcIiBzaXplPVwiMjBcIj4iKTsKLQkJCW91dC5wcmludGxuKCI8L3RkPiIpOwotCQkJb3V0LnByaW50bG4oIjwvdHI+Iik7Ci0JCQlvdXQucHJpbnRsbigiPC90YWJsZT4iKTsKLQkJCW91dC5wcmludGxuKCI8cHJlPiIpOwotCQkJb3V0LnByaW50bG4oIjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1TdWJtaXQ+Iik7Ci0JCQlvdXQucHJpbnRsbigiPC9wcmU+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldHZhbCB2YWx1ZT0iICsgY2hhcnNldHZhbCArICI+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0aW9uIHZhbHVlPSIgKyBhY3Rpb24gKyAiPiIpOwotCQkJb3V0LnByaW50bG4oIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWZ1bmMgdmFsdWU9ZXhlYz4iKTsKLQkJCW91dC5wcmludGxuKCI8YnI+Iik7Ci0JCQlvdXQucHJpbnRsbigiPFA+PEJSPjxBIEhSRUY9XCIvaTE4bi1zaW1wbGVcIj5CYWNrIHRvIHNhbXBsZSBob21lPC9BPjwvUD4iKTsKLQkJCW91dC5wcmludGxuKCI8L2Zvcm0+Iik7Ci0JCQlvdXQucHJpbnRsbigiPC9ib2R5PiIpOwotCQkJb3V0LnByaW50bG4oIjwvaHRtbD4iKTsKLQkJCW91dC5jbG9zZSgpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgSHR0cFNlc3Npb24gc2Vzc2lvbiAgICA9ICAgIHJlcS5nZXRTZXNzaW9uKHRydWUpOworICAgICAgICAgICAgc2Vzc2lvbi5zZXRBdHRyaWJ1dGUoImNoYXJzZXQiLCBjaGFyc2V0dmFsKTsKKyAgICAgICAgICAgIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sOyBjaGFyc2V0PSIgKyBjaGFyc2V0dmFsKTsKKyAgICAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlcy5nZXRXcml0ZXIoKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+U2VydmxldCBpMThuIHNhbXBsZXM8L3RpdGxlPjwvaGVhZD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT48YnI+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPFA+PEZPTlQgRkFDRT1cIlRpbWVzIE5ldyBSb21hblwiPjxGT05UIFNJWkU9Nj48Qj5TZXJ2bGV0IGkxOG4gc2FtcGxlczwvQj48L0ZPTlQ+PC9GT05UPjwvUD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Zm9ybSBuYW1lPVwiaTE4bi1zaW1wbGVcIiBtZXRob2Q9XCJwb3N0XCIgYWN0aW9uPVwiL2kxOG4tc2ltcGxlL1NpbXBsZUkxOG5TZXJ2bGV0XCI+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRhYmxlPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0cj4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGQ+PEgzPlBsZWFzZSBlbnRlciB5b3VyIG5hbWU6PC9IMz48L3RkPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0ZD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwibmFtZVwiIHNpemU9XCIyMFwiPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvdGQ+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPC90cj4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8L3RhYmxlPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxwcmU+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVN1Ym1pdD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8L3ByZT4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0dmFsIHZhbHVlPSIgKyBjaGFyc2V0dmFsICsgIj4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3Rpb24gdmFsdWU9IiArIGFjdGlvbiArICI+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZnVuYyB2YWx1ZT1leGVjPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8UD48QlI+PEEgSFJFRj1cIi9pMThuLXNpbXBsZVwiPkJhY2sgdG8gc2FtcGxlIGhvbWU8L0E+PC9QPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvZm9ybT4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2JvZHk+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9odG1sPiIpOworICAgICAgICAgICAgb3V0LmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqIEdldHMgdGhlIGxvY2FsZSBpbmZvcm1hdGlvbiBmcm9tIGJyb3dzZXIgc2V0dGluZ3MgYW5kIHNldHMgdGhlIGxvY2FsZSB0bwpAQCAtMTI5LDI1ICsxMjksMjUgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBmb3JtYXREYXRlIChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICB0cnkgewotCQkJU3RyaW5nIG5hbWUJCQkJPQlyZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7Ci0JCQlTdHJpbmcgY2hhcnNldHZhbAkJPQlyZXEuZ2V0UGFyYW1ldGVyKCJjaGFyc2V0dmFsIik7CisgICAgICAgICAgICBTdHJpbmcgbmFtZSAgICAgICAgICAgICAgICA9ICAgIHJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKKyAgICAgICAgICAgIFN0cmluZyBjaGFyc2V0dmFsICAgICAgICA9ICAgIHJlcS5nZXRQYXJhbWV0ZXIoImNoYXJzZXR2YWwiKTsKIAogICAgICAgICAgICAgLy8gR2V0J3MgdGhlIGxvY2FsZSBvZiB0aGUgYnJvd3NlciBmcm9tIHRoZSByZXF1ZXN0IG9iamVjdAotICAgICAgICAgICAgTG9jYWxlIGJyb3dzZXJMb2NhbGUJPQlyZXEuZ2V0TG9jYWxlKCk7CisgICAgICAgICAgICBMb2NhbGUgYnJvd3NlckxvY2FsZSAgICA9ICAgIHJlcS5nZXRMb2NhbGUoKTsKIAogICAgICAgICAgICAgLy8gRGVmYXVsdCBsb2NhbGUgb2YgdGhlIHJlc3BvbnNlIG9iamVjdAotICAgICAgICAgICAgTG9jYWxlIHJlc0xvY2FsZQkJPQlyZXMuZ2V0TG9jYWxlKCk7Ci0gICAgICAgICAgICBTdHJpbmcgcmVzQ2hhcnNldAkJPQlyZXMuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKyAgICAgICAgICAgIExvY2FsZSByZXNMb2NhbGUgICAgICAgID0gICAgcmVzLmdldExvY2FsZSgpOworICAgICAgICAgICAgU3RyaW5nIHJlc0NoYXJzZXQgICAgICAgID0gICAgcmVzLmdldENoYXJhY3RlckVuY29kaW5nKCk7CiAKICAgICAgICAgICAgIC8vIFNldCdzIHRoZSBicm93c2VyJ3MgbG9jYWxlIHRvIHRoZSByZXNwb25zZSBvYmplY3QKICAgICAgICAgICAgIHJlcy5zZXRMb2NhbGUoYnJvd3NlckxvY2FsZSk7CiAKLSAgICAgICAgICAgIExvY2FsZSByZXNMb2NhbGVBZnRlcgk9CXJlcy5nZXRMb2NhbGUoKTsKLSAgICAgICAgICAgIFN0cmluZyByZXNDaGFyc2V0QWZ0ZXIJPQlyZXMuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKyAgICAgICAgICAgIExvY2FsZSByZXNMb2NhbGVBZnRlciAgICA9ICAgIHJlcy5nZXRMb2NhbGUoKTsKKyAgICAgICAgICAgIFN0cmluZyByZXNDaGFyc2V0QWZ0ZXIgICAgPSAgICByZXMuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKIAogICAgICAgICAgICAgcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9IiArIHJlc0NoYXJzZXRBZnRlcik7CiAgICAgICAgICAgICAvLyBPdXRwdXQgc3RyZWFtIGZvciB0aGUgcmVzcG9uc2UKLSAgICAgICAgICAgIGphdmEuaW8uUHJpbnRXcml0ZXIgb3V0CT0JcmVzLmdldFdyaXRlcigpOworICAgICAgICAgICAgamF2YS5pby5QcmludFdyaXRlciBvdXQgICAgPSAgICByZXMuZ2V0V3JpdGVyKCk7CiAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD48dGl0bGU+Rm9ybWF0dGluZyBkYXRlIGFzIHBlciBicm93c2VyJ3MgbG9jYWxlPC90aXRsZT48L2hlYWQ+Iik7CkBAIC0xNjEsMTkgKzE2MSwxOSBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIlJlc3BvbnNlIGNoYXJzZXQgYWZ0ZXIgc2V0dGluZyBpdCBmcm9tIHJlcXVlc3QgbG9jYWxlOiAiICsgcmVzQ2hhcnNldEFmdGVyICsgIjxicj4iKTsKIAogICAgICAgICAgICAgLy8gR2V0IHRvZGF5J3MgZGF0ZSBhbmQgZm9ybWF0cyBpdCB1c2luZyB0aGUgYnJvd3NlciBsb2NhbGUKLSAgICAgICAgICAgIGphdmEudXRpbC5EYXRlIHRvZGF5CT0JbmV3IGphdmEudXRpbC5EYXRlKCk7Ci0gICAgICAgICAgICBEYXRlRm9ybWF0IGZvcm1hdHRlcgk9CURhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKERhdGVGb3JtYXQuRlVMTCwgYnJvd3NlckxvY2FsZSk7Ci0gICAgICAgICAgICBTdHJpbmcgZm9ybWF0dGVkRGF0ZQk9CWZvcm1hdHRlci5mb3JtYXQodG9kYXkpOworICAgICAgICAgICAgamF2YS51dGlsLkRhdGUgdG9kYXkgICAgPSAgICBuZXcgamF2YS51dGlsLkRhdGUoKTsKKyAgICAgICAgICAgIERhdGVGb3JtYXQgZm9ybWF0dGVyICAgID0gICAgRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoRGF0ZUZvcm1hdC5GVUxMLCBicm93c2VyTG9jYWxlKTsKKyAgICAgICAgICAgIFN0cmluZyBmb3JtYXR0ZWREYXRlICAgID0gICAgZm9ybWF0dGVyLmZvcm1hdCh0b2RheSk7CiAKICAgICAgICAgICAgIG91dC5wcmludGxuKCJUb2RheSdzIGRhdGUgZm9yICIgKyByZXNMb2NhbGVBZnRlciArICIgaXMgOiAiICsgZm9ybWF0dGVkRGF0ZSArICI8YnI+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPiIpOwotCQkJb3V0LnByaW50bG4oIjxQPjxCUj48QSBIUkVGPVwiL2kxOG4tc2ltcGxlXCI+QmFjayB0byBzYW1wbGUgaG9tZTwvQT48L1A+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPFA+PEJSPjxBIEhSRUY9XCIvaTE4bi1zaW1wbGVcIj5CYWNrIHRvIHNhbXBsZSBob21lPC9BPjwvUD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2JvZHk+PC9odG1sPiIpOwogICAgICAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0JfQorICAgIH0KIAogICAgIC8qKiBTZXRzIHJlcXVlc3QncyBjaGFyYWN0ZXIgZW5jb2RpbmcgdXNpbmcgc2V0Q2hhcmFjdGVyRW5jb2RpbmcgbWV0aG9kIG9mIEh0dHBTZXJ2bGV0UmVxdWVzdCBpbnRlcmZhY2UuCiAgICAgICogIFRoZSBzZXRDaGFyYWN0ZXJFbmNvZGluZyBtZXRob2QgaXMgdXNlZCB0byBpbmZvcm0gdGhlIHNlcnZsZXQgY29udGFpbmVyIHRvIHJlYWQgcmVxdWVzdCBwYXJhbWV0ZXJzIHVzaW5nIHNwZWNpZmllZCBlbmNvZGluZy4KQEAgLTE4MywyNCArMTgzLDI0IEBACiAgICAgcHJvdGVjdGVkIHZvaWQgc2V0Q2hhckVuY29kaW5nIChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICB0cnkgewotCQkJU3RyaW5nIG5hbWUJCQk9CXJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKLQkJCVN0cmluZyBjaGFyc2V0dmFsCT0JcmVxLmdldFBhcmFtZXRlcigiY2hhcnNldHZhbCIpOwotCQkJcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9IiArIGNoYXJzZXR2YWwpOworICAgICAgICAgICAgU3RyaW5nIG5hbWUgICAgICAgICAgICA9ICAgIHJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKKyAgICAgICAgICAgIFN0cmluZyBjaGFyc2V0dmFsICAgID0gICAgcmVxLmdldFBhcmFtZXRlcigiY2hhcnNldHZhbCIpOworICAgICAgICAgICAgcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9IiArIGNoYXJzZXR2YWwpOwogCi0JCQkvLyBPdXRwdXQgc3RyZWFtIGZvciB0aGUgcmVzcG9uc2UKLQkJCVByaW50V3JpdGVyIG91dAkJPQlyZXMuZ2V0V3JpdGVyKCk7CisgICAgICAgICAgICAvLyBPdXRwdXQgc3RyZWFtIGZvciB0aGUgcmVzcG9uc2UKKyAgICAgICAgICAgIFByaW50V3JpdGVyIG91dCAgICAgICAgPSAgICByZXMuZ2V0V3JpdGVyKCk7CiAKLQkJCW91dC5wcmludGxuKCI8aHRtbD4iKTsKLQkJCW91dC5wcmludGxuKCI8aGVhZD48dGl0bGU+U2V0dGluZyByZXF1ZXN0IG9iamVjdCdzIGNoYXJhY3RlciBlbmNvZGluZyB0byAiICsgY2hhcnNldHZhbCArICI8L3RpdGxlPjwvaGVhZD4iKTsKLQkJCW91dC5wcmludGxuKCI8Ym9keT4iKTsKLQkJCW91dC5wcmludGxuKCI8YnI+PEgzPiBUaGUgbmFtZSBlbnRlcmVkIHdhcyA6ICIgKyBuYW1lICsgIiBhbmQgdGhlIGFzc29jaWF0ZWQgZW5jb2Rpbmcgd2FzIDogIiArIGNoYXJzZXR2YWwgKyAiPC9IMz48YnI+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGJyPiIpOwotCQkJb3V0LnByaW50bG4oIjxQPjxCUj48QSBIUkVGPVwiL2kxOG4tc2ltcGxlXCI+QmFjayB0byBzYW1wbGUgaG9tZTwvQT48L1A+Iik7Ci0JCQlvdXQucHJpbnRsbigiPC9ib2R5PjwvaHRtbD4iKTsKLQkJCW91dC5jbG9zZSgpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQorICAgICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPjx0aXRsZT5TZXR0aW5nIHJlcXVlc3Qgb2JqZWN0J3MgY2hhcmFjdGVyIGVuY29kaW5nIHRvICIgKyBjaGFyc2V0dmFsICsgIjwvdGl0bGU+PC9oZWFkPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj48SDM+IFRoZSBuYW1lIGVudGVyZWQgd2FzIDogIiArIG5hbWUgKyAiIGFuZCB0aGUgYXNzb2NpYXRlZCBlbmNvZGluZyB3YXMgOiAiICsgY2hhcnNldHZhbCArICI8L0gzPjxicj4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPFA+PEJSPjxBIEhSRUY9XCIvaTE4bi1zaW1wbGVcIj5CYWNrIHRvIHNhbXBsZSBob21lPC9BPjwvUD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2JvZHk+PC9odG1sPiIpOworICAgICAgICAgICAgb3V0LmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqIEluY2x1ZGVzIGEgc2VydmxldCB1c2luZyBSZXF1ZXN0RGlzcGF0Y2hlcidzIGluY2x1ZGUgbWV0aG9kLiBIZXJlIHRoZSBkYXRhIGRpc3BsYXkgYmVoYXZpb3VyCkBAIC0yMTIsMzAgKzIxMiwzMCBAQAogICAgIHByb3RlY3RlZCB2b2lkIGluY2x1ZGVTZXJ2bGV0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICB0cnkgewotCQkJU3RyaW5nIG5hbWUgPSByZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7Ci0JCQlTdHJpbmcgY2hhcnNldHZhbCA9IHJlcS5nZXRQYXJhbWV0ZXIoImNoYXJzZXR2YWwiKTsKLQkJCXJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sOyBjaGFyc2V0PSIgKyBjaGFyc2V0dmFsKTsKKyAgICAgICAgICAgIFN0cmluZyBuYW1lID0gcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOworICAgICAgICAgICAgU3RyaW5nIGNoYXJzZXR2YWwgPSByZXEuZ2V0UGFyYW1ldGVyKCJjaGFyc2V0dmFsIik7CisgICAgICAgICAgICByZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDsgY2hhcnNldD0iICsgY2hhcnNldHZhbCk7CiAKLQkJCS8vIE91dHB1dCBzdHJlYW0gZm9yIHRoZSByZXNwb25zZQotCQkJUHJpbnRXcml0ZXIgb3V0ID0gcmVzLmdldFdyaXRlcigpOworICAgICAgICAgICAgLy8gT3V0cHV0IHN0cmVhbSBmb3IgdGhlIHJlc3BvbnNlCisgICAgICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXMuZ2V0V3JpdGVyKCk7CiAKLQkJCW91dC5wcmludGxuKCI8aHRtbD4iKTsKLQkJCW91dC5wcmludGxuKCI8aGVhZD48dGl0bGU+SW5jbHVkaW5nIGFub3RoZXIgc2VydmxldCBmcm9tIGEgc2VydmxldDwvdGl0bGU+PC9oZWFkPiIpOwotCQkJb3V0LnByaW50bG4oIjxib2R5PiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPjx0aXRsZT5JbmNsdWRpbmcgYW5vdGhlciBzZXJ2bGV0IGZyb20gYSBzZXJ2bGV0PC90aXRsZT48L2hlYWQ+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAKLQkJCVJlcXVlc3REaXNwYXRjaGVyIGRpc3BhdGNoZXI7Ci0JCQlkaXNwYXRjaGVyID0gZ2V0U2VydmxldENvbnRleHQoKS5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL0luY2x1ZGVkU2VydmxldCIpOwotCQkJZGlzcGF0Y2hlci5pbmNsdWRlKHJlcSwgcmVzKTsKKyAgICAgICAgICAgIFJlcXVlc3REaXNwYXRjaGVyIGRpc3BhdGNoZXI7CisgICAgICAgICAgICBkaXNwYXRjaGVyID0gZ2V0U2VydmxldENvbnRleHQoKS5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL0luY2x1ZGVkU2VydmxldCIpOworICAgICAgICAgICAgZGlzcGF0Y2hlci5pbmNsdWRlKHJlcSwgcmVzKTsKIAotCQkJb3V0LnByaW50bG4oIjxicj5OYW1lIGZyb20gdGhlIGluY2x1ZGluZyBzZXJ2bGV0OiAiICsgbmFtZSArICI8YnI+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGJyPiIpOwotCQkJb3V0LnByaW50bG4oIjxQPjxCUj48QSBIUkVGPVwiL2kxOG4tc2ltcGxlXCI+QmFjayB0byBzYW1wbGUgaG9tZTwvQT48L1A+Iik7Ci0JCQlvdXQucHJpbnRsbigiPC9ib2R5PjwvaHRtbD4iKTsKLQkJCW91dC5jbG9zZSgpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj5OYW1lIGZyb20gdGhlIGluY2x1ZGluZyBzZXJ2bGV0OiAiICsgbmFtZSArICI8YnI+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxQPjxCUj48QSBIUkVGPVwiL2kxOG4tc2ltcGxlXCI+QmFjayB0byBzYW1wbGUgaG9tZTwvQT48L1A+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9ib2R5PjwvaHRtbD4iKTsKKyAgICAgICAgICAgIG91dC5jbG9zZSgpOwogCi0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqIEZvcndhcmRzIGEgc2VydmxldCB1c2luZyBSZXF1ZXN0RGlzcGF0Y2hlcidzIGZvcndhcmQgbWV0aG9kLiBIZXJlIHRoZSBkYXRhIGRpc3BsYXkgYmVoYXZpb3VyCkBAIC0yNDgsMjQgKzI0OCwyNCBAQAogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKICAgICAgICAgdHJ5IHsKLQkJCVN0cmluZyBuYW1lCQkJPSByZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7Ci0JCQlTdHJpbmcgY2hhcnNldHZhbAk9IHJlcS5nZXRQYXJhbWV0ZXIoImNoYXJzZXR2YWwiKTsKLQkJCXJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sOyBjaGFyc2V0PSIgKyBjaGFyc2V0dmFsKTsKKyAgICAgICAgICAgIFN0cmluZyBuYW1lICAgICAgICAgICAgPSByZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CisgICAgICAgICAgICBTdHJpbmcgY2hhcnNldHZhbCAgICA9IHJlcS5nZXRQYXJhbWV0ZXIoImNoYXJzZXR2YWwiKTsKKyAgICAgICAgICAgIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sOyBjaGFyc2V0PSIgKyBjaGFyc2V0dmFsKTsKIAotCQkJLy8gT3V0cHV0IHN0cmVhbSBmb3IgdGhlIHJlc3BvbnNlCi0JCQlQcmludFdyaXRlciBvdXQJCT0gcmVzLmdldFdyaXRlcigpOworICAgICAgICAgICAgLy8gT3V0cHV0IHN0cmVhbSBmb3IgdGhlIHJlc3BvbnNlCisgICAgICAgICAgICBQcmludFdyaXRlciBvdXQgICAgICAgID0gcmVzLmdldFdyaXRlcigpOwogCi0JCQlvdXQucHJpbnRsbigiPGh0bWw+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGhlYWQ+PHRpdGxlPkluY2x1ZGluZyBhbm90aGVyIHNlcnZsZXQgZnJvbSBhIHNlcnZsZXQ8L3RpdGxlPjwvaGVhZD4iKTsKLQkJCW91dC5wcmludGxuKCI8Ym9keT4iKTsKLQkJCW91dC5wcmludGxuKCI8YnI+VGhlIG5hbWUgZnJvbSBmb3J3YXJkaW5nIHNlcnZsZXQgOiAiICsgbmFtZSApOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPjx0aXRsZT5JbmNsdWRpbmcgYW5vdGhlciBzZXJ2bGV0IGZyb20gYSBzZXJ2bGV0PC90aXRsZT48L2hlYWQ+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPlRoZSBuYW1lIGZyb20gZm9yd2FyZGluZyBzZXJ2bGV0IDogIiArIG5hbWUgKTsKIAotCQkJUmVxdWVzdERpc3BhdGNoZXIgZGlzcGF0Y2hlcjsKLQkJCWRpc3BhdGNoZXIgPSBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldFJlcXVlc3REaXNwYXRjaGVyKCIvRm9yd2FyZGVkU2VydmxldCIpOwotCQkJZGlzcGF0Y2hlci5mb3J3YXJkKHJlcSwgcmVzKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KKyAgICAgICAgICAgIFJlcXVlc3REaXNwYXRjaGVyIGRpc3BhdGNoZXI7CisgICAgICAgICAgICBkaXNwYXRjaGVyID0gZ2V0U2VydmxldENvbnRleHQoKS5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL0ZvcndhcmRlZFNlcnZsZXQiKTsKKyAgICAgICAgICAgIGRpc3BhdGNoZXIuZm9yd2FyZChyZXEsIHJlcyk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqIFNlbmQgZXJyb3IgbWVzc2FnZXMgdXNpbmcgcmVzcG9uc2UncyBzZW5kRXJyb3IgbWV0aG9kLiBUaGUgc2VuZEVycm9yIG1ldGhvZCBzZW5kcyBtdWx0aSBieXRlIGVycm9yIG1lc3NhZ2VzIGNvcnJlY3RseQpAQCAtMjc2LDE2ICsyNzYsMTYgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBzZW5kRXJyb3JNZXNzYWdlIChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICB0cnkgewotCQkJU3RyaW5nIG5hbWUJCQk9CXJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKLQkJCVN0cmluZyBjaGFyc2V0dmFsCT0JcmVxLmdldFBhcmFtZXRlcigiY2hhcnNldHZhbCIpOwotCQkJcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9IiArIGNoYXJzZXR2YWwpOwotCQkJcmVzLnNlbmRFcnJvcig0MDQsICJJMThuIGVycm9yIG1lc3NhZ2UgZnJvbSBzZXJ2bGV0ICIrIG5hbWUpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQorICAgICAgICAgICAgU3RyaW5nIG5hbWUgICAgICAgICAgICA9ICAgIHJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKKyAgICAgICAgICAgIFN0cmluZyBjaGFyc2V0dmFsICAgID0gICAgcmVxLmdldFBhcmFtZXRlcigiY2hhcnNldHZhbCIpOworICAgICAgICAgICAgcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9IiArIGNoYXJzZXR2YWwpOworICAgICAgICAgICAgcmVzLnNlbmRFcnJvcig0MDQsICJJMThuIGVycm9yIG1lc3NhZ2UgZnJvbSBzZXJ2bGV0ICIrIG5hbWUpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQogICAgIH0KIAotCS8qKiBMb2FkIHJlc291cmNlIGJ1bmRsZSBiYXNlZCBvbiBjbGllbnQncyBsb2NhbGUuIElmIHRoZXJlIGlzIG5vIHJlc291cmNlIGJ1bmRsZSBhdmFpbGFibGUsIHRoZSBkZWZhdWx0IHJlc291cmNlIGJ1bmRsZQorICAgIC8qKiBMb2FkIHJlc291cmNlIGJ1bmRsZSBiYXNlZCBvbiBjbGllbnQncyBsb2NhbGUuIElmIHRoZXJlIGlzIG5vIHJlc291cmNlIGJ1bmRsZSBhdmFpbGFibGUsIHRoZSBkZWZhdWx0IHJlc291cmNlIGJ1bmRsZQogICAgICAqICB3aWxsIGJlIHBpY2tlZCB1cAogICAgICAqICBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiAgQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTI5Myw0MyArMjkzLDQzIEBACiAgICAgcHJvdGVjdGVkIHZvaWQgdXNlUmVzb3VyY2VCdW5kbGUgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7Ci0JCQlTdHJpbmcgbmFtZQkJCT0JcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOwotCQkJU3RyaW5nIGNoYXJzZXR2YWwJPQlyZXEuZ2V0UGFyYW1ldGVyKCJjaGFyc2V0dmFsIik7Ci0JCQlyZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDsgY2hhcnNldD0iICsgY2hhcnNldHZhbCk7Ci0JCQlSZXNvdXJjZUJ1bmRsZSByYgk9CW51bGw7Ci0JCQlyYgkJCQkJPQlSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIkxvY2FsU3RyaW5ncyIscmVxLmdldExvY2FsZSgpKTsKLQkJCVN0cmluZyBtc2c7Ci0JCQlQcmludFdyaXRlciBvdXQJCT0JcmVzLmdldFdyaXRlcigpOworICAgICAgICAgICAgU3RyaW5nIG5hbWUgICAgICAgICAgICA9ICAgIHJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKKyAgICAgICAgICAgIFN0cmluZyBjaGFyc2V0dmFsICAgID0gICAgcmVxLmdldFBhcmFtZXRlcigiY2hhcnNldHZhbCIpOworICAgICAgICAgICAgcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9IiArIGNoYXJzZXR2YWwpOworICAgICAgICAgICAgUmVzb3VyY2VCdW5kbGUgcmIgICAgPSAgICBudWxsOworICAgICAgICAgICAgcmIgICAgICAgICAgICAgICAgICAgID0gICAgUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJMb2NhbFN0cmluZ3MiLHJlcS5nZXRMb2NhbGUoKSk7CisgICAgICAgICAgICBTdHJpbmcgbXNnOworICAgICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ICAgICAgICA9ICAgIHJlcy5nZXRXcml0ZXIoKTsKIAotCQkJb3V0LnByaW50bG4oIjxodG1sPiIpOwotCQkJb3V0LnByaW50bG4oIjxoZWFkPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwogCi0JCQl0cnkgewotCQkJCW1zZwkJCQk9CXJiLmdldFN0cmluZyAoInRpdGxlIik7Ci0JCQkJb3V0LnByaW50bG4oIjx0aXRsZT4iICsgbXNnICsgIjwvdGl0bGU+Iik7Ci0JCQkJb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKLQkJCQlvdXQucHJpbnRsbigiPGJvZHk+Iik7Ci0JCQkJb3V0LnByaW50bG4oIjxicj48SDE+IEhlbGxvICIgKyBuYW1lICsgIiwgdGhlIGZvbGxvd2luZyBtZXNzYWdlcyBhcmUgZGlzcGxheWVkIGZyb20gYSByZXNvdXJjZSBidW5kbGU8L0gxPiIpOwotCQkJCW1zZyA9IHJiLmdldFN0cmluZyAoIm1zZyIpOwotCQkJCW91dC5wcmludGxuKCI8YnI+PGJyPjxIMj4iICsgbXNnICsgIjwvSDI+Iik7Ci0JCQkJbXNnID0gcmIuZ2V0U3RyaW5nICgidGhhbmtzIik7Ci0JCQkJb3V0LnByaW50bG4oIjxicj48YnI+PEgzPiIgKyBtc2cgKyAiPC9IMz4iKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbXNnICAgICAgICAgICAgICAgID0gICAgcmIuZ2V0U3RyaW5nICgidGl0bGUiKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPiIgKyBtc2cgKyAiPC90aXRsZT4iKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOworICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPjxIMT4gSGVsbG8gIiArIG5hbWUgKyAiLCB0aGUgZm9sbG93aW5nIG1lc3NhZ2VzIGFyZSBkaXNwbGF5ZWQgZnJvbSBhIHJlc291cmNlIGJ1bmRsZTwvSDE+Iik7CisgICAgICAgICAgICAgICAgbXNnID0gcmIuZ2V0U3RyaW5nICgibXNnIik7CisgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj48YnI+PEgyPiIgKyBtc2cgKyAiPC9IMj4iKTsKKyAgICAgICAgICAgICAgICBtc2cgPSByYi5nZXRTdHJpbmcgKCJ0aGFua3MiKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPjxicj48SDM+IiArIG1zZyArICI8L0gzPiIpOwogCi0JCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAJfQotCQkJb3V0LnByaW50bG4oIjxicj4iKTsKLQkJCW91dC5wcmludGxuKCI8UD48QlI+PEEgSFJFRj1cIi9pMThuLXNpbXBsZVwiPkJhY2sgdG8gc2FtcGxlIGhvbWU8L0E+PC9QPiIpOwotICAgICAgICAJb3V0LnByaW50bG4oIjwvYm9keT48L2h0bWw+Iik7Ci0gICAgICAgIAlvdXQuY2xvc2UoKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KKyAgICAgICAgICAgIH0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxQPjxCUj48QSBIUkVGPVwiL2kxOG4tc2ltcGxlXCI+QmFjayB0byBzYW1wbGUgaG9tZTwvQT48L1A+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9ib2R5PjwvaHRtbD4iKTsKKyAgICAgICAgICAgIG91dC5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQogICAgIH0KIAotCS8qKiBGb3J3YXJkcyByZXF1ZXN0IGZyb20gc2VydmxldCB0byBqc3AgdXNpbmcgUmVxdWVzdERpc3BhdGNoZXIncyBmb3J3YXJkIG1ldGhvZC4gSGVyZSB0aGUgZGF0YSBkaXNwbGF5IGJlaGF2aW91cgorICAgIC8qKiBGb3J3YXJkcyByZXF1ZXN0IGZyb20gc2VydmxldCB0byBqc3AgdXNpbmcgUmVxdWVzdERpc3BhdGNoZXIncyBmb3J3YXJkIG1ldGhvZC4gSGVyZSB0aGUgZGF0YSBkaXNwbGF5IGJlaGF2aW91cgogICAgICAqICBjaGFuZ2VzIGJhc2VkIG9uIHRoZSBjb250ZW50IHR5cGUgc2V0LiBJZiB0aGUgZm9yd2FyZGVkIGpzcCBzZXRzIHRoZSBjb250ZW50IHR5cGUgdG8gYSBkaWZmZXJlbnQgdmFsdWUgdGhlbiB0aGUgbmV3IGNvbnRlbnQgdHlwZQogICAgICAqICBzaG91bGQgYmUgc2V0IGZvciB0aGUgb3V0cHV0IHN0cmVhbQogICAgICAqICBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKQEAgLTMzOCwxMiArMzM4LDEyIEBACiAgICAgcHJvdGVjdGVkIHZvaWQgZm9yd2FyZEpzcCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKLQkJCVJlcXVlc3REaXNwYXRjaGVyIGRpc3BhdGNoZXI7Ci0JCQlkaXNwYXRjaGVyID0gZ2V0U2VydmxldENvbnRleHQoKS5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL0ZvcndhcmRlZEpzcC5qc3AiKTsKLSAgICAgIAkJZGlzcGF0Y2hlci5mb3J3YXJkKHJlcSwgcmVzKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KKyAgICAgICAgICAgIFJlcXVlc3REaXNwYXRjaGVyIGRpc3BhdGNoZXI7CisgICAgICAgICAgICBkaXNwYXRjaGVyID0gZ2V0U2VydmxldENvbnRleHQoKS5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL0ZvcndhcmRlZEpzcC5qc3AiKTsKKyAgICAgICAgICAgICAgZGlzcGF0Y2hlci5mb3J3YXJkKHJlcSwgcmVzKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKiogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IG1ldGhvZC4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9zYW1wbGViZWFuL0phdmFVc2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvc2FtcGxlYmVhbi9KYXZhVXNlQmVhbi5qYXZhCmluZGV4IGM5ODU3ZjkuLjc4ZGM5ZmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9zYW1wbGViZWFuL0phdmFVc2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L3NhbXBsZWJlYW4vSmF2YVVzZUJlYW4uamF2YQpAQCAtMjMsNyArMjMsNyBAQAogLyoqCiAgKiBTaW1wbGUgSmF2YSBCZWFuIHVzZWQgdG8gc2V0L2dldCBuYW1lIGFuZCBncmVldGluZyBtZXNzYWdlcyBmcm9tIGEganNwCiAgKiBAYXV0aG9yICBDaGFuZCBCYXNoYQotICogQHZlcnNpb24JMS4wCisgKiBAdmVyc2lvbiAgICAxLjAKICAqLwogcHVibGljIGNsYXNzIEphdmFVc2VCZWFuIHsKIApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KIAotCS8qKiBHZXRzIHRoZSBuYW1lIHRoYXQgd2FzIHNldCB1c2luZyBzZXROYW1lKFN0cmluZyBuYW1lKSBtZXRob2Qgb2YgdGhpcyBjbGFzcworICAgIC8qKiBHZXRzIHRoZSBuYW1lIHRoYXQgd2FzIHNldCB1c2luZyBzZXROYW1lKFN0cmluZyBuYW1lKSBtZXRob2Qgb2YgdGhpcyBjbGFzcwogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvd2FyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC93YXIvYnVpbGQueG1sCmluZGV4IDgwMTY2ZGQuLjRmMjY2YzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC93YXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC93YXIvYnVpbGQueG1sCkBAIC0yMywzMCArMjMsMzAgQEAKIAogPHByb2plY3QgbmFtZT0iaTE4bi1zaW1wbGUiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLQkmY29tbW9uQnVpbGQ7CisgICAgJmNvbW1vbkJ1aWxkOwogICAgIDxwcm9wZXJ0eSBuYW1lPSJhcmNoaXZlZGlyIiB2YWx1ZT0iJHtidWlsZH0vYXJjaGl2ZXMiLz4KIAogICAgICAgICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgogICAgICAgICAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9IiAvPgogICAgICAgICA8L3RhcmdldD4KLQkKLQk8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9InByZXBhcmUiLz4KLQkKLQk8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4KLQkJPGNvcHkgZmlsZT0iLi4vZGVzY3JpcHRvci93ZWIueG1sIiB0b2Rpcj0iJHtidWlsZH0vV0VCLUlORiIvPgotCQk8Y29weSBmaWxlPSIuLi9kZXNjcmlwdG9yL3N1bi13ZWIueG1sIiB0b2Rpcj0iJHtidWlsZH0vV0VCLUlORiIgCisKKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9InByZXBhcmUiLz4KKworICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImNvbXBpbGUiPgorICAgICAgICA8Y29weSBmaWxlPSIuLi9kZXNjcmlwdG9yL3dlYi54bWwiIHRvZGlyPSIke2J1aWxkfS9XRUItSU5GIi8+CisgICAgICAgIDxjb3B5IGZpbGU9Ii4uL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwiIHRvZGlyPSIke2J1aWxkfS9XRUItSU5GIgogICAgICAgICAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotCQk8Y29weSB0b2Rpcj0iJHtidWlsZH0vV0VCLUlORi90bGRzIj4KKyAgICAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGR9L1dFQi1JTkYvdGxkcyI+CiAgICAgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9InRsZHMiLz4KICAgICAgICAgICAgICAgICA8L2NvcHk+CiAgICAgICAgICAgICAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGR9Ij4KICAgICAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iZG9jcm9vdCIgaW5jbHVkZXM9IiouanNwLCAqLmh0bWwiLz4KICAgICAgICAgICAgICAgICA8L2NvcHk+Ci0JCTxqYXIgZGVzdGZpbGU9IiR7YXJjaGl2ZWRpcn0vaTE4bi1zaW1wbGUud2FyIiAKKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthcmNoaXZlZGlyfS9pMThuLXNpbXBsZS53YXIiCiAgICAgICAgICAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkfSIvPgotCTwvdGFyZ2V0PgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCIgZGVwZW5kcz0iYXNzZW1ibGUiPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiIGRlcGVuZHM9ImFzc2VtYmxlIj4KKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9SZXNvdXJjZUhlbHBlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9SZXNvdXJjZUhlbHBlci5qYXZhCmluZGV4IDVlMjc1NDguLjQ0OTkyMGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvUmVzb3VyY2VIZWxwZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL1Jlc291cmNlSGVscGVyLmphdmEKQEAgLTMyLDEwICszMiwxMCBAQAogICogQGF1dGhvciB0anF1aW5uCiAgKi8KIHB1YmxpYyBjbGFzcyBSZXNvdXJjZUhlbHBlciB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9fUkVTT1VSQ0UgPSAiTk9fUkVTT1VSQ0UiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT19QUk9QRVJUWSA9ICJOT19QUk9QRVJUWSI7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBmaW5kKFN0cmluZyByZXNvdXJjZU5hbWUsIFN0cmluZyBwcm9wZXJ0eU5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZyByZXN1bHQ7CiAgICAgICAgIFVSTCB1cmwgPSBSZXNvdXJjZUhlbHBlci5jbGFzcy5nZXRSZXNvdXJjZShyZXNvdXJjZU5hbWUpOwpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBVUkxDb25uZWN0aW9uIGNueCA9IHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgICAgIGNueC5zZXRVc2VDYWNoZXMoZmFsc2UpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgaXMgPSBjbnguZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKICAgICAgICAgICAgICAgICBwcm9wcy5sb2FkKGlzKTsKQEAgLTY4LDE0ICs2OCwxNCBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogTWFrZXMgc3VyZSB0aGF0IGVhY2ggdGVzdCBvZiB0aGUgZm9ybSA8cmVzb3VyY2VOYW1lPjo8cHJvcGVydHlOYW1lPj08ZXhwZWN0ZWRWYWx1ZT4KLSAgICAgKiBwYXNzZXM7IHRoYXQgaXMsIHRoYXQgdGhlIHJlc291cmNlIGlzIGZvdW5kLCB0aGF0IHRoZSBwcm9wZXJ0eSBpcyAKKyAgICAgKiBwYXNzZXM7IHRoYXQgaXMsIHRoYXQgdGhlIHJlc291cmNlIGlzIGZvdW5kLCB0aGF0IHRoZSBwcm9wZXJ0eSBpcwogICAgICAqIHNldCBieSB0aGUgcHJvcGVydGllcyBmaWxlIHJlcHJlc2VudGVkIGJ5IHRoYXQgcmVzb3VyY2UsIGFuZCB0aGF0IHRoZQogICAgICAqIHByb3BlcnR5IHZhbHVlIGlzIHRoZSBzYW1lIGFzIHRoZSBleHBlY3RlZCB2YWx1ZS4KICAgICAgKkBwYXJhbSB0ZXN0cyAwIG9yIG1vcmUgZXhwcmVzc2lvbnMgPHJlc291cmNlTmFtZT46PHByb3BlcnR5TmFtZT49PGV4cGVjdGVkVmFsdWU+Ci0gICAgICpAcmV0dXJuIFJlc3VsdHMgb2JqZWN0IGRlc2NyaWJpbmcgdGhlIHJlc3VsdHMgb2YgdGhlIHRlc3RzIAorICAgICAqQHJldHVybiBSZXN1bHRzIG9iamVjdCBkZXNjcmliaW5nIHRoZSByZXN1bHRzIG9mIHRoZSB0ZXN0cwogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgUmVzdWx0IGNoZWNrQWxsKFN0cmluZ1tdIHRlc3RzLCBUZXN0VHlwZSBjYWxsZXJUZXN0VHlwZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgUmVzdWx0IHJlc3VsdCA9IG5ldyBSZXN1bHQoKTsKQEAgLTkzLDcgKzkzLDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKCAhIGNhbGxlclRlc3RUeXBlLnJ1bnMoY3VycmVudEFyZ3VtZW50VGVzdFR5cGUpKSB7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBAIC0xMTcsMzkgKzExNywzOSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBSZXN1bHQgaW1wbGVtZW50cyBTZXJpYWxpemFibGUgewogICAgICAgICBwcml2YXRlIGJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgcHJpdmF0ZSBTdHJpbmdCdWlsZGVyIHJlc3VsdHMgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgICAgICAKKwogICAgICAgICBwcml2YXRlIHZvaWQgcmVjb3JkUmVzdWx0KGJvb2xlYW4gcmVzdWx0LCBTdHJpbmcgbm90ZSkgewogICAgICAgICAgICAgdGhpcy5yZXN1bHQgJj0gcmVzdWx0OwogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobm90ZSkuYXBwZW5kKCJAIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcHVibGljIGJvb2xlYW4gZ2V0UmVzdWx0KCkgewogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBwdWJsaWMgU3RyaW5nQnVpbGRlciBnZXRSZXN1bHRzKCkgewogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIGVudW0gVGVzdFR5cGUgewogICAgICAgICBDTElFTlQoImNsaWVudG9ubHkiKSwKICAgICAgICAgU0VSVkVSKCJzZXJ2ZXJvbmx5IiksCiAgICAgICAgIEJPVEgoImJvdGgiKTsKLSAgICAgICAgCisKICAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKICAgICAgICAgVGVzdFR5cGUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgICAgIHJldHVybiBuYW1lOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgVGVzdFR5cGUgZmluZChTdHJpbmcgdHlwZSkgewogICAgICAgICAgICAgZm9yIChUZXN0VHlwZSB0dCA6IHZhbHVlcygpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHR0LnRvU3RyaW5nKCkuZXF1YWxzKHR5cGUpKSB7CkBAIC0xNTgsNyArMTU4LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGJvb2xlYW4gcnVucyhUZXN0VHlwZSBhcmd1bWVudFRlc3RUeXBlKSB7CiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRUZXN0VHlwZS5lcXVhbHMoQk9USCkgfHwgKHRoaXMuZXF1YWxzKGFyZ3VtZW50VGVzdFR5cGUpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9hcHBsaWNhdGlvbi1kZWZhdWx0TGliRGlyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvYXBwbGljYXRpb24tZGVmYXVsdExpYkRpci54bWwKaW5kZXggZWQ5OGEyZS4uYmUxYTgyYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9hcHBsaWNhdGlvbi1kZWZhdWx0TGliRGlyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL2FwcGxpY2F0aW9uLWRlZmF1bHRMaWJEaXIueG1sCkBAIC0zNSw1ICszNSw1IEBACiAgICAgT21pdHRpbmcgdGhlIDxsaWJyYXJ5LWRpcmVjdG9yeT4gZWxlbWVudCBlbnRpcmVseSBzaG91bGQgY2F1c2UgdGhlIGFwcAogICAgIHNlcnZlciB0byBhZGQgYWxsIGphcnMgaW4gdGhlIGRlZmF1bHQgJ2xpYicgc3ViZGlyZWN0b3J5IHRvIHRoZQogICAgIHJ1bnRpbWUgY2xhc3NwYXRoLgotLS0+ICAgIAorLS0+CiA8L2FwcGxpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9hcHBsaWNhdGlvbi1ub0xpYkRpci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL2FwcGxpY2F0aW9uLW5vTGliRGlyLnhtbAppbmRleCBjZmRkZDY3Li45Y2E1MzgwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL2FwcGxpY2F0aW9uLW5vTGliRGlyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL2FwcGxpY2F0aW9uLW5vTGliRGlyLnhtbApAQCAtMzEsNSArMzEsNSBAQAogICA8bW9kdWxlPgogICAgICAgPGphdmE+Y2xpZW50L2xpYmRpcnRlc3QtY2xpZW50LmphcjwvamF2YT4KICAgPC9tb2R1bGU+Ci0gIDxsaWJyYXJ5LWRpcmVjdG9yeS8+IDwhLS0gc3VwcHJlc3MgbGlicmFyeSBkaXJlY3RvcnkgaGFuZGxpbmcgLS0+ICAKKyAgPGxpYnJhcnktZGlyZWN0b3J5Lz4gPCEtLSBzdXBwcmVzcyBsaWJyYXJ5IGRpcmVjdG9yeSBoYW5kbGluZyAtLT4KIDwvYXBwbGljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL2FwcGxpY2F0aW9uLXhMaWJEaXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9hcHBsaWNhdGlvbi14TGliRGlyLnhtbAppbmRleCBjNmQ3OTVmLi5jNWMyZGRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL2FwcGxpY2F0aW9uLXhMaWJEaXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvYXBwbGljYXRpb24teExpYkRpci54bWwKQEAgLTMxLDUgKzMxLDUgQEAKICAgPG1vZHVsZT4KICAgICAgIDxqYXZhPmNsaWVudC9saWJkaXJ0ZXN0LWNsaWVudC5qYXI8L2phdmE+CiAgIDwvbW9kdWxlPgotICA8bGlicmFyeS1kaXJlY3Rvcnk+eDwvbGlicmFyeS1kaXJlY3Rvcnk+ICAKKyAgPGxpYnJhcnktZGlyZWN0b3J5Png8L2xpYnJhcnktZGlyZWN0b3J5PgogPC9hcHBsaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9idWlsZC54bWwKaW5kZXggNTEwODgwYy4uODBjYzhkNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9idWlsZC54bWwKQEAgLTI3LDExMyArMjcsMTEzIEBACiAgICAgVGhpcyBzZXQgb2YgdGVzdHMgbWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsaW5nIG9mIDxsaWJyYXJ5LWRpcmVjdG9yeT4gaXMKICAgICBkb25lIHByb3Blcmx5LCB0aGF0IHRoZSBzZXJ2ZXItc2lkZSBhbmQgY2xpZW50LXNpZGUgY2xhc3MgcGF0aHMgYXJlIHNldAogICAgIGNvcnJlY3RseSwgYW5kIHRoYXQgdGhlIGdlbmVyYXRlZCBjbGllbnQgSkFSIGNvbnRhaW5zIHdoYXQgaXQgc2hvdWxkLgotICAgIAotICAgIAorCisKICAgICAqKioqIFRIRSBBUFAgQ0xJRU5UICoqKioKLSAgICAKKwogICAgIFRoZSBhcHAgY2xpZW50IHRoYXQgZHJpdmVzIHRoZSB0ZXN0cyBpbnZva2VzIGFuIEVKQiBtZXRob2QgdG8gbWFrZSBzdXJlIHRoZQogICAgIHNlcnZlci1zaWRlIGNsYXNzIHBhdGggaXMgY29ycmVjdCwgdGhlbiBjaGVja3MgZm9yIHRoZSB2ZXJ5IHNhbWUgcmVzb3VyY2VzCiAgICAgaXRzZWxmIG9uIHRoZSBjbGllbnQgc2lkZSB0byBtYWtlIHN1cmUgdGhhdCBpdHMgY2xhc3MgcGF0aCBhbmQgdGhlIGdlbmVyYXRlZAogICAgIGFwcCBjbGllbnQgSkFSIGZpbGUgYXJlIGJvdGggY29ycmVjdC4KLSAgICAKKwogICAgIFRoZSBhcHBjbGllbnQncyBvdXRwdXQgc2VydmVycyBhcmUgcHJvcGVydHkgZGVmaW5pdGlvbnMgdGhhdCBhcmUgd3JpdHRlbiB0bwotICAgIHRoZSBjbGllbnQgcnVuJ3MgbG9nIGZpbGUuICBUaGUgbG9nIGZpbGUgaXMgdGhlbiB1c2VkIGJ5IHRoZSBhbnQgdGFzayB0byAKKyAgICB0aGUgY2xpZW50IHJ1bidzIGxvZyBmaWxlLiAgVGhlIGxvZyBmaWxlIGlzIHRoZW4gdXNlZCBieSB0aGUgYW50IHRhc2sgdG8KICAgICBkZWZpbmUgcnVuLXNwZWNpZmljIHByb3BlcnRpZXMgZm9yIGNoZWNraW5nIHRoZSByZXN1bHRzIGFuZCBkaXNwbGF5aW5nIGFueQogICAgIHRlc3QgZmFpbHVyZXMuCi0gICAgCi0gICAgCisKKwogICAgICoqKiogVEhFIEVBUlMgKioqKgotICAgIAorCiAgICAgVGhlIHRlc3RzIHVzZSBhIHNpbmdsZSBFQVIgc3RydWN0dXJlLiAgVGhlIDxsaWJyYXJ5LWRpcmVjdG9yeT4gc2V0dGluZwogICAgIGluIGFwcGxpY2F0aW9uLnhtbCBjaGFuZ2VzIHRvIGFmZmVjdCB0aGUgb3V0Y29tZSBvZiB0aGUgdGVzdHMuCi0gICAgCisKICAgICBIZXJlIGlzIHRoZSBFQVIgc3RydWN0dXJlOgotICAgIAorCiAgICAgdG9wTGV2ZWwuamFyIC0gYWx3YXlzIGluY2x1ZGVkIGR1ZSB0byBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGxlZ2FjeSBmZWF0dXJlCiAgICAgdGhhdCBpbmNsdWRlcyBhbGwgdG9wLWxldmVsIEpBUnMgaW4gdGhlIGNsYXNzIHBhdGgKLSAgICAKKwogICAgICAgICB0b3BMZXZlbC5wcm9wZXJ0aWVzCi0gICAgCisKICAgICBsaWIvbGliLmphciAtIGFjY2Vzc2libGUgd2hlbiA8bGlicmFyeS1kaXJlY3Rvcnk+IGVsZW1lbnQgaXMgb21pdHRlZAotICAgIGJlY2F1c2UgdGhlIGRlZmF1bHQgaXMgbGliICh0aGVyZSBhcmUgbm8gdGVzdHMgaW4gdGhpcyBwcm9qZWN0IHRoYXQgZXhwbGljaXRseSAKKyAgICBiZWNhdXNlIHRoZSBkZWZhdWx0IGlzIGxpYiAodGhlcmUgYXJlIG5vIHRlc3RzIGluIHRoaXMgcHJvamVjdCB0aGF0IGV4cGxpY2l0bHkKICAgICBzcGVjaWZ5IDxsaWJyYXJ5LWRpcmVjdG9yeT5saWI8L2xpYnJhcnktZGlyZWN0b3J5PikKLSAgICAKLSAgICAgICAgbGliLnByb3BlcnRpZXMgCisKKyAgICAgICAgbGliLnByb3BlcnRpZXMKIAogICAgIGxpYi9zdWIvbGliX3N1Yi5qYXIgLSBzaG91bGQgbm90IGJlIGFjY2Vzc2libGUgYmVjYXVzZSBKQVJzIGluIHN1YmRpcmVjdG9yaWVzIG9mIHRoZQogICAgIGxpYnJhcnkgZGlyZWN0b3J5IHNob3VsZCBub3QgYmUgYWNjZXNzaWJsZQotICAgIAorCiAgICAgICAgIGxpYl9zdWIucHJvcGVydGllcwotICAgIAorCiAgICAgeC94LmphciAtIGFjY2Vzc2libGUgd2hlbiBsaWIgZGlyIGlzICJ4IiAgLSBUaGUgbWFuaWZlc3Qgb2YgeC5qYXIgc3BlY2lmaWVzIENsYXNzLVBhdGg6IHhFeHRyYS94RXh0cmEuamFyIHhNb3JlL3N1YgotICAgICAgICAKKwogICAgICAgICB4LnByb3BlcnRpZXMgLSBhY2Nlc3NpYmxlIChzaW5jZSB4LmphciBjb250YWlucyBpdCBhbmQgaXMgaW4gdGhlIGxpYiBkaXJlY3RvcnkpCi0gICAgICAgIAorCiAgICAgeC94RXh0cmEveEV4dHJhLmphciAtIGFjY2Vzc2libGUgd2hlbiBsaWIgZGlyIGlzICJ4IiBzaW5jZSB0aGUgbWFuaWZlc3Qgb2YgeC5qYXIgaW5jbHVkZXMgeEV4dHJhL3hFeHRyYS5qYXIKLSAgICAKLSAgICAgICAgeF94RXh0cmEucHJvcGVydGllcyAKLSAgICAgICAgCisKKyAgICAgICAgeF94RXh0cmEucHJvcGVydGllcworCiAgICAgeEV4dHJhL3hFeHRyYS5qYXIgLSBuZXZlciBhY2Nlc3NpYmxlLiAgSGVyZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgQ2xhc3MtUGF0aCBoYW5kbGluZwotICAgIG9mIHhFeHRyYS94RXh0cmEuamFyIGluIC94L3guamFyJ3MgbWFuaWZlc3QgY29ycmVjdGx5IHJlc29sdmVzIHJlbGF0aXZlIHRvIHRoZSB4IGRpcmVjdG9yeSAKKyAgICBvZiB4RXh0cmEveEV4dHJhLmphciBpbiAveC94LmphcidzIG1hbmlmZXN0IGNvcnJlY3RseSByZXNvbHZlcyByZWxhdGl2ZSB0byB0aGUgeCBkaXJlY3RvcnkKICAgICB3aGVyZSB4LmphciByZXNpZGVzIGFuZCBub3QgcmVsYXRpdmUgdG8gdGhlIHRvcC1sZXZlbCBvZiB0aGUgRUFSCi0gICAgCisKICAgICAgICAgeEV4dHJhLnByb3BlcnRpZXMKLSAgICAKKwogICAgIHgveE1vcmUgLSBuZXZlciBhY2Nlc3NpYmxlIGJlY2F1c2UgZXZlbiB3aGVuIHRoZSBsaWItZGlyIGlzIHggKGFuZAogICAgIHguamFyJ3MgbWFuaWZlc3QgQ2xhc3MtUGF0aCBzcGVjaWZpZXMgeE1vcmUvc3ViKSwgb25seSB4TW9yZS9zdWIgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZQogICAgIGNsYXNzIHBhdGgsIG5vdCBpdHMgcGFyZW50IGRpcmVjdG9yeS4KLSAgICAKLSAgICAgICAgeF94TW9yZS5wcm9wZXJ0aWVzIAotICAgICAgICAKKworICAgICAgICB4X3hNb3JlLnByb3BlcnRpZXMKKwogICAgIHgveE1vcmUvc3ViIC0gYWNjZXNzaWJsZSB3aGVuIGxpYi1kaXIgaXMgeAotICAgIAotICAgICAgICB4X3hNb3JlX3N1Yi5wcm9wZXJ0aWVzIAotICAgIAotICAgIHhFeHRyYS94RXh0cmEuamFyIC0gbmV2ZSBhY2Nlc3NpYmxlIGJlY2F1c2UgdGhlIG1hbmlmZXN0IENsYXNzLVBhdGggZW50cmllcyBpbiB4L3guamFyIHNob3VsZCBiZSByZWxhdGl2ZSB0byAKKworICAgICAgICB4X3hNb3JlX3N1Yi5wcm9wZXJ0aWVzCisKKyAgICB4RXh0cmEveEV4dHJhLmphciAtIG5ldmUgYWNjZXNzaWJsZSBiZWNhdXNlIHRoZSBtYW5pZmVzdCBDbGFzcy1QYXRoIGVudHJpZXMgaW4geC94LmphciBzaG91bGQgYmUgcmVsYXRpdmUgdG8KICAgICB0aGUgVVJJIG9mIHRoZSBKQVIgaXRzZWxmLCBhbmQgc28gc2hvdWxkIHJlc29sdmUgdG8geC94RXh0cmEveEV4dHJhLmphciwgbm90IHhFeHRyYS94RXh0cmEuamFyCi0gICAgCi0gICAgICAgIHhFeHRyYV94RXh0cmEucHJvcGVydGllcyAKLSAgICAKLSAgICB4TW9yZS9zdWIvIC0gbmV2ZXIgYWNjZXNzaWJsZSAoYWdhaW4gYmVjYXVzZSB4L3guamFyJ3MgQ2xhc3MtUGF0aCBlbnRyeSBmb3IgeE1vcmUvc3ViIAorCisgICAgICAgIHhFeHRyYV94RXh0cmEucHJvcGVydGllcworCisgICAgeE1vcmUvc3ViLyAtIG5ldmVyIGFjY2Vzc2libGUgKGFnYWluIGJlY2F1c2UgeC94LmphcidzIENsYXNzLVBhdGggZW50cnkgZm9yIHhNb3JlL3N1YgogICAgIHNob3VsZCBiZSByZXNvbHZlZCByZWxhdGl2ZSB0byB4L3guamFyJ3MgbG9jYXRpb24gd2hpY2ggaXMgL3ggYW5kIHNob3VsZCB0aGVyZWZvcmUgcmVzb3ZsZSB0byB4L3hNb3JlL3N1YgogICAgIHdpdGhpbiB0aGUgSkFSIHJhdGhlciB0aGFuIHhNb3JlL3N1YgotICAgIAotICAgICAgICB4TW9yZV9zdWIucHJvcGVydGllcyAKKworICAgICAgICB4TW9yZV9zdWIucHJvcGVydGllcwogCiAgICAgeS95LmphciAtIGFsd2F5cyBhY2Nlc3NpYmxlIHRvIHRoZSBjbGllbnQgKGFwcGVhcnMgaW4gdGhlIENsYXNzLVBhdGggb2YgdGhlIGFwcCBjbGllbnQgSkFSJ3MgbWFuaWZlc3QpCi0gICAgCisKICAgICAgICAgeS5wcm9wZXJ0aWVzCi0gICAgICAgIAotICAgIAorCisKICAgICBUaGVyZSBhcmUgdGhyZWUgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBFQVIgY3JlYXRlZCwgZWFjaCBvZiB3aGljaCB1c2VzIGEKICAgICBkaWZmZXJlbnQgPGxpYnJhcnktZGlyZWN0b3J5PiBzZXR0aW5nOgotICAgIAorCiAgICAgICAgIGRlZmF1bHQuZWFyIC0gb21pdHMgPGxpYnJhcnktZGlyZWN0b3J5Piwgc28gdGhlIGRlZmF1bHQgb2YgbGliIHNob3VsZCBiZSB1c2VkCiAgICAgICAgIG5vbmUuZWFyIC0gc3BlY2lmaWVzIDxsaWJyYXJ5LWRpcmVjdG9yeS8+IChlbXB0eSk7IG5vIGxpYnJhcnkgZGlyZWN0b3J5IHNob3VsZCBiZSB1c2VkCiAgICAgICAgIHguZWFyIC0gc3BlY2lmaWVzIDxsaWJyYXJ5LWRpcmVjdG9yeT4gYXMgeAotICAgIAotICAgIEVhY2ggRUFSIHNob3VsZCBnaXZlIHNvbWV3aGF0IGRpZmZlcmVudCByZXN1bHRzIGluIHRyeWluZyB0byBsb2NhdGUgdmFyaW91cyAKKworICAgIEVhY2ggRUFSIHNob3VsZCBnaXZlIHNvbWV3aGF0IGRpZmZlcmVudCByZXN1bHRzIGluIHRyeWluZyB0byBsb2NhdGUgdmFyaW91cwogICAgIHByb3BlcnRpZXMgZmlsZXMgYW5kIHByb3BlcnRpZXMgd2l0aGluIHRoZW0uCi0gICAgCi0gICAgCisKKwogICAgICoqKiogU1BFQ0lGWUlORyBURVNUUyAqKioqCi0gICAgCisKICAgICBUaGUgYXBwIGNsaWVudCBkcml2ZXIgYWNjZXB0cyBjb21tYW5kLWxpbmUgYXJndW1lbnRzIHRoYXQgc3BlY2lmeSBhIHBhdGggZm9yIGEgcmVzb3VyY2UsCiAgICAgYSBwcm9wZXJ0eSBuYW1lIGV4cGVjdGVkIHRvIGJlIGZvdW5kIGluIHRoZSByZXNvdXJjZSwgYW5kIHRoZSB2YWx1ZSBleHBlY3RlZCBmb3IgdGhhdAogICAgIHByb3BlcnR5IGluIHRoYXQgcmVzb3VyY2UuICBUaGUgZm9ybWF0IG9mIGVhY2ggdGVzdCBleHByZXNzaW9uIGlzCi0gICAgCisKICAgICAgICB7cmVzb3VyY2UtcGF0aH06e3Byb3BlcnR5LW5hbWV9PXtleHBlY3RlZC12YWx1ZX0KLSAgICAgICAKLSAgICBUaGUgY2xpZW50LSBhbmQgc2VydmVyLXNpZGUgdGVzdHMgdXNlIHRoZSBzYW1lIGNvbW1vbiBsb2dpYyBpbiBSZXNvdXJjZUhlbHBlciAKKworICAgIFRoZSBjbGllbnQtIGFuZCBzZXJ2ZXItc2lkZSB0ZXN0cyB1c2UgdGhlIHNhbWUgY29tbW9uIGxvZ2ljIGluIFJlc291cmNlSGVscGVyCiAgICAgdG8gcGFyc2UgdGhlIHRlc3QgZXhwcmVzc2lvbnMsIHRvIHNlYXJjaCBmb3IgYQotICAgIHJlc291cmNlLCB0byBsb2FkIGEgUHJvcGVydGllcyBvYmplY3QgdXNpbmcgdGhlIHJlc291cmNlLCBhbmQgdG8gZ2V0IHRoZSB2YWx1ZSAKKyAgICByZXNvdXJjZSwgdG8gbG9hZCBhIFByb3BlcnRpZXMgb2JqZWN0IHVzaW5nIHRoZSByZXNvdXJjZSwgYW5kIHRvIGdldCB0aGUgdmFsdWUKICAgICBvZiBhIHJlcXVlc3RlZCBwcm9wZXJ0eSBhbmQgY29tcGFyaW5nIGl0IHRvIHRoZSBleHBlY3RlZCB2YWx1ZS4KIC0tPgogICAgICZjb21tb25CdWlsZDsKIAogICAgICAgICA8cHJvcGVydHkgbmFtZT0idGVzdE5hbWUiIHZhbHVlPSJsaWJDbGFzc1BhdGgyIi8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhcmNoaXZlZGlyIiB2YWx1ZT0iJHtidWlsZH0vYXJjaGl2ZXMiLz4KLSAgICAgICAgCisKICAgICAgICAgPHByb3BlcnR5IG5hbWU9InguZWFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS8ke3Rlc3ROYW1lfXgtQXBwLmVhciIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVmYXVsdC5lYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9LyR7dGVzdE5hbWV9ZGVmYXVsdC1BcHAuZWFyIi8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJub25lLmVhciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vJHt0ZXN0TmFtZX1ub25lLUFwcC5lYXIiLz4KQEAgLTE2Niw3ICsxNjYsNyBAQAogICAgICAgICAgICAgRUFScyBidXQgbm90IG90aGVyczsgc29tZSBzaG91bGQgd29yayBpbiBhbGwgRUFSczsgc29tZSBzaG91bGQgd29yawogICAgICAgICAgICAgaW4gbm8gRUFScy4KICAgICAgICAgLS0+Ci0gICAgICAgIAorCiAgICAgICAgIDwhLS0KICAgICAgICAgICAgIFRoZSB0ZXN0IGZvciB0aGUgdG9wLWxldmVsIEpBUiBzaG91bGQgYWx3YXlzIGJlIHBvc2l0aXZlLCB1bmxlc3MKICAgICAgICAgICAgIGFuZCB1bnRpbCB3ZSByZXRpcmUgdGhhdCBsZWdhY3kgZmVhdHVyZS4KQEAgLTE4MCw3ICsxODAsNyBAQAogICAgICAgICA8cHJvcGVydHkgbmFtZT0idGVzdC54IiB2YWx1ZT0iL3gucHJvcGVydGllczpsaWIucGF0aD0iLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRlc3QueC5wb3MiIHZhbHVlPSIke3Rlc3QueH14Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LngubmVnIiB2YWx1ZT0iJHt0ZXN0Lnh9Tk9fUkVTT1VSQ0UiLz4KLSAgICAgICAgCisKICAgICAgICAgPCEtLQogICAgICAgICAgICAgeEV4dHJhLnByb3BlcnRpZXMgaXMgbmV2ZXIgYWNjZXNzaWJsZQogICAgICAgICAtLT4KQEAgLTE5Myw3ICsxOTMsNyBAQAogICAgICAgICA8cHJvcGVydHkgbmFtZT0idGVzdC54LnhFeHRyYSIgdmFsdWU9Ii94X3hFeHRyYS5wcm9wZXJ0aWVzOnhfeEV4dHJhPSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0idGVzdC54LnhFeHRyYS5wb3MiIHZhbHVlPSIke3Rlc3QueC54RXh0cmF9eF94RXh0cmEiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRlc3QueC54RXh0cmEubmVnIiB2YWx1ZT0iJHt0ZXN0LngueEV4dHJhfU5PX1JFU09VUkNFIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDwhLS0KICAgICAgICAgICAgIGxpYi5wcm9wZXJ0aWVzIGlzIGFjY2Vzc2libGUgb25seSB1c2luZyBkZWZhdWx0LmVhcgogICAgICAgICAtLT4KQEAgLTIxNSw4ICsyMTUsOCBAQAogICAgICAgICA8cHJvcGVydHkgbmFtZT0idGVzdC54LnhNb3JlLm5lZyIgdmFsdWU9IiR7dGVzdC54LnhNb3JlfU5PX1JFU09VUkNFIi8+CiAKICAgICAgICAgPCEtLQotICAgICAgICAgICAgeE1vcmVfc3ViLnByb3BlcnRpZXMgaXMgbmV2ZXIgYWNjZXNzaWJsZSAoYmVjYXVzZSB0aGUgeE1vcmUvc3ViIAotICAgICAgICAgICAgQ2xhc3MtUGF0aCBlbnRyeSBpbiB4LmphcidzIG1hbmlmZXN0IG11c3QgYmUgcmVzb2x2ZWQgd2l0aGluIHRoZSAveCAKKyAgICAgICAgICAgIHhNb3JlX3N1Yi5wcm9wZXJ0aWVzIGlzIG5ldmVyIGFjY2Vzc2libGUgKGJlY2F1c2UgdGhlIHhNb3JlL3N1YgorICAgICAgICAgICAgQ2xhc3MtUGF0aCBlbnRyeSBpbiB4LmphcidzIG1hbmlmZXN0IG11c3QgYmUgcmVzb2x2ZWQgd2l0aGluIHRoZSAveAogICAgICAgICAgICAgZGlyZWN0b3J5IHdoZXJlIHguamFyIGlzIGZvdW5kLCBub3QgZnJvbSB0aGUgdG9wLWxldmVsIG9mIHRoZSBFQVIKICAgICAgICAgLS0+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LnhNb3JlLnN1YiIgdmFsdWU9Ii94TW9yZV9zdWIucHJvcGVydGllczp4TW9yZV9zdWI9Ii8+CkBAIC0yMzAsMTMgKzIzMCwxMyBAQAogICAgICAgICA8cHJvcGVydHkgbmFtZT0idGVzdC54LnhNb3JlLnN1Yi5uZWciIHZhbHVlPSIke3Rlc3QueC54TW9yZS5zdWJ9Tk9fUkVTT1VSQ0UiLz4KIAogICAgICAgICA8IS0tCi0gICAgICAgICAgICB6LnByb3BlcnRpZXMgaXMgYWx3YXlzIGFjY2Vzc2libGUgdG8gdGhlIGNsaWVudCAoaXQgYXBwZWFycyBpbiB0aGUgQ2xhc3MtUGF0aCAKKyAgICAgICAgICAgIHoucHJvcGVydGllcyBpcyBhbHdheXMgYWNjZXNzaWJsZSB0byB0aGUgY2xpZW50IChpdCBhcHBlYXJzIGluIHRoZSBDbGFzcy1QYXRoCiAgICAgICAgICAgICBpbiB0aGUgYXBwIGNsaWVudCBKQVIncyBtYW5pZmVzdCkgYnV0IG5ldmVyIHRvIHRoZSBzZXJ2ZXIKICAgICAgICAgLS0+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LnoiIHZhbHVlPSIvei5wcm9wZXJ0aWVzOnZhbHVlPSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0idGVzdC56LnBvcyIgdmFsdWU9IiR7dGVzdC56fXoiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRlc3Quei5uZWciIHZhbHVlPSIke3Rlc3Quen1OT19SRVNPVVJDRSIvPgotICAgICAgICAKKwogICAgICAgICA8IS0tCiAgICAgICAgICAgICB5LnByb3BlcnRpZXMgc2hvdWxkIGFsd2F5cyBiZSBhY2Nlc3NpYmxlIGJlY2F1c2UgdGhlCiAgICAgICAgICAgICBhcHAgY2xpZW50IEpBUiBtYW5pZmVzdCB1c2VkIGZvciB0aGUgYXBwIGNsaWVudCBKQVIgc2hhcmVkIGJ5IGFsbApAQCAtMjQ1LDIxICsyNDUsMjEgQEAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRlc3QueSIgdmFsdWU9Ii95LnByb3BlcnRpZXM6dmFsdWU9Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LnkucG9zIiB2YWx1ZT0iJHt0ZXN0Lnl9eSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0idGVzdC55Lm5lZyIgdmFsdWU9IiR7dGVzdC55fU5PX1JFU09VUkNFIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDwhLS0KICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBkZWZpbmUgdGhlIGV4cGVjdGVkIHJlc3VsdHMgZm9yIGVhY2ggdGVzdCBydW4uCiAgICAgICAgIC0tPgotICAgICAgICAKKwogICAgICAgICA8IS0tIGxpYnJhcnktZGlyZWN0b3J5IHNwZWNpZmllZCBhcyBlbXB0eSwgbWVhbmluZyBubyBsaWIgZGlyIHNob3VsZCBiZSB1c2VkIC0tPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0ibm9MaWIuZXhwZWN0ZWQucmVzdWx0cyIgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJub0xpYi5leHBlY3RlZC5yZXN1bHRzIgogICAgICAgICAgICAgdmFsdWU9IiR7dGVzdC50bC5wb3N9ICR7dGVzdC54Lm5lZ30gJHt0ZXN0LnhFeHRyYS5uZWd9ICR7dGVzdC5saWIubmVnfSAke3Rlc3QubGliLnN1Yi5uZWd9ICR7dGVzdC54LnhFeHRyYS5uZWd9ICR7dGVzdC54TW9yZS5zdWIubmVnfSAke3Rlc3QueC54TW9yZS5uZWd9ICR7dGVzdC54LnhNb3JlLnN1Yi5uZWd9IC1jbGllbnRvbmx5ICR7dGVzdC56LnBvc30gLXNlcnZlcm9ubHkgJHt0ZXN0LnoubmVnfSAke3Rlc3QueS5uZWd9Ii8+Ci0gICAgICAgIAorCiAgICAgICAgIDwhLS0gbGlicmFyeS1kaXJlY3Rvcnkgbm90IHNwZWNpZmllZDsgZGVmYXVsdCBvZiBsaWIgdXNlZCAtLT4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlZmF1bHRMaWIuZXhwZWN0ZWQucmVzdWx0cyIgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZWZhdWx0TGliLmV4cGVjdGVkLnJlc3VsdHMiCiAgICAgICAgICAgICB2YWx1ZT0iJHt0ZXN0LnRsLnBvc30gJHt0ZXN0LngubmVnfSAke3Rlc3QueEV4dHJhLm5lZ30gJHt0ZXN0LmxpYi5wb3N9ICR7dGVzdC5saWIuc3ViLm5lZ30gJHt0ZXN0LngueEV4dHJhLm5lZ30gJHt0ZXN0LnhNb3JlLnN1Yi5uZWd9ICR7dGVzdC54LnhNb3JlLm5lZ30gJHt0ZXN0LngueE1vcmUuc3ViLm5lZ30gLWNsaWVudG9ubHkgJHt0ZXN0LnoucG9zfSAtc2VydmVyb25seSAke3Rlc3Quei5uZWd9ICR7dGVzdC55Lm5lZ30iLz4KIAogICAgICAgICA8IS0tIGxpYnJhcnktZGlyZWN0b3J5IHNwZWNpZmllZCBhcyB4OyB4LmphciBhbmQgaXRzIENsYXNzLVBhdGggZW50cmllcyB4RXh0cmEveEV4dHJhLmphciBhbmQgeE1vcmUvc3ViIHVzZWQgLS0+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHBsaWNpdExpYldpdGhEaXIuZXhwZWN0ZWQucmVzdWx0cyIgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHBsaWNpdExpYldpdGhEaXIuZXhwZWN0ZWQucmVzdWx0cyIKICAgICAgICAgICAgIHZhbHVlPSIke3Rlc3QudGwucG9zfSAke3Rlc3QueC5wb3N9ICR7dGVzdC54RXh0cmEubmVnfSAke3Rlc3QubGliLm5lZ30gJHt0ZXN0LmxpYi5zdWIubmVnfSAke3Rlc3QueC54RXh0cmEucG9zfSAke3Rlc3QueE1vcmUuc3ViLm5lZ30gJHt0ZXN0LngueE1vcmUubmVnfSAtY2xpZW50b25seSAke3Rlc3Quei5wb3N9IC1zZXJ2ZXJvbmx5ICR7dGVzdC56Lm5lZ30gJHt0ZXN0LnkubmVnfSIvPgogCiAKQEAgLTI2OSw5ICsyNjksOSBAQAogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfS9jbGllbnQiLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0vY2xpZW50L3kiLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0vY2xpZW50L3oiLz4KLSAgICAgICAgCisKICAgICAgICAgPG1rZGlyIGRpcj0iJHthcmNoaXZlZGlyfSIvPgotICAgICAgICAKKwogICAgICAgICA8IS0tIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXMgd2lsbCBob2xkIGRpZmZlcmVudCBmaWxlcyBzbyB0aGV5IHdpbGwKICAgICAgICAgICAgICBhcHBlYXIgaW4gdGhlIEVBUiBpbiB0aGUgcmlnaHQgcGxhY2VzLgogICAgICAgICAgLS0+CkBAIC0yNzksMTUgKzI3OSwxNSBAQAogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfS94L3hFeHRyYSIvPiAgICA8IS0tIGhvbGRzIHhFeHRyYS5qYXIgLS0+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9L3gveE1vcmUiLz4gICAgIDwhLS0gaG9sZHMgeF94TW9yZS5wcm9wZXJ0aWVzIChzaG91bGQgbm90IGJlIGFjY2Vzc2libGUpIC0tPgogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfS94L3hNb3JlL3N1YiIvPiA8IS0tIGhvbGRzIHhfeE1vcmVfc3ViLnByb3BlcnRpZXMgLS0+Ci0gICAgICAgIAorCiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9L3hNb3JlLyIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfS94TW9yZS9zdWIiLz4gICA8IS0tIGhvbGRzIHhNb3JlX3N1Yi5wcm9wZXJ0aWVzIChzaG91bGQgbm90IGJlIGFjY2Vzc2libGUpIC0tPgotICAgICAgICAKKwogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfS9saWIiLz4gICAgICAgICA8IS0tIGhvbGRzIGxpYi5qYXIgLS0+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9L2xpYi9zdWIiLz4gICAgIDwhLS0gaG9sZHMgbGliX3N1Yi5qYXIgKHNob3VsZCBub3QgYmUgYWNjZXNzaWJsZSkgLS0+Ci0gICAgICAgIAotICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfS94RXh0cmEiLz4gICAgICA8IS0tIGhvbGRzIHhFeHRyYS5qYXIgKHNob3VsZCBub3QgYmUgYWNjZXNzaWJsZSkgLS0+IAotICAgICAgICAKKworICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfS94RXh0cmEiLz4gICAgICA8IS0tIGhvbGRzIHhFeHRyYS5qYXIgKHNob3VsZCBub3QgYmUgYWNjZXNzaWJsZSkgLS0+CisKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0icHJlcGFyZSI+CkBAIC0yOTksMTEgKzI5OSwxMSBAQAogICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9Im1ha2VFYXJzIi8+CiAKICAgICA8dGFyZ2V0IG5hbWU9Im1ha2VKYXJzIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAKKwogICAgICAgICA8IS0tCiAgICAgICAgICAgICBCdWlsZCB0aGUgdmFyaW91cyBqYXJzIHVzZWQgaW4gdGhlIGRpZmZlcmVudCB0ZXN0cy4KICAgICAgICAgLS0+Ci0gICAgICAgIAorCiAgICAgICAgIDwhLS0KICAgICAgICAgICAgIFRoZSB4L3guamFyIHdpbGwgaGF2ZSB0aGUgQ2xhc3MtUGF0aCBzZXR0aW5nIGluIGl0cyBtYW5pZmVzdCwgc28KICAgICAgICAgICAgIHNwZWNpZnkgdGhlIG1hbmlmZXN0IHJhdGhlciB0aGFuIGxldHRpbmcgYW50IGNyZWF0ZSBpdC4KQEAgLTMxMSwxNSArMzExLDE1IEBACiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7eC5qYXJ9IiBtYW5pZmVzdD0ieC9NQU5JRkVTVC5NRiI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IngiIGluY2x1ZGVzPSIqLnByb3BlcnRpZXMiLz4KICAgICAgICAgPC9qYXI+Ci0gICAKKwogICAgICAgICA8amFyIGRlc3RmaWxlPSIke3hfeEV4dHJhLmphcn0iPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJ4L3hFeHRyYSIgaW5jbHVkZXM9IioucHJvcGVydGllcyIvPgogICAgICAgICA8L2phcj4KLSAgICAgICAgCisKICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHt4RXh0cmEuamFyfSI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9InhFeHRyYSIgaW5jbHVkZXM9IioucHJvcGVydGllcyIvPgogICAgICAgICA8L2phcj4KLSAgICAgICAgCisKICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtsaWIuamFyfSI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImxpYiIgaW5jbHVkZXM9IioucHJvcGVydGllcyIvPgogICAgICAgICA8L2phcj4KQEAgLTMzMSw3ICszMzEsNyBAQAogICAgICAgICA8amFyIGRlc3RmaWxlPSIke3RvcExldmVsLmphcn0iPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJ0b3BMZXZlbCIgaW5jbHVkZXM9IioqLyoucHJvcGVydGllcyIvPgogICAgICAgICA8L2phcj4KLSAgICAgICAgCisKICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHt6Lmphcn0iPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQveiIgaW5jbHVkZXM9IioucHJvcGVydGllcyIvPgogICAgICAgICA8L2phcj4KQEAgLTM0Myw5ICszNDMsOSBAQAogICAgICAgICA8Y29weSBmaWxlPSJ4L3hNb3JlL3hfeE1vcmUucHJvcGVydGllcyIgdG9kaXI9IiR7eC54TW9yZS5kaXJ9Ii8+CiAgICAgICAgIDxjb3B5IGZpbGU9IngveE1vcmUvc3ViL3hfeE1vcmVfc3ViLnByb3BlcnRpZXMiIHRvZGlyPSIke3gueE1vcmUuc3ViLmRpcn0iLz4KICAgICAgICAgPGNvcHkgZmlsZT0ieE1vcmUvc3ViL3hNb3JlX3N1Yi5wcm9wZXJ0aWVzIiB0b2Rpcj0iJHt4TW9yZS5zdWIuZGlyfSIvPgotICAgICAgICAKKwogICAgICAgICA8Y29weSBmaWxlPSJjbGllbnQveS95LnByb3BlcnRpZXMiIHRvZGlyPSIke3kuZGlyfSIvPgotICAgICAgICAKKwogICAgICAgICA8IS0tCiAgICAgICAgICAgICBCdWlsZCB0aGUgRUpCIGFuZCBjbGllbnQgamFycy4gIFRoZSBSZXNvdXJjZUhlbHBlciBjbGFzcyBpcyB1c2VkIGZyb20KICAgICAgICAgICAgIHRoZSBFSkIgYW5kIGFsc28gZnJvbSB0aGUgY2xpZW50LCBzbyBpbmNsdWRlIGl0IGluIGJvdGggc3VibW9kdWxlcy4KQEAgLTM1NiwyNCArMzU2LDI0IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGR9IiBpbmNsdWRlcz0iKiovZWpiLyoqLyouY2xhc3MiLz4KICAgICAgICAgICAgIDxmaWxlc2V0IHJlZmlkPSJyZXNvdXJjZUhlbHBlckNsYXNzIi8+CiAgICAgICAgIDwvamFyPgotICAgICAgICAKKwogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2NsaWVudC5qYXJ9IiBtYW5pZmVzdD0iY2xpZW50L01BTklGRVNULk1GIj4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZH0iIGluY2x1ZGVzPSIqKi9jbGllbnQvKiovKi5jbGFzcyIvPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkfSIgaW5jbHVkZXM9IioqL2VqYi9Mb29rdXBTQlJlbW90ZS5jbGFzcyIvPgogICAgICAgICAgICAgPGZpbGVzZXQgcmVmaWQ9InJlc291cmNlSGVscGVyQ2xhc3MiLz4KICAgICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9Im1ha2VFYXJzIiBkZXBlbmRzPSJtYWtlSmFycyI+CiAKICAgICAgICAgPCEtLQogICAgICAgICAgICAgQWxsIHRoZSBFQVJzIGFyZSBwb3B1bGF0ZWQgd2l0aCBleGFjdGx5IHRoZSBzYW1lIGNvbnRlbnQgRVhDRVBUIGZvcgotICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uLnhtbCwgd2hpY2ggZGlmZmVycyBmb3IgZWFjaC4gIFRoZSBlYXJJbmNsdWRlcyBwcm9wZXJ0eSAKKyAgICAgICAgICAgIHRoZSBhcHBsaWNhdGlvbi54bWwsIHdoaWNoIGRpZmZlcnMgZm9yIGVhY2guICBUaGUgZWFySW5jbHVkZXMgcHJvcGVydHkKICAgICAgICAgICAgIGRlZmluZWQgbmV4dCBzcGVsbHMgb3V0IGFsbCB0aGUgSkFScyBhbmQgZGlyZWN0b3JpZXMgaW5jbHVkZWQgaW4gYWxsCiAgICAgICAgICAgICB0aGUgRUFScy4KICAgICAgICAgLS0+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJlYXJJbmNsdWRlcyIgdmFsdWU9ImxpYmRpcnRlc3QtRUpCTW9kdWxlLmphcixjbGllbnQvbGliZGlydGVzdC1jbGllbnQuamFyLGNsaWVudC96L3ouamFyLGNsaWVudC95L3kucHJvcGVydGllcyx0b3BMZXZlbC5qYXIsbGliL2xpYi5qYXIsbGliL3N1Yi9saWJfc3ViLmphcix4L3guamFyLHhFeHRyYS94RXh0cmEuamFyLHgveEV4dHJhL3hFeHRyYS5qYXIseC94TW9yZS8qKix4TW9yZS8qKiIvPgotICAgICAgICAKKwogICAgICAgICA8ZWFyIGRlc3RmaWxlPSIke25vbmUuZWFyfSIgYmFzZWRpcj0iJHtidWlsZH0iCiAgICAgICAgICAgICAgYXBweG1sPSJhcHBsaWNhdGlvbi1ub0xpYkRpci54bWwiIGluY2x1ZGVzPSIke2VhckluY2x1ZGVzfSIvPgogCkBAIC00MzgsNyArNDM4LDcgQEAKIAogICAgIDwvdGFyZ2V0PgogCi0gICAgCisKICAgICA8bWFjcm9kZWYgbmFtZT0iZGVwbG95Ij4KICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJtb2R1bGVOYW1lIi8+CiAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZWFyRmlsZSIgZGVmYXVsdD0iJHthcmNoaXZlZGlyfS9Ae21vZHVsZU5hbWV9LmVhciIvPgpAQCAtNDU4LDE5ICs0NTgsMTkgQEAKICAgICAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPC9zZXF1ZW50aWFsPgogICAgIDwvbWFjcm9kZWY+Ci0gICAgCisKICAgICA8bWFjcm9kZWYgbmFtZT0icnVuLXRlc3QiPgogICAgICAgICA8YXR0cmlidXRlIG5hbWU9InRlc3RzIi8+CiAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibG9nSUQiLz4KICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJtb2R1bGVOYW1lIi8+CiAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xpZW50RmlsZSIgZGVmYXVsdD0iJHthcmNoaXZlZGlyfS9Ae21vZHVsZU5hbWV9Q2xpZW50LmphciIvPgogICAgICAgICA8YXR0cmlidXRlIG5hbWU9InRlc3RMb2dUaXRsZSIgZGVmYXVsdD0iQHtleHBlY3RlZFJlc3VsdH0iLz4KLSAgICAgICAgCisKICAgICAgICAgPHNlcXVlbnRpYWw+CiAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlY2xhcmUtdGVzdCI+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRlc2NyaXB0aW9uIiB2YWx1ZT0iZWFyL2xpYmNsYXNzcGF0aDIgVGVzdGluZyBmb3IgQHt0ZXN0TG9nVGl0bGV9Ii8+CiAgICAgICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iJHtBUFBDTElFTlR9IC1jbGllbnQgQHtjbGllbnRGaWxlfSBAe3Rlc3RzfSIvPgogICAgICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9IiByZXN1bHRwcm9wZXJ0eT0icmVzdWx0IiBvdXRwdXQ9IiR7YnVpbGR9L0B7bG9nSUR9Lm91dHB1dC5sb2ciIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLWNsaWVudCIvPgpAQCAtNDc4LDEwICs0NzgsMTAgQEAKICAgICAgICAgICAgICAgICA8YXJnIGxpbmU9IkB7dGVzdHN9Ii8+CiAgICAgICAgICAgICA8L2V4ZWM+CiAgICAgICAgICAgICA8Y2hlY2tSZXN1bHQgbG9nSUQ9IkB7bG9nSUR9Ii8+Ci0gICAgICAgICAgICAKKwogICAgICAgIDwvc2VxdWVudGlhbD4KLSAgICA8L21hY3JvZGVmPiAgCi08IS0tICAgIAorICAgIDwvbWFjcm9kZWY+Cis8IS0tCiAgICAgPG1hY3JvZGVmIG5hbWU9InJ1bi10ZXN0LW9ubHkiPgogICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImV4cGVjdGVkUmVzdWx0Ii8+CiAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibG9nSUQiLz4KQEAgLTQ5NCwxNiArNDk0LDE2IEBACiAgICAgICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLWNsaWVudCIvPgogICAgICAgICAgICAgICAgIDxhcmcgdmFsdWU9IkB7Y2xpZW50RmlsZX0iLz4KICAgICAgICAgICAgICAgICA8YXJnIHZhbHVlPSJAe2V4cGVjdGVkUmVzdWx0fSIvPgotICAgICAgICAgICAgPC9leGVjPiAKLSAgICAgICAgPC9zZXF1ZW50aWFsPiAgIAotICAgIDwvbWFjcm9kZWY+ICAKLSAgICAKKyAgICAgICAgICAgIDwvZXhlYz4KKyAgICAgICAgPC9zZXF1ZW50aWFsPgorICAgIDwvbWFjcm9kZWY+CisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1vbmx5IiBkZXBlbmRzPSJpbml0Ij4KICAgICAgICAgPHJ1bi10ZXN0LW9ubHkgZXhwZWN0ZWRSZXN1bHQ9IiR7ZXhwZWN0ZWRSZXN1bHR9IiBsb2dJRD0iJHtsb2dJRH0iLz4KICAgICA8L3RhcmdldD4KICAgICAtLT4KICAgICA8IS0tCi0gICAgICAgIENvbnZlbmllbmNlIHRhcmdldCBmb3IgZGVwbG95aW5nIGFuZCBydW5uaW5nIGEgc2luZ2xlIHRlc3QuICBIYW5kLWVkaXQgdGhlIAorICAgICAgICBDb252ZW5pZW5jZSB0YXJnZXQgZm9yIGRlcGxveWluZyBhbmQgcnVubmluZyBhIHNpbmdsZSB0ZXN0LiAgSGFuZC1lZGl0IHRoZQogICAgICAgICBleHBlY3RlZFJlc3VsdCBwcm9wZXJ0eSAoYW5kIHRoZSBsb2dJRCBpZiB5b3UgZmVlbCBsaWtlIGl0KSBzbyBpdCBpcwogICAgICAgICBvbmUgb2YgdGhlIHRlc3QgYXBwcyBidWlsZCBieSB0aGUgYXNzZW1ibGUgdGFzay4KICAgICAtLT4KQEAgLTUxOSw3ICs1MTksNyBAQAogICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxvZ0ZpbGUiIGRlZmF1bHQ9IiR7YnVpbGR9L0B7bG9nSUR9Lm91dHB1dC5sb2ciLz4KICAgICAgICAgPHNlcXVlbnRpYWw+CiAgICAgICAgICAgICA8cHJvcGVydHkgZmlsZT0iQHtsb2dGaWxlfSIgcHJlZml4PSJ4QHtsb2dJRH0iLz4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8Y29uY2F0PgogICAgICAgICAgICAgICAgIDxmaWxlc2V0IGZpbGU9IkB7bG9nRmlsZX0iLz4KICAgICAgICAgICAgIDwvY29uY2F0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9jbGllbnQvTGliRGlyVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9jbGllbnQvTGliRGlyVGVzdENsaWVudC5qYXZhCmluZGV4IGE1Y2IyOWYuLmQ1MjA5NTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvY2xpZW50L0xpYkRpclRlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL2NsaWVudC9MaWJEaXJUZXN0Q2xpZW50LmphdmEKQEAgLTI4LDExICsyOCwxMSBAQAogcHVibGljIGNsYXNzIExpYkRpclRlc3RDbGllbnQgewogCiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQigpIExvb2t1cFNCUmVtb3RlIGxvb2t1cDsKLSAgICAKKwogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIExpYkRpclRlc3RDbGllbnQgKi8KICAgICBwdWJsaWMgTGliRGlyVGVzdENsaWVudCgpIHsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAcGFyYW0gYXJncyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwogICAgICAqLwpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICAgICAgU3lzdGVtLmV4aXQoLTEpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHJ1bihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZXN1bHQ9LTEiKTsKQEAgLTU3LDEzICs1NywxMyBAQAogICAgICAgICAgKkFzayB0aGUgRUpCIHRvIGZpbmQgdGhlIHJlcXVpcmVkIHJlc291cmNlcyBhbmQgcHJvcGVydHkgdmFsdWVzLgogICAgICAgICAgKi8KICAgICAgICAgUmVzb3VyY2VIZWxwZXIuUmVzdWx0IHNlcnZlclJlc3VsdCA9IGxvb2t1cC5ydW5UZXN0cyhhcmdzLCBSZXNvdXJjZUhlbHBlci5UZXN0VHlwZS5TRVJWRVIpOwotICAgICAgICAKKwogICAgICAgICAvKgogICAgICAgICAgKk5vdyB0cnkgdG8gZ2V0IHRoZSBzYW1lIHJlc3VsdHMgb24gdGhlIGNsaWVudCBzaWRlLgogICAgICAgICAgKi8KICAgICAgICAgU3RyaW5nQnVpbGRlciBjbGllbnRSZXN1bHRzID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKICAgICAgICAgUmVzb3VyY2VIZWxwZXIuUmVzdWx0IGNsaWVudFJlc3VsdCA9IFJlc291cmNlSGVscGVyLmNoZWNrQWxsKGFyZ3MsIFJlc291cmNlSGVscGVyLlRlc3RUeXBlLkNMSUVOVCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChzZXJ2ZXJSZXN1bHQuZ2V0UmVzdWx0KCkgJiYgY2xpZW50UmVzdWx0LmdldFJlc3VsdCgpKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlc3VsdD0wIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm5vdGU9UmVjZWl2ZWQgZXhwZWN0ZWQgcmVzdWx0cyIpOwpAQCAtODMsNiArODMsNiBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJub3RlPSIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9lamIvTG9va3VwU0JCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL2VqYi9Mb29rdXBTQkJlYW4uamF2YQppbmRleCA4N2FmYjU4Li5iOWRmODRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL2VqYi9Mb29rdXBTQkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL2VqYi9Mb29rdXBTQkJlYW4uamF2YQpAQCAtMzEsNyArMzEsNyBAQAogICovCiBAU3RhdGVsZXNzKCkKIHB1YmxpYyBjbGFzcyBMb29rdXBTQkJlYW4gaW1wbGVtZW50cyBMb29rdXBTQlJlbW90ZSB7Ci0gICAgCisKICAgICBwdWJsaWMgUmVzb3VyY2VIZWxwZXIuUmVzdWx0IHJ1blRlc3RzKFN0cmluZ1tdIHRlc3RzLCBSZXNvdXJjZUhlbHBlci5UZXN0VHlwZSB0ZXN0VHlwZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIFJlc291cmNlSGVscGVyLmNoZWNrQWxsKHRlc3RzLCB0ZXN0VHlwZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9lamIvTG9va3VwU0JSZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvZWpiL0xvb2t1cFNCUmVtb3RlLmphdmEKaW5kZXggMmY3N2YyYi4uMGU1MjM4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9lamIvTG9va3VwU0JSZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL2VqYi9Mb29rdXBTQlJlbW90ZS5qYXZhCkBAIC0yNyw1ICsyNyw1IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIExvb2t1cFNCUmVtb3RlIHsKICAgICBwdWJsaWMgUmVzb3VyY2VIZWxwZXIuUmVzdWx0IHJ1blRlc3RzKFN0cmluZ1tdIHRlc3RzLCBSZXNvdXJjZUhlbHBlci5UZXN0VHlwZSB0ZXN0VHlwZSkgdGhyb3dzIElPRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL2xpYi9hcHBsaWNhdGlvbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL2xpYi9hcHBsaWNhdGlvbi54bWwKaW5kZXggYTYxYTA5MC4uMTQxN2Y0ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9saWIvYXBwbGljYXRpb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvbGliL2FwcGxpY2F0aW9uLnhtbApAQCAtNDAsNSArNDAsNSBAQAogICAgIE9taXR0aW5nIHRoZSA8bGlicmFyeS1kaXJlY3Rvcnk+IGVsZW1lbnQgZW50aXJlbHkgc2hvdWxkIGNhdXNlIHRoZSBhcHAKICAgICBzZXJ2ZXIgdG8gYWRkIGFsbCBqYXJzIGluIHRoZSBkZWZhdWx0ICdsaWInIHN1YmRpcmVjdG9yeSB0byB0aGUKICAgICBydW50aW1lIGNsYXNzcGF0aC4KLS0tPiAgICAKKy0tPgogPC9hcHBsaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvbm9uZS9hcHBsaWNhdGlvbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL25vbmUvYXBwbGljYXRpb24ueG1sCmluZGV4IDI0YTc1NTIuLmU3NmQ2ZDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvbm9uZS9hcHBsaWNhdGlvbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9ub25lL2FwcGxpY2F0aW9uLnhtbApAQCAtMzYsNSArMzYsNSBAQAogICA8bW9kdWxlPgogICAgICAgPGphdmE+bGliZGlydGVzdC1jbGllbnQuamFyPC9qYXZhPgogICA8L21vZHVsZT4KLSAgPGxpYnJhcnktZGlyZWN0b3J5Lz4gPCEtLSBzdXBwcmVzcyBsaWJyYXJ5IGRpcmVjdG9yeSBoYW5kbGluZyAtLT4gIAorICA8bGlicmFyeS1kaXJlY3RvcnkvPiA8IS0tIHN1cHByZXNzIGxpYnJhcnkgZGlyZWN0b3J5IGhhbmRsaW5nIC0tPgogPC9hcHBsaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIveC9hcHBsaWNhdGlvbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL3gvYXBwbGljYXRpb24ueG1sCmluZGV4IGZhODBhMTIuLjM1ZjY2ODIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIveC9hcHBsaWNhdGlvbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi94L2FwcGxpY2F0aW9uLnhtbApAQCAtMzYsNSArMzYsNSBAQAogICA8bW9kdWxlPgogICAgICAgPGphdmE+bGliZGlydGVzdC1jbGllbnQuamFyPC9qYXZhPgogICA8L21vZHVsZT4KLSAgPGxpYnJhcnktZGlyZWN0b3J5Png8L2xpYnJhcnktZGlyZWN0b3J5PiAgCisgIDxsaWJyYXJ5LWRpcmVjdG9yeT54PC9saWJyYXJ5LWRpcmVjdG9yeT4KIDwvYXBwbGljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL3kvYXBwbGljYXRpb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi95L2FwcGxpY2F0aW9uLnhtbAppbmRleCBjNjQ3Y2QyLi5kM2FlZTBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL3kvYXBwbGljYXRpb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIveS9hcHBsaWNhdGlvbi54bWwKQEAgLTM2LDUgKzM2LDUgQEAKICAgPG1vZHVsZT4KICAgICAgIDxqYXZhPmxpYmRpcnRlc3QtY2xpZW50LmphcjwvamF2YT4KICAgPC9tb2R1bGU+Ci0gIDxsaWJyYXJ5LWRpcmVjdG9yeT55PC9saWJyYXJ5LWRpcmVjdG9yeT4gIAorICA8bGlicmFyeS1kaXJlY3Rvcnk+eTwvbGlicmFyeS1kaXJlY3Rvcnk+CiA8L2FwcGxpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvY2xpZW50L2kxOG4vc2ltcGxlL1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL2NsaWVudC9pMThuL3NpbXBsZS9UZXN0Q2xpZW50LmphdmEKaW5kZXggNDIzMjkwMi4uMDRmMTAxYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvY2xpZW50L2kxOG4vc2ltcGxlL1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9jbGllbnQvaTE4bi9zaW1wbGUvVGVzdENsaWVudC5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgIFRlc3RDbGllbnQgY2xpZW50ID0gbmV3IFRlc3RDbGllbnQoKTsKICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIFN0cmluZyB1cmwgPSBhcmdzWzBdOwpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICAgICAgICAgIGxvZygiQ2F1Z2h0IEVYUEVDVEVEIElPRXhjZXB0aW9uOiAiICsgZXgpOwogICAgICAgICAgICAgICAgIHBhc3MoKTsKICAgICAgICAgICAgIH0KLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9kZXNjcmlwdG9yL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvZGVzY3JpcHRvci9zdW4td2ViLnhtbAppbmRleCBmN2Y4NjI3Li5jOTA4Nzk3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKQEAgLTIyLDggKzIyLDggQEAKIDxzdW4td2ViLWFwcD4KICAgPHNlc3Npb24tY29uZmlnPgogICAgIDxzZXNzaW9uLW1hbmFnZXIvPgotICA8L3Nlc3Npb24tY29uZmlnPiAgCi0gIDxqc3AtY29uZmlnLz4gCisgIDwvc2Vzc2lvbi1jb25maWc+CisgIDxqc3AtY29uZmlnLz4KICAgPGxvY2FsZS1jaGFyc2V0LWluZm8gZGVmYXVsdC1sb2NhbGU9ImphIj4KICAgICAgIDxsb2NhbGUtY2hhcnNldC1tYXAgY2hhcnNldD0iRVVDLUpQIiBsb2NhbGU9ImphIiBhZ2VudD0iTW96aWxsYS80LjcgW2VuXSAoWDExOyBJOyBTdW5PUyA1Ljggc3VuNHUpIj4KICAgICAgICAgPGRlc2NyaXB0aW9uPkNoYXJzZXQgbWFwcGluZyBmb3IgSmFwYW5lc2UgbG9jYWxlPC9kZXNjcmlwdGlvbj4KQEAgLTM2LDExICszNiwxMSBAQAogICAgICAgPC9sb2NhbGUtY2hhcnNldC1tYXA+CiAgICAgICA8bG9jYWxlLWNoYXJzZXQtbWFwIGNoYXJzZXQ9IlNoaWZ0X0pJUyIgbG9jYWxlPSJqYSIgYWdlbnQ9Ik1vemlsbGEvNC43OSBbZW5dIChXaW5kb3dzIE5UIDUuMDsgVSkiPgogICAgICAgICA8ZGVzY3JpcHRpb24+Q2hhcnNldCBtYXBwaW5nIGZvciBKYXBhbmVzZSBsb2NhbGU8L2Rlc2NyaXB0aW9uPgotICAgICAgPC9sb2NhbGUtY2hhcnNldC1tYXA+ICAgICAgCisgICAgICA8L2xvY2FsZS1jaGFyc2V0LW1hcD4KICAgICAgIDxsb2NhbGUtY2hhcnNldC1tYXAgY2hhcnNldD0iSVNPLTg4NTktMSIgbG9jYWxlPSJkZV9ERSI+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5DaGFyc2V0IG1hcHBpbmcgZm9yIEdlcm1hbiBsb2NhbGU8L2Rlc2NyaXB0aW9uPgogICAgICAgPC9sb2NhbGUtY2hhcnNldC1tYXA+CiAgICAgICA8cGFyYW1ldGVyLWVuY29kaW5nIGZvcm0taGludC1maWVsZD0iY2hhcnNldHZhbCIgLz4KLSAgPC9sb2NhbGUtY2hhcnNldC1pbmZvPiAgCisgIDwvbG9jYWxlLWNoYXJzZXQtaW5mbz4KIDwvc3VuLXdlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvbWlzYy9idWlsZC54bWwKaW5kZXggODc2N2MxNC4uODQwM2RlMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvbWlzYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvbWlzYy9idWlsZC54bWwKQEAgLTIzLDMwICsyMywzMCBAQAogCiA8cHJvamVjdCBuYW1lPSJpMThuLXNpbXBsZSIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotCSZjb21tb25CdWlsZDsKKyAgICAmY29tbW9uQnVpbGQ7CiAgICAgPHByb3BlcnR5IG5hbWU9ImFyY2hpdmVkaXIiIHZhbHVlPSIke2J1aWxkfS9hcmNoaXZlcyIvPgogCi0JPHRhcmdldCBuYW1lPSJwcmVwYXJlIiBkZXBlbmRzPSJpbml0Ij4KKyAgICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgogICAgICAgICAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9IiAvPgogICAgICAgICA8L3RhcmdldD4KIAotCQotCTx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0icHJlcGFyZSI+Ci0JCTxqYXZhYyBzcmNkaXI9InNhbXBsZXMiIGRlc3RkaXI9IiR7YnVpbGR9Ij4KLQkgICAgCTxjbGFzc3BhdGg+Ci0JICAgIAkgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtpbnN0fS9saWIvajJlZS5qYXIiLz4KLQkgICAgCSAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2luc3R9L2xpYi9hcHBzZXJ2LXJ0LmphciIvPgkgICAgCSAgCi0gICAgCQkgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtidWlsZH0vV0VCLUlORi9saWIvbGlicmFyeS5qYXIiLz4KLQkJICAgIDwvY2xhc3NwYXRoPgkJCi0JCSA8L2phdmFjPgotCTwvdGFyZ2V0PgotCQotCTx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImNvbXBpbGUiPgotCQk8amFyIGRlc3RmaWxlPSIke2FyY2hpdmVkaXJ9L2EvYi9pMThuLXNpbXBsZS5qYXIiIAotICAgICAgICAgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZH0iLz4KLQk8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiIGRlcGVuZHM9ImFzc2VtYmxlIj4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9InByZXBhcmUiPgorICAgICAgICA8amF2YWMgc3JjZGlyPSJzYW1wbGVzIiBkZXN0ZGlyPSIke2J1aWxkfSI+CisgICAgICAgICAgICA8Y2xhc3NwYXRoPgorICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7aW5zdH0vbGliL2oyZWUuamFyIi8+CisgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtpbnN0fS9saWIvYXBwc2Vydi1ydC5qYXIiLz4KKyAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2J1aWxkfS9XRUItSU5GL2xpYi9saWJyYXJ5LmphciIvPgorICAgICAgICAgICAgPC9jbGFzc3BhdGg+CisgICAgICAgICA8L2phdmFjPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iY29tcGlsZSI+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXJjaGl2ZWRpcn0vYS9iL2kxOG4tc2ltcGxlLmphciIKKyAgICAgICAgICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGR9Ii8+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIiBkZXBlbmRzPSJhc3NlbWJsZSI+CisgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9pMThudGFnL01lc3NhZ2VUYWcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9pMThudGFnL01lc3NhZ2VUYWcuamF2YQppbmRleCA1NmQxNmYyLi5iODRiMTRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvaTE4bnRhZy9NZXNzYWdlVGFnLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL2kxOG50YWcvTWVzc2FnZVRhZy5qYXZhCkBAIC0yNiwxMTAgKzI2LDExMCBAQAogLyoqCiAgKiBBIHNpbXBsZSBtZXNzYWdlIHRhZ2hhbmRsZXIgdG8gZGlzcGxheSBsb2NhbGl6ZWQgbWVzc2FnZSBmcm9tIGEgcmVzb3VyY2UgYnVuZGxlIGJhc2VkIG9uIGpzcCByZXF1ZXN0CiAgKiBAYXV0aG9yICBDaGFuZCBCYXNoYQotICogQHZlcnNpb24JMS4wCisgKiBAdmVyc2lvbiAgICAxLjAKICAqLwogCiBwdWJsaWMgY2xhc3MgTWVzc2FnZVRhZyBleHRlbmRzIFRhZ1N1cHBvcnQgewogCi0gICAgcHJpdmF0ZSBTdHJpbmcga2V5CQkJPSBudWxsOwotCXByaXZhdGUgU3RyaW5nIGJ1bmRsZU5hbWUJPSBudWxsOwotCXByaXZhdGUgU3RyaW5nIGxhbmd1YWdlCQk9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgY291bnRyeQkJPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nIHZhcmlhbnQJCT0gbnVsbDsKKyAgICBwcml2YXRlIFN0cmluZyBrZXkgICAgICAgICAgICA9IG51bGw7CisgICAgcHJpdmF0ZSBTdHJpbmcgYnVuZGxlTmFtZSAgICA9IG51bGw7CisgICAgcHJpdmF0ZSBTdHJpbmcgbGFuZ3VhZ2UgICAgICAgID0gbnVsbDsKKyAgICBwcml2YXRlIFN0cmluZyBjb3VudHJ5ICAgICAgICA9IG51bGw7CisgICAgcHJpdmF0ZSBTdHJpbmcgdmFyaWFudCAgICAgICAgPSBudWxsOwogCi0JLyoqCi0JICogU2V0IHRoZSB1c2VyIHByZWZlcnJlZCBsYW5ndWFnZQotCSAqLwotCXB1YmxpYyB2b2lkIHNldExhbmd1YWdlKFN0cmluZyBsYW5nKSB7CisgICAgLyoqCisgICAgICogU2V0IHRoZSB1c2VyIHByZWZlcnJlZCBsYW5ndWFnZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldExhbmd1YWdlKFN0cmluZyBsYW5nKSB7CiAgICAgICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5nOwotCX0KLQotICAgIC8qKgotCSAqIEdldCB0aGUgdXNlciBwcmVmZXJyZWQgbGFuZ3VhZ2UKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldExhbmd1YWdlKCkgewotCQlyZXR1cm4gbGFuZ3VhZ2U7Ci0JfQotCi0JLyoqCi0JICogU2V0IHRoZSB1c2VyIHByZWZlcnJlZCBjb3VudHJ5Ci0JICovCi0JcHVibGljIHZvaWQgc2V0Q291bnRyeShTdHJpbmcgY291bnRyeSkgewotCQl0aGlzLmNvdW50cnkgPSBjb3VudHJ5OwotCX0KLQotICAgIC8qKgotCSAqIEdldCB0aGUgdXNlciBwcmVmZXJyZWQgY291bnRyeQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0Q291bnRyeSgpIHsKLQkJcmV0dXJuIGNvdW50cnk7CiAgICAgfQogCiAgICAgLyoqCi0JICogU2V0IHRoZSB1c2VyIHByZWZlcnJlZCB2YXJpYW50Ci0JICovCisgICAgICogR2V0IHRoZSB1c2VyIHByZWZlcnJlZCBsYW5ndWFnZQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFuZ3VhZ2UoKSB7CisgICAgICAgIHJldHVybiBsYW5ndWFnZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHVzZXIgcHJlZmVycmVkIGNvdW50cnkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDb3VudHJ5KFN0cmluZyBjb3VudHJ5KSB7CisgICAgICAgIHRoaXMuY291bnRyeSA9IGNvdW50cnk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IHRoZSB1c2VyIHByZWZlcnJlZCBjb3VudHJ5CisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRDb3VudHJ5KCkgeworICAgICAgICByZXR1cm4gY291bnRyeTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHVzZXIgcHJlZmVycmVkIHZhcmlhbnQKKyAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRWYXJpYW50KFN0cmluZyB2YXJpYW50KSB7Ci0JICAgIHRoaXMudmFyaWFudCA9IHZhcmlhbnQ7Ci0JfQotCi0gICAgLyoqCi0JICogR2V0IHRoZSB1c2VyIHByZWZlcnJlZCB2YXJpYW50Ci0JICovCi0JcHVibGljIFN0cmluZyBnZXRWYXJpYW50KCkgewotCSAgICByZXR1cm4gdmFyaWFudDsKKyAgICAgICAgdGhpcy52YXJpYW50ID0gdmFyaWFudDsKICAgICB9CiAKICAgICAvKioKLQkgKiBTZXQgdGhlIHVzZXIgcHJlZmVycmVkIHJlc291cmNlIGJ1bmRsZSBuYW1lCi0JICovCi0JcHVibGljIHZvaWQgc2V0TmFtZSAoU3RyaW5nIG5hbWUpIHsKLQkJdGhpcy5idW5kbGVOYW1lID0gbmFtZTsKLQl9CisgICAgICogR2V0IHRoZSB1c2VyIHByZWZlcnJlZCB2YXJpYW50CisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRWYXJpYW50KCkgeworICAgICAgICByZXR1cm4gdmFyaWFudDsKKyAgICB9CiAKICAgICAvKioKLQkgKiBTZXQgdGhlIG1lc3NhZ2Uga2V5IHJlcXVpcmVkIHRvIHJldHJpZXZlIG1lc3NhZ2UgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlCi0JICovCisgICAgICogU2V0IHRoZSB1c2VyIHByZWZlcnJlZCByZXNvdXJjZSBidW5kbGUgbmFtZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE5hbWUgKFN0cmluZyBuYW1lKSB7CisgICAgICAgIHRoaXMuYnVuZGxlTmFtZSA9IG5hbWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBtZXNzYWdlIGtleSByZXF1aXJlZCB0byByZXRyaWV2ZSBtZXNzYWdlIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZQorICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEtleShTdHJpbmcga2V5KSB7CiAgICAgICAgIHRoaXMua2V5ID0ga2V5OwogICAgIH0KIAogICAgIC8qKgotCSAqIEdldCB0aGUgbWVzc2FnZSBrZXkgcmVxdWlyZWQgdG8gcmV0cmlldmUgbWVzc2FnZSBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUKLQkgKi8KKyAgICAgKiBHZXQgdGhlIG1lc3NhZ2Uga2V5IHJlcXVpcmVkIHRvIHJldHJpZXZlIG1lc3NhZ2UgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlCisgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRLZXkoKSB7CiAgICAgICAgIHJldHVybiBrZXk7CiAgICAgfQogCiAgICAgLyoqCi0JICogR2V0cyB0aGUgdXNlciBwcmVmZXJyZWQgcmVzb3VyY2UgYnVuZGxlIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiBidW5kbGVOYW1lOwotCX0KKyAgICAgKiBHZXRzIHRoZSB1c2VyIHByZWZlcnJlZCByZXNvdXJjZSBidW5kbGUgbmFtZQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKKyAgICAgICAgcmV0dXJuIGJ1bmRsZU5hbWU7CisgICAgfQogCiAgICAgLyoqCi0JICogV2lsbCBiZSBjYWxsZWQgYnkgdGhlIEpTUCBFbmdpbmUgd2hlbiBpdCBlbmNvdW50ZXJzIHRoZSBzdGFydCBvZiB0aGUgdGFnCi0JICovCisgICAgICogV2lsbCBiZSBjYWxsZWQgYnkgdGhlIEpTUCBFbmdpbmUgd2hlbiBpdCBlbmNvdW50ZXJzIHRoZSBzdGFydCBvZiB0aGUgdGFnCisgICAgICovCiAgICAgcHVibGljIGludCBkb1N0YXJ0VGFnKCkgdGhyb3dzIEpzcFRhZ0V4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBFVkFMX0JPRFlfSU5DTFVERTsKICAgICB9CiAKICAgICAvKioKLQkgKiBXaWxsIGJlIGNhbGxlZCBieSB0aGUgSlNQIEVuZ2luZSB3aGVuIGl0IGVuY291bnRlcnMgdGhlIGVuZCBvZiB0aGUgdGFnCi0JICovCisgICAgICogV2lsbCBiZSBjYWxsZWQgYnkgdGhlIEpTUCBFbmdpbmUgd2hlbiBpdCBlbmNvdW50ZXJzIHRoZSBlbmQgb2YgdGhlIHRhZworICAgICAqLwogICAgIHB1YmxpYyBpbnQgZG9FbmRUYWcoKSB0aHJvd3MgSnNwVGFnRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKLQkJCWlmKGxhbmd1YWdlICE9IG51bGwpIHsKLQkJCQlpZiggY291bnRyeSA9PSBudWxsKQotCQkJCQljb3VudHJ5ID0gIiI7Ci0JCQkJaWYodmFyaWFudCA9PSBudWxsKQotCQkJCQl2YXJpYW50ID0gIiI7Ci0JCQl9IGVsc2UgbGFuZ3VhZ2UgPSAiZW4iOwotCQkJamF2YS51dGlsLkxvY2FsZSBsb2NhbGUgPSBuZXcgTG9jYWxlKGxhbmd1YWdlLCBjb3VudHJ5LCB2YXJpYW50KTsKLQkJCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShidW5kbGVOYW1lLCBsb2NhbGUpOwotCQkJU3RyaW5nIG1lc3NhZ2UgPSBidW5kbGUuZ2V0U3RyaW5nKGtleSk7Ci0JCQlwYWdlQ29udGV4dC5nZXRPdXQoKS53cml0ZSgiTWVzc2FnZSBmcm9tIHJlc291cmNlIGJ1bmRsZToiICsgbWVzc2FnZSk7Ci0JCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGlmKGxhbmd1YWdlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBpZiggY291bnRyeSA9PSBudWxsKQorICAgICAgICAgICAgICAgICAgICBjb3VudHJ5ID0gIiI7CisgICAgICAgICAgICAgICAgaWYodmFyaWFudCA9PSBudWxsKQorICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gIiI7CisgICAgICAgICAgICB9IGVsc2UgbGFuZ3VhZ2UgPSAiZW4iOworICAgICAgICAgICAgamF2YS51dGlsLkxvY2FsZSBsb2NhbGUgPSBuZXcgTG9jYWxlKGxhbmd1YWdlLCBjb3VudHJ5LCB2YXJpYW50KTsKKyAgICAgICAgICAgIFJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShidW5kbGVOYW1lLCBsb2NhbGUpOworICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBidW5kbGUuZ2V0U3RyaW5nKGtleSk7CisgICAgICAgICAgICBwYWdlQ29udGV4dC5nZXRPdXQoKS53cml0ZSgiTWVzc2FnZSBmcm9tIHJlc291cmNlIGJ1bmRsZToiICsgbWVzc2FnZSk7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBKc3BUYWdFeGNlcHRpb24oIkVycm9yOiAiICsgZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIEVWQUxfUEFHRTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L0ZvcndhcmRlZFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L0ZvcndhcmRlZFNlcnZsZXQuamF2YQppbmRleCAwODQwZmMwLi4wZWQ2ZWFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9Gb3J3YXJkZWRTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvRm9yd2FyZGVkU2VydmxldC5qYXZhCkBAIC0xNiw3ICsxNiw3IEBACiAvKioKICAqIFNlcnZsZXQgZm9yd2FyZGVkIGZyb20gU2ltcGxlSTE4blNlcnZsZXQKICAqIEBhdXRob3IgIENoYW5kIEJhc2hhCi0gKiBAdmVyc2lvbgkxLjAKKyAqIEB2ZXJzaW9uICAgIDEuMAogICovCiBwdWJsaWMgY2xhc3MgRm9yd2FyZGVkU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIApAQCAtNDAsMTEgKzQwLDExIEBACiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1JlcXVlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICBTdHJpbmcgY2hhcnNldHZhbAkJCT0JcmVxLmdldFBhcmFtZXRlcigiY2hhcnNldHZhbCIpOworICAgICAgICBTdHJpbmcgY2hhcnNldHZhbCAgICAgICAgICAgID0gICAgcmVxLmdldFBhcmFtZXRlcigiY2hhcnNldHZhbCIpOwogICAgICAgICByZXEuc2V0Q2hhcmFjdGVyRW5jb2RpbmcoY2hhcnNldHZhbCk7CiAgICAgICAgIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sO2NoYXJzZXQ9IiArIGNoYXJzZXR2YWwgKyAiIik7Ci0gICAgICAgIGphdmEuaW8uUHJpbnRXcml0ZXIgb3V0CQk9CXJlcy5nZXRXcml0ZXIoKTsKLSAgICAgICAgU3RyaW5nIG5hbWUJCQkJCT0JcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOworICAgICAgICBqYXZhLmlvLlByaW50V3JpdGVyIG91dCAgICAgICAgPSAgICByZXMuZ2V0V3JpdGVyKCk7CisgICAgICAgIFN0cmluZyBuYW1lICAgICAgICAgICAgICAgICAgICA9ICAgIHJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+U2VydmxldDwvdGl0bGU+Iik7CkBAIC01Miw4ICs1Miw4IEBACiAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxIMz4gVGhpcyBpcyB0aGUgbmFtZSBmcm9tIGZvcndhcmRlZCBzZXJ2bGV0IDwvSDM+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8SDQ+IFRoZSBuYW1lIGVudGVyZWQgd2FzOiIgKyBuYW1lICsgIjwvaDQ+Iik7Ci0JCW91dC5wcmludGxuKCI8YnI+Iik7Ci0JCW91dC5wcmludGxuKCI8UD48QlI+PEEgSFJFRj1cIi9pMThuLXNpbXBsZVwiPkJhY2sgdG8gc2FtcGxlIGhvbWU8L0E+PC9QPiIpOworICAgICAgICBvdXQucHJpbnRsbigiPGJyPiIpOworICAgICAgICBvdXQucHJpbnRsbigiPFA+PEJSPjxBIEhSRUY9XCIvaTE4bi1zaW1wbGVcIj5CYWNrIHRvIHNhbXBsZSBob21lPC9BPjwvUD4iKTsKICAgICAgICAgb3V0LnByaW50bG4oIjwvYm9keT4iKTsKICAgICAgICAgb3V0LnByaW50bG4oIjwvaHRtbD4iKTsKICAgICAgICAgb3V0LmNsb3NlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9JbmNsdWRlZFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L0luY2x1ZGVkU2VydmxldC5qYXZhCmluZGV4IGMzMTViNDYuLmRjN2Y5ZTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L0luY2x1ZGVkU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L0luY2x1ZGVkU2VydmxldC5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiAvKioKICAqIFNlcnZsZXQgaW5jbHVkZWQgaW4gU2ltcGxlSTE4blNlcnZsZXQKICAqIEBhdXRob3IgIENoYW5kIEJhc2hhCi0gKiBAdmVyc2lvbgkxLjAKKyAqIEB2ZXJzaW9uICAgIDEuMAogICovCiBwdWJsaWMgY2xhc3MgSW5jbHVkZWRTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCkBAIC00MiwxNSArNDIsMTUgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzUmVxdWVzdChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7Ci0JCQlqYXZhLmlvLlByaW50V3JpdGVyIG91dAk9CXJlcy5nZXRXcml0ZXIoKTsKLQkJCVN0cmluZyBuYW1lCQkJCT0JcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOworICAgICAgICAgICAgamF2YS5pby5QcmludFdyaXRlciBvdXQgICAgPSAgICByZXMuZ2V0V3JpdGVyKCk7CisgICAgICAgICAgICBTdHJpbmcgbmFtZSAgICAgICAgICAgICAgICA9ICAgIHJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKIAotCQkJb3V0LnByaW50bG4oIjxIMz4gVGhpcyBpcyB0aGUgbmFtZSBmcm9tIGluY2x1ZGVkIHNlcnZsZXQgPC9IMz4iKTsKLQkJCW91dC5wcmludGxuKCI8SDQ+IFRoZSBuYW1lIGVudGVyZWQgd2FzOiIgKyBuYW1lICsgIjwvaDQ+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEgzPiBUaGlzIGlzIHRoZSBuYW1lIGZyb20gaW5jbHVkZWQgc2VydmxldCA8L0gzPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxIND4gVGhlIG5hbWUgZW50ZXJlZCB3YXM6IiArIG5hbWUgKyAiPC9oND4iKTsKIAotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPkdFVDwvY29kZT4gbWV0aG9kLgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvTG9jYWxlQ2hhcnNldFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L0xvY2FsZUNoYXJzZXRTZXJ2bGV0LmphdmEKaW5kZXggNGU3ODA0My4uZTAxNDk3NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvTG9jYWxlQ2hhcnNldFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9Mb2NhbGVDaGFyc2V0U2VydmxldC5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAKICAqIEBhdXRob3IgIENoYW5kIEJhc2hhCiAKLSAqIEB2ZXJzaW9uCTEuMAorICogQHZlcnNpb24gICAgMS4wCiAKICAqLwogCkBAIC01MiwxNSArNTIsMTUgQEAKIAogCiAKLSAgICAgICAgU3RyaW5nIG5hbWUJCQk9CXJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgICAgICAgICAgICA9ICAgIHJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKIAotICAgICAgICBTdHJpbmcgY2hhcnNldHZhbAk9CXJlcS5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOworICAgICAgICBTdHJpbmcgY2hhcnNldHZhbCAgICA9ICAgIHJlcS5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOwogCiAgICAgICAgIGlmIChjaGFyc2V0dmFsICE9IG51bGwpIHsKIAotICAgICAgICAJcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7Y2hhcnNldD0iICsgY2hhcnNldHZhbCArICIiKTsKKyAgICAgICAgICAgIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sO2NoYXJzZXQ9IiArIGNoYXJzZXR2YWwgKyAiIik7CiAKLQkJfSBlbHNlIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sO2NoYXJzZXQ9VVRGLTgiKTsKKyAgICAgICAgfSBlbHNlIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sO2NoYXJzZXQ9VVRGLTgiKTsKIAogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXMuZ2V0V3JpdGVyKCk7CiAKQEAgLTgyLDkgKzgyLDkgQEAKIAogICAgICAgICBvdXQucHJpbnRsbigiPGJyPiIpOwogCi0JCW91dC5wcmludGxuKCI8UD48QlI+PEEgSFJFRj1cIi9pMThuLXNpbXBsZVwiPkJhY2sgdG8gc2FtcGxlIGhvbWU8L0E+PC9QPiIpOworICAgICAgICBvdXQucHJpbnRsbigiPFA+PEJSPjxBIEhSRUY9XCIvaTE4bi1zaW1wbGVcIj5CYWNrIHRvIHNhbXBsZSBob21lPC9BPjwvUD4iKTsKIAotCQlvdXQucHJpbnRsbigiPC9ib2R5PjwvaHRtbD4iKTsKKyAgICAgICAgb3V0LnByaW50bG4oIjwvYm9keT48L2h0bWw+Iik7CiAKICAgICAgICAgb3V0LmNsb3NlKCk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L1NpbXBsZUZpbHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvU2ltcGxlRmlsdGVyLmphdmEKaW5kZXggYzRhYTFkNy4uNDVjYWIwZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvU2ltcGxlRmlsdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvU2ltcGxlRmlsdGVyLmphdmEKQEAgLTIxLDkgKzIxLDkgQEAKIAogcHVibGljIGNsYXNzIFNpbXBsZUZpbHRlciBpbXBsZW1lbnRzIEZpbHRlciB7CiAKLSAgICBwcml2YXRlIEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcJPSBudWxsOwotICAgIHByaXZhdGUgYm9vbGVhbiB1c2VmaWx0ZXIJCQk9IGZhbHNlOwotICAgIHByaXZhdGUgU3RyaW5nIGVuY29kaW5nCQkJCT0gbnVsbDsKKyAgICBwcml2YXRlIEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcgICAgPSBudWxsOworICAgIHByaXZhdGUgYm9vbGVhbiB1c2VmaWx0ZXIgICAgICAgICAgICA9IGZhbHNlOworICAgIHByaXZhdGUgU3RyaW5nIGVuY29kaW5nICAgICAgICAgICAgICAgID0gbnVsbDsKIAogICAgIC8qKgogICAgICAqIENhbGxlZCBieSB0aGUgd2ViIGNvbnRhaW5lciB0byBpbmRpY2F0ZSB0byBhIGZpbHRlciB0aGF0IGl0IGlzIGJlaW5nIHBsYWNlZCBpbnRvIHNlcnZpY2UKQEAgLTMxLDE2ICszMSwxNiBAQAogICAgICAqIEBwYXJhbSBmaWx0ZXJDb25maWcgVGhlIGZpbHRlciBjb25maWd1cmF0aW9uIG9iamVjdAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGluaXQoRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewotCQl0cnkgewotCQkJdGhpcy5maWx0ZXJDb25maWcJPQlmaWx0ZXJDb25maWc7Ci0JCQlTdHJpbmcgcGFyYW0JCT0JZmlsdGVyQ29uZmlnLmdldEluaXRQYXJhbWV0ZXIoInVzZWZpbHRlciIpOwotCQkJdGhpcy5lbmNvZGluZwkJPQlmaWx0ZXJDb25maWcuZ2V0SW5pdFBhcmFtZXRlcigiZW5jb2RpbmciKTsKLQkJCWlmIChwYXJhbS5lcXVhbHMoInRydWUiKSkgewotCQkJCXRoaXMudXNlZmlsdGVyCT0JdHJ1ZTsKLQkJCX0KLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHRoaXMuZmlsdGVyQ29uZmlnICAgID0gICAgZmlsdGVyQ29uZmlnOworICAgICAgICAgICAgU3RyaW5nIHBhcmFtICAgICAgICA9ICAgIGZpbHRlckNvbmZpZy5nZXRJbml0UGFyYW1ldGVyKCJ1c2VmaWx0ZXIiKTsKKyAgICAgICAgICAgIHRoaXMuZW5jb2RpbmcgICAgICAgID0gICAgZmlsdGVyQ29uZmlnLmdldEluaXRQYXJhbWV0ZXIoImVuY29kaW5nIik7CisgICAgICAgICAgICBpZiAocGFyYW0uZXF1YWxzKCJ0cnVlIikpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnVzZWZpbHRlciAgICA9ICAgIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCkBAIC01MSwxOCArNTEsMTggQEAKICAgICAgKiBAcGFyYW0gY2hhaW4gVGhlIGZpbHRlciBjaGFpbiB3ZSBhcmUgcHJvY2Vzc2luZwogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywgRmlsdGVyQ2hhaW4gY2hhaW4pCi0JdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKLQkJdHJ5IHsKLSAgICAgICAgCWlmICh1c2VmaWx0ZXIpIHsKLSAgICAgICAgCSAgICBTdHJpbmcgZW5jb2RpbmcgPSBnZXRFbmNvZGluZyhyZXEpOwotICAgICAgICAJICAgIGlmIChlbmNvZGluZyAhPSBudWxsKSB7Ci0gICAgICAgIAkgICAgICAgIHJlcS5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbmNvZGluZyk7Ci0JCQkJfQotCQkJfQotICAgICAgICAJY2hhaW4uZG9GaWx0ZXIocmVxLCByZXMpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQorICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAodXNlZmlsdGVyKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcocmVxKTsKKyAgICAgICAgICAgICAgICBpZiAoZW5jb2RpbmcgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICByZXEuc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW5jb2RpbmcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoYWluLmRvRmlsdGVyKHJlcSwgcmVzKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgKiBDYWxsZWQgYnkgdGhlIHdlYiBjb250YWluZXIgdG8gaW5kaWNhdGUgdG8gYSBmaWx0ZXIgdGhhdCBpdCBpcyBiZWluZyB0YWtlbiBvdXQgb2Ygc2VydmljZS4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewotICAgICAgICB0aGlzLmVuY29kaW5nCQk9IG51bGw7Ci0gICAgICAgIHRoaXMuZmlsdGVyQ29uZmlnCT0gbnVsbDsKKyAgICAgICAgdGhpcy5lbmNvZGluZyAgICAgICAgPSBudWxsOworICAgICAgICB0aGlzLmZpbHRlckNvbmZpZyAgICA9IG51bGw7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvU2ltcGxlRmlsdGVyU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvU2ltcGxlRmlsdGVyU2VydmxldC5qYXZhCmluZGV4IDRlNjJlZDAuLmE2NDEwYWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L1NpbXBsZUZpbHRlclNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9TaW1wbGVGaWx0ZXJTZXJ2bGV0LmphdmEKQEAgLTQwLDEwICs0MCwxMCBAQAogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nIGNoYXJzZXR2YWwgPSByZXEuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKICAgICAgICAgaWYgKGNoYXJzZXR2YWwgIT0gbnVsbCkgewotICAgICAgICAJcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7Y2hhcnNldD0iICsgY2hhcnNldHZhbCArICIiKTsKLQkJfSBlbHNlIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sO2NoYXJzZXQ9VVRGLTgiKTsKLSAgICAgICAgamF2YS5pby5QcmludFdyaXRlciBvdXQJCT0JcmVzLmdldFdyaXRlcigpOwotICAgICAgICBTdHJpbmcgbmFtZQkJCQkJPQlyZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CisgICAgICAgICAgICByZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDtjaGFyc2V0PSIgKyBjaGFyc2V0dmFsICsgIiIpOworICAgICAgICB9IGVsc2UgcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7Y2hhcnNldD1VVEYtOCIpOworICAgICAgICBqYXZhLmlvLlByaW50V3JpdGVyIG91dCAgICAgICAgPSAgICByZXMuZ2V0V3JpdGVyKCk7CisgICAgICAgIFN0cmluZyBuYW1lICAgICAgICAgICAgICAgICAgICA9ICAgIHJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+U2ltcGxlIHNlcnZsZXQgdG8gdmVyaWZ5IHRoZSBmaWx0ZXI8L3RpdGxlPiIpOwpAQCAtNTEsOCArNTEsOCBAQAogICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8SDM+IFRoaXMgaXMgdGhlIG5hbWUgeW91IGhhdmUgZW50ZXJlZCAiICsgbmFtZSArICI8L0gzPiIpOwogICAgICAgICBvdXQucHJpbnRsbigiPEg0PiBUaGUgY2hhcmFjdGVyIGVuY29kaW5nIHNldCBieSB0aGUgZmlsdGVyIGlzOiAiICsgY2hhcnNldHZhbCArICI8L2g0PiIpOwotCQlvdXQucHJpbnRsbigiPGJyPiIpOwotCQlvdXQucHJpbnRsbigiPFA+PEJSPjxBIEhSRUY9XCIvaTE4bi1zaW1wbGVcIj5CYWNrIHRvIHNhbXBsZSBob21lPC9BPjwvUD4iKTsKKyAgICAgICAgb3V0LnByaW50bG4oIjxicj4iKTsKKyAgICAgICAgb3V0LnByaW50bG4oIjxQPjxCUj48QSBIUkVGPVwiL2kxOG4tc2ltcGxlXCI+QmFjayB0byBzYW1wbGUgaG9tZTwvQT48L1A+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8L2JvZHk+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8L2h0bWw+Iik7CiAgICAgICAgIG91dC5jbG9zZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvU2ltcGxlSTE4blNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L1NpbXBsZUkxOG5TZXJ2bGV0LmphdmEKaW5kZXggYmEwMmEyYy4uMTEzMjQ5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvU2ltcGxlSTE4blNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9TaW1wbGVJMThuU2VydmxldC5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBUaGlzIGlzIGEgc2ltcGxlIHNlcnZsZXQgdGhhdCBkZW1vbnN0cmF0ZXMgc29tZSBvZiBtb3N0IGNvbW1vbmx5IHVzZWQgaTE4biBmZWF0dXJlcyBvZgogICogdGhlIEFwcGxpY2F0aW9uIFNlcnZlcidzIEphdmEgU2VydmxldCBBUEkgSW1wbGVtZW50YXRpb24KICAqIEBhdXRob3IgIENoYW5kIEJhc2hhCi0gKiBAdmVyc2lvbgkxLjAKKyAqIEB2ZXJzaW9uICAgIDEuMAogICovCiBwdWJsaWMgY2xhc3MgU2ltcGxlSTE4blNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKQEAgLTQ0LDgwICs0NCw4MCBAQAogICAgIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NSZXF1ZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKLQkJCUh0dHBTZXNzaW9uIHNlc3Npb24JPQlyZXEuZ2V0U2Vzc2lvbihmYWxzZSk7Ci0JCQlpZihzZXNzaW9uICE9IG51bGwpIHsKLQkJCQlTdHJpbmcgc2Vzc2lvbmNoYXJzZXQgPSAoU3RyaW5nKXNlc3Npb24uZ2V0QXR0cmlidXRlKCJjaGFyc2V0Iik7Ci0JCQkJdHJ5IHsKLQkJCQkJcmVxLnNldENoYXJhY3RlckVuY29kaW5nKHNlc3Npb25jaGFyc2V0KTsKLQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQkJCX0KLQkJCVN0cmluZyBmdW5jCQk9CXJlcS5nZXRQYXJhbWV0ZXIoImZ1bmMiKTsKLQkJCVN0cmluZyBhY3Rpb24JPQlyZXEuZ2V0UGFyYW1ldGVyKCJhY3Rpb24iKTsKKyAgICAgICAgICAgIEh0dHBTZXNzaW9uIHNlc3Npb24gICAgPSAgICByZXEuZ2V0U2Vzc2lvbihmYWxzZSk7CisgICAgICAgICAgICBpZihzZXNzaW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc2Vzc2lvbmNoYXJzZXQgPSAoU3RyaW5nKXNlc3Npb24uZ2V0QXR0cmlidXRlKCJjaGFyc2V0Iik7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgcmVxLnNldENoYXJhY3RlckVuY29kaW5nKHNlc3Npb25jaGFyc2V0KTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0cmluZyBmdW5jICAgICAgICA9ICAgIHJlcS5nZXRQYXJhbWV0ZXIoImZ1bmMiKTsKKyAgICAgICAgICAgIFN0cmluZyBhY3Rpb24gICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJhY3Rpb24iKTsKIAotCQkJaWYoZnVuYy5lcXVhbHMoInNlbmRJbnB1dCIpKSB7Ci0JCQkJU3RyaW5nIGNoYXJzZXR2YWwJPQlyZXEuZ2V0UGFyYW1ldGVyKCJjaGFyc2V0dmFsIik7Ci0JCQkJc2VuZElucHV0IChyZXEsIHJlcywgY2hhcnNldHZhbCwgYWN0aW9uKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKCBhY3Rpb24uZXF1YWxzKCJmb3JtYXREYXRlIikgKSB7Ci0JCQkJCWZvcm1hdERhdGUgKHJlcSwgcmVzKTsKLQkJCQl9IGVsc2UgaWYgKCBhY3Rpb24uZXF1YWxzKCJzZXRDaGFyRW5jb2RpbmciKSApIHsKLQkJCQkJc2V0Q2hhckVuY29kaW5nIChyZXEsIHJlcyk7Ci0JCQkJfSBlbHNlIGlmICggYWN0aW9uLmVxdWFscygiaW5jbHVkZVNlcnZsZXQiKSApIHsKLQkJCQkJaW5jbHVkZVNlcnZsZXQgKHJlcSwgcmVzKTsKLQkJCQl9IGVsc2UgaWYgKCBhY3Rpb24uZXF1YWxzKCJmb3J3YXJkU2VydmxldCIpICkgewotCQkJCQlmb3J3YXJkU2VydmxldCAocmVxLCByZXMpOwotCQkJCX0gZWxzZSBpZiAoIGFjdGlvbi5lcXVhbHMoInNlbmRFcnJvck1lc3NhZ2UiKSApIHsKLQkJCQkJc2VuZEVycm9yTWVzc2FnZSAocmVxLCByZXMpOwotCQkJCX0gZWxzZSBpZiAoIGFjdGlvbi5lcXVhbHMoInVzZVJlc291cmNlQnVuZGxlIikgKSB7Ci0JCQkJCXVzZVJlc291cmNlQnVuZGxlIChyZXEsIHJlcyk7Ci0JCQkJfSBlbHNlIGlmICggYWN0aW9uLmVxdWFscygiZm9yd2FyZEpzcCIpICkgewotCQkJCQlmb3J3YXJkSnNwIChyZXEsIHJlcyk7Ci0JCQkJfQotCQkJfQotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQkvKiogU2V0cyB0aGUgY2hhcnNldCBhdHRyaWJ1dGUgdG8gdGhlIHNlc3Npb24gYW5kIGdlbmVyYXRlcyBhbiBpbnB1dCBmb3JtCi0JICogIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAotCSAqICBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQorICAgICAgICAgICAgaWYoZnVuYy5lcXVhbHMoInNlbmRJbnB1dCIpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGNoYXJzZXR2YWwgICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJjaGFyc2V0dmFsIik7CisgICAgICAgICAgICAgICAgc2VuZElucHV0IChyZXEsIHJlcywgY2hhcnNldHZhbCwgYWN0aW9uKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCBhY3Rpb24uZXF1YWxzKCJmb3JtYXREYXRlIikgKSB7CisgICAgICAgICAgICAgICAgICAgIGZvcm1hdERhdGUgKHJlcSwgcmVzKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBhY3Rpb24uZXF1YWxzKCJzZXRDaGFyRW5jb2RpbmciKSApIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0Q2hhckVuY29kaW5nIChyZXEsIHJlcyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggYWN0aW9uLmVxdWFscygiaW5jbHVkZVNlcnZsZXQiKSApIHsKKyAgICAgICAgICAgICAgICAgICAgaW5jbHVkZVNlcnZsZXQgKHJlcSwgcmVzKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBhY3Rpb24uZXF1YWxzKCJmb3J3YXJkU2VydmxldCIpICkgeworICAgICAgICAgICAgICAgICAgICBmb3J3YXJkU2VydmxldCAocmVxLCByZXMpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGFjdGlvbi5lcXVhbHMoInNlbmRFcnJvck1lc3NhZ2UiKSApIHsKKyAgICAgICAgICAgICAgICAgICAgc2VuZEVycm9yTWVzc2FnZSAocmVxLCByZXMpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGFjdGlvbi5lcXVhbHMoInVzZVJlc291cmNlQnVuZGxlIikgKSB7CisgICAgICAgICAgICAgICAgICAgIHVzZVJlc291cmNlQnVuZGxlIChyZXEsIHJlcyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggYWN0aW9uLmVxdWFscygiZm9yd2FyZEpzcCIpICkgeworICAgICAgICAgICAgICAgICAgICBmb3J3YXJkSnNwIChyZXEsIHJlcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKiogU2V0cyB0aGUgY2hhcnNldCBhdHRyaWJ1dGUgdG8gdGhlIHNlc3Npb24gYW5kIGdlbmVyYXRlcyBhbiBpbnB1dCBmb3JtCisgICAgICogIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAorICAgICAqICBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQogICAgICAqLwotCXByb3RlY3RlZCB2b2lkIHNlbmRJbnB1dCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMsIFN0cmluZyBjaGFyc2V0dmFsLCBTdHJpbmcgYWN0aW9uKQorICAgIHByb3RlY3RlZCB2b2lkIHNlbmRJbnB1dCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMsIFN0cmluZyBjaGFyc2V0dmFsLCBTdHJpbmcgYWN0aW9uKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQlIdHRwU2Vzc2lvbiBzZXNzaW9uCT0JcmVxLmdldFNlc3Npb24odHJ1ZSk7Ci0JCQlzZXNzaW9uLnNldEF0dHJpYnV0ZSgiY2hhcnNldCIsIGNoYXJzZXR2YWwpOwotCQkJcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9IiArIGNoYXJzZXR2YWwpOwotCQkJUHJpbnRXcml0ZXIgb3V0ID0gcmVzLmdldFdyaXRlcigpOwotCQkJb3V0LnByaW50bG4oIjxodG1sPiIpOwotCQkJb3V0LnByaW50bG4oIjxoZWFkPiIpOwotCQkJb3V0LnByaW50bG4oIjx0aXRsZT5TZXJ2bGV0IGkxOG4gc2FtcGxlczwvdGl0bGU+PC9oZWFkPiIpOwotCQkJb3V0LnByaW50bG4oIjxib2R5Pjxicj4iKTsKLQkJCW91dC5wcmludGxuKCI8UD48Rk9OVCBGQUNFPVwiVGltZXMgTmV3IFJvbWFuXCI+PEZPTlQgU0laRT02PjxCPlNlcnZsZXQgaTE4biBzYW1wbGVzPC9CPjwvRk9OVD48L0ZPTlQ+PC9QPiIpOwotCQkJb3V0LnByaW50bG4oIjxmb3JtIG5hbWU9XCJpMThuLXNpbXBsZVwiIG1ldGhvZD1cInBvc3RcIiBhY3Rpb249XCIvaTE4bi1zaW1wbGUvU2ltcGxlSTE4blNlcnZsZXRcIj4iKTsKLQkJCW91dC5wcmludGxuKCI8dGFibGU+Iik7Ci0JCQlvdXQucHJpbnRsbigiPHRyPiIpOwotCQkJb3V0LnByaW50bG4oIjx0ZD48SDM+UGxlYXNlIGVudGVyIHlvdXIgbmFtZTo8L0gzPjwvdGQ+Iik7Ci0JCQlvdXQucHJpbnRsbigiPHRkPiIpOwotCQkJb3V0LnByaW50bG4oIjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJuYW1lXCIgc2l6ZT1cIjIwXCI+Iik7Ci0JCQlvdXQucHJpbnRsbigiPC90ZD4iKTsKLQkJCW91dC5wcmludGxuKCI8L3RyPiIpOwotCQkJb3V0LnByaW50bG4oIjwvdGFibGU+Iik7Ci0JCQlvdXQucHJpbnRsbigiPHByZT4iKTsKLQkJCW91dC5wcmludGxuKCI8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9U3VibWl0PiIpOwotCQkJb3V0LnByaW50bG4oIjwvcHJlPiIpOwotCQkJb3V0LnByaW50bG4oIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXR2YWwgdmFsdWU9IiArIGNoYXJzZXR2YWwgKyAiPiIpOwotCQkJb3V0LnByaW50bG4oIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdGlvbiB2YWx1ZT0iICsgYWN0aW9uICsgIj4iKTsKLQkJCW91dC5wcmludGxuKCI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1mdW5jIHZhbHVlPWV4ZWM+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGJyPiIpOwotCQkJb3V0LnByaW50bG4oIjxQPjxCUj48QSBIUkVGPVwiL2kxOG4tc2ltcGxlXCI+QmFjayB0byBzYW1wbGUgaG9tZTwvQT48L1A+Iik7Ci0JCQlvdXQucHJpbnRsbigiPC9mb3JtPiIpOwotCQkJb3V0LnByaW50bG4oIjwvYm9keT4iKTsKLQkJCW91dC5wcmludGxuKCI8L2h0bWw+Iik7Ci0JCQlvdXQuY2xvc2UoKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIEh0dHBTZXNzaW9uIHNlc3Npb24gICAgPSAgICByZXEuZ2V0U2Vzc2lvbih0cnVlKTsKKyAgICAgICAgICAgIHNlc3Npb24uc2V0QXR0cmlidXRlKCJjaGFyc2V0IiwgY2hhcnNldHZhbCk7CisgICAgICAgICAgICByZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDsgY2hhcnNldD0iICsgY2hhcnNldHZhbCk7CisgICAgICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXMuZ2V0V3JpdGVyKCk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlNlcnZsZXQgaTE4biBzYW1wbGVzPC90aXRsZT48L2hlYWQ+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+PGJyPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxQPjxGT05UIEZBQ0U9XCJUaW1lcyBOZXcgUm9tYW5cIj48Rk9OVCBTSVpFPTY+PEI+U2VydmxldCBpMThuIHNhbXBsZXM8L0I+PC9GT05UPjwvRk9OVD48L1A+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGZvcm0gbmFtZT1cImkxOG4tc2ltcGxlXCIgbWV0aG9kPVwicG9zdFwiIGFjdGlvbj1cIi9pMThuLXNpbXBsZS9TaW1wbGVJMThuU2VydmxldFwiPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0YWJsZT4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8dHI+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRkPjxIMz5QbGVhc2UgZW50ZXIgeW91ciBuYW1lOjwvSDM+PC90ZD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGQ+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIm5hbWVcIiBzaXplPVwiMjBcIj4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8L3RkPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvdHI+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPC90YWJsZT4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8cHJlPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1TdWJtaXQ+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9wcmU+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldHZhbCB2YWx1ZT0iICsgY2hhcnNldHZhbCArICI+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0aW9uIHZhbHVlPSIgKyBhY3Rpb24gKyAiPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWZ1bmMgdmFsdWU9ZXhlYz4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPFA+PEJSPjxBIEhSRUY9XCIvaTE4bi1zaW1wbGVcIj5CYWNrIHRvIHNhbXBsZSBob21lPC9BPjwvUD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2Zvcm0+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9ib2R5PiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaHRtbD4iKTsKKyAgICAgICAgICAgIG91dC5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKiBHZXRzIHRoZSBsb2NhbGUgaW5mb3JtYXRpb24gZnJvbSBicm93c2VyIHNldHRpbmdzIGFuZCBzZXRzIHRoZSBsb2NhbGUgdG8KQEAgLTEyOSwyNSArMTI5LDI1IEBACiAgICAgcHJvdGVjdGVkIHZvaWQgZm9ybWF0RGF0ZSAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKLQkJCVN0cmluZyBuYW1lCQkJCT0JcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOwotCQkJU3RyaW5nIGNoYXJzZXR2YWwJCT0JcmVxLmdldFBhcmFtZXRlcigiY2hhcnNldHZhbCIpOworICAgICAgICAgICAgU3RyaW5nIG5hbWUgICAgICAgICAgICAgICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CisgICAgICAgICAgICBTdHJpbmcgY2hhcnNldHZhbCAgICAgICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJjaGFyc2V0dmFsIik7CiAKICAgICAgICAgICAgIC8vIEdldCdzIHRoZSBsb2NhbGUgb2YgdGhlIGJyb3dzZXIgZnJvbSB0aGUgcmVxdWVzdCBvYmplY3QKLSAgICAgICAgICAgIExvY2FsZSBicm93c2VyTG9jYWxlCT0JcmVxLmdldExvY2FsZSgpOworICAgICAgICAgICAgTG9jYWxlIGJyb3dzZXJMb2NhbGUgICAgPSAgICByZXEuZ2V0TG9jYWxlKCk7CiAKICAgICAgICAgICAgIC8vIERlZmF1bHQgbG9jYWxlIG9mIHRoZSByZXNwb25zZSBvYmplY3QKLSAgICAgICAgICAgIExvY2FsZSByZXNMb2NhbGUJCT0JcmVzLmdldExvY2FsZSgpOwotICAgICAgICAgICAgU3RyaW5nIHJlc0NoYXJzZXQJCT0JcmVzLmdldENoYXJhY3RlckVuY29kaW5nKCk7CisgICAgICAgICAgICBMb2NhbGUgcmVzTG9jYWxlICAgICAgICA9ICAgIHJlcy5nZXRMb2NhbGUoKTsKKyAgICAgICAgICAgIFN0cmluZyByZXNDaGFyc2V0ICAgICAgICA9ICAgIHJlcy5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOwogCiAgICAgICAgICAgICAvLyBTZXQncyB0aGUgYnJvd3NlcidzIGxvY2FsZSB0byB0aGUgcmVzcG9uc2Ugb2JqZWN0CiAgICAgICAgICAgICByZXMuc2V0TG9jYWxlKGJyb3dzZXJMb2NhbGUpOwogCi0gICAgICAgICAgICBMb2NhbGUgcmVzTG9jYWxlQWZ0ZXIJPQlyZXMuZ2V0TG9jYWxlKCk7Ci0gICAgICAgICAgICBTdHJpbmcgcmVzQ2hhcnNldEFmdGVyCT0JcmVzLmdldENoYXJhY3RlckVuY29kaW5nKCk7CisgICAgICAgICAgICBMb2NhbGUgcmVzTG9jYWxlQWZ0ZXIgICAgPSAgICByZXMuZ2V0TG9jYWxlKCk7CisgICAgICAgICAgICBTdHJpbmcgcmVzQ2hhcnNldEFmdGVyICAgID0gICAgcmVzLmdldENoYXJhY3RlckVuY29kaW5nKCk7CiAKICAgICAgICAgICAgIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sOyBjaGFyc2V0PSIgKyByZXNDaGFyc2V0QWZ0ZXIpOwogICAgICAgICAgICAgLy8gT3V0cHV0IHN0cmVhbSBmb3IgdGhlIHJlc3BvbnNlCi0gICAgICAgICAgICBqYXZhLmlvLlByaW50V3JpdGVyIG91dAk9CXJlcy5nZXRXcml0ZXIoKTsKKyAgICAgICAgICAgIGphdmEuaW8uUHJpbnRXcml0ZXIgb3V0ICAgID0gICAgcmVzLmdldFdyaXRlcigpOwogCiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+PHRpdGxlPkZvcm1hdHRpbmcgZGF0ZSBhcyBwZXIgYnJvd3NlcidzIGxvY2FsZTwvdGl0bGU+PC9oZWFkPiIpOwpAQCAtMTYxLDE5ICsxNjEsMTkgQEAKICAgICAgICAgICAgIG91dC5wcmludGxuKCJSZXNwb25zZSBjaGFyc2V0IGFmdGVyIHNldHRpbmcgaXQgZnJvbSByZXF1ZXN0IGxvY2FsZTogIiArIHJlc0NoYXJzZXRBZnRlciArICI8YnI+Iik7CiAKICAgICAgICAgICAgIC8vIEdldCB0b2RheSdzIGRhdGUgYW5kIGZvcm1hdHMgaXQgdXNpbmcgdGhlIGJyb3dzZXIgbG9jYWxlCi0gICAgICAgICAgICBqYXZhLnV0aWwuRGF0ZSB0b2RheQk9CW5ldyBqYXZhLnV0aWwuRGF0ZSgpOwotICAgICAgICAgICAgRGF0ZUZvcm1hdCBmb3JtYXR0ZXIJPQlEYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZShEYXRlRm9ybWF0LkZVTEwsIGJyb3dzZXJMb2NhbGUpOwotICAgICAgICAgICAgU3RyaW5nIGZvcm1hdHRlZERhdGUJPQlmb3JtYXR0ZXIuZm9ybWF0KHRvZGF5KTsKKyAgICAgICAgICAgIGphdmEudXRpbC5EYXRlIHRvZGF5ICAgID0gICAgbmV3IGphdmEudXRpbC5EYXRlKCk7CisgICAgICAgICAgICBEYXRlRm9ybWF0IGZvcm1hdHRlciAgICA9ICAgIERhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKERhdGVGb3JtYXQuRlVMTCwgYnJvd3NlckxvY2FsZSk7CisgICAgICAgICAgICBTdHJpbmcgZm9ybWF0dGVkRGF0ZSAgICA9ICAgIGZvcm1hdHRlci5mb3JtYXQodG9kYXkpOwogCiAgICAgICAgICAgICBvdXQucHJpbnRsbigiVG9kYXkncyBkYXRlIGZvciAiICsgcmVzTG9jYWxlQWZ0ZXIgKyAiIGlzIDogIiArIGZvcm1hdHRlZERhdGUgKyAiPGJyPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj4iKTsKLQkJCW91dC5wcmludGxuKCI8UD48QlI+PEEgSFJFRj1cIi9pMThuLXNpbXBsZVwiPkJhY2sgdG8gc2FtcGxlIGhvbWU8L0E+PC9QPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxQPjxCUj48QSBIUkVGPVwiL2kxOG4tc2ltcGxlXCI+QmFjayB0byBzYW1wbGUgaG9tZTwvQT48L1A+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9ib2R5PjwvaHRtbD4iKTsKICAgICAgICAgICAgIG91dC5jbG9zZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCX0KKyAgICB9CiAKICAgICAvKiogU2V0cyByZXF1ZXN0J3MgY2hhcmFjdGVyIGVuY29kaW5nIHVzaW5nIHNldENoYXJhY3RlckVuY29kaW5nIG1ldGhvZCBvZiBIdHRwU2VydmxldFJlcXVlc3QgaW50ZXJmYWNlLgogICAgICAqICBUaGUgc2V0Q2hhcmFjdGVyRW5jb2RpbmcgbWV0aG9kIGlzIHVzZWQgdG8gaW5mb3JtIHRoZSBzZXJ2bGV0IGNvbnRhaW5lciB0byByZWFkIHJlcXVlc3QgcGFyYW1ldGVycyB1c2luZyBzcGVjaWZpZWQgZW5jb2RpbmcuCkBAIC0xODMsMjQgKzE4MywyNCBAQAogICAgIHByb3RlY3RlZCB2b2lkIHNldENoYXJFbmNvZGluZyAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKLQkJCVN0cmluZyBuYW1lCQkJPQlyZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7Ci0JCQlTdHJpbmcgY2hhcnNldHZhbAk9CXJlcS5nZXRQYXJhbWV0ZXIoImNoYXJzZXR2YWwiKTsKLQkJCXJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sOyBjaGFyc2V0PSIgKyBjaGFyc2V0dmFsKTsKKyAgICAgICAgICAgIFN0cmluZyBuYW1lICAgICAgICAgICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CisgICAgICAgICAgICBTdHJpbmcgY2hhcnNldHZhbCAgICA9ICAgIHJlcS5nZXRQYXJhbWV0ZXIoImNoYXJzZXR2YWwiKTsKKyAgICAgICAgICAgIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sOyBjaGFyc2V0PSIgKyBjaGFyc2V0dmFsKTsKIAotCQkJLy8gT3V0cHV0IHN0cmVhbSBmb3IgdGhlIHJlc3BvbnNlCi0JCQlQcmludFdyaXRlciBvdXQJCT0JcmVzLmdldFdyaXRlcigpOworICAgICAgICAgICAgLy8gT3V0cHV0IHN0cmVhbSBmb3IgdGhlIHJlc3BvbnNlCisgICAgICAgICAgICBQcmludFdyaXRlciBvdXQgICAgICAgID0gICAgcmVzLmdldFdyaXRlcigpOwogCi0JCQlvdXQucHJpbnRsbigiPGh0bWw+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGhlYWQ+PHRpdGxlPlNldHRpbmcgcmVxdWVzdCBvYmplY3QncyBjaGFyYWN0ZXIgZW5jb2RpbmcgdG8gIiArIGNoYXJzZXR2YWwgKyAiPC90aXRsZT48L2hlYWQ+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGJvZHk+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGJyPjxIMz4gVGhlIG5hbWUgZW50ZXJlZCB3YXMgOiAiICsgbmFtZSArICIgYW5kIHRoZSBhc3NvY2lhdGVkIGVuY29kaW5nIHdhcyA6ICIgKyBjaGFyc2V0dmFsICsgIjwvSDM+PGJyPiIpOwotCQkJb3V0LnByaW50bG4oIjxicj4iKTsKLQkJCW91dC5wcmludGxuKCI8UD48QlI+PEEgSFJFRj1cIi9pMThuLXNpbXBsZVwiPkJhY2sgdG8gc2FtcGxlIGhvbWU8L0E+PC9QPiIpOwotCQkJb3V0LnByaW50bG4oIjwvYm9keT48L2h0bWw+Iik7Ci0JCQlvdXQuY2xvc2UoKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD48dGl0bGU+U2V0dGluZyByZXF1ZXN0IG9iamVjdCdzIGNoYXJhY3RlciBlbmNvZGluZyB0byAiICsgY2hhcnNldHZhbCArICI8L3RpdGxlPjwvaGVhZD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+PEgzPiBUaGUgbmFtZSBlbnRlcmVkIHdhcyA6ICIgKyBuYW1lICsgIiBhbmQgdGhlIGFzc29jaWF0ZWQgZW5jb2Rpbmcgd2FzIDogIiArIGNoYXJzZXR2YWwgKyAiPC9IMz48YnI+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxQPjxCUj48QSBIUkVGPVwiL2kxOG4tc2ltcGxlXCI+QmFjayB0byBzYW1wbGUgaG9tZTwvQT48L1A+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9ib2R5PjwvaHRtbD4iKTsKKyAgICAgICAgICAgIG91dC5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKiBJbmNsdWRlcyBhIHNlcnZsZXQgdXNpbmcgUmVxdWVzdERpc3BhdGNoZXIncyBpbmNsdWRlIG1ldGhvZC4gSGVyZSB0aGUgZGF0YSBkaXNwbGF5IGJlaGF2aW91cgpAQCAtMjEyLDMwICsyMTIsMzAgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBpbmNsdWRlU2VydmxldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKLQkJCVN0cmluZyBuYW1lID0gcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOwotCQkJU3RyaW5nIGNoYXJzZXR2YWwgPSByZXEuZ2V0UGFyYW1ldGVyKCJjaGFyc2V0dmFsIik7Ci0JCQlyZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDsgY2hhcnNldD0iICsgY2hhcnNldHZhbCk7CisgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKKyAgICAgICAgICAgIFN0cmluZyBjaGFyc2V0dmFsID0gcmVxLmdldFBhcmFtZXRlcigiY2hhcnNldHZhbCIpOworICAgICAgICAgICAgcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9IiArIGNoYXJzZXR2YWwpOwogCi0JCQkvLyBPdXRwdXQgc3RyZWFtIGZvciB0aGUgcmVzcG9uc2UKLQkJCVByaW50V3JpdGVyIG91dCA9IHJlcy5nZXRXcml0ZXIoKTsKKyAgICAgICAgICAgIC8vIE91dHB1dCBzdHJlYW0gZm9yIHRoZSByZXNwb25zZQorICAgICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzLmdldFdyaXRlcigpOwogCi0JCQlvdXQucHJpbnRsbigiPGh0bWw+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGhlYWQ+PHRpdGxlPkluY2x1ZGluZyBhbm90aGVyIHNlcnZsZXQgZnJvbSBhIHNlcnZsZXQ8L3RpdGxlPjwvaGVhZD4iKTsKLQkJCW91dC5wcmludGxuKCI8Ym9keT4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD48dGl0bGU+SW5jbHVkaW5nIGFub3RoZXIgc2VydmxldCBmcm9tIGEgc2VydmxldDwvdGl0bGU+PC9oZWFkPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogCi0JCQlSZXF1ZXN0RGlzcGF0Y2hlciBkaXNwYXRjaGVyOwotCQkJZGlzcGF0Y2hlciA9IGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9JbmNsdWRlZFNlcnZsZXQiKTsKLQkJCWRpc3BhdGNoZXIuaW5jbHVkZShyZXEsIHJlcyk7CisgICAgICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciBkaXNwYXRjaGVyOworICAgICAgICAgICAgZGlzcGF0Y2hlciA9IGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9JbmNsdWRlZFNlcnZsZXQiKTsKKyAgICAgICAgICAgIGRpc3BhdGNoZXIuaW5jbHVkZShyZXEsIHJlcyk7CiAKLQkJCW91dC5wcmludGxuKCI8YnI+TmFtZSBmcm9tIHRoZSBpbmNsdWRpbmcgc2VydmxldDogIiArIG5hbWUgKyAiPGJyPiIpOwotCQkJb3V0LnByaW50bG4oIjxicj4iKTsKLQkJCW91dC5wcmludGxuKCI8UD48QlI+PEEgSFJFRj1cIi9pMThuLXNpbXBsZVwiPkJhY2sgdG8gc2FtcGxlIGhvbWU8L0E+PC9QPiIpOwotCQkJb3V0LnByaW50bG4oIjwvYm9keT48L2h0bWw+Iik7Ci0JCQlvdXQuY2xvc2UoKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+TmFtZSBmcm9tIHRoZSBpbmNsdWRpbmcgc2VydmxldDogIiArIG5hbWUgKyAiPGJyPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8UD48QlI+PEEgSFJFRj1cIi9pMThuLXNpbXBsZVwiPkJhY2sgdG8gc2FtcGxlIGhvbWU8L0E+PC9QPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvYm9keT48L2h0bWw+Iik7CisgICAgICAgICAgICBvdXQuY2xvc2UoKTsKIAotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKiBGb3J3YXJkcyBhIHNlcnZsZXQgdXNpbmcgUmVxdWVzdERpc3BhdGNoZXIncyBmb3J3YXJkIG1ldGhvZC4gSGVyZSB0aGUgZGF0YSBkaXNwbGF5IGJlaGF2aW91cgpAQCAtMjQ4LDI0ICsyNDgsMjQgQEAKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCiAgICAgICAgIHRyeSB7Ci0JCQlTdHJpbmcgbmFtZQkJCT0gcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOwotCQkJU3RyaW5nIGNoYXJzZXR2YWwJPSByZXEuZ2V0UGFyYW1ldGVyKCJjaGFyc2V0dmFsIik7Ci0JCQlyZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDsgY2hhcnNldD0iICsgY2hhcnNldHZhbCk7CisgICAgICAgICAgICBTdHJpbmcgbmFtZSAgICAgICAgICAgID0gcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOworICAgICAgICAgICAgU3RyaW5nIGNoYXJzZXR2YWwgICAgPSByZXEuZ2V0UGFyYW1ldGVyKCJjaGFyc2V0dmFsIik7CisgICAgICAgICAgICByZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDsgY2hhcnNldD0iICsgY2hhcnNldHZhbCk7CiAKLQkJCS8vIE91dHB1dCBzdHJlYW0gZm9yIHRoZSByZXNwb25zZQotCQkJUHJpbnRXcml0ZXIgb3V0CQk9IHJlcy5nZXRXcml0ZXIoKTsKKyAgICAgICAgICAgIC8vIE91dHB1dCBzdHJlYW0gZm9yIHRoZSByZXNwb25zZQorICAgICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ICAgICAgICA9IHJlcy5nZXRXcml0ZXIoKTsKIAotCQkJb3V0LnByaW50bG4oIjxodG1sPiIpOwotCQkJb3V0LnByaW50bG4oIjxoZWFkPjx0aXRsZT5JbmNsdWRpbmcgYW5vdGhlciBzZXJ2bGV0IGZyb20gYSBzZXJ2bGV0PC90aXRsZT48L2hlYWQ+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGJvZHk+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGJyPlRoZSBuYW1lIGZyb20gZm9yd2FyZGluZyBzZXJ2bGV0IDogIiArIG5hbWUgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD48dGl0bGU+SW5jbHVkaW5nIGFub3RoZXIgc2VydmxldCBmcm9tIGEgc2VydmxldDwvdGl0bGU+PC9oZWFkPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj5UaGUgbmFtZSBmcm9tIGZvcndhcmRpbmcgc2VydmxldCA6ICIgKyBuYW1lICk7CiAKLQkJCVJlcXVlc3REaXNwYXRjaGVyIGRpc3BhdGNoZXI7Ci0JCQlkaXNwYXRjaGVyID0gZ2V0U2VydmxldENvbnRleHQoKS5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL0ZvcndhcmRlZFNlcnZsZXQiKTsKLQkJCWRpc3BhdGNoZXIuZm9yd2FyZChyZXEsIHJlcyk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9CisgICAgICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciBkaXNwYXRjaGVyOworICAgICAgICAgICAgZGlzcGF0Y2hlciA9IGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9Gb3J3YXJkZWRTZXJ2bGV0Iik7CisgICAgICAgICAgICBkaXNwYXRjaGVyLmZvcndhcmQocmVxLCByZXMpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKiBTZW5kIGVycm9yIG1lc3NhZ2VzIHVzaW5nIHJlc3BvbnNlJ3Mgc2VuZEVycm9yIG1ldGhvZC4gVGhlIHNlbmRFcnJvciBtZXRob2Qgc2VuZHMgbXVsdGkgYnl0ZSBlcnJvciBtZXNzYWdlcyBjb3JyZWN0bHkKQEAgLTI3NiwxNiArMjc2LDE2IEBACiAgICAgcHJvdGVjdGVkIHZvaWQgc2VuZEVycm9yTWVzc2FnZSAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKLQkJCVN0cmluZyBuYW1lCQkJPQlyZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7Ci0JCQlTdHJpbmcgY2hhcnNldHZhbAk9CXJlcS5nZXRQYXJhbWV0ZXIoImNoYXJzZXR2YWwiKTsKLQkJCXJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sOyBjaGFyc2V0PSIgKyBjaGFyc2V0dmFsKTsKLQkJCXJlcy5zZW5kRXJyb3IoNDA0LCAiSTE4biBlcnJvciBtZXNzYWdlIGZyb20gc2VydmxldCAiKyBuYW1lKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KKyAgICAgICAgICAgIFN0cmluZyBuYW1lICAgICAgICAgICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CisgICAgICAgICAgICBTdHJpbmcgY2hhcnNldHZhbCAgICA9ICAgIHJlcS5nZXRQYXJhbWV0ZXIoImNoYXJzZXR2YWwiKTsKKyAgICAgICAgICAgIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sOyBjaGFyc2V0PSIgKyBjaGFyc2V0dmFsKTsKKyAgICAgICAgICAgIHJlcy5zZW5kRXJyb3IoNDA0LCAiSTE4biBlcnJvciBtZXNzYWdlIGZyb20gc2VydmxldCAiKyBuYW1lKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KICAgICB9CiAKLQkvKiogTG9hZCByZXNvdXJjZSBidW5kbGUgYmFzZWQgb24gY2xpZW50J3MgbG9jYWxlLiBJZiB0aGVyZSBpcyBubyByZXNvdXJjZSBidW5kbGUgYXZhaWxhYmxlLCB0aGUgZGVmYXVsdCByZXNvdXJjZSBidW5kbGUKKyAgICAvKiogTG9hZCByZXNvdXJjZSBidW5kbGUgYmFzZWQgb24gY2xpZW50J3MgbG9jYWxlLiBJZiB0aGVyZSBpcyBubyByZXNvdXJjZSBidW5kbGUgYXZhaWxhYmxlLCB0aGUgZGVmYXVsdCByZXNvdXJjZSBidW5kbGUKICAgICAgKiAgd2lsbCBiZSBwaWNrZWQgdXAKICAgICAgKiAgQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC0yOTMsNDMgKzI5Myw0MyBAQAogICAgIHByb3RlY3RlZCB2b2lkIHVzZVJlc291cmNlQnVuZGxlIChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICB0cnkgewotCQkJU3RyaW5nIG5hbWUJCQk9CXJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKLQkJCVN0cmluZyBjaGFyc2V0dmFsCT0JcmVxLmdldFBhcmFtZXRlcigiY2hhcnNldHZhbCIpOwotCQkJcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9IiArIGNoYXJzZXR2YWwpOwotCQkJUmVzb3VyY2VCdW5kbGUgcmIJPQludWxsOwotCQkJcmIJCQkJCT0JUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJMb2NhbFN0cmluZ3MiLHJlcS5nZXRMb2NhbGUoKSk7Ci0JCQlTdHJpbmcgbXNnOwotCQkJUHJpbnRXcml0ZXIgb3V0CQk9CXJlcy5nZXRXcml0ZXIoKTsKKyAgICAgICAgICAgIFN0cmluZyBuYW1lICAgICAgICAgICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CisgICAgICAgICAgICBTdHJpbmcgY2hhcnNldHZhbCAgICA9ICAgIHJlcS5nZXRQYXJhbWV0ZXIoImNoYXJzZXR2YWwiKTsKKyAgICAgICAgICAgIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sOyBjaGFyc2V0PSIgKyBjaGFyc2V0dmFsKTsKKyAgICAgICAgICAgIFJlc291cmNlQnVuZGxlIHJiICAgID0gICAgbnVsbDsKKyAgICAgICAgICAgIHJiICAgICAgICAgICAgICAgICAgICA9ICAgIFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgiTG9jYWxTdHJpbmdzIixyZXEuZ2V0TG9jYWxlKCkpOworICAgICAgICAgICAgU3RyaW5nIG1zZzsKKyAgICAgICAgICAgIFByaW50V3JpdGVyIG91dCAgICAgICAgPSAgICByZXMuZ2V0V3JpdGVyKCk7CiAKLQkJCW91dC5wcmludGxuKCI8aHRtbD4iKTsKLQkJCW91dC5wcmludGxuKCI8aGVhZD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKIAotCQkJdHJ5IHsKLQkJCQltc2cJCQkJPQlyYi5nZXRTdHJpbmcgKCJ0aXRsZSIpOwotCQkJCW91dC5wcmludGxuKCI8dGl0bGU+IiArIG1zZyArICI8L3RpdGxlPiIpOwotCQkJCW91dC5wcmludGxuKCI8L2hlYWQ+Iik7Ci0JCQkJb3V0LnByaW50bG4oIjxib2R5PiIpOwotCQkJCW91dC5wcmludGxuKCI8YnI+PEgxPiBIZWxsbyAiICsgbmFtZSArICIsIHRoZSBmb2xsb3dpbmcgbWVzc2FnZXMgYXJlIGRpc3BsYXllZCBmcm9tIGEgcmVzb3VyY2UgYnVuZGxlPC9IMT4iKTsKLQkJCQltc2cgPSByYi5nZXRTdHJpbmcgKCJtc2ciKTsKLQkJCQlvdXQucHJpbnRsbigiPGJyPjxicj48SDI+IiArIG1zZyArICI8L0gyPiIpOwotCQkJCW1zZyA9IHJiLmdldFN0cmluZyAoInRoYW5rcyIpOwotCQkJCW91dC5wcmludGxuKCI8YnI+PGJyPjxIMz4iICsgbXNnICsgIjwvSDM+Iik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1zZyAgICAgICAgICAgICAgICA9ICAgIHJiLmdldFN0cmluZyAoInRpdGxlIik7CisgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT4iICsgbXNnICsgIjwvdGl0bGU+Iik7CisgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CisgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj48SDE+IEhlbGxvICIgKyBuYW1lICsgIiwgdGhlIGZvbGxvd2luZyBtZXNzYWdlcyBhcmUgZGlzcGxheWVkIGZyb20gYSByZXNvdXJjZSBidW5kbGU8L0gxPiIpOworICAgICAgICAgICAgICAgIG1zZyA9IHJiLmdldFN0cmluZyAoIm1zZyIpOworICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+PGJyPjxIMj4iICsgbXNnICsgIjwvSDI+Iik7CisgICAgICAgICAgICAgICAgbXNnID0gcmIuZ2V0U3RyaW5nICgidGhhbmtzIik7CisgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj48YnI+PEgzPiIgKyBtc2cgKyAiPC9IMz4iKTsKIAotCQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgCX0KLQkJCW91dC5wcmludGxuKCI8YnI+Iik7Ci0JCQlvdXQucHJpbnRsbigiPFA+PEJSPjxBIEhSRUY9XCIvaTE4bi1zaW1wbGVcIj5CYWNrIHRvIHNhbXBsZSBob21lPC9BPjwvUD4iKTsKLSAgICAgICAgCW91dC5wcmludGxuKCI8L2JvZHk+PC9odG1sPiIpOwotICAgICAgICAJb3V0LmNsb3NlKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9CisgICAgICAgICAgICB9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8UD48QlI+PEEgSFJFRj1cIi9pMThuLXNpbXBsZVwiPkJhY2sgdG8gc2FtcGxlIGhvbWU8L0E+PC9QPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvYm9keT48L2h0bWw+Iik7CisgICAgICAgICAgICBvdXQuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KICAgICB9CiAKLQkvKiogRm9yd2FyZHMgcmVxdWVzdCBmcm9tIHNlcnZsZXQgdG8ganNwIHVzaW5nIFJlcXVlc3REaXNwYXRjaGVyJ3MgZm9yd2FyZCBtZXRob2QuIEhlcmUgdGhlIGRhdGEgZGlzcGxheSBiZWhhdmlvdXIKKyAgICAvKiogRm9yd2FyZHMgcmVxdWVzdCBmcm9tIHNlcnZsZXQgdG8ganNwIHVzaW5nIFJlcXVlc3REaXNwYXRjaGVyJ3MgZm9yd2FyZCBtZXRob2QuIEhlcmUgdGhlIGRhdGEgZGlzcGxheSBiZWhhdmlvdXIKICAgICAgKiAgY2hhbmdlcyBiYXNlZCBvbiB0aGUgY29udGVudCB0eXBlIHNldC4gSWYgdGhlIGZvcndhcmRlZCBqc3Agc2V0cyB0aGUgY29udGVudCB0eXBlIHRvIGEgZGlmZmVyZW50IHZhbHVlIHRoZW4gdGhlIG5ldyBjb250ZW50IHR5cGUKICAgICAgKiAgc2hvdWxkIGJlIHNldCBmb3IgdGhlIG91dHB1dCBzdHJlYW0KICAgICAgKiAgQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CkBAIC0zMzgsMTIgKzMzOCwxMiBAQAogICAgIHByb3RlY3RlZCB2b2lkIGZvcndhcmRKc3AgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7Ci0JCQlSZXF1ZXN0RGlzcGF0Y2hlciBkaXNwYXRjaGVyOwotCQkJZGlzcGF0Y2hlciA9IGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9Gb3J3YXJkZWRKc3AuanNwIik7Ci0gICAgICAJCWRpc3BhdGNoZXIuZm9yd2FyZChyZXEsIHJlcyk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9CisgICAgICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciBkaXNwYXRjaGVyOworICAgICAgICAgICAgZGlzcGF0Y2hlciA9IGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9Gb3J3YXJkZWRKc3AuanNwIik7CisgICAgICAgICAgICAgIGRpc3BhdGNoZXIuZm9yd2FyZChyZXEsIHJlcyk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBtZXRob2QuCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9zYW1wbGViZWFuL0phdmFVc2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9zYW1wbGViZWFuL0phdmFVc2VCZWFuLmphdmEKaW5kZXggYzk4NTdmOS4uNzhkYzlmZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvc2FtcGxlYmVhbi9KYXZhVXNlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L3NhbXBsZWJlYW4vSmF2YVVzZUJlYW4uamF2YQpAQCAtMjMsNyArMjMsNyBAQAogLyoqCiAgKiBTaW1wbGUgSmF2YSBCZWFuIHVzZWQgdG8gc2V0L2dldCBuYW1lIGFuZCBncmVldGluZyBtZXNzYWdlcyBmcm9tIGEganNwCiAgKiBAYXV0aG9yICBDaGFuZCBCYXNoYQotICogQHZlcnNpb24JMS4wCisgKiBAdmVyc2lvbiAgICAxLjAKICAqLwogcHVibGljIGNsYXNzIEphdmFVc2VCZWFuIHsKIApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KIAotCS8qKiBHZXRzIHRoZSBuYW1lIHRoYXQgd2FzIHNldCB1c2luZyBzZXROYW1lKFN0cmluZyBuYW1lKSBtZXRob2Qgb2YgdGhpcyBjbGFzcworICAgIC8qKiBHZXRzIHRoZSBuYW1lIHRoYXQgd2FzIHNldCB1c2luZyBzZXROYW1lKFN0cmluZyBuYW1lKSBtZXRob2Qgb2YgdGhpcyBjbGFzcwogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC93YXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvd2FyL2J1aWxkLnhtbAppbmRleCBkYWE5OGI2Li44NWNlODI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC93YXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL3dhci9idWlsZC54bWwKQEAgLTIzLDMxICsyMywzMSBAQAogCiA8cHJvamVjdCBuYW1lPSJpMThuLXNpbXBsZSIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotCSZjb21tb25CdWlsZDsKKyAgICAmY29tbW9uQnVpbGQ7CiAgICAgPHByb3BlcnR5IG5hbWU9ImFyY2hpdmVkaXIiIHZhbHVlPSIke2J1aWxkfS9hcmNoaXZlcyIvPgogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+CiAgICAgICAgICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0iIC8+CiAgICAgICAgIDwvdGFyZ2V0PgotCQotCTx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0icHJlcGFyZSIvPgotCQotCTx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImNvbXBpbGUiPgotCQk8Y29weSBmaWxlPSIuLi9kZXNjcmlwdG9yL3dlYi54bWwiIHRvZGlyPSIke2J1aWxkfS9XRUItSU5GIi8+Ci0JCTxjb3B5IGZpbGU9Ii4uL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwiIHRvZGlyPSIke2J1aWxkfS9XRUItSU5GIiAKKworICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0icHJlcGFyZSIvPgorCisgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iY29tcGlsZSI+CisgICAgICAgIDxjb3B5IGZpbGU9Ii4uL2Rlc2NyaXB0b3Ivd2ViLnhtbCIgdG9kaXI9IiR7YnVpbGR9L1dFQi1JTkYiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iLi4vZGVzY3JpcHRvci9zdW4td2ViLnhtbCIgdG9kaXI9IiR7YnVpbGR9L1dFQi1JTkYiCiAgICAgICAgICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0JCTxjb3B5IHRvZGlyPSIke2J1aWxkfS9XRUItSU5GL3RsZHMiPgorICAgICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZH0vV0VCLUlORi90bGRzIj4KICAgICAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0idGxkcyIvPgogICAgICAgICAgICAgICAgIDwvY29weT4KICAgICAgICAgICAgICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZH0iPgogICAgICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJkb2Nyb290IiBpbmNsdWRlcz0iKi5qc3AsICouaHRtbCIvPgogICAgICAgICAgICAgICAgIDwvY29weT4KLQkJPGphciBkZXN0ZmlsZT0iJHthcmNoaXZlZGlyfS9pMThuLXNpbXBsZS53YXIiIAorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2FyY2hpdmVkaXJ9L2kxOG4tc2ltcGxlLndhciIKICAgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0PSIuLi9tYW5pZmVzdC9NQU5JRkVTVC5NRiIKICAgICAgICAgICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGR9Ii8+Ci0JPC90YXJnZXQ+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIiBkZXBlbmRzPSJhc3NlbWJsZSI+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCIgZGVwZW5kcz0iYXNzZW1ibGUiPgorICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci91bmlxdWVjci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci91bmlxdWVjci9idWlsZC54bWwKaW5kZXggY2MzNTBhZS4uNTFlMjhiZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvdW5pcXVlY3IvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3VuaXF1ZWNyL2J1aWxkLnhtbApAQCAtMTMzLDcgKzEzMyw3IEBACiAgICAgICAgIDwhLS0gY3JlYXRlLWFwcC1yZWYgdG8gY2x1c3RlciAtLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24ucnVuLmFzYWRtaW4iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgotICAgICAgICAgICAgICAgICAgIHZhbHVlPSJjcmVhdGUtYXBwbGljYXRpb24tcmVmIC0tcG9ydCAke2FkbWluLnBvcnR9IC0tdXNlciAke2FkbWluLnVzZXJ9IC0tcGFzc3dvcmRmaWxlICR7cGFzc3dvcmRGaWxlfSAtLXRhcmdldCAke3Rlc3RDbHVzdGVyfSAke3Rlc3ROYW1lMn0iLz4gICAgICAKKyAgICAgICAgICAgICAgICAgICB2YWx1ZT0iY3JlYXRlLWFwcGxpY2F0aW9uLXJlZiAtLXBvcnQgJHthZG1pbi5wb3J0fSAtLXVzZXIgJHthZG1pbi51c2VyfSAtLXBhc3N3b3JkZmlsZSAke3Bhc3N3b3JkRmlsZX0gLS10YXJnZXQgJHt0ZXN0Q2x1c3Rlcn0gJHt0ZXN0TmFtZTJ9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9hcHBjbGllbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9hcHBjbGllbnQvYnVpbGQueG1sCmluZGV4IDY0ZmM3ZWEuLjkwNDU0ZTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvYXBwY2xpZW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL2FwcGNsaWVudC9idWlsZC54bWwKQEAgLTIwLDI5ICsyMCwyOSBAQAogCiA8IUVOVElUWSBjb21tb25CdWlsZCBTWVNURU0gIi4vLi4vLi4vLi4vY29uZmlnL2NvbW1vbi54bWwiPgogXT4KLSAKKwogPHByb2plY3QgbmFtZT0id3N0b2VqYiIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotIAkmY29tbW9uQnVpbGQ7CisgICAgICZjb21tb25CdWlsZDsKICAgICA8cHJvcGVydHkgbmFtZT0iYXJjaGl2ZWRpciIgdmFsdWU9IiR7YnVpbGR9L2FyY2hpdmVzIi8+CiAKLQk8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgorICAgIDx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9IiAvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2FyY2hpdmVkaXJ9IiAvPgogICAgICAgICA8Y29weSBmaWxlPSJXZWJTZXJ2aWNlVG9FamIud3NkbCIgdG9kaXI9IiR7YnVpbGR9L01FVEEtSU5GL3dzZGwiLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9IiBmYWlsb25lcnJvcj0idHJ1ZSIgPgotCQkgICAgPGFyZyBsaW5lPSItaW1wb3J0IC1kICR7YnVpbGR9IC1jbGFzc3BhdGggJHtidWlsZH0gLW1hcHBpbmcgJHtidWlsZH0vbWFwcGluZy54bWwgd3Njb21waWxlX2NvbmZpZy54bWwiLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iLWltcG9ydCAtZCAke2J1aWxkfSAtY2xhc3NwYXRoICR7YnVpbGR9IC1tYXBwaW5nICR7YnVpbGR9L21hcHBpbmcueG1sIHdzY29tcGlsZV9jb25maWcueG1sIi8+CiAgICAgICAgIDwvZXhlYz4KLQk8L3RhcmdldD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0icHJlcGFyZSI+Ci0JCTxqYXZhYyBzcmNkaXI9IndzdG9lamIiIGRlc3RkaXI9IiR7YnVpbGR9Ij4KKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9InByZXBhcmUiPgorICAgICAgICA8amF2YWMgc3JjZGlyPSJ3c3RvZWpiIiBkZXN0ZGlyPSIke2J1aWxkfSI+CiAgIDxjbGFzc3BhdGggcmVmaWQ9ImdmdjMuY2xhc3NwYXRoIi8+CiAgICAgICAgICA8L2phdmFjPgogCi0JPC90YXJnZXQ+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlLHNldEh0dHBQb3J0Ij4KKyAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlLHNldEh0dHBQb3J0Ij4KICAgICAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9L01FVEEtSU5GIi8+CiAgICAgICAgICAgICA8Y29weSBmaWxlPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiB0b2Rpcj0iJHtidWlsZH0vTUVUQS1JTkYiLz4KICAgICAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXJjaGl2ZWRpcn0vYXBwY2xpZW50LXBvcnRhYmxlLmphciIgYmFzZWRpcj0iJHtidWlsZH0iPgpAQCAtNjAsOCArNjAsOCBAQAogICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im1haW4tY2xhc3MiIHZhbHVlPSJ3c3RvZWpiLkNsaWVudCIvPgogICAgICAgICAgICAgICAgIDwvbWFuaWZlc3Q+CiAgICAgICAgICAgICA8L2phcj4KLQk8L3RhcmdldD4KLQkJCi0JPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCIgZGVwZW5kcz0iYXNzZW1ibGUiLz4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiIGRlcGVuZHM9ImFzc2VtYmxlIi8+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvYXBwY2xpZW50L3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9hcHBjbGllbnQvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwKaW5kZXggYjIwZmEwMC4uZmFmNDNkZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9hcHBjbGllbnQvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9hcHBjbGllbnQvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwKQEAgLTIxLDYgKzIxLDYgQEAKIDxzdW4tYXBwbGljYXRpb24tY2xpZW50PgogICAgIDxzZXJ2aWNlLXJlZj4KICAgICAgIDxzZXJ2aWNlLXJlZi1uYW1lPnNlcnZpY2UvV3N0b0VqYlNlcnZpY2U8L3NlcnZpY2UtcmVmLW5hbWU+Ci0gICAgICA8d3NkbC1vdmVycmlkZT5odHRwOi8vSFRUUF9IT1NUOkhUVFBfUE9SVC93c3RvZWpiL3dzdG9lamI/V1NETDwvd3NkbC1vdmVycmlkZT4gCisgICAgICA8d3NkbC1vdmVycmlkZT5odHRwOi8vSFRUUF9IT1NUOkhUVFBfUE9SVC93c3RvZWpiL3dzdG9lamI/V1NETDwvd3NkbC1vdmVycmlkZT4KICAgICA8L3NlcnZpY2UtcmVmPgogPC9zdW4tYXBwbGljYXRpb24tY2xpZW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9hcHBjbGllbnQvd3Njb21waWxlX2NvbmZpZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL2FwcGNsaWVudC93c2NvbXBpbGVfY29uZmlnLnhtbAppbmRleCA1YTViOWY1Li5lNzgxZWIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL2FwcGNsaWVudC93c2NvbXBpbGVfY29uZmlnLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL2FwcGNsaWVudC93c2NvbXBpbGVfY29uZmlnLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJXZWJTZXJ2aWNlVG9FamIud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJ3c3RvZWpiIi8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL2FwcGNsaWVudC93c3RvZWpiL0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9hcHBjbGllbnQvd3N0b2VqYi9DbGllbnQuamF2YQppbmRleCBhNDhhMjc3Li41YTZhMzViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL2FwcGNsaWVudC93c3RvZWpiL0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvYXBwY2xpZW50L3dzdG9lamIvQ2xpZW50LmphdmEKQEAgLTI5LDI2ICsyOSwyNiBAQAogICogVGhpcyBpcyBhIGFwcGNsaWVudCB0ZXN0CiAgKi8KIHB1YmxpYyBjbGFzcyBDbGllbnQgewotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewotICAgICAgICAKKwogICAgICAgICBib29sZWFuIHRlc3RQb3NpdGl2ZSA9IChCb29sZWFuLnZhbHVlT2YoYXJnc1swXSkpLmJvb2xlYW5WYWx1ZSgpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOyAgICAgICAgCi0gICAgICAgIAorICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworCiAgICAgICAgICAgICBTZXJ2aWNlIG15V2ViU2VydmljZSA9IChTZXJ2aWNlKQotICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL1dzdG9FamJTZXJ2aWNlIik7ICAgICAgICAKKyAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9Xc3RvRWpiU2VydmljZSIpOwogICAgICAgICAgICAgV2ViU2VydmljZVRvRWpiU0VJIHBvcnQgPSAoV2ViU2VydmljZVRvRWpiU0VJKSBteVdlYlNlcnZpY2UuZ2V0UG9ydChXZWJTZXJ2aWNlVG9FamJTRUkuY2xhc3MpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHBvcnQucGF5bG9hZCgiQVBQQ0xJRU5UIGFzIGNsaWVudCIpKTsKICAgICAgICAgfSBjYXRjaChUaHJvd2FibGUgdCkgewotCQkJaWYodGVzdFBvc2l0aXZlKSB7Ci0gICAgICAgICAgICAJdC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgIAlTeXN0ZW0uZXhpdCgtMSk7Ci0JCQl9IGVsc2UgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiUmVjZCBleGNlcHRpb24gYXMgZXhwZWN0ZWQiKTsKLQkJCX0KKyAgICAgICAgICAgIGlmKHRlc3RQb3NpdGl2ZSkgeworICAgICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICAgICAgU3lzdGVtLmV4aXQoLTEpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2QgZXhjZXB0aW9uIGFzIGV4cGVjdGVkIik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLQkJU3lzdGVtLmV4aXQoMCk7CisgICAgICAgIFN5c3RlbS5leGl0KDApOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL2J1aWxkLnhtbAppbmRleCA4NTgyN2I3Li4zNjRhN2JhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL2J1aWxkLnhtbApAQCAtMjMsOSArMjMsOSBAQAogCiA8cHJvamVjdCBuYW1lPSJ3c3RvZWpiIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0JJmNvbW1vbkJ1aWxkOworICAgICZjb21tb25CdWlsZDsKIAotCQorCiAgICAgPHByb3BlcnR5IG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0id3N0b2VqYiIvPgogICAgIDx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwb3J0YWJsZS5lYXIiIHZhbHVlPSIke2J1aWxkfS93c3RvZWpiLXBvcnRhYmxlLmVhciIvPgpAQCAtNDUsMTAgKzQ1LDEwIEBACiAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS93YXIiLz4KICAgICAgICAgPC9hbnQ+CiAKLSAgICAgICAgPGNvcHkgZmlsZT0iJHtidWlsZH0vd2FyL1dFQi1JTkYvd3NkbC9XZWJTZXJ2aWNlVG9FamIud3NkbCIgdG9kaXI9ImFwcGNsaWVudCIvPiAgICAgICAgICAgICAgICAKKyAgICAgICAgPGNvcHkgZmlsZT0iJHtidWlsZH0vd2FyL1dFQi1JTkYvd3NkbC9XZWJTZXJ2aWNlVG9FamIud3NkbCIgdG9kaXI9ImFwcGNsaWVudCIvPgogICAgICAgICA8YW50IGRpcj0iYXBwY2xpZW50IiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2FwcGNsaWVudCIvPgotICAgICAgICA8L2FudD4gIAorICAgICAgICA8L2FudD4KIAogICAgICAgICA8ZGVsZXRlIGZpbGU9ImFwcGNsaWVudC9XZWJTZXJ2aWNlVG9FamIud3NkbCIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfS9lYXIvTUVUQS1JTkYiLz4KQEAgLTE0NiwxMSArMTQ2LDExIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQiIGRlcGVuZHM9InByZXBhcmUiPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iIHJlc3VsdHByb3BlcnR5PSJyZXN1bHQiIG91dHB1dD0iJHtidWlsZH0vJHtsb2cuaWR9Lm91dHB1dC5sb2ciPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItY2xpZW50ICR7YnVpbGR9L3dzdG9lamJDbGllbnQuamFyICR7YXJnLmxpc3R9Ii8+Ci0gICAgICAgIDwvZXhlYz4gICAgIAorICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icHJvY2Vzc1Jlc3VsdCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0IiB2YWx1ZT0iJHtyZXN1bHR9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nIiB2YWx1ZT0iJHtidWlsZH0vJHtsb2cuaWR9Lm91dHB1dC5sb2ciLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgICAgICAgICAgICAgICAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCIgdW5sZXNzPSJFRSI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL2VqYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL2VqYi9idWlsZC54bWwKaW5kZXggYTBjYTE4MC4uNDg4MmYxMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9lamIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvZWpiL2J1aWxkLnhtbApAQCAtMjAsMzMgKzIwLDMzIEBACiAKIDwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CiBdPgotIAorCiA8cHJvamVjdCBuYW1lPSJ3c3RvZWpiIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0gCSZjb21tb25CdWlsZDsKKyAgICAgJmNvbW1vbkJ1aWxkOwogICAgIDxwcm9wZXJ0eSBuYW1lPSJhcmNoaXZlZGlyIiB2YWx1ZT0iJHtidWlsZH0vYXJjaGl2ZXMiLz4KIAotCTx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+Ci0JCTxta2RpciBkaXI9IiR7YnVpbGR9IiAvPgotCQk8bWtkaXIgZGlyPSIke2FyY2hpdmVkaXJ9IiAvPgotCTwvdGFyZ2V0PgotCQotCTx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0icHJlcGFyZSI+Ci0JCTxqYXZhYyBzcmNkaXI9IndzdG9lamIiIGRlc3RkaXI9IiR7YnVpbGR9Ij4KKyAgICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgorICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KKyAgICAgICAgPG1rZGlyIGRpcj0iJHthcmNoaXZlZGlyfSIgLz4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0icHJlcGFyZSI+CisgICAgICAgIDxqYXZhYyBzcmNkaXI9IndzdG9lamIiIGRlc3RkaXI9IiR7YnVpbGR9Ij4KICAgICAgICAgICAgICAgICAgPGNsYXNzcGF0aCByZWZpZD0iZ2Z2My5jbGFzc3BhdGgiLz4KICAgICAgICAgICAgICAgICA8L2phdmFjPgogCi0JPC90YXJnZXQ+Ci0JCi0JPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JCTxta2RpciBkaXI9IiR7YnVpbGR9L01FVEEtSU5GIi8+Ci0JCTxjb3B5IGZpbGU9ImVqYi1qYXIueG1sIiB0b2Rpcj0iJHtidWlsZH0vTUVUQS1JTkYiLz4KLQkJPGphciBkZXN0ZmlsZT0iJHthcmNoaXZlZGlyfS93c3RvZWpiLXBvcnRhYmxlLmphciIgYmFzZWRpcj0iJHtidWlsZH0iLz4KLQkJPGNvcHkgZmlsZT0ic3VuLWVqYi1qYXIueG1sIiB0b2Rpcj0iJHtidWlsZH0vTUVUQS1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotCQk8amFyIGRlc3RmaWxlPSIke2FyY2hpdmVkaXJ9L3dzdG9lamIuamFyIiBiYXNlZGlyPSIke2J1aWxkfSIvPgotCTwvdGFyZ2V0PgotCQkKLQk8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIiBkZXBlbmRzPSJhc3NlbWJsZSI+Ci0JPC90YXJnZXQ+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4KKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0vTUVUQS1JTkYiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iZWpiLWphci54bWwiIHRvZGlyPSIke2J1aWxkfS9NRVRBLUlORiIvPgorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2FyY2hpdmVkaXJ9L3dzdG9lamItcG9ydGFibGUuamFyIiBiYXNlZGlyPSIke2J1aWxkfSIvPgorICAgICAgICA8Y29weSBmaWxlPSJzdW4tZWpiLWphci54bWwiIHRvZGlyPSIke2J1aWxkfS9NRVRBLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXJjaGl2ZWRpcn0vd3N0b2VqYi5qYXIiIGJhc2VkaXI9IiR7YnVpbGR9Ii8+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIiBkZXBlbmRzPSJhc3NlbWJsZSI+CisgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvZWpiL3dzdG9lamIvU3RhdGVmdWxTZXNzaW9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9lamIvd3N0b2VqYi9TdGF0ZWZ1bFNlc3Npb25CZWFuLmphdmEKaW5kZXggNzVlOTEyMC4uOTZhYzY3NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9lamIvd3N0b2VqYi9TdGF0ZWZ1bFNlc3Npb25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9lamIvd3N0b2VqYi9TdGF0ZWZ1bFNlc3Npb25CZWFuLmphdmEKQEAgLTIxLDE2ICsyMSwxNiBAQAogCiAvKioKICAqICBTaW1wbGUgaW50ZXJmYWNlIGZvciBhIHN0YXRlZnVsbCBzZXNzaW9uIGJlYW4uCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEplcm9tZSBEb2NoZXoKICAqLwogcHVibGljIGludGVyZmFjZSBTdGF0ZWZ1bFNlc3Npb25CZWFuIGV4dGVuZHMgRUpCT2JqZWN0IHsKIAotCS8qKgotCSAqIHBlcmZvcm0gc29tZSBraW5kIG9mIHByb2Nlc3NpbmcKLQkgKiBAcGFyYW0gcGF5bG9hZCBpcyB0aGUgcmVxdWVzdCBpbmZvCi0JICogQHJldHVybiB0aGUgcHJvY2Vzc2VkIGluZm8KLQkgKiBAdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyBTdHJpbmcgcGF5TG9hZChTdHJpbmcgcGF5bG9hZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsJCisgICAgLyoqCisgICAgICogcGVyZm9ybSBzb21lIGtpbmQgb2YgcHJvY2Vzc2luZworICAgICAqIEBwYXJhbSBwYXlsb2FkIGlzIHRoZSByZXF1ZXN0IGluZm8KKyAgICAgKiBAcmV0dXJuIHRoZSBwcm9jZXNzZWQgaW5mbworICAgICAqIEB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBwYXlMb2FkKFN0cmluZyBwYXlsb2FkKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9lamIvd3N0b2VqYi9TdGF0ZWZ1bFNlc3Npb25CZWFuRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL2VqYi93c3RvZWpiL1N0YXRlZnVsU2Vzc2lvbkJlYW5FSkIuamF2YQppbmRleCBlYjcyMGYwLi5jY2JjYmIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL2VqYi93c3RvZWpiL1N0YXRlZnVsU2Vzc2lvbkJlYW5FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL2VqYi93c3RvZWpiL1N0YXRlZnVsU2Vzc2lvbkJlYW5FSkIuamF2YQpAQCAtMjEsMzYgKzIxLDM2IEBACiAKIC8qKgogICogIFNpbXBsZSBpbnRlcmZhY2UgZm9yIGEgc3RhdGVmdWxsIHNlc3Npb24gYmVhbi4KLSAqIAorICoKICAqIEBhdXRob3IgSmVyb21lIERvY2hlegogICovCiBwdWJsaWMgY2xhc3MgU3RhdGVmdWxTZXNzaW9uQmVhbkVKQiBpbXBsZW1lbnRzICBTZXNzaW9uQmVhbiB7CiAKLQlwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjOwotICAgIAotCXB1YmxpYyBTdGF0ZWZ1bFNlc3Npb25CZWFuRUpCKCl7fQotICAgIAotCXB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYkNyZWF0ZSAhISIpOwotCX0KKyAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjOwogCi0JcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsJCi0JCXRoaXMuc2MgPSBzYzsKLQl9Ci0gICAgCi0JcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQotICAgIAotCXB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KLSAgICAKLQlwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQkKLQkKLQkvKioKLQkgKiBwZXJmb3JtIHNvbWUga2luZCBvZiBwcm9jZXNzaW5nCi0JICogQHBhcmFtIHBheWxvYWQgaXMgdGhlIHJlcXVlc3QgaW5mbwotCSAqIEByZXR1cm4gdGhlIHByb2Nlc3NlZCBpbmZvCi0JICogQHRocm93cyBSZW1vdGVFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHBheUxvYWQoU3RyaW5nIHBheWxvYWQpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCQlyZXR1cm4gIkhleSAiICsgcGF5bG9hZCArICIsIEkgYW0gc3VjaCBhIGR1bW15IGVqYiwgZG9uJ3QgYm90aGVyICEiOwotCX0JCQkKKyAgICBwdWJsaWMgU3RhdGVmdWxTZXNzaW9uQmVhbkVKQigpe30KKworICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYkNyZWF0ZSAhISIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7CisgICAgICAgIHRoaXMuc2MgPSBzYzsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9CisKKyAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9CisKKyAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQorCisgICAgLyoqCisgICAgICogcGVyZm9ybSBzb21lIGtpbmQgb2YgcHJvY2Vzc2luZworICAgICAqIEBwYXJhbSBwYXlsb2FkIGlzIHRoZSByZXF1ZXN0IGluZm8KKyAgICAgKiBAcmV0dXJuIHRoZSBwcm9jZXNzZWQgaW5mbworICAgICAqIEB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBwYXlMb2FkKFN0cmluZyBwYXlsb2FkKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuICJIZXkgIiArIHBheWxvYWQgKyAiLCBJIGFtIHN1Y2ggYSBkdW1teSBlamIsIGRvbid0IGJvdGhlciAhIjsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL2VqYi93c3RvZWpiL1N0YXRlZnVsU2Vzc2lvbkJlYW5Ib21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL2VqYi93c3RvZWpiL1N0YXRlZnVsU2Vzc2lvbkJlYW5Ib21lLmphdmEKaW5kZXggZjA3NjFjNS4uNjJiZWU3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9lamIvd3N0b2VqYi9TdGF0ZWZ1bFNlc3Npb25CZWFuSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvZWpiL3dzdG9lamIvU3RhdGVmdWxTZXNzaW9uQmVhbkhvbWUuamF2YQpAQCAtMjIsMTEgKzIyLDExIEBACiAKIC8qKgogICogU2ltcGxlIGludGVyZmFjZSB0byBjcmVhdGUgYSBzdGF0ZWZ1bGwgc2Vzc2lvbiBiZWFuCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEplcm9tZSBEb2NoZXoKICAqLwogcHVibGljIGludGVyZmFjZSBTdGF0ZWZ1bFNlc3Npb25CZWFuSG9tZSBleHRlbmRzIEVKQkhvbWUgewogCi0JcHVibGljIFN0YXRlZnVsU2Vzc2lvbkJlYW4gY3JlYXRlICgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIENyZWF0ZUV4Y2VwdGlvbjsKKyAgICBwdWJsaWMgU3RhdGVmdWxTZXNzaW9uQmVhbiBjcmVhdGUgKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgQ3JlYXRlRXhjZXB0aW9uOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL3dhci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL3dhci9idWlsZC54bWwKaW5kZXggN2RkNTcyOC4uMWVlMzlkOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi93YXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvd2FyL2J1aWxkLnhtbApAQCAtMjMsNDcgKzIzLDQ3IEBACiAKIDxwcm9qZWN0IG5hbWU9IldlYlNlcnZpY2VUb0VqYiIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotCSZjb21tb25CdWlsZDsKKyAgICAmY29tbW9uQnVpbGQ7CiAgICAgPHByb3BlcnR5IG5hbWU9ImFyY2hpdmVkaXIiIHZhbHVlPSIke2J1aWxkfS9hcmNoaXZlcyIvPgogCi0JPHRhcmdldCBuYW1lPSJwcmVwYXJlIiBkZXBlbmRzPSJpbml0Ij4KLQkJPHByb3BlcnR5IG5hbWU9ImJpbmFyeSIgdmFsdWU9IiR7YnVpbGR9L1dFQi1JTkYvY2xhc3NlcyIvPgotCQk8cHJvcGVydHkgbmFtZT0id3NkbCIgdmFsdWU9IiR7YnVpbGR9L1dFQi1JTkYvd3NkbCIvPgotCQk8bWtkaXIgZGlyPSIke2JpbmFyeX0iIC8+Ci0JCTxta2RpciBkaXI9IiR7d3NkbH0iLz4KLQkJPG1rZGlyIGRpcj0iJHthcmNoaXZlZGlyfSIgLz4KLQk8L3RhcmdldD4KLQkKLQk8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9InByZXBhcmUsIGltcG9ydC1kZXAiPgotCQk8amF2YWMgc3JjZGlyPSJ3c3RvZWpiIiBkZXN0ZGlyPSIke2JpbmFyeX0iPgotCSAgICAJPGNsYXNzcGF0aD4KLQkgICAgCSAgPHBhdGggcmVmaWQ9ImdmdjMuY2xhc3NwYXRoIi8+Ci0gICAgCQkgIDxwYXRoIGxvY2F0aW9uPSIke2J1aWxkfS9XRUItSU5GL2xpYi9saWJyYXJ5LmphciIvPgotCQkgICAgPC9jbGFzc3BhdGg+CQkKLQkJIDwvamF2YWM+Ci0JCTxlY2hvIG1lc3NhZ2U9Imludm9raW5nIHdzY29tcGlsZSB0byBnZW5lcmF0ZSB3c2RsIGZpbGUiLz4KLQkJPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9Ij4KLQkJCTxhcmcgbGluZT0iLWRlZmluZSBjb25maWctaW50ZXJmYWNlLnhtbCAgLWQgJHtiaW5hcnl9IC1uZCAke3dzZGx9IC1jbGFzc3BhdGggJHtiaW5hcnl9IC1tYXBwaW5nICR7YnVpbGR9L21hcHBpbmcueG1sIi8+Ci0JIAk8L2V4ZWM+CQkJCQkKLQk8L3RhcmdldD4KLQkKLQk8dGFyZ2V0IG5hbWU9ImltcG9ydC1kZXAiPgotCQk8bWtkaXIgZGlyPSIke2J1aWxkfS9XRUItSU5GL2xpYiIgLz4KLQkJPG1rZGlyIGRpcj0iJHtidWlsZH0vdG1wL3dzdG9lamIiIC8+CQkKLQkJPGNvcHkgZmlsZT0iJHtidWlsZH0vLi4vZWpiL3dzdG9lamIvU3RhdGVmdWxTZXNzaW9uQmVhbi5jbGFzcyIgdG9kaXI9IiR7YnVpbGR9L3RtcC93c3RvZWpiIi8+Ci0JCTxjb3B5IGZpbGU9IiR7YnVpbGR9Ly4uL2VqYi93c3RvZWpiL1N0YXRlZnVsU2Vzc2lvbkJlYW5Ib21lLmNsYXNzIiB0b2Rpcj0iJHtidWlsZH0vdG1wL3dzdG9lamIiLz4KLQkJPGphciBkZXN0ZmlsZT0iJHtidWlsZH0vV0VCLUlORi9saWIvbGlicmFyeS5qYXIiIGJhc2VkaXI9IiR7YnVpbGR9L3RtcCIvPgotCQk8ZGVsZXRlIGRpcj0iJHtidWlsZH0vdG1wIi8+Ci0JPC90YXJnZXQ+Ci0JCi0JPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JCTxjb3B5IGZpbGU9IndlYi54bWwiIHRvZGlyPSIke2J1aWxkfS9XRUItSU5GIi8+Ci0JCTxjb3B5IGZpbGU9IndlYnNlcnZpY2VzLnhtbCIgdG9kaXI9IiR7YnVpbGR9L1dFQi1JTkYiLz4KLQkJPGphciBkZXN0ZmlsZT0iJHthcmNoaXZlZGlyfS9zYXloZWxsby1wb3J0YWJsZS53YXIiIGJhc2VkaXI9IiR7YnVpbGR9Ii8+Ci0JCTxjb3B5IGZpbGU9InN1bi13ZWIueG1sIiB0b2Rpcj0iJHtidWlsZH0vV0VCLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0JCTxqYXIgZGVzdGZpbGU9IiR7YXJjaGl2ZWRpcn0vc2F5aGVsbG8ud2FyIiBiYXNlZGlyPSIke2J1aWxkfSIvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJiaW5hcnkiIHZhbHVlPSIke2J1aWxkfS9XRUItSU5GL2NsYXNzZXMiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9IndzZGwiIHZhbHVlPSIke2J1aWxkfS9XRUItSU5GL3dzZGwiLz4KKyAgICAgICAgPG1rZGlyIGRpcj0iJHtiaW5hcnl9IiAvPgorICAgICAgICA8bWtkaXIgZGlyPSIke3dzZGx9Ii8+CisgICAgICAgIDxta2RpciBkaXI9IiR7YXJjaGl2ZWRpcn0iIC8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIiBkZXBlbmRzPSJhc3NlbWJsZSIvPgorICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0icHJlcGFyZSwgaW1wb3J0LWRlcCI+CisgICAgICAgIDxqYXZhYyBzcmNkaXI9IndzdG9lamIiIGRlc3RkaXI9IiR7YmluYXJ5fSI+CisgICAgICAgICAgICA8Y2xhc3NwYXRoPgorICAgICAgICAgICAgICA8cGF0aCByZWZpZD0iZ2Z2My5jbGFzc3BhdGgiLz4KKyAgICAgICAgICAgICAgPHBhdGggbG9jYXRpb249IiR7YnVpbGR9L1dFQi1JTkYvbGliL2xpYnJhcnkuamFyIi8+CisgICAgICAgICAgICA8L2NsYXNzcGF0aD4KKyAgICAgICAgIDwvamF2YWM+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9Imludm9raW5nIHdzY29tcGlsZSB0byBnZW5lcmF0ZSB3c2RsIGZpbGUiLz4KKyAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9Ij4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iLWRlZmluZSBjb25maWctaW50ZXJmYWNlLnhtbCAgLWQgJHtiaW5hcnl9IC1uZCAke3dzZGx9IC1jbGFzc3BhdGggJHtiaW5hcnl9IC1tYXBwaW5nICR7YnVpbGR9L21hcHBpbmcueG1sIi8+CisgICAgICAgICA8L2V4ZWM+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImltcG9ydC1kZXAiPgorICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfS9XRUItSU5GL2xpYiIgLz4KKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0vdG1wL3dzdG9lamIiIC8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7YnVpbGR9Ly4uL2VqYi93c3RvZWpiL1N0YXRlZnVsU2Vzc2lvbkJlYW4uY2xhc3MiIHRvZGlyPSIke2J1aWxkfS90bXAvd3N0b2VqYiIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2J1aWxkfS8uLi9lamIvd3N0b2VqYi9TdGF0ZWZ1bFNlc3Npb25CZWFuSG9tZS5jbGFzcyIgdG9kaXI9IiR7YnVpbGR9L3RtcC93c3RvZWpiIi8+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YnVpbGR9L1dFQi1JTkYvbGliL2xpYnJhcnkuamFyIiBiYXNlZGlyPSIke2J1aWxkfS90bXAiLz4KKyAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGR9L3RtcCIvPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iY29tcGlsZSI+CisgICAgICAgIDxjb3B5IGZpbGU9IndlYi54bWwiIHRvZGlyPSIke2J1aWxkfS9XRUItSU5GIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IndlYnNlcnZpY2VzLnhtbCIgdG9kaXI9IiR7YnVpbGR9L1dFQi1JTkYiLz4KKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthcmNoaXZlZGlyfS9zYXloZWxsby1wb3J0YWJsZS53YXIiIGJhc2VkaXI9IiR7YnVpbGR9Ii8+CisgICAgICAgIDxjb3B5IGZpbGU9InN1bi13ZWIueG1sIiB0b2Rpcj0iJHtidWlsZH0vV0VCLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXJjaGl2ZWRpcn0vc2F5aGVsbG8ud2FyIiBiYXNlZGlyPSIke2J1aWxkfSIvPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCIgZGVwZW5kcz0iYXNzZW1ibGUiLz4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi93YXIvY29uZmlnLWludGVyZmFjZS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL3dhci9jb25maWctaW50ZXJmYWNlLnhtbAppbmRleCA0NGM3MmQ4Li40ZGI3NzdmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL3dhci9jb25maWctaW50ZXJmYWNlLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL3dhci9jb25maWctaW50ZXJmYWNlLnhtbApAQCAtMTksMTEgKzE5LDExIEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDxzZXJ2aWNlIAotICAgICAgbmFtZT0iV2ViU2VydmljZVRvRWpiIiAKLSAgICAgIHRhcmdldE5hbWVzcGFjZT0idXJuOkRlcGxveW1lbnRXZWJTZXJ2aWNlVGVzdCIgCi0gICAgICB0eXBlTmFtZXNwYWNlPSJ1cm46RGVwbG95bWVudFdlYlNlcnZpY2VUZXN0IiAKKyAgPHNlcnZpY2UKKyAgICAgIG5hbWU9IldlYlNlcnZpY2VUb0VqYiIKKyAgICAgIHRhcmdldE5hbWVzcGFjZT0idXJuOkRlcGxveW1lbnRXZWJTZXJ2aWNlVGVzdCIKKyAgICAgIHR5cGVOYW1lc3BhY2U9InVybjpEZXBsb3ltZW50V2ViU2VydmljZVRlc3QiCiAgICAgICBwYWNrYWdlTmFtZT0id3N0b2VqYiI+CiAgICAgICA8aW50ZXJmYWNlIG5hbWU9IndzdG9lamIuV2ViU2VydmljZVRvRWpiU0VJIi8+CiAgIDwvc2VydmljZT4KLTwvY29uZmlndXJhdGlvbj4gCis8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL3dhci93c3RvZWpiL1dlYlNlcnZpY2VUb0VqYlNFSS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi93YXIvd3N0b2VqYi9XZWJTZXJ2aWNlVG9FamJTRUkuamF2YQppbmRleCBjYTg4ODIxLi5hYWZjOWE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL3dhci93c3RvZWpiL1dlYlNlcnZpY2VUb0VqYlNFSS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvd2FyL3dzdG9lamIvV2ViU2VydmljZVRvRWpiU0VJLmphdmEKQEAgLTE1LDIxICsxNSwyMSBAQAogICovCiAKICBwYWNrYWdlIHdzdG9lamI7Ci0gCisKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGU7CiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotIAorCiAgLyoKLSAgKiBUaGlzIGludGVyZmFjZSAgaXMgdGhlIHNlcnZpY2UgZW5kcG9pbnQgaW50ZXJmYWNlIGZvciBhIHNpbXBsZSB3ZWJzZXJ2aWNlcyAKKyAgKiBUaGlzIGludGVyZmFjZSAgaXMgdGhlIHNlcnZpY2UgZW5kcG9pbnQgaW50ZXJmYWNlIGZvciBhIHNpbXBsZSB3ZWJzZXJ2aWNlcwogICAqIGludGVyZmFjaW5nIGEgc2ltcGxlIEVKQgotICAqIAorICAqCiAgICogQGF1dGhvciBKZXJvbWUgRG9jaGV6CiAgICovCiAgcHVibGljIGludGVyZmFjZSBXZWJTZXJ2aWNlVG9FamJTRUkgZXh0ZW5kcyBSZW1vdGUgewotIAkKLSAJLyoKLSAJICogSW52b2tlIHRoZSBlamIKLSAJICovIAkKLSAJIHB1YmxpYyBTdHJpbmcgcGF5bG9hZChTdHJpbmcgcmVxdWVzdEluZm8pIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gCSAKKworICAgICAvKgorICAgICAgKiBJbnZva2UgdGhlIGVqYgorICAgICAgKi8KKyAgICAgIHB1YmxpYyBTdHJpbmcgcGF5bG9hZChTdHJpbmcgcmVxdWVzdEluZm8pIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisKICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL3dhci93c3RvZWpiL1dlYlNlcnZpY2VUb0VqYlNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvd2FyL3dzdG9lamIvV2ViU2VydmljZVRvRWpiU2VydmxldC5qYXZhCmluZGV4IDQ3ZDI0MzIuLmY3NTkzMzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvd2FyL3dzdG9lamIvV2ViU2VydmljZVRvRWpiU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvd2FyL3dzdG9lamIvV2ViU2VydmljZVRvRWpiU2VydmxldC5qYXZhCkBAIC0xNSw1MSArMTUsNTEgQEAKICAqLwogCiBwYWNrYWdlIHdzdG9lamI7Ci0gCisKIGltcG9ydCBqYXZhLnJtaS4qOwogaW1wb3J0IGphdmF4LnJtaS4qOwogaW1wb3J0IGphdmF4Lm5hbWluZy4qOwogCi0gCisKICAvKioKICAgKiAgU2ltcGxlIHNlcnZsZXQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNFSQotICAqIAorICAqCiAgICogQGF1dGhvciBKZXJvbWUgRG9jaGV6CiAgICovCiAgcHVibGljIGNsYXNzIFdlYlNlcnZpY2VUb0VqYlNlcnZsZXQgaW1wbGVtZW50cyBXZWJTZXJ2aWNlVG9FamJTRUkgewotIAkKLSAJLyoqCi0gCSAqICBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU0VJJ3MgbWV0aG9kcwotIAkgKi8KLSAJcHVibGljIFN0cmluZyBwYXlsb2FkKFN0cmluZyByZXF1ZXN0SW5mbykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gCQl0cnkgewotIAkJCWlmIChiZWFuPT1udWxsKSB7Ci0JIAkJCWJlYW4gPSBjcmVhdGVFSkIoKTsKLSAJCQl9Ci0gCQkJcmV0dXJuKGdldE1zZyhyZXF1ZXN0SW5mbykgKyAiOyBhbmQgZG9udCBib3RoZXIgdGhpcyBkdW1teSBzZXJ2bGV0IGFsc28iKTsKLSAJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLSAJCQl0aHJvdyBuZXcgUmVtb3RlRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLSAJCX0gCQkKLSAJfQogCi0JLyoqCi0JICogQ3JlYXRlcyB0aGUgZWpiIG9iamVjdCBmcm9tIGl0J3MgaG9tZSBpbnRlcmZhY2UKLQkgKi8gCQotCXByaXZhdGUgU3RhdGVmdWxTZXNzaW9uQmVhbiBjcmVhdGVFSkIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gY29ubmVjdCB0byB0aGUgRUpCCi0JCUNvbnRleHQgY3R4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCQlqYXZhLmxhbmcuT2JqZWN0IG9ianJlZiA9IGN0eHQubG9va3VwKCJqYXZhOmNvbXAvZW52L015RWpiUmVmZXJlbmNlIik7Ci0JCVN0YXRlZnVsU2Vzc2lvbkJlYW5Ib21lIGhvbWVJbnRmID0gKFN0YXRlZnVsU2Vzc2lvbkJlYW5Ib21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBTdGF0ZWZ1bFNlc3Npb25CZWFuSG9tZS5jbGFzcyk7Ci0JCXJldHVybiBob21lSW50Zi5jcmVhdGUoKTsKLQl9Ci0gICAgICAgICAgCi0JcHVibGljIFN0cmluZyBnZXRNc2coU3RyaW5nIGluZm8pIHRocm93cyBFeGNlcHRpb24gewotCQlpZiAoYmVhbiA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gImNvdWxkIG5vdCB0YWxrIHRvIHRoZSBFSkIgOiBqYXZhOmNvbXAvZW52L015RWpiUmVmZXJlbmNlIjsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiBiZWFuLnBheUxvYWQoaW5mbyk7ICAgICAgICAgICAgICAgIAotCQl9Ci0JfQotIAkKLSAJcHJpdmF0ZSBTdGF0ZWZ1bFNlc3Npb25CZWFuIGJlYW47CisgICAgIC8qKgorICAgICAgKiAgSW1wbGVtZW50YXRpb24gb2YgdGhlIFNFSSdzIG1ldGhvZHMKKyAgICAgICovCisgICAgIHB1YmxpYyBTdHJpbmcgcGF5bG9hZChTdHJpbmcgcmVxdWVzdEluZm8pIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICBpZiAoYmVhbj09bnVsbCkgeworICAgICAgICAgICAgICAgICBiZWFuID0gY3JlYXRlRUpCKCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIHJldHVybihnZXRNc2cocmVxdWVzdEluZm8pICsgIjsgYW5kIGRvbnQgYm90aGVyIHRoaXMgZHVtbXkgc2VydmxldCBhbHNvIik7CisgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgdGhyb3cgbmV3IFJlbW90ZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICB9CisgICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgdGhlIGVqYiBvYmplY3QgZnJvbSBpdCdzIGhvbWUgaW50ZXJmYWNlCisgICAgICovCisgICAgcHJpdmF0ZSBTdGF0ZWZ1bFNlc3Npb25CZWFuIGNyZWF0ZUVKQigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAvLyBjb25uZWN0IHRvIHRoZSBFSkIKKyAgICAgICAgQ29udGV4dCBjdHh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0gY3R4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlFamJSZWZlcmVuY2UiKTsKKyAgICAgICAgU3RhdGVmdWxTZXNzaW9uQmVhbkhvbWUgaG9tZUludGYgPSAoU3RhdGVmdWxTZXNzaW9uQmVhbkhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIFN0YXRlZnVsU2Vzc2lvbkJlYW5Ib21lLmNsYXNzKTsKKyAgICAgICAgcmV0dXJuIGhvbWVJbnRmLmNyZWF0ZSgpOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0TXNnKFN0cmluZyBpbmZvKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKGJlYW4gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuICJjb3VsZCBub3QgdGFsayB0byB0aGUgRUpCIDogamF2YTpjb21wL2Vudi9NeUVqYlJlZmVyZW5jZSI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gYmVhbi5wYXlMb2FkKGluZm8pOworICAgICAgICB9CisgICAgfQorCisgICAgIHByaXZhdGUgU3RhdGVmdWxTZXNzaW9uQmVhbiBiZWFuOwogIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL2J1aWxkLnhtbAppbmRleCAwMWRhN2ZkLi5jM2U2ZmUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvYnVpbGQueG1sCkBAIC0yMywxNCArMjMsMTQgQEAKIAogPHByb2plY3QgbmFtZT0iZWpiIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0JJmNvbW1vbkJ1aWxkOworICAgICZjb21tb25CdWlsZDsKIAotCTx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgotCQk8YW50IGRpcj0ic3RhdGVsZXNzaGVsbG8iIHRhcmdldD0icHJpdmF0ZS1hbGwiPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vc3RhdGVsZXNzaGVsbG8iLz4KLQkJPC9hbnQ+Ci0JCTwhLS1hbnQgZGlyPSJ3ZWJzZXJ2aWNlIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3dlYnNlcnZpY2UiLz4KLQkJPC9hbnQtLT4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KKyAgICAgICAgPGFudCBkaXI9InN0YXRlbGVzc2hlbGxvIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3N0YXRlbGVzc2hlbGxvIi8+CisgICAgICAgIDwvYW50PgorICAgICAgICA8IS0tYW50IGRpcj0id2Vic2VydmljZSIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS93ZWJzZXJ2aWNlIi8+CisgICAgICAgIDwvYW50LS0+CisgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi9zdGF0ZWxlc3NoZWxsby9TdGF0ZWxlc3NIZWxsb1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3N0YXRlbGVzc2hlbGxvL1N0YXRlbGVzc0hlbGxvVGVzdC5qYXZhCmluZGV4IGJmZjM5MDMuLmNlNjFiM2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3N0YXRlbGVzc2hlbGxvL1N0YXRlbGVzc0hlbGxvVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3N0YXRlbGVzc2hlbGxvL1N0YXRlbGVzc0hlbGxvVGVzdC5qYXZhCkBAIC0zOCwxNyArMzgsMTcgQEAKICAqICAgdW5kZXBsb3kgdGhlIGFwcCB1c2luZyBKU1ItODgKICAqCiAgKiBAYXV0aG9yOiB0anF1aW5uCi0gKiAKKyAqCiAgKi8KIAogcHVibGljIGNsYXNzIFN0YXRlbGVzc0hlbGxvVGVzdCBleHRlbmRzIERlcGxveW1lbnRUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgaW50IG5leHRMb2dJRCA9IDA7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBFeGFtcGxlVGVzdCAqLwogICAgIHB1YmxpYyBTdGF0ZWxlc3NIZWxsb1Rlc3QoKSB7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICpEZXBsb3kgdGhlIGFwcCB1c2luZyBhc2FkbWluIGFuZCBydW4gaXQsIGV4cGVjdGluZyBhIHBvc2l0aXZlIHJlc3VsdC4KICAgICAgKi8KQEAgLTU3LDE2ICs1NywxNiBAQAogICAgICAgICBkZXBsb3koKTsKICAgICAgICAgcnVuUG9zaXRpdmUoImVqYi9zdGF0ZWxlc3NlamIgVGVzdCBhc2FkbWluIGRlcGxveSIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqUmVkZXBsb3kgYW5kIHJ1biBhZnRlciBmaXJzdCB0ZXN0LiAKKyAgICAgKlJlZGVwbG95IGFuZCBydW4gYWZ0ZXIgZmlyc3QgdGVzdC4KICAgICAgKi8KICAgICBAVGVzdChkZXBlbmRzT25NZXRob2RzPXsiZGVwbG95V2l0aEFzYWRtaW5BbmRSdW4ifSkKICAgICBwdWJsaWMgdm9pZCByZWRlcGxveVdpdGhBc2FkbWluQW5kUnVuKCkgewogICAgICAgICByZWRlcGxveSgpOwogICAgICAgICBydW5Qb3NpdGl2ZSgiZWpiL3N0YXRlbGVzc2VqYiBUZXN0IGFzYWRtaW4gcmVkZXBsb3kiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKlVuZGVwbG95IHVzaW5nIGFzYWRtaW4gYWZ0ZXIgZmlyc3QgZGVwbG95bWVudCBhbmQgcmVkZXBsb3ltZW50LgogICAgICAqLwpAQCAtNzQsNyArNzQsNyBAQAogICAgIHB1YmxpYyB2b2lkIHVuZGVwbG95QWZ0ZXJBc2FkbWluUnVucygpIHsKICAgICAgICAgdW5kZXBsb3koKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKkRlcGxveSB3aXRoIEpTUi04OCBhbmQgcnVuLgogICAgICAqLwpAQCAtODMsNyArODMsNyBAQAogICAgICAgICBkZXBsb3lXaXRoSlNSODgoKTsKICAgICAgICAgcnVuUG9zaXRpdmUoImVqYi9zdGF0ZWxlc3NlamIgVGVzdCBqc3I4OCBkZXBsb3kiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKlN0b3AgdXNpbmcgSlNSLTg4IGFuZCBhdHRlbXB0IHRvIHJ1bi4KICAgICAgKi8KQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgc3RvcFdpdGhKU1I4OCgpOwogICAgICAgICBydW5OZWdhdGl2ZSgiZWpiL3N0YXRlbGVzc2VqYiBUZXN0IGpzcjg4IHN0b3BwZWQgc3RhdGUiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKlN0YXJ0IHdpdGggSlNSLTg4IGFuZCBhdHRlbXB0IHRvIHJ1bi4KICAgICAgKi8KQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgICAgICBzdGFydFdpdGhKU1I4OCgpOwogICAgICAgICBydW5Qb3NpdGl2ZSgiZWpiL3N0YXRlbGVzc2VqYiBUZXN0IGpzcjg4IHN0YXJ0ZWQgc3RhdGUiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKlN0b3AsIHJlZGVwbG95LCBhbmQgYXR0ZW1wdCB0byBydW4gKHNob3VsZCBmYWlsKS4KICAgICAgKi8KQEAgLTExNiwzOSArMTE2LDM5IEBACiAgICAgcHVibGljIHZvaWQgdW5zZXR1cCgpIHsKICAgICAgICAgdW5kZXBsb3lBdEVuZCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHVuZGVwbG95QXRFbmQoKSB7CiAgICAgICAgIHVuZGVwbG95V2l0aEpTUjg4KCk7CiAgICAgfQotICAgIAorCiAgICAgcHJvdGVjdGVkIHZvaWQgZGVwbG95V2l0aEpTUjg4KCkgewogICAgICAgICBwcm9qZWN0LmV4ZWN1dGVUYXJnZXQoImRlcGxveS5qc3I4OCIpOwogICAgIH0KLSAgICAKKwogICAgIHByb3RlY3RlZCB2b2lkIHN0YXJ0V2l0aEpTUjg4KCkgewogICAgICAgICBwcm9qZWN0LmV4ZWN1dGVUYXJnZXQoInN0YXJ0Lmpzcjg4Iik7CiAgICAgfQotICAgIAorCiAgICAgcHJvdGVjdGVkIHZvaWQgc3RvcFdpdGhKU1I4OCgpIHsKICAgICAgICAgcHJvamVjdC5leGVjdXRlVGFyZ2V0KCJzdG9wLmpzcjg4Iik7CiAgICAgfQotICAgIAorCiAgICAgcHJvdGVjdGVkIHZvaWQgcmVkZXBsb3lXaXRoSlNSODgoKSB7CiAgICAgICAgIHByb2plY3QuZXhlY3V0ZVRhcmdldCgicmVkZXBsb3kuanNyODgiKTsKICAgICB9Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgdm9pZCB1bmRlcGxveVdpdGhKU1I4OCgpIHsKICAgICAgICAgcHJvamVjdC5leGVjdXRlVGFyZ2V0KCJ1bmRlcGxveS5qc3I4OCIpOwogICAgIH0KLSAgICAKKwogICAgIHByb3RlY3RlZCB2b2lkIHJ1blBvc2l0aXZlKFN0cmluZyB0ZXN0VGl0bGUpIHsKICAgICAgICAgcnVuKHRlc3RUaXRsZSwgInJ1bi5wb3NpdGl2ZSIpOwogICAgIH0KLSAgICAKKwogICAgIHByb3RlY3RlZCB2b2lkIHJ1bk5lZ2F0aXZlKFN0cmluZyB0ZXN0VGl0bGUpIHsKICAgICAgICAgcnVuKHRlc3RUaXRsZSwgInJ1bi5uZWdhdGl2ZSIpOwogICAgIH0KLSAgICAKKwogICAgIHByb3RlY3RlZCB2b2lkIHJ1bihTdHJpbmcgdGVzdFRpdGxlLCBTdHJpbmcgcnVuVGFyZ2V0KSB7CiAgICAgICAgIENhbGxUYXJnZXQgdGFyZ2V0ID0gbmV3IENhbGxUYXJnZXQoKTsKICAgICAgICAgdGFyZ2V0LnNldFByb2plY3QocHJvamVjdCk7CkBAIC0xNjAsNyArMTYwLDcgQEAKICAgICAgICAgbG9nSUQuc2V0VmFsdWUoU3RyaW5nLnZhbHVlT2YobmV4dExvZ0lEKyspKTsKICAgICAgICAgZGVzY3JpcHRpb24uc2V0TmFtZSgiZGVzY3JpcHRpb24iKTsKICAgICAgICAgZGVzY3JpcHRpb24uc2V0VmFsdWUodGVzdFRpdGxlKTsKLSAgICAgICAgCisKICAgICAgICAgdGFyZ2V0LmV4ZWN1dGUoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi9zdGF0ZWxlc3NoZWxsby9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi9zdGF0ZWxlc3NoZWxsby9idWlsZC54bWwKaW5kZXggNGMwNzNlNy4uMGFjYWRlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvc3RhdGVsZXNzaGVsbG8vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3N0YXRlbGVzc2hlbGxvL2J1aWxkLnhtbApAQCAtMjAsMzggKzIwLDM4IEBACiAKIDwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CiBdPgotIAorCiA8cHJvamVjdCBuYW1lPSJzdGF0ZWxlc3NoZWxsbyIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotIAkmY29tbW9uQnVpbGQ7CisgICAgICZjb21tb25CdWlsZDsKICAgICA8cHJvcGVydHkgbmFtZT0iYXJjaGl2ZWRpciIgdmFsdWU9IiR7YnVpbGR9L2FyY2hpdmVzIi8+CiAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iU3RhdGVsZXNzSGVsbG9FamIiLz4KLQk8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgotCQk8cHJvcGVydHkgbmFtZT0icG9ydGFibGUuamFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9zdGF0ZWxlc3NoZWxsb2VqYi1wb3J0YWJsZS5qYXIiLz4KLQkJPHByb3BlcnR5IG5hbWU9ImFsbC5qYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L3N0YXRlbGVzc2hlbGxvZWpiLmphciIvPgotCQk8cHJvcGVydHkgbmFtZT0iZGVwbG95cGxhbi5qYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L3N0YXRlbGVzc2hlbGxvZWpiLXBsYW4uamFyIi8+Ci0JCTxta2RpciBkaXI9IiR7YnVpbGR9IiAvPgotCQk8bWtkaXIgZGlyPSIke2FyY2hpdmVkaXJ9IiAvPgotCTwvdGFyZ2V0PgotCQotCTx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0icHJlcGFyZSI+Ci0JCTxqYXZhYyBzcmNkaXI9InN0YXRlbGVzc2hlbGxvIiBkZXN0ZGlyPSIke2J1aWxkfSI+CisgICAgPHRhcmdldCBuYW1lPSJwcmVwYXJlIiBkZXBlbmRzPSJpbml0Ij4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InBvcnRhYmxlLmphciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vc3RhdGVsZXNzaGVsbG9lamItcG9ydGFibGUuamFyIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhbGwuamFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9zdGF0ZWxlc3NoZWxsb2VqYi5qYXIiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveXBsYW4uamFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9zdGF0ZWxlc3NoZWxsb2VqYi1wbGFuLmphciIvPgorICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KKyAgICAgICAgPG1rZGlyIGRpcj0iJHthcmNoaXZlZGlyfSIgLz4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0icHJlcGFyZSI+CisgICAgICAgIDxqYXZhYyBzcmNkaXI9InN0YXRlbGVzc2hlbGxvIiBkZXN0ZGlyPSIke2J1aWxkfSI+CiAgICAgICAgICAgICAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9ImdmdjMuY2xhc3NwYXRoIi8+Ci0JICAgICAgICA8L2phdmFjPgkJCi0JPC90YXJnZXQ+Ci0JCi0JPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JCTxta2RpciBkaXI9IiR7YnVpbGR9L01FVEEtSU5GIi8+Ci0JCTxjb3B5IGZpbGU9ImVqYi1qYXIueG1sIiB0b2Rpcj0iJHtidWlsZH0vTUVUQS1JTkYiLz4KLQkJPGphciBkZXN0ZmlsZT0iJHtwb3J0YWJsZS5qYXJ9IiBiYXNlZGlyPSIke2J1aWxkfSIgZXhjbHVkZXM9IioqL2FyY2hpdmVzLyoqIi8+Ci0JCTxjb3B5IGZpbGU9InN1bi1lamItamFyLnhtbCIgdG9kaXI9IiR7YnVpbGR9L01FVEEtSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLQkJPGphciBkZXN0ZmlsZT0iJHthbGwuamFyfSIgYmFzZWRpcj0iJHtidWlsZH0iIGV4Y2x1ZGVzPSIqKi9hcmNoaXZlcy8qKiIvPgotCQk8amFyIGRlc3RmaWxlPSIke2RlcGxveXBsYW4uamFyfSI+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0iIGluY2x1ZGVzPSJzdW4tZWpiLWphci54bWwiIGV4Y2x1ZGVzPSIqKi9hcmNoaXZlcy8qKiIvPgotCQk8L2phcj4KLQk8L3RhcmdldD4KLQkKKyAgICAgICAgICAgIDwvamF2YWM+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4KKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0vTUVUQS1JTkYiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iZWpiLWphci54bWwiIHRvZGlyPSIke2J1aWxkfS9NRVRBLUlORiIvPgorICAgICAgICA8amFyIGRlc3RmaWxlPSIke3BvcnRhYmxlLmphcn0iIGJhc2VkaXI9IiR7YnVpbGR9IiBleGNsdWRlcz0iKiovYXJjaGl2ZXMvKioiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0ic3VuLWVqYi1qYXIueG1sIiB0b2Rpcj0iJHtidWlsZH0vTUVUQS1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2FsbC5qYXJ9IiBiYXNlZGlyPSIke2J1aWxkfSIgZXhjbHVkZXM9IioqL2FyY2hpdmVzLyoqIi8+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7ZGVwbG95cGxhbi5qYXJ9Ij4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfSIgaW5jbHVkZXM9InN1bi1lamItamFyLnhtbCIgZXhjbHVkZXM9IioqL2FyY2hpdmVzLyoqIi8+CisgICAgICAgIDwvamFyPgorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kuYXNhZG1pbiIgZGVwZW5kcz0icHJlcGFyZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLmRlcGxveS5hc2FkbWluIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9Ii0tcmV0cmlldmUgJHthcmNoaXZlZGlyfSAtLW5hbWUgJHt0ZXN0TmFtZX0gJHthbGwuamFyfSIvPgpAQCAtMTYwLDcgKzE2MCw3IEBACiAgICAgICAgIDxqYXZhV2l0aFJlc3VsdAogICAgICAgICAgICAgZm9yaz0idHJ1ZSIKICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGp2bT0iJHtKQVZBfSIJCisgICAgICAgICAgICBqdm09IiR7SkFWQX0iCiAgICAgICAgICAgICBjbGFzc25hbWU9InN0YW5kYWxvbmVjbGllbnQuSGVsbG9DbGllbnQiCiAgICAgICAgICAgICBvdXRwdXQ9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIgogICAgICAgICAgICAgcmVzdWx0cHJvcGVydHk9InJlc3VsdCI+CkBAIC0xNzEsNyArMTcxLDcgQEAKICAgICAgICAgICAgIDxjbGFzc3BhdGg+CiAgICAgICAgICAgICAgICAgPHBhdGggcmVmaWQ9ImdmdjMuY2xhc3NwYXRoIi8+CiAgICAgICAgICAgICAgICAgPHBhdGggbG9jYXRpb249IiR7YnVpbGR9Ii8+Ci0JCTxwYXRoIGxvY2F0aW9uPSIke2FyY2hpdmVkaXJ9L1N0YXRlbGVzc0hlbGxvRWpiQ2xpZW50LmphciIvPgorICAgICAgICA8cGF0aCBsb2NhdGlvbj0iJHthcmNoaXZlZGlyfS9TdGF0ZWxlc3NIZWxsb0VqYkNsaWVudC5qYXIiLz4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogCiAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXJnLmxpc3R9Ii8+CkBAIC0xODEsOCArMTgxLDggQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXN1bHQiIHZhbHVlPSIke3Jlc3VsdH0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2ciIHZhbHVlPSIke2J1aWxkfS8ke2xvZy5pZH0ub3V0cHV0LmxvZyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPC90YXJnZXQ+Ci0JCQkKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzc2VtYmxlIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LmFzYWRtaW4iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3N0YXRlbGVzc2hlbGxvL3N0YW5kYWxvbmVjbGllbnQvSGVsbG9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3N0YXRlbGVzc2hlbGxvL3N0YW5kYWxvbmVjbGllbnQvSGVsbG9DbGllbnQuamF2YQppbmRleCA5ODJlODFmLi41YWMzNjUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi9zdGF0ZWxlc3NoZWxsby9zdGFuZGFsb25lY2xpZW50L0hlbGxvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvc3RhdGVsZXNzaGVsbG8vc3RhbmRhbG9uZWNsaWVudC9IZWxsb0NsaWVudC5qYXZhCkBAIC0yOCwxMSArMjgsMTEgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAotCWJvb2xlYW4gdGVzdFBvc2l0aXZlID0gKEJvb2xlYW4udmFsdWVPZihhcmdzWzBdKSkuYm9vbGVhblZhbHVlKCk7Ci0JaWYodGVzdFBvc2l0aXZlKQotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3QgZXhwZWN0cyBzdWNjZXNzZnVsIHJlc3VsdCIpOwotCWVsc2UKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0IGV4cGVjdGVkIHRvIGZhaWwiKTsKKyAgICBib29sZWFuIHRlc3RQb3NpdGl2ZSA9IChCb29sZWFuLnZhbHVlT2YoYXJnc1swXSkpLmJvb2xlYW5WYWx1ZSgpOworICAgIGlmKHRlc3RQb3NpdGl2ZSkKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0IGV4cGVjdHMgc3VjY2Vzc2Z1bCByZXN1bHQiKTsKKyAgICBlbHNlCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBleHBlY3RlZCB0byBmYWlsIik7CiAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKQEAgLTc1LDI5ICs3NSwyOSBAQAogCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGYWlsdXJlISAgQ2F1Z2h0IHVuYXNrZWQgZm9yIEV4Y2VwdGlvbiIpOwotCQkgICAgU3lzdGVtLmV4aXQoLTEpOworICAgICAgICAgICAgU3lzdGVtLmV4aXQoLTEpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigKICAgICAgICAgICAgICAgICAiQ2xpZW50IGlzIG5vdyB0cnlpbmcgdG8gcmVtb3ZlIHRoZSBzZXNzaW9uIGJlYW5cbiIpOwogICAgICAgICAgICAgaHIucmVtb3ZlKCk7CiAgICAgICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBuZSkgewotCSAgICBpZih0ZXN0UG9zaXRpdmUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgZXhjZXB0aW9uIHdoaWxlIGluaXRpYWxpemluZyBjb250ZXh0IDogIiArCi0JCQkJICAgbmUuZ2V0TWVzc2FnZSgpICsgIiBcbiIpOwotCQlTeXN0ZW0uZXhpdCgtMSk7Ci0JICAgIH0gZWxzZSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiUmVjZCBleGNlcHRpb24gYXMgZXhwZWN0ZWQiKTsKLQkgICAgfQorICAgICAgICBpZih0ZXN0UG9zaXRpdmUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgZXhjZXB0aW9uIHdoaWxlIGluaXRpYWxpemluZyBjb250ZXh0IDogIiArCisgICAgICAgICAgICAgICAgICAgbmUuZ2V0TWVzc2FnZSgpICsgIiBcbiIpOworICAgICAgICBTeXN0ZW0uZXhpdCgtMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZCBleGNlcHRpb24gYXMgZXhwZWN0ZWQiKTsKKyAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gcmUpIHsKLQkgICAgaWYodGVzdFBvc2l0aXZlKSB7Ci0JCXJlLnByaW50U3RhY2tUcmFjZSgpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oICJTZXNzaW9uIGJlYW5zIGNvdWxkIG5vdCBiZSByZW1vdmVkIGJ5IHRoZSBjbGllbnQuXG4iKTsKLQkJU3lzdGVtLmV4aXQoLTEpOwotCSAgICB9IGVsc2UgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2QgZXhjZXB0aW9uIGFzIGV4cGVjdGVkIik7Ci0JICAgIH0KLQl9CisgICAgICAgIGlmKHRlc3RQb3NpdGl2ZSkgeworICAgICAgICByZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiU2Vzc2lvbiBiZWFucyBjb3VsZCBub3QgYmUgcmVtb3ZlZCBieSB0aGUgY2xpZW50LlxuIik7CisgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNkIGV4Y2VwdGlvbiBhcyBleHBlY3RlZCIpOworICAgICAgICB9CisgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oCiAgICAgICAgICAgICAiU2Vzc2lvbiBiZWFuIHdhcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZCBieSB0aGUgY2xpZW50LlxuIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvc3RhdGVsZXNzaGVsbG8vc3RhdGVsZXNzaGVsbG8vU3RhdGVsZXNzaGVsbG9FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3N0YXRlbGVzc2hlbGxvL3N0YXRlbGVzc2hlbGxvL1N0YXRlbGVzc2hlbGxvRUpCLmphdmEKaW5kZXggZjRiNjExZC4uZWMzZjY5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvc3RhdGVsZXNzaGVsbG8vc3RhdGVsZXNzaGVsbG8vU3RhdGVsZXNzaGVsbG9FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi9zdGF0ZWxlc3NoZWxsby9zdGF0ZWxlc3NoZWxsby9TdGF0ZWxlc3NoZWxsb0VKQi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTI2LDExICsyNiwxMSBAQAogCiBwdWJsaWMgY2xhc3MgU3RhdGVsZXNzaGVsbG9FSkIgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7CiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYzsKLSAgICAKKwogICAgIHB1YmxpYyBTdGF0ZWxlc3NoZWxsb0VKQigpe30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJDcmVhdGUgISEiKTsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBpc1N0YXRlbGVzc2hlbGxvKCkgdGhyb3dzIEVKQkV4Y2VwdGlvbiB7CkBAIC01Miw0NyArNTIsNDcgQEAKIAogCiAKLQlEb3VibGUgZCA9IG51bGw7Ci0JU3RyaW5nIG5hbWUgPSBudWxsOwotCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCJTdGF0ZWxlc3NoZWxsbyBFSkIgLSBjaGVja2VkIGVudmlyb25tZW50IHByb3BlcnRpZXMgZm9yIHVzZXIgIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZWxlc3NoZWxsb0VKQiBpcyBzYXlpbmcgaGVsbG8gdG8gdXNlclxuIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJOb3cgZ29pbmcgZm9yd2FyZCB3aXRoIHJlYWRpbmcgdGhlIGVudmlyb25tZW50IHByb3BlcnRpZXNcbiIpOworICAgIERvdWJsZSBkID0gbnVsbDsKKyAgICBTdHJpbmcgbmFtZSA9IG51bGw7CisgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoIlN0YXRlbGVzc2hlbGxvIEVKQiAtIGNoZWNrZWQgZW52aXJvbm1lbnQgcHJvcGVydGllcyBmb3IgdXNlciAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbGVzc2hlbGxvRUpCIGlzIHNheWluZyBoZWxsbyB0byB1c2VyXG4iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vdyBnb2luZyBmb3J3YXJkIHdpdGggcmVhZGluZyB0aGUgZW52aXJvbm1lbnQgcHJvcGVydGllc1xuIik7CiAKLQl0cnkgewotCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBuYW1lID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3VzZXIiKTsKLQkgICAgYnVmZmVyLmFwcGVuZChuYW1lKTsKLQkgICAgYnVmZmVyLmFwcGVuZCgiXG5hbmQgZm9yIG51bWJlciB3aGljaCBpcyA9ICIpOwotCSAgICBkID0gKERvdWJsZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L251bWJlciIpOwotCSAgICBidWZmZXIuYXBwZW5kKGQpOwotCSAgICBidWZmZXIuYXBwZW5kKCJcbiIpOwotCX0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICB0cnkgeworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBuYW1lID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3VzZXIiKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZChuYW1lKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgiXG5hbmQgZm9yIG51bWJlciB3aGljaCBpcyA9ICIpOworICAgICAgICBkID0gKERvdWJsZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L251bWJlciIpOworICAgICAgICBidWZmZXIuYXBwZW5kKGQpOworICAgICAgICBidWZmZXIuYXBwZW5kKCJcbiIpOworICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQl9Ci0JaWYoZCA9PSBudWxsKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIldyb25nIHZhbHVlIGZvciBlbnZpcm9ubWVudCBwcm9wZXJ0eSIpOwotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oYnVmZmVyKTsKKyAgICB9CisgICAgaWYoZCA9PSBudWxsKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIldyb25nIHZhbHVlIGZvciBlbnZpcm9ubWVudCBwcm9wZXJ0eSIpOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oYnVmZmVyKTsKICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoYnVmZmVyKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXJEZWZpbmVkRXhjZXB0aW9uKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgU3RhdGVsZXNzaGVsbG9FeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRocm93aW5nIGEgVXNlciBEZWZpbmVkIEV4Y2VwdGlvbiIpOwogICAgICAgICB0aHJvdyBuZXcgU3RhdGVsZXNzaGVsbG9FeGNlcHRpb24oInRlc3QgZXhjZXB0aW9uIik7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQorCiAgICAgICAgIHRoaXMuc2MgPSBzYzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvc3RhdGVsZXNzaGVsbG8vc3RhdGVsZXNzaGVsbG8vU3RhdGVsZXNzaGVsbG9FeGNlcHRpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3N0YXRlbGVzc2hlbGxvL3N0YXRlbGVzc2hlbGxvL1N0YXRlbGVzc2hlbGxvRXhjZXB0aW9uLmphdmEKaW5kZXggOTQzZWIzOS4uYjg4MjU3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvc3RhdGVsZXNzaGVsbG8vc3RhdGVsZXNzaGVsbG8vU3RhdGVsZXNzaGVsbG9FeGNlcHRpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi9zdGF0ZWxlc3NoZWxsby9zdGF0ZWxlc3NoZWxsby9TdGF0ZWxlc3NoZWxsb0V4Y2VwdGlvbi5qYXZhCkBAIC0xOSw5ICsxOSw5IEBACiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCiBwdWJsaWMgY2xhc3MgU3RhdGVsZXNzaGVsbG9FeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24gewotICAgIAorCiAgICAgcHVibGljIFN0YXRlbGVzc2hlbGxvRXhjZXB0aW9uKFN0cmluZyBzdHIpIHsKLQlzdXBlcihzdHIpOworICAgIHN1cGVyKHN0cik7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi93ZWJzZXJ2aWNlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3dlYnNlcnZpY2UvYnVpbGQueG1sCmluZGV4IDU1MDE4YzcuLmI5ZjA1MTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3dlYnNlcnZpY2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3dlYnNlcnZpY2UvYnVpbGQueG1sCkBAIC0yNSwzNiArMjUsMzYgQEAKIAogICAgICZjb21tb25CdWlsZDsKICAgICA8cHJvcGVydHkgbmFtZT0iYXJjaGl2ZWRpciIgdmFsdWU9IiR7YnVpbGR9L2FyY2hpdmVzIi8+Ci0JCisKICAgICA8cHJvcGVydHkgbmFtZT0idGVzdE5hbWUiIHZhbHVlPSJTYXlIZWxsb1dTIi8+CiAgICAgPHRhcmdldCBuYW1lPSJwcmVwYXJlIiBkZXBlbmRzPSJpbml0Ij4KLQkJPHByb3BlcnR5IG5hbWU9IndzZGwiIHZhbHVlPSIke2J1aWxkfS9NRVRBLUlORi93c2RsIi8+Ci0JCTxta2RpciBkaXI9IiR7YnVpbGR9IiAvPgotCQk8bWtkaXIgZGlyPSIke3dzZGx9Ii8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJwb3J0YWJsZS5qYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L3NheWhlbGxvLXBvcnRhYmxlLmphciIvPgotCQk8cHJvcGVydHkgbmFtZT0iYWxsLmphciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vc2F5aGVsbG8uamFyIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJkZXBsb3lwbGFuLmphciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vc2F5aGVsbG8tZGVwbG95cGxhbi5qYXIiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9IndzZGwiIHZhbHVlPSIke2J1aWxkfS9NRVRBLUlORi93c2RsIi8+CisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9IiAvPgorICAgICAgICA8bWtkaXIgZGlyPSIke3dzZGx9Ii8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwb3J0YWJsZS5qYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L3NheWhlbGxvLXBvcnRhYmxlLmphciIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iYWxsLmphciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vc2F5aGVsbG8uamFyIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3lwbGFuLmphciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vc2F5aGVsbG8tZGVwbG95cGxhbi5qYXIiLz4KICAgICA8L3RhcmdldD4KLQkKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0icHJlcGFyZSI+Ci0JCTxqYXZhYyBzcmNkaXI9ImhlbGxvc2VydmljZSIgZGVzdGRpcj0iJHtidWlsZH0iPgorICAgICAgICA8amF2YWMgc3JjZGlyPSJoZWxsb3NlcnZpY2UiIGRlc3RkaXI9IiR7YnVpbGR9Ij4KICAgICAgICAgICAgICAgICAgPGNsYXNzcGF0aCByZWZpZD0iZ2Z2My5jbGFzc3BhdGgiLz4KICAgICAgICAgICAgICAgICA8L2phdmFjPgotCQk8ZWNobyBtZXNzYWdlPSJpbnZva2luZyB3c2NvbXBpbGUgdG8gZ2VuZXJhdGUgd3NkbCBmaWxlIi8+Ci0JCTxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSI+Ci0JCQk8YXJnIGxpbmU9Ii1kZWZpbmUgY29uZmlnLWludGVyZmFjZS54bWwgLWQgJHtidWlsZH0gLW5kICR7d3NkbH0gLWNsYXNzcGF0aCAke2J1aWxkfSAtbWFwcGluZyAke2J1aWxkfS9tYXBwaW5nLnhtbCIvPgotCSAJPC9leGVjPgkJCQkJCisgICAgICAgIDxlY2hvIG1lc3NhZ2U9Imludm9raW5nIHdzY29tcGlsZSB0byBnZW5lcmF0ZSB3c2RsIGZpbGUiLz4KKyAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9Ij4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iLWRlZmluZSBjb25maWctaW50ZXJmYWNlLnhtbCAtZCAke2J1aWxkfSAtbmQgJHt3c2RsfSAtY2xhc3NwYXRoICR7YnVpbGR9IC1tYXBwaW5nICR7YnVpbGR9L21hcHBpbmcueG1sIi8+CisgICAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+Ci0JCisKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4KLQkJPGNvcHkgZmlsZT0iZWpiLWphci54bWwiIHRvZGlyPSIke2J1aWxkfS9NRVRBLUlORiIvPgotCQk8Y29weSBmaWxlPSJ3ZWJzZXJ2aWNlcy54bWwiIHRvZGlyPSIke2J1aWxkfS9NRVRBLUlORiIvPgotCQk8amFyIGRlc3RmaWxlPSIke3BvcnRhYmxlLmphcn0iIGJhc2VkaXI9IiR7YnVpbGR9Ii8+Ci0JCTxjb3B5IGZpbGU9InN1bi1lamItamFyLnhtbCIgdG9kaXI9IiR7YnVpbGR9L01FVEEtSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLQkJPGphciBkZXN0ZmlsZT0iJHthbGwuamFyfSIgYmFzZWRpcj0iJHtidWlsZH0iLz4KLQkJPGphciBkZXN0ZmlsZT0iJHtkZXBsb3lwbGFuLmphcn0iPgotCQkgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfSIgaW5jbHVkZXM9InN1bi1lamItamFyLnhtbCIvPgotCQk8L2phcj4KKyAgICAgICAgPGNvcHkgZmlsZT0iZWpiLWphci54bWwiIHRvZGlyPSIke2J1aWxkfS9NRVRBLUlORiIvPgorICAgICAgICA8Y29weSBmaWxlPSJ3ZWJzZXJ2aWNlcy54bWwiIHRvZGlyPSIke2J1aWxkfS9NRVRBLUlORiIvPgorICAgICAgICA8amFyIGRlc3RmaWxlPSIke3BvcnRhYmxlLmphcn0iIGJhc2VkaXI9IiR7YnVpbGR9Ii8+CisgICAgICAgIDxjb3B5IGZpbGU9InN1bi1lamItamFyLnhtbCIgdG9kaXI9IiR7YnVpbGR9L01FVEEtSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthbGwuamFyfSIgYmFzZWRpcj0iJHtidWlsZH0iLz4KKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtkZXBsb3lwbGFuLmphcn0iPgorICAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfSIgaW5jbHVkZXM9InN1bi1lamItamFyLnhtbCIvPgorICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LmFzYWRtaW4iIGRlcGVuZHM9InByZXBhcmUiPgpAQCAtNjIsMTAgKzYyLDEwIEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSItLW5hbWUgJHt0ZXN0TmFtZX0gJHthbGwuamFyfSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxlY2hvIG1lc3NhZ2U9IkNyZWF0ZSBjbGllbnQgd2Vic2VydmljZXMgYXJ0aWZhY3RzIi8+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9Ij4KLQkgICAgPGFyZyBsaW5lPSItZ2VuOmNsaWVudCAta2VlcCAtZCAke2J1aWxkfSAtY2xhc3NwYXRoICR7YnVpbGR9IGNvbmZpZy1pbnRlcmZhY2UueG1sIi8+Ci0JPC9leGVjPgorICAgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0ZSBjbGllbnQgd2Vic2VydmljZXMgYXJ0aWZhY3RzIi8+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9Ij4KKyAgICAgICAgPGFyZyBsaW5lPSItZ2VuOmNsaWVudCAta2VlcCAtZCAke2J1aWxkfSAtY2xhc3NwYXRoICR7YnVpbGR9IGNvbmZpZy1pbnRlcmZhY2UueG1sIi8+CisgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZWRlcGxveS5hc2FkbWluIiBkZXBlbmRzPSJwcmVwYXJlIj4KQEAgLTczLDEwICs3MywxMCBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0iLS1uYW1lICR7dGVzdE5hbWV9ICR7YWxsLmphcn0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8ZWNobyBtZXNzYWdlPSJDcmVhdGUgY2xpZW50IHdlYnNlcnZpY2VzIGFydGlmYWN0cyIvPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSI+Ci0JICAgIDxhcmcgbGluZT0iLWdlbjpjbGllbnQgLWtlZXAgLWQgJHtidWlsZH0gLWNsYXNzcGF0aCAke2J1aWxkfSBjb25maWctaW50ZXJmYWNlLnhtbCIvPgotCTwvZXhlYz4KKyAgICA8ZWNobyBtZXNzYWdlPSJDcmVhdGUgY2xpZW50IHdlYnNlcnZpY2VzIGFydGlmYWN0cyIvPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSI+CisgICAgICAgIDxhcmcgbGluZT0iLWdlbjpjbGllbnQgLWtlZXAgLWQgJHtidWlsZH0gLWNsYXNzcGF0aCAke2J1aWxkfSBjb25maWctaW50ZXJmYWNlLnhtbCIvPgorICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kuYXNhZG1pbiI+CkBAIC0xNDksNyArMTQ5LDcgQEAKICAgICAgICAgPGphdmFXaXRoUmVzdWx0CiAgICAgICAgICAgICBmb3JrPSJ0cnVlIgogICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAganZtPSIke0pBVkF9IgkKKyAgICAgICAgICAgIGp2bT0iJHtKQVZBfSIKICAgICAgICAgICAgIGNsYXNzbmFtZT0ic3RhdGljc3R1YmNsaWVudC5TYXlIZWxsb0NsaWVudCIKICAgICAgICAgICAgIG91dHB1dD0iJHtidWlsZH0vJHtsb2cuaWR9Lm91dHB1dC5sb2ciCiAgICAgICAgICAgICByZXN1bHRwcm9wZXJ0eT0icmVzdWx0Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3dlYnNlcnZpY2UvY29uZmlnLWludGVyZmFjZS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi93ZWJzZXJ2aWNlL2NvbmZpZy1pbnRlcmZhY2UueG1sCmluZGV4IGE5OWQ5YzAuLjg5NDc4OWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3dlYnNlcnZpY2UvY29uZmlnLWludGVyZmFjZS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvd2Vic2VydmljZS9jb25maWctaW50ZXJmYWNlLnhtbApAQCAtMTksMTEgKzE5LDExIEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDxzZXJ2aWNlIAotICAgICAgbmFtZT0iU2F5SGVsbG9TZXJ2aWNlIiAKLSAgICAgIHRhcmdldE5hbWVzcGFjZT0idXJuOkRlcGxveW1lbnRXZWJTZXJ2aWNlVGVzdCIgCi0gICAgICB0eXBlTmFtZXNwYWNlPSJ1cm46RGVwbG95bWVudFdlYlNlcnZpY2VUZXN0IiAKKyAgPHNlcnZpY2UKKyAgICAgIG5hbWU9IlNheUhlbGxvU2VydmljZSIKKyAgICAgIHRhcmdldE5hbWVzcGFjZT0idXJuOkRlcGxveW1lbnRXZWJTZXJ2aWNlVGVzdCIKKyAgICAgIHR5cGVOYW1lc3BhY2U9InVybjpEZXBsb3ltZW50V2ViU2VydmljZVRlc3QiCiAgICAgICBwYWNrYWdlTmFtZT0iaGVsbG9zZXJ2aWNlIj4KICAgICAgIDxpbnRlcmZhY2UgbmFtZT0iaGVsbG9zZXJ2aWNlLlNheUhlbGxvIi8+CiAgIDwvc2VydmljZT4KLTwvY29uZmlndXJhdGlvbj4gCis8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi93ZWJzZXJ2aWNlL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvd2Vic2VydmljZS9lamItamFyLnhtbAppbmRleCBmYTE4ZWRlLi5mMmYxNWNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi93ZWJzZXJ2aWNlL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3dlYnNlcnZpY2UvZWpiLWphci54bWwKQEAgLTE5LDE0ICsxOSwxNCBAQAogCiA8ZWpiLWphciB2ZXJzaW9uPSIyLjEiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS9lamItamFyXzJfMS54c2QiPgogCi0JPGRpc3BsYXktbmFtZT5TYXlIZWxsb0pBUjwvZGlzcGxheS1uYW1lPgotCTxlbnRlcnByaXNlLWJlYW5zPgotCQk8c2Vzc2lvbj4KLQkJCTxlamItbmFtZT5TYXlIZWxsb0VKQjwvZWpiLW5hbWU+Ci0JCQk8c2VydmljZS1lbmRwb2ludD5oZWxsb3NlcnZpY2UuU2F5SGVsbG88L3NlcnZpY2UtZW5kcG9pbnQ+Ci0JCQk8ZWpiLWNsYXNzPmhlbGxvc2VydmljZS5TYXlIZWxsb0VKQjwvZWpiLWNsYXNzPgotCQkJPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT4KLQkJCTx0cmFuc2FjdGlvbi10eXBlPkNvbnRhaW5lcjwvdHJhbnNhY3Rpb24tdHlwZT4KLQkJPC9zZXNzaW9uPgotCTwvZW50ZXJwcmlzZS1iZWFucz4KKyAgICA8ZGlzcGxheS1uYW1lPlNheUhlbGxvSkFSPC9kaXNwbGF5LW5hbWU+CisgICAgPGVudGVycHJpc2UtYmVhbnM+CisgICAgICAgIDxzZXNzaW9uPgorICAgICAgICAgICAgPGVqYi1uYW1lPlNheUhlbGxvRUpCPC9lamItbmFtZT4KKyAgICAgICAgICAgIDxzZXJ2aWNlLWVuZHBvaW50PmhlbGxvc2VydmljZS5TYXlIZWxsbzwvc2VydmljZS1lbmRwb2ludD4KKyAgICAgICAgICAgIDxlamItY2xhc3M+aGVsbG9zZXJ2aWNlLlNheUhlbGxvRUpCPC9lamItY2xhc3M+CisgICAgICAgICAgICA8c2Vzc2lvbi10eXBlPlN0YXRlbGVzczwvc2Vzc2lvbi10eXBlPgorICAgICAgICAgICAgPHRyYW5zYWN0aW9uLXR5cGU+Q29udGFpbmVyPC90cmFuc2FjdGlvbi10eXBlPgorICAgICAgICA8L3Nlc3Npb24+CisgICAgPC9lbnRlcnByaXNlLWJlYW5zPgogPC9lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvd2Vic2VydmljZS9oZWxsb3NlcnZpY2UvU2F5SGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3dlYnNlcnZpY2UvaGVsbG9zZXJ2aWNlL1NheUhlbGxvLmphdmEKaW5kZXggMzRkMGI5YS4uYjgyYzkxMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvd2Vic2VydmljZS9oZWxsb3NlcnZpY2UvU2F5SGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi93ZWJzZXJ2aWNlL2hlbGxvc2VydmljZS9TYXlIZWxsby5qYXZhCkBAIC0xNSwxMSArMTUsMTEgQEAKICAqLwogCiBwYWNrYWdlIGhlbGxvc2VydmljZTsKLSAKKwogaW1wb3J0IGphdmEucm1pLlJlbW90ZTsKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIHB1YmxpYyBpbnRlcmZhY2UgU2F5SGVsbG8gIGV4dGVuZHMgUmVtb3RlIHsKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyBuYW1lKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIG5hbWUpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiB9Ci0gIAkKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvd2Vic2VydmljZS9oZWxsb3NlcnZpY2UvU2F5SGVsbG9FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3dlYnNlcnZpY2UvaGVsbG9zZXJ2aWNlL1NheUhlbGxvRUpCLmphdmEKaW5kZXggNDZlMDhkYy4uMmNlYmM4OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvd2Vic2VydmljZS9oZWxsb3NlcnZpY2UvU2F5SGVsbG9FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi93ZWJzZXJ2aWNlL2hlbGxvc2VydmljZS9TYXlIZWxsb0VKQi5qYXZhCkBAIC0yMSwyMSArMjEsMjEgQEAKIAogcHVibGljIGNsYXNzIFNheUhlbGxvRUpCIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewogCi0JcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYzsKKyAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjOwogCi0JcHVibGljIFNheUhlbGxvRUpCKCkge30KKyAgICBwdWJsaWMgU2F5SGVsbG9FSkIoKSB7fQogCi0JcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7fQorICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24ge30KIAotCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHMpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCQlyZXR1cm4gIkhlbGxvIEVKQiByZXR1cm5zIHlvdXIgSGVsbG8gOiAiICsgczsKLQl9CisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgcykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiAiSGVsbG8gRUpCIHJldHVybnMgeW91ciBIZWxsbyA6ICIgKyBzOworICAgIH0KIAotCXB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JCQkJdGhpcy5zYyA9IHNjOwotCX0KKyAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgeworICAgICAgICAgICAgICAgIHRoaXMuc2MgPSBzYzsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9Ci0JcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotCXB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9Ci19IAorICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KKyAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9CisgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3dlYnNlcnZpY2Uvc3RhdGljc3R1YmNsaWVudC9TYXlIZWxsb0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvd2Vic2VydmljZS9zdGF0aWNzdHViY2xpZW50L1NheUhlbGxvQ2xpZW50LmphdmEKaW5kZXggNDZjNDcyYS4uNTU2MDFmYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvd2Vic2VydmljZS9zdGF0aWNzdHViY2xpZW50L1NheUhlbGxvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvd2Vic2VydmljZS9zdGF0aWNzdHViY2xpZW50L1NheUhlbGxvQ2xpZW50LmphdmEKQEAgLTI0LDI1ICsyNCwyNSBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVuZHBvaW50IGFkZHJlc3MgPSAiICsgYXJnc1swXSk7Ci0JCWJvb2xlYW4gdGVzdFBvc2l0aXZlID0gKEJvb2xlYW4udmFsdWVPZihhcmdzWzFdKSkuYm9vbGVhblZhbHVlKCk7CisgICAgICAgIGJvb2xlYW4gdGVzdFBvc2l0aXZlID0gKEJvb2xlYW4udmFsdWVPZihhcmdzWzFdKSkuYm9vbGVhblZhbHVlKCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTdHViIHN0dWIgPSBjcmVhdGVQcm94eSgpOwogICAgICAgICAgICAgc3R1Yi5fc2V0UHJvcGVydHkKLSAgICAgICAgICAgICAgKGphdmF4LnhtbC5ycGMuU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLCBhcmdzWzBdKTsgCi0JCQlTYXlIZWxsbyBoZWxsbyA9IChTYXlIZWxsbylzdHViOworICAgICAgICAgICAgICAoamF2YXgueG1sLnJwYy5TdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksIGFyZ3NbMF0pOworICAgICAgICAgICAgU2F5SGVsbG8gaGVsbG8gPSAoU2F5SGVsbG8pc3R1YjsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihoZWxsby5zYXlIZWxsbygiSGkgVGhlcmUgZWpiIGVuZHBvaW50ICEhISIpKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIAlpZih0ZXN0UG9zaXRpdmUpIHsKLQkJCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQlTeXN0ZW0uZXhpdCgtMSk7Ci0JICAgIAl9IGVsc2UgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIHJlY2QgYXMgZXhwZWN0ZWQiKTsKLQkgICAgCX0KLQkJfQotCQlTeXN0ZW0uZXhpdCgwKTsKLSAgICB9ICAgIAorICAgICAgICAgICAgaWYodGVzdFBvc2l0aXZlKSB7CisgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICAgICAgU3lzdGVtLmV4aXQoLTEpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiByZWNkIGFzIGV4cGVjdGVkIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgU3lzdGVtLmV4aXQoMCk7CisgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3R1YiBjcmVhdGVQcm94eSgpIHsKICAgICAgICAgcmV0dXJuIChTdHViKSAobmV3IFNheUhlbGxvU2VydmljZV9JbXBsKCkuZ2V0U2F5SGVsbG9Qb3J0KCkpOwogICAgIH0KLX0gCit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi93ZWJzZXJ2aWNlL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3dlYnNlcnZpY2Uvc3VuLWVqYi1qYXIueG1sCmluZGV4IDI1MGZkNjEuLjJmZjhhYmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3dlYnNlcnZpY2Uvc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3dlYnNlcnZpY2Uvc3VuLWVqYi1qYXIueG1sCkBAIC0xOSwxNSArMTksMTUgQEAKIC0tPgogCiA8c3VuLWVqYi1qYXI+Ci0JPGVudGVycHJpc2UtYmVhbnM+Ci0JCTxuYW1lPlNheUhlbGxvSkFSPC9uYW1lPgotCQk8ZWpiPgotCQkJPGVqYi1uYW1lPlNheUhlbGxvRUpCPC9lamItbmFtZT4KLQkJCTxqbmRpLW5hbWU+U2F5SGVsbG9FSkI8L2puZGktbmFtZT4KLQkJCTx3ZWJzZXJ2aWNlLWVuZHBvaW50PgotCQkJCTxwb3J0LWNvbXBvbmVudC1uYW1lPlNheUhlbGxvUG9ydDwvcG9ydC1jb21wb25lbnQtbmFtZT4KLQkJCQk8ZW5kcG9pbnQtYWRkcmVzcy11cmk+ZWpiL3NheWhlbGxvPC9lbmRwb2ludC1hZGRyZXNzLXVyaT4KLQkJCTwvd2Vic2VydmljZS1lbmRwb2ludD4KLQkJPC9lamI+Ci0JPC9lbnRlcnByaXNlLWJlYW5zPgorICAgIDxlbnRlcnByaXNlLWJlYW5zPgorICAgICAgICA8bmFtZT5TYXlIZWxsb0pBUjwvbmFtZT4KKyAgICAgICAgPGVqYj4KKyAgICAgICAgICAgIDxlamItbmFtZT5TYXlIZWxsb0VKQjwvZWpiLW5hbWU+CisgICAgICAgICAgICA8am5kaS1uYW1lPlNheUhlbGxvRUpCPC9qbmRpLW5hbWU+CisgICAgICAgICAgICA8d2Vic2VydmljZS1lbmRwb2ludD4KKyAgICAgICAgICAgICAgICA8cG9ydC1jb21wb25lbnQtbmFtZT5TYXlIZWxsb1BvcnQ8L3BvcnQtY29tcG9uZW50LW5hbWU+CisgICAgICAgICAgICAgICAgPGVuZHBvaW50LWFkZHJlc3MtdXJpPmVqYi9zYXloZWxsbzwvZW5kcG9pbnQtYWRkcmVzcy11cmk+CisgICAgICAgICAgICA8L3dlYnNlcnZpY2UtZW5kcG9pbnQ+CisgICAgICAgIDwvZWpiPgorICAgIDwvZW50ZXJwcmlzZS1iZWFucz4KIDwvc3VuLWVqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvYnVpbGQueG1sCmluZGV4IGViNjhhOWEuLjk4MmFlNGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvYnVpbGQueG1sCkBAIC0yMywxNCArMjMsMTQgQEAKIAogPHByb2plY3QgbmFtZT0iZWpiMzAiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLQkmY29tbW9uQnVpbGQ7CisgICAgJmNvbW1vbkJ1aWxkOwogCi0JPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+Ci0JCTxhbnQgZGlyPSJlYXIiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vZWFyIi8+Ci0JCTwvYW50PgotCQk8YW50IGRpcj0id2FyIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3dhciIvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KKyAgICAgICAgPGFudCBkaXI9ImVhciIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9lYXIiLz4KKyAgICAgICAgPC9hbnQ+CisgICAgICAgIDxhbnQgZGlyPSJ3YXIiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vd2FyIi8+CisgICAgICAgIDwvYW50PgorICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvYnVpbGQueG1sCmluZGV4IDk3ZjkxMTUuLjM3ZWUwN2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9idWlsZC54bWwKQEAgLTIzLDI4ICsyMywyOCBAQAogCiA8cHJvamVjdCBuYW1lPSJlamIzMCIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotCSZjb21tb25CdWlsZDsKKyAgICAmY29tbW9uQnVpbGQ7CiAKLQk8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KLQkJPGFudCBkaXI9InNlc3Npb24iIHRhcmdldD0icHJpdmF0ZS1hbGwiPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vc2Vzc2lvbiIvPgotCQk8L2FudD4KLQkJPGFudCBkaXI9InNlc3Npb24yIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3Nlc3Npb24yIi8+Ci0JCTwvYW50PgotCQk8YW50IGRpcj0ibWRiIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L21kYiIvPgotCQk8L2FudD4KKyAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KKyAgICAgICAgPGFudCBkaXI9InNlc3Npb24iIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vc2Vzc2lvbiIvPgorICAgICAgICA8L2FudD4KKyAgICAgICAgPGFudCBkaXI9InNlc3Npb24yIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3Nlc3Npb24yIi8+CisgICAgICAgIDwvYW50PgorICAgICAgICA8YW50IGRpcj0ibWRiIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L21kYiIvPgorICAgICAgICA8L2FudD4KIDwhLS0KLQkJPGFudCBkaXI9InNlc3Npb24zIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3Nlc3Npb24zIi8+Ci0JCTwvYW50PgorICAgICAgICA8YW50IGRpcj0ic2Vzc2lvbjMiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vc2Vzc2lvbjMiLz4KKyAgICAgICAgPC9hbnQ+CiAtLT4KLQkJPGFudCBkaXI9InNlY3VyaXR5IiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3NlY3VyaXR5Ii8+Ci0JCTwvYW50PgotCQk8YW50IGRpcj0ieG1sb3ZlcnJpZGUiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0veG1sb3ZlcnJpZGUiLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+CisgICAgICAgIDxhbnQgZGlyPSJzZWN1cml0eSIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9zZWN1cml0eSIvPgorICAgICAgICA8L2FudD4KKyAgICAgICAgPGFudCBkaXI9InhtbG92ZXJyaWRlIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3htbG92ZXJyaWRlIi8+CisgICAgICAgIDwvYW50PgorICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvbWRiL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL21kYi9idWlsZC54bWwKaW5kZXggNDI4NjgzYy4uYmIxOWI4OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvbWRiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9tZGIvYnVpbGQueG1sCkBAIC0yMywxMSArMjMsMTEgQEAKIAogPHByb2plY3QgbmFtZT0ibWRiIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0JJmNvbW1vbkJ1aWxkOworICAgICZjb21tb25CdWlsZDsKIAotCTx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiIGlmPSJQRSI+Ci0JCTxhbnQgZGlyPSJ3ZWJjbGllbnQiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vd2ViY2xpZW50Ii8+Ci0JCTwvYW50PgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiIGlmPSJQRSI+CisgICAgICAgIDxhbnQgZGlyPSJ3ZWJjbGllbnQiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vd2ViY2xpZW50Ii8+CisgICAgICAgIDwvYW50PgorICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvbWRiL3dlYmNsaWVudC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9tZGIvd2ViY2xpZW50L2J1aWxkLnhtbAppbmRleCA4MGM4YjA1Li43NmEyYzA1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9tZGIvd2ViY2xpZW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9tZGIvd2ViY2xpZW50L2J1aWxkLnhtbApAQCAtNTAsNyArNTAsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7ZWpiLmphcn0iPgogICAgICAgICAgICAgPG1ldGFpbmYgZmlsZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLSAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZH0iIGV4Y2x1ZGVzPSIqKi9TZXJ2bGV0LmNsYXNzLCAqKi9UZXN0Q2xpZW50LmNsYXNzIi8+ICAgCisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGR9IiBleGNsdWRlcz0iKiovU2VydmxldC5jbGFzcywgKiovVGVzdENsaWVudC5jbGFzcyIvPgogICAgICAgICA8L2phcj4KIAogICAgICAgICA8d2FyIGRlc3RmaWxlPSIke3dlYi53YXJ9IiB3ZWJ4bWw9ImRlc2NyaXB0b3Ivd2ViLnhtbCI+CkBAIC0xMjksMTkgKzEyOSwxOSBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95Lmptcy5xdWV1ZXMiIGRlcGVuZHM9InByZXBhcmUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5jcmVhdGUuam1zLmNvbm5lY3Rpb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imptcy5mYWN0b3J5LnR5cGUiIHZhbHVlPSJqYWthcnRhLmptcy5RdWV1ZUNvbm5lY3Rpb25GYWN0b3J5Ii8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iam1zLmZhY3RvcnkubmFtZSIgdmFsdWU9Imptcy9lamJfZWpiMzBfaGVsbG9fbWRiX1FDRiIvPiAgICAgICAgICAgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iam1zLmZhY3RvcnkubmFtZSIgdmFsdWU9Imptcy9lamJfZWpiMzBfaGVsbG9fbWRiX1FDRiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLmNyZWF0ZS5qbXMucmVzb3VyY2UiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRlc3QudHlwZSIgdmFsdWU9InF1ZXVlIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGVzdC5uYW1lIiB2YWx1ZT0iZWpiX2VqYjMwX2hlbGxvX21kYl9JblF1ZXVlIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzLnR5cGUiIHZhbHVlPSJqYWthcnRhLmptcy5RdWV1ZSIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imptcy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iam1zL2VqYl9lamIzMF9oZWxsb19tZGJfSW5RdWV1ZSIvPiAgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iam1zLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9JblF1ZXVlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24uY3JlYXRlLmptcy5yZXNvdXJjZSI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGVzdC50eXBlIiB2YWx1ZT0icXVldWUiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXN0Lm5hbWUiIHZhbHVlPSJlamJfZWpiMzBfaGVsbG9fbWRiX091dFF1ZXVlIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzLnR5cGUiIHZhbHVlPSJqYWthcnRhLmptcy5RdWV1ZSIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imptcy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iam1zL2VqYl9lamIzMF9oZWxsb19tZGJfT3V0UXVldWUiLz4gICAgIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imptcy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iam1zL2VqYl9lamIzMF9oZWxsb19tZGJfT3V0UXVldWUiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9tZGIvd2ViY2xpZW50L2VqYi9IZWxsbzEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL21kYi93ZWJjbGllbnQvZWpiL0hlbGxvMS5qYXZhCmluZGV4IDg2MTUxOGIuLmZjY2JhZWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL21kYi93ZWJjbGllbnQvZWpiL0hlbGxvMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL21kYi93ZWJjbGllbnQvZWpiL0hlbGxvMS5qYXZhCkBAIC0xOSw1ICsxOSw1IEBACiBwdWJsaWMgaW50ZXJmYWNlIEhlbGxvMSB7CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbyhTdHJpbmcgcyk7Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL21kYi93ZWJjbGllbnQvZWpiL0hlbGxvU3RhdGVmdWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL21kYi93ZWJjbGllbnQvZWpiL0hlbGxvU3RhdGVmdWwuamF2YQppbmRleCA2MmIxOGM1Li5jZGQzM2ZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9tZGIvd2ViY2xpZW50L2VqYi9IZWxsb1N0YXRlZnVsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvbWRiL3dlYmNsaWVudC9lamIvSGVsbG9TdGF0ZWZ1bC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cpOwogICAgIH0KICAgICBAUHJlRGVzdHJveSBwdWJsaWMgdm9pZCBteVByZURlc3Ryb3lNZXRob2QoKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUFJFLURFU1RST1kgY2FsbGJhY2sgcmVjZWl2ZWQgaW4gIiArIG1zZyk7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQUkUtREVTVFJPWSBjYWxsYmFjayByZWNlaXZlZCBpbiAiICsgbXNnKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL21kYi93ZWJjbGllbnQvZWpiL01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9tZGIvd2ViY2xpZW50L2VqYi9NZXNzYWdlQmVhbi5qYXZhCmluZGV4IGM3MTg5ZmYuLjJhN2UzNWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL21kYi93ZWJjbGllbnQvZWpiL01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvbWRiL3dlYmNsaWVudC9lamIvTWVzc2FnZUJlYW4uamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgIEBFSkIgcHJpdmF0ZSBIZWxsbzEgaGVsbG8xOwogICAgIEBFSkIgcHJpdmF0ZSBIZWxsbzIgaGVsbG8yOwogCi0gICAgQFJlc291cmNlKG5hbWU9Imptcy9NeVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkiKSAKKyAgICBAUmVzb3VyY2UobmFtZT0iam1zL015UXVldWVDb25uZWN0aW9uRmFjdG9yeSIpCiAgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY0ZhY3Rvcnk7CiAKICAgICBAUmVzb3VyY2UgUXVldWUgY2xpZW50UXVldWU7CkBAIC01Miw3ICs1Miw3IEBACiAKICAgICAgICAgUXVldWVDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBoZWxsbzEgc3RhdGVsZXNzIGJlYW4iKTsKICAgICAgICAgICAgIGhlbGxvMS5oZWxsbygibG9jYWwgZWpiMy4wIHN0YXRlbGVzcyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIGhlbGxvMiBzdGF0ZWZ1bCBiZWFuIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9tZGIvd2ViY2xpZW50L3NlcnZsZXQvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvbWRiL3dlYmNsaWVudC9zZXJ2bGV0L1NlcnZsZXQuamF2YQppbmRleCA5NmIwNmFkLi5kM2JiYTEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9tZGIvd2ViY2xpZW50L3NlcnZsZXQvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL21kYi93ZWJjbGllbnQvc2VydmxldC9TZXJ2bGV0LmphdmEKQEAgLTI2LDI2ICsyNiwyNiBAQAogCiAgICAgQFJlc291cmNlKG5hbWU9IkZvb0NGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcXVldWVDb25GYWN0b3J5OwotICAgIAotICAgIEBSZXNvdXJjZShuYW1lPSJNc2dCZWFuUXVldWUiKSAKKworICAgIEBSZXNvdXJjZShuYW1lPSJNc2dCZWFuUXVldWUiKQogICAgIHByaXZhdGUgamFrYXJ0YS5qbXMuUXVldWUgbXNnQmVhblF1ZXVlOwotICAgIAorCiAgICAgQFJlc291cmNlKG5hbWU9IkNsaWVudFF1ZXVlIikKICAgICBwcml2YXRlIGpha2FydGEuam1zLlF1ZXVlIGNsaWVudFF1ZXVlOwotICAgIAorCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb24gcXVldWVDb247CiAgICAgcHJpdmF0ZSBRdWV1ZVNlc3Npb24gcXVldWVTZXNzaW9uOwogICAgIHByaXZhdGUgUXVldWVTZW5kZXIgcXVldWVTZW5kZXI7CiAgICAgcHJpdmF0ZSBRdWV1ZVJlY2VpdmVyIHF1ZXVlUmVjZWl2ZXI7CiAKLSAgICBwcml2YXRlIGludCBudW1NZXNzYWdlcyA9IDE7IAorICAgIHByaXZhdGUgaW50IG51bU1lc3NhZ2VzID0gMTsKICAgICAvLyBpbiBtaWxsaS1zZWNvbmRzCiAgICAgcHJpdmF0ZSBzdGF0aWMgbG9uZyBUSU1FT1VUID0gOTAwMDA7CiAKIAogCiAgICAgcHVibGljIHZvaWQgIGluaXQoKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHN1cGVyLmluaXQoKTsKICAgICAgICAgbG9nKCJpbml0KCkuLi4iKTsKICAgICB9CkBAIC02MCw5ICs2MCw5IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlcnZpY2UgKCBIdHRwU2VydmxldFJlcXVlc3QgcmVxICwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwICkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICAgICAgICAgICAgICAgCisKICAgICAgICAgbG9nKCJzZXJ2aWNlKCkuLi4iKTsKIAogICAgICAgICB0cnkgewpAQCAtNzYsMTUgKzc2LDE1IEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPHA+Iik7CiAKICAgICAgICAgICAgIHF1ZXVlQ29uID0gcXVldWVDb25GYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwotICAgICAgICAKKwogICAgICAgICAgICAgcXVldWVTZXNzaW9uID0gcXVldWVDb24uY3JlYXRlUXVldWVTZXNzaW9uCiAgICAgICAgICAgICAgICAgKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwotICAgICAgICAKKwogICAgICAgICAgICAgLy8gUHJvZHVjZXIgd2lsbCBiZSBzcGVjaWZpZWQgd2hlbiBhY3R1YWwgbXNnIGlzIHNlbnQuCiAgICAgICAgICAgICBxdWV1ZVNlbmRlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVTZW5kZXIobnVsbCk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBxdWV1ZVJlY2VpdmVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVJlY2VpdmVyKGNsaWVudFF1ZXVlKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIHF1ZXVlQ29uLnN0YXJ0KCk7CiAKIApAQCAtMTE2LDEwICsxMTYsMTAgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGV4KTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGNsZWFudXAoKTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgIH0KIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgY2xlYW51cCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmKCBxdWV1ZUNvbiAhPSBudWxsICkgewpAQCAtMTMzLDggKzEzMyw4IEBACiAgICAgcHVibGljIHZvaWQgIGRlc3Ryb3koKSB7CiAgICAgICAgIGxvZygiZGVzdHJveSgpLi4uIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgbG9nIChTdHJpbmcgbWVzc2FnZSkgewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW3dlYmNsaWVudCBTZXJ2bGV0XTo6ICIgKyBtZXNzYWdlKTsKLSAgICB9ICAKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9tZGIvd2ViY2xpZW50L3NlcnZsZXQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvbWRiL3dlYmNsaWVudC9zZXJ2bGV0L1Rlc3RDbGllbnQuamF2YQppbmRleCBmZGMyNzg4Li4yZjVhOTE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9tZGIvd2ViY2xpZW50L3NlcnZsZXQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL21kYi93ZWJjbGllbnQvc2VydmxldC9UZXN0Q2xpZW50LmphdmEKQEAgLTE0LDcgKzE0LDcgQEAKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogICovCiAKLXBhY2thZ2UgY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5tZGI7IAorcGFja2FnZSBjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLm1kYjsKIAogaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgVGVzdENsaWVudCBjbGllbnQgPSBuZXcgVGVzdENsaWVudCgpOwogICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgU3RyaW5nIHVybCA9IGFyZ3NbMF07CkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgICAgICAgICAgbG9nKCJDYXVnaHQgRVhQRUNURUQgSU9FeGNlcHRpb246ICIgKyBleCk7CiAgICAgICAgICAgICAgICAgcGFzcygpOwogICAgICAgICAgICAgfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3NlY3VyaXR5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3NlY3VyaXR5L2J1aWxkLnhtbAppbmRleCA5MmEzNjM0Li5kNWQ3NzllIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZWN1cml0eS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2VjdXJpdHkvYnVpbGQueG1sCkBAIC0yNyw3ICsyNyw3IEBACiAKICAgICA8cHJvcGVydHkgbmFtZT0idGVzdE5hbWUiIHZhbHVlPSJkZXBsb3ltZW50LWVqYjMwLWVhci1zZWN1cml0eSIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJhcmNoaXZlZGlyIiB2YWx1ZT0iJHtidWlsZH0vYXJjaGl2ZXMiLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9Ii8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXJjaGl2ZWRpcn0iLz4KQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9ImdmdjMuY2xhc3NwYXRoIi8+CiAgICAgICAgICA8L2phdmFjPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUudXNlciIgZGVwZW5kcz0ic2V0QXNhZG1pbkFyZ3NXaXRob3V0UGFzc3dvcmQiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5jcmVhdGV1c2VyLmFzYWRtaW4iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgpAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICAgICAgICAgIGV4Y2x1ZGVzPSIqKi9DbGllbnQuY2xhc3MsKiovQ2xpZW50U3VwZXIuY2xhc3MsKiovU2VydmxldC5jbGFzcywgKiovTXlGaWx0ZXIuY2xhc3MiLz4KIAogICAgICAgICA8d2FyIGRlc3RmaWxlPSIke3dlYi53YXJ9IiB3ZWJ4bWw9ImRlc2NyaXB0b3Ivd2ViLnhtbCI+Ci0gICAgICAgICAgICA8Y2xhc3NlcyBkaXI9IiR7YnVpbGR9IiAKKyAgICAgICAgICAgIDxjbGFzc2VzIGRpcj0iJHtidWlsZH0iCiAgICAgICAgICAgICAgICAgZXhjbHVkZXM9IioqL0NsaWVudC5jbGFzcywgKiovKkVKQi5jbGFzcywgKiovKi5qYXIiLz4KICAgICAgICAgPC93YXI+CiAKQEAgLTkyLDggKzkyLDggQEAKICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIi8+CiAgICAgICAgICAgICA8L21ldGFpbmY+CiAgICAgICAgIDwvZWFyPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LmFzYWRtaW4iIGRlcGVuZHM9InByZXBhcmUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5kZXBsb3kuYXNhZG1pbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSItLXJldHJpZXZlICR7YXJjaGl2ZWRpcn0gLS1uYW1lICR7dGVzdE5hbWV9ICR7YWxsLmVhcn0iLz4KQEAgLTExMyw3ICsxMTMsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0iJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50IiBkZXBlbmRzPSJwcmVwYXJlLHNldE9yYlBvcnQyLHNldEh0dHBQb3J0MiI+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIgcmVzdWx0cHJvcGVydHk9InJlc3VsdCIgZmFpbG9uZXJyb3I9ImZhbHNlIiBvdXRwdXQ9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIj4KQEAgLTEyOSw5ICsxMjksOSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InByb2Nlc3NSZXN1bHQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3VsdCIgdmFsdWU9IiR7cmVzdWx0fSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZyIgdmFsdWU9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIi8+Ci0gICAgICAgIDwvYW50Y2FsbD4gIAorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUudXNlciIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzc2VtYmxlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZWN1cml0eS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZWN1cml0eS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMjBiOTE0OS4uYzIxZjhkNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2VjdXJpdHkvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3NlY3VyaXR5L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzEsMTMgKzMxLDEzIEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZGVwbG95bWVudC1lamIzMC1lYXItc2VjdXJpdHkiKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIGhvc3QgPSAoYXJncy5sZW5ndGggPiAwKSA/IGFyZ3NbMF0gOiAibG9jYWxob3N0IjsKICAgICAgICAgcG9ydCA9IChhcmdzLmxlbmd0aCA+IDEpID8gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKSA6IDgwODA7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBTbGVzcyBzbGVzczsKICAgICBwcml2YXRlIHN0YXRpYyBARUpCIFNmdWwgc2Z1bDsKIApAQCAtODYsNyArODYsNyBAQAogICAgICAgICAgICAgU3lzdGVtLmV4aXQoLTEpOwogICAgICAgICB9CiAKLSAgICAJcmV0dXJuOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGdvR2V0KFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIGNvbnRleHRQYXRoKQpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZU51bSArICI6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIGludCBpbmRleCA9IGxpbmUuaW5kZXhPZigiPSIpOwogICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGluZm8gPSBsaW5lLnN1YnN0cmluZyhpbmRleCArIDEpOyAgCisgICAgICAgICAgICAgICAgU3RyaW5nIGluZm8gPSBsaW5lLnN1YnN0cmluZyhpbmRleCArIDEpOwogICAgICAgICAgICAgICAgIGlmIChpbmZvLnN0YXJ0c1dpdGgoImhlbGxvIikpIHsKICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZWN1cml0eS9lamIvU2Z1bC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2VjdXJpdHkvZWpiL1NmdWwuamF2YQppbmRleCBmMzNkMmQyLi5iYjE5NDkxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZWN1cml0eS9lamIvU2Z1bC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3NlY3VyaXR5L2VqYi9TZnVsLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29tLnN1bi5zMWFzZGV2LmRlcGxveW1lbnQuZWpiMzAuZWFyLnNlY3VyaXR5OwogCiBpbXBvcnQgamFrYXJ0YS5lamIuUmVtb3RlOwotCQorCiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIFNmdWwKIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3NlY3VyaXR5L2VqYi9TZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZWN1cml0eS9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IGE4NjY2NmYuLjliNTExNTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3NlY3VyaXR5L2VqYi9TZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2VjdXJpdHkvZWpiL1NmdWxFSkIuamF2YQpAQCAtNTEsMTIgKzUxLDEyIEBACiAgICAgICAgIH0gY2F0Y2goRUpCRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4cGVjdGVkIGZhaWx1cmUgZnJvbSBzbGVzc0xvY2FsLmdvb2RCeWUoKSIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzbGVzc0xvY2FsLmhlbGxvKCkpOwogICAgICAgICByZXR1cm4gc2xlc3MuaGVsbG8oKTsKICAgICB9CiAKLSAgICBAUm9sZXNBbGxvd2VkKHsiajJlZSJ9KSAKKyAgICBAUm9sZXNBbGxvd2VkKHsiajJlZSJ9KQogICAgIHB1YmxpYyBTdHJpbmcgZ29vZEFmdGVybm9vbigpIHsKICAgICAgICAgaWYgKCFzYy5pc0NhbGxlckluUm9sZSgiajJlZSIpIHx8IHNjLmlzQ2FsbGVySW5Sb2xlKCJzdW51c2VyIikpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJub3Qgb2Ygcm9sZSBqMmVlIG9yIG9mIHJvbGUgc3VudXNlciIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2VjdXJpdHkvd2ViL015RmlsdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZWN1cml0eS93ZWIvTXlGaWx0ZXIuamF2YQppbmRleCBlODNhNzgyLi4zOGM0ZGI1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZWN1cml0eS93ZWIvTXlGaWx0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZWN1cml0eS93ZWIvTXlGaWx0ZXIuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogCiAgICAgICAgIFNlcnZsZXRDb250ZXh0IHNjID0gZmlsdGVyQ29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7Ci0gICAgCisKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgaW50IGxvZ2luVGltZW91dCA9IGRzMS5nZXRMb2dpblRpbWVvdXQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24vU2Vzc2lvblRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24vU2Vzc2lvblRlc3QuamF2YQppbmRleCA0YzNmYzhiLi40NjBlZWMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uL1Nlc3Npb25UZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbi9TZXNzaW9uVGVzdC5qYXZhCkBAIC0yNCwxNSArMjQsMTUgQEAKICAqIGluIERlcGxveW1lbnRUZXN0LgogICoKICAqIEBhdXRob3I6IHRqcXVpbm4KLSAqIAorICoKICAqLwogCiBwdWJsaWMgY2xhc3MgU2Vzc2lvblRlc3QgZXh0ZW5kcyBEZXBsb3ltZW50VGVzdCB7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBFeGFtcGxlVGVzdCAqLwogICAgIHB1YmxpYyBTZXNzaW9uVGVzdCgpIHsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKlJ1bnMgdGhlIGZpcnN0IHN0ZXAgb2YgdGhlIHRlc3Q6IGRlcGxveWluZyBhbmQgcnVubmluZyB0aGUgY2xpZW50LgogICAgICAqLwpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBkZXBsb3koKTsKICAgICAgICAgcnVuQ2xpZW50KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICpSdW5zIHRoZSBzZWNvbmQgc3RlcCBvZiB0aGUgdGVzdCwgb25seSBhZnRlciB0aGUgZmlyc3QgaGFzIHJ1biBhbmQKICAgICAgKnN1Y2NlZWRlZDogcmVkZXBsb3kgdGhlIGFwcCBhbmQgcnVuIHRoZSBjbGllbnQgYWdhaW4uCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24vYnVpbGQueG1sCmluZGV4IDQ0YWE5OTEuLjQ5NjM5ZTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24vYnVpbGQueG1sCkBAIC01OCw4ICs1OCw4IEBACiAgICAgICAgIDxlYXIgZGVzdGZpbGU9IiR7YWxsLmVhcn0iIGJhc2VkaXI9IiR7YXJjaGl2ZWRpcn0iCiAgICAgICAgICAgICBhcHB4bWw9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIiBpbmNsdWRlcz0iKi5qYXIiPgogICAgICAgICA8L2Vhcj4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS5hc2FkbWluIiBkZXBlbmRzPSJwcmVwYXJlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24uZGVwbG95LmFzYWRtaW4iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0iLS1yZXRyaWV2ZSAke2FyY2hpdmVkaXJ9IC0tbmFtZSAke3Rlc3ROYW1lfSAke2FsbC5lYXJ9Ii8+CkBAIC04MiwxNSArODIsMTUgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwcm9jZXNzUmVzdWx0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXN1bHQiIHZhbHVlPSIke3Jlc3VsdH0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2ciIHZhbHVlPSIke2J1aWxkfS8ke2xvZy5pZH0ub3V0cHV0LmxvZyIvPgotICAgICAgICA8L2FudGNhbGw+ICAgIAorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LmFzYWRtaW4iIGRlcGVuZHM9InByZXBhcmUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi51bmRlcGxveS5hc2FkbWluIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdE5hbWUiIHZhbHVlPSIke3Rlc3ROYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc3NlbWJsZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBmMGEwMDg3Li5jYzk1MjQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzAsMTEgKzMwLDExIEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiLWVqYjMwLWhlbGxvLXNlc3Npb24iKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBTZnVsIHNmdWw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBTbGVzcyBzbGVzczsKIApAQCAtNjAsOCArNjAsOCBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBAUG9zdENvbnN0cnVjdApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbi9jbGllbnQvc3VuLWFjYy1uby1sb2ctc2VydmljZS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uL2NsaWVudC9zdW4tYWNjLW5vLWxvZy1zZXJ2aWNlLnhtbAppbmRleCA0N2UzZDNlLi4yNjIzZjE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uL2NsaWVudC9zdW4tYWNjLW5vLWxvZy1zZXJ2aWNlLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uL2NsaWVudC9zdW4tYWNjLW5vLWxvZy1zZXJ2aWNlLnhtbApAQCAtMTgsOCArMTgsOCBAQAogLS0+CiAKIDwhLS0KLSAgIFBsZWFzZSByZW1lbWJlciB0byBjdXN0b21pemUgdGhpcyBmaWxlIGZvciB5b3VyIGVudmlyb25tZW50LiBUaGUgZGVmYXVsdHMgZm9yIAotICAgZm9sbG93aW5nIGZpZWxkcyBtYXkgbm90IGJlIGFwcHJvcHJpYXRlLiAgCisgICBQbGVhc2UgcmVtZW1iZXIgdG8gY3VzdG9taXplIHRoaXMgZmlsZSBmb3IgeW91ciBlbnZpcm9ubWVudC4gVGhlIGRlZmF1bHRzIGZvcgorICAgZm9sbG93aW5nIGZpZWxkcyBtYXkgbm90IGJlIGFwcHJvcHJpYXRlLgogICAgLSB0YXJnZXQtc2VydmVyIG5hbWUsIGFkZHJlc3MgYW5kIHBvcnQKICAgIC0gUHJvcGVydHkgc2VjdXJpdHkuY29uZmlnIGluIG1lc3NhZ2Utc2VjdXJpdHktY29uZmlnCiAtLT4KQEAgLTMxLDcgKzMxLDcgQEAKIDwhLS0gICA8bG9nLXNlcnZpY2UgZmlsZT0iIiBsZXZlbD0iV0FSTklORyIvPiAtLT4KICAgPG1lc3NhZ2Utc2VjdXJpdHktY29uZmlnIGF1dGgtbGF5ZXI9IlNPQVAiPgogICAgIDwhLS0gdHVybmVkIG9mZiBieSBkZWZhdWx0IC0tPgotICAgIDxwcm92aWRlci1jb25maWcgY2xhc3MtbmFtZT0iY29tLnN1bi54bWwud3NzLnByb3ZpZGVyLkNsaWVudFNlY3VyaXR5QXV0aE1vZHVsZSIgcHJvdmlkZXItaWQ9IlhXU19DbGllbnRQcm92aWRlciIgcHJvdmlkZXItdHlwZT0iY2xpZW50Ij4gCisgICAgPHByb3ZpZGVyLWNvbmZpZyBjbGFzcy1uYW1lPSJjb20uc3VuLnhtbC53c3MucHJvdmlkZXIuQ2xpZW50U2VjdXJpdHlBdXRoTW9kdWxlIiBwcm92aWRlci1pZD0iWFdTX0NsaWVudFByb3ZpZGVyIiBwcm92aWRlci10eXBlPSJjbGllbnQiPgogICAgICAgPHJlcXVlc3QtcG9saWN5IGF1dGgtc291cmNlPSJjb250ZW50Ii8+CiAgICAgICA8cmVzcG9uc2UtcG9saWN5IGF1dGgtc291cmNlPSJjb250ZW50Ii8+CiAgICAgICA8cHJvcGVydHkgbmFtZT0iZW5jcnlwdGlvbi5rZXkuYWxpYXMiIHZhbHVlPSJzMWFzIi8+CkBAIC0zOSw3ICszOSw3IEBACiAgICAgICA8cHJvcGVydHkgbmFtZT0iZHluYW1pYy51c2VybmFtZS5wYXNzd29yZCIgdmFsdWU9ImZhbHNlIi8+CiAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVidWciIHZhbHVlPSJmYWxzZSIvPgogICAgIDwvcHJvdmlkZXItY29uZmlnPgotICAgIDxwcm92aWRlci1jb25maWcgY2xhc3MtbmFtZT0iY29tLnN1bi54bWwud3NzLnByb3ZpZGVyLkNsaWVudFNlY3VyaXR5QXV0aE1vZHVsZSIgcHJvdmlkZXItaWQ9IkNsaWVudFByb3ZpZGVyIiBwcm92aWRlci10eXBlPSJjbGllbnQiPiAKKyAgICA8cHJvdmlkZXItY29uZmlnIGNsYXNzLW5hbWU9ImNvbS5zdW4ueG1sLndzcy5wcm92aWRlci5DbGllbnRTZWN1cml0eUF1dGhNb2R1bGUiIHByb3ZpZGVyLWlkPSJDbGllbnRQcm92aWRlciIgcHJvdmlkZXItdHlwZT0iY2xpZW50Ij4KICAgICAgIDxyZXF1ZXN0LXBvbGljeSBhdXRoLXNvdXJjZT0iY29udGVudCIvPgogICAgICAgPHJlc3BvbnNlLXBvbGljeSBhdXRoLXNvdXJjZT0iY29udGVudCIvPgogICAgICAgPHByb3BlcnR5IG5hbWU9ImVuY3J5cHRpb24ua2V5LmFsaWFzIiB2YWx1ZT0iczFhcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbi9lamIvU2Z1bC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbi9lamIvU2Z1bC5qYXZhCmluZGV4IDgwYWY1YmEuLmRkYTk1ODcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24vZWpiL1NmdWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uL2VqYi9TZnVsLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uOwogCiBpbXBvcnQgamFrYXJ0YS5lamIuUmVtb3RlOwotCQorCiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIFNmdWwKIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2J1aWxkLnhtbAppbmRleCA2YTlkNGZiLi44ZGRiY2YxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvYnVpbGQueG1sCkBAIC00Niw3ICs0Niw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtlamIuamFyfSIgYmFzZWRpcj0iJHtidWlsZH0iIAorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2VqYi5qYXJ9IiBiYXNlZGlyPSIke2J1aWxkfSIKICAgICAgICAgICAgICAgICBleGNsdWRlcz0iKiovQ2xpZW50U3VwZXIuY2xhc3MsKiovQ2xpZW50LmNsYXNzIj4KICAgICAgICAgICAgICAgICA8bWV0YWluZiBmaWxlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogICAgICAgICA8L2phcj4KQEAgLTYyLDggKzYyLDggQEAKICAgICAgICAgPGVhciBkZXN0ZmlsZT0iJHthbGwuZWFyfSIgYmFzZWRpcj0iJHthcmNoaXZlZGlyfSIKICAgICAgICAgICAgIGFwcHhtbD0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiIGluY2x1ZGVzPSIqLmphciwgc2Vzc2lvbjJhcHBjbGllbnQueG1sLCBzdW4tc2Vzc2lvbjJhcHBjbGllbnQueG1sIj4KICAgICAgICAgPC9lYXI+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kuYXNhZG1pbiIgZGVwZW5kcz0icHJlcGFyZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLmRlcGxveS5hc2FkbWluIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9Ii0tcmV0cmlldmUgJHthcmNoaXZlZGlyfSAtLW5hbWUgJHt0ZXN0TmFtZX0gJHthbGwuZWFyfSIvPgpAQCAtODUsMTUgKzg1LDE1IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icHJvY2Vzc1Jlc3VsdCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0IiB2YWx1ZT0iJHtyZXN1bHR9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nIiB2YWx1ZT0iJHtidWlsZH0vJHtsb2cuaWR9Lm91dHB1dC5sb2ciLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgICAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS5hc2FkbWluIiBkZXBlbmRzPSJwcmVwYXJlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24udW5kZXBsb3kuYXNhZG1pbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSIke3Rlc3ROYW1lfSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNzZW1ibGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA4ODhhZjdjLi5iZTdkZjM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCwxMCArMjgsMTAgQEAKIGltcG9ydCBjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24yLio7CiAKIAotQEVKQnMoIAotIHsgQEVKQihuYW1lPSJlamIvVHlwZUxldmVsU2xlc3MxIiwgYmVhbk5hbWU9IlNsZXNzRUpCIiwgCitARUpCcygKKyB7IEBFSkIobmFtZT0iZWpiL1R5cGVMZXZlbFNsZXNzMSIsIGJlYW5OYW1lPSJTbGVzc0VKQiIsCiAgICAgICAgYmVhbkludGVyZmFjZT1TbGVzcy5jbGFzcyksCi0gICBARUpCKG5hbWU9ImVqYi9UeXBlTGV2ZWxTbGVzczIiLCBiZWFuTmFtZT0iU2xlc3NFSkIyIiwgCisgICBARUpCKG5hbWU9ImVqYi9UeXBlTGV2ZWxTbGVzczIiLCBiZWFuTmFtZT0iU2xlc3NFSkIyIiwKICAgICAgICBiZWFuSW50ZXJmYWNlPVNsZXNzLmNsYXNzKQogIH0pCiBARUpCKG5hbWU9ImVqYi9UeXBlTGV2ZWxTbGVzczMiLCBiZWFuSW50ZXJmYWNlPVNsZXNzU3ViLmNsYXNzKQpAQCAtNDEsNyArNDEsNyBAQAogCiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7Ci0gICAgfSAgCisgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBTZnVsIHNmdWwxOwogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU2Z1bCBzZnVsMjsKQEAgLTUxLDcgKzUxLDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIEBFSkIoYmVhbk5hbWU9IlNsZXNzRUpCIikgU2xlc3Mgc2xlc3MxOwogCi0gICAgLy8gbGlua2VkIHRvIFNsZXNzRUpCMiB2aWEgc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwgCisgICAgLy8gbGlua2VkIHRvIFNsZXNzRUpCMiB2aWEgc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwKICAgICAvLyBzbyBubyBiZWFuTmFtZSBkaXNhbWJpZ3VhdGlvbiBpcyBuZWVkZWQKICAgICBwcml2YXRlIHN0YXRpYyBARUpCIFNsZXNzIHNsZXNzMjsKIApAQCAtNjEsMTEgKzYxLDExIEBACiAKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIHN1cGVyU2xlc3MxIik7CiAKICAgICAgICAgICAgIFNsZXNzIHN1cGVyU2xlc3NMb29rdXAgPSAoU2xlc3MpIG5ldyBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Y29tcC9lbnYvY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uMi5jbGllbnQuQ2xpZW50U3VwZXIvc3VwZXJTbGVzczEiKTsKQEAgLTg5LDcgKzg5LDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc2Z1bDEuZG9SZW1vdmVNZXRob2RTZXNzaW9uU3luY1Rlc3RzKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gQ2FsbCBhcHBsaWNhdGlvbi1kZWZpbmVkIEBSZW1vdmUgbWV0aG9kLiBUaGlzIG1ldGhvZCBoYXMKICAgICAgICAgICAgIC8vIG5vIHJlbGF0aW9uc2hpcCB0byBFSkJPYmplY3QucmVtb3ZlKCkuICBJdCdzIGEgY29pbmNpZGVuY2UKICAgICAgICAgICAgIC8vIHRoYXQgaXQgaGFzIHRoZSBzYW1lIG5hbWUuCkBAIC0yMzAsNyArMjMwLDcgQEAKICAgICAgICAgICAgIGlmKCByMS5nZXRJZCgpLmVxdWFscyhyMi5nZXRJZCgpKSApIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJyZW1vdGUgcGFyYW0gcGFzc2luZyBnZXRJZCgpIHRlc3QgZmFpbGVkIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc2xlc3MzLmhlbGxvKCk7CiAgICAgICAgICAgICBzbGVzczMuaGVsbG8zKCk7CiAKQEAgLTI1Nyw4ICsyNTcsOCBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL0Zvby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL0Zvby5qYXZhCmluZGV4IGQ4OTQ2OWQuLjM5NjY5YjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9Gb28uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9lamIvRm9vLmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKIAogICAgIHZvaWQgY2FsbEhlbGxvKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKICAgICBTdHJpbmcgc2F5SGVsbG8oKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gYXNzZXJ0VmFsaWRSZW1vdGVPYmplY3QoU3RyaW5nIG1zZykKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9lamIvTXlDYWxsYmFja0hhbmRsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9NeUNhbGxiYWNrSGFuZGxlci5qYXZhCmluZGV4IDI5ZmVjYmEuLmUxZmUzNDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9NeUNhbGxiYWNrSGFuZGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9NeUNhbGxiYWNrSGFuZGxlci5qYXZhCkBAIC0yMSwxMCArMjEsMTAgQEAKIAogcHVibGljIGNsYXNzIE15Q2FsbGJhY2tIYW5kbGVyIHsKIAotICAgIEBQcmVEZXN0cm95IAorICAgIEBQcmVEZXN0cm95CiAgICAgcHVibGljIHZvaWQgbXlQcmVEZXN0TWV0aG9kKEludm9jYXRpb25Db250ZXh0IGludkN0eCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE15Q2FsbGJhY2tIYW5kbGVyOjpteVByZURlc3RNZXRob2QgIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZDdHgucHJvY2VlZCgpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9lamIvU2Z1bC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL1NmdWwuamF2YQppbmRleCAxODJiZGE2Li42OGY1N2I0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9lamIvU2Z1bC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9TZnVsLmphdmEKQEAgLTM3LDE3ICszNywxNyBAQAogICAgIC8vIGZvciBhIG1ldGhvZCB0aGF0IGhhcyBAUmVtb3ZlIGJlaGF2aW9yIHNvIGl0IG5lZWRzIHRvIHdvcmsuCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlKCk7CiAKLSAgICAvLyBBc3NvY2lhdGVkIHdpdGggYW4gQFJlbW92ZSBtZXRob2QgdGhhdCBoYXMgcmV0YWluSWZFeGNlcHRpb249dHJ1ZS4gICAgCisgICAgLy8gQXNzb2NpYXRlZCB3aXRoIGFuIEBSZW1vdmUgbWV0aG9kIHRoYXQgaGFzIHJldGFpbklmRXhjZXB0aW9uPXRydWUuCiAgICAgLy8gSWYgYXJndW1lbnQgaXMgdHJ1ZSwgdGhlIG1ldGhvZCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiwgd2hpY2ggc2hvdWxkCiAgICAgLy8ga2VlcCB0aGUgYmVhbiBmcm9tIGJlaW5nIHJlbW92ZWQuICBJZiBhcmd1bWVudCBpcyBmYWxzZSwgdGhlIGJlYW4KICAgICAvLyBzaG91bGQgc3RsbCBiZSByZW1vdmVkLgotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb247CiAKLSAgICAvLyBBc3NvY2lhdGVkIHdpdGggYW4gQFJlbW92ZSBtZXRob2QgdGhhdCBoYXMgcmV0YWluSWZFeGNlcHRpb249ZmFsc2UuICAgIAorICAgIC8vIEFzc29jaWF0ZWQgd2l0aCBhbiBAUmVtb3ZlIG1ldGhvZCB0aGF0IGhhcyByZXRhaW5JZkV4Y2VwdGlvbj1mYWxzZS4KICAgICAvLyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyB0cnVlIG9yIGZhbHNlLCB0aGUgYmVhbiBzaG91bGQgc3RpbGwgYmUKICAgICAvLyByZW1vdmVkLgotICAgIHB1YmxpYyB2b2lkIHJlbW92ZU5vdFJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZU5vdFJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb247CiAKICAgICAvLyBBc3NvY2lhdGVkIHdpdGggYW4gQFJlbW92ZSBtZXRob2QgdGhhdCBoYXMgcmV0YWluSWZFeGNlcHRpb249dHJ1ZQpAQCAtNTUsNyArNTUsNyBAQAogICAgIC8vIHJldGFpbklmRXhjZXB0aW9uIG9ubHkgYXBwbGllcyB0byBhcHBsaWNhdGlvbiBleGNlcHRpb25zLCBzbwogICAgIC8vIHRoaXMgYmVhbiBzaG91bGQgYWx3YXlzIGJlIHJlbW92ZWQuCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlTWV0aG9kVGhyb3dTeXNFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbik7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1JlbW92ZU1ldGhvZFNlc3Npb25TeW5jVGVzdHMoKTsKLSAgICAgICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9TZnVsMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL1NmdWwyLmphdmEKaW5kZXggYTQyYzI0Yy4uYTg2ZTMzYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL1NmdWwyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL1NmdWwyLmphdmEKQEAgLTIzLDE3ICsyMywxNyBAQAogewogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKTsKIAotICAgIC8vIEFzc29jaWF0ZWQgd2l0aCBhbiBAUmVtb3ZlIG1ldGhvZCB0aGF0IGhhcyByZXRhaW5JZkV4Y2VwdGlvbj10cnVlLiAgICAKKyAgICAvLyBBc3NvY2lhdGVkIHdpdGggYW4gQFJlbW92ZSBtZXRob2QgdGhhdCBoYXMgcmV0YWluSWZFeGNlcHRpb249dHJ1ZS4KICAgICAvLyBJZiBhcmd1bWVudCBpcyB0cnVlLCB0aGUgbWV0aG9kIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uLCB3aGljaCBzaG91bGQKICAgICAvLyBrZWVwIHRoZSBiZWFuIGZyb20gYmVpbmcgcmVtb3ZlZC4gIElmIGFyZ3VtZW50IGlzIGZhbHNlLCB0aGUgYmVhbgogICAgIC8vIHNob3VsZCBzdGxsIGJlIHJlbW92ZWQuCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlUmV0YWluSWZFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlUmV0YWluSWZFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbjsKIAotICAgIC8vIEFzc29jaWF0ZWQgd2l0aCBhbiBAUmVtb3ZlIG1ldGhvZCB0aGF0IGhhcyByZXRhaW5JZkV4Y2VwdGlvbj1mYWxzZS4gICAgCisgICAgLy8gQXNzb2NpYXRlZCB3aXRoIGFuIEBSZW1vdmUgbWV0aG9kIHRoYXQgaGFzIHJldGFpbklmRXhjZXB0aW9uPWZhbHNlLgogICAgIC8vIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIHRydWUgb3IgZmFsc2UsIHRoZSBiZWFuIHNob3VsZCBzdGlsbCBiZQogICAgIC8vIHJlbW92ZWQuCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlTm90UmV0YWluSWZFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlTm90UmV0YWluSWZFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbjsKIAogICAgIC8vIEFzc29jaWF0ZWQgd2l0aCBhbiBAUmVtb3ZlIG1ldGhvZCB0aGF0IGhhcyByZXRhaW5JZkV4Y2VwdGlvbj10cnVlCkBAIC00MSw1ICs0MSw1IEBACiAgICAgLy8gcmV0YWluSWZFeGNlcHRpb24gb25seSBhcHBsaWVzIHRvIGFwcGxpY2F0aW9uIGV4Y2VwdGlvbnMsIHNvCiAgICAgLy8gdGhpcyBiZWFuIHNob3VsZCBhbHdheXMgYmUgcmVtb3ZlZC4KICAgICBwdWJsaWMgdm9pZCByZW1vdmVNZXRob2RUaHJvd1N5c0V4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKTsKLSAgICAgICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9TZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IDM5ZTQ2ZDAuLmQ2MWQwYzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9TZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL1NmdWxFSkIuamF2YQpAQCAtMzksMTAgKzM5LDEwIEBACiBAU3RhdGVmdWwKIEBUcmFuc2FjdGlvbk1hbmFnZW1lbnQoVHJhbnNhY3Rpb25NYW5hZ2VtZW50VHlwZS5CRUFOKQogCi1ARUpCcyggCi0geyBARUpCKG5hbWU9ImVqYi9UeXBlTGV2ZWxTbGVzczEiLCBiZWFuTmFtZT0iU2xlc3NFSkIiLCAKK0BFSkJzKAorIHsgQEVKQihuYW1lPSJlamIvVHlwZUxldmVsU2xlc3MxIiwgYmVhbk5hbWU9IlNsZXNzRUpCIiwKICAgICAgICBiZWFuSW50ZXJmYWNlPVNsZXNzLmNsYXNzKSwKLSAgIEBFSkIobmFtZT0iZWpiL1R5cGVMZXZlbFNsZXNzMiIsIGJlYW5OYW1lPSJTbGVzc0VKQjIiLCAKKyAgIEBFSkIobmFtZT0iZWpiL1R5cGVMZXZlbFNsZXNzMiIsIGJlYW5OYW1lPSJTbGVzc0VKQjIiLAogICAgICAgIGJlYW5JbnRlcmZhY2U9U2xlc3MuY2xhc3MpICwKICAgIEBFSkIobmFtZT0iZWpiL1NmdWxFSkIyIiwgYmVhbkludGVyZmFjZT1TZnVsMi5jbGFzcykKICB9KQpAQCAtNTEsNyArNTEsNyBAQAogQEVKQihuYW1lPSJlamIvVHlwZUxldmVsU2xlc3MzIiwgYmVhbkludGVyZmFjZT1TbGVzc1N1Yi5jbGFzcykKIEBSZW1vdGUoe1NmdWwuY2xhc3N9KQogLy8gZWpiIGlzIG5vdCByZXF1aXJlZCB0byBwdXQgYnVzaW5lc3MgaW50ZXJmYWNlIGluIGltcGxlbWVudHMgY2xhdXNlCi1wdWJsaWMgY2xhc3MgU2Z1bEVKQiAKK3B1YmxpYyBjbGFzcyBTZnVsRUpCCiB7CiAKICAgICBwcml2YXRlIEBSZXNvdXJjZSBTZXNzaW9uQ29udGV4dCBzYzsKQEAgLTY0LDcgKzY0LDcgQEAKICAgICBwcml2YXRlIEBFSkIoYmVhbk5hbWU9IlNsZXNzRUpCIikgdm9pZCBzZXRTbGVzczQoU2xlc3Mgc2xlc3MpIHsKICAgICAgICAgc2xlc3M0ID0gc2xlc3M7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBTbGVzcyBzbGVzczU7CiAgICAgQEVKQihiZWFuTmFtZT0iU2xlc3NFSkIyIikgdm9pZCBzZXRTbGVzczUoU2xlc3Mgc2xlc3MpIHsKICAgICAgICAgc2xlc3M1ID0gc2xlc3M7CkBAIC0xNzMsNyArMTczLDcgQEAKICAgICBwdWJsaWMgdm9pZCBmb28oaW50IGEsIFN0cmluZyBiKSB7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIHRlc3RTbGVzc1JlZnMoU2xlc3MgczEsIFNsZXNzIHMyLCBTbGVzc1N1YiBzMykgCisgICAgcHJpdmF0ZSB2b2lkIHRlc3RTbGVzc1JlZnMoU2xlc3MgczEsIFNsZXNzIHMyLCBTbGVzc1N1YiBzMykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgU3RyaW5nIHNsZXNzMUlkID0gczEuZ2V0SWQoKTsKQEAgLTIyMyw3ICsyMjMsNyBAQAogICAgICAgICBzMy5yb3VuZFRyaXAyKGMpOwogCiAgICAgICAgIHMzLmhlbGxvMygpOwotIAorCiAgICAgfQogCiAgICAgQFBvc3RDb25zdHJ1Y3QKQEAgLTI0Nyw3ICsyNDcsNyBAQAogICAgIH0KIAogICAgIEBSZW1vdmUocmV0YWluSWZFeGNlcHRpb249dHJ1ZSkKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKSAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkIgIiArIHN0YXRlICsgIiByZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbiIpOwpAQCAtMjU4LDEwICsyNTgsMTAgQEAKICAgICB9CiAKICAgICBAUmVtb3ZlCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlTm90UmV0YWluSWZFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlTm90UmV0YWluSWZFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCICIgKyBzdGF0ZSArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkIgIiArIHN0YXRlICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmVOb3RSZXRhaW5JZkV4Y2VwdGlvbiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRocm93RXhjZXB0aW9uID0gIiArIHRocm93RXhjZXB0aW9uKTsKICAgICAgICAgaWYoIHRocm93RXhjZXB0aW9uICkgewpAQCAtMjcyLDcgKzI3Miw3IEBACiAgICAgQFJlbW92ZQogICAgIHB1YmxpYyB2b2lkIHJlbW92ZU1ldGhvZFRocm93U3lzRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIHsKIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkIgIiArIHN0YXRlICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQiAiICsgc3RhdGUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbW92ZU1ldGhvZFRocm93U3lzRXhjZXB0aW9uIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGhyb3dFeGNlcHRpb24gPSAiICsgdGhyb3dFeGNlcHRpb24pOwogICAgICAgICBpZiggdGhyb3dFeGNlcHRpb24gKSB7CkBAIC0yOTksNyArMjk5LDcgQEAKICAgICAgICAgICAgIFNmdWxFSkIyLmJlZm9yZUNvbXBsZXRpb25DYWxsZWQgJiYKICAgICAgICAgICAgIFNmdWxFSkIyLmFmdGVyQ29tcGxldGlvbkNhbGxlZCApIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIFNlc3Npb25TeW5jaCBiZWhhdmlvciBmb3IgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbW92ZVJldGFpbklmRXhjZXB0aW9uKHRydWUpIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbih0cnVlKSIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU2Vzc2lvblN5bmNoIGZhaWx1cmUgZm9yICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZlUmV0YWluSWZFeGNlcHRpb24odHJ1ZSkiKTsKQEAgLTMyMCwxMyArMzIwLDEzIEBACiAgICAgICAgICAgICAhU2Z1bEVKQjIuYmVmb3JlQ29tcGxldGlvbkNhbGxlZCAmJgogICAgICAgICAgICAgIVNmdWxFSkIyLmFmdGVyQ29tcGxldGlvbkNhbGxlZCApIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIFNlc3Npb25TeW5jaCBiZWhhdmlvciBmb3IgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbW92ZVJldGFpbklmRXhjZXB0aW9uKGZhbHNlKSIpOyAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbihmYWxzZSkiKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNlc3Npb25TeW5jaCBmYWlsdXJlIGZvciAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbW92ZVJldGFpbklmRXhjZXB0aW9uKHRydWUpIik7CiAgICAgICAgIH0KIAotICAgICAgICAKKwogCiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL1NmdWxFSkIyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9lamIvU2Z1bEVKQjIuamF2YQppbmRleCBiMmY5ZGRmLi42YjkzZWQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9lamIvU2Z1bEVKQjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9lamIvU2Z1bEVKQjIuamF2YQpAQCAtNDMsMTAgKzQzLDEwIEBACiAKICAgICAvLyB1c2Ugc29tZSBwYWNrYWdlLWxvY2FsIG11dGFibGUgc3RhdGljIHN0YXRlIHRvIGNoZWNrIHdoZXRoZXIKICAgICAvLyBzZXNzaW9uIHN5bmNoIGNhbGxiYWNrcyBhcmUgY2FsbGVkIGNvcnJlY3RseSBmb3IgQFJlbW92ZSBtZXRob2RzLgotICAgIC8vIFRoaXMgcHJvdmlkZXMgYSBzaW1wbGUgd2F5IHRvIGNoZWNrIHRoZSByZXN1bHRzIHNpbmNlIHRoZSBiZWFuIAorICAgIC8vIFRoaXMgcHJvdmlkZXMgYSBzaW1wbGUgd2F5IHRvIGNoZWNrIHRoZSByZXN1bHRzIHNpbmNlIHRoZSBiZWFuCiAgICAgLy8gaW5zdGFuY2UgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZSB0byB0aGUgY2FsbGVyLiAgVGhlIGNhbGxlciBtdXN0CiAgICAgLy8gYWx3YXlzIGF0IG1vc3Qgb25lIFNGU0JzIG9mIHRoaXMgYmVhbiB0eXBlIGF0IGEgdGltZSBmb3IgdGhpcwotICAgIC8vIHRvIHdvcmsuICAKKyAgICAvLyB0byB3b3JrLgogICAgIHN0YXRpYyBib29sZWFuIGFmdGVyQmVnaW5DYWxsZWQgPSBmYWxzZTsKICAgICBzdGF0aWMgYm9vbGVhbiBiZWZvcmVDb21wbGV0aW9uQ2FsbGVkID0gZmFsc2U7CiAgICAgc3RhdGljIGJvb2xlYW4gYWZ0ZXJDb21wbGV0aW9uQ2FsbGVkID0gZmFsc2U7CkBAIC02MCw3ICs2MCw3IEBACiAgICAgfQogCiAgICAgQFJlbW92ZShyZXRhaW5JZkV4Y2VwdGlvbj10cnVlKQotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQjIgIiArCkBAIC03Miw3ICs3Miw3IEBACiAgICAgfQogCiAgICAgQFJlbW92ZQotICAgIHB1YmxpYyB2b2lkIHJlbW92ZU5vdFJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZU5vdFJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQjIgIiArCkBAIC04Niw3ICs4Niw3IEBACiAgICAgQFJlbW92ZQogICAgIHB1YmxpYyB2b2lkIHJlbW92ZU1ldGhvZFRocm93U3lzRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIHsKIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkIyICIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCMiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmVNZXRob2RUaHJvd1N5c0V4Y2VwdGlvbiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRocm93RXhjZXB0aW9uID0gIiArIHRocm93RXhjZXB0aW9uKTsKICAgICAgICAgaWYoIHRocm93RXhjZXB0aW9uICkgewpAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgICAgIGFmdGVyQmVnaW5DYWxsZWQgPSB0cnVlOwogICAgICAgICBiZWZvcmVDb21wbGV0aW9uQ2FsbGVkID0gZmFsc2U7CiAgICAgICAgIGFmdGVyQ29tcGxldGlvbkNhbGxlZCA9IGZhbHNlOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkIyOjphZnRlckJlZ2luKCkiKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9TbGVzc0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL1NsZXNzRUpCLmphdmEKaW5kZXggZDJhNTUzOS4uZWRhMGIyOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL1NsZXNzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL1NsZXNzRUpCLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIEBTdGF0ZWxlc3MKIAogQFJlbW90ZSh7U2xlc3MuY2xhc3N9KQotcHVibGljIGNsYXNzIFNsZXNzRUpCIAorcHVibGljIGNsYXNzIFNsZXNzRUpCCiB7CiAKIApAQCAtNTIsMTEgKzUyLDExIEBACiAgICAgfQogCiAgICAgcHVibGljIENvbGxlY3Rpb24gcm91bmRUcmlwMihDb2xsZWN0aW9uIGNvbGxlY3Rpb25PZlNsZXNzKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2xlc3NFSkI6OnJvdW5kVHJpcDIgIiArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNsZXNzRUpCOjpyb3VuZFRyaXAyICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbk9mU2xlc3MpOwogICAgICAgICBpZiggY29sbGVjdGlvbk9mU2xlc3Muc2l6ZSgpID4gMCApIHsKICAgICAgICAgICAgIFNsZXNzIHNsZXNzID0gKFNsZXNzKSBjb2xsZWN0aW9uT2ZTbGVzcy5pdGVyYXRvcigpLm5leHQoKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW5wdXQgU2xlc3MuZ2V0SWQoKSA9ICIgKyBzbGVzcy5nZXRJZCgpKTsgIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnB1dCBTbGVzcy5nZXRJZCgpID0gIiArIHNsZXNzLmdldElkKCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uT2ZTbGVzczsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9lamIvU2xlc3NFSkIyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9lamIvU2xlc3NFSkIyLmphdmEKaW5kZXggNWQ4MWRlMy4uMWU1YTg1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL1NsZXNzRUpCMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9TbGVzc0VKQjIuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2xlc3NFSkIyOjplamJDcmVhdGUoKSIpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2xlc3NFSkIyOjplamJDcmVhdGUoKSIpOwogICAgICAgICBwb3N0Q29uc3RydWN0Q2FsbGVkID0gdHJ1ZTsKICAgICB9CiAKQEAgLTcyLDcgKzcyLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldElkKCkgewogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyBQcm9wcmlldGFyeSB3YXkgdG8gbG9vayB1cCB0eCBtYW5hZ2VyLiAgCisgICAgICAgICAgICAvLyBQcm9wcmlldGFyeSB3YXkgdG8gbG9vayB1cCB0eCBtYW5hZ2VyLgogICAgICAgICAgICAgVHJhbnNhY3Rpb25NYW5hZ2VyIHRtID0gKFRyYW5zYWN0aW9uTWFuYWdlcikKICAgICAgICAgICAgICAgICBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6YXBwc2VydmVyL1RyYW5zYWN0aW9uTWFuYWdlciIpOwogICAgICAgICAgICAgLy8gVXNlIGFuIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZXJlCkBAIC05NCw3ICs5NCw3IEBACiAKICAgICAgICAgcmV0dXJuICJTbGVzc0VKQjIiOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTbGVzcyByb3VuZFRyaXAoU2xlc3MgcykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNsZXNzRUpCMjo6cm91bmRUcmlwICIgKyBzKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnB1dCBTbGVzcy5nZXRJZCgpID0gIiArIHMuZ2V0SWQoKSk7CkBAIC0xMDIsMTIgKzEwMiwxMiBAQAogICAgIH0KIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIHJvdW5kVHJpcDIoQ29sbGVjdGlvbiBjb2xsZWN0aW9uT2ZTbGVzcykgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNsZXNzRUpCMjo6cm91bmRUcmlwMiAiICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2xlc3NFSkIyOjpyb3VuZFRyaXAyICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbk9mU2xlc3MpOwogCiAgICAgICAgIGlmKCBjb2xsZWN0aW9uT2ZTbGVzcy5zaXplKCkgPiAwICkgewogICAgICAgICAgICAgU2xlc3Mgc2xlc3MgPSAoU2xlc3MpIGNvbGxlY3Rpb25PZlNsZXNzLml0ZXJhdG9yKCkubmV4dCgpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnB1dCBTbGVzcy5nZXRJZCgpID0gIiArIHNsZXNzLmdldElkKCkpOyAgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlucHV0IFNsZXNzLmdldElkKCkgPSAiICsgc2xlc3MuZ2V0SWQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gY29sbGVjdGlvbk9mU2xlc3M7CkBAIC0xMTgsMTAgKzExOCwxMCBAQAogICAgICAgICBzY18gPSBzYzsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKQogICAgIHt9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkKICAgICB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9TbGVzc0VKQjMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9TbGVzc0VKQjMuamF2YQppbmRleCAwOTgxMWYzLi40MGM2YWY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9lamIvU2xlc3NFSkIzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL1NsZXNzRUpCMy5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAKICAgICBwcml2YXRlIEBSZXNvdXJjZSBTZXNzaW9uQ29udGV4dCBlamJDb250ZXh0MjsKIAotICAgIEBSZXNvdXJjZSh0eXBlPWpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0LmNsYXNzKSAKKyAgICBAUmVzb3VyY2UodHlwZT1qYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dC5jbGFzcykKICAgICBwcml2YXRlIEVKQkNvbnRleHQgZWpiQ29udGV4dDM7CiAKICAgICBwcml2YXRlIEVKQkNvbnRleHQgZWpiQ29udGV4dDQ7CkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgIHByaXZhdGUgdm9pZCBzZXRFSkJDb250ZXh0NihFSkJDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgZWpiQ29udGV4dDYgPSBjb250ZXh0OwogICAgIH0KLSAgICAKKwogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHVibGljIHZvaWQgYWZ0ZXJDcmVhdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2xlc3NFSkIzOjphZnRlckNyZWF0ZSgpIG1hcmtlZCBhcyBQb3N0Q29uc3RydWN0Iik7CkBAIC0xMzYsMTMgKzEzNiwxMyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIHJvdW5kVHJpcDIoQ29sbGVjdGlvbiBjb2xsZWN0aW9uT2ZTbGVzcykgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNsZXNzRUpCMzo6cm91bmRUcmlwMiAiICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2xlc3NFSkIzOjpyb3VuZFRyaXAyICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbk9mU2xlc3MpOwogICAgICAgICBpZiggY29sbGVjdGlvbk9mU2xlc3Muc2l6ZSgpID4gMCApIHsKICAgICAgICAgICAgIFNsZXNzIHNsZXNzID0gKFNsZXNzKSBjb2xsZWN0aW9uT2ZTbGVzcy5pdGVyYXRvcigpLm5leHQoKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW5wdXQgU2xlc3MuZ2V0SWQoKSA9ICIgKyBzbGVzcy5nZXRJZCgpKTsgIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnB1dCBTbGVzcy5nZXRJZCgpID0gIiArIHNsZXNzLmdldElkKCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uT2ZTbGVzczsKLSAgICB9ICAgIAorICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvYnVpbGQueG1sCmluZGV4IGE3MDRhNmEuLjRlZWYxMzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24zL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9idWlsZC54bWwKQEAgLTU1LDEzICs1NSwxMyBAQAogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cF9zcWwiIGRlcGVuZHM9ImluaXQiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3Auc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJwcmVwYXJlIj4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iZWpiIiBkZXN0ZGlyPSIke2VqYi5idWlsZC5kaXJ9Ij4KICAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9ImdmdjMuY2xhc3NwYXRoIi8+CkBAIC0xMTAsMTEgKzExMCwxMSBAQAogICAgICAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICAgICAgIDxjb3B5IGZpbGU9ImNsaWVudC9NQU5JRkVTVC5NRiIKICAgICAgICAgICAgICAgICAgICB0b2Rpcj0iJHtjbGllbnQuYnVpbGQuZGlyfS9NRVRBLUlORiIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIgotCQkJICAgdG9kaXI9IiR7ZWFyLmJ1aWxkLmRpcn0vTUVUQS1JTkYiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgICAgICAgICAgICB0b2Rpcj0iJHtlYXIuYnVpbGQuZGlyfS9NRVRBLUlORiIvPgorICAgIDwvdGFyZ2V0PgorCiAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveWRpci5hc2FkbWluIiBkZXBlbmRzPSJwcmVwYXJlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24uZGVwbG95ZGlyLmFzYWRtaW4iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kuYXNhZG1pbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLnVuZGVwbG95LmFzYWRtaW4iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgpAQCAtMTQ0LDkgKzE0NCw5IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icHJvY2Vzc1Jlc3VsdCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0IiB2YWx1ZT0iJHtyZXN1bHR9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nIiB2YWx1ZT0iJHtidWlsZH0vJHtsb2cuaWR9Lm91dHB1dC5sb2ciLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgICAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CiAgICAgICAgIDwhLS0KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydERlcmJ5Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZTRmZmQ0OC4uYTdhMGMxYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24zL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjksMjggKzI5LDI4IEBACiBpbXBvcnQgamFrYXJ0YS5wZXJzaXN0ZW5jZS5FbnRpdHlNYW5hZ2VyOwogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIGhvc3Q7CiAgICAgcHJpdmF0ZSBTdHJpbmcgcG9ydDsKIAotICAgIEBQZXJzaXN0ZW5jZVVuaXQgCisgICAgQFBlcnNpc3RlbmNlVW5pdAogICAgICAgICBwcml2YXRlIHN0YXRpYyBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBlbWYxOwogCi0gICAgQFBlcnNpc3RlbmNlVW5pdChuYW1lPSJteWVtZiIsIHVuaXROYW1lPSJmb28iKSAKKyAgICBAUGVyc2lzdGVuY2VVbml0KG5hbWU9Im15ZW1mIiwgdW5pdE5hbWU9ImZvbyIpCiAgICAgICAgIHByaXZhdGUgc3RhdGljIEVudGl0eU1hbmFnZXJGYWN0b3J5IGVtZjI7CiAKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIGhvc3QgPSAoIGFyZ3MubGVuZ3RoID4gMCkgPyBhcmdzWzBdIDogImxvY2FsaG9zdCI7CiAgICAgICAgIHBvcnQgPSAoIGFyZ3MubGVuZ3RoID4gMSkgPyBhcmdzWzFdIDogIjQ4NDgiOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBlbnYgPSBudWxsOwogICAgICAgICB0cnkgewogCkBAIC03NCwxMSArNzQsMTEgQEAKICAgICAgICAgICAgIH0KIAogCi0gICAgICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyAKKyAgICAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICAgICAgIi9lamItZWpiMzAtaGVsbG8tc2Vzc2lvbjMvc2VydmxldCI7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIHdlYmNsaWVudCBzZXJ2bGV0IGF0ICIgKyB1cmwpOwogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYoY29kZSAhPSAyMDApIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluY29ycmVjdCByZXR1cm4gY29kZTogIiArIGNvZGUpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTg4LDE1ICs4OCwxNSBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKbXMgd2ViIHRlc3QgZmFpbGVkLiIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHByaXZhdGUgaW50IGludm9rZVNlcnZsZXQoU3RyaW5nIHVybCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAKKwogICAgICAgICBVUkwgdSA9IG5ldyBVUkwodXJsKTsKLSAgICAgICAgCisKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gYzEgPSAoSHR0cFVSTENvbm5lY3Rpb24pdS5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBpbnQgY29kZSA9IGMxLmdldFJlc3BvbnNlQ29kZSgpOwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7CkBAIC0xMDksNiArMTA5LDYgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9Ci0gICAgCisKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvZWpiL0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9lamIvSGVsbG8uamF2YQppbmRleCBhNWQ5MzNmLi41NGJjY2EwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9lamIvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9lamIvSGVsbG8uamF2YQpAQCAtMTksNSArMTksNSBAQAogcHVibGljIGludGVyZmFjZSBIZWxsbyB7CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9lamIvSGVsbG9FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24zL2VqYi9IZWxsb0VKQi5qYXZhCmluZGV4IGY3N2FmMDMuLjE0MDhkNjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24zL2VqYi9IZWxsb0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24zL2VqYi9IZWxsb0VKQi5qYXZhCkBAIC0yOCwxNiArMjgsMTYgQEAKIAogQFN0YXRlbGVzcyBwdWJsaWMgY2xhc3MgSGVsbG9FSkIgaW1wbGVtZW50cyBIZWxsbyB7CiAKLSAgICBAUGVyc2lzdGVuY2VVbml0IAorICAgIEBQZXJzaXN0ZW5jZVVuaXQKICAgICAgICAgcHJpdmF0ZSBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBlbWYxOwogCi0gICAgQFBlcnNpc3RlbmNlVW5pdChuYW1lPSJteWVtZiIsIHVuaXROYW1lPSJmb28iKSAKKyAgICBAUGVyc2lzdGVuY2VVbml0KG5hbWU9Im15ZW1mIiwgdW5pdE5hbWU9ImZvbyIpCiAgICAgICAgIHByaXZhdGUgRW50aXR5TWFuYWdlckZhY3RvcnkgZW1mMjsKIAogICAgIEBQZXJzaXN0ZW5jZUNvbnRleHQKICAgICAgICAgcHJpdmF0ZSBFbnRpdHlNYW5hZ2VyIGVtMTsKIAotICAgIEBQZXJzaXN0ZW5jZUNvbnRleHQobmFtZT0ibXllbSIsIAorICAgIEBQZXJzaXN0ZW5jZUNvbnRleHQobmFtZT0ibXllbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICB1bml0TmFtZT0iZm9vIiwgdHlwZT1QZXJzaXN0ZW5jZUNvbnRleHRUeXBlLkVYVEVOREVEKQogICAgICAgICBwcml2YXRlIEVudGl0eU1hbmFnZXIgZW0yOwogCkBAIC02MCwxMSArNjAsMTEgQEAKIAogICAgICAgICAgICAgICAgIEVudGl0eU1hbmFnZXIgbG9va3VwZW0yID0gKEVudGl0eU1hbmFnZXIpCiAgICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9teWVtIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uKGUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb0VKQiBzdWNjZXNzZnVsIGluamVjdGlvbiBvZiBFTUYvRU0gcmVmZXJlbmNlcyEiKTsKICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24zL2VqYi9IZWxsb1N0YXRlZnVsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9lamIvSGVsbG9TdGF0ZWZ1bC5qYXZhCmluZGV4IGQ4NTU2OGEuLjQ1YjBkMTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24zL2VqYi9IZWxsb1N0YXRlZnVsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvZWpiL0hlbGxvU3RhdGVmdWwuamF2YQpAQCAtMTksNyArMTksNyBAQAogcHVibGljIGludGVyZmFjZSBIZWxsb1N0YXRlZnVsIHsKIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCk7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzbGVlcEZvcihpbnQgc2VjKTsKIAogICAgIHB1YmxpYyB2b2lkIHBpbmcoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24zL2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhCmluZGV4IDQ0NDFiYjguLjk5YmVjMzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24zL2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvZWpiL0hlbGxvU3RhdGVmdWxFSkIuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogCiBAU3RhdGVmdWwgcHVibGljIGNsYXNzIEhlbGxvU3RhdGVmdWxFSkIgaW1wbGVtZW50cyBIZWxsb1N0YXRlZnVsIHsKIAotICAgIAorCiAgICAgQFBvc3RDb25zdHJ1Y3QgcHVibGljIHZvaWQgcG9zdENvbnN0cnVjdGlvbigpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlZnVsRUpCOjpwb3N0Q29uc3RydWN0aW9uKCkiKTsKICAgICB9CkBAIC0zMSwxMiArMzEsMTIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzbGVlcEZvcihpbnQgc2VjKSB7Ci0JdHJ5IHsKLQkgICAgZm9yIChpbnQgaT0wIDsgaTxzZWM7IGkrKykgewotCQlUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEwMDApOwotCSAgICB9Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JfQorICAgIHRyeSB7CisgICAgICAgIGZvciAoaW50IGk9MCA7IGk8c2VjOyBpKyspIHsKKyAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMDAwKTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBwaW5nKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvcGVyc2lzdGVuY2UvUGVyc29uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9wZXJzaXN0ZW5jZS9QZXJzb24uamF2YQppbmRleCBmMGYxN2IwLi5mNzE2OGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9wZXJzaXN0ZW5jZS9QZXJzb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9wZXJzaXN0ZW5jZS9QZXJzb24uamF2YQpAQCAtMzAsMTAgKzMwLDEwIEBACiAgICAgcHVibGljIFBlcnNvbihTdHJpbmcgbmFtZSl7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKXsKICAgICAgICAgcmV0dXJuICJQZXJzb246IHsiKyIobmFtZSA9ICIrbmFtZSsiKX0iOwogICAgIH0KIAogfQotIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9zZXJ2bGV0L0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9zZXJ2bGV0L0hlbGxvLmphdmEKaW5kZXggYTVkOTMzZi4uNTRiY2NhMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvc2VydmxldC9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24zL3NlcnZsZXQvSGVsbG8uamF2YQpAQCAtMTksNSArMTksNSBAQAogcHVibGljIGludGVyZmFjZSBIZWxsbyB7CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9zZXJ2bGV0L0hlbGxvU3RhdGVmdWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24zL3NlcnZsZXQvSGVsbG9TdGF0ZWZ1bC5qYXZhCmluZGV4IGQ4NTU2OGEuLjQ1YjBkMTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24zL3NlcnZsZXQvSGVsbG9TdGF0ZWZ1bC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24zL3NlcnZsZXQvSGVsbG9TdGF0ZWZ1bC5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBwdWJsaWMgaW50ZXJmYWNlIEhlbGxvU3RhdGVmdWwgewogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oKTsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNsZWVwRm9yKGludCBzZWMpOwogCiAgICAgcHVibGljIHZvaWQgcGluZygpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvc2VydmxldC9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9zZXJ2bGV0L1NlcnZsZXQuamF2YQppbmRleCBlODM1ZmJiLi4zYTUxZTg0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9zZXJ2bGV0L1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9zZXJ2bGV0L1NlcnZsZXQuamF2YQpAQCAtODAsMzAgKzgwLDMwIEBACiAgICAgfQogCiAKLSAgICBAUGVyc2lzdGVuY2VVbml0IAorICAgIEBQZXJzaXN0ZW5jZVVuaXQKICAgICAgICAgcHJpdmF0ZSBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBlbWYxOwogCi0gICAgQFBlcnNpc3RlbmNlVW5pdChuYW1lPSJteWVtZiIsIHVuaXROYW1lPSJmb28iKSAKKyAgICBAUGVyc2lzdGVuY2VVbml0KG5hbWU9Im15ZW1mIiwgdW5pdE5hbWU9ImZvbyIpCiAgICAgICAgIHByaXZhdGUgRW50aXR5TWFuYWdlckZhY3RvcnkgZW1mMjsKIAogICAgIEBQZXJzaXN0ZW5jZUNvbnRleHQKICAgICAgICAgcHJpdmF0ZSBFbnRpdHlNYW5hZ2VyIGVtMTsKIAotICAgIEBQZXJzaXN0ZW5jZUNvbnRleHQobmFtZT0ibXllbSIsIAorICAgIEBQZXJzaXN0ZW5jZUNvbnRleHQobmFtZT0ibXllbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICB1bml0TmFtZT0iZm9vIiwgdHlwZT1QZXJzaXN0ZW5jZUNvbnRleHRUeXBlLlRSQU5TQUNUSU9OKQogICAgICAgICBwcml2YXRlIEVudGl0eU1hbmFnZXIgZW0yOwogCiAgICAgcHVibGljIHZvaWQgIGluaXQoIFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiB3ZWJjbGllbnQ6OnNlcnZsZXQuLi4gaW5pdCgpIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VydmljZSAoIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEgLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3AgKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAgICAgICAgICAgICAgICAKKwogICAgICAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKQEAgLTEyMiw3ICsxMjIsNyBAQAogCiAgICAgICAgICAgICAgICAgRW50aXR5TWFuYWdlciBsb29rdXBlbTIgPSAoRW50aXR5TWFuYWdlcikKICAgICAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L215ZW0iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VydmxldCBzdWNjZXNzZnVsIGluamVjdGlvbiBvZiBFTUYvRU0gcmVmZXJlbmNlcyEiKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiT25lIG9yIG1vcmUgRU1GL0VNIHJlZmVyZW5jZXMiICsKQEAgLTE1MSwxNyArMTUxLDE3IEBACiAgICAgICAgICAgICBoZWxsb1N0YXRlZnVsLmhlbGxvKCk7CiAgICAgICAgICAgICBoZWxsb1N0YXRlZnVsMi5oZWxsbygpOwogCi0gICAgICAgICAgICBIZWxsbyBoZWxsb1N0YXRlbGVzczMgPSAoSGVsbG8pIAorICAgICAgICAgICAgSGVsbG8gaGVsbG9TdGF0ZWxlc3MzID0gKEhlbGxvKQogICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9oZWxsb1N0YXRlbGVzczMiKTsKIAogICAgICAgICAgICAgaGVsbG9TdGF0ZWxlc3MzLmhlbGxvKCk7CiAKLSAgICAgICAgICAgIEhlbGxvIGhlbGxvU3RhdGVsZXNzNCA9IChIZWxsbykgCisgICAgICAgICAgICBIZWxsbyBoZWxsb1N0YXRlbGVzczQgPSAoSGVsbG8pCiAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2hlbGxvU3RhdGVsZXNzNCIpOwogCiAgICAgICAgICAgICBoZWxsb1N0YXRlbGVzczQuaGVsbG8oKTsKIAotICAgICAgICAgICAgSGVsbG9TdGF0ZWZ1bCBoZWxsb1N0YXRlZnVsMyA9IChIZWxsb1N0YXRlZnVsKSAKKyAgICAgICAgICAgIEhlbGxvU3RhdGVmdWwgaGVsbG9TdGF0ZWZ1bDMgPSAoSGVsbG9TdGF0ZWZ1bCkKICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvaGVsbG9TdGF0ZWZ1bDMiKTsKIAogICAgICAgICAgICAgaGVsbG9TdGF0ZWZ1bDMuaGVsbG8oKTsKQEAgLTE5Myw2NiArMTkzLDY2IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRzNiBsb2dpbiB0aW1lb3V0ID0gIiArIGxvZ2luVGltZW91dCk7CiAKIAotCSAgICB0cnkgewotCQlNeVRocmVhZCB0aHJlYWQgPSBuZXcgTXlUaHJlYWQoaGVsbG9TdGF0ZWZ1bDIpOwotCQl0aHJlYWQuc3RhcnQoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgTXlUaHJlYWQgdGhyZWFkID0gbmV3IE15VGhyZWFkKGhlbGxvU3RhdGVmdWwyKTsKKyAgICAgICAgdGhyZWFkLnN0YXJ0KCk7CiAKLQkJc2xlZXBGb3IoMTApOwotCQloZWxsb1N0YXRlZnVsMi5waW5nKCk7Ci0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oIkRpZCBub3QgZ2V0IENvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24iKTsKLQkgICAgfSBjYXRjaCAoamFrYXJ0YS5lamIuQ29uY3VycmVudEFjY2Vzc0V4Y2VwdGlvbiBjb25FeCkgewotCQk7ICAgLy9FdmVyeXRoaW5nIGlzIGZpbmUKLQkgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRoKSB7Ci0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oIkdvdCBzb21lIHdpZXJkIGV4Y2VwdGlvbjogIiArIHRoKTsKLQkgICAgfQorICAgICAgICBzbGVlcEZvcigxMCk7CisgICAgICAgIGhlbGxvU3RhdGVmdWwyLnBpbmcoKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkIG5vdCBnZXQgQ29uY3VycmVudEFjY2Vzc0V4Y2VwdGlvbiIpOworICAgICAgICB9IGNhdGNoIChqYWthcnRhLmVqYi5Db25jdXJyZW50QWNjZXNzRXhjZXB0aW9uIGNvbkV4KSB7CisgICAgICAgIDsgICAvL0V2ZXJ5dGhpbmcgaXMgZmluZQorICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdGgpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiR290IHNvbWUgd2llcmQgZXhjZXB0aW9uOiAiICsgdGgpOworICAgICAgICB9CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic3VjY2Vzc2Z1bGx5IGFjY2Vzc2VkIGNvbm5lY3Rpb25zIik7CiAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8SFRNTD4gPEhFQUQ+IDxUSVRMRT4gSk1TIFNlcnZsZXQgT3V0cHV0IDwvVElUTEU+IDwvSEVBRD4gPEJPRFkgQkdDT0xPUj13aGl0ZT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Q0VOVEVSPiA8Rk9OVCBzaXplPSsxIENPTE9SPWJsdWU+RGF0YWJhc2VTZXJ2ZWx0IDo6IEFsbCBpbmZvcm1hdGlvbiBJIGNhbiBnaXZlIDwvRk9OVD4gPC9DRU5URVI+IDxwPiAiICk7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IENvbnRleHQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0Q29udGV4dFBhdGgoKSArICI8YnI+IiApOyAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gU2VydmxldCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRTZXJ2bGV0UGF0aCgpICsgIjxicj4iICk7IAotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBQYXRoIEluZm8gOiAgPC9GT05UPiAiICsgcmVxLmdldFBhdGhJbmZvKCkgKyAiPGJyPiIgKTsgCisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IENvbnRleHQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0Q29udGV4dFBhdGgoKSArICI8YnI+IiApOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBTZXJ2bGV0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldFNlcnZsZXRQYXRoKCkgKyAiPGJyPiIgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gUGF0aCBJbmZvIDogIDwvRk9OVD4gIiArIHJlcS5nZXRQYXRoSW5mbygpICsgIjxicj4iICk7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9CT0RZPiA8L0hUTUw+ICIpOwotICAgICAgICAgICAgCisKICAgICAgICAgfWNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ3ZWJjbGllbnQgc2VydmxldCB0ZXN0IGZhaWxlZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZXgpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgfQogCi0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkICBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIHdlYmNsaWVudDo6c2VydmxldCBkZXN0cm95Iik7CiAgICAgfQogCiAgICAgY2xhc3MgTXlUaHJlYWQgZXh0ZW5kcyBUaHJlYWQgewotCUhlbGxvU3RhdGVmdWwgcmVmOworICAgIEhlbGxvU3RhdGVmdWwgcmVmOwogCi0JTXlUaHJlYWQoSGVsbG9TdGF0ZWZ1bCByZWYpIHsKLQkgICAgdGhpcy5yZWYgPSByZWY7Ci0JfQorICAgIE15VGhyZWFkKEhlbGxvU3RhdGVmdWwgcmVmKSB7CisgICAgICAgIHRoaXMucmVmID0gcmVmOworICAgIH0KIAotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkgICAgdHJ5IHsKLQkJcmVmLnNsZWVwRm9yKDIwKTsKLQkgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRoKSB7Ci0JCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDb3VsZCBub3QgaW52b2tlIHdhaXRmb3IoKSBtZXRob2QiKTsKLQkgICAgfQotCX0KKyAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIHJlZi5zbGVlcEZvcigyMCk7CisgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0aCkgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ291bGQgbm90IGludm9rZSB3YWl0Zm9yKCkgbWV0aG9kIik7CisgICAgICAgIH0KKyAgICB9CiAgICAgfQogCiAKICAgICBwcml2YXRlIHZvaWQgc2xlZXBGb3IoaW50IHNlYykgewotCXRyeSB7Ci0JICAgIGZvciAoaW50IGk9MCA7IGk8c2VjOyBpKyspIHsKLQkJVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMDAwKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJbIiArIGkgKyAiLyIgKyBzZWMgKyAiXTogU2xlZXBpbmcuLi4uIik7Ci0JICAgIH0KLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgZm9yIChpbnQgaT0wIDsgaTxzZWM7IGkrKykgeworICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEwMDApOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsiICsgaSArICIvIiArIHNlYyArICJdOiBTbGVlcGluZy4uLi4iKTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgIH0KICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3htbG92ZXJyaWRlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3htbG92ZXJyaWRlL2J1aWxkLnhtbAppbmRleCBiYzhkYjVhLi45YWI5ZTZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci94bWxvdmVycmlkZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIveG1sb3ZlcnJpZGUvYnVpbGQueG1sCkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgICAgPGNsYXNzcGF0aCByZWZpZD0iZ2Z2My5jbGFzc3BhdGgiLz4KICAgICAgICAgIDwvamF2YWM+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS51c2VyIiBkZXBlbmRzPSJzZXRBc2FkbWluQXJnc1dpdGhvdXRQYXNzd29yZCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLmNyZWF0ZXVzZXIuYXNhZG1pbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCkBAIC04Nyw4ICs4Nyw4IEBACiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICAgICAgPC9tZXRhaW5mPgogICAgICAgICA8L2Vhcj4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS5hc2FkbWluIiBkZXBlbmRzPSJwcmVwYXJlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24uZGVwbG95LmFzYWRtaW4iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0iLS1yZXRyaWV2ZSAke2FyY2hpdmVkaXJ9IC0tbmFtZSAke3Rlc3ROYW1lfSAke2FsbC5lYXJ9Ii8+CkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdE5hbWUiIHZhbHVlPSIke3Rlc3ROYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCIgZGVwZW5kcz0icHJlcGFyZSxzZXRPcmJQb3J0MiI+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIgcmVzdWx0cHJvcGVydHk9InJlc3VsdCIgZmFpbG9uZXJyb3I9ImZhbHNlIiBvdXRwdXQ9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIj4KQEAgLTEyMiw5ICsxMjIsOSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InByb2Nlc3NSZXN1bHQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3VsdCIgdmFsdWU9IiR7cmVzdWx0fSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZyIgdmFsdWU9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIi8+Ci0gICAgICAgIDwvYW50Y2FsbD4gIAorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUudXNlciIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzc2VtYmxlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci94bWxvdmVycmlkZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci94bWxvdmVycmlkZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYjQzZTM4MC4uZGRmMDBjNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIveG1sb3ZlcnJpZGUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3htbG92ZXJyaWRlL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsOCArMjgsOCBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRlcGxveW1lbnQtZWpiMzAtZWFyLXhtbG92ZXJyaWRlIik7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwcml2YXRlIHN0YXRpYyBARUpCIFNsZXNzIHNsZXNzOwogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU2Z1bCBzZnVsOwogCkBAIC03Myw2ICs3Myw2IEBACiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgtMSk7CiAgICAgICAgIH0KIAotICAgIAlyZXR1cm47CisgICAgICAgIHJldHVybjsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci94bWxvdmVycmlkZS9lamIvU2Z1bC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIveG1sb3ZlcnJpZGUvZWpiL1NmdWwuamF2YQppbmRleCA3Zjk2MTI1Li42NTk5YzAyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci94bWxvdmVycmlkZS9lamIvU2Z1bC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3htbG92ZXJyaWRlL2VqYi9TZnVsLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29tLnN1bi5zMWFzZGV2LmRlcGxveW1lbnQuZWpiMzAuZWFyLnhtbG92ZXJyaWRlOwogCiBpbXBvcnQgamFrYXJ0YS5lamIuUmVtb3RlOwotCQorCiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIFNmdWwKIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3htbG92ZXJyaWRlL2VqYi9TZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci94bWxvdmVycmlkZS9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IDk2ZTgwNjkuLjM0OTdhOWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3htbG92ZXJyaWRlL2VqYi9TZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIveG1sb3ZlcnJpZGUvZWpiL1NmdWxFSkIuamF2YQpAQCAtMTE0LDcgKzExNCw3IEBACiAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNhbm5vdCBnZXQgZXhwZWN0ZWQgdmFsdWU6ICIgKyBleCk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICAgICAgcmV0dXJuICJnb29kTmlnaHQiOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC93YXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC93YXIvYnVpbGQueG1sCmluZGV4IDQzMmM1YWIuLmJhYmZlNGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9idWlsZC54bWwKQEAgLTIzLDE0ICsyMywxNCBAQAogCiA8cHJvamVjdCBuYW1lPSJlamIzMCIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotCSZjb21tb25CdWlsZDsKKyAgICAmY29tbW9uQnVpbGQ7CiAKLQk8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KLQkJPGFudCBkaXI9ImpzcCIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9qc3AiLz4KLQkJPC9hbnQ+Ci0JCTxhbnQgZGlyPSJzZXJ2bGV0IiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3NlcnZsZXQiLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CisgICAgICAgIDxhbnQgZGlyPSJqc3AiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vanNwIi8+CisgICAgICAgIDwvYW50PgorICAgICAgICA8YW50IGRpcj0ic2VydmxldCIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9zZXJ2bGV0Ii8+CisgICAgICAgIDwvYW50PgorICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC93YXIvanNwL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL2pzcC9XZWJUZXN0LmphdmEKaW5kZXggNGViZTBhZC4uYTk3NDA4NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC93YXIvanNwL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9qc3AvV2ViVGVzdC5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDQsMTQgKzQ0LDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArICIvIgogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9pbmRleC5qc3AiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL2pzcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9qc3AvYnVpbGQueG1sCmluZGV4IGYzN2I1NTEuLjU2YTZiZjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL2pzcC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC93YXIvanNwL2J1aWxkLnhtbApAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9ImdmdjMuY2xhc3NwYXRoIi8+CiAgICAgICAgIDwvamF2YWM+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPHdhciBkZXN0ZmlsZT0iJHt3ZWIud2FyfSIgd2VieG1sPSJkZXNjcmlwdG9yL3dlYi54bWwiPgogICAgICAgICAgICAgPGNsYXNzZXMgZGlyPSIke2J1aWxkfSIgZXhjbHVkZXM9IldlYlRlc3QuY2xhc3MiLz4KQEAgLTU2LDggKzU2LDggQEAKICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJteS50bGQiLz4KICAgICAgICAgICAgIDwvd2ViaW5mPgogICAgICAgICA8L3dhcj4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS5hc2FkbWluIiBkZXBlbmRzPSJwcmVwYXJlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24uZGVwbG95LmFzYWRtaW4iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0iLS1uYW1lICR7dGVzdE5hbWV9ICR7d2ViLndhcn0iLz4KQEAgLTc3LDcgKzc3LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdE5hbWUiIHZhbHVlPSIke3Rlc3ROYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bndlYiIgZGVwZW5kcz0icHJlcGFyZSxzZXRIdHRwUG9ydDIiPgogICAgICAgICA8amF2YVdpdGhSZXN1bHQgZm9yaz0idHJ1ZSIgZmFpbG9uZXJyb3I9ImZhbHNlIiBqdm09IiR7SkFWQX0iCkBAIC05NCw5ICs5NCw5IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icHJvY2Vzc1Jlc3VsdCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0IiB2YWx1ZT0iJHtyZXN1bHR9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nIiB2YWx1ZT0iJHtidWlsZH0vJHtsb2cuaWR9Lm91dHB1dC5sb2ciLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgCisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzc2VtYmxlIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVjbGFyZS10ZXN0Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL2pzcC93ZWIvTXlGaWx0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL2pzcC93ZWIvTXlGaWx0ZXIuamF2YQppbmRleCA0MzlhODY4Li5hNjI1YmU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9qc3Avd2ViL015RmlsdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC93YXIvanNwL3dlYi9NeUZpbHRlci5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgcHVibGljIHZvaWQgaW5pdChGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAKICAgICAgICAgU2VydmxldENvbnRleHQgc2MgPSBmaWx0ZXJDb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKLSAgICAKKwogICAgICAgICB0cnkgewogCiAgICAgICAgICAgICBpbnQgbG9naW5UaW1lb3V0ID0gZHMxLmdldExvZ2luVGltZW91dCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC93YXIvanNwL3dlYi9NeVRhZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC93YXIvanNwL3dlYi9NeVRhZy5qYXZhCmluZGV4IGZhZDBmMzkuLmQ0OTdhMDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL2pzcC93ZWIvTXlUYWcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9qc3Avd2ViL015VGFnLmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBKc3BFeGNlcHRpb24oZXgpOwotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIFNLSVBfQk9EWTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9zZXJ2bGV0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL3NlcnZsZXQvV2ViVGVzdC5qYXZhCmluZGV4IDk5M2NmM2EuLjNjYTYzNmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL3NlcnZsZXQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL3NlcnZsZXQvV2ViVGVzdC5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgIHBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMV0pOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDQsMTIgKzQ0LDEyIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFN0cmluZyBjb250ZXh0UGF0aCA9ICIvIiArIGNvbnRleHRSb290ICsgIi9zZXJ2bGV0IjsKICAgICAgICAgU29ja2V0IHMgPSBuZXcgU29ja2V0KGhvc3QsIHBvcnQpOwogCiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHMuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKSk7CiAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjBcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiQXV0aG9yaXphdGlvbjogQmFzaWMgYWpKbFpUcHFNbVZsXG4iLmdldEJ5dGVzKCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC93YXIvc2VydmxldC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9zZXJ2bGV0L2J1aWxkLnhtbAppbmRleCA0MjYzOWIxLi5hMzRmYWJkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9zZXJ2bGV0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9zZXJ2bGV0L2J1aWxkLnhtbApAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAgICAgICAgIHZhbHVlPSJkZWxldGUtZmlsZS11c2VyICR7QVNBRE1JTi1BUkdTfSAtLWF1dGhyZWFsbW5hbWUgZmlsZSBqMmVlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8d2FyIGRlc3RmaWxlPSIke3dlYi53YXJ9IiB3ZWJ4bWw9ImRlc2NyaXB0b3Ivd2ViLnhtbCI+CiAgICAgICAgICAgICA8Y2xhc3NlcyBkaXI9IiR7YnVpbGR9IiBleGNsdWRlcz0iV2ViVGVzdC5jbGFzcyIvPgpAQCAtNzAsOCArNzAsOCBAQAogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InN1bi13ZWIueG1sIi8+CiAgICAgICAgICAgICA8L3dlYmluZj4KICAgICAgICAgPC93YXI+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kuYXNhZG1pbiIgZGVwZW5kcz0icHJlcGFyZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLmRlcGxveS5hc2FkbWluIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9Ii0tbmFtZSAke3Rlc3ROYW1lfSAke3dlYi53YXJ9Ii8+CkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSIke3Rlc3ROYW1lfSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW53ZWIiIGRlcGVuZHM9InByZXBhcmUsc2V0SHR0cFBvcnQyIj4KICAgICAgICAgPGphdmFXaXRoUmVzdWx0IGZvcms9InRydWUiIGZhaWxvbmVycm9yPSJmYWxzZSIganZtPSIke0pBVkF9IgpAQCAtMTA4LDkgKzEwOCw5IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icHJvY2Vzc1Jlc3VsdCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0IiB2YWx1ZT0iJHtyZXN1bHR9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nIiB2YWx1ZT0iJHtidWlsZH0vJHtsb2cuaWR9Lm91dHB1dC5sb2ciLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgCisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS51c2VyIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNzZW1ibGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL3NlcnZsZXQvd2ViL015RmlsdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9zZXJ2bGV0L3dlYi9NeUZpbHRlci5qYXZhCmluZGV4IDhjZTZjOWUuLjFhYTMyOTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL3NlcnZsZXQvd2ViL015RmlsdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC93YXIvc2VydmxldC93ZWIvTXlGaWx0ZXIuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogCiAgICAgICAgIFNlcnZsZXRDb250ZXh0IHNjID0gZmlsdGVyQ29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7Ci0gICAgCisKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgaW50IGxvZ2luVGltZW91dCA9IGRzMS5nZXRMb2dpblRpbWVvdXQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL3NlcnZsZXQvd2ViL1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL3NlcnZsZXQvd2ViL1NlcnZsZXQuamF2YQppbmRleCA3Y2Q3M2I4Li43NGJlZDg2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9zZXJ2bGV0L3dlYi9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC93YXIvc2VydmxldC93ZWIvU2VydmxldC5qYXZhCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgIGlmIChyZXEuaXNVc2VySW5Sb2xlKCJqMmVlIikgJiYgIXJlcS5pc1VzZXJJblJvbGUoImd1ZXN0IikpIHsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJIZWxsbyBXb3JsZCIpOwogICAgICAgICAgICAgaWYgKHJlcS5nZXRTZXNzaW9uKGZhbHNlKSAhPSBudWxsICYmCi0gICAgICAgICAgICAgICAgICAgIEJvb2xlYW4uVFJVRS5lcXVhbHMocGNvbnN0cnVjdC5nZXQoKSkpIHsgCisgICAgICAgICAgICAgICAgICAgIEJvb2xlYW4uVFJVRS5lcXVhbHMocGNvbnN0cnVjdC5nZXQoKSkpIHsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbihyZXEuZ2V0U2Vzc2lvbihmYWxzZSkuZ2V0QXR0cmlidXRlKAogICAgICAgICAgICAgICAgICAgICAiZGVwbG95bWVudC5lamIzMC53YXIuc2VydmxldCIpKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9idWlsZC54bWwKaW5kZXggMGFhYmFkMC4uMzRlNzRmNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9idWlsZC54bWwKQEAgLTIzLDE1ICsyMywxNSBAQAogCiA8cHJvamVjdCBuYW1lPSJlamIzMSIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotCSZjb21tb25CdWlsZDsKKyAgICAmY29tbW9uQnVpbGQ7CiAKICAgICAgICAgPCEtLSBPbmx5IHJ1biB0aGUgdGVzdHMgaW4gUEUgbW9kZSB0aWxsIGFsbCB0ZXN0cyBwYXNzIGluIEVFIC0tPgotCTx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgotCQk8YW50IGRpcj0iZWpibGl0ZSIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9lamJsaXRlIi8+Ci0JCTwvYW50PgotCQk8YW50IGRpcj0iam5kaXZhbGlkYXRpb24iIHRhcmdldD0icHJpdmF0ZS1hbGwiPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vam5kaXZhbGlkYXRpb24iLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CisgICAgICAgIDxhbnQgZGlyPSJlamJsaXRlIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2VqYmxpdGUiLz4KKyAgICAgICAgPC9hbnQ+CisgICAgICAgIDxhbnQgZGlyPSJqbmRpdmFsaWRhdGlvbiIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9qbmRpdmFsaWRhdGlvbiIvPgorICAgICAgICA8L2FudD4KKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvYnVpbGQueG1sCmluZGV4IDYwY2IxZjcuLmY5NzkwOTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2J1aWxkLnhtbApAQCAtMjMsMTEgKzIzLDExIEBACiAKIDxwcm9qZWN0IG5hbWU9ImVqYmxpdGUiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLQkmY29tbW9uQnVpbGQ7CisgICAgJmNvbW1vbkJ1aWxkOwogCi0JPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+Ci0JCTxhbnQgZGlyPSJqYXZhbW9kdWxlIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2phdmFtb2R1bGUiLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CisgICAgICAgIDxhbnQgZGlyPSJqYXZhbW9kdWxlIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2phdmFtb2R1bGUiLz4KKyAgICAgICAgPC9hbnQ+CisgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggODk3MzU1Yy4uMmVmODczNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzAsNDMgKzMwLDQzIEBACiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiMzEtZWpibGl0ZS1qYXZhbW9kdWxlIik7Ci0JYXBwTmFtZSA9IGFyZ3NbMF07Ci0JQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7ICAgICAgIAotICAgICAgICBjbGllbnQuZG9UZXN0KCk7CQorICAgIGFwcE5hbWUgPSBhcmdzWzBdOworICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOworICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgfQogCiAgICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7Ci0JaG9zdCA9IGFyZ3NbMV07CisgICAgaG9zdCA9IGFyZ3NbMV07CiAgICAgICAgIHBvcnQgPSBhcmdzWzJdOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyAKKyAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICAgICAiLyIgKyBhcHBOYW1lICsgIi9IZWxsb1NlcnZsZXQiOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIHdlYmNsaWVudCBzZXJ2bGV0IGF0ICIgKyB1cmwpOwogCi0JICAgIFVSTCB1ID0gbmV3IFVSTCh1cmwpOwotICAgICAgICAKLQkgICAgSHR0cFVSTENvbm5lY3Rpb24gYzEgPSAoSHR0cFVSTENvbm5lY3Rpb24pdS5vcGVuQ29ubmVjdGlvbigpOwotCSAgICBpbnQgY29kZSA9IGMxLmdldFJlc3BvbnNlQ29kZSgpOwotCSAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7Ci0JICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKLQkgICAgU3RyaW5nIGxpbmUgPSBudWxsOwotCSAgICB3aGlsZSgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpCi0JCVN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKLQkgICAgaWYoY29kZSAhPSAyMDApIHsKLQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluY29ycmVjdCByZXR1cm4gY29kZTogIiArIGNvZGUpOwotCSAgICB9CisgICAgICAgIFVSTCB1ID0gbmV3IFVSTCh1cmwpOworCisgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKXUub3BlbkNvbm5lY3Rpb24oKTsKKyAgICAgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKKyAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOworICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlciAobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CisgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKKyAgICAgICAgd2hpbGUoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7CisgICAgICAgIGlmKGNvZGUgIT0gMjAwKSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbmNvcnJlY3QgcmV0dXJuIGNvZGU6ICIgKyBjb2RlKTsKKyAgICAgICAgfQogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0IGNvbXBsZXRlIik7Ci0JICAgIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKLQl9CisgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0Jhck1hbmFnZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvQmFyTWFuYWdlZEJlYW4uamF2YQppbmRleCBkMWRmM2Y2Li40YWU3MTI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvQmFyTWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvQmFyTWFuYWdlZEJlYW4uamF2YQpAQCAtMjksNyArMjksNyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEJhck1hbmFnZWRCZWFuOjppbml0KCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBCYXJNYW5hZ2VkQmVhbjo6aW5pdCgpICIpOwogICAgIH0KIAogICAgcHVibGljIHZvaWQgYmFyKCkgewpAQCAtMzksMTIgKzM5LDEyIEBACiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gQmFyTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEJhck1hbmFnZWRCZWFuOjpkZXN0cm95KCkgIik7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQlyZXR1cm4gIkJhck1hbmFnZWRCZWFuIHRoaXMgPSAiICsgc3VwZXIudG9TdHJpbmcoKSArIAotCSAgICAiIHMgPSAiICsgcyArICIgLCBkcyA9ICIgKyBkczsKKyAgICByZXR1cm4gIkJhck1hbmFnZWRCZWFuIHRoaXMgPSAiICsgc3VwZXIudG9TdHJpbmcoKSArCisgICAgICAgICIgcyA9ICIgKyBzICsgIiAsIGRzID0gIiArIGRzOwogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvRm9vTWFuYWdlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9Gb29NYW5hZ2VkQmVhbi5qYXZhCmluZGV4IGVhNjBhOGUuLjA4M2E5ODAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9Gb29NYW5hZ2VkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9Gb29NYW5hZ2VkQmVhbi5qYXZhCkBAIC0zOCwyMCArMzgsMjAgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjo6aW5pdCgpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmluaXQoKSAiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBmb28oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjo6Zm9vKCkgIik7Ci0JYm1iLmJhcigpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmZvbygpICIpOworICAgIGJtYi5iYXIoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBmb29iYXIoU3RyaW5nIHMpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImZvb2Jhcjo6cyA9ICIgKyBzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZvb2Jhcjo6cyA9ICIgKyBzKTsKICAgICB9CiAKICAgICBwdWJsaWMgT2JqZWN0IGdldFRoaXMoKSB7Ci0JcmV0dXJuIHRoaXM7CisgICAgcmV0dXJuIHRoaXM7CiAgICAgfQogCiAgICAgcHVibGljIGludCByZXR1cm5JbnROb0V4Y2VwdGlvbnMoKSB7IHJldHVybiAxOyB9CkBAIC03MCwyMCArNzAsMjAgQEAKIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKICAgICB9CiAKIAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JcmV0dXJuICJGb29NYW5hZ2VkQmVhbiB0aGlzID0gIiArIHN1cGVyLnRvU3RyaW5nKCkgKyAKLQkJCSAgICIgcyA9ICIgKyBzICsgIiAsIG9yYiA9ICIgKyBvcmIgKyAKLQkgICAgIiAsIGJtYiA9ICIgKyBibWIgKyAiICwgZW0gPSAiICsgZW07CisgICAgcmV0dXJuICJGb29NYW5hZ2VkQmVhbiB0aGlzID0gIiArIHN1cGVyLnRvU3RyaW5nKCkgKworICAgICAgICAgICAgICAgIiBzID0gIiArIHMgKyAiICwgb3JiID0gIiArIG9yYiArCisgICAgICAgICIgLCBibWIgPSAiICsgYm1iICsgIiAsIGVtID0gIiArIGVtOwogICAgIH0KIAogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IGFyb3VuZChJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjphcm91bmQoKSAiKTsKLQlyZXR1cm4gYy5wcm9jZWVkKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjo6YXJvdW5kKCkgIik7CisgICAgcmV0dXJuIGMucHJvY2VlZCgpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0hlbGxvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0hlbGxvU2VydmxldC5qYXZhCmluZGV4IDc4Mjc3ZDIuLjhkMjdhZjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9IZWxsb1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvSGVsbG9TZXJ2bGV0LmphdmEKQEAgLTczLDkxICs3Myw5MSBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmluaXQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2VydmxldDo6aW5pdCIpOwogCi0JdHJ5IHsKLQkgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgc2IyID0gKFNpbmdsZXRvbkJlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvU2luZ2xldG9uQmVhbiIpOwotCSAgICBzYjMgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TaW5nbGV0b25CZWFuIWNvbS5hY21lLlNpbmdsZXRvbkJlYW4iKTsKKyAgICB0cnkgeworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBzYjIgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TaW5nbGV0b25CZWFuIik7CisgICAgICAgIHNiMyA9IChTaW5nbGV0b25CZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL1NpbmdsZXRvbkJlYW4hY29tLmFjbWUuU2luZ2xldG9uQmVhbiIpOwogCi0JICAgIHNiNCA9IChTaW5nbGV0b25CZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL0VTMSIpOwotCSAgICBzYjUgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvRVMyIik7CisgICAgICAgIHNiNCA9IChTaW5nbGV0b25CZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL0VTMSIpOworICAgICAgICBzYjUgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvRVMyIik7CiAKLQkgICAgc2xzYiA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL1N0YXRlbGVzc0JlYW4iKTsKLQkgICAgc2xzYjIgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOmFwcC9lamItZWpiMzEtZWpibGl0ZS1qYXZhbW9kdWxlLXdlYi9TdGF0ZWxlc3NCZWFuIik7Ci0JICAgIHNsc2IzID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTphcHAvZWpiLWVqYjMxLWVqYmxpdGUtamF2YW1vZHVsZS13ZWIvU3RhdGVsZXNzQmVhbiFjb20uYWNtZS5TdGF0ZWxlc3NCZWFuIik7CisgICAgICAgIHNsc2IgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TdGF0ZWxlc3NCZWFuIik7CisgICAgICAgIHNsc2IyID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTphcHAvZWpiLWVqYjMxLWVqYmxpdGUtamF2YW1vZHVsZS13ZWIvU3RhdGVsZXNzQmVhbiIpOworICAgICAgICBzbHNiMyA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1lamJsaXRlLWphdmFtb2R1bGUtd2ViL1N0YXRlbGVzc0JlYW4hY29tLmFjbWUuU3RhdGVsZXNzQmVhbiIpOwogCi0JICAgIHNsc2I0ID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTphcHAvRUwxIik7Ci0JICAgIHNsc2I1ID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTphcHAvZW52L0VMMiIpOworICAgICAgICBzbHNiNCA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL0VMMSIpOworICAgICAgICBzbHNiNSA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL2Vudi9FTDIiKTsKIAotCSAgICBmb280ID0gKEZvb01hbmFnZWRCZWFuKSAKLQkJaWMubG9va3VwKCJqYXZhOm1vZHVsZS9mb29tYW5hZ2VkYmVhbiIpOworICAgICAgICBmb280ID0gKEZvb01hbmFnZWRCZWFuKQorICAgICAgICBpYy5sb29rdXAoImphdmE6bW9kdWxlL2Zvb21hbmFnZWRiZWFuIik7CiAKLQkgICAgZm9vNSA9IChGb29NYW5hZ2VkQmVhbikgCi0JCWljLmxvb2t1cCgiamF2YTphcHAvZWpiLWVqYjMxLWVqYmxpdGUtamF2YW1vZHVsZS13ZWIvZm9vbWFuYWdlZGJlYW4iKTsKKyAgICAgICAgZm9vNSA9IChGb29NYW5hZ2VkQmVhbikKKyAgICAgICAgaWMubG9va3VwKCJqYXZhOmFwcC9lamItZWpiMzEtZWpibGl0ZS1qYXZhbW9kdWxlLXdlYi9mb29tYW5hZ2VkYmVhbiIpOwogCi0JICAgIGZvbzYgPSAoRm9vTWFuYWdlZEJlYW4pCi0JCWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9mb28ycmVmIik7CisgICAgICAgIGZvbzYgPSAoRm9vTWFuYWdlZEJlYW4pCisgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9mb28ycmVmIik7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeSBBcHBOYW1lID0gIiArIAotCQkJICAgICAgIGljLmxvb2t1cCgiamF2YTphcHAvQXBwTmFtZSIpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeSBBcHBOYW1lID0gIiArCisgICAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmFwcC9BcHBOYW1lIikpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXkgTW9kdWxlTmFtZSA9ICIgKyAKLQkJCSAgICAgICBpYy5sb29rdXAoImphdmE6bW9kdWxlL01vZHVsZU5hbWUiKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXkgTW9kdWxlTmFtZSA9ICIgKworICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTptb2R1bGUvTW9kdWxlTmFtZSIpKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZSk7Ci0JfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZSk7CisgICAgfQogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCi0JcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2VydmxldDo6ZG9HZXQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2VydmxldDo6ZG9HZXQiKTsKIAotCWZvby5mb29iYXIoImZvb2JhciIpOworICAgIGZvby5mb29iYXIoImZvb2JhciIpOwogCi0Jc2ltcGxlU2luZ2xldG9uLmhlbGxvKCk7CisgICAgc2ltcGxlU2luZ2xldG9uLmhlbGxvKCk7CiAKLQlzaW1wbGVTdGF0ZWxlc3MuaGVsbG8oKTsKLQlzaW1wbGVTdGF0ZWxlc3MyLmhlbGxvKCk7CisgICAgc2ltcGxlU3RhdGVsZXNzLmhlbGxvKCk7CisgICAgc2ltcGxlU3RhdGVsZXNzMi5oZWxsbygpOwogCi0Jc2IyLmhlbGxvKCk7CisgICAgc2IyLmhlbGxvKCk7CiAKLQlzYjMuaGVsbG8oKTsKKyAgICBzYjMuaGVsbG8oKTsKIAotCXNiNC5oZWxsbygpOworICAgIHNiNC5oZWxsbygpOwogCi0Jc2I1LmhlbGxvKCk7CisgICAgc2I1LmhlbGxvKCk7CiAKLQlzbHNiLmhlbGxvKCk7CisgICAgc2xzYi5oZWxsbygpOwogCi0Jc2xzYjIuaGVsbG8oKTsKKyAgICBzbHNiMi5oZWxsbygpOwogCi0Jc2xzYjMuaGVsbG8oKTsKKyAgICBzbHNiMy5oZWxsbygpOwogCi0Jc2xzYjQuaGVsbG8oKTsKKyAgICBzbHNiNC5oZWxsbygpOwogCi0Jc2xzYjUuaGVsbG8oKTsKKyAgICBzbHNiNS5oZWxsbygpOwogCi0JZm9vLmZvbygpOwotCWZvby5mb29iYXIoImZvb2JhciIpOwotCWZvbzIuZm9vKCk7Ci0JZm9vMy5mb28oKTsKLQlmb280LmZvbygpOwotCWZvbzUuZm9vKCk7CQotCWZvbzYuZm9vKCk7CisgICAgZm9vLmZvbygpOworICAgIGZvby5mb29iYXIoImZvb2JhciIpOworICAgIGZvbzIuZm9vKCk7CisgICAgZm9vMy5mb28oKTsKKyAgICBmb280LmZvbygpOworICAgIGZvbzUuZm9vKCk7CisgICAgZm9vNi5mb28oKTsKIAotCW91dC5wcmludGxuKCI8SFRNTD4gPEhFQUQ+IDxUSVRMRT4gSk1TIFNlcnZsZXQgT3V0cHV0IDwvVElUTEU+IDwvSEVBRD4gPEJPRFkgQkdDT0xPUj13aGl0ZT4iKTsKKyAgICBvdXQucHJpbnRsbigiPEhUTUw+IDxIRUFEPiA8VElUTEU+IEpNUyBTZXJ2bGV0IE91dHB1dCA8L1RJVExFPiA8L0hFQUQ+IDxCT0RZIEJHQ09MT1I9d2hpdGU+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPENFTlRFUj4gPEZPTlQgc2l6ZT0rMSBDT0xPUj1ibHVlPkRhdGFiYXNlU2VydmVsdCA6OiBBbGwgaW5mb3JtYXRpb24gSSBjYW4gZ2l2ZSA8L0ZPTlQ+IDwvQ0VOVEVSPiA8cD4gIiApOwotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBDb250ZXh0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldENvbnRleHRQYXRoKCkgKyAiPGJyPiIgKTsgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFNlcnZsZXQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0U2VydmxldFBhdGgoKSArICI8YnI+IiApOyAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gUGF0aCBJbmZvIDogIDwvRk9OVD4gIiArIHJlcS5nZXRQYXRoSW5mbygpICsgIjxicj4iICk7IAorICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBDb250ZXh0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldENvbnRleHRQYXRoKCkgKyAiPGJyPiIgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gU2VydmxldCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRTZXJ2bGV0UGF0aCgpICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBhdGggSW5mbyA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0UGF0aEluZm8oKSArICI8YnI+IiApOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvQk9EWT4gPC9IVE1MPiAiKTsKIAogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9JbnRlcmNlcHRvckEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9JbnRlcmNlcHRvckEuamF2YQppbmRleCAxMDAzNjAwLi5jYjNlODhhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvSW50ZXJjZXB0b3JBLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0ludGVyY2VwdG9yQS5qYXZhCkBAIC0zNSwyNCArMzUsMjQgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckE6OmluaXQoKSAiKTsKLQljLnByb2NlZWQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQTo6aW5pdCgpICIpOworICAgIGMucHJvY2VlZCgpOwogICAgIH0KIAogCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3Qgcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckE6OnJvdW5kSW52b2tlKCkgIik7Ci0JaWYoIGMuZ2V0UGFyYW1ldGVycygpLmxlbmd0aCA+IDAgKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigicGFyYW0gMSA9ICIgKyBjLmdldFBhcmFtZXRlcnMoKVswXSk7Ci0JfQotCXJldHVybiBjLnByb2NlZWQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQTo6cm91bmRJbnZva2UoKSAiKTsKKyAgICBpZiggYy5nZXRQYXJhbWV0ZXJzKCkubGVuZ3RoID4gMCApIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwYXJhbSAxID0gIiArIGMuZ2V0UGFyYW1ldGVycygpWzBdKTsKKyAgICB9CisgICAgcmV0dXJuIGMucHJvY2VlZCgpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvcjo6ZGVzdHJveSgpICIpOwotCWMucHJvY2VlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3I6OmRlc3Ryb3koKSAiKTsKKyAgICBjLnByb2NlZWQoKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9JbnRlcmNlcHRvckIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9JbnRlcmNlcHRvckIuamF2YQppbmRleCBjNjQzNjM3Li41NWUwM2ZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvSW50ZXJjZXB0b3JCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0ludGVyY2VwdG9yQi5qYXZhCkBAIC0yOCwzNiArMjgsMzYgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckI6OmluaXQoKSAiKTsKLQljLnByb2NlZWQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQjo6aW5pdCgpICIpOworICAgIGMucHJvY2VlZCgpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQotCXB1YmxpYyBPYmplY3Qgcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlNob3VsZCBub3QgcmVhY2ggaGVyZSIpOworICAgIHB1YmxpYyBPYmplY3Qgcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlNob3VsZCBub3QgcmVhY2ggaGVyZSIpOwogICAgIH0KIAogICAgIEBBcm91bmRJbnZva2UKICAgICBwcml2YXRlIE9iamVjdCBhcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckI6OmFyb3VuZEludm9rZSgpICIpOwotCWMuZ2V0Q29udGV4dERhdGEoKS5wdXQoImZvbyIsICJiYXIiKTsKLQlPYmplY3QgcmV0dXJuVmFsdWUgPSBjLnByb2NlZWQoKTsKLQkKLQlTdHJpbmcgZm9vYmFyID0gKFN0cmluZykgYy5nZXRDb250ZXh0RGF0YSgpLmdldCgiZm9vYmFyIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJmb29iYXIgZnJvbSBjb250ZXh0IGRhdGEgPSAiICsgZm9vYmFyKTsKLQlpZiggZm9vYmFyID09IG51bGwgKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImludmFsaWQgY29udGV4dCBkYXRhIik7Ci0JfQotCQotCWMuZ2V0Q29udGV4dERhdGEoKS5jbGVhcigpOwotCQotCXJldHVybiByZXR1cm5WYWx1ZTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQjo6YXJvdW5kSW52b2tlKCkgIik7CisgICAgYy5nZXRDb250ZXh0RGF0YSgpLnB1dCgiZm9vIiwgImJhciIpOworICAgIE9iamVjdCByZXR1cm5WYWx1ZSA9IGMucHJvY2VlZCgpOworCisgICAgU3RyaW5nIGZvb2JhciA9IChTdHJpbmcpIGMuZ2V0Q29udGV4dERhdGEoKS5nZXQoImZvb2JhciIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZm9vYmFyIGZyb20gY29udGV4dCBkYXRhID0gIiArIGZvb2Jhcik7CisgICAgaWYoIGZvb2JhciA9PSBudWxsICkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJpbnZhbGlkIGNvbnRleHQgZGF0YSIpOworICAgIH0KKworICAgIGMuZ2V0Q29udGV4dERhdGEoKS5jbGVhcigpOworCisgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckI6OmRlc3Ryb3koKSAiKTsKLQljLnByb2NlZWQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQjo6ZGVzdHJveSgpICIpOworICAgIGMucHJvY2VlZCgpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0ludGVyY2VwdG9yU3VwZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9JbnRlcmNlcHRvclN1cGVyLmphdmEKaW5kZXggNGFkYmQwMy4uMWI5MzI1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0ludGVyY2VwdG9yU3VwZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvSW50ZXJjZXB0b3JTdXBlci5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHJvdGVjdGVkIE9iamVjdCByb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiU2hvdWxkIG5vdCByZWFjaCBoZXJlIik7CisgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlNob3VsZCBub3QgcmVhY2ggaGVyZSIpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL01hbmFnZWRTdXBlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL01hbmFnZWRTdXBlci5qYXZhCmluZGV4IDViMGRmNTguLjExM2IyODMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9NYW5hZ2VkU3VwZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvTWFuYWdlZFN1cGVyLmphdmEKQEAgLTMwLDI0ICszMCwyNCBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1hbmFnZWRTdXBlcjo6aW5pdCgpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWFuYWdlZFN1cGVyOjppbml0KCkgIik7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1hbmFnZWRTdXBlcjo6ZGVzdHJveSgpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWFuYWdlZFN1cGVyOjpkZXN0cm95KCkgIik7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQlyZXR1cm4gIk1hbmFnZWRTdXBlciB0aGlzID0gIiArIHN1cGVyLnRvU3RyaW5nKCkgKyAKLQkgICAgIiBzID0gIiArIHMgKyAiICwgZHMgPSAiICsgZHM7CisgICAgcmV0dXJuICJNYW5hZ2VkU3VwZXIgdGhpcyA9ICIgKyBzdXBlci50b1N0cmluZygpICsKKyAgICAgICAgIiBzID0gIiArIHMgKyAiICwgZHMgPSAiICsgZHM7CiAKICAgICB9CiAKICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgYXJvdW5kU3VwZXIoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBNYW5hZ2VkU3VwZXI6OmFyb3VuZFN1cGVyKCkgIik7Ci0JcmV0dXJuIGMucHJvY2VlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWFuYWdlZFN1cGVyOjphcm91bmRTdXBlcigpICIpOworICAgIHJldHVybiBjLnByb2NlZWQoKTsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggMzk0ZmZjZS4uOWFjNWJmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC0zNCw3ICszNCw3IEBACiBAU2luZ2xldG9uCiBATG9jYWxCZWFuCiBwdWJsaWMgY2xhc3MgU2luZ2xldG9uQmVhbiBpbXBsZW1lbnRzIGphdmEudXRpbC5PYnNlcnZlciB7Ci0gIAorCiAKICAgICBARUpCIHByaXZhdGUgIFNpbmdsZXRvbkJlYW4gbWU7CiAKQEAgLTUxLDcxICs1MSw3MSBAQAogICAgIHByaXZhdGUgU3RhdGVsZXNzQmVhbiBzbHNiMzsKICAgICBwcml2YXRlIFN0YXRlbGVzc0JlYW4gc2xzYjQ7CiAgICAgcHJpdmF0ZSBTdGF0ZWxlc3NCZWFuIHNsc2I1OwotCQorCiAgICAgcHVibGljIHZvaWQgdXBkYXRlKGphdmEudXRpbC5PYnNlcnZhYmxlIGEsamF2YS5sYW5nLk9iamVjdCBiKSAge30KIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46aW5pdCgpIG1lID0gIiArIG1lKTsKLQkKLQlpZiggc2Vzc2lvbkN0eC5nZXRDb250ZXh0RGF0YSgpID09IG51bGwgKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIm51bGwgY29udGV4dCBkYXRhIik7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjppbml0KCkgbWUgPSAiICsgbWUpOwogCi0JdHJ5IHsKLQkgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICBpZiggc2Vzc2lvbkN0eC5nZXRDb250ZXh0RGF0YSgpID09IG51bGwgKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIm51bGwgY29udGV4dCBkYXRhIik7CisgICAgfQogCi0JICAgIC8vIExvb2t1cCBzaW1wbGUgZm9ybSBvZiBwb3J0YWJsZSBKTkRJIG5hbWUgCi0JICAgIFN0YXRlbGVzc0JlYW4gc3RhdGVsZXNzID0gKFN0YXRlbGVzc0JlYW4pIAotCQlpYy5sb29rdXAoImphdmE6bW9kdWxlL1N0YXRlbGVzc0JlYW4iKTsKKyAgICB0cnkgeworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCi0JICAgIHN0YXRlbGVzcy5oZWxsbygpOworICAgICAgICAvLyBMb29rdXAgc2ltcGxlIGZvcm0gb2YgcG9ydGFibGUgSk5ESSBuYW1lCisgICAgICAgIFN0YXRlbGVzc0JlYW4gc3RhdGVsZXNzID0gKFN0YXRlbGVzc0JlYW4pCisgICAgICAgIGljLmxvb2t1cCgiamF2YTptb2R1bGUvU3RhdGVsZXNzQmVhbiIpOwogCi0JICAgIC8vIExvb2t1cCBmdWxseS1xdWFsaWZpZWQgZm9ybSBvZiBwb3J0YWJsZSBKTkRJIG5hbWUKLQkgICAgU3RhdGVsZXNzQmVhbiBzdGF0ZWxlc3MyID0gKFN0YXRlbGVzc0JlYW4pIAotCQlpYy5sb29rdXAoImphdmE6bW9kdWxlL1N0YXRlbGVzc0JlYW4hY29tLmFjbWUuU3RhdGVsZXNzQmVhbiIpOworICAgICAgICBzdGF0ZWxlc3MuaGVsbG8oKTsKIAotCSAgICBzdGF0ZWxlc3MyLmhlbGxvKCk7CisgICAgICAgIC8vIExvb2t1cCBmdWxseS1xdWFsaWZpZWQgZm9ybSBvZiBwb3J0YWJsZSBKTkRJIG5hbWUKKyAgICAgICAgU3RhdGVsZXNzQmVhbiBzdGF0ZWxlc3MyID0gKFN0YXRlbGVzc0JlYW4pCisgICAgICAgIGljLmxvb2t1cCgiamF2YTptb2R1bGUvU3RhdGVsZXNzQmVhbiFjb20uYWNtZS5TdGF0ZWxlc3NCZWFuIik7CiAKLQkgICAgc2IyID0gKFNpbmdsZXRvbkJlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvU2luZ2xldG9uQmVhbiIpOwotCSAgICBzYjMgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TaW5nbGV0b25CZWFuIWNvbS5hY21lLlNpbmdsZXRvbkJlYW4iKTsKKyAgICAgICAgc3RhdGVsZXNzMi5oZWxsbygpOwogCi0JICAgIHNiNCA9IChTaW5nbGV0b25CZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL0VTMSIpOwotCSAgICBzYjUgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvRVMyIik7CisgICAgICAgIHNiMiA9IChTaW5nbGV0b25CZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL1NpbmdsZXRvbkJlYW4iKTsKKyAgICAgICAgc2IzID0gKFNpbmdsZXRvbkJlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvU2luZ2xldG9uQmVhbiFjb20uYWNtZS5TaW5nbGV0b25CZWFuIik7CiAKLQkgICAgc2xzYiA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL1N0YXRlbGVzc0JlYW4iKTsKLQkgICAgc2xzYjIgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOmFwcC9lamItZWpiMzEtZWpibGl0ZS1qYXZhbW9kdWxlLXdlYi9TdGF0ZWxlc3NCZWFuIik7Ci0JICAgIHNsc2IzID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTphcHAvZWpiLWVqYjMxLWVqYmxpdGUtamF2YW1vZHVsZS13ZWIvU3RhdGVsZXNzQmVhbiFjb20uYWNtZS5TdGF0ZWxlc3NCZWFuIik7CisgICAgICAgIHNiNCA9IChTaW5nbGV0b25CZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL0VTMSIpOworICAgICAgICBzYjUgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvRVMyIik7CiAKLQkgICAgc2xzYjQgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOmFwcC9FTDEiKTsKLQkgICAgc2xzYjUgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOmFwcC9lbnYvRUwyIik7CisgICAgICAgIHNsc2IgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TdGF0ZWxlc3NCZWFuIik7CisgICAgICAgIHNsc2IyID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTphcHAvZWpiLWVqYjMxLWVqYmxpdGUtamF2YW1vZHVsZS13ZWIvU3RhdGVsZXNzQmVhbiIpOworICAgICAgICBzbHNiMyA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1lamJsaXRlLWphdmFtb2R1bGUtd2ViL1N0YXRlbGVzc0JlYW4hY29tLmFjbWUuU3RhdGVsZXNzQmVhbiIpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXkgQXBwTmFtZSA9ICIgKyAKLQkJCSAgICAgICBpYy5sb29rdXAoImphdmE6YXBwL0FwcE5hbWUiKSk7CisgICAgICAgIHNsc2I0ID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTphcHAvRUwxIik7CisgICAgICAgIHNsc2I1ID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTphcHAvZW52L0VMMiIpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXkgTW9kdWxlTmFtZSA9ICIgKyAKLQkJCSAgICAgICBpYy5sb29rdXAoImphdmE6bW9kdWxlL01vZHVsZU5hbWUiKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXkgQXBwTmFtZSA9ICIgKworICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTphcHAvQXBwTmFtZSIpKTsKIAotCX0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24obmUpOwotCX0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeSBNb2R1bGVOYW1lID0gIiArCisgICAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9Nb2R1bGVOYW1lIikpOworCisgICAgfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihuZSk7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjpoZWxsbygpIik7Ci0JaWYoIHNlc3Npb25DdHguZ2V0Q29udGV4dERhdGEoKSA9PSBudWxsICkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJudWxsIGNvbnRleHQgZGF0YSIpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46aGVsbG8oKSIpOworICAgIGlmKCBzZXNzaW9uQ3R4LmdldENvbnRleHREYXRhKCkgPT0gbnVsbCApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigibnVsbCBjb250ZXh0IGRhdGEiKTsKKyAgICB9CiAKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjpkZXN0cm95KCkiKTsKLQlpZiggc2Vzc2lvbkN0eC5nZXRDb250ZXh0RGF0YSgpID09IG51bGwgKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIm51bGwgY29udGV4dCBkYXRhIik7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjpkZXN0cm95KCkiKTsKKyAgICBpZiggc2Vzc2lvbkN0eC5nZXRDb250ZXh0RGF0YSgpID09IG51bGwgKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIm51bGwgY29udGV4dCBkYXRhIik7CisgICAgfQogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvU3RhdGVmdWxCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvU3RhdGVmdWxCZWFuLmphdmEKaW5kZXggOWRjZjk3OS4uZjkxZTkxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL1N0YXRlZnVsQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9TdGF0ZWZ1bEJlYW4uamF2YQpAQCAtMjksMjEgKzI5LDIxIEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuOmluaXQoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuOmluaXQoKSIpOwogICAgIH0KIAogICAgIEBQcmVQYXNzaXZhdGUKICAgICBwcml2YXRlIHZvaWQgcHJlUGFzcygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjpwcmVQYXNzaXZhdGUoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuOnByZVBhc3NpdmF0ZSgpIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW46OmhlbGxvKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjo6aGVsbG8oKSIpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW46ZGVzdHJveSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW46ZGVzdHJveSgpIik7CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9TdGF0ZWxlc3NCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvU3RhdGVsZXNzQmVhbi5qYXZhCmluZGV4IGY2MTQ4YTUuLmU1OWEzOGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9TdGF0ZWxlc3NCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL1N0YXRlbGVzc0JlYW4uamF2YQpAQCAtMjksOCArMjksOCBAQAogQFN0YXRlbGVzcwogQEludGVyY2VwdG9ycyhJbnRlcmNlcHRvckIuY2xhc3MpCiBwdWJsaWMgY2xhc3MgU3RhdGVsZXNzQmVhbiB7Ci0gICAgCi0gICAgQFJlc291cmNlIAorCisgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzZXNzaW9uQ3R4OwogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWU9ImphdmE6bW9kdWxlL2Zvb21hbmFnZWRiZWFuIikKQEAgLTQ0LDY0ICs0NCw2NCBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW46aW5pdCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuOmluaXQoKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjo6aGVsbG8oKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjo6aGVsbG8oKSIpOwogCi0JTWFwPFN0cmluZywgT2JqZWN0PiBjdHhEYXRhID0gc2Vzc2lvbkN0eC5nZXRDb250ZXh0RGF0YSgpOwotCVN0cmluZyBmb29jdHggPSAoU3RyaW5nKSBjdHhEYXRhLmdldCgiZm9vIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJmb28gZnJvbSBjb250ZXh0IGRhdGEgPSAiICsgZm9vY3R4KTsKLQlpZiggZm9vY3R4ID09IG51bGwgKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImludmFsaWQgY29udGV4dCBkYXRhIik7Ci0JfQotCWN0eERhdGEucHV0KCJmb29iYXIiLCAiZm9vYmFyIik7CisgICAgTWFwPFN0cmluZywgT2JqZWN0PiBjdHhEYXRhID0gc2Vzc2lvbkN0eC5nZXRDb250ZXh0RGF0YSgpOworICAgIFN0cmluZyBmb29jdHggPSAoU3RyaW5nKSBjdHhEYXRhLmdldCgiZm9vIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJmb28gZnJvbSBjb250ZXh0IGRhdGEgPSAiICsgZm9vY3R4KTsKKyAgICBpZiggZm9vY3R4ID09IG51bGwgKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImludmFsaWQgY29udGV4dCBkYXRhIik7CisgICAgfQorICAgIGN0eERhdGEucHV0KCJmb29iYXIiLCAiZm9vYmFyIik7CiAKLQlGb29NYW5hZ2VkQmVhbiBmbWIgPSAoRm9vTWFuYWdlZEJlYW4pIAotCSAgICBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvZm9vbWFuYWdlZGJlYW4iKTsKKyAgICBGb29NYW5hZ2VkQmVhbiBmbWIgPSAoRm9vTWFuYWdlZEJlYW4pCisgICAgICAgIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9mb29tYW5hZ2VkYmVhbiIpOwogCi0JLy8gTWFrZSBzdXJlIGRlcGVuZGVuY2llcyBkZWNsYXJlZCBpbiBqYXZhOmNvbXAgYXJlIHZpc2libGUKLQkvLyB2aWEgZXF1aXZhbGVudCBqYXZhOm1vZHVsZSBlbnRyaWVzIHNpbmNlIHRoaXMgaXMgYSAKLQkvLyAud2FyCi0JU2Vzc2lvbkNvbnRleHQgc2Vzc2lvbkN0eDIgPSAoU2Vzc2lvbkNvbnRleHQpCi0JICAgIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvY29tLmFjbWUuU3RhdGVsZXNzQmVhbi9zZXNzaW9uQ3R4Iik7CisgICAgLy8gTWFrZSBzdXJlIGRlcGVuZGVuY2llcyBkZWNsYXJlZCBpbiBqYXZhOmNvbXAgYXJlIHZpc2libGUKKyAgICAvLyB2aWEgZXF1aXZhbGVudCBqYXZhOm1vZHVsZSBlbnRyaWVzIHNpbmNlIHRoaXMgaXMgYQorICAgIC8vIC53YXIKKyAgICBTZXNzaW9uQ29udGV4dCBzZXNzaW9uQ3R4MiA9IChTZXNzaW9uQ29udGV4dCkKKyAgICAgICAgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL2Vudi9jb20uYWNtZS5TdGF0ZWxlc3NCZWFuL3Nlc3Npb25DdHgiKTsKIAotCVNpbmdsZXRvbkJlYW4gc2luZ2xldG9uMiA9IChTaW5nbGV0b25CZWFuKQotCSAgICBzZXNzaW9uQ3R4Mi5sb29rdXAoImphdmE6bW9kdWxlL2Vudi9zdGF0ZWxlc3Mvc2luZ2xldG9ucmVmIik7CisgICAgU2luZ2xldG9uQmVhbiBzaW5nbGV0b24yID0gKFNpbmdsZXRvbkJlYW4pCisgICAgICAgIHNlc3Npb25DdHgyLmxvb2t1cCgiamF2YTptb2R1bGUvZW52L3N0YXRlbGVzcy9zaW5nbGV0b25yZWYiKTsKIAotCS8vIExvb2t1cCBhIGNvbXAgZW52IGRlcGVuZGVuY3kgZGVjbGFyZWQgYnkgYW5vdGhlciBlamIgaW4gdGhlIC53YXIKLQlTaW5nbGV0b25CZWFuIHNpbmdsZXRvbjMgPSAoU2luZ2xldG9uQmVhbikKLQkgICAgc2Vzc2lvbkN0eDIubG9va3VwKCJqYXZhOmNvbXAvZW52L2NvbS5hY21lLlNpbmdsZXRvbkJlYW4vbWUiKTsKKyAgICAvLyBMb29rdXAgYSBjb21wIGVudiBkZXBlbmRlbmN5IGRlY2xhcmVkIGJ5IGFub3RoZXIgZWpiIGluIHRoZSAud2FyCisgICAgU2luZ2xldG9uQmVhbiBzaW5nbGV0b24zID0gKFNpbmdsZXRvbkJlYW4pCisgICAgICAgIHNlc3Npb25DdHgyLmxvb2t1cCgiamF2YTpjb21wL2Vudi9jb20uYWNtZS5TaW5nbGV0b25CZWFuL21lIik7CiAKLQkvLyBMb29rdXAgYSBjb21wIGVudiBkZXBlbmRlbmN5IGRlY2xhcmVkIGJ5IGEgc2VydmxldAotCUZvb01hbmFnZWRCZWFuIGZtYlNlcnZsZXQgPSAoRm9vTWFuYWdlZEJlYW4pCi0JICAgIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L2ZvbzJyZWYiKTsKLQlGb29NYW5hZ2VkQmVhbiBmbWJTZXJ2bGV0MiA9IChGb29NYW5hZ2VkQmVhbikKLQkgICAgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL2Vudi9mb28ycmVmIik7CisgICAgLy8gTG9va3VwIGEgY29tcCBlbnYgZGVwZW5kZW5jeSBkZWNsYXJlZCBieSBhIHNlcnZsZXQKKyAgICBGb29NYW5hZ2VkQmVhbiBmbWJTZXJ2bGV0ID0gKEZvb01hbmFnZWRCZWFuKQorICAgICAgICBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9mb28ycmVmIik7CisgICAgRm9vTWFuYWdlZEJlYW4gZm1iU2VydmxldDIgPSAoRm9vTWFuYWdlZEJlYW4pCisgICAgICAgIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvZm9vMnJlZiIpOwogCi0JLy8gRW5zdXJlIHRoYXQgZWFjaCBpbmplY3RlZCBvciBsb29rZWQgdXAgbWFuYWdlZCBiZWFuIAotCS8vIGluc3RhbmNlIGlzIHVuaXF1ZQotCU9iamVjdCBmb29UaGlzID0gZm9vLmdldFRoaXMoKTsKLQlPYmplY3QgZm9vMlRoaXMgPSBmb28yLmdldFRoaXMoKTsKLQlPYmplY3QgZm1iVGhpcyA9IGZtYi5nZXRUaGlzKCk7CisgICAgLy8gRW5zdXJlIHRoYXQgZWFjaCBpbmplY3RlZCBvciBsb29rZWQgdXAgbWFuYWdlZCBiZWFuCisgICAgLy8gaW5zdGFuY2UgaXMgdW5pcXVlCisgICAgT2JqZWN0IGZvb1RoaXMgPSBmb28uZ2V0VGhpcygpOworICAgIE9iamVjdCBmb28yVGhpcyA9IGZvbzIuZ2V0VGhpcygpOworICAgIE9iamVjdCBmbWJUaGlzID0gZm1iLmdldFRoaXMoKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiZm9vVGhpcyA9ICIgKyBmb29UaGlzKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImZvbzJUaGlzID0gIiArIGZvbzJUaGlzKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImZtYlRoaXMgPSAiICsgZm1iVGhpcyk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJmbWJTZXJ2bGV0ID0gIiArIGZtYlNlcnZsZXQpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiZm1iU2VydmxldDIgPSAiICsgZm1iU2VydmxldDIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZm9vVGhpcyA9ICIgKyBmb29UaGlzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZvbzJUaGlzID0gIiArIGZvbzJUaGlzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZtYlRoaXMgPSAiICsgZm1iVGhpcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJmbWJTZXJ2bGV0ID0gIiArIGZtYlNlcnZsZXQpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZm1iU2VydmxldDIgPSAiICsgZm1iU2VydmxldDIpOwogCi0JaWYoICggZm9vVGhpcyA9PSBmb28yVGhpcyApIHx8ICggZm9vVGhpcyA9PSBmbWJUaGlzICApIHx8Ci0JICAgICggZm9vMlRoaXMgPT0gZm1iVGhpcyApICkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJNYW5hZ2VkIGJlYW4gaW5zdGFuY2VzIG5vdCB1bmlxdWUiKTsKLQl9CisgICAgaWYoICggZm9vVGhpcyA9PSBmb28yVGhpcyApIHx8ICggZm9vVGhpcyA9PSBmbWJUaGlzICApIHx8CisgICAgICAgICggZm9vMlRoaXMgPT0gZm1iVGhpcyApICkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJNYW5hZ2VkIGJlYW4gaW5zdGFuY2VzIG5vdCB1bmlxdWUiKTsKKyAgICB9CiAKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjpkZXN0cm95KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW46ZGVzdHJveSgpIik7CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpY3RlZEVKQlJlZi9lamJNb2R1bGUvZ2YvSW52b2tlcjEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpY3RlZEVKQlJlZi9lamJNb2R1bGUvZ2YvSW52b2tlcjEuamF2YQppbmRleCBiY2FjMzdiLi5hNDQ3ZjNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaWN0ZWRFSkJSZWYvZWpiTW9kdWxlL2dmL0ludm9rZXIxLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGljdGVkRUpCUmVmL2VqYk1vZHVsZS9nZi9JbnZva2VyMS5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAKIEBTdGF0ZWxlc3MKIHB1YmxpYyBjbGFzcyBJbnZva2VyMSB7Ci0JICBARUpCKG5hbWU9ImphdmE6bW9kdWxlL2Vudi9EdXBsaWNhdGVFbnRyeSIsYmVhbk5hbWU9ImVqYi9teXNsc2IiKQotCSAgcHJpdmF0ZSBNeVNMU0IgbXlTTFNCOworICAgICAgQEVKQihuYW1lPSJqYXZhOm1vZHVsZS9lbnYvRHVwbGljYXRlRW50cnkiLGJlYW5OYW1lPSJlamIvbXlzbHNiIikKKyAgICAgIHByaXZhdGUgTXlTTFNCIG15U0xTQjsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGljdGVkRUpCUmVmL2VqYk1vZHVsZS9nZi9JbnZva2VyMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGljdGVkRUpCUmVmL2VqYk1vZHVsZS9nZi9JbnZva2VyMi5qYXZhCmluZGV4IGM3ZjVlMzMuLjJkYzljZDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpY3RlZEVKQlJlZi9lamJNb2R1bGUvZ2YvSW52b2tlcjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaWN0ZWRFSkJSZWYvZWpiTW9kdWxlL2dmL0ludm9rZXIyLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIAogQFN0YXRlbGVzcwogcHVibGljIGNsYXNzIEludm9rZXIyIHsKLQkgIEBFSkIobmFtZT0iamF2YTptb2R1bGUvZW52L0R1cGxpY2F0ZUVudHJ5IixiZWFuTmFtZT0iZWpiL215c2xzYjIiKQotCSAgcHJpdmF0ZSBNeVNMU0IgbXlTTFNCOworICAgICAgQEVKQihuYW1lPSJqYXZhOm1vZHVsZS9lbnYvRHVwbGljYXRlRW50cnkiLGJlYW5OYW1lPSJlamIvbXlzbHNiMiIpCisgICAgICBwcml2YXRlIE15U0xTQiBteVNMU0I7CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpY3RlZEVKQlJlZi9lamJNb2R1bGUvZ2YvTXlTTFNCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaWN0ZWRFSkJSZWYvZWpiTW9kdWxlL2dmL015U0xTQi5qYXZhCmluZGV4IGM4YWVjMGQuLjZiNjZjZGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpY3RlZEVKQlJlZi9lamJNb2R1bGUvZ2YvTXlTTFNCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGljdGVkRUpCUmVmL2VqYk1vZHVsZS9nZi9NeVNMU0IuamF2YQpAQCAtMjIsNiArMjIsNiBAQAogCiBAU3RhdGVsZXNzKG5hbWU9ImVqYi9teXNsc2IiKQogcHVibGljIGNsYXNzIE15U0xTQiB7Ci0gIAorCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpY3RlZEVKQlJlZi9lamJNb2R1bGUvZ2YvTXlTTFNCMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGljdGVkRUpCUmVmL2VqYk1vZHVsZS9nZi9NeVNMU0IyLmphdmEKaW5kZXggNGM5NmYxNS4uMmE1ZWE5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGljdGVkRUpCUmVmL2VqYk1vZHVsZS9nZi9NeVNMU0IyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGljdGVkRUpCUmVmL2VqYk1vZHVsZS9nZi9NeVNMU0IyLmphdmEKQEAgLTIyLDYgKzIyLDYgQEAKIAogQFN0YXRlbGVzcyhuYW1lPSJlamIvbXlzbHNiMiIpCiBwdWJsaWMgY2xhc3MgTXlTTFNCMiB7Ci0gIAorCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpY3RlZEVudkVudHJ5L2VqYk1vZHVsZS9NRVRBLUlORi9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpY3RlZEVudkVudHJ5L2VqYk1vZHVsZS9NRVRBLUlORi9lamItamFyLnhtbAppbmRleCAyMDM1NDBhLi4xYzI3N2E0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaWN0ZWRFbnZFbnRyeS9lamJNb2R1bGUvTUVUQS1JTkYvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGljdGVkRW52RW50cnkvZWpiTW9kdWxlL01FVEEtSU5GL2VqYi1qYXIueG1sCkBAIC0xOCwzMiArMTgsMzIgQEAKIC0tPgogCiA8ZWpiLWphciB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOmVqYj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18xLnhzZCIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzEueHNkIgotCXZlcnNpb249IjMuMSI+Ci0JPGVudGVycHJpc2UtYmVhbnM+Ci0JCTxzZXNzaW9uPgotCQkJPGVqYi1uYW1lPkludm9rZXIxPC9lamItbmFtZT4KLQkJCTxlamItY2xhc3M+Z2YuSW52b2tlcjE8L2VqYi1jbGFzcz4KLQkJCTxzZXNzaW9uLXR5cGU+U3RhdGVsZXNzPC9zZXNzaW9uLXR5cGU+Ci0JCQk8ZW52LWVudHJ5PgotCQkJCTxlbnYtZW50cnktbmFtZT5qYXZhOm1vZHVsZS9lbnYvRHVwbGljYXRlRW52RW50cnk8L2Vudi1lbnRyeS1uYW1lPgotCQkJCTxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KLQkJCQk8ZW52LWVudHJ5LXZhbHVlPkZyb20gSW52b2tlcjE8L2Vudi1lbnRyeS12YWx1ZT4KLQkJCTwvZW52LWVudHJ5PgotCQk8L3Nlc3Npb24+CisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6ZWpiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzEueHNkIgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9lamItamFyXzNfMS54c2QiCisgICAgdmVyc2lvbj0iMy4xIj4KKyAgICA8ZW50ZXJwcmlzZS1iZWFucz4KKyAgICAgICAgPHNlc3Npb24+CisgICAgICAgICAgICA8ZWpiLW5hbWU+SW52b2tlcjE8L2VqYi1uYW1lPgorICAgICAgICAgICAgPGVqYi1jbGFzcz5nZi5JbnZva2VyMTwvZWpiLWNsYXNzPgorICAgICAgICAgICAgPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT4KKyAgICAgICAgICAgIDxlbnYtZW50cnk+CisgICAgICAgICAgICAgICAgPGVudi1lbnRyeS1uYW1lPmphdmE6bW9kdWxlL2Vudi9EdXBsaWNhdGVFbnZFbnRyeTwvZW52LWVudHJ5LW5hbWU+CisgICAgICAgICAgICAgICAgPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2Vudi1lbnRyeS10eXBlPgorICAgICAgICAgICAgICAgIDxlbnYtZW50cnktdmFsdWU+RnJvbSBJbnZva2VyMTwvZW52LWVudHJ5LXZhbHVlPgorICAgICAgICAgICAgPC9lbnYtZW50cnk+CisgICAgICAgIDwvc2Vzc2lvbj4KIAotCQk8c2Vzc2lvbj4KLQkJCTxlamItbmFtZT5JbnZva2VyMjwvZWpiLW5hbWU+Ci0JCQk8ZWpiLWNsYXNzPmdmLkludm9rZXIyPC9lamItY2xhc3M+Ci0JCQk8c2Vzc2lvbi10eXBlPlN0YXRlbGVzczwvc2Vzc2lvbi10eXBlPgotCQkJPGVudi1lbnRyeT4KLQkJCQk8ZW52LWVudHJ5LW5hbWU+amF2YTptb2R1bGUvZW52L0R1cGxpY2F0ZUVudkVudHJ5PC9lbnYtZW50cnktbmFtZT4KLQkJCQk8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvZW52LWVudHJ5LXR5cGU+Ci0JCQkJPGVudi1lbnRyeS12YWx1ZT5Gcm9tIEludm9rZXIyPC9lbnYtZW50cnktdmFsdWU+Ci0JCQk8L2Vudi1lbnRyeT4KLQkJPC9zZXNzaW9uPgotCTwvZW50ZXJwcmlzZS1iZWFucz4KKyAgICAgICAgPHNlc3Npb24+CisgICAgICAgICAgICA8ZWpiLW5hbWU+SW52b2tlcjI8L2VqYi1uYW1lPgorICAgICAgICAgICAgPGVqYi1jbGFzcz5nZi5JbnZva2VyMjwvZWpiLWNsYXNzPgorICAgICAgICAgICAgPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT4KKyAgICAgICAgICAgIDxlbnYtZW50cnk+CisgICAgICAgICAgICAgICAgPGVudi1lbnRyeS1uYW1lPmphdmE6bW9kdWxlL2Vudi9EdXBsaWNhdGVFbnZFbnRyeTwvZW52LWVudHJ5LW5hbWU+CisgICAgICAgICAgICAgICAgPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2Vudi1lbnRyeS10eXBlPgorICAgICAgICAgICAgICAgIDxlbnYtZW50cnktdmFsdWU+RnJvbSBJbnZva2VyMjwvZW52LWVudHJ5LXZhbHVlPgorICAgICAgICAgICAgPC9lbnYtZW50cnk+CisgICAgICAgIDwvc2Vzc2lvbj4KKyAgICA8L2VudGVycHJpc2UtYmVhbnM+CiAKIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaWN0ZWRFbnZFbnRyeS9lamJNb2R1bGUvZ2YvSW52b2tlcjEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpY3RlZEVudkVudHJ5L2VqYk1vZHVsZS9nZi9JbnZva2VyMS5qYXZhCmluZGV4IGNkZDY0ZmUuLjk3OTZkNzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpY3RlZEVudkVudHJ5L2VqYk1vZHVsZS9nZi9JbnZva2VyMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpY3RlZEVudkVudHJ5L2VqYk1vZHVsZS9nZi9JbnZva2VyMS5qYXZhCkBAIC0yMyw1ICsyMyw1IEBACiBAU3RhdGVsZXNzCiBwdWJsaWMgY2xhc3MgSW52b2tlcjEgewogCi0JICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGl0ZWRSZXNvdXJjZUVudlJlZi9lamJNb2R1bGUvTUVUQS1JTkYvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaXRlZFJlc291cmNlRW52UmVmL2VqYk1vZHVsZS9NRVRBLUlORi9lamItamFyLnhtbAppbmRleCA1OGQ0NjE2Li42Zjk3YzhhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaXRlZFJlc291cmNlRW52UmVmL2VqYk1vZHVsZS9NRVRBLUlORi9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaXRlZFJlc291cmNlRW52UmVmL2VqYk1vZHVsZS9NRVRBLUlORi9lamItamFyLnhtbApAQCAtMTgsMzEgKzE4LDMxIEBACiAtLT4KIAogPGVqYi1qYXIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiB4bWxuczplamI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9lamItamFyXzNfMS54c2QiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18xLnhzZCIKLQl2ZXJzaW9uPSIzLjEiPgotCTxlbnRlcnByaXNlLWJlYW5zPgotCQk8c2Vzc2lvbj4KLQkJCTxlamItbmFtZT5JbnZva2VyMTwvZWpiLW5hbWU+Ci0JCQk8ZWpiLWNsYXNzPmdmLkludm9rZXIxPC9lamItY2xhc3M+Ci0JCQk8c2Vzc2lvbi10eXBlPlN0YXRlbGVzczwvc2Vzc2lvbi10eXBlPgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOmVqYj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18xLnhzZCIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzEueHNkIgorICAgIHZlcnNpb249IjMuMSI+CisgICAgPGVudGVycHJpc2UtYmVhbnM+CisgICAgICAgIDxzZXNzaW9uPgorICAgICAgICAgICAgPGVqYi1uYW1lPkludm9rZXIxPC9lamItbmFtZT4KKyAgICAgICAgICAgIDxlamItY2xhc3M+Z2YuSW52b2tlcjE8L2VqYi1jbGFzcz4KKyAgICAgICAgICAgIDxzZXNzaW9uLXR5cGU+U3RhdGVsZXNzPC9zZXNzaW9uLXR5cGU+CiAKLQkJCTxyZXNvdXJjZS1lbnYtcmVmPgotCQkJCTxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+amF2YTptb2R1bGUvZW52L0R1cFJlc291cmNlRW52UmVmPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JCQkJPHJlc291cmNlLWVudi1yZWYtdHlwZT5qYWthcnRhLmptcy5Ub3BpYzwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgotCQkJPC9yZXNvdXJjZS1lbnYtcmVmPgotCQk8L3Nlc3Npb24+Ci0JCQotCQk8c2Vzc2lvbj4KLQkJCTxlamItbmFtZT5JbnZva2VyMjwvZWpiLW5hbWU+Ci0JCQk8ZWpiLWNsYXNzPmdmLkludm9rZXIyPC9lamItY2xhc3M+Ci0JCQk8c2Vzc2lvbi10eXBlPlN0YXRlbGVzczwvc2Vzc2lvbi10eXBlPgotCQkJPHJlc291cmNlLWVudi1yZWY+Ci0JCQkJPHJlc291cmNlLWVudi1yZWYtbmFtZT5qYXZhOm1vZHVsZS9lbnYvRHVwUmVzb3VyY2VFbnZSZWY8L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQkJCQk8cmVzb3VyY2UtZW52LXJlZi10eXBlPmpha2FydGEuam1zLlF1ZXVlPC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+Ci0JCQk8L3Jlc291cmNlLWVudi1yZWY+Ci0JCTwvc2Vzc2lvbj4KLQk8L2VudGVycHJpc2UtYmVhbnM+CisgICAgICAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KKyAgICAgICAgICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmphdmE6bW9kdWxlL2Vudi9EdXBSZXNvdXJjZUVudlJlZjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgorICAgICAgICAgICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+amFrYXJ0YS5qbXMuVG9waWM8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KKyAgICAgICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KKyAgICAgICAgPC9zZXNzaW9uPgorCisgICAgICAgIDxzZXNzaW9uPgorICAgICAgICAgICAgPGVqYi1uYW1lPkludm9rZXIyPC9lamItbmFtZT4KKyAgICAgICAgICAgIDxlamItY2xhc3M+Z2YuSW52b2tlcjI8L2VqYi1jbGFzcz4KKyAgICAgICAgICAgIDxzZXNzaW9uLXR5cGU+U3RhdGVsZXNzPC9zZXNzaW9uLXR5cGU+CisgICAgICAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KKyAgICAgICAgICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmphdmE6bW9kdWxlL2Vudi9EdXBSZXNvdXJjZUVudlJlZjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgorICAgICAgICAgICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+amFrYXJ0YS5qbXMuUXVldWU8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KKyAgICAgICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KKyAgICAgICAgPC9zZXNzaW9uPgorICAgIDwvZW50ZXJwcmlzZS1iZWFucz4KIAogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpdGVkUmVzb3VyY2VFbnZSZWYvZWpiTW9kdWxlL2dmL0ludm9rZXIxLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaXRlZFJlc291cmNlRW52UmVmL2VqYk1vZHVsZS9nZi9JbnZva2VyMS5qYXZhCmluZGV4IGNkZDY0ZmUuLjk3OTZkNzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpdGVkUmVzb3VyY2VFbnZSZWYvZWpiTW9kdWxlL2dmL0ludm9rZXIxLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGl0ZWRSZXNvdXJjZUVudlJlZi9lamJNb2R1bGUvZ2YvSW52b2tlcjEuamF2YQpAQCAtMjMsNSArMjMsNSBAQAogQFN0YXRlbGVzcwogcHVibGljIGNsYXNzIEludm9rZXIxIHsKIAotCSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpdGVkUmVzb3VyY2VSZWYvZWpiTW9kdWxlL2dmL0ludm9rZXIzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaXRlZFJlc291cmNlUmVmL2VqYk1vZHVsZS9nZi9JbnZva2VyMy5qYXZhCmluZGV4IDQwZjhhMWYuLjA4ZGUwOTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpdGVkUmVzb3VyY2VSZWYvZWpiTW9kdWxlL2dmL0ludm9rZXIzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGl0ZWRSZXNvdXJjZVJlZi9lamJNb2R1bGUvZ2YvSW52b2tlcjMuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogQFN0YXRlbGVzcwogcHVibGljIGNsYXNzIEludm9rZXIzIHsKIAotCSAgQFJlc291cmNlKG5hbWU9ImphdmE6bW9kdWxlL2Vudi9EdXBSZXNvdXJjZVJlZiIsbG9va3VwPSJqZGJjL19fZGVmYXVsdCIpIAotCSAgcHJpdmF0ZSBqYXZheC5zcWwuRGF0YVNvdXJjZSBjdXN0b21lckFwcERCOwotCSAgCisgICAgICBAUmVzb3VyY2UobmFtZT0iamF2YTptb2R1bGUvZW52L0R1cFJlc291cmNlUmVmIixsb29rdXA9ImpkYmMvX19kZWZhdWx0IikKKyAgICAgIHByaXZhdGUgamF2YXguc3FsLkRhdGFTb3VyY2UgY3VzdG9tZXJBcHBEQjsKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGl0ZWRSZXNvdXJjZVJlZi9lamJNb2R1bGUvZ2YvSW52b2tlcjQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpdGVkUmVzb3VyY2VSZWYvZWpiTW9kdWxlL2dmL0ludm9rZXI0LmphdmEKaW5kZXggZjY0ZjUxNi4uYzdkMmZhYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGl0ZWRSZXNvdXJjZVJlZi9lamJNb2R1bGUvZ2YvSW52b2tlcjQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaXRlZFJlc291cmNlUmVmL2VqYk1vZHVsZS9nZi9JbnZva2VyNC5qYXZhCkBAIC0yMyw4ICsyMyw4IEBACiAKIEBTdGF0ZWxlc3MKIHB1YmxpYyBjbGFzcyBJbnZva2VyNCB7Ci0JQFJlc291cmNlKG5hbWU9ImphdmE6bW9kdWxlL2Vudi9EdXBSZXNvdXJjZVJlZiIsbG9va3VwPSJqZGJjL19fVGltZXJQb29sIikgCi0JICBwcml2YXRlIGphdmF4LnNxbC5EYXRhU291cmNlIGN1c3RvbWVyQXBwREI7Ci0gCisgICAgQFJlc291cmNlKG5hbWU9ImphdmE6bW9kdWxlL2Vudi9EdXBSZXNvdXJjZVJlZiIsbG9va3VwPSJqZGJjL19fVGltZXJQb29sIikKKyAgICAgIHByaXZhdGUgamF2YXguc3FsLkRhdGFTb3VyY2UgY3VzdG9tZXJBcHBEQjsKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvcnJlY3RFbnZFbnRyeS9XZWJDb250ZW50L1dFQi1JTkYvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvcnJlY3RFbnZFbnRyeS9XZWJDb250ZW50L1dFQi1JTkYvZWpiLWphci54bWwKaW5kZXggZmI5N2M4Ny4uZDQ3NzgwZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db3JyZWN0RW52RW50cnkvV2ViQ29udGVudC9XRUItSU5GL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29ycmVjdEVudkVudHJ5L1dlYkNvbnRlbnQvV0VCLUlORi9lamItamFyLnhtbApAQCAtMTgsMjggKzE4LDI4IEBACiAtLT4KIAogPGVqYi1qYXIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiB4bWxuczplamI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9lamItamFyXzNfMS54c2QiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18xLnhzZCIKLQl2ZXJzaW9uPSIzLjEiPgotCTxlbnRlcnByaXNlLWJlYW5zPgotCQk8c2Vzc2lvbj4KLQkJCTxlamItbmFtZT5JbnZva2VyMTwvZWpiLW5hbWU+Ci0JCQk8ZWpiLWNsYXNzPmdmLkludm9rZXIxPC9lamItY2xhc3M+Ci0JCQk8c2Vzc2lvbi10eXBlPlN0YXRlbGVzczwvc2Vzc2lvbi10eXBlPgotCQkJPGVudi1lbnRyeT4KLQkJCQk8ZW52LWVudHJ5LW5hbWU+amF2YTptb2R1bGUvZW52L0R1cGxpY2F0ZUVudkVudHJ5PC9lbnYtZW50cnktbmFtZT4KLQkJCQk8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvZW52LWVudHJ5LXR5cGU+Ci0JCQkJPGVudi1lbnRyeS12YWx1ZT5mcm9tIGVqYjwvZW52LWVudHJ5LXZhbHVlPgotCQkJPC9lbnYtZW50cnk+Ci0JCQkKLQkJCTxlbnYtZW50cnk+Ci0JCQkJPGVudi1lbnRyeS1uYW1lPmphdmE6Y29tcC9lbnYvRHVwbGljYXRlRW52RW50cnk8L2Vudi1lbnRyeS1uYW1lPgotCQkJCTxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KLQkJCQk8ZW52LWVudHJ5LXZhbHVlPmZyb20gZWpiPC9lbnYtZW50cnktdmFsdWU+Ci0JCQk8L2Vudi1lbnRyeT4KLQkJPC9zZXNzaW9uPgotCQotCTwvZW50ZXJwcmlzZS1iZWFucz4KKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiB4bWxuczplamI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9lamItamFyXzNfMS54c2QiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18xLnhzZCIKKyAgICB2ZXJzaW9uPSIzLjEiPgorICAgIDxlbnRlcnByaXNlLWJlYW5zPgorICAgICAgICA8c2Vzc2lvbj4KKyAgICAgICAgICAgIDxlamItbmFtZT5JbnZva2VyMTwvZWpiLW5hbWU+CisgICAgICAgICAgICA8ZWpiLWNsYXNzPmdmLkludm9rZXIxPC9lamItY2xhc3M+CisgICAgICAgICAgICA8c2Vzc2lvbi10eXBlPlN0YXRlbGVzczwvc2Vzc2lvbi10eXBlPgorICAgICAgICAgICAgPGVudi1lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW52LWVudHJ5LW5hbWU+amF2YTptb2R1bGUvZW52L0R1cGxpY2F0ZUVudkVudHJ5PC9lbnYtZW50cnktbmFtZT4KKyAgICAgICAgICAgICAgICA8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvZW52LWVudHJ5LXR5cGU+CisgICAgICAgICAgICAgICAgPGVudi1lbnRyeS12YWx1ZT5mcm9tIGVqYjwvZW52LWVudHJ5LXZhbHVlPgorICAgICAgICAgICAgPC9lbnYtZW50cnk+CisKKyAgICAgICAgICAgIDxlbnYtZW50cnk+CisgICAgICAgICAgICAgICAgPGVudi1lbnRyeS1uYW1lPmphdmE6Y29tcC9lbnYvRHVwbGljYXRlRW52RW50cnk8L2Vudi1lbnRyeS1uYW1lPgorICAgICAgICAgICAgICAgIDxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KKyAgICAgICAgICAgICAgICA8ZW52LWVudHJ5LXZhbHVlPmZyb20gZWpiPC9lbnYtZW50cnktdmFsdWU+CisgICAgICAgICAgICA8L2Vudi1lbnRyeT4KKyAgICAgICAgPC9zZXNzaW9uPgorCisgICAgPC9lbnRlcnByaXNlLWJlYW5zPgogCiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db3JyZWN0RW52RW50cnkvc3JjL2dmL0ludm9rZXIxLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvcnJlY3RFbnZFbnRyeS9zcmMvZ2YvSW52b2tlcjEuamF2YQppbmRleCBjZGQ2NGZlLi45Nzk2ZDc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvcnJlY3RFbnZFbnRyeS9zcmMvZ2YvSW52b2tlcjEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvcnJlY3RFbnZFbnRyeS9zcmMvZ2YvSW52b2tlcjEuamF2YQpAQCAtMjMsNSArMjMsNSBAQAogQFN0YXRlbGVzcwogcHVibGljIGNsYXNzIEludm9rZXIxIHsKIAotCSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vSW5jb3JyZWN0RW52RW50cnkvV2ViQ29udGVudC9XRUItSU5GL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9JbmNvcnJlY3RFbnZFbnRyeS9XZWJDb250ZW50L1dFQi1JTkYvZWpiLWphci54bWwKaW5kZXggOTEzMDRlMy4uMGQ4OTk5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9JbmNvcnJlY3RFbnZFbnRyeS9XZWJDb250ZW50L1dFQi1JTkYvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9JbmNvcnJlY3RFbnZFbnRyeS9XZWJDb250ZW50L1dFQi1JTkYvZWpiLWphci54bWwKQEAgLTE4LDI5ICsxOCwyOSBAQAogLS0+CiAKIDxlamItamFyIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6ZWpiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzEueHNkIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9lamItamFyXzNfMS54c2QiCi0JdmVyc2lvbj0iMy4xIj4KLQk8ZW50ZXJwcmlzZS1iZWFucz4KLQkJPHNlc3Npb24+Ci0JCQk8ZWpiLW5hbWU+SW52b2tlcjE8L2VqYi1uYW1lPgotCQkJPGVqYi1jbGFzcz5nZi5JbnZva2VyMTwvZWpiLWNsYXNzPgotCQkJPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT4KLQkJCTxlbnYtZW50cnk+Ci0JCQkJPGVudi1lbnRyeS1uYW1lPmphdmE6bW9kdWxlL2Vudi9EdXBsaWNhdGVFbnZFbnRyeTwvZW52LWVudHJ5LW5hbWU+Ci0JCQkJPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2Vudi1lbnRyeS10eXBlPgotCQkJCTxlbnYtZW50cnktdmFsdWU+ZnJvbSBtb2R1bGU8L2Vudi1lbnRyeS12YWx1ZT4KLQkJCTwvZW52LWVudHJ5PgotCQkJCi0JCQk8ZW52LWVudHJ5PgotCQkJCTxlbnYtZW50cnktbmFtZT5qYXZhOmNvbXAvZW52L0R1cGxpY2F0ZUVudkVudHJ5PC9lbnYtZW50cnktbmFtZT4KLQkJCQk8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvZW52LWVudHJ5LXR5cGU+Ci0JCQkJPGVudi1lbnRyeS12YWx1ZT5Gcm9tIGNvbXA8L2Vudi1lbnRyeS12YWx1ZT4KLQkJCTwvZW52LWVudHJ5PgotCQk8L3Nlc3Npb24+CisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6ZWpiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzEueHNkIgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9lamItamFyXzNfMS54c2QiCisgICAgdmVyc2lvbj0iMy4xIj4KKyAgICA8ZW50ZXJwcmlzZS1iZWFucz4KKyAgICAgICAgPHNlc3Npb24+CisgICAgICAgICAgICA8ZWpiLW5hbWU+SW52b2tlcjE8L2VqYi1uYW1lPgorICAgICAgICAgICAgPGVqYi1jbGFzcz5nZi5JbnZva2VyMTwvZWpiLWNsYXNzPgorICAgICAgICAgICAgPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT4KKyAgICAgICAgICAgIDxlbnYtZW50cnk+CisgICAgICAgICAgICAgICAgPGVudi1lbnRyeS1uYW1lPmphdmE6bW9kdWxlL2Vudi9EdXBsaWNhdGVFbnZFbnRyeTwvZW52LWVudHJ5LW5hbWU+CisgICAgICAgICAgICAgICAgPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2Vudi1lbnRyeS10eXBlPgorICAgICAgICAgICAgICAgIDxlbnYtZW50cnktdmFsdWU+ZnJvbSBtb2R1bGU8L2Vudi1lbnRyeS12YWx1ZT4KKyAgICAgICAgICAgIDwvZW52LWVudHJ5PgogCi0JCi0JPC9lbnRlcnByaXNlLWJlYW5zPgorICAgICAgICAgICAgPGVudi1lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW52LWVudHJ5LW5hbWU+amF2YTpjb21wL2Vudi9EdXBsaWNhdGVFbnZFbnRyeTwvZW52LWVudHJ5LW5hbWU+CisgICAgICAgICAgICAgICAgPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2Vudi1lbnRyeS10eXBlPgorICAgICAgICAgICAgICAgIDxlbnYtZW50cnktdmFsdWU+RnJvbSBjb21wPC9lbnYtZW50cnktdmFsdWU+CisgICAgICAgICAgICA8L2Vudi1lbnRyeT4KKyAgICAgICAgPC9zZXNzaW9uPgorCisKKyAgICA8L2VudGVycHJpc2UtYmVhbnM+CiAKIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0luY29ycmVjdEVudkVudHJ5L3NyYy9nZi9JbnZva2VyMS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9JbmNvcnJlY3RFbnZFbnRyeS9zcmMvZ2YvSW52b2tlcjEuamF2YQppbmRleCBjZGQ2NGZlLi45Nzk2ZDc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0luY29ycmVjdEVudkVudHJ5L3NyYy9nZi9JbnZva2VyMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vSW5jb3JyZWN0RW52RW50cnkvc3JjL2dmL0ludm9rZXIxLmphdmEKQEAgLTIzLDUgKzIzLDUgQEAKIEBTdGF0ZWxlc3MKIHB1YmxpYyBjbGFzcyBJbnZva2VyMSB7CiAKLQkgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL1Jlc291cmNlUmVmL0NvcnJlY3RRdWV1ZVJlcy9NRVRBLUlORi9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vUmVzb3VyY2VSZWYvQ29ycmVjdFF1ZXVlUmVzL01FVEEtSU5GL2VqYi1qYXIueG1sCmluZGV4IDYxZDBmYWMuLjliYzQ4ODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vUmVzb3VyY2VSZWYvQ29ycmVjdFF1ZXVlUmVzL01FVEEtSU5GL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vUmVzb3VyY2VSZWYvQ29ycmVjdFF1ZXVlUmVzL01FVEEtSU5GL2VqYi1qYXIueG1sCkBAIC0xOCwyNSArMTgsMjUgQEAKIC0tPgogCiA8ZWpiLWphciB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOmVqYj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18xLnhzZCIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzEueHNkIgotCXZlcnNpb249IjMuMSI+Ci0JPGVudGVycHJpc2UtYmVhbnM+Ci0JCTxzZXNzaW9uPgotCQkJPGVqYi1uYW1lPkludm9rZXI8L2VqYi1uYW1lPgotCQkJPGVqYi1jbGFzcz5nZi5JbnZva2VyPC9lamItY2xhc3M+Ci0JCQk8c2Vzc2lvbi10eXBlPlN0YXRlbGVzczwvc2Vzc2lvbi10eXBlPgotCQkJPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmPgotCQkJCTxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPmptcy9NeVF1ZXVlPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPgotCQkJCTxtZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+amFrYXJ0YS5qbXMuUXVldWU8L21lc3NhZ2UtZGVzdGluYXRpb24tdHlwZT4KLQkJCQk8bWVzc2FnZS1kZXN0aW5hdGlvbi11c2FnZT5Qcm9kdWNlczwvbWVzc2FnZS1kZXN0aW5hdGlvbi11c2FnZT4KLQkJCQk8bWVzc2FnZS1kZXN0aW5hdGlvbi1saW5rPk15UXVldWVMaW5rPC9tZXNzYWdlLWRlc3RpbmF0aW9uLWxpbms+Ci0JCQk8L21lc3NhZ2UtZGVzdGluYXRpb24tcmVmPgotCQk8L3Nlc3Npb24+Ci0JPC9lbnRlcnByaXNlLWJlYW5zPgotCTxhc3NlbWJseS1kZXNjcmlwdG9yPgotCQk8bWVzc2FnZS1kZXN0aW5hdGlvbj4KLQkJCTxtZXNzYWdlLWRlc3RpbmF0aW9uLW5hbWU+TXlRdWV1ZUxpbms8L21lc3NhZ2UtZGVzdGluYXRpb24tbmFtZT4KLQkJPC9tZXNzYWdlLWRlc3RpbmF0aW9uPgotCTwvYXNzZW1ibHktZGVzY3JpcHRvcj4KKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiB4bWxuczplamI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9lamItamFyXzNfMS54c2QiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18xLnhzZCIKKyAgICB2ZXJzaW9uPSIzLjEiPgorICAgIDxlbnRlcnByaXNlLWJlYW5zPgorICAgICAgICA8c2Vzc2lvbj4KKyAgICAgICAgICAgIDxlamItbmFtZT5JbnZva2VyPC9lamItbmFtZT4KKyAgICAgICAgICAgIDxlamItY2xhc3M+Z2YuSW52b2tlcjwvZWpiLWNsYXNzPgorICAgICAgICAgICAgPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT4KKyAgICAgICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT5qbXMvTXlRdWV1ZTwvbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlPmpha2FydGEuam1zLlF1ZXVlPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tdXNhZ2U+UHJvZHVjZXM8L21lc3NhZ2UtZGVzdGluYXRpb24tdXNhZ2U+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tbGluaz5NeVF1ZXVlTGluazwvbWVzc2FnZS1kZXN0aW5hdGlvbi1saW5rPgorICAgICAgICAgICAgPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4KKyAgICAgICAgPC9zZXNzaW9uPgorICAgIDwvZW50ZXJwcmlzZS1iZWFucz4KKyAgICA8YXNzZW1ibHktZGVzY3JpcHRvcj4KKyAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24+CisgICAgICAgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1uYW1lPk15UXVldWVMaW5rPC9tZXNzYWdlLWRlc3RpbmF0aW9uLW5hbWU+CisgICAgICAgIDwvbWVzc2FnZS1kZXN0aW5hdGlvbj4KKyAgICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+CiA8L2VqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL1Jlc291cmNlUmVmL0NvcnJlY3RRdWV1ZVJlcy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL1Jlc291cmNlUmVmL0NvcnJlY3RRdWV1ZVJlcy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKaW5kZXggNGJhYjFlNy4uMDIxYmQ1NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9SZXNvdXJjZVJlZi9Db3JyZWN0UXVldWVSZXMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vUmVzb3VyY2VSZWYvQ29ycmVjdFF1ZXVlUmVzL01FVEEtSU5GL3N1bi1lamItamFyLnhtbApAQCAtMTksMTAgKzE5LDEwIEBACiAtLT4KIAogPHN1bi1lamItamFyPgotCTxlbnRlcnByaXNlLWJlYW5zPgotCQk8bWVzc2FnZS1kZXN0aW5hdGlvbj4KLQkJCTxtZXNzYWdlLWRlc3RpbmF0aW9uLW5hbWU+TXlRdWV1ZUxpbms8L21lc3NhZ2UtZGVzdGluYXRpb24tbmFtZT4KLQkJCTxqbmRpLW5hbWU+am1zL2RlcGxveW1lbnRfam5kaXZhbGlkYXRpb25fcXVldWU8L2puZGktbmFtZT4KLQkJPC9tZXNzYWdlLWRlc3RpbmF0aW9uPgotCTwvZW50ZXJwcmlzZS1iZWFucz4KKyAgICA8ZW50ZXJwcmlzZS1iZWFucz4KKyAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24+CisgICAgICAgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1uYW1lPk15UXVldWVMaW5rPC9tZXNzYWdlLWRlc3RpbmF0aW9uLW5hbWU+CisgICAgICAgICAgICA8am5kaS1uYW1lPmptcy9kZXBsb3ltZW50X2puZGl2YWxpZGF0aW9uX3F1ZXVlPC9qbmRpLW5hbWU+CisgICAgICAgIDwvbWVzc2FnZS1kZXN0aW5hdGlvbj4KKyAgICA8L2VudGVycHJpc2UtYmVhbnM+CiA8L3N1bi1lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qYXZhZWU4L2Vhci9jbGllbnQvTUVUQS1JTkYvYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvamF2YWVlOC9lYXIvY2xpZW50L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKaW5kZXggZDM0NTU5ZC4uOGRmYTg0ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qYXZhZWU4L2Vhci9jbGllbnQvTUVUQS1JTkYvYXBwbGljYXRpb24tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2phdmFlZTgvZWFyL2NsaWVudC9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC0yMSw1ICsyMSw1IEBACiAgICAgICAgICAgICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgICAgICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSBodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2FwcGxpY2F0aW9uLWNsaWVudF84LnhzZCI+CiAgIDxkaXNwbGF5LW5hbWU+dGVzdGFwcDwvZGlzcGxheS1uYW1lPgotICAgCisKIDwvYXBwbGljYXRpb24tY2xpZW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9hcGl0ZXN0cy9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2FwaXRlc3RzL1Rlc3RDbGllbnQuamF2YQppbmRleCBkZTAyYjRkLi5lYWMxZmVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2FwaXRlc3RzL1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2FwaXRlc3RzL1Rlc3RDbGllbnQuamF2YQpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICBsb2coIkFsbCBleHBlY3RlZCBhcHBsaWNhdGlvbnMgaGF2ZSBiZWVuIHJlcG9ydGVkIik7CiAgICAgICAgIHJldHVybih0cnVlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tSZXBvcnRlZEFwcHMoU3RyaW5nW10gYXJncywgQm9vbGVhbiBzdGF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgbG9nKCJDaGVja2luZyBpZiBhcHBsaWNhdGlvbiBuYW1lcyByZXBvcnRlZCBhcmUgdmFsaWQiKTsKQEAgLTEzNSw3ICsxMzUsNyBAQAogCiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICpXZSBleHBlY3QgdHdvIGV2ZW50cywgb25lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHN0YXJ0IG9wZXJhdGlvbiBlbnRlcmluZyB0aGUgInJ1bm5pbmciIHN0YXRlIGFuZAotICAgICAgICAgICAgICpvbmUgZm9yIHRoZSBvcGVyYXRpb24gY29tcGxldGluZy4gIElmIHRoZSByYWNlIGNvbmRpdGlvbiBoYXMgb2NjdXJyZWQsIHRoZW4gd2Ugd29uJ3Qgc2VlIGJvdGggb2YgCisgICAgICAgICAgICAgKm9uZSBmb3IgdGhlIG9wZXJhdGlvbiBjb21wbGV0aW5nLiAgSWYgdGhlIHJhY2UgY29uZGl0aW9uIGhhcyBvY2N1cnJlZCwgdGhlbiB3ZSB3b24ndCBzZWUgYm90aCBvZgogICAgICAgICAgICAgICp0aGUgZXZlbnRzLiAgV2UncmUgZ29pbmcgdG8gbG9vayBhdCB0aGUgZmlyc3Qgb25lLCBleHBlY3RpbmcgaXQgdG8gYmUgdGhlICJydW5uaW5nIiBldmVudC4KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgaWYgKHJlY2VpdmVkRXZlbnRzLmxlbmd0aCA8IDIpIHsKQEAgLTE3MCw3ICsxNzAsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgICAgICAKKwogICAgIHByaXZhdGUgaW50IHRlc3RTdGFydFN0b3AoU3RyaW5nW10gYXJncykgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgbG9nKCJTdG9wcGluZyBhbGwgQXBwbGljYXRpb25zIik7CkBAIC0yMDksNyArMjA5LDcgQEAKIAogICAgICAgICAgICAgSGFzaE1hcCBzZXQgPSBuZXcgSGFzaE1hcCgpOwogICAgICAgICAgICAgc2V0LnB1dChhcmdzWzRdLCAiYXBwIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYm9vbGVhbiByZXQgPSBjaGVja0lmQXBwc0FyZVByZXNlbnQoYXBwcywgc2V0KTsKICAgICAgICAgICAgIGlmKCFyZXQpCiAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvYXBpdGVzdHMvVGVzdEpTUjg4Q29uY3VycmVuY3kuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvYXBpdGVzdHMvVGVzdEpTUjg4Q29uY3VycmVuY3kuamF2YQppbmRleCA0NDQ1NWZmLi5jMDQ2ZjQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2FwaXRlc3RzL1Rlc3RKU1I4OENvbmN1cnJlbmN5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9hcGl0ZXN0cy9UZXN0SlNSODhDb25jdXJyZW5jeS5qYXZhCkBAIC00OSwxMSArNDksMTEgQEAKICAqSlZNcyBidXQgc3luY2hyb25pemVkLgogICo8cD4KICAqYXJndW1lbnRzOgotICogLS1ob3N0IDxob3N0PiAKLSAqIC0tcG9ydCA8cG9ydD4gCi0gKiAtLXVzZXJuYW1lIDx1c2VybmFtZT4gCi0gKiAtLXBhc3N3b3JkIDxwYXNzd29yZD4gCi0gKiAtLW9wZXJhdGlvbiA8b3BlcmF0aW9uPlsqPG4+XSAKKyAqIC0taG9zdCA8aG9zdD4KKyAqIC0tcG9ydCA8cG9ydD4KKyAqIC0tdXNlcm5hbWUgPHVzZXJuYW1lPgorICogLS1wYXNzd29yZCA8cGFzc3dvcmQ+CisgKiAtLW9wZXJhdGlvbiA8b3BlcmF0aW9uPlsqPG4+XQogICogLS1zdGFydFRpbWUgPHRlc3RTdGFydFRpbWU+IChhcyBIOm1tOnNzKQogICogLS1kZWxheSA8ZGVsYXlUaW1lKSAoaW4gbXMpCiAgKiAtLXNlY3VyZSA8dHJ1ZSBvciBmYWxzZT4KQEAgLTY0LDEwICs2NCwxMCBAQAogICo8cD4KICAqVGhlIGdldFRhcmdldHMgYW5kIGdldEFwcHMgdGFza3MgaW52b2tlIHRoZSBjb3JyZXNwb25kaW5nIGJhY2stZW5kIG1ldGhvZCBvbmx5CiAgKm9uY2UgaW4gZWFjaCB0aHJlYWQuICBUaGUgbG9vcEdldFRhcmdldHMgaXMgbW9yZSBsaWtlbHkgdG8gaW5kdWNlIHByb2JsZW1zIGlmCi0gKnRoZXJlIGFyZSByYWNlIGNvbmRpdGlvbnMgc29tZXdoZXJlIGluIHRoZSBjb2RlIHBhdGgsIHNpbmNlIGl0IGludm9rZXMgdGhlIAotICpnZXRUYXJnZXRzIG1ldGhvZCBtdWx0aXBsZSB0aW1lcyBmcm9tIGVhY2ggdGhyZWFkLiAgCisgKnRoZXJlIGFyZSByYWNlIGNvbmRpdGlvbnMgc29tZXdoZXJlIGluIHRoZSBjb2RlIHBhdGgsIHNpbmNlIGl0IGludm9rZXMgdGhlCisgKmdldFRhcmdldHMgbWV0aG9kIG11bHRpcGxlIHRpbWVzIGZyb20gZWFjaCB0aHJlYWQuCiAgKjxwPgotICpUaGUgc3lzdGVtIHByb3BlcnR5IHNsZWVwLnRpbWUsIGlmIHNldCwgaXMgdXNlZCBhcyB0aGUgZGVsYXkgYmV0d2VlbiB3aGVuIAorICpUaGUgc3lzdGVtIHByb3BlcnR5IHNsZWVwLnRpbWUsIGlmIHNldCwgaXMgdXNlZCBhcyB0aGUgZGVsYXkgYmV0d2VlbiB3aGVuCiAgKm11bHRpcGxlIHRocmVhZHMgYXJlIHN0YXJ0ZWQuICBUaGlzIGlzIG5vcm1hbGx5IG5vdCBuZWVkZWQgYnV0IGNvdWxkIGJlIHVzZWQKICAqdG8gc3RhZ2dlciB0aGUgcmVxdWVzdHMgZnJvbSB0aGUgdGhyZWFkcyB0aGF0IGFyZSBzdGFydGVkIHRvIHNlZSBpZiBkb2luZwogICpzbyBhdm9pZHMgYW55IHJhY2UgY29uZGl0b24gdGhhdCBpcyByZXZlYWxlZCBieSBzdGFydGluZyB0aGUgdGhyZWFkcwpAQCAtODEsMTEgKzgxLDExIEBACiAgKiBAYXV0aG9yIHRqcXVpbm4KICAqLwogcHVibGljIGNsYXNzIFRlc3RKU1I4OENvbmN1cnJlbmN5IHsKLSAgICAKKwogICAgIHByaXZhdGUgRGVwbG95bWVudEZhY3RvcnkgZmFjdG9yeTsKLSAgICAKKwogICAgIHByaXZhdGUgRGVwbG95bWVudE1hbmFnZXIgbWFuYWdlcjsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIT1NUID0gIi0taG9zdCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUlQgPSAiLS1wb3J0IjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVNFUk5BTUUgPSAiLS11c2VybmFtZSI7CkBAIC05NSw5ICs5NSw5IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFTEFZID0gIi0tZGVsYXkiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTRUNVUkUgPSAiLS1zZWN1cmUiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUSU1FT1VUID0gIi0tdGltZW91dCI7Ci0gICAgCisKICAgICAvKiogaW5pdGlhbGl6YXRpb24gaW5mbyBmb3IgdGhlIGNvbW1hbmQtbGluZSBvcHRpb24gbmFtZXMgYW5kIGRlZmF1bHRzLCBpZiBhbnkgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIG9wdGlvbnNBbmREZWZhdWx0cyA9IG5ldyBTdHJpbmdbXVtdIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdW10gb3B0aW9uc0FuZERlZmF1bHRzID0gbmV3IFN0cmluZ1tdW10KICAgICAgICAgeyB7SE9TVCwgImxvY2FsaG9zdCJ9LAogICAgICAgICAgIHtQT1JULCAiNDg0OCJ9LAogICAgICAgICAgIHtVU0VSTkFNRSwgImFkbWluIn0sCkBAIC0xMDgsMTkgKzEwOCwxOSBAQAogICAgICAgICAgIHtTRUNVUkUsICJmYWxzZSJ9LAogICAgICAgICAgIHtUSU1FT1VULCAiMTAwMDAifSAvLyAxMCBzZWNvbmRzCiAgICAgfTsKLSAgICAKKwogICAgIC8qIGNvbW1hbmQtbGluZSBvcHRpb24gbmFtZXMgYW5kIHZhbHVlcyAqLwogICAgIHByaXZhdGUgSGFzaE1hcDxTdHJpbmcsU3RyaW5nPiBvcHRpb25zOwotICAgIAorCiAgICAgLyogdXNlZCB0byBjb250cm9sIGhvdyBtYW55IGl0ZXJhdGlvbnMgb2YgdGhlIGxvb3BHZXRUYXJnZXRzIHdpbGwgcnVuICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExPT1BfTUFYID0gMTAwOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBUZXN0SlNSODhDb25jdXJyZW5jeQogICAgICAqLwogICAgIHB1YmxpYyBUZXN0SlNSODhDb25jdXJyZW5jeSgpIHsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAcGFyYW0gYXJncyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwogICAgICAqLwpAQCAtMTMyLDE2ICsxMzIsMTYgQEAKICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHJ1bihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRGVwbG95bWVudE1hbmFnZXJDcmVhdGlvbkV4Y2VwdGlvbiwgVGFyZ2V0RXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgUGFyc2VFeGNlcHRpb24sIFVzZXJFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcHJlcGFyZUFyZ3MoYXJncyk7CiAgICAgICAgICAgICBmYWN0b3J5ID0gaW5pdEZhY3RvcnkoKTsKICAgICAgICAgICAgIG1hbmFnZXIgPSBpbml0TWFuYWdlcigKLSAgICAgICAgICAgICAgICAgICAgZ2V0SG9zdCgpLCAKLSAgICAgICAgICAgICAgICAgICAgZ2V0UG9ydCgpLCAKLSAgICAgICAgICAgICAgICAgICAgZ2V0VXNlcm5hbWUoKSwgCi0gICAgICAgICAgICAgICAgICAgIGdldFBhc3N3b3JkKCksIAorICAgICAgICAgICAgICAgICAgICBnZXRIb3N0KCksCisgICAgICAgICAgICAgICAgICAgIGdldFBvcnQoKSwKKyAgICAgICAgICAgICAgICAgICAgZ2V0VXNlcm5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgZ2V0UGFzc3dvcmQoKSwKICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5nZXQoU0VDVVJFKS5lcXVhbHNJZ25vcmVDYXNlKCJ0cnVlIikpOwogCiAgICAgICAgICAgICB3YWl0Rm9yVGFyZ2V0VGltZSgpOwpAQCAtMTUxLDkgKzE1MSw5IEBACiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVzZXIgZXJyb3I6ICIgKyB1ZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgd2FpdEZvclRhcmdldFRpbWUoKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsKICAgICAgICAgaWYgKGdldFRhcmdldFRpbWVUZXh0KCkgPT0gbnVsbCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJObyBzdGFydCBkZWxheSBzcGVjaWZpZWQ7IGNvbnRpbnVpbmcgaW1tZWRpYXRlbHkiKTsKQEAgLTE2Miw3ICsxNjIsNyBAQAogICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IHRhcmdldFRpbWVGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiSDptbTpzcyIpOwogICAgICAgICBDYWxlbmRhciB0YXJnZXRUaW1lID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKICAgICAgICAgdGFyZ2V0VGltZS5zZXRUaW1lKHRhcmdldFRpbWVGb3JtYXQucGFyc2UoZ2V0VGFyZ2V0VGltZVRleHQoKSkpOwotICAgICAgICAKKwogICAgICAgICBDYWxlbmRhciBub3cgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOwogICAgICAgICB0YXJnZXRUaW1lLnNldChub3cuZ2V0KENhbGVuZGFyLllFQVIpLCBub3cuZ2V0KENhbGVuZGFyLk1PTlRIKSwgbm93LmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDdXJyZW50bHkgaXQgaXMgIiArIG5vdy5nZXRUaW1lKCkudG9TdHJpbmcoKSk7CkBAIC0xNzAsMTAgKzE3MCwxMCBAQAogICAgICAgICBUaHJlYWQuc2xlZXAodGFyZ2V0VGltZS5nZXRUaW1lSW5NaWxsaXMoKSAtIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQcm9jZWVkaW5nIik7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHByZXBhcmVBcmdzKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBVc2VyRXhjZXB0aW9uIHsKICAgICAgICAgb3B0aW9ucyA9IGluaXRPcHRpb25zTWFwKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGludCBpID0gMDsKICAgICAgICAgd2hpbGUgKGkgPCBhcmdzLmxlbmd0aCkgewogICAgICAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbnNLZXkoYXJnc1tpXSkpIHsKQEAgLTE4MywxNiArMTgzLDE2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpKys7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZW5zdXJlUmVxdWlyZWRJbmZvU3VwcGxpZWQoKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgZW5zdXJlUmVxdWlyZWRJbmZvU3VwcGxpZWQoKSB0aHJvd3MgVXNlckV4Y2VwdGlvbiB7CiAgICAgICAgIGlmIChnZXRPcGVyYXRpb24oKSA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgVXNlckV4Y2VwdGlvbigiRXhwZWN0ZWQgLS1vcGVyYXRpb24gPG9wZXJhdGlvblsqbl0+IGJ1dCBub25lIHdhcyBmb3VuZCIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBIYXNoTWFwPFN0cmluZyxTdHJpbmc+IGluaXRPcHRpb25zTWFwKCkgewogICAgICAgICBIYXNoTWFwPFN0cmluZyxTdHJpbmc+IHJlc3VsdCA9IG5ldyBIYXNoTWFwPFN0cmluZyxTdHJpbmc+KCk7CiAgICAgICAgIGZvciAoU3RyaW5nW10gb3B0aW9uQW5kVmFsdWUgOiBvcHRpb25zQW5kRGVmYXVsdHMpIHsKQEAgLTIwMCwxNCArMjAwLDE0IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBnZXRSZXF1aXJlZE9wdGlvblZhbHVlKFN0cmluZ1tdIGFyZ3MsIGludCB2YWx1ZVBvc2l0aW9uKSB0aHJvd3MgVXNlckV4Y2VwdGlvbiB7CiAgICAgICAgIGlmICgodmFsdWVQb3NpdGlvbiA+PSBhcmdzLmxlbmd0aCkgfHwgKGFyZ3NbdmFsdWVQb3NpdGlvbl0uc3RhcnRzV2l0aCgiLS0iKSkpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBVc2VyRXhjZXB0aW9uKCJObyB2YWx1ZSBhdmFpbGFibGUgZm9yICIgKyBhcmdzW3ZhbHVlUG9zaXRpb24gLSAxXSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGFyZ3NbdmFsdWVQb3NpdGlvbl07CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHVzYWdlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRldnRlc3RzLmRlcGxveW1lbnQuanNyODguYXBpdGVzdHMuVGVzdEpTUjg4Q29uY3VycmVuY3kgLS1ob3N0IDxob3N0PiAtLXBvcnQgPHBvcnQ+IC0tdXNlcm5hbWUgPHVzZXJuYW1lPiAtLXBhc3N3b3JkIDxwYXNzd29yZD4gLS1vcGVyYXRpb24gPG9wZXJhdGlvbj5bKjxuPl0gLS1zdGFydFRpbWUgdGVzdFN0YXJ0VGltZSAoYXMgSDptbTpzcykgLS1kZWxheSA8ZGVsYXktaW4tbXM+IC0tc2VjdXJlIHRydWUvZmFsc2UiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIHdoZXJlIDxvcGVyYXRpb24+IGNhbiBiZSBnZXRUYXJnZXRzLCBnZXRBcHBzLCBsb29wR2V0VGFyZ2V0cyIpOwpAQCAtMjE1LDE4ICsyMTUsMTggQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIHRlc3RTdGFydFRpbWUgaXMgYSB0aW1lIGluIHRoZSBjdXJyZW50IGRheSwgc3BlY2lmaWVkIGFzIFtIXUg6bW06c3MgIGRlZmF1bHQgaXMgdG8gc3RhcnQgaW1tZWRpYXRlbHkiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIGRlbGF5IGlzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmV0d2VlbiBzdGFydGluZyB0aHJlYWRzIik7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBEZXBsb3ltZW50RmFjdG9yeSBpbml0RmFjdG9yeSgpIHsKICAgICAgICAgLyoKICAgICAgICAgICpXZSBrbm93IHdlIGFyZSB0ZXN0aW5nIG91ciBmYWN0b3J5LCBzbyBqdXN0IGluc3RhbnRpYXRlIGl0LgogICAgICAgICAgKi8KICAgICAgICAgcmV0dXJuIG5ldyBTdW5EZXBsb3ltZW50RmFjdG9yeSgpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgRGVwbG95bWVudE1hbmFnZXIgaW5pdE1hbmFnZXIoCi0gICAgICAgICAgICBTdHJpbmcgaG9zdCwgCi0gICAgICAgICAgICBTdHJpbmcgcG9ydCwgCi0gICAgICAgICAgICBTdHJpbmcgdXNlcm5hbWUsIAorICAgICAgICAgICAgU3RyaW5nIGhvc3QsCisgICAgICAgICAgICBTdHJpbmcgcG9ydCwKKyAgICAgICAgICAgIFN0cmluZyB1c2VybmFtZSwKICAgICAgICAgICAgIFN0cmluZyBwYXNzd29yZCwKICAgICAgICAgICAgIGJvb2xlYW4gc2VjdXJlKSB0aHJvd3MgRGVwbG95bWVudE1hbmFnZXJDcmVhdGlvbkV4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZyB1cmwgPSAiZGVwbG95ZXI6U3VuOkFwcFNlcnZlcjo6IiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgZ2V0Q29ubmVjdGlvblN0cmluZ1N1ZmZpeChzZWN1cmUpOwpAQCAtMjY2LDI2ICsyNjYsMjYgQEAKICAgICAgICAgICAgICAgICB0LmpvaW4oZ2V0VGltZW91dCgpKTsKICAgICAgICAgICAgICAgICBhbGxUaHJlYWRzT0sgJj0gdGhyZWFkT0tbaV0uZ2V0KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKCAhIGFsbFRocmVhZHNPSykgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJBdCBsZWFzdCBvbmUgdGhyZWFkIGZhaWxlZCIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHByaW50VGFyZ2V0cyhpbnQgdGhyZWFkSUQpIHsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbIiArIHRocmVhZElEICsgIl1UYXJnZXRzOiIpOwogICAgICAgICBmb3IgKFRhcmdldCB0IDogZ2V0VGFyZ2V0cygpKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsiICsgdGhyZWFkSUQgKyAiXSAgIiArIHQuZ2V0TmFtZSgpKTsKICAgICAgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIFRhcmdldFtdIGdldFRhcmdldHMoKSB7CiAgICAgICAgIHJldHVybiBtYW5hZ2VyLmdldFRhcmdldHMoKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIFRhcmdldE1vZHVsZUlEW10gZ2V0QXBwcygpIHRocm93cyBUYXJnZXRFeGNlcHRpb24gewogICAgICAgICBUYXJnZXRbXSB0YXJnZXRzID0gZ2V0VGFyZ2V0cygpOwogICAgICAgICBNb2R1bGVUeXBlW10gdHlwZXMgPSBuZXcgTW9kdWxlVHlwZVtdIHtNb2R1bGVUeXBlLkVKQiwgTW9kdWxlVHlwZS5FQVIsIE1vZHVsZVR5cGUuQ0FSLCBNb2R1bGVUeXBlLlJBUn07CkBAIC0yOTUsNyArMjk1LDcgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0LnRvQXJyYXkobmV3IFRhcmdldE1vZHVsZUlEW3Jlc3VsdC5zaXplKCldKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgcHJpbnRBcHBzKGludCB0aHJlYWRJRCkgdGhyb3dzIFRhcmdldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyIgKyB0aHJlYWRJRCArICJdQXBwbGljYXRpb25zOiIpOwogICAgICAgICBmb3IgKFRhcmdldE1vZHVsZUlEIGlkIDogZ2V0QXBwcygpKSB7CkBAIC0zMDMsNyArMzAzLDcgQEAKICAgICAgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsiICsgdGhyZWFkSUQgKyAiXSIpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBsb29wR2V0VGFyZ2V0cygpIHsKICAgICAgICAgZ2V0VGFyZ2V0cygpOyAvLyB0byB3YXJtIHVwIHRoZSBjb25uZWN0aW9uCiAgICAgICAgIGxvbmcgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CkBAIC0zMTIsMjMgKzMxMiwyMyBAQAogICAgICAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWUpKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgcGVyZm9ybUZ1bmN0aW9uKFN0cmluZyBmdW5jdGlvbiwgaW50IHRocmVhZElEKSB0aHJvd3MgVGFyZ2V0RXhjZXB0aW9uIHsKICAgICAgICAgaWYgKGZ1bmN0aW9uLmVxdWFscygiZ2V0VGFyZ2V0cyIpKSB7CiAgICAgICAgICAgICBwcmludFRhcmdldHModGhyZWFkSUQpOwogICAgICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uLmVxdWFscygiZ2V0QXBwcyIpKSB7CiAgICAgICAgICAgICBwcmludEFwcHModGhyZWFkSUQpOwogICAgICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uLmVxdWFscygibG9vcEdldFRhcmdldHMiKSkgewotICAgICAgICAgICAgbG9vcEdldFRhcmdldHMoKTsgCisgICAgICAgICAgICBsb29wR2V0VGFyZ2V0cygpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJObyByZWNvZ25pemVkIGZ1bmN0aW9uIGluIHRocmVhZCAiICsgdGhyZWFkSUQpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIG11bHRpR2V0QXBwcygpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBnZXRTdGFydFRpbWVUZXh0KCkgewogICAgICAgICByZXR1cm4gb3B0aW9ucy5nZXQoU1RBUlRfVElNRSk7CiAgICAgfQpAQCAtMzYwLDcgKzM2MCw3IEBACiAgICAgcHJpdmF0ZSBsb25nIGdldERlbGF5KCkgewogICAgICAgICByZXR1cm4gTG9uZy5wYXJzZUxvbmcob3B0aW9ucy5nZXQoREVMQVkpKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBnZXRDb25uZWN0aW9uU3RyaW5nU3VmZml4KGJvb2xlYW4gc2VjdXJlKSB7CiAgICAgICAgIHJldHVybiBzZWN1cmUgPyAiOmh0dHBzIiA6ICIiOwogICAgIH0KQEAgLTM2OCwxOSArMzY4LDE5IEBACiAgICAgcHJpdmF0ZSBsb25nIGdldFRpbWVvdXQoKSB7CiAgICAgICAgIHJldHVybiBMb25nLnBhcnNlTG9uZyhvcHRpb25zLmdldChUSU1FT1VUKSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBjbGFzcyBSdW5uZXIgaW1wbGVtZW50cyBSdW5uYWJsZSB7Ci0gICAgICAgIAorCiAgICAgICAgIHByaXZhdGUgU3RyaW5nIGZ1bmN0aW9uOwogICAgICAgICBwcml2YXRlIGludCB0aHJlYWRJRDsKICAgICAgICAgcHJpdmF0ZSBBdG9taWNCb29sZWFuIHJlc3VsdDsKLSAgICAgICAgCisKICAgICAgICAgcHVibGljIFJ1bm5lcihTdHJpbmcgZnVuY3Rpb24sIGludCB0aHJlYWRJRCwgQXRvbWljQm9vbGVhbiByZXN1bHQpIHsKICAgICAgICAgICAgIFJ1bm5lci50aGlzLmZ1bmN0aW9uID0gZnVuY3Rpb247CiAgICAgICAgICAgICB0aGlzLnRocmVhZElEID0gdGhyZWFkSUQ7CiAgICAgICAgICAgICB0aGlzLnJlc3VsdCA9IHJlc3VsdDsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHBlcmZvcm1GdW5jdGlvbihmdW5jdGlvbiwgdGhyZWFkSUQpOwpAQCAtMzkyLDEwICszOTIsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgdGhyLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKkluZGljYXRlcyBhIHVzZXIgZXJyb3IsIHN1Y2ggYXMgYSBtaXNzaW5nIGNvbW1hbmQtbGluZSB2YWx1ZSwgdGhhdCBzaG91bGQKICAgICAgKmJlIGRpc3BsYXllZCB3aXRob3V0IGEgc3RhY2sgdHJhY2UuCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2FwaXRlc3RzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvYXBpdGVzdHMvYnVpbGQueG1sCmluZGV4IDlmOTY2M2YuLmM2NGIzZDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvYXBpdGVzdHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvYXBpdGVzdHMvYnVpbGQueG1sCkBAIC00MiwxOCArNDIsMTggQEAKICAgICA8L3BhdGg+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveUFwcHMiPgotCQk8ZGVsZXRlIGRpcj0iJHt0ZXN0c1Jvb3R9L2J1aWxkL3dhci9zZXJ2bGV0b25seSIvPgotCQk8ZGVsZXRlIGRpcj0iJHt0ZXN0c1Jvb3R9L2J1aWxkL2VqYi9zdGF0ZWxlc3NoZWxsbyIvPgotCQk8ZGVsZXRlIGRpcj0iJHt0ZXN0c1Jvb3R9L2J1aWxkL2Vhci93c3RvZWpiIi8+CisgICAgICAgIDxkZWxldGUgZGlyPSIke3Rlc3RzUm9vdH0vYnVpbGQvd2FyL3NlcnZsZXRvbmx5Ii8+CisgICAgICAgIDxkZWxldGUgZGlyPSIke3Rlc3RzUm9vdH0vYnVpbGQvZWpiL3N0YXRlbGVzc2hlbGxvIi8+CisgICAgICAgIDxkZWxldGUgZGlyPSIke3Rlc3RzUm9vdH0vYnVpbGQvZWFyL3dzdG9lamIiLz4KICAgICAgICAgPGFudCBkaXI9Ii4uLy4uL3dhci9zZXJ2bGV0b25seSIgdGFyZ2V0PSJhc3NlbWJsZSI+CiAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke3Rlc3RzUm9vdH0vYnVpbGQvd2FyL3NlcnZsZXRvbmx5Ii8+CiAgICAgICAgIDwvYW50PgogICAgICAgICA8YW50IGRpcj0iLi4vLi4vZWpiL3N0YXRlbGVzc2hlbGxvIiB0YXJnZXQ9ImFzc2VtYmxlIj4KICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7dGVzdHNSb290fS9idWlsZC9lamIvc3RhdGVsZXNzaGVsbG8iLz4KLSAgICAgICAgPC9hbnQ+ICAgICAgICAKKyAgICAgICAgPC9hbnQ+CiAgICAgICAgIDxhbnQgZGlyPSIuLi8uLi9lYXIvd3N0b2VqYiIgdGFyZ2V0PSJidWlsZCI+CiAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke3Rlc3RzUm9vdH0vYnVpbGQvZWFyL3dzdG9lamIiLz4KLSAgICAgICAgPC9hbnQ+ICAgICAgICAKKyAgICAgICAgPC9hbnQ+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLmRlcGxveS5hc2FkbWluIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9IiR7dGVzdHNSb290fS9idWlsZC93YXIvc2VydmxldG9ubHkvc2VydmxldG9ubHkud2FyIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdE5hbWUiIHZhbHVlPSJzZXJ2bGV0b25seSIvPgpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nIiB2YWx1ZT0iJHtidWlsZH0vJHtsb2cuaWR9Lm91dHB1dC5sb2ciLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5Db25jdXJyZW5jeUNsaWVudCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkNvbmN1cnJlbmN5Q2xpZW50ICR7YXJnLmxpc3R9Ii8+CiAgICAgICAgIDxqYXZhCkBAIC0xOTgsNyArMTk4LDcgQEAKIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95QXBwcyIgLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuQ29uY3VycmVuY3lUZXN0IiBkZXBlbmRzPSJpbml0Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRlc2NyaXB0aW9uIiB2YWx1ZT0ianNyODgvYXBpdGVzdHMgVGVzdCBKU1ItODggY29uY3VycmVudCB1c2FnZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2J1aWxkLnhtbAppbmRleCA2NjlhMDJiLi41ZGViYmExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2J1aWxkLnhtbApAQCAtMjMsNyArMjMsNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqc3I4OCIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotICAgICZjb21tb25CdWlsZDsgICAgCisgICAgJmNvbW1vbkJ1aWxkOwogCiAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CiAgICAgICAgIDxhbnQgZGlyPSJ3YXIiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2J1aWxkLnhtbAppbmRleCAwZjBhOTY3Li4yNGE4MTJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2J1aWxkLnhtbApAQCAtMjMsMTYgKzIzLDE2IEBACiAKIDxwcm9qZWN0IG5hbWU9ImRlcGxveW1lbnRtYW5hZ2VyIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0JJmNvbW1vbkJ1aWxkOyAgICAKKyAgICAmY29tbW9uQnVpbGQ7CiAgICAgPHByb3BlcnR5IG5hbWU9ImFyY2hpdmVkaXIiIHZhbHVlPSIke2J1aWxkfS9hcmNoaXZlcyIvPgogCi0JPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+Ci0JCTxhbnQgZGlyPSJkaXN0cmlidXRlIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2Rpc3RyaWJ1dGUiLz4KLQkJPC9hbnQ+Ci0JCTxhbnQgZGlyPSJnZXRYTW9kdWxlcyIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9nZXRYTW9kdWxlcyIvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KKyAgICAgICAgPGFudCBkaXI9ImRpc3RyaWJ1dGUiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vZGlzdHJpYnV0ZSIvPgorICAgICAgICA8L2FudD4KKyAgICAgICAgPGFudCBkaXI9ImdldFhNb2R1bGVzIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2dldFhNb2R1bGVzIi8+CisgICAgICAgIDwvYW50PgorICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2Rpc3RyaWJ1dGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9kaXN0cmlidXRlL2J1aWxkLnhtbAppbmRleCBmNTkxMTkwLi5iYTYyNzc3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2Rpc3RyaWJ1dGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZGVwbG95bWVudG1hbmFnZXIvZGlzdHJpYnV0ZS9idWlsZC54bWwKQEAgLTIzLDE5ICsyMywxOSBAQAogCiA8cHJvamVjdCBuYW1lPSJkaXN0cmlidXRlIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0JJmNvbW1vbkJ1aWxkOyAgICAKKyAgICAmY29tbW9uQnVpbGQ7CiAKLQk8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KLQkJPGFudCBkaXI9ImNoaWxkdGFyZ2V0bW9kdWxlaWQiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0iLz4KLQkJPC9hbnQ+Ci0JCTxhbnQgZGlyPSJnZXR3ZWJ1cmwiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0iLz4KLQkJPC9hbnQ+Ci0JCTxhbnQgZGlyPSJjbGllbnRjb25maWd1cmF0aW9uIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9Ii8+Ci0JCTwvYW50PgorICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgorICAgICAgICA8YW50IGRpcj0iY2hpbGR0YXJnZXRtb2R1bGVpZCIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfSIvPgorICAgICAgICA8L2FudD4KKyAgICAgICAgPGFudCBkaXI9ImdldHdlYnVybCIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfSIvPgorICAgICAgICA8L2FudD4KKyAgICAgICAgPGFudCBkaXI9ImNsaWVudGNvbmZpZ3VyYXRpb24iIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0iLz4KKyAgICAgICAgPC9hbnQ+CiAKLQk8L3RhcmdldD4KKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9kaXN0cmlidXRlL2NoaWxkdGFyZ2V0bW9kdWxlaWQvRGVwbG95VGFyZ2V0TW9kdWxlSURUZXN0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZGVwbG95bWVudG1hbmFnZXIvZGlzdHJpYnV0ZS9jaGlsZHRhcmdldG1vZHVsZWlkL0RlcGxveVRhcmdldE1vZHVsZUlEVGVzdGVyLmphdmEKaW5kZXggZGQxNzRiMS4uMDI4ZGUyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9kaXN0cmlidXRlL2NoaWxkdGFyZ2V0bW9kdWxlaWQvRGVwbG95VGFyZ2V0TW9kdWxlSURUZXN0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2Rpc3RyaWJ1dGUvY2hpbGR0YXJnZXRtb2R1bGVpZC9EZXBsb3lUYXJnZXRNb2R1bGVJRFRlc3Rlci5qYXZhCkBAIC00MCwxNyArNDAsMTcgQEAKICAqIEBhdXRob3IgSmVyb21lIERvY2hlegogICovCiBwdWJsaWMgY2xhc3MgRGVwbG95VGFyZ2V0TW9kdWxlSURUZXN0ZXIgZXh0ZW5kcyBKU1I4OERlcGxveWVyIHsKLSAgICAKKwogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIERlcGxveVRhcmdldE1vZHVsZUlEVGVzdGVyICovCi0gICAgcHVibGljIERlcGxveVRhcmdldE1vZHVsZUlEVGVzdGVyKFN0cmluZyBob3N0LCBTdHJpbmcgcG9ydCwgU3RyaW5nIHVzZXIsIFN0cmluZyBwYXNzd29yZCkgeyAgICAgICAKKyAgICBwdWJsaWMgRGVwbG95VGFyZ2V0TW9kdWxlSURUZXN0ZXIoU3RyaW5nIGhvc3QsIFN0cmluZyBwb3J0LCBTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkKSB7CiAgICAgICAgIHN1cGVyKGhvc3QsIHBvcnQsIHVzZXIsIHBhc3N3b3JkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAcGFyYW0gYXJncyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIERlcGxveVRhcmdldE1vZHVsZUlEVGVzdGVyIGRlcGxveWVyID0gZ2V0RGVwbG95ZXIoYXJncyk7CiAgICAgICAgICAgICBUYXJnZXRNb2R1bGVJRFtdIGlkcyA9IGRlcGxveWVyLmRlcGxveShhcmdzKTsKQEAgLTU5LDIzICs1OSwyMyBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5leGl0KDApOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBsb2coIlRlc3QgRkFJTEVEIik7Ci0gICAgICAgICAgICAgICAgZGVwbG95ZXIuZHVtcE1vZHVsZXNJRHMoIiIsIGlkcyk7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlcGxveWVyLmR1bXBNb2R1bGVzSURzKCIiLCBpZHMpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgICB9Ci0gICAgfSAKLSAgICAKLSAgICBwcm90ZWN0ZWQgc3RhdGljIERlcGxveVRhcmdldE1vZHVsZUlEVGVzdGVyIGdldERlcGxveWVyKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICByZXR1cm4gbmV3IERlcGxveVRhcmdldE1vZHVsZUlEVGVzdGVyKGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0pOyAgICAgICAgICAgICAgICAKICAgICB9Ci0gICAgCi0gICAgCi0gICAgcHJvdGVjdGVkIFRhcmdldE1vZHVsZUlEW10gZGVwbG95KFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geyAgICAgICAgCi0gICAgICAgIAorCisgICAgcHJvdGVjdGVkIHN0YXRpYyBEZXBsb3lUYXJnZXRNb2R1bGVJRFRlc3RlciBnZXREZXBsb3llcihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgcmV0dXJuIG5ldyBEZXBsb3lUYXJnZXRNb2R1bGVJRFRlc3RlcihhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdKTsKKyAgICB9CisKKworICAgIHByb3RlY3RlZCBUYXJnZXRNb2R1bGVJRFtdIGRlcGxveShTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwogICAgICAgICBGaWxlIGlucHV0RmlsZSA9IG5ldyBGaWxlKGFyZ3NbNl0pOwogICAgICAgICBpZiAoIWlucHV0RmlsZS5leGlzdHMoKSkgewogICAgICAgICAgICAgZXJyb3IoIkZpbGUgbm90IGZvdW5kIDogIiArIGlucHV0RmlsZS5nZXRQYXRoKCkpOwpAQCAtOTEsMjkgKzkxLDI5IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGxvZygiRGVwbG95aW5nICIgKyBpbnB1dEZpbGUgKyAiIHBsYW46ICIgKyBkZXBsb3ltZW50RmlsZSk7CiAgICAgICAgIFByb2dyZXNzT2JqZWN0IHBvID0gIGRlcGxveShpbnB1dEZpbGUsIGRlcGxveW1lbnRGaWxlLCBmYWxzZSk7CiAgICAgICAgIHJldHVybiBwby5nZXRSZXN1bHRUYXJnZXRNb2R1bGVJRHMoKTsKICAgICB9Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgYm9vbGVhbiB0ZXN0KFRhcmdldE1vZHVsZUlEW10gbW9kdWxlSURzLCBTdHJpbmcgcGF0aCkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLSAgICAgICAgCisKICAgICAgICAgaWYgKG1vZHVsZUlEcy5sZW5ndGg9PTApIHsKICAgICAgICAgICAgIC8vIGRlcGxveW1lbnQgZmFpbGVkID8KICAgICAgICAgICAgIGxvZygiRGVwbG95bWVudCBmYWlsZWQsIGdvdCB6ZXJvIFRhcmdldE1vZHVsZUlEIik7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyB3ZSBhcmUgbG9hZGluZyB0aGUgZGVwbG95ZWQgZmlsZSBhbmQgY2hlY2tpbmcgdGhhdCB0aGUgbW9kdWxlSURzIGFyZQogICAgICAgICAvLyBjb3JyZWN0CiAgICAgICAgIEFwcGxpY2F0aW9uIGFwcCA9IEFwcGxpY2F0aW9uQXJjaGl2aXN0Lm9wZW5BcmNoaXZlKG5ldyBGaWxlKHBhdGgpKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGFwcC5pc1ZpcnR1YWwoKSkgewogICAgICAgICAgICAgQnVuZGxlRGVzY3JpcHRvciBiZCA9IGFwcC5nZXRTdGFuZGFsb25lQnVuZGxlRGVzY3JpcHRvcigpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIHN0YW5kYWxvbmUgbW9kdWxlLCBzaG91bGQgYmUgZmFzdC4KICAgICAgICAgICAgIGlmIChtb2R1bGVJRHMubGVuZ3RoIT0xKSB7CiAgICAgICAgICAgICAgICAgLy8gd3JvbmcgbnVtYmVyLi4uCkBAIC0xMjIsNDEgKzEyMiw0MSBAQAogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPG1vZHVsZUlEcy5sZW5ndGg7aSsrKSB7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8bW9kdWxlSURzLmxlbmd0aDtpKyspIHsKICAgICAgICAgICAgICAgICBUYXJnZXRNb2R1bGVJRCBwYXJlbnQgPSBtb2R1bGVJRHNbaV07CiAgICAgICAgICAgICAgICAgVGFyZ2V0IHRhcmdldCA9IHBhcmVudC5nZXRUYXJnZXQoKTsKICAgICAgICAgICAgICAgICBsb2coIkRlcGxveWVkIG9uICIgKyB0YXJnZXQuZ2V0TmFtZSgpICsgIiB3aXRoIG1vZHVsZSBJRCAiICsgcGFyZW50LmdldE1vZHVsZUlEKCkpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gbm93IGxvb2sgYXQgYWxsIHRoZSBjaGlsZHJlbgogICAgICAgICAgICAgICAgIFRhcmdldE1vZHVsZUlEW10gY2hpbGRyZW4gPSBwYXJlbnQuZ2V0Q2hpbGRUYXJnZXRNb2R1bGVJRCgpOwogICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbj09bnVsbCkgewogICAgICAgICAgICAgICAgICAgICBsb2coIkVSUk9SIDogQXBwIGZyb20gIiArIHBhdGggKyAiIGhhcyAiICsgYXBwLmdldEJ1bmRsZURlc2NyaXB0b3JzKCkuc2l6ZSgpICsKICAgICAgICAgICAgICAgICAgICAgICAgICIgbW9kdWxlcyBidXQgSSBkaWRuJ3QgZ2V0IGFueSBjaGlsZHJlbiBUYWdldE1vZHVsZUlEIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICAvLyBzaXplIGlzIGNvbnNpc3RlbnQgPwogICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGghPWFwcC5nZXRCdW5kbGVEZXNjcmlwdG9ycygpLnNpemUoKSkgewogICAgICAgICAgICAgICAgICAgICBsb2coIkVSUk9SIDogQXBwIGZyb20gIiArIHBhdGggKyAiIGhhcyAiICsgYXBwLmdldEJ1bmRsZURlc2NyaXB0b3JzKCkuc2l6ZSgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIgbW9kdWxlcyBidXQgSSBnb3Qgb25seSAiICsgY2hpbGRyZW4ubGVuZ3RoICsgCisgICAgICAgICAgICAgICAgICAgICAgICAiIG1vZHVsZXMgYnV0IEkgZ290IG9ubHkgIiArIGNoaWxkcmVuLmxlbmd0aCArCiAgICAgICAgICAgICAgICAgICAgICAgICAiIGNoaWxkcmVuIFRhZ2V0TW9kdWxlSUQiKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvZygiRXhwZWN0ZWQgIiArIGFwcC5nZXRCdW5kbGVEZXNjcmlwdG9ycygpLnNpemUoKSArIAorICAgICAgICAgICAgICAgICAgICBsb2coIkV4cGVjdGVkICIgKyBhcHAuZ2V0QnVuZGxlRGVzY3JpcHRvcnMoKS5zaXplKCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgIiBjaGlsZHJlbiBUYXJnZXRNb2R1bGVJRHMgYW5kIGdvdCAiICsgY2hpbGRyZW4ubGVuZ3RoKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaj0wO2o8Y2hpbGRyZW4ubGVuZ3RoO2orKykgewogICAgICAgICAgICAgICAgICAgICBUYXJnZXRNb2R1bGVJRCBhQ2hpbGQgPSBjaGlsZHJlbltqXTsKICAgICAgICAgICAgICAgICAgICAgbG9nKCJQcm9jZXNzaW5nICIgKyBhQ2hpbGQuZ2V0TW9kdWxlSUQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjaGlsZE1vZHVsZUlEID0gYUNoaWxkLmdldE1vZHVsZUlEKCk7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1tdIHNwbGl0dGVkID0gY2hpbGRNb2R1bGVJRC5zcGxpdCgiIyIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoIT0yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBsb2coIlVua25vd24gc3ViIG1vZHVsZSBpZCAiICsgY2hpbGRNb2R1bGVJRCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgdGhhdCBwYXJlbnQgVGFyZ2VUTW9kdWxlSUQgaXMgY29ycmVjdAogICAgICAgICAgICAgICAgICAgICBpZiAoYUNoaWxkLmdldFBhcmVudFRhcmdldE1vZHVsZUlEKCkuZXF1YWxzKHBhcmVudCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiQ2hpbGQncyBwYXJlbnQgVGFyZ2V0TW9kdWxlSUQgaXMgY29ycmVjdGx5IHNldCIpOwpAQCAtMTY0LDE0ICsxNjQsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiQ2hpbGQncyBwYXJlbnQgVGFyZ2V0TW9kdWxlSUQgaXMgaW5jb3JyZWN0Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGZpcnN0ID0gc3BsaXR0ZWRbMF07CiAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdC5lcXVhbHMocGFyZW50LmdldE1vZHVsZUlEKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBsb2coIkNvcnJlY3QgcGFyZW50IG1vZHVsZSBpZCBmb3IgY2hpbGQgIiArIGNoaWxkTW9kdWxlSUQpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJJbmNvcnJlY3QgcGFyZW50IG1vZHVsZSBpZCBmb3IgY2hpbGQgIiArIGNoaWxkTW9kdWxlSUQpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vIGxvb2sgZm9yIHRoZSByaWdodCBtb2R1bGUgZGVzY3JpcHRvci4uCiAgICAgICAgICAgICAgICAgICAgIE1vZHVsZURlc2NyaXB0b3IgbWQgPSBhcHAuZ2V0TW9kdWxlRGVzY3JpcHRvckJ5VXJpKHNwbGl0dGVkWzFdKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1kPT1udWxsKSB7CkBAIC0xODAsMTAgKzE4MCwxMCBAQAogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJGb3VuZCBtb2R1bGUgZGVzY3JpcHRvciBmb3IgIiArIGNoaWxkTW9kdWxlSUQpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgLy8gaWYgd2UgYXJlIGhlcmUsIGl0J3MgZ29vZCAhCi0gICAgICAgIHJldHVybiB0cnVlOyAgICAgIAotICAgIH0gICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZGVwbG95bWVudG1hbmFnZXIvZGlzdHJpYnV0ZS9jaGlsZHRhcmdldG1vZHVsZWlkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZGVwbG95bWVudG1hbmFnZXIvZGlzdHJpYnV0ZS9jaGlsZHRhcmdldG1vZHVsZWlkL2J1aWxkLnhtbAppbmRleCAxMmVkZmVjLi4wMTZlMTYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2Rpc3RyaWJ1dGUvY2hpbGR0YXJnZXRtb2R1bGVpZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9kaXN0cmlidXRlL2NoaWxkdGFyZ2V0bW9kdWxlaWQvYnVpbGQueG1sCkBAIC0yMCwxOSArMjAsMTkgQEAKIAogPCFFTlRJVFkgY29tbW9uQnVpbGQgU1lTVEVNICIuLy4uLy4uLy4uLy4uL2NvbmZpZy9jb21tb24ueG1sIj4KIF0+Ci0gCisKIDxwcm9qZWN0IG5hbWU9ImRlcGxveXRhcmdldG1vZHVsZWlkIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0gCSZjb21tb25CdWlsZDsgICAgICAgIAorICAgICAmY29tbW9uQnVpbGQ7CiAgICAgPHByb3BlcnR5IG5hbWU9ImFyY2hpdmVkaXIiIHZhbHVlPSIke2J1aWxkfS9hcmNoaXZlcyIvPgogCi0JPHRhcmdldCBuYW1lPSJjb21waWxlIj4KKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiPgogICAgICAgICAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9IiAvPgotCQk8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2J1aWxkIgotCQkJY2xhc3NwYXRoPSIke2luc3R9L2xpYi9qMmVlLmphcjoke2luc3R9L2xpYi9hcHBzZXJ2LXJ0LmphcjouLi8uLi8uLi8uLi91dGlsL2J1aWxkIgotCQkvPgkJCi0JPC90YXJnZXQ+Ci0gICAgICAgIAorICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2J1aWxkIgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2luc3R9L2xpYi9qMmVlLmphcjoke2luc3R9L2xpYi9hcHBzZXJ2LXJ0LmphcjouLi8uLi8uLi8uLi91dGlsL2J1aWxkIgorICAgICAgICAvPgorICAgIDwvdGFyZ2V0PgorCiAgICAgICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtZWFyIiB1bmxlc3M9ImVhcmZpbGUuYnVpbHQiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iZmlsZSAke2J1aWxkfS9zYXZlL3dzdG9lamIuZWFyIGlzIHByZXNlbnQgOiAke2VhcmZpbGUuYnVpbHR9Ii8+CiAgICAgICAgICAgICA8YW50IGRpcj0iLi4vLi4vLi4vZWFyL3dzdG9lamIiIHRhcmdldD0iYXNzZW1ibGUiLz4KQEAgLTQwLDI0ICs0MCwyNCBAQAogICAgICAgICAgICAgPGNvcHkgZmlsZT0iJHthcmNoaXZlZGlyfS93c3RvZWpiLmVhciIgdG9kaXI9IiR7YnVpbGR9Ly4uL3NhdmUiLz4KICAgICAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXJjaGl2ZWRpcn0vcGxhbi5qYXIiIHRvZGlyPSIke2J1aWxkfS8uLi9zYXZlIi8+CiAgICAgICAgIDwvdGFyZ2V0PgotICAgICAgICAKKwogICAgICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIiBkZXBlbmRzPSJjb21waWxlIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlY2xhcmUtdGVzdCI+CiAgICAgICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXNjcmlwdGlvbiIgdmFsdWU9Impzcjg4L2Rpc3RyaWJ1dGUvQ2hpbGRUYXJnZXRNb2R1bGVJRCB0ZXN0IFRhcmdldE1vZHVsZUlEIGFuZCBpdHMgY2hpbGRyZW4gcmV0dXJuZWQgZnJvbSBkZXBsb3ltZW50Ii8+Ci0gICAgICAgICAgICAgICAgPC9hbnRjYWxsPiAgICAgICAgCisgICAgICAgICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICAgICAgICAgIDxhdmFpbGFibGUgcHJvcGVydHk9ImVhcmZpbGUuYnVpbHQiIGZpbGU9IiR7YXJjaGl2ZWRpcn0vd3N0b2VqYi5lYXIiLz4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhciIvPgotCQk8YW50Y2FsbCB0YXJnZXQ9InNwZWNpYWxpemVkLnJ1bi5qc3I4OCI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3BlY2lhbGl6ZWQucnVuLmpzcjg4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXBsb3llci5jbGFzcyIgdmFsdWU9ImRldnRlc3RzLmRlcGxveW1lbnQuanNyODgudGFyZ2V0bW9kdWxlaWQuZGVwbG95dGFyZ2V0bW9kdWxlaWQuRGVwbG95VGFyZ2V0TW9kdWxlSURUZXN0ZXIiLz4KLQkJCTxwYXJhbSBuYW1lPSJjb21tYW5kIiB2YWx1ZT0iZGVwbG95Ii8+Ci0JCQk8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSJ0cnVlICR7YnVpbGR9Ly4uL3NhdmUvd3N0b2VqYi5lYXIgJHtidWlsZH0vLi4vc2F2ZS9wbGFuLmphciIvPgotCQk8L2FudGNhbGw+ICAgIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbW1hbmQiIHZhbHVlPSJkZXBsb3kiLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9InRydWUgJHtidWlsZH0vLi4vc2F2ZS93c3RvZWpiLmVhciAke2J1aWxkfS8uLi9zYXZlL3BsYW4uamFyIi8+CisgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InByb2Nlc3NSZXN1bHQiPgotICAgICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0IiB2YWx1ZT0iMCIvPiAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8L2FudGNhbGw+ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0IiB2YWx1ZT0iMCIvPgorICAgICAgICAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi51bmRlcGxveS5hc2FkbWluIj4KICAgICAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0id3N0b2VqYiIvPgotICAgICAgICAgICAgICAgIDwvYW50Y2FsbD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgPC90YXJnZXQ+ICAgICAgIAotICAgICAgICAKKyAgICAgICAgICAgICAgICA8L2FudGNhbGw+CisgICAgICAgIDwvdGFyZ2V0PgorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2Rpc3RyaWJ1dGUvY2xpZW50Y29uZmlndXJhdGlvbi9DbGllbnRDb25maWd1cmF0aW9uVGVzdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2Rpc3RyaWJ1dGUvY2xpZW50Y29uZmlndXJhdGlvbi9DbGllbnRDb25maWd1cmF0aW9uVGVzdGVyLmphdmEKaW5kZXggMDQyMmVjOS4uYjIzYzNmZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9kaXN0cmlidXRlL2NsaWVudGNvbmZpZ3VyYXRpb24vQ2xpZW50Q29uZmlndXJhdGlvblRlc3Rlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZGVwbG95bWVudG1hbmFnZXIvZGlzdHJpYnV0ZS9jbGllbnRjb25maWd1cmF0aW9uL0NsaWVudENvbmZpZ3VyYXRpb25UZXN0ZXIuamF2YQpAQCAtNDEsNDAgKzQxLDQwIEBACiAgKiBAYXV0aG9yIEplcm9tZSBEb2NoZXoKICAqLwogcHVibGljIGNsYXNzIENsaWVudENvbmZpZ3VyYXRpb25UZXN0ZXIgZXh0ZW5kcyBKU1I4OERlcGxveWVyIHsKLSAgICAKKwogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIERlcGxveVRhcmdldE1vZHVsZUlEVGVzdGVyICovCi0gICAgcHVibGljIENsaWVudENvbmZpZ3VyYXRpb25UZXN0ZXIoU3RyaW5nIGhvc3QsIFN0cmluZyBwb3J0LCBTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkKSB7ICAgICAgIAorICAgIHB1YmxpYyBDbGllbnRDb25maWd1cmF0aW9uVGVzdGVyKFN0cmluZyBob3N0LCBTdHJpbmcgcG9ydCwgU3RyaW5nIHVzZXIsIFN0cmluZyBwYXNzd29yZCkgewogICAgICAgICBzdXBlcihob3N0LCBwb3J0LCB1c2VyLCBwYXNzd29yZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQHBhcmFtIGFyZ3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGllbnRDb25maWd1cmF0aW9uVGVzdGVyIGRlcGxveWVyID0gZ2V0RGVwbG95ZXIoYXJncyk7CiAgICAgICAgICAgICBQcm9ncmVzc09iamVjdCBwbyA9IGRlcGxveWVyLmRlcGxveShhcmdzKTsKICAgICAgICAgICAgIGlmIChkZXBsb3llci50ZXN0KHBvLCBhcmdzWzZdKSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5leGl0KDApOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkZXBsb3llci5kdW1wTW9kdWxlc0lEcygiIiwgcG8uZ2V0UmVzdWx0VGFyZ2V0TW9kdWxlSURzKCkpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZXBsb3llci5kdW1wTW9kdWxlc0lEcygiIiwgcG8uZ2V0UmVzdWx0VGFyZ2V0TW9kdWxlSURzKCkpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgICB9Ci0gICAgfSAKLSAgICAKLSAgICBwcm90ZWN0ZWQgc3RhdGljIENsaWVudENvbmZpZ3VyYXRpb25UZXN0ZXIgZ2V0RGVwbG95ZXIoU3RyaW5nW10gYXJncykgewotICAgICAgIHJldHVybiBuZXcgQ2xpZW50Q29uZmlndXJhdGlvblRlc3RlcihhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdKTsgICAgICAgICAgICAgICAgCiAgICAgfQotICAgIAotICAgIAotICAgIHByb3RlY3RlZCBQcm9ncmVzc09iamVjdCBkZXBsb3koU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7ICAgICAgICAKLSAgICAgICAgCisKKyAgICBwcm90ZWN0ZWQgc3RhdGljIENsaWVudENvbmZpZ3VyYXRpb25UZXN0ZXIgZ2V0RGVwbG95ZXIoU3RyaW5nW10gYXJncykgeworICAgICAgIHJldHVybiBuZXcgQ2xpZW50Q29uZmlndXJhdGlvblRlc3RlcihhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdKTsKKyAgICB9CisKKworICAgIHByb3RlY3RlZCBQcm9ncmVzc09iamVjdCBkZXBsb3koU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisKICAgICAgICAgRmlsZSBpbnB1dEZpbGUgPSBuZXcgRmlsZShhcmdzWzZdKTsKICAgICAgICAgaWYgKCFpbnB1dEZpbGUuZXhpc3RzKCkpIHsKICAgICAgICAgICAgIGVycm9yKCJGaWxlIG5vdCBmb3VuZCA6ICIgKyBpbnB1dEZpbGUuZ2V0UGF0aCgpKTsKQEAgLTkwLDI5ICs5MCwyOSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBsb2coIkRlcGxveWluZyAiICsgaW5wdXRGaWxlICsgIiBwbGFuOiAiICsgZGVwbG95bWVudEZpbGUpOwogICAgICAgICByZXR1cm4gZGVwbG95KGlucHV0RmlsZSwgZGVwbG95bWVudEZpbGUsIGZhbHNlKTsKICAgICB9Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgYm9vbGVhbiB0ZXN0KFByb2dyZXNzT2JqZWN0IHBvLCBTdHJpbmcgcGF0aCkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLSAgICAgICAgCisKICAgICAgICAgVGFyZ2V0TW9kdWxlSURbXSBtb2R1bGVJRHMgPSBwby5nZXRSZXN1bHRUYXJnZXRNb2R1bGVJRHMoKTsKICAgICAgICAgaWYgKG1vZHVsZUlEcy5sZW5ndGg9PTApIHsKICAgICAgICAgICAgIC8vIGRlcGxveW1lbnQgZmFpbGVkID8KICAgICAgICAgICAgIGxvZygiRGVwbG95bWVudCBmYWlsZWQsIGdvdCB6ZXJvIFRhcmdldE1vZHVsZUlEIik7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyB3ZSBhcmUgbG9hZGluZyB0aGUgZGVwbG95ZWQgZmlsZSBhbmQgY2hlY2tpbmcgdGhhdCB0aGUgbW9kdWxlSURzIGFyZQogICAgICAgICAvLyBjb3JyZWN0CiAgICAgICAgIEFwcGxpY2F0aW9uIGFwcCA9IEFwcGxpY2F0aW9uQXJjaGl2aXN0Lm9wZW5BcmNoaXZlKG5ldyBGaWxlKHBhdGgpKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGFwcC5pc1ZpcnR1YWwoKSkgewogICAgICAgICAgICAgQnVuZGxlRGVzY3JpcHRvciBiZCA9IGFwcC5nZXRTdGFuZGFsb25lQnVuZGxlRGVzY3JpcHRvcigpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIHN0YW5kYWxvbmUgbW9kdWxlLCBzaG91bGQgYmUgZmFzdC4KICAgICAgICAgICAgIGlmIChtb2R1bGVJRHMubGVuZ3RoIT0xKSB7CiAgICAgICAgICAgICAgICAgLy8gd3JvbmcgbnVtYmVyLi4uCkBAIC0xMjAsNyArMTIwLDcgQEAKICAgICAgICAgICAgICAgICBkdW1wTW9kdWxlc0lEcygiIiwgbW9kdWxlSURzKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gbGV0J3MganVzdCBjaGVjayB0aGF0IHRoZSB3ZWIgdXJpIGlzIGZpbmUKICAgICAgICAgICAgIGlmIChiZC5nZXRNb2R1bGVUeXBlKCkuZXF1YWxzKE1vZHVsZVR5cGUuV0FSKSkgewogICAgICAgICAgICAgICAgIGlmIChtb2R1bGVJRHNbMF0uZ2V0V2ViVVJMKCk9PW51bGwpIHsKQEAgLTEyOSwzMCArMTI5LDMwIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8bW9kdWxlSURzLmxlbmd0aDtpKyspIHsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGludCBpPTA7aTxtb2R1bGVJRHMubGVuZ3RoO2krKykgewogICAgICAgICAgICAgICAgIFRhcmdldE1vZHVsZUlEIHBhcmVudCA9IG1vZHVsZUlEc1tpXTsKICAgICAgICAgICAgICAgICBUYXJnZXQgdGFyZ2V0ID0gcGFyZW50LmdldFRhcmdldCgpOwogICAgICAgICAgICAgICAgIGxvZygiRGVwbG95ZWQgb24gIiArIHRhcmdldC5nZXROYW1lKCkgKyAiIHdpdGggbW9kdWxlIElEICIgKyBwYXJlbnQuZ2V0TW9kdWxlSUQoKSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBub3cgbG9vayBhdCBhbGwgdGhlIGNoaWxkcmVuCiAgICAgICAgICAgICAgICAgVGFyZ2V0TW9kdWxlSURbXSBjaGlsZHJlbiA9IHBhcmVudC5nZXRDaGlsZFRhcmdldE1vZHVsZUlEKCk7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuPT1udWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGxvZygiRVJST1IgOiBBcHAgZnJvbSAiICsgcGF0aCArICIgaGFzICIgKyBhcHAuZ2V0QnVuZGxlRGVzY3JpcHRvcnMoKS5zaXplKCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgIiBtb2R1bGVzIGJ1dCBJIGRpZG4ndCBnZXQgYW55IGNoaWxkcmVuIFRhZ2V0TW9kdWxlSUQiKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBmb3IgKGludCBqPTA7ajxjaGlsZHJlbi5sZW5ndGg7aisrKSB7CiAgICAgICAgICAgICAgICAgICAgIFRhcmdldE1vZHVsZUlEIGFDaGlsZCA9IGNoaWxkcmVuW2pdOwogICAgICAgICAgICAgICAgICAgICBsb2coIlByb2Nlc3NpbmcgIiArIGFDaGlsZC5nZXRNb2R1bGVJRCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNoaWxkTW9kdWxlSUQgPSBhQ2hpbGQuZ2V0TW9kdWxlSUQoKTsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nW10gc3BsaXR0ZWQgPSBjaGlsZE1vZHVsZUlELnNwbGl0KCIjIik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzcGxpdHRlZC5sZW5ndGghPTIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiVW5rbm93biBzdWIgbW9kdWxlIGlkICIgKyBjaGlsZE1vZHVsZUlEKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy8gbG9vayBmb3IgdGhlIHJpZ2h0IG1vZHVsZSBkZXNjcmlwdG9yLi4KICAgICAgICAgICAgICAgICAgICAgTW9kdWxlRGVzY3JpcHRvciBtZCA9IGFwcC5nZXRNb2R1bGVEZXNjcmlwdG9yQnlVcmkoc3BsaXR0ZWRbMV0pOwogICAgICAgICAgICAgICAgICAgICBpZiAobWQ9PW51bGwpIHsKQEAgLTE2NiwxMCArMTY2LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBDbGllbnRDb25maWd1cmF0aW9uIGNjID0gcG8uZ2V0Q2xpZW50Q29uZmlndXJhdGlvbihhQ2hpbGQpOwogICAgICAgICAgICAgICAgICAgICAgICAgY2MuZXhlY3V0ZSgpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgLy8gaWYgd2UgYXJlIGhlcmUsIGl0J3MgZ29vZCAhCi0gICAgICAgIHJldHVybiB0cnVlOyAgICAgIAotICAgIH0gIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2Rpc3RyaWJ1dGUvY2xpZW50Y29uZmlndXJhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2Rpc3RyaWJ1dGUvY2xpZW50Y29uZmlndXJhdGlvbi9idWlsZC54bWwKaW5kZXggOGEyOTY0Zi4uYmZmN2EzYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9kaXN0cmlidXRlL2NsaWVudGNvbmZpZ3VyYXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZGVwbG95bWVudG1hbmFnZXIvZGlzdHJpYnV0ZS9jbGllbnRjb25maWd1cmF0aW9uL2J1aWxkLnhtbApAQCAtMjAsMTkgKzIwLDE5IEBACiAKIDwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CiBdPgotIAorCiA8cHJvamVjdCBuYW1lPSJnZXR3ZWJ1cmwiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLSAJJmNvbW1vbkJ1aWxkOworICAgICAmY29tbW9uQnVpbGQ7CiAgICAgPHByb3BlcnR5IG5hbWU9ImFyY2hpdmVkaXIiIHZhbHVlPSIke2J1aWxkfS9hcmNoaXZlcyIvPgotICAgICAgICAKLQk8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiPgotICAgICAgICAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9IiAvPiAgICAgICAgCi0JCTxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvYnVpbGQiCi0JCQljbGFzc3BhdGg9IiR7aW5zdH0vbGliL2oyZWUuamFyOiR7aW5zdH0vbGliL2FwcHNlcnYtcnQuamFyOi4uLy4uLy4uLy4uL3V0aWwvYnVpbGQiCi0JCS8+CQkKLQk8L3RhcmdldD4KLSAgICAgICAgCisKKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiPgorICAgICAgICAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9IiAvPgorICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2J1aWxkIgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2luc3R9L2xpYi9qMmVlLmphcjoke2luc3R9L2xpYi9hcHBzZXJ2LXJ0LmphcjouLi8uLi8uLi8uLi91dGlsL2J1aWxkIgorICAgICAgICAvPgorICAgIDwvdGFyZ2V0PgorCiAgICAgICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtZWFyIiB1bmxlc3M9ImVhcmZpbGUuYnVpbHQiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iZmlsZSAke2J1aWxkfS9zYXZlL3dzdG9lamIuZWFyIGlzIHByZXNlbnQgOiAke2VhcmZpbGUuYnVpbHR9Ii8+CiAgICAgICAgICAgICA8YW50IGRpcj0iLi4vLi4vLi4vZWFyL3dzdG9lamIiIHRhcmdldD0iYXNzZW1ibGUiLz4KQEAgLTQwLDI0ICs0MCwyNCBAQAogICAgICAgICAgICAgPGNvcHkgZmlsZT0iJHthcmNoaXZlZGlyfS93c3RvZWpiLmVhciIgdG9kaXI9IiR7YnVpbGR9Ly4uL3NhdmUiLz4KICAgICAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXJjaGl2ZWRpcn0vcGxhbi5qYXIiIHRvZGlyPSIke2J1aWxkfS8uLi9zYXZlIi8+CiAgICAgICAgIDwvdGFyZ2V0PgotICAgICAgICAKKwogICAgICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIiBkZXBlbmRzPSJjb21waWxlIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlY2xhcmUtdGVzdCI+CiAgICAgICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXNjcmlwdGlvbiIgdmFsdWU9Impzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2Rpc3RyaWJ1dGUvY2xpZW50Y29uZmlndXJhdGlvbiB0ZXN0IGdldENsaWVudENvbmZpZ3VyYXRvbiBBUEkiLz4KLSAgICAgICAgICAgICAgICA8L2FudGNhbGw+ICAgICAgICAKKyAgICAgICAgICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgICAgICAgICAgPGF2YWlsYWJsZSBwcm9wZXJ0eT0iZWFyZmlsZS5idWlsdCIgZmlsZT0iJHtidWlsZH0vLi4vc2F2ZS93c3RvZWpiLmVhciIvPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyIi8+Ci0JCTxhbnRjYWxsIHRhcmdldD0ic3BlY2lhbGl6ZWQucnVuLmpzcjg4Ij4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzcGVjaWFsaXplZC5ydW4uanNyODgiPgogICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRlcGxveWVyLmNsYXNzIiB2YWx1ZT0ianNyODguZGVwbG95bWVudG1hbmFnZXIuZGlzdHJpYnV0ZS5jbGllbnRjb25maWd1cmF0aW9uLkNsaWVudENvbmZpZ3VyYXRpb25UZXN0ZXIiLz4KLQkJCTxwYXJhbSBuYW1lPSJjb21tYW5kIiB2YWx1ZT0iZGVwbG95Ii8+Ci0JCQk8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSJ0cnVlICR7YnVpbGR9Ly4uL3NhdmUvL3dzdG9lamIuZWFyICR7YnVpbGR9Ly4uL3NhdmUvcGxhbi5qYXIiLz4KLQkJPC9hbnRjYWxsPiAgICAgICAgICAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb21tYW5kIiB2YWx1ZT0iZGVwbG95Ii8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSJ0cnVlICR7YnVpbGR9Ly4uL3NhdmUvL3dzdG9lamIuZWFyICR7YnVpbGR9Ly4uL3NhdmUvcGxhbi5qYXIiLz4KKyAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icHJvY2Vzc1Jlc3VsdCI+Ci0gICAgICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXN1bHQiIHZhbHVlPSIwIi8+ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIDwvYW50Y2FsbD4gICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0IiB2YWx1ZT0iMCIvPgorICAgICAgICAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi51bmRlcGxveS5hc2FkbWluIj4KICAgICAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0id3N0b2VqYiIvPgogICAgICAgICAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPC90YXJnZXQ+Ci0gICAgICAgIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2Rpc3RyaWJ1dGUvZ2V0d2VidXJsL0RlcGxveUdldFdlYlVybFRlc3Rlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9kaXN0cmlidXRlL2dldHdlYnVybC9EZXBsb3lHZXRXZWJVcmxUZXN0ZXIuamF2YQppbmRleCAxN2QwYTM2Li45Njk3ZmUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2Rpc3RyaWJ1dGUvZ2V0d2VidXJsL0RlcGxveUdldFdlYlVybFRlc3Rlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZGVwbG95bWVudG1hbmFnZXIvZGlzdHJpYnV0ZS9nZXR3ZWJ1cmwvRGVwbG95R2V0V2ViVXJsVGVzdGVyLmphdmEKQEAgLTQwLDQwICs0MCw0MCBAQAogICogQGF1dGhvciBKZXJvbWUgRG9jaGV6CiAgKi8KIHB1YmxpYyBjbGFzcyBEZXBsb3lHZXRXZWJVcmxUZXN0ZXIgZXh0ZW5kcyBKU1I4OERlcGxveWVyIHsKLSAgICAKKwogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIERlcGxveVRhcmdldE1vZHVsZUlEVGVzdGVyICovCi0gICAgcHVibGljIERlcGxveUdldFdlYlVybFRlc3RlcihTdHJpbmcgaG9zdCwgU3RyaW5nIHBvcnQsIFN0cmluZyB1c2VyLCBTdHJpbmcgcGFzc3dvcmQpIHsgICAgICAgCisgICAgcHVibGljIERlcGxveUdldFdlYlVybFRlc3RlcihTdHJpbmcgaG9zdCwgU3RyaW5nIHBvcnQsIFN0cmluZyB1c2VyLCBTdHJpbmcgcGFzc3dvcmQpIHsKICAgICAgICAgc3VwZXIoaG9zdCwgcG9ydCwgdXNlciwgcGFzc3dvcmQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEBwYXJhbSBhcmdzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgRGVwbG95R2V0V2ViVXJsVGVzdGVyIGRlcGxveWVyID0gZ2V0RGVwbG95ZXIoYXJncyk7CiAgICAgICAgICAgICBUYXJnZXRNb2R1bGVJRFtdIGlkcyA9IGRlcGxveWVyLmRlcGxveShhcmdzKTsKICAgICAgICAgICAgIGlmIChkZXBsb3llci50ZXN0KGlkcywgYXJnc1s2XSkpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGVwbG95ZXIuZHVtcE1vZHVsZXNJRHMoIiIsIGlkcyk7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlcGxveWVyLmR1bXBNb2R1bGVzSURzKCIiLCBpZHMpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgICB9Ci0gICAgfSAKLSAgICAKLSAgICBwcm90ZWN0ZWQgc3RhdGljIERlcGxveUdldFdlYlVybFRlc3RlciBnZXREZXBsb3llcihTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgcmV0dXJuIG5ldyBEZXBsb3lHZXRXZWJVcmxUZXN0ZXIoYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7ICAgICAgICAgICAgICAgIAogICAgIH0KLSAgICAKLSAgICAKLSAgICBwcm90ZWN0ZWQgVGFyZ2V0TW9kdWxlSURbXSBkZXBsb3koU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7ICAgICAgICAKLSAgICAgICAgCisKKyAgICBwcm90ZWN0ZWQgc3RhdGljIERlcGxveUdldFdlYlVybFRlc3RlciBnZXREZXBsb3llcihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgcmV0dXJuIG5ldyBEZXBsb3lHZXRXZWJVcmxUZXN0ZXIoYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7CisgICAgfQorCisKKyAgICBwcm90ZWN0ZWQgVGFyZ2V0TW9kdWxlSURbXSBkZXBsb3koU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisKICAgICAgICAgRmlsZSBpbnB1dEZpbGUgPSBuZXcgRmlsZShhcmdzWzZdKTsKICAgICAgICAgaWYgKCFpbnB1dEZpbGUuZXhpc3RzKCkpIHsKICAgICAgICAgICAgIGVycm9yKCJGaWxlIG5vdCBmb3VuZCA6ICIgKyBpbnB1dEZpbGUuZ2V0UGF0aCgpKTsKQEAgLTg5LDI5ICs4OSwyOSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBsb2coIkRlcGxveWluZyAiICsgaW5wdXRGaWxlICsgIiBwbGFuOiAiICsgZGVwbG95bWVudEZpbGUpOwogICAgICAgICBQcm9ncmVzc09iamVjdCBwbyA9ICBkZXBsb3koaW5wdXRGaWxlLCBkZXBsb3ltZW50RmlsZSwgZmFsc2UpOwogICAgICAgICByZXR1cm4gcG8uZ2V0UmVzdWx0VGFyZ2V0TW9kdWxlSURzKCk7CiAgICAgfQotICAgIAorCiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gdGVzdChUYXJnZXRNb2R1bGVJRFtdIG1vZHVsZUlEcywgU3RyaW5nIHBhdGgpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChtb2R1bGVJRHMubGVuZ3RoPT0wKSB7CiAgICAgICAgICAgICAvLyBkZXBsb3ltZW50IGZhaWxlZCA/CiAgICAgICAgICAgICBsb2coIkRlcGxveW1lbnQgZmFpbGVkLCBnb3QgemVybyBUYXJnZXRNb2R1bGVJRCIpOwogICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gd2UgYXJlIGxvYWRpbmcgdGhlIGRlcGxveWVkIGZpbGUgYW5kIGNoZWNraW5nIHRoYXQgdGhlIG1vZHVsZUlEcyBhcmUKICAgICAgICAgLy8gY29ycmVjdAogICAgICAgICBBcHBsaWNhdGlvbiBhcHAgPSBBcHBsaWNhdGlvbkFyY2hpdmlzdC5vcGVuQXJjaGl2ZShuZXcgRmlsZShwYXRoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChhcHAuaXNWaXJ0dWFsKCkpIHsKICAgICAgICAgICAgIEJ1bmRsZURlc2NyaXB0b3IgYmQgPSBhcHAuZ2V0U3RhbmRhbG9uZUJ1bmRsZURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBzdGFuZGFsb25lIG1vZHVsZSwgc2hvdWxkIGJlIGZhc3QuCiAgICAgICAgICAgICBpZiAobW9kdWxlSURzLmxlbmd0aCE9MSkgewogICAgICAgICAgICAgICAgIC8vIHdyb25nIG51bWJlci4uLgpAQCAtMTE5LDcgKzExOSw3IEBACiAgICAgICAgICAgICAgICAgZHVtcE1vZHVsZXNJRHMoIiIsIG1vZHVsZUlEcyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIGxldCdzIGp1c3QgY2hlY2sgdGhhdCB0aGUgd2ViIHVyaSBpcyBmaW5lCiAgICAgICAgICAgICBpZiAoYmQuZ2V0TW9kdWxlVHlwZSgpLmVxdWFscyhNb2R1bGVUeXBlLldBUikpIHsKICAgICAgICAgICAgICAgICBpZiAobW9kdWxlSURzWzBdLmdldFdlYlVSTCgpPT1udWxsKSB7CkBAIC0xMjgsMzAgKzEyOCwzMCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPG1vZHVsZUlEcy5sZW5ndGg7aSsrKSB7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8bW9kdWxlSURzLmxlbmd0aDtpKyspIHsKICAgICAgICAgICAgICAgICBUYXJnZXRNb2R1bGVJRCBwYXJlbnQgPSBtb2R1bGVJRHNbaV07CiAgICAgICAgICAgICAgICAgVGFyZ2V0IHRhcmdldCA9IHBhcmVudC5nZXRUYXJnZXQoKTsKICAgICAgICAgICAgICAgICBsb2coIkRlcGxveWVkIG9uICIgKyB0YXJnZXQuZ2V0TmFtZSgpICsgIiB3aXRoIG1vZHVsZSBJRCAiICsgcGFyZW50LmdldE1vZHVsZUlEKCkpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gbm93IGxvb2sgYXQgYWxsIHRoZSBjaGlsZHJlbgogICAgICAgICAgICAgICAgIFRhcmdldE1vZHVsZUlEW10gY2hpbGRyZW4gPSBwYXJlbnQuZ2V0Q2hpbGRUYXJnZXRNb2R1bGVJRCgpOwogICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbj09bnVsbCkgewogICAgICAgICAgICAgICAgICAgICBsb2coIkVSUk9SIDogQXBwIGZyb20gIiArIHBhdGggKyAiIGhhcyAiICsgYXBwLmdldEJ1bmRsZURlc2NyaXB0b3JzKCkuc2l6ZSgpICsKICAgICAgICAgICAgICAgICAgICAgICAgICIgbW9kdWxlcyBidXQgSSBkaWRuJ3QgZ2V0IGFueSBjaGlsZHJlbiBUYWdldE1vZHVsZUlEIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaj0wO2o8Y2hpbGRyZW4ubGVuZ3RoO2orKykgewogICAgICAgICAgICAgICAgICAgICBUYXJnZXRNb2R1bGVJRCBhQ2hpbGQgPSBjaGlsZHJlbltqXTsKICAgICAgICAgICAgICAgICAgICAgbG9nKCJQcm9jZXNzaW5nICIgKyBhQ2hpbGQuZ2V0TW9kdWxlSUQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjaGlsZE1vZHVsZUlEID0gYUNoaWxkLmdldE1vZHVsZUlEKCk7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1tdIHNwbGl0dGVkID0gY2hpbGRNb2R1bGVJRC5zcGxpdCgiIyIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoIT0yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBsb2coIlVua25vd24gc3ViIG1vZHVsZSBpZCAiICsgY2hpbGRNb2R1bGVJRCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vIGxvb2sgZm9yIHRoZSByaWdodCBtb2R1bGUgZGVzY3JpcHRvci4uCiAgICAgICAgICAgICAgICAgICAgIE1vZHVsZURlc2NyaXB0b3IgbWQgPSBhcHAuZ2V0TW9kdWxlRGVzY3JpcHRvckJ5VXJpKHNwbGl0dGVkWzFdKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1kPT1udWxsKSB7CkBAIC0xNjgsMTAgKzE2OCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiV2ViIG1vZHVsZSAiICsgc3BsaXR0ZWRbMV0gKyAiIGF2YWlsYWJsZSBhdCAiICsgYUNoaWxkLmdldFdlYlVSTCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8vIGlmIHdlIGFyZSBoZXJlLCBpdCdzIGdvb2QgIQotICAgICAgICByZXR1cm4gdHJ1ZTsgICAgICAKLSAgICB9ICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9kaXN0cmlidXRlL2dldHdlYnVybC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2Rpc3RyaWJ1dGUvZ2V0d2VidXJsL2J1aWxkLnhtbAppbmRleCAwNmFjYzBjLi42MjdlYmViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2Rpc3RyaWJ1dGUvZ2V0d2VidXJsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2Rpc3RyaWJ1dGUvZ2V0d2VidXJsL2J1aWxkLnhtbApAQCAtMjAsMTkgKzIwLDE5IEBACiAKIDwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CiBdPgotIAorCiA8cHJvamVjdCBuYW1lPSJnZXR3ZWJ1cmwiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLSAJJmNvbW1vbkJ1aWxkOworICAgICAmY29tbW9uQnVpbGQ7CiAgICAgPHByb3BlcnR5IG5hbWU9ImFyY2hpdmVkaXIiIHZhbHVlPSIke2J1aWxkfS9hcmNoaXZlcyIvPgotICAgICAgICAKLQk8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiPgotICAgICAgICAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9IiAvPiAgICAgICAgCi0JCTxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvYnVpbGQiCi0JCQljbGFzc3BhdGg9IiR7aW5zdH0vbGliL2oyZWUuamFyOiR7aW5zdH0vbGliL2FwcHNlcnYtcnQuamFyOi4uLy4uLy4uLy4uL3V0aWwvYnVpbGQiCi0JCS8+CQkKLQk8L3RhcmdldD4KLSAgICAgICAgCisKKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiPgorICAgICAgICAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9IiAvPgorICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2J1aWxkIgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2luc3R9L2xpYi9qMmVlLmphcjoke2luc3R9L2xpYi9hcHBzZXJ2LXJ0LmphcjouLi8uLi8uLi8uLi91dGlsL2J1aWxkIgorICAgICAgICAvPgorICAgIDwvdGFyZ2V0PgorCiAgICAgICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtZWFyIiB1bmxlc3M9ImVhcmZpbGUuYnVpbHQiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iZmlsZSAke2J1aWxkfS9zYXZlL3dzdG9lamIuZWFyIGlzIHByZXNlbnQgOiAke2VhcmZpbGUuYnVpbHR9Ii8+CiAgICAgICAgICAgICA8YW50IGRpcj0iLi4vLi4vLi4vZWFyL3dzdG9lamIiIHRhcmdldD0iYXNzZW1ibGUiLz4KQEAgLTQwLDI0ICs0MCwyNCBAQAogICAgICAgICAgICAgPGNvcHkgZmlsZT0iJHthcmNoaXZlZGlyfS93c3RvZWpiLmVhciIgdG9kaXI9IiR7YnVpbGR9Ly4uL3NhdmUiLz4KICAgICAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXJjaGl2ZWRpcn0vcGxhbi5qYXIiIHRvZGlyPSIke2J1aWxkfS8uLi9zYXZlIi8+CiAgICAgICAgIDwvdGFyZ2V0PgotICAgICAgICAKKwogICAgICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIiBkZXBlbmRzPSJjb21waWxlIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlY2xhcmUtdGVzdCI+CiAgICAgICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXNjcmlwdGlvbiIgdmFsdWU9Impzcjg4L3RhcmdldG1vZHVsZWlkL0RlcGxveUdldFdlYlVybFRlc3RlciB0ZXN0IEdldFdlYlVSTCByZXR1cm5lZCBmcm9tIGRlcGxveW1lbnQiLz4KLSAgICAgICAgICAgICAgICA8L2FudGNhbGw+ICAgICAgICAKKyAgICAgICAgICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgICAgICAgICAgPGF2YWlsYWJsZSBwcm9wZXJ0eT0iZWFyZmlsZS5idWlsdCIgZmlsZT0iJHtidWlsZH0vLi4vc2F2ZS93c3RvZWpiLmVhciIvPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyIi8+Ci0JCTxhbnRjYWxsIHRhcmdldD0ic3BlY2lhbGl6ZWQucnVuLmpzcjg4Ij4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzcGVjaWFsaXplZC5ydW4uanNyODgiPgogICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRlcGxveWVyLmNsYXNzIiB2YWx1ZT0iZGV2dGVzdHMuZGVwbG95bWVudC5qc3I4OC50YXJnZXRtb2R1bGVpZC5kZXBsb3lnZXR3ZWJ1cmwuRGVwbG95R2V0V2ViVXJsVGVzdGVyIi8+Ci0JCQk8cGFyYW0gbmFtZT0iY29tbWFuZCIgdmFsdWU9ImRlcGxveSIvPgotCQkJPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0idHJ1ZSAke2J1aWxkfS8uLi9zYXZlLy93c3RvZWpiLmVhciAke2J1aWxkfS8uLi9zYXZlL3BsYW4uamFyIi8+Ci0JCTwvYW50Y2FsbD4gICAgICAgICAgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29tbWFuZCIgdmFsdWU9ImRlcGxveSIvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0idHJ1ZSAke2J1aWxkfS8uLi9zYXZlLy93c3RvZWpiLmVhciAke2J1aWxkfS8uLi9zYXZlL3BsYW4uamFyIi8+CisgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InByb2Nlc3NSZXN1bHQiPgotICAgICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0IiB2YWx1ZT0iMCIvPiAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8L2FudGNhbGw+ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3VsdCIgdmFsdWU9IjAiLz4KKyAgICAgICAgICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24udW5kZXBsb3kuYXNhZG1pbiI+CiAgICAgICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9IndzdG9lamIiLz4KICAgICAgICAgICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDwvdGFyZ2V0PgotICAgICAgICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9nZXRYTW9kdWxlcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2dldFhNb2R1bGVzL2J1aWxkLnhtbAppbmRleCAwZTVhMDc0Li5jN2Y3MWM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2dldFhNb2R1bGVzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2dldFhNb2R1bGVzL2J1aWxkLnhtbApAQCAtMjMsMTIgKzIzLDEyIEBACiAKIDxwcm9qZWN0IG5hbWU9ImdldFhNb2R1bGVzIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0JJmNvbW1vbkJ1aWxkOyAgICAKKyAgICAmY29tbW9uQnVpbGQ7CiAKLQk8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KLQkJPGFudCBkaXI9ImNoaWxkdG1pZCIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfSIvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KKyAgICAgICAgPGFudCBkaXI9ImNoaWxkdG1pZCIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfSIvPgorICAgICAgICA8L2FudD4KKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9nZXRYTW9kdWxlcy9jaGlsZHRtaWQvQ2hpbGRUYXJnZXRNb2R1bGVJRFRlc3Rlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9nZXRYTW9kdWxlcy9jaGlsZHRtaWQvQ2hpbGRUYXJnZXRNb2R1bGVJRFRlc3Rlci5qYXZhCmluZGV4IDNhZjdjNmEuLjU5NTIyNTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZGVwbG95bWVudG1hbmFnZXIvZ2V0WE1vZHVsZXMvY2hpbGR0bWlkL0NoaWxkVGFyZ2V0TW9kdWxlSURUZXN0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2dldFhNb2R1bGVzL2NoaWxkdG1pZC9DaGlsZFRhcmdldE1vZHVsZUlEVGVzdGVyLmphdmEKQEAgLTQwLDE3ICs0MCwxNyBAQAogICogQGF1dGhvciBKZXJvbWUgRG9jaGV6CiAgKi8KIHB1YmxpYyBjbGFzcyBDaGlsZFRhcmdldE1vZHVsZUlEVGVzdGVyIGV4dGVuZHMgSlNSODhEZXBsb3llciB7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBEZXBsb3lUYXJnZXRNb2R1bGVJRFRlc3RlciAqLwotICAgIHB1YmxpYyBDaGlsZFRhcmdldE1vZHVsZUlEVGVzdGVyKFN0cmluZyBob3N0LCBTdHJpbmcgcG9ydCwgU3RyaW5nIHVzZXIsIFN0cmluZyBwYXNzd29yZCkgeyAgICAgICAKKyAgICBwdWJsaWMgQ2hpbGRUYXJnZXRNb2R1bGVJRFRlc3RlcihTdHJpbmcgaG9zdCwgU3RyaW5nIHBvcnQsIFN0cmluZyB1c2VyLCBTdHJpbmcgcGFzc3dvcmQpIHsKICAgICAgICAgc3VwZXIoaG9zdCwgcG9ydCwgdXNlciwgcGFzc3dvcmQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEBwYXJhbSBhcmdzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2hpbGRUYXJnZXRNb2R1bGVJRFRlc3RlciBkZXBsb3llciA9IGdldERlcGxveWVyKGFyZ3MpOwogICAgICAgICAgICAgVGFyZ2V0TW9kdWxlSURbXSBpZHMgPSBkZXBsb3llci5kZXBsb3koYXJncyk7CkBAIC01OSwyMyArNTksMjMgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbG9nKCJUZXN0IEZBSUxFRCIpOwotICAgICAgICAgICAgICAgIGRlcGxveWVyLmR1bXBNb2R1bGVzSURzKCIiLCBpZHMpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZXBsb3llci5kdW1wTW9kdWxlc0lEcygiIiwgaWRzKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgfQotICAgIH0gCi0gICAgCi0gICAgcHJvdGVjdGVkIHN0YXRpYyBDaGlsZFRhcmdldE1vZHVsZUlEVGVzdGVyIGdldERlcGxveWVyKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICByZXR1cm4gbmV3IENoaWxkVGFyZ2V0TW9kdWxlSURUZXN0ZXIoYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7ICAgICAgICAgICAgICAgIAogICAgIH0KLSAgICAKLSAgICAKLSAgICBwcm90ZWN0ZWQgVGFyZ2V0TW9kdWxlSURbXSBkZXBsb3koU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7ICAgICAgICAKLSAgICAgICAgCisKKyAgICBwcm90ZWN0ZWQgc3RhdGljIENoaWxkVGFyZ2V0TW9kdWxlSURUZXN0ZXIgZ2V0RGVwbG95ZXIoU3RyaW5nW10gYXJncykgeworICAgICAgIHJldHVybiBuZXcgQ2hpbGRUYXJnZXRNb2R1bGVJRFRlc3RlcihhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdKTsKKyAgICB9CisKKworICAgIHByb3RlY3RlZCBUYXJnZXRNb2R1bGVJRFtdIGRlcGxveShTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwogICAgICAgICBGaWxlIGlucHV0RmlsZSA9IG5ldyBGaWxlKGFyZ3NbNl0pOwogICAgICAgICBpZiAoIWlucHV0RmlsZS5leGlzdHMoKSkgewogICAgICAgICAgICAgZXJyb3IoIkZpbGUgbm90IGZvdW5kIDogIiArIGlucHV0RmlsZS5nZXRQYXRoKCkpOwpAQCAtOTEsMzIgKzkxLDMyIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGxvZygiRGVwbG95aW5nICIgKyBpbnB1dEZpbGUgKyAiIHBsYW46ICIgKyBkZXBsb3ltZW50RmlsZSk7CiAgICAgICAgIFByb2dyZXNzT2JqZWN0IHBvID0gZGVwbG95KGlucHV0RmlsZSwgZGVwbG95bWVudEZpbGUsIGZhbHNlKTsKICAgICAgICAgcmV0dXJuIHBvLmdldFJlc3VsdFRhcmdldE1vZHVsZUlEcygpOwotICAgIH0gICAKLSAgICAKKyAgICB9CisKICAgICBwcm90ZWN0ZWQgYm9vbGVhbiB0ZXN0KFRhcmdldE1vZHVsZUlEW10gbW9kdWxlSURzLCBTdHJpbmcgcGF0aCkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLSAgICAgICAgCisKICAgICAgICAgICAgIC8vIGhhY2sgZm9yIHN0ZCBtb2R1bGVzCi0gICAgICAgICAgICAKKwogICAgICAgICAgICAgVGFyZ2V0TW9kdWxlSURbXSBhVGFyZ2V0TW9kdWxlSURzID0gZmluZEFwcGxpY2F0aW9uKCJzYXloZWxsbyIsIE1vZHVsZVR5cGUuV0FSLCBudWxsKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBkdW1wTW9kdWxlc0lEcygid2FyIiwgYVRhcmdldE1vZHVsZUlEcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZiAobW9kdWxlSURzLmxlbmd0aD09MCkgewogICAgICAgICAgICAgLy8gZGVwbG95bWVudCBmYWlsZWQgPwogICAgICAgICAgICAgbG9nKCJEZXBsb3ltZW50IGZhaWxlZCwgZ290IHplcm8gVGFyZ2V0TW9kdWxlSUQiKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vIHdlIGFyZSBsb2FkaW5nIHRoZSBkZXBsb3llZCBmaWxlIGFuZCBjaGVja2luZyB0aGF0IHRoZSBtb2R1bGVJRHMgYXJlCiAgICAgICAgIC8vIGNvcnJlY3QKICAgICAgICAgQXBwbGljYXRpb24gYXBwID0gQXBwbGljYXRpb25BcmNoaXZpc3Qub3BlbkFyY2hpdmUobmV3IEZpbGUocGF0aCkpOwotICAgICAgICAKKwogICAgICAgICAvLyBjaGVjayBvZiBub24gcnVubmluZyBtb2R1bGVzCiAgICAgICAgIE1vZHVsZVR5cGUgbW9kVHlwZTsKICAgICAgICAgaWYgKGFwcC5pc1ZpcnR1YWwoKSkgewpAQCAtMTI0LDQ0ICsxMjQsNDQgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1vZFR5cGUgPSBNb2R1bGVUeXBlLkVBUjsKICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgIC8vIG5vdyB3ZSBuZWVkIHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbgogICAgICAgICBmb3IgKGludCBpPTA7aTxtb2R1bGVJRHMubGVuZ3RoO2krKykgewogICAgICAgICAgICAgVGFyZ2V0TW9kdWxlSUQgYVRhcmdldE1vZHVsZUlEID0gbW9kdWxlSURzW2ldOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBub24gcnVubmluZwotICAgICAgICAgICAgVGFyZ2V0TW9kdWxlSURbXSB0YXJnZXRNb2R1bGVJRHMgPSBmaW5kQXBwbGljYXRpb24oYVRhcmdldE1vZHVsZUlELmdldE1vZHVsZUlEKCksIAorICAgICAgICAgICAgVGFyZ2V0TW9kdWxlSURbXSB0YXJnZXRNb2R1bGVJRHMgPSBmaW5kQXBwbGljYXRpb24oYVRhcmdldE1vZHVsZUlELmdldE1vZHVsZUlEKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kVHlwZSwgQm9vbGVhbi5GQUxTRSk7CiAgICAgICAgICAgICBjaGVjayhwYXRoLCBhcHAsIHRhcmdldE1vZHVsZUlEcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gc2hvdWxkIGJlIHBhcnQgb2YgdGhlIGF2YWlsYWJsZSBhcHBzCi0gICAgICAgICAgICB0YXJnZXRNb2R1bGVJRHMgPSBmaW5kQXBwbGljYXRpb24oYVRhcmdldE1vZHVsZUlELmdldE1vZHVsZUlEKCksIAorICAgICAgICAgICAgdGFyZ2V0TW9kdWxlSURzID0gZmluZEFwcGxpY2F0aW9uKGFUYXJnZXRNb2R1bGVJRC5nZXRNb2R1bGVJRCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZFR5cGUsIG51bGwpOwogICAgICAgICAgICAgY2hlY2socGF0aCwgYXBwLCB0YXJnZXRNb2R1bGVJRHMpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIG5vdyB3ZSBzdGFydCBpdC4uCiAgICAgICAgICAgICBzdGFydChhVGFyZ2V0TW9kdWxlSUQuZ2V0TW9kdWxlSUQoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gc2hvdWxkIGJlIHBhcnQgb2YgdGhlIHJ1bm5pbmcKLSAgICAgICAgICAgIHRhcmdldE1vZHVsZUlEcyA9IGZpbmRBcHBsaWNhdGlvbihhVGFyZ2V0TW9kdWxlSUQuZ2V0TW9kdWxlSUQoKSwgCisgICAgICAgICAgICB0YXJnZXRNb2R1bGVJRHMgPSBmaW5kQXBwbGljYXRpb24oYVRhcmdldE1vZHVsZUlELmdldE1vZHVsZUlEKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kVHlwZSwgQm9vbGVhbi5UUlVFKTsKICAgICAgICAgICAgIGNoZWNrKHBhdGgsIGFwcCwgdGFyZ2V0TW9kdWxlSURzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBzaG91bGQgYmUgcGFydCBvZiB0aGUgYXZhaWxhYmxlIGFwcHMKLSAgICAgICAgICAgIHRhcmdldE1vZHVsZUlEcyA9IGZpbmRBcHBsaWNhdGlvbihhVGFyZ2V0TW9kdWxlSUQuZ2V0TW9kdWxlSUQoKSwgCisgICAgICAgICAgICB0YXJnZXRNb2R1bGVJRHMgPSBmaW5kQXBwbGljYXRpb24oYVRhcmdldE1vZHVsZUlELmdldE1vZHVsZUlEKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kVHlwZSwgbnVsbCk7CiAgICAgICAgICAgICBjaGVjayhwYXRoLCBhcHAsIHRhcmdldE1vZHVsZUlEcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAKLSAgICB9IAotICAgIAorCisgICAgfQorCiAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrKFN0cmluZyBwYXRoLCBBcHBsaWNhdGlvbiBhcHAsIFRhcmdldE1vZHVsZUlEW10gbW9kdWxlSURzKSB7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChhcHAuaXNWaXJ0dWFsKCkpIHsKICAgICAgICAgICAgIEJ1bmRsZURlc2NyaXB0b3IgYmQgPSBhcHAuZ2V0U3RhbmRhbG9uZUJ1bmRsZURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBzdGFuZGFsb25lIG1vZHVsZSwgc2hvdWxkIGJlIGZhc3QuCiAgICAgICAgICAgICBpZiAobW9kdWxlSURzLmxlbmd0aCE9MSkgewogICAgICAgICAgICAgICAgIC8vIHdyb25nIG51bWJlci4uLgpAQCAtMTcwLDQxICsxNzAsNDEgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpPTA7aTxtb2R1bGVJRHMubGVuZ3RoO2krKykgeyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPG1vZHVsZUlEcy5sZW5ndGg7aSsrKSB7CiAgICAgICAgICAgICAgICAgVGFyZ2V0TW9kdWxlSUQgcGFyZW50ID0gbW9kdWxlSURzW2ldOwogICAgICAgICAgICAgICAgIFRhcmdldCB0YXJnZXQgPSBwYXJlbnQuZ2V0VGFyZ2V0KCk7CiAgICAgICAgICAgICAgICAgbG9nKCJEZXBsb3llZCBvbiAiICsgdGFyZ2V0LmdldE5hbWUoKSArICIgd2l0aCBtb2R1bGUgSUQgIiArIHBhcmVudC5nZXRNb2R1bGVJRCgpKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIG5vdyBsb29rIGF0IGFsbCB0aGUgY2hpbGRyZW4KICAgICAgICAgICAgICAgICBUYXJnZXRNb2R1bGVJRFtdIGNoaWxkcmVuID0gcGFyZW50LmdldENoaWxkVGFyZ2V0TW9kdWxlSUQoKTsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW49PW51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgbG9nKCJFUlJPUiA6IEFwcCBmcm9tICIgKyBwYXRoICsgIiBoYXMgIiArIGFwcC5nZXRCdW5kbGVEZXNjcmlwdG9ycygpLnNpemUoKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAiIG1vZHVsZXMgYnV0IEkgZGlkbid0IGdldCBhbnkgY2hpbGRyZW4gVGFnZXRNb2R1bGVJRCIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgLy8gc2l6ZSBpcyBjb25zaXN0ZW50ID8KICAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoIT1hcHAuZ2V0QnVuZGxlRGVzY3JpcHRvcnMoKS5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbG9nKCJFUlJPUiA6IEFwcCBmcm9tICIgKyBwYXRoICsgIiBoYXMgIiArIGFwcC5nZXRCdW5kbGVEZXNjcmlwdG9ycygpLnNpemUoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAiIG1vZHVsZXMgYnV0IEkgZ290IG9ubHkgIiArIGNoaWxkcmVuLmxlbmd0aCArIAorICAgICAgICAgICAgICAgICAgICAgICAgIiBtb2R1bGVzIGJ1dCBJIGdvdCBvbmx5ICIgKyBjaGlsZHJlbi5sZW5ndGggKwogICAgICAgICAgICAgICAgICAgICAgICAgIiBjaGlsZHJlbiBUYWdldE1vZHVsZUlEIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBsb2coIkV4cGVjdGVkICIgKyBhcHAuZ2V0QnVuZGxlRGVzY3JpcHRvcnMoKS5zaXplKCkgKyAKKyAgICAgICAgICAgICAgICAgICAgbG9nKCJFeHBlY3RlZCAiICsgYXBwLmdldEJ1bmRsZURlc2NyaXB0b3JzKCkuc2l6ZSgpICsKICAgICAgICAgICAgICAgICAgICAgICAgICIgY2hpbGRyZW4gVGFyZ2V0TW9kdWxlSURzIGFuZCBnb3QgIiArIGNoaWxkcmVuLmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGZvciAoaW50IGo9MDtqPGNoaWxkcmVuLmxlbmd0aDtqKyspIHsKICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0TW9kdWxlSUQgYUNoaWxkID0gY2hpbGRyZW5bal07CiAgICAgICAgICAgICAgICAgICAgIGxvZygiUHJvY2Vzc2luZyAiICsgYUNoaWxkLmdldE1vZHVsZUlEKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY2hpbGRNb2R1bGVJRCA9IGFDaGlsZC5nZXRNb2R1bGVJRCgpOwogICAgICAgICAgICAgICAgICAgICBTdHJpbmdbXSBzcGxpdHRlZCA9IGNoaWxkTW9kdWxlSUQuc3BsaXQoIiMiKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCE9MikgewogICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJVbmtub3duIHN1YiBtb2R1bGUgaWQgIiArIGNoaWxkTW9kdWxlSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgcGFyZW50IFRhcmdlVE1vZHVsZUlEIGlzIGNvcnJlY3QKICAgICAgICAgICAgICAgICAgICAgaWYgKGFDaGlsZC5nZXRQYXJlbnRUYXJnZXRNb2R1bGVJRCgpLmVxdWFscyhwYXJlbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBsb2coIkNoaWxkJ3MgcGFyZW50IFRhcmdldE1vZHVsZUlEIGlzIGNvcnJlY3RseSBzZXQiKTsKQEAgLTIxMiwxNCArMjEyLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBsb2coIkNoaWxkJ3MgcGFyZW50IFRhcmdldE1vZHVsZUlEIGlzIGluY29ycmVjdCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBmaXJzdCA9IHNwbGl0dGVkWzBdOwogICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3QuZXF1YWxzKHBhcmVudC5nZXRNb2R1bGVJRCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJDb3JyZWN0IHBhcmVudCBtb2R1bGUgaWQgZm9yIGNoaWxkICIgKyBjaGlsZE1vZHVsZUlEKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiSW5jb3JyZWN0IHBhcmVudCBtb2R1bGUgaWQgZm9yIGNoaWxkICIgKyBjaGlsZE1vZHVsZUlEKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvLyBsb29rIGZvciB0aGUgcmlnaHQgbW9kdWxlIGRlc2NyaXB0b3IuLgogICAgICAgICAgICAgICAgICAgICBNb2R1bGVEZXNjcmlwdG9yIG1kID0gYXBwLmdldE1vZHVsZURlc2NyaXB0b3JCeVVyaShzcGxpdHRlZFsxXSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtZD09bnVsbCkgewpAQCAtMjMxLDEwICsyMzEsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKG1kLmdldE1vZHVsZVR5cGUoKS5lcXVhbHMoTW9kdWxlVHlwZS5XQVIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBsb2coIldlYiBtb2R1bGUgZGVwbG95ZWQgYXQgOiAiICsgYUNoaWxkLmdldFdlYlVSTCgpKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8vIGlmIHdlIGFyZSBoZXJlLCBpdCdzIGdvb2QgIQotICAgICAgICByZXR1cm4gdHJ1ZTsgICAgICAKLSAgICB9ICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2dldFhNb2R1bGVzL2NoaWxkdG1pZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2dldFhNb2R1bGVzL2NoaWxkdG1pZC9idWlsZC54bWwKaW5kZXggMDM4NGIwYy4uM2VlZjMxNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9nZXRYTW9kdWxlcy9jaGlsZHRtaWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZGVwbG95bWVudG1hbmFnZXIvZ2V0WE1vZHVsZXMvY2hpbGR0bWlkL2J1aWxkLnhtbApAQCAtMjAsMTkgKzIwLDE5IEBACiAKIDwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CiBdPgotIAorCiA8cHJvamVjdCBuYW1lPSJkZXBsb3l0YXJnZXRtb2R1bGVpZCIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotIAkmY29tbW9uQnVpbGQ7ICAgICAgICAKKyAgICAgJmNvbW1vbkJ1aWxkOwogICAgIDxwcm9wZXJ0eSBuYW1lPSJhcmNoaXZlZGlyIiB2YWx1ZT0iJHtidWlsZH0vYXJjaGl2ZXMiLz4KIAotCTx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdCI+Ci0gICAgICAgICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0iIC8+ICAgICAgICAKLQkJPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9idWlsZCIKLQkJCWNsYXNzcGF0aD0iJHtpbnN0fS9saWIvajJlZS5qYXI6JHtpbnN0fS9saWIvYXBwc2Vydi1ydC5qYXI6Li4vLi4vLi4vLi4vdXRpbC9idWlsZCIKLQkJLz4JCQotCTwvdGFyZ2V0PgotICAgICAgICAKKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQiPgorICAgICAgICAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9IiAvPgorICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2J1aWxkIgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2luc3R9L2xpYi9qMmVlLmphcjoke2luc3R9L2xpYi9hcHBzZXJ2LXJ0LmphcjouLi8uLi8uLi8uLi91dGlsL2J1aWxkIgorICAgICAgICAvPgorICAgIDwvdGFyZ2V0PgorCiAgICAgICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtZWFyIiB1bmxlc3M9ImVhcmZpbGUuYnVpbHQiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iZmlsZSAke2J1aWxkfS9zYXZlL3dzdG9lamIuZWFyIGlzIHByZXNlbnQgOiAke2VhcmZpbGUuYnVpbHR9Ii8+CiAgICAgICAgICAgICA8YW50IGRpcj0iLi4vLi4vLi4vZWFyL3dzdG9lamIiIHRhcmdldD0iYXNzZW1ibGUiLz4KQEAgLTQwLDI0ICs0MCwyNCBAQAogICAgICAgICAgICAgPGNvcHkgZmlsZT0iJHthcmNoaXZlZGlyfS93c3RvZWpiLmVhciIgdG9kaXI9IiR7YnVpbGR9Ly4uL3NhdmUiLz4KICAgICAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXJjaGl2ZWRpcn0vcGxhbi5qYXIiIHRvZGlyPSIke2J1aWxkfS8uLi9zYXZlIi8+CiAgICAgICAgIDwvdGFyZ2V0PgotICAgICAgICAKKwogICAgICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIiBkZXBlbmRzPSJjb21waWxlIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlY2xhcmUtdGVzdCI+CiAgICAgICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXNjcmlwdGlvbiIgdmFsdWU9Impzcjg4L2Rpc3RyaWJ1dGUvQ2hpbGRUYXJnZXRNb2R1bGVJRCB0ZXN0IFRhcmdldE1vZHVsZUlEIGFuZCBpdHMgY2hpbGRyZW4gcmV0dXJuZWQgZnJvbSBkZXBsb3ltZW50Ii8+Ci0gICAgICAgICAgICAgICAgPC9hbnRjYWxsPiAgICAgICAgCisgICAgICAgICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICAgICAgICAgIDxhdmFpbGFibGUgcHJvcGVydHk9ImVhcmZpbGUuYnVpbHQiIGZpbGU9IiR7YXJjaGl2ZWRpcn0vd3N0b2VqYi5lYXIiLz4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhciIvPgotCQk8YW50Y2FsbCB0YXJnZXQ9InNwZWNpYWxpemVkLnJ1bi5qc3I4OCI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3BlY2lhbGl6ZWQucnVuLmpzcjg4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXBsb3llci5jbGFzcyIgdmFsdWU9Impzcjg4LmRlcGxveW1lbnRtYW5hZ2VyLmdldFhNb2R1bGVzLmNoaWxkdG1pZC5DaGlsZFRhcmdldE1vZHVsZUlEVGVzdGVyIi8+Ci0JCQk8cGFyYW0gbmFtZT0iY29tbWFuZCIgdmFsdWU9ImRlcGxveSIvPgotCQkJPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0idHJ1ZSAke2J1aWxkfS8uLi9zYXZlL3dzdG9lamIuZWFyICR7YnVpbGR9Ly4uL3NhdmUvcGxhbi5qYXIiLz4KLQkJPC9hbnRjYWxsPiAgIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbW1hbmQiIHZhbHVlPSJkZXBsb3kiLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9InRydWUgJHtidWlsZH0vLi4vc2F2ZS93c3RvZWpiLmVhciAke2J1aWxkfS8uLi9zYXZlL3BsYW4uamFyIi8+CisgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InByb2Nlc3NSZXN1bHQiPgotICAgICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0IiB2YWx1ZT0iMCIvPiAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3VsdCIgdmFsdWU9IjAiLz4KICAgICAgICAgICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24udW5kZXBsb3kuYXNhZG1pbiI+CiAgICAgICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9IndzdG9lamIiLz4KLSAgICAgICAgICAgICAgICA8L2FudGNhbGw+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIDwvdGFyZ2V0PiAgICAgICAKLSAgICAgICAgCisgICAgICAgICAgICAgICAgPC9hbnRjYWxsPgorICAgICAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9lYXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9lYXIvYnVpbGQueG1sCmluZGV4IDYyYWIzMDQuLjM0NzkyZTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZWFyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2Vhci9idWlsZC54bWwKQEAgLTIzLDEyICsyMywxMiBAQAogCiA8cHJvamVjdCBuYW1lPSJlYXIiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLQkmY29tbW9uQnVpbGQ7CisgICAgJmNvbW1vbkJ1aWxkOwogCi0JPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+Ci0JCTxhbnQgZGlyPSJ3c3RvZWpiIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3dzdG9lamIiLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CisgICAgICAgIDxhbnQgZGlyPSJ3c3RvZWpiIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3dzdG9lamIiLz4KKyAgICAgICAgPC9hbnQ+CisgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9TaW1wbGVKU1I4OENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL1NpbXBsZUpTUjg4Q2xpZW50LmphdmEKaW5kZXggZDI4YjlmNy4uM2Y0OTE2NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL1NpbXBsZUpTUjg4Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL1NpbXBsZUpTUjg4Q2xpZW50LmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKICAqCiAgKlByb3ZpZGVzIGFjY2VzcyB0byB0aGUgSlNSODggQVBJIHRocm91Z2ggYSBjb252ZW5pZW50IGNvbW1hbmQgbGluZS4KICAqPHA+Ci0gKlRoaXMgaXMgaW50ZW5kZWQgZm9yIGludGVybmFsIHRlc3RpbmcgdXNlIG9ubHkuIAorICpUaGlzIGlzIGludGVuZGVkIGZvciBpbnRlcm5hbCB0ZXN0aW5nIHVzZSBvbmx5LgogICoKICAqIENyZWF0ZWQgb24gSmFudWFyeSAyMSwgMjAwNCwgMTE6MjIgQU0KICAqLwpAQCAtNDQsNyArNDQsNyBAQAogICovCiBwdWJsaWMgY2xhc3MgU2ltcGxlSlNSODhDbGllbnQgewogCi0gICAgCisKICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBKMkVFX0RFUExPWU1FTlRfTUFOQUdFUiA9ICJKMkVFLURlcGxveW1lbnRGYWN0b3J5LUltcGxlbWVudGF0aW9uLUNsYXNzIjsKIAogICAgIHByaXZhdGUgRGVwbG95bWVudEZhY3RvcnkgZGVwbG95bWVudEZhY3Rvcnk7CkBAIC01MiwxNSArNTIsMTUgQEAKICAgICBwcml2YXRlIERlcGxveW1lbnRNYW5hZ2VyIGRlcGxveW1lbnRNYW5hZ2VyOwogCiAgICAgcHJpdmF0ZSBTdHJpbmcgaG9zdDsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIHBvcnQ7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyB1c2VyOwotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgcGFzc3dvcmQ7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyB1cmk7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBTaW1wbGVKU1I4OENsaWVudCAqLwogICAgIHB1YmxpYyBTaW1wbGVKU1I4OENsaWVudChTdHJpbmcgaG9zdCwgU3RyaW5nIHBvcnQsIFN0cmluZyB1c2VyLCBTdHJpbmcgcGFzc3dvcmQpIHsKICAgICAgICAgdGhpcy5ob3N0ID0gaG9zdDsKQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgdGhpcy5wYXNzd29yZCA9IHBhc3N3b3JkOwogICAgICAgICB0aGlzLnVyaSA9ICJkZXBsb3llcjpTdW46QXBwU2VydmVyOjoiICsgaG9zdCArICI6IiArIHBvcnQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQHBhcmFtIGFyZ3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKICAgICAgKi8KQEAgLTc4LDEwICs3OCwxMCBAQAogICAgICAgICAgKkdldCBwcm9wZXJ0aWVzIGluZGljYXRpbmcgdGhlIHVzZXIsIHBhc3N3b3JkLCBob3N0LCBhbmQgcG9ydC4KICAgICAgICAgICovCiAgICAgICAgIFN0cmluZyBob3N0ID0gbnVsbDsKLSAgICAgICAgU3RyaW5nIHBvcnQgPSBudWxsOyAKLSAgICAgICAgU3RyaW5nIHVzZXIgPSBudWxsOyAKKyAgICAgICAgU3RyaW5nIHBvcnQgPSBudWxsOworICAgICAgICBTdHJpbmcgdXNlciA9IG51bGw7CiAgICAgICAgIFN0cmluZyBwYXNzd29yZCA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICgoKGhvc3QgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImpzcjg4Y2xpZW50Lmhvc3QiKSkgPT0gbnVsbCkKICAgICAgICAgICAgIHx8ICgocG9ydCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgianNyODhjbGllbnQucG9ydCIpKSA9PSBudWxsKQogICAgICAgICAgICAgfHwgKCh1c2VyID0gU3lzdGVtLmdldFByb3BlcnR5KCJqc3I4OGNsaWVudC51c2VyIikpID09IG51bGwpCkBAIC04OSw3ICs4OSw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBwcm9wZXJ0aWVzIGpzcjg4Y2xpZW50Lmhvc3QsIGpzcjg4Y2xpZW50LnBvcnQsIGpzcjg4Y2xpZW50LnVzZXIsIGFuZCBqc3I4OGNsaWVudC5wYXNzd29yZCBtdXN0IGJlIGFzc2lnbmVkIik7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgtMSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG5ldyBTaW1wbGVKU1I4OENsaWVudChob3N0LCBwb3J0LCB1c2VyLCBwYXNzd29yZCkucnVuKGFyZ3MpOwogICAgICAgICAgICAgU3lzdGVtLmV4aXQoMCk7CkBAIC05OSwxOSArOTksMTkgQEAKICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgcnVuKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBUYXJnZXRFeGNlcHRpb24sIERlcGxveW1lbnRNYW5hZ2VyQ3JlYXRpb25FeGNlcHRpb24gewogICAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiU3BlY2lmeSB0aGUgSlNSODggY2xpZW50IGNvbW1hbmQgeW91IHdhbnQgdG8gZXhlY3V0ZSBhcyB0aGUgZmlyc3QgY29tbWFuZCBsaW5lIHBhcmFtZXRlciIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChhcmdzWzBdLmVxdWFscygiZ2V0QXZhaWxhYmxlQXBwQ2xpZW50TW9kdWxlcyIpICl7CiAgICAgICAgICAgICBnZXRBdmFpbGFibGVNb2R1bGVzKE1vZHVsZVR5cGUuQ0FSKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVucmVjb2duaXplZCBKU1I4OCBjbGllbnQgY29tbWFuZCBzcGVjaWZpZWQ6ICIgKyBhcmdzWzBdKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBnZXRBdmFpbGFibGVNb2R1bGVzKE1vZHVsZVR5cGUgdHlwZSkgdGhyb3dzIFRhcmdldEV4Y2VwdGlvbiwgRGVwbG95bWVudE1hbmFnZXJDcmVhdGlvbkV4Y2VwdGlvbiB7CiAgICAgICAgIFRhcmdldCB0YXJnZXRzIFtdID0gZ2V0RGVwbG95bWVudE1hbmFnZXIoKS5nZXRUYXJnZXRzKCk7CiAgICAgICAgIFRhcmdldE1vZHVsZUlEIFtdIG1vZHVsZUlEcyA9IGdldERlcGxveW1lbnRNYW5hZ2VyKCkuZ2V0QXZhaWxhYmxlTW9kdWxlcyh0eXBlLCB0YXJnZXRzKTsKQEAgLTEyMSw3ICsxMjEsNyBAQAogICAgICAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgRGVwbG95bWVudEZhY3RvcnkgbG9hZERlcGxveW1lbnRGYWN0b3J5KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvYWRpbmcgZGVwbG95bWVudCBmYWN0b3J5Iik7CiAgICAgICAgIE9iamVjdCBkZXBsb3ltZW50RmFjdG9yeSA9IG51bGw7CkBAIC0xNDIsOSArMTQyLDkgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gY25mZSkgewogICAgICAgICAgICAgICAgIGNuZmUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmV4aXQoLTEpOwotICAgICAgICAgICAgfSAgIAorICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0cnkgeyAgIAorICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBkZXBsb3ltZW50RmFjdG9yeSA9IGZhY3RvcnkubmV3SW5zdGFuY2UoKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBpZSkgewogICAgICAgICAgICAgICAgIGllLnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTU1LDggKzE1NSw4IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4cGVjdGVkIGluc3RhbmNlIG9mIERlcGxveW1lbnRGYWN0b3J5IGZyb20gY2xhc3MgbG9hZGluZyBvZiAiICsgY2xhc3NOYW1lICsgIiBidXQgZ290ICIgKyBkZXBsb3ltZW50RmFjdG9yeS5nZXRDbGFzcygpLmdldE5hbWUoKSArICIgaW5zdGVhZCIpOwogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgtMSk7Ci0gICAgICAgICAgICB9ICAKLSAgICAgICAgICAgIAorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBsb2coIkZhaWxlZCB0byBsb2FkIHRoZSBkZXBsb3ltZW50IGZhY3RvcnkgdXNpbmcgVVJMICIgKyBmaWxlLmdldEFic29sdXRlUGF0aCgpICsgIiBhbmQgY2xhc3MgIiArIGNsYXNzTmFtZSk7CiAgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0xNjYsMTEgKzE2NiwxMSBAQAogICAgICAgICAgICAgcmV0dXJuIChEZXBsb3ltZW50RmFjdG9yeSkgZGVwbG95bWVudEZhY3Rvcnk7CiAKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsiICsgZ2V0SlNSQ2xpZW50TmFtZSgpICsgIl06OiAiICsgbWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJvdGVjdGVkIHN0YXRpYyBTdHJpbmcgZ2V0SlNSQ2xpZW50TmFtZSgpIHsKICAgICAgICAgcmV0dXJuICJTaW1wbGVKU1I4OENsaWVudCI7CiAgICAgfQpAQCAtMTgxLDE0ICsxODEsMTQgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdGhpcy5kZXBsb3ltZW50RmFjdG9yeTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIERlcGxveW1lbnRNYW5hZ2VyIGxvYWREZXBsb3ltZW50TWFuYWdlcigpIHRocm93cyBEZXBsb3ltZW50TWFuYWdlckNyZWF0aW9uRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb2FkaW5nIGRlcGxveW1lbnQgbWFuYWdlciB1c2luZyB1cmkgIiArIHRoaXMudXJpICsgIiB1bmRlciB1c2VyICIgKyB0aGlzLnVzZXIpOwotICAgICAgICBEZXBsb3ltZW50TWFuYWdlciBhbnN3ZXIgPSBnZXREZXBsb3ltZW50RmFjdG9yeSgpLmdldERlcGxveW1lbnRNYW5hZ2VyKHRoaXMudXJpLCB0aGlzLnVzZXIsIHRoaXMucGFzc3dvcmQpOyAKKyAgICAgICAgRGVwbG95bWVudE1hbmFnZXIgYW5zd2VyID0gZ2V0RGVwbG95bWVudEZhY3RvcnkoKS5nZXREZXBsb3ltZW50TWFuYWdlcih0aGlzLnVyaSwgdGhpcy51c2VyLCB0aGlzLnBhc3N3b3JkKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZXBsb3ltZW50IG1hbmFnZXIgbG9hZGVkLiIpOwogICAgICAgICByZXR1cm4gYW5zd2VyOwogICAgIH0KLSAgICAKKwogICAgIHByb3RlY3RlZCBEZXBsb3ltZW50TWFuYWdlciBnZXREZXBsb3ltZW50TWFuYWdlcigpIHRocm93cyBEZXBsb3ltZW50TWFuYWdlckNyZWF0aW9uRXhjZXB0aW9uIHsKICAgICAgICAgaWYgKHRoaXMuZGVwbG95bWVudE1hbmFnZXIgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhpcy5kZXBsb3ltZW50TWFuYWdlciA9IGxvYWREZXBsb3ltZW50TWFuYWdlcigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL1Rlc3RPcGVuSmFyRmlsZVdvcmthcm91bmQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9UZXN0T3BlbkphckZpbGVXb3JrYXJvdW5kLmphdmEKaW5kZXggNTc5MmQxYy4uZjI5ZGRjNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL1Rlc3RPcGVuSmFyRmlsZVdvcmthcm91bmQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvVGVzdE9wZW5KYXJGaWxlV29ya2Fyb3VuZC5qYXZhCkBAIC0zMyw5ICszMyw5IEBACiAgKiBAYXV0aG9yICB0anF1aW5uCiAgKi8KIHB1YmxpYyBjbGFzcyBUZXN0T3BlbkphckZpbGVXb3JrYXJvdW5kIHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBoZXJlID0gImRldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYyI7Ci0gICAgCisKICAgICAvKioKICAgICAgVmFsdWVzIHRha2VuIGZyb20gY29tbWFuZC1saW5lIGFyZ3VtZW50cwogICAgICAqLwpAQCAtNDQsMTMgKzQ0LDEzIEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgdXNlciA9IG51bGw7CiAgICAgcHJpdmF0ZSBTdHJpbmcgcGFzc3dvcmQgPSBudWxsOwogICAgIHByaXZhdGUgU3RyaW5nIHdhckZpbGVUb0RlcGxveSA9IG51bGw7Ci0gICAgCisKICAgICBwcml2YXRlIEpTUjg4RGVwbG95ZXIgZGVwbCA9IG51bGw7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBUZXN0T3BlbkphckZpbGVXb3JrYXJvdW5kICovCiAgICAgcHVibGljIFRlc3RPcGVuSmFyRmlsZVdvcmthcm91bmQoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGluaXREZXBsb3llcihTdHJpbmcgaG9zdCwgU3RyaW5nIHBvcnQsIFN0cmluZyB1c2VyLCBTdHJpbmcgcGFzc3dvcmQpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBsb2coIkdldHRpbmcgYWNjZXNzIHRvIEpTUjg4IGRlcGxveWVyIik7CiAgICAgICAgIGRlcGwgPSBuZXcgSlNSODhEZXBsb3llcihob3N0LCBwb3J0LCB1c2VyLCBwYXNzd29yZCk7CkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgICAgICB0ZXN0LmZhaWwoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbVGVzdFByb2dyZXNzT2JqZWN0SW1wbF06OiAiICsgbWVzc2FnZSk7CiAgICAgfQpAQCAtODMsMjcgKzgzLDI3IEBACiAgICAgICAgIGxvZygiRkFJTEVEOiAiICsgaGVyZSk7CiAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgcHJlcGFyZUFyZ3MoU3RyaW5nW10gYXJncykgewogICAgICAgICBpZiAoYXJncy5sZW5ndGggPCA1KSB7CiAgICAgICAgICAgICBsb2coIkV4cGVjdGVkIDUgYXJndW1lbnRzIChob3N0LCBwb3J0LCB1c2VyLCBwYXNzd29yZCwgd2FyKSBidXQgZm91bmQgIiArIGFyZ3MubGVuZ3RoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0aGlzLmhvc3QgPSBhcmdzWzBdOwogICAgICAgICB0aGlzLnBvcnQgPSBhcmdzWzFdOwogICAgICAgICB0aGlzLnVzZXIgPSBhcmdzWzJdOwogICAgICAgICB0aGlzLnBhc3N3b3JkID0gYXJnc1szXTsKICAgICAgICAgdGhpcy53YXJGaWxlVG9EZXBsb3kgPSBhcmdzWzRdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHJ1bihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgVGhyb3dhYmxlIHsKLSAgICAgICAgCisKICAgICAgICAgLyoKICAgICAgICAgICpQcmVwYXJlIGluc3RhbmNlIHZhcmlhYmxlcyBmcm9tIHRoZSBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGZvciBjb252ZW5pZW5jZS4KICAgICAgICAgICovCiAgICAgICAgIHByZXBhcmVBcmdzKGFyZ3MpOwotICAgICAgICAKKwogICAgICAgICAvKgogICAgICAgICAgKkxvY2F0ZSB0aGUgd2ViIGFyY2hpdmUgdG8gZGVwbG95LgogICAgICAgICAgKi8KQEAgLTExNywyMyArMTE3LDIzIEBACiAgICAgICAgICAqSW5pdGlhbGl6ZSB0aGUgZGVwbG95ZXIgZm9yIHVzZSBkdXJpbmcgdGhlIHRlc3QuCiAgICAgICAgICAqLwogICAgICAgICBpbml0RGVwbG95ZXIoaG9zdCwgcG9ydCwgdXNlciwgcGFzc3dvcmQpOwotICAgICAgICAKKwogICAgICAgICAvKgogICAgICAgICAgKlN0YXJ0IGJ5IGRlcGxveWluZyB0aGUgd2ViIGFwcC4KICAgICAgICAgICovCiAgICAgICAgIGludCBmaXJzdERlcGxveVJlc3VsdCA9IGRlcGwuZGVwbG95KHdhckZpbGUsIC8qZGVwbG95bWVudFBsYW4gKi8gbnVsbCwgLyogc3RhcnRCeURlZmF1bHQgKi8gdHJ1ZSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChmaXJzdERlcGxveVJlc3VsdCAhPSAwKSB7CiAgICAgICAgICAgICBsb2coIkZhaWxlZCB0byBkZXBsb3kgd2FyIGZpbGUgIiArIHdhckZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiIHRoZSBmaXJzdCB0aW1lLiIpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8qCiAgICAgICAgICAqTmV4dCwgdW5kZXBsb3kgdGhlIHNhbWUgd2ViIGFwcC4KLSAgICAgICAgICpHZXQgdGhlIGxpc3Qgb2YgbW9kdWxlcyBhY3RlZCB1cG9uIHNvIHdlIGNhbiBzcGVjaWZ5IHRoZSBjb3JyZWN0IG1vZHVsZSBJRCB0byB1bmRlcGxveS4gCisgICAgICAgICAqR2V0IHRoZSBsaXN0IG9mIG1vZHVsZXMgYWN0ZWQgdXBvbiBzbyB3ZSBjYW4gc3BlY2lmeSB0aGUgY29ycmVjdCBtb2R1bGUgSUQgdG8gdW5kZXBsb3kuCiAgICAgICAgICAqLwogICAgICAgICBUYXJnZXRNb2R1bGVJRCBbXSBmaXJzdExpc3RPZkFwcHMgPSBkZXBsLmdldE1vc3RSZWNlbnRUYXJnZXRNb2R1bGVJRHMoKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGZpcnN0TGlzdE9mQXBwcy5sZW5ndGggIT0gMSkgewogICAgICAgICAgICAgbG9nKCJFeHBlY3RlZCBleGFjdGx5IG9uZSByZXN1bHQgbW9kdWxlIGZyb20gdGhlIGRlcGxveWVyIGJ1dCBmb3VuZCAiICsgZmlyc3RMaXN0T2ZBcHBzLmxlbmd0aCk7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpcnN0TGlzdE9mQXBwcy5sZW5ndGg7IGkrKykgewpAQCAtMTQxLDI5ICsxNDEsMjkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgaW50IGZpcnN0VW5kZXBsb3lSZXN1bHQgPSBkZXBsLnVuZGVwbG95KGZpcnN0TGlzdE9mQXBwc1swXS5nZXRNb2R1bGVJRCgpKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGZpcnN0VW5kZXBsb3lSZXN1bHQgIT0gMCkgewogICAgICAgICAgICAgbG9nKCJFcnJvciB1bmRlcGxveWluZyB0aGUgd2ViIGFwcGxpY2F0aW9uIHRoZSBmaXJzdCB0aW1lLiIpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8qCiAgICAgICAgICAqTm93LCB0cnkgdG8gZGVwbG95IHRoZSBhcHAgYWdhaW4uCiAgICAgICAgICAqLwogICAgICAgICBpbnQgc2Vjb25kRGVwbG95UmVzdWx0ID0gZGVwbC5kZXBsb3kod2FyRmlsZSwgLypkZXBsb3ltZW50UGxhbiAqLyBudWxsLCAvKiBzdGFydEJ5RGVmYXVsdCAqLyB0cnVlKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKHNlY29uZERlcGxveVJlc3VsdCAhPSAwKSB7CiAgICAgICAgICAgICBsb2coIkZhaWxlZCB0byBkZXBsb3kgd2FyIGZpbGUgIiArIHdhckZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiIHRoZSBzZWNvbmQgdGltZS4iKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvKgogICAgICAgICAgKlVuZGVwbG95IHRoZSB3ZWIgYXBwIG9uZSBsYXN0IHRpbWUuCiAgICAgICAgICAqLwogICAgICAgICBUYXJnZXRNb2R1bGVJRCBbXSBzZWNvbmRMaXN0T2ZBcHBzID0gZGVwbC5nZXRNb3N0UmVjZW50VGFyZ2V0TW9kdWxlSURzKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChzZWNvbmRMaXN0T2ZBcHBzLmxlbmd0aCAhPSAxKSB7CiAgICAgICAgICAgICBsb2coIkV4cGVjdGVkIGV4YWN0bHkgb25lIGFwcGxpY2F0aW9uIGZyb20gdGhlIGRlcGxveWVyIGJ1dCBmb3VuZCAiICsgc2Vjb25kTGlzdE9mQXBwcy5sZW5ndGgpOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZWNvbmRMaXN0T2ZBcHBzLmxlbmd0aDsgaSsrKSB7CkBAIC0xNzEsOSArMTcxLDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgaW50IHNlY29uZFVuZGVwbG95UmVzdWx0ID0gZGVwbC51bmRlcGxveShzZWNvbmRMaXN0T2ZBcHBzWzBdLmdldE1vZHVsZUlEKCkpOwotICAgICAgICAKKwogICAgICAgICBpZiAoc2Vjb25kVW5kZXBsb3lSZXN1bHQgIT0gMCkgewogICAgICAgICAgICAgbG9nKCJFcnJvciB1bmRlcGxveWluZyB0aGUgd2ViIGFwcGxpY2F0aW9uIHRoZSBzZWNvbmQgdGltZS4iKTsKICAgICAgICAgICAgIGZhaWwoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9UZXN0UHJvZ3Jlc3NPYmplY3RJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvVGVzdFByb2dyZXNzT2JqZWN0SW1wbC5qYXZhCmluZGV4IGVhYzRiMTAuLjIwMTc4Y2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9UZXN0UHJvZ3Jlc3NPYmplY3RJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL1Rlc3RQcm9ncmVzc09iamVjdEltcGwuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogLyoqCiAgKk1ha2VzIHN1cmUgdGhhdCB0aGUgUHJvZ3Jlc3NPYmplY3RJbXBsIGNsYXNzIGZ1bmN0aW9ucyBjb3JyZWN0bHkuCiAgKjxwPgotICpJbiBwYXJ0aWN1bGFyLCBidWcgNDk3Nzc2NCByZXBvcnRlZCB0aGF0IHRoZSBQcm9ncmVzc09iamVjdEltcGwgY2xhc3Mgd2FzIHN1c2NlcHRpYmxlIHRvIAorICpJbiBwYXJ0aWN1bGFyLCBidWcgNDk3Nzc2NCByZXBvcnRlZCB0aGF0IHRoZSBQcm9ncmVzc09iamVjdEltcGwgY2xhc3Mgd2FzIHN1c2NlcHRpYmxlIHRvCiAgKmNvbmN1cnJlbnQgdXBkYXRlIGZhaWx1cmVzIGluIHRoZSB2ZWN0b3IgdGhhdCBob2xkcyByZWdpc3RlcmVkIHByb2dyZXNzIGxpc3RlbmVycy4gIFRoZQogICpmaXJlUHJvZ3Jlc3NFdmVudCBtZXRob2Qgd29ya2VkIHdpdGggdGhlIHZlY3RvciBvZiBsaXN0ZW5lcnMgaXRzZWxmIHJhdGhlciB0aGFuIGEgY2xvbmUgb2YgdGhlIHZlY3Rvci4KICAqT25lIG9mIHRoZSBsaXN0ZW5lcnMgdW5yZWdpc3RlcmVkIGl0c2VsZiBmcm9tIHRoZSBwcm9ncmVzcyBvYmplY3QsIHNvIHdoZW4gdGhlIGl0ZXJhdG9yIHRyaWVkIHRvCkBAIC00OCwyMiArNDgsMjIgQEAKIHB1YmxpYyBjbGFzcyBUZXN0UHJvZ3Jlc3NPYmplY3RJbXBsIHsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBoZXJlID0gImRldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYyI7Ci0gICAgCisKICAgICAvKioKICAgICAgKlByb3ZpZGVzIGEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHByb2dyZXNzIG9iamVjdCBmb3IgdGVzdGluZy4gIE5vdGUgdGhhdCB0aGUgYmVoYXZpb3IgYmVpbmcKICAgICAgKnRlc3RlZCBpcyBhY3R1YWxseSB0aGF0IG9mIHRoZSBzdXBlcmNsYXNzIFByb2dyZXNzT2JqZWN0SW1wbC4KICAgICAgKi8KICAgICBwdWJsaWMgY2xhc3MgTXlQcm9ncmVzc09iamVjdEltcGwgZXh0ZW5kcyBQcm9ncmVzc09iamVjdEltcGwgewotICAgICAgIAorCiAgICAgICAgIHB1YmxpYyBNeVByb2dyZXNzT2JqZWN0SW1wbChUYXJnZXRJbXBsIHRhcmdldCkgewogICAgICAgICAgICAgc3VwZXIodGFyZ2V0KTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvKioKICAgICAgICAgICpSZXF1aXJlZCBieSB0aGUgYWJzdHJhY3QgY2xhc3MgZGVmaW5pdGlvbiBidXQgbm90IHVzZWQgZHVyaW5nIHRlc3RpbmcuCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7fQotICAgICAgICAKKwogICAgICAgICAvKioKICAgICAgICAgICpTdGFuZHMgaW4gYXMgYW4gb3BlcmF0aW9uIHRoYXQgZmlyZXMgYW4gZXZlbnQgdG8gcmVnaXN0ZXJlZCBsaXN0ZW5lcnMuCiAgICAgICAgICAqLwpAQCAtNzYsMTMgKzc2LDEzIEBACiAgICAgICAgICAgICBmaXJlUHJvZ3Jlc3NFdmVudChTdGF0ZVR5cGUuQ09NUExFVEVELCAiZG9uZSIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICpBZGRzIGEgbmV3IGxpc3RlbmVyIGR1cmluZyB0aGUgZXZlbnQgaGFuZGxpbmcuCiAgICAgICovCiAgICAgcHVibGljIGNsYXNzIE1lZGRsaW5nTGlzdGVuZXJBZGRlciBpbXBsZW1lbnRzIFByb2dyZXNzTGlzdGVuZXIgewotICAgICAgICAKLSAgICAKKworCiAgICAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZVByb2dyZXNzRXZlbnQoamF2YXguZW50ZXJwcmlzZS5kZXBsb3kuc3BpLnN0YXR1cy5Qcm9ncmVzc0V2ZW50IHByb2dyZXNzRXZlbnQpIHsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKk1lZGRsZSBpbiB0aGUgbGlzdGVuZXIgbGlzdCBieSBhZGRpbmcgYSBuZXcgbGlzdGVuZXIgdG8gdGhlIGxpc3QuICBUaGlzIHNob3VsZCB0cmlnZ2VyIHRoZSBlcnJvcgpAQCAtOTAsMTUgKzkwLDE1IEBACiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIFRlc3RQcm9ncmVzc09iamVjdEltcGwudGhpcy50aGVQcm9ncmVzc09iamVjdEltcGwuYWRkUHJvZ3Jlc3NMaXN0ZW5lcihuZXcgVGVzdFByb2dyZXNzT2JqZWN0SW1wbC5NZWRkbGluZ0xpc3RlbmVyUmVtb3ZlcigpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqUmVtb3ZlcyBpdHNlbGYgYXMgYSBsaXN0ZW5lciBkdXJpbmcgdGhlIGV2ZW50IGhhbmRsaW5nLgogICAgICAqLwogICAgIHB1YmxpYyBjbGFzcyBNZWRkbGluZ0xpc3RlbmVyUmVtb3ZlciBpbXBsZW1lbnRzIFByb2dyZXNzTGlzdGVuZXIgewotICAgICAgICAKLSAgICAKKworCiAgICAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZVByb2dyZXNzRXZlbnQoamF2YXguZW50ZXJwcmlzZS5kZXBsb3kuc3BpLnN0YXR1cy5Qcm9ncmVzc0V2ZW50IHByb2dyZXNzRXZlbnQpIHsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKk1lZGRsZSBpbiB0aGUgbGlzdGVuZXIgbGlzdCBieSByZW1vdmluZyBpdHNlbGYgZnJvbSB0aGUgbGlzdC4gIFRoaXMgc2hvdWxkIHRyaWdnZXIgdGhlIGVycm9yCkBAIC0xMDYsMTYgKzEwNiwxNiBAQAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBUZXN0UHJvZ3Jlc3NPYmplY3RJbXBsLnRoaXMudGhlUHJvZ3Jlc3NPYmplY3RJbXBsLnJlbW92ZVByb2dyZXNzTGlzdGVuZXIodGhpcyk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKiBMb2NhbCBwcm9ncmVzcyBvYmplY3QgaW1wbGVtZW50YXRpb24gdG8gYmUgdGVzdGVkLiAqLwogICAgIHByaXZhdGUgTXlQcm9ncmVzc09iamVjdEltcGwgdGhlUHJvZ3Jlc3NPYmplY3RJbXBsOwotICAgICAgICAKKwogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFRlc3RQcm9ncmVzc09iamVjdEltcGwgKi8KICAgICBwdWJsaWMgVGVzdFByb2dyZXNzT2JqZWN0SW1wbCgpIHsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAcGFyYW0gYXJncyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwogICAgICAqLwpAQCAtMTI5LDEzICsxMjksMTMgQEAKICAgICAgICAgICAgIHRlc3QuZmFpbCgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgcnVuKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgYWRkTmV3TGlzdGVuZXJEdXJpbmdFdmVudEhhbmRsaW5nKCk7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogVGFtcGVyIHdpdGggdGhlIGxpc3RlbmVyIGxpc3QgYnkgYWRkaW5nIGEgbmV3IGxpc3RlbmVyIGR1cmluZyBldmVudCBoYW5kbGluZy4gIAorICAgICAqIFRhbXBlciB3aXRoIHRoZSBsaXN0ZW5lciBsaXN0IGJ5IGFkZGluZyBhIG5ldyBsaXN0ZW5lciBkdXJpbmcgZXZlbnQgaGFuZGxpbmcuCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGFkZE5ld0xpc3RlbmVyRHVyaW5nRXZlbnRIYW5kbGluZygpIHsKICAgICAgICAgLyoKQEAgLTE0NiwxNyArMTQ2LDE3IEBACiAgICAgICAgIHRoZVByb2dyZXNzT2JqZWN0SW1wbCA9IG5ldyBNeVByb2dyZXNzT2JqZWN0SW1wbCh0YXJnZXQpOwogICAgICAgICBUZXN0UHJvZ3Jlc3NPYmplY3RJbXBsLk1lZGRsaW5nTGlzdGVuZXJBZGRlciBtZWRkbGluZ0xpc3RlbmVyMSA9IG5ldyBUZXN0UHJvZ3Jlc3NPYmplY3RJbXBsLk1lZGRsaW5nTGlzdGVuZXJBZGRlcigpOwogICAgICAgICBUZXN0UHJvZ3Jlc3NPYmplY3RJbXBsLk1lZGRsaW5nTGlzdGVuZXJBZGRlciBtZWRkbGluZ0xpc3RlbmVyMiA9IG5ldyBUZXN0UHJvZ3Jlc3NPYmplY3RJbXBsLk1lZGRsaW5nTGlzdGVuZXJBZGRlcigpOwotICAgICAgICAKKwogICAgICAgICB0aGVQcm9ncmVzc09iamVjdEltcGwuYWRkUHJvZ3Jlc3NMaXN0ZW5lcihtZWRkbGluZ0xpc3RlbmVyMSk7CiAgICAgICAgIHRoZVByb2dyZXNzT2JqZWN0SW1wbC5hZGRQcm9ncmVzc0xpc3RlbmVyKG1lZGRsaW5nTGlzdGVuZXIyKTsKLSAgICAgICAgCisKICAgICAgICAgLyoKICAgICAgICAgICpGaXJlIGFuIGV2ZW50IHRoYXQgd2lsbCBjaGFuZ2UgdGhlIGxpc3RlbmVyIHNldC4KICAgICAgICAgICovCiAgICAgICAgIHRoZVByb2dyZXNzT2JqZWN0SW1wbC5hY3QoKTsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1Rlc3RQcm9ncmVzc09iamVjdEltcGxdOjogIiArIG1lc3NhZ2UpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvYnVpbGQueG1sCmluZGV4IGZiM2Q4NzguLmJiZTgzZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2J1aWxkLnhtbApAQCAtMjQsMTEgKzI0LDExIEBACiA8cHJvamVjdCBuYW1lPSJtaXNjZWxsYW5lb3VzVGVzdEZvckpTUjg4IiBkZWZhdWx0PSJ1c2FnZSIgYmFzZWRpcj0iLiI+CiAKICAgICAmY29tbW9uQnVpbGQ7Ci0gICAgCisKICAgICA8cHJvcGVydHkgbmFtZT0iYXBwQ2xpZW50TmFtZSIgdmFsdWU9ImFwcGNsaWVudHRlc3QiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iYXBwQ2xpZW50SmFyRmlsZSIgdmFsdWU9IiR7YnVpbGR9LyR7YXBwQ2xpZW50TmFtZX0uamFyIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImFwcENsaWVudE1vZHVsZU5hbWUiIHZhbHVlPSJ0ZXN0QXBwQ2xpZW50Ii8+Ci0gICAgCisKICAgICA8cHJvcGVydHkgbmFtZT0id2ViU2VydmljZXNXb3JrYXJvdW5kQ2hlY2tXYXJGaWxlIiB2YWx1ZT0iZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvcHJvdmlkZWQtd2Fycy9qYXhycGMtY29mZmVlLWRpc3RyaWJ1dG9yLndhciIvPgogCiAgICAgPHBhdGggaWQ9Impzcjg4LmV4ZWMuY2xhc3NwYXRoIj4KQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIqLmphdmEiCiAgICAgICAgICAgICAgICBkZWJ1Zz0ib24iCiAgICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+Ci0gICAgICAgICAgICA8Y2xhc3NwYXRoPiAKKyAgICAgICAgICAgIDxjbGFzc3BhdGg+CiAgICAgICAgICAgICAgICAgPHBhdGggcmVmaWQ9ImdmdjMuY2xhc3NwYXRoIi8+CiAgICAgICAgICAgICAgICAgPHBhdGggcmVmaWQ9InRlc3QuY29tcGlsZS5jbGFzc3BhdGgiLz4KICAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249Ii4uLy4uL3V0aWwvYnVpbGQiLz4gPCEtLSBuZWVkIHRoaXMgdG8gZmluZCB0aGUgSlNSODhEZXBsb3llciAtLT4KQEAgLTU2LDcgKzU2LDcgQEAKICAgICA8L3RhcmdldD4KIAogPCEtLQotCVJ1biBhbGwgdGhlIHRlc3RzLgorICAgIFJ1biBhbGwgdGhlIHRlc3RzLgogLS0+CiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImNvbXBpbGUsYXNzZW1ibGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1blRlc3RQcm9ncmVzc09iamVjdEltcGwiLz4KQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtidWlsZH0iLz4KICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhV2l0aFJlc3VsdD4KLSAgICAgICAgCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwcm9jZXNzUmVzdWx0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXN1bHQiIHZhbHVlPSIke3Jlc3VsdH0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2ciIHZhbHVlPSIke2J1aWxkfS9UZXN0UHJvZ3Jlc3NPYmplY3RJbXBsLmxvZyIvPgpAQCAtMTA4LDcgKzEwOCw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0iIGluY2x1ZGVzPSIqKi9hcHBsaWNhdGlvbi1jbGllbnQueG1sICoqL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPCEtLQogICAgICAgICBUbyB0ZXN0IHRoZSBhYmlsaXR5IHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbW9kdWxlcyB0aHJvdWdoIEpTUjg4LCBmaXJzdCBkZXBsb3kgYW4gYXBwIGNsaWVudAogICAgICAgICAod2hpY2ggZXhwb3NlZCBhIGJ1ZyksIHRoZW4gdXNlIEpTUjg4IHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IGFwcCBjbGllbnQgY29tcG9uZW50cywgdGhlbiB1bmRlcGxveQpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLmRlcGxveS5hc2FkbWluIj4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSItLW5hbWUgJHthcHBDbGllbnRNb2R1bGVOYW1lfSAke2FwcENsaWVudEphckZpbGV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAgCisKICAgICAgICAgIDxqYXZhV2l0aFJlc3VsdAogICAgICAgICAgICAgZm9yaz0idHJ1ZSIKICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKQEAgLTE2NCwxNCArMTY0LDE0IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nIiB2YWx1ZT0iJHtidWlsZH0vR2V0TW9kdWxlc1Rlc3QubG9nIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDwhLS0KLSAgICAgICAgVGhpcyB0ZXN0IGNoZWNrcyBvbiBhIHdvcmthcm91bmQgdGhhdCBhdm9pZHMgYSBidWcgaW4gSjJTRSB0aGF0IG9wZW5zIGEgamFyIGZpbGUgYnV0IG5ldmVyIGNsb3NlcyBpdC4gIAorICAgICAgICBUaGlzIHRlc3QgY2hlY2tzIG9uIGEgd29ya2Fyb3VuZCB0aGF0IGF2b2lkcyBhIGJ1ZyBpbiBKMlNFIHRoYXQgb3BlbnMgYSBqYXIgZmlsZSBidXQgbmV2ZXIgY2xvc2VzIGl0LgogICAgICAgICBUaGlzIGhhcHBlbnMgZHVyaW5nIHdlYiBzZXJ2aWNlcyBjb21waWxhdGlvbiBkdXJpbmcgZGVwbG95bWVudCAoaW4gc29tZSBjYXNlcykgYW5kIHRoZSBvcGVuIGphciBmaWxlCiAgICAgICAgIHByZXZlbnRzIHRoZSBhcHAgc2VydmVyIGZyb20gY29tcGxldGVseSB1bmRlcGxveWluZyB0aGUgYXBwLiAgQSBsYXRlciBhdHRlbXB0IHRvIGRlcGxveSB0aGUgYXBwCiAgICAgICAgIGFnYWluIGZhaWxzIGJlY2F1c2Ugb2YgdGhlIG9wZW4gamFyIGZpbGUuICBUaGUgYWRtaW5pc3RyYXRvciBtdXN0IHNodXQgZG93biBhbmQgcmVzdGFydCB0aGUgYXBwCiAgICAgICAgIHNlcnZlciB0byBjbGVhciB0aGUgb3BlbiBqYXIgYW5kIHBlcm1pdCB0aGUgbGF0ZXIgZGVwbG95bWVudCB0byBzdWNjZWVkLgotICAgICAgICAKKwogICAgICAgICBEZXBsb3ltZW50IGhhcyB3b3JrZWQgYXJvdW5kIHRoaXMgcHJvYmxlbSwgYW5kIHRoaXMgdGVzdCBtYWtlcyBzdXJlIHRoZSB3b3JrYXJvdW5kIGNvbnRpbnVlcyB0byB3b3JrLgogICAgIC0tPgogICAgIDx0YXJnZXQgbmFtZT0icnVuT3Blbkphcldvcmthcm91bmRUZXN0IiBkZXBlbmRzPSJpbml0Ij4KQEAgLTE4MCw3ICsxODAsNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPCEtLQotICAgICAgICAgICAgUnVuIHRoZSB0ZXN0IHByb2dyYW0gdGhhdCBkZXBsb3lzLCB1bmRlcGxveXMsIGFuZCBkZXBsb3lzIGFnYWluLiAgCisgICAgICAgICAgICBSdW4gdGhlIHRlc3QgcHJvZ3JhbSB0aGF0IGRlcGxveXMsIHVuZGVwbG95cywgYW5kIGRlcGxveXMgYWdhaW4uCiAgICAgICAgIC0tPgogICAgICAgICAgPGphdmFXaXRoUmVzdWx0CiAgICAgICAgICAgICBmb3JrPSJ0cnVlIgpAQCAtMjE2LDcgKzIxNiw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvY29tbW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9jb21tb24vYnVpbGQueG1sCmluZGV4IGUyNTgzMTYuLjg5ZGNiZTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9jb21tb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9jb21tb24vYnVpbGQueG1sCkBAIC0xNywyOCArMTcsMjggQEAKIC0tPgogCiA8cHJvamVjdCBuYW1lPSJDb2ZmZWUgQnJlYWssIGNvbW1vbiIgZGVmYXVsdD0iYnVpbGQiIGJhc2VkaXI9Ii4iPgotICA8dGFyZ2V0IG5hbWU9ImluaXQiPiAKLSAgICAgIDx0c3RhbXAvPiAKLSAgPC90YXJnZXQ+IAorICA8dGFyZ2V0IG5hbWU9ImluaXQiPgorICAgICAgPHRzdGFtcC8+CisgIDwvdGFyZ2V0PgogCiAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9ImJ1aWxkIiAvPgogICA8cHJvcGVydHkgbmFtZT0ic3JjIiB2YWx1ZT0ic3JjIiAvPgotIAotICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiIAotICAgCWRlc2NyaXB0aW9uPSJDcmVhdGUgYnVpbGQgZGlyZWN0b3JpZXMuIj4gCi0gICAgPG1rZGlyIGRpcj0iJHtidWlsZH0iIC8+IAotICA8L3RhcmdldD4gCi0gCi0gIDwhLS0gRXhlY3V0YWJsZSBUYXJnZXRzIC0tPiAKLSAKLSAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJwcmVwYXJlIiAgCi0gICAgIGRlc2NyaXB0aW9uPSJDb21waWxlIC5qYXZhIGZpbGVzLiIgPiAKLSAgICA8amF2YWMgCi0gICAgICAgc3JjZGlyPSIke3NyY30iIAotICAgICAgIGRlc3RkaXI9IiR7YnVpbGR9IiAKLSAgICAgICBpbmNsdWRlcz0iKiovKi5qYXZhIiAKKworICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiCisgICAgICAgZGVzY3JpcHRpb249IkNyZWF0ZSBidWlsZCBkaXJlY3Rvcmllcy4iPgorICAgIDxta2RpciBkaXI9IiR7YnVpbGR9IiAvPgorICA8L3RhcmdldD4KKworICA8IS0tIEV4ZWN1dGFibGUgVGFyZ2V0cyAtLT4KKworICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9InByZXBhcmUiCisgICAgIGRlc2NyaXB0aW9uPSJDb21waWxlIC5qYXZhIGZpbGVzLiIgPgorICAgIDxqYXZhYworICAgICAgIHNyY2Rpcj0iJHtzcmN9IgorICAgICAgIGRlc3RkaXI9IiR7YnVpbGR9IgorICAgICAgIGluY2x1ZGVzPSIqKi8qLmphdmEiCiAgICAgIC8+Ci0gIDwvdGFyZ2V0PgkgIAorICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIgogICAgICBkZXNjcmlwdGlvbj0iQ29tcGlsZXMgc291cmNlLiI+CkBAIC00OSw1ICs0OSw1IEBACiAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGR9IiAvPgogICA8L3RhcmdldD4KIAotPC9wcm9qZWN0PiAKLSAKKzwvcHJvamVjdD4KKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2NvbW1vbi9zcmMvY29tL3N1bi9jYi9BZGRyZXNzQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2NvbW1vbi9zcmMvY29tL3N1bi9jYi9BZGRyZXNzQmVhbi5qYXZhCmluZGV4IGJlMzA1ZTcuLmYwNTg3ZGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9jb21tb24vc3JjL2NvbS9zdW4vY2IvQWRkcmVzc0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvY29tbW9uL3NyYy9jb20vc3VuL2NiL0FkZHJlc3NCZWFuLmphdmEKQEAgLTI3LDggKzI3LDggQEAKIAogICAgIHB1YmxpYyBBZGRyZXNzQmVhbigpIHsgfQogCi0gICAgcHVibGljIEFkZHJlc3NCZWFuKFN0cmluZyBzdHJlZXQsIFN0cmluZyBjaXR5LCAKLSAgICAgICAgU3RyaW5nIHN0YXRlLCBTdHJpbmcgemlwKSB7IAorICAgIHB1YmxpYyBBZGRyZXNzQmVhbihTdHJpbmcgc3RyZWV0LCBTdHJpbmcgY2l0eSwKKyAgICAgICAgU3RyaW5nIHN0YXRlLCBTdHJpbmcgemlwKSB7CiAKICAgICAgICAgdGhpcy5zdHJlZXQgPSBzdHJlZXQ7CiAgICAgICAgIHRoaXMuY2l0eSA9IGNpdHk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvY29tbW9uL3NyYy9jb20vc3VuL2NiL0N1c3RvbWVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2NvbW1vbi9zcmMvY29tL3N1bi9jYi9DdXN0b21lckJlYW4uamF2YQppbmRleCBhOWZlYjU3Li5mMDQyZDUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvY29tbW9uL3NyYy9jb20vc3VuL2NiL0N1c3RvbWVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9jb21tb24vc3JjL2NvbS9zdW4vY2IvQ3VzdG9tZXJCZWFuLmphdmEKQEAgLTI3LDggKzI3LDggQEAKIAogICAgIHB1YmxpYyBDdXN0b21lckJlYW4oKSB7IH0KIAotICAgIHB1YmxpYyBDdXN0b21lckJlYW4oU3RyaW5nIGZpcnN0TmFtZSwgU3RyaW5nIGxhc3ROYW1lLCAKLSAgICAgICAgU3RyaW5nIHBob25lTnVtYmVyLCBTdHJpbmcgZW1haWxBZGRyZXNzKSB7IAorICAgIHB1YmxpYyBDdXN0b21lckJlYW4oU3RyaW5nIGZpcnN0TmFtZSwgU3RyaW5nIGxhc3ROYW1lLAorICAgICAgICBTdHJpbmcgcGhvbmVOdW1iZXIsIFN0cmluZyBlbWFpbEFkZHJlc3MpIHsKIAogICAgICAgICB0aGlzLmZpcnN0TmFtZSA9IGZpcnN0TmFtZTsKICAgICAgICAgdGhpcy5sYXN0TmFtZSA9IGxhc3ROYW1lOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2NvbW1vbi9zcmMvY29tL3N1bi9jYi9EYXRlSGVscGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvY29tbW9uL3NyYy9jb20vc3VuL2NiL0RhdGVIZWxwZXIuamF2YQppbmRleCBkMGExYjIwLi5lYWY0MGI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvY29tbW9uL3NyYy9jb20vc3VuL2NiL0RhdGVIZWxwZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvY29tbW9uL3NyYy9jb20vc3VuL2NiL0RhdGVIZWxwZXIuamF2YQpAQCAtMjA1LDcgKzIwNSw3IEBACiAKICAgIHB1YmxpYyBzdGF0aWMgRGF0ZSBjYWxlbmRhclRvRGF0ZShDYWxlbmRhciBjYWwpIHsKIAotCSAgIHJldHVybiBjYWwuZ2V0VGltZSgpOworICAgICAgIHJldHVybiBjYWwuZ2V0VGltZSgpOwogCiAgICB9IC8vIGNhbGVuZGFyVG9EYXRlCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9jb21tb24vc3JjL2NvbS9zdW4vY2IvVVJMSGVscGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvY29tbW9uL3NyYy9jb20vc3VuL2NiL1VSTEhlbHBlci5qYXZhCmluZGV4IDYyZDlkOGMuLmRlMzgxY2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9jb21tb24vc3JjL2NvbS9zdW4vY2IvVVJMSGVscGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2NvbW1vbi9zcmMvY29tL3N1bi9jYi9VUkxIZWxwZXIuamF2YQpAQCAtMTYsNyArMTYsNyBAQAogCiBwYWNrYWdlIGNvbS5zdW4uY2I7CiBpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotIAorCiBwdWJsaWMgZmluYWwgY2xhc3MgVVJMSGVscGVyIHsKIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldFNhYWpVUkwoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGNmMjQ0NS4uODU5OWE4NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiAjIFRoaXMgZmlsZSBpcyByZWZlcmVuY2VkIGJ5IHRoZSBidWlsZC54bWwgZmlsZS4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL2J1aWxkLnhtbAppbmRleCA5NTA0OGEwLi42MmEyMzZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL2J1aWxkLnhtbApAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgIDwvZmlsZXNldD4KICAgPC9wYXRoPgotICAKKwogIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT0gUFJFUEFSRSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIAotICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIAorICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiCiAgICAgIGRlc2NyaXB0aW9uPSJDcmVhdGVzIHRoZSBidWlsZCBhbmQgZGlzdCBkaXJlY3RvcmllcyIgPgogICAgICA8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyB0aGUgcmVxdWlyZWQgZGlyZWN0b3JpZXMuLi4uIiAvPgogICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfS9jbGllbnQiIC8+CkBAIC01MywxNCArNTMsMTQgQEAKICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0vcmVnaXN0cnkiIC8+CiAgICAgIDxta2RpciBkaXI9IiR7ZGlzdH0iIC8+CiAgICA8L3RhcmdldD4KLSAgIAorCiAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgogICAgICAgPHRzdGFtcC8+CiAgICA8L3RhcmdldD4KIAogCiAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PSBXU0NPTVBJTEUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0gCisKICA8dGFyZ2V0IG5hbWU9InNldC13c2NvbXBpbGUiID4KICAgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0id3Njb21waWxlIiB2YWx1ZT0iJHt3c2NvbXBpbGUuZGlyfS93c2NvbXBpbGUuYmF0Ij4KICAgICAgICAgPG9zIGZhbWlseT0id2luZG93cyIvPgpAQCAtMTAwLDggKzEwMCw4IEBACiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1jb21tb24iIGRlcGVuZHM9InByZXBhcmUiCiAgICAgICBkZXNjcmlwdGlvbj0iQ29tcGlsZXMgdGhlIGNvbW1vbiBiZWFucyI+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJDb21waWxpbmcgdGhlIGNvbW1vbiBiZWFuIHNvdXJjZSBjb2RlLi4uLiIvPgotICAgICAgPGFudCBhbnRmaWxlPSIuLi9jb21tb24vYnVpbGQueG1sIiAKLSAgICAgICAgICAgZGlyPSIuLi9jb21tb24iIAorICAgICAgPGFudCBhbnRmaWxlPSIuLi9jb21tb24vYnVpbGQueG1sIgorICAgICAgICAgICBkaXI9Ii4uL2NvbW1vbiIKICAgICAgICAgICAgdGFyZ2V0PSJidWlsZCI+CiAgICAgICA8L2FudD4KICAgPC90YXJnZXQ+CkBAIC0xMjEsOCArMTIxLDggQEAKICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgPC9jb3B5PgogICA8L3RhcmdldD4KLSAKLSAgPHRhcmdldCBuYW1lPSJjb21waWxlLXJlZ2lzdHJ5IiBkZXBlbmRzPSJwcmVwYXJlIiAKKworICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtcmVnaXN0cnkiIGRlcGVuZHM9InByZXBhcmUiCiAgICAgICAgIGRlc2NyaXB0aW9uPSJDb21waWxlcyB0aGUgcmVnaXN0cnkgc291cmNlIGNvZGUiICA+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkNvbXBpbGluZyB0aGUgcmVnaXN0cnkgc291cmNlIGNvZGUuLi4uIi8+CiAgICAgICA8amF2YWMgc3JjZGlyPSIke3JlZ2lzdHJ5LnNyY30iIGRlc3RkaXI9IiR7YnVpbGR9L3JlZ2lzdHJ5Ij4KQEAgLTEzNywxMSArMTM3LDExIEBACiAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJjb21waWxlLmNsYXNzcGF0aCIgLz4KICAgICAgIDxjbGFzc3BhdGggcGF0aD0iJHtjb21tb259IiAvPgogICAgICAgPC9qYXZhYz4KLSAgICAgIDxjb3B5IGZpbGU9Ii4uL2NvbW1vbi9zcmMvJHtwYWNrYWdlLnBhdGh9L0NvZmZlZUJyZWFrLnByb3BlcnRpZXMiIAorICAgICAgPGNvcHkgZmlsZT0iLi4vY29tbW9uL3NyYy8ke3BhY2thZ2UucGF0aH0vQ29mZmVlQnJlYWsucHJvcGVydGllcyIKICAgICAgICAgdG9kaXI9IiR7YnVpbGR9L3JlZ2lzdHJ5LyR7cGFja2FnZS5wYXRofSIgLz4KICAgPC90YXJnZXQ+Ci0gIAotICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtY2xpZW50IiBkZXBlbmRzPSJwcmVwYXJlIiAKKworICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtY2xpZW50IiBkZXBlbmRzPSJwcmVwYXJlIgogICAgICAgICAgZGVzY3JpcHRpb249IkNvbXBpbGVzIHRoZSBjbGllbnQtc2lkZSBzb3VyY2UgY29kZSIgID4KICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkNvbXBpbGluZyB0aGUgY2xpZW50IHNvdXJjZSBjb2RlLi4uLiIvPgogICAgICAgIDxqYXZhYyBzcmNkaXI9IiR7Y2xpZW50LnNyY30iIGRlc3RkaXI9IiR7YnVpbGR9L2NsaWVudCI+CkBAIC0xNDksMTIgKzE0OSwxMiBAQAogICAgICAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJjb21waWxlLmNsYXNzcGF0aCIvPgogICAgICAgIDwvamF2YWM+CiAgIDwvdGFyZ2V0PgotICAKKwogIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT0gQ09QWSAmIFJFTU9WRSA9PT09PT09PT09PT09PT09PT09PT0gLS0+CiAKICAgPHRhcmdldCBuYW1lPSJjb3B5LWNvbW1vbi1zZXJ2aWNlIgogICAgICBkZXNjcmlwdGlvbj0iQ29waWVzIGNvbW1vbiBjbGFzcyBmaWxlcyB0byBidWlsZC9zZXJ2aWNlCi0gICAgICAgIGJlY2F1c2UgbXVsdGlwbGUgY2xhc3NwYXRocyBmb3IgYSB3c2NvbXBpbGUgY29tbWFuZCBydW4gCisgICAgICAgIGJlY2F1c2UgbXVsdGlwbGUgY2xhc3NwYXRocyBmb3IgYSB3c2NvbXBpbGUgY29tbWFuZCBydW4KICAgICAgICAgd2l0aGluIGFudCBkbyBub3Qgd29yay4iPgogICAgICA8ZWNobyBtZXNzYWdlPSJDb3B5aW5nIGNvbW1vbiBjbGFzc2VzLi4uLiIvPgogICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZH0vc2VydmVyLyR7cGFja2FnZS5wYXRofSI+CkBAIC0xNjYsMTEgKzE2NiwxMSBAQAogICAgICAgIGRlc2NyaXB0aW9uPSJDb3BpZXMgY29tbW9uIGNsYXNzIGZpbGVzIHRvIGJ1aWxkL2NsaWVudAogICAgICAgIGJ1dCBkb2Vzbid0IGNvcHkgYmVhbnMgYmVjYXVzZSB0aGV5IGFyZSBjcmVhdGVkIHcuIGdlbmVyYXRlLXN0dWJzLiI+CiAgICAgICAgPGVjaG8gbWVzc2FnZT0iQ29weWluZyBjb21tb24gY2xhc3Nlcy4uLi4iLz4KLSAgICAgICA8Y29weSBmaWxlPSIuLi9jb21tb24vYnVpbGQvJHtwYWNrYWdlLnBhdGh9L0RhdGVIZWxwZXIuY2xhc3MiIAorICAgICAgIDxjb3B5IGZpbGU9Ii4uL2NvbW1vbi9idWlsZC8ke3BhY2thZ2UucGF0aH0vRGF0ZUhlbHBlci5jbGFzcyIKICAgICAgICAgdG9kaXI9IiR7YnVpbGR9L2NsaWVudC8ke3BhY2thZ2UucGF0aH0iLz4KLSAgICA8L3RhcmdldD4gCi0gCi0gICAKKyAgICA8L3RhcmdldD4KKworCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09IFBBQ0tBR0UgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAKIApAQCAtMTgzLDcgKzE4Myw3IEBACiAgICAgICA8L2phcj4KICAgPC90YXJnZXQ+CiAKLSAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLXJlZ2lzdHJ5IiAKKyAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLXJlZ2lzdHJ5IgogICAgICAgZGVzY3JpcHRpb249IkJ1aWxkcyB0aGUgSkFSIGZpbGUgdGhhdCBjb250YWlucyB0aGUgcmVnaXN0cnkgcm91dGluZXMiPgogICAgICAgPGVjaG8gbWVzc2FnZT0iQnVpbGRpbmcgdGhlIHJlZ2lzdHJ5IEpBUiBmaWxlLi4uLiIvPgogICAgICAgPGNvcHkgZmlsZT0iJHtyZWdpc3RyeS5zcmN9L0NvZmZlZVJlZ2lzdHJ5LnByb3BlcnRpZXMiIHRvZGlyPSIke2J1aWxkfS9yZWdpc3RyeS8ke3BhY2thZ2UucGF0aH0iIC8+CkBAIC0xOTMsMzkgKzE5MywzOSBAQAogICAgICAgPC9qYXI+CiAgIDwvdGFyZ2V0PgogCi0gCisKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT0gUlVOID09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogCi0gIDx0YXJnZXQgbmFtZT0icnVuLXRlc3Qtb3JkZXIiIAorICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0LW9yZGVyIgogICAgICBkZXNjcmlwdGlvbj0iUnVucyBUZXN0T3JkZXJDYWxsZXIiPgogICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi10ZXN0LWNsaWVudCI+CiAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudC5jbGFzcyIgdmFsdWU9ImNvbS5zdW4uY2IuVGVzdE9yZGVyQ2FsbGVyIi8+CiAgICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKLSAgPHRhcmdldCBuYW1lPSJydW4tdGVzdC1wcmljZSIgCisgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QtcHJpY2UiCiAgICAgIGRlc2NyaXB0aW9uPSJSdW5zIFRlc3RQcmljZUZldGNoZXIiPgogICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi10ZXN0LWNsaWVudCI+CiAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudC5jbGFzcyIgdmFsdWU9ImNvbS5zdW4uY2IuVGVzdFByaWNlRmV0Y2hlciIvPgogICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCi0gIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QtY2xpZW50IiAKKyAgPHRhcmdldCBuYW1lPSJydW4tdGVzdC1jbGllbnQiCiAgICAgIGRlc2NyaXB0aW9uPSJSdW5zIGEgdGVzdCBKQVgtUlBDIGNsaWVudC4iPgotICAgICAgPGphdmEgCi0gICAgICAgICAgICBmb3JrPSJvbiIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9ImRpc3QvJHtjbGllbnQuamFyfSIgCisgICAgICA8amF2YQorICAgICAgICAgICAgZm9yaz0ib24iCisgICAgICAgICAgICBjbGFzc3BhdGg9ImRpc3QvJHtjbGllbnQuamFyfSIKICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtjbGllbnQuY2xhc3N9IiA+CiAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7ZW5kcG9pbnQtYWRkcmVzc30iIC8+Ci0gICAgICAJCSA8Y2xhc3NwYXRoIHJlZmlkPSJydW4uY2xhc3NwYXRoIiAvPgorICAgICAgICAgICAgICAgPGNsYXNzcGF0aCByZWZpZD0icnVuLmNsYXNzcGF0aCIgLz4KICAgICAgIDwvamF2YT4KICAgPC90YXJnZXQ+CiAKLSAgPHRhcmdldCBuYW1lPSJydW4tcmVnaXN0cnktcHVibGlzaCIgCisgIDx0YXJnZXQgbmFtZT0icnVuLXJlZ2lzdHJ5LXB1Ymxpc2giCiAgICAgIGRlc2NyaXB0aW9uPSJQdWJsaXNoZXMgYW4gb3JnYW5pemF0aW9uIGluIHRoZSByZWdpc3RyeSBzZXJ2ZXIuICBOb3RlOiBZb3UgbXVzdCBzdGFydCB0aGUgcmVnaXN0cnkgc2VydmVyIGJlZm9yZSBleGVjdXRpbmcgdGhpcyB0YXNrLiIgPgogICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIE9yZ1B1Ymxpc2hlci4iIC8+CiAgICAgIDxlY2hvIG1lc3NhZ2U9Ik5vdGU6IFJlbWVtYmVyIHRvIHN0YXJ0IHRoZSByZWdpc3RyeSBzZXJ2ZXIgYmVmb3JlIHJ1bm5pbmcgdGhpcyBwcm9ncmFtLiIgLz4KLSAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5zdW4uY2IuT3JnUHVibGlzaGVyIiAKKyAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5zdW4uY2IuT3JnUHVibGlzaGVyIgogICAgICAgZm9yaz0ieWVzIgogICAgICAgY2xhc3NwYXRoPSJkaXN0LyR7cmVnaXN0cnkuamFyfSIgPgogICAgICAgPGNsYXNzcGF0aCByZWZpZD0icnVuLmNsYXNzcGF0aCIgLz4KQEAgLTIzMywxMSArMjMzLDExIEBACiAgICAgPC9qYXZhPgogICA8L3RhcmdldD4KIAotICA8dGFyZ2V0IG5hbWU9InJ1bi1yZWdpc3RyeS1yZW1vdmUiIAorICA8dGFyZ2V0IG5hbWU9InJ1bi1yZWdpc3RyeS1yZW1vdmUiCiAgICAgIGRlc2NyaXB0aW9uPSJSZW1vdmVzIGFuIG9yZ2FuaXphdGlvbiBmcm9tIHRoZSByZWdpc3RyeS4gTm90ZTogWW91IG11c3Qgc3RhcnQgdGhlIHJlZ2lzdHJ5IHNlcnZlciBiZWZvcmUgZXhlY3V0aW5nIHRoaXMgdGFzay4iID4KICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyBPcmdSZW1vdmVyLiIgLz4KICAgICAgPGVjaG8gbWVzc2FnZT0iTm90ZTogUmVtZW1iZXIgdG8gc3RhcnQgdGhlIHJlZ2lzdHJ5IHNlcnZlciBiZWZvcmUgcnVubmluZyB0aGlzIHByb2dyYW0uIiAvPgotICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnN1bi5jYi5PcmdSZW1vdmVyIiAKKyAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5zdW4uY2IuT3JnUmVtb3ZlciIKICAgICAgIGZvcms9InllcyIKICAgICAgIGNsYXNzcGF0aD0iZGlzdC8ke3JlZ2lzdHJ5Lmphcn06JHtmb299IiA+CiAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJydW4uY2xhc3NwYXRoIiAvPgpAQCAtMjQ2LDI5ICsyNDYsMjkgQEAKICAgPC90YXJnZXQ+CiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT0gQlVJTEQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0gCi0gCi0gIAotICAgPHRhcmdldCBuYW1lPSJidWlsZC1zZXJ2aWNlIiAKKworCisKKyAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtc2VydmljZSIKICAgICAgICBkZXBlbmRzPSJjb21waWxlLXNlcnZpY2UsY29weS1jb21tb24tc2VydmljZSxnZW5lcmF0ZS13c2RsIgogICAgICAgIGRlc2NyaXB0aW9uPSJFeGVjdXRlcyB0aGUgdGFyZ2V0cyBuZWVkZWQgdG8gYnVpbGQgdGhlIHNlcnZpY2UuIj4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWNsaWVudCIgCisKKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWNsaWVudCIKICAgICAgICBkZXBlbmRzPSJnZW5lcmF0ZS1zdHVicyxjb3B5LWNvbW1vbi1jbGllbnQsY29tcGlsZS1jbGllbnQscGFja2FnZS1jbGllbnQiCiAgICAgICAgZGVzY3JpcHRpb249IkV4ZWN1dGVzIHRoZSB0YXJnZXRzIG5lZWRlZCB0byBidWlsZCB0aGUgY2xpZW50IGZpbGVzLiI+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJidWlsZC1yZWdpc3RyeSIgCisKKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXJlZ2lzdHJ5IgogICAgICAgICBkZXBlbmRzPSJjb21waWxlLXJlZ2lzdHJ5LHBhY2thZ2UtcmVnaXN0cnkiCiAgICAgICAgIGRlc2NyaXB0aW9uPSJFeGVjdXRlcyB0aGUgdGFyZ2V0cyBuZWVkZWQgdG8gYnVpbGQgdGhlIHJlZ2lzdHJ5IEpBUi4iPgogICAgIDwvdGFyZ2V0PgogCi0gIAorCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09IFVUSUwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAKIAotICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiAKKyAgPHRhcmdldCBuYW1lPSJjbGVhbiIKICAgICAgZGVzY3JpcHRpb249IlJlbW92ZXMgdGhlIGJ1aWxkIGFuZCBkaXN0IGRpcmVjdG9yeSI+CiAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGR9IiAvPgogICAgIDxkZWxldGUgZGlyPSJkaXN0IiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9jb25mL2NsaWVudC1zdGFydC13c2RsLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvY29uZi9jbGllbnQtc3RhcnQtd3NkbC54bWwKaW5kZXggZDEzNzc5Yi4uNzg5MjZmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9jb25mL2NsaWVudC1zdGFydC13c2RsLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL2NvbmYvY2xpZW50LXN0YXJ0LXdzZGwueG1sCkBAIC0xOCw3ICsxOCw3IEBACiAtLT4KIAogPGNvbmZpZ3VyYXRpb24KLSAJeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KICAgPHdzZGwgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9qYXhycGMtY29mZmVlLXN1cHBsaWVyL2pheHJwYz9XU0RMIgogICAgICAgIHBhY2thZ2VOYW1lPSJjb20uc3VuLmNiIi8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL2NvbmYvc2VydmVyLXN0YXJ0LXdzZGwueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9jb25mL3NlcnZlci1zdGFydC13c2RsLnhtbAppbmRleCAzMTFmZGM2Li43ODQyNzk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL2NvbmYvc2VydmVyLXN0YXJ0LXdzZGwueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvY29uZi9zZXJ2ZXItc3RhcnQtd3NkbC54bWwKQEAgLTE4LDcgKzE4LDcgQEAKIC0tPgogCiA8Y29uZmlndXJhdGlvbgotIAl4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgogICA8d3NkbCBsb2NhdGlvbj0iYnVpbGQvU3VwcGxpZXIud3NkbCIKICAgICAgICBwYWNrYWdlTmFtZT0iY29tLnN1bi5jYiIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9jb25mL3N0YXJ0LWludGVyZmFjZS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL2NvbmYvc3RhcnQtaW50ZXJmYWNlLnhtbAppbmRleCA2YzA0NWM4Li4zYzNkNjkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL2NvbmYvc3RhcnQtaW50ZXJmYWNlLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL2NvbmYvc3RhcnQtaW50ZXJmYWNlLnhtbApAQCAtMTksMTAgKzE5LDEwIEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDxzZXJ2aWNlIAotICAgICAgbmFtZT0iU3VwcGxpZXIiIAotICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46Rm9vIiAKLSAgICAgIHR5cGVOYW1lc3BhY2U9InVybjpGb28iIAorICA8c2VydmljZQorICAgICAgbmFtZT0iU3VwcGxpZXIiCisgICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpGb28iCisgICAgICB0eXBlTmFtZXNwYWNlPSJ1cm46Rm9vIgogICAgICAgcGFja2FnZU5hbWU9ImNvbS5zdW4uY2IiPgogICAgICAgPGludGVyZmFjZSBuYW1lPSJjb20uc3VuLmNiLlN1cHBsaWVySUYiLz4KICAgICAgIDx0eXBlTWFwcGluZ1JlZ2lzdHJ5PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9jb25maWctaW50ZXJmYWNlLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvY29uZmlnLWludGVyZmFjZS54bWwKaW5kZXggNmMwNDVjOC4uM2MzZDY5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9jb25maWctaW50ZXJmYWNlLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL2NvbmZpZy1pbnRlcmZhY2UueG1sCkBAIC0xOSwxMCArMTksMTAgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHNlcnZpY2UgCi0gICAgICBuYW1lPSJTdXBwbGllciIgCi0gICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpGb28iIAotICAgICAgdHlwZU5hbWVzcGFjZT0idXJuOkZvbyIgCisgIDxzZXJ2aWNlCisgICAgICBuYW1lPSJTdXBwbGllciIKKyAgICAgIHRhcmdldE5hbWVzcGFjZT0idXJuOkZvbyIKKyAgICAgIHR5cGVOYW1lc3BhY2U9InVybjpGb28iCiAgICAgICBwYWNrYWdlTmFtZT0iY29tLnN1bi5jYiI+CiAgICAgICA8aW50ZXJmYWNlIG5hbWU9ImNvbS5zdW4uY2IuU3VwcGxpZXJJRiIvPgogICAgICAgPHR5cGVNYXBwaW5nUmVnaXN0cnk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL2NvbmZpZy13c2RsLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvY29uZmlnLXdzZGwueG1sCmluZGV4IGQxMzc3OWIuLjc4OTI2ZmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvY29uZmlnLXdzZGwueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvY29uZmlnLXdzZGwueG1sCkBAIC0xOCw3ICsxOCw3IEBACiAtLT4KIAogPGNvbmZpZ3VyYXRpb24KLSAJeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KICAgPHdzZGwgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9qYXhycGMtY29mZmVlLXN1cHBsaWVyL2pheHJwYz9XU0RMIgogICAgICAgIHBhY2thZ2VOYW1lPSJjb20uc3VuLmNiIi8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9jbGllbnQvY29tL3N1bi9jYi9PcmRlckNhbGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvY2xpZW50L2NvbS9zdW4vY2IvT3JkZXJDYWxsZXIuamF2YQppbmRleCAzMTlhN2ZjLi5hOGIwNzcyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9jbGllbnQvY29tL3N1bi9jYi9PcmRlckNhbGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL2NsaWVudC9jb20vc3VuL2NiL09yZGVyQ2FsbGVyLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKICAgICBwdWJsaWMgT3JkZXJDYWxsZXIoU3RyaW5nIGVuZHBvaW50KSB7CiAKICAgICAgICAgdHJ5IHsKLQkJICAgIFN0dWIgc3R1YiA9IChTdHViKShuZXcgU3VwcGxpZXJfSW1wbCgpLmdldFN1cHBsaWVySUZQb3J0KCkpOworICAgICAgICAgICAgU3R1YiBzdHViID0gKFN0dWIpKG5ldyBTdXBwbGllcl9JbXBsKCkuZ2V0U3VwcGxpZXJJRlBvcnQoKSk7CiAgICAgICAgICAgICAvL3N0dWIgPSAoU3VwcGxpZXJJRl9TdHViKShuZXcgU3VwcGxpZXJfSW1wbCgpLmdldFN1cHBsaWVySUZQb3J0KCkpOwogICAgICAgICAgICAgc3R1Yi5fc2V0UHJvcGVydHkoCiAgICAgICAgICAgICAgICAgamF2YXgueG1sLnJwYy5TdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9jbGllbnQvY29tL3N1bi9jYi9QcmljZUZldGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL2NsaWVudC9jb20vc3VuL2NiL1ByaWNlRmV0Y2hlci5qYXZhCmluZGV4IGI5NjdlZGUuLjdmYzcxMTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL2NsaWVudC9jb20vc3VuL2NiL1ByaWNlRmV0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL2NsaWVudC9jb20vc3VuL2NiL1ByaWNlRmV0Y2hlci5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBQcmljZUxpc3RCZWFuIGdldFByaWNlTGlzdChTdHJpbmcgZW5kcG9pbnQpIHsKIAogICAgICAgICBQcmljZUxpc3RCZWFuIHJlc3VsdCA9IG51bGw7Ci0gICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN1cHBsaWVySUZfU3R1YiBzdHViID0KICAgICAgICAgICAgICAgICAoU3VwcGxpZXJJRl9TdHViKShuZXcgU3VwcGxpZXJfSW1wbCgpLmdldFN1cHBsaWVySUZQb3J0KCkpOwpAQCAtMzIsOSArMzIsOSBAQAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgCisKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIH0gLy8gZ2V0UHJpY2VMaXN0ICAgIAorICAgIH0gLy8gZ2V0UHJpY2VMaXN0CiAKIH0gLy8gY2xhc3MKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL2NsaWVudC9jb20vc3VuL2NiL1Rlc3RPcmRlckNhbGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvY2xpZW50L2NvbS9zdW4vY2IvVGVzdE9yZGVyQ2FsbGVyLmphdmEKaW5kZXggZWVmZjNiZS4uZjU2NWQwOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvY2xpZW50L2NvbS9zdW4vY2IvVGVzdE9yZGVyQ2FsbGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvY2xpZW50L2NvbS9zdW4vY2IvVGVzdE9yZGVyQ2FsbGVyLmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgICAgIExpbmVJdGVtQmVhbiBpdGVtQyA9IG5ldyBMaW5lSXRlbUJlYW4oIndha2V1cCBjYWxsIiwgbmV3IEJpZ0RlY2ltYWwoIjAuNSIpLCBuZXcgQmlnRGVjaW1hbCgiMTAuMDAiKSk7CiAgICAgICAgICAgICBMaW5lSXRlbUJlYW5bXSBsaW5lSXRlbXMgPSB7aXRlbUEsIGl0ZW1CLCBpdGVtQ307CiAKLSAgICAgICAgICAgIE9yZGVyQmVhbiBvcmRlciA9IG5ldyBPcmRlckJlYW4oYWRkcmVzcywgY3VzdG9tZXIsICIxMjMiLCBsaW5lSXRlbXMsIAorICAgICAgICAgICAgT3JkZXJCZWFuIG9yZGVyID0gbmV3IE9yZGVyQmVhbihhZGRyZXNzLCBjdXN0b21lciwgIjEyMyIsIGxpbmVJdGVtcywKICAgICAgICAgICAgICAgICBuZXcgQmlnRGVjaW1hbCgiNTUuNjciKSk7CiAKICAgICAgICAgICAgIE9yZGVyQ2FsbGVyIG9jID0gbmV3IE9yZGVyQ2FsbGVyKGFyZ3NbMF0pOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvY2xpZW50L2NvbS9zdW4vY2IvVGVzdFByaWNlRmV0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvY2xpZW50L2NvbS9zdW4vY2IvVGVzdFByaWNlRmV0Y2hlci5qYXZhCmluZGV4IDAxZWQyYWIuLmQ1MjNmNTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL2NsaWVudC9jb20vc3VuL2NiL1Rlc3RQcmljZUZldGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9jbGllbnQvY29tL3N1bi9jYi9UZXN0UHJpY2VGZXRjaGVyLmphdmEKQEAgLTQwLDUgKzQwLDUgQEAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgIH0gICAgCisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvcmVnaXN0cnkvY29tL3N1bi9jYi9KQVhSUHVibGlzaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9yZWdpc3RyeS9jb20vc3VuL2NiL0pBWFJQdWJsaXNoZXIuamF2YQppbmRleCAwZGUzOWI2Li5iMzljYzlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9yZWdpc3RyeS9jb20vc3VuL2NiL0pBWFJQdWJsaXNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9yZWdpc3RyeS9jb20vc3VuL2NiL0pBWFJQdWJsaXNoZXIuamF2YQpAQCAtMzksOCArMzksOCBAQAogICAgIC8qKgogICAgICAqIEVzdGFibGlzaGVzIGEgY29ubmVjdGlvbiB0byBhIHJlZ2lzdHJ5LgogICAgICAqCi0gICAgICogQHBhcmFtIHF1ZXJ5VXJsCXRoZSBVUkwgb2YgdGhlIHF1ZXJ5IHJlZ2lzdHJ5Ci0gICAgICogQHBhcmFtIHB1Ymxpc2hVcmwJdGhlIFVSTCBvZiB0aGUgcHVibGlzaCByZWdpc3RyeQorICAgICAqIEBwYXJhbSBxdWVyeVVybCAgICB0aGUgVVJMIG9mIHRoZSBxdWVyeSByZWdpc3RyeQorICAgICAqIEBwYXJhbSBwdWJsaXNoVXJsICAgIHRoZSBVUkwgb2YgdGhlIHB1Ymxpc2ggcmVnaXN0cnkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBtYWtlQ29ubmVjdGlvbihTdHJpbmcgcXVlcnlVcmwsCiAgICAgICAgIFN0cmluZyBwdWJsaXNoVXJsKSB7CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGNvbm5lY3Rpb24sIHBhc3NpbmcgaXQgdGhlCiAgICAgICAgICAgICAvLyBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMKICAgICAgICAgICAgIGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIGZhY3RvcnkgPSAoQ29ubmVjdGlvbkZhY3RvcnkpIAorICAgICAgICAgICAgZmFjdG9yeSA9IChDb25uZWN0aW9uRmFjdG9yeSkKICAgICAgICAgICAgICAgICBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvSkFYUiIpOwogICAgICAgICAgICAgZmFjdG9yeS5zZXRQcm9wZXJ0aWVzKHByb3BzKTsKICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBmYWN0b3J5LmNyZWF0ZUNvbm5lY3Rpb24oKTsKQEAgLTE3MSw3ICsxNzEsNyBAQAogICAgICAgICAgICAgaXMgPSBibGNtLmNyZWF0ZUludGVybmF0aW9uYWxTdHJpbmcKICAgICAgICAgICAgICAgICAoYnVuZGxlLmdldFN0cmluZygic2VydmljZS5iaW5kaW5nIikpOwogICAgICAgICAgICAgYmluZGluZy5zZXREZXNjcmlwdGlvbihpcyk7Ci0gCQkJCQkgIGJpbmRpbmcuc2V0VmFsaWRhdGVVUkkoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nLnNldFZhbGlkYXRlVVJJKGZhbHNlKTsKICAgICAgICAgICAgIGJpbmRpbmcuc2V0QWNjZXNzVVJJKGVuZHBvaW50KTsKICAgICAgICAgICAgIHNlcnZpY2VCaW5kaW5ncy5hZGQoYmluZGluZyk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL3JlZ2lzdHJ5L2NvbS9zdW4vY2IvSkFYUlJlbW92ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL3JlZ2lzdHJ5L2NvbS9zdW4vY2IvSkFYUlJlbW92ZXIuamF2YQppbmRleCBmMTQxODRkLi45NDBlMDEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9yZWdpc3RyeS9jb20vc3VuL2NiL0pBWFJSZW1vdmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvcmVnaXN0cnkvY29tL3N1bi9jYi9KQVhSUmVtb3Zlci5qYXZhCkBAIC0xNiw4ICsxNiw4IEBACiAKIHBhY2thZ2UgY29tLnN1bi5jYjsKIAotaW1wb3J0IGphdmF4LnhtbC5yZWdpc3RyeS4qOyAKLWltcG9ydCBqYXZheC54bWwucmVnaXN0cnkuaW5mb21vZGVsLio7IAoraW1wb3J0IGphdmF4LnhtbC5yZWdpc3RyeS4qOworaW1wb3J0IGphdmF4LnhtbC5yZWdpc3RyeS5pbmZvbW9kZWwuKjsKIGltcG9ydCBqYXZhLm5ldC4qOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuKjsKIGltcG9ydCBqYXZhLnV0aWwuKjsKQEAgLTI1LDggKzI1LDggQEAKIAogLyoqCiAgKiBUaGUgSkFYUlJlbW92ZXIgY2xhc3MgY29uc2lzdHMgb2YgYSBtYWtlQ29ubmVjdGlvbiBtZXRob2QsCi0gKiBhIGNyZWF0ZU9yZ0tleSBtZXRob2QsIGFuZCBhbiBleGVjdXRlUmVtb3ZlIG1ldGhvZC4gSXQgCi0gKiBmaW5kcyBhbmQgZGVsZXRlcyB0aGUgb3JnYW5pemF0aW9uIHRoYXQgdGhlIE9yZ1B1Ymxpc2hlciAKKyAqIGEgY3JlYXRlT3JnS2V5IG1ldGhvZCwgYW5kIGFuIGV4ZWN1dGVSZW1vdmUgbWV0aG9kLiBJdAorICogZmluZHMgYW5kIGRlbGV0ZXMgdGhlIG9yZ2FuaXphdGlvbiB0aGF0IHRoZSBPcmdQdWJsaXNoZXIKICAqIGNsYXNzIGNyZWF0ZWQuCiAgKi8KIHB1YmxpYyBjbGFzcyBKQVhSUmVtb3ZlciB7CkBAIC0zNSwzNCArMzUsMzQgQEAKICAgICBSZWdpc3RyeVNlcnZpY2UgcnMgPSBudWxsOwogCiAgICAgcHVibGljIEpBWFJSZW1vdmVyKCkge30KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVzdGFibGlzaGVzIGEgY29ubmVjdGlvbiB0byBhIHJlZ2lzdHJ5LgogICAgICAqCi0gICAgICogQHBhcmFtIHF1ZXJ5VXJsCXRoZSBVUkwgb2YgdGhlIHF1ZXJ5IHJlZ2lzdHJ5Ci0gICAgICogQHBhcmFtIHB1Ymxpc2hVcmwJdGhlIFVSTCBvZiB0aGUgcHVibGlzaCByZWdpc3RyeQorICAgICAqIEBwYXJhbSBxdWVyeVVybCAgICB0aGUgVVJMIG9mIHRoZSBxdWVyeSByZWdpc3RyeQorICAgICAqIEBwYXJhbSBwdWJsaXNoVXJsICAgIHRoZSBVUkwgb2YgdGhlIHB1Ymxpc2ggcmVnaXN0cnkKICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBtYWtlQ29ubmVjdGlvbihTdHJpbmcgcXVlcnlVcmwsIAorICAgIHB1YmxpYyB2b2lkIG1ha2VDb25uZWN0aW9uKFN0cmluZyBxdWVyeVVybCwKICAgICAgICAgU3RyaW5nIHB1Ymxpc2hVcmwpIHsKIAogICAgICAgICBDb250ZXh0ICAgICAgICAgICBjb250ZXh0ID0gbnVsbDsKICAgICAgICAgQ29ubmVjdGlvbkZhY3RvcnkgZmFjdG9yeSA9IG51bGw7CiAgICAgICAgIC8qCi0gICAgICAgICAqIERlZmluZSBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcy4gCi0gICAgICAgICAqIFRvIGRlbGV0ZSwgeW91IG5lZWQgYm90aCB0aGUgcXVlcnkgVVJMIGFuZCB0aGUgCisgICAgICAgICAqIERlZmluZSBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcy4KKyAgICAgICAgICogVG8gZGVsZXRlLCB5b3UgbmVlZCBib3RoIHRoZSBxdWVyeSBVUkwgYW5kIHRoZQogICAgICAgICAgKiBwdWJsaXNoIFVSTC4KICAgICAgICAgICovCiAgICAgICAgIFByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOwogICAgICAgICBwcm9wcy5zZXRQcm9wZXJ0eSgiamF2YXgueG1sLnJlZ2lzdHJ5LnF1ZXJ5TWFuYWdlclVSTCIsCiAgICAgICAgICAgICBxdWVyeVVybCk7Ci0gICAgICAgIHByb3BzLnNldFByb3BlcnR5KCJqYXZheC54bWwucmVnaXN0cnkubGlmZUN5Y2xlTWFuYWdlclVSTCIsIAorICAgICAgICBwcm9wcy5zZXRQcm9wZXJ0eSgiamF2YXgueG1sLnJlZ2lzdHJ5LmxpZmVDeWNsZU1hbmFnZXJVUkwiLAogICAgICAgICAgICAgcHVibGlzaFVybCk7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgY29ubmVjdGlvbiwgcGFzc2luZyBpdCB0aGUgCisgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGNvbm5lY3Rpb24sIHBhc3NpbmcgaXQgdGhlCiAgICAgICAgICAgICAvLyBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMKICAgICAgICAgICAgIGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIGZhY3RvcnkgPSAoQ29ubmVjdGlvbkZhY3RvcnkpIAorICAgICAgICAgICAgZmFjdG9yeSA9IChDb25uZWN0aW9uRmFjdG9yeSkKICAgICAgICAgICAgICAgICBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvSkFYUiIpOwogICAgICAgICAgICAgZmFjdG9yeS5zZXRQcm9wZXJ0aWVzKHByb3BzKTsKICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBmYWN0b3J5LmNyZWF0ZUNvbm5lY3Rpb24oKTsKQEAgLTgyLDkgKzgyLDkgQEAKICAgICAgKiBwcm9ncmFtLCB2ZXJpZnlpbmcgaXQgYnkgY2hlY2tpbmcgdGhhdCB0aGUga2V5IHN0cmluZ3MKICAgICAgKiBtYXRjaC4KICAgICAgKgotICAgICAqIEBwYXJhbSBrZXlTdHIJdGhlIGtleSBvZiB0aGUgcHVibGlzaGVkIG9yZ2FuaXphdGlvbgorICAgICAqIEBwYXJhbSBrZXlTdHIgICAgdGhlIGtleSBvZiB0aGUgcHVibGlzaGVkIG9yZ2FuaXphdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgl0aGUga2V5IG9mIHRoZSBvcmdhbml6YXRpb24gZm91bmQKKyAgICAgKiBAcmV0dXJuICAgIHRoZSBrZXkgb2YgdGhlIG9yZ2FuaXphdGlvbiBmb3VuZAogICAgICAqLwogICAgIHB1YmxpYyBqYXZheC54bWwucmVnaXN0cnkuaW5mb21vZGVsLktleSBjcmVhdGVPcmdLZXkoU3RyaW5nIGtleVN0cikgewogCkBAIC05Niw3ICs5Niw3IEBACiAgICAgICAgICAgICBibGNtID0gcnMuZ2V0QnVzaW5lc3NMaWZlQ3ljbGVNYW5hZ2VyKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCByZWdpc3RyeSBzZXJ2aWNlIGFuZCAiICsKICAgICAgICAgICAgICAgICAibGlmZSBjeWNsZSBtYW5hZ2VyIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgb3JnS2V5ID0gYmxjbS5jcmVhdGVLZXkoa2V5U3RyKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0xMTQsMTkgKzExNCwxOSBAQAogICAgIC8qKgogICAgICAqIFJlbW92ZXMgdGhlIG9yZ2FuaXphdGlvbiB3aXRoIHRoZSBzcGVjaWZpZWQga2V5IHZhbHVlLgogICAgICAqCi0gICAgICogQHBhcmFtIGtleQl0aGUgS2V5IG9mIHRoZSBvcmdhbml6YXRpb24KKyAgICAgKiBAcGFyYW0ga2V5ICAgIHRoZSBLZXkgb2YgdGhlIG9yZ2FuaXphdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGV4ZWN1dGVSZW1vdmUoamF2YXgueG1sLnJlZ2lzdHJ5LmluZm9tb2RlbC5LZXkga2V5LAogICAgICAgICBTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCkgewogCiAgICAgICAgIEJ1c2luZXNzTGlmZUN5Y2xlTWFuYWdlciBibGNtID0gbnVsbDsKLSAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgYmxjbSA9IHJzLmdldEJ1c2luZXNzTGlmZUN5Y2xlTWFuYWdlcigpOwogCiAgICAgICAgICAgICAvLyBHZXQgYXV0aG9yaXphdGlvbiBmcm9tIHRoZSByZWdpc3RyeQogICAgICAgICAgICAgUGFzc3dvcmRBdXRoZW50aWNhdGlvbiBwYXNzd2RBdXRoID0KLSAgICAgICAgICAgICAgICBuZXcgUGFzc3dvcmRBdXRoZW50aWNhdGlvbih1c2VybmFtZSwgCisgICAgICAgICAgICAgICAgbmV3IFBhc3N3b3JkQXV0aGVudGljYXRpb24odXNlcm5hbWUsCiAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkLnRvQ2hhckFycmF5KCkpOwogCiAgICAgICAgICAgICBTZXQgY3JlZHMgPSBuZXcgSGFzaFNldCgpOwpAQCAtMTU1LDcgKzE1NSw3IEBACiAgICAgICAgICAgICAgICAgRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7CiAgICAgICAgICAgICAgICAgd2hpbGUgKGV4Y0l0ZXIuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbiA9IChFeGNlcHRpb24pIGV4Y0l0ZXIubmV4dCgpOwotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkV4Y2VwdGlvbiBvbiBkZWxldGU6ICIgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFeGNlcHRpb24gb24gZGVsZXRlOiAiICsKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL3JlZ2lzdHJ5L2NvbS9zdW4vY2IvT3JnUHVibGlzaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9yZWdpc3RyeS9jb20vc3VuL2NiL09yZ1B1Ymxpc2hlci5qYXZhCmluZGV4IGY0ZTQ5YjAuLjEwMjRmZDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL3JlZ2lzdHJ5L2NvbS9zdW4vY2IvT3JnUHVibGlzaGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvcmVnaXN0cnkvY29tL3N1bi9jYi9PcmdQdWJsaXNoZXIuamF2YQpAQCAtMTYsNyArMTYsNyBAQAogCiBwYWNrYWdlIGNvbS5zdW4uY2I7CiAKLWltcG9ydCBqYXZheC54bWwucmVnaXN0cnkuKjsgCitpbXBvcnQgamF2YXgueG1sLnJlZ2lzdHJ5Lio7CiBpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwogaW1wb3J0IGphdmEuaW8uKjsKIApAQCAtMzEsMTUgKzMxLDE1IEBACiAgICAgICAgIFJlc291cmNlQnVuZGxlIHJlZ2lzdHJ5QnVuZGxlID0KICAgICAgICAgICAgUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJjb20uc3VuLmNiLkNvZmZlZVJlZ2lzdHJ5Iik7CiAKLSAgICAgICAgU3RyaW5nIHVzZXJuYW1lID0gCisgICAgICAgIFN0cmluZyB1c2VybmFtZSA9CiAgICAgICAgICAgICByZWdpc3RyeUJ1bmRsZS5nZXRTdHJpbmcoInJlZ2lzdHJ5LnVzZXJuYW1lIik7Ci0gICAgICAgIFN0cmluZyBwYXNzd29yZCA9IAorICAgICAgICBTdHJpbmcgcGFzc3dvcmQgPQogICAgICAgICAgICAgcmVnaXN0cnlCdW5kbGUuZ2V0U3RyaW5nKCJyZWdpc3RyeS5wYXNzd29yZCIpOwogICAgICAgICBTdHJpbmcga2V5RmlsZSA9IHJlZ2lzdHJ5QnVuZGxlLmdldFN0cmluZygia2V5LmZpbGUiKTsKIAogICAgICAgICBKQVhSUHVibGlzaGVyIHB1Ymxpc2hlciA9IG5ldyBKQVhSUHVibGlzaGVyKCk7CiAgICAgICAgIHB1Ymxpc2hlci5tYWtlQ29ubmVjdGlvbihxdWVyeVVSTCwgcHVibGlzaFVSTCk7Ci0gICAgICAgIFN0cmluZyBrZXkgPSBwdWJsaXNoZXIuZXhlY3V0ZVB1Ymxpc2godXNlcm5hbWUsIAorICAgICAgICBTdHJpbmcga2V5ID0gcHVibGlzaGVyLmV4ZWN1dGVQdWJsaXNoKHVzZXJuYW1lLAogICAgICAgICAgICAgcGFzc3dvcmQsIGVuZHBvaW50KTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEZpbGVXcml0ZXIgb3V0ID0gbmV3IEZpbGVXcml0ZXIoa2V5RmlsZSk7CkBAIC01MCw1ICs1MCw1IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvcmVnaXN0cnkvY29tL3N1bi9jYi9PcmdSZW1vdmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9yZWdpc3RyeS9jb20vc3VuL2NiL09yZ1JlbW92ZXIuamF2YQppbmRleCAwZTA2NjRmLi5mYmQ4NzcxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9yZWdpc3RyeS9jb20vc3VuL2NiL09yZ1JlbW92ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9yZWdpc3RyeS9jb20vc3VuL2NiL09yZ1JlbW92ZXIuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20uc3VuLmNiOwogCiBpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotaW1wb3J0IGphdmF4LnhtbC5yZWdpc3RyeS4qOyAKK2ltcG9ydCBqYXZheC54bWwucmVnaXN0cnkuKjsKIGltcG9ydCBqYXZheC54bWwucmVnaXN0cnkuaW5mb21vZGVsLktleTsKIGltcG9ydCBqYXZhLmlvLio7CiAKQEAgLTM1LDkgKzM1LDkgQEAKICAgICAgICAgUmVzb3VyY2VCdW5kbGUgcmVnaXN0cnlCdW5kbGUgPQogICAgICAgICAgICAgUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJjb20uc3VuLmNiLkNvZmZlZVJlZ2lzdHJ5Iik7CiAKLSAgICAgICAgU3RyaW5nIHVzZXJuYW1lID0gCisgICAgICAgIFN0cmluZyB1c2VybmFtZSA9CiAgICAgICAgICAgICByZWdpc3RyeUJ1bmRsZS5nZXRTdHJpbmcoInJlZ2lzdHJ5LnVzZXJuYW1lIik7Ci0gICAgICAgIFN0cmluZyBwYXNzd29yZCA9IAorICAgICAgICBTdHJpbmcgcGFzc3dvcmQgPQogICAgICAgICAgICAgcmVnaXN0cnlCdW5kbGUuZ2V0U3RyaW5nKCJyZWdpc3RyeS5wYXNzd29yZCIpOwogICAgICAgICBTdHJpbmcga2V5RmlsZSA9IHJlZ2lzdHJ5QnVuZGxlLmdldFN0cmluZygia2V5LmZpbGUiKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvc2VydmVyL2NvbS9zdW4vY2IvQ29udGV4dExpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9zZXJ2ZXIvY29tL3N1bi9jYi9Db250ZXh0TGlzdGVuZXIuamF2YQppbmRleCAzNzFlZTQzLi42YmZjYmU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9zZXJ2ZXIvY29tL3N1bi9jYi9Db250ZXh0TGlzdGVuZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9zZXJ2ZXIvY29tL3N1bi9jYi9Db250ZXh0TGlzdGVuZXIuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20uc3VuLmNiOwogCiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7Ci1pbXBvcnQgamF2YXgueG1sLnJlZ2lzdHJ5Lio7IAoraW1wb3J0IGphdmF4LnhtbC5yZWdpc3RyeS4qOwogaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKIGltcG9ydCBqYXZhLmlvLio7CiAKQEAgLTMyLDE1ICszMiwxNSBAQAogICAgICAgICBSZXNvdXJjZUJ1bmRsZSByZWdpc3RyeUJ1bmRsZSA9CiAgICAgICAgICAgIFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgiY29tLnN1bi5jYi5Db2ZmZWVSZWdpc3RyeSIpOwogCi0gICAgICAgIFN0cmluZyB1c2VybmFtZSA9IAorICAgICAgICBTdHJpbmcgdXNlcm5hbWUgPQogICAgICAgICAgICAgcmVnaXN0cnlCdW5kbGUuZ2V0U3RyaW5nKCJyZWdpc3RyeS51c2VybmFtZSIpOwotICAgICAgICBTdHJpbmcgcGFzc3dvcmQgPSAKKyAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0KICAgICAgICAgICAgIHJlZ2lzdHJ5QnVuZGxlLmdldFN0cmluZygicmVnaXN0cnkucGFzc3dvcmQiKTsKICAgICAgICAgU3RyaW5nIGtleUZpbGUgPSByZWdpc3RyeUJ1bmRsZS5nZXRTdHJpbmcoImtleS5maWxlIik7CiAKICAgICAgICAgSkFYUlB1Ymxpc2hlciBwdWJsaXNoZXIgPSBuZXcgSkFYUlB1Ymxpc2hlcigpOwogICAgICAgICBwdWJsaXNoZXIubWFrZUNvbm5lY3Rpb24ocXVlcnlVUkwsIHB1Ymxpc2hVUkwpOwotICAgICAgICBTdHJpbmcga2V5ID0gcHVibGlzaGVyLmV4ZWN1dGVQdWJsaXNoKHVzZXJuYW1lLCAKKyAgICAgICAgU3RyaW5nIGtleSA9IHB1Ymxpc2hlci5leGVjdXRlUHVibGlzaCh1c2VybmFtZSwKICAgICAgICAgICAgIHBhc3N3b3JkLCBlbmRwb2ludCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBGaWxlV3JpdGVyIG91dCA9IG5ldyBGaWxlV3JpdGVyKGtleUZpbGUpOwpAQCAtNDksOSArNDksOSBAQAogICAgICAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZXguZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgfSAgICAgCisgICAgICAgIH0KICAgICB9Ci0gICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNvbnRleHREZXN0cm95ZWQoU2VydmxldENvbnRleHRFdmVudCBldmVudCkgewogICAgICAgICBTdHJpbmcga2V5U3RyID0gbnVsbDsKIApAQCAtNjEsOSArNjEsOSBAQAogICAgICAgICBSZXNvdXJjZUJ1bmRsZSByZWdpc3RyeUJ1bmRsZSA9CiAgICAgICAgICAgICBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoImNvbS5zdW4uY2IuQ29mZmVlUmVnaXN0cnkiKTsKIAotICAgICAgICBTdHJpbmcgdXNlcm5hbWUgPSAKKyAgICAgICAgU3RyaW5nIHVzZXJuYW1lID0KICAgICAgICAgICAgIHJlZ2lzdHJ5QnVuZGxlLmdldFN0cmluZygicmVnaXN0cnkudXNlcm5hbWUiKTsKLSAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0gCisgICAgICAgIFN0cmluZyBwYXNzd29yZCA9CiAgICAgICAgICAgICByZWdpc3RyeUJ1bmRsZS5nZXRTdHJpbmcoInJlZ2lzdHJ5LnBhc3N3b3JkIik7CiAgICAgICAgIFN0cmluZyBrZXlGaWxlID0gcmVnaXN0cnlCdW5kbGUuZ2V0U3RyaW5nKCJrZXkuZmlsZSIpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9zZXJ2ZXIvY29tL3N1bi9jYi9QcmljZUxvYWRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvc2VydmVyL2NvbS9zdW4vY2IvUHJpY2VMb2FkZXIuamF2YQppbmRleCAyNzU5MzlhLi4yNTJjYmVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9zZXJ2ZXIvY29tL3N1bi9jYi9QcmljZUxvYWRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL3NlcnZlci9jb20vc3VuL2NiL1ByaWNlTG9hZGVyLmphdmEKQEAgLTI0LDkgKzI0LDkgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUHJpY2VJdGVtQmVhbltdIGxvYWRJdGVtcyhTdHJpbmcgcHJvcHNOYW1lKSB7CiAKLSAgICAgICBSZXNvdXJjZUJ1bmRsZSBwcmljZUJ1bmRsZSA9IAorICAgICAgIFJlc291cmNlQnVuZGxlIHByaWNlQnVuZGxlID0KICAgICAgICAgICAgUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKHByb3BzTmFtZSk7Ci0gIAorCiAgICAgICAgRW51bWVyYXRpb24gYnVuZGxlS2V5cyA9IHByaWNlQnVuZGxlLmdldEtleXMoKTsKICAgICAgICBBcnJheUxpc3Qga2V5TGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKIApAQCAtMzQsMTQgKzM0LDE0IEBACiAgICAgICAgICAgIFN0cmluZyBrZXkgPSAoU3RyaW5nKWJ1bmRsZUtleXMubmV4dEVsZW1lbnQoKTsKICAgICAgICAgICAgU3RyaW5nIHZhbHVlICA9IHByaWNlQnVuZGxlLmdldFN0cmluZyhrZXkpOwogICAgICAgICAgICBrZXlMaXN0LmFkZCh2YWx1ZSk7Ci0gICAgICAgfSAKKyAgICAgICB9CiAKLSAgICAgICBQcmljZUl0ZW1CZWFuW10gaXRlbXMgPSAKKyAgICAgICBQcmljZUl0ZW1CZWFuW10gaXRlbXMgPQogICAgICAgICAgICAoUHJpY2VJdGVtQmVhbltdKUFycmF5Lm5ld0luc3RhbmNlKFByaWNlSXRlbUJlYW4uY2xhc3MsIGtleUxpc3Quc2l6ZSgpKTsKICAgICAgICBpbnQgayA9IDA7CiAgICAgICAgZm9yIChJdGVyYXRvciBpdD1rZXlMaXN0Lml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTsgKSB7CiAgICAgICAgICAgIFN0cmluZyBzID0gKFN0cmluZylpdC5uZXh0KCk7Ci0gICAgICAgICAgIGludCBjb21tYUluZGV4ID0gcy5pbmRleE9mKCIsIik7IAorICAgICAgICAgICBpbnQgY29tbWFJbmRleCA9IHMuaW5kZXhPZigiLCIpOwogICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHMuc3Vic3RyaW5nKDAsIGNvbW1hSW5kZXgpLnRyaW0oKTsKICAgICAgICAgICAgU3RyaW5nIHByaWNlID0gcy5zdWJzdHJpbmcoY29tbWFJbmRleCArIDEsIHMubGVuZ3RoKCkpLnRyaW0oKTsKICAgICAgICAgICAgaXRlbXNba10gPSBuZXcgUHJpY2VJdGVtQmVhbihuYW1lLCBuZXcgQmlnRGVjaW1hbChwcmljZSkpOwpAQCAtNDksNSArNDksNSBAQAogICAgICAgIH0KIAogICAgICAgIHJldHVybiBpdGVtczsKLSAgIH0gCi19IAorICAgfQorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvc2VydmVyL2NvbS9zdW4vY2IvU3VwcGxpZXJJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9zZXJ2ZXIvY29tL3N1bi9jYi9TdXBwbGllckltcGwuamF2YQppbmRleCBmOWIxNjNhLi5hYzI2NWI1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9zZXJ2ZXIvY29tL3N1bi9jYi9TdXBwbGllckltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9zZXJ2ZXIvY29tL3N1bi9jYi9TdXBwbGllckltcGwuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogCiAgICAgICAgICBEYXRlIHRvbW9ycm93ID0gY29tLnN1bi5jYi5EYXRlSGVscGVyLmFkZERheXMobmV3IERhdGUoKSwgMSk7CiAgICAgICAgICBDb25maXJtYXRpb25CZWFuIGNvbmZpcm1hdGlvbiA9Ci0gICAgICAgICAgICAgbmV3IENvbmZpcm1hdGlvbkJlYW4ob3JkZXIuZ2V0SWQoKSwgCisgICAgICAgICAgICAgbmV3IENvbmZpcm1hdGlvbkJlYW4ob3JkZXIuZ2V0SWQoKSwKICAgICAgICAgICAgICAgICAgRGF0ZUhlbHBlci5kYXRlVG9DYWxlbmRhcih0b21vcnJvdykpOwogICAgICAgICAgcmV0dXJuIGNvbmZpcm1hdGlvbjsKICAgICB9CkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgRGF0ZSBlbmREYXRlID0gRGF0ZUhlbHBlci5hZGREYXlzKHRvZGF5LCAzMCk7CiAKICAgICAgICBQcmljZUl0ZW1CZWFuW10gcHJpY2VJdGVtcyA9IFByaWNlTG9hZGVyLmxvYWRJdGVtcyhwcm9wc05hbWUpOwotICAgICAgIFByaWNlTGlzdEJlYW4gcHJpY2VMaXN0ID0gCisgICAgICAgUHJpY2VMaXN0QmVhbiBwcmljZUxpc3QgPQogICAgICAgICAgICBuZXcgUHJpY2VMaXN0QmVhbihEYXRlSGVscGVyLmRhdGVUb0NhbGVuZGFyKHRvZGF5KSwKICAgICAgICAgICAgICAgIERhdGVIZWxwZXIuZGF0ZVRvQ2FsZW5kYXIoZW5kRGF0ZSksIHByaWNlSXRlbXMpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9zZXJ2ZXIvY29tL3N1bi9jYi9TdXBwbGllclByaWNlcy5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvc2VydmVyL2NvbS9zdW4vY2IvU3VwcGxpZXJQcmljZXMucHJvcGVydGllcwppbmRleCAyODRjZTEwLi5mMGQ0NTQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9zZXJ2ZXIvY29tL3N1bi9jYi9TdXBwbGllclByaWNlcy5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL3NlcnZlci9jb20vc3VuL2NiL1N1cHBsaWVyUHJpY2VzLnByb3BlcnRpZXMKQEAgLTE3LDUgKzE3LDUgQEAKIAogYzE9TW9jY2EsIDQuMDAKIGMyPVdha2UgVXAgQ2FsbCwgNS41MAotYzM9RnJlbmNoIFJvYXN0LCA1LjAwIAorYzM9RnJlbmNoIFJvYXN0LCA1LjAwXHUwMDIwCiBjND1Lb25hLCA2LjUwCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovYnVpbGQucHJvcGVydGllcwppbmRleCAyNjQxMjc2Li5lNzAyNWJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogIyBUaGlzIGZpbGUgY29udGFpbnMgcHJvcGVydGllcyBjb21tb24gdG8gdGhlIHR1dG9yaWFsIGV4YW1wbGVzIGZvciBTQUFKLgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9idWlsZC54bWwKaW5kZXggNWVkYmRiMi4uZTkxZGFhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL2J1aWxkLnhtbApAQCAtMjEsMTUgKzIxLDE1IEBACiBdPgogCiA8cHJvamVjdCBuYW1lPSJTQUFKIFR1dG9yaWFsLCBDb2ZmZWUgQnJlYWsiIGRlZmF1bHQ9ImJ1aWxkIiBiYXNlZGlyPSIuIj4KLSAgPHRhcmdldCBuYW1lPSJpbml0Ij4gCi0gICAgICA8dHN0YW1wLz4gCi0gIDwvdGFyZ2V0PiAKKyAgPHRhcmdldCBuYW1lPSJpbml0Ij4KKyAgICAgIDx0c3RhbXAvPgorICA8L3RhcmdldD4KIAogICA8cHJvcGVydHkgZmlsZT0iLi4vLi4vY29tbW9uL2J1aWxkLnByb3BlcnRpZXMiLz4KICAgPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiLz4KIAogICAmdGFyZ2V0czsKLSAgCisKICAgPHBhdGggaWQ9InJ1bi5jbGFzc3BhdGgiPgogICAgIDxmaWxlc2V0IGRpcj0iJHtqMmVlLmhvbWV9L2xpYiI+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgpAQCAtMzksNyArMzksNyBAQAogICAgIDwvZmlsZXNldD4KICAgPC9wYXRoPgogCi0gIDx0YXJnZXQgbmFtZT0icHJlcGFyZSIgCisgIDx0YXJnZXQgbmFtZT0icHJlcGFyZSIKICAgICAgZGVzY3JpcHRpb249IkNyZWF0ZXMgdGhlIGJ1aWxkIGFuZCBkaXN0IGRpcmVjdG9yaWVzIiA+CiAgICAgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIHRoZSByZXF1aXJlZCBkaXJlY3Rvcmllcy4uLi4iIC8+CiAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9L2NsaWVudCIgLz4KQEAgLTc3LDExICs3NywxMSBAQAogICAgICAgPGNsYXNzcGF0aCByZWZpZD0iY2xhc3NwYXRoIiAvPgogICAgICAgPGNsYXNzcGF0aCBwYXRoPSIke2NvbW1vbn0iIC8+CiAgICAgICA8L2phdmFjPgotICAgICAgPGNvcHkgZmlsZT0iLi4vY29tbW9uL3NyYy9jb20vc3VuL2NiL0NvZmZlZUJyZWFrLnByb3BlcnRpZXMiIAorICAgICAgPGNvcHkgZmlsZT0iLi4vY29tbW9uL3NyYy9jb20vc3VuL2NiL0NvZmZlZUJyZWFrLnByb3BlcnRpZXMiCiAgICAgICAgIHRvZGlyPSIke2J1aWxkfS9jbGllbnQvY29tL3N1bi9jYiIgLz4KICAgPC90YXJnZXQ+CiAKLSAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLWNsaWVudCIgZGVwZW5kcz0iY29tcGlsZS1jbGllbnQiIAorICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UtY2xpZW50IiBkZXBlbmRzPSJjb21waWxlLWNsaWVudCIKICAgICAgIGRlc2NyaXB0aW9uPSJCdWlsZHMgdGhlIEpBUiBmaWxlIHRoYXQgY29udGFpbnMgdGhlIFNBQUogY2xpZW50IHJvdXRpbmVzIj4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IkJ1aWxkaW5nIHRoZSAke2NsaWVudC1qYXJ9IGZpbGUuLi4uIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9ImRpc3QvJHtjbGllbnQtamFyfSIgLz4KQEAgLTkyLDI0ICs5MiwyNCBAQAogICAgICAgPC9qYXI+CiAgIDwvdGFyZ2V0PgogCi0gIDx0YXJnZXQgbmFtZT0icnVuLXRlc3Qtb3JkZXIiPiAKKyAgPHRhcmdldCBuYW1lPSJydW4tdGVzdC1vcmRlciI+CiAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLXRlc3QtY2xpZW50Ij4KICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50LWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5jYi5UZXN0T3JkZXJSZXF1ZXN0Ii8+CiAgICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKLSAgPHRhcmdldCBuYW1lPSJydW4tdGVzdC1wcmljZSI+IAorICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0LXByaWNlIj4KICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tdGVzdC1jbGllbnQiPgogICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmNiLlRlc3RQcmljZUxpc3RSZXF1ZXN0Ii8+CiAgICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKLSAgPHRhcmdldCBuYW1lPSJydW4tdGVzdC1jbGllbnQiIAorICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0LWNsaWVudCIKICAgICAgZGVzY3JpcHRpb249IlJ1bnMgYSB0ZXN0IGNsaWVudCI+CiAgICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgdGhlICR7Y2xpZW50LWNsYXNzfSBwcm9ncmFtOiIgLz4KICAgICAgPGVjaG8gbWVzc2FnZT0iICIgLz4KLSAgICAgIDxqYXZhIAotICAgICAgICAgICAgZm9yaz0ib24iIAorICAgICAgPGphdmEKKyAgICAgICAgICAgIGZvcms9Im9uIgogICAgICAgICAgICAgY2xhc3NuYW1lPSIke2NsaWVudC1jbGFzc30iPgogICAgICAgPGNsYXNzcGF0aCByZWZpZD0icnVuLmNsYXNzcGF0aCIgLz4KICAgICAgIDxjbGFzc3BhdGggcGF0aD0iJHtidWlsZH0vY2xpZW50IiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovZHRkcy9jb2ZmZWUtb3JkZXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovZHRkcy9jb2ZmZWUtb3JkZXIueG1sCmluZGV4IDEyM2Q0OGIuLjRlMjMxMzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL2R0ZHMvY29mZmVlLW9yZGVyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9kdGRzL2NvZmZlZS1vcmRlci54bWwKQEAgLTIzLDcgKzIzLDcgQEAKIAogPGNvZmZlZS1vcmRlcj4KICAgICA8b3JkZXJJRD4KLQkJIjEyMzQiCisgICAgICAgICIxMjM0IgogICAgIDwvb3JkZXJJRD4KIAogICAgIDxjdXN0b21lcj4KQEAgLTcxLDUgKzcxLDUgQEAKICAgICA8dG90YWw+CiAgICAgICAgICIxMC45NSIKICAgICA8L3RvdGFsPgotICAgCisKIDwvY29mZmVlLW9yZGVyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovZHRkcy9jb25maXJtLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL2R0ZHMvY29uZmlybS54bWwKaW5kZXggNmM3NDA2ZS4uMGQwOGNhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovZHRkcy9jb25maXJtLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9kdGRzL2NvbmZpcm0ueG1sCkBAIC0yMiwxMCArMjIsMTAgQEAKIAogPGNvbmZpcm1hdGlvbj4KICAgICA8b3JkZXJJRD4KLQkJIjEyMzQiCi0JPC9vcmRlcklEPgorICAgICAgICAiMTIzNCIKKyAgICA8L29yZGVySUQ+CiAKICAgICA8c2hpcC1kYXRlPgotCQkiMDEtMDEtMjAwMSIKLQk8L3NoaXAtZGF0ZT4KKyAgICAgICAgIjAxLTAxLTIwMDEiCisgICAgPC9zaGlwLWRhdGU+CiA8L2NvbmZpcm1hdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL2R0ZHMvcHJpY2UtbGlzdC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9kdGRzL3ByaWNlLWxpc3QueG1sCmluZGV4IGVkNjdkYjIuLmYwOTBhMWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL2R0ZHMvcHJpY2UtbGlzdC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovZHRkcy9wcmljZS1saXN0LnhtbApAQCAtMjIsMjMgKzIyLDIzIEBACiAKIDxwcmljZS1saXN0CiAgICAgPGNvZmZlZT4KLQkJPGNvZmZlZS1uYW1lPiBBcmFiaWNhIDwvY29mZmVlLW5hbWU+Ci0JCTxwcmljZT4gNC41MCA8L3ByaWNlPgorICAgICAgICA8Y29mZmVlLW5hbWU+IEFyYWJpY2EgPC9jb2ZmZWUtbmFtZT4KKyAgICAgICAgPHByaWNlPiA0LjUwIDwvcHJpY2U+CiAgICAgPC9jb2ZmZWU+CiAKICAgICA8Y29mZmVlPgotCQk8Y29mZmVlLW5hbWU+IEhvdXNlQmxlbmQgPC9jb2ZmZWUtbmFtZT4KLQkJPHByaWNlPiA1LjAwIDwvcHJpY2U+CisgICAgICAgIDxjb2ZmZWUtbmFtZT4gSG91c2VCbGVuZCA8L2NvZmZlZS1uYW1lPgorICAgICAgICA8cHJpY2U+IDUuMDAgPC9wcmljZT4KICAgICA8L2NvZmZlZT4KIAogICAgIDxjb2ZmZWU+Ci0JCTxjb2ZmZWUtbmFtZT4gRXNwcmVzc28gPC9jb2ZmZWUtbmFtZT4KLQkJPHByaWNlPiA1LjAwIDwvcHJpY2U+CisgICAgICAgIDxjb2ZmZWUtbmFtZT4gRXNwcmVzc28gPC9jb2ZmZWUtbmFtZT4KKyAgICAgICAgPHByaWNlPiA1LjAwIDwvcHJpY2U+CiAgICAgPC9jb2ZmZWU+CiAKICAgICA8Y29mZmVlPgotCQk8Y29mZmVlLW5hbWU+IERvcmFkYSA8L2NvZmZlZS1uYW1lPgotCQk8cHJpY2U+IDYuMDAgPC9wcmljZT4KKyAgICAgICAgPGNvZmZlZS1uYW1lPiBEb3JhZGEgPC9jb2ZmZWUtbmFtZT4KKyAgICAgICAgPHByaWNlPiA2LjAwIDwvcHJpY2U+CiAgICAgPC9jb2ZmZWU+CiAKIDwvcHJpY2UtbGlzdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL2R0ZHMvcmVxdWVzdC1wcmljZXMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovZHRkcy9yZXF1ZXN0LXByaWNlcy54bWwKaW5kZXggYmNkMzNmMi4uMjQ0MzRkZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovZHRkcy9yZXF1ZXN0LXByaWNlcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovZHRkcy9yZXF1ZXN0LXByaWNlcy54bWwKQEAgLTIyLDYgKzIyLDYgQEAKIAogPHJlcXVlc3QtcHJpY2VzPgogICAgIDxyZXF1ZXN0PgotCQkiU2VuZCBjdXJyZW50IHByaWNlIGxpc3QuIgotCTwvcmVxdWVzdD4KKyAgICAgICAgIlNlbmQgY3VycmVudCBwcmljZSBsaXN0LiIKKyAgICA8L3JlcXVlc3Q+CiA8L3JlcXVlc3QtcHJpY2VzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovc3JjL2NvbS9zdW4vY2IvQ29uZmlybWF0aW9uU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovc3JjL2NvbS9zdW4vY2IvQ29uZmlybWF0aW9uU2VydmxldC5qYXZhCmluZGV4IDc3ZmM1MDAuLjZjNjYyNzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL3NyYy9jb20vc3VuL2NiL0NvbmZpcm1hdGlvblNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9zcmMvY29tL3N1bi9jYi9Db25maXJtYXRpb25TZXJ2bGV0LmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogcHVibGljIGNsYXNzIENvbmZpcm1hdGlvblNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAgICAgc3RhdGljIE1lc3NhZ2VGYWN0b3J5IGZhYyA9IG51bGw7Ci0gICAgCisKICAgICBzdGF0aWMgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgZmFjID0gTWVzc2FnZUZhY3RvcnkubmV3SW5zdGFuY2UoKTsKQEAgLTM2LDEyICszNiwxMiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIHNlcnZsZXRDb25maWcpIAorICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBzZXJ2bGV0Q29uZmlnKQogICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KHNlcnZsZXRDb25maWcpOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIAorCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KCBIdHRwU2VydmxldFJlcXVlc3QgcmVxLAogICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCiAgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICB0cnkgewpAQCAtNTQsMjUgKzU0LDI1IEBACiAgICAgICAgICAgICAvLyBOb3cgaW50ZXJuYWxpemUgdGhlIGNvbnRlbnRzIG9mIGEgSFRUUCByZXF1ZXN0CiAgICAgICAgICAgICAvLyBhbmQgY3JlYXRlIGEgU09BUE1lc3NhZ2UKICAgICAgICAgICAgIFNPQVBNZXNzYWdlIG1zZyA9IGZhYy5jcmVhdGVNZXNzYWdlKGhlYWRlcnMsIGlzKTsKLSAgICAgIAorCiAgICAgICAgICAgICBTT0FQTWVzc2FnZSByZXBseSA9IG51bGw7CiAgICAgICAgICAgICByZXBseSA9IG9uTWVzc2FnZShtc2cpOwogCiAgICAgICAgICAgICBpZiAocmVwbHkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8qIAotICAgICAgICAgICAgICAgICAqIE5lZWQgdG8gY2FsbCBzYXZlQ2hhbmdlcyBiZWNhdXNlIHdlJ3JlIAotICAgICAgICAgICAgICAgICAqIGdvaW5nIHRvIHVzZSB0aGUgTWltZUhlYWRlcnMgdG8gc2V0IEhUVFAgCisKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIE5lZWQgdG8gY2FsbCBzYXZlQ2hhbmdlcyBiZWNhdXNlIHdlJ3JlCisgICAgICAgICAgICAgICAgICogZ29pbmcgdG8gdXNlIHRoZSBNaW1lSGVhZGVycyB0byBzZXQgSFRUUAogICAgICAgICAgICAgICAgICAqIHJlc3BvbnNlIGluZm9ybWF0aW9uLiBUaGVzZSBNaW1lSGVhZGVycwogICAgICAgICAgICAgICAgICAqIGFyZSBnZW5lcmF0ZWQgYXMgcGFydCBvZiB0aGUgc2F2ZS4KICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBpZiAocmVwbHkuc2F2ZVJlcXVpcmVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbHkuc2F2ZUNoYW5nZXMoKTsgCisgICAgICAgICAgICAgICAgICAgIHJlcGx5LnNhdmVDaGFuZ2VzKCk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgcmVzcC5zZXRTdGF0dXMoSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19PSyk7CiAgICAgICAgICAgICAgICAgcHV0SGVhZGVycyhyZXBseS5nZXRNaW1lSGVhZGVycygpLCByZXNwKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBXcml0ZSBvdXQgdGhlIG1lc3NhZ2Ugb24gdGhlIHJlc3BvbnNlIHN0cmVhbQogICAgICAgICAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHJlc3AuZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgICAgICAgICAgcmVwbHkud3JpdGVUbyhvcyk7CkBAIC04Miw3ICs4Miw3IEBACiAgICAgICAgICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfTk9fQ09OVEVOVCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIlNBQUogUE9TVCBmYWlsZWQ6ICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJTQUFKIFBPU1QgZmFpbGVkOiAiICsKICAgICAgICAgICAgICAgICBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtOTksMTQgKzk5LDE0IEBACiAgICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXIgdmFsdWVzID0KICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKGhlYWRlclZhbHVlLCAiLCIpOwogICAgICAgICAgICAgd2hpbGUgKHZhbHVlcy5oYXNNb3JlVG9rZW5zKCkpIHsKLSAgICAgICAgICAgICAgICBoZWFkZXJzLmFkZEhlYWRlcihoZWFkZXJOYW1lLCAKKyAgICAgICAgICAgICAgICBoZWFkZXJzLmFkZEhlYWRlcihoZWFkZXJOYW1lLAogICAgICAgICAgICAgICAgICAgICB2YWx1ZXMubmV4dFRva2VuKCkudHJpbSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gaGVhZGVyczsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBwdXRIZWFkZXJzKE1pbWVIZWFkZXJzIGhlYWRlcnMsIAorICAgIHN0YXRpYyB2b2lkIHB1dEhlYWRlcnMoTWltZUhlYWRlcnMgaGVhZGVycywKICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKSB7CiAKICAgICAgICAgSXRlcmF0b3IgaXQgPSBoZWFkZXJzLmdldEFsbEhlYWRlcnMoKTsKQEAgLTExNSw3ICsxMTUsNyBAQAogCiAgICAgICAgICAgICBTdHJpbmdbXSB2YWx1ZXMgPSBoZWFkZXJzLmdldEhlYWRlcihoZWFkZXIuZ2V0TmFtZSgpKTsKICAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09IDEpIHsKLSAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKGhlYWRlci5nZXROYW1lKCksIAorICAgICAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoaGVhZGVyLmdldE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmdldFZhbHVlKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgY29uY2F0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwpAQCAtMTM5LDEwICsxMzksMTAgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy8gUmV0cmlldmUgb3JkZXJJRCBmcm9tIG1lc3NhZ2UgcmVjZWl2ZWQKLSAgICAgICAgICAgIFNPQVBCb2R5IHNlbnRTQiA9IAorICAgICAgICAgICAgU09BUEJvZHkgc2VudFNCID0KICAgICAgICAgICAgICAgICBtZXNzYWdlLmdldFNPQVBQYXJ0KCkuZ2V0RW52ZWxvcGUoKS5nZXRCb2R5KCk7CiAgICAgICAgICAgICBJdGVyYXRvciBzZW50SXQgPSBzZW50U0IuZ2V0Q2hpbGRFbGVtZW50cygpOwotICAgICAgICAgICAgU09BUEJvZHlFbGVtZW50IHNlbnRTQkUgPSAKKyAgICAgICAgICAgIFNPQVBCb2R5RWxlbWVudCBzZW50U0JFID0KICAgICAgICAgICAgICAgICAoU09BUEJvZHlFbGVtZW50KXNlbnRJdC5uZXh0KCk7CiAgICAgICAgICAgICBJdGVyYXRvciBzZW50SXQyID0gc2VudFNCRS5nZXRDaGlsZEVsZW1lbnRzKCk7CiAgICAgICAgICAgICBTT0FQRWxlbWVudCBzZW50U0UgPSAoU09BUEVsZW1lbnQpc2VudEl0Mi5uZXh0KCk7CkBAIC0xNTYsOSArMTU2LDkgQEAKICAgICAgICAgICAgIFNPQVBFbnZlbG9wZSBlbnYgPSBzcC5nZXRFbnZlbG9wZSgpOwogICAgICAgICAgICAgU09BUEJvZHkgc2IgPSBlbnYuZ2V0Qm9keSgpOwogCi0gICAgICAgICAgICBOYW1lIG5ld0JvZHlOYW1lID0gZW52LmNyZWF0ZU5hbWUoImNvbmZpcm1hdGlvbiIsIAorICAgICAgICAgICAgTmFtZSBuZXdCb2R5TmFtZSA9IGVudi5jcmVhdGVOYW1lKCJjb25maXJtYXRpb24iLAogICAgICAgICAgICAgICAgICJDb25maXJtIiwgImh0dHA6Ly9zb25hdGEuY29mZmVlYnJlYWsuY29tIik7Ci0gICAgICAgICAgICBTT0FQQm9keUVsZW1lbnQgY29uZmlybSA9IAorICAgICAgICAgICAgU09BUEJvZHlFbGVtZW50IGNvbmZpcm0gPQogICAgICAgICAgICAgICAgIHNiLmFkZEJvZHlFbGVtZW50KG5ld0JvZHlOYW1lKTsKIAogICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBvcmRlcklEIGVsZW1lbnQgZm9yIGNvbmZpcm1hdGlvbgpAQCAtMTY5LDcgKzE2OSw3IEBACiAKICAgICAgICAgICAgIC8vIENyZWF0ZSBzaGlwLWRhdGUgZWxlbWVudAogICAgICAgICAgICAgTmFtZSBzaGlwRGF0ZU5hbWUgPSBlbnYuY3JlYXRlTmFtZSgic2hpcC1kYXRlIik7Ci0gICAgICAgICAgICBTT0FQRWxlbWVudCBzaGlwRGF0ZSA9IAorICAgICAgICAgICAgU09BUEVsZW1lbnQgc2hpcERhdGUgPQogICAgICAgICAgICAgICAgIGNvbmZpcm0uYWRkQ2hpbGRFbGVtZW50KHNoaXBEYXRlTmFtZSk7CiAKICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgc2hpcHBpbmcgZGF0ZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovc3JjL2NvbS9zdW4vY2IvT3JkZXJSZXF1ZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9zcmMvY29tL3N1bi9jYi9PcmRlclJlcXVlc3QuamF2YQppbmRleCBjNjExMjAxLi42NmMzN2QzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9zcmMvY29tL3N1bi9jYi9PcmRlclJlcXVlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9zcmMvY29tL3N1bi9jYi9PcmRlclJlcXVlc3QuamF2YQpAQCAtMzIsMTAgKzMyLDEwIEBACiAgICAgfQogCiAgICAgcHVibGljIENvbmZpcm1hdGlvbkJlYW4gcGxhY2VPcmRlcihPcmRlckJlYW4gb3JkZXJCZWFuKSB7Ci0gICAgICAgIENvbmZpcm1hdGlvbkJlYW4gY2IgPSBudWxsOyAgIAorICAgICAgICBDb25maXJtYXRpb25CZWFuIGNiID0gbnVsbDsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgU09BUENvbm5lY3Rpb25GYWN0b3J5IHNjZiA9IAorICAgICAgICAgICAgU09BUENvbm5lY3Rpb25GYWN0b3J5IHNjZiA9CiAgICAgICAgICAgICAgICAgU09BUENvbm5lY3Rpb25GYWN0b3J5Lm5ld0luc3RhbmNlKCk7CiAgICAgICAgICAgICBTT0FQQ29ubmVjdGlvbiBjb24gPSBzY2YuY3JlYXRlQ29ubmVjdGlvbigpOwogCkBAIC03NSw3ICs3NSw3IEBACiAgICAgICAgICAgICAgICAgb3JkZXJCZWFuLmdldEN1c3RvbWVyKCkuZ2V0UGhvbmVOdW1iZXIoKSk7CiAKICAgICAgICAgICAgIGNoaWxkTmFtZSA9IGVudmVsb3BlLmNyZWF0ZU5hbWUoImVtYWlsLWFkZHJlc3MiKTsKLSAgICAgICAgICAgIFNPQVBFbGVtZW50IGVtYWlsQWRkcmVzcyA9IAorICAgICAgICAgICAgU09BUEVsZW1lbnQgZW1haWxBZGRyZXNzID0KICAgICAgICAgICAgICAgICBjdXN0b21lci5hZGRDaGlsZEVsZW1lbnQoY2hpbGROYW1lKTsKICAgICAgICAgICAgIGVtYWlsQWRkcmVzcy5hZGRUZXh0Tm9kZSgKICAgICAgICAgICAgICAgICBvcmRlckJlYW4uZ2V0Q3VzdG9tZXIoKS5nZXRFbWFpbEFkZHJlc3MoKSk7CkBAIC05OSw4ICs5OSw4IEBACiAgICAgICAgICAgICBjaGlsZE5hbWUgPSBlbnZlbG9wZS5jcmVhdGVOYW1lKCJ6aXAiKTsKICAgICAgICAgICAgIFNPQVBFbGVtZW50IHppcCA9IGFkZHJlc3MuYWRkQ2hpbGRFbGVtZW50KGNoaWxkTmFtZSk7CiAgICAgICAgICAgICB6aXAuYWRkVGV4dE5vZGUob3JkZXJCZWFuLmdldEFkZHJlc3MoKS5nZXRaaXAoKSk7Ci0gICAgCi0gICAgICAgICAgICBMaW5lSXRlbUJlYW5bXSBsaW5lSXRlbXM9b3JkZXJCZWFuLmdldExpbmVJdGVtcygpOyAgICAgICAgICAgIAorCisgICAgICAgICAgICBMaW5lSXRlbUJlYW5bXSBsaW5lSXRlbXM9b3JkZXJCZWFuLmdldExpbmVJdGVtcygpOwogICAgICAgICAgICAgZm9yIChpbnQgaT0wO2kgPCBsaW5lSXRlbXMubGVuZ3RoO2krKykgewogICAgICAgICAgICAgICAgIExpbmVJdGVtQmVhbiBsaWIgPSBsaW5lSXRlbXNbaV07CiAKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgICAgICAgICAgICAgIFNPQVBFbGVtZW50IGxpbmVJdGVtID0gb3JkZXIuYWRkQ2hpbGRFbGVtZW50KGNoaWxkTmFtZSk7CiAKICAgICAgICAgICAgICAgICBjaGlsZE5hbWUgPSBlbnZlbG9wZS5jcmVhdGVOYW1lKCJjb2ZmZWVOYW1lIik7Ci0gICAgICAgICAgICAgICAgU09BUEVsZW1lbnQgY29mZmVlTmFtZSA9IAorICAgICAgICAgICAgICAgIFNPQVBFbGVtZW50IGNvZmZlZU5hbWUgPQogICAgICAgICAgICAgICAgICAgICBsaW5lSXRlbS5hZGRDaGlsZEVsZW1lbnQoY2hpbGROYW1lKTsKICAgICAgICAgICAgICAgICBjb2ZmZWVOYW1lLmFkZFRleHROb2RlKGxpYi5nZXRDb2ZmZWVOYW1lKCkpOwogCkBAIC0xMjMsMTAgKzEyMywxMCBAQAogCiAgICAgICAgICAgICAvLyB0b3RhbAogICAgICAgICAgICAgY2hpbGROYW1lID0gZW52ZWxvcGUuY3JlYXRlTmFtZSgidG90YWwiKTsKLSAgICAgICAgICAgIFNPQVBFbGVtZW50IHRvdGFsID0gCisgICAgICAgICAgICBTT0FQRWxlbWVudCB0b3RhbCA9CiAgICAgICAgICAgICAgICAgb3JkZXIuYWRkQ2hpbGRFbGVtZW50KGNoaWxkTmFtZSk7Ci0gICAgICAgICAgICB0b3RhbC5hZGRUZXh0Tm9kZShvcmRlckJlYW4uZ2V0VG90YWwoKS50b1N0cmluZygpKTsgCi0gICAgICAgICAgICAgIAorICAgICAgICAgICAgdG90YWwuYWRkVGV4dE5vZGUob3JkZXJCZWFuLmdldFRvdGFsKCkudG9TdHJpbmcoKSk7CisKICAgICAgICAgICAgIFVSTCBlbmRwb2ludCA9IG5ldyBVUkwodXJsKTsKICAgICAgICAgICAgIFNPQVBNZXNzYWdlIHJlcGx5ID0gY29uLmNhbGwobXNnLCBlbmRwb2ludCk7CiAgICAgICAgICAgICBjb24uY2xvc2UoKTsKQEAgLTE0NSw3ICsxNDUsNyBAQAogICAgICAgICAgICAgLy8gR2V0IHNoaXAgZGF0ZQogICAgICAgICAgICAgU09BUEVsZW1lbnQgc0RhdGUgPSAoU09BUEVsZW1lbnQpYm9keUl0Mi5uZXh0KCk7CiAgICAgICAgICAgICBTdHJpbmcgc2hpcHBpbmdEYXRlID0gc0RhdGUuZ2V0VmFsdWUoKTsKLSAgICAgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgZGYgPSAKKyAgICAgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgZGYgPQogICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJFRUUgTU1NIGRkIEhIOm1tOnNzIHogeXl5eSIpOwogICAgICAgICAgICAgRGF0ZSBkYXRlID0gZGYucGFyc2Uoc2hpcHBpbmdEYXRlKTsKICAgICAgICAgICAgIENhbGVuZGFyIGNhbCA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovc3JjL2NvbS9zdW4vY2IvUHJpY2VMaXN0UmVxdWVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovc3JjL2NvbS9zdW4vY2IvUHJpY2VMaXN0UmVxdWVzdC5qYXZhCmluZGV4IGEzYzMzNDQuLjI5NDliMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL3NyYy9jb20vc3VuL2NiL1ByaWNlTGlzdFJlcXVlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9zcmMvY29tL3N1bi9jYi9QcmljZUxpc3RSZXF1ZXN0LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIAogcHVibGljIGNsYXNzIFByaWNlTGlzdFJlcXVlc3QgewogICAgIFN0cmluZyB1cmw7Ci0gIAorCiAgICAgcHVibGljIFByaWNlTGlzdFJlcXVlc3QoU3RyaW5nIHVybCl7CiAgICAgICAgIHRoaXMudXJsID0gdXJsOwogICAgIH0KQEAgLTMyLDcgKzMyLDcgQEAKICAgICBwdWJsaWMgUHJpY2VMaXN0QmVhbiBnZXRQcmljZUxpc3QoKSB7CiAgICAgICAgIFByaWNlTGlzdEJlYW4gcGxiID0gbnVsbDsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFNPQVBDb25uZWN0aW9uRmFjdG9yeSBzY2YgPSAKKyAgICAgICAgICAgIFNPQVBDb25uZWN0aW9uRmFjdG9yeSBzY2YgPQogICAgICAgICAgICAgICAgIFNPQVBDb25uZWN0aW9uRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwogICAgICAgICAgICAgU09BUENvbm5lY3Rpb24gY29uID0gc2NmLmNyZWF0ZUNvbm5lY3Rpb24oKTsKIApAQCAtNDQsMTQgKzQ0LDE0IEBACiAgICAgICAgICAgICBTT0FQRW52ZWxvcGUgZW52ZWxvcGUgPSBwYXJ0LmdldEVudmVsb3BlKCk7CiAgICAgICAgICAgICBTT0FQQm9keSBib2R5ID0gZW52ZWxvcGUuZ2V0Qm9keSgpOwogCi0gICAgICAgICAgICAvLyBDcmVhdGUgU09BUEJvZHlFbGVtZW50IHJlcXVlc3QgCisgICAgICAgICAgICAvLyBDcmVhdGUgU09BUEJvZHlFbGVtZW50IHJlcXVlc3QKICAgICAgICAgICAgIE5hbWUgYm9keU5hbWUgPSBlbnZlbG9wZS5jcmVhdGVOYW1lKCJyZXF1ZXN0LXByaWNlcyIsCiAgICAgICAgICAgICAgICAgIlJlcXVlc3RQcmljZXMiLCAiaHR0cDovL3NvbmF0YS5jb2ZmZWVicmVhay5jb20iKTsKICAgICAgICAgICAgIFNPQVBCb2R5RWxlbWVudCByZXF1ZXN0UHJpY2VzID0KICAgICAgICAgICAgICAgICBib2R5LmFkZEJvZHlFbGVtZW50KGJvZHlOYW1lKTsKLSAgICAgIAorCiAgICAgICAgICAgICBOYW1lIHJlcXVlc3ROYW1lID0gZW52ZWxvcGUuY3JlYXRlTmFtZSgicmVxdWVzdCIpOwotICAgICAgICAgICAgU09BUEVsZW1lbnQgcmVxdWVzdCA9IAorICAgICAgICAgICAgU09BUEVsZW1lbnQgcmVxdWVzdCA9CiAgICAgICAgICAgICAgICAgcmVxdWVzdFByaWNlcy5hZGRDaGlsZEVsZW1lbnQocmVxdWVzdE5hbWUpOwogICAgICAgICAgICAgcmVxdWVzdC5hZGRUZXh0Tm9kZSgiU2VuZCB1cGRhdGVkIHByaWNlIGxpc3QuIik7CiAKQEAgLTY2LDkgKzY2LDkgQEAKIAogICAgICAgICAgICAgVmVjdG9yIGxpc3QgPSBuZXcgVmVjdG9yKCk7CiAKLSAgICAgICAgICAgIFNPQVBCb2R5IHJlc3BvbnNlQm9keSA9IAorICAgICAgICAgICAgU09BUEJvZHkgcmVzcG9uc2VCb2R5ID0KICAgICAgICAgICAgICAgICByZXNwb25zZS5nZXRTT0FQUGFydCgpLmdldEVudmVsb3BlKCkuZ2V0Qm9keSgpOwotICAgICAgICAgICAgSXRlcmF0b3IgaXQxID0gcmVzcG9uc2VCb2R5LmdldENoaWxkRWxlbWVudHMoKTsgCisgICAgICAgICAgICBJdGVyYXRvciBpdDEgPSByZXNwb25zZUJvZHkuZ2V0Q2hpbGRFbGVtZW50cygpOwogCiAgICAgICAgICAgICAvLyBHZXQgcHJpY2UtbGlzdCBlbGVtZW50CiAgICAgICAgICAgICB3aGlsZSAoaXQxLmhhc05leHQoKSkgewpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICAgICAgQXJyYXlMaXN0IGl0ZW1zID0gbmV3IEFycmF5TGlzdCgpOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsgaSA9IGkgKyAyKSB7CiAgICAgICAgICAgICAgICAgaXRlbXMuYWRkKAotICAgICAgICAgICAgICAgICAgICBuZXcgUHJpY2VJdGVtQmVhbihsaXN0LmVsZW1lbnRBdChpKS50b1N0cmluZygpLCAKKyAgICAgICAgICAgICAgICAgICAgbmV3IFByaWNlSXRlbUJlYW4obGlzdC5lbGVtZW50QXQoaSkudG9TdHJpbmcoKSwKICAgICAgICAgICAgICAgICAgICAgbmV3IEJpZ0RlY2ltYWwobGlzdC5lbGVtZW50QXQoaSArIDEpLnRvU3RyaW5nKCkpKSk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludChsaXN0LmVsZW1lbnRBdChpKSArICIgICAgICAgICIpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaXN0LmVsZW1lbnRBdChpICsgMSkpOwpAQCAtOTgsOSArOTgsOSBAQAogCiAgICAgICAgICAgICBQcmljZUl0ZW1CZWFuW10gcHJpY2VJdGVtcyA9IG5ldyBQcmljZUl0ZW1CZWFuW2l0ZW1zLnNpemUoKV07CiAgICAgICAgICAgICBpbnQgaT0wOwotICAgICAgCQkJZm9yIChJdGVyYXRvciBpdD1pdGVtcy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkgeworICAgICAgICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpdD1pdGVtcy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkgewogICAgICAgICAgICAgICBwcmljZUl0ZW1zW2ldID0gKFByaWNlSXRlbUJlYW4paXQubmV4dCgpOwotICAgICAgICAgICAgICBpKys7CQorICAgICAgICAgICAgICBpKys7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBEYXRlIHRvZGF5ID0gbmV3IERhdGUoKTsKICAgICAgICAgICAgIERhdGUgZW5kRGF0ZSA9IERhdGVIZWxwZXIuYWRkRGF5cyh0b2RheSwgMzApOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovc3JjL2NvbS9zdW4vY2IvUHJpY2VMaXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovc3JjL2NvbS9zdW4vY2IvUHJpY2VMaXN0U2VydmxldC5qYXZhCmluZGV4IGViNzBlMzcuLmFkYzI4NDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL3NyYy9jb20vc3VuL2NiL1ByaWNlTGlzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9zcmMvY29tL3N1bi9jYi9QcmljZUxpc3RTZXJ2bGV0LmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogcHVibGljIGNsYXNzIFByaWNlTGlzdFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAgICAgc3RhdGljIE1lc3NhZ2VGYWN0b3J5IGZhYyA9IG51bGw7Ci0gICAgCisKICAgICBzdGF0aWMgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgZmFjID0gTWVzc2FnZUZhY3RvcnkubmV3SW5zdGFuY2UoKTsKQEAgLTM2LDEyICszNiwxMiBAQAogICAgICAgICB9CiAgICAgfTsKIAotICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBzZXJ2bGV0Q29uZmlnKSAKKyAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgc2VydmxldENvbmZpZykKICAgICAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChzZXJ2bGV0Q29uZmlnKTsKICAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIAorCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsCiAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKICAgICAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CkBAIC01NCwzNSArNTQsMzUgQEAKICAgICAgICAgICAgIC8vIE5vdyBpbnRlcm5hbGl6ZSB0aGUgY29udGVudHMgb2YgdGhlIEhUVFAgcmVxdWVzdAogICAgICAgICAgICAgLy8gYW5kIGNyZWF0ZSBhIFNPQVBNZXNzYWdlCiAgICAgICAgICAgICBTT0FQTWVzc2FnZSBtc2cgPSBmYWMuY3JlYXRlTWVzc2FnZShoZWFkZXJzLCBpcyk7Ci0gICAgICAKKwogICAgICAgICAgICAgU09BUE1lc3NhZ2UgcmVwbHkgPSBudWxsOwogICAgICAgICAgICAgcmVwbHkgPSBvbk1lc3NhZ2UobXNnKTsKIAogICAgICAgICAgICAgaWYgKHJlcGx5ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvKiAKLSAgICAgICAgICAgICAgICAgKiBOZWVkIHRvIGNhbGwgc2F2ZUNoYW5nZXMgYmVjYXVzZSB3ZSdyZSAKLSAgICAgICAgICAgICAgICAgKiBnb2luZyB0byB1c2UgdGhlIE1pbWVIZWFkZXJzIHRvIHNldCBIVFRQIAorCisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBOZWVkIHRvIGNhbGwgc2F2ZUNoYW5nZXMgYmVjYXVzZSB3ZSdyZQorICAgICAgICAgICAgICAgICAqIGdvaW5nIHRvIHVzZSB0aGUgTWltZUhlYWRlcnMgdG8gc2V0IEhUVFAKICAgICAgICAgICAgICAgICAgKiByZXNwb25zZSBpbmZvcm1hdGlvbi4gVGhlc2UgTWltZUhlYWRlcnMKICAgICAgICAgICAgICAgICAgKiBhcmUgZ2VuZXJhdGVkIGFzIHBhcnQgb2YgdGhlIHNhdmUuCiAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgaWYgKHJlcGx5LnNhdmVSZXF1aXJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5LnNhdmVDaGFuZ2VzKCk7IAorICAgICAgICAgICAgICAgICAgICByZXBseS5zYXZlQ2hhbmdlcygpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIHJlc3Auc2V0U3RhdHVzKEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfT0spOwotICAgICAgICAgICAgICAgIHB1dEhlYWRlcnMocmVwbHkuZ2V0TWltZUhlYWRlcnMoKSwgcmVzcCk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBwdXRIZWFkZXJzKHJlcGx5LmdldE1pbWVIZWFkZXJzKCksIHJlc3ApOwogCiAgICAgICAgICAgICAgICAgLy8gV3JpdGUgb3V0IHRoZSBtZXNzYWdlIG9uIHRoZSByZXNwb25zZSBzdHJlYW0KICAgICAgICAgICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSByZXNwLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICAgICAgICAgIHJlcGx5LndyaXRlVG8ob3MpOwotICAgICAgICAgICAgICAgIG9zLmZsdXNoKCk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvcy5mbHVzaCgpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICByZXNwLnNldFN0YXR1cygKICAgICAgICAgICAgICAgICAgICAgSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19OT19DT05URU5UKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbigiU0FBSiBQT1NUIGZhaWxlZDogIiArIAorICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIlNBQUogUE9TVCBmYWlsZWQ6ICIgKwogICAgICAgICAgICAgICAgZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTk2LDE3ICs5NiwxNyBAQAogICAgICAgICAgICAgU3RyaW5nIGhlYWRlck5hbWUgPSAoU3RyaW5nKWVudW0ubmV4dEVsZW1lbnQoKTsKICAgICAgICAgICAgIFN0cmluZyBoZWFkZXJWYWx1ZSA9IHJlcS5nZXRIZWFkZXIoaGVhZGVyTmFtZSk7CiAKLSAgICAgICAgICAgIFN0cmluZ1Rva2VuaXplciB2YWx1ZXMgPSAKKyAgICAgICAgICAgIFN0cmluZ1Rva2VuaXplciB2YWx1ZXMgPQogICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdUb2tlbml6ZXIoaGVhZGVyVmFsdWUsICIsIik7CiAgICAgICAgICAgICB3aGlsZSAodmFsdWVzLmhhc01vcmVUb2tlbnMoKSkgewotICAgICAgICAgICAgICAgIGhlYWRlcnMuYWRkSGVhZGVyKGhlYWRlck5hbWUsIAorICAgICAgICAgICAgICAgIGhlYWRlcnMuYWRkSGVhZGVyKGhlYWRlck5hbWUsCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5uZXh0VG9rZW4oKS50cmltKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBoZWFkZXJzOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHB1dEhlYWRlcnMoTWltZUhlYWRlcnMgaGVhZGVycywgCisgICAgc3RhdGljIHZvaWQgcHV0SGVhZGVycyhNaW1lSGVhZGVycyBoZWFkZXJzLAogICAgICAgICAgICAgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpIHsKIAogICAgICAgICBJdGVyYXRvciBpdCA9IGhlYWRlcnMuZ2V0QWxsSGVhZGVycygpOwpAQCAtMTE1LDcgKzExNSw3IEBACiAKICAgICAgICAgICAgIFN0cmluZ1tdIHZhbHVlcyA9IGhlYWRlcnMuZ2V0SGVhZGVyKGhlYWRlci5nZXROYW1lKCkpOwogICAgICAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT0gMSkgewotICAgICAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoaGVhZGVyLmdldE5hbWUoKSwgCisgICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcihoZWFkZXIuZ2V0TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICBoZWFkZXIuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBjb25jYXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CkBAIC0xNTUsNDMgKzE1NSw0MyBAQAogICAgICAgICAgICAgU09BUEVsZW1lbnQgY29mZmVlID0gbGlzdC5hZGRDaGlsZEVsZW1lbnQoY29mZmVlTik7CiAKICAgICAgICAgICAgIE5hbWUgY29mZmVlTm0xID0gZW52ZWxvcGUuY3JlYXRlTmFtZSgiY29mZmVlLW5hbWUiKTsKLSAgICAgICAgICAgIFNPQVBFbGVtZW50IGNvZmZlZU5hbWUgPSAKKyAgICAgICAgICAgIFNPQVBFbGVtZW50IGNvZmZlZU5hbWUgPQogICAgICAgICAgICAgICAgIGNvZmZlZS5hZGRDaGlsZEVsZW1lbnQoY29mZmVlTm0xKTsKICAgICAgICAgICAgIGNvZmZlZU5hbWUuYWRkVGV4dE5vZGUoIkFyYWJpY2EiKTsKIAogICAgICAgICAgICAgTmFtZSBwcmljZU5hbWUxID0gZW52ZWxvcGUuY3JlYXRlTmFtZSgicHJpY2UiKTsKLSAgICAgICAgICAgIFNPQVBFbGVtZW50IHByaWNlMSA9IAotICAgICAgICAgICAgICAgIGNvZmZlZS5hZGRDaGlsZEVsZW1lbnQocHJpY2VOYW1lMSk7IAorICAgICAgICAgICAgU09BUEVsZW1lbnQgcHJpY2UxID0KKyAgICAgICAgICAgICAgICBjb2ZmZWUuYWRkQ2hpbGRFbGVtZW50KHByaWNlTmFtZTEpOwogICAgICAgICAgICAgcHJpY2UxLmFkZFRleHROb2RlKCI0LjUwIik7CiAKICAgICAgICAgICAgIE5hbWUgY29mZmVlTm0yID0gZW52ZWxvcGUuY3JlYXRlTmFtZSgiY29mZmVlLW5hbWUiKTsKLSAgICAgICAgICAgIFNPQVBFbGVtZW50IGNvZmZlZU5hbWUyID0gCisgICAgICAgICAgICBTT0FQRWxlbWVudCBjb2ZmZWVOYW1lMiA9CiAgICAgICAgICAgICAgICAgY29mZmVlLmFkZENoaWxkRWxlbWVudChjb2ZmZWVObTIpOwogICAgICAgICAgICAgY29mZmVlTmFtZTIuYWRkVGV4dE5vZGUoIkVzcHJlc3NvIik7CiAKICAgICAgICAgICAgIE5hbWUgcHJpY2VOYW1lMiA9IGVudmVsb3BlLmNyZWF0ZU5hbWUoInByaWNlIik7Ci0gICAgICAgICAgICBTT0FQRWxlbWVudCBwcmljZTIgPSAKLSAgICAgICAgICAgICAgICBjb2ZmZWUuYWRkQ2hpbGRFbGVtZW50KHByaWNlTmFtZTIpOyAKKyAgICAgICAgICAgIFNPQVBFbGVtZW50IHByaWNlMiA9CisgICAgICAgICAgICAgICAgY29mZmVlLmFkZENoaWxkRWxlbWVudChwcmljZU5hbWUyKTsKICAgICAgICAgICAgIHByaWNlMi5hZGRUZXh0Tm9kZSgiNS4wMCIpOwogCiAgICAgICAgICAgICBOYW1lIGNvZmZlZU5tMyA9IGVudmVsb3BlLmNyZWF0ZU5hbWUoImNvZmZlZS1uYW1lIik7Ci0gICAgICAgICAgICBTT0FQRWxlbWVudCBjb2ZmZWVOYW1lMyA9IAorICAgICAgICAgICAgU09BUEVsZW1lbnQgY29mZmVlTmFtZTMgPQogICAgICAgICAgICAgICAgIGNvZmZlZS5hZGRDaGlsZEVsZW1lbnQoY29mZmVlTm0zKTsKICAgICAgICAgICAgIGNvZmZlZU5hbWUzLmFkZFRleHROb2RlKCJEb3JhZGEiKTsKIAogICAgICAgICAgICAgTmFtZSBwcmljZU5hbWUzID0gZW52ZWxvcGUuY3JlYXRlTmFtZSgicHJpY2UiKTsKLSAgICAgICAgICAgIFNPQVBFbGVtZW50IHByaWNlMyA9IAotICAgICAgICAgICAgICAgIGNvZmZlZS5hZGRDaGlsZEVsZW1lbnQocHJpY2VOYW1lMyk7IAorICAgICAgICAgICAgU09BUEVsZW1lbnQgcHJpY2UzID0KKyAgICAgICAgICAgICAgICBjb2ZmZWUuYWRkQ2hpbGRFbGVtZW50KHByaWNlTmFtZTMpOwogICAgICAgICAgICAgcHJpY2UzLmFkZFRleHROb2RlKCI2LjAwIik7CiAKICAgICAgICAgICAgIE5hbWUgY29mZmVlTm00ID0gZW52ZWxvcGUuY3JlYXRlTmFtZSgiY29mZmVlLW5hbWUiKTsKLSAgICAgICAgICAgIFNPQVBFbGVtZW50IGNvZmZlZU5hbWU0ID0gCisgICAgICAgICAgICBTT0FQRWxlbWVudCBjb2ZmZWVOYW1lNCA9CiAgICAgICAgICAgICAgICAgY29mZmVlLmFkZENoaWxkRWxlbWVudChjb2ZmZWVObTQpOwogICAgICAgICAgICAgY29mZmVlTmFtZTQuYWRkVGV4dE5vZGUoIkhvdXNlIEJsZW5kIik7CiAKICAgICAgICAgICAgIE5hbWUgcHJpY2VOYW1lNCA9IGVudmVsb3BlLmNyZWF0ZU5hbWUoInByaWNlIik7Ci0gICAgICAgICAgICBTT0FQRWxlbWVudCBwcmljZTQgPSAKLSAgICAgICAgICAgICAgICBjb2ZmZWUuYWRkQ2hpbGRFbGVtZW50KHByaWNlTmFtZTQpOyAKKyAgICAgICAgICAgIFNPQVBFbGVtZW50IHByaWNlNCA9CisgICAgICAgICAgICAgICAgY29mZmVlLmFkZENoaWxkRWxlbWVudChwcmljZU5hbWU0KTsKICAgICAgICAgICAgIHByaWNlNC5hZGRUZXh0Tm9kZSgiNS4wMCIpOwogCiAgICAgICAgICAgICBtZXNzYWdlLnNhdmVDaGFuZ2VzKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9zcmMvY29tL3N1bi9jYi9UZXN0T3JkZXJSZXF1ZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9zcmMvY29tL3N1bi9jYi9UZXN0T3JkZXJSZXF1ZXN0LmphdmEKaW5kZXggYTA4N2JmOS4uNzYwYmUwZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovc3JjL2NvbS9zdW4vY2IvVGVzdE9yZGVyUmVxdWVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL3NyYy9jb20vc3VuL2NiL1Rlc3RPcmRlclJlcXVlc3QuamF2YQpAQCAtMjMsMTMgKzIzLDEzIEBACiBpbXBvcnQgamFrYXJ0YS54bWwuc29hcC4qOwogCiBwdWJsaWMgY2xhc3MgVGVzdE9yZGVyUmVxdWVzdCB7Ci0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIFtdIGFyZ3MpIHsgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIFtdIGFyZ3MpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFNPQVBDb25uZWN0aW9uRmFjdG9yeSBzY2YgPSBTT0FQQ29ubmVjdGlvbkZhY3RvcnkubmV3SW5zdGFuY2UoKTsKICAgICAgICAgICAgIFNPQVBDb25uZWN0aW9uIGNvbiA9IHNjZi5jcmVhdGVDb25uZWN0aW9uKCk7CiAKICAgICAgICAgICAgIE1lc3NhZ2VGYWN0b3J5IG1mID0gTWVzc2FnZUZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIFNPQVBNZXNzYWdlIG1zZyA9IG1mLmNyZWF0ZU1lc3NhZ2UoKTsKIAogICAgICAgICAgICAgLy8gQWNjZXNzIHRoZSBTT0FCQm9keSBvYmplY3QKQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgICAgIHBob25lTnVtYmVyLmFkZFRleHROb2RlKCI5MDggOTgzLTY3ODkiKTsKIAogICAgICAgICAgICAgY2hpbGROYW1lID0gZW52ZWxvcGUuY3JlYXRlTmFtZSgiZW1haWwtYWRkcmVzcyIpOwotICAgICAgICAgICAgU09BUEVsZW1lbnQgZW1haWxBZGRyZXNzID0gCisgICAgICAgICAgICBTT0FQRWxlbWVudCBlbWFpbEFkZHJlc3MgPQogICAgICAgICAgICAgICAgIGN1c3RvbWVyLmFkZENoaWxkRWxlbWVudChjaGlsZE5hbWUpOwogICAgICAgICAgICAgZW1haWxBZGRyZXNzLmFkZFRleHROb2RlKCJyYWduaXBAYW9sLmNvbSIpOwogCkBAIC04OSw3ICs4OSw3IEBACiAgICAgICAgICAgICBjaGlsZE5hbWUgPSBlbnZlbG9wZS5jcmVhdGVOYW1lKCJ6aXAiKTsKICAgICAgICAgICAgIFNPQVBFbGVtZW50IHppcCA9IGFkZHJlc3MuYWRkQ2hpbGRFbGVtZW50KGNoaWxkTmFtZSk7CiAgICAgICAgICAgICB6aXAuYWRkVGV4dE5vZGUoIjk5OTk5Iik7Ci0gICAgCisKICAgICAgICAgICAgIC8vIGxpbmUtaXRlbSAxCiAgICAgICAgICAgICBjaGlsZE5hbWUgPSBlbnZlbG9wZS5jcmVhdGVOYW1lKCJsaW5lLWl0ZW0iKTsKICAgICAgICAgICAgIFNPQVBFbGVtZW50IGxpbmVJdGVtID0gb3JkZXIuYWRkQ2hpbGRFbGVtZW50KGNoaWxkTmFtZSk7CkBAIC0xMjMsNyArMTIzLDcgQEAKICAgICAgICAgICAgIGNoaWxkTmFtZSA9IGVudmVsb3BlLmNyZWF0ZU5hbWUoInRvdGFsIik7CiAgICAgICAgICAgICBTT0FQRWxlbWVudCB0b3RhbCA9IG9yZGVyLmFkZENoaWxkRWxlbWVudChjaGlsZE5hbWUpOwogICAgICAgICAgICAgdG90YWwuYWRkVGV4dE5vZGUoIjIxLjkwIik7Ci0gICAgCisKICAgICAgICAgICAgIFVSTCBlbmRwb2ludCA9IG5ldyBVUkwoCiAgICAgICAgICAgICAgICAgVVJMSGVscGVyLmdldFNhYWpVUkwoKSArICIvb3JkZXJDb2ZmZWUiKTsKICAgICAgICAgICAgIFNPQVBNZXNzYWdlIHJlcGx5ID0gY29uLmNhbGwobXNnLCBlbmRwb2ludCk7CkBAIC0xNDgsNyArMTQ4LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbmZpcm1hdGlvbiBmb3Igb3JkZXIgIyIgKyBpZCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJZb3VyIG9yZGVyIHdpbGwgYmUgc2hpcHBlZCBvbiAiKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzaGlwcGluZ0RhdGUpOyAgICAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzaGlwcGluZ0RhdGUpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9zcmMvY29tL3N1bi9jYi9UZXN0UHJpY2VMaXN0UmVxdWVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovc3JjL2NvbS9zdW4vY2IvVGVzdFByaWNlTGlzdFJlcXVlc3QuamF2YQppbmRleCBjNDhmNTJlLi4xNzJiYWU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9zcmMvY29tL3N1bi9jYi9UZXN0UHJpY2VMaXN0UmVxdWVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL3NyYy9jb20vc3VuL2NiL1Rlc3RQcmljZUxpc3RSZXF1ZXN0LmphdmEKQEAgLTI2LDExICsyNiwxMSBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBbXSBhcmdzKSB7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFNPQVBDb25uZWN0aW9uRmFjdG9yeSBzY2YgPSAKKyAgICAgICAgICAgIFNPQVBDb25uZWN0aW9uRmFjdG9yeSBzY2YgPQogICAgICAgICAgICAgICAgIFNPQVBDb25uZWN0aW9uRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwogICAgICAgICAgICAgU09BUENvbm5lY3Rpb24gY29uID0gc2NmLmNyZWF0ZUNvbm5lY3Rpb24oKTsKIAotICAgICAJICAgIE1lc3NhZ2VGYWN0b3J5IG1mID0gTWVzc2FnZUZhY3RvcnkubmV3SW5zdGFuY2UoKTsKKyAgICAgICAgICAgICBNZXNzYWdlRmFjdG9yeSBtZiA9IE1lc3NhZ2VGYWN0b3J5Lm5ld0luc3RhbmNlKCk7CiAgICAgICAgICAgICBTT0FQTWVzc2FnZSBtc2cgPSBtZi5jcmVhdGVNZXNzYWdlKCk7CiAKICAgICAgICAgICAgIC8vIEFjY2VzcyB0aGUgU09BQkJvZHkgb2JqZWN0CkBAIC0zOCwxNCArMzgsMTQgQEAKICAgICAgICAgICAgIFNPQVBFbnZlbG9wZSBlbnZlbG9wZSA9IHBhcnQuZ2V0RW52ZWxvcGUoKTsKICAgICAgICAgICAgIFNPQVBCb2R5IGJvZHkgPSBlbnZlbG9wZS5nZXRCb2R5KCk7CiAKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBTT0FQQm9keUVsZW1lbnQgcmVxdWVzdCAKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBTT0FQQm9keUVsZW1lbnQgcmVxdWVzdAogICAgICAgICAgICAgTmFtZSBib2R5TmFtZSA9IGVudmVsb3BlLmNyZWF0ZU5hbWUoInJlcXVlc3QtcHJpY2VzIiwKICAgICAgICAgICAgICAgICAiUmVxdWVzdFByaWNlcyIsICJodHRwOi8vc29uYXRhLmNvZmZlZWJyZWFrLmNvbSIpOwogICAgICAgICAgICAgU09BUEJvZHlFbGVtZW50IHJlcXVlc3RQcmljZXMgPQogICAgICAgICAgICAgICAgIGJvZHkuYWRkQm9keUVsZW1lbnQoYm9keU5hbWUpOwotICAgICAgCisKICAgICAgICAgICAgIE5hbWUgcmVxdWVzdE5hbWUgPSBlbnZlbG9wZS5jcmVhdGVOYW1lKCJyZXF1ZXN0Iik7Ci0gICAgICAgICAgICBTT0FQRWxlbWVudCByZXF1ZXN0ID0gCisgICAgICAgICAgICBTT0FQRWxlbWVudCByZXF1ZXN0ID0KICAgICAgICAgICAgICAgICByZXF1ZXN0UHJpY2VzLmFkZENoaWxkRWxlbWVudChyZXF1ZXN0TmFtZSk7CiAgICAgICAgICAgICByZXF1ZXN0LmFkZFRleHROb2RlKCJTZW5kIHVwZGF0ZWQgcHJpY2UgbGlzdC4iKTsKIApAQCAtNjAsOSArNjAsOSBAQAogICAgICAgICAgICAgLy8gZ2V0IGNvbnRlbnRzIG9mIHJlc3BvbnNlCiAgICAgICAgICAgICBWZWN0b3IgbGlzdCA9IG5ldyBWZWN0b3IoKTsKIAotICAgICAgICAgICAgU09BUEJvZHkgcmVzcG9uc2VCb2R5ID0gCisgICAgICAgICAgICBTT0FQQm9keSByZXNwb25zZUJvZHkgPQogICAgICAgICAgICAgICAgIHJlc3BvbnNlLmdldFNPQVBQYXJ0KCkuZ2V0RW52ZWxvcGUoKS5nZXRCb2R5KCk7Ci0gICAgICAgICAgICBJdGVyYXRvciBpdDEgPSByZXNwb25zZUJvZHkuZ2V0Q2hpbGRFbGVtZW50cygpOyAKKyAgICAgICAgICAgIEl0ZXJhdG9yIGl0MSA9IHJlc3BvbnNlQm9keS5nZXRDaGlsZEVsZW1lbnRzKCk7CiAgICAgICAgICAgICAvLyBnZXQgcHJpY2UtbGlzdCBlbGVtZW50CiAgICAgICAgICAgICB3aGlsZSAoaXQxLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgIFNPQVBCb2R5RWxlbWVudCBib2R5RWwgPSAoU09BUEJvZHlFbGVtZW50KWl0MS5uZXh0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjgzM2U0Ni4uZDUwNDE2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiBidWlsZD1idWlsZAogc3JjPXNyYwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL2J1aWxkLnhtbAppbmRleCA4ZWRhMmY0Li4zOTU1NjIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL2J1aWxkLnhtbApAQCAtMjEsOSArMjEsOSBAQAogXT4KIAogPHByb2plY3QgbmFtZT0iQ29mZmVlIEJyZWFrIFNlcnZlciIgZGVmYXVsdD0iYnVpbGQiIGJhc2VkaXI9Ii4iPgotICA8dGFyZ2V0IG5hbWU9ImluaXQiPiAKLSAgICAgIDx0c3RhbXAvPiAKLSAgPC90YXJnZXQ+IAorICA8dGFyZ2V0IG5hbWU9ImluaXQiPgorICAgICAgPHRzdGFtcC8+CisgIDwvdGFyZ2V0PgogCiAgIDxwcm9wZXJ0eSBmaWxlPSIuLi8uLi9jb21tb24vYnVpbGQucHJvcGVydGllcyIvPgogICA8cHJvcGVydHkgZmlsZT0iYnVpbGQucHJvcGVydGllcyIvPgpAQCAtMzEsMTYgKzMxLDE2IEBACiAgICZ0YXJnZXRzOwogCiAgIDx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCIKLSAgIAlkZXNjcmlwdGlvbj0iQ3JlYXRlIGJ1aWxkIGRpcmVjdG9yaWVzLiI+CisgICAgICAgZGVzY3JpcHRpb249IkNyZWF0ZSBidWlsZCBkaXJlY3Rvcmllcy4iPgogICAgIDxta2RpciBkaXI9IiR7YnVpbGR9IiAvPgogICA8L3RhcmdldD4KLSAgCi0gIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9InByZXBhcmUiIAorCisgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9InByZXBhcmUiCiAgICAgIGRlc2NyaXB0aW9uPSJDb21waWxlIENCIHNlcnZlciBKYXZhIGZpbGVzIGFuZCBjb3B5IEREIGFuZCBzdGF0aWMgZmlsZXMuIiA+Ci0gICAgPGphdmFjIAotICAgICAgc3JjZGlyPSIke3NyY30iIAorICAgIDxqYXZhYworICAgICAgc3JjZGlyPSIke3NyY30iCiAgICAgICBkZXN0ZGlyPSIke2J1aWxkfSI+Ci0gICAgCTxpbmNsdWRlIG5hbWU9IioqLyouamF2YSIgLz4KKyAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qYXZhIiAvPgogICAgICAgPGNsYXNzcGF0aCByZWZpZD0iY2xhc3NwYXRoIiAvPgogICAgICAgPGNsYXNzcGF0aCBwYXRoPSIke2NvbW1vbn06Li4vamF4cnBjL2Rpc3QvamF4cnBjLWNsaWVudC5qYXI6Li4vc2Fhai9kaXN0L3NhYWotY2xpZW50LmphciIgLz4KICAgICA8L2phdmFjPgpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgPGNsYXNzcGF0aCByZWZpZD0iY2xhc3NwYXRoIiAvPgogICAgICAgPGNsYXNzcGF0aCBwYXRoPSIke2NvbW1vbn0iIC8+CiAgICAgICA8L2phdmFjPgotICAgICAgPGNvcHkgZmlsZT0iLi4vY29tbW9uL3NyYy9jb20vc3VuL2NiL0NvZmZlZUJyZWFrLnByb3BlcnRpZXMiIAorICAgICAgPGNvcHkgZmlsZT0iLi4vY29tbW9uL3NyYy9jb20vc3VuL2NiL0NvZmZlZUJyZWFrLnByb3BlcnRpZXMiCiAgICAgICAgIHRvZGlyPSIke2J1aWxkfS9jb20vc3VuL2NiIiAvPgogICAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGR9Ij4KICAgICAgIDxmaWxlc2V0IGRpcj0id2ViIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvQ2hlY2tvdXRGb3JtQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9DaGVja291dEZvcm1CZWFuLmphdmEKaW5kZXggOTc5ZTNjMS4uMzYwODY1YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9DaGVja291dEZvcm1CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9DaGVja291dEZvcm1CZWFuLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgcHJpdmF0ZSBSZXRhaWxQcmljZUxpc3QgcnBsOwogICBwcml2YXRlIE9yZGVyQ29uZmlybWF0aW9ucyBvY3M7CiAgIHByaXZhdGUgUmVzb3VyY2VCdW5kbGUgbWVzc2FnZXM7Ci0gIAorCiAKICAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CiAgICAgYm9vbGVhbiBhbGxPaz10cnVlOwpAQCAtNDcsNyArNDcsNyBAQAogICAgIH0gZWxzZSB7CiAgICAgICBlcnJvcnMucHV0KCJmaXJzdE5hbWUiLCIiKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAobGFzdE5hbWUuZXF1YWxzKCIiKSkgewogICAgICAgZXJyb3JzLnB1dCgibGFzdE5hbWUiLG1lc3NhZ2VzLmdldFN0cmluZygiTGFzdE5hbWVFcnJvciIpKTsKICAgICAgIGxhc3ROYW1lPSIiOwpAQCAtMTExLDEyICsxMTEsMTIgQEAKICAgICB9IGVsc2UgewogICAgICAgdHJ5IHsKICAgICAgICAgaW50IHggPSBJbnRlZ2VyLnBhcnNlSW50KHppcCk7Ci0gICAgICAJZXJyb3JzLnB1dCgiemlwIiwiIik7CisgICAgICAgICAgZXJyb3JzLnB1dCgiemlwIiwiIik7CiAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewogICAgICAgICBlcnJvcnMucHV0KCJ6aXAiLG1lc3NhZ2VzLmdldFN0cmluZygiWmlwRXJyb3IiKSk7CiAgICAgICAgIHppcD0iIjsKICAgICAgICAgYWxsT2s9ZmFsc2U7Ci0gICAgICB9CQorICAgICAgfQogICAgIH0KIAogICAgIGlmIChDQ051bWJlci5lcXVhbHMoIiIpKSB7CkBAIC0xMzMsMzEgKzEzMywzMSBAQAogCiAgICAgaWYgKGFsbE9rKSB7CiAgICAgICBTdHJpbmcgb3JkZXJJZCA9IENDTnVtYmVyOwotICAgICAgIAotICAgICAgQWRkcmVzc0JlYW4gYWRkcmVzcyA9IAorCisgICAgICBBZGRyZXNzQmVhbiBhZGRyZXNzID0KICAgICAgICAgbmV3IEFkZHJlc3NCZWFuKHN0cmVldCwgY2l0eSwgc3RhdGUsIHppcCk7Ci0gICAgICBDdXN0b21lckJlYW4gY3VzdG9tZXIgPSAKLSAgICAgICAgbmV3IEN1c3RvbWVyQmVhbihmaXJzdE5hbWUsIGxhc3ROYW1lLCAKKyAgICAgIEN1c3RvbWVyQmVhbiBjdXN0b21lciA9CisgICAgICAgIG5ldyBDdXN0b21lckJlYW4oZmlyc3ROYW1lLCBsYXN0TmFtZSwKICAgICAgICAgICAiKCIgKyBhcmVhQ29kZSsgIikgIiArIHBob25lTnVtYmVyLCBlbWFpbCk7Ci0gICAgICAgICAgCi0gICAgICBmb3IgKEl0ZXJhdG9yIGQgPSBycGwuZ2V0RGlzdHJpYnV0b3JzKCkuaXRlcmF0b3IoKTsgCisKKyAgICAgIGZvciAoSXRlcmF0b3IgZCA9IHJwbC5nZXREaXN0cmlidXRvcnMoKS5pdGVyYXRvcigpOwogICAgICAgICAgIGQuaGFzTmV4dCgpOyApIHsKICAgICAgICAgU3RyaW5nIGRpc3RyaWJ1dG9yID0gKFN0cmluZylkLm5leHQoKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGRpc3RyaWJ1dG9yKTsJCQkJCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihkaXN0cmlidXRvcik7CiAgICAgICAgIEFycmF5TGlzdCBsaXMgPSBuZXcgQXJyYXlMaXN0KCk7CiAgICAgICAgIEJpZ0RlY2ltYWwgcHJpY2UgPSBuZXcgQmlnRGVjaW1hbCgiMC4wMCIpOwogICAgICAgICBCaWdEZWNpbWFsIHRvdGFsID0gbmV3IEJpZ0RlY2ltYWwoIjAuMDAiKTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBjID0gY2FydC5nZXRJdGVtcygpLml0ZXJhdG9yKCk7IAorICAgICAgICBmb3IgKEl0ZXJhdG9yIGMgPSBjYXJ0LmdldEl0ZW1zKCkuaXRlcmF0b3IoKTsKICAgICAgICAgICAgIGMuaGFzTmV4dCgpOyApIHsKICAgICAgICAgICBTaG9wcGluZ0NhcnRJdGVtIHNjaSA9IChTaG9wcGluZ0NhcnRJdGVtKSBjLm5leHQoKTsKICAgICAgICAgICBpZiAoKHNjaS5nZXRJdGVtKCkuZ2V0RGlzdHJpYnV0b3IoKSkuCi0gICAgICAgICAgICAgIGVxdWFscyhkaXN0cmlidXRvcikgJiYgCisgICAgICAgICAgICAgIGVxdWFscyhkaXN0cmlidXRvcikgJiYKICAgICAgICAgICAgICAgc2NpLmdldFBvdW5kcygpLmZsb2F0VmFsdWUoKSA+IDApIHsKICAgICAgICAgICAgIHByaWNlID0gc2NpLmdldEl0ZW0oKS5nZXRXaG9sZXNhbGVQcmljZVBlclBvdW5kKCkuCi0gICAgICAgICAgICAgIG11bHRpcGx5KHNjaS5nZXRQb3VuZHMoKSk7CQorICAgICAgICAgICAgICBtdWx0aXBseShzY2kuZ2V0UG91bmRzKCkpOwogICAgICAgICAgICAgdG90YWwgPSB0b3RhbC5hZGQocHJpY2UpOwogICAgICAgICAgICAgTGluZUl0ZW1CZWFuIGxpID0gbmV3IExpbmVJdGVtQmVhbigKLSAgICAgICAgICAgICAgc2NpLmdldEl0ZW0oKS5nZXRDb2ZmZWVOYW1lKCksIHNjaS5nZXRQb3VuZHMoKSwgCisgICAgICAgICAgICAgIHNjaS5nZXRJdGVtKCkuZ2V0Q29mZmVlTmFtZSgpLCBzY2kuZ2V0UG91bmRzKCksCiAgICAgICAgICAgICAgIHNjaS5nZXRJdGVtKCkuZ2V0V2hvbGVzYWxlUHJpY2VQZXJQb3VuZCgpKTsKICAgICAgICAgICAgIGxpcy5hZGQobGkpOwogICAgICAgICAgIH0KQEAgLTE2OSwxMiArMTY5LDEyIEBACiAgICAgICAgICAgbGluZUl0ZW1zW2ldID0gKExpbmVJdGVtQmVhbilqLm5leHQoKTsKICAgICAgICAgICBpKys7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKGxpbmVJdGVtcy5sZW5ndGggIT0gMCkgewotICAgICAgICAgIE9yZGVyQmVhbiBvcmRlciA9IG5ldyBPcmRlckJlYW4oYWRkcmVzcywgY3VzdG9tZXIsIAorICAgICAgICAgIE9yZGVyQmVhbiBvcmRlciA9IG5ldyBPcmRlckJlYW4oYWRkcmVzcywgY3VzdG9tZXIsCiAgICAgICAgICAgICBvcmRlcklkLCBsaW5lSXRlbXMsIHRvdGFsKTsKLSAgICAgICAgICAgIAotICAgICAgICAgIFN0cmluZyBTQUFKT3JkZXJVUkwgPSAKKworICAgICAgICAgIFN0cmluZyBTQUFKT3JkZXJVUkwgPQogICAgICAgICAgICAgVVJMSGVscGVyLmdldFNhYWpVUkwoKSArICIvb3JkZXJDb2ZmZWUiOwogICAgICAgICAgIGlmIChkaXN0cmlidXRvci5lcXVhbHMoU0FBSk9yZGVyVVJMKSkgewogICAgICAgICAgICAgT3JkZXJSZXF1ZXN0IG9yID0gbmV3IE9yZGVyUmVxdWVzdChTQUFKT3JkZXJVUkwpOwpAQCAtMTgyLDE3ICsxODIsMTcgQEAKICAgICAgICAgICB9CiAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBPcmRlckNhbGxlciBvY2FsbGVyID0gbmV3IE9yZGVyQ2FsbGVyKGRpc3RyaWJ1dG9yKTsKLSAgICAgICAgICAgIGNvbmZpcm1hdGlvbiA9IG9jYWxsZXIucGxhY2VPcmRlcihvcmRlcik7CQkJCQorICAgICAgICAgICAgY29uZmlybWF0aW9uID0gb2NhbGxlci5wbGFjZU9yZGVyKG9yZGVyKTsKICAgICAgICAgICB9Ci0gICAgICAgICAgT3JkZXJDb25maXJtYXRpb24gb2MgPSAKKyAgICAgICAgICBPcmRlckNvbmZpcm1hdGlvbiBvYyA9CiAgICAgICAgICAgICBuZXcgT3JkZXJDb25maXJtYXRpb24ob3JkZXIsIGNvbmZpcm1hdGlvbik7CiAgICAgICAgICAgb2NzLmFkZChvYyk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGFsbE9rOwogICB9Ci0gIAorCiAgIHB1YmxpYyBIYXNoTWFwIGdldEVycm9ycygpIHsKICAgICByZXR1cm4gZXJyb3JzOwogICB9CkBAIC0yMjAsNyArMjIwLDcgQEAKICAgIHRoaXMubWVzc2FnZXMgPSBtZXNzYWdlczsKICAgIG9jcyA9IG5ldyBPcmRlckNvbmZpcm1hdGlvbnMoKTsKICAgfQotICAKKwogICBwdWJsaWMgU3RyaW5nIGdldEZpcnN0TmFtZSgpIHsKICAgICByZXR1cm4gZmlyc3ROYW1lOwogICB9CkBAIC0yNDAsMzggKzI0MCwzOCBAQAogICBwdWJsaWMgU3RyaW5nIGdldEFyZWFDb2RlKCkgewogICAgIHJldHVybiBhcmVhQ29kZTsKICAgfQotICAKKwogICBwdWJsaWMgU3RyaW5nIGdldFBob25lTnVtYmVyKCkgewogICAgIHJldHVybiBwaG9uZU51bWJlcjsKICAgfQotICAgCisKICAgcHVibGljIFN0cmluZyBnZXRTdHJlZXQoKSB7CiAgICAgcmV0dXJuIHN0cmVldDsKICAgfQotICAgCisKICAgcHVibGljIFN0cmluZyBnZXRDaXR5KCkgewogICAgIHJldHVybiBjaXR5OwogICB9Ci0gICAKKwogICBwdWJsaWMgU3RyaW5nIGdldFN0YXRlKCkgewogICAgIHJldHVybiBzdGF0ZTsKICAgfQotICAgCi0gIAorCisKICAgcHVibGljIGludCBnZXRDQ09wdGlvbigpIHsKICAgICByZXR1cm4gQ0NPcHRpb247CiAgIH0KLSAKLSAgCisKKwogICBwdWJsaWMgU3RyaW5nIGdldENDTnVtYmVyKCkgewogICAgIHJldHVybiBDQ051bWJlcjsKICAgfQotICAgCi0gIAorCisKICAgcHVibGljIE9yZGVyQ29uZmlybWF0aW9ucyBnZXRPcmRlckNvbmZpcm1hdGlvbnMoKSB7CiAgICAgcmV0dXJuIG9jczsKICAgfQotICAKKwogICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlcyhSZXNvdXJjZUJ1bmRsZSBtZXNzYWdlcykgewogICAgIHRoaXMubWVzc2FnZXM9bWVzc2FnZXM7CiAgIH0KQEAgLTI5OCwyNyArMjk4LDI3IEBACiAgIHB1YmxpYyB2b2lkIHNldFBob25lTnVtYmVyKFN0cmluZyBwaG9uZU51bWJlcikgewogICAgIHRoaXMucGhvbmVOdW1iZXI9cGhvbmVOdW1iZXIgOwogICB9Ci0gIAorCiAgIHB1YmxpYyB2b2lkIHNldFN0cmVldChTdHJpbmcgc3RyZWV0KSB7CiAgICAgdGhpcy5zdHJlZXQ9c3RyZWV0IDsKICAgfQotICAKKwogICBwdWJsaWMgdm9pZCBzZXRDaXR5KFN0cmluZyBjaXR5KSB7CiAgICAgdGhpcy5jaXR5PWNpdHkgOwogICB9Ci0gIAorCiAgIHB1YmxpYyB2b2lkIHNldFN0YXRlKFN0cmluZyBzdGF0ZSkgewogICAgIHRoaXMuc3RhdGU9c3RhdGUgOwogICB9Ci0gIAorCiAgIHB1YmxpYyB2b2lkIHNldENDT3B0aW9uKGludCBDQ09wdGlvbikgewogICAgIHRoaXMuQ0NPcHRpb249Q0NPcHRpb24gOwogICB9CiAgIHB1YmxpYyB2b2lkIHNldENDTnVtYmVyKFN0cmluZyBDQ051bWJlcikgewogICAgIHRoaXMuQ0NOdW1iZXI9Q0NOdW1iZXIgOwogICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFcnJvcnMoU3RyaW5nIGtleSwgU3RyaW5nIG1zZykgewkKKworICBwdWJsaWMgdm9pZCBzZXRFcnJvcnMoU3RyaW5nIGtleSwgU3RyaW5nIG1zZykgewogICAgIGVycm9ycy5wdXQoa2V5LG1zZyk7CiAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9EaXNwYXRjaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL0Rpc3BhdGNoZXIuamF2YQppbmRleCBkYjAzYzlmLi43ZmI0NzQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL0Rpc3BhdGNoZXIuamF2YQpAQCAtMjIsMTIgKzIyLDEyIEBACiBpbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7CiAKIHB1YmxpYyBjbGFzcyBEaXNwYXRjaGVyIGV4dGVuZHMgSHR0cFNlcnZsZXQgewotICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgeyAgIAorICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgewogICAgIEh0dHBTZXNzaW9uIHNlc3Npb24gPSByZXF1ZXN0LmdldFNlc3Npb24oKTsKICAgICBSZXNvdXJjZUJ1bmRsZSBtZXNzYWdlcyA9IChSZXNvdXJjZUJ1bmRsZSlzZXNzaW9uLmdldEF0dHJpYnV0ZSgibWVzc2FnZXMiKTsKICAgICBpZiAobWVzc2FnZXMgPT0gbnVsbCkgewogICAgICAgICBMb2NhbGUgbG9jYWxlPXJlcXVlc3QuZ2V0TG9jYWxlKCk7Ci0gICAgICAgIG1lc3NhZ2VzID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJjb20uc3VuLmNiLm1lc3NhZ2VzLkNCTWVzc2FnZXMiLCBsb2NhbGUpOyAKKyAgICAgICAgbWVzc2FnZXMgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoImNvbS5zdW4uY2IubWVzc2FnZXMuQ0JNZXNzYWdlcyIsIGxvY2FsZSk7CiAgICAgICAgIHNlc3Npb24uc2V0QXR0cmlidXRlKCJtZXNzYWdlcyIsIG1lc3NhZ2VzKTsKICAgICB9CiAKQEAgLTk1LDcgKzk1LDcgQEAKICAgICAgICAgY2FydCA9IG5ldyBTaG9wcGluZ0NhcnQocnBsKTsKICAgICAgICAgc2Vzc2lvbi5zZXRBdHRyaWJ1dGUoImNhcnQiLCBjYXJ0KTsKICAgICB9Ci0gCisKICAgICBpZiAoc2VsZWN0ZWRTY3JlZW4uZXF1YWxzKCIvb3JkZXJGb3JtIikpIHsKICAgICAgIGNhcnQuY2xlYXIoKTsKICAgICAgIGZvcihJdGVyYXRvciBpID0gcnBsLmdldEl0ZW1zKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9KQVhSUXVlcnlCeU5hbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvSkFYUlF1ZXJ5QnlOYW1lLmphdmEKaW5kZXggMWQ3YTNkNy4uOTczZWZlNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9KQVhSUXVlcnlCeU5hbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL0pBWFJRdWVyeUJ5TmFtZS5qYXZhCkBAIC0xNiwyMCArMTYsMjAgQEAKIAogcGFja2FnZSBjb20uc3VuLmNiOwogCi1pbXBvcnQgamF2YXgueG1sLnJlZ2lzdHJ5Lio7IAotaW1wb3J0IGphdmF4LnhtbC5yZWdpc3RyeS5pbmZvbW9kZWwuKjsgCitpbXBvcnQgamF2YXgueG1sLnJlZ2lzdHJ5Lio7CitpbXBvcnQgamF2YXgueG1sLnJlZ2lzdHJ5LmluZm9tb2RlbC4qOwogaW1wb3J0IGphdmEubmV0Lio7CiBpbXBvcnQgamF2YS51dGlsLio7CiAKIC8qKgotICogVGhlIEpBWFJRdWVyeUJ5TmFtZSBjbGFzcyBjb25zaXN0cyBvZiBhIG1haW4gbWV0aG9kLCBhIAotICogbWFrZUNvbm5lY3Rpb24gbWV0aG9kLCBhbiBleGVjdXRlUXVlcnkgbWV0aG9kLCBhbmQgc29tZSAKLSAqIGhlbHBlciBtZXRob2RzLiBJdCBzZWFyY2hlcyBhIHJlZ2lzdHJ5IGZvciAKLSAqIGluZm9ybWF0aW9uIGFib3V0IG9yZ2FuaXphdGlvbnMgd2hvc2UgbmFtZXMgY29udGFpbiBhIAorICogVGhlIEpBWFJRdWVyeUJ5TmFtZSBjbGFzcyBjb25zaXN0cyBvZiBhIG1haW4gbWV0aG9kLCBhCisgKiBtYWtlQ29ubmVjdGlvbiBtZXRob2QsIGFuIGV4ZWN1dGVRdWVyeSBtZXRob2QsIGFuZCBzb21lCisgKiBoZWxwZXIgbWV0aG9kcy4gSXQgc2VhcmNoZXMgYSByZWdpc3RyeSBmb3IKKyAqIGluZm9ybWF0aW9uIGFib3V0IG9yZ2FuaXphdGlvbnMgd2hvc2UgbmFtZXMgY29udGFpbiBhCiAgKiB1c2VyLXN1cHBsaWVkIHN0cmluZy4KLSAqIAotICogVG8gcnVuIHRoaXMgcHJvZ3JhbSwgdXNlIHRoZSBjb21tYW5kIAotICogCisgKgorICogVG8gcnVuIHRoaXMgcHJvZ3JhbSwgdXNlIHRoZSBjb21tYW5kCisgKgogICogICAgIGFudCAtRHF1ZXJ5LXN0cmluZz08dmFsdWU+IHJ1bi1xdWVyeQogICoKICAqIGFmdGVyIHN0YXJ0aW5nIFRvbWNhdCBhbmQgWGluZGljZS4KQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgfQogICAgICAgICBTdHJpbmcgcXVlcnlTdHJpbmcgPSBuZXcgU3RyaW5nKGFyZ3NbMF0pOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlF1ZXJ5IHN0cmluZyBpcyAiICsgcXVlcnlTdHJpbmcpOwotICAgICAgICAKKwogICAgICAgICBKQVhSUXVlcnlCeU5hbWUganEgPSBuZXcgSkFYUlF1ZXJ5QnlOYW1lKCk7CiAKICAgICAgICAgY29ubmVjdGlvbiA9IGpxLm1ha2VDb25uZWN0aW9uKHF1ZXJ5VVJMLCBwdWJsaXNoVVJMKTsKQEAgLTYxLDExICs2MSwxMSBAQAogICAgIC8qKgogICAgICAqIEVzdGFibGlzaGVzIGEgY29ubmVjdGlvbiB0byBhIHJlZ2lzdHJ5LgogICAgICAqCi0gICAgICogQHBhcmFtIHF1ZXJ5VXJsCXRoZSBVUkwgb2YgdGhlIHF1ZXJ5IHJlZ2lzdHJ5Ci0gICAgICogQHBhcmFtIHB1Ymxpc2hVcmwJdGhlIFVSTCBvZiB0aGUgcHVibGlzaCByZWdpc3RyeQorICAgICAqIEBwYXJhbSBxdWVyeVVybCAgICB0aGUgVVJMIG9mIHRoZSBxdWVyeSByZWdpc3RyeQorICAgICAqIEBwYXJhbSBwdWJsaXNoVXJsICAgIHRoZSBVUkwgb2YgdGhlIHB1Ymxpc2ggcmVnaXN0cnkKICAgICAgKiBAcmV0dXJuIHRoZSBjb25uZWN0aW9uCiAgICAgICovCi0gICAgcHVibGljIENvbm5lY3Rpb24gbWFrZUNvbm5lY3Rpb24oU3RyaW5nIHF1ZXJ5VXJsLCAKKyAgICBwdWJsaWMgQ29ubmVjdGlvbiBtYWtlQ29ubmVjdGlvbihTdHJpbmcgcXVlcnlVcmwsCiAgICAgICAgIFN0cmluZyBwdWJsaXNoVXJsKSB7CiAKICAgICAgICAgLyoKQEAgLTc4LDI0ICs3OCwyNCBAQAogICAgICAgICBTdHJpbmcgaHR0cFByb3h5SG9zdCA9ICIiOwogICAgICAgICBTdHJpbmcgaHR0cFByb3h5UG9ydCA9ICIiOwogCi0gICAgICAgIC8qIAotICAgICAgICAgKiBEZWZpbmUgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMuIAorICAgICAgICAvKgorICAgICAgICAgKiBEZWZpbmUgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMuCiAgICAgICAgICAqIEZvciBzaW1wbGUgcXVlcmllcywgeW91IG5lZWQgdGhlIHF1ZXJ5IFVSTC4KLSAgICAgICAgICogVG8gb2J0YWluIHRoZSBjb25uZWN0aW9uIGZhY3RvcnkgY2xhc3MsIHNldCBhIFN5c3RlbSAKKyAgICAgICAgICogVG8gb2J0YWluIHRoZSBjb25uZWN0aW9uIGZhY3RvcnkgY2xhc3MsIHNldCBhIFN5c3RlbQogICAgICAgICAgKiAgIHByb3BlcnR5LgogICAgICAgICAgKi8KICAgICAgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CiAgICAgICAgIHByb3BzLnNldFByb3BlcnR5KCJqYXZheC54bWwucmVnaXN0cnkucXVlcnlNYW5hZ2VyVVJMIiwKICAgICAgICAgICAgIHF1ZXJ5VXJsKTsKLSAgICAgICAgcHJvcHMuc2V0UHJvcGVydHkoImNvbS5zdW4ueG1sLnJlZ2lzdHJ5Lmh0dHAucHJveHlIb3N0IiwgCisgICAgICAgIHByb3BzLnNldFByb3BlcnR5KCJjb20uc3VuLnhtbC5yZWdpc3RyeS5odHRwLnByb3h5SG9zdCIsCiAgICAgICAgICAgICBodHRwUHJveHlIb3N0KTsKLSAgICAgICAgcHJvcHMuc2V0UHJvcGVydHkoImNvbS5zdW4ueG1sLnJlZ2lzdHJ5Lmh0dHAucHJveHlQb3J0IiwgCisgICAgICAgIHByb3BzLnNldFByb3BlcnR5KCJjb20uc3VuLnhtbC5yZWdpc3RyeS5odHRwLnByb3h5UG9ydCIsCiAgICAgICAgICAgICBodHRwUHJveHlQb3J0KTsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBjb25uZWN0aW9uLCBwYXNzaW5nIGl0IHRoZSAKKyAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgY29ubmVjdGlvbiwgcGFzc2luZyBpdCB0aGUKICAgICAgICAgICAgIC8vIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcwotICAgICAgICAgICAgQ29ubmVjdGlvbkZhY3RvcnkgZmFjdG9yeSA9IAorICAgICAgICAgICAgQ29ubmVjdGlvbkZhY3RvcnkgZmFjdG9yeSA9CiAgICAgICAgICAgICAgICAgQ29ubmVjdGlvbkZhY3RvcnkubmV3SW5zdGFuY2UoKTsKICAgICAgICAgICAgIGZhY3Rvcnkuc2V0UHJvcGVydGllcyhwcm9wcyk7CiAgICAgICAgICAgICBjb25uZWN0aW9uID0gZmFjdG9yeS5jcmVhdGVDb25uZWN0aW9uKCk7CkBAIC0xMTAsMTEgKzExMCwxMSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb25uZWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgIG9yZ2FuaXphdGlvbnMgY29udGFpbmluZyBhIHN0cmluZy4KICAgICAgKgotICAgICAqIEBwYXJhbSBxU3RyaW5nCXRoZSBzdHJpbmcgYXJndW1lbnQKKyAgICAgKiBAcGFyYW0gcVN0cmluZyAgICB0aGUgc3RyaW5nIGFyZ3VtZW50CiAgICAgICogQHJldHVybiBhIGNvbGxlY3Rpb24gb2Ygb3JnYW5pemF0aW9ucwogICAgICAqLwogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGV4ZWN1dGVRdWVyeShTdHJpbmcgcVN0cmluZykgewpAQCAtMTM3LDI1ICsxMzcsMjUgQEAKICAgICAgICAgICAgIC8vbmFtZVBhdHRlcm5zLmFkZCgiJSIgKyBxU3RyaW5nICsgIiUiKTsKIAogICAgICAgICAgICAgLy8gRmluZCB1c2luZyB0aGUgbmFtZQotICAgICAgICAgICAgQnVsa1Jlc3BvbnNlIHJlc3BvbnNlID0gCi0gICAgICAgICAgICAgICAgYnFtLmZpbmRPcmdhbml6YXRpb25zKGZpbmRRdWFsaWZpZXJzLCAKKyAgICAgICAgICAgIEJ1bGtSZXNwb25zZSByZXNwb25zZSA9CisgICAgICAgICAgICAgICAgYnFtLmZpbmRPcmdhbml6YXRpb25zKGZpbmRRdWFsaWZpZXJzLAogICAgICAgICAgICAgICAgICAgICBuYW1lUGF0dGVybnMsIG51bGwsIG51bGwsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgb3JncyA9IHJlc3BvbnNlLmdldENvbGxlY3Rpb24oKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSAKLSAgICAgICAgCisgICAgICAgIH0KKwogICAgICAgICByZXR1cm4gb3JnczsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBuYW1lIHZhbHVlIGZvciBhIHJlZ2lzdHJ5IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbSBybwlhIFJlZ2lzdHJ5T2JqZWN0Ci0gICAgICogQHJldHVybgkJdGhlIFN0cmluZyB2YWx1ZQorICAgICAqIEBwYXJhbSBybyAgICBhIFJlZ2lzdHJ5T2JqZWN0CisgICAgICogQHJldHVybiAgICAgICAgdGhlIFN0cmluZyB2YWx1ZQogICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZShSZWdpc3RyeU9iamVjdCBybykgCisgICAgcHVibGljIFN0cmluZyBnZXROYW1lKFJlZ2lzdHJ5T2JqZWN0IHJvKQogICAgICAgICB0aHJvd3MgSkFYUkV4Y2VwdGlvbiB7CiAKICAgICAgICAgdHJ5IHsKQEAgLTE2NCwxNCArMTY0LDE0IEBACiAgICAgICAgICAgICByZXR1cm4gIk5vIE5hbWUiOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgZGVzY3JpcHRpb24gdmFsdWUgZm9yIGEgcmVnaXN0cnkgb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtIHJvCWEgUmVnaXN0cnlPYmplY3QKLSAgICAgKiBAcmV0dXJuCQl0aGUgU3RyaW5nIHZhbHVlCisgICAgICogQHBhcmFtIHJvICAgIGEgUmVnaXN0cnlPYmplY3QKKyAgICAgKiBAcmV0dXJuICAgICAgICB0aGUgU3RyaW5nIHZhbHVlCiAgICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbihSZWdpc3RyeU9iamVjdCBybykgCisgICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbihSZWdpc3RyeU9iamVjdCBybykKICAgICAgICAgdGhyb3dzIEpBWFJFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIHJvLmdldERlc2NyaXB0aW9uKCkuZ2V0VmFsdWUoKTsKQEAgLTE3OSwxNCArMTc5LDE0IEBACiAgICAgICAgICAgICByZXR1cm4gIk5vIERlc2NyaXB0aW9uIjsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGtleSBpZCB2YWx1ZSBmb3IgYSByZWdpc3RyeSBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gcm8JYSBSZWdpc3RyeU9iamVjdAotICAgICAqIEByZXR1cm4JCXRoZSBTdHJpbmcgdmFsdWUKKyAgICAgKiBAcGFyYW0gcm8gICAgYSBSZWdpc3RyeU9iamVjdAorICAgICAqIEByZXR1cm4gICAgICAgIHRoZSBTdHJpbmcgdmFsdWUKICAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldEtleShSZWdpc3RyeU9iamVjdCBybykgCisgICAgcHVibGljIFN0cmluZyBnZXRLZXkoUmVnaXN0cnlPYmplY3Qgcm8pCiAgICAgICAgIHRocm93cyBKQVhSRXhjZXB0aW9uIHsKIAogICAgICAgICB0cnkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9PcmRlckNvbmZpcm1hdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9PcmRlckNvbmZpcm1hdGlvbi5qYXZhCmluZGV4IDJiODllYzcuLmE5NTE1NDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvT3JkZXJDb25maXJtYXRpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL09yZGVyQ29uZmlybWF0aW9uLmphdmEKQEAgLTE1LDcgKzE1LDcgQEAKICAqLwogCiBwYWNrYWdlIGNvbS5zdW4uY2I7Ci0gCisKIHB1YmxpYyBjbGFzcyBPcmRlckNvbmZpcm1hdGlvbiB7CiAKICAgcHJpdmF0ZSBPcmRlckJlYW4gb2I7CkBAIC0yNSwxNCArMjUsMTQgQEAKICAgICAgdGhpcy5vYiA9IG9iOwogICAgICB0aGlzLmNiID0gY2I7CiAgIH0KLSAgCisKICAgcHVibGljIE9yZGVyQmVhbiBnZXRPcmRlckJlYW4oKSB7CiAgICAgcmV0dXJuIG9iOwogICB9Ci0gIAorCiAgIHB1YmxpYyBDb25maXJtYXRpb25CZWFuIGdldENvbmZpcm1hdGlvbkJlYW4oKSB7CiAgICAgcmV0dXJuIGNiOwotICB9IAorICB9CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9PcmRlckNvbmZpcm1hdGlvbnMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvT3JkZXJDb25maXJtYXRpb25zLmphdmEKaW5kZXggYmYxOGZkMy4uNGU1NGJmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9PcmRlckNvbmZpcm1hdGlvbnMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL09yZGVyQ29uZmlybWF0aW9ucy5qYXZhCkBAIC0xNywxOSArMTcsMTkgQEAKIHBhY2thZ2UgY29tLnN1bi5jYjsKIAogaW1wb3J0IGphdmEudXRpbC4qOwotIAorCiBwdWJsaWMgY2xhc3MgT3JkZXJDb25maXJtYXRpb25zIHsKICAgQXJyYXlMaXN0IGl0ZW1zID0gbnVsbDsKIAogICBwdWJsaWMgT3JkZXJDb25maXJtYXRpb25zKCkgewotICAJaXRlbXMgPSBuZXcgQXJyYXlMaXN0KCk7CisgICAgICBpdGVtcyA9IG5ldyBBcnJheUxpc3QoKTsKICAgfQogCiAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBhZGQoT3JkZXJDb25maXJtYXRpb24gb2MpIHsKICAgICBpdGVtcy5hZGQob2MpOwogICB9Ci0gIAotICAKKworCiAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgQ29sbGVjdGlvbiBnZXRJdGVtcygpIHsKICAgICAgIHJldHVybiBpdGVtczsKICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9SZXRhaWxQcmljZUxpc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvUmV0YWlsUHJpY2VMaXN0LmphdmEKaW5kZXggMzU3YzY3MS4uZjUxNzFlNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9SZXRhaWxQcmljZUxpc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL1JldGFpbFByaWNlTGlzdC5qYXZhCkBAIC0xOSw4ICsxOSw4IEBACiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7CiBpbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7CiBpbXBvcnQgamF2YS51dGlsLio7Ci1pbXBvcnQgamF2YXgueG1sLnJlZ2lzdHJ5Lio7IAotaW1wb3J0IGphdmF4LnhtbC5yZWdpc3RyeS5pbmZvbW9kZWwuKjsgCitpbXBvcnQgamF2YXgueG1sLnJlZ2lzdHJ5Lio7CitpbXBvcnQgamF2YXgueG1sLnJlZ2lzdHJ5LmluZm9tb2RlbC4qOwogCiBwdWJsaWMgY2xhc3MgUmV0YWlsUHJpY2VMaXN0IGltcGxlbWVudHMgU2VyaWFsaXphYmxlIHsKIApAQCAtNjIsNyArNjIsNyBAQAogCiAgICAgICAgICAgICAgIC8vIEdldCBwcmljZSBsaXN0IGZyb20gc2VydmljZSBhdCBkaXN0cmlidXRvciBVUkkKICAgICAgICAgICAgICAgUHJpY2VMaXN0QmVhbiBwcmljZUxpc3QgPSBQcmljZUZldGNoZXIuZ2V0UHJpY2VMaXN0KGRpc3RyaWJ1dG9yKTsKLSAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICBQcmljZUl0ZW1CZWFuW10gaXRlbXMgPSBwcmljZUxpc3QuZ2V0UHJpY2VJdGVtcygpOwogICAgICAgICAgICAgICByZXRhaWxQcmljZUl0ZW1zID0gbmV3IEFycmF5TGlzdCgpOwogICAgICAgICAgICAgICBkaXN0cmlidXRvcnMgPSBuZXcgQXJyYXlMaXN0KCk7CkBAIC03MiwxOSArNzIsMTkgQEAKICAgICAgICAgICAgICAgICBSZXRhaWxQcmljZUl0ZW0gcGkgPSBuZXcgUmV0YWlsUHJpY2VJdGVtKGl0ZW1zW2ldLmdldENvZmZlZU5hbWUoKSwgaXRlbXNbaV0uZ2V0UHJpY2VQZXJQb3VuZCgpLCBwcmljZSAsIGRpc3RyaWJ1dG9yKTsKICAgICAgICAgICAgICAgICByZXRhaWxQcmljZUl0ZW1zLmFkZChwaSk7CiAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZGlzdHJpYnV0b3JzLmFkZChkaXN0cmlidXRvcik7IAorICAgICAgICAgICAgICBkaXN0cmlidXRvcnMuYWRkKGRpc3RyaWJ1dG9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgICAgLy8gUHJpbnQgc3BhY2VyIGJldHdlZW4gb3JnYW5pemF0aW9ucwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIC0tLSAiKTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgIH0gZmluYWxseSAgewogICAgICAgICAvLyBBdCBlbmQsIGNsb3NlIGNvbm5lY3Rpb24gdG8gcmVnaXN0cnkKICAgICAgICAgaWYgKGNvbm5lY3Rpb24gIT0gbnVsbCkgewogICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgCWNvbm5lY3Rpb24uY2xvc2UoKTsKKyAgICAgICAgICAgICAgY29ubmVjdGlvbi5jbG9zZSgpOwogICAgICAgICAgIH0gY2F0Y2ggKEpBWFJFeGNlcHRpb24gamUpIHt9CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTk5LDggKzk5LDggQEAKICAgICAgICAgUmV0YWlsUHJpY2VJdGVtIHJwaSA9IG5ldyBSZXRhaWxQcmljZUl0ZW0ocGliLmdldENvZmZlZU5hbWUoKSwgcGliLmdldFByaWNlUGVyUG91bmQoKSwgcHJpY2UsIFNBQUpPcmRlclVSTCk7CiAgICAgICAgIHJldGFpbFByaWNlSXRlbXMuYWRkKHJwaSk7CiAgICAgICB9Ci0gICAgICBkaXN0cmlidXRvcnMuYWRkKFNBQUpPcmRlclVSTCk7IAotIAkJfQorICAgICAgZGlzdHJpYnV0b3JzLmFkZChTQUFKT3JkZXJVUkwpOworICAgICAgICAgfQogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRJdGVtcygpIHsKICAgICAgICAgcmV0dXJuIHJldGFpbFByaWNlSXRlbXM7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL1JldGFpbFByaWNlTGlzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvUmV0YWlsUHJpY2VMaXN0U2VydmxldC5qYXZhCmluZGV4IDlmZDYyMGQuLmY5YmQ1NDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvUmV0YWlsUHJpY2VMaXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvUmV0YWlsUHJpY2VMaXN0U2VydmxldC5qYXZhCkBAIC0yNCwyMyArMjQsMjMgQEAKICAqIFRoaXMgaXMgYSBzaW1wbGUgZXhhbXBsZSBvZiBhbiBIVFRQIFNlcnZsZXQuICBJdCByZXNwb25kcyB0byB0aGUgR0VUCiAgKiBtZXRob2Qgb2YgdGhlIEhUVFAgcHJvdG9jb2wuCiAgKi8KLXB1YmxpYyBjbGFzcyBSZXRhaWxQcmljZUxpc3RTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgeyAKK3B1YmxpYyBjbGFzcyBSZXRhaWxQcmljZUxpc3RTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAgICBwdWJsaWMgdm9pZCBkb0dldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAgICAgIAotICAJCUh0dHBTZXNzaW9uIHNlc3Npb24gPSByZXF1ZXN0LmdldFNlc3Npb24oKTsKLSAJCQlTZXJ2bGV0Q29udGV4dCBjb250ZXh0ID0gZ2V0U2VydmxldENvbnRleHQoKTsKKworICAgICAgICAgIEh0dHBTZXNzaW9uIHNlc3Npb24gPSByZXF1ZXN0LmdldFNlc3Npb24oKTsKKyAgICAgICAgICAgICBTZXJ2bGV0Q29udGV4dCBjb250ZXh0ID0gZ2V0U2VydmxldENvbnRleHQoKTsKICAgICAgIFJldGFpbFByaWNlTGlzdCBycGwgPSBuZXcgUmV0YWlsUHJpY2VMaXN0KCk7CiAgICAgICBjb250ZXh0LnNldEF0dHJpYnV0ZSgicmV0YWlsUHJpY2VMaXN0IiwgcnBsKTsKICAgICAgIFNob3BwaW5nQ2FydCBjYXJ0ID0gbmV3IFNob3BwaW5nQ2FydChycGwpOwogICAgICAgc2Vzc2lvbi5zZXRBdHRyaWJ1dGUoImNhcnQiLCBjYXJ0KTsKIAogICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAKIAotICAJCS8vIHRoZW4gd3JpdGUgdGhlIGRhdGEgb2YgdGhlIHJlc3BvbnNlCisKKyAgICAgICAgICAvLyB0aGVuIHdyaXRlIHRoZSBkYXRhIG9mIHRoZSByZXNwb25zZQogICAgICAgb3V0LnByaW50bG4oIjxodG1sPjxib2R5ICBiZ2NvbG9yPVwiI2ZmZmZmZlwiPiIgKwogICAgICAgICAgICAgICAgICAgIlJlbG9hZGVkIHByaWNlIGxpc3QuIiArICI8L2h0bWw+PC9ib2R5PiIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvU2hvcHBpbmdDYXJ0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL1Nob3BwaW5nQ2FydC5qYXZhCmluZGV4IGE1YmQ4ZjEuLjJmNzFlZDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvU2hvcHBpbmdDYXJ0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9TaG9wcGluZ0NhcnQuamF2YQpAQCAtMjAsMTUgKzIwLDE1IEBACiBpbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7CiBpbXBvcnQgY29tLnN1bi5jYi5SZXRhaWxQcmljZUxpc3Q7CiBpbXBvcnQgY29tLnN1bi5jYi5SZXRhaWxQcmljZUl0ZW07Ci0gCisKIHB1YmxpYyBjbGFzcyBTaG9wcGluZ0NhcnQgewogICBBcnJheUxpc3QgaXRlbXMgPSBudWxsOwogICBCaWdEZWNpbWFsIHRvdGFsID0gbmV3IEJpZ0RlY2ltYWwoIjAuMDAiKTsKICAgaW50IG51bWJlck9mSXRlbXMgPSAwOwotICAKKwogICBwdWJsaWMgU2hvcHBpbmdDYXJ0KFJldGFpbFByaWNlTGlzdCBycGwpIHsKICAgICAgIGl0ZW1zID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgCisKICAgICAgIGZvcihJdGVyYXRvciBpID0gcnBsLmdldEl0ZW1zKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkgewogICAgICAgICBSZXRhaWxQcmljZUl0ZW0gaXRlbSA9IChSZXRhaWxQcmljZUl0ZW0pIGkubmV4dCgpOwogICAgICAgICBTaG9wcGluZ0NhcnRJdGVtIHNjaSA9IG5ldyBTaG9wcGluZ0NhcnRJdGVtKGl0ZW0sIG5ldyBCaWdEZWNpbWFsKCIwLjAiKSwgbmV3IEJpZ0RlY2ltYWwoIjAuMDAiKSk7CkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgIG51bWJlck9mSXRlbXMrKzsKICAgICAgIH0KICAgfQotICAKKwogICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgYWRkIChTaG9wcGluZ0NhcnRJdGVtIGl0ZW0pIHsKICAgICBpdGVtcy5hZGQoaXRlbSk7CiAgICAgdG90YWwgPSB0b3RhbC5hZGQoaXRlbS5nZXRQcmljZSgpKS5zZXRTY2FsZSgyKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvU2hvcHBpbmdDYXJ0SXRlbS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9TaG9wcGluZ0NhcnRJdGVtLmphdmEKaW5kZXggZWRlZDM5ZS4uM2ZlNzUxMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9TaG9wcGluZ0NhcnRJdGVtLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9TaG9wcGluZ0NhcnRJdGVtLmphdmEKQEAgLTUxLDcgKzUxLDcgQEAKIAogICAgIHB1YmxpYyBCaWdEZWNpbWFsIGdldFBvdW5kcygpIHsKICAgICAgICAgcmV0dXJuIHBvdW5kczsKLSAgICB9CQkgCisgICAgfQogCiAgICAgcHVibGljIEJpZ0RlY2ltYWwgZ2V0UHJpY2UoKSB7CiAgICAgICAgIHJldHVybiBwcmljZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvdGVtcGxhdGUvRGVidWcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvdGVtcGxhdGUvRGVidWcuamF2YQppbmRleCA5YzE2MTlkLi5kMzM5YzAwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL3RlbXBsYXRlL0RlYnVnLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi90ZW1wbGF0ZS9EZWJ1Zy5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50KFRocm93YWJsZSB0LCBTdHJpbmcgbXNnKSB7CiAgICAgICAgIGlmIChkZWJ1Z2dpbmdPbikgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJSZWNlaXZlZCB0aHJvd2FibGUgd2l0aCBNZXNzYWdlOiAiK3QuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgIGlmIChtc2cgIT0gbnVsbCkgCisgICAgICAgICAgICBpZiAobXNnICE9IG51bGwpCiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludChtc2cpOwogICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi90ZW1wbGF0ZS9EZWZpbml0aW9uVGFnLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL3RlbXBsYXRlL0RlZmluaXRpb25UYWcuamF2YQppbmRleCA2NGMzMDkyLi5jZmEyMWMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL3RlbXBsYXRlL0RlZmluaXRpb25UYWcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL3RlbXBsYXRlL0RlZmluaXRpb25UYWcuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogcHVibGljIGNsYXNzIERlZmluaXRpb25UYWcgZXh0ZW5kcyBTaW1wbGVUYWdTdXBwb3J0IHsKICAgcHJpdmF0ZSBTdHJpbmcgZGVmaW5pdGlvbk5hbWUgPSBudWxsOwogICBwcml2YXRlIFN0cmluZyBzY3JlZW5JZDsKLSAgcHJpdmF0ZQlIYXNoTWFwIHNjcmVlbnMgPSBudWxsOworICBwcml2YXRlICAgIEhhc2hNYXAgc2NyZWVucyA9IG51bGw7CiAKICAgcHVibGljIERlZmluaXRpb25UYWcoKSB7CiAgICAgc3VwZXIoKTsKQEAgLTM5LDE1ICszOSwxNSBAQAogICB9CiAgIHB1YmxpYyB2b2lkIGRvVGFnKCkgewogICAgIHRyeSB7Ci0gICAgIAlzY3JlZW5zID0gbmV3IEhhc2hNYXAoKTsKKyAgICAgICAgIHNjcmVlbnMgPSBuZXcgSGFzaE1hcCgpOwogCi0gICAgICAKKwogICAgICAgZ2V0SnNwQm9keSgpLmludm9rZShudWxsKTsKLSAgICAgIAorCiAgICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBuZXcgRGVmaW5pdGlvbigpOwogICAgICAgUGFnZUNvbnRleHQgY29udGV4dCA9IChQYWdlQ29udGV4dClnZXRKc3BDb250ZXh0KCk7CiAgICAgICBBcnJheUxpc3QgcGFyYW1zID0gKEFycmF5TGlzdCkgc2NyZWVucy5nZXQoc2NyZWVuSWQpOwotICAgICAgSXRlcmF0b3IJaXIgPSBudWxsOworICAgICAgSXRlcmF0b3IgICAgaXIgPSBudWxsOwogICAgICAgaWYgKHBhcmFtcyAhPSBudWxsKSB7CiAgICAgICAgIGlyID0gcGFyYW1zLml0ZXJhdG9yKCk7CiAgICAgICAgIHdoaWxlIChpci5oYXNOZXh0KCkpCkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgIC8vIHB1dCB0aGUgZGVmaW5pdGlvbiBpbiB0aGUgcGFnZSBjb250ZXh0CiAgICAgICAgIGNvbnRleHQuc2V0QXR0cmlidXRlKGRlZmluaXRpb25OYW1lLCBkZWZpbml0aW9uLCBjb250ZXh0LkFQUExJQ0FUSU9OX1NDT1BFKTsKICAgICAgIH0KLSAgICAgCWVsc2UgCSAgICAgICAgIAorICAgICAgICAgZWxzZQogICAgICAgICBEZWJ1Zy5wcmludGxuKCJEZWZpbml0aW9uVGFnOiBwYXJhbXMgYXJlIG5vdCBkZWZpbmVkLiIpOwogICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvdGVtcGxhdGUvSW5zZXJ0VGFnLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL3RlbXBsYXRlL0luc2VydFRhZy5qYXZhCmluZGV4IGFlZGRmNDIuLjBmODYxYmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvdGVtcGxhdGUvSW5zZXJ0VGFnLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi90ZW1wbGF0ZS9JbnNlcnRUYWcuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgcHVibGljIHZvaWQgZG9UYWcoKSB0aHJvd3MgSnNwVGFnRXhjZXB0aW9uIHsKICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwogICAgIFBhcmFtZXRlciBwYXJhbWV0ZXIgPSBudWxsOwotICAgIGJvb2xlYW4gZGlyZWN0SW5jbHVkZSA9IGZhbHNlOwkJICAgIAorICAgIGJvb2xlYW4gZGlyZWN0SW5jbHVkZSA9IGZhbHNlOwogICAgIFBhZ2VDb250ZXh0IGNvbnRleHQgPSAoUGFnZUNvbnRleHQpZ2V0SnNwQ29udGV4dCgpOwogCiAgICAgLy8gZ2V0IHRoZSBkZWZpbml0aW9uIGZyb20gdGhlIHBhZ2UgY29udGV4dApAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICAvLyBpZiBwYXJhbWV0ZXIgaXMgZGlyZWN0LCBwcmludCB0byBvdXQKICAgICAgICAgaWYgKGRpcmVjdEluY2x1ZGUgJiYgcGFyYW1ldGVyICAhPSBudWxsKQogICAgICAgICAgIGNvbnRleHQuZ2V0T3V0KCkucHJpbnQocGFyYW1ldGVyLmdldFZhbHVlKCkpOwotICAgICAgICAvLyBpZiBwYXJhbWV0ZXIgaXMgaW5kaXJlY3QsIGluY2x1ZGUgcmVzdWx0cyBvZiBkaXNwYXRjaGluZyB0byBwYWdlIAorICAgICAgICAvLyBpZiBwYXJhbWV0ZXIgaXMgaW5kaXJlY3QsIGluY2x1ZGUgcmVzdWx0cyBvZiBkaXNwYXRjaGluZyB0byBwYWdlCiAgICAgICAgIGVsc2UgewogICAgICAgICAgIGlmICgocGFyYW1ldGVyICE9IG51bGwpICYmIChwYXJhbWV0ZXIuZ2V0VmFsdWUoKSAhPSAgbnVsbCkpCiAgICAgICAgICAgICAgIGNvbnRleHQuaW5jbHVkZShwYXJhbWV0ZXIuZ2V0VmFsdWUoKSk7CkBAIC02Miw5ICs2Miw5IEBACiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICBUaHJvd2FibGUgcm9vdENhdXNlID0gbnVsbDsKICAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBTZXJ2bGV0RXhjZXB0aW9uKSB7Ci0gICAgICAJCQlyb290Q2F1c2UgPSAoKFNlcnZsZXRFeGNlcHRpb24pIGV4KS5nZXRSb290Q2F1c2UoKTsKKyAgICAgICAgICAgICAgICAgIHJvb3RDYXVzZSA9ICgoU2VydmxldEV4Y2VwdGlvbikgZXgpLmdldFJvb3RDYXVzZSgpOwogICAgICAgICAgIH0KLSAgICAgCQkJdGhyb3cgbmV3IEpzcFRhZ0V4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCksIHJvb3RDYXVzZSk7Ci0gICAgCX0KKyAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpzcFRhZ0V4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCksIHJvb3RDYXVzZSk7CisgICAgICAgIH0KICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvdGVtcGxhdGUvUGFyYW1ldGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL3RlbXBsYXRlL1BhcmFtZXRlci5qYXZhCmluZGV4IGI0OGFiN2QuLmUzNWNjNWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvdGVtcGxhdGUvUGFyYW1ldGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi90ZW1wbGF0ZS9QYXJhbWV0ZXIuamF2YQpAQCAtMjksNyArMjksNyBAQAogCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKLSAgICB9IAorICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGlzRGlyZWN0KCkgewogICAgICAgICByZXR1cm4gaXNEaXJlY3Q7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL3RlbXBsYXRlL1BhcmFtZXRlclRhZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi90ZW1wbGF0ZS9QYXJhbWV0ZXJUYWcuamF2YQppbmRleCAzNmE4ZTU1Li44NjgxNWNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL3RlbXBsYXRlL1BhcmFtZXRlclRhZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvdGVtcGxhdGUvUGFyYW1ldGVyVGFnLmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgIHB1YmxpYyB2b2lkIGRvVGFnKCkgewogICAgICAgYm9vbGVhbiBpc0RpcmVjdCA9IGZhbHNlOwogCi0gICAgICBpZiAoKGlzRGlyZWN0U3RyaW5nICE9IG51bGwpICYmIAorICAgICAgaWYgKChpc0RpcmVjdFN0cmluZyAhPSBudWxsKSAmJgogICAgICAgICAgaXNEaXJlY3RTdHJpbmcudG9Mb3dlckNhc2UoKS5lcXVhbHMoInRydWUiKSkKICAgICAgICAgIGlzRGlyZWN0ID0gdHJ1ZTsKIApAQCAtNTAsOCArNTAsOCBAQAogICAgICAgICAgIGlmIChwYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgICAgICAgIFBhcmFtZXRlciBwYXJhbSA9IG5ldyBQYXJhbWV0ZXIocGFyYW1OYW1lLCBwYXJhbVZhbHVlLCBpc0RpcmVjdCk7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFkZChwYXJhbSk7Ci0gICAgICAgICAgfSBlbHNlIAotICAgICAgICAgICAgRGVidWcucHJpbnRsbigiUGFyYW1ldGVyVGFnOiBwYXJhbWV0ZXJzIGRvIG5vdCBleGlzdC4iKTsgICAgICAgICAgICAgIAorICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgRGVidWcucHJpbnRsbigiUGFyYW1ldGVyVGFnOiBwYXJhbWV0ZXJzIGRvIG5vdCBleGlzdC4iKTsKICAgICAgICAgfQogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgIERlYnVnLnByaW50bG4oIlBhcmFtZXRlclRhZzogZXJyb3IgaW4gZG9UYWc6ICIgKyBlKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvdGVtcGxhdGUvU2NyZWVuVGFnLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL3RlbXBsYXRlL1NjcmVlblRhZy5qYXZhCmluZGV4IDdkNThiMWUuLmIyMTExYTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvdGVtcGxhdGUvU2NyZWVuVGFnLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi90ZW1wbGF0ZS9TY3JlZW5UYWcuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogICAgcHJpdmF0ZSBBcnJheUxpc3QgcGFyYW1ldGVycyA9IG51bGw7CiAKICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGFyYW1ldGVycygpIHsKLSAgIAkJcmV0dXJuIHBhcmFtZXRlcnM7CisgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJzOwogICAgfQogICAgcHVibGljIHZvaWQgc2V0U2NyZWVuSWQoU3RyaW5nIHNjcmVlbklkKSB7CiAgICAgICB0aGlzLnNjcmVlbklkID0gc2NyZWVuSWQ7CkBAIC0zNyw3ICszNyw3IEBACiAgICAgcGFyYW1ldGVycyA9IG5ldyBBcnJheUxpc3QoKTsKICAgICBIYXNoTWFwIHNjcmVlbnMgPSAoSGFzaE1hcCkoKERlZmluaXRpb25UYWcpZ2V0UGFyZW50KCkpLmdldFNjcmVlbnMoKTsKICAgICBpZiAoc2NyZWVucyAhPSBudWxsKSB7Ci0gICAgICB0cnkgewkKKyAgICAgIHRyeSB7CiAgICAgICAgIGlmICghc2NyZWVucy5jb250YWluc0tleShzY3JlZW5JZCkpCiAgICAgICAgICAgc2NyZWVucy5wdXQoc2NyZWVuSWQsIHBhcmFtZXRlcnMpOwogICAgICAgICBnZXRKc3BCb2R5KCkuaW52b2tlKG51bGwpOwpAQCAtNDYsNiArNDYsNiBAQAogICAgICAgfQogICAgIH0KICAgICBlbHNlCi0gICAgCURlYnVnLnByaW50bG4oIlNjcmVlblRhZzogVW5hYmxlIHRvIGdldCBzY3JlZW5zIG9iamVjdC4iKTsKKyAgICAgICAgRGVidWcucHJpbnRsbigiU2NyZWVuVGFnOiBVbmFibGUgdG8gZ2V0IHNjcmVlbnMgb2JqZWN0LiIpOwogICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY29tbW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY29tbW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDBmN2FiZS4uMjdiYmI4NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NvbW1vbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jb21tb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTIgKzE1LDEyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIGoyZWUuaG9tZT0ke1MxQVNfaG9tZX0KIHN1bm9uZS5ob21lPSR7ajJlZS5ob21lfQogIwotIyBUaGUgZm9sbG93aW5nIHNldHRpbmdzIGhhdmUgYmVlbiBjb21tZW50ZWQgb3V0IGJlY2F1c2UgdGhleSBhcmUgcGVyZm9ybWVkIGJ5IHRoZSBkZXZ0ZXN0cyAKKyMgVGhlIGZvbGxvd2luZyBzZXR0aW5ncyBoYXZlIGJlZW4gY29tbWVudGVkIG91dCBiZWNhdXNlIHRoZXkgYXJlIHBlcmZvcm1lZCBieSB0aGUgZGV2dGVzdHMKICMgc2V0LXVwIGluc3RlYWQuCiAjCiAjYWRtaW4ucGFzc3dvcmQ9CkBAIC00MSw1ICs0MSw1IEBACiAjZGIucHdkPXBicHVibGljCiB1cmwucHJvcD1EYXRhYmFzZU5hbWUKIGRzLmNsYXNzPWNvbS5wb2ludGJhc2UuamRiYy5qZGJjRGF0YVNvdXJjZQotZGIuanZtYXJncz0tbXMxNm0gLW14MzJtIAorZGIuanZtYXJncz0tbXMxNm0gLW14MzJtXHUwMDIwCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jb21tb24vdGFyZ2V0cy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY29tbW9uL3RhcmdldHMueG1sCmluZGV4IGJmOTk3NTEuLjFkZWY4ZGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jb21tb24vdGFyZ2V0cy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NvbW1vbi90YXJnZXRzLnhtbApAQCAtMjQsNyArMjQsNyBAQAogCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iID4KICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZH0iIC8+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7ZGlzdH0iIC8+ICAgIAorICAgIDxkZWxldGUgZGlyPSIke2Rpc3R9IiAvPgogICA8L3RhcmdldD4KIAogICA8cGF0aCBpZD0iZGIuY2xhc3NwYXRoIj4KQEAgLTQ0LDE5ICs0NCwxOSBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYWRtaW5fY29tbWFuZF9jb21tb24iPgogICAgIDxlY2hvIG1lc3NhZ2U9IkRvaW5nIGFkbWluIHRhc2sgJHthZG1pbi5jb21tYW5kfSIvPgotICAgIDxzdW4tYXBwc2Vydi1hZG1pbiAKKyAgICA8c3VuLWFwcHNlcnYtYWRtaW4KICAgICAgIGNvbW1hbmQ9IiR7YWRtaW4uY29tbWFuZH0iCi0gICAgICB1c2VyPSIke2FkbWluLnVzZXJ9IiAKLSAgICAgIHBhc3N3b3JkPSIke2FkbWluLnBhc3N3b3JkfSIgCi0gICAgICBob3N0PSIke2FkbWluLmhvc3R9IiAKLSAgICAgIHBvcnQ9IiR7YWRtaW4ucG9ydH0iIAorICAgICAgdXNlcj0iJHthZG1pbi51c2VyfSIKKyAgICAgIHBhc3N3b3JkPSIke2FkbWluLnBhc3N3b3JkfSIKKyAgICAgIGhvc3Q9IiR7YWRtaW4uaG9zdH0iCisgICAgICBwb3J0PSIke2FkbWluLnBvcnR9IgogICAgICAgc3Vub25laG9tZT0iJHtqMmVlLmhvbWV9IiAvPgogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLXJlc291cmNlX2NvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJhZG1pbl9jb21tYW5kX2NvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIKLSAgICAgICAgdmFsdWU9ImNyZWF0ZS1qZGJjLXJlc291cmNlIAorICAgICAgICB2YWx1ZT0iY3JlYXRlLWpkYmMtcmVzb3VyY2UKICAgICAgICAgIC0tY29ubmVjdGlvbnBvb2xpZCAke2NvbnBvb2wubmFtZX0gJHtqZGJjLnJlc291cmNlLm5hbWV9IiAvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L3Rlc3Rlci9EZXBsb3llci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC90ZXN0ZXIvRGVwbG95ZXIuamF2YQppbmRleCA2MTJiYWQ1Li45M2Q4YzA0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L3Rlc3Rlci9EZXBsb3llci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvdGVzdGVyL0RlcGxveWVyLmphdmEKQEAgLTMxLDE5ICszMSwxOSBAQAogcHVibGljIGNsYXNzIERlcGxveWVyIGltcGxlbWVudHMgUHJvZ3Jlc3NMaXN0ZW5lciB7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBpbnN0IGF0ICIgKyBTeXN0ZW0uZ2V0UHJvcGVydHkoImNvbS5zdW4uYWFzLmluc3RhbGxSb290IikpOwogICAgICAgICAgICAgRGVwbG95ZXIgZGVwbG95ZXIgPSBuZXcgRGVwbG95ZXIoKTsKICAgICAgICAgICAgIGRlcGxveWVyLmRlcGxveShhcmdzKTsKLQkgICAgU3lzdGVtLmV4aXQoMCk7CisgICAgICAgIFN5c3RlbS5leGl0KDApOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgU3lzdGVtLmV4aXQoLTEpOwogICAgICAgICB9Ci0gICAgfSAKLSAgICAKLSAgICAKKyAgICB9CisKKwogICAgIHB1YmxpYyB2b2lkIGRlcGxveShTdHJpbmcgYXJnc1tdKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBEZXBsb3ltZW50RmFjdG9yeUluc3RhbGxlci5nZXRJbnN0YWxsZXIoKTsKQEAgLTUxLDM3ICs1MSwzNyBAQAogICAgICAgICBQcm9ncmVzc09iamVjdCBkcG87CiAgICAgICAgIEZpbGUgYXJjaGl2ZSA9IG5ldyBGaWxlKGFyZ3NbMF0pOwogICAgICAgICBGaWxlIGRlcGxveW1lbnRQbGFuID0gbmV3IEZpbGUoYXJnc1sxXSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghZGVwbG95bWVudFBsYW4uZXhpc3RzKCkpIHsKICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhcm5pbmcsIGRlcGxveWluZyB3aXRoIG51bGwgZGVwbG95bWVudCBwbGFuIik7Ci0gICAgICAgICAgICAgZHBvID0gZG0uZGlzdHJpYnV0ZShkbS5nZXRUYXJnZXRzKCksIGFyY2hpdmUsIG51bGwpOyAgICAgICAgICAKKyAgICAgICAgICAgICBkcG8gPSBkbS5kaXN0cmlidXRlKGRtLmdldFRhcmdldHMoKSwgYXJjaGl2ZSwgbnVsbCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlcGxveWluZyAiICsgYXJjaGl2ZS5nZXRBYnNvbHV0ZVBhdGgoKSArICIgd2l0aCBwbGFuICIgKyBkZXBsb3ltZW50UGxhbi5nZXRBYnNvbHV0ZUZpbGUoKSk7Ci0gICAgICAgICAgICAgZHBvID0gZG0uZGlzdHJpYnV0ZShkbS5nZXRUYXJnZXRzKCksIGFyY2hpdmUsIGRlcGxveW1lbnRQbGFuKTsgICAgICAgICAgCi0gICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgICAgICBkcG8gPSBkbS5kaXN0cmlidXRlKGRtLmdldFRhcmdldHMoKSwgYXJjaGl2ZSwgZGVwbG95bWVudFBsYW4pOworICAgICAgICB9CiAgICAgICAgIGRwby5hZGRQcm9ncmVzc0xpc3RlbmVyKHRoaXMpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlcGxveW1lbnQgcmV0dXJuZWQgIiArIGRwbyk7CiAgICAgICAgIGlmIChkcG8hPW51bGwpIHsKICAgICAgICAgICAgIERlcGxveW1lbnRTdGF0dXMgZGVwbG95bWVudFN0YXR1cyA9IGRwby5nZXREZXBsb3ltZW50U3RhdHVzKCk7CiAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgyMDApOwotICAgICAgICAgICAgfSB3aGlsZSAoIShkZXBsb3ltZW50U3RhdHVzLmlzQ29tcGxldGVkKCkgfHwgZGVwbG95bWVudFN0YXR1cy5pc0ZhaWxlZCgpKSk7ICAgICAgICAgICAgCisgICAgICAgICAgICB9IHdoaWxlICghKGRlcGxveW1lbnRTdGF0dXMuaXNDb21wbGV0ZWQoKSB8fCBkZXBsb3ltZW50U3RhdHVzLmlzRmFpbGVkKCkpKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVwbG95bWVudCBzdGF0dXMgaXMgIiArIGRlcGxveW1lbnRTdGF0dXMpOwogICAgICAgICB9Ci0gICAgICAgIFRhcmdldE1vZHVsZUlEW10gdGFyZ2V0TW9kdWxlSURzID0gZHBvLmdldFJlc3VsdFRhcmdldE1vZHVsZUlEcygpOyAgICAgICAgCisgICAgICAgIFRhcmdldE1vZHVsZUlEW10gdGFyZ2V0TW9kdWxlSURzID0gZHBvLmdldFJlc3VsdFRhcmdldE1vZHVsZUlEcygpOwogICAgICAgICBkdW1wUmVzdWx0TW9kdWxlSURzKCJEZXBsb3llZCAiICwgZHBvKTsKLSAgICAgICAgCisKIC8vICAgICAgICBNb2R1bGVUeXBlIG1vZHVsZVR5cGUgPSAoKFN1blRhcmdldE1vZHVsZUlEKSB0YXJnZXRNb2R1bGVJRHNbMF0pLmdldE1vZHVsZVR5cGUoKTsKLSAgICAgICAgCisKIC8vICAgICAgICBsaXN0QXBwbGljYXRpb25zKGRtLCBtb2R1bGVUeXBlICwgZG0uZ2V0VGFyZ2V0cygpLCBudWxsKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgZHVtcFJlc3VsdE1vZHVsZUlEcyhTdHJpbmcgcHJlZml4LCBQcm9ncmVzc09iamVjdCBwbykgewogICAgICAgICBUYXJnZXRNb2R1bGVJRFtdIHRhcmdldE1vZHVsZUlEcyA9IHBvLmdldFJlc3VsdFRhcmdldE1vZHVsZUlEcygpOwotICAgICAgICBmb3IgKGludCBpPTA7aTx0YXJnZXRNb2R1bGVJRHMubGVuZ3RoO2krKykgeyAgICAgICAgICAgIAotICAgICAgICAgICAgZHVtcE1vZHVsZXNJRHMocHJlZml4LCB0YXJnZXRNb2R1bGVJRHNbaV0pOyAgICAgICAgICAgIAorICAgICAgICBmb3IgKGludCBpPTA7aTx0YXJnZXRNb2R1bGVJRHMubGVuZ3RoO2krKykgeworICAgICAgICAgICAgZHVtcE1vZHVsZXNJRHMocHJlZml4LCB0YXJnZXRNb2R1bGVJRHNbaV0pOwogICAgICAgICB9Ci0gICAgfSAgICAKKyAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZHVtcE1vZHVsZXNJRHMoU3RyaW5nIHByZWZpeCwgVGFyZ2V0TW9kdWxlSUQgdGFyZ2V0TW9kdWxlSUQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHByZWZpeCArIHRhcmdldE1vZHVsZUlEKTsKQEAgLTkxLDExICs5MSwxMSBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIENoaWxkICIgKyBpICsgIlxuIiArIHN1YnNbaV0pOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfSAgICAgICAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIHZvaWQgaGFuZGxlUHJvZ3Jlc3NFdmVudChqYXZheC5lbnRlcnByaXNlLmRlcGxveS5zcGkuc3RhdHVzLlByb2dyZXNzRXZlbnQgcHJvZ3Jlc3NFdmVudCkgewogICAgICAgICBEZXBsb3ltZW50U3RhdHVzIGRzID0gcHJvZ3Jlc3NFdmVudC5nZXREZXBsb3ltZW50U3RhdHVzKCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgUHJvZ3Jlc3MgRXZlbnQgc3RhdGUgIiArIGRzLmdldFN0YXRlKCkgKyAiIG1zZyA9ICIgKyBkcy5nZXRNZXNzYWdlKCkpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgUHJvZ3Jlc3MgRXZlbnQgc3RhdGUgIiArIGRzLmdldFN0YXRlKCkgKyAiIG1zZyA9ICIgKyBkcy5nZXRNZXNzYWdlKCkpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC90ZXN0ZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC90ZXN0ZXIvYnVpbGQueG1sCmluZGV4IDNhOTY2ZTUuLjZjMzYyYjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvdGVzdGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L3Rlc3Rlci9idWlsZC54bWwKQEAgLTIwLDIyICsyMCwyMiBAQAogCiA8IUVOVElUWSBjb21tb25CdWlsZCBTWVNURU0gIi4vLi4vLi4vY29uZmlnL2NvbW1vbi54bWwiPgogXT4KLSAgCisKIDxwcm9qZWN0IG5hbWU9IndzdG9lamIiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+Ci0gCisKICAgICAgICAgJmNvbW1vbkJ1aWxkOwotIAotCTx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+Ci0JCTxta2RpciBkaXI9IiR7YnVpbGR9IiAvPgotCTwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJwcmVwYXJlIiBkZXBlbmRzPSJpbml0Ij4KKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0iIC8+CisgICAgPC90YXJnZXQ+CiAKICAgICAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJwcmVwYXJlIj4KICAgICAgICAgICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkfSI+Ci0JCSAgICA8Y2xhc3NwYXRoPgotCQkgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtpbnN0fS9saWIvajJlZS5qYXIiLz4KLQkJICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7aW5zdH0vbGliL2FwcHNlcnYtcnQuamFyIi8+Ci0JCSAgICA8L2NsYXNzcGF0aD4KKyAgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2luc3R9L2xpYi9qMmVlLmphciIvPgorICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtpbnN0fS9saWIvYXBwc2Vydi1ydC5qYXIiLz4KKyAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICAgICAgICAgIDwvamF2YWM+CiAgICAgICAgIDwvdGFyZ2V0PgotICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC93YXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC93YXIvYnVpbGQueG1sCmluZGV4IDIxMjRjZjcuLmUzYjJhYWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvd2FyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L3dhci9idWlsZC54bWwKQEAgLTIzLDEyICsyMywxMiBAQAogCiA8cHJvamVjdCBuYW1lPSJlYXIiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLQkmY29tbW9uQnVpbGQ7CisgICAgJmNvbW1vbkJ1aWxkOwogCi0JPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+Ci0JCTxhbnQgZGlyPSJzaW1wbGUiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vc2ltcGxlIi8+Ci0JCTwvYW50PgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgorICAgICAgICA8YW50IGRpcj0ic2ltcGxlIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3NpbXBsZSIvPgorICAgICAgICA8L2FudD4KKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC93YXIvc2ltcGxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvd2FyL3NpbXBsZS9idWlsZC54bWwKaW5kZXggNzA3NzVkNi4uNzVmZTk3MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC93YXIvc2ltcGxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L3dhci9zaW1wbGUvYnVpbGQueG1sCkBAIC0yMyw0OSArMjMsNDkgQEAKIAogPHByb2plY3QgbmFtZT0iZWFyIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0JJmNvbW1vbkJ1aWxkOworICAgICZjb21tb25CdWlsZDsKICAgICA8cHJvcGVydHkgbmFtZT0iYXJjaGl2ZWRpciIgdmFsdWU9IiR7YnVpbGR9L2FyY2hpdmVzIi8+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkLWRlcGxveW1lbnQtcGxhbiI+Ci0JCTxta2RpciBkaXI9IiR7YnVpbGR9L3BsYW4iLz4KLQkJPGNvcHkgZmlsZT0ic3VuLXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZH0vcGxhbi9zdW4td2ViLnhtbCIvPgotCQk8amFyIGRlc3RmaWxlPSIke2FyY2hpdmVkaXJ9L3BsYW4uamFyIiBiYXNlZGlyPSIke2J1aWxkfS9wbGFuIi8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZC1kZXBsb3ltZW50LXBsYW4iPgorICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfS9wbGFuIi8+CisgICAgICAgIDxjb3B5IGZpbGU9InN1bi13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGR9L3BsYW4vc3VuLXdlYi54bWwiLz4KKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthcmNoaXZlZGlyfS9wbGFuLmphciIgYmFzZWRpcj0iJHtidWlsZH0vcGxhbiIvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJidWlsZC1wb3J0YWJsZSI+Ci0JCTx3YXIgZGVzdGZpbGU9IiR7YXJjaGl2ZWRpcn0vc2ltcGxlLndhciIgd2VieG1sPSJ3ZWIueG1sIj4KLQkJCTxmaWxlc2V0IGZpbGU9IlNpbXBsZV9QYWdlLmh0bWwiLz4KLQkJPC93YXI+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wb3J0YWJsZSI+CisgICAgICAgIDx3YXIgZGVzdGZpbGU9IiR7YXJjaGl2ZWRpcn0vc2ltcGxlLndhciIgd2VieG1sPSJ3ZWIueG1sIj4KKyAgICAgICAgICAgIDxmaWxlc2V0IGZpbGU9IlNpbXBsZV9QYWdlLmh0bWwiLz4KKyAgICAgICAgPC93YXI+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjb21tb24ucnVuLmpzcjg4Ij4KLQkJCTxwYXJhbSBuYW1lPSJjb21tYW5kIiB2YWx1ZT0idW5kZXBsb3kiLz4KLQkJCTxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9InNpbXBsZSIvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+IAorICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5ydW4uanNyODgiPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbW1hbmQiIHZhbHVlPSJ1bmRlcGxveSIvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0ic2ltcGxlIi8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iZGVwbG95LXRlc3QiIGRlcGVuZHM9InNldEh0dHBQb3J0Ij4KKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS10ZXN0IiBkZXBlbmRzPSJzZXRIdHRwUG9ydCI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXJjaGl2ZWRpcn0iLz4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlY2xhcmUtdGVzdCI+CiAgICAgICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXNjcmlwdGlvbiIgdmFsdWU9Impzcjg4L3dhci9zaW1wbGUgZGVwbG95IHRlc3QiLz4KICAgICAgICAgICAgICAgICA8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0iYnVpbGQtcG9ydGFibGUiLz4KLQkJPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1kZXBsb3ltZW50LXBsYW4iLz4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjb21tb24ucnVuLmpzcjg4Ij4KLQkJCTxwYXJhbSBuYW1lPSJjb21tYW5kIiB2YWx1ZT0iZGVwbG95Ii8+Ci0JCQk8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSJ0cnVlICR7YXJjaGl2ZWRpcn0vc2ltcGxlLndhciAke2FyY2hpdmVkaXJ9L3BsYW4uamFyIi8+Ci0JCTwvYW50Y2FsbD4KLQkJPGVjaG8gbWVzc2FnZT0iZ2V0dGluZyBodHRwOi8vJHtodHRwLmhvc3R9OiR7ZGVwbHRlc3QucG9ydH0vc2ltcGxlL1NpbXBsZV9QYWdlLmh0bWwiLz4KLQkJPGNvbmRpdGlvbiBwcm9wZXJ0eT0ic3VjY2VzcyI+Ci0JCQk8aHR0cCB1cmw9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtkZXBsdGVzdC5wb3J0fS9zaW1wbGUvU2ltcGxlX1BhZ2UuaHRtbCIvPgotCQk8L2NvbmRpdGlvbj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1wb3J0YWJsZSIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWRlcGxveW1lbnQtcGxhbiIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5ydW4uanNyODgiPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbW1hbmQiIHZhbHVlPSJkZXBsb3kiLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9InRydWUgJHthcmNoaXZlZGlyfS9zaW1wbGUud2FyICR7YXJjaGl2ZWRpcn0vcGxhbi5qYXIiLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJnZXR0aW5nIGh0dHA6Ly8ke2h0dHAuaG9zdH06JHtkZXBsdGVzdC5wb3J0fS9zaW1wbGUvU2ltcGxlX1BhZ2UuaHRtbCIvPgorICAgICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJzdWNjZXNzIj4KKyAgICAgICAgICAgIDxodHRwIHVybD0iaHR0cDovLyR7aHR0cC5ob3N0fToke2RlcGx0ZXN0LnBvcnR9L3NpbXBsZS9TaW1wbGVfUGFnZS5odG1sIi8+CisgICAgICAgIDwvY29uZGl0aW9uPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idGVzdFN1Y2Nlc3MiPjxwYXJhbSBuYW1lPSJsb2cuaWQiIHZhbHVlPSIxIi8+PC9hbnRjYWxsPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idGVzdEZhaWx1cmUiPjxwYXJhbSBuYW1lPSJsb2cuaWQiIHZhbHVlPSIyIi8+PC9hbnRjYWxsPgogICAgICAgICAgICAgICAgIDwhLS0KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveSIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95Ii8+CiAgICAgICAgICAgICAgICAgLS0+Ci0JPC90YXJnZXQ+CisgICAgPC90YXJnZXQ+CiAKICAgICAgICAgPHRhcmdldCBuYW1lPSJyZWRlcGxveS10ZXN0IiBkZXBlbmRzPSJzZXRIdHRwUG9ydCI+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgpAQCAtOTksMTYgKzk5LDE2IEBACiAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlZGVwbG95LXRlc3QiLz4KICAgICAgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InRlc3RTdWNjZXNzIiBpZj0ic3VjY2VzcyI+CisgICAgPHRhcmdldCBuYW1lPSJ0ZXN0U3VjY2VzcyIgaWY9InN1Y2Nlc3MiPgogICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwcm9jZXNzUmVzdWx0Ij4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0IiB2YWx1ZT0iMCIvPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2ciIHZhbHVlPSIke2J1aWxkfS8ke2xvZy5pZH0ub3V0cHV0LmxvZyIvPgotICAgICAgICAgICAgPC9hbnRjYWxsPiAKLQk8L3RhcmdldD4KLQk8dGFyZ2V0IG5hbWU9InRlc3RGYWlsdXJlIiB1bmxlc3M9InN1Y2Nlc3MiPgorICAgICAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0idGVzdEZhaWx1cmUiIHVubGVzcz0ic3VjY2VzcyI+CiAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InByb2Nlc3NSZXN1bHQiPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXN1bHQiIHZhbHVlPSItMSIvPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2ciIHZhbHVlPSIke2J1aWxkfS8ke2xvZy5pZH0ub3V0cHV0LmxvZyIvPgotICAgICAgICAgICAgPC9hbnRjYWxsPiAKLQk8L3RhcmdldD4KKyAgICAgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvd2FyL3NpbXBsZS93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC93YXIvc2ltcGxlL3dlYi54bWwKaW5kZXggNDUwNDUxZi4uYjhiOTNmNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC93YXIvc2ltcGxlL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC93YXIvc2ltcGxlL3dlYi54bWwKQEAgLTIwLDYgKzIwLDYgQEAKIDx3ZWItYXBwIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+CiAgIDxkaXNwbGF5LW5hbWU+U2ltcGxpc3RpYyBXZWIgQXBwbGljYXRpb248L2Rpc3BsYXktbmFtZT4KICAgPHdlbGNvbWUtZmlsZS1saXN0PgotCTx3ZWxjb21lLWZpbGU+c2ltcGxlX3BhZ2UuaHRtbDwvd2VsY29tZS1maWxlPgorICAgIDx3ZWxjb21lLWZpbGU+c2ltcGxlX3BhZ2UuaHRtbDwvd2VsY29tZS1maWxlPgogICA8L3dlbGNvbWUtZmlsZS1saXN0PgogPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9saWZlY3ljbGUtbW9kdWxlL0RlcGxMaWZlY3ljbGVNb2R1bGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvbGlmZWN5Y2xlLW1vZHVsZS9EZXBsTGlmZWN5Y2xlTW9kdWxlLmphdmEKaW5kZXggNzQ1Mzc2MS4uMjMxMjM3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9saWZlY3ljbGUtbW9kdWxlL0RlcGxMaWZlY3ljbGVNb2R1bGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2xpZmVjeWNsZS1tb2R1bGUvRGVwbExpZmVjeWNsZU1vZHVsZS5qYXZhCkBAIC01MSw0ICs1MSw0IEBACiAgICAgICByZXR1cm47CiAgICAgfQogICB9Ci19IAorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9vc2dpL3NpbXBsZS9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L29zZ2kvc2ltcGxlL1Rlc3RDbGllbnQuamF2YQppbmRleCA5MGIxMmFlLi41ODY5ZGY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L29zZ2kvc2ltcGxlL1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L29zZ2kvc2ltcGxlL1Rlc3RDbGllbnQuamF2YQpAQCAtMjksNyArMjksNyBAQAogICAgICAgICBUZXN0Q2xpZW50IGNsaWVudCA9IG5ldyBUZXN0Q2xpZW50KCk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBTdHJpbmcgdXJsID0gYXJnc1swXTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgICAgICAgICBsb2coIkNhdWdodCBFWFBFQ1RFRCBJT0V4Y2VwdGlvbjogIiArIGV4KTsKICAgICAgICAgICAgICAgICBwYXNzKCk7CiAgICAgICAgICAgICB9Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9vc2dpL3NpbXBsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L29zZ2kvc2ltcGxlL2J1aWxkLnhtbAppbmRleCBiMGQ0Yjc5Li40ODY1N2Q1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L29zZ2kvc2ltcGxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L29zZ2kvc2ltcGxlL2J1aWxkLnhtbApAQCAtNzAsMTYgKzcwLDE2IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZW5hYmxlLmFzYWRtaW4iPiAKKyAgICA8dGFyZ2V0IG5hbWU9ImVuYWJsZS5hc2FkbWluIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24uZW5hYmxlLmFzYWRtaW4iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkaXNhYmxlLmFzYWRtaW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5kaXNhYmxlLmFzYWRtaW4iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgpAQCAtMTI4LDEwICsxMjgsMTAgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzc2VtYmxlIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95Lm9zZ2kuYXNhZG1pbiIvPgogCi0gICAgICAgIDwhLS0gcHV0IGluIGEgMzBzIHNsZWVwIHRpbWUgdG8gbWFrZSBzdXJlIHRoZSBhc3luY2hyb25vdXMgb3NnaSAKKyAgICAgICAgPCEtLSBwdXQgaW4gYSAzMHMgc2xlZXAgdGltZSB0byBtYWtlIHN1cmUgdGhlIGFzeW5jaHJvbm91cyBvc2dpCiAgICAgICAgICAgICAgZGVwbG95bWVudCBmaW5pc2hlcyBiZWZvcmUgYWNjZXNzaW5nIHRoZSBhcHBsaWNhdGlvbiAtLT4KIAogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMzAiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvcnVuX3Rlc3Quc2ggYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3J1bl90ZXN0LnNoCmluZGV4IGM3NjM3OTAuLjc0NDNlNmMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvcnVuX3Rlc3Quc2gKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9ydW5fdGVzdC5zaApAQCAtNTUsNyArNTUsNyBAQAogICBmaQogICAgaWYgW1sgJHsxfSA9ICJkZXBsb3ltZW50X2NsdXN0ZXJfYWxsIiBdXTsgdGhlbgogICAgICAgY3AgLXIgJHtBUFNfSE9NRX0vZGV2dGVzdHMvZGVwbG95bWVudC9zZXJ2ZXItbG9ncy8gJHtXT1JLU1BBQ0V9L3Jlc3VsdHMvCi0gIGZpICAKKyAgZmkKICAgZWNobyBERVBMX1RBUkdFVCBpcyAke0RFUExfVEFSR0VUfQogfQogCkBAIC03OCw4ICs3OCw4IEBACiAgICAgICBwcmludCAiICA8dGVzdGNhc2UgY2xhc3NuYW1lPVwiRGVwbG95bWVudFRlc3RcIiBuYW1lPVwiIiBcCiAgICAgICAgIHN1YnN0cigkMiwyLGluZGV4KCQyLCJkZXNjcmlwdGlvbiIpLTQpIFwKICAgICAgICAgaWQgXAotICAgICAgICAiXCI+IgkJCi0gICAgICAKKyAgICAgICAgIlwiPiIKKwogICAgICAgIyBzZWFyY2hpbmcgZm9yIEZBSUxFRCBpbiBmaWVsZCA0LDUsNgogICAgICAgIyBpZiBub3QgZm91bmQsIHRlc3QgUEFTU0VECiAgICAgICBmYWlsdXJlPTEKQEAgLTkyLDExICs5MiwxMSBAQAogICAgICAgICAgICAgZmFpbHVyZT0wOwogICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgfSAKKyAgICAgIH0KICAgICAgIGlmKCBmYWlsdXJlID09IDEgKSB7CiAgICAgICAgIHByaW50ICIgICA8ZmFpbHVyZSB0eXBlPVwidGVzdGZhaWx1cmVcIi8+IgogICAgICAgfQotICAgICAgCisKICAgICAgIHByaW50ICIgIDwvdGVzdGNhc2U+IgogICAgICAgaWQrKzsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvSlNSODhEZXBsb3llci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL0pTUjg4RGVwbG95ZXIuamF2YQppbmRleCA0Zjc3ODE4Li5hMWM3YWM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvSlNSODhEZXBsb3llci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9KU1I4OERlcGxveWVyLmphdmEKQEAgLTQ1LDEzICs0NSwxMyBAQAogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIEoyRUVfREVQTE9ZTUVOVF9NQU5BR0VSID0KICAgICAgICAgICAgICAgICAgICAgICAgICJKMkVFLURlcGxveW1lbnRGYWN0b3J5LUltcGxlbWVudGF0aW9uLUNsYXNzIjsKICAgICBwcml2YXRlIHN0YXRpYyBMaXN0IHN5c3RlbUFwcHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgCisKICAgICAvKiogUmVjb3JkIGFsbCBldmVudHMgZGVsaXZlcmVkIHRvIHRoaXMgZGVwbG95ZXIgKHdoaWNoIGlzIGFsc28gYSBwcm9ncmVzcyBsaXN0ZW5lci4gKi8KICAgICBwcml2YXRlIFZlY3RvciByZWNlaXZlZEV2ZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICAKKwogICAgIC8qKiBSZWNvcmQgdGhlIFRhcmdldE1vZHVsZUlEcyB0aGF0IHJlc3VsdGVkIGZyb20gdGhlIG1vc3QgcmVjZW50IG9wZXJhdGlvbi4gKi8KICAgICBwcml2YXRlIFRhcmdldE1vZHVsZUlEIFtdIG1vc3RSZWNlbnRUYXJnZXRNb2R1bGVJRHMgPSBudWxsOwotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgSlNSODhEZXBsb3llciAqLwogICAgIHB1YmxpYyBKU1I4OERlcGxveWVyKFN0cmluZyB1cmksIFN0cmluZyB1c2VyLCBTdHJpbmcgcGFzc3dvcmQpIHsKICAgICAgICAgdGhpcy51c2VyID0gdXNlcjsKQEAgLTY1LDE1ICs2NSwxNSBAQAogICAgICAgICAgICAgZG0gPSBEZXBsb3ltZW50RmFjdG9yeU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXREZXBsb3ltZW50TWFuYWdlcih1cmksIHVzZXIsIHBhc3N3b3JkKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsgICAgICAgICAgICAgIAorICAgICAgICAgICAgU3lzdGVtLmV4aXQoLTEpOwogICAgICAgICB9CiAKICAgICAgICAgVGFyZ2V0W10gYWxsVGFyZ2V0cyA9IGRtLmdldFRhcmdldHMoKTsKICAgICAgICAgaWYgKGFsbFRhcmdldHMubGVuZ3RoID09IDApIHsKICAgICAgICAgICAgIGxvZygiQ2FuJ3QgZmluZCBkZXBsb3ltZW50IHRhcmdldHMuLi4iKTsKLSAgICAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsgICAgICAgICAgICAgIAorICAgICAgICAgICAgU3lzdGVtLmV4aXQoLTEpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vIElmIHRlc3QgYmVpbmcgcnVuIG9uIEVFLCBleGNsdWRlIHRoZSBEQVMgc2VydmVyIGluc3RhbmNlIGZyb20gdGhlIGRlcGxveSB0YXJnZXRzCiAgICAgICAgIFN0cmluZyB0YXJnZXRQbGF0Zm9ybSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiZGVwbG95bWVudFRhcmdldCIpOwogICAgICAgICBMaXN0IGZpbHRlcmVkVGFyZ2V0cyA9IG5ldyBBcnJheUxpc3QoKTsKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBkZXBsb3ltZW50U3RhdHVzID0gcG8uZ2V0RGVwbG95bWVudFN0YXR1cygpOwogICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgyMDApOwotICAgICAgICB9IHdoaWxlICghKGRlcGxveW1lbnRTdGF0dXMuaXNDb21wbGV0ZWQoKSB8fCBkZXBsb3ltZW50U3RhdHVzLmlzRmFpbGVkKCkpKTsgICAKKyAgICAgICAgfSB3aGlsZSAoIShkZXBsb3ltZW50U3RhdHVzLmlzQ29tcGxldGVkKCkgfHwgZGVwbG95bWVudFN0YXR1cy5pc0ZhaWxlZCgpKSk7CiAgICAgICAgIGxvZygiRGVwbG95bWVudCBzdGF0dXMgaXMgIiArIGRlcGxveW1lbnRTdGF0dXMuZ2V0U3RhdGUoKS50b1N0cmluZygpKTsKICAgICAgICAgaWYoZGVwbG95bWVudFN0YXR1cy5pc0ZhaWxlZCgpKQogICAgICAgICAgICAgICAgIHJldHVybigtMSk7CkBAIC0xMTQsNyArMTE0LDcgQEAKIAogICAgIHB1YmxpYyBQcm9ncmVzc09iamVjdCBkZXBsb3koRmlsZSBhcmNoaXZlLCBGaWxlIGRlcGxveW1lbnRQbGFuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHN0YXJ0QnlEZWZhdWx0LCBib29sZWFuIHVzZVN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlVHlwZSB0eXBlKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlVHlwZSB0eXBlKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBQcm9ncmVzc09iamVjdCBkcG8gPSBudWxsOwpAQCAtMTIzLDcgKzEyMyw3IEBACiAgICAgICAgICAgICBsb2coIldhcm5pbmcsIGRlcGxveWluZyB3aXRoIG51bGwgZGVwbG95bWVudCBwbGFuIik7CiAgICAgICAgICAgICBpZiAodXNlU3RyZWFtKSB7CiAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBkcG8gPSBkbS5kaXN0cmlidXRlKHRhcmdldHMsIAorICAgICAgICAgICAgICAgICAgICBkcG8gPSBkbS5kaXN0cmlidXRlKHRhcmdldHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmlsZUlucHV0U3RyZWFtKGFyY2hpdmUuZ2V0QWJzb2x1dGVQYXRoKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTEzMiwxMiArMTMyLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRwbyA9IGRtLmRpc3RyaWJ1dGUodGFyZ2V0cywgYXJjaGl2ZSwgbnVsbCk7ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRwbyA9IGRtLmRpc3RyaWJ1dGUodGFyZ2V0cywgYXJjaGl2ZSwgbnVsbCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAodXNlU3RyZWFtKSB7CiAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBkcG8gPSBkbS5kaXN0cmlidXRlKHRhcmdldHMsIAorICAgICAgICAgICAgICAgICAgICBkcG8gPSBkbS5kaXN0cmlidXRlKHRhcmdldHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmlsZUlucHV0U3RyZWFtKGFyY2hpdmUuZ2V0QWJzb2x1dGVQYXRoKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZpbGVJbnB1dFN0cmVhbShkZXBsb3ltZW50UGxhbi5nZXRBYnNvbHV0ZVBhdGgoKSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xNDYsOSArMTQ2LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWxlSW5wdXRTdHJlYW0oZGVwbG95bWVudFBsYW4uZ2V0QWJzb2x1dGVQYXRoKCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRwbyA9IGRtLmRpc3RyaWJ1dGUodGFyZ2V0cywgYXJjaGl2ZSwgZGVwbG95bWVudFBsYW4pOyAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkcG8gPSBkbS5kaXN0cmlidXRlKHRhcmdldHMsIGFyY2hpdmUsIGRlcGxveW1lbnRQbGFuKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICB9CiAgICAgICAgIGlmIChkcG8hPW51bGwpIHsKICAgICAgICAgICAgIGRwby5hZGRQcm9ncmVzc0xpc3RlbmVyKHRoaXMpOwogICAgICAgICAgICAgaWYod2FpdFRpbGxDb21wbGV0ZShkcG8pICE9IDApIHsKQEAgLTE1Niw3ICsxNTYsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybihudWxsKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgVGFyZ2V0TW9kdWxlSURbXSB0YXJnZXRNb2R1bGVJRHMgPSBkcG8uZ2V0UmVzdWx0VGFyZ2V0TW9kdWxlSURzKCk7ICAgICAgICAKKyAgICAgICAgICAgIFRhcmdldE1vZHVsZUlEW10gdGFyZ2V0TW9kdWxlSURzID0gZHBvLmdldFJlc3VsdFRhcmdldE1vZHVsZUlEcygpOwogICAgICAgICAgICAgdGhpcy5tb3N0UmVjZW50VGFyZ2V0TW9kdWxlSURzID0gdGFyZ2V0TW9kdWxlSURzOwogICAgICAgICAgICAgZHVtcFJlc3VsdE1vZHVsZUlEcygiRGVwbG95ZWQgIiAsIGRwbyk7CiAKQEAgLTE5NiwyMiArMTk2LDIyIEBACiAgICAgICAgIFByb2dyZXNzT2JqZWN0IGRwbyA9IG51bGw7CiAgICAgICAgIGlmIChkZXBsb3ltZW50UGxhbiA9PSBudWxsIHx8IGRlcGxveW1lbnRQbGFuLmdldE5hbWUoKS5lcXVhbHMoIm51bGwiKSkgewogICAgICAgICAgICAgbG9nKCJXYXJuaW5nLCByZWRlcGxveWluZyB3aXRoIG51bGwgZGVwbG95bWVudCBwbGFuIik7Ci0gICAgICAgICAgICBpZiAodXNlU3RyZWFtKSB7ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZHBvID0gZG0ucmVkZXBsb3kobW9kdWxlcywgCisgICAgICAgICAgICBpZiAodXNlU3RyZWFtKSB7CisgICAgICAgICAgICAgICAgZHBvID0gZG0ucmVkZXBsb3kobW9kdWxlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWxlSW5wdXRTdHJlYW0oYXJjaGl2ZS5nZXRBYnNvbHV0ZVBhdGgoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZHBvID0gZG0ucmVkZXBsb3kobW9kdWxlcywgYXJjaGl2ZSwgbnVsbCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodXNlU3RyZWFtKSB7ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZHBvID0gZG0ucmVkZXBsb3kobW9kdWxlcywgCisgICAgICAgICAgICBpZiAodXNlU3RyZWFtKSB7CisgICAgICAgICAgICAgICAgZHBvID0gZG0ucmVkZXBsb3kobW9kdWxlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWxlSW5wdXRTdHJlYW0oYXJjaGl2ZS5nZXRBYnNvbHV0ZVBhdGgoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmlsZUlucHV0U3RyZWFtKGRlcGxveW1lbnRQbGFuLmdldEFic29sdXRlUGF0aCgpKSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRwbyA9IGRtLnJlZGVwbG95KG1vZHVsZXMsIGFyY2hpdmUsIGRlcGxveW1lbnRQbGFuKTsgICAgICAgICAgCisgICAgICAgICAgICAgICAgZHBvID0gZG0ucmVkZXBsb3kobW9kdWxlcywgYXJjaGl2ZSwgZGVwbG95bWVudFBsYW4pOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgIH0KICAgICAgICAgaWYgKGRwbyE9bnVsbCkgewogICAgICAgICAgICAgZHBvLmFkZFByb2dyZXNzTGlzdGVuZXIodGhpcyk7CiAgICAgICAgICAgICBpZih3YWl0VGlsbENvbXBsZXRlKGRwbykgIT0gMCkgewpAQCAtMjE5LDcgKzIxOSw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuKG51bGwpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBUYXJnZXRNb2R1bGVJRFtdIHRhcmdldE1vZHVsZUlEcyA9IGRwby5nZXRSZXN1bHRUYXJnZXRNb2R1bGVJRHMoKTsgICAgICAgIAorICAgICAgICAgICAgVGFyZ2V0TW9kdWxlSURbXSB0YXJnZXRNb2R1bGVJRHMgPSBkcG8uZ2V0UmVzdWx0VGFyZ2V0TW9kdWxlSURzKCk7CiAgICAgICAgICAgICB0aGlzLm1vc3RSZWNlbnRUYXJnZXRNb2R1bGVJRHMgPSB0YXJnZXRNb2R1bGVJRHM7CiAgICAgICAgICAgICBkdW1wUmVzdWx0TW9kdWxlSURzKCJSZWRlcGxveWVkICIgLCBkcG8pOwogICAgICAgICB9CkBAIC0zMzAsMTUgKzMzMCwxNSBAQAogCiAgICAgcHJvdGVjdGVkIHZvaWQgZHVtcFJlc3VsdE1vZHVsZUlEcyhTdHJpbmcgcHJlZml4LCBQcm9ncmVzc09iamVjdCBwbykgewogICAgICAgICBUYXJnZXRNb2R1bGVJRFtdIHRhcmdldE1vZHVsZUlEcyA9IHBvLmdldFJlc3VsdFRhcmdldE1vZHVsZUlEcygpOwotCWR1bXBNb2R1bGVzSURzKHByZWZpeCwgdGFyZ2V0TW9kdWxlSURzKTsKKyAgICBkdW1wTW9kdWxlc0lEcyhwcmVmaXgsIHRhcmdldE1vZHVsZUlEcyk7CiAgICAgfQogCiAgICAgcHJvdGVjdGVkIHZvaWQgZHVtcE1vZHVsZXNJRHMoU3RyaW5nIHByZWZpeCwgVGFyZ2V0TW9kdWxlSURbXSB0YXJnZXRNb2R1bGVJRHMpIHsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8dGFyZ2V0TW9kdWxlSURzLmxlbmd0aDtpKyspIHsgICAgICAgICAgICAKLSAgICAgICAgICAgIGR1bXBNb2R1bGVzSURzKHByZWZpeCwgdGFyZ2V0TW9kdWxlSURzW2ldKTsgICAgICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaT0wO2k8dGFyZ2V0TW9kdWxlSURzLmxlbmd0aDtpKyspIHsKKyAgICAgICAgICAgIGR1bXBNb2R1bGVzSURzKHByZWZpeCwgdGFyZ2V0TW9kdWxlSURzW2ldKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByb3RlY3RlZCB2b2lkIGR1bXBNb2R1bGVzSURzKFN0cmluZyBwcmVmaXgsIFRhcmdldE1vZHVsZUlEIHRhcmdldE1vZHVsZUlEKSB7CiAgICAgICAgIGxvZyhwcmVmaXggKyB0YXJnZXRNb2R1bGVJRCk7CiAgICAgICAgIFRhcmdldE1vZHVsZUlEW10gc3VicyA9IHRhcmdldE1vZHVsZUlELmdldENoaWxkVGFyZ2V0TW9kdWxlSUQoKTsKQEAgLTM0OSw3ICszNDksNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIFRhcmdldE1vZHVsZUlEW10gZ2V0QXBwbGljYXRpb25zKE1vZHVsZVR5cGUgbW9kdWxlVHlwZSwgQm9vbGVhbiBydW5uaW5nKSAKKyAgICBwdWJsaWMgVGFyZ2V0TW9kdWxlSURbXSBnZXRBcHBsaWNhdGlvbnMoTW9kdWxlVHlwZSBtb2R1bGVUeXBlLCBCb29sZWFuIHJ1bm5pbmcpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBUYXJnZXRNb2R1bGVJRFtdIG1vZHVsZXMgPSBudWxsOwogICAgICAgICBpZiAocnVubmluZz09bnVsbCkgewpAQCAtMzYzLDcgKzM2Myw3IEBACiAgICAgICAgIHJldHVybiBtb2R1bGVzOwogICAgIH0KIAotICAgIHB1YmxpYyBUYXJnZXRNb2R1bGVJRFtdIGdldEFsbEFwcGxpY2F0aW9ucyhCb29sZWFuIHJ1bm5pbmcpIAorICAgIHB1YmxpYyBUYXJnZXRNb2R1bGVJRFtdIGdldEFsbEFwcGxpY2F0aW9ucyhCb29sZWFuIHJ1bm5pbmcpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAvL2xvZygiMjIyLiBnZXRBbGxBcHBsaWNhdGlvbnMsIHJ1bm5pbmcgPSAiICsgcnVubmluZyk7CiAgICAgICAgIFRhcmdldE1vZHVsZUlEW10gZWFycyA9IGdldEFwcGxpY2F0aW9ucyhNb2R1bGVUeXBlLkVBUiwgcnVubmluZyk7CkBAIC0zNzgsMTUgKzM3OCwxNSBAQAogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhcnMubGVuZ3RoOyBpKyspIHsgbGlzdC5hZGQoY2Fyc1tpXSk7IH0KICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlamJzLmxlbmd0aDsgaSsrKSB7IGxpc3QuYWRkKGVqYnNbaV0pOyB9CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmFycy5sZW5ndGg7IGkrKykgeyBsaXN0LmFkZChyYXJzW2ldKTsgfQotICAgIAorCiAgICAgICAgIFRhcmdldE1vZHVsZUlEW10gcmVzdWx0cyA9IG5ldyBUYXJnZXRNb2R1bGVJRFtsaXN0LnNpemUoKV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7IGkrKykgeyAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgICByZXN1bHRzW2ldID0gKFRhcmdldE1vZHVsZUlEKSBsaXN0LmdldChpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICB9CiAKLSAgICBwcm90ZWN0ZWQgVGFyZ2V0TW9kdWxlSURbXSBmaW5kQXBwbGljYXRpb24oU3RyaW5nIG1vZHVsZUlELCBNb2R1bGVUeXBlIG1vZHVsZVR5cGUsIEJvb2xlYW4gcnVubmluZykgCisgICAgcHJvdGVjdGVkIFRhcmdldE1vZHVsZUlEW10gZmluZEFwcGxpY2F0aW9uKFN0cmluZyBtb2R1bGVJRCwgTW9kdWxlVHlwZSBtb2R1bGVUeXBlLCBCb29sZWFuIHJ1bm5pbmcpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAvKgogICAgICAgICAgKlRoZSBEZXBsb3ltZW50RmFjaWxpdHkgcmVxdWlyZXMgdGhhdCBzdGFydCwgc3RvcCwgcmVkZXBsb3ksIGFuZCB1bmRlcGxveSByZXF1ZXN0cwpAQCAtMzk4LDcgKzM5OCw3IEBACiAgICAgICAgIHJldHVybiBmaWx0ZXJUYXJnZXRNb2R1bGVJRHNCeU1vZHVsZShsaXN0LCBtb2R1bGVJRCk7CiAgICAgfQogCi0gICAgcHJvdGVjdGVkIFRhcmdldE1vZHVsZUlEW10gZmluZEFwcGxpY2F0aW9uKFN0cmluZyBtb2R1bGVJRCwgQm9vbGVhbiBydW5uaW5nKSAKKyAgICBwcm90ZWN0ZWQgVGFyZ2V0TW9kdWxlSURbXSBmaW5kQXBwbGljYXRpb24oU3RyaW5nIG1vZHVsZUlELCBCb29sZWFuIHJ1bm5pbmcpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAvL2xvZygiMTExIHRyeWluZyB0byBnZXQgZXZlcnl0aGluZywgbW9kdWxlaWQgPSAiICsgbW9kdWxlSUQgKyAiOyBib29sZWFuID0gIiArIHJ1bm5pbmcpOwogICAgICAgICBUYXJnZXRNb2R1bGVJRFtdIGxpc3QgPSBnZXRBbGxBcHBsaWNhdGlvbnMocnVubmluZyk7CkBAIC00MjQsMTAgKzQyNCwxMCBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiAoVGFyZ2V0TW9kdWxlSUQgW10pKHRtaWRzVG9Vc2UudG9BcnJheShuZXcgVGFyZ2V0TW9kdWxlSURbdG1pZHNUb1VzZS5zaXplKCldKSk7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGxpc3RBcHBsaWNhdGlvbnMoTW9kdWxlVHlwZSBtb2R1bGVUeXBlLCBCb29sZWFuIHJ1bm5pbmcpIAorCisgICAgcHVibGljIHZvaWQgbGlzdEFwcGxpY2F0aW9ucyhNb2R1bGVUeXBlIG1vZHVsZVR5cGUsIEJvb2xlYW4gcnVubmluZykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFRhcmdldE1vZHVsZUlEW10gbW9kdWxlcyA9IGdldEFwcGxpY2F0aW9ucyhtb2R1bGVUeXBlLCBydW5uaW5nKTsgCisgICAgICAgIFRhcmdldE1vZHVsZUlEW10gbW9kdWxlcyA9IGdldEFwcGxpY2F0aW9ucyhtb2R1bGVUeXBlLCBydW5uaW5nKTsKICAgICAgICAgaWYgKG1vZHVsZXMgPT0gbnVsbCkgewogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtb2R1bGVzLmxlbmd0aDsgaSsrKSB7CkBAIC00MzYsMTQgKzQzNiwxNCBAQAogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocnVubmluZy5ib29sZWFuVmFsdWUoKSkgewogICAgICAgICAgICAgICAgICAgICBkdW1wTW9kdWxlc0lEcygiICAgIFJVTk5JTkcgIiwgbW9kdWxlc1tpXSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZHVtcE1vZHVsZXNJRHMoIiAgICBOT1QgUlVOTklORyAiLCBtb2R1bGVzW2ldKTsgCisgICAgICAgICAgICAgICAgICAgIGR1bXBNb2R1bGVzSURzKCIgICAgTk9UIFJVTk5JTkcgIiwgbW9kdWxlc1tpXSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZUFwcENsaWVudChQcm9ncmVzc09iamVjdCBwbywgVGFyZ2V0TW9kdWxlSUQgdGFyZ2V0TW9kdWxlSUQpIHsKLSAgICAgICAgVGFyZ2V0TW9kdWxlSURbXSBzdWJzID0gdGFyZ2V0TW9kdWxlSUQuZ2V0Q2hpbGRUYXJnZXRNb2R1bGVJRCgpOyAgIAorICAgICAgICBUYXJnZXRNb2R1bGVJRFtdIHN1YnMgPSB0YXJnZXRNb2R1bGVJRC5nZXRDaGlsZFRhcmdldE1vZHVsZUlEKCk7CiAgICAgICAgIGlmIChzdWJzPT1udWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTQ1OCwyNiArNDU4LDI2IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfSAgICAKKyAgICB9CiAKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBpbnQgZmluYWxFeGl0VmFsdWUgPSAwOwogCi0gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAwIHx8ICJoZWxwIi5lcXVhbHMoYXJnc1swXSkpIHsgCi0gICAgICAgICAgICB1c2FnZSgpOyAKKyAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09IDAgfHwgImhlbHAiLmVxdWFscyhhcmdzWzBdKSkgeworICAgICAgICAgICAgdXNhZ2UoKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgICB9CiAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDUpIHsKLSAgICAgICAgICAgIHVzYWdlKCk7IAorICAgICAgICAgICAgdXNhZ2UoKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgICB9CiAKICAgICAgICAgSlNSODhEZXBsb3llciBkZXBsb3llciA9IG5ldyBKU1I4OERlcGxveWVyKGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pOwogICAgICAgICBpZiAoImRlcGxveSIuZXF1YWxzKGFyZ3NbMF0pIHx8ICJkZXBsb3ktc3RyZWFtIi5lcXVhbHMoYXJnc1swXSkpIHsKLSAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDYpIHsgCi0gICAgICAgICAgICAgICAgdXNhZ2UoKTsgCisgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPCA2KSB7CisgICAgICAgICAgICAgICAgdXNhZ2UoKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJvb2xlYW4gdXNlU3RyZWFtID0gImRlcGxveS1zdHJlYW0iLmVxdWFscyhhcmdzWzBdKTsKQEAgLTUwNyw4ICs1MDcsOCBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKCJkZXBsb3ktc3RyZWFtLXdpdGh0eXBlIi5lcXVhbHMoYXJnc1swXSkpIHsKLSAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDcpIHsgCi0gICAgICAgICAgICAgICAgdXNhZ2UoKTsgCisgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPCA3KSB7CisgICAgICAgICAgICAgICAgdXNhZ2UoKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJvb2xlYW4gdXNlU3RyZWFtID0gdHJ1ZTsKQEAgLTUxOCw3ICs1MTgsNyBAQAogICAgICAgICAgICAgICAgIGVycm9yKCJGaWxlIG5vdCBmb3VuZCA6ICIgKyBpbnB1dEZpbGUuZ2V0UGF0aCgpKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE1vZHVsZVR5cGUgdCA9IAorICAgICAgICAgICAgTW9kdWxlVHlwZSB0ID0KICAgICAgICAgICAgICAgICBNb2R1bGVUeXBlLmdldE1vZHVsZVR5cGUoKG5ldyBJbnRlZ2VyKGFyZ3NbNl0pKS5pbnRWYWx1ZSgpKTsKICAgICAgICAgICAgIEZpbGUgZGVwbG95bWVudEZpbGUgPSBudWxsOwogICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gNykgewpAQCAtNTQxLDggKzU0MSw4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoImxpc3QiLmVxdWFscyhhcmdzWzBdKSkgewogCi0gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggIT0gNSkgeyAKLSAgICAgICAgICAgICAgICB1c2FnZSgpOyAKKyAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPSA1KSB7CisgICAgICAgICAgICAgICAgdXNhZ2UoKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKICAgICAgICAgICAgIH0KIApAQCAtNTc0LDExICs1NzQsMTEgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgtMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoInJlZGVwbG95Ii5lcXVhbHMoYXJnc1swXSkgfHwgInJlZGVwbG95LXN0cmVhbSIuZXF1YWxzKGFyZ3NbMF0pKSB7Ci0gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPCA2KSB7IAotICAgICAgICAgICAgICAgIHVzYWdlKCk7IAorICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgNikgeworICAgICAgICAgICAgICAgIHVzYWdlKCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmV4aXQoLTEpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGJvb2xlYW4gdXNlU3RyZWFtID0gInJlZGVwbG95LXN0cmVhbSIuZXF1YWxzKGFyZ3NbMF0pOwogICAgICAgICAgICAgamF2YS5pby5GaWxlIGlucHV0RmlsZSA9IG5ldyBqYXZhLmlvLkZpbGUoYXJnc1s1XSk7CiAgICAgICAgICAgICBpZiAoIWlucHV0RmlsZS5leGlzdHMoKSkgewpAQCAtNjA5LDggKzYwOSw4IEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggIT0gNSkgeyAKLSAgICAgICAgICAgICAgICB1c2FnZSgpOyAKKyAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPSA1KSB7CisgICAgICAgICAgICAgICAgdXNhZ2UoKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgICAgIH0KIApAQCAtNjUxLDcgKzY1MSw3IEBACiAgICAgICAgIH0KICAgICAgICAgU3lzdGVtLmV4aXQoZmluYWxFeGl0VmFsdWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKiBJbnZva2VkIHdoZW4gYSBkZXBsb3ltZW50IHByb2dyZXNzIGV2ZW50IG9jY3Vycy4KICAgICAgKgogICAgICAqIEBwYXJhbSBldmVudCB0aGUgcHJvZ3Jlc3Mgc3RhdHVzIGV2ZW50LgpAQCAtNjc2LDcgKzY3Niw3IEBACiAgICAgICAgIFByb2dyZXNzRXZlbnQgW10gYW5zd2VyID0gbmV3IFByb2dyZXNzRXZlbnRbdGhpcy5yZWNlaXZlZEV2ZW50cy5zaXplKCldOwogICAgICAgICByZXR1cm4gKFByb2dyZXNzRXZlbnQgW10pIHRoaXMucmVjZWl2ZWRFdmVudHMudG9BcnJheShhbnN3ZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqQ2xlYXIgdGhlIGNvbGxlY3Rpb24gb2YgcmVjZWl2ZWQgZXZlbnRzIHJlY29yZGVkIGJ5IHRoaXMgZGVwbG95ZXIuCiAgICAgICovCkBAIC02ODcsMTEgKzY4NywxMSBAQAogICAgIHB1YmxpYyBUYXJnZXRNb2R1bGVJRCBbXSBnZXRNb3N0UmVjZW50VGFyZ2V0TW9kdWxlSURzKCkgewogICAgICAgICByZXR1cm4gdGhpcy5tb3N0UmVjZW50VGFyZ2V0TW9kdWxlSURzOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNsZWFyTW9zdFJlY2VudFRhcmdldE1vZHVsZUlEcygpIHsKICAgICAgICAgdGhpcy5tb3N0UmVjZW50VGFyZ2V0TW9kdWxlSURzID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgbG9hZERlcGxveW1lbnRGYWN0b3J5KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoU3lzdGVtLmdldFByb3BlcnR5KCJjb20uc3VuLmFhcy5pbnN0YWxsUm9vdCIpCkBAIC03MDgsMTAgKzcwOCwxMCBAQAogICAgICAgICAgICAgICAgIGZhY3Rvcnk9dXJsQ2xhc3NMb2FkZXIubG9hZENsYXNzKGNsYXNzTmFtZSk7CiAgICAgICAgICAgICB9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGNuZmUpIHsKICAgICAgICAgICAgICAgICBjbmZlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgfSAgIAorICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBPYmplY3QgZGYgPSBudWxsOwotICAgICAgICAgICAgdHJ5IHsgICAKKyAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgZGYgPSBmYWN0b3J5Lm5ld0luc3RhbmNlKCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gaWUpIHsKICAgICAgICAgICAgICAgICBpZS5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTcyMCw3ICs3MjAsNyBAQAogICAgICAgICAgICAgICAgIERlcGxveW1lbnRGYWN0b3J5TWFuYWdlci5nZXRJbnN0YW5jZSgpLnJlZ2lzdGVyRGVwbG95bWVudEZhY3RvcnkoKERlcGxveW1lbnRGYWN0b3J5KSBkZik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKLSAgICAgICAgICAgIH0gIAorICAgICAgICAgICAgfQogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgbG9nKCJGYWlsZWQgdG8gbG9hZCB0aGUgZGVwbG95bWVudCBmYWN0b3J5LiIpOwpAQCAtNzUzLDcgKzc1Myw3IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIGVycm9yKFN0cmluZyBtZXNzYWdlKSB7CiAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiW0pTUjg4RGVwbG95ZXJdOjogIiArIG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBsb2FkU3lzdGVtQXBwcygpIHsKICAgICAgICAgc3lzdGVtQXBwcy5hZGQoIk1FamJBcHAiKTsKICAgICAgICAgc3lzdGVtQXBwcy5hZGQoIl9fZWpiX2NvbnRhaW5lcl90aW1lcl9hcHAiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9jdXN0b21BbnRUYXNrcy9KYXZhV2l0aFJlc3VsdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2N1c3RvbUFudFRhc2tzL0phdmFXaXRoUmVzdWx0LmphdmEKaW5kZXggZmMyZmU3YS4uYTA2MTZkZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2N1c3RvbUFudFRhc2tzL0phdmFXaXRoUmVzdWx0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2N1c3RvbUFudFRhc2tzL0phdmFXaXRoUmVzdWx0LmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIGltcG9ydCBqYXZhLmlvLkZpbGU7CiAKIC8qKgotICpDdXN0b20gQW50IHRhc2sgdGhhdCBydW5zIEphdmEsIGp1c3QgbGlrZSB0aGUgYnVpbHQtaW4gamF2YSBhbnQgdGFzaywgYnV0IHN0b3JlcyB0aGUgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIGFzIGEgCisgKkN1c3RvbSBBbnQgdGFzayB0aGF0IHJ1bnMgSmF2YSwganVzdCBsaWtlIHRoZSBidWlsdC1pbiBqYXZhIGFudCB0YXNrLCBidXQgc3RvcmVzIHRoZSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gYXMgYQogICpwcm9wZXJ0eSB2YWx1ZSwgd2hpY2ggQW50J3MgamF2YSB0YXNrIGRvZXMgbm90ICh5ZXQpIHN1cHBvcnQuCiAgKjxwPgogICpGb3J0dW5hdGVseSwgd2Ugb25seSBuZWVkIHRvIG1pbmltYWxseSBleHRlbmQgdGhlIEphdmEgY2xhc3MgaW4gQW50LCBvdmVycmlkaW5nIHRoZSBleGVjdXRlIG1ldGhvZCAodG8gc2V0IHRoZSByZXN1bHQgcHJvcGVydHkgaWYKQEAgLTQyLDE0ICs0MiwxNCBAQAogICogQGF1dGhvciAgdGpxdWlubgogICovCiBwdWJsaWMgY2xhc3MgSmF2YVdpdGhSZXN1bHQgZXh0ZW5kcyBvcmcuYXBhY2hlLnRvb2xzLmFudC50YXNrZGVmcy5KYXZhIHsKLSAgICAKKwogICAgIC8qCiAgICAgICpTdHJpbmcgaG9sZGluZyB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gYmUgc2V0IHRvIHRoZSByZXN1bHQgdmFsdWUgb2YgdGhlIEphdmEgZXhlY3V0aW9uLiAgSWYKICAgICAgKnRoZSBidWlsZC54bWwgZmlsZSBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBwcm9wZXJ0eSBuYW1lLCB0aGVuIHRoaXMgd2lsbCByZW1haW4gbnVsbCBhbmQgbm8gcHJvcGVydHkKICAgICAgKnZhbHVlIGFzc2lnbm1lbnQgd2lsbCBvY2N1ci4KICAgICAgKi8KICAgICBwcml2YXRlIFN0cmluZyByZXN1bHRQcm9wZXJ0eSA9IG51bGw7Ci0gICAgCisKICAgICAvKgogICAgICAqVGhlIG5leHQgdHdvIGRlY2xhcmF0aW9ucyB3ZXJlIGR1cGxpY2F0ZWQgZnJvbSB0aGUgamF2YSB0YXNrJ3Mgc291cmNlIHNvIHRoZSBkdXBsaWNhdGVkIGV4ZWN1dGUKICAgICAgKm1ldGhvZCBjb3VsZCBiZSBtb2RpZmllZCBhcyBsaXR0bGUgYXMgcG9zc2libGUuCkBAIC02MCw3ICs2MCw3IEBACiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgSmF2YVdpdGhSZXN1bHQgKi8KICAgICBwdWJsaWMgSmF2YVdpdGhSZXN1bHQoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKICAgICAgICAgc3VwZXIuaW5pdCgpOwogICAgICAgICAvKgpAQCAtNzQsMTMgKzc0LDEzIEBACiAgICAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9mIHRoZSBwcm9jZXNzLgogICAgICAqPHA+CiAgICAgICpUaGlzIG1ldGhvZCBzaW1wbHkgbWlycm9ycyB0aGUgc3VwZXJjbGFzcyBzZXREaXIgbWV0aG9kLiAgV2UgdXNlIGl0IHRvIHNldCB0aGlzIGNsYXNzJ3MgcHJpdmF0ZSBkaXIKLSAgICAgKnZhcmlhYmxlIGFuZCBhbHNvIHRvIHNldCB0aGUgc3VwZXJjbGFzcydzIHByaXZhdGUgZGlyIHZhcmlhYmxlLiAgCisgICAgICp2YXJpYWJsZSBhbmQgYWxzbyB0byBzZXQgdGhlIHN1cGVyY2xhc3MncyBwcml2YXRlIGRpciB2YXJpYWJsZS4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREaXIoRmlsZSBkKSB7CiAgICAgICAgIHN1cGVyLnNldERpcihkKTsKICAgICAgICAgdGhpcy5kaXIgPSBkOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqQXNzaWducyB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gcmVjZWl2ZSB0aGUgcmVzdWx0IHZhbHVlIGZyb20gdGhlIEpWTSBleGVjdXRpb24uCiAgICAgICpAcGFyYW0gcmVzdWx0UHJvcGVydHkgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gYmUgYXNzaWduZWQKQEAgLTg4LDcgKzg4LDcgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRSZXN1bHRQcm9wZXJ0eShTdHJpbmcgcmVzdWx0UHJvcGVydHkpIHsKICAgICAgICAgdGhpcy5yZXN1bHRQcm9wZXJ0eSA9IHJlc3VsdFByb3BlcnR5OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIElmIHRydWUsIHRoZW4gZmFpbCBpZiB0aGUgY29tbWFuZCBleGl0cyB3aXRoIGEKICAgICAgKiByZXR1cm5jb2RlIG90aGVyIHRoYW4gMApAQCAtMTAyLDcgKzEwMiw3IEBACiAgICAgLyoqCiAgICAgICogRG8gdGhlIGV4ZWN1dGlvbi4KICAgICAgKjxwPgotICAgICAqQWxtb3N0IGFsbCBvZiB0aGlzIGNvZGUgaXMgZHVwbGljYXRlZCBmcm9tIHRoZSBzb3VyY2UgZm9yIHRoZSBidWlsZC1pbiBqYXZhIGFudCB0YXNrLiAgVGhlIGRpZmZlcmVuY2UgaXMgCisgICAgICpBbG1vc3QgYWxsIG9mIHRoaXMgY29kZSBpcyBkdXBsaWNhdGVkIGZyb20gdGhlIHNvdXJjZSBmb3IgdGhlIGJ1aWxkLWluIGphdmEgYW50IHRhc2suICBUaGUgZGlmZmVyZW5jZSBpcwogICAgICAqdGhlIGxvZ2ljIHRoYXQgY2hlY2tzIHdoZXRoZXIgdGhlIHJlc3VsdHByb3BlcnR5IHZhcmlhYmxlIGhhcyBiZWVuIHNldCBhbmQsIGlmIHNvLCBhc3NpZ25zIGEgdmFsdWUgdG8gdGhhdAogICAgICAqcHJvcGVydHkuCiAgICAgICovCkBAIC0xMTEsNyArMTExLDcgQEAKIAogICAgICAgICBpbnQgZXJyID0gLTE7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpZiAoKGVyciA9IGV4ZWN1dGVKYXZhKCkpICE9IDApIHsgCisgICAgICAgICAgICBpZiAoKGVyciA9IGV4ZWN1dGVKYXZhKCkpICE9IDApIHsKICAgICAgICAgICAgICAgICBpZiAoZmFpbE9uRXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEJ1aWxkRXhjZXB0aW9uKCJKYXZhIHJldHVybmVkOiAiICsgZXJyLCBsb2NhdGlvbik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTEyMCw3ICsxMjAsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgZGlyID0gc2F2ZWREaXI7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqSWYgdGhlIHJlc3VsdCBwcm9wZXJ0eSB3YXMgYXNzaWduZWQgLSBtZWFuaW5nIHRoZSBpbnZva2luZyBidWlsZC54bWwgd2FudHMgdG8ga25vdyB0aGUKICAgICAgICAgICAgICAqcmVzdWx0IG9mIHRoZSBKVk0gZXhlY3V0aW9uIC0gdGhlbiBhc3NpZ24gdGhlIEpWTSByZXN1bHQgdG8gdGhlIHNwZWNpZmllZCBwcm9wZXJ0eS4gIEJlY2F1c2UKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvQW5ub3RhdGlvblRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvQW5ub3RhdGlvblRlc3QuamF2YQppbmRleCA5YWE1YzdlLi44MjZlNTY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL0Fubm90YXRpb25UZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9Bbm5vdGF0aW9uVGVzdC5qYXZhCkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgIGZpbmFsIFNlcnZpY2VMb2NhdG9yIHNlcnZpY2VMb2NhdG9yID0gVXRpbHMuZ2V0U2VydmljZUxvY2F0b3IoKTsKICAgICAgICAgR2xvYmFscy5zZXREZWZhdWx0SGFiaXRhdChzZXJ2aWNlTG9jYXRvcik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIEFubm90YXRpb25UZXN0KFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHN1cGVyKG5hbWUpOwogICAgIH0KQEAgLTEyNyw3ICsxMjcsNyBAQAogICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiQnVuZGxlRGVzY3JpcHRvcnMgZG8gbm90IG1hdGNoLiIsCiAgICAgICAgICAgICBkYy5jb21wYXJlQ29udGVudChidW5kbGVEZXNjc1swXSwgYnVuZGxlRGVzY3NbMV0pKTsKICAgICB9Ci0gCisKICAgICBwcm90ZWN0ZWQgQnVuZGxlRGVzY3JpcHRvcltdIHByb2Nlc3NFamJEZXNjcmlwdG9ycygpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHByb2Nlc3Nvci5nZW5lcmF0ZUVqYkphclhtbEZpbGUod29ya0Rpcik7CkBAIC0xOTAsMTMgKzE5MCwxMyBAQAogICAgICAgICAgICAgICAgIG5ldyBXZWJTZXJ2aWNlc0RlcGxveW1lbnREZXNjcmlwdG9yRmlsZShidW5kbGVEZXNjc1swXSksCiAgICAgICAgICAgICAgICAgbmV3IFdlYlNlcnZpY2VzRGVwbG95bWVudERlc2NyaXB0b3JGaWxlKGJ1bmRsZURlc2NzWzFdKSwKICAgICAgICAgICAgICAgICBXRUJfSU5GX0RJUiwgIndlYnNlcnZpY2VzLnhtbCIpOwotICAKKwogICAgICAgICByZXR1cm4gYnVuZGxlRGVzY3M7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBCdW5kbGVEZXNjcmlwdG9yW10gbG9hZERlc2NyaXB0b3JGaWxlcygKICAgICAgICAgICAgIEJ1bmRsZURlc2NyaXB0b3IgZXhwQnVuZGxlRGVzY3JpcHRvciwKLSAgICAgICAgICAgIEJ1bmRsZURlc2NyaXB0b3IgZ2VuQnVuZGxlRGVzY3JpcHRvciwgCisgICAgICAgICAgICBCdW5kbGVEZXNjcmlwdG9yIGdlbkJ1bmRsZURlc2NyaXB0b3IsCiAgICAgICAgICAgICBEZXBsb3ltZW50RGVzY3JpcHRvckZpbGUgZXhwRGYsIERlcGxveW1lbnREZXNjcmlwdG9yRmlsZSBnZW5EZiwKICAgICAgICAgICAgIFN0cmluZyBtZXRhRGlyLCBTdHJpbmcgZGVzY0ZpbGVuYW1lKSB7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvRGVzY3JpcHRvckNvbnRlbnRDb21wYXJhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL0Rlc2NyaXB0b3JDb250ZW50Q29tcGFyYXRvci5qYXZhCmluZGV4IDVmYmU1NjkuLmE2NTZmNTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvRGVzY3JpcHRvckNvbnRlbnRDb21wYXJhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9EZXNjcmlwdG9yQ29udGVudENvbXBhcmF0b3IuamF2YQpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICAgICAgfTsKIAogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBsb2dnZXIgPSBudWxsOwotICAgICAgICAgICAgICAgIAorCiAgICAgLy8gZm9yIGVhc3kgZGVidWcKICAgICBwcml2YXRlIEZpZWxkIGxhc3RGaWVsZCA9IG51bGw7CiAKQEAgLTgwLDcgKzgwLDcgQEAKICAgICAgKiBAcmV0dXJuIGJvb2xlYW4gcmVzdWx0IG9mIGNvbXBhcmlzb24KICAgICAgKi8KICAgICBwcml2YXRlIGJvb2xlYW4gY29tcGFyZUNvbnRlbnQoRmllbGQgZmllbGQsIE9iamVjdCBvMSwgT2JqZWN0IG8yLCBTZXQgc2V0KSB7Ci0gICAgICAgIGlmIChvMSA9PSBvMiB8fCAKKyAgICAgICAgaWYgKG8xID09IG8yIHx8CiAgICAgICAgICAgICAgICAgaXNOdWxsRXF1aXZhbGVudChmaWVsZCwgbzEpICYmIGlzTnVsbEVxdWl2YWxlbnQoZmllbGQsIG8yKSkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTkxLDcgKzkxLDcgQEAKIAogICAgICAgICAgICAgaWYgKGxvZ2dlci5pc0xvZ2dhYmxlKExldmVsLkZJTkUpKSB7CiAgICAgICAgICAgICAgICAgbG9nZ2VyLmZpbmUoIi4uLiBudWxsLCBjbGFzcyBtaXNtYXRjaCBvciBleGNsdWRlZCBmb3IgIiArCi0gICAgICAgICAgICAgICAgICAgICgoZmllbGQgIT0gbnVsbCk/IGZpZWxkIDogIiIpICsgCisgICAgICAgICAgICAgICAgICAgICgoZmllbGQgIT0gbnVsbCk/IGZpZWxkIDogIiIpICsKICAgICAgICAgICAgICAgICAgICAgIiwgbzEgPSAiICsgbzEgKyAiLCBvMiA9ICIgKyBvMik7CiAgICAgICAgICAgICB9CiAKQEAgLTIxMiw3ICsyMTIsNyBAQAogICAgICAgICB9IGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBDb2xsZWN0aW9uKSB7CiAgICAgICAgICAgICBDb2xsZWN0aW9uIGNvbGwgPSAoQ29sbGVjdGlvbilvOwogICAgICAgICAgICAgcmVzdWx0ID0gKGNvbGwuc2l6ZSgpID09IDApOwotICAgICAgICB9IGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBNYXApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSBpZiAobyBpbnN0YW5jZW9mIE1hcCkgewogCiAgICAgICAgICAgICBNYXAgbWFwID0gKE1hcClvOwogICAgICAgICAgICAgaW50IHNpemUgPSBtYXAuc2l6ZSgpOwpAQCAtMzMyLDcgKzMzMiw3IEBACiAKICAgICBwcml2YXRlIHZvaWQgaW5pdExvZ2dlcigpIHsKICAgICAgICAgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihEZXNjcmlwdG9yQ29udGVudENvbXBhcmF0b3IuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgTGV2ZWwgbG9nTGV2ZWwgPSBCb29sZWFuLmdldEJvb2xlYW4oImRlYnVnIikgPyAKKyAgICAgICAgTGV2ZWwgbG9nTGV2ZWwgPSBCb29sZWFuLmdldEJvb2xlYW4oImRlYnVnIikgPwogICAgICAgICAgICAgICAgIExldmVsLkZJTkVTVCA6IExldmVsLkNPTkZJRzsKICAgICAgICAgZm9yIChIYW5kbGVyIGggOiBMb2dnZXIuZ2V0TG9nZ2VyKCIiKS5nZXRIYW5kbGVycygpKSB7CiAgICAgICAgICAgICBoLnNldExldmVsKGxvZ0xldmVsKTsKQEAgLTM3MCw3ICszNzAsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCEobyBpbnN0YW5jZW9mIFJlZmVyZW5jZVBhaXIpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSAgICAgICAKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgUmVmZXJlbmNlUGFpciByZCA9IChSZWZlcmVuY2VQYWlyKW87CiAgICAgICAgICAgICByZXR1cm4gKGMxID09IHJkLmMxICYmIGMyID09IHJkLmMyIHx8CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL0xvZ0Zvcm1hdHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9Mb2dGb3JtYXR0ZXIuamF2YQppbmRleCAwODA4YzZmLi43MTJmZWVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL0xvZ0Zvcm1hdHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvTG9nRm9ybWF0dGVyLmphdmEKQEAgLTMxLDExICszMSwxMSBAQAogICogQGF1dGhvciBkb2NoZXoKICAqLwogcHVibGljIGNsYXNzIExvZ0Zvcm1hdHRlciBleHRlbmRzIEZvcm1hdHRlciB7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBMb2dGb3JtYXR0ZXIgKi8KICAgICBwdWJsaWMgTG9nRm9ybWF0dGVyKCkgewogICAgIH0KLSAgIAorCiAgICAgcHVibGljIFN0cmluZyBmb3JtYXQoTG9nUmVjb3JkIHJlY29yZCkgewogICAgICAgICByZXR1cm4gcmVjb3JkLmdldE1lc3NhZ2UoKSsiXG4iOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvU3RhbmRhbG9uZUVycm9ySGFuZGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9TdGFuZGFsb25lRXJyb3JIYW5kbGVyLmphdmEKaW5kZXggM2RjMDVjNC4uNjk3N2YzOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9TdGFuZGFsb25lRXJyb3JIYW5kbGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9TdGFuZGFsb25lRXJyb3JIYW5kbGVyLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBvcmcuZ2xhc3NmaXNoLmFwZi5FcnJvckhhbmRsZXI7CiBpbXBvcnQgb3JnLmdsYXNzZmlzaC5hcGYuQW5ub3RhdGlvblByb2Nlc3NvckV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZ2xhc3NmaXNoLmFwZi5pbXBsLkFubm90YXRpb25VdGlsczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKIC8qKgogICogU3RhbmRhbG9uZSBJbXBsZW1lbnRhdGlvbiBvZiBFcnJvckhhbmRsZXIuCiAgKgpAQCAtMzMsOCArMzMsOCBAQAogICAgIC8qKgogICAgICAqIFJlY2VpdmUgbm90aWNhdGlvbiBvZiBhIGZpbmUgZXJyb3IgbWVzc2FnZQogICAgICAqIEBwYXJhbSBhcGUgVGhlIHdhcm5pbmcgaW5mb3JtYXRpb24KLSAgICAgKiBAdGhyb3dzIGFueSBleGNlcHRpb24gdG8gc3RvcCB0aGUgYW5ub3RhdGlvbiBwcm9jZXNzaW5nIAotICAgICAqLyAKKyAgICAgKiBAdGhyb3dzIGFueSBleGNlcHRpb24gdG8gc3RvcCB0aGUgYW5ub3RhdGlvbiBwcm9jZXNzaW5nCisgICAgICovCiAgICAgcHVibGljIHZvaWQgZmluZShBbm5vdGF0aW9uUHJvY2Vzc29yRXhjZXB0aW9uIGFwZSkgdGhyb3dzCiAgICAgICAgICAgICBBbm5vdGF0aW9uUHJvY2Vzc29yRXhjZXB0aW9uIHsKICAgICAgICAgQW5ub3RhdGlvblV0aWxzLmdldExvZ2dlcigpLmZpbmUoIkZpbmUgOiAiICsgYXBlKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvU3RhbmRhbG9uZVByb2Nlc3Nvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9TdGFuZGFsb25lUHJvY2Vzc29yLmphdmEKaW5kZXggZWVmZTZmOS4uYjU2NWZlZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9TdGFuZGFsb25lUHJvY2Vzc29yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9TdGFuZGFsb25lUHJvY2Vzc29yLmphdmEKQEAgLTkxLDcgKzkxLDcgQEAKICAgICBwcml2YXRlIE1vZHVsZVR5cGUgdHlwZSA9IG51bGw7CiAgICAgcHJpdmF0ZSBTZXQ8U3RyaW5nPiBjb21wQ2xhc3NOYW1lcyA9IG51bGw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU2VydmljZUxvY2F0b3Igc2VydmljZUxvY2F0b3IgPSBudWxsOwotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgU3RhbmRhbG9uZVByb2Nlc3NvciAqLwogICAgIHB1YmxpYyBTdGFuZGFsb25lUHJvY2Vzc29yKCkgewogICAgICAgICB0aGlzKE1vZHVsZVR5cGUuRUpCKTsKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICBpZiAoTW9kdWxlVHlwZS5FSkIuZXF1YWxzKHR5cGUpKSB7CiAgICAgICAgICAgICBidW5kbGVEZXNjcmlwdG9yID0gbmV3IEVqYkJ1bmRsZURlc2NyaXB0b3JJbXBsKCk7CiAgICAgICAgICAgICBhZUhhbmRsZXIgPSBuZXcgRWpiQnVuZGxlQ29udGV4dCgoRWpiQnVuZGxlRGVzY3JpcHRvckltcGwpIGJ1bmRsZURlc2NyaXB0b3IpOwotICAgICAgICAgICAKKwogICAgICAgICB9IGVsc2UgaWYgKE1vZHVsZVR5cGUuV0FSLmVxdWFscyh0eXBlKSkgewogICAgICAgICAgICAgYnVuZGxlRGVzY3JpcHRvciA9IG5ldyBXZWJCdW5kbGVEZXNjcmlwdG9ySW1wbCgpOwogICAgICAgICAgICAgYWVIYW5kbGVyID0gbmV3IFdlYkJ1bmRsZUNvbnRleHQoCkBAIC0xMjAsMTQgKzEyMCwxNCBAQAogICAgIHB1YmxpYyB2b2lkIHNldENvbXBvbmVudENsYXNzTmFtZXMoU2V0IGNvbXBDbGFzc05hbWVzKSB7CiAgICAgICAgIHRoaXMuY29tcENsYXNzTmFtZXMgPSBjb21wQ2xhc3NOYW1lczsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3RhbmRhbG9uZVByb2Nlc3NvciBwcm9jZXNzb3IgPSBuZXcgU3RhbmRhbG9uZVByb2Nlc3NvcigpOwogICAgICAgICBwcm9jZXNzb3IucnVuKGFyZ3MpOwogICAgICAgICBwcm9jZXNzb3IuZ2VuZXJhdGVFamJKYXJYbWxGaWxlKCIuIik7CiAgICAgICAgIHByb2Nlc3Nvci5nZW5lcmF0ZVdlYlNlcnZpY2VzWG1sRmlsZSgiLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBpbnQgcnVuKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBmb3IgKFN0cmluZyBhcmcgOiBhcmdzKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFubm90YXRpb24gbG9nIGlzIHNldCB0byAiICsgU3lzdGVtLmdldFByb3BlcnR5KCJhbm5vdGF0aW9uLmxvZyIpKTsKQEAgLTEzNSw3ICsxMzUsNyBAQAogICAgICAgICAgICAgaWYgKGxvZ1doYXQhPW51bGwpIHsKICAgICAgICAgICAgICAgICBBbm5vdGF0aW9uVXRpbHMuc2V0TG9nZ2VyVGFyZ2V0KGxvZ1doYXQpOwogICAgICAgICAgICAgICAgIGluaXRMb2dnZXIoKTsKLSAgICAgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFubm90YXRpb25VdGlscy5nZXRMb2dnZXIoKS5pbmZvKCJwcm9jZXNzaW5nICIgKyBhcmcpOwogICAgICAgICAgICAgRmlsZSBmID0gbmV3IEZpbGUoYXJnKTsKICAgICAgICAgICAgIGlmIChmLmV4aXN0cygpKSB7CkBAIC0xNTcsNyArMTU3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEVqYkJ1bmRsZURlc2NyaXB0b3JJbXBsKWJ1bmRsZURlc2NyaXB0b3I7CiAgICAgICAgICAgICAgICAgICAgICAgICBzY2FubmVyID0gc2VydmljZUxvY2F0b3IuZ2V0U2VydmljZShFamJKYXJTY2FubmVyLmNsYXNzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5uZXIucHJvY2VzcyhhcmNoaXZlLCBlamJCdW5kbGVEZXNjLCBjbGFzc0xvYWRlciwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKE1vZHVsZVR5cGUuV0FSLmVxdWFscyh0eXBlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgV2ViQnVuZGxlRGVzY3JpcHRvciB3ZWJCdW5kbGVEZXNjID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYkJ1bmRsZURlc2NyaXB0b3IpYnVuZGxlRGVzY3JpcHRvcjsKQEAgLTE3MCwyNiArMTcwLDI2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBzY2FubmVyID0gc2VydmljZUxvY2F0b3IuZ2V0U2VydmljZShXYXJTY2FubmVyLmNsYXNzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5uZXIucHJvY2VzcyhhcmNoaXZlLCB3ZWJCdW5kbGVEZXNjLCBjbGFzc0xvYWRlciwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKE1vZHVsZVR5cGUuQ0FSLmVxdWFscyh0eXBlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG1haW5DbGFzc05hbWUgPSBjb21wQ2xhc3NOYW1lcy5pdGVyYXRvcigpLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uQ2xpZW50RGVzY3JpcHRvciBhcHBDbGllbnREZXNjID0gCisgICAgICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbkNsaWVudERlc2NyaXB0b3IgYXBwQ2xpZW50RGVzYyA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBcHBsaWNhdGlvbkNsaWVudERlc2NyaXB0b3IpYnVuZGxlRGVzY3JpcHRvcjsKICAgICAgICAgICAgICAgICAgICAgICAgIGFwcENsaWVudERlc2Muc2V0TWFpbkNsYXNzTmFtZShtYWluQ2xhc3NOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5uZXIgPSBzZXJ2aWNlTG9jYXRvci5nZXRTZXJ2aWNlKEFwcENsaWVudFNjYW5uZXIuY2xhc3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgc2Nhbm5lci5wcm9jZXNzKGFyY2hpdmUsIGFwcENsaWVudERlc2MsIGNsYXNzTG9hZGVyLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBBbm5vdGF0aW9uUHJvY2Vzc29yIGFwID0gc2VydmljZUxvY2F0b3IuPFNKU0FTRmFjdG9yeT5nZXRTZXJ2aWNlKFNKU0FTRmFjdG9yeS5jbGFzcykuZ2V0QW5ub3RhdGlvblByb2Nlc3NvcihmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHVzZXIgaW5kaWNhdGVkIGEgZGlyZWN0b3J5IGZvciBoYW5kbGVycywgdGltZSB0byBhZGQgdGhlICAgICAgICAgICAgICAgICAgICAKKworCisgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSB1c2VyIGluZGljYXRlZCBhIGRpcmVjdG9yeSBmb3IgaGFuZGxlcnMsIHRpbWUgdG8gYWRkIHRoZQogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaGFuZGxlcnNEaXIgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImhhbmRsZXJzLmRpciIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlcnNEaXIhPW51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEhhbmRsZXJzKGFwLCBoYW5kbGVyc0Rpcik7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgUHJvY2Vzc2luZ0NvbnRleHQgY3R4ID0gYXAuY3JlYXRlQ29udGV4dCgpOwogICAgICAgICAgICAgICAgICAgICBjdHguc2V0RXJyb3JIYW5kbGVyKG5ldyBTdGFuZGFsb25lRXJyb3JIYW5kbGVyKCkpOwogICAgICAgICAgICAgICAgICAgICBidW5kbGVEZXNjcmlwdG9yLnNldENsYXNzTG9hZGVyKHNjYW5uZXIuZ2V0Q2xhc3NMb2FkZXIoKSk7CkBAIC0yMjEsMTMgKzIyMSwxMyBAQAogICAgIHB1YmxpYyB2b2lkIGdlbmVyYXRlQXBwQ2xpZW50WG1sRmlsZShTdHJpbmcgZGlyKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgICAgQXBwQ2xpZW50RGVwbG95bWVudERlc2NyaXB0b3JGaWxlIGFwcENsaWVudGRmID0gbmV3IEFwcENsaWVudERlcGxveW1lbnREZXNjcmlwdG9yRmlsZSgpOwogICAgICAgICAgYXBwQ2xpZW50ZGYud3JpdGUoYnVuZGxlRGVzY3JpcHRvciwgZGlyKTsKLSAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGdlbmVyYXRlRWpiSmFyWG1sRmlsZShTdHJpbmcgZGlyKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgICAgRWpiRGVwbG95bWVudERlc2NyaXB0b3JGaWxlIGVqYmRmID0gbmV3IEVqYkRlcGxveW1lbnREZXNjcmlwdG9yRmlsZSgpOwogICAgICAgICAgZWpiZGYud3JpdGUoYnVuZGxlRGVzY3JpcHRvciwgZGlyKTsKLSAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGdlbmVyYXRlV2ViWG1sRmlsZShTdHJpbmcgZGlyKSB0aHJvd3MgSU9FeGNlcHRpb24gewpAQCAtMjM5LDEzICsyMzksMTMgQEAKICAgICAgICAgIFdlYlNlcnZpY2VzRGVwbG95bWVudERlc2NyaXB0b3JGaWxlIGRkZiA9IG5ldyBXZWJTZXJ2aWNlc0RlcGxveW1lbnREZXNjcmlwdG9yRmlsZShidW5kbGVEZXNjcmlwdG9yKTsKICAgICAgICAgIGRkZi53cml0ZShidW5kbGVEZXNjcmlwdG9yLCBkaXIpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBhZGRIYW5kbGVycyhBbm5vdGF0aW9uUHJvY2Vzc29yIGFwLCBTdHJpbmcgaGFuZGxlcnNEaXIpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIYW5kbGVycyBkaXIgc2V0IGF0ICIgKyBoYW5kbGVyc0Rpcik7CiAgICAgICAgIERpcmVjdG9yeVNjYW5uZXIgc2Nhbm5lciA9IG5ldyBEaXJlY3RvcnlTY2FubmVyKCk7CiAgICAgICAgIHNjYW5uZXIucHJvY2VzcyhuZXcgRmlsZShoYW5kbGVyc0RpciksbnVsbCxudWxsKTsKLSAgICAgICAgCisKICAgICAgICAgU2V0PENsYXNzPiBlbGVtZW50cyA9IHNjYW5uZXIuZ2V0RWxlbWVudHMoKTsKICAgICAgICAgZm9yIChDbGFzcyBoYW5kbGVyQ2xhc3MgOiBlbGVtZW50cykgewogICAgICAgICAgICAgQ2xhc3NbXSBpbnRlcmZhY2VzID0gaGFuZGxlckNsYXNzLmdldEludGVyZmFjZXMoKTsKQEAgLTI1Myw3ICsyNTMsNyBAQAogICAgICAgICAgICAgICAgIGlmIChpbnRlcmYuZXF1YWxzKG9yZy5nbGFzc2Zpc2guYXBmLkFubm90YXRpb25IYW5kbGVyLmNsYXNzKSkgewogICAgICAgICAgICAgICAgICAgICBBbm5vdGF0aW9uSGFuZGxlciBoYW5kbGVyID0gKEFubm90YXRpb25IYW5kbGVyKSBoYW5kbGVyQ2xhc3MubmV3SW5zdGFuY2UoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKEFubm90YXRpb25VdGlscy5zaG91bGRMb2coImhhbmRsZXIiKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgQW5ub3RhdGlvblV0aWxzLmdldExvZ2dlcigpLmZpbmUoIlJlZ2lzdGVyaW5nIGhhbmRsZXIgIiArIGhhbmRsZXJDbGFzcyAKKyAgICAgICAgICAgICAgICAgICAgICAgIEFubm90YXRpb25VdGlscy5nZXRMb2dnZXIoKS5maW5lKCJSZWdpc3RlcmluZyBoYW5kbGVyICIgKyBoYW5kbGVyQ2xhc3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgZm9yIHR5cGUgIiArIGhhbmRsZXIuZ2V0QW5ub3RhdGlvblR5cGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYXAucHVzaEFubm90YXRpb25IYW5kbGVyKGhhbmRsZXIpOwpAQCAtMjY0LDcgKzI2NCw3IEBACiAgICAgICAgICAgICBBbm5vdGF0aW9uVXRpbHMuZ2V0TG9nZ2VyKCkuc2V2ZXJlKCJFeGNlcHRpb24gd2hpbGUgcmVnaXN0ZXJpbmcgaGFuZGxlcnMgOiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGluaXRMb2dnZXIoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBGaWxlSGFuZGxlciBoYW5kbGVyID0gbmV3IEZpbGVIYW5kbGVyKCJhbm5vdGF0aW9uLmxvZyIpOwpAQCAtMjc0LDcgKzI3NCw3IEBACiAgICAgICAgICAgICBsb2dnZXIuc2V0TGV2ZWwoTGV2ZWwuRklORSk7CiAgICAgICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihoYW5kbGVyKTt9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgIH0gICAgICAgCisgICAgICAgICAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHByZXBhcmVTZXJ2aWNlTG9jYXRvcigpIHsKQEAgLTI4Miw3ICsyODIsNyBAQAogICAgICAgICAgICAgLy8gQm9vdHN0cmFwIGEgaGsyIGVudmlyb25tZW50LgogICAgICAgICAgICAgTW9kdWxlc1JlZ2lzdHJ5IHJlZ2lzdHJ5ID0gbmV3IFN0YXRpY01vZHVsZXNSZWdpc3RyeShnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwogICAgICAgICAgICAgc2VydmljZUxvY2F0b3IgPSByZWdpc3RyeS5jcmVhdGVTZXJ2aWNlTG9jYXRvcigiZGVmYXVsdCIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN0YXJ0dXBDb250ZXh0IHN0YXJ0dXBDb250ZXh0ID0gbmV3IFN0YXJ0dXBDb250ZXh0KCk7CiAKICAgICAgICAgICAgIFNlcnZpY2VMb2NhdG9yVXRpbGl0aWVzLmFkZE9uZUNvbnN0YW50KHNlcnZpY2VMb2NhdG9yLCBzdGFydHVwQ29udGV4dCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL1V0aWxzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL1V0aWxzLmphdmEKaW5kZXggMzViNWRkYS4uNjljZWUzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9VdGlscy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvVXRpbHMuamF2YQpAQCAtMzQsNyArMzQsNyBAQAogLyoqCiAgKiBVdGlsaXRpZXMgdG8gY3JlYXRlIGEgY29uZmlndXJlZCBIYWJpdGF0IGFuZCBjYWNoZSB0aGVtCiAgKgotICogU2hhbWVsZXNzbHkgY29waWVkIGZyb20gbnVjbGV1cy90ZXN0cy91dGlsIAorICogU2hhbWVsZXNzbHkgY29waWVkIGZyb20gbnVjbGV1cy90ZXN0cy91dGlsCiAgKgogICogQGF1dGhvciBKZXJvbWUgRG9jaGV6CiAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9iYXNpYy1zY2VuYXJpb3MueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL2Jhc2ljLXNjZW5hcmlvcy54bWwKaW5kZXggODAyZGJjOC4uNDQwODM5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL2Jhc2ljLXNjZW5hcmlvcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL2Jhc2ljLXNjZW5hcmlvcy54bWwKQEAgLTY3LDcgKzY3LDcgQEAKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS52ZXJzaW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImZvcmNlIiB2YWx1ZT0idHJ1ZSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0idmVyc2lvbkV4cHJlc3Npb24iIHZhbHVlPSIke2lkZW50aWZpZXIuMn0iLz4KLQk8cGFyYW0gbmFtZT0ieG1sVmVyc2lvbklkZW50aWZpZXIiIHZhbHVlPSIke2lkZW50aWZpZXIuMX0iLz4KKyAgICA8cGFyYW0gbmFtZT0ieG1sVmVyc2lvbklkZW50aWZpZXIiIHZhbHVlPSIke2lkZW50aWZpZXIuMX0iLz4KICAgICA8L2FudGNhbGw+CiAgICAgPCEtLSB0ZXN0IHRoYXQgdGhlIGRlcGxveWVkIHZlcnNpb24gcnVubmluZyBpcyAke2lkZW50aWZpZXIuMn0gLS0+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ0ZXN0LnJlZ2lzdHJlZCI+CkBAIC01NTEsNyArNTUxLDcgQEAKICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi5wb3NpdGl2ZS5jbHVzdGVySW5zdGFuY2UyIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImRlc2NyaXB0aW9uIiB2YWx1ZT0icm9sbGluZy51cGdyYWRlKDEpIi8+CiAgICAgPC9hbnRjYWxsPgotICAgIAorCiAgICAgPCEtLSBzd2l0Y2ggdGhlIDJuZCBpbnN0YW5jZSB0byB0aGUgc3BlY2lmaWMgdmVyc2lvbiAtLT4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVuYWJsZS52ZXJzaW9uLmNsdXN0ZXJJbnN0YW5jZTIiPgogICAgICAgPHBhcmFtIG5hbWU9InZlcnNpb25FeHByZXNzaW9uIiB2YWx1ZT0iJHtpZGVudGlmaWVyLjF9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGZjMzE3YTEuLjY5MzYxYzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIHF1YWxpZmllci4xPUFMUEhBCiBpZGVudGlmaWVyLjE9QUxQSEEtMS4wLjAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvYnVpbGQueG1sCmluZGV4IGM1ODMzZTguLmMwMjM2NWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgICAgPGFudCBkaXI9InNpbXBsZS12ZXJzaW9uZWQtYXBwY2xpZW50IiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9zaW1wbGUtdmVyc2lvbmVkLWFwcGNsaWVudCIvPgogICAgICAgPC9hbnQ+Ci0gICAgICAKKwogICAgICAgPCEtLSBwbGF5IHNvbWUgdmVyc2lvbmluZyBkZXZ0ZXN0cyBzY2VuYXJpb3Mgd2l0aCBzaW1wbGUtdmVyc2lvbmVkLWVqYiAtLT4KICAgICAgIDxhbnQgZGlyPSJzaW1wbGUtdmVyc2lvbmVkLWVqYiIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3NpbXBsZS12ZXJzaW9uZWQtZWpiIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvc2ltcGxlLXZlcnNpb25lZC1hcHBjbGllbnQvc3JjL0dldEpXU0NsaWVudFN0dWJzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvc2ltcGxlLXZlcnNpb25lZC1hcHBjbGllbnQvc3JjL0dldEpXU0NsaWVudFN0dWJzLmphdmEKaW5kZXggZjUyZDAwYy4uYzkyZWM3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3NpbXBsZS12ZXJzaW9uZWQtYXBwY2xpZW50L3NyYy9HZXRKV1NDbGllbnRTdHVicy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9zaW1wbGUtdmVyc2lvbmVkLWFwcGNsaWVudC9zcmMvR2V0SldTQ2xpZW50U3R1YnMuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICogImFzYWRtaW4gZ2V0LWNsaWVudC1zdHVicyIgY29tbWFuZCBpcyBub3QgYXdhcmUgb2YgdGhlIGVuYWJsZWQgc3RhdGUuCiAgKgogICogVGhpcyBjbGFzcyByZXRyaWV2ZSB0aGUgc3R1YnMgZnJvbSB0aGUgSldTIFVSTCBvZiB0aGUgYXBwbGljYXRpb24uCi0gKiAKKyAqCiAgKiBUaGUgR2xhc3NGaXNoIHNlcnZlciBub3cgdXNlcyBodHRwIHNlc3Npb25zIHRvIG1haW50YWluCiAgKiBzb21lIGltcG9ydGFudCBpbmZvcm1hdGlvbiBkdXJpbmcgSmF2YSBXZWIgU3RhcnQgbGF1bmNoZXMuCiAgKiBGb3IgdGhpcyB0ZXN0IHRvIHdvcmsgaXQgbm93IHNhdmVzIHRoZSBzZXNzaW9uIHRoYXQgaXMgc2V0CkBAIC01OCwxMCArNTgsMTAgQEAKIHB1YmxpYyBjbGFzcyBHZXRKV1NDbGllbnRTdHVicyB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VTU0lPTl9QUk9QRVJUWV9OQU1FID0gIkpTRVNTSU9OSUQiOwotICAgIAorCiAgICAgU3RyaW5nIGphdmFXZWJTdGFydFVybDsKICAgICBTdHJpbmcgc3R1YnNQYXRoOwotICAgIAorCiAgICAgU3RyaW5nIHNlc3Npb24gPSBudWxsOwogCiAgICAgcHVibGljIEdldEpXU0NsaWVudFN0dWJzKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTE4OCw3ICsxODgsNyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0U2Vzc2lvbihmaW5hbCBIdHRwVVJMQ29ubmVjdGlvbiBjKSB7CiAgICAgICAgIGZpbmFsIFN0cmluZyBzID0gYy5nZXRIZWFkZXJGaWVsZCgiU2V0LUNvb2tpZSIpOwogICAgICAgICBsb2coIlNldC1Db29raWUgZnJvbSBzZXJ2ZXIgaXMgIiArIHMpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3NpbXBsZS12ZXJzaW9uZWQtYXBwY2xpZW50L3NyYy9TaW1wbGVWZXJzaW9uZWRBcHBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9zaW1wbGUtdmVyc2lvbmVkLWFwcGNsaWVudC9zcmMvU2ltcGxlVmVyc2lvbmVkQXBwQ2xpZW50LmphdmEKaW5kZXggYjQwMTE5ZC4uYTAwY2RmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3NpbXBsZS12ZXJzaW9uZWQtYXBwY2xpZW50L3NyYy9TaW1wbGVWZXJzaW9uZWRBcHBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvc2ltcGxlLXZlcnNpb25lZC1hcHBjbGllbnQvc3JjL1NpbXBsZVZlcnNpb25lZEFwcENsaWVudC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgKiBjbGllbnQtc3R1YiByZXRyaWV2ZWQgd2l0aCB0aGUgImFzYWRtaW4gZ2V0LWNsaWVudC1zdHVicyIgY29tbWFuZC4gSW5zdGVhZCwKICAqIHdlIGNob29zZSB0byB1c2UgdGhlIEphdmEgV2ViIFN0YXJ0IFVSTCAoW2hvc3Q6cG9ydC9jb250ZXh0Um9vdF0sIHRoZQogICogY29udGV4dHJvb3QgZXF1YWxzIHRvIHRoZSB1bnRhZ2dlZCBpZiBub3QgcHJvdmlkZWQgaW4gdGhlIGRlcGxveW1lbnQgZGVzY3JpcHRvcikKLSAqIAorICoKICAqIFRoZSBzdHVicyBhcmUgcmV0cmlldmVkIHdpdGggSldTIG1lY2hhbmlzbSwgaXQgYWxsb3dzIHVzIHRvIGNoYW5nZSB0aGUgZW5hYmxlZCBzdGF0dXMKICAqIGFuZCBtYWtlIHNvbWUgdGVzdHMuCiAgKgpAQCAtMTIwLDcgKzEyMCw3IEBACiAgICAgLyoqCiAgICAgICogQHBhcmFtIGFyZ3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7ICAgICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgU2ltcGxlVmVyc2lvbmVkQXBwQ2xpZW50IGFwcCA9IG5ldyBTaW1wbGVWZXJzaW9uZWRBcHBDbGllbnQoYXJncyk7CiAgICAgICAgIGFwcC5kb1Rlc3QoKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvc2ltcGxlLXZlcnNpb25lZC1lYXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3NpbXBsZS12ZXJzaW9uZWQtZWFyL2J1aWxkLnhtbAppbmRleCBhZTVmMWYzLi5mNzdhYjIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvc2ltcGxlLXZlcnNpb25lZC1lYXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9zaW1wbGUtdmVyc2lvbmVkLWVhci9idWlsZC54bWwKQEAgLTY2LDIwICs2NiwyMCBAQAogICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9InByZXBhcmUscHJvY2Vzcy5zZXJ2bGV0TmFtZSI+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGVVbnRhZ2dlZEFyY2hpdmUiIHZhbHVlPSIke2J1aWxkfS8ke21vZHVsZVVudGFnZ2VkTmFtZX0uJHttb2R1bGVQYWNrYWdpbmd9Ii8+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHttb2R1bGVVbnRhZ2dlZEFyY2hpdmV9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLQk8YW50IGRpcj0iJHttb2R1bGVCdWlsZERpcn0iIHRhcmdldD0iY3JlYXRlLnZlcnNpb24iIGluaGVyaXRBbGw9ImZhbHNlIj4KKyAgICA8YW50IGRpcj0iJHttb2R1bGVCdWlsZERpcn0iIHRhcmdldD0iY3JlYXRlLnZlcnNpb24iIGluaGVyaXRBbGw9ImZhbHNlIj4KICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmVyc2lvbkV4cHJlc3Npb24iIHZhbHVlPSIke3ZlcnNpb25FeHByZXNzaW9ufSIvPgogICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4bWxWZXJzaW9uSWRlbnRpZmllciIgdmFsdWU9IiIvPgogICAgICAgICA8L2FudD4KICAgICAgICAgPG1vdmUgZmlsZT0iJHtidWlsZH0vJHtzZXJ2bGV0QXBwTmFtZX0uJHttb2R1bGVQYWNrYWdpbmd9IiB0b2ZpbGU9IiR7bW9kdWxlVW50YWdnZWRBcmNoaXZlfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4bWxGaWxlIiB2YWx1ZT0iJHtnZkRERGlyfS8ke2dmRERGaWxlfSIvPgotICAgIAk8YW50Y2FsbCB0YXJnZXQ9ImdlbmVyYXRlLnhtbC5pZGVudGlmaWVyIi8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZ2VuZXJhdGUueG1sLmlkZW50aWZpZXIiLz4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthcmNoaXZlRmlsZX0iPgogICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9Ik1FVEEtSU5GLyoueG1sIi8+CiAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkfSIgaW5jbHVkZXM9IiR7bW9kdWxlVW50YWdnZWROYW1lfS4ke21vZHVsZVBhY2thZ2luZ30iLz4KICAgICAgICAgPC9qYXI+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHttb2R1bGVVbnRhZ2dlZEFyY2hpdmV9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgPC90YXJnZXQ+Ci0gICAgIAorCiA8IS0tCiAgIEN1cnJlbnRseSwgb25seSB0aGUgc2NlbmFyaW9zIHByb2Nlc3NpbmcgdGVzdC5yZWdpc3RyZWQgYW5kIHRlc3Qubm90cmVnaXN0cmVkCiAgIGFyZSBzdXBwb3J0ZWQuCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvc2ltcGxlLXZlcnNpb25lZC1lamIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3NpbXBsZS12ZXJzaW9uZWQtZWpiL2J1aWxkLnhtbAppbmRleCBlMWM1YWY2Li45YzBiZTFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvc2ltcGxlLXZlcnNpb25lZC1lamIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9zaW1wbGUtdmVyc2lvbmVkLWVqYi9idWlsZC54bWwKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAtLT4KICAgICA8cHJvcGVydHkgbmFtZT0idmVyc2lvbkluZm9zIiB2YWx1ZT0idmVyc2lvbi1pbmZvcy5wcm9wZXJ0aWVzIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9InRlc3RQYWNrYWdlIiB2YWx1ZT0idmVyc2lvbmVkZWpiIi8+Ci0gICAgICAgIAorCiAgICAgPHByb3BlcnR5IG5hbWU9ImdmRERGaWxlIiB2YWx1ZT0iZ2xhc3NmaXNoLWVqYi1qYXIueG1sIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImdmREREaXIiIHZhbHVlPSJNRVRBLUlORiIvPgogCkBAIC02OCwxMSArNjgsMTEgQEAKICAgICAgICAgICA8ZW50cnkgIGtleT0idmVyc2lvbi5pZGVudGlmaWVyIiB2YWx1ZT0iJHt2ZXJzaW9uRXhwcmVzc2lvbn0iLz4KICAgICAgICAgPC9wcm9wZXJ0eWZpbGU+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4bWxGaWxlIiB2YWx1ZT0iJHtnZkRERGlyfS8ke2dmRERGaWxlfSIvPgotICAgIAk8YW50Y2FsbCB0YXJnZXQ9ImdlbmVyYXRlLnhtbC5pZGVudGlmaWVyIi8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZ2VuZXJhdGUueG1sLmlkZW50aWZpZXIiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDwhLS0gYXNzZW1ibGU6IHBhY2thZ2UgdGhlIGVqYiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4gICAgICAgIAorICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2FyY2hpdmVGaWxlfSIgbWFuaWZlc3Q9Ik1FVEEtSU5GL01BTklGRVNULk1GIj4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtjbGFzc1BhdGh9IiBpbmNsdWRlcz0iKiovKi5jbGFzcywgKiovKi5wcm9wZXJ0aWVzIi8+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSJNRVRBLUlORi8qLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3NpbXBsZS12ZXJzaW9uZWQtZWpiL3NyYy9TaW1wbGVWZXJzaW9uZWRFamJJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvc2ltcGxlLXZlcnNpb25lZC1lamIvc3JjL1NpbXBsZVZlcnNpb25lZEVqYkltcGwuamF2YQppbmRleCAwMDI0ZTcxLi5hODI5ZjcxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvc2ltcGxlLXZlcnNpb25lZC1lamIvc3JjL1NpbXBsZVZlcnNpb25lZEVqYkltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvc2ltcGxlLXZlcnNpb25lZC1lamIvc3JjL1NpbXBsZVZlcnNpb25lZEVqYkltcGwuamF2YQpAQCAtMjcsOCArMjcsOCBAQAogcHVibGljIGNsYXNzIFNpbXBsZVZlcnNpb25lZEVqYkltcGwgaW1wbGVtZW50cyBTaW1wbGVWZXJzaW9uZWRFamIgewogCiAgICAgcHVibGljIFN0cmluZyBnZXRWZXJzaW9uKCkgewotCVByb3BlcnRpZXMgcHJvcCA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JSW5wdXRTdHJlYW0gaW4gPSBudWxsOworICAgIFByb3BlcnRpZXMgcHJvcCA9IG5ldyBQcm9wZXJ0aWVzKCk7CisgICAgSW5wdXRTdHJlYW0gaW4gPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW4gPSB0aGlzLmdldENsYXNzKCkuZ2V0UmVzb3VyY2UoInZlcnNpb24taW5mb3MucHJvcGVydGllcyIpLm9wZW5TdHJlYW0oKTsKICAgICAgICAgICAgIHByb3AubG9hZChpbik7CkBAIC0zNiw2ICszNiw2IEBACiAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKFNpbXBsZVZlcnNpb25lZEVqYkltcGwuY2xhc3MuZ2V0TmFtZSgpKS5sb2coTGV2ZWwuU0VWRVJFLCBudWxsLCBleCk7CiAgICAgICAgIH0KLQlyZXR1cm4gcHJvcC5nZXRQcm9wZXJ0eSgidmVyc2lvbi5pZGVudGlmaWVyIiwgIiIpOworICAgIHJldHVybiBwcm9wLmdldFByb3BlcnR5KCJ2ZXJzaW9uLmlkZW50aWZpZXIiLCAiIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3NpbXBsZS12ZXJzaW9uZWQtc2VydmxldC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvc2ltcGxlLXZlcnNpb25lZC1zZXJ2bGV0L2J1aWxkLnhtbAppbmRleCA1MDYzMGFjLi45YWU0ODg4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvc2ltcGxlLXZlcnNpb25lZC1zZXJ2bGV0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvc2ltcGxlLXZlcnNpb25lZC1zZXJ2bGV0L2J1aWxkLnhtbApAQCAtNzAsMTEgKzcwLDExIEBACiAgICAgICAgICAgPGVudHJ5ICBrZXk9InZlcnNpb24uaWRlbnRpZmllciIgdmFsdWU9IiR7dmVyc2lvbkV4cHJlc3Npb259Ii8+CiAgICAgICAgIDwvcHJvcGVydHlmaWxlPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0ieG1sRmlsZSIgdmFsdWU9IiR7Z2ZERERpcn0vJHtnZkRERmlsZX0iLz4KLSAgICAJPGFudGNhbGwgdGFyZ2V0PSJnZW5lcmF0ZS54bWwuaWRlbnRpZmllciIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImdlbmVyYXRlLnhtbC5pZGVudGlmaWVyIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8IS0tIGFzc2VtYmxlOiBwYWNrYWdlIHRoZSB3YXIgYXJjaGl2ZSAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4gICAgICAgIAorICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8d2FyIGRlc3RmaWxlPSIke2FyY2hpdmVGaWxlfSIgd2VieG1sPSJXRUItSU5GL3dlYi54bWwiIG1hbmlmZXN0PSJNRVRBLUlORi9NQU5JRkVTVC5NRiI+CiAgICAgICAgICAgICA8d2ViaW5mIGRpcj0iV0VCLUlORiIgaW5jbHVkZXM9ImdsYXNzZmlzaC13ZWIueG1sIi8+CiAgICAgICAgICAgICA8Y2xhc3NlcyBkaXI9IiR7Y2xhc3NQYXRofSIgaW5jbHVkZXM9IioqLyouY2xhc3MsICoqLyoucHJvcGVydGllcyI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvc2ltcGxlLXZlcnNpb25lZC1zZXJ2bGV0L3NyYy9TaW1wbGVWZXJzaW9uZWRDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9zaW1wbGUtdmVyc2lvbmVkLXNlcnZsZXQvc3JjL1NpbXBsZVZlcnNpb25lZENsaWVudC5qYXZhCmluZGV4IGM3ZDU3NDkuLjZjMzExMWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9zaW1wbGUtdmVyc2lvbmVkLXNlcnZsZXQvc3JjL1NpbXBsZVZlcnNpb25lZENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9zaW1wbGUtdmVyc2lvbmVkLXNlcnZsZXQvc3JjL1NpbXBsZVZlcnNpb25lZENsaWVudC5qYXZhCkBAIC00Miw4ICs0Miw4IEBACiAgICAgICAgICAgICB2ZXJzaW9uSWRlbnRpZmllciA9ICIiOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgICAgIAorCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy8gdGhpcyBwcm92aWRlcyBzb21lIHVzZWZ1bGwgaW5mb3JtYXRpb25zIHRvIGludmVzdGlnYXRlCiAgICAgICAgICAgICBsb2coIlRlc3Q6IGRldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9zaW1wbGUtdmVyc2lvbmVkLXNlcnZsZXQiKTsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgICAgICAgICBsb2coIkNhdWdodCBFWFBFQ1RFRCBJT0V4Y2VwdGlvbjogIiArIGV4KTsKICAgICAgICAgICAgICAgICBwYXNzKCk7CiAgICAgICAgICAgICB9Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNzUsNyArNzUsNyBAQAogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjMSA9IChIdHRwVVJMQ29ubmVjdGlvbil1Lm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7CiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKLSAgICAgICAgCisKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICBTdHJpbmcgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7CiAgICAgICAgIHJldHVybiBuZXcgVGVzdFJlc3BvbnNlKGNvZGUsIGxpbmUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3ZlcnNpb25pbmctY29tbW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy92ZXJzaW9uaW5nLWNvbW1vbi54bWwKaW5kZXggYWUwNWQ2NS4uNzdjMDUxMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3ZlcnNpb25pbmctY29tbW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvdmVyc2lvbmluZy1jb21tb24ueG1sCkBAIC0yMDAsNyArMjAwLDcgQEAKICAgVGVzdCB0aGF0IHRoZSBnaXZlbiB2ZXJzaW9uIGlzIHJlZ2lzdHJlZCBvciBub3Qgb24gdGhlICR7dGVzdFNlcnZlcn0gdGFyZ2V0LgogICBJbiBjbHVzdGVyaW5nIG1vZGUsIHRoZSBkZWZhdWx0IHRhcmdldCB0aGF0IGlzIHVzZWQgaXMgJHt0ZXN0Q2x1c3Rlcn0sCiAgIGJ1dCB3ZSBoYXZlIGFsc28gdG8gdGVzdCB0aGUgJHt0ZXN0U2VydmVyfSByZWZlcmVuY2VzLgotICAKKwogICBAcGFyYW0gJHt2ZXJzaW9uRXhwcmVzc2lvbn0gKG9wdGlvbmFsKQogICBAcGFyYW0gJHtkZXNjcmlwdGlvbn0gKG9wdGlvbmFsLCBidXQgdmVyeSBpbXBvcnRhbnQgZm9yIGludmVzdGlnYXRpb25zKQogLS0+CkBAIC0yMzUsNyArMjM1LDcgQEAKICAgPGFudGNhbGwgdGFyZ2V0PSJ0ZXN0Lm5vdHJlZ2lzdHJlZC5jbHVzdGVyIi8+CiA8L3RhcmdldD4KIAotPCEtLSAKKzwhLS0KICAgUFJPUEVSVElFUyBQUk9DRVNTSU5HIFRBUkdFVFMsIG5vdCBkaXJlY3RseSB1c2FibGUgZm9yIG1ha2luZyBzY2VuYXJpb3MKIC0tPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9hcHBtZ3QvYXBwbWd0dGVzdC9QYXJhbUluZm8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2FwcG1ndC9hcHBtZ3R0ZXN0L1BhcmFtSW5mby5qYXZhCmluZGV4IDI2NjE1ZmYuLjhhYjVjYjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2FwcG1ndC9hcHBtZ3R0ZXN0L1BhcmFtSW5mby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2FwcG1ndC9hcHBtZ3R0ZXN0L1BhcmFtSW5mby5qYXZhCkBAIC0xMTAsNSArMTEwLDUgQEAKICAgICAgICAgcmV0dXJuIGhhc2g7CiAgICAgfQogCi0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2FwcG1ndC9hcHBtZ3R0ZXN0L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2FwcG1ndC9hcHBtZ3R0ZXN0L1Rlc3RDbGllbnQuamF2YQppbmRleCA3MDZlYjM1Li5jZDI0NzQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9hcHBtZ3QvYXBwbWd0dGVzdC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvYXBwbWd0L2FwcG1ndHRlc3QvVGVzdENsaWVudC5qYXZhCkBAIC05Niw3ICs5Niw3IEBACiAgICAgICAgICAgICAgICAgbG9nKCJDYXVnaHQgRVhQRUNURUQgSU9FeGNlcHRpb246ICIgKyBleCk7CiAgICAgICAgICAgICAgICAgcGFzcygpOwogICAgICAgICAgICAgfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2FwcG1ndC9hcHBtZ3R0ZXN0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9hcHBtZ3QvYXBwbWd0dGVzdC9UZXN0U2VydmxldC5qYXZhCmluZGV4IGNmZTRmZjkuLjc5MDAxMWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2FwcG1ndC9hcHBtZ3R0ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvYXBwbWd0L2FwcG1ndHRlc3QvVGVzdFNlcnZsZXQuamF2YQpAQCAtMzQsOCArMzQsOCBAQAogICogQGF1dGhvciB0anF1aW5uCiAgKi8KIHB1YmxpYyBjbGFzcyBUZXN0U2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgIAotICAgIC8qKiAKKworICAgIC8qKgogICAgICAqIFByb2Nlc3NlcyByZXF1ZXN0cyBmb3IgYm90aCBIVFRQIDxjb2RlPkdFVDwvY29kZT4gYW5kIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZHMuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTc1LDEzICs3NSwxMyBAQAogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZShvdXQpOwotICAgICAgICB9IGZpbmFsbHkgeyAKKyAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIG91dC5jbG9zZSgpOwogICAgICAgICB9Ci0gICAgfSAKKyAgICB9CiAKICAgICAvLyA8ZWRpdG9yLWZvbGQgZGVmYXVsdHN0YXRlPSJjb2xsYXBzZWQiIGRlc2M9Ikh0dHBTZXJ2bGV0IG1ldGhvZHMuIENsaWNrIG9uIHRoZSArIHNpZ24gb24gdGhlIGxlZnQgdG8gZWRpdCB0aGUgY29kZS4iPgotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPkdFVDwvY29kZT4gbWV0aG9kLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC05Miw5ICs5Miw5IEBACiAgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwotICAgIH0gCisgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC0xMDcsNyArMTA3LDcgQEAKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBSZXR1cm5zIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIHNlcnZsZXQuCiAgICAgICogQHJldHVybiBhIFN0cmluZyBjb250YWluaW5nIHNlcnZsZXQgZGVzY3JpcHRpb24KICAgICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2FwcG1ndC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9hcHBtZ3QvYnVpbGQueG1sCmluZGV4IDNkZTE5NTAuLmMyMzk4MmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2FwcG1ndC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvYXBwbWd0L2J1aWxkLnhtbApAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2RlcGxveXBsYW4uamFyfSI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0iIGluY2x1ZGVzPSJzdW4td2ViLnhtbCIvPgogICAgICAgICA8L2phcj4KLSAgICAgICAgCisKICAgICAgICAgPHdhciBkZXN0ZmlsZT0iJHthbGwud2FyfSIgd2VieG1sPSJ3ZWIueG1sIj4KICAgICAgICAgICAgIDx3ZWJpbmYgZGlyPSIuIiBpbmNsdWRlcz0ic3VuLXdlYi54bWwiLz4KICAgICAgICAgICAgIDxjbGFzc2VzIGRpcj0iJHtidWlsZH0iLz4KQEAgLTg5LDE2ICs4OSwxNiBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImVuYWJsZS5hc2FkbWluIj4gCisgICAgPHRhcmdldCBuYW1lPSJlbmFibGUuYXNhZG1pbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLmVuYWJsZS5hc2FkbWluIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGlzYWJsZS5hc2FkbWluIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24uZGlzYWJsZS5hc2FkbWluIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KQEAgLTM2OCw3ICszNjgsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImV4dHJhLmFyZ3MiIHZhbHVlPSIke2N1c3RvbWl6ZWQuY29uZmlnLmNsaWVudC5hcmdzfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjaGVjay5hZGRlZC5jdXN0b21pemF0aW9uLmFuZC5zdXBwcmVzc2VkLm9yaWdpbmFsLmNvbmZpZyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2hlY2suYWRkaXRpdmUuY3VzdG9taXphdGlvbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nLmlkIiB2YWx1ZT0iJHtsb2cuaWR9LjEiLz4KQEAgLTM5MSw3ICszOTEsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImV4dHJhLmFyZ3MiIHZhbHVlPSItcGFyYW0gYnVpbHRpbj1pbi1hcHAiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjbG9iYmVyIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHtwb3J0YWJsZS53YXJ9Ii8+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHthbGwud2FyfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvZGVwbG95ZGlyL1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2RlcGxveWRpci9UZXN0Q2xpZW50LmphdmEKaW5kZXggNjRjY2IyMy4uNjRlMmJjNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvZGVwbG95ZGlyL1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9kZXBsb3lkaXIvVGVzdENsaWVudC5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgIFRlc3RDbGllbnQgY2xpZW50ID0gbmV3IFRlc3RDbGllbnQoKTsKICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIFN0cmluZyB1cmwgPSBhcmdzWzBdOwpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICAgICAgICAgIGxvZygiQ2F1Z2h0IEVYUEVDVEVEIElPRXhjZXB0aW9uOiAiICsgZXgpOwogICAgICAgICAgICAgICAgIHBhc3MoKTsKICAgICAgICAgICAgIH0KLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9kZXBsb3lkaXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvZGVwbG95ZGlyL2J1aWxkLnhtbAppbmRleCA3NGJmYmNjLi5mNWQ1NjY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9kZXBsb3lkaXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2RlcGxveWRpci9idWlsZC54bWwKQEAgLTU2LDcgKzU2LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95ZGlyLmFzYWRtaW4iIGRlcGVuZHM9InByZXBhcmUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5kZXBsb3lkaXIuYXNhZG1pbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke2J1aWxkfS8ke3Rlc3ROYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CkBAIC03Miw3ICs3Miw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLnYzLnJlZGVwbG95LmFzYWRtaW4iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSItLW5hbWUgJHt0ZXN0TmFtZX0iLz4KLSAgICAgICAgPC9hbnRjYWxsPiAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAKQEAgLTg1LDcgKzg1LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kuYXNhZG1pbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLnVuZGVwbG95LmFzYWRtaW4iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgpAQCAtMTcyLDcgKzE3Miw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLnBvc2l0aXZlLmZvbyI+PHBhcmFtIG5hbWU9ImxvZy5pZCIgdmFsdWU9IjUiLz48L2FudGNhbGw+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlY2xhcmUtdGVzdCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGVzY3JpcHRpb24iIHZhbHVlPSJ3YXIvZGVwbG95ZGlyIFRlc3QgYXNhZG1pbiByZWRlcGxveWRpciBwcmVzZXJ2ZXMgY29udGV4dCByb290Ii8+Ci0gICAgICAgIDwvYW50Y2FsbD4gICAgICAgIAorICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVkZXBsb3lkaXIuYXNhZG1pbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi5wb3NpdGl2ZS5mb28iPjxwYXJhbSBuYW1lPSJsb2cuaWQiIHZhbHVlPSI2Ii8+PC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlY2xhcmUtdGVzdCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9kZXBsb3lkaXIvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2RlcGxveWRpci93ZWIueG1sCmluZGV4IDU4NzUwNTEuLjQ0ZWJlYWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2RlcGxveWRpci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2RlcGxveWRpci93ZWIueG1sCkBAIC0xOCw4ICsxOCw4IEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMi40IgotICAgICAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIAotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgogICA8ZGlzcGxheS1uYW1lPmRlcGxveWRpcjwvZGlzcGxheS1uYW1lPgogICA8c2VydmxldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2h0bWxvbmx5L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2h0bWxvbmx5L1Rlc3RDbGllbnQuamF2YQppbmRleCA0NzAyODFhLi41MWMyNDdmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9odG1sb25seS9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvaHRtbG9ubHkvVGVzdENsaWVudC5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgIFRlc3RDbGllbnQgY2xpZW50ID0gbmV3IFRlc3RDbGllbnQoKTsKICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIFN0cmluZyB1cmwgPSBhcmdzWzBdOwpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICAgICAgICAgIGxvZygiQ2F1Z2h0IEVYUEVDVEVEIElPRXhjZXB0aW9uOiAiICsgZXgpOwogICAgICAgICAgICAgICAgIHBhc3MoKTsKICAgICAgICAgICAgIH0KLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9odG1sb25seS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9odG1sb25seS9idWlsZC54bWwKaW5kZXggMGUwOGNjNS4uMjUwZjgyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvaHRtbG9ubHkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2h0bWxvbmx5L2J1aWxkLnhtbApAQCAtNzgsMTYgKzc4LDE2IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZW5hYmxlLmFzYWRtaW4iPiAKKyAgICA8dGFyZ2V0IG5hbWU9ImVuYWJsZS5hc2FkbWluIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24uZW5hYmxlLmFzYWRtaW4iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkaXNhYmxlLmFzYWRtaW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5kaXNhYmxlLmFzYWRtaW4iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgpAQCAtMTcyLDcgKzE3Miw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc3NlbWJsZSIvPgotICAgICAgICAKKwogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS5hc2FkbWluIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLnBvc2l0aXZlIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2cuaWQiIHZhbHVlPSIxIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9odG1sb25seS93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvaHRtbG9ubHkvd2ViLnhtbAppbmRleCAzZGZiZTIwLi43NjMzYzkwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9odG1sb25seS93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2h0bWxvbmx5L3dlYi54bWwKQEAgLTE4LDggKzE4LDggQEAKIC0tPgogCiA8d2ViLWFwcCB2ZXJzaW9uPSIyLjQiCi0gICAgICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICAgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIgorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+CiAgIDxkaXNwbGF5LW5hbWU+aHRtbG9ubHk8L2Rpc3BsYXktbmFtZT4KICAgPHdlbGNvbWUtZmlsZS1saXN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvanNwb25seS9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9qc3Bvbmx5L1Rlc3RDbGllbnQuamF2YQppbmRleCBmZWVjZmYyLi5hZDBhMzE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9qc3Bvbmx5L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9qc3Bvbmx5L1Rlc3RDbGllbnQuamF2YQpAQCAtMjksNyArMjksNyBAQAogICAgICAgICBUZXN0Q2xpZW50IGNsaWVudCA9IG5ldyBUZXN0Q2xpZW50KCk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBTdHJpbmcgdXJsID0gYXJnc1swXTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgICAgICAgICBsb2coIkNhdWdodCBFWFBFQ1RFRCBJT0V4Y2VwdGlvbjogIiArIGV4KTsKICAgICAgICAgICAgICAgICBwYXNzKCk7CiAgICAgICAgICAgICB9Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvanNwb25seS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9qc3Bvbmx5L2J1aWxkLnhtbAppbmRleCA0MWZkZDg0Li45NjAzODRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9qc3Bvbmx5L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9qc3Bvbmx5L2J1aWxkLnhtbApAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgICAgICAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iLz4KIAogICAgICAgICAgICAgPGNsYXNzcGF0aD4KLQkgICAgICAgPHBhdGggcmVmaWQ9ImdmdjMuY2xhc3NwYXRoIi8+CisgICAgICAgICAgIDxwYXRoIHJlZmlkPSJnZnYzLmNsYXNzcGF0aCIvPgogICAgICAgICAgICAgICAgPHBhdGggbG9jYXRpb249IiR7YnVpbGR9Ii8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvanNwb25seS93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvanNwb25seS93ZWIueG1sCmluZGV4IDc2OTc4NGUuLjk2M2ZkMWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2pzcG9ubHkvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9qc3Bvbmx5L3dlYi54bWwKQEAgLTE4LDggKzE4LDggQEAKIC0tPgogCiA8d2ViLWFwcCB2ZXJzaW9uPSIyLjQiCi0gICAgICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICAgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIgorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+CiAgIDxkaXNwbGF5LW5hbWU+anNwb25seTwvZGlzcGxheS1uYW1lPgogICA8d2VsY29tZS1maWxlLWxpc3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9ub2phcmV4cGFuc2lvbi9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9ub2phcmV4cGFuc2lvbi9UZXN0Q2xpZW50LmphdmEKaW5kZXggYmZjNTRjYS4uOGNjMjk1NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvbm9qYXJleHBhbnNpb24vVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL25vamFyZXhwYW5zaW9uL1Rlc3RDbGllbnQuamF2YQpAQCAtMjksNyArMjksNyBAQAogICAgICAgICBUZXN0Q2xpZW50IGNsaWVudCA9IG5ldyBUZXN0Q2xpZW50KCk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBTdHJpbmcgdXJsID0gYXJnc1swXTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgICAgICAgICBsb2coIkNhdWdodCBFWFBFQ1RFRCBJT0V4Y2VwdGlvbjogIiArIGV4KTsKICAgICAgICAgICAgICAgICBwYXNzKCk7CiAgICAgICAgICAgICB9Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvbm9qYXJleHBhbnNpb24vVGVzdFByb3AueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvbm9qYXJleHBhbnNpb24vVGVzdFByb3AueG1sCmluZGV4IDc3ODg3MDQuLjU3ZGMwNmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL25vamFyZXhwYW5zaW9uL1Rlc3RQcm9wLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9ub2phcmV4cGFuc2lvbi9UZXN0UHJvcC54bWwKQEAgLTIwLDIxICsyMCwyMSBAQAogPHByb2plY3QgbmFtZT0iY2hhbmdlbWUiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAgICAgPHRhcmdldCBuYW1lPSJhbGwiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVuc3VyZS5uby5maWxlIj4KLQkJPHBhcmFtIG5hbWU9ImZpbGUiIHZhbHVlPSIvdGltIi8+Ci0JICA8L2FudGNhbGw+CisgICAgICAgIDxwYXJhbSBuYW1lPSJmaWxlIiB2YWx1ZT0iL3RpbSIvPgorICAgICAgPC9hbnRjYWxsPgogCi0JICA8YW50Y2FsbCB0YXJnZXQ9ImVuc3VyZS5uby5maWxlIj4KLQkJPHBhcmFtIG5hbWU9ImZpbGUiIHZhbHVlPSIvdGltL2pqamoiLz4KLQkgIDwvYW50Y2FsbD4KKyAgICAgIDxhbnRjYWxsIHRhcmdldD0iZW5zdXJlLm5vLmZpbGUiPgorICAgICAgICA8cGFyYW0gbmFtZT0iZmlsZSIgdmFsdWU9Ii90aW0vampqaiIvPgorICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJlbnN1cmUubm8uZmlsZSI+CiAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtmaWxlfSIgcHJvcGVydHk9InJlc3VsdCIgdmFsdWU9IjEiLz4KLQkgIDxjb25kaXRpb24gcHJvcGVydHk9InJlc3VsdCIgdmFsdWU9IjAiPgotCQk8bm90PgotCQkJPGlzc2V0IHByb3BlcnR5PSJyZXN1bHQiLz4KLQkJPC9ub3Q+Ci0JICA8L2NvbmRpdGlvbj4KKyAgICAgIDxjb25kaXRpb24gcHJvcGVydHk9InJlc3VsdCIgdmFsdWU9IjAiPgorICAgICAgICA8bm90PgorICAgICAgICAgICAgPGlzc2V0IHByb3BlcnR5PSJyZXN1bHQiLz4KKyAgICAgICAgPC9ub3Q+CisgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgPGVjaG8+UmVzdWx0IGZvciBmaWxlICR7ZmlsZX06ICR7cmVzdWx0fTwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL25vamFyZXhwYW5zaW9uL1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9ub2phcmV4cGFuc2lvbi9UZXN0U2VydmxldC5qYXZhCmluZGV4IDUxMjc2MWUuLjk0Nzk1Y2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL25vamFyZXhwYW5zaW9uL1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvbm9qYXJleHBhbnNpb24vVGVzdFNlcnZsZXQuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KICAgICB7CiAgICAgICAgIHRyeSB7Ci0JCQlEdW1teUxpYiBkID0gbmV3IER1bW15TGliKCk7CisgICAgICAgICAgICBEdW1teUxpYiBkID0gbmV3IER1bW15TGliKCk7CiAgICAgICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKICAgICAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL25vamFyZXhwYW5zaW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL25vamFyZXhwYW5zaW9uL2J1aWxkLnhtbAppbmRleCA4YmYyZjY2Li5jM2ZkZjgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9ub2phcmV4cGFuc2lvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvbm9qYXJleHBhbnNpb24vYnVpbGQueG1sCkBAIC0xOTEsMTEgKzE5MSwxMSBAQAogRmlsZSB0byBjaGVjayBpcyAke2ZpbGUudG8uY2hlY2t9PC9lY2hvPgogICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZmlsZS50by5jaGVja30iIHByb3BlcnR5PSJyZXN1bHQiIHZhbHVlPSIxIi8+CiAgICAgICAgIDxlY2hvPkFmdGVyIGF2YWlsYWJsZSBjaGVjaywgcmVzdWx0IGlzIG5vdyAke3Jlc3VsdH08L2VjaG8+Ci0JICA8Y29uZGl0aW9uIHByb3BlcnR5PSJyZXN1bHQiIHZhbHVlPSIwIj4KLQkJPG5vdD4KLQkJCTxpc3NldCBwcm9wZXJ0eT0icmVzdWx0Ii8+Ci0JCTwvbm90PgotCSAgPC9jb25kaXRpb24+CisgICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJyZXN1bHQiIHZhbHVlPSIwIj4KKyAgICAgICAgPG5vdD4KKyAgICAgICAgICAgIDxpc3NldCBwcm9wZXJ0eT0icmVzdWx0Ii8+CisgICAgICAgIDwvbm90PgorICAgICAgPC9jb25kaXRpb24+CiAgICAgICAgIDxlY2hvPkFmdGVyIGZpbmFsIGNoZWNrIG9mIHJlc3VsdHMsIHZhbHVlIGlzIG5vdyAke3Jlc3VsdH08L2VjaG8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icHJvY2Vzc1Jlc3VsdCI+CiAgICAgICAgIDwvYW50Y2FsbD4KQEAgLTI2NSw3ICsyNjUsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ4eCIgZGVwZW5kcz0iaW5pdCI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVuc3VyZS5uby5maWxlIj4KLQkJPHBhcmFtIG5hbWU9ImZpbGUiIHZhbHVlPSIke2ZpbGUudG8uY2hlY2t9Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJmaWxlIiB2YWx1ZT0iJHtmaWxlLnRvLmNoZWNrfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvbm9qYXJleHBhbnNpb24vZHVtbXlsaWIvRHVtbXlMaWIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL25vamFyZXhwYW5zaW9uL2R1bW15bGliL0R1bW15TGliLmphdmEKaW5kZXggOWNkMmYwZS4uNGU4NjcyNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvbm9qYXJleHBhbnNpb24vZHVtbXlsaWIvRHVtbXlMaWIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9ub2phcmV4cGFuc2lvbi9kdW1teWxpYi9EdW1teUxpYi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIHB1YmxpYyBjbGFzcyBEdW1teUxpYiB7CiAKLQlwdWJsaWMgRHVtbXlMaWIoKSB7fQorICAgIHB1YmxpYyBEdW1teUxpYigpIHt9CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldER1bW15U3RyaW5nKCkgewogICAgICAgICByZXR1cm4gIlRoaXMgaXMgdGhlIHN0cmluZyBmcm9tIGR1bW15IGxpYiI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9ub2phcmV4cGFuc2lvbi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvbm9qYXJleHBhbnNpb24vd2ViLnhtbAppbmRleCAzMWVhZWQ0Li40Yzc0MjU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9ub2phcmV4cGFuc2lvbi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL25vamFyZXhwYW5zaW9uL3dlYi54bWwKQEAgLTE4LDggKzE4LDggQEAKIC0tPgogCiA8d2ViLWFwcCB2ZXJzaW9uPSIyLjQiCi0gICAgICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICAgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIgorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+CiAgIDxkaXNwbGF5LW5hbWU+bm9qYXJleHBhbnNpb248L2Rpc3BsYXktbmFtZT4KICAgPHNlcnZsZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9zZXJ2bGV0b25seS9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9zZXJ2bGV0b25seS9UZXN0Q2xpZW50LmphdmEKaW5kZXggMGZjYTc5NS4uMjEyNThiZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvc2VydmxldG9ubHkvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3NlcnZsZXRvbmx5L1Rlc3RDbGllbnQuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogICAgICAgICBUZXN0Q2xpZW50IGNsaWVudCA9IG5ldyBUZXN0Q2xpZW50KCk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBTdHJpbmcgdXJsID0gYXJnc1swXTsKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgICAgICAgICBsb2coIkNhdWdodCBFWFBFQ1RFRCBJT0V4Y2VwdGlvbjogIiArIGV4KTsKICAgICAgICAgICAgICAgICBwYXNzKCk7CiAgICAgICAgICAgICB9Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvc2VydmxldG9ubHkvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3NlcnZsZXRvbmx5L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggYjE3Mzc3Yy4uZTcwZTBlYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvc2VydmxldG9ubHkvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9zZXJ2bGV0b25seS9UZXN0U2VydmxldC5qYXZhCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICAgKiBUaGUgZm9sbG93aW5nIGxpbmUgd2lsbCBjb21waWxlIGNvcnJlY3RseSBvbmx5IHdoZW4gdGhlIGFudAogICAgICAgICAgICAgICogZGV2dGVzdCBpcyBydW5uaW5nLiAgVGhlIENoYW5nZWFibGVDbGFzcyBjbGFzcyBpcyBnZW5lcmF0ZWQKICAgICAgICAgICAgICAqIGJ5IHRoZSBhbnQgdGFzayAodHdvIGRpZmZlcmVudCB3YXlzIGF0IHR3byBkaWZmZXJlbnQgcG9pbnRzCi0gICAgICAgICAgICAgKiBpbiB0aGUgcHJvY2Vzc2luZykuICAKKyAgICAgICAgICAgICAqIGluIHRoZSBwcm9jZXNzaW5nKS4KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgZmluYWwgU3RyaW5nIGNoYW5nZWFibGVWYWx1ZSA9IENoYW5nZWFibGVDbGFzcy5jaGFuZ2VhYmxlVmFsdWUoKTsKICAgICAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvc2VydmxldG9ubHkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvc2VydmxldG9ubHkvYnVpbGQueG1sCmluZGV4IDhiN2E3NWEuLjRkNzRhY2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3NlcnZsZXRvbmx5L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9zZXJ2bGV0b25seS9idWlsZC54bWwKQEAgLTY1LDggKzY1LDggQEAKICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtkZXBsb3lwbGFuLmphcn0iPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Jhc2VkaXJ9IiBpbmNsdWRlcz0iZ2xhc3NmaXNoLXdlYi54bWwsc3VuLXdlYi54bWwiLz4KICAgICAgICAgPC9qYXI+Ci0gICAgICAgIAotICAgICAgICA8IS0tIAorCisgICAgICAgIDwhLS0KICAgICAgICAgICAgICBUaGUgbWFuaWZlc3QgaW4gdGhlIG5leHQgdGFzayBzcGVjaWZpZXMgYSBNYWluLUNsYXNzLiAgSXQgaXMgbm90IHVzZWQgZXhjZXB0CiAgICAgICAgICAgICAgdG8gbWFrZSBzdXJlIHRoZSBhcHAgY2xpZW50IHNuaWZmZXIgZG9lcyBub3QgY2xhaW0gdGhlIHdlYgogICAgICAgICAgICAgIG1vZHVsZSBzaW1wbHkgYmVjYXVzZSBpdCBoYXMgYSBNYWluLUNsYXNzIHNldHRpbmcuCkBAIC0xMTMsMTYgKzExMywxNiBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImVuYWJsZS5hc2FkbWluIj4gCisgICAgPHRhcmdldCBuYW1lPSJlbmFibGUuYXNhZG1pbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLmVuYWJsZS5hc2FkbWluIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGlzYWJsZS5hc2FkbWluIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24uZGlzYWJsZS5hc2FkbWluIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3NlcnZsZXRvbmx5L3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9zZXJ2bGV0b25seS93ZWIueG1sCmluZGV4IGQ5MzIxZWYuLjZhZjZiNGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3NlcnZsZXRvbmx5L3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvc2VydmxldG9ubHkvd2ViLnhtbApAQCAtMTgsOCArMTgsOCBAQAogLS0+CiAKIDx3ZWItYXBwIHZlcnNpb249IjIuNCIKLSAgICAgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiAKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgICAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiCisgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KICAgPGRpc3BsYXktbmFtZT5zZXJ2bGV0b25seTwvZGlzcGxheS1uYW1lPgogICA8c2VydmxldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3ZpcnR1YWxzZXJ2ZXIvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvdmlydHVhbHNlcnZlci9UZXN0Q2xpZW50LmphdmEKaW5kZXggMDZjZmExMS4uZTJjYTljNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvdmlydHVhbHNlcnZlci9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvdmlydHVhbHNlcnZlci9UZXN0Q2xpZW50LmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgVGVzdENsaWVudCBjbGllbnQgPSBuZXcgVGVzdENsaWVudCgpOwogICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgU3RyaW5nIHVybCA9IGFyZ3NbMF07CkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgICAgICAgICAgbG9nKCJDYXVnaHQgRVhQRUNURUQgSU9FeGNlcHRpb246ICIgKyBleCk7CiAgICAgICAgICAgICAgICAgcGFzcygpOwogICAgICAgICAgICAgfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3ZpcnR1YWxzZXJ2ZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvdmlydHVhbHNlcnZlci9idWlsZC54bWwKaW5kZXggNzU5YWJiZS4uNmFlZTU2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvdmlydHVhbHNlcnZlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvdmlydHVhbHNlcnZlci9idWlsZC54bWwKQEAgLTI3LDkgKzI3LDkgQEAKIAogICAgIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0Um9vdCIgdmFsdWU9IndhciIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9InZpcnR1YWxzZXJ2ZXIiLz4KLSAgICA8cHJvcGVydHkgbmFtZT0idXJsMiIgCisgICAgPHByb3BlcnR5IG5hbWU9InVybDIiCiAgICAgICAgICAgICAgIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0LjJ9LyR7Y29udGV4dFJvb3R9LyR7dGVzdE5hbWV9Ii8+Ci0gICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJwcmVwYXJlIiBkZXBlbmRzPSJpbml0Ij4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InBvcnRhYmxlLndhciIgdmFsdWU9IiR7YnVpbGR9LyR7dGVzdE5hbWV9LXBvcnRhYmxlLndhciIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iYWxsLndhciIgdmFsdWU9IiR7YnVpbGR9LyR7dGVzdE5hbWV9LndhciIvPgpAQCAtNjEsNyArNjEsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUudmlydHVhbC5zZXJ2ZXIiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5jcmVhdGUudmlydHVhbC5zZXJ2ZXIuYXNhZG1pbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKICAgICAgICAgICAgICAgIHZhbHVlPSItLWhvc3RzICR7aHR0cC5ob3N0fSAke3ZpcnR1YWwuc2VydmVyLm5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KQEAgLTg5LDE0ICs4OSwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kuYXNhZG1pbiIgZGVwZW5kcz0icHJlcGFyZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLmRlcGxveS5hc2FkbWluIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9Ii0tdmlydHVhbHNlcnZlcnMgJHt2aXJ0dWFsLnNlcnZlci5uYW1lfSAke2FsbC53YXJ9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kuYXNhZG1pbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLnVuZGVwbG95LmFzYWRtaW4iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgpAQCAtMTQ2LDcgKzE0Niw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KLSAgICAgICAgPCEtLSB0ZXN0IHRoYXQgdGhlIGFwcCBpcyBkZXBsb3llZCB0byB0aGUgbmV3bHkgCisgICAgICAgIDwhLS0gdGVzdCB0aGF0IHRoZSBhcHAgaXMgZGVwbG95ZWQgdG8gdGhlIG5ld2x5CiAgICAgICAgICAgICAgY3JlYXRlZCB2aXJ0dWFsIHNlcnZlciAtLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRlc2NyaXB0aW9uIiB2YWx1ZT0id2FyL3ZpcnR1YWxzZXJ2ZXIgVGVzdCBhc2FkbWluIGRlcGxveTEiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3ZpcnR1YWxzZXJ2ZXIvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3ZpcnR1YWxzZXJ2ZXIvd2ViLnhtbAppbmRleCA2ZjE0YzRlLi4zZGY2ZWE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci92aXJ0dWFsc2VydmVyL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvdmlydHVhbHNlcnZlci93ZWIueG1sCkBAIC0xOCw4ICsxOCw4IEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMi40IgotICAgICAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIAotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgogICA8ZGlzcGxheS1uYW1lPnZpcnR1YWxzZXJ2ZXI8L2Rpc3BsYXktbmFtZT4KICAgPHNlcnZsZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJpbmZsaWIvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvd2ViaW5mbGliL1Rlc3RDbGllbnQuamF2YQppbmRleCBjMjUwMmQ5Li5iYWY5ZjAwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJpbmZsaWIvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYmluZmxpYi9UZXN0Q2xpZW50LmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgVGVzdENsaWVudCBjbGllbnQgPSBuZXcgVGVzdENsaWVudCgpOwogICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgU3RyaW5nIHVybCA9IGFyZ3NbMF07CkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgICAgICAgICAgbG9nKCJDYXVnaHQgRVhQRUNURUQgSU9FeGNlcHRpb246ICIgKyBleCk7CiAgICAgICAgICAgICAgICAgcGFzcygpOwogICAgICAgICAgICAgfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYmluZmxpYi9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvd2ViaW5mbGliL1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggNTEyNzYxZS4uOTQ3OTVjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvd2ViaW5mbGliL1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvd2ViaW5mbGliL1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uCiAgICAgewogICAgICAgICB0cnkgewotCQkJRHVtbXlMaWIgZCA9IG5ldyBEdW1teUxpYigpOworICAgICAgICAgICAgRHVtbXlMaWIgZCA9IG5ldyBEdW1teUxpYigpOwogICAgICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CiAgICAgICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJpbmZsaWIvZHVtbXlsaWIvRHVtbXlMaWIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYmluZmxpYi9kdW1teWxpYi9EdW1teUxpYi5qYXZhCmluZGV4IDljZDJmMGUuLjRlODY3MjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYmluZmxpYi9kdW1teWxpYi9EdW1teUxpYi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYmluZmxpYi9kdW1teWxpYi9EdW1teUxpYi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIHB1YmxpYyBjbGFzcyBEdW1teUxpYiB7CiAKLQlwdWJsaWMgRHVtbXlMaWIoKSB7fQorICAgIHB1YmxpYyBEdW1teUxpYigpIHt9CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldER1bW15U3RyaW5nKCkgewogICAgICAgICByZXR1cm4gIlRoaXMgaXMgdGhlIHN0cmluZyBmcm9tIGR1bW15IGxpYiI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJpbmZsaWIvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYmluZmxpYi93ZWIueG1sCmluZGV4IDkzMTNiMjMuLjI0MTE2OGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYmluZmxpYi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYmluZmxpYi93ZWIueG1sCkBAIC0xOCw4ICsxOCw4IEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMi40IgotICAgICAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIAotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgogICA8ZGlzcGxheS1uYW1lPndlYmluZmxpYjwvZGlzcGxheS1uYW1lPgogICA8c2VydmxldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYnNlcnZpY2VzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYnNlcnZpY2VzL2J1aWxkLnhtbAppbmRleCA1NGU0MDQ2Li5hZWY3ZTgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJzZXJ2aWNlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvd2Vic2VydmljZXMvYnVpbGQueG1sCkBAIC0yMywxMiArMjMsMTIgQEAKIAogPHByb2plY3QgbmFtZT0id2Vic2VydmljZXMiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLQkmY29tbW9uQnVpbGQ7CisgICAgJmNvbW1vbkJ1aWxkOwogCi0JPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+Ci0JCTxhbnQgZGlyPSJoZWxsb3NlcnZpY2UiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vaGVsbG9zZXJ2aWNlIi8+Ci0JCTwvYW50PgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgorICAgICAgICA8YW50IGRpcj0iaGVsbG9zZXJ2aWNlIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2hlbGxvc2VydmljZSIvPgorICAgICAgICA8L2FudD4KKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvd2Vic2VydmljZXMvaGVsbG9zZXJ2aWNlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYnNlcnZpY2VzL2hlbGxvc2VydmljZS9idWlsZC54bWwKaW5kZXggNDc0MGJkNS4uY2Y4MWM3MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvd2Vic2VydmljZXMvaGVsbG9zZXJ2aWNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJzZXJ2aWNlcy9oZWxsb3NlcnZpY2UvYnVpbGQueG1sCkBAIC0yNSw3ICsyNSw3IEBACiAKICAgICAmY29tbW9uQnVpbGQ7CiAgICAgPHByb3BlcnR5IG5hbWU9ImFyY2hpdmVkaXIiIHZhbHVlPSIke2J1aWxkfS9hcmNoaXZlcyIvPgotCQorCiAgICAgPHByb3BlcnR5IG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iU2F5SGVsbG9XUyIvPgogICAgIDx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJiaW5hcnkiIHZhbHVlPSIke2J1aWxkfS9XRUItSU5GL2NsYXNzZXMiLz4KQEAgLTM2LDI1ICszNiwyNSBAQAogICAgICAgICA8cHJvcGVydHkgbmFtZT0iYWxsLndhciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vc2F5aGVsbG8ud2FyIi8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3lwbGFuLmphciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vc2F5aGVsbG8tZGVwbG95cGxhbi5qYXIiLz4KICAgICA8L3RhcmdldD4KLQkKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0icHJlcGFyZSI+Ci0JCTxqYXZhYyBzcmNkaXI9ImhlbGxvc2VydmljZSIgZGVzdGRpcj0iJHtiaW5hcnl9IgotCQkJY2xhc3NwYXRoPSIke2luc3R9L2xpYi9qMmVlLmphciIvPgotCQk8ZWNobyBtZXNzYWdlPSJpbnZva2luZyB3c2NvbXBpbGUgdG8gZ2VuZXJhdGUgd3NkbCBmaWxlIi8+Ci0JCTxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSI+CisgICAgICAgIDxqYXZhYyBzcmNkaXI9ImhlbGxvc2VydmljZSIgZGVzdGRpcj0iJHtiaW5hcnl9IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2luc3R9L2xpYi9qMmVlLmphciIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJpbnZva2luZyB3c2NvbXBpbGUgdG8gZ2VuZXJhdGUgd3NkbCBmaWxlIi8+CisgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSI+CiAgICAgICAgICAgICAgICAgICAgIDxhcmcgbGluZT0iLWRlZmluZSBjb25maWctaW50ZXJmYWNlLnhtbCAgLWQgJHtiaW5hcnl9IC1uZCAke3dzZGx9IC1jbGFzc3BhdGggJHtiaW5hcnl9IC1tYXBwaW5nICR7YnVpbGR9L21hcHBpbmcueG1sIi8+Ci0JIAk8L2V4ZWM+CQkJCQkKKyAgICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KLQkKKwogICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImNvbXBpbGUiPgotCQk8Y29weSBmaWxlPSJ3ZWIueG1sIiB0b2Rpcj0iJHtidWlsZH0vV0VCLUlORiIvPgotCQk8Y29weSBmaWxlPSJ3ZWJzZXJ2aWNlcy54bWwiIHRvZGlyPSIke2J1aWxkfS9XRUItSU5GIi8+Ci0JCTxqYXIgZGVzdGZpbGU9IiR7cG9ydGFibGUud2FyfSIgYmFzZWRpcj0iJHtidWlsZH0iLz4KLQkJPGNvcHkgZmlsZT0ic3VuLXdlYi54bWwiIHRvZGlyPSIke2J1aWxkfS9XRUItSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLQkJPGphciBkZXN0ZmlsZT0iJHthbGwud2FyfSIgYmFzZWRpcj0iJHtidWlsZH0iLz4KLQkJPGphciBkZXN0ZmlsZT0iJHtkZXBsb3lwbGFuLmphcn0iPgotCQkgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfSIgaW5jbHVkZXM9InN1bi13ZWIueG1sIi8+Ci0JCTwvamFyPgorICAgICAgICA8Y29weSBmaWxlPSJ3ZWIueG1sIiB0b2Rpcj0iJHtidWlsZH0vV0VCLUlORiIvPgorICAgICAgICA8Y29weSBmaWxlPSJ3ZWJzZXJ2aWNlcy54bWwiIHRvZGlyPSIke2J1aWxkfS9XRUItSU5GIi8+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7cG9ydGFibGUud2FyfSIgYmFzZWRpcj0iJHtidWlsZH0iLz4KKyAgICAgICAgPGNvcHkgZmlsZT0ic3VuLXdlYi54bWwiIHRvZGlyPSIke2J1aWxkfS9XRUItSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthbGwud2FyfSIgYmFzZWRpcj0iJHtidWlsZH0iLz4KKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtkZXBsb3lwbGFuLmphcn0iPgorICAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfSIgaW5jbHVkZXM9InN1bi13ZWIueG1sIi8+CisgICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kuYXNhZG1pbiIgZGVwZW5kcz0icHJlcGFyZSI+CkBAIC02MiwxMCArNjIsMTAgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9Ii0tbmFtZSAke3Rlc3ROYW1lfSAke2FsbC53YXJ9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdE5hbWUiIHZhbHVlPSIke3Rlc3ROYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGVjaG8gbWVzc2FnZT0iQ3JlYXRlIGNsaWVudCB3ZWJzZXJ2aWNlcyBhcnRpZmFjdHMiLz4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iPgotCQk8YXJnIGxpbmU9Ii1nZW46Y2xpZW50IC1rZWVwIC1kICR7YmluYXJ5fSAtY2xhc3NwYXRoICR7YmluYXJ5fSBjb25maWctaW50ZXJmYWNlLnhtbCIvPgotCTwvZXhlYz4KKyAgICA8ZWNobyBtZXNzYWdlPSJDcmVhdGUgY2xpZW50IHdlYnNlcnZpY2VzIGFydGlmYWN0cyIvPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSI+CisgICAgICAgIDxhcmcgbGluZT0iLWdlbjpjbGllbnQgLWtlZXAgLWQgJHtiaW5hcnl9IC1jbGFzc3BhdGggJHtiaW5hcnl9IGNvbmZpZy1pbnRlcmZhY2UueG1sIi8+CisgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZWRlcGxveS5hc2FkbWluIiBkZXBlbmRzPSJwcmVwYXJlIj4KQEAgLTczLDEwICs3MywxMCBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0iLS1uYW1lICR7dGVzdE5hbWV9ICR7YWxsLndhcn0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8ZWNobyBtZXNzYWdlPSJDcmVhdGUgY2xpZW50IHdlYnNlcnZpY2VzIGFydGlmYWN0cyIvPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSI+Ci0JCTxhcmcgbGluZT0iLWdlbjpjbGllbnQgLWtlZXAgLWQgJHtiaW5hcnl9IC1jbGFzc3BhdGggJHtiaW5hcnl9IGNvbmZpZy1pbnRlcmZhY2UueG1sIi8+Ci0JPC9leGVjPgorICAgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0ZSBjbGllbnQgd2Vic2VydmljZXMgYXJ0aWZhY3RzIi8+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9Ij4KKyAgICAgICAgPGFyZyBsaW5lPSItZ2VuOmNsaWVudCAta2VlcCAtZCAke2JpbmFyeX0gLWNsYXNzcGF0aCAke2JpbmFyeX0gY29uZmlnLWludGVyZmFjZS54bWwiLz4KKyAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LmFzYWRtaW4iPgpAQCAtMTM5LDEzICsxMzksMTMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50IiBkZXBlbmRzPSJwcmVwYXJlIj4KLQk8amF2YWMgc3JjZGlyPSJzdGF0aWNzdHViY2xpZW50IiBkZXN0ZGlyPSIke2JpbmFyeX0iCi0JCWNsYXNzcGF0aD0iJHtpbnN0fS9saWIvajJlZS5qYXI6JHtpbnN0fS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7aW5zdH0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIvPgorICAgIDxqYXZhYyBzcmNkaXI9InN0YXRpY3N0dWJjbGllbnQiIGRlc3RkaXI9IiR7YmluYXJ5fSIKKyAgICAgICAgY2xhc3NwYXRoPSIke2luc3R9L2xpYi9qMmVlLmphcjoke2luc3R9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtpbnN0fS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIi8+CiAKICAgICAgICAgPGphdmFXaXRoUmVzdWx0CiAgICAgICAgICAgICBmb3JrPSJ0cnVlIgogICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAganZtPSIke0pBVkF9IgkKKyAgICAgICAgICAgIGp2bT0iJHtKQVZBfSIKICAgICAgICAgICAgIGNsYXNzbmFtZT0ic3RhdGljc3R1YmNsaWVudC5TYXlIZWxsb0NsaWVudCIKICAgICAgICAgICAgIG91dHB1dD0iJHtidWlsZH0vJHtsb2cuaWR9Lm91dHB1dC5sb2ciCiAgICAgICAgICAgICByZXN1bHRwcm9wZXJ0eT0icmVzdWx0Ij4KQEAgLTE2MSw3ICsxNjEsNyBAQAogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FyZy5saXN0fSIvPgogICAgICAgICA8L2phdmFXaXRoUmVzdWx0PgogCi0JIDxhbnRjYWxsIHRhcmdldD0icHJvY2Vzc1Jlc3VsdCI+CisgICAgIDxhbnRjYWxsIHRhcmdldD0icHJvY2Vzc1Jlc3VsdCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0IiB2YWx1ZT0iJHtyZXN1bHR9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nIiB2YWx1ZT0iJHtidWlsZH0vJHtsb2cuaWR9Lm91dHB1dC5sb2ciLz4KICAgICAgICAgPC9hbnRjYWxsPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvd2Vic2VydmljZXMvaGVsbG9zZXJ2aWNlL2NvbmZpZy1pbnRlcmZhY2UueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvd2Vic2VydmljZXMvaGVsbG9zZXJ2aWNlL2NvbmZpZy1pbnRlcmZhY2UueG1sCmluZGV4IGE5OWQ5YzAuLjg5NDc4OWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYnNlcnZpY2VzL2hlbGxvc2VydmljZS9jb25maWctaW50ZXJmYWNlLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJzZXJ2aWNlcy9oZWxsb3NlcnZpY2UvY29uZmlnLWludGVyZmFjZS54bWwKQEAgLTE5LDExICsxOSwxMSBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8c2VydmljZSAKLSAgICAgIG5hbWU9IlNheUhlbGxvU2VydmljZSIgCi0gICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpEZXBsb3ltZW50V2ViU2VydmljZVRlc3QiIAotICAgICAgdHlwZU5hbWVzcGFjZT0idXJuOkRlcGxveW1lbnRXZWJTZXJ2aWNlVGVzdCIgCisgIDxzZXJ2aWNlCisgICAgICBuYW1lPSJTYXlIZWxsb1NlcnZpY2UiCisgICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpEZXBsb3ltZW50V2ViU2VydmljZVRlc3QiCisgICAgICB0eXBlTmFtZXNwYWNlPSJ1cm46RGVwbG95bWVudFdlYlNlcnZpY2VUZXN0IgogICAgICAgcGFja2FnZU5hbWU9ImhlbGxvc2VydmljZSI+CiAgICAgICA8aW50ZXJmYWNlIG5hbWU9ImhlbGxvc2VydmljZS5TYXlIZWxsbyIvPgogICA8L3NlcnZpY2U+Ci08L2NvbmZpZ3VyYXRpb24+IAorPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvd2Vic2VydmljZXMvaGVsbG9zZXJ2aWNlL2hlbGxvc2VydmljZS9TYXlIZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvd2Vic2VydmljZXMvaGVsbG9zZXJ2aWNlL2hlbGxvc2VydmljZS9TYXlIZWxsby5qYXZhCmluZGV4IDA3NzRkNjEuLmQyNTMzNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYnNlcnZpY2VzL2hlbGxvc2VydmljZS9oZWxsb3NlcnZpY2UvU2F5SGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJzZXJ2aWNlcy9oZWxsb3NlcnZpY2UvaGVsbG9zZXJ2aWNlL1NheUhlbGxvLmphdmEKQEAgLTE1LDcgKzE1LDcgQEAKICAqLwogCiAgcGFja2FnZSBoZWxsb3NlcnZpY2U7Ci0gCisKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGU7CiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCkBAIC0yMywxMSArMjMsMTEgQEAKICAgKiBUaGlzIGlzIGEgbWluaW11bSBXZWJTZXJ2aWNlIGludGVyZmFjZQogICAqLwogICBwdWJsaWMgaW50ZXJmYWNlIFNheUhlbGxvICBleHRlbmRzIFJlbW90ZSB7Ci0gIAkKLSAgCS8qCi0gIAkgKiBAcmV0dXJuIGEgaGVsbG8gc3RyaW5nCi0gIAkgKi8KLSAgCSBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyBuYW1lKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAKKworICAgICAgLyoKKyAgICAgICAqIEByZXR1cm4gYSBoZWxsbyBzdHJpbmcKKyAgICAgICAqLworICAgICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIG5hbWUpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisKICAgfQotICAJCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYnNlcnZpY2VzL2hlbGxvc2VydmljZS9oZWxsb3NlcnZpY2UvU2F5SGVsbG9JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJzZXJ2aWNlcy9oZWxsb3NlcnZpY2UvaGVsbG9zZXJ2aWNlL1NheUhlbGxvSW1wbC5qYXZhCmluZGV4IDEzYTZhYzQuLjA1YmIxZDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYnNlcnZpY2VzL2hlbGxvc2VydmljZS9oZWxsb3NlcnZpY2UvU2F5SGVsbG9JbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvd2Vic2VydmljZXMvaGVsbG9zZXJ2aWNlL2hlbGxvc2VydmljZS9TYXlIZWxsb0ltcGwuamF2YQpAQCAtMjAsOSArMjAsOSBAQAogCiBwdWJsaWMgY2xhc3MgU2F5SGVsbG9JbXBsIGltcGxlbWVudHMgU2F5SGVsbG8gewogCi0JcHVibGljIFN0cmluZyBtZXNzYWdlID0iQm9uam91ciAiOworICAgIHB1YmxpYyBTdHJpbmcgbWVzc2FnZSA9IkJvbmpvdXIgIjsKIAotCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHMpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCQlyZXR1cm4gbWVzc2FnZSArIHM7Ci0JfQotfSAKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyBzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIG1lc3NhZ2UgKyBzOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYnNlcnZpY2VzL2hlbGxvc2VydmljZS9zdGF0aWNzdHViY2xpZW50L1NheUhlbGxvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJzZXJ2aWNlcy9oZWxsb3NlcnZpY2Uvc3RhdGljc3R1YmNsaWVudC9TYXlIZWxsb0NsaWVudC5qYXZhCmluZGV4IDgwMTAwNjQuLmQ2MWY3OGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYnNlcnZpY2VzL2hlbGxvc2VydmljZS9zdGF0aWNzdHViY2xpZW50L1NheUhlbGxvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvd2Vic2VydmljZXMvaGVsbG9zZXJ2aWNlL3N0YXRpY3N0dWJjbGllbnQvU2F5SGVsbG9DbGllbnQuamF2YQpAQCAtMjYsMjggKzI2LDI4IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW5kcG9pbnQgYWRkcmVzcyA9ICIgKyBhcmdzWzBdKTsKLQlib29sZWFuIHRlc3RQb3NpdGl2ZSA9IChCb29sZWFuLnZhbHVlT2YoYXJnc1sxXSkpLmJvb2xlYW5WYWx1ZSgpOworICAgIGJvb2xlYW4gdGVzdFBvc2l0aXZlID0gKEJvb2xlYW4udmFsdWVPZihhcmdzWzFdKSkuYm9vbGVhblZhbHVlKCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTdHViIHN0dWIgPSBjcmVhdGVQcm94eSgpOwogICAgICAgICAgICAgc3R1Yi5fc2V0UHJvcGVydHkKICAgICAgICAgICAgICAgKGphdmF4LnhtbC5ycGMuU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAotICAgICAgICAgICAgICAgYXJnc1swXSk7IAotCQkJU2F5SGVsbG8gaGVsbG8gPSAoU2F5SGVsbG8pc3R1YjsKKyAgICAgICAgICAgICAgIGFyZ3NbMF0pOworICAgICAgICAgICAgU2F5SGVsbG8gaGVsbG8gPSAoU2F5SGVsbG8pc3R1YjsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihoZWxsby5zYXlIZWxsbygiSmVyb21lICEiKSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICBpZih0ZXN0UG9zaXRpdmUpIHsKLQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCVN5c3RlbS5leGl0KC0xKTsKLQkgICAgfSBlbHNlIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gcmVjZCBhcyBleHBlY3RlZCIpOwotCSAgICB9Ci0JfQotCVN5c3RlbS5leGl0KDApOwotICAgIH0gICAgCisgICAgICAgIGlmKHRlc3RQb3NpdGl2ZSkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgU3lzdGVtLmV4aXQoLTEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiByZWNkIGFzIGV4cGVjdGVkIik7CisgICAgICAgIH0KKyAgICB9CisgICAgU3lzdGVtLmV4aXQoMCk7CisgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3R1YiBjcmVhdGVQcm94eSgpIHsKICAgICAgICAgLy8gTm90ZTogTXlIZWxsb1NlcnZpY2VfSW1wbCBpcyBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYy4KLSAgICAgICAgcmV0dXJuIAorICAgICAgICByZXR1cm4KICAgICAgICAgKFN0dWIpIChuZXcgU2F5SGVsbG9TZXJ2aWNlX0ltcGwoKS5nZXRTYXlIZWxsb1BvcnQoKSk7CiAgICAgfQotfSAKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2Vic2VydmljZXMvYW5ub3RhdGlvbnMtY29tbW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2Vic2VydmljZXMvYW5ub3RhdGlvbnMtY29tbW9uLnhtbAppbmRleCA2YzE3NzRhLi5jMzE5MjhhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dlYnNlcnZpY2VzL2Fubm90YXRpb25zLWNvbW1vbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93ZWJzZXJ2aWNlcy9hbm5vdGF0aW9ucy1jb21tb24ueG1sCkBAIC0xNywxNiArMTcsMTYgQEAKIC0tPgogCiA8cHJvcGVydHkgZW52aXJvbm1lbnQ9ImVudiIvPgotPHByb3BlcnR5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcyIvPiAgIAorPHByb3BlcnR5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcyIvPgogCiA8dGFyZ2V0IG5hbWU9InRlc3QtYWxsIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgPGJhc2VuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0ic2VydmVyIiBzdWZmaXg9Ii5qYXZhIi8+CiAgICAgPGRpcm5hbWUgZmlsZT0iJHtzcmMtbmFtZX0iIHByb3BlcnR5PSJkaXJlY3RvcnkiLz4KICAgICA8ZWNobyBtZXNzYWdlPSJTdGFydGluZyBUZXN0ICR7ZGlyZWN0b3J5fSIvPgotICAgIDxiYXNlbmFtZSBmaWxlPSIke2RpcmVjdG9yeX0iIHByb3BlcnR5PSJwa2ctbmFtZSIvPiAKKyAgICA8YmFzZW5hbWUgZmlsZT0iJHtkaXJlY3Rvcnl9IiBwcm9wZXJ0eT0icGtnLW5hbWUiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveSI+Ci0JPHBhcmFtIG5hbWU9InBrZy1uYW1lIiB2YWx1ZT0iJHtwa2ctbmFtZX0iLz4KLSAgICA8L2FudGNhbGw+IAorICAgIDxwYXJhbSBuYW1lPSJwa2ctbmFtZSIgdmFsdWU9IiR7cGtnLW5hbWV9Ii8+CisgICAgPC9hbnRjYWxsPgogICAgIDxjb25kaXRpb24gcHJvcGVydHk9ImRlcGxveV9zdWNjZWVkZWQiPgogICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtzZXJ2ZXJ9Lmphcl9kZXBsb3llZCIvPgogICAgIDwvY29uZGl0aW9uPgpAQCAtNDEsMTEgKzQxLDExIEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJjbGVhbiI+Ci0gICAgPGVjaG8gbWVzc2FnZT0iQ2xlYW4gZnJvbSAke2FudC5maWxlfSIvPiAKKyAgICA8ZWNobyBtZXNzYWdlPSJDbGVhbiBmcm9tICR7YW50LmZpbGV9Ii8+CiAgICAgPGRlbGV0ZSBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIvPgotICAgIDxkZWxldGUgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2FyY2hpdmUiLz4gICAgCi0gICAgPG1rZGlyIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIi8+ICAgCi0gICAgPG1rZGlyIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9hcmNoaXZlIi8+ICAgCisgICAgPGRlbGV0ZSBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvYXJjaGl2ZSIvPgorICAgIDxta2RpciBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIvPgorICAgIDxta2RpciBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvYXJjaGl2ZSIvPgogPC90YXJnZXQ+CiAgPHBhdGggaWQ9ImNsYXNzcGF0aCI+CiAKQEAgLTY3LDE0ICs2NywxNCBAQAogCiA8dGFyZ2V0IG5hbWU9InRlc3QtY29tcGlsZSI+CiAgICAgPGVjaG8gbWVzc2FnZT0iQ29tcGlsaW5nIGludG8gJHtwa2ctbmFtZX0vJHtzZXJ2ZXJ9LmNsYXNzIi8+Ci0gICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIiAKKyAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiCiAgICAgICAgIGluY2x1ZGVzPSIke3BrZy1uYW1lfS8qLmphdmEiPgogIDxjbGFzc3BhdGggcmVmaWQ9ImNsYXNzcGF0aCIvPgogPC9qYXZhYz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtY2xpZW50Ij4KLSAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiIAorICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIKICAgICAgICAgaW5jbHVkZXM9IiR7Y2xpZW50LXNyYy1uYW1lfSI+CiAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9ImNsYXNzcGF0aCIvPgogICAgIDwvamF2YWM+CkBAIC04MywxNSArODMsMTUgQEAKIDx0YXJnZXQgbmFtZT0iYnVpbGQiPgogICAgIDxiYXNlbmFtZSBmaWxlPSIke3NyYy1uYW1lfSIgcHJvcGVydHk9InNlcnZlciIgc3VmZml4PSIuamF2YSIvPgogICAgIDxkaXJuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0iZGlyZWN0b3J5Ii8+Ci0gICAgPGJhc2VuYW1lIGZpbGU9IiR7ZGlyZWN0b3J5fSIgcHJvcGVydHk9InBrZy1uYW1lIi8+IAorICAgIDxiYXNlbmFtZSBmaWxlPSIke2RpcmVjdG9yeX0iIHByb3BlcnR5PSJwa2ctbmFtZSIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0idGVzdC1jb21waWxlIi8+CiAgICAgPGVjaG8gbWVzc2FnZT0iQnVpbGRpbmcgd2l0aCBwYWNrYWdlICR7cGtnLW5hbWV9Ii8+CiAgICAgPGphciBkZXN0ZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke3NlcnZlcn0uamFyIgogICAgICAgICBiYXNlZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiCiAgICAgICAgIGluY2x1ZGVzPSIke3BrZy1uYW1lfS8qKiI+Ci0JPG1ldGFpbmYgZGlyPSIke3BrZy1uYW1lfSIKLQkJaW5jbHVkZXM9IioueG1sICoqLyoud3NkbCAqKi8qLnhzZCIvPgotICAgIDwvamFyPiAgICAgICAgICAgIAorICAgIDxtZXRhaW5mIGRpcj0iJHtwa2ctbmFtZX0iCisgICAgICAgIGluY2x1ZGVzPSIqLnhtbCAqKi8qLndzZGwgKiovKi54c2QiLz4KKyAgICA8L2phcj4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImRlcGxveSI+CkBAIC0xMDgsNyArMTA4LDcgQEAKIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgogICAgIDxiYXNlbmFtZSBmaWxlPSIke3NyYy1uYW1lfSIgcHJvcGVydHk9InNlcnZlciIgc3VmZml4PSIuamF2YSIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iYXV0b3VuZGVwbG95LWZpbGUiPgotCTxwYXJhbSBuYW1lPSJmaWxlbmFtZSIgdmFsdWU9IiR7c2VydmVyfS5qYXIiLz4KKyAgICA8cGFyYW0gbmFtZT0iZmlsZW5hbWUiIHZhbHVlPSIke3NlcnZlcn0uamFyIi8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxjb25kaXRpb24gcHJvcGVydHk9InVuZGVwbG95X3N1Y2NlZWRlZCI+CiAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke3NlcnZlcn0uamFyX3VuZGVwbG95ZWQiLz4KQEAgLTEzMSw3ICsxMzEsNyBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0icmVwb3J0IiBkZXBlbmRzPSJpbnRlcm5hbC1yZXBvcnQtc3VjY2VzcywgaW50ZXJuYWwtcmVwb3J0LWZhaWx1cmUiPgotICAgIDxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke2NsYXNzLW5hbWV9XyoiLz4gICAgCisgICAgPGRlbGV0ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95LyR7Y2xhc3MtbmFtZX1fKiIvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0icnVuIj4KQEAgLTE1NSw3ICsxNTUsNyBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iY29uZmlndXJhYmxlLXdzZGwtaW1wb3J0Ij4KLSAgICA8ZWNobyBtZXNzYWdlPSJ3c2ltcG9ydGluZyAke3Byb3RvY29sfTovLyR7aG9zdC1uYW1lfToke2hvc3QtcG9ydH0vJHtzZXJ2ZXJ9U2VydmljZS8ke3BvcnR9P1dTREw7IHNwZWNpYWwgYXJncyBhcmUgJHt3c2ltcG9ydC1zcGVjaWFsLWFyZ3N9Ii8+ICAKKyAgICA8ZWNobyBtZXNzYWdlPSJ3c2ltcG9ydGluZyAke3Byb3RvY29sfTovLyR7aG9zdC1uYW1lfToke2hvc3QtcG9ydH0vJHtzZXJ2ZXJ9U2VydmljZS8ke3BvcnR9P1dTREw7IHNwZWNpYWwgYXJncyBhcmUgJHt3c2ltcG9ydC1zcGVjaWFsLWFyZ3N9Ii8+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3NpbXBvcnQiPgogICAgICAgICA8YXJnIGxpbmU9Ii1rZWVwIC1kICR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyAke3Byb3RvY29sfTovLyR7aG9zdC1uYW1lfToke2hvc3QtcG9ydH0vJHtzZXJ2ZXJ9U2VydmljZS8ke3BvcnR9P1dTREwiLz4KICAgICA8L2V4ZWM+CkBAIC0xNjUsMTAgKzE2NSwxMCBAQAogICAgIDwhLS1iYXNlbmFtZSBmaWxlPSIke3NlcnZlcn0iIHByb3BlcnR5PSJwb3J0IiBzdWZmaXg9IkVKQiIvLS0+CiAgICAgPGJhc2VuYW1lIGZpbGU9IiR7c2VydmVyfSIgcHJvcGVydHk9InBvcnQiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9IndzZGwtaW1wb3J0Ij4KLQk8cGFyYW0gbmFtZT0ic2VydmVyIiB2YWx1ZT0iJHtzZXJ2ZXJ9Ii8+Ci0JPHBhcmFtIG5hbWU9InBvcnQiIHZhbHVlPSIke3BvcnR9Ii8+CisgICAgPHBhcmFtIG5hbWU9InNlcnZlciIgdmFsdWU9IiR7c2VydmVyfSIvPgorICAgIDxwYXJhbSBuYW1lPSJwb3J0IiB2YWx1ZT0iJHtwb3J0fSIvPgogICAgIDwvYW50Y2FsbD4KLSAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY2xpZW50Ii8+ICAgCisgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNsaWVudCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0idW5qYXItY2xpZW50LXV0aWxzIi8+CiA8L3RhcmdldD4KIApAQCAtMTc5LDExICsxNzksMTEgQEAKIDx0YXJnZXQgbmFtZT0iaW50ZXJuYWwtcnVuIiBpZj0iZGVwbG95X3N1Y2NlZWRlZCI+CiAgICAgPGJhc2VuYW1lIGZpbGU9IiR7Y2xpZW50LXNyYy1uYW1lfSIgcHJvcGVydHk9ImNsaWVudCIgc3VmZml4PSIuamF2YSIvPgogICAgIDxkaXJuYW1lIGZpbGU9IiR7Y2xpZW50LXNyYy1uYW1lfSIgcHJvcGVydHk9ImNsaWVudC1kaXJlY3RvcnkiLz4KLSAgICA8YmFzZW5hbWUgZmlsZT0iJHtjbGllbnQtZGlyZWN0b3J5fSIgcHJvcGVydHk9ImNsaWVudC1wa2ctbmFtZSIvPiAKKyAgICA8YmFzZW5hbWUgZmlsZT0iJHtjbGllbnQtZGlyZWN0b3J5fSIgcHJvcGVydHk9ImNsaWVudC1wa2ctbmFtZSIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGllbnQtY2xhc3MtbmFtZSIgdmFsdWU9IiR7Y2xpZW50LXBrZy1uYW1lfS8ke2NsaWVudH0uY2xhc3MiLz4KICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIGFwcGNsaWVudCB3aXRoICR7Y2xpZW50LXBrZy1uYW1lfS4ke2NsaWVudH0gJHthcHAtY2xpZW50LXBhcmFtZXRlcnN9ICR7YXBwLWNsaWVudC1leHRyYS1wYXJhbWV0ZXJzfSIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2FwcGNsaWVudCIgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiPgotICAgICAgICA8YXJnIGxpbmU9IiR7Y2xpZW50LXBrZy1uYW1lfS4ke2NsaWVudH0gJHthcHAtY2xpZW50LXBhcmFtZXRlcnN9ICR7YXBwLWNsaWVudC1leHRyYS1wYXJhbWV0ZXJzfSIvPiAgICAKKyAgICAgICAgPGFyZyBsaW5lPSIke2NsaWVudC1wa2ctbmFtZX0uJHtjbGllbnR9ICR7YXBwLWNsaWVudC1wYXJhbWV0ZXJzfSAke2FwcC1jbGllbnQtZXh0cmEtcGFyYW1ldGVyc30iLz4KICAgICA8L2V4ZWM+CiA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93ZWJzZXJ2aWNlcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dlYnNlcnZpY2VzL2J1aWxkLnhtbAppbmRleCBiOTFhZDhhLi5lNjYzNDA0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dlYnNlcnZpY2VzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dlYnNlcnZpY2VzL2J1aWxkLnhtbApAQCAtMjMsMTEgKzIzLDExIEBACiAKIDxwcm9qZWN0IG5hbWU9IndlYnNlcnZpY2VzIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0JJmNvbW1vbkJ1aWxkOworICAgICZjb21tb25CdWlsZDsKIAotCTx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgotCQk8YW50IGRpcj0ibm9pbmYiIHRhcmdldD0iYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L25vaW5mIi8+Ci0JCTwvYW50PgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgorICAgICAgICA8YW50IGRpcj0ibm9pbmYiIHRhcmdldD0iYWxsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L25vaW5mIi8+CisgICAgICAgIDwvYW50PgorICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93ZWJzZXJ2aWNlcy9ub2luZi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dlYnNlcnZpY2VzL25vaW5mL2J1aWxkLnhtbAppbmRleCAzNGYzMTBhLi4xYzUwMjFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dlYnNlcnZpY2VzL25vaW5mL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dlYnNlcnZpY2VzL25vaW5mL2J1aWxkLnhtbApAQCAtMzQsNiArMzQsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGZhaWxlZCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93ZWJzZXJ2aWNlcy9ub2luZi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dlYnNlcnZpY2VzL25vaW5mL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAyM2RjY2Y3Li5hYjhlMmY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dlYnNlcnZpY2VzL25vaW5mL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dlYnNlcnZpY2VzL25vaW5mL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzIsMTAgKzMyLDEwIEBACiAgICAgICAgIHN0YXRpYyBIZWxsb0ltcGxTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1lamItbm9pbnRmLWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtZWpiLW5vaW50Zi1hbm5vdGF0aW9uIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWVqYi1ub2ludGYtYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtZWpiLW5vaW50Zi1hbm5vdGF0aW9uIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQzLDExICs0MywxMSBAQAogICAgICAgICAgICAgICAgIEhlbGxvSW1wbCBwb3J0ID0gc2VydmljZS5nZXRIZWxsb0ltcGxQb3J0KCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKLQkJICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJTaW1wbGUtQW5ub3RhdGlvbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiLW5vaW50Zi1hbm5vdGF0aW9uIiwgc3RhdC5QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvYnVpbGQueG1sCmluZGV4IGQ5NDQyMzQuLmUxNTBlZjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2J1aWxkLnhtbApAQCAtNDcsMTEgKzQ3LDExIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgY3R4Y2hlY2sgKEV4ZWN1dGVzIHRoZSBlamItYWxsb3dlZG1ldGhvZHMgY3R4Y2hlY2sgdGVzdCkKLQkJCWFudCByZW1vdmUgKEV4ZWN1dGVzIHRoZSBlamItYWxsb3dlZG1ldGhvZHMgcmVtb3ZlIHRlc3QpCi0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYiBhbGxvd2VkbWV0aG9kcyB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGN0eGNoZWNrIChFeGVjdXRlcyB0aGUgZWpiLWFsbG93ZWRtZXRob2RzIGN0eGNoZWNrIHRlc3QpCisgICAgICAgICAgICBhbnQgcmVtb3ZlIChFeGVjdXRlcyB0aGUgZWpiLWFsbG93ZWRtZXRob2RzIHJlbW92ZSB0ZXN0KQorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamIgYWxsb3dlZG1ldGhvZHMgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svYnVpbGQucHJvcGVydGllcwppbmRleCAyZmUyZjY0Li5jNzQ1N2I1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYWxsb3dlZG1ldGhvZHMtY3R4Y2hlY2siLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svYnVpbGQueG1sCmluZGV4IDQ5NTY1MDEuLmM2NjYyYjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTMgKzQ2LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywqKi9Ecml2ZXIqLmNsYXNzLCoqL0hlcmVMb2NhbCouY2xhc3MsICoqL0xvY2FsRW50aXR5LmNsYXNzLCBMb2NhbEVudGl0eUhvbWUuY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC02MywxNCArNjMsMTQgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDg5MjhjNzAuLmQzYTZiZWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzcsMTEgKzM3LDExIEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItYWxsb3dlZG1ldGhvZHMtY3R4Y2hlY2siKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogICAgICAgICBsb2NhbFNsc2JHZXRFSkJPYmplY3QoKTsKICAgICAgICAgbG9jYWxTbHNiR2V0RUpCTG9jYWxPYmplY3QoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9lamIvRHJpdmVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2VqYi9Ecml2ZXJCZWFuLmphdmEKaW5kZXggMjUyYWJkNS4uOTI5Y2ZjYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2VqYi9Ecml2ZXJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2VqYi9Ecml2ZXJCZWFuLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgICAgICB0aHJvdyBpc2U7CiAgICAgICAgIH0KICAgICB9Ci0gICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgbG9jYWxTbHNiR2V0RUpCTG9jYWxPYmplY3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CkBAIC0xMzUsNyArMTM1LDcgQEAKICAgICAgICAgICAgIHRocm93IGlzZTsKICAgICAgICAgfQogICAgIH0KLSAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBsb2NhbEVudGl0eUdldEVKQkxvY2FsT2JqZWN0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwpAQCAtMTk1LDUgKzE5NSw1IEBACiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2VqYi9IZXJlTG9jYWxCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svZWpiL0hlcmVMb2NhbEJlYW4uamF2YQppbmRleCA0Njk2YzE0Li41OGE2YmE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svZWpiL0hlcmVMb2NhbEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svZWpiL0hlcmVMb2NhbEJlYW4uamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTMzLDExICszMywxMSBAQAogICAgIHB1YmxpYyBIZXJlTG9jYWxCZWFuKCkge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVyZUxvY2FsQmVhbjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZXJlTG9jYWxCZWFuOjplamJDcmVhdGUgISEiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCXRoaXMuc2MgPSBzYzsKKyAgICB0aGlzLnNjID0gc2M7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9Tb21ldGhpbmdIZXJlKCkgewpAQCAtNDksNyArNDksNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGFjY2Vzc0VKQkxvY2FsT2JqZWN0KCkgewotICAgICAgICBzYy5nZXRFSkJMb2NhbE9iamVjdCgpOyAgICAgIAorICAgICAgICBzYy5nZXRFSkJMb2NhbE9iamVjdCgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGFjY2Vzc0VKQkhvbWUoKSB7CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgYWNjZXNzRUpCTG9jYWxIb21lKCkgewotICAgICAgICBzYy5nZXRFSkJMb2NhbEhvbWUoKTsgICAgICAKKyAgICAgICAgc2MuZ2V0RUpCTG9jYWxIb21lKCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9lamIvTG9jYWxFbnRpdHkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9lamIvTG9jYWxFbnRpdHkuamF2YQppbmRleCBmMDUyNmYwLi43MzE4MjVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svZWpiL0xvY2FsRW50aXR5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2VqYi9Mb2NhbEVudGl0eS5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBwdWJsaWMgaW50ZXJmYWNlIExvY2FsRW50aXR5CiAgICAgZXh0ZW5kcyBFSkJMb2NhbE9iamVjdAogewotIAorCiAgIC8qKgogICAgKiBSZXR1cm5zIHRoZSBOYW1lIG9mIGEgc3R1ZGVudC4KICAgICogZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgpAQCAtMzksNyArMzksNyBAQAogICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7CiAKICAgIHB1YmxpYyB2b2lkIGxvY2FsRW50aXR5R2V0RUpCT2JqZWN0KCk7Ci0gICAgICAgICAgCisKICAgIHB1YmxpYyB2b2lkIGxvY2FsRW50aXR5R2V0RUpCTG9jYWxPYmplY3QoKTsKIAogICAgcHVibGljIHZvaWQgbG9jYWxFbnRpdHlHZXRFSkJIb21lKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svZWpiL0xvY2FsRW50aXR5QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2VqYi9Mb2NhbEVudGl0eUJlYW4uamF2YQppbmRleCBiMDFjOWE2Li44ZWRhYmZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svZWpiL0xvY2FsRW50aXR5QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9lamIvTG9jYWxFbnRpdHlCZWFuLmphdmEKQEAgLTk5LDcgKzk5LDcgQEAKICAgICAgICAgY291cnNlSWRzID0gbmV3IEFycmF5TGlzdCgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIGRhdGFTb3VyY2UgPSAKKyAgICAgICAgICAgIGRhdGFTb3VyY2UgPQogICAgICAgICAgICAgICAgIChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvamRiYy9kZXZ0ZXN0RFMiKTsKICAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTExMiw3ICsxMTIsNyBAQAogICAgIHB1YmxpYyB2b2lkIGxvY2FsRW50aXR5R2V0RUpCT2JqZWN0KCkgewogICAgICAgICBjb250ZXh0LmdldEVKQk9iamVjdCgpOwogICAgIH0KLSAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGxvY2FsRW50aXR5R2V0RUpCTG9jYWxPYmplY3QoKSB7CiAgICAgICAgIGNvbnRleHQuZ2V0RUpCTG9jYWxPYmplY3QoKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svZWpiL0xvY2FsRW50aXR5SG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2VqYi9Mb2NhbEVudGl0eUhvbWUuamF2YQppbmRleCBjNzNhMjNhLi43MmE5NDIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svZWpiL0xvY2FsRW50aXR5SG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9lamIvTG9jYWxFbnRpdHlIb21lLmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgKiBAZXhjZXB0aW9uIHRocm93cyBGaW5kZXJFeGNlcHRpb24gYW5kIFJlbW90ZUV4Y2VwdGlvbi4KICAgICAgKgogICAgICAqLwotIAotICAgIHB1YmxpYyBMb2NhbEVudGl0eSBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBzdHVkZW50SWQpIAorCisgICAgcHVibGljIExvY2FsRW50aXR5IGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHN0dWRlbnRJZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9lamIvTG9jYWxTdHVkZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svZWpiL0xvY2FsU3R1ZGVudC5qYXZhCmluZGV4IGVhM2UyOGUuLjI3YWZjYzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9lamIvTG9jYWxTdHVkZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2VqYi9Mb2NhbFN0dWRlbnQuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogcHVibGljIGludGVyZmFjZSBMb2NhbFN0dWRlbnQKICAgICBleHRlbmRzIEVKQkxvY2FsT2JqZWN0CiB7Ci0gCisKICAgLyoqCiAgICAqIFJldHVybnMgdGhlIE5hbWUgb2YgYSBzdHVkZW50LgogICAgKiBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svZWpiL1RoZXJlUmVtb3RlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2VqYi9UaGVyZVJlbW90ZUJlYW4uamF2YQppbmRleCA4NTc1MmY2Li4wYTIzOGY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svZWpiL1RoZXJlUmVtb3RlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9lamIvVGhlcmVSZW1vdGVCZWFuLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC0zMiwxMSArMzIsMTEgQEAKICAgICBwdWJsaWMgVGhlcmVSZW1vdGVCZWFuKCkge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gVGhlcmVSZW1vdGVCZWFuOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFRoZXJlUmVtb3RlQmVhbjo6ZWpiQ3JlYXRlICEhIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQl0aGlzLnNjID0gc2M7CisgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvU29tZXRoaW5nSGVyZSgpIHsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBhY2Nlc3NFSkJPYmplY3QoKSB7Ci0gICAgICAgIHNjLmdldEVKQk9iamVjdCgpOyAgICAgIAorICAgICAgICBzYy5nZXRFSkJPYmplY3QoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBhY2Nlc3NFSkJMb2NhbE9iamVjdCgpIHsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBhY2Nlc3NFSkJIb21lKCkgewotICAgICAgICBzYy5nZXRFSkJIb21lKCk7ICAgICAgCisgICAgICAgIHNjLmdldEVKQkhvbWUoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBhY2Nlc3NFSkJMb2NhbEhvbWUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvcmVtb3ZlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvcmVtb3ZlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNWY0NjUyNC4uZjM0NjhmNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL3JlbW92ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9yZW1vdmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYWxsb3dlZG1ldGhvZHMtcmVtb3ZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvcmVtb3ZlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9yZW1vdmUvYnVpbGQueG1sCmluZGV4IDM1MDU5MzguLjc1MTU4Y2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9yZW1vdmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9yZW1vdmUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxMyArNDYsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzLCoqL0RyaXZlciouY2xhc3MsKiovSGVyZUxvY2FsKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjAsMTAgKzYwLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9yZW1vdmUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL3JlbW92ZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNjg4ZjBiMi4uOTVhODYxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL3JlbW92ZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL3JlbW92ZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTM3LDExICszNywxMSBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWFsbG93ZWRtZXRob2RzLXJlbW92ZSIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvcmVtb3ZlL2VqYi9Ecml2ZXJCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvcmVtb3ZlL2VqYi9Ecml2ZXJCZWFuLmphdmEKaW5kZXggNzc0YWNjYy4uNzE4ZWVlOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL3JlbW92ZS9lamIvRHJpdmVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9yZW1vdmUvZWpiL0RyaXZlckJlYW4uamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTYzLDExICs2MywxMSBAQAogCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL3JlbW92ZS9lamIvSGVyZUxvY2FsQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL3JlbW92ZS9lamIvSGVyZUxvY2FsQmVhbi5qYXZhCmluZGV4IGZkN2MxNzYuLjJkZWQxNGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9yZW1vdmUvZWpiL0hlcmVMb2NhbEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvcmVtb3ZlL2VqYi9IZXJlTG9jYWxCZWFuLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC0zMywyMSArMzMsMjEgQEAKICAgICBwdWJsaWMgSGVyZUxvY2FsQmVhbigpIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlcmVMb2NhbEJlYW46OmVqYkNyZWF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVyZUxvY2FsQmVhbjo6ZWpiQ3JlYXRlICEhIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQl0aGlzLnNjID0gc2M7CisgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZXJlTG9jYWxCZWFuOjp0ZXN0ICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZXJlTG9jYWxCZWFuOjp0ZXN0ICEhIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbgogICAgIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlcmVMb2NhbEJlYW46OmVqYlJlbW92ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVyZUxvY2FsQmVhbjo6ZWpiUmVtb3ZlICEhIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2J1aWxkLnhtbAppbmRleCA1ZmEyNWYxLi5hNzhiMzgyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2J1aWxkLnhtbApAQCAtMjksMTUgKzI5LDE1IEBACiAgICAgJnJlcG9ydGluZzsKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KLSAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJmaW5kZXIiLz4gICAgICAKKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJmaW5kZXIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZWFkb25seSIvPgotICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNpbXBsZSIvPiAgICAgIAotICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNpbXBsZV9ub3BhY2thZ2UiLz4gICAgICAgCisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2ltcGxlIi8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2ltcGxlX25vcGFja2FnZSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InR3b2xldmVsIi8+Ci0gICAgICAgIDxhbnRjYWxsIHRhcmdldD0idHh0ZXN0cyIvPiAgICAgICAKLSAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ0aHJlYWRfcG9vbF9pZCIvPiAgICAgIAorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InR4dGVzdHMiLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ0aHJlYWRfcG9vbF9pZCIvPgogPCEtLSBUaGVzZSB0ZXN0cyBuZWVkIHRvIGJlIGZpeGVkCi0gICAgICAgIDxhbnRjYWxsIHRhcmdldD0iaGFuZGxlIi8+ICAgICAgIAorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImhhbmRsZSIvPgogLS0+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTkxLDE5ICs5MSwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKICAgICAgICAgICAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWJtcCB0ZXN0cykKIAogICAgICAgICAgICAgICAgICAgICAgYW50IGZpbmRlcgotICAgICAgICAgICAgICAgICAgICAgYW50IGhhbmRsZSAKLSAgICAgICAgICAgICAgICAgICAgIGFudCByZWFkb25seSAKLSAgICAgICAgICAgICAgICAgICAgIGFudCBzaW1wbGUgCisgICAgICAgICAgICAgICAgICAgICBhbnQgaGFuZGxlCisgICAgICAgICAgICAgICAgICAgICBhbnQgcmVhZG9ubHkKKyAgICAgICAgICAgICAgICAgICAgIGFudCBzaW1wbGUKICAgICAgICAgICAgICAgICAgICAgIGFudCBzaW1wbGVfbm9wYWNrYWdlCi0gICAgICAgICAgICAgICAgICAgICBhbnQgdHdvbGV2ZWwgCi0gICAgICAgICAgICAgICAgICAgICBhbnQgdHh0ZXN0cyAKLSAgICAgICAgICAgICAgICAgICAgIGFudCB0aHJlYWRfcG9vbF9pZCAKLQkJCQotCTwvZWNobz4KKyAgICAgICAgICAgICAgICAgICAgIGFudCB0d29sZXZlbAorICAgICAgICAgICAgICAgICAgICAgYW50IHR4dGVzdHMKKyAgICAgICAgICAgICAgICAgICAgIGFudCB0aHJlYWRfcG9vbF9pZAorCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzBjZDkzNi4uNTAxOGMxZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOCArMTUsMTggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtZmluZGVyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9idWlsZC54bWwKaW5kZXggNzVjZjY3NC4uZDZhM2YwZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKlN0dWRlbnQqLmNsYXNzLCoqLypFbnJvbGxlciouY2xhc3MsKiovKkNvdXJzZSouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovQ291cnNlLmNsYXNzLCoqL0Vucm9sbGVyLmNsYXNzLCoqL1N0dWRlbnQuY2xhc3MsKiovKkhvbWUqLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KQEAgLTY4LDE4ICs2OCwxOCBAQAogICAgICAgLS0+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvY2xpZW50L0ZpbmRlckNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvY2xpZW50L0ZpbmRlckNsaWVudC5qYXZhCmluZGV4IGVlZTA2ZGEuLmQzN2FmMTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2NsaWVudC9GaW5kZXJDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9jbGllbnQvRmluZGVyQ2xpZW50LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogLyoqCi0gKiBBIHNpbXBsZSBqYXZhIGNsaWVudCB3aWxsOiAKKyAqIEEgc2ltcGxlIGphdmEgY2xpZW50IHdpbGw6CiAgKiA8dWw+CiAgKiA8bGk+TG9jYXRlcyB0aGUgaG9tZSBpbnRlcmZhY2Ugb2YgdGhlIGVudGVycHJpc2UgYmVhbgogICogPGxpPkdldHMgYSByZWZlcmVuY2UgdG8gdGhlIHJlbW90ZSBpbnRlcmZhY2UKQEAgLTM2LDExICszNiwxMSBAQAogICAgIHByaXZhdGUgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7IAotICAgICAgICBGaW5kZXJDbGllbnQgY2xpZW50ID0gbmV3IEZpbmRlckNsaWVudCgpOyAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIEZpbmRlckNsaWVudCBjbGllbnQgPSBuZXcgRmluZGVyQ2xpZW50KCk7CiAKICAgICAgICAgLy8gcnVuIHRoZSB0ZXN0cwotICAgICAgICBjbGllbnQucnVuVGVzdENsaWVudCgpOyAgIAorICAgICAgICBjbGllbnQucnVuVGVzdENsaWVudCgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJ1blRlc3RDbGllbnQoKSB7CkBAIC02MCwxMiArNjAsMTIgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVDb3Vyc2UiKTsKLSAgICAgICAgICAgIENvdXJzZUhvbWUgY0hvbWUgPSAKLSAgICAgICAgICAgICAgICAoQ291cnNlSG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgICBDb3Vyc2VIb21lIGNIb21lID0KKyAgICAgICAgICAgICAgICAoQ291cnNlSG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvdXJzZUhvbWUuY2xhc3MpOwogICAgICAgICAgICAgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVN0dWRlbnQiKTsKLSAgICAgICAgICAgIFN0dWRlbnRIb21lIHNIb21lID0gCi0gICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgIFN0dWRlbnRIb21lIHNIb21lID0KKyAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R1ZGVudEhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgICBDb3Vyc2UgaW50cm8gPSBjSG9tZS5maW5kQnlQcmltYXJ5S2V5KCI3NzciKTsKQEAgLTc2LDE0ICs3NiwxNCBAQAogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gdW5leHBlY3RlZCBleGNlcHRpb24hIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgIH0gCisgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3QwMigpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVDb3Vyc2UiKTsKLSAgICAgICAgICAgIENvdXJzZUhvbWUgY0hvbWUgPSAKLSAgICAgICAgICAgICAgICAoQ291cnNlSG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgICBDb3Vyc2VIb21lIGNIb21lID0KKyAgICAgICAgICAgICAgICAoQ291cnNlSG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvdXJzZUhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgICBBcnJheUxpc3QgbGlzdCA9IGNIb21lLmZpbmRBbGxDb3Vyc2VzKCk7CkBAIC05NCw2ICs5NCw2IEBACiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiEiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgfSAKKyAgICB9CiAKLX0gCit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCA4MjVmNTc3Li5mZWYzNzJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTMzMCw3ICszMzAsNyBAQAogICAgICAgICA8bWV0aG9kLXBhcmFtcyAvPgogICAgICAgPC9tZXRob2Q+CiAKLSAgPCEtLSBtZXRob2RzIGZvciBTdHVkZW50IEVKQiAtLT4gICAgICAKKyAgPCEtLSBtZXRob2RzIGZvciBTdHVkZW50IEVKQiAtLT4KIAogICAgICAgPG1ldGhvZD4KICAgICAgICAgPGVqYi1uYW1lPkZpbmRlclN0dWRlbnRCZWFuPC9lamItbmFtZT4KQEAgLTY3MSw2ICs2NzEsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5Ob3RTdXBwb3J0ZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL0NvdXJzZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL0NvdXJzZS5qYXZhCmluZGV4IDNjM2I3MzkuLjM0YmMyMDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2VqYi9Db3Vyc2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvQ291cnNlLmphdmEKQEAgLTIyLDI0ICsyMiwyNCBAQAogCiAKIHB1YmxpYyBpbnRlcmZhY2UgQ291cnNlIGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgYW4gYXJyYXlsaXN0IG9mIFN0dWRlbnRJZHMgdGFraW5nIHRoZSBjb3Vyc2UuCi0gICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24gCisgICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KICAgICAgKi8KICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFN0dWRlbnRJZHMoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY291cnNlLgotICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uIAotICAgICAqIAorICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCisgICAgICoKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbmFtZSBvZiB0aGUgY291cnNlLgotICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uIAotICAgICAqIAorICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCisgICAgICoKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvQ291cnNlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL0NvdXJzZUJlYW4uamF2YQppbmRleCBkYWYzNGM2Li5jNjQ4MWVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvQ291cnNlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2VqYi9Db3Vyc2VCZWFuLmphdmEKQEAgLTg5LDcgKzg5LDcgQEAKICAgICAgICAgICAgICAgICAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2pkYmMvYm1wLWZpbmRlckRCIik7CiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvRW5yb2xsZXIiKTsKLSAgICAgICAgICAgIGVucm9sbGVySG9tZSA9IAorICAgICAgICAgICAgZW5yb2xsZXJIb21lID0KICAgICAgICAgICAgICAgICAoRW5yb2xsZXJIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnJvbGxlckhvbWUuY2xhc3MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTIzNSw3ICsyMzUsNyBAQAogICAgICAgICBjb24uY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIEFycmF5TGlzdCBzZWxlY3RBbGxDb3Vyc2VzKCkgCisgICAgcHJpdmF0ZSBBcnJheUxpc3Qgc2VsZWN0QWxsQ291cnNlcygpCiAgICAgICAgIHRocm93cyBTUUxFeGNlcHRpb24gewogCiAgICAgICAgIFN0cmluZyBzZWxlY3RTdGF0ZW1lbnQgPQpAQCAtMjQzLDcgKzI0Myw3IEBACiAgICAgICAgICAgICAiZnJvbSBGaW5kZXJFbnJvbGxtZW50ICI7CiAKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSAgZGF0YVNvdXJjZS5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgIFN0YXRlbWVudCBzdG10ID0gCisgICAgICAgIFN0YXRlbWVudCBzdG10ID0KICAgICAgICAgICAgIGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKIAogICAgICAgICBSZXN1bHRTZXQgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeShzZWxlY3RTdGF0ZW1lbnQpOwpAQCAtMjc2LDcgKzI3Niw3IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vIEluIEJNUCwgY2FuJ3QgZ2V0IHRpbWVyIHNlcnZpY2Ugb3IgY2FsbCB0aW1lciBzZXJ2aWNlIG1ldGhvZHMKLSAgICAgICAgICAgIFRpbWVyU2VydmljZSB0cyA9IGNvbnRleHQuZ2V0VGltZXJTZXJ2aWNlKCk7IAorICAgICAgICAgICAgVGltZXJTZXJ2aWNlIHRzID0gY29udGV4dC5nZXRUaW1lclNlcnZpY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oInNob3VsZCBoYXZlIGdvdHRlbiB0aW1lciBzZXJ2aWNlIG1ldGhvZCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpbGxlZ2FsIHN0YXRlIGV4Y2VwdGlvbiAiKTsKICAgICAgICAgfSBjYXRjaChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaXNlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvQ291cnNlSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL0NvdXJzZUhvbWUuamF2YQppbmRleCAxZTViNzEyLi5iNThmMmFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvQ291cnNlSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2VqYi9Db3Vyc2VIb21lLmphdmEKQEAgLTMwLDEzICszMCwxMyBAQAogICAgICAqLwogICAgIHB1YmxpYyBDb3Vyc2UgY3JlYXRlKFN0cmluZyBjb3Vyc2VJZCwgU3RyaW5nIG5hbWUpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIENyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgYSByZWZlcmVuY2UgdG8gdGhlIHJlbW90ZSBpbnRlcmZhY2UgdG8gdGhlIENvdXJzZUJlYW4gb2JqZWN0IGJ5IFByaW1hcnkgS2V5LgogICAgICAqIEBleGNlcHRpb24gdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiBhbmQgUmVtb3RlRXhjZXB0aW9uLgogICAgICAqCiAgICAgICovCi0gICAgcHVibGljIENvdXJzZSBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBjb3Vyc2VJZCkgCisgICAgcHVibGljIENvdXJzZSBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBjb3Vyc2VJZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGphdmEudXRpbC5BcnJheUxpc3QgZmluZEFsbENvdXJzZXMoKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL0Vucm9sbGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvRW5yb2xsZXIuamF2YQppbmRleCAyNmJkMDMxLi5jMTRkOTY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvRW5yb2xsZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvRW5yb2xsZXIuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIAogcHVibGljIGludGVyZmFjZSBFbnJvbGxlciBleHRlbmRzIEVKQk9iamVjdCB7Ci0gCisKICAvKioKICAgKiBFbnJvbGxzIGEgU3R1ZGVudCBpbiBhIGNvdXJzZQogICAqIEBwYXJhbSBzdHVkZW50SWQgcHJpbWFyeSBrZXkgb2YgdGhlIHN0dWRlbnQgb2JqZWN0CkBAIC00MCw3ICs0MCw3IEBACiAgICBwdWJsaWMgdm9pZCB1bkVucm9sbChTdHJpbmcgc3R1ZGVudElkLCBTdHJpbmcgY291cnNlSWQpCiAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogIC8qKgotICAqIERlbGV0ZXMgYSBTdHVkZW50IAorICAqIERlbGV0ZXMgYSBTdHVkZW50CiAgICogQHBhcmFtIHN0dWRlbnRJZCBwcmltYXJ5IGtleSBvZiB0aGUgc3R1ZGVudCBvYmplY3QKICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgogICAqLwpAQCAtNDksNyArNDksNyBAQAogICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogIC8qKgotICAqIERlbGV0ZXMgYSBDb3Vyc2UgCisgICogRGVsZXRlcyBhIENvdXJzZQogICAqIEBwYXJhbSBjb3Vyc2VJZCBwcmltYXJ5IGtleSBvZiB0aGUgY291cnNlIG9iamVjdAogICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCiAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvRW5yb2xsZXJCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvRW5yb2xsZXJCZWFuLmphdmEKaW5kZXggNDQyOTJkNy4uNDkzMmQ3OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL0Vucm9sbGVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2VqYi9FbnJvbGxlckJlYW4uamF2YQpAQCAtMTYsNyArMTYsNyBAQAogCiBwYWNrYWdlIGNvbS5zdW4uczFhc2Rldi5lamIuYm1wLmZpbmRlci5lamI7CiAKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi4qOwogaW1wb3J0IGphdmEuc3FsLio7CiBpbXBvcnQgamF2YXguc3FsLio7CkBAIC0yNiw3ICsyNiw3IEBACiBpbXBvcnQgamF2YS5pby4qOwogCiBwdWJsaWMgY2xhc3MgRW5yb2xsZXJCZWFuIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewotIAorCiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uIGNvbjsKICAgICBwcml2YXRlIFN0cmluZyBkYk5hbWUgPSAiamF2YTpjb21wL2Vudi9qZGJjL2JtcC1maW5kZXJEQiI7CiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjb250ZXh0OwpAQCAtNjEsNyArNjEsNyBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIERlbGV0ZXMgYSBTdHVkZW50IAorICAgICAqIERlbGV0ZXMgYSBTdHVkZW50CiAgICAgICogQHBhcmFtIHN0dWRlbnRJZCBwcmltYXJ5IGtleSBvZiB0aGUgc3R1ZGVudCBvYmplY3QKICAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgogICAgICAqLwpAQCAtNzQsNyArNzQsNyBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIERlbGV0ZXMgYSBDb3Vyc2UgCisgICAgICogRGVsZXRlcyBhIENvdXJzZQogICAgICAqIEBwYXJhbSBjb3Vyc2VJZCBwcmltYXJ5IGtleSBvZiB0aGUgY291cnNlIG9iamVjdAogICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCiAgICAgICovCkBAIC0xNjQsNyArMTY0LDcgQEAKIAogICAgICAgICBTdHJpbmcgaW5zZXJ0U3RhdGVtZW50ID0KICAgICAgICAgICAgICJpbnNlcnQgaW50byBGaW5kZXJFbnJvbGxtZW50IHZhbHVlcyAoID8gLCA/ICkiOwotICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcmVwU3RtdCA9IAorICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcmVwU3RtdCA9CiAgICAgICAgICAgICBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRTdGF0ZW1lbnQpOwogCiAgICAgICAgIHByZXBTdG10LnNldFN0cmluZygxLCBzdHVkZW50SWQpOwpAQCAtMTc0LDcgKzE3NCw3IEBACiAgICAgICAgIHByZXBTdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUVudHJ5KFN0cmluZyBzdHVkZW50SWQsIFN0cmluZyBjb3Vyc2VJZCkgCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUVudHJ5KFN0cmluZyBzdHVkZW50SWQsIFN0cmluZyBjb3Vyc2VJZCkKICAgICAgICAgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAKICAgICAgICAgU3RyaW5nIGRlbGV0ZVN0YXRlbWVudCA9CkBAIC0yMTcsMTMgKzIxNywxMyBAQAogICAgICAgICBwcmVwU3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgQXJyYXlMaXN0IHNlbGVjdFN0dWRlbnQoU3RyaW5nIGNvdXJzZUlkKSAKKyAgICBwcml2YXRlIEFycmF5TGlzdCBzZWxlY3RTdHVkZW50KFN0cmluZyBjb3Vyc2VJZCkKICAgICAgICAgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAKICAgICAgICAgU3RyaW5nIHNlbGVjdFN0YXRlbWVudCA9CiAgICAgICAgICAgICAic2VsZWN0IHN0dWRlbnRpZCAiICsKICAgICAgICAgICAgICJmcm9tIEZpbmRlckVucm9sbG1lbnQgd2hlcmUgY291cnNlaWQgPSA/ICI7Ci0gICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0gCisgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0KICAgICAgICAgICAgIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNlbGVjdFN0YXRlbWVudCk7CiAKICAgICAgICAgcHJlcFN0bXQuc2V0U3RyaW5nKDEsIGNvdXJzZUlkKTsKQEAgLTIzOSwxMyArMjM5LDEzIEBACiAgICAgICAgIHJldHVybiBhOwogICAgIH0KIAotICAgIHByaXZhdGUgQXJyYXlMaXN0IHNlbGVjdENvdXJzZShTdHJpbmcgc3R1ZGVudElkKSAKKyAgICBwcml2YXRlIEFycmF5TGlzdCBzZWxlY3RDb3Vyc2UoU3RyaW5nIHN0dWRlbnRJZCkKICAgICAgICAgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAKICAgICAgICAgU3RyaW5nIHNlbGVjdFN0YXRlbWVudCA9CiAgICAgICAgICAgICAic2VsZWN0IGNvdXJzZWlkICIgKwogICAgICAgICAgICAgImZyb20gRmluZGVyRW5yb2xsbWVudCB3aGVyZSBzdHVkZW50aWQgPSA/ICI7Ci0gICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0gCisgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0KICAgICAgICAgICAgIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNlbGVjdFN0YXRlbWVudCk7CiAKICAgICAgICAgcHJlcFN0bXQuc2V0U3RyaW5nKDEsIHN0dWRlbnRJZCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvU3R1ZGVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL1N0dWRlbnQuamF2YQppbmRleCBjMGI0MTUzLi5kN2YzMTJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvU3R1ZGVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2VqYi9TdHVkZW50LmphdmEKQEAgLTIyLDkgKzIyLDkgQEAKIAogCiBwdWJsaWMgaW50ZXJmYWNlIFN0dWRlbnQgZXh0ZW5kcyBFSkJPYmplY3QgewotIAorCiAgIC8qKgotICAgKiBSZXR1cm5zIHRoZSBDb3Vyc2VJZHMgdGhhdCBhIHN0dWRlbnQgaXMgZW5yb2xsZWQgaW4uIAorICAgKiBSZXR1cm5zIHRoZSBDb3Vyc2VJZHMgdGhhdCBhIHN0dWRlbnQgaXMgZW5yb2xsZWQgaW4uCiAgICAqIEBwYXJhbSBzdHVkZW50SWQgcHJpbWFyeSBrZXkgb2YgdGhlIHN0dWRlbnQgb2JqZWN0CiAgICAqIEBwYXJhbSBjb3Vyc2VJZCBwcmltYXJ5IGtleSBvZiB0aGUgY291cnNlIG9iamVjdAogICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL1N0dWRlbnRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvU3R1ZGVudEJlYW4uamF2YQppbmRleCAzMzEwZDc2Li40ZTcwZWM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvU3R1ZGVudEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvU3R1ZGVudEJlYW4uamF2YQpAQCAtOTgsNyArOTgsNyBAQAogICAgICAgICBjb3Vyc2VJZHMgPSBuZXcgQXJyYXlMaXN0KCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgZGF0YVNvdXJjZSA9IAorICAgICAgICAgICAgZGF0YVNvdXJjZSA9CiAgICAgICAgICAgICAgICAgKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qZGJjL2JtcC1maW5kZXJEQiIpOwogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0Vucm9sbGVyIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvU3R1ZGVudEhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2VqYi9TdHVkZW50SG9tZS5qYXZhCmluZGV4IDQ5MjVhYTkuLjg4NGRhNWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2VqYi9TdHVkZW50SG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2VqYi9TdHVkZW50SG9tZS5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICogQGV4Y2VwdGlvbiB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIGFuZCBSZW1vdGVFeGNlcHRpb24uCiAgICAgICoKICAgICAgKi8KLSAKLSAgICBwdWJsaWMgU3R1ZGVudCBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBzdHVkZW50SWQpIAorCisgICAgcHVibGljIFN0dWRlbnQgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgc3R1ZGVudElkKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggMmE4OGExMi4uMzIwOWFjMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw0NSArMSw0NSBAQAotY3JlYXRlIHRhYmxlIEZpbmRlclN0dWRlbnQgDQotKHN0dWRlbnRpZCB2YXJjaGFyKDMpIGNvbnN0cmFpbnQgcGtfRmluZGVyU3R1ZGVudCBwcmltYXJ5IGtleSBub3QgbnVsbCwgIA0KLW5hbWUgdmFyY2hhcigzNikpOw0KLQ0KLWluc2VydCBpbnRvIEZpbmRlclN0dWRlbnQNCi12YWx1ZXMgKCcxMjMnLCAnU2FsIEpvbmVzJyk7DQotaW5zZXJ0IGludG8gRmluZGVyU3R1ZGVudA0KLXZhbHVlcyAoJzIyMScsICdBbGljZSBTbWl0aCcpOw0KLWluc2VydCBpbnRvIEZpbmRlclN0dWRlbnQNCi12YWx1ZXMgKCczODgnLCAnRWxpemFiZXRoIFdpbGxpcycpOw0KLWluc2VydCBpbnRvIEZpbmRlclN0dWRlbnQNCi12YWx1ZXMgKCc0NTYnLCAnSm9lIFNtaXRoJyk7DQotDQotDQotY3JlYXRlIHRhYmxlIEZpbmRlckNvdXJzZSANCi0oY291cnNlaWQgdmFyY2hhcigzKSBjb25zdHJhaW50IHBrX0ZpbmRlckNvdXJzZSBwcmltYXJ5IGtleSBub3QgbnVsbCwgIA0KLW5hbWUgdmFyY2hhcigzNikpOw0KLQ0KLWluc2VydCBpbnRvIEZpbmRlckNvdXJzZQ0KLXZhbHVlcyAoJzk5OScsICdBZHZhbmNlZCBKYXZhIFByb2dyYW1taW5nJyk7DQotaW5zZXJ0IGludG8gRmluZGVyQ291cnNlDQotdmFsdWVzICgnMTExJywgJ0oyRUUgZm9yIFNtYXJ0IFBlb3BsZScpOw0KLWluc2VydCBpbnRvIEZpbmRlckNvdXJzZQ0KLXZhbHVlcyAoJzMzMycsICdYTUwgTWFkZSBFYXN5Jyk7DQotaW5zZXJ0IGludG8gRmluZGVyQ291cnNlDQotdmFsdWVzICgnNzc3JywgJ0FuIEludHJvZHVjdGlvbiB0byBKYXZhIFByb2dyYW1taW5nJyk7DQotDQotY3JlYXRlIHRhYmxlIEZpbmRlckVucm9sbG1lbnQNCi0oc3R1ZGVudGlkIHZhcmNoYXIoMyksICANCi1jb3Vyc2VpZCB2YXJjaGFyKDMpLCAgDQotY29uc3RyYWludCBma19zdHVkZW50aWQNCi1mb3JlaWduIGtleSAoc3R1ZGVudGlkKQ0KLXJlZmVyZW5jZXMgRmluZGVyU3R1ZGVudChzdHVkZW50aWQpLA0KLWNvbnN0cmFpbnQgZmtfY291cnNlaWQNCi1mb3JlaWduIGtleSAoY291cnNlaWQpDQotcmVmZXJlbmNlcyBGaW5kZXJDb3Vyc2UoY291cnNlaWQpKTsNCi0NCi1pbnNlcnQgaW50byBGaW5kZXJFbnJvbGxtZW50DQotdmFsdWVzICgnMTIzJywgJzc3NycpOw0KLWluc2VydCBpbnRvIEZpbmRlckVucm9sbG1lbnQNCi12YWx1ZXMgKCcyMjEnLCAnNzc3Jyk7DQotaW5zZXJ0IGludG8gRmluZGVyRW5yb2xsbWVudA0KLXZhbHVlcyAoJzM4OCcsICc3NzcnKTsNCi1pbnNlcnQgaW50byBGaW5kZXJFbnJvbGxtZW50DQotdmFsdWVzICgnNDU2JywgJzc3NycpOw0KK2NyZWF0ZSB0YWJsZSBGaW5kZXJTdHVkZW50Cisoc3R1ZGVudGlkIHZhcmNoYXIoMykgY29uc3RyYWludCBwa19GaW5kZXJTdHVkZW50IHByaW1hcnkga2V5IG5vdCBudWxsLAorbmFtZSB2YXJjaGFyKDM2KSk7CisKK2luc2VydCBpbnRvIEZpbmRlclN0dWRlbnQKK3ZhbHVlcyAoJzEyMycsICdTYWwgSm9uZXMnKTsKK2luc2VydCBpbnRvIEZpbmRlclN0dWRlbnQKK3ZhbHVlcyAoJzIyMScsICdBbGljZSBTbWl0aCcpOworaW5zZXJ0IGludG8gRmluZGVyU3R1ZGVudAordmFsdWVzICgnMzg4JywgJ0VsaXphYmV0aCBXaWxsaXMnKTsKK2luc2VydCBpbnRvIEZpbmRlclN0dWRlbnQKK3ZhbHVlcyAoJzQ1NicsICdKb2UgU21pdGgnKTsKKworCitjcmVhdGUgdGFibGUgRmluZGVyQ291cnNlCisoY291cnNlaWQgdmFyY2hhcigzKSBjb25zdHJhaW50IHBrX0ZpbmRlckNvdXJzZSBwcmltYXJ5IGtleSBub3QgbnVsbCwKK25hbWUgdmFyY2hhcigzNikpOworCitpbnNlcnQgaW50byBGaW5kZXJDb3Vyc2UKK3ZhbHVlcyAoJzk5OScsICdBZHZhbmNlZCBKYXZhIFByb2dyYW1taW5nJyk7CitpbnNlcnQgaW50byBGaW5kZXJDb3Vyc2UKK3ZhbHVlcyAoJzExMScsICdKMkVFIGZvciBTbWFydCBQZW9wbGUnKTsKK2luc2VydCBpbnRvIEZpbmRlckNvdXJzZQordmFsdWVzICgnMzMzJywgJ1hNTCBNYWRlIEVhc3knKTsKK2luc2VydCBpbnRvIEZpbmRlckNvdXJzZQordmFsdWVzICgnNzc3JywgJ0FuIEludHJvZHVjdGlvbiB0byBKYXZhIFByb2dyYW1taW5nJyk7CisKK2NyZWF0ZSB0YWJsZSBGaW5kZXJFbnJvbGxtZW50Cisoc3R1ZGVudGlkIHZhcmNoYXIoMyksCitjb3Vyc2VpZCB2YXJjaGFyKDMpLAorY29uc3RyYWludCBma19zdHVkZW50aWQKK2ZvcmVpZ24ga2V5IChzdHVkZW50aWQpCityZWZlcmVuY2VzIEZpbmRlclN0dWRlbnQoc3R1ZGVudGlkKSwKK2NvbnN0cmFpbnQgZmtfY291cnNlaWQKK2ZvcmVpZ24ga2V5IChjb3Vyc2VpZCkKK3JlZmVyZW5jZXMgRmluZGVyQ291cnNlKGNvdXJzZWlkKSk7CisKK2luc2VydCBpbnRvIEZpbmRlckVucm9sbG1lbnQKK3ZhbHVlcyAoJzEyMycsICc3NzcnKTsKK2luc2VydCBpbnRvIEZpbmRlckVucm9sbG1lbnQKK3ZhbHVlcyAoJzIyMScsICc3NzcnKTsKK2luc2VydCBpbnRvIEZpbmRlckVucm9sbG1lbnQKK3ZhbHVlcyAoJzM4OCcsICc3NzcnKTsKK2luc2VydCBpbnRvIEZpbmRlckVucm9sbG1lbnQKK3ZhbHVlcyAoJzQ1NicsICc3NzcnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDEzNmE1NTYuLjMyNmJiNjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSwzICsxLDMgQEAKLWRyb3AgdGFibGUgRmluZGVyRW5yb2xsbWVudDsNCi1kcm9wIHRhYmxlIEZpbmRlclN0dWRlbnQ7DQotZHJvcCB0YWJsZSBGaW5kZXJDb3Vyc2U7DQorZHJvcCB0YWJsZSBGaW5kZXJFbnJvbGxtZW50OworZHJvcCB0YWJsZSBGaW5kZXJTdHVkZW50OworZHJvcCB0YWJsZSBGaW5kZXJDb3Vyc2U7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9idWlsZC54bWwKaW5kZXggMDIzMWZhYi4uYjA5MmZjMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL2J1aWxkLnhtbApAQCAtMjgsMTEgKzI4LDExIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgbWl4IChFeGVjdXRlcyB0aGUgZWpiLWJtLWhhbmRsZSBtaXggdGVzdHMpCi0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1ibXAtaGFuZGxlIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgbWl4IChFeGVjdXRlcyB0aGUgZWpiLWJtLWhhbmRsZSBtaXggdGVzdHMpCisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1ibXAtaGFuZGxlIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvYnVpbGQucHJvcGVydGllcwppbmRleCBiZTJiNjgwLi45NmQwNjFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTggKzE1LDE4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLWhhbmRsZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbWl4Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1taXgiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2J1aWxkLnhtbAppbmRleCBkNjgwYTU1Li41OTQwYjNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLypTdHVkZW50Ki5jbGFzcywqKi8qRW5yb2xsZXIqLmNsYXNzLCoqLypDb3Vyc2UqLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL0NvdXJzZS5jbGFzcywqKi9FbnJvbGxlci5jbGFzcywqKi9TdHVkZW50LmNsYXNzLCoqLypIb21lKi5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC02OCwxOCArNjgsMTggQEAKICAgICAgIC0tPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9jbGllbnQvSGFuZGxlQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvY2xpZW50L0hhbmRsZUNsaWVudC5qYXZhCmluZGV4IGVlMzY4MzUuLmE0ODFiNzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9jbGllbnQvSGFuZGxlQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2NsaWVudC9IYW5kbGVDbGllbnQuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCiAvKioKLSAqIEEgc2ltcGxlIGphdmEgY2xpZW50IHdpbGw6IAorICogQSBzaW1wbGUgamF2YSBjbGllbnQgd2lsbDoKICAqIDx1bD4KICAqIDxsaT5Mb2NhdGVzIHRoZSBob21lIGludGVyZmFjZSBvZiB0aGUgZW50ZXJwcmlzZSBiZWFuCiAgKiA8bGk+R2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgcmVtb3RlIGludGVyZmFjZQpAQCAtMzYsMTEgKzM2LDExIEBACiAgICAgcHJpdmF0ZSBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsgCi0gICAgICAgIEhhbmRsZUNsaWVudCBjbGllbnQgPSBuZXcgSGFuZGxlQ2xpZW50KCk7IAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgSGFuZGxlQ2xpZW50IGNsaWVudCA9IG5ldyBIYW5kbGVDbGllbnQoKTsKIAogICAgICAgICAvLyBydW4gdGhlIHRlc3RzCi0gICAgICAgIGNsaWVudC5ydW5UZXN0Q2xpZW50KCk7ICAgCisgICAgICAgIGNsaWVudC5ydW5UZXN0Q2xpZW50KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuVGVzdENsaWVudCgpIHsKQEAgLTUwLDE1ICs1MCwxNSBAQAogCiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWxDdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsQ3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlRW5yb2xsZXIiKTsKLSAgICAgICAgICAgIEVucm9sbGVySG9tZSBlbnJvbGxlckhvbWUgPSAKLSAgICAgICAgICAgICAgICAoRW5yb2xsZXJIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgIEVucm9sbGVySG9tZSBlbnJvbGxlckhvbWUgPQorICAgICAgICAgICAgICAgIChFbnJvbGxlckhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVucm9sbGVySG9tZS5jbGFzcyk7CiAKICAgICAgICAgICAgIHRlc3QwMihpbml0aWFsQ3R4LCBlbnJvbGxlckhvbWUpOwogICAgICAgICAgICAgdGVzdDAzKGluaXRpYWxDdHgsIGVucm9sbGVySG9tZSk7CiAgICAgICAgICAgICB0ZXN0MDQoaW5pdGlhbEN0eCwgZW5yb2xsZXJIb21lKTsKICAgICAgICAgICAgIHRlc3QwNShpbml0aWFsQ3R4LCBlbnJvbGxlckhvbWUpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJIYW5kbGVDbGllbnQiKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBpbiBydW5UZXN0Q2xpZW50OiAiICsgZXgudG9TdHJpbmcoKSk7CkBAIC03MSw4ICs3MSw4IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU3R1ZGVudCIpOwotICAgICAgICAgICAgU3R1ZGVudEhvbWUgc0hvbWUgPSAKLSAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgU3R1ZGVudEhvbWUgc0hvbWUgPQorICAgICAgICAgICAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHVkZW50SG9tZS5jbGFzcyk7CiAKICAgICAgICAgICAgIFN0dWRlbnQgZGVuaXNlID0gc0hvbWUuY3JlYXRlKCI4MjMiLCAiRGVuaXNlIFNtaXRoIik7CkBAIC04MSw4ICs4MSw4IEBACiAgICAgICAgICAgICBzSG9tZS5jcmVhdGUoIjM4OCIsICJBIHNtYXJ0IHByb2dyYW1tZXIiKTsKIAogICAgICAgICAgICAgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUNvdXJzZSIpOwotICAgICAgICAgICAgQ291cnNlSG9tZSBjSG9tZSA9IAotICAgICAgICAgICAgICAgIChDb3Vyc2VIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgIENvdXJzZUhvbWUgY0hvbWUgPQorICAgICAgICAgICAgICAgIChDb3Vyc2VIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ291cnNlSG9tZS5jbGFzcyk7CiAKICAgICAgICAgICAgIENvdXJzZSBwb3dlciA9IGNIb21lLmNyZWF0ZSgiMjIwIiwgIlBvd2VyIEoyRUUgUHJvZ3JhbW1pbmciKTsKQEAgLTkwLDggKzkwLDggQEAKICAgICAgICAgICAgIGNIb21lLmNyZWF0ZSgiNzc3IiwgIkRlc2lnbiBQYXR0ZXJucyIpOwogCiAgICAgICAgICAgICBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlRW5yb2xsZXIiKTsKLSAgICAgICAgICAgIEVucm9sbGVySG9tZSBlSG9tZSA9IAotICAgICAgICAgICAgICAgIChFbnJvbGxlckhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgRW5yb2xsZXJIb21lIGVIb21lID0KKyAgICAgICAgICAgICAgICAoRW5yb2xsZXJIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnJvbGxlckhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgICBFbnJvbGxlciBlbnJvbGxlciA9IGVIb21lLmNyZWF0ZSgpOwpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvdXJzZUlkICsgIiAiICsgY291cnNlLmdldE5hbWUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKLSAKKwogICAgICAgICAgICAgQ291cnNlIGludHJvID0gY0hvbWUuZmluZEJ5UHJpbWFyeUtleSgiNzc3Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaW50cm8uZ2V0TmFtZSgpICsgIjoiKTsKICAgICAgICAgICAgIGNvdXJzZXMgPSBpbnRyby5nZXRTdHVkZW50SWRzKCk7CkBAIC0xMjAsMTQgKzEyMCwxNCBAQAogICAgICAgICAgICAgICAgIFN0dWRlbnQgc3R1ZGVudCA9IHNIb21lLmZpbmRCeVByaW1hcnlLZXkoc3R1ZGVudElkKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc3R1ZGVudElkICsgIiAiICsgc3R1ZGVudC5nZXROYW1lKCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgIAorCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiQm1wIEhhbmRsZUNsaWVudCIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkJtcCBIYW5kbGVDbGllbnQiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gdW5leHBlY3RlZCBleGNlcHRpb24hIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgIH0gCisgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3QwMihDb250ZXh0IGluaXRpYWxDdHgsIEVucm9sbGVySG9tZSBlbnJvbGxlckhvbWUpIHsKICAgICAgICAgdHJ5IHsKQEAgLTE4MSw0ICsxODEsNCBAQAogCiAgICAgfQogCi19IAorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBkOTIyMmNkLi5lNjlkNWQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtMzI1LDcgKzMyNSw3IEBACiAgICAgICAgIDxtZXRob2QtcGFyYW1zIC8+CiAgICAgICA8L21ldGhvZD4KIAotICA8IS0tIG1ldGhvZHMgZm9yIFN0dWRlbnQgRUpCIC0tPiAgICAgIAorICA8IS0tIG1ldGhvZHMgZm9yIFN0dWRlbnQgRUpCIC0tPgogCiAgICAgICA8bWV0aG9kPgogICAgICAgICA8ZWpiLW5hbWU+SGFuZGxlU3R1ZGVudEJlYW48L2VqYi1uYW1lPgpAQCAtNjY2LDYgKzY2Niw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPk5vdFN1cHBvcnRlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL0NvdXJzZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2VqYi9Db3Vyc2UuamF2YQppbmRleCAxOTA3YTY1Li44ZGI5MjE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL0NvdXJzZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9lamIvQ291cnNlLmphdmEKQEAgLTIyLDI0ICsyMiwyNCBAQAogCiAKIHB1YmxpYyBpbnRlcmZhY2UgQ291cnNlIGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgYW4gYXJyYXlsaXN0IG9mIFN0dWRlbnRJZHMgdGFraW5nIHRoZSBjb3Vyc2UuCi0gICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24gCisgICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KICAgICAgKi8KICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFN0dWRlbnRJZHMoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY291cnNlLgotICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uIAotICAgICAqIAorICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCisgICAgICoKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbmFtZSBvZiB0aGUgY291cnNlLgotICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uIAotICAgICAqIAorICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCisgICAgICoKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL0NvdXJzZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9lamIvQ291cnNlQmVhbi5qYXZhCmluZGV4IDE2ODdkNjguLjg2YzhjODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9lamIvQ291cnNlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9lamIvQ291cnNlQmVhbi5qYXZhCkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICAgICAgICAgICAgICAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2pkYmMvYm1wLWhhbmRsZS1taXhEQiIpOwogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0Vucm9sbGVyIik7Ci0gICAgICAgICAgICBlbnJvbGxlckhvbWUgPSAKKyAgICAgICAgICAgIGVucm9sbGVySG9tZSA9CiAgICAgICAgICAgICAgICAgKEVucm9sbGVySG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5yb2xsZXJIb21lLmNsYXNzKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL0NvdXJzZUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9lamIvQ291cnNlSG9tZS5qYXZhCmluZGV4IGQwMWM3OTcuLjhmZTIzZmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9lamIvQ291cnNlSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9lamIvQ291cnNlSG9tZS5qYXZhCkBAIC0zMCwxMiArMzAsMTIgQEAKICAgICAgKi8KICAgICBwdWJsaWMgQ291cnNlIGNyZWF0ZShTdHJpbmcgY291cnNlSWQsIFN0cmluZyBuYW1lKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBDcmVhdGVFeGNlcHRpb247Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIGEgcmVmZXJlbmNlIHRvIHRoZSByZW1vdGUgaW50ZXJmYWNlIHRvIHRoZSBDb3Vyc2VCZWFuIG9iamVjdCBieSBQcmltYXJ5IEtleS4KICAgICAgKiBAZXhjZXB0aW9uIHRocm93cyBGaW5kZXJFeGNlcHRpb24gYW5kIFJlbW90ZUV4Y2VwdGlvbi4KICAgICAgKgogICAgICAqLwotICAgIHB1YmxpYyBDb3Vyc2UgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgY291cnNlSWQpIAorICAgIHB1YmxpYyBDb3Vyc2UgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgY291cnNlSWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9lamIvRW5yb2xsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9lamIvRW5yb2xsZXIuamF2YQppbmRleCAwYTU4MGQ0Li5jMWZlMWJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL0Vucm9sbGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2VqYi9FbnJvbGxlci5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCiBwdWJsaWMgaW50ZXJmYWNlIEVucm9sbGVyIGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAKKwogIC8qKgogICAqIEVucm9sbHMgYSBTdHVkZW50IGluIGEgY291cnNlCiAgICogQHBhcmFtIHN0dWRlbnRJZCBwcmltYXJ5IGtleSBvZiB0aGUgc3R1ZGVudCBvYmplY3QKQEAgLTQwLDcgKzQwLDcgQEAKICAgIHB1YmxpYyB2b2lkIHVuRW5yb2xsKFN0cmluZyBzdHVkZW50SWQsIFN0cmluZyBjb3Vyc2VJZCkKICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgLyoqCi0gICogRGVsZXRlcyBhIFN0dWRlbnQgCisgICogRGVsZXRlcyBhIFN0dWRlbnQKICAgKiBAcGFyYW0gc3R1ZGVudElkIHByaW1hcnkga2V5IG9mIHRoZSBzdHVkZW50IG9iamVjdAogICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCiAgICovCkBAIC00OSw3ICs0OSw3IEBACiAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgLyoqCi0gICogRGVsZXRlcyBhIENvdXJzZSAKKyAgKiBEZWxldGVzIGEgQ291cnNlCiAgICogQHBhcmFtIGNvdXJzZUlkIHByaW1hcnkga2V5IG9mIHRoZSBjb3Vyc2Ugb2JqZWN0CiAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9lamIvRW5yb2xsZXJCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL0Vucm9sbGVyQmVhbi5qYXZhCmluZGV4IDVjOWQ3YjMuLjlhZjNmZTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9lamIvRW5yb2xsZXJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2VqYi9FbnJvbGxlckJlYW4uamF2YQpAQCAtMTYsNyArMTYsNyBAQAogCiBwYWNrYWdlIGNvbS5zdW4uczFhc2Rldi5lamIuYm1wLmhhbmRsZS5taXguZWpiOwogCi1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuKjsKIGltcG9ydCBqYXZhLnNxbC4qOwogaW1wb3J0IGphdmF4LnNxbC4qOwpAQCAtMjYsNyArMjYsNyBAQAogaW1wb3J0IGphdmEuaW8uKjsKIAogcHVibGljIGNsYXNzIEVucm9sbGVyQmVhbiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKLSAKKwogICAgIHByaXZhdGUgQ29ubmVjdGlvbiBjb247CiAgICAgcHJpdmF0ZSBTdHJpbmcgZGJOYW1lID0gImphdmE6Y29tcC9lbnYvamRiYy9ibXAtaGFuZGxlLW1peERCIjsKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGNvbnRleHQ7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogRGVsZXRlcyBhIFN0dWRlbnQgCisgICAgICogRGVsZXRlcyBhIFN0dWRlbnQKICAgICAgKiBAcGFyYW0gc3R1ZGVudElkIHByaW1hcnkga2V5IG9mIHRoZSBzdHVkZW50IG9iamVjdAogICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCiAgICAgICovCkBAIC03NCw3ICs3NCw3IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogRGVsZXRlcyBhIENvdXJzZSAKKyAgICAgKiBEZWxldGVzIGEgQ291cnNlCiAgICAgICogQHBhcmFtIGNvdXJzZUlkIHByaW1hcnkga2V5IG9mIHRoZSBjb3Vyc2Ugb2JqZWN0CiAgICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KICAgICAgKi8KQEAgLTE0Myw4ICsxNDMsOCBAQAogICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImVqYlBhc3NpdmF0ZSBFeGNlcHRpb246ICIgKyBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9IGZpbmFsbHkgewotCSAgICBjb24gPSBudWxsOwotCX0KKyAgICAgICAgY29uID0gbnVsbDsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgY29udGV4dCkgewpAQCAtMTY2LDcgKzE2Niw3IEBACiAKICAgICAgICAgU3RyaW5nIGluc2VydFN0YXRlbWVudCA9CiAgICAgICAgICAgICAiaW5zZXJ0IGludG8gSGFuZGxlRW5yb2xsbWVudCB2YWx1ZXMgKCA/ICwgPyApIjsKLSAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPSAKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPQogICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0U3RhdGVtZW50KTsKIAogICAgICAgICBwcmVwU3RtdC5zZXRTdHJpbmcoMSwgc3R1ZGVudElkKTsKQEAgLTE3Niw3ICsxNzYsNyBAQAogICAgICAgICBwcmVwU3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVFbnRyeShTdHJpbmcgc3R1ZGVudElkLCBTdHJpbmcgY291cnNlSWQpIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVFbnRyeShTdHJpbmcgc3R1ZGVudElkLCBTdHJpbmcgY291cnNlSWQpCiAgICAgICAgIHRocm93cyBTUUxFeGNlcHRpb24gewogCiAgICAgICAgIFN0cmluZyBkZWxldGVTdGF0ZW1lbnQgPQpAQCAtMjE5LDEzICsyMTksMTMgQEAKICAgICAgICAgcHJlcFN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIEFycmF5TGlzdCBzZWxlY3RTdHVkZW50KFN0cmluZyBjb3Vyc2VJZCkgCisgICAgcHJpdmF0ZSBBcnJheUxpc3Qgc2VsZWN0U3R1ZGVudChTdHJpbmcgY291cnNlSWQpCiAgICAgICAgIHRocm93cyBTUUxFeGNlcHRpb24gewogCiAgICAgICAgIFN0cmluZyBzZWxlY3RTdGF0ZW1lbnQgPQogICAgICAgICAgICAgInNlbGVjdCBzdHVkZW50aWQgIiArCiAgICAgICAgICAgICAiZnJvbSBIYW5kbGVFbnJvbGxtZW50IHdoZXJlIGNvdXJzZWlkID0gPyAiOwotICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcmVwU3RtdCA9IAorICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcmVwU3RtdCA9CiAgICAgICAgICAgICBjb24ucHJlcGFyZVN0YXRlbWVudChzZWxlY3RTdGF0ZW1lbnQpOwogCiAgICAgICAgIHByZXBTdG10LnNldFN0cmluZygxLCBjb3Vyc2VJZCk7CkBAIC0yNDEsMTMgKzI0MSwxMyBAQAogICAgICAgICByZXR1cm4gYTsKICAgICB9CiAKLSAgICBwcml2YXRlIEFycmF5TGlzdCBzZWxlY3RDb3Vyc2UoU3RyaW5nIHN0dWRlbnRJZCkgCisgICAgcHJpdmF0ZSBBcnJheUxpc3Qgc2VsZWN0Q291cnNlKFN0cmluZyBzdHVkZW50SWQpCiAgICAgICAgIHRocm93cyBTUUxFeGNlcHRpb24gewogCiAgICAgICAgIFN0cmluZyBzZWxlY3RTdGF0ZW1lbnQgPQogICAgICAgICAgICAgInNlbGVjdCBjb3Vyc2VpZCAiICsKICAgICAgICAgICAgICJmcm9tIEhhbmRsZUVucm9sbG1lbnQgd2hlcmUgc3R1ZGVudGlkID0gPyAiOwotICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcmVwU3RtdCA9IAorICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcmVwU3RtdCA9CiAgICAgICAgICAgICBjb24ucHJlcGFyZVN0YXRlbWVudChzZWxlY3RTdGF0ZW1lbnQpOwogCiAgICAgICAgIHByZXBTdG10LnNldFN0cmluZygxLCBzdHVkZW50SWQpOwpAQCAtMzAzLDcgKzMwMyw3IEBACiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1N0dWRlbnQiKTsKICAgICAgICAgICAgIFN0dWRlbnRIb21lIHN0dWRlbnRIb21lID0KICAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIFN0dWRlbnRIb21lLmNsYXNzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIb21lSGFuZGxlIGhvbWVIYW5kbGUgPSBzdHVkZW50SG9tZS5nZXRIb21lSGFuZGxlKCk7CiAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgc2J1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoIkJFR0lOOiB0ZXN0U3R1ZGVudEhvbWVIYW5kbGUiKTsKICAgICAgICAgICAgIEhvbWVIYW5kbGUgcmV0SG9tZUhhbmRsZSA9IGRvSG9tZUhhbmRsZVRlc3QoaG9tZUhhbmRsZSwgc2J1ZiwgInRlc3RTdHVkZW50SG9tZUhhbmRsZSIpOwpAQCAtMzI0LDcgKzMyNCw3IEBACiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1N0dWRlbnQiKTsKICAgICAgICAgICAgIFN0dWRlbnRIb21lIHN0dWRlbnRIb21lID0KICAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIFN0dWRlbnRIb21lLmNsYXNzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTdHVkZW50IHN0dWRlbnQgPSBzdHVkZW50SG9tZS5maW5kQnlQcmltYXJ5S2V5KHN0dWRlbnRJRCk7CiAgICAgICAgICAgICBIYW5kbGUgaGFuZGxlID0gc3R1ZGVudC5nZXRIYW5kbGUoKTsKICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBzYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigiQkVHSU46IHRlc3RTdHVkZW50SGFuZGxlIik7CkBAIC0zNDMsNyArMzQzLDcgQEAKICAgICBwcml2YXRlIEhvbWVIYW5kbGUgZG9Ib21lSGFuZGxlVGVzdChIb21lSGFuZGxlIGhhbmRsZSwgU3RyaW5nQnVmZmVyIHNidWYsIFN0cmluZyBtc2cpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0gICAgICAgICAgICAKKwogICAgICAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYm9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwogICAgICAgICBPYmplY3RPdXRwdXRTdHJlYW0gb29zID0gbmV3IE9iamVjdE91dHB1dFN0cmVhbShib3MpOwogICAgICAgICBvb3Mud3JpdGVPYmplY3QoaGFuZGxlKTsKQEAgLTM2Myw3ICszNjMsNyBAQAogICAgIHByaXZhdGUgSGFuZGxlIGRvSGFuZGxlVGVzdChIYW5kbGUgaGFuZGxlLCBTdHJpbmdCdWZmZXIgc2J1ZiwgU3RyaW5nIG1zZykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLSAgICAgICAgICAgIAorCiAgICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBib3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIE9iamVjdE91dHB1dFN0cmVhbSBvb3MgPSBuZXcgT2JqZWN0T3V0cHV0U3RyZWFtKGJvcyk7CiAgICAgICAgIG9vcy53cml0ZU9iamVjdChoYW5kbGUpOwpAQCAtMzgwLDcgKzM4MCw3IEBACiAgICAgICAgIHJldHVybiBuZXdIYW5kbGU7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzU2FtZShIb21lSGFuZGxlIGgxLCBIb21lSGFuZGxlIGgyKSAKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNTYW1lKEhvbWVIYW5kbGUgaDEsIEhvbWVIYW5kbGUgaDIpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24KICAgICB7CiAgICAgICAgIEVKQk1ldGFEYXRhIG1ldGExID0gaDEuZ2V0RUpCSG9tZSgpLmdldEVKQk1ldGFEYXRhKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL1N0dWRlbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9lamIvU3R1ZGVudC5qYXZhCmluZGV4IDA4OGVlZjQuLmVjNzFiOWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9lamIvU3R1ZGVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9lamIvU3R1ZGVudC5qYXZhCkBAIC0yMiw5ICsyMiw5IEBACiAKIAogcHVibGljIGludGVyZmFjZSBTdHVkZW50IGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAKKwogICAvKioKLSAgICogUmV0dXJucyB0aGUgQ291cnNlSWRzIHRoYXQgYSBzdHVkZW50IGlzIGVucm9sbGVkIGluLiAKKyAgICogUmV0dXJucyB0aGUgQ291cnNlSWRzIHRoYXQgYSBzdHVkZW50IGlzIGVucm9sbGVkIGluLgogICAgKiBAcGFyYW0gc3R1ZGVudElkIHByaW1hcnkga2V5IG9mIHRoZSBzdHVkZW50IG9iamVjdAogICAgKiBAcGFyYW0gY291cnNlSWQgcHJpbWFyeSBrZXkgb2YgdGhlIGNvdXJzZSBvYmplY3QKICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9lamIvU3R1ZGVudEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9lamIvU3R1ZGVudEJlYW4uamF2YQppbmRleCA3MzY3ZWY3Li40NzdlYmU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL1N0dWRlbnRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2VqYi9TdHVkZW50QmVhbi5qYXZhCkBAIC05OCw3ICs5OCw3IEBACiAgICAgICAgIGNvdXJzZUlkcyA9IG5ldyBBcnJheUxpc3QoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICBkYXRhU291cmNlID0gCisgICAgICAgICAgICBkYXRhU291cmNlID0KICAgICAgICAgICAgICAgICAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2pkYmMvYm1wLWhhbmRsZS1taXhEQiIpOwogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0Vucm9sbGVyIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL1N0dWRlbnRIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL1N0dWRlbnRIb21lLmphdmEKaW5kZXggYTI1NWRjYS4uZTA5ZDY3NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2VqYi9TdHVkZW50SG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9lamIvU3R1ZGVudEhvbWUuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAqIEBleGNlcHRpb24gdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiBhbmQgUmVtb3RlRXhjZXB0aW9uLgogICAgICAqCiAgICAgICovCi0gCi0gICAgcHVibGljIFN0dWRlbnQgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgc3R1ZGVudElkKSAKKworICAgIHB1YmxpYyBTdHVkZW50IGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHN0dWRlbnRJZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggNmZkZmIyYi4uYWY0MDE1ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDE1ICsxLDE1IEBACiBEcm9wIHRhYmxlIEhhbmRsZVN0dWRlbnQ7CiBjcmVhdGUgdGFibGUgSGFuZGxlU3R1ZGVudAotKHN0dWRlbnRpZCB2YXJjaGFyKDMpIHByaW1hcnkga2V5IG5vdCBudWxsLCAgCisoc3R1ZGVudGlkIHZhcmNoYXIoMykgcHJpbWFyeSBrZXkgbm90IG51bGwsCiBuYW1lIHZhcmNoYXIoMzYpKTsKIAogRHJvcCB0YWJsZSBIYW5kbGVDb3Vyc2U7CiBjcmVhdGUgdGFibGUgSGFuZGxlQ291cnNlCi0oY291cnNlaWQgdmFyY2hhcigzKSBwcmltYXJ5IGtleSBub3QgbnVsbCwgIAorKGNvdXJzZWlkIHZhcmNoYXIoMykgcHJpbWFyeSBrZXkgbm90IG51bGwsCiBuYW1lIHZhcmNoYXIoMzYpKTsKIAogRHJvcCB0YWJsZSBIYW5kbGVFbnJvbGxtZW50OwogY3JlYXRlIHRhYmxlIEhhbmRsZUVucm9sbG1lbnQKLShjb3Vyc2VpZCB2YXJjaGFyKDMpLCAgCisoY291cnNlaWQgdmFyY2hhcigzKSwKIHN0dWRlbnRpZCB2YXJjaGFyKDM2KSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvYnVpbGQucHJvcGVydGllcwppbmRleCBkMjczZDhkLi42ZTdjOTRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOCArMTUsMTggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtcmVhZG9ubHkiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9idWlsZC54bWwKaW5kZXggMmIwMGQ4My4uNTExMTQwMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDIzICs0OCwyMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLypTdHVkZW50Ki5jbGFzcywqKi8qRW5yb2xsZXIqLmNsYXNzLCoqLypDb3Vyc2UqLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL0NvdXJzZS5jbGFzcywqKi9FbnJvbGxlci5jbGFzcywqKi9TdHVkZW50LmNsYXNzLCoqLypIb21lKi5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4gICAgICAgICAgIAorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApAQCAtNzMsMTQgKzczLDE0IEBACiAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSI0MDAgMTAgNSAyNTAiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9jbGllbnQvUmVhZE9ubHlDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvY2xpZW50L1JlYWRPbmx5Q2xpZW50LmphdmEKaW5kZXggMmM4NzA4Ny4uYzM5OGE0MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9jbGllbnQvUmVhZE9ubHlDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2NsaWVudC9SZWFkT25seUNsaWVudC5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiBpbXBvcnQgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwogCiAvKioKLSAqIEEgc2ltcGxlIGphdmEgY2xpZW50IHdpbGw6IAorICogQSBzaW1wbGUgamF2YSBjbGllbnQgd2lsbDoKICAqIDx1bD4KICAqIDxsaT5Mb2NhdGVzIHRoZSBob21lIGludGVyZmFjZSBvZiB0aGUgZW50ZXJwcmlzZSBiZWFuCiAgKiA8bGk+R2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgcmVtb3RlIGludGVyZmFjZQpAQCAtNDMsOSArNDMsOSBAQAogICAgIHByaXZhdGUgaW50IG51bVBLc18gPSAxOwogICAgIHByaXZhdGUgbG9uZyBzbGVlcFRpbWVJbk1pbGxpc18gPSAxMDA7CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7IAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAotICAgICAgICBSZWFkT25seUNsaWVudCBjbGllbnQgPSBuZXcgUmVhZE9ubHlDbGllbnQoKTsgCisgICAgICAgIFJlYWRPbmx5Q2xpZW50IGNsaWVudCA9IG5ldyBSZWFkT25seUNsaWVudCgpOwogCiAgICAgICAgIGlmKCBhcmdzLmxlbmd0aCA9PSA0ICkgewogCkBAIC01NCwxNiArNTQsMTYgQEAKICAgICAgICAgICAgIGludCBudW1QS3MgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMl0pOwogICAgICAgICAgICAgbG9uZyBzbGVlcFRpbWVJbk1pbGxpcyA9IExvbmcucGFyc2VMb25nKGFyZ3NbM10pOwogICAgICAgICAgICAgY2xpZW50LnJ1blRocmVhZFRlc3QobnVtSXRlcmF0aW9ucywgbnVtVGhyZWFkcywgbnVtUEtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXBUaW1lSW5NaWxsaXMpOyAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXBUaW1lSW5NaWxsaXMpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2xpZW50LnJ1blRlc3RDbGllbnQoKTsgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNsaWVudC5ydW5UZXN0Q2xpZW50KCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBydW4gdGhlIHRlc3RzCi0gICAgICAgIAorCiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgcnVuVGVzdENsaWVudCgpIHsgICAgICAgCisgICAgcHVibGljIHZvaWQgcnVuVGVzdENsaWVudCgpIHsKIAogICAgICAgICB0cnl7CiAgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUZXN0aW5nIEJtcCBSZWFkT25seUNsaWVudCBhcHAuIik7CkBAIC04NSw3ICs4NSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuVGhyZWFkVGVzdChpbnQgbnVtSXRlcmF0aW9ucywgaW50IG51bVRocmVhZHMsIGludCBudW1QS3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNsZWVwVGltZUluTWlsbGlzKSB7ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzbGVlcFRpbWVJbk1pbGxpcykgewogCiAgICAgICAgIG51bUl0ZXJhdGlvbnNfID0gbnVtSXRlcmF0aW9uczsKICAgICAgICAgbnVtVGhyZWFkc18gPSBudW1UaHJlYWRzOwpAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICBzbGVlcFRpbWVJbk1pbGxpc18gPSBzbGVlcFRpbWVJbk1pbGxpczsKIAogICAgICAgICB0cnl7Ci0gICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJCbXAgUmVhZE9ubHlDbGllbnQgdGhyZWFkIHRlc3QiKTsgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkJtcCBSZWFkT25seUNsaWVudCB0aHJlYWQgdGVzdCIpOwogICAgICAgICAgICAgdGVzdDEyKCk7CiAgICAgICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiUmVhZE9ubHlDbGllbnQiKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC0xMDYsOCArMTA2LDggQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVTdHVkZW50Iik7Ci0gICAgICAgICAgICBTdHVkZW50SG9tZSBzSG9tZSA9IAotICAgICAgICAgICAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgICBTdHVkZW50SG9tZSBzSG9tZSA9CisgICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0dWRlbnRIb21lLmNsYXNzKTsKIAogICAgICAgICAgICAgdHJ5IHsKQEAgLTExOSw3ICsxMTksNyBAQAogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJCbXAtUmVhZE9ubHkgU3R1ZGVudCAgICIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gZXhjZXB0aW9uISIpOwogICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgICAgIC8vRXhwZWN0ZWQgCisgICAgICAgICAgICAgICAgLy9FeHBlY3RlZAogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdGgpIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uISIpOwpAQCAtMTMzLDggKzEzMyw4IEBACiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQ291cnNlIik7CiAKLSAgICAgICAgICAgIENvdXJzZUhvbWUgY0hvbWUgPSAKLSAgICAgICAgICAgICAgICAoQ291cnNlSG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgICBDb3Vyc2VIb21lIGNIb21lID0KKyAgICAgICAgICAgICAgICAoQ291cnNlSG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvdXJzZUhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgICB0cnkgewpAQCAtMTQ2LDcgKzE0Niw3IEBACiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkJtcC1SZWFkT25seSBDb3Vyc2UgICAgIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiBleGNlcHRpb24hIik7CiAgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICAgICAgLy9FeHBlY3RlZCAKKyAgICAgICAgICAgICAgICAvL0V4cGVjdGVkCiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0aCkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gdW5leHBlY3RlZCBleGNlcHRpb24hIik7CkBAIC0xNjEsOCArMTYxLDggQEAKICAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVFbnJvbGxlciIpOwogCi0gICAgICAgICAgICBFbnJvbGxlckhvbWUgZUhvbWUgPSAKLSAgICAgICAgICAgICAgICAoRW5yb2xsZXJIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgIEVucm9sbGVySG9tZSBlSG9tZSA9CisgICAgICAgICAgICAgICAgKEVucm9sbGVySG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5yb2xsZXJIb21lLmNsYXNzKTsKIAogICAgICAgICAgICAgRW5yb2xsZXIgZW5yb2xsZXIgPSBlSG9tZS5jcmVhdGUoKTsKQEAgLTE4MCwxNSArMTgwLDE1IEBACiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiEiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgfSAKKyAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgdGVzdDA0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUVucm9sbGVyIik7CiAKLSAgICAgICAgICAgIEVucm9sbGVySG9tZSBlSG9tZSA9IAotICAgICAgICAgICAgICAgIChFbnJvbGxlckhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgRW5yb2xsZXJIb21lIGVIb21lID0KKyAgICAgICAgICAgICAgICAoRW5yb2xsZXJIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnJvbGxlckhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgICBFbnJvbGxlciBlbnJvbGxlciA9IGVIb21lLmNyZWF0ZSgpOwpAQCAtMjI3LDggKzIyNyw4IEBACiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlRW5yb2xsZXIiKTsKIAotICAgICAgICAgICAgRW5yb2xsZXJIb21lIGVIb21lID0gCi0gICAgICAgICAgICAgICAgKEVucm9sbGVySG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgICBFbnJvbGxlckhvbWUgZUhvbWUgPQorICAgICAgICAgICAgICAgIChFbnJvbGxlckhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVucm9sbGVySG9tZS5jbGFzcyk7CiAKICAgICAgICAgICAgIEVucm9sbGVyIGVucm9sbGVyID0gZUhvbWUuY3JlYXRlKCk7CkBAIC0yNTAsMTcgKzI1MCwxNyBAQAogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUVucm9sbGVyIik7CiAKLSAgICAgICAgICAgIEVucm9sbGVySG9tZSBlSG9tZSA9IAotICAgICAgICAgICAgICAgIChFbnJvbGxlckhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgRW5yb2xsZXJIb21lIGVIb21lID0KKyAgICAgICAgICAgICAgICAoRW5yb2xsZXJIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnJvbGxlckhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgICBFbnJvbGxlciBlbnJvbGxlciA9IGVIb21lLmNyZWF0ZSgpOwogICAgICAgICAgICAgYm9vbGVhbiBzdGF0dXMgPSBlbnJvbGxlci5jYW5HZXRSZWFkT25seUJlYW5Mb2NhbE5vdGlmaWVyKHRydWUpOwogICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSB0cnVlKSB7Ci0gICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkJtcC1SZWFkT25seSBTRlNCTG9jYWwtTmV3Tm90aWZpZXIgIiwgCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkJtcC1SZWFkT25seSBTRlNCTG9jYWwtTmV3Tm90aWZpZXIgIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiQm1wLVJlYWRPbmx5IFNGU0JMb2NhbC1OZXdOb3RpZmllciAiLCAKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiQm1wLVJlYWRPbmx5IFNGU0JMb2NhbC1OZXdOb3RpZmllciAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtMjc1LDIyICsyNzUsMjIgQEAKICAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVFbnJvbGxlciIpOwogCi0gICAgICAgICAgICBFbnJvbGxlckhvbWUgZUhvbWUgPSAKLSAgICAgICAgICAgICAgICAoRW5yb2xsZXJIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgIEVucm9sbGVySG9tZSBlSG9tZSA9CisgICAgICAgICAgICAgICAgKEVucm9sbGVySG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5yb2xsZXJIb21lLmNsYXNzKTsKIAogICAgICAgICAgICAgRW5yb2xsZXIgZW5yb2xsZXIgPSBlSG9tZS5jcmVhdGUoKTsKLSAgICAgICAgICAgIGJvb2xlYW4gc3RhdHVzID0gZW5yb2xsZXIudGVzdFJlYWRPbmx5QmVhbkxvY2FsU3R1ZGVudFJlZnJlc2goInN0dWRlbnQwIiwgCisgICAgICAgICAgICBib29sZWFuIHN0YXR1cyA9IGVucm9sbGVyLnRlc3RSZWFkT25seUJlYW5Mb2NhbFN0dWRlbnRSZWZyZXNoKCJzdHVkZW50MCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gdHJ1ZSkgewotICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJCbXAtUmVhZE9ubHkgU0ZTQkxvY2FsLU5ld1N0dWRlbnRSZWZyZXNoICIsIAorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJCbXAtUmVhZE9ubHkgU0ZTQkxvY2FsLU5ld1N0dWRlbnRSZWZyZXNoICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkJtcC1SZWFkT25seSBTRlNCTG9jYWwtTmV3U3R1ZGVudFJlZnJlc2ggIiwgCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkJtcC1SZWFkT25seSBTRlNCTG9jYWwtTmV3U3R1ZGVudFJlZnJlc2ggIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJCbXAtUmVhZE9ubHkgU0ZTQkxvY2FsTm90aWZpZXJSZWZyZXNoICIsIAorICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkJtcC1SZWFkT25seSBTRlNCTG9jYWxOb3RpZmllclJlZnJlc2ggIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiEiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMzAyLDE3ICszMDIsMTcgQEAKICAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVTdHVkZW50Iik7CiAKLSAgICAgICAgICAgIFN0dWRlbnRIb21lIHJlYWRPbmx5U3R1ZGVudEhvbWUgPSAKLSAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgU3R1ZGVudEhvbWUgcmVhZE9ubHlTdHVkZW50SG9tZSA9CisgICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0dWRlbnRIb21lLmNsYXNzKTsKICAgICAgICAgICAgIG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9NdXRhYmxlU3R1ZGVudCIpOwogCi0gICAgICAgICAgICBTdHVkZW50SG9tZU11dGFibGUgbXV0YWJsZVN0dWRlbnRIb21lID0gCi0gICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lTXV0YWJsZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgICBTdHVkZW50SG9tZU11dGFibGUgbXV0YWJsZVN0dWRlbnRIb21lID0KKyAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWVNdXRhYmxlKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0dWRlbnRIb21lTXV0YWJsZS5jbGFzcyk7CiAKICAgICAgICAgICAgIFN0dWRlbnQgbmV3U3R1ZGVudCA9IG11dGFibGVTdHVkZW50SG9tZS5jcmVhdGUoIjk5OSIsICJKb2UgU2NobW8iKTsKLSAgICAgICAgICAgIFN0dWRlbnQgcmVhZE9ubHlTdHVkZW50ID0gCisgICAgICAgICAgICBTdHVkZW50IHJlYWRPbmx5U3R1ZGVudCA9CiAgICAgICAgICAgICAgICAgcmVhZE9ubHlTdHVkZW50SG9tZS5maW5kQnlQcmltYXJ5S2V5KCI5OTkiKTsKICAgICAgICAgICAgIFN0cmluZyBuYW1lMSAgPSBuZXdTdHVkZW50LmdldE5hbWUoKTsKICAgICAgICAgICAgIFN0cmluZyByZWFkT25seU5hbWUxID0gcmVhZE9ubHlTdHVkZW50LmdldE5hbWUoKTsKQEAgLTM0Myw5ICszNDMsOSBAQAogICAgICAgICAgICAgLy8gdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBiZWFuIGFuZCBjYWxsIGVqYkxvYWQgb24gaXQuCiAgICAgICAgICAgICAvLyBTbywgb25seSB1c2UgbmFtZTEgYW5kIG5hbWUyIHRvIGRlY2lkZSBpZiB0ZXN0IHBhc3NlZC4KICAgICAgICAgICAgIGlmIChuYW1lMS5lcXVhbHMocmVhZE9ubHlOYW1lMSkgJiYgbmFtZTIuZXF1YWxzKHJlYWRPbmx5TmFtZTIpICYmCi0gICAgICAgICAgICAgICAgbmFtZTEuZXF1YWxzKHJlYWRPbmx5TmFtZTFUeCkgJiYgCisgICAgICAgICAgICAgICAgbmFtZTEuZXF1YWxzKHJlYWRPbmx5TmFtZTFUeCkgJiYKICAgICAgICAgICAgICAgICBuYW1lMi5lcXVhbHMocmVhZE9ubHlOYW1lMlR4KSkgewotICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJCbXAtUmVhZE9ubHkgUmVhZE1vc3RseSAgIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkJtcC1SZWFkT25seSBSZWFkTW9zdGx5ICAiLCBzdGF0LkZBSUwpOwpAQCAtMzU3LDcgKzM1Nyw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiQm1wLVJlYWRPbmx5IFJlYWRNb3N0bHkgICIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiEiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3QxMigpIHsKQEAgLTM2Niw3ICszNjYsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOdW0gSXRlcmF0aW9ucyA9ICIgKyBudW1JdGVyYXRpb25zXyk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk51bSBUaHJlYWRzID0gIiArIG51bVRocmVhZHNfKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTnVtIFBLcyA9ICIgKyBudW1QS3NfKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2xlZXAgdGltZSBpbiBtaWxsaXNlY29uZHMgPSAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwIHRpbWUgaW4gbWlsbGlzZWNvbmRzID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXBUaW1lSW5NaWxsaXNfKTsKIAogICAgICAgICAgICAgaW50IG51bVdyaXRlckl0ZXJhdGlvbnMgPSBudW1JdGVyYXRpb25zXyAvIDEwMDsKQEAgLTM3NCwzNCArMzc0LDM0IEBACiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTnVtIHdyaXRlciBpdGVyYXRpb25zID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtV3JpdGVySXRlcmF0aW9ucyk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyaXRlciBzbGVlcCB0aW1lIGluIG1pbGxpc2Vjb25kcyA9ICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JpdGVyIHNsZWVwIHRpbWUgaW4gbWlsbGlzZWNvbmRzID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyU2xlZXBUaW1lSW5NaWxsaXMpOwogCiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU3R1ZGVudCIpOwogCi0gICAgICAgICAgICBTdHVkZW50SG9tZSByZWFkT25seVN0dWRlbnRIb21lID0gCi0gICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgIFN0dWRlbnRIb21lIHJlYWRPbmx5U3R1ZGVudEhvbWUgPQorICAgICAgICAgICAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHVkZW50SG9tZS5jbGFzcyk7CiAgICAgICAgICAgICBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvTXV0YWJsZVN0dWRlbnQiKTsKIAotICAgICAgICAgICAgU3R1ZGVudEhvbWVNdXRhYmxlIG11dGFibGVTdHVkZW50SG9tZSA9IAotICAgICAgICAgICAgICAgIChTdHVkZW50SG9tZU11dGFibGUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgU3R1ZGVudEhvbWVNdXRhYmxlIG11dGFibGVTdHVkZW50SG9tZSA9CisgICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lTXV0YWJsZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHVkZW50SG9tZU11dGFibGUuY2xhc3MpOwotICAgICAgICAgIAorCiAgICAgICAgICAgICBTdHVkZW50W10gbmV3U3R1ZGVudHMgPSBuZXcgU3R1ZGVudFtudW1QS3NfXTsKICAgICAgICAgICAgIFN0dWRlbnRbXSByZWFkT25seVN0dWRlbnRzID0gbmV3IFN0dWRlbnRbbnVtUEtzX107CiAgICAgICAgICAgICBUaHJlYWRbXSByZWFkZXJzID0gbmV3IFRocmVhZFtudW1UaHJlYWRzXyAqIG51bVBLc19dOwogICAgICAgICAgICAgVGhyZWFkW10gd3JpdGVycyA9IG5ldyBUaHJlYWRbbnVtUEtzX107CiAKICAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1QS3NfOyBpKyspIHsKLSAgICAgICAgICAgICAgICBuZXdTdHVkZW50c1tpXSA9IAorICAgICAgICAgICAgICAgIG5ld1N0dWRlbnRzW2ldID0KICAgICAgICAgICAgICAgICAgICAgbXV0YWJsZVN0dWRlbnRIb21lLmNyZWF0ZSgiUmVhZGVyVGhyZWFkIiArIGksICJBQkMiICsgaSk7Ci0gICAgICAgICAgICAgICAgcmVhZE9ubHlTdHVkZW50c1tpXSA9IAorICAgICAgICAgICAgICAgIHJlYWRPbmx5U3R1ZGVudHNbaV0gPQogICAgICAgICAgICAgICAgICAgICByZWFkT25seVN0dWRlbnRIb21lLmZpbmRCeVByaW1hcnlLZXkoIlJlYWRlclRocmVhZCIgKyBpKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIHN0dWRlbnQgIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgc3R1ZGVudCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZE9ubHlTdHVkZW50c1tpXS5nZXRQcmltYXJ5S2V5KCkpOwotICAgICAgICAgICAgICAgIHdyaXRlcnNbaV0gPSBuZXcgV3JpdGVyVGhyZWFkKG5ld1N0dWRlbnRzW2ldLCAKKyAgICAgICAgICAgICAgICB3cml0ZXJzW2ldID0gbmV3IFdyaXRlclRocmVhZChuZXdTdHVkZW50c1tpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1Xcml0ZXJJdGVyYXRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlclNsZWVwVGltZUluTWlsbGlzKTsKICAgICAgICAgICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgbnVtVGhyZWFkc187IGorKykgewpAQCAtNDA5LDIxICs0MDksMjEgQEAKICAgICAgICAgICAgICAgICAgICAgaW50IHRocmVhZEluZGV4ID0gaSpudW1UaHJlYWRzXyArIGo7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhyZWFkIGluZGV4ID0gIiArIHRocmVhZEluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgcmVhZGVyc1t0aHJlYWRJbmRleF0gPSBuZXcgUmVhZGVyVGhyZWFkCi0gICAgICAgICAgICAgICAgICAgICAgICAocmVhZE9ubHlTdHVkZW50c1tpXSwgbnVtSXRlcmF0aW9uc18sIAorICAgICAgICAgICAgICAgICAgICAgICAgKHJlYWRPbmx5U3R1ZGVudHNbaV0sIG51bUl0ZXJhdGlvbnNfLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNsZWVwVGltZUluTWlsbGlzXyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCByZWFkZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGFydGluZyByZWFkZXIgdGhyZWFkICIgKyBpKTsKICAgICAgICAgICAgICAgICByZWFkZXJzW2ldLnN0YXJ0KCk7Ci0gICAgICAgICAgICB9ICAgIAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgd3JpdGVycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnRpbmcgd3JpdGVyIHRocmVhZCAiICsgaSk7CiAgICAgICAgICAgICAgICAgd3JpdGVyc1tpXS5zdGFydCgpOwotICAgICAgICAgICAgfSAgICAgCi0gICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKb2luaW5nIG9uICIgKyByZWFkZXJzLmxlbmd0aCArICIgcmVhZGVycyIpOwogICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHJlYWRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICByZWFkZXJzW2ldLmpvaW4oKTsKQEAgLTQzMiw4ICs0MzIsOCBAQAogICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHdyaXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICB3cml0ZXJzW2ldLmpvaW4oKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAKKworCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiQm1wLVJlYWRPbmx5IFJlYWRlclRocmVhZHMgICIsIHN0YXQuUEFTUyk7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVtb3ZpbmcgYWxsIHN0dWRlbnRzIik7CkBAIC00NDUsMjQgKzQ0NSwyNCBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkJtcC1SZWFkT25seSBSZWFkZXJUaHJlYWRzICAiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gdW5leHBlY3RlZCBleGNlcHRpb24hIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgY2xhc3MgUmVhZGVyVGhyZWFkIGV4dGVuZHMgVGhyZWFkIHsKIAotICAgICAgICBTdHVkZW50IHJlYWRPbmx5U3R1ZGVudF87ICAgICAgICAgICAgICAKKyAgICAgICAgU3R1ZGVudCByZWFkT25seVN0dWRlbnRfOwogICAgICAgICBpbnQgbnVtUmVhZHNfOwogICAgICAgICBsb25nIHNsZWVwVGltZUluTWlsbGlzXzsKLSAgICAgICAgU3RyaW5nIHN0dWRlbnRQS187ICAgICAgICAKKyAgICAgICAgU3RyaW5nIHN0dWRlbnRQS187CiAKLSAgICAgICAgUmVhZGVyVGhyZWFkKFN0dWRlbnQgcmVhZE9ubHlTdHVkZW50LCBpbnQgbnVtUmVhZHMsIAorICAgICAgICBSZWFkZXJUaHJlYWQoU3R1ZGVudCByZWFkT25seVN0dWRlbnQsIGludCBudW1SZWFkcywKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2xlZXBUaW1lSW5NaWxsaXMpIHsKLSAgICAgICAgICAgIHJlYWRPbmx5U3R1ZGVudF8gPSByZWFkT25seVN0dWRlbnQ7ICAgICAgICAgICAKKyAgICAgICAgICAgIHJlYWRPbmx5U3R1ZGVudF8gPSByZWFkT25seVN0dWRlbnQ7CiAgICAgICAgICAgICBudW1SZWFkc18gPSBudW1SZWFkczsKICAgICAgICAgICAgIHNsZWVwVGltZUluTWlsbGlzXyA9IHNsZWVwVGltZUluTWlsbGlzOwogICAgICAgICB9CiAKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAgICAgICAgICAgICBmb3IoIGludCBpID0gMDsgaSA8IG51bVJlYWRzXzsgaSsrKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgaWYoIGkgPT0gMCApIHsKQEAgLTQ4MiwyMCArNDgyLDIwIEBACiAKICAgICBwcml2YXRlIGNsYXNzIFdyaXRlclRocmVhZCBleHRlbmRzIFRocmVhZCB7CiAKLSAgICAgICAgU3R1ZGVudCBtdXRhYmxlU3R1ZGVudF87ICAgICAgICAgICAgICAKKyAgICAgICAgU3R1ZGVudCBtdXRhYmxlU3R1ZGVudF87CiAgICAgICAgIGludCBudW1Xcml0ZXNfOwogICAgICAgICBsb25nIHNsZWVwVGltZUluTWlsbGlzXzsKICAgICAgICAgU3RyaW5nIHN0dWRlbnRQS187CiAKLSAgICAgICAgV3JpdGVyVGhyZWFkKFN0dWRlbnQgbXV0YWJsZVN0dWRlbnQsIGludCBudW1Xcml0ZXMsIAorICAgICAgICBXcml0ZXJUaHJlYWQoU3R1ZGVudCBtdXRhYmxlU3R1ZGVudCwgaW50IG51bVdyaXRlcywKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2xlZXBUaW1lSW5NaWxsaXMpIHsKLSAgICAgICAgICAgIG11dGFibGVTdHVkZW50XyA9IG11dGFibGVTdHVkZW50OyAgICAgICAgICAgCisgICAgICAgICAgICBtdXRhYmxlU3R1ZGVudF8gPSBtdXRhYmxlU3R1ZGVudDsKICAgICAgICAgICAgIG51bVdyaXRlc18gPSBudW1Xcml0ZXM7CiAgICAgICAgICAgICBzbGVlcFRpbWVJbk1pbGxpc18gPSBzbGVlcFRpbWVJbk1pbGxpczsKICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciggaW50IGkgPSAwOyBpIDwgbnVtV3JpdGVzXzsgaSsrKSB7ICAgICAgICAgICAgICAgIAorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICBmb3IoIGludCBpID0gMDsgaSA8IG51bVdyaXRlc187IGkrKykgewogICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgIGlmKCBpID09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHVkZW50UEtfID0gKFN0cmluZykgbXV0YWJsZVN0dWRlbnRfLmdldFByaW1hcnlLZXkoKTsKQEAgLTUxNCw0ICs1MTQsNCBAQAogCiAgICAgfQogCi19IAorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGExOTIxZmEuLjk5MWFkODQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTM2OCw3ICszNjgsNyBAQAogICAgICAgICA8bWV0aG9kLXBhcmFtcyAvPgogICAgICAgPC9tZXRob2Q+CiAKLSAgPCEtLSBtZXRob2RzIGZvciBTdHVkZW50IEVKQiAtLT4gICAgICAKKyAgPCEtLSBtZXRob2RzIGZvciBTdHVkZW50IEVKQiAtLT4KIAogICAgICAgPG1ldGhvZD4KICAgICAgICAgPGVqYi1uYW1lPlJlYWRPbmx5U3R1ZGVudEJlYW48L2VqYi1uYW1lPgpAQCAtOTI5LDYgKzkyOSw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPk5vdFN1cHBvcnRlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9Db3Vyc2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL0NvdXJzZS5qYXZhCmluZGV4IGU3NWVlNjQuLjA1OTAzZmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL0NvdXJzZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL0NvdXJzZS5qYXZhCkBAIC0yMiwyNCArMjIsMjQgQEAKIAogCiBwdWJsaWMgaW50ZXJmYWNlIENvdXJzZSBleHRlbmRzIEVKQk9iamVjdCB7Ci0gCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGFuIGFycmF5bGlzdCBvZiBTdHVkZW50SWRzIHRha2luZyB0aGUgY291cnNlLgotICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uIAorICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCiAgICAgICovCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRTdHVkZW50SWRzKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNvdXJzZS4KLSAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbiAKLSAgICAgKiAKKyAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgorICAgICAqCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIC8qKgogICAgICAqIFNldHMgdGhlIG5hbWUgb2YgdGhlIGNvdXJzZS4KLSAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbiAKLSAgICAgKiAKKyAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgorICAgICAqCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvQ291cnNlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvQ291cnNlQmVhbi5qYXZhCmluZGV4IGY1OWU4NmIuLmM0Njc5MzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL0NvdXJzZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9Db3Vyc2VCZWFuLmphdmEKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgICAgICAgICAgICAgIChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvamRiYy9ibXAtcmVhZG9ubHlEQiIpOwogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0Vucm9sbGVyIik7Ci0gICAgICAgICAgICBlbnJvbGxlckhvbWUgPSAKKyAgICAgICAgICAgIGVucm9sbGVySG9tZSA9CiAgICAgICAgICAgICAgICAgKEVucm9sbGVySG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5yb2xsZXJIb21lLmNsYXNzKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9Db3Vyc2VIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9Db3Vyc2VIb21lLmphdmEKaW5kZXggYTc1ZTJkZi4uODA2MGRkYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvQ291cnNlSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL0NvdXJzZUhvbWUuamF2YQpAQCAtMzAsMTIgKzMwLDEyIEBACiAgICAgICovCiAgICAgcHVibGljIENvdXJzZSBjcmVhdGUoU3RyaW5nIGNvdXJzZUlkLCBTdHJpbmcgbmFtZSkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgcmVtb3RlIGludGVyZmFjZSB0byB0aGUgQ291cnNlQmVhbiBvYmplY3QgYnkgUHJpbWFyeSBLZXkuCiAgICAgICogQGV4Y2VwdGlvbiB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIGFuZCBSZW1vdGVFeGNlcHRpb24uCiAgICAgICoKICAgICAgKi8KLSAgICBwdWJsaWMgQ291cnNlIGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIGNvdXJzZUlkKSAKKyAgICBwdWJsaWMgQ291cnNlIGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIGNvdXJzZUlkKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9FbnJvbGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvRW5yb2xsZXIuamF2YQppbmRleCA0OGYwZmQ0Li5hYWVkZjgyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9FbnJvbGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL0Vucm9sbGVyLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIHB1YmxpYyBpbnRlcmZhY2UgRW5yb2xsZXIgZXh0ZW5kcyBFSkJPYmplY3QgewotIAorCiAgLyoqCiAgICogRW5yb2xscyBhIFN0dWRlbnQgaW4gYSBjb3Vyc2UKICAgKiBAcGFyYW0gc3R1ZGVudElkIHByaW1hcnkga2V5IG9mIHRoZSBzdHVkZW50IG9iamVjdApAQCAtNDAsNyArNDAsNyBAQAogICAgcHVibGljIHZvaWQgdW5FbnJvbGwoU3RyaW5nIHN0dWRlbnRJZCwgU3RyaW5nIGNvdXJzZUlkKQogICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKICAvKioKLSAgKiBEZWxldGVzIGEgU3R1ZGVudCAKKyAgKiBEZWxldGVzIGEgU3R1ZGVudAogICAqIEBwYXJhbSBzdHVkZW50SWQgcHJpbWFyeSBrZXkgb2YgdGhlIHN0dWRlbnQgb2JqZWN0CiAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KICAgKi8KQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAvKioKLSAgKiBEZWxldGVzIGEgQ291cnNlIAorICAqIERlbGV0ZXMgYSBDb3Vyc2UKICAgKiBAcGFyYW0gY291cnNlSWQgcHJpbWFyeSBrZXkgb2YgdGhlIGNvdXJzZSBvYmplY3QKICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgogICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvRW5yb2xsZXJCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9FbnJvbGxlckJlYW4uamF2YQppbmRleCBlMWQ0MWNiLi5iOGQzNzczIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9FbnJvbGxlckJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9FbnJvbGxlckJlYW4uamF2YQpAQCAtMTYsNyArMTYsNyBAQAogCiBwYWNrYWdlIGNvbS5zdW4uczFhc2Rldi5lamIuYm1wLnJlYWRvbmx5LmVqYjsKIAotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLio7CiBpbXBvcnQgamF2YS5zcWwuKjsKIGltcG9ydCBqYXZheC5zcWwuKjsKQEAgLTI2LDcgKzI2LDcgQEAKIGltcG9ydCBqYXZhLmlvLio7CiAKIHB1YmxpYyBjbGFzcyBFbnJvbGxlckJlYW4gaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7Ci0gCisKICAgICBwcml2YXRlIENvbm5lY3Rpb24gY29uOwogICAgIHByaXZhdGUgU3RyaW5nIGRiTmFtZSA9ICJqYXZhOmNvbXAvZW52L2pkYmMvYm1wLXJlYWRvbmx5REIiOwogICAgIHByaXZhdGUgRGF0YVNvdXJjZSBkczsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBEZWxldGVzIGEgU3R1ZGVudCAKKyAgICAgKiBEZWxldGVzIGEgU3R1ZGVudAogICAgICAqIEBwYXJhbSBzdHVkZW50SWQgcHJpbWFyeSBrZXkgb2YgdGhlIHN0dWRlbnQgb2JqZWN0CiAgICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KICAgICAgKi8KQEAgLTc1LDcgKzc1LDcgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBEZWxldGVzIGEgQ291cnNlIAorICAgICAqIERlbGV0ZXMgYSBDb3Vyc2UKICAgICAgKiBAcGFyYW0gY291cnNlSWQgcHJpbWFyeSBrZXkgb2YgdGhlIGNvdXJzZSBvYmplY3QKICAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgogICAgICAqLwpAQCAtMTI3LDExICsxMjcsMTEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7Ci0gICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBjb250ZXh0KSB7CkBAIC0xNDAsMTQgKzE0MCwxNCBAQAogCiAgICAgcHVibGljIEVucm9sbGVyQmVhbigpIHt9CiAKLSAgICAvKioqKioqKioqKioqKioqKioqKioqKiogRGF0YWJhc2UgUm91dGluZXMgKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKiogRGF0YWJhc2UgUm91dGluZXMgKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogICAgIHByaXZhdGUgdm9pZCBpbnNlcnRFbnRyeShTdHJpbmcgc3R1ZGVudElkLCBTdHJpbmcgY291cnNlSWQpCiAgICAgICAgIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgU3RyaW5nIGluc2VydFN0YXRlbWVudCA9CiAgICAgICAgICAgICAiaW5zZXJ0IGludG8gUmVhZE9ubHlFbnJvbGxtZW50IHZhbHVlcyAoID8gLCA/ICkiOwotICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcmVwU3RtdCA9IAorICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcmVwU3RtdCA9CiAgICAgICAgICAgICBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRTdGF0ZW1lbnQpOwogCiAgICAgICAgIHByZXBTdG10LnNldFN0cmluZygxLCBzdHVkZW50SWQpOwpAQCAtMTU4LDcgKzE1OCw3IEBACiAgICAgICAgIGNvbi5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVFbnRyeShTdHJpbmcgc3R1ZGVudElkLCBTdHJpbmcgY291cnNlSWQpIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVFbnRyeShTdHJpbmcgc3R1ZGVudElkLCBTdHJpbmcgY291cnNlSWQpCiAgICAgICAgIHRocm93cyBTUUxFeGNlcHRpb24gewogCiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwpAQCAtMjA3LDE0ICsyMDcsMTQgQEAKICAgICAgICAgY29uLmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBBcnJheUxpc3Qgc2VsZWN0U3R1ZGVudChTdHJpbmcgY291cnNlSWQpIAorICAgIHByaXZhdGUgQXJyYXlMaXN0IHNlbGVjdFN0dWRlbnQoU3RyaW5nIGNvdXJzZUlkKQogICAgICAgICB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKIAogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgU3RyaW5nIHNlbGVjdFN0YXRlbWVudCA9CiAgICAgICAgICAgICAic2VsZWN0IHN0dWRlbnRpZCAiICsKICAgICAgICAgICAgICJmcm9tIFJlYWRPbmx5RW5yb2xsbWVudCB3aGVyZSBjb3Vyc2VpZCA9ID8gIjsKLSAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPSAKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPQogICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoc2VsZWN0U3RhdGVtZW50KTsKIAogICAgICAgICBwcmVwU3RtdC5zZXRTdHJpbmcoMSwgY291cnNlSWQpOwpAQCAtMjMxLDE0ICsyMzEsMTQgQEAKICAgICAgICAgcmV0dXJuIGE7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBBcnJheUxpc3Qgc2VsZWN0Q291cnNlKFN0cmluZyBzdHVkZW50SWQpIAorICAgIHByaXZhdGUgQXJyYXlMaXN0IHNlbGVjdENvdXJzZShTdHJpbmcgc3R1ZGVudElkKQogICAgICAgICB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKIAogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgU3RyaW5nIHNlbGVjdFN0YXRlbWVudCA9CiAgICAgICAgICAgICAic2VsZWN0IGNvdXJzZWlkICIgKwogICAgICAgICAgICAgImZyb20gUmVhZE9ubHlFbnJvbGxtZW50IHdoZXJlIHN0dWRlbnRpZCA9ID8gIjsKLSAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPSAKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPQogICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoc2VsZWN0U3RhdGVtZW50KTsKIAogICAgICAgICBwcmVwU3RtdC5zZXRTdHJpbmcoMSwgc3R1ZGVudElkKTsKQEAgLTI4Myw3ICsyODMsNyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdFJlYWRPbmx5QmVhbkxvY2FsQ3JlYXRlKFN0cmluZyBzdHVkZW50SWQsIFN0cmluZyBuYW1lKSB7CiAgICAgICAgIGJvb2xlYW4gc3RhdHVzID0gZmFsc2U7CiAKQEAgLTI5MywxMyArMjkzLDEzIEBACiAKICAgICAgICAgICAgIHN0dWRlbnRMb2NhbEhvbWUuY3JlYXRlKHN0dWRlbnRJZCwgbmFtZSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yLiAgU2hvdWxkIGhhdmUgZ290dGVuIENyZWF0ZUV4Y2VwdGlvbiBpbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgdGVzdFJlYWRPbmx5QmVhbkxvY2FsQ3JlYXRlIik7ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHRlc3RSZWFkT25seUJlYW5Mb2NhbENyZWF0ZSIpOwogICAgICAgICB9IGNhdGNoKENyZWF0ZUV4Y2VwdGlvbiBjZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgZ290IENyZWF0ZUV4Y2VwdGlvbiB3aGVuICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdHRlbXB0aW5nIHRvIGNyZWF0ZSBhIHJlYWQtb25seSBiZWFuIik7CiAgICAgICAgICAgICBzdGF0dXMgPSB0cnVlOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCB1bmV4cGVjdGVkIGV4Y2VwdGlvbiBpbiAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCB1bmV4cGVjdGVkIGV4Y2VwdGlvbiBpbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdFJlYWRPbmx5QmVhbkxvY2FsQ3JlYXRlIik7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0zMTYsNyArMzE2LDcgQEAKICAgICAgICAgICAgICAgICBjb20uc3VuLmFwcHNlcnYuZWpiLlJlYWRPbmx5QmVhbk5vdGlmaWVyCiAgICAgICAgICAgICAgICAgbm90aWZpZXIgPSBjb20uc3VuLmFwcHNlcnYuZWpiLlJlYWRPbmx5QmVhbkhlbHBlci4KICAgICAgICAgICAgICAgICAgICAgZ2V0UmVhZE9ubHlCZWFuTm90aWZpZXIoImphdmE6Y29tcC9lbnYvZWpiL1N0dWRlbnQiKTsKLSAgICAKKwogICAgICAgICAgICAgICAgIG5vdGlmaWVyLnJlZnJlc2goc3R1ZGVudElkKTsKICAgICAgICAgICAgICAgICBzdGF0dXMgPSB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTMyNCw3ICszMjQsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiKioqKioqKiB0ZXN0UmVhZE9ubHlCZWFuU3R1ZGVudFJlZnJlc2ggKioqKiIpOwotICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7IAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIioqKioqKiogdGVzdFJlYWRPbmx5QmVhblN0dWRlbnRSZWZyZXNoICoqKioiKTsKICAgICAgICAgfQogCkBAIC0zNDEsNyArMzQxLDcgQEAKICAgICAgICAgICAgICAgICBjb20uc3VuLmFwcHNlcnYuZWpiLlJlYWRPbmx5QmVhbkxvY2FsTm90aWZpZXIKICAgICAgICAgICAgICAgICBub3RpZmllciA9IGNvbS5zdW4uYXBwc2Vydi5lamIuUmVhZE9ubHlCZWFuSGVscGVyLgogICAgICAgICAgICAgICAgICAgICBnZXRSZWFkT25seUJlYW5Mb2NhbE5vdGlmaWVyKCJqYXZhOmNvbXAvZW52L2VqYi9TdHVkZW50TG9jYWwiKTsKLSAgICAKKwogICAgICAgICAgICAgICAgIG5vdGlmaWVyLnJlZnJlc2goc3R1ZGVudElkKTsKICAgICAgICAgICAgICAgICBzdGF0dXMgPSB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTM0OSw3ICszNDksNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiKioqKioqKiB0ZXN0UmVhZE9ubHlCZWFuTG9jYWxTdHVkZW50UmVmcmVzaCAqKioqIik7Ci0gICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsgCisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiKioqKioqKiB0ZXN0UmVhZE9ubHlCZWFuTG9jYWxTdHVkZW50UmVmcmVzaCAqKioqIik7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvU3R1ZGVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvU3R1ZGVudC5qYXZhCmluZGV4IDBlNTA4YjIuLmYwYmIyN2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL1N0dWRlbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9TdHVkZW50LmphdmEKQEAgLTIyLDkgKzIyLDkgQEAKIAogCiBwdWJsaWMgaW50ZXJmYWNlIFN0dWRlbnQgZXh0ZW5kcyBFSkJPYmplY3QgewotIAorCiAgIC8qKgotICAgKiBSZXR1cm5zIHRoZSBDb3Vyc2VJZHMgdGhhdCBhIHN0dWRlbnQgaXMgZW5yb2xsZWQgaW4uIAorICAgKiBSZXR1cm5zIHRoZSBDb3Vyc2VJZHMgdGhhdCBhIHN0dWRlbnQgaXMgZW5yb2xsZWQgaW4uCiAgICAqIEBwYXJhbSBzdHVkZW50SWQgcHJpbWFyeSBrZXkgb2YgdGhlIHN0dWRlbnQgb2JqZWN0CiAgICAqIEBwYXJhbSBjb3Vyc2VJZCBwcmltYXJ5IGtleSBvZiB0aGUgY291cnNlIG9iamVjdAogICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvU3R1ZGVudEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRCZWFuLmphdmEKaW5kZXggMjQ1ZDQyNS4uMTIzNDgxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvU3R1ZGVudEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9TdHVkZW50QmVhbi5qYXZhCkBAIC02OSwxMCArNjksMTAgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOb3RpZnlpbmcgcmVhZC1vbmx5IGJlYW4gb2YgdXBkYXRlIHRvICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC1tb3N0bHkgU3R1ZGVudCAiICsgbmFtZSk7Ci0gICAgICAgICAgICAgICAgUmVhZE9ubHlCZWFuTm90aWZpZXIgc3R1ZGVudE5vdGlmaWVyID0gCisgICAgICAgICAgICAgICAgUmVhZE9ubHlCZWFuTm90aWZpZXIgc3R1ZGVudE5vdGlmaWVyID0KICAgICAgICAgICAgICAgICAgICAgUmVhZE9ubHlCZWFuSGVscGVyLmdldFJlYWRPbmx5QmVhbk5vdGlmaWVyCiAgICAgICAgICAgICAgICAgICAgICgiamF2YTpjb21wL2Vudi9lamIvUmVhZE9ubHlTdHVkZW50Iik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgcmVhZC1vbmx5IHZlcnNpb24KICAgICAgICAgICAgICAgICBzdHVkZW50Tm90aWZpZXIucmVmcmVzaChzdHVkZW50SWQpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpAQCAtMTIzLDcgKzEyMyw3IEBACiAgICAgICAgIGNvdXJzZUlkcyA9IG5ldyBBcnJheUxpc3QoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICBkYXRhU291cmNlID0gCisgICAgICAgICAgICBkYXRhU291cmNlID0KICAgICAgICAgICAgICAgICAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2pkYmMvYm1wLXJlYWRvbmx5REIiKTsKICAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9FbnJvbGxlciIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvU3R1ZGVudEhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRIb21lLmphdmEKaW5kZXggNWI4YzQ5OC4uY2RhOTdlYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvU3R1ZGVudEhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9TdHVkZW50SG9tZS5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICogQGV4Y2VwdGlvbiB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIGFuZCBSZW1vdGVFeGNlcHRpb24uCiAgICAgICoKICAgICAgKi8KLSAKLSAgICBwdWJsaWMgU3R1ZGVudCBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBzdHVkZW50SWQpIAorCisgICAgcHVibGljIFN0dWRlbnQgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgc3R1ZGVudElkKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9TdHVkZW50TG9jYWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRMb2NhbC5qYXZhCmluZGV4IDdkMmZkMjguLmQwNTcwM2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRMb2NhbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRMb2NhbC5qYXZhCkBAIC0yMCwxMiArMjAsMTIgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJMb2NhbE9iamVjdDsKIAogcHVibGljIGludGVyZmFjZSBTdHVkZW50TG9jYWwgZXh0ZW5kcyBFSkJMb2NhbE9iamVjdCB7Ci0gCisKICAgLyoqCi0gICAqIFJldHVybnMgdGhlIENvdXJzZUlkcyB0aGF0IGEgc3R1ZGVudCBpcyBlbnJvbGxlZCBpbi4gCisgICAqIFJldHVybnMgdGhlIENvdXJzZUlkcyB0aGF0IGEgc3R1ZGVudCBpcyBlbnJvbGxlZCBpbi4KICAgICogQHBhcmFtIHN0dWRlbnRJZCBwcmltYXJ5IGtleSBvZiB0aGUgc3R1ZGVudCBvYmplY3QKICAgICogQHBhcmFtIGNvdXJzZUlkIHByaW1hcnkga2V5IG9mIHRoZSBjb3Vyc2Ugb2JqZWN0Ci0gICAqIAorICAgKgogICAgKi8KICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0Q291cnNlSWRzKCk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRMb2NhbEhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRMb2NhbEhvbWUuamF2YQppbmRleCBjNzk1ODhmLi43ZmNhNWMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9TdHVkZW50TG9jYWxIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvU3R1ZGVudExvY2FsSG9tZS5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICogQGV4Y2VwdGlvbiB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLgogICAgICAqCiAgICAgICovCi0gCi0gICAgcHVibGljIFN0dWRlbnQgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgc3R1ZGVudElkKSAKKworICAgIHB1YmxpYyBTdHVkZW50IGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHN0dWRlbnRJZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZjdhZjVjOC4uN2VlOWZjZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNDUgKzEsNDUgQEAKLWNyZWF0ZSB0YWJsZSBSZWFkT25seVN0dWRlbnQgDQotKHN0dWRlbnRpZCB2YXJjaGFyKDE1KSBjb25zdHJhaW50IHBrX1JlYWRPbmx5c3R1ZGVudCBwcmltYXJ5IGtleSBub3QgbnVsbCwgIA0KLW5hbWUgdmFyY2hhcigzNikpOw0KLQ0KLWluc2VydCBpbnRvIFJlYWRPbmx5U3R1ZGVudA0KLXZhbHVlcyAoJ3N0dWRlbnQwJywgJ1N0dWRlbnRfSURfMCcpOw0KLWluc2VydCBpbnRvIFJlYWRPbmx5U3R1ZGVudA0KLXZhbHVlcyAoJ3N0dWRlbnQxJywgJ1N0dWRlbnRfSURfMScpOw0KLWluc2VydCBpbnRvIFJlYWRPbmx5U3R1ZGVudA0KLXZhbHVlcyAoJ3N0dWRlbnQyJywgJ1N0dWRlbnRfSURfMicpOw0KLWluc2VydCBpbnRvIFJlYWRPbmx5U3R1ZGVudA0KLXZhbHVlcyAoJ3N0dWRlbnQzJywgJ1N0dWRlbnRfSURfMycpOw0KLWluc2VydCBpbnRvIFJlYWRPbmx5U3R1ZGVudA0KLXZhbHVlcyAoJ3N0dWRlbnQ0JywgJ1N0dWRlbnRfSURfNCcpOw0KLWluc2VydCBpbnRvIFJlYWRPbmx5U3R1ZGVudA0KLXZhbHVlcyAoJ3N0dWRlbnQ1JywgJ1N0dWRlbnRfSURfNScpOw0KLQ0KLQ0KLWNyZWF0ZSB0YWJsZSBSZWFkT25seUNvdXJzZSANCi0oY291cnNlaWQgdmFyY2hhcigxNSkgY29uc3RyYWludCBwa19SZWFkT25seWNvdXJzZSBwcmltYXJ5IGtleSBub3QgbnVsbCwgIA0KLW5hbWUgdmFyY2hhcigzNikpOw0KLQ0KLWluc2VydCBpbnRvIFJlYWRPbmx5Q291cnNlDQotdmFsdWVzICgnY291cnNlMCcsICdDb3Vyc2VfSURfMCcpOw0KLWluc2VydCBpbnRvIFJlYWRPbmx5Q291cnNlDQotdmFsdWVzICgnY291cnNlMScsICdDb3Vyc2VfSURfMScpOw0KLWluc2VydCBpbnRvIFJlYWRPbmx5Q291cnNlDQotdmFsdWVzICgnY291cnNlMicsICdDb3Vyc2VfSURfMicpOw0KLWluc2VydCBpbnRvIFJlYWRPbmx5Q291cnNlDQotdmFsdWVzICgnY291cnNlMycsICdDb3Vyc2VfSURfMycpOw0KLWluc2VydCBpbnRvIFJlYWRPbmx5Q291cnNlDQotdmFsdWVzICgnY291cnNlNCcsICdDb3Vyc2VfSURfNCcpOw0KLWluc2VydCBpbnRvIFJlYWRPbmx5Q291cnNlDQotdmFsdWVzICgnY291cnNlNScsICdDb3Vyc2VfSURfNScpOw0KLQ0KLWNyZWF0ZSB0YWJsZSBSZWFkT25seUVucm9sbG1lbnQNCi0oc3R1ZGVudGlkIHZhcmNoYXIoMTUpLCAgDQotY291cnNlaWQgdmFyY2hhcigxNSksICANCi1jb25zdHJhaW50IGZrX3N0dWRlbnRpZA0KLWZvcmVpZ24ga2V5IChzdHVkZW50aWQpDQotcmVmZXJlbmNlcyBSZWFkT25seXN0dWRlbnQoc3R1ZGVudGlkKSwNCi1jb25zdHJhaW50IGZrX2NvdXJzZWlkDQotZm9yZWlnbiBrZXkgKGNvdXJzZWlkKQ0KLXJlZmVyZW5jZXMgUmVhZE9ubHljb3Vyc2UoY291cnNlaWQpKTsNCi0NCitjcmVhdGUgdGFibGUgUmVhZE9ubHlTdHVkZW50Cisoc3R1ZGVudGlkIHZhcmNoYXIoMTUpIGNvbnN0cmFpbnQgcGtfUmVhZE9ubHlzdHVkZW50IHByaW1hcnkga2V5IG5vdCBudWxsLAorbmFtZSB2YXJjaGFyKDM2KSk7CisKK2luc2VydCBpbnRvIFJlYWRPbmx5U3R1ZGVudAordmFsdWVzICgnc3R1ZGVudDAnLCAnU3R1ZGVudF9JRF8wJyk7CitpbnNlcnQgaW50byBSZWFkT25seVN0dWRlbnQKK3ZhbHVlcyAoJ3N0dWRlbnQxJywgJ1N0dWRlbnRfSURfMScpOworaW5zZXJ0IGludG8gUmVhZE9ubHlTdHVkZW50Cit2YWx1ZXMgKCdzdHVkZW50MicsICdTdHVkZW50X0lEXzInKTsKK2luc2VydCBpbnRvIFJlYWRPbmx5U3R1ZGVudAordmFsdWVzICgnc3R1ZGVudDMnLCAnU3R1ZGVudF9JRF8zJyk7CitpbnNlcnQgaW50byBSZWFkT25seVN0dWRlbnQKK3ZhbHVlcyAoJ3N0dWRlbnQ0JywgJ1N0dWRlbnRfSURfNCcpOworaW5zZXJ0IGludG8gUmVhZE9ubHlTdHVkZW50Cit2YWx1ZXMgKCdzdHVkZW50NScsICdTdHVkZW50X0lEXzUnKTsKKworCitjcmVhdGUgdGFibGUgUmVhZE9ubHlDb3Vyc2UKKyhjb3Vyc2VpZCB2YXJjaGFyKDE1KSBjb25zdHJhaW50IHBrX1JlYWRPbmx5Y291cnNlIHByaW1hcnkga2V5IG5vdCBudWxsLAorbmFtZSB2YXJjaGFyKDM2KSk7CisKK2luc2VydCBpbnRvIFJlYWRPbmx5Q291cnNlCit2YWx1ZXMgKCdjb3Vyc2UwJywgJ0NvdXJzZV9JRF8wJyk7CitpbnNlcnQgaW50byBSZWFkT25seUNvdXJzZQordmFsdWVzICgnY291cnNlMScsICdDb3Vyc2VfSURfMScpOworaW5zZXJ0IGludG8gUmVhZE9ubHlDb3Vyc2UKK3ZhbHVlcyAoJ2NvdXJzZTInLCAnQ291cnNlX0lEXzInKTsKK2luc2VydCBpbnRvIFJlYWRPbmx5Q291cnNlCit2YWx1ZXMgKCdjb3Vyc2UzJywgJ0NvdXJzZV9JRF8zJyk7CitpbnNlcnQgaW50byBSZWFkT25seUNvdXJzZQordmFsdWVzICgnY291cnNlNCcsICdDb3Vyc2VfSURfNCcpOworaW5zZXJ0IGludG8gUmVhZE9ubHlDb3Vyc2UKK3ZhbHVlcyAoJ2NvdXJzZTUnLCAnQ291cnNlX0lEXzUnKTsKKworY3JlYXRlIHRhYmxlIFJlYWRPbmx5RW5yb2xsbWVudAorKHN0dWRlbnRpZCB2YXJjaGFyKDE1KSwKK2NvdXJzZWlkIHZhcmNoYXIoMTUpLAorY29uc3RyYWludCBma19zdHVkZW50aWQKK2ZvcmVpZ24ga2V5IChzdHVkZW50aWQpCityZWZlcmVuY2VzIFJlYWRPbmx5c3R1ZGVudChzdHVkZW50aWQpLAorY29uc3RyYWludCBma19jb3Vyc2VpZAorZm9yZWlnbiBrZXkgKGNvdXJzZWlkKQorcmVmZXJlbmNlcyBSZWFkT25seWNvdXJzZShjb3Vyc2VpZCkpOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNmIwYTZlNC4uODA2NzQ5MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSwzICsxLDMgQEAKLWRyb3AgdGFibGUgUmVhZE9ubHlFbnJvbGxtZW50Ow0KLWRyb3AgdGFibGUgUmVhZE9ubHlTdHVkZW50Ow0KLWRyb3AgdGFibGUgUmVhZE9ubHlDb3Vyc2U7DQorZHJvcCB0YWJsZSBSZWFkT25seUVucm9sbG1lbnQ7Citkcm9wIHRhYmxlIFJlYWRPbmx5U3R1ZGVudDsKK2Ryb3AgdGFibGUgUmVhZE9ubHlDb3Vyc2U7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGUvYnVpbGQucHJvcGVydGllcwppbmRleCAzZmViMzc5Li45NjY4MDY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE4ICsxNSwxOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcC1zaW1wbGUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlL2J1aWxkLnhtbAppbmRleCBhNzhmYTQwLi45M2EyNGJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwzNCArNDgsMzQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1NpbXBsZUJNUC5jbGFzcywgKiovU2ltcGxlQk1QSG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZS9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZS9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKaW5kZXggNWYwNzQ5ZS4uZTRiZGNhNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGUvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQpAQCAtMzUsMTkgKzM1LDE5IEBACiAgICAgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGVzdGluZyBibXAgc2ltcGxlIGFwcC4iKTsKLQkgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpSZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUJNUEhvbWUiKTsKLQkgICAgU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCisgICAgICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQogICAgICAgICAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpbnQgaWQ9IChpbnQpIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXJ0aW5nIHRlc3QgZm9yIGlkOiAiICsgaWQpOwotCSAgICBTaW1wbGVCTVAgc2ltcGxlQk1QID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoaWQpOwotCSAgICBzaW1wbGVCTVAuZm9vKCk7Ci0gICAgICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGFydGluZyB0ZXN0IGZvciBpZDogIiArIGlkKTsKKyAgICAgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKGlkKTsKKyAgICAgICAgc2ltcGxlQk1QLmZvbygpOworCiAgICAgICAgICAgICBTaW1wbGVCTVAgYmVhbiA9IHNpbXBsZUJNUEhvbWUuZmluZEJ5UHJpbWFyeUtleShuZXcgSW50ZWdlcihpZCkpOwotCSAgICBzaW1wbGVCTVAuZm9vKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9uZSBmb3IgaWQ6ICIgKyBpZCk7CisgICAgICAgIHNpbXBsZUJNUC5mb28oKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb25lIGZvciBpZDogIiArIGlkKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJibXAgc2ltcGxlIiwgc3RhdC5QQVNTKTsKIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGUvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBmYWU0ZTg0Li5jZmUwZDY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTU1LDYgKzU1LDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGUvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggYjVlYjI2ZC4uZTYxOWJjOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGUvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC0zMSwxNDggKzMxLDE0OCBAQAogICAgIGludCBpZDsKIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBlbnRpdHlDb250ZXh0KSB7Ci0JQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKLQl0cnkgewotCSAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQl9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOwotCX0KKyAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOworICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7CisgICAgfQogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqU2ltcGxlQk1QQmVhbioqXSBEb25lIHdpdGggc2V0RW50aXR5Q29udGV4dC4uLi4iKTsKICAgICB9CiAKICAgICBwdWJsaWMgSW50ZWdlciBlamJDcmVhdGUoaW50IGkpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogCi0JQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQl0cnkgewotCSAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAotCQkiSU5TRVJUIElOVE8gT19jdXN0b21lciAoY19pZCwgY19waG9uZSkgVkFMVUVTICg/LD8pIik7Ci0JICAgIHBzLnNldEludCgxLCBpKTsKLQkgICAgcHMuc2V0U3RyaW5nKDIsICI1NTAtMTIxMiIpOwotCSAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCi0JCXRocm93IG5ldyBDcmVhdGVFeGNlcHRpb24oIkRpZG50IGNyZWF0ZSBlamIiKTsKKyAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICJJTlNFUlQgSU5UTyBPX2N1c3RvbWVyIChjX2lkLCBjX3Bob25lKSBWQUxVRVMgKD8sPykiKTsKKyAgICAgICAgcHMuc2V0SW50KDEsIGkpOworICAgICAgICBwcy5zZXRTdHJpbmcoMiwgIjU1MC0xMjEyIik7CisgICAgICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKKyAgICAgICAgdGhyb3cgbmV3IENyZWF0ZUV4Y2VwdGlvbigiRGlkbnQgY3JlYXRlIGVqYiIpOwogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqU2ltcGxlQk1QQmVhbioqXSBEb25lIHdpdGggZWpiQ3JlYXRlLi4uLiIpOwotCX0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewotCSAgICB0aHJvdyBuZXcgQ3JlYXRlRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQl9IGZpbmFsbHkgeyAKLQkgICAgdHJ5IHsKLQkJaWYgKHBzICE9IG51bGwpCi0JCSAgICBwcy5jbG9zZSgpOwotCQlpZiAoYyAhPSBudWxsKQotCQkgICAgYy5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQl9Ci0JaWQgPSBpOwotCXJldHVybiBuZXcgSW50ZWdlcihpKTsKKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IENyZWF0ZUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CisgICAgaWQgPSBpOworICAgIHJldHVybiBuZXcgSW50ZWdlcihpKTsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBpc1NlcnZpY2VkQnkoU3RyaW5nIHRocmVhZFBvb2xJRCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsqKlNpbXBsZUJNUEJlYW4qKl0gIgotCSAgICArICIuIFJlcXVlc3Qgc2VydmljZWQgYnk6IiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOworICAgICAgICArICIuIFJlcXVlc3Qgc2VydmljZWQgYnk6IiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOwogICAgICAgICBTdHJpbmcgdGhyZWFkSUQgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTsKLQlyZXR1cm4gKHRocmVhZElELmluZGV4T2YodGhyZWFkUG9vbElELnRvTG93ZXJDYXNlKCkpICE9IC0xKTsKKyAgICByZXR1cm4gKHRocmVhZElELmluZGV4T2YodGhyZWFkUG9vbElELnRvTG93ZXJDYXNlKCkpICE9IC0xKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBmb28oKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqU2ltcGxlQk1QQmVhbioqXSBbIgotCSAgICArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkgKyAiXSBEb25lIHdpdGggZm9vLi4uLiIpOworICAgICAgICArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkgKyAiXSBEb25lIHdpdGggZm9vLi4uLiIpOwogICAgIH0KIAogICAgIHB1YmxpYyBJbnRlZ2VyIGVqYkZpbmRCeVByaW1hcnlLZXkoSW50ZWdlciBrZXkpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewotCUNvbm5lY3Rpb24gYyA9IG51bGw7Ci0gICAgIAlQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKLQkJIlNFTEVDVCBjX3Bob25lIGZyb20gT19jdXN0b21lciB3aGVyZSBjX2lkID0gPyIpOwotCSAgICBwcy5zZXRJbnQoMSwga2V5LmludFZhbHVlKCkpOwotCSAgICBSZXN1bHRTZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTsKLQkgICAgaWYgKCFycy5uZXh0KCkpCi0JICAgICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIk5vIGN1c3QgZm9yICIgKyBpZCk7Ci0JICAgIFN0cmluZyBwaG9uZSA9IHJzLmdldFN0cmluZygxKTsKLQkgICAgcmV0dXJuIGtleTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgdGhyb3cgbmV3IEZpbmRlckV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JfSBmaW5hbGx5IHsgCi0JICAgIHRyeSB7Ci0JCWlmIChwcyAhPSBudWxsKQotCQkgICAgcHMuY2xvc2UoKTsKLQkJaWYgKGMgIT0gbnVsbCkKLQkJICAgIGMuY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JfQorICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgIlNFTEVDVCBjX3Bob25lIGZyb20gT19jdXN0b21lciB3aGVyZSBjX2lkID0gPyIpOworICAgICAgICBwcy5zZXRJbnQoMSwga2V5LmludFZhbHVlKCkpOworICAgICAgICBSZXN1bHRTZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTsKKyAgICAgICAgaWYgKCFycy5uZXh0KCkpCisgICAgICAgICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIk5vIGN1c3QgZm9yICIgKyBpZCk7CisgICAgICAgIFN0cmluZyBwaG9uZSA9IHJzLmdldFN0cmluZygxKTsKKyAgICAgICAgcmV0dXJuIGtleTsKKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IEZpbmRlckV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKLQlDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCXRyeSB7Ci0JICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSJTRUxFQ1QgY19waG9uZSBmcm9tIE9fY3VzdG9tZXIgd2hlcmUgY19pZCA9ID8iKTsKLQkgICAgcHMuc2V0SW50KDEsIGlkKTsKLQkgICAgUmVzdWx0U2V0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7Ci0JICAgIGlmICghcnMubmV4dCgpKQotCSAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJObyBjdXN0IGZvciAiICsgaWQpOwotCSAgICBTdHJpbmcgcGhvbmUgPSBycy5nZXRTdHJpbmcoMSk7Ci0JfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCX0gZmluYWxseSB7IAotCSAgICB0cnkgewotCQlpZiAocHMgIT0gbnVsbCkKLQkJICAgIHBzLmNsb3NlKCk7Ci0JCWlmIChjICE9IG51bGwpCi0JCSAgICBjLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCX0KKyAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICJTRUxFQ1QgY19waG9uZSBmcm9tIE9fY3VzdG9tZXIgd2hlcmUgY19pZCA9ID8iKTsKKyAgICAgICAgcHMuc2V0SW50KDEsIGlkKTsKKyAgICAgICAgUmVzdWx0U2V0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7CisgICAgICAgIGlmICghcnMubmV4dCgpKQorICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJObyBjdXN0IGZvciAiICsgaWQpOworICAgICAgICBTdHJpbmcgcGhvbmUgPSBycy5nZXRTdHJpbmcoMSk7CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewotCUNvbm5lY3Rpb24gYyA9IG51bGw7Ci0gICAgIAlQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKLQkJIlVQREFURSBPX2N1c3RvbWVyIFNFVCBjX3Bob25lID0gPyBXSEVSRSBjX2lkID0gPyIpOwotCSAgICBwcy5zZXRTdHJpbmcoMSwgIjU1MC0xMjEyIik7Ci0JICAgIHBzLnNldEludCgyLCBpZCk7Ci0JICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkbnQgc3RvcmUgZWpiIik7CisgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiVVBEQVRFIE9fY3VzdG9tZXIgU0VUIGNfcGhvbmUgPSA/IFdIRVJFIGNfaWQgPSA/Iik7CisgICAgICAgIHBzLnNldFN0cmluZygxLCAiNTUwLTEyMTIiKTsKKyAgICAgICAgcHMuc2V0SW50KDIsIGlkKTsKKyAgICAgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQorICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJEaWRudCBzdG9yZSBlamIiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbKipTaW1wbGVCTVBCZWFuKipdIERvbmUgd2l0aCBlamJTdG9yZS4uLi4iKTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JfSBmaW5hbGx5IHsgCi0JICAgIHRyeSB7Ci0JCWlmIChwcyAhPSBudWxsKQotCQkgICAgcHMuY2xvc2UoKTsKLQkJaWYgKGMgIT0gbnVsbCkKLQkJICAgIGMuY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JfQorICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgIGlmIChjICE9IG51bGwpCisgICAgICAgICAgICBjLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3ZlRXhjZXB0aW9uIHsKLQlDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCXRyeSB7Ci0JICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSJERUxFVEUgRlJPTSBPX2N1c3RvbWVyIFdIRVJFIGNfaWQgPSA/Iik7Ci0JICAgIHBzLnNldEludCgxLCBpZCk7Ci0JICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKLQkJdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiRGlkbnQgcmVtb3ZlIGVqYiIpOwotCX0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewotCSAgICB0aHJvdyBuZXcgUmVtb3ZlRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQl9IGZpbmFsbHkgeyAKLQkgICAgdHJ5IHsKLQkJaWYgKHBzICE9IG51bGwpCi0JCSAgICBwcy5jbG9zZSgpOwotCQlpZiAoYyAhPSBudWxsKQotCQkgICAgYy5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQl9CisgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiREVMRVRFIEZST00gT19jdXN0b21lciBXSEVSRSBjX2lkID0gPyIpOworICAgICAgICBwcy5zZXRJbnQoMSwgaWQpOworICAgICAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCisgICAgICAgIHRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIkRpZG50IHJlbW92ZSBlamIiKTsKKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGU0OTE0ZjYuLmYyNTYwNzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDcwZDFmY2MuLmQ4NTRiOTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGUvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlX25vcGFja2FnZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGVfbm9wYWNrYWdlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWNmM2M3Ni4uY2M5MDI0OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGVfbm9wYWNrYWdlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGVfbm9wYWNrYWdlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE4ICsxNSwxOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcC1zaW1wbGVfbm9wYWNrYWdlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZV9ub3BhY2thZ2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGVfbm9wYWNrYWdlL2J1aWxkLnhtbAppbmRleCA1OWFhYmI5Li4wNWJjOTMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZV9ub3BhY2thZ2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlX25vcGFja2FnZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovVGVzdC5jbGFzcywgKiovVGVzdEhvbWUuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtNjgsMjEgKzY4LDIxIEBACiAgICAgICAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlX25vcGFja2FnZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGVfbm9wYWNrYWdlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggNThiMzRhZS4uMTYxZTM4MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGVfbm9wYWNrYWdlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGVfbm9wYWNrYWdlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTIwLDI4ICsyMCwyOCBAQAogCiA8ZWpiLWphcj4KICAgICA8ZW50ZXJwcmlzZS1iZWFucz4KLQk8ZW50aXR5PgotCSAgPGVqYi1uYW1lPlRlc3Q8L2VqYi1uYW1lPgotCSAgPGhvbWU+VGVzdEhvbWU8L2hvbWU+Ci0JICA8cmVtb3RlPlRlc3Q8L3JlbW90ZT4KLQkgIDxlamItY2xhc3M+VGVzdEJNUDwvZWpiLWNsYXNzPgotCSAgPHBlcnNpc3RlbmNlLXR5cGU+QmVhbjwvcGVyc2lzdGVuY2UtdHlwZT4KLQkgIDxwcmltLWtleS1jbGFzcz5qYXZhLmxhbmcuSW50ZWdlcjwvcHJpbS1rZXktY2xhc3M+Ci0JICA8cmVlbnRyYW50PkZhbHNlPC9yZWVudHJhbnQ+Ci0JICA8cmVzb3VyY2UtcmVmPgotCSAgICA8cmVzLXJlZi1uYW1lPkRhdGFTb3VyY2U8L3Jlcy1yZWYtbmFtZT4KLQkgICAgPHJlcy10eXBlPmphdmF4LnNxbC5EYXRhU291cmNlPC9yZXMtdHlwZT4KLQkgICAgPHJlcy1hdXRoPkNvbnRhaW5lcjwvcmVzLWF1dGg+Ci0JICA8L3Jlc291cmNlLXJlZj4KLQk8L2VudGl0eT4KKyAgICA8ZW50aXR5PgorICAgICAgPGVqYi1uYW1lPlRlc3Q8L2VqYi1uYW1lPgorICAgICAgPGhvbWU+VGVzdEhvbWU8L2hvbWU+CisgICAgICA8cmVtb3RlPlRlc3Q8L3JlbW90ZT4KKyAgICAgIDxlamItY2xhc3M+VGVzdEJNUDwvZWpiLWNsYXNzPgorICAgICAgPHBlcnNpc3RlbmNlLXR5cGU+QmVhbjwvcGVyc2lzdGVuY2UtdHlwZT4KKyAgICAgIDxwcmltLWtleS1jbGFzcz5qYXZhLmxhbmcuSW50ZWdlcjwvcHJpbS1rZXktY2xhc3M+CisgICAgICA8cmVlbnRyYW50PkZhbHNlPC9yZWVudHJhbnQ+CisgICAgICA8cmVzb3VyY2UtcmVmPgorICAgICAgICA8cmVzLXJlZi1uYW1lPkRhdGFTb3VyY2U8L3Jlcy1yZWYtbmFtZT4KKyAgICAgICAgPHJlcy10eXBlPmphdmF4LnNxbC5EYXRhU291cmNlPC9yZXMtdHlwZT4KKyAgICAgICAgPHJlcy1hdXRoPkNvbnRhaW5lcjwvcmVzLWF1dGg+CisgICAgICA8L3Jlc291cmNlLXJlZj4KKyAgICA8L2VudGl0eT4KICAgICA8L2VudGVycHJpc2UtYmVhbnM+CiAgICAgPGFzc2VtYmx5LWRlc2NyaXB0b3I+CiAgICAgICA8Y29udGFpbmVyLXRyYW5zYWN0aW9uPgotCTxtZXRob2Q+Ci0JICA8ZWpiLW5hbWU+VGVzdDwvZWpiLW5hbWU+Ci0JICA8bWV0aG9kLW5hbWU+KjwvbWV0aG9kLW5hbWU+Ci0JPC9tZXRob2Q+Ci0JPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgorICAgIDxtZXRob2Q+CisgICAgICA8ZWpiLW5hbWU+VGVzdDwvZWpiLW5hbWU+CisgICAgICA8bWV0aG9kLW5hbWU+KjwvbWV0aG9kLW5hbWU+CisgICAgPC9tZXRob2Q+CisgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgogPC9lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGVfbm9wYWNrYWdlL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGVfbm9wYWNrYWdlL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDNmNzRlNGMuLjc2ZTU3ZTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlX25vcGFja2FnZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZV9ub3BhY2thZ2UvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI0LDggKzI0LDggQEAKICAgICAgIDxlamItbmFtZT5UZXN0PC9lamItbmFtZT4KICAgICAgIDxqbmRpLW5hbWU+ZWpiL1Rlc3Q8L2puZGktbmFtZT4KICAgICAgIDxyZXNvdXJjZS1yZWY+Ci0JPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5qZGJjL19fZGVmYXVsdDwvam5kaS1uYW1lPgorICAgIDxyZXMtcmVmLW5hbWU+RGF0YVNvdXJjZTwvcmVzLXJlZi1uYW1lPgorICAgIDxqbmRpLW5hbWU+amRiYy9fX2RlZmF1bHQ8L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHBhc3MtYnktcmVmZXJlbmNlPmZhbHNlPC9wYXNzLWJ5LXJlZmVyZW5jZT4KICAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZV9ub3BhY2thZ2UvZWpiL1Rlc3RCTVAuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlX25vcGFja2FnZS9lamIvVGVzdEJNUC5qYXZhCmluZGV4IDAyOWE1OWIuLmMyZjQ5ODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlX25vcGFja2FnZS9lamIvVGVzdEJNUC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlX25vcGFja2FnZS9lamIvVGVzdEJNUC5qYXZhCkBAIC0yNyw0MCArMjcsNDAgQEAKICAgICBpbnQgaWQ7CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgZW50aXR5Q29udGV4dCkgewotCUNvbnRleHQgY29udGV4dCA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7Ci0JfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKLQl9CisgICAgQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKKyAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgSW50ZWdlciBlamJDcmVhdGUoaW50IGkpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogCi0JQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQl0cnkgewotCSAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAotCQkiSU5TRVJUIElOVE8gT19jdXN0b21lciAoY19pZCwgY19waG9uZSkgVkFMVUVTICg/LD8pIik7Ci0JICAgIHBzLnNldEludCgxLCBpKTsKLQkgICAgcHMuc2V0U3RyaW5nKDIsICI1NTAtMTIxMiIpOwotCSAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCi0JCXRocm93IG5ldyBDcmVhdGVFeGNlcHRpb24oIkRpZG50IGNyZWF0ZSBlamIiKTsKKyAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICJJTlNFUlQgSU5UTyBPX2N1c3RvbWVyIChjX2lkLCBjX3Bob25lKSBWQUxVRVMgKD8sPykiKTsKKyAgICAgICAgcHMuc2V0SW50KDEsIGkpOworICAgICAgICBwcy5zZXRTdHJpbmcoMiwgIjU1MC0xMjEyIik7CisgICAgICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKKyAgICAgICAgdGhyb3cgbmV3IENyZWF0ZUV4Y2VwdGlvbigiRGlkbnQgY3JlYXRlIGVqYiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltUZXN0Qk1QXSBEb25lIGVqYkNyZWF0ZSgpLi4uLiIpOwotCX0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewotCSAgICB0aHJvdyBuZXcgQ3JlYXRlRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQl9IGZpbmFsbHkgeyAKLQkgICAgdHJ5IHsKLQkJaWYgKHBzICE9IG51bGwpCi0JCSAgICBwcy5jbG9zZSgpOwotCQlpZiAoYyAhPSBudWxsKQotCQkgICAgYy5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQl9Ci0JaWQgPSBpOwotCXJldHVybiBuZXcgSW50ZWdlcihpKTsKKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IENyZWF0ZUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CisgICAgaWQgPSBpOworICAgIHJldHVybiBuZXcgSW50ZWdlcihpKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBmb28oKSB7CkBAIC02OCwxMDAgKzY4LDEwMCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBJbnRlZ2VyIGVqYkZpbmRCeVByaW1hcnlLZXkoaW50IGkpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewotCUNvbm5lY3Rpb24gYyA9IG51bGw7Ci0gICAgIAlQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKLQkJIlNFTEVDVCBjX3Bob25lIGZyb20gT19jdXN0b21lciB3aGVyZSBjX2lkID0gPyIpOwotCSAgICBwcy5zZXRJbnQoMSwgaSk7Ci0JICAgIFJlc3VsdFNldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpOwotCSAgICBpZiAoIXJzLm5leHQoKSkKLQkgICAgICAgdGhyb3cgbmV3IEZpbmRlckV4Y2VwdGlvbigiTm8gY3VzdCBmb3IgIiArIGlkKTsKLQkgICAgU3RyaW5nIHBob25lID0gcnMuZ2V0U3RyaW5nKDEpOworICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgIlNFTEVDVCBjX3Bob25lIGZyb20gT19jdXN0b21lciB3aGVyZSBjX2lkID0gPyIpOworICAgICAgICBwcy5zZXRJbnQoMSwgaSk7CisgICAgICAgIFJlc3VsdFNldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpOworICAgICAgICBpZiAoIXJzLm5leHQoKSkKKyAgICAgICAgICAgdGhyb3cgbmV3IEZpbmRlckV4Y2VwdGlvbigiTm8gY3VzdCBmb3IgIiArIGlkKTsKKyAgICAgICAgU3RyaW5nIHBob25lID0gcnMuZ2V0U3RyaW5nKDEpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltUZXN0Qk1QXSBEb25lIGVqYkZpbmRCeVByaW1hcnlLZXkoKS4uLi4iKTsKLQkgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKGkpOwotCX0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewotCSAgICB0aHJvdyBuZXcgRmluZGVyRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQl9IGZpbmFsbHkgeyAKLQkgICAgdHJ5IHsKLQkJaWYgKHBzICE9IG51bGwpCi0JCSAgICBwcy5jbG9zZSgpOwotCQlpZiAoYyAhPSBudWxsKQotCQkgICAgYy5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQl9CisgICAgICAgIHJldHVybiBuZXcgSW50ZWdlcihpKTsKKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IEZpbmRlckV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKLQlDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCXRyeSB7Ci0JICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSJTRUxFQ1QgY19waG9uZSBmcm9tIE9fY3VzdG9tZXIgd2hlcmUgY19pZCA9ID8iKTsKLQkgICAgcHMuc2V0SW50KDEsIGlkKTsKLQkgICAgUmVzdWx0U2V0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7Ci0JICAgIGlmICghcnMubmV4dCgpKQotCSAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJObyBjdXN0IGZvciAiICsgaWQpOwotCSAgICBTdHJpbmcgcGhvbmUgPSBycy5nZXRTdHJpbmcoMSk7CisgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiU0VMRUNUIGNfcGhvbmUgZnJvbSBPX2N1c3RvbWVyIHdoZXJlIGNfaWQgPSA/Iik7CisgICAgICAgIHBzLnNldEludCgxLCBpZCk7CisgICAgICAgIFJlc3VsdFNldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpOworICAgICAgICBpZiAoIXJzLm5leHQoKSkKKyAgICAgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbigiTm8gY3VzdCBmb3IgIiArIGlkKTsKKyAgICAgICAgU3RyaW5nIHBob25lID0gcnMuZ2V0U3RyaW5nKDEpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltUZXN0Qk1QXSBEb25lIGVqYkxvYWQoKS4uLi4iKTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JfSBmaW5hbGx5IHsgCi0JICAgIHRyeSB7Ci0JCWlmIChwcyAhPSBudWxsKQotCQkgICAgcHMuY2xvc2UoKTsKLQkJaWYgKGMgIT0gbnVsbCkKLQkJICAgIGMuY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JfQorICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgeworICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgIGlmIChjICE9IG51bGwpCisgICAgICAgICAgICBjLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsKLQlDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCXRyeSB7Ci0JICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSJVUERBVEUgT19jdXN0b21lciBTRVQgY19waG9uZSA9ID8gV0hFUkUgY19pZCA9ID8iKTsKLQkgICAgcHMuc2V0U3RyaW5nKDEsICI1NTAtMTIxMiIpOwotCSAgICBwcy5zZXRJbnQoMiwgaWQpOwotCSAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCi0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oIkRpZG50IHN0b3JlIGVqYiIpOworICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgIlVQREFURSBPX2N1c3RvbWVyIFNFVCBjX3Bob25lID0gPyBXSEVSRSBjX2lkID0gPyIpOworICAgICAgICBwcy5zZXRTdHJpbmcoMSwgIjU1MC0xMjEyIik7CisgICAgICAgIHBzLnNldEludCgyLCBpZCk7CisgICAgICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkbnQgc3RvcmUgZWpiIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1Rlc3RCTVBdIERvbmUgZWpiU3RvcmUoKS4uLi4iKTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JfSBmaW5hbGx5IHsgCi0JICAgIHRyeSB7Ci0JCWlmIChwcyAhPSBudWxsKQotCQkgICAgcHMuY2xvc2UoKTsKLQkJaWYgKGMgIT0gbnVsbCkKLQkJICAgIGMuY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JfQorICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgIGlmIChjICE9IG51bGwpCisgICAgICAgICAgICBjLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3ZlRXhjZXB0aW9uIHsKLQlDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCXRyeSB7Ci0JICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSJERUxFVEUgRlJPTSBPX2N1c3RvbWVyIFdIRVJFIGNfaWQgPSA/Iik7Ci0JICAgIHBzLnNldEludCgxLCBpZCk7Ci0JICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKLQkJdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiRGlkbnQgcmVtb3ZlIGVqYiIpOwotCX0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewotCSAgICB0aHJvdyBuZXcgUmVtb3ZlRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQl9IGZpbmFsbHkgeyAKLQkgICAgdHJ5IHsKLQkJaWYgKHBzICE9IG51bGwpCi0JCSAgICBwcy5jbG9zZSgpOwotCQlpZiAoYyAhPSBudWxsKQotCQkgICAgYy5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQl9CisgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiREVMRVRFIEZST00gT19jdXN0b21lciBXSEVSRSBjX2lkID0gPyIpOworICAgICAgICBwcy5zZXRJbnQoMSwgaWQpOworICAgICAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCisgICAgICAgIHRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIkRpZG50IHJlbW92ZSBlamIiKTsKKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGVfbm9wYWNrYWdlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlX25vcGFja2FnZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZTQ5MTRmNi4uZjI1NjA3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGVfbm9wYWNrYWdlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZV9ub3BhY2thZ2Uvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZV9ub3BhY2thZ2Uvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlX25vcGFja2FnZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDcwZDFmY2MuLmQ4NTRiOTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlX25vcGFja2FnZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlX25vcGFja2FnZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90aHJlYWRfcG9vbF9pZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90aHJlYWRfcG9vbF9pZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDAzYjM5NGQuLmZmMzEwM2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdGhyZWFkX3Bvb2xfaWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3RocmVhZF9wb29sX2lkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE4ICsxNSwxOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcC10aHJlYWQtcG9vbC1pZCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90aHJlYWRfcG9vbF9pZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3RocmVhZF9wb29sX2lkL2J1aWxkLnhtbAppbmRleCAxYWUwY2MyLi5lNWI4YzljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3RocmVhZF9wb29sX2lkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3RocmVhZF9wb29sX2lkL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsNTIgKzQ4LDUyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9TaW1wbGVCTVAuY2xhc3MsICoqL1NpbXBsZUJNUEhvbWUuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8ZWNobyBtZXNzYWdlPSJhc2FkbWluIGNyZWF0ZS10aHJlYWRwb29sICR7YXMucHJvcHN9IGV4cHJlc3Mtc2VydmljZS10aHJlYWQtcG9vbCIvPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iID4KLQkgICAgPGFyZyBsaW5lPSJjcmVhdGUtdGhyZWFkcG9vbCAiLz4KLQkgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgotCSAgICA8YXJnIGxpbmU9ImV4cHJlc3Mtc2VydmljZS10aHJlYWQtcG9vbCIvPgotCTwvZXhlYz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbiIvPgotCTwhLS08ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiA+Ci0JICAgIDxhcmcgbGluZT0ic3RvcC1kb21haW4iLz4KLQk8L2V4ZWM+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgPgotCSAgICA8YXJnIGxpbmU9InN0YXJ0LWRvbWFpbiIvPgotCTwvZXhlYz4tLT4KKyAgICA8ZWNobyBtZXNzYWdlPSJhc2FkbWluIGNyZWF0ZS10aHJlYWRwb29sICR7YXMucHJvcHN9IGV4cHJlc3Mtc2VydmljZS10aHJlYWQtcG9vbCIvPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iID4KKyAgICAgICAgPGFyZyBsaW5lPSJjcmVhdGUtdGhyZWFkcG9vbCAiLz4KKyAgICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgorICAgICAgICA8YXJnIGxpbmU9ImV4cHJlc3Mtc2VydmljZS10aHJlYWQtcG9vbCIvPgorICAgIDwvZXhlYz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbiIvPgorICAgIDwhLS08ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiA+CisgICAgICAgIDxhcmcgbGluZT0ic3RvcC1kb21haW4iLz4KKyAgICA8L2V4ZWM+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgPgorICAgICAgICA8YXJnIGxpbmU9InN0YXJ0LWRvbWFpbiIvPgorICAgIDwvZXhlYz4tLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KIAotCTxlY2hvIG1lc3NhZ2U9ImFzYWRtaW4gZGVsZXRlLXRocmVhZHBvb2wgJHthcy5wcm9wc30gZXhwcmVzcy1zZXJ2aWNlLXRocmVhZC1wb29sIi8+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgPgotCSAgICA8YXJnIGxpbmU9ImRlbGV0ZS10aHJlYWRwb29sICIvPgotCSAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+Ci0JICAgIDxhcmcgbGluZT0iZXhwcmVzcy1zZXJ2aWNlLXRocmVhZC1wb29sIi8+Ci0JPC9leGVjPgotCTxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CisgICAgPGVjaG8gbWVzc2FnZT0iYXNhZG1pbiBkZWxldGUtdGhyZWFkcG9vbCAke2FzLnByb3BzfSBleHByZXNzLXNlcnZpY2UtdGhyZWFkLXBvb2wiLz4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiA+CisgICAgICAgIDxhcmcgbGluZT0iZGVsZXRlLXRocmVhZHBvb2wgIi8+CisgICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KKyAgICAgICAgPGFyZyBsaW5lPSJleHByZXNzLXNlcnZpY2UtdGhyZWFkLXBvb2wiLz4KKyAgICA8L2V4ZWM+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KIAogICAgICAgPCEtLQogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLWNvbW1vbiI+CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICAgIDwvYW50Y2FsbD4KICAgICAgIC0tPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90aHJlYWRfcG9vbF9pZC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3RocmVhZF9wb29sX2lkL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQppbmRleCA1ZTZlZDhjLi43MTM2ZTRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3RocmVhZF9wb29sX2lkL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3RocmVhZF9wb29sX2lkL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQpAQCAtMzUsMTkgKzM1LDE5IEBACiAgICAgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGVzdGluZyBibXAgc2ltcGxlIGFwcC4iKTsKLQkgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpSZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUJNUEhvbWUiKTsKLQkgICAgU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCisgICAgICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQogICAgICAgICAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaW50IGlkPSAoaW50KSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnRpbmcgdGVzdCBmb3IgaWQ6ICIgKyBpZCk7Ci0gCSAgICBTaW1wbGVCTVAgc2ltcGxlQk1QID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoaWQpOwogCi0JICAgIGJvb2xlYW4gdGhyZWFkUG9vbElEVGVzdFN0YXR1cyA9Ci0JCXNpbXBsZUJNUC5pc1NlcnZpY2VkQnkoImV4cHJlc3Mtc2VydmljZS10aHJlYWQtcG9vbCIpOworICAgICAgICAgICAgaW50IGlkPSAoaW50KSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnRpbmcgdGVzdCBmb3IgaWQ6ICIgKyBpZCk7CisgICAgICAgICBTaW1wbGVCTVAgc2ltcGxlQk1QID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoaWQpOworCisgICAgICAgIGJvb2xlYW4gdGhyZWFkUG9vbElEVGVzdFN0YXR1cyA9CisgICAgICAgIHNpbXBsZUJNUC5pc1NlcnZpY2VkQnkoImV4cHJlc3Mtc2VydmljZS10aHJlYWQtcG9vbCIpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJtcCBUaHJlYWRQb29sVGVzdCIsCi0JCSgodGhyZWFkUG9vbElEVGVzdFN0YXR1cyA9PSB0cnVlKSA/ICBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKKyAgICAgICAgKCh0aHJlYWRQb29sSURUZXN0U3RhdHVzID09IHRydWUpID8gIHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJtcCBzaW1wbGUiLCBzdGF0LkZBSUwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90aHJlYWRfcG9vbF9pZC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90aHJlYWRfcG9vbF9pZC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGZhZTRlODQuLmNmZTBkNjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdGhyZWFkX3Bvb2xfaWQvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3RocmVhZF9wb29sX2lkL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTU1LDYgKzU1LDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90aHJlYWRfcG9vbF9pZC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90aHJlYWRfcG9vbF9pZC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IGI1ZWIyNmQuLmU2MTliYzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdGhyZWFkX3Bvb2xfaWQvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3RocmVhZF9wb29sX2lkL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTMxLDE0OCArMzEsMTQ4IEBACiAgICAgaW50IGlkOwogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGVudGl0eUNvbnRleHQpIHsKLQlDb250ZXh0IGNvbnRleHQgPSBudWxsOwotCXRyeSB7Ci0JICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCX0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7Ci0JfQorICAgIENvbnRleHQgY29udGV4dCA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKKyAgICB9CiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbKipTaW1wbGVCTVBCZWFuKipdIERvbmUgd2l0aCBzZXRFbnRpdHlDb250ZXh0Li4uLiIpOwogICAgIH0KIAogICAgIHB1YmxpYyBJbnRlZ2VyIGVqYkNyZWF0ZShpbnQgaSkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAKLQlDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCXRyeSB7Ci0JICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSJJTlNFUlQgSU5UTyBPX2N1c3RvbWVyIChjX2lkLCBjX3Bob25lKSBWQUxVRVMgKD8sPykiKTsKLQkgICAgcHMuc2V0SW50KDEsIGkpOwotCSAgICBwcy5zZXRTdHJpbmcoMiwgIjU1MC0xMjEyIik7Ci0JICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKLQkJdGhyb3cgbmV3IENyZWF0ZUV4Y2VwdGlvbigiRGlkbnQgY3JlYXRlIGVqYiIpOworICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgIklOU0VSVCBJTlRPIE9fY3VzdG9tZXIgKGNfaWQsIGNfcGhvbmUpIFZBTFVFUyAoPyw/KSIpOworICAgICAgICBwcy5zZXRJbnQoMSwgaSk7CisgICAgICAgIHBzLnNldFN0cmluZygyLCAiNTUwLTEyMTIiKTsKKyAgICAgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQorICAgICAgICB0aHJvdyBuZXcgQ3JlYXRlRXhjZXB0aW9uKCJEaWRudCBjcmVhdGUgZWpiIik7CiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbKipTaW1wbGVCTVBCZWFuKipdIERvbmUgd2l0aCBlamJDcmVhdGUuLi4uIik7Ci0JfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgIHRocm93IG5ldyBDcmVhdGVFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCX0gZmluYWxseSB7IAotCSAgICB0cnkgewotCQlpZiAocHMgIT0gbnVsbCkKLQkJICAgIHBzLmNsb3NlKCk7Ci0JCWlmIChjICE9IG51bGwpCi0JCSAgICBjLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCX0KLQlpZCA9IGk7Ci0JcmV0dXJuIG5ldyBJbnRlZ2VyKGkpOworICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgeworICAgICAgICB0aHJvdyBuZXcgQ3JlYXRlRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgIGlmIChjICE9IG51bGwpCisgICAgICAgICAgICBjLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KKyAgICBpZCA9IGk7CisgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKGkpOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGlzU2VydmljZWRCeShTdHJpbmcgdGhyZWFkUG9vbElEKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqU2ltcGxlQk1QQmVhbioqXSAiCi0JICAgICsgIi4gUmVxdWVzdCBzZXJ2aWNlZCBieToiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7CisgICAgICAgICsgIi4gUmVxdWVzdCBzZXJ2aWNlZCBieToiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7CiAgICAgICAgIFN0cmluZyB0aHJlYWRJRCA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpOwotCXJldHVybiAodGhyZWFkSUQuaW5kZXhPZih0aHJlYWRQb29sSUQudG9Mb3dlckNhc2UoKSkgIT0gLTEpOworICAgIHJldHVybiAodGhyZWFkSUQuaW5kZXhPZih0aHJlYWRQb29sSUQudG9Mb3dlckNhc2UoKSkgIT0gLTEpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbKipTaW1wbGVCTVBCZWFuKipdIFsiCi0JICAgICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSArICJdIERvbmUgd2l0aCBmb28uLi4uIik7CisgICAgICAgICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSArICJdIERvbmUgd2l0aCBmb28uLi4uIik7CiAgICAgfQogCiAgICAgcHVibGljIEludGVnZXIgZWpiRmluZEJ5UHJpbWFyeUtleShJbnRlZ2VyIGtleSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7Ci0JQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQl0cnkgewotCSAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAotCQkiU0VMRUNUIGNfcGhvbmUgZnJvbSBPX2N1c3RvbWVyIHdoZXJlIGNfaWQgPSA/Iik7Ci0JICAgIHBzLnNldEludCgxLCBrZXkuaW50VmFsdWUoKSk7Ci0JICAgIFJlc3VsdFNldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpOwotCSAgICBpZiAoIXJzLm5leHQoKSkKLQkgICAgICAgdGhyb3cgbmV3IEZpbmRlckV4Y2VwdGlvbigiTm8gY3VzdCBmb3IgIiArIGlkKTsKLQkgICAgU3RyaW5nIHBob25lID0gcnMuZ2V0U3RyaW5nKDEpOwotCSAgICByZXR1cm4ga2V5OwotCX0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewotCSAgICB0aHJvdyBuZXcgRmluZGVyRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQl9IGZpbmFsbHkgeyAKLQkgICAgdHJ5IHsKLQkJaWYgKHBzICE9IG51bGwpCi0JCSAgICBwcy5jbG9zZSgpOwotCQlpZiAoYyAhPSBudWxsKQotCQkgICAgYy5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQl9CisgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiU0VMRUNUIGNfcGhvbmUgZnJvbSBPX2N1c3RvbWVyIHdoZXJlIGNfaWQgPSA/Iik7CisgICAgICAgIHBzLnNldEludCgxLCBrZXkuaW50VmFsdWUoKSk7CisgICAgICAgIFJlc3VsdFNldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpOworICAgICAgICBpZiAoIXJzLm5leHQoKSkKKyAgICAgICAgICAgdGhyb3cgbmV3IEZpbmRlckV4Y2VwdGlvbigiTm8gY3VzdCBmb3IgIiArIGlkKTsKKyAgICAgICAgU3RyaW5nIHBob25lID0gcnMuZ2V0U3RyaW5nKDEpOworICAgICAgICByZXR1cm4ga2V5OworICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgeworICAgICAgICB0aHJvdyBuZXcgRmluZGVyRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgIGlmIChjICE9IG51bGwpCisgICAgICAgICAgICBjLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewotCUNvbm5lY3Rpb24gYyA9IG51bGw7Ci0gICAgIAlQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKLQkJIlNFTEVDVCBjX3Bob25lIGZyb20gT19jdXN0b21lciB3aGVyZSBjX2lkID0gPyIpOwotCSAgICBwcy5zZXRJbnQoMSwgaWQpOwotCSAgICBSZXN1bHRTZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTsKLQkgICAgaWYgKCFycy5uZXh0KCkpCi0JICAgICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIk5vIGN1c3QgZm9yICIgKyBpZCk7Ci0JICAgIFN0cmluZyBwaG9uZSA9IHJzLmdldFN0cmluZygxKTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JfSBmaW5hbGx5IHsgCi0JICAgIHRyeSB7Ci0JCWlmIChwcyAhPSBudWxsKQotCQkgICAgcHMuY2xvc2UoKTsKLQkJaWYgKGMgIT0gbnVsbCkKLQkJICAgIGMuY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JfQorICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgIlNFTEVDVCBjX3Bob25lIGZyb20gT19jdXN0b21lciB3aGVyZSBjX2lkID0gPyIpOworICAgICAgICBwcy5zZXRJbnQoMSwgaWQpOworICAgICAgICBSZXN1bHRTZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTsKKyAgICAgICAgaWYgKCFycy5uZXh0KCkpCisgICAgICAgICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIk5vIGN1c3QgZm9yICIgKyBpZCk7CisgICAgICAgIFN0cmluZyBwaG9uZSA9IHJzLmdldFN0cmluZygxKTsKKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7Ci0JQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQl0cnkgewotCSAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAotCQkiVVBEQVRFIE9fY3VzdG9tZXIgU0VUIGNfcGhvbmUgPSA/IFdIRVJFIGNfaWQgPSA/Iik7Ci0JICAgIHBzLnNldFN0cmluZygxLCAiNTUwLTEyMTIiKTsKLQkgICAgcHMuc2V0SW50KDIsIGlkKTsKLQkgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJEaWRudCBzdG9yZSBlamIiKTsKKyAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICJVUERBVEUgT19jdXN0b21lciBTRVQgY19waG9uZSA9ID8gV0hFUkUgY19pZCA9ID8iKTsKKyAgICAgICAgcHMuc2V0U3RyaW5nKDEsICI1NTAtMTIxMiIpOworICAgICAgICBwcy5zZXRJbnQoMiwgaWQpOworICAgICAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkRpZG50IHN0b3JlIGVqYiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsqKlNpbXBsZUJNUEJlYW4qKl0gRG9uZSB3aXRoIGVqYlN0b3JlLi4uLiIpOwotCX0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQl9IGZpbmFsbHkgeyAKLQkgICAgdHJ5IHsKLQkJaWYgKHBzICE9IG51bGwpCi0JCSAgICBwcy5jbG9zZSgpOwotCQlpZiAoYyAhPSBudWxsKQotCQkgICAgYy5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQl9CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdmVFeGNlcHRpb24gewotCUNvbm5lY3Rpb24gYyA9IG51bGw7Ci0gICAgIAlQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKLQkJIkRFTEVURSBGUk9NIE9fY3VzdG9tZXIgV0hFUkUgY19pZCA9ID8iKTsKLQkgICAgcHMuc2V0SW50KDEsIGlkKTsKLQkgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQotCQl0aHJvdyBuZXcgUmVtb3ZlRXhjZXB0aW9uKCJEaWRudCByZW1vdmUgZWpiIik7Ci0JfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgIHRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCX0gZmluYWxseSB7IAotCSAgICB0cnkgewotCQlpZiAocHMgIT0gbnVsbCkKLQkJICAgIHBzLmNsb3NlKCk7Ci0JCWlmIChjICE9IG51bGwpCi0JCSAgICBjLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCX0KKyAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICJERUxFVEUgRlJPTSBPX2N1c3RvbWVyIFdIRVJFIGNfaWQgPSA/Iik7CisgICAgICAgIHBzLnNldEludCgxLCBpZCk7CisgICAgICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKKyAgICAgICAgdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiRGlkbnQgcmVtb3ZlIGVqYiIpOworICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgeworICAgICAgICB0aHJvdyBuZXcgUmVtb3ZlRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgIGlmIChjICE9IG51bGwpCisgICAgICAgICAgICBjLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3RocmVhZF9wb29sX2lkL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdGhyZWFkX3Bvb2xfaWQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGU0OTE0ZjYuLmYyNTYwNzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdGhyZWFkX3Bvb2xfaWQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdGhyZWFkX3Bvb2xfaWQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3RocmVhZF9wb29sX2lkL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3RocmVhZF9wb29sX2lkL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90aHJlYWRfcG9vbF9pZC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdGhyZWFkX3Bvb2xfaWQvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHdvbGV2ZWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHdvbGV2ZWwvYnVpbGQucHJvcGVydGllcwppbmRleCAwZWJhOTFiLi4wYTYzZjI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R3b2xldmVsL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90d29sZXZlbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOCArMTUsMTggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtdHdvbGV2ZWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHdvbGV2ZWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90d29sZXZlbC9idWlsZC54bWwKaW5kZXggYTg4N2ZlOS4uZjYwMGMzZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90d29sZXZlbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90d29sZXZlbC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovU3RhdGVsZXNzSG9tZS5jbGFzcywgKiovU3RhdGVsZXNzLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KQEAgLTY4LDIxICs2OCwyMSBAQAogICAgICAgLS0+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R3b2xldmVsL2NsaWVudC9Ud29MZXZlbENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90d29sZXZlbC9jbGllbnQvVHdvTGV2ZWxDbGllbnQuamF2YQppbmRleCA5ZTU5MmY5Li43YTM4NzEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R3b2xldmVsL2NsaWVudC9Ud29MZXZlbENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHdvbGV2ZWwvY2xpZW50L1R3b0xldmVsQ2xpZW50LmphdmEKQEAgLTM1LDIxICszNSwyMSBAQAogICAgIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRlc3RpbmcgYm1wIHR3b2xldmVsIGFwcC4iKTsKLQkgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpSZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1N0YXRlbGVzc0hvbWUiKTsKLQkgICAgU3RhdGVsZXNzSG9tZSBzdGF0ZWxlc3NIb21lID0gKFN0YXRlbGVzc0hvbWUpCisgICAgICAgIFN0YXRlbGVzc0hvbWUgc3RhdGVsZXNzSG9tZSA9IChTdGF0ZWxlc3NIb21lKQogICAgICAgICAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTdGF0ZWxlc3NIb21lLmNsYXNzKTsKIAotCSAgICBTdGF0ZWxlc3Mgc3RhdGVsZXNzID0gc3RhdGVsZXNzSG9tZS5jcmVhdGUoKTsKLSAgICAgICAgICAgIAorICAgICAgICBTdGF0ZWxlc3Mgc3RhdGVsZXNzID0gc3RhdGVsZXNzSG9tZS5jcmVhdGUoKTsKKwogICAgICAgICAgICAgaW50IGlkPSAoaW50KSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGFydGluZyB0ZXN0IGZvciBpZDogIiArIGlkKTsKLQkgICAgc3RhdGVsZXNzLmNyZWF0ZUJNUChuZXcgSW50ZWdlcihpZCkpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvbmUgZm9yIGlkOiAiICsgaWQpOwotICAgICAgICAgICAgCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnRpbmcgdGVzdCBmb3IgaWQ6ICIgKyBpZCsxKTsKLQkgICAgc3RhdGVsZXNzLmNyZWF0ZUJNUEFuZFRlc3QobmV3IEludGVnZXIoaWQrMSkpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvbmUgZm9yIGlkOiAiICsgaWQrMSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnRpbmcgdGVzdCBmb3IgaWQ6ICIgKyBpZCk7CisgICAgICAgIHN0YXRlbGVzcy5jcmVhdGVCTVAobmV3IEludGVnZXIoaWQpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb25lIGZvciBpZDogIiArIGlkKTsKKworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXJ0aW5nIHRlc3QgZm9yIGlkOiAiICsgaWQrMSk7CisgICAgICAgIHN0YXRlbGVzcy5jcmVhdGVCTVBBbmRUZXN0KG5ldyBJbnRlZ2VyKGlkKzEpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb25lIGZvciBpZDogIiArIGlkKzEpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJtcCB0d29sZXZlbCIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R3b2xldmVsL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R3b2xldmVsL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggMzRlNjU0ZS4uYjJmZDk3YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90d29sZXZlbC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHdvbGV2ZWwvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtODAsNiArODAsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R3b2xldmVsL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R3b2xldmVsL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggNjMyNmI1Yi4uMTVhYWUxZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90d29sZXZlbC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHdvbGV2ZWwvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQpAQCAtMzEsNDEgKzMxLDQxIEBACiAgICAgaW50IGlkOwogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGVudGl0eUNvbnRleHQpIHsKLQlDb250ZXh0IGNvbnRleHQgPSBudWxsOwotCXRyeSB7Ci0JICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCX0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7Ci0JfQorICAgIENvbnRleHQgY29udGV4dCA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKKyAgICB9CiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbKipTaW1wbGVCTVBCZWFuKipdIERvbmUgd2l0aCBzZXRFbnRpdHlDb250ZXh0Li4uLiIpOwogICAgIH0KIAogICAgIHB1YmxpYyBJbnRlZ2VyIGVqYkNyZWF0ZShpbnQgaSkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAKLQlDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCXRyeSB7Ci0JICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSJJTlNFUlQgSU5UTyBPX2N1c3RvbWVyIChjX2lkLCBjX3Bob25lKSBWQUxVRVMgKD8sPykiKTsKLQkgICAgcHMuc2V0SW50KDEsIGkpOwotCSAgICBwcy5zZXRTdHJpbmcoMiwgIjU1MC0xMjEyIik7Ci0JICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKLQkJdGhyb3cgbmV3IENyZWF0ZUV4Y2VwdGlvbigiRGlkbnQgY3JlYXRlIGVqYiIpOworICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgIklOU0VSVCBJTlRPIE9fY3VzdG9tZXIgKGNfaWQsIGNfcGhvbmUpIFZBTFVFUyAoPyw/KSIpOworICAgICAgICBwcy5zZXRJbnQoMSwgaSk7CisgICAgICAgIHBzLnNldFN0cmluZygyLCAiNTUwLTEyMTIiKTsKKyAgICAgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQorICAgICAgICB0aHJvdyBuZXcgQ3JlYXRlRXhjZXB0aW9uKCJEaWRudCBjcmVhdGUgZWpiIik7CiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbKipTaW1wbGVCTVBCZWFuKipdIERvbmUgd2l0aCBlamJDcmVhdGUuLi4uIik7Ci0JfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgIHRocm93IG5ldyBDcmVhdGVFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCX0gZmluYWxseSB7IAotCSAgICB0cnkgewotCQlpZiAocHMgIT0gbnVsbCkKLQkJICAgIHBzLmNsb3NlKCk7Ci0JCWlmIChjICE9IG51bGwpCi0JCSAgICBjLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCX0KLQlpZCA9IGk7Ci0JcmV0dXJuIG5ldyBJbnRlZ2VyKGkpOworICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgeworICAgICAgICB0aHJvdyBuZXcgQ3JlYXRlRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgIGlmIChjICE9IG51bGwpCisgICAgICAgICAgICBjLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KKyAgICBpZCA9IGk7CisgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKGkpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKQEAgLTczLDk4ICs3Myw5OCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBJbnRlZ2VyIGVqYkZpbmRCeVByaW1hcnlLZXkoSW50ZWdlciBrZXkpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewotCUNvbm5lY3Rpb24gYyA9IG51bGw7Ci0gICAgIAlQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKLQkJIlNFTEVDVCBjX3Bob25lIGZyb20gT19jdXN0b21lciB3aGVyZSBjX2lkID0gPyIpOwotCSAgICBwcy5zZXRJbnQoMSwga2V5LmludFZhbHVlKCkpOwotCSAgICBSZXN1bHRTZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTsKLQkgICAgaWYgKCFycy5uZXh0KCkpCi0JICAgICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIk5vIGN1c3QgZm9yICIgKyBpZCk7Ci0JICAgIFN0cmluZyBwaG9uZSA9IHJzLmdldFN0cmluZygxKTsKLQkgICAgcmV0dXJuIGtleTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgdGhyb3cgbmV3IEZpbmRlckV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JfSBmaW5hbGx5IHsgCi0JICAgIHRyeSB7Ci0JCWlmIChwcyAhPSBudWxsKQotCQkgICAgcHMuY2xvc2UoKTsKLQkJaWYgKGMgIT0gbnVsbCkKLQkJICAgIGMuY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JfQorICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgIlNFTEVDVCBjX3Bob25lIGZyb20gT19jdXN0b21lciB3aGVyZSBjX2lkID0gPyIpOworICAgICAgICBwcy5zZXRJbnQoMSwga2V5LmludFZhbHVlKCkpOworICAgICAgICBSZXN1bHRTZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTsKKyAgICAgICAgaWYgKCFycy5uZXh0KCkpCisgICAgICAgICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIk5vIGN1c3QgZm9yICIgKyBpZCk7CisgICAgICAgIFN0cmluZyBwaG9uZSA9IHJzLmdldFN0cmluZygxKTsKKyAgICAgICAgcmV0dXJuIGtleTsKKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IEZpbmRlckV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKLQlDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCXRyeSB7Ci0JICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSJTRUxFQ1QgY19waG9uZSBmcm9tIE9fY3VzdG9tZXIgd2hlcmUgY19pZCA9ID8iKTsKLQkgICAgcHMuc2V0SW50KDEsIGlkKTsKLQkgICAgUmVzdWx0U2V0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7Ci0JICAgIGlmICghcnMubmV4dCgpKQotCSAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJObyBjdXN0IGZvciAiICsgaWQpOwotCSAgICBTdHJpbmcgcGhvbmUgPSBycy5nZXRTdHJpbmcoMSk7Ci0JfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCX0gZmluYWxseSB7IAotCSAgICB0cnkgewotCQlpZiAocHMgIT0gbnVsbCkKLQkJICAgIHBzLmNsb3NlKCk7Ci0JCWlmIChjICE9IG51bGwpCi0JCSAgICBjLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCX0KKyAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICJTRUxFQ1QgY19waG9uZSBmcm9tIE9fY3VzdG9tZXIgd2hlcmUgY19pZCA9ID8iKTsKKyAgICAgICAgcHMuc2V0SW50KDEsIGlkKTsKKyAgICAgICAgUmVzdWx0U2V0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7CisgICAgICAgIGlmICghcnMubmV4dCgpKQorICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJObyBjdXN0IGZvciAiICsgaWQpOworICAgICAgICBTdHJpbmcgcGhvbmUgPSBycy5nZXRTdHJpbmcoMSk7CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewotCUNvbm5lY3Rpb24gYyA9IG51bGw7Ci0gICAgIAlQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKLQkJIlVQREFURSBPX2N1c3RvbWVyIFNFVCBjX3Bob25lID0gPyBXSEVSRSBjX2lkID0gPyIpOwotCSAgICBwcy5zZXRTdHJpbmcoMSwgIjU1MC0xMjEyIik7Ci0JICAgIHBzLnNldEludCgyLCBpZCk7Ci0JICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkbnQgc3RvcmUgZWpiIik7CisgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiVVBEQVRFIE9fY3VzdG9tZXIgU0VUIGNfcGhvbmUgPSA/IFdIRVJFIGNfaWQgPSA/Iik7CisgICAgICAgIHBzLnNldFN0cmluZygxLCAiNTUwLTEyMTIiKTsKKyAgICAgICAgcHMuc2V0SW50KDIsIGlkKTsKKyAgICAgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQorICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJEaWRudCBzdG9yZSBlamIiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbKipTaW1wbGVCTVBCZWFuKipdIERvbmUgd2l0aCBlamJTdG9yZS4uLi4iKTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JfSBmaW5hbGx5IHsgCi0JICAgIHRyeSB7Ci0JCWlmIChwcyAhPSBudWxsKQotCQkgICAgcHMuY2xvc2UoKTsKLQkJaWYgKGMgIT0gbnVsbCkKLQkJICAgIGMuY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JfQorICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgIGlmIChjICE9IG51bGwpCisgICAgICAgICAgICBjLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3ZlRXhjZXB0aW9uIHsKLQlDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCXRyeSB7Ci0JICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSJERUxFVEUgRlJPTSBPX2N1c3RvbWVyIFdIRVJFIGNfaWQgPSA/Iik7Ci0JICAgIHBzLnNldEludCgxLCBpZCk7Ci0JICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKLQkJdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiRGlkbnQgcmVtb3ZlIGVqYiIpOwotCX0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewotCSAgICB0aHJvdyBuZXcgUmVtb3ZlRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQl9IGZpbmFsbHkgeyAKLQkgICAgdHJ5IHsKLQkJaWYgKHBzICE9IG51bGwpCi0JCSAgICBwcy5jbG9zZSgpOwotCQlpZiAoYyAhPSBudWxsKQotCQkgICAgYy5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQl9CisgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiREVMRVRFIEZST00gT19jdXN0b21lciBXSEVSRSBjX2lkID0gPyIpOworICAgICAgICBwcy5zZXRJbnQoMSwgaWQpOworICAgICAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCisgICAgICAgIHRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIkRpZG50IHJlbW92ZSBlamIiKTsKKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90d29sZXZlbC9lamIvU3RhdGVsZXNzQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90d29sZXZlbC9lamIvU3RhdGVsZXNzQmVhbi5qYXZhCmluZGV4IDNjYzQwM2UuLjI2NTgzMWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHdvbGV2ZWwvZWpiL1N0YXRlbGVzc0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R3b2xldmVsL2VqYi9TdGF0ZWxlc3NCZWFuLmphdmEKQEAgLTM0LDE0ICszNCwxNCBAQAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNlc3Npb25Db250ZXh0KSB7CiAgICAgICAgIHRoaXMuc2Vzc2lvbkNvbnRleHQgPSBzZXNzaW9uQ29udGV4dDsKIAotCSAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOwotCSAgICB0cnkgewotCSAgICAgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICAgICAgT2JqZWN0IG9ialJlZiA9IGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVCTVBIb21lIik7Ci0JICAgICAgICBibXBIb21lID0gKFNpbXBsZUJNUEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZUJNUEhvbWUuY2xhc3MpOwotCSAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgewotCSAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIFNpbXBsZUJNUEhvbWUiKTsKLQkgICAgfQorICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVCTVBIb21lIik7CisgICAgICAgICAgICBibXBIb21lID0gKFNpbXBsZUJNUEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZUJNUEhvbWUuY2xhc3MpOworICAgICAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIFNpbXBsZUJNUEhvbWUiKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUJNUChJbnRlZ2VyIGtleSkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHdvbGV2ZWwvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90d29sZXZlbC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZTQ5MTRmNi4uZjI1NjA3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90d29sZXZlbC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90d29sZXZlbC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHdvbGV2ZWwvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHdvbGV2ZWwvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA3MGQxZmNjLi5kODU0Yjk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R3b2xldmVsL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90d29sZXZlbC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9idWlsZC54bWwKaW5kZXggNjZlYzUwMy4uNDg1ZmFkNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvYnVpbGQueG1sCkBAIC0zMCwxMCArMzAsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CiAgICAgICAgICAgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1ibXAgdHh0ZXN0cyB0ZXN0cykKLQkJCQotCTwvZWNobz4KKworICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zaW1wbGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zaW1wbGUvYnVpbGQucHJvcGVydGllcwppbmRleCBjM2FhNTVkLi41MTM2NTJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3NpbXBsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOCArMTUsMTggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtdHh0ZXN0cy1zaW1wbGUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zaW1wbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3NpbXBsZS9idWlsZC54bWwKaW5kZXggYWM5NzZiMS4uNjAzOWQ0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3NpbXBsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3NpbXBsZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDM0ICs0OCwzNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovQ3VzdG9tZXJJbmZvLmNsYXNzLCAqKi9TaW1wbGVCTVAuY2xhc3MsICoqL1NpbXBsZUJNUEhvbWUuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3NpbXBsZS9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc2ltcGxlL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQppbmRleCA2ZDhhOTA3Li4zODY0MDZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc2ltcGxlL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc2ltcGxlL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQpAQCAtMzUsMTkgKzM1LDE5IEBACiAgICAgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGVzdGluZyB0eHRlc3RzIHNpbXBsZSBhcHAuIik7Ci0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVCTVBIb21lIik7Ci0JICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQorICAgICAgICBTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKICAgICAgICAgICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaW50IGlkPSAoaW50KSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGFydGluZyB0ZXN0IGZvciBpZDogIiArIGlkKTsKLQkgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKGlkKTsKLQkgICAgc2ltcGxlQk1QLmdldElEKCk7Ci0gICAgICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGFydGluZyB0ZXN0IGZvciBpZDogIiArIGlkKTsKKyAgICAgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKGlkKTsKKyAgICAgICAgc2ltcGxlQk1QLmdldElEKCk7CisKICAgICAgICAgICAgIFNpbXBsZUJNUCBiZWFuID0gc2ltcGxlQk1QSG9tZS5maW5kQnlQcmltYXJ5S2V5KG5ldyBJbnRlZ2VyKGlkKSk7Ci0JICAgIHNpbXBsZUJNUC5nZXRJRCgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvbmUgZm9yIGlkOiAiICsgaWQpOworICAgICAgICBzaW1wbGVCTVAuZ2V0SUQoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb25lIGZvciBpZDogIiArIGlkKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ0eHRlc3RzIHNpbXBsZSIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc2ltcGxlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc2ltcGxlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggYWY5MDhiZS4uNDdjZjQxNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3NpbXBsZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zaW1wbGUvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNTUsNiArNTUsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc2ltcGxlL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc2ltcGxlL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggZTE3MWVhYi4uNTMxYzJmNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3NpbXBsZS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zaW1wbGUvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQpAQCAtMzUsMTIgKzM1LDEyIEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihfZGVidWdOYW1lICsgIlsiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSArICJdIgogICAgICAgICAgICAgICAgICsgIiBFbnRlcmVkIHNldEVudGl0eUNvbnRleHQuLi4uIik7CiAgICAgICAgIHRoaXMuZW50aXR5Q29udGV4dCA9IGVudGl0eUNvbnRleHQ7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQkgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKLQkgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7Ci0JICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENvbnRleHQgY29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOworICAgICAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKKyAgICAgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oX2RlYnVnTmFtZSArICJbIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkgKyAiXSIKICAgICAgICAgICAgICAgICArICIgRG9uZSB3aXRoIHNldEVudGl0eUNvbnRleHQuLi4uIik7CiAgICAgfQpAQCAtNDksMzEgKzQ5LDMxIEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihfZGVidWdOYW1lICsgIlsiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSArICJdIgogICAgICAgICAgICAgICAgICsgIiBFbnRlcmVkIGVqYkNyZWF0ZSgiICsgaSArICIpLi4uLiIpOwogCi0JICAgIENvbm5lY3Rpb24gYyA9IG51bGw7Ci0gICAgIAlQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKLQkJICAgICJJTlNFUlQgSU5UTyBPX2N1c3RvbWVyIChjX2lkLCBjX3Bob25lKSBWQUxVRVMgKD8sPykiKTsKLQkgICAgICAgIHBzLnNldEludCgxLCBpKTsKLQkgICAgICAgIHBzLnNldFN0cmluZygyLCAiUGhvbmVfIiArIGkpOwotCSAgICAgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKSB7Ci0JCSAgICAgICAgdGhyb3cgbmV3IENyZWF0ZUV4Y2VwdGlvbigiRGlkbnQgY3JlYXRlIGVqYiIpOworICAgICAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICAgICAiSU5TRVJUIElOVE8gT19jdXN0b21lciAoY19pZCwgY19waG9uZSkgVkFMVUVTICg/LD8pIik7CisgICAgICAgICAgICBwcy5zZXRJbnQoMSwgaSk7CisgICAgICAgICAgICBwcy5zZXRTdHJpbmcoMiwgIlBob25lXyIgKyBpKTsKKyAgICAgICAgICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBDcmVhdGVFeGNlcHRpb24oIkRpZG50IGNyZWF0ZSBlamIiKTsKICAgICAgICAgICAgIH0KLQkgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgICAgICB0aHJvdyBuZXcgQ3JlYXRlRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQkgICAgfSBmaW5hbGx5IHsgCi0JICAgICAgICB0cnkgewotCQkgICAgaWYgKHBzICE9IG51bGwpCi0JCSAgICAgICAgcHMuY2xvc2UoKTsKLQkJICAgIGlmIChjICE9IG51bGwpCi0JCSAgICAgICAgYy5jbG9zZSgpOwotCSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JICAgIH0KLQkgICAgaWQgPSBpOworICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBDcmVhdGVFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgICAgICB9CisgICAgICAgIGlkID0gaTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKF9kZWJ1Z05hbWUgKyAiWyIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpICsgIl0iCiAgICAgICAgICAgICAgICAgKyAiIERvbmUgd2l0aCBlamJDcmVhdGUoIiArIGkgKyAiKS4uLi4iKTsKLQkgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKGkpOworICAgICAgICByZXR1cm4gbmV3IEludGVnZXIoaSk7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRJRCgpIHsKQEAgLTkyLDU2ICs5Miw1NiBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oX2RlYnVnTmFtZSArICJbIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkgKyAiXSIKICAgICAgICAgICAgICAgICArICIgRW50ZXJlZCBlamJGaW5kQnlQcmltYXJ5S2V5KCIgKyBrZXkuaW50VmFsdWUoKSArICIpLi4uLiIpOwogCi0JICAgIENvbm5lY3Rpb24gYyA9IG51bGw7Ci0gICAgIAlQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKLQkJICAgICJTRUxFQ1QgY19waG9uZSBmcm9tIE9fY3VzdG9tZXIgd2hlcmUgY19pZCA9ID8iKTsKLQkgICAgICAgIHBzLnNldEludCgxLCBrZXkuaW50VmFsdWUoKSk7Ci0JICAgICAgICBSZXN1bHRTZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTsKLQkgICAgICAgIGlmICghcnMubmV4dCgpKSB7Ci0JICAgICAgICAgICAgdGhyb3cgbmV3IEZpbmRlckV4Y2VwdGlvbigiTm8gY3VzdCBmb3IgIiArIGlkKTsKKyAgICAgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAgICAgIlNFTEVDVCBjX3Bob25lIGZyb20gT19jdXN0b21lciB3aGVyZSBjX2lkID0gPyIpOworICAgICAgICAgICAgcHMuc2V0SW50KDEsIGtleS5pbnRWYWx1ZSgpKTsKKyAgICAgICAgICAgIFJlc3VsdFNldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpOworICAgICAgICAgICAgaWYgKCFycy5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRmluZGVyRXhjZXB0aW9uKCJObyBjdXN0IGZvciAiICsgaWQpOwogICAgICAgICAgICAgfQotCSAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCSAgICB9IGZpbmFsbHkgeyAKLQkgICAgICAgIHRyeSB7Ci0JCSAgICBpZiAocHMgIT0gbnVsbCkKLQkJICAgICAgICBwcy5jbG9zZSgpOwotCQkgICAgaWYgKGMgIT0gbnVsbCkKLQkJICAgICAgICBjLmNsb3NlKCk7Ci0JICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQkgICAgfQorICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgICAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihfZGVidWdOYW1lICsgIlsiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSArICJdIgogICAgICAgICAgICAgICAgICsgIiBET05FIGVqYkZpbmRCeVByaW1hcnlLZXkoIiArIGtleS5pbnRWYWx1ZSgpICsgIikuLi4uIik7Ci0JICAgIHJldHVybiBrZXk7CisgICAgICAgIHJldHVybiBrZXk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKF9kZWJ1Z05hbWUgKyAiWyIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpICsgIl0iCiAgICAgICAgICAgICAgICAgKyAiIEVudGVyZWQgZWpiTG9hZCgpLi4uLiIpOwotCSAgICBDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCSAgICB0cnkgewotCSAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSAgICAiU0VMRUNUIGNfcGhvbmUgZnJvbSBPX2N1c3RvbWVyIHdoZXJlIGNfaWQgPSA/Iik7Ci0JICAgICAgICBwcy5zZXRJbnQoMSwgaWQpOwotCSAgICAgICAgUmVzdWx0U2V0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7Ci0JICAgICAgICBpZiAoIXJzLm5leHQoKSkKLQkgICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJObyBjdXN0IGZvciAiICsgaWQpOwotCSAgICAgICAgU3RyaW5nIHBob25lID0gcnMuZ2V0U3RyaW5nKDEpOwotCSAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCSAgICB9IGZpbmFsbHkgeyAKLQkgICAgICAgIHRyeSB7Ci0JCSAgICBpZiAocHMgIT0gbnVsbCkKLQkJICAgICAgICBwcy5jbG9zZSgpOwotCQkgICAgaWYgKGMgIT0gbnVsbCkKLQkJICAgICAgICBjLmNsb3NlKCk7Ci0JICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQkgICAgfQorICAgICAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICAgICAiU0VMRUNUIGNfcGhvbmUgZnJvbSBPX2N1c3RvbWVyIHdoZXJlIGNfaWQgPSA/Iik7CisgICAgICAgICAgICBwcy5zZXRJbnQoMSwgaWQpOworICAgICAgICAgICAgUmVzdWx0U2V0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7CisgICAgICAgICAgICBpZiAoIXJzLm5leHQoKSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJObyBjdXN0IGZvciAiICsgaWQpOworICAgICAgICAgICAgU3RyaW5nIHBob25lID0gcnMuZ2V0U3RyaW5nKDEpOworICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgICAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihfZGVidWdOYW1lICsgIlsiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSArICJdIgogICAgICAgICAgICAgICAgICsgIiBET05FIGVqYkxvYWQoKS4uLi4iKTsKICAgICB9CkBAIC0xNDksMjcgKzE0OSwyNyBAQAogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oX2RlYnVnTmFtZSArICJbIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkgKyAiXSIKICAgICAgICAgICAgICAgICArICIgRW50ZXJlZCBlamJTdG9yZSgpLi4uLiIpOwotCSAgICBDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCSAgICB0cnkgewotCSAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSAgICAiVVBEQVRFIE9fY3VzdG9tZXIgU0VUIGNfcGhvbmUgPSA/IFdIRVJFIGNfaWQgPSA/Iik7Ci0JICAgICAgICBwcy5zZXRTdHJpbmcoMSwgIjU1MC0xMjEyIik7Ci0JICAgICAgICBwcy5zZXRJbnQoMiwgaWQpOwotCSAgICAgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQotCQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkbnQgc3RvcmUgZWpiIik7CisgICAgICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgICAgICJVUERBVEUgT19jdXN0b21lciBTRVQgY19waG9uZSA9ID8gV0hFUkUgY19pZCA9ID8iKTsKKyAgICAgICAgICAgIHBzLnNldFN0cmluZygxLCAiNTUwLTEyMTIiKTsKKyAgICAgICAgICAgIHBzLnNldEludCgyLCBpZCk7CisgICAgICAgICAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJEaWRudCBzdG9yZSBlamIiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqU2ltcGxlQk1QQmVhbioqXSBEb25lIHdpdGggZWpiU3RvcmUuLi4uIik7Ci0JICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewotCSAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JICAgIH0gZmluYWxseSB7IAotCSAgICAgICAgdHJ5IHsKLQkJICAgIGlmIChwcyAhPSBudWxsKQotCQkgICAgICAgIHBzLmNsb3NlKCk7Ci0JCSAgICBpZiAoYyAhPSBudWxsKQotCQkgICAgICAgIGMuY2xvc2UoKTsKLQkgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCSAgICB9CisgICAgICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgICAgIGlmIChjICE9IG51bGwpCisgICAgICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgICAgIH0KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKF9kZWJ1Z05hbWUgKyAiWyIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpICsgIl0iCiAgICAgICAgICAgICAgICAgKyAiIERPTkUgZWpiU3RvcmUoKS4uLi4iKTsKICAgICB9CkBAIC0xNzcsMjUgKzE3NywyNSBAQAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdmVFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oX2RlYnVnTmFtZSArICJbIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkgKyAiXSIKICAgICAgICAgICAgICAgICArICIgRW50ZXJlZCBlamJSZW1vdmUoKS4uLi4iKTsKLQkgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAotCQkgICAgIkRFTEVURSBGUk9NIE9fY3VzdG9tZXIgV0hFUkUgY19pZCA9ID8iKTsKLQkgICAgICAgIHBzLnNldEludCgxLCBpZCk7Ci0JICAgICAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCi0JCSAgICB0aHJvdyBuZXcgUmVtb3ZlRXhjZXB0aW9uKCJEaWRudCByZW1vdmUgZWpiIik7Ci0JICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewotCSAgICAgICAgdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JICAgIH0gZmluYWxseSB7IAotCSAgICAgICAgdHJ5IHsKLQkJICAgIGlmIChwcyAhPSBudWxsKQotCQkgICAgICAgIHBzLmNsb3NlKCk7Ci0JCSAgICBpZiAoYyAhPSBudWxsKQotCQkgICAgICAgIGMuY2xvc2UoKTsKLQkgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCSAgICB9CisgICAgICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgICAgICJERUxFVEUgRlJPTSBPX2N1c3RvbWVyIFdIRVJFIGNfaWQgPSA/Iik7CisgICAgICAgICAgICBwcy5zZXRJbnQoMSwgaWQpOworICAgICAgICAgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQorICAgICAgICAgICAgdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiRGlkbnQgcmVtb3ZlIGVqYiIpOworICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgICAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihfZGVidWdOYW1lICsgIlsiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSArICJdIgogICAgICAgICAgICAgICAgICsgIiBET05FIGVqYlJlbW92ZSgpLi4uLiIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zaW1wbGUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3NpbXBsZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggMmM0Y2I2NS4uMjMxMjA5ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3NpbXBsZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3NpbXBsZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMjYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigyNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zaW1wbGUvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zaW1wbGUvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA3MGQxZmNjLi5kODU0Yjk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc2ltcGxlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3NpbXBsZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3N0YXRlbGVzcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3N0YXRlbGVzcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDI0ZjY4MWIuLmY0MDNjMGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zdGF0ZWxlc3MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc3RhdGVsZXNzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcC10eHRlc3RzLXN0YXRlbGVzcyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3N0YXRlbGVzcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc3RhdGVsZXNzL2J1aWxkLnhtbAppbmRleCBjNTI3MzIwLi4wYzQ2MDAyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc3RhdGVsZXNzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc3RhdGVsZXNzL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTQgKzQ4LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsICoqLypTTFNCKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAtLT4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwhLS0KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CkBAIC03OSwxNCArNzksMTQgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zdGF0ZWxlc3MvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3N0YXRlbGVzcy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZjI4ZGEyNy4uY2E2ZDAzMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3N0YXRlbGVzcy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3N0YXRlbGVzcy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMyLDggKzMyLDggQEAKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdE5vdFJ1biAgICA9ICJURVNUIE5PVCBSVU4iOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0UGFzc2VkICAgID0gIlRFU1QgUEFTU0VEIjsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdEZhaWxlZCAgICA9ICJURVNUIEZBSUxFRCI7Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKworICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBTTFNCSG9tZSBob21lOwpAQCAtNDYsMTEgKzQ2LDExIEBACiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbdHh0ZXN0c10gRE9ORSBkb1Rlc3QoKS4uLiIpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgidHh0ZXN0cyIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAgICAgICAgIGluaXRTTFNCKCk7ICAgICAgIC8vY3JlYXRlIE1BWF9USU1FUlMKIApAQCAtMTA2LDQgKzEwNiw0IEBACiAgICAgfQogCiB9Ci0gICAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zdGF0ZWxlc3MvZWpiL1NMU0IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zdGF0ZWxlc3MvZWpiL1NMU0IuamF2YQppbmRleCA2NWQwNjZhLi44MGNhN2JjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc3RhdGVsZXNzL2VqYi9TTFNCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3N0YXRlbGVzcy9lamIvU0xTQi5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiAgICAgZXh0ZW5kcyBFSkJPYmplY3QKIHsKIAotCXB1YmxpYyBib29sZWFuIGRvUm9sbGJhY2tUZXN0KGludCBpZCkKKyAgICBwdWJsaWMgYm9vbGVhbiBkb1JvbGxiYWNrVGVzdChpbnQgaWQpCiAgICAgICAgIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiBkb1JldHVyblBhcmFtVGVzdChpbnQgaWQpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc3RhdGVsZXNzL2VqYi9TTFNCRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc3RhdGVsZXNzL2VqYi9TTFNCRUpCLmphdmEKaW5kZXggMmRkZjlhYi4uZTJjODU1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3N0YXRlbGVzcy9lamIvU0xTQkVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zdGF0ZWxlc3MvZWpiL1NMU0JFSkIuamF2YQpAQCAtMjYsMTggKzI2LDE4IEBACiBpbXBvcnQgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0OwogCiBwdWJsaWMgY2xhc3MgU0xTQkVKQgotICAgIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gCisgICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbgogewotCXByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2Vzc2lvbkN0eDsKKyAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNlc3Npb25DdHg7CiAKLQlwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7fQorICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHt9CiAKLQlwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQlzZXNzaW9uQ3R4ID0gc2M7Ci0JfQorICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7CisgICAgICAgIHNlc3Npb25DdHggPSBzYzsKKyAgICB9CiAKLQkvLyBidXNpbmVzcyBtZXRob2QgdG8gY3JlYXRlIGEgdGltZXIKLQlwdWJsaWMgYm9vbGVhbiBkb1JvbGxiYWNrVGVzdChpbnQgaWQpIHsKKyAgICAvLyBidXNpbmVzcyBtZXRob2QgdG8gY3JlYXRlIGEgdGltZXIKKyAgICBwdWJsaWMgYm9vbGVhbiBkb1JvbGxiYWNrVGVzdChpbnQgaWQpIHsKICAgICAgICAgYm9vbGVhbiByZXRWYWwgPSBmYWxzZTsKICAgICAgICAgYm9vbGVhbiBkb25lUm9sbGJhY2sgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogICAgICAgICAgICAgc2Vzc2lvbkN0eC5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogICAgICAgICAgICAgZW50aXR5SG9tZS5jcmVhdGUoaWQpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vVGhpcyBtdXN0IGJlIG5vbiBudWxsCiAgICAgICAgICAgICBTaW1wbGVCTVAgZW50aXR5ID0gKFNpbXBsZUJNUCkKICAgICAgICAgICAgICAgICBlbnRpdHlIb21lLmZpbmRCeVByaW1hcnlLZXkobmV3IEludGVnZXIoaWQpKTsKQEAgLTc4LDggKzc4LDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0JCXJldHVybiByZXRWYWw7Ci0JfQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGRvUmV0dXJuUGFyYW1UZXN0KGludCBpZCkgewogCkBAIC05Miw3ICs5Miw3IEBACiAKICAgICAgICAgICAgIHNlc3Npb25DdHguZ2V0VXNlclRyYW5zYWN0aW9uKCkuYmVnaW4oKTsKICAgICAgICAgICAgIGVudGl0eUhvbWUuY3JlYXRlKGlkKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvL1RoaXMgbXVzdCBiZSBub24gbnVsbAogICAgICAgICAgICAgU2ltcGxlQk1QIGVudGl0eSA9IChTaW1wbGVCTVApCiAgICAgICAgICAgICAgICAgZW50aXR5SG9tZS5maW5kQnlQcmltYXJ5S2V5KG5ldyBJbnRlZ2VyKGlkKSk7CkBAIC0xMDQsNyArMTA0LDcgQEAKIAogICAgICAgICAgICAgQ3VzdG9tZXJJbmZvIGN1c3RvbWVySW5mbyA9IGVudGl0eS5nZXRDdXN0b21lckluZm8oKTsKICAgICAgICAgICAgIHJldFZhbCA9IChmb3VuZElEID09IGN1c3RvbWVySW5mby5nZXRDdXN0b21lcklEKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRoKSB7CiAgICAgICAgICAgICB0aC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfSBmaW5hbGx5IHsKQEAgLTExNCwxMyArMTE0LDEzIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotCQlyZXR1cm4gcmV0VmFsOwotCX0KKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQorICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CiAKLQlwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9CisgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQogCi0JcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KKyAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc3RhdGVsZXNzL2VqYi9TTFNCSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3N0YXRlbGVzcy9lamIvU0xTQkhvbWUuamF2YQppbmRleCA5YzMzMmViLi5lYTg0ZTIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc3RhdGVsZXNzL2VqYi9TTFNCSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zdGF0ZWxlc3MvZWpiL1NMU0JIb21lLmphdmEKQEAgLTIzLDYgKzIzLDYgQEAKIHB1YmxpYyBpbnRlcmZhY2UgU0xTQkhvbWUKICAgICBleHRlbmRzIEVKQkhvbWUKIHsKLQlTTFNCIGNyZWF0ZSgpCisgICAgU0xTQiBjcmVhdGUoKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBDcmVhdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2J1aWxkLnhtbAppbmRleCAyN2M1MWMxLi5mMTE0ODgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9idWlsZC54bWwKQEAgLTQyLDE3ICs0MiwxNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiPgogCi0JPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgotCTxhbnRjYWxsIHRhcmdldD0idGVzdC1hbGwiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ0ZXN0LWFsbCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlcG9ydCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJsaXRlIj4KIAotCTxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InRlc3QtbGl0ZSIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InRlc3QtbGl0ZSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlcG9ydC1saXRlIi8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTgxLDcgKzgxLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiPgogCi0JPGFudGNhbGwgdGFyZ2V0PSJzdGFydC1kYXRhYmFzZSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnQtZGF0YWJhc2UiLz4KICAgICAgICAgPGFudCB0YXJnZXQ9InN0YXJ0RG9tYWluIi8+CiAgICAgICAgIDxhbnQgdGFyZ2V0PSJjbGVhbi1yZXN1bHQiLz4KIApAQCAtMTA4LDE2ICsxMDgsMTYgQEAKIAogICAgICAgICA8YW50IGRpcj0ic3R1YnMiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJ0eHByb3AiIHRhcmdldD0iYWxsIi8+Ci0gICAgICAgIDxhbnQgZGlyPSJlamJjIiB0YXJnZXQ9ImFsbCIvPiAgCisgICAgICAgIDxhbnQgZGlyPSJlamJjIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0iZWpiMzAiIHRhcmdldD0iYWxsIi8+Ci0gICAgICAgIDxhbnQgZGlyPSJtZGIiIHRhcmdldD0iYWxsIi8+IAorICAgICAgICA8YW50IGRpcj0ibWRiIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0iY2xpIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0idGltZXIiIHRhcmdldD0iYWxsIi8+Ci0gICAgICAgIDxhbnQgZGlyPSJibXAiIHRhcmdldD0iYWxsIi8+ICAKLSAgICAgICAgPGFudCBkaXI9ImNtcCIgdGFyZ2V0PSJhbGwiLz4gIAorICAgICAgICA8YW50IGRpcj0iYm1wIiB0YXJnZXQ9ImFsbCIvPgorICAgICAgICA8YW50IGRpcj0iY21wIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0ic2ZzYiIgdGFyZ2V0PSJhbGwiLz4KLSAgICAgICAgPGFudCBkaXI9ImFsbG93ZWRtZXRob2RzIiB0YXJnZXQ9ImFsbCIvPiAKLSAgICAgICAgPGFudCBkaXI9ImptcyIgdGFyZ2V0PSJhbGwiLz4gIAorICAgICAgICA8YW50IGRpcj0iYWxsb3dlZG1ldGhvZHMiIHRhcmdldD0iYWxsIi8+CisgICAgICAgIDxhbnQgZGlyPSJqbXMiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJlamIzMiIgdGFyZ2V0PSJhbGwiLz4KIDwhLS0gZGlzYWJsZSBhcyBpdCBmYWlscyBvbiBodWRzb24gLi4uCiAtLT4KQEAgLTE1OCw3ICsxNTgsNyBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJTdG9wcGluZyBhcHAgc2VydmVyIGluc3RhbmNlIi8+CiAgICAgICAgIDxhbnQgdGFyZ2V0PSJzdG9wRG9tYWluIi8+CiAKLQk8YW50Y2FsbCB0YXJnZXQ9InN0b3AtZGF0YWJhc2UiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InN0b3AtZGF0YWJhc2UiLz4KIAogCiAgICAgICAgIDxyZWNvcmQgbmFtZT0iZWpiLm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgpAQCAtMTY2LDMwICsxNjYsMzAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ib3JiX2ludGVncmF0aW9uIj4KLSAgICAgICAgPGFudCBkaXI9ImVqYjMwIiB0YXJnZXQ9ImNsaWVudHZpZXciLz4gIAotICAgICAgICA8YW50IGRpcj0iZWpiMzAiIHRhcmdldD0iaGVsbG8iLz4gIAorICAgICAgICA8YW50IGRpcj0iZWpiMzAiIHRhcmdldD0iY2xpZW50dmlldyIvPgorICAgICAgICA8YW50IGRpcj0iZWpiMzAiIHRhcmdldD0iaGVsbG8iLz4KICAgICAgICAgPGFudCBkaXI9ImVqYmMiIHRhcmdldD0iYWxsIi8+Ci0gICAgICAgIDxhbnQgZGlyPSJ0eHByb3AiIHRhcmdldD0iYWxsIi8+ICAKLSAgICAgICAgPGFudCBkaXI9InN0dWJzIiB0YXJnZXQ9ImFsbCIvPiAgCi0gICAgICAgIDxhbnQgZGlyPSJibXAiIHRhcmdldD0idHh0ZXN0cyIvPiAKKyAgICAgICAgPGFudCBkaXI9InR4cHJvcCIgdGFyZ2V0PSJhbGwiLz4KKyAgICAgICAgPGFudCBkaXI9InN0dWJzIiB0YXJnZXQ9ImFsbCIvPgorICAgICAgICA8YW50IGRpcj0iYm1wIiB0YXJnZXQ9InR4dGVzdHMiLz4KIDwhLS0gZ3JhZHVhbGx5IHJlZW5hYmxlIHRoZSBleGlzdGluZyB0ZXN0cyBhcyBmZWF0dXJlcyBjb21lIG9uIGxpbmUKLSAgICAgICAgPGFudCBkaXI9ImJtcCIgdGFyZ2V0PSJoYW5kbGUiLz4gIAorICAgICAgICA8YW50IGRpcj0iYm1wIiB0YXJnZXQ9ImhhbmRsZSIvPgogLS0+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InN0YXJ0LWRhdGFiYXNlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlN0YXJ0aW5nIGRhdGFiYXNlIC0tZGJwb3J0ICR7ZGIucG9ydH0iLz4KLQk8IS0tIHNwYXduIGlzIGFkZGVkIHRvIHByZXZlbnQgYSBoYW5nIG9uIFdpbmRvd3MgLS0+Ci0JPGV4ZWMgc3Bhd249InRydWUiIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CisgICAgPCEtLSBzcGF3biBpcyBhZGRlZCB0byBwcmV2ZW50IGEgaGFuZyBvbiBXaW5kb3dzIC0tPgorICAgIDxleGVjIHNwYXduPSJ0cnVlIiBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICAgIDxhcmcgbGluZT0ic3RhcnQtZGF0YWJhc2UgLS1kYnBvcnQgJHtkYi5wb3J0fSIvPgotCTwvZXhlYz4KKyAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InN0b3AtZGF0YWJhc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iU3RvcHBpbmcgZGF0YWJhc2UgLS1kYnBvcnQgJHtkYi5wb3J0fSIvPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgICA8YXJnIGxpbmU9InN0b3AtZGF0YWJhc2UgIC0tZGJwb3J0ICR7ZGIucG9ydH0iLz4KLQk8L2V4ZWM+CisgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtcmVzdWx0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC0yNTgsNyArMjU4LDcgQEAKICAgICAgICAgPHJlY29yZCBuYW1lPSJzdHVicy5vdXRwdXQiIGFjdGlvbj0ic3RvcCIgLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXBvcnQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idGltZXIiPgogICAgICAgICA8cmVjb3JkIG5hbWU9InRpbWVyLm91dHB1dCIgYWN0aW9uPSJzdGFydCIgLz4KICAgICAgICAgICAgIDxhbnQgZGlyPSJ0aW1lciIgdGFyZ2V0PSJhbGwiLz4KQEAgLTI5NiwyMyArMjk2LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYiB0ZXN0cykKKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYiB0ZXN0cykKICAgICAgICAgICAgIGFudCBvcmJfaW50ZWdyYXRpb24gKEV4ZWN1dGVzIGFsbCBlamItcmVsYXRlZCBvcmIgaW50ZWdyYXRpb24gdGVzdHMKIAotCQkJYW50IGFsbG93ZWRtZXRob2RzIChFeGVjdXRlcyB0aGUgZWpiIGFsbG93ZWRtZXRob2RzIHRlc3RzKQotCQkJYW50IGJtcCAoRXhlY3V0ZXMgdGhlIGVqYiBibXAgdGVzdHMpCi0JCQlhbnQgZWpiYyAoRXhlY3V0ZXMgdGhlIGVqYiBlamJjIHRlc3RzKQotCQkJYW50IGptcyAoRXhlY3V0ZXMgdGhlIGVqYiBqbXMgdGVzdHMpCi0JCQlhbnQgbWRiIChFeGVjdXRlcyB0aGUgZWpiIG1kYiB0ZXN0cykKLQkJCWFudCBzdHVicyAoRXhlY3V0ZXMgdGhlIGVqYiBzdHVicyB0ZXN0cykKLQkJCWFudCB0aW1lciAoRXhlY3V0ZXMgdGhlIGVqYiB0aW1lciB0ZXN0cykKLQkJCWFudCB0eHByb3AgKEV4ZWN1dGVzIHRoZSBlamIgdHhwcm9wIHRlc3RzKQotCQkJYW50IHNmc2IgKEV4ZWN1dGVzIHRoZSBlamIgc2ZzYiB0ZXN0cykKLQkJCWFudCBzdHJlc3MgKEV4ZWN1dGVzIHRoZSBlamIgc3RyZXNzIHRlc3RzKQotCQkJYW50IGVqYjMwIChFeGVjdXRlcyB0aGUgZWpiMzAgdGVzdHMpCi0JCQlhbnQgZWpiMzEgKEV4ZWN1dGVzIHRoZSBlamIzMSB0ZXN0cykKLQk8L2VjaG8+CisgICAgICAgICAgICBhbnQgYWxsb3dlZG1ldGhvZHMgKEV4ZWN1dGVzIHRoZSBlamIgYWxsb3dlZG1ldGhvZHMgdGVzdHMpCisgICAgICAgICAgICBhbnQgYm1wIChFeGVjdXRlcyB0aGUgZWpiIGJtcCB0ZXN0cykKKyAgICAgICAgICAgIGFudCBlamJjIChFeGVjdXRlcyB0aGUgZWpiIGVqYmMgdGVzdHMpCisgICAgICAgICAgICBhbnQgam1zIChFeGVjdXRlcyB0aGUgZWpiIGptcyB0ZXN0cykKKyAgICAgICAgICAgIGFudCBtZGIgKEV4ZWN1dGVzIHRoZSBlamIgbWRiIHRlc3RzKQorICAgICAgICAgICAgYW50IHN0dWJzIChFeGVjdXRlcyB0aGUgZWpiIHN0dWJzIHRlc3RzKQorICAgICAgICAgICAgYW50IHRpbWVyIChFeGVjdXRlcyB0aGUgZWpiIHRpbWVyIHRlc3RzKQorICAgICAgICAgICAgYW50IHR4cHJvcCAoRXhlY3V0ZXMgdGhlIGVqYiB0eHByb3AgdGVzdHMpCisgICAgICAgICAgICBhbnQgc2ZzYiAoRXhlY3V0ZXMgdGhlIGVqYiBzZnNiIHRlc3RzKQorICAgICAgICAgICAgYW50IHN0cmVzcyAoRXhlY3V0ZXMgdGhlIGVqYiBzdHJlc3MgdGVzdHMpCisgICAgICAgICAgICBhbnQgZWpiMzAgKEV4ZWN1dGVzIHRoZSBlamIzMCB0ZXN0cykKKyAgICAgICAgICAgIGFudCBlamIzMSAoRXhlY3V0ZXMgdGhlIGVqYjMxIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDMzOTc4NjEuLjc5MWE4MDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItY2xhc3Nsb2FkLWxpZmVjeWNsZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvYnVpbGQueG1sCmluZGV4IDU1Y2RmMDIuLjU0ZWM2YzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ3LDE3ICs0NywxNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIKICAgICAgICAgICBmaWxlPSJHb29nbGVTZWFyY2gud3NkbCIvPgotICAgICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAotCSBmaWxlPSJHb29nbGVNYXBwaW5nLnhtbCIvPgorICAgICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCisgICAgIGZpbGU9Ikdvb2dsZU1hcHBpbmcueG1sIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MsR29vZ2xlTWFwcGluZy54bWwsTUVUQS1JTkYvd3NkbC8qKiIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywqKi8qRm9vLmNsYXNzLCoqLypGb29Ib21lLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY1LDEwICs2NSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNGI5NGJmMy4uYmYyNDUyNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzcsMzEgKzM3LDMxIEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItY2xhc3Nsb2FkLWxpZmVjeWNsZUlEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgZWpiIHJlZiAiKTsKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lciAKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lcgogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvZm9vIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9ianJlZiA9ICIgKyBvYmpyZWYpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEZvb0hvbWUgIGhvbWUgPSAoRm9vSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cKICAgICAgICAgICAgICAgICAob2JqcmVmLCBGb29Ib21lLmNsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIAorCisKICAgICAgICAgICAgIEZvbyBmID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBpbnZva2UgbWV0aG9kIG9uIHRoZSBFSkIKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgZWpiIik7CiAgICAgICAgICAgICBmLmNhbGxIZWxsbygpOwpAQCAtNzYsOCArNzYsOCBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggMTJiZmRlNC4uMDk3MTQ1MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgICAgIDx3c2RsLWZpbGU+TUVUQS1JTkYvd3NkbC9Hb29nbGVTZWFyY2gud3NkbDwvd3NkbC1maWxlPgogICAgICAgICA8amF4cnBjLW1hcHBpbmctZmlsZT5Hb29nbGVNYXBwaW5nLnhtbDwvamF4cnBjLW1hcHBpbmctZmlsZT4KICAgICAgICAgPHNlcnZpY2UtcW5hbWUgeG1sbnM6c2VydmljZW5zPSJ1cm46R29vZ2xlU2VhcmNoIj5zZXJ2aWNlbnM6R29vZ2xlU2VhcmNoU2VydmljZQotICAgICAgICA8L3NlcnZpY2UtcW5hbWU+ICAgICAgICAgICAgICAgCisgICAgICAgIDwvc2VydmljZS1xbmFtZT4KICAgICAgIDwvc2VydmljZS1yZWY+CiAgICAgICA8c2VydmljZS1yZWY+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5nb29nbGUgc2VydmljZSByZWY8L2Rlc2NyaXB0aW9uPgpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICA8d3NkbC1maWxlPk1FVEEtSU5GL3dzZGwvR29vZ2xlU2VhcmNoLndzZGw8L3dzZGwtZmlsZT4KICAgICAgICAgPGpheHJwYy1tYXBwaW5nLWZpbGU+R29vZ2xlTWFwcGluZy54bWw8L2pheHJwYy1tYXBwaW5nLWZpbGU+CiAgICAgICAgIDxzZXJ2aWNlLXFuYW1lIHhtbG5zOnNlcnZpY2Vucz0idXJuOkdvb2dsZVNlYXJjaCI+c2VydmljZW5zOkdvb2dsZVNlYXJjaFNlcnZpY2UKLSAgICAgICAgPC9zZXJ2aWNlLXFuYW1lPiAgICAgICAgICAgICAgIAorICAgICAgICA8L3NlcnZpY2UtcW5hbWU+CiAgICAgICA8L3NlcnZpY2UtcmVmPgogICAgICAgPHNlY3VyaXR5LWlkZW50aXR5PgogICAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eS8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvRGlyZWN0b3J5Q2F0ZWdvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9EaXJlY3RvcnlDYXRlZ29yeS5qYXZhCmluZGV4IGViNDVkMjYuLmJlYTZhMzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9EaXJlY3RvcnlDYXRlZ29yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9EaXJlY3RvcnlDYXRlZ29yeS5qYXZhCkBAIC0yNCwyNyArMjQsMjcgQEAKIHB1YmxpYyBjbGFzcyBEaXJlY3RvcnlDYXRlZ29yeSB7CiAgICAgcHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgZnVsbFZpZXdhYmxlTmFtZTsKICAgICBwcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyBzcGVjaWFsRW5jb2Rpbmc7Ci0gICAgCisKICAgICBwdWJsaWMgRGlyZWN0b3J5Q2F0ZWdvcnkoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIERpcmVjdG9yeUNhdGVnb3J5KGphdmEubGFuZy5TdHJpbmcgZnVsbFZpZXdhYmxlTmFtZSwgamF2YS5sYW5nLlN0cmluZyBzcGVjaWFsRW5jb2RpbmcpIHsKICAgICAgICAgdGhpcy5mdWxsVmlld2FibGVOYW1lID0gZnVsbFZpZXdhYmxlTmFtZTsKICAgICAgICAgdGhpcy5zcGVjaWFsRW5jb2RpbmcgPSBzcGVjaWFsRW5jb2Rpbmc7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0RnVsbFZpZXdhYmxlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIGZ1bGxWaWV3YWJsZU5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RnVsbFZpZXdhYmxlTmFtZShqYXZhLmxhbmcuU3RyaW5nIGZ1bGxWaWV3YWJsZU5hbWUpIHsKICAgICAgICAgdGhpcy5mdWxsVmlld2FibGVOYW1lID0gZnVsbFZpZXdhYmxlTmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRTcGVjaWFsRW5jb2RpbmcoKSB7CiAgICAgICAgIHJldHVybiBzcGVjaWFsRW5jb2Rpbmc7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0U3BlY2lhbEVuY29kaW5nKGphdmEubGFuZy5TdHJpbmcgc3BlY2lhbEVuY29kaW5nKSB7CiAgICAgICAgIHRoaXMuc3BlY2lhbEVuY29kaW5nID0gc3BlY2lhbEVuY29kaW5nOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Gb29CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvRm9vQmVhbi5qYXZhCmluZGV4IGE5MmJjMWIuLmIyMzEwZTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Gb29CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0Zvb0JlYW4uamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTM0LDcgKzM0LDcgQEAKICAgICBwdWJsaWMgRm9vQmVhbigpIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CZWFuOjplamJDcmVhdGUoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmVhbjo6ZWpiQ3JlYXRlKCkiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvR29vZ2xlU2VhcmNoX2VqYkNyZWF0ZSIpOwpAQCAtNDgsOCArNDgsOCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CZWFuOjpzZXRTZXNzaW9uQ29udGV4dCgpIik7Ci0JdGhpcy5zYyA9IHNjOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmVhbjo6c2V0U2Vzc2lvbkNvbnRleHQoKSIpOworICAgIHRoaXMuc2MgPSBzYzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBjYWxsSGVsbG8oKSB7CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmVhbjo6ZWpiUmVtb3ZlKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0JlYW46OmVqYlJlbW92ZSgpIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL0dvb2dsZVNlYXJjaF9lamJSZW1vdmUiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Hb29nbGVTZWFyY2hQb3J0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUG9ydC5qYXZhCmluZGV4IGFmZDBhNjc3NS4uYmViMDQwZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFBvcnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUG9ydC5qYXZhCkBAIC0yMSwxMCArMjEsMTAgQEAKIHBhY2thZ2UgY29tLnN1bi5zMWFzZGV2LmVqYi5jbGFzc2xvYWQubGlmZWN5Y2xlOwogCiBwdWJsaWMgaW50ZXJmYWNlIEdvb2dsZVNlYXJjaFBvcnQgZXh0ZW5kcyBqYXZhLnJtaS5SZW1vdGUgewotICAgIHB1YmxpYyBieXRlW10gZG9HZXRDYWNoZWRQYWdlKGphdmEubGFuZy5TdHJpbmcga2V5LCBqYXZhLmxhbmcuU3RyaW5nIHVybCkgdGhyb3dzIAorICAgIHB1YmxpYyBieXRlW10gZG9HZXRDYWNoZWRQYWdlKGphdmEubGFuZy5TdHJpbmcga2V5LCBqYXZhLmxhbmcuU3RyaW5nIHVybCkgdGhyb3dzCiAgICAgICAgICBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZG9TcGVsbGluZ1N1Z2dlc3Rpb24oamF2YS5sYW5nLlN0cmluZyBrZXksIGphdmEubGFuZy5TdHJpbmcgcGhyYXNlKSB0aHJvd3MgCisgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZG9TcGVsbGluZ1N1Z2dlc3Rpb24oamF2YS5sYW5nLlN0cmluZyBrZXksIGphdmEubGFuZy5TdHJpbmcgcGhyYXNlKSB0aHJvd3MKICAgICAgICAgIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICBwdWJsaWMgY29tLnN1bi5zMWFzZGV2LmVqYi5jbGFzc2xvYWQubGlmZWN5Y2xlLkdvb2dsZVNlYXJjaFJlc3VsdCBkb0dvb2dsZVNlYXJjaChqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyBxLCBpbnQgc3RhcnQsIGludCBtYXhSZXN1bHRzLCBib29sZWFuIGZpbHRlciwgamF2YS5sYW5nLlN0cmluZyByZXN0cmljdCwgYm9vbGVhbiBzYWZlU2VhcmNoLCBqYXZhLmxhbmcuU3RyaW5nIGxyLCBqYXZhLmxhbmcuU3RyaW5nIGllLCBqYXZhLmxhbmcuU3RyaW5nIG9lKSB0aHJvd3MgCisgICAgcHVibGljIGNvbS5zdW4uczFhc2Rldi5lamIuY2xhc3Nsb2FkLmxpZmVjeWNsZS5Hb29nbGVTZWFyY2hSZXN1bHQgZG9Hb29nbGVTZWFyY2goamF2YS5sYW5nLlN0cmluZyBrZXksIGphdmEubGFuZy5TdHJpbmcgcSwgaW50IHN0YXJ0LCBpbnQgbWF4UmVzdWx0cywgYm9vbGVhbiBmaWx0ZXIsIGphdmEubGFuZy5TdHJpbmcgcmVzdHJpY3QsIGJvb2xlYW4gc2FmZVNlYXJjaCwgamF2YS5sYW5nLlN0cmluZyBsciwgamF2YS5sYW5nLlN0cmluZyBpZSwgamF2YS5sYW5nLlN0cmluZyBvZSkgdGhyb3dzCiAgICAgICAgICBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUG9ydF9JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUG9ydF9JbXBsLmphdmEKaW5kZXggMWFhNzNlMC4uNDdkNzM0YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFBvcnRfSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Hb29nbGVTZWFyY2hQb3J0X0ltcGwuamF2YQpAQCAtMTcsMjEgKzE3LDIxIEBACiBwYWNrYWdlIGNvbS5zdW4uczFhc2Rldi5lamIuY2xhc3Nsb2FkLmxpZmVjeWNsZTsKIAogcHVibGljIGNsYXNzIEdvb2dsZVNlYXJjaFBvcnRfSW1wbCBpbXBsZW1lbnRzIGNvbS5zdW4uczFhc2Rldi5lamIuY2xhc3Nsb2FkLmxpZmVjeWNsZS5Hb29nbGVTZWFyY2hQb3J0LCBqYXZhLnJtaS5SZW1vdGUgewotICAgIHB1YmxpYyBieXRlW10gZG9HZXRDYWNoZWRQYWdlKGphdmEubGFuZy5TdHJpbmcga2V5LCBqYXZhLmxhbmcuU3RyaW5nIHVybCkgdGhyb3dzIAorICAgIHB1YmxpYyBieXRlW10gZG9HZXRDYWNoZWRQYWdlKGphdmEubGFuZy5TdHJpbmcga2V5LCBqYXZhLmxhbmcuU3RyaW5nIHVybCkgdGhyb3dzCiAgICAgICAgICBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBieXRlW10gX3JldFZhbCA9IG51bGw7CiAgICAgICAgIHJldHVybiBfcmV0VmFsOwogICAgIH0KLSAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBkb1NwZWxsaW5nU3VnZ2VzdGlvbihqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyBwaHJhc2UpIHRocm93cyAKKyAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBkb1NwZWxsaW5nU3VnZ2VzdGlvbihqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyBwaHJhc2UpIHRocm93cwogICAgICAgICAgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgamF2YS5sYW5nLlN0cmluZyBfcmV0VmFsID0gbnVsbDsKICAgICAgICAgcmV0dXJuIF9yZXRWYWw7CiAgICAgfQotICAgIHB1YmxpYyBjb20uc3VuLnMxYXNkZXYuZWpiLmNsYXNzbG9hZC5saWZlY3ljbGUuR29vZ2xlU2VhcmNoUmVzdWx0IGRvR29vZ2xlU2VhcmNoKGphdmEubGFuZy5TdHJpbmcga2V5LCBqYXZhLmxhbmcuU3RyaW5nIHEsIGludCBzdGFydCwgaW50IG1heFJlc3VsdHMsIGJvb2xlYW4gZmlsdGVyLCBqYXZhLmxhbmcuU3RyaW5nIHJlc3RyaWN0LCBib29sZWFuIHNhZmVTZWFyY2gsIGphdmEubGFuZy5TdHJpbmcgbHIsIGphdmEubGFuZy5TdHJpbmcgaWUsIGphdmEubGFuZy5TdHJpbmcgb2UpIHRocm93cyAKKyAgICBwdWJsaWMgY29tLnN1bi5zMWFzZGV2LmVqYi5jbGFzc2xvYWQubGlmZWN5Y2xlLkdvb2dsZVNlYXJjaFJlc3VsdCBkb0dvb2dsZVNlYXJjaChqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyBxLCBpbnQgc3RhcnQsIGludCBtYXhSZXN1bHRzLCBib29sZWFuIGZpbHRlciwgamF2YS5sYW5nLlN0cmluZyByZXN0cmljdCwgYm9vbGVhbiBzYWZlU2VhcmNoLCBqYXZhLmxhbmcuU3RyaW5nIGxyLCBqYXZhLmxhbmcuU3RyaW5nIGllLCBqYXZhLmxhbmcuU3RyaW5nIG9lKSB0aHJvd3MKICAgICAgICAgIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIGNvbS5zdW4uczFhc2Rldi5lamIuY2xhc3Nsb2FkLmxpZmVjeWNsZS5Hb29nbGVTZWFyY2hSZXN1bHQgX3JldFZhbCA9IG51bGw7CiAgICAgICAgIHJldHVybiBfcmV0VmFsOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Hb29nbGVTZWFyY2hQb3J0X2RvR2V0Q2FjaGVkUGFnZV9SZXF1ZXN0U3RydWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUG9ydF9kb0dldENhY2hlZFBhZ2VfUmVxdWVzdFN0cnVjdC5qYXZhCmluZGV4IDdjZmRhY2MuLjAwZWRmZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Hb29nbGVTZWFyY2hQb3J0X2RvR2V0Q2FjaGVkUGFnZV9SZXF1ZXN0U3RydWN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFBvcnRfZG9HZXRDYWNoZWRQYWdlX1JlcXVlc3RTdHJ1Y3QuamF2YQpAQCAtMjQsMjcgKzI0LDI3IEBACiBwdWJsaWMgY2xhc3MgR29vZ2xlU2VhcmNoUG9ydF9kb0dldENhY2hlZFBhZ2VfUmVxdWVzdFN0cnVjdCB7CiAgICAgcHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcga2V5OwogICAgIHByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIHVybDsKLSAgICAKKwogICAgIHB1YmxpYyBHb29nbGVTZWFyY2hQb3J0X2RvR2V0Q2FjaGVkUGFnZV9SZXF1ZXN0U3RydWN0KCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBHb29nbGVTZWFyY2hQb3J0X2RvR2V0Q2FjaGVkUGFnZV9SZXF1ZXN0U3RydWN0KGphdmEubGFuZy5TdHJpbmcga2V5LCBqYXZhLmxhbmcuU3RyaW5nIHVybCkgewogICAgICAgICB0aGlzLmtleSA9IGtleTsKICAgICAgICAgdGhpcy51cmwgPSB1cmw7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0S2V5KCkgewogICAgICAgICByZXR1cm4ga2V5OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldEtleShqYXZhLmxhbmcuU3RyaW5nIGtleSkgewogICAgICAgICB0aGlzLmtleSA9IGtleTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRVcmwoKSB7CiAgICAgICAgIHJldHVybiB1cmw7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VXJsKGphdmEubGFuZy5TdHJpbmcgdXJsKSB7CiAgICAgICAgIHRoaXMudXJsID0gdXJsOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Hb29nbGVTZWFyY2hQb3J0X2RvR2V0Q2FjaGVkUGFnZV9SZXNwb25zZVN0cnVjdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFBvcnRfZG9HZXRDYWNoZWRQYWdlX1Jlc3BvbnNlU3RydWN0LmphdmEKaW5kZXggYWQ4NDFjMS4uZjgwZmQwNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFBvcnRfZG9HZXRDYWNoZWRQYWdlX1Jlc3BvbnNlU3RydWN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFBvcnRfZG9HZXRDYWNoZWRQYWdlX1Jlc3BvbnNlU3RydWN0LmphdmEKQEAgLTIzLDE4ICsyMywxOCBAQAogCiBwdWJsaWMgY2xhc3MgR29vZ2xlU2VhcmNoUG9ydF9kb0dldENhY2hlZFBhZ2VfUmVzcG9uc2VTdHJ1Y3QgewogICAgIHByb3RlY3RlZCBieXRlW10gX3JldHVybjsKLSAgICAKKwogICAgIHB1YmxpYyBHb29nbGVTZWFyY2hQb3J0X2RvR2V0Q2FjaGVkUGFnZV9SZXNwb25zZVN0cnVjdCgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgR29vZ2xlU2VhcmNoUG9ydF9kb0dldENhY2hlZFBhZ2VfUmVzcG9uc2VTdHJ1Y3QoYnl0ZVtdIF9yZXR1cm4pIHsKICAgICAgICAgdGhpcy5fcmV0dXJuID0gX3JldHVybjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYnl0ZVtdIGdldF9yZXR1cm4oKSB7CiAgICAgICAgIHJldHVybiBfcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldF9yZXR1cm4oYnl0ZVtdIF9yZXR1cm4pIHsKICAgICAgICAgdGhpcy5fcmV0dXJuID0gX3JldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUG9ydF9kb0dvb2dsZVNlYXJjaF9SZXF1ZXN0U3RydWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUG9ydF9kb0dvb2dsZVNlYXJjaF9SZXF1ZXN0U3RydWN0LmphdmEKaW5kZXggOTY4Y2JmYy4uMjA2ZjNlNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFBvcnRfZG9Hb29nbGVTZWFyY2hfUmVxdWVzdFN0cnVjdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Hb29nbGVTZWFyY2hQb3J0X2RvR29vZ2xlU2VhcmNoX1JlcXVlc3RTdHJ1Y3QuamF2YQpAQCAtMzIsMTAgKzMyLDEwIEBACiAgICAgcHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgbHI7CiAgICAgcHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgaWU7CiAgICAgcHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgb2U7Ci0gICAgCisKICAgICBwdWJsaWMgR29vZ2xlU2VhcmNoUG9ydF9kb0dvb2dsZVNlYXJjaF9SZXF1ZXN0U3RydWN0KCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBHb29nbGVTZWFyY2hQb3J0X2RvR29vZ2xlU2VhcmNoX1JlcXVlc3RTdHJ1Y3QoamF2YS5sYW5nLlN0cmluZyBrZXksIGphdmEubGFuZy5TdHJpbmcgcSwgaW50IHN0YXJ0LCBpbnQgbWF4UmVzdWx0cywgYm9vbGVhbiBmaWx0ZXIsIGphdmEubGFuZy5TdHJpbmcgcmVzdHJpY3QsIGJvb2xlYW4gc2FmZVNlYXJjaCwgamF2YS5sYW5nLlN0cmluZyBsciwgamF2YS5sYW5nLlN0cmluZyBpZSwgamF2YS5sYW5nLlN0cmluZyBvZSkgewogICAgICAgICB0aGlzLmtleSA9IGtleTsKICAgICAgICAgdGhpcy5xID0gcTsKQEAgLTQ4LDgzICs0OCw4MyBAQAogICAgICAgICB0aGlzLmllID0gaWU7CiAgICAgICAgIHRoaXMub2UgPSBvZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRLZXkoKSB7CiAgICAgICAgIHJldHVybiBrZXk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0S2V5KGphdmEubGFuZy5TdHJpbmcga2V5KSB7CiAgICAgICAgIHRoaXMua2V5ID0ga2V5OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFEoKSB7CiAgICAgICAgIHJldHVybiBxOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFEoamF2YS5sYW5nLlN0cmluZyBxKSB7CiAgICAgICAgIHRoaXMucSA9IHE7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGludCBnZXRTdGFydCgpIHsKICAgICAgICAgcmV0dXJuIHN0YXJ0OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFN0YXJ0KGludCBzdGFydCkgewogICAgICAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGludCBnZXRNYXhSZXN1bHRzKCkgewogICAgICAgICByZXR1cm4gbWF4UmVzdWx0czsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRNYXhSZXN1bHRzKGludCBtYXhSZXN1bHRzKSB7CiAgICAgICAgIHRoaXMubWF4UmVzdWx0cyA9IG1heFJlc3VsdHM7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaXNGaWx0ZXIoKSB7CiAgICAgICAgIHJldHVybiBmaWx0ZXI7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RmlsdGVyKGJvb2xlYW4gZmlsdGVyKSB7CiAgICAgICAgIHRoaXMuZmlsdGVyID0gZmlsdGVyOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFJlc3RyaWN0KCkgewogICAgICAgICByZXR1cm4gcmVzdHJpY3Q7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0UmVzdHJpY3QoamF2YS5sYW5nLlN0cmluZyByZXN0cmljdCkgewogICAgICAgICB0aGlzLnJlc3RyaWN0ID0gcmVzdHJpY3Q7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaXNTYWZlU2VhcmNoKCkgewogICAgICAgICByZXR1cm4gc2FmZVNlYXJjaDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTYWZlU2VhcmNoKGJvb2xlYW4gc2FmZVNlYXJjaCkgewogICAgICAgICB0aGlzLnNhZmVTZWFyY2ggPSBzYWZlU2VhcmNoOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldExyKCkgewogICAgICAgICByZXR1cm4gbHI7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0THIoamF2YS5sYW5nLlN0cmluZyBscikgewogICAgICAgICB0aGlzLmxyID0gbHI7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0SWUoKSB7CiAgICAgICAgIHJldHVybiBpZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRJZShqYXZhLmxhbmcuU3RyaW5nIGllKSB7CiAgICAgICAgIHRoaXMuaWUgPSBpZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRPZSgpIHsKICAgICAgICAgcmV0dXJuIG9lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldE9lKGphdmEubGFuZy5TdHJpbmcgb2UpIHsKICAgICAgICAgdGhpcy5vZSA9IG9lOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Hb29nbGVTZWFyY2hQb3J0X2RvR29vZ2xlU2VhcmNoX1Jlc3BvbnNlU3RydWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUG9ydF9kb0dvb2dsZVNlYXJjaF9SZXNwb25zZVN0cnVjdC5qYXZhCmluZGV4IGMwYjQ1MDMuLjE5NGJmOTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Hb29nbGVTZWFyY2hQb3J0X2RvR29vZ2xlU2VhcmNoX1Jlc3BvbnNlU3RydWN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFBvcnRfZG9Hb29nbGVTZWFyY2hfUmVzcG9uc2VTdHJ1Y3QuamF2YQpAQCAtMjMsMTggKzIzLDE4IEBACiAKIHB1YmxpYyBjbGFzcyBHb29nbGVTZWFyY2hQb3J0X2RvR29vZ2xlU2VhcmNoX1Jlc3BvbnNlU3RydWN0IHsKICAgICBwcm90ZWN0ZWQgY29tLnN1bi5zMWFzZGV2LmVqYi5jbGFzc2xvYWQubGlmZWN5Y2xlLkdvb2dsZVNlYXJjaFJlc3VsdCBfcmV0dXJuOwotICAgIAorCiAgICAgcHVibGljIEdvb2dsZVNlYXJjaFBvcnRfZG9Hb29nbGVTZWFyY2hfUmVzcG9uc2VTdHJ1Y3QoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIEdvb2dsZVNlYXJjaFBvcnRfZG9Hb29nbGVTZWFyY2hfUmVzcG9uc2VTdHJ1Y3QoY29tLnN1bi5zMWFzZGV2LmVqYi5jbGFzc2xvYWQubGlmZWN5Y2xlLkdvb2dsZVNlYXJjaFJlc3VsdCBfcmV0dXJuKSB7CiAgICAgICAgIHRoaXMuX3JldHVybiA9IF9yZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGNvbS5zdW4uczFhc2Rldi5lamIuY2xhc3Nsb2FkLmxpZmVjeWNsZS5Hb29nbGVTZWFyY2hSZXN1bHQgZ2V0X3JldHVybigpIHsKICAgICAgICAgcmV0dXJuIF9yZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0X3JldHVybihjb20uc3VuLnMxYXNkZXYuZWpiLmNsYXNzbG9hZC5saWZlY3ljbGUuR29vZ2xlU2VhcmNoUmVzdWx0IF9yZXR1cm4pIHsKICAgICAgICAgdGhpcy5fcmV0dXJuID0gX3JldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUG9ydF9kb1NwZWxsaW5nU3VnZ2VzdGlvbl9SZXF1ZXN0U3RydWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUG9ydF9kb1NwZWxsaW5nU3VnZ2VzdGlvbl9SZXF1ZXN0U3RydWN0LmphdmEKaW5kZXggMjA4MTQ2Yi4uNmY1ZDJjMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFBvcnRfZG9TcGVsbGluZ1N1Z2dlc3Rpb25fUmVxdWVzdFN0cnVjdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Hb29nbGVTZWFyY2hQb3J0X2RvU3BlbGxpbmdTdWdnZXN0aW9uX1JlcXVlc3RTdHJ1Y3QuamF2YQpAQCAtMjQsMjcgKzI0LDI3IEBACiBwdWJsaWMgY2xhc3MgR29vZ2xlU2VhcmNoUG9ydF9kb1NwZWxsaW5nU3VnZ2VzdGlvbl9SZXF1ZXN0U3RydWN0IHsKICAgICBwcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyBrZXk7CiAgICAgcHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgcGhyYXNlOwotICAgIAorCiAgICAgcHVibGljIEdvb2dsZVNlYXJjaFBvcnRfZG9TcGVsbGluZ1N1Z2dlc3Rpb25fUmVxdWVzdFN0cnVjdCgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgR29vZ2xlU2VhcmNoUG9ydF9kb1NwZWxsaW5nU3VnZ2VzdGlvbl9SZXF1ZXN0U3RydWN0KGphdmEubGFuZy5TdHJpbmcga2V5LCBqYXZhLmxhbmcuU3RyaW5nIHBocmFzZSkgewogICAgICAgICB0aGlzLmtleSA9IGtleTsKICAgICAgICAgdGhpcy5waHJhc2UgPSBwaHJhc2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0S2V5KCkgewogICAgICAgICByZXR1cm4ga2V5OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldEtleShqYXZhLmxhbmcuU3RyaW5nIGtleSkgewogICAgICAgICB0aGlzLmtleSA9IGtleTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRQaHJhc2UoKSB7CiAgICAgICAgIHJldHVybiBwaHJhc2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0UGhyYXNlKGphdmEubGFuZy5TdHJpbmcgcGhyYXNlKSB7CiAgICAgICAgIHRoaXMucGhyYXNlID0gcGhyYXNlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Hb29nbGVTZWFyY2hQb3J0X2RvU3BlbGxpbmdTdWdnZXN0aW9uX1Jlc3BvbnNlU3RydWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUG9ydF9kb1NwZWxsaW5nU3VnZ2VzdGlvbl9SZXNwb25zZVN0cnVjdC5qYXZhCmluZGV4IDFiNTYwNDEuLjA1NDMyZDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Hb29nbGVTZWFyY2hQb3J0X2RvU3BlbGxpbmdTdWdnZXN0aW9uX1Jlc3BvbnNlU3RydWN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFBvcnRfZG9TcGVsbGluZ1N1Z2dlc3Rpb25fUmVzcG9uc2VTdHJ1Y3QuamF2YQpAQCAtMjMsMTggKzIzLDE4IEBACiAKIHB1YmxpYyBjbGFzcyBHb29nbGVTZWFyY2hQb3J0X2RvU3BlbGxpbmdTdWdnZXN0aW9uX1Jlc3BvbnNlU3RydWN0IHsKICAgICBwcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyBfcmV0dXJuOwotICAgIAorCiAgICAgcHVibGljIEdvb2dsZVNlYXJjaFBvcnRfZG9TcGVsbGluZ1N1Z2dlc3Rpb25fUmVzcG9uc2VTdHJ1Y3QoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIEdvb2dsZVNlYXJjaFBvcnRfZG9TcGVsbGluZ1N1Z2dlc3Rpb25fUmVzcG9uc2VTdHJ1Y3QoamF2YS5sYW5nLlN0cmluZyBfcmV0dXJuKSB7CiAgICAgICAgIHRoaXMuX3JldHVybiA9IF9yZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0X3JldHVybigpIHsKICAgICAgICAgcmV0dXJuIF9yZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0X3JldHVybihqYXZhLmxhbmcuU3RyaW5nIF9yZXR1cm4pIHsKICAgICAgICAgdGhpcy5fcmV0dXJuID0gX3JldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUmVzdWx0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUmVzdWx0LmphdmEKaW5kZXggMjQxOTgxZi4uODM1MWFiYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFJlc3VsdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Hb29nbGVTZWFyY2hSZXN1bHQuamF2YQpAQCAtMzMsMTAgKzMzLDEwIEBACiAgICAgcHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgc2VhcmNoVGlwczsKICAgICBwcm90ZWN0ZWQgY29tLnN1bi5zMWFzZGV2LmVqYi5jbGFzc2xvYWQubGlmZWN5Y2xlLkRpcmVjdG9yeUNhdGVnb3J5W10gZGlyZWN0b3J5Q2F0ZWdvcmllczsKICAgICBwcm90ZWN0ZWQgZG91YmxlIHNlYXJjaFRpbWU7Ci0gICAgCisKICAgICBwdWJsaWMgR29vZ2xlU2VhcmNoUmVzdWx0KCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBHb29nbGVTZWFyY2hSZXN1bHQoYm9vbGVhbiBkb2N1bWVudEZpbHRlcmluZywgamF2YS5sYW5nLlN0cmluZyBzZWFyY2hDb21tZW50cywgaW50IGVzdGltYXRlZFRvdGFsUmVzdWx0c0NvdW50LCBib29sZWFuIGVzdGltYXRlSXNFeGFjdCwgY29tLnN1bi5zMWFzZGV2LmVqYi5jbGFzc2xvYWQubGlmZWN5Y2xlLlJlc3VsdEVsZW1lbnRbXSByZXN1bHRFbGVtZW50cywgamF2YS5sYW5nLlN0cmluZyBzZWFyY2hRdWVyeSwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgamF2YS5sYW5nLlN0cmluZyBzZWFyY2hUaXBzLCBjb20uc3VuLnMxYXNkZXYuZWpiLmNsYXNzbG9hZC5saWZlY3ljbGUuRGlyZWN0b3J5Q2F0ZWdvcnlbXSBkaXJlY3RvcnlDYXRlZ29yaWVzLCBkb3VibGUgc2VhcmNoVGltZSkgewogICAgICAgICB0aGlzLmRvY3VtZW50RmlsdGVyaW5nID0gZG9jdW1lbnRGaWx0ZXJpbmc7CiAgICAgICAgIHRoaXMuc2VhcmNoQ29tbWVudHMgPSBzZWFyY2hDb21tZW50czsKQEAgLTUwLDkxICs1MCw5MSBAQAogICAgICAgICB0aGlzLmRpcmVjdG9yeUNhdGVnb3JpZXMgPSBkaXJlY3RvcnlDYXRlZ29yaWVzOwogICAgICAgICB0aGlzLnNlYXJjaFRpbWUgPSBzZWFyY2hUaW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGlzRG9jdW1lbnRGaWx0ZXJpbmcoKSB7CiAgICAgICAgIHJldHVybiBkb2N1bWVudEZpbHRlcmluZzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREb2N1bWVudEZpbHRlcmluZyhib29sZWFuIGRvY3VtZW50RmlsdGVyaW5nKSB7CiAgICAgICAgIHRoaXMuZG9jdW1lbnRGaWx0ZXJpbmcgPSBkb2N1bWVudEZpbHRlcmluZzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRTZWFyY2hDb21tZW50cygpIHsKICAgICAgICAgcmV0dXJuIHNlYXJjaENvbW1lbnRzOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNlYXJjaENvbW1lbnRzKGphdmEubGFuZy5TdHJpbmcgc2VhcmNoQ29tbWVudHMpIHsKICAgICAgICAgdGhpcy5zZWFyY2hDb21tZW50cyA9IHNlYXJjaENvbW1lbnRzOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBpbnQgZ2V0RXN0aW1hdGVkVG90YWxSZXN1bHRzQ291bnQoKSB7CiAgICAgICAgIHJldHVybiBlc3RpbWF0ZWRUb3RhbFJlc3VsdHNDb3VudDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRFc3RpbWF0ZWRUb3RhbFJlc3VsdHNDb3VudChpbnQgZXN0aW1hdGVkVG90YWxSZXN1bHRzQ291bnQpIHsKICAgICAgICAgdGhpcy5lc3RpbWF0ZWRUb3RhbFJlc3VsdHNDb3VudCA9IGVzdGltYXRlZFRvdGFsUmVzdWx0c0NvdW50OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGlzRXN0aW1hdGVJc0V4YWN0KCkgewogICAgICAgICByZXR1cm4gZXN0aW1hdGVJc0V4YWN0OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldEVzdGltYXRlSXNFeGFjdChib29sZWFuIGVzdGltYXRlSXNFeGFjdCkgewogICAgICAgICB0aGlzLmVzdGltYXRlSXNFeGFjdCA9IGVzdGltYXRlSXNFeGFjdDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgY29tLnN1bi5zMWFzZGV2LmVqYi5jbGFzc2xvYWQubGlmZWN5Y2xlLlJlc3VsdEVsZW1lbnRbXSBnZXRSZXN1bHRFbGVtZW50cygpIHsKICAgICAgICAgcmV0dXJuIHJlc3VsdEVsZW1lbnRzOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFJlc3VsdEVsZW1lbnRzKGNvbS5zdW4uczFhc2Rldi5lamIuY2xhc3Nsb2FkLmxpZmVjeWNsZS5SZXN1bHRFbGVtZW50W10gcmVzdWx0RWxlbWVudHMpIHsKICAgICAgICAgdGhpcy5yZXN1bHRFbGVtZW50cyA9IHJlc3VsdEVsZW1lbnRzOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFNlYXJjaFF1ZXJ5KCkgewogICAgICAgICByZXR1cm4gc2VhcmNoUXVlcnk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0U2VhcmNoUXVlcnkoamF2YS5sYW5nLlN0cmluZyBzZWFyY2hRdWVyeSkgewogICAgICAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gc2VhcmNoUXVlcnk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGludCBnZXRTdGFydEluZGV4KCkgewogICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTdGFydEluZGV4KGludCBzdGFydEluZGV4KSB7CiAgICAgICAgIHRoaXMuc3RhcnRJbmRleCA9IHN0YXJ0SW5kZXg7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGludCBnZXRFbmRJbmRleCgpIHsKICAgICAgICAgcmV0dXJuIGVuZEluZGV4OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldEVuZEluZGV4KGludCBlbmRJbmRleCkgewogICAgICAgICB0aGlzLmVuZEluZGV4ID0gZW5kSW5kZXg7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0U2VhcmNoVGlwcygpIHsKICAgICAgICAgcmV0dXJuIHNlYXJjaFRpcHM7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0U2VhcmNoVGlwcyhqYXZhLmxhbmcuU3RyaW5nIHNlYXJjaFRpcHMpIHsKICAgICAgICAgdGhpcy5zZWFyY2hUaXBzID0gc2VhcmNoVGlwczsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgY29tLnN1bi5zMWFzZGV2LmVqYi5jbGFzc2xvYWQubGlmZWN5Y2xlLkRpcmVjdG9yeUNhdGVnb3J5W10gZ2V0RGlyZWN0b3J5Q2F0ZWdvcmllcygpIHsKICAgICAgICAgcmV0dXJuIGRpcmVjdG9yeUNhdGVnb3JpZXM7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGlyZWN0b3J5Q2F0ZWdvcmllcyhjb20uc3VuLnMxYXNkZXYuZWpiLmNsYXNzbG9hZC5saWZlY3ljbGUuRGlyZWN0b3J5Q2F0ZWdvcnlbXSBkaXJlY3RvcnlDYXRlZ29yaWVzKSB7CiAgICAgICAgIHRoaXMuZGlyZWN0b3J5Q2F0ZWdvcmllcyA9IGRpcmVjdG9yeUNhdGVnb3JpZXM7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGRvdWJsZSBnZXRTZWFyY2hUaW1lKCkgewogICAgICAgICByZXR1cm4gc2VhcmNoVGltZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTZWFyY2hUaW1lKGRvdWJsZSBzZWFyY2hUaW1lKSB7CiAgICAgICAgIHRoaXMuc2VhcmNoVGltZSA9IHNlYXJjaFRpbWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL1Jlc3VsdEVsZW1lbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9SZXN1bHRFbGVtZW50LmphdmEKaW5kZXggMjkxZGY4OC4uMzJjNzg3OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL1Jlc3VsdEVsZW1lbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvUmVzdWx0RWxlbWVudC5qYXZhCkBAIC0zMSwxMCArMzEsMTAgQEAKICAgICBwcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyBob3N0TmFtZTsKICAgICBwcm90ZWN0ZWQgY29tLnN1bi5zMWFzZGV2LmVqYi5jbGFzc2xvYWQubGlmZWN5Y2xlLkRpcmVjdG9yeUNhdGVnb3J5IGRpcmVjdG9yeUNhdGVnb3J5OwogICAgIHByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIGRpcmVjdG9yeVRpdGxlOwotICAgIAorCiAgICAgcHVibGljIFJlc3VsdEVsZW1lbnQoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFJlc3VsdEVsZW1lbnQoamF2YS5sYW5nLlN0cmluZyBzdW1tYXJ5LCBqYXZhLmxhbmcuU3RyaW5nIFVSTCwgamF2YS5sYW5nLlN0cmluZyBzbmlwcGV0LCBqYXZhLmxhbmcuU3RyaW5nIHRpdGxlLCBqYXZhLmxhbmcuU3RyaW5nIGNhY2hlZFNpemUsIGJvb2xlYW4gcmVsYXRlZEluZm9ybWF0aW9uUHJlc2VudCwgamF2YS5sYW5nLlN0cmluZyBob3N0TmFtZSwgY29tLnN1bi5zMWFzZGV2LmVqYi5jbGFzc2xvYWQubGlmZWN5Y2xlLkRpcmVjdG9yeUNhdGVnb3J5IGRpcmVjdG9yeUNhdGVnb3J5LCBqYXZhLmxhbmcuU3RyaW5nIGRpcmVjdG9yeVRpdGxlKSB7CiAgICAgICAgIHRoaXMuc3VtbWFyeSA9IHN1bW1hcnk7CiAgICAgICAgIHRoaXMuVVJMID0gVVJMOwpAQCAtNDYsNzUgKzQ2LDc1IEBACiAgICAgICAgIHRoaXMuZGlyZWN0b3J5Q2F0ZWdvcnkgPSBkaXJlY3RvcnlDYXRlZ29yeTsKICAgICAgICAgdGhpcy5kaXJlY3RvcnlUaXRsZSA9IGRpcmVjdG9yeVRpdGxlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFN1bW1hcnkoKSB7CiAgICAgICAgIHJldHVybiBzdW1tYXJ5OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFN1bW1hcnkoamF2YS5sYW5nLlN0cmluZyBzdW1tYXJ5KSB7CiAgICAgICAgIHRoaXMuc3VtbWFyeSA9IHN1bW1hcnk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0VVJMKCkgewogICAgICAgICByZXR1cm4gVVJMOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFVSTChqYXZhLmxhbmcuU3RyaW5nIFVSTCkgewogICAgICAgICB0aGlzLlVSTCA9IFVSTDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRTbmlwcGV0KCkgewogICAgICAgICByZXR1cm4gc25pcHBldDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTbmlwcGV0KGphdmEubGFuZy5TdHJpbmcgc25pcHBldCkgewogICAgICAgICB0aGlzLnNuaXBwZXQgPSBzbmlwcGV0OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFRpdGxlKCkgewogICAgICAgICByZXR1cm4gdGl0bGU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGl0bGUoamF2YS5sYW5nLlN0cmluZyB0aXRsZSkgewogICAgICAgICB0aGlzLnRpdGxlID0gdGl0bGU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0Q2FjaGVkU2l6ZSgpIHsKICAgICAgICAgcmV0dXJuIGNhY2hlZFNpemU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0Q2FjaGVkU2l6ZShqYXZhLmxhbmcuU3RyaW5nIGNhY2hlZFNpemUpIHsKICAgICAgICAgdGhpcy5jYWNoZWRTaXplID0gY2FjaGVkU2l6ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBpc1JlbGF0ZWRJbmZvcm1hdGlvblByZXNlbnQoKSB7CiAgICAgICAgIHJldHVybiByZWxhdGVkSW5mb3JtYXRpb25QcmVzZW50OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFJlbGF0ZWRJbmZvcm1hdGlvblByZXNlbnQoYm9vbGVhbiByZWxhdGVkSW5mb3JtYXRpb25QcmVzZW50KSB7CiAgICAgICAgIHRoaXMucmVsYXRlZEluZm9ybWF0aW9uUHJlc2VudCA9IHJlbGF0ZWRJbmZvcm1hdGlvblByZXNlbnQ7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0SG9zdE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBob3N0TmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRIb3N0TmFtZShqYXZhLmxhbmcuU3RyaW5nIGhvc3ROYW1lKSB7CiAgICAgICAgIHRoaXMuaG9zdE5hbWUgPSBob3N0TmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgY29tLnN1bi5zMWFzZGV2LmVqYi5jbGFzc2xvYWQubGlmZWN5Y2xlLkRpcmVjdG9yeUNhdGVnb3J5IGdldERpcmVjdG9yeUNhdGVnb3J5KCkgewogICAgICAgICByZXR1cm4gZGlyZWN0b3J5Q2F0ZWdvcnk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGlyZWN0b3J5Q2F0ZWdvcnkoY29tLnN1bi5zMWFzZGV2LmVqYi5jbGFzc2xvYWQubGlmZWN5Y2xlLkRpcmVjdG9yeUNhdGVnb3J5IGRpcmVjdG9yeUNhdGVnb3J5KSB7CiAgICAgICAgIHRoaXMuZGlyZWN0b3J5Q2F0ZWdvcnkgPSBkaXJlY3RvcnlDYXRlZ29yeTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXREaXJlY3RvcnlUaXRsZSgpIHsKICAgICAgICAgcmV0dXJuIGRpcmVjdG9yeVRpdGxlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERpcmVjdG9yeVRpdGxlKGphdmEubGFuZy5TdHJpbmcgZGlyZWN0b3J5VGl0bGUpIHsKICAgICAgICAgdGhpcy5kaXJlY3RvcnlUaXRsZSA9IGRpcmVjdG9yeVRpdGxlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsaS9idWlsZC54bWwKaW5kZXggNDRjMTMwZC4uNGI0ZGY1YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsaS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsaS9idWlsZC54bWwKQEAgLTQwLDExICs0MCwxMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItY2xpIHRlc3RzKQorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWNsaSB0ZXN0cykKIAotCQkJYW50IG5lZ2F0aXZlIChFeGVjdXRlcyB0aGUgZWpiLWNsaSBuZWdhdGl2ZSB0ZXN0KQotCTwvZWNobz4KKyAgICAgICAgICAgIGFudCBuZWdhdGl2ZSAoRXhlY3V0ZXMgdGhlIGVqYi1jbGkgbmVnYXRpdmUgdGVzdCkKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xpL25lZ2F0aXZlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xpL25lZ2F0aXZlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGQxYzI4Ny4uNzQyY2M1YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsaS9uZWdhdGl2ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGkvbmVnYXRpdmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWNsaS1uZWdhdGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGkvbmVnYXRpdmUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsaS9uZWdhdGl2ZS9idWlsZC54bWwKaW5kZXggZjM5NDM0MS4uYTQ3OGUxZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsaS9uZWdhdGl2ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsaS9uZWdhdGl2ZS9idWlsZC54bWwKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgICAgPGFyZyBsaW5lPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTU2LDE5ICs1NiwxOSBAQAogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNsaWVudCIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiCiAgICAgICAgICAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiCiAgICAgICAgICAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLWNsaWVudCIgPgotICAgICAgICA8amF2YWMgZm9yaz0idHJ1ZSIgaW5jbHVkZUFudFJ1bnRpbWU9ImZhbHNlIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZGVidWc9InRydWUiIAorICAgICAgICA8amF2YWMgZm9yaz0idHJ1ZSIgaW5jbHVkZUFudFJ1bnRpbWU9ImZhbHNlIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZGVidWc9InRydWUiCiAgICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgICBzcmNkaXI9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjIiBpbmNsdWRlcz0iKiovKkJhc2VEZXZUZXN0LmphdmEiPgogICAgICAgICA8L2phdmFjPgotICAgICAgICA8amF2YWMgZm9yaz0idHJ1ZSIgaW5jbHVkZUFudFJ1bnRpbWU9ImZhbHNlIiAKKyAgICAgICAgPGphdmFjIGZvcms9InRydWUiIGluY2x1ZGVBbnRSdW50aW1lPSJmYWxzZSIKICAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke3MxYXN0ZXN0LmNsYXNzcGF0aH0iCiAgICAgICAgICAgICAgICBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZGVidWc9InRydWUiIHNyY2Rpcj0iY2xpZW50IiBpbmNsdWRlcz0iKiovKi5qYXZhIj4KICAgICAgICAgICAgIDxjbGFzc3BhdGggcGF0aD0iJHtjbGFzc3BhdGh9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xpL25lZ2F0aXZlL2NsaWVudC9BcHBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGkvbmVnYXRpdmUvY2xpZW50L0FwcENsaWVudC5qYXZhCmluZGV4IDM2MDBiMWMuLmI1OTQ5YzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGkvbmVnYXRpdmUvY2xpZW50L0FwcENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGkvbmVnYXRpdmUvY2xpZW50L0FwcENsaWVudC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIC8qKgotICogQSBzaW1wbGUgamF2YSBjbGllbnQgd2lsbDogCisgKiBBIHNpbXBsZSBqYXZhIGNsaWVudCB3aWxsOgogICogPHVsPgogICogPGxpPkxvY2F0ZXMgdGhlIHJlbW90ZSBpbnRlcmZhY2Ugb2YgdGhlIGVudGVycHJpc2UgYmVhbgogICogPGxpPkludm9rZXMgYnVzaW5lc3MgbWV0aG9kcwpAQCAtMzQsMTEgKzM0LDExIEBACiAgICAgcHJpdmF0ZSBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsgCi0gICAgICAgIEFwcENsaWVudCBjbGllbnQgPSBuZXcgQXBwQ2xpZW50KCk7IAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgQXBwQ2xpZW50IGNsaWVudCA9IG5ldyBBcHBDbGllbnQoKTsKIAogICAgICAgICAvLyBydW4gdGhlIHRlc3RzCi0gICAgICAgIGNsaWVudC5ydW5UZXN0Q2xpZW50KCk7ICAgCisgICAgICAgIGNsaWVudC5ydW5UZXN0Q2xpZW50KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuVGVzdENsaWVudCgpIHsKQEAgLTU3LDggKzU3LDggQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9NeUJlYW4iKTsKLSAgICAgICAgICAgIE15QmVhblJlbW90ZUludGYgbXliZWFuID0gCi0gICAgICAgICAgICAgICAgKE15QmVhblJlbW90ZUludGYpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgTXlCZWFuUmVtb3RlSW50ZiBteWJlYW4gPQorICAgICAgICAgICAgICAgIChNeUJlYW5SZW1vdGVJbnRmKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE15QmVhblJlbW90ZUludGYuY2xhc3MpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZvY2F0aW9uIHJlc3VsdDogIisgbXliZWFuLmdldENvdW50KDEpKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamItY2xpIiwgc3RhdC5GQUlMKTsKQEAgLTY3LDUgKzY3LDUgQEAKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiY2F1Z2h0IGV4cGVjdGVkIGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICB9IAotfSAKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xpL25lZ2F0aXZlL2NsaWVudC9OZWdDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGkvbmVnYXRpdmUvY2xpZW50L05lZ0NsaWVudC5qYXZhCmluZGV4IGM3YWRiMTMuLjhmZmU4OWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGkvbmVnYXRpdmUvY2xpZW50L05lZ0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGkvbmVnYXRpdmUvY2xpZW50L05lZ0NsaWVudC5qYXZhCkBAIC01Myw5ICs1Myw5IEBACiAgICAgICAgICAgICBpZiAoIXJldC5yZXR1cm5WYWx1ZSAmJiByZXQuZXJyLmNvbnRhaW5zKGV4cGVjdGVkRXJyKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamItY2xpLW5lZ2F0aXZlLWRlcGxveSIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgCSAgc3RhdC5hZGRTdGF0dXMoImVqYi1jbGktbmVnYXRpdmUtZGVwbG95Iiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamItY2xpLW5lZ2F0aXZlLWRlcGxveSIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAJCisKICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsaS9uZWdhdGl2ZS9lamIvTXlCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xpL25lZ2F0aXZlL2VqYi9NeUJlYW4uamF2YQppbmRleCAyNjcxYzcxLi5kYzIwMjQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xpL25lZ2F0aXZlL2VqYi9NeUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xpL25lZ2F0aXZlL2VqYi9NeUJlYW4uamF2YQpAQCAtMjMsNCArMjMsNCBAQAogICAgIHB1YmxpYyBpbnQgZ2V0Q291bnQoaW50IGkpIHsKICAgICAgICAgcmV0dXJuIDEgKyBpOwogICAgIH0KLX0gCit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xpL25lZ2F0aXZlL2VqYi9NeUJlYW5SZW1vdGVJbnRmLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xpL25lZ2F0aXZlL2VqYi9NeUJlYW5SZW1vdGVJbnRmLmphdmEKaW5kZXggYzk3NTk1My4uY2Q2MWI3MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsaS9uZWdhdGl2ZS9lamIvTXlCZWFuUmVtb3RlSW50Zi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGkvbmVnYXRpdmUvZWpiL015QmVhblJlbW90ZUludGYuamF2YQpAQCAtMjEsNCArMjEsNCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeUJlYW5SZW1vdGVJbnRmIHsKICAgICBwdWJsaWMgaW50IGdldENvdW50KGludCBpKTsKLX0gCit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvYnVpbGQueG1sCmluZGV4IDE3ZDQzNGUuLmY4NjVlYTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvYnVpbGQueG1sCkBAIC00NiwxMSArNDYsMTEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCByZWFkb25seSAoRXhlY3V0ZXMgdGhlIGVqYi1jbXAtcmVhZG9ubHkgdGVzdCkKLQkJCWFudCBlamJmbHVzaHdpdGhzcWxleGNlcHRpb24gKEV4ZWN1dGVzIHRoZSBlamItY21wLWVqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbiB0ZXN0KQotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItY21wIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgcmVhZG9ubHkgKEV4ZWN1dGVzIHRoZSBlamItY21wLXJlYWRvbmx5IHRlc3QpCisgICAgICAgICAgICBhbnQgZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uIChFeGVjdXRlcyB0aGUgZWpiLWNtcC1lamJmbHVzaHdpdGhzcWxleGNlcHRpb24gdGVzdCkKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWNtcCB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCBiNzFlNzljLi5lYmYwZGVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIyICsxNSwyMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWZsdXNoLXRlc3QiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tY21wLW1hcHBpbmdzLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWNtcC1tYXBwaW5ncy54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2J1aWxkLnhtbAppbmRleCBmNTQwMzJhLi4wNzI1Y2M4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1Rlc3RIb21lLmNsYXNzLCoqL1Rlc3QuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KQEAgLTY0LDIzICs2NCwyMyBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZVJvd3MiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2RlbGV0ZV90YWJsZXMuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGFsbAogICAgICAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNTk5ODIwMC4uZWIwMDMxZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogcHVibGljIGNsYXNzIENsaWVudCB7CiAgICAgcHJpdmF0ZSBUZXN0IHQ7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAKQEAgLTUwLDcgKzUwLDcgQEAKIAogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9UMSIpOwogICAgICAgICAgICAgVGVzdEhvbWUgdGhvbWUgPSAoVGVzdEhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgVGVzdEhvbWUuY2xhc3MpOwotICAgIAorCiAgICAgICAgICAgICB0ID0gdGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCApIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2xpZW50KCk6IENhdWdodCBhbiBleGNlcHRpb246Iik7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNUQVJUIik7CiAKQEAgLTc4LDcgKzc4LDcgQEAKIAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiRmx1c2giKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgY2hlY2tDbXAxMUJlYW4oKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB0LnRlc3RBMSgpOwpAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgdC50ZXN0QTFXaXRoRmx1c2goKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQTFXaXRoRmx1c2ggT0siKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgIAorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBMSBGQUlMRUQgIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGNoZWNrQ21wMTFCZWFuIiwgc3RhdC5GQUlMKTsKQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgdC50ZXN0QTJXaXRoRmx1c2goKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQTJXaXRoRmx1c2ggT0siKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgIAorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBMiBGQUlMRUQgIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGNoZWNrQ21wMjBCZWFuIiwgc3RhdC5GQUlMKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9BMUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9BMUJlYW4uamF2YQppbmRleCBiNWI3ZTMyLi4wYmM1ZWEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvQTFCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vZWpiL0ExQmVhbi5qYXZhCkBAIC0yMCw2NCArMjAsNjQgQEAKIGltcG9ydCBqYXZheC5uYW1pbmcuKjsKIAogLyoqCi0gKiAxLjEgYmVhbi4gCisgKiAxLjEgYmVhbi4KICAqIEBhdXRob3IgbXZhdGtpbmEKICAqLwogCiAKIHB1YmxpYyBjbGFzcyBBMUJlYW4gaW1wbGVtZW50cyBqYWthcnRhLmVqYi5FbnRpdHlCZWFuIHsKLSAgICAKKwogICAgIHByaXZhdGUgamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCBjb250ZXh0OwotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jc2V0RW50aXR5Q29udGV4dChqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0KQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCBhQ29udGV4dCkgewogICAgICAgICBjb250ZXh0PWFDb250ZXh0OwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYkFjdGl2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJQYXNzaXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJSZW1vdmUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWJ1ZzogQTFCZWFuIGVqYlJlbW92ZSIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI3Vuc2V0RW50aXR5Q29udGV4dCgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgewogICAgICAgICBjb250ZXh0PW51bGw7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiTG9hZCgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJTdG9yZSgpCiAgICAgICovCkBAIC05Myw4ICs5Myw4IEBACiAgICAgICAgIG5hbWUgPSAiQUJDIjsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoamF2YS5sYW5nLlN0cmluZyBpZCkgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiB7IAorCisgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZShqYXZhLmxhbmcuU3RyaW5nIGlkKSB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIHsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBzKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvQTFMb2NhbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vZWpiL0ExTG9jYWwuamF2YQppbmRleCBiZDU2ZjZkLi5lYTM0ZGQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvQTFMb2NhbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9BMUxvY2FsLmphdmEKQEAgLTI0LDkgKzI0LDkgQEAKIAogcHVibGljIGludGVyZmFjZSBBMUxvY2FsIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCTG9jYWxPYmplY3QgewogCi0gICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7IAorICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOwogCi0gICAgcHVibGljIHZvaWQgc2V0TmFtZVdpdGhGbHVzaChTdHJpbmcgbmFtZSk7IAorICAgIHB1YmxpYyB2b2lkIHNldE5hbWVXaXRoRmx1c2goU3RyaW5nIG5hbWUpOwogCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9BMUxvY2FsSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vZWpiL0ExTG9jYWxIb21lLmphdmEKaW5kZXggOTA1Nzk4Mi4uYTZjZjQwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vZWpiL0ExTG9jYWxIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vZWpiL0ExTG9jYWxIb21lLmphdmEKQEAgLTI0LDkgKzI0LDkgQEAKICAqLwogCiBwdWJsaWMgaW50ZXJmYWNlIEExTG9jYWxIb21lIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCTG9jYWxIb21lIHsKLSAgICAKKwogICAgIHB1YmxpYyAgQTFMb2NhbCBmaW5kQnlQcmltYXJ5S2V5KGphdmEubGFuZy5TdHJpbmcgcGspICB0aHJvd3MgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljICBBMUxvY2FsIGNyZWF0ZShqYXZhLmxhbmcuU3RyaW5nIGlkKSB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvQTJCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvQTJCZWFuLmphdmEKaW5kZXggMjhjYzZiNS4uMmFkZmIzNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vZWpiL0EyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9BMkJlYW4uamF2YQpAQCAtMjAsNjQgKzIwLDY0IEBACiBpbXBvcnQgamF2YXgubmFtaW5nLio7CiAKIC8qKgotICogMi4wIGJlYW4uIAorICogMi4wIGJlYW4uCiAgKiBAYXV0aG9yIG12YXRraW5hCiAgKi8KIAogCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQTJCZWFuIGltcGxlbWVudHMgamFrYXJ0YS5lamIuRW50aXR5QmVhbiB7Ci0gICAgCisKICAgICBwcml2YXRlIGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQgY29udGV4dDsKLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI3NldEVudGl0eUNvbnRleHQoamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQgYUNvbnRleHQpIHsKICAgICAgICAgY29udGV4dD1hQ29udGV4dDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJBY3RpdmF0ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUGFzc2l2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUmVtb3ZlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVidWc6IEEyQmVhbiBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiN1bnNldEVudGl0eUNvbnRleHQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsKICAgICAgICAgY29udGV4dD1udWxsOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYkxvYWQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiU3RvcmUoKQogICAgICAqLwpAQCAtOTYsOCArOTYsOCBAQAogICAgICAgICBzZXROYW1lKCJBQkMiKTsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoamF2YS5sYW5nLlN0cmluZyBuYW1lKSB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIHsgCisKKyAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKGphdmEubGFuZy5TdHJpbmcgbmFtZSkgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0TmFtZVdpdGhGbHVzaChqYXZhLmxhbmcuU3RyaW5nIHMpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9BMkxvY2FsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvQTJMb2NhbC5qYXZhCmluZGV4IDBjYmMwOGYuLjliNDY3OGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9BMkxvY2FsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vZWpiL0EyTG9jYWwuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEEyTG9jYWwgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJMb2NhbE9iamVjdCB7CiAKLSAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsgCi0gCi0gICAgcHVibGljIHZvaWQgc2V0TmFtZVdpdGhGbHVzaChTdHJpbmcgbmFtZSk7IAotIAorICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOworCisgICAgcHVibGljIHZvaWQgc2V0TmFtZVdpdGhGbHVzaChTdHJpbmcgbmFtZSk7CisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9BMkxvY2FsSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vZWpiL0EyTG9jYWxIb21lLmphdmEKaW5kZXggNzM5MDAzYy4uZDYxM2ZhMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vZWpiL0EyTG9jYWxIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vZWpiL0EyTG9jYWxIb21lLmphdmEKQEAgLTI0LDkgKzI0LDkgQEAKICAqLwogCiBwdWJsaWMgaW50ZXJmYWNlIEEyTG9jYWxIb21lIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCTG9jYWxIb21lIHsKLSAgICAKKwogICAgIHB1YmxpYyAgQTJMb2NhbCBmaW5kQnlQcmltYXJ5S2V5KGphdmEubGFuZy5TdHJpbmcgcGspICB0aHJvd3MgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljICBBMkxvY2FsIGNyZWF0ZShqYXZhLmxhbmcuU3RyaW5nIG5hbWUpIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9UZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvVGVzdC5qYXZhCmluZGV4IGU0MzY1OTkuLmUwNTViNmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9UZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vZWpiL1Rlc3QuamF2YQpAQCAtMjAsMTMgKzIwLDEzIEBACiBpbXBvcnQgamF2YS5ybWkuKjsKIAogcHVibGljIGludGVyZmFjZSBUZXN0IGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAKKwogICAgIHB1YmxpYyB2b2lkIHRlc3RBMSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgdGVzdEExV2l0aEZsdXNoKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCB0ZXN0QTIoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHRlc3RBMldpdGhGbHVzaCgpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9UZXN0QmVhbi5qYXZhCmluZGV4IDY4MTYyZDEuLmU3OWYxYWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9UZXN0QmVhbi5qYXZhCkBAIC0yNywyMSArMjcsMjEgQEAKICAgICBwcml2YXRlICBBMkxvY2FsIGEyYmVhbiA9IG51bGw7CiAKICAgICAvLyBTZXNzaW9uQmVhbiBtZXRob2RzCi0gCisKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0QmVhbiBlamJDcmVhdGUiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGExSG9tZSA9IGxvb2t1cEExKCk7CiAgICAgICAgICAgICBhMkhvbWUgPSBsb29rdXBBMigpOwotIAorCiAgICAgICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgfSAgICAKLSAKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0QmVhbiBlamJBY3RpdmF0ZSIpOwotICAgIH0gICAgCisgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewogICAgICAgICAgICAgYTFIb21lID0gbnVsbDsKQEAgLTU1LDEzICs1NSwxMyBAQAogICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9BMUZMIik7CiAgICAgICAgIHJldHVybiAoQTFMb2NhbEhvbWUpIG9ianJlZjsKLSAgICB9ICAgIAorICAgIH0KIAogICAgIHByaXZhdGUgQTJMb2NhbEhvbWUgbG9va3VwQTIoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvQTJGTCIpOwogICAgICAgICByZXR1cm4gKEEyTG9jYWxIb21lKSBvYmpyZWY7Ci0gICAgfSAgICAKKyAgICB9CiAKICAgICBTdHJpbmcgbXNnID0gIlVwZGF0ZSBzdWNjZWVkZWQgd2l0aCBmbHVzaCBlbmFibGVkIjsKIApAQCAtNzIsNyArNzIsNyBAQAogICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbiAoZS5nZXRNZXNzYWdlKCksIGUpOwogICAgICAgICB9CiAKLS8vUEctPiAgICAgICBhMWJlYW4uc2V0TmFtZSgiQTEyMzQ1Njc4OTAxMjM0NTY3ODkwIik7IAorLy9QRy0+ICAgICAgIGExYmVhbi5zZXROYW1lKCJBMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0QTIoKSB7CkBAIC04MSwxNCArODEsMTQgQEAKICAgICAgICAgfSBjYXRjaCAoQ3JlYXRlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uIChlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLS8vUEctPiAgICAgICAgYTJiZWFuLnNldE5hbWUoIkExMjM0NTY3ODkwMTIzNDU2Nzg5MCIpOyAKKy8vUEctPiAgICAgICAgYTJiZWFuLnNldE5hbWUoIkExMjM0NTY3ODkwMTIzNDU2Nzg5MCIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RBMVdpdGhGbHVzaCgpIHsKICAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gdHJ1ZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGExYmVhbiA9IGExSG9tZS5jcmVhdGUoIkIxIik7Ci0gICAgICAgICAgICBhMWJlYW4uc2V0TmFtZVdpdGhGbHVzaCgiQTEyMzQ1Njc4OTAxMjM0NTY3ODkwIik7IAorICAgICAgICAgICAgYTFiZWFuLnNldE5hbWVXaXRoRmx1c2goIkExMjM0NTY3ODkwMTIzNDU2Nzg5MCIpOwogICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUudG9TdHJpbmcoKSk7CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gdHJ1ZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGEyYmVhbiA9IGEySG9tZS5jcmVhdGUoIkIyIik7Ci0gICAgICAgICAgICBhMmJlYW4uc2V0TmFtZVdpdGhGbHVzaCgiQTEyMzQ1Njc4OTAxMjM0NTY3ODkwIik7IAorICAgICAgICAgICAgYTJiZWFuLnNldE5hbWVXaXRoRmx1c2goIkExMjM0NTY3ODkwMTIzNDU2Nzg5MCIpOwogICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUudG9TdHJpbmcoKSk7CkBAIC0xMTIsNCArMTEyLDQgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKG1zZyk7CiAgICAgfQogCi19IAorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vZWpiL1Rlc3RIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvVGVzdEhvbWUuamF2YQppbmRleCA0ZTkwM2NjLi5jZTRlMTg2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvVGVzdEhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvVGVzdEhvbWUuamF2YQpAQCAtMjAsNiArMjAsNiBAQAogaW1wb3J0IGphdmEucm1pLio7CiAKIHB1YmxpYyBpbnRlcmZhY2UgVGVzdEhvbWUgZXh0ZW5kcyBFSkJIb21lIHsKLSAKKwogICAgIFRlc3QgY3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgQ3JlYXRlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGNkODg0ODAuLjQxMzNjM2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsMTMgKzEsMTMgQEAKLURyb3AgdGFibGUgQTE7DQotRHJvcCB0YWJsZSBBMjsNCi0NCi1DUkVBVEUgVEFCTEUgQTEgKA0KLSAgICBpZCAgICAgY2hhcigzKSBub3QgbnVsbCBjb25zdHJhaW50IHBrX0ExX2lkIHByaW1hcnkga2V5LA0KLSAgICBuYW1lICAgY2hhcig1KQ0KLSk7DQotDQotQ1JFQVRFIFRBQkxFIEEyICgNCi0gICAgaWQgICAgIGNoYXIoMykgbm90IG51bGwgY29uc3RyYWludCBwa19BMl9pZCBwcmltYXJ5IGtleSwNCi0gICAgbmFtZSAgIGNoYXIoNSkNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgQTE7CitEcm9wIHRhYmxlIEEyOworCitDUkVBVEUgVEFCTEUgQTEgKAorICAgIGlkICAgICBjaGFyKDMpIG5vdCBudWxsIGNvbnN0cmFpbnQgcGtfQTFfaWQgcHJpbWFyeSBrZXksCisgICAgbmFtZSAgIGNoYXIoNSkKKyk7CisKK0NSRUFURSBUQUJMRSBBMiAoCisgICAgaWQgICAgIGNoYXIoMykgbm90IG51bGwgY29uc3RyYWludCBwa19BMl9pZCBwcmltYXJ5IGtleSwKKyAgICBuYW1lICAgY2hhcig1KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggODE3NjVkYy4uZTA2OTE3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xLDIgKzEsMiBAQAotRHJvcCB0YWJsZSBBMTsNCi1Ecm9wIHRhYmxlIEEyOw0KK0Ryb3AgdGFibGUgQTE7CitEcm9wIHRhYmxlIEEyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvYnVpbGQueG1sCmluZGV4IDU5NGI0YWQuLmM2ODY3MzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9idWlsZC54bWwKQEAgLTgyLDE3ICs4MiwxNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+IFVzYWdlOgotCQlhbnQgY3VzdG9tZXIgKEV4ZWN1dGVzIHRoZSBjdXN0b21lciB0ZXN0cykKLQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamIgY21wIHRlc3RzKQotCQlhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIGVqYiBjbXAgdGVzdHMpCi0JCWFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgZWpiIGNtcCB0ZXN0cykKLQkJYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIGNtcCB0ZXN0cykKLQkJYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIGVqYiBjbXAgYXBwcykKLQkJYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBlamIgY21wIHRlc3RzKQotCQlhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlIGNtcCBhcHBzKQotCQlhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIGNtcCB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+IFVzYWdlOgorICAgICAgICBhbnQgY3VzdG9tZXIgKEV4ZWN1dGVzIHRoZSBjdXN0b21lciB0ZXN0cykKKyAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamIgY21wIHRlc3RzKQorICAgICAgICBhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIGVqYiBjbXAgdGVzdHMpCisgICAgICAgIGFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgZWpiIGNtcCB0ZXN0cykKKyAgICAgICAgYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIGNtcCB0ZXN0cykKKyAgICAgICAgYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIGVqYiBjbXAgYXBwcykKKyAgICAgICAgYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBlamIgY21wIHRlc3RzKQorICAgICAgICBhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlIGNtcCBhcHBzKQorICAgICAgICBhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIGNtcCB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA0ZjAxZWIuLmQ2M2EyM2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjAgKzE1LDIwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItY21wIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jdXN0b21lciIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY3VzdG9tZXIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXItY3VzdG9tZXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLWN1c3RvbWVyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLWN1c3RvbWVyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXItY3VzdG9tZXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWNtcC1tYXBwaW5ncy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1jbXAtbWFwcGluZ3MueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iZGJzY2hlbWEiIHZhbHVlPSJzcWwvUHJlc2VsZWN0U2NoZW1hLmRic2NoZW1hIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9idWlsZC54bWwKaW5kZXggNzE1NTRkZi4uNGY3MTMzNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2J1aWxkLnhtbApAQCAtMzUsOCArMzUsOCBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCi0gICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+ICAgICAKKworICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KICAgICAgIDwvYW50Y2FsbD4KQEAgLTUwLDI3ICs1MCwyNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWN1c3RvbWVyLWphciIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVhciIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icGFja2FnZS1jdXN0b21lci1qYXIiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVqYmphci1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSIke2VqYi1qYXItY3VzdG9tZXIueG1sfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iJHtzdW4tZWpiLWphci1jdXN0b21lci54bWx9Ii8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UtZWFyIj4KICAgICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+ICAgIAorICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+CiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9L2xpYiIgaW5jbHVkZXM9InJlcG9ydGVyLmphciIvPgotICAgICAgPC9lYXI+ICAgICAgICAKKyAgICAgIDwvZWFyPgogICAgIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InNxbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtOTEsMTQgKzkxLDE0IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgpAQCAtMTA3LDE1ICsxMDcsMTUgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXBlcnNpc3RlbmNlLXJlc291cmNlLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gCi0gICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic3FsLWNyZWF0ZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0ic3FsLWRyb3AiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4gICAKKyAgICA8dGFyZ2V0IG5hbWU9InNxbC1kcm9wIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgIDwvYW50Y2FsbD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2NsaWVudC9QcmVzZWxlY3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2NsaWVudC9QcmVzZWxlY3RDbGllbnQuamF2YQppbmRleCA1ZGY1MDFhLi5jMWJiNzdiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9jbGllbnQvUHJlc2VsZWN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvY2xpZW50L1ByZXNlbGVjdENsaWVudC5qYXZhCkBAIC0yNiwzOSArMjYsMzkgQEAKIAogCiBwdWJsaWMgY2xhc3MgUHJlc2VsZWN0Q2xpZW50IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0dXMgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnRpbmcgcHJlc2VsZWN0Li4uLiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkN1c3RvbWVyIEJvYiBoYXMgYWRkZWQgMyBpdGVtcyB0byBoaXMgc2hvcHBpbmcgY2FydCA6Iik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFRoZSBpdGVtcyBhcmUgOiAxPiBEYXJrIENob2NvbGF0ZSAkNDAsIDI+IE1pbGsgQ2hvY29sYXRlICQzMCwgMz4gV2hpdGUgQ2hvY29sYXRlICQyMCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXJ0aW5nIHByZXNlbGVjdC4uLi4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDdXN0b21lciBCb2IgaGFzIGFkZGVkIDMgaXRlbXMgdG8gaGlzIHNob3BwaW5nIGNhcnQgOiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBUaGUgaXRlbXMgYXJlIDogMT4gRGFyayBDaG9jb2xhdGUgJDQwLCAyPiBNaWxrIENob2NvbGF0ZSAkMzAsIDM+IFdoaXRlIENob2NvbGF0ZSAkMjAiKTsKICAgICAgICAgICAgIHN0YXR1cy5hZGREZXNjcmlwdGlvbigiVGVzdGluZyBjbXAgcHJlc2VsZWN0IGFwcC4iKTsKICAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVDdXN0b21lciIpOwogCi0gICAgICAgICAgICBDdXN0b21lckhvbWUgaG9tZSA9IAotCSAgICAgIChDdXN0b21lckhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgICBDdXN0b21lckhvbWUgaG9tZSA9CisgICAgICAgICAgKEN1c3RvbWVySG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lckhvbWUuY2xhc3MpOwogICAgICAgICAgICAgQ3VzdG9tZXJSZW1vdGUgbXlDdXN0b21lciA9IGhvbWUuY3JlYXRlKCIxIiwiQm9iIik7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJMZXQgdXMgc2VsZWN0IGFsbCBpdGVtcyB0aGF0IEJvYiBib3VnaHQgd2hvc2UgcHJpY2UgaXMgYmVsb3cgJDEwMCIpOwotCSAgICBpbnQgaXRlbXMgPSBteUN1c3RvbWVyLmdldEl0ZW1zRm9yTGVzcygpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxldCB1cyBzZWxlY3QgYWxsIGl0ZW1zIHRoYXQgQm9iIGJvdWdodCB3aG9zZSBwcmljZSBpcyBiZWxvdyAkMTAwIik7CisgICAgICAgIGludCBpdGVtcyA9IG15Q3VzdG9tZXIuZ2V0SXRlbXNGb3JMZXNzKCk7CiAKLQkgICAgaWYgKGl0ZW1zID09IDApIHsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gaXRlbXMgYXZhaWxhYmxlIGJlbG93ICQxMDAgZm9yIHRoaXMgY3VzdG9tZXIuIGVqYlN0b3JlKCkgd2FzIGNhbGxlZCBiZWZvcmUgZWpiU2VsZWN0KCkgYW5kIGl0IG1vZGlmaWVkIHRoZSBwcmljZSBvZiBlYWNoIGl0ZW0gdG8gJDIwMCIpOwotCQlzdGF0dXMuYWRkU3RhdHVzKCJjbXAgcHJlc2VsZWN0OmdldFNvbWVJbmZvIiwgc3RhdHVzLlBBU1MpOwotCSAgICB9IGVsc2UgewotCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGb3VuZCAiICsgaXRlbXMgKyAiIGl0ZW1zIHdpdGggcHJpY2UgbGVzcyB0aGFuIDEwMC4gZWpiU3RvcmUgd2FzIG5vdCBjYWxsZWQgYmVmb3JlIGVqYlNlbGVjdC4gSGVuY2UgdGhlIHByaWNlIG9mIHRoZSBpdGVtcyB3YXMgbm90IG1vZGlmaWVkIHRvICQyMDAiKTsKLQkgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoImNtcCBwcmVzZWxlY3Q6Z2V0U29tZUluZm8iLCBzdGF0dXMuRkFJTCk7Ci0JICAgIH0KLSAKKyAgICAgICAgaWYgKGl0ZW1zID09IDApIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gaXRlbXMgYXZhaWxhYmxlIGJlbG93ICQxMDAgZm9yIHRoaXMgY3VzdG9tZXIuIGVqYlN0b3JlKCkgd2FzIGNhbGxlZCBiZWZvcmUgZWpiU2VsZWN0KCkgYW5kIGl0IG1vZGlmaWVkIHRoZSBwcmljZSBvZiBlYWNoIGl0ZW0gdG8gJDIwMCIpOworICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKCJjbXAgcHJlc2VsZWN0OmdldFNvbWVJbmZvIiwgc3RhdHVzLlBBU1MpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGb3VuZCAiICsgaXRlbXMgKyAiIGl0ZW1zIHdpdGggcHJpY2UgbGVzcyB0aGFuIDEwMC4gZWpiU3RvcmUgd2FzIG5vdCBjYWxsZWQgYmVmb3JlIGVqYlNlbGVjdC4gSGVuY2UgdGhlIHByaWNlIG9mIHRoZSBpdGVtcyB3YXMgbm90IG1vZGlmaWVkIHRvICQyMDAiKTsKKyAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoImNtcCBwcmVzZWxlY3Q6Z2V0U29tZUluZm8iLCBzdGF0dXMuRkFJTCk7CisgICAgICAgIH0KKwogICAgICAgICAgICAgc3RhdHVzLnByaW50U3VtbWFyeSgicHJlc2VsZWN0QXBwSUQiKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KDApOwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZXgpIHsKLQkgICAgc3RhdHVzLmFkZFN0YXR1cygiY21wIHByZXNlbGVjdDpnZXRTb21lSW5mbyIsIHN0YXR1cy5GQUlMKTsKKyAgICAgICAgc3RhdHVzLmFkZFN0YXR1cygiY21wIHByZXNlbGVjdDpnZXRTb21lSW5mbyIsIHN0YXR1cy5GQUlMKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIGV4Y2VwdGlvbiBpbiBtYWluOiAiICsgZXgudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvZGVzY3JpcHRvci9lamItamFyLWN1c3RvbWVyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2Rlc2NyaXB0b3IvZWpiLWphci1jdXN0b21lci54bWwKaW5kZXggYmZhMDM1Yy4uMWIxYTc0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvZGVzY3JpcHRvci9lamItamFyLWN1c3RvbWVyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9kZXNjcmlwdG9yL2VqYi1qYXItY3VzdG9tZXIueG1sCkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIDxlamItcmVmLXR5cGU+RW50aXR5PC9lamItcmVmLXR5cGU+CiAgICAgICAgIDxsb2NhbC1ob21lPmNvbS5zdW4uczFwZXFlLmVqYi5jbXAucHJlc2VsZWN0LmVqYi5JdGVtTG9jYWxIb21lPC9sb2NhbC1ob21lPgogICAgICAgICA8bG9jYWw+Y29tLnN1bi5zMXBlcWUuZWpiLmNtcC5wcmVzZWxlY3QuZWpiLkl0ZW1Mb2NhbDwvbG9jYWw+Ci0JPGVqYi1saW5rPkl0ZW08L2VqYi1saW5rPgorICAgIDxlamItbGluaz5JdGVtPC9lamItbGluaz4KICAgICAgIDwvZWpiLWxvY2FsLXJlZj4KICAgICAgIDxxdWVyeT4KICAgICAgICAgPHF1ZXJ5LW1ldGhvZD4KQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICA8L21ldGhvZC1wYXJhbXM+CiAgICAgICAgIDwvcXVlcnktbWV0aG9kPgogICAgICAgICA8ZWpiLXFsPlNFTEVDVCBPQkpFQ1QoaXRlbSkgRlJPTSBJdGVtU2NoZW1hIGl0ZW0gV0hFUkUgaXRlbS5wcmljZSAmbHQ7IDEwMAotCTwvZWpiLXFsPgorICAgIDwvZWpiLXFsPgogICAgICAgPC9xdWVyeT4KICAgICA8L2VudGl0eT4KICAgICA8ZW50aXR5PgpAQCAtMTAwLDggKzEwMCw4IEBACiAgICAgICAgIDxtdWx0aXBsaWNpdHk+TWFueTwvbXVsdGlwbGljaXR5PgogICAgICAgICA8cmVsYXRpb25zaGlwLXJvbGUtc291cmNlPgogICAgICAgICAgIDxlamItbmFtZT5JdGVtPC9lamItbmFtZT4KLSAgICAgICAgPC9yZWxhdGlvbnNoaXAtcm9sZS1zb3VyY2U+ICAgICAgICAKLSAgICAgIDwvZWpiLXJlbGF0aW9uc2hpcC1yb2xlPiAKKyAgICAgICAgPC9yZWxhdGlvbnNoaXAtcm9sZS1zb3VyY2U+CisgICAgICA8L2VqYi1yZWxhdGlvbnNoaXAtcm9sZT4KICAgICA8L2VqYi1yZWxhdGlvbj4KICAgPC9yZWxhdGlvbnNoaXBzPgogICA8YXNzZW1ibHktZGVzY3JpcHRvcj4KQEAgLTE2Myw3ICsxNjMsNyBAQAogICAgICAgICA8bWV0aG9kLW5hbWU+Y3JlYXRlPC9tZXRob2QtbmFtZT4KICAgICAgICAgPG1ldGhvZC1wYXJhbXM+CiAgICAgICAgICAgPG1ldGhvZC1wYXJhbT5qYXZhLmxhbmcuU3RyaW5nPC9tZXRob2QtcGFyYW0+Ci0gICAgICAgICAgPG1ldGhvZC1wYXJhbT5qYXZhLmxhbmcuU3RyaW5nPC9tZXRob2QtcGFyYW0+ICAgICAgICAKKyAgICAgICAgICA8bWV0aG9kLXBhcmFtPmphdmEubGFuZy5TdHJpbmc8L21ldGhvZC1wYXJhbT4KICAgICAgICAgPC9tZXRob2QtcGFyYW1zPgogICAgICAgPC9tZXRob2Q+CiAgICAgICA8bWV0aG9kPgpAQCAtMjY3LDcgKzI2Nyw3IEBACiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgICAgPGNvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgICAgIDxtZXRob2Q+Ci0gICAgICAgIDxlamItbmFtZT5JdGVtPC9lamItbmFtZT4gICAgCisgICAgICAgIDxlamItbmFtZT5JdGVtPC9lamItbmFtZT4KICAgICAgICAgPG1ldGhvZC1uYW1lPio8L21ldGhvZC1uYW1lPgogICAgICAgPC9tZXRob2Q+CiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvQ3VzdG9tZXJCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvQ3VzdG9tZXJCZWFuLmphdmEKaW5kZXggZmEzN2Q1Ni4uYjgxN2M0NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvZWpiL0N1c3RvbWVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2VqYi9DdXN0b21lckJlYW4uamF2YQpAQCAtMjksMTAgKzI5LDEwIEBACiAgICAgLy8gQWNjZXNzIG1ldGhvZHMgZm9yIHBlcnNpc3RlbnQgZmllbGRzCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRJZCgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldElkKFN0cmluZyBpZCk7Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldE5hbWUoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKLSAgCisKICAgICAvLyBBY2Nlc3MgbWV0aG9kcyBmb3IgcmVsYXRpb25zaGlwIGZpZWxkcwogICAgIHB1YmxpYyBhYnN0cmFjdCBDb2xsZWN0aW9uIGdldEl0ZW1zKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0SXRlbXMoQ29sbGVjdGlvbiBpdGVtcyk7CkBAIC00NCwzOSArNDQsMzkgQEAKICAgICAvLyBCdXNpbmVzcyBtZXRob2RzCiAgICAgcHVibGljIGludCBnZXRJdGVtc0Zvckxlc3MoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb24gewogICAgICAgICAgaW50IGNvdW50ID0gMDsKLSAgICAgICAgIEN1c3RvbWVyTG9jYWwgY3VzdG9tZXIgPSAKKyAgICAgICAgIEN1c3RvbWVyTG9jYWwgY3VzdG9tZXIgPQogICAgICAgICAgICAgIChDdXN0b21lckxvY2FsKWNvbnRleHQuZ2V0RUpCTG9jYWxPYmplY3QoKTsKLQkgdHJ5IHsKLQkgICBJbml0aWFsQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVJdGVtIik7Ci0JICAgSXRlbUxvY2FsSG9tZSBpdGVtSG9tZSA9IAotCSAgICAgKEl0ZW1Mb2NhbEhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgIHRyeSB7CisgICAgICAgSW5pdGlhbENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlSXRlbSIpOworICAgICAgIEl0ZW1Mb2NhbEhvbWUgaXRlbUhvbWUgPQorICAgICAgICAgKEl0ZW1Mb2NhbEhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXRlbUxvY2FsSG9tZS5jbGFzcyk7Ci0JICAgSXRlbUxvY2FsIGl0ZW0gPSBpdGVtSG9tZS5jcmVhdGUoIkRhcmsgQ2hvY29sYXRlIiwgIjEiLCAyMC4wMCk7Ci0JICAgZ2V0SXRlbXMoKS5hZGQoaXRlbSk7Ci0JICAgCSAgIAotCSAgIGl0ZW0gPSBpdGVtSG9tZS5jcmVhdGUoIk1pbGsgQ2hvY29sYXRlIiwgIjIiLCAzMC4wMCk7Ci0JICAgZ2V0SXRlbXMoKS5hZGQoaXRlbSk7CisgICAgICAgSXRlbUxvY2FsIGl0ZW0gPSBpdGVtSG9tZS5jcmVhdGUoIkRhcmsgQ2hvY29sYXRlIiwgIjEiLCAyMC4wMCk7CisgICAgICAgZ2V0SXRlbXMoKS5hZGQoaXRlbSk7CiAKLQkgICBpdGVtID0gaXRlbUhvbWUuY3JlYXRlKCJXaGl0ZSBDaG9jb2xhdGUiLCAiMyIsIDQwLjAwKTsKLQkgICBnZXRJdGVtcygpLmFkZChpdGVtKTsKKyAgICAgICBpdGVtID0gaXRlbUhvbWUuY3JlYXRlKCJNaWxrIENob2NvbGF0ZSIsICIyIiwgMzAuMDApOworICAgICAgIGdldEl0ZW1zKCkuYWRkKGl0ZW0pOwogCi0JICAgU3lzdGVtLm91dC5wcmludGxuKCJjYWxsaW5nIGVqYlNlbGVjdEl0ZW1zTGVzc1RoYW4xMDAuLi4iKTsKLQkgICBDb2xsZWN0aW9uIGl0ZW1zID0gZWpiU2VsZWN0SXRlbXNMZXNzVGhhbjEwMChjdXN0b21lcik7CSAgIAorICAgICAgIGl0ZW0gPSBpdGVtSG9tZS5jcmVhdGUoIldoaXRlIENob2NvbGF0ZSIsICIzIiwgNDAuMDApOworICAgICAgIGdldEl0ZW1zKCkuYWRkKGl0ZW0pOwogCi0JICAgaWYgKGl0ZW1zICE9IG51bGwpIHsKLQkgICAgICAgCi0JICAgICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBpdGVtcy5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KSB7Ci0JCSAgIFN5c3RlbS5vdXQucHJpbnRsbigiSXRlbS5wcmljZSA8IDEwMCA6ICIgKwotCQkJCSAgICAgICgoSXRlbUxvY2FsKWl0ZXJhdG9yLm5leHQoKSkuZ2V0SWQoKSk7Ci0JCSAgIGNvdW50Kys7Ci0JICAgICAgIH0KLQkgICB9Ci0JICAgcmV0dXJuIGNvdW50OworICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY2FsbGluZyBlamJTZWxlY3RJdGVtc0xlc3NUaGFuMTAwLi4uIik7CisgICAgICAgQ29sbGVjdGlvbiBpdGVtcyA9IGVqYlNlbGVjdEl0ZW1zTGVzc1RoYW4xMDAoY3VzdG9tZXIpOwogCi0JIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkgfQorICAgICAgIGlmIChpdGVtcyAhPSBudWxsKSB7CisKKyAgICAgICAgICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IGl0ZW1zLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspIHsKKyAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJdGVtLnByaWNlIDwgMTAwIDogIiArCisgICAgICAgICAgICAgICAgICAgICAgKChJdGVtTG9jYWwpaXRlcmF0b3IubmV4dCgpKS5nZXRJZCgpKTsKKyAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgfQorICAgICAgIH0KKyAgICAgICByZXR1cm4gY291bnQ7CisKKyAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgICB9CiAgICAgfQogCiAgICAgLy8gRW50aXR5QmVhbiAgbWV0aG9kcwpAQCAtODUsMzQgKzg1LDM0IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkN1c3RvbWVyQmVhbiBlamJDcmVhdGUiKTsKICAgICAgICAgc2V0SWQoaWQpOwogICAgICAgICBzZXROYW1lKG5hbWUpOwotCXJldHVybiBudWxsOworICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7IH0KIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBjdHgpIHsKICAgICAgICAgY29udGV4dCA9IGN0eDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKSB7CiAgICAgICAgIGNvbnRleHQgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiQ3VzdG9tZXJCZWFuIGVqYlJlbW92ZSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkN1c3RvbWVyQmVhbiBlamJMb2FkIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkN1c3RvbWVyQmVhbiBlamJTdG9yZSIpOwogCiAKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7IH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgeyB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvQ3VzdG9tZXJIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvQ3VzdG9tZXJIb21lLmphdmEKaW5kZXggZjljNmExMC4uZTNlZTBhNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvZWpiL0N1c3RvbWVySG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2VqYi9DdXN0b21lckhvbWUuamF2YQpAQCAtMjEsOSArMjEsOSBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIAogcHVibGljIGludGVyZmFjZSBDdXN0b21lckhvbWUgZXh0ZW5kcyBFSkJIb21lIHsKLSAgICAKKwogICAgIHB1YmxpYyBDdXN0b21lclJlbW90ZSBjcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIENyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBDdXN0b21lclJlbW90ZSBmaW5kQnlQcmltYXJ5S2V5IChTdHJpbmcgaWQpCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsgICAgIAorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvQ3VzdG9tZXJMb2NhbEhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2VqYi9DdXN0b21lckxvY2FsSG9tZS5qYXZhCmluZGV4IDVkMGMyYmIuLmViMjhlOTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2VqYi9DdXN0b21lckxvY2FsSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2VqYi9DdXN0b21lckxvY2FsSG9tZS5qYXZhCkBAIC0yMCw5ICsyMCw5IEBACiBpbXBvcnQgamFrYXJ0YS5lamIuKjsKIAogcHVibGljIGludGVyZmFjZSBDdXN0b21lckxvY2FsSG9tZSBleHRlbmRzIEVKQkxvY2FsSG9tZSB7Ci0gICAgCisKICAgICBwdWJsaWMgQ3VzdG9tZXJMb2NhbCBjcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHRocm93cyBDcmVhdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgQ3VzdG9tZXJMb2NhbCBmaW5kQnlQcmltYXJ5S2V5IChTdHJpbmcgaWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvSXRlbUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2VqYi9JdGVtQmVhbi5qYXZhCmluZGV4IDM4ZTIyOTQuLjg5NzI3MTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2VqYi9JdGVtQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2VqYi9JdGVtQmVhbi5qYXZhCkBAIC0yNywxMyArMjcsMTMgQEAKICAgICAvLyBBY2Nlc3MgbWV0aG9kcyBmb3IgcGVyc2lzdGVudCBmaWVsZHMKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldElkKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0SWQoU3RyaW5nIGlkKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0TmFtZSgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOwogCiAgICAgcHVibGljIGFic3RyYWN0IGRvdWJsZSBnZXRQcmljZSgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFByaWNlKGRvdWJsZSBwcmljZSk7Ci0gIAorCiAKICAgICAvLyBCdXNpbmVzcyBtZXRob2RzCiAgICAgcHVibGljIHZvaWQgbW9kaWZ5UHJpY2UoZG91YmxlIG5ld1ByaWNlKSB7CkBAIC00NywzOSArNDcsMzkgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiSXRlbUJlYW4gZWpiQ3JlYXRlIik7CiAgICAgICAgIHNldElkKGlkKTsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKLQlzZXRQcmljZShwcmljZSk7Ci0JcmV0dXJuIG51bGw7CisgICAgc2V0UHJpY2UocHJpY2UpOworICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgZG91YmxlIHByaWNlKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsgfQogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGN0eCkgewogICAgICAgICBjb250ZXh0ID0gY3R4OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsKICAgICAgICAgY29udGV4dCA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJJdGVtQmVhbiBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJJdGVtQmVhbiBlamJMb2FkIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkl0ZW1CZWFuIGVqYlN0b3JlIik7Ci0JSXRlbUxvY2FsIGl0ZW0gPSAoSXRlbUxvY2FsKWNvbnRleHQuZ2V0RUpCTG9jYWxPYmplY3QoKTsKLQkKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkl0ZW0gcHJpY2UgbGVzcyB0aGFuICQxMDAgOiAiICsgCi0JCQkgICBpdGVtLmdldElkKCkpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiTW9kaWZ5aW5nIGl0cyBwcmljZSB0byAkMjAwLi4uIik7Ci0JaXRlbS5tb2RpZnlQcmljZSgyMDAuMDApOworICAgIEl0ZW1Mb2NhbCBpdGVtID0gKEl0ZW1Mb2NhbCljb250ZXh0LmdldEVKQkxvY2FsT2JqZWN0KCk7CisKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkl0ZW0gcHJpY2UgbGVzcyB0aGFuICQxMDAgOiAiICsKKyAgICAgICAgICAgICAgIGl0ZW0uZ2V0SWQoKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJNb2RpZnlpbmcgaXRzIHByaWNlIHRvICQyMDAuLi4iKTsKKyAgICBpdGVtLm1vZGlmeVByaWNlKDIwMC4wMCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgeyB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvZWpiL0l0ZW1Ib21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvSXRlbUhvbWUuamF2YQppbmRleCAxMDYxZGI2Li40NjE5OTc2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvSXRlbUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvSXRlbUhvbWUuamF2YQpAQCAtMjEsOSArMjEsOSBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIAogcHVibGljIGludGVyZmFjZSBJdGVtSG9tZSBleHRlbmRzIEVKQkhvbWUgewotICAgIAorCiAgICAgcHVibGljIEl0ZW1SZW1vdGUgY3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBkb3VibGUgcHJpY2UpIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBJdGVtUmVtb3RlIGZpbmRCeVByaW1hcnlLZXkgKFN0cmluZyBpZCkKLSAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOyAgICAgCisgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2VqYi9JdGVtTG9jYWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2VqYi9JdGVtTG9jYWwuamF2YQppbmRleCBiZWVjZDA5Li43OTIxMDJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvSXRlbUxvY2FsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvZWpiL0l0ZW1Mb2NhbC5qYXZhCkBAIC0yMiw1ICsyMiw1IEBACiBwdWJsaWMgaW50ZXJmYWNlIEl0ZW1Mb2NhbCBleHRlbmRzIEVKQkxvY2FsT2JqZWN0LCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAgICAgcHVibGljIFN0cmluZyBnZXRJZCgpOwogICAgIHB1YmxpYyBkb3VibGUgZ2V0UHJpY2UoKTsKLSAgICBwdWJsaWMgdm9pZCBtb2RpZnlQcmljZShkb3VibGUgbmV3UHJpY2UpOyAgICAKKyAgICBwdWJsaWMgdm9pZCBtb2RpZnlQcmljZShkb3VibGUgbmV3UHJpY2UpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvZWpiL0l0ZW1Mb2NhbEhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2VqYi9JdGVtTG9jYWxIb21lLmphdmEKaW5kZXggMDZjNTdjZC4uMTkzYTg1OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvZWpiL0l0ZW1Mb2NhbEhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvSXRlbUxvY2FsSG9tZS5qYXZhCkBAIC0yMSw5ICsyMSw5IEBACiAKIAogcHVibGljIGludGVyZmFjZSBJdGVtTG9jYWxIb21lIGV4dGVuZHMgRUpCTG9jYWxIb21lIHsKLSAgICAKKwogICAgIHB1YmxpYyBJdGVtTG9jYWwgY3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBkb3VibGUgcHJpY2UpIHRocm93cyBDcmVhdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgSXRlbUxvY2FsIGZpbmRCeVByaW1hcnlLZXkgKFN0cmluZyBpZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2VqYi9JdGVtUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvSXRlbVJlbW90ZS5qYXZhCmluZGV4IDQ2NTZlMDUuLjI2ZjJkMmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2VqYi9JdGVtUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvZWpiL0l0ZW1SZW1vdGUuamF2YQpAQCAtMjEsNSArMjEsNSBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIAogcHVibGljIGludGVyZmFjZSBJdGVtUmVtb3RlIGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAgICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCA2MmU2MTVhLi41YmMwNzliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDIwICsxLDIwIEBACiBEUk9QIFRBQkxFIEN1c3RvbWVyOwogRFJPUCBUQUJMRSBJdGVtOwogCi1DUkVBVEUgVEFCTEUgQ3VzdG9tZXIgCitDUkVBVEUgVEFCTEUgQ3VzdG9tZXIKICgKLQlDVVNUT01FUl9JRCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksIAotCW5hbWUgVkFSQ0hBUigyNTUpICAKKyAgICBDVVNUT01FUl9JRCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksCisgICAgbmFtZSBWQVJDSEFSKDI1NSkKICk7CiAKIAotQ1JFQVRFIFRBQkxFIEl0ZW0gCitDUkVBVEUgVEFCTEUgSXRlbQogKAotCWl0ZW1fSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLCAKLQluYW1lIFZBUkNIQVIoMjU1KSAsCi0JcHJpY2UgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTCAsCi0JQ1VTVE9NRVJfSUQgVkFSQ0hBUigyNTUpICwKLQlGT1JFSUdOIEtFWSAoQ1VTVE9NRVJfSUQpICAgUkVGRVJFTkNFUyBDdXN0b21lciAoQ1VTVE9NRVJfSUQpCisgICAgaXRlbV9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksCisgICAgbmFtZSBWQVJDSEFSKDI1NSkgLAorICAgIHByaWNlIERPVUJMRSBQUkVDSVNJT04gTk9UIE5VTEwgLAorICAgIENVU1RPTUVSX0lEIFZBUkNIQVIoMjU1KSAsCisgICAgRk9SRUlHTiBLRVkgKENVU1RPTUVSX0lEKSAgIFJFRkVSRU5DRVMgQ3VzdG9tZXIgKENVU1RPTUVSX0lEKQogKTsKIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODdjODg5Yi4uOTk1Y2E3MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjAgKzE1LDIwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItY21wLXJlYWRvbmx5Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWNtcC1tYXBwaW5ncy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1jbXAtbWFwcGluZ3MueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iZGJzY2hlbWEiIHZhbHVlPSJzcWwvcmVhZG9ubHkuZGJzY2hlbWEiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9idWlsZC54bWwKaW5kZXggZjA4ZDBhMC4uNDhmNzA1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDI1ICs0OCwyNSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLypTdHVkZW50Ki5jbGFzcywqKi8qLmRic2NoZW1hIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1N0dWRlbnQuY2xhc3MsKiovKkhvbWUqLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4gICAgICAgICAgIAorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPiAgICAgICAgICAgCisgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEwMCAxMCAxIDEwMCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvY2xpZW50L1JlYWRPbmx5Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2NsaWVudC9SZWFkT25seUNsaWVudC5qYXZhCmluZGV4IDA1NDcyMTQuLjRiMWMyNGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvY2xpZW50L1JlYWRPbmx5Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9jbGllbnQvUmVhZE9ubHlDbGllbnQuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIAogLyoqCi0gKiBBIHNpbXBsZSBqYXZhIGNsaWVudCB3aWxsOiAKKyAqIEEgc2ltcGxlIGphdmEgY2xpZW50IHdpbGw6CiAgKiA8dWw+CiAgKiA8bGk+TG9jYXRlcyB0aGUgaG9tZSBpbnRlcmZhY2Ugb2YgdGhlIGVudGVycHJpc2UgYmVhbgogICogPGxpPkdldHMgYSByZWZlcmVuY2UgdG8gdGhlIHJlbW90ZSBpbnRlcmZhY2UKQEAgLTQ1LDkgKzQ1LDkgQEAKICAgICBwcml2YXRlIGludCBudW1QS3NfID0gMTsKICAgICBwcml2YXRlIGxvbmcgc2xlZXBUaW1lSW5NaWxsaXNfID0gMTAwOwogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeyAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKLSAgICAgICAgUmVhZE9ubHlDbGllbnQgY2xpZW50ID0gbmV3IFJlYWRPbmx5Q2xpZW50KCk7IAorICAgICAgICBSZWFkT25seUNsaWVudCBjbGllbnQgPSBuZXcgUmVhZE9ubHlDbGllbnQoKTsKIAogICAgICAgICBpZiggYXJncy5sZW5ndGggPT0gNCApIHsKIApAQCAtNTYsMjIgKzU2LDIyIEBACiAgICAgICAgICAgICBpbnQgbnVtUEtzID0gSW50ZWdlci5wYXJzZUludChhcmdzWzJdKTsKICAgICAgICAgICAgIGxvbmcgc2xlZXBUaW1lSW5NaWxsaXMgPSBMb25nLnBhcnNlTG9uZyhhcmdzWzNdKTsKICAgICAgICAgICAgIGNsaWVudC5ydW5UaHJlYWRUZXN0KG51bUl0ZXJhdGlvbnMsIG51bVRocmVhZHMsIG51bVBLcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsZWVwVGltZUluTWlsbGlzKTsgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsZWVwVGltZUluTWlsbGlzKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNsaWVudC5ydW5UZXN0Q2xpZW50KCk7ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjbGllbnQucnVuVGVzdENsaWVudCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gcnVuIHRoZSB0ZXN0cwotICAgICAgICAKKwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHJ1blRlc3RDbGllbnQoKSB7ICAgICAgIAorICAgIHB1YmxpYyB2b2lkIHJ1blRlc3RDbGllbnQoKSB7CiAKICAgICAgICAgdHJ5ewogICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGVzdGluZyBDbXAgQ01QUmVhZE9ubHlDbGllbnQgYXBwLiIpOwogICAgICAgICAgICAgdGVzdDExKCk7CiAKLSAgICAgICAgICAgIHRlc3QwMSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHRlc3QwMSgpOwogICAgICAgICAgICAgdGVzdDA1KCk7CiAKICAgICAgICAgICAgIHRlc3QxMigpOwpAQCAtODMsNyArODMsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJ1blRocmVhZFRlc3QoaW50IG51bUl0ZXJhdGlvbnMsIGludCBudW1UaHJlYWRzLCBpbnQgbnVtUEtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzbGVlcFRpbWVJbk1pbGxpcykgeyAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2xlZXBUaW1lSW5NaWxsaXMpIHsKIAogICAgICAgICBudW1JdGVyYXRpb25zXyA9IG51bUl0ZXJhdGlvbnM7CiAgICAgICAgIG51bVRocmVhZHNfID0gbnVtVGhyZWFkczsKQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgc2xlZXBUaW1lSW5NaWxsaXNfID0gc2xlZXBUaW1lSW5NaWxsaXM7CiAKICAgICAgICAgdHJ5ewotICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiQ21wIENNUFJlYWRPbmx5Q2xpZW50IHRocmVhZCB0ZXN0Iik7ICAgICAgICAgICAgCisgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJDbXAgQ01QUmVhZE9ubHlDbGllbnQgdGhyZWFkIHRlc3QiKTsKICAgICAgICAgICAgIHRlc3QxMigpOwogICAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIkNNUFJlYWRPbmx5Q2xpZW50Iik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtMTA0LDggKzEwNCw4IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU3R1ZGVudCIpOwotICAgICAgICAgICAgU3R1ZGVudEhvbWUgc0hvbWUgPSAKLSAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgU3R1ZGVudEhvbWUgc0hvbWUgPQorICAgICAgICAgICAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHVkZW50SG9tZS5jbGFzcyk7CiAKICAgICAgICAgICAgIHRyeSB7CkBAIC0xMTgsNyArMTE4LDcgQEAKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiQ01QUmVhZE9ubHlDbGllbnQgU3R1ZGVudCAgICIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gZXhjZXB0aW9uISIpOwogICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgICAgIC8vRXhwZWN0ZWQgCisgICAgICAgICAgICAgICAgLy9FeHBlY3RlZAogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdGgpIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uISIpOwpAQCAtMTMxLDggKzEzMSw4IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU3R1ZGVudCIpOwotICAgICAgICAgICAgU3R1ZGVudEhvbWUgc0hvbWUgPSAKLSAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgU3R1ZGVudEhvbWUgc0hvbWUgPQorICAgICAgICAgICAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHVkZW50SG9tZS5jbGFzcyk7CiAKICAgICAgICAgICAgIHRyeSB7CkBAIC0xNDUsNyArMTQ1LDcgQEAKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiQ01QUmVhZE9ubHlDbGllbnQgU3R1ZGVudCAgICIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gZXhjZXB0aW9uISIpOwogICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgICAgIC8vRXhwZWN0ZWQgCisgICAgICAgICAgICAgICAgLy9FeHBlY3RlZAogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdGgpIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uISIpOwpAQCAtMTc2LDIwICsxNzYsMjAgQEAKICAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVTdHVkZW50Iik7CiAKLSAgICAgICAgICAgIFN0dWRlbnRIb21lIHJlYWRPbmx5U3R1ZGVudEhvbWUgPSAKLSAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgU3R1ZGVudEhvbWUgcmVhZE9ubHlTdHVkZW50SG9tZSA9CisgICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0dWRlbnRIb21lLmNsYXNzKTsKICAgICAgICAgICAgIG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9NdXRhYmxlU3R1ZGVudCIpOwogCi0gICAgICAgICAgICBTdHVkZW50SG9tZSBtdXRhYmxlU3R1ZGVudEhvbWUgPSAKLSAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgU3R1ZGVudEhvbWUgbXV0YWJsZVN0dWRlbnRIb21lID0KKyAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R1ZGVudEhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgICBTdHVkZW50IG5ld1N0dWRlbnQgPSBtdXRhYmxlU3R1ZGVudEhvbWUuY3JlYXRlKCI5OTkiLCAiSm9lIFNjaG1vIik7CiAgICAgICAgICAgICBTdHVkZW50IG5ld1N0dWRlbnQyID0gbXV0YWJsZVN0dWRlbnRIb21lLmNyZWF0ZSgiOTk4IiwgIkppbGwgU2NobW8iKTsKICAgICAgICAgICAgIHJlYWRPbmx5U3R1ZGVudEhvbWUudGVzdEZpbmQoIjk5OSIpOwogICAgICAgICAgICAgcmVhZE9ubHlTdHVkZW50SG9tZS50ZXN0RmluZCgiOTk4Iik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcmVhZE9ubHlTdHVkZW50SG9tZS50ZXN0TG9jYWxGaW5kKCI5OTkiKTsKICAgICAgICAgICAgIHJlYWRPbmx5U3R1ZGVudEhvbWUudGVzdExvY2FsRmluZCgiOTk4Iik7CiAKQEAgLTE5OCw5ICsxOTgsOSBAQAogICAgICAgICAgICAgcmVhZE9ubHlTdHVkZW50SG9tZS5maW5kQmFyKCI5OTkiKTsKICAgICAgICAgICAgIHJlYWRPbmx5U3R1ZGVudEhvbWUuZmluZEJhcigiOTk4Iik7CiAKLSAgICAgICAgICAgIFN0dWRlbnQgcmVhZE9ubHlTdHVkZW50ID0gCisgICAgICAgICAgICBTdHVkZW50IHJlYWRPbmx5U3R1ZGVudCA9CiAgICAgICAgICAgICAgICAgcmVhZE9ubHlTdHVkZW50SG9tZS5maW5kQnlQcmltYXJ5S2V5KCI5OTkiKTsKLSAgICAgICAgICAgIFN0dWRlbnQgcmVhZE9ubHlTdHVkZW50MiA9IAorICAgICAgICAgICAgU3R1ZGVudCByZWFkT25seVN0dWRlbnQyID0KICAgICAgICAgICAgICAgICByZWFkT25seVN0dWRlbnRIb21lLmZpbmRCeVByaW1hcnlLZXkoIjk5OCIpOwogCiAgICAgICAgICAgICByZWFkT25seVN0dWRlbnRIb21lLmZpbmRCeVJlbW90ZVN0dWRlbnQocmVhZE9ubHlTdHVkZW50KTsKQEAgLTI2Miw5ICsyNjIsOSBAQAogICAgICAgICAgICAgLy8gdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBiZWFuIGFuZCBjYWxsIGVqYkxvYWQgb24gaXQuCiAgICAgICAgICAgICAvLyBTbywgb25seSB1c2UgbmFtZTEgYW5kIG5hbWUyIHRvIGRlY2lkZSBpZiB0ZXN0IHBhc3NlZC4KICAgICAgICAgICAgIGlmIChuYW1lMS5lcXVhbHMocmVhZE9ubHlOYW1lMSkgJiYgbmFtZTIuZXF1YWxzKHJlYWRPbmx5TmFtZTIpICYmCi0gICAgICAgICAgICAgICAgbmFtZTEuZXF1YWxzKHJlYWRPbmx5TmFtZTFUeCkgJiYgCisgICAgICAgICAgICAgICAgbmFtZTEuZXF1YWxzKHJlYWRPbmx5TmFtZTFUeCkgJiYKICAgICAgICAgICAgICAgICBuYW1lMi5lcXVhbHMocmVhZE9ubHlOYW1lMlR4KSkgewotICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJDTVBSZWFkT25seUNsaWVudCBSZWFkTW9zdGx5ICAiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiQ01QUmVhZE9ubHlDbGllbnQgUmVhZE1vc3RseSAgIiwgc3RhdC5GQUlMKTsKQEAgLTI3Niw3ICsyNzYsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkNNUFJlYWRPbmx5Q2xpZW50IFJlYWRNb3N0bHkgICIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiEiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3QxMigpIHsKQEAgLTI4NSw3ICsyODUsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOdW0gSXRlcmF0aW9ucyA9ICIgKyBudW1JdGVyYXRpb25zXyk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk51bSBUaHJlYWRzID0gIiArIG51bVRocmVhZHNfKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTnVtIFBLcyA9ICIgKyBudW1QS3NfKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2xlZXAgdGltZSBpbiBtaWxsaXNlY29uZHMgPSAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwIHRpbWUgaW4gbWlsbGlzZWNvbmRzID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXBUaW1lSW5NaWxsaXNfKTsKIAogICAgICAgICAgICAgaW50IG51bVdyaXRlckl0ZXJhdGlvbnMgPSBudW1JdGVyYXRpb25zXyAvIDEwMDsKQEAgLTI5MywzMCArMjkzLDMwIEBACiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTnVtIHdyaXRlciBpdGVyYXRpb25zID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtV3JpdGVySXRlcmF0aW9ucyk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyaXRlciBzbGVlcCB0aW1lIGluIG1pbGxpc2Vjb25kcyA9ICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JpdGVyIHNsZWVwIHRpbWUgaW4gbWlsbGlzZWNvbmRzID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyU2xlZXBUaW1lSW5NaWxsaXMpOwogCiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU3R1ZGVudCIpOwogCi0gICAgICAgICAgICBTdHVkZW50SG9tZSByZWFkT25seVN0dWRlbnRIb21lID0gCi0gICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgIFN0dWRlbnRIb21lIHJlYWRPbmx5U3R1ZGVudEhvbWUgPQorICAgICAgICAgICAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHVkZW50SG9tZS5jbGFzcyk7CiAgICAgICAgICAgICBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvTXV0YWJsZVN0dWRlbnQiKTsKIAotICAgICAgICAgICAgU3R1ZGVudEhvbWUgbXV0YWJsZVN0dWRlbnRIb21lID0gCi0gICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgIFN0dWRlbnRIb21lIG11dGFibGVTdHVkZW50SG9tZSA9CisgICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0dWRlbnRIb21lLmNsYXNzKTsKLSAgICAgICAgICAKKwogICAgICAgICAgICAgU3R1ZGVudFtdIG5ld1N0dWRlbnRzID0gbmV3IFN0dWRlbnRbbnVtUEtzX107CiAgICAgICAgICAgICBTdHVkZW50W10gcmVhZE9ubHlTdHVkZW50cyA9IG5ldyBTdHVkZW50W251bVBLc19dOwogICAgICAgICAgICAgVGhyZWFkW10gcmVhZGVycyA9IG5ldyBUaHJlYWRbbnVtVGhyZWFkc18gKiBudW1QS3NfXTsKICAgICAgICAgICAgIFRocmVhZFtdIHdyaXRlcnMgPSBuZXcgVGhyZWFkW251bVBLc19dOwogCiAgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtUEtzXzsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgbmV3U3R1ZGVudHNbaV0gPSAKKyAgICAgICAgICAgICAgICBuZXdTdHVkZW50c1tpXSA9CiAgICAgICAgICAgICAgICAgICAgIG11dGFibGVTdHVkZW50SG9tZS5jcmVhdGUoIlJlYWRlclRocmVhZCIgKyBpLCAiQUJDIiArIGkpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgc3R1ZGVudCAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBzdHVkZW50ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTdHVkZW50c1tpXS5nZXRQcmltYXJ5S2V5KCkpOwogICAgICAgICAgICAgfQogCkBAIC0zMjQsOSArMzI0LDkgQEAKICAgICAgICAgICAgIHJlYWRPbmx5U3R1ZGVudEhvbWUuZmluZEZvbygpOwogCiAgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtUEtzXzsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgcmVhZE9ubHlTdHVkZW50c1tpXSA9IAorICAgICAgICAgICAgICAgIHJlYWRPbmx5U3R1ZGVudHNbaV0gPQogICAgICAgICAgICAgICAgICAgICByZWFkT25seVN0dWRlbnRIb21lLmZpbmRCeVByaW1hcnlLZXkoIlJlYWRlclRocmVhZCIgKyBpKTsKLSAgICAgICAgICAgICAgICB3cml0ZXJzW2ldID0gbmV3IFdyaXRlclRocmVhZChuZXdTdHVkZW50c1tpXSwgCisgICAgICAgICAgICAgICAgd3JpdGVyc1tpXSA9IG5ldyBXcml0ZXJUaHJlYWQobmV3U3R1ZGVudHNbaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtV3JpdGVySXRlcmF0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXJTbGVlcFRpbWVJbk1pbGxpcyk7CiAgICAgICAgICAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IG51bVRocmVhZHNfOyBqKyspIHsKQEAgLTMzNCwyMSArMzM0LDIxIEBACiAgICAgICAgICAgICAgICAgICAgIGludCB0aHJlYWRJbmRleCA9IGkqbnVtVGhyZWFkc18gKyBqOwogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRocmVhZCBpbmRleCA9ICIgKyB0aHJlYWRJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIHJlYWRlcnNbdGhyZWFkSW5kZXhdID0gbmV3IFJlYWRlclRocmVhZAotICAgICAgICAgICAgICAgICAgICAgICAgKHJlYWRPbmx5U3R1ZGVudHNbaV0sIG51bUl0ZXJhdGlvbnNfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIChyZWFkT25seVN0dWRlbnRzW2ldLCBudW1JdGVyYXRpb25zXywKICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcFRpbWVJbk1pbGxpc18pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgcmVhZGVycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnRpbmcgcmVhZGVyIHRocmVhZCAiICsgaSk7CiAgICAgICAgICAgICAgICAgcmVhZGVyc1tpXS5zdGFydCgpOwotICAgICAgICAgICAgfSAgICAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHdyaXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXJ0aW5nIHdyaXRlciB0aHJlYWQgIiArIGkpOwogICAgICAgICAgICAgICAgIHdyaXRlcnNbaV0uc3RhcnQoKTsKLSAgICAgICAgICAgIH0gICAgIAotICAgICAgICAgICAgCisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSm9pbmluZyBvbiAiICsgcmVhZGVycy5sZW5ndGggKyAiIHJlYWRlcnMiKTsKICAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCByZWFkZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgcmVhZGVyc1tpXS5qb2luKCk7CkBAIC0zNTcsOCArMzU3LDggQEAKICAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCB3cml0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgd3JpdGVyc1tpXS5qb2luKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgCisKKwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkNNUFJlYWRPbmx5Q2xpZW50IFJlYWRlclRocmVhZHMgICIsIHN0YXQuUEFTUyk7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVtb3ZpbmcgYWxsIHN0dWRlbnRzIik7CkBAIC0zNzAsMjQgKzM3MCwyNCBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkNNUFJlYWRPbmx5Q2xpZW50IFJlYWRlclRocmVhZHMgICIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiEiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBjbGFzcyBSZWFkZXJUaHJlYWQgZXh0ZW5kcyBUaHJlYWQgewogCi0gICAgICAgIFN0dWRlbnQgcmVhZE9ubHlTdHVkZW50XzsgICAgICAgICAgICAgIAorICAgICAgICBTdHVkZW50IHJlYWRPbmx5U3R1ZGVudF87CiAgICAgICAgIGludCBudW1SZWFkc187CiAgICAgICAgIGxvbmcgc2xlZXBUaW1lSW5NaWxsaXNfOwotICAgICAgICBTdHJpbmcgc3R1ZGVudFBLXzsgICAgICAgIAorICAgICAgICBTdHJpbmcgc3R1ZGVudFBLXzsKIAotICAgICAgICBSZWFkZXJUaHJlYWQoU3R1ZGVudCByZWFkT25seVN0dWRlbnQsIGludCBudW1SZWFkcywgCisgICAgICAgIFJlYWRlclRocmVhZChTdHVkZW50IHJlYWRPbmx5U3R1ZGVudCwgaW50IG51bVJlYWRzLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBzbGVlcFRpbWVJbk1pbGxpcykgewotICAgICAgICAgICAgcmVhZE9ubHlTdHVkZW50XyA9IHJlYWRPbmx5U3R1ZGVudDsgICAgICAgICAgIAorICAgICAgICAgICAgcmVhZE9ubHlTdHVkZW50XyA9IHJlYWRPbmx5U3R1ZGVudDsKICAgICAgICAgICAgIG51bVJlYWRzXyA9IG51bVJlYWRzOwogICAgICAgICAgICAgc2xlZXBUaW1lSW5NaWxsaXNfID0gc2xlZXBUaW1lSW5NaWxsaXM7CiAgICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICAgICAgIGZvciggaW50IGkgPSAwOyBpIDwgbnVtUmVhZHNfOyBpKyspIHsKICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICBpZiggaSA9PSAwICkgewpAQCAtNDA3LDIwICs0MDcsMjAgQEAKIAogICAgIHByaXZhdGUgY2xhc3MgV3JpdGVyVGhyZWFkIGV4dGVuZHMgVGhyZWFkIHsKIAotICAgICAgICBTdHVkZW50IG11dGFibGVTdHVkZW50XzsgICAgICAgICAgICAgIAorICAgICAgICBTdHVkZW50IG11dGFibGVTdHVkZW50XzsKICAgICAgICAgaW50IG51bVdyaXRlc187CiAgICAgICAgIGxvbmcgc2xlZXBUaW1lSW5NaWxsaXNfOwogICAgICAgICBTdHJpbmcgc3R1ZGVudFBLXzsKIAotICAgICAgICBXcml0ZXJUaHJlYWQoU3R1ZGVudCBtdXRhYmxlU3R1ZGVudCwgaW50IG51bVdyaXRlcywgCisgICAgICAgIFdyaXRlclRocmVhZChTdHVkZW50IG11dGFibGVTdHVkZW50LCBpbnQgbnVtV3JpdGVzLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBzbGVlcFRpbWVJbk1pbGxpcykgewotICAgICAgICAgICAgbXV0YWJsZVN0dWRlbnRfID0gbXV0YWJsZVN0dWRlbnQ7ICAgICAgICAgICAKKyAgICAgICAgICAgIG11dGFibGVTdHVkZW50XyA9IG11dGFibGVTdHVkZW50OwogICAgICAgICAgICAgbnVtV3JpdGVzXyA9IG51bVdyaXRlczsKICAgICAgICAgICAgIHNsZWVwVGltZUluTWlsbGlzXyA9IHNsZWVwVGltZUluTWlsbGlzOwogICAgICAgICB9CiAKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yKCBpbnQgaSA9IDA7IGkgPCBudW1Xcml0ZXNfOyBpKyspIHsgICAgICAgICAgICAgICAgCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIGZvciggaW50IGkgPSAwOyBpIDwgbnVtV3JpdGVzXzsgaSsrKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgaWYoIGkgPT0gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWRlbnRQS18gPSAoU3RyaW5nKSBtdXRhYmxlU3R1ZGVudF8uZ2V0UHJpbWFyeUtleSgpOwpAQCAtNDM5LDQgKzQzOSw0IEBACiAKICAgICB9CiAKLX0gCit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggOTc5MzYxOC4uYjRhOGQ0NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNDUsNyArNDUsNyBAQAogICAgICAgPHNlY3VyaXR5LWlkZW50aXR5PgogICAgICAgICA8ZGVzY3JpcHRpb24+PC9kZXNjcmlwdGlvbj4KICAgICAgICAgPHVzZS1jYWxsZXItaWRlbnRpdHk+PC91c2UtY2FsbGVyLWlkZW50aXR5PgotICAgICAgPC9zZWN1cml0eS1pZGVudGl0eT4gICAgIAorICAgICAgPC9zZWN1cml0eS1pZGVudGl0eT4KICAgICAgIDxxdWVyeT4KICAgICAgICAgPGRlc2NyaXB0aW9uPjwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxxdWVyeS1tZXRob2Q+CkBAIC0xMDQsNyArMTA0LDcgQEAKICAgICAgIDxjbXAtZmllbGQ+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5ubyBkZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxmaWVsZC1uYW1lPm5hbWU8L2ZpZWxkLW5hbWU+Ci0gICAgICA8L2NtcC1maWVsZD4gICAKKyAgICAgIDwvY21wLWZpZWxkPgogICAgICAgPHByaW1rZXktZmllbGQ+c3R1ZGVudElkPC9wcmlta2V5LWZpZWxkPgogICAgICAgPGVqYi1yZWY+CiAgICAgICAgIDxlamItcmVmLW5hbWU+ZWpiL1JlYWRPbmx5U3R1ZGVudDwvZWpiLXJlZi1uYW1lPgpAQCAtMTE1LDcgKzExNSw3IEBACiAgICAgICA8c2VjdXJpdHktaWRlbnRpdHk+CiAgICAgICAgIDxkZXNjcmlwdGlvbj48L2Rlc2NyaXB0aW9uPgogICAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eT48L3VzZS1jYWxsZXItaWRlbnRpdHk+Ci0gICAgICA8L3NlY3VyaXR5LWlkZW50aXR5PiAgICAgCisgICAgICA8L3NlY3VyaXR5LWlkZW50aXR5PgogICAgICAgPHF1ZXJ5PgogICAgICAgICA8ZGVzY3JpcHRpb24+PC9kZXNjcmlwdGlvbj4KICAgICAgICAgPHF1ZXJ5LW1ldGhvZD4KQEAgLTE2MSwxNCArMTYxLDE0IEBACiAgICAgICA8dW5jaGVja2VkIC8+CiAgICAgICA8bWV0aG9kPgogICAgICAgICA8ZWpiLW5hbWU+UmVhZE9ubHlTdHVkZW50QmVhbjwvZWpiLW5hbWU+Ci0gICAgICAgIDxtZXRob2QtbmFtZT4qPC9tZXRob2QtbmFtZT4gICAgICAgIAorICAgICAgICA8bWV0aG9kLW5hbWU+KjwvbWV0aG9kLW5hbWU+CiAgICAgICA8L21ldGhvZD4KICAgICAgIDxtZXRob2Q+CiAgICAgICAgIDxlamItbmFtZT5TdHVkZW50QmVhbjwvZWpiLW5hbWU+CiAgICAgICAgIDxtZXRob2QtbmFtZT4qPC9tZXRob2QtbmFtZT4KICAgICAgIDwvbWV0aG9kPgogICAgIDwvbWV0aG9kLXBlcm1pc3Npb24+Ci0gICAgCisKIDwhLS0gU3R1ZGVudCBFSkIgLS0+CiAgICAgPGNvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgICAgIDxtZXRob2Q+CkBAIC0xODEsNyArMTgxLDcgQEAKICAgICAgICAgPC9tZXRob2QtcGFyYW1zPgogICAgICAgPC9tZXRob2Q+CiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+Ci0gICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+ICAgIAorICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICAgIDxjb250YWluZXItdHJhbnNhY3Rpb24+CiAgICAgICA8bWV0aG9kPgogICAgICAgICA8ZWpiLW5hbWU+UmVhZE9ubHlTdHVkZW50QmVhbjwvZWpiLW5hbWU+CkBAIC0xOTksNyArMTk5LDcgQEAKICAgICAgICAgPG1ldGhvZC1wYXJhbXMgLz4KICAgICAgIDwvbWV0aG9kPgogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgotICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPiAgICAgICAgICAgIAorICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICAgIDxjb250YWluZXItdHJhbnNhY3Rpb24+CiAgICAgICA8bWV0aG9kPgogICAgICAgICA8ZWpiLW5hbWU+UmVhZE9ubHlTdHVkZW50QmVhbjwvZWpiLW5hbWU+CkBAIC0yMTAsNyArMjEwLDcgQEAKICAgICAgICAgPC9tZXRob2QtcGFyYW1zPgogICAgICAgPC9tZXRob2Q+CiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+Ci0gICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+ICAgICAKKyAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgICAgPGNvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgICAgIDxtZXRob2Q+CiAgICAgICAgIDxlamItbmFtZT5TdHVkZW50QmVhbjwvZWpiLW5hbWU+CkBAIC0yMjksOCArMjI5LDggQEAKICAgICAgICAgPG1ldGhvZC1uYW1lPio8L21ldGhvZC1uYW1lPgogICAgICAgPC9tZXRob2Q+CiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+Ci0gICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+ICAgIAorICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2Rlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2Rlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwKaW5kZXggZWZiNmMzZS4uMDdiZDU2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9kZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbApAQCAtMTgsNyArMTgsNyBAQAogCiAtLT4KIAotPHN1bi1hcHBsaWNhdGlvbi1jbGllbnQ+IAorPHN1bi1hcHBsaWNhdGlvbi1jbGllbnQ+CiAgICAgPGVqYi1yZWY+CiAgICAgICA8ZWpiLXJlZi1uYW1lPmVqYi9TaW1wbGVTdHVkZW50PC9lamItcmVmLW5hbWU+CiAgICAgICA8am5kaS1uYW1lPmVqYi9lamJfY21wX3JlYWRvbmx5X1JlYWRPbmx5U3R1ZGVudDwvam5kaS1uYW1lPgpAQCAtMjYsNSArMjYsNSBAQAogICAgIDxlamItcmVmPgogICAgICAgPGVqYi1yZWYtbmFtZT5lamIvTXV0YWJsZVN0dWRlbnQ8L2VqYi1yZWYtbmFtZT4KICAgICAgIDxqbmRpLW5hbWU+ZWpiL2VqYl9jbXBfcmVhZG9ubHlfU3R1ZGVudDwvam5kaS1uYW1lPgotICAgIDwvZWpiLXJlZj4gICAKKyAgICA8L2VqYi1yZWY+CiA8L3N1bi1hcHBsaWNhdGlvbi1jbGllbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCBkNzg5NjZmLi5jYjY5YTdkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTIxLDEwICsyMSwxMCBAQAogCiA8c3VuLWVqYi1qYXI+CiAgIDxlbnRlcnByaXNlLWJlYW5zPgotICAgIDxuYW1lPmVqYi1jbXAtcmVhZG9ubHktZWpiLmphcjwvbmFtZT4gICAKKyAgICA8bmFtZT5lamItY21wLXJlYWRvbmx5LWVqYi5qYXI8L25hbWU+CiAgICAgPGVqYj4KICAgICAgIDxlamItbmFtZT5SZWFkT25seVN0dWRlbnRCZWFuPC9lamItbmFtZT4KLSAgICAgIDxqbmRpLW5hbWU+ZWpiL2VqYl9jbXBfcmVhZG9ubHlfUmVhZE9ubHlTdHVkZW50PC9qbmRpLW5hbWU+ICAgICAgICAgICAKKyAgICAgIDxqbmRpLW5hbWU+ZWpiL2VqYl9jbXBfcmVhZG9ubHlfUmVhZE9ubHlTdHVkZW50PC9qbmRpLW5hbWU+CiAgICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+dHJ1ZTwvaXMtcmVhZC1vbmx5LWJlYW4+CiAgICAgICA8cmVmcmVzaC1wZXJpb2QtaW4tc2Vjb25kcz42MDwvcmVmcmVzaC1wZXJpb2QtaW4tc2Vjb25kcz4KICAgICA8L2VqYj4KQEAgLTM0LDcgKzM0LDcgQEAKICAgICAgIDxlamItcmVmPgogICAgICAgICA8ZWpiLXJlZi1uYW1lPmVqYi9SZWFkT25seVN0dWRlbnQ8L2VqYi1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5lamIvZWpiX2NtcF9yZWFkb25seV9SZWFkT25seVN0dWRlbnQ8L2puZGktbmFtZT4KLSAgICAgIDwvZWpiLXJlZj4gICAgICAgICAgIAorICAgICAgPC9lamItcmVmPgogICAgIDwvZWpiPgogICAgIDxjbXAtcmVzb3VyY2U+CiAgICAgICAgPGpuZGktbmFtZT5qZGJjL19fZGVmYXVsdDwvam5kaS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9lamIvU3R1ZGVudEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRCZWFuLmphdmEKaW5kZXggODhmN2ZlNi4uOWYyYzc5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9lamIvU3R1ZGVudEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2VqYi9TdHVkZW50QmVhbi5qYXZhCkBAIC01MywxMCArNTMsMTAgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOb3RpZnlpbmcgcmVhZC1vbmx5IGJlYW4gb2YgdXBkYXRlIHRvICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC1tb3N0bHkgU3R1ZGVudCAiICsgbmFtZSk7Ci0gICAgICAgICAgICAgICAgUmVhZE9ubHlCZWFuTm90aWZpZXIgc3R1ZGVudE5vdGlmaWVyID0gCisgICAgICAgICAgICAgICAgUmVhZE9ubHlCZWFuTm90aWZpZXIgc3R1ZGVudE5vdGlmaWVyID0KICAgICAgICAgICAgICAgICAgICAgUmVhZE9ubHlCZWFuSGVscGVyLmdldFJlYWRPbmx5QmVhbk5vdGlmaWVyCiAgICAgICAgICAgICAgICAgICAgICgiamF2YTpjb21wL2Vudi9lamIvUmVhZE9ubHlTdHVkZW50Iik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgcmVhZC1vbmx5IHZlcnNpb24KICAgICAgICAgICAgICAgICBzdHVkZW50Tm90aWZpZXIucmVmcmVzaChnZXRTdHVkZW50SWQoKSk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CkBAIC0xMjEsMTIgKzEyMSwxMiBAQAogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjJuZCBxdWVyeSBvZiAiICsgcGsgKyAiIHRvb2sgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFmdGVyMiAtIGFmdGVyKSArICIgbmFubyBzZWNzIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkhvbWVUZXN0TG9jYWxGaW5kKFN0cmluZyBwaykgewpAQCAtMTQ5LDE3ICsxNDksMTcgQEAKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIybmQgcXVlcnkgb2YgIiArIHBrICsgIiB0b29rICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhZnRlcjIgLSBhZnRlcikgKyAiIG5hbm8gc2VjcyIpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJIb21lVGVzdExvY2FsUmVtb3ZlKFN0cmluZyBwaykgewotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBTdHVkZW50TG9jYWxIb21lIGxvY2FsSG9tZSA9IChTdHVkZW50TG9jYWxIb21lKQogICAgICAgICAgICAgY29udGV4dC5nZXRFSkJMb2NhbEhvbWUoKTsKIApAQCAtMTgwLDcgKzE4MCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uIHdoaWxlIHRyeWluZyAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHRvIGRvIGEgcmVtb3ZlIG9uIGEgcmVhZC1vbmx5IGNtcCBIb21lIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgYm9vbGVhbiByZW1vdmVTdWNjZWVkZWQgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN0dWRlbnRMb2NhbCBzdHVkZW50ID0gbG9jYWxIb21lLmZpbmRCeVByaW1hcnlLZXkocGspOwpAQCAtMjAyLDM0ICsyMDIsMzQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHRvIGRvIGEgcmVtb3ZlIG9uIGEgcmVhZC1vbmx5IGNtcCAiKTsKICAgICAgICAgfQogCi0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3R1ZGVudEJlYW4uZWpiUmVtb3ZlIGNhbGxlZCIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7ICAgICAgIAorICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsgICAgIAorICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsKICAgICAgICAgdGhpcy5jb250ZXh0ID0gbnVsbDsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsgICAgIAorICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsgICAgICAKKyAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsKICAgICB9Ci0gIAogCi0gICAgCisKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9lamIvU3R1ZGVudEhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRIb21lLmphdmEKaW5kZXggMjliMDIyZC4uOWY4ZWMyNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9lamIvU3R1ZGVudEhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2VqYi9TdHVkZW50SG9tZS5qYXZhCkBAIC0zNiw4ICszNiw4IEBACiAgICAgICogQGV4Y2VwdGlvbiB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIGFuZCBSZW1vdGVFeGNlcHRpb24uCiAgICAgICoKICAgICAgKi8KLSAKLSAgICBwdWJsaWMgU3R1ZGVudCBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBzdHVkZW50SWQpIAorCisgICAgcHVibGljIFN0dWRlbnQgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgc3R1ZGVudElkKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgamF2YS51dGlsLkNvbGxlY3Rpb24gZmluZEZvbygpIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRMb2NhbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9lamIvU3R1ZGVudExvY2FsLmphdmEKaW5kZXggNTU1ZWVkNS4uNTc0ZmY5ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9lamIvU3R1ZGVudExvY2FsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9lamIvU3R1ZGVudExvY2FsLmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJMb2NhbE9iamVjdDsKIAogcHVibGljIGludGVyZmFjZSBTdHVkZW50TG9jYWwgZXh0ZW5kcyBFSkJMb2NhbE9iamVjdCB7Ci0gCisKICAgLyoqCiAgICAqIFJldHVybnMgdGhlIE5hbWUgb2YgYSBzdHVkZW50LgogICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRMb2NhbEhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRMb2NhbEhvbWUuamF2YQppbmRleCA1OWI2MTY2Li4yMmM0MDY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2VqYi9TdHVkZW50TG9jYWxIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9lamIvU3R1ZGVudExvY2FsSG9tZS5qYXZhCkBAIC0zNiwxMSArMzYsMTEgQEAKICAgICAgKiBAZXhjZXB0aW9uIHRocm93cyBGaW5kZXJFeGNlcHRpb24uCiAgICAgICoKICAgICAgKi8KLSAKLSAgICBwdWJsaWMgU3R1ZGVudExvY2FsIGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHN0dWRlbnRJZCkgCisKKyAgICBwdWJsaWMgU3R1ZGVudExvY2FsIGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHN0dWRlbnRJZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAogCiAgICAgcHVibGljIFN0dWRlbnRMb2NhbCBmaW5kQnlMb2NhbFN0dWRlbnQoU3R1ZGVudExvY2FsIHN0dWRlbnQpIHRocm93cyBGaW5kZXJFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggOTM2NWUwMS4uNmQwZTdmNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNSArMSw1IEBACiBDUkVBVEUgVEFCTEUgU1RVREVOVCAoCi1TVFVERU5USUQgVkFSQ0hBUigyNTYpIE5PVCBOVUxMIFBSSU1BUlkgS0VZLCAKLU5BTUUgVkFSQ0hBUigyNTYpIAorU1RVREVOVElEIFZBUkNIQVIoMjU2KSBOT1QgTlVMTCBQUklNQVJZIEtFWSwKK05BTUUgVkFSQ0hBUigyNTYpCiApCiA7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2J1aWxkLnhtbAppbmRleCAzZDg2ZDA2Li5mZWMyOTUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9idWlsZC54bWwKQEAgLTQ3LDExICs0NywxMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWUgdGVzdHMpCi0JCQlhbnQgbWV0aG9kY2hlY2twb2ludCAoRXhlY3V0ZXMgdGhlIGVqYi1lZS1tZXRob2RjaGVja3BvaW50IHRlc3QpCi0JCQlhbnQgdHhjaGVja3BvaW50IChFeGVjdXRlcyB0aGUgZWpiLWVlLXR4Y2hlY2twb2ludCB0ZXN0KQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lZSB0ZXN0cykKKyAgICAgICAgICAgIGFudCBtZXRob2RjaGVja3BvaW50IChFeGVjdXRlcyB0aGUgZWpiLWVlLW1ldGhvZGNoZWNrcG9pbnQgdGVzdCkKKyAgICAgICAgICAgIGFudCB0eGNoZWNrcG9pbnQgKEV4ZWN1dGVzIHRoZSBlamItZWUtdHhjaGVja3BvaW50IHRlc3QpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvYXN5bmN0ZXN0L1NGU0JEcml2ZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvYXN5bmN0ZXN0L1NGU0JEcml2ZXIvYnVpbGQueG1sCmluZGV4IDMzMWM2ZGUuLjk0ZDQyMTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2FzeW5jdGVzdC9TRlNCRHJpdmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9hc3luY3Rlc3QvU0ZTQkRyaXZlci9idWlsZC54bWwKQEAgLTMwLDI3ICszMCwyNyBAQAogICAgIDxpbXBvcnQgZmlsZT0ibmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPCEtLQogCi0gICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUgCi0gICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQgCi0gICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6IAorICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlCisgICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQKKyAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZToKIAotICAgICAgLXByZS1pbml0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMgCi0gICAgICAtcG9zdC1pbml0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgLXByZS1jb21waWxlOiAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiAKLSAgICAgIC1wb3N0LWNvbXBpbGU6ICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiAKKyAgICAgIC1wcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzCisgICAgICAtcG9zdC1pbml0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzCisgICAgICAtcHJlLWNvbXBpbGU6ICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uCisgICAgICAtcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24KICAgICAgIC1wcmUtY29tcGlsZS1zaW5nbGU6ICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIGZpbGUKICAgICAgIC1wb3N0LWNvbXBpbGUtc2luZ2xlOiAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgZmlsZQogICAgICAgLXByZS1jb21waWxlLXRlc3Q6ICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBKVW5pdCB0ZXN0cwogICAgICAgLXBvc3QtY29tcGlsZS10ZXN0OiAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIEpVbml0IHRlc3RzCiAgICAgICAtcHJlLWNvbXBpbGUtdGVzdC1zaW5nbGU6ICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBKVW5pdCB0ZXN0CiAgICAgICAtcG9zdC1jb21waWxlLXRlc3Qtc2luZ2xlOiBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIEpVdW5pdCB0ZXN0Ci0gICAgICAtcHJlLWRpc3Q6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGFyY2hpdmUgYnVpbGRpbmcgCi0gICAgICAtcG9zdC1kaXN0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgYXJjaGl2ZSBidWlsZGluZyAKLSAgICAgIC1wb3N0LWNsZWFuOiAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBjbGVhbmluZyBidWlsZCBwcm9kdWN0cyAKKyAgICAgIC1wcmUtZGlzdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgYXJjaGl2ZSBidWlsZGluZworICAgICAgLXBvc3QtZGlzdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGFyY2hpdmUgYnVpbGRpbmcKKyAgICAgIC1wb3N0LWNsZWFuOiAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBjbGVhbmluZyBidWlsZCBwcm9kdWN0cwogICAgICAgLXByZS1ydW4tZGVwbG95OiAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBkZXBsb3lpbmcKICAgICAgIC1wb3N0LXJ1bi1kZXBsb3k6ICAgICAgICAgIGNhbGxlZCBhZnRlciBkZXBsb3lpbmcKIAotICAgIEV4YW1wbGUgb2YgcGx1Z2luZyBhbiBvYmZ1c2NhdG9yIGFmdGVyIHRoZSBjb21waWxhdGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0iLXBvc3QtY29tcGlsZSI+CiAgICAgICAgICAgICA8b2JmdXNjYXRlPgpAQCAtNTgsMjEgKzU4LDIxIEBACiAgICAgICAgICAgICA8L29iZnVzY2F0ZT4KICAgICAgICAgPC90YXJnZXQ+CiAKLSAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQgCi0gICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuIAorICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZAorICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLgogCiAKICAgICBPdGhlciB3YXkgaG93IHRvIGN1c3RvbWl6ZSB0aGUgYnVpbGQgaXMgYnkgb3ZlcnJpZGluZyBleGlzdGluZyBtYWluIHRhcmdldHMuCi0gICAgVGhlIHRhcmdldCBvZiBpbnRlcmVzdCBhcmU6IAorICAgIFRoZSB0YXJnZXQgb2YgaW50ZXJlc3QgYXJlOgogCiAgICAgICBpbml0LW1hY3JvZGVmLWphdmFjOiAgICBkZWZpbmVzIG1hY3JvIGZvciBqYXZhYyBjb21waWxhdGlvbgogICAgICAgaW5pdC1tYWNyb2RlZi1qdW5pdDogICBkZWZpbmVzIG1hY3JvIGZvciBqdW5pdCBleGVjdXRpb24KICAgICAgIGluaXQtbWFjcm9kZWYtZGVidWc6ICAgIGRlZmluZXMgbWFjcm8gZm9yIGNsYXNzIGRlYnVnZ2luZwogICAgICAgZG8tZGlzdDogICAgICAgICAgICAgICAgYXJjaGl2ZSBidWlsZGluZwotICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHByb2plY3QgCi0gICAgICBqYXZhZG9jLWJ1aWxkOiAgICAgICAgICBqYXZhZG9jIGdlbmVyYXRpb24gCisgICAgICBydW46ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdAorICAgICAgamF2YWRvYy1idWlsZDogICAgICAgICAgamF2YWRvYyBnZW5lcmF0aW9uCiAKLSAgICBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgdGhlIHRhcmdldCBmb3IgcHJvamVjdCBleGVjdXRpb24gY291bGQgbG9vayBsaWtlIAorICAgIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgdGFyZ2V0IGZvciBwcm9qZWN0IGV4ZWN1dGlvbiBjb3VsZCBsb29rIGxpa2UKIAogICAgICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iPFBST0pOQU1FPi1pbXBsLmphciI+CiAgICAgICAgICAgICA8ZXhlYyBkaXI9ImJpbiIgZXhlY3V0YWJsZT0ibGF1bmNoZXIuZXhlIj4KQEAgLTgwLDEwICs4MCwxMCBAQAogICAgICAgICAgICAgPC9leGVjPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIE5vdGljZSB0aGF0IG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gamFyIHRhcmdldCBhbmQgbm90IG9ubHkgb24gCi0gICAgY29tcGlsZSB0YXJnZXQgYXMgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgbGlzdCBvZiBhdmFpbGFibGUgCi0gICAgcHJvcGVydGllcyB3aGljaCB5b3UgY2FuIHVzZSBjaGVjayB0aGUgdGFyZ2V0IHlvdSBhcmUgb3ZlcnJpZGluZyBpbiAKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgTm90aWNlIHRoYXQgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbgorICAgIGNvbXBpbGUgdGFyZ2V0IGFzIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGxpc3Qgb2YgYXZhaWxhYmxlCisgICAgcHJvcGVydGllcyB3aGljaCB5b3UgY2FuIHVzZSBjaGVjayB0aGUgdGFyZ2V0IHlvdSBhcmUgb3ZlcnJpZGluZyBpbgorICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLgogCiAgICAgLS0+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9hc3luY3Rlc3QvU0ZTQkRyaXZlci9uYnByb2plY3QvYW50LWRlcGxveS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9hc3luY3Rlc3QvU0ZTQkRyaXZlci9uYnByb2plY3QvYW50LWRlcGxveS54bWwKaW5kZXggM2Q5M2UxMC4uYzM3ZDg2MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvYXN5bmN0ZXN0L1NGU0JEcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2FzeW5jdGVzdC9TRlNCRHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbApAQCAtMjUsNyArMjUsNyBAQAogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJnZnYzIiBwcm9wZXJ0eT0iZ2Z2My5wYXNzd29yZC5maWxlIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPiAgPCEtLSBkbyBub3QgZm9yZ2V0IHRvIGRlbGV0ZSB0aGlzISAtLT4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQVNfQURNSU5fUEFTU1dPUkQ9JHtnZnYzLnBhc3N3b3JkfSIgZmlsZT0iJHtnZnYzLnBhc3N3b3JkLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9Ii1wYXJzZS1zdW4td2ViIiBkZXBlbmRzPSItaW5pdC1jbC1kZXBsb3ltZW50LWVudiIgaWY9InN1bi53ZWIucHJlc2VudCI+CiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9ImdmdjMiIHByb3BlcnR5PSJ0ZW1wLnN1bi53ZWIiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7ZGVwbG95LmFudC5kb2NiYXNlLmRpcn0vV0VCLUlORi9zdW4td2ViLnhtbCIgdG9maWxlPSIke3RlbXAuc3VuLndlYn0iLz4KQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxyZXBsYWNldmFsdWU+PCFbQ0RBVEFbLS0+IDxzdW4td2ViLWFwcF1dPjwvcmVwbGFjZXZhbHVlPgogICAgICAgICA8L3JlcGxhY2U+CiAgICAgICAgIDx4bWxwcm9wZXJ0eSBmaWxlPSIke3RlbXAuc3VuLndlYn0iIHZhbGlkYXRlPSJmYWxzZSI+Ci0gICAgICAgIDwveG1scHJvcGVydHk+ICAgIAorICAgICAgICA8L3htbHByb3BlcnR5PgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7dGVtcC5zdW4ud2VifSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95LmFudC5jbGllbnQudXJsIiB2YWx1ZT0iJHtnZnYzLnVybH0ke3N1bi13ZWItYXBwLmNvbnRleHQtcm9vdH0iLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveS5jb250ZXh0LnJvb3QuYXJndW1lbnQiIHZhbHVlPSImYW1wO2NvbnRleHRyb290PSR7c3VuLXdlYi1hcHAuY29udGV4dC1yb290fSIvPgpAQCAtNzEsNyArNzEsNyBAQAogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZnVsbC5kZXBsb3kuYW50LmFyY2hpdmUiIGxvY2F0aW9uPSIke2RlcGxveS5hbnQuYXJjaGl2ZX0iLz4KICAgICAgICAgPGdldCBzcmM9IiR7Z2Z2My5hZG1pbi51cmx9L19fYXNhZG1pbi9kZXBsb3k/cGF0aD0ke2Z1bGwuZGVwbG95LmFudC5hcmNoaXZlfSR7ZGVwbG95LmNvbnRleHQucm9vdC5hcmd1bWVudH0mYW1wO2ZvcmNlPXRydWUmYW1wO25hbWU9JHthbnQucHJvamVjdC5uYW1lfSIKICAgICAgICAgICAgIGRlc3Q9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+Ci0gICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4gICAgCisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9Ii1kZXBsb3ktd2l0aC1wdyIgaWY9ImdmdjMucGFzc3dvcmQiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHtkZXBsb3kuYW50LmFyY2hpdmV9Ii8+CkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9ImdmdjMiIHByb3BlcnR5PSJnZnYzLnJlc3VsdHMuZmlsZSIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4gIDwhLS0gZG8gbm90IGZvcmdldCB0byBkZWxldGUgdGhpcyEgLS0+CiAgICAgICAgIDxnZXQgc3JjPSIke2dmdjMuYWRtaW4udXJsfS9fX2FzYWRtaW4vdW5kZXBsb3k/bmFtZT0ke2FudC5wcm9qZWN0Lm5hbWV9IgogICAgICAgICAgICAgZGVzdD0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KLSAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPiAgICAKKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iLXVuZGVwbG95LXdpdGgtcHciIGlmPSJnZnYzLnBhc3N3b3JkIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVW5kZXBsb3lpbmcgJHtkZXBsb3kuYW50LmFyY2hpdmV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9hc3luY3Rlc3QvU0ZTQkRyaXZlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9hc3luY3Rlc3QvU0ZTQkRyaXZlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKaW5kZXggNmRhYjM1OS4uOGE2MzE3MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvYXN5bmN0ZXN0L1NGU0JEcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2FzeW5jdGVzdC9TRlNCRHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbApAQCAtNDc3LDkgKzQ3Nyw5IEBACiAgICAgPHRhcmdldCBuYW1lPSItaW5pdC10YXNrZGVmcyI+CiAgICAgICAgIDxmYWlsIHVubGVzcz0ibGlicy5Db3B5TGlicy5jbGFzc3BhdGgiPgogVGhlIGxpYnMuQ29weUxpYnMuY2xhc3NwYXRoIHByb3BlcnR5IGlzIG5vdCBzZXQgdXAuCi1UaGlzIHByb3BlcnR5IG11c3QgcG9pbnQgdG8gCitUaGlzIHByb3BlcnR5IG11c3QgcG9pbnQgdG8KIG9yZy1uZXRiZWFucy1tb2R1bGVzLWphdmEtajJzZXByb2plY3QtY29weWxpYnN0YXNrLmphciBmaWxlIHdoaWNoIGlzIHBhcnQKLW9mIE5ldEJlYW5zIElERSBpbnN0YWxsYXRpb24gYW5kIGlzIHVzdWFsbHkgbG9jYXRlZCBhdCAKK29mIE5ldEJlYW5zIElERSBpbnN0YWxsYXRpb24gYW5kIGlzIHVzdWFsbHkgbG9jYXRlZCBhdAogJmx0O25ldGJlYW5zX2luc3RhbGxhdGlvbiZndDsvamF2YSZsdDt2ZXJzaW9uJmd0Oy9hbnQvZXh0cmEgZm9sZGVyLgogRWl0aGVyIG9wZW4gdGhlIHByb2plY3QgaW4gdGhlIElERSBhbmQgbWFrZSBzdXJlIENvcHlMaWJzIGxpYnJhcnkKIGV4aXN0cyBvciBzZXR1cCB0aGUgcHJvcGVydHkgbWFudWFsbHkuIEZvciBleGFtcGxlIGxpa2UgdGhpczoKQEAgLTg1NSw3ICs4NTUsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxqYXZhZG9jLWJ1aWxkLGphdmFkb2MtYnJvd3NlIiBkZXNjcmlwdGlvbj0iQnVpbGQgSmF2YWRvYy4iIG5hbWU9ImphdmFkb2MiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBDT01QSUxBVElPTiBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZSIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1wcmUtcHJlLWNvbXBpbGUtdGVzdCI+CkBAIC04OTQsNyArODk0LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZSwtcHJlLXByZS1jb21waWxlLXRlc3QsLXByZS1jb21waWxlLXRlc3Qtc2luZ2xlLC1kby1jb21waWxlLXRlc3Qtc2luZ2xlLC1wb3N0LWNvbXBpbGUtdGVzdC1zaW5nbGUiIG5hbWU9ImNvbXBpbGUtdGVzdC1zaW5nbGUiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBFWEVDVVRJT04gU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0IiBpZj0iaGF2ZS50ZXN0cyIgbmFtZT0iLXByZS10ZXN0LXJ1biI+CkBAIC05MjEsNyArOTIxLDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZS10ZXN0LXNpbmdsZSwtcHJlLXRlc3QtcnVuLXNpbmdsZSwtZG8tdGVzdC1ydW4tc2luZ2xlLC1wb3N0LXRlc3QtcnVuLXNpbmdsZSIgZGVzY3JpcHRpb249IlJ1biBzaW5nbGUgdW5pdCB0ZXN0LiIgbmFtZT0idGVzdC1zaW5nbGUiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBERUJVR0dJTkcgU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUtdGVzdCIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1kZWJ1Zy1zdGFydC1kZWJ1Z2dlZS10ZXN0Ij4KQEAgLTk0Nyw3ICs5NDcsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCwtcHJlLWRlYnVnLWZpeCwtZG8tZGVidWctZml4LXRlc3QiIGlmPSJuZXRiZWFucy5ob21lIiBuYW1lPSJkZWJ1Zy1maXgtdGVzdCIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIENMRUFOVVAgU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0IiBpZj0ibm8uZGlzdC5lYXIuZGlyIiBuYW1lPSJkZXBzLWNsZWFuIiB1bmxlc3M9Im5vLmRlcHMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2FzeW5jdGVzdC9TRlNCRHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvYXN5bmN0ZXN0L1NGU0JEcml2ZXIvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NGU0JEcml2ZXJTZXJ2bGV0LmphdmEKaW5kZXggYTBiNjQ5YS4uYjAzNmEyOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvYXN5bmN0ZXN0L1NGU0JEcml2ZXIvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NGU0JEcml2ZXJTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvYXN5bmN0ZXN0L1NGU0JEcml2ZXIvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NGU0JEcml2ZXJTZXJ2bGV0LmphdmEKQEAgLTM4LDggKzM4LDggQEAKICAqLwogcHVibGljIGNsYXNzIFNGU0JEcml2ZXJTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCi0gICAKLSAgICAvKiogCisKKyAgICAvKioKICAgICAgKiBQcm9jZXNzZXMgcmVxdWVzdHMgZm9yIGJvdGggSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IGFuZCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2RzLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlNlcnZsZXQgU0ZTQkRyaXZlclNlcnZsZXQ8L3RpdGxlPiIpOyAgCisgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlNlcnZsZXQgU0ZTQkRyaXZlclNlcnZsZXQ8L3RpdGxlPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+U2VydmxldCBTRlNCRHJpdmVyU2VydmxldCBhdCAiICsgcmVxdWVzdC5nZXRDb250ZXh0UGF0aCAoKSArICI8L2gxPiIpOwpAQCAtNzUsMTMgKzc1LDEzIEBACiAKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPkZyb20gc2Vzc2lvbiBTRlNCWzFdIE5PVCBOVUxMID86ICIgKyAoIiIgKyAoc2ZzYjEgIT0gbnVsbCkpICsgIiA8L2gxPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+RnJvbSBzZXNzaW9uIFNGU0JbMl0gTk9UIE5VTEw/IDogIiArICgiIiArIChzZnNiMiAhPSBudWxsKSkgKyAiIDwvaDE+Iik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKHNmc2IxID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIAogICAgICAgICAgICAgICAgIHNmc2IxID0gKFNpbXBsZVNlc3Npb25CZWFuKSBjdHgubG9va3VwKCJqYXZhOmdsb2JhbC9TRlNCRHJpdmVyL1NpbXBsZVNlc3Npb25CZWFuIik7CiAgICAgICAgICAgICAgICAgc2ZzYjIgPSAoU2ltcGxlU2Vzc2lvbkJlYW4pIGN0eC5sb29rdXAoImphdmE6Z2xvYmFsL1NGU0JEcml2ZXIvU2ltcGxlU2Vzc2lvbkJlYW4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+Q3JlYXRlZCBTRlNCWzFdOiAiICsgc2ZzYjEuYXNTdHJpbmcoKSArICIgPC9oMT4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPkNyZWF0ZWQgU0ZTQlsyXTogIiArIHNmc2IyLmFzU3RyaW5nKCkgKyAiIDwvaDE+Iik7CiAKQEAgLTEwOSwxMyArMTA5LDEzIEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9odG1sPiIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gbm1FeCkgewogICAgICAgICAgICAgbm1FeC5wcmludFN0YWNrVHJhY2Uob3V0KTsKLSAgICAgICAgfSBmaW5hbGx5IHsgCisgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKICAgICAgICAgfQotICAgIH0gCisgICAgfQogCiAgICAgLy8gPGVkaXRvci1mb2xkIGRlZmF1bHRzdGF0ZT0iY29sbGFwc2VkIiBkZXNjPSJIdHRwU2VydmxldCBtZXRob2RzLiBDbGljayBvbiB0aGUgKyBzaWduIG9uIHRoZSBsZWZ0IHRvIGVkaXQgdGhlIGNvZGUuIj4KLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtMTI2LDkgKzEyNiw5IEBACiAgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwotICAgIH0gCisgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBSZXR1cm5zIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIHNlcnZsZXQuCiAgICAgICogQHJldHVybiBhIFN0cmluZyBjb250YWluaW5nIHNlcnZsZXQgZGVzY3JpcHRpb24KICAgICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2FzeW5jdGVzdC9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2FzeW5jdGVzdC9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YQppbmRleCA3ZjNjYmU1Li5jOThlMzIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9hc3luY3Rlc3Qvc3JjL21haW4vamF2YS9jb20vYWNtZS9IdHRwQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvYXN5bmN0ZXN0L3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhCkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgZm9yIHRoZSAiICsgaSArICIgdGltZS4uLi4iKTsKICAgICAgICAgICAgICAgICB1ID0gbmV3IFVSTCh1cmwpOwogICAgICAgICAgICAgICAgIHVjID0gdS5vcGVuQ29ubmVjdGlvbigpOwotCQlmb3IgKFN0cmluZyBjb29raWUgOiByZXNwb25zZUNvb2tpZXMpIHsKLSAgICAgICAgICAgICAgICAJdWMuc2V0UmVxdWVzdFByb3BlcnR5KCJDb29raWUiLCBjb29raWUpOworICAgICAgICBmb3IgKFN0cmluZyBjb29raWUgOiByZXNwb25zZUNvb2tpZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgdWMuc2V0UmVxdWVzdFByb3BlcnR5KCJDb29raWUiLCBjb29raWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT5TZXR0aW5nIENvb2tpZTogIiArIGNvb2tpZSk7Ci0JCX0KKyAgICAgICAgfQogICAgICAgICAgICAgICAgIHVjLmNvbm5lY3QoKTsKICAgICAgICAgICAgICAgICBTZXNzaW9uU3RhdGVJbmZvIGluZm8gPSBleHRyYWN0U2Vzc2lvblN0YXRlcyh1Yyk7CiAgICAgICAgICAgICAgICAgaW5mby5zZXRBY2Nlc3NDb3VudCgyK2kpOwpAQCAtMTA1LDEwICsxMDUsMTAgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgZm9yIHRoZSAiICsgaSArICIgdGltZS4uLi4iKTsKICAgICAgICAgICAgICAgICB1ID0gbmV3IFVSTCh1cmwpOwogICAgICAgICAgICAgICAgIHVjID0gdS5vcGVuQ29ubmVjdGlvbigpOwotCQlmb3IgKFN0cmluZyBjb29raWUgOiByZXNwb25zZUNvb2tpZXMpIHsKLSAgICAgICAgICAgICAgICAJdWMuc2V0UmVxdWVzdFByb3BlcnR5KCJDb29raWUiLCBjb29raWUpOworICAgICAgICBmb3IgKFN0cmluZyBjb29raWUgOiByZXNwb25zZUNvb2tpZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgdWMuc2V0UmVxdWVzdFByb3BlcnR5KCJDb29raWUiLCBjb29raWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT5TZXR0aW5nIENvb2tpZTogIiArIGNvb2tpZSk7Ci0JCX0KKyAgICAgICAgfQogICAgICAgICAgICAgICAgIHVjLmNvbm5lY3QoKTsKICAgICAgICAgICAgICAgICBTZXNzaW9uU3RhdGVJbmZvIGluZm8gPSBleHRyYWN0U2Vzc2lvblN0YXRlcyh1Yyk7CiAgICAgICAgICAgICAgICAgaW5mby5zZXRBY2Nlc3NDb3VudCg1K2kpOwpAQCAtMTIxLDcgKzEyMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmFpbGVkICIgKyBpbmZvKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogLyoKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzdGFydGluZyBpbnN0MS4uLiIpOwogICAgICAgICAgICAgcHJvYyA9IFJ1bnRpbWUuZ2V0UnVudGltZSgpLmV4ZWMoQVNBRE1JTiArICIgIHN0YXJ0LWluc3RhbmNlIGluc3QxIik7CkBAIC0xNDYsMTQgKzE0NiwxNCBAQAogICAgICAgICAgICAgICAgIHJlc3BvbnNlQ29va2llcy5hZGQoY29va2llKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpVU1QgUkVBRCBDT09LSUU6ICIgKyBjb29raWUpOwogICAgICAgICAgICAgICAgIGlmIChjb29raWUuc3RhcnRzV2l0aCgiSlNFU1NJT05JRD0iKSkgewotCQkgICAganNlc3Npb25JRENvb2tpZSA9IGNvb2tpZTsKKyAgICAgICAgICAgIGpzZXNzaW9uSURDb29raWUgPSBjb29raWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKHRtcFNlc3NTdGF0ZS5nZXRKc2Vzc2lvbkNvb2tpZSgpID09IG51bGwpIHsKLSAgICAgICAgICAgIHRtcFNlc3NTdGF0ZS5zZXRKc2Vzc2lvbkNvb2tpZShqc2Vzc2lvbklEQ29va2llKTsgICAgCi0gICAgICAgICAgICByZXNwb25zZUNvb2tpZXMuYWRkKGpzZXNzaW9uSURDb29raWUpOyAgICAKKyAgICAgICAgICAgIHRtcFNlc3NTdGF0ZS5zZXRKc2Vzc2lvbkNvb2tpZShqc2Vzc2lvbklEQ29va2llKTsKKyAgICAgICAgICAgIHJlc3BvbnNlQ29va2llcy5hZGQoanNlc3Npb25JRENvb2tpZSk7CiAgICAgICAgIH0KICAgICAgICAgaW50IGNvZGUgPSAoKEh0dHBVUkxDb25uZWN0aW9uKSB1YykuZ2V0UmVzcG9uc2VDb2RlKCk7CiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gdWMuZ2V0SW5wdXRTdHJlYW0oKTsKQEAgLTIyMCw3ICsyMjAsNyBAQAogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHByZXYuZ2V0SHR0cENvdW50ZXIoKSA8IGN1cnJlbnQuZ2V0SHR0cENvdW50ZXIoKTsKICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBwcmV2LmdldEVqYjFDb3VudGVyKCkgPCBjdXJyZW50LmdldEVqYjFDb3VudGVyKCk7CiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcHJldi5nZXRFamIyQ291bnRlcigpIDwgY3VycmVudC5nZXRFamIyQ291bnRlcigpOwotICAgICAgICAgICAgCisKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2FzeW5jdGVzdC9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2FzeW5jdGVzdC9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YQppbmRleCA1MGExMTgzLi5hOGFmYzY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9hc3luY3Rlc3Qvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvYXN5bmN0ZXN0L3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAvKioKICAqIFVuaXQgdGVzdCBmb3Igc2ltcGxlIEFwcC4KICAqLwotcHVibGljIGNsYXNzIEFwcFRlc3QgCitwdWJsaWMgY2xhc3MgQXBwVGVzdAogICAgIGV4dGVuZHMgVGVzdENhc2UKIHsKICAgICAvKioKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9TRlNCRHJpdmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9TRlNCRHJpdmVyL2J1aWxkLnhtbAppbmRleCAzMzFjNmRlLi45NGQ0MjExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9oYS13ZWIvU0ZTQkRyaXZlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaGEtd2ViL1NGU0JEcml2ZXIvYnVpbGQueG1sCkBAIC0zMCwyNyArMzAsMjcgQEAKICAgICA8aW1wb3J0IGZpbGU9Im5icHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDwhLS0KIAotICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlIAotICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkIAotICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOiAKKyAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZQorICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkCisgICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6CiAKLSAgICAgIC1wcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgLXBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIC1wcmUtY29tcGlsZTogICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gCi0gICAgICAtcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gCisgICAgICAtcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgLXBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgLXByZS1jb21waWxlOiAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbgorICAgICAgLXBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICAtcHJlLWNvbXBpbGUtc2luZ2xlOiAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBmaWxlCiAgICAgICAtcG9zdC1jb21waWxlLXNpbmdsZTogICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIGZpbGUKICAgICAgIC1wcmUtY29tcGlsZS10ZXN0OiAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2YgSlVuaXQgdGVzdHMKICAgICAgIC1wb3N0LWNvbXBpbGUtdGVzdDogICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBKVW5pdCB0ZXN0cwogICAgICAgLXByZS1jb21waWxlLXRlc3Qtc2luZ2xlOiAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgSlVuaXQgdGVzdAogICAgICAgLXBvc3QtY29tcGlsZS10ZXN0LXNpbmdsZTogY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBKVXVuaXQgdGVzdAotICAgICAgLXByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBhcmNoaXZlIGJ1aWxkaW5nIAotICAgICAgLXBvc3QtZGlzdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGFyY2hpdmUgYnVpbGRpbmcgCi0gICAgICAtcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMgCisgICAgICAtcHJlLWRpc3Q6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGFyY2hpdmUgYnVpbGRpbmcKKyAgICAgIC1wb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBhcmNoaXZlIGJ1aWxkaW5nCisgICAgICAtcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMKICAgICAgIC1wcmUtcnVuLWRlcGxveTogICAgICAgICAgIGNhbGxlZCBiZWZvcmUgZGVwbG95aW5nCiAgICAgICAtcG9zdC1ydW4tZGVwbG95OiAgICAgICAgICBjYWxsZWQgYWZ0ZXIgZGVwbG95aW5nCiAKLSAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlIAorICAgIEV4YW1wbGUgb2YgcGx1Z2luZyBhbiBvYmZ1c2NhdG9yIGFmdGVyIHRoZSBjb21waWxhdGlvbiBjb3VsZCBsb29rIGxpa2UKIAogICAgICAgICA8dGFyZ2V0IG5hbWU9Ii1wb3N0LWNvbXBpbGUiPgogICAgICAgICAgICAgPG9iZnVzY2F0ZT4KQEAgLTU4LDIxICs1OCwyMSBAQAogICAgICAgICAgICAgPC9vYmZ1c2NhdGU+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQKKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogCiAgICAgT3RoZXIgd2F5IGhvdyB0byBjdXN0b21pemUgdGhlIGJ1aWxkIGlzIGJ5IG92ZXJyaWRpbmcgZXhpc3RpbmcgbWFpbiB0YXJnZXRzLgotICAgIFRoZSB0YXJnZXQgb2YgaW50ZXJlc3QgYXJlOiAKKyAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZToKIAogICAgICAgaW5pdC1tYWNyb2RlZi1qYXZhYzogICAgZGVmaW5lcyBtYWNybyBmb3IgamF2YWMgY29tcGlsYXRpb24KICAgICAgIGluaXQtbWFjcm9kZWYtanVuaXQ6ICAgZGVmaW5lcyBtYWNybyBmb3IganVuaXQgZXhlY3V0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWRlYnVnOiAgICBkZWZpbmVzIG1hY3JvIGZvciBjbGFzcyBkZWJ1Z2dpbmcKICAgICAgIGRvLWRpc3Q6ICAgICAgICAgICAgICAgIGFyY2hpdmUgYnVpbGRpbmcKLSAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0IAotICAgICAgamF2YWRvYy1idWlsZDogICAgICAgICAgamF2YWRvYyBnZW5lcmF0aW9uIAorICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHByb2plY3QKKyAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbgogCi0gICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgdGhlIHRhcmdldCBmb3IgcHJvamVjdCBleGVjdXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9IjxQUk9KTkFNRT4taW1wbC5qYXIiPgogICAgICAgICAgICAgPGV4ZWMgZGlyPSJiaW4iIGV4ZWN1dGFibGU9ImxhdW5jaGVyLmV4ZSI+CkBAIC04MCwxMCArODAsMTAgQEAKICAgICAgICAgICAgIDwvZXhlYz4KICAgICAgICAgPC90YXJnZXQ+CiAKLSAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uIAotICAgIGNvbXBpbGUgdGFyZ2V0IGFzIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGxpc3Qgb2YgYXZhaWxhYmxlIAotICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4gCi0gICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuIAorICAgIE5vdGljZSB0aGF0IG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gamFyIHRhcmdldCBhbmQgbm90IG9ubHkgb24KKyAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZQorICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4KKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogICAgIC0tPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaGEtd2ViL1NGU0JEcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaGEtd2ViL1NGU0JEcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCmluZGV4IDNkOTNlMTAuLmMzN2Q4NjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9TRlNCRHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9oYS13ZWIvU0ZTQkRyaXZlci9uYnByb2plY3QvYW50LWRlcGxveS54bWwKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0iZ2Z2MyIgcHJvcGVydHk9ImdmdjMucGFzc3dvcmQuZmlsZSIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4gIDwhLS0gZG8gbm90IGZvcmdldCB0byBkZWxldGUgdGhpcyEgLS0+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkFTX0FETUlOX1BBU1NXT1JEPSR7Z2Z2My5wYXNzd29yZH0iIGZpbGU9IiR7Z2Z2My5wYXNzd29yZC5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSItcGFyc2Utc3VuLXdlYiIgZGVwZW5kcz0iLWluaXQtY2wtZGVwbG95bWVudC1lbnYiIGlmPSJzdW4ud2ViLnByZXNlbnQiPgogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJnZnYzIiBwcm9wZXJ0eT0idGVtcC5zdW4ud2ViIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2RlcGxveS5hbnQuZG9jYmFzZS5kaXJ9L1dFQi1JTkYvc3VuLXdlYi54bWwiIHRvZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9Ii8+CkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8cmVwbGFjZXZhbHVlPjwhW0NEQVRBWy0tPiA8c3VuLXdlYi1hcHBdXT48L3JlcGxhY2V2YWx1ZT4KICAgICAgICAgPC9yZXBsYWNlPgogICAgICAgICA8eG1scHJvcGVydHkgZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9IiB2YWxpZGF0ZT0iZmFsc2UiPgotICAgICAgICA8L3htbHByb3BlcnR5PiAgICAKKyAgICAgICAgPC94bWxwcm9wZXJ0eT4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke3RlbXAuc3VuLndlYn0iLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveS5hbnQuY2xpZW50LnVybCIgdmFsdWU9IiR7Z2Z2My51cmx9JHtzdW4td2ViLWFwcC5jb250ZXh0LXJvb3R9Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3kuY29udGV4dC5yb290LmFyZ3VtZW50IiB2YWx1ZT0iJmFtcDtjb250ZXh0cm9vdD0ke3N1bi13ZWItYXBwLmNvbnRleHQtcm9vdH0iLz4KQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImZ1bGwuZGVwbG95LmFudC5hcmNoaXZlIiBsb2NhdGlvbj0iJHtkZXBsb3kuYW50LmFyY2hpdmV9Ii8+CiAgICAgICAgIDxnZXQgc3JjPSIke2dmdjMuYWRtaW4udXJsfS9fX2FzYWRtaW4vZGVwbG95P3BhdGg9JHtmdWxsLmRlcGxveS5hbnQuYXJjaGl2ZX0ke2RlcGxveS5jb250ZXh0LnJvb3QuYXJndW1lbnR9JmFtcDtmb3JjZT10cnVlJmFtcDtuYW1lPSR7YW50LnByb2plY3QubmFtZX0iCiAgICAgICAgICAgICBkZXN0PSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgotICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+ICAgIAorICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSItZGVwbG95LXdpdGgtcHciIGlmPSJnZnYzLnBhc3N3b3JkIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nICR7ZGVwbG95LmFudC5hcmNoaXZlfSIvPgpAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJnZnYzIiBwcm9wZXJ0eT0iZ2Z2My5yZXN1bHRzLmZpbGUiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+ICA8IS0tIGRvIG5vdCBmb3JnZXQgdG8gZGVsZXRlIHRoaXMhIC0tPgogICAgICAgICA8Z2V0IHNyYz0iJHtnZnYzLmFkbWluLnVybH0vX19hc2FkbWluL3VuZGVwbG95P25hbWU9JHthbnQucHJvamVjdC5uYW1lfSIKICAgICAgICAgICAgIGRlc3Q9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+Ci0gICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4gICAgCisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9Ii11bmRlcGxveS13aXRoLXB3IiBpZj0iZ2Z2My5wYXNzd29yZCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlVuZGVwbG95aW5nICR7ZGVwbG95LmFudC5hcmNoaXZlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaGEtd2ViL1NGU0JEcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaGEtd2ViL1NGU0JEcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCmluZGV4IDZkYWIzNTkuLjhhNjMxNzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9TRlNCRHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9oYS13ZWIvU0ZTQkRyaXZlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKQEAgLTQ3Nyw5ICs0NzcsOSBAQAogICAgIDx0YXJnZXQgbmFtZT0iLWluaXQtdGFza2RlZnMiPgogICAgICAgICA8ZmFpbCB1bmxlc3M9ImxpYnMuQ29weUxpYnMuY2xhc3NwYXRoIj4KIFRoZSBsaWJzLkNvcHlMaWJzLmNsYXNzcGF0aCBwcm9wZXJ0eSBpcyBub3Qgc2V0IHVwLgotVGhpcyBwcm9wZXJ0eSBtdXN0IHBvaW50IHRvIAorVGhpcyBwcm9wZXJ0eSBtdXN0IHBvaW50IHRvCiBvcmctbmV0YmVhbnMtbW9kdWxlcy1qYXZhLWoyc2Vwcm9qZWN0LWNvcHlsaWJzdGFzay5qYXIgZmlsZSB3aGljaCBpcyBwYXJ0Ci1vZiBOZXRCZWFucyBJREUgaW5zdGFsbGF0aW9uIGFuZCBpcyB1c3VhbGx5IGxvY2F0ZWQgYXQgCitvZiBOZXRCZWFucyBJREUgaW5zdGFsbGF0aW9uIGFuZCBpcyB1c3VhbGx5IGxvY2F0ZWQgYXQKICZsdDtuZXRiZWFuc19pbnN0YWxsYXRpb24mZ3Q7L2phdmEmbHQ7dmVyc2lvbiZndDsvYW50L2V4dHJhIGZvbGRlci4KIEVpdGhlciBvcGVuIHRoZSBwcm9qZWN0IGluIHRoZSBJREUgYW5kIG1ha2Ugc3VyZSBDb3B5TGlicyBsaWJyYXJ5CiBleGlzdHMgb3Igc2V0dXAgdGhlIHByb3BlcnR5IG1hbnVhbGx5LiBGb3IgZXhhbXBsZSBsaWtlIHRoaXM6CkBAIC04NTUsNyArODU1LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsamF2YWRvYy1idWlsZCxqYXZhZG9jLWJyb3dzZSIgZGVzY3JpcHRpb249IkJ1aWxkIEphdmFkb2MuIiBuYW1lPSJqYXZhZG9jIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgQ09NUElMQVRJT04gU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItcHJlLXByZS1jb21waWxlLXRlc3QiPgpAQCAtODk0LDcgKzg5NCw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUsLXByZS1wcmUtY29tcGlsZS10ZXN0LC1wcmUtY29tcGlsZS10ZXN0LXNpbmdsZSwtZG8tY29tcGlsZS10ZXN0LXNpbmdsZSwtcG9zdC1jb21waWxlLXRlc3Qtc2luZ2xlIiBuYW1lPSJjb21waWxlLXRlc3Qtc2luZ2xlIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgRVhFQ1VUSU9OIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1wcmUtdGVzdC1ydW4iPgpAQCAtOTIxLDcgKzkyMSw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUtdGVzdC1zaW5nbGUsLXByZS10ZXN0LXJ1bi1zaW5nbGUsLWRvLXRlc3QtcnVuLXNpbmdsZSwtcG9zdC10ZXN0LXJ1bi1zaW5nbGUiIGRlc2NyaXB0aW9uPSJSdW4gc2luZ2xlIHVuaXQgdGVzdC4iIG5hbWU9InRlc3Qtc2luZ2xlIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgREVCVUdHSU5HIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlLXRlc3QiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItZGVidWctc3RhcnQtZGVidWdnZWUtdGVzdCI+CkBAIC05NDcsNyArOTQ3LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsLXByZS1kZWJ1Zy1maXgsLWRvLWRlYnVnLWZpeC10ZXN0IiBpZj0ibmV0YmVhbnMuaG9tZSIgbmFtZT0iZGVidWctZml4LXRlc3QiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBDTEVBTlVQIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCIgaWY9Im5vLmRpc3QuZWFyLmRpciIgbmFtZT0iZGVwcy1jbGVhbiIgdW5sZXNzPSJuby5kZXBzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9oYS13ZWIvU0ZTQkRyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9TRlNCRHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCmluZGV4IDZlNjYzY2UuLjM2NDMzODkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9TRlNCRHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9TRlNCRHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCkBAIC0zMiw4ICszMiw4IEBACiAKIHB1YmxpYyBjbGFzcyBTRlNCRHJpdmVyU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAotICAgCi0gICAgLyoqIAorCisgICAgLyoqCiAgICAgICogUHJvY2Vzc2VzIHJlcXVlc3RzIGZvciBib3RoIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBhbmQgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kcy4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwotICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0PC90aXRsZT4iKTsgIAorICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0PC90aXRsZT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPlNlcnZsZXQgU0ZTQkRyaXZlclNlcnZsZXQgYXQgIiArIHJlcXVlc3QuZ2V0Q29udGV4dFBhdGggKCkgKyAiPC9oMT4iKTsKQEAgLTYzLDEzICs2MywxMyBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaHRtbD4iKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIG5tRXgpIHsKICAgICAgICAgICAgIG5tRXgucHJpbnRTdGFja1RyYWNlKG91dCk7Ci0gICAgICAgIH0gZmluYWxseSB7IAorICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgICAgIH0KLSAgICB9IAorICAgIH0KIAogICAgIC8vIDxlZGl0b3ItZm9sZCBkZWZhdWx0c3RhdGU9ImNvbGxhcHNlZCIgZGVzYz0iSHR0cFNlcnZsZXQgbWV0aG9kcy4gQ2xpY2sgb24gdGhlICsgc2lnbiBvbiB0aGUgbGVmdCB0byBlZGl0IHRoZSBjb2RlLiI+Ci0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTgwLDkgKzgwLDkgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgfSAKKyAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTk1LDcgKzk1LDcgQEAKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBSZXR1cm5zIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIHNlcnZsZXQuCiAgICAgICogQHJldHVybiBhIFN0cmluZyBjb250YWluaW5nIHNlcnZsZXQgZGVzY3JpcHRpb24KICAgICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaGEtd2ViL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggN2E4ZjEwNC4uMzI3MWMyNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaGEtd2ViL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaGEtd2ViL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0taGEtd2ViIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9oYS13ZWIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaGEtd2ViL2J1aWxkLnhtbAppbmRleCA1M2M3NjEyLi4zOGE1N2MwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9oYS13ZWIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE2ICs0MiwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29weVJlc291cmNlcyIvPgpAQCAtNzIsMTEgKzcyLDExIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTg4LDEwICs4OCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZW1vdmVSZXNvdXJjZXMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YQppbmRleCA2NWExNDMwLi41ZTM2MzQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9oYS13ZWIvc3JjL21haW4vamF2YS9jb20vYWNtZS9IdHRwQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaGEtd2ViL3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhCkBAIC0xMTYsNyArMTE2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGYWlsZWQgIiArIGluZm8pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0xMzQsNyArMTM0LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmICh0bXBTZXNzU3RhdGUuZ2V0SnNlc3Npb25Db29raWUoKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0bXBTZXNzU3RhdGUuc2V0SnNlc3Npb25Db29raWUoY29va2llKTsgICAgCisgICAgICAgICAgICB0bXBTZXNzU3RhdGUuc2V0SnNlc3Npb25Db29raWUoY29va2llKTsKICAgICAgICAgfQogICAgICAgICBpbnQgY29kZSA9ICgoSHR0cFVSTENvbm5lY3Rpb24pIHVjKS5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSB1Yy5nZXRJbnB1dFN0cmVhbSgpOwpAQCAtMTY5LDcgKzE2OSw3IEBACiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcHJldi5nZXRKc2Vzc2lvbkNvb2tpZSgpLmVxdWFscyhjdXJyZW50LmdldEpzZXNzaW9uQ29va2llKCkpOwogCiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcHJldi5nZXRIdHRwQ291bnRlcigpIDwgY3VycmVudC5nZXRIdHRwQ291bnRlcigpOwotICAgICAgICAgICAgCisKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YQppbmRleCA1MGExMTgzLi5hOGFmYzY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9oYS13ZWIvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaGEtd2ViL3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAvKioKICAqIFVuaXQgdGVzdCBmb3Igc2ltcGxlIEFwcC4KICAqLwotcHVibGljIGNsYXNzIEFwcFRlc3QgCitwdWJsaWMgY2xhc3MgQXBwVGVzdAogICAgIGV4dGVuZHMgVGVzdENhc2UKIHsKICAgICAvKioKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2luc3RhbmNlLXJlc3RhcnQtdGVzdC9TRlNCRHJpdmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2luc3RhbmNlLXJlc3RhcnQtdGVzdC9TRlNCRHJpdmVyL2J1aWxkLnhtbAppbmRleCAzMzFjNmRlLi45NGQ0MjExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9pbnN0YW5jZS1yZXN0YXJ0LXRlc3QvU0ZTQkRyaXZlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaW5zdGFuY2UtcmVzdGFydC10ZXN0L1NGU0JEcml2ZXIvYnVpbGQueG1sCkBAIC0zMCwyNyArMzAsMjcgQEAKICAgICA8aW1wb3J0IGZpbGU9Im5icHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDwhLS0KIAotICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlIAotICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkIAotICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOiAKKyAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZQorICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkCisgICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6CiAKLSAgICAgIC1wcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgLXBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIC1wcmUtY29tcGlsZTogICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gCi0gICAgICAtcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gCisgICAgICAtcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgLXBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgLXByZS1jb21waWxlOiAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbgorICAgICAgLXBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICAtcHJlLWNvbXBpbGUtc2luZ2xlOiAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBmaWxlCiAgICAgICAtcG9zdC1jb21waWxlLXNpbmdsZTogICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIGZpbGUKICAgICAgIC1wcmUtY29tcGlsZS10ZXN0OiAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2YgSlVuaXQgdGVzdHMKICAgICAgIC1wb3N0LWNvbXBpbGUtdGVzdDogICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBKVW5pdCB0ZXN0cwogICAgICAgLXByZS1jb21waWxlLXRlc3Qtc2luZ2xlOiAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgSlVuaXQgdGVzdAogICAgICAgLXBvc3QtY29tcGlsZS10ZXN0LXNpbmdsZTogY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBKVXVuaXQgdGVzdAotICAgICAgLXByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBhcmNoaXZlIGJ1aWxkaW5nIAotICAgICAgLXBvc3QtZGlzdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGFyY2hpdmUgYnVpbGRpbmcgCi0gICAgICAtcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMgCisgICAgICAtcHJlLWRpc3Q6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGFyY2hpdmUgYnVpbGRpbmcKKyAgICAgIC1wb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBhcmNoaXZlIGJ1aWxkaW5nCisgICAgICAtcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMKICAgICAgIC1wcmUtcnVuLWRlcGxveTogICAgICAgICAgIGNhbGxlZCBiZWZvcmUgZGVwbG95aW5nCiAgICAgICAtcG9zdC1ydW4tZGVwbG95OiAgICAgICAgICBjYWxsZWQgYWZ0ZXIgZGVwbG95aW5nCiAKLSAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlIAorICAgIEV4YW1wbGUgb2YgcGx1Z2luZyBhbiBvYmZ1c2NhdG9yIGFmdGVyIHRoZSBjb21waWxhdGlvbiBjb3VsZCBsb29rIGxpa2UKIAogICAgICAgICA8dGFyZ2V0IG5hbWU9Ii1wb3N0LWNvbXBpbGUiPgogICAgICAgICAgICAgPG9iZnVzY2F0ZT4KQEAgLTU4LDIxICs1OCwyMSBAQAogICAgICAgICAgICAgPC9vYmZ1c2NhdGU+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQKKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogCiAgICAgT3RoZXIgd2F5IGhvdyB0byBjdXN0b21pemUgdGhlIGJ1aWxkIGlzIGJ5IG92ZXJyaWRpbmcgZXhpc3RpbmcgbWFpbiB0YXJnZXRzLgotICAgIFRoZSB0YXJnZXQgb2YgaW50ZXJlc3QgYXJlOiAKKyAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZToKIAogICAgICAgaW5pdC1tYWNyb2RlZi1qYXZhYzogICAgZGVmaW5lcyBtYWNybyBmb3IgamF2YWMgY29tcGlsYXRpb24KICAgICAgIGluaXQtbWFjcm9kZWYtanVuaXQ6ICAgZGVmaW5lcyBtYWNybyBmb3IganVuaXQgZXhlY3V0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWRlYnVnOiAgICBkZWZpbmVzIG1hY3JvIGZvciBjbGFzcyBkZWJ1Z2dpbmcKICAgICAgIGRvLWRpc3Q6ICAgICAgICAgICAgICAgIGFyY2hpdmUgYnVpbGRpbmcKLSAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0IAotICAgICAgamF2YWRvYy1idWlsZDogICAgICAgICAgamF2YWRvYyBnZW5lcmF0aW9uIAorICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHByb2plY3QKKyAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbgogCi0gICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgdGhlIHRhcmdldCBmb3IgcHJvamVjdCBleGVjdXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9IjxQUk9KTkFNRT4taW1wbC5qYXIiPgogICAgICAgICAgICAgPGV4ZWMgZGlyPSJiaW4iIGV4ZWN1dGFibGU9ImxhdW5jaGVyLmV4ZSI+CkBAIC04MCwxMCArODAsMTAgQEAKICAgICAgICAgICAgIDwvZXhlYz4KICAgICAgICAgPC90YXJnZXQ+CiAKLSAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uIAotICAgIGNvbXBpbGUgdGFyZ2V0IGFzIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGxpc3Qgb2YgYXZhaWxhYmxlIAotICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4gCi0gICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuIAorICAgIE5vdGljZSB0aGF0IG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gamFyIHRhcmdldCBhbmQgbm90IG9ubHkgb24KKyAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZQorICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4KKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogICAgIC0tPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaW5zdGFuY2UtcmVzdGFydC10ZXN0L1NGU0JEcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaW5zdGFuY2UtcmVzdGFydC10ZXN0L1NGU0JEcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCmluZGV4IDNkOTNlMTAuLmMzN2Q4NjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2luc3RhbmNlLXJlc3RhcnQtdGVzdC9TRlNCRHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9pbnN0YW5jZS1yZXN0YXJ0LXRlc3QvU0ZTQkRyaXZlci9uYnByb2plY3QvYW50LWRlcGxveS54bWwKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0iZ2Z2MyIgcHJvcGVydHk9ImdmdjMucGFzc3dvcmQuZmlsZSIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4gIDwhLS0gZG8gbm90IGZvcmdldCB0byBkZWxldGUgdGhpcyEgLS0+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkFTX0FETUlOX1BBU1NXT1JEPSR7Z2Z2My5wYXNzd29yZH0iIGZpbGU9IiR7Z2Z2My5wYXNzd29yZC5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSItcGFyc2Utc3VuLXdlYiIgZGVwZW5kcz0iLWluaXQtY2wtZGVwbG95bWVudC1lbnYiIGlmPSJzdW4ud2ViLnByZXNlbnQiPgogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJnZnYzIiBwcm9wZXJ0eT0idGVtcC5zdW4ud2ViIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2RlcGxveS5hbnQuZG9jYmFzZS5kaXJ9L1dFQi1JTkYvc3VuLXdlYi54bWwiIHRvZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9Ii8+CkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8cmVwbGFjZXZhbHVlPjwhW0NEQVRBWy0tPiA8c3VuLXdlYi1hcHBdXT48L3JlcGxhY2V2YWx1ZT4KICAgICAgICAgPC9yZXBsYWNlPgogICAgICAgICA8eG1scHJvcGVydHkgZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9IiB2YWxpZGF0ZT0iZmFsc2UiPgotICAgICAgICA8L3htbHByb3BlcnR5PiAgICAKKyAgICAgICAgPC94bWxwcm9wZXJ0eT4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke3RlbXAuc3VuLndlYn0iLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveS5hbnQuY2xpZW50LnVybCIgdmFsdWU9IiR7Z2Z2My51cmx9JHtzdW4td2ViLWFwcC5jb250ZXh0LXJvb3R9Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3kuY29udGV4dC5yb290LmFyZ3VtZW50IiB2YWx1ZT0iJmFtcDtjb250ZXh0cm9vdD0ke3N1bi13ZWItYXBwLmNvbnRleHQtcm9vdH0iLz4KQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImZ1bGwuZGVwbG95LmFudC5hcmNoaXZlIiBsb2NhdGlvbj0iJHtkZXBsb3kuYW50LmFyY2hpdmV9Ii8+CiAgICAgICAgIDxnZXQgc3JjPSIke2dmdjMuYWRtaW4udXJsfS9fX2FzYWRtaW4vZGVwbG95P3BhdGg9JHtmdWxsLmRlcGxveS5hbnQuYXJjaGl2ZX0ke2RlcGxveS5jb250ZXh0LnJvb3QuYXJndW1lbnR9JmFtcDtmb3JjZT10cnVlJmFtcDtuYW1lPSR7YW50LnByb2plY3QubmFtZX0iCiAgICAgICAgICAgICBkZXN0PSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgotICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+ICAgIAorICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSItZGVwbG95LXdpdGgtcHciIGlmPSJnZnYzLnBhc3N3b3JkIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nICR7ZGVwbG95LmFudC5hcmNoaXZlfSIvPgpAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJnZnYzIiBwcm9wZXJ0eT0iZ2Z2My5yZXN1bHRzLmZpbGUiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+ICA8IS0tIGRvIG5vdCBmb3JnZXQgdG8gZGVsZXRlIHRoaXMhIC0tPgogICAgICAgICA8Z2V0IHNyYz0iJHtnZnYzLmFkbWluLnVybH0vX19hc2FkbWluL3VuZGVwbG95P25hbWU9JHthbnQucHJvamVjdC5uYW1lfSIKICAgICAgICAgICAgIGRlc3Q9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+Ci0gICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4gICAgCisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9Ii11bmRlcGxveS13aXRoLXB3IiBpZj0iZ2Z2My5wYXNzd29yZCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlVuZGVwbG95aW5nICR7ZGVwbG95LmFudC5hcmNoaXZlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaW5zdGFuY2UtcmVzdGFydC10ZXN0L1NGU0JEcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaW5zdGFuY2UtcmVzdGFydC10ZXN0L1NGU0JEcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCmluZGV4IDZkYWIzNTkuLjhhNjMxNzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2luc3RhbmNlLXJlc3RhcnQtdGVzdC9TRlNCRHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9pbnN0YW5jZS1yZXN0YXJ0LXRlc3QvU0ZTQkRyaXZlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKQEAgLTQ3Nyw5ICs0NzcsOSBAQAogICAgIDx0YXJnZXQgbmFtZT0iLWluaXQtdGFza2RlZnMiPgogICAgICAgICA8ZmFpbCB1bmxlc3M9ImxpYnMuQ29weUxpYnMuY2xhc3NwYXRoIj4KIFRoZSBsaWJzLkNvcHlMaWJzLmNsYXNzcGF0aCBwcm9wZXJ0eSBpcyBub3Qgc2V0IHVwLgotVGhpcyBwcm9wZXJ0eSBtdXN0IHBvaW50IHRvIAorVGhpcyBwcm9wZXJ0eSBtdXN0IHBvaW50IHRvCiBvcmctbmV0YmVhbnMtbW9kdWxlcy1qYXZhLWoyc2Vwcm9qZWN0LWNvcHlsaWJzdGFzay5qYXIgZmlsZSB3aGljaCBpcyBwYXJ0Ci1vZiBOZXRCZWFucyBJREUgaW5zdGFsbGF0aW9uIGFuZCBpcyB1c3VhbGx5IGxvY2F0ZWQgYXQgCitvZiBOZXRCZWFucyBJREUgaW5zdGFsbGF0aW9uIGFuZCBpcyB1c3VhbGx5IGxvY2F0ZWQgYXQKICZsdDtuZXRiZWFuc19pbnN0YWxsYXRpb24mZ3Q7L2phdmEmbHQ7dmVyc2lvbiZndDsvYW50L2V4dHJhIGZvbGRlci4KIEVpdGhlciBvcGVuIHRoZSBwcm9qZWN0IGluIHRoZSBJREUgYW5kIG1ha2Ugc3VyZSBDb3B5TGlicyBsaWJyYXJ5CiBleGlzdHMgb3Igc2V0dXAgdGhlIHByb3BlcnR5IG1hbnVhbGx5LiBGb3IgZXhhbXBsZSBsaWtlIHRoaXM6CkBAIC04NTUsNyArODU1LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsamF2YWRvYy1idWlsZCxqYXZhZG9jLWJyb3dzZSIgZGVzY3JpcHRpb249IkJ1aWxkIEphdmFkb2MuIiBuYW1lPSJqYXZhZG9jIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgQ09NUElMQVRJT04gU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItcHJlLXByZS1jb21waWxlLXRlc3QiPgpAQCAtODk0LDcgKzg5NCw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUsLXByZS1wcmUtY29tcGlsZS10ZXN0LC1wcmUtY29tcGlsZS10ZXN0LXNpbmdsZSwtZG8tY29tcGlsZS10ZXN0LXNpbmdsZSwtcG9zdC1jb21waWxlLXRlc3Qtc2luZ2xlIiBuYW1lPSJjb21waWxlLXRlc3Qtc2luZ2xlIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgRVhFQ1VUSU9OIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1wcmUtdGVzdC1ydW4iPgpAQCAtOTIxLDcgKzkyMSw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUtdGVzdC1zaW5nbGUsLXByZS10ZXN0LXJ1bi1zaW5nbGUsLWRvLXRlc3QtcnVuLXNpbmdsZSwtcG9zdC10ZXN0LXJ1bi1zaW5nbGUiIGRlc2NyaXB0aW9uPSJSdW4gc2luZ2xlIHVuaXQgdGVzdC4iIG5hbWU9InRlc3Qtc2luZ2xlIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgREVCVUdHSU5HIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlLXRlc3QiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItZGVidWctc3RhcnQtZGVidWdnZWUtdGVzdCI+CkBAIC05NDcsNyArOTQ3LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsLXByZS1kZWJ1Zy1maXgsLWRvLWRlYnVnLWZpeC10ZXN0IiBpZj0ibmV0YmVhbnMuaG9tZSIgbmFtZT0iZGVidWctZml4LXRlc3QiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBDTEVBTlVQIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCIgaWY9Im5vLmRpc3QuZWFyLmRpciIgbmFtZT0iZGVwcy1jbGVhbiIgdW5sZXNzPSJuby5kZXBzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9pbnN0YW5jZS1yZXN0YXJ0LXRlc3QvU0ZTQkRyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2luc3RhbmNlLXJlc3RhcnQtdGVzdC9TRlNCRHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCmluZGV4IGEwYjY0OWEuLmIwMzZhMjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2luc3RhbmNlLXJlc3RhcnQtdGVzdC9TRlNCRHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2luc3RhbmNlLXJlc3RhcnQtdGVzdC9TRlNCRHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCkBAIC0zOCw4ICszOCw4IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBTRlNCRHJpdmVyU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAotICAgCi0gICAgLyoqIAorCisgICAgLyoqCiAgICAgICogUHJvY2Vzc2VzIHJlcXVlc3RzIGZvciBib3RoIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBhbmQgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kcy4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwotICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0PC90aXRsZT4iKTsgIAorICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0PC90aXRsZT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPlNlcnZsZXQgU0ZTQkRyaXZlclNlcnZsZXQgYXQgIiArIHJlcXVlc3QuZ2V0Q29udGV4dFBhdGggKCkgKyAiPC9oMT4iKTsKQEAgLTc1LDEzICs3NSwxMyBAQAogCiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5Gcm9tIHNlc3Npb24gU0ZTQlsxXSBOT1QgTlVMTCA/OiAiICsgKCIiICsgKHNmc2IxICE9IG51bGwpKSArICIgPC9oMT4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPkZyb20gc2Vzc2lvbiBTRlNCWzJdIE5PVCBOVUxMPyA6ICIgKyAoIiIgKyAoc2ZzYjIgIT0gbnVsbCkpICsgIiA8L2gxPiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChzZnNiMSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKICAgICAgICAgICAgICAgICBzZnNiMSA9IChTaW1wbGVTZXNzaW9uQmVhbikgY3R4Lmxvb2t1cCgiamF2YTpnbG9iYWwvU0ZTQkRyaXZlci9TaW1wbGVTZXNzaW9uQmVhbiIpOwogICAgICAgICAgICAgICAgIHNmc2IyID0gKFNpbXBsZVNlc3Npb25CZWFuKSBjdHgubG9va3VwKCJqYXZhOmdsb2JhbC9TRlNCRHJpdmVyL1NpbXBsZVNlc3Npb25CZWFuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPkNyZWF0ZWQgU0ZTQlsxXTogIiArIHNmc2IxLmFzU3RyaW5nKCkgKyAiIDwvaDE+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5DcmVhdGVkIFNGU0JbMl06ICIgKyBzZnNiMi5hc1N0cmluZygpICsgIiA8L2gxPiIpOwogCkBAIC0xMDksMTMgKzEwOSwxMyBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaHRtbD4iKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIG5tRXgpIHsKICAgICAgICAgICAgIG5tRXgucHJpbnRTdGFja1RyYWNlKG91dCk7Ci0gICAgICAgIH0gZmluYWxseSB7IAorICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgICAgIH0KLSAgICB9IAorICAgIH0KIAogICAgIC8vIDxlZGl0b3ItZm9sZCBkZWZhdWx0c3RhdGU9ImNvbGxhcHNlZCIgZGVzYz0iSHR0cFNlcnZsZXQgbWV0aG9kcy4gQ2xpY2sgb24gdGhlICsgc2lnbiBvbiB0aGUgbGVmdCB0byBlZGl0IHRoZSBjb2RlLiI+Ci0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTEyNiw5ICsxMjYsOSBAQAogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICB9IAorICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogUmV0dXJucyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2bGV0LgogICAgICAqIEByZXR1cm4gYSBTdHJpbmcgY29udGFpbmluZyBzZXJ2bGV0IGRlc2NyaXB0aW9uCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9pbnN0YW5jZS1yZXN0YXJ0LXRlc3Qvc3JjL21haW4vamF2YS9jb20vYWNtZS9IdHRwQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9pbnN0YW5jZS1yZXN0YXJ0LXRlc3Qvc3JjL21haW4vamF2YS9jb20vYWNtZS9IdHRwQ2xpZW50LmphdmEKaW5kZXggZTlkMzkxYi4uZjQ4NzZmOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaW5zdGFuY2UtcmVzdGFydC10ZXN0L3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2luc3RhbmNlLXJlc3RhcnQtdGVzdC9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YQpAQCAtMTE3LDcgKzExNyw3IEBACiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmFpbGVkICIgKyBpbmZvKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMTM1LDcgKzEzNSw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAodG1wU2Vzc1N0YXRlLmdldEpzZXNzaW9uQ29va2llKCkgPT0gbnVsbCkgewotICAgICAgICAgICAgdG1wU2Vzc1N0YXRlLnNldEpzZXNzaW9uQ29va2llKGNvb2tpZSk7ICAgIAorICAgICAgICAgICAgdG1wU2Vzc1N0YXRlLnNldEpzZXNzaW9uQ29va2llKGNvb2tpZSk7CiAgICAgICAgIH0KICAgICAgICAgaW50IGNvZGUgPSAoKEh0dHBVUkxDb25uZWN0aW9uKSB1YykuZ2V0UmVzcG9uc2VDb2RlKCk7CiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gdWMuZ2V0SW5wdXRTdHJlYW0oKTsKQEAgLTIwMiw3ICsyMDIsNyBAQAogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHByZXYuZ2V0SHR0cENvdW50ZXIoKSA8IGN1cnJlbnQuZ2V0SHR0cENvdW50ZXIoKTsKICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBwcmV2LmdldEVqYjFDb3VudGVyKCkgPCBjdXJyZW50LmdldEVqYjFDb3VudGVyKCk7CiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcHJldi5nZXRFamIyQ291bnRlcigpIDwgY3VycmVudC5nZXRFamIyQ291bnRlcigpOwotICAgICAgICAgICAgCisKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2luc3RhbmNlLXJlc3RhcnQtdGVzdC9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2luc3RhbmNlLXJlc3RhcnQtdGVzdC9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YQppbmRleCA1MGExMTgzLi5hOGFmYzY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9pbnN0YW5jZS1yZXN0YXJ0LXRlc3Qvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaW5zdGFuY2UtcmVzdGFydC10ZXN0L3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAvKioKICAqIFVuaXQgdGVzdCBmb3Igc2ltcGxlIEFwcC4KICAqLwotcHVibGljIGNsYXNzIEFwcFRlc3QgCitwdWJsaWMgY2xhc3MgQXBwVGVzdAogICAgIGV4dGVuZHMgVGVzdENhc2UKIHsKICAgICAvKioKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL21ldGhvZC1jaGVja3BvaW50L1NGU0JNZXRob2RDaGVja3BvaW50RHJpdmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL21ldGhvZC1jaGVja3BvaW50L1NGU0JNZXRob2RDaGVja3BvaW50RHJpdmVyL2J1aWxkLnhtbAppbmRleCAyYWJmNTVkLi4wMjQ1MDk4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tZXRob2QtY2hlY2twb2ludC9TRlNCTWV0aG9kQ2hlY2twb2ludERyaXZlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbWV0aG9kLWNoZWNrcG9pbnQvU0ZTQk1ldGhvZENoZWNrcG9pbnREcml2ZXIvYnVpbGQueG1sCkBAIC0zMCwyNyArMzAsMjcgQEAKICAgICA8aW1wb3J0IGZpbGU9Im5icHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDwhLS0KIAotICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlIAotICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkIAotICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOiAKKyAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZQorICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkCisgICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6CiAKLSAgICAgIC1wcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgLXBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIC1wcmUtY29tcGlsZTogICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gCi0gICAgICAtcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gCisgICAgICAtcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgLXBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgLXByZS1jb21waWxlOiAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbgorICAgICAgLXBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICAtcHJlLWNvbXBpbGUtc2luZ2xlOiAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBmaWxlCiAgICAgICAtcG9zdC1jb21waWxlLXNpbmdsZTogICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIGZpbGUKICAgICAgIC1wcmUtY29tcGlsZS10ZXN0OiAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2YgSlVuaXQgdGVzdHMKICAgICAgIC1wb3N0LWNvbXBpbGUtdGVzdDogICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBKVW5pdCB0ZXN0cwogICAgICAgLXByZS1jb21waWxlLXRlc3Qtc2luZ2xlOiAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgSlVuaXQgdGVzdAogICAgICAgLXBvc3QtY29tcGlsZS10ZXN0LXNpbmdsZTogY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBKVXVuaXQgdGVzdAotICAgICAgLXByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBhcmNoaXZlIGJ1aWxkaW5nIAotICAgICAgLXBvc3QtZGlzdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGFyY2hpdmUgYnVpbGRpbmcgCi0gICAgICAtcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMgCisgICAgICAtcHJlLWRpc3Q6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGFyY2hpdmUgYnVpbGRpbmcKKyAgICAgIC1wb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBhcmNoaXZlIGJ1aWxkaW5nCisgICAgICAtcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMKICAgICAgIC1wcmUtcnVuLWRlcGxveTogICAgICAgICAgIGNhbGxlZCBiZWZvcmUgZGVwbG95aW5nCiAgICAgICAtcG9zdC1ydW4tZGVwbG95OiAgICAgICAgICBjYWxsZWQgYWZ0ZXIgZGVwbG95aW5nCiAKLSAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlIAorICAgIEV4YW1wbGUgb2YgcGx1Z2luZyBhbiBvYmZ1c2NhdG9yIGFmdGVyIHRoZSBjb21waWxhdGlvbiBjb3VsZCBsb29rIGxpa2UKIAogICAgICAgICA8dGFyZ2V0IG5hbWU9Ii1wb3N0LWNvbXBpbGUiPgogICAgICAgICAgICAgPG9iZnVzY2F0ZT4KQEAgLTU4LDIxICs1OCwyMSBAQAogICAgICAgICAgICAgPC9vYmZ1c2NhdGU+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQKKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogCiAgICAgT3RoZXIgd2F5IGhvdyB0byBjdXN0b21pemUgdGhlIGJ1aWxkIGlzIGJ5IG92ZXJyaWRpbmcgZXhpc3RpbmcgbWFpbiB0YXJnZXRzLgotICAgIFRoZSB0YXJnZXQgb2YgaW50ZXJlc3QgYXJlOiAKKyAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZToKIAogICAgICAgaW5pdC1tYWNyb2RlZi1qYXZhYzogICAgZGVmaW5lcyBtYWNybyBmb3IgamF2YWMgY29tcGlsYXRpb24KICAgICAgIGluaXQtbWFjcm9kZWYtanVuaXQ6ICAgZGVmaW5lcyBtYWNybyBmb3IganVuaXQgZXhlY3V0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWRlYnVnOiAgICBkZWZpbmVzIG1hY3JvIGZvciBjbGFzcyBkZWJ1Z2dpbmcKICAgICAgIGRvLWRpc3Q6ICAgICAgICAgICAgICAgIGFyY2hpdmUgYnVpbGRpbmcKLSAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0IAotICAgICAgamF2YWRvYy1idWlsZDogICAgICAgICAgamF2YWRvYyBnZW5lcmF0aW9uIAorICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHByb2plY3QKKyAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbgogCi0gICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgdGhlIHRhcmdldCBmb3IgcHJvamVjdCBleGVjdXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9IjxQUk9KTkFNRT4taW1wbC5qYXIiPgogICAgICAgICAgICAgPGV4ZWMgZGlyPSJiaW4iIGV4ZWN1dGFibGU9ImxhdW5jaGVyLmV4ZSI+CkBAIC04MCwxMCArODAsMTAgQEAKICAgICAgICAgICAgIDwvZXhlYz4KICAgICAgICAgPC90YXJnZXQ+CiAKLSAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uIAotICAgIGNvbXBpbGUgdGFyZ2V0IGFzIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGxpc3Qgb2YgYXZhaWxhYmxlIAotICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4gCi0gICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuIAorICAgIE5vdGljZSB0aGF0IG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gamFyIHRhcmdldCBhbmQgbm90IG9ubHkgb24KKyAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZQorICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4KKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogICAgIC0tPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbWV0aG9kLWNoZWNrcG9pbnQvU0ZTQk1ldGhvZENoZWNrcG9pbnREcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbWV0aG9kLWNoZWNrcG9pbnQvU0ZTQk1ldGhvZENoZWNrcG9pbnREcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCmluZGV4IDNkOTNlMTAuLmMzN2Q4NjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL21ldGhvZC1jaGVja3BvaW50L1NGU0JNZXRob2RDaGVja3BvaW50RHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tZXRob2QtY2hlY2twb2ludC9TRlNCTWV0aG9kQ2hlY2twb2ludERyaXZlci9uYnByb2plY3QvYW50LWRlcGxveS54bWwKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0iZ2Z2MyIgcHJvcGVydHk9ImdmdjMucGFzc3dvcmQuZmlsZSIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4gIDwhLS0gZG8gbm90IGZvcmdldCB0byBkZWxldGUgdGhpcyEgLS0+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkFTX0FETUlOX1BBU1NXT1JEPSR7Z2Z2My5wYXNzd29yZH0iIGZpbGU9IiR7Z2Z2My5wYXNzd29yZC5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSItcGFyc2Utc3VuLXdlYiIgZGVwZW5kcz0iLWluaXQtY2wtZGVwbG95bWVudC1lbnYiIGlmPSJzdW4ud2ViLnByZXNlbnQiPgogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJnZnYzIiBwcm9wZXJ0eT0idGVtcC5zdW4ud2ViIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2RlcGxveS5hbnQuZG9jYmFzZS5kaXJ9L1dFQi1JTkYvc3VuLXdlYi54bWwiIHRvZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9Ii8+CkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8cmVwbGFjZXZhbHVlPjwhW0NEQVRBWy0tPiA8c3VuLXdlYi1hcHBdXT48L3JlcGxhY2V2YWx1ZT4KICAgICAgICAgPC9yZXBsYWNlPgogICAgICAgICA8eG1scHJvcGVydHkgZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9IiB2YWxpZGF0ZT0iZmFsc2UiPgotICAgICAgICA8L3htbHByb3BlcnR5PiAgICAKKyAgICAgICAgPC94bWxwcm9wZXJ0eT4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke3RlbXAuc3VuLndlYn0iLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveS5hbnQuY2xpZW50LnVybCIgdmFsdWU9IiR7Z2Z2My51cmx9JHtzdW4td2ViLWFwcC5jb250ZXh0LXJvb3R9Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3kuY29udGV4dC5yb290LmFyZ3VtZW50IiB2YWx1ZT0iJmFtcDtjb250ZXh0cm9vdD0ke3N1bi13ZWItYXBwLmNvbnRleHQtcm9vdH0iLz4KQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImZ1bGwuZGVwbG95LmFudC5hcmNoaXZlIiBsb2NhdGlvbj0iJHtkZXBsb3kuYW50LmFyY2hpdmV9Ii8+CiAgICAgICAgIDxnZXQgc3JjPSIke2dmdjMuYWRtaW4udXJsfS9fX2FzYWRtaW4vZGVwbG95P3BhdGg9JHtmdWxsLmRlcGxveS5hbnQuYXJjaGl2ZX0ke2RlcGxveS5jb250ZXh0LnJvb3QuYXJndW1lbnR9JmFtcDtmb3JjZT10cnVlJmFtcDtuYW1lPSR7YW50LnByb2plY3QubmFtZX0iCiAgICAgICAgICAgICBkZXN0PSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgotICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+ICAgIAorICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSItZGVwbG95LXdpdGgtcHciIGlmPSJnZnYzLnBhc3N3b3JkIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nICR7ZGVwbG95LmFudC5hcmNoaXZlfSIvPgpAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJnZnYzIiBwcm9wZXJ0eT0iZ2Z2My5yZXN1bHRzLmZpbGUiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+ICA8IS0tIGRvIG5vdCBmb3JnZXQgdG8gZGVsZXRlIHRoaXMhIC0tPgogICAgICAgICA8Z2V0IHNyYz0iJHtnZnYzLmFkbWluLnVybH0vX19hc2FkbWluL3VuZGVwbG95P25hbWU9JHthbnQucHJvamVjdC5uYW1lfSIKICAgICAgICAgICAgIGRlc3Q9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+Ci0gICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4gICAgCisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9Ii11bmRlcGxveS13aXRoLXB3IiBpZj0iZ2Z2My5wYXNzd29yZCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlVuZGVwbG95aW5nICR7ZGVwbG95LmFudC5hcmNoaXZlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbWV0aG9kLWNoZWNrcG9pbnQvU0ZTQk1ldGhvZENoZWNrcG9pbnREcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbWV0aG9kLWNoZWNrcG9pbnQvU0ZTQk1ldGhvZENoZWNrcG9pbnREcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCmluZGV4IDlkNjc4MTIuLmU3NTIyMTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL21ldGhvZC1jaGVja3BvaW50L1NGU0JNZXRob2RDaGVja3BvaW50RHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tZXRob2QtY2hlY2twb2ludC9TRlNCTWV0aG9kQ2hlY2twb2ludERyaXZlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKQEAgLTQ3Nyw5ICs0NzcsOSBAQAogICAgIDx0YXJnZXQgbmFtZT0iLWluaXQtdGFza2RlZnMiPgogICAgICAgICA8ZmFpbCB1bmxlc3M9ImxpYnMuQ29weUxpYnMuY2xhc3NwYXRoIj4KIFRoZSBsaWJzLkNvcHlMaWJzLmNsYXNzcGF0aCBwcm9wZXJ0eSBpcyBub3Qgc2V0IHVwLgotVGhpcyBwcm9wZXJ0eSBtdXN0IHBvaW50IHRvIAorVGhpcyBwcm9wZXJ0eSBtdXN0IHBvaW50IHRvCiBvcmctbmV0YmVhbnMtbW9kdWxlcy1qYXZhLWoyc2Vwcm9qZWN0LWNvcHlsaWJzdGFzay5qYXIgZmlsZSB3aGljaCBpcyBwYXJ0Ci1vZiBOZXRCZWFucyBJREUgaW5zdGFsbGF0aW9uIGFuZCBpcyB1c3VhbGx5IGxvY2F0ZWQgYXQgCitvZiBOZXRCZWFucyBJREUgaW5zdGFsbGF0aW9uIGFuZCBpcyB1c3VhbGx5IGxvY2F0ZWQgYXQKICZsdDtuZXRiZWFuc19pbnN0YWxsYXRpb24mZ3Q7L2phdmEmbHQ7dmVyc2lvbiZndDsvYW50L2V4dHJhIGZvbGRlci4KIEVpdGhlciBvcGVuIHRoZSBwcm9qZWN0IGluIHRoZSBJREUgYW5kIG1ha2Ugc3VyZSBDb3B5TGlicyBsaWJyYXJ5CiBleGlzdHMgb3Igc2V0dXAgdGhlIHByb3BlcnR5IG1hbnVhbGx5LiBGb3IgZXhhbXBsZSBsaWtlIHRoaXM6CkBAIC04NTUsNyArODU1LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsamF2YWRvYy1idWlsZCxqYXZhZG9jLWJyb3dzZSIgZGVzY3JpcHRpb249IkJ1aWxkIEphdmFkb2MuIiBuYW1lPSJqYXZhZG9jIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgQ09NUElMQVRJT04gU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItcHJlLXByZS1jb21waWxlLXRlc3QiPgpAQCAtODk0LDcgKzg5NCw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUsLXByZS1wcmUtY29tcGlsZS10ZXN0LC1wcmUtY29tcGlsZS10ZXN0LXNpbmdsZSwtZG8tY29tcGlsZS10ZXN0LXNpbmdsZSwtcG9zdC1jb21waWxlLXRlc3Qtc2luZ2xlIiBuYW1lPSJjb21waWxlLXRlc3Qtc2luZ2xlIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgRVhFQ1VUSU9OIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1wcmUtdGVzdC1ydW4iPgpAQCAtOTIxLDcgKzkyMSw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUtdGVzdC1zaW5nbGUsLXByZS10ZXN0LXJ1bi1zaW5nbGUsLWRvLXRlc3QtcnVuLXNpbmdsZSwtcG9zdC10ZXN0LXJ1bi1zaW5nbGUiIGRlc2NyaXB0aW9uPSJSdW4gc2luZ2xlIHVuaXQgdGVzdC4iIG5hbWU9InRlc3Qtc2luZ2xlIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgREVCVUdHSU5HIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlLXRlc3QiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItZGVidWctc3RhcnQtZGVidWdnZWUtdGVzdCI+CkBAIC05NDcsNyArOTQ3LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsLXByZS1kZWJ1Zy1maXgsLWRvLWRlYnVnLWZpeC10ZXN0IiBpZj0ibmV0YmVhbnMuaG9tZSIgbmFtZT0iZGVidWctZml4LXRlc3QiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBDTEVBTlVQIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCIgaWY9Im5vLmRpc3QuZWFyLmRpciIgbmFtZT0iZGVwcy1jbGVhbiIgdW5sZXNzPSJuby5kZXBzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tZXRob2QtY2hlY2twb2ludC9TRlNCTWV0aG9kQ2hlY2twb2ludERyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL21ldGhvZC1jaGVja3BvaW50L1NGU0JNZXRob2RDaGVja3BvaW50RHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCmluZGV4IGM0MDhmZGQuLmMxMWJhZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL21ldGhvZC1jaGVja3BvaW50L1NGU0JNZXRob2RDaGVja3BvaW50RHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL21ldGhvZC1jaGVja3BvaW50L1NGU0JNZXRob2RDaGVja3BvaW50RHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCkBAIC0zOCw4ICszOCw4IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBTRlNCRHJpdmVyU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAotICAgCi0gICAgLyoqIAorCisgICAgLyoqCiAgICAgICogUHJvY2Vzc2VzIHJlcXVlc3RzIGZvciBib3RoIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBhbmQgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kcy4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwotICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0PC90aXRsZT4iKTsgIAorICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0PC90aXRsZT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPlNlcnZsZXQgU0ZTQkRyaXZlclNlcnZsZXQgYXQgIiArIHJlcXVlc3QuZ2V0Q29udGV4dFBhdGggKCkgKyAiPC9oMT4iKTsKQEAgLTc2LDEzICs3NiwxMyBAQAogCiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5Gcm9tIHNlc3Npb24gU0ZTQlsxXSBOT1QgTlVMTCA/OiAiICsgKCIiICsgKHNmc2IxICE9IG51bGwpKSArICIgPC9oMT4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPkZyb20gc2Vzc2lvbiBTRlNCWzJdIE5PVCBOVUxMPyA6ICIgKyAoIiIgKyAoc2ZzYjIgIT0gbnVsbCkpICsgIiA8L2gxPiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChzZnNiMSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKICAgICAgICAgICAgICAgICBzZnNiMSA9IChTaW1wbGVTZXNzaW9uQmVhbikgY3R4Lmxvb2t1cCgiamF2YTpnbG9iYWwvU0ZTQk1ldGhvZENoZWNrcG9pbnREcml2ZXIvU2ltcGxlU2Vzc2lvbkJlYW4iKTsKICAgICAgICAgICAgICAgICBzZnNiMiA9IChDaGVja3BvaW50ZWRCZWFuKSBjdHgubG9va3VwKCJqYXZhOmdsb2JhbC9TRlNCTWV0aG9kQ2hlY2twb2ludERyaXZlci9DaGVja3BvaW50ZWRCZWFuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPkNyZWF0ZWQgU0ZTQlsxXTogIiArIHNmc2IxLmFzU3RyaW5nKCkgKyAiIDwvaDE+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5DcmVhdGVkIFNGU0JbMl06ICIgKyBzZnNiMi5hc1N0cmluZygpICsgIiA8L2gxPiIpOwogCkBAIC0xMTMsMTMgKzExMywxMyBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaHRtbD4iKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIG5tRXgpIHsKICAgICAgICAgICAgIG5tRXgucHJpbnRTdGFja1RyYWNlKG91dCk7Ci0gICAgICAgIH0gZmluYWxseSB7IAorICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgICAgIH0KLSAgICB9IAorICAgIH0KIAogICAgIC8vIDxlZGl0b3ItZm9sZCBkZWZhdWx0c3RhdGU9ImNvbGxhcHNlZCIgZGVzYz0iSHR0cFNlcnZsZXQgbWV0aG9kcy4gQ2xpY2sgb24gdGhlICsgc2lnbiBvbiB0aGUgbGVmdCB0byBlZGl0IHRoZSBjb2RlLiI+Ci0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTEzMCw5ICsxMzAsOSBAQAogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICB9IAorICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtMTQ1LDcgKzE0NSw3IEBACiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogUmV0dXJucyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2bGV0LgogICAgICAqIEByZXR1cm4gYSBTdHJpbmcgY29udGFpbmluZyBzZXJ2bGV0IGRlc2NyaXB0aW9uCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tZXRob2QtY2hlY2twb2ludC9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL21ldGhvZC1jaGVja3BvaW50L3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhCmluZGV4IDAxNTAyYmQuLmY4NDAxOTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL21ldGhvZC1jaGVja3BvaW50L3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL21ldGhvZC1jaGVja3BvaW50L3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhCkBAIC03Miw5ICs3Miw5IEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIGZvciB0aGUgIiArIGkgKyAiIHRpbWUuLi4uIik7CiAgICAgICAgICAgICAgICAgdSA9IG5ldyBVUkwodXJsKTsKICAgICAgICAgICAgICAgICB1YyA9IHUub3BlbkNvbm5lY3Rpb24oKTsKLQkJZm9yIChTdHJpbmcgY29va2llIDogcmVzcG9uc2VDb29raWVzKSB7Ci0gICAgICAgICAgICAgICAgCXVjLnNldFJlcXVlc3RQcm9wZXJ0eSgiQ29va2llIiwgY29va2llKTsKLQkJfQorICAgICAgICBmb3IgKFN0cmluZyBjb29raWUgOiByZXNwb25zZUNvb2tpZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgdWMuc2V0UmVxdWVzdFByb3BlcnR5KCJDb29raWUiLCBjb29raWUpOworICAgICAgICB9CiAgICAgICAgICAgICAgICAgdWMuY29ubmVjdCgpOwogICAgICAgICAgICAgICAgIFNlc3Npb25TdGF0ZUluZm8gaW5mbyA9IGV4dHJhY3RTZXNzaW9uU3RhdGVzKHVjKTsKICAgICAgICAgICAgICAgICBpbmZvLnNldEFjY2Vzc0NvdW50KDIraSk7CkBAIC0xMDUsOSArMTA1LDkgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgZm9yIHRoZSAiICsgaSArICIgdGltZS4uLi4iKTsKICAgICAgICAgICAgICAgICB1ID0gbmV3IFVSTCh1cmwpOwogICAgICAgICAgICAgICAgIHVjID0gdS5vcGVuQ29ubmVjdGlvbigpOwotCQlmb3IgKFN0cmluZyBjb29raWUgOiByZXNwb25zZUNvb2tpZXMpIHsKLSAgICAgICAgICAgICAgICAJdWMuc2V0UmVxdWVzdFByb3BlcnR5KCJDb29raWUiLCBjb29raWUpOwotCQl9CisgICAgICAgIGZvciAoU3RyaW5nIGNvb2tpZSA6IHJlc3BvbnNlQ29va2llcykgeworICAgICAgICAgICAgICAgICAgICB1Yy5zZXRSZXF1ZXN0UHJvcGVydHkoIkNvb2tpZSIsIGNvb2tpZSk7CisgICAgICAgIH0KICAgICAgICAgICAgICAgICB1Yy5jb25uZWN0KCk7CiAgICAgICAgICAgICAgICAgU2Vzc2lvblN0YXRlSW5mbyBpbmZvID0gZXh0cmFjdFNlc3Npb25TdGF0ZXModWMpOwogICAgICAgICAgICAgICAgIGluZm8uc2V0QWNjZXNzQ291bnQoNStpKTsKQEAgLTEyMCw3ICsxMjAsNyBAQAogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWxlZCAiICsgaW5mbyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKIC8qCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3RhcnRpbmcgaW5zdDEuLi4iKTsKICAgICAgICAgICAgIHByb2MgPSBSdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKEFTQURNSU4gKyAiICBzdGFydC1pbnN0YW5jZSBpbnN0MSIpOwpAQCAtMTQ0LDE0ICsxNDQsMTQgQEAKICAgICAgICAgICAgICAgICByZXNwb25zZUNvb2tpZXMuYWRkKGNvb2tpZSk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKVVNUIFJFQUQgQ09PS0lFOiAiICsgY29va2llKTsKICAgICAgICAgICAgICAgICBpZiAoY29va2llLnN0YXJ0c1dpdGgoIkpTRVNTSU9OSUQ9IikpIHsKLQkJICAgIGpzZXNzaW9uSURDb29raWUgPSBjb29raWU7CisgICAgICAgICAgICBqc2Vzc2lvbklEQ29va2llID0gY29va2llOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICh0bXBTZXNzU3RhdGUuZ2V0SnNlc3Npb25Db29raWUoKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0bXBTZXNzU3RhdGUuc2V0SnNlc3Npb25Db29raWUoanNlc3Npb25JRENvb2tpZSk7ICAgIAotICAgICAgICAgICAgcmVzcG9uc2VDb29raWVzLmFkZChqc2Vzc2lvbklEQ29va2llKTsgICAgCisgICAgICAgICAgICB0bXBTZXNzU3RhdGUuc2V0SnNlc3Npb25Db29raWUoanNlc3Npb25JRENvb2tpZSk7CisgICAgICAgICAgICByZXNwb25zZUNvb2tpZXMuYWRkKGpzZXNzaW9uSURDb29raWUpOwogICAgICAgICB9CiAgICAgICAgIGludCBjb2RlID0gKChIdHRwVVJMQ29ubmVjdGlvbikgdWMpLmdldFJlc3BvbnNlQ29kZSgpOwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHVjLmdldElucHV0U3RyZWFtKCk7CkBAIC0xNzIsMjEgKzE3MiwyMSBAQAogICAgICAgICAgICAgICAgIGlmICghICJudWxsIi5lcXVhbHModmFsLnRyaW0oKSkpIHsKICAgICAgICAgICAgICAgICAgICAgdG1wU2Vzc1N0YXRlLnNldEh0dHBDb3VudGVyKEludGVnZXIudmFsdWVPZih2YWwudHJpbSgpKSk7CiAgICAgICAgICAgICAgICAgfQotCSAgICB9IGVsc2UgaWYgKHRva2Vuc1swXS5zdGFydHNXaXRoKCI8aDE+RnJvbSIpKSB7CisgICAgICAgIH0gZWxzZSBpZiAodG9rZW5zWzBdLnN0YXJ0c1dpdGgoIjxoMT5Gcm9tIikpIHsKICAgICAgICAgICAgICAgICBpZiAodG9rZW5zWzJdLnN0YXJ0c1dpdGgoIlNGU0JbMV0iKSkgewotICAgICAgICAgICAgICAgIAlCb29sZWFuIHJldHJpZXZlZCA9IEJvb2xlYW4udmFsdWVPZih0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDJdKTsKLSAgICAgICAgICAgICAgICAJdG1wU2Vzc1N0YXRlLnNldEVqYjFTdGF0ZU5ldyghIHJldHJpZXZlZCk7CisgICAgICAgICAgICAgICAgICAgIEJvb2xlYW4gcmV0cmlldmVkID0gQm9vbGVhbi52YWx1ZU9mKHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMl0pOworICAgICAgICAgICAgICAgICAgICB0bXBTZXNzU3RhdGUuc2V0RWpiMVN0YXRlTmV3KCEgcmV0cmlldmVkKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRva2Vuc1syXS5zdGFydHNXaXRoKCJTRlNCWzJdIikpIHsKLSAgICAgICAgICAgICAgICAJQm9vbGVhbiByZXRyaWV2ZWQgPSBCb29sZWFuLnZhbHVlT2YodG9rZW5zW3Rva2Vucy5sZW5ndGggLSAyXSk7Ci0gICAgICAgICAgICAgICAgCXRtcFNlc3NTdGF0ZS5zZXRFamIyU3RhdGVOZXcoISByZXRyaWV2ZWQpOworICAgICAgICAgICAgICAgICAgICBCb29sZWFuIHJldHJpZXZlZCA9IEJvb2xlYW4udmFsdWVPZih0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDJdKTsKKyAgICAgICAgICAgICAgICAgICAgdG1wU2Vzc1N0YXRlLnNldEVqYjJTdGF0ZU5ldyghIHJldHJpZXZlZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbnNbMF0uc3RhcnRzV2l0aCgiPGgxPlJldHJpZXZlZCIpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRva2Vuc1sxXS5zdGFydHNXaXRoKCJTRlNCWzFdIikpIHsKLSAgICAgICAgICAgICAgICAJaW50IHN0YXRlMSA9IEludGVnZXIudmFsdWVPZih0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDJdKTsKLSAgICAgICAgICAgICAgICAJdG1wU2Vzc1N0YXRlLnNldEVqYjFDb3VudGVyKHN0YXRlMSk7CisgICAgICAgICAgICAgICAgICAgIGludCBzdGF0ZTEgPSBJbnRlZ2VyLnZhbHVlT2YodG9rZW5zW3Rva2Vucy5sZW5ndGggLSAyXSk7CisgICAgICAgICAgICAgICAgICAgIHRtcFNlc3NTdGF0ZS5zZXRFamIxQ291bnRlcihzdGF0ZTEpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW5zWzJdLnN0YXJ0c1dpdGgoIlNGU0JbMl0iKSkgewotICAgICAgICAgICAgICAgIAlpbnQgc3RhdGUyID0gSW50ZWdlci52YWx1ZU9mKHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMl0pOwotICAgICAgICAgICAgICAgIAl0bXBTZXNzU3RhdGUuc2V0RWpiMkNvdW50ZXIoc3RhdGUyKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IHN0YXRlMiA9IEludGVnZXIudmFsdWVPZih0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDJdKTsKKyAgICAgICAgICAgICAgICAgICAgdG1wU2Vzc1N0YXRlLnNldEVqYjJDb3VudGVyKHN0YXRlMik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yMTMsMTEgKzIxMywxMSBAQAogCiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcHJldi5nZXRIdHRwQ291bnRlcigpIDwgY3VycmVudC5nZXRIdHRwQ291bnRlcigpOwogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHByZXYuZ2V0RWpiMUNvdW50ZXIoKSA8IGN1cnJlbnQuZ2V0RWpiMUNvdW50ZXIoKTsKLQkgICAgaWYgKGlzRmlyc3RBY2Nlc3NBZnRlckZhaWxvdmVyKSB7CisgICAgICAgIGlmIChpc0ZpcnN0QWNjZXNzQWZ0ZXJGYWlsb3ZlcikgewogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBjdXJyZW50LmdldEVqYjJDb3VudGVyKCkgPT0gMzsKLQkgICAgfSBlbHNlIHsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcHJldi5nZXRFamIyQ291bnRlcigpIDwgY3VycmVudC5nZXRFamIyQ291bnRlcigpOwotCSAgICB9CisgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL21ldGhvZC1jaGVja3BvaW50L3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbWV0aG9kLWNoZWNrcG9pbnQvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEKaW5kZXggNTBhMTE4My4uYThhZmM2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbWV0aG9kLWNoZWNrcG9pbnQvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbWV0aG9kLWNoZWNrcG9pbnQvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIC8qKgogICogVW5pdCB0ZXN0IGZvciBzaW1wbGUgQXBwLgogICovCi1wdWJsaWMgY2xhc3MgQXBwVGVzdCAKK3B1YmxpYyBjbGFzcyBBcHBUZXN0CiAgICAgZXh0ZW5kcyBUZXN0Q2FzZQogewogICAgIC8qKgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbXVsdGktcmVzdGFydC9TRlNCRHJpdmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL211bHRpLXJlc3RhcnQvU0ZTQkRyaXZlci9idWlsZC54bWwKaW5kZXggMzMxYzZkZS4uOTRkNDIxMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbXVsdGktcmVzdGFydC9TRlNCRHJpdmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tdWx0aS1yZXN0YXJ0L1NGU0JEcml2ZXIvYnVpbGQueG1sCkBAIC0zMCwyNyArMzAsMjcgQEAKICAgICA8aW1wb3J0IGZpbGU9Im5icHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDwhLS0KIAotICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlIAotICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkIAotICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOiAKKyAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZQorICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkCisgICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6CiAKLSAgICAgIC1wcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgLXBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIC1wcmUtY29tcGlsZTogICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gCi0gICAgICAtcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gCisgICAgICAtcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgLXBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgLXByZS1jb21waWxlOiAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbgorICAgICAgLXBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICAtcHJlLWNvbXBpbGUtc2luZ2xlOiAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBmaWxlCiAgICAgICAtcG9zdC1jb21waWxlLXNpbmdsZTogICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIGZpbGUKICAgICAgIC1wcmUtY29tcGlsZS10ZXN0OiAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2YgSlVuaXQgdGVzdHMKICAgICAgIC1wb3N0LWNvbXBpbGUtdGVzdDogICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBKVW5pdCB0ZXN0cwogICAgICAgLXByZS1jb21waWxlLXRlc3Qtc2luZ2xlOiAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgSlVuaXQgdGVzdAogICAgICAgLXBvc3QtY29tcGlsZS10ZXN0LXNpbmdsZTogY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBKVXVuaXQgdGVzdAotICAgICAgLXByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBhcmNoaXZlIGJ1aWxkaW5nIAotICAgICAgLXBvc3QtZGlzdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGFyY2hpdmUgYnVpbGRpbmcgCi0gICAgICAtcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMgCisgICAgICAtcHJlLWRpc3Q6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGFyY2hpdmUgYnVpbGRpbmcKKyAgICAgIC1wb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBhcmNoaXZlIGJ1aWxkaW5nCisgICAgICAtcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMKICAgICAgIC1wcmUtcnVuLWRlcGxveTogICAgICAgICAgIGNhbGxlZCBiZWZvcmUgZGVwbG95aW5nCiAgICAgICAtcG9zdC1ydW4tZGVwbG95OiAgICAgICAgICBjYWxsZWQgYWZ0ZXIgZGVwbG95aW5nCiAKLSAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlIAorICAgIEV4YW1wbGUgb2YgcGx1Z2luZyBhbiBvYmZ1c2NhdG9yIGFmdGVyIHRoZSBjb21waWxhdGlvbiBjb3VsZCBsb29rIGxpa2UKIAogICAgICAgICA8dGFyZ2V0IG5hbWU9Ii1wb3N0LWNvbXBpbGUiPgogICAgICAgICAgICAgPG9iZnVzY2F0ZT4KQEAgLTU4LDIxICs1OCwyMSBAQAogICAgICAgICAgICAgPC9vYmZ1c2NhdGU+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQKKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogCiAgICAgT3RoZXIgd2F5IGhvdyB0byBjdXN0b21pemUgdGhlIGJ1aWxkIGlzIGJ5IG92ZXJyaWRpbmcgZXhpc3RpbmcgbWFpbiB0YXJnZXRzLgotICAgIFRoZSB0YXJnZXQgb2YgaW50ZXJlc3QgYXJlOiAKKyAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZToKIAogICAgICAgaW5pdC1tYWNyb2RlZi1qYXZhYzogICAgZGVmaW5lcyBtYWNybyBmb3IgamF2YWMgY29tcGlsYXRpb24KICAgICAgIGluaXQtbWFjcm9kZWYtanVuaXQ6ICAgZGVmaW5lcyBtYWNybyBmb3IganVuaXQgZXhlY3V0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWRlYnVnOiAgICBkZWZpbmVzIG1hY3JvIGZvciBjbGFzcyBkZWJ1Z2dpbmcKICAgICAgIGRvLWRpc3Q6ICAgICAgICAgICAgICAgIGFyY2hpdmUgYnVpbGRpbmcKLSAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0IAotICAgICAgamF2YWRvYy1idWlsZDogICAgICAgICAgamF2YWRvYyBnZW5lcmF0aW9uIAorICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHByb2plY3QKKyAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbgogCi0gICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgdGhlIHRhcmdldCBmb3IgcHJvamVjdCBleGVjdXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9IjxQUk9KTkFNRT4taW1wbC5qYXIiPgogICAgICAgICAgICAgPGV4ZWMgZGlyPSJiaW4iIGV4ZWN1dGFibGU9ImxhdW5jaGVyLmV4ZSI+CkBAIC04MCwxMCArODAsMTAgQEAKICAgICAgICAgICAgIDwvZXhlYz4KICAgICAgICAgPC90YXJnZXQ+CiAKLSAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uIAotICAgIGNvbXBpbGUgdGFyZ2V0IGFzIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGxpc3Qgb2YgYXZhaWxhYmxlIAotICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4gCi0gICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuIAorICAgIE5vdGljZSB0aGF0IG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gamFyIHRhcmdldCBhbmQgbm90IG9ubHkgb24KKyAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZQorICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4KKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogICAgIC0tPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbXVsdGktcmVzdGFydC9TRlNCRHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL211bHRpLXJlc3RhcnQvU0ZTQkRyaXZlci9uYnByb2plY3QvYW50LWRlcGxveS54bWwKaW5kZXggM2Q5M2UxMC4uYzM3ZDg2MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbXVsdGktcmVzdGFydC9TRlNCRHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tdWx0aS1yZXN0YXJ0L1NGU0JEcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9ImdmdjMiIHByb3BlcnR5PSJnZnYzLnBhc3N3b3JkLmZpbGUiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+ICA8IS0tIGRvIG5vdCBmb3JnZXQgdG8gZGVsZXRlIHRoaXMhIC0tPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJBU19BRE1JTl9QQVNTV09SRD0ke2dmdjMucGFzc3dvcmR9IiBmaWxlPSIke2dmdjMucGFzc3dvcmQuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iLXBhcnNlLXN1bi13ZWIiIGRlcGVuZHM9Ii1pbml0LWNsLWRlcGxveW1lbnQtZW52IiBpZj0ic3VuLndlYi5wcmVzZW50Ij4KICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0iZ2Z2MyIgcHJvcGVydHk9InRlbXAuc3VuLndlYiIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHtkZXBsb3kuYW50LmRvY2Jhc2UuZGlyfS9XRUItSU5GL3N1bi13ZWIueG1sIiB0b2ZpbGU9IiR7dGVtcC5zdW4ud2VifSIvPgpAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPHJlcGxhY2V2YWx1ZT48IVtDREFUQVstLT4gPHN1bi13ZWItYXBwXV0+PC9yZXBsYWNldmFsdWU+CiAgICAgICAgIDwvcmVwbGFjZT4KICAgICAgICAgPHhtbHByb3BlcnR5IGZpbGU9IiR7dGVtcC5zdW4ud2VifSIgdmFsaWRhdGU9ImZhbHNlIj4KLSAgICAgICAgPC94bWxwcm9wZXJ0eT4gICAgCisgICAgICAgIDwveG1scHJvcGVydHk+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3kuYW50LmNsaWVudC51cmwiIHZhbHVlPSIke2dmdjMudXJsfSR7c3VuLXdlYi1hcHAuY29udGV4dC1yb290fSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95LmNvbnRleHQucm9vdC5hcmd1bWVudCIgdmFsdWU9IiZhbXA7Y29udGV4dHJvb3Q9JHtzdW4td2ViLWFwcC5jb250ZXh0LXJvb3R9Ii8+CkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmdWxsLmRlcGxveS5hbnQuYXJjaGl2ZSIgbG9jYXRpb249IiR7ZGVwbG95LmFudC5hcmNoaXZlfSIvPgogICAgICAgICA8Z2V0IHNyYz0iJHtnZnYzLmFkbWluLnVybH0vX19hc2FkbWluL2RlcGxveT9wYXRoPSR7ZnVsbC5kZXBsb3kuYW50LmFyY2hpdmV9JHtkZXBsb3kuY29udGV4dC5yb290LmFyZ3VtZW50fSZhbXA7Zm9yY2U9dHJ1ZSZhbXA7bmFtZT0ke2FudC5wcm9qZWN0Lm5hbWV9IgogICAgICAgICAgICAgZGVzdD0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KLSAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPiAgICAKKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iLWRlcGxveS13aXRoLXB3IiBpZj0iZ2Z2My5wYXNzd29yZCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke2RlcGxveS5hbnQuYXJjaGl2ZX0iLz4KQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0iZ2Z2MyIgcHJvcGVydHk9ImdmdjMucmVzdWx0cy5maWxlIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPiAgPCEtLSBkbyBub3QgZm9yZ2V0IHRvIGRlbGV0ZSB0aGlzISAtLT4KICAgICAgICAgPGdldCBzcmM9IiR7Z2Z2My5hZG1pbi51cmx9L19fYXNhZG1pbi91bmRlcGxveT9uYW1lPSR7YW50LnByb2plY3QubmFtZX0iCiAgICAgICAgICAgICBkZXN0PSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgotICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+ICAgIAorICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSItdW5kZXBsb3ktd2l0aC1wdyIgaWY9ImdmdjMucGFzc3dvcmQiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJVbmRlcGxveWluZyAke2RlcGxveS5hbnQuYXJjaGl2ZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL211bHRpLXJlc3RhcnQvU0ZTQkRyaXZlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tdWx0aS1yZXN0YXJ0L1NGU0JEcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCmluZGV4IDZkYWIzNTkuLjhhNjMxNzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL211bHRpLXJlc3RhcnQvU0ZTQkRyaXZlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbXVsdGktcmVzdGFydC9TRlNCRHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbApAQCAtNDc3LDkgKzQ3Nyw5IEBACiAgICAgPHRhcmdldCBuYW1lPSItaW5pdC10YXNrZGVmcyI+CiAgICAgICAgIDxmYWlsIHVubGVzcz0ibGlicy5Db3B5TGlicy5jbGFzc3BhdGgiPgogVGhlIGxpYnMuQ29weUxpYnMuY2xhc3NwYXRoIHByb3BlcnR5IGlzIG5vdCBzZXQgdXAuCi1UaGlzIHByb3BlcnR5IG11c3QgcG9pbnQgdG8gCitUaGlzIHByb3BlcnR5IG11c3QgcG9pbnQgdG8KIG9yZy1uZXRiZWFucy1tb2R1bGVzLWphdmEtajJzZXByb2plY3QtY29weWxpYnN0YXNrLmphciBmaWxlIHdoaWNoIGlzIHBhcnQKLW9mIE5ldEJlYW5zIElERSBpbnN0YWxsYXRpb24gYW5kIGlzIHVzdWFsbHkgbG9jYXRlZCBhdCAKK29mIE5ldEJlYW5zIElERSBpbnN0YWxsYXRpb24gYW5kIGlzIHVzdWFsbHkgbG9jYXRlZCBhdAogJmx0O25ldGJlYW5zX2luc3RhbGxhdGlvbiZndDsvamF2YSZsdDt2ZXJzaW9uJmd0Oy9hbnQvZXh0cmEgZm9sZGVyLgogRWl0aGVyIG9wZW4gdGhlIHByb2plY3QgaW4gdGhlIElERSBhbmQgbWFrZSBzdXJlIENvcHlMaWJzIGxpYnJhcnkKIGV4aXN0cyBvciBzZXR1cCB0aGUgcHJvcGVydHkgbWFudWFsbHkuIEZvciBleGFtcGxlIGxpa2UgdGhpczoKQEAgLTg1NSw3ICs4NTUsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxqYXZhZG9jLWJ1aWxkLGphdmFkb2MtYnJvd3NlIiBkZXNjcmlwdGlvbj0iQnVpbGQgSmF2YWRvYy4iIG5hbWU9ImphdmFkb2MiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBDT01QSUxBVElPTiBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZSIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1wcmUtcHJlLWNvbXBpbGUtdGVzdCI+CkBAIC04OTQsNyArODk0LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZSwtcHJlLXByZS1jb21waWxlLXRlc3QsLXByZS1jb21waWxlLXRlc3Qtc2luZ2xlLC1kby1jb21waWxlLXRlc3Qtc2luZ2xlLC1wb3N0LWNvbXBpbGUtdGVzdC1zaW5nbGUiIG5hbWU9ImNvbXBpbGUtdGVzdC1zaW5nbGUiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBFWEVDVVRJT04gU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0IiBpZj0iaGF2ZS50ZXN0cyIgbmFtZT0iLXByZS10ZXN0LXJ1biI+CkBAIC05MjEsNyArOTIxLDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZS10ZXN0LXNpbmdsZSwtcHJlLXRlc3QtcnVuLXNpbmdsZSwtZG8tdGVzdC1ydW4tc2luZ2xlLC1wb3N0LXRlc3QtcnVuLXNpbmdsZSIgZGVzY3JpcHRpb249IlJ1biBzaW5nbGUgdW5pdCB0ZXN0LiIgbmFtZT0idGVzdC1zaW5nbGUiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBERUJVR0dJTkcgU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUtdGVzdCIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1kZWJ1Zy1zdGFydC1kZWJ1Z2dlZS10ZXN0Ij4KQEAgLTk0Nyw3ICs5NDcsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCwtcHJlLWRlYnVnLWZpeCwtZG8tZGVidWctZml4LXRlc3QiIGlmPSJuZXRiZWFucy5ob21lIiBuYW1lPSJkZWJ1Zy1maXgtdGVzdCIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIENMRUFOVVAgU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0IiBpZj0ibm8uZGlzdC5lYXIuZGlyIiBuYW1lPSJkZXBzLWNsZWFuIiB1bmxlc3M9Im5vLmRlcHMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL211bHRpLXJlc3RhcnQvU0ZTQkRyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL211bHRpLXJlc3RhcnQvU0ZTQkRyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YQppbmRleCBhMGI2NDlhLi5iMDM2YTI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tdWx0aS1yZXN0YXJ0L1NGU0JEcml2ZXIvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NGU0JEcml2ZXJTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbXVsdGktcmVzdGFydC9TRlNCRHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCkBAIC0zOCw4ICszOCw4IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBTRlNCRHJpdmVyU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAotICAgCi0gICAgLyoqIAorCisgICAgLyoqCiAgICAgICogUHJvY2Vzc2VzIHJlcXVlc3RzIGZvciBib3RoIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBhbmQgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kcy4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwotICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0PC90aXRsZT4iKTsgIAorICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0PC90aXRsZT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPlNlcnZsZXQgU0ZTQkRyaXZlclNlcnZsZXQgYXQgIiArIHJlcXVlc3QuZ2V0Q29udGV4dFBhdGggKCkgKyAiPC9oMT4iKTsKQEAgLTc1LDEzICs3NSwxMyBAQAogCiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5Gcm9tIHNlc3Npb24gU0ZTQlsxXSBOT1QgTlVMTCA/OiAiICsgKCIiICsgKHNmc2IxICE9IG51bGwpKSArICIgPC9oMT4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPkZyb20gc2Vzc2lvbiBTRlNCWzJdIE5PVCBOVUxMPyA6ICIgKyAoIiIgKyAoc2ZzYjIgIT0gbnVsbCkpICsgIiA8L2gxPiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChzZnNiMSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKICAgICAgICAgICAgICAgICBzZnNiMSA9IChTaW1wbGVTZXNzaW9uQmVhbikgY3R4Lmxvb2t1cCgiamF2YTpnbG9iYWwvU0ZTQkRyaXZlci9TaW1wbGVTZXNzaW9uQmVhbiIpOwogICAgICAgICAgICAgICAgIHNmc2IyID0gKFNpbXBsZVNlc3Npb25CZWFuKSBjdHgubG9va3VwKCJqYXZhOmdsb2JhbC9TRlNCRHJpdmVyL1NpbXBsZVNlc3Npb25CZWFuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPkNyZWF0ZWQgU0ZTQlsxXTogIiArIHNmc2IxLmFzU3RyaW5nKCkgKyAiIDwvaDE+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5DcmVhdGVkIFNGU0JbMl06ICIgKyBzZnNiMi5hc1N0cmluZygpICsgIiA8L2gxPiIpOwogCkBAIC0xMDksMTMgKzEwOSwxMyBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaHRtbD4iKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIG5tRXgpIHsKICAgICAgICAgICAgIG5tRXgucHJpbnRTdGFja1RyYWNlKG91dCk7Ci0gICAgICAgIH0gZmluYWxseSB7IAorICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgICAgIH0KLSAgICB9IAorICAgIH0KIAogICAgIC8vIDxlZGl0b3ItZm9sZCBkZWZhdWx0c3RhdGU9ImNvbGxhcHNlZCIgZGVzYz0iSHR0cFNlcnZsZXQgbWV0aG9kcy4gQ2xpY2sgb24gdGhlICsgc2lnbiBvbiB0aGUgbGVmdCB0byBlZGl0IHRoZSBjb2RlLiI+Ci0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTEyNiw5ICsxMjYsOSBAQAogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICB9IAorICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogUmV0dXJucyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2bGV0LgogICAgICAqIEByZXR1cm4gYSBTdHJpbmcgY29udGFpbmluZyBzZXJ2bGV0IGRlc2NyaXB0aW9uCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tdWx0aS1yZXN0YXJ0L3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbXVsdGktcmVzdGFydC9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YQppbmRleCBmYjAyNTc3Li5jODZiZTZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tdWx0aS1yZXN0YXJ0L3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL211bHRpLXJlc3RhcnQvc3JjL21haW4vamF2YS9jb20vYWNtZS9IdHRwQ2xpZW50LmphdmEKQEAgLTQ2LDk2ICs0Niw5NiBAQAogCiAgICAgcHVibGljIEh0dHBDbGllbnQoU3RyaW5nW10gYXJncykgewogICAgICAgICBob3N0ID0gImxvY2FsaG9zdCI7Ci0JY2FuUHJvY2VlZCA9IChhcmdzLmxlbmd0aCA9PSA2KTsKLQlpZiAoY2FuUHJvY2VlZCkgeworICAgIGNhblByb2NlZWQgPSAoYXJncy5sZW5ndGggPT0gNik7CisgICAgaWYgKGNhblByb2NlZWQpIHsKICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTwzOyBpKyspIHsKLQkgICAgICAgIGluc3RhbmNlTmFtZXNbaV0gPSBhcmdzWzIgKiBpXTsKLQkgICAgICAgIHBvcnRbaV0gPSBhcmdzWzIgKiBpICsgMV07CisgICAgICAgICAgICBpbnN0YW5jZU5hbWVzW2ldID0gYXJnc1syICogaV07CisgICAgICAgICAgICBwb3J0W2ldID0gYXJnc1syICogaSArIDFdOwogICAgICAgICAgICAgfQotCX0KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotCWlmICghIGNhblByb2NlZWQpIHsKLQkgICAgU3lzdGVtLmVyci5wcmludGxuKCJVc2FnZTogamF2YSAtY3AgPGNwPiBjb20uYWNtZS5IdHRwQ2xpZW50IDxpbnN0XzBfbmFtZT4gPHBvcnQwPiAgPGluc3RfMV9uYW1lPiA8cG9ydDE+ICA8aW5zdF8yX25hbWU+IDxwb3J0Mj4gIik7CisgICAgaWYgKCEgY2FuUHJvY2VlZCkgeworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVzYWdlOiBqYXZhIC1jcCA8Y3A+IGNvbS5hY21lLkh0dHBDbGllbnQgPGluc3RfMF9uYW1lPiA8cG9ydDA+ICA8aW5zdF8xX25hbWU+IDxwb3J0MT4gIDxpbnN0XzJfbmFtZT4gPHBvcnQyPiAiKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0WzBdICsKICAgICAgICAgICAgICAgICAgICAgICAgICIvIiArIGFwcE5hbWUgKyAiLyIgKyBzZXJ2bGV0TmFtZTsKLSAgICAKKwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgd2ViY2xpZW50IHNlcnZsZXQgYXQgIiArIHVybCk7Ci0gICAgCisKICAgICAgICAgICAgICAgICBVUkwgdSA9IG5ldyBVUkwodXJsKTsKICAgICAgICAgICAgICAgICBVUkxDb25uZWN0aW9uIHVjID0gdS5vcGVuQ29ubmVjdGlvbigpOwotICAgIAorCiAgICAgICAgICAgICAgICAgc3RhdGVJbmZvID0gZXh0cmFjdFNlc3Npb25TdGF0ZXModWMpOwogICAgICAgICAgICAgICAgIHN0YXRlSW5mby5zZXRBY2Nlc3NDb3VudCgxKTsKICAgICAgICAgICAgICAgICBqc2Vzc2lvbklEQ29va2llID0gc3RhdGVJbmZvLmdldEpzZXNzaW9uQ29va2llKCk7Ci0gICAgCisKICAgICAgICAgICAgICAgICBzdG9wQW5kQWNjZXNzQW5kU3RhcnQoaW5zdGFuY2VOYW1lc1swXSwgcG9ydFsxXSk7CiAgICAgICAgICAgICAgICAgc3RvcEFuZEFjY2Vzc0FuZFN0YXJ0KGluc3RhbmNlTmFtZXNbMV0sIHBvcnRbMl0pOwogICAgICAgICAgICAgICAgIHN0b3BBbmRBY2Nlc3NBbmRTdGFydChpbnN0YW5jZU5hbWVzWzJdLCBwb3J0WzBdKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgfQotCX0KKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHN0b3BBbmRBY2Nlc3NBbmRTdGFydChTdHJpbmcgaW5zdGFuY2UsIFN0cmluZyBwb3J0KSB7CiAgICAgICAgICAgICB0cnkgeyBUaHJlYWQuc2xlZXAoMyoxMDAwKTsgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7fQogCi0JICAgIHN0b3BJbnN0YW5jZShpbnN0YW5jZSk7CisgICAgICAgIHN0b3BJbnN0YW5jZShpbnN0YW5jZSk7CiAgICAgICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKwogICAgICAgICAgICAgICAgICAgICAiLyIgKyBhcHBOYW1lICsgIi8iICsgc2VydmxldE5hbWU7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqIEFDQ0VTU0lORyBVUkwgOiAiICsgdXJsKTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKCEgYWNjZXNzQXBwbGljYXRpb24odXJsKSkgewotCQkgICBicmVhazsKLQkJfQorICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgfQogCi0JICAgIHN0YXJ0SW5zdGFuY2UoaW5zdGFuY2UpOworICAgICAgICBzdGFydEluc3RhbmNlKGluc3RhbmNlKTsKICAgICAgICAgICAgIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICAgICAgICAgIi8iICsgYXBwTmFtZSArICIvIiArIHNlcnZsZXROYW1lOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZiAoISBhY2Nlc3NBcHBsaWNhdGlvbih1cmwpKSB7Ci0JCSAgIGJyZWFrOwotCQl9CisgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHN0b3BJbnN0YW5jZShTdHJpbmcgaW5zdE5hbWUpIHsKLQl0cnkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyBzdG9wLWluc3RhbmNlICIgICsgaW5zdE5hbWUpOwotCSAgICBUaHJlYWQuc2xlZXAoMyAqIDEwMDApOwotCSAgICBQcm9jZXNzIHByb2MgPSBSdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKEFTQURNSU4gKyAiICBzdG9wLWluc3RhbmNlICIgKyBpbnN0TmFtZSk7Ci0JICAgIHByb2Mud2FpdEZvcigpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlByb2Nlc3Mgc3RvcC1pbnN0YW5jZSAiICArIGluc3ROYW1lICsgIiBmaW5pc2hlZC4uLiIpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yIHdoaWxlIHN0b3BwaW5nIGluc3RhbmNlICIgKyBpbnN0TmFtZSk7Ci0JfQorICAgIHRyeSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0aW5nIHN0b3AtaW5zdGFuY2UgIiAgKyBpbnN0TmFtZSk7CisgICAgICAgIFRocmVhZC5zbGVlcCgzICogMTAwMCk7CisgICAgICAgIFByb2Nlc3MgcHJvYyA9IFJ1bnRpbWUuZ2V0UnVudGltZSgpLmV4ZWMoQVNBRE1JTiArICIgIHN0b3AtaW5zdGFuY2UgIiArIGluc3ROYW1lKTsKKyAgICAgICAgcHJvYy53YWl0Rm9yKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHJvY2VzcyBzdG9wLWluc3RhbmNlICIgICsgaW5zdE5hbWUgKyAiIGZpbmlzaGVkLi4uIik7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3Igd2hpbGUgc3RvcHBpbmcgaW5zdGFuY2UgIiArIGluc3ROYW1lKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHN0YXJ0SW5zdGFuY2UoU3RyaW5nIGluc3ROYW1lKSB7Ci0JdHJ5IHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRpbmcgc3RhcnQtaW5zdGFuY2UgIiAgKyBpbnN0TmFtZSk7Ci0JICAgIFByb2Nlc3MgcHJvYyA9IFJ1bnRpbWUuZ2V0UnVudGltZSgpLmV4ZWMoQVNBRE1JTiArICIgIHN0YXJ0LWluc3RhbmNlICIgKyBpbnN0TmFtZSk7Ci0JICAgIHByb2Mud2FpdEZvcigpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlByb2Nlc3Mgc3RhcnQtaW5zdGFuY2UgIiAgKyBpbnN0TmFtZSArICIgZmluaXNoZWQuLi4iKTsKLQkgICAgVGhyZWFkLnNsZWVwKDMgKiAxMDAwKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciB3aGlsZSBzdGFydGluZyBpbnN0YW5jZSAiICsgaW5zdE5hbWUpOwotCX0KKyAgICB0cnkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyBzdGFydC1pbnN0YW5jZSAiICArIGluc3ROYW1lKTsKKyAgICAgICAgUHJvY2VzcyBwcm9jID0gUnVudGltZS5nZXRSdW50aW1lKCkuZXhlYyhBU0FETUlOICsgIiAgc3RhcnQtaW5zdGFuY2UgIiArIGluc3ROYW1lKTsKKyAgICAgICAgcHJvYy53YWl0Rm9yKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHJvY2VzcyBzdGFydC1pbnN0YW5jZSAiICArIGluc3ROYW1lICsgIiBmaW5pc2hlZC4uLiIpOworICAgICAgICBUaHJlYWQuc2xlZXAoMyAqIDEwMDApOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yIHdoaWxlIHN0YXJ0aW5nIGluc3RhbmNlICIgKyBpbnN0TmFtZSk7CisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiBhY2Nlc3NBcHBsaWNhdGlvbihTdHJpbmcgdXJsU3RyKSB7Ci0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwodXJsU3RyKTsKICAgICAgICAgICAgIFVSTENvbm5lY3Rpb24gdWMgPSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKLQkgICAgZm9yIChTdHJpbmcgY29va2llIDogcmVzcG9uc2VDb29raWVzKSB7CisgICAgICAgIGZvciAoU3RyaW5nIGNvb2tpZSA6IHJlc3BvbnNlQ29va2llcykgewogICAgICAgICAgICAgICAgIHVjLnNldFJlcXVlc3RQcm9wZXJ0eSgiQ29va2llIiwgY29va2llKTsKLQkgICAgfQorICAgICAgICB9CiAgICAgICAgICAgICB1Yy5jb25uZWN0KCk7CiAgICAgICAgICAgICBTZXNzaW9uU3RhdGVJbmZvIGluZm8gPSBleHRyYWN0U2Vzc2lvblN0YXRlcyh1Yyk7CiAgICAgICAgICAgICBpbmZvLnNldEFjY2Vzc0NvdW50KCsrX2FjY2Vzc0NvdW50KTsKQEAgLTE0NSw3ICsxNDUsNyBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUGFzc2VkICIgKyBzdGF0ZUluZm8pOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWxlZCAiICsgaW5mbyk7Ci0JCXJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTE2NiwxNCArMTY2LDE0IEBACiAgICAgICAgICAgICAgICAgcmVzcG9uc2VDb29raWVzLmFkZChjb29raWUpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSlVTVCBSRUFEIENPT0tJRTogIiArIGNvb2tpZSk7CiAgICAgICAgICAgICAgICAgaWYgKGNvb2tpZS5zdGFydHNXaXRoKCJKU0VTU0lPTklEPSIpKSB7Ci0JCSAgICBqc2Vzc2lvbklEQ29va2llID0gY29va2llOworICAgICAgICAgICAganNlc3Npb25JRENvb2tpZSA9IGNvb2tpZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAodG1wU2Vzc1N0YXRlLmdldEpzZXNzaW9uQ29va2llKCkgPT0gbnVsbCkgewotICAgICAgICAgICAgdG1wU2Vzc1N0YXRlLnNldEpzZXNzaW9uQ29va2llKGpzZXNzaW9uSURDb29raWUpOyAgICAKLSAgICAgICAgICAgIHJlc3BvbnNlQ29va2llcy5hZGQoanNlc3Npb25JRENvb2tpZSk7ICAgIAorICAgICAgICAgICAgdG1wU2Vzc1N0YXRlLnNldEpzZXNzaW9uQ29va2llKGpzZXNzaW9uSURDb29raWUpOworICAgICAgICAgICAgcmVzcG9uc2VDb29raWVzLmFkZChqc2Vzc2lvbklEQ29va2llKTsKICAgICAgICAgfQogCiAgICAgICAgIGludCBjb2RlID0gKChIdHRwVVJMQ29ubmVjdGlvbikgdWMpLmdldFJlc3BvbnNlQ29kZSgpOwpAQCAtMjQwLDcgKzI0MCw3IEBACiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcHJldi5nZXRIdHRwQ291bnRlcigpIDwgY3VycmVudC5nZXRIdHRwQ291bnRlcigpOwogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHByZXYuZ2V0RWpiMUNvdW50ZXIoKSA8IGN1cnJlbnQuZ2V0RWpiMUNvdW50ZXIoKTsKICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBwcmV2LmdldEVqYjJDb3VudGVyKCkgPCBjdXJyZW50LmdldEVqYjJDb3VudGVyKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbXVsdGktcmVzdGFydC9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL211bHRpLXJlc3RhcnQvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEKaW5kZXggNTBhMTE4My4uYThhZmM2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbXVsdGktcmVzdGFydC9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tdWx0aS1yZXN0YXJ0L3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAvKioKICAqIFVuaXQgdGVzdCBmb3Igc2ltcGxlIEFwcC4KICAqLwotcHVibGljIGNsYXNzIEFwcFRlc3QgCitwdWJsaWMgY2xhc3MgQXBwVGVzdAogICAgIGV4dGVuZHMgVGVzdENhc2UKIHsKICAgICAvKioKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TRlNCRHJpdmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TRlNCRHJpdmVyL2J1aWxkLnhtbAppbmRleCAzMzFjNmRlLi45NGQ0MjExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU0ZTQkRyaXZlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NGU0JEcml2ZXIvYnVpbGQueG1sCkBAIC0zMCwyNyArMzAsMjcgQEAKICAgICA8aW1wb3J0IGZpbGU9Im5icHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDwhLS0KIAotICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlIAotICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkIAotICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOiAKKyAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZQorICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkCisgICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6CiAKLSAgICAgIC1wcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgLXBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIC1wcmUtY29tcGlsZTogICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gCi0gICAgICAtcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gCisgICAgICAtcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgLXBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgLXByZS1jb21waWxlOiAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbgorICAgICAgLXBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICAtcHJlLWNvbXBpbGUtc2luZ2xlOiAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBmaWxlCiAgICAgICAtcG9zdC1jb21waWxlLXNpbmdsZTogICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIGZpbGUKICAgICAgIC1wcmUtY29tcGlsZS10ZXN0OiAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2YgSlVuaXQgdGVzdHMKICAgICAgIC1wb3N0LWNvbXBpbGUtdGVzdDogICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBKVW5pdCB0ZXN0cwogICAgICAgLXByZS1jb21waWxlLXRlc3Qtc2luZ2xlOiAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgSlVuaXQgdGVzdAogICAgICAgLXBvc3QtY29tcGlsZS10ZXN0LXNpbmdsZTogY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBKVXVuaXQgdGVzdAotICAgICAgLXByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBhcmNoaXZlIGJ1aWxkaW5nIAotICAgICAgLXBvc3QtZGlzdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGFyY2hpdmUgYnVpbGRpbmcgCi0gICAgICAtcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMgCisgICAgICAtcHJlLWRpc3Q6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGFyY2hpdmUgYnVpbGRpbmcKKyAgICAgIC1wb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBhcmNoaXZlIGJ1aWxkaW5nCisgICAgICAtcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMKICAgICAgIC1wcmUtcnVuLWRlcGxveTogICAgICAgICAgIGNhbGxlZCBiZWZvcmUgZGVwbG95aW5nCiAgICAgICAtcG9zdC1ydW4tZGVwbG95OiAgICAgICAgICBjYWxsZWQgYWZ0ZXIgZGVwbG95aW5nCiAKLSAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlIAorICAgIEV4YW1wbGUgb2YgcGx1Z2luZyBhbiBvYmZ1c2NhdG9yIGFmdGVyIHRoZSBjb21waWxhdGlvbiBjb3VsZCBsb29rIGxpa2UKIAogICAgICAgICA8dGFyZ2V0IG5hbWU9Ii1wb3N0LWNvbXBpbGUiPgogICAgICAgICAgICAgPG9iZnVzY2F0ZT4KQEAgLTU4LDIxICs1OCwyMSBAQAogICAgICAgICAgICAgPC9vYmZ1c2NhdGU+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQKKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogCiAgICAgT3RoZXIgd2F5IGhvdyB0byBjdXN0b21pemUgdGhlIGJ1aWxkIGlzIGJ5IG92ZXJyaWRpbmcgZXhpc3RpbmcgbWFpbiB0YXJnZXRzLgotICAgIFRoZSB0YXJnZXQgb2YgaW50ZXJlc3QgYXJlOiAKKyAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZToKIAogICAgICAgaW5pdC1tYWNyb2RlZi1qYXZhYzogICAgZGVmaW5lcyBtYWNybyBmb3IgamF2YWMgY29tcGlsYXRpb24KICAgICAgIGluaXQtbWFjcm9kZWYtanVuaXQ6ICAgZGVmaW5lcyBtYWNybyBmb3IganVuaXQgZXhlY3V0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWRlYnVnOiAgICBkZWZpbmVzIG1hY3JvIGZvciBjbGFzcyBkZWJ1Z2dpbmcKICAgICAgIGRvLWRpc3Q6ICAgICAgICAgICAgICAgIGFyY2hpdmUgYnVpbGRpbmcKLSAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0IAotICAgICAgamF2YWRvYy1idWlsZDogICAgICAgICAgamF2YWRvYyBnZW5lcmF0aW9uIAorICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHByb2plY3QKKyAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbgogCi0gICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgdGhlIHRhcmdldCBmb3IgcHJvamVjdCBleGVjdXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9IjxQUk9KTkFNRT4taW1wbC5qYXIiPgogICAgICAgICAgICAgPGV4ZWMgZGlyPSJiaW4iIGV4ZWN1dGFibGU9ImxhdW5jaGVyLmV4ZSI+CkBAIC04MCwxMCArODAsMTAgQEAKICAgICAgICAgICAgIDwvZXhlYz4KICAgICAgICAgPC90YXJnZXQ+CiAKLSAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uIAotICAgIGNvbXBpbGUgdGFyZ2V0IGFzIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGxpc3Qgb2YgYXZhaWxhYmxlIAotICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4gCi0gICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuIAorICAgIE5vdGljZSB0aGF0IG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gamFyIHRhcmdldCBhbmQgbm90IG9ubHkgb24KKyAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZQorICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4KKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogICAgIC0tPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NGU0JEcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NGU0JEcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCmluZGV4IDNkOTNlMTAuLmMzN2Q4NjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TRlNCRHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU0ZTQkRyaXZlci9uYnByb2plY3QvYW50LWRlcGxveS54bWwKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0iZ2Z2MyIgcHJvcGVydHk9ImdmdjMucGFzc3dvcmQuZmlsZSIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4gIDwhLS0gZG8gbm90IGZvcmdldCB0byBkZWxldGUgdGhpcyEgLS0+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkFTX0FETUlOX1BBU1NXT1JEPSR7Z2Z2My5wYXNzd29yZH0iIGZpbGU9IiR7Z2Z2My5wYXNzd29yZC5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSItcGFyc2Utc3VuLXdlYiIgZGVwZW5kcz0iLWluaXQtY2wtZGVwbG95bWVudC1lbnYiIGlmPSJzdW4ud2ViLnByZXNlbnQiPgogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJnZnYzIiBwcm9wZXJ0eT0idGVtcC5zdW4ud2ViIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2RlcGxveS5hbnQuZG9jYmFzZS5kaXJ9L1dFQi1JTkYvc3VuLXdlYi54bWwiIHRvZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9Ii8+CkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8cmVwbGFjZXZhbHVlPjwhW0NEQVRBWy0tPiA8c3VuLXdlYi1hcHBdXT48L3JlcGxhY2V2YWx1ZT4KICAgICAgICAgPC9yZXBsYWNlPgogICAgICAgICA8eG1scHJvcGVydHkgZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9IiB2YWxpZGF0ZT0iZmFsc2UiPgotICAgICAgICA8L3htbHByb3BlcnR5PiAgICAKKyAgICAgICAgPC94bWxwcm9wZXJ0eT4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke3RlbXAuc3VuLndlYn0iLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveS5hbnQuY2xpZW50LnVybCIgdmFsdWU9IiR7Z2Z2My51cmx9JHtzdW4td2ViLWFwcC5jb250ZXh0LXJvb3R9Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3kuY29udGV4dC5yb290LmFyZ3VtZW50IiB2YWx1ZT0iJmFtcDtjb250ZXh0cm9vdD0ke3N1bi13ZWItYXBwLmNvbnRleHQtcm9vdH0iLz4KQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImZ1bGwuZGVwbG95LmFudC5hcmNoaXZlIiBsb2NhdGlvbj0iJHtkZXBsb3kuYW50LmFyY2hpdmV9Ii8+CiAgICAgICAgIDxnZXQgc3JjPSIke2dmdjMuYWRtaW4udXJsfS9fX2FzYWRtaW4vZGVwbG95P3BhdGg9JHtmdWxsLmRlcGxveS5hbnQuYXJjaGl2ZX0ke2RlcGxveS5jb250ZXh0LnJvb3QuYXJndW1lbnR9JmFtcDtmb3JjZT10cnVlJmFtcDtuYW1lPSR7YW50LnByb2plY3QubmFtZX0iCiAgICAgICAgICAgICBkZXN0PSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgotICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+ICAgIAorICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSItZGVwbG95LXdpdGgtcHciIGlmPSJnZnYzLnBhc3N3b3JkIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nICR7ZGVwbG95LmFudC5hcmNoaXZlfSIvPgpAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJnZnYzIiBwcm9wZXJ0eT0iZ2Z2My5yZXN1bHRzLmZpbGUiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+ICA8IS0tIGRvIG5vdCBmb3JnZXQgdG8gZGVsZXRlIHRoaXMhIC0tPgogICAgICAgICA8Z2V0IHNyYz0iJHtnZnYzLmFkbWluLnVybH0vX19hc2FkbWluL3VuZGVwbG95P25hbWU9JHthbnQucHJvamVjdC5uYW1lfSIKICAgICAgICAgICAgIGRlc3Q9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+Ci0gICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4gICAgCisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9Ii11bmRlcGxveS13aXRoLXB3IiBpZj0iZ2Z2My5wYXNzd29yZCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlVuZGVwbG95aW5nICR7ZGVwbG95LmFudC5hcmNoaXZlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NGU0JEcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NGU0JEcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCmluZGV4IDA0ZTJiZDguLjYzY2U0MzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TRlNCRHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU0ZTQkRyaXZlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKQEAgLTQ3Nyw5ICs0NzcsOSBAQAogICAgIDx0YXJnZXQgbmFtZT0iLWluaXQtdGFza2RlZnMiPgogICAgICAgICA8ZmFpbCB1bmxlc3M9ImxpYnMuQ29weUxpYnMuY2xhc3NwYXRoIj4KIFRoZSBsaWJzLkNvcHlMaWJzLmNsYXNzcGF0aCBwcm9wZXJ0eSBpcyBub3Qgc2V0IHVwLgotVGhpcyBwcm9wZXJ0eSBtdXN0IHBvaW50IHRvIAorVGhpcyBwcm9wZXJ0eSBtdXN0IHBvaW50IHRvCiBvcmctbmV0YmVhbnMtbW9kdWxlcy1qYXZhLWoyc2Vwcm9qZWN0LWNvcHlsaWJzdGFzay5qYXIgZmlsZSB3aGljaCBpcyBwYXJ0Ci1vZiBOZXRCZWFucyBJREUgaW5zdGFsbGF0aW9uIGFuZCBpcyB1c3VhbGx5IGxvY2F0ZWQgYXQgCitvZiBOZXRCZWFucyBJREUgaW5zdGFsbGF0aW9uIGFuZCBpcyB1c3VhbGx5IGxvY2F0ZWQgYXQKICZsdDtuZXRiZWFuc19pbnN0YWxsYXRpb24mZ3Q7L2phdmEmbHQ7dmVyc2lvbiZndDsvYW50L2V4dHJhIGZvbGRlci4KIEVpdGhlciBvcGVuIHRoZSBwcm9qZWN0IGluIHRoZSBJREUgYW5kIG1ha2Ugc3VyZSBDb3B5TGlicyBsaWJyYXJ5CiBleGlzdHMgb3Igc2V0dXAgdGhlIHByb3BlcnR5IG1hbnVhbGx5LiBGb3IgZXhhbXBsZSBsaWtlIHRoaXM6CkBAIC04NjMsNyArODYzLDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsamF2YWRvYy1idWlsZCxqYXZhZG9jLWJyb3dzZSIgZGVzY3JpcHRpb249IkJ1aWxkIEphdmFkb2MuIiBuYW1lPSJqYXZhZG9jIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgQ09NUElMQVRJT04gU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItcHJlLXByZS1jb21waWxlLXRlc3QiPgpAQCAtOTAyLDcgKzkwMiw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUsLXByZS1wcmUtY29tcGlsZS10ZXN0LC1wcmUtY29tcGlsZS10ZXN0LXNpbmdsZSwtZG8tY29tcGlsZS10ZXN0LXNpbmdsZSwtcG9zdC1jb21waWxlLXRlc3Qtc2luZ2xlIiBuYW1lPSJjb21waWxlLXRlc3Qtc2luZ2xlIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgRVhFQ1VUSU9OIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1wcmUtdGVzdC1ydW4iPgpAQCAtOTI5LDcgKzkyOSw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUtdGVzdC1zaW5nbGUsLXByZS10ZXN0LXJ1bi1zaW5nbGUsLWRvLXRlc3QtcnVuLXNpbmdsZSwtcG9zdC10ZXN0LXJ1bi1zaW5nbGUiIGRlc2NyaXB0aW9uPSJSdW4gc2luZ2xlIHVuaXQgdGVzdC4iIG5hbWU9InRlc3Qtc2luZ2xlIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgREVCVUdHSU5HIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlLXRlc3QiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItZGVidWctc3RhcnQtZGVidWdnZWUtdGVzdCI+CkBAIC05NTUsNyArOTU1LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsLXByZS1kZWJ1Zy1maXgsLWRvLWRlYnVnLWZpeC10ZXN0IiBpZj0ibmV0YmVhbnMuaG9tZSIgbmFtZT0iZGVidWctZml4LXRlc3QiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBDTEVBTlVQIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCIgaWY9Im5vLmRpc3QuZWFyLmRpciIgbmFtZT0iZGVwcy1jbGVhbiIgdW5sZXNzPSJuby5kZXBzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU0ZTQkRyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TRlNCRHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCmluZGV4IGU0NzY1N2IuLjYxNzA5NjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TRlNCRHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TRlNCRHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCkBAIC0zOCw4ICszOCw4IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBTRlNCRHJpdmVyU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAotICAgCi0gICAgLyoqIAorCisgICAgLyoqCiAgICAgICogUHJvY2Vzc2VzIHJlcXVlc3RzIGZvciBib3RoIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBhbmQgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kcy4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwotICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0PC90aXRsZT4iKTsgIAorICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0PC90aXRsZT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPlNlcnZsZXQgU0ZTQkRyaXZlclNlcnZsZXQgYXQgIiArIHJlcXVlc3QuZ2V0Q29udGV4dFBhdGggKCkgKyAiPC9oMT4iKTsKQEAgLTc2LDEzICs3NiwxMyBAQAogCiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5Gcm9tIHNlc3Npb24gU0ZTQlsxXSBOT1QgTlVMTCA/OiAiICsgKCIiICsgKHNmc2IxICE9IG51bGwpKSArICIgPC9oMT4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPkZyb20gc2Vzc2lvbiBTRlNCWzJdIE5PVCBOVUxMPyA6ICIgKyAoIiIgKyAoc2ZzYjIgIT0gbnVsbCkpICsgIiA8L2gxPiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChzZnNiMSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKICAgICAgICAgICAgICAgICBzZnNiMSA9IChTaW1wbGVTZXNzaW9uQmVhbikgY3R4Lmxvb2t1cCgiamF2YTpnbG9iYWwvU0ZTQkRyaXZlci9TaW1wbGVTZXNzaW9uQmVhbiIpOwogICAgICAgICAgICAgICAgIHNmc2IyID0gKFNpbXBsZVNlc3Npb25CZWFuKSBjdHgubG9va3VwKCJqYXZhOmdsb2JhbC9TRlNCRHJpdmVyL1NpbXBsZVNlc3Npb25CZWFuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPkNyZWF0ZWQgU0ZTQlsxXTogIiArIHNmc2IxLmFzU3RyaW5nKCkgKyAiIDwvaDE+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5DcmVhdGVkIFNGU0JbMl06ICIgKyBzZnNiMi5hc1N0cmluZygpICsgIiA8L2gxPiIpOwogCkBAIC0xMTAsMTMgKzExMCwxMyBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaHRtbD4iKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIG5tRXgpIHsKICAgICAgICAgICAgIG5tRXgucHJpbnRTdGFja1RyYWNlKG91dCk7Ci0gICAgICAgIH0gZmluYWxseSB7IAorICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgICAgIH0KLSAgICB9IAorICAgIH0KIAogICAgIC8vIDxlZGl0b3ItZm9sZCBkZWZhdWx0c3RhdGU9ImNvbGxhcHNlZCIgZGVzYz0iSHR0cFNlcnZsZXQgbWV0aG9kcy4gQ2xpY2sgb24gdGhlICsgc2lnbiBvbiB0aGUgbGVmdCB0byBlZGl0IHRoZSBjb2RlLiI+Ci0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTEyNyw5ICsxMjcsOSBAQAogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICB9IAorICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtMTQyLDcgKzE0Miw3IEBACiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogUmV0dXJucyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2bGV0LgogICAgICAqIEByZXR1cm4gYSBTdHJpbmcgY29udGFpbmluZyBzZXJ2bGV0IGRlc2NyaXB0aW9uCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU2ltcGxlU0ZTQkRyaXZlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU2ltcGxlU0ZTQkRyaXZlci9idWlsZC54bWwKaW5kZXggNTcwYzcxMi4uZDVlMmJmYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NpbXBsZVNGU0JEcml2ZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TaW1wbGVTRlNCRHJpdmVyL2J1aWxkLnhtbApAQCAtMzAsMjcgKzMwLDI3IEBACiAgICAgPGltcG9ydCBmaWxlPSJuYnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8IS0tCiAKLSAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZSAKLSAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZCAKLSAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZTogCisgICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUKKyAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZAorICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOgogCi0gICAgICAtcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIC1wb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMgCi0gICAgICAtcHJlLWNvbXBpbGU6ICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIAotICAgICAgLXBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIAorICAgICAgLXByZS1pbml0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIC1wb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIC1wcmUtY29tcGlsZTogICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24KKyAgICAgIC1wb3N0LWNvbXBpbGU6ICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbgogICAgICAgLXByZS1jb21waWxlLXNpbmdsZTogICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgZmlsZQogICAgICAgLXBvc3QtY29tcGlsZS1zaW5nbGU6ICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBmaWxlCiAgICAgICAtcHJlLWNvbXBpbGUtdGVzdDogICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIEpVbml0IHRlc3RzCiAgICAgICAtcG9zdC1jb21waWxlLXRlc3Q6ICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2YgSlVuaXQgdGVzdHMKICAgICAgIC1wcmUtY29tcGlsZS10ZXN0LXNpbmdsZTogIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIEpVbml0IHRlc3QKICAgICAgIC1wb3N0LWNvbXBpbGUtdGVzdC1zaW5nbGU6IGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgSlV1bml0IHRlc3QKLSAgICAgIC1wcmUtZGlzdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgYXJjaGl2ZSBidWlsZGluZyAKLSAgICAgIC1wb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBhcmNoaXZlIGJ1aWxkaW5nIAotICAgICAgLXBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzIAorICAgICAgLXByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBhcmNoaXZlIGJ1aWxkaW5nCisgICAgICAtcG9zdC1kaXN0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgYXJjaGl2ZSBidWlsZGluZworICAgICAgLXBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzCiAgICAgICAtcHJlLXJ1bi1kZXBsb3k6ICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGRlcGxveWluZwogICAgICAgLXBvc3QtcnVuLWRlcGxveTogICAgICAgICAgY2FsbGVkIGFmdGVyIGRlcGxveWluZwogCi0gICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSItcG9zdC1jb21waWxlIj4KICAgICAgICAgICAgIDxvYmZ1c2NhdGU+CkBAIC01OCwyMSArNTgsMjEgQEAKICAgICAgICAgICAgIDwvb2JmdXNjYXRlPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZCAKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKIAogICAgIE90aGVyIHdheSBob3cgdG8gY3VzdG9taXplIHRoZSBidWlsZCBpcyBieSBvdmVycmlkaW5nIGV4aXN0aW5nIG1haW4gdGFyZ2V0cy4KLSAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZTogCisgICAgVGhlIHRhcmdldCBvZiBpbnRlcmVzdCBhcmU6CiAKICAgICAgIGluaXQtbWFjcm9kZWYtamF2YWM6ICAgIGRlZmluZXMgbWFjcm8gZm9yIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWp1bml0OiAgIGRlZmluZXMgbWFjcm8gZm9yIGp1bml0IGV4ZWN1dGlvbgogICAgICAgaW5pdC1tYWNyb2RlZi1kZWJ1ZzogICAgZGVmaW5lcyBtYWNybyBmb3IgY2xhc3MgZGVidWdnaW5nCiAgICAgICBkby1kaXN0OiAgICAgICAgICAgICAgICBhcmNoaXZlIGJ1aWxkaW5nCi0gICAgICBydW46ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdCAKLSAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbiAKKyAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0CisgICAgICBqYXZhZG9jLWJ1aWxkOiAgICAgICAgICBqYXZhZG9jIGdlbmVyYXRpb24KIAotICAgIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgdGFyZ2V0IGZvciBwcm9qZWN0IGV4ZWN1dGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSI8UFJPSk5BTUU+LWltcGwuamFyIj4KICAgICAgICAgICAgIDxleGVjIGRpcj0iYmluIiBleGVjdXRhYmxlPSJsYXVuY2hlci5leGUiPgpAQCAtODAsMTAgKzgwLDEwIEBACiAgICAgICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgTm90aWNlIHRoYXQgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbiAKLSAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZSAKLSAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uCisgICAgY29tcGlsZSB0YXJnZXQgYXMgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgbGlzdCBvZiBhdmFpbGFibGUKKyAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKICAgICAtLT4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TaW1wbGVTRlNCRHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TaW1wbGVTRlNCRHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbAppbmRleCAzZDkzZTEwLi5jMzdkODYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU2ltcGxlU0ZTQkRyaXZlci9uYnByb2plY3QvYW50LWRlcGxveS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NpbXBsZVNGU0JEcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9ImdmdjMiIHByb3BlcnR5PSJnZnYzLnBhc3N3b3JkLmZpbGUiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+ICA8IS0tIGRvIG5vdCBmb3JnZXQgdG8gZGVsZXRlIHRoaXMhIC0tPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJBU19BRE1JTl9QQVNTV09SRD0ke2dmdjMucGFzc3dvcmR9IiBmaWxlPSIke2dmdjMucGFzc3dvcmQuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iLXBhcnNlLXN1bi13ZWIiIGRlcGVuZHM9Ii1pbml0LWNsLWRlcGxveW1lbnQtZW52IiBpZj0ic3VuLndlYi5wcmVzZW50Ij4KICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0iZ2Z2MyIgcHJvcGVydHk9InRlbXAuc3VuLndlYiIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHtkZXBsb3kuYW50LmRvY2Jhc2UuZGlyfS9XRUItSU5GL3N1bi13ZWIueG1sIiB0b2ZpbGU9IiR7dGVtcC5zdW4ud2VifSIvPgpAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPHJlcGxhY2V2YWx1ZT48IVtDREFUQVstLT4gPHN1bi13ZWItYXBwXV0+PC9yZXBsYWNldmFsdWU+CiAgICAgICAgIDwvcmVwbGFjZT4KICAgICAgICAgPHhtbHByb3BlcnR5IGZpbGU9IiR7dGVtcC5zdW4ud2VifSIgdmFsaWRhdGU9ImZhbHNlIj4KLSAgICAgICAgPC94bWxwcm9wZXJ0eT4gICAgCisgICAgICAgIDwveG1scHJvcGVydHk+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3kuYW50LmNsaWVudC51cmwiIHZhbHVlPSIke2dmdjMudXJsfSR7c3VuLXdlYi1hcHAuY29udGV4dC1yb290fSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95LmNvbnRleHQucm9vdC5hcmd1bWVudCIgdmFsdWU9IiZhbXA7Y29udGV4dHJvb3Q9JHtzdW4td2ViLWFwcC5jb250ZXh0LXJvb3R9Ii8+CkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmdWxsLmRlcGxveS5hbnQuYXJjaGl2ZSIgbG9jYXRpb249IiR7ZGVwbG95LmFudC5hcmNoaXZlfSIvPgogICAgICAgICA8Z2V0IHNyYz0iJHtnZnYzLmFkbWluLnVybH0vX19hc2FkbWluL2RlcGxveT9wYXRoPSR7ZnVsbC5kZXBsb3kuYW50LmFyY2hpdmV9JHtkZXBsb3kuY29udGV4dC5yb290LmFyZ3VtZW50fSZhbXA7Zm9yY2U9dHJ1ZSZhbXA7bmFtZT0ke2FudC5wcm9qZWN0Lm5hbWV9IgogICAgICAgICAgICAgZGVzdD0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KLSAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPiAgICAKKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iLWRlcGxveS13aXRoLXB3IiBpZj0iZ2Z2My5wYXNzd29yZCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke2RlcGxveS5hbnQuYXJjaGl2ZX0iLz4KQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0iZ2Z2MyIgcHJvcGVydHk9ImdmdjMucmVzdWx0cy5maWxlIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPiAgPCEtLSBkbyBub3QgZm9yZ2V0IHRvIGRlbGV0ZSB0aGlzISAtLT4KICAgICAgICAgPGdldCBzcmM9IiR7Z2Z2My5hZG1pbi51cmx9L19fYXNhZG1pbi91bmRlcGxveT9uYW1lPSR7YW50LnByb2plY3QubmFtZX0iCiAgICAgICAgICAgICBkZXN0PSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgotICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+ICAgIAorICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSItdW5kZXBsb3ktd2l0aC1wdyIgaWY9ImdmdjMucGFzc3dvcmQiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJVbmRlcGxveWluZyAke2RlcGxveS5hbnQuYXJjaGl2ZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TaW1wbGVTRlNCRHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TaW1wbGVTRlNCRHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbAppbmRleCAxOGM1N2Q4Li5jY2JlNjA0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU2ltcGxlU0ZTQkRyaXZlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NpbXBsZVNGU0JEcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCkBAIC00NzcsOSArNDc3LDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9Ii1pbml0LXRhc2tkZWZzIj4KICAgICAgICAgPGZhaWwgdW5sZXNzPSJsaWJzLkNvcHlMaWJzLmNsYXNzcGF0aCI+CiBUaGUgbGlicy5Db3B5TGlicy5jbGFzc3BhdGggcHJvcGVydHkgaXMgbm90IHNldCB1cC4KLVRoaXMgcHJvcGVydHkgbXVzdCBwb2ludCB0byAKK1RoaXMgcHJvcGVydHkgbXVzdCBwb2ludCB0bwogb3JnLW5ldGJlYW5zLW1vZHVsZXMtamF2YS1qMnNlcHJvamVjdC1jb3B5bGlic3Rhc2suamFyIGZpbGUgd2hpY2ggaXMgcGFydAotb2YgTmV0QmVhbnMgSURFIGluc3RhbGxhdGlvbiBhbmQgaXMgdXN1YWxseSBsb2NhdGVkIGF0IAorb2YgTmV0QmVhbnMgSURFIGluc3RhbGxhdGlvbiBhbmQgaXMgdXN1YWxseSBsb2NhdGVkIGF0CiAmbHQ7bmV0YmVhbnNfaW5zdGFsbGF0aW9uJmd0Oy9qYXZhJmx0O3ZlcnNpb24mZ3Q7L2FudC9leHRyYSBmb2xkZXIuCiBFaXRoZXIgb3BlbiB0aGUgcHJvamVjdCBpbiB0aGUgSURFIGFuZCBtYWtlIHN1cmUgQ29weUxpYnMgbGlicmFyeQogZXhpc3RzIG9yIHNldHVwIHRoZSBwcm9wZXJ0eSBtYW51YWxseS4gRm9yIGV4YW1wbGUgbGlrZSB0aGlzOgpAQCAtODYzLDcgKzg2Myw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGphdmFkb2MtYnVpbGQsamF2YWRvYy1icm93c2UiIGRlc2NyaXB0aW9uPSJCdWlsZCBKYXZhZG9jLiIgbmFtZT0iamF2YWRvYyIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEpVTklUIENPTVBJTEFUSU9OIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlIiBpZj0iaGF2ZS50ZXN0cyIgbmFtZT0iLXByZS1wcmUtY29tcGlsZS10ZXN0Ij4KQEAgLTkwMiw3ICs5MDIsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlLC1wcmUtcHJlLWNvbXBpbGUtdGVzdCwtcHJlLWNvbXBpbGUtdGVzdC1zaW5nbGUsLWRvLWNvbXBpbGUtdGVzdC1zaW5nbGUsLXBvc3QtY29tcGlsZS10ZXN0LXNpbmdsZSIgbmFtZT0iY29tcGlsZS10ZXN0LXNpbmdsZSIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEpVTklUIEVYRUNVVElPTiBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItcHJlLXRlc3QtcnVuIj4KQEAgLTkyOSw3ICs5MjksNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlLXRlc3Qtc2luZ2xlLC1wcmUtdGVzdC1ydW4tc2luZ2xlLC1kby10ZXN0LXJ1bi1zaW5nbGUsLXBvc3QtdGVzdC1ydW4tc2luZ2xlIiBkZXNjcmlwdGlvbj0iUnVuIHNpbmdsZSB1bml0IHRlc3QuIiBuYW1lPSJ0ZXN0LXNpbmdsZSIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEpVTklUIERFQlVHR0lORyBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZS10ZXN0IiBpZj0iaGF2ZS50ZXN0cyIgbmFtZT0iLWRlYnVnLXN0YXJ0LWRlYnVnZ2VlLXRlc3QiPgpAQCAtOTU1LDcgKzk1NSw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LC1wcmUtZGVidWctZml4LC1kby1kZWJ1Zy1maXgtdGVzdCIgaWY9Im5ldGJlYW5zLmhvbWUiIG5hbWU9ImRlYnVnLWZpeC10ZXN0Ii8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgQ0xFQU5VUCBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQiIGlmPSJuby5kaXN0LmVhci5kaXIiIG5hbWU9ImRlcHMtY2xlYW4iIHVubGVzcz0ibm8uZGVwcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NpbXBsZVNGU0JEcml2ZXIvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NpbXBsZVNGU0JEcml2ZXJTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU2ltcGxlU0ZTQkRyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU2ltcGxlU0ZTQkRyaXZlclNlcnZsZXQuamF2YQppbmRleCA0YTUyOWE0Li41MzM0YzEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU2ltcGxlU0ZTQkRyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU2ltcGxlU0ZTQkRyaXZlclNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU2ltcGxlU0ZTQkRyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU2ltcGxlU0ZTQkRyaXZlclNlcnZsZXQuamF2YQpAQCAtMzgsOCArMzgsOCBAQAogICovCiBwdWJsaWMgY2xhc3MgU2ltcGxlU0ZTQkRyaXZlclNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKLSAgIAotICAgIC8qKiAKKworICAgIC8qKgogICAgICAqIFByb2Nlc3NlcyByZXF1ZXN0cyBmb3IgYm90aCBIVFRQIDxjb2RlPkdFVDwvY29kZT4gYW5kIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZHMuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+U2VydmxldCBTRlNCRHJpdmVyU2VydmxldDwvdGl0bGU+Iik7ICAKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+U2VydmxldCBTRlNCRHJpdmVyU2VydmxldDwvdGl0bGU+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0IGF0ICIgKyByZXF1ZXN0LmdldENvbnRleHRQYXRoICgpICsgIjwvaDE+Iik7CkBAIC03NiwxMyArNzYsMTMgQEAKIAogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+RnJvbSBzZXNzaW9uIFNGU0JbMV0gTk9UIE5VTEwgPzogIiArICgiIiArIChzZnNiMSAhPSBudWxsKSkgKyAiIDwvaDE+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5Gcm9tIHNlc3Npb24gU0ZTQlsyXSBOT1QgTlVMTD8gOiAiICsgKCIiICsgKHNmc2IyICE9IG51bGwpKSArICIgPC9oMT4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoc2ZzYjEgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCiAgICAgICAgICAgICAgICAgc2ZzYjEgPSAoU2ltcGxlU2Vzc2lvbkJlYW4pIGN0eC5sb29rdXAoImphdmE6Z2xvYmFsL1NpbXBsZVNGU0JEcml2ZXIvU2ltcGxlU2Vzc2lvbkJlYW4iKTsKICAgICAgICAgICAgICAgICBzZnNiMiA9IChTaW1wbGVTaG9wcGluZ0NhcnRCZWFuKSBjdHgubG9va3VwKCJqYXZhOmdsb2JhbC9TaW1wbGVTRlNCRHJpdmVyL1NpbXBsZVNob3BwaW5nQ2FydEJlYW4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+Q3JlYXRlZCBTRlNCWzFdOiAiICsgc2ZzYjEuYXNTdHJpbmcoKSArICIgPC9oMT4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPkNyZWF0ZWQgU0ZTQlsyXTogIiArIHNmc2IyLmFzU3RyaW5nKCkgKyAiIDwvaDE+Iik7CiAKQEAgLTExMCwxMyArMTEwLDEzIEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9odG1sPiIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gbm1FeCkgewogICAgICAgICAgICAgbm1FeC5wcmludFN0YWNrVHJhY2Uob3V0KTsKLSAgICAgICAgfSBmaW5hbGx5IHsgCisgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKICAgICAgICAgfQotICAgIH0gCisgICAgfQogCiAgICAgLy8gPGVkaXRvci1mb2xkIGRlZmF1bHRzdGF0ZT0iY29sbGFwc2VkIiBkZXNjPSJIdHRwU2VydmxldCBtZXRob2RzLiBDbGljayBvbiB0aGUgKyBzaWduIG9uIHRoZSBsZWZ0IHRvIGVkaXQgdGhlIGNvZGUuIj4KLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtMTI3LDkgKzEyNyw5IEBACiAgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwotICAgIH0gCisgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC0xNDIsNyArMTQyLDcgQEAKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBSZXR1cm5zIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIHNlcnZsZXQuCiAgICAgICogQHJldHVybiBhIFN0cmluZyBjb250YWluaW5nIHNlcnZsZXQgZGVzY3JpcHRpb24KICAgICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YQppbmRleCBiYjIxYTZmLi4xZGYzZDNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvc3JjL21haW4vamF2YS9jb20vYWNtZS9IdHRwQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhCkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgZm9yIHRoZSAiICsgaSArICIgdGltZS4uLi4iKTsKICAgICAgICAgICAgICAgICB1ID0gbmV3IFVSTCh1cmwpOwogICAgICAgICAgICAgICAgIHVjID0gdS5vcGVuQ29ubmVjdGlvbigpOwotCQlmb3IgKFN0cmluZyBjb29raWUgOiByZXNwb25zZUNvb2tpZXMpIHsKLSAgICAgICAgICAgICAgICAJdWMuc2V0UmVxdWVzdFByb3BlcnR5KCJDb29raWUiLCBjb29raWUpOworICAgICAgICBmb3IgKFN0cmluZyBjb29raWUgOiByZXNwb25zZUNvb2tpZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgdWMuc2V0UmVxdWVzdFByb3BlcnR5KCJDb29raWUiLCBjb29raWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT5TZXR0aW5nIENvb2tpZTogIiArIGNvb2tpZSk7Ci0JCX0KKyAgICAgICAgfQogICAgICAgICAgICAgICAgIHVjLmNvbm5lY3QoKTsKICAgICAgICAgICAgICAgICBTZXNzaW9uU3RhdGVJbmZvIGluZm8gPSBleHRyYWN0U2Vzc2lvblN0YXRlcyh1Yyk7CiAgICAgICAgICAgICAgICAgaW5mby5zZXRBY2Nlc3NDb3VudCgyK2kpOwpAQCAtMTA1LDEwICsxMDUsMTAgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgZm9yIHRoZSAiICsgaSArICIgdGltZS4uLi4iKTsKICAgICAgICAgICAgICAgICB1ID0gbmV3IFVSTCh1cmwpOwogICAgICAgICAgICAgICAgIHVjID0gdS5vcGVuQ29ubmVjdGlvbigpOwotCQlmb3IgKFN0cmluZyBjb29raWUgOiByZXNwb25zZUNvb2tpZXMpIHsKLSAgICAgICAgICAgICAgICAJdWMuc2V0UmVxdWVzdFByb3BlcnR5KCJDb29raWUiLCBjb29raWUpOworICAgICAgICBmb3IgKFN0cmluZyBjb29raWUgOiByZXNwb25zZUNvb2tpZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgdWMuc2V0UmVxdWVzdFByb3BlcnR5KCJDb29raWUiLCBjb29raWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT5TZXR0aW5nIENvb2tpZTogIiArIGNvb2tpZSk7Ci0JCX0KKyAgICAgICAgfQogICAgICAgICAgICAgICAgIHVjLmNvbm5lY3QoKTsKICAgICAgICAgICAgICAgICBTZXNzaW9uU3RhdGVJbmZvIGluZm8gPSBleHRyYWN0U2Vzc2lvblN0YXRlcyh1Yyk7CiAgICAgICAgICAgICAgICAgaW5mby5zZXRBY2Nlc3NDb3VudCg1K2kpOwpAQCAtMTIxLDcgKzEyMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmFpbGVkICIgKyBpbmZvKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogLyoKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzdGFydGluZyBpbnN0MS4uLiIpOwogICAgICAgICAgICAgcHJvYyA9IFJ1bnRpbWUuZ2V0UnVudGltZSgpLmV4ZWMoQVNBRE1JTiArICIgIHN0YXJ0LWluc3RhbmNlIGluc3QxIik7CkBAIC0xNDYsMTQgKzE0NiwxNCBAQAogICAgICAgICAgICAgICAgIHJlc3BvbnNlQ29va2llcy5hZGQoY29va2llKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpVU1QgUkVBRCBDT09LSUU6ICIgKyBjb29raWUpOwogICAgICAgICAgICAgICAgIGlmIChjb29raWUuc3RhcnRzV2l0aCgiSlNFU1NJT05JRD0iKSkgewotCQkgICAganNlc3Npb25JRENvb2tpZSA9IGNvb2tpZTsKKyAgICAgICAgICAgIGpzZXNzaW9uSURDb29raWUgPSBjb29raWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKHRtcFNlc3NTdGF0ZS5nZXRKc2Vzc2lvbkNvb2tpZSgpID09IG51bGwpIHsKLSAgICAgICAgICAgIHRtcFNlc3NTdGF0ZS5zZXRKc2Vzc2lvbkNvb2tpZShqc2Vzc2lvbklEQ29va2llKTsgICAgCi0gICAgICAgICAgICByZXNwb25zZUNvb2tpZXMuYWRkKGpzZXNzaW9uSURDb29raWUpOyAgICAKKyAgICAgICAgICAgIHRtcFNlc3NTdGF0ZS5zZXRKc2Vzc2lvbkNvb2tpZShqc2Vzc2lvbklEQ29va2llKTsKKyAgICAgICAgICAgIHJlc3BvbnNlQ29va2llcy5hZGQoanNlc3Npb25JRENvb2tpZSk7CiAgICAgICAgIH0KICAgICAgICAgaW50IGNvZGUgPSAoKEh0dHBVUkxDb25uZWN0aW9uKSB1YykuZ2V0UmVzcG9uc2VDb2RlKCk7CiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gdWMuZ2V0SW5wdXRTdHJlYW0oKTsKQEAgLTIyMCw3ICsyMjAsNyBAQAogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHByZXYuZ2V0SHR0cENvdW50ZXIoKSA8IGN1cnJlbnQuZ2V0SHR0cENvdW50ZXIoKTsKICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBwcmV2LmdldEVqYjFDb3VudGVyKCkgPCBjdXJyZW50LmdldEVqYjFDb3VudGVyKCk7CiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcHJldi5nZXRFamIyQ291bnRlcigpIDwgY3VycmVudC5nZXRFamIyQ291bnRlcigpOwotICAgICAgICAgICAgCisKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YQppbmRleCA1MGExMTgzLi5hOGFmYzY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAvKioKICAqIFVuaXQgdGVzdCBmb3Igc2ltcGxlIEFwcC4KICAqLwotcHVibGljIGNsYXNzIEFwcFRlc3QgCitwdWJsaWMgY2xhc3MgQXBwVGVzdAogICAgIGV4dGVuZHMgVGVzdENhc2UKIHsKICAgICAvKioKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L2J1aWxkLnhtbAppbmRleCA1ZTNmMzE1Li5lNjQ0OGRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvYnVpbGQueG1sCkBAIC00Nyw5ICs0Nyw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lZSB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWUgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L211bHRpL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzU4ZGZiOC4uZjE4YWU4MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lZS1tZXRob2RjaGVja3BvaW50LW11bHRpIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9idWlsZC54bWwKaW5kZXggNGM1NmZhMC4uMmNjMTBjZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L211bHRpL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywgKiovKlNGU0IqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtNjksNyArNjksNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgLS0+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8IS0tCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgpAQCAtODEsMTcgKzgxLDE3IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L211bHRpL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L211bHRpL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBiZDFlNGVmLi4xZTRiMTFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSU5DUkVNRU5UX1ZBTCA9IDYwMDAwOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgU0ZTQkhvbWUgaG9tZTsKQEAgLTQ0LDIwICs0NCwyMCBAQAogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW211bHRpQ2xpZW50XSBET05FIGRvVGVzdCgpLi4uIik7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJtdWx0aSIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIGNyZWF0ZVNGU0IoKTsgICAgIC8vY3JlYXRlIFNGU0JzIAorICAgICAgICBjcmVhdGVTRlNCKCk7ICAgICAvL2NyZWF0ZSBTRlNCcwogICAgICAgICBpbml0aWFsU3RhdGVUZXN0KCk7ICAgICAgIC8vYWNjZXNzIHRoZSBTRkJTCi0Jbm9uVHhOb25DaGVja3BvaW50VGVzdCgpOwotCW5vblR4Q2hlY2twb2ludFRlc3QoKTsKKyAgICBub25UeE5vbkNoZWNrcG9pbnRUZXN0KCk7CisgICAgbm9uVHhDaGVja3BvaW50VGVzdCgpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBjcmVhdGVTRlNCKCkgewotCVN0cmluZyB0ZXN0Q2FzZU5hbWUgPSAiZWUubXVsdGlDbGllbnQgY3JlYXRlU0ZTQiAiOworICAgIFN0cmluZyB0ZXN0Q2FzZU5hbWUgPSAiZWUubXVsdGlDbGllbnQgY3JlYXRlU0ZTQiAiOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU0ZTQkhvbWUiKTsKQEAgLTY1LDkyICs2NSw5MiBAQAogICAgICAgICAgICAgICAgIChvYmpyZWYsIFNGU0JIb21lLmNsYXNzKTsKICAgICAgICAgICAgIHNmc2IgPSAoU0ZTQikgaG9tZS5jcmVhdGUoYWNjb3VudE5hbWUsIDQwMDApOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbbXVsdGldIEluaXRhbGl6YXRpb24gZG9uZSIpOwotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0Q2FzZU5hbWUsIHN0YXQuUEFTUyk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RDYXNlTmFtZSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIC8vc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBsb2NhbEVudGl0eUdldEVKQk9iamVjdCgtKSIgLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbbXVsdGlDbGllbnRdIEV4Y2VwdGlvbiBpbiBpbml0Li4uLiIpOwogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdENhc2VOYW1lLCBzdGF0LkZBSUwpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0Q2FzZU5hbWUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBpbml0aWFsU3RhdGVUZXN0KCkgewotCVN0cmluZyB0ZXN0Q2FzZU5hbWUgPSAiZWUubXVsdGlDbGllbnQgaW5pdGlhbFN0YXRlVGVzdCAiOworICAgIFN0cmluZyB0ZXN0Q2FzZU5hbWUgPSAiZWUubXVsdGlDbGllbnQgaW5pdGlhbFN0YXRlVGVzdCAiOwogICAgICAgICB0cnkgewotCSAgICBib29sZWFuIG5hbWVPSyA9IHRydWU7Ci0JICAgIG5hbWVPSyA9IGFjY291bnROYW1lLmVxdWFscyhzZnNiLmdldEFjY291bnRIb2xkZXJOYW1lKCkpOwotCSAgICBpbnQgcHJlQmFsYW5jZSA9IHNmc2IuZ2V0QmFsYW5jZSgpOwotCSAgICBpbnQgcHJlQ2hlY2twb2ludGVkQmFsYW5jZSA9IHNmc2IuZ2V0Q2hlY2twb2ludGVkQmFsYW5jZSgpOwotCSAgICBib29sZWFuIGJhbGFuY2VPSyA9IChwcmVCYWxhbmNlICE9IHByZUNoZWNrcG9pbnRlZEJhbGFuY2UpOwotCSAgICBpZiAoIWJhbGFuY2VPSykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4odGVzdENhc2VOYW1lICsgIiBmYWlsaW5nIGJlY2F1c2U6ICIKLQkJCSsgcHJlQmFsYW5jZSArICIgPT0gIiArIHByZUNoZWNrcG9pbnRlZEJhbGFuY2UKLQkJCSsgIiBmYWlsZWQiKTsKLQkgICAgfQotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0Q2FzZU5hbWUsCi0JCSAgICAoKG5hbWVPSyAmJiBiYWxhbmNlT0spID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CisgICAgICAgIGJvb2xlYW4gbmFtZU9LID0gdHJ1ZTsKKyAgICAgICAgbmFtZU9LID0gYWNjb3VudE5hbWUuZXF1YWxzKHNmc2IuZ2V0QWNjb3VudEhvbGRlck5hbWUoKSk7CisgICAgICAgIGludCBwcmVCYWxhbmNlID0gc2ZzYi5nZXRCYWxhbmNlKCk7CisgICAgICAgIGludCBwcmVDaGVja3BvaW50ZWRCYWxhbmNlID0gc2ZzYi5nZXRDaGVja3BvaW50ZWRCYWxhbmNlKCk7CisgICAgICAgIGJvb2xlYW4gYmFsYW5jZU9LID0gKHByZUJhbGFuY2UgIT0gcHJlQ2hlY2twb2ludGVkQmFsYW5jZSk7CisgICAgICAgIGlmICghYmFsYW5jZU9LKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0Q2FzZU5hbWUgKyAiIGZhaWxpbmcgYmVjYXVzZTogIgorICAgICAgICAgICAgKyBwcmVCYWxhbmNlICsgIiA9PSAiICsgcHJlQ2hlY2twb2ludGVkQmFsYW5jZQorICAgICAgICAgICAgKyAiIGZhaWxlZCIpOworICAgICAgICB9CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RDYXNlTmFtZSwKKyAgICAgICAgICAgICgobmFtZU9LICYmIGJhbGFuY2VPSykgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RDYXNlTmFtZSwgc3RhdC5GQUlMKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdENhc2VOYW1lLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgbm9uVHhOb25DaGVja3BvaW50VGVzdCgpIHsKLQlTdHJpbmcgdGVzdENhc2VOYW1lID0gImVlLm11bHRpQ2xpZW50IG5vblR4Tm9uQ2hlY2twb2ludFRlc3QgIjsKKyAgICBTdHJpbmcgdGVzdENhc2VOYW1lID0gImVlLm11bHRpQ2xpZW50IG5vblR4Tm9uQ2hlY2twb2ludFRlc3QgIjsKICAgICAgICAgdHJ5IHsKLQkgICAgaW50IHByZUJhbGFuY2UgPSBzZnNiLmdldEJhbGFuY2UoKTsKLQkgICAgaW50IHByZUNoZWNrcG9pbnRlZEJhbGFuY2UgPSBzZnNiLmdldENoZWNrcG9pbnRlZEJhbGFuY2UoKTsKLQkgICAgc2ZzYi5pbmNyZW1lbnRCYWxhbmNlKElOQ1JFTUVOVF9WQUwpOwotCSAgICBzZnNiLm5vblR4Tm9uQ2hlY2twb2ludGVkTWV0aG9kKCk7Ci0JICAgIGludCBwb3N0QmFsYW5jZSA9IHNmc2IuZ2V0QmFsYW5jZSgpOwotCSAgICBpbnQgcG9zdENoZWNrcG9pbnRlZEJhbGFuY2UgPSBzZnNiLmdldENoZWNrcG9pbnRlZEJhbGFuY2UoKTsKKyAgICAgICAgaW50IHByZUJhbGFuY2UgPSBzZnNiLmdldEJhbGFuY2UoKTsKKyAgICAgICAgaW50IHByZUNoZWNrcG9pbnRlZEJhbGFuY2UgPSBzZnNiLmdldENoZWNrcG9pbnRlZEJhbGFuY2UoKTsKKyAgICAgICAgc2ZzYi5pbmNyZW1lbnRCYWxhbmNlKElOQ1JFTUVOVF9WQUwpOworICAgICAgICBzZnNiLm5vblR4Tm9uQ2hlY2twb2ludGVkTWV0aG9kKCk7CisgICAgICAgIGludCBwb3N0QmFsYW5jZSA9IHNmc2IuZ2V0QmFsYW5jZSgpOworICAgICAgICBpbnQgcG9zdENoZWNrcG9pbnRlZEJhbGFuY2UgPSBzZnNiLmdldENoZWNrcG9pbnRlZEJhbGFuY2UoKTsKIAotCSAgICBib29sZWFuIG9rID0gKHByZUJhbGFuY2UrSU5DUkVNRU5UX1ZBTD09IHBvc3RCYWxhbmNlKQotCQkmJiAocHJlQ2hlY2twb2ludGVkQmFsYW5jZSA9PSBwb3N0Q2hlY2twb2ludGVkQmFsYW5jZSk7Ci0JICAgIGlmICghb2spIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKHRlc3RDYXNlTmFtZSArICIgZmFpbGluZyBiZWNhdXNlOiAiCi0JCSAgICArICIoIiArIHByZUJhbGFuY2UgKyAiICsgIiArIElOQ1JFTUVOVF9WQUwKLQkJICAgICsgIiA9PSAiICsgcG9zdEJhbGFuY2UgKyAiKSIKLQkJICAgICsgIiAmJiAoIiArIHByZUNoZWNrcG9pbnRlZEJhbGFuY2UgKyAiID09ICIKLQkJICAgICsgcG9zdENoZWNrcG9pbnRlZEJhbGFuY2UgKyAiKSIKLQkJICAgICsgIiBmYWlsZWQiKTsKLQkgICAgfQotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0Q2FzZU5hbWUsIChvayA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOworICAgICAgICBib29sZWFuIG9rID0gKHByZUJhbGFuY2UrSU5DUkVNRU5UX1ZBTD09IHBvc3RCYWxhbmNlKQorICAgICAgICAmJiAocHJlQ2hlY2twb2ludGVkQmFsYW5jZSA9PSBwb3N0Q2hlY2twb2ludGVkQmFsYW5jZSk7CisgICAgICAgIGlmICghb2spIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3RDYXNlTmFtZSArICIgZmFpbGluZyBiZWNhdXNlOiAiCisgICAgICAgICAgICArICIoIiArIHByZUJhbGFuY2UgKyAiICsgIiArIElOQ1JFTUVOVF9WQUwKKyAgICAgICAgICAgICsgIiA9PSAiICsgcG9zdEJhbGFuY2UgKyAiKSIKKyAgICAgICAgICAgICsgIiAmJiAoIiArIHByZUNoZWNrcG9pbnRlZEJhbGFuY2UgKyAiID09ICIKKyAgICAgICAgICAgICsgcG9zdENoZWNrcG9pbnRlZEJhbGFuY2UgKyAiKSIKKyAgICAgICAgICAgICsgIiBmYWlsZWQiKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0Q2FzZU5hbWUsIChvayA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RDYXNlTmFtZSwgc3RhdC5GQUlMKTsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RDYXNlTmFtZSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIG5vblR4Q2hlY2twb2ludFRlc3QoKSB7Ci0JU3RyaW5nIHRlc3RDYXNlTmFtZSA9ICJlZS5tdWx0aUNsaWVudCBub25UeENoZWNrcG9pbnRUZXN0ICI7CisgICAgU3RyaW5nIHRlc3RDYXNlTmFtZSA9ICJlZS5tdWx0aUNsaWVudCBub25UeENoZWNrcG9pbnRUZXN0ICI7CiAgICAgICAgIHRyeSB7Ci0JICAgIGludCBwcmVCYWxhbmNlID0gc2ZzYi5nZXRCYWxhbmNlKCk7Ci0JICAgIGludCBwcmVDaGVja3BvaW50ZWRCYWxhbmNlID0gc2ZzYi5nZXRDaGVja3BvaW50ZWRCYWxhbmNlKCk7Ci0JICAgIHNmc2IuaW5jcmVtZW50QmFsYW5jZShJTkNSRU1FTlRfVkFMKTsKLQkgICAgc2ZzYi5ub25UeENoZWNrcG9pbnRlZE1ldGhvZCgpOwotCSAgICBpbnQgcG9zdEJhbGFuY2UgPSBzZnNiLmdldEJhbGFuY2UoKTsKLQkgICAgaW50IHBvc3RDaGVja3BvaW50ZWRCYWxhbmNlID0gc2ZzYi5nZXRDaGVja3BvaW50ZWRCYWxhbmNlKCk7CisgICAgICAgIGludCBwcmVCYWxhbmNlID0gc2ZzYi5nZXRCYWxhbmNlKCk7CisgICAgICAgIGludCBwcmVDaGVja3BvaW50ZWRCYWxhbmNlID0gc2ZzYi5nZXRDaGVja3BvaW50ZWRCYWxhbmNlKCk7CisgICAgICAgIHNmc2IuaW5jcmVtZW50QmFsYW5jZShJTkNSRU1FTlRfVkFMKTsKKyAgICAgICAgc2ZzYi5ub25UeENoZWNrcG9pbnRlZE1ldGhvZCgpOworICAgICAgICBpbnQgcG9zdEJhbGFuY2UgPSBzZnNiLmdldEJhbGFuY2UoKTsKKyAgICAgICAgaW50IHBvc3RDaGVja3BvaW50ZWRCYWxhbmNlID0gc2ZzYi5nZXRDaGVja3BvaW50ZWRCYWxhbmNlKCk7CiAKLQkgICAgYm9vbGVhbiBvayA9IChwcmVCYWxhbmNlK0lOQ1JFTUVOVF9WQUwgPT0gcG9zdEJhbGFuY2UpCi0JCSYmIChwcmVDaGVja3BvaW50ZWRCYWxhbmNlICE9IHBvc3RDaGVja3BvaW50ZWRCYWxhbmNlKQotCQkmJiAocG9zdEJhbGFuY2UgPT0gcG9zdENoZWNrcG9pbnRlZEJhbGFuY2UpOwotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0Q2FzZU5hbWUsIChvayA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOworICAgICAgICBib29sZWFuIG9rID0gKHByZUJhbGFuY2UrSU5DUkVNRU5UX1ZBTCA9PSBwb3N0QmFsYW5jZSkKKyAgICAgICAgJiYgKHByZUNoZWNrcG9pbnRlZEJhbGFuY2UgIT0gcG9zdENoZWNrcG9pbnRlZEJhbGFuY2UpCisgICAgICAgICYmIChwb3N0QmFsYW5jZSA9PSBwb3N0Q2hlY2twb2ludGVkQmFsYW5jZSk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RDYXNlTmFtZSwgKG9rID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdENhc2VOYW1lLCBzdGF0LkZBSUwpOworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdENhc2VOYW1lLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHNsZWVwRm9yKGludCBzZWNvbmRzKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciAxMCBzZWNvbmRzIGJlZm9yZSBhY2Nlc3NpbmcuLi4iKTsKLQlmb3IgKGludCBpPTA7IGk8c2Vjb25kczsgaSsrKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArICgxMCAtIGkpICsgIiBzZWNvbmRzIGxlZnQuLi4iKTsKLQkgICAgdHJ5IHsKLQkJVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxKjEwMDApOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgfQotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIDEwIHNlY29uZHMgYmVmb3JlIGFjY2Vzc2luZy4uLiIpOworICAgIGZvciAoaW50IGk9MDsgaTxzZWNvbmRzOyBpKyspIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiICsgKDEwIC0gaSkgKyAiIHNlY29uZHMgbGVmdC4uLiIpOworICAgICAgICB0cnkgeworICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEqMTAwMCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICB9CisgICAgfQogICAgIH0KIAogfSAvL0NsaWVudHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L211bHRpL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IGMxMzhlZGUuLmM1NmY0YjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L211bHRpL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L211bHRpL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yMywxNCArMjMsMTQgQEAKICAgICAgPGVqYj4KICAgICAgICAgPGVqYi1uYW1lPlNGU0JFSkI8L2VqYi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmVqYi9lamJfZWVfbWV0aG9kY2hlY2twb2ludF9tdWx0aV9TRlNCPC9qbmRpLW5hbWU+Ci0JPGNoZWNrcG9pbnQtYXQtZW5kLW9mLW1ldGhvZD4KLQkgICAgPG1ldGhvZD4KLQkJPG1ldGhvZC1uYW1lPm5vblR4Q2hlY2twb2ludGVkTWV0aG9kPC9tZXRob2QtbmFtZT4KLQkgICAgPC9tZXRob2Q+Ci0JICAgIDxtZXRob2Q+Ci0JCTxtZXRob2QtbmFtZT50eENoZWNrcG9pbnRlZE1ldGhvZDwvbWV0aG9kLW5hbWU+Ci0JICAgIDwvbWV0aG9kPgotCTwvY2hlY2twb2ludC1hdC1lbmQtb2YtbWV0aG9kPgorICAgIDxjaGVja3BvaW50LWF0LWVuZC1vZi1tZXRob2Q+CisgICAgICAgIDxtZXRob2Q+CisgICAgICAgIDxtZXRob2QtbmFtZT5ub25UeENoZWNrcG9pbnRlZE1ldGhvZDwvbWV0aG9kLW5hbWU+CisgICAgICAgIDwvbWV0aG9kPgorICAgICAgICA8bWV0aG9kPgorICAgICAgICA8bWV0aG9kLW5hbWU+dHhDaGVja3BvaW50ZWRNZXRob2Q8L21ldGhvZC1uYW1lPgorICAgICAgICA8L21ldGhvZD4KKyAgICA8L2NoZWNrcG9pbnQtYXQtZW5kLW9mLW1ldGhvZD4KICAgICAgPC9lamI+CiAgICA8L2VudGVycHJpc2UtYmVhbnM+CiA8L3N1bi1lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvZWpiL1NGU0IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L211bHRpL2VqYi9TRlNCLmphdmEKaW5kZXggNjliMWUxZi4uNjM2OWFjMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvZWpiL1NGU0IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9lamIvU0ZTQi5qYXZhCkBAIC0yNCwzMCArMjQsMzAgQEAKIHsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWNjb3VudEhvbGRlck5hbWUoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBpbnQgZ2V0QmFsYW5jZSgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIHZvaWQgaW5jcmVtZW50QmFsYW5jZShpbnQgdmFsKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBpbnQgZ2V0Q2hlY2twb2ludGVkQmFsYW5jZSgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsJICAgICAKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAKIAogCiAgICAgcHVibGljIHZvaWQgbm9uVHhOb25DaGVja3BvaW50ZWRNZXRob2QoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyB2b2lkIG5vblR4Q2hlY2twb2ludGVkTWV0aG9kKCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgdm9pZCB0eE5vbkNoZWNrcG9pbnRlZE1ldGhvZCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIHZvaWQgdHhDaGVja3BvaW50ZWRNZXRob2QoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvZWpiL1NGU0JFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L211bHRpL2VqYi9TRlNCRUpCLmphdmEKaW5kZXggMTQ5YzJjYS4uOTkyN2FiNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvZWpiL1NGU0JFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9lamIvU0ZTQkVKQi5qYXZhCkBAIC0zMCwxOCArMzAsMTggQEAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIHB1YmxpYyBjbGFzcyBTRlNCRUpCCi0gICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiAKKyAgICBpbXBsZW1lbnRzIFNlc3Npb25CZWFuCiB7CiAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0ICAgICAgICAgICAgICBzZXNzaW9uQ3R4OwotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudEhvbGRlck5hbWU7Ci0gICAgcHJpdmF0ZSB0cmFuc2llbnQgaW50CQliYWxhbmNlOwotICAgIHByaXZhdGUgaW50CQkJCWNoZWNrcG9pbnRlZEJhbGFuY2U7CisgICAgcHJpdmF0ZSB0cmFuc2llbnQgaW50ICAgICAgICBiYWxhbmNlOworICAgIHByaXZhdGUgaW50ICAgICAgICAgICAgICAgIGNoZWNrcG9pbnRlZEJhbGFuY2U7CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoU3RyaW5nIGFjY291bnRIb2xkZXJOYW1lLCBpbnQgYmFsYW5jZSkgewogICAgICAgICB0aGlzLmFjY291bnRIb2xkZXJOYW1lID0gYWNjb3VudEhvbGRlck5hbWU7Ci0JdGhpcy5iYWxhbmNlID0gYmFsYW5jZTsKKyAgICB0aGlzLmJhbGFuY2UgPSBiYWxhbmNlOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7CkBAIC01MSwxMSArNTEsMTEgQEAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7Ci0JYmFsYW5jZSA9IGNoZWNrcG9pbnRlZEJhbGFuY2U7CisgICAgYmFsYW5jZSA9IGNoZWNrcG9pbnRlZEJhbGFuY2U7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewotCWNoZWNrcG9pbnRlZEJhbGFuY2UgPSBiYWxhbmNlOworICAgIGNoZWNrcG9pbnRlZEJhbGFuY2UgPSBiYWxhbmNlOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWNjb3VudEhvbGRlck5hbWUoKSB7CkBAIC02MywxNSArNjMsMTUgQEAKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldEJhbGFuY2UoKSB7Ci0JcmV0dXJuIGJhbGFuY2U7CisgICAgcmV0dXJuIGJhbGFuY2U7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW5jcmVtZW50QmFsYW5jZShpbnQgdmFsKSB7Ci0JYmFsYW5jZSArPSB2YWw7CisgICAgYmFsYW5jZSArPSB2YWw7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRDaGVja3BvaW50ZWRCYWxhbmNlKCkgewotCXJldHVybiBjaGVja3BvaW50ZWRCYWxhbmNlOworICAgIHJldHVybiBjaGVja3BvaW50ZWRCYWxhbmNlOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIG5vblR4Tm9uQ2hlY2twb2ludGVkTWV0aG9kKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvZWpiL1NGU0JIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9lamIvU0ZTQkhvbWUuamF2YQppbmRleCBmNjIzZWZiLi4yMjZkN2VkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9lamIvU0ZTQkhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9lamIvU0ZTQkhvbWUuamF2YQpAQCAtMjQsNiArMjQsNiBAQAogICAgIGV4dGVuZHMgRUpCSG9tZQogewogICAgIHB1YmxpYyBTRlNCIGNyZWF0ZShTdHJpbmcgYWNjb3VudEhvbGRlck5hbWUsIGludCBiYWxhbmNlKQotCXRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L211bHRpL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L211bHRpL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCA2NmM0YjEyLi44M2ZiMjhjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBTaW1wbGVFbnRpdHk7DQotDQotQ1JFQVRFIFRBQkxFIFNpbXBsZUVudGl0eSAoDQotICAgIGtleSAgICAgY2hhcigxMjgpIG5vdCBudWxsLA0KLSAgICBuYW1lICAgIGNoYXIoMTI4KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBTaW1wbGVFbnRpdHk7CisKK0NSRUFURSBUQUJMRSBTaW1wbGVFbnRpdHkgKAorICAgIGtleSAgICAgY2hhcigxMjgpIG5vdCBudWxsLAorICAgIG5hbWUgICAgY2hhcigxMjgpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA5MzVjNGE2Li4zZjIxYWViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L211bHRpL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgU2ltcGxlRW50aXR5Ow0KK0Ryb3AgdGFibGUgU2ltcGxlRW50aXR5OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvYnVpbGQucHJvcGVydGllcwppbmRleCA4MTYyYzcwLi5jN2NlNGI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWUtbWV0aG9kY2hlY2twb2ludC1zaW1wbGUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L3NpbXBsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvYnVpbGQueG1sCmluZGV4IDNkNmI4ZWMuLmFmZGY1NmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L3NpbXBsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvc2ltcGxlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywgKiovKlNGU0IqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtNjksNyArNjksNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgLS0+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8IS0tCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgpAQCAtODEsMTcgKzgxLDE3IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L3NpbXBsZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGI0MjBkODAuLmJjYjI3OGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L3NpbXBsZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvc2ltcGxlL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIFNGU0JIb21lIGhvbWU7CkBAIC00NCwxMyArNDQsMTMgQEAKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltzaW1wbGV0eENsaWVudF0gRE9ORSBkb1Rlc3QoKS4uLiIpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgic2ltcGxldHgiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICBpbml0U0ZTQkxpc3QoKTsgICAgIC8vY3JlYXRlIFNGU0JzIAorICAgICAgICBpbml0U0ZTQkxpc3QoKTsgICAgIC8vY3JlYXRlIFNGU0JzCiAgICAgICAgIGFjY2Vzc1NGU0IoKTsgICAgICAgLy9hY2Nlc3MgdGhlIFNGQlMKIAogICAgIH0KQEAgLTc2LDI2ICs3NiwyNiBAQAogCiAgICAgcHVibGljIHZvaWQgYWNjZXNzU0ZTQigpIHsKICAgICAgICAgdHJ5IHsKLQkgICAgYm9vbGVhbiBhY3RDb3VudE9LID0gdHJ1ZTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJBY3RpdmF0ZUNvdW50WzBdOiAiICsgc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkpOwotCSAgICBhY3RDb3VudE9LID0gc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkgPT0gMDsKKyAgICAgICAgYm9vbGVhbiBhY3RDb3VudE9LID0gdHJ1ZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBY3RpdmF0ZUNvdW50WzBdOiAiICsgc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkpOworICAgICAgICBhY3RDb3VudE9LID0gc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkgPT0gMDsKIAotCSAgICBTdHJpbmcgcmV0cmlldmVkTmFtZSA9IHNmc2IuZ2V0TmFtZSgpOwotCSAgICBib29sZWFuIG5hbWVPSyA9IF9zZnNiUHJlZml4LmVxdWFsc0lnbm9yZUNhc2UocmV0cmlldmVkTmFtZSk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWN0aXZhdGVDb3VudFsxXTogIiArIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpKTsKLQkgICAgYWN0Q291bnRPSyA9IChzZnNiLmdldEFjdGl2YXRlQ291bnQoKSA9PSAxKTsKKyAgICAgICAgU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldE5hbWUoKTsKKyAgICAgICAgYm9vbGVhbiBuYW1lT0sgPSBfc2ZzYlByZWZpeC5lcXVhbHNJZ25vcmVDYXNlKHJldHJpZXZlZE5hbWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFjdGl2YXRlQ291bnRbMV06ICIgKyBzZnNiLmdldEFjdGl2YXRlQ291bnQoKSk7CisgICAgICAgIGFjdENvdW50T0sgPSAoc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkgPT0gMSk7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJBY3RpdmF0ZUNvdW50WzJdOiAiICsgc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkpOwotCSAgICBzZnNiLmdldFBhc3NpdmF0ZUNvdW50KCk7Ci0JICAgIGFjdENvdW50T0sgPSAoc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkgPT0gMSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWN0aXZhdGVDb3VudFsyXTogIiArIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpKTsKKyAgICAgICAgc2ZzYi5nZXRQYXNzaXZhdGVDb3VudCgpOworICAgICAgICBhY3RDb3VudE9LID0gKHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpID09IDEpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWN0aXZhdGVDb3VudFszXTogIiArIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpKTsKLQkgICAgc2ZzYi5nZXRQYXNzaXZhdGVDb3VudCgpOwotCSAgICBhY3RDb3VudE9LID0gKHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpID09IDEpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFjdGl2YXRlQ291bnRbM106ICIgKyBzZnNiLmdldEFjdGl2YXRlQ291bnQoKSk7CisgICAgICAgIHNmc2IuZ2V0UGFzc2l2YXRlQ291bnQoKTsKKyAgICAgICAgYWN0Q291bnRPSyA9IChzZnNiLmdldEFjdGl2YXRlQ291bnQoKSA9PSAxKTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFjdGl2YXRlQ291bnRbNF06ICIgKyBzZnNiLmdldEFjdGl2YXRlQ291bnQoKSk7Ci0JICAgIHNmc2IuZ2V0UGFzc2l2YXRlQ291bnQoKTsKLQkgICAgYWN0Q291bnRPSyA9IChzZnNiLmdldEFjdGl2YXRlQ291bnQoKSA9PSAxKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBY3RpdmF0ZUNvdW50WzRdOiAiICsgc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkpOworICAgICAgICBzZnNiLmdldFBhc3NpdmF0ZUNvdW50KCk7CisgICAgICAgIGFjdENvdW50T0sgPSAoc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkgPT0gMSk7CiAKICAgICAgICAgICAgIGlmIChuYW1lT0sgJiYgYWN0Q291bnRPSykgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgYWNjZXNzU0ZTQiAiLCBzdGF0LlBBU1MpOwpAQCAtMTA5LDE0ICsxMDksMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgc2xlZXBGb3IoaW50IHNlY29uZHMpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIDEwIHNlY29uZHMgYmVmb3JlIGFjY2Vzc2luZy4uLiIpOwotCWZvciAoaW50IGk9MDsgaTxzZWNvbmRzOyBpKyspIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIiICsgKDEwIC0gaSkgKyAiIHNlY29uZHMgbGVmdC4uLiIpOwotCSAgICB0cnkgewotCQlUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEqMTAwMCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICB9Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgMTAgc2Vjb25kcyBiZWZvcmUgYWNjZXNzaW5nLi4uIik7CisgICAgZm9yIChpbnQgaT0wOyBpPHNlY29uZHM7IGkrKykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyAoMTAgLSBpKSArICIgc2Vjb25kcyBsZWZ0Li4uIik7CisgICAgICAgIHRyeSB7CisgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMSoxMDAwKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIH0KKyAgICB9CiAgICAgfQogCiB9IC8vQ2xpZW50e30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L3NpbXBsZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L3NpbXBsZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCAzOTQ5MDQyLi40MGM5MDMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvc2ltcGxlL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yMywxMSArMjMsMTEgQEAKICAgICAgPGVqYj4KICAgICAgICAgPGVqYi1uYW1lPlNGU0JFSkI8L2VqYi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmVqYi9lamJfZWVfbWV0aG9kY2hlY2twb2ludF9zaW1wbGVfU0ZTQjwvam5kaS1uYW1lPgotCTxjaGVja3BvaW50LWF0LWVuZC1vZi1tZXRob2Q+Ci0JICAgIDxtZXRob2Q+Ci0JCTxtZXRob2QtbmFtZT5nZXROYW1lPC9tZXRob2QtbmFtZT4KLQkgICAgPC9tZXRob2Q+Ci0JPC9jaGVja3BvaW50LWF0LWVuZC1vZi1tZXRob2Q+CisgICAgPGNoZWNrcG9pbnQtYXQtZW5kLW9mLW1ldGhvZD4KKyAgICAgICAgPG1ldGhvZD4KKyAgICAgICAgPG1ldGhvZC1uYW1lPmdldE5hbWU8L21ldGhvZC1uYW1lPgorICAgICAgICA8L21ldGhvZD4KKyAgICA8L2NoZWNrcG9pbnQtYXQtZW5kLW9mLW1ldGhvZD4KICAgICAgPC9lamI+CiAgICA8L2VudGVycHJpc2UtYmVhbnM+CiA8L3N1bi1lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvc2ltcGxlL2VqYi9TRlNCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvZWpiL1NGU0IuamF2YQppbmRleCBjYmZkOTMxLi4yNzY3ZTRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvZWpiL1NGU0IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvZWpiL1NGU0IuamF2YQpAQCAtMjQsMTIgKzI0LDEyIEBACiB7CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBpbnQgZ2V0QWN0aXZhdGVDb3VudCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGludCBnZXRQYXNzaXZhdGVDb3VudCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvZWpiL1NGU0JFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L3NpbXBsZS9lamIvU0ZTQkVKQi5qYXZhCmluZGV4IDk4Y2M3NDkuLjQzM2VmZDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L3NpbXBsZS9lamIvU0ZTQkVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L3NpbXBsZS9lamIvU0ZTQkVKQi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCiBwdWJsaWMgY2xhc3MgU0ZTQkVKQgotICAgIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gCisgICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbgogewogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExPQ0FMX0NISUxEX1NVRkZJWCA9ICJfY2hpbGRMb2NhbCI7CkBAIC01OCwyMSArNTgsMjEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldEFjdGl2YXRlQ291bnQoKSB7Ci0JcmV0dXJuIGFjdGl2YXRlQ291bnQ7CisgICAgcmV0dXJuIGFjdGl2YXRlQ291bnQ7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRQYXNzaXZhdGVDb3VudCgpIHsKLQlyZXR1cm4gcGFzc2l2YXRlQ291bnQ7CisgICAgcmV0dXJuIHBhc3NpdmF0ZUNvdW50OwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKLQlhY3RpdmF0ZUNvdW50Kys7CisgICAgYWN0aXZhdGVDb3VudCsrOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKLQlwYXNzaXZhdGVDb3VudCsrOworICAgIHBhc3NpdmF0ZUNvdW50Kys7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvZWpiL1NGU0JIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvZWpiL1NGU0JIb21lLmphdmEKaW5kZXggYTNmNGE5Ny4uNmYyMmRiZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvc2ltcGxlL2VqYi9TRlNCSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L3NpbXBsZS9lamIvU0ZTQkhvbWUuamF2YQpAQCAtMjQsNiArMjQsNiBAQAogICAgIGV4dGVuZHMgRUpCSG9tZQogewogICAgIHB1YmxpYyBTRlNCIGNyZWF0ZShTdHJpbmcgc2ZzYk5hbWUpCi0JdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvc2ltcGxlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L3NpbXBsZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggNjZjNGIxMi4uODNmYjI4YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvc2ltcGxlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBTaW1wbGVFbnRpdHk7DQotDQotQ1JFQVRFIFRBQkxFIFNpbXBsZUVudGl0eSAoDQotICAgIGtleSAgICAgY2hhcigxMjgpIG5vdCBudWxsLA0KLSAgICBuYW1lICAgIGNoYXIoMTI4KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBTaW1wbGVFbnRpdHk7CisKK0NSRUFURSBUQUJMRSBTaW1wbGVFbnRpdHkgKAorICAgIGtleSAgICAgY2hhcigxMjgpIG5vdCBudWxsLAorICAgIG5hbWUgICAgY2hhcigxMjgpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L3NpbXBsZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDkzNWM0YTYuLjNmMjFhZWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L3NpbXBsZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L3NpbXBsZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIFNpbXBsZUVudGl0eTsNCitEcm9wIHRhYmxlIFNpbXBsZUVudGl0eTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9hdXRvdGltZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9hdXRvdGltZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBiMGVjNzMwLi40NDRiZGJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvYXV0b3RpbWVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2F1dG90aW1lci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWUtYXV0b3RpbWVyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2F1dG90aW1lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvYXV0b3RpbWVyL2J1aWxkLnhtbAppbmRleCA0NWEyYTRmLi5jY2YzZDA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvYXV0b3RpbWVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvYXV0b3RpbWVyL2J1aWxkLnhtbApAQCAtMTI2LDExICsxMjYsMTEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1jbGllbnQiID4KLSAgICAgICAgPGphdmFjIGZvcms9InRydWUiIGluY2x1ZGVBbnRSdW50aW1lPSJmYWxzZSIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGRlYnVnPSJ0cnVlIiAKKyAgICAgICAgPGphdmFjIGZvcms9InRydWUiIGluY2x1ZGVBbnRSdW50aW1lPSJmYWxzZSIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGRlYnVnPSJ0cnVlIgogICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgICAgc3JjZGlyPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvYWRtaW4vY2xpL3NyYyIgaW5jbHVkZXM9IioqLypCYXNlRGV2VGVzdC5qYXZhIj4KICAgICAgICAgPC9qYXZhYz4KLSAgICAgICAgPGphdmFjIGZvcms9InRydWUiIGluY2x1ZGVBbnRSdW50aW1lPSJmYWxzZSIgCisgICAgICAgIDxqYXZhYyBmb3JrPSJ0cnVlIiBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiCiAgICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgICBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZGVidWc9InRydWUiIHNyY2Rpcj0iY2xpZW50IiBpbmNsdWRlcz0iKiovKi5qYXZhIj4KICAgICAgICAgICAgIDxjbGFzc3BhdGggcGF0aD0iJHtjbGFzc3BhdGh9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvYXV0b3RpbWVyL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9hdXRvdGltZXIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGJiMzUyN2IuLjAzMmVjNTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9hdXRvdGltZXIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9hdXRvdGltZXIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgamF2YS51dGlsLio7CiAKIC8qCi0gKiBDTEkgRGV2IHRlc3QgCisgKiBDTEkgRGV2IHRlc3QKICAqIEBhdXRob3IgbXZhdGtpbmEKICAqLwogcHVibGljIGNsYXNzIENsaWVudCBleHRlbmRzIEFkbWluQmFzZURldlRlc3QgewpAQCAtMTY1LDcgKzE2NSw3IEBACiAKICAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gY29ubi5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7Ci0gIAorCiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CiAgICAgICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQcm9jZXNzaW5nIGxpbmU6ICIgKyBsaW5lKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9hdXRvdGltZXIvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9hdXRvdGltZXIvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQppbmRleCA2ZjEyNDBmLi45Y2M4MTdmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvYXV0b3RpbWVyL3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2F1dG90aW1lci93YXIvVmVyaWZ5U2VydmxldC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwotCXJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogCiAgICAgICAgIFN0cmluZyBwYXJhbSA9IHJlcS5nZXRRdWVyeVN0cmluZygpOwogICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICB0cnkgewotCSAgICBvdXQucHJpbnRsbigiUkVTVUxUOiIgKyBiZWFuLnRpbWVvdXRSZWNlaXZlZChwYXJhbSkpOworICAgICAgICBvdXQucHJpbnRsbigiUkVTVUxUOiIgKyBiZWFuLnRpbWVvdXRSZWNlaXZlZChwYXJhbSkpOwogICAgICAgICB9Y2F0Y2goVGhyb3dhYmxlIGUpewogICAgICAgICAgICAgb3V0LnByaW50bG4oImdvdCBleGNlcHRpb24iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKGUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2NsaS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2NsaS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDZmOTg3MWUuLmVmMWI1NDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9jbGkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvY2xpL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogICBjbHVzdGVyLW5hbWUgaXMgc2V0IHRvIGNsdXN0ZXIxIGluIGFwcHNlcnYtdGVzdHMvY29uZmlnLCBhbmQgc2VlbXMgaGFyZAogICB0byBvdmVycmlkZS4gIFNvIHN0aWxsIHVzZSBjbHVzdGVyMQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2NsaS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvY2xpL2J1aWxkLnhtbAppbmRleCA3MDA0ZDVlLi41ZjliNDRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvY2xpL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvY2xpL2J1aWxkLnhtbApAQCAtMjgsNyArMjgsNyBAQAogCiA8cHJvamVjdCBuYW1lPSJkZXZ0ZXN0cy5lamIuZWUudGltZXIiIGRlZmF1bHQ9InVzYWdlIiBiYXNlZGlyPSIuIj4KICAgICA8cHJvcGVydHkgZmlsZT0iYnVpbGQucHJvcGVydGllcyIvPgotICAgIAorCiAgICAgJmNvbW1vblNldHVwOwogICAgICZjb21tb25CdWlsZDsKICAgICAmZWVjb21tb25CdWlsZDsKQEAgLTE0OCwxMiArMTQ4LDEyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLSAgICAgICAgPGphdmFjIGZvcms9InRydWUiIGluY2x1ZGVBbnRSdW50aW1lPSJmYWxzZSIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGRlYnVnPSJ0cnVlIiAKKyAgICAgICAgPGphdmFjIGZvcms9InRydWUiIGluY2x1ZGVBbnRSdW50aW1lPSJmYWxzZSIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGRlYnVnPSJ0cnVlIgogICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgICBzcmNkaXI9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjIiBpbmNsdWRlcz0iKiovQWRtaW5CYXNlRGV2VGVzdC5qYXZhIj4KICAgICAgICAgPC9qYXZhYz4KIAotICAgICAgICA8amF2YWMgZm9yaz0idHJ1ZSIgaW5jbHVkZUFudFJ1bnRpbWU9ImZhbHNlIiAKKyAgICAgICAgPGphdmFjIGZvcms9InRydWUiIGluY2x1ZGVBbnRSdW50aW1lPSJmYWxzZSIKICAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGRlYnVnPSJ0cnVlIiBzcmNkaXI9InNyYyIgaW5jbHVkZXM9IioqLyouamF2YSI+CiAgICAgICAgIDwvamF2YWM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvY2xpL3NyYy9lZXRpbWVyL01pZ3JhdGVUaW1lcnNUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvY2xpL3NyYy9lZXRpbWVyL01pZ3JhdGVUaW1lcnNUZXN0LmphdmEKaW5kZXggM2VjMzA3NS4uOWQ3NGUyYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2NsaS9zcmMvZWV0aW1lci9NaWdyYXRlVGltZXJzVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9jbGkvc3JjL2VldGltZXIvTWlncmF0ZVRpbWVyc1Rlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICAgICAgbWlncmF0ZVRpbWVyc091dHNpZGVDbHVzdGVyKCk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAvL2FsbCBhc3NvY2lhdGVkIHRpbWVycyB3aWxsIGJlIHJlbW92ZWQgdXBvbiB1bmRlcGxveSwgZXZlbiBpZiBzb21lCi0gICAgICAgICAgICAvL2luc3RhbmNlcyBhcmUgb2ZmbGluZS4gCisgICAgICAgICAgICAvL2luc3RhbmNlcyBhcmUgb2ZmbGluZS4KICAgICAgICAgICAgIHVuZGVwbG95RWpiKGNsdXN0ZXJfbmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAvL2Zyb20gdGhlIHNhbWUgY2x1c3RlcgogICAgIHB1YmxpYyB2b2lkIG1pZ3JhdGVUaW1lcnMoKSB7CiAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9ICJtaWdyYXRlVGltZXJzIjsKLSAgICAgICAgCisKICAgICAgICAgLy9ubyBhdXRvbWF0aWMgbWlncmF0aW9uIHdoZW4gc3RvcHBpbmcgYSBpbnN0YW5jZSBzaW5jZSBnbXMgaGFzIGJlZW4gZGlzYWJsZWQKICAgICAgICAgYXNhZG1pbigic3RvcC1pbnN0YW5jZSIsIGluc3RhbmNlX25hbWVfMSk7CiAgICAgICAgIEFzYWRtaW5SZXR1cm4gb3V0cHV0ID0gYXNhZG1pbldpdGhPdXRwdXQoIm1pZ3JhdGUtdGltZXJzIiwgaW5zdGFuY2VfbmFtZV8xKTsKQEAgLTc5LDcgKzc5LDcgQEAKIAogICAgIHB1YmxpYyB2b2lkIG1pZ3JhdGVUaW1lcnNPdXRzaWRlQ2x1c3RlcigpIHsKICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gIm1pZ3JhdGVUaW1lcnNPdXRzaWRlQ2x1c3RlciI7Ci0gICAgICAgIAorCiAgICAgICAgIC8vbm8gYXV0b21hdGljIG1pZ3JhdGlvbiB3aGVuIHN0b3BwaW5nIGEgaW5zdGFuY2Ugc2luY2UgZ21zIGhhcyBiZWVuIGRpc2FibGVkCiAgICAgICAgIGFzYWRtaW4oInN0b3AtaW5zdGFuY2UiLCBpbnN0YW5jZV9uYW1lXzEpOwogICAgICAgICBhc2FkbWluKCJzdGFydC1pbnN0YW5jZSIsIGluc3RhbmNlX25hbWVfMyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZG9tYWluZGVwbG95bWVudC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2RvbWFpbmRlcGxveW1lbnQvYnVpbGQucHJvcGVydGllcwppbmRleCA4MTI5NTc1Li4xOGY3NGNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZG9tYWluZGVwbG95bWVudC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9kb21haW5kZXBsb3ltZW50L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lZS1kb21haW5kZXBsb3ltZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2RvbWFpbmRlcGxveW1lbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2RvbWFpbmRlcGxveW1lbnQvYnVpbGQueG1sCmluZGV4IGEzMDNlZTIuLjNlZjczYmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9kb21haW5kZXBsb3ltZW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZG9tYWluZGVwbG95bWVudC9idWlsZC54bWwKQEAgLTIwMywxMSArMjAzLDExIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtY2xpZW50IiA+Ci0gICAgICAgIDxqYXZhYyBmb3JrPSJ0cnVlIiBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBkZWJ1Zz0idHJ1ZSIgCisgICAgICAgIDxqYXZhYyBmb3JrPSJ0cnVlIiBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBkZWJ1Zz0idHJ1ZSIKICAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICAgIHNyY2Rpcj0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2FkbWluL2NsaS9zcmMiIGluY2x1ZGVzPSIqKi8qQmFzZURldlRlc3QuamF2YSI+CiAgICAgICAgIDwvamF2YWM+Ci0gICAgICAgIDxqYXZhYyBmb3JrPSJ0cnVlIiBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiIAorICAgICAgICA8amF2YWMgZm9yaz0idHJ1ZSIgaW5jbHVkZUFudFJ1bnRpbWU9ImZhbHNlIgogICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGRlYnVnPSJ0cnVlIiBzcmNkaXI9ImNsaWVudCIgaW5jbHVkZXM9IioqLyouamF2YSI+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoIHBhdGg9IiR7Y2xhc3NwYXRofSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2RvbWFpbmRlcGxveW1lbnQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2RvbWFpbmRlcGxveW1lbnQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDk5MmZlODMuLmE2Y2E1NTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9kb21haW5kZXBsb3ltZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZG9tYWluZGVwbG95bWVudC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuKjsKIAogLyoKLSAqIENMSSBEZXYgdGVzdCAKKyAqIENMSSBEZXYgdGVzdAogICogQGF1dGhvciBtdmF0a2luYQogICovCiBwdWJsaWMgY2xhc3MgQ2xpZW50IGV4dGVuZHMgQWRtaW5CYXNlRGV2VGVzdCB7CkBAIC0xNDgsNyArMTQ4LDcgQEAKIAogICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjb25uLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKLSAgCisKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKICAgICAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlByb2Nlc3NpbmcgbGluZTogIiArIGxpbmUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2RvbWFpbmRlcGxveW1lbnQvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9kb21haW5kZXBsb3ltZW50L3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKaW5kZXggYTNlYzJiMS4uZDYxY2Y3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2RvbWFpbmRlcGxveW1lbnQvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZG9tYWluZGVwbG95bWVudC93YXIvVmVyaWZ5U2VydmxldC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwotCXJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogCiAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgIHRyeSB7Ci0JICAgIG91dC5wcmludGxuKCJSRVNVTFQ6IiArIGJlYW4uY291bnRUaW1lcnMoKSk7CisgICAgICAgIG91dC5wcmludGxuKCJSRVNVTFQ6IiArIGJlYW4uY291bnRUaW1lcnMoKSk7CiAgICAgICAgIH1jYXRjaChUaHJvd2FibGUgZSl7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiZ290IGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZmFpbG92ZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9mYWlsb3Zlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGZlNjRjMWUuLjc4ZDYyMTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9mYWlsb3Zlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9mYWlsb3Zlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWUtdGltZXItZmFpbG92ZXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZmFpbG92ZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2ZhaWxvdmVyL2J1aWxkLnhtbAppbmRleCBkNTFkOTZlLi5kZTU3ZGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZmFpbG92ZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9mYWlsb3Zlci9idWlsZC54bWwKQEAgLTEzNywxMSArMTM3LDExIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtY2xpZW50IiA+Ci0gICAgICAgIDxqYXZhYyBmb3JrPSJ0cnVlIiBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBkZWJ1Zz0idHJ1ZSIgCisgICAgICAgIDxqYXZhYyBmb3JrPSJ0cnVlIiBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBkZWJ1Zz0idHJ1ZSIKICAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICAgIHNyY2Rpcj0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2FkbWluL2NsaS9zcmMiIGluY2x1ZGVzPSIqKi8qQmFzZURldlRlc3QuamF2YSI+CiAgICAgICAgIDwvamF2YWM+Ci0gICAgICAgIDxqYXZhYyBmb3JrPSJ0cnVlIiBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiIAorICAgICAgICA8amF2YWMgZm9yaz0idHJ1ZSIgaW5jbHVkZUFudFJ1bnRpbWU9ImZhbHNlIgogICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGRlYnVnPSJ0cnVlIiBzcmNkaXI9ImNsaWVudCIgaW5jbHVkZXM9IioqLyouamF2YSI+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoIHBhdGg9IiR7Y2xhc3NwYXRofSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2ZhaWxvdmVyL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9mYWlsb3Zlci9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOWQ4NmI1My4uNTgyYmEwMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2ZhaWxvdmVyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZmFpbG92ZXIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgamF2YS51dGlsLio7CiAKIC8qCi0gKiBDTEkgRGV2IHRlc3QgCisgKiBDTEkgRGV2IHRlc3QKICAqIEBhdXRob3IgbXZhdGtpbmEKICAqLwogcHVibGljIGNsYXNzIENsaWVudCBleHRlbmRzIEFkbWluQmFzZURldlRlc3QgewpAQCAtMTY1LDcgKzE2NSw3IEBACiAKICAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gY29ubi5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7Ci0gIAorCiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CiAgICAgICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQcm9jZXNzaW5nIGxpbmU6ICIgKyBsaW5lKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9mYWlsb3Zlci93YXIvVmVyaWZ5U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2ZhaWxvdmVyL3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKaW5kZXggNmYxMjQwZi4uOWNjODE3ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2ZhaWxvdmVyL3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2ZhaWxvdmVyL3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7Ci0JcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAKICAgICAgICAgU3RyaW5nIHBhcmFtID0gcmVxLmdldFF1ZXJ5U3RyaW5nKCk7CiAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgIHRyeSB7Ci0JICAgIG91dC5wcmludGxuKCJSRVNVTFQ6IiArIGJlYW4udGltZW91dFJlY2VpdmVkKHBhcmFtKSk7CisgICAgICAgIG91dC5wcmludGxuKCJSRVNVTFQ6IiArIGJlYW4udGltZW91dFJlY2VpdmVkKHBhcmFtKSk7CiAgICAgICAgIH1jYXRjaChUaHJvd2FibGUgZSl7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiZ290IGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZ2V0YWxsdGltZXJzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZ2V0YWxsdGltZXJzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjVjMDlkMi4uMTdhMzI3OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2dldGFsbHRpbWVycy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9nZXRhbGx0aW1lcnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVlLWdldGFsbHRpbWVycyIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9nZXRhbGx0aW1lcnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2dldGFsbHRpbWVycy9idWlsZC54bWwKaW5kZXggNTg2MjNkMy4uNjNmOWNkNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2dldGFsbHRpbWVycy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2dldGFsbHRpbWVycy9idWlsZC54bWwKQEAgLTEyOSwxMSArMTI5LDExIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtY2xpZW50IiA+Ci0gICAgICAgIDxqYXZhYyBmb3JrPSJ0cnVlIiBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBkZWJ1Zz0idHJ1ZSIgCisgICAgICAgIDxqYXZhYyBmb3JrPSJ0cnVlIiBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBkZWJ1Zz0idHJ1ZSIKICAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICAgIHNyY2Rpcj0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2FkbWluL2NsaS9zcmMiIGluY2x1ZGVzPSIqKi8qQmFzZURldlRlc3QuamF2YSI+CiAgICAgICAgIDwvamF2YWM+Ci0gICAgICAgIDxqYXZhYyBmb3JrPSJ0cnVlIiBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiIAorICAgICAgICA8amF2YWMgZm9yaz0idHJ1ZSIgaW5jbHVkZUFudFJ1bnRpbWU9ImZhbHNlIgogICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGRlYnVnPSJ0cnVlIiBzcmNkaXI9ImNsaWVudCIgaW5jbHVkZXM9IioqLyouamF2YSI+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoIHBhdGg9IiR7Y2xhc3NwYXRofSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2dldGFsbHRpbWVycy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZ2V0YWxsdGltZXJzL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBiMTQxNTBjLi5jYjIxMjA5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZ2V0YWxsdGltZXJzL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZ2V0YWxsdGltZXJzL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMTMzLDcgKzEzMyw3IEBACiAKICAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gY29ubi5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7Ci0gIAorCiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CiAgICAgICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQcm9jZXNzaW5nIGxpbmU6ICIgKyBsaW5lKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9nZXRhbGx0aW1lcnMvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9nZXRhbGx0aW1lcnMvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQppbmRleCBhNjVlMjY3Li5hZGZlZGM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZ2V0YWxsdGltZXJzL3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2dldGFsbHRpbWVycy93YXIvVmVyaWZ5U2VydmxldC5qYXZhCkBAIC00NCw3ICs0NCw3IEBACiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwotCXJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBTdHJpbmcgcGFyYW0gPSByZXEuZ2V0UXVlcnlTdHJpbmcoKTsKIAogICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjgxYTM4NS4uNzNiYTI1NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWUtdHhjaGVja3BvaW50LWJtdGNtdHR4Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvYnVpbGQueG1sCmluZGV4IDJiMTEzYWUuLmIzOWJiZWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzLCAqKi8qU0ZTQiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAtLT4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwhLS0KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CkBAIC04MSwxNyArODEsMTcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2NsaWVudC9DbGllbnQuamF2YQppbmRleCAxMmVkZmY5Li44ODg3YTlkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIEJNVFNlc3Npb25Ib21lIGhvbWU7CkBAIC00OCwxNiArNDgsMTYgQEAKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltibXR0eF0gRE9ORSBkb1Rlc3QoKS4uLiIpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiYm10dHgiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICBpbml0U0ZTQigpOyAgICAgLy9jcmVhdGUgU0ZTQnMgCisgICAgICAgIGluaXRTRlNCKCk7ICAgICAvL2NyZWF0ZSBTRlNCcwogICAgICAgICBub25UeEFjY2Vzc0NoZWNrKCk7ICAgICAgIC8vYWNjZXNzIHRoZSBTRkJTCiAgICAgICAgIHR4QWNjZXNzQ2hlY2soKTsgICAgICAgLy9hY2Nlc3MgdGhlIFNGQlMKLQl0eEJNVENNVEFjY2VzcygpOworICAgIHR4Qk1UQ01UQWNjZXNzKCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGluaXRTRlNCKCkgewpAQCAtODYsMTUgKzg2LDE1IEBACiAKICAgICBwdWJsaWMgdm9pZCBub25UeEFjY2Vzc0NoZWNrKCkgewogICAgICAgICB0cnkgewotCSAgICBTdHJpbmcgcmV0cmlldmVkTmFtZSA9IHNmc2IuZ2V0TmFtZSgpOwotCSAgICBib29sZWFuIG5hbWVPSyA9IF9zZnNiUHJlZml4LmVxdWFsc0lnbm9yZUNhc2UocmV0cmlldmVkTmFtZSk7Ci0JICAgIGJvb2xlYW4gYWN0Q291bnRPSyA9IChzZnNiLmdldEFjdGl2YXRlQ291bnQoKSA9PSAwKTsKKyAgICAgICAgU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldE5hbWUoKTsKKyAgICAgICAgYm9vbGVhbiBuYW1lT0sgPSBfc2ZzYlByZWZpeC5lcXVhbHNJZ25vcmVDYXNlKHJldHJpZXZlZE5hbWUpOworICAgICAgICBib29sZWFuIGFjdENvdW50T0sgPSAoc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkgPT0gMCk7CiAKICAgICAgICAgICAgIGlmIChuYW1lT0sgJiYgYWN0Q291bnRPSykgewotCQlyZXRyaWV2ZWROYW1lID0gY210U2ZzYi5nZXROYW1lKCk7Ci0JCW5hbWVPSyA9IF9zZnNiUHJlZml4LmVxdWFsc0lnbm9yZUNhc2UocmV0cmlldmVkTmFtZSk7Ci0JCWFjdENvdW50T0sgPSAoY210U2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkgPT0gMCk7Ci0JICAgIH0KKyAgICAgICAgcmV0cmlldmVkTmFtZSA9IGNtdFNmc2IuZ2V0TmFtZSgpOworICAgICAgICBuYW1lT0sgPSBfc2ZzYlByZWZpeC5lcXVhbHNJZ25vcmVDYXNlKHJldHJpZXZlZE5hbWUpOworICAgICAgICBhY3RDb3VudE9LID0gKGNtdFNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpID09IDApOworICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChuYW1lT0sgJiYgYWN0Q291bnRPSykgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJibXRjbXR0eCBub25UeEFjY2Vzc0NoZWNrIiwgc3RhdC5QQVNTKTsKQEAgLTEwOSwyMSArMTA5LDIxIEBACiAKICAgICBwdWJsaWMgdm9pZCB0eEFjY2Vzc0NoZWNrKCkgewogICAgICAgICB0cnkgewotCSAgICBTdHJpbmcgcmV0cmlldmVkTmFtZSA9IHNmc2IuZ2V0TmFtZSgpOwotCSAgICBzZnNiLnN0YXJ0VHgoKTsKLQkgICAgc2ZzYi5pbmNyZW1lbnRDb3VudCgpOwotCSAgICBzZnNiLmNvbW1pdFR4KCk7CisgICAgICAgIFN0cmluZyByZXRyaWV2ZWROYW1lID0gc2ZzYi5nZXROYW1lKCk7CisgICAgICAgIHNmc2Iuc3RhcnRUeCgpOworICAgICAgICBzZnNiLmluY3JlbWVudENvdW50KCk7CisgICAgICAgIHNmc2IuY29tbWl0VHgoKTsKIAotCSAgICBib29sZWFuIGFjdENvdW50T0sgPSAoc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkgPT0gMSk7CisgICAgICAgIGJvb2xlYW4gYWN0Q291bnRPSyA9IChzZnNiLmdldEFjdGl2YXRlQ291bnQoKSA9PSAxKTsKICAgICAgICAgICAgIGlmIChhY3RDb3VudE9LKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJtdGNtdHR4IEJNVHR4QWNjZXNzQ2hlY2siLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYm10Y210dHggQk1UdHhBY2Nlc3NDaGVjayIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9CiAKLQkgICAgY210U2ZzYi5pbmNyZW1lbnRDb3VudCgpOwotCSAgICBpbnQgdmFsID0gIGNtdFNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOwotCSAgICBhY3RDb3VudE9LID0gKGNtdFNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpID09IDEpOworICAgICAgICBjbXRTZnNiLmluY3JlbWVudENvdW50KCk7CisgICAgICAgIGludCB2YWwgPSAgY210U2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCk7CisgICAgICAgIGFjdENvdW50T0sgPSAoY210U2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkgPT0gMSk7CiAgICAgICAgICAgICBpZiAoYWN0Q291bnRPSykgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJibXRjbXR0eCBDTVR0eEFjY2Vzc0NoZWNrIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xMzcsMjggKzEzNywyOCBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIHR4Qk1UQ01UQWNjZXNzKCkgewogICAgICAgICB0cnkgewotCSAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CisgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKIAotCSAgICBDTVRTZXNzaW9uIGNtdCA9IHNmc2IuZ2V0Q01UU2Vzc2lvbigpOworICAgICAgICBDTVRTZXNzaW9uIGNtdCA9IHNmc2IuZ2V0Q01UU2Vzc2lvbigpOwogCi0JICAgIGludCBwcmV2Q291bnQgPSBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKLQkgICAgaW50IHByZXZDTVRDb3VudCA9IGNtdC5nZXRBY3RpdmF0ZUNvdW50KCk7Ci0JICAgIAotCSAgICBzZnNiLnN0YXJ0VHgoKTsKKyAgICAgICAgaW50IHByZXZDb3VudCA9IHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOworICAgICAgICBpbnQgcHJldkNNVENvdW50ID0gY210LmdldEFjdGl2YXRlQ291bnQoKTsKIAotCQlzZnNiLmluY3JlbWVudENvdW50KCk7Ci0JCXBhc3NlZCA9IHBhc3NlZCAmJiAoc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkgPT0gcHJldkNvdW50KTsKKyAgICAgICAgc2ZzYi5zdGFydFR4KCk7CiAKLQkJc2ZzYi5hY2Nlc3NDTVRCZWFuKCk7Ci0JCXBhc3NlZCA9IHBhc3NlZCAmJiAoc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkgPT0gcHJldkNvdW50KTsKKyAgICAgICAgc2ZzYi5pbmNyZW1lbnRDb3VudCgpOworICAgICAgICBwYXNzZWQgPSBwYXNzZWQgJiYgKHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpID09IHByZXZDb3VudCk7CiAKLQkJY210ID0gc2ZzYi5nZXRDTVRTZXNzaW9uKCk7Ci0JCXBhc3NlZCA9IHBhc3NlZCAmJiAoc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkgPT0gcHJldkNvdW50KTsKKyAgICAgICAgc2ZzYi5hY2Nlc3NDTVRCZWFuKCk7CisgICAgICAgIHBhc3NlZCA9IHBhc3NlZCAmJiAoc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkgPT0gcHJldkNvdW50KTsKIAotCSAgICBzZnNiLmNvbW1pdFR4KCk7CisgICAgICAgIGNtdCA9IHNmc2IuZ2V0Q01UU2Vzc2lvbigpOworICAgICAgICBwYXNzZWQgPSBwYXNzZWQgJiYgKHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpID09IHByZXZDb3VudCk7CiAKLQkgICAgcGFzc2VkID0gcGFzc2VkICYmIChzZnNiLmdldEFjdGl2YXRlQ291bnQoKSA9PSAocHJldkNvdW50KzEpKTsKLQkgICAgcGFzc2VkID0gcGFzc2VkICYmIChjbXQuZ2V0QWN0aXZhdGVDb3VudCgpID09IChwcmV2Q01UQ291bnQrMSkpOworICAgICAgICBzZnNiLmNvbW1pdFR4KCk7CisKKyAgICAgICAgcGFzc2VkID0gcGFzc2VkICYmIChzZnNiLmdldEFjdGl2YXRlQ291bnQoKSA9PSAocHJldkNvdW50KzEpKTsKKyAgICAgICAgcGFzc2VkID0gcGFzc2VkICYmIChjbXQuZ2V0QWN0aXZhdGVDb3VudCgpID09IChwcmV2Q01UQ291bnQrMSkpOwogCiAgICAgICAgICAgICBpZiAocGFzc2VkKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJtdGNtdHR4IHR4Qk1UQ01UQWNjZXNzIiwgc3RhdC5QQVNTKTsKQEAgLTE3MSwxNCArMTcxLDE0IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgcHJpdmF0ZSB2b2lkIHNsZWVwRm9yKGludCBzZWNvbmRzKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciAxMCBzZWNvbmRzIGJlZm9yZSBhY2Nlc3NpbmcuLi4iKTsKLQlmb3IgKGludCBpPTA7IGk8c2Vjb25kczsgaSsrKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArICgxMCAtIGkpICsgIiBzZWNvbmRzIGxlZnQuLi4iKTsKLQkgICAgdHJ5IHsKLQkJVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxKjEwMDApOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgfQotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIDEwIHNlY29uZHMgYmVmb3JlIGFjY2Vzc2luZy4uLiIpOworICAgIGZvciAoaW50IGk9MDsgaTxzZWNvbmRzOyBpKyspIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiICsgKDEwIC0gaSkgKyAiIHNlY29uZHMgbGVmdC4uLiIpOworICAgICAgICB0cnkgeworICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEqMTAwMCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICB9CisgICAgfQogICAgIH0KIAogfSAvL0NsaWVudHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggZGI0MmI0YS4uMjY0Y2Q1ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgICAgICA8ZWpiLXJlZi10eXBlPlNlc3Npb248L2VqYi1yZWYtdHlwZT4KICAgICAgICAgPGhvbWU+Y29tLnN1bi5zMWFzZGV2LmVqYi5lZS5lamIuQ01UU2Vzc2lvbkhvbWU8L2hvbWU+CiAgICAgICAgIDxyZW1vdGU+Y29tLnN1bi5zMWFzZGV2LmVqYi5lZS5lamIuQ01UU2Vzc2lvbjwvcmVtb3RlPgotCTxlamItbGluaz5DTVRTZXNzaW9uPC9lamItbGluaz4KKyAgICA8ZWpiLWxpbms+Q01UU2Vzc2lvbjwvZWpiLWxpbms+CiAgICAgICA8L2VqYi1yZWY+CiAgICAgICA8c2VjdXJpdHktaWRlbnRpdHk+CiAgICAgICAgIDx1c2UtY2FsbGVyLWlkZW50aXR5Lz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDU1OThiNWQuLjg4ODA4MjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjUsNyArMjUsNyBAQAogICAgICAgICA8am5kaS1uYW1lPmVqYi9lamJfZWVfYm10Y210dHhfQk1UU2Vzc2lvbjwvam5kaS1uYW1lPgogICAgICAgICA8YmVhbi1jYWNoZT4KICAgICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT44PC9tYXgtY2FjaGUtc2l6ZT4KLQkgICAgPHJlc2l6ZS1xdWFudGl0eT40PC9yZXNpemUtcXVhbnRpdHk+CisgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+NDwvcmVzaXplLXF1YW50aXR5PgogICAgICAgICA8L2JlYW4tY2FjaGU+CiAgICAgIDwvZWpiPgogICAgICA8ZWpiPgpAQCAtMzMsNyArMzMsNyBAQAogICAgICAgICA8am5kaS1uYW1lPmVqYi9lamJfZWVfYm10Y210dHhfQ01UU2Vzc2lvbjwvam5kaS1uYW1lPgogICAgICAgICA8YmVhbi1jYWNoZT4KICAgICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT44PC9tYXgtY2FjaGUtc2l6ZT4KLQkgICAgPHJlc2l6ZS1xdWFudGl0eT40PC9yZXNpemUtcXVhbnRpdHk+CisgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+NDwvcmVzaXplLXF1YW50aXR5PgogICAgICAgICA8L2JlYW4tY2FjaGU+CiAgICAgIDwvZWpiPgogICAgPC9lbnRlcnByaXNlLWJlYW5zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9lamIvQk1UU2Vzc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9lamIvQk1UU2Vzc2lvbi5qYXZhCmluZGV4IDhiODgzN2QuLjM4NWJmNzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvZWpiL0JNVFNlc3Npb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2VqYi9CTVRTZXNzaW9uLmphdmEKQEAgLTI0LDI5ICsyNCwyOSBAQAogewogCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgaW50IGdldEFjdGl2YXRlQ291bnQoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBpbnQgZ2V0UGFzc2l2YXRlQ291bnQoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyB2b2lkIHN0YXJ0VHgoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyB2b2lkIGNvbW1pdFR4KCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgdm9pZCByb2xsYmFja1R4KCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgdm9pZCBpbmNyZW1lbnRDb3VudCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIHZvaWQgYWNjZXNzQ01UQmVhbigpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIENNVFNlc3Npb24gZ2V0Q01UU2Vzc2lvbigpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9lamIvQk1UU2Vzc2lvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvZWpiL0JNVFNlc3Npb25CZWFuLmphdmEKaW5kZXggMGM4MDFkZC4uOWEzMTk4NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9lamIvQk1UU2Vzc2lvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2VqYi9CTVRTZXNzaW9uQmVhbi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCiBwdWJsaWMgY2xhc3MgQk1UU2Vzc2lvbkJlYW4KLSAgICBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIAorICAgIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4KIHsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBTF9DSElMRF9TVUZGSVggPSAiX2NoaWxkTG9jYWwiOwpAQCAtMzksMTEgKzM5LDExIEBACiAKICAgICBwcml2YXRlIGludCBhY3RpdmF0ZUNvdW50OwogICAgIHByaXZhdGUgaW50IHBhc3NpdmF0ZUNvdW50OwotICAgIHByaXZhdGUgaW50CWNvdW50OworICAgIHByaXZhdGUgaW50ICAgIGNvdW50OwogCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCAgICAgICAgICAgICAgc2Vzc2lvbkN0eDsKICAgICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICBzZnNiTmFtZTsKLSAgICBwcml2YXRlIFVzZXJUcmFuc2FjdGlvbgkJdXNlclR4OworICAgIHByaXZhdGUgVXNlclRyYW5zYWN0aW9uICAgICAgICB1c2VyVHg7CiAKICAgICBwcml2YXRlIENNVFNlc3Npb25Ib21lIGNtdEhvbWU7CiAgICAgcHJpdmF0ZSBDTVRTZXNzaW9uIGNtdFNmc2I7CkBAIC01NSwxOSArNTUsMTkgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiSW4gU0ZTQi5lamJDcmVhdGUoKSBmb3IgbmFtZSAtPiAiICsgc2ZzYk5hbWUpOwogICAgICAgICB0aGlzLnNmc2JOYW1lID0gc2ZzYk5hbWU7CiAKLQl0cnkgewotCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBPYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9DTVRTZXNzaW9uSG9tZSIpOwotCSAgICBjbXRIb21lID0gKENNVFNlc3Npb25Ib21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdygKLQkJb2JqcmVmLCBDTVRTZXNzaW9uSG9tZS5jbGFzcyk7Ci0JICAgIGNtdFNmc2IgPSAoQ01UU2Vzc2lvbikgY210SG9tZS5jcmVhdGUoc2ZzYk5hbWUpOworICAgIHRyeSB7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0NNVFNlc3Npb25Ib21lIik7CisgICAgICAgIGNtdEhvbWUgPSAoQ01UU2Vzc2lvbkhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KAorICAgICAgICBvYmpyZWYsIENNVFNlc3Npb25Ib21lLmNsYXNzKTsKKyAgICAgICAgY210U2ZzYiA9IChDTVRTZXNzaW9uKSBjbXRIb21lLmNyZWF0ZShzZnNiTmFtZSk7CiAKLQkgICAgZm9yIChpbnQgaT0wOyBpPE1BWF9TSVpFOyBpKyspIHsKLQkJY210U2Vzc2lvbnNbaV0gPSAoQ01UU2Vzc2lvbikgY210SG9tZS5jcmVhdGUoc2ZzYk5hbWUgKyBpKTsKLQkgICAgfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LnRvU3RyaW5nKCkpOwotCX0KKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPE1BWF9TSVpFOyBpKyspIHsKKyAgICAgICAgY210U2Vzc2lvbnNbaV0gPSAoQ01UU2Vzc2lvbikgY210SG9tZS5jcmVhdGUoc2ZzYk5hbWUgKyBpKTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LnRvU3RyaW5nKCkpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CkBAIC04MCw2MyArODAsNjMgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzdGFydFR4KCkgewotCXRyeSB7Ci0JICAgIHVzZXJUeCA9IHNlc3Npb25DdHguZ2V0VXNlclRyYW5zYWN0aW9uKCk7Ci0JICAgIHVzZXJUeC5iZWdpbigpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LnRvU3RyaW5nKCkpOwotCX0KKyAgICB0cnkgeworICAgICAgICB1c2VyVHggPSBzZXNzaW9uQ3R4LmdldFVzZXJUcmFuc2FjdGlvbigpOworICAgICAgICB1c2VyVHguYmVnaW4oKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC50b1N0cmluZygpKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgY29tbWl0VHgoKSB7Ci0JdHJ5IHsKLQkgICAgdXNlclR4LmNvbW1pdCgpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LnRvU3RyaW5nKCkpOwotCX0KKyAgICB0cnkgeworICAgICAgICB1c2VyVHguY29tbWl0KCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXgudG9TdHJpbmcoKSk7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrVHgoKSB7Ci0JdHJ5IHsKLQkgICAgdXNlclR4LnJvbGxiYWNrKCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXgudG9TdHJpbmcoKSk7Ci0JfQorICAgIHRyeSB7CisgICAgICAgIHVzZXJUeC5yb2xsYmFjaygpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LnRvU3RyaW5nKCkpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBpbmNyZW1lbnRDb3VudCgpIHsKLQljb3VudCsrOworICAgIGNvdW50Kys7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgYWNjZXNzQ01UQmVhbigpCi0JdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbgorICAgIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24KICAgICB7Ci0JY210U2ZzYi5pbmNyZW1lbnRDb3VudCgpOwotCWZvciAoaW50IGk9MDsgaTxNQVhfU0laRTsgaSsrKSB7Ci0JICAgIGNtdFNlc3Npb25zW2ldLmluY3JlbWVudENvdW50KCk7Ci0JfQorICAgIGNtdFNmc2IuaW5jcmVtZW50Q291bnQoKTsKKyAgICBmb3IgKGludCBpPTA7IGk8TUFYX1NJWkU7IGkrKykgeworICAgICAgICBjbXRTZXNzaW9uc1tpXS5pbmNyZW1lbnRDb3VudCgpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgQ01UU2Vzc2lvbiBnZXRDTVRTZXNzaW9uKCkgewotCXJldHVybiBjbXRTZnNiOworICAgIHJldHVybiBjbXRTZnNiOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0QWN0aXZhdGVDb3VudCgpIHsKLQlyZXR1cm4gYWN0aXZhdGVDb3VudDsKKyAgICByZXR1cm4gYWN0aXZhdGVDb3VudDsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldFBhc3NpdmF0ZUNvdW50KCkgewotCXJldHVybiBwYXNzaXZhdGVDb3VudDsKKyAgICByZXR1cm4gcGFzc2l2YXRlQ291bnQ7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewotCWFjdGl2YXRlQ291bnQrKzsKKyAgICBhY3RpdmF0ZUNvdW50Kys7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewotCXBhc3NpdmF0ZUNvdW50Kys7CisgICAgcGFzc2l2YXRlQ291bnQrKzsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvZWpiL0JNVFNlc3Npb25Ib21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2VqYi9CTVRTZXNzaW9uSG9tZS5qYXZhCmluZGV4IDVhZjEyNjkuLjIzOWJhZDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvZWpiL0JNVFNlc3Npb25Ib21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9lamIvQk1UU2Vzc2lvbkhvbWUuamF2YQpAQCAtMjQsNiArMjQsNiBAQAogICAgIGV4dGVuZHMgRUpCSG9tZQogewogICAgIHB1YmxpYyBCTVRTZXNzaW9uIGNyZWF0ZShTdHJpbmcgc2ZzYk5hbWUpCi0JdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9lamIvQ01UU2Vzc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9lamIvQ01UU2Vzc2lvbi5qYXZhCmluZGV4IDgxMDVlNDQuLmExYzFlYjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvZWpiL0NNVFNlc3Npb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2VqYi9DTVRTZXNzaW9uLmphdmEKQEAgLTI0LDE1ICsyNCwxNSBAQAogewogCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgaW50IGdldEFjdGl2YXRlQ291bnQoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBpbnQgZ2V0UGFzc2l2YXRlQ291bnQoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyB2b2lkIGluY3JlbWVudENvdW50KCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvZWpiL0NNVFNlc3Npb25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2VqYi9DTVRTZXNzaW9uQmVhbi5qYXZhCmluZGV4IGI2Yjc4ZWIuLjA2ZWMxYzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvZWpiL0NNVFNlc3Npb25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9lamIvQ01UU2Vzc2lvbkJlYW4uamF2YQpAQCAtMzAsNyArMzAsNyBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIAogcHVibGljIGNsYXNzIENNVFNlc3Npb25CZWFuCi0gICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiAKKyAgICBpbXBsZW1lbnRzIFNlc3Npb25CZWFuCiB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQUxfQ0hJTERfU1VGRklYID0gIl9jaGlsZExvY2FsIjsKQEAgLTM5LDcgKzM5LDcgQEAKIAogICAgIHByaXZhdGUgaW50IGFjdGl2YXRlQ291bnQ7CiAgICAgcHJpdmF0ZSBpbnQgcGFzc2l2YXRlQ291bnQ7Ci0gICAgcHJpdmF0ZSBpbnQJY291bnQ7CisgICAgcHJpdmF0ZSBpbnQgICAgY291bnQ7CiAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0ICAgICAgICAgICAgICBzZXNzaW9uQ3R4OwogICAgIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgIHNmc2JOYW1lOwpAQCAtNTksMjUgKzU5LDI1IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW5jcmVtZW50Q291bnQoKSB7Ci0JY291bnQrKzsKKyAgICBjb3VudCsrOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0QWN0aXZhdGVDb3VudCgpIHsKLQlyZXR1cm4gYWN0aXZhdGVDb3VudDsKKyAgICByZXR1cm4gYWN0aXZhdGVDb3VudDsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldFBhc3NpdmF0ZUNvdW50KCkgewotCXJldHVybiBwYXNzaXZhdGVDb3VudDsKKyAgICByZXR1cm4gcGFzc2l2YXRlQ291bnQ7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewotCWFjdGl2YXRlQ291bnQrKzsKKyAgICBhY3RpdmF0ZUNvdW50Kys7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewotCXBhc3NpdmF0ZUNvdW50Kys7CisgICAgcGFzc2l2YXRlQ291bnQrKzsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvZWpiL0NNVFNlc3Npb25Ib21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2VqYi9DTVRTZXNzaW9uSG9tZS5qYXZhCmluZGV4IDFiNzJjNjAuLjVlNmUxODcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvZWpiL0NNVFNlc3Npb25Ib21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9lamIvQ01UU2Vzc2lvbkhvbWUuamF2YQpAQCAtMjQsNiArMjQsNiBAQAogICAgIGV4dGVuZHMgRUpCSG9tZQogewogICAgIHB1YmxpYyBDTVRTZXNzaW9uIGNyZWF0ZShTdHJpbmcgc2ZzYk5hbWUpCi0JdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCA2NmM0YjEyLi44M2ZiMjhjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgU2ltcGxlRW50aXR5Ow0KLQ0KLUNSRUFURSBUQUJMRSBTaW1wbGVFbnRpdHkgKA0KLSAgICBrZXkgICAgIGNoYXIoMTI4KSBub3QgbnVsbCwNCi0gICAgbmFtZSAgICBjaGFyKDEyOCkNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgU2ltcGxlRW50aXR5OworCitDUkVBVEUgVEFCTEUgU2ltcGxlRW50aXR5ICgKKyAgICBrZXkgICAgIGNoYXIoMTI4KSBub3QgbnVsbCwKKyAgICBuYW1lICAgIGNoYXIoMTI4KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDkzNWM0YTYuLjNmMjFhZWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgU2ltcGxlRW50aXR5Ow0KK0Ryb3AgdGFibGUgU2ltcGxlRW50aXR5OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDNjMDliZDMuLjVjZWY3OTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdHR4L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVlLXR4Y2hlY2twb2ludC1ibXR0eCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdHR4L2J1aWxkLnhtbAppbmRleCBlOWM2OTE0Mi4uNjRiOGQ0ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MsICoqLypTRlNCKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgIC0tPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPCEtLQogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KQEAgLTgxLDE3ICs4MSwxNyBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdHR4L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDFiM2FlYTAuLjhhYTQ1YmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgQk1UU2Vzc2lvbkhvbWUgaG9tZTsKQEAgLTQ0LDE0ICs0NCwxNCBAQAogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW2JtdHR4XSBET05FIGRvVGVzdCgpLi4uIik7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJibXR0eCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIGluaXRTRlNCKCk7ICAgICAvL2NyZWF0ZSBTRlNCcyAKLQljaGVja1BlcnNpc3RlZEZpcnN0VGltZSgpOworICAgICAgICBpbml0U0ZTQigpOyAgICAgLy9jcmVhdGUgU0ZTQnMKKyAgICBjaGVja1BlcnNpc3RlZEZpcnN0VGltZSgpOwogICAgICAgICB0eEFjY2Vzc0NoZWNrKCk7ICAgICAgIC8vYWNjZXNzIHRoZSBTRkJTCiAgICAgfQogCkBAIC03Niw5NiArNzYsOTYgQEAKIAogICAgIHB1YmxpYyB2b2lkIGNoZWNrUGVyc2lzdGVkRmlyc3RUaW1lKCkgewogICAgICAgICB0cnkgewotCSAgICBpbnQgcHJldkFjdENvdW50ID0gIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOwotCSAgICBpbnQgbm93QWN0Q291bnQgPSAgc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCk7CisgICAgICAgIGludCBwcmV2QWN0Q291bnQgPSAgc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCk7CisgICAgICAgIGludCBub3dBY3RDb3VudCA9ICBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKIAotCSAgICBzZnNiLnN0YXJ0VHgoKTsKLQkgICAgc2ZzYi5nZXRUeE5hbWUoKTsKLQkgICAgc2ZzYi5jb21taXRUeCgpOworICAgICAgICBzZnNiLnN0YXJ0VHgoKTsKKyAgICAgICAgc2ZzYi5nZXRUeE5hbWUoKTsKKyAgICAgICAgc2ZzYi5jb21taXRUeCgpOwogCi0JICAgIHNmc2Iuc3RhcnRUeCgpOwotCSAgICBzZnNiLmdldFR4TmFtZSgpOwotCSAgICBzZnNiLmNvbW1pdFR4KCk7CisgICAgICAgIHNmc2Iuc3RhcnRUeCgpOworICAgICAgICBzZnNiLmdldFR4TmFtZSgpOworICAgICAgICBzZnNiLmNvbW1pdFR4KCk7CiAKLQkgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBjaGVja1BlcnNpc3RlZEZpcnN0VGltZSIKLQkJICsgIigiICsgcHJldkFjdENvdW50ICsgIiA6ICIgKyBub3dBY3RDb3VudCArICIgOiAiCi0JCSArIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpICsgIikiLCBzdGF0LlBBU1MpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGNoZWNrUGVyc2lzdGVkRmlyc3RUaW1lIiwgc3RhdC5GQUlMKTsKLQl9CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgY2hlY2tQZXJzaXN0ZWRGaXJzdFRpbWUiCisgICAgICAgICArICIoIiArIHByZXZBY3RDb3VudCArICIgOiAiICsgbm93QWN0Q291bnQgKyAiIDogIgorICAgICAgICAgKyBzZnNiLmdldEFjdGl2YXRlQ291bnQoKSArICIpIiwgc3RhdC5QQVNTKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBjaGVja1BlcnNpc3RlZEZpcnN0VGltZSIsIHN0YXQuRkFJTCk7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHR4QWNjZXNzQ2hlY2soKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIGludCBwcmV2QWN0Q291bnQgPSAwOwotCSAgICBpbnQgbm93QWN0Q291bnQgPSAwOwotCSAgICAKLQkgICAgcHJldkFjdENvdW50ID0gIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOwotCSAgICBzZnNiLmdldE5hbWUoKTsKLQkgICAgbm93QWN0Q291bnQgPSAgc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCk7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgTm9uVHhOb25DaGVja3BvaW50ZWRNZXRob2QiCi0JCSsgIiAoIiArIHByZXZBY3RDb3VudCArICIgPT0gIiArIG5vd0FjdENvdW50ICsgIikiLAotCQkoKHByZXZBY3RDb3VudCA9PSBub3dBY3RDb3VudCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKKyAgICAgICAgaW50IHByZXZBY3RDb3VudCA9IDA7CisgICAgICAgIGludCBub3dBY3RDb3VudCA9IDA7CiAKLQkgICAgcHJldkFjdENvdW50ID0gIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOwotCSAgICBzZnNiLmNoZWNrcG9pbnQoKTsKLQkgICAgbm93QWN0Q291bnQgPSAgc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCk7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgTm9uVHhDaGVja3BvaW50ZWRNZXRob2QiCi0JCSsgIiAoIiArIHByZXZBY3RDb3VudCArICIgIT0gIiArIG5vd0FjdENvdW50ICsgIikiLAotCQkoKHByZXZBY3RDb3VudCAhPSBub3dBY3RDb3VudCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKKyAgICAgICAgcHJldkFjdENvdW50ID0gIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOworICAgICAgICBzZnNiLmdldE5hbWUoKTsKKyAgICAgICAgbm93QWN0Q291bnQgPSAgc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgTm9uVHhOb25DaGVja3BvaW50ZWRNZXRob2QiCisgICAgICAgICsgIiAoIiArIHByZXZBY3RDb3VudCArICIgPT0gIiArIG5vd0FjdENvdW50ICsgIikiLAorICAgICAgICAoKHByZXZBY3RDb3VudCA9PSBub3dBY3RDb3VudCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKIAotCSAgICBwcmV2QWN0Q291bnQgPSBub3dBY3RDb3VudDsKLQkgICAgc2ZzYi5zdGFydFR4KCk7Ci0JICAgIG5vd0FjdENvdW50ID0gIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOwotCSAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IHV0QmVnaW5DaGVjayIKLQkJKyAiICgiICsgcHJldkFjdENvdW50ICsgIiA9PSAiICsgbm93QWN0Q291bnQgKyAiKSIsCi0JCSgocHJldkFjdENvdW50ID09IG5vd0FjdENvdW50KSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOworICAgICAgICBwcmV2QWN0Q291bnQgPSAgc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCk7CisgICAgICAgIHNmc2IuY2hlY2twb2ludCgpOworICAgICAgICBub3dBY3RDb3VudCA9ICBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBOb25UeENoZWNrcG9pbnRlZE1ldGhvZCIKKyAgICAgICAgKyAiICgiICsgcHJldkFjdENvdW50ICsgIiAhPSAiICsgbm93QWN0Q291bnQgKyAiKSIsCisgICAgICAgICgocHJldkFjdENvdW50ICE9IG5vd0FjdENvdW50KSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwogCi0JICAgIHNmc2IuaW5jcmVtZW50Q291bnQoKTsKLQkgICAgbm93QWN0Q291bnQgPSAgc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCk7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgVHhCdXNpbmVzc01ldGhvZEluc2lkZVR4IgotCQkrICIgKCIgKyBwcmV2QWN0Q291bnQgKyAiID09ICIgKyBub3dBY3RDb3VudCArICIpIiwKLQkJKChwcmV2QWN0Q291bnQgPT0gbm93QWN0Q291bnQpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CisgICAgICAgIHByZXZBY3RDb3VudCA9IG5vd0FjdENvdW50OworICAgICAgICBzZnNiLnN0YXJ0VHgoKTsKKyAgICAgICAgbm93QWN0Q291bnQgPSAgc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgdXRCZWdpbkNoZWNrIgorICAgICAgICArICIgKCIgKyBwcmV2QWN0Q291bnQgKyAiID09ICIgKyBub3dBY3RDb3VudCArICIpIiwKKyAgICAgICAgKChwcmV2QWN0Q291bnQgPT0gbm93QWN0Q291bnQpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CiAKLQkgICAgc2ZzYi5nZXRUeE5hbWUoKTsKLQkgICAgbm93QWN0Q291bnQgPSAgc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCk7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgVHhNZXRob2RJbnNpZGVUeCIKLQkJKyAiICgiICsgcHJldkFjdENvdW50ICsgIiA9PSAiICsgbm93QWN0Q291bnQgKyAiKSIsCi0JCSgocHJldkFjdENvdW50ID09IG5vd0FjdENvdW50KSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOworICAgICAgICBzZnNiLmluY3JlbWVudENvdW50KCk7CisgICAgICAgIG5vd0FjdENvdW50ID0gIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IFR4QnVzaW5lc3NNZXRob2RJbnNpZGVUeCIKKyAgICAgICAgKyAiICgiICsgcHJldkFjdENvdW50ICsgIiA9PSAiICsgbm93QWN0Q291bnQgKyAiKSIsCisgICAgICAgICgocHJldkFjdENvdW50ID09IG5vd0FjdENvdW50KSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwogCi0JICAgIHNmc2IuZ2V0TmFtZSgpOwotCSAgICBub3dBY3RDb3VudCA9ICBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBOb25UeE1ldGhvZEluc2lkZVR4IgotCQkrICIgKCIgKyBwcmV2QWN0Q291bnQgKyAiID09ICIgKyBub3dBY3RDb3VudCArICIpIiwKLQkJKChwcmV2QWN0Q291bnQgPT0gbm93QWN0Q291bnQpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CisgICAgICAgIHNmc2IuZ2V0VHhOYW1lKCk7CisgICAgICAgIG5vd0FjdENvdW50ID0gIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IFR4TWV0aG9kSW5zaWRlVHgiCisgICAgICAgICsgIiAoIiArIHByZXZBY3RDb3VudCArICIgPT0gIiArIG5vd0FjdENvdW50ICsgIikiLAorICAgICAgICAoKHByZXZBY3RDb3VudCA9PSBub3dBY3RDb3VudCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKIAotCSAgICBzZnNiLmNoZWNrcG9pbnQoKTsKLQkgICAgbm93QWN0Q291bnQgPSAgc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCk7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgY2hlY2twb2ludGVkTWV0aG9kSW5zaWRlVHgiCi0JCSsgIiAoIiArIHByZXZBY3RDb3VudCArICIgPT0gIiArIG5vd0FjdENvdW50ICsgIikiLAotCQkoKHByZXZBY3RDb3VudCA9PSBub3dBY3RDb3VudCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKKyAgICAgICAgc2ZzYi5nZXROYW1lKCk7CisgICAgICAgIG5vd0FjdENvdW50ID0gIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IE5vblR4TWV0aG9kSW5zaWRlVHgiCisgICAgICAgICsgIiAoIiArIHByZXZBY3RDb3VudCArICIgPT0gIiArIG5vd0FjdENvdW50ICsgIikiLAorICAgICAgICAoKHByZXZBY3RDb3VudCA9PSBub3dBY3RDb3VudCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKIAotCSAgICBzZnNiLmNvbW1pdFR4KCk7Ci0JICAgIG5vd0FjdENvdW50ID0gIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOwotCSAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGNvbW1pdFR4Q2hlY2siCi0JCSsgIiAoIiArIHByZXZBY3RDb3VudCArICIgPT0gIiArIG5vd0FjdENvdW50ICsgIikiLAotCQkoKChwcmV2QWN0Q291bnQrMSkgPT0gbm93QWN0Q291bnQpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CisgICAgICAgIHNmc2IuY2hlY2twb2ludCgpOworICAgICAgICBub3dBY3RDb3VudCA9ICBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBjaGVja3BvaW50ZWRNZXRob2RJbnNpZGVUeCIKKyAgICAgICAgKyAiICgiICsgcHJldkFjdENvdW50ICsgIiA9PSAiICsgbm93QWN0Q291bnQgKyAiKSIsCisgICAgICAgICgocHJldkFjdENvdW50ID09IG5vd0FjdENvdW50KSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOworCisgICAgICAgIHNmc2IuY29tbWl0VHgoKTsKKyAgICAgICAgbm93QWN0Q291bnQgPSAgc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgY29tbWl0VHhDaGVjayIKKyAgICAgICAgKyAiICgiICsgcHJldkFjdENvdW50ICsgIiA9PSAiICsgbm93QWN0Q291bnQgKyAiKSIsCisgICAgICAgICgoKHByZXZBY3RDb3VudCsxKSA9PSBub3dBY3RDb3VudCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCB0eEFjY2Vzc0NoZWNrIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBzbGVlcEZvcihpbnQgc2Vjb25kcykgewotCVN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgIiArIHNlY29uZHMgKyAiIHNlY29uZHMgYmVmb3JlIGFjY2Vzc2luZy4uLiIpOwotCWZvciAoaW50IGk9MDsgaTxzZWNvbmRzOyBpKyspIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIiICsgKHNlY29uZHMgLSBpKSArICIgc2Vjb25kcyBsZWZ0Li4uIik7Ci0JICAgIHRyeSB7Ci0JCVRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMSoxMDAwKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIH0KLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciAiICsgc2Vjb25kcyArICIgc2Vjb25kcyBiZWZvcmUgYWNjZXNzaW5nLi4uIik7CisgICAgZm9yIChpbnQgaT0wOyBpPHNlY29uZHM7IGkrKykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyAoc2Vjb25kcyAtIGkpICsgIiBzZWNvbmRzIGxlZnQuLi4iKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxKjEwMDApOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgfQorICAgIH0KICAgICB9CiAKIH0gLy9DbGllbnR7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggYmUxNTY2Mi4uMjVhYjI4MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdHR4L2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yNSwxNiArMjUsMTYgQEAKICAgICAgICAgPGpuZGktbmFtZT5lamIvZWpiX2VlX2JtdHR4X0JNVFNlc3Npb248L2puZGktbmFtZT4KICAgICAgICAgPGJlYW4tY2FjaGU+CiAgICAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+ODwvbWF4LWNhY2hlLXNpemU+Ci0JICAgIDxyZXNpemUtcXVhbnRpdHk+NDwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICA8cmVzaXplLXF1YW50aXR5PjQ8L3Jlc2l6ZS1xdWFudGl0eT4KICAgICAgICAgPC9iZWFuLWNhY2hlPgotCTxjaGVja3BvaW50LWF0LWVuZC1vZi1tZXRob2Q+Ci0JICAgIDxtZXRob2Q+Ci0JCTxtZXRob2QtbmFtZT5jaGVja3BvaW50PC9tZXRob2QtbmFtZT4KLQkgICAgPC9tZXRob2Q+Ci0JICAgIDxtZXRob2Q+Ci0JCTxtZXRob2QtbmFtZT5jaGVja3BvaW50MjwvbWV0aG9kLW5hbWU+Ci0JICAgIDwvbWV0aG9kPgotCTwvY2hlY2twb2ludC1hdC1lbmQtb2YtbWV0aG9kPgorICAgIDxjaGVja3BvaW50LWF0LWVuZC1vZi1tZXRob2Q+CisgICAgICAgIDxtZXRob2Q+CisgICAgICAgIDxtZXRob2QtbmFtZT5jaGVja3BvaW50PC9tZXRob2QtbmFtZT4KKyAgICAgICAgPC9tZXRob2Q+CisgICAgICAgIDxtZXRob2Q+CisgICAgICAgIDxtZXRob2QtbmFtZT5jaGVja3BvaW50MjwvbWV0aG9kLW5hbWU+CisgICAgICAgIDwvbWV0aG9kPgorICAgIDwvY2hlY2twb2ludC1hdC1lbmQtb2YtbWV0aG9kPgogICAgICA8L2VqYj4KICAgIDwvZW50ZXJwcmlzZS1iZWFucz4KIDwvc3VuLWVqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdHR4L2VqYi9CTVRTZXNzaW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdHR4L2VqYi9CTVRTZXNzaW9uLmphdmEKaW5kZXggMTE3ZDFjYy4uZDJkYzVkZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9lamIvQk1UU2Vzc2lvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvZWpiL0JNVFNlc3Npb24uamF2YQpAQCAtMjQsMzMgKzI0LDMzIEBACiB7CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHhOYW1lKCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgdm9pZCBjaGVja3BvaW50KCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgdm9pZCBjaGVja3BvaW50MigpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGludCBnZXRBY3RpdmF0ZUNvdW50KCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgaW50IGdldFBhc3NpdmF0ZUNvdW50KCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgdm9pZCBzdGFydFR4KCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgdm9pZCBjb21taXRUeCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2tUeCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIHZvaWQgaW5jcmVtZW50Q291bnQoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9lamIvQk1UU2Vzc2lvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvZWpiL0JNVFNlc3Npb25CZWFuLmphdmEKaW5kZXggYWRjYzE5OC4uYTgzOGFkMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9lamIvQk1UU2Vzc2lvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdHR4L2VqYi9CTVRTZXNzaW9uQmVhbi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCiBwdWJsaWMgY2xhc3MgQk1UU2Vzc2lvbkJlYW4KLSAgICBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIAorICAgIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4KIHsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBTF9DSElMRF9TVUZGSVggPSAiX2NoaWxkTG9jYWwiOwpAQCAtMzksMTEgKzM5LDExIEBACiAKICAgICBwcml2YXRlIGludCBhY3RpdmF0ZUNvdW50OwogICAgIHByaXZhdGUgaW50IHBhc3NpdmF0ZUNvdW50OwotICAgIHByaXZhdGUgaW50CWNvdW50OworICAgIHByaXZhdGUgaW50ICAgIGNvdW50OwogCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCAgICAgICAgICAgICAgc2Vzc2lvbkN0eDsKICAgICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICBzZnNiTmFtZTsKLSAgICBwcml2YXRlIFVzZXJUcmFuc2FjdGlvbgkJdXNlclR4OworICAgIHByaXZhdGUgVXNlclRyYW5zYWN0aW9uICAgICAgICB1c2VyVHg7CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoU3RyaW5nIHNmc2JOYW1lKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkluIFNGU0IuZWpiQ3JlYXRlKCkgZm9yIG5hbWUgLT4gIiArIHNmc2JOYW1lKTsKQEAgLTcwLDUwICs3MCw1MCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHN0YXJ0VHgoKSB7Ci0JdHJ5IHsKLQkgICAgdXNlclR4ID0gc2Vzc2lvbkN0eC5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKLQkgICAgdXNlclR4LmJlZ2luKCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXgudG9TdHJpbmcoKSk7Ci0JfQorICAgIHRyeSB7CisgICAgICAgIHVzZXJUeCA9IHNlc3Npb25DdHguZ2V0VXNlclRyYW5zYWN0aW9uKCk7CisgICAgICAgIHVzZXJUeC5iZWdpbigpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LnRvU3RyaW5nKCkpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBjb21taXRUeCgpIHsKLQl0cnkgewotCSAgICB1c2VyVHguY29tbWl0KCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXgudG9TdHJpbmcoKSk7Ci0JfQorICAgIHRyeSB7CisgICAgICAgIHVzZXJUeC5jb21taXQoKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC50b1N0cmluZygpKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2tUeCgpIHsKLQl0cnkgewotCSAgICB1c2VyVHgucm9sbGJhY2soKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC50b1N0cmluZygpKTsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgdXNlclR4LnJvbGxiYWNrKCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXgudG9TdHJpbmcoKSk7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGluY3JlbWVudENvdW50KCkgewotCWNvdW50Kys7CisgICAgY291bnQrKzsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldEFjdGl2YXRlQ291bnQoKSB7Ci0JcmV0dXJuIGFjdGl2YXRlQ291bnQ7CisgICAgcmV0dXJuIGFjdGl2YXRlQ291bnQ7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRQYXNzaXZhdGVDb3VudCgpIHsKLQlyZXR1cm4gcGFzc2l2YXRlQ291bnQ7CisgICAgcmV0dXJuIHBhc3NpdmF0ZUNvdW50OwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKLQlhY3RpdmF0ZUNvdW50Kys7CisgICAgYWN0aXZhdGVDb3VudCsrOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKLQlwYXNzaXZhdGVDb3VudCsrOworICAgIHBhc3NpdmF0ZUNvdW50Kys7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdHR4L2VqYi9CTVRTZXNzaW9uSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9lamIvQk1UU2Vzc2lvbkhvbWUuamF2YQppbmRleCA1YWYxMjY5Li4yMzliYWQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdHR4L2VqYi9CTVRTZXNzaW9uSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvZWpiL0JNVFNlc3Npb25Ib21lLmphdmEKQEAgLTI0LDYgKzI0LDYgQEAKICAgICBleHRlbmRzIEVKQkhvbWUKIHsKICAgICBwdWJsaWMgQk1UU2Vzc2lvbiBjcmVhdGUoU3RyaW5nIHNmc2JOYW1lKQotCXRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggNjZjNGIxMi4uODNmYjI4YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIFNpbXBsZUVudGl0eTsNCi0NCi1DUkVBVEUgVEFCTEUgU2ltcGxlRW50aXR5ICgNCi0gICAga2V5ICAgICBjaGFyKDEyOCkgbm90IG51bGwsDQotICAgIG5hbWUgICAgY2hhcigxMjgpDQotKTsNCi0NCitEcm9wIHRhYmxlIFNpbXBsZUVudGl0eTsKKworQ1JFQVRFIFRBQkxFIFNpbXBsZUVudGl0eSAoCisgICAga2V5ICAgICBjaGFyKDEyOCkgbm90IG51bGwsCisgICAgbmFtZSAgICBjaGFyKDEyOCkKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA5MzVjNGE2Li4zZjIxYWViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdHR4L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIFNpbXBsZUVudGl0eTsNCitEcm9wIHRhYmxlIFNpbXBsZUVudGl0eTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9idWlsZC54bWwKaW5kZXggZDI4NmU5MC4uNmMzNmU2MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9idWlsZC54bWwKQEAgLTUzLDkgKzUzLDkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWVlIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lZSB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggN2M5YmZhMi4uM2ZjNmY2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvc2ltcGxldHgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWUtdHhjaGVja3BvaW50LXNpbXBsZXR4Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvc2ltcGxldHgvYnVpbGQueG1sCmluZGV4IGVmMTZhMjYuLjc1YzcwMDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvc2ltcGxldHgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvc2ltcGxldHgvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzLCAqKi8qU0ZTQiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAtLT4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwhLS0KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CkBAIC04MSwxNyArODEsMTcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L2NsaWVudC9DbGllbnQuamF2YQppbmRleCBlMzkxN2JmLi41ZjFlYmI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIFNGU0JIb21lIGhvbWU7CkBAIC00NCwxNyArNDQsMTcgQEAKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltzaW1wbGV0eENsaWVudF0gRE9ORSBkb1Rlc3QoKS4uLiIpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgic2ltcGxldHgiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICBpbml0U0ZTQkxpc3QoKTsgICAgIC8vY3JlYXRlIFNGU0JzIAorICAgICAgICBpbml0U0ZTQkxpc3QoKTsgICAgIC8vY3JlYXRlIFNGU0JzCiAgICAgICAgIGNtdE5vblR4QWNjZXNzKCk7ICAgICAgIC8vYWNjZXNzIHRoZSBTRkJTCiAgICAgICAgIGNtdFR4QWNjZXNzKCk7ICAgICAgIC8vYWNjZXNzIHRoZSBTRkJTCiAgICAgICAgIGNtdE5vblR4QWNjZXNzKHNmc2IpOyAgICAgICAvL2FjY2VzcyB0aGUgU0ZCUwotCXJlbW92ZVRlc3QoKTsKKyAgICByZW1vdmVUZXN0KCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGluaXRTRlNCTGlzdCgpIHsKQEAgLTc4LDEyICs3OCwxMiBAQAogCiAgICAgcHVibGljIHZvaWQgY210VHhBY2Nlc3MoKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIGludCBwcmV2Q291bnQgPSBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKLQkgICAgU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldFR4TmFtZSgpOwotCSAgICBib29sZWFuIG5hbWVPSyA9IF9zZnNiUHJlZml4LmVxdWFsc0lnbm9yZUNhc2UocmV0cmlldmVkTmFtZSk7Ci0JICAgIGludCBub3dDb3VudCA9IHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOwotCSAgICBib29sZWFuIGFjdENvdW50T0sgPSAocHJldkNvdW50KzEgPT0gbm93Q291bnQpOwotCSAgICBTdHJpbmcgbXNnID0gIigiICsgcHJldkNvdW50ICsgIisxID09ICIgKyBub3dDb3VudCArICIpIjsKKyAgICAgICAgaW50IHByZXZDb3VudCA9IHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOworICAgICAgICBTdHJpbmcgcmV0cmlldmVkTmFtZSA9IHNmc2IuZ2V0VHhOYW1lKCk7CisgICAgICAgIGJvb2xlYW4gbmFtZU9LID0gX3Nmc2JQcmVmaXguZXF1YWxzSWdub3JlQ2FzZShyZXRyaWV2ZWROYW1lKTsKKyAgICAgICAgaW50IG5vd0NvdW50ID0gc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCk7CisgICAgICAgIGJvb2xlYW4gYWN0Q291bnRPSyA9IChwcmV2Q291bnQrMSA9PSBub3dDb3VudCk7CisgICAgICAgIFN0cmluZyBtc2cgPSAiKCIgKyBwcmV2Q291bnQgKyAiKzEgPT0gIiArIG5vd0NvdW50ICsgIikiOwogICAgICAgICAgICAgaWYgKG5hbWVPSyAmJiBhY3RDb3VudE9LKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBjbXRUeEFjY2VzcyAiICsgbXNnLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTk3LDEyICs5NywxMiBAQAogCiAgICAgcHVibGljIHZvaWQgY210Tm9uVHhBY2Nlc3MoKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIGludCBwcmV2Q291bnQgPSBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKLQkgICAgU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldE5hbWUoKTsKLQkgICAgYm9vbGVhbiBuYW1lT0sgPSBfc2ZzYlByZWZpeC5lcXVhbHNJZ25vcmVDYXNlKHJldHJpZXZlZE5hbWUpOwotCSAgICBpbnQgbm93Q291bnQgPSBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKLQkgICAgYm9vbGVhbiBhY3RDb3VudE9LID0gKHByZXZDb3VudCA9PSBub3dDb3VudCk7Ci0JICAgIFN0cmluZyBtc2cgPSAiKCIgKyBwcmV2Q291bnQgKyAiID09ICIgKyBub3dDb3VudCArICIpIjsKKyAgICAgICAgaW50IHByZXZDb3VudCA9IHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOworICAgICAgICBTdHJpbmcgcmV0cmlldmVkTmFtZSA9IHNmc2IuZ2V0TmFtZSgpOworICAgICAgICBib29sZWFuIG5hbWVPSyA9IF9zZnNiUHJlZml4LmVxdWFsc0lnbm9yZUNhc2UocmV0cmlldmVkTmFtZSk7CisgICAgICAgIGludCBub3dDb3VudCA9IHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOworICAgICAgICBib29sZWFuIGFjdENvdW50T0sgPSAocHJldkNvdW50ID09IG5vd0NvdW50KTsKKyAgICAgICAgU3RyaW5nIG1zZyA9ICIoIiArIHByZXZDb3VudCArICIgPT0gIiArIG5vd0NvdW50ICsgIikiOwogICAgICAgICAgICAgaWYgKG5hbWVPSyAmJiBhY3RDb3VudE9LKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBjbXROb25UeEFjY2VzcyAiICsgbXNnLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTExNiw2MyArMTE2LDYzIEBACiAKICAgICBwdWJsaWMgdm9pZCBjbXROb25UeEFjY2VzcyhTRlNCIHNmc2IpIHsKICAgICAgICAgZm9yIChpbnQgaT0wOyBpPDIwMDsgaSsrKSB7Ci0JdHJ5IHsKLQkgICAgaW50IHByZXZDb3VudCA9IHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOwotCSAgICBTdHJpbmcgcmV0cmlldmVkTmFtZSA9IHNmc2IuZ2V0TmFtZSgpOwotCSAgICBib29sZWFuIG5hbWVPSyA9IF9zZnNiUHJlZml4LmVxdWFsc0lnbm9yZUNhc2UocmV0cmlldmVkTmFtZSk7Ci0JICAgIGludCBub3dDb3VudCA9IHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOwotCSAgICBib29sZWFuIGFjdENvdW50T0sgPSAocHJldkNvdW50ID09IG5vd0NvdW50KTsKLQkgICAgU3RyaW5nIG1zZyA9ICIoIiArIHByZXZDb3VudCArICIgPT0gIiArIG5vd0NvdW50ICsgIikiOworICAgIHRyeSB7CisgICAgICAgIGludCBwcmV2Q291bnQgPSBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKKyAgICAgICAgU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldE5hbWUoKTsKKyAgICAgICAgYm9vbGVhbiBuYW1lT0sgPSBfc2ZzYlByZWZpeC5lcXVhbHNJZ25vcmVDYXNlKHJldHJpZXZlZE5hbWUpOworICAgICAgICBpbnQgbm93Q291bnQgPSBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKKyAgICAgICAgYm9vbGVhbiBhY3RDb3VudE9LID0gKHByZXZDb3VudCA9PSBub3dDb3VudCk7CisgICAgICAgIFN0cmluZyBtc2cgPSAiKCIgKyBwcmV2Q291bnQgKyAiID09ICIgKyBub3dDb3VudCArICIpIjsKICAgICAgICAgICAgIGlmIChuYW1lT0sgJiYgYWN0Q291bnRPSykgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgY210Tm9uVHhBY2Nlc3NfMiAiICsgbXNnLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLQkJc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBjbXROb25UeEFjY2Vzc18yIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBjbXROb25UeEFjY2Vzc18yIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJbIiArIGkgKyAiXSBjbXROb25UeEFjY2Vzc18yIHN0YXR1czogIiArIChuYW1lT0sgJiYgYWN0Q291bnRPSykpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsiICsgaSArICJdIGNtdE5vblR4QWNjZXNzXzIgc3RhdHVzOiAiICsgKG5hbWVPSyAmJiBhY3RDb3VudE9LKSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBjbXROb25UeEFjY2Vzc18yIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotCXNsZWVwRm9yKDEsIGZhbHNlKTsKLQl9CisgICAgc2xlZXBGb3IoMSwgZmFsc2UpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCByZW1vdmVUZXN0KCkgewotCVNGU0Igc2ZzYiA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKLQl0cnkgewotCSAgICBTdHJpbmcgbXlOYW1lID0gIl8yXyIgKyBfc2ZzYlByZWZpeCArICJfMl8iOwotCSAgICBzZnNiID0gKFNGU0IpIGhvbWUuY3JlYXRlKG15TmFtZSk7Ci0JICAgIFN0cmluZyByZXRyaWV2ZWROYW1lID0gc2ZzYi5nZXRUeE5hbWUoKTsKLQkgICAgYm9vbGVhbiBuYW1lT0sgPSBteU5hbWUuZXF1YWxzSWdub3JlQ2FzZShyZXRyaWV2ZWROYW1lKTsKLQkgICAgc2ZzYi5yZW1vdmUoKTsKLQkgICAgdHJ5IHsKLQkJc2ZzYi5nZXRUeE5hbWUoKTsKLQkJcGFzc2VkID0gZmFsc2U7CSAgICAvL0V4cGVjdGluZyBhbiBleGNlcHRpb24KLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCXBhc3NlZCA9IHRydWU7Ci0JICAgIH0KKyAgICBTRlNCIHNmc2IgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgU3RyaW5nIG15TmFtZSA9ICJfMl8iICsgX3Nmc2JQcmVmaXggKyAiXzJfIjsKKyAgICAgICAgc2ZzYiA9IChTRlNCKSBob21lLmNyZWF0ZShteU5hbWUpOworICAgICAgICBTdHJpbmcgcmV0cmlldmVkTmFtZSA9IHNmc2IuZ2V0VHhOYW1lKCk7CisgICAgICAgIGJvb2xlYW4gbmFtZU9LID0gbXlOYW1lLmVxdWFsc0lnbm9yZUNhc2UocmV0cmlldmVkTmFtZSk7CisgICAgICAgIHNmc2IucmVtb3ZlKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgIHNmc2IuZ2V0VHhOYW1lKCk7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOyAgICAgICAgLy9FeHBlY3RpbmcgYW4gZXhjZXB0aW9uCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgICAgICB9CiAgICAgICAgICAgICBpZiAocGFzc2VkKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCByZW1vdmVUZXN0XzEgIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0JCXN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgcmVtb3ZlVGVzdF8xIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCByZW1vdmVUZXN0XzEiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQogCi0JICAgIHBhc3NlZCA9IGZhbHNlOwotCSAgICBteU5hbWUgPSAiXzRfIiArIF9zZnNiUHJlZml4ICsgIl80XyI7Ci0JICAgIHNmc2IgPSAoU0ZTQikgaG9tZS5jcmVhdGUobXlOYW1lKTsKLQkgICAgcmV0cmlldmVkTmFtZSA9IHNmc2IuZ2V0TmFtZSgpOwotCSAgICBuYW1lT0sgPSBteU5hbWUuZXF1YWxzSWdub3JlQ2FzZShyZXRyaWV2ZWROYW1lKTsKLQkgICAgc2ZzYi5yZW1vdmUoKTsKLQkgICAgdHJ5IHsKLQkJc2ZzYi5nZXROYW1lKCk7Ci0JCXBhc3NlZCA9IGZhbHNlOwkgICAgLy9FeHBlY3RpbmcgYW4gZXhjZXB0aW9uCi0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQlwYXNzZWQgPSB0cnVlOwotCSAgICB9CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICBteU5hbWUgPSAiXzRfIiArIF9zZnNiUHJlZml4ICsgIl80XyI7CisgICAgICAgIHNmc2IgPSAoU0ZTQikgaG9tZS5jcmVhdGUobXlOYW1lKTsKKyAgICAgICAgcmV0cmlldmVkTmFtZSA9IHNmc2IuZ2V0TmFtZSgpOworICAgICAgICBuYW1lT0sgPSBteU5hbWUuZXF1YWxzSWdub3JlQ2FzZShyZXRyaWV2ZWROYW1lKTsKKyAgICAgICAgc2ZzYi5yZW1vdmUoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgc2ZzYi5nZXROYW1lKCk7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOyAgICAgICAgLy9FeHBlY3RpbmcgYW4gZXhjZXB0aW9uCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgICAgICB9CiAgICAgICAgICAgICBpZiAocGFzc2VkKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCByZW1vdmVUZXN0XzIgIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0JCXN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgcmVtb3ZlVGVzdF8yIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCByZW1vdmVUZXN0XzIiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtMTgxLDIyICsxODEsMjIgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgc2xlZXBGb3IoaW50IHNlY29uZHMpIHsKLQlzbGVlcEZvcihzZWNvbmRzLCB0cnVlKTsKKyAgICBzbGVlcEZvcihzZWNvbmRzLCB0cnVlKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgc2xlZXBGb3IoaW50IHNlY29uZHMsIGJvb2xlYW4gdmVyYm9zZSkgewotCWlmICh2ZXJib3NlKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgIiArIHNlY29uZHMgKyAiIGJlZm9yZSBhY2Nlc3NpbmcuLi4iKTsKLQl9Ci0JZm9yIChpbnQgaT0wOyBpPHNlY29uZHM7IGkrKykgewotCSAgICBpZiAodmVyYm9zZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyAoc2Vjb25kcyAtIGkpICsgIiBzZWNvbmRzIGxlZnQuLi4iKTsKLQkgICAgfQotCSAgICB0cnkgewotCQlUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEqMTAwMCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICB9Ci0JfQorICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgIiArIHNlY29uZHMgKyAiIGJlZm9yZSBhY2Nlc3NpbmcuLi4iKTsKKyAgICB9CisgICAgZm9yIChpbnQgaT0wOyBpPHNlY29uZHM7IGkrKykgeworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyAoc2Vjb25kcyAtIGkpICsgIiBzZWNvbmRzIGxlZnQuLi4iKTsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEqMTAwMCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICB9CisgICAgfQogICAgIH0KIAogfSAvL0NsaWVudHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCA4NzJkNzRjLi4zZmNjZGUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvc2ltcGxldHgvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI1LDggKzI1LDggQEAKICAgICAgICAgPGpuZGktbmFtZT5lamIvZWpiX2VlX3R4Y2hlY2twb2ludF9zaW1wbGV0eF9TRlNCPC9qbmRpLW5hbWU+CiAgICAgICAgIDxiZWFuLWNhY2hlPgogICAgICAgICAgICAgPG1heC1jYWNoZS1zaXplPjg8L21heC1jYWNoZS1zaXplPgotCSAgICA8cmVzaXplLXF1YW50aXR5PjQ8L3Jlc2l6ZS1xdWFudGl0eT4KLQkgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjYwPC9yZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT40PC9yZXNpemUtcXVhbnRpdHk+CisgICAgICAgIDxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICAgIDwvYmVhbi1jYWNoZT4KICAgICAgPC9lamI+CiAgICA8L2VudGVycHJpc2UtYmVhbnM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L2VqYi9TRlNCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L2VqYi9TRlNCLmphdmEKaW5kZXggNTAyODhiNS4uOTM5YzEyYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9lamIvU0ZTQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvc2ltcGxldHgvZWpiL1NGU0IuamF2YQpAQCAtMjQsMTUgKzI0LDE1IEBACiB7CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHhOYW1lKCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgaW50IGdldEFjdGl2YXRlQ291bnQoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBpbnQgZ2V0UGFzc2l2YXRlQ291bnQoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9lamIvU0ZTQkVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9lamIvU0ZTQkVKQi5qYXZhCmluZGV4IDI1MzE0OWIuLmI0YjIzODggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvc2ltcGxldHgvZWpiL1NGU0JFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L2VqYi9TRlNCRUpCLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIHB1YmxpYyBjbGFzcyBTRlNCRUpCCi0gICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiAKKyAgICBpbXBsZW1lbnRzIFNlc3Npb25CZWFuCiB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQUxfQ0hJTERfU1VGRklYID0gIl9jaGlsZExvY2FsIjsKQEAgLTYwLDIxICs2MCwyMSBAQAogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0QWN0aXZhdGVDb3VudCgpIHsKLQlyZXR1cm4gYWN0aXZhdGVDb3VudDsKKyAgICByZXR1cm4gYWN0aXZhdGVDb3VudDsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldFBhc3NpdmF0ZUNvdW50KCkgewotCXJldHVybiBwYXNzaXZhdGVDb3VudDsKKyAgICByZXR1cm4gcGFzc2l2YXRlQ291bnQ7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewotCWFjdGl2YXRlQ291bnQrKzsKKyAgICBhY3RpdmF0ZUNvdW50Kys7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewotCXBhc3NpdmF0ZUNvdW50Kys7CisgICAgcGFzc2l2YXRlQ291bnQrKzsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvc2ltcGxldHgvZWpiL1NGU0JIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L2VqYi9TRlNCSG9tZS5qYXZhCmluZGV4IDgyYTE1ZTkuLmZlOGJkNDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvc2ltcGxldHgvZWpiL1NGU0JIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9lamIvU0ZTQkhvbWUuamF2YQpAQCAtMjQsNiArMjQsNiBAQAogICAgIGV4dGVuZHMgRUpCSG9tZQogewogICAgIHB1YmxpYyBTRlNCIGNyZWF0ZShTdHJpbmcgc2ZzYk5hbWUpCi0JdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCA2NmM0YjEyLi44M2ZiMjhjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgU2ltcGxlRW50aXR5Ow0KLQ0KLUNSRUFURSBUQUJMRSBTaW1wbGVFbnRpdHkgKA0KLSAgICBrZXkgICAgIGNoYXIoMTI4KSBub3QgbnVsbCwNCi0gICAgbmFtZSAgICBjaGFyKDEyOCkNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgU2ltcGxlRW50aXR5OworCitDUkVBVEUgVEFCTEUgU2ltcGxlRW50aXR5ICgKKyAgICBrZXkgICAgIGNoYXIoMTI4KSBub3QgbnVsbCwKKyAgICBuYW1lICAgIGNoYXIoMTI4KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDkzNWM0YTYuLjNmMjFhZWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvc2ltcGxldHgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgU2ltcGxlRW50aXR5Ow0KK0Ryb3AgdGFibGUgU2ltcGxlRW50aXR5OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2FsbG93ZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9hbGxvd2VkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDg3M2VlMi4uYTA5NDFiNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2FsbG93ZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvYWxsb3dlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYjMwLWFsbG93ZWQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9hbGxvd2VkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9hbGxvd2VkL2J1aWxkLnhtbAppbmRleCA1OGNlZmViLi43ZDYyMTU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvYWxsb3dlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2FsbG93ZWQvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NywxNCArNDcsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovU2xlc3MuY2xhc3MsICoqLypPcGVyYXRpb24uY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02MiwxMCArNjIsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2FsbG93ZWQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2FsbG93ZWQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDhmNDVjYTUuLjU5MmVhM2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9hbGxvd2VkL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvYWxsb3dlZC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTM0LDM5ICszNCwzOSBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWVqYjMwLWFsbG93ZWQtc2Vzc2lvbklEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU2xlc3Mgc2xlc3M7CiAKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKICAgICAgICAgdHJ5IHsKLQkgICAgc2xlc3Muc2F5SGVsbG8oKTsKKyAgICAgICAgc2xlc3Muc2F5SGVsbG8oKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBzZXR1cCIsIHN0YXQuUEFTUyk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgc2V0dXAiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOworICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CiAKICAgICAgICAgdHJ5IHsKLQkgICAgcmVzdWx0ID0gc2xlc3MubG9va3VwVXNlclRyYW5zYWN0aW9uRnJvbUJNVEJlYW4oKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgcmVzdWx0ID0gc2xlc3MubG9va3VwVXNlclRyYW5zYWN0aW9uRnJvbUJNVEJlYW4oKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBCTVRPcF9FeCIsIHN0YXQuRkFJTCk7Ci0JfQorICAgIH0KICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIEJNVFVzZXJUeCIsCi0JCShyZXN1bHQgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKKyAgICAgICAgKHJlc3VsdCA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwogCiAgICAgICAgIHRyeSB7Ci0JICAgIHJlc3VsdCA9IHNsZXNzLmxvb2t1cFVzZXJUcmFuc2FjdGlvbkZyb21DTVRCZWFuKCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHJlc3VsdCA9IHNsZXNzLmxvb2t1cFVzZXJUcmFuc2FjdGlvbkZyb21DTVRCZWFuKCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgQ01UT3BfRXgiLCBzdGF0LkZBSUwpOwotCX0KKyAgICB9CiAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBDTVRVc2VyVHgiLAotCQkocmVzdWx0ID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CisgICAgICAgIChyZXN1bHQgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2FsbG93ZWQvZWpiL2NvbS9zdW4vZWpiL2RldnRlc3QvU2xlc3NCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvYWxsb3dlZC9lamIvY29tL3N1bi9lamIvZGV2dGVzdC9TbGVzc0JlYW4uamF2YQppbmRleCBkMjZjZDAzLi40Njg2MmFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvYWxsb3dlZC9lamIvY29tL3N1bi9lamIvZGV2dGVzdC9TbGVzc0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvYWxsb3dlZC9lamIvY29tL3N1bi9lamIvZGV2dGVzdC9TbGVzc0JlYW4uamF2YQpAQCAtMzAsMTUgKzMwLDE1IEBACiAgICAgcHJpdmF0ZSBDTVRPcGVyYXRpb24gY210T3A7CiAKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKCkgewotCXJldHVybiAiSGVsbG8iOworICAgIHJldHVybiAiSGVsbG8iOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGxvb2t1cFVzZXJUcmFuc2FjdGlvbkZyb21DTVRCZWFuKCkgewotCXJldHVybiBjbXRPcC5sb29rdXBVc2VyVHJhbnNhY3Rpb24oKTsKKyAgICByZXR1cm4gY210T3AubG9va3VwVXNlclRyYW5zYWN0aW9uKCk7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gbG9va3VwVXNlclRyYW5zYWN0aW9uRnJvbUJNVEJlYW4oKSB7Ci0JcmV0dXJuIGJtdE9wLmxvb2t1cFVzZXJUcmFuc2FjdGlvbigpOworICAgIHJldHVybiBibXRPcC5sb29rdXBVc2VyVHJhbnNhY3Rpb24oKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvYnVpbGQueG1sCmluZGV4IGJiZmRhNDMuLmYxMTc2MzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2J1aWxkLnhtbApAQCAtMjksMTIgKzI5LDEyIEBACiAgICAgJnJlcG9ydGluZzsKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KLQk8IS0tLSBjdXJyZW50bHkgdXNlIFNFIGNsaWVudCAuIHN3aXRjaCBiYWNrIHRvIGFwcGNsaWVudCAtLT4KKyAgICA8IS0tLSBjdXJyZW50bHkgdXNlIFNFIGNsaWVudCAuIHN3aXRjaCBiYWNrIHRvIGFwcGNsaWVudCAtLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhbGxvd2VkIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xpZW50dmlldyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImhlbGxvIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iaW50ZXJjZXB0b3JzIi8+Ci0gICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGVyc2lzdGVuY2UiLz4gCisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGVyc2lzdGVuY2UiLz4KIAogICAgIDwvdGFyZ2V0PgogCkBAIC02OSw5ICs2OSw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamIzMCB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWpiMzAgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGRjOWQ3MWMuLjc0OTg5ZjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIyICsxNSwyMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMwLWNsaWVudHZpZXctYWRhcHRlZCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuY2xpZW50dmlldy5hZGFwdGVkLmNsaWVudC5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9idWlsZC54bWwKaW5kZXggMGY5NjRiMC4uNDNmZmM0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ29tbW9uKi5jbGFzcywqKi9EdW1teSouY2xhc3MsKiovSGVsbG8qLmNsYXNzLCoqL1NmdWwqLmNsYXNzLCoqL1NsZXNzKi5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9EdW1teVNsZXNzKi5jbGFzcywqKi9EdW1teVJlbW90ZSouY2xhc3MsKiovSGVsbG8uY2xhc3MsKiovU2Z1bFJlbW90ZUhvbWUuY2xhc3MsKiovU2xlc3NSZW1vdGVIb21lLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsNyArNjMsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CkBAIC03MSwxMCArNzEsMTAgQEAKICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgogCi0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYTlhNzEyYy4uMzU4NDg4ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgc3RhdGljIGZpbmFsIGludCBOVU1fRVhUUkFfSEVMTE9TID0gNjsKQEAgLTQxLDI2ICs0MSwyNiBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWVqYjMwLWNsaWVudHZpZXctYWRhcHRlZElEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogCiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIFNldDxIZWxsbz4gaGVsbG9zID0gbmV3IEhhc2hTZXQ8SGVsbG8+KCk7CiAKICAgICAgICAgdHJ5IHsKIAotCSAgICBTdHJpbmcgbG9va3VwU3RyID0gCi0JCSJqYXZhOmNvbXAvZW52L2NvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuY2xpZW50dmlldy5hZGFwdGVkLmNsaWVudC5DbGllbnQvaHIiOworICAgICAgICBTdHJpbmcgbG9va3VwU3RyID0KKyAgICAgICAgImphdmE6Y29tcC9lbnYvY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5jbGllbnR2aWV3LmFkYXB0ZWQuY2xpZW50LkNsaWVudC9ociI7CiAKLQkgICAgaWYoIGhyID09IG51bGwgKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gc3RhbmQtYWxvbmUgbW9kZSIpOwotCQlsb29rdXBTdHIgPSAiZWpiL2VqYl9lamIzMF9jbGllbnR2aWV3X2FkYXB0ZWRfSGVsbG8iOwotCQlociA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKGxvb2t1cFN0cik7Ci0JICAgIH0KKyAgICAgICAgaWYoIGhyID09IG51bGwgKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gc3RhbmQtYWxvbmUgbW9kZSIpOworICAgICAgICBsb29rdXBTdHIgPSAiZWpiL2VqYl9lamIzMF9jbGllbnR2aWV3X2FkYXB0ZWRfSGVsbG8iOworICAgICAgICBociA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKGxvb2t1cFN0cik7CisgICAgICAgIH0KIAogICAgICAgICAgICAgaGVsbG9zLmFkZChocik7CiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwpAQCAtNzYsMjMgKzc2LDIzIEBACiAgICAgICAgICAgICBpbnQgbnVtUGFzc2l2YXRlZEFjdGl2YXRlZCA9IDA7CiAKICAgICAgICAgICAgIGZvcihIZWxsbyBuZXh0IDogaGVsbG9zKSB7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAKLQkJICAgaWYoIG5leHQuaGFzQmVlblBhc3NpdmF0ZWRBY3RpdmF0ZWQoKSApIHsKKworCisgICAgICAgICAgIGlmKCBuZXh0Lmhhc0JlZW5QYXNzaXZhdGVkQWN0aXZhdGVkKCkgKSB7CiAgICAgICAgICAgICAgICAgICAgIG51bVBhc3NpdmF0ZWRBY3RpdmF0ZWQrKzsKICAgICAgICAgICAgICAgICB9Ci0JCisKIAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUnVubmluZyB0ZXN0IGZvciAiICsgbmV4dCk7CiAgICAgICAgICAgICAgICAgLy8gZG8gc29tZXRoaW5nIHJpZ2h0IGhlcmUKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuU3RhdGVmdWwgU2Vzc2lvbiByZXN1bHRzIChtaWNyb3NlYyk6IFx0d2l0aCB0eCBcdG5vIHR4OiIpOwogICAgICAgICAgICAgICAgIG5leHQud2FybXVwKENvbW1vbi5TVEFURUZVTCk7CiAgICAgICAgICAgICAgICAgcnVuVGVzdHMoQ29tbW9uLlNUQVRFRlVMLCBuZXh0KTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5TdGF0ZWxlc3MgU2Vzc2lvbiByZXN1bHRzIChtaWNyb3NlYyk6IFx0d2l0aCB0eCBcdG5vIHR4OiIpOwogICAgICAgICAgICAgICAgIG5leHQud2FybXVwKENvbW1vbi5TVEFURUZVTCk7CiAgICAgICAgICAgICAgICAgcnVuVGVzdHMoQ29tbW9uLlNUQVRFTEVTUywgbmV4dCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBuZXh0LnNodXRkb3duKCk7CiAgICAgICAgICAgICB9CiAKQEAgLTEwMCwyNiArMTAwLDI2IEBACiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiUGFzc2l2YXRpb24vQWN0aXZhdGlvbiBjb3VsZCBub3QgYmUgdGVzdGVkLiAgTm8gUGFzc2l2YXRpb24vQWN0aXZhdGlvbiBvY2N1cnJlZCIpOwogICAgICAgICAgICAgfQogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9zLnNpemUoKSA6ICIgKyBoZWxsb3Muc2l6ZSgpICsgIiBwYXNzaXZhdGlvbkNvdW50OiAiICsgbnVtUGFzc2l2YXRlZEFjdGl2YXRlZCk7Ci0JICAgIAotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9zLnNpemUoKSA6ICIgKyBoZWxsb3Muc2l6ZSgpICsgIiBwYXNzaXZhdGlvbkNvdW50OiAiICsgbnVtUGFzc2l2YXRlZEFjdGl2YXRlZCk7CiAKLQkgICAgYm9vbGVhbiByZWZSZXN1bHQxID0gaHIuY2hlY2tTbGVzc0xvY2FsUmVmZXJlbmNlcygpOwotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgY2hlY2tTbGVzc1JlZmVyZW5jZXMiLAotCQkgICAgKHJlZlJlc3VsdDEgPT0gdHJ1ZSkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CiAKLQkgICAgYm9vbGVhbiByZWZSZXN1bHQyID0gaHIuY2hlY2tTZnVsTG9jYWxSZWZlcmVuY2VzKCk7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBjaGVja1NmdWxMb2NhbFJlZmVyZW5jZXMiLAotCQkgICAgKHJlZlJlc3VsdDIgPT0gdHJ1ZSkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwotICAgICAgICAgICAgCisgICAgICAgIGJvb2xlYW4gcmVmUmVzdWx0MSA9IGhyLmNoZWNrU2xlc3NMb2NhbFJlZmVyZW5jZXMoKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIGNoZWNrU2xlc3NSZWZlcmVuY2VzIiwKKyAgICAgICAgICAgIChyZWZSZXN1bHQxID09IHRydWUpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKKworICAgICAgICBib29sZWFuIHJlZlJlc3VsdDIgPSBoci5jaGVja1NmdWxMb2NhbFJlZmVyZW5jZXMoKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIGNoZWNrU2Z1bExvY2FsUmVmZXJlbmNlcyIsCisgICAgICAgICAgICAocmVmUmVzdWx0MiA9PSB0cnVlKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CisKICAgICAgICAgICAgIGJvb2xlYW4gcmVmU2xlc3NSZXN1bHQgPSBoci5jaGVja1NsZXNzUmVtb3RlUmVmZXJlbmNlcygpOwotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgY2hlY2tTbGVzc1JlbW90ZVJlZmVyZW5jZXMiLAotCQkgICAgKHJlZlNsZXNzUmVzdWx0ID09IHRydWUpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgY2hlY2tTbGVzc1JlbW90ZVJlZmVyZW5jZXMiLAorICAgICAgICAgICAgKHJlZlNsZXNzUmVzdWx0ID09IHRydWUpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKKwogICAgICAgICAgICAgYm9vbGVhbiByZWZSZXN1bHQzID0gaHIuY2hlY2tTZnVsUmVtb3RlUmVmZXJlbmNlcygpOwotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgY2hlY2tTZnVsUmVtb3RlUmVmZXJlbmNlcyIsCi0JCSAgICAocmVmUmVzdWx0MyA9PSB0cnVlKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7Ci0gICAgICAgICAgICAKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIGNoZWNrU2Z1bFJlbW90ZVJlZmVyZW5jZXMiLAorICAgICAgICAgICAgKHJlZlJlc3VsdDMgPT0gdHJ1ZSkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOworCiAgICAgICAgICAgICBEdW1teVJlbW90ZSByZWYxID0gaHIuZ2V0U2Z1bFJlbW90ZUJ1c2luZXNzKDEpOwogICAgICAgICAgICAgRHVtbXlSZW1vdGUgcmVmMiA9IGhyLmdldFNmdWxSZW1vdGVCdXNpbmVzcygyKTsKICAgICAgICAgICAgIGJvb2xlYW4gcmVmUmVzdWx0NCA9IHJlZjEuZXF1YWxzKHJlZjEpOwpAQCAtMTMwLDcgKzEzMCw3IEBACiAgICAgICAgICAgICBib29sZWFuIHJlZlJlc3VsdDkgPSBoci5jb21wYXJlUmVtb3RlUmVmcyhyZWYxLCByZWYyKTsKICAgICAgICAgICAgIGJvb2xlYW4gcmVmUmVzdWx0MTAgPSBoci5jb21wYXJlUmVtb3RlUmVmcyhyZWYxLCBocik7CiAgICAgICAgICAgICBib29sZWFuIHJlZlJlc3VsdDExID0gaHIuY29tcGFyZVJlbW90ZVJlZnMocmVmMSwgbnVsbCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYm9vbGVhbiByZWZSZXN1bHRTdW1tYXJ5ID0gKHJlZlJlc3VsdDQgPT0gdHJ1ZSkKICAgICAgICAgICAgICAgICAmJiAocmVmUmVzdWx0NSA9PSB0cnVlKQogICAgICAgICAgICAgICAgICYmIChyZWZSZXN1bHQ2ID09IGZhbHNlKQpAQCAtMTM5LDM0ICsxMzksMzQgQEAKICAgICAgICAgICAgICAgICAmJiAocmVmUmVzdWx0OSA9PSBmYWxzZSkKICAgICAgICAgICAgICAgICAmJiAocmVmUmVzdWx0MTAgPT0gZmFsc2UpCiAgICAgICAgICAgICAgICAgJiYgKHJlZlJlc3VsdDExID09IGZhbHNlKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIGNvbXBhcmVSZW1vdGVSZWZlcmVuY2VzIiwKLQkJICAgIChyZWZSZXN1bHQzID09IHRydWUpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsgICAgICAgIAotICAgICAgICAgICAgCisgICAgICAgICAgICAocmVmUmVzdWx0MyA9PSB0cnVlKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgCisKIAogICAgIHByaXZhdGUgdm9pZCBydW5UZXN0cyhpbnQgdHlwZSwgSGVsbG8gaHIpCi0JdGhyb3dzIEV4Y2VwdGlvbgorICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0gICAgICAKKwogICAgICAgICBoci5ub3RTdXBwb3J0ZWQodHlwZSwgdHJ1ZSk7CiAgICAgICAgIGhyLm5vdFN1cHBvcnRlZCh0eXBlLCBmYWxzZSk7CiAgICAgICAgIGhyLnN1cHBvcnRzKHR5cGUsIHRydWUpOwotCWhyLnN1cHBvcnRzKHR5cGUsIGZhbHNlKTsKKyAgICBoci5zdXBwb3J0cyh0eXBlLCBmYWxzZSk7CiAgICAgICAgIGhyLnJlcXVpcmVkKHR5cGUsIHRydWUpOwotCWhyLnJlcXVpcmVkKHR5cGUsIGZhbHNlKTsKKyAgICBoci5yZXF1aXJlZCh0eXBlLCBmYWxzZSk7CiAgICAgICAgIGhyLnJlcXVpcmVzTmV3KHR5cGUsIHRydWUpOwotCWhyLnJlcXVpcmVzTmV3KHR5cGUsIGZhbHNlKTsKKyAgICBoci5yZXF1aXJlc05ldyh0eXBlLCBmYWxzZSk7CiAgICAgICAgIGhyLm1hbmRhdG9yeSh0eXBlLCB0cnVlKTsKLQloci5uZXZlcih0eXBlLCBmYWxzZSk7CisgICAgaHIubmV2ZXIodHlwZSwgZmFsc2UpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggMzlhNGI3OC4uMTYzNTQ4NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgICA8am5kaS1uYW1lPmVqYi9lamJfZWpiMzBfY2xpZW50dmlld19hZGFwdGVkX0hlbGxvPC9qbmRpLW5hbWU+CiAgICAgICA8YmVhbi1jYWNoZT4KICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT40PC9tYXgtY2FjaGUtc2l6ZT4KLQkgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+CisgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PgogICAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjU8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgogICAgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvQ29tbW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9Db21tb24uamF2YQppbmRleCBjNWM3YWUyLi43MGI1ZmIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9Db21tb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9Db21tb24uamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBpbXBvcnQgamFrYXJ0YS5lamIuKjsKIAotcHVibGljIGludGVyZmFjZSBDb21tb24gCitwdWJsaWMgaW50ZXJmYWNlIENvbW1vbgogewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRFTEVTUyA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVGVUwgPSAxOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvQ29tbW9uUmVtb3RlTG9jYWxCdXNpbmVzc1N1cGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9Db21tb25SZW1vdGVMb2NhbEJ1c2luZXNzU3VwZXIuamF2YQppbmRleCAwMTBkN2U3Li5jN2UwNzI1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9Db21tb25SZW1vdGVMb2NhbEJ1c2luZXNzU3VwZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9Db21tb25SZW1vdGVMb2NhbEJ1c2luZXNzU3VwZXIuamF2YQpAQCAtMTYsNyArMTYsNyBAQAogCiBwYWNrYWdlIGNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuY2xpZW50dmlldy5hZGFwdGVkOwogCi1wdWJsaWMgaW50ZXJmYWNlIENvbW1vblJlbW90ZUxvY2FsQnVzaW5lc3NTdXBlciAKK3B1YmxpYyBpbnRlcmZhY2UgQ29tbW9uUmVtb3RlTG9jYWxCdXNpbmVzc1N1cGVyCiB7CiAgICAgdm9pZCBzaGFyZWRSZW1vdGVMb2NhbEJ1c2luZXNzU3VwZXIoYm9vbGVhbiBleHBlY3RUeCk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvZWpiL0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9IZWxsby5qYXZhCmluZGV4IDU1YjA1MjUuLjhlMGE0YzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvZWpiL0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvSGVsbG8uamF2YQpAQCAtMzgsMTUgKzM4LDE1IEBACiAgICAgYm9vbGVhbiBjaGVja1NsZXNzTG9jYWxSZWZlcmVuY2VzKCk7CiAKICAgICBib29sZWFuIGNoZWNrU2Z1bExvY2FsUmVmZXJlbmNlcygpOwotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tTbGVzc1JlbW90ZVJlZmVyZW5jZXMoKTsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2Z1bFJlbW90ZVJlZmVyZW5jZXMoKTsKIAogICAgIHB1YmxpYyBEdW1teVJlbW90ZSBnZXRTZnVsUmVtb3RlQnVzaW5lc3MoaW50IG51bSk7Ci0gICAgCisKICAgICBwdWJsaWMgRHVtbXlSZW1vdGUyIGdldFNmdWxSZW1vdGVCdXNpbmVzczIoaW50IG51bSk7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBjb21wYXJlUmVtb3RlUmVmcyhPYmplY3QgcmVmMSwgT2JqZWN0IHJlZjIpOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9IZWxsb0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvSGVsbG9FSkIuamF2YQppbmRleCAzYTE3YmNlLi5kYjEyMmViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9IZWxsb0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvZWpiL0hlbGxvRUpCLmphdmEKQEAgLTM4LDEzICszOCwxMyBAQAogICAgICAgICBjb250ZXh0ID0gc2M7CiAgICAgfQogCi0gICAgQEVKQiBwcml2YXRlIFNsZXNzQnVzaW5lc3MyIHNsZXNzQnVzaW5lc3MyOyAgICAKKyAgICBARUpCIHByaXZhdGUgU2xlc3NCdXNpbmVzczIgc2xlc3NCdXNpbmVzczI7CiAgICAgQEVKQiBwcml2YXRlIFNmdWxCdXNpbmVzczIgc2Z1bEJ1c2luZXNzMjsKLSAgICBARUpCIHByb3RlY3RlZCBTbGVzc1JlbW90ZUJ1c2luZXNzMiBzbGVzc1JlbW90ZUJ1c2luZXNzMjsgICAgCisgICAgQEVKQiBwcm90ZWN0ZWQgU2xlc3NSZW1vdGVCdXNpbmVzczIgc2xlc3NSZW1vdGVCdXNpbmVzczI7CiAgICAgQEVKQiBwdWJsaWMgU2Z1bFJlbW90ZUJ1c2luZXNzMiBzZnVsUmVtb3RlQnVzaW5lc3MyOwogCiAgICAgQEVKQiBwdWJsaWMgU2Z1bEhvbWUgc2Z1bEhvbWU7Ci0gICAgcHVibGljIFNmdWwgc2Z1bDsgCisgICAgcHVibGljIFNmdWwgc2Z1bDsKIAogICAgIEBFSkIgcHVibGljIFNmdWxCdXNpbmVzcyBzZnVsQnVzaW5lc3M7CiAKQEAgLTU0LDcgKzU0LDcgQEAKICAgICBARUpCIHB1YmxpYyBTbGVzc0J1c2luZXNzIHNsZXNzQnVzaW5lc3M7CiAKICAgICBARUpCIHB1YmxpYyBTZnVsUmVtb3RlSG9tZSBzZnVsUmVtb3RlSG9tZTsKLSAgICBwdWJsaWMgU2Z1bFJlbW90ZSBzZnVsUmVtb3RlOyAKKyAgICBwdWJsaWMgU2Z1bFJlbW90ZSBzZnVsUmVtb3RlOwogCiAgICAgQEVKQiBwdWJsaWMgU2Z1bFJlbW90ZUJ1c2luZXNzIHNmdWxSZW1vdGVCdXNpbmVzczsKIApAQCAtNzAsMzAgKzcwLDMwIEBACiAKICAgICBqYWthcnRhLnRyYW5zYWN0aW9uLlVzZXJUcmFuc2FjdGlvbiB1dDsKIAotICAgIEBFSkIgcHJpdmF0ZSBTbGVzc0J1c2luZXNzCXJlZlNsZXNzXzE7Ci0gICAgQEVKQiBwcml2YXRlIFNsZXNzQnVzaW5lc3MJcmVmU2xlc3NfMjsKLSAgICBARUpCIHByaXZhdGUgU2xlc3NCdXNpbmVzczIJcmVmU2xlc3MyXzE7Ci0gICAgQEVKQiBwcml2YXRlIFNsZXNzQnVzaW5lc3MyCXJlZlNsZXNzMl8yOworICAgIEBFSkIgcHJpdmF0ZSBTbGVzc0J1c2luZXNzICAgIHJlZlNsZXNzXzE7CisgICAgQEVKQiBwcml2YXRlIFNsZXNzQnVzaW5lc3MgICAgcmVmU2xlc3NfMjsKKyAgICBARUpCIHByaXZhdGUgU2xlc3NCdXNpbmVzczIgICAgcmVmU2xlc3MyXzE7CisgICAgQEVKQiBwcml2YXRlIFNsZXNzQnVzaW5lc3MyICAgIHJlZlNsZXNzMl8yOwogCi0gICAgQEVKQiBwcml2YXRlIFNmdWxCdXNpbmVzcwlyZWZTZnVsXzE7Ci0gICAgQEVKQiBwcml2YXRlIFNmdWxCdXNpbmVzcwlyZWZTZnVsXzI7Ci0gICAgQEVKQiBwcml2YXRlIFNmdWxCdXNpbmVzczIJcmVmU2Z1bDJfMTsKLSAgICBARUpCIHByaXZhdGUgU2Z1bEJ1c2luZXNzMglyZWZTZnVsMl8yOwotICAgIAotICAgIEBFSkIgcHJpdmF0ZSBEdW1teVNsZXNzUmVtb3RlCXJlZlJlbW90ZVNsZXNzXzE7Ci0gICAgQEVKQiBwcml2YXRlIER1bW15U2xlc3NSZW1vdGUJcmVmUmVtb3RlU2xlc3NfMjsKLSAgICBARUpCIHByaXZhdGUgRHVtbXlTbGVzc1JlbW90ZTIJcmVmUmVtb3RlU2xlc3MyXzE7Ci0gICAgQEVKQiBwcml2YXRlIER1bW15U2xlc3NSZW1vdGUyCXJlZlJlbW90ZVNsZXNzMl8yOwotICAgIAotICAgIEBFSkIgcHJpdmF0ZSBEdW1teVJlbW90ZQlyZWZSZW1vdGVTZnVsXzE7Ci0gICAgQEVKQiBwcml2YXRlIER1bW15UmVtb3RlCXJlZlJlbW90ZVNmdWxfMjsKLSAgICBARUpCIHByaXZhdGUgRHVtbXlSZW1vdGUyCXJlZlJlbW90ZVNmdWwyXzE7Ci0gICAgQEVKQiBwcml2YXRlIER1bW15UmVtb3RlMglyZWZSZW1vdGVTZnVsMl8yOworICAgIEBFSkIgcHJpdmF0ZSBTZnVsQnVzaW5lc3MgICAgcmVmU2Z1bF8xOworICAgIEBFSkIgcHJpdmF0ZSBTZnVsQnVzaW5lc3MgICAgcmVmU2Z1bF8yOworICAgIEBFSkIgcHJpdmF0ZSBTZnVsQnVzaW5lc3MyICAgIHJlZlNmdWwyXzE7CisgICAgQEVKQiBwcml2YXRlIFNmdWxCdXNpbmVzczIgICAgcmVmU2Z1bDJfMjsKKworICAgIEBFSkIgcHJpdmF0ZSBEdW1teVNsZXNzUmVtb3RlICAgIHJlZlJlbW90ZVNsZXNzXzE7CisgICAgQEVKQiBwcml2YXRlIER1bW15U2xlc3NSZW1vdGUgICAgcmVmUmVtb3RlU2xlc3NfMjsKKyAgICBARUpCIHByaXZhdGUgRHVtbXlTbGVzc1JlbW90ZTIgICAgcmVmUmVtb3RlU2xlc3MyXzE7CisgICAgQEVKQiBwcml2YXRlIER1bW15U2xlc3NSZW1vdGUyICAgIHJlZlJlbW90ZVNsZXNzMl8yOworCisgICAgQEVKQiBwcml2YXRlIER1bW15UmVtb3RlICAgIHJlZlJlbW90ZVNmdWxfMTsKKyAgICBARUpCIHByaXZhdGUgRHVtbXlSZW1vdGUgICAgcmVmUmVtb3RlU2Z1bF8yOworICAgIEBFSkIgcHJpdmF0ZSBEdW1teVJlbW90ZTIgICAgcmVmUmVtb3RlU2Z1bDJfMTsKKyAgICBARUpCIHByaXZhdGUgRHVtbXlSZW1vdGUyICAgIHJlZlJlbW90ZVNmdWwyXzI7CiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHB1YmxpYyB2b2lkIGNyZWF0ZSgpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAogICAgICAgICAgICAgc2xlc3NCdXNpbmVzczIuZm9vKCk7CiAgICAgICAgICAgICBzZnVsQnVzaW5lc3MyLmZvbygpOwpAQCAtMTE0LDEwICsxMTQsMTAgQEAKICAgICAgICAgICAgIHNmdWxSZW1vdGVCdXNpbmVzczIuYmFyKCk7CiAKICAgICAgICAgICAgIHNmdWwgPSBzZnVsSG9tZS5jcmVhdGUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIGxvY2FsIHNmdWwgb2JqcyB2aWEgaG9tZXMuIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBsb2NhbCBzZnVsIG9ianMgdmlhIGhvbWVzLiIpOwogCiAgICAgICAgICAgICBzbGVzcyA9IHNsZXNzSG9tZS5jcmVhdGUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIGxvY2FsIHNsZXNzIG9ianMgdmlhIGhvbWVzLiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgbG9jYWwgc2xlc3Mgb2JqcyB2aWEgaG9tZXMuIik7CiAKICAgICAgICAgICAgIC8vIFRoZXJlIGFyZSB0d28gY3JlYXRlPE1FVEhPRD4gbWV0aG9kcyB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4KICAgICAgICAgICAgIC8vIFRoZSBmaXJzdCBpcyBtYXBwZWQgdG8gYW4gQEluaXQgIG1ldGhvZCB0aGF0IGlnbm9yZXMgaXRzIGlucHV0CkBAIC0xNDMsMTggKzE0MywxOCBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzbGVzc1JlbW90ZSA9IHNsZXNzUmVtb3RlSG9tZS5jcmVhdGUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIHJlbW90ZSBzbGVzcyBvYmpzIHZpYSBob21lcy4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIHJlbW90ZSBzbGVzcyBvYmpzIHZpYSBob21lcy4iKTsKIAogICAgICAgICAgICAgdXQgPSBjb250ZXh0LmdldFVzZXJUcmFuc2FjdGlvbigpOwotCSAgIAkgICAgIAotCVN5c3RlbS5vdXQucHJpbnRsbigiKioxKiogcmVmU2xlc3NCdXNpbmVzc18xIDogIiArIHJlZlNsZXNzXzEpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiKioxKiogcmVmU2xlc3NCdXNpbmVzc18yIDogIiArIHJlZlNsZXNzXzIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiKioxKiogcmVmU2xlc3NCdXNpbmVzczJfMSA6ICIgKyByZWZTbGVzczJfMSk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIqKjEqKiByZWZTbGVzc0J1c2luZXNzMl8yIDogIiArIHJlZlNsZXNzMl8yKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqMSoqIGNoZWNrTG9jYWxSZWZlcmVuY2VzKCkgPT0+ICIgKyBjaGVja1NsZXNzTG9jYWxSZWZlcmVuY2VzKCkpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqMSoqIHJlZlNsZXNzQnVzaW5lc3NfMSA6ICIgKyByZWZTbGVzc18xKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqMSoqIHJlZlNsZXNzQnVzaW5lc3NfMiA6ICIgKyByZWZTbGVzc18yKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqMSoqIHJlZlNsZXNzQnVzaW5lc3MyXzEgOiAiICsgcmVmU2xlc3MyXzEpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioxKiogcmVmU2xlc3NCdXNpbmVzczJfMiA6ICIgKyByZWZTbGVzczJfMik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKjEqKiBjaGVja0xvY2FsUmVmZXJlbmNlcygpID09PiAiICsgY2hlY2tTbGVzc0xvY2FsUmVmZXJlbmNlcygpKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogICAgIEBQcmVQYXNzaXZhdGUgcHVibGljIHZvaWQgcHJlUGFzc2l2YXRlKCkgewpAQCAtMTY1LDEyICsxNjUsMTIgQEAKICAgICBAUG9zdEFjdGl2YXRlIHB1YmxpYyB2b2lkIHBvc3RBY3RpdmF0ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0VKQjo6cG9zdEFjdGl2YXRlIik7CiAKLQkvLyBAQEAgdGVtcG9yYXJ5IHdvcmthcm91bmQgdW50aWwgVXNlclRyYW5zYWN0aW9uIHNlcmlhbGl6YXRpb24gaXMgZml4ZWQKLQl1dCA9IGNvbnRleHQuZ2V0VXNlclRyYW5zYWN0aW9uKCk7CQorICAgIC8vIEBAQCB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCB1bnRpbCBVc2VyVHJhbnNhY3Rpb24gc2VyaWFsaXphdGlvbiBpcyBmaXhlZAorICAgIHV0ID0gY29udGV4dC5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKIAogICAgICAgICBhY3RpdmF0ZUNvdW50Kys7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2h1dGRvd24oKSB0aHJvd3MgRUpCRXhjZXB0aW9uIHsKIAogICAgICAgICB0cnkgewpAQCAtMTg1LDcgKzE4NSw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgc2Z1bEJ1c2luZXNzLnJlbW92ZSgpOyAKKyAgICAgICAgICAgICAgICBzZnVsQnVzaW5lc3MucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiMm5kIHNmdWxCdXNpbmVzcyByZW1vdmUgc2hvdWxkIGhhdmUgY2F1c2VkIGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gd2hlbiBhdHRlbXB0aW5nIHRvICIrCkBAIC0xOTQsNyArMTk0LDcgQEAKIAogICAgICAgICAgICAgc2Z1bC5yZW1vdmUoKTsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgc2Z1bC5yZW1vdmUoKTsgCisgICAgICAgICAgICAgICAgc2Z1bC5yZW1vdmUoKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCIybmQgc2Z1bCByZW1vdmUgc2hvdWxkIGhhdmUgY2F1c2VkIGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gd2hlbiBhdHRlbXB0aW5nIHRvICIrCkBAIC0yMTYsNyArMjE2LDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBzZnVsUmVtb3RlQnVzaW5lc3MucmVtb3ZlKCk7IAorICAgICAgICAgICAgICAgIHNmdWxSZW1vdGVCdXNpbmVzcy5yZW1vdmUoKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCIybmQgc2Z1bFJlbW90ZUJ1c2luZXNzIHJlbW92ZSBzaG91bGQgaGF2ZSBjYXVzZWQgZXhjZXB0aW9uIik7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiB3aGVuIGF0dGVtcHRpbmcgdG8gIisKQEAgLTIyNSw3ICsyMjUsNyBAQAogCiAgICAgICAgICAgICBzZnVsUmVtb3RlLnJlbW92ZSgpOwogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBzZnVsUmVtb3RlLnJlbW92ZSgpOyAKKyAgICAgICAgICAgICAgICBzZnVsUmVtb3RlLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIjJuZCBzZnVsUmVtb3RlIHJlbW92ZSBzaG91bGQgaGF2ZSBjYXVzZWQgZXhjZXB0aW9uIik7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiB3aGVuIGF0dGVtcHRpbmcgdG8gIisKQEAgLTIzNSw3ICsyMzUsNyBAQAogICAgICAgICAgICAgLy8gRG9lc24ndCBtYXR0ZXIgaG93IG1hbnkgdGltZXMgd2UgY2FsbCBzbGVzc1JlbW90ZSByZW1vdmUoKQogICAgICAgICAgICAgc2xlc3NSZW1vdGUucmVtb3ZlKCk7CiAgICAgICAgICAgICBzbGVzc1JlbW90ZS5yZW1vdmUoKTsKLSAgICAgICAgICAgIAorCiAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgRUpCRXhjZXB0aW9uIGVqYkV4ID0gbmV3IEVKQkV4Y2VwdGlvbigpOwpAQCAtMjczLDg1ICsyNzMsODUgQEAKICAgICAgICAgICAgIHdhcm11cCh0eXBlLCB0cnVlLCBmYWxzZSk7CiAgICAgICAgICAgICB3YXJtdXAodHlwZSwgZmFsc2UsIHRydWUpOwogICAgICAgICAgICAgd2FybXVwKHR5cGUsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIE1lYXN1cmUgbG9vcGluZyBhbmQgdGltaW5nIG92ZXJoZWFkIAorCisgICAgICAgICAgICAvLyBNZWFzdXJlIGxvb3BpbmcgYW5kIHRpbWluZyBvdmVyaGVhZAogICAgICAgICAgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgICAgICAgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgICAgICAgICAgb3ZlcmhlYWQgPSBlbmQgLSBiZWdpbjsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB1dCA9IGNvbnRleHQuZ2V0VXNlclRyYW5zYWN0aW9uKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdGVzdExvY2FsT2JqZWN0cyhzZnVsLCBzbGVzcyk7CiAKICAgICAgICAgICAgIHRlc3RFSkJPYmplY3RzKHNmdWxSZW1vdGUsIHNsZXNzUmVtb3RlKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIHdhcm11cChpbnQgdHlwZSwgYm9vbGVhbiB0eCwgYm9vbGVhbiBidXNpbmVzc1ZpZXcpIAorICAgIHByaXZhdGUgdm9pZCB3YXJtdXAoaW50IHR5cGUsIGJvb2xlYW4gdHgsIGJvb2xlYW4gYnVzaW5lc3NWaWV3KQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAotCS8vIGdldCBIb3RzcG90IHdhcm1lZCB1cAkKLQlDb21tb24gYmVhbiA9IHByZSh0eXBlLCB0eCwgYnVzaW5lc3NWaWV3KTsKLQlDb21tb25SZW1vdGUgYmVhblJlbW90ZSA9IHByZVJlbW90ZSh0eXBlLCB0eCwgYnVzaW5lc3NWaWV3KTsKLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhbi5yZXF1aXJlc05ldygpOworICAgIC8vIGdldCBIb3RzcG90IHdhcm1lZCB1cAorICAgIENvbW1vbiBiZWFuID0gcHJlKHR5cGUsIHR4LCBidXNpbmVzc1ZpZXcpOworICAgIENvbW1vblJlbW90ZSBiZWFuUmVtb3RlID0gcHJlUmVtb3RlKHR5cGUsIHR4LCBidXNpbmVzc1ZpZXcpOworICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgICAgICBiZWFuLnJlcXVpcmVzTmV3KCk7CiAgICAgICAgICAgICBiZWFuUmVtb3RlLnJlcXVpcmVzTmV3KCk7Ci0JICAgIGJlYW4ubm90U3VwcG9ydGVkKCk7CisgICAgICAgIGJlYW4ubm90U3VwcG9ydGVkKCk7CiAgICAgICAgICAgICBiZWFuUmVtb3RlLm5vdFN1cHBvcnRlZCgpOwotCX0KLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhbi5yZXF1aXJlZCgpOworICAgIH0KKyAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKKyAgICAgICAgYmVhbi5yZXF1aXJlZCgpOwogICAgICAgICAgICAgYmVhblJlbW90ZS5yZXF1aXJlZCgpOwotCSAgICBpZiAoIHR4ICkgewotCQliZWFuLm1hbmRhdG9yeSgpOworICAgICAgICBpZiAoIHR4ICkgeworICAgICAgICBiZWFuLm1hbmRhdG9yeSgpOwogICAgICAgICAgICAgICAgIGJlYW5SZW1vdGUubWFuZGF0b3J5KCk7CiAgICAgICAgICAgICB9IGVsc2UgewotCQliZWFuLm5ldmVyKCk7CisgICAgICAgIGJlYW4ubmV2ZXIoKTsKICAgICAgICAgICAgICAgICBiZWFuUmVtb3RlLm5ldmVyKCk7CiAgICAgICAgICAgICB9Ci0JICAgIGJlYW4uc3VwcG9ydHMoKTsKKyAgICAgICAgYmVhbi5zdXBwb3J0cygpOwogICAgICAgICAgICAgYmVhblJlbW90ZS5zdXBwb3J0cygpOwotCX0KLQlpZiAoIHR4ICkgdHJ5IHsgdXQuY29tbWl0KCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZXggKSB7fQorICAgIH0KKyAgICBpZiAoIHR4ICkgdHJ5IHsgdXQuY29tbWl0KCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZXggKSB7fQogICAgIH0KIAotICAgIHByaXZhdGUgQ29tbW9uIHByZShpbnQgdHlwZSwgYm9vbGVhbiB0eCwgYm9vbGVhbiBidXNpbmVzc1ZpZXcpIAorICAgIHByaXZhdGUgQ29tbW9uIHByZShpbnQgdHlwZSwgYm9vbGVhbiB0eCwgYm9vbGVhbiBidXNpbmVzc1ZpZXcpCiAgICAgewotCWlmICggdHggKSB0cnkgeyB1dC5iZWdpbigpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkgewotCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgaWYgKCB0eCApIHRyeSB7IHV0LmJlZ2luKCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZXggKSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KIAotCWlmICggdHlwZSA9PSBDb21tb24uU1RBVEVMRVNTICkKKyAgICBpZiAoIHR5cGUgPT0gQ29tbW9uLlNUQVRFTEVTUyApCiAgICAgICAgICAgICByZXR1cm4gYnVzaW5lc3NWaWV3ID8gc2xlc3NCdXNpbmVzcyA6IHNsZXNzOwotCWVsc2UgCisgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGJ1c2luZXNzVmlldyA/IHNmdWxCdXNpbmVzcyA6IHNmdWw7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBDb21tb25SZW1vdGUgcHJlUmVtb3RlKGludCB0eXBlLCBib29sZWFuIHR4LCBib29sZWFuIGJ1c2luZXNzVmlldykgCi0gICAgeyAgICAgICAKLQlpZiAoIHR5cGUgPT0gQ29tbW9uLlNUQVRFTEVTUyApIHsKLQkgICAgcmV0dXJuIGJ1c2luZXNzVmlldyA/IHNsZXNzUmVtb3RlQnVzaW5lc3MgOiBzbGVzc1JlbW90ZTsKKyAgICBwcml2YXRlIENvbW1vblJlbW90ZSBwcmVSZW1vdGUoaW50IHR5cGUsIGJvb2xlYW4gdHgsIGJvb2xlYW4gYnVzaW5lc3NWaWV3KQorICAgIHsKKyAgICBpZiAoIHR5cGUgPT0gQ29tbW9uLlNUQVRFTEVTUyApIHsKKyAgICAgICAgcmV0dXJuIGJ1c2luZXNzVmlldyA/IHNsZXNzUmVtb3RlQnVzaW5lc3MgOiBzbGVzc1JlbW90ZTsKICAgICAgICAgfSBlbHNlIHsKLQkgICAgcmV0dXJuIGJ1c2luZXNzVmlldyA/IHNmdWxSZW1vdGVCdXNpbmVzcyA6IHNmdWxSZW1vdGU7CisgICAgICAgIHJldHVybiBidXNpbmVzc1ZpZXcgPyBzZnVsUmVtb3RlQnVzaW5lc3MgOiBzZnVsUmVtb3RlOwogICAgICAgICB9CiAgICAgfQogCiAKICAgICBwcml2YXRlIGZsb2F0IHBvc3QobG9uZyBiZWdpbiwgbG9uZyBlbmQsIGJvb2xlYW4gdHgpCiAgICAgewotCWlmICggdHggKSB0cnkgeyB1dC5jb21taXQoKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHsKLQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0KLQlyZXR1cm4gKGZsb2F0KSggKChkb3VibGUpKGVuZC1iZWdpbi1vdmVyaGVhZCkpLygoZG91YmxlKUlURVJBVElPTlMpICogMTAwMC4wICk7CisgICAgaWYgKCB0eCApIHRyeSB7IHV0LmNvbW1pdCgpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIHJldHVybiAoZmxvYXQpKCAoKGRvdWJsZSkoZW5kLWJlZ2luLW92ZXJoZWFkKSkvKChkb3VibGUpSVRFUkFUSU9OUykgKiAxMDAwLjAgKTsKICAgICB9CiAKLSAgICBwdWJsaWMgZmxvYXQgcmVxdWlyZXNOZXcoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAorICAgIHB1YmxpYyBmbG9hdCByZXF1aXJlc05ldyhpbnQgdHlwZSwgYm9vbGVhbiB0eCkKICAgICB7CiAgICAgICAgIGxvbmcgYmVnaW4gPSAwOwogICAgICAgICBsb25nIGVuZCA9IDA7CkBAIC0zODEsNyArMzgxLDcgQEAKICAgICAgICAgcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOwogICAgIH0KIAotICAgIHB1YmxpYyBmbG9hdCBub3RTdXBwb3J0ZWQoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAorICAgIHB1YmxpYyBmbG9hdCBub3RTdXBwb3J0ZWQoaW50IHR5cGUsIGJvb2xlYW4gdHgpCiAgICAgewogICAgICAgICBsb25nIGJlZ2luID0gMDsKICAgICAgICAgbG9uZyBlbmQgPSAwOwpAQCAtNDA3LDExICs0MDcsMTEgQEAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0gCi0JcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOworICAgICAgICB9CisgICAgcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOwogICAgIH0KIAotICAgIHB1YmxpYyBmbG9hdCByZXF1aXJlZChpbnQgdHlwZSwgYm9vbGVhbiB0eCkgCisgICAgcHVibGljIGZsb2F0IHJlcXVpcmVkKGludCB0eXBlLCBib29sZWFuIHR4KQogICAgIHsKICAgICAgICAgbG9uZyBiZWdpbiA9IDA7CiAgICAgICAgIGxvbmcgZW5kID0gMDsKQEAgLTQzMywxNiArNDMzLDE2IEBACiAgICAgICAgICAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKICAgICAgICAgICAgICAgICBiZWFuUmVtb3RlQnVzaW5lc3MucmVxdWlyZWQoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KLQlyZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CisgICAgcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOwogICAgIH0KIAotICAgIHB1YmxpYyBmbG9hdCBtYW5kYXRvcnkoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAorICAgIHB1YmxpYyBmbG9hdCBtYW5kYXRvcnkoaW50IHR5cGUsIGJvb2xlYW4gdHgpCiAgICAgewogICAgICAgICBsb25nIGJlZ2luID0gMDsKICAgICAgICAgbG9uZyBlbmQgPSAwOwpAQCAtNDUxLDcgKzQ1MSw3IEBACiAgICAgICAgICAgICBDb21tb24gYnVzQmVhbiA9IHByZSh0eXBlLCB0eCwgdHJ1ZSk7CiAgICAgICAgICAgICBDb21tb25SZW1vdGUgYmVhblJlbW90ZSA9IHByZVJlbW90ZSh0eXBlLCB0eCwgZmFsc2UpOwogICAgICAgICAgICAgQ29tbW9uUmVtb3RlIGJlYW5SZW1vdGVCdXNpbmVzcyA9IHByZVJlbW90ZSh0eXBlLCB0eCwgdHJ1ZSk7Ci0gICAgICAgICAgICBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOyAgICAgICAgICAgIAorICAgICAgICAgICAgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgewogICAgICAgICAgICAgICAgIGJlYW4ubWFuZGF0b3J5KCk7CiAgICAgICAgICAgICB9CkBAIC00NzAsNyArNDcwLDcgQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwogICAgICAgICB9Ci0JcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKICAgICBwdWJsaWMgZmxvYXQgbmV2ZXIoaW50IHR5cGUsIGJvb2xlYW4gdHgpCkBAIC01MDAsMTAgKzUwMCwxMCBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KLQlyZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CisgICAgcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOwogICAgIH0KIAotICAgIHB1YmxpYyBmbG9hdCBzdXBwb3J0cyhpbnQgdHlwZSwgYm9vbGVhbiB0eCkgCisgICAgcHVibGljIGZsb2F0IHN1cHBvcnRzKGludCB0eXBlLCBib29sZWFuIHR4KQogICAgIHsKICAgICAgICAgbG9uZyBiZWdpbiA9IDA7CiAgICAgICAgIGxvbmcgZW5kID0gMDsKQEAgLTUzMSw3ICs1MzEsNyBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KLQlyZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CisgICAgcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOwogICAgIH0KIAogICAgIC8vIGFzc3VtZXMgbG8xIGFuZCBsbzIgYXJlIGRvIG5vdCBoYXZlIHNhbWUgY2xpZW50IGlkZW50aXR5CkBAIC01NzUsMTEgKzU3NSwxMSBAQAogICAgICAgICBpZiggbzEuaXNJZGVudGljYWwobzIpICkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiaXNJZGVudGljYWwgZmFpbGVkIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoIG8yLmlzSWRlbnRpY2FsKG8xKSApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImlzSWRlbnRpY2FsIGZhaWxlZCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKCAhbzEuaXNJZGVudGljYWwobzEpICkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiaXNJZGVudGljYWwgZmFpbGVkIik7CiAgICAgICAgIH0KQEAgLTYwNyw3ICs2MDcsNyBAQAogICAgICAgICBpZiggbWQgPT0gbnVsbCApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIm51bGwgbWQiKTsKICAgICAgICAgfQotCVN5c3RlbS5vdXQucHJpbnRsbigibWQgPSAiICsgbWQpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWQgPSAiICsgbWQpOwogCiAgICAgICAgIEhvbWVIYW5kbGUgaGggPSBob21lLmdldEhvbWVIYW5kbGUoKTsKICAgICAgICAgaWYoIGhoID09IG51bGwgKSB7CkBAIC02MzMsMTggKzYzMywxOCBAQAogICAgICAgICB9CiAKICAgICAgICAgbzEuaGFzaENvZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIG8yLmhhc2hDb2RlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIG8xLnRvU3RyaW5nKCk7CiAKICAgICAgICAgbzIudG9TdHJpbmcoKTsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NsZXNzTG9jYWxSZWZlcmVuY2VzKCkgewogICAgICAgICBib29sZWFuIHJlc3VsdCA9IChyZWZTbGVzc18xICE9IG51bGwpOwotICAgICAgICAKKwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcmVmU2xlc3NfMS5lcXVhbHMocmVmU2xlc3NfMSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiByZWZTbGVzc18xLmVxdWFscyhyZWZTbGVzc18yKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlNsZXNzXzEuZXF1YWxzKHJlZlNsZXNzMl8xKSk7CkBAIC02NTUsNyArNjU1LDcgQEAKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlNsZXNzXzEuZXF1YWxzKHNmdWxCdXNpbmVzcykpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmU2xlc3NfMS5lcXVhbHMoc2Z1bFJlbW90ZSkpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmU2xlc3NfMS5lcXVhbHMoc2Z1bFJlbW90ZUhvbWUpKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIChyZWZTbGVzc18yICE9IG51bGwpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcmVmU2xlc3NfMi5lcXVhbHMocmVmU2xlc3NfMSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiByZWZTbGVzc18yLmVxdWFscyhyZWZTbGVzc18yKTsKQEAgLTY2Nyw3ICs2NjcsNyBAQAogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmU2xlc3NfMi5lcXVhbHMoc2Z1bEJ1c2luZXNzKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZTbGVzc18yLmVxdWFscyhzZnVsUmVtb3RlKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZTbGVzc18yLmVxdWFscyhzZnVsUmVtb3RlSG9tZSkpOwotICAgICAgICAKKwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKHJlZlNsZXNzMl8xICE9IG51bGwpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcmVmU2xlc3MyXzEuZXF1YWxzKHJlZlNsZXNzMl8xKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHJlZlNsZXNzMl8xLmVxdWFscyhyZWZTbGVzczJfMik7CkBAIC02NzksNyArNjc5LDcgQEAKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlNsZXNzMl8xLmVxdWFscyhzZnVsQnVzaW5lc3MpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlNsZXNzMl8xLmVxdWFscyhzZnVsUmVtb3RlKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZTbGVzczJfMS5lcXVhbHMoc2Z1bFJlbW90ZUhvbWUpKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIChyZWZTbGVzczJfMiAhPSBudWxsKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHJlZlNsZXNzMl8yLmVxdWFscyhyZWZTbGVzczJfMik7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiByZWZTbGVzczJfMi5lcXVhbHMocmVmU2xlc3MyXzEpOwpAQCAtNjkxLDEzICs2OTEsMTMgQEAKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlNsZXNzMl8yLmVxdWFscyhzZnVsQnVzaW5lc3MpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlNsZXNzMl8yLmVxdWFscyhzZnVsUmVtb3RlKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZTbGVzczJfMi5lcXVhbHMoc2Z1bFJlbW90ZUhvbWUpKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NmdWxMb2NhbFJlZmVyZW5jZXMoKSB7CiAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gKHJlZlNmdWxfMSAhPSBudWxsKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIChyZWZTZnVsXzEuZXF1YWxzKHJlZlNmdWxfMSkpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmU2Z1bF8xLmVxdWFscyhyZWZTZnVsXzIpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlNmdWxfMS5lcXVhbHMocmVmU2Z1bDJfMSkpOwpAQCAtNzA5LDcgKzcwOSw3IEBACiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZTZnVsXzEuZXF1YWxzKHNmdWxSZW1vdGUpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlNmdWxfMS5lcXVhbHMoc2Z1bFJlbW90ZUhvbWUpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlNmdWxfMS5lcXVhbHMobmV3IE9iamVjdCgpKSk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAocmVmU2Z1bF8yICE9IG51bGwpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmU2Z1bF8yLmVxdWFscyhyZWZTZnVsXzEpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIChyZWZTZnVsXzIuZXF1YWxzKHJlZlNmdWxfMikpOwpAQCAtNzIyLDcgKzcyMiw3IEBACiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZTZnVsXzIuZXF1YWxzKHNmdWxSZW1vdGUpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlNmdWxfMi5lcXVhbHMoc2Z1bFJlbW90ZUhvbWUpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlNmdWxfMi5lcXVhbHMobmV3IE9iamVjdCgpKSk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAocmVmU2Z1bDJfMSAhPSBudWxsKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIChyZWZTZnVsMl8xLmVxdWFscyhyZWZTZnVsMl8xKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZTZnVsMl8xLmVxdWFscyhyZWZTZnVsMl8yKSk7CkBAIC03MzUsNyArNzM1LDcgQEAKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlNmdWwyXzEuZXF1YWxzKHNmdWxSZW1vdGUpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlNmdWwyXzEuZXF1YWxzKHNmdWxSZW1vdGVIb21lKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZTZnVsMl8xLmVxdWFscyhuZXcgT2JqZWN0KCkpKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIChyZWZTZnVsMl8yICE9IG51bGwpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKHJlZlNmdWwyXzIuZXF1YWxzKHJlZlNmdWwyXzIpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlNmdWwyXzIuZXF1YWxzKHJlZlNmdWwyXzEpKTsKQEAgLTc1MCwxMCArNzUwLDEwIEBACiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZTZnVsMl8yLmVxdWFscyhuZXcgT2JqZWN0KCkpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NsZXNzUmVtb3RlUmVmZXJlbmNlcygpIHsKICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSAocmVmUmVtb3RlU2xlc3NfMSAhPSBudWxsKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIChyZWZSZW1vdGVTbGVzc18xLmVxdWFscyhyZWZSZW1vdGVTbGVzc18xKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAocmVmUmVtb3RlU2xlc3NfMS5lcXVhbHMocmVmUmVtb3RlU2xlc3NfMikpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmUmVtb3RlU2xlc3NfMS5lcXVhbHMocmVmUmVtb3RlU2xlc3MyXzEpKTsKQEAgLTc2NSw3ICs3NjUsNyBAQAogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmUmVtb3RlU2xlc3NfMS5lcXVhbHMoc2Z1bFJlbW90ZSkpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmUmVtb3RlU2xlc3NfMS5lcXVhbHMoc2Z1bFJlbW90ZUhvbWUpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlJlbW90ZVNsZXNzXzEuZXF1YWxzKG5ldyBPYmplY3QoKSkpOwotICAgICAgICAKKwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKHJlZlJlbW90ZVNsZXNzXzIgIT0gbnVsbCk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAocmVmUmVtb3RlU2xlc3NfMi5lcXVhbHMocmVmUmVtb3RlU2xlc3NfMSkpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKHJlZlJlbW90ZVNsZXNzXzIuZXF1YWxzKHJlZlJlbW90ZVNsZXNzXzIpKTsKQEAgLTc3OCw3ICs3NzgsNyBAQAogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmUmVtb3RlU2xlc3NfMi5lcXVhbHMoc2Z1bFJlbW90ZSkpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmUmVtb3RlU2xlc3NfMi5lcXVhbHMoc2Z1bFJlbW90ZUhvbWUpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlJlbW90ZVNsZXNzXzIuZXF1YWxzKG5ldyBPYmplY3QoKSkpOwotICAgICAgICAKKwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKHJlZlJlbW90ZVNsZXNzMl8xICE9IG51bGwpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKHJlZlJlbW90ZVNsZXNzMl8xLmVxdWFscyhyZWZSZW1vdGVTbGVzczJfMSkpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKHJlZlJlbW90ZVNsZXNzMl8xLmVxdWFscyhyZWZSZW1vdGVTbGVzczJfMikpOwpAQCAtNzkxLDcgKzc5MSw3IEBACiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZSZW1vdGVTbGVzczJfMS5lcXVhbHMoc2Z1bFJlbW90ZSkpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmUmVtb3RlU2xlc3MyXzEuZXF1YWxzKHNmdWxSZW1vdGVIb21lKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZSZW1vdGVTbGVzczJfMS5lcXVhbHMobmV3IE9iamVjdCgpKSk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAocmVmUmVtb3RlU2xlc3MyXzIgIT0gbnVsbCk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAocmVmUmVtb3RlU2xlc3MyXzIuZXF1YWxzKHJlZlJlbW90ZVNsZXNzMl8yKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAocmVmUmVtb3RlU2xlc3MyXzIuZXF1YWxzKHJlZlJlbW90ZVNsZXNzMl8xKSk7CkBAIC04MDYsMTAgKzgwNiwxMCBAQAogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmUmVtb3RlU2xlc3MyXzIuZXF1YWxzKG5ldyBPYmplY3QoKSkpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICAgICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NmdWxSZW1vdGVSZWZlcmVuY2VzKCkgewogICAgICAgICBib29sZWFuIHJlc3VsdCA9IChyZWZSZW1vdGVTZnVsXzEgIT0gbnVsbCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAocmVmUmVtb3RlU2Z1bF8xLmVxdWFscyhyZWZSZW1vdGVTZnVsXzEpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlJlbW90ZVNmdWxfMS5lcXVhbHMocmVmUmVtb3RlU2Z1bF8yKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZSZW1vdGVTZnVsXzEuZXF1YWxzKHJlZlJlbW90ZVNmdWwyXzEpKTsKQEAgLTgyMSw3ICs4MjEsNyBAQAogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmUmVtb3RlU2Z1bF8xLmVxdWFscyhzZnVsUmVtb3RlKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZSZW1vdGVTZnVsXzEuZXF1YWxzKHNmdWxSZW1vdGVIb21lKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZSZW1vdGVTZnVsXzEuZXF1YWxzKG5ldyBPYmplY3QoKSkpOwotICAgICAgICAKKwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKHJlZlJlbW90ZVNmdWxfMiAhPSBudWxsKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlJlbW90ZVNmdWxfMi5lcXVhbHMocmVmUmVtb3RlU2Z1bF8xKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAocmVmUmVtb3RlU2Z1bF8yLmVxdWFscyhyZWZSZW1vdGVTZnVsXzIpKTsKQEAgLTgzNCw3ICs4MzQsNyBAQAogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmUmVtb3RlU2Z1bF8yLmVxdWFscyhzZnVsUmVtb3RlKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZSZW1vdGVTZnVsXzIuZXF1YWxzKHNmdWxSZW1vdGVIb21lKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZSZW1vdGVTZnVsXzIuZXF1YWxzKG5ldyBPYmplY3QoKSkpOwotICAgICAgICAKKwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKHJlZlJlbW90ZVNmdWwyXzEgIT0gbnVsbCk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAocmVmUmVtb3RlU2Z1bDJfMS5lcXVhbHMocmVmUmVtb3RlU2Z1bDJfMSkpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmUmVtb3RlU2Z1bDJfMS5lcXVhbHMocmVmUmVtb3RlU2Z1bDJfMikpOwpAQCAtODQ3LDcgKzg0Nyw3IEBACiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZSZW1vdGVTZnVsMl8xLmVxdWFscyhzZnVsUmVtb3RlKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZSZW1vdGVTZnVsMl8xLmVxdWFscyhzZnVsUmVtb3RlSG9tZSkpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmUmVtb3RlU2Z1bDJfMS5lcXVhbHMobmV3IE9iamVjdCgpKSk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAocmVmUmVtb3RlU2Z1bDJfMiAhPSBudWxsKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIChyZWZSZW1vdGVTZnVsMl8yLmVxdWFscyhyZWZSZW1vdGVTZnVsMl8yKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZSZW1vdGVTZnVsMl8yLmVxdWFscyhyZWZSZW1vdGVTZnVsMl8xKSk7CkBAIC04NjIsMTkgKzg2MiwxOSBAQAogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmUmVtb3RlU2Z1bDJfMi5lcXVhbHMobmV3IE9iamVjdCgpKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIER1bW15UmVtb3RlIGdldFNmdWxSZW1vdGVCdXNpbmVzcyhpbnQgbnVtKSB7CiAgICAgICAgIHJldHVybiAobnVtID09IDEpCiAgICAgICAgICAgICA/IHJlZlJlbW90ZVNmdWxfMSA6IHJlZlJlbW90ZVNmdWxfMjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgRHVtbXlSZW1vdGUyIGdldFNmdWxSZW1vdGVCdXNpbmVzczIoaW50IG51bSkgewogICAgICAgICByZXR1cm4gKG51bSA9PSAxKQogICAgICAgICAgICAgPyByZWZSZW1vdGVTZnVsMl8xIDogcmVmUmVtb3RlU2Z1bDJfMjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBjb21wYXJlUmVtb3RlUmVmcyhPYmplY3QgcmVmMSwgT2JqZWN0IHJlZjIpIHsKICAgICAgICAgcmV0dXJuIHJlZjEuZXF1YWxzKHJlZjIpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvU2Z1bEJ1c2luZXNzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9TZnVsQnVzaW5lc3MuamF2YQppbmRleCA1NjI1YTM5Li4yNDgxZDllIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9TZnVsQnVzaW5lc3MuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9TZnVsQnVzaW5lc3MuamF2YQpAQCAtMjMsMTAgKzIzLDEwIEBACiAgICAgLy8gc28gaXQncyBub3QgYSBwcm9ibGVtIHRvIGRlZmluZSBhIG1ldGhvZCB0aGF0IGhhcHBlbnMgdG8gaGF2ZSB0aGUKICAgICAvLyBzYW1lIHNpZ25hdHVyZSBhcyBvbmUgb2YgRUpCTG9jYWxPYmplY3QncyBtZXRob2RzLiAgcmVtb3ZlKCkgaXMKICAgICAvLyBhIGxpa2VseSBuYW1lIGZvciBhIG1ldGhvZCB0aGF0IGhhcyBAUmVtb3ZlIGJlaGF2aW9yIHNvIGl0IG5lZWRzCi0gICAgLy8gdG8gd29yay4gIAorICAgIC8vIHRvIHdvcmsuCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlKCk7CiAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKSAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uOwogCiAgICAgcHVibGljIFNmdWxCdXNpbmVzczIgZ2V0U2Z1bEJ1c2luZXNzMigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvU2Z1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IDBlMDM4NTkuLjJjYzFlMzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvZWpiL1NmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9TZnVsRUpCLmphdmEKQEAgLTEwMyw3ICsxMDMsNyBAQAogICAgICAgICAvLyBJZ25vcmUgaW5wdXQgcGFyYW1ldGVyLiAgY2xpZW50IHdpbGwgdXNlIHJlc3VsdGluZyB1bnNldCBzdGF0ZSB0bwogICAgICAgICAvLyBlbnN1cmUgY29ycmVjdCBtYXBwaW5nIG9mIEBJbml0CiAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCOjphZGFwdGVkQ3JlYXRlMShpbnQgaWdub3JlKSBtZXRob2QuICIgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQjo6YWRhcHRlZENyZWF0ZTEoaW50IGlnbm9yZSkgbWV0aG9kLiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIqKmlnbm9yaW5nKiogc3RhdGU9IiArIHN0YXRlKTsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxlciBwcmluY2lwYWwgPSAiICsgY3R4LmdldENhbGxlclByaW5jaXBhbCgpKTsKQEAgLTExMyw3ICsxMTMsNyBAQAogICAgIEBJbml0KCJjcmVhdGVGb28iKQogICAgIHB1YmxpYyB2b2lkIGFkYXB0ZWRDcmVhdGUyKGludCBhcmd1bWVudDEpIHsKICAgICAgICAgc3RhdGUgPSBhcmd1bWVudDE7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQjo6YWRhcHRlZENyZWF0ZTIoaW50IGFyZykgbWV0aG9kICIgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQjo6YWRhcHRlZENyZWF0ZTIoaW50IGFyZykgbWV0aG9kICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgInN0YXRlPSIgKyBzdGF0ZSk7CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsZXIgcHJpbmNpcGFsID0gIiArIGN0eC5nZXRDYWxsZXJQcmluY2lwYWwoKSk7CkBAIC0xNTQsNyArMTU0LDcgQEAKICAgICBwdWJsaWMgdm9pZCByZW1vdmUoKSB7fQogCiAgICAgQFJlbW92ZShyZXRhaW5JZkV4Y2VwdGlvbj10cnVlKQotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBpZiggdGhyb3dFeGNlcHRpb24gKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJleGNlcHRpb24gZnJvbSByZXRhaW5JZkV4Y2VwdGlvbi4gIiArCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9TZnVsUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9TZnVsUmVtb3RlLmphdmEKaW5kZXggYzE1MDdjMS4uNTdkOTliZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvU2Z1bFJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvZWpiL1NmdWxSZW1vdGUuamF2YQpAQCAtMjAsNyArMjAsNyBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIFNmdWxSZW1vdGUgZXh0ZW5kcyBDb21tb25SZW1vdGUsIEVKQk9iamVjdAogewotICAgCisKICAgICBwdWJsaWMgaW50IGdldFN0YXRlKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvU2Z1bFJlbW90ZUJ1c2luZXNzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9TZnVsUmVtb3RlQnVzaW5lc3MuamF2YQppbmRleCAzZTY5MTY5Li4xYWNjNzhhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9TZnVsUmVtb3RlQnVzaW5lc3MuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9TZnVsUmVtb3RlQnVzaW5lc3MuamF2YQpAQCAtMjIsMTQgKzIyLDE0IEBACiBwdWJsaWMgaW50ZXJmYWNlIFNmdWxSZW1vdGVCdXNpbmVzcyBleHRlbmRzIENvbW1vblJlbW90ZQogewogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlUmV0YWluSWZFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlUmV0YWluSWZFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbjsKIAogICAgIC8vIFRoZSByZW1vdGUgYnVzaW5lc3MgaW50ZXJmYWNlIGhhcyBubyByZWxhdGlvbnNoaXAgdG8gRUpCT2JqZWN0CiAgICAgLy8gc28gaXQncyBub3QgYSBwcm9ibGVtIHRvIGRlZmluZSBhIG1ldGhvZCB0aGF0IGhhcHBlbnMgdG8gaGF2ZSB0aGUKICAgICAvLyBzYW1lIHNpZ25hdHVyZSBhcyBvbmUgb2YgRUpCT2JqZWN0J3MgbWV0aG9kcy4gIHJlbW92ZSgpIGlzCiAgICAgLy8gYSBsaWtlbHkgbmFtZSBmb3IgYSBtZXRob2QgdGhhdCBoYXMgQFJlbW92ZSBiZWhhdmlvciBzbyBpdCBuZWVkcwotICAgIC8vIHRvIHdvcmsuICAKKyAgICAvLyB0byB3b3JrLgogICAgIHB1YmxpYyB2b2lkIHJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvZWpiL1NsZXNzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9TbGVzc0VKQi5qYXZhCmluZGV4IDZjMjUxNDUuLjdlZDJiNzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvZWpiL1NsZXNzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvU2xlc3NFSkIuamF2YQpAQCAtNzAsNyArNzAsNyBAQAogICAgIC8qKgogICAgICAqIEJ1c2luZXNzIG1ldGhvZCBkZWNsYXJlZCBvbiBhIHN1cGVyIGludGVyZmFjZSBleHRlbmRlZCBieSBib3RoCiAgICAgICogcmVtb3RlIGFuZCBsb2NhbCBidXNpbmVzcyBpbnRlcmZhY2UuICBUZXN0IHRoYXQgdHggYXR0cmlidXRlIGlzCi0gICAgICogc2V0IGFwcHJvcHJpYXRlbHkgZm9yIGxvY2FsIHZzLiByZW1vdGUuICAKKyAgICAgKiBzZXQgYXBwcm9wcmlhdGVseSBmb3IgbG9jYWwgdnMuIHJlbW90ZS4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzaGFyZWRSZW1vdGVMb2NhbEJ1c2luZXNzU3VwZXIoYm9vbGVhbiBleHBlY3RUeCkgewogCkBAIC03OCwxMCArNzgsMTAgQEAKIAogICAgICAgICB0cnkgewogCi0gICAgICAgICAgICAvLyBQcm9wcmlldGFyeSB3YXkgdG8gbG9vayB1cCB0eCBtYW5hZ2VyLiAgCisgICAgICAgICAgICAvLyBQcm9wcmlldGFyeSB3YXkgdG8gbG9vayB1cCB0eCBtYW5hZ2VyLgogICAgICAgICAgICAgVHJhbnNhY3Rpb25NYW5hZ2VyIHRtID0gKFRyYW5zYWN0aW9uTWFuYWdlcikKLQkJLy8gIFRPRE8gY2hlY2sgdGhpcywgaXQgd29ya2VkIGluVjIgICAgICAgICAgICAgIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpwbS9UcmFuc2FjdGlvbk1hbmFnZXIiKTsKLQkJICAgICAgICAgICAgICBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6YXBwc2VydmVyL1RyYW5zYWN0aW9uTWFuYWdlciIpOworICAgICAgICAvLyAgVE9ETyBjaGVjayB0aGlzLCBpdCB3b3JrZWQgaW5WMiAgICAgICAgICAgICAgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOnBtL1RyYW5zYWN0aW9uTWFuYWdlciIpOworICAgICAgICAgICAgICAgICAgICAgIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTphcHBzZXJ2ZXIvVHJhbnNhY3Rpb25NYW5hZ2VyIik7CiAKICAgICAgICAgICAgIC8vIFVzZSBhbiBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBjaGVjayB3aGV0aGVyIHRoZXJlIGlzIGEgdHguCiAgICAgICAgICAgICAvLyBBIHBvcnRhYmxlIGFwcGxpY2F0aW9uIGNvdWxkbid0IG1ha2UgdGhpcyBjaGVjawpAQCAtOTMsMTMgKzkzLDEzIEBACiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIGlmKCBleHBlY3RUeCAmJiBoYXNUeCApIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHZlcmlmaWVkIHR4Iik7CiAgICAgICAgIH0gZWxzZSBpZiggIWV4cGVjdFR4ICYmICFoYXNUeCApIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHZlcmlmaWVkIHRoZXJlIGlzIG5vIHR4Iik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJJbnZhbGlkIHR4IHN0YXR1cy4gIEV4cGVjdFR4ID0gIiArIAorICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiSW52YWxpZCB0eCBzdGF0dXMuICBFeHBlY3RUeCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RUeCArICIgaGFzVHggPSAiICsgaGFzVHgpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvZWpiL1NsZXNzUmVtb3RlQnVzaW5lc3MyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9TbGVzc1JlbW90ZUJ1c2luZXNzMi5qYXZhCmluZGV4IDE0ODEzZjUuLjFjM2U5N2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvZWpiL1NsZXNzUmVtb3RlQnVzaW5lc3MyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvU2xlc3NSZW1vdGVCdXNpbmVzczIuamF2YQpAQCAtMjEsNiArMjEsNiBAQAogcHVibGljIGludGVyZmFjZSBTbGVzc1JlbW90ZUJ1c2luZXNzMiBleHRlbmRzIENvbW1vblJlbW90ZUxvY2FsQnVzaW5lc3NTdXBlcgogewogICAgIHB1YmxpYyB2b2lkIGZvbygpOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgYmFyKCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9idWlsZC54bWwKaW5kZXggMjkzOTJlOC4uZjYyMzBjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2J1aWxkLnhtbApAQCAtNjAsOSArNjAsOSBAQAogCiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamIzMC1jbGllbnR2aWV3IHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamIzMC1jbGllbnR2aWV3IHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvYnVpbGQucHJvcGVydGllcwppbmRleCBkZmJhZWZkLi4wZDhmYzNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMiArMTUsMjIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMC1jbGllbnR2aWV3LWNvcmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmNsaWVudHZpZXcuY29yZS5jbGllbnQuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvYnVpbGQueG1sCmluZGV4IDE2ZTk5MDEuLjMyZWYwYTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDb21tb24qLmNsYXNzLCoqL0hlbHBlciouY2xhc3MsKiovSGVsbG8qLmNsYXNzLCoqL0JtcCouY2xhc3MsKiovU2Z1bCouY2xhc3MsKiovU2xlc3MqLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovSGVscGVyKi5jbGFzcywqKi9TZnVsUmVtb3RlLmNsYXNzLCoqL1NsZXNzUmVtb3RlLmNsYXNzLCoqL0NsaWVudC5jbGFzcywqKi9IZWxsby5jbGFzcywqKi9Db21tb25SZW1vdGUqLmNsYXNzLCoqL0JtcFJlbW90ZS5jbGFzcywqKi9CbXBSZW1vdGVIb21lKi5jbGFzcywqKi9TZnVsUmVtb3RlSG9tZSouY2xhc3MsKiovU2xlc3NSZW1vdGVIb21lKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDE3ICs2MywxNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CiAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNDE0NjA0ZC4uMDNlZWJiYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI2LDEyICsyNiwxMiBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBARUpCIHByaXZhdGUgc3RhdGljIEhlbGxvIGhyOwogICAgIEBFSkIgcHJpdmF0ZSBzdGF0aWMgQm1wUmVtb3RlSG9tZSBibXBSZW1vdGVIb21lOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2Z1bFJlbW90ZUhvbWUgc2Z1bFJlbW90ZUhvbWU7CiAKICAgICBARUpCIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRTdGF0ZWZ1bFJlbW90ZUhvbWUoU2Z1bFJlbW90ZUhvbWUgc3JoKSB7CkBAIC00MCw3ICs0MCw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTbGVzc1JlbW90ZUhvbWUgc2xlc3NSZW1vdGVIb21lOwogCi0gICAgQEVKQihiZWFuTmFtZT0iU2xlc3NCZWFuIikgCisgICAgQEVKQihiZWFuTmFtZT0iU2xlc3NCZWFuIikKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHNldFN0YXRlbGVzc1JlbW90ZUhvbWUoU2xlc3NSZW1vdGVIb21lIHNyaCkgewogICAgICAgICBzbGVzc1JlbW90ZUhvbWUgPSBzcmg7CiAgICAgfQpAQCAtNTEsMjUgKzUxLDI1IEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItZWpiMzAtY2xpZW50dmlldy1jb3JlSUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIHRyeSB7CiAKLQkgICAgaWYoIGhyID09IG51bGwgKSB7CisgICAgICAgIGlmKCBociA9PSBudWxsICkgewogCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gc3RhbmQtYWxvbmUgbW9kZSIpOwotCQlJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCQlociA9IChIZWxsbykgaWMubG9va3VwKCJlamIvZWpiX2VqYjMwX2NsaWVudHZpZXdfY29yZV9Db3JlQXBwIik7Ci0JCWJtcFJlbW90ZUhvbWUgPSAoQm1wUmVtb3RlSG9tZSkgaWMubG9va3VwKCJlamIvZWpiX2VqYjMwX2NsaWVudHZpZXdfY29yZV9CbXAiKTsKLQkJc2Z1bFJlbW90ZUhvbWUgPSAoU2Z1bFJlbW90ZUhvbWUpIGljLmxvb2t1cCgiZWpiL2VqYl9lamIzMF9jbGllbnR2aWV3X2NvcmVfU2Z1bCIpOwotCQlzbGVzc1JlbW90ZUhvbWUgPSAoU2xlc3NSZW1vdGVIb21lKSBpYy5sb29rdXAoImVqYi9lamJfZWpiMzBfY2xpZW50dmlld19jb3JlX1NsZXNzIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gc3RhbmQtYWxvbmUgbW9kZSIpOworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBociA9IChIZWxsbykgaWMubG9va3VwKCJlamIvZWpiX2VqYjMwX2NsaWVudHZpZXdfY29yZV9Db3JlQXBwIik7CisgICAgICAgIGJtcFJlbW90ZUhvbWUgPSAoQm1wUmVtb3RlSG9tZSkgaWMubG9va3VwKCJlamIvZWpiX2VqYjMwX2NsaWVudHZpZXdfY29yZV9CbXAiKTsKKyAgICAgICAgc2Z1bFJlbW90ZUhvbWUgPSAoU2Z1bFJlbW90ZUhvbWUpIGljLmxvb2t1cCgiZWpiL2VqYl9lamIzMF9jbGllbnR2aWV3X2NvcmVfU2Z1bCIpOworICAgICAgICBzbGVzc1JlbW90ZUhvbWUgPSAoU2xlc3NSZW1vdGVIb21lKSBpYy5sb29rdXAoImVqYi9lamJfZWpiMzBfY2xpZW50dmlld19jb3JlX1NsZXNzIik7CiAKLQkgICAgfQorICAgICAgICB9CiAKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0aW5nIGluamVjdGVkIEJtcFJlbW90ZUhvbWUiKTsKQEAgLTc3LDggKzc3LDggQEAKICAgICAgICAgICAgIGJtcFJlbW90ZSA9IGJtcFJlbW90ZUhvbWUuZmluZEJ5UHJpbWFyeUtleSgiY2xpZW50MSIpOwogCiAgICAgICAgICAgICBFSkJNZXRhRGF0YSBtZCA9IGJtcFJlbW90ZUhvbWUuZ2V0RUpCTWV0YURhdGEoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJtZXRhZGF0YSA9ICIgKyBtZCk7Ci0gICAgICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtZXRhZGF0YSA9ICIgKyBtZCk7CisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdGluZyBpbmplY3RlZCBTbGVzc1JlbW90ZUhvbWUiKTsKICAgICAgICAgICAgIFNsZXNzUmVtb3RlIHNsZXNzUmVtb3RlID0gc2xlc3NSZW1vdGVIb21lLmNyZWF0ZSgpOwogICAgICAgICAgICAgc2xlc3NSZW1vdGUucmVxdWlyZWQoKTsKQEAgLTg2LDEyICs4NiwxMiBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0aW5nIGluamVjdGVkIFNmdWxSZW1vdGVIb21lIik7CiAgICAgICAgICAgICBTZnVsUmVtb3RlIHNmdWxSZW1vdGUgPSBzZnVsUmVtb3RlSG9tZS5jcmVhdGVTZnVsKCk7CiAgICAgICAgICAgICBzZnVsUmVtb3RlLnJlcXVpcmVkKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0aW5nIFJlbW90ZSAzLjAgSGVsbG8gaW50ZiIpOwogICAgICAgICAgICAgaHIudGVzdFBhc3NCeVJlZigpOwogCi0JICAgIC8vIGludm9rZSBtZXRob2Qgb24gdGhlIEVKQgotCSAgICBkb1Byb3h5VGVzdChocik7CisgICAgICAgIC8vIGludm9rZSBtZXRob2Qgb24gdGhlIEVKQgorICAgICAgICBkb1Byb3h5VGVzdChocik7CiAKICAgICAgICAgICAgIHRlc3RFeGNlcHRpb25zKGhyKTsKIApAQCAtMTAzLDggKzEwMyw4IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgdGVzdEV4Y2VwdGlvbnMoSGVsbG8gaCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC0xMTMsNyArMTEzLDcgQEAKICAgICAgICAgICAgIGgudGhyb3dFeGNlcHRpb24oKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgaWYoIGUuZ2V0Q2xhc3MoKSA9PSBFeGNlcHRpb24uY2xhc3MgKSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5nZXRDbGFzcygpICsgIiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICB0aHJvdyBlOwpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgICAgICAgICBoLnRocm93QXBwRXhjZXB0aW9uMSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiZGlkbid0IGdldCBleGNlcHRpb24gZm9yIHRlc3RFeGNlcHRpb24yIik7CiAgICAgICAgIH0gY2F0Y2goamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmdldENsYXNzKCkgKyAiICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KIApAQCAtMTMyLDcgKzEzMiw3IEBACiAgICAgICAgICAgICBoLnRocm93QXBwRXhjZXB0aW9uMigpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiZGlkbid0IGdldCBleGNlcHRpb24gZm9yIHRlc3RFeGNlcHRpb24zIik7CiAgICAgICAgIH0gY2F0Y2goamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmdldENsYXNzKCkgKyAiICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KIApAQCAtMTU4LDM2ICsxNTgsMzYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkb1Byb3h5VGVzdChIZWxsbyBocikgCi0JdGhyb3dzIEV4Y2VwdGlvbgorICAgIHByaXZhdGUgdm9pZCBkb1Byb3h5VGVzdChIZWxsbyBocikKKyAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotCVN5c3RlbS5vdXQucHJpbnRsbigiXG5TdGF0ZWZ1bCBTZXNzaW9uIHJlc3VsdHMgKG1pY3Jvc2VjKTogXHR3aXRoIHR4IFx0bm8gdHg6Iik7Ci0JaHIud2FybXVwKENvbW1vbi5TVEFURUZVTCk7Ci0JcnVuVGVzdHMoQ29tbW9uLlNUQVRFRlVMLCBocik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblN0YXRlZnVsIFNlc3Npb24gcmVzdWx0cyAobWljcm9zZWMpOiBcdHdpdGggdHggXHRubyB0eDoiKTsKKyAgICBoci53YXJtdXAoQ29tbW9uLlNUQVRFRlVMKTsKKyAgICBydW5UZXN0cyhDb21tb24uU1RBVEVGVUwsIGhyKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiXG5TdGF0ZWxlc3MgU2Vzc2lvbiByZXN1bHRzIChtaWNyb3NlYyk6IFx0d2l0aCB0eCBcdG5vIHR4OiIpOwotCWhyLndhcm11cChDb21tb24uU1RBVEVGVUwpOwotCXJ1blRlc3RzKENvbW1vbi5TVEFURUxFU1MsIGhyKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuU3RhdGVsZXNzIFNlc3Npb24gcmVzdWx0cyAobWljcm9zZWMpOiBcdHdpdGggdHggXHRubyB0eDoiKTsKKyAgICBoci53YXJtdXAoQ29tbW9uLlNUQVRFRlVMKTsKKyAgICBydW5UZXN0cyhDb21tb24uU1RBVEVMRVNTLCBocik7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuQk1QIEVudGl0eSByZXN1bHRzIChtaWNyb3NlYyk6IFx0XHR3aXRoIHR4IFx0bm8gdHg6Iik7Ci0JaHIud2FybXVwKENvbW1vbi5CTVApOwotCXJ1blRlc3RzKENvbW1vbi5CTVAsIGhyKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuQk1QIEVudGl0eSByZXN1bHRzIChtaWNyb3NlYyk6IFx0XHR3aXRoIHR4IFx0bm8gdHg6Iik7CisgICAgaHIud2FybXVwKENvbW1vbi5CTVApOworICAgIHJ1blRlc3RzKENvbW1vbi5CTVAsIGhyKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcnVuVGVzdHMoaW50IHR5cGUsIEhlbGxvIGhyKQotCXRocm93cyBFeGNlcHRpb24KKyAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotICAgICAgCisKICAgICAgICAgaHIubm90U3VwcG9ydGVkKHR5cGUsIHRydWUpOwogICAgICAgICBoci5ub3RTdXBwb3J0ZWQodHlwZSwgZmFsc2UpOwogICAgICAgICBoci5zdXBwb3J0cyh0eXBlLCB0cnVlKTsKLQloci5zdXBwb3J0cyh0eXBlLCBmYWxzZSk7CisgICAgaHIuc3VwcG9ydHModHlwZSwgZmFsc2UpOwogICAgICAgICBoci5yZXF1aXJlZCh0eXBlLCB0cnVlKTsKLQloci5yZXF1aXJlZCh0eXBlLCBmYWxzZSk7CisgICAgaHIucmVxdWlyZWQodHlwZSwgZmFsc2UpOwogICAgICAgICBoci5yZXF1aXJlc05ldyh0eXBlLCB0cnVlKTsKLQloci5yZXF1aXJlc05ldyh0eXBlLCBmYWxzZSk7CisgICAgaHIucmVxdWlyZXNOZXcodHlwZSwgZmFsc2UpOwogICAgICAgICBoci5tYW5kYXRvcnkodHlwZSwgdHJ1ZSk7Ci0JaHIubmV2ZXIodHlwZSwgZmFsc2UpOworICAgIGhyLm5ldmVyKHR5cGUsIGZhbHNlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBlMTAyMTcxLi4wYWMyYjEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC00OCw3ICs0OCw3IEBACiAgICAgPC9zZXNzaW9uPgogICAgIDxzZXNzaW9uPgogICAgICAgPGVqYi1uYW1lPlNmdWxCZWFuPC9lamItbmFtZT4KLSAgICAgIDxob21lPmNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuY2xpZW50dmlldy5jb3JlLlNmdWxSZW1vdGVIb21lPC9ob21lPiAKKyAgICAgIDxob21lPmNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuY2xpZW50dmlldy5jb3JlLlNmdWxSZW1vdGVIb21lPC9ob21lPgogICAgICAgPHJlbW90ZT5jb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmNsaWVudHZpZXcuY29yZS5TZnVsUmVtb3RlPC9yZW1vdGU+CiAgICAgICA8bG9jYWwtaG9tZT5jb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmNsaWVudHZpZXcuY29yZS5TZnVsSG9tZTwvbG9jYWwtaG9tZT4KICAgICAgIDxsb2NhbD5jb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmNsaWVudHZpZXcuY29yZS5TZnVsPC9sb2NhbD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvZWpiL0JtcEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9lamIvQm1wRUpCLmphdmEKaW5kZXggZGI5ODllZC4uNGZhNzQzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9lamIvQm1wRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9lamIvQm1wRUpCLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGVqYkNyZWF0ZShTdHJpbmcgcykgewogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWNfID09ICIgKyBlY18pOwotCXJldHVybiBzOworICAgIHJldHVybiBzOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoU3RyaW5nIHMpIHt9CkBAIC00NywxMCArNDcsMTAgQEAKICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKQogICAgIHt9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKQogICAgIHt9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkKICAgICB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkKQEAgLTYzLDcgKzYzLDcgQEAKICAgICB7fQogCiAgICAgcHVibGljIFN0cmluZyBlamJGaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBzKSB7Ci0JcmV0dXJuIHM7CisgICAgcmV0dXJuIHM7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdEV4Y2VwdGlvbjEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RQYXNzQnlSZWY0KENvbW1vblJlbW90ZSBjcikgewotICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIEhlbHBlcjEgdGVzdFBhc3NCeVJlZjUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2VqYi9CbXBIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2VqYi9CbXBIb21lLmphdmEKaW5kZXggMjQ0ZmUzZS4uOWEzNjUxNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9lamIvQm1wSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvZWpiL0JtcEhvbWUuamF2YQpAQCAtMjEsNSArMjEsNSBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEJtcEhvbWUgZXh0ZW5kcyBCbXBIb21lU3VwZXIKIHsKLSAgICBCbXAgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgcykgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbjsgICAgCisgICAgQm1wIGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHMpIHRocm93cyBDcmVhdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2VqYi9CbXBSZW1vdGVIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2VqYi9CbXBSZW1vdGVIb21lLmphdmEKaW5kZXggYTljNGJhYS4uYTQ5OTkxYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9lamIvQm1wUmVtb3RlSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvZWpiL0JtcFJlbW90ZUhvbWUuamF2YQpAQCAtMjEsNSArMjEsNSBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEJtcFJlbW90ZUhvbWUgZXh0ZW5kcyBCbXBSZW1vdGVIb21lU3VwZXIKIHsKLSAgICBCbXBSZW1vdGUgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgcykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgQ3JlYXRlRXhjZXB0aW9uOyAgICAKKyAgICBCbXBSZW1vdGUgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgcykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgQ3JlYXRlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9lamIvSGVsbG9FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvZWpiL0hlbGxvRUpCLmphdmEKaW5kZXggN2JmNzgxNC4uMmQyMDRmNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9lamIvSGVsbG9FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2VqYi9IZWxsb0VKQi5qYXZhCkBAIC01Myw3ICs1Myw3IEBACiAKICAgICBARUpCIHB1YmxpYyBCbXBIb21lIGJtcEhvbWU7CiAKLSAgICBARUpCKGJlYW5OYW1lPSJCbXBCZWFuIikgCisgICAgQEVKQihiZWFuTmFtZT0iQm1wQmVhbiIpCiAgICAgcHVibGljIEJtcEhvbWVTdXBlciBibXBIb21lU3VwZXI7CiAKICAgICBwcml2YXRlIEJtcCBibXA7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgcHJpdmF0ZSBCbXBSZW1vdGUgYm1wUmVtb3RlOwogCiAgICAgcHJpdmF0ZSBsb25nIG92ZXJoZWFkOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHBrZXkgPSAiQSBCTVAgQmVhbiI7CiAKICAgICBAUmVzb3VyY2UgamFrYXJ0YS50cmFuc2FjdGlvbi5Vc2VyVHJhbnNhY3Rpb24gdXQ7CkBAIC03MCwyNyArNzAsMjcgQEAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHB1YmxpYyB2b2lkIGNyZWF0ZSgpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAogICAgICAgICAgICAgc2Z1bCA9IHNmdWxIb21lLmNyZWF0ZVNmdWwoKTsKICAgICAgICAgICAgIHNmdWxSZW1vdGUgPSBzZnVsUmVtb3RlSG9tZS5jcmVhdGVTZnVsKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBsb2NhL3JlbW90ZSBzZnVsIG9ianMgdmlhIGhvbWVzLiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgbG9jYS9yZW1vdGUgc2Z1bCBvYmpzIHZpYSBob21lcy4iKTsKIAogICAgICAgICAgICAgYm1wID0gYm1wSG9tZS5jcmVhdGUocGtleSk7CiAgICAgICAgICAgICBibXBSZW1vdGUgPSAoQm1wUmVtb3RlKQogICAgICAgICAgICAgICAgIGJtcFJlbW90ZUhvbWUuZmluZEJ5UHJpbWFyeUtleShwa2V5KTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIEJNUCBiZWFuLiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgQk1QIGJlYW4uIik7CiAKICAgICAgICAgICAgIHNsZXNzID0gc2xlc3NIb21lLmNyZWF0ZSgpOwogICAgICAgICAgICAgc2xlc3NSZW1vdGUgPSBzbGVzc1JlbW90ZUhvbWUuY3JlYXRlKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBsb2NhL3JlbW90ZSBzbGVzcyBvYmpzIHZpYSBob21lcy4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIGxvY2EvcmVtb3RlIHNsZXNzIG9ianMgdmlhIGhvbWVzLiIpOwogCiAKICAgICAgICAgICAgIC8vICAgICAgICAgICAgdXQgPSBjb250ZXh0LmdldFVzZXJUcmFuc2FjdGlvbigpOwotCSAgIAkgICAgIAotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB0ZXN0UmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CkBAIC05OSw3ICs5OSw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgQk1QIGJlYW4uIik7CiAgICAgICAgICAgICBibXBIb21lLnJlbW92ZShibXAyLmdldFByaW1hcnlLZXkoKSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSByZW1vdmVkIGxvY2FsIGVudGl0eSBiZWFuIik7Ci0gICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsgICAgICAgICAgICAKKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KQEAgLTEyNyw5ICsxMjcsOSBAQAogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAoKEVKQkxvY2FsT2JqZWN0KXNmdWwpLnJlbW92ZSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgKChFSkJMb2NhbE9iamVjdClzZnVsKS5yZW1vdmUoKTsgCisgICAgICAgICAgICAgICAgKChFSkJMb2NhbE9iamVjdClzZnVsKS5yZW1vdmUoKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCIybmQgc2Z1bCByZW1vdmUgc2hvdWxkIGhhdmUgY2F1c2VkIGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gd2hlbiBhdHRlbXB0aW5nIHRvICIrCkBAIC0xMzksNyArMTM5LDcgQEAKIAogICAgICAgICAgICAgKChFSkJMb2NhbE9iamVjdClzbGVzcykucmVtb3ZlKCk7CiAKLSAgICAgICAgICAgICgoRUpCTG9jYWxPYmplY3QpYm1wKS5yZW1vdmUoKTsgCisgICAgICAgICAgICAoKEVKQkxvY2FsT2JqZWN0KWJtcCkucmVtb3ZlKCk7CiAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgRUpCRXhjZXB0aW9uIGVqYkV4ID0gbmV3IEVKQkV4Y2VwdGlvbigpOwpAQCAtMTYwLDUyICsxNjAsNTIgQEAKICAgICBwdWJsaWMgdm9pZCB0aHJvd0FwcEV4Y2VwdGlvbjIoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IE9iamVjdE5vdEZvdW5kRXhjZXB0aW9uKCJ0aHJvd0FwcEV4Y2VwdGlvbjIiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB3YXJtdXAoaW50IHR5cGUpIHsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgd2FybXVwKHR5cGUsIHRydWUpOwogICAgICAgICAgICAgd2FybXVwKHR5cGUsIGZhbHNlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gTWVhc3VyZSBsb29waW5nIGFuZCB0aW1pbmcgb3ZlcmhlYWQgCisKKyAgICAgICAgICAgIC8vIE1lYXN1cmUgbG9vcGluZyBhbmQgdGltaW5nIG92ZXJoZWFkCiAgICAgICAgICAgICBsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgICAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgICAgICBvdmVyaGVhZCA9IGVuZCAtIGJlZ2luOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN0cmluZyBwa2V5MiA9IChTdHJpbmcpICgoRUpCTG9jYWxPYmplY3QpYm1wKS5nZXRQcmltYXJ5S2V5KCk7CiAgICAgICAgICAgICBpZiggIXBrZXkyLmVxdWFscyhwa2V5KSApIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJwa2V5MiAiICsgcGtleTIgKyAiIGRvZXNuJ3QgbWF0Y2ggIiArIHBrZXkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHV0ID0gY29udGV4dC5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB0ZXN0TG9jYWxPYmplY3RzKCgoRUpCTG9jYWxPYmplY3Qpc2Z1bCksICgoRUpCTG9jYWxPYmplY3Qpc2xlc3MpKTsKICAgICAgICAgICAgIHRlc3RMb2NhbE9iamVjdHMoKChFSkJMb2NhbE9iamVjdClzZnVsKSwgKChFSkJMb2NhbE9iamVjdClibXApKTsKICAgICAgICAgICAgIHRlc3RMb2NhbE9iamVjdHMoKChFSkJMb2NhbE9iamVjdClzbGVzcyksKChFSkJMb2NhbE9iamVjdClibXApKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB0ZXN0RUpCT2JqZWN0cyhzZnVsUmVtb3RlLCBzbGVzc1JlbW90ZSk7CiAgICAgICAgICAgICB0ZXN0RUpCT2JqZWN0cyhzZnVsUmVtb3RlLCBibXBSZW1vdGUpOwogICAgICAgICAgICAgdGVzdEVKQk9iamVjdHMoc2xlc3NSZW1vdGUsIGJtcFJlbW90ZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdGVzdE5vdEltcGxlbWVudGVkKHNmdWwpOwogICAgICAgICAgICAgdGVzdE5vdEltcGxlbWVudGVkKHNsZXNzKTsKICAgICAgICAgICAgIHRlc3ROb3RJbXBsZW1lbnRlZChibXApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHRlc3ROb3RJbXBsZW1lbnRlZChzZnVsUmVtb3RlKTsKICAgICAgICAgICAgIHRlc3ROb3RJbXBsZW1lbnRlZChzbGVzc1JlbW90ZSk7CiAgICAgICAgICAgICB0ZXN0Tm90SW1wbGVtZW50ZWQoYm1wUmVtb3RlKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB0ZXN0UmVtb3ZlKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gc2tpcCB0ZXN0RXhjZXB0aW9ucyBmb3Igc2ZzYiBzaW5jZSB0aHJvd2luZyBhIHJ1bnRpbWUgZXhjZXB0aW9uCiAgICAgICAgICAgICAvLyB3aWxsIGNhdXNlIHRoZSBiZWFuIHRvIGJlIHJlbW92ZWQKICAgICAgICAgICAgIC8vIHRlc3RFeGNlcHRpb25zKHNmdWwpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHRlc3RFeGNlcHRpb25zKHNsZXNzKTsKICAgICAgICAgICAgIHRlc3RFeGNlcHRpb25zKGJtcCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdGVzdEV4Y2VwdGlvbnMoc2xlc3NSZW1vdGUpOwogICAgICAgICAgICAgdGVzdEV4Y2VwdGlvbnMoYm1wUmVtb3RlKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpAQCAtMjEzLDE0ICsyMTMsMTQgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgdGVzdEV4Y2VwdGlvbnMoQ29tbW9uIGMpIHsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgYy50ZXN0RXhjZXB0aW9uMSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZGlkbid0IGdldCBleGNlcHRpb24gZm9yIHRlc3RFeGNlcHRpb24xIik7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmdldENsYXNzKCkgKyAiICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KIApAQCAtMjI4LDcgKzIyOCw3IEBACiAgICAgICAgICAgICBjLnRlc3RFeGNlcHRpb24yKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJkaWRuJ3QgZ2V0IGV4Y2VwdGlvbiBmb3IgdGVzdEV4Y2VwdGlvbjIiKTsKICAgICAgICAgfSBjYXRjaChFSkJFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuZ2V0Q2xhc3MoKSArICIgIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogCkBAIC0yMzYsMTAgKzIzNiwxMCBAQAogICAgICAgICAgICAgYy50ZXN0RXhjZXB0aW9uMygpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZGlkbid0IGdldCBleGNlcHRpb24gZm9yIHRlc3RFeGNlcHRpb24zIik7CiAgICAgICAgIH0gY2F0Y2goRmluZGVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmdldENsYXNzKCkgKyAiICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB0ZXN0RXhjZXB0aW9ucyhDb21tb25SZW1vdGUgYykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CkBAIC0yNDgsNyArMjQ4LDcgQEAKICAgICAgICAgICAgIGMudGVzdEV4Y2VwdGlvbjEoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImRpZG4ndCBnZXQgZXhjZXB0aW9uIGZvciB0ZXN0RXhjZXB0aW9uMSIpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5nZXRDbGFzcygpICsgIiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAKQEAgLTI1Niw3ICsyNTYsNyBAQAogICAgICAgICAgICAgYy50ZXN0RXhjZXB0aW9uMigpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZGlkbid0IGdldCBleGNlcHRpb24gZm9yIHRlc3RFeGNlcHRpb24yIik7CiAgICAgICAgIH0gY2F0Y2goUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmdldENsYXNzKCkgKyAiICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KIApAQCAtMjY0LDcgKzI2NCw3IEBACiAgICAgICAgICAgICBjLnRlc3RFeGNlcHRpb24zKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJkaWRuJ3QgZ2V0IGV4Y2VwdGlvbiBmb3IgdGVzdEV4Y2VwdGlvbjMiKTsKICAgICAgICAgfSBjYXRjaChGaW5kZXJFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuZ2V0Q2xhc3MoKSArICIgIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogCkBAIC0yNzIsMTAgKzI3MiwxMCBAQAogICAgICAgICAgICAgYy50ZXN0RXhjZXB0aW9uNCgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZGlkbid0IGdldCBleGNlcHRpb24gZm9yIHRlc3RFeGNlcHRpb240Iik7CiAgICAgICAgIH0gY2F0Y2goRmluZGVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmdldENsYXNzKCkgKyAiICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyBPYmplY3QgdGVzdFBhc3NCeVJlZigpIHsKQEAgLTI4MywxNSArMjgzLDE1IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvaW5nIHBhc3MgYnkgcmVmIHRlc3RzIGZvciBzbGVzc1JlbW90ZSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBwYXNzYnlyZWYgPSB0cnVlIik7CiAgICAgICAgICAgICBfdGVzdFBhc3NCeVJlZihzbGVzc1JlbW90ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb2luZyBwYXNzIGJ5IHJlZiB0ZXN0cyBmb3Igc2Z1bFJlbW90ZSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBwYXNzYnlyZWYgPSBmYWxzZSIpOwogICAgICAgICAgICAgX3Rlc3RQYXNzQnlSZWYoc2Z1bFJlbW90ZSwgZmFsc2UpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9pbmcgcGFzcyBieSByZWYgdGVzdHMgZm9yIGJtcFJlbW90ZSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBwYXNzYnlyZWYgPSBmYWxzZSIpOwogICAgICAgICAgICAgX3Rlc3RQYXNzQnlSZWYoYm1wUmVtb3RlLCBmYWxzZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gdW5jb21tZW50IHRvIHNlZSBleGNlcHRpb24gdGhhdCBpcyB0aHJvd24gd2hlbiBub24tc2VyaWFsaXphYmxlCiAgICAgICAgICAgICAvLyBvYmplY3QgaXMgcGFzc2VkIG92ZXIgbm9uLWNvbGxvY2F0ZWQgcmVtb3RlIGNhbGwKICAgICAgICAgICAgIC8vcmV0dXJuIG5ldyBIZWxwZXIyKCk7CkBAIC0zMDMsOSArMzAzLDkgQEAKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIF90ZXN0UGFzc0J5UmVmKENvbW1vblJlbW90ZSBjLCBib29sZWFuIHBhc3NCeVJlZikgCisgICAgcHJpdmF0ZSB2b2lkIF90ZXN0UGFzc0J5UmVmKENvbW1vblJlbW90ZSBjLCBib29sZWFuIHBhc3NCeVJlZikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIGludCBpbnRWYWwgPSAxOwogICAgICAgICBTdHJpbmcgc3RyaW5nVmFsID0gIkhlbGxvRUpCOjpfdGVzdFBhc3NCeVJlZiI7CiAKQEAgLTMyMSw3ICszMjEsNyBAQAogICAgICAgICBpZiggcGFzc0J5UmVmICkgewogICAgICAgICAgICAgaWYoIChoMS5hID09IGludFZhbCkgfHwgaDEuYi5lcXVhbHMoc3RyaW5nVmFsKSApIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJoMSBtdXRhdGlvbnMgbm90IHByZXNlbnQgIiArIGgxKTsKLSAgICAgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmKCAoaDEuYSAhPSBpbnRWYWwpIHx8ICFoMS5iLmVxdWFscyhzdHJpbmdWYWwpICkgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImVycm9yIDogaDEgd2FzIG11dGF0ZWQgIiArIGgxKTsKQEAgLTMzOCwyMyArMzM4LDIzIEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIHRlc3RQYXNzQnlSZWYzIDogIiArIGgyKTsKICAgICAgICAgICAgIGlmKCAoaDIuYSA9PSBpbnRWYWwpIHx8IGgyLmIuZXF1YWxzKHN0cmluZ1ZhbCkgKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiaDIgbXV0YXRpb25zIG5vdCBwcmVzZW50ICIgKyBoMik7Ci0gICAgICAgICAgICB9ICAgCisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGMudGVzdFBhc3NCeVJlZjMoaDIpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IgOiBFeHBlY3RlZCBleGNlcHRpb24gd2hlbiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciA6IEV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFzc2luZyBub24tc2VyaWFsaXphYmxlIGRhdGEgIiArIGgyKTsKLSAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvKiBET04nVCBUUkVBVCBBUyBGQVRBTCBFUlJPUiBXSElMRSBXRSBJTlZFU1RJR0FURSBXSEVUSEVSCiAgICAgICAgICAgICAgICAgICogVEhJUyBXQVMgSU5URU5ERUQgQkVIQVZJT1IgRk9SIFRIRSBPUkIKLSAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRXJyb3IgOiBFeHBlY3RlZCBleGNlcHRpb24gd2hlbiAiICsgCi0gICAgICAgICAgICAgICAgICJwYXNzaW5nIG5vbi1zZXJpYWxpemFibGUgZGF0YSAiICsgCisgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkVycm9yIDogRXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gIiArCisgICAgICAgICAgICAgICAgICJwYXNzaW5nIG5vbi1zZXJpYWxpemFibGUgZGF0YSAiICsKICAgICAgICAgICAgICAgICAgaDIpOwogICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICB9IGNhdGNoKEVKQkV4Y2VwdGlvbiBlamJleCkgewogICAgICAgICAgICAgICAgIHRocm93IGVqYmV4OwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IGV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBleHBlY3RlZCBleGNlcHRpb24gd2hlbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBwYXNzaW5nIG5vbi1zZXJpYWxpemFibGUgZGF0YSIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgfQpAQCAtMzY5LDE2ICszNjksMTYgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgSGVscGVyMiBoNiA9IGMudGVzdFBhc3NCeVJlZjYoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIDogRXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IgOiBFeHBlY3RlZCBleGNlcHRpb24gd2hlbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5pbmcgbm9uLXNlcmlhbGl6YWJsZSBkYXRhICIgKyBoNik7Ci0gICAgICAgICAgICAgICAgLyogc2VlIGNvbW1lbnQgZm9yIHRlc3RQYXNzQnlSZWYzIGFib3ZlIAotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkVycm9yIDogRXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gIiArIAorICAgICAgICAgICAgICAgIC8qIHNlZSBjb21tZW50IGZvciB0ZXN0UGFzc0J5UmVmMyBhYm92ZQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkVycm9yIDogRXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuaW5nIG5vbi1zZXJpYWxpemFibGUgZGF0YSAiKTsKICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgfSBjYXRjaChFSkJFeGNlcHRpb24gZWpiZXgpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBlamJleDsgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB0aHJvdyBlamJleDsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBleHBlY3RlZCBleGNlcHRpb24gd2hlbiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgZXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcmV0dXJuaW5nIG5vbi1zZXJpYWxpemFibGUgZGF0YSIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgfQpAQCAtNDEwLDUyICs0MTAsNTIgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgd2FybXVwKGludCB0eXBlLCBib29sZWFuIHR4KSB7Ci0JLy8gZ2V0IEhvdHNwb3Qgd2FybWVkIHVwCQotCUNvbW1vbiBiZWFuID0gcHJlKHR5cGUsIHR4KTsKLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhbi5yZXF1aXJlc05ldygpOwotCSAgICBiZWFuLm5vdFN1cHBvcnRlZCgpOwotCX0KLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhbi5yZXF1aXJlZCgpOwotCSAgICBpZiAoIHR4ICkKLQkJYmVhbi5tYW5kYXRvcnkoKTsKLQkgICAgZWxzZQotCQliZWFuLm5ldmVyKCk7Ci0JICAgIGJlYW4uc3VwcG9ydHMoKTsKLQl9Ci0JaWYgKCB0eCApIHRyeSB7IHV0LmNvbW1pdCgpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkge30KKyAgICAvLyBnZXQgSG90c3BvdCB3YXJtZWQgdXAKKyAgICBDb21tb24gYmVhbiA9IHByZSh0eXBlLCB0eCk7CisgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CisgICAgICAgIGJlYW4ucmVxdWlyZXNOZXcoKTsKKyAgICAgICAgYmVhbi5ub3RTdXBwb3J0ZWQoKTsKKyAgICB9CisgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CisgICAgICAgIGJlYW4ucmVxdWlyZWQoKTsKKyAgICAgICAgaWYgKCB0eCApCisgICAgICAgIGJlYW4ubWFuZGF0b3J5KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgYmVhbi5uZXZlcigpOworICAgICAgICBiZWFuLnN1cHBvcnRzKCk7CisgICAgfQorICAgIGlmICggdHggKSB0cnkgeyB1dC5jb21taXQoKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHt9CiAgICAgfQogCi0gICAgcHJpdmF0ZSBDb21tb24gcHJlKGludCB0eXBlLCBib29sZWFuIHR4KSAKKyAgICBwcml2YXRlIENvbW1vbiBwcmUoaW50IHR5cGUsIGJvb2xlYW4gdHgpCiAgICAgewotCWlmICggdHggKSB0cnkgeyB1dC5iZWdpbigpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkge30KLQlpZiAoIHR5cGUgPT0gQ29tbW9uLlNUQVRFTEVTUyApCi0JICAgIHJldHVybiBzbGVzczsKLQllbHNlIGlmICggdHlwZSA9PSBDb21tb24uU1RBVEVGVUwgKQotCSAgICByZXR1cm4gc2Z1bDsKLQllbHNlCi0JICAgIHJldHVybiBibXA7CisgICAgaWYgKCB0eCApIHRyeSB7IHV0LmJlZ2luKCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZXggKSB7fQorICAgIGlmICggdHlwZSA9PSBDb21tb24uU1RBVEVMRVNTICkKKyAgICAgICAgcmV0dXJuIHNsZXNzOworICAgIGVsc2UgaWYgKCB0eXBlID09IENvbW1vbi5TVEFURUZVTCApCisgICAgICAgIHJldHVybiBzZnVsOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGJtcDsKICAgICB9CiAKLSAgICBwcml2YXRlIENvbW1vblJlbW90ZSBwcmVSZW1vdGUoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAotICAgIHsgICAgICAgCi0JaWYgKCB0eXBlID09IENvbW1vbi5TVEFURUxFU1MgKQotCSAgICByZXR1cm4gc2xlc3NSZW1vdGU7Ci0JZWxzZSBpZiAoIHR5cGUgPT0gQ29tbW9uLlNUQVRFRlVMICkKLQkgICAgcmV0dXJuIHNmdWxSZW1vdGU7Ci0JZWxzZQotCSAgICByZXR1cm4gYm1wUmVtb3RlOworICAgIHByaXZhdGUgQ29tbW9uUmVtb3RlIHByZVJlbW90ZShpbnQgdHlwZSwgYm9vbGVhbiB0eCkKKyAgICB7CisgICAgaWYgKCB0eXBlID09IENvbW1vbi5TVEFURUxFU1MgKQorICAgICAgICByZXR1cm4gc2xlc3NSZW1vdGU7CisgICAgZWxzZSBpZiAoIHR5cGUgPT0gQ29tbW9uLlNUQVRFRlVMICkKKyAgICAgICAgcmV0dXJuIHNmdWxSZW1vdGU7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gYm1wUmVtb3RlOwogICAgIH0KIAogCiAgICAgcHJpdmF0ZSBmbG9hdCBwb3N0KGxvbmcgYmVnaW4sIGxvbmcgZW5kLCBib29sZWFuIHR4KQogICAgIHsKLQlpZiAoIHR4ICkgdHJ5IHsgdXQuY29tbWl0KCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZXggKSB7fQotCXJldHVybiAoZmxvYXQpKCAoKGRvdWJsZSkoZW5kLWJlZ2luLW92ZXJoZWFkKSkvKChkb3VibGUpSVRFUkFUSU9OUykgKiAxMDAwLjAgKTsKKyAgICBpZiAoIHR4ICkgdHJ5IHsgdXQuY29tbWl0KCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZXggKSB7fQorICAgIHJldHVybiAoZmxvYXQpKCAoKGRvdWJsZSkoZW5kLWJlZ2luLW92ZXJoZWFkKSkvKChkb3VibGUpSVRFUkFUSU9OUykgKiAxMDAwLjAgKTsKICAgICB9CiAKLSAgICBwdWJsaWMgZmxvYXQgcmVxdWlyZXNOZXcoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAorICAgIHB1YmxpYyBmbG9hdCByZXF1aXJlc05ldyhpbnQgdHlwZSwgYm9vbGVhbiB0eCkKICAgICB7CiAgICAgICAgIGxvbmcgYmVnaW4gPSAwOwogICAgICAgICBsb25nIGVuZCA9IDA7CkBAIC00NzcsNyArNDc3LDcgQEAKICAgICAgICAgcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOwogICAgIH0KIAotICAgIHB1YmxpYyBmbG9hdCBub3RTdXBwb3J0ZWQoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAorICAgIHB1YmxpYyBmbG9hdCBub3RTdXBwb3J0ZWQoaW50IHR5cGUsIGJvb2xlYW4gdHgpCiAgICAgewogICAgICAgICBsb25nIGJlZ2luID0gMDsKICAgICAgICAgbG9uZyBlbmQgPSAwOwpAQCAtNDk1LDExICs0OTUsMTEgQEAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0gCi0JcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOworICAgICAgICB9CisgICAgcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOwogICAgIH0KIAotICAgIHB1YmxpYyBmbG9hdCByZXF1aXJlZChpbnQgdHlwZSwgYm9vbGVhbiB0eCkgCisgICAgcHVibGljIGZsb2F0IHJlcXVpcmVkKGludCB0eXBlLCBib29sZWFuIHR4KQogICAgIHsKICAgICAgICAgbG9uZyBiZWdpbiA9IDA7CiAgICAgICAgIGxvbmcgZW5kID0gMDsKQEAgLTUxMywyMyArNTEzLDIzIEBACiAgICAgICAgICAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKICAgICAgICAgICAgICAgICBiZWFuUmVtb3RlLnJlcXVpcmVkKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwogICAgICAgICB9Ci0JcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKLSAgICBwdWJsaWMgZmxvYXQgbWFuZGF0b3J5KGludCB0eXBlLCBib29sZWFuIHR4KSAKKyAgICBwdWJsaWMgZmxvYXQgbWFuZGF0b3J5KGludCB0eXBlLCBib29sZWFuIHR4KQogICAgIHsKICAgICAgICAgbG9uZyBiZWdpbiA9IDA7CiAgICAgICAgIGxvbmcgZW5kID0gMDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbW1vbiBiZWFuID0gcHJlKHR5cGUsIHR4KTsKICAgICAgICAgICAgIENvbW1vblJlbW90ZSBiZWFuUmVtb3RlID0gcHJlUmVtb3RlKHR5cGUsIHR4KTsKLSAgICAgICAgICAgIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7ICAgICAgICAgICAgCisgICAgICAgICAgICBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgICAgICAgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgYmVhbi5tYW5kYXRvcnkoKTsKICAgICAgICAgICAgIH0KQEAgLTU0MSw3ICs1NDEsNyBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KLQlyZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CisgICAgcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOwogICAgIH0KIAogICAgIHB1YmxpYyBmbG9hdCBuZXZlcihpbnQgdHlwZSwgYm9vbGVhbiB0eCkKQEAgLTU2MywxMCArNTYzLDEwIEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKICAgICAgICAgfQotCXJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKKyAgICByZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CiAgICAgfQogCi0gICAgcHVibGljIGZsb2F0IHN1cHBvcnRzKGludCB0eXBlLCBib29sZWFuIHR4KSAKKyAgICBwdWJsaWMgZmxvYXQgc3VwcG9ydHMoaW50IHR5cGUsIGJvb2xlYW4gdHgpCiAgICAgewogICAgICAgICBsb25nIGJlZ2luID0gMDsKICAgICAgICAgbG9uZyBlbmQgPSAwOwpAQCAtNTg1LDcgKzU4NSw3IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKICAgICAgICAgfQotCXJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKKyAgICByZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CiAgICAgfQogCiAgICAgLy8gYXNzdW1lcyBsbzEgYW5kIGxvMiBhcmUgZG8gbm90IGhhdmUgc2FtZSBjbGllbnQgaWRlbnRpdHkKQEAgLTYyOSwxMSArNjI5LDExIEBACiAgICAgICAgIGlmKCBvMS5pc0lkZW50aWNhbChvMikgKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJpc0lkZW50aWNhbCBmYWlsZWQiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiggbzIuaXNJZGVudGljYWwobzEpICkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiaXNJZGVudGljYWwgZmFpbGVkIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoICFvMS5pc0lkZW50aWNhbChvMSkgKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJpc0lkZW50aWNhbCBmYWlsZWQiKTsKICAgICAgICAgfQpAQCAtNjg2LDEyICs2ODYsMTIgQEAKICAgICAgICAgfQogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibzEuaGFzaENvZGUoKSA9ICIgKyBvMS5oYXNoQ29kZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibzIuaGFzaENvZGUoKSA9ICIgKyBvMi5oYXNoQ29kZSgpKTsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvMS50b1N0cmluZygpID0gIiArIG8xLnRvU3RyaW5nKCkpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm8yLnRvU3RyaW5nKCkgPSAiICsgbzIudG9TdHJpbmcoKSk7Ci0gICAgICAgIAorCiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2VqYi9TZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2VqYi9TZnVsRUpCLmphdmEKaW5kZXggMTUyMGMwNi4uMzEyOWM5NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9lamIvU2Z1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvZWpiL1NmdWxFSkIuamF2YQpAQCAtNTAsMTUgKzUwLDE1IEBACiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKLSAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSAKLSAgICB7IAorICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpCisgICAgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkIuZWpiUmVtb3ZlKCkuIGFib3V0IHRvIHRocm93IGV4Y2VwdGlvbiIpOwogICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigidGVzdCBjbGVhbnVwIGZvciBjYXNlIHdoZXJlICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWpiUmVtb3ZlIHRocm93cyBhbiBleGNlcHRpb24iKTsKICAgICB9CiAKICAgICBAUHJlUGFzc2l2YXRlCi0gICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpCiAgICAge30KIAogICAgIEBQb3N0QWN0aXZhdGUKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICAgICBIZWxwZXIyIGgyID0gbmV3IEhlbHBlcjIoKTsKICAgICAgICAgaDIuYSA9IDE7CiAgICAgICAgIGgyLmIgPSAiU2Z1bEVKQjo6dGVzdFBhc3NCeVJlZjYiOwotICAgICAgICByZXR1cm4gaDI7ICAgIAorICAgICAgICByZXR1cm4gaDI7CiAgICAgfQogCiAgICAgcHVibGljIENvbW1vblJlbW90ZSB0ZXN0UGFzc0J5UmVmNygpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvZWpiL1NsZXNzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2VqYi9TbGVzc0VKQi5qYXZhCmluZGV4IDMwM2FiZjUuLjNmYWZjZTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvZWpiL1NsZXNzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9lamIvU2xlc3NFSkIuamF2YQpAQCAtNDAsMTAgKzQwLDEwIEBACiAgICAgICAgIHNjXyA9IHNjOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpCiAgICAge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKQogICAgIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKQpAQCAtNzAsNyArNzAsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RQYXNzQnlSZWYxKGludCBhKSB7Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdFBhc3NCeVJlZjIoSGVscGVyMSBoZWxwZXIxKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODQ4Nzk1Ni4uMGFlYzg0YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2V4Y2VwdGlvbnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjIgKzE1LDIyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzAtY2xpZW50dmlldy1leGNlcHRpb25zIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5jbGllbnR2aWV3LmV4Y2VwdGlvbnMuY2xpZW50LkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2J1aWxkLnhtbAppbmRleCAwNmFiYjUzLi41YmJhZDAyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9IZWxsbyouY2xhc3MsKiovU2Z1bCouY2xhc3MsKiovU2xlc3MqLmNsYXNzLCoqLypFeGNlcHRpb24uY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywqKi9IZWxsby5jbGFzcywqKi9TKkJ1c2luZXNzKi5jbGFzcywqKi8qRXhjZXB0aW9uLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsMTcgKzYzLDE3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA4Y2Q3MTE0Li42ZWI3MTAxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjcsMTIgKzI3LDEyIEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIEBFSkIgc3RhdGljIHByaXZhdGUgSGVsbG8gaHI7CiAKLSAgICBARUpCIHN0YXRpYyBwcm90ZWN0ZWQgU2xlc3NSZW1vdGVCdXNpbmVzczIgc2xlc3NSZW1vdGVCdXNpbmVzczI7ICAgIAorICAgIEBFSkIgc3RhdGljIHByb3RlY3RlZCBTbGVzc1JlbW90ZUJ1c2luZXNzMiBzbGVzc1JlbW90ZUJ1c2luZXNzMjsKICAgICBARUpCIHN0YXRpYyBwdWJsaWMgU2Z1bFJlbW90ZUJ1c2luZXNzMiBzZnVsUmVtb3RlQnVzaW5lc3MyOwogCiAgICAgQEVKQiBzdGF0aWMgcHVibGljIFNsZXNzUmVtb3RlQnVzaW5lc3Mgc2xlc3NSZW1vdGVCdXNpbmVzczsKQEAgLTQ0LDI4ICs0NCwyOCBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWVqYjMwLWNsaWVudHZpZXctZXhjZXB0aW9uc0lEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICB0cnkgewogCi0JICAgIGlmKCBociA9PSBudWxsICkgeworICAgICAgICBpZiggaHIgPT0gbnVsbCApIHsKIAotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIHN0YW5kLWFsb25lIG1vZGUiKTsKLQkJSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkJaHIgPSAoSGVsbG8pIGljLmxvb2t1cCgiZWpiL2VqYl9lamIzMF9jbGllbnR2aWV3X2V4Y2VwdGlvbnNfSGVsbG8iKTsKLQkJc2Z1bFJlbW90ZUJ1c2luZXNzMiA9IChTZnVsUmVtb3RlQnVzaW5lc3MyKSBpYy5sb29rdXAoImVqYi9lamJfZWpiMzBfY2xpZW50dmlld19leGNlcHRpb25zX1NmdWwjY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5jbGllbnR2aWV3LmV4Y2VwdGlvbnMuU2Z1bFJlbW90ZUJ1c2luZXNzMiIpOwotCQlzbGVzc1JlbW90ZUJ1c2luZXNzMiA9IChTbGVzc1JlbW90ZUJ1c2luZXNzMikgaWMubG9va3VwKCJlamIvZWpiX2VqYjMwX2NsaWVudHZpZXdfZXhjZXB0aW9uc19TbGVzcyNjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmNsaWVudHZpZXcuZXhjZXB0aW9ucy5TbGVzc1JlbW90ZUJ1c2luZXNzMiIpOwotCQlzZnVsUmVtb3RlQnVzaW5lc3MgPSAoU2Z1bFJlbW90ZUJ1c2luZXNzKSBpYy5sb29rdXAoImVqYi9lamJfZWpiMzBfY2xpZW50dmlld19leGNlcHRpb25zX1NmdWwjY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5jbGllbnR2aWV3LmV4Y2VwdGlvbnMuU2Z1bFJlbW90ZUJ1c2luZXNzIik7Ci0JCXNsZXNzUmVtb3RlQnVzaW5lc3MgPSAoU2xlc3NSZW1vdGVCdXNpbmVzcykgaWMubG9va3VwKCJlamIvZWpiX2VqYjMwX2NsaWVudHZpZXdfZXhjZXB0aW9uc19TbGVzcyNjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmNsaWVudHZpZXcuZXhjZXB0aW9ucy5TbGVzc1JlbW90ZUJ1c2luZXNzIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gc3RhbmQtYWxvbmUgbW9kZSIpOworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBociA9IChIZWxsbykgaWMubG9va3VwKCJlamIvZWpiX2VqYjMwX2NsaWVudHZpZXdfZXhjZXB0aW9uc19IZWxsbyIpOworICAgICAgICBzZnVsUmVtb3RlQnVzaW5lc3MyID0gKFNmdWxSZW1vdGVCdXNpbmVzczIpIGljLmxvb2t1cCgiZWpiL2VqYl9lamIzMF9jbGllbnR2aWV3X2V4Y2VwdGlvbnNfU2Z1bCNjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmNsaWVudHZpZXcuZXhjZXB0aW9ucy5TZnVsUmVtb3RlQnVzaW5lc3MyIik7CisgICAgICAgIHNsZXNzUmVtb3RlQnVzaW5lc3MyID0gKFNsZXNzUmVtb3RlQnVzaW5lc3MyKSBpYy5sb29rdXAoImVqYi9lamJfZWpiMzBfY2xpZW50dmlld19leGNlcHRpb25zX1NsZXNzI2NvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuY2xpZW50dmlldy5leGNlcHRpb25zLlNsZXNzUmVtb3RlQnVzaW5lc3MyIik7CisgICAgICAgIHNmdWxSZW1vdGVCdXNpbmVzcyA9IChTZnVsUmVtb3RlQnVzaW5lc3MpIGljLmxvb2t1cCgiZWpiL2VqYl9lamIzMF9jbGllbnR2aWV3X2V4Y2VwdGlvbnNfU2Z1bCNjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmNsaWVudHZpZXcuZXhjZXB0aW9ucy5TZnVsUmVtb3RlQnVzaW5lc3MiKTsKKyAgICAgICAgc2xlc3NSZW1vdGVCdXNpbmVzcyA9IChTbGVzc1JlbW90ZUJ1c2luZXNzKSBpYy5sb29rdXAoImVqYi9lamJfZWpiMzBfY2xpZW50dmlld19leGNlcHRpb25zX1NsZXNzI2NvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuY2xpZW50dmlldy5leGNlcHRpb25zLlNsZXNzUmVtb3RlQnVzaW5lc3MiKTsKIAotCSAgICB9CisgICAgICAgIH0KIAotCSAgICAvLyBUT0RPIGVuYWJsZSB3aGVuICAgICAgICAgICAgIGhyLnJ1bkFjY2Vzc0RlbmllZEV4Y2VwdGlvblRlc3QoKTsKKyAgICAgICAgLy8gVE9ETyBlbmFibGUgd2hlbiAgICAgICAgICAgICBoci5ydW5BY2Nlc3NEZW5pZWRFeGNlcHRpb25UZXN0KCk7CiAKICAgICAgICAgICAgIGhyLnJ1blR4UmVxdWlyZWRUZXN0KCk7CiAKQEAgLTg4LDcgKzg4LDcgQEAKIAogICAgICAgICBydW5Db25jdXJyZW50QWNjZXNzVGVzdCgpOwogCi0gICAgCXJldHVybjsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBydW5UeFJlcXVpcmVkVGVzdCgpIHsKQEAgLTk5LDMwICs5OSwzMCBAQAogICAgICAgICAgICAgc2Z1bFJlbW90ZUJ1c2luZXNzLmZvcmNlVHJhbnNhY3Rpb25SZXF1aXJlZEV4Y2VwdGlvbigpOwogICAgICAgICB9IGNhdGNoKEVKQlRyYW5zYWN0aW9uUmVxdWlyZWRFeGNlcHRpb24gdHhyZSkgewogICAgICAgICAgICAgbnVtRXgrKzsKLSAgICAgICAgfSAKLSAgICAgICAgCisgICAgICAgIH0KKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc2xlc3NSZW1vdGVCdXNpbmVzcy5mb3JjZVRyYW5zYWN0aW9uUmVxdWlyZWRFeGNlcHRpb24oKTsKICAgICAgICAgfSBjYXRjaChFSkJUcmFuc2FjdGlvblJlcXVpcmVkRXhjZXB0aW9uIHR4cmUpIHsKLSAgICAgICAgICAgIG51bUV4Kys7ICAgICAgICAgICAgCi0gICAgICAgIH0gCisgICAgICAgICAgICBudW1FeCsrOworICAgICAgICB9CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNmdWxSZW1vdGVCdXNpbmVzczIuZm9yY2VUcmFuc2FjdGlvblJlcXVpcmVkRXhjZXB0aW9uKCk7CiAgICAgICAgIH0gY2F0Y2goVHJhbnNhY3Rpb25SZXF1aXJlZEV4Y2VwdGlvbiB0eHJlKSB7CiAgICAgICAgICAgICBudW1FeCsrOwogICAgICAgICB9IGNhdGNoKFJlbW90ZUV4Y2VwdGlvbiBlKSB7fQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc2xlc3NSZW1vdGVCdXNpbmVzczIuZm9yY2VUcmFuc2FjdGlvblJlcXVpcmVkRXhjZXB0aW9uKCk7CiAgICAgICAgIH0gY2F0Y2goVHJhbnNhY3Rpb25SZXF1aXJlZEV4Y2VwdGlvbiB0eHJlKSB7CiAgICAgICAgICAgICBudW1FeCsrOwogICAgICAgICB9IGNhdGNoKFJlbW90ZUV4Y2VwdGlvbiBlKSB7fQotICAgICAgICAKKwogICAgICAgICBpZiggbnVtRXggIT0gNCApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJEaWRuJ3QgcmVjZWl2ZSBhbGwgZXhwZWN0ZWQgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9ucyA6ICIgKyBudW1FeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVNTIDogcnVuVHhSZXF1aXJlZFRlc3QiKTsKICAgICAgICAgfQpAQCAtMTMxLDc1ICsxMzEsNzUgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBydW5Db25jdXJyZW50QWNjZXNzVGVzdCgpIHsKLQkgICAgdHJ5IHsKLQkJTXlUaHJlYWQgdGhyZWFkID0gbmV3IE15VGhyZWFkKHNmdWxSZW1vdGVCdXNpbmVzcyk7Ci0JCXRocmVhZC5zdGFydCgpOworICAgICAgICB0cnkgeworICAgICAgICBNeVRocmVhZCB0aHJlYWQgPSBuZXcgTXlUaHJlYWQoc2Z1bFJlbW90ZUJ1c2luZXNzKTsKKyAgICAgICAgdGhyZWFkLnN0YXJ0KCk7CiAKLQkJc2xlZXBGb3IoNSk7Ci0JCXNmdWxSZW1vdGVCdXNpbmVzcy5waW5nKCk7Ci0JCXN0YXQuYWRkU3RhdHVzKCJsb2NhbCBjb25jdXJyZW50QWNjZXNzWzEuMV0iLCBzdGF0LkZBSUwpOwotCSAgICB9IGNhdGNoIChqYWthcnRhLmVqYi5Db25jdXJyZW50QWNjZXNzRXhjZXB0aW9uIGNvbkV4KSB7Ci0JCXN0YXQuYWRkU3RhdHVzKCJsb2NhbCBjb25jdXJyZW50QWNjZXNzWzEuMV0iLCBzdGF0LlBBU1MpOwotCSAgICB9IGNhdGNoIChUaHJvd2FibGUgdGgpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJBcmdnZ2dnZzogR290OiAiICsgdGgpOwotCQlzdGF0LmFkZFN0YXR1cygibG9jYWwgY29uY3VycmVudEFjY2Vzc1sxLjJdIiwgc3RhdC5GQUlMKTsKLQkgICAgfQorICAgICAgICBzbGVlcEZvcig1KTsKKyAgICAgICAgc2Z1bFJlbW90ZUJ1c2luZXNzLnBpbmcoKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIGNvbmN1cnJlbnRBY2Nlc3NbMS4xXSIsIHN0YXQuRkFJTCk7CisgICAgICAgIH0gY2F0Y2ggKGpha2FydGEuZWpiLkNvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24gY29uRXgpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIGNvbmN1cnJlbnRBY2Nlc3NbMS4xXSIsIHN0YXQuUEFTUyk7CisgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0aCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFyZ2dnZ2dnOiBHb3Q6ICIgKyB0aCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBjb25jdXJyZW50QWNjZXNzWzEuMl0iLCBzdGF0LkZBSUwpOworICAgICAgICB9CiAKLQkgICAgdHJ5IHsKLQkJTXlUaHJlYWQyIHRocmVhZCA9IG5ldyBNeVRocmVhZDIoc2Z1bFJlbW90ZUJ1c2luZXNzMik7Ci0JCXRocmVhZC5zdGFydCgpOworICAgICAgICB0cnkgeworICAgICAgICBNeVRocmVhZDIgdGhyZWFkID0gbmV3IE15VGhyZWFkMihzZnVsUmVtb3RlQnVzaW5lc3MyKTsKKyAgICAgICAgdGhyZWFkLnN0YXJ0KCk7CiAKLQkJc2xlZXBGb3IoNSk7Ci0JCXNmdWxSZW1vdGVCdXNpbmVzczIucGluZ1JlbW90ZSgpOwotCQlzdGF0LmFkZFN0YXR1cygibG9jYWwgY29uY3VycmVudEFjY2Vzc1syLjFdIiwgc3RhdC5GQUlMKTsKLQkgICAgfSBjYXRjaCAoamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uIHJlbUV4KSB7Ci0JCXN0YXQuYWRkU3RhdHVzKCJsb2NhbCBjb25jdXJyZW50QWNjZXNzWzIuMV0iLCBzdGF0LlBBU1MpOwotCSAgICB9IGNhdGNoIChUaHJvd2FibGUgdGgpIHsKLQkJc3RhdC5hZGRTdGF0dXMoImxvY2FsIGNvbmN1cnJlbnRBY2Nlc3NbMi4yXSBHb3Q6ICIgKyB0aCwgc3RhdC5GQUlMKTsKLQkgICAgfQorICAgICAgICBzbGVlcEZvcig1KTsKKyAgICAgICAgc2Z1bFJlbW90ZUJ1c2luZXNzMi5waW5nUmVtb3RlKCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBjb25jdXJyZW50QWNjZXNzWzIuMV0iLCBzdGF0LkZBSUwpOworICAgICAgICB9IGNhdGNoIChqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24gcmVtRXgpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIGNvbmN1cnJlbnRBY2Nlc3NbMi4xXSIsIHN0YXQuUEFTUyk7CisgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0aCkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgY29uY3VycmVudEFjY2Vzc1syLjJdIEdvdDogIiArIHRoLCBzdGF0LkZBSUwpOworICAgICAgICB9CiAgICAgfQogCiAgICAgY2xhc3MgTXlUaHJlYWQgZXh0ZW5kcyBUaHJlYWQgewotCVNmdWxSZW1vdGVCdXNpbmVzcyBzZnVsQnVzaW5lc3M7CisgICAgU2Z1bFJlbW90ZUJ1c2luZXNzIHNmdWxCdXNpbmVzczsKIAotCU15VGhyZWFkKFNmdWxSZW1vdGVCdXNpbmVzcyBzZnVsQnVzaW5lc3MpIHsKLQkgICAgdGhpcy5zZnVsQnVzaW5lc3MgPSBzZnVsQnVzaW5lc3M7Ci0JfQorICAgIE15VGhyZWFkKFNmdWxSZW1vdGVCdXNpbmVzcyBzZnVsQnVzaW5lc3MpIHsKKyAgICAgICAgdGhpcy5zZnVsQnVzaW5lc3MgPSBzZnVsQnVzaW5lc3M7CisgICAgfQogCi0JcHVibGljIHZvaWQgcnVuKCkgewotCSAgICB0cnkgewotCQlzZnVsQnVzaW5lc3Muc2xlZXBGb3IoMjApOwotCSAgICB9IGNhdGNoIChUaHJvd2FibGUgdGgpIHsKLQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5vdCBpbnZva2Ugd2FpdGZvcigpIG1ldGhvZCIpOwotCSAgICB9Ci0JfQorICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgc2Z1bEJ1c2luZXNzLnNsZWVwRm9yKDIwKTsKKyAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRoKSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDb3VsZCBub3QgaW52b2tlIHdhaXRmb3IoKSBtZXRob2QiKTsKKyAgICAgICAgfQorICAgIH0KICAgICB9CiAKIAogICAgIGNsYXNzIE15VGhyZWFkMiBleHRlbmRzIFRocmVhZCB7Ci0JU2Z1bFJlbW90ZUJ1c2luZXNzMiBzZnVsQnVzaW5lc3MyOworICAgIFNmdWxSZW1vdGVCdXNpbmVzczIgc2Z1bEJ1c2luZXNzMjsKIAotCU15VGhyZWFkMihTZnVsUmVtb3RlQnVzaW5lc3MyIHNmdWxCdXNpbmVzczIpIHsKLQkgICAgdGhpcy5zZnVsQnVzaW5lc3MyID0gc2Z1bEJ1c2luZXNzMjsKLQl9CisgICAgTXlUaHJlYWQyKFNmdWxSZW1vdGVCdXNpbmVzczIgc2Z1bEJ1c2luZXNzMikgeworICAgICAgICB0aGlzLnNmdWxCdXNpbmVzczIgPSBzZnVsQnVzaW5lc3MyOworICAgIH0KIAotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkgICAgdHJ5IHsKLQkJc2Z1bEJ1c2luZXNzMi5zbGVlcEZvcigyMCk7Ci0JICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0aCkgewotCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ291bGQgbm90IGludm9rZSB3YWl0Zm9yKCkgbWV0aG9kIik7Ci0JICAgIH0KLQl9CisgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICB0cnkgeworICAgICAgICBzZnVsQnVzaW5lc3MyLnNsZWVwRm9yKDIwKTsKKyAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRoKSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDb3VsZCBub3QgaW52b2tlIHdhaXRmb3IoKSBtZXRob2QiKTsKKyAgICAgICAgfQorICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgc2xlZXBGb3IoaW50IHNlYykgewotCXRyeSB7Ci0JICAgIGZvciAoaW50IGk9MCA7IGk8c2VjOyBpKyspIHsKLQkJVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMDAwKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJbIiArIGkgKyAiLyIgKyBzZWMgKyAiXTogU2xlZXBpbmcuLi4uIik7Ci0JICAgIH0KLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgZm9yIChpbnQgaT0wIDsgaTxzZWM7IGkrKykgeworICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEwMDApOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsiICsgaSArICIvIiArIHNlYyArICJdOiBTbGVlcGluZy4uLi4iKTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgIH0KICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2V4Y2VwdGlvbnMvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDc1MzFiNTUuLmU5Y2I0YjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2V4Y2VwdGlvbnMvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjUsNyArMjUsNyBAQAogICAgICAgPGpuZGktbmFtZT5lamIvZWpiX2VqYjMwX2NsaWVudHZpZXdfZXhjZXB0aW9uc19IZWxsbzwvam5kaS1uYW1lPgogICAgICAgPGJlYW4tY2FjaGU+CiAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+NDwvbWF4LWNhY2hlLXNpemU+Ci0JIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PgorICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4KICAgICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz41PC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KICAgICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2V4Y2VwdGlvbnMvZWpiL0hlbGxvRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2VqYi9IZWxsb0VKQi5qYXZhCmluZGV4IDM3MDdkM2EuLjBjNmM5ZjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2V4Y2VwdGlvbnMvZWpiL0hlbGxvRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9lamIvSGVsbG9FSkIuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgIEBFSkIobmFtZT0ic2Z1bEJ1c2luZXNzIikgcHVibGljIFNmdWxCdXNpbmVzcyBzZnVsQnVzaW5lc3M7CiAgICAgQEVKQihuYW1lPSJzbGVzc0J1c2luZXNzIikgcHVibGljIFNsZXNzQnVzaW5lc3Mgc2xlc3NCdXNpbmVzczsKIAotICAgIEBFSkIobmFtZT0ic2xlc3NSZW1vdGVCdXNpbmVzczIiKSBwcm90ZWN0ZWQgU2xlc3NSZW1vdGVCdXNpbmVzczIgc2xlc3NSZW1vdGVCdXNpbmVzczI7ICAgIAorICAgIEBFSkIobmFtZT0ic2xlc3NSZW1vdGVCdXNpbmVzczIiKSBwcm90ZWN0ZWQgU2xlc3NSZW1vdGVCdXNpbmVzczIgc2xlc3NSZW1vdGVCdXNpbmVzczI7CiAgICAgQEVKQihuYW1lPSJzZnVsUmVtb3RlQnVzaW5lc3MyIikgcHVibGljIFNmdWxSZW1vdGVCdXNpbmVzczIgc2Z1bFJlbW90ZUJ1c2luZXNzMjsKIAogICAgIEBFSkIgcHVibGljIFNsZXNzUmVtb3RlQnVzaW5lc3Mgc2xlc3NSZW1vdGVCdXNpbmVzczsKQEAgLTU3LDEyICs1NywxMiBAQAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHVibGljIHZvaWQgY3JlYXRlKCkgewogCi0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICAgICAgdXQgPSBjb250ZXh0LmdldFVzZXJUcmFuc2FjdGlvbigpOwotICAgICAgICAgICAgCi0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KKworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHNldHVwKCkgewpAQCAtNzQsMTAgKzc0LDEwIEBACiAKICAgICAgICAgICAgIHNmdWxSZW1vdGVCdXNpbmVzcyA9IChTZnVsUmVtb3RlQnVzaW5lc3MpIGNvbnRleHQubG9va3VwKCJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmNsaWVudHZpZXcuZXhjZXB0aW9ucy5IZWxsb0VKQi9zZnVsUmVtb3RlQnVzaW5lc3MiKTsKICAgICAgICAgICAgIHNsZXNzUmVtb3RlQnVzaW5lc3MgPSAoU2xlc3NSZW1vdGVCdXNpbmVzcykgIGNvbnRleHQubG9va3VwKCJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmNsaWVudHZpZXcuZXhjZXB0aW9ucy5IZWxsb0VKQi9zbGVzc1JlbW90ZUJ1c2luZXNzIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc2Z1bFJlbW90ZUJ1c2luZXNzMiA9IChTZnVsUmVtb3RlQnVzaW5lc3MyKSBjb250ZXh0Lmxvb2t1cCgic2Z1bFJlbW90ZUJ1c2luZXNzMiIpOwogICAgICAgICAgICAgc2xlc3NSZW1vdGVCdXNpbmVzczIgPSAoU2xlc3NSZW1vdGVCdXNpbmVzczIpICBjb250ZXh0Lmxvb2t1cCgic2xlc3NSZW1vdGVCdXNpbmVzczIiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTk0LDEzICs5NCwxMyBAQAogICAgICAgICB9IGNhdGNoKEVKQkFjY2Vzc0V4Y2VwdGlvbiBlYWUpIHsKICAgICAgICAgICAgIC8vIHRoaXMgbWlnaHQgYmUgdGhyb3duIGJ5IGNvbnRhaW5lciBidXQgYXBwbGljYXRpb24KICAgICAgICAgICAgIC8vIGNhbid0IGRlcGVuZCBvbiByZWNlaXZpbmcgdGhlIHN1Yi1jbGFzcyBleGNlcHRpb24KLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHNwZWNpZmljIGVqYjMwIGV4Y2VwdGlvbiAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBzcGVjaWZpYyBlamIzMCBleGNlcHRpb24gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFlICsgIiBmb3Igc2Z1bEJ1c2luZXNzLmRlbmllZCgpIik7CiAgICAgICAgICAgICAvLyBiZWFuIG11c3Qgc3RpbGwgZXhpc3QKICAgICAgICAgICAgIHNmdWxCdXNpbmVzcy5mb28oKTsKICAgICAgICAgICAgIG51bUV4Kys7CiAgICAgICAgIH0gY2F0Y2goRUpCRXhjZXB0aW9uIGVsZSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgdmFsaWQgZXhjZXB0aW9uICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHZhbGlkIGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGUgKyAiIGZvciBzZnVsQnVzaW5lc3MuZGVuaWVkKCkiKTsKICAgICAgICAgICAgIC8vIGJlYW4gbXVzdCBzdGlsbCBleGlzdAogICAgICAgICAgICAgc2Z1bEJ1c2luZXNzLmZvbygpOwpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzZnVsUmVtb3RlQnVzaW5lc3MuZGVuaWVkKCk7CiAgICAgICAgIH0gY2F0Y2goRUpCRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCBleGNlcHRpb24gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgZXhjZXB0aW9uICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlICsgIiBmb3Igc2Z1bFJlbW90ZUJ1c2luZXNzLmRlbmllZCgpIik7CiAKICAgICAgICAgICAgIC8vIGJlYW4gbXVzdCBzdGlsbCBleGlzdApAQCAtMTIxLDcgKzEyMSw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzZnVsUmVtb3RlQnVzaW5lc3MyLmRlbmllZCgpOwogICAgICAgICB9IGNhdGNoKFJlbW90ZUV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgZXhjZXB0aW9uICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZSArICIgZm9yIHNmdWxCdXNpbmVzczIuZGVuaWVkKCkiKTsKIAogICAgICAgICAgICAgLy8gYmVhbiBtdXN0IHN0aWxsIGV4aXN0CkBAIC0xMzIsNyArMTMyLDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNsZXNzQnVzaW5lc3MuZGVuaWVkKCk7CiAgICAgICAgIH0gY2F0Y2goRUpCRXhjZXB0aW9uIGVsZSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgZXhjZXB0aW9uICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGUgKyAiIGZvciBzbGVzc0J1c2luZXNzLmRlbmllZCgpIik7CiAKICAgICAgICAgICAgIG51bUV4Kys7CkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNsZXNzUmVtb3RlQnVzaW5lc3MuZGVuaWVkKCk7CiAgICAgICAgIH0gY2F0Y2goRUpCRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCBleGNlcHRpb24gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgZXhjZXB0aW9uICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlICsgIiBmb3Igc2xlc3NSZW1vdGVCdXNpbmVzcy5kZW5pZWQoKSIpOwogICAgICAgICAgICAgbnVtRXgrKzsKICAgICAgICAgfQpAQCAtMTQ5LDE1ICsxNDksMTUgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNsZXNzUmVtb3RlQnVzaW5lc3MyLmRlbmllZCgpOwogICAgICAgICB9IGNhdGNoKFJlbW90ZUV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgZXhjZXB0aW9uICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZSArICIgZm9yIHNsZXNzUmVtb3RlQnVzaW5lc3MyLmRlbmllZCgpIik7CiAgICAgICAgICAgICBudW1FeCsrOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKCBudW1FeCAhPSA2ICkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkRpZG4ndCByZWNlaXZlIGFsbCBleHBlY3RlZCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb25zIDogIiArIG51bUV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MgOiBydW5BY2Nlc3NEZW5pZWRFeGNlcHRpb25UZXN0Iik7CiAgICAgICAgIH0KQEAgLTE4MCw3ICsxODAsNyBAQAogCiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB1dC5iZWdpbigpOwogICAgICAgICAgICAgdXQuc2V0Um9sbGJhY2tPbmx5KCk7CkBAIC0xODksNyArMTg5LDcgQEAKICAgICAgICAgICAgIHRyeSB7IHV0LnJvbGxiYWNrKCk7IH0gY2F0Y2goRXhjZXB0aW9uIHQpIHt9CiAgICAgICAgICAgICBudW1FeCsrOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7fQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgdXQuYmVnaW4oKTsKICAgICAgICAgICAgIHV0LnNldFJvbGxiYWNrT25seSgpOwpAQCAtMTk4LDE0ICsxOTgsMTQgQEAKICAgICAgICAgICAgIHRyeSB7IHV0LnJvbGxiYWNrKCk7IH0gY2F0Y2goRXhjZXB0aW9uIHQpIHt9CiAgICAgICAgICAgICBudW1FeCsrOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7fQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgdXQuYmVnaW4oKTsKICAgICAgICAgICAgIHV0LnNldFJvbGxiYWNrT25seSgpOwogICAgICAgICAgICAgc2xlc3NSZW1vdGVCdXNpbmVzcy5mb3JjZVRyYW5zYWN0aW9uUm9sbGVkYmFja0V4Y2VwdGlvbigpOwogICAgICAgICB9IGNhdGNoKEVKQlRyYW5zYWN0aW9uUm9sbGVkYmFja0V4Y2VwdGlvbiB0eHJlKSB7CiAgICAgICAgICAgICB0cnkgeyB1dC5yb2xsYmFjaygpOyB9IGNhdGNoKEV4Y2VwdGlvbiB0KSB7fQotICAgICAgICAgICAgbnVtRXgrKzsgICAgICAgICAgICAKKyAgICAgICAgICAgIG51bUV4Kys7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHt9CiAKICAgICAgICAgdHJ5IHsKQEAgLTIxNiw3ICsyMTYsNyBAQAogICAgICAgICAgICAgdHJ5IHsgdXQucm9sbGJhY2soKTsgfSBjYXRjaChFeGNlcHRpb24gdCkge30KICAgICAgICAgICAgIG51bUV4Kys7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB1dC5iZWdpbigpOwogICAgICAgICAgICAgdXQuc2V0Um9sbGJhY2tPbmx5KCk7CkBAIC0yMjUsMTcgKzIyNSwxNyBAQAogICAgICAgICAgICAgdHJ5IHsgdXQucm9sbGJhY2soKTsgfSBjYXRjaChFeGNlcHRpb24gdCkge30KICAgICAgICAgICAgIG51bUV4Kys7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKCBudW1FeCAhPSA2ICkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkRpZG4ndCByZWNlaXZlIGFsbCBleHBlY3RlZCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb25zIDogIiArIG51bUV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MgOiBydW5UeFJvbGxlZGJhY2tUZXN0Iik7CiAgICAgICAgIH0KIAogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHJ1blR4UmVxdWlyZWRUZXN0KCkgewogCiAgICAgICAgIHNldHVwKCk7CkBAIC0yNDYsNDIgKzI0Niw0MiBAQAogICAgICAgICAgICAgc2Z1bEJ1c2luZXNzLmZvcmNlVHJhbnNhY3Rpb25SZXF1aXJlZEV4Y2VwdGlvbigpOwogICAgICAgICB9IGNhdGNoKEVKQlRyYW5zYWN0aW9uUmVxdWlyZWRFeGNlcHRpb24gdHhyZSkgewogICAgICAgICAgICAgbnVtRXgrKzsKLSAgICAgICAgfSAKLSAgICAgICAgCisgICAgICAgIH0KKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc2xlc3NCdXNpbmVzcy5mb3JjZVRyYW5zYWN0aW9uUmVxdWlyZWRFeGNlcHRpb24oKTsKICAgICAgICAgfSBjYXRjaChFSkJUcmFuc2FjdGlvblJlcXVpcmVkRXhjZXB0aW9uIHR4cmUpIHsKICAgICAgICAgICAgIG51bUV4Kys7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNmdWxSZW1vdGVCdXNpbmVzcy5mb3JjZVRyYW5zYWN0aW9uUmVxdWlyZWRFeGNlcHRpb24oKTsKICAgICAgICAgfSBjYXRjaChFSkJUcmFuc2FjdGlvblJlcXVpcmVkRXhjZXB0aW9uIHR4cmUpIHsKICAgICAgICAgICAgIG51bUV4Kys7Ci0gICAgICAgIH0gCi0gICAgICAgIAorICAgICAgICB9CisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNsZXNzUmVtb3RlQnVzaW5lc3MuZm9yY2VUcmFuc2FjdGlvblJlcXVpcmVkRXhjZXB0aW9uKCk7CiAgICAgICAgIH0gY2F0Y2goRUpCVHJhbnNhY3Rpb25SZXF1aXJlZEV4Y2VwdGlvbiB0eHJlKSB7Ci0gICAgICAgICAgICBudW1FeCsrOyAgICAgICAgICAgIAotICAgICAgICB9IAorICAgICAgICAgICAgbnVtRXgrKzsKKyAgICAgICAgfQogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzZnVsUmVtb3RlQnVzaW5lc3MyLmZvcmNlVHJhbnNhY3Rpb25SZXF1aXJlZEV4Y2VwdGlvbigpOwogICAgICAgICB9IGNhdGNoKFRyYW5zYWN0aW9uUmVxdWlyZWRFeGNlcHRpb24gdHhyZSkgewogICAgICAgICAgICAgbnVtRXgrKzsKICAgICAgICAgfSBjYXRjaChSZW1vdGVFeGNlcHRpb24gZSkge30KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNsZXNzUmVtb3RlQnVzaW5lc3MyLmZvcmNlVHJhbnNhY3Rpb25SZXF1aXJlZEV4Y2VwdGlvbigpOwogICAgICAgICB9IGNhdGNoKFRyYW5zYWN0aW9uUmVxdWlyZWRFeGNlcHRpb24gdHhyZSkgewogICAgICAgICAgICAgbnVtRXgrKzsKICAgICAgICAgfSBjYXRjaChSZW1vdGVFeGNlcHRpb24gZSkge30KLSAgICAgICAgCisKICAgICAgICAgaWYoIG51bUV4ICE9IDYgKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRGlkbid0IHJlY2VpdmUgYWxsIGV4cGVjdGVkICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbnMgOiAiICsgbnVtRXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFTUyA6IHJ1blR4UmVxdWlyZWRUZXN0Iik7CiAgICAgICAgIH0KQEAgLTI5OSwxNCArMjk5LDE0IEBACiAgICAgICAgICAgICBzZnVsQnVzaW5lc3MucmVtb3ZlKCk7CiAgICAgICAgIH0gY2F0Y2goTm9TdWNoRUpCRXhjZXB0aW9uIG5zZWUpIHsKICAgICAgICAgICAgIG51bUV4Kys7Ci0gICAgICAgIH0gCisgICAgICAgIH0KIAotICAgICAgICBzZnVsUmVtb3RlQnVzaW5lc3MucmVtb3ZlKCk7ICAgICAgICAKKyAgICAgICAgc2Z1bFJlbW90ZUJ1c2luZXNzLnJlbW92ZSgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc2Z1bFJlbW90ZUJ1c2luZXNzLnJlbW92ZSgpOwogICAgICAgICB9IGNhdGNoKE5vU3VjaEVKQkV4Y2VwdGlvbiBuc2VlKSB7CiAgICAgICAgICAgICBudW1FeCsrOwotICAgICAgICB9IAorICAgICAgICB9CiAKIAogICAgICAgICAvLyBzZnVscmVtb3RlYnVzaW5lc3MyCkBAIC0zMjEsMTEgKzMyMSwxMSBAQAogICAgICAgICB9IGNhdGNoKE5vU3VjaE9iamVjdEV4Y2VwdGlvbiBuc29lKSB7CiAgICAgICAgICAgICBudW1FeCsrOwogICAgICAgICB9IGNhdGNoKFJlbW90ZUV4Y2VwdGlvbiBlKSB7fQotICAgICAgICAKKwogICAgICAgICBpZiggbnVtRXggIT0gMyApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJEaWRuJ3QgcmVjZWl2ZSBhbGwgZXhwZWN0ZWQgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9ucyA6ICIgKyBudW1FeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVNTIDogcnVuTm9TdWNoT2JqZWN0VGVzdCIpOwogICAgICAgICB9CkBAIC0zNDksMTQgKzM0OSwxNCBAQAogICAgICAgICAgICAgfSBjYXRjaChSdW50aW1lQXBwRXhjZXB0aW9uIGIpIHsKICAgICAgICAgICAgICAgICBudW1FeCsrOwogICAgICAgICAgICAgfQotICAgICAgICB9IAotICAgICAgICAKKyAgICAgICAgfQorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzbGVzc0J1c2luZXNzLnRocm93UnVudGltZUFwcEV4Y2VwdGlvbigpOwogICAgICAgICB9IGNhdGNoKFJ1bnRpbWVBcHBFeGNlcHRpb24gdHhyZSkgewogICAgICAgICAgICAgbnVtRXgrKzsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc2Z1bFJlbW90ZUJ1c2luZXNzLnRocm93UnVudGltZUFwcEV4Y2VwdGlvbigpOwogICAgICAgICB9IGNhdGNoKFJ1bnRpbWVBcHBFeGNlcHRpb24gYSkgewpAQCAtMzY4LDEzICszNjgsMTMgQEAKICAgICAgICAgICAgIH0gY2F0Y2goUnVudGltZUFwcEV4Y2VwdGlvbiBiKSB7CiAgICAgICAgICAgICAgICAgbnVtRXgrKzsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAKLSAgICAgICAgCisgICAgICAgIH0KKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc2xlc3NSZW1vdGVCdXNpbmVzcy50aHJvd1J1bnRpbWVBcHBFeGNlcHRpb24oKTsKICAgICAgICAgfSBjYXRjaChSdW50aW1lQXBwRXhjZXB0aW9uIHR4cmUpIHsKLSAgICAgICAgICAgIG51bUV4Kys7ICAgICAgICAgICAgCi0gICAgICAgIH0gCisgICAgICAgICAgICBudW1FeCsrOworICAgICAgICB9CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNmdWxSZW1vdGVCdXNpbmVzczIudGhyb3dSdW50aW1lQXBwRXhjZXB0aW9uKCk7CkBAIC0zODgsMTcgKzM4OCwxNyBAQAogICAgICAgICAgICAgICAgIG51bUV4Kys7CiAgICAgICAgICAgICB9IGNhdGNoKFJlbW90ZUV4Y2VwdGlvbiByZSkge30KICAgICAgICAgfSBjYXRjaChSZW1vdGVFeGNlcHRpb24gZSkge30KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNsZXNzUmVtb3RlQnVzaW5lc3MyLnRocm93UnVudGltZUFwcEV4Y2VwdGlvbigpOwogICAgICAgICB9IGNhdGNoKFJ1bnRpbWVBcHBFeGNlcHRpb24gdHhyZSkgewogICAgICAgICAgICAgbnVtRXgrKzsKICAgICAgICAgfSBjYXRjaChSZW1vdGVFeGNlcHRpb24gZSkge30KLSAgICAgICAgCisKICAgICAgICAgaWYoIG51bUV4ICE9IDYgKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRGlkbid0IHJlY2VpdmUgYWxsIGV4cGVjdGVkICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbnMgOiAiICsgbnVtRXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFTUyA6IHJ1bkFwcEV4Y2VwdGlvblRlc3QiKTsKICAgICAgICAgfQpAQCAtNDU5LDggKzQ1OSw4IEBACiAgICAgICAgICAgICB0cnkgeyB1dC5yb2xsYmFjaygpOyB9IGNhdGNoKEV4Y2VwdGlvbiB0KSB7fQogICAgICAgICB9CiAKLSAgICAgICAgCi0gICAgICAgIHRyeSB7ICAgICAgICAgICAgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHV0LmJlZ2luKCk7CiAgICAgICAgICAgICBzZnVsUmVtb3RlQnVzaW5lc3MudGhyb3dSdW50aW1lQXBwRXhjZXB0aW9uKCk7CiAgICAgICAgIH0gY2F0Y2goUnVudGltZUFwcEV4Y2VwdGlvbiBhKSB7CkBAIC00NzAsNyArNDcwLDcgQEAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsgdXQucm9sbGJhY2soKTsgfSBjYXRjaChFeGNlcHRpb24gdCkge30KLSAgICAgICAgfSAKKyAgICAgICAgfQogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB1dC5iZWdpbigpOwpAQCAtNDg0LDcgKzQ4NCw3IEBACiAgICAgICAgICAgICB0cnkgeyB1dC5yb2xsYmFjaygpOyB9IGNhdGNoKEV4Y2VwdGlvbiB0KSB7fQogICAgICAgICB9CiAKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHV0LmJlZ2luKCk7CiAgICAgICAgICAgICBzbGVzc1JlbW90ZUJ1c2luZXNzLnRocm93UnVudGltZUFwcEV4Y2VwdGlvbigpOwpAQCAtNDk1LDcgKzQ5NSw3IEBACiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7IHV0LnJvbGxiYWNrKCk7IH0gY2F0Y2goRXhjZXB0aW9uIHQpIHt9Ci0gICAgICAgIH0gCisgICAgICAgIH0KIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgdXQuYmVnaW4oKTsKQEAgLTU2NSw3ICs1NjUsNyBAQAogICAgICAgICBpZiggbnVtRXggIT0gMTIgKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRGlkbid0IHJlY2VpdmUgYWxsIGV4cGVjdGVkICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbnMgOiAiICsgbnVtRXgpOwotICAgICAgIAorCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MgOiBydW5Sb2xsYmFja0FwcEV4Y2VwdGlvblRlc3QiKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9lamIvU2Z1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IDM4ZjYzNTQuLjA0MWE0ZDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2V4Y2VwdGlvbnMvZWpiL1NmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2VqYi9TZnVsRUpCLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIAogQFN0YXRlZnVsCiBAQWNjZXNzVGltZW91dCgwKQotcHVibGljIGNsYXNzIFNmdWxFSkIgaW1wbGVtZW50cyAKK3B1YmxpYyBjbGFzcyBTZnVsRUpCIGltcGxlbWVudHMKICAgICBTZnVsQnVzaW5lc3MsIFNmdWxSZW1vdGVCdXNpbmVzcywgU2Z1bFJlbW90ZUJ1c2luZXNzMgogewogICAgIGludCBzdGF0ZSA9IDA7CkBAIC01NSwxMiArNTUsMTIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzbGVlcEZvcihpbnQgc2VjKSB7Ci0JdHJ5IHsKLQkgICAgZm9yIChpbnQgaT0wIDsgaTxzZWM7IGkrKykgewotCQlUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEwMDApOwotCSAgICB9Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JfQorICAgIHRyeSB7CisgICAgICAgIGZvciAoaW50IGk9MCA7IGk8c2VjOyBpKyspIHsKKyAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMDAwKTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBwaW5nKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9lamIvU2Z1bFJlbW90ZUJ1c2luZXNzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2VqYi9TZnVsUmVtb3RlQnVzaW5lc3MuamF2YQppbmRleCA2YzMyNDQ2Li4zZWNiMjgwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2VqYi9TZnVsUmVtb3RlQnVzaW5lc3MuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2VqYi9TZnVsUmVtb3RlQnVzaW5lc3MuamF2YQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IGpha2FydGEuZWpiLlJlbW90ZTsKIAogQFJlbW90ZQotcHVibGljIGludGVyZmFjZSBTZnVsUmVtb3RlQnVzaW5lc3MgCitwdWJsaWMgaW50ZXJmYWNlIFNmdWxSZW1vdGVCdXNpbmVzcwogewogCiAgICAgdm9pZCBmb28oKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2V4Y2VwdGlvbnMvZWpiL1NsZXNzQnVzaW5lc3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2V4Y2VwdGlvbnMvZWpiL1NsZXNzQnVzaW5lc3MuamF2YQppbmRleCA5Mjg0YTE4Li42YTdhMTRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2VqYi9TbGVzc0J1c2luZXNzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9lamIvU2xlc3NCdXNpbmVzcy5qYXZhCkBAIC0xNiw3ICsxNiw3IEBACiAKIHBhY2thZ2UgY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5jbGllbnR2aWV3LmV4Y2VwdGlvbnM7CiAKLXB1YmxpYyBpbnRlcmZhY2UgU2xlc3NCdXNpbmVzcyAKK3B1YmxpYyBpbnRlcmZhY2UgU2xlc3NCdXNpbmVzcwogewogCiAgICAgdm9pZCBmb3JjZVRyYW5zYWN0aW9uUmVxdWlyZWRFeGNlcHRpb24oKTsKQEAgLTI2LDYgKzI2LDYgQEAKICAgICB2b2lkIHRocm93UnVudGltZUFwcEV4Y2VwdGlvbigpIHRocm93cyBSdW50aW1lQXBwRXhjZXB0aW9uOwogCiAgICAgdm9pZCB0aHJvd1JvbGxiYWNrQXBwRXhjZXB0aW9uKCkgdGhyb3dzIFJvbGxiYWNrQXBwRXhjZXB0aW9uOwotICAgIAorCiAgICAgdm9pZCBkZW5pZWQoKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2V4Y2VwdGlvbnMvZWpiL1NsZXNzUmVtb3RlQnVzaW5lc3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2V4Y2VwdGlvbnMvZWpiL1NsZXNzUmVtb3RlQnVzaW5lc3MuamF2YQppbmRleCA2ZGFkYjM1Li5jZGY5MGVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2VqYi9TbGVzc1JlbW90ZUJ1c2luZXNzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9lamIvU2xlc3NSZW1vdGVCdXNpbmVzcy5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiBpbXBvcnQgamFrYXJ0YS5lamIuUmVtb3RlOwogCiBAUmVtb3RlCi1wdWJsaWMgaW50ZXJmYWNlIFNsZXNzUmVtb3RlQnVzaW5lc3MgCitwdWJsaWMgaW50ZXJmYWNlIFNsZXNzUmVtb3RlQnVzaW5lc3MKIHsKIAogICAgIHZvaWQgZm9yY2VUcmFuc2FjdGlvblJlcXVpcmVkRXhjZXB0aW9uKCk7CkBAIC0zMCw2ICszMCw2IEBACiAgICAgdm9pZCB0aHJvd1J1bnRpbWVBcHBFeGNlcHRpb24oKSB0aHJvd3MgUnVudGltZUFwcEV4Y2VwdGlvbjsKIAogICAgIHZvaWQgdGhyb3dSb2xsYmFja0FwcEV4Y2VwdGlvbigpIHRocm93cyBSb2xsYmFja0FwcEV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHZvaWQgZGVuaWVkKCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvbG9jYWxfc2ZzYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL2xvY2FsX3Nmc2IvYnVpbGQucHJvcGVydGllcwppbmRleCA5OTA1MWY2Li41NGExZmY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvbG9jYWxfc2ZzYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9sb2NhbF9zZnNiL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIzICsxNSwyMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMwLWVlLWxvY2FsX3Nmc2IiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2ltcGxlLmNsaWVudCIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuZWUubG9jYWxfc2ZzYi5jbGllbnQuU3RhbmRhbG9uZUNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9InNpbXBsZS5jbGllbnQyIiB2YWx1ZT0iY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5lZS5sb2NhbF9zZnNiLmNsaWVudC5TdGFuZGFsb25lQ2xpZW50MiIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvbG9jYWxfc2ZzYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvbG9jYWxfc2ZzYi9idWlsZC54bWwKaW5kZXggMDExZGM4ZS4uNDM1MTA5NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL2xvY2FsX3Nmc2IvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9sb2NhbF9zZnNiL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TZnVsKi5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TZnVsRHJpdmVyLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjEsMTAgKzYxLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9sb2NhbF9zZnNiL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9sb2NhbF9zZnNiL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA2ZTI1OGM0Li41MzAyNjVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvbG9jYWxfc2ZzYi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL2xvY2FsX3Nmc2IvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNSwxMCArMjUsMTAgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogQEVKQihuYW1lPSJlamIvU2Z1bERyaXZlclJlZiIsIGJlYW5JbnRlcmZhY2U9U2Z1bERyaXZlci5jbGFzcywKLQltYXBwZWROYW1lPSJjb3JiYW5hbWU6aWlvcDpsb2NhbGhvc3Q6MzcwMiNlamIvU2Z1bERyaXZlclJlZiIpCisgICAgbWFwcGVkTmFtZT0iY29yYmFuYW1lOmlpb3A6bG9jYWxob3N0OjM3MDIjZWpiL1NmdWxEcml2ZXJSZWYiKQogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTM4LDUyICszOCw1MiBAQAogbG9va3VwVXNpbmdKbmRpKCk7CiAgICAgICAgIC8vY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWVqYjMwLWVlLWxvY2FsX3Nmc2JJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBARUpCKG5hbWU9ImVqYi9TZnVsRHJpdmVyIiwgYmVhbkludGVyZmFjZT1TZnVsRHJpdmVyLmNsYXNzKQogICAgIHByaXZhdGUgc3RhdGljIFNmdWxEcml2ZXIgZHJpdmVyOwogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCi0JZHJpdmVyLmluaXRpYWxpemUoKTsKKyAgICBkcml2ZXIuaW5pdGlhbGl6ZSgpOwogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIHN0YXRlbGVzcyIpOwogICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGRyaXZlci5zYXlIZWxsbygpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIGhlbGxvIiwKLQkJIkhlbGxvIi5lcXVhbHMocmVzdWx0KSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CisgICAgICAgICJIZWxsbyIuZXF1YWxzKHJlc3VsdCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIGhlbGxvIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gZHJpdmVyLmRvUmVmQWxpYXNpbmdUZXN0KCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgUFJFX3JlZkFsaWFzaW5nVGVzdCIsCi0JCXJlc3VsdCA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CisgICAgICAgIHJlc3VsdCA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CiAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCByZWZBbGlhc2luZ1Rlc3QiICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0JLy9kcml2ZXIuY3JlYXRlTWFueVNmdWxFSkJzKDE2KTsKLQkvL2NyZWF0ZU1hbnlTZnVsRUpCcygxNik7CisgICAgLy9kcml2ZXIuY3JlYXRlTWFueVNmdWxFSkJzKDE2KTsKKyAgICAvL2NyZWF0ZU1hbnlTZnVsRUpCcygxNik7CiAKLQlzbGVlcEZvcig1KTsKLQlkcml2ZXIuY2hlY2tHZXRSZWYoKTsKLSAgICAgICAgCi0JdHJ5IHsKKyAgICBzbGVlcEZvcig1KTsKKyAgICBkcml2ZXIuY2hlY2tHZXRSZWYoKTsKKworICAgIHRyeSB7CiAgICAgICAgICAgICBib29sZWFuIHJlc3VsdCA9IGRyaXZlci5kb1JlZkFsaWFzaW5nVGVzdCgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIFBPU1RfcmVmQWxpYXNpbmdUZXN0IiwKLQkJcmVzdWx0ID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKKyAgICAgICAgcmVzdWx0ID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKIAotCSAgICBib29sZWFuIGdyZWV0ZXJUZXN0ID0gZHJpdmVyLnVzZVNmdWxHcmVldGVyKCk7CisgICAgICAgIGJvb2xlYW4gZ3JlZXRlclRlc3QgPSBkcml2ZXIudXNlU2Z1bEdyZWV0ZXIoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBHcmVldGVyUmVmVGVzdCIsCi0JCXJlc3VsdCA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CisgICAgICAgIHJlc3VsdCA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CiAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTk1LDUwICs5NSw1MCBAQAogCiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHNsZWVwRm9yKGludCBzZWNvbmRzKSB7Ci0Jd2hpbGUgKHNlY29uZHMtLSA+IDApIHsKLQkgICAgdHJ5IHsgVGhyZWFkLnNsZWVwKDEwMDApOyB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHt9Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2xlZXBpbmcgZm9yIDEgc2Vjb25kLiBTdGlsbCAiICsgc2Vjb25kcyArICIgc2Vjb25kcyBsZWZ0Li4uIik7Ci0JfQorICAgIHdoaWxlIChzZWNvbmRzLS0gPiAwKSB7CisgICAgICAgIHRyeSB7IFRocmVhZC5zbGVlcCgxMDAwKTsgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7fQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwaW5nIGZvciAxIHNlY29uZC4gU3RpbGwgIiArIHNlY29uZHMgKyAiIHNlY29uZHMgbGVmdC4uLiIpOworICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGNyZWF0ZU1hbnlTZnVsRUpCcyhpbnQgY291bnQpIHsKLQl3aGlsZSAoY291bnQtLSA+IDApIHsKLQkgICAgdHJ5IHsKLQkJU2Z1bERyaXZlciBkciA9IChTZnVsRHJpdmVyKSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2Z1bERyaXZlciIpOwotCQlkci5pbml0aWFsaXplKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0KLQl9CisgICAgd2hpbGUgKGNvdW50LS0gPiAwKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIFNmdWxEcml2ZXIgZHIgPSAoU2Z1bERyaXZlcikgKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NmdWxEcml2ZXIiKTsKKyAgICAgICAgZHIuaW5pdGlhbGl6ZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgbG9va3VwVXNpbmdKbmRpKCkgewotCXRyeSB7CisgICAgdHJ5IHsKIAogLyoKLQkgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JICAgIHByb3BzLnNldFByb3BlcnR5KCJqYXZhLm5hbWluZy5mYWN0b3J5LmluaXRpYWwiLCAiY29tLnN1bi5lbnRlcnByaXNlLm5hbWluZy5TZXJpYWxJbml0Q29udGV4dEZhY3RvcnkiKTsKLQkgICAgcHJvcHMuc2V0UHJvcGVydHkoImphdmEubmFtaW5nLmZhY3RvcnkudXJsLnBrZ3MiLCAiY29tLnN1bi5lbnRlcnByaXNlLm5hbWluZyIpOwotCSAgICBwcm9wcy5zZXRQcm9wZXJ0eSgiamF2YS5uYW1pbmcuZmFjdG9yeS5zdGF0ZSIsICJjb20uc3VuLmNvcmJhLmVlLmltcGwucHJlc2VudGF0aW9uLnJtaS5KTkRJU3RhdGVGYWN0b3J5SW1wbCIpOwotCSAgICBwcm9wcy5zZXRQcm9wZXJ0eSgib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsSG9zdCIsICIxMjkuMTQ1LjEzMy4xOTciKTsKLQkgICAgcHJvcHMuc2V0UHJvcGVydHkoIm9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiLCAiMzcwMiIpOworICAgICAgICBQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKyAgICAgICAgcHJvcHMuc2V0UHJvcGVydHkoImphdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbCIsICJjb20uc3VuLmVudGVycHJpc2UubmFtaW5nLlNlcmlhbEluaXRDb250ZXh0RmFjdG9yeSIpOworICAgICAgICBwcm9wcy5zZXRQcm9wZXJ0eSgiamF2YS5uYW1pbmcuZmFjdG9yeS51cmwucGtncyIsICJjb20uc3VuLmVudGVycHJpc2UubmFtaW5nIik7CisgICAgICAgIHByb3BzLnNldFByb3BlcnR5KCJqYXZhLm5hbWluZy5mYWN0b3J5LnN0YXRlIiwgImNvbS5zdW4uY29yYmEuZWUuaW1wbC5wcmVzZW50YXRpb24ucm1pLkpORElTdGF0ZUZhY3RvcnlJbXBsIik7CisgICAgICAgIHByb3BzLnNldFByb3BlcnR5KCJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxIb3N0IiwgIjEyOS4xNDUuMTMzLjE5NyIpOworICAgICAgICBwcm9wcy5zZXRQcm9wZXJ0eSgib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIsICIzNzAyIik7CiAKLQkgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KHByb3BzKTsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KHByb3BzKTsKICovCiAKLQkgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIFN0cmluZyBuYW1lID0gImVqYi9TZnVsRHJpdmVyUmVmIjsKLQkgICAgbmFtZSA9ICJjb3JiYW5hbWU6aWlvcDoxMjkuMTQ1LjEzMy4xOTc6MzcwMCMiICsgbmFtZTsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIFN0cmluZyBuYW1lID0gImVqYi9TZnVsRHJpdmVyUmVmIjsKKyAgICAgICAgbmFtZSA9ICJjb3JiYW5hbWU6aWlvcDoxMjkuMTQ1LjEzMy4xOTc6MzcwMCMiICsgbmFtZTsKIAogU3lzdGVtLm91dC5wcmludGxuKCIqKipMb29raW5nIHVwIFNmdWxEcml2ZXIuLi4iKTsKLQkgICAgU2Z1bERyaXZlciBkcml2ZXIgPSAoU2Z1bERyaXZlcikgY3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2Z1bERyaXZlclJlZiIpOworICAgICAgICBTZnVsRHJpdmVyIGRyaXZlciA9IChTZnVsRHJpdmVyKSBjdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TZnVsRHJpdmVyUmVmIik7CiBTeXN0ZW0ub3V0LnByaW50bG4oIioqKkdvdCBTZnVsRHJpdmVyLi4uIik7CiAvKiovCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgTG9va3VwVXNpbmdKbmRpIiwgc3RhdC5QQVNTKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBMb29rdXBVc2luZ0puZGkiLCBzdGF0LkZBSUwpOwotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9sb2NhbF9zZnNiL2VqYi9TZnVsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvbG9jYWxfc2ZzYi9lamIvU2Z1bC5qYXZhCmluZGV4IGQ2N2UxMGMuLmQwZGEyNjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9sb2NhbF9zZnNiL2VqYi9TZnVsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL2xvY2FsX3Nmc2IvZWpiL1NmdWwuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmVlLmxvY2FsX3Nmc2I7CiAKIGltcG9ydCBqYWthcnRhLmVqYi5Mb2NhbDsKLQkKKwogQExvY2FsCiBwdWJsaWMgaW50ZXJmYWNlIFNmdWwKIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9sb2NhbF9zZnNiL2VqYi9TZnVsRHJpdmVyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvbG9jYWxfc2ZzYi9lamIvU2Z1bERyaXZlckVKQi5qYXZhCmluZGV4IDA2OTY0N2UuLjg0NzVkN2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9sb2NhbF9zZnNiL2VqYi9TZnVsRHJpdmVyRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL2xvY2FsX3Nmc2IvZWpiL1NmdWxEcml2ZXJFSkIuamF2YQpAQCAtMzgsNTMgKzM4LDUzIEBACiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gaW5pdGlhbGl6ZSgpIHsKLQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOworICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CiAKLQlyZWYxID0gcmVmMiA9IGNyZWF0ZVNmdWwoKTsKKyAgICByZWYxID0gcmVmMiA9IGNyZWF0ZVNmdWwoKTsKIAogICAgICAgICByZWYxLnNldFNmdWxSZWYocmVmMik7Ci0JcmV0dXJuIChyZWYxICE9IG51bGwpOworICAgIHJldHVybiAocmVmMSAhPSBudWxsKTsKICAgICB9CiAKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIGJvb2xlYW4gZG9SZWZBbGlhc2luZ1Rlc3QoKSB7Ci0JYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQlmb3IgKGludCBpPTA7IGk8MTA7IGkrKykgewotCSAgICByZWYxLmluY3JlbWVudENvdW50ZXIoKTsKLQl9CisgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKyAgICBmb3IgKGludCBpPTA7IGk8MTA7IGkrKykgeworICAgICAgICByZWYxLmluY3JlbWVudENvdW50ZXIoKTsKKyAgICB9CiAKLQlyZXR1cm4gKHJlZjEuZ2V0Q291bnRlcigpID09IHJlZjIuZ2V0Q291bnRlcigpKTsKKyAgICByZXR1cm4gKHJlZjEuZ2V0Q291bnRlcigpID09IHJlZjIuZ2V0Q291bnRlcigpKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0NoZWNrcG9pbnQoKSB7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgY2hlY2tHZXRSZWYoKSB7Ci0JU2Z1bCByZWYgPSByZWYxLmdldFNmdWxSZWYoKTsKKyAgICBTZnVsIHJlZiA9IHJlZjEuZ2V0U2Z1bFJlZigpOwogICAgICAgICByZWYuZ2V0Q291bnRlcigpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGNyZWF0ZU1hbnlTZnVsRUpCcyhpbnQgY291bnQpIHsKIC8qCi0Jd2hpbGUgKGNvdW50LS0gPiAwKSB7Ci0JICAgIFNmdWwgc2YgPSAoU2Z1bCkgY3JlYXRlU2Z1bCgpOwotCX0KKyAgICB3aGlsZSAoY291bnQtLSA+IDApIHsKKyAgICAgICAgU2Z1bCBzZiA9IChTZnVsKSBjcmVhdGVTZnVsKCk7CisgICAgfQogKi8KICAgICB9CiAKICAgICBwcml2YXRlIFNmdWwgY3JlYXRlU2Z1bCgpIHsKLQlTZnVsIHNmdWwgPSBudWxsOworICAgIFNmdWwgc2Z1bCA9IG51bGw7CiAgICAgICAgIHRyeSB7Ci0JICAgIEluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBzZnVsID0gKFNmdWwpIGN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NmdWwiKTsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIHNmdWwgPSAoU2Z1bCkgY3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2Z1bCIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAKLQlyZXR1cm4gc2Z1bDsKKyAgICByZXR1cm4gc2Z1bDsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB1c2VTZnVsR3JlZXRlcigpIHsKLQlyZXR1cm4gKHNmdWxHcmVldGVyLmdldENvdW50ZXIoKSA9PSByZWYxLmdldENvdW50ZXIoKSk7CisgICAgcmV0dXJuIChzZnVsR3JlZXRlci5nZXRDb3VudGVyKCkgPT0gcmVmMS5nZXRDb3VudGVyKCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9sb2NhbF9zZnNiL2VqYi9TZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvbG9jYWxfc2ZzYi9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IGMwNjQ5Y2IuLmQxYmZjZDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9sb2NhbF9zZnNiL2VqYi9TZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL2xvY2FsX3Nmc2IvZWpiL1NmdWxFSkIuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiBAU3RhdGVmdWwKIHB1YmxpYyBjbGFzcyBTZnVsRUpCCi0JaW1wbGVtZW50cyBTZnVsLCBTZnVsR3JlZXRlcgorICAgIGltcGxlbWVudHMgU2Z1bCwgU2Z1bEdyZWV0ZXIKIHsKIAogICAgIHByaXZhdGUgU2Z1bCByZWY7CkBAIC00MCwxOSArNDAsMTkgQEAKIAogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBpbmNyZW1lbnRDb3VudGVyKCkgewotCWNvdW50ZXIrKzsKKyAgICBjb3VudGVyKys7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRDb3VudGVyKCkgewotCXJldHVybiBjb3VudGVyOworICAgIHJldHVybiBjb3VudGVyOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNmdWxSZWYoU2Z1bCByZWYpIHsKLQl0aGlzLnJlZiA9IHJlZjsKKyAgICB0aGlzLnJlZiA9IHJlZjsKICAgICB9CiAKICAgICBwdWJsaWMgU2Z1bCBnZXRTZnVsUmVmKCkgewotCXJldHVybiByZWY7CisgICAgcmV0dXJuIHJlZjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9sb2NhbF9zZnNiL2VqYi9TZnVsR3JlZXRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL2xvY2FsX3Nmc2IvZWpiL1NmdWxHcmVldGVyLmphdmEKaW5kZXggYmVlZWVmYy4uZGNmMTJhNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL2xvY2FsX3Nmc2IvZWpiL1NmdWxHcmVldGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL2xvY2FsX3Nmc2IvZWpiL1NmdWxHcmVldGVyLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5lZS5sb2NhbF9zZnNiOwogCiBpbXBvcnQgamFrYXJ0YS5lamIuTG9jYWw7Ci0JCisKIEBMb2NhbAogcHVibGljIGludGVyZmFjZSBTZnVsR3JlZXRlcgogewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9jbGllbnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfY2xpZW50L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMTk5NzU3YS4uNjhhODBjYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9jbGllbnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX2NsaWVudC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMC1lZS1yZW1vdGVfY2xpZW50Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX2NsaWVudC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX2NsaWVudC9idWlsZC54bWwKaW5kZXggNDJmMTEzYy4uOTMxYjU4MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9jbGllbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfY2xpZW50L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NmdWxQcm94eS5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYxLDEwICs2MSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX2NsaWVudC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX2NsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYjVkMDIxMS4uYzJjODhmMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9jbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjUsNzAgKzI1LDcwIEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKQotCXRocm93cyBFeGNlcHRpb24geworICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImVqYi1lamIzMC1lZS1yZW1vdGVfc2ZzYiIpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWVqYjMwLWVlLXJlbW90ZV9zZnNiSUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgQEVKQgogICAgIHByaXZhdGUgc3RhdGljIFNmdWxQcm94eSBwcm94eTsKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogCi0JYm9vbGVhbiBpbml0aWFsaXplZCA9IHByb3h5LmluaXRpYWxpemUoKTsKKyAgICBib29sZWFuIGluaXRpYWxpemVkID0gcHJveHkuaW5pdGlhbGl6ZSgpOwogICAgICAgICBzdGF0LmFkZFN0YXR1cygicmVtb3RlIGluaXRpYWxpemUiLAotCSAgICBpbml0aWFsaXplZCA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7Ci0JaWYgKGluaXRpYWxpemVkKSB7CisgICAgICAgIGluaXRpYWxpemVkID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKKyAgICBpZiAoaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgc3RhdGVsZXNzIik7CiAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gcHJveHkuc2F5SGVsbG8oKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJyZW1vdGUgaGVsbG8iLAotCQkiSGVsbG8iLmVxdWFscyhyZXN1bHQpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKKyAgICAgICAgIkhlbGxvIi5lcXVhbHMocmVzdWx0KSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygicmVtb3RlIGhlbGxvIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXRyeSB7Ci0JICAgIGZvciAoaW50IGk9MDsgaTw1OyBpKyspIHsKKyAgICB0cnkgeworICAgICAgICBmb3IgKGludCBpPTA7IGk8NTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHByb3h5LnNheVJlbW90ZUhlbGxvKCk7CiAgICAgICAgICAgICAgICAgcHJveHkuZG9DaGVja3BvaW50KCk7Ci0JICAgIH0KLQkgICAgZm9yIChpbnQgaT0wOyBpPDU7IGkrKykgeworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGk9MDsgaTw1OyBpKyspIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gcHJveHkuc2F5UmVtb3RlSGVsbG8oKTsKICAgICAgICAgICAgICAgICBwcm94eS5zYXlIZWxsbygpOwotCSAgICB9Ci0JICAgIGZvciAoaW50IGk9MDsgaTw1OyBpKyspIHsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpPTA7IGk8NTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHByb3h5LnNheVJlbW90ZUhlbGxvKCk7CiAgICAgICAgICAgICAgICAgcHJveHkuZG9DaGVja3BvaW50KCk7Ci0JICAgIH0KKyAgICAgICAgfQogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInJlbW90ZSByZW1vdGVfaGVsbG8iLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInJlbW90ZSByZW1vdGVfaGVsbG8iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotCX0KKyAgICB9CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0IGNvbXBsZXRlIik7CiAgICAgfQogCiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHNsZWVwRm9yKGludCBzZWNvbmRzKSB7Ci0Jd2hpbGUgKHNlY29uZHMtLSA+IDApIHsKLQkgICAgdHJ5IHsgVGhyZWFkLnNsZWVwKDEwMDApOyB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHt9Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2xlZXBpbmcgZm9yIDEgc2Vjb25kLiBTdGlsbCAiICsgc2Vjb25kcyArICIgc2Vjb25kcyBsZWZ0Li4uIik7Ci0JfQorICAgIHdoaWxlIChzZWNvbmRzLS0gPiAwKSB7CisgICAgICAgIHRyeSB7IFRocmVhZC5zbGVlcCgxMDAwKTsgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7fQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwaW5nIGZvciAxIHNlY29uZC4gU3RpbGwgIiArIHNlY29uZHMgKyAiIHNlY29uZHMgbGVmdC4uLiIpOworICAgIH0KICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfY2xpZW50L2VqYi9TZnVsUHJveHlFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfY2xpZW50L2VqYi9TZnVsUHJveHlFSkIuamF2YQppbmRleCBhZTQwNjc4Li45NmQ5NjczIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX2NsaWVudC9lamIvU2Z1bFByb3h5RUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9jbGllbnQvZWpiL1NmdWxQcm94eUVKQi5qYXZhCkBAIC0yNCw1MSArMjQsNTEgQEAKIAogQFN0YXRlZnVsCiBARUpCKG5hbWU9ImVqYi9EZWxlZ2F0ZSIsCi0JbWFwcGVkTmFtZT0iY29yYmFuYW1lOmlpb3A6bG9jYWxob3N0OjM3MDAjbWFwcGVkX2puZGlfbmFtZV9mb3JfU2Z1bERyaXZlciIsCi0JYmVhbkludGVyZmFjZT1TZnVsRHJpdmVyLmNsYXNzKQorICAgIG1hcHBlZE5hbWU9ImNvcmJhbmFtZTppaW9wOmxvY2FsaG9zdDozNzAwI21hcHBlZF9qbmRpX25hbWVfZm9yX1NmdWxEcml2ZXIiLAorICAgIGJlYW5JbnRlcmZhY2U9U2Z1bERyaXZlci5jbGFzcykKIHB1YmxpYyBjbGFzcyBTZnVsUHJveHlFSkIKLQlpbXBsZW1lbnRzIFNmdWxQcm94eSB7CisgICAgaW1wbGVtZW50cyBTZnVsUHJveHkgewogCiAgICAgcHJpdmF0ZSBTZnVsRHJpdmVyIGRlbGVnYXRlOwogCiAgICAgcHVibGljIGJvb2xlYW4gaW5pdGlhbGl6ZSgpIHsKIAogLyoKLQl0cnkgewotCSAgICBJbml0aWFsQ29udGV4dCBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZGVsZWdhdGUgPSAoU2Z1bERyaXZlcikgY3R4Lmxvb2t1cCgibWFwcGVkU2Z1bERyaXZlcl9fM194X0ludGVybmFsX1JlbW90ZUJ1c2luZXNzSG9tZV9fIik7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB0cnkgeworICAgICAgICBJbml0aWFsQ29udGV4dCBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZGVsZWdhdGUgPSAoU2Z1bERyaXZlcikgY3R4Lmxvb2t1cCgibWFwcGVkU2Z1bERyaXZlcl9fM194X0ludGVybmFsX1JlbW90ZUJ1c2luZXNzSG9tZV9fIik7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KIAotCXRyeSB7Ci0JICAgIEluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBkZWxlZ2F0ZSA9IChTZnVsRHJpdmVyKSBjdHgubG9va3VwKCJtYXBwZWRTZnVsRHJpdmVyIik7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB0cnkgeworICAgICAgICBJbml0aWFsQ29udGV4dCBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZGVsZWdhdGUgPSAoU2Z1bERyaXZlcikgY3R4Lmxvb2t1cCgibWFwcGVkU2Z1bERyaXZlciIpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAqLwogCi0JdHJ5IHsKLQkgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGRlbGVnYXRlID0gKFNmdWxEcml2ZXIpIGN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0RlbGVnYXRlIik7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB0cnkgeworICAgICAgICBJbml0aWFsQ29udGV4dCBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZGVsZWdhdGUgPSAoU2Z1bERyaXZlcikgY3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvRGVsZWdhdGUiKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogCi0JcmV0dXJuIChkZWxlZ2F0ZSAhPSBudWxsKTsKKyAgICByZXR1cm4gKGRlbGVnYXRlICE9IG51bGwpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oKSB7Ci0JcmV0dXJuIGRlbGVnYXRlLnNheUhlbGxvKCk7CisgICAgcmV0dXJuIGRlbGVnYXRlLnNheUhlbGxvKCk7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBzYXlSZW1vdGVIZWxsbygpIHsKLQlyZXR1cm4gZGVsZWdhdGUuc2F5UmVtb3RlSGVsbG8oKTsKKyAgICByZXR1cm4gZGVsZWdhdGUuc2F5UmVtb3RlSGVsbG8oKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0NoZWNrcG9pbnQoKSB7Ci0JZGVsZWdhdGUuZG9DaGVja3BvaW50KCk7CisgICAgZGVsZWdhdGUuZG9DaGVja3BvaW50KCk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX3Nmc2IvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfc2ZzYi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGYxMjY3MTQuLjk1M2MzZjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfc2ZzYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfc2ZzYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMC1lZS1yZW1vdGVfc2ZzYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9zZnNiL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfc2ZzYi9idWlsZC54bWwKaW5kZXggYjcyYzBkOS4uMzZlZTc4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9zZnNiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX3Nmc2IvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwyMSArNDYsMjEgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogCi0JPCEtLWJ1aWxkIGFuZCBwYWNrYWdlIC53YXIgZmlyc3Qgc28gaXQgZG9lc24ndCBjb250YWluIGVqYiBiZWFuICEtLT4KLQk8IS0tY2xhc3NlcyB0aGF0IGhhdmUgQFN0YXRlbGVzcy9AU3RhdGV1bCAhLS0+CisgICAgPCEtLWJ1aWxkIGFuZCBwYWNrYWdlIC53YXIgZmlyc3Qgc28gaXQgZG9lc24ndCBjb250YWluIGVqYiBiZWFuICEtLT4KKyAgICA8IS0tY2xhc3NlcyB0aGF0IGhhdmUgQFN0YXRlbGVzcy9AU3RhdGV1bCAhLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ0cnVlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovU2Z1bERyaXZlci5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY4LDEwICs2OCwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX3Nmc2IvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9zZnNiL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBlMjhjOTdmLi5hNjY2MjVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX3Nmc2IvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfc2ZzYi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI3LDIxICsyNywyMSBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImVqYi1lamIzMC1lZS1yZW1vdGVfc2ZzYiIpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKLQkvL2xvb2t1cFJlbW90ZVVzaW5nSm5kaSgpOworICAgIC8vbG9va3VwUmVtb3RlVXNpbmdKbmRpKCk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1lamIzMC1lZS1yZW1vdGVfc2ZzYklEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIEBFSkIobmFtZT0iZWpiL1NmdWxEcml2ZXIiLCBiZWFuSW50ZXJmYWNlPVNmdWxEcml2ZXIuY2xhc3MpCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2Z1bERyaXZlciBkcml2ZXI7CiAKQEAgLTUyLDEzICs1MiwxMyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBzdGF0ZWxlc3MiKTsKICAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBkcml2ZXIuc2F5SGVsbG8oKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJyZW1vdGUgaGVsbG8iLAotCQkiSGVsbG8iLmVxdWFscyhyZXN1bHQpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKKyAgICAgICAgIkhlbGxvIi5lcXVhbHMocmVzdWx0KSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygicmVtb3RlIGhlbGxvIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBkcml2ZXIuc2F5UmVtb3RlSGVsbG8oKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJyZW1vdGUgcmVtb3RlX2hlbGxvIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpAQCAtNjgsMjQgKzY4LDI0IEBACiAqLwogCiAKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArICJsb2NhbGhvc3QiICsgIjoiICsgIjQ4NDgiICsKICAgICAgICAgICAgICAgIi9lamItZWpiMzAtaGVsbG8tc2Vzc2lvbjMvc2VydmxldCI7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyB3ZWJjbGllbnQgc2VydmxldCBhdCAiICsgdXJsKTsKICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0IGNvbXBsZXRlIik7CiAgICAgfQogCiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHNsZWVwRm9yKGludCBzZWNvbmRzKSB7Ci0Jd2hpbGUgKHNlY29uZHMtLSA+IDApIHsKLQkgICAgdHJ5IHsgVGhyZWFkLnNsZWVwKDEwMDApOyB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHt9Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2xlZXBpbmcgZm9yIDEgc2Vjb25kLiBTdGlsbCAiICsgc2Vjb25kcyArICIgc2Vjb25kcyBsZWZ0Li4uIik7Ci0JfQorICAgIHdoaWxlIChzZWNvbmRzLS0gPiAwKSB7CisgICAgICAgIHRyeSB7IFRocmVhZC5zbGVlcCgxMDAwKTsgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7fQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwaW5nIGZvciAxIHNlY29uZC4gU3RpbGwgIiArIHNlY29uZHMgKyAiIHNlY29uZHMgbGVmdC4uLiIpOworICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIGludCBpbnZva2VTZXJ2bGV0KFN0cmluZyB1cmwpIHRocm93cyBFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9zZnNiL2VqYi9SZW1vdGVTZnVsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX3Nmc2IvZWpiL1JlbW90ZVNmdWwuamF2YQppbmRleCBiMTUwODAwLi5lNGE3MWVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX3Nmc2IvZWpiL1JlbW90ZVNmdWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX3Nmc2IvZWpiL1JlbW90ZVNmdWwuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmVlLnJlbW90ZV9zZnNiOwogCiBpbXBvcnQgamFrYXJ0YS5lamIuUmVtb3RlOwotCQorCiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIFJlbW90ZVNmdWwKIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfc2ZzYi9lamIvUmVtb3RlU2Z1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9zZnNiL2VqYi9SZW1vdGVTZnVsRUpCLmphdmEKaW5kZXggNDdmYTA0Yy4uM2RkODVkOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9zZnNiL2VqYi9SZW1vdGVTZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9zZnNiL2VqYi9SZW1vdGVTZnVsRUpCLmphdmEKQEAgLTE5LDE0ICsxOSwxNCBAQAogaW1wb3J0IGpha2FydGEuZWpiLlN0YXRlZnVsOwogaW1wb3J0IGpha2FydGEuZWpiLlRyYW5zYWN0aW9uQXR0cmlidXRlOwogaW1wb3J0IGpha2FydGEuZWpiLlRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZTsKLQkKKwogQFN0YXRlZnVsCiBwdWJsaWMgY2xhc3MgUmVtb3RlU2Z1bEVKQgotCWltcGxlbWVudHMgIFJlbW90ZVNmdWwgeworICAgIGltcGxlbWVudHMgIFJlbW90ZVNmdWwgewogCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyBTdHJpbmcgc2F5TmFtYXN0ZSgpIHsKLQlyZXR1cm4gIlJlbW90ZSBIZWxsbyI7CisgICAgcmV0dXJuICJSZW1vdGUgSGVsbG8iOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9zZnNiL2VqYi9TZnVsRHJpdmVyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX3Nmc2IvZWpiL1NmdWxEcml2ZXJFSkIuamF2YQppbmRleCBlNWM0YzkwLi45OTA0YjM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX3Nmc2IvZWpiL1NmdWxEcml2ZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX3Nmc2IvZWpiL1NmdWxEcml2ZXJFSkIuamF2YQpAQCAtMzksNyArMzksNyBAQAogCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyBTdHJpbmcgc2F5UmVtb3RlSGVsbG8oKSB7Ci0JcmV0dXJuIHJlbW90ZVNmdWwuc2F5TmFtYXN0ZSgpOworICAgIHJldHVybiByZW1vdGVTZnVsLnNheU5hbWFzdGUoKTsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9idWlsZC54bWwKaW5kZXggNjJiOTc1OC4uNWRmYWJjZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vYnVpbGQueG1sCkBAIC0zMywxMCArMzMsMTAgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXNzaW9uMiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNlc3Npb24yZnVsbCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9Im5vcGtnIi8+Ci0gICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibWRiIi8+ICAKLSAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJtZGIyIi8+ICAKKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJtZGIiLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJtZGIyIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2Vzc2lvbjQiLz4KLSAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXNzaW9uNSIvPiAKKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXNzaW9uNSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNlc3Npb24zIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2Vzc2lvbl9zdGFuZGFsb25lIi8+CiAgICAgPC90YXJnZXQ+CkBAIC03MSwxMyArNzEsMTMgQEAKICAgICAgICAgICAgIDxhbnQgZGlyPSJzZXNzaW9uMiIgdGFyZ2V0PSJkZXBsb3kiLz4KICAgICAgICAgICAgIDxhbnQgZGlyPSJzZXNzaW9uMiIgdGFyZ2V0PSJydW4iLz4KIAotCTwhLS0gbmVlZHMgaGFuZGxlIHN1cHBvcnQKKyAgICA8IS0tIG5lZWRzIGhhbmRsZSBzdXBwb3J0CiAgICAgICAgICAgICA8YW50IGRpcj0iZGNvZGUiIHRhcmdldD0iYnVpbGQiLz4KICAgICAgICAgICAgIDxhbnQgZGlyPSJkY29kZSIgdGFyZ2V0PSJkZXBsb3kiLz4KICAgICAgICAgICAgIDxhbnQgZGlyPSJkY29kZSIgdGFyZ2V0PSJydW4iLz4KICAgICAgICAgICAgIDxhbnQgZGlyPSJkY29kZSIgdGFyZ2V0PSJydW4iLz4KICAgICAgICAgICAgIDxhbnQgZGlyPSJkY29kZSIgdGFyZ2V0PSJ1bmRlcGxveSIvPgotCS0tPgorICAgIC0tPgogICAgICAgICAgICAgPGFudCBkaXI9InNlc3Npb24yIiB0YXJnZXQ9InVuZGVwbG95Ii8+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0ic2Vzc2lvbjIub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+CiAgICAgPC90YXJnZXQ+CkBAIC0xMTMsOSArMTEzLDkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWVqYjMwLWhlbGxvIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamIzMC1oZWxsbyB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vZGNvZGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9kY29kZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDgzNjM0ZmUuLjIwZmRmYmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9kY29kZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9kY29kZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMC1oZWxsby1kY29kZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL2Rjb2RlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9kY29kZS9idWlsZC54bWwKaW5kZXggODM0MDAwZC4uMTE2Y2Y3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL2Rjb2RlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vZGNvZGUvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICAgIDxkZWxldGUgZmlsZT0ic2Z1bGhhbmRsZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDcsMTQgKzQ3LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TZnVsKi5jbGFzcywqKi9TbGVzcyouY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovU2Z1bC5jbGFzcywqKi9TZnVsSG9tZS5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDExICs2MiwxMSBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8ZGVsZXRlIGZpbGU9InNmdWxoYW5kbGUiLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL2Rjb2RlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9kY29kZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNmVlMTFlNy4uN2EzMTA4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL2Rjb2RlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vZGNvZGUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zNCwxMyArMzQsMTMgQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1lamIzMC1oZWxsby1kY29kZUlEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU2Z1bEhvbWUgc2Z1bEhvbWU7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEFORExFX0ZJTEVfTkFNRSA9ICJzZnVsaGFuZGxlIjsKIAogICAgIHByaXZhdGUgU2Z1bFtdIHNmdWxzID0gbmV3IFNmdWxbMjBdOwpAQCAtNTgsMTEgKzU4LDExIEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJoYW5kbGUgZmlsZSBhbHJlYWR5IGV4aXN0cy4gIHJlY29uc3RpdHV0aW5nIHN0YXRlZnVsIHJlZmVyZW5jZSIpOwogCiAgICAgICAgICAgICAgICAgRmlsZUlucHV0U3RyZWFtIGZpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oaGFuZGxlRmlsZSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBPYmplY3RJbnB1dFN0cmVhbSBvaXMgPSBuZXcgT2JqZWN0SW5wdXRTdHJlYW0oZmlzKTsKIAogICAgICAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBzZnVscy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBIYW5kbGUgc2Z1bEhhbmRsZSA9IChIYW5kbGUpIG9pcy5yZWFkT2JqZWN0KCk7CiAKICAgICAgICAgICAgICAgICAgICAgc2Z1bHNbaV0gPSAoU2Z1bCkgc2Z1bEhhbmRsZS5nZXRFSkJPYmplY3QoKTsKQEAgLTc5LDEwICs3OSwxMCBAQAogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJkY29kZXdpdGhoYW5kbGVzIG1haW4iLCBzdGF0LlBBU1MpOwogCiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJoYW5kbGUgZmlsZSBkb2Vzbid0IGV4aXN0LiAgQ3JlYXRpbmcgc2Z1bCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGJlYW4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oaGFuZGxlRmlsZSk7CiAgICAgICAgICAgICAgICAgT2JqZWN0T3V0cHV0U3RyZWFtIG9vcyA9IG5ldyBPYmplY3RPdXRwdXRTdHJlYW0oZm9zKTsKIApAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgICAgICAgICAgb29zLmNsb3NlKCk7CiAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3QgY29tcGxldGUiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJkY29kZW5vaGFuZGxlcyBtYWluIiwgc3RhdC5QQVNTKTsKIAogICAgICAgICAgICAgfQpAQCAtMTEwLDggKzExMCw4IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9kY29kZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9kY29kZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCA2ZGZmZDFlLi5jMTNiZDliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vZGNvZGUvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL2Rjb2RlL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgICA8ZWpiLW5hbWU+U2Z1bEVKQjwvZWpiLW5hbWU+CiAgICAgICA8YmVhbi1jYWNoZT4KICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT40PC9tYXgtY2FjaGUtc2l6ZT4KLQkgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+CisgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PgogICAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjU8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgogICAgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL2Rjb2RlL2VqYi9TZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vZGNvZGUvZWpiL1NmdWxFSkIuamF2YQppbmRleCBjMDJhM2MzLi5mNmI0MWZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vZGNvZGUvZWpiL1NmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vZGNvZGUvZWpiL1NmdWxFSkIuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogCiBAUmVtb3RlSG9tZShTZnVsSG9tZS5jbGFzcykKIEBTdGF0ZWZ1bAotcHVibGljIGNsYXNzIFNmdWxFSkIgCitwdWJsaWMgY2xhc3MgU2Z1bEVKQgogewogCiAgICAgLy8gcmVmZXJlbmNlIHRvIGEgUmVtb3RlIEJ1c2luZXNzIG9iamVjdCBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KQEAgLTM0LDcgKzM0LDcgQEAKICAgICBARUpCKG1hcHBlZE5hbWU9ImVqYl9lamIzMF9oZWxsb19zZXNzaW9uMl9TbGVzcyIpIGNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbjIuU2xlc3NSZW1vdGVIb21lIHNsZXNzSG9tZTsKIAogICAgIGNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbjIuU2xlc3NSZW1vdGUgc2xlc3NSZW1vdGU7Ci0gICAgCisKICAgICBASW5pdAogICAgIHB1YmxpYyB2b2lkIGNyZWF0ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCOjpjcmVhdGUiKTsKQEAgLTUyLDIwICs1MiwyMCBAQAogCiAgICAgICAgIHNsZXNzLmhlbGxvKCk7CiAKLSAgICAgICAgdHJ5IHsgICAgICAgIAorICAgICAgICB0cnkgewogCiAgICAgICAgICAgICBzbGVzc1JlbW90ZS5oZWxsbygpOwogCi0gICAgICAgICAgICBjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24yLlNsZXNzUmVtb3RlIAorICAgICAgICAgICAgY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uMi5TbGVzc1JlbW90ZQogICAgICAgICAgICAgICAgIGFub3RoZXJSZW1vdGUgPSBzbGVzc0hvbWUuY3JlYXRlKCk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBhbm90aGVyUmVtb3RlLmhlbGxvKCk7CiAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGVkIHNsZXNzLmhlbGxvKCkiKTsKIAogICAgICAgICByZXR1cm4gImhlbGxvIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIvYnVpbGQucHJvcGVydGllcwppbmRleCA0NGQxOTYzLi41ZDYzNzQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMyArMTUsMjMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMC1oZWxsby1tZGIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0ic2ltcGxlLmNsaWVudCIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8ubWRiLmNsaWVudC5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImdsYXNzZmlzaC1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZ2xhc3NmaXNoLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIvYnVpbGQueG1sCmluZGV4IGJhYzJjZjAuLjA4YWQ2MTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0kqLmNsYXNzLCoqLypCZWFuKi5jbGFzcywqKi8qSGVsbG8qIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NywyMCArNzcsMjAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuX3N0YW5kYWxvbmVjbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMvamFrYXJ0YS5qbXMtYXBpLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2ltcGxlLmNsaWVudH0iPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGJhZDM2YTEuLmM3ZGI3YjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgfQogCiAKLSAgICBAUmVzb3VyY2UobmFtZT0iRm9vQ0YiLCBtYXBwZWROYW1lPSJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9RQ0YiKSAKKyAgICBAUmVzb3VyY2UobmFtZT0iRm9vQ0YiLCBtYXBwZWROYW1lPSJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9RQ0YiKQogICAgIHByaXZhdGUgc3RhdGljIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcXVldWVDb25GYWN0b3J5OwogCiAgICAgQFJlc291cmNlKG5hbWU9Ik1zZ0JlYW5RdWV1ZSIsIG1hcHBlZE5hbWU9Imptcy9lamJfZWpiMzBfaGVsbG9fbWRiX0luUXVldWUiKQpAQCAtNjAsNyArNjAsNyBAQAogCiAgICAgcHJpdmF0ZSBpbnQgbnVtTWVzc2FnZXMgPSAyOwogICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewotICAgICAgICAKKwogICAgICAgICBpZiggYXJncy5sZW5ndGggPT0gMSApIHsKICAgICAgICAgICAgIG51bU1lc3NhZ2VzID0gbmV3IEludGVnZXIoYXJnc1swXSkuaW50VmFsdWUoKTsKICAgICAgICAgfQpAQCAtNjksMTUgKzY5LDE1IEBACiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIGlmKCBxdWV1ZUNvbkZhY3RvcnkgPT0gbnVsbCApIHsKKyAgICAgICAgaWYoIHF1ZXVlQ29uRmFjdG9yeSA9PSBudWxsICkgewogCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiSmF2YSBTRSBtb2RlLi4uIik7Ci0JCUluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JCXF1ZXVlQ29uRmFjdG9yeSA9IChqYWthcnRhLmptcy5RdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KSBpYy5sb29rdXAoImptcy9lamJfZWpiMzBfaGVsbG9fbWRiX1FDRiIpOwotCQltc2dCZWFuUXVldWUgPSAoamFrYXJ0YS5qbXMuUXVldWUpIGljLmxvb2t1cCgiam1zL2VqYl9lamIzMF9oZWxsb19tZGJfSW5RdWV1ZSIpOwotCQljbGllbnRRdWV1ZSA9IChqYWthcnRhLmptcy5RdWV1ZSkgaWMubG9va3VwKCJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9PdXRRdWV1ZSIpOwotCQkKLQkgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkphdmEgU0UgbW9kZS4uLiIpOworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBxdWV1ZUNvbkZhY3RvcnkgPSAoamFrYXJ0YS5qbXMuUXVldWVDb25uZWN0aW9uRmFjdG9yeSkgaWMubG9va3VwKCJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9RQ0YiKTsKKyAgICAgICAgbXNnQmVhblF1ZXVlID0gKGpha2FydGEuam1zLlF1ZXVlKSBpYy5sb29rdXAoImptcy9lamJfZWpiMzBfaGVsbG9fbWRiX0luUXVldWUiKTsKKyAgICAgICAgY2xpZW50UXVldWUgPSAoamFrYXJ0YS5qbXMuUXVldWUpIGljLmxvb2t1cCgiam1zL2VqYl9lamIzMF9oZWxsb19tZGJfT3V0UXVldWUiKTsKKworICAgICAgICB9CiAKICAgICAgICAgICAgIHNldHVwKCk7CiAgICAgICAgICAgICBkb1Rlc3QobnVtTWVzc2FnZXMpOwpAQCAtOTEsMTQgKzkxLDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgcXVldWVDb24gPSBxdWV1ZUNvbkZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7CiAKICAgICAgICAgcXVldWVTZXNzaW9uID0gcXVldWVDb24uY3JlYXRlUXVldWVTZXNzaW9uCi0gICAgICAgICAgICAoZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7IAorICAgICAgICAgICAgKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwogCiAgICAgICAgIC8vIFByb2R1Y2VyIHdpbGwgYmUgc3BlY2lmaWVkIHdoZW4gYWN0dWFsIG1zZyBpcyBzZW50LgotICAgICAgICBxdWV1ZVNlbmRlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVTZW5kZXIobnVsbCk7ICAgICAgICAKKyAgICAgICAgcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKG51bGwpOwogCiAgICAgICAgIHF1ZXVlUmVjZWl2ZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlUmVjZWl2ZXIoY2xpZW50UXVldWUpOwogCkBAIC0xMTYsMTggKzExNiwxOCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgc2VuZE1zZ3MoamFrYXJ0YS5qbXMuUXVldWUgcXVldWUsIE1lc3NhZ2UgbXNnLCBpbnQgbnVtKSAKKyAgICBwdWJsaWMgdm9pZCBzZW5kTXNncyhqYWthcnRhLmptcy5RdWV1ZSBxdWV1ZSwgTWVzc2FnZSBtc2csIGludCBudW0pCiAgICAgICAgIHRocm93cyBKTVNFeGNlcHRpb24gewogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYXQgdGltZSAiICsgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwogICAgICAgICAgICAgcXVldWVTZW5kZXIuc2VuZChxdWV1ZSwgbXNnKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYXQgdGltZSAiICsgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KGludCBudW0pIAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdChpbnQgbnVtKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBEZXN0aW5hdGlvbiBkZXN0ID0gbXNnQmVhblF1ZXVlOwpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgcXVldWUgbWVzc2FnZSIpOwogICAgICAgICBNZXNzYWdlIHJlY3ZkbWVzc2FnZSA9IHF1ZXVlUmVjZWl2ZXIucmVjZWl2ZShUSU1FT1VUKTsKICAgICAgICAgaWYoIHJlY3ZkbWVzc2FnZSAhPSBudWxsICkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNlaXZlZCBtZXNzYWdlIDogIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNlaXZlZCBtZXNzYWdlIDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVGV4dE1lc3NhZ2UpcmVjdmRtZXNzYWdlKS5nZXRUZXh0KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0aW1lb3V0IGFmdGVyICIgKyBUSU1FT1VUICsgIiBzZWNvbmRzIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2VqYi9IZWxsbzEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIvZWpiL0hlbGxvMS5qYXZhCmluZGV4IDg2MTUxOGIuLmZjY2JhZWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIvZWpiL0hlbGxvMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIvZWpiL0hlbGxvMS5qYXZhCkBAIC0xOSw1ICsxOSw1IEBACiBwdWJsaWMgaW50ZXJmYWNlIEhlbGxvMSB7CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbyhTdHJpbmcgcyk7Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIvZWpiL0hlbGxvU3RhdGVmdWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIvZWpiL0hlbGxvU3RhdGVmdWwuamF2YQppbmRleCAxNDRlYTgwLi45NDZmYmY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2VqYi9IZWxsb1N0YXRlZnVsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYi9lamIvSGVsbG9TdGF0ZWZ1bC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cpOwogICAgIH0KICAgICBAUHJlRGVzdHJveSBwdWJsaWMgdm9pZCBteVByZURlc3Ryb3lNZXRob2QoKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUFJFLURFU1RST1kgY2FsbGJhY2sgcmVjZWl2ZWQgaW4gIiArIG1zZyk7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQUkUtREVTVFJPWSBjYWxsYmFjayByZWNlaXZlZCBpbiAiICsgbXNnKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIvZWpiL0hlbGxvU3RhdGVsZXNzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2VqYi9IZWxsb1N0YXRlbGVzcy5qYXZhCmluZGV4IGNmNDU5MDEuLjBjOTc4OWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIvZWpiL0hlbGxvU3RhdGVsZXNzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYi9lamIvSGVsbG9TdGF0ZWxlc3MuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogLy8gSGVsbG8xIGludGVyZmFjZSBpcyBub3QgYW5ub3RhdGVkIHdpdGggQExvY2FsLiBJZiB0aGUKIC8vIGJlYW4gb25seSBpbXBsZW1lbnRzIG9uZSBpbnRlcmZhY2UgaXQgaXMgYXNzdW1lZCB0byBiZQogLy8gYSBsb2NhbCBidXNpbmVzcyBpbnRlcmZhY2UuCi1AU3RhdGVsZXNzKGRlc2NyaXB0aW9uPSJteSBzdGF0ZWxlc3MgYmVhbiBkZXNjcmlwdGlvbiIpIAorQFN0YXRlbGVzcyhkZXNjcmlwdGlvbj0ibXkgc3RhdGVsZXNzIGJlYW4gZGVzY3JpcHRpb24iKQogcHVibGljIGNsYXNzIEhlbGxvU3RhdGVsZXNzIGltcGxlbWVudHMgSGVsbG8xIHsKIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKFN0cmluZyBzKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2VqYi9JbnRlcmNlcHRvckEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIvZWpiL0ludGVyY2VwdG9yQS5qYXZhCmluZGV4IDcyZDA0MDguLjU4OGM5NmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIvZWpiL0ludGVyY2VwdG9yQS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIvZWpiL0ludGVyY2VwdG9yQS5qYXZhCkBAIC0zMCw1ICszMCw1IEBACiAgICAgICAgICAgICBiZWFuLm1uYW1lID0gbS5nZXROYW1lKCk7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwogICAgIH0KLSAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2VqYi9NZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYi9lamIvTWVzc2FnZUJlYW4uamF2YQppbmRleCBlNGQ4NWM4Li5lNmVhNDNlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2VqYi9NZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIvZWpiL01lc3NhZ2VCZWFuLmphdmEKQEAgLTQ0LDggKzQ0LDggQEAKICAgICBARUpCIHByaXZhdGUgSGVsbG8xIGhlbGxvMTsKICAgICBARUpCIHByaXZhdGUgSGVsbG8yIGhlbGxvMjsKIAotICAgIEBSZXNvdXJjZShuYW1lPSJqbXMvTXlRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IiwgCi0gICAgICAgICAgICAgIG1hcHBlZE5hbWU9Imptcy9lamJfZWpiMzBfaGVsbG9fbWRiX1FDRiIpIAorICAgIEBSZXNvdXJjZShuYW1lPSJqbXMvTXlRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IiwKKyAgICAgICAgICAgICAgbWFwcGVkTmFtZT0iam1zL2VqYl9lamIzMF9oZWxsb19tZGJfUUNGIikKICAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjRmFjdG9yeTsKIAogICAgIFN0cmluZyBtbmFtZSA9IG51bGw7CkBAIC02NCw3ICs2NCw3IEBACiAKICAgICAgICAgUXVldWVDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBoZWxsbzEgc3RhdGVsZXNzIGJlYW4iKTsKICAgICAgICAgICAgIGhlbGxvMS5oZWxsbygibG9jYWwgZWpiMy4wIHN0YXRlbGVzcyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIGhlbGxvMiBzdGF0ZWZ1bCBiZWFuIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYjIvYnVpbGQucHJvcGVydGllcwppbmRleCA1MmM2NTk2Li5hNjY5ZWIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIwICsxNSwyMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMwLWhlbGxvLW1kYjIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJnbGFzc2Zpc2gtZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2dsYXNzZmlzaC1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJnbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImdsYXNzZmlzaC1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2dsYXNzZmlzaC1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYjIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYjIvYnVpbGQueG1sCmluZGV4IDUwY2ZlYmUuLjg0OGZjODkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkJlYW4qLmNsYXNzLCoqLypIZWxsbyoiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc1LDE0ICs3NSwxNCBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYjIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYjIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDc4NGJjYTguLmIzYzA1ZjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotICAgIHByaXZhdGUgc3RhdGljIEBSZXNvdXJjZShuYW1lPSJGb29DRiIpIAorICAgIHByaXZhdGUgc3RhdGljIEBSZXNvdXJjZShuYW1lPSJGb29DRiIpCiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcXVldWVDb25GYWN0b3J5OwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTUyLDcgKzUyLDcgQEAKIAogICAgIHByaXZhdGUgaW50IG51bU1lc3NhZ2VzID0gMjsKICAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgCisKICAgICAgICAgaWYoIGFyZ3MubGVuZ3RoID09IDEgKSB7CiAgICAgICAgICAgICBudW1NZXNzYWdlcyA9IG5ldyBJbnRlZ2VyKGFyZ3NbMF0pLmludFZhbHVlKCk7CiAgICAgICAgIH0KQEAgLTczLDE3ICs3MywxNyBAQAogCiAgICAgcHVibGljIHZvaWQgc2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgY29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAKKwogICAgICAgICBxdWV1ZUNvbiA9IHF1ZXVlQ29uRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKIAogICAgICAgICBxdWV1ZVNlc3Npb24gPSBxdWV1ZUNvbi5jcmVhdGVRdWV1ZVNlc3Npb24KLSAgICAgICAgICAgIChmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsgCisgICAgICAgICAgICAoZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CiAKICAgICAgICAgLy8gUHJvZHVjZXIgd2lsbCBiZSBzcGVjaWZpZWQgd2hlbiBhY3R1YWwgbXNnIGlzIHNlbnQuCi0gICAgICAgIHF1ZXVlU2VuZGVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVNlbmRlcihudWxsKTsgICAgICAgIAorICAgICAgICBxdWV1ZVNlbmRlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVTZW5kZXIobnVsbCk7CiAKICAgICAgICAgY2xpZW50UXVldWUgPSAoamFrYXJ0YS5qbXMuUXVldWUpCi0JICAgIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9Nc2dCZWFuQ2xpZW50UXVldWUiKTsKKyAgICAgICAgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL01zZ0JlYW5DbGllbnRRdWV1ZSIpOwogCiAgICAgICAgIHF1ZXVlUmVjZWl2ZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlUmVjZWl2ZXIoY2xpZW50UXVldWUpOwogCkBAIC0xMDEsMTggKzEwMSwxOCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgc2VuZE1zZ3MoamFrYXJ0YS5qbXMuUXVldWUgcXVldWUsIE1lc3NhZ2UgbXNnLCBpbnQgbnVtKSAKKyAgICBwdWJsaWMgdm9pZCBzZW5kTXNncyhqYWthcnRhLmptcy5RdWV1ZSBxdWV1ZSwgTWVzc2FnZSBtc2csIGludCBudW0pCiAgICAgICAgIHRocm93cyBKTVNFeGNlcHRpb24gewogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYXQgdGltZSAiICsgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwogICAgICAgICAgICAgcXVldWVTZW5kZXIuc2VuZChxdWV1ZSwgbXNnKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYXQgdGltZSAiICsgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyBkZXN0TmFtZSwgaW50IG51bSkgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyBkZXN0TmFtZSwgaW50IG51bSkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgRGVzdGluYXRpb24gZGVzdCA9IChEZXN0aW5hdGlvbikgY29udGV4dC5sb29rdXAoZGVzdE5hbWUpOwpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgcXVldWUgbWVzc2FnZSIpOwogICAgICAgICBNZXNzYWdlIHJlY3ZkbWVzc2FnZSA9IHF1ZXVlUmVjZWl2ZXIucmVjZWl2ZShUSU1FT1VUKTsKICAgICAgICAgaWYoIHJlY3ZkbWVzc2FnZSAhPSBudWxsICkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNlaXZlZCBtZXNzYWdlIDogIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNlaXZlZCBtZXNzYWdlIDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVGV4dE1lc3NhZ2UpcmVjdmRtZXNzYWdlKS5nZXRUZXh0KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0aW1lb3V0IGFmdGVyICIgKyBUSU1FT1VUICsgIiBzZWNvbmRzIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYjIvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBiMTRhOGM3Li45MGZkZWZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgIDxtYXBwZWQtbmFtZT5qbXMvZWpiX2VqYjMwX2hlbGxvX21kYjJfSW5RdWV1ZTwvbWFwcGVkLW5hbWU+CiAgICAgICAtLT4KICAgICAgIDxsb29rdXAtbmFtZT5qbXMvZWpiX2VqYjMwX2hlbGxvX21kYjJfSW5RdWV1ZTwvbG9va3VwLW5hbWU+Ci0gICAgICAKKwogICAgIDwvbWVzc2FnZS1kZXN0aW5hdGlvbj4KICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbj4KICAgICAgIDxkZXNjcmlwdGlvbj5kZXNjcmlwdGlvbiAxPC9kZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2VqYi9IZWxsbzEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2VqYi9IZWxsbzEuamF2YQppbmRleCAwZGY3MDU1Li5lMWQ4ZmExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9lamIvSGVsbG8xLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYjIvZWpiL0hlbGxvMS5qYXZhCkBAIC0xOSw1ICsxOSw1IEBACiBwdWJsaWMgaW50ZXJmYWNlIEhlbGxvMSB7CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbyhTdHJpbmcgcyk7Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2VqYi9IZWxsb1N0YXRlZnVsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9lamIvSGVsbG9TdGF0ZWZ1bC5qYXZhCmluZGV4IDdhZmQyYjcuLmZhYTkyZjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2VqYi9IZWxsb1N0YXRlZnVsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYjIvZWpiL0hlbGxvU3RhdGVmdWwuamF2YQpAQCAtNDAsMTQgKzQwLDE0IEBACiAgICAgfQogICAgIC8qCiAgICAgQFByZURlc3Ryb3kgcHVibGljIHZvaWQgbXlQcmVEZXN0cm95TWV0aG9kKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBSRS1ERVNUUk9ZIGNhbGxiYWNrIHJlY2VpdmVkIGluICIgKyBtc2cpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUFJFLURFU1RST1kgY2FsbGJhY2sgcmVjZWl2ZWQgaW4gIiArIG1zZyk7CiAgICAgfQogICAgICovCiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dCBzYykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVmdWw6c2V0U2Vzc2lvbkNvbnRleHQiKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFNlc3Npb25Db250ZXh0IHNjMiA9IChTZXNzaW9uQ29udGV4dCkgCisgICAgICAgICAgICBTZXNzaW9uQ29udGV4dCBzYzIgPSAoU2Vzc2lvbkNvbnRleHQpCiAgICAgICAgICAgICAgICAgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvRUpCQ29udGV4dCIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgU2Vzc2lvbkNvbnRleHQgdmlhIGphdmE6Y29tcC9lbnYvRUpCQ29udGV4dCIpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9lamIvSGVsbG9TdGF0ZWxlc3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2VqYi9IZWxsb1N0YXRlbGVzcy5qYXZhCmluZGV4IGMxYjgzOTEuLjQ0N2NiNGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2VqYi9IZWxsb1N0YXRlbGVzcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2VqYi9IZWxsb1N0YXRlbGVzcy5qYXZhCkBAIC0zOCw5ICszOCw5IEBACiAgICAgICAgIGlmKCAhaW5pdGlhbGl6ZWQgKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJub3QgaW5pdGlhbGl6ZWQiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU3RhdGVsZXNzOiAiICsgcyk7Ci0gICAgICAgIHRpbWVyU3ZjLmNyZWF0ZVRpbWVyKDEsICJxdWljayB0aW1lciIpOyAKKyAgICAgICAgdGltZXJTdmMuY3JlYXRlVGltZXIoMSwgInF1aWNrIHRpbWVyIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBxdWljayB0aW1lciIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYjIvZWpiL0hlbGxvU3RhdGVsZXNzU3VwZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2VqYi9IZWxsb1N0YXRlbGVzc1N1cGVyLmphdmEKaW5kZXggMTYyN2M0Yy4uZDQ3YzI2YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYjIvZWpiL0hlbGxvU3RhdGVsZXNzU3VwZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9lamIvSGVsbG9TdGF0ZWxlc3NTdXBlci5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TdGF0ZWxlc3NTdXBlcjpteXRpbWVvdXRtZXRob2QiKTsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgLy8gUHJvcHJpZXRhcnkgd2F5IHRvIGxvb2sgdXAgdHggbWFuYWdlci4gIAorICAgICAgICAgICAgLy8gUHJvcHJpZXRhcnkgd2F5IHRvIGxvb2sgdXAgdHggbWFuYWdlci4KICAgICAgICAgICAgIFRyYW5zYWN0aW9uTWFuYWdlciB0bSA9IChUcmFuc2FjdGlvbk1hbmFnZXIpCiAgICAgICAgICAgICAgICAgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmFwcHNlcnZlci9UcmFuc2FjdGlvbk1hbmFnZXIiKTsKICAgICAgICAgICAgIC8vIFVzZSBhbiBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBjaGVjayB0byBlbnN1cmUgdGhhdCB0aGVyZQpAQCAtNDMsOSArNDMsOSBAQAogICAgICAgICAgICAgaWYoIHR4U3RhdHVzID09IFN0YXR1cy5TVEFUVVNfTk9fVFJBTlNBQ1RJT04gKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgdmVyaWZpZWQgdHggYXR0ciA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVFhfTk9UX1NVUFBPUlRFRCBpbiBteXRpbWVvdXRtZXRob2QoKSIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgdGltZW91dEhhcHBlbmVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludmFsaWQgdHggc3RhdHVzIGZvciBUWF9OT1RfU1VQUE9SVEVEIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgbWV0aG9kICIgKyB0eFN0YXR1cyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9lamIvTWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2VqYi9NZXNzYWdlQmVhbi5qYXZhCmluZGV4IDU5ZmZmYTQuLjVmODU3NDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2VqYi9NZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2VqYi9NZXNzYWdlQmVhbi5qYXZhCkBAIC00NywxOSArNDcsMTkgQEAKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKIAogQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQotQE1lc3NhZ2VEcml2ZW4obWVzc2FnZUxpc3RlbmVySW50ZXJmYWNlPU1lc3NhZ2VMaXN0ZW5lci5jbGFzcykgCitATWVzc2FnZURyaXZlbihtZXNzYWdlTGlzdGVuZXJJbnRlcmZhY2U9TWVzc2FnZUxpc3RlbmVyLmNsYXNzKQogcHVibGljIGNsYXNzIE1lc3NhZ2VCZWFuIGltcGxlbWVudHMgamFrYXJ0YS5lamIuTWVzc2FnZURyaXZlbkJlYW4gewogCiAgICAgQEVKQihuYW1lPSJoZWxsbzEiKSBwcml2YXRlIEhlbGxvMSBoZWxsbzE7CiAgICAgQEVKQiBwcml2YXRlIEhlbGxvMiBoZWxsbzI7Ci0gICAgCisKICAgICBib29sZWFuIG9uTWVzc2FnZUludGVyY2VwdG9yQ2FsbGVkID0gZmFsc2U7CiAgICAgYm9vbGVhbiB0aW1lb3V0SW50ZXJjZXB0b3JDYWxsZWQgPSBmYWxzZTsKIAogICAgIEBSZXNvdXJjZSBqYWthcnRhLmVqYi5NZXNzYWdlRHJpdmVuQ29udGV4dCBjdHg7CiAgICAgQFJlc291cmNlIGpha2FydGEuZWpiLlRpbWVyU2VydmljZSBpbmplY3RlZFRpbWVyU2VydmljZTsKIAotICAgIEBSZXNvdXJjZShuYW1lPSJqbXMvTXlRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IikgCisgICAgQFJlc291cmNlKG5hbWU9Imptcy9NeVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkiKQogICAgICAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjRmFjdG9yeTsKIAogICAgIC8vIFZhbHVlcyBmb3IgdGhlc2Ugd2lsbCBiZSBzcGVjaWZpZWQgaW4gdGhlIHN0YW5kYXJkIGRlcGxveW1lbnQgZGVzY3JpcHRvcgpAQCAtODEsNyArODEsNyBAQAogICAgIEBSZXNvdXJjZSBpbnQgaW50VmFsdWUyID0gMTsKICAgICBAUmVzb3VyY2UgSW50ZWdlciBpbnRlZ2VyVmFsdWUyID0gbmV3IEludGVnZXIoMSk7CiAKLSAgICAvLyBjb3JyZXNwb25kaW5nIGVudi1lbnRyeSBpcyBzcGVjaWZpZWQgaW4gZWpiLWphci54bWwsIAorICAgIC8vIGNvcnJlc3BvbmRpbmcgZW52LWVudHJ5IGlzIHNwZWNpZmllZCBpbiBlamItamFyLnhtbCwKICAgICAvLyBidXQgdGhlcmUgaXMgbm8gdmFsdWUgc28gbm8gaW5qZWN0aW9uIHNob3VsZCBoYXBwZW4gYW5kCiAgICAgLy8gdGhlIGRlZmF1bHQgdmFsdWUgc2hvdWxkIGJlIHVzZWQuCiAgICAgaW50IGludFZhbHVlMyA9IDM7CkBAIC0xNDMsNyArMTQzLDcgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigid3JvbmcgdmFsdWUgZm9yIGludFZhbHVlMyA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50VmFsdWUzKTsKLSAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmKCBzdHJpbmdWYWx1ZTEuZXF1YWxzKCJ1bmRlZmluZWQiKSB8fAogICAgICAgICAgICAgICAgIChpbnRWYWx1ZTEgPT0gMSkgfHwgKGludGVnZXJWYWx1ZTEuaW50VmFsdWUoKSA9PSAxKSB8fApAQCAtMTYwLDggKzE2MCw4IEBACiAgICAgICAgICAgICAgICAgKGludFZhbHVlMiAhPSAxKSB8fCAoaW50ZWdlclZhbHVlMi5pbnRWYWx1ZSgpICE9IDEpICkgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oImVudi1lbnRyeSBAUmVzb3VyY2Ugb3ZlcnJpZGUgZXJyb3IiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gUHJvcHJpZXRhcnkgd2F5IHRvIGxvb2sgdXAgdHggbWFuYWdlci4gIAorCisgICAgICAgICAgICAvLyBQcm9wcmlldGFyeSB3YXkgdG8gbG9vayB1cCB0eCBtYW5hZ2VyLgogICAgICAgICAgICAgVHJhbnNhY3Rpb25NYW5hZ2VyIHRtID0gKFRyYW5zYWN0aW9uTWFuYWdlcikKICAgICAgICAgICAgICAgICBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6YXBwc2VydmVyL1RyYW5zYWN0aW9uTWFuYWdlciIpOwogICAgICAgICAgICAgLy8gVXNlIGFuIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZXJlCkBAIC0xNzYsNyArMTc2LDcgQEAKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJJbnZhbGlkIHR4IHN0YXR1cyBmb3IgVFhfTk9UX1NVUFBPUlRFRCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBtZXRob2QgIiArIHR4U3RhdHVzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgaGVsbG8xIHN0YXRlbGVzcyBiZWFuIik7CiAgICAgICAgICAgICBoZWxsbzEuaGVsbG8oImxvY2FsIGVqYjMuMCBzdGF0ZWxlc3MiKTsKIApAQCAtMjAzLDExICsyMDMsMTEgQEAKIAogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNyZWF0aW5nIHRpbWVyIik7Ci0gICAgICAgICAgICBUaW1lclNlcnZpY2UgdGltZXJTZXJ2aWNlID0gKFRpbWVyU2VydmljZSkgCisgICAgICAgICAgICBUaW1lclNlcnZpY2UgdGltZXJTZXJ2aWNlID0gKFRpbWVyU2VydmljZSkKICAgICAgICAgICAgICAgICBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Y29tcC9UaW1lclNlcnZpY2UiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgdGltZXJTZXJ2aWNlLmNyZWF0ZVRpbWVyKDcwMDAsICJjcmVhdGVkIHRpbWVyIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgQ29sbGVjdGlvbiB0aW1lcnMgPSBpbmplY3RlZFRpbWVyU2VydmljZS5nZXRUaW1lcnMoKTsKICAgICAgICAgICAgIGlmKCB0aW1lcnMuc2l6ZSgpICE9IDEgKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiaW52YWxpZCB0aW1lciBjb3VudCA9ICIgKwpAQCAtMjIyLDcgKzIyMiw3IEBACiAKICAgICBAVGltZW91dCBwcml2YXRlIHZvaWQgdGltZW91dChqYWthcnRhLmVqYi5UaW1lciB0KSB7CiAKLSAgICAgICAgUXVldWVDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBudWxsOyAgICAgICAgCisgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gbnVsbDsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBNZXNzYWdlQmVhbi4gIEdvdCB0aW1lb3V0IGNhbGxiYWNrIik7CkBAIC0yNDYsNyArMjQ2LDcgQEAKIAogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIAotICAgICAgICAgICAgLy8gUHJvcHJpZXRhcnkgd2F5IHRvIGxvb2sgdXAgdHggbWFuYWdlci4gIAorICAgICAgICAgICAgLy8gUHJvcHJpZXRhcnkgd2F5IHRvIGxvb2sgdXAgdHggbWFuYWdlci4KICAgICAgICAgICAgIFRyYW5zYWN0aW9uTWFuYWdlciB0bSA9IChUcmFuc2FjdGlvbk1hbmFnZXIpCiAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmFwcHNlcnZlci9UcmFuc2FjdGlvbk1hbmFnZXIiKTsKICAgICAgICAgICAgIC8vIFVzZSBhbiBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBjaGVjayB0byBlbnN1cmUgdGhhdCB0aGVyZQpAQCAtMjg5LDkgKzI4OSw5IEBACiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBpbnRlcmNlcHQoSW52b2NhdGlvbkNvbnRleHQgaW52KQotCXRocm93cyBFeGNlcHRpb24KKyAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotCVN5c3RlbS5vdXQucHJpbnRsbigiW21kYl0gSW50ZXJjZXB0b3IgaW52b2tlZC4uLiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW21kYl0gSW50ZXJjZXB0b3IgaW52b2tlZC4uLiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm1ldGhvZCA9ICIgKyBpbnYuZ2V0TWV0aG9kKCkpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInBhcmFtcyA9ICIgKyBpbnYuZ2V0UGFyYW1ldGVycygpKTsKICAgICAgICAgaW50IGkgPSAwOwpAQCAtMzA5LDggKzMwOSw4IEBACiAgICAgICAgIH0KIAogCi0JT2JqZWN0IG8gPSBpbnYucHJvY2VlZCgpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiW21kYl0gSW50ZXJjZXB0b3IgYWZ0ZXIgcHJvY2VlZCgpLi4uIik7CisgICAgT2JqZWN0IG8gPSBpbnYucHJvY2VlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW21kYl0gSW50ZXJjZXB0b3IgYWZ0ZXIgcHJvY2VlZCgpLi4uIik7CiAKICAgICAgICAgcmV0dXJuIG87CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL25vcGtnL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbm9wa2cvYnVpbGQucHJvcGVydGllcwppbmRleCAyZjk2NzA2Li4zOWI4OWM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbm9wa2cvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbm9wa2cvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzAtaGVsbG8tbm9wa2ciLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9ub3BrZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbm9wa2cvYnVpbGQueG1sCmluZGV4IDdiMzc2OTEuLjE2OTg1NjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9ub3BrZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL25vcGtnL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSJTZnVsKi5jbGFzcyxTbGVzcyouY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSJDbGllbnQuY2xhc3MsU2Z1bC5jbGFzcyxTbGVzcy5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYxLDEwICs2MSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbm9wa2cvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL25vcGtnL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBmZjRhZDhmLi41YTA3YzMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbm9wa2cvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9ub3BrZy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTMwLDExICszMCwxMSBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWVqYjMwLW5vcGtnLXNlc3Npb25JRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBARUpCKG1hcHBlZE5hbWU9IlNmdWwiKSBTZnVsIHNmdWw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQihtYXBwZWROYW1lPSJTbGVzcyIpIFNsZXNzIHNsZXNzOwogCkBAIC01Niw4ICs1Niw4IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9ub3BrZy9lamIvU2Z1bC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL25vcGtnL2VqYi9TZnVsLmphdmEKaW5kZXggMmM0MDczYy4uYThhYmE4NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL25vcGtnL2VqYi9TZnVsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL25vcGtnL2VqYi9TZnVsLmphdmEKQEAgLTE1LDcgKzE1LDcgQEAKICAqLwogCiBpbXBvcnQgamFrYXJ0YS5lamIuUmVtb3RlOwotCQorCiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIFNmdWwKIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDhlZjUzNGYuLjcyMWVhNWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjMgKzE1LDIzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzAtaGVsbG8tc2Vzc2lvbiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzaW1wbGUuY2xpZW50IiB2YWx1ZT0iY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uLmNsaWVudC5TdGFuZGFsb25lQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0ic2ltcGxlLmNsaWVudDIiIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24uY2xpZW50LlN0YW5kYWxvbmVDbGllbnQyIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uL2J1aWxkLnhtbAppbmRleCBiYjQ3YTRjLi5lNTM5MDFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24vYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICAgIDxkZWxldGUgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGNvcHkgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhLnRva2VuIiB0b2ZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIvPgogICAgICAgICA8cmVwbGFjZSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEiCkBAIC01MSwxNCArNTEsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1NmdWwqLmNsYXNzLCoqL1NsZXNzKi5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TZnVsLmNsYXNzLCoqL1NsZXNzLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjksOSArNjksOSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zdGFuZGFsb25lY2xpZW50MiIvPgogICAgIDwvdGFyZ2V0PgogCi0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zdGFuZGFsb25lY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NpbXBsZS5jbGllbnR9Ij4KQEAgLTgwLDcgKzgwLDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuX3N0YW5kYWxvbmVjbGllbnQyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NpbXBsZS5jbGllbnQyfSI+CkBAIC05Niw3ICs5Niw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA0MTBjNzExLi41MjdjMGNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24vY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zNCwxNyArMzQsMTcgQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1lamIzMC1oZWxsby1zZXNzaW9uSUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBTZnVsIHNmdWw7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBARUpCKG1hcHBlZE5hbWU9ImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbi5TbGVzcyIpIFNsZXNzIHNsZXNzOwogCiAgICAgLy8KLSAgICAvLyBOT1RFOiBUb2tlbiAzNzAwIHdpbGwgYmUgcmVwbGFjZWQgaW4gQEVKQiBhbm5vdGF0aW9ucyBiZWxvdyAKKyAgICAvLyBOT1RFOiBUb2tlbiAzNzAwIHdpbGwgYmUgcmVwbGFjZWQgaW4gQEVKQiBhbm5vdGF0aW9ucyBiZWxvdwogICAgIC8vIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBwb3J0IGZyb20gY29uZmlnLnByb3BlcnRpZXMgZHVyaW5nIHRoZSBidWlsZAogICAgIC8vCiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQihtYXBwZWROYW1lPSJjb3JiYW5hbWU6aWlvcDpsb2NhbGhvc3Q6MzcwMCNjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24uU2xlc3MiKSBTbGVzcyBzbGVzczI7CkBAIC01OCwxMiArNTgsMTIgQEAKICAgICAgICAgdHJ5IHsKIAogLy8gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIEluaXRpYWxDb250ZXh0KCkiKTsKLS8vCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworLy8gICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKLS8vCSAgICBvcmcub21nLkNPUkJBLk9SQiBvcmIgPSAob3JnLm9tZy5DT1JCQS5PUkIpIGljLmxvb2t1cCgiamF2YTpjb21wL09SQiIpOyAKKy8vICAgICAgICBvcmcub21nLkNPUkJBLk9SQiBvcmIgPSAob3JnLm9tZy5DT1JCQS5PUkIpIGljLmxvb2t1cCgiamF2YTpjb21wL09SQiIpOwogCi0vLwkgICAgU2Z1bCBzZnVsID0gKFNmdWwpIGljLmxvb2t1cCgiY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uLlNmdWwiKTsKLS8vCSAgICBTbGVzcyBzbGVzcyA9IChTbGVzcykgaWMubG9va3VwKCJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24uU2xlc3MiKTsKKy8vICAgICAgICBTZnVsIHNmdWwgPSAoU2Z1bCkgaWMubG9va3VwKCJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24uU2Z1bCIpOworLy8gICAgICAgIFNsZXNzIHNsZXNzID0gKFNsZXNzKSBpYy5sb29rdXAoImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbi5TbGVzcyIpOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIHN0YXRlZnVsIik7CiAgICAgICAgICAgICBzZnVsLmhlbGxvKCk7CkBAIC03MSwxMSArNzEsMTEgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgc3RhdGVsZXNzIik7CiAgICAgICAgICAgICBzbGVzcy5oZWxsbygpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBzdGF0ZWxlc3MyIik7Ci0JICAgIHNsZXNzMi5oZWxsbygpOworICAgICAgICBzbGVzczIuaGVsbG8oKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgc3RhdGVsZXNzMyIpOwotCSAgICBzbGVzczMuaGVsbG8oKTsKKyAgICAgICAgc2xlc3MzLmhlbGxvKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIHN0YXRlbGVzczQiKTsKLQkgICAgc2xlc3M0LmhlbGxvKCk7CisgICAgICAgIHNsZXNzNC5oZWxsbygpOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3QgY29tcGxldGUiKTsKIApAQCAtODUsOCArODUsOCBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbi9jbGllbnQvU3RhbmRhbG9uZUNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24vY2xpZW50L1N0YW5kYWxvbmVDbGllbnQuamF2YQppbmRleCBkODkxZmI3Li43OTViOTM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbi9jbGllbnQvU3RhbmRhbG9uZUNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uL2NsaWVudC9TdGFuZGFsb25lQ2xpZW50LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIAogcHVibGljIGNsYXNzIFN0YW5kYWxvbmVDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zMywxMSArMzMsMTEgQEAKICAgICAgICAgU3RhbmRhbG9uZUNsaWVudCBjbGllbnQgPSBuZXcgU3RhbmRhbG9uZUNsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWVqYjMwLWhlbGxvLXNlc3Npb25zdGFuZGFsb25lSUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgU3RhbmRhbG9uZUNsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICB0cnkgewpAQCAtNDksNyArNDksNyBAQAogCiAgICAgICAgICAgICBTZnVsIHNmdWwyID0gKFNmdWwpIGljLmxvb2t1cAogICAgICAgICAgICAgICAgICgiY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uLlNmdWwiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTZnVsIHNmdWwzID0gKFNmdWwpIGljLmxvb2t1cAogICAgICAgICAgICAgICAgICgiY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uLlNmdWwjY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uLlNmdWwiKTsKIApAQCAtNTgsNyArNTgsNyBAQAogCiAgICAgICAgICAgICBTbGVzcyBzbGVzczIgPSAoU2xlc3MpIGljLmxvb2t1cAogICAgICAgICAgICAgICAgICgiY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uLlNsZXNzI2NvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbi5TbGVzcyIpOwotICAgICAgICAgICAgCisKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBzdGF0ZWZ1bCIpOwogICAgICAgICAgICAgc2Z1bDEuaGVsbG8oKTsKQEAgLTg4LDggKzg4LDggQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24vY2xpZW50L1N0YW5kYWxvbmVDbGllbnQyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbi9jbGllbnQvU3RhbmRhbG9uZUNsaWVudDIuamF2YQppbmRleCA0ZTZkNDdhLi5hMzE3ZjhmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbi9jbGllbnQvU3RhbmRhbG9uZUNsaWVudDIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbi9jbGllbnQvU3RhbmRhbG9uZUNsaWVudDIuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogCiBwdWJsaWMgY2xhc3MgU3RhbmRhbG9uZUNsaWVudDIgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zMywzMiArMzMsMzIgQEAKICAgICAgICAgU3RhbmRhbG9uZUNsaWVudDIgY2xpZW50ID0gbmV3IFN0YW5kYWxvbmVDbGllbnQyKGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItZWpiMzAtaGVsbG8tc2Vzc2lvbnN0YW5kYWxvbmUySUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgU3RhbmRhbG9uZUNsaWVudDIgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0gICAgICAgICAgICBwcm9wcy5zZXRQcm9wZXJ0eSgiamF2YS5uYW1pbmcuZmFjdG9yeS5pbml0aWFsIiwgCisgICAgICAgICAgICBwcm9wcy5zZXRQcm9wZXJ0eSgiamF2YS5uYW1pbmcuZmFjdG9yeS5pbml0aWFsIiwKICAgICAgICAgICAgICAgICAgICAgImNvbS5zdW4uZW50ZXJwcmlzZS5uYW1pbmcuU2VyaWFsSW5pdENvbnRleHRGYWN0b3J5Iik7Ci0gICAgICAgICAgICBwcm9wcy5zZXRQcm9wZXJ0eSgiamF2YS5uYW1pbmcuZmFjdG9yeS51cmwucGtncyIsIAorICAgICAgICAgICAgcHJvcHMuc2V0UHJvcGVydHkoImphdmEubmFtaW5nLmZhY3RvcnkudXJsLnBrZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbS5zdW4uZW50ZXJwcmlzZS5uYW1pbmciKTsKICAgICAgICAgICAgIHByb3BzLnNldFByb3BlcnR5KCJqYXZhLm5hbWluZy5mYWN0b3J5LnN0YXRlIiwKICAgICAgICAgICAgICJjb20uc3VuLmNvcmJhLmVlLmltcGwucHJlc2VudGF0aW9uLnJtaS5KTkRJU3RhdGVGYWN0b3J5SW1wbCIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KHByb3BzKTsKLSAgICAgICAgICAgIAorCiAKICAgICAgICAgICAgIFNmdWwgc2Z1bDEgPSAoU2Z1bCkgaWMubG9va3VwCiAgICAgICAgICAgICAgICAgKCJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24uU2Z1bCIpOwogCiAgICAgICAgICAgICBTZnVsIHNmdWwyID0gKFNmdWwpIGljLmxvb2t1cAogICAgICAgICAgICAgICAgICgiY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uLlNmdWwiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTZnVsIHNmdWwzID0gKFNmdWwpIGljLmxvb2t1cAogICAgICAgICAgICAgICAgICgiY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uLlNmdWwjY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uLlNmdWwiKTsKIApAQCAtNjcsNyArNjcsNyBAQAogCiAgICAgICAgICAgICBTbGVzcyBzbGVzczIgPSAoU2xlc3MpIGljLmxvb2t1cAogICAgICAgICAgICAgICAgICgiY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uLlNsZXNzI2NvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbi5TbGVzcyIpOwotICAgICAgICAgICAgCisKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBzdGF0ZWZ1bCIpOwogICAgICAgICAgICAgc2Z1bDEuaGVsbG8oKTsKQEAgLTk3LDggKzk3LDggQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24vZWpiL1NmdWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uL2VqYi9TZnVsLmphdmEKaW5kZXggODBhZjViYS4uZGRhOTU4NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24vZWpiL1NmdWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbi9lamIvU2Z1bC5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbjsKIAogaW1wb3J0IGpha2FydGEuZWpiLlJlbW90ZTsKLQkKKwogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBTZnVsCiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDcyNzUwMDIuLmRiN2RmMTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMC1oZWxsby1zZXNzaW9uMiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9idWlsZC54bWwKaW5kZXggNjY5MGIxYy4uMjcxNTcyZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1NsZXNzKi5jbGFzcywqKi9TZnVsKi5jbGFzcywqKi9FeHRlcm5hbEJ1c2luZXNzLmNsYXNzLCoqL0ZvbyouY2xhc3MsKiovTXlDYWxsYmFja0hhbmRsZXIuY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnRTdXBlci5jbGFzcywqKi9DbGllbnQuY2xhc3MsKiovU2xlc3MuY2xhc3MsKiovU2xlc3NTdWIuY2xhc3MsKiovU2Z1bC5jbGFzcywqKi9FeHRlcm5hbEJ1c2luZXNzLmNsYXNzLCoqL0Zvb0hvbWUuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02MSwxMCArNjEsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZTU1NjM5NC4uMzk3YzU0MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOSwxNiArMjksMTYgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogCi1ARUpCcyggCi0geyBARUpCKG5hbWU9ImVqYi9UeXBlTGV2ZWxTbGVzczEiLCBiZWFuTmFtZT0iU2xlc3NFSkIiLCAKK0BFSkJzKAorIHsgQEVKQihuYW1lPSJlamIvVHlwZUxldmVsU2xlc3MxIiwgYmVhbk5hbWU9IlNsZXNzRUpCIiwKICAgICAgICBiZWFuSW50ZXJmYWNlPVNsZXNzLmNsYXNzKSwKLSAgIEBFSkIobmFtZT0iZWpiL1R5cGVMZXZlbFNsZXNzMiIsIGJlYW5OYW1lPSJTbGVzc0VKQjIiLCAKKyAgIEBFSkIobmFtZT0iZWpiL1R5cGVMZXZlbFNsZXNzMiIsIGJlYW5OYW1lPSJTbGVzc0VKQjIiLAogICAgICAgIGJlYW5JbnRlcmZhY2U9U2xlc3MuY2xhc3MpCiAgfSkKIEBFSkIobmFtZT0iZWpiL1R5cGVMZXZlbFNsZXNzMyIsIGJlYW5JbnRlcmZhY2U9U2xlc3NTdWIuY2xhc3MpCiBwdWJsaWMgY2xhc3MgQ2xpZW50IGV4dGVuZHMgQ2xpZW50U3VwZXIgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItZWpiMzAtaGVsbG8tc2Vzc2lvbjJJRCIpOwotICAgIH0gIAorICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU2Z1bCBzZnVsMTsKICAgICBwcml2YXRlIHN0YXRpYyBARUpCIFNmdWwgc2Z1bDI7CkBAIC01Nyw3ICs1Nyw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBARUpCKGJlYW5OYW1lPSJTbGVzc0VKQiIpIFNsZXNzIHNsZXNzMTsKIAotICAgIC8vIGxpbmtlZCB0byBTbGVzc0VKQjIgdmlhIHN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIAorICAgIC8vIGxpbmtlZCB0byBTbGVzc0VKQjIgdmlhIHN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sCiAgICAgLy8gc28gbm8gYmVhbk5hbWUgZGlzYW1iaWd1YXRpb24gaXMgbmVlZGVkCiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBTbGVzcyBzbGVzczI7CiAKQEAgLTY3LDExICs2NywxMSBAQAogCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBzdXBlclNsZXNzMSIpOwogCiAgICAgICAgICAgICBTbGVzcyBzdXBlclNsZXNzTG9va3VwID0gKFNsZXNzKSBuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvZW52L2NvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbjIuY2xpZW50LkNsaWVudFN1cGVyL3N1cGVyU2xlc3MxIik7CkBAIC05NSw3ICs5NSw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHNmdWwxLmRvUmVtb3ZlTWV0aG9kU2Vzc2lvblN5bmNUZXN0cygpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIENhbGwgYXBwbGljYXRpb24tZGVmaW5lZCBAUmVtb3ZlIG1ldGhvZC4gVGhpcyBtZXRob2QgaGFzCiAgICAgICAgICAgICAvLyBubyByZWxhdGlvbnNoaXAgdG8gRUpCT2JqZWN0LnJlbW92ZSgpLiAgSXQncyBhIGNvaW5jaWRlbmNlCiAgICAgICAgICAgICAvLyB0aGF0IGl0IGhhcyB0aGUgc2FtZSBuYW1lLgpAQCAtMjM2LDcgKzIzNiw3IEBACiAgICAgICAgICAgICBpZiggcjEuZ2V0SWQoKS5lcXVhbHMocjIuZ2V0SWQoKSkgKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigicmVtb3RlIHBhcmFtIHBhc3NpbmcgZ2V0SWQoKSB0ZXN0IGZhaWxlZCIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHNsZXNzMy5oZWxsbygpOwogICAgICAgICAgICAgc2xlc3MzLmhlbGxvMygpOwogCkBAIC0yNjUsOCArMjY1LDggQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2VqYi9Gb28uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvRm9vLmphdmEKaW5kZXggZDg5NDY5ZC4uMzk2NjliNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2VqYi9Gb28uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL0Zvby5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAKICAgICB2b2lkIGNhbGxIZWxsbygpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgICAgU3RyaW5nIHNheUhlbGxvKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGFzc2VydFZhbGlkUmVtb3RlT2JqZWN0KFN0cmluZyBtc2cpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2VqYi9NeUNhbGxiYWNrSGFuZGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2VqYi9NeUNhbGxiYWNrSGFuZGxlci5qYXZhCmluZGV4IDBlNGMzZGQuLmFjOGQ0MGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvTXlDYWxsYmFja0hhbmRsZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL015Q2FsbGJhY2tIYW5kbGVyLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIAogcHVibGljIGNsYXNzIE15Q2FsbGJhY2tIYW5kbGVyIHsKIAotICAgIEBQcmVEZXN0cm95IAorICAgIEBQcmVEZXN0cm95CiAgICAgcHVibGljIHZvaWQgbXlQcmVEZXN0TWV0aG9kKEludm9jYXRpb25Db250ZXh0IGludkN0eCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE15Q2FsbGJhY2tIYW5kbGVyOjpteVByZURlc3RNZXRob2QgIik7CiAKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FsbGJhY2sgaGFuZGxlciIpOwogICAgICAgICB9CiAKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludkN0eC5wcm9jZWVkKCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvU2Z1bC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2VqYi9TZnVsLmphdmEKaW5kZXggMTgyYmRhNi4uNjhmNTdiNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2VqYi9TZnVsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2VqYi9TZnVsLmphdmEKQEAgLTM3LDE3ICszNywxNyBAQAogICAgIC8vIGZvciBhIG1ldGhvZCB0aGF0IGhhcyBAUmVtb3ZlIGJlaGF2aW9yIHNvIGl0IG5lZWRzIHRvIHdvcmsuCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlKCk7CiAKLSAgICAvLyBBc3NvY2lhdGVkIHdpdGggYW4gQFJlbW92ZSBtZXRob2QgdGhhdCBoYXMgcmV0YWluSWZFeGNlcHRpb249dHJ1ZS4gICAgCisgICAgLy8gQXNzb2NpYXRlZCB3aXRoIGFuIEBSZW1vdmUgbWV0aG9kIHRoYXQgaGFzIHJldGFpbklmRXhjZXB0aW9uPXRydWUuCiAgICAgLy8gSWYgYXJndW1lbnQgaXMgdHJ1ZSwgdGhlIG1ldGhvZCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiwgd2hpY2ggc2hvdWxkCiAgICAgLy8ga2VlcCB0aGUgYmVhbiBmcm9tIGJlaW5nIHJlbW92ZWQuICBJZiBhcmd1bWVudCBpcyBmYWxzZSwgdGhlIGJlYW4KICAgICAvLyBzaG91bGQgc3RsbCBiZSByZW1vdmVkLgotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb247CiAKLSAgICAvLyBBc3NvY2lhdGVkIHdpdGggYW4gQFJlbW92ZSBtZXRob2QgdGhhdCBoYXMgcmV0YWluSWZFeGNlcHRpb249ZmFsc2UuICAgIAorICAgIC8vIEFzc29jaWF0ZWQgd2l0aCBhbiBAUmVtb3ZlIG1ldGhvZCB0aGF0IGhhcyByZXRhaW5JZkV4Y2VwdGlvbj1mYWxzZS4KICAgICAvLyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyB0cnVlIG9yIGZhbHNlLCB0aGUgYmVhbiBzaG91bGQgc3RpbGwgYmUKICAgICAvLyByZW1vdmVkLgotICAgIHB1YmxpYyB2b2lkIHJlbW92ZU5vdFJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZU5vdFJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb247CiAKICAgICAvLyBBc3NvY2lhdGVkIHdpdGggYW4gQFJlbW92ZSBtZXRob2QgdGhhdCBoYXMgcmV0YWluSWZFeGNlcHRpb249dHJ1ZQpAQCAtNTUsNyArNTUsNyBAQAogICAgIC8vIHJldGFpbklmRXhjZXB0aW9uIG9ubHkgYXBwbGllcyB0byBhcHBsaWNhdGlvbiBleGNlcHRpb25zLCBzbwogICAgIC8vIHRoaXMgYmVhbiBzaG91bGQgYWx3YXlzIGJlIHJlbW92ZWQuCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlTWV0aG9kVGhyb3dTeXNFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbik7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1JlbW92ZU1ldGhvZFNlc3Npb25TeW5jVGVzdHMoKTsKLSAgICAgICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvU2Z1bDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvU2Z1bDIuamF2YQppbmRleCBhNDJjMjRjLi5hODZlMzNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL1NmdWwyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2VqYi9TZnVsMi5qYXZhCkBAIC0yMywxNyArMjMsMTcgQEAKIHsKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCk7CiAKLSAgICAvLyBBc3NvY2lhdGVkIHdpdGggYW4gQFJlbW92ZSBtZXRob2QgdGhhdCBoYXMgcmV0YWluSWZFeGNlcHRpb249dHJ1ZS4gICAgCisgICAgLy8gQXNzb2NpYXRlZCB3aXRoIGFuIEBSZW1vdmUgbWV0aG9kIHRoYXQgaGFzIHJldGFpbklmRXhjZXB0aW9uPXRydWUuCiAgICAgLy8gSWYgYXJndW1lbnQgaXMgdHJ1ZSwgdGhlIG1ldGhvZCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiwgd2hpY2ggc2hvdWxkCiAgICAgLy8ga2VlcCB0aGUgYmVhbiBmcm9tIGJlaW5nIHJlbW92ZWQuICBJZiBhcmd1bWVudCBpcyBmYWxzZSwgdGhlIGJlYW4KICAgICAvLyBzaG91bGQgc3RsbCBiZSByZW1vdmVkLgotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb247CiAKLSAgICAvLyBBc3NvY2lhdGVkIHdpdGggYW4gQFJlbW92ZSBtZXRob2QgdGhhdCBoYXMgcmV0YWluSWZFeGNlcHRpb249ZmFsc2UuICAgIAorICAgIC8vIEFzc29jaWF0ZWQgd2l0aCBhbiBAUmVtb3ZlIG1ldGhvZCB0aGF0IGhhcyByZXRhaW5JZkV4Y2VwdGlvbj1mYWxzZS4KICAgICAvLyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyB0cnVlIG9yIGZhbHNlLCB0aGUgYmVhbiBzaG91bGQgc3RpbGwgYmUKICAgICAvLyByZW1vdmVkLgotICAgIHB1YmxpYyB2b2lkIHJlbW92ZU5vdFJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZU5vdFJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb247CiAKICAgICAvLyBBc3NvY2lhdGVkIHdpdGggYW4gQFJlbW92ZSBtZXRob2QgdGhhdCBoYXMgcmV0YWluSWZFeGNlcHRpb249dHJ1ZQpAQCAtNDEsNSArNDEsNSBAQAogICAgIC8vIHJldGFpbklmRXhjZXB0aW9uIG9ubHkgYXBwbGllcyB0byBhcHBsaWNhdGlvbiBleGNlcHRpb25zLCBzbwogICAgIC8vIHRoaXMgYmVhbiBzaG91bGQgYWx3YXlzIGJlIHJlbW92ZWQuCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlTWV0aG9kVGhyb3dTeXNFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbik7Ci0gICAgICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL1NmdWxFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IDM5ZTQ2ZDAuLmQ2MWQwYzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvU2Z1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvU2Z1bEVKQi5qYXZhCkBAIC0zOSwxMCArMzksMTAgQEAKIEBTdGF0ZWZ1bAogQFRyYW5zYWN0aW9uTWFuYWdlbWVudChUcmFuc2FjdGlvbk1hbmFnZW1lbnRUeXBlLkJFQU4pCiAKLUBFSkJzKCAKLSB7IEBFSkIobmFtZT0iZWpiL1R5cGVMZXZlbFNsZXNzMSIsIGJlYW5OYW1lPSJTbGVzc0VKQiIsIAorQEVKQnMoCisgeyBARUpCKG5hbWU9ImVqYi9UeXBlTGV2ZWxTbGVzczEiLCBiZWFuTmFtZT0iU2xlc3NFSkIiLAogICAgICAgIGJlYW5JbnRlcmZhY2U9U2xlc3MuY2xhc3MpLAotICAgQEVKQihuYW1lPSJlamIvVHlwZUxldmVsU2xlc3MyIiwgYmVhbk5hbWU9IlNsZXNzRUpCMiIsIAorICAgQEVKQihuYW1lPSJlamIvVHlwZUxldmVsU2xlc3MyIiwgYmVhbk5hbWU9IlNsZXNzRUpCMiIsCiAgICAgICAgYmVhbkludGVyZmFjZT1TbGVzcy5jbGFzcykgLAogICAgQEVKQihuYW1lPSJlamIvU2Z1bEVKQjIiLCBiZWFuSW50ZXJmYWNlPVNmdWwyLmNsYXNzKQogIH0pCkBAIC01MSw3ICs1MSw3IEBACiBARUpCKG5hbWU9ImVqYi9UeXBlTGV2ZWxTbGVzczMiLCBiZWFuSW50ZXJmYWNlPVNsZXNzU3ViLmNsYXNzKQogQFJlbW90ZSh7U2Z1bC5jbGFzc30pCiAvLyBlamIgaXMgbm90IHJlcXVpcmVkIHRvIHB1dCBidXNpbmVzcyBpbnRlcmZhY2UgaW4gaW1wbGVtZW50cyBjbGF1c2UKLXB1YmxpYyBjbGFzcyBTZnVsRUpCIAorcHVibGljIGNsYXNzIFNmdWxFSkIKIHsKIAogICAgIHByaXZhdGUgQFJlc291cmNlIFNlc3Npb25Db250ZXh0IHNjOwpAQCAtNjQsNyArNjQsNyBAQAogICAgIHByaXZhdGUgQEVKQihiZWFuTmFtZT0iU2xlc3NFSkIiKSB2b2lkIHNldFNsZXNzNChTbGVzcyBzbGVzcykgewogICAgICAgICBzbGVzczQgPSBzbGVzczsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIFNsZXNzIHNsZXNzNTsKICAgICBARUpCKGJlYW5OYW1lPSJTbGVzc0VKQjIiKSB2b2lkIHNldFNsZXNzNShTbGVzcyBzbGVzcykgewogICAgICAgICBzbGVzczUgPSBzbGVzczsKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgIHB1YmxpYyB2b2lkIGZvbyhpbnQgYSwgU3RyaW5nIGIpIHsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgdGVzdFNsZXNzUmVmcyhTbGVzcyBzMSwgU2xlc3MgczIsIFNsZXNzU3ViIHMzKSAKKyAgICBwcml2YXRlIHZvaWQgdGVzdFNsZXNzUmVmcyhTbGVzcyBzMSwgU2xlc3MgczIsIFNsZXNzU3ViIHMzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBTdHJpbmcgc2xlc3MxSWQgPSBzMS5nZXRJZCgpOwpAQCAtMjIzLDcgKzIyMyw3IEBACiAgICAgICAgIHMzLnJvdW5kVHJpcDIoYyk7CiAKICAgICAgICAgczMuaGVsbG8zKCk7Ci0gCisKICAgICB9CiAKICAgICBAUG9zdENvbnN0cnVjdApAQCAtMjQ3LDcgKzI0Nyw3IEBACiAgICAgfQogCiAgICAgQFJlbW92ZShyZXRhaW5JZkV4Y2VwdGlvbj10cnVlKQotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQiAiICsgc3RhdGUgKyAiIHJlbW92ZVJldGFpbklmRXhjZXB0aW9uIik7CkBAIC0yNTgsMTAgKzI1OCwxMCBAQAogICAgIH0KIAogICAgIEBSZW1vdmUKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVOb3RSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKSAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVOb3RSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkIgIiArIHN0YXRlICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQiAiICsgc3RhdGUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbW92ZU5vdFJldGFpbklmRXhjZXB0aW9uIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGhyb3dFeGNlcHRpb24gPSAiICsgdGhyb3dFeGNlcHRpb24pOwogICAgICAgICBpZiggdGhyb3dFeGNlcHRpb24gKSB7CkBAIC0yNzIsNyArMjcyLDcgQEAKICAgICBAUmVtb3ZlCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlTWV0aG9kVGhyb3dTeXNFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikgewogCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQiAiICsgc3RhdGUgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCICIgKyBzdGF0ZSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZlTWV0aG9kVGhyb3dTeXNFeGNlcHRpb24iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0aHJvd0V4Y2VwdGlvbiA9ICIgKyB0aHJvd0V4Y2VwdGlvbik7CiAgICAgICAgIGlmKCB0aHJvd0V4Y2VwdGlvbiApIHsKQEAgLTI5OSw3ICsyOTksNyBAQAogICAgICAgICAgICAgU2Z1bEVKQjIuYmVmb3JlQ29tcGxldGlvbkNhbGxlZCAmJgogICAgICAgICAgICAgU2Z1bEVKQjIuYWZ0ZXJDb21wbGV0aW9uQ2FsbGVkICkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgU2Vzc2lvblN5bmNoIGJlaGF2aW9yIGZvciAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZlUmV0YWluSWZFeGNlcHRpb24odHJ1ZSkiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbW92ZVJldGFpbklmRXhjZXB0aW9uKHRydWUpIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTZXNzaW9uU3luY2ggZmFpbHVyZSBmb3IgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbih0cnVlKSIpOwpAQCAtMzIwLDEzICszMjAsMTMgQEAKICAgICAgICAgICAgICFTZnVsRUpCMi5iZWZvcmVDb21wbGV0aW9uQ2FsbGVkICYmCiAgICAgICAgICAgICAhU2Z1bEVKQjIuYWZ0ZXJDb21wbGV0aW9uQ2FsbGVkICkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgU2Vzc2lvblN5bmNoIGJlaGF2aW9yIGZvciAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZlUmV0YWluSWZFeGNlcHRpb24oZmFsc2UpIik7ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbW92ZVJldGFpbklmRXhjZXB0aW9uKGZhbHNlKSIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU2Vzc2lvblN5bmNoIGZhaWx1cmUgZm9yICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZlUmV0YWluSWZFeGNlcHRpb24odHJ1ZSkiKTsKICAgICAgICAgfQogCi0gICAgICAgIAorCiAKIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL1NmdWxFSkIyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL1NmdWxFSkIyLmphdmEKaW5kZXggYjJmOWRkZi4uNmI5M2VkNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2VqYi9TZnVsRUpCMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvU2Z1bEVKQjIuamF2YQpAQCAtNDMsMTAgKzQzLDEwIEBACiAKICAgICAvLyB1c2Ugc29tZSBwYWNrYWdlLWxvY2FsIG11dGFibGUgc3RhdGljIHN0YXRlIHRvIGNoZWNrIHdoZXRoZXIKICAgICAvLyBzZXNzaW9uIHN5bmNoIGNhbGxiYWNrcyBhcmUgY2FsbGVkIGNvcnJlY3RseSBmb3IgQFJlbW92ZSBtZXRob2RzLgotICAgIC8vIFRoaXMgcHJvdmlkZXMgYSBzaW1wbGUgd2F5IHRvIGNoZWNrIHRoZSByZXN1bHRzIHNpbmNlIHRoZSBiZWFuIAorICAgIC8vIFRoaXMgcHJvdmlkZXMgYSBzaW1wbGUgd2F5IHRvIGNoZWNrIHRoZSByZXN1bHRzIHNpbmNlIHRoZSBiZWFuCiAgICAgLy8gaW5zdGFuY2UgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZSB0byB0aGUgY2FsbGVyLiAgVGhlIGNhbGxlciBtdXN0CiAgICAgLy8gYWx3YXlzIGF0IG1vc3Qgb25lIFNGU0JzIG9mIHRoaXMgYmVhbiB0eXBlIGF0IGEgdGltZSBmb3IgdGhpcwotICAgIC8vIHRvIHdvcmsuICAKKyAgICAvLyB0byB3b3JrLgogICAgIHN0YXRpYyBib29sZWFuIGFmdGVyQmVnaW5DYWxsZWQgPSBmYWxzZTsKICAgICBzdGF0aWMgYm9vbGVhbiBiZWZvcmVDb21wbGV0aW9uQ2FsbGVkID0gZmFsc2U7CiAgICAgc3RhdGljIGJvb2xlYW4gYWZ0ZXJDb21wbGV0aW9uQ2FsbGVkID0gZmFsc2U7CkBAIC02MCw3ICs2MCw3IEBACiAgICAgfQogCiAgICAgQFJlbW92ZShyZXRhaW5JZkV4Y2VwdGlvbj10cnVlKQotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQjIgIiArCkBAIC03Miw3ICs3Miw3IEBACiAgICAgfQogCiAgICAgQFJlbW92ZQotICAgIHB1YmxpYyB2b2lkIHJlbW92ZU5vdFJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZU5vdFJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQjIgIiArCkBAIC04Niw3ICs4Niw3IEBACiAgICAgQFJlbW92ZQogICAgIHB1YmxpYyB2b2lkIHJlbW92ZU1ldGhvZFRocm93U3lzRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIHsKIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkIyICIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCMiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmVNZXRob2RUaHJvd1N5c0V4Y2VwdGlvbiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRocm93RXhjZXB0aW9uID0gIiArIHRocm93RXhjZXB0aW9uKTsKICAgICAgICAgaWYoIHRocm93RXhjZXB0aW9uICkgewpAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgICAgIGFmdGVyQmVnaW5DYWxsZWQgPSB0cnVlOwogICAgICAgICBiZWZvcmVDb21wbGV0aW9uQ2FsbGVkID0gZmFsc2U7CiAgICAgICAgIGFmdGVyQ29tcGxldGlvbkNhbGxlZCA9IGZhbHNlOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkIyOjphZnRlckJlZ2luKCkiKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvU2xlc3NFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvU2xlc3NFSkIuamF2YQppbmRleCA5MDBlZWQyLi4zZjg2YzY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL1NsZXNzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2VqYi9TbGVzc0VKQi5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAKIEBSZW1vdGUoU2xlc3MuY2xhc3MpCiBAUmVtb3RlSG9tZShTbGVzc1JlbW90ZUhvbWUuY2xhc3MpCi1wdWJsaWMgY2xhc3MgU2xlc3NFSkIgCitwdWJsaWMgY2xhc3MgU2xlc3NFSkIKIHsKICAgICBAUmVzb3VyY2UobmFtZT0ibnVsbCIpIFNlc3Npb25Db250ZXh0IHNjOwogCkBAIC02NiwxMSArNjYsMTEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbiByb3VuZFRyaXAyKENvbGxlY3Rpb24gY29sbGVjdGlvbk9mU2xlc3MpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTbGVzc0VKQjo6cm91bmRUcmlwMiAiICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2xlc3NFSkI6OnJvdW5kVHJpcDIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uT2ZTbGVzcyk7CiAgICAgICAgIGlmKCBjb2xsZWN0aW9uT2ZTbGVzcy5zaXplKCkgPiAwICkgewogICAgICAgICAgICAgU2xlc3Mgc2xlc3MgPSAoU2xlc3MpIGNvbGxlY3Rpb25PZlNsZXNzLml0ZXJhdG9yKCkubmV4dCgpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnB1dCBTbGVzcy5nZXRJZCgpID0gIiArIHNsZXNzLmdldElkKCkpOyAgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlucHV0IFNsZXNzLmdldElkKCkgPSAiICsgc2xlc3MuZ2V0SWQoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZlNsZXNzOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvU2xlc3NFSkIyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL1NsZXNzRUpCMi5qYXZhCmluZGV4IDVkODFkZTMuLjFlNWE4NWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvU2xlc3NFSkIyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2VqYi9TbGVzc0VKQjIuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2xlc3NFSkIyOjplamJDcmVhdGUoKSIpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2xlc3NFSkIyOjplamJDcmVhdGUoKSIpOwogICAgICAgICBwb3N0Q29uc3RydWN0Q2FsbGVkID0gdHJ1ZTsKICAgICB9CiAKQEAgLTcyLDcgKzcyLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldElkKCkgewogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyBQcm9wcmlldGFyeSB3YXkgdG8gbG9vayB1cCB0eCBtYW5hZ2VyLiAgCisgICAgICAgICAgICAvLyBQcm9wcmlldGFyeSB3YXkgdG8gbG9vayB1cCB0eCBtYW5hZ2VyLgogICAgICAgICAgICAgVHJhbnNhY3Rpb25NYW5hZ2VyIHRtID0gKFRyYW5zYWN0aW9uTWFuYWdlcikKICAgICAgICAgICAgICAgICBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6YXBwc2VydmVyL1RyYW5zYWN0aW9uTWFuYWdlciIpOwogICAgICAgICAgICAgLy8gVXNlIGFuIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZXJlCkBAIC05NCw3ICs5NCw3IEBACiAKICAgICAgICAgcmV0dXJuICJTbGVzc0VKQjIiOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTbGVzcyByb3VuZFRyaXAoU2xlc3MgcykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNsZXNzRUpCMjo6cm91bmRUcmlwICIgKyBzKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnB1dCBTbGVzcy5nZXRJZCgpID0gIiArIHMuZ2V0SWQoKSk7CkBAIC0xMDIsMTIgKzEwMiwxMiBAQAogICAgIH0KIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIHJvdW5kVHJpcDIoQ29sbGVjdGlvbiBjb2xsZWN0aW9uT2ZTbGVzcykgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNsZXNzRUpCMjo6cm91bmRUcmlwMiAiICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2xlc3NFSkIyOjpyb3VuZFRyaXAyICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbk9mU2xlc3MpOwogCiAgICAgICAgIGlmKCBjb2xsZWN0aW9uT2ZTbGVzcy5zaXplKCkgPiAwICkgewogICAgICAgICAgICAgU2xlc3Mgc2xlc3MgPSAoU2xlc3MpIGNvbGxlY3Rpb25PZlNsZXNzLml0ZXJhdG9yKCkubmV4dCgpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnB1dCBTbGVzcy5nZXRJZCgpID0gIiArIHNsZXNzLmdldElkKCkpOyAgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlucHV0IFNsZXNzLmdldElkKCkgPSAiICsgc2xlc3MuZ2V0SWQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gY29sbGVjdGlvbk9mU2xlc3M7CkBAIC0xMTgsMTAgKzExOCwxMCBAQAogICAgICAgICBzY18gPSBzYzsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKQogICAgIHt9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkKICAgICB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvU2xlc3NFSkIzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL1NsZXNzRUpCMy5qYXZhCmluZGV4IDA5ODExZjMuLjQwYzZhZjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvU2xlc3NFSkIzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2VqYi9TbGVzc0VKQjMuamF2YQpAQCAtMzksNyArMzksNyBAQAogCiAgICAgcHJpdmF0ZSBAUmVzb3VyY2UgU2Vzc2lvbkNvbnRleHQgZWpiQ29udGV4dDI7CiAKLSAgICBAUmVzb3VyY2UodHlwZT1qYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dC5jbGFzcykgCisgICAgQFJlc291cmNlKHR5cGU9amFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQuY2xhc3MpCiAgICAgcHJpdmF0ZSBFSkJDb250ZXh0IGVqYkNvbnRleHQzOwogCiAgICAgcHJpdmF0ZSBFSkJDb250ZXh0IGVqYkNvbnRleHQ0OwpAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICBwcml2YXRlIHZvaWQgc2V0RUpCQ29udGV4dDYoRUpCQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIGVqYkNvbnRleHQ2ID0gY29udGV4dDsKICAgICB9Ci0gICAgCisKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHB1YmxpYyB2b2lkIGFmdGVyQ3JlYXRlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNsZXNzRUpCMzo6YWZ0ZXJDcmVhdGUoKSBtYXJrZWQgYXMgUG9zdENvbnN0cnVjdCIpOwpAQCAtMTM2LDEzICsxMzYsMTMgQEAKICAgICB9CiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbiByb3VuZFRyaXAyKENvbGxlY3Rpb24gY29sbGVjdGlvbk9mU2xlc3MpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTbGVzc0VKQjM6OnJvdW5kVHJpcDIgIiArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNsZXNzRUpCMzo6cm91bmRUcmlwMiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25PZlNsZXNzKTsKICAgICAgICAgaWYoIGNvbGxlY3Rpb25PZlNsZXNzLnNpemUoKSA+IDAgKSB7CiAgICAgICAgICAgICBTbGVzcyBzbGVzcyA9IChTbGVzcykgY29sbGVjdGlvbk9mU2xlc3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlucHV0IFNsZXNzLmdldElkKCkgPSAiICsgc2xlc3MuZ2V0SWQoKSk7ICAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW5wdXQgU2xlc3MuZ2V0SWQoKSA9ICIgKyBzbGVzcy5nZXRJZCgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29sbGVjdGlvbk9mU2xlc3M7Ci0gICAgfSAgICAKKyAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvYnVpbGQucHJvcGVydGllcwppbmRleCA4MzQyOWMyLi43N2QzNzdkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjJmdWxsL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMC1oZWxsby1zZXNzaW9uMmZ1bGwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9idWlsZC54bWwKaW5kZXggMjFmMDZlNS4uZTYxMjdmZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50U3VwZXIuY2xhc3MsKiovQ2xpZW50LmNsYXNzLCoqL1NsZXNzLmNsYXNzLCoqL1NsZXNzU3ViLmNsYXNzLCoqL1NmdWwuY2xhc3MsKiovRXh0ZXJuYWxCdXNpbmVzcy5jbGFzcywqKi9Gb29Ib21lLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjEsMTAgKzYxLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMmU2ODdiMi4uNjJjYjE3OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCBleHRlbmRzIENsaWVudFN1cGVyIHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzUsNyArMzUsNyBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWVqYjMwLWhlbGxvLXNlc3Npb24yZnVsbElEIik7Ci0gICAgfSAgCisgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2Z1bCBzZnVsMTsKICAgICBwcml2YXRlIHN0YXRpYyBTZnVsIHNmdWwyOwpAQCAtNDQsNyArNDQsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2xlc3Mgc2xlc3MxOwogCi0gICAgLy8gbGlua2VkIHRvIFNsZXNzRUpCMiB2aWEgc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwgCisgICAgLy8gbGlua2VkIHRvIFNsZXNzRUpCMiB2aWEgc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwKICAgICAvLyBzbyBubyBiZWFuTmFtZSBkaXNhbWJpZ3VhdGlvbiBpcyBuZWVkZWQKICAgICBwcml2YXRlIHN0YXRpYyBTbGVzcyBzbGVzczI7CiAKQEAgLTU0LDExICs1NCwxMSBAQAogCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBzdXBlclNsZXNzMSIpOwogICAgICAgICAgICAgc3VwZXJTbGVzczEuaGVsbG8oKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGVkIHN1cGVyU2xlc3MxIik7CkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgICAgICBpZiggZ2V0MS5lcXVhbHMoZ2V0MikgKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiU0ZTQiBnZXQgdGVzdCBmYWlsZWQiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBDYWxsIGFwcGxpY2F0aW9uLWRlZmluZWQgQFJlbW92ZSBtZXRob2QuIFRoaXMgbWV0aG9kIGhhcwogICAgICAgICAgICAgLy8gbm8gcmVsYXRpb25zaGlwIHRvIEVKQk9iamVjdC5yZW1vdmUoKS4gIEl0J3MgYSBjb2luY2lkZW5jZQogICAgICAgICAgICAgLy8gdGhhdCBpdCBoYXMgdGhlIHNhbWUgbmFtZS4KQEAgLTE5Niw3ICsxOTYsNyBAQAogICAgICAgICAgICAgaWYoIHIxLmdldElkKCkuZXF1YWxzKHIyLmdldElkKCkpICkgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oInJlbW90ZSBwYXJhbSBwYXNzaW5nIGdldElkKCkgdGVzdCBmYWlsZWQiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzbGVzczMuaGVsbG8oKTsKICAgICAgICAgICAgIHNsZXNzMy5oZWxsbzMoKTsKIApAQCAtMjI3LDggKzIyNyw4IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCA2OTIxNmI0Li4yMDY3NmYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjJmdWxsL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0yMzQsNyArMjM0LDcgQEAKICAgICAgICA8aW50ZXJjZXB0b3ItY2xhc3M+Y29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uMmZ1bGwuTXlDYWxsYmFja0hhbmRsZXI8L2ludGVyY2VwdG9yLWNsYXNzPgogICAgICAgIDxwcmUtZGVzdHJveT4KICAgICAgICAgIDxsaWZlY3ljbGUtY2FsbGJhY2stbWV0aG9kPm15UHJlRGVzdHJveU1ldGhvZDwvbGlmZWN5Y2xlLWNhbGxiYWNrLW1ldGhvZD4KLSAgICAgICA8L3ByZS1kZXN0cm95PiAgCisgICAgICAgPC9wcmUtZGVzdHJveT4KICAgICAgPC9pbnRlcmNlcHRvcj4KICAgPC9pbnRlcmNlcHRvcnM+CiAgIDxhc3NlbWJseS1kZXNjcmlwdG9yPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9lamIvRm9vLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjJmdWxsL2VqYi9Gb28uamF2YQppbmRleCA2MjE4ZDMxLi44YTVjNzk3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjJmdWxsL2VqYi9Gb28uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjJmdWxsL2VqYi9Gb28uamF2YQpAQCAtMjUsNyArMjUsNyBAQAogCiAgICAgdm9pZCBjYWxsSGVsbG8oKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIFN0cmluZyBzYXlIZWxsbygpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBhc3NlcnRWYWxpZFJlbW90ZU9iamVjdChTdHJpbmcgbXNnKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvZWpiL1NmdWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvZWpiL1NmdWwuamF2YQppbmRleCAyMWVlZDg4Li5jZTlhYmZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjJmdWxsL2VqYi9TZnVsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9lamIvU2Z1bC5qYXZhCkBAIC0zNywxNiArMzcsMTYgQEAKICAgICAvLyBmb3IgYSBtZXRob2QgdGhhdCBoYXMgQFJlbW92ZSBiZWhhdmlvciBzbyBpdCBuZWVkcyB0byB3b3JrLgogICAgIHB1YmxpYyB2b2lkIHJlbW92ZSgpOwogCi0gICAgLy8gQXNzb2NpYXRlZCB3aXRoIGFuIEBSZW1vdmUgbWV0aG9kIHRoYXQgaGFzIHJldGFpbklmRXhjZXB0aW9uPXRydWUuICAgIAorICAgIC8vIEFzc29jaWF0ZWQgd2l0aCBhbiBAUmVtb3ZlIG1ldGhvZCB0aGF0IGhhcyByZXRhaW5JZkV4Y2VwdGlvbj10cnVlLgogICAgIC8vIElmIGFyZ3VtZW50IGlzIHRydWUsIHRoZSBtZXRob2Qgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24sIHdoaWNoIHNob3VsZAogICAgIC8vIGtlZXAgdGhlIGJlYW4gZnJvbSBiZWluZyByZW1vdmVkLiAgSWYgYXJndW1lbnQgaXMgZmFsc2UsIHRoZSBiZWFuCiAgICAgLy8gc2hvdWxkIHN0bGwgYmUgcmVtb3ZlZC4KLSAgICBwdWJsaWMgdm9pZCByZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKSAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uOwogCi0gICAgLy8gQXNzb2NpYXRlZCB3aXRoIGFuIEBSZW1vdmUgbWV0aG9kIHRoYXQgaGFzIHJldGFpbklmRXhjZXB0aW9uPWZhbHNlLiAgICAKKyAgICAvLyBBc3NvY2lhdGVkIHdpdGggYW4gQFJlbW92ZSBtZXRob2QgdGhhdCBoYXMgcmV0YWluSWZFeGNlcHRpb249ZmFsc2UuCiAgICAgLy8gV2hldGhlciB0aGUgYXJndW1lbnQgaXMgdHJ1ZSBvciBmYWxzZSwgdGhlIGJlYW4gc2hvdWxkIHN0aWxsIGJlCiAgICAgLy8gcmVtb3ZlZC4KLSAgICBwdWJsaWMgdm9pZCByZW1vdmVOb3RSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKSAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVOb3RSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9lamIvU2Z1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IGNmZTk1N2YuLjEyZGVjNjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvZWpiL1NmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjJmdWxsL2VqYi9TZnVsRUpCLmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKIAotcHVibGljIGNsYXNzIFNmdWxFSkIgCitwdWJsaWMgY2xhc3MgU2Z1bEVKQgogewogCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYzsKQEAgLTM5LDcgKzM5LDcgQEAKICAgICBwcml2YXRlIHZvaWQgc2V0U2xlc3M0KFNsZXNzIHNsZXNzKSB7CiAgICAgICAgIHNsZXNzNF8gPSBzbGVzczsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIFNsZXNzIHNsZXNzNV87CiAgICAgdm9pZCBzZXRTbGVzczUoU2xlc3Mgc2xlc3MpIHsKICAgICAgICAgc2xlc3M1XyA9IHNsZXNzOwpAQCAtMTA4LDcgKzEwOCw3IEBACiAgICAgcHVibGljIHZvaWQgZm9vKGludCBhLCBTdHJpbmcgYikgewogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCB0ZXN0U2xlc3NSZWZzKFNsZXNzIHMxLCBTbGVzcyBzMiwgU2xlc3NTdWIgczMpIAorICAgIHByaXZhdGUgdm9pZCB0ZXN0U2xlc3NSZWZzKFNsZXNzIHMxLCBTbGVzcyBzMiwgU2xlc3NTdWIgczMpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIFN0cmluZyBzbGVzczFJZCA9IHMxLmdldElkKCk7CkBAIC0xNTgsNyArMTU4LDcgQEAKICAgICAgICAgczMucm91bmRUcmlwMihjKTsKIAogICAgICAgICBzMy5oZWxsbzMoKTsKLSAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGFmdGVyQ3JlYXRlKCkgewpAQCAtMTY5LDcgKzE2OSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQiAiICsgc3RhdGUgKyAiIEBSZW1vdmUgbWV0aG9kIik7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlUmV0YWluSWZFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlUmV0YWluSWZFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCICIgKyBzdGF0ZSArICIgcmVtb3ZlUmV0YWluSWZFeGNlcHRpb24iKTsKQEAgLTE3OSwxMCArMTc5LDEwIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVOb3RSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKSAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVOb3RSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkIgIiArIHN0YXRlICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQiAiICsgc3RhdGUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbW92ZU5vdFJldGFpbklmRXhjZXB0aW9uIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGhyb3dFeGNlcHRpb24gPSAiICsgdGhyb3dFeGNlcHRpb24pOwogICAgICAgICBpZiggdGhyb3dFeGNlcHRpb24gKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjJmdWxsL2VqYi9TbGVzc0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9lamIvU2xlc3NFSkIuamF2YQppbmRleCAxNTY0ODYzLi41NjUwNzE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjJmdWxsL2VqYi9TbGVzc0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvZWpiL1NsZXNzRUpCLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiBpbXBvcnQgamFrYXJ0YS50cmFuc2FjdGlvbi5Vc2VyVHJhbnNhY3Rpb247CiAKLXB1YmxpYyBjbGFzcyBTbGVzc0VKQiAKK3B1YmxpYyBjbGFzcyBTbGVzc0VKQgogewogCiAKQEAgLTQ2LDExICs0NiwxMSBAQAogICAgIH0KIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIHJvdW5kVHJpcDIoQ29sbGVjdGlvbiBjb2xsZWN0aW9uT2ZTbGVzcykgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNsZXNzRUpCOjpyb3VuZFRyaXAyICIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTbGVzc0VKQjo6cm91bmRUcmlwMiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25PZlNsZXNzKTsKICAgICAgICAgaWYoIGNvbGxlY3Rpb25PZlNsZXNzLnNpemUoKSA+IDAgKSB7CiAgICAgICAgICAgICBTbGVzcyBzbGVzcyA9IChTbGVzcykgY29sbGVjdGlvbk9mU2xlc3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlucHV0IFNsZXNzLmdldElkKCkgPSAiICsgc2xlc3MuZ2V0SWQoKSk7ICAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW5wdXQgU2xlc3MuZ2V0SWQoKSA9ICIgKyBzbGVzcy5nZXRJZCgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29sbGVjdGlvbk9mU2xlc3M7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9lamIvU2xlc3NFSkIyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjJmdWxsL2VqYi9TbGVzc0VKQjIuamF2YQppbmRleCA5MDQyYjMzLi5mYjY4MjAzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjJmdWxsL2VqYi9TbGVzc0VKQjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjJmdWxsL2VqYi9TbGVzc0VKQjIuamF2YQpAQCAtNTMsNyArNTMsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8vIFByb3ByaWV0YXJ5IHdheSB0byBsb29rIHVwIHR4IG1hbmFnZXIuICAKKyAgICAgICAgICAgIC8vIFByb3ByaWV0YXJ5IHdheSB0byBsb29rIHVwIHR4IG1hbmFnZXIuCiAgICAgICAgICAgICBUcmFuc2FjdGlvbk1hbmFnZXIgdG0gPSAoVHJhbnNhY3Rpb25NYW5hZ2VyKQogICAgICAgICAgICAgICAgIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTphcHBzZXJ2ZXIvVHJhbnNhY3Rpb25NYW5hZ2VyIik7CiAgICAgICAgICAgICAvLyBVc2UgYW4gaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlcmUKQEAgLTc1LDcgKzc1LDcgQEAKIAogICAgICAgICByZXR1cm4gIlNsZXNzRUpCMiI7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNsZXNzIHJvdW5kVHJpcChTbGVzcyBzKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2xlc3NFSkIyOjpyb3VuZFRyaXAgIiArIHMpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlucHV0IFNsZXNzLmdldElkKCkgPSAiICsgcy5nZXRJZCgpKTsKQEAgLTgzLDEyICs4MywxMiBAQAogICAgIH0KIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIHJvdW5kVHJpcDIoQ29sbGVjdGlvbiBjb2xsZWN0aW9uT2ZTbGVzcykgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNsZXNzRUpCMjo6cm91bmRUcmlwMiAiICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2xlc3NFSkIyOjpyb3VuZFRyaXAyICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbk9mU2xlc3MpOwogCiAgICAgICAgIGlmKCBjb2xsZWN0aW9uT2ZTbGVzcy5zaXplKCkgPiAwICkgewogICAgICAgICAgICAgU2xlc3Mgc2xlc3MgPSAoU2xlc3MpIGNvbGxlY3Rpb25PZlNsZXNzLml0ZXJhdG9yKCkubmV4dCgpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnB1dCBTbGVzcy5nZXRJZCgpID0gIiArIHNsZXNzLmdldElkKCkpOyAgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlucHV0IFNsZXNzLmdldElkKCkgPSAiICsgc2xlc3MuZ2V0SWQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gY29sbGVjdGlvbk9mU2xlc3M7CkBAIC0xMDMsMTAgKzEwMywxMCBAQAogICAgICAgICBzY18gPSBzYzsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKQogICAgIHt9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkKICAgICB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvZWpiL1NsZXNzRUpCMy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9lamIvU2xlc3NFSkIzLmphdmEKaW5kZXggNWJjNDM2Mi4uZGYzYjY4MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9lamIvU2xlc3NFSkIzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9lamIvU2xlc3NFSkIzLmphdmEKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICBwcml2YXRlIHZvaWQgc2V0RUpCQ29udGV4dDYoRUpCQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIGVqYkNvbnRleHQ2XyA9IGNvbnRleHQ7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTbGVzc0VKQjM6aGVsbG8oKSIpOwogCkBAIC05NywxMyArOTcsMTMgQEAKICAgICB9CiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbiByb3VuZFRyaXAyKENvbGxlY3Rpb24gY29sbGVjdGlvbk9mU2xlc3MpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTbGVzc0VKQjM6OnJvdW5kVHJpcDIgIiArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNsZXNzRUpCMzo6cm91bmRUcmlwMiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25PZlNsZXNzKTsKICAgICAgICAgaWYoIGNvbGxlY3Rpb25PZlNsZXNzLnNpemUoKSA+IDAgKSB7CiAgICAgICAgICAgICBTbGVzcyBzbGVzcyA9IChTbGVzcykgY29sbGVjdGlvbk9mU2xlc3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlucHV0IFNsZXNzLmdldElkKCkgPSAiICsgc2xlc3MuZ2V0SWQoKSk7ICAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW5wdXQgU2xlc3MuZ2V0SWQoKSA9ICIgKyBzbGVzcy5nZXRJZCgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29sbGVjdGlvbk9mU2xlc3M7Ci0gICAgfSAgICAKKyAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTY2ZTBmOC4uYjE1NTY1ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIzICsxNSwyMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMwLWhlbGxvLXNlc3Npb24zIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9idWlsZC54bWwKaW5kZXggNGQ2ODBmZi4uMTQ3ZDRiOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KIApAQCAtNjksNyArNjksNyBAQAogICAgICAgICA8L2phcj4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9IZWxsbyoqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+CiAKQEAgLTgyLDggKzgyLDggQEAKICAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgIDwvamFyPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZS5zcWwiLz4KQEAgLTk2LDcgKzk2LDcgQEAKICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC0xMDYsMTAgKzEwNiwxMCBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IiR7aHR0cC5ob3N0fSAke2h0dHAucG9ydH0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA0OTFjNzFiLi5hNmI0NzE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMxLDMzICszMSwzMyBAQAogaW1wb3J0IGpha2FydGEucGVyc2lzdGVuY2UuRW50aXR5TWFuYWdlcjsKIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBob3N0OwogICAgIHByaXZhdGUgU3RyaW5nIHBvcnQ7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotICAgIEBQZXJzaXN0ZW5jZVVuaXQgCisgICAgQFBlcnNpc3RlbmNlVW5pdAogICAgICAgICBwcml2YXRlIHN0YXRpYyBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBlbWYxOwogCi0gICAgQFBlcnNpc3RlbmNlVW5pdChuYW1lPSJteWVtZiIsIHVuaXROYW1lPSJmb28iKSAKKyAgICBAUGVyc2lzdGVuY2VVbml0KG5hbWU9Im15ZW1mIiwgdW5pdE5hbWU9ImZvbyIpCiAgICAgICAgIHByaXZhdGUgc3RhdGljIEVudGl0eU1hbmFnZXJGYWN0b3J5IGVtZjI7CiAKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIGhvc3QgPSAoIGFyZ3MubGVuZ3RoID4gMCkgPyBhcmdzWzBdIDogImxvY2FsaG9zdCI7CiAgICAgICAgIHBvcnQgPSAoIGFyZ3MubGVuZ3RoID4gMSkgPyBhcmdzWzFdIDogIjQ4NDgiOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpiLWVqYjMwLWhlbGxvLXNlc3Npb24zY2xpZW50Iik7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItZWpiMzAtaGVsbG8tc2Vzc2lvbjNJRCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGVudiA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAKQEAgLTgxLDExICs4MSwxMSBAQAogICAgICAgICAgICAgfQogCiAKLSAgICAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIAorICAgICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICAgICAiL2VqYi1lamIzMC1oZWxsby1zZXNzaW9uMy9zZXJ2bGV0IjsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgd2ViY2xpZW50IHNlcnZsZXQgYXQgIiArIHVybCk7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZihjb2RlICE9IDIwMCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5jb3JyZWN0IHJldHVybiBjb2RlOiAiICsgY29kZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYmNsaWVudCBtYWluIiwgc3RhdC5GQUlMKTsKQEAgLTk3LDE1ICs5NywxNSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYmNsaWVudCBtYWluIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwcml2YXRlIGludCBpbnZva2VTZXJ2bGV0KFN0cmluZyB1cmwpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgICAgCisKICAgICAgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7Ci0gICAgICAgIAorCiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKXUub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOwpAQCAtMTE4LDYgKzExOCw2IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9jbGllbnQvUGVyc29uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvY2xpZW50L1BlcnNvbi5qYXZhCmluZGV4IGYwZjE3YjAuLmY3MTY4YzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9jbGllbnQvUGVyc29uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2NsaWVudC9QZXJzb24uamF2YQpAQCAtMzAsMTAgKzMwLDEwIEBACiAgICAgcHVibGljIFBlcnNvbihTdHJpbmcgbmFtZSl7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKXsKICAgICAgICAgcmV0dXJuICJQZXJzb246IHsiKyIobmFtZSA9ICIrbmFtZSsiKX0iOwogICAgIH0KIAogfQotIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvZWpiL0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvZWpiL0hlbGxvLmphdmEKaW5kZXggYTVkOTMzZi4uNTRiY2NhMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2VqYi9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9lamIvSGVsbG8uamF2YQpAQCAtMTksNSArMTksNSBAQAogcHVibGljIGludGVyZmFjZSBIZWxsbyB7CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvZWpiL0hlbGxvRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvZWpiL0hlbGxvRUpCLmphdmEKaW5kZXggYWY5NTdmMC4uZjkzODM5YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2VqYi9IZWxsb0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9lamIvSGVsbG9FSkIuamF2YQpAQCAtMjgsMTYgKzI4LDE2IEBACiAKIEBTdGF0ZWxlc3MgcHVibGljIGNsYXNzIEhlbGxvRUpCIGltcGxlbWVudHMgSGVsbG8gewogCi0gICAgQFBlcnNpc3RlbmNlVW5pdCAKKyAgICBAUGVyc2lzdGVuY2VVbml0CiAgICAgICAgIHByaXZhdGUgRW50aXR5TWFuYWdlckZhY3RvcnkgZW1mMTsKIAotICAgIEBQZXJzaXN0ZW5jZVVuaXQobmFtZT0ibXllbWYiLCB1bml0TmFtZT0iZm9vIikgCisgICAgQFBlcnNpc3RlbmNlVW5pdChuYW1lPSJteWVtZiIsIHVuaXROYW1lPSJmb28iKQogICAgICAgICBwcml2YXRlIEVudGl0eU1hbmFnZXJGYWN0b3J5IGVtZjI7CiAKICAgICBAUGVyc2lzdGVuY2VDb250ZXh0CiAgICAgICAgIHByaXZhdGUgRW50aXR5TWFuYWdlciBlbTE7CiAKLSAgICBAUGVyc2lzdGVuY2VDb250ZXh0KG5hbWU9Im15ZW0iLCB1bml0TmFtZT0iZm9vIikgCisgICAgQFBlcnNpc3RlbmNlQ29udGV4dChuYW1lPSJteWVtIiwgdW5pdE5hbWU9ImZvbyIpCiAgICAgICAgIHByaXZhdGUgRW50aXR5TWFuYWdlciBlbTI7CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpIHsKQEAgLTU5LDExICs1OSwxMSBAQAogCiAgICAgICAgICAgICAgICAgRW50aXR5TWFuYWdlciBsb29rdXBlbTIgPSAoRW50aXR5TWFuYWdlcikKICAgICAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L215ZW0iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb24oZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvRUpCIHN1Y2Nlc3NmdWwgaW5qZWN0aW9uIG9mIEVNRi9FTSByZWZlcmVuY2VzISIpOwogICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2VqYi9IZWxsb1N0YXRlZnVsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvZWpiL0hlbGxvU3RhdGVmdWwuamF2YQppbmRleCBkODU1NjhhLi40NWIwZDEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvZWpiL0hlbGxvU3RhdGVmdWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvZWpiL0hlbGxvU3RhdGVmdWwuamF2YQpAQCAtMTksNyArMTksNyBAQAogcHVibGljIGludGVyZmFjZSBIZWxsb1N0YXRlZnVsIHsKIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCk7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzbGVlcEZvcihpbnQgc2VjKTsKIAogICAgIHB1YmxpYyB2b2lkIHBpbmcoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEKaW5kZXggYTNkN2U5MC4uNzI3NTk0YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIEBBY2Nlc3NUaW1lb3V0KDApCiBAU3RhdGVmdWwgcHVibGljIGNsYXNzIEhlbGxvU3RhdGVmdWxFSkIgaW1wbGVtZW50cyBIZWxsb1N0YXRlZnVsIHsKIAotICAgIAorCiAgICAgQFBlcnNpc3RlbmNlQ29udGV4dChuYW1lPSJteWVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXROYW1lPSJmb28iLCB0eXBlPVBlcnNpc3RlbmNlQ29udGV4dFR5cGUuRVhURU5ERUQpCiAgICAgICAgIHByaXZhdGUgRW50aXR5TWFuYWdlciBlbTsKQEAgLTQyLDEyICs0MiwxMiBAQAogCiAgICAgcHVibGljIHZvaWQgc2xlZXBGb3IoaW50IHNlYykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVmdWxFSkI6OnNsZWVwRm9yKCkiKTsKLQl0cnkgewotCSAgICBmb3IgKGludCBpPTAgOyBpPHNlYzsgaSsrKSB7Ci0JCVRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMTAwMCk7Ci0JICAgIH0KLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgZm9yIChpbnQgaT0wIDsgaTxzZWM7IGkrKykgeworICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEwMDApOworICAgICAgICB9CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZpbmlzaGVkIEhlbGxvU3RhdGVmdWxFSkI6OnNsZWVwRm9yKCkiKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9zZXJ2bGV0L0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvc2VydmxldC9IZWxsby5qYXZhCmluZGV4IGE1ZDkzM2YuLjU0YmNjYTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9zZXJ2bGV0L0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL3NlcnZsZXQvSGVsbG8uamF2YQpAQCAtMTksNSArMTksNSBAQAogcHVibGljIGludGVyZmFjZSBIZWxsbyB7CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvc2VydmxldC9IZWxsb1N0YXRlZnVsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvc2VydmxldC9IZWxsb1N0YXRlZnVsLmphdmEKaW5kZXggZDg1NTY4YS4uNDViMGQxMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL3NlcnZsZXQvSGVsbG9TdGF0ZWZ1bC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9zZXJ2bGV0L0hlbGxvU3RhdGVmdWwuamF2YQpAQCAtMTksNyArMTksNyBAQAogcHVibGljIGludGVyZmFjZSBIZWxsb1N0YXRlZnVsIHsKIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCk7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzbGVlcEZvcihpbnQgc2VjKTsKIAogICAgIHB1YmxpYyB2b2lkIHBpbmcoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9zZXJ2bGV0L1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9zZXJ2bGV0L1NlcnZsZXQuamF2YQppbmRleCA2OGJiZDUyLi4wYzY3MDQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvc2VydmxldC9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL3NlcnZsZXQvU2VydmxldC5qYXZhCkBAIC04MCwzMCArODAsMzAgQEAKICAgICB9CiAKIAotICAgIEBQZXJzaXN0ZW5jZVVuaXQgCisgICAgQFBlcnNpc3RlbmNlVW5pdAogICAgICAgICBwcml2YXRlIEVudGl0eU1hbmFnZXJGYWN0b3J5IGVtZjE7CiAKLSAgICBAUGVyc2lzdGVuY2VVbml0KG5hbWU9Im15ZW1mIiwgdW5pdE5hbWU9ImZvbyIpIAorICAgIEBQZXJzaXN0ZW5jZVVuaXQobmFtZT0ibXllbWYiLCB1bml0TmFtZT0iZm9vIikKICAgICAgICAgcHJpdmF0ZSBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBlbWYyOwogCiAgICAgQFBlcnNpc3RlbmNlQ29udGV4dAogICAgICAgICBwcml2YXRlIEVudGl0eU1hbmFnZXIgZW0xOwogCi0gICAgQFBlcnNpc3RlbmNlQ29udGV4dChuYW1lPSJteWVtIiwgCisgICAgQFBlcnNpc3RlbmNlQ29udGV4dChuYW1lPSJteWVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXROYW1lPSJmb28iLCB0eXBlPVBlcnNpc3RlbmNlQ29udGV4dFR5cGUuVFJBTlNBQ1RJT04pCiAgICAgICAgIHByaXZhdGUgRW50aXR5TWFuYWdlciBlbTI7CiAKICAgICBwdWJsaWMgdm9pZCAgaW5pdCggU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIHdlYmNsaWVudDo6c2VydmxldC4uLiBpbml0KCkiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXJ2aWNlICggSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSAsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCApIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAgICAgIAorCiAgICAgICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogCiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwpAQCAtMTIyLDcgKzEyMiw3IEBACiAKICAgICAgICAgICAgICAgICBFbnRpdHlNYW5hZ2VyIGxvb2t1cGVtMiA9IChFbnRpdHlNYW5hZ2VyKQogICAgICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvbXllbSIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2bGV0IHN1Y2Nlc3NmdWwgaW5qZWN0aW9uIG9mIEVNRi9FTSByZWZlcmVuY2VzISIpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJPbmUgb3IgbW9yZSBFTUYvRU0gcmVmZXJlbmNlcyIgKwpAQCAtMTUyLDE3ICsxNTIsMTcgQEAKICAgICAgICAgICAgIGhlbGxvU3RhdGVmdWwuaGVsbG8oKTsKICAgICAgICAgICAgIGhlbGxvU3RhdGVmdWwyLmhlbGxvKCk7CiAKLSAgICAgICAgICAgIEhlbGxvIGhlbGxvU3RhdGVsZXNzMyA9IChIZWxsbykgCisgICAgICAgICAgICBIZWxsbyBoZWxsb1N0YXRlbGVzczMgPSAoSGVsbG8pCiAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2hlbGxvU3RhdGVsZXNzMyIpOwogCiAgICAgICAgICAgICBoZWxsb1N0YXRlbGVzczMuaGVsbG8oKTsKIAotICAgICAgICAgICAgSGVsbG8gaGVsbG9TdGF0ZWxlc3M0ID0gKEhlbGxvKSAKKyAgICAgICAgICAgIEhlbGxvIGhlbGxvU3RhdGVsZXNzNCA9IChIZWxsbykKICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvaGVsbG9TdGF0ZWxlc3M0Iik7CiAKICAgICAgICAgICAgIGhlbGxvU3RhdGVsZXNzNC5oZWxsbygpOwogCi0gICAgICAgICAgICBIZWxsb1N0YXRlZnVsIGhlbGxvU3RhdGVmdWwzID0gKEhlbGxvU3RhdGVmdWwpIAorICAgICAgICAgICAgSGVsbG9TdGF0ZWZ1bCBoZWxsb1N0YXRlZnVsMyA9IChIZWxsb1N0YXRlZnVsKQogICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9oZWxsb1N0YXRlZnVsMyIpOwogCiAgICAgICAgICAgICBoZWxsb1N0YXRlZnVsMy5oZWxsbygpOwpAQCAtMTk0LDY2ICsxOTQsNjYgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZHM2IGxvZ2luIHRpbWVvdXQgPSAiICsgbG9naW5UaW1lb3V0KTsKIAogCi0JICAgIHRyeSB7Ci0JCU15VGhyZWFkIHRocmVhZCA9IG5ldyBNeVRocmVhZChoZWxsb1N0YXRlZnVsMik7Ci0JCXRocmVhZC5zdGFydCgpOworICAgICAgICB0cnkgeworICAgICAgICBNeVRocmVhZCB0aHJlYWQgPSBuZXcgTXlUaHJlYWQoaGVsbG9TdGF0ZWZ1bDIpOworICAgICAgICB0aHJlYWQuc3RhcnQoKTsKIAotCQlzbGVlcEZvcigxMCk7Ci0JCWhlbGxvU3RhdGVmdWwyLnBpbmcoKTsKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkIG5vdCBnZXQgQ29uY3VycmVudEFjY2Vzc0V4Y2VwdGlvbiIpOwotCSAgICB9IGNhdGNoIChqYWthcnRhLmVqYi5Db25jdXJyZW50QWNjZXNzRXhjZXB0aW9uIGNvbkV4KSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIENvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24iKTsgICAvL0V2ZXJ5dGhpbmcgaXMgZmluZQotCSAgICB9IGNhdGNoIChUaHJvd2FibGUgdGgpIHsKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiR290IHNvbWUgd2llcmQgZXhjZXB0aW9uOiAiICsgdGgpOwotCSAgICB9CisgICAgICAgIHNsZWVwRm9yKDEwKTsKKyAgICAgICAgaGVsbG9TdGF0ZWZ1bDIucGluZygpOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJEaWQgbm90IGdldCBDb25jdXJyZW50QWNjZXNzRXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2ggKGpha2FydGEuZWpiLkNvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24gY29uRXgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgQ29uY3VycmVudEFjY2Vzc0V4Y2VwdGlvbiIpOyAgIC8vRXZlcnl0aGluZyBpcyBmaW5lCisgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0aCkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJHb3Qgc29tZSB3aWVyZCBleGNlcHRpb246ICIgKyB0aCk7CisgICAgICAgIH0KIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzdWNjZXNzZnVsbHkgYWNjZXNzZWQgY29ubmVjdGlvbnMiKTsKIAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxIVE1MPiA8SEVBRD4gPFRJVExFPiBKTVMgU2VydmxldCBPdXRwdXQgPC9USVRMRT4gPC9IRUFEPiA8Qk9EWSBCR0NPTE9SPXdoaXRlPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxDRU5URVI+IDxGT05UIHNpemU9KzEgQ09MT1I9Ymx1ZT5EYXRhYmFzZVNlcnZlbHQgOjogQWxsIGluZm9ybWF0aW9uIEkgY2FuIGdpdmUgPC9GT05UPiA8L0NFTlRFUj4gPHA+ICIgKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gQ29udGV4dCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRDb250ZXh0UGF0aCgpICsgIjxicj4iICk7IAotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBTZXJ2bGV0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldFNlcnZsZXRQYXRoKCkgKyAiPGJyPiIgKTsgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBhdGggSW5mbyA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0UGF0aEluZm8oKSArICI8YnI+IiApOyAKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gQ29udGV4dCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRDb250ZXh0UGF0aCgpICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFNlcnZsZXQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0U2VydmxldFBhdGgoKSArICI8YnI+IiApOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBQYXRoIEluZm8gOiAgPC9GT05UPiAiICsgcmVxLmdldFBhdGhJbmZvKCkgKyAiPGJyPiIgKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L0JPRFk+IDwvSFRNTD4gIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9Y2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIndlYmNsaWVudCBzZXJ2bGV0IHRlc3QgZmFpbGVkIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihleCk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICB9CiAKLSAgICAKLSAgICAKKworCiAgICAgcHVibGljIHZvaWQgIGRlc3Ryb3koKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gd2ViY2xpZW50OjpzZXJ2bGV0IGRlc3Ryb3kiKTsKICAgICB9CiAKICAgICBjbGFzcyBNeVRocmVhZCBleHRlbmRzIFRocmVhZCB7Ci0JSGVsbG9TdGF0ZWZ1bCByZWY7CisgICAgSGVsbG9TdGF0ZWZ1bCByZWY7CiAKLQlNeVRocmVhZChIZWxsb1N0YXRlZnVsIHJlZikgewotCSAgICB0aGlzLnJlZiA9IHJlZjsKLQl9CisgICAgTXlUaHJlYWQoSGVsbG9TdGF0ZWZ1bCByZWYpIHsKKyAgICAgICAgdGhpcy5yZWYgPSByZWY7CisgICAgfQogCi0JcHVibGljIHZvaWQgcnVuKCkgewotCSAgICB0cnkgewotCQlyZWYuc2xlZXBGb3IoMjApOwotCSAgICB9IGNhdGNoIChUaHJvd2FibGUgdGgpIHsKLQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5vdCBpbnZva2Ugd2FpdGZvcigpIG1ldGhvZCIpOwotCSAgICB9Ci0JfQorICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgcmVmLnNsZWVwRm9yKDIwKTsKKyAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRoKSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDb3VsZCBub3QgaW52b2tlIHdhaXRmb3IoKSBtZXRob2QiKTsKKyAgICAgICAgfQorICAgIH0KICAgICB9CiAKIAogICAgIHByaXZhdGUgdm9pZCBzbGVlcEZvcihpbnQgc2VjKSB7Ci0JdHJ5IHsKLQkgICAgZm9yIChpbnQgaT0wIDsgaTxzZWM7IGkrKykgewotCQlUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEwMDApOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlsiICsgaSArICIvIiArIHNlYyArICJdOiBTbGVlcGluZy4uLi4iKTsKLQkgICAgfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCX0KKyAgICB0cnkgeworICAgICAgICBmb3IgKGludCBpPTAgOyBpPHNlYzsgaSsrKSB7CisgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMTAwMCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyIgKyBpICsgIi8iICsgc2VjICsgIl06IFNsZWVwaW5nLi4uLiIpOworICAgICAgICB9CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgfQogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb240L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjQvYnVpbGQucHJvcGVydGllcwppbmRleCBiMGNiODY3Li4yMWI2NmZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzAtaGVsbG8tc2Vzc2lvbjQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjQvYnVpbGQueG1sCmluZGV4IDVlZmRiY2EuLmU3YzE2M2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb240L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMzUgKzQ2LDM1IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Z1bCouY2xhc3MsKiovU2xlc3MqLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NmdWwuY2xhc3MsKiovU2Z1bDIuY2xhc3MsKiovU2xlc3MuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJhcHBjbGllbnQuamFyPSR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KICAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIiB1cGRhdGU9InllcyI+Ci0gICAgICAgICAgICA8emlwZmlsZXNldCBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgICAgICAgIDx6aXBmaWxlc2V0IHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlcz0iTUVUQS1JTkYvKioiLz4KICAgICAgICAgPC9qYXI+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiA8IS0tIERvbid0IGRlcGxveSBjbGllbnQgaW4gb3JkZXIgdG8gdGVzdCB0aGF0IGR5bmFtaWMgYnl0ZSBjb2RlCi1nZW5lcmF0aW9uIGlzIHdvcmtpbmcuICAKK2dlbmVyYXRpb24gaXMgd29ya2luZy4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY2xpZW50LWNvbW1vbiIvPgogLS0+CiAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxlY2hvIG1lc3NhZ2U9ImFwcGNsaWVudCAtY2xpZW50ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudENsaWVudC5qYXIgLW5hbWUgJHthcHBuYW1lfUNsaWVudCAtdGV4dGF1dGggLXVzZXIgajJlZSAtcGFzc3dvcmQgajJlZSAteG1sICR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sICR7YXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3N9Ii8+ICAgCisgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImFwcGNsaWVudCAtY2xpZW50ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudENsaWVudC5qYXIgLW5hbWUgJHthcHBuYW1lfUNsaWVudCAtdGV4dGF1dGggLXVzZXIgajJlZSAtcGFzc3dvcmQgajJlZSAteG1sICR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sICR7YXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3N9Ii8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KIDwhLS0gRG9uJ3QgZGVwbG95IGNsaWVudCBpbiBvcmRlciB0byB0ZXN0IHRoYXQgZHluYW1pYyBieXRlIGNvZGUKLWdlbmVyYXRpb24gaXMgd29ya2luZy4gIAorZ2VuZXJhdGlvbiBpcyB3b3JraW5nLgogICAgICAgICAgICAgPGFyZyBsaW5lPSItY2xpZW50CiAgICAgICAgICAgICAgICAgICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudENsaWVudC5qYXIiLz4KIC0tPgpAQCAtODcsMTUgKzg3LDE1IEBACiAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3N9Ii8+CiAgICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+CiA8IS0tIERvbid0IGRlcGxveSBjbGllbnQgaW4gb3JkZXIgdG8gdGVzdCB0aGF0IGR5bmFtaWMgYnl0ZSBjb2RlCi1nZW5lcmF0aW9uIGlzIHdvcmtpbmcuICAKK2dlbmVyYXRpb24gaXMgd29ya2luZy4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQtY29tbW9uIi8+CiAtLT4KIAotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb240L2NsaWVudC9DbGllbnQuamF2YQppbmRleCBmODcyMGY3Li45NGYzMGIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTM0LDggKzM0LDggQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1lamIzMC1oZWxsby1zZXNzaW9uNElEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KIApAQCAtNTcsOSArNTcsOSBAQAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICB0cnkgewotCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCi0JICAgIHNmdWwgPSAoU2Z1bCkgaWMubG9va3VwKCJlamJfZWpiMzBfaGVsbG9fc2Vzc2lvbjRfU2Z1bCNjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb240LlNmdWwiKTsKKyAgICAgICAgc2Z1bCA9IChTZnVsKSBpYy5sb29rdXAoImVqYl9lamIzMF9oZWxsb19zZXNzaW9uNF9TZnVsI2NvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbjQuU2Z1bCIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBzdGF0ZWZ1bCIpOwogICAgICAgICAgICAgU3RyaW5nIHNmdWxJZCA9ICIxIjsKICAgICAgICAgICAgIHNmdWwuc2V0SWQoc2Z1bElkKTsKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhwZWN0ZWQgaWQgIiArIHNmdWxJZCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VpdmVkIGlkICIgKyBzZnVsXzJJZCk7CiAgICAgICAgICAgICBpZiggIXNmdWxfMklkLmVxdWFscyhzZnVsSWQpICkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oInNmdWwgYmVhbiBpZCBtaXNtYXRjaCAiICsgCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigic2Z1bCBiZWFuIGlkIG1pc21hdGNoICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Z1bElkICsgIiAsICIgKyBzZnVsXzJJZCk7CiAgICAgICAgICAgICB9CiAKQEAgLTgzLDcgKzgzLDcgQEAKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBzdGF0ZWxlc3MiKTsKIAotCSAgICBzbGVzcyA9IChTbGVzcykgaWMubG9va3VwKCJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb240LlNsZXNzIik7CisgICAgICAgIHNsZXNzID0gKFNsZXNzKSBpYy5sb29rdXAoImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbjQuU2xlc3MiKTsKICAgICAgICAgICAgIHNsZXNzLmhlbGxvKCk7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdCBjb21wbGV0ZSIpOwpAQCAtOTQsOCArOTQsOCBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjQvZWpiL1NmdWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNC9lamIvU2Z1bC5qYXZhCmluZGV4IDI2NDQwZWMuLmRhYTFhZjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNC9lamIvU2Z1bC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNC9lamIvU2Z1bC5qYXZhCkBAIC0yOSw1ICsyOSw1IEBACiAKICAgICAvLyBkZWZpbmVkIG9uIGJvdGggcmVtb3RlIGJ1c2luZXNzIGludGVyZmFjZXMKICAgICBwdWJsaWMgdm9pZCBzYW1lTWV0aG9kKCk7Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNC9lamIvU2Z1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb240L2VqYi9TZnVsRUpCLmphdmEKaW5kZXggMzc0OTNmZS4uYTFjMjkxZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb240L2VqYi9TZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb240L2VqYi9TZnVsRUpCLmphdmEKQEAgLTUzLDYgKzUzLDYgQEAKICAgICBwdWJsaWMgdm9pZCBzYW1lTWV0aG9kKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkI6c2FtZU1ldGhvZCgpIik7CiAgICAgfQotICAgIAorCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNC9lamIvU2xlc3NFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNC9lamIvU2xlc3NFSkIuamF2YQppbmRleCAyOWYwYzczLi45ODc5ODYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjQvZWpiL1NsZXNzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb240L2VqYi9TbGVzc0VKQi5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiAvLyBVc2UgQFJlbW90ZSB3aXRob3V0IHBhcmFtZXRlcnMuICBJZiB0aGVyZSdzIG9ubHkgb25lIGFtYmlndW91cwogLy8gaW50ZXJmYWNlIGluIGltcGxlbWVudHMgY2xhdXNlLCBpdCB3aWxsIGJlIHRyZWF0ZSBhcyBAUmVtb3RlIGluc3RlYWQgb2YKIC8vIEBMb2NhbAotQFJlbW90ZSAgCitAUmVtb3RlCiBAU3RhdGVsZXNzCiBwdWJsaWMgY2xhc3MgU2xlc3NFSkIgaW1wbGVtZW50cyBTbGVzcwogewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb241L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjUvYnVpbGQucHJvcGVydGllcwppbmRleCBiM2UxMDk2Li41NDIxMDMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzAtaGVsbG8tc2Vzc2lvbjUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjUvYnVpbGQueG1sCmluZGV4IGIzYmZjOTAuLmQ4OGFmZmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb241L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMjggKzQ2LDI4IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Z1bCouY2xhc3MsKiovU2xlc3MqLmNsYXNzLCoqL015SW50ZXJjZXB0b3IqLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NmdWwyLmNsYXNzLCoqL1NsZXNzMi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImFwcGNsaWVudC5qYXI9JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiIHVwZGF0ZT0ieWVzIj4KLSAgICAgICAgICAgIDx6aXBmaWxlc2V0IHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgICAgICAgPHppcGZpbGVzZXQgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVzPSJNRVRBLUlORi8qKiIvPgogICAgICAgICA8L2phcj4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGVjaG8gbWVzc2FnZT0iYXBwY2xpZW50IC1jbGllbnQgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Q2xpZW50LmphciAtbmFtZSAke2FwcG5hbWV9Q2xpZW50IC10ZXh0YXV0aCAtdXNlciBqMmVlIC1wYXNzd29yZCBqMmVlIC14bWwgJHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwgJHthcHBjbGllbnQuYXBwbGljYXRpb24uYXJnc30iLz4gICAKKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iYXBwY2xpZW50IC1jbGllbnQgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Q2xpZW50LmphciAtbmFtZSAke2FwcG5hbWV9Q2xpZW50IC10ZXh0YXV0aCAtdXNlciBqMmVlIC1wYXNzd29yZCBqMmVlIC14bWwgJHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwgJHthcHBjbGllbnQuYXBwbGljYXRpb24uYXJnc30iLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItY2xpZW50ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudENsaWVudC5qYXIiLz4KICAgICAgICAgICAgIDxhcmcgbGluZT0iLW5hbWUgJHthcHBuYW1lfUNsaWVudCIvPgpAQCAtNzgsMTEgKzc4LDExIEBACiAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3N9Ii8+CiAgICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb241L2NsaWVudC9DbGllbnQuamF2YQppbmRleCA5Y2Q3ZmEyLi4zNmZjZTViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTM0LDggKzM0LDggQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1lamIzMC1oZWxsby1zZXNzaW9uNUlEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgLyoqCiAgICAgICogVGhpcyB0ZXN0IGVuc3VyZXMgdGhhdCB3ZSBkb24ndCBhc3N1bWUgYSByZW1vdGUgZWpiIGNsaWVudCBoYXMKICAgICAgKiBhY2Nlc3MgdG8gYWxsIHRoZSBjbGFzc2VzIGZvciBhbGwgdGhlIHJlbW90ZSBidXNpbmVzcyBpbnRlcmZhY2VzIHRoYXQKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgKiByZW1vdGUgYnVzaW5lc3MgaW50ZXJmYWNlcywgYnV0IHRoaXMgY2xpZW50IG9ubHkgdXNlcyBTZnVsMiBhbmQKICAgICAgKiBTbGVzczIgYW5kIGRvZXMgbm90IHBhY2thZ2UgdGhlIFNmdWwgb3IgU2xlc3MgY2xhc3NlcyBhdCBhbGwuIFRoZQogICAgICAqIGludGVybmFsIGdlbmVyYXRlZCBSTUktSUlPUCBzdHVicyBjcmVhdGVkIGF0IHJ1bnRpbWUgc2hvdWxkIG5vdAotICAgICAqIGNhdXNlIGFueSBjbGFzc2xvYWRpbmcgZXJyb3JzIGluIHRoZSBjbGllbnQuIAorICAgICAqIGNhdXNlIGFueSBjbGFzc2xvYWRpbmcgZXJyb3JzIGluIHRoZSBjbGllbnQuCiAgICAgICovCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KQEAgLTczLDggKzczLDggQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb241L2VqYi9NeUludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjUvZWpiL015SW50ZXJjZXB0b3IuamF2YQppbmRleCBlZjc0YjNiLi5mZjEzMDEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjUvZWpiL015SW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjUvZWpiL015SW50ZXJjZXB0b3IuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgICAgICByZXR1cm4gcG9zdENvbnN0cnVjdENhbGxlZDsKICAgICB9CiAKLSAgICBAUG9zdENvbnN0cnVjdCAKKyAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBwb3N0Q29uc3RydWN0KEludm9jYXRpb25Db250ZXh0IGN0eCkgewogICAgICAgICBwb3N0Q29uc3RydWN0Q2FsbGVkID0gdHJ1ZTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeUludGVyY2VwdG9yOjpwb3N0Q29uc3RydWN0IGNhbGxlZCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb241L2VqYi9NeUludGVyY2VwdG9yMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb241L2VqYi9NeUludGVyY2VwdG9yMi5qYXZhCmluZGV4IDhmMGM4ZjIuLjUwM2U5YjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNS9lamIvTXlJbnRlcmNlcHRvcjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjUvZWpiL015SW50ZXJjZXB0b3IyLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKICAgICB9CiAKIAotICAgIEBQb3N0Q29uc3RydWN0IAorICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIHBvc3RDb25zdHJ1Y3QoSW52b2NhdGlvbkNvbnRleHQgY3R4KSB7CiAgICAgICAgIHBvc3RDb25zdHJ1Y3RDYWxsZWQgPSB0cnVlOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15SW50ZXJjZXB0b3IyOjpwb3N0Q29uc3RydWN0IGNhbGxlZCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb241L2VqYi9TZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjUvZWpiL1NmdWxFSkIuamF2YQppbmRleCA4ZGRkMWE0Li43OWRjY2U3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjUvZWpiL1NmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjUvZWpiL1NmdWxFSkIuamF2YQpAQCAtNTAsNiArNTAsNiBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkI6aGVsbG8yKCkiKTsKICAgICAgICAgcmV0dXJuICJoZWxsbzIiOwogICAgIH0KLSAgICAKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbl9zdGFuZGFsb25lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbl9zdGFuZGFsb25lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGQzNDRlMC4uMzUxNjcwMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb25fc3RhbmRhbG9uZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uX3N0YW5kYWxvbmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzAtaGVsbG8tc2Vzc2lvbl9zdGFuZGFsb25lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbl9zdGFuZGFsb25lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uX3N0YW5kYWxvbmUvYnVpbGQueG1sCmluZGV4IDgwYTk0MWEuLmVjYzMzYjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uX3N0YW5kYWxvbmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uX3N0YW5kYWxvbmUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwyOCArNDYsMjggQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TZnVsKi5jbGFzcywqKi9TbGVzcyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFwcGNsaWVudC1qYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovU2Z1bC5jbGFzcywqKi9TbGVzcy5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImFwcGNsaWVudC5qYXI9JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiIHVwZGF0ZT0ieWVzIj4KLSAgICAgICAgICAgIDx6aXBmaWxlc2V0IHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgICAgICAgPHppcGZpbGVzZXQgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVzPSJNRVRBLUlORi8qKiIvPgogICAgICAgICA8L2phcj4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGVjaG8gbWVzc2FnZT0iYXBwY2xpZW50IC1jbGllbnQgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Q2xpZW50LmphciAtbmFtZSAke2FwcG5hbWV9Q2xpZW50IC10ZXh0YXV0aCAtdXNlciBqMmVlIC1wYXNzd29yZCBqMmVlIC14bWwgJHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwgJHthcHBjbGllbnQuYXBwbGljYXRpb24uYXJnc30iLz4gICAKKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iYXBwY2xpZW50IC1jbGllbnQgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Q2xpZW50LmphciAtbmFtZSAke2FwcG5hbWV9Q2xpZW50IC10ZXh0YXV0aCAtdXNlciBqMmVlIC1wYXNzd29yZCBqMmVlIC14bWwgJHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwgJHthcHBjbGllbnQuYXBwbGljYXRpb24uYXJnc30iLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItY2xpZW50ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudENsaWVudC5qYXIiLz4KICAgICAgICAgICAgIDxhcmcgbGluZT0iLW5hbWUgJHthcHBuYW1lfUNsaWVudCIvPgpAQCAtNzgsMTEgKzc4LDExIEBACiAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3N9Ii8+CiAgICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbl9zdGFuZGFsb25lL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uX3N0YW5kYWxvbmUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGVmMWViODguLjEzZDI1OWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uX3N0YW5kYWxvbmUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uX3N0YW5kYWxvbmUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zMyw4ICszMyw4IEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItZWpiMzAtaGVsbG8tc2Vzc2lvbl9zdGFuZGFsb25lSUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQogCkBAIC03Niw4ICs3Niw4IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uX3N0YW5kYWxvbmUvZWpiL1NsZXNzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbl9zdGFuZGFsb25lL2VqYi9TbGVzc0VKQi5qYXZhCmluZGV4IDI0YWRjYzIuLjQ1NGYyM2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uX3N0YW5kYWxvbmUvZWpiL1NsZXNzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb25fc3RhbmRhbG9uZS9lamIvU2xlc3NFSkIuamF2YQpAQCAtMzcsMTIgKzM3LDEyIEBACiAgICAgICAgIHJldHVybiB0aW1lb3V0V2FzQ2FsbGVkOwogICAgIH0KIAotICAgIEBUaW1lb3V0IAorICAgIEBUaW1lb3V0CiAgICAgcHJpdmF0ZSB2b2lkIHRpbWVvdXQoVGltZXIgdCkgewogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI6dGltZW91dCIpOwogICAgICAgICB0aW1lb3V0V2FzQ2FsbGVkID0gdHJ1ZTsKIAogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDg3ZmZiNmMuLmQ2NzhjMmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIyICsxNSwyMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMwLWludGVyY2VwdG9ycy1iaW5kaW5ncyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzaW1wbGUuY2xpZW50IiB2YWx1ZT0iY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5pbnRlcmNlcHRvcnMuYmluZGluZ3MuY2xpZW50LlN0YW5kYWxvbmVDbGllbnQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2J1aWxkLnhtbAppbmRleCA1ODg2NDFlLi4yMDI2N2NhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TZnVsKi5jbGFzcywqKi9TbGVzcyouY2xhc3MsKiovQ29tbW9uKi5jbGFzcywqKi9JbnRlcmNlcHRvciouY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovU2Z1bC5jbGFzcywqKi9TbGVzcy5jbGFzcywqKi9TZnVsMi5jbGFzcywqKi9TbGVzczMuY2xhc3MsKiovU2xlc3M0LmNsYXNzLCoqL1NsZXNzNS5jbGFzcywqKi9TbGVzczYuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02MSwxMCArNjEsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAzM2ZhNzBhLi4yMTIwZjk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzMsMTEgKzMzLDExIEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItZWpiMzAtaW50ZXJjZXB0b3JzLWJpbmRpbmdzSUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBTZnVsIHNmdWw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBTZnVsMiBzZnVsMjsKICAgICBwcml2YXRlIHN0YXRpYyBARUpCIFNsZXNzMyBzbGVzczM7CkBAIC0xMDEsMTAgKzEwMSwxMCBAQAogCiAgICAgICAgICAgICBzbGVzczYuYWcoKTsKICAgICAgICAgICAgIHNsZXNzNi5hZygxKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzbGVzczYuYmcoKTsKICAgICAgICAgICAgIHNsZXNzNi5iZygxKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzbGVzczYuY2coKTsKICAgICAgICAgICAgIHNsZXNzNi5jZygxKTsKICAgICAgICAgICAgIHNsZXNzNi5jZygiZm9vIiwgMS4wKTsKQEAgLTEyNCw4ICsxMjQsOCBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9Db21tb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL0NvbW1vbi5qYXZhCmluZGV4IDg1YWQ0NGYuLjU5M2IzNTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL0NvbW1vbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL0NvbW1vbi5qYXZhCkBAIC0yOSwxNiArMjksMTYgQEAKIAogICAgIHN0YXRpYyB2b2lkIGFyb3VuZEludm9rZUNhbGxlZChJbnZvY2F0aW9uQ29udGV4dCBjdHgsIFN0cmluZyBpZCkgewogCi0gICAgICAgIExpc3Q8U3RyaW5nPiBpbnRlcmNlcHRvcnMgPSAoTGlzdDxTdHJpbmc+KSAKKyAgICAgICAgTGlzdDxTdHJpbmc+IGludGVyY2VwdG9ycyA9IChMaXN0PFN0cmluZz4pCiAgICAgICAgICAgICBjdHguZ2V0Q29udGV4dERhdGEoKS5nZXQoSU5URVJDRVBUT1JTX1BST1ApOwotICAgICAgICAKKwogICAgICAgICBpZiggaW50ZXJjZXB0b3JzID09IG51bGwgKSB7CiAgICAgICAgICAgICBpbnRlcmNlcHRvcnMgPSBuZXcgTGlua2VkTGlzdDxTdHJpbmc+KCk7CiAgICAgICAgICAgICBjdHguZ2V0Q29udGV4dERhdGEoKS5wdXQoSU5URVJDRVBUT1JTX1BST1AsIGludGVyY2VwdG9ycyk7CiAgICAgICAgIH0KIAogICAgICAgICBpbnRlcmNlcHRvcnMuYWRkKGlkKTsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCBjaGVja1Jlc3VsdHMoSW52b2NhdGlvbkNvbnRleHQgY3R4KSB7CkBAIC01Niw5ICs1Niw5IEBACiAgICAgICAgICAgICBmb3IoIGNoYXIgbmV4dENoYXIgOiBtZXRob2ROYW1lVXBwZXIudG9DaGFyQXJyYXkoKSApIHsKICAgICAgICAgICAgICAgICBleHBlY3RlZC5hZGQobmV4dENoYXIgKyAiIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gCisgICAgICAgIH0KIAotICAgICAgICBMaXN0PFN0cmluZz4gYWN0dWFsID0gKExpc3Q8U3RyaW5nPikgCisgICAgICAgIExpc3Q8U3RyaW5nPiBhY3R1YWwgPSAoTGlzdDxTdHJpbmc+KQogICAgICAgICAgICAgY3R4LmdldENvbnRleHREYXRhKCkuZ2V0KElOVEVSQ0VQVE9SU19QUk9QKTsKIAogICAgICAgICBTdHJpbmcgbXNnID0gIkV4cGVjdGVkICIgKyBleHBlY3RlZCArICIgZm9yIG1ldGhvZCAiICsKQEAgLTc0LDUgKzc0LDUgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bCBpbnRlcmNlcHRvciBjaGFpbiA6ICIgKyBtc2cpOwogICAgICAgICB9CiAgICAgfQotICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL0ludGVyY2VwdG9yQS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvSW50ZXJjZXB0b3JBLmphdmEKaW5kZXggZjI0ZjI5ZS4uOTc5YTBiYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvSW50ZXJjZXB0b3JBLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvSW50ZXJjZXB0b3JBLmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKIHB1YmxpYyBjbGFzcyBJbnRlcmNlcHRvckEgewogCiAgICAgQFJlc291cmNlIFNlc3Npb25Db250ZXh0IHNlc3Npb25DdHg7Ci0gICAgCisKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBwb3N0Q29uc3RydWN0KEludm9jYXRpb25Db250ZXh0IGN0eCkgewogICAgICAgICB0cnkgewpAQCAtMzgsNyArMzgsNyBAQAogCiAgICAgQEFyb3VuZEludm9rZQogICAgIE9iamVjdCBhcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgY3R4KQotCSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICAvLyBhY2Nlc3MgaW5qZWN0ZWQgZW52aXJvbm1lbnQgZGVwZW5kZW5jeQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9rZWQgYnVzaW5lc3MgaW50ZXJmYWNlID0gIiArCkBAIC00NywxMCArNDcsMTAgQEAKICAgICAgICAgLy8gbG9vayB1cCBlamItcmVmIGRlZmluZWQgd2l0aGluIGRlZmF1bHQgaW50ZXJjZXB0b3IgaW4gZWpiLWphci54bWwKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgU2xlc3MzIHNsZXNzMyA9IChTbGVzczMpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2xlc3MzIik7Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIENvbW1vbi5hcm91bmRJbnZva2VDYWxsZWQoY3R4LCAiQSIpOwogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKICAgICB9Ci0gICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvSW50ZXJjZXB0b3JCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9JbnRlcmNlcHRvckIuamF2YQppbmRleCA0OTdiYjliLi42ODY5ZmI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9JbnRlcmNlcHRvckIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9JbnRlcmNlcHRvckIuamF2YQpAQCAtMzMsOSArMzMsOSBAQAogCiAgICAgLy8gYXJvdW5kLWludm9rZSBkZWNsYXJlZCBpbiBlamItamFyLnhtbAogICAgIE9iamVjdCBhcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgY3R4KQotCSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgQ29tbW9uLmFyb3VuZEludm9rZUNhbGxlZChjdHgsICJCIik7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwogICAgIH0KLSAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9JbnRlcmNlcHRvckMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL0ludGVyY2VwdG9yQy5qYXZhCmluZGV4IDIwZjZmYjYuLjk1NTZkZGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL0ludGVyY2VwdG9yQy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL0ludGVyY2VwdG9yQy5qYXZhCkBAIC0zMyw5ICszMyw5IEBACiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgT2JqZWN0IGFyb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjdHgpCi0JICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBDb21tb24uYXJvdW5kSW52b2tlQ2FsbGVkKGN0eCwgIkMiKTsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CiAgICAgfQotICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL0ludGVyY2VwdG9yRC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvSW50ZXJjZXB0b3JELmphdmEKaW5kZXggN2MxNjY5Yi4uZDZjMWVmNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvSW50ZXJjZXB0b3JELmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvSW50ZXJjZXB0b3JELmphdmEKQEAgLTMzLDkgKzMzLDkgQEAKIAogICAgIEBBcm91bmRJbnZva2UKICAgICBPYmplY3QgYXJvdW5kSW52b2tlKEludm9jYXRpb25Db250ZXh0IGN0eCkKLQkgICAgICAgIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIENvbW1vbi5hcm91bmRJbnZva2VDYWxsZWQoY3R4LCAiRCIpOwogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKICAgICB9Ci0gICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvSW50ZXJjZXB0b3JFLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9JbnRlcmNlcHRvckUuamF2YQppbmRleCAxMzZkMmNmLi44OWQ2NDRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9JbnRlcmNlcHRvckUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9JbnRlcmNlcHRvckUuamF2YQpAQCAtMzMsOSArMzMsOSBAQAogCiAgICAgQEFyb3VuZEludm9rZQogICAgIE9iamVjdCBhcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgY3R4KQotCSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgQ29tbW9uLmFyb3VuZEludm9rZUNhbGxlZChjdHgsICJFIik7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwogICAgIH0KLSAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9JbnRlcmNlcHRvckYuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL0ludGVyY2VwdG9yRi5qYXZhCmluZGV4IDc3MmZiNDAuLmExNjYyZjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL0ludGVyY2VwdG9yRi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL0ludGVyY2VwdG9yRi5qYXZhCkBAIC0zMyw5ICszMyw5IEBACiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgT2JqZWN0IGFyb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjdHgpCi0JICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBDb21tb24uYXJvdW5kSW52b2tlQ2FsbGVkKGN0eCwgIkYiKTsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CiAgICAgfQotICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL0ludGVyY2VwdG9yRy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvSW50ZXJjZXB0b3JHLmphdmEKaW5kZXggZWI0MDBiMi4uMzg5MzRhYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvSW50ZXJjZXB0b3JHLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvSW50ZXJjZXB0b3JHLmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKIAogICAgIEBBcm91bmRJbnZva2UKICAgICBPYmplY3QgYXJvdW5kSW52b2tlKEludm9jYXRpb25Db250ZXh0IGN0eCkKLQkgICAgICAgIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIENvbW1vbi5hcm91bmRJbnZva2VDYWxsZWQoY3R4LCAiRyIpOwogICAgICAgICBPYmplY3QgaW5zdGFuY2UgPSBjdHguZ2V0VGFyZ2V0KCk7CiAgICAgICAgIGlmKCBpbnN0YW5jZSBpbnN0YW5jZW9mIFNsZXNzRUpCNiApIHsKQEAgLTQxLDUgKzQxLDUgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKICAgICB9Ci0gICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2Z1bC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2Z1bC5qYXZhCmluZGV4IDQyYjNlMWEuLmI5NGJlOGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NmdWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TZnVsLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5pbnRlcmNlcHRvcnMuYmluZGluZ3M7CiAKIGltcG9ydCBqYWthcnRhLmVqYi5SZW1vdGU7Ci0JCisKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgU2Z1bAogewpAQCAtMzgsNyArMzgsNyBAQAogCiAgICAgcHVibGljIHZvaWQgY2RlZigpOwogCi0gICAgcHVibGljIHZvaWQgYWJjZGVmKCk7ICAgIAorICAgIHB1YmxpYyB2b2lkIGFiY2RlZigpOwogCiAgICAgcHVibGljIHZvaWQgYWNiZGZlKCk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NmdWwyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TZnVsMi5qYXZhCmluZGV4IDNhMTI2ODQuLmU0NzFhNTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NmdWwyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2Z1bDIuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmludGVyY2VwdG9ycy5iaW5kaW5nczsKIAogaW1wb3J0IGpha2FydGEuZWpiLlJlbW90ZTsKLQkKKwogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBTZnVsMgogewpAQCAtMjksNiArMjksNiBAQAogICAgIHB1YmxpYyB2b2lkIGVmKCk7CiAKICAgICBwdWJsaWMgdm9pZCBjZGVmKCk7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBub3RoaW5nKCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TZnVsRUpCLmphdmEKaW5kZXggYTU2NWVkOC4uNWQ4OWQwNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2Z1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NmdWxFSkIuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogCiAgICAgQEV4Y2x1ZGVEZWZhdWx0SW50ZXJjZXB0b3JzCiAgICAgcHVibGljIHZvaWQgY2QoKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2Z1bEVKQjpjZCgpLiAgcG9zdENvbnN0cnVjdCA9ICIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTZnVsRUpCOmNkKCkuICBwb3N0Q29uc3RydWN0ID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0Q29uc3RydWN0Q2FsbGVkKTsKIAogICAgICAgICBpZiggIXBvc3RDb25zdHJ1Y3RDYWxsZWQgKSB7CkBAIC04MiwxNiArODIsMTYgQEAKICAgICBARXhjbHVkZURlZmF1bHRJbnRlcmNlcHRvcnMKICAgICBASW50ZXJjZXB0b3JzKHtJbnRlcmNlcHRvckUuY2xhc3MsIEludGVyY2VwdG9yRi5jbGFzc30pCiAgICAgcHVibGljIHZvaWQgY2RlZigpIHt9Ci0gICAgCisKICAgICBARXhjbHVkZURlZmF1bHRJbnRlcmNlcHRvcnMKICAgICBARXhjbHVkZUNsYXNzSW50ZXJjZXB0b3JzCiAgICAgcHVibGljIHZvaWQgbm90aGluZygpIHt9CiAKLSAgICBASW50ZXJjZXB0b3JzKHtJbnRlcmNlcHRvckUuY2xhc3MsIEludGVyY2VwdG9yRi5jbGFzc30pICAgIAorICAgIEBJbnRlcmNlcHRvcnMoe0ludGVyY2VwdG9yRS5jbGFzcywgSW50ZXJjZXB0b3JGLmNsYXNzfSkKICAgICBwdWJsaWMgdm9pZCBhYmNkZWYoKSB7fQogCiAgICAgLy8gdG90YWwgb3JkZXJpbmcgb3ZlcnJpZGRlbiBpbiBkZXBsb3ltZW50IGRlc2NyaXB0b3IKLSAgICBASW50ZXJjZXB0b3JzKHtJbnRlcmNlcHRvckUuY2xhc3MsIEludGVyY2VwdG9yRi5jbGFzc30pICAgIAorICAgIEBJbnRlcmNlcHRvcnMoe0ludGVyY2VwdG9yRS5jbGFzcywgSW50ZXJjZXB0b3JGLmNsYXNzfSkKICAgICBwdWJsaWMgdm9pZCBhY2JkZmUoKSB7fQogCiAgICAgLy8gZGVjbGFyZWQgaW4gZWpiLWphci54bWwKQEAgLTEwNiw1ICsxMDYsNSBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2Z1bEVKQjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NmdWxFSkIyLmphdmEKaW5kZXggZjVkMTllZC4uNDQ2NDkzZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2Z1bEVKQjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TZnVsRUpCMi5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogCiAgICAgcHVibGljIHZvaWQgY2QoKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2Z1bEVKQjpjZCgpLiAgYXJvdW5kSW52b2tlQ2FsbGVkID0gIiArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNmdWxFSkI6Y2QoKS4gIGFyb3VuZEludm9rZUNhbGxlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJvdW5kSW52b2tlQ2FsbGVkKTsKIAogICAgICAgICAvLyBhIGxpdHRsZSBleHRyYSBjaGVja2luZyB0byBtYWtlIHN1cmUgYXJvdW5kSW52b2tlIGlzIGludm9rZWQuLi4KQEAgLTUzLDEyICs1MywxMiBAQAogICAgIEBFeGNsdWRlQ2xhc3NJbnRlcmNlcHRvcnMKICAgICBwdWJsaWMgdm9pZCBhYmVmKGludCBpKSB7fQogCi0gICAgLy8gQEV4Y2x1ZGVEZWZhdWx0SW50ZXJjZXB0b3JzIGlzIGEgbm8tb3AgaGVyZSBzaW5jZSBpdCAKKyAgICAvLyBARXhjbHVkZURlZmF1bHRJbnRlcmNlcHRvcnMgaXMgYSBuby1vcCBoZXJlIHNpbmNlIGl0CiAgICAgLy8gd2FzIGFscmVhZHkgZXhjbHVkZWQgYXQgY2xhc3MtbGV2ZWwKICAgICBARXhjbHVkZURlZmF1bHRJbnRlcmNlcHRvcnMKICAgICBASW50ZXJjZXB0b3JzKHtJbnRlcmNlcHRvckUuY2xhc3MsIEludGVyY2VwdG9yRi5jbGFzc30pCiAgICAgcHVibGljIHZvaWQgY2RlZigpIHt9Ci0gICAgCisKICAgICBARXhjbHVkZUNsYXNzSW50ZXJjZXB0b3JzCiAgICAgcHVibGljIHZvaWQgbm90aGluZygpIHt9CiAKQEAgLTc0LDUgKzc0LDUgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NsZXNzMy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3MzLmphdmEKaW5kZXggODYyMmVlMy4uYWMxZTkzZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3MzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3MzLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5pbnRlcmNlcHRvcnMuYmluZGluZ3M7CiAKIGltcG9ydCBqYWthcnRhLmVqYi5SZW1vdGU7Ci0JCisKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgU2xlc3MzCiB7CkBAIC0zNSw3ICszNSw3IEBACiAKICAgICBwdWJsaWMgdm9pZCBkY2VmKCk7CiAKLSAgICBwdWJsaWMgdm9pZCBkY2JhZWYoKTsgICAgCisgICAgcHVibGljIHZvaWQgZGNiYWVmKCk7CiAKICAgICBwdWJsaWMgdm9pZCBhYmNkZWYoKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3M0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TbGVzczQuamF2YQppbmRleCBjOGUzOTExLi5hYmQ5ODNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TbGVzczQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TbGVzczQuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmludGVyY2VwdG9ycy5iaW5kaW5nczsKIAogaW1wb3J0IGpha2FydGEuZWpiLlJlbW90ZTsKLQkKKwogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBTbGVzczQKIHsKQEAgLTI5LDYgKzI5LDYgQEAKICAgICBwdWJsaWMgdm9pZCBlZigpOwogCiAgICAgcHVibGljIHZvaWQgY2JkZWYoKTsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIG5vdGhpbmcoKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NsZXNzNS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3M1LmphdmEKaW5kZXggN2QyNGNlMy4uY2M2YjNlNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3M1LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3M1LmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5pbnRlcmNlcHRvcnMuYmluZGluZ3M7CiAKIGltcG9ydCBqYWthcnRhLmVqYi5SZW1vdGU7Ci0JCisKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgU2xlc3M1CiB7CkBAIC0yNSw2ICsyNSw2IEBACiAgICAgcHVibGljIHZvaWQgYWJkYygpOwogCiAgICAgcHVibGljIHZvaWQgZGNmZSgpOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgbm90aGluZygpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3M2LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TbGVzczYuamF2YQppbmRleCA4OTkzMjc2Li43MzkwMTI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TbGVzczYuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TbGVzczYuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmludGVyY2VwdG9ycy5iaW5kaW5nczsKIAogaW1wb3J0IGpha2FydGEuZWpiLlJlbW90ZTsKLQkKKwogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBTbGVzczYKIHsKQEAgLTI5LDcgKzI5LDcgQEAKICAgICBwdWJsaWMgdm9pZCBiZygpOwogCiAgICAgcHVibGljIHZvaWQgYmcoaW50IHBhcmFtKTsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNnKCk7CiAKICAgICBwdWJsaWMgdm9pZCBjZyhpbnQgcGFyYW0pOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3NFSkIzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TbGVzc0VKQjMuamF2YQppbmRleCA0ODA1NjZmLi5mYTg5NDY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TbGVzc0VKQjMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TbGVzc0VKQjMuamF2YQpAQCAtNTAsMTYgKzUwLDE2IEBACiAgICAgQEV4Y2x1ZGVEZWZhdWx0SW50ZXJjZXB0b3JzCiAgICAgQEludGVyY2VwdG9ycyh7SW50ZXJjZXB0b3JFLmNsYXNzLCBJbnRlcmNlcHRvckYuY2xhc3N9KQogICAgIHB1YmxpYyB2b2lkIGRjZWYoKSB7fQotICAgIAorCiAgICAgQEV4Y2x1ZGVEZWZhdWx0SW50ZXJjZXB0b3JzCiAgICAgQEV4Y2x1ZGVDbGFzc0ludGVyY2VwdG9ycwogICAgIHB1YmxpYyB2b2lkIG5vdGhpbmcoKSB7fQogCi0gICAgQEludGVyY2VwdG9ycyh7SW50ZXJjZXB0b3JFLmNsYXNzLCBJbnRlcmNlcHRvckYuY2xhc3N9KSAgICAKKyAgICBASW50ZXJjZXB0b3JzKHtJbnRlcmNlcHRvckUuY2xhc3MsIEludGVyY2VwdG9yRi5jbGFzc30pCiAgICAgcHVibGljIHZvaWQgZGNiYWVmKCkge30KIAogICAgIC8vIHRvdGFsIG9yZGVyaW5nIG92ZXJyaWRkZW4gaW4gZGVwbG95bWVudCBkZXNjcmlwdG9yCi0gICAgQEludGVyY2VwdG9ycyh7SW50ZXJjZXB0b3JFLmNsYXNzLCBJbnRlcmNlcHRvckYuY2xhc3N9KSAgICAKKyAgICBASW50ZXJjZXB0b3JzKHtJbnRlcmNlcHRvckUuY2xhc3MsIEludGVyY2VwdG9yRi5jbGFzc30pCiAgICAgcHVibGljIHZvaWQgYWJjZGVmKCkge30KIAogICAgIC8vIGJpbmRpbmcgZGVzY3JpYmVkIGluIGRlcGxveW1lbnQgZGVzY3JpcHRvcgpAQCAtNzEsNSArNzEsNSBAQAogICAgICAgICBDb21tb24uY2hlY2tSZXN1bHRzKGN0eCk7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3NFSkI0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TbGVzc0VKQjQuamF2YQppbmRleCA3MjRjY2Y2Li45ODlhNGZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TbGVzc0VKQjQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TbGVzc0VKQjQuamF2YQpAQCAtMzUsNyArMzUsNyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKIAogICAgIHB1YmxpYyB2b2lkIGNiZCgpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjQ6Y2JkKCkuICBhcm91bmRJbnZva2VDYWxsZWQgPSAiICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI0OmNiZCgpLiAgYXJvdW5kSW52b2tlQ2FsbGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcm91bmRJbnZva2VDYWxsZWQpOwogCiAgICAgICAgIC8vIGEgbGl0dGxlIGV4dHJhIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSBhcm91bmRJbnZva2UgaXMgaW52b2tlZC4uLgpAQCAtNTYsMTIgKzU2LDEyIEBACiAgICAgICAgICAgICAgICAgICAgSW50ZXJjZXB0b3JFLmNsYXNzLCBJbnRlcmNlcHRvckYuY2xhc3N9KQogICAgIHB1YmxpYyB2b2lkIGFiZWYoaW50IGkpIHt9CiAKLSAgICAvLyBARXhjbHVkZURlZmF1bHRJbnRlcmNlcHRvcnMgaXMgYSBuby1vcCBoZXJlIHNpbmNlIGl0IAorICAgIC8vIEBFeGNsdWRlRGVmYXVsdEludGVyY2VwdG9ycyBpcyBhIG5vLW9wIGhlcmUgc2luY2UgaXQKICAgICAvLyB3YXMgYWxyZWFkeSBleGNsdWRlZCBhdCBjbGFzcy1sZXZlbAogICAgIEBFeGNsdWRlRGVmYXVsdEludGVyY2VwdG9ycwogICAgIEBJbnRlcmNlcHRvcnMoe0ludGVyY2VwdG9yRS5jbGFzcywgSW50ZXJjZXB0b3JGLmNsYXNzfSkKICAgICBwdWJsaWMgdm9pZCBjYmRlZigpIHt9Ci0gICAgCisKICAgICBARXhjbHVkZUNsYXNzSW50ZXJjZXB0b3JzCiAgICAgcHVibGljIHZvaWQgbm90aGluZygpIHt9CiAKQEAgLTc3LDcgKzc3LDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KLSAgICAKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TbGVzc0VKQjUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NsZXNzRUpCNS5qYXZhCmluZGV4IDBhNTczZDAuLmM2MzI3ZjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NsZXNzRUpCNS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NsZXNzRUpCNS5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogCiAgICAgcHVibGljIHZvaWQgYWJkYygpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjU6YWJkYygpLiAgYXJvdW5kSW52b2tlQ2FsbGVkID0gIiArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNTphYmRjKCkuICBhcm91bmRJbnZva2VDYWxsZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyb3VuZEludm9rZUNhbGxlZCk7CiAKICAgICAgICAgLy8gYSBsaXR0bGUgZXh0cmEgY2hlY2tpbmcgdG8gbWFrZSBzdXJlIGFyb3VuZEludm9rZSBpcyBpbnZva2VkLi4uCkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9Ci0gICAgCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3NFSkI2LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TbGVzc0VKQjYuamF2YQppbmRleCBlZDkwNWY2Li4yOWY1MDFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TbGVzc0VKQjYuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TbGVzc0VKQjYuamF2YQpAQCAtMzUsMTAgKzM1LDEwIEBACiB7CiAgICAgYm9vbGVhbiBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKIAotICAgIAorCiAgICAgQEludGVyY2VwdG9ycyh7SW50ZXJjZXB0b3JBLmNsYXNzLCBJbnRlcmNlcHRvckcuY2xhc3N9KQogICAgIHB1YmxpYyB2b2lkIGFnKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjphZygpLiAgYXJvdW5kSW52b2tlQ2FsbGVkID0gIiArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjphZygpLiAgYXJvdW5kSW52b2tlQ2FsbGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcm91bmRJbnZva2VDYWxsZWQpOwogCiAgICAgICAgIGlmKCAhYXJvdW5kSW52b2tlQ2FsbGVkICkgewpAQCAtNTAsMTcgKzUwLDE3IEBACiAgICAgcHVibGljIHZvaWQgYWcoaW50IHBhcmFtMSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjphZyhpbnQgcGFyYW0pLiAgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJvdW5kSW52b2tlQ2FsbGVkID0gIiArIGFyb3VuZEludm9rZUNhbGxlZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBpZiggYXJvdW5kSW52b2tlQ2FsbGVkICkgewogICAgICAgICAgICAgYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJiZWFuIGNsYXNzIGFyb3VuZEludm9rZSB3YXMgaW5jb3JyZWN0bHkgY2FsbGVkIik7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBiZygpIChidXQgbm90IGJnKHBhcmFtKSkgbWFya2VkIHRocm91Z2ggZWpiLWphci54bWwgCisgICAgLy8gYmcoKSAoYnV0IG5vdCBiZyhwYXJhbSkpIG1hcmtlZCB0aHJvdWdoIGVqYi1qYXIueG1sCiAgICAgLy8gYXMgaGF2aW5nIGludGVyY2VwdG9ycyBCLEcKICAgICBwdWJsaWMgdm9pZCBiZygpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6YmcoKS4gIGFyb3VuZEludm9rZUNhbGxlZCA9ICIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6YmcoKS4gIGFyb3VuZEludm9rZUNhbGxlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJvdW5kSW52b2tlQ2FsbGVkKTsKIAogICAgICAgICBpZiggIWFyb3VuZEludm9rZUNhbGxlZCApIHsKQEAgLTcyLDcgKzcyLDcgQEAKICAgICBwdWJsaWMgdm9pZCBiZyhpbnQgcGFyYW0xKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI2OmJnKGludCBwYXJhbSkuICAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcm91bmRJbnZva2VDYWxsZWQgPSAiICsgYXJvdW5kSW52b2tlQ2FsbGVkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIGlmKCBhcm91bmRJbnZva2VDYWxsZWQgKSB7CiAgICAgICAgICAgICBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImJlYW4gY2xhc3MgYXJvdW5kSW52b2tlIHdhcyBpbmNvcnJlY3RseSBjYWxsZWQiKTsKQEAgLTgyLDcgKzgyLDcgQEAKICAgICAvLyBvdmVybG9hZGVkIHZlcnNpb24gb2YgaW50ZXJjZXB0b3ItYmluZGluZyB1c2VkIGluIGVqYi1qYXIueG1sIHRvCiAgICAgLy8gbWFyayBhbGwgbWV0aG9kcyB3aXRoIG5hbWUgY2cgYXMgaGF2aW5nIGludGVyY2VwdG9ycyBDLEcKICAgICBwdWJsaWMgdm9pZCBjZygpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6Y2coKS4gIGFyb3VuZEludm9rZUNhbGxlZCA9ICIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6Y2coKS4gIGFyb3VuZEludm9rZUNhbGxlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJvdW5kSW52b2tlQ2FsbGVkKTsKIAogICAgICAgICBpZiggIWFyb3VuZEludm9rZUNhbGxlZCApIHsKQEAgLTkyLDcgKzkyLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBjZyhpbnQgcGFyYW0xKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI2OmNnKGludCkuICBhcm91bmRJbnZva2VDYWxsZWQgPSAiICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI2OmNnKGludCkuICBhcm91bmRJbnZva2VDYWxsZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyb3VuZEludm9rZUNhbGxlZCk7CiAKICAgICAgICAgaWYoICFhcm91bmRJbnZva2VDYWxsZWQgKSB7CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBjZyhTdHJpbmcgcGFyYW0xLCBkb3VibGUgcGFyYW0yKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI2OmNnKFN0cmluZywgZG91YmxlKS4gIGFyb3VuZEludm9rZUNhbGxlZCA9ICIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6Y2coU3RyaW5nLCBkb3VibGUpLiAgYXJvdW5kSW52b2tlQ2FsbGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcm91bmRJbnZva2VDYWxsZWQpOwogCiAgICAgICAgIGlmKCAhYXJvdW5kSW52b2tlQ2FsbGVkICkgewpAQCAtMTEyLDExICsxMTIsMTEgQEAKICAgICB9CiAKIAotICAgIC8vIEtpbmQgb2YgbGlrZSBhZygpLCBpbiB0aGF0IGRnKCkgaXMgb3ZlcmxvYWRlZCwgYnV0IGl0J3MgdGhlIAorICAgIC8vIEtpbmQgb2YgbGlrZSBhZygpLCBpbiB0aGF0IGRnKCkgaXMgb3ZlcmxvYWRlZCwgYnV0IGl0J3MgdGhlCiAgICAgLy8gc2lnbmF0dXJlIHRoYXQgaGFzIGEgcGFyYW1ldGVyIHRoYXQgaXMgYXNzaWduZWQgaW50ZXJjZXB0b3JzIHVzaW5nCiAgICAgLy8gQEludGVyY2VwdG9yLgogICAgIHB1YmxpYyB2b2lkIGRnKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjpkZygpLiAgYXJvdW5kSW52b2tlQ2FsbGVkID0gIiArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjpkZygpLiAgYXJvdW5kSW52b2tlQ2FsbGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcm91bmRJbnZva2VDYWxsZWQpOwogCiAgICAgICAgIGlmKCBhcm91bmRJbnZva2VDYWxsZWQgKSB7CkBAIC0xMjksNyArMTI5LDcgQEAKICAgICBwdWJsaWMgdm9pZCBkZyhpbnQgcGFyYW0xKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI2OmRnKGludCBwYXJhbSkuICAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcm91bmRJbnZva2VDYWxsZWQgPSAiICsgYXJvdW5kSW52b2tlQ2FsbGVkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIGlmKCAhYXJvdW5kSW52b2tlQ2FsbGVkICkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiYmVhbiBjbGFzcyBhcm91bmRJbnZva2Ugbm90IGNhbGxlZCIpOwogICAgICAgICB9CkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICAvLyBMaWtlIGRnKCksIGV4Y2VwdCB0aGF0IGRnKGludCBwYXJhbSkgaXMgYXNzaWduZWQgaXRzIGludGVyY2VwdG9yCiAgICAgLy8gY2hhaW4gdGhyb3VnaCBlamItamFyLnhtbAogICAgIHB1YmxpYyB2b2lkIGVnKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjplZygpLiAgYXJvdW5kSW52b2tlQ2FsbGVkID0gIiArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjplZygpLiAgYXJvdW5kSW52b2tlQ2FsbGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcm91bmRJbnZva2VDYWxsZWQpOwogCiAgICAgICAgIGlmKCBhcm91bmRJbnZva2VDYWxsZWQgKSB7CkBAIC0xNTMsMTUgKzE1MywxNSBAQAogICAgIHB1YmxpYyB2b2lkIGVnKGludCBwYXJhbTEpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6ZWcoaW50IHBhcmFtKS4gICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyb3VuZEludm9rZUNhbGxlZCA9ICIgKyBhcm91bmRJbnZva2VDYWxsZWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgaWYoICFhcm91bmRJbnZva2VDYWxsZWQgKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJiZWFuIGNsYXNzIGFyb3VuZEludm9rZSBub3QgY2FsbGVkIik7CiAgICAgICAgIH0KICAgICAgICAgYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgfQogCi0gICAgCisKIAogfQotICAgIAorCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9idWlsZC54bWwKaW5kZXggNzdlYzNlOS4uYWRhMjVlOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9idWlsZC54bWwKQEAgLTMwLDcgKzMwLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJiaW5kaW5ncyIvPgotICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNlc3Npb24iLz4gCisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2Vzc2lvbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImluaGVyaXRlbmNlIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibWRiIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02MCw5ICs2MCw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamIzMC1pbnRlcmNlcHRvcnMgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWVqYjMwLWludGVyY2VwdG9ycyB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWYwZjRhZi4uM2ZkOThlMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTcgKzE1LDE3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzAtaW50ZXJjZXB0b3JzLXNlc3Npb24iLz4KIAotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogCi08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAogCi0JdmFsdWU9IkNsaWVudCIvPgorICAgIHZhbHVlPSJDbGllbnQiLz4KIAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiAKQEAgLTM1LDE1ICszNSwxNSBAQAogCiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIAotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogCi08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAogCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogCi08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvYnVpbGQueG1sCmluZGV4IDUzNjhlNjYuLjE3YmFhYWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvYnVpbGQueG1sCkBAIC01MCw3ICs1MCw3IEBACiAKICAgICA8L3RhcmdldD4KIAotIAorCiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KIApAQCAtNzQsMjEgKzc0LDIxIEBACiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KIAotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKIAogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkV4Y2VwdGlvbi5jbGFzcywqKi8qSW50ZXJjZXB0b3IqLmNsYXNzLCoqL0R1bW15Ki5jbGFzcywqKi9TbGVzcyouY2xhc3MsKiovU2Z1bCouY2xhc3MsIi8+CiAKLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAKICAgICAgICAgICAgICAgdmFsdWU9IioqLypFeGNlcHRpb24uY2xhc3MsKiovQ2xpZW50LmNsYXNzLCoqL1NmdWwuY2xhc3MiLz4KIAogICAgICAgICA8L2FudGNhbGw+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKLSAgICAKIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAKQEAgLTEwNCwxMyArMTA0LDEzIEBACiAKICAgICA8L3RhcmdldD4KIAotIAorCiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KIAotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA0MDM3ZjA1Li42NjBhN2RmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNTMsMTQgKzUzLDE0IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBTZnVsIHNmdWw5OwogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotCWRvVGVzdDEoKTsKLQlkb1Rlc3QyKCk7Ci0JZG9UZXN0MygpOwotCWRvVGVzdDQoKTsKLQlkb1Rlc3Q2KCk7Ci0JLyoqCWRvVGVzdDdfOCgpOyAqKi8gLy8gZW5hYmxlIHdoZW4gd2UgaGF2ZSBwYXNzaXZhdGlvbgotCWRvVGVzdDkoKTsKLQlkb1Rlc3QxMCgpOworICAgIGRvVGVzdDEoKTsKKyAgICBkb1Rlc3QyKCk7CisgICAgZG9UZXN0MygpOworICAgIGRvVGVzdDQoKTsKKyAgICBkb1Rlc3Q2KCk7CisgICAgLyoqICAgIGRvVGVzdDdfOCgpOyAqKi8gLy8gZW5hYmxlIHdoZW4gd2UgaGF2ZSBwYXNzaXZhdGlvbgorICAgIGRvVGVzdDkoKTsKKyAgICBkb1Rlc3QxMCgpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkb1Rlc3QxKCkgewpAQCAtNjgsOSArNjgsOSBAQAogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIHN0YXRlZnVsIik7CiAgICAgICAgICAgICBzZnVsLmhlbGxvKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKysrKysgSW50ZXJjZXB0b3JDYWxsQ291bnQ6ICIgKyBzZnVsLmdldENvdW50KCkpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIisrKysrIEludGVyY2VwdG9yQ2FsbENvdW50OiAiICsgc2Z1bC5nZXRDb3VudCgpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0MSIgLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpAQCAtODMsOCArODMsOCBAQAogICAgICAgICAgICAgc2Z1bC50aHJvd0FwcEV4Y2VwdGlvbigiWFlaIik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDIiICwgc3RhdC5GQUlMKTsKICAgICAgICAgfSBjYXRjaCAoQXBwRXhjZXB0aW9uIGFwcEV4KSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIEFwcEV4Y2VwdGlvbjogIiArIGFwcEV4KTsKLSAgICAgICAgCXN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0MiIgLCBzdGF0LlBBU1MpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCBBcHBFeGNlcHRpb246ICIgKyBhcHBFeCk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDIiICwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0MiIgLCBzdGF0LkZBSUwpOwpAQCAtOTQsMTAgKzk0LDEwIEBACiAgICAgcHJpdmF0ZSB2b2lkIGRvVGVzdDMoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gc2Z1bC5jb21wdXRlTWlkKDQsIDEwKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJbVGVzdDNdOiBHb3Q6ICIgKyByZXN1bHQpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltUZXN0M106IEdvdDogIiArIHJlc3VsdCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDMiICwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoU3dhcEFyZ3VtZW50c0V4Y2VwdGlvbiBzd2FwRXgpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgdW5leHBlY3RlZCBFeGNlcHRpb246ICIgKyBzd2FwRXgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCB1bmV4cGVjdGVkIEV4Y2VwdGlvbjogIiArIHN3YXBFeCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDMiICwgc3RhdC5GQUlMKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTEwOCwxMSArMTA4LDExIEBACiAgICAgcHJpdmF0ZSB2b2lkIGRvVGVzdDQoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gc2Z1bC5jb21wdXRlTWlkKDIzLCAxMCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1Rlc3Q0XTogR290OiAiICsgcmVzdWx0Ci0JCQkgICAgKyAiIElOU1RFQUQgb2YgU3dhcEFyZ3VtZW50c0V4Y2VwdGlvbiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltUZXN0NF06IEdvdDogIiArIHJlc3VsdAorICAgICAgICAgICAgICAgICsgIiBJTlNURUFEIG9mIFN3YXBBcmd1bWVudHNFeGNlcHRpb24iKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0NCIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9IGNhdGNoIChTd2FwQXJndW1lbnRzRXhjZXB0aW9uIHN3YXBFeCkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCBFeGNlcHRpb246ICIgKyBzd2FwRXgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCBFeGNlcHRpb246ICIgKyBzd2FwRXgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3Q0IiAsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICAgICAgICAgIHNmdWwuZWF0RXhjZXB0aW9uKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDYiICwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCB1bmV4cGVjdGVkIEV4Y2VwdGlvbjogIiArIGUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCB1bmV4cGVjdGVkIEV4Y2VwdGlvbjogIiArIGUpOwogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0NiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9CkBAIC0xMzMsMzAgKzEzMywzMCBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIGRvVGVzdDdfOCgpIHsKICAgICAgICAgdHJ5IHsKLQkgICAgaW50IHN6ID0gMjA7CisgICAgICAgIGludCBzeiA9IDIwOwogICAgICAgICBDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBzZnVsLnJlc2V0TGlmZWN5Y2xlQ2FsbGJhY2tDb3VudGVycygpOwotCSAgICBTZnVsW10gc2Z1bHMgPSBuZXcgU2Z1bFtzel07Ci0JICAgIGZvciAoaW50IGk9MDsgaTxzejsgaSsrKSB7Ci0gICAgCQlzZnVsc1tpXSA9IChTZnVsKSBjdHgubG9va3VwKCJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmludGVyY2VwdG9ycy5zZXNzaW9uLlNmdWwiKTsKLSAgICAJCWludCBwcmV2SW5kZXggPSAoaSA9PTApID8gMCA6IGktMTsKLSAgICAJCVN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBzZnVsWyIraSsiXTogIiArIHNmdWxzW2ldICsgIiA9PT4gIgotICAgIAkJICAgICAgICArIHNmdWxzW3ByZXZJbmRleF0uZXF1YWxzKHNmdWxzW2ldKSk7Ci0JCSAgICBzZnVsc1tpXS5zZXRJRChpKTsKKyAgICAgICAgc2Z1bC5yZXNldExpZmVjeWNsZUNhbGxiYWNrQ291bnRlcnMoKTsKKyAgICAgICAgU2Z1bFtdIHNmdWxzID0gbmV3IFNmdWxbc3pdOworICAgICAgICBmb3IgKGludCBpPTA7IGk8c3o7IGkrKykgeworICAgICAgICAgICAgc2Z1bHNbaV0gPSAoU2Z1bCkgY3R4Lmxvb2t1cCgiY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5pbnRlcmNlcHRvcnMuc2Vzc2lvbi5TZnVsIik7CisgICAgICAgICAgICBpbnQgcHJldkluZGV4ID0gKGkgPT0wKSA/IDAgOiBpLTE7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgc2Z1bFsiK2krIl06ICIgKyBzZnVsc1tpXSArICIgPT0+ICIKKyAgICAgICAgICAgICAgICAgICAgKyBzZnVsc1twcmV2SW5kZXhdLmVxdWFscyhzZnVsc1tpXSkpOworICAgICAgICAgICAgc2Z1bHNbaV0uc2V0SUQoaSk7CiAgICAgICAgICAgICBzZnVsc1tpXS5nZXRDb3VudCgpOwotCSAgICB9Ci0JICAgIHNsZWVwRm9yKDEwKTsKLQkgICAgZm9yIChpbnQgaT0wOyBpPHN6OyBpKyspIHsKLQkgICAgICAgIHNmdWxzW2ldLmdldENvdW50KCk7Ci0JICAgIH0KLQkgICAgaW50IHBhc3NpdmF0aW9uQ291bnQgPSBzZnVsLmdldFByZVBhc3NpdmF0ZUNhbGxiYWNrQ291bnQoKTsKLQkgICAgaW50IGFjdGl2YXRpb25Db3VudCA9IHNmdWwuZ2V0UG9zdEFjdGl2YXRlQ2FsbGJhY2tDb3VudCgpOworICAgICAgICB9CisgICAgICAgIHNsZWVwRm9yKDEwKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPHN6OyBpKyspIHsKKyAgICAgICAgICAgIHNmdWxzW2ldLmdldENvdW50KCk7CisgICAgICAgIH0KKyAgICAgICAgaW50IHBhc3NpdmF0aW9uQ291bnQgPSBzZnVsLmdldFByZVBhc3NpdmF0ZUNhbGxiYWNrQ291bnQoKTsKKyAgICAgICAgaW50IGFjdGl2YXRpb25Db3VudCA9IHNmdWwuZ2V0UG9zdEFjdGl2YXRlQ2FsbGJhY2tDb3VudCgpOwogCiAgICAgICAgIGJvb2xlYW4gc3RhdHVzID0gKHBhc3NpdmF0aW9uQ291bnQgPiAwKSAmJiAoYWN0aXZhdGlvbkNvdW50PiAwKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwYXNzaXZhdGlvbjogIiArIHBhc3NpdmF0aW9uQ291bnQgKyAiOyAiCi0JCSAgICArICJhY3RpdmF0aW9uOiAiICsgYWN0aXZhdGlvbkNvdW50KTsKKyAgICAgICAgICAgICsgImFjdGl2YXRpb246ICIgKyBhY3RpdmF0aW9uQ291bnQpOwogICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDciICwKLQkJICAgIChzdGF0dXMgPT0gdHJ1ZSkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOworICAgICAgICAgICAgKHN0YXR1cyA9PSB0cnVlKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CiAKICAgICAgICAgYm9vbGVhbiBzdGF0ZVJlc3RvcmVkID0gdHJ1ZTsKICAgICAgICAgZm9yIChpbnQgaT0wOyBpPHN6OyBpKyspIHsKQEAgLTE3NSw0MCArMTc1LDQwIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0OSgpIHsKLQkJdHJ5IHsKLQkJCXNmdWwuaXNJbnRlcmNlcHRvckNhbGxDb3VuT0soKTsKLQkJCXNmdWwuaXNJbnRlcmNlcHRvckNhbGxDb3VuT0soKTsKLQkJCXNmdWwuaXNJbnRlcmNlcHRvckNhbGxDb3VuT0soKTsKLQkJCXNmdWwuaXNJbnRlcmNlcHRvckNhbGxDb3VuT0soKTsKLQkJCVN0cmluZyByZXN1bHRTdHIgPSBzZnVsLmlzSW50ZXJjZXB0b3JDYWxsQ291bk9LKCk7Ci0JCQlib29sZWFuIHJlc3VsdCA9ICJ0cnVlIHRydWUgdHJ1ZSB0cnVlIi5lcXVhbHMocmVzdWx0U3RyKTsKLQkJCXN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0OSAiICArIHJlc3VsdFN0ciAsCi0JCSAgICAgICAgICAgICAgICAocmVzdWx0KSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3Q5IiAsIHN0YXQuRkFJTCk7Ci0JCX0KLQl9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzZnVsLmlzSW50ZXJjZXB0b3JDYWxsQ291bk9LKCk7CisgICAgICAgICAgICBzZnVsLmlzSW50ZXJjZXB0b3JDYWxsQ291bk9LKCk7CisgICAgICAgICAgICBzZnVsLmlzSW50ZXJjZXB0b3JDYWxsQ291bk9LKCk7CisgICAgICAgICAgICBzZnVsLmlzSW50ZXJjZXB0b3JDYWxsQ291bk9LKCk7CisgICAgICAgICAgICBTdHJpbmcgcmVzdWx0U3RyID0gc2Z1bC5pc0ludGVyY2VwdG9yQ2FsbENvdW5PSygpOworICAgICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSAidHJ1ZSB0cnVlIHRydWUgdHJ1ZSIuZXF1YWxzKHJlc3VsdFN0cik7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDkgIiAgKyByZXN1bHRTdHIgLAorICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3VsdCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0OSIgLCBzdGF0LkZBSUwpOworICAgICAgICB9CisgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0MTAoKSB7Ci0JCXRyeSB7Ci0JCQlTdHJpbmcgcmVzdWx0U3RyID0gc2Z1bC5pc1Bvc3RDb25zdHJ1Y3RDYWxsQ291bk9LKCk7Ci0JCQlib29sZWFuIHJlc3VsdCA9ICJ0cnVlIHRydWUgdHJ1ZSB0cnVlIi5lcXVhbHMocmVzdWx0U3RyKTsKLQkJCXN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0MTAgIiAgKyByZXN1bHRTdHIgLAotCQkgICAgICAgICAgICAgICAgKHJlc3VsdCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCXN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0MTAiICwgc3RhdC5GQUlMKTsKLQkJfQotCX0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFN0cmluZyByZXN1bHRTdHIgPSBzZnVsLmlzUG9zdENvbnN0cnVjdENhbGxDb3VuT0soKTsKKyAgICAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gInRydWUgdHJ1ZSB0cnVlIHRydWUiLmVxdWFscyhyZXN1bHRTdHIpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3QxMCAiICArIHJlc3VsdFN0ciAsCisgICAgICAgICAgICAgICAgICAgICAgICAocmVzdWx0KSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3QxMCIgLCBzdGF0LkZBSUwpOworICAgICAgICB9CisgICAgfQogCiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHNsZWVwRm9yKGludCBzZWNvbmRzKSB7Ci0Jd2hpbGUgKHNlY29uZHMtLSA+IDApIHsKLQkgICAgdHJ5IHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIiICsgc2Vjb25kcyArICIgbGVmdC4uLiIpOwotCQlUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEwMDApOwotCSAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpbkV4KSB7Ci0JICAgIH0KLQl9CisgICAgd2hpbGUgKHNlY29uZHMtLSA+IDApIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiICsgc2Vjb25kcyArICIgbGVmdC4uLiIpOworICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEwMDApOworICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpbkV4KSB7CisgICAgICAgIH0KKyAgICB9CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCA5YmM4N2M3Li5jMGI3ZTdjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI0LDcgKzI0LDcgQEAKICAgICAgICAgPGVqYi1uYW1lPlNmdWxFSkI8L2VqYi1uYW1lPgogICAgICAgICA8YmVhbi1jYWNoZT4KICAgICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT40PC9tYXgtY2FjaGUtc2l6ZT4KLQkgICAgPHJlc2l6ZS1xdWFudGl0eT4yPC9yZXNpemUtcXVhbnRpdHk+CisgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MjwvcmVzaXplLXF1YW50aXR5PgogICAgICAgICA8L2JlYW4tY2FjaGU+CiAgICAgIDwvZWpiPgogICAgPC9lbnRlcnByaXNlLWJlYW5zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvQmFzZUludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9CYXNlSW50ZXJjZXB0b3IuamF2YQppbmRleCBjM2EwOGQ2Li5hZTA4OTY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9CYXNlSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9CYXNlSW50ZXJjZXB0b3IuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogaW1wb3J0IGpha2FydGEuZWpiLlBvc3RBY3RpdmF0ZTsKIAogcHVibGljIGNsYXNzIEJhc2VJbnRlcmNlcHRvcgotCWltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGUgeworICAgIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9JTlRFUkNFUFRPUl9OQU1FID0gIkJhc2VJbnRlcmNlcHRvciI7CiAKQEAgLTQxLDkgKzQxLDkgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGJhc2VQb3N0Q29uc3RydWN0KEludm9jYXRpb25Db250ZXh0IGN0eCkKLSAgICAJdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gewotCSAgICBwb3N0Q29uc3RydWN0TGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotCSAgICBwb3N0Q29uc3RydWN0TGlzdC5hZGQoQkFTRV9JTlRFUkNFUFRPUl9OQU1FKTsKKyAgICAgICAgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24geworICAgICAgICBwb3N0Q29uc3RydWN0TGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworICAgICAgICBwb3N0Q29uc3RydWN0TGlzdC5hZGQoQkFTRV9JTlRFUkNFUFRPUl9OQU1FKTsKICAgICAgICAgY3R4LmdldENvbnRleHREYXRhKCkucHV0KGdldE5hbWUoKSwgdGhpcyk7CiAgICAgICAgIGJhc2VQQ0NvdW50Kys7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR0dHRzogQFBvc3RDb25zdHJ1Y3QgZm9yOiAiICsgdGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSk7CkBAIC01OSwyNCArNTksMjQgQEAKIAogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IGJhc2VBcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgY3R4KQotICAgCQl0aHJvd3MgRXhjZXB0aW9uCisgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0JICAgIGFyb3VuZEludm9rZUxpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLQkgICAgYXJvdW5kSW52b2tlTGlzdC5hZGQoQkFTRV9JTlRFUkNFUFRPUl9OQU1FKTsKLQkJY3R4LmdldENvbnRleHREYXRhKCkucHV0KGdldE5hbWUoKSwgdGhpcyk7Ci0JCWJhc2VBSUNvdW50Kys7Ci0gICAgCXJldHVybiBjdHgucHJvY2VlZCgpOworICAgICAgICBhcm91bmRJbnZva2VMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAgICAgIGFyb3VuZEludm9rZUxpc3QuYWRkKEJBU0VfSU5URVJDRVBUT1JfTkFNRSk7CisgICAgICAgIGN0eC5nZXRDb250ZXh0RGF0YSgpLnB1dChnZXROYW1lKCksIHRoaXMpOworICAgICAgICBiYXNlQUlDb3VudCsrOworICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKICAgICB9CiAKICAgICBAUHJlUGFzc2l2YXRlCiAgICAgcHVibGljIHZvaWQgcHJlUGFzc2l2YXRlKEludm9jYXRpb25Db250ZXh0IGN0eCkgewotCXByZVBhc3NpdmF0ZUNvdW50Kys7Ci0JfQorICAgIHByZVBhc3NpdmF0ZUNvdW50Kys7CisgICAgfQogCiAgICAgQFBvc3RBY3RpdmF0ZQogICAgIHB1YmxpYyB2b2lkIHBvc3RBY3RpdmF0ZShJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHsKLQlwb3N0QWN0aXZhdGVDb3VudCsrOwotCX0KKyAgICBwb3N0QWN0aXZhdGVDb3VudCsrOworICAgIH0KIAogCiAgICAgU3RyaW5nIGdldE5hbWUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9CYXNlTGV2ZWwySW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL0Jhc2VMZXZlbDJJbnRlcmNlcHRvci5qYXZhCmluZGV4IGViYTMxZjMuLjlhOWI3ZGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL0Jhc2VMZXZlbDJJbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL0Jhc2VMZXZlbDJJbnRlcmNlcHRvci5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByb3RlY3RlZCB2b2lkIG92ZXJyaWRhYmxlUG9zdENvbnN0cnVjdE1ldGhvZChJbnZvY2F0aW9uQ29udGV4dCBjdHgpCi0gICAgCXRocm93cyBSdW50aW1lRXhjZXB0aW9uIHsKKyAgICAgICAgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gewogICAgICAgICBwb3N0Q29uc3RydWN0TGlzdC5hZGQoTEVWRUwyX0lOVEVSQ0VQVE9SX05BTUUpOwogICAgICAgICBiYXNlTGV2ZWwyUENDb3VudCsrOwogICAgICAgICB0cnkgewpAQCAtNDQsOCArNDQsOCBAQAogCiAgICAgQEFyb3VuZEludm9rZQogICAgIHByb3RlY3RlZCBPYmplY3Qgb3ZlcnJpZGFibGVBcm91bmRJbnZva2VNZXRob2QoSW52b2NhdGlvbkNvbnRleHQgY3R4KQotICAgIAl0aHJvd3MgVGhyb3dhYmxlIHsKLQlhcm91bmRJbnZva2VMaXN0LmFkZChMRVZFTDJfSU5URVJDRVBUT1JfTkFNRSk7CisgICAgICAgIHRocm93cyBUaHJvd2FibGUgeworICAgIGFyb3VuZEludm9rZUxpc3QuYWRkKExFVkVMMl9JTlRFUkNFUFRPUl9OQU1FKTsKICAgICAgICAgYmFzZUxldmVsMkFJQ291bnQrKzsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvQmFzZUxpZmVjeWNsZUludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9CYXNlTGlmZWN5Y2xlSW50ZXJjZXB0b3IuamF2YQppbmRleCBmOGY3N2NmLi40OGVjMmYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9CYXNlTGlmZWN5Y2xlSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9CYXNlTGlmZWN5Y2xlSW50ZXJjZXB0b3IuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogCiBwdWJsaWMgY2xhc3MgQmFzZUxpZmVjeWNsZUludGVyY2VwdG9yCi0JaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CisgICAgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcm90ZWN0ZWQgaW50IGJhc2VQcmVQYXNzaXZhdGVDb3VudCA9IDA7CiAgICAgcHJvdGVjdGVkIGludCBiYXNlUG9zdEFjdGl2YXRlQ291bnQgPSAwOwpAQCAtMzYsMTIgKzM2LDEyIEBACiAKICAgICBAUHJlUGFzc2l2YXRlCiAgICAgcHJpdmF0ZSB2b2lkIHByZVBhc3NpdmF0ZShJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHsKLQliYXNlUHJlUGFzc2l2YXRlQ291bnQrKzsKKyAgICBiYXNlUHJlUGFzc2l2YXRlQ291bnQrKzsKICAgICB9CiAKICAgICBAUG9zdEFjdGl2YXRlCiAgICAgcHJpdmF0ZSB2b2lkIHBvc3RBY3RpdmF0ZShJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHsKLQliYXNlUG9zdEFjdGl2YXRlQ291bnQrKzsKKyAgICBiYXNlUG9zdEFjdGl2YXRlQ291bnQrKzsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL0Rpc3RpbmN0TWV0aG9kc0ludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9EaXN0aW5jdE1ldGhvZHNJbnRlcmNlcHRvci5qYXZhCmluZGV4IDY1NDVjNmEuLjU1YTQ5YjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL0Rpc3RpbmN0TWV0aG9kc0ludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvRGlzdGluY3RNZXRob2RzSW50ZXJjZXB0b3IuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgZGlzdGluY3RQb3N0Q29uc3RydWN0KEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gewotCXBvc3RDb25zdHJ1Y3RMaXN0LmFkZChESVNUSU5DVF9JTlRFUkNFUFRPUl9OQU1FKTsKKyAgICBwb3N0Q29uc3RydWN0TGlzdC5hZGQoRElTVElOQ1RfSU5URVJDRVBUT1JfTkFNRSk7CiAgICAgICAgIGRpc3RpbmN0UENDb3VudCsrOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgY3R4LnByb2NlZWQoKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHJpdmF0ZSBPYmplY3QgZGlzdGluY3RNZXRob2RJbnRlcmNlcHRvcihJbnZvY2F0aW9uQ29udGV4dCBjdHgpCiAgICAgICAgICAgICB0aHJvd3MgVGhyb3dhYmxlIHsKLQlhcm91bmRJbnZva2VMaXN0LmFkZChESVNUSU5DVF9JTlRFUkNFUFRPUl9OQU1FKTsKKyAgICBhcm91bmRJbnZva2VMaXN0LmFkZChESVNUSU5DVF9JTlRFUkNFUFRPUl9OQU1FKTsKICAgICAgICAgZGlzdGluY3RBSUNvdW50Kys7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwogICAgIH0KQEAgLTU0LDI5ICs1NCwyOSBAQAogICAgIHByb3RlY3RlZCBib29sZWFuIGlzQUlDb3VudE9LKCkgewogICAgICAgICByZXR1cm4gKGRpc3RpbmN0QUlDb3VudCA9PSBiYXNlQUlDb3VudCkKICAgICAgICAgICAgICAgICAmJiAoZGlzdGluY3RBSUNvdW50ID09IGJhc2VMZXZlbDJBSUNvdW50KQotCQkJJiYgY2hlY2tGb3JDb3JyZWN0U2VxdWVuY2UoYXJvdW5kSW52b2tlTGlzdCk7Ci0JfQorICAgICAgICAgICAgJiYgY2hlY2tGb3JDb3JyZWN0U2VxdWVuY2UoYXJvdW5kSW52b2tlTGlzdCk7CisgICAgfQogCiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNQb3N0Q29uc3RydWN0Q2FsbENvdW5PSygpIHsKICAgICAgICAgcmV0dXJuIChkaXN0aW5jdFBDQ291bnQgPT0gYmFzZVBDQ291bnQpCiAgICAgICAgICAgICAgICAgJiYgKGRpc3RpbmN0UENDb3VudCA9PSBiYXNlTGV2ZWwyUENDb3VudCkKLQkJCSYmIGNoZWNrRm9yQ29ycmVjdFNlcXVlbmNlKHBvc3RDb25zdHJ1Y3RMaXN0KTsKKyAgICAgICAgICAgICYmIGNoZWNrRm9yQ29ycmVjdFNlcXVlbmNlKHBvc3RDb25zdHJ1Y3RMaXN0KTsKICAgICB9CiAKICAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tGb3JDb3JyZWN0U2VxdWVuY2UoTGlzdDxTdHJpbmc+IGxpc3QpIHsKLQlib29sZWFuIHJlc3VsdCA9IGxpc3Quc2l6ZSgpID09IDM7Ci0JaWYgKHJlc3VsdCkgewotCSAgICBCQVNFX0lOVEVSQ0VQVE9SX05BTUUuZXF1YWxzKGxpc3QuZ2V0KDApKTsKLQkgICAgTEVWRUwyX0lOVEVSQ0VQVE9SX05BTUUuZXF1YWxzKGxpc3QuZ2V0KDEpKTsKLQkgICAgRElTVElOQ1RfSU5URVJDRVBUT1JfTkFNRS5lcXVhbHMobGlzdC5nZXQoMikpOwotCX0KKyAgICBib29sZWFuIHJlc3VsdCA9IGxpc3Quc2l6ZSgpID09IDM7CisgICAgaWYgKHJlc3VsdCkgeworICAgICAgICBCQVNFX0lOVEVSQ0VQVE9SX05BTUUuZXF1YWxzKGxpc3QuZ2V0KDApKTsKKyAgICAgICAgTEVWRUwyX0lOVEVSQ0VQVE9SX05BTUUuZXF1YWxzKGxpc3QuZ2V0KDEpKTsKKyAgICAgICAgRElTVElOQ1RfSU5URVJDRVBUT1JfTkFNRS5lcXVhbHMobGlzdC5nZXQoMikpOworICAgIH0KIAotCWZvcihTdHJpbmcgc3RyIDogbGlzdCkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqRElTVElOQ1RfSU5URVJDRVBUT1JfVEVTVCoqOiAiICsgc3RyKTsKLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCIqKkRJU1RJTkNUX0lOVEVSQ0VQVE9SX1RFU1QqKjogIiArIHJlc3VsdCk7CisgICAgZm9yKFN0cmluZyBzdHIgOiBsaXN0KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKipESVNUSU5DVF9JTlRFUkNFUFRPUl9URVNUKio6ICIgKyBzdHIpOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqRElTVElOQ1RfSU5URVJDRVBUT1JfVEVTVCoqOiAiICsgcmVzdWx0KTsKIAotCXJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBTdHJpbmcgZ2V0TmFtZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL0R1bW15LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9EdW1teS5qYXZhCmluZGV4IGQyNDY5MzIuLjg4ODQ0NTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL0R1bW15LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvRHVtbXkuamF2YQpAQCAtMjgsMTEgKzI4LDExIEBACiAKIAogCi0JcHVibGljIFN0cmluZyBpc0ludGVyY2VwdG9yQ2FsbENvdW5PSygpOworICAgIHB1YmxpYyBTdHJpbmcgaXNJbnRlcmNlcHRvckNhbGxDb3VuT0soKTsKIAogCiAKLQlwdWJsaWMgU3RyaW5nIGlzUG9zdENvbnN0cnVjdENhbGxDb3VuT0soKTsKKyAgICBwdWJsaWMgU3RyaW5nIGlzUG9zdENvbnN0cnVjdENhbGxDb3VuT0soKTsKIAogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9EdW1teUJhc2VFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL0R1bW15QmFzZUVKQi5qYXZhCmluZGV4IDUyNGUyN2EuLmI0NDdlMzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL0R1bW15QmFzZUVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL0R1bW15QmFzZUVKQi5qYXZhCkBAIC0zNCwyMiArMzQsMjIgQEAKICAgICBwcm90ZWN0ZWQgaW50IGR1bW15QmFzZUFJQ291bnQgPSAwOwogICAgIHByb3RlY3RlZCBpbnQgZHVtbXlCYXNlRUpCUG9zdENvbnN0cnVjdENvdW50ID0gMDsKIAotCUBBcm91bmRJbnZva2UKLQlwcml2YXRlIE9iamVjdCBkdW1teUJhc2VBcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgY3R4KQotCQl0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCWFyb3VuZEludm9rZUxpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLQkJCWFyb3VuZEludm9rZUxpc3QuYWRkKCJEdW1teUJhc2VFSkIiKTsKLQkJCWR1bW15QmFzZUFJQ291bnQrKzsKLQkJCXJldHVybiBjdHgucHJvY2VlZCgpOwotCX0KKyAgICBAQXJvdW5kSW52b2tlCisgICAgcHJpdmF0ZSBPYmplY3QgZHVtbXlCYXNlQXJvdW5kSW52b2tlKEludm9jYXRpb25Db250ZXh0IGN0eCkKKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICBhcm91bmRJbnZva2VMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAgICAgICAgICBhcm91bmRJbnZva2VMaXN0LmFkZCgiRHVtbXlCYXNlRUpCIik7CisgICAgICAgICAgICBkdW1teUJhc2VBSUNvdW50Kys7CisgICAgICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKKyAgICB9CiAKIAotCUBQb3N0Q29uc3RydWN0CisgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgZHVtbXlCYXNlUG9zdENvbnN0cnVjdCgpIHsKLQkJcG9zdENvbnN0cnVjdExpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLQkJcG9zdENvbnN0cnVjdExpc3QuYWRkKCJEdW1teUJhc2VFSkIiKTsKLQkJZHVtbXlCYXNlRUpCUG9zdENvbnN0cnVjdENvdW50Kys7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiR0dHRzogRHVtbXlMZXZlbDJFSkIucG9zdENvbnN0cnVjdCAiKTsKLQl9CisgICAgICAgIHBvc3RDb25zdHJ1Y3RMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAgICAgIHBvc3RDb25zdHJ1Y3RMaXN0LmFkZCgiRHVtbXlCYXNlRUpCIik7CisgICAgICAgIGR1bW15QmFzZUVKQlBvc3RDb25zdHJ1Y3RDb3VudCsrOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdHR0c6IER1bW15TGV2ZWwyRUpCLnBvc3RDb25zdHJ1Y3QgIik7CisgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9EdW1teUVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvRHVtbXlFSkIuamF2YQppbmRleCBmNmUyODA0Li5hZmI1OGYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9EdW1teUVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL0R1bW15RUpCLmphdmEKQEAgLTI0LDE0ICsyNCwxNCBAQAogaW1wb3J0IGpha2FydGEuYW5ub3RhdGlvbi5Qb3N0Q29uc3RydWN0OwogCiBASW50ZXJjZXB0b3JzKHsKLQljb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmludGVyY2VwdG9ycy5zZXNzaW9uLk92ZXJyaWRpbmdNZXRob2RzSW50ZXJjZXB0b3IuY2xhc3MsCi0JY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5pbnRlcmNlcHRvcnMuc2Vzc2lvbi5EaXN0aW5jdE1ldGhvZHNJbnRlcmNlcHRvci5jbGFzcworICAgIGNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaW50ZXJjZXB0b3JzLnNlc3Npb24uT3ZlcnJpZGluZ01ldGhvZHNJbnRlcmNlcHRvci5jbGFzcywKKyAgICBjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmludGVyY2VwdG9ycy5zZXNzaW9uLkRpc3RpbmN0TWV0aG9kc0ludGVyY2VwdG9yLmNsYXNzCiB9KQogCiBAU3RhdGVsZXNzCiBwdWJsaWMgY2xhc3MgRHVtbXlFSkIKLQlleHRlbmRzIER1bW15TGV2ZWwyRUpCCi0JaW1wbGVtZW50cyBEdW1teQorICAgIGV4dGVuZHMgRHVtbXlMZXZlbDJFSkIKKyAgICBpbXBsZW1lbnRzIER1bW15CiB7CiAgICAgaW50IGludGVyY2VwdG9ySWQ7CiAgICAgcHJpdmF0ZSBib29sZWFuIGNyZWF0ZUNhbGxlZCA9IGZhbHNlOwpAQCAtNDcsMTMgKzQ3LDEzIEBACiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcm90ZWN0ZWQgdm9pZCBvdmVycmlkYWJsZVBvc3RDb25zdHJ1Y3QoKQogICAgIHsKLQlwb3N0Q29uc3RydWN0TGlzdC5hZGQoIkR1bW15RUpCIik7CisgICAgcG9zdENvbnN0cnVjdExpc3QuYWRkKCJEdW1teUVKQiIpOwogICAgICAgICBjcmVhdGVDYWxsZWQgPSB0cnVlOwogICAgICAgICBkdW1teUVKQlBvc3RDb25zdHJ1Y3RDb3VudCsrOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZHVtbXkoKSB7Ci0JICAgIHJldHVybiAiRHVtbXkhISI7CisgICAgICAgIHJldHVybiAiRHVtbXkhISI7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0SW50ZXJjZXB0b3JJZChpbnQgdmFsKSB7CkBAIC02Niw2MyArNjYsNjMgQEAKIAogICAgIHB1YmxpYyBTdHJpbmcgaXNJbnRlcmNlcHRvckNhbGxDb3VuT0soKSB7CiAKLQkJYm9vbGVhbiBiZWFuQUlSZXN1bHQgPSAoYmVhbkFJQ291bnQgPT0gZHVtbXlCYXNlQUlDb3VudCkKLQkJCSYmIChiZWFuQUlDb3VudCA9PSBkdW1teUxldmVsMkFJQ291bnQpCi0JCQkmJiBjaGVja0Fyb3VuZEludm9rZVNlcXVlbmNlKCk7CisgICAgICAgIGJvb2xlYW4gYmVhbkFJUmVzdWx0ID0gKGJlYW5BSUNvdW50ID09IGR1bW15QmFzZUFJQ291bnQpCisgICAgICAgICAgICAmJiAoYmVhbkFJQ291bnQgPT0gZHVtbXlMZXZlbDJBSUNvdW50KQorICAgICAgICAgICAgJiYgY2hlY2tBcm91bmRJbnZva2VTZXF1ZW5jZSgpOwogCi0JCXJldHVybiAiIiArIGRpc3RpbmN0SW50ZXJjZXB0b3IuaXNBSUNvdW50T0soKQotCQkJKyAiICIgKyBvdmVycmlkaW5nSW50ZXJjZXB0b3IuaXNBSUNvdW50T0soKQotCQkJKyAiICIgKyBiZWFuQUlSZXN1bHQKLQkJCSsgIiAiICsgIGNoZWNrQXJvdW5kSW52b2tlU2VxdWVuY2UoKTsKLQl9CisgICAgICAgIHJldHVybiAiIiArIGRpc3RpbmN0SW50ZXJjZXB0b3IuaXNBSUNvdW50T0soKQorICAgICAgICAgICAgKyAiICIgKyBvdmVycmlkaW5nSW50ZXJjZXB0b3IuaXNBSUNvdW50T0soKQorICAgICAgICAgICAgKyAiICIgKyBiZWFuQUlSZXN1bHQKKyAgICAgICAgICAgICsgIiAiICsgIGNoZWNrQXJvdW5kSW52b2tlU2VxdWVuY2UoKTsKKyAgICB9CiAKIAogICAgIHB1YmxpYyBTdHJpbmcgaXNQb3N0Q29uc3RydWN0Q2FsbENvdW5PSygpIHsKIAotCQlib29sZWFuIGJlYW5QQ0NvdW50UmVzdWx0ID0gKGR1bW15RUpCUG9zdENvbnN0cnVjdENvdW50ID09IGR1bW15QmFzZUVKQlBvc3RDb25zdHJ1Y3RDb3VudCkKLQkJCSYmIChkdW1teUxldmVsMkVKQlBvc3RDb25zdHJ1Y3RDb3VudCA9PSAwKQotCQkJJiYgY2hlY2tQb3N0Q29uc3RydWN0U2VxdWVuY2UoKTsKKyAgICAgICAgYm9vbGVhbiBiZWFuUENDb3VudFJlc3VsdCA9IChkdW1teUVKQlBvc3RDb25zdHJ1Y3RDb3VudCA9PSBkdW1teUJhc2VFSkJQb3N0Q29uc3RydWN0Q291bnQpCisgICAgICAgICAgICAmJiAoZHVtbXlMZXZlbDJFSkJQb3N0Q29uc3RydWN0Q291bnQgPT0gMCkKKyAgICAgICAgICAgICYmIGNoZWNrUG9zdENvbnN0cnVjdFNlcXVlbmNlKCk7CiAKLQkJcmV0dXJuICIiICsgZGlzdGluY3RJbnRlcmNlcHRvci5pc1Bvc3RDb25zdHJ1Y3RDYWxsQ291bk9LKCkKLQkJCSsgIiAiICsgb3ZlcnJpZGluZ0ludGVyY2VwdG9yLmlzUG9zdENvbnN0cnVjdENhbGxDb3VuT0soKQotCQkJKyAiICIgKyBiZWFuUENDb3VudFJlc3VsdAotCQkJKyAiICIgKyAgY2hlY2tQb3N0Q29uc3RydWN0U2VxdWVuY2UoKTsKLQl9CisgICAgICAgIHJldHVybiAiIiArIGRpc3RpbmN0SW50ZXJjZXB0b3IuaXNQb3N0Q29uc3RydWN0Q2FsbENvdW5PSygpCisgICAgICAgICAgICArICIgIiArIG92ZXJyaWRpbmdJbnRlcmNlcHRvci5pc1Bvc3RDb25zdHJ1Y3RDYWxsQ291bk9LKCkKKyAgICAgICAgICAgICsgIiAiICsgYmVhblBDQ291bnRSZXN1bHQKKyAgICAgICAgICAgICsgIiAiICsgIGNoZWNrUG9zdENvbnN0cnVjdFNlcXVlbmNlKCk7CisgICAgfQogCiAgICAgQEFyb3VuZEludm9rZQogICAgIE9iamVjdCBteU93bkFyb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjdHgpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotCQlhcm91bmRJbnZva2VMaXN0LmFkZCgiRHVtbXlFSkIiKTsKLQkJaWYgKGRpc3RpbmN0SW50ZXJjZXB0b3IgPT0gbnVsbCkgewotCQkJIGRpc3RpbmN0SW50ZXJjZXB0b3IgPSAoRGlzdGluY3RNZXRob2RzSW50ZXJjZXB0b3IpCi0JCQkgCWN0eC5nZXRDb250ZXh0RGF0YSgpLmdldChkaXN0aW5jdEFJTmFtZSk7Ci0JCQkgb3ZlcnJpZGluZ0ludGVyY2VwdG9yID0gKE92ZXJyaWRpbmdNZXRob2RzSW50ZXJjZXB0b3IpCi0JCQkgCWN0eC5nZXRDb250ZXh0RGF0YSgpLmdldChvdmVycmlkaW5nQUlOYW1lKTsKLQkJfQorICAgICAgICBhcm91bmRJbnZva2VMaXN0LmFkZCgiRHVtbXlFSkIiKTsKKyAgICAgICAgaWYgKGRpc3RpbmN0SW50ZXJjZXB0b3IgPT0gbnVsbCkgeworICAgICAgICAgICAgIGRpc3RpbmN0SW50ZXJjZXB0b3IgPSAoRGlzdGluY3RNZXRob2RzSW50ZXJjZXB0b3IpCisgICAgICAgICAgICAgICAgIGN0eC5nZXRDb250ZXh0RGF0YSgpLmdldChkaXN0aW5jdEFJTmFtZSk7CisgICAgICAgICAgICAgb3ZlcnJpZGluZ0ludGVyY2VwdG9yID0gKE92ZXJyaWRpbmdNZXRob2RzSW50ZXJjZXB0b3IpCisgICAgICAgICAgICAgICAgIGN0eC5nZXRDb250ZXh0RGF0YSgpLmdldChvdmVycmlkaW5nQUlOYW1lKTsKKyAgICAgICAgfQogCi0JCWJlYW5BSUNvdW50Kys7CisgICAgICAgIGJlYW5BSUNvdW50Kys7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja1Bvc3RDb25zdHJ1Y3RTZXF1ZW5jZSgpIHsKLQlib29sZWFuIHJlc3VsdCA9IHBvc3RDb25zdHJ1Y3RMaXN0LnNpemUoKSA9PSAyOwotCWlmIChyZXN1bHQpIHsKLQkgICAgIkR1bW15QmFzZUVKQiIuZXF1YWxzKHBvc3RDb25zdHJ1Y3RMaXN0LmdldCgwKSk7Ci0JICAgICJEdW1teUVKQiIuZXF1YWxzKHBvc3RDb25zdHJ1Y3RMaXN0LmdldCgxKSk7Ci0JfQorICAgIGJvb2xlYW4gcmVzdWx0ID0gcG9zdENvbnN0cnVjdExpc3Quc2l6ZSgpID09IDI7CisgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAiRHVtbXlCYXNlRUpCIi5lcXVhbHMocG9zdENvbnN0cnVjdExpc3QuZ2V0KDApKTsKKyAgICAgICAgIkR1bW15RUpCIi5lcXVhbHMocG9zdENvbnN0cnVjdExpc3QuZ2V0KDEpKTsKKyAgICB9CiAKLQlyZXR1cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrQXJvdW5kSW52b2tlU2VxdWVuY2UoKSB7Ci0JYm9vbGVhbiByZXN1bHQgPSBhcm91bmRJbnZva2VMaXN0LnNpemUoKSA9PSAzOwotCWlmIChyZXN1bHQpIHsKLQkgICAgIkR1bW15QmFzZUVKQiIuZXF1YWxzKGFyb3VuZEludm9rZUxpc3QuZ2V0KDApKTsKLQkgICAgIkR1bW15TGV2ZWwyRUpCIi5lcXVhbHMoYXJvdW5kSW52b2tlTGlzdC5nZXQoMSkpOwotCSAgICAiRHVtbXlFSkIiLmVxdWFscyhhcm91bmRJbnZva2VMaXN0LmdldCgyKSk7Ci0JfQorICAgIGJvb2xlYW4gcmVzdWx0ID0gYXJvdW5kSW52b2tlTGlzdC5zaXplKCkgPT0gMzsKKyAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICJEdW1teUJhc2VFSkIiLmVxdWFscyhhcm91bmRJbnZva2VMaXN0LmdldCgwKSk7CisgICAgICAgICJEdW1teUxldmVsMkVKQiIuZXF1YWxzKGFyb3VuZEludm9rZUxpc3QuZ2V0KDEpKTsKKyAgICAgICAgIkR1bW15RUpCIi5lcXVhbHMoYXJvdW5kSW52b2tlTGlzdC5nZXQoMikpOworICAgIH0KIAotCXJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL0R1bW15TGV2ZWwyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9EdW1teUxldmVsMkVKQi5qYXZhCmluZGV4IDE5OWExMzIuLmE0ZmM2MjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL0R1bW15TGV2ZWwyRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvRHVtbXlMZXZlbDJFSkIuamF2YQpAQCAtMjUsMjQgKzI1LDI0IEBACiAKIAogcHVibGljIGNsYXNzIER1bW15TGV2ZWwyRUpCCi0JZXh0ZW5kcyBEdW1teUJhc2VFSkIKKyAgICBleHRlbmRzIER1bW15QmFzZUVKQgogewogICAgIHByb3RlY3RlZCBpbnQgZHVtbXlMZXZlbDJBSUNvdW50ID0gMDsKLQlwcm90ZWN0ZWQgaW50IGR1bW15TGV2ZWwyRUpCUG9zdENvbnN0cnVjdENvdW50ID0gMDsKKyAgICBwcm90ZWN0ZWQgaW50IGR1bW15TGV2ZWwyRUpCUG9zdENvbnN0cnVjdENvdW50ID0gMDsKIAogCi0JQFBvc3RDb25zdHJ1Y3QKKyAgICBAUG9zdENvbnN0cnVjdAogICAgIHByb3RlY3RlZCB2b2lkIG92ZXJyaWRhYmxlUG9zdENvbnN0cnVjdCgpIHsKLQkJcG9zdENvbnN0cnVjdExpc3QuYWRkKCJEdW1teUxldmVsMkVKQiIpOwotCQlkdW1teUxldmVsMkVKQlBvc3RDb25zdHJ1Y3RDb3VudCsrOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkdHR0c6IER1bW15TGV2ZWwyRUpCLnBvc3RDb25zdHJ1Y3QgIik7Ci0JfQorICAgICAgICBwb3N0Q29uc3RydWN0TGlzdC5hZGQoIkR1bW15TGV2ZWwyRUpCIik7CisgICAgICAgIGR1bW15TGV2ZWwyRUpCUG9zdENvbnN0cnVjdENvdW50Kys7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR0dHRzogRHVtbXlMZXZlbDJFSkIucG9zdENvbnN0cnVjdCAiKTsKKyAgICB9CiAKLQlAQXJvdW5kSW52b2tlCi0JcHJvdGVjdGVkIE9iamVjdCBvdmVycmlkYWJsZUFyb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjdHgpCi0JCXRocm93cyBFeGNlcHRpb24gewotCQkJYXJvdW5kSW52b2tlTGlzdC5hZGQoIkR1bW15TGV2ZWwyRUpCIik7Ci0JCQlkdW1teUxldmVsMkFJQ291bnQrKzsKLQkJCXJldHVybiBjdHgucHJvY2VlZCgpOwotCX0KKyAgICBAQXJvdW5kSW52b2tlCisgICAgcHJvdGVjdGVkIE9iamVjdCBvdmVycmlkYWJsZUFyb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjdHgpCisgICAgICAgIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgYXJvdW5kSW52b2tlTGlzdC5hZGQoIkR1bW15TGV2ZWwyRUpCIik7CisgICAgICAgICAgICBkdW1teUxldmVsMkFJQ291bnQrKzsKKyAgICAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL0xpZmVjeWNsZUNhbGxiYWNrSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL0xpZmVjeWNsZUNhbGxiYWNrSW50ZXJjZXB0b3IuamF2YQppbmRleCAwNDIxZWNlLi5mY2E5N2ZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9MaWZlY3ljbGVDYWxsYmFja0ludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvTGlmZWN5Y2xlQ2FsbGJhY2tJbnRlcmNlcHRvci5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgcG9zdEFjdGl2YXRlQ2FsbGJhY2tDb3VudCA9IDA7CiAKLSAgICAKKwogCiAgICAgcHJpdmF0ZSBpbnQgaW50ZXJjZXB0b3JJRDsKIApAQCAtNjAsNyArNjAsNyBAQAogCiAgICAgdm9pZCBwcmVQYXNzaXZhdGUoSW52b2NhdGlvbkNvbnRleHQgY3R4KSB7CiAKLQlwcmVQYXNzaXZhdGVDYWxsYmFja0NvdW50Kys7CisgICAgcHJlUGFzc2l2YXRlQ2FsbGJhY2tDb3VudCsrOwogCiAgICAgfQogCkBAIC03MCw3ICs3MCw3IEBACiAKICAgICBwcml2YXRlIHZvaWQgcG9zdEFjdGl2YXRlKEludm9jYXRpb25Db250ZXh0IGN0eCkgewogCi0JcG9zdEFjdGl2YXRlQ2FsbGJhY2tDb3VudCsrOworICAgIHBvc3RBY3RpdmF0ZUNhbGxiYWNrQ291bnQrKzsKIAogICAgIH0KIApAQCAtODAsNyArODAsNyBAQAogCiAgICAgT2JqZWN0IGFyb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjdHgpCiAKLQkgICAgICAgIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgaWYgKGN0eC5nZXRNZXRob2QoKS5nZXROYW1lKCkuZXF1YWxzKCJzZXRJRCIpKSB7CiAKQEAgLTEwNCw3ICsxMDQsNyBAQAogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHJlc2V0TGlmZWN5Y2xlQ2FsbGJhY2tDb3VudGVycygpIHsKIAotCXByZVBhc3NpdmF0ZUNhbGxiYWNrQ291bnQgPSBwb3N0QWN0aXZhdGVDYWxsYmFja0NvdW50ID0gMDsKKyAgICBwcmVQYXNzaXZhdGVDYWxsYmFja0NvdW50ID0gcG9zdEFjdGl2YXRlQ2FsbGJhY2tDb3VudCA9IDA7CiAKICAgICB9CiAKQEAgLTExMiw3ICsxMTIsNyBAQAogCiAgICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0UHJlUGFzc2l2YXRlQ2FsbGJhY2tDb3VudCgpIHsKIAotCXJldHVybiBwcmVQYXNzaXZhdGVDYWxsYmFja0NvdW50OworICAgIHJldHVybiBwcmVQYXNzaXZhdGVDYWxsYmFja0NvdW50OwogCiAgICAgfQogCkBAIC0xMjAsMTEgKzEyMCwxMSBAQAogCiAgICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0UG9zdEFjdGl2YXRlQ2FsbGJhY2tDb3VudCgpIHsKIAotCXJldHVybiBwb3N0QWN0aXZhdGVDYWxsYmFja0NvdW50OworICAgIHJldHVybiBwb3N0QWN0aXZhdGVDYWxsYmFja0NvdW50OwogCiAgICAgfQogCi0gICAgCisKIAogCiAKQEAgLTEzNiw3ICsxMzYsNyBAQAogCiAgICAgfQogCi0gICAgCisKIAogICAgIGludCBnZXRJbnRlcmNlcHRvcklEKCkgewogCkBAIC0xNDQsMTcgKzE0NCwxNyBAQAogCiAgICAgfQogCi0gICAgCisKIAogICAgIGJvb2xlYW4gY2hlY2tJbnRlcmNlcHRvcklEKGludCB2YWwpIHsKIAotICAgICAgICByZXR1cm4gKHZhbCA9PSBpbnRlcmNlcHRvcklEKSAmJiAKKyAgICAgICAgcmV0dXJuICh2YWwgPT0gaW50ZXJjZXB0b3JJRCkgJiYKIAogICAgICAgICAgICAgKGNvbXB1dGVkSW50ZXJjZXB0b3JJRCA9PSAyICogdmFsICsgMSk7CiAKICAgICB9CiAKLSAgIAorCiAKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvT3ZlcnJpZGluZ01ldGhvZHNJbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvT3ZlcnJpZGluZ01ldGhvZHNJbnRlcmNlcHRvci5qYXZhCmluZGV4IGY1ZjhiZjMuLjJkY2IxNjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL092ZXJyaWRpbmdNZXRob2RzSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9PdmVycmlkaW5nTWV0aG9kc0ludGVyY2VwdG9yLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIGltcG9ydCBqYWthcnRhLmFubm90YXRpb24uUG9zdENvbnN0cnVjdDsKIAogcHVibGljIGNsYXNzIE92ZXJyaWRpbmdNZXRob2RzSW50ZXJjZXB0b3IKLQlleHRlbmRzIEJhc2VMZXZlbDJJbnRlcmNlcHRvciB7CisgICAgZXh0ZW5kcyBCYXNlTGV2ZWwySW50ZXJjZXB0b3IgewogCiAgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1ZFUlJJRElOR19JTlRFUkNFUFRPUl9OQU1FID0gIk92ZXJyaWRpbmdJbnRlcmNlcHRvciI7CiAKQEAgLTM0LDcgKzM0LDcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJvdGVjdGVkIHZvaWQgb3ZlcnJpZGFibGVQb3N0Q29uc3RydWN0TWV0aG9kKEludm9jYXRpb25Db250ZXh0IGN0eCkKLSAgICAJdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24geworICAgICAgICB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiB7CiAgICAgICAgIHBvc3RDb25zdHJ1Y3RMaXN0LmFkZChPVkVSUklESU5HX0lOVEVSQ0VQVE9SX05BTUUpOwogICAgICAgICBwY0NvdW50Kys7CiAgICAgICAgIHRyeSB7CkBAIC00OSwzOCArNDksMzggQEAKIAogICAgIEBBcm91bmRJbnZva2UKICAgICBwcm90ZWN0ZWQgT2JqZWN0IG92ZXJyaWRhYmxlQXJvdW5kSW52b2tlTWV0aG9kKEludm9jYXRpb25Db250ZXh0IGN0eCkKLSAgICAJdGhyb3dzIFRocm93YWJsZQorICAgICAgICB0aHJvd3MgVGhyb3dhYmxlCiAgICAgewotCWFyb3VuZEludm9rZUxpc3QuYWRkKE9WRVJSSURJTkdfSU5URVJDRVBUT1JfTkFNRSk7CisgICAgYXJvdW5kSW52b2tlTGlzdC5hZGQoT1ZFUlJJRElOR19JTlRFUkNFUFRPUl9OQU1FKTsKICAgICAgICAgYWlDb3VudCsrOwogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKICAgICB9CiAKICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0FJQ291bnRPSygpIHsKLQkJcmV0dXJuICgwID09IGJhc2VMZXZlbDJBSUNvdW50KQotCQkJJiYgKGFpQ291bnQgPT0gYmFzZUFJQ291bnQpCi0JCQkmJiBjaGVja0ZvckNvcnJlY3RTZXF1ZW5jZShhcm91bmRJbnZva2VMaXN0KTsKLQl9CisgICAgICAgIHJldHVybiAoMCA9PSBiYXNlTGV2ZWwyQUlDb3VudCkKKyAgICAgICAgICAgICYmIChhaUNvdW50ID09IGJhc2VBSUNvdW50KQorICAgICAgICAgICAgJiYgY2hlY2tGb3JDb3JyZWN0U2VxdWVuY2UoYXJvdW5kSW52b2tlTGlzdCk7CisgICAgfQogCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNQb3N0Q29uc3RydWN0Q2FsbENvdW5PSygpIHsKLQkJcmV0dXJuIChwY0NvdW50ID09IGJhc2VQQ0NvdW50KQotCQkJJiYgKGJhc2VMZXZlbDJQQ0NvdW50ID09IDApCi0JCQkmJiBjaGVja0ZvckNvcnJlY3RTZXF1ZW5jZShwb3N0Q29uc3RydWN0TGlzdCk7Ci0JfQorICAgIHByb3RlY3RlZCBib29sZWFuIGlzUG9zdENvbnN0cnVjdENhbGxDb3VuT0soKSB7CisgICAgICAgIHJldHVybiAocGNDb3VudCA9PSBiYXNlUENDb3VudCkKKyAgICAgICAgICAgICYmIChiYXNlTGV2ZWwyUENDb3VudCA9PSAwKQorICAgICAgICAgICAgJiYgY2hlY2tGb3JDb3JyZWN0U2VxdWVuY2UocG9zdENvbnN0cnVjdExpc3QpOworICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja0ZvckNvcnJlY3RTZXF1ZW5jZShMaXN0PFN0cmluZz4gbGlzdCkgewotCWJvb2xlYW4gcmVzdWx0ID0gbGlzdC5zaXplKCkgPT0gMjsKLQlpZiAocmVzdWx0KSB7Ci0JICAgIEJBU0VfSU5URVJDRVBUT1JfTkFNRS5lcXVhbHMobGlzdC5nZXQoMCkpOwotCSAgICBPVkVSUklESU5HX0lOVEVSQ0VQVE9SX05BTUUuZXF1YWxzKGxpc3QuZ2V0KDEpKTsKLQl9Ci0JZm9yKFN0cmluZyBzdHIgOiBsaXN0KSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKipPVkVSUklESU5HX0lOVEVSQ0VQVE9SX1RFU1QqKjogIiArIHN0cik7Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiKipPVkVSUklESU5HX0lOVEVSQ0VQVE9SX1RFU1QqKjogIiArIHJlc3VsdCk7CisgICAgYm9vbGVhbiByZXN1bHQgPSBsaXN0LnNpemUoKSA9PSAyOworICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgQkFTRV9JTlRFUkNFUFRPUl9OQU1FLmVxdWFscyhsaXN0LmdldCgwKSk7CisgICAgICAgIE9WRVJSSURJTkdfSU5URVJDRVBUT1JfTkFNRS5lcXVhbHMobGlzdC5nZXQoMSkpOworICAgIH0KKyAgICBmb3IoU3RyaW5nIHN0ciA6IGxpc3QpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKk9WRVJSSURJTkdfSU5URVJDRVBUT1JfVEVTVCoqOiAiICsgc3RyKTsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKk9WRVJSSURJTkdfSU5URVJDRVBUT1JfVEVTVCoqOiAiICsgcmVzdWx0KTsKIAogCi0JcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9TZnVsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9TZnVsLmphdmEKaW5kZXggZDAzYmYyNi4uZWM3MDRhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvU2Z1bC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL1NmdWwuamF2YQpAQCAtNDIsMTMgKzQyLDEzIEBACiAKICAgICBwdWJsaWMgU3RyaW5nIGNvbXB1dGVNaWQoaW50IG1pbiwgaW50IG1heCkKIAotCSAgICB0aHJvd3MgU3dhcEFyZ3VtZW50c0V4Y2VwdGlvbjsKKyAgICAgICAgdGhyb3dzIFN3YXBBcmd1bWVudHNFeGNlcHRpb247CiAKIAogCiAgICAgcHVibGljIFN0cmluZyBjYWxsRHVtbXkoKQogCi0JICAgIHRocm93cyBFeGNlcHRpb247CisgICAgICAgIHRocm93cyBFeGNlcHRpb247CiAKIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9TZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9TZnVsRUpCLmphdmEKaW5kZXggY2JlZmMxNS4uOGYyMTNlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvU2Z1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL1NmdWxFSkIuamF2YQpAQCAtMzgsMTEgKzM4LDExIEBACiAKIEBJbnRlcmNlcHRvcnMoewogCi0JTGlmZWN5Y2xlQ2FsbGJhY2tJbnRlcmNlcHRvci5jbGFzcywKKyAgICBMaWZlY3ljbGVDYWxsYmFja0ludGVyY2VwdG9yLmNsYXNzLAogCi0JQmFzZUxpZmVjeWNsZUludGVyY2VwdG9yLmNsYXNzCisgICAgQmFzZUxpZmVjeWNsZUludGVyY2VwdG9yLmNsYXNzCiAKLQl9KQorICAgIH0pCiAKIHB1YmxpYyBjbGFzcyBTZnVsRUpCIGltcGxlbWVudHMgU2Z1bAogCkBAIC04MCwxMyArODAsMTMgQEAKIAogICAgIHByaXZhdGUgT2JqZWN0IGludGVyY2VwdENhbGwoSW52b2NhdGlvbkNvbnRleHQgY3R4KQogCi0gICAJdGhyb3dzIEV4Y2VwdGlvbgorICAgICAgIHRocm93cyBFeGNlcHRpb24KIAogICAgIHsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiKipCZWFucyBBUk9VTkRJTlZPS0UrKyBbQEFyb3VuZEludm9rZV06ICIgKyBjdHguZ2V0TWV0aG9kKCkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKipCZWFucyBBUk9VTkRJTlZPS0UrKyBbQEFyb3VuZEludm9rZV06ICIgKyBjdHguZ2V0TWV0aG9kKCkpOwogCi0JY291bnQrKzsKKyAgICBjb3VudCsrOwogCiAgICAgICAgIHRyeSB7CiAKQEAgLTExMiw3ICsxMTIsNyBAQAogCiAgICAgcHVibGljIGludCBnZXRDb3VudCgpIHsKIAotCSAgICByZXR1cm4gY291bnQ7CisgICAgICAgIHJldHVybiBjb3VudDsKIAogICAgIH0KIApAQCAtMTMyLDE1ICsxMzIsMTUgQEAKIAogICAgIHB1YmxpYyBTdHJpbmcgY29tcHV0ZU1pZChpbnQgbWluLCBpbnQgbWF4KQogCi0JICAgIHRocm93cyBTd2FwQXJndW1lbnRzRXhjZXB0aW9uCisgICAgICAgIHRocm93cyBTd2FwQXJndW1lbnRzRXhjZXB0aW9uCiAKICAgICB7CiAKLQkgICAgcmV0dXJuIHNsZXNzLnNheUhlbGxvKCkKKyAgICAgICAgcmV0dXJuIHNsZXNzLnNheUhlbGxvKCkKIAotCQkgICAgCSsgIiwgTWlkcG9pbnQgb2YgIiArIG1pbiArICIsICIgKyBtYXggKyAiOyAiCisgICAgICAgICAgICAgICAgKyAiLCBNaWRwb2ludCBvZiAiICsgbWluICsgIiwgIiArIG1heCArICI7ICIKIAotCQkJKyAgc2xlc3MuY29tcHV0ZU1pZFBvaW50KG1pbiwgbWF4KTsKKyAgICAgICAgICAgICsgIHNsZXNzLmNvbXB1dGVNaWRQb2ludChtaW4sIG1heCk7CiAKICAgICB9CiAKQEAgLTE0OCwxMSArMTQ4LDExIEBACiAKICAgICBwdWJsaWMgU3RyaW5nIGNhbGxEdW1teSgpCiAKLQkgICAgdGhyb3dzIEV4Y2VwdGlvbgorICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAKICAgICB7CiAKLQkgICAgcmV0dXJuIGR1bW15LmR1bW15KCk7CisgICAgICAgIHJldHVybiBkdW1teS5kdW1teSgpOwogCiAgICAgfQogCkBAIC0xNzQsNyArMTc0LDcgQEAKIAogICAgIHB1YmxpYyBpbnQgZ2V0UHJlUGFzc2l2YXRlQ2FsbGJhY2tDb3VudCgpIHsKIAotCXJldHVybiBMaWZlY3ljbGVDYWxsYmFja0ludGVyY2VwdG9yLmdldFByZVBhc3NpdmF0ZUNhbGxiYWNrQ291bnQoKTsKKyAgICByZXR1cm4gTGlmZWN5Y2xlQ2FsbGJhY2tJbnRlcmNlcHRvci5nZXRQcmVQYXNzaXZhdGVDYWxsYmFja0NvdW50KCk7CiAKICAgICB9CiAKQEAgLTE4Miw3ICsxODIsNyBAQAogCiAgICAgcHVibGljIGludCBnZXRQb3N0QWN0aXZhdGVDYWxsYmFja0NvdW50KCkgewogCi0JcmV0dXJuIExpZmVjeWNsZUNhbGxiYWNrSW50ZXJjZXB0b3IuZ2V0UG9zdEFjdGl2YXRlQ2FsbGJhY2tDb3VudCgpOworICAgIHJldHVybiBMaWZlY3ljbGVDYWxsYmFja0ludGVyY2VwdG9yLmdldFBvc3RBY3RpdmF0ZUNhbGxiYWNrQ291bnQoKTsKIAogICAgIH0KIApAQCAtMTkwLDcgKzE5MCw3IEBACiAKICAgICBwdWJsaWMgdm9pZCByZXNldExpZmVjeWNsZUNhbGxiYWNrQ291bnRlcnMoKSB7CiAKLQlMaWZlY3ljbGVDYWxsYmFja0ludGVyY2VwdG9yLnJlc2V0TGlmZWN5Y2xlQ2FsbGJhY2tDb3VudGVycygpOworICAgIExpZmVjeWNsZUNhbGxiYWNrSW50ZXJjZXB0b3IucmVzZXRMaWZlY3ljbGVDYWxsYmFja0NvdW50ZXJzKCk7CiAKICAgICB9CiAKQEAgLTIxOCw1MSArMjE4LDUxIEBACiAKICAgICB7CiAKLQkJdHJ5IHsKKyAgICAgICAgdHJ5IHsKIAotCQkJcmV0dXJuIGR1bW15LmlzSW50ZXJjZXB0b3JDYWxsQ291bk9LKCk7CisgICAgICAgICAgICByZXR1cm4gZHVtbXkuaXNJbnRlcmNlcHRvckNhbGxDb3VuT0soKTsKIAotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKiIpOwogCi0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKiIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioiKTsKIAotCQl9CisgICAgICAgIH0KIAogCiAKLQkJcmV0dXJuIG51bGw7CisgICAgICAgIHJldHVybiBudWxsOwogCi0JfQorICAgIH0KIAogCiAKLQkgICAgcHVibGljIFN0cmluZyBpc1Bvc3RDb25zdHJ1Y3RDYWxsQ291bk9LKCkKKyAgICAgICAgcHVibGljIFN0cmluZyBpc1Bvc3RDb25zdHJ1Y3RDYWxsQ291bk9LKCkKIAotCSAgICB7CisgICAgICAgIHsKIAotCQkJdHJ5IHsKKyAgICAgICAgICAgIHRyeSB7CiAKLQkJCQlyZXR1cm4gZHVtbXkuaXNQb3N0Q29uc3RydWN0Q2FsbENvdW5PSygpOworICAgICAgICAgICAgICAgIHJldHVybiBkdW1teS5pc1Bvc3RDb25zdHJ1Y3RDYWxsQ291bk9LKCk7CiAKLQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKiIpOworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqIik7CiAKLQkJCQlleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKIAotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqIik7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioiKTsKIAotCQkJfQorICAgICAgICAgICAgfQogCiAKIAotCQkJcmV0dXJuIG51bGw7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKIAotCX0KKyAgICB9CiAKIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9TbGVzcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvU2xlc3MuamF2YQppbmRleCBhMmFiMzVhLi41Zjk4NDY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9TbGVzcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL1NsZXNzLmphdmEKQEAgLTM0LDcgKzM0LDcgQEAKIAogICAgIHB1YmxpYyBkb3VibGUgY29tcHV0ZU1pZFBvaW50KGludCBtaW4sIGludCBtYXgpCiAKLQkgICAgdGhyb3dzIFN3YXBBcmd1bWVudHNFeGNlcHRpb247CisgICAgICAgIHRocm93cyBTd2FwQXJndW1lbnRzRXhjZXB0aW9uOwogCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL1NsZXNzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9TbGVzc0VKQi5qYXZhCmluZGV4IDMzMDRiOTAuLjRlZmQ1MjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL1NsZXNzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvU2xlc3NFSkIuamF2YQpAQCAtMzAsMTMgKzMwLDEzIEBACiAKIHB1YmxpYyBjbGFzcyBTbGVzc0VKQgogCi0JaW1wbGVtZW50cyBTbGVzcworICAgIGltcGxlbWVudHMgU2xlc3MKIAogewogCiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbygpIHsKIAotCSAgICByZXR1cm4gIkhlbGxvIjsKKyAgICAgICAgcmV0dXJuICJIZWxsbyI7CiAKICAgICB9CiAKQEAgLTQ0LDE3ICs0NCwxNyBAQAogCiAgICAgcHVibGljIGRvdWJsZSBjb21wdXRlTWlkUG9pbnQoaW50IG1pbiwgaW50IG1heCkKIAotCSAgICB0aHJvd3MgU3dhcEFyZ3VtZW50c0V4Y2VwdGlvbgorICAgICAgICB0aHJvd3MgU3dhcEFyZ3VtZW50c0V4Y2VwdGlvbgogCiAgICAgewogCi0JICAgIGlmIChtaW4gPiBtYXgpIHsKKyAgICAgICAgaWYgKG1pbiA+IG1heCkgewogCi0JCSAgICB0aHJvdyBuZXcgU3dhcEFyZ3VtZW50c0V4Y2VwdGlvbigiKCIrbWluKyIsICIrbWF4KyIpIik7CisgICAgICAgICAgICB0aHJvdyBuZXcgU3dhcEFyZ3VtZW50c0V4Y2VwdGlvbigiKCIrbWluKyIsICIrbWF4KyIpIik7CiAKLQkgICAgfQorICAgICAgICB9CiAKLQkgICAgcmV0dXJuIChtaW4qMS4wK21heCkvMi4wOworICAgICAgICByZXR1cm4gKG1pbioxLjArbWF4KS8yLjA7CiAKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW50cm8vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbnRyby9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZWUyMWVhNy4uYTNhOWQ1NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbnRyby9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbnRyby9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU2xlc3Mgc2xlc3M7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTM2LDIzICszNiwyMyBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWVqYjMwLWludGVyY2VwdG9ycy1zZXNzaW9uSUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBzbGVzcyIpOwogICAgICAgICAgICAgU3RyaW5nIHJlc3VsdDEgPSBzbGVzcy5jb25jYXRBbmRSZXZlcnNlKCI8T25lPiIsICI8VHdvPiIpOwogICAgICAgICAgICAgU3RyaW5nIHJlc3VsdDIgPSBzbGVzcy5jb25jYXRBbmRSZXZlcnNlKCI8T25lPiIsICJOdWxsIik7CiAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0MyA9IHNsZXNzLmNvbmNhdEFuZFJldmVyc2UoIm51TEwiLCAiTnVsbCIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCA6ICIgKyByZXN1bHQxKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgOiAiICsgcmVzdWx0Mik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IDogIiArIHJlc3VsdDMpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCA6ICIgKyByZXN1bHQxKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgOiAiICsgcmVzdWx0Mik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IDogIiArIHJlc3VsdDMpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IDogIiArIHNsZXNzLnBsdXMoKGJ5dGUpIDIsIChzaG9ydCkgMywgNCkpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCA6ICIgKyBzbGVzcy5pc0dyZWF0ZXJTaG9ydChuZXcgU2hvcnQoKHNob3J0KSA1KSwgbmV3IExvbmcoNykpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgOiAiICsgc2xlc3MucGx1cygoYnl0ZSkgMiwgKHNob3J0KSAzLCA0KSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IDogIiArIHNsZXNzLmlzR3JlYXRlclNob3J0KG5ldyBTaG9ydCgoc2hvcnQpIDUpLCBuZXcgTG9uZyg3KSkpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3QxIiAsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2ludHJvL2VqYi9Bcmd1bWVudHNWZXJpZmllci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbnRyby9lamIvQXJndW1lbnRzVmVyaWZpZXIuamF2YQppbmRleCAwYzc1YTM1Li41Mjk1ZjA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2ludHJvL2VqYi9Bcmd1bWVudHNWZXJpZmllci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW50cm8vZWpiL0FyZ3VtZW50c1ZlcmlmaWVyLmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKIAogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IGludGVyY2VwdENhbGwoSW52b2NhdGlvbkNvbnRleHQgY3R4KQotICAgCXRocm93cyBNeUJhZEV4Y2VwdGlvbiwgRXhjZXB0aW9uIAorICAgICAgIHRocm93cyBNeUJhZEV4Y2VwdGlvbiwgRXhjZXB0aW9uCiAgICAgewogICAgICAgICBNZXRob2QgbWV0aG9kID0gY3R4LmdldE1ldGhvZCgpOwogICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG1ldGhvZC5nZXROYW1lKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2ludHJvL2VqYi9TbGVzc0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbnRyby9lamIvU2xlc3NFSkIuamF2YQppbmRleCBjOTA1NDE3Li43YTFmZWM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2ludHJvL2VqYi9TbGVzc0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW50cm8vZWpiL1NsZXNzRUpCLmphdmEKQEAgLTIyLDEwICsyMiwxMCBAQAogCiBAU3RhdGVsZXNzCiBwdWJsaWMgY2xhc3MgU2xlc3NFSkIKLQlpbXBsZW1lbnRzIFNsZXNzCisgICAgaW1wbGVtZW50cyBTbGVzcwogewogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oKSB7Ci0JICAgIHJldHVybiAiSGVsbG8iOworICAgICAgICByZXR1cm4gIkhlbGxvIjsKICAgICB9CiAKICAgICBASW50ZXJjZXB0b3JzKEFyZ3VtZW50c1ZlcmlmaWVyLmNsYXNzKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9tZGIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvbWRiL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzI0OTc2ZS4uZWE1ZGZjOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9tZGIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL21kYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMC1pbnRlcmNlcHRvcnMtbWRiIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL21kYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL21kYi9idWlsZC54bWwKaW5kZXggZmQ4Y2FiMC4uMjMzYjhjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9tZGIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvbWRiL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQmVhbiouY2xhc3MsKiovKkhlbGxvKiwqKi8qSW50ZXJjZXB0b3IqIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NSwxNCArNzUsMTQgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvbWRiL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvbWRiL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAyYjdjZDY2Li44NmEwNDUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL21kYi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9tZGIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC01Miw3ICs1Miw3IEBACiAKICAgICBwcml2YXRlIGludCBudW1NZXNzYWdlcyA9IDI7CiAgICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKCBhcmdzLmxlbmd0aCA9PSAxICkgewogICAgICAgICAgICAgbnVtTWVzc2FnZXMgPSBuZXcgSW50ZWdlcihhcmdzWzBdKS5pbnRWYWx1ZSgpOwogICAgICAgICB9CkBAIC02MiwxMCArNjIsMTAgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNldHVwKCk7CiAgICAgICAgICAgICBpZiAoZG9UZXN0KCJqYXZhOmNvbXAvZW52L2ptcy9Nc2dCZWFuUXVldWUiLCBudW1NZXNzYWdlcykpIHsKLQkJc3RhdC5hZGRTdGF0dXMoImNtdCBtYWluIiwgc3RhdC5QQVNTKTsKLQkgICAgfSBlbHNlIHsKLQkJc3RhdC5hZGRTdGF0dXMoImNtdCBtYWluIiwgc3RhdC5GQUlMKTsKLQkgICAgfQorICAgICAgICBzdGF0LmFkZFN0YXR1cygiY210IG1haW4iLCBzdGF0LlBBU1MpOworICAgICAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygiY210IG1haW4iLCBzdGF0LkZBSUwpOworICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJjbXQgbWFpbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtNzYsMTggKzc2LDE4IEBACiAKICAgICBwdWJsaWMgdm9pZCBzZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgIAotICAgICAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHF1ZXVlQ29uRmFjdG9yeSA9IAorCisgICAgICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcXVldWVDb25GYWN0b3J5ID0KICAgICAgICAgICAgIChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KSBjb250ZXh0Lmxvb2t1cAogICAgICAgICAgICAgKCJqYXZhOmNvbXAvZW52L0Zvb0NGIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICBxdWV1ZUNvbiA9IHF1ZXVlQ29uRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKIAogICAgICAgICBxdWV1ZVNlc3Npb24gPSBxdWV1ZUNvbi5jcmVhdGVRdWV1ZVNlc3Npb24KLSAgICAgICAgICAgIChmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsgCisgICAgICAgICAgICAoZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CiAKICAgICAgICAgLy8gUHJvZHVjZXIgd2lsbCBiZSBzcGVjaWZpZWQgd2hlbiBhY3R1YWwgbXNnIGlzIHNlbnQuCi0gICAgICAgIHF1ZXVlU2VuZGVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVNlbmRlcihudWxsKTsgICAgICAgIAorICAgICAgICBxdWV1ZVNlbmRlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVTZW5kZXIobnVsbCk7CiAKICAgICAgICAgY2xpZW50UXVldWUgPSAoamFrYXJ0YS5qbXMuUXVldWUpCiAgICAgICAgICAgICBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvTXNnQmVhbkNsaWVudFF1ZXVlIik7CkBAIC0xMDgsMTggKzEwOCwxOCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgc2VuZE1zZ3MoamFrYXJ0YS5qbXMuUXVldWUgcXVldWUsIE1lc3NhZ2UgbXNnLCBpbnQgbnVtKSAKKyAgICBwdWJsaWMgdm9pZCBzZW5kTXNncyhqYWthcnRhLmptcy5RdWV1ZSBxdWV1ZSwgTWVzc2FnZSBtc2csIGludCBudW0pCiAgICAgICAgIHRocm93cyBKTVNFeGNlcHRpb24gewogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYXQgdGltZSAiICsgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwogICAgICAgICAgICAgcXVldWVTZW5kZXIuc2VuZChxdWV1ZSwgbXNnKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYXQgdGltZSAiICsgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIGJvb2xlYW4gZG9UZXN0KFN0cmluZyBkZXN0TmFtZSwgaW50IG51bSkgCisgICAgcHVibGljIGJvb2xlYW4gZG9UZXN0KFN0cmluZyBkZXN0TmFtZSwgaW50IG51bSkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgRGVzdGluYXRpb24gZGVzdCA9IChEZXN0aW5hdGlvbikgY29udGV4dC5sb29rdXAoZGVzdE5hbWUpOwpAQCAtMTMzLDkgKzEzMyw5IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgcXVldWUgbWVzc2FnZSIpOwogICAgICAgICBNZXNzYWdlIHJlY3ZkbWVzc2FnZSA9IHF1ZXVlUmVjZWl2ZXIucmVjZWl2ZShUSU1FT1VUKTsKICAgICAgICAgaWYoIHJlY3ZkbWVzc2FnZSAhPSBudWxsICkgewotCSAgICBTdHJpbmcgcmVjZWl2ZWRNc2cgPSAoKFRleHRNZXNzYWdlKXJlY3ZkbWVzc2FnZSkuZ2V0VGV4dCgpOworICAgICAgICBTdHJpbmcgcmVjZWl2ZWRNc2cgPSAoKFRleHRNZXNzYWdlKXJlY3ZkbWVzc2FnZSkuZ2V0VGV4dCgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNlaXZlZCBtZXNzYWdlIDogIiArIHJlY2VpdmVkTXNnKTsKLQkgICAgcmV0dXJuIHJlY2VpdmVkTXNnLmVxdWFscygibWRiKCkgaW52b2tlZC4gSW50ZXJjZXB0b3IgY291bnQ6IDEiKTsKKyAgICAgICAgcmV0dXJuIHJlY2VpdmVkTXNnLmVxdWFscygibWRiKCkgaW52b2tlZC4gSW50ZXJjZXB0b3IgY291bnQ6IDEiKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGltZW91dCBhZnRlciAiICsgVElNRU9VVCArICIgc2Vjb25kcyIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEpNU0V4Y2VwdGlvbigidGltZW91dCIgKyBUSU1FT1VUICsgIiBzZWNvbmRzIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL21kYi9lamIvQmFzZUludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL21kYi9lamIvQmFzZUludGVyY2VwdG9yLmphdmEKaW5kZXggYTc1NGNjOC4uYzNmZTg4YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9tZGIvZWpiL0Jhc2VJbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvbWRiL2VqYi9CYXNlSW50ZXJjZXB0b3IuamF2YQpAQCAtMjQsMTYgKzI0LDE2IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGludGVyY2VwdG9yQ291bnQgPSAwIDsKIAogICAgIHN0YXRpYyBpbnQgZ2V0Q291bnQoKSB7Ci0JcmV0dXJuIGludGVyY2VwdG9yQ291bnQ7CisgICAgcmV0dXJuIGludGVyY2VwdG9yQ291bnQ7CiAgICAgfQogCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgaW50ZXJjZXB0KEludm9jYXRpb25Db250ZXh0IGludikKLQl0aHJvd3MgRXhjZXB0aW9uCisgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlttZGJdIEludGVyY2VwdG9yIGludm9rZWQuLi4iKTsKLQlpbnRlcmNlcHRvckNvdW50Kys7Ci0JcmV0dXJuIGludi5wcm9jZWVkKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJbbWRiXSBJbnRlcmNlcHRvciBpbnZva2VkLi4uIik7CisgICAgaW50ZXJjZXB0b3JDb3VudCsrOworICAgIHJldHVybiBpbnYucHJvY2VlZCgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9tZGIvZWpiL0hlbGxvMS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9tZGIvZWpiL0hlbGxvMS5qYXZhCmluZGV4IDMwOTRiZmQuLjRlODRhOTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvbWRiL2VqYi9IZWxsbzEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL21kYi9lamIvSGVsbG8xLmphdmEKQEAgLTE5LDUgKzE5LDUgQEAKIHB1YmxpYyBpbnRlcmZhY2UgSGVsbG8xIHsKIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKFN0cmluZyBzKTsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9tZGIvZWpiL0hlbGxvU3RhdGVmdWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvbWRiL2VqYi9IZWxsb1N0YXRlZnVsLmphdmEKaW5kZXggMjM2ZDI4YS4uYjMzOGY1OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9tZGIvZWpiL0hlbGxvU3RhdGVmdWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL21kYi9lamIvSGVsbG9TdGF0ZWZ1bC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cpOwogICAgIH0KICAgICBAUHJlRGVzdHJveSBwdWJsaWMgdm9pZCBteVByZURlc3Ryb3lNZXRob2QoKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUFJFLURFU1RST1kgY2FsbGJhY2sgcmVjZWl2ZWQgaW4gIiArIG1zZyk7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQUkUtREVTVFJPWSBjYWxsYmFjayByZWNlaXZlZCBpbiAiICsgbXNnKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvbWRiL2VqYi9NZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9tZGIvZWpiL01lc3NhZ2VCZWFuLmphdmEKaW5kZXggYjRkZTllZC4uN2I0MjZmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9tZGIvZWpiL01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9tZGIvZWpiL01lc3NhZ2VCZWFuLmphdmEKQEAgLTUwLDcgKzUwLDcgQEAKIAogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIGhlbGxvMSBzdGF0ZWxlc3MgYmVhbiIpOwogICAgICAgICAgICAgaGVsbG8xLmhlbGxvKCJsb2NhbCBlamIzLjAgc3RhdGVsZXNzIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgaGVsbG8yIHN0YXRlZnVsIGJlYW4iKTsKQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgICAgICAgIFF1ZXVlU2VuZGVyIHNlbmRlciA9IHNlc3Npb24uY3JlYXRlU2VuZGVyKHF1ZXVlKTsKICAgICAgICAgICAgIFRleHRNZXNzYWdlIHRtZXNzYWdlID0gc2Vzc2lvbi5jcmVhdGVUZXh0TWVzc2FnZSgpOwogICAgICAgICAgICAgdG1lc3NhZ2Uuc2V0VGV4dCgibWRiKCkgaW52b2tlZC4gSW50ZXJjZXB0b3IgY291bnQ6ICIKLQkJICAgICsgQmFzZUludGVyY2VwdG9yLmdldENvdW50KCkpOworICAgICAgICAgICAgKyBCYXNlSW50ZXJjZXB0b3IuZ2V0Q291bnQoKSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZSIpOwogICAgICAgICAgICAgc2VuZGVyLnNlbmQodG1lc3NhZ2UpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtZXNzYWdlIHNlbnQiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzAxOGVjNy4uZTJjYTc1YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMwLWludGVyY2VwdG9ycy1zZXNzaW9uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2J1aWxkLnhtbAppbmRleCA2MTdkYzk3Li4zZWVhYTFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkV4Y2VwdGlvbi5jbGFzcywqKi8qSW50ZXJjZXB0b3IqLmNsYXNzLCoqL0R1bW15Ki5jbGFzcywqKi9TbGVzcyouY2xhc3MsKiovU2Z1bCouY2xhc3MsKiovKkZvby5jbGFzcywgKiovQmFyKi5jbGFzcywqKi9Bcmd1bWVudHNWZXJpZmllci5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TZnVsLmNsYXNzLCoqLypFeGNlcHRpb24uY2xhc3MsKiovQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjEsMTAgKzYxLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDM4ODQ3MTEuLmMwMmZhY2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzQsMTEgKzM0LDExIEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItZWpiMzAtaW50ZXJjZXB0b3JzLXNlc3Npb25JRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBARUpCIFNmdWwgc2Z1bDsKIAogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU2Z1bCBzZnVsMDsKQEAgLTUzLDE0ICs1MywxNCBAQAogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU2Z1bCBzZnVsOTsKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLQlkb1Rlc3QxKCk7Ci0JZG9UZXN0MigpOwotCWRvVGVzdDMoKTsKLQlkb1Rlc3Q0KCk7Ci0JZG9UZXN0NSgpOwotCWRvVGVzdDYoKTsKKyAgICBkb1Rlc3QxKCk7CisgICAgZG9UZXN0MigpOworICAgIGRvVGVzdDMoKTsKKyAgICBkb1Rlc3Q0KCk7CisgICAgZG9UZXN0NSgpOworICAgIGRvVGVzdDYoKTsKIAotCWRvVGVzdDdfOCgpOworICAgIGRvVGVzdDdfOCgpOwogCiAgICAgICAgIGRvVGVzdDkoKTsKICAgICAgICAgZG9UZXN0MTAoKTsKQEAgLTcxLDkgKzcxLDkgQEAKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBzdGF0ZWZ1bCIpOwogICAgICAgICAgICAgc2Z1bC5oZWxsbygpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIisrKysrIEludGVyY2VwdG9yQ2FsbENvdW50OiAiICsgc2Z1bC5nZXRDb3VudCgpKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIrKysrKyBJbnRlcmNlcHRvckNhbGxDb3VudDogIiArIHNmdWwuZ2V0Q291bnQoKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrIik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDEiICwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTg2LDggKzg2LDggQEAKICAgICAgICAgICAgIHNmdWwudGhyb3dBcHBFeGNlcHRpb24oIlhZWiIpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3QyIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0gY2F0Y2ggKEFwcEV4Y2VwdGlvbiBhcHBFeCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCBBcHBFeGNlcHRpb246ICIgKyBhcHBFeCk7Ci0gICAgICAgIAlzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDIiICwgc3RhdC5QQVNTKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgQXBwRXhjZXB0aW9uOiAiICsgYXBwRXgpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3QyIiAsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDIiICwgc3RhdC5GQUlMKTsKQEAgLTk3LDEwICs5NywxMCBAQAogICAgIHByaXZhdGUgdm9pZCBkb1Rlc3QzKCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHNmdWwuY29tcHV0ZU1pZCg0LCAxMCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1Rlc3QzXTogR290OiAiICsgcmVzdWx0KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbVGVzdDNdOiBHb3Q6ICIgKyByZXN1bHQpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3QzIiAsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKFN3YXBBcmd1bWVudHNFeGNlcHRpb24gc3dhcEV4KSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHVuZXhwZWN0ZWQgRXhjZXB0aW9uOiAiICsgc3dhcEV4KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgdW5leHBlY3RlZCBFeGNlcHRpb246ICIgKyBzd2FwRXgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3QzIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0xMTEsMTEgKzExMSwxMSBAQAogICAgIHByaXZhdGUgdm9pZCBkb1Rlc3Q0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHNmdWwuY29tcHV0ZU1pZCgyMywgMTApOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltUZXN0NF06IEdvdDogIiArIHJlc3VsdAotCQkJICAgICsgIiBJTlNURUFEIG9mIFN3YXBBcmd1bWVudHNFeGNlcHRpb24iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbVGVzdDRdOiBHb3Q6ICIgKyByZXN1bHQKKyAgICAgICAgICAgICAgICArICIgSU5TVEVBRCBvZiBTd2FwQXJndW1lbnRzRXhjZXB0aW9uIik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDQiICwgc3RhdC5GQUlMKTsKICAgICAgICAgfSBjYXRjaCAoU3dhcEFyZ3VtZW50c0V4Y2VwdGlvbiBzd2FwRXgpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgRXhjZXB0aW9uOiAiICsgc3dhcEV4KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgRXhjZXB0aW9uOiAiICsgc3dhcEV4KTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0NCIgLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTI2LDExICsxMjYsMTEgQEAKICAgICBwcml2YXRlIHZvaWQgZG9UZXN0NSgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBzZnVsLmNhbGxEdW1teSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltUZXN0NV06IEdvdDogIiArIHJlc3VsdAotCQkJICAgICsgIiBJTlNURUFEIG9mIENhbGxCbG9ja2VkRXhjZXB0aW9uIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1Rlc3Q1XTogR290OiAiICsgcmVzdWx0CisgICAgICAgICAgICAgICAgKyAiIElOU1RFQUQgb2YgQ2FsbEJsb2NrZWRFeGNlcHRpb24iKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0NSIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9IGNhdGNoIChDYWxsQmxvY2tlZEV4Y2VwdGlvbiBjYWxsQmxrRXgpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgRXhjZXB0aW9uOiAiICsgY2FsbEJsa0V4KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgRXhjZXB0aW9uOiAiICsgY2FsbEJsa0V4KTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0NSIgLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTQzLDcgKzE0Myw3IEBACiAgICAgICAgICAgICBzZnVsLmVhdEV4Y2VwdGlvbigpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3Q2IiAsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgdW5leHBlY3RlZCBFeGNlcHRpb246ICIgKyBlKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgdW5leHBlY3RlZCBFeGNlcHRpb246ICIgKyBlKTsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDYiICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQpAQCAtMTUxLDQwICsxNTEsNDAgQEAKIAogICAgIHByaXZhdGUgdm9pZCBkb1Rlc3Q3XzgoKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIGludCBzeiA9IDIwOworICAgICAgICBpbnQgc3ogPSAyMDsKICAgICAgICAgQ29udGV4dCBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgc2Z1bC5yZXNldExpZmVjeWNsZUNhbGxiYWNrQ291bnRlcnMoKTsKLQkgICAgU2Z1bFtdIHNmdWxzID0gbmV3IFNmdWxbc3pdOwotCSAgICBmb3IgKGludCBpPTA7IGk8c3o7IGkrKykgewotICAgIAkJc2Z1bHNbaV0gPSAoU2Z1bCkgY3R4Lmxvb2t1cCgiY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5pbnRlcmNlcHRvcnMuc2Vzc2lvbi5TZnVsIik7Ci0gICAgCQlpbnQgcHJldkluZGV4ID0gKGkgPT0wKSA/IDAgOiBpLTE7Ci0gICAgCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgc2Z1bFsiK2krIl06ICIgKyBzZnVsc1tpXSArICIgPT0+ICIKLSAgICAJCSAgICAgICAgKyBzZnVsc1twcmV2SW5kZXhdLmVxdWFscyhzZnVsc1tpXSkpOwotCQkgICAgc2Z1bHNbaV0uc2V0SUQoaSk7CisgICAgICAgIHNmdWwucmVzZXRMaWZlY3ljbGVDYWxsYmFja0NvdW50ZXJzKCk7CisgICAgICAgIFNmdWxbXSBzZnVscyA9IG5ldyBTZnVsW3N6XTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPHN6OyBpKyspIHsKKyAgICAgICAgICAgIHNmdWxzW2ldID0gKFNmdWwpIGN0eC5sb29rdXAoImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaW50ZXJjZXB0b3JzLnNlc3Npb24uU2Z1bCIpOworICAgICAgICAgICAgaW50IHByZXZJbmRleCA9IChpID09MCkgPyAwIDogaS0xOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIHNmdWxbIitpKyJdOiAiICsgc2Z1bHNbaV0gKyAiID09PiAiCisgICAgICAgICAgICAgICAgICAgICsgc2Z1bHNbcHJldkluZGV4XS5lcXVhbHMoc2Z1bHNbaV0pKTsKKyAgICAgICAgICAgIHNmdWxzW2ldLnNldElEKGkpOwogICAgICAgICAgICAgc2Z1bHNbaV0uZ2V0Q291bnQoKTsKLQkgICAgfQotCSAgICBzbGVlcEZvcigxMCk7Ci0JICAgIGZvciAoaW50IGk9MDsgaTxzejsgaSsrKSB7Ci0JICAgICAgICBzZnVsc1tpXS5nZXRDb3VudCgpOwotCSAgICB9Ci0JICAgIGludCBwYXNzaXZhdGlvbkNvdW50ID0gc2Z1bC5nZXRQcmVQYXNzaXZhdGVDYWxsYmFja0NvdW50KCk7Ci0JICAgIGludCBhY3RpdmF0aW9uQ291bnQgPSBzZnVsLmdldFBvc3RBY3RpdmF0ZUNhbGxiYWNrQ291bnQoKTsKLQkgICAgCisgICAgICAgIH0KKyAgICAgICAgc2xlZXBGb3IoMTApOworICAgICAgICBmb3IgKGludCBpPTA7IGk8c3o7IGkrKykgeworICAgICAgICAgICAgc2Z1bHNbaV0uZ2V0Q291bnQoKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgcGFzc2l2YXRpb25Db3VudCA9IHNmdWwuZ2V0UHJlUGFzc2l2YXRlQ2FsbGJhY2tDb3VudCgpOworICAgICAgICBpbnQgYWN0aXZhdGlvbkNvdW50ID0gc2Z1bC5nZXRQb3N0QWN0aXZhdGVDYWxsYmFja0NvdW50KCk7CisKICAgICAgICAgYm9vbGVhbiBzdGF0dXMgPSAocGFzc2l2YXRpb25Db3VudCA+IDApICYmIChhY3RpdmF0aW9uQ291bnQ+IDApOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInBhc3NpdmF0aW9uOiAiICsgcGFzc2l2YXRpb25Db3VudCArICI7ICIKLQkJICAgICsgImFjdGl2YXRpb246ICIgKyBhY3RpdmF0aW9uQ291bnQpOwotICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDciICwgCi0JCSAgICAoc3RhdHVzID09IHRydWUpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKLSAgICAgICAgCisgICAgICAgICAgICArICJhY3RpdmF0aW9uOiAiICsgYWN0aXZhdGlvbkNvdW50KTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3Q3IiAsCisgICAgICAgICAgICAoc3RhdHVzID09IHRydWUpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKKwogICAgICAgICBib29sZWFuIHN0YXRlUmVzdG9yZWQgPSB0cnVlOwogICAgICAgICBmb3IgKGludCBpPTA7IGk8c3o7IGkrKykgewogICAgICAgICAgICAgYm9vbGVhbiBvayA9IHNmdWxzW2ldLmlzU3RhdGVSZXN0b3JlZCgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzdGF0ZVJlc3RvcmVkWyIgKyBpICsgIl06IiArIG9rKTsKICAgICAgICAgICAgIHN0YXRlUmVzdG9yZWQgPSBvayAmJiBzdGF0dXM7CiAgICAgICAgIH0KLSAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3Q4IiAsIAorICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDgiICwKICAgICAgICAgICAgICAgICAoc3RhdGVSZXN0b3JlZCA9PSB0cnVlKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7Ci0gICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHVuZXhwZWN0ZWQgRXhjZXB0aW9uOiAiICsgZSk7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTE5OSw3ICsxOTksNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0WyIgKyB0ZXN0TmFtZSArICJdOiAiICsgbWFwLmdldCh0ZXN0TmFtZSkpOwogICAgICAgICAgICAgY2hlY2tTZXRQYXJhbXNTdGF0dXMgPSBjaGVja1NldFBhcmFtc1N0YXR1cyAmJiBtYXAuZ2V0KHRlc3ROYW1lKTsKICAgICAgICAgfQotICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDkiICwgCisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0OSIgLAogICAgICAgICAgICAgICAgIChjaGVja1NldFBhcmFtc1N0YXR1cyA9PSB0cnVlKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CiAgICAgfQogCkBAIC0yMjEsMTggKzIyMSwxOCBAQAogICAgICAgICAgICAgZmFpbGVkQ291bnRTdGF0dXMgPSBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0MTAgIiArIHRydWVTdGF0dXMgKyAiIDogIiArIHNmdWwuZ2V0QXNzZXJ0aW9uRmFpbGVkQ291bnQoKSAsIAorICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDEwICIgKyB0cnVlU3RhdHVzICsgIiA6ICIgKyBzZnVsLmdldEFzc2VydGlvbkZhaWxlZENvdW50KCkgLAogICAgICAgICAgICAgICAgICgodHJ1ZVN0YXR1cyAmJiBmYWlsZWRDb3VudFN0YXR1cykgPT0gdHJ1ZSkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgc2xlZXBGb3IoaW50IHNlY29uZHMpIHsKLQl3aGlsZSAoc2Vjb25kcy0tID4gMCkgewotCSAgICB0cnkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyBzZWNvbmRzICsgIiBsZWZ0Li4uIik7Ci0JCVRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMTAwMCk7Ci0JICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGluRXgpIHsKLQkgICAgfQotCX0KKyAgICB3aGlsZSAoc2Vjb25kcy0tID4gMCkgeworICAgICAgICB0cnkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyBzZWNvbmRzICsgIiBsZWZ0Li4uIik7CisgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMTAwMCk7CisgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGluRXgpIHsKKyAgICAgICAgfQorICAgIH0KICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCA5YmM4N2M3Li5jMGI3ZTdjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgICAgIDxlamItbmFtZT5TZnVsRUpCPC9lamItbmFtZT4KICAgICAgICAgPGJlYW4tY2FjaGU+CiAgICAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+NDwvbWF4LWNhY2hlLXNpemU+Ci0JICAgIDxyZXNpemUtcXVhbnRpdHk+MjwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICA8cmVzaXplLXF1YW50aXR5PjI8L3Jlc2l6ZS1xdWFudGl0eT4KICAgICAgICAgPC9iZWFuLWNhY2hlPgogICAgICA8L2VqYj4KICAgIDwvZW50ZXJwcmlzZS1iZWFucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvQXJndW1lbnRzVmVyaWZpZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvQXJndW1lbnRzVmVyaWZpZXIuamF2YQppbmRleCBlZmEyZjhkLi44MDUyZWQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL0FyZ3VtZW50c1ZlcmlmaWVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2VqYi9Bcmd1bWVudHNWZXJpZmllci5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBpbnRlcmNlcHRDYWxsKEludm9jYXRpb25Db250ZXh0IGN0eCkKLSAgIAl0aHJvd3MgTXlCYWRFeGNlcHRpb24sIEV4Y2VwdGlvbiAKKyAgICAgICB0aHJvd3MgTXlCYWRFeGNlcHRpb24sIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgTWV0aG9kIG1ldGhvZCA9IGN0eC5nZXRNZXRob2QoKTsKICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBtZXRob2QuZ2V0TmFtZSgpOwpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgcGFyYW1zWzBdID0gbmV3IExvbmcoNDUpOwogICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzKCJvYmplY3RBcmdzIikpIHsKICAgICAgICAgICAgIHBhcmFtcyA9IG5ldyBPYmplY3RbMF07Ci0gICAgICAgIH0gCisgICAgICAgIH0KIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgY3R4LnNldFBhcmFtZXRlcnMocGFyYW1zKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvQmFzZUludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL0Jhc2VJbnRlcmNlcHRvci5qYXZhCmluZGV4IGIwYTkzZWEuLmQyZWNkZTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvQmFzZUludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2VqYi9CYXNlSW50ZXJjZXB0b3IuamF2YQpAQCAtNDQsMTEgKzQ0LDExIEBACiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBpbnRlcmNlcHRDYWxsKEludm9jYXRpb25Db250ZXh0IGN0eCkKLSAgIAl0aHJvd3MgRXhjZXB0aW9uIAorICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CiAgICAgICAgIE9iamVjdCByZXN1bHQgPSBudWxsOwotCWJvb2xlYW4gc2V0SWQgPSBmYWxzZTsKLQliYXNlQ291bnQrKzsKKyAgICBib29sZWFuIHNldElkID0gZmFsc2U7CisgICAgYmFzZUNvdW50Kys7CiAgICAgaWYgKGN0eC5nZXRNZXRob2QoKS5nZXROYW1lKCkuZXF1YWxzKCJzZXRJbnRlcmNlcHRvcklkIikpIHsKICAgICAgICAgamF2YS51dGlsLk1hcCBtYXAgPSBjdHguZ2V0Q29udGV4dERhdGEoKTsKICAgICAgICAgbWFwLnB1dCgiQmFzZUludGVyY2VwdG9yIiwgdGhpcyk7CkBAIC02NSwyNiArNjUsMjYgQEAKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIGludCBnZXRJbnZvY2F0aW9uQ291bnQoKSB7Ci0JICAgIHJldHVybiBiYXNlQ291bnQ7CisgICAgICAgIHJldHVybiBiYXNlQ291bnQ7CiAgICAgfQotICAgIAorCiAgICAgQFByZVBhc3NpdmF0ZQogICAgIHB1YmxpYyB2b2lkIHByZVBhc3NpdmF0ZShJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHsKLQlwcmVQYXNzaXZhdGVDb3VudCsrOwotCVN5c3RlbS5vdXQucHJpbnRsbigicHJlUGFzc2l2YXRlQ291bnQ6ICIgKyBwcmVQYXNzaXZhdGVDb3VudCk7CisgICAgcHJlUGFzc2l2YXRlQ291bnQrKzsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oInByZVBhc3NpdmF0ZUNvdW50OiAiICsgcHJlUGFzc2l2YXRlQ291bnQpOwogICAgIH0KIAogICAgIEBQb3N0QWN0aXZhdGUKICAgICBwdWJsaWMgdm9pZCBwb3N0QWN0aXZhdGUoSW52b2NhdGlvbkNvbnRleHQgY3R4KSB7Ci0JcG9zdEFjdGl2YXRlQ291bnQrKzsKLQlTeXN0ZW0ub3V0LnByaW50bG4oInBvc3RBY3RpdmF0ZUNvdW50OiAiICsgcG9zdEFjdGl2YXRlQ291bnQpOworICAgIHBvc3RBY3RpdmF0ZUNvdW50Kys7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJwb3N0QWN0aXZhdGVDb3VudDogIiArIHBvc3RBY3RpdmF0ZUNvdW50KTsKICAgICB9Ci0gICAgCisKICAgICAvL1NvbWUgcGFja2FnZSBwcml2YXRlIG1ldGhvZHMgdG8gY2hlY2sgc3RhdGUKICAgICB2b2lkIHNldEludGVyY2VwdG9ySUQoaW50IHZhbCkgewogICAgICAgICB0aGlzLmludGVyY2VwdG9ySUQgPSB2YWw7CiAgICAgfQotICAgIAorCiAgICAgaW50IGdldEludGVyY2VwdG9ySUQoKSB7CiAgICAgICAgIGJvb2xlYW4gdmFsaWQgPSAoY29tcHV0ZWRJbnRlcmNlcHRvcklEID09IGludGVyY2VwdG9ySUQgKiAyICsgMSk7CiAgICAgICAgIGlmICghIHZhbGlkKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL0Jsb2NraW5nSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvQmxvY2tpbmdJbnRlcmNlcHRvci5qYXZhCmluZGV4IGU0ODAxODIuLmRmYWFlOGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvQmxvY2tpbmdJbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvQmxvY2tpbmdJbnRlcmNlcHRvci5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgcHJpdmF0ZSB2b2lkIGFmdGVyQ3JlYXRpb24oSW52b2NhdGlvbkNvbnRleHQgY3R4KSB7CiAKICAgICAgICAgU3RyaW5nIHZhbHVlID0gKFN0cmluZykgY3R4LmdldENvbnRleHREYXRhKCkuZ2V0KCJQb3N0Q29uc3RydWN0Iik7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gQmxvY2tpbmdJbnRlcmNlcHRvci5hZnRlckNyZWF0aW9uIHZhbHVlID0gIiAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBCbG9ja2luZ0ludGVyY2VwdG9yLmFmdGVyQ3JlYXRpb24gdmFsdWUgPSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHZhbHVlKTsKICAgICAgICAgaWYodmFsdWUgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQmFzZUludGVyY2VwdG9yLlBvc3RDb25zdHJ1Y3QgIiArCkBAIC00NCwxMiArNDQsMTIgQEAKIAogICAgIEBBcm91bmRJbnZva2UKICAgICBwcml2YXRlIE9iamVjdCBpbnRlcmNlcHRDYWxsKEludm9jYXRpb25Db250ZXh0IGN0eCkKLSAgIAl0aHJvd3MgQ2FsbEJsb2NrZWRFeGNlcHRpb24gCisgICAgICAgdGhyb3dzIENhbGxCbG9ja2VkRXhjZXB0aW9uCiAgICAgewotCVN5c3RlbS5vdXQucHJpbnRsbigiW3Rlc3QuQmxvY2tpbmdJbnRlcmNlcHRvciBAQXJvdW5kSW52b2tlXTogIiArIGN0eC5nZXRNZXRob2QoKSk7Ci0JYmxvY2tDb3VudCsrOwotCXRocm93IG5ldyBDYWxsQmxvY2tlZEV4Y2VwdGlvbigiQ2FsbCBibG9ja2VkIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJbdGVzdC5CbG9ja2luZ0ludGVyY2VwdG9yIEBBcm91bmRJbnZva2VdOiAiICsgY3R4LmdldE1ldGhvZCgpKTsKKyAgICBibG9ja0NvdW50Kys7CisgICAgdGhyb3cgbmV3IENhbGxCbG9ja2VkRXhjZXB0aW9uKCJDYWxsIGJsb2NrZWQiKTsKICAgICB9CiAKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2VqYi9EdW1teS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2VqYi9EdW1teS5qYXZhCmluZGV4IGY0NDc0NmQuLmQ0ODYxOTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvRHVtbXkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL0R1bW15LmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIHB1YmxpYyBpbnRlcmZhY2UgRHVtbXkKIHsKICAgICBwdWJsaWMgU3RyaW5nIGR1bW15KCkKLQl0aHJvd3MgQ2FsbEJsb2NrZWRFeGNlcHRpb247CisgICAgdGhyb3dzIENhbGxCbG9ja2VkRXhjZXB0aW9uOwogCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvRHVtbXlFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvRHVtbXlFSkIuamF2YQppbmRleCA4MjZlODFkLi5hM2Q0NDc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL0R1bW15RUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2VqYi9EdW1teUVKQi5qYXZhCkBAIC0yNCwxNyArMjQsMTcgQEAKIGltcG9ydCBqYWthcnRhLmFubm90YXRpb24uUG9zdENvbnN0cnVjdDsKIAogQEludGVyY2VwdG9ycyh7Ci0JY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5pbnRlcmNlcHRvcnMuc2Vzc2lvbi5CYXNlSW50ZXJjZXB0b3IuY2xhc3MsCi0JY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5pbnRlcmNlcHRvcnMuc2Vzc2lvbi5CbG9ja2luZ0ludGVyY2VwdG9yLmNsYXNzCisgICAgY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5pbnRlcmNlcHRvcnMuc2Vzc2lvbi5CYXNlSW50ZXJjZXB0b3IuY2xhc3MsCisgICAgY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5pbnRlcmNlcHRvcnMuc2Vzc2lvbi5CbG9ja2luZ0ludGVyY2VwdG9yLmNsYXNzCiB9KQogCiBAU3RhdGVsZXNzCiBwdWJsaWMgY2xhc3MgRHVtbXlFSkIKLQlpbXBsZW1lbnRzIER1bW15CisgICAgaW1wbGVtZW50cyBEdW1teQogewogICAgIGludCBpbnRlcmNlcHRvcklkOwogICAgIHByaXZhdGUgYm9vbGVhbiBjcmVhdGVDYWxsZWQgPSBmYWxzZTsKLSAgICAKKwogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGFmdGVyQ3JlYXRlKCkKICAgICB7CkBAIC00Myw5ICs0Myw5IEBACiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBkdW1teSgpCi0JdGhyb3dzIENhbGxCbG9ja2VkRXhjZXB0aW9uCisgICAgdGhyb3dzIENhbGxCbG9ja2VkRXhjZXB0aW9uCiAgICAgewotCSAgICByZXR1cm4gIkR1bW15ISEiOworICAgICAgICByZXR1cm4gIkR1bW15ISEiOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldEludGVyY2VwdG9ySWQoaW50IHZhbCkgewpAQCAtNTUsMTAgKzU1LDEwIEBACiAKICAgICAgICAgdGhpcy5pbnRlcmNlcHRvcklkID0gdmFsOwogICAgIH0KLSAgICAKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwcml2YXRlIE9iamVjdCBpbnRlcmNlcHRDYWxsKEludm9jYXRpb25Db250ZXh0IGN0eCkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7IAorICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2VqYi9FcnJvclJlY292ZXJ5SW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvRXJyb3JSZWNvdmVyeUludGVyY2VwdG9yLmphdmEKaW5kZXggMzgzMzhhZi4uYTkzOTcxNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2VqYi9FcnJvclJlY292ZXJ5SW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL0Vycm9yUmVjb3ZlcnlJbnRlcmNlcHRvci5qYXZhCkBAIC0zMiwxMSArMzIsMTEgQEAKIAogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IGludGVyY2VwdENhbGwoSW52b2NhdGlvbkNvbnRleHQgY3R4KQotICAgCXRocm93cyBNeUJhZEV4Y2VwdGlvbiwgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uLCBFeGNlcHRpb24gCisgICAgICAgdGhyb3dzIE15QmFkRXhjZXB0aW9uLCBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24sIEV4Y2VwdGlvbgogICAgIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEVycm9yUkVjb3ZlcnlJbnRlcmNlcHRvciIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigic2xlc3MgPSAiICsgZm9vYmFyKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oInNjID0gIiArIHNjKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEVycm9yUkVjb3ZlcnlJbnRlcmNlcHRvciIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigic2xlc3MgPSAiICsgZm9vYmFyKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNjID0gIiArIHNjKTsKIAogICAgICAgICBNZXRob2QgbWV0aG9kID0gY3R4LmdldE1ldGhvZCgpOwogICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG1ldGhvZC5nZXROYW1lKCk7CkBAIC00Niw3ICs0Niw3IEBACiAKICAgICAgICAgaWYgKG1ldGhvZE5hbWUuZXF1YWxzKCJhc3NlcnRJZlRydWUiKSkgewogICAgICAgICAgICAgcGFyYW1zWzBdID0gbmV3IEJvb2xlYW4oZmFsc2UpOwotIAorCiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGN0eC5zZXRQYXJhbWV0ZXJzKHBhcmFtcyk7CiAgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWxsQXJnRXgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvTGlmZWN5Y2xlQ2FsbGJhY2tJbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2VqYi9MaWZlY3ljbGVDYWxsYmFja0ludGVyY2VwdG9yLmphdmEKaW5kZXggZGY4MTMxYS4uYmEwNTcyMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2VqYi9MaWZlY3ljbGVDYWxsYmFja0ludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2VqYi9MaWZlY3ljbGVDYWxsYmFja0ludGVyY2VwdG9yLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGludCBwcmVQYXNzaXZhdGVDYWxsYmFja0NvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgcG9zdEFjdGl2YXRlQ2FsbGJhY2tDb3VudCA9IDA7Ci0gICAgCisKICAgICBwcml2YXRlIGludCBpbnRlcmNlcHRvcklEOwogICAgIHByaXZhdGUgaW50IGNvbXB1dGVkSW50ZXJjZXB0b3JJRDsKIApAQCAtMzgsMjEgKzM4LDIxIEBACiAKICAgICBAUHJlUGFzc2l2YXRlCiAgICAgdm9pZCBwcmVQYXNzaXZhdGUoSW52b2NhdGlvbkNvbnRleHQgY3R4KSB7Ci0JcHJlUGFzc2l2YXRlQ2FsbGJhY2tDb3VudCsrOworICAgIHByZVBhc3NpdmF0ZUNhbGxiYWNrQ291bnQrKzsKICAgICB9CiAKICAgICBAUG9zdEFjdGl2YXRlCiAgICAgcHJpdmF0ZSB2b2lkIHBvc3RBY3RpdmF0ZShJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHsKLQlwb3N0QWN0aXZhdGVDYWxsYmFja0NvdW50Kys7CisgICAgcG9zdEFjdGl2YXRlQ2FsbGJhY2tDb3VudCsrOwogICAgIH0KIAogICAgIEBBcm91bmRJbnZva2UKICAgICBPYmplY3QgYXJvdW5kSW52b2tlKEludm9jYXRpb25Db250ZXh0IGN0eCkKLQkgICAgICAgIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIExpZmVjeWNsZUNhbGxiYWNrSW50ZXJjZXB0b3I6YXJvdW5kSW52b2tlKCkiKTsKLQlzbGVzcy5zYXlIZWxsbygpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiY2FsbGVyIHByaW5jaXBhbCA9ICIgKyBzZXNzaW9uQ3R4LmdldENhbGxlclByaW5jaXBhbCgpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIExpZmVjeWNsZUNhbGxiYWNrSW50ZXJjZXB0b3I6YXJvdW5kSW52b2tlKCkiKTsKKyAgICBzbGVzcy5zYXlIZWxsbygpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY2FsbGVyIHByaW5jaXBhbCA9ICIgKyBzZXNzaW9uQ3R4LmdldENhbGxlclByaW5jaXBhbCgpKTsKIAogICAgICAgICBpZiAoY3R4LmdldE1ldGhvZCgpLmdldE5hbWUoKS5lcXVhbHMoInNldElEIikpIHsKICAgICAgICAgICAgIGN0eC5nZXRDb250ZXh0RGF0YSgpLnB1dCgiTGlmZWN5Y2xlQ2FsbGJhY2tJbnRlcmNlcHRvciIsIHRoaXMpOwpAQCAtNjUsMzAgKzY1LDMwIEBACiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHJlc2V0TGlmZWN5Y2xlQ2FsbGJhY2tDb3VudGVycygpIHsKLQlwcmVQYXNzaXZhdGVDYWxsYmFja0NvdW50ID0gcG9zdEFjdGl2YXRlQ2FsbGJhY2tDb3VudCA9IDA7CisgICAgcHJlUGFzc2l2YXRlQ2FsbGJhY2tDb3VudCA9IHBvc3RBY3RpdmF0ZUNhbGxiYWNrQ291bnQgPSAwOwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldFByZVBhc3NpdmF0ZUNhbGxiYWNrQ291bnQoKSB7Ci0JcmV0dXJuIHByZVBhc3NpdmF0ZUNhbGxiYWNrQ291bnQ7CisgICAgcmV0dXJuIHByZVBhc3NpdmF0ZUNhbGxiYWNrQ291bnQ7CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0UG9zdEFjdGl2YXRlQ2FsbGJhY2tDb3VudCgpIHsKLQlyZXR1cm4gcG9zdEFjdGl2YXRlQ2FsbGJhY2tDb3VudDsKKyAgICByZXR1cm4gcG9zdEFjdGl2YXRlQ2FsbGJhY2tDb3VudDsKICAgICB9Ci0gICAgCisKIAogICAgIHZvaWQgc2V0SW50ZXJjZXB0b3JJRChpbnQgdmFsKSB7CiAgICAgICAgIHRoaXMuaW50ZXJjZXB0b3JJRCA9IHZhbDsKICAgICAgICAgdGhpcy5jb21wdXRlZEludGVyY2VwdG9ySUQgPSAyICogdmFsICsgMTsKICAgICB9Ci0gICAgCisKICAgICBpbnQgZ2V0SW50ZXJjZXB0b3JJRCgpIHsKICAgICAgICAgcmV0dXJuIGludGVyY2VwdG9ySUQ7CiAgICAgfQotICAgIAorCiAgICAgYm9vbGVhbiBjaGVja0ludGVyY2VwdG9ySUQoaW50IHZhbCkgewotICAgICAgICByZXR1cm4gKHZhbCA9PSBpbnRlcmNlcHRvcklEKSAmJiAKKyAgICAgICAgcmV0dXJuICh2YWwgPT0gaW50ZXJjZXB0b3JJRCkgJiYKICAgICAgICAgICAgIChjb21wdXRlZEludGVyY2VwdG9ySUQgPT0gMiAqIHZhbCArIDEpOwogICAgIH0KLSAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL1NmdWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvU2Z1bC5qYXZhCmluZGV4IGQyNzAzNzUuLjkwNmRlMjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvU2Z1bC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvU2Z1bC5qYXZhCkBAIC0yNywxNyArMjcsMTcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCk7CiAKICAgICBwdWJsaWMgaW50IGdldENvdW50KCk7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB0aHJvd0FwcEV4Y2VwdGlvbihTdHJpbmcgbXNnKQogICAgICAgICB0aHJvd3MgQXBwRXhjZXB0aW9uOwogCiAgICAgcHVibGljIFN0cmluZyBjb21wdXRlTWlkKGludCBtaW4sIGludCBtYXgpCi0JICAgIHRocm93cyBTd2FwQXJndW1lbnRzRXhjZXB0aW9uOworICAgICAgICB0aHJvd3MgU3dhcEFyZ3VtZW50c0V4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBTdHJpbmcgY2FsbER1bW15KCkKLQkgICAgdGhyb3dzIEV4Y2VwdGlvbjsKKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBTdHJpbmcgZWF0RXhjZXB0aW9uKCkgCisgICAgcHVibGljIFN0cmluZyBlYXRFeGNlcHRpb24oKQogICAgICAgICB0aHJvd3MgRWF0RXhjZXB0aW9uOwogCiAgICAgcHVibGljIHZvaWQgIHJlc2V0TGlmZWN5Y2xlQ2FsbGJhY2tDb3VudGVycygpOwpAQCAtNDUsOSArNDUsOSBAQAogICAgIHB1YmxpYyBpbnQgZ2V0UHJlUGFzc2l2YXRlQ2FsbGJhY2tDb3VudCgpOwogCiAgICAgcHVibGljIGludCBnZXRQb3N0QWN0aXZhdGVDYWxsYmFja0NvdW50KCk7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRJRChpbnQgdmFsKTsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGlzU3RhdGVSZXN0b3JlZCgpOwogCiAgICAgcHVibGljIE1hcDxTdHJpbmcsIEJvb2xlYW4+IGNoZWNrU2V0UGFyYW1zKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL1NmdWxFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IDQzODFmZWEuLmI5NzBhNGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvU2Z1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvU2Z1bEVKQi5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgQEVKQihuYW1lPSJmb29iYXIiKSBTbGVzcyBmb29iYXI7CiAKICAgICBwcml2YXRlIGludCBjb3VudCA9IDA7Ci0gICAgCisKICAgICBwcml2YXRlIGludCBpZDsKICAgICBwcml2YXRlIExpZmVjeWNsZUNhbGxiYWNrSW50ZXJjZXB0b3IgaW50ZXJjZXB0b3I7CiAKQEAgLTUyLDE3ICs1MiwxNyBAQAogCiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCOmhlbGxvKCkiKTsKLQlzbGVzcy5zYXlIZWxsbygpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiY2FsbGVyIHByaW5jaXBhbCA9ICIgKyBzYy5nZXRDYWxsZXJQcmluY2lwYWwoKSk7CisgICAgc2xlc3Muc2F5SGVsbG8oKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNhbGxlciBwcmluY2lwYWwgPSAiICsgc2MuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkpOwogICAgICAgICByZXR1cm4gImhlbGxvIjsKICAgICB9CiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHJpdmF0ZSBPYmplY3QgaW50ZXJjZXB0Q2FsbChJbnZvY2F0aW9uQ29udGV4dCBjdHgpCi0gICAJdGhyb3dzIEV4Y2VwdGlvbiAKKyAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotCVN5c3RlbS5vdXQucHJpbnRsbigiKipCZWFucyBBUk9VTkRJTlZPS0UrKyBbQEFyb3VuZEludm9rZV06ICIgKyBjdHguZ2V0TWV0aG9kKCkpOwotCWNvdW50Kys7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKkJlYW5zIEFST1VORElOVk9LRSsrIFtAQXJvdW5kSW52b2tlXTogIiArIGN0eC5nZXRNZXRob2QoKSk7CisgICAgY291bnQrKzsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmIChjdHguZ2V0TWV0aG9kKCkuZ2V0TmFtZSgpLmVxdWFscygic2V0SUQiKSkgewogICAgICAgICAgICAgICAgIGphdmEudXRpbC5NYXAgbWFwID0gY3R4LmdldENvbnRleHREYXRhKCk7CkBAIC03NSw5ICs3NSw5IEBACiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRDb3VudCgpIHsKLQkgICAgcmV0dXJuIGNvdW50OworICAgICAgICByZXR1cm4gY291bnQ7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdGhyb3dBcHBFeGNlcHRpb24oU3RyaW5nIG1zZykKICAgICAgICAgdGhyb3dzIEFwcEV4Y2VwdGlvbgogICAgIHsKQEAgLTg1LDE3ICs4NSwxNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgY29tcHV0ZU1pZChpbnQgbWluLCBpbnQgbWF4KQotCSAgICB0aHJvd3MgU3dhcEFyZ3VtZW50c0V4Y2VwdGlvbgorICAgICAgICB0aHJvd3MgU3dhcEFyZ3VtZW50c0V4Y2VwdGlvbgogICAgIHsKLQkgICAgcmV0dXJuIHNsZXNzLnNheUhlbGxvKCkKLQkJICAgIAkrICIsIE1pZHBvaW50IG9mICIgKyBtaW4gKyAiLCAiICsgbWF4ICsgIjsgIgotCQkJKyAgc2xlc3MuY29tcHV0ZU1pZFBvaW50KG1pbiwgbWF4KTsKKyAgICAgICAgcmV0dXJuIHNsZXNzLnNheUhlbGxvKCkKKyAgICAgICAgICAgICAgICArICIsIE1pZHBvaW50IG9mICIgKyBtaW4gKyAiLCAiICsgbWF4ICsgIjsgIgorICAgICAgICAgICAgKyAgc2xlc3MuY29tcHV0ZU1pZFBvaW50KG1pbiwgbWF4KTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGNhbGxEdW1teSgpCi0JICAgIHRocm93cyBFeGNlcHRpb24KKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLQkgICAgcmV0dXJuIGR1bW15LmR1bW15KCk7CisgICAgICAgIHJldHVybiBkdW1teS5kdW1teSgpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZWF0RXhjZXB0aW9uKCkKQEAgLTEwNiwyMiArMTA2LDIyIEBACiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRQcmVQYXNzaXZhdGVDYWxsYmFja0NvdW50KCkgewotCXJldHVybiBMaWZlY3ljbGVDYWxsYmFja0ludGVyY2VwdG9yLmdldFByZVBhc3NpdmF0ZUNhbGxiYWNrQ291bnQoKTsKKyAgICByZXR1cm4gTGlmZWN5Y2xlQ2FsbGJhY2tJbnRlcmNlcHRvci5nZXRQcmVQYXNzaXZhdGVDYWxsYmFja0NvdW50KCk7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRQb3N0QWN0aXZhdGVDYWxsYmFja0NvdW50KCkgewotCXJldHVybiBMaWZlY3ljbGVDYWxsYmFja0ludGVyY2VwdG9yLmdldFBvc3RBY3RpdmF0ZUNhbGxiYWNrQ291bnQoKTsKKyAgICByZXR1cm4gTGlmZWN5Y2xlQ2FsbGJhY2tJbnRlcmNlcHRvci5nZXRQb3N0QWN0aXZhdGVDYWxsYmFja0NvdW50KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcmVzZXRMaWZlY3ljbGVDYWxsYmFja0NvdW50ZXJzKCkgewotCUxpZmVjeWNsZUNhbGxiYWNrSW50ZXJjZXB0b3IucmVzZXRMaWZlY3ljbGVDYWxsYmFja0NvdW50ZXJzKCk7CisgICAgTGlmZWN5Y2xlQ2FsbGJhY2tJbnRlcmNlcHRvci5yZXNldExpZmVjeWNsZUNhbGxiYWNrQ291bnRlcnMoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRJRChpbnQgdmFsKSB7CiAgICAgICAgIHRoaXMuaWQgPSB2YWw7CiAgICAgICAgIGludGVyY2VwdG9yLnNldEludGVyY2VwdG9ySUQodmFsKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBpc1N0YXRlUmVzdG9yZWQoKSB7CiAgICAgICAgIHJldHVybiBpbnRlcmNlcHRvci5jaGVja0ludGVyY2VwdG9ySUQoaWQpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvU2xlc3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvU2xlc3MuamF2YQppbmRleCBjOGJlNmVjLi45MDQ0Zjg2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL1NsZXNzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2VqYi9TbGVzcy5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbygpOwogCiAgICAgcHVibGljIGRvdWJsZSBjb21wdXRlTWlkUG9pbnQoaW50IG1pbiwgaW50IG1heCkKLQkgICAgdGhyb3dzIFN3YXBBcmd1bWVudHNFeGNlcHRpb247CisgICAgICAgIHRocm93cyBTd2FwQXJndW1lbnRzRXhjZXB0aW9uOwogCiAgICAgcHVibGljIHZvaWQgc2V0Rm9vKEZvbyBmb28pCiAgICAgICAgIHRocm93cyBNeUJhZEV4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvU2xlc3NFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvU2xlc3NFSkIuamF2YQppbmRleCA2MTNlNTRhLi41MmQ0YjYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL1NsZXNzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2VqYi9TbGVzc0VKQi5qYXZhCkBAIC0yMywxOSArMjMsMTkgQEAKIC8vRGVmYXVsdCBpcyBATG9jYWwKIEBTdGF0ZWxlc3MKIHB1YmxpYyBjbGFzcyBTbGVzc0VKQgotCWltcGxlbWVudHMgU2xlc3MKKyAgICBpbXBsZW1lbnRzIFNsZXNzCiB7CiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbygpIHsKLQkgICAgcmV0dXJuICJIZWxsbyI7CisgICAgICAgIHJldHVybiAiSGVsbG8iOwogICAgIH0KIAogICAgIHB1YmxpYyBkb3VibGUgY29tcHV0ZU1pZFBvaW50KGludCBtaW4sIGludCBtYXgpCi0JICAgIHRocm93cyBTd2FwQXJndW1lbnRzRXhjZXB0aW9uCisgICAgICAgIHRocm93cyBTd2FwQXJndW1lbnRzRXhjZXB0aW9uCiAgICAgewotCSAgICBpZiAobWluID4gbWF4KSB7Ci0JCSAgICB0aHJvdyBuZXcgU3dhcEFyZ3VtZW50c0V4Y2VwdGlvbigiKCIrbWluKyIsICIrbWF4KyIpIik7Ci0JICAgIH0KLQkgICAgcmV0dXJuIChtaW4qMS4wK21heCkvMi4wOworICAgICAgICBpZiAobWluID4gbWF4KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU3dhcEFyZ3VtZW50c0V4Y2VwdGlvbigiKCIrbWluKyIsICIrbWF4KyIpIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIChtaW4qMS4wK21heCkvMi4wOwogICAgIH0KIAogICAgIEBJbnRlcmNlcHRvcnMoQXJndW1lbnRzVmVyaWZpZXIuY2xhc3MpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vbXVsdGkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9tdWx0aS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDBjYWMzMjUuLjQ1MjEzODAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9tdWx0aS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9tdWx0aS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImRldnRlc3QtaW50cm8tbXVsdGkiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9tdWx0aS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vbXVsdGkvYnVpbGQueG1sCmluZGV4IGYyMjk5Y2QuLmFjMjRiMGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9tdWx0aS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL211bHRpL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NsZXNzLmNsYXNzLCoqL1NsZXNzMzAuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02MSwxMCArNjEsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL211bHRpL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9tdWx0aS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZjc1NjIxYy4uMDMwNGEwZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL211bHRpL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vbXVsdGkvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiBARUpCKG5hbWU9ImVqYi9HRyIsIGJlYW5JbnRlcmZhY2U9U2xlc3MuY2xhc3MpCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzYsMTEgKzM2LDExIEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItZWpiMzAtYWxsb3dlZC1zZXNzaW9uSUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgKG5ldyBNeVRocmVhZCgpKS5zdGFydCgpOwpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICAgICAgKG5ldyBNeVRocmVhZCgpKS5zdGFydCgpOwogICAgICAgICAgICAgKG5ldyBNeVRocmVhZCgpKS5zdGFydCgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImludHJvIHNheUhlbGxvIiwgc3RhdC5QQVNTKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJpbnRybyBzYXlIZWxsbyIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIApAQCAtNTksNyArNTksNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTXlUaHJlYWQgZXh0ZW5kcyBUaHJlYWQgewogICAgICAgICBNeVRocmVhZCgpIHt9Ci0gICAgICAgIAorCiAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0dHIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vbXVsdGkvZWpiL2NvbS9zdW4vZWpiL2RldnRlc3QvU2xlc3MzMEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9tdWx0aS9lamIvY29tL3N1bi9lamIvZGV2dGVzdC9TbGVzczMwQmVhbi5qYXZhCmluZGV4IDJkMzg2NTMuLmUxNTgxODQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9tdWx0aS9lamIvY29tL3N1bi9lamIvZGV2dGVzdC9TbGVzczMwQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9tdWx0aS9lamIvY29tL3N1bi9lamIvZGV2dGVzdC9TbGVzczMwQmVhbi5qYXZhCkBAIC0zNywxMSArMzcsMTEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKCkgewotCXJldHVybiAiSGVsbG8iOworICAgIHJldHVybiAiSGVsbG8iOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHdhc0VqYkNyZWF0ZUNhbGxlZCgpIHsKLQlyZXR1cm4gZWpiQ3JlYXRlQ2FsbGVkOworICAgIHJldHVybiBlamJDcmVhdGVDYWxsZWQ7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vbXVsdGkvZWpiL2NvbS9zdW4vZWpiL2RldnRlc3QvU2xlc3NCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vbXVsdGkvZWpiL2NvbS9zdW4vZWpiL2RldnRlc3QvU2xlc3NCZWFuLmphdmEKaW5kZXggZWUzOWNkMi4uYzUyOGYxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL211bHRpL2VqYi9jb20vc3VuL2VqYi9kZXZ0ZXN0L1NsZXNzQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9tdWx0aS9lamIvY29tL3N1bi9lamIvZGV2dGVzdC9TbGVzc0JlYW4uamF2YQpAQCAtMzIsMTEgKzMyLDExIEBACiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbygpIHsKLQlyZXR1cm4gIkhlbGxvIjsKKyAgICByZXR1cm4gIkhlbGxvIjsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB3YXNFamJDcmVhdGVDYWxsZWQoKSB7Ci0JcmV0dXJuIGVqYkNyZWF0ZUNhbGxlZDsKKyAgICByZXR1cm4gZWpiQ3JlYXRlQ2FsbGVkOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL3N0YXRlbGVzcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL3N0YXRlbGVzcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDE5ZDQ3YTAuLjEwMWI2YjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9zdGF0ZWxlc3MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vc3RhdGVsZXNzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZGV2dGVzdC1pbnRyby1zdGF0ZWxlc3MiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9zdGF0ZWxlc3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL3N0YXRlbGVzcy9idWlsZC54bWwKaW5kZXggNzgyYjBiYy4uOWEwM2Q0OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL3N0YXRlbGVzcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL3N0YXRlbGVzcy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TbGVzcy5jbGFzcywqKi9TbGVzczMwLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjEsMTAgKzYxLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9zdGF0ZWxlc3MvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL3N0YXRlbGVzcy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZGE0N2E4Ny4uNzg1YzgxNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL3N0YXRlbGVzcy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL3N0YXRlbGVzcy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIEBFSkIobmFtZT0iZWpiL0dHIiwgYmVhbkludGVyZmFjZT1TbGVzcy5jbGFzcykKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zNiwxMSArMzYsMTEgQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1lamIzMC1hbGxvd2VkLXNlc3Npb25JRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBARUpCKG5hbWU9ImVqYi9rayIpIFNsZXNzIHNsZXNzOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBTbGVzczMwIHNsZXNzMzA7CkBAIC00OSwzOSArNDksMzkgQEAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvR0ciKTsKLQkgICAgc2xlc3Muc2F5SGVsbG8oKTsKKyAgICAgICAgc2xlc3Muc2F5SGVsbG8oKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJpbnRybyBzYXlIZWxsbyIsIHN0YXQuUEFTUyk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiaW50cm8gc2F5SGVsbG8iLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOworICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CiAKICAgICAgICAgdHJ5IHsKLQkgICAgcmVzdWx0ID0gc2xlc3Mud2FzRWpiQ3JlYXRlQ2FsbGVkKCk7CisgICAgICAgIHJlc3VsdCA9IHNsZXNzLndhc0VqYkNyZWF0ZUNhbGxlZCgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImludHJvIHdhc0VqYkNyZWF0ZUNhbGxlZCIsCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiaW50cm8gd2FzRWpiQ3JlYXRlQ2FsbGVkIiwgc3RhdC5GQUlMKTsKLQl9CisgICAgfQogCiAKICAgICAgICAgdHJ5IHsKLQkgICAgc2xlc3MzMC5zYXlIZWxsbygpOworICAgICAgICBzbGVzczMwLnNheUhlbGxvKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiaW50cm8gc2F5SGVsbG8zMCIsIHN0YXQuUEFTUyk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiaW50cm8gc2F5SGVsbG8zMCIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXJlc3VsdCA9IGZhbHNlOworICAgIHJlc3VsdCA9IGZhbHNlOwogCiAgICAgICAgIHRyeSB7Ci0JICAgIHJlc3VsdCA9IHNsZXNzMzAud2FzRWpiQ3JlYXRlQ2FsbGVkKCk7CisgICAgICAgIHJlc3VsdCA9IHNsZXNzMzAud2FzRWpiQ3JlYXRlQ2FsbGVkKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiaW50cm8gd2FzRWpiQ3JlYXRlQ2FsbGVkMzAiLAogICAgICAgICAgICAgICAgICAgICAocmVzdWx0ID09IGZhbHNlKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiaW50cm8gd2FzRWpiQ3JlYXRlQ2FsbGVkMzAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICB9CiAKIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vc3RhdGVsZXNzL2VqYi9jb20vc3VuL2VqYi9kZXZ0ZXN0L1NsZXNzMzBCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vc3RhdGVsZXNzL2VqYi9jb20vc3VuL2VqYi9kZXZ0ZXN0L1NsZXNzMzBCZWFuLmphdmEKaW5kZXggMmQzODY1My4uZTE1ODE4NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL3N0YXRlbGVzcy9lamIvY29tL3N1bi9lamIvZGV2dGVzdC9TbGVzczMwQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9zdGF0ZWxlc3MvZWpiL2NvbS9zdW4vZWpiL2RldnRlc3QvU2xlc3MzMEJlYW4uamF2YQpAQCAtMzcsMTEgKzM3LDExIEBACiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbygpIHsKLQlyZXR1cm4gIkhlbGxvIjsKKyAgICByZXR1cm4gIkhlbGxvIjsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB3YXNFamJDcmVhdGVDYWxsZWQoKSB7Ci0JcmV0dXJuIGVqYkNyZWF0ZUNhbGxlZDsKKyAgICByZXR1cm4gZWpiQ3JlYXRlQ2FsbGVkOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL3N0YXRlbGVzcy9lamIvY29tL3N1bi9lamIvZGV2dGVzdC9TbGVzc0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9zdGF0ZWxlc3MvZWpiL2NvbS9zdW4vZWpiL2RldnRlc3QvU2xlc3NCZWFuLmphdmEKaW5kZXggZWUzOWNkMi4uYzUyOGYxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL3N0YXRlbGVzcy9lamIvY29tL3N1bi9lamIvZGV2dGVzdC9TbGVzc0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vc3RhdGVsZXNzL2VqYi9jb20vc3VuL2VqYi9kZXZ0ZXN0L1NsZXNzQmVhbi5qYXZhCkBAIC0zMiwxMSArMzIsMTEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKCkgewotCXJldHVybiAiSGVsbG8iOworICAgIHJldHVybiAiSGVsbG8iOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHdhc0VqYkNyZWF0ZUNhbGxlZCgpIHsKLQlyZXR1cm4gZWpiQ3JlYXRlQ2FsbGVkOworICAgIHJldHVybiBlamJDcmVhdGVDYWxsZWQ7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2J1aWxkLnhtbAppbmRleCBiM2JkOGZmLi42MmEzYzY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9idWlsZC54bWwKQEAgLTg4LDkgKzg4LDkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWVqYjMwLXBlcnNpc3RlbmNlIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamIzMC1wZXJzaXN0ZW5jZSB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvY29udGV4dC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2NvbnRleHQvYnVpbGQucHJvcGVydGllcwppbmRleCAyNzU3YjFhLi5hODVmODgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvY29udGV4dC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9jb250ZXh0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIyICsxNSwyMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMwLXBlcnNpc3RlbmNlLWNvbnRleHQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2ltcGxlLmNsaWVudCIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbi5jbGllbnQuU3RhbmRhbG9uZUNsaWVudCIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvY29udGV4dC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvY29udGV4dC9idWlsZC54bWwKaW5kZXggYjYxZDk0Ny4uZTMzZjY0YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2NvbnRleHQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9jb250ZXh0L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTgsMTAgKzU4LDEwIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9L2xpYiIvPgotICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIgCisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1saWIuamFyIgogICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIGluY2x1ZGVzPSIqKi9QZXJzb24uY2xhc3MiPgotICAgICAgICA8L2phcj4gICAgICAgIAorICAgICAgICA8L2phcj4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LXBhcjEuamFyIj4KICAgICAgICAgICAgICA8bWV0YWluZiBmaWxlPSJkZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbCIvPgogICAgICAgICA8L2phcj4KQEAgLTcyLDkgKzcyLDkgQEAKICAgICAgICAgICAgICA8bWV0YWluZiBmaWxlPSJkZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbCIvPgogICAgICAgICA8L2phcj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TZnVsKi5jbGFzcywqKi9TbGVzcyouY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovU2Z1bC5jbGFzcywqKi9TbGVzcy5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgdXBkYXRlPSJ5ZXMiCkBAIC04Miw5ICs4Miw5IEBACiAgICAgICAgICAgICAgaW5jbHVkZXM9ImxpYi8ke2FwcG5hbWV9LWxpYi5qYXIsIGxpYi8ke2FwcG5hbWV9LXBhcjEuamFyLCBsaWIvJHthcHBuYW1lfS1wYXIyLmphciwgbGliLyR7YXBwbmFtZX0tcGFyMy5qYXIiPgogICAgICAgICA8L2phcj4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC05MiwxMCArOTIsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2NvbnRleHQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2NvbnRleHQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGVkM2MyYjMuLjlmZWQ0ZWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9jb250ZXh0L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvY29udGV4dC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBTdHJpbmcgcGVyc29uTmFtZTsKQEAgLTM1LDggKzM1LDggQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1lamIzMC1wZXJzaXN0ZW5jZS1jb250ZXh0SUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgcGVyc29uTmFtZSA9ICJkdWtlIjsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgfQogCiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBTbGVzcyBzbGVzczsKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKQEAgLTg0LDggKzg0LDggQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2NvbnRleHQvZWpiL1BlcnNvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2NvbnRleHQvZWpiL1BlcnNvbi5qYXZhCmluZGV4IDBmNmM3ZWMuLjM0ZDQ3MDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9jb250ZXh0L2VqYi9QZXJzb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvY29udGV4dC9lamIvUGVyc29uLmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKICAgICBwdWJsaWMgUGVyc29uKFN0cmluZyBuYW1lKXsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUgcHVibGljIFN0cmluZyB0b1N0cmluZygpewogICAgICAgICByZXR1cm4gIlBlcnNvbjogeyIrIihuYW1lID0gIituYW1lKyIpfSI7CiAgICAgfQpAQCAtNDQsNCArNDQsNCBAQAogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CiB9Ci0gCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9jb250ZXh0L2VqYi9TbGVzc0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9jb250ZXh0L2VqYi9TbGVzc0JlYW4uamF2YQppbmRleCA0YWJiZGQ2Li5lN2RmZjhjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvY29udGV4dC9lamIvU2xlc3NCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2NvbnRleHQvZWpiL1NsZXNzQmVhbi5qYXZhCkBAIC0zNiwxMSArMzYsMTEgQEAKICAgICBwcml2YXRlIEBQZXJzaXN0ZW5jZUNvbnRleHQodW5pdE5hbWU9ImVtMiIpIEVudGl0eU1hbmFnZXIgZW1SZW1vdmU7CiAKICAgICBwdWJsaWMgdm9pZCBjcmVhdGVQZXJzb24oU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgCisKICAgICAgICAgUGVyc29uIHAgPSBuZXcgUGVyc29uKG5hbWUpOwogCiAgICAgICAgIGJvb2xlYW4gY29udGFpbnNQID0gZW1DcmVhdGUuY29udGFpbnMocCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYmVmb3JlIHBlcnNpc3QgY29udGFpbnNQID0gIiArIGNvbnRhaW5zUCk7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJiZWZvcmUgcGVyc2lzdCBjb250YWluc1AgPSAiICsgY29udGFpbnNQKTsKICAgICAgICAgaWYoIGNvbnRhaW5zUCApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNvbnRhaW5zKCkgc2hvdWxkIGJlIGZhbHNlIik7CiAgICAgICAgIH0KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2hlbiBjYWxsaW5nIGNsb3NlKCkgb24gYSBjb250YWluZXItbWFuYWdlZCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRW50aXR5TWFuYWdlciIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vIGlzT3BlbiBkb2Vzbid0IG1ha2UgYW55IHNlbnNlIG9uIGEgY29udGFpbmVyLW1hbmFnZWQgZW50aXR5IG1hbmFnZXIsCiAgICAgICAgIC8vIGJ1dCBpdCBzaG91bGRuJ3QgdGhyb3cgYW4gZXhjZXB0aW9uLgogICAgICAgICBlbUNyZWF0ZS5pc09wZW4oKTsKQEAgLTExNSw4ICsxMTUsOCBAQAogICAgICAgICBpZiggcmVzdWx0czMuc2l6ZSgpICE9IDEpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIndyb25nIG51bSByZXN1bHRzIik7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICB9CiAKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR2V0dGluZyBxMSBmcm9tIEVNIik7Ci0gICAgICAgIFF1ZXJ5IHExID0gZW1GaW5kLmNyZWF0ZVF1ZXJ5KCJTRUxFQ1QgT0JKRUNUKHApIEZST00gUGVyc29uIHAgV0hFUkUgcC5uYW1lPSciICsgbmFtZSArICInIik7IAorICAgICAgICBRdWVyeSBxMSA9IGVtRmluZC5jcmVhdGVRdWVyeSgiU0VMRUNUIE9CSkVDVChwKSBGUk9NIFBlcnNvbiBwIFdIRVJFIHAubmFtZT0nIiArIG5hbWUgKyAiJyIpOwogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0aW5nIHExIik7CiAgICAgICAgIFBlcnNvbiBwMyA9IChQZXJzb24pIHExLmdldFNpbmdsZVJlc3VsdCgpOwpAQCAtMTU5LDcgKzE1OSw3IEBACiAKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdldHRpbmcgcTIgZnJvbSBFTSIpOwotICAgICAgICBRdWVyeSBxMiA9IGVtRmluZC5jcmVhdGVRdWVyeSgiU0VMRUNUIE9CSkVDVChwKSBGUk9NIFBlcnNvbiBwIFdIRVJFIHAubmFtZT0nIiArIG5hbWUgKyAiJyIpOyAKKyAgICAgICAgUXVlcnkgcTIgPSBlbUZpbmQuY3JlYXRlUXVlcnkoIlNFTEVDVCBPQkpFQ1QocCkgRlJPTSBQZXJzb24gcCBXSEVSRSBwLm5hbWU9JyIgKyBuYW1lICsgIiciKTsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgcTIuc2V0Rmlyc3RSZXN1bHQoLTEpOwpAQCAtMjE4LDcgKzIxOCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCBUcmFuc2FjdGlvblJlcXVpcmVkRXhjZXB0aW9uICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVuIGNhbGxpbmcgbWVyZ2Ugb3V0c2lkZSBhIHRyYW5zYWN0aW9uIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGVtRmluZC5yZW1vdmUocCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJyZW1vdmUgc2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbiIpOwpAQCAtMjY2LDcgKzI2Niw3IEBACiAgICAgICAgIGlmKCAhbmFtZS5lcXVhbHMocDguZ2V0TmFtZSgpKSApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImZpbmRlciByZXN1bHRzIG5vdCBlcXVpdmFsZW50Iik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgUXVlcnkgcTQgPSBlbUZpbmQuY3JlYXRlTmF0aXZlUXVlcnkoIlNFTEVDVCBwLm5hbWUgRlJPTSBFSkIzMF9QRVJTSVNURU5DRV9DT05URVhUX1BFUlNPTiBwIFdIRVJFIHAubmFtZSBMSUtFICciICsgbmFtZSArICInIik7CiAgICAgICAgIFN0cmluZyBwOSA9IChTdHJpbmcpIHE0LmdldFNpbmdsZVJlc3VsdCgpOyAvLyAoKFZlY3RvcikgcTQuZ2V0U2luZ2xlUmVzdWx0KCkpLmVsZW1lbnRBdCgwKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGb3VuZCAiICsgcDkpOwpAQCAtMjc5LDcgKzI3OSw3IEBACiAgICAgICAgIGlmKCAhbmFtZS5lcXVhbHMocDEwKSApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImZpbmRlciByZXN1bHRzIG5vdCBlcXVpdmFsZW50Iik7CiAgICAgICAgIH0KLSAgICAgICAgCisKIAogICAgICAgICBRdWVyeSBxNSA9IGVtRmluZC5jcmVhdGVOYXRpdmVRdWVyeSgiU0VMRUNUIHAubmFtZSBGUk9NIEVKQjMwX1BFUlNJU1RFTkNFX0NPTlRFWFRfUEVSU09OIHAgV0hFUkUgcC5uYW1lIExJS0UgJyIgKyBuYW1lICsgIiciLCBQZXJzb24uY2xhc3MpOwogICAgICAgICBQZXJzb24gcDExID0gKFBlcnNvbikgcTUuZ2V0U2luZ2xlUmVzdWx0KCk7CkBAIC0yOTYsNyArMjk2LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIFF1ZXJ5IHE2ID0gZW1GaW5kLmNyZWF0ZU5hdGl2ZVF1ZXJ5KCJTRUxFQ1QgcC5uYW1lIEZST00gRUpCMzBfUEVSU0lTVEVOQ0VfQ09OVEVYVF9QRVJTT04gcCBXSEVSRSBwLm5hbWUgTElLRSAnIiArIG5hbWUgKyAiJyIsICJQZXJzb25TcWxNYXBwaW5nIik7Ci0gICAgICAgIAorCiAgICAgICAgIFBlcnNvbiBwMTMgPSAoUGVyc29uKSBxNi5nZXRTaW5nbGVSZXN1bHQoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGb3VuZCAiICsgcDEzKTsKICAgICAgICAgaWYoICFuYW1lLmVxdWFscyhwMTMuZ2V0TmFtZSgpKSApIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGNhZDVkNzMuLjc3M2I4MzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzAtcGVyc2lzdGVuY2UtZWVtXzFzbHNiXzJzZnNicyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzaW1wbGUuY2xpZW50IiB2YWx1ZT0iY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uLmNsaWVudC5TdGFuZGFsb25lQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KQEAgLTI2LDEwICsyNiwxMCBAQAogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvYnVpbGQueG1sCmluZGV4IGIyNzlmMzMuLjViYzI4N2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTU4LDE3ICs1OCwxNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS9saWIiLz4KLSAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LWxpYi5qYXIiIAorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIKICAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICBpbmNsdWRlcz0iKiovUGVyc29uLmNsYXNzIj4KLSAgICAgICAgPC9qYXI+ICAgICAgICAKKyAgICAgICAgPC9qYXI+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1wYXIxLmphciI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZmlsZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KICAgICAgICAgPC9qYXI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Z1bCouY2xhc3MsKiovU2xlc3MqLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NmdWwuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIHVwZGF0ZT0ieWVzIgpAQCAtNzYsOSArNzYsOSBAQAogICAgICAgICAgICAgIGluY2x1ZGVzPSJsaWIvJHthcHBuYW1lfS1saWIuamFyLCBsaWIvJHthcHBuYW1lfS1wYXIxLmphciI+CiAgICAgICAgIDwvamFyPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTg2LDEwICs4NiwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNDIwOGRhMi4uNDFiYWVjMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNTMsMTQgKzUzLDE0IEBACiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJIGFtIGluIGNsaWVudCIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjYWxsaW5nIGNyZWF0ZVBlcnNvbigiICsgcGVyc29uTmFtZSArICIpIik7CiAgICAgICAgICAgICBzZnVsLnNldE5hbWUocGVyc29uTmFtZSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNyZWF0ZWQgIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgTWFwPFN0cmluZywgQm9vbGVhbj4gbWFwID0gc2Z1bC5kb1Rlc3RzKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gbWFwLmtleVNldCgpLml0ZXJhdG9yKCk7CiAgICAgICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSBpdGVyLm5leHQoKTsKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotICAgIAlyZXR1cm47CisgICAgICAgIHJldHVybjsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvZWpiL1BlcnNvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvZWpiL1BlcnNvbi5qYXZhCmluZGV4IGYwNWY1YjIuLjRhMmNhODkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL2VqYi9QZXJzb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9lamIvUGVyc29uLmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgcmV0dXJuIGRhdGE7CiAgICAgfQogCi0gICAgQE92ZXJyaWRlIAorICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgIHJldHVybiAiUGVyc29uOiAobmFtZT0iICsgbmFtZSArICI7IGRhdGE9ICIgKyBkYXRhICsgIikiOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL2VqYi9TZnVsQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvZWpiL1NmdWxCZWFuLmphdmEKaW5kZXggM2RkOTJmZi4uNzhlZDMwYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvZWpiL1NmdWxCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvZWpiL1NmdWxCZWFuLmphdmEKQEAgLTM0LDI3ICszNCwyNyBAQAogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKIAogQFN0YXRlZnVsCi1ARUpCKG5hbWU9ImVqYi9TZnVsQmVhbiIsIAorQEVKQihuYW1lPSJlamIvU2Z1bEJlYW4iLAogICAgICAgICBiZWFuSW50ZXJmYWNlPWNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAucGVyc2lzdGVuY2UuZWVtXzFzbHNiXzJzZnNicy5TZnVsRGVsZWdhdGUuY2xhc3MpCiAKIHB1YmxpYyBjbGFzcyBTZnVsQmVhbgogICAgIGltcGxlbWVudHMgU2Z1bCB7CiAKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwotICAgIAorCiAgICAgcHJpdmF0ZSBARUpCIFNmdWxEZWxlZ2F0ZSBkZWxlZ2F0ZTsKIAogICAgIHByaXZhdGUgQEVKQiBTbGVzcyBzbGVzczsKLSAgICAKKwogICAgIHByaXZhdGUgQFBlcnNpc3RlbmNlQ29udGV4dCh1bml0TmFtZT0ibGliL2VqYi1lamIzMC1wZXJzaXN0ZW5jZS1lZW1fMXNsc2JfMnNmc2JzLXBhcjEuamFyI2VtIiwKLSAgICAgICAgICAgICAgICB0eXBlPVBlcnNpc3RlbmNlQ29udGV4dFR5cGUuRVhURU5ERUQpIAorICAgICAgICAgICAgICAgIHR5cGU9UGVyc2lzdGVuY2VDb250ZXh0VHlwZS5FWFRFTkRFRCkKICAgICAgICAgICAgIEVudGl0eU1hbmFnZXIgZXh0ZW5kZWRFTTsKLSAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN0cmluZyBsb29rdXBOYW1lID0gImphdmE6Y29tcC9lbnYvZWpiL1NmdWxCZWFuIjsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpbml0Q3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBkZWxlZ2F0ZSA9IChTZnVsRGVsZWdhdGUpIGluaXRDdHgubG9va3VwKGxvb2t1cE5hbWUpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTY0LDcgKzY0LDcgQEAKIAogICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBCb29sZWFuPiBkb1Rlc3RzKCkgewogICAgICAgICBQZXJzb24gcGVyc29uID0gbmV3IFBlcnNvbihuYW1lKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGRlbGVnYXRlTmFtZSA9ICJkZWxnbmFtZV8iICsgbmFtZTsKICAgICAgICAgU3RyaW5nIGRlbGVnYXRlRGF0YT0gImRlbGdkYXRhOiAiICsgbmFtZTsKIApAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgICAgICBwZWVyT3BTdGF0dXMgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIG1hcC5wdXQoInBlZXJGb3VuZE1lICgtdmUgdGVzdCkiLCBwZWVyT3BTdGF0dXMpOwotICAgICAgICAKKwogICAgICAgICBtYXAucHV0KCJkZWxlZ2F0ZVJlbW92ZWRNZSIsCiAgICAgICAgICAgICAgICAgZGVsZWdhdGUucmVtb3ZlKG5hbWUpKTsKIApAQCAtMTE1LDcgKzExNSw3IEBACiAKICAgICAgICAgbWFwLnB1dCgiaUNhbm5vdEZpbmRNZSAoLXZlIHRlc3QpIiwKICAgICAgICAgICAgIChmaW5kKG5hbWUpID09IG51bGwpKTsKLSAgICAgICAgCisKICAgICAgICAgbWFwLnB1dCgicmVtb3ZlZERlbGVnYXRlIiwKICAgICAgICAgICAgIHJlbW92ZVBlcnNvbihkZWxlZ2F0ZU5hbWUpKTsKIApAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgICAgICBwZWVyT3BTdGF0dXMgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIG1hcC5wdXQoInBlZXJDYW5ub3RmaW5kRGVsZWdhdGUgKC12ZSB0ZXN0KSIsIHBlZXJPcFN0YXR1cyk7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBwZWVyTmFtZSA9ICJfcGVlcl9uYW1lXyIgKyBuYW1lOwogICAgICAgICBTdHJpbmcgcGVlckRhdGEgPSAiX3BlZXJfZGF0YV8iICsgbmFtZTsKIApAQCAtMTY0LDUgKzE2NCw1IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlbW92ZWQ7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9lamIvU2Z1bERlbGVnYXRlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9lamIvU2Z1bERlbGVnYXRlLmphdmEKaW5kZXggMzYxYzJhMS4uZjU5ZThiZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvZWpiL1NmdWxEZWxlZ2F0ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL2VqYi9TZnVsRGVsZWdhdGUuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgIFBlcnNvbiBmaW5kKFN0cmluZyBuYW1lKTsKIAogICAgIGJvb2xlYW4gcmVtb3ZlKFN0cmluZyBuYW1lKTsKLSAgICAKKwogICAgIEVudGl0eU1hbmFnZXIgZ2V0RU0oKTsKIAogICAgIFNmdWxQZWVyIGdldFNmdWxQZWVyKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9lamIvU2Z1bERlbGVnYXRlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvZWpiL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YQppbmRleCBmY2YyZjFjLi4xNzRkZWY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9lamIvU2Z1bERlbGVnYXRlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL2VqYi9TZnVsRGVsZWdhdGVCZWFuLmphdmEKQEAgLTQxLDExICs0MSwxMSBAQAogICAgIHB1YmxpYyBFbnRpdHlNYW5hZ2VyIGdldEVNKCkgewogICAgICAgICByZXR1cm4gZXh0ZW5kZWRFTTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgUGVyc29uIGNyZWF0ZShTdHJpbmcgbmFtZSwgU3RyaW5nIGRhdGEpIHsKIAogICAgICAgICBQZXJzb24gcCA9IG5ldyBQZXJzb24obmFtZSwgZGF0YSk7Ci0gICAgICAgIAorCiAgICAgICAgIGV4dGVuZGVkRU0ucGVyc2lzdChwKTsKICAgICAgICAgcmV0dXJuIHA7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvZWpiL1NmdWxQZWVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9lamIvU2Z1bFBlZXIuamF2YQppbmRleCBjNDNmMjg3Li5iZTJiMDU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9lamIvU2Z1bFBlZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9lamIvU2Z1bFBlZXIuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgIFBlcnNvbiBmaW5kKFN0cmluZyBuYW1lKTsKIAogICAgIGJvb2xlYW4gcmVtb3ZlKFN0cmluZyBuYW1lKTsKLSAgICAKKwogICAgIEVudGl0eU1hbmFnZXIgZ2V0RU0oKTsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvZWpiL1NmdWxQZWVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvZWpiL1NmdWxQZWVyQmVhbi5qYXZhCmluZGV4IGQxZjY0MDcuLjFiOWRkYTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL2VqYi9TZnVsUGVlckJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9lamIvU2Z1bFBlZXJCZWFuLmphdmEKQEAgLTM3LDExICszNywxMSBAQAogICAgIHB1YmxpYyBFbnRpdHlNYW5hZ2VyIGdldEVNKCkgewogICAgICAgICByZXR1cm4gZXh0ZW5kZWRFTTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgUGVyc29uIGNyZWF0ZShTdHJpbmcgbmFtZSwgU3RyaW5nIGRhdGEpIHsKIAogICAgICAgICBQZXJzb24gcCA9IG5ldyBQZXJzb24obmFtZSwgZGF0YSk7Ci0gICAgICAgIAorCiAgICAgICAgIGV4dGVuZGVkRU0ucGVyc2lzdChwKTsKICAgICAgICAgcmV0dXJuIHA7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvc3FsL2NyZWF0ZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9zcWwvY3JlYXRlLnNxbAppbmRleCA2ZDZjZWQzLi5hMTc2MWNlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9zcWwvY3JlYXRlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9zcWwvY3JlYXRlLnNxbApAQCAtMSw0ICsxLDQgQEAKLUNSRUFURSBUQUJMRSBFSkIzMF9QRVJTSVNURU5DRV9FRU1fMVNMU0JfMlNGU0JTX1BFUlNPTiAoDQotICAgIE5BTUUgVkFSQ0hBUigyNTYpIE5PVCBOVUxMIFBSSU1BUlkgS0VZLA0KLSAgICBEQVRBIFZBUkNIQVIoMjU2KQ0KLSk7DQorQ1JFQVRFIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTV8xU0xTQl8yU0ZTQlNfUEVSU09OICgKKyAgICBOQU1FIFZBUkNIQVIoMjU2KSBOT1QgTlVMTCBQUklNQVJZIEtFWSwKKyAgICBEQVRBIFZBUkNIQVIoMjU2KQorKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL3NxbC9kcm9wLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL3NxbC9kcm9wLnNxbAppbmRleCA4YzllNWM0Li45YzIzYTViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9zcWwvZHJvcC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvc3FsL2Ryb3Auc3FsCkBAIC0xICsxIEBACi1EUk9QIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTV8xU0xTQl8yU0ZTQlNfUEVSU09OOw0KK0RST1AgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNXzFTTFNCXzJTRlNCU19QRVJTT047CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvYnVpbGQucHJvcGVydGllcwppbmRleCBmNTFjZjZlLi4wNzc3NzYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMwLXBlcnNpc3RlbmNlLWVlbV8zc2ZzYnMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2ltcGxlLmNsaWVudCIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbi5jbGllbnQuU3RhbmRhbG9uZUNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CkBAIC0yNiwxMCArMjYsMTAgQEAKIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2J1aWxkLnhtbAppbmRleCBhMWU3OGMzLi41NTVlZjhjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01OCwxNyArNTgsMTcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0vbGliIi8+Ci0gICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1saWIuamFyIiAKKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LWxpYi5qYXIiCiAgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgaW5jbHVkZXM9IioqL1BlcnNvbi5jbGFzcyI+Ci0gICAgICAgIDwvamFyPiAgICAgICAgCisgICAgICAgIDwvamFyPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tcGFyMS5qYXIiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGZpbGU9ImRlc2NyaXB0b3IvcGVyc2lzdGVuY2UueG1sIi8+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1NmdWwqLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NmdWwuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIHVwZGF0ZT0ieWVzIgpAQCAtNzYsOSArNzYsOSBAQAogICAgICAgICAgICAgIGluY2x1ZGVzPSJsaWIvJHthcHBuYW1lfS1saWIuamFyLCBsaWIvJHthcHBuYW1lfS1wYXIxLmphciI+CiAgICAgICAgIDwvamFyPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTg2LDEwICs4NiwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNDk4ZmM1ZS4uNzFjNzNiMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNTMsMTQgKzUzLDE0IEBACiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJIGFtIGluIGNsaWVudCIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjYWxsaW5nIGNyZWF0ZVBlcnNvbigiICsgcGVyc29uTmFtZSArICIpIik7CiAgICAgICAgICAgICBzZnVsLnNldE5hbWUocGVyc29uTmFtZSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNyZWF0ZWQgIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgTWFwPFN0cmluZywgQm9vbGVhbj4gbWFwID0gc2Z1bC5kb1Rlc3RzKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gbWFwLmtleVNldCgpLml0ZXJhdG9yKCk7CiAgICAgICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSBpdGVyLm5leHQoKTsKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotICAgIAlyZXR1cm47CisgICAgICAgIHJldHVybjsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvZWpiL1BlcnNvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvZWpiL1BlcnNvbi5qYXZhCmluZGV4IDNjMjk1OGUuLmUyY2YwYzZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9lamIvUGVyc29uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvZWpiL1BlcnNvbi5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CiAgICAgfQogCi0gICAgQE92ZXJyaWRlIAorICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgIHJldHVybiAiUGVyc29uOiAobmFtZT0iICsgbmFtZSArICI7IGRhdGE9ICIgKyBkYXRhICsgIikiOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2VqYi9TZnVsQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvZWpiL1NmdWxCZWFuLmphdmEKaW5kZXggN2E1ZGFiOS4uZjliYzNhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvZWpiL1NmdWxCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvZWpiL1NmdWxCZWFuLmphdmEKQEAgLTM0LDI1ICszNCwyNSBAQAogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKIAogQFN0YXRlZnVsCi1ARUpCKG5hbWU9ImVqYi9TZnVsQmVhbiIsIAorQEVKQihuYW1lPSJlamIvU2Z1bEJlYW4iLAogICAgICAgICBiZWFuSW50ZXJmYWNlPWNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAucGVyc2lzdGVuY2UuZWVtXzNzZnNicy5TZnVsRGVsZWdhdGUuY2xhc3MpCiAKIHB1YmxpYyBjbGFzcyBTZnVsQmVhbgogICAgIGltcGxlbWVudHMgU2Z1bCB7CiAKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwotICAgIAorCiAgICAgcHJpdmF0ZSBARUpCIFNmdWxEZWxlZ2F0ZSBkZWxlZ2F0ZTsKLSAgICAKKwogICAgIHByaXZhdGUgQFBlcnNpc3RlbmNlQ29udGV4dCh1bml0TmFtZT0ibGliL2VqYi1lamIzMC1wZXJzaXN0ZW5jZS1lZW1fM3Nmc2JzLXBhcjEuamFyI2VtIiwKLSAgICAgICAgICAgICAgICB0eXBlPVBlcnNpc3RlbmNlQ29udGV4dFR5cGUuRVhURU5ERUQpIAorICAgICAgICAgICAgICAgIHR5cGU9UGVyc2lzdGVuY2VDb250ZXh0VHlwZS5FWFRFTkRFRCkKICAgICAgICAgICAgIEVudGl0eU1hbmFnZXIgZXh0ZW5kZWRFTTsKLSAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN0cmluZyBsb29rdXBOYW1lID0gImphdmE6Y29tcC9lbnYvZWpiL1NmdWxCZWFuIjsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpbml0Q3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBkZWxlZ2F0ZSA9IChTZnVsRGVsZWdhdGUpIGluaXRDdHgubG9va3VwKGxvb2t1cE5hbWUpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTYyLDcgKzYyLDcgQEAKIAogICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBCb29sZWFuPiBkb1Rlc3RzKCkgewogICAgICAgICBQZXJzb24gcGVyc29uID0gbmV3IFBlcnNvbihuYW1lKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGRlbGVnYXRlTmFtZSA9ICJkZWxnbmFtZV8iICsgbmFtZTsKICAgICAgICAgU3RyaW5nIGRlbGVnYXRlRGF0YT0gImRlbGdkYXRhOiAiICsgbmFtZTsKIApAQCAtODgsNyArODgsNyBAQAogCiAgICAgICAgIG1hcC5wdXQoInBlZXJGb3VuZE1lIiwKICAgICAgICAgICAgICAgICAocGVlci5maW5kKG5hbWUpICE9IG51bGwpKTsKLSAgICAgICAgCisKICAgICAgICAgbWFwLnB1dCgiZGVsZWdhdGVSZW1vdmVkTWUiLAogICAgICAgICAgICAgICAgIGRlbGVnYXRlLnJlbW92ZShuYW1lKSk7CiAKQEAgLTk3LDEzICs5NywxMyBAQAogCiAgICAgICAgIG1hcC5wdXQoImlDYW5ub3RGaW5kTWUgKC12ZSB0ZXN0KSIsCiAgICAgICAgICAgICAoZmluZChuYW1lKSA9PSBudWxsKSk7Ci0gICAgICAgIAorCiAgICAgICAgIG1hcC5wdXQoInJlbW92ZWREZWxlZ2F0ZSIsCiAgICAgICAgICAgICByZW1vdmVQZXJzb24oZGVsZWdhdGVOYW1lKSk7CiAKICAgICAgICAgbWFwLnB1dCgicGVlckNhbm5vdGZpbmREZWxlZ2F0ZSAoLXZlIHRlc3QpIiwKICAgICAgICAgICAgICghIHBlZXIucmVtb3ZlKGRlbGVnYXRlTmFtZSkpKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHBlZXJOYW1lID0gIl9wZWVyX25hbWVfIiArIG5hbWU7CiAgICAgICAgIFN0cmluZyBwZWVyRGF0YSA9ICJfcGVlcl9kYXRhXyIgKyBuYW1lOwogCkBAIC0xMzYsNSArMTM2LDUgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVtb3ZlZDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2VqYi9TZnVsRGVsZWdhdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2VqYi9TZnVsRGVsZWdhdGUuamF2YQppbmRleCAwZjQ1ODA3Li43N2EwNDVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9lamIvU2Z1bERlbGVnYXRlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvZWpiL1NmdWxEZWxlZ2F0ZS5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgUGVyc29uIGZpbmQoU3RyaW5nIG5hbWUpOwogCiAgICAgYm9vbGVhbiByZW1vdmUoU3RyaW5nIG5hbWUpOwotICAgIAorCiAgICAgRW50aXR5TWFuYWdlciBnZXRFTSgpOwogCiAgICAgU2Z1bFBlZXIgZ2V0U2Z1bFBlZXIoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2VqYi9TZnVsRGVsZWdhdGVCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9lamIvU2Z1bERlbGVnYXRlQmVhbi5qYXZhCmluZGV4IDdjYjM3MTEuLjhlZjQ1MTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2VqYi9TZnVsRGVsZWdhdGVCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvZWpiL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YQpAQCAtNDEsMTEgKzQxLDExIEBACiAgICAgcHVibGljIEVudGl0eU1hbmFnZXIgZ2V0RU0oKSB7CiAgICAgICAgIHJldHVybiBleHRlbmRlZEVNOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBQZXJzb24gY3JlYXRlKFN0cmluZyBuYW1lLCBTdHJpbmcgZGF0YSkgewogCiAgICAgICAgIFBlcnNvbiBwID0gbmV3IFBlcnNvbihuYW1lLCBkYXRhKTsKLSAgICAgICAgCisKICAgICAgICAgZXh0ZW5kZWRFTS5wZXJzaXN0KHApOwogICAgICAgICByZXR1cm4gcDsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9lamIvU2Z1bFBlZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2VqYi9TZnVsUGVlci5qYXZhCmluZGV4IGFlMDUxZDUuLmIxOWJjZGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2VqYi9TZnVsUGVlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2VqYi9TZnVsUGVlci5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgUGVyc29uIGZpbmQoU3RyaW5nIG5hbWUpOwogCiAgICAgYm9vbGVhbiByZW1vdmUoU3RyaW5nIG5hbWUpOwotICAgIAorCiAgICAgRW50aXR5TWFuYWdlciBnZXRFTSgpOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9lamIvU2Z1bFBlZXJCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9lamIvU2Z1bFBlZXJCZWFuLmphdmEKaW5kZXggNjY3OGFjOS4uODI0N2ZjNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvZWpiL1NmdWxQZWVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2VqYi9TZnVsUGVlckJlYW4uamF2YQpAQCAtMzcsMTEgKzM3LDExIEBACiAgICAgcHVibGljIEVudGl0eU1hbmFnZXIgZ2V0RU0oKSB7CiAgICAgICAgIHJldHVybiBleHRlbmRlZEVNOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBQZXJzb24gY3JlYXRlKFN0cmluZyBuYW1lLCBTdHJpbmcgZGF0YSkgewogCiAgICAgICAgIFBlcnNvbiBwID0gbmV3IFBlcnNvbihuYW1lLCBkYXRhKTsKLSAgICAgICAgCisKICAgICAgICAgZXh0ZW5kZWRFTS5wZXJzaXN0KHApOwogICAgICAgICByZXR1cm4gcDsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9zcWwvY3JlYXRlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL3NxbC9jcmVhdGUuc3FsCmluZGV4IGY4MjllNTYuLjgwOWM1YWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL3NxbC9jcmVhdGUuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL3NxbC9jcmVhdGUuc3FsCkBAIC0xLDQgKzEsNCBAQAotQ1JFQVRFIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTV8zU0ZTQlNfUEVSU09OICgNCi0gICAgTkFNRSBWQVJDSEFSKDI1NikgTk9UIE5VTEwgUFJJTUFSWSBLRVksDQotICAgIERBVEEgVkFSQ0hBUigyNTYpDQotKTsNCitDUkVBVEUgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNXzNTRlNCU19QRVJTT04gKAorICAgIE5BTUUgVkFSQ0hBUigyNTYpIE5PVCBOVUxMIFBSSU1BUlkgS0VZLAorICAgIERBVEEgVkFSQ0hBUigyNTYpCispOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvc3FsL2Ryb3Auc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvc3FsL2Ryb3Auc3FsCmluZGV4IDBhYzgzYzIuLjZmZjU3MGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL3NxbC9kcm9wLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9zcWwvZHJvcC5zcWwKQEAgLTEgKzEgQEAKLURST1AgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNXzNTRlNCU19QRVJTT047DQorRFJPUCBUQUJMRSBFSkIzMF9QRVJTSVNURU5DRV9FRU1fM1NGU0JTX1BFUlNPTjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODkyZTI5NC4uYmExZjUxYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMwLXBlcnNpc3RlbmNlLWVlbV9hZGFwdGVkIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNpbXBsZS5jbGllbnQiIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24uY2xpZW50LlN0YW5kYWxvbmVDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgpAQCAtMjYsMTAgKzI2LDEwIEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL2J1aWxkLnhtbAppbmRleCA2OGZjOWFkLi5lMzUxZWE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTU4LDE3ICs1OCwxNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS9saWIiLz4KLSAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LWxpYi5qYXIiIAorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIKICAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICBpbmNsdWRlcz0iKiovUGVyc29uLmNsYXNzIj4KLSAgICAgICAgPC9qYXI+ICAgICAgICAKKyAgICAgICAgPC9qYXI+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1wYXIxLmphciI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZmlsZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KICAgICAgICAgPC9qYXI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Z1bCouY2xhc3MsICoqL0FkYXB0ZWRMb2NhbEhvbWUuY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovU2Z1bC5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgdXBkYXRlPSJ5ZXMiCkBAIC03Niw5ICs3Niw5IEBACiAgICAgICAgICAgICAgaW5jbHVkZXM9ImxpYi8ke2FwcG5hbWV9LWxpYi5qYXIsIGxpYi8ke2FwcG5hbWV9LXBhcjEuamFyIj4KICAgICAgICAgPC9qYXI+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtODYsMTAgKzg2LDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDQ0MGFjZTEuLmUxMTM2YzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNTMsMTMgKzUzLDEzIEBACiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJIGFtIGluIGNsaWVudCIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjYWxsaW5nIHNldE5hbWUoIiArIHBlcnNvbk5hbWUgKyAiKSIpOwogICAgICAgICAgICAgc2Z1bC5zZXROYW1lKHBlcnNvbk5hbWUpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IG1hcCA9IHNmdWwuZG9UZXN0cygpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOwogICAgICAgICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gaXRlci5uZXh0KCk7CkBAIC03Miw3ICs3Miw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLSAgICAJcmV0dXJuOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9lamIvUGVyc29uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvZWpiL1BlcnNvbi5qYXZhCmluZGV4IDc2MDNjN2QuLjZmYmNiZDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9lamIvUGVyc29uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL2VqYi9QZXJzb24uamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOwogICAgIH0KIAotICAgIEBPdmVycmlkZSAKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgICByZXR1cm4gIlBlcnNvbjogKG5hbWU9IiArIG5hbWUgKyAiOyBkYXRhPSAiICsgZGF0YSArICIpIjsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvZWpiL1NmdWxCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvZWpiL1NmdWxCZWFuLmphdmEKaW5kZXggYzRmZTU0Ni4uODNjYTJhZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL2VqYi9TZnVsQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9lamIvU2Z1bEJlYW4uamF2YQpAQCAtNDAsMjIgKzQwLDIyIEBACiAgICAgaW1wbGVtZW50cyBTZnVsIHsKIAogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7Ci0gICAgCisKICAgICBARUpCIHByaXZhdGUgQWRhcHRlZExvY2FsSG9tZSBob21lOwogCiAgICAgcHJpdmF0ZSBTZnVsRGVsZWdhdGUgZGVsZWdhdGU7Ci0gICAgCisKICAgICBwcml2YXRlIEBQZXJzaXN0ZW5jZUNvbnRleHQodW5pdE5hbWU9ImxpYi9lamItZWpiMzAtcGVyc2lzdGVuY2UtZWVtX2FkYXB0ZWQtcGFyMS5qYXIjZW0iLAotICAgICAgICAgICAgICAgIHR5cGU9UGVyc2lzdGVuY2VDb250ZXh0VHlwZS5FWFRFTkRFRCkgCisgICAgICAgICAgICAgICAgdHlwZT1QZXJzaXN0ZW5jZUNvbnRleHRUeXBlLkVYVEVOREVEKQogICAgICAgICAgICAgRW50aXR5TWFuYWdlciBleHRlbmRlZEVNOwotIAorCiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KIAogICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBCb29sZWFuPiBkb1Rlc3RzKCkgewogICAgICAgICBQZXJzb24gcGVyc29uID0gbmV3IFBlcnNvbihuYW1lKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGRlbGVnYXRlTmFtZSA9ICJkZWxnbmFtZV8iICsgbmFtZTsKICAgICAgICAgU3RyaW5nIGRlbGVnYXRlRGF0YT0gImRlbGdkYXRhOiAiICsgbmFtZTsKICAgICAgICAgdHJ5IHsKQEAgLTY5LDExICs2OSwxMSBAQAogCiAgICAgICAgIGV4dGVuZGVkRU0ucGVyc2lzdChwZXJzb24pOwogICAgICAgICBQZXJzb24gZm91bmRQZXJzb24gPSBkZWxlZ2F0ZS5maW5kKG5hbWUpOwotICAgICAgICAKKwogICAgICAgICBib29sZWFuIGRlbGVnYXRlUmVtb3ZlZE1lID0gZGVsZWdhdGUucmVtb3ZlKG5hbWUpOwotICAgICAgICAKKwogICAgICAgICBib29sZWFuIHJlbW92ZWREZWxlZ2F0ZSA9IHJlbW92ZVBlcnNvbihkZWxlZ2F0ZU5hbWUpOwotICAgICAgICAKKwogICAgICAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiBtYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+KCk7CiAgICAgICAgIG1hcC5wdXQoImZpbmREZWxlZ2F0ZUNyZWF0ZWRQZXJzb24iLCAoZFBlcnNvbiAhPSBudWxsKSk7CiAgICAgICAgIG1hcC5wdXQoImRlbGVnYXRlRm91bmRNZSIsIChmb3VuZFBlcnNvbiAhPSBudWxsKSk7CkBAIC0xMDEsNSArMTAxLDUgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVtb3ZlZDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9lamIvU2Z1bERlbGVnYXRlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvZWpiL1NmdWxEZWxlZ2F0ZS5qYXZhCmluZGV4IGUyY2Q4OGYuLmFjYzVlZjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9lamIvU2Z1bERlbGVnYXRlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL2VqYi9TZnVsRGVsZWdhdGUuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogICAgIFBlcnNvbiBmaW5kKFN0cmluZyBuYW1lKTsKIAogICAgIGJvb2xlYW4gcmVtb3ZlKFN0cmluZyBuYW1lKTsKLSAgICAKKwogICAgIEVudGl0eU1hbmFnZXIgZ2V0RU0oKTsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL2VqYi9TZnVsRGVsZWdhdGVCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvZWpiL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YQppbmRleCBmMjU4NjE3Li4xMDBlZjZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvZWpiL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvZWpiL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgIHB1YmxpYyBFbnRpdHlNYW5hZ2VyIGdldEVNKCkgewogICAgICAgICByZXR1cm4gZXh0ZW5kZWRFTTsKICAgICB9Ci0gICAgCisKICAgICBASW5pdAogICAgIHB1YmxpYyB2b2lkIGNyZWF0ZURlbGVnYXRlKFN0cmluZyBuYW1lLCBTdHJpbmcgZGF0YSkgewogICAgIH0KQEAgLTU1LDcgKzU1LDcgQEAKICAgICBwdWJsaWMgUGVyc29uIGNyZWF0ZVBlcnNvbihTdHJpbmcgbmFtZSwgU3RyaW5nIGRhdGEpIHsKIAogICAgICAgICBQZXJzb24gcGVyc29uID0gbmV3IFBlcnNvbihuYW1lLCBkYXRhKTsKLSAgICAgICAgCisKICAgICAgICAgZXh0ZW5kZWRFTS5wZXJzaXN0KHBlcnNvbik7CiAgICAgICAgIHJldHVybiBwZXJzb247CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL3NxbC9jcmVhdGUuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL3NxbC9jcmVhdGUuc3FsCmluZGV4IDYxODQyZjEuLjg1YThkYjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9zcWwvY3JlYXRlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvc3FsL2NyZWF0ZS5zcWwKQEAgLTEsNCArMSw0IEBACi1DUkVBVEUgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNX0FEQVBURURfUEVSU09OICgNCi0gICAgTkFNRSBWQVJDSEFSKDI1NikgTk9UIE5VTEwgUFJJTUFSWSBLRVksDQotICAgIERBVEEgVkFSQ0hBUigyNTYpDQotKTsNCitDUkVBVEUgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNX0FEQVBURURfUEVSU09OICgKKyAgICBOQU1FIFZBUkNIQVIoMjU2KSBOT1QgTlVMTCBQUklNQVJZIEtFWSwKKyAgICBEQVRBIFZBUkNIQVIoMjU2KQorKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9zcWwvZHJvcC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvc3FsL2Ryb3Auc3FsCmluZGV4IGZkYzkxMjguLjc2OWRkMzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9zcWwvZHJvcC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL3NxbC9kcm9wLnNxbApAQCAtMSArMSBAQAotRFJPUCBUQUJMRSBFSkIzMF9QRVJTSVNURU5DRV9FRU1fQURBUFRFRF9QRVJTT047DQorRFJPUCBUQUJMRSBFSkIzMF9QRVJTSVNURU5DRV9FRU1fQURBUFRFRF9QRVJTT047CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2luamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vYnVpbGQucHJvcGVydGllcwppbmRleCAzOGVlYTY5Li42ZWZiMzFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2luamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1faW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMwLXBlcnNpc3RlbmNlLWVlbV9pbmplY3Rpb24iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2ltcGxlLmNsaWVudCIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbi5jbGllbnQuU3RhbmRhbG9uZUNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CkBAIC0yNiwxMCArMjYsMTAgQEAKIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1faW5qZWN0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1faW5qZWN0aW9uL2J1aWxkLnhtbAppbmRleCBmZTdjNjM3Li41MjA5Yjg0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2luamVjdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01OCwxNyArNTgsMTcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0vbGliIi8+Ci0gICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1saWIuamFyIiAKKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LWxpYi5qYXIiCiAgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgaW5jbHVkZXM9IioqL1BlcnNvbi5jbGFzcyI+Ci0gICAgICAgIDwvamFyPiAgICAgICAgCisgICAgICAgIDwvamFyPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tcGFyMS5qYXIiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGZpbGU9ImRlc2NyaXB0b3IvcGVyc2lzdGVuY2UueG1sIi8+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1NmdWwqLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NmdWwuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIHVwZGF0ZT0ieWVzIgpAQCAtNzYsOSArNzYsOSBAQAogICAgICAgICAgICAgIGluY2x1ZGVzPSJsaWIvJHthcHBuYW1lfS1saWIuamFyLCBsaWIvJHthcHBuYW1lfS1wYXIxLmphciI+CiAgICAgICAgIDwvamFyPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTg2LDEwICs4NiwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2luamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2luamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZWFlNTBlNy4uYmVkYjU3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1faW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNTMsMTQgKzUzLDE0IEBACiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJIGFtIGluIGNsaWVudCIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjYWxsaW5nIGNyZWF0ZVBlcnNvbigiICsgcGVyc29uTmFtZSArICIpIik7CiAgICAgICAgICAgICBzZnVsLnNldE5hbWUocGVyc29uTmFtZSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNyZWF0ZWQgIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgTWFwPFN0cmluZywgQm9vbGVhbj4gbWFwID0gc2Z1bC5kb1Rlc3RzKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gbWFwLmtleVNldCgpLml0ZXJhdG9yKCk7CiAgICAgICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSBpdGVyLm5leHQoKTsKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotICAgIAlyZXR1cm47CisgICAgICAgIHJldHVybjsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vZWpiL1BlcnNvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vZWpiL1BlcnNvbi5qYXZhCmluZGV4IDY4M2Y1YTMuLjZhOTVmODQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1faW5qZWN0aW9uL2VqYi9QZXJzb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2luamVjdGlvbi9lamIvUGVyc29uLmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTsKICAgICB9CiAKLSAgICBAT3ZlcnJpZGUgCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgcmV0dXJuICJQZXJzb246IChuYW1lPSIgKyBuYW1lICsgIjsgZGF0YT0gIiArIGRhdGEgKyAiKSI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vZWpiL1NmdWxCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2luamVjdGlvbi9lamIvU2Z1bEJlYW4uamF2YQppbmRleCA4ZWVmOTg2Li5hMDhlOWMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2luamVjdGlvbi9lamIvU2Z1bEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2luamVjdGlvbi9lamIvU2Z1bEJlYW4uamF2YQpAQCAtMzQsMjUgKzM0LDI1IEBACiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwogCiBAU3RhdGVmdWwKLUBFSkIobmFtZT0iZWpiL1NmdWxCZWFuIiwgCitARUpCKG5hbWU9ImVqYi9TZnVsQmVhbiIsCiAgICAgICAgIGJlYW5JbnRlcmZhY2U9Y29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5wZXJzaXN0ZW5jZS5lZW1faW5qZWN0aW9uLlNmdWxEZWxlZ2F0ZS5jbGFzcykKIAogcHVibGljIGNsYXNzIFNmdWxCZWFuCiAgICAgaW1wbGVtZW50cyBTZnVsIHsKIAogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7Ci0gICAgCisKICAgICBwcml2YXRlIEBFSkIgU2Z1bERlbGVnYXRlIGRlbGVnYXRlOwotICAgIAorCiAgICAgcHJpdmF0ZSBAUGVyc2lzdGVuY2VDb250ZXh0KHVuaXROYW1lPSJsaWIvZWpiLWVqYjMwLXBlcnNpc3RlbmNlLWVlbV9pbmplY3Rpb24tcGFyMS5qYXIjZW0iLAotICAgICAgICAgICAgICAgIHR5cGU9UGVyc2lzdGVuY2VDb250ZXh0VHlwZS5FWFRFTkRFRCkgCisgICAgICAgICAgICAgICAgdHlwZT1QZXJzaXN0ZW5jZUNvbnRleHRUeXBlLkVYVEVOREVEKQogICAgICAgICAgICAgRW50aXR5TWFuYWdlciBleHRlbmRlZEVNOwotIAorCiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3RyaW5nIGxvb2t1cE5hbWUgPSAiamF2YTpjb21wL2Vudi9lamIvU2Z1bEJlYW4iOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGluaXRDdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIGRlbGVnYXRlID0gKFNmdWxEZWxlZ2F0ZSkgaW5pdEN0eC5sb29rdXAobG9va3VwTmFtZSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNjIsNyArNjIsNyBAQAogCiAgICAgcHVibGljIE1hcDxTdHJpbmcsIEJvb2xlYW4+IGRvVGVzdHMoKSB7CiAgICAgICAgIFBlcnNvbiBwZXJzb24gPSBuZXcgUGVyc29uKG5hbWUpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgZGVsZWdhdGVOYW1lID0gImRlbGduYW1lXyIgKyBuYW1lOwogICAgICAgICBTdHJpbmcgZGVsZWdhdGVEYXRhPSAiZGVsZ2RhdGE6ICIgKyBuYW1lOwogICAgICAgICBkZWxlZ2F0ZS5jcmVhdGUoZGVsZWdhdGVOYW1lLCBkZWxlZ2F0ZURhdGEpOwpAQCAtNzEsMTEgKzcxLDExIEBACiAKICAgICAgICAgZXh0ZW5kZWRFTS5wZXJzaXN0KHBlcnNvbik7CiAgICAgICAgIFBlcnNvbiBmb3VuZFBlcnNvbiA9IGRlbGVnYXRlLmZpbmQobmFtZSk7Ci0gICAgICAgIAorCiAgICAgICAgIGJvb2xlYW4gZGVsZWdhdGVSZW1vdmVkTWUgPSBkZWxlZ2F0ZS5yZW1vdmUobmFtZSk7Ci0gICAgICAgIAorCiAgICAgICAgIGJvb2xlYW4gcmVtb3ZlZERlbGVnYXRlID0gcmVtb3ZlUGVyc29uKGRlbGVnYXRlTmFtZSk7Ci0gICAgICAgIAorCiAgICAgICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IG1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgQm9vbGVhbj4oKTsKICAgICAgICAgbWFwLnB1dCgiZmluZERlbGVnYXRlQ3JlYXRlZFBlcnNvbiIsIChkUGVyc29uICE9IG51bGwpKTsKICAgICAgICAgbWFwLnB1dCgiZGVsZWdhdGVGb3VuZE1lIiwgKGZvdW5kUGVyc29uICE9IG51bGwpKTsKQEAgLTEwMyw1ICsxMDMsNSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZW1vdmVkOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vZWpiL1NmdWxEZWxlZ2F0ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vZWpiL1NmdWxEZWxlZ2F0ZS5qYXZhCmluZGV4IDViNzJjNzMuLjY3MjhmOGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1faW5qZWN0aW9uL2VqYi9TZnVsRGVsZWdhdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2luamVjdGlvbi9lamIvU2Z1bERlbGVnYXRlLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKICAgICBQZXJzb24gZmluZChTdHJpbmcgbmFtZSk7CiAKICAgICBib29sZWFuIHJlbW92ZShTdHJpbmcgbmFtZSk7Ci0gICAgCisKICAgICBFbnRpdHlNYW5hZ2VyIGdldEVNKCk7CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1faW5qZWN0aW9uL2VqYi9TZnVsRGVsZWdhdGVCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2luamVjdGlvbi9lamIvU2Z1bERlbGVnYXRlQmVhbi5qYXZhCmluZGV4IDUyZjkyMGMuLmY0OTBhMTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1faW5qZWN0aW9uL2VqYi9TZnVsRGVsZWdhdGVCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vZWpiL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YQpAQCAtMzcsMTIgKzM3LDEyIEBACiAgICAgcHVibGljIEVudGl0eU1hbmFnZXIgZ2V0RU0oKSB7CiAgICAgICAgIHJldHVybiBleHRlbmRlZEVNOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBQZXJzb24gY3JlYXRlKFN0cmluZyBuYW1lLCBTdHJpbmcgZGF0YSkgewogCiAgICAgICAgIFBlcnNvbiBwID0gbmV3IFBlcnNvbihuYW1lKTsKICAgICAgICAgcC5zZXREYXRhKGRhdGEpOwotICAgICAgICAKKwogICAgICAgICBleHRlbmRlZEVNLnBlcnNpc3QocCk7CiAgICAgICAgIHJldHVybiBwOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1faW5qZWN0aW9uL3NxbC9jcmVhdGUuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vc3FsL2NyZWF0ZS5zcWwKaW5kZXggZmE2MDc0Mi4uYzBhYjQzZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vc3FsL2NyZWF0ZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vc3FsL2NyZWF0ZS5zcWwKQEAgLTEsNCArMSw0IEBACi1DUkVBVEUgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNX0lOSkVDVElPTl9QRVJTT04gKA0KLSAgICBOQU1FIFZBUkNIQVIoMjU2KSBOT1QgTlVMTCBQUklNQVJZIEtFWSwNCi0gICAgREFUQSBWQVJDSEFSKDI1NikNCi0pOw0KK0NSRUFURSBUQUJMRSBFSkIzMF9QRVJTSVNURU5DRV9FRU1fSU5KRUNUSU9OX1BFUlNPTiAoCisgICAgTkFNRSBWQVJDSEFSKDI1NikgTk9UIE5VTEwgUFJJTUFSWSBLRVksCisgICAgREFUQSBWQVJDSEFSKDI1NikKKyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2luamVjdGlvbi9zcWwvZHJvcC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2luamVjdGlvbi9zcWwvZHJvcC5zcWwKaW5kZXggNWViMTM2Zi4uZDAxMmM2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vc3FsL2Ryb3Auc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1faW5qZWN0aW9uL3NxbC9kcm9wLnNxbApAQCAtMSArMSBAQAotRFJPUCBUQUJMRSBFSkIzMF9QRVJTSVNURU5DRV9FRU1fSU5KRUNUSU9OX1BFUlNPTjsNCitEUk9QIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTV9JTkpFQ1RJT05fUEVSU09OOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXBhc3NpdmF0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcGFzc2l2YXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCBjYzM4ZWJlLi5iNzJhNzkxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcGFzc2l2YXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcGFzc2l2YXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzAtcGVyc2lzdGVuY2UtZWVtcGFzc2l2YXRpb24iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2ltcGxlLmNsaWVudCIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbi5jbGllbnQuU3RhbmRhbG9uZUNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CkBAIC0yNiwxMCArMjYsMTAgQEAKIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wYXNzaXZhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcGFzc2l2YXRpb24vYnVpbGQueG1sCmluZGV4IDhlZDQ0MDYuLjQ1Nzc0YTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wYXNzaXZhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXBhc3NpdmF0aW9uL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTgsMTcgKzU4LDE3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9L2xpYiIvPgotICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIgCisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1saWIuamFyIgogICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIGluY2x1ZGVzPSIqKi9QZXJzb24uY2xhc3MiPgotICAgICAgICA8L2phcj4gICAgICAgIAorICAgICAgICA8L2phcj4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LXBhcjEuamFyIj4KICAgICAgICAgICAgICA8bWV0YWluZiBmaWxlPSJkZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbCIvPgogICAgICAgICA8L2phcj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TZnVsKi5jbGFzcywqKi9TbGVzcyouY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovU2Z1bC5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgdXBkYXRlPSJ5ZXMiCkBAIC03Niw5ICs3Niw5IEBACiAgICAgICAgICAgICAgaW5jbHVkZXM9ImxpYi8ke2FwcG5hbWV9LWxpYi5qYXIsIGxpYi8ke2FwcG5hbWV9LXBhcjEuamFyIj4KICAgICAgICAgPC9qYXI+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtODYsMTAgKzg2LDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wYXNzaXZhdGlvbi9lamIvc3JjL2NvbS9zdW4vczFhc2Rldi9lamIzMC9lZW1wYXNzaXZhdGlvbi9TZnVsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcGFzc2l2YXRpb24vZWpiL3NyYy9jb20vc3VuL3MxYXNkZXYvZWpiMzAvZWVtcGFzc2l2YXRpb24vU2Z1bC5qYXZhCmluZGV4IDdhZTQ0ODIuLmQwMGJiY2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wYXNzaXZhdGlvbi9lamIvc3JjL2NvbS9zdW4vczFhc2Rldi9lamIzMC9lZW1wYXNzaXZhdGlvbi9TZnVsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXBhc3NpdmF0aW9uL2VqYi9zcmMvY29tL3N1bi9zMWFzZGV2L2VqYjMwL2VlbXBhc3NpdmF0aW9uL1NmdWwuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogICAgIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7CiAKICAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiBkb1Rlc3RzKFN0cmluZyBwcmVmaXgpOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgY3JlYXRlU2Z1bERlbGVnYXRlcygpOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcGFzc2l2YXRpb24vZWpiL3NyYy9jb20vc3VuL3MxYXNkZXYvZWpiMzAvZWVtcGFzc2l2YXRpb24vU2Z1bEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wYXNzaXZhdGlvbi9lamIvc3JjL2NvbS9zdW4vczFhc2Rldi9lamIzMC9lZW1wYXNzaXZhdGlvbi9TZnVsQmVhbi5qYXZhCmluZGV4IDQzZWNhOTAuLmFlOTYyMDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wYXNzaXZhdGlvbi9lamIvc3JjL2NvbS9zdW4vczFhc2Rldi9lamIzMC9lZW1wYXNzaXZhdGlvbi9TZnVsQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wYXNzaXZhdGlvbi9lamIvc3JjL2NvbS9zdW4vczFhc2Rldi9lamIzMC9lZW1wYXNzaXZhdGlvbi9TZnVsQmVhbi5qYXZhCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgICAgICBTdHJpbmcgbG9va3VwTmFtZSA9ICJqYXZhOmNvbXAvZW52L2VqYi9TZnVsQmVhbiI7CiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpbml0Q3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBkZWxlZ2F0ZSA9IChTZnVsRGVsZWdhdGUpIGluaXRDdHgubG9va3VwKGxvb2t1cE5hbWUpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKipFRU0gRGVsZWdhdGU6ICIgKyBleHRlbmRlZEVNLmdldERlbGVnYXRlKCkuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXBhc3NpdmF0aW9uL2VqYi9zcmMvY29tL3N1bi9zMWFzZGV2L2VqYjMwL2VlbXBhc3NpdmF0aW9uL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wYXNzaXZhdGlvbi9lamIvc3JjL2NvbS9zdW4vczFhc2Rldi9lamIzMC9lZW1wYXNzaXZhdGlvbi9TZnVsRGVsZWdhdGVCZWFuLmphdmEKaW5kZXggODc2NmVjOS4uZTY2OTZhYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXBhc3NpdmF0aW9uL2VqYi9zcmMvY29tL3N1bi9zMWFzZGV2L2VqYjMwL2VlbXBhc3NpdmF0aW9uL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcGFzc2l2YXRpb24vZWpiL3NyYy9jb20vc3VuL3MxYXNkZXYvZWpiMzAvZWVtcGFzc2l2YXRpb24vU2Z1bERlbGVnYXRlQmVhbi5qYXZhCkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKiplamJQQVNTSVZBVEUoKSBjYWxsZWQuLi4iKTsKICAgICAgICAgcGFzc2l2YXRpb25Db3VudCsrOwogICAgIH0KLSAgICAKKwogICAgIEBQb3N0QWN0aXZhdGUKICAgICBwdWJsaWMgdm9pZCBwb3N0QWN0aXZhdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKiplamJBY3RpdmF0ZSgpIGNhbGxlZC4uLiIpOwpAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgcHVibGljIGludCBnZXRQYXNzaXZhdGlvbkNvdW50KCkgewogICAgICAgICByZXR1cm4gcGFzc2l2YXRpb25Db3VudDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgaW50IGdldEFjdGl2YXRpb25Db3VudCgpIHsKICAgICAgICAgcmV0dXJuIGFjdGl2YXRlQ291bnQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXBhc3NpdmF0aW9uL3NxbC9jcmVhdGUuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXBhc3NpdmF0aW9uL3NxbC9jcmVhdGUuc3FsCmluZGV4IDc5ODUzNDAuLjBiYjZiYmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wYXNzaXZhdGlvbi9zcWwvY3JlYXRlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcGFzc2l2YXRpb24vc3FsL2NyZWF0ZS5zcWwKQEAgLTEsNCArMSw0IEBACi1DUkVBVEUgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNUEFTU0lWQVRJT05fUEVSU09OICgNCi0gICAgTkFNRSBWQVJDSEFSKDI1NikgTk9UIE5VTEwgUFJJTUFSWSBLRVksDQotICAgIERBVEEgVkFSQ0hBUigyNTYpDQotKTsNCitDUkVBVEUgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNUEFTU0lWQVRJT05fUEVSU09OICgKKyAgICBOQU1FIFZBUkNIQVIoMjU2KSBOT1QgTlVMTCBQUklNQVJZIEtFWSwKKyAgICBEQVRBIFZBUkNIQVIoMjU2KQorKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wYXNzaXZhdGlvbi9zcWwvZHJvcC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcGFzc2l2YXRpb24vc3FsL2Ryb3Auc3FsCmluZGV4IDZkOGM2N2YuLjM2Njc1ZWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wYXNzaXZhdGlvbi9zcWwvZHJvcC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXBhc3NpdmF0aW9uL3NxbC9kcm9wLnNxbApAQCAtMSArMSBAQAotRFJPUCBUQUJMRSBFSkIzMF9QRVJTSVNURU5DRV9FRU1QQVNTSVZBVElPTl9QRVJTT047DQorRFJPUCBUQUJMRSBFSkIzMF9QRVJTSVNURU5DRV9FRU1QQVNTSVZBVElPTl9QRVJTT047CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk4ZDc4Y2MuLjNmNzkwNzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMC1wZXJzaXN0ZW5jZS1lZW1wcm9wYWdhdGlvbiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzaW1wbGUuY2xpZW50IiB2YWx1ZT0iY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uLmNsaWVudC5TdGFuZGFsb25lQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KQEAgLTI2LDEwICsyNiwxMCBAQAogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXByb3BhZ2F0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9idWlsZC54bWwKaW5kZXggNjliZTM3Yy4uZWZiZGY1ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXByb3BhZ2F0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01OCwxNyArNTgsMTcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0vbGliIi8+Ci0gICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1saWIuamFyIiAKKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LWxpYi5qYXIiCiAgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgaW5jbHVkZXM9IioqL1BlcnNvbi5jbGFzcyI+Ci0gICAgICAgIDwvamFyPiAgICAgICAgCisgICAgICAgIDwvamFyPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tcGFyMS5qYXIiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGZpbGU9ImRlc2NyaXB0b3IvcGVyc2lzdGVuY2UueG1sIi8+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1NmdWwqLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NmdWwuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIHVwZGF0ZT0ieWVzIgpAQCAtNzYsOSArNzYsOSBAQAogICAgICAgICAgICAgIGluY2x1ZGVzPSJsaWIvJHthcHBuYW1lfS1saWIuamFyLCBsaWIvJHthcHBuYW1lfS1wYXIxLmphciI+CiAgICAgICAgIDwvamFyPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTg2LDEwICs4NiwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXByb3BhZ2F0aW9uL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAzMzVhNjIzLi5jNzA2ZDE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTUzLDE0ICs1MywxNCBAQAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSSBhbSBpbiBjbGllbnQiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY2FsbGluZyBjcmVhdGVQZXJzb24oIiArIHBlcnNvbk5hbWUgKyAiKSIpOwogICAgICAgICAgICAgc2Z1bC5zZXROYW1lKHBlcnNvbk5hbWUpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjcmVhdGVkICIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IG1hcCA9IHNmdWwuZG9UZXN0cygpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOwogICAgICAgICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gaXRlci5uZXh0KCk7CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLSAgICAJcmV0dXJuOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9lamIvUGVyc29uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vZWpiL1BlcnNvbi5qYXZhCmluZGV4IDRjMTY2ZDUuLjJhMGVmZjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9lamIvUGVyc29uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXByb3BhZ2F0aW9uL2VqYi9QZXJzb24uamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOwogICAgIH0KIAotICAgIEBPdmVycmlkZSAKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgICByZXR1cm4gIlBlcnNvbjogKG5hbWU9IiArIG5hbWUgKyAiOyBkYXRhPSAiICsgZGF0YSArICIpIjsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vZWpiL1NmdWxCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vZWpiL1NmdWxCZWFuLmphdmEKaW5kZXggMDZlMmNiNS4uOWFkMTZlNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXByb3BhZ2F0aW9uL2VqYi9TZnVsQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9lamIvU2Z1bEJlYW4uamF2YQpAQCAtMzQsMjcgKzM0LDI3IEBACiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwogCiBAU3RhdGVmdWwKLUBFSkIobmFtZT0iZWpiL1NmdWxCZWFuIiwgCitARUpCKG5hbWU9ImVqYi9TZnVsQmVhbiIsCiAgICAgICAgIGJlYW5JbnRlcmZhY2U9Y29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5wZXJzaXN0ZW5jZS5lZW1wcm9wYWdhdGlvbi5TZnVsRGVsZWdhdGUuY2xhc3MpCiAKIHB1YmxpYyBjbGFzcyBTZnVsQmVhbgogICAgIGltcGxlbWVudHMgU2Z1bCB7CiAKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwotICAgIAorCiAgICAgLy9wcml2YXRlIEBFSkIgU2Z1bERlbGVnYXRlIGRlbGVnYXRlOwotICAgIAorCiAgICAgcHJpdmF0ZSBAUGVyc2lzdGVuY2VDb250ZXh0KHVuaXROYW1lPSJsaWIvZWpiLWVqYjMwLXBlcnNpc3RlbmNlLWVlbXByb3BhZ2F0aW9uLXBhcjEuamFyI2VtIiwKLSAgICAgICAgICAgICAgICB0eXBlPVBlcnNpc3RlbmNlQ29udGV4dFR5cGUuRVhURU5ERUQpIAorICAgICAgICAgICAgICAgIHR5cGU9UGVyc2lzdGVuY2VDb250ZXh0VHlwZS5FWFRFTkRFRCkKICAgICAgICAgICAgIEVudGl0eU1hbmFnZXIgZXh0ZW5kZWRFTTsKLSAKKwogICAgIHByaXZhdGUgU2Z1bERlbGVnYXRlIGRlbGVnYXRlOwogCiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3RyaW5nIGxvb2t1cE5hbWUgPSAiamF2YTpjb21wL2Vudi9lamIvU2Z1bEJlYW4iOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGluaXRDdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIGRlbGVnYXRlID0gKFNmdWxEZWxlZ2F0ZSkgaW5pdEN0eC5sb29rdXAobG9va3VwTmFtZSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNjQsNyArNjQsNyBAQAogCiAgICAgcHVibGljIE1hcDxTdHJpbmcsIEJvb2xlYW4+IGRvVGVzdHMoKSB7CiAgICAgICAgIFBlcnNvbiBwZXJzb24gPSBuZXcgUGVyc29uKG5hbWUpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgZGVsZWdhdGVOYW1lID0gImRlbGduYW1lXyIgKyBuYW1lOwogICAgICAgICBTdHJpbmcgZGVsZWdhdGVEYXRhPSAiZGVsZ2RhdGE6ICIgKyBuYW1lOwogICAgICAgICBkZWxlZ2F0ZS5jcmVhdGUoZGVsZWdhdGVOYW1lLCBkZWxlZ2F0ZURhdGEpOwpAQCAtNzMsMTEgKzczLDExIEBACiAKICAgICAgICAgZXh0ZW5kZWRFTS5wZXJzaXN0KHBlcnNvbik7CiAgICAgICAgIFBlcnNvbiBmb3VuZFBlcnNvbiA9IGRlbGVnYXRlLmZpbmQobmFtZSk7Ci0gICAgICAgIAorCiAgICAgICAgIGJvb2xlYW4gZGVsZWdhdGVSZW1vdmVkTWUgPSBkZWxlZ2F0ZS5yZW1vdmUobmFtZSk7Ci0gICAgICAgIAorCiAgICAgICAgIGJvb2xlYW4gcmVtb3ZlZERlbGVnYXRlID0gcmVtb3ZlUGVyc29uKGRlbGVnYXRlTmFtZSk7Ci0gICAgICAgIAorCiAgICAgICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IG1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgQm9vbGVhbj4oKTsKICAgICAgICAgbWFwLnB1dCgiZmluZERlbGVnYXRlQ3JlYXRlZFBlcnNvbiIsIChkUGVyc29uICE9IG51bGwpKTsKICAgICAgICAgbWFwLnB1dCgiZGVsZWdhdGVGb3VuZE1lIiwgKGZvdW5kUGVyc29uICE9IG51bGwpKTsKQEAgLTEwNSw1ICsxMDUsNSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZW1vdmVkOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXByb3BhZ2F0aW9uL2VqYi9TZnVsRGVsZWdhdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9lamIvU2Z1bERlbGVnYXRlLmphdmEKaW5kZXggZTMyOTJhYy4uYzYyZjMzNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXByb3BhZ2F0aW9uL2VqYi9TZnVsRGVsZWdhdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vZWpiL1NmdWxEZWxlZ2F0ZS5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgUGVyc29uIGZpbmQoU3RyaW5nIG5hbWUpOwogCiAgICAgYm9vbGVhbiByZW1vdmUoU3RyaW5nIG5hbWUpOwotICAgIAorCiAgICAgRW50aXR5TWFuYWdlciBnZXRFTSgpOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vZWpiL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9lamIvU2Z1bERlbGVnYXRlQmVhbi5qYXZhCmluZGV4IGE0OTVlOTguLmM0YTdkZTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9lamIvU2Z1bERlbGVnYXRlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9lamIvU2Z1bERlbGVnYXRlQmVhbi5qYXZhCkBAIC0zNywxMSArMzcsMTEgQEAKICAgICBwdWJsaWMgRW50aXR5TWFuYWdlciBnZXRFTSgpIHsKICAgICAgICAgcmV0dXJuIGV4dGVuZGVkRU07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFBlcnNvbiBjcmVhdGUoU3RyaW5nIG5hbWUsIFN0cmluZyBkYXRhKSB7CiAKICAgICAgICAgUGVyc29uIHAgPSBuZXcgUGVyc29uKG5hbWUsIGRhdGEpOwotICAgICAgICAKKwogICAgICAgICBleHRlbmRlZEVNLnBlcnNpc3QocCk7CiAgICAgICAgIHJldHVybiBwOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9zcWwvY3JlYXRlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9zcWwvY3JlYXRlLnNxbAppbmRleCA2ZjdhMDU5Li5mYWZkNWViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vc3FsL2NyZWF0ZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXByb3BhZ2F0aW9uL3NxbC9jcmVhdGUuc3FsCkBAIC0xLDQgKzEsNCBAQAotQ1JFQVRFIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTVBST1BBR0FUSU9OX1BFUlNPTiAoDQotICAgIE5BTUUgVkFSQ0hBUigyNTYpIE5PVCBOVUxMIFBSSU1BUlkgS0VZLA0KLSAgICBEQVRBIFZBUkNIQVIoMjU2KQ0KLSk7DQorQ1JFQVRFIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTVBST1BBR0FUSU9OX1BFUlNPTiAoCisgICAgTkFNRSBWQVJDSEFSKDI1NikgTk9UIE5VTEwgUFJJTUFSWSBLRVksCisgICAgREFUQSBWQVJDSEFSKDI1NikKKyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vc3FsL2Ryb3Auc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXByb3BhZ2F0aW9uL3NxbC9kcm9wLnNxbAppbmRleCBlNDQzYzNlLi40MTljYTYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vc3FsL2Ryb3Auc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9zcWwvZHJvcC5zcWwKQEAgLTEgKzEgQEAKLURST1AgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNUFJPUEFHQVRJT05fUEVSU09OOw0KK0RST1AgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNUFJPUEFHQVRJT05fUEVSU09OOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXNmc2JwYXNzaXZhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXNmc2JwYXNzaXZhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI3NjgzZGYuLmMxNDNmMmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1zZnNicGFzc2l2YXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtc2ZzYnBhc3NpdmF0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMwLXBlcnNpc3RlbmNlLWVlbXNmc2JwYXNzaXZhdGlvbiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzaW1wbGUuY2xpZW50IiB2YWx1ZT0iY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uLmNsaWVudC5TdGFuZGFsb25lQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KQEAgLTI2LDEwICsyNiwxMCBAQAogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXNmc2JwYXNzaXZhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtc2ZzYnBhc3NpdmF0aW9uL2J1aWxkLnhtbAppbmRleCAyN2JhNzE1Li5lYWYzYjY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtc2ZzYnBhc3NpdmF0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtc2ZzYnBhc3NpdmF0aW9uL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTgsMTcgKzU4LDE3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9L2xpYiIvPgotICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIgCisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1saWIuamFyIgogICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIGluY2x1ZGVzPSIqKi9QZXJzb24uY2xhc3MiPgotICAgICAgICA8L2phcj4gICAgICAgIAorICAgICAgICA8L2phcj4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LXBhcjEuamFyIj4KICAgICAgICAgICAgICA8bWV0YWluZiBmaWxlPSJkZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbCIvPgogICAgICAgICA8L2phcj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TZnVsKi5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TZnVsLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiB1cGRhdGU9InllcyIKQEAgLTc2LDkgKzc2LDkgQEAKICAgICAgICAgICAgICBpbmNsdWRlcz0ibGliLyR7YXBwbmFtZX0tbGliLmphciwgbGliLyR7YXBwbmFtZX0tcGFyMS5qYXIiPgogICAgICAgICA8L2phcj4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC04NiwxMCArODYsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXNmc2JwYXNzaXZhdGlvbi9lamIvc3JjL2NvbS9zdW4vczFhc2Rldi9lamIzMC9lZW1zZnNicGFzc2l2YXRpb24vU2Z1bC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXNmc2JwYXNzaXZhdGlvbi9lamIvc3JjL2NvbS9zdW4vczFhc2Rldi9lamIzMC9lZW1zZnNicGFzc2l2YXRpb24vU2Z1bC5qYXZhCmluZGV4IDA1OGIyMDMuLjYwZGUwMDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1zZnNicGFzc2l2YXRpb24vZWpiL3NyYy9jb20vc3VuL3MxYXNkZXYvZWpiMzAvZWVtc2ZzYnBhc3NpdmF0aW9uL1NmdWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtc2ZzYnBhc3NpdmF0aW9uL2VqYi9zcmMvY29tL3N1bi9zMWFzZGV2L2VqYjMwL2VlbXNmc2JwYXNzaXZhdGlvbi9TZnVsLmphdmEKQEAgLTI3LDQgKzI3LDQgQEAKIAogICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IGRvVGVzdHMoU3RyaW5nIHByZWZpeCk7CiAKLX0gCit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtc2ZzYnBhc3NpdmF0aW9uL3NxbC9jcmVhdGUuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXNmc2JwYXNzaXZhdGlvbi9zcWwvY3JlYXRlLnNxbAppbmRleCA3OTg1MzQwLi4wYmI2YmJkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtc2ZzYnBhc3NpdmF0aW9uL3NxbC9jcmVhdGUuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1zZnNicGFzc2l2YXRpb24vc3FsL2NyZWF0ZS5zcWwKQEAgLTEsNCArMSw0IEBACi1DUkVBVEUgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNUEFTU0lWQVRJT05fUEVSU09OICgNCi0gICAgTkFNRSBWQVJDSEFSKDI1NikgTk9UIE5VTEwgUFJJTUFSWSBLRVksDQotICAgIERBVEEgVkFSQ0hBUigyNTYpDQotKTsNCitDUkVBVEUgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNUEFTU0lWQVRJT05fUEVSU09OICgKKyAgICBOQU1FIFZBUkNIQVIoMjU2KSBOT1QgTlVMTCBQUklNQVJZIEtFWSwKKyAgICBEQVRBIFZBUkNIQVIoMjU2KQorKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1zZnNicGFzc2l2YXRpb24vc3FsL2Ryb3Auc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXNmc2JwYXNzaXZhdGlvbi9zcWwvZHJvcC5zcWwKaW5kZXggNmQ4YzY3Zi4uMzY2NzVlZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXNmc2JwYXNzaXZhdGlvbi9zcWwvZHJvcC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXNmc2JwYXNzaXZhdGlvbi9zcWwvZHJvcC5zcWwKQEAgLTEgKzEgQEAKLURST1AgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNUEFTU0lWQVRJT05fUEVSU09OOw0KK0RST1AgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNUEFTU0lWQVRJT05fUEVSU09OOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2V4dGVuZGVkZW0vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9leHRlbmRlZGVtL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZmM2OTg2OC4uYzM0ZTczYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2V4dGVuZGVkZW0vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZXh0ZW5kZWRlbS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMC1wZXJzaXN0ZW5jZS1leHRlbmRlZGVtIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNpbXBsZS5jbGllbnQiIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24uY2xpZW50LlN0YW5kYWxvbmVDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgpAQCAtMjYsMTAgKzI2LDEwIEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZXh0ZW5kZWRlbS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZXh0ZW5kZWRlbS9idWlsZC54bWwKaW5kZXggNDlkMGE4NS4uZjBlODllZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2V4dGVuZGVkZW0vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9leHRlbmRlZGVtL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTgsMTAgKzU4LDEwIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9L2xpYiIvPgotICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIgCisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1saWIuamFyIgogICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIGluY2x1ZGVzPSIqKi9QZXJzb24uY2xhc3MiPgotICAgICAgICA8L2phcj4gICAgICAgIAorICAgICAgICA8L2phcj4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LXBhcjEuamFyIj4KICAgICAgICAgICAgICA8bWV0YWluZiBmaWxlPSJkZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbCIvPgogICAgICAgICA8L2phcj4KQEAgLTY5LDkgKzY5LDkgQEAKICAgICAgICAgICAgICA8bWV0YWluZiBmaWxlPSJkZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbCIvPgogICAgICAgICA8L2phcj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TZnVsKi5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TZnVsLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiB1cGRhdGU9InllcyIKQEAgLTc5LDkgKzc5LDkgQEAKICAgICAgICAgICAgICBpbmNsdWRlcz0ibGliLyR7YXBwbmFtZX0tbGliLmphciwgbGliLyR7YXBwbmFtZX0tcGFyMS5qYXIsIGxpYi8ke2FwcG5hbWV9LXBhcjMuamFyIj4KICAgICAgICAgPC9qYXI+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtODksMTAgKzg5LDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9leHRlbmRlZGVtL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9leHRlbmRlZGVtL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBhMzk1MmI4Li42OTFmYzRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZXh0ZW5kZWRlbS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2V4dGVuZGVkZW0vY2xpZW50L0NsaWVudC5qYXZhCkBAIC04NCwxNCArODQsMTQgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBzdGF0dXNOb25UeEZpbmRQZXJzb24iLCAoc3RhdHVzTm9uVHhGaW5kUGVyc29uKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgc3RhdHVzTm9uVHhGaW5kUGVyc29uMiIsIChzdGF0dXNOb25UeEZpbmRQZXJzb24yKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgc3RhdHVzUmVtb3ZlUGVyc29uIiwgKHN0YXR1c1JlbW92ZVBlcnNvbikgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwotCQkJc3RhdC5hZGRTdGF0dXMoImxvY2FsIHN0YXR1c1JlZnJlc2hQZXJzb24iLCAoc3RhdHVzUmVmcmVzaFBlcnNvbikgPyBzdGF0LkZBSUwgOiBzdGF0LlBBU1MpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHN0YXR1c1JlZnJlc2hQZXJzb24iLCAoc3RhdHVzUmVmcmVzaFBlcnNvbikgPyBzdGF0LkZBSUwgOiBzdGF0LlBBU1MpOwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLSAgICAJcmV0dXJuOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9leHRlbmRlZGVtL3NxbC9jcmVhdGUuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2V4dGVuZGVkZW0vc3FsL2NyZWF0ZS5zcWwKaW5kZXggNmNhODI4NC4uODI3NTI1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2V4dGVuZGVkZW0vc3FsL2NyZWF0ZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2V4dGVuZGVkZW0vc3FsL2NyZWF0ZS5zcWwKQEAgLTEsNCArMSw0IEBACi1DUkVBVEUgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRVhURU5ERURFTV9QRVJTT04gKA0KLU5BTUUgVkFSQ0hBUigyNTYpIE5PVCBOVUxMIFBSSU1BUlkgS0VZDQotKQ0KLTsNCitDUkVBVEUgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRVhURU5ERURFTV9QRVJTT04gKAorTkFNRSBWQVJDSEFSKDI1NikgTk9UIE5VTEwgUFJJTUFSWSBLRVkKKykKKzsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9leHRlbmRlZGVtL3NxbC9kcm9wLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9leHRlbmRlZGVtL3NxbC9kcm9wLnNxbAppbmRleCAxNGI3ZTRkLi5jZDdkMDUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZXh0ZW5kZWRlbS9zcWwvZHJvcC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2V4dGVuZGVkZW0vc3FsL2Ryb3Auc3FsCkBAIC0xICsxIEBACi1EUk9QIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VYVEVOREVERU1fUEVSU09OOw0KK0RST1AgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRVhURU5ERURFTV9QRVJTT047CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDVkNzgyMzMuLjI5OTU1OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMC1wZXJzaXN0ZW5jZS10eF9wcm9wYWdhdGlvbiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzaW1wbGUuY2xpZW50IiB2YWx1ZT0iY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5wZXJzaXN0ZW5jZS50eF9wcm9wYWdhdGlvbi5jbGllbnQuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KQEAgLTI2LDEwICsyNiwxMCBAQAogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL3R4X3Byb3BhZ2F0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9idWlsZC54bWwKaW5kZXggYjk3NjI3Yi4uZGY2ZGQ4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL3R4X3Byb3BhZ2F0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamF2YXguc3FsLlhBRGF0YVNvdXJjZSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMveGEiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPiAKKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgogICAgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMteGEtcG9vbC5wcm9wZXJ0eS5jb25uZWN0aW9uQXR0cmlidXRlcz07Y3JlYXRlPXRydWUiLz4KQEAgLTgxLDE3ICs4MSwxNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS9saWIiLz4KLSAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LWxpYi5qYXIiIAorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIKICAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICBpbmNsdWRlcz0iKiovUGVyc29uLmNsYXNzIj4KLSAgICAgICAgPC9qYXI+ICAgICAgICAKKyAgICAgICAgPC9qYXI+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1wYXIxLmphciI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZmlsZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KICAgICAgICAgPC9qYXI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Z1bCouY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovU2Z1bC5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgdXBkYXRlPSJ5ZXMiCkBAIC05OSw5ICs5OSw5IEBACiAgICAgICAgICAgICAgaW5jbHVkZXM9ImxpYi8ke2FwcG5hbWV9LWxpYi5qYXIsIGxpYi8ke2FwcG5hbWV9LXBhcjEuamFyIj4KICAgICAgICAgPC9qYXI+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTEwLDEwICsxMTAsMTAgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LXN0YW5kYWxvbmUiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL3R4X3Byb3BhZ2F0aW9uL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNWMwYjIzNC4uZGMyMTE4NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL3R4X3Byb3BhZ2F0aW9uL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vY2xpZW50L0NsaWVudC5qYXZhCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHMgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJJIGFtIGluIGNsaWVudCIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFVzZXJUcmFuc2FjdGlvbiB1dHggPSAoVXNlclRyYW5zYWN0aW9uKShuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiamF2YTpjb21wL1VzZXJUcmFuc2FjdGlvbiIpOwogICAgICAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSkobmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpKS5sb29rdXAoImpkYmMveGEiKTsKIApAQCAtNzgsNyArNzgsNyBAQAogCiAgICAgICAgICAgICB1dHguYmVnaW4oKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigidXR4LmJlZ2luIGNhbGxlZCAiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgcyA9IGNvbm5lY3Rpb24ucHJlcGFyZVN0YXRlbWVudCgiaW5zZXJ0IGludG8gRUpCMzBfUEVSU0lTVEVOQ0VfRUVNX0lOSkVDVElPTl9QRVJTT04gdmFsdWVzKCcxJywgJzEnKSIpOwogICAgICAgICAgICAgcy5leGVjdXRlKCk7CkBAIC05NCw3ICs5NCw3IEBACiAgICAgICAgICAgICAgICAgdXR4LnJvbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJ1dHgucm9sbGJhY2sgY2FsbGVkICIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOwogICAgICAgICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gaXRlci5uZXh0KCk7CkBAIC0xMjUsNyArMTI1LDcgQEAKIAogICAgICAgICB9CiAKLSAgICAJcmV0dXJuOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9lamIvUGVyc29uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vZWpiL1BlcnNvbi5qYXZhCmluZGV4IDE0MzU4ZmYuLjk1MmNiZWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9lamIvUGVyc29uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL3R4X3Byb3BhZ2F0aW9uL2VqYi9QZXJzb24uamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOwogICAgIH0KIAotICAgIEBPdmVycmlkZSAKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgICByZXR1cm4gIlBlcnNvbjogKG5hbWU9IiArIG5hbWUgKyAiOyBkYXRhPSAiICsgZGF0YSArICIpIjsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vZWpiL1NmdWxCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vZWpiL1NmdWxCZWFuLmphdmEKaW5kZXggM2Q0ZjMwYi4uNGIyNGRmNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL3R4X3Byb3BhZ2F0aW9uL2VqYi9TZnVsQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9lamIvU2Z1bEJlYW4uamF2YQpAQCAtMzQsMjUgKzM0LDI1IEBACiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwogCiBAU3RhdGVmdWwKLUBFSkIobmFtZT0iZWpiL1NmdWxCZWFuIiwgCitARUpCKG5hbWU9ImVqYi9TZnVsQmVhbiIsCiAgICAgICAgIGJlYW5JbnRlcmZhY2U9Y29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5wZXJzaXN0ZW5jZS50eF9wcm9wYWdhdGlvbi5TZnVsRGVsZWdhdGUuY2xhc3MpCiAKIHB1YmxpYyBjbGFzcyBTZnVsQmVhbgogICAgIGltcGxlbWVudHMgU2Z1bCB7CiAKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwotICAgIAorCiAgICAgcHJpdmF0ZSBARUpCIFNmdWxEZWxlZ2F0ZSBkZWxlZ2F0ZTsKLSAgICAKKwogICAgIHByaXZhdGUgQFBlcnNpc3RlbmNlQ29udGV4dCh1bml0TmFtZT0ibGliL2VqYi1lamIzMC1wZXJzaXN0ZW5jZS10eF9wcm9wYWdhdGlvbi1wYXIxLmphciNlbSIsCi0gICAgICAgICAgICAgICAgdHlwZT1QZXJzaXN0ZW5jZUNvbnRleHRUeXBlLkVYVEVOREVEKSAKKyAgICAgICAgICAgICAgICB0eXBlPVBlcnNpc3RlbmNlQ29udGV4dFR5cGUuRVhURU5ERUQpCiAgICAgICAgICAgICBFbnRpdHlNYW5hZ2VyIGV4dGVuZGVkRU07Ci0gCisKICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTdHJpbmcgbG9va3VwTmFtZSA9ICJqYXZhOmNvbXAvZW52L2VqYi9TZnVsQmVhbiI7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaW5pdEN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgZGVsZWdhdGUgPSAoU2Z1bERlbGVnYXRlKSBpbml0Q3R4Lmxvb2t1cChsb29rdXBOYW1lKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC02Miw3ICs2Miw3IEBACiAKICAgICBwdWJsaWMgTWFwPFN0cmluZywgQm9vbGVhbj4gZG9UZXN0cygpIHsKICAgICAgICAgUGVyc29uIHBlcnNvbiA9IG5ldyBQZXJzb24obmFtZSk7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBkZWxlZ2F0ZU5hbWUgPSAiZGVsZ25hbWVfIiArIG5hbWU7CiAgICAgICAgIFN0cmluZyBkZWxlZ2F0ZURhdGE9ICJkZWxnZGF0YTogIiArIG5hbWU7CiAgICAgICAgIGRlbGVnYXRlLmNyZWF0ZShkZWxlZ2F0ZU5hbWUsIGRlbGVnYXRlRGF0YSk7CkBAIC03MSw4ICs3MSw4IEBACiAKICAgICAgICAgZXh0ZW5kZWRFTS5wZXJzaXN0KHBlcnNvbik7CiAgICAgICAgIFBlcnNvbiBmb3VuZFBlcnNvbiA9IGRlbGVnYXRlLmZpbmQobmFtZSk7Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IG1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgQm9vbGVhbj4oKTsKICAgICAgICAgbWFwLnB1dCgiZmluZERlbGVnYXRlQ3JlYXRlZFBlcnNvbiIsIChkUGVyc29uICE9IG51bGwpKTsKICAgICAgICAgbWFwLnB1dCgiZGVsZWdhdGVGb3VuZE1lIiwgKGZvdW5kUGVyc29uICE9IG51bGwpKTsKQEAgLTEwMCw1ICsxMDAsNSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZW1vdmVkOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL3R4X3Byb3BhZ2F0aW9uL2VqYi9TZnVsRGVsZWdhdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9lamIvU2Z1bERlbGVnYXRlLmphdmEKaW5kZXggNjJkMjA5Ny4uMzM3YTQzZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL3R4X3Byb3BhZ2F0aW9uL2VqYi9TZnVsRGVsZWdhdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vZWpiL1NmdWxEZWxlZ2F0ZS5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgUGVyc29uIGZpbmQoU3RyaW5nIG5hbWUpOwogCiAgICAgYm9vbGVhbiByZW1vdmUoU3RyaW5nIG5hbWUpOwotICAgIAorCiAgICAgRW50aXR5TWFuYWdlciBnZXRFTSgpOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vZWpiL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9lamIvU2Z1bERlbGVnYXRlQmVhbi5qYXZhCmluZGV4IDhhOTZlMjAuLmY3YTdhYWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9lamIvU2Z1bERlbGVnYXRlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9lamIvU2Z1bERlbGVnYXRlQmVhbi5qYXZhCkBAIC0zNywxMiArMzcsMTIgQEAKICAgICBwdWJsaWMgRW50aXR5TWFuYWdlciBnZXRFTSgpIHsKICAgICAgICAgcmV0dXJuIGV4dGVuZGVkRU07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFBlcnNvbiBjcmVhdGUoU3RyaW5nIG5hbWUsIFN0cmluZyBkYXRhKSB7CiAKICAgICAgICAgUGVyc29uIHAgPSBuZXcgUGVyc29uKG5hbWUpOwogICAgICAgICBwLnNldERhdGEoZGF0YSk7Ci0gICAgICAgIAorCiAgICAgICAgIGV4dGVuZGVkRU0ucGVyc2lzdChwKTsKICAgICAgICAgcmV0dXJuIHA7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL3R4X3Byb3BhZ2F0aW9uL3NxbC9jcmVhdGUuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL3R4X3Byb3BhZ2F0aW9uL3NxbC9jcmVhdGUuc3FsCmluZGV4IGZhNjA3NDIuLmMwYWI0M2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9zcWwvY3JlYXRlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vc3FsL2NyZWF0ZS5zcWwKQEAgLTEsNCArMSw0IEBACi1DUkVBVEUgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNX0lOSkVDVElPTl9QRVJTT04gKA0KLSAgICBOQU1FIFZBUkNIQVIoMjU2KSBOT1QgTlVMTCBQUklNQVJZIEtFWSwNCi0gICAgREFUQSBWQVJDSEFSKDI1NikNCi0pOw0KK0NSRUFURSBUQUJMRSBFSkIzMF9QRVJTSVNURU5DRV9FRU1fSU5KRUNUSU9OX1BFUlNPTiAoCisgICAgTkFNRSBWQVJDSEFSKDI1NikgTk9UIE5VTEwgUFJJTUFSWSBLRVksCisgICAgREFUQSBWQVJDSEFSKDI1NikKKyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vc3FsL2Ryb3Auc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL3R4X3Byb3BhZ2F0aW9uL3NxbC9kcm9wLnNxbAppbmRleCA1ZWIxMzZmLi5kMDEyYzY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vc3FsL2Ryb3Auc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9zcWwvZHJvcC5zcWwKQEAgLTEgKzEgQEAKLURST1AgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNX0lOSkVDVElPTl9QRVJTT047DQorRFJPUCBUQUJMRSBFSkIzMF9QRVJTSVNURU5DRV9FRU1fSU5KRUNUSU9OX1BFUlNPTjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9idWlsZC54bWwKaW5kZXggMTk1YzJlZi4uZjU1OWRjYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9idWlsZC54bWwKQEAgLTQ2LDkgKzQ2LDkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWVqYjMxLWFzeW5jaHJvbm91cyB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWpiMzEtYXN5bmNocm9ub3VzIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvbG9jYWxhbmRyZW1vdGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvbG9jYWxhbmRyZW1vdGUvYnVpbGQucHJvcGVydGllcwppbmRleCA3NzNkNjk5Li5mNWYyZmM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL2xvY2FsYW5kcmVtb3RlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9sb2NhbGFuZHJlbW90ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMS1hc3luY2hyb25vdXMtbG9jYWxhbmRyZW1vdGUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KLQkKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL2xvY2FsYW5kcmVtb3RlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvbG9jYWxhbmRyZW1vdGUvYnVpbGQueG1sCmluZGV4IDA1ZmQ1MTguLjAxMWJhNTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvbG9jYWxhbmRyZW1vdGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvbG9jYWxhbmRyZW1vdGUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxMiArNDYsMTIgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTU5LDkgKzU5LDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CkBAIC03Myw3ICs3Myw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL2xvY2FsYW5kcmVtb3RlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvbG9jYWxhbmRyZW1vdGUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDFhN2ZkODIuLjA0MTNiMDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvbG9jYWxhbmRyZW1vdGUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvbG9jYWxhbmRyZW1vdGUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwpAQCAtMzksNDIgKzM5LDQyIEBACiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAKLQlhcHBOYW1lID0gYXJnc1swXTsgCi0Jc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKLQlDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsgICAgICAgCi0gICAgICAgIGNsaWVudC5kb1Rlc3QoKTsJCisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKKyAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKKyAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7CiAgICAgfQogCiAgICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7Ci0JbnVtID0gSW50ZWdlci52YWx1ZU9mKGFyZ3NbMV0pOworICAgIG51bSA9IEludGVnZXIudmFsdWVPZihhcmdzWzFdKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKLQl0cnkgeworICAgIHRyeSB7CiAKLQkgIAotCSAgICByZW1vdGVBc3luYyA9IChSZW1vdGVBc3luYykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU2luZ2xldG9uQmVhbiFjb20uYWNtZS5SZW1vdGVBc3luYyIpOwotCSAgICBGdXR1cmU8U3RyaW5nPiBmdXR1cmUgPSByZW1vdGVBc3luYy5oZWxsbygiQm9iIik7Ci0JICAgIAotCSAgICBib29sZWFuIGlzRG9uZSA9IGZ1dHVyZS5pc0RvbmUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RvbmUgPSAiICsgaXNEb25lKTsKIAotCSAgICBTdHJpbmcgcmVzdWx0ID0gZnV0dXJlLmdldCgpOworICAgICAgICByZW1vdGVBc3luYyA9IChSZW1vdGVBc3luYykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU2luZ2xldG9uQmVhbiFjb20uYWNtZS5SZW1vdGVBc3luYyIpOworICAgICAgICBGdXR1cmU8U3RyaW5nPiBmdXR1cmUgPSByZW1vdGVBc3luYy5oZWxsbygiQm9iIik7CiAKLQkgICAgaWYoICFmdXR1cmUuaXNEb25lKCkgKSB7Ci0JCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJpc0RvbmUgc2hvdWxkIGhhdmUgYmVlbiB0cnVlIik7Ci0JICAgIH0KLQkgICAgCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVtb3RlIGJlYW4gc2F5cyAiICsgcmVzdWx0KTsKLQkJCi0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgYm9vbGVhbiBpc0RvbmUgPSBmdXR1cmUuaXNEb25lKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEb25lID0gIiArIGlzRG9uZSk7CiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBmdXR1cmUuZ2V0KCk7CisKKyAgICAgICAgaWYoICFmdXR1cmUuaXNEb25lKCkgKSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJpc0RvbmUgc2hvdWxkIGhhdmUgYmVlbiB0cnVlIik7CisgICAgICAgIH0KKworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlbW90ZSBiZWFuIHNheXMgIiArIHJlc3VsdCk7CisKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworCisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL2xvY2FsYW5kcmVtb3RlL2VqYi9TaW5nbGV0b25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL2xvY2FsYW5kcmVtb3RlL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggNjkzYTEyMi4uZWY2MDlkMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9sb2NhbGFuZHJlbW90ZS9lamIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvbG9jYWxhbmRyZW1vdGUvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQpAQCAtMzIsMTQgKzMyLDE0IEBACiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmluaXQoKSIpOwotCUZ1dHVyZTxTdHJpbmc+IGZ1dHVyZSA9IG1lTG9jYWwuaGVsbG8oImluaXQiKTsKKyAgICBGdXR1cmU8U3RyaW5nPiBmdXR1cmUgPSBtZUxvY2FsLmhlbGxvKCJpbml0Iik7CiAKICAgICB9CiAKICAgICBAQXN5bmNocm9ub3VzCiAgICAgcHVibGljIEZ1dHVyZTxTdHJpbmc+IGhlbGxvKFN0cmluZyBuYW1lKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpoZWxsbyggIiArIG5hbWUgKyAiKSIpOwotCXJldHVybiBuZXcgQXN5bmNSZXN1bHQ8U3RyaW5nPigiSGVsbG8sICIgKyBuYW1lKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmhlbGxvKCAiICsgbmFtZSArICIpIik7CisgICAgcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KCJIZWxsbywgIiArIG5hbWUpOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL2xvY2FsYW5kcmVtb3RlL2VqYi9TdXBlckFzeW5jLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL2xvY2FsYW5kcmVtb3RlL2VqYi9TdXBlckFzeW5jLmphdmEKaW5kZXggYThlOGNiMC4uNzk3YWIxYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9sb2NhbGFuZHJlbW90ZS9lamIvU3VwZXJBc3luYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvbG9jYWxhbmRyZW1vdGUvZWpiL1N1cGVyQXN5bmMuamF2YQpAQCAtMTksNiArMTksNiBAQAogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50Lio7CiBpbXBvcnQgamFrYXJ0YS5lamIuKjsKIAotcHVibGljIGludGVyZmFjZSBTdXBlckFzeW5jIHsgCitwdWJsaWMgaW50ZXJmYWNlIFN1cGVyQXN5bmMgewogICAgIHB1YmxpYyBGdXR1cmU8U3RyaW5nPiBoZWxsbyhTdHJpbmcgbmFtZSk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3JlbW90ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9yZW1vdGUvYnVpbGQucHJvcGVydGllcwppbmRleCA5NzgwMTgwLi43YzE1NTRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3JlbW90ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvcmVtb3RlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEyICsxNSwxMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWFzeW5jaHJvbm91cy1yZW1vdGUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KLQkKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3JlbW90ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3JlbW90ZS9idWlsZC54bWwKaW5kZXggNzVlNWZkMy4uZTllZWZjYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9yZW1vdGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvcmVtb3RlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTIgKzQ2LDEyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01OSw5ICs1OSw5IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtNzMsNyArNzMsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9yZW1vdGUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9yZW1vdGUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDk3ZWNkYzMuLjlmMTUxYjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvcmVtb3RlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3JlbW90ZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CkBAIC00NiwyNDEgKzQ2LDI0MSBAQAogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCi0JYXBwTmFtZSA9IGFyZ3NbMF07IAotCXN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7Ci0JQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7ICAgICAgIAotICAgICAgICBjbGllbnQuZG9UZXN0KCk7CQorICAgIGFwcE5hbWUgPSBhcmdzWzBdOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7CisgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CisgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwogICAgIH0KIAogICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewotCW51bSA9IEludGVnZXIudmFsdWVPZihhcmdzWzFdKTsKKyAgICBudW0gPSBJbnRlZ2VyLnZhbHVlT2YoYXJnc1sxXSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCi0JdHJ5IHsKKyAgICB0cnkgewogCi0JICAgIHN0YXRlZnVsQmVhbiA9IChSZW1vdGVBc3luYzIpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1N0YXRlZnVsQmVhbiFjb20uYWNtZS5SZW1vdGVBc3luYzIiKTsKLQkgICAgc3RhdGVmdWxCZWFuTGVnYWN5UmVtb3RlID0gKFJlbW90ZUFzeW5jMykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU3RhdGVmdWxCZWFuIWNvbS5hY21lLlJlbW90ZUFzeW5jMyIpOwotCSAgICBzdGF0ZWZ1bEJlYW5MZWdhY3lSZW1vdGUyID0gKFJlbW90ZUFzeW5jMykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU3RhdGVmdWxCZWFuIWNvbS5hY21lLlJlbW90ZUFzeW5jMyIpOworICAgICAgICBzdGF0ZWZ1bEJlYW4gPSAoUmVtb3RlQXN5bmMyKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9TdGF0ZWZ1bEJlYW4hY29tLmFjbWUuUmVtb3RlQXN5bmMyIik7CisgICAgICAgIHN0YXRlZnVsQmVhbkxlZ2FjeVJlbW90ZSA9IChSZW1vdGVBc3luYzMpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1N0YXRlZnVsQmVhbiFjb20uYWNtZS5SZW1vdGVBc3luYzMiKTsKKyAgICAgICAgc3RhdGVmdWxCZWFuTGVnYWN5UmVtb3RlMiA9IChSZW1vdGVBc3luYzMpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1N0YXRlZnVsQmVhbiFjb20uYWNtZS5SZW1vdGVBc3luYzMiKTsKIAotCSAgICBGdXR1cmU8U3RyaW5nPiBmdXR1cmVTZnVsID0gc3RhdGVmdWxCZWFuLmhlbGxvQXN5bmMoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZWZ1bCBiZWFuIHNheXMgIiArIGZ1dHVyZVNmdWwuZ2V0KCkpOworICAgICAgICBGdXR1cmU8U3RyaW5nPiBmdXR1cmVTZnVsID0gc3RhdGVmdWxCZWFuLmhlbGxvQXN5bmMoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZWZ1bCBiZWFuIHNheXMgIiArIGZ1dHVyZVNmdWwuZ2V0KCkpOwogCi0JICAgIGZ1dHVyZVNmdWwgPSBzdGF0ZWZ1bEJlYW4ucmVtb3ZlQWZ0ZXJDYWxsaW5nKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVmdWwgYmVhbiByZW1vdmVkIHN0YXR1cyA9ICIgKyBmdXR1cmVTZnVsLmdldCgpKTsKKyAgICAgICAgZnV0dXJlU2Z1bCA9IHN0YXRlZnVsQmVhbi5yZW1vdmVBZnRlckNhbGxpbmcoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZWZ1bCBiZWFuIHJlbW92ZWQgc3RhdHVzID0gIiArIGZ1dHVyZVNmdWwuZ2V0KCkpOwogCi0JICAgIGJvb2xlYW4gZ290U2Z1bEV4Y2VwdGlvbiA9IGZhbHNlOwotCSAgICB0cnkgewotCQlmdXR1cmVTZnVsID0gc3RhdGVmdWxCZWFuLmhlbGxvQXN5bmMoKTsgICAgCi0JICAgIH0gY2F0Y2goTm9TdWNoRUpCRXhjZXB0aW9uIG5zZWUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJHb3QgbnNlZSBmcm9tIGhlbGxvQXN5bmMiKTsKLQkJZ290U2Z1bEV4Y2VwdGlvbiA9IHRydWU7Ci0JICAgIH0KKyAgICAgICAgYm9vbGVhbiBnb3RTZnVsRXhjZXB0aW9uID0gZmFsc2U7CisgICAgICAgIHRyeSB7CisgICAgICAgIGZ1dHVyZVNmdWwgPSBzdGF0ZWZ1bEJlYW4uaGVsbG9Bc3luYygpOworICAgICAgICB9IGNhdGNoKE5vU3VjaEVKQkV4Y2VwdGlvbiBuc2VlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IG5zZWUgZnJvbSBoZWxsb0FzeW5jIik7CisgICAgICAgIGdvdFNmdWxFeGNlcHRpb24gPSB0cnVlOworICAgICAgICB9CiAKLQkgICAgdHJ5IHsKLQkJaWYoICFnb3RTZnVsRXhjZXB0aW9uICkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZXR1cm4gdmFsdWUgPSAiICsgZnV0dXJlU2Z1bC5nZXQoKSk7Ci0JCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTaG91bGQgaGF2ZSBnb3R0ZW4gZXhjZXB0aW9uIik7Ci0JCX0KLQkgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZWUpIHsKLQkJaWYoIGVlLmdldENhdXNlKCkgaW5zdGFuY2VvZiBOb1N1Y2hFSkJFeGNlcHRpb24gKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgTm9TdWNoRUpCRXhjZXB0aW9uIHdoZW4gIiArCi0JCQkJICAgICAgICJhY2Nlc3Npbmcgc2Z1bCBiZWFuIGFzeW5jaHJvbm91c2x5IGFmdGVyIHJlbW92YWwiKTsKLQkJfSBlbHNlIHsKLQkJICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIndyb25nIGV4Y2VwdGlvbiBkdXJpbmcgc2ZzYiBhY2Nlc3MgYWZ0ZXIgcmVtb3ZhbCIsCi0JCQkJCSAgIGVlKTsKLQkJfQotCSAgICB9Ci0JICAgIAotCSAgICB0cnkgewotCQlGdXR1cmU8U3RyaW5nPiBmID0gc3RhdGVmdWxCZWFuTGVnYWN5UmVtb3RlLnRocm93RXhjZXB0aW9uKCJqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24iKTsKLQkJU3RyaW5nIHJlc3VsdCA9IGYuZ2V0KCk7Ci0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oIkRpZG4ndCBnZXQgQ3JlYXRlRXhjZXB0aW9uIik7Ci0JICAgIH0gY2F0Y2goRXhlY3V0aW9uRXhjZXB0aW9uIGVlKSB7Ci0JCWlmKCBlZS5nZXRDYXVzZSgpIGluc3RhbmNlb2YgQ3JlYXRlRXhjZXB0aW9uICkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgQ3JlYXRlRXhjZXB0aW9uIik7Ci0JCX0gZWxzZSB7Ci0JCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJ3cm9uZyBleGNlcHRpb24gcmVjZWl2ZWQiLAotCQkJCQkgICBlZSk7Ci0JCX0KLQkgICAgfQorICAgICAgICB0cnkgeworICAgICAgICBpZiggIWdvdFNmdWxFeGNlcHRpb24gKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJldHVybiB2YWx1ZSA9ICIgKyBmdXR1cmVTZnVsLmdldCgpKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNob3VsZCBoYXZlIGdvdHRlbiBleGNlcHRpb24iKTsKKyAgICAgICAgfQorICAgICAgICB9IGNhdGNoKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlZSkgeworICAgICAgICBpZiggZWUuZ2V0Q2F1c2UoKSBpbnN0YW5jZW9mIE5vU3VjaEVKQkV4Y2VwdGlvbiApIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBOb1N1Y2hFSkJFeGNlcHRpb24gd2hlbiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgImFjY2Vzc2luZyBzZnVsIGJlYW4gYXN5bmNocm9ub3VzbHkgYWZ0ZXIgcmVtb3ZhbCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigid3JvbmcgZXhjZXB0aW9uIGR1cmluZyBzZnNiIGFjY2VzcyBhZnRlciByZW1vdmFsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgZWUpOworICAgICAgICB9CisgICAgICAgIH0KIAotCSAgICB0cnkgewotCQlGdXR1cmU8U3RyaW5nPiBmID0gc3RhdGVmdWxCZWFuTGVnYWN5UmVtb3RlLnRocm93RXhjZXB0aW9uKCJqYWthcnRhLmVqYi5FSkJFeGNlcHRpb24iKTsKLQkJU3RyaW5nIHJlc3VsdCA9IGYuZ2V0KCk7Ci0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oIkRpZG4ndCBnZXQgRUpCRXhjZXB0aW9uIik7Ci0JICAgIH0gY2F0Y2goRXhlY3V0aW9uRXhjZXB0aW9uIGVlKSB7Ci0JCWlmKCBlZS5nZXRDYXVzZSgpIGluc3RhbmNlb2YgUmVtb3RlRXhjZXB0aW9uICkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgUmVtb3RlRXhjZXB0aW9uIik7Ci0JCX0gZWxzZSB7Ci0JCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJ3cm9uZyBleGNlcHRpb24gcmVjZWl2ZWQiLAotCQkJCQkgICBlZSk7Ci0JCX0KLQkgICAgfQorICAgICAgICB0cnkgeworICAgICAgICBGdXR1cmU8U3RyaW5nPiBmID0gc3RhdGVmdWxCZWFuTGVnYWN5UmVtb3RlLnRocm93RXhjZXB0aW9uKCJqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24iKTsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGYuZ2V0KCk7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkRpZG4ndCBnZXQgQ3JlYXRlRXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2goRXhlY3V0aW9uRXhjZXB0aW9uIGVlKSB7CisgICAgICAgIGlmKCBlZS5nZXRDYXVzZSgpIGluc3RhbmNlb2YgQ3JlYXRlRXhjZXB0aW9uICkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgQ3JlYXRlRXhjZXB0aW9uIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJ3cm9uZyBleGNlcHRpb24gcmVjZWl2ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICBlZSk7CisgICAgICAgIH0KKyAgICAgICAgfQogCi0JICAgIAotCSAgICB0cnkgewotCQlGdXR1cmU8U3RyaW5nPiBmID0gc3RhdGVmdWxCZWFuTGVnYWN5UmVtb3RlMi5yZW1vdmVBZnRlckNhbGxpbmcoKTsKLQkJU3RyaW5nIHJlc3VsdCA9IGYuZ2V0KCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigicmVzdWx0IG9mIHJlbW92ZUFmdGVyQ2FsbGluZyA9ICIgKyByZXN1bHQpOwotCSAgICB9IGNhdGNoKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlZSkgewotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJnb3QgdW5leHBlY3RlZCBleGNlcHRpb24iLCBlZSk7Ci0JICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgRnV0dXJlPFN0cmluZz4gZiA9IHN0YXRlZnVsQmVhbkxlZ2FjeVJlbW90ZS50aHJvd0V4Y2VwdGlvbigiamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uIik7CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBmLmdldCgpOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJEaWRuJ3QgZ2V0IEVKQkV4Y2VwdGlvbiIpOworICAgICAgICB9IGNhdGNoKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlZSkgeworICAgICAgICBpZiggZWUuZ2V0Q2F1c2UoKSBpbnN0YW5jZW9mIFJlbW90ZUV4Y2VwdGlvbiApIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIFJlbW90ZUV4Y2VwdGlvbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigid3JvbmcgZXhjZXB0aW9uIHJlY2VpdmVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgZWUpOworICAgICAgICB9CisgICAgICAgIH0KIAotCSAgICB0cnkgewotCQlGdXR1cmU8U3RyaW5nPiBmID0gc3RhdGVmdWxCZWFuTGVnYWN5UmVtb3RlMi5oZWxsb0FzeW5jKCk7Ci0JCVN0cmluZyByZXN1bHQgPSBmLmdldCgpOwotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJEaWRuJ3QgZ2V0IFJlbW90ZUV4Y2VwdGlvbiIpOwotCSAgICB9IGNhdGNoKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlZSkgewotCQlpZiggZWUuZ2V0Q2F1c2UoKSBpbnN0YW5jZW9mIE5vU3VjaE9iamVjdEV4Y2VwdGlvbiApIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIFJlbW90ZUV4Y2VwdGlvbiIpOwotCQl9IGVsc2UgewotCQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigid3JvbmcgZXhjZXB0aW9uIHJlY2VpdmVkIiwKLQkJCQkJICAgZWUpOwotCQl9Ci0JICAgIH0gY2F0Y2goTm9TdWNoT2JqZWN0RXhjZXB0aW9uIG5zb2UpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgTm9TdWNoT2JqZWN0RXhjZXB0aW9uIik7Ci0JICAgIH0KLQkgIAotCSAgICByZW1vdGVBc3luYyA9IChSZW1vdGVBc3luYykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU2luZ2xldG9uQmVhbiIpOwotCSAgICByZW1vdGVBc3luYy5zdGFydFRlc3QoKTsKIAotCSAgICBFeGVjdXRvclNlcnZpY2UgZXhlY3V0b3IgPSBFeGVjdXRvcnMubmV3Q2FjaGVkVGhyZWFkUG9vbCgpOworICAgICAgICB0cnkgeworICAgICAgICBGdXR1cmU8U3RyaW5nPiBmID0gc3RhdGVmdWxCZWFuTGVnYWN5UmVtb3RlMi5yZW1vdmVBZnRlckNhbGxpbmcoKTsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGYuZ2V0KCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmVzdWx0IG9mIHJlbW92ZUFmdGVyQ2FsbGluZyA9ICIgKyByZXN1bHQpOworICAgICAgICB9IGNhdGNoKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlZSkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJnb3QgdW5leHBlY3RlZCBleGNlcHRpb24iLCBlZSk7CisgICAgICAgIH0KIAotCSAgICBpbnQgbnVtRmlyZUFuZEZvcmdldHMgPSBudW07Ci0JICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1GaXJlQW5kRm9yZ2V0czsgaSsrKSB7Ci0JCWV4ZWN1dG9yLmV4ZWN1dGUoIG5ldyBGaXJlQW5kRm9yZ2V0KCkgKTsKLQkgICAgfQorICAgICAgICB0cnkgeworICAgICAgICBGdXR1cmU8U3RyaW5nPiBmID0gc3RhdGVmdWxCZWFuTGVnYWN5UmVtb3RlMi5oZWxsb0FzeW5jKCk7CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBmLmdldCgpOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJEaWRuJ3QgZ2V0IFJlbW90ZUV4Y2VwdGlvbiIpOworICAgICAgICB9IGNhdGNoKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlZSkgeworICAgICAgICBpZiggZWUuZ2V0Q2F1c2UoKSBpbnN0YW5jZW9mIE5vU3VjaE9iamVjdEV4Y2VwdGlvbiApIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIFJlbW90ZUV4Y2VwdGlvbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigid3JvbmcgZXhjZXB0aW9uIHJlY2VpdmVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgZWUpOworICAgICAgICB9CisgICAgICAgIH0gY2F0Y2goTm9TdWNoT2JqZWN0RXhjZXB0aW9uIG5zb2UpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgTm9TdWNoT2JqZWN0RXhjZXB0aW9uIik7CisgICAgICAgIH0KIAotCSAgICBDYW5jZWxBZnRlckFscmVhZHlEb25lIGNhZCA9IG5ldyBDYW5jZWxBZnRlckFscmVhZHlEb25lKCk7Ci0JICAgIGV4ZWN1dG9yLmV4ZWN1dGUoIGNhZCApOworICAgICAgICByZW1vdGVBc3luYyA9IChSZW1vdGVBc3luYykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU2luZ2xldG9uQmVhbiIpOworICAgICAgICByZW1vdGVBc3luYy5zdGFydFRlc3QoKTsKIAotCSAgICBQcm9jZXNzQXN5bmMgcEFzeW5jc1tdID0gbmV3IFByb2Nlc3NBc3luY1tudW1dOwotCSAgICBmb3IoaW50IGkgPSAwOyBpIDwgcEFzeW5jcy5sZW5ndGg7IGkrKykgeworICAgICAgICBFeGVjdXRvclNlcnZpY2UgZXhlY3V0b3IgPSBFeGVjdXRvcnMubmV3Q2FjaGVkVGhyZWFkUG9vbCgpOwogCi0JCWlmKCAoIGkgJSAyICkgPT0gMCApIHsKLQkJICAgIHBBc3luY3NbaV0gPSBuZXcgUHJvY2Vzc0FzeW5jKGksIDEsIDMsIGZhbHNlKTsKLQkJfSBlbHNlIHsKLQkJICAgIHBBc3luY3NbaV0gPSBuZXcgUHJvY2Vzc0FzeW5jKGksIDEsIDMsIHRydWUpOwotCQl9CisgICAgICAgIGludCBudW1GaXJlQW5kRm9yZ2V0cyA9IG51bTsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bUZpcmVBbmRGb3JnZXRzOyBpKyspIHsKKyAgICAgICAgZXhlY3V0b3IuZXhlY3V0ZSggbmV3IEZpcmVBbmRGb3JnZXQoKSApOworICAgICAgICB9CiAKLQkJZXhlY3V0b3IuZXhlY3V0ZSggcEFzeW5jc1tpXSApOwotCSAgICB9CisgICAgICAgIENhbmNlbEFmdGVyQWxyZWFkeURvbmUgY2FkID0gbmV3IENhbmNlbEFmdGVyQWxyZWFkeURvbmUoKTsKKyAgICAgICAgZXhlY3V0b3IuZXhlY3V0ZSggY2FkICk7CiAKLQkgICAgZXhlY3V0b3Iuc2h1dGRvd24oKTsKKyAgICAgICAgUHJvY2Vzc0FzeW5jIHBBc3luY3NbXSA9IG5ldyBQcm9jZXNzQXN5bmNbbnVtXTsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHBBc3luY3MubGVuZ3RoOyBpKyspIHsKIAotCSAgICBleGVjdXRvci5hd2FpdFRlcm1pbmF0aW9uKDE1LCBUaW1lVW5pdC5TRUNPTkRTKTsKKyAgICAgICAgaWYoICggaSAlIDIgKSA9PSAwICkgeworICAgICAgICAgICAgcEFzeW5jc1tpXSA9IG5ldyBQcm9jZXNzQXN5bmMoaSwgMSwgMywgZmFsc2UpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcEFzeW5jc1tpXSA9IG5ldyBQcm9jZXNzQXN5bmMoaSwgMSwgMywgdHJ1ZSk7CisgICAgICAgIH0KIAotCSAgICBpZiggIWNhZC5zdWNjZXNzICkgewotCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJDYW5jZWwgYWZ0ZXIgYWxyZWFkeSBkb25lIGZhaWxlZCIpOwotCSAgICB9CisgICAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUoIHBBc3luY3NbaV0gKTsKKyAgICAgICAgfQogCi0JICAgIGZvcihpbnQgaSA9IDA7IGkgPCBwQXN5bmNzLmxlbmd0aDsgaSsrKSB7Ci0JCVByb2Nlc3NBc3luYyBwYSA9IHBBc3luY3NbaV07Ci0JCWlmKCAhcGEuc3VjY2VzcygpICkgewotCQkgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihwYS5mYWlsdXJlTXNnKTsKLQkJfQotCSAgICB9CisgICAgICAgIGV4ZWN1dG9yLnNodXRkb3duKCk7CiAKLQkgICAgaW50IGZmQ291bnQgPSAgcmVtb3RlQXN5bmMuZ2V0RmlyZUFuZEZvcmdldENvdW50KCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmlyZUFuZEZvcmdldCBjb3VudCA9ICIgKyBmZkNvdW50ICsgIiBleHBlY3RlZCA9ICIgKyAKLQkJCSAgICAgICBudW1GaXJlQW5kRm9yZ2V0cyk7Ci0JICAgIGlmKCBmZkNvdW50ICE9IG51bUZpcmVBbmRGb3JnZXRzKSB7Ci0JCXRocm93IG5ldyBFeGNlcHRpb24oIm51bUZpcmVBbmRGb3JnZXQgbWlzbWF0Y2giKTsKLQkgICAgfQorICAgICAgICBleGVjdXRvci5hd2FpdFRlcm1pbmF0aW9uKDE1LCBUaW1lVW5pdC5TRUNPTkRTKTsKIAotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisgICAgICAgIGlmKCAhY2FkLnN1Y2Nlc3MgKSB7CisgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkNhbmNlbCBhZnRlciBhbHJlYWR5IGRvbmUgZmFpbGVkIik7CisgICAgICAgIH0KIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHBBc3luY3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgUHJvY2Vzc0FzeW5jIHBhID0gcEFzeW5jc1tpXTsKKyAgICAgICAgaWYoICFwYS5zdWNjZXNzKCkgKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKHBhLmZhaWx1cmVNc2cpOworICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpbnQgZmZDb3VudCA9ICByZW1vdGVBc3luYy5nZXRGaXJlQW5kRm9yZ2V0Q291bnQoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGaXJlQW5kRm9yZ2V0IGNvdW50ID0gIiArIGZmQ291bnQgKyAiIGV4cGVjdGVkID0gIiArCisgICAgICAgICAgICAgICAgICAgbnVtRmlyZUFuZEZvcmdldHMpOworICAgICAgICBpZiggZmZDb3VudCAhPSBudW1GaXJlQW5kRm9yZ2V0cykgeworICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJudW1GaXJlQW5kRm9yZ2V0IG1pc21hdGNoIik7CisgICAgICAgIH0KKworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAgICAgY2xhc3MgRmlyZUFuZEZvcmdldCBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JICAgIHJlbW90ZUFzeW5jLmZpcmVBbmRGb3JnZXQoKTsKLQl9CisgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICByZW1vdGVBc3luYy5maXJlQW5kRm9yZ2V0KCk7CisgICAgfQogICAgIH0KIAogICAgIGNsYXNzIENhbmNlbEFmdGVyQWxyZWFkeURvbmUgaW1wbGVtZW50cyBSdW5uYWJsZSB7Ci0JYm9vbGVhbiBzdWNjZXNzID0gZmFsc2U7Ci0JcHVibGljIHZvaWQgcnVuKCkgewotCSAgICB0cnkgewotCQkvLyBhc3ljIG1ldGhvZCB0aGF0IHJldHVybnMgaW1tZWRpYXRlbHkuCi0JCS8vIFNsZWVwIGZvciBhIGJpdCBzbyB0aGF0IGl0J3MgbGlrZWx5IGFscmVhZHkKLQkJLy8gZG9uZSBieSB0aGUgdGltZSB3ZSBjYWxsIGNhbmNlbC4gIFRoaXMgc2hvdWxkCi0JCS8vIGV4ZXJjaXNlIHRoZSBwYXRoIHRoYXQgdGhlIHJlc3VsdCBwaWdneS1iYWNrcwotCQkvLyBvbiB0aGUgcmV0dXJuIG9mIHRoZSBjYW5jZWwgY2FsbC4KLQkJRnV0dXJlPFN0cmluZz4gZnV0dXJlID0gcmVtb3RlQXN5bmMuaGVsbG9Bc3luYygpOwotCQlUaHJlYWQuc2xlZXAoMjAwMCk7Ci0JCWZ1dHVyZS5jYW5jZWwodHJ1ZSk7Ci0JCVN0cmluZyByZXN1bHQgPSBmdXR1cmUuZ2V0KCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiY2FuY2VsIGFmdGVyIGRvbmUgPSAiICsgcmVzdWx0KTsKLQkJc3VjY2VzcyA9IHRydWU7Ci0JICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgfQotCX0KKyAgICBib29sZWFuIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIC8vIGFzeWMgbWV0aG9kIHRoYXQgcmV0dXJucyBpbW1lZGlhdGVseS4KKyAgICAgICAgLy8gU2xlZXAgZm9yIGEgYml0IHNvIHRoYXQgaXQncyBsaWtlbHkgYWxyZWFkeQorICAgICAgICAvLyBkb25lIGJ5IHRoZSB0aW1lIHdlIGNhbGwgY2FuY2VsLiAgVGhpcyBzaG91bGQKKyAgICAgICAgLy8gZXhlcmNpc2UgdGhlIHBhdGggdGhhdCB0aGUgcmVzdWx0IHBpZ2d5LWJhY2tzCisgICAgICAgIC8vIG9uIHRoZSByZXR1cm4gb2YgdGhlIGNhbmNlbCBjYWxsLgorICAgICAgICBGdXR1cmU8U3RyaW5nPiBmdXR1cmUgPSByZW1vdGVBc3luYy5oZWxsb0FzeW5jKCk7CisgICAgICAgIFRocmVhZC5zbGVlcCgyMDAwKTsKKyAgICAgICAgZnV0dXJlLmNhbmNlbCh0cnVlKTsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGZ1dHVyZS5nZXQoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjYW5jZWwgYWZ0ZXIgZG9uZSA9ICIgKyByZXN1bHQpOworICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgfQogCiAgICAgfQogCiAgICAgY2xhc3MgUHJvY2Vzc0FzeW5jIGltcGxlbWVudHMgUnVubmFibGUgewotCWludCBpZDsKLQlpbnQgaW50ZXJ2YWw7Ci0JaW50IG51bUludGVydmFsczsKLQlib29sZWFuIGNhbmNlbDsKKyAgICBpbnQgaWQ7CisgICAgaW50IGludGVydmFsOworICAgIGludCBudW1JbnRlcnZhbHM7CisgICAgYm9vbGVhbiBjYW5jZWw7CiAKLQlib29sZWFuIGNhbmNlbGxlZDsKLQlib29sZWFuIGNvbXBsZXRlZDsKKyAgICBib29sZWFuIGNhbmNlbGxlZDsKKyAgICBib29sZWFuIGNvbXBsZXRlZDsKIAotCVN0cmluZyBmYWlsdXJlTXNnOwotCVRocm93YWJsZSBleGNlcHRpb247CisgICAgU3RyaW5nIGZhaWx1cmVNc2c7CisgICAgVGhyb3dhYmxlIGV4Y2VwdGlvbjsKIAotCXB1YmxpYyBQcm9jZXNzQXN5bmMoaW50IGksIGludCBpbnRlcnZhbCwgaW50IG51bUludGVydmFscywgYm9vbGVhbiBjYW5jZWwpIHsKLQkgICAgdGhpcy5pZCA9IGk7Ci0JICAgIHRoaXMuaW50ZXJ2YWwgPSBpbnRlcnZhbDsKLQkgICAgdGhpcy5udW1JbnRlcnZhbHMgPSBudW1JbnRlcnZhbHM7Ci0JICAgIHRoaXMuY2FuY2VsID0gY2FuY2VsOwotCX0KLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JICAgIHRyeSB7Ci0JCUZ1dHVyZTxJbnRlZ2VyPiBmdXR1cmUgPSAKLQkJICAgIHJlbW90ZUFzeW5jLnByb2Nlc3NBc3luYyhpbnRlcnZhbCwgbnVtSW50ZXJ2YWxzKTsKLQkJaWYoIGNhbmNlbCApIHsKLQkJICAgIGZ1dHVyZS5jYW5jZWwodHJ1ZSk7Ci0JCX0gCisgICAgcHVibGljIFByb2Nlc3NBc3luYyhpbnQgaSwgaW50IGludGVydmFsLCBpbnQgbnVtSW50ZXJ2YWxzLCBib29sZWFuIGNhbmNlbCkgeworICAgICAgICB0aGlzLmlkID0gaTsKKyAgICAgICAgdGhpcy5pbnRlcnZhbCA9IGludGVydmFsOworICAgICAgICB0aGlzLm51bUludGVydmFscyA9IG51bUludGVydmFsczsKKyAgICAgICAgdGhpcy5jYW5jZWwgPSBjYW5jZWw7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgRnV0dXJlPEludGVnZXI+IGZ1dHVyZSA9CisgICAgICAgICAgICByZW1vdGVBc3luYy5wcm9jZXNzQXN5bmMoaW50ZXJ2YWwsIG51bUludGVydmFscyk7CisgICAgICAgIGlmKCBjYW5jZWwgKSB7CisgICAgICAgICAgICBmdXR1cmUuY2FuY2VsKHRydWUpOworICAgICAgICB9CiAKLQkJSW50ZWdlciByZXN1bHQgPSBmdXR1cmUuZ2V0KCk7CisgICAgICAgIEludGVnZXIgcmVzdWx0ID0gZnV0dXJlLmdldCgpOwogCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiUHJvY2Vzc0FzeW5jIHJlc3VsdCA6ICIgKyByZXN1bHQpOwotCQljb21wbGV0ZWQgPSB0cnVlOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlByb2Nlc3NBc3luYyByZXN1bHQgOiAiICsgcmVzdWx0KTsKKyAgICAgICAgY29tcGxldGVkID0gdHJ1ZTsKIAotCSAgICB9IGNhdGNoKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlZSkgewotCQlleGNlcHRpb24gPSBlZS5nZXRDYXVzZSgpOwotCQlpZiggZXhjZXB0aW9uLmdldENsYXNzKCkuZ2V0TmFtZSgpLmVxdWFscygiamF2YS5sYW5nLkV4Y2VwdGlvbiIpICkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJQcm9jZXNzQXN5bmMgc3VjY2VzZnVsbHkgY2FuY2VsbGVkIik7Ci0JCSAgICBjYW5jZWxsZWQgPSB0cnVlOwotCQl9Ci0JICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJZXhjZXB0aW9uID0gZTsgCi0JICAgIH0KLQl9CisgICAgICAgIH0gY2F0Y2goRXhlY3V0aW9uRXhjZXB0aW9uIGVlKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IGVlLmdldENhdXNlKCk7CisgICAgICAgIGlmKCBleGNlcHRpb24uZ2V0Q2xhc3MoKS5nZXROYW1lKCkuZXF1YWxzKCJqYXZhLmxhbmcuRXhjZXB0aW9uIikgKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlByb2Nlc3NBc3luYyBzdWNjZXNmdWxseSBjYW5jZWxsZWQiKTsKKyAgICAgICAgICAgIGNhbmNlbGxlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBleGNlcHRpb24gPSBlOworICAgICAgICB9CisgICAgfQogCi0JcHVibGljIGJvb2xlYW4gc3VjY2VzcygpIHsKLQkgICAgYm9vbGVhbiBzdWNjZWVkZWQgPSB0cnVlOwotCSAgICBpZiAoY2FuY2VsICYmICFjYW5jZWxsZWQpIHsKLQkJc3VjY2VlZGVkID0gZmFsc2U7Ci0JCWZhaWx1cmVNc2cgPSAicGFzeW5jICIgKyBpZCArICIgd2FzIG5vdCBjYW5jZWxsZWQgc3VjY2Vzc2Z1bGx5IjsKLQkgICAgfSBlbHNlIGlmKCAhY2FuY2VsICYmICFjb21wbGV0ZWQgKSB7Ci0JCXN1Y2NlZWRlZCA9IGZhbHNlOwotCQlmYWlsdXJlTXNnID0gInBhc3luYyAiICsgaWQgKyAiIGRpZCBub3QgY29tcGxldGUgc3VjY2Vzc2Z1bGx5IjsKLQkgICAgfQorICAgIHB1YmxpYyBib29sZWFuIHN1Y2Nlc3MoKSB7CisgICAgICAgIGJvb2xlYW4gc3VjY2VlZGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKGNhbmNlbCAmJiAhY2FuY2VsbGVkKSB7CisgICAgICAgIHN1Y2NlZWRlZCA9IGZhbHNlOworICAgICAgICBmYWlsdXJlTXNnID0gInBhc3luYyAiICsgaWQgKyAiIHdhcyBub3QgY2FuY2VsbGVkIHN1Y2Nlc3NmdWxseSI7CisgICAgICAgIH0gZWxzZSBpZiggIWNhbmNlbCAmJiAhY29tcGxldGVkICkgeworICAgICAgICBzdWNjZWVkZWQgPSBmYWxzZTsKKyAgICAgICAgZmFpbHVyZU1zZyA9ICJwYXN5bmMgIiArIGlkICsgIiBkaWQgbm90IGNvbXBsZXRlIHN1Y2Nlc3NmdWxseSI7CisgICAgICAgIH0KIAotCSAgICByZXR1cm4gc3VjY2VlZGVkOwotCX0KKyAgICAgICAgcmV0dXJuIHN1Y2NlZWRlZDsKKyAgICB9CiAKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvcmVtb3RlL2VqYi9SZW1vdGVBc3luYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9yZW1vdGUvZWpiL1JlbW90ZUFzeW5jLmphdmEKaW5kZXggNjM1NDYxMi4uZDIxMDI1ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9yZW1vdGUvZWpiL1JlbW90ZUFzeW5jLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9yZW1vdGUvZWpiL1JlbW90ZUFzeW5jLmphdmEKQEAgLTI1LDE0ICsyNSwxNCBAQAogICAgIHZvaWQgc3RhcnRUZXN0KCk7CiAKICAgICB2b2lkIGZpcmVBbmRGb3JnZXQoKTsKLSAgICAKKwogICAgIHB1YmxpYyBpbnQgZ2V0RmlyZUFuZEZvcmdldENvdW50KCk7CiAKICAgICBGdXR1cmU8U3RyaW5nPiBoZWxsb0FzeW5jKCk7CiAKLSAgICBGdXR1cmU8SW50ZWdlcj4gcHJvY2Vzc0FzeW5jKGludCBzbGVlcEludGVydmFsLCBpbnQgbnVtSW50ZXJ2YWxzKSAKLQl0aHJvd3MgRXhjZXB0aW9uOworICAgIEZ1dHVyZTxJbnRlZ2VyPiBwcm9jZXNzQXN5bmMoaW50IHNsZWVwSW50ZXJ2YWwsIGludCBudW1JbnRlcnZhbHMpCisgICAgdGhyb3dzIEV4Y2VwdGlvbjsKIAotCQorCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvcmVtb3RlL2VqYi9SZW1vdGVBc3luYzMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvcmVtb3RlL2VqYi9SZW1vdGVBc3luYzMuamF2YQppbmRleCAzYzc2MjgzLi4xNzVhZTA2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3JlbW90ZS9lamIvUmVtb3RlQXN5bmMzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9yZW1vdGUvZWpiL1JlbW90ZUFzeW5jMy5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiAKIAogICAgIHB1YmxpYyBGdXR1cmU8U3RyaW5nPiBoZWxsb0FzeW5jKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBGdXR1cmU8U3RyaW5nPiByZW1vdmVBZnRlckNhbGxpbmcoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIEZ1dHVyZTxTdHJpbmc+IHRocm93RXhjZXB0aW9uKFN0cmluZyBleGNlcHRpb24pIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sIENyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9yZW1vdGUvZWpiL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvcmVtb3RlL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggYjNkODYyMDcuLjViYmI3MGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvcmVtb3RlL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9yZW1vdGUvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQpAQCAtNDAsNTggKzQwLDU4IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc3RhcnRUZXN0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2luZ2xldG9uQmVhbjo6c3RhcnRUZXN0KCkiKTsKLQkvLyByZXNldCBzdGF0ZQotCWZpcmVBbmRGb3JnZXRDb3VudCA9IG5ldyBBdG9taWNJbnRlZ2VyKCk7Ci0JcmV0dXJuOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2luZ2xldG9uQmVhbjo6c3RhcnRUZXN0KCkiKTsKKyAgICAvLyByZXNldCBzdGF0ZQorICAgIGZpcmVBbmRGb3JnZXRDb3VudCA9IG5ldyBBdG9taWNJbnRlZ2VyKCk7CisgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEBBc3luY2hyb25vdXMKICAgICBwdWJsaWMgdm9pZCBmaXJlQW5kRm9yZ2V0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6ZmlyZUFuZEZvcmdldCgpIik7Ci0JZmlyZUFuZEZvcmdldENvdW50LmluY3JlbWVudEFuZEdldCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6ZmlyZUFuZEZvcmdldCgpIik7CisgICAgZmlyZUFuZEZvcmdldENvdW50LmluY3JlbWVudEFuZEdldCgpOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0RmlyZUFuZEZvcmdldENvdW50KCkgewotCXJldHVybiBmaXJlQW5kRm9yZ2V0Q291bnQuZ2V0KCk7CisgICAgcmV0dXJuIGZpcmVBbmRGb3JnZXRDb3VudC5nZXQoKTsKICAgICB9CiAKICAgICBAQXN5bmNocm9ub3VzCiAgICAgcHVibGljIEZ1dHVyZTxTdHJpbmc+IGhlbGxvQXN5bmMoKSB7Ci0JcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KCJoZWxsbywgd29ybGRcbiIpOworICAgIHJldHVybiBuZXcgQXN5bmNSZXN1bHQ8U3RyaW5nPigiaGVsbG8sIHdvcmxkXG4iKTsKICAgICB9CiAKICAgICBAQXN5bmNocm9ub3VzCi0gICAgcHVibGljIEZ1dHVyZTxJbnRlZ2VyPiBwcm9jZXNzQXN5bmMoaW50IHNsZWVwSW50ZXJ2YWwsIGludCBudW1JbnRlcnZhbHMpIAorICAgIHB1YmxpYyBGdXR1cmU8SW50ZWdlcj4gcHJvY2Vzc0FzeW5jKGludCBzbGVlcEludGVydmFsLCBpbnQgbnVtSW50ZXJ2YWxzKQogICAgICAgIHRocm93cyBFeGNlcHRpb24gewotCWludCBtZSA9IHByb2Nlc3NBc3luY0NvdW50LmluY3JlbWVudEFuZEdldCgpOwotCWJvb2xlYW4gY2FuY2VsbGVkID0gZmFsc2U7Ci0JaW50IGkgPSAwOwotCXdoaWxlKGkgPCBudW1JbnRlcnZhbHMpIHsKLQkgICAgaSsrOwotCSAgICBpZiggc2Vzc2lvbkN0eC53YXNDYW5jZWxDYWxsZWQoKSApIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDYW5jZWxsaW5nIHByb2Nlc3NBc3luYyAiICsgbWUgKyAiIGFmdGVyICIgKwotCQkJCSAgIGkgKyAiIGludGVydmFscyIpOwotCQljYW5jZWxsZWQgPSB0cnVlOwotCQlicmVhazsKLQkgICAgfQotCSAgICB0cnkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwaW5nIGZvciAiICsgaSArICJ0aCB0aW1lIGluIHByb2Nlc3NBc3luYyAiICsKLQkJCQkgICBtZSk7Ci0JCVRocmVhZC5zbGVlcChzbGVlcEludGVydmFsICogMTAwMCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiV29rZSB1cCBmb3IgIiArIGkgKyAidGggdGltZSBpbiBwcm9jZXNzQXN5bmMgIiArCi0JCQkJICAgbWUpOwotCSAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JICAgIH0KLQl9Ci0JCi0JaWYoIGNhbmNlbGxlZCApIHsKLQkgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQ2FuY2VsbGVkIHByb2Nlc3NBc3luYyAiICsgbWUpOwotCX0KKyAgICBpbnQgbWUgPSBwcm9jZXNzQXN5bmNDb3VudC5pbmNyZW1lbnRBbmRHZXQoKTsKKyAgICBib29sZWFuIGNhbmNlbGxlZCA9IGZhbHNlOworICAgIGludCBpID0gMDsKKyAgICB3aGlsZShpIDwgbnVtSW50ZXJ2YWxzKSB7CisgICAgICAgIGkrKzsKKyAgICAgICAgaWYoIHNlc3Npb25DdHgud2FzQ2FuY2VsQ2FsbGVkKCkgKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FuY2VsbGluZyBwcm9jZXNzQXN5bmMgIiArIG1lICsgIiBhZnRlciAiICsKKyAgICAgICAgICAgICAgICAgICBpICsgIiBpbnRlcnZhbHMiKTsKKyAgICAgICAgY2FuY2VsbGVkID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTbGVlcGluZyBmb3IgIiArIGkgKyAidGggdGltZSBpbiBwcm9jZXNzQXN5bmMgIiArCisgICAgICAgICAgICAgICAgICAgbWUpOworICAgICAgICBUaHJlYWQuc2xlZXAoc2xlZXBJbnRlcnZhbCAqIDEwMDApOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldva2UgdXAgZm9yICIgKyBpICsgInRoIHRpbWUgaW4gcHJvY2Vzc0FzeW5jICIgKworICAgICAgICAgICAgICAgICAgIG1lKTsKKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOworICAgICAgICB9CisgICAgfQogCi0JcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxJbnRlZ2VyPihudW1JbnRlcnZhbHMpOworICAgIGlmKCBjYW5jZWxsZWQgKSB7CisgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkNhbmNlbGxlZCBwcm9jZXNzQXN5bmMgIiArIG1lKTsKKyAgICB9CisKKyAgICByZXR1cm4gbmV3IEFzeW5jUmVzdWx0PEludGVnZXI+KG51bUludGVydmFscyk7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvcmVtb3RlL2VqYi9TdGF0ZWZ1bEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvcmVtb3RlL2VqYi9TdGF0ZWZ1bEJlYW4uamF2YQppbmRleCA5MDg5MTMxLi5hNDMxOWY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3JlbW90ZS9lamIvU3RhdGVmdWxCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9yZW1vdGUvZWpiL1N0YXRlZnVsQmVhbi5qYXZhCkBAIC0zNSwyNSArMzUsMjUgQEAKIAogICAgIEBBc3luY2hyb25vdXMKICAgICBwdWJsaWMgRnV0dXJlPFN0cmluZz4gaGVsbG9Bc3luYygpIHsKLQlyZXR1cm4gbmV3IEFzeW5jUmVzdWx0PFN0cmluZz4oImhlbGxvLCB3b3JsZFxuIik7CisgICAgcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KCJoZWxsbywgd29ybGRcbiIpOwogICAgIH0KIAogICAgIEBBc3luY2hyb25vdXMKICAgICBAUmVtb3ZlCiAgICAgcHVibGljIEZ1dHVyZTxTdHJpbmc+IHJlbW92ZUFmdGVyQ2FsbGluZygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjo6cmVtb3ZlQWZ0ZXJDYWxsaW5nKCkiKTsKLQlyZXR1cm4gbmV3IEFzeW5jUmVzdWx0PFN0cmluZz4oInJlbW92ZWQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjo6cmVtb3ZlQWZ0ZXJDYWxsaW5nKCkiKTsKKyAgICByZXR1cm4gbmV3IEFzeW5jUmVzdWx0PFN0cmluZz4oInJlbW92ZWQiKTsKICAgICB9CiAKICAgICBAQXN5bmNocm9ub3VzCi0JcHVibGljIEZ1dHVyZTxTdHJpbmc+IHRocm93RXhjZXB0aW9uKFN0cmluZyBleGNlcHRpb24pIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewotCWlmKCBleGNlcHRpb24uZXF1YWxzKCJqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24iKSApIHsKLQkgICAgdGhyb3cgbmV3IENyZWF0ZUV4Y2VwdGlvbigpOwotCX0gZWxzZSBpZiAoIGV4Y2VwdGlvbi5lcXVhbHMoImpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbiIpICkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCk7Ci0JfQorICAgIHB1YmxpYyBGdXR1cmU8U3RyaW5nPiB0aHJvd0V4Y2VwdGlvbihTdHJpbmcgZXhjZXB0aW9uKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKKyAgICBpZiggZXhjZXB0aW9uLmVxdWFscygiamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIikgKSB7CisgICAgICAgIHRocm93IG5ldyBDcmVhdGVFeGNlcHRpb24oKTsKKyAgICB9IGVsc2UgaWYgKCBleGNlcHRpb24uZXF1YWxzKCJqYWthcnRhLmVqYi5FSkJFeGNlcHRpb24iKSApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigpOworICAgIH0KIAotCXJldHVybiBuZXcgQXN5bmNSZXN1bHQ8U3RyaW5nPigidW5zdXBwb3J0ZWQgZXhjZXB0aW9uIHR5cGUiKTsKKyAgICByZXR1cm4gbmV3IEFzeW5jUmVzdWx0PFN0cmluZz4oInVuc3VwcG9ydGVkIGV4Y2VwdGlvbiB0eXBlIik7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvdGhyZWFkcG9vbGNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy90aHJlYWRwb29sY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjIxMWU2NC4uMGI3YzkzYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy90aHJlYWRwb29sY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy90aHJlYWRwb29sY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEzICsxNSwxMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWFzeW5jaHJvbm91cy10aHJlYWRwb29sY29uZmlnIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAotPHByb3BlcnR5IG5hbWU9Im51bU9mSW52b2NhdGlvbnMiIHZhbHVlPSIxMDAiLz4gICAgCi08cHJvcGVydHkgbmFtZT0ibWF4UG9vbFNpemUiIHZhbHVlPSIzMiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAorPHByb3BlcnR5IG5hbWU9Im51bU9mSW52b2NhdGlvbnMiIHZhbHVlPSIxMDAiLz4gICBcdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJtYXhQb29sU2l6ZSIgdmFsdWU9IjMyIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0idGVzdC5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJnbGFzc2Zpc2gtZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2dsYXNzZmlzaC1lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy90aHJlYWRwb29sY29uZmlnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvdGhyZWFkcG9vbGNvbmZpZy9idWlsZC54bWwKaW5kZXggOGQyYTIzYy4uOTJiYjhiZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy90aHJlYWRwb29sY29uZmlnL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3RocmVhZHBvb2xjb25maWcvYnVpbGQueG1sCkBAIC0yOSwxNSArMjksMTUgQEAKICAgICAmY29tbW9uQnVpbGQ7CiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwogCi0gICAgPCEtLSBub3RlIHRoYXQgd2UgZG9uJ3QgdW5kZXBsb3kgYXMgcGFydCBvZiBhbGwgdGFyZ2V0IHNvIAorICAgIDwhLS0gbm90ZSB0aGF0IHdlIGRvbid0IHVuZGVwbG95IGFzIHBhcnQgb2YgYWxsIHRhcmdldCBzbwogICAgIHRoYXQgdG9wLWxldmVsIGJ1aWxkIHNjcmlwdCBjYW4gcnVuIHJlbW90ZTIgZmlyc3QgLS0+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJ1biwgdW5kZXBsb3kiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDksMTIgKzQ5LDEyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovSGVsbG8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDkgKzYyLDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CkBAIC03NSw3ICs3NSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3RocmVhZHBvb2xjb25maWcvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy90aHJlYWRwb29sY29uZmlnL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAwZDgwYWViLi44NjI2ZmZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3RocmVhZHBvb2xjb25maWcvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvdGhyZWFkcG9vbGNvbmZpZy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGhyZWFkTmFtZVByZWZpeCA9ICJfX2VqYi10aHJlYWQtcG9vbCI7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlhcHBOYW1lID0gYXJnc1swXTsgCisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CiAgICAgICAgIGlmKGFyZ3MubGVuZ3RoID49IDIpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgbnVtT2ZJbnZvY2F0aW9ucyA9IEludGVnZXIucGFyc2VJbnQoYXJnc1sxXSk7CkBAIC00NCw5ICs0NCw5IEBACiAgICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeyAgLy9pZ25vcmUKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCXN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7Ci0JQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsgICAgICAgCi0gICAgICAgIGNsaWVudC5kb1Rlc3QoKTsJCisgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKKyAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOworICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKICAgICB9CiAKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bU9mSW52b2NhdGlvbnM7IGkrKykgewogICAgICAgICAgICAgcmVzdWx0cy5hZGQoaGVsbG9CZWFuLmdldFRocmVhZE5hbWVJZCgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBmb3IoRnV0dXJlPFN0cmluZz4gZiA6IHJlc3VsdHMpIHsKICAgICAgICAgICAgIFN0cmluZyBzID0gZi5nZXQoKTsKICAgICAgICAgICAgIFN0cmluZyB0aHJlYWROYW1lID0gcy5zcGxpdCgiICIpWzBdOwpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTnVtYmVyIG9mIHJlc3VsdHM6ICIgKyByZXN1bHRzLnNpemUoKSk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWxsICIgKyBhY2NlcHRhYmxlVGhyZWFkTmFtZXMuc2l6ZSgpICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWxsICIgKyBhY2NlcHRhYmxlVGhyZWFkTmFtZXMuc2l6ZSgpICsKICAgICAgICAgICAgICIgYWNjZXB0YWJsZSB0aHJlYWQgbmFtZXM6ICIgKyBhY2NlcHRhYmxlVGhyZWFkTmFtZXMpOwogICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcHBOYW1lLCAoZmFpbGVkID8gc3RhdC5GQUlMOiBzdGF0LlBBU1MpKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3RocmVhZHBvb2xjb25maWcvZWpiL0hlbGxvQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy90aHJlYWRwb29sY29uZmlnL2VqYi9IZWxsb0JlYW4uamF2YQppbmRleCA0NGM1MTQxLi4wYjk3NDNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3RocmVhZHBvb2xjb25maWcvZWpiL0hlbGxvQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvdGhyZWFkcG9vbGNvbmZpZy9lamIvSGVsbG9CZWFuLmphdmEKQEAgLTMxLDYgKzMxLDYgQEAKICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewogICAgICAgICB9CiAgICAgICAgIFRocmVhZCB0aCA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCk7Ci0JcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KHRoLmdldE5hbWUoKSArICIgIiArIFN5c3RlbS5pZGVudGl0eUhhc2hDb2RlKHRoKSk7CisgICAgcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KHRoLmdldE5hbWUoKSArICIgIiArIFN5c3RlbS5pZGVudGl0eUhhc2hDb2RlKHRoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9idWlsZC54bWwKaW5kZXggNWExMDg5Yy4uNzg4M2I1ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYnVpbGQueG1sCkBAIC05Miw5ICs5Miw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamIzMSB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWpiMzEgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvYnVpbGQueG1sCmluZGV4IDE3M2I4NWQuLjhjYzAyYTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9idWlsZC54bWwKQEAgLTcwLDkgKzcwLDkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWVqYjMxLWVqYmxpdGUgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWVqYjMxLWVqYmxpdGUgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvZ2VuZXJpY3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2dlbmVyaWNzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODY3YmEwZS4uNzgyNjVmMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvZ2VuZXJpY3MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9nZW5lcmljcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMS1lamJsaXRlLWdlbmVyaWNzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLnN1bi5zMWFzLmRldnRlc3RzLmVqYi5nZW5lcmljcy5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvZ2VuZXJpY3MvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvZ2VuZXJpY3MvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDY1MDc4ZGYuLjYxOWVmZmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2dlbmVyaWNzL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9nZW5lcmljcy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDExICsyOCwxMSBAQAogICogaXNzdWUgMTcyMzUgRGVwZW5kZW5jeSBJbmplY3Rpb24gZG9lc24ndCB3b3JrIGZvciBvdmVybG9hZGVkIG1ldGhvZHMgYWNjZXB0aW5nIGdlbmVyaWMtdHlwZSBwYXJhbWV0ZXIKICAqIERPIE5PVCBURVNUOiBpc3N1ZSAxNjM3MiBOb3QgYWJsZSB0byBtYWtlIHRvU3RyaW5nKCkgYSBmaW5hbCBtZXRob2QgaW4gRUpCIHdpdGggbm8taW50ZXJmYWNlIHZpZXcKICAqIHZlcmlmaWVkIGluIFR5cGVWYXJpYWJsZUJlYW4KLSAqIAorICoKICAqLwogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CkBAIC00MCw0MyArNDAsNDMgQEAKICAgICBwcml2YXRlIFN0cmluZyBwb3J0OwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewotCWFwcE5hbWUgPSBhcmdzWzBdOwotCXN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7Ci0JQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7ICAgICAgIAotICAgICAgICBjbGllbnQuZG9UZXN0KCk7CQorICAgIGFwcE5hbWUgPSBhcmdzWzBdOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7CisgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CisgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwogICAgIH0KIAogICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewotCWhvc3QgPSBhcmdzWzFdOworICAgIGhvc3QgPSBhcmdzWzFdOwogICAgICAgICBwb3J0ID0gYXJnc1syXTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0JdHJ5IHsKLQkgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgCisgICAgdHJ5IHsKKyAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICAgICAiLyIgKyBhcHBOYW1lICsgIi9UZXN0U2VydmxldCI7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgd2ViY2xpZW50IHNlcnZsZXQgYXQgIiArIHVybCk7CiAKLQkgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7Ci0gICAgICAgIAotCSAgICBIdHRwVVJMQ29ubmVjdGlvbiBjMSA9IChIdHRwVVJMQ29ubmVjdGlvbil1Lm9wZW5Db25uZWN0aW9uKCk7Ci0JICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7Ci0JICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKLQkgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwotCSAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0JICAgIHdoaWxlKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkKLQkJU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOwotCSAgICBpZihjb2RlICE9IDIwMCkgewotCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW5jb3JyZWN0IHJldHVybiBjb2RlOiAiICsgY29kZSk7Ci0JICAgIH0KLQkgICAgCi0JICAgIHN0YXQuYWRkU3RhdHVzKGFwcE5hbWUsIHN0YXQuUEFTUyk7CisgICAgICAgIFVSTCB1ID0gbmV3IFVSTCh1cmwpOwogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBzdGF0LmFkZFN0YXR1cyhhcHBOYW1lLCBzdGF0LkZBSUwpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gYzEgPSAoSHR0cFVSTENvbm5lY3Rpb24pdS5vcGVuQ29ubmVjdGlvbigpOworICAgICAgICBpbnQgY29kZSA9IGMxLmdldFJlc3BvbnNlQ29kZSgpOworICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7CisgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKKyAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOworICAgICAgICB3aGlsZSgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKKyAgICAgICAgaWYoY29kZSAhPSAyMDApIHsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluY29ycmVjdCByZXR1cm4gY29kZTogIiArIGNvZGUpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXBwTmFtZSwgc3RhdC5QQVNTKTsKKworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXBwTmFtZSwgc3RhdC5GQUlMKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvZ2VuZXJpY3Mvd2FyL0Fic3RyYWN0QmFzZUVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvZ2VuZXJpY3Mvd2FyL0Fic3RyYWN0QmFzZUVKQi5qYXZhCmluZGV4IDNkNjFiNzEuLmNmN2NhNjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2dlbmVyaWNzL3dhci9BYnN0cmFjdEJhc2VFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9nZW5lcmljcy93YXIvQWJzdHJhY3RCYXNlRUpCLmphdmEKQEAgLTUxLDQgKzUxLDQgQEAKICAgICBhYnN0cmFjdCBwdWJsaWMgdm9pZCBkb1NvbWV0aGluZzUoTGlzdDxUPiB0KTsKIAogICAgIGFic3RyYWN0IHB1YmxpYyB2b2lkIGRvU29tZXRoaW5nNihMaXN0PExpc3Q8VD4+IHQpOwotfSAKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2dlbmVyaWNzL3dhci9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvZ2VuZXJpY3Mvd2FyL1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggNDI5YTc5My4uMDJlYjkzNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvZ2VuZXJpY3Mvd2FyL1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvZ2VuZXJpY3Mvd2FyL1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgdGVzdEJlYW4uZG9Tb21ldGhpbmc1KG51bGwpOwogICAgICAgICB0ZXN0QmVhbi5kb1NvbWV0aGluZzYobnVsbCk7CiAgICAgICAgIG91dC5wcmludGxuKHRlc3RCZWFuLmhlbGxvKCkpOwotICAgICAgICBvdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhbGxlZCBtZXRob2RzIG9uICIgKyB0ZXN0QmVhbik7IAorICAgICAgICBvdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhbGxlZCBtZXRob2RzIG9uICIgKyB0ZXN0QmVhbik7CiAKICAgICAgICAgb3V0LnByaW50bG4odHlwZVZhcmlhYmxlQmVhbi5oZWxsbygic29tZSB0ZXh0IikpOwogICAgICAgICBvdXQucHJpbnRsbih0eXBlVmFyaWFibGVCZWFuLmhlbGxvKDEwKSk7CkBAIC02Miw0ICs2Miw0IEBACiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiB9Ci0gICAgICAgIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTJhNmFiYS4uMGI0MDFiMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZWpibGl0ZS1qYXZhbW9kdWxlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIke21vZHVsZX0iLz4KLQkKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvYnVpbGQueG1sCmluZGV4IGQ1NDQzOWEuLjU4ODdiNDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0id2FyIi8+CkBAIC00OCw5ICs0OCw5IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0iZmFsc2UiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNTgsOSArNTgsOSBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTcyLDcgKzcyLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYzI5OGE0Yi4uYzE4Y2RlMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CkBAIC0zNCw0NiArMzQsNDYgQEAKICAgICBwcml2YXRlIFN0cmluZyBwb3J0OwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewotCWFwcE5hbWUgPSBhcmdzWzBdOwotCXN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7Ci0JQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7ICAgICAgIAotICAgICAgICBjbGllbnQuZG9UZXN0KCk7CQorICAgIGFwcE5hbWUgPSBhcmdzWzBdOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7CisgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CisgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwogICAgIH0KIAogICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewotCWhvc3QgPSBhcmdzWzFdOworICAgIGhvc3QgPSBhcmdzWzFdOwogICAgICAgICBwb3J0ID0gYXJnc1syXTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKLQl0cnkgeworICAgIHRyeSB7CiAKLQkgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgCisgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICAgICAgIi8iICsgYXBwTmFtZSArICIvSGVsbG9TZXJ2bGV0IjsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyB3ZWJjbGllbnQgc2VydmxldCBhdCAiICsgdXJsKTsKIAotCSAgICBVUkwgdSA9IG5ldyBVUkwodXJsKTsKLSAgICAgICAgCi0JICAgIEh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKXUub3BlbkNvbm5lY3Rpb24oKTsKLQkgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKLQkgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOwotCSAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlciAobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7Ci0JICAgIFN0cmluZyBsaW5lID0gbnVsbDsKLQkgICAgd2hpbGUoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKQotCQlTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7Ci0JICAgIGlmKGNvZGUgIT0gMjAwKSB7Ci0JCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbmNvcnJlY3QgcmV0dXJuIGNvZGU6ICIgKyBjb2RlKTsKLQkgICAgfQotCSAgICAKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworICAgICAgICBVUkwgdSA9IG5ldyBVUkwodXJsKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gYzEgPSAoSHR0cFVSTENvbm5lY3Rpb24pdS5vcGVuQ29ubmVjdGlvbigpOworICAgICAgICBpbnQgY29kZSA9IGMxLmdldFJlc3BvbnNlQ29kZSgpOworICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7CisgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKKyAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOworICAgICAgICB3aGlsZSgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKKyAgICAgICAgaWYoY29kZSAhPSAyMDApIHsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluY29ycmVjdCByZXR1cm4gY29kZTogIiArIGNvZGUpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworCisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9CYXJNYW5hZ2VkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvQmFyTWFuYWdlZEJlYW4uamF2YQppbmRleCBkMWRmM2Y2Li40YWU3MTI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9CYXJNYW5hZ2VkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0Jhck1hbmFnZWRCZWFuLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBCYXJNYW5hZ2VkQmVhbjo6aW5pdCgpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gQmFyTWFuYWdlZEJlYW46OmluaXQoKSAiKTsKICAgICB9CiAKICAgIHB1YmxpYyB2b2lkIGJhcigpIHsKQEAgLTM5LDEyICszOSwxMiBAQAogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEJhck1hbmFnZWRCZWFuOjpkZXN0cm95KCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBCYXJNYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JcmV0dXJuICJCYXJNYW5hZ2VkQmVhbiB0aGlzID0gIiArIHN1cGVyLnRvU3RyaW5nKCkgKyAKLQkgICAgIiBzID0gIiArIHMgKyAiICwgZHMgPSAiICsgZHM7CisgICAgcmV0dXJuICJCYXJNYW5hZ2VkQmVhbiB0aGlzID0gIiArIHN1cGVyLnRvU3RyaW5nKCkgKworICAgICAgICAiIHMgPSAiICsgcyArICIgLCBkcyA9ICIgKyBkczsKIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvRm9vTWFuYWdlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0Zvb01hbmFnZWRCZWFuLmphdmEKaW5kZXggMzdiZGI4MC4uYzY0NjQ0YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvRm9vTWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9Gb29NYW5hZ2VkQmVhbi5qYXZhCkBAIC0zNiwyMCArMzYsMjAgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjo6aW5pdCgpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmluaXQoKSAiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBmb28oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjo6Zm9vKCkgIik7Ci0JYm1iLmJhcigpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmZvbygpICIpOworICAgIGJtYi5iYXIoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBmb29iYXIoU3RyaW5nIHMpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImZvb2Jhcjo6cyA9ICIgKyBzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZvb2Jhcjo6cyA9ICIgKyBzKTsKICAgICB9CiAKICAgICBwdWJsaWMgT2JqZWN0IGdldFRoaXMoKSB7Ci0JcmV0dXJuIHRoaXM7CisgICAgcmV0dXJuIHRoaXM7CiAgICAgfQogCiAgICAgcHVibGljIGludCByZXR1cm5JbnROb0V4Y2VwdGlvbnMoKSB7IHJldHVybiAxOyB9CkBAIC02OCwxOSArNjgsMTkgQEAKIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKICAgICB9CiAKIAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JcmV0dXJuICJGb29NYW5hZ2VkQmVhbiB0aGlzID0gIiArIHN1cGVyLnRvU3RyaW5nKCkgKyAKKyAgICByZXR1cm4gIkZvb01hbmFnZWRCZWFuIHRoaXMgPSAiICsgc3VwZXIudG9TdHJpbmcoKSArCiAgICAgICAgICAgICAgICAgIiBzID0gIiArIHMgKyAiICwgYm1iID0gIiArIGJtYiArICIgLCBlbSA9ICIgKyBlbTsKICAgICB9CiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBhcm91bmQoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjo6YXJvdW5kKCkgIik7Ci0JcmV0dXJuIGMucHJvY2VlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmFyb3VuZCgpICIpOworICAgIHJldHVybiBjLnByb2NlZWQoKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0hlbGxvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvSGVsbG9TZXJ2bGV0LmphdmEKaW5kZXggNzgyNzdkMi4uOGQyN2FmMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvSGVsbG9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvSGVsbG9TZXJ2bGV0LmphdmEKQEAgLTczLDkxICs3Myw5MSBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmluaXQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2VydmxldDo6aW5pdCIpOwogCi0JdHJ5IHsKLQkgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgc2IyID0gKFNpbmdsZXRvbkJlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvU2luZ2xldG9uQmVhbiIpOwotCSAgICBzYjMgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TaW5nbGV0b25CZWFuIWNvbS5hY21lLlNpbmdsZXRvbkJlYW4iKTsKKyAgICB0cnkgeworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBzYjIgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TaW5nbGV0b25CZWFuIik7CisgICAgICAgIHNiMyA9IChTaW5nbGV0b25CZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL1NpbmdsZXRvbkJlYW4hY29tLmFjbWUuU2luZ2xldG9uQmVhbiIpOwogCi0JICAgIHNiNCA9IChTaW5nbGV0b25CZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL0VTMSIpOwotCSAgICBzYjUgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvRVMyIik7CisgICAgICAgIHNiNCA9IChTaW5nbGV0b25CZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL0VTMSIpOworICAgICAgICBzYjUgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvRVMyIik7CiAKLQkgICAgc2xzYiA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL1N0YXRlbGVzc0JlYW4iKTsKLQkgICAgc2xzYjIgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOmFwcC9lamItZWpiMzEtZWpibGl0ZS1qYXZhbW9kdWxlLXdlYi9TdGF0ZWxlc3NCZWFuIik7Ci0JICAgIHNsc2IzID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTphcHAvZWpiLWVqYjMxLWVqYmxpdGUtamF2YW1vZHVsZS13ZWIvU3RhdGVsZXNzQmVhbiFjb20uYWNtZS5TdGF0ZWxlc3NCZWFuIik7CisgICAgICAgIHNsc2IgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TdGF0ZWxlc3NCZWFuIik7CisgICAgICAgIHNsc2IyID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTphcHAvZWpiLWVqYjMxLWVqYmxpdGUtamF2YW1vZHVsZS13ZWIvU3RhdGVsZXNzQmVhbiIpOworICAgICAgICBzbHNiMyA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1lamJsaXRlLWphdmFtb2R1bGUtd2ViL1N0YXRlbGVzc0JlYW4hY29tLmFjbWUuU3RhdGVsZXNzQmVhbiIpOwogCi0JICAgIHNsc2I0ID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTphcHAvRUwxIik7Ci0JICAgIHNsc2I1ID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTphcHAvZW52L0VMMiIpOworICAgICAgICBzbHNiNCA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL0VMMSIpOworICAgICAgICBzbHNiNSA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL2Vudi9FTDIiKTsKIAotCSAgICBmb280ID0gKEZvb01hbmFnZWRCZWFuKSAKLQkJaWMubG9va3VwKCJqYXZhOm1vZHVsZS9mb29tYW5hZ2VkYmVhbiIpOworICAgICAgICBmb280ID0gKEZvb01hbmFnZWRCZWFuKQorICAgICAgICBpYy5sb29rdXAoImphdmE6bW9kdWxlL2Zvb21hbmFnZWRiZWFuIik7CiAKLQkgICAgZm9vNSA9IChGb29NYW5hZ2VkQmVhbikgCi0JCWljLmxvb2t1cCgiamF2YTphcHAvZWpiLWVqYjMxLWVqYmxpdGUtamF2YW1vZHVsZS13ZWIvZm9vbWFuYWdlZGJlYW4iKTsKKyAgICAgICAgZm9vNSA9IChGb29NYW5hZ2VkQmVhbikKKyAgICAgICAgaWMubG9va3VwKCJqYXZhOmFwcC9lamItZWpiMzEtZWpibGl0ZS1qYXZhbW9kdWxlLXdlYi9mb29tYW5hZ2VkYmVhbiIpOwogCi0JICAgIGZvbzYgPSAoRm9vTWFuYWdlZEJlYW4pCi0JCWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9mb28ycmVmIik7CisgICAgICAgIGZvbzYgPSAoRm9vTWFuYWdlZEJlYW4pCisgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9mb28ycmVmIik7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeSBBcHBOYW1lID0gIiArIAotCQkJICAgICAgIGljLmxvb2t1cCgiamF2YTphcHAvQXBwTmFtZSIpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeSBBcHBOYW1lID0gIiArCisgICAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmFwcC9BcHBOYW1lIikpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXkgTW9kdWxlTmFtZSA9ICIgKyAKLQkJCSAgICAgICBpYy5sb29rdXAoImphdmE6bW9kdWxlL01vZHVsZU5hbWUiKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXkgTW9kdWxlTmFtZSA9ICIgKworICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTptb2R1bGUvTW9kdWxlTmFtZSIpKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZSk7Ci0JfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZSk7CisgICAgfQogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCi0JcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2VydmxldDo6ZG9HZXQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2VydmxldDo6ZG9HZXQiKTsKIAotCWZvby5mb29iYXIoImZvb2JhciIpOworICAgIGZvby5mb29iYXIoImZvb2JhciIpOwogCi0Jc2ltcGxlU2luZ2xldG9uLmhlbGxvKCk7CisgICAgc2ltcGxlU2luZ2xldG9uLmhlbGxvKCk7CiAKLQlzaW1wbGVTdGF0ZWxlc3MuaGVsbG8oKTsKLQlzaW1wbGVTdGF0ZWxlc3MyLmhlbGxvKCk7CisgICAgc2ltcGxlU3RhdGVsZXNzLmhlbGxvKCk7CisgICAgc2ltcGxlU3RhdGVsZXNzMi5oZWxsbygpOwogCi0Jc2IyLmhlbGxvKCk7CisgICAgc2IyLmhlbGxvKCk7CiAKLQlzYjMuaGVsbG8oKTsKKyAgICBzYjMuaGVsbG8oKTsKIAotCXNiNC5oZWxsbygpOworICAgIHNiNC5oZWxsbygpOwogCi0Jc2I1LmhlbGxvKCk7CisgICAgc2I1LmhlbGxvKCk7CiAKLQlzbHNiLmhlbGxvKCk7CisgICAgc2xzYi5oZWxsbygpOwogCi0Jc2xzYjIuaGVsbG8oKTsKKyAgICBzbHNiMi5oZWxsbygpOwogCi0Jc2xzYjMuaGVsbG8oKTsKKyAgICBzbHNiMy5oZWxsbygpOwogCi0Jc2xzYjQuaGVsbG8oKTsKKyAgICBzbHNiNC5oZWxsbygpOwogCi0Jc2xzYjUuaGVsbG8oKTsKKyAgICBzbHNiNS5oZWxsbygpOwogCi0JZm9vLmZvbygpOwotCWZvby5mb29iYXIoImZvb2JhciIpOwotCWZvbzIuZm9vKCk7Ci0JZm9vMy5mb28oKTsKLQlmb280LmZvbygpOwotCWZvbzUuZm9vKCk7CQotCWZvbzYuZm9vKCk7CisgICAgZm9vLmZvbygpOworICAgIGZvby5mb29iYXIoImZvb2JhciIpOworICAgIGZvbzIuZm9vKCk7CisgICAgZm9vMy5mb28oKTsKKyAgICBmb280LmZvbygpOworICAgIGZvbzUuZm9vKCk7CisgICAgZm9vNi5mb28oKTsKIAotCW91dC5wcmludGxuKCI8SFRNTD4gPEhFQUQ+IDxUSVRMRT4gSk1TIFNlcnZsZXQgT3V0cHV0IDwvVElUTEU+IDwvSEVBRD4gPEJPRFkgQkdDT0xPUj13aGl0ZT4iKTsKKyAgICBvdXQucHJpbnRsbigiPEhUTUw+IDxIRUFEPiA8VElUTEU+IEpNUyBTZXJ2bGV0IE91dHB1dCA8L1RJVExFPiA8L0hFQUQ+IDxCT0RZIEJHQ09MT1I9d2hpdGU+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPENFTlRFUj4gPEZPTlQgc2l6ZT0rMSBDT0xPUj1ibHVlPkRhdGFiYXNlU2VydmVsdCA6OiBBbGwgaW5mb3JtYXRpb24gSSBjYW4gZ2l2ZSA8L0ZPTlQ+IDwvQ0VOVEVSPiA8cD4gIiApOwotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBDb250ZXh0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldENvbnRleHRQYXRoKCkgKyAiPGJyPiIgKTsgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFNlcnZsZXQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0U2VydmxldFBhdGgoKSArICI8YnI+IiApOyAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gUGF0aCBJbmZvIDogIDwvRk9OVD4gIiArIHJlcS5nZXRQYXRoSW5mbygpICsgIjxicj4iICk7IAorICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBDb250ZXh0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldENvbnRleHRQYXRoKCkgKyAiPGJyPiIgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gU2VydmxldCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRTZXJ2bGV0UGF0aCgpICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBhdGggSW5mbyA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0UGF0aEluZm8oKSArICI8YnI+IiApOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvQk9EWT4gPC9IVE1MPiAiKTsKIAogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0ludGVyY2VwdG9yQS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvSW50ZXJjZXB0b3JBLmphdmEKaW5kZXggNmUxNTE2Ni4uOTcwM2JjYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvSW50ZXJjZXB0b3JBLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvSW50ZXJjZXB0b3JBLmphdmEKQEAgLTMzLDI0ICszMywyNCBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdChJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQTo6aW5pdCgpICIpOwotCWMucHJvY2VlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JBOjppbml0KCkgIik7CisgICAgYy5wcm9jZWVkKCk7CiAgICAgfQogCiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCByb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQTo6cm91bmRJbnZva2UoKSAiKTsKLQlpZiggYy5nZXRQYXJhbWV0ZXJzKCkubGVuZ3RoID4gMCApIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJwYXJhbSAxID0gIiArIGMuZ2V0UGFyYW1ldGVycygpWzBdKTsKLQl9Ci0JcmV0dXJuIGMucHJvY2VlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JBOjpyb3VuZEludm9rZSgpICIpOworICAgIGlmKCBjLmdldFBhcmFtZXRlcnMoKS5sZW5ndGggPiAwICkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInBhcmFtIDEgPSAiICsgYy5nZXRQYXJhbWV0ZXJzKClbMF0pOworICAgIH0KKyAgICByZXR1cm4gYy5wcm9jZWVkKCk7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveShJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yOjpkZXN0cm95KCkgIik7Ci0JYy5wcm9jZWVkKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvcjo6ZGVzdHJveSgpICIpOworICAgIGMucHJvY2VlZCgpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvSW50ZXJjZXB0b3JCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9JbnRlcmNlcHRvckIuamF2YQppbmRleCBjNjQzNjM3Li41NWUwM2ZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9JbnRlcmNlcHRvckIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9JbnRlcmNlcHRvckIuamF2YQpAQCAtMjgsMzYgKzI4LDM2IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JCOjppbml0KCkgIik7Ci0JYy5wcm9jZWVkKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckI6OmluaXQoKSAiKTsKKyAgICBjLnByb2NlZWQoKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IHJvdW5kSW52b2tlKEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJTaG91bGQgbm90IHJlYWNoIGhlcmUiKTsKKyAgICBwdWJsaWMgT2JqZWN0IHJvdW5kSW52b2tlKEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24geworICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJTaG91bGQgbm90IHJlYWNoIGhlcmUiKTsKICAgICB9CiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHJpdmF0ZSBPYmplY3QgYXJvdW5kSW52b2tlKEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JCOjphcm91bmRJbnZva2UoKSAiKTsKLQljLmdldENvbnRleHREYXRhKCkucHV0KCJmb28iLCAiYmFyIik7Ci0JT2JqZWN0IHJldHVyblZhbHVlID0gYy5wcm9jZWVkKCk7Ci0JCi0JU3RyaW5nIGZvb2JhciA9IChTdHJpbmcpIGMuZ2V0Q29udGV4dERhdGEoKS5nZXQoImZvb2JhciIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiZm9vYmFyIGZyb20gY29udGV4dCBkYXRhID0gIiArIGZvb2Jhcik7Ci0JaWYoIGZvb2JhciA9PSBudWxsICkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJpbnZhbGlkIGNvbnRleHQgZGF0YSIpOwotCX0KLQkKLQljLmdldENvbnRleHREYXRhKCkuY2xlYXIoKTsKLQkKLQlyZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckI6OmFyb3VuZEludm9rZSgpICIpOworICAgIGMuZ2V0Q29udGV4dERhdGEoKS5wdXQoImZvbyIsICJiYXIiKTsKKyAgICBPYmplY3QgcmV0dXJuVmFsdWUgPSBjLnByb2NlZWQoKTsKKworICAgIFN0cmluZyBmb29iYXIgPSAoU3RyaW5nKSBjLmdldENvbnRleHREYXRhKCkuZ2V0KCJmb29iYXIiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZvb2JhciBmcm9tIGNvbnRleHQgZGF0YSA9ICIgKyBmb29iYXIpOworICAgIGlmKCBmb29iYXIgPT0gbnVsbCApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiaW52YWxpZCBjb250ZXh0IGRhdGEiKTsKKyAgICB9CisKKyAgICBjLmdldENvbnRleHREYXRhKCkuY2xlYXIoKTsKKworICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JCOjpkZXN0cm95KCkgIik7Ci0JYy5wcm9jZWVkKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckI6OmRlc3Ryb3koKSAiKTsKKyAgICBjLnByb2NlZWQoKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0ludGVyY2VwdG9yU3VwZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0ludGVyY2VwdG9yU3VwZXIuamF2YQppbmRleCA0YWRiZDAzLi4xYjkzMjVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9JbnRlcmNlcHRvclN1cGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvSW50ZXJjZXB0b3JTdXBlci5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHJvdGVjdGVkIE9iamVjdCByb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiU2hvdWxkIG5vdCByZWFjaCBoZXJlIik7CisgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlNob3VsZCBub3QgcmVhY2ggaGVyZSIpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvTWFuYWdlZFN1cGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9NYW5hZ2VkU3VwZXIuamF2YQppbmRleCA1YjBkZjU4Li4xMTNiMjgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9NYW5hZ2VkU3VwZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9NYW5hZ2VkU3VwZXIuamF2YQpAQCAtMzAsMjQgKzMwLDI0IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWFuYWdlZFN1cGVyOjppbml0KCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBNYW5hZ2VkU3VwZXI6OmluaXQoKSAiKTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWFuYWdlZFN1cGVyOjpkZXN0cm95KCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBNYW5hZ2VkU3VwZXI6OmRlc3Ryb3koKSAiKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCXJldHVybiAiTWFuYWdlZFN1cGVyIHRoaXMgPSAiICsgc3VwZXIudG9TdHJpbmcoKSArIAotCSAgICAiIHMgPSAiICsgcyArICIgLCBkcyA9ICIgKyBkczsKKyAgICByZXR1cm4gIk1hbmFnZWRTdXBlciB0aGlzID0gIiArIHN1cGVyLnRvU3RyaW5nKCkgKworICAgICAgICAiIHMgPSAiICsgcyArICIgLCBkcyA9ICIgKyBkczsKIAogICAgIH0KIAogICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBhcm91bmRTdXBlcihJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1hbmFnZWRTdXBlcjo6YXJvdW5kU3VwZXIoKSAiKTsKLQlyZXR1cm4gYy5wcm9jZWVkKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBNYW5hZ2VkU3VwZXI6OmFyb3VuZFN1cGVyKCkgIik7CisgICAgcmV0dXJuIGMucHJvY2VlZCgpOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9TaW5nbGV0b25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggMzk0ZmZjZS4uOWFjNWJmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL1NpbmdsZXRvbkJlYW4uamF2YQpAQCAtMzQsNyArMzQsNyBAQAogQFNpbmdsZXRvbgogQExvY2FsQmVhbgogcHVibGljIGNsYXNzIFNpbmdsZXRvbkJlYW4gaW1wbGVtZW50cyBqYXZhLnV0aWwuT2JzZXJ2ZXIgewotICAKKwogCiAgICAgQEVKQiBwcml2YXRlICBTaW5nbGV0b25CZWFuIG1lOwogCkBAIC01MSw3MSArNTEsNzEgQEAKICAgICBwcml2YXRlIFN0YXRlbGVzc0JlYW4gc2xzYjM7CiAgICAgcHJpdmF0ZSBTdGF0ZWxlc3NCZWFuIHNsc2I0OwogICAgIHByaXZhdGUgU3RhdGVsZXNzQmVhbiBzbHNiNTsKLQkKKwogICAgIHB1YmxpYyB2b2lkIHVwZGF0ZShqYXZhLnV0aWwuT2JzZXJ2YWJsZSBhLGphdmEubGFuZy5PYmplY3QgYikgIHt9CiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOmluaXQoKSBtZSA9ICIgKyBtZSk7Ci0JCi0JaWYoIHNlc3Npb25DdHguZ2V0Q29udGV4dERhdGEoKSA9PSBudWxsICkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJudWxsIGNvbnRleHQgZGF0YSIpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46aW5pdCgpIG1lID0gIiArIG1lKTsKIAotCXRyeSB7Ci0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgaWYoIHNlc3Npb25DdHguZ2V0Q29udGV4dERhdGEoKSA9PSBudWxsICkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJudWxsIGNvbnRleHQgZGF0YSIpOworICAgIH0KIAotCSAgICAvLyBMb29rdXAgc2ltcGxlIGZvcm0gb2YgcG9ydGFibGUgSk5ESSBuYW1lIAotCSAgICBTdGF0ZWxlc3NCZWFuIHN0YXRlbGVzcyA9IChTdGF0ZWxlc3NCZWFuKSAKLQkJaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TdGF0ZWxlc3NCZWFuIik7CisgICAgdHJ5IHsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIAotCSAgICBzdGF0ZWxlc3MuaGVsbG8oKTsKKyAgICAgICAgLy8gTG9va3VwIHNpbXBsZSBmb3JtIG9mIHBvcnRhYmxlIEpOREkgbmFtZQorICAgICAgICBTdGF0ZWxlc3NCZWFuIHN0YXRlbGVzcyA9IChTdGF0ZWxlc3NCZWFuKQorICAgICAgICBpYy5sb29rdXAoImphdmE6bW9kdWxlL1N0YXRlbGVzc0JlYW4iKTsKIAotCSAgICAvLyBMb29rdXAgZnVsbHktcXVhbGlmaWVkIGZvcm0gb2YgcG9ydGFibGUgSk5ESSBuYW1lCi0JICAgIFN0YXRlbGVzc0JlYW4gc3RhdGVsZXNzMiA9IChTdGF0ZWxlc3NCZWFuKSAKLQkJaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TdGF0ZWxlc3NCZWFuIWNvbS5hY21lLlN0YXRlbGVzc0JlYW4iKTsKKyAgICAgICAgc3RhdGVsZXNzLmhlbGxvKCk7CiAKLQkgICAgc3RhdGVsZXNzMi5oZWxsbygpOworICAgICAgICAvLyBMb29rdXAgZnVsbHktcXVhbGlmaWVkIGZvcm0gb2YgcG9ydGFibGUgSk5ESSBuYW1lCisgICAgICAgIFN0YXRlbGVzc0JlYW4gc3RhdGVsZXNzMiA9IChTdGF0ZWxlc3NCZWFuKQorICAgICAgICBpYy5sb29rdXAoImphdmE6bW9kdWxlL1N0YXRlbGVzc0JlYW4hY29tLmFjbWUuU3RhdGVsZXNzQmVhbiIpOwogCi0JICAgIHNiMiA9IChTaW5nbGV0b25CZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL1NpbmdsZXRvbkJlYW4iKTsKLQkgICAgc2IzID0gKFNpbmdsZXRvbkJlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvU2luZ2xldG9uQmVhbiFjb20uYWNtZS5TaW5nbGV0b25CZWFuIik7CisgICAgICAgIHN0YXRlbGVzczIuaGVsbG8oKTsKIAotCSAgICBzYjQgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9FUzEiKTsKLQkgICAgc2I1ID0gKFNpbmdsZXRvbkJlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvZW52L0VTMiIpOworICAgICAgICBzYjIgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TaW5nbGV0b25CZWFuIik7CisgICAgICAgIHNiMyA9IChTaW5nbGV0b25CZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL1NpbmdsZXRvbkJlYW4hY29tLmFjbWUuU2luZ2xldG9uQmVhbiIpOwogCi0JICAgIHNsc2IgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TdGF0ZWxlc3NCZWFuIik7Ci0JICAgIHNsc2IyID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTphcHAvZWpiLWVqYjMxLWVqYmxpdGUtamF2YW1vZHVsZS13ZWIvU3RhdGVsZXNzQmVhbiIpOwotCSAgICBzbHNiMyA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1lamJsaXRlLWphdmFtb2R1bGUtd2ViL1N0YXRlbGVzc0JlYW4hY29tLmFjbWUuU3RhdGVsZXNzQmVhbiIpOworICAgICAgICBzYjQgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9FUzEiKTsKKyAgICAgICAgc2I1ID0gKFNpbmdsZXRvbkJlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvZW52L0VTMiIpOwogCi0JICAgIHNsc2I0ID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTphcHAvRUwxIik7Ci0JICAgIHNsc2I1ID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTphcHAvZW52L0VMMiIpOworICAgICAgICBzbHNiID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvU3RhdGVsZXNzQmVhbiIpOworICAgICAgICBzbHNiMiA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1lamJsaXRlLWphdmFtb2R1bGUtd2ViL1N0YXRlbGVzc0JlYW4iKTsKKyAgICAgICAgc2xzYjMgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOmFwcC9lamItZWpiMzEtZWpibGl0ZS1qYXZhbW9kdWxlLXdlYi9TdGF0ZWxlc3NCZWFuIWNvbS5hY21lLlN0YXRlbGVzc0JlYW4iKTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15IEFwcE5hbWUgPSAiICsgCi0JCQkgICAgICAgaWMubG9va3VwKCJqYXZhOmFwcC9BcHBOYW1lIikpOworICAgICAgICBzbHNiNCA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL0VMMSIpOworICAgICAgICBzbHNiNSA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL2Vudi9FTDIiKTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15IE1vZHVsZU5hbWUgPSAiICsgCi0JCQkgICAgICAgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9Nb2R1bGVOYW1lIikpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15IEFwcE5hbWUgPSAiICsKKyAgICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6YXBwL0FwcE5hbWUiKSk7CiAKLQl9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBuZSkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKG5lKTsKLQl9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXkgTW9kdWxlTmFtZSA9ICIgKworICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTptb2R1bGUvTW9kdWxlTmFtZSIpKTsKKworICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24obmUpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46aGVsbG8oKSIpOwotCWlmKCBzZXNzaW9uQ3R4LmdldENvbnRleHREYXRhKCkgPT0gbnVsbCApIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigibnVsbCBjb250ZXh0IGRhdGEiKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOmhlbGxvKCkiKTsKKyAgICBpZiggc2Vzc2lvbkN0eC5nZXRDb250ZXh0RGF0YSgpID09IG51bGwgKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIm51bGwgY29udGV4dCBkYXRhIik7CisgICAgfQogCiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46ZGVzdHJveSgpIik7Ci0JaWYoIHNlc3Npb25DdHguZ2V0Q29udGV4dERhdGEoKSA9PSBudWxsICkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJudWxsIGNvbnRleHQgZGF0YSIpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46ZGVzdHJveSgpIik7CisgICAgaWYoIHNlc3Npb25DdHguZ2V0Q29udGV4dERhdGEoKSA9PSBudWxsICkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJudWxsIGNvbnRleHQgZGF0YSIpOworICAgIH0KIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvU3RhdGVmdWxCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9TdGF0ZWZ1bEJlYW4uamF2YQppbmRleCA5ZGNmOTc5Li5mOTFlOTE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9TdGF0ZWZ1bEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9TdGF0ZWZ1bEJlYW4uamF2YQpAQCAtMjksMjEgKzI5LDIxIEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuOmluaXQoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuOmluaXQoKSIpOwogICAgIH0KIAogICAgIEBQcmVQYXNzaXZhdGUKICAgICBwcml2YXRlIHZvaWQgcHJlUGFzcygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjpwcmVQYXNzaXZhdGUoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuOnByZVBhc3NpdmF0ZSgpIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW46OmhlbGxvKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjo6aGVsbG8oKSIpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW46ZGVzdHJveSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW46ZGVzdHJveSgpIik7CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL1N0YXRlbGVzc0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL1N0YXRlbGVzc0JlYW4uamF2YQppbmRleCBmNjE0OGE1Li5lNTlhMzhhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9TdGF0ZWxlc3NCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvU3RhdGVsZXNzQmVhbi5qYXZhCkBAIC0yOSw4ICsyOSw4IEBACiBAU3RhdGVsZXNzCiBASW50ZXJjZXB0b3JzKEludGVyY2VwdG9yQi5jbGFzcykKIHB1YmxpYyBjbGFzcyBTdGF0ZWxlc3NCZWFuIHsKLSAgICAKLSAgICBAUmVzb3VyY2UgCisKKyAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNlc3Npb25DdHg7CiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZT0iamF2YTptb2R1bGUvZm9vbWFuYWdlZGJlYW4iKQpAQCAtNDQsNjQgKzQ0LDY0IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjppbml0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW46aW5pdCgpIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuOjpoZWxsbygpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuOjpoZWxsbygpIik7CiAKLQlNYXA8U3RyaW5nLCBPYmplY3Q+IGN0eERhdGEgPSBzZXNzaW9uQ3R4LmdldENvbnRleHREYXRhKCk7Ci0JU3RyaW5nIGZvb2N0eCA9IChTdHJpbmcpIGN0eERhdGEuZ2V0KCJmb28iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImZvbyBmcm9tIGNvbnRleHQgZGF0YSA9ICIgKyBmb29jdHgpOwotCWlmKCBmb29jdHggPT0gbnVsbCApIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiaW52YWxpZCBjb250ZXh0IGRhdGEiKTsKLQl9Ci0JY3R4RGF0YS5wdXQoImZvb2JhciIsICJmb29iYXIiKTsKKyAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGN0eERhdGEgPSBzZXNzaW9uQ3R4LmdldENvbnRleHREYXRhKCk7CisgICAgU3RyaW5nIGZvb2N0eCA9IChTdHJpbmcpIGN0eERhdGEuZ2V0KCJmb28iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZvbyBmcm9tIGNvbnRleHQgZGF0YSA9ICIgKyBmb29jdHgpOworICAgIGlmKCBmb29jdHggPT0gbnVsbCApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiaW52YWxpZCBjb250ZXh0IGRhdGEiKTsKKyAgICB9CisgICAgY3R4RGF0YS5wdXQoImZvb2JhciIsICJmb29iYXIiKTsKIAotCUZvb01hbmFnZWRCZWFuIGZtYiA9IChGb29NYW5hZ2VkQmVhbikgCi0JICAgIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9mb29tYW5hZ2VkYmVhbiIpOworICAgIEZvb01hbmFnZWRCZWFuIGZtYiA9IChGb29NYW5hZ2VkQmVhbikKKyAgICAgICAgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL2Zvb21hbmFnZWRiZWFuIik7CiAKLQkvLyBNYWtlIHN1cmUgZGVwZW5kZW5jaWVzIGRlY2xhcmVkIGluIGphdmE6Y29tcCBhcmUgdmlzaWJsZQotCS8vIHZpYSBlcXVpdmFsZW50IGphdmE6bW9kdWxlIGVudHJpZXMgc2luY2UgdGhpcyBpcyBhIAotCS8vIC53YXIKLQlTZXNzaW9uQ29udGV4dCBzZXNzaW9uQ3R4MiA9IChTZXNzaW9uQ29udGV4dCkKLQkgICAgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL2Vudi9jb20uYWNtZS5TdGF0ZWxlc3NCZWFuL3Nlc3Npb25DdHgiKTsKKyAgICAvLyBNYWtlIHN1cmUgZGVwZW5kZW5jaWVzIGRlY2xhcmVkIGluIGphdmE6Y29tcCBhcmUgdmlzaWJsZQorICAgIC8vIHZpYSBlcXVpdmFsZW50IGphdmE6bW9kdWxlIGVudHJpZXMgc2luY2UgdGhpcyBpcyBhCisgICAgLy8gLndhcgorICAgIFNlc3Npb25Db250ZXh0IHNlc3Npb25DdHgyID0gKFNlc3Npb25Db250ZXh0KQorICAgICAgICBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvZW52L2NvbS5hY21lLlN0YXRlbGVzc0JlYW4vc2Vzc2lvbkN0eCIpOwogCi0JU2luZ2xldG9uQmVhbiBzaW5nbGV0b24yID0gKFNpbmdsZXRvbkJlYW4pCi0JICAgIHNlc3Npb25DdHgyLmxvb2t1cCgiamF2YTptb2R1bGUvZW52L3N0YXRlbGVzcy9zaW5nbGV0b25yZWYiKTsKKyAgICBTaW5nbGV0b25CZWFuIHNpbmdsZXRvbjIgPSAoU2luZ2xldG9uQmVhbikKKyAgICAgICAgc2Vzc2lvbkN0eDIubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvc3RhdGVsZXNzL3NpbmdsZXRvbnJlZiIpOwogCi0JLy8gTG9va3VwIGEgY29tcCBlbnYgZGVwZW5kZW5jeSBkZWNsYXJlZCBieSBhbm90aGVyIGVqYiBpbiB0aGUgLndhcgotCVNpbmdsZXRvbkJlYW4gc2luZ2xldG9uMyA9IChTaW5nbGV0b25CZWFuKQotCSAgICBzZXNzaW9uQ3R4Mi5sb29rdXAoImphdmE6Y29tcC9lbnYvY29tLmFjbWUuU2luZ2xldG9uQmVhbi9tZSIpOworICAgIC8vIExvb2t1cCBhIGNvbXAgZW52IGRlcGVuZGVuY3kgZGVjbGFyZWQgYnkgYW5vdGhlciBlamIgaW4gdGhlIC53YXIKKyAgICBTaW5nbGV0b25CZWFuIHNpbmdsZXRvbjMgPSAoU2luZ2xldG9uQmVhbikKKyAgICAgICAgc2Vzc2lvbkN0eDIubG9va3VwKCJqYXZhOmNvbXAvZW52L2NvbS5hY21lLlNpbmdsZXRvbkJlYW4vbWUiKTsKIAotCS8vIExvb2t1cCBhIGNvbXAgZW52IGRlcGVuZGVuY3kgZGVjbGFyZWQgYnkgYSBzZXJ2bGV0Ci0JRm9vTWFuYWdlZEJlYW4gZm1iU2VydmxldCA9IChGb29NYW5hZ2VkQmVhbikKLQkgICAgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvZm9vMnJlZiIpOwotCUZvb01hbmFnZWRCZWFuIGZtYlNlcnZsZXQyID0gKEZvb01hbmFnZWRCZWFuKQotCSAgICBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvZW52L2ZvbzJyZWYiKTsKKyAgICAvLyBMb29rdXAgYSBjb21wIGVudiBkZXBlbmRlbmN5IGRlY2xhcmVkIGJ5IGEgc2VydmxldAorICAgIEZvb01hbmFnZWRCZWFuIGZtYlNlcnZsZXQgPSAoRm9vTWFuYWdlZEJlYW4pCisgICAgICAgIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L2ZvbzJyZWYiKTsKKyAgICBGb29NYW5hZ2VkQmVhbiBmbWJTZXJ2bGV0MiA9IChGb29NYW5hZ2VkQmVhbikKKyAgICAgICAgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL2Vudi9mb28ycmVmIik7CiAKLQkvLyBFbnN1cmUgdGhhdCBlYWNoIGluamVjdGVkIG9yIGxvb2tlZCB1cCBtYW5hZ2VkIGJlYW4gCi0JLy8gaW5zdGFuY2UgaXMgdW5pcXVlCi0JT2JqZWN0IGZvb1RoaXMgPSBmb28uZ2V0VGhpcygpOwotCU9iamVjdCBmb28yVGhpcyA9IGZvbzIuZ2V0VGhpcygpOwotCU9iamVjdCBmbWJUaGlzID0gZm1iLmdldFRoaXMoKTsKKyAgICAvLyBFbnN1cmUgdGhhdCBlYWNoIGluamVjdGVkIG9yIGxvb2tlZCB1cCBtYW5hZ2VkIGJlYW4KKyAgICAvLyBpbnN0YW5jZSBpcyB1bmlxdWUKKyAgICBPYmplY3QgZm9vVGhpcyA9IGZvby5nZXRUaGlzKCk7CisgICAgT2JqZWN0IGZvbzJUaGlzID0gZm9vMi5nZXRUaGlzKCk7CisgICAgT2JqZWN0IGZtYlRoaXMgPSBmbWIuZ2V0VGhpcygpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJmb29UaGlzID0gIiArIGZvb1RoaXMpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiZm9vMlRoaXMgPSAiICsgZm9vMlRoaXMpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiZm1iVGhpcyA9ICIgKyBmbWJUaGlzKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImZtYlNlcnZsZXQgPSAiICsgZm1iU2VydmxldCk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJmbWJTZXJ2bGV0MiA9ICIgKyBmbWJTZXJ2bGV0Mik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJmb29UaGlzID0gIiArIGZvb1RoaXMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZm9vMlRoaXMgPSAiICsgZm9vMlRoaXMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZm1iVGhpcyA9ICIgKyBmbWJUaGlzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZtYlNlcnZsZXQgPSAiICsgZm1iU2VydmxldCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJmbWJTZXJ2bGV0MiA9ICIgKyBmbWJTZXJ2bGV0Mik7CiAKLQlpZiggKCBmb29UaGlzID09IGZvbzJUaGlzICkgfHwgKCBmb29UaGlzID09IGZtYlRoaXMgICkgfHwKLQkgICAgKCBmb28yVGhpcyA9PSBmbWJUaGlzICkgKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIk1hbmFnZWQgYmVhbiBpbnN0YW5jZXMgbm90IHVuaXF1ZSIpOwotCX0KKyAgICBpZiggKCBmb29UaGlzID09IGZvbzJUaGlzICkgfHwgKCBmb29UaGlzID09IGZtYlRoaXMgICkgfHwKKyAgICAgICAgKCBmb28yVGhpcyA9PSBmbWJUaGlzICkgKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIk1hbmFnZWQgYmVhbiBpbnN0YW5jZXMgbm90IHVuaXF1ZSIpOworICAgIH0KIAogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuOmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjpkZXN0cm95KCkiKTsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjExZDJjNC4uNTJjYzVjMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMyArMTUsMTMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMS1lamJsaXRlLWpheHJzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIke21vZHVsZX0iLz4KLQkKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYzI5OGE0Yi4uYzE4Y2RlMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKQEAgLTM0LDQ2ICszNCw0NiBAQAogICAgIHByaXZhdGUgU3RyaW5nIHBvcnQ7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7Ci0JYXBwTmFtZSA9IGFyZ3NbMF07Ci0Jc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKLQlDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsgICAgICAgCi0gICAgICAgIGNsaWVudC5kb1Rlc3QoKTsJCisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKKyAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKKyAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7CiAgICAgfQogCiAgICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7Ci0JaG9zdCA9IGFyZ3NbMV07CisgICAgaG9zdCA9IGFyZ3NbMV07CiAgICAgICAgIHBvcnQgPSBhcmdzWzJdOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyAKKyAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICAgICAiLyIgKyBhcHBOYW1lICsgIi9IZWxsb1NlcnZsZXQiOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIHdlYmNsaWVudCBzZXJ2bGV0IGF0ICIgKyB1cmwpOwogCi0JICAgIFVSTCB1ID0gbmV3IFVSTCh1cmwpOwotICAgICAgICAKLQkgICAgSHR0cFVSTENvbm5lY3Rpb24gYzEgPSAoSHR0cFVSTENvbm5lY3Rpb24pdS5vcGVuQ29ubmVjdGlvbigpOwotCSAgICBpbnQgY29kZSA9IGMxLmdldFJlc3BvbnNlQ29kZSgpOwotCSAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7Ci0JICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKLQkgICAgU3RyaW5nIGxpbmUgPSBudWxsOwotCSAgICB3aGlsZSgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpCi0JCVN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKLQkgICAgaWYoY29kZSAhPSAyMDApIHsKLQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluY29ycmVjdCByZXR1cm4gY29kZTogIiArIGNvZGUpOwotCSAgICB9Ci0JICAgIAotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisgICAgICAgIFVSTCB1ID0gbmV3IFVSTCh1cmwpOwogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjMSA9IChIdHRwVVJMQ29ubmVjdGlvbil1Lm9wZW5Db25uZWN0aW9uKCk7CisgICAgICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7CisgICAgICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOworICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CisgICAgICAgIHdoaWxlKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOworICAgICAgICBpZihjb2RlICE9IDIwMCkgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW5jb3JyZWN0IHJldHVybiBjb2RlOiAiICsgY29kZSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL3dhci9Db250ZXh0TGlzdGVuZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL3dhci9Db250ZXh0TGlzdGVuZXIuamF2YQppbmRleCBiNWYwZmE0Li4yMzBmNGQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy93YXIvQ29udGV4dExpc3RlbmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL0NvbnRleHRMaXN0ZW5lci5qYXZhCkBAIC0zMCw1MyArMzAsNTMgQEAKIAogICAgIHB1YmxpYyB2b2lkIGNvbnRleHRJbml0aWFsaXplZChTZXJ2bGV0Q29udGV4dEV2ZW50IHNjZSkgewogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBDb250ZXh0TGlzdGVuZXI6OmNvbnRleHRJbml0aWFsaXplZCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gQ29udGV4dExpc3RlbmVyOjpjb250ZXh0SW5pdGlhbGl6ZWQiKTsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICBGb29NYW5hZ2VkQmVhbiBmID0gKEZvb01hbmFnZWRCZWFuKQotCQluZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6bW9kdWxlL0Zvb01hbmFnZWRCZWFuIik7Ci0JICAgIGYuaGVsbG8oKTsKKyAgICAgICAgRm9vTWFuYWdlZEJlYW4gZiA9IChGb29NYW5hZ2VkQmVhbikKKyAgICAgICAgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOm1vZHVsZS9Gb29NYW5hZ2VkQmVhbiIpOworICAgICAgICBmLmhlbGxvKCk7CiAKLQkgICAgT2JqZWN0IGpheHJzRWpiR2x1ZSA9IG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpvcmcuZ2xhc3NmaXNoLmVqYi5jb250YWluZXIuaW50ZXJjZXB0b3JfYmluZGluZ19zcGkiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJqYXhyc0VqYkdsdWUgPSAiICsgamF4cnNFamJHbHVlKTsKLQkgICAgTWV0aG9kIG0gPSBqYXhyc0VqYkdsdWUuZ2V0Q2xhc3MoKS5nZXRNZXRob2QoInJlZ2lzdGVySW50ZXJjZXB0b3IiLCBqYXZhLmxhbmcuT2JqZWN0LmNsYXNzKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZWdpc3RlciBpbnRlcmNlcHRvciBtZXRob2QgPSAiICsgbSk7CisgICAgICAgIE9iamVjdCBqYXhyc0VqYkdsdWUgPSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6b3JnLmdsYXNzZmlzaC5lamIuY29udGFpbmVyLmludGVyY2VwdG9yX2JpbmRpbmdfc3BpIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiamF4cnNFamJHbHVlID0gIiArIGpheHJzRWpiR2x1ZSk7CisgICAgICAgIE1ldGhvZCBtID0gamF4cnNFamJHbHVlLmdldENsYXNzKCkuZ2V0TWV0aG9kKCJyZWdpc3RlckludGVyY2VwdG9yIiwgamF2YS5sYW5nLk9iamVjdC5jbGFzcyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmVnaXN0ZXIgaW50ZXJjZXB0b3IgbWV0aG9kID0gIiArIG0pOwogCi0JICAgIG0uaW52b2tlKGpheHJzRWpiR2x1ZSwgbmV3IGNvbS5zdW4uamVyc2V5LkplcnNleUludGVyY2VwdG9yKCkpOworICAgICAgICBtLmludm9rZShqYXhyc0VqYkdsdWUsIG5ldyBjb20uc3VuLmplcnNleS5KZXJzZXlJbnRlcmNlcHRvcigpKTsKIAogCi0JICAgIC8vIFRlc3QgSW5qZWN0aW9uTWFuYWdlciBtYW5hZ2VkIGJlYW4gZnVuY3Rpb25hbGl0eQotCSAgICBPYmplY3QgaW5qZWN0aW9uTWdyID0gbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJjb20uc3VuLmVudGVycHJpc2UuY29udGFpbmVyLmNvbW1vbi5zcGkudXRpbC5JbmplY3Rpb25NYW5hZ2VyIik7Ci0JICAgIE1ldGhvZCBjcmVhdGVNYW5hZ2VkTWV0aG9kID0gaW5qZWN0aW9uTWdyLmdldENsYXNzKCkuZ2V0TWV0aG9kKCJjcmVhdGVNYW5hZ2VkT2JqZWN0IiwgamF2YS5sYW5nLkNsYXNzLmNsYXNzKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJjcmVhdGUgbWFuYWdlZCBvYmplY3QgbWV0aG9kID0gIiArIGNyZWF0ZU1hbmFnZWRNZXRob2QpOwotCSAgICBGb29NYW5hZ2VkQmVhbiBmMiA9IChGb29NYW5hZ2VkQmVhbikgY3JlYXRlTWFuYWdlZE1ldGhvZC5pbnZva2UoaW5qZWN0aW9uTWdyLCBGb29NYW5hZ2VkQmVhbi5jbGFzcyk7Ci0JICAgIGYyLmhlbGxvKCk7Ci0JICAgIGYyLmFzc2VydEludGVyY2VwdG9yQmluZGluZygpOworICAgICAgICAvLyBUZXN0IEluamVjdGlvbk1hbmFnZXIgbWFuYWdlZCBiZWFuIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgT2JqZWN0IGluamVjdGlvbk1nciA9IG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiY29tLnN1bi5lbnRlcnByaXNlLmNvbnRhaW5lci5jb21tb24uc3BpLnV0aWwuSW5qZWN0aW9uTWFuYWdlciIpOworICAgICAgICBNZXRob2QgY3JlYXRlTWFuYWdlZE1ldGhvZCA9IGluamVjdGlvbk1nci5nZXRDbGFzcygpLmdldE1ldGhvZCgiY3JlYXRlTWFuYWdlZE9iamVjdCIsIGphdmEubGFuZy5DbGFzcy5jbGFzcyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRlIG1hbmFnZWQgb2JqZWN0IG1ldGhvZCA9ICIgKyBjcmVhdGVNYW5hZ2VkTWV0aG9kKTsKKyAgICAgICAgRm9vTWFuYWdlZEJlYW4gZjIgPSAoRm9vTWFuYWdlZEJlYW4pIGNyZWF0ZU1hbmFnZWRNZXRob2QuaW52b2tlKGluamVjdGlvbk1nciwgRm9vTWFuYWdlZEJlYW4uY2xhc3MpOworICAgICAgICBmMi5oZWxsbygpOworICAgICAgICBmMi5hc3NlcnRJbnRlcmNlcHRvckJpbmRpbmcoKTsKIAotCSAgICBNZXRob2QgZGVzdHJveU1hbmFnZWRNZXRob2QgPSBpbmplY3Rpb25NZ3IuZ2V0Q2xhc3MoKS5nZXRNZXRob2QoImRlc3Ryb3lNYW5hZ2VkT2JqZWN0IiwgamF2YS5sYW5nLk9iamVjdC5jbGFzcyk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZGVzdHJveSBtYW5hZ2VkIG9iamVjdCBtZXRob2QgPSAiICsgZGVzdHJveU1hbmFnZWRNZXRob2QpOwotCSAgICBkZXN0cm95TWFuYWdlZE1ldGhvZC5pbnZva2UoaW5qZWN0aW9uTWdyLCBmMik7CisgICAgICAgIE1ldGhvZCBkZXN0cm95TWFuYWdlZE1ldGhvZCA9IGluamVjdGlvbk1nci5nZXRDbGFzcygpLmdldE1ldGhvZCgiZGVzdHJveU1hbmFnZWRPYmplY3QiLCBqYXZhLmxhbmcuT2JqZWN0LmNsYXNzKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkZXN0cm95IG1hbmFnZWQgb2JqZWN0IG1ldGhvZCA9ICIgKyBkZXN0cm95TWFuYWdlZE1ldGhvZCk7CisgICAgICAgIGRlc3Ryb3lNYW5hZ2VkTWV0aG9kLmludm9rZShpbmplY3Rpb25NZ3IsIGYyKTsKIAotCSAgICAgRm9vTm9uTWFuYWdlZEJlYW4gbm9uRiA9IChGb29Ob25NYW5hZ2VkQmVhbikgY3JlYXRlTWFuYWdlZE1ldGhvZC5pbnZva2UoaW5qZWN0aW9uTWdyLCBGb29Ob25NYW5hZ2VkQmVhbi5jbGFzcyk7Ci0JICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZvb05vbk1hbmFnZWRCZWFuID0gIiArIG5vbkYpOwotCSAgICAgbm9uRi5oZWxsbygpOwotCSAgICAgZGVzdHJveU1hbmFnZWRNZXRob2QuaW52b2tlKGluamVjdGlvbk1nciwgbm9uRik7Ci0JICAgIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgICAgICBGb29Ob25NYW5hZ2VkQmVhbiBub25GID0gKEZvb05vbk1hbmFnZWRCZWFuKSBjcmVhdGVNYW5hZ2VkTWV0aG9kLmludm9rZShpbmplY3Rpb25NZ3IsIEZvb05vbk1hbmFnZWRCZWFuLmNsYXNzKTsKKyAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRm9vTm9uTWFuYWdlZEJlYW4gPSAiICsgbm9uRik7CisgICAgICAgICBub25GLmhlbGxvKCk7CisgICAgICAgICBkZXN0cm95TWFuYWdlZE1ldGhvZC5pbnZva2UoaW5qZWN0aW9uTWdyLCBub25GKTsKKworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAKICAgICB9CiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHB1YmxpYyB2b2lkIHBjKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gQ29udGV4dExpc3RlbmVyOjpwb3N0Q29uc3RydWN0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBDb250ZXh0TGlzdGVuZXI6OnBvc3RDb25zdHJ1Y3QiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBjb250ZXh0RGVzdHJveWVkKFNlcnZsZXRDb250ZXh0RXZlbnQgc2NlKSB7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIENvbnRleHRMaXN0ZW5lcjo6Y29udGV4dERlc3Ryb3llZCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gQ29udGV4dExpc3RlbmVyOjpjb250ZXh0RGVzdHJveWVkIik7CiAKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL3dhci9Gb29NYW5hZ2VkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL0Zvb01hbmFnZWRCZWFuLmphdmEKaW5kZXggYjI1YjViMy4uMDljZmZjZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL0Zvb01hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL0Zvb01hbmFnZWRCZWFuLmphdmEKQEAgLTMxLDIzICszMSwyMyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOmluaXQoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46aW5pdCgpIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjo6aGVsbG8oKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmhlbGxvKCkiKTsKICAgICB9CiAKIAogICAgIHB1YmxpYyB2b2lkIGFzc2VydEludGVyY2VwdG9yQmluZGluZygpIHsKLQlpZiggIWludGVyY2VwdG9yV2FzSGVyZSApIHsKLQkgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImludGVyY2VwdG9yIHdhcyBub3QgaGVyZSIpOwotCX0KKyAgICBpZiggIWludGVyY2VwdG9yV2FzSGVyZSApIHsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImludGVyY2VwdG9yIHdhcyBub3QgaGVyZSIpOworICAgIH0KICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46ZGVzdHJveSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjpkZXN0cm95KCkiKTsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL0Zvb05vbk1hbmFnZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy93YXIvRm9vTm9uTWFuYWdlZEJlYW4uamF2YQppbmRleCAwOWRjYjIyLi4zYzcwNmNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy93YXIvRm9vTm9uTWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy93YXIvRm9vTm9uTWFuYWdlZEJlYW4uamF2YQpAQCAtMjQsMjUgKzI0LDI1IEBACiAKIHB1YmxpYyBjbGFzcyBGb29Ob25NYW5hZ2VkQmVhbiB7CiAKLSAgICBAUmVzb3VyY2UgCisgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBVc2VyVHJhbnNhY3Rpb24gdXQ7CiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCWlmKCB1dCA9PSBudWxsICkgewotCSAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJ1dCBpcyBudWxsIik7Ci0JfQorICAgIGlmKCB1dCA9PSBudWxsICkgeworICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJ1dCBpcyBudWxsIik7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29Ob25NYW5hZ2VkQmVhbjppbml0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb05vbk1hbmFnZWRCZWFuOmluaXQoKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTm9uTWFuYWdlZEJlYW46OmhlbGxvKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb05vbk1hbmFnZWRCZWFuOjpoZWxsbygpIik7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb05vbk1hbmFnZWRCZWFuOmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTm9uTWFuYWdlZEJlYW46ZGVzdHJveSgpIik7CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL3dhci9IZWxsb1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL3dhci9IZWxsb1NlcnZsZXQuamF2YQppbmRleCA0ZmI1MzI4Li5lMTJkMzcyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy93YXIvSGVsbG9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL0hlbGxvU2VydmxldC5qYXZhCkBAIC00NCwzNyArNDQsMzcgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojppbml0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmluaXQiKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAotCXJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmRvR2V0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmRvR2V0Iik7CiAKLQlzaW1wbGVTaW5nbGV0b24uaGVsbG8oKTsKLQlzaW1wbGVTdGF0ZWxlc3MuaGVsbG8oKTsKKyAgICBzaW1wbGVTaW5nbGV0b24uaGVsbG8oKTsKKyAgICBzaW1wbGVTdGF0ZWxlc3MuaGVsbG8oKTsKIAotCXNpbXBsZVNpbmdsZXRvbi5hc3NlcnRJbnRlcmNlcHRvckJpbmRpbmcoKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlNpbmdsZXRvbiBpbnRlcmNlcHRvciBiaW5kaW5nIGFzc2VydGVkIik7CisgICAgc2ltcGxlU2luZ2xldG9uLmFzc2VydEludGVyY2VwdG9yQmluZGluZygpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2luZ2xldG9uIGludGVyY2VwdG9yIGJpbmRpbmcgYXNzZXJ0ZWQiKTsKIAotCXNpbXBsZVN0YXRlbGVzcy5hc3NlcnRJbnRlcmNlcHRvckJpbmRpbmcoKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbGVzcyBpbnRlcmNlcHRvciBiaW5kaW5nIGFzc2VydGVkIik7CisgICAgc2ltcGxlU3RhdGVsZXNzLmFzc2VydEludGVyY2VwdG9yQmluZGluZygpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVsZXNzIGludGVyY2VwdG9yIGJpbmRpbmcgYXNzZXJ0ZWQiKTsKIAotCWZvb01hbmFnZWRCZWFuLmFzc2VydEludGVyY2VwdG9yQmluZGluZygpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiRm9vTWFuYWdlZEJlYW4gaW50ZXJjZXB0b3IgYmluZGluZyBhc3NlcnRlZCIpOwotCWZvb01hbmFnZWRCZWFuLmhlbGxvKCk7CisgICAgZm9vTWFuYWdlZEJlYW4uYXNzZXJ0SW50ZXJjZXB0b3JCaW5kaW5nKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJGb29NYW5hZ2VkQmVhbiBpbnRlcmNlcHRvciBiaW5kaW5nIGFzc2VydGVkIik7CisgICAgZm9vTWFuYWdlZEJlYW4uaGVsbG8oKTsKIAogCi0Jb3V0LnByaW50bG4oIjxIVE1MPiA8SEVBRD4gPFRJVExFPiBKTVMgU2VydmxldCBPdXRwdXQgPC9USVRMRT4gPC9IRUFEPiA8Qk9EWSBCR0NPTE9SPXdoaXRlPiIpOworICAgIG91dC5wcmludGxuKCI8SFRNTD4gPEhFQUQ+IDxUSVRMRT4gSk1TIFNlcnZsZXQgT3V0cHV0IDwvVElUTEU+IDwvSEVBRD4gPEJPRFkgQkdDT0xPUj13aGl0ZT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Q0VOVEVSPiA8Rk9OVCBzaXplPSsxIENPTE9SPWJsdWU+RGF0YWJhc2VTZXJ2ZWx0IDo6IEFsbCBpbmZvcm1hdGlvbiBJIGNhbiBnaXZlIDwvRk9OVD4gPC9DRU5URVI+IDxwPiAiICk7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IENvbnRleHQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0Q29udGV4dFBhdGgoKSArICI8YnI+IiApOyAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gU2VydmxldCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRTZXJ2bGV0UGF0aCgpICsgIjxicj4iICk7IAotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBQYXRoIEluZm8gOiAgPC9GT05UPiAiICsgcmVxLmdldFBhdGhJbmZvKCkgKyAiPGJyPiIgKTsgCisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IENvbnRleHQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0Q29udGV4dFBhdGgoKSArICI8YnI+IiApOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBTZXJ2bGV0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldFNlcnZsZXRQYXRoKCkgKyAiPGJyPiIgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gUGF0aCBJbmZvIDogIDwvRk9OVD4gIiArIHJlcS5nZXRQYXRoSW5mbygpICsgIjxicj4iICk7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9CT0RZPiA8L0hUTUw+ICIpOwogCiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL0ludGVyY2VwdG9yQS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL0ludGVyY2VwdG9yQS5qYXZhCmluZGV4IDdjYTc1MjkuLjU5Yzk3ODMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL3dhci9JbnRlcmNlcHRvckEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy93YXIvSW50ZXJjZXB0b3JBLmphdmEKQEAgLTI4LDIxICsyOCwyMSBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdChJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQTo6aW5pdCgpICIpOwotCWMucHJvY2VlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JBOjppbml0KCkgIik7CisgICAgYy5wcm9jZWVkKCk7CiAgICAgfQogCiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHJpdmF0ZSBPYmplY3Qgcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckE6OmFyb3VuZEludm9rZSgpICIpOwotCXJldHVybiBjLnByb2NlZWQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQTo6YXJvdW5kSW52b2tlKCkgIik7CisgICAgcmV0dXJuIGMucHJvY2VlZCgpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckE6OmRlc3Ryb3koKSAiKTsKLQljLnByb2NlZWQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQTo6ZGVzdHJveSgpICIpOworICAgIGMucHJvY2VlZCgpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL0plcnNleUludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy93YXIvSmVyc2V5SW50ZXJjZXB0b3IuamF2YQppbmRleCBhMTc4NjUwLi4yZGVkMDQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy93YXIvSmVyc2V5SW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy93YXIvSmVyc2V5SW50ZXJjZXB0b3IuamF2YQpAQCAtMjgsMjQgKzI4LDI0IEBACiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdChJbnZvY2F0aW9uQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKIAotCU9iamVjdCBiZWFuSW5zdGFuY2UgPSBjb250ZXh0LmdldFRhcmdldCgpOworICAgIE9iamVjdCBiZWFuSW5zdGFuY2UgPSBjb250ZXh0LmdldFRhcmdldCgpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBKZXJzZXlJbnRlcmNlcHRvcjo6aW5pdCgpIDogIiArIAotCQkJICAgYmVhbkluc3RhbmNlKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEplcnNleUludGVyY2VwdG9yOjppbml0KCkgOiAiICsKKyAgICAgICAgICAgICAgIGJlYW5JbnN0YW5jZSk7CiAKIAotCWlmKCBiZWFuSW5zdGFuY2UgaW5zdGFuY2VvZiBTaW5nbGV0b25CZWFuICkgewotCSAgICAoKFNpbmdsZXRvbkJlYW4pIGJlYW5JbnN0YW5jZSkuaW50ZXJjZXB0b3JXYXNIZXJlID0gdHJ1ZTsKLQl9IGVsc2UgaWYoIGJlYW5JbnN0YW5jZSBpbnN0YW5jZW9mIFN0YXRlbGVzc0JlYW4gKSB7Ci0JICAgICgoU3RhdGVsZXNzQmVhbikgYmVhbkluc3RhbmNlKS5pbnRlcmNlcHRvcldhc0hlcmUgPSB0cnVlOwotCX0gZWxzZSBpZiggYmVhbkluc3RhbmNlIGluc3RhbmNlb2YgRm9vTWFuYWdlZEJlYW4gKSB7Ci0JICAgICgoRm9vTWFuYWdlZEJlYW4pIGJlYW5JbnN0YW5jZSkuaW50ZXJjZXB0b3JXYXNIZXJlID0gdHJ1ZTsKLQl9CisgICAgaWYoIGJlYW5JbnN0YW5jZSBpbnN0YW5jZW9mIFNpbmdsZXRvbkJlYW4gKSB7CisgICAgICAgICgoU2luZ2xldG9uQmVhbikgYmVhbkluc3RhbmNlKS5pbnRlcmNlcHRvcldhc0hlcmUgPSB0cnVlOworICAgIH0gZWxzZSBpZiggYmVhbkluc3RhbmNlIGluc3RhbmNlb2YgU3RhdGVsZXNzQmVhbiApIHsKKyAgICAgICAgKChTdGF0ZWxlc3NCZWFuKSBiZWFuSW5zdGFuY2UpLmludGVyY2VwdG9yV2FzSGVyZSA9IHRydWU7CisgICAgfSBlbHNlIGlmKCBiZWFuSW5zdGFuY2UgaW5zdGFuY2VvZiBGb29NYW5hZ2VkQmVhbiApIHsKKyAgICAgICAgKChGb29NYW5hZ2VkQmVhbikgYmVhbkluc3RhbmNlKS5pbnRlcmNlcHRvcldhc0hlcmUgPSB0cnVlOworICAgIH0KIAotCS8vIC4uLgorICAgIC8vIC4uLgogCi0JLy8gSW52b2tlIG5leHQgaW50ZXJjZXB0b3IgaW4gY2hhaW4KLQljb250ZXh0LnByb2NlZWQoKTsKKyAgICAvLyBJbnZva2UgbmV4dCBpbnRlcmNlcHRvciBpbiBjaGFpbgorICAgIGNvbnRleHQucHJvY2VlZCgpOwogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy93YXIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL1NpbmdsZXRvbkJlYW4uamF2YQppbmRleCBkMzgyMjU2Li45MjNhNTVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy93YXIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL3dhci9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTM5LDQxICszOSw0MSBAQAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46aW5pdCgpICIpOwotCQotCXRyeSB7Ci0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOmluaXQoKSAiKTsKIAotCSAgICAvLyBMb29rdXAgc2ltcGxlIGZvcm0gb2YgcG9ydGFibGUgSk5ESSBuYW1lIAotCSAgICAgc3RhdGVsZXNzID0gKFN0YXRlbGVzc0JlYW4pIAotCQlpYy5sb29rdXAoImphdmE6bW9kdWxlL1N0YXRlbGVzc0JlYW4iKTsKKyAgICB0cnkgeworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCi0JICAgICBzdGF0ZWxlc3MuaGVsbG8oKTsKKyAgICAgICAgLy8gTG9va3VwIHNpbXBsZSBmb3JtIG9mIHBvcnRhYmxlIEpOREkgbmFtZQorICAgICAgICAgc3RhdGVsZXNzID0gKFN0YXRlbGVzc0JlYW4pCisgICAgICAgIGljLmxvb2t1cCgiamF2YTptb2R1bGUvU3RhdGVsZXNzQmVhbiIpOwogCi0JICAgIC8vIExvb2t1cCBmdWxseS1xdWFsaWZpZWQgZm9yIG9mIHBvcnRhYmxlIEpOREkgbmFtZQotCSAgICBzdGF0ZWxlc3MyID0gKFN0YXRlbGVzc0JlYW4pIAotCQlpYy5sb29rdXAoImphdmE6bW9kdWxlL1N0YXRlbGVzc0JlYW4hY29tLmFjbWUuU3RhdGVsZXNzQmVhbiIpOwotCSAgCi0JfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihuZSk7Ci0JfQorICAgICAgICAgc3RhdGVsZXNzLmhlbGxvKCk7CisKKyAgICAgICAgLy8gTG9va3VwIGZ1bGx5LXF1YWxpZmllZCBmb3Igb2YgcG9ydGFibGUgSk5ESSBuYW1lCisgICAgICAgIHN0YXRlbGVzczIgPSAoU3RhdGVsZXNzQmVhbikKKyAgICAgICAgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TdGF0ZWxlc3NCZWFuIWNvbS5hY21lLlN0YXRlbGVzc0JlYW4iKTsKKworICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24obmUpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46aGVsbG8oKSIpOwotCXN0YXRlbGVzcy5oZWxsbygpOwotCXN0YXRlbGVzczIuaGVsbG8oKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46aGVsbG8oKSIpOworICAgIHN0YXRlbGVzcy5oZWxsbygpOworICAgIHN0YXRlbGVzczIuaGVsbG8oKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBhc3NlcnRJbnRlcmNlcHRvckJpbmRpbmcoKSB7Ci0JaWYoICFpbnRlcmNlcHRvcldhc0hlcmUgKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImludGVyY2VwdG9yIHdhcyBub3QgaGVyZSIpOwotCX0KKyAgICBpZiggIWludGVyY2VwdG9yV2FzSGVyZSApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiaW50ZXJjZXB0b3Igd2FzIG5vdCBoZXJlIik7CisgICAgfQogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjpkZXN0cm95KCkiKTsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL1N0YXRlbGVzc0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL3dhci9TdGF0ZWxlc3NCZWFuLmphdmEKaW5kZXggYjEwZTM0Yy4uZTc2NGM0NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL1N0YXRlbGVzc0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy93YXIvU3RhdGVsZXNzQmVhbi5qYXZhCkBAIC0zMSwyMyArMzEsMjMgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuOmluaXQoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjppbml0KCkiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW46OmhlbGxvKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW46OmhlbGxvKCkiKTsKICAgICB9CiAKIAogICAgIHB1YmxpYyB2b2lkIGFzc2VydEludGVyY2VwdG9yQmluZGluZygpIHsKLQlpZiggIWludGVyY2VwdG9yV2FzSGVyZSApIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiaW50ZXJjZXB0b3Igd2FzIG5vdCBoZXJlIik7Ci0JfQorICAgIGlmKCAhaW50ZXJjZXB0b3JXYXNIZXJlICkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJpbnRlcmNlcHRvciB3YXMgbm90IGhlcmUiKTsKKyAgICB9CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW46ZGVzdHJveSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuOmRlc3Ryb3koKSIpOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vYnVpbGQucHJvcGVydGllcwppbmRleCAxNDc0NzRlLi42YjJjYzg4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEzICsxNSwxMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWVqYmxpdGUtbWFuYWdlZGJlYW4iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9IiR7bW9kdWxlfSIvPgotCQorCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL2J1aWxkLnhtbAppbmRleCBiNmEzZTM2Li45ZjMyNWFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vYnVpbGQueG1sCkBAIC0zNCwxMSArMzQsMTEgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJ3YXIiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgICAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CkBAIC00OCw5ICs0OCw5IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNTgsOSArNTgsOSBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTcyLDcgKzcyLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBjMjk4YTRiLi5jMThjZGUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwpAQCAtMzQsNDYgKzM0LDQ2IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgcG9ydDsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKLQlhcHBOYW1lID0gYXJnc1swXTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwotCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOyAgICAgICAKLSAgICAgICAgY2xpZW50LmRvVGVzdCgpOwkKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOworICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOworICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKICAgICB9CiAKICAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKLQlob3N0ID0gYXJnc1sxXTsKKyAgICBob3N0ID0gYXJnc1sxXTsKICAgICAgICAgcG9ydCA9IGFyZ3NbMl07CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCi0JdHJ5IHsKKyAgICB0cnkgewogCi0JICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIAorICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKwogICAgICAgICAgICAgICAgICIvIiArIGFwcE5hbWUgKyAiL0hlbGxvU2VydmxldCI7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgd2ViY2xpZW50IHNlcnZsZXQgYXQgIiArIHVybCk7CiAKLQkgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7Ci0gICAgICAgIAotCSAgICBIdHRwVVJMQ29ubmVjdGlvbiBjMSA9IChIdHRwVVJMQ29ubmVjdGlvbil1Lm9wZW5Db25uZWN0aW9uKCk7Ci0JICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7Ci0JICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKLQkgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwotCSAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0JICAgIHdoaWxlKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkKLQkJU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOwotCSAgICBpZihjb2RlICE9IDIwMCkgewotCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW5jb3JyZWN0IHJldHVybiBjb2RlOiAiICsgY29kZSk7Ci0JICAgIH0KLQkgICAgCi0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7CiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKXUub3BlbkNvbm5lY3Rpb24oKTsKKyAgICAgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKKyAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOworICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlciAobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CisgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKKyAgICAgICAgd2hpbGUoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7CisgICAgICAgIGlmKGNvZGUgIT0gMjAwKSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbmNvcnJlY3QgcmV0dXJuIGNvZGU6ICIgKyBjb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKKworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL0Zvby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL0Zvby5qYXZhCmluZGV4IDM4M2FmM2QuLmJlM2QxNDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9Gb28uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvRm9vLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIHB1YmxpYyBjbGFzcyBGb28gewogCiAKLSAgICBAUmVzb3VyY2UgTWFuYWdlZEJlYW4xSW50IG07IAotICAgIAorICAgIEBSZXNvdXJjZSBNYW5hZ2VkQmVhbjFJbnQgbTsKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvSGVsbG9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvSGVsbG9TZXJ2bGV0LmphdmEKaW5kZXggODBlN2U4Yy4uZWI1MzRiMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL0hlbGxvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9IZWxsb1NlcnZsZXQuamF2YQpAQCAtMzYsMTAzICszNiwxMDMgQEAKIEBXZWJTZXJ2bGV0KHVybFBhdHRlcm5zPSIvSGVsbG9TZXJ2bGV0IiwgbG9hZE9uU3RhcnR1cD0xKQogcHVibGljIGNsYXNzIEhlbGxvU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAotICAgIEBSZXNvdXJjZSAgICAKKyAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1hbmFnZWRCZWFuRXh0cmEgbWJFeHRyYTsKIAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmluaXQiKTsKLQltYkV4dHJhLmhlbGxvKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmluaXQiKTsKKyAgICBtYkV4dHJhLmhlbGxvKCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKLQlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojpkb0dldCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojpkb0dldCIpOwogCi0JaW50IG51bUl0ZXIgPSAyOworICAgIGludCBudW1JdGVyID0gMjsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICBkb1Rlc3QobnVtSXRlciwgImphdmE6bW9kdWxlL01hbmFnZWRCZWFuTm9JbnQiLCAwLCAiIik7Ci0JICAgIGRvVGVzdChudW1JdGVyLCAiamF2YTptb2R1bGUvTWFuYWdlZEJlYW4xSW50IiwgbnVtSXRlciwgIkEiKTsKLQkgICAgZG9UZXN0KG51bUl0ZXIsICJqYXZhOm1vZHVsZS9NYW5hZ2VkQmVhbjJJbnQiLCBudW1JdGVyKjIsICJBQiIpOwotCSAgICBkb1Rlc3QobnVtSXRlciwgImphdmE6bW9kdWxlL01hbmFnZWRCZWFuMkludFBsdXNCZWFuIiwgbnVtSXRlcioyLCAiQUJNIik7Ci0JICAgIGRvVGVzdChudW1JdGVyLCAiamF2YTptb2R1bGUvTWFuYWdlZEJlYW5Ob0ludFBsdXNCZWFuIiwgMCwgIk0iKTsKKyAgICAgICAgZG9UZXN0KG51bUl0ZXIsICJqYXZhOm1vZHVsZS9NYW5hZ2VkQmVhbk5vSW50IiwgMCwgIiIpOworICAgICAgICBkb1Rlc3QobnVtSXRlciwgImphdmE6bW9kdWxlL01hbmFnZWRCZWFuMUludCIsIG51bUl0ZXIsICJBIik7CisgICAgICAgIGRvVGVzdChudW1JdGVyLCAiamF2YTptb2R1bGUvTWFuYWdlZEJlYW4ySW50IiwgbnVtSXRlcioyLCAiQUIiKTsKKyAgICAgICAgZG9UZXN0KG51bUl0ZXIsICJqYXZhOm1vZHVsZS9NYW5hZ2VkQmVhbjJJbnRQbHVzQmVhbiIsIG51bUl0ZXIqMiwgIkFCTSIpOworICAgICAgICBkb1Rlc3QobnVtSXRlciwgImphdmE6bW9kdWxlL01hbmFnZWRCZWFuTm9JbnRQbHVzQmVhbiIsIDAsICJNIik7CiAKLQkgICAgZG9UZXN0KG51bUl0ZXIsICJqYXZhOm1vZHVsZS9NYW5hZ2VkQmVhbjJJbnRFeGNsdWRlQ2xhc3MiLCBudW1JdGVyKjIsICIiKTsKKyAgICAgICAgZG9UZXN0KG51bUl0ZXIsICJqYXZhOm1vZHVsZS9NYW5hZ2VkQmVhbjJJbnRFeGNsdWRlQ2xhc3MiLCBudW1JdGVyKjIsICIiKTsKIAotCSAgICBkb1Rlc3QobnVtSXRlciwgImphdmE6bW9kdWxlL01hbmFnZWRCZWFuMUNsYXNzMU1ldGhvZExldmVsSW50IiwgbnVtSXRlcioxLCAiQkEiKTsKKyAgICAgICAgZG9UZXN0KG51bUl0ZXIsICJqYXZhOm1vZHVsZS9NYW5hZ2VkQmVhbjFDbGFzczFNZXRob2RMZXZlbEludCIsIG51bUl0ZXIqMSwgIkJBIik7CiAKLQkgICAgZG9UZXN0KG51bUl0ZXIsICJqYXZhOm1vZHVsZS9NYW5hZ2VkQmVhbjFNZXRob2RMZXZlbEludEV4Y2x1ZGVDbGFzcyIsCi0JCSAgIG51bUl0ZXIqMSwgIkEiKTsKKyAgICAgICAgZG9UZXN0KG51bUl0ZXIsICJqYXZhOm1vZHVsZS9NYW5hZ2VkQmVhbjFNZXRob2RMZXZlbEludEV4Y2x1ZGVDbGFzcyIsCisgICAgICAgICAgIG51bUl0ZXIqMSwgIkEiKTsKIAotCSAgICBkb1Rlc3QobnVtSXRlciwgImphdmE6bW9kdWxlL01hbmFnZWRCZWFuMk1ldGhvZExldmVsSW50IiwgMCwgIkFCIik7Ci0JICAgIAotCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLQl9Ci0JICAgIAorICAgICAgICBkb1Rlc3QobnVtSXRlciwgImphdmE6bW9kdWxlL01hbmFnZWRCZWFuMk1ldGhvZExldmVsSW50IiwgMCwgIkFCIik7CiAKIAotCW91dC5wcmludGxuKCI8SFRNTD4gPEhFQUQ+IDxUSVRMRT4gSk1TIFNlcnZsZXQgT3V0cHV0IDwvVElUTEU+IDwvSEVBRD4gPEJPRFkgQkdDT0xPUj13aGl0ZT4iKTsKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgIH0KKworCisKKyAgICBvdXQucHJpbnRsbigiPEhUTUw+IDxIRUFEPiA8VElUTEU+IEpNUyBTZXJ2bGV0IE91dHB1dCA8L1RJVExFPiA8L0hFQUQ+IDxCT0RZIEJHQ09MT1I9d2hpdGU+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPENFTlRFUj4gPEZPTlQgc2l6ZT0rMSBDT0xPUj1ibHVlPkRhdGFiYXNlU2VydmVsdCA6OiBBbGwgaW5mb3JtYXRpb24gSSBjYW4gZ2l2ZSA8L0ZPTlQ+IDwvQ0VOVEVSPiA8cD4gIiApOwotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBDb250ZXh0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldENvbnRleHRQYXRoKCkgKyAiPGJyPiIgKTsgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFNlcnZsZXQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0U2VydmxldFBhdGgoKSArICI8YnI+IiApOyAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gUGF0aCBJbmZvIDogIDwvRk9OVD4gIiArIHJlcS5nZXRQYXRoSW5mbygpICsgIjxicj4iICk7IAorICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBDb250ZXh0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldENvbnRleHRQYXRoKCkgKyAiPGJyPiIgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gU2VydmxldCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRTZXJ2bGV0UGF0aCgpICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBhdGggSW5mbyA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0UGF0aEluZm8oKSArICI8YnI+IiApOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvQk9EWT4gPC9IVE1MPiAiKTsKIAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkb1Rlc3QoaW50IG51bUl0ZXIsIFN0cmluZyBsb29rdXAsIGludCBudW1JbnRlcmNlcHRvcnMsCi0JCQlTdHJpbmcgYXJvdW5kSW52b2tlKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIFN0cmluZyBhcm91bmRJbnZva2UpIHRocm93cyBFeGNlcHRpb24gewogCi0JU3lzdGVtLm91dC5wcmludGxuKCJUZXN0ICIgKyBsb29rdXAgKyAiIEV4cGVjdCBudW1JbnN0YW5jZXMgPSAiICsgbnVtSXRlciArIAotCQkJICAgIiAsIG51bUludGVyY2VwdG9ycyA9ICIgKyBudW1JbnRlcmNlcHRvcnMgKyAKLQkJCSAgICIgLCBhcm91bmRJbnZva2UgPSAiICsgYXJvdW5kSW52b2tlKTsKLQlmb3IoaW50IGkgPSAwOyBpIDwgbnVtSXRlcjsgaSsrKSB7Ci0JICAgIE1hbmFnZWRCZWFuU3VwZXIgbWIgPSAoTWFuYWdlZEJlYW5TdXBlcikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKGxvb2t1cCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0ICIgKyBsb29rdXAgKyAiIEV4cGVjdCBudW1JbnN0YW5jZXMgPSAiICsgbnVtSXRlciArCisgICAgICAgICAgICAgICAiICwgbnVtSW50ZXJjZXB0b3JzID0gIiArIG51bUludGVyY2VwdG9ycyArCisgICAgICAgICAgICAgICAiICwgYXJvdW5kSW52b2tlID0gIiArIGFyb3VuZEludm9rZSk7CisgICAgZm9yKGludCBpID0gMDsgaSA8IG51bUl0ZXI7IGkrKykgeworICAgICAgICBNYW5hZ2VkQmVhblN1cGVyIG1iID0gKE1hbmFnZWRCZWFuU3VwZXIpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cChsb29rdXApOwogCi0JICAgIHRyeSB7Ci0JCW1iLnRocm93QXBwRXhjZXB0aW9uKCk7Ci0JCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFeHBlY3RlZCBBcHBFeGNlcHRpb24gLCBnb3Qgbm90aGluZyIpOwotCSAgICB9IGNhdGNoKEFwcEV4Y2VwdGlvbiBhZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgQXBwRXhjZXB0aW9uIik7Ci0JICAgIH0gY2F0Y2goVGhyb3dhYmxlIHQpIHsKLQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkV4cGVjdGVkIEFwcEV4Y2VwdGlvbiAsIGdvdCAiICsgdCwgdCk7Ci0JICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgbWIudGhyb3dBcHBFeGNlcHRpb24oKTsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkV4cGVjdGVkIEFwcEV4Y2VwdGlvbiAsIGdvdCBub3RoaW5nIik7CisgICAgICAgIH0gY2F0Y2goQXBwRXhjZXB0aW9uIGFlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBBcHBFeGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaChUaHJvd2FibGUgdCkgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRXhwZWN0ZWQgQXBwRXhjZXB0aW9uICwgZ290ICIgKyB0LCB0KTsKKyAgICAgICAgfQogCi0JICAgIHRyeSB7Ci0JCW1iLnRocm93SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0JCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFeHBlY3RlZCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gLCBnb3Qgbm90aGluZyIpOwotCSAgICB9IGNhdGNoKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiIpOwotCSAgICB9IGNhdGNoKFRocm93YWJsZSB0KSB7Ci0JCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFeHBlY3RlZCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gLCBnb3QgIiArIHQsIHQpOwotCSAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgIG1iLnRocm93SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFeHBlY3RlZCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gLCBnb3Qgbm90aGluZyIpOworICAgICAgICB9IGNhdGNoKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiIpOworICAgICAgICB9IGNhdGNoKFRocm93YWJsZSB0KSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFeHBlY3RlZCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gLCBnb3QgIiArIHQsIHQpOworICAgICAgICB9CiAKLQkgICAgaWYoIGkgPT0gIChudW1JdGVyIC0gMSkgKSB7Ci0JCWludCBhY3R1YWxOdW1JbnN0ID0gIG1iLmdldE51bUluc3RhbmNlcygpOwotCQlpbnQgYWN0dWFsTnVtSW50ZXIgPSAgbWIuZ2V0TnVtSW50ZXJjZXB0b3JJbnN0YW5jZXMoKTsKLQkJU3RyaW5nIGFjdHVhbEFyb3VuZCA9IG1iLmdldEFyb3VuZEludm9rZVNlcXVlbmNlKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiYWN0dWFsIG51bSBJbnN0YW5jZXMgPSAiICsgYWN0dWFsTnVtSW5zdCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiYWN0dWFsIG51bSBJbnRlcmNlcHRvcnMgPSAiICsgYWN0dWFsTnVtSW50ZXIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oImFjdHVhbCBhcm91bmQgaW52b2tlIHNlcXVlbmNlID0gIiArIGFjdHVhbEFyb3VuZCk7CisgICAgICAgIGlmKCBpID09ICAobnVtSXRlciAtIDEpICkgeworICAgICAgICBpbnQgYWN0dWFsTnVtSW5zdCA9ICBtYi5nZXROdW1JbnN0YW5jZXMoKTsKKyAgICAgICAgaW50IGFjdHVhbE51bUludGVyID0gIG1iLmdldE51bUludGVyY2VwdG9ySW5zdGFuY2VzKCk7CisgICAgICAgIFN0cmluZyBhY3R1YWxBcm91bmQgPSBtYi5nZXRBcm91bmRJbnZva2VTZXF1ZW5jZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFjdHVhbCBudW0gSW5zdGFuY2VzID0gIiArIGFjdHVhbE51bUluc3QpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFjdHVhbCBudW0gSW50ZXJjZXB0b3JzID0gIiArIGFjdHVhbE51bUludGVyKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhY3R1YWwgYXJvdW5kIGludm9rZSBzZXF1ZW5jZSA9ICIgKyBhY3R1YWxBcm91bmQpOwogCi0JCWlmKCAoIGFjdHVhbE51bUluc3QgIT0gbnVtSXRlciApIHx8IChhY3R1YWxOdW1JbnRlciAhPSBudW1JbnRlcmNlcHRvcnMpIHx8Ci0JCSAgICAhYWN0dWFsQXJvdW5kLmVxdWFscyhhcm91bmRJbnZva2UpICkgewotCQkgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImFjdHVhbCByZXN1bHRzIGZhaWx1cmUgZm9yICIgKyBsb29rdXApOwotCQl9IAotCSAgICB9CisgICAgICAgIGlmKCAoIGFjdHVhbE51bUluc3QgIT0gbnVtSXRlciApIHx8IChhY3R1YWxOdW1JbnRlciAhPSBudW1JbnRlcmNlcHRvcnMpIHx8CisgICAgICAgICAgICAhYWN0dWFsQXJvdW5kLmVxdWFscyhhcm91bmRJbnZva2UpICkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImFjdHVhbCByZXN1bHRzIGZhaWx1cmUgZm9yICIgKyBsb29rdXApOworICAgICAgICB9CisgICAgICAgIH0KIAotCX0KKyAgICB9CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9JbnRlcmNlcHRvckEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9JbnRlcmNlcHRvckEuamF2YQppbmRleCAwMTBmNWFiLi5iYmZhNWZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvSW50ZXJjZXB0b3JBLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL0ludGVyY2VwdG9yQS5qYXZhCkBAIC0zMywyNyArMzMsMjcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckE6OmluaXQoKSAiKTsKLQkoKE1hbmFnZWRCZWFuU3VwZXIpYy5nZXRUYXJnZXQoKSkubmV3SW50ZXJjZXB0b3JJbnN0YW5jZSgpOwotCWMucHJvY2VlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JBOjppbml0KCkgIik7CisgICAgKChNYW5hZ2VkQmVhblN1cGVyKWMuZ2V0VGFyZ2V0KCkpLm5ld0ludGVyY2VwdG9ySW5zdGFuY2UoKTsKKyAgICBjLnByb2NlZWQoKTsKICAgICB9CiAKIAogICAgIEBBcm91bmRJbnZva2UKICAgICBwcml2YXRlIE9iamVjdCByb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQTo6YXJvdW5kSW52b2tlKCkgIik7Ci0JaWYoIGMuZ2V0TWV0aG9kKCkuZ2V0TmFtZSgpLmVxdWFscygiZ2V0QXJvdW5kSW52b2tlU2VxdWVuY2UiKSApIHsKLQkgICAgU3RyaW5nIHJlc3VsdCA9IChTdHJpbmcpIGMucHJvY2VlZCgpOwotCSAgICByZXR1cm4gIkEiICsgcmVzdWx0OwotCX0gZWxzZSB7Ci0JICAgIHJldHVybiBjLnByb2NlZWQoKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckE6OmFyb3VuZEludm9rZSgpICIpOworICAgIGlmKCBjLmdldE1ldGhvZCgpLmdldE5hbWUoKS5lcXVhbHMoImdldEFyb3VuZEludm9rZVNlcXVlbmNlIikgKSB7CisgICAgICAgIFN0cmluZyByZXN1bHQgPSAoU3RyaW5nKSBjLnByb2NlZWQoKTsKKyAgICAgICAgcmV0dXJuICJBIiArIHJlc3VsdDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gYy5wcm9jZWVkKCk7CisgICAgfQogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckE6OmRlc3Ryb3koKSAiKTsKLQljLnByb2NlZWQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQTo6ZGVzdHJveSgpICIpOworICAgIGMucHJvY2VlZCgpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL0ludGVyY2VwdG9yQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL0ludGVyY2VwdG9yQi5qYXZhCmluZGV4IGNjZWI3OWYuLmY2ZGJmYTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9JbnRlcmNlcHRvckIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvSW50ZXJjZXB0b3JCLmphdmEKQEAgLTMzLDI3ICszMywyNyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdChJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQjo6aW5pdCgpICIpOwotCSgoTWFuYWdlZEJlYW5TdXBlciljLmdldFRhcmdldCgpKS5uZXdJbnRlcmNlcHRvckluc3RhbmNlKCk7Ci0JYy5wcm9jZWVkKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckI6OmluaXQoKSAiKTsKKyAgICAoKE1hbmFnZWRCZWFuU3VwZXIpYy5nZXRUYXJnZXQoKSkubmV3SW50ZXJjZXB0b3JJbnN0YW5jZSgpOworICAgIGMucHJvY2VlZCgpOwogICAgIH0KIAogCiAgICAgQEFyb3VuZEludm9rZQogICAgIHByaXZhdGUgT2JqZWN0IHJvdW5kSW52b2tlKEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JCOjphcm91bmRJbnZva2UoKSAiKTsKLQlpZiggYy5nZXRNZXRob2QoKS5nZXROYW1lKCkuZXF1YWxzKCJnZXRBcm91bmRJbnZva2VTZXF1ZW5jZSIpICkgewotCSAgICBTdHJpbmcgcmVzdWx0ID0gKFN0cmluZykgYy5wcm9jZWVkKCk7Ci0JICAgIHJldHVybiAiQiIgKyByZXN1bHQ7Ci0JfSBlbHNlIHsKLQkgICAgcmV0dXJuIGMucHJvY2VlZCgpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQjo6YXJvdW5kSW52b2tlKCkgIik7CisgICAgaWYoIGMuZ2V0TWV0aG9kKCkuZ2V0TmFtZSgpLmVxdWFscygiZ2V0QXJvdW5kSW52b2tlU2VxdWVuY2UiKSApIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IChTdHJpbmcpIGMucHJvY2VlZCgpOworICAgICAgICByZXR1cm4gIkIiICsgcmVzdWx0OworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBjLnByb2NlZWQoKTsKKyAgICB9CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveShJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQjo6ZGVzdHJveSgpICIpOwotCWMucHJvY2VlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JCOjpkZXN0cm95KCkgIik7CisgICAgYy5wcm9jZWVkKCk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvSW50ZXJjZXB0b3JTdXBlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL0ludGVyY2VwdG9yU3VwZXIuamF2YQppbmRleCA3MjgwY2Y2Li4yNGNjNDkxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvSW50ZXJjZXB0b3JTdXBlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9JbnRlcmNlcHRvclN1cGVyLmphdmEKQEAgLTI2LDIwICsyNiwyMCBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdChJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yU3VwZXI6OmluaXQoKSAiKTsKLQljLnByb2NlZWQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yU3VwZXI6OmluaXQoKSAiKTsKKyAgICBjLnByb2NlZWQoKTsKICAgICB9CiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHJpdmF0ZSBPYmplY3Qgcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvclN1cGVyOjphcm91bmRJbnZva2UoKSAiKTsKLQlyZXR1cm4gYy5wcm9jZWVkKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvclN1cGVyOjphcm91bmRJbnZva2UoKSAiKTsKKyAgICByZXR1cm4gYy5wcm9jZWVkKCk7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveShJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yU3VwZXI6OmRlc3Ryb3koKSAiKTsKLQljLnByb2NlZWQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yU3VwZXI6OmRlc3Ryb3koKSAiKTsKKyAgICBjLnByb2NlZWQoKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbjFDbGFzczFNZXRob2RMZXZlbEludC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuMUNsYXNzMU1ldGhvZExldmVsSW50LmphdmEKaW5kZXggZWFhODEwZi4uNmM0OTA3NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuMUNsYXNzMU1ldGhvZExldmVsSW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuMUNsYXNzMU1ldGhvZExldmVsSW50LmphdmEKQEAgLTMxLDI2ICszMSwyNiBAQAogICAgIHByaXZhdGUgU3RyaW5nIGFyb3VuZEludm9rZSA9ICIiOwogCiAgICAgcHVibGljIHZvaWQgbmV3SW50ZXJjZXB0b3JJbnN0YW5jZSgpIHsKLQludW1JbnRlcmNlcHRvckluc3RhbmNlcysrOworICAgIG51bUludGVyY2VwdG9ySW5zdGFuY2VzKys7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXROdW1JbnN0YW5jZXMoKSB7Ci0JcmV0dXJuIG51bUluc3RhbmNlczsKKyAgICByZXR1cm4gbnVtSW5zdGFuY2VzOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TnVtSW50ZXJjZXB0b3JJbnN0YW5jZXMoKSB7Ci0JcmV0dXJuIG51bUludGVyY2VwdG9ySW5zdGFuY2VzOworICAgIHJldHVybiBudW1JbnRlcmNlcHRvckluc3RhbmNlczsKICAgICB9CiAKICAgICBASW50ZXJjZXB0b3JzKHtJbnRlcmNlcHRvckEuY2xhc3N9KQogICAgIHB1YmxpYyBTdHJpbmcgZ2V0QXJvdW5kSW52b2tlU2VxdWVuY2UoKSB7Ci0JcmV0dXJuICIiOworICAgIHJldHVybiAiIjsKICAgICB9CiAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JbnVtSW5zdGFuY2VzKys7CisgICAgbnVtSW5zdGFuY2VzKys7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbjFJbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbjFJbnQuamF2YQppbmRleCAzNmVkMjUwLi44ZjAzNjQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW4xSW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuMUludC5qYXZhCkBAIC0yOSwyMCArMjksMjAgQEAKICAgICBzdGF0aWMgcHJpdmF0ZSBpbnQgbnVtSW50ZXJjZXB0b3JJbnN0YW5jZXMgPSAwOwogCiAgICAgcHVibGljIHZvaWQgbmV3SW50ZXJjZXB0b3JJbnN0YW5jZSgpIHsKLQludW1JbnRlcmNlcHRvckluc3RhbmNlcysrOworICAgIG51bUludGVyY2VwdG9ySW5zdGFuY2VzKys7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXROdW1JbnN0YW5jZXMoKSB7Ci0JcmV0dXJuIG51bUluc3RhbmNlczsKKyAgICByZXR1cm4gbnVtSW5zdGFuY2VzOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TnVtSW50ZXJjZXB0b3JJbnN0YW5jZXMoKSB7Ci0JcmV0dXJuIG51bUludGVyY2VwdG9ySW5zdGFuY2VzOworICAgIHJldHVybiBudW1JbnRlcmNlcHRvckluc3RhbmNlczsKICAgICB9Ci0gICAKKwogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JbnVtSW5zdGFuY2VzKys7CisgICAgbnVtSW5zdGFuY2VzKys7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbjFNZXRob2RMZXZlbEludEV4Y2x1ZGVDbGFzcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuMU1ldGhvZExldmVsSW50RXhjbHVkZUNsYXNzLmphdmEKaW5kZXggZWVjYWRjMC4uOTNiODI4YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuMU1ldGhvZExldmVsSW50RXhjbHVkZUNsYXNzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuMU1ldGhvZExldmVsSW50RXhjbHVkZUNsYXNzLmphdmEKQEAgLTMyLDI3ICszMiwyNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIGFyb3VuZEludm9rZSA9ICIiOwogCiAgICAgcHVibGljIHZvaWQgbmV3SW50ZXJjZXB0b3JJbnN0YW5jZSgpIHsKLQludW1JbnRlcmNlcHRvckluc3RhbmNlcysrOworICAgIG51bUludGVyY2VwdG9ySW5zdGFuY2VzKys7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXROdW1JbnN0YW5jZXMoKSB7Ci0JcmV0dXJuIG51bUluc3RhbmNlczsKKyAgICByZXR1cm4gbnVtSW5zdGFuY2VzOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TnVtSW50ZXJjZXB0b3JJbnN0YW5jZXMoKSB7Ci0JcmV0dXJuIG51bUludGVyY2VwdG9ySW5zdGFuY2VzOworICAgIHJldHVybiBudW1JbnRlcmNlcHRvckluc3RhbmNlczsKICAgICB9CiAKICAgICBASW50ZXJjZXB0b3JzKHtJbnRlcmNlcHRvckEuY2xhc3N9KQogICAgIEBFeGNsdWRlQ2xhc3NJbnRlcmNlcHRvcnMKICAgICBwdWJsaWMgU3RyaW5nIGdldEFyb3VuZEludm9rZVNlcXVlbmNlKCkgewotCXJldHVybiAiIjsKKyAgICByZXR1cm4gIiI7CiAgICAgfQogCiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCW51bUluc3RhbmNlcysrOworICAgIG51bUluc3RhbmNlcysrOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW4ySW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW4ySW50LmphdmEKaW5kZXggNThhMGI2Yi4uZDY3NjJlYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuMkludC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbjJJbnQuamF2YQpAQCAtMzEsMjIgKzMxLDIyIEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgYXJvdW5kSW52b2tlID0gIiI7CiAKICAgICBwdWJsaWMgdm9pZCBuZXdJbnRlcmNlcHRvckluc3RhbmNlKCkgewotCW51bUludGVyY2VwdG9ySW5zdGFuY2VzKys7CisgICAgbnVtSW50ZXJjZXB0b3JJbnN0YW5jZXMrKzsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE51bUluc3RhbmNlcygpIHsKLQlyZXR1cm4gbnVtSW5zdGFuY2VzOworICAgIHJldHVybiBudW1JbnN0YW5jZXM7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXROdW1JbnRlcmNlcHRvckluc3RhbmNlcygpIHsKLQlyZXR1cm4gbnVtSW50ZXJjZXB0b3JJbnN0YW5jZXM7CisgICAgcmV0dXJuIG51bUludGVyY2VwdG9ySW5zdGFuY2VzOwogICAgIH0KIAotICAgCisKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JbnVtSW5zdGFuY2VzKys7CisgICAgbnVtSW5zdGFuY2VzKys7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbjJJbnRFeGNsdWRlQ2xhc3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbjJJbnRFeGNsdWRlQ2xhc3MuamF2YQppbmRleCA0Zjg2NDZjLi40NjFkMzY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW4ySW50RXhjbHVkZUNsYXNzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuMkludEV4Y2x1ZGVDbGFzcy5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiBpbXBvcnQgamFrYXJ0YS5pbnRlcmNlcHRvci5JbnRlcmNlcHRvcnM7CiBpbXBvcnQgamFrYXJ0YS5pbnRlcmNlcHRvci5Bcm91bmRJbnZva2U7CiBpbXBvcnQgamFrYXJ0YS5pbnRlcmNlcHRvci5JbnZvY2F0aW9uQ29udGV4dDsKLWltcG9ydCBqYWthcnRhLmludGVyY2VwdG9yLkV4Y2x1ZGVDbGFzc0ludGVyY2VwdG9yczsgCitpbXBvcnQgamFrYXJ0YS5pbnRlcmNlcHRvci5FeGNsdWRlQ2xhc3NJbnRlcmNlcHRvcnM7CiAKIEBNYW5hZ2VkQmVhbigiTWFuYWdlZEJlYW4ySW50RXhjbHVkZUNsYXNzIikKICAgICBASW50ZXJjZXB0b3JzKHtJbnRlcmNlcHRvckEuY2xhc3MsIEludGVyY2VwdG9yQi5jbGFzc30pCkBAIC0zMiwyNSArMzIsMjUgQEAKICAgICBwcml2YXRlIFN0cmluZyBhcm91bmRJbnZva2UgPSAiIjsKIAogICAgIHB1YmxpYyB2b2lkIG5ld0ludGVyY2VwdG9ySW5zdGFuY2UoKSB7Ci0JbnVtSW50ZXJjZXB0b3JJbnN0YW5jZXMrKzsKKyAgICBudW1JbnRlcmNlcHRvckluc3RhbmNlcysrOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TnVtSW5zdGFuY2VzKCkgewotCXJldHVybiBudW1JbnN0YW5jZXM7CisgICAgcmV0dXJuIG51bUluc3RhbmNlczsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE51bUludGVyY2VwdG9ySW5zdGFuY2VzKCkgewotCXJldHVybiBudW1JbnRlcmNlcHRvckluc3RhbmNlczsKKyAgICByZXR1cm4gbnVtSW50ZXJjZXB0b3JJbnN0YW5jZXM7CiAgICAgfQogCiAgICAgQEV4Y2x1ZGVDbGFzc0ludGVyY2VwdG9ycwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0QXJvdW5kSW52b2tlU2VxdWVuY2UoKSB7Ci0JcmV0dXJuICIiOworICAgIHJldHVybiAiIjsKICAgICB9CiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCW51bUluc3RhbmNlcysrOworICAgIG51bUluc3RhbmNlcysrOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW4ySW50UGx1c0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbjJJbnRQbHVzQmVhbi5qYXZhCmluZGV4IDBmZWUzZGUuLmRhYTEzNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbjJJbnRQbHVzQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbjJJbnRQbHVzQmVhbi5qYXZhCkBAIC0zMSwzMSArMzEsMzEgQEAKICAgICBwcml2YXRlIFN0cmluZyBhcm91bmRJbnZva2UgPSAiIjsKIAogICAgIHB1YmxpYyB2b2lkIG5ld0ludGVyY2VwdG9ySW5zdGFuY2UoKSB7Ci0JbnVtSW50ZXJjZXB0b3JJbnN0YW5jZXMrKzsKKyAgICBudW1JbnRlcmNlcHRvckluc3RhbmNlcysrOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TnVtSW5zdGFuY2VzKCkgewotCXJldHVybiBudW1JbnN0YW5jZXM7CisgICAgcmV0dXJuIG51bUluc3RhbmNlczsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE51bUludGVyY2VwdG9ySW5zdGFuY2VzKCkgewotCXJldHVybiBudW1JbnRlcmNlcHRvckluc3RhbmNlczsKKyAgICByZXR1cm4gbnVtSW50ZXJjZXB0b3JJbnN0YW5jZXM7CiAgICAgfQogCiAgICAgIEBBcm91bmRJbnZva2UKICAgICBwcml2YXRlIE9iamVjdCByb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1hbmFnZWRCZWFuMkludFBsdXNCZWFuOjpyb3VuZEludm9rZSgpICIpOwotCWlmKCBjLmdldE1ldGhvZCgpLmdldE5hbWUoKS5lcXVhbHMoImdldEFyb3VuZEludm9rZVNlcXVlbmNlIikgKSB7Ci0JICAgIFN0cmluZyByZXN1bHQgPSAoU3RyaW5nKSBjLnByb2NlZWQoKTsKLQkgICAgcmV0dXJuICJNIiArIHJlc3VsdDsKLQl9IGVsc2UgewotCSAgICByZXR1cm4gYy5wcm9jZWVkKCk7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWFuYWdlZEJlYW4ySW50UGx1c0JlYW46OnJvdW5kSW52b2tlKCkgIik7CisgICAgaWYoIGMuZ2V0TWV0aG9kKCkuZ2V0TmFtZSgpLmVxdWFscygiZ2V0QXJvdW5kSW52b2tlU2VxdWVuY2UiKSApIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IChTdHJpbmcpIGMucHJvY2VlZCgpOworICAgICAgICByZXR1cm4gIk0iICsgcmVzdWx0OworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBjLnByb2NlZWQoKTsKKyAgICB9CiAgICAgfQogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQludW1JbnN0YW5jZXMrKzsKKyAgICBudW1JbnN0YW5jZXMrKzsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuMk1ldGhvZExldmVsSW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW4yTWV0aG9kTGV2ZWxJbnQuamF2YQppbmRleCBhY2IzMjNhLi4wNWRkNTVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW4yTWV0aG9kTGV2ZWxJbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW4yTWV0aG9kTGV2ZWxJbnQuamF2YQpAQCAtMzAsMjYgKzMwLDI2IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgYXJvdW5kSW52b2tlID0gIiI7CiAKICAgICBwdWJsaWMgdm9pZCBuZXdJbnRlcmNlcHRvckluc3RhbmNlKCkgewotCW51bUludGVyY2VwdG9ySW5zdGFuY2VzKys7CisgICAgbnVtSW50ZXJjZXB0b3JJbnN0YW5jZXMrKzsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE51bUluc3RhbmNlcygpIHsKLQlyZXR1cm4gbnVtSW5zdGFuY2VzOworICAgIHJldHVybiBudW1JbnN0YW5jZXM7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXROdW1JbnRlcmNlcHRvckluc3RhbmNlcygpIHsKLQlyZXR1cm4gbnVtSW50ZXJjZXB0b3JJbnN0YW5jZXM7CisgICAgcmV0dXJuIG51bUludGVyY2VwdG9ySW5zdGFuY2VzOwogICAgIH0KIAogICAgIEBJbnRlcmNlcHRvcnMoe0ludGVyY2VwdG9yQS5jbGFzcywgSW50ZXJjZXB0b3JCLmNsYXNzfSkKICAgICBwdWJsaWMgU3RyaW5nIGdldEFyb3VuZEludm9rZVNlcXVlbmNlKCkgewotCXJldHVybiAiIjsKKyAgICByZXR1cm4gIiI7CiAgICAgfQogCiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCW51bUluc3RhbmNlcysrOworICAgIG51bUluc3RhbmNlcysrOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW5Ob0ludC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuTm9JbnQuamF2YQppbmRleCA1MzEzYThkLi4zMzNiN2JiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW5Ob0ludC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbk5vSW50LmphdmEKQEAgLTI1LDEyICsyNSwxMiBAQAogICAgIHN0YXRpYyBwcml2YXRlIGludCBudW1JbnN0YW5jZXMgPSAwOwogCiAgICAgcHVibGljIGludCBnZXROdW1JbnN0YW5jZXMoKSB7Ci0JcmV0dXJuIG51bUluc3RhbmNlczsKKyAgICByZXR1cm4gbnVtSW5zdGFuY2VzOwogICAgIH0KIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JbnVtSW5zdGFuY2VzKys7CisgICAgbnVtSW5zdGFuY2VzKys7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbk5vSW50UGx1c0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbk5vSW50UGx1c0JlYW4uamF2YQppbmRleCBkMDBkODdhLi5jMjNmMWZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW5Ob0ludFBsdXNCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuTm9JbnRQbHVzQmVhbi5qYXZhCkBAIC0zMCwzMSArMzAsMzEgQEAKICAgICBwcml2YXRlIFN0cmluZyBhcm91bmRJbnZva2UgPSAiIjsKIAogICAgIHB1YmxpYyB2b2lkIG5ld0ludGVyY2VwdG9ySW5zdGFuY2UoKSB7Ci0JbnVtSW50ZXJjZXB0b3JJbnN0YW5jZXMrKzsKKyAgICBudW1JbnRlcmNlcHRvckluc3RhbmNlcysrOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TnVtSW5zdGFuY2VzKCkgewotCXJldHVybiBudW1JbnN0YW5jZXM7CisgICAgcmV0dXJuIG51bUluc3RhbmNlczsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE51bUludGVyY2VwdG9ySW5zdGFuY2VzKCkgewotCXJldHVybiBudW1JbnRlcmNlcHRvckluc3RhbmNlczsKKyAgICByZXR1cm4gbnVtSW50ZXJjZXB0b3JJbnN0YW5jZXM7CiAgICAgfQogCiAgICAgIEBBcm91bmRJbnZva2UKICAgICBwcml2YXRlIE9iamVjdCByb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1hbmFnZWRCZWFuTm9JbnRQbHVzQmVhbjo6cm91bmRJbnZva2UoKSAiKTsKLQlpZiggYy5nZXRNZXRob2QoKS5nZXROYW1lKCkuZXF1YWxzKCJnZXRBcm91bmRJbnZva2VTZXF1ZW5jZSIpICkgewotCSAgICBTdHJpbmcgcmVzdWx0ID0gKFN0cmluZykgYy5wcm9jZWVkKCk7Ci0JICAgIHJldHVybiAiTSIgKyByZXN1bHQ7Ci0JfSBlbHNlIHsKLQkgICAgcmV0dXJuIGMucHJvY2VlZCgpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1hbmFnZWRCZWFuTm9JbnRQbHVzQmVhbjo6cm91bmRJbnZva2UoKSAiKTsKKyAgICBpZiggYy5nZXRNZXRob2QoKS5nZXROYW1lKCkuZXF1YWxzKCJnZXRBcm91bmRJbnZva2VTZXF1ZW5jZSIpICkgeworICAgICAgICBTdHJpbmcgcmVzdWx0ID0gKFN0cmluZykgYy5wcm9jZWVkKCk7CisgICAgICAgIHJldHVybiAiTSIgKyByZXN1bHQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGMucHJvY2VlZCgpOworICAgIH0KICAgICB9CiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCW51bUluc3RhbmNlcysrOworICAgIG51bUluc3RhbmNlcysrOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW5TdXBlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuU3VwZXIuamF2YQppbmRleCA3MzU5YzIwLi40OGJjZjVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW5TdXBlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhblN1cGVyLmphdmEKQEAgLTI3LDEyICsyNywxMiBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0QXJvdW5kSW52b2tlU2VxdWVuY2UoKSB7IHJldHVybiAiIjsgfQogCiAgICAgcHVibGljIFN0cmluZyB0aHJvd0FwcEV4Y2VwdGlvbigpIHRocm93cyBBcHBFeGNlcHRpb24gewotCXRocm93IG5ldyBBcHBFeGNlcHRpb24oKTsKKyAgICB0aHJvdyBuZXcgQXBwRXhjZXB0aW9uKCk7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyB0aHJvd0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpIHsKLQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7CisgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOwogICAgIH0KIAotCQkJCQkgICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9zaW5pdGNhbGxlamIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL3Npbml0Y2FsbGVqYi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGUxYWI1Y2MuLmIzNDlhNmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL3Npbml0Y2FsbGVqYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL3Npbml0Y2FsbGVqYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMyArMTUsMTMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMS1lamJsaXRlLXNpbml0Y2FsbGVqYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iJHttb2R1bGV9Ii8+Ci0JCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvc2luaXRjYWxsZWpiL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL3Npbml0Y2FsbGVqYi9idWlsZC54bWwKaW5kZXggMjA4Y2RlMi4uZjlmZjAzOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvc2luaXRjYWxsZWpiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9zaW5pdGNhbGxlamIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0id2FyIi8+CkBAIC00OCw5ICs0OCw5IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01OCw5ICs1OCw5IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtNzIsNyArNzIsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvc2luaXRjYWxsZWpiL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL3Npbml0Y2FsbGVqYi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYzI5OGE0Yi4uYzE4Y2RlMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvc2luaXRjYWxsZWpiL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9zaW5pdGNhbGxlamIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwpAQCAtMzQsNDYgKzM0LDQ2IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgcG9ydDsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKLQlhcHBOYW1lID0gYXJnc1swXTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwotCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOyAgICAgICAKLSAgICAgICAgY2xpZW50LmRvVGVzdCgpOwkKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOworICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOworICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKICAgICB9CiAKICAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKLQlob3N0ID0gYXJnc1sxXTsKKyAgICBob3N0ID0gYXJnc1sxXTsKICAgICAgICAgcG9ydCA9IGFyZ3NbMl07CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCi0JdHJ5IHsKKyAgICB0cnkgewogCi0JICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIAorICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKwogICAgICAgICAgICAgICAgICIvIiArIGFwcE5hbWUgKyAiL0hlbGxvU2VydmxldCI7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgd2ViY2xpZW50IHNlcnZsZXQgYXQgIiArIHVybCk7CiAKLQkgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7Ci0gICAgICAgIAotCSAgICBIdHRwVVJMQ29ubmVjdGlvbiBjMSA9IChIdHRwVVJMQ29ubmVjdGlvbil1Lm9wZW5Db25uZWN0aW9uKCk7Ci0JICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7Ci0JICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKLQkgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwotCSAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0JICAgIHdoaWxlKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkKLQkJU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOwotCSAgICBpZihjb2RlICE9IDIwMCkgewotCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW5jb3JyZWN0IHJldHVybiBjb2RlOiAiICsgY29kZSk7Ci0JICAgIH0KLQkgICAgCi0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7CiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKXUub3BlbkNvbm5lY3Rpb24oKTsKKyAgICAgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKKyAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOworICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlciAobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CisgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKKyAgICAgICAgd2hpbGUoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7CisgICAgICAgIGlmKGNvZGUgIT0gMjAwKSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbmNvcnJlY3QgcmV0dXJuIGNvZGU6ICIgKyBjb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKKworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvc2luaXRjYWxsZWpiL3dhci9Db250ZXh0TGlzdGVuZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL3Npbml0Y2FsbGVqYi93YXIvQ29udGV4dExpc3RlbmVyLmphdmEKaW5kZXggOGI4YTQzNC4uNzNlMGMyZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvc2luaXRjYWxsZWpiL3dhci9Db250ZXh0TGlzdGVuZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9zaW5pdGNhbGxlamIvd2FyL0NvbnRleHRMaXN0ZW5lci5qYXZhCkBAIC0zMywyMCArMzMsMjAgQEAKIAogICAgIHB1YmxpYyB2b2lkIGNvbnRleHRJbml0aWFsaXplZChTZXJ2bGV0Q29udGV4dEV2ZW50IHNjZSkgewogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBDb250ZXh0TGlzdGVuZXI6OmNvbnRleHRJbml0aWFsaXplZCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gQ29udGV4dExpc3RlbmVyOjpjb250ZXh0SW5pdGlhbGl6ZWQiKTsKIAotCXNpbXBsZVN0YXRlbGVzcy5oZWxsbygpOworICAgIHNpbXBsZVN0YXRlbGVzcy5oZWxsbygpOwogCiAgICAgfQogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBwYygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIENvbnRleHRMaXN0ZW5lcjo6cG9zdENvbnN0cnVjdCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gQ29udGV4dExpc3RlbmVyOjpwb3N0Q29uc3RydWN0Iik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgY29udGV4dERlc3Ryb3llZChTZXJ2bGV0Q29udGV4dEV2ZW50IHNjZSkgewogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBDb250ZXh0TGlzdGVuZXI6OmNvbnRleHREZXN0cm95ZWQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIENvbnRleHRMaXN0ZW5lcjo6Y29udGV4dERlc3Ryb3llZCIpOwogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9zaW5pdGNhbGxlamIvd2FyL0hlbGxvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvc2luaXRjYWxsZWpiL3dhci9IZWxsb1NlcnZsZXQuamF2YQppbmRleCA3YWU4NzVmLi4wY2FiM2FjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9zaW5pdGNhbGxlamIvd2FyL0hlbGxvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL3Npbml0Y2FsbGVqYi93YXIvSGVsbG9TZXJ2bGV0LmphdmEKQEAgLTQ2LDU5ICs0Niw1OSBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmluaXQiKTsKLQlzaW1wbGVTaW5nbGV0b24uaGVsbG8oKTsKLQlzaW1wbGVTdGF0ZWxlc3MuaGVsbG8oKTsKLQlzaW1wbGVTdGF0ZWZ1bC5oZWxsbygpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojppbml0Iik7CisgICAgc2ltcGxlU2luZ2xldG9uLmhlbGxvKCk7CisgICAgc2ltcGxlU3RhdGVsZXNzLmhlbGxvKCk7CisgICAgc2ltcGxlU3RhdGVmdWwuaGVsbG8oKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAotCXJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmRvR2V0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmRvR2V0Iik7CiAKLQlzaW1wbGVTaW5nbGV0b24uaGVsbG8oKTsKKyAgICBzaW1wbGVTaW5nbGV0b24uaGVsbG8oKTsKIAotCXRyeSB7Ci0JICAgIHNpbXBsZVN0YXRlbGVzcy5oZWxsb1BhY2thZ2UoKTsKLQkgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuIGNhbGxpbmcgcGFja2FnZS1wcml2YXRlIG1ldGhvZCIpOwotCX0gY2F0Y2goRUpCRXhjZXB0aW9uIGUpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgZ290IGV4Y2VwdGlvbiB3aGVuIGNhbGxpbmcgcGFja2FnZSBwcml2YXRlIG1ldGhvZCBvbiBuby1pbnRlcmZhY2UgdmlldyIpOwotCX0KKyAgICB0cnkgeworICAgICAgICBzaW1wbGVTdGF0ZWxlc3MuaGVsbG9QYWNrYWdlKCk7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFeHBlY3RlZCBleGNlcHRpb24gd2hlbiBjYWxsaW5nIHBhY2thZ2UtcHJpdmF0ZSBtZXRob2QiKTsKKyAgICB9IGNhdGNoKEVKQkV4Y2VwdGlvbiBlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGdvdCBleGNlcHRpb24gd2hlbiBjYWxsaW5nIHBhY2thZ2UgcHJpdmF0ZSBtZXRob2Qgb24gbm8taW50ZXJmYWNlIHZpZXciKTsKKyAgICB9CiAKLQl0cnkgewotCSAgICBzaW1wbGVTdGF0ZWxlc3MuaGVsbG9Qcm90ZWN0ZWQoKTsKLQkgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuIGNhbGxpbmcgcHJvdGVjdGVkIG1ldGhvZCIpOwotCX0gY2F0Y2goRUpCRXhjZXB0aW9uIGUpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgZ290IGV4Y2VwdGlvbiB3aGVuIGNhbGxpbmcgcHJvdGVjdGVkIG1ldGhvZCBvbiBuby1pbnRlcmZhY2UgdmlldyIpOwotCX0KKyAgICB0cnkgeworICAgICAgICBzaW1wbGVTdGF0ZWxlc3MuaGVsbG9Qcm90ZWN0ZWQoKTsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuIGNhbGxpbmcgcHJvdGVjdGVkIG1ldGhvZCIpOworICAgIH0gY2F0Y2goRUpCRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgZ290IGV4Y2VwdGlvbiB3aGVuIGNhbGxpbmcgcHJvdGVjdGVkIG1ldGhvZCBvbiBuby1pbnRlcmZhY2UgdmlldyIpOworICAgIH0KIAotCXRyeSB7Ci0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGZvciAoTmFtaW5nRW51bWVyYXRpb248QmluZGluZz4gZSA9IGljLmxpc3RCaW5kaW5ncygiamF2YTpjb21wL2VudiIpOyBlLmhhc01vcmUoKTsgKSB7CisgICAgdHJ5IHsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZm9yIChOYW1pbmdFbnVtZXJhdGlvbjxCaW5kaW5nPiBlID0gaWMubGlzdEJpbmRpbmdzKCJqYXZhOmNvbXAvZW52Iik7IGUuaGFzTW9yZSgpOyApIHsKICAgICAgICAgICAgICAgICAgQmluZGluZyBiID0gZS5uZXh0KCk7Ly8gamF2YTpjb21wL2Vudi94eHgKICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBuYW1lID0gYi5nZXROYW1lKCkuc3Vic3RyaW5nKCJqYXZhOmNvbXAvZW52LyIubGVuZ3RoKCkpOwogICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgY2wgPSBiLmdldENsYXNzTmFtZSgpOwogICAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3QgbyA9IGIuZ2V0T2JqZWN0KCk7Ci0JCSBTeXN0ZW0ub3V0LnByaW50bG4oImJpbmRpbmcgPSAiICsgYiArICIgLCBuYW1lID0gIiArIG5hbWUgKyAiICwgY2wgPSAiICsgY2wgKyAiICwgb2JqZWN0ID0gIiArIG8pOwotCQkgaWYoICFiLmdldE5hbWUoKS5zdGFydHNXaXRoKCJqYXZhOmNvbXAvZW52IikgKSB7Ci0JCSAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImludmFsaWQgcmV0dXJuZWQgZW52IGVudHJ5IHByZWZpeCIpOwotCQkgfQotCSAgICB9Ci0JICAgIC8vIGFzc3VtZXMgMjk5IGVuYWJsZWQgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvQmVhbk1hbmFnZXIiKTsKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUpOwotCX0KKyAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYmluZGluZyA9ICIgKyBiICsgIiAsIG5hbWUgPSAiICsgbmFtZSArICIgLCBjbCA9ICIgKyBjbCArICIgLCBvYmplY3QgPSAiICsgbyk7CisgICAgICAgICBpZiggIWIuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoImphdmE6Y29tcC9lbnYiKSApIHsKKyAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiaW52YWxpZCByZXR1cm5lZCBlbnYgZW50cnkgcHJlZml4Iik7CisgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gYXNzdW1lcyAyOTkgZW5hYmxlZCBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Y29tcC9CZWFuTWFuYWdlciIpOworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZSk7CisgICAgfQogCi0Jb3V0LnByaW50bG4oIjxIVE1MPiA8SEVBRD4gPFRJVExFPiBKTVMgU2VydmxldCBPdXRwdXQgPC9USVRMRT4gPC9IRUFEPiA8Qk9EWSBCR0NPTE9SPXdoaXRlPiIpOworICAgIG91dC5wcmludGxuKCI8SFRNTD4gPEhFQUQ+IDxUSVRMRT4gSk1TIFNlcnZsZXQgT3V0cHV0IDwvVElUTEU+IDwvSEVBRD4gPEJPRFkgQkdDT0xPUj13aGl0ZT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Q0VOVEVSPiA8Rk9OVCBzaXplPSsxIENPTE9SPWJsdWU+RGF0YWJhc2VTZXJ2ZWx0IDo6IEFsbCBpbmZvcm1hdGlvbiBJIGNhbiBnaXZlIDwvRk9OVD4gPC9DRU5URVI+IDxwPiAiICk7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IENvbnRleHQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0Q29udGV4dFBhdGgoKSArICI8YnI+IiApOyAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gU2VydmxldCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRTZXJ2bGV0UGF0aCgpICsgIjxicj4iICk7IAotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBQYXRoIEluZm8gOiAgPC9GT05UPiAiICsgcmVxLmdldFBhdGhJbmZvKCkgKyAiPGJyPiIgKTsgCisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IENvbnRleHQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0Q29udGV4dFBhdGgoKSArICI8YnI+IiApOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBTZXJ2bGV0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldFNlcnZsZXRQYXRoKCkgKyAiPGJyPiIgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gUGF0aCBJbmZvIDogIDwvRk9OVD4gIiArIHJlcS5nZXRQYXRoSW5mbygpICsgIjxicj4iICk7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9CT0RZPiA8L0hUTUw+ICIpOwogCiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvc2luaXRjYWxsZWpiL3dhci9TaW1wbGVTaW5nbGV0b24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL3Npbml0Y2FsbGVqYi93YXIvU2ltcGxlU2luZ2xldG9uLmphdmEKaW5kZXggMGQ3MzI4Yi4uODUxNjAxMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvc2luaXRjYWxsZWpiL3dhci9TaW1wbGVTaW5nbGV0b24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9zaW5pdGNhbGxlamIvd2FyL1NpbXBsZVNpbmdsZXRvbi5qYXZhCkBAIC0yNSw0MiArMjUsNDIgQEAKIEBTdGFydHVwCiBwdWJsaWMgY2xhc3MgU2ltcGxlU2luZ2xldG9uIHsKIAotICAgIEBSZXNvdXJjZSAKKyAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNlc3Npb25DdHg7CiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCSBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZVNpbmdsZXRvbjppbml0KCkiKTsKKyAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVTaW5nbGV0b246aW5pdCgpIik7CiAKLQkgdHJ5IHsKLQkgICAgIFNpbXBsZVN0YXRlbGVzcyBzcyA9IChTaW1wbGVTdGF0ZWxlc3MpCi0JCSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTphcHAvZW52L3NscmVmIik7Ci0JICAgICBzcy5oZWxsbygpOwotCSAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgbG9va2VkIHVwIHdlYi1jb21wb25lbnQgZGVmaW5lZCBlbnZpcm9ubWVudCBkZXBlbmRlbmN5IGZyb20gQFN0YXJ0dXAgU2luZ2xldG9uIEBQb3N0Q29uc3RydWN0Iik7Ci0JIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JIH0KKyAgICAgdHJ5IHsKKyAgICAgICAgIFNpbXBsZVN0YXRlbGVzcyBzcyA9IChTaW1wbGVTdGF0ZWxlc3MpCisgICAgICAgICBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTphcHAvZW52L3NscmVmIik7CisgICAgICAgICBzcy5oZWxsbygpOworICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgbG9va2VkIHVwIHdlYi1jb21wb25lbnQgZGVmaW5lZCBlbnZpcm9ubWVudCBkZXBlbmRlbmN5IGZyb20gQFN0YXJ0dXAgU2luZ2xldG9uIEBQb3N0Q29uc3RydWN0Iik7CisgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CisgICAgIH0KIAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCkgewotCSBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZVNpbmdsZXRvbjpoZWxsbygpIik7Ci0JIHRyeSB7Ci0JICAgICBTaW1wbGVTdGF0ZWxlc3Mgc3MgPSAoU2ltcGxlU3RhdGVsZXNzKQotCQkgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6YXBwL2Vudi9zbHJlZiIpOwotCSAgICAgc3MuaGVsbG8oKTsKKyAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVTaW5nbGV0b246aGVsbG8oKSIpOworICAgICB0cnkgeworICAgICAgICAgU2ltcGxlU3RhdGVsZXNzIHNzID0gKFNpbXBsZVN0YXRlbGVzcykKKyAgICAgICAgIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmFwcC9lbnYvc2xyZWYiKTsKKyAgICAgICAgIHNzLmhlbGxvKCk7CiAKLQkgICAgIC8vIGFzc3VtZXMgMjk5IGVuYWJsZWQgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvQmVhbk1hbmFnZXIiKTsKLQkgfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLQkgfQorICAgICAgICAgLy8gYXNzdW1lcyAyOTkgZW5hYmxlZCBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Y29tcC9CZWFuTWFuYWdlciIpOworICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOworICAgICB9CiAgICAgfQogCiAgICAgIEBQcmVEZXN0cm95CiAgICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCSBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZVNpbmdsZXRvbjpkZXN0cm95KCkiKTsKKyAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVTaW5nbGV0b246ZGVzdHJveSgpIik7CiAgICAgIH0KIAotICAgIAorCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL3Npbml0Y2FsbGVqYi93YXIvU2ltcGxlU3RhdGVmdWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL3Npbml0Y2FsbGVqYi93YXIvU2ltcGxlU3RhdGVmdWwuamF2YQppbmRleCA5YzUxOWI5Li5hZDcwYmQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9zaW5pdGNhbGxlamIvd2FyL1NpbXBsZVN0YXRlZnVsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvc2luaXRjYWxsZWpiL3dhci9TaW1wbGVTdGF0ZWZ1bC5qYXZhCkBAIC0yNCwxOCArMjQsMTggQEAKIAogICAgICBAUG9zdENvbnN0cnVjdAogICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQkgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVTdGF0ZWZ1bDppbml0KCkiKTsKKyAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVTdGF0ZWZ1bDppbml0KCkiKTsKICAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oKSB7Ci0JIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlU3RhdGVmdWw6aGVsbG8oKSIpOworICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZVN0YXRlZnVsOmhlbGxvKCkiKTsKICAgICB9CiAKICAgICAgQFByZURlc3Ryb3kKICAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlU3RhdGVmdWw6ZGVzdHJveSgpIik7CisgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlU3RhdGVmdWw6ZGVzdHJveSgpIik7CiAgICAgIH0KIAotICAgIAorCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL3Npbml0Y2FsbGVqYi93YXIvU2ltcGxlU3RhdGVsZXNzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9zaW5pdGNhbGxlamIvd2FyL1NpbXBsZVN0YXRlbGVzcy5qYXZhCmluZGV4IDA2NmQxNWIuLmIyYjU5YTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL3Npbml0Y2FsbGVqYi93YXIvU2ltcGxlU3RhdGVsZXNzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvc2luaXRjYWxsZWpiL3dhci9TaW1wbGVTdGF0ZWxlc3MuamF2YQpAQCAtMjQsMjYgKzI0LDI2IEBACiAKICAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlU3RhdGVsZXNzOmluaXQoKSIpOworICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZVN0YXRlbGVzczppbml0KCkiKTsKICAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oKSB7Ci0JIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlU3RhdGVsZXNzOmhlbGxvKCkiKTsKKyAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVTdGF0ZWxlc3M6aGVsbG8oKSIpOwogICAgIH0KIAogICAgIHByb3RlY3RlZCB2b2lkIGhlbGxvUHJvdGVjdGVkKCkgewotCSBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZVN0YXRlbGVzczpoZWxsb1Byb3RlY3RlZCgpIik7CisgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlU3RhdGVsZXNzOmhlbGxvUHJvdGVjdGVkKCkiKTsKICAgICB9CiAKICAgICB2b2lkIGhlbGxvUGFja2FnZSgpIHsKLQkgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVTdGF0ZWxlc3M6aGVsbG9QYWNrYWdlKCkiKTsKKyAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVTdGF0ZWxlc3M6aGVsbG9QYWNrYWdlKCkiKTsKICAgICB9CiAKICAgICAgQFByZURlc3Ryb3kKICAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlU3RhdGVsZXNzOmRlc3Ryb3koKSIpOworICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZVN0YXRlbGVzczpkZXN0cm95KCkiKTsKICAgICAgfQogCi0gICAgCisKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2Jhc2ljL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvYmFzaWMvYnVpbGQucHJvcGVydGllcwppbmRleCBhNzRjM2NiLi43NjA0ZjUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvYmFzaWMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvYmFzaWMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZW1iZWRkZWQtYmFzaWMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9iYXNpYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvYmFzaWMvYnVpbGQueG1sCmluZGV4IGMwZjU4NDcuLjFjZmY5OWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9iYXNpYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2Jhc2ljL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDksMjQgKzQ5LDI0IEBACiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDwhLS0gcGFja2FnZSBvdXJzZWx2ZXMgdG8gaW5jbHVkZSBwZXJzaXN0ZW5jZS54bWwgLS0+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiIAotICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIgorICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIKICAgICAgICAgICAgICBpbmNsdWRlcyA9IioqL1MqLmNsYXNzIj4KICAgICAgICAgICAgICA8bWV0YWluZiBkaXI9ImRlc2NyaXB0b3IiPgogICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iZWpiLWphci54bWwiLz4KICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InBlcnNpc3RlbmNlLnhtbCIvPgotICAgICAgICAgICAgIDwvbWV0YWluZj4gCisgICAgICAgICAgICAgPC9tZXRhaW5mPgogICAgICAgICA8L2phcj4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIHdpdGggJHtlbWJlZGRlZC5jbGFzc3BhdGh9IGluIGNsYXNzcGF0aCIvPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyOiR7ZW1iZWRkZWQuY2xhc3NwYXRofToke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2Jhc2ljL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9iYXNpYy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZmMwOGRmOC4uN2MwZTQ0MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2Jhc2ljL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvYmFzaWMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJjcmVhdGUgY29udGFpbmVyIHdpdGggYSB3cm9uZyBwcm92aWRlciIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKEVKQkV4Y2VwdGlvbiBlKSB7IAorICAgICAgICB9IGNhdGNoIChFSkJFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCI9PT4gQ2F1Z2h0IGV4cGVjdGVkOiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImNyZWF0ZSBjb250YWluZXIgd2l0aCBhIHdyb25nIHByb3ZpZGVyIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfQpAQCAtMTI4LDcgKzEyOCw3IEBACiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImNyZWF0ZSBjb250YWluZXIgd2l0aG91dCBjbG9zaW5nIHRoZSBjdXJyZW50Iiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIj09PiBFUlJPUjogQ3JlYXRlZCBhbm90aGVyIGNvbnRhaW5lciB3aXRob3V0IGNsb3NpbmcgdGhlIGN1cnJlbnQuLi4iKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCAoRUpCRXhjZXB0aW9uIGUpIHsgCisgICAgICAgIH0gY2F0Y2ggKEVKQkV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIj09PiBDYXVnaHQgZXhwZWN0ZWQ6ICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiY3JlYXRlIGNvbnRhaW5lciB3aXRob3V0IGNsb3NpbmcgdGhlIGN1cnJlbnQiLCBzdGF0LlBBU1MpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvYmFzaWMvZWpiL1NpbXBsZUVudGl0eS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2Jhc2ljL2VqYi9TaW1wbGVFbnRpdHkuamF2YQppbmRleCA5NTliNTU2Li4wNjg5YmVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvYmFzaWMvZWpiL1NpbXBsZUVudGl0eS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9iYXNpYy9lamIvU2ltcGxlRW50aXR5LmphdmEKQEAgLTMxLDM1ICszMSwzNSBAQAogICAgIEBOYW1lZFF1ZXJ5KG5hbWUgPSAiU2ltcGxlRW50aXR5LmZpbmRBbGwiLCBxdWVyeSA9ICJzZWxlY3QgZSBmcm9tIFNpbXBsZUVudGl0eSBlIikKIH0pCiBwdWJsaWMgY2xhc3MgU2ltcGxlRW50aXR5IHsKLSAgICAKLSAgICBASWQgCisKKyAgICBASWQKICAgICBAR2VuZXJhdGVkVmFsdWUKICAgICBwcml2YXRlIGludCBpZDsKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwogCiAgICAgQE9uZVRvT25lKGNhc2NhZGU9UEVSU0lTVCwgZmV0Y2g9TEFaWSkKICAgICBwcml2YXRlIFNpbXBsZVJlbGF0ZWQgcmVsYXRlZDsKLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5KCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlUmVsYXRlZCBnZXRSZWxhdGVkKCkgewogICAgICAgICByZXR1cm4gcmVsYXRlZDsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0UmVsYXRlZChTaW1wbGVSZWxhdGVkIHJlbGF0ZWQpIHsKICAgICAgICAgdGhpcy5yZWxhdGVkID0gcmVsYXRlZDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2Jhc2ljL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvYmFzaWMvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YQppbmRleCA5YWJmOThmLi42MWM0NDk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvYmFzaWMvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvYmFzaWMvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YQpAQCAtMjcsMzQgKzI3LDM0IEBACiAKIEBFbnRpdHkKIHB1YmxpYyBjbGFzcyBTaW1wbGVSZWxhdGVkIHsKLSAgICAKLSAgICBASWQgCisKKyAgICBASWQKICAgICBAR2VuZXJhdGVkVmFsdWUKICAgICBwcml2YXRlIGludCBpZDsKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwogCiAgICAgQE9uZVRvT25lKGZldGNoPUxBWlkpCiAgICAgcHJpdmF0ZSBTaW1wbGVFbnRpdHkgZW50aXR5OwotICAgIAorCiAgICAgcHVibGljIFNpbXBsZVJlbGF0ZWQoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlUmVsYXRlZCgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZUVudGl0eSBnZXRFbnRpdHkoKSB7CiAgICAgICAgIHJldHVybiBlbnRpdHk7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eShTaW1wbGVFbnRpdHkgZW50aXR5KSB7CiAgICAgICAgIHRoaXMuZW50aXR5ID0gZW50aXR5OwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2Jhc2ljL2VqYi9TaW5nbGV0b25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvYmFzaWMvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQppbmRleCBjYTI3ODRmLi5jOTIzNjE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvYmFzaWMvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvYmFzaWMvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQpAQCAtMTcsMTQgKzE3LDE0IEBACiBwYWNrYWdlIG9yZy5nbGFzc2Zpc2gudGVzdHMuZWpiLnNhbXBsZTsKIAogaW1wb3J0IGpha2FydGEuZWpiLlNpbmdsZXRvbjsKLWltcG9ydCBqYWthcnRhLmVqYi5TdGFydHVwOyAKK2ltcG9ydCBqYWthcnRhLmVqYi5TdGFydHVwOwogaW1wb3J0IGpha2FydGEuYW5ub3RhdGlvbi5QcmVEZXN0cm95OwogaW1wb3J0IGpha2FydGEuYW5ub3RhdGlvbi5Qb3N0Q29uc3RydWN0OwogCiAvKioKICAqIEBhdXRob3IgTWFyaW5hIFZhdGtpbmEKICAqLwotQFNpbmdsZXRvbiAKK0BTaW5nbGV0b24KIEBTdGFydHVwCiBwdWJsaWMgY2xhc3MgU2luZ2xldG9uQmVhbiB7CiAKQEAgLTMyLDcgKzMyLDcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJkcyA9ICIgKyBkcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJkcyA9ICIgKyBkcyk7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBmb28oKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2J1aWxkLnhtbAppbmRleCA0NGY3YWRmLi5kMWUyNmJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9idWlsZC54bWwKQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgPCEtLSBUaGVzZSB0ZXN0cyByZXF1aXJlIEZ1bGwgUHJvZmlsZSAtLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJtb2R1bGV3aXRoYXBwbmFtZSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InR3b21vZHVsZXMiLz4KLSAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ0d29tb2R1bGVzd2l0aGxpYnMiLz4gCisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idHdvbW9kdWxlc3dpdGhsaWJzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiYW5kd2FyIi8+CiAgICAgICAgIDwhLS0gVGhlc2UgMiB0ZXN0cyB3aWxsIHN0b3AgZG9tYWluIHRvIHJ1biAtLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJtZGIiLz4KQEAgLTExOCw3ICsxMTgsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ0aW1lcnRlc3QiPgogICAgICAgICA8cmVjb3JkIG5hbWU9InRpbWVydGVzdC5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiIC8+Ci0JPGVjaG8+UnVubmluZyB0aW1lcnRlc3QgdGFyZ2V0ICR7dGltZXIudGVzdC50eXBlfSA8L2VjaG8+CisgICAgPGVjaG8+UnVubmluZyB0aW1lcnRlc3QgdGFyZ2V0ICR7dGltZXIudGVzdC50eXBlfSA8L2VjaG8+CiAgICAgICAgICAgICA8YW50IGRpcj0idGltZXJ0ZXN0IiB0YXJnZXQ9IiR7dGltZXIudGVzdC50eXBlfSIvPgogICAgICAgICA8cmVjb3JkIG5hbWU9InRpbWVydGVzdC5vdXRwdXQiIGFjdGlvbj0ic3RvcCIgLz4KICAgICA8L3RhcmdldD4KQEAgLTE5MCw5ICsxOTAsOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWpiMzEtZW1iZWRkZWQgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWVqYjMxLWVtYmVkZGVkIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9kYXRhc291cmNlZGVmL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZGF0YXNvdXJjZWRlZi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDc0YzRiMDQuLmZiZGEyMWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9kYXRhc291cmNlZGVmL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2RhdGFzb3VyY2VkZWYvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZW1iZWRkZWQtZGF0YXNvdXJjZWRlZiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2RhdGFzb3VyY2VkZWYvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2RhdGFzb3VyY2VkZWYvYnVpbGQueG1sCmluZGV4IDYyNjNlMjYuLjdkM2JiYmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9kYXRhc291cmNlZGVmL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZGF0YXNvdXJjZWRlZi9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ5LDI0ICs0OSwyNCBAQAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8IS0tIHBhY2thZ2Ugb3Vyc2VsdmVzIHRvIGluY2x1ZGUgcGVyc2lzdGVuY2UueG1sIC0tPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi9TKi5jbGFzcyI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZGlyPSJkZXNjcmlwdG9yIj4KICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImVqYi1qYXIueG1sIi8+CiAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJwZXJzaXN0ZW5jZS54bWwiLz4KLSAgICAgICAgICAgICA8L21ldGFpbmY+IAorICAgICAgICAgICAgIDwvbWV0YWluZj4KICAgICAgICAgPC9qYXI+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyB3aXRoICR7ZW1iZWRkZWQuY2xhc3NwYXRofSBpbiBjbGFzc3BhdGgiLz4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphcjoke2VtYmVkZGVkLmNsYXNzcGF0aH06JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9kYXRhc291cmNlZGVmL2VqYi9TaW1wbGVFbnRpdHkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9kYXRhc291cmNlZGVmL2VqYi9TaW1wbGVFbnRpdHkuamF2YQppbmRleCA5NTliNTU2Li4wNjg5YmVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZGF0YXNvdXJjZWRlZi9lamIvU2ltcGxlRW50aXR5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2RhdGFzb3VyY2VkZWYvZWpiL1NpbXBsZUVudGl0eS5qYXZhCkBAIC0zMSwzNSArMzEsMzUgQEAKICAgICBATmFtZWRRdWVyeShuYW1lID0gIlNpbXBsZUVudGl0eS5maW5kQWxsIiwgcXVlcnkgPSAic2VsZWN0IGUgZnJvbSBTaW1wbGVFbnRpdHkgZSIpCiB9KQogcHVibGljIGNsYXNzIFNpbXBsZUVudGl0eSB7Ci0gICAgCi0gICAgQElkIAorCisgICAgQElkCiAgICAgQEdlbmVyYXRlZFZhbHVlCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKIAogICAgIEBPbmVUb09uZShjYXNjYWRlPVBFUlNJU1QsIGZldGNoPUxBWlkpCiAgICAgcHJpdmF0ZSBTaW1wbGVSZWxhdGVkIHJlbGF0ZWQ7Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5KFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZUVudGl0eSgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZVJlbGF0ZWQgZ2V0UmVsYXRlZCgpIHsKICAgICAgICAgcmV0dXJuIHJlbGF0ZWQ7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldFJlbGF0ZWQoU2ltcGxlUmVsYXRlZCByZWxhdGVkKSB7CiAgICAgICAgIHRoaXMucmVsYXRlZCA9IHJlbGF0ZWQ7CiAgICAgfQotICAgIAotICAgIAorCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9kYXRhc291cmNlZGVmL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZGF0YXNvdXJjZWRlZi9lamIvU2ltcGxlUmVsYXRlZC5qYXZhCmluZGV4IDlhYmY5OGYuLjYxYzQ0OTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9kYXRhc291cmNlZGVmL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2RhdGFzb3VyY2VkZWYvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YQpAQCAtMjcsMzQgKzI3LDM0IEBACiAKIEBFbnRpdHkKIHB1YmxpYyBjbGFzcyBTaW1wbGVSZWxhdGVkIHsKLSAgICAKLSAgICBASWQgCisKKyAgICBASWQKICAgICBAR2VuZXJhdGVkVmFsdWUKICAgICBwcml2YXRlIGludCBpZDsKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwogCiAgICAgQE9uZVRvT25lKGZldGNoPUxBWlkpCiAgICAgcHJpdmF0ZSBTaW1wbGVFbnRpdHkgZW50aXR5OwotICAgIAorCiAgICAgcHVibGljIFNpbXBsZVJlbGF0ZWQoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlUmVsYXRlZCgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZUVudGl0eSBnZXRFbnRpdHkoKSB7CiAgICAgICAgIHJldHVybiBlbnRpdHk7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eShTaW1wbGVFbnRpdHkgZW50aXR5KSB7CiAgICAgICAgIHRoaXMuZW50aXR5ID0gZW50aXR5OwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VqYmFuZHdhci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VqYmFuZHdhci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQ0YmIzMWEuLjQyNjE3Y2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJhbmR3YXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZWpiYW5kd2FyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDExICsxNSwxMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWVtYmVkZGVkLWVqYndhbmR3YXIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS13ZWIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS13ZWIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJwZXJzaXN0ZW5jZS54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJhbmR3YXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VqYmFuZHdhci9idWlsZC54bWwKaW5kZXggMDRkOGEzZi4uNjY4YTA0ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VqYmFuZHdhci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VqYmFuZHdhci9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTg0LDE1ICs4NCwxNSBAQAogICAgICAgICA8L2RlbGV0ZT4KIAogICAgICAgICA8bW92ZSBmaWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiIHRvZmlsZT0iJHthc3NlbWJsZS5kaXJ9L3RtcCIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3dhciIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9kaXIiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3dhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1vdGhlci5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1wdS5qYXI6JHtlbWJlZGRlZC5jbGFzc3BhdGh9OiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CkBAIC0xMDMsNyArMTAzLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9kaXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0vb3RoZXIiLz4KICAgICAgICA8dW56aXAgc3JjPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1vdGhlci5qYXIiIGRlc3Q9IiR7YXNzZW1ibGUuZGlyfS9vdGhlciIvPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Fzc2VtYmxlLmRpcn0vdG1wOiR7YXNzZW1ibGUuZGlyfS9vdGhlcjoke2VtYmVkZGVkLmNsYXNzcGF0aH06JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJhbmR3YXIvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VqYmFuZHdhci9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggYjYyMDM5NS4uNDdkOWExNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VqYmFuZHdhci9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VqYmFuZHdhci9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTE5LDYgKzE5LDYgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCIKLSAgICAgIHZlcnNpb249IjMuMCI+IAorICAgICAgdmVyc2lvbj0iMy4wIj4KICAgPG1vZHVsZS1uYW1lPnNhbXBsZTwvbW9kdWxlLW5hbWU+CiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZWpiYW5kd2FyL2VqYi9TaW1wbGVFbnRpdHkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJhbmR3YXIvZWpiL1NpbXBsZUVudGl0eS5qYXZhCmluZGV4IGIyYmQyNTAuLjI4NWQ4MzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJhbmR3YXIvZWpiL1NpbXBsZUVudGl0eS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJhbmR3YXIvZWpiL1NpbXBsZUVudGl0eS5qYXZhCkBAIC0zMSw4ICszMSw4IEBACiAgICAgQE5hbWVkUXVlcnkobmFtZSA9ICJTaW1wbGVFbnRpdHkuZmluZEFsbCIsIHF1ZXJ5ID0gInNlbGVjdCBlIGZyb20gU2ltcGxlRW50aXR5IGUiKQogfSkKIHB1YmxpYyBjbGFzcyBTaW1wbGVFbnRpdHkgewotICAgIAotICAgIEBJZCAKKworICAgIEBJZAogICAgIEBHZW5lcmF0ZWRWYWx1ZQogICAgIHByaXZhdGUgaW50IGlkOwogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CkBAIC00MCwxNSArNDAsMTUgQEAKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5KFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZUVudGl0eSgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZWpiaW53YXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJpbndhci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDVhYTEzNjUuLmI1ZDFhNjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJpbndhci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJpbndhci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMSArMTUsMTEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMS1lbWJlZGRlZC1lamJ3aW53YXIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS13ZWIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS13ZWIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJwZXJzaXN0ZW5jZS54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJpbndhci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZWpiaW53YXIvYnVpbGQueG1sCmluZGV4IDBmMzVjZmQuLjg4ODM1NzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJpbndhci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VqYmlud2FyL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNzUsMTUgKzc1LDE1IEBACiAgICAgICAgIDwvZGVsZXRlPgogCiAgICAgICAgIDxtb3ZlIGZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcCIgdG9maWxlPSIke2Fzc2VtYmxlLmRpcn0vdG1wIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fd2FyIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX2RpciIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fd2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tcHUuamFyOiR7ZW1iZWRkZWQuY2xhc3NwYXRofToke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtOTMsNyArOTMsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJydW5fd2FyX2luc3RhbGxlZF9pbnN0YW5jZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9InN0YXJ0LWRhdGFiYXNlIi8+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tcHUuamFyOiR7ZW1iZWRkZWQuY2xhc3NwYXRofToke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtMTE0LDcgKzExNCw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9kaXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHthc3NlbWJsZS5kaXJ9L3RtcDoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1wdS5qYXI6JHtlbWJlZGRlZC5jbGFzc3BhdGh9OiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZWpiaW53YXIvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VqYmlud2FyL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBiNjIwMzk1Li40N2Q5YTE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZWpiaW53YXIvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJpbndhci9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTE5LDYgKzE5LDYgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCIKLSAgICAgIHZlcnNpb249IjMuMCI+IAorICAgICAgdmVyc2lvbj0iMy4wIj4KICAgPG1vZHVsZS1uYW1lPnNhbXBsZTwvbW9kdWxlLW5hbWU+CiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZWpiaW53YXIvZWpiL1NpbXBsZUVudGl0eS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VqYmlud2FyL2VqYi9TaW1wbGVFbnRpdHkuamF2YQppbmRleCBiMmJkMjUwLi4yODVkODMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZWpiaW53YXIvZWpiL1NpbXBsZUVudGl0eS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJpbndhci9lamIvU2ltcGxlRW50aXR5LmphdmEKQEAgLTMxLDggKzMxLDggQEAKICAgICBATmFtZWRRdWVyeShuYW1lID0gIlNpbXBsZUVudGl0eS5maW5kQWxsIiwgcXVlcnkgPSAic2VsZWN0IGUgZnJvbSBTaW1wbGVFbnRpdHkgZSIpCiB9KQogcHVibGljIGNsYXNzIFNpbXBsZUVudGl0eSB7Ci0gICAgCi0gICAgQElkIAorCisgICAgQElkCiAgICAgQEdlbmVyYXRlZFZhbHVlCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKQEAgLTQwLDE1ICs0MCwxNSBAQAogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5KCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lbWJlZGFzeW5jL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZW1iZWRhc3luYy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDAyMDg5ZWUuLjIyNmVmMGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lbWJlZGFzeW5jL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VtYmVkYXN5bmMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZnVsbC1lbWJlZGFzeW5jIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZW1iZWRhc3luYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZW1iZWRhc3luYy9idWlsZC54bWwKaW5kZXggOGZhOTVkOC4uOGM5NTEyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VtYmVkYXN5bmMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lbWJlZGFzeW5jL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTAgKzQ2LDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgotCTxjb3B5IGZpbGU9ImRlc2NyaXB0b3IvYmVhbnMueG1sIiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KLQk8IS0tCi0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3IvYmVhbnMueG1sIiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgICA8IS0tCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi8qLmNsYXNzIj4KICAgICAgICAgPC9qYXI+CkBAIC01NywxNSArNTcsMTUgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIHdpdGggJHtlbWJlZGRlZC5jbGFzc3BhdGh9IGluIGNsYXNzcGF0aCIvPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2VtYmVkZGVkLmNsYXNzcGF0aH06JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lbWJlZGFzeW5jL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lbWJlZGFzeW5jL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBjZGIwZDI5Li5kMGE0NGQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZW1iZWRhc3luYy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VtYmVkYXN5bmMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC01MCw0NiArNTAsNDYgQEAKICAgICAgICAgLy8gb2sgbm93IGxldCdzIGxvb2sgdXAgdGhlIEVKQi4uLgogICAgICAgICBDb250ZXh0IGljID0gYy5nZXRDb250ZXh0KCk7CiAgICAgICAgIHRyeSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2xlZXBpbmcgZm9yIGEgc2Vjb25kLi4uIik7Ci0JICAgIFRocmVhZC5zbGVlcCgxMDAwKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTbGVlcGluZyBmb3IgYSBzZWNvbmQuLi4iKTsKKyAgICAgICAgVGhyZWFkLnNsZWVwKDEwMDApOwogCi0JICAgIFNpbmdsZXRvbkJlYW4gc2IgPSAoU2luZ2xldG9uQmVhbikgaWMuCi0JCWxvb2t1cCgiamF2YTpnbG9iYWwvY2xhc3Nlcy9TaW5nbGV0b25CZWFuIWNvbS5hY21lLlNpbmdsZXRvbkJlYW4iKTsKLQkgICAgc2IuaGVsbG8oKTsKKyAgICAgICAgU2luZ2xldG9uQmVhbiBzYiA9IChTaW5nbGV0b25CZWFuKSBpYy4KKyAgICAgICAgbG9va3VwKCJqYXZhOmdsb2JhbC9jbGFzc2VzL1NpbmdsZXRvbkJlYW4hY29tLmFjbWUuU2luZ2xldG9uQmVhbiIpOworICAgICAgICBzYi5oZWxsbygpOwogCi0JICAgIFN0YXRlZnVsQmVhbiBzZlRpbWVvdXQgPSAoU3RhdGVmdWxCZWFuKSBpYy4KLQkJbG9va3VwKCJqYXZhOmdsb2JhbC9jbGFzc2VzL1N0YXRlZnVsQmVhbiIpOwotCSAgICBTdGF0ZWZ1bEJlYW4yIHNmTm9UaW1lb3V0ID0gKFN0YXRlZnVsQmVhbjIpIGljLgotCQlsb29rdXAoImphdmE6Z2xvYmFsL2NsYXNzZXMvU3RhdGVmdWxCZWFuMiIpOwotCSAgICBzZlRpbWVvdXQuaGVsbG8oKTsKLQkgICAgc2ZOb1RpbWVvdXQuaGVsbG8oKTsKKyAgICAgICAgU3RhdGVmdWxCZWFuIHNmVGltZW91dCA9IChTdGF0ZWZ1bEJlYW4pIGljLgorICAgICAgICBsb29rdXAoImphdmE6Z2xvYmFsL2NsYXNzZXMvU3RhdGVmdWxCZWFuIik7CisgICAgICAgIFN0YXRlZnVsQmVhbjIgc2ZOb1RpbWVvdXQgPSAoU3RhdGVmdWxCZWFuMikgaWMuCisgICAgICAgIGxvb2t1cCgiamF2YTpnbG9iYWwvY2xhc3Nlcy9TdGF0ZWZ1bEJlYW4yIik7CisgICAgICAgIHNmVGltZW91dC5oZWxsbygpOworICAgICAgICBzZk5vVGltZW91dC5oZWxsbygpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2xlZXBpbmcgdG8gd2FpdCBmb3Igc2YgYmVhbiB0byBiZSByZW1vdmVkIC4uLiIpOwotCSAgICBUaHJlYWQuc2xlZXAoNzAwMCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FraW5nIHVwICwgY2hlY2tpbmcgc2YgYmVhbiBleGlzdGVuY2UiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTbGVlcGluZyB0byB3YWl0IGZvciBzZiBiZWFuIHRvIGJlIHJlbW92ZWQgLi4uIik7CisgICAgICAgIFRocmVhZC5zbGVlcCg3MDAwKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWtpbmcgdXAgLCBjaGVja2luZyBzZiBiZWFuIGV4aXN0ZW5jZSIpOwogCi0JICAgIHRyeSB7Ci0JCXNmVGltZW91dC5oZWxsbygpOwotCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiU3RhdGVmdWxUaW1lb3V0KDApIGJlYW4gc2hvdWxkIGhhdmUgdGltZWQgb3V0Iik7Ci0JICAgIH0gY2F0Y2goRUpCRXhjZXB0aW9uIGUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZWZ1bCBiZWFuIHN1Y2Nlc3NmdWxseSB0aW1lZCBvdXQiKTsKLQkgICAgfQorICAgICAgICB0cnkgeworICAgICAgICBzZlRpbWVvdXQuaGVsbG8oKTsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlN0YXRlZnVsVGltZW91dCgwKSBiZWFuIHNob3VsZCBoYXZlIHRpbWVkIG91dCIpOworICAgICAgICB9IGNhdGNoKEVKQkV4Y2VwdGlvbiBlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVmdWwgYmVhbiBzdWNjZXNzZnVsbHkgdGltZWQgb3V0Iik7CisgICAgICAgIH0KIAotCSAgICBzZk5vVGltZW91dC5oZWxsbygpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlZnVsIGJlYW4gd2l0aCBsb25nZXIgdGltZW91dCBpcyBzdGlsbCBhcm91bmQiKTsKKyAgICAgICAgc2ZOb1RpbWVvdXQuaGVsbG8oKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZWZ1bCBiZWFuIHdpdGggbG9uZ2VyIHRpbWVvdXQgaXMgc3RpbGwgYXJvdW5kIik7CiAKLQkgICAgLyoqCi0JICAgIEhlbGxvUmVtb3RlIGhyID0gKEhlbGxvUmVtb3RlKSBpYy4KLQkJbG9va3VwKCJqYXZhOmdsb2JhbC9jbGFzc2VzL1NpbmdsZXRvbkJlYW4hY29tLmFjbWUuSGVsbG9SZW1vdGUiKTsKLQkgICAgaHIuaGVsbG8oKTsKLQkgICAgKi8KKyAgICAgICAgLyoqCisgICAgICAgIEhlbGxvUmVtb3RlIGhyID0gKEhlbGxvUmVtb3RlKSBpYy4KKyAgICAgICAgbG9va3VwKCJqYXZhOmdsb2JhbC9jbGFzc2VzL1NpbmdsZXRvbkJlYW4hY29tLmFjbWUuSGVsbG9SZW1vdGUiKTsKKyAgICAgICAgaHIuaGVsbG8oKTsKKyAgICAgICAgKi8KIAotCSAgICBpZiggc2IuZ2V0UGFzc2VkKCkgKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiZ2V0UGFzc2VkKCkgcmV0dXJuZWQgdHJ1ZSIpOwotCQlzdGF0LmFkZFN0YXR1cygiZW1iZWRkZWQgYXN5bmMgdGVzdCIsIHN0YXQuUEFTUyk7Ci0JICAgIH0gZWxzZSB7Ci0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oImdldFBhc3NlZCgpIHJldHVybmVkIGZhbHNlIik7Ci0JICAgIH0KKyAgICAgICAgaWYoIHNiLmdldFBhc3NlZCgpICkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdldFBhc3NlZCgpIHJldHVybmVkIHRydWUiKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVtYmVkZGVkIGFzeW5jIHRlc3QiLCBzdGF0LlBBU1MpOworICAgICAgICB9IGVsc2UgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJnZXRQYXNzZWQoKSByZXR1cm5lZCBmYWxzZSIpOworICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZW1iZWRkZWQgYXN5bmMgdGVzdCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SIGNhbGxpbmcgRUpCOiIpOwpAQCAtOTcsOCArOTcsOCBAQAogICAgICAgICB9CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbG9zaW5nIGNvbnRhaW5lciIpOwotCQotCWMuY2xvc2UoKTsKKworICAgIGMuY2xvc2UoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb25lIENsb3NpbmcgY29udGFpbmVyIik7CiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZW1iZWRhc3luYy9lamIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VtYmVkYXN5bmMvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQppbmRleCAxYWQ0MTRmLi42MDZlMjVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZW1iZWRhc3luYy9lamIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lbWJlZGFzeW5jL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTM5LDM2ICszOSwzNiBAQAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjppbml0KCkiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlRocmVhZCA9ICIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpKTsKLQltZS5mb29Bc3luYygpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhyZWFkID0gIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOworICAgIG1lLmZvb0FzeW5jKCk7CiAKLQl0cnkgewotCQlCZWFuTWFuYWdlciBiZWFuTWdyID0gKEJlYW5NYW5hZ2VyKQotCQkgICAgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvQmVhbk1hbmFnZXIiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgYmVhbiBtYW5hZ2VyICIgKwotCQkJICAgYmVhbk1nciArICIgZm9yIEpDREkgZW5hYmxlZCBhcHAiKTsKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JfQotCQorICAgIHRyeSB7CisgICAgICAgIEJlYW5NYW5hZ2VyIGJlYW5NZ3IgPSAoQmVhbk1hbmFnZXIpCisgICAgICAgICAgICBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Y29tcC9CZWFuTWFuYWdlciIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCBiZWFuIG1hbmFnZXIgIiArCisgICAgICAgICAgICAgICBiZWFuTWdyICsgIiBmb3IgSkNESSBlbmFibGVkIGFwcCIpOworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKKyAgICB9CisKIAogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpoZWxsbygpIik7Ci0JcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aGVsbG8oKSIpOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKICAgICB9CiAKICAgICBAQXN5bmNocm9ub3VzCiAgICAgcHVibGljIHZvaWQgZm9vQXN5bmMoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpmb29Bc3luYygpIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJUaHJlYWQgPSAiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7Ci0JZ290QXN5bmNDYWxsID0gdHJ1ZTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmZvb0FzeW5jKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRocmVhZCA9ICIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpKTsKKyAgICBnb3RBc3luY0NhbGwgPSB0cnVlOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGdldFBhc3NlZCgpIHsKLQlyZXR1cm4gZ290QXN5bmNDYWxsOworICAgIHJldHVybiBnb3RBc3luY0NhbGw7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lbWJlZGFzeW5jL2VqYi9TdGF0ZWZ1bEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lbWJlZGFzeW5jL2VqYi9TdGF0ZWZ1bEJlYW4uamF2YQppbmRleCA5ODU1MGRiLi4zNDU2OGQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZW1iZWRhc3luYy9lamIvU3RhdGVmdWxCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VtYmVkYXN5bmMvZWpiL1N0YXRlZnVsQmVhbi5qYXZhCkBAIC0yNiw4ICsyNiw4IEBACiBwdWJsaWMgY2xhc3MgU3RhdGVmdWxCZWFuIHsKIAogICAgIEBJbmplY3QKLQlwdWJsaWMgU3RhdGVmdWxCZWFuKFNpbmdsZXRvbkJlYW4gc2luZykgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuIGN0b3Igc2luZyA9ICIgKyBzaW5nKTsKKyAgICBwdWJsaWMgU3RhdGVmdWxCZWFuKFNpbmdsZXRvbkJlYW4gc2luZykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuIGN0b3Igc2luZyA9ICIgKyBzaW5nKTsKICAgICB9CiAKICAgICBAUG9zdENvbnN0cnVjdApAQCAtMzYsNyArMzYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuOjpoZWxsbygpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW46OmhlbGxvKCkiKTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VtYmVkYXN5bmMvZWpiL1N0YXRlZnVsQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lbWJlZGFzeW5jL2VqYi9TdGF0ZWZ1bEJlYW4yLmphdmEKaW5kZXggYWUyNzY3Zi4uYzFhMmZkOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VtYmVkYXN5bmMvZWpiL1N0YXRlZnVsQmVhbjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZW1iZWRhc3luYy9lamIvU3RhdGVmdWxCZWFuMi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW4yOjpoZWxsbygpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW4yOjpoZWxsbygpIik7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lbWJlZGRlZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZW1iZWRkZWQueG1sCmluZGV4IDVjNWYyYWEuLjQ4ZDc3NWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lbWJlZGRlZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VtYmVkZGVkLnhtbApAQCAtMjcsNyArMjcsNyBAQAogCiA8Y29uZGl0aW9uIHByb3BlcnR5PSJ1YmVyLmphciIgdmFsdWU9IiR7dWJlci5qYXIucmVwb30vcmVwb3NpdG9yeS9vcmcvZ2xhc3NmaXNoL2V4dHJhcy9nbGFzc2Zpc2gtZW1iZWRkZWQtYWxsLzMuMS1TTkFQU0hPVC9nbGFzc2Zpc2gtZW1iZWRkZWQtYWxsLTMuMS1TTkFQU0hPVC5qYXIiPgogICAgIDxhbmQ+Ci0gIAk8aXNzZXQgcHJvcGVydHk9InViZXIubW9kZSIvPgorICAgICAgPGlzc2V0IHByb3BlcnR5PSJ1YmVyLm1vZGUiLz4KICAgICAgICAgPG5vdD4KICAgICAgICAgICA8aXNzZXQgcHJvcGVydHk9InViZXIuamFyIi8+CiAgICAgICAgIDwvbm90PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2pheHJzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvamF4cnMvYnVpbGQucHJvcGVydGllcwppbmRleCAxMjU3ZmU0Li4wMWQxMGMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvamF4cnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvamF4cnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTEgKzE1LDExIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZW1iZWRkZWQtamF4cnMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS13ZWIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS13ZWIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJwZXJzaXN0ZW5jZS54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9qYXhycy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvamF4cnMvYnVpbGQueG1sCmluZGV4IDk0ZjQ5Y2IuLjgzMmFlZmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9qYXhycy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2pheHJzL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS11dGlsIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgpAQCAtNzUsMjUgKzc1LDI1IEBACiAgICAgICAgIDwvZGVsZXRlPgogCiAgICAgICAgIDxtb3ZlIGZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcCIgdG9maWxlPSIke2Fzc2VtYmxlLmRpcn0vdG1wIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fZWpiIi8+CiA8IS0tIERvZXNuJ3Qgd29yawogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9yZXN0Ii8+CiAtLT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX2VqYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl93YXJfZWpiIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX2Rpcl9lamIiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3Jlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fd2FyX3Jlc3QiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fZGlyX3Jlc3QiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3dhcl9lamIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fdGVzdCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdC1wYXRoIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icGFja2FnaW5nIiB2YWx1ZT0id2FyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3dhcl9yZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3Rlc3QiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3QtcGF0aCIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InBhY2thZ2luZyIgdmFsdWU9IndhciIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9kaXJfZWpiIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3Rlc3QiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3QtcGF0aCIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS90bXAiLz4KQEAgLTExNyw3ICsxMTcsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InBhY2thZ2luZyIgdmFsdWU9ImRpciIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9kaXJfcmVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl90ZXN0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0LXBhdGgiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vdG1wIi8+CkBAIC0xMjUsOSArMTI1LDkgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJwYWNrYWdpbmciIHZhbHVlPSJkaXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fdGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke3Rlc3QtcGF0aH06JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tcHUuamFyOiR7ZW1iZWRkZWQuY2xhc3NwYXRofToke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2pheHJzL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9qYXhycy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZWU1ZTA5NS4uYWY3MzkxYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2pheHJzL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvamF4cnMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAKKyAgICAgICAgfQogICAgICAgICBzdGF0LmFkZFN0YXR1cygiRUpCIGVtYmVkZGVkICIgKyBhcHBOYW1lICsgIiBFSkIiLCAocGFzcyk/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLi4uLi4uLi4uLkZJTklTSEVEIHRlc3QiKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvamF4cnMvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2pheHJzL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBhZThhOGExLi4xNjJiYjBlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvamF4cnMvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9qYXhycy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCIKLSAgICAgIHZlcnNpb249IjMuMCI+IAorICAgICAgdmVyc2lvbj0iMy4wIj4KICAgPG1vZHVsZS1uYW1lPnNhbXBsZTwvbW9kdWxlLW5hbWU+CiAgIDxzZXJ2bGV0PgogICAgIDxzZXJ2bGV0LW5hbWU+amFrYXJ0YS53cy5ycy5jb3JlLkFwcGxpY2F0aW9uPC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvamF4cnMvZWpiL1NpbXBsZUVudGl0eS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2pheHJzL2VqYi9TaW1wbGVFbnRpdHkuamF2YQppbmRleCBiMmJkMjUwLi4yODVkODMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvamF4cnMvZWpiL1NpbXBsZUVudGl0eS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9qYXhycy9lamIvU2ltcGxlRW50aXR5LmphdmEKQEAgLTMxLDggKzMxLDggQEAKICAgICBATmFtZWRRdWVyeShuYW1lID0gIlNpbXBsZUVudGl0eS5maW5kQWxsIiwgcXVlcnkgPSAic2VsZWN0IGUgZnJvbSBTaW1wbGVFbnRpdHkgZSIpCiB9KQogcHVibGljIGNsYXNzIFNpbXBsZUVudGl0eSB7Ci0gICAgCi0gICAgQElkIAorCisgICAgQElkCiAgICAgQEdlbmVyYXRlZFZhbHVlCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKQEAgLTQwLDE1ICs0MCwxNSBAQAogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5KCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tYW5pZmVzdG9ubHkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tYW5pZmVzdG9ubHkvYnVpbGQucHJvcGVydGllcwppbmRleCA5NmZjMTgxLi5lMTY4NTA1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbWFuaWZlc3Rvbmx5L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21hbmlmZXN0b25seS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMS1lbWJlZGRlZC1tYW5pZmVzdG9ubHkiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tYW5pZmVzdG9ubHkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21hbmlmZXN0b25seS9idWlsZC54bWwKaW5kZXggNGNlNWE4Mi4uM2E3NmRjMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21hbmlmZXN0b25seS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21hbmlmZXN0b25seS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ5LDI0ICs0OSwyNCBAQAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8IS0tIHBhY2thZ2Ugb3Vyc2VsdmVzIHRvIGluY2x1ZGUgcGVyc2lzdGVuY2UueG1sIC0tPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1wdS5qYXIiIAotICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1wdS5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovU2ltcGxlRW50aXR5LmNsYXNzLCoqL1NpbXBsZVJlbGF0ZWQuY2xhc3MiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iZGVzY3JpcHRvciI+CiAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJwZXJzaXN0ZW5jZS54bWwiLz4KLSAgICAgICAgICAgICA8L21ldGFpbmY+IAorICAgICAgICAgICAgIDwvbWV0YWluZj4KICAgICAgICAgPC9qYXI+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovKkVqYi5jbGFzcywqKi8qQmVhbi5jbGFzcyI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZGlyPSJkZXNjcmlwdG9yIj4KICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImVqYi1qYXIueG1sIi8+Ci0gICAgICAgICAgICAgPC9tZXRhaW5mPiAKKyAgICAgICAgICAgICA8L21ldGFpbmY+CiAgICAgICAgIDwvamFyPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiIAotICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIgorICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIKICAgICAgICAgICAgICBpbmNsdWRlcyA9IioqLypDbGllbnQuY2xhc3MiPgogICAgICAgICA8L2phcj4KQEAgLTc1LDE1ICs3NSwxNSBAQAogICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9IkNsYXNzLVBhdGgiIHZhbHVlPSJmaWxlOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIgZmlsZToke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIGZpbGU6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KICAgICAgICAgICAgICA8L21hbmlmZXN0PgogICAgICAgICA8L2phcj4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIHdpdGggJHtlbWJlZGRlZC5jbGFzc3BhdGh9IGluIGNsYXNzcGF0aCIvPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1hbGwuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXB1Lmphcjoke2VtYmVkZGVkLmNsYXNzcGF0aH0iCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tYW5pZmVzdG9ubHkvZWpiL1NpbXBsZUVudGl0eS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21hbmlmZXN0b25seS9lamIvU2ltcGxlRW50aXR5LmphdmEKaW5kZXggOTU5YjU1Ni4uMDY4OWJlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21hbmlmZXN0b25seS9lamIvU2ltcGxlRW50aXR5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21hbmlmZXN0b25seS9lamIvU2ltcGxlRW50aXR5LmphdmEKQEAgLTMxLDM1ICszMSwzNSBAQAogICAgIEBOYW1lZFF1ZXJ5KG5hbWUgPSAiU2ltcGxlRW50aXR5LmZpbmRBbGwiLCBxdWVyeSA9ICJzZWxlY3QgZSBmcm9tIFNpbXBsZUVudGl0eSBlIikKIH0pCiBwdWJsaWMgY2xhc3MgU2ltcGxlRW50aXR5IHsKLSAgICAKLSAgICBASWQgCisKKyAgICBASWQKICAgICBAR2VuZXJhdGVkVmFsdWUKICAgICBwcml2YXRlIGludCBpZDsKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwogCiAgICAgQE9uZVRvT25lKGNhc2NhZGU9UEVSU0lTVCwgZmV0Y2g9TEFaWSkKICAgICBwcml2YXRlIFNpbXBsZVJlbGF0ZWQgcmVsYXRlZDsKLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5KCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlUmVsYXRlZCBnZXRSZWxhdGVkKCkgewogICAgICAgICByZXR1cm4gcmVsYXRlZDsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0UmVsYXRlZChTaW1wbGVSZWxhdGVkIHJlbGF0ZWQpIHsKICAgICAgICAgdGhpcy5yZWxhdGVkID0gcmVsYXRlZDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21hbmlmZXN0b25seS9lamIvU2ltcGxlUmVsYXRlZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21hbmlmZXN0b25seS9lamIvU2ltcGxlUmVsYXRlZC5qYXZhCmluZGV4IDlhYmY5OGYuLjYxYzQ0OTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tYW5pZmVzdG9ubHkvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbWFuaWZlc3Rvbmx5L2VqYi9TaW1wbGVSZWxhdGVkLmphdmEKQEAgLTI3LDM0ICsyNywzNCBAQAogCiBARW50aXR5CiBwdWJsaWMgY2xhc3MgU2ltcGxlUmVsYXRlZCB7Ci0gICAgCi0gICAgQElkIAorCisgICAgQElkCiAgICAgQEdlbmVyYXRlZFZhbHVlCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKIAogICAgIEBPbmVUb09uZShmZXRjaD1MQVpZKQogICAgIHByaXZhdGUgU2ltcGxlRW50aXR5IGVudGl0eTsKLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVSZWxhdGVkKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZVJlbGF0ZWQoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkgZ2V0RW50aXR5KCkgewogICAgICAgICByZXR1cm4gZW50aXR5OwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHkoU2ltcGxlRW50aXR5IGVudGl0eSkgewogICAgICAgICB0aGlzLmVudGl0eSA9IGVudGl0eTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tYW5pZmVzdG9ubHkvZWpiL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tYW5pZmVzdG9ubHkvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQppbmRleCBjYTI3ODRmLi5jOTIzNjE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbWFuaWZlc3Rvbmx5L2VqYi9TaW5nbGV0b25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21hbmlmZXN0b25seS9lamIvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC0xNywxNCArMTcsMTQgQEAKIHBhY2thZ2Ugb3JnLmdsYXNzZmlzaC50ZXN0cy5lamIuc2FtcGxlOwogCiBpbXBvcnQgamFrYXJ0YS5lamIuU2luZ2xldG9uOwotaW1wb3J0IGpha2FydGEuZWpiLlN0YXJ0dXA7IAoraW1wb3J0IGpha2FydGEuZWpiLlN0YXJ0dXA7CiBpbXBvcnQgamFrYXJ0YS5hbm5vdGF0aW9uLlByZURlc3Ryb3k7CiBpbXBvcnQgamFrYXJ0YS5hbm5vdGF0aW9uLlBvc3RDb25zdHJ1Y3Q7CiAKIC8qKgogICogQGF1dGhvciBNYXJpbmEgVmF0a2luYQogICovCi1AU2luZ2xldG9uIAorQFNpbmdsZXRvbgogQFN0YXJ0dXAKIHB1YmxpYyBjbGFzcyBTaW5nbGV0b25CZWFuIHsKIApAQCAtMzIsNyArMzIsNyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImRzID0gIiArIGRzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRzID0gIiArIGRzKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGZvbygpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tZGIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tZGIvYnVpbGQucHJvcGVydGllcwppbmRleCAwMDQ5MGQ5Li5jMGQxMGQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbWRiL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21kYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMS1lbWJlZGRlZC1tZGIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tZGIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21kYi9idWlsZC54bWwKaW5kZXggOWQ4MDlhZS4uYjM5NjM1ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21kYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21kYi9idWlsZC54bWwKQEAgLTM4LDcgKzM4LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUxLDE0ICs1MSwxNCBAQAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8IS0tIHBhY2thZ2Ugb3Vyc2VsdmVzIHRvIGluY2x1ZGUgcGVyc2lzdGVuY2UueG1sIC0tPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi9TKi5jbGFzcyI+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vb3JnIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSIuLi5TdGFydGluZyBEQVMgdG8gY3JlYXRlIEpNUyByZXNvdXJjZXMuLi4uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnREb21haW4iLz4KQEAgLTkxLDggKzkxLDggQEAKIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0b3BEb21haW4iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iRG9tYWluIGhhcyBiZWVkIFNUT1BQRUQgdG8gcnVuIHRoZSB0ZXN0Ii8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9Ii4uLlN0YXJ0aW5nIERBUyB0byBkZWxldGUgSk1TIHJlc291cmNlcy4uLi4iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydERvbWFpbiIvPgpAQCAtMTIwLDE1ICsxMjAsMTUgQEAKICAgICAgICAgPCEtLSBTaG91bGQgZG9tYWluIGJlIHN0b3BwZWQ/IC0tPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0b3BEb21haW4iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iRG9tYWluIGhhcyBiZWVkIFNUT1BQRUQiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIHdpdGggJHtlbWJlZGRlZC5jbGFzc3BhdGh9IGluIGNsYXNzcGF0aCIvPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyOiR7ZW1iZWRkZWQuY2xhc3NwYXRofToke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhhcHBuYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGFwcG5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCBkODFjNDFhLi4yNDY0YTNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGFwcG5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGFwcG5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZW1iZWRkZWQtbW9kdWxld2l0aGFwcG5hbWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRoYXBwbmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGFwcG5hbWUvYnVpbGQueG1sCmluZGV4IDNkNTViOTcuLmU0NDhlNjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRoYXBwbmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhhcHBuYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS11dGlsIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgpAQCAtNTAsMzEgKzUwLDMxIEBACiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDwhLS0gcGFja2FnZSBvdXJzZWx2ZXMgdG8gaW5jbHVkZSBwZXJzaXN0ZW5jZS54bWwgLS0+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiIAotICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIgorICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIKICAgICAgICAgICAgICBpbmNsdWRlcyA9IioqLypFamIuY2xhc3MsKiovKkJlYW4uY2xhc3MiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iZGVzY3JpcHRvciI+CiAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJlamItamFyLnhtbCIvPgotICAgICAgICAgICAgIDwvbWV0YWluZj4gCisgICAgICAgICAgICAgPC9tZXRhaW5mPgogICAgICAgICA8L2phcj4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1wdS5qYXIiIAotICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1wdS5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovU2ltcGxlRW50aXR5LmNsYXNzLCoqL1NpbXBsZVJlbGF0ZWQuY2xhc3MiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iZGVzY3JpcHRvciI+CiAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJwZXJzaXN0ZW5jZS54bWwiLz4KLSAgICAgICAgICAgICA8L21ldGFpbmY+IAorICAgICAgICAgICAgIDwvbWV0YWluZj4KICAgICAgICAgPC9qYXI+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyB3aXRoICR7ZW1iZWRkZWQuY2xhc3NwYXRofSBpbiBjbGFzc3BhdGgiLz4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1wdS5qYXI6JHtlbWJlZGRlZC5jbGFzc3BhdGh9OiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGFwcG5hbWUvZWpiL1NpbXBsZUVudGl0eS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhhcHBuYW1lL2VqYi9TaW1wbGVFbnRpdHkuamF2YQppbmRleCA5NTliNTU2Li4wNjg5YmVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGFwcG5hbWUvZWpiL1NpbXBsZUVudGl0eS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRoYXBwbmFtZS9lamIvU2ltcGxlRW50aXR5LmphdmEKQEAgLTMxLDM1ICszMSwzNSBAQAogICAgIEBOYW1lZFF1ZXJ5KG5hbWUgPSAiU2ltcGxlRW50aXR5LmZpbmRBbGwiLCBxdWVyeSA9ICJzZWxlY3QgZSBmcm9tIFNpbXBsZUVudGl0eSBlIikKIH0pCiBwdWJsaWMgY2xhc3MgU2ltcGxlRW50aXR5IHsKLSAgICAKLSAgICBASWQgCisKKyAgICBASWQKICAgICBAR2VuZXJhdGVkVmFsdWUKICAgICBwcml2YXRlIGludCBpZDsKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwogCiAgICAgQE9uZVRvT25lKGNhc2NhZGU9UEVSU0lTVCwgZmV0Y2g9TEFaWSkKICAgICBwcml2YXRlIFNpbXBsZVJlbGF0ZWQgcmVsYXRlZDsKLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5KCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlUmVsYXRlZCBnZXRSZWxhdGVkKCkgewogICAgICAgICByZXR1cm4gcmVsYXRlZDsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0UmVsYXRlZChTaW1wbGVSZWxhdGVkIHJlbGF0ZWQpIHsKICAgICAgICAgdGhpcy5yZWxhdGVkID0gcmVsYXRlZDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhhcHBuYW1lL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGFwcG5hbWUvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YQppbmRleCA5YWJmOThmLi42MWM0NDk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGFwcG5hbWUvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGFwcG5hbWUvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YQpAQCAtMjcsMzQgKzI3LDM0IEBACiAKIEBFbnRpdHkKIHB1YmxpYyBjbGFzcyBTaW1wbGVSZWxhdGVkIHsKLSAgICAKLSAgICBASWQgCisKKyAgICBASWQKICAgICBAR2VuZXJhdGVkVmFsdWUKICAgICBwcml2YXRlIGludCBpZDsKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwogCiAgICAgQE9uZVRvT25lKGZldGNoPUxBWlkpCiAgICAgcHJpdmF0ZSBTaW1wbGVFbnRpdHkgZW50aXR5OwotICAgIAorCiAgICAgcHVibGljIFNpbXBsZVJlbGF0ZWQoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlUmVsYXRlZCgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZUVudGl0eSBnZXRFbnRpdHkoKSB7CiAgICAgICAgIHJldHVybiBlbnRpdHk7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eShTaW1wbGVFbnRpdHkgZW50aXR5KSB7CiAgICAgICAgIHRoaXMuZW50aXR5ID0gZW50aXR5OwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhhcHBuYW1lL2VqYi9TaW5nbGV0b25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGFwcG5hbWUvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQppbmRleCBjYTI3ODRmLi5jOTIzNjE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGFwcG5hbWUvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGFwcG5hbWUvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQpAQCAtMTcsMTQgKzE3LDE0IEBACiBwYWNrYWdlIG9yZy5nbGFzc2Zpc2gudGVzdHMuZWpiLnNhbXBsZTsKIAogaW1wb3J0IGpha2FydGEuZWpiLlNpbmdsZXRvbjsKLWltcG9ydCBqYWthcnRhLmVqYi5TdGFydHVwOyAKK2ltcG9ydCBqYWthcnRhLmVqYi5TdGFydHVwOwogaW1wb3J0IGpha2FydGEuYW5ub3RhdGlvbi5QcmVEZXN0cm95OwogaW1wb3J0IGpha2FydGEuYW5ub3RhdGlvbi5Qb3N0Q29uc3RydWN0OwogCiAvKioKICAqIEBhdXRob3IgTWFyaW5hIFZhdGtpbmEKICAqLwotQFNpbmdsZXRvbiAKK0BTaW5nbGV0b24KIEBTdGFydHVwCiBwdWJsaWMgY2xhc3MgU2luZ2xldG9uQmVhbiB7CiAKQEAgLTMyLDcgKzMyLDcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJkcyA9ICIgKyBkcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJkcyA9ICIgKyBkcyk7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBmb28oKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGluaGVyaXRhbmNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGluaGVyaXRhbmNlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWQ5YjQ5Zi4uNGEzNDg4ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhpbmhlcml0YW5jZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRoaW5oZXJpdGFuY2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZW1iZWRkZWQtbW9kdWxld2l0aGluaGVyaXRhbmNlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGluaGVyaXRhbmNlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRoaW5oZXJpdGFuY2UvYnVpbGQueG1sCmluZGV4IDRhZmU0YzcuLmQwYWE1YTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRoaW5oZXJpdGFuY2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRoaW5oZXJpdGFuY2UvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OSwzNiArNDksMzYgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPCEtLSBwYWNrYWdlIG91cnNlbHZlcyB0byBpbmNsdWRlIHBlcnNpc3RlbmNlLnhtbCAtLT4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovKkVqYi5jbGFzcywqKi8qQmVhbi5jbGFzcyI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZGlyPSJkZXNjcmlwdG9yIj4KICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImVqYi1qYXIueG1sIi8+Ci0gICAgICAgICAgICAgPC9tZXRhaW5mPiAKKyAgICAgICAgICAgICA8L21ldGFpbmY+CiAgICAgICAgIDwvamFyPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXB1LmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXB1LmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi9TaW1wbGVFbnRpdHkuY2xhc3MsKiovU2ltcGxlUmVsYXRlZC5jbGFzcyI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZGlyPSJkZXNjcmlwdG9yIj4KICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InBlcnNpc3RlbmNlLnhtbCIvPgotICAgICAgICAgICAgIDwvbWV0YWluZj4gCisgICAgICAgICAgICAgPC9tZXRhaW5mPgogICAgICAgICA8L2phcj4KICAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1iYXNlLmphciIKICAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi9TaW1wbGVCYXNlLmNsYXNzLCoqL1NpbXBsZUludGVyZmFjZS5jbGFzcyI+CiAgICAgICAgIDwvamFyPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgd2l0aCAke2VtYmVkZGVkLmNsYXNzcGF0aH0gaW4gY2xhc3NwYXRoIi8+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tcHUuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWJhc2UuamFyOiR7ZW1iZWRkZWQuY2xhc3NwYXRofToke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhpbmhlcml0YW5jZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGluaGVyaXRhbmNlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAzMDUzOGUzLi45ZDYzYzIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGluaGVyaXRhbmNlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGluaGVyaXRhbmNlL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJFSkIgZW1iZWRkZWQgY3JlYXRlIGNvbnRhaW5lciIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIGFub3RoZXIgY29udGFpbmVyIHdpdGhvdXQgY2xvc2luZyB0aGUgY3VycmVudC4uLiIpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChFSkJFeGNlcHRpb24gZSkgeyAKKyAgICAgICAgfSBjYXRjaCAoRUpCRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IGV4cGVjdGVkOiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkVKQiBlbWJlZGRlZCBjcmVhdGUgY29udGFpbmVyIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhpbmhlcml0YW5jZS9lamIvU2ltcGxlRW50aXR5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGluaGVyaXRhbmNlL2VqYi9TaW1wbGVFbnRpdHkuamF2YQppbmRleCA5NTliNTU2Li4wNjg5YmVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGluaGVyaXRhbmNlL2VqYi9TaW1wbGVFbnRpdHkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGluaGVyaXRhbmNlL2VqYi9TaW1wbGVFbnRpdHkuamF2YQpAQCAtMzEsMzUgKzMxLDM1IEBACiAgICAgQE5hbWVkUXVlcnkobmFtZSA9ICJTaW1wbGVFbnRpdHkuZmluZEFsbCIsIHF1ZXJ5ID0gInNlbGVjdCBlIGZyb20gU2ltcGxlRW50aXR5IGUiKQogfSkKIHB1YmxpYyBjbGFzcyBTaW1wbGVFbnRpdHkgewotICAgIAotICAgIEBJZCAKKworICAgIEBJZAogICAgIEBHZW5lcmF0ZWRWYWx1ZQogICAgIHByaXZhdGUgaW50IGlkOwogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CiAKICAgICBAT25lVG9PbmUoY2FzY2FkZT1QRVJTSVNULCBmZXRjaD1MQVpZKQogICAgIHByaXZhdGUgU2ltcGxlUmVsYXRlZCByZWxhdGVkOwotICAgIAorCiAgICAgcHVibGljIFNpbXBsZUVudGl0eShTdHJpbmcgbmFtZSkgewogICAgICAgICBzZXROYW1lKG5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVSZWxhdGVkIGdldFJlbGF0ZWQoKSB7CiAgICAgICAgIHJldHVybiByZWxhdGVkOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXRSZWxhdGVkKFNpbXBsZVJlbGF0ZWQgcmVsYXRlZCkgewogICAgICAgICB0aGlzLnJlbGF0ZWQgPSByZWxhdGVkOwogICAgIH0KLSAgICAKLSAgICAKKworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGluaGVyaXRhbmNlL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGluaGVyaXRhbmNlL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEKaW5kZXggOWFiZjk4Zi4uNjFjNDQ5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhpbmhlcml0YW5jZS9lamIvU2ltcGxlUmVsYXRlZC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRoaW5oZXJpdGFuY2UvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YQpAQCAtMjcsMzQgKzI3LDM0IEBACiAKIEBFbnRpdHkKIHB1YmxpYyBjbGFzcyBTaW1wbGVSZWxhdGVkIHsKLSAgICAKLSAgICBASWQgCisKKyAgICBASWQKICAgICBAR2VuZXJhdGVkVmFsdWUKICAgICBwcml2YXRlIGludCBpZDsKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwogCiAgICAgQE9uZVRvT25lKGZldGNoPUxBWlkpCiAgICAgcHJpdmF0ZSBTaW1wbGVFbnRpdHkgZW50aXR5OwotICAgIAorCiAgICAgcHVibGljIFNpbXBsZVJlbGF0ZWQoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlUmVsYXRlZCgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZUVudGl0eSBnZXRFbnRpdHkoKSB7CiAgICAgICAgIHJldHVybiBlbnRpdHk7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eShTaW1wbGVFbnRpdHkgZW50aXR5KSB7CiAgICAgICAgIHRoaXMuZW50aXR5ID0gZW50aXR5OwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhpbmhlcml0YW5jZS9lamIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhpbmhlcml0YW5jZS9lamIvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IGNhMjc4NGYuLmM5MjM2MTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRoaW5oZXJpdGFuY2UvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGluaGVyaXRhbmNlL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTE3LDE0ICsxNywxNCBAQAogcGFja2FnZSBvcmcuZ2xhc3NmaXNoLnRlc3RzLmVqYi5zYW1wbGU7CiAKIGltcG9ydCBqYWthcnRhLmVqYi5TaW5nbGV0b247Ci1pbXBvcnQgamFrYXJ0YS5lamIuU3RhcnR1cDsgCitpbXBvcnQgamFrYXJ0YS5lamIuU3RhcnR1cDsKIGltcG9ydCBqYWthcnRhLmFubm90YXRpb24uUHJlRGVzdHJveTsKIGltcG9ydCBqYWthcnRhLmFubm90YXRpb24uUG9zdENvbnN0cnVjdDsKIAogLyoqCiAgKiBAYXV0aG9yIE1hcmluYSBWYXRraW5hCiAgKi8KLUBTaW5nbGV0b24gCitAU2luZ2xldG9uCiBAU3RhcnR1cAogcHVibGljIGNsYXNzIFNpbmdsZXRvbkJlYW4gewogCkBAIC0zMiw3ICszMiw3IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiZHMgPSAiICsgZHMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZHMgPSAiICsgZHMpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZm9vKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhsaWJzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGxpYnMvYnVpbGQucHJvcGVydGllcwppbmRleCBiN2JhYjhkLi40MjZhNTg0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGxpYnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGxpYnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZW1iZWRkZWQtbW9kdWxld2l0aGxpYnMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobGlicy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGxpYnMvYnVpbGQueG1sCmluZGV4IDhjMzY2NDcuLmMxMjY2NGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobGlicy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhsaWJzL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDksMzYgKzQ5LDM2IEBACiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDwhLS0gcGFja2FnZSBvdXJzZWx2ZXMgdG8gaW5jbHVkZSBwZXJzaXN0ZW5jZS54bWwgLS0+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiIAotICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIgorICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIKICAgICAgICAgICAgICBpbmNsdWRlcyA9IioqLypFamIuY2xhc3MsKiovKkJlYW4uY2xhc3MiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iZGVzY3JpcHRvciI+CiAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJlamItamFyLnhtbCIvPgotICAgICAgICAgICAgIDwvbWV0YWluZj4gCisgICAgICAgICAgICAgPC9tZXRhaW5mPgogICAgICAgICA8L2phcj4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1wdS5qYXIiIAotICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1wdS5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovU2ltcGxlRW50aXR5LmNsYXNzLCoqL1NpbXBsZVJlbGF0ZWQuY2xhc3MiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iZGVzY3JpcHRvciI+CiAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJwZXJzaXN0ZW5jZS54bWwiLz4KLSAgICAgICAgICAgICA8L21ldGFpbmY+IAorICAgICAgICAgICAgIDwvbWV0YWluZj4KICAgICAgICAgPC9qYXI+CiAgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tYmFzZS5qYXIiCiAgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovU2ltcGxlQmFzZS5jbGFzcywqKi9TaW1wbGVJbnRlcmZhY2UuY2xhc3MiPgogICAgICAgICA8L2phcj4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIHdpdGggJHtlbWJlZGRlZC5jbGFzc3BhdGh9IGluIGNsYXNzcGF0aCIvPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXB1Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1iYXNlLmphcjoke2VtYmVkZGVkLmNsYXNzcGF0aH06JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobGlicy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGxpYnMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDczNWZlZjYuLjZlYWVhN2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobGlicy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhsaWJzL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJFSkIgZW1iZWRkZWQgY3JlYXRlIGNvbnRhaW5lciIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIGFub3RoZXIgY29udGFpbmVyIHdpdGhvdXQgY2xvc2luZyB0aGUgY3VycmVudC4uLiIpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChFSkJFeGNlcHRpb24gZSkgeyAKKyAgICAgICAgfSBjYXRjaCAoRUpCRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IGV4cGVjdGVkOiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkVKQiBlbWJlZGRlZCBjcmVhdGUgY29udGFpbmVyIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhsaWJzL2VqYi9TaW1wbGVFbnRpdHkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobGlicy9lamIvU2ltcGxlRW50aXR5LmphdmEKaW5kZXggOTU5YjU1Ni4uMDY4OWJlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhsaWJzL2VqYi9TaW1wbGVFbnRpdHkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGxpYnMvZWpiL1NpbXBsZUVudGl0eS5qYXZhCkBAIC0zMSwzNSArMzEsMzUgQEAKICAgICBATmFtZWRRdWVyeShuYW1lID0gIlNpbXBsZUVudGl0eS5maW5kQWxsIiwgcXVlcnkgPSAic2VsZWN0IGUgZnJvbSBTaW1wbGVFbnRpdHkgZSIpCiB9KQogcHVibGljIGNsYXNzIFNpbXBsZUVudGl0eSB7Ci0gICAgCi0gICAgQElkIAorCisgICAgQElkCiAgICAgQEdlbmVyYXRlZFZhbHVlCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKIAogICAgIEBPbmVUb09uZShjYXNjYWRlPVBFUlNJU1QsIGZldGNoPUxBWlkpCiAgICAgcHJpdmF0ZSBTaW1wbGVSZWxhdGVkIHJlbGF0ZWQ7Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5KFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZUVudGl0eSgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZVJlbGF0ZWQgZ2V0UmVsYXRlZCgpIHsKICAgICAgICAgcmV0dXJuIHJlbGF0ZWQ7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldFJlbGF0ZWQoU2ltcGxlUmVsYXRlZCByZWxhdGVkKSB7CiAgICAgICAgIHRoaXMucmVsYXRlZCA9IHJlbGF0ZWQ7CiAgICAgfQotICAgIAotICAgIAorCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobGlicy9lamIvU2ltcGxlUmVsYXRlZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhsaWJzL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEKaW5kZXggOWFiZjk4Zi4uNjFjNDQ5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhsaWJzL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhsaWJzL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEKQEAgLTI3LDM0ICsyNywzNCBAQAogCiBARW50aXR5CiBwdWJsaWMgY2xhc3MgU2ltcGxlUmVsYXRlZCB7Ci0gICAgCi0gICAgQElkIAorCisgICAgQElkCiAgICAgQEdlbmVyYXRlZFZhbHVlCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKIAogICAgIEBPbmVUb09uZShmZXRjaD1MQVpZKQogICAgIHByaXZhdGUgU2ltcGxlRW50aXR5IGVudGl0eTsKLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVSZWxhdGVkKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZVJlbGF0ZWQoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkgZ2V0RW50aXR5KCkgewogICAgICAgICByZXR1cm4gZW50aXR5OwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHkoU2ltcGxlRW50aXR5IGVudGl0eSkgewogICAgICAgICB0aGlzLmVudGl0eSA9IGVudGl0eTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobGlicy9lamIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhsaWJzL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggY2EyNzg0Zi4uYzkyMzYxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhsaWJzL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhsaWJzL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTE3LDE0ICsxNywxNCBAQAogcGFja2FnZSBvcmcuZ2xhc3NmaXNoLnRlc3RzLmVqYi5zYW1wbGU7CiAKIGltcG9ydCBqYWthcnRhLmVqYi5TaW5nbGV0b247Ci1pbXBvcnQgamFrYXJ0YS5lamIuU3RhcnR1cDsgCitpbXBvcnQgamFrYXJ0YS5lamIuU3RhcnR1cDsKIGltcG9ydCBqYWthcnRhLmFubm90YXRpb24uUHJlRGVzdHJveTsKIGltcG9ydCBqYWthcnRhLmFubm90YXRpb24uUG9zdENvbnN0cnVjdDsKIAogLyoqCiAgKiBAYXV0aG9yIE1hcmluYSBWYXRraW5hCiAgKi8KLUBTaW5nbGV0b24gCitAU2luZ2xldG9uCiBAU3RhcnR1cAogcHVibGljIGNsYXNzIFNpbmdsZXRvbkJlYW4gewogCkBAIC0zMiw3ICszMiw3IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiZHMgPSAiICsgZHMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZHMgPSAiICsgZHMpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZm9vKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhtYW5pZmVzdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhtYW5pZmVzdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGNiYzFlNDYuLjMxYTgyZDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobWFuaWZlc3QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aG1hbmlmZXN0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWVtYmVkZGVkLW1vZHVsZXdpdGhtYW5pZmVzdCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhtYW5pZmVzdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aG1hbmlmZXN0L2J1aWxkLnhtbAppbmRleCAyYTkyNjg4Li5lM2I2YTc2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aG1hbmlmZXN0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aG1hbmlmZXN0L2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDksMzQgKzQ5LDM0IEBACiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDwhLS0gcGFja2FnZSBvdXJzZWx2ZXMgdG8gaW5jbHVkZSBwZXJzaXN0ZW5jZS54bWwgLS0+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXB1LmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXB1LmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi9TaW1wbGVFbnRpdHkuY2xhc3MsKiovU2ltcGxlUmVsYXRlZC5jbGFzcyI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZGlyPSJkZXNjcmlwdG9yIj4KICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InBlcnNpc3RlbmNlLnhtbCIvPgotICAgICAgICAgICAgIDwvbWV0YWluZj4gCisgICAgICAgICAgICAgPC9tZXRhaW5mPgogICAgICAgICA8L2phcj4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi8qRWpiLmNsYXNzLCoqLypCZWFuLmNsYXNzIj4KICAgICAgICAgICAgICA8bWV0YWluZiBkaXI9ImRlc2NyaXB0b3IiPgogICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iZWpiLWphci54bWwiLz4KLSAgICAgICAgICAgICA8L21ldGFpbmY+IAorICAgICAgICAgICAgIDwvbWV0YWluZj4KICAgICAgICAgICAgICA8bWFuaWZlc3Q+CiAgICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iQ2xhc3MtUGF0aCIgdmFsdWU9ImZpbGU6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tcHUuamFyIi8+CiAgICAgICAgICAgICAgPC9tYW5pZmVzdD4KICAgICAgICAgPC9qYXI+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyB3aXRoICR7ZW1iZWRkZWQuY2xhc3NwYXRofSBpbiBjbGFzc3BhdGgiLz4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphcjoke2VtYmVkZGVkLmNsYXNzcGF0aH06JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobWFuaWZlc3QvZWpiL1NpbXBsZUVudGl0eS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhtYW5pZmVzdC9lamIvU2ltcGxlRW50aXR5LmphdmEKaW5kZXggOTU5YjU1Ni4uMDY4OWJlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhtYW5pZmVzdC9lamIvU2ltcGxlRW50aXR5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhtYW5pZmVzdC9lamIvU2ltcGxlRW50aXR5LmphdmEKQEAgLTMxLDM1ICszMSwzNSBAQAogICAgIEBOYW1lZFF1ZXJ5KG5hbWUgPSAiU2ltcGxlRW50aXR5LmZpbmRBbGwiLCBxdWVyeSA9ICJzZWxlY3QgZSBmcm9tIFNpbXBsZUVudGl0eSBlIikKIH0pCiBwdWJsaWMgY2xhc3MgU2ltcGxlRW50aXR5IHsKLSAgICAKLSAgICBASWQgCisKKyAgICBASWQKICAgICBAR2VuZXJhdGVkVmFsdWUKICAgICBwcml2YXRlIGludCBpZDsKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwogCiAgICAgQE9uZVRvT25lKGNhc2NhZGU9UEVSU0lTVCwgZmV0Y2g9TEFaWSkKICAgICBwcml2YXRlIFNpbXBsZVJlbGF0ZWQgcmVsYXRlZDsKLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5KCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlUmVsYXRlZCBnZXRSZWxhdGVkKCkgewogICAgICAgICByZXR1cm4gcmVsYXRlZDsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0UmVsYXRlZChTaW1wbGVSZWxhdGVkIHJlbGF0ZWQpIHsKICAgICAgICAgdGhpcy5yZWxhdGVkID0gcmVsYXRlZDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhtYW5pZmVzdC9lamIvU2ltcGxlUmVsYXRlZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhtYW5pZmVzdC9lamIvU2ltcGxlUmVsYXRlZC5qYXZhCmluZGV4IDlhYmY5OGYuLjYxYzQ0OTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobWFuaWZlc3QvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aG1hbmlmZXN0L2VqYi9TaW1wbGVSZWxhdGVkLmphdmEKQEAgLTI3LDM0ICsyNywzNCBAQAogCiBARW50aXR5CiBwdWJsaWMgY2xhc3MgU2ltcGxlUmVsYXRlZCB7Ci0gICAgCi0gICAgQElkIAorCisgICAgQElkCiAgICAgQEdlbmVyYXRlZFZhbHVlCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKIAogICAgIEBPbmVUb09uZShmZXRjaD1MQVpZKQogICAgIHByaXZhdGUgU2ltcGxlRW50aXR5IGVudGl0eTsKLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVSZWxhdGVkKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZVJlbGF0ZWQoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkgZ2V0RW50aXR5KCkgewogICAgICAgICByZXR1cm4gZW50aXR5OwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHkoU2ltcGxlRW50aXR5IGVudGl0eSkgewogICAgICAgICB0aGlzLmVudGl0eSA9IGVudGl0eTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobWFuaWZlc3QvZWpiL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobWFuaWZlc3QvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQppbmRleCBjYTI3ODRmLi5jOTIzNjE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aG1hbmlmZXN0L2VqYi9TaW5nbGV0b25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhtYW5pZmVzdC9lamIvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC0xNywxNCArMTcsMTQgQEAKIHBhY2thZ2Ugb3JnLmdsYXNzZmlzaC50ZXN0cy5lamIuc2FtcGxlOwogCiBpbXBvcnQgamFrYXJ0YS5lamIuU2luZ2xldG9uOwotaW1wb3J0IGpha2FydGEuZWpiLlN0YXJ0dXA7IAoraW1wb3J0IGpha2FydGEuZWpiLlN0YXJ0dXA7CiBpbXBvcnQgamFrYXJ0YS5hbm5vdGF0aW9uLlByZURlc3Ryb3k7CiBpbXBvcnQgamFrYXJ0YS5hbm5vdGF0aW9uLlBvc3RDb25zdHJ1Y3Q7CiAKIC8qKgogICogQGF1dGhvciBNYXJpbmEgVmF0a2luYQogICovCi1AU2luZ2xldG9uIAorQFNpbmdsZXRvbgogQFN0YXJ0dXAKIHB1YmxpYyBjbGFzcyBTaW5nbGV0b25CZWFuIHsKIApAQCAtMzIsNyArMzIsNyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImRzID0gIiArIGRzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRzID0gIiArIGRzKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGZvbygpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9wcm9maWxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvcHJvZmlsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA2NGY0YjguLjZkMDIzMDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9wcm9maWxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3Byb2ZpbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZW1iZWRkZWQtcHJvZmlsZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3Byb2ZpbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3Byb2ZpbGUvYnVpbGQueG1sCmluZGV4IDI4YjA1YTcuLjQ2NGIzZmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9wcm9maWxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvcHJvZmlsZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ5LDIxICs0OSwyMSBAQAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8IS0tIHBhY2thZ2Ugb3Vyc2VsdmVzIHRvIGluY2x1ZGUgcGVyc2lzdGVuY2UueG1sIC0tPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi9TKi5jbGFzcyI+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vb3JnIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyB3aXRoICR7ZW1iZWRkZWQuY2xhc3NwYXRofSBpbiBjbGFzc3BhdGgiLz4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphcjoke2VtYmVkZGVkLmNsYXNzcGF0aH06JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9yZW1vdGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9yZW1vdGUvYnVpbGQucHJvcGVydGllcwppbmRleCA5MjE1OTZkLi5jY2Q0ODA5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvcmVtb3RlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3JlbW90ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMS1lbWJlZGRlZC1yZW1vdGUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9yZW1vdGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3JlbW90ZS9idWlsZC54bWwKaW5kZXggZTdlODY1Zi4uMDFjZWRjMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3JlbW90ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3JlbW90ZS9idWlsZC54bWwKQEAgLTM4LDcgKzM4LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUxLDI4ICs1MSwyOCBAQAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8IS0tIHBhY2thZ2Ugb3Vyc2VsdmVzIHRvIGluY2x1ZGUgcGVyc2lzdGVuY2UueG1sIC0tPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi9TKi5jbGFzcyI+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vb3JnIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wRG9tYWluIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRvbWFpbiBoYXMgYmVlZCBTVE9QUEVEIHRvIHJ1biB0aGUgdGVzdCIvPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJ3YXJuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRvbWFpbiB3YXMgU1RPUFBFRCB0byBydW4gdGhlIHRlc3QiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyB3aXRoICR7ZW1iZWRkZWQuY2xhc3NwYXRofSBpbiBjbGFzc3BhdGgiLz4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphcjoke2VtYmVkZGVkLmNsYXNzcGF0aH06JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9za2lwamFyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvc2tpcGphci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGFkZTNhOWIuLjI1MjdmM2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9za2lwamFyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3NraXBqYXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZW1iZWRkZWQtc2tpcGphciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3NraXBqYXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3NraXBqYXIvYnVpbGQueG1sCmluZGV4IDAyOWU4YWUuLmFiNzExYmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9za2lwamFyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvc2tpcGphci9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ5LDM3ICs0OSwzNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8IS0tIHBhY2thZ2Ugb3Vyc2VsdmVzIHRvIGluY2x1ZGUgcGVyc2lzdGVuY2UueG1sIC0tPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi8qRWpiLmNsYXNzLCoqLypCZWFuLmNsYXNzIj4KICAgICAgICAgICAgICA8bWV0YWluZiBkaXI9ImRlc2NyaXB0b3IiPgogICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iZWpiLWphci54bWwiLz4KLSAgICAgICAgICAgICA8L21ldGFpbmY+IAorICAgICAgICAgICAgIDwvbWV0YWluZj4KICAgICAgICAgPC9qYXI+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tcHUuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tcHUuamFyIgorICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIKICAgICAgICAgICAgICBpbmNsdWRlcyA9IioqL1NpbXBsZUVudGl0eS5jbGFzcywqKi9TaW1wbGVSZWxhdGVkLmNsYXNzIj4KICAgICAgICAgICAgICA8bWV0YWluZiBkaXI9ImRlc2NyaXB0b3IiPgogICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icGVyc2lzdGVuY2UueG1sIi8+Ci0gICAgICAgICAgICAgPC9tZXRhaW5mPiAKKyAgICAgICAgICAgICA8L21ldGFpbmY+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiCiAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIqKi8qLmNsYXNzIgogICAgICAgICAgICAgbWFuaWZlc3Q9Ii4vbWFuaWZlc3QvTUFOSUZFU1QuTUYiPgogICAgICAgICA8L2phcj4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZV91bnBhY2tlZCIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIHdpdGggJHtlbWJlZGRlZC5jbGFzc3BhdGh9IGluIGNsYXNzcGF0aCIvPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tcHUuamFyOiR7ZW1iZWRkZWQuY2xhc3NwYXRofToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtOTEsNyArOTEsNyBAQAogICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudGRpciIvPgogICAgICAgICA8dW56aXAgc3JjPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIiBkZXN0PSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnRkaXIiLz4KICAgICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIHdpdGggJHtlbWJlZGRlZC5jbGFzc3BhdGh9IGluIGNsYXNzcGF0aCIvPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnRkaXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1wdS5qYXI6JHtlbWJlZGRlZC5jbGFzc3BhdGh9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvc2tpcGphci9lamIvU2ltcGxlRW50aXR5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvc2tpcGphci9lamIvU2ltcGxlRW50aXR5LmphdmEKaW5kZXggOTU5YjU1Ni4uMDY4OWJlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3NraXBqYXIvZWpiL1NpbXBsZUVudGl0eS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9za2lwamFyL2VqYi9TaW1wbGVFbnRpdHkuamF2YQpAQCAtMzEsMzUgKzMxLDM1IEBACiAgICAgQE5hbWVkUXVlcnkobmFtZSA9ICJTaW1wbGVFbnRpdHkuZmluZEFsbCIsIHF1ZXJ5ID0gInNlbGVjdCBlIGZyb20gU2ltcGxlRW50aXR5IGUiKQogfSkKIHB1YmxpYyBjbGFzcyBTaW1wbGVFbnRpdHkgewotICAgIAotICAgIEBJZCAKKworICAgIEBJZAogICAgIEBHZW5lcmF0ZWRWYWx1ZQogICAgIHByaXZhdGUgaW50IGlkOwogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CiAKICAgICBAT25lVG9PbmUoY2FzY2FkZT1QRVJTSVNULCBmZXRjaD1MQVpZKQogICAgIHByaXZhdGUgU2ltcGxlUmVsYXRlZCByZWxhdGVkOwotICAgIAorCiAgICAgcHVibGljIFNpbXBsZUVudGl0eShTdHJpbmcgbmFtZSkgewogICAgICAgICBzZXROYW1lKG5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVSZWxhdGVkIGdldFJlbGF0ZWQoKSB7CiAgICAgICAgIHJldHVybiByZWxhdGVkOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXRSZWxhdGVkKFNpbXBsZVJlbGF0ZWQgcmVsYXRlZCkgewogICAgICAgICB0aGlzLnJlbGF0ZWQgPSByZWxhdGVkOwogICAgIH0KLSAgICAKLSAgICAKKworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvc2tpcGphci9lamIvU2ltcGxlUmVsYXRlZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3NraXBqYXIvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YQppbmRleCA5YWJmOThmLi42MWM0NDk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvc2tpcGphci9lamIvU2ltcGxlUmVsYXRlZC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9za2lwamFyL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEKQEAgLTI3LDM0ICsyNywzNCBAQAogCiBARW50aXR5CiBwdWJsaWMgY2xhc3MgU2ltcGxlUmVsYXRlZCB7Ci0gICAgCi0gICAgQElkIAorCisgICAgQElkCiAgICAgQEdlbmVyYXRlZFZhbHVlCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKIAogICAgIEBPbmVUb09uZShmZXRjaD1MQVpZKQogICAgIHByaXZhdGUgU2ltcGxlRW50aXR5IGVudGl0eTsKLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVSZWxhdGVkKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZVJlbGF0ZWQoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkgZ2V0RW50aXR5KCkgewogICAgICAgICByZXR1cm4gZW50aXR5OwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHkoU2ltcGxlRW50aXR5IGVudGl0eSkgewogICAgICAgICB0aGlzLmVudGl0eSA9IGVudGl0eTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9za2lwamFyL2VqYi9TaW5nbGV0b25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvc2tpcGphci9lamIvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IGNhMjc4NGYuLmM5MjM2MTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9za2lwamFyL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3NraXBqYXIvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQpAQCAtMTcsMTQgKzE3LDE0IEBACiBwYWNrYWdlIG9yZy5nbGFzc2Zpc2gudGVzdHMuZWpiLnNhbXBsZTsKIAogaW1wb3J0IGpha2FydGEuZWpiLlNpbmdsZXRvbjsKLWltcG9ydCBqYWthcnRhLmVqYi5TdGFydHVwOyAKK2ltcG9ydCBqYWthcnRhLmVqYi5TdGFydHVwOwogaW1wb3J0IGpha2FydGEuYW5ub3RhdGlvbi5QcmVEZXN0cm95OwogaW1wb3J0IGpha2FydGEuYW5ub3RhdGlvbi5Qb3N0Q29uc3RydWN0OwogCiAvKioKICAqIEBhdXRob3IgTWFyaW5hIFZhdGtpbmEKICAqLwotQFNpbmdsZXRvbiAKK0BTaW5nbGV0b24KIEBTdGFydHVwCiBwdWJsaWMgY2xhc3MgU2luZ2xldG9uQmVhbiB7CiAKQEAgLTMyLDcgKzMyLDcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJkcyA9ICIgKyBkcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJkcyA9ICIgKyBkcyk7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBmb28oKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdGVzdGNsb3NlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdGVzdGNsb3NlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNGYwMDlmOC4uZDBmZGY0OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3Rlc3RjbG9zZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90ZXN0Y2xvc2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZW1iZWRkZWQtdGVzdGNsb3NlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdGVzdGNsb3NlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90ZXN0Y2xvc2UvYnVpbGQueG1sCmluZGV4IGJhMGNhNDIuLjliNDRiZWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90ZXN0Y2xvc2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90ZXN0Y2xvc2UvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OSwyNCArNDksMjQgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPCEtLSBwYWNrYWdlIG91cnNlbHZlcyB0byBpbmNsdWRlIHBlcnNpc3RlbmNlLnhtbCAtLT4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovUyouY2xhc3MiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iZGVzY3JpcHRvciI+CiAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJwZXJzaXN0ZW5jZS54bWwiLz4KLSAgICAgICAgICAgICA8L21ldGFpbmY+IAorICAgICAgICAgICAgIDwvbWV0YWluZj4KICAgICAgICAgPC9qYXI+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9vcmciLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIHdpdGggJHtlbWJlZGRlZC5jbGFzc3BhdGh9IGluIGNsYXNzcGF0aCIvPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyOiR7ZW1iZWRkZWQuY2xhc3NwYXRofToke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3Rlc3RjbG9zZS9lamIvU2ltcGxlRW50aXR5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdGVzdGNsb3NlL2VqYi9TaW1wbGVFbnRpdHkuamF2YQppbmRleCAwYTQxNTQ2Li42N2I2ZjE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdGVzdGNsb3NlL2VqYi9TaW1wbGVFbnRpdHkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdGVzdGNsb3NlL2VqYi9TaW1wbGVFbnRpdHkuamF2YQpAQCAtMzEsOCArMzEsOCBAQAogICAgIEBOYW1lZFF1ZXJ5KG5hbWUgPSAiU2ltcGxlRW50aXR5LmZpbmRBbGwiLCBxdWVyeSA9ICJzZWxlY3QgZSBmcm9tIFNpbXBsZUVudGl0eSBlIikKIH0pCiBwdWJsaWMgY2xhc3MgU2ltcGxlRW50aXR5IHsKLSAgICAKLSAgICBASWQgCisKKyAgICBASWQKICAgICBAR2VuZXJhdGVkVmFsdWUKICAgICBwcml2YXRlIGludCBpZDsKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwpAQCAtNDAsMTAgKzQwLDEwIEBACiAgICAgcHVibGljIFNpbXBsZUVudGl0eShTdHJpbmcgbmFtZSkgewogICAgICAgICBzZXROYW1lKG5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdGltZXJ0ZXN0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdGltZXJ0ZXN0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYmQ0NDQ5MC4uYzkyYTliMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3RpbWVydGVzdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90aW1lcnRlc3QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZW1iZWRkZWQtdGltZXJ0ZXN0Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdGltZXJ0ZXN0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90aW1lcnRlc3QvYnVpbGQueG1sCmluZGV4IDQxZGVmN2QuLjFjYWNmYTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90aW1lcnRlc3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90aW1lcnRlc3QvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MCwyOSArNTAsMjkgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPCEtLSBwYWNrYWdlIG91cnNlbHZlcyB0byBpbmNsdWRlIHBlcnNpc3RlbmNlLnhtbCAtLT4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovUyouY2xhc3MiPgogICAgICAgICA8L2phcj4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L29yZyIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJwZXJzaXN0ZW50IiB2YWx1ZT0idHJ1ZSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1ub24tcGVyc2lzdGVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icGVyc2lzdGVudCIgdmFsdWU9ImZhbHNlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyB3aXRoICR7ZW1iZWRkZWQuY2xhc3NwYXRofSBpbiBjbGFzc3BhdGgiLz4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphcjoke2VtYmVkZGVkLmNsYXNzcGF0aH06JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29jb250YWluZXJzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvY29udGFpbmVycy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDMyYmE5NjQuLjY5M2E1OGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29jb250YWluZXJzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b2NvbnRhaW5lcnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZW1iZWRkZWQtdHdvYyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b2NvbnRhaW5lcnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b2NvbnRhaW5lcnMvYnVpbGQueG1sCmluZGV4IGFmZTA4YTcuLjU0MjhmM2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29jb250YWluZXJzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvY29udGFpbmVycy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ5LDI0ICs0OSwyNCBAQAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8IS0tIHBhY2thZ2Ugb3Vyc2VsdmVzIHRvIGluY2x1ZGUgcGVyc2lzdGVuY2UueG1sIC0tPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi9TKi5jbGFzcyI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZGlyPSJkZXNjcmlwdG9yIj4KICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImVqYi1qYXIueG1sIi8+CiAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJwZXJzaXN0ZW5jZS54bWwiLz4KLSAgICAgICAgICAgICA8L21ldGFpbmY+IAorICAgICAgICAgICAgIDwvbWV0YWluZj4KICAgICAgICAgPC9qYXI+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyB3aXRoICR7ZW1iZWRkZWQuY2xhc3NwYXRofSBpbiBjbGFzc3BhdGgiLz4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphcjoke2VtYmVkZGVkLmNsYXNzcGF0aH06JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1YZGVidWciLz4KICAgICAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1YcnVuamR3cDp0cmFuc3BvcnQ9ZHRfc29ja2V0LHNlcnZlcj15LHN1c3BlbmQ9eSxhZGRyZXNzPTgwODUiLz4KIC0tPgotCQkgICA8YXJnIGxpbmU9IiR7am5kaXJvb3R9Ii8+CisgICAgICAgICAgIDxhcmcgbGluZT0iJHtqbmRpcm9vdH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvY29udGFpbmVycy9lamIvU2ltcGxlRW50aXR5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvY29udGFpbmVycy9lamIvU2ltcGxlRW50aXR5LmphdmEKaW5kZXggYjJiZDI1MC4uMjg1ZDgzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b2NvbnRhaW5lcnMvZWpiL1NpbXBsZUVudGl0eS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29jb250YWluZXJzL2VqYi9TaW1wbGVFbnRpdHkuamF2YQpAQCAtMzEsOCArMzEsOCBAQAogICAgIEBOYW1lZFF1ZXJ5KG5hbWUgPSAiU2ltcGxlRW50aXR5LmZpbmRBbGwiLCBxdWVyeSA9ICJzZWxlY3QgZSBmcm9tIFNpbXBsZUVudGl0eSBlIikKIH0pCiBwdWJsaWMgY2xhc3MgU2ltcGxlRW50aXR5IHsKLSAgICAKLSAgICBASWQgCisKKyAgICBASWQKICAgICBAR2VuZXJhdGVkVmFsdWUKICAgICBwcml2YXRlIGludCBpZDsKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwpAQCAtNDAsMTUgKzQwLDE1IEBACiAgICAgcHVibGljIFNpbXBsZUVudGl0eShTdHJpbmcgbmFtZSkgewogICAgICAgICBzZXROYW1lKG5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMGYwZTFhMS4uZDYzYmQ3OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMS1lbWJlZGRlZC10d28tbW9kdWxlcyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXMvYnVpbGQueG1sCmluZGV4IDI2Y2FjOTQuLjQyOWY0YjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlcy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ5LDMwICs0OSwzMCBAQAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8IS0tIHBhY2thZ2Ugb3Vyc2VsdmVzIHRvIGluY2x1ZGUgcGVyc2lzdGVuY2UueG1sIC0tPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIxLmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYjEuamFyIgorICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIKICAgICAgICAgICAgICBpbmNsdWRlcyA9IioqL1NpbXBsZSouY2xhc3MiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iZGVzY3JpcHRvciI+CiAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJlamItamFyLnhtbCIvPgogICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icGVyc2lzdGVuY2UueG1sIi8+Ci0gICAgICAgICAgICAgPC9tZXRhaW5mPiAKKyAgICAgICAgICAgICA8L21ldGFpbmY+CiAgICAgICAgIDwvamFyPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYjIuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiMi5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovU2luZ2xldG9uQmVhbi5jbGFzcyI+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vb3JnIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyB3aXRoICR7ZW1iZWRkZWQuY2xhc3NwYXRofSBpbiBjbGFzc3BhdGgiLz4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiMS5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiMi5qYXI6JHtlbWJlZGRlZC5jbGFzc3BhdGh9OiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlcy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlcy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNGU1MmVkMy4uM2ExM2QxYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzL2NsaWVudC9DbGllbnQuamF2YQpAQCAtODAsNyArODAsNyBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJFSkIgZW1iZWRkZWQgbW9kdWxlIDEiLCBzdGF0LkZBSUwpOwogICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgaWYgKGMgIT0gbnVsbCkgCisgICAgICAgICAgICBpZiAoYyAhPSBudWxsKQogICAgICAgICAgICAgICAgIGMuY2xvc2UoKTsKICAgICAgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi4uLi4uLi4uLi5GSU5JU0hFRCAyIG1vZHVsZXMgRW1iZWRkZWQgdGVzdCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXMvZWpiL1NpbXBsZUVudGl0eS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXMvZWpiL1NpbXBsZUVudGl0eS5qYXZhCmluZGV4IDk1OWI1NTYuLjA2ODliZWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzL2VqYi9TaW1wbGVFbnRpdHkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlcy9lamIvU2ltcGxlRW50aXR5LmphdmEKQEAgLTMxLDM1ICszMSwzNSBAQAogICAgIEBOYW1lZFF1ZXJ5KG5hbWUgPSAiU2ltcGxlRW50aXR5LmZpbmRBbGwiLCBxdWVyeSA9ICJzZWxlY3QgZSBmcm9tIFNpbXBsZUVudGl0eSBlIikKIH0pCiBwdWJsaWMgY2xhc3MgU2ltcGxlRW50aXR5IHsKLSAgICAKLSAgICBASWQgCisKKyAgICBASWQKICAgICBAR2VuZXJhdGVkVmFsdWUKICAgICBwcml2YXRlIGludCBpZDsKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwogCiAgICAgQE9uZVRvT25lKGNhc2NhZGU9UEVSU0lTVCwgZmV0Y2g9TEFaWSkKICAgICBwcml2YXRlIFNpbXBsZVJlbGF0ZWQgcmVsYXRlZDsKLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5KCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlUmVsYXRlZCBnZXRSZWxhdGVkKCkgewogICAgICAgICByZXR1cm4gcmVsYXRlZDsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0UmVsYXRlZChTaW1wbGVSZWxhdGVkIHJlbGF0ZWQpIHsKICAgICAgICAgdGhpcy5yZWxhdGVkID0gcmVsYXRlZDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXMvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEKaW5kZXggOWFiZjk4Zi4uNjFjNDQ5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXMvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlcy9lamIvU2ltcGxlUmVsYXRlZC5qYXZhCkBAIC0yNywzNCArMjcsMzQgQEAKIAogQEVudGl0eQogcHVibGljIGNsYXNzIFNpbXBsZVJlbGF0ZWQgewotICAgIAotICAgIEBJZCAKKworICAgIEBJZAogICAgIEBHZW5lcmF0ZWRWYWx1ZQogICAgIHByaXZhdGUgaW50IGlkOwogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CiAKICAgICBAT25lVG9PbmUoZmV0Y2g9TEFaWSkKICAgICBwcml2YXRlIFNpbXBsZUVudGl0eSBlbnRpdHk7Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlUmVsYXRlZChTdHJpbmcgbmFtZSkgewogICAgICAgICBzZXROYW1lKG5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVSZWxhdGVkKCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5IGdldEVudGl0eSgpIHsKICAgICAgICAgcmV0dXJuIGVudGl0eTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5KFNpbXBsZUVudGl0eSBlbnRpdHkpIHsKICAgICAgICAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlcy9lamIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXMvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQppbmRleCAyODA5MjNjLi5lODBmOWY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlcy9lamIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTE3LDggKzE3LDggQEAKIHBhY2thZ2Ugb3JnLmdsYXNzZmlzaC50ZXN0cy5lamIuc2FtcGxlOwogCiBpbXBvcnQgamFrYXJ0YS5lamIuU2luZ2xldG9uOwotaW1wb3J0IGpha2FydGEuZWpiLlN0YXJ0dXA7IAotaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OyAKK2ltcG9ydCBqYWthcnRhLmVqYi5TdGFydHVwOworaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuYW5ub3RhdGlvbi5SZXNvdXJjZTsKIGltcG9ydCBqYWthcnRhLmFubm90YXRpb24uUHJlRGVzdHJveTsKIGltcG9ydCBqYWthcnRhLmFubm90YXRpb24uc2VjdXJpdHkuUGVybWl0QWxsOwpAQCAtMjgsNyArMjgsNyBAQAogLyoqCiAgKiBAYXV0aG9yIE1hcmluYSBWYXRraW5hCiAgKi8KLUBTaW5nbGV0b24gCitAU2luZ2xldG9uCiBAU3RhcnR1cAogcHVibGljIGNsYXNzIFNpbmdsZXRvbkJlYW4gewogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlc3dpdGhsaWJzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlc3dpdGhsaWJzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDQ5Njc3ZS4uZDMzZDFiOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXN3aXRobGlicy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzd2l0aGxpYnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZW1iZWRkZWQtdHdvLW1vZHVsZXMtd2l0aC1saWJzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlc3dpdGhsaWJzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzd2l0aGxpYnMvYnVpbGQueG1sCmluZGV4IDNkMGQyZmQuLjE2ZTc5NTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzd2l0aGxpYnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzd2l0aGxpYnMvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01NCwzNSArNTQsMzUgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWphcnMiPgogICAgICAgICA8IS0tIHBhY2thZ2Ugb3Vyc2VsdmVzIHRvIGluY2x1ZGUgcGVyc2lzdGVuY2UueG1sIC0tPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIxLmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYjEuamFyIgorICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIKICAgICAgICAgICAgICBpbmNsdWRlcyA9IioqLypFamIuY2xhc3MiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iZGVzY3JpcHRvciI+CiAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJlamItamFyLnhtbCIvPgotICAgICAgICAgICAgIDwvbWV0YWluZj4gCisgICAgICAgICAgICAgPC9tZXRhaW5mPgogICAgICAgICA8L2phcj4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1wdTEuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tcHUxLmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi9TaW1wbGVFbnRpdHkuY2xhc3MsKiovU2ltcGxlUmVsYXRlZC5jbGFzcyI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZGlyPSJkZXNjcmlwdG9yIj4KICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InBlcnNpc3RlbmNlLnhtbCIvPgotICAgICAgICAgICAgIDwvbWV0YWluZj4gCisgICAgICAgICAgICAgPC9tZXRhaW5mPgogICAgICAgICA8L2phcj4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1iYXNlLmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWJhc2UuamFyIgorICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIKICAgICAgICAgICAgICBpbmNsdWRlcyA9IioqL1NpbXBsZUJhc2UuY2xhc3MsKiovU2ltcGxlSW50ZXJmYWNlLmNsYXNzIj4KICAgICAgICAgPC9qYXI+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiMi5qYXIiIAotICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIyLmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi9TaW5nbGV0b25CZWFuLmNsYXNzIj4KICAgICAgICAgPC9qYXI+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9vcmciLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1kaXJzIj4KICAgICAgICAgPCEtLSBwYWNrYWdlIG91cnNlbHZlcyB0byBpbmNsdWRlIHBlcnNpc3RlbmNlLnhtbCAtLT4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiMS9jbGFzc2VzIi8+CkBAIC05NywxNiArOTcsMTYgQEAKICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiMi9jbGFzc2VzIi8+CiAgICAgICAgIDx1bnppcCBzcmM9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYjIuamFyIiBkZXN0PSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIyL2NsYXNzZXMiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlX2phcnMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2VfZGlycyIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2VfamFycyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgd2l0aCAke2VtYmVkZGVkLmNsYXNzcGF0aH0gaW4gY2xhc3NwYXRoIi8+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYjEuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYjIuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWJhc2UuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXB1MS5qYXI6JHtlbWJlZGRlZC5jbGFzc3BhdGh9OiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CkBAIC0xMjIsNyArMTIyLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlX2RpcnMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIHdpdGggJHtlbWJlZGRlZC5jbGFzc3BhdGh9IGluIGNsYXNzcGF0aCIvPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIyL2NsYXNzZXM6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiMS9jbGFzc2VzOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWJhc2UvY2xhc3Nlczoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1wdTE6JHtlbWJlZGRlZC5jbGFzc3BhdGh9OiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlc3dpdGhsaWJzL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzd2l0aGxpYnMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDU4YWI1ZjAuLjkyMDM4MDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzd2l0aGxpYnMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzd2l0aGxpYnMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkVKQiBlbWJlZGRlZCBtb2R1bGUgMSIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBpZiAoYyAhPSBudWxsKSAKKyAgICAgICAgICAgIGlmIChjICE9IG51bGwpCiAgICAgICAgICAgICAgICAgYy5jbG9zZSgpOwogICAgICAgICB9CiAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJFSkIgZW1iZWRkZWQgbW9kdWxlIDEiLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXN3aXRobGlicy9lamIvU2ltcGxlRW50aXR5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlc3dpdGhsaWJzL2VqYi9TaW1wbGVFbnRpdHkuamF2YQppbmRleCA5NTliNTU2Li4wNjg5YmVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlc3dpdGhsaWJzL2VqYi9TaW1wbGVFbnRpdHkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlc3dpdGhsaWJzL2VqYi9TaW1wbGVFbnRpdHkuamF2YQpAQCAtMzEsMzUgKzMxLDM1IEBACiAgICAgQE5hbWVkUXVlcnkobmFtZSA9ICJTaW1wbGVFbnRpdHkuZmluZEFsbCIsIHF1ZXJ5ID0gInNlbGVjdCBlIGZyb20gU2ltcGxlRW50aXR5IGUiKQogfSkKIHB1YmxpYyBjbGFzcyBTaW1wbGVFbnRpdHkgewotICAgIAotICAgIEBJZCAKKworICAgIEBJZAogICAgIEBHZW5lcmF0ZWRWYWx1ZQogICAgIHByaXZhdGUgaW50IGlkOwogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CiAKICAgICBAT25lVG9PbmUoY2FzY2FkZT1QRVJTSVNULCBmZXRjaD1MQVpZKQogICAgIHByaXZhdGUgU2ltcGxlUmVsYXRlZCByZWxhdGVkOwotICAgIAorCiAgICAgcHVibGljIFNpbXBsZUVudGl0eShTdHJpbmcgbmFtZSkgewogICAgICAgICBzZXROYW1lKG5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVSZWxhdGVkIGdldFJlbGF0ZWQoKSB7CiAgICAgICAgIHJldHVybiByZWxhdGVkOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXRSZWxhdGVkKFNpbXBsZVJlbGF0ZWQgcmVsYXRlZCkgewogICAgICAgICB0aGlzLnJlbGF0ZWQgPSByZWxhdGVkOwogICAgIH0KLSAgICAKLSAgICAKKworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlc3dpdGhsaWJzL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlc3dpdGhsaWJzL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEKaW5kZXggOWFiZjk4Zi4uNjFjNDQ5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXN3aXRobGlicy9lamIvU2ltcGxlUmVsYXRlZC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzd2l0aGxpYnMvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YQpAQCAtMjcsMzQgKzI3LDM0IEBACiAKIEBFbnRpdHkKIHB1YmxpYyBjbGFzcyBTaW1wbGVSZWxhdGVkIHsKLSAgICAKLSAgICBASWQgCisKKyAgICBASWQKICAgICBAR2VuZXJhdGVkVmFsdWUKICAgICBwcml2YXRlIGludCBpZDsKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwogCiAgICAgQE9uZVRvT25lKGZldGNoPUxBWlkpCiAgICAgcHJpdmF0ZSBTaW1wbGVFbnRpdHkgZW50aXR5OwotICAgIAorCiAgICAgcHVibGljIFNpbXBsZVJlbGF0ZWQoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlUmVsYXRlZCgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZUVudGl0eSBnZXRFbnRpdHkoKSB7CiAgICAgICAgIHJldHVybiBlbnRpdHk7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eShTaW1wbGVFbnRpdHkgZW50aXR5KSB7CiAgICAgICAgIHRoaXMuZW50aXR5ID0gZW50aXR5OwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXN3aXRobGlicy9lamIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXN3aXRobGlicy9lamIvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IDI4MDkyM2MuLmU4MGY5ZjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzd2l0aGxpYnMvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlc3dpdGhsaWJzL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTE3LDggKzE3LDggQEAKIHBhY2thZ2Ugb3JnLmdsYXNzZmlzaC50ZXN0cy5lamIuc2FtcGxlOwogCiBpbXBvcnQgamFrYXJ0YS5lamIuU2luZ2xldG9uOwotaW1wb3J0IGpha2FydGEuZWpiLlN0YXJ0dXA7IAotaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OyAKK2ltcG9ydCBqYWthcnRhLmVqYi5TdGFydHVwOworaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuYW5ub3RhdGlvbi5SZXNvdXJjZTsKIGltcG9ydCBqYWthcnRhLmFubm90YXRpb24uUHJlRGVzdHJveTsKIGltcG9ydCBqYWthcnRhLmFubm90YXRpb24uc2VjdXJpdHkuUGVybWl0QWxsOwpAQCAtMjgsNyArMjgsNyBAQAogLyoqCiAgKiBAYXV0aG9yIE1hcmluYSBWYXRraW5hCiAgKi8KLUBTaW5nbGV0b24gCitAU2luZ2xldG9uCiBAU3RhcnR1cAogcHVibGljIGNsYXNzIFNpbmdsZXRvbkJlYW4gewogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdXRpbC9zcmMvWmlwVXRpbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3V0aWwvc3JjL1ppcFV0aWwuamF2YQppbmRleCA5MzkzM2QxLi43ZGQ1YmFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdXRpbC9zcmMvWmlwVXRpbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC91dGlsL3NyYy9aaXBVdGlsLmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIHZvaWQgemlwKEZpbGUgZGlyZWN0b3J5LCBGaWxlIGJhc2UsIFppcE91dHB1dFN0cmVhbSB6b3MpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIEZpbGVbXSBmaWxlcyA9IGRpcmVjdG9yeS5saXN0RmlsZXMoKTsKICAgICAgICAgYnl0ZVtdIGJ1ZmZlciA9IG5ldyBieXRlWzgxOTJdOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvYnVpbGQueG1sCmluZGV4IDQ3ODc0MDAuLjViZWJiNDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9idWlsZC54bWwKQEAgLTk3LDkgKzk3LDkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWVqYjMxLWZ1bGwgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWVqYjMxLWZ1bGwgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZGlzYWJsZV9ub25wb3J0YWJsZV9qbmRpL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9kaXNhYmxlX25vbnBvcnRhYmxlX2puZGkvYnVpbGQucHJvcGVydGllcwppbmRleCA4ZWMyMDdhLi5jNmYwNGMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9kaXNhYmxlX25vbnBvcnRhYmxlX2puZGkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9kaXNhYmxlX25vbnBvcnRhYmxlX2puZGkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTEgKzE1LDExIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZnVsbC1kaXNhYmxlX25vbnBvcnRhYmxlX2puZGkiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJnbGFzc2Zpc2gtZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2dsYXNzZmlzaC1lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZGlzYWJsZV9ub25wb3J0YWJsZV9qbmRpL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Rpc2FibGVfbm9ucG9ydGFibGVfam5kaS9idWlsZC54bWwKaW5kZXggZmZlYjQwYS4uZTE0ZDI5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZGlzYWJsZV9ub25wb3J0YWJsZV9qbmRpL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9kaXNhYmxlX25vbnBvcnRhYmxlX2puZGkvYnVpbGQueG1sCkBAIC0yOSwxNSArMjksMTUgQEAKICAgICAmY29tbW9uQnVpbGQ7CiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwogCi0gICAgPCEtLSBub3RlIHRoYXQgd2UgZG9uJ3QgdW5kZXBsb3kgYXMgcGFydCBvZiBhbGwgdGFyZ2V0IHNvIAorICAgIDwhLS0gbm90ZSB0aGF0IHdlIGRvbid0IHVuZGVwbG95IGFzIHBhcnQgb2YgYWxsIHRhcmdldCBzbwogICAgIHRoYXQgdG9wLWxldmVsIGJ1aWxkIHNjcmlwdCBjYW4gcnVuIHJlbW90ZTIgZmlyc3QgLS0+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJ1biwgdW5kZXBsb3kiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDksMTIgKzQ5LDEyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovSGVsbG8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDkgKzYyLDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CkBAIC03NSw3ICs3NSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9kaXNhYmxlX25vbnBvcnRhYmxlX2puZGkvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZGlzYWJsZV9ub25wb3J0YWJsZV9qbmRpL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBhYTNkNzkxLi45ODE2YWFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9kaXNhYmxlX25vbnBvcnRhYmxlX2puZGkvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Rpc2FibGVfbm9ucG9ydGFibGVfam5kaS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CkBAIC0zMiwxMCArMzIsMTAgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIAotCWFwcE5hbWUgPSBhcmdzWzBdOyAKLQlzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwotCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOyAgICAgICAKLSAgICAgICAgY2xpZW50LmRvVGVzdCgpOwkKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOworICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOworICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKICAgICB9CiAKQEAgLTQ0LDkgKzQ0LDkgQEAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAgICAgICAgIGJvb2xlYW4gZmFpbGVkID0gZmFsc2U7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIC8vIG5vbi1wb3J0YWJsZSBnbG9iYWwKKyAgICAgICAgLy8gbm9uLXBvcnRhYmxlIGdsb2JhbAogICAgICAgICAgICAgZm9yKFN0cmluZyBzIDogbm9uUG9ydGFibGVKbmRpTmFtZXMpIHsKICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIkFib3V0IHRvIGxvb2t1cCAiICsgcyk7CkBAIC01OCw5ICs1OCw5IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHNiKTsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImRpc2FibGVfbm9ucG9ydGFibGVfam5kaSIsIChmYWlsZWQgPyBzdGF0LkZBSUw6IHN0YXQuUEFTUykpOwotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJkaXNhYmxlX25vbnBvcnRhYmxlX2puZGkiLCAoZmFpbGVkID8gc3RhdC5GQUlMOiBzdGF0LlBBU1MpKTsKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Rpc2FibGVfbm9ucG9ydGFibGVfam5kaS9lamIvSGVsbG9CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9kaXNhYmxlX25vbnBvcnRhYmxlX2puZGkvZWpiL0hlbGxvQmVhbi5qYXZhCmluZGV4IDYxMGY3YTQuLmI1N2ZiYmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Rpc2FibGVfbm9ucG9ydGFibGVfam5kaS9lamIvSGVsbG9CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZGlzYWJsZV9ub25wb3J0YWJsZV9qbmRpL2VqYi9IZWxsb0JlYW4uamF2YQpAQCAtMjIsNyArMjIsNyBAQAogQFN0YXRlbGVzcyhtYXBwZWROYW1lPSJISCIpCiBwdWJsaWMgY2xhc3MgSGVsbG9CZWFuIGltcGxlbWVudHMgSGVsbG8gewogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7Ci0JcmV0dXJuICJoZWxsbywgd29ybGRcbiI7CisgICAgcmV0dXJuICJoZWxsbywgd29ybGRcbiI7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQwZDJjYWQuLjliMTkzZTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMS1mdWxsLWVhciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2J1aWxkLnhtbAppbmRleCA3NTdiMmIyLi5iMTBmNDM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJ3YXIiLz4KQEAgLTQ2LDggKzQ2LDggQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JPGphdmFjIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBzcmNkaXI9ImNsaWVudCIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGRlYnVnPSJvbiIgZmFpbG9uZXJyb3I9InRydWUiPgotCSAKKyAgICA8amF2YWMgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIHNyY2Rpcj0iY2xpZW50IiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZGVidWc9Im9uIiBmYWlsb25lcnJvcj0idHJ1ZSI+CisKICAgICAgICAgPC9qYXZhYz4KIDwhLS0KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CkBAIC02MiwxNSArNjIsMTUgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi9Gb28uY2xhc3MsKiovSGVsbG8uY2xhc3MsKiovSGVsbG9SZW1vdGUuY2xhc3MsKiovU2luZ2xldG9uKi5jbGFzcywqKi9IZWxsb1N0YXRlbGVzcy5jbGFzcywqKi9IZWxsb1NpbmdsZXRvbi5jbGFzcywqKi9Gb29NYW5hZ2VkQmVhbi5jbGFzcywqKi9CYXJNYW5hZ2VkQmVhbi5jbGFzcywgKiovRm9vQmFyTWFuYWdlZEJlYW4uY2xhc3MsICoqL01hbmFnZWRTdXBlci5jbGFzcywgKiovSW50ZXJjZXB0b3IqLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtNzksMTAgKzc5LDEwIEBACiAgICAgICAgICAgIDxhcmcgbGluZT0iJHtodHRwLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMGE5YzVkNS4uMGU4ZWQyYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwpAQCAtMzgsNTAgKzM4LDUwIEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgSW50ZWdlciBhcHBMZXZlbFZpYUxvb2t1cDsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKLQlhcHBOYW1lID0gYXJnc1swXTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwotCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOyAgICAgICAKLSAgICAgICAgY2xpZW50LmRvVGVzdCgpOwkKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOworICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOworICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImFwcExldmVsVmlhTG9va3VwID0gJyIgKwotCQkJICAgYXBwTGV2ZWxWaWFMb29rdXAgKyAiJyIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXBwTGV2ZWxWaWFMb29rdXAgPSAnIiArCisgICAgICAgICAgICAgICBhcHBMZXZlbFZpYUxvb2t1cCArICInIik7CiAgICAgfQogCiAgICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7Ci0JaG9zdCA9IGFyZ3NbMV07CisgICAgaG9zdCA9IGFyZ3NbMV07CiAgICAgICAgIHBvcnQgPSBhcmdzWzJdOwogICAgIH0KIAotICAgCisKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyAKKyAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICAgICAiLyIgKyBhcHBOYW1lICsgIi9IZWxsb1NlcnZsZXQiOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIHdlYmNsaWVudCBzZXJ2bGV0IGF0ICIgKyB1cmwpOwogCi0JICAgIFVSTCB1ID0gbmV3IFVSTCh1cmwpOwotICAgICAgICAKLQkgICAgSHR0cFVSTENvbm5lY3Rpb24gYzEgPSAoSHR0cFVSTENvbm5lY3Rpb24pdS5vcGVuQ29ubmVjdGlvbigpOwotCSAgICBpbnQgY29kZSA9IGMxLmdldFJlc3BvbnNlQ29kZSgpOwotCSAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7Ci0JICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKLQkgICAgU3RyaW5nIGxpbmUgPSBudWxsOwotCSAgICB3aGlsZSgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpCi0JCVN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKLQkgICAgaWYoY29kZSAhPSAyMDApIHsKLQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluY29ycmVjdCByZXR1cm4gY29kZTogIiArIGNvZGUpOwotCSAgICB9Ci0JICAgIAotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisgICAgICAgIFVSTCB1ID0gbmV3IFVSTCh1cmwpOwogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjMSA9IChIdHRwVVJMQ29ubmVjdGlvbil1Lm9wZW5Db25uZWN0aW9uKCk7CisgICAgICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7CisgICAgICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOworICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CisgICAgICAgIHdoaWxlKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOworICAgICAgICBpZihjb2RlICE9IDIwMCkgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW5jb3JyZWN0IHJldHVybiBjb2RlOiAiICsgY29kZSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvQmFyTWFuYWdlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvQmFyTWFuYWdlZEJlYW4uamF2YQppbmRleCA0ZDhjYTBmLi4wMDY3NDY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL0Jhck1hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9CYXJNYW5hZ2VkQmVhbi5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gQmFyTWFuYWdlZEJlYW46OmluaXQoKSAiICsgdGhpcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBCYXJNYW5hZ2VkQmVhbjo6aW5pdCgpICIgKyB0aGlzKTsKICAgICB9CiAKICAgIHB1YmxpYyB2b2lkIGJhcigpIHsKQEAgLTM5LDEyICszOSwxMiBAQAogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEJhck1hbmFnZWRCZWFuOjpkZXN0cm95KCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBCYXJNYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JcmV0dXJuICJCYXJNYW5hZ2VkQmVhbiB0aGlzID0gIiArIHN1cGVyLnRvU3RyaW5nKCkgKyAKLQkgICAgIiBzID0gIiArIHMgKyAiICwgZHMgPSAiICsgZHM7CisgICAgcmV0dXJuICJCYXJNYW5hZ2VkQmVhbiB0aGlzID0gIiArIHN1cGVyLnRvU3RyaW5nKCkgKworICAgICAgICAiIHMgPSAiICsgcyArICIgLCBkcyA9ICIgKyBkczsKIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9Gb29CYXJNYW5hZ2VkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9Gb29CYXJNYW5hZ2VkQmVhbi5qYXZhCmluZGV4IDk3MDUyM2YuLjQ5NDdmMTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvRm9vQmFyTWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL0Zvb0Jhck1hbmFnZWRCZWFuLmphdmEKQEAgLTIzLDEyICsyMywxMiBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0Jhck1hbmFnZWRCZWFuOjppbml0KCkgIiArIHRoaXMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmFyTWFuYWdlZEJlYW46OmluaXQoKSAiICsgdGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0Jhck1hbmFnZWRCZWFuOjpkZXN0cm95KCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CYXJNYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9Gb29NYW5hZ2VkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9Gb29NYW5hZ2VkQmVhbi5qYXZhCmluZGV4IGZmMWE0NTMuLmYwNDExYTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvRm9vTWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL0Zvb01hbmFnZWRCZWFuLmphdmEKQEAgLTM2LDMzICszNiwzMyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjppbml0KCkgIiArIHRoaXMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmluaXQoKSAiICsgdGhpcyk7CiAgICAgfQotICAgIAorCiAKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JcmV0dXJuICJzb21lbWFuYWdlZGJlYW4iOworICAgIHJldHVybiAic29tZW1hbmFnZWRiZWFuIjsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBmb28oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjo6Zm9vKCkgIik7Ci0JYm1iLmJhcigpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmZvbygpICIpOworICAgIGJtYi5iYXIoKTsKICAgICB9CiAKICAgICBwdWJsaWMgT2JqZWN0IGdldFRoaXMoKSB7Ci0JcmV0dXJuIHRoaXM7CisgICAgcmV0dXJuIHRoaXM7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjpkZXN0cm95KCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOwogICAgIH0KIAogCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQlyZXR1cm4gIkZvb01hbmFnZWRCZWFuIHRoaXMgPSAiICsgc3VwZXIudG9TdHJpbmcoKSArIAotCQkJICAgIiBzID0gIiArIHMgKyAiICwgb3JiID0gIiArIG9yYiArIAotCSAgICAiICwgYm1iID0gIiArIGJtYiArICIgLCBlbSA9ICIgKyBlbTsKKyAgICByZXR1cm4gIkZvb01hbmFnZWRCZWFuIHRoaXMgPSAiICsgc3VwZXIudG9TdHJpbmcoKSArCisgICAgICAgICAgICAgICAiIHMgPSAiICsgcyArICIgLCBvcmIgPSAiICsgb3JiICsKKyAgICAgICAgIiAsIGJtYiA9ICIgKyBibWIgKyAiICwgZW0gPSAiICsgZW07CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL0hlbGxvU2luZ2xldG9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL0hlbGxvU2luZ2xldG9uLmphdmEKaW5kZXggOWY2NmQwMS4uYjlkZDRhNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9IZWxsb1NpbmdsZXRvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvSGVsbG9TaW5nbGV0b24uamF2YQpAQCAtMzksOSArMzksOSBAQAogICAgIEBSZXNvdXJjZShuYW1lPSJqYXZhOm1vZHVsZS9lbnYvTU9SQjIiKQogICAgIHByaXZhdGUgT1JCIG9yYjsKIAotICAgIEBSZXNvdXJjZSAKKyAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIEZvb01hbmFnZWRCZWFuIGZvbzsKLSAgICAKKwogICAgIEBSZXNvdXJjZShuYW1lPSJmb28ycmVmIiwgbWFwcGVkTmFtZT0iamF2YTptb2R1bGUvc29tZW1hbmFnZWRiZWFuIikKICAgICBwcml2YXRlIEZvb01hbmFnZWRCZWFuIGZvbzI7CiAKQEAgLTU5LDU5ICs1OSw1OSBAQAogCiAgICAgQEVKQihuYW1lPSJqYXZhOmFwcC9lbnYvYXBwTGV2ZWxFamJSZWYiKQogICAgIHByaXZhdGUgSGVsbG8gaGVsbG87Ci0gICAgCisKICAgICBTdHJpbmcgYXBwTmFtZTsKICAgICBTdHJpbmcgbW9kdWxlTmFtZTsKIAotICAgIEBQb3N0Q29uc3RydWN0ICAgIAorICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1NpbmdsZXRvbjo6aW5pdCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1NpbmdsZXRvbjo6aW5pdCgpIik7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIm15U3RyaW5nID0gJyIgKyBteVN0cmluZyArICInIik7Ci0JaWYoIChteVN0cmluZyA9PSBudWxsKSB8fCAhKG15U3RyaW5nLmVxdWFscygibXlTdHJpbmciKSApICkgewotCSAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW52YWxpZCB2YWx1ZSAiICsgbXlTdHJpbmcgKyAiIGZvciBteVN0cmluZyIpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm15U3RyaW5nID0gJyIgKyBteVN0cmluZyArICInIik7CisgICAgaWYoIChteVN0cmluZyA9PSBudWxsKSB8fCAhKG15U3RyaW5nLmVxdWFscygibXlTdHJpbmciKSApICkgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW52YWxpZCB2YWx1ZSAiICsgbXlTdHJpbmcgKyAiIGZvciBteVN0cmluZyIpOworICAgIH0KIAotCWFwcE5hbWUgPSAoU3RyaW5nKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTphcHAvQXBwTmFtZSIpOwotCW1vZHVsZU5hbWUgPSAoU3RyaW5nKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvTW9kdWxlTmFtZSIpOworICAgIGFwcE5hbWUgPSAoU3RyaW5nKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTphcHAvQXBwTmFtZSIpOworICAgIG1vZHVsZU5hbWUgPSAoU3RyaW5nKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvTW9kdWxlTmFtZSIpOwogCi0JT1JCIG9yYjEgPSAoT1JCKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvTU9SQjEiKTsKLQlPUkIgb3JiMiA9IChPUkIpIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvTU9SQjIiKTsKKyAgICBPUkIgb3JiMSA9IChPUkIpIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9NT1JCMSIpOworICAgIE9SQiBvcmIyID0gKE9SQikgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL2Vudi9NT1JCMiIpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJBcHBOYW1lID0gIiArIGFwcE5hbWUpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiTW9kdWxlTmFtZSA9ICIgKyBtb2R1bGVOYW1lKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFwcE5hbWUgPSAiICsgYXBwTmFtZSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJNb2R1bGVOYW1lID0gIiArIG1vZHVsZU5hbWUpOwogCi0JZm9vNCA9IChGb29NYW5hZ2VkQmVhbikgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL3NvbWVtYW5hZ2VkYmVhbiIpOwotCWZvbzUgPSAoRm9vTWFuYWdlZEJlYW4pIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmFwcC8iICsgbW9kdWxlTmFtZSArCi0JCQkJCQkgICIvc29tZW1hbmFnZWRiZWFuIik7Ci0JZm9vNiA9IChGb28pIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmFwcC8iICsgbW9kdWxlTmFtZSArCi0JCQkJCQkgICIvc29tZW1hbmFnZWRiZWFuIik7Ci0JZm9vNyA9IChGb29NYW5hZ2VkQmVhbikgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvZm9vMnJlZiIpOwotCWZvbzggPSAoRm9vKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9mb28zcmVmIik7CisgICAgZm9vNCA9IChGb29NYW5hZ2VkQmVhbikgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL3NvbWVtYW5hZ2VkYmVhbiIpOworICAgIGZvbzUgPSAoRm9vTWFuYWdlZEJlYW4pIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmFwcC8iICsgbW9kdWxlTmFtZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICIvc29tZW1hbmFnZWRiZWFuIik7CisgICAgZm9vNiA9IChGb28pIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmFwcC8iICsgbW9kdWxlTmFtZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICIvc29tZW1hbmFnZWRiZWFuIik7CisgICAgZm9vNyA9IChGb29NYW5hZ2VkQmVhbikgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvZm9vMnJlZiIpOworICAgIGZvbzggPSAoRm9vKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9mb28zcmVmIik7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKLQkKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU2luZ2xldG9uOjpoZWxsbygpIik7CisKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU2luZ2xldG9uOjpoZWxsbygpIik7CiAKIAotCWZvby5mb28oKTsKLQlmb28yLmZvbygpOwotCWZvbzMuZm9vKCk7CisgICAgZm9vLmZvbygpOworICAgIGZvbzIuZm9vKCk7CisgICAgZm9vMy5mb28oKTsKIAotCWZvbzQuZm9vKCk7Ci0JZm9vNS5mb28oKTsKLQlmb282LmZvbygpOwotCWZvbzcuZm9vKCk7Ci0gICAgICAJZm9vOC5mb28oKTsKKyAgICBmb280LmZvbygpOworICAgIGZvbzUuZm9vKCk7CisgICAgZm9vNi5mb28oKTsKKyAgICBmb283LmZvbygpOworICAgICAgICAgIGZvbzguZm9vKCk7CiAKLQlyZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CisgICAgcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOwogICAgIH0KIAogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU2luZ2xldG9uOjpkZXN0cm95KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU2luZ2xldG9uOjpkZXN0cm95KCkiKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvSGVsbG9TdGF0ZWxlc3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvSGVsbG9TdGF0ZWxlc3MuamF2YQppbmRleCAzNTA0NzcxLi4xOGY1NWVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL0hlbGxvU3RhdGVsZXNzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9IZWxsb1N0YXRlbGVzcy5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAKICAgICBAUmVzb3VyY2UobmFtZT0iamF2YTptb2R1bGUvTU9SQjEiKQogICAgIHByaXZhdGUgT1JCIG9yYjsKLSAgICAKKwogICAgIEBFSkIobmFtZT0ibG9va3VwcmVmMSIsIGxvb2t1cD0iamF2YTphcHAvZW52L0FTMSIpCiAgICAgcHJpdmF0ZSBIZWxsbyBsb29rdXByZWYxOwogCkBAIC00MSw1MSArNDEsNTEgQEAKICAgICBwcml2YXRlIEhlbGxvUmVtb3RlIGxvb2t1cHJlZjM7CiAKICAgICAvLyBkZWNsYXJlIGNvbXBvbmVudC1sZXZlbCBkZXBlbmRlbmN5IHVzaW5nIGZ1bGx5LXF1YWxpZmllZAotICAgIC8vIGphdmE6Y29tcC9lbnYgZm9ybS4gIAorICAgIC8vIGphdmE6Y29tcC9lbnYgZm9ybS4KICAgICBAUmVzb3VyY2UobmFtZT0iamF2YTpjb21wL2Vudi9mb28iKSBTZXNzaW9uQ29udGV4dCBzZXNzaW9uQ3R4OwogCi0gICAgQFBvc3RDb25zdHJ1Y3QgCisgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU3RhdGVsZXNzOjppbml0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU3RhdGVsZXNzOjppbml0KCkiKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TdGF0ZWxlc3M6OmhlbGxvKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVsZXNzOjpoZWxsbygpIik7CiAKLQlTdHJpbmcgYXBwTmFtZSA9IChTdHJpbmcpIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmFwcC9BcHBOYW1lIik7Ci0JU3RyaW5nIG1vZHVsZU5hbWUgPSAoU3RyaW5nKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvTW9kdWxlTmFtZSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiQXBwTmFtZSA9ICIgKyBhcHBOYW1lKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIk1vZHVsZU5hbWUgPSAiICsgbW9kdWxlTmFtZSk7CisgICAgU3RyaW5nIGFwcE5hbWUgPSAoU3RyaW5nKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTphcHAvQXBwTmFtZSIpOworICAgIFN0cmluZyBtb2R1bGVOYW1lID0gKFN0cmluZykgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL01vZHVsZU5hbWUiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFwcE5hbWUgPSAiICsgYXBwTmFtZSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJNb2R1bGVOYW1lID0gIiArIG1vZHVsZU5hbWUpOwogCi0JT1JCIG9yYjEgPSAoT1JCKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvTU9SQjEiKTsKLQlPUkIgb3JiMiA9IChPUkIpIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvTU9SQjIiKTsKKyAgICBPUkIgb3JiMSA9IChPUkIpIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9NT1JCMSIpOworICAgIE9SQiBvcmIyID0gKE9SQikgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL2Vudi9NT1JCMiIpOwogCi0JSGVsbG8gczEgPSAoSGVsbG8pIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmdsb2JhbC8iICsKLQkJCQkJICAgYXBwTmFtZSArICIvIiArCi0JCQkJCSAgIG1vZHVsZU5hbWUgKyAiLyIgKwotCQkJCQkgICAiSGVsbG9TaW5nbGV0b24iKTsKKyAgICBIZWxsbyBzMSA9IChIZWxsbykgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6Z2xvYmFsLyIgKworICAgICAgICAgICAgICAgICAgICAgICBhcHBOYW1lICsgIi8iICsKKyAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZSArICIvIiArCisgICAgICAgICAgICAgICAgICAgICAgICJIZWxsb1NpbmdsZXRvbiIpOwogCi0JSGVsbG8gczIgPSAoSGVsbG8pIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmFwcC8iICsKLQkJCQkJCQkgbW9kdWxlTmFtZSArICIvIiArCi0JCQkJCQkJICJIZWxsb1NpbmdsZXRvbiIpOworICAgIEhlbGxvIHMyID0gKEhlbGxvKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTphcHAvIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWUgKyAiLyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsbG9TaW5nbGV0b24iKTsKIAotCS8vIFJlbHkgb24gZGVmYXVsdCB0byByZXNvbHZlICJqYXZhOmNvbXAvZW52LyBkZWNsYXJlZCByZXNvdXJjZQotCVNlc3Npb25Db250ZXh0IHNjMSA9IChTZXNzaW9uQ29udGV4dCkKLQkgICAgc2Vzc2lvbkN0eC5sb29rdXAoImZvbyIpOworICAgIC8vIFJlbHkgb24gZGVmYXVsdCB0byByZXNvbHZlICJqYXZhOmNvbXAvZW52LyBkZWNsYXJlZCByZXNvdXJjZQorICAgIFNlc3Npb25Db250ZXh0IHNjMSA9IChTZXNzaW9uQ29udGV4dCkKKyAgICAgICAgc2Vzc2lvbkN0eC5sb29rdXAoImZvbyIpOwogCi0JU2Vzc2lvbkNvbnRleHQgc2MyID0gKFNlc3Npb25Db250ZXh0KQotCSAgICBzYzEubG9va3VwKCJqYXZhOmNvbXAvZW52L2ZvbyIpOworICAgIFNlc3Npb25Db250ZXh0IHNjMiA9IChTZXNzaW9uQ29udGV4dCkKKyAgICAgICAgc2MxLmxvb2t1cCgiamF2YTpjb21wL2Vudi9mb28iKTsKIAotCUludGVnZXIgZW52RW50cnkgPSAoSW50ZWdlcikKLQkgICAgc2MxLmxvb2t1cCgiamF2YTphcHAvZW52L3ZhbHVlMSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiamF2YTphcC9lbnYvdmFsdWUxID0gIiArIGVudkVudHJ5KTsKKyAgICBJbnRlZ2VyIGVudkVudHJ5ID0gKEludGVnZXIpCisgICAgICAgIHNjMS5sb29rdXAoImphdmE6YXBwL2Vudi92YWx1ZTEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImphdmE6YXAvZW52L3ZhbHVlMSA9ICIgKyBlbnZFbnRyeSk7CiAKLQlyZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CisgICAgcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1N0YXRlbGVzczo6ZGVzdHJveSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1N0YXRlbGVzczo6ZGVzdHJveSgpIik7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL0ludGVyY2VwdG9yQS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9JbnRlcmNlcHRvckEuamF2YQppbmRleCA3MzA3Y2FlLi5mNTlhZmQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL0ludGVyY2VwdG9yQS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvSW50ZXJjZXB0b3JBLmphdmEKQEAgLTM1LDIxICszNSwyMSBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdChJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQTo6aW5pdCgpICIpOwotCWMucHJvY2VlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JBOjppbml0KCkgIik7CisgICAgYy5wcm9jZWVkKCk7CiAgICAgfQogCiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCByb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQTo6cm91bmRJbnZva2UoKSAiKTsKLQlyZXR1cm4gYy5wcm9jZWVkKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckE6OnJvdW5kSW52b2tlKCkgIik7CisgICAgcmV0dXJuIGMucHJvY2VlZCgpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvcjo6ZGVzdHJveSgpICIpOwotCWMucHJvY2VlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3I6OmRlc3Ryb3koKSAiKTsKKyAgICBjLnByb2NlZWQoKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvSW50ZXJjZXB0b3JTdXBlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9JbnRlcmNlcHRvclN1cGVyLmphdmEKaW5kZXggNGFkYmQwMy4uMWI5MzI1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9JbnRlcmNlcHRvclN1cGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9JbnRlcmNlcHRvclN1cGVyLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIAogICAgIEBBcm91bmRJbnZva2UKICAgICBwcm90ZWN0ZWQgT2JqZWN0IHJvdW5kSW52b2tlKEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJTaG91bGQgbm90IHJlYWNoIGhlcmUiKTsKKyAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiU2hvdWxkIG5vdCByZWFjaCBoZXJlIik7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL01hbmFnZWRTdXBlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9NYW5hZ2VkU3VwZXIuamF2YQppbmRleCBkZTFlMzVhLi40YjZlMGQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL01hbmFnZWRTdXBlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvTWFuYWdlZFN1cGVyLmphdmEKQEAgLTI4LDE3ICsyOCwxNyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1hbmFnZWRTdXBlcjo6aW5pdCgpICIgKyB0aGlzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1hbmFnZWRTdXBlcjo6aW5pdCgpICIgKyB0aGlzKTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWFuYWdlZFN1cGVyOjpkZXN0cm95KCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBNYW5hZ2VkU3VwZXI6OmRlc3Ryb3koKSAiKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCXJldHVybiAiTWFuYWdlZFN1cGVyIHRoaXMgPSAiICsgc3VwZXIudG9TdHJpbmcoKSArIAotCSAgICAiIHMgPSAiICsgcyArICIgLCBkcyA9ICIgKyBkczsKKyAgICByZXR1cm4gIk1hbmFnZWRTdXBlciB0aGlzID0gIiArIHN1cGVyLnRvU3RyaW5nKCkgKworICAgICAgICAiIHMgPSAiICsgcyArICIgLCBkcyA9ICIgKyBkczsKIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9TaW5nbGV0b24yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL1NpbmdsZXRvbjIuamF2YQppbmRleCA1M2VjZDE2Li42MjhmNzQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL1NpbmdsZXRvbjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL1NpbmdsZXRvbjIuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjI6OmluaXQoKSIpOwogICAgIH0KLSAgICAKKwogICAgIEBQcmVEZXN0cm95CiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuMjo6ZGVzdHJveSgpIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL1NpbmdsZXRvbjMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvU2luZ2xldG9uMy5qYXZhCmluZGV4IDY0NDlmN2EuLmEzNmJiZTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvU2luZ2xldG9uMy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvU2luZ2xldG9uMy5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuMzo6aW5pdCgpIik7CiAgICAgfQotICAgIAorCiAgICAgQFByZURlc3Ryb3kKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW4zOjpkZXN0cm95KCkiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvU2luZ2xldG9uNC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9TaW5nbGV0b240LmphdmEKaW5kZXggNDNlNjQ5YS4uYjZlMjA0YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9TaW5nbGV0b240LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9TaW5nbGV0b240LmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW40Ojppbml0KCkiKTsKICAgICB9Ci0gICAgCisKICAgICBAUHJlRGVzdHJveQogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjQ6OmRlc3Ryb3koKSIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL3dhci9Gb28yTWFuYWdlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci93YXIvRm9vMk1hbmFnZWRCZWFuLmphdmEKaW5kZXggOWJmYzhiMC4uYzQ1N2QxZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL3dhci9Gb28yTWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvd2FyL0ZvbzJNYW5hZ2VkQmVhbi5qYXZhCkBAIC0zMywyOCArMzMsMjggQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb28yTWFuYWdlZEJlYW46OmluaXQoKSAiICsgdGhpcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb28yTWFuYWdlZEJlYW46OmluaXQoKSAiICsgdGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZm9vKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vMk1hbmFnZWRCZWFuOjpmb28oKSAiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvbzJNYW5hZ2VkQmVhbjo6Zm9vKCkgdGVzdGluZyBARUpCOiAiICsgcy5oZWxsbygpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvbzJNYW5hZ2VkQmVhbjo6Zm9vKCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb28yTWFuYWdlZEJlYW46OmZvbygpIHRlc3RpbmcgQEVKQjogIiArIHMuaGVsbG8oKSk7CiAgICAgfQogCiAgICAgcHVibGljIE9iamVjdCBnZXRUaGlzKCkgewotCXJldHVybiB0aGlzOworICAgIHJldHVybiB0aGlzOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb28yTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvbzJNYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOwogICAgIH0KIAogCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQlyZXR1cm4gIkZvbzJNYW5hZ2VkQmVhbiB0aGlzID0gIiArIAotCQkJICAgIiBzID0gIiArIHMgKyAiICwgb3JiID0gIiArIG9yYiArIAotCSAgICAiICwgZW0gPSAiICsgZW07CisgICAgcmV0dXJuICJGb28yTWFuYWdlZEJlYW4gdGhpcyA9ICIgKworICAgICAgICAgICAgICAgIiBzID0gIiArIHMgKyAiICwgb3JiID0gIiArIG9yYiArCisgICAgICAgICIgLCBlbSA9ICIgKyBlbTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci93YXIvRm9vQmFyTWFuYWdlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci93YXIvRm9vQmFyTWFuYWdlZEJlYW4uamF2YQppbmRleCA5NzA1MjNmLi40OTQ3ZjE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvd2FyL0Zvb0Jhck1hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL3dhci9Gb29CYXJNYW5hZ2VkQmVhbi5qYXZhCkBAIC0yMywxMiArMjMsMTIgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CYXJNYW5hZ2VkQmVhbjo6aW5pdCgpICIgKyB0aGlzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0Jhck1hbmFnZWRCZWFuOjppbml0KCkgIiArIHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CYXJNYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmFyTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci93YXIvSGVsbG9TLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvd2FyL0hlbGxvUy5qYXZhCmluZGV4IGY5Zjk1NGUuLmJhMjAxMzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci93YXIvSGVsbG9TLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL3dhci9IZWxsb1MuamF2YQpAQCAtMzQsNyArMzQsNyBAQAogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvUzo6ZGVzdHJveSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1M6OmRlc3Ryb3koKSIpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL3dhci9IZWxsb1MyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvd2FyL0hlbGxvUzIuamF2YQppbmRleCBhYjZjMTlmLi41MzYyODQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvd2FyL0hlbGxvUzIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvd2FyL0hlbGxvUzIuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvUzI6OmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TMjo6ZGVzdHJveSgpIik7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvd2FyL0hlbGxvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL3dhci9IZWxsb1NlcnZsZXQuamF2YQppbmRleCA1MjEyODMyLi4zY2UxOWI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvd2FyL0hlbGxvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci93YXIvSGVsbG9TZXJ2bGV0LmphdmEKQEAgLTYzLDkgKzYzLDkgQEAKICAgICBwcml2YXRlIEhlbGxvUmVtb3RlIHN0YXRlbGVzczE7CiAgICAgcHJpdmF0ZSBIZWxsb1JlbW90ZSBzdGF0ZWxlc3MyOwogCi0gICAgQFJlc291cmNlIAorICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgRm9vMk1hbmFnZWRCZWFuIGZvbzsKLSAgICAKKwogICAgIEBSZXNvdXJjZShuYW1lPSJmb28ycmVmIiwgbWFwcGVkTmFtZT0iamF2YTptb2R1bGUvc29tZW1hbmFnZWRiZWFuIikKICAgICBwcml2YXRlIEZvbzJNYW5hZ2VkQmVhbiBmb28yOwogCkBAIC04MiwxMTIgKzgyLDExMiBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmluaXQiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIm15U3RyaW5nID0gJyIgKyBteVN0cmluZyArICInIik7Ci0JaWYoIChteVN0cmluZyA9PSBudWxsKSB8fCAhKG15U3RyaW5nLmVxdWFscygibXlTdHJpbmciKSApICkgewotCSAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW52YWxpZCB2YWx1ZSAiICsgbXlTdHJpbmcgKyAiIGZvciBteVN0cmluZyIpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2VydmxldDo6aW5pdCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigibXlTdHJpbmcgPSAnIiArIG15U3RyaW5nICsgIiciKTsKKyAgICBpZiggKG15U3RyaW5nID09IG51bGwpIHx8ICEobXlTdHJpbmcuZXF1YWxzKCJteVN0cmluZyIpICkgKSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbnZhbGlkIHZhbHVlICIgKyBteVN0cmluZyArICIgZm9yIG15U3RyaW5nIik7CisgICAgfQogCiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmRvR2V0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmRvR2V0Iik7CiAKLQlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKIAogCi0JdHJ5IHsKLQkgICAgCi0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgdHJ5IHsKIAotCSAgICBTdHJpbmcgYXBwTmFtZSA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTphcHAvQXBwTmFtZSIpOwotCSAgICBTdHJpbmcgbW9kdWxlTmFtZSA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTptb2R1bGUvTW9kdWxlTmFtZSIpOworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCi0JICAgIC8vIGxvb2t1cCB2aWEgaW50ZXJtZWRpYXRlIGNvbnRleHQgCi0JICAgIENvbnRleHQgYXBwQ3R4ID0gKENvbnRleHQpIGljLmxvb2t1cCgiamF2YTphcHAiKTsKLQkgICAgQ29udGV4dCBhcHBDdHhFbnYgPSAoQ29udGV4dCkgYXBwQ3R4Lmxvb2t1cCgiZW52Iik7Ci0JICAgIHN0YXRlbGVzczIgPSAoSGVsbG9SZW1vdGUpIGFwcEN0eEVudi5sb29rdXAoIkFTMiIpOwotCSAgICBOYW1pbmdFbnVtZXJhdGlvbjxCaW5kaW5nPiBiaW5kaW5ncyA9IGFwcEN0eEVudi5saXN0QmluZGluZ3MoIiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImphdmE6YXBwL2Vudi8gYmluZGluZ3MgIik7Ci0JICAgIHdoaWxlKGJpbmRpbmdzLmhhc01vcmUoKSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oImJpbmRpbmcgOiAiICsgYmluZGluZ3MubmV4dCgpLmdldE5hbWUoKSk7Ci0JICAgIH0KKyAgICAgICAgU3RyaW5nIGFwcE5hbWUgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6YXBwL0FwcE5hbWUiKTsKKyAgICAgICAgU3RyaW5nIG1vZHVsZU5hbWUgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL01vZHVsZU5hbWUiKTsKKworICAgICAgICAvLyBsb29rdXAgdmlhIGludGVybWVkaWF0ZSBjb250ZXh0CisgICAgICAgIENvbnRleHQgYXBwQ3R4ID0gKENvbnRleHQpIGljLmxvb2t1cCgiamF2YTphcHAiKTsKKyAgICAgICAgQ29udGV4dCBhcHBDdHhFbnYgPSAoQ29udGV4dCkgYXBwQ3R4Lmxvb2t1cCgiZW52Iik7CisgICAgICAgIHN0YXRlbGVzczIgPSAoSGVsbG9SZW1vdGUpIGFwcEN0eEVudi5sb29rdXAoIkFTMiIpOworICAgICAgICBOYW1pbmdFbnVtZXJhdGlvbjxCaW5kaW5nPiBiaW5kaW5ncyA9IGFwcEN0eEVudi5saXN0QmluZGluZ3MoIiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImphdmE6YXBwL2Vudi8gYmluZGluZ3MgIik7CisgICAgICAgIHdoaWxlKGJpbmRpbmdzLmhhc01vcmUoKSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImJpbmRpbmcgOiAiICsgYmluZGluZ3MubmV4dCgpLmdldE5hbWUoKSk7CisgICAgICAgIH0KIAogCi0JICAgIGZvbzQgPSAoRm9vMk1hbmFnZWRCZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL3NvbWVtYW5hZ2VkYmVhbiIpOwotCSAgICBmb281ID0gKEZvbzJNYW5hZ2VkQmVhbikgaWMubG9va3VwKCJqYXZhOmFwcC8iICsgbW9kdWxlTmFtZSArCi0JCQkJCQkgICIvc29tZW1hbmFnZWRiZWFuIik7Ci0JICAgIGZvbzYgPSAoRm9vKSBpYy5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1mdWxsLWVhci1lamIvc29tZW1hbmFnZWRiZWFuIik7Ci0JICAgIGZvbzcgPSAoRm9vMk1hbmFnZWRCZWFuKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZm9vMnJlZiIpOwotCSAgICBmb284ID0gKEZvbykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ZvbzNyZWYiKTsKKyAgICAgICAgZm9vNCA9IChGb28yTWFuYWdlZEJlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvc29tZW1hbmFnZWRiZWFuIik7CisgICAgICAgIGZvbzUgPSAoRm9vMk1hbmFnZWRCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwLyIgKyBtb2R1bGVOYW1lICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIi9zb21lbWFuYWdlZGJlYW4iKTsKKyAgICAgICAgZm9vNiA9IChGb28pIGljLmxvb2t1cCgiamF2YTphcHAvZWpiLWVqYjMxLWZ1bGwtZWFyLWVqYi9zb21lbWFuYWdlZGJlYW4iKTsKKyAgICAgICAgZm9vNyA9IChGb28yTWFuYWdlZEJlYW4pIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9mb28ycmVmIik7CisgICAgICAgIGZvbzggPSAoRm9vKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZm9vM3JlZiIpOwogCiAKLQkgICAgc2luZ2xldG9uMSA9IChIZWxsbykgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9tMSIpOworICAgICAgICBzaW5nbGV0b24xID0gKEhlbGxvKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL20xIik7CiAKLQkgICAgLy8gc3RhbmRhcmQgamF2YTphcHAgbmFtZSBmb3IgZWpiIAotCSAgICBzaW5nbGV0b24yID0gKEhlbGxvKSBpYy5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1mdWxsLWVhci1lamIvSGVsbG9TaW5nbGV0b24iKTsKKyAgICAgICAgLy8gc3RhbmRhcmQgamF2YTphcHAgbmFtZSBmb3IgZWpiCisgICAgICAgIHNpbmdsZXRvbjIgPSAoSGVsbG8pIGljLmxvb2t1cCgiamF2YTphcHAvZWpiLWVqYjMxLWZ1bGwtZWFyLWVqYi9IZWxsb1NpbmdsZXRvbiIpOwogCi0JICAgIHNpbmdsZXRvbjMgPSAoSGVsbG8pIGljLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL2VqYi1lamIzMS1mdWxsLWVhci1lamIvSGVsbG9TaW5nbGV0b24iKTsKKyAgICAgICAgc2luZ2xldG9uMyA9IChIZWxsbykgaWMubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvZWpiLWVqYjMxLWZ1bGwtZWFyLWVqYi9IZWxsb1NpbmdsZXRvbiIpOwogCi0JICAgIC8vIGxvb2t1cCBzb21lIGphdmE6YXBwIGRlZmluZWQgYnkgZWpiLWphcgotCSAgICBzaW5nbGV0b240ID0gKEhlbGxvKSBpYy5sb29rdXAoImphdmE6YXBwL2Vudi9BUzEiKTsKKyAgICAgICAgLy8gbG9va3VwIHNvbWUgamF2YTphcHAgZGVmaW5lZCBieSBlamItamFyCisgICAgICAgIHNpbmdsZXRvbjQgPSAoSGVsbG8pIGljLmxvb2t1cCgiamF2YTphcHAvZW52L0FTMSIpOwogCi0JICAgIC8vIGdsb2JhbCBkZXBlbmRlbmN5Ci0JICAgIHNpbmdsZXRvbjUgPSAoSGVsbG8pIGljLmxvb2t1cCgiamF2YTpnbG9iYWwvR1MxIik7CisgICAgICAgIC8vIGdsb2JhbCBkZXBlbmRlbmN5CisgICAgICAgIHNpbmdsZXRvbjUgPSAoSGVsbG8pIGljLmxvb2t1cCgiamF2YTpnbG9iYWwvR1MxIik7CiAKIAotCSAgICBzdGF0ZWxlc3MxID0gKEhlbGxvUmVtb3RlKSBpYy5sb29rdXAoImphdmE6YXBwL2Vudi9BUzIiKTsKKyAgICAgICAgc3RhdGVsZXNzMSA9IChIZWxsb1JlbW90ZSkgaWMubG9va3VwKCJqYXZhOmFwcC9lbnYvQVMyIik7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeSBBcHBOYW1lID0gIiArIAotCQkJICAgICAgIGljLmxvb2t1cCgiamF2YTphcHAvQXBwTmFtZSIpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeSBBcHBOYW1lID0gIiArCisgICAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmFwcC9BcHBOYW1lIikpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXkgTW9kdWxlTmFtZSA9ICIgKyAKLQkJCSAgICAgICBpYy5sb29rdXAoImphdmE6bW9kdWxlL01vZHVsZU5hbWUiKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXkgTW9kdWxlTmFtZSA9ICIgKworICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTptb2R1bGUvTW9kdWxlTmFtZSIpKTsKIAogCiAKLQkgICAgdHJ5IHsKLQkJb3JnLm9tZy5DT1JCQS5PUkIgb3JiID0gKG9yZy5vbWcuQ09SQkEuT1JCKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL01PUkIxIik7Ci0JCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJTaG91bGQgaGF2ZSBnb3R0ZW4gbmFtaW5nIGV4Y2VwdGlvbiIpOwotCSAgICB9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBuZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSB3YXMgKm5vdCogYWJsZSB0byBzZWUgZWpiLWphciBtb2R1bGUtbGV2ZWwgZGVwZW5kZW5jeSIpOwotCSAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgIG9yZy5vbWcuQ09SQkEuT1JCIG9yYiA9IChvcmcub21nLkNPUkJBLk9SQikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9NT1JCMSIpOworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiU2hvdWxkIGhhdmUgZ290dGVuIG5hbWluZyBleGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgd2FzICpub3QqIGFibGUgdG8gc2VlIGVqYi1qYXIgbW9kdWxlLWxldmVsIGRlcGVuZGVuY3kiKTsKKyAgICAgICAgfQogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogCi0JZm9vLmZvbygpOwotCWZvbzIuZm9vKCk7Ci0JZm9vMy5mb28oKTsKKyAgICBmb28uZm9vKCk7CisgICAgZm9vMi5mb28oKTsKKyAgICBmb28zLmZvbygpOwogCi0JZm9vNC5mb28oKTsKLQlmb281LmZvbygpOwotCWZvbzYuZm9vKCk7Ci0JZm9vNy5mb28oKTsKLSAgICAgIAlmb284LmZvbygpOworICAgIGZvbzQuZm9vKCk7CisgICAgZm9vNS5mb28oKTsKKyAgICBmb282LmZvbygpOworICAgIGZvbzcuZm9vKCk7CisgICAgICAgICAgZm9vOC5mb28oKTsKIAotCW0xLmhlbGxvKCk7Ci0JYTEuaGVsbG8oKTsKLQlhMi5oZWxsbygpOwotCXNpbmdsZXRvbjEuaGVsbG8oKTsKLQlzaW5nbGV0b24yLmhlbGxvKCk7Ci0Jc2luZ2xldG9uMy5oZWxsbygpOwotCXNpbmdsZXRvbjQuaGVsbG8oKTsKLQlzaW5nbGV0b241LmhlbGxvKCk7CisgICAgbTEuaGVsbG8oKTsKKyAgICBhMS5oZWxsbygpOworICAgIGEyLmhlbGxvKCk7CisgICAgc2luZ2xldG9uMS5oZWxsbygpOworICAgIHNpbmdsZXRvbjIuaGVsbG8oKTsKKyAgICBzaW5nbGV0b24zLmhlbGxvKCk7CisgICAgc2luZ2xldG9uNC5oZWxsbygpOworICAgIHNpbmdsZXRvbjUuaGVsbG8oKTsKIAotCXN0YXRlbGVzczEuaGVsbG8oKTsKLQlzdGF0ZWxlc3MyLmhlbGxvKCk7CisgICAgc3RhdGVsZXNzMS5oZWxsbygpOworICAgIHN0YXRlbGVzczIuaGVsbG8oKTsKIAogCi0gICAgICAgCW91dC5wcmludGxuKCI8SFRNTD4gPEhFQUQ+IDxUSVRMRT4gSk1TIFNlcnZsZXQgT3V0cHV0IDwvVElUTEU+IDwvSEVBRD4gPEJPRFkgQkdDT0xPUj13aGl0ZT4iKTsKKyAgICAgICAgICAgb3V0LnByaW50bG4oIjxIVE1MPiA8SEVBRD4gPFRJVExFPiBKTVMgU2VydmxldCBPdXRwdXQgPC9USVRMRT4gPC9IRUFEPiA8Qk9EWSBCR0NPTE9SPXdoaXRlPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxDRU5URVI+IDxGT05UIHNpemU9KzEgQ09MT1I9Ymx1ZT5EYXRhYmFzZVNlcnZlbHQgOjogQWxsIGluZm9ybWF0aW9uIEkgY2FuIGdpdmUgPC9GT05UPiA8L0NFTlRFUj4gPHA+ICIgKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gQ29udGV4dCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRDb250ZXh0UGF0aCgpICsgIjxicj4iICk7IAotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBTZXJ2bGV0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldFNlcnZsZXRQYXRoKCkgKyAiPGJyPiIgKTsgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBhdGggSW5mbyA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0UGF0aEluZm8oKSArICI8YnI+IiApOyAKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gQ29udGV4dCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRDb250ZXh0UGF0aCgpICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFNlcnZsZXQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0U2VydmxldFBhdGgoKSArICI8YnI+IiApOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBQYXRoIEluZm8gOiAgPC9GT05UPiAiICsgcmVxLmdldFBhdGhJbmZvKCkgKyAiPGJyPiIgKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L0JPRFk+IDwvSFRNTD4gIik7CiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvYnVpbGQucHJvcGVydGllcwppbmRleCBhZjFjZWI4Li40YjE0NzBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEyICsxNSwxMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWZ1bGwtamNkaWZ1bGwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KLQkKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9idWlsZC54bWwKaW5kZXggMDE0ODExZS4uZTdiZGU0OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgPGphdmFjIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzL3dlbGQtb3NnaS1idW5kbGUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgc3JjZGlyPSJlamIiIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBkZWJ1Zz0ib24iIGZhaWxvbmVycm9yPSJ0cnVlIiBpbmNsdWRlYW50cnVudGltZT0iZmFsc2UiID4KQEAgLTQzLDIzICs0MywyMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iZGVzY3JpcHRvciI+CiAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJiZWFucy54bWwiLz4KLSAgICAgICAgICAgICA8L21ldGFpbmY+IAorICAgICAgICAgICAgIDwvbWV0YWluZj4KICAgICAgICAgPC9qYXI+Ci0JPCEtLSBkbyBjbGllbnQgY29tcGlsZSBhZnRlciBzbyB0aGUgY2xhc3NlcyBhcmVuJ3QgcGFydCBvZiBlamItamFyIC0tPgorICAgIDwhLS0gZG8gY2xpZW50IGNvbXBpbGUgYWZ0ZXIgc28gdGhlIGNsYXNzZXMgYXJlbid0IHBhcnQgb2YgZWpiLWphciAtLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY3LDkgKzY3LDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CkBAIC04MSw3ICs4MSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYTc2MWQyOS4uNTA5YjE3NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjYsMzcgKzI2LDM3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCi0JYXBwTmFtZSA9IGFyZ3NbMF07IAotCXN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7Ci0JQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7ICAgICAgIAotICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3NbMV0pOwkKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOworICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOworICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3NbMV0pOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7CiAgICAgfQogCi0gICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7CQorICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmcgb3RoZXJBcHApIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICBTaW5nbGV0b25SZW1vdGUgc2luZ2xldG9uID0gKFNpbmdsZXRvblJlbW90ZSkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU2luZ2xldG9uQmVhbiIpOworICAgICAgICBTaW5nbGV0b25SZW1vdGUgc2luZ2xldG9uID0gKFNpbmdsZXRvblJlbW90ZSkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU2luZ2xldG9uQmVhbiIpOwogCi0JICAgIHNpbmdsZXRvbi5oZWxsbygpOworICAgICAgICBzaW5nbGV0b24uaGVsbG8oKTsKIAotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9CYXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9CYXIuamF2YQppbmRleCBjOTc4MTc4Li5lOGYxYjllIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvQmFyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL0Jhci5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgQFJlc291cmNlKG5hbWU9ImpkYmMvX19kZWZhdWx0IikgamF2YXguc3FsLkRhdGFTb3VyY2UgZHM7CiAKICAgICBwdWJsaWMgQmFyKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiQ29uc3RydWN0ZWQ6OkJhciIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29uc3RydWN0ZWQ6OkJhciIpOwogICAgIH0KIAogICAgIEBQb3N0Q29uc3RydWN0CkBAIC00Niw3ICs0Niw3IEBACiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQlyZXR1cm4gIkJhciI7CisgICAgcmV0dXJuICJCYXIiOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL0JhcjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9CYXIyLmphdmEKaW5kZXggNWJlZDVjMi4uOTcyNWU1ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL0JhcjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvQmFyMi5qYXZhCkBAIC0xOSwxMSArMTksMTEgQEAKIHB1YmxpYyBjbGFzcyBCYXIyIHsKIAogICAgIHB1YmxpYyBCYXIyKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiQ29uc3RydWN0ZWQ6OkJhcjIiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbnN0cnVjdGVkOjpCYXIyIik7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQlyZXR1cm4gIkJhcjIiOworICAgIHJldHVybiAiQmFyMiI7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvRGVwZW5kZW50V2l0aEluamVjdGVkRGF0YVNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL0RlcGVuZGVudFdpdGhJbmplY3RlZERhdGFTb3VyY2UuamF2YQppbmRleCA2NzU0NWUyLi4yMzQ1OGZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvRGVwZW5kZW50V2l0aEluamVjdGVkRGF0YVNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9EZXBlbmRlbnRXaXRoSW5qZWN0ZWREYXRhU291cmNlLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKICAgICBwcml2YXRlIGphdmF4LnNxbC5EYXRhU291cmNlIGRzOwogCiAgICAgcHVibGljIERlcGVuZGVudFdpdGhJbmplY3RlZERhdGFTb3VyY2UoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJDb25zdHJ1Y3RlZDo6RGVwZW5kZW50V2l0aEluamVjdGVkRGF0YVNvdXJjZSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29uc3RydWN0ZWQ6OkRlcGVuZGVudFdpdGhJbmplY3RlZERhdGFTb3VyY2UiKTsKICAgICB9CiAKICAgICBAUG9zdENvbnN0cnVjdApAQCAtNDAsNyArNDAsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JcmV0dXJuICJEZXBlbmRlbnRXaXRoSW5qZWN0ZWREYXRhU291cmNlIjsKKyAgICByZXR1cm4gIkRlcGVuZGVudFdpdGhJbmplY3RlZERhdGFTb3VyY2UiOwogICAgIH0KIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL0Zvby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL0Zvby5qYXZhCmluZGV4IGUwMmEzMDYuLjk4ZTU5NmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9Gb28uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvRm9vLmphdmEKQEAgLTI2LDEyICsyNiwxMiBAQAogICAgIGludCBpZCA9IDA7CiAKICAgICBwdWJsaWMgRm9vKCkgewotCWlkID0gY291bnQ7Ci0JY291bnQrKzsKKyAgICBpZCA9IGNvdW50OworICAgIGNvdW50Kys7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQlyZXR1cm4gIkZvbyIgKyBpZDsKKyAgICByZXR1cm4gIkZvbyIgKyBpZDsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9Gb29NYW5hZ2VkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL0Zvb01hbmFnZWRCZWFuLmphdmEKaW5kZXggMGQyYjgzMC4uMzczOWQ0NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL0Zvb01hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL0Zvb01hbmFnZWRCZWFuLmphdmEKQEAgLTM1LDI3ICszNSwyNyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOmluaXQoKSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigib3JiID0gIiArIG9yYik7Ci0JaWYoIG9yYiA9PSBudWxsICkgewotCSAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigibnVsbCBvcmIiKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjppbml0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9yYiA9ICIgKyBvcmIpOworICAgIGlmKCBvcmIgPT0gbnVsbCApIHsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIm51bGwgb3JiIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmhlbGxvKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjpoZWxsbygpIik7CiAgICAgfQogCiAKICAgICBwdWJsaWMgdm9pZCBhc3NlcnRJbnRlcmNlcHRvckJpbmRpbmcoKSB7Ci0JaWYoICFpbnRlcmNlcHRvcldhc0hlcmUgKSB7Ci0JICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJpbnRlcmNlcHRvciB3YXMgbm90IGhlcmUiKTsKLQl9CisgICAgaWYoICFpbnRlcmNlcHRvcldhc0hlcmUgKSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJpbnRlcmNlcHRvciB3YXMgbm90IGhlcmUiKTsKKyAgICB9CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46ZGVzdHJveSgpIik7CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9Gb29Ob25NYW5hZ2VkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL0Zvb05vbk1hbmFnZWRCZWFuLmphdmEKaW5kZXggOTRmZmM5Ni4uNThhZjA3OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL0Zvb05vbk1hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL0Zvb05vbk1hbmFnZWRCZWFuLmphdmEKQEAgLTI5LDIwICsyOSwyMCBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb05vbk1hbmFnZWRCZWFuOmluaXQoKSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigib3JiID0gIiArIG9yYik7Ci0JaWYoIG9yYiA9PSBudWxsICkgewotCSAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigibnVsbCBvcmIiKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29Ob25NYW5hZ2VkQmVhbjppbml0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9yYiA9ICIgKyBvcmIpOworICAgIGlmKCBvcmIgPT0gbnVsbCApIHsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIm51bGwgb3JiIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTm9uTWFuYWdlZEJlYW46OmhlbGxvKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb05vbk1hbmFnZWRCZWFuOjpoZWxsbygpIik7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb05vbk1hbmFnZWRCZWFuOmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTm9uTWFuYWdlZEJlYW46ZGVzdHJveSgpIik7CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9JbnRlcmNlcHRvckEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9JbnRlcmNlcHRvckEuamF2YQppbmRleCBiNmYwM2VjLi44MzExYzAyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvSW50ZXJjZXB0b3JBLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL0ludGVyY2VwdG9yQS5qYXZhCkBAIC0yNiwyNSArMjYsMjUgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLmVyci5wcmludGxuKCJJbiBJbnRlcmNlcHRvckE6OmluaXQoKSAiKTsKLQljLnByb2NlZWQoKTsKKyAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkluIEludGVyY2VwdG9yQTo6aW5pdCgpICIpOworICAgIGMucHJvY2VlZCgpOwogICAgIH0KIAogCiAgICAgQEFyb3VuZEludm9rZQogICAgIHByaXZhdGUgT2JqZWN0IHJvdW5kSW52b2tlKEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5lcnIucHJpbnRsbigiPT09PiBJbiBJbnRlcmNlcHRvckE6OmFyb3VuZEludm9rZSgpICIpOworICAgIFN5c3RlbS5lcnIucHJpbnRsbigiPT09PiBJbiBJbnRlcmNlcHRvckE6OmFyb3VuZEludm9rZSgpICIpOwogICAgICAgICBpZiAoKGMuZ2V0VGFyZ2V0KCkgaW5zdGFuY2VvZiBTdGF0ZWxlc3NCZWFuKSAmJiBjLmdldE1ldGhvZCgpLmdldE5hbWUoKS5lcXVhbHMoImhlbGxvIikpIHsKICAgICAgICAgICAgIFN0YXRlbGVzc0JlYW4gc2IgPSAoU3RhdGVsZXNzQmVhbiljLmdldFRhcmdldCgpOwogICAgICAgICAgICAgc2IuaW50ZXJjZXB0b3JDYWxsZWQoMCk7CiAgICAgICAgIH0KLQlyZXR1cm4gYy5wcm9jZWVkKCk7CisgICAgcmV0dXJuIGMucHJvY2VlZCgpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLmVyci5wcmludGxuKCJJbiBJbnRlcmNlcHRvckE6OmRlc3Ryb3koKSAiKTsKLQljLnByb2NlZWQoKTsKKyAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkluIEludGVyY2VwdG9yQTo6ZGVzdHJveSgpICIpOworICAgIGMucHJvY2VlZCgpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1NlbnRlbmNlUGFyc2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvU2VudGVuY2VQYXJzZXIuamF2YQppbmRleCBkNDAxY2NlLi4xMTY4ZWFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvU2VudGVuY2VQYXJzZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvU2VudGVuY2VQYXJzZXIuamF2YQpAQCAtMTksMTIgKzE5LDEyIEBACiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAotcHVibGljIGNsYXNzIFNlbnRlbmNlUGFyc2VyICAKLXsgCi0gICAKLSAgIHB1YmxpYyBMaXN0PFN0cmluZz4gcGFyc2UoU3RyaW5nIHRleHQpIAorcHVibGljIGNsYXNzIFNlbnRlbmNlUGFyc2VyCit7CisKKyAgIHB1YmxpYyBMaXN0PFN0cmluZz4gcGFyc2UoU3RyaW5nIHRleHQpCiAgICB7CiAgICAgICByZXR1cm4gQXJyYXlzLmFzTGlzdCggdGV4dC5zcGxpdCgiWy4/XSIpICk7CiAgICB9Ci0gICAKLX0gCisKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9TZW50ZW5jZVRyYW5zbGF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9TZW50ZW5jZVRyYW5zbGF0b3IuamF2YQppbmRleCA3NmYwNzczLi5hNGRkOTJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvU2VudGVuY2VUcmFuc2xhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1NlbnRlbmNlVHJhbnNsYXRvci5qYXZhCkBAIC0xOSwxMiArMTksMTIgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5TdGF0ZWxlc3M7CiAKIEBTdGF0ZWxlc3MKLXB1YmxpYyBjbGFzcyBTZW50ZW5jZVRyYW5zbGF0b3IgaW1wbGVtZW50cyBUcmFuc2xhdG9yIAoteyAKLSAgIAotICAgcHVibGljIFN0cmluZyB0cmFuc2xhdGUoU3RyaW5nIHNlbnRlbmNlKSAKLSAgIHsgCi0gICAgICByZXR1cm4gIkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0IjsgCitwdWJsaWMgY2xhc3MgU2VudGVuY2VUcmFuc2xhdG9yIGltcGxlbWVudHMgVHJhbnNsYXRvcgoreworCisgICBwdWJsaWMgU3RyaW5nIHRyYW5zbGF0ZShTdHJpbmcgc2VudGVuY2UpCisgICB7CisgICAgICByZXR1cm4gIkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0IjsKICAgIH0KLSAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQppbmRleCA4ZDg1M2EyLi4wOGQwZGFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTM4LDE0ICszOCwxNCBAQAogCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgRXZlbnQ8U29tZUV2ZW50PiBzb21lRXZlbnQ7Ci0gICAgCisKICAgICBASW5qZWN0IEZvbyBmb287CiAKICAgICBARUpCCi0JcHJpdmF0ZSBTdGF0ZWxlc3NMb2NhbCBzdGF0ZWxlc3NFRTsKKyAgICBwcml2YXRlIFN0YXRlbGVzc0xvY2FsIHN0YXRlbGVzc0VFOwogCiAgICAgQEluamVjdAotCXByaXZhdGUgU3RhdGVsZXNzTG9jYWwyIHNsMjsKKyAgICBwcml2YXRlIFN0YXRlbGVzc0xvY2FsMiBzbDI7CiAKICAgICBASW5qZWN0IHByaXZhdGUgVHJhbnNsYXRvckNvbnRyb2xsZXIgdGM7CiAKQEAgLTU0LDUyICs1NCw1MiBAQAogCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBCZWFuTWFuYWdlciBiZWFuTWFuYWdlckluamVjdDsKLSAgICAKKwogICAgIEBSZXNvdXJjZSBTZXNzaW9uQ29udGV4dCBzZXNDdHg7CiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aW5pdCgpIik7Ci0JaWYoIGJlYW5NYW5hZ2VySW5qZWN0ID09IG51bGwgKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkJlYW5NYW5hZ2VyIGlzIG51bGwiKTsKLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJCZWFuIG1hbmFnZXIgaW5qZWN0ID0gIiArIGJlYW5NYW5hZ2VySW5qZWN0KTsKLQl0ZXN0SU1DcmVhdGVEZXN0cm95TU8oKTsKKyAgICBpZiggYmVhbk1hbmFnZXJJbmplY3QgPT0gbnVsbCApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiQmVhbk1hbmFnZXIgaXMgbnVsbCIpOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlYW4gbWFuYWdlciBpbmplY3QgPSAiICsgYmVhbk1hbmFnZXJJbmplY3QpOworICAgIHRlc3RJTUNyZWF0ZURlc3Ryb3lNTygpOwogCiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgc29tZSBldmVudC4uLiIpOwotCXNvbWVFdmVudC5maXJlKCBuZXcgU29tZUV2ZW50KDIpICk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIHNvbWUgZXZlbnQuLi4iKTsKKyAgICBzb21lRXZlbnQuZmlyZSggbmV3IFNvbWVFdmVudCgyKSApOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aGVsbG8oKSAiICsgZm9vKTsKLQlzdGF0ZWxlc3NFRS5oZWxsbygpOwotCXNsMi5oZWxsbygpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aGVsbG8oKSAiICsgZm9vKTsKKyAgICBzdGF0ZWxlc3NFRS5oZWxsbygpOworICAgIHNsMi5oZWxsbygpOwogCi0JZm1iLmhlbGxvKCk7Ci0JCi0JQmVhbk1hbmFnZXIgYmVhbk1nciA9IChCZWFuTWFuYWdlcikKLQkgICAgc2VzQ3R4Lmxvb2t1cCgiamF2YTpjb21wL0JlYW5NYW5hZ2VyIik7CisgICAgZm1iLmhlbGxvKCk7CisKKyAgICBCZWFuTWFuYWdlciBiZWFuTWdyID0gKEJlYW5NYW5hZ2VyKQorICAgICAgICBzZXNDdHgubG9va3VwKCJqYXZhOmNvbXAvQmVhbk1hbmFnZXIiKTsKIAogCi0JU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmV0cmlldmVkIGJlYW4gbWFuYWdlciAiICsKLQkJCSAgIGJlYW5NZ3IgKyAiIGZvciBKQ0RJIGVuYWJsZWQgYXBwIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmV0cmlldmVkIGJlYW4gbWFuYWdlciAiICsKKyAgICAgICAgICAgICAgIGJlYW5NZ3IgKyAiIGZvciBKQ0RJIGVuYWJsZWQgYXBwIik7CiAKLQkvKioKLQlTdGF0ZWZ1bEJlYW4gc2IgPSAoU3RhdGVmdWxCZWFuKSBzZXNDdHgubG9va3VwKCJqYXZhOm1vZHVsZS9TdGF0ZWZ1bEJlYW4iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW4gc2IgPSAiICsgc2IpOwotCXNiLmhlbGxvKCk7Ci0JKiovCisgICAgLyoqCisgICAgU3RhdGVmdWxCZWFuIHNiID0gKFN0YXRlZnVsQmVhbikgc2VzQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvU3RhdGVmdWxCZWFuIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuIHNiID0gIiArIHNiKTsKKyAgICBzYi5oZWxsbygpOworICAgICoqLwogCiAgICAgfQogCiAgICAgQFNjaGVkdWxlKHNlY29uZD0iKi8xMCIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiKQotCXByaXZhdGUgdm9pZCB0aW1lb3V0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6dGltZW91dCgpICIgKyBmb28pOworICAgIHByaXZhdGUgdm9pZCB0aW1lb3V0KCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6dGltZW91dCgpICIgKyBmb28pOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJ0Yy5nZXRUZXh0KCkgPSAiICsgdGMuZ2V0VGV4dCgpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRjLmdldFRleHQoKSA9ICIgKyB0Yy5nZXRUZXh0KCkpOwogCi0Jc3RhdGVsZXNzRUUuaGVsbG8oKTsKKyAgICBzdGF0ZWxlc3NFRS5oZWxsbygpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CkBAIC0xMDksMjkgKzEwOSwyOSBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3RJTUNyZWF0ZURlc3Ryb3lNTygpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICAvLyBUZXN0IEluamVjdGlvbk1hbmFnZXIgbWFuYWdlZCBiZWFuIGZ1bmN0aW9uYWxpdHkKLQkgICAgT2JqZWN0IGluamVjdGlvbk1nciA9IG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiY29tLnN1bi5lbnRlcnByaXNlLmNvbnRhaW5lci5jb21tb24uc3BpLnV0aWwuSW5qZWN0aW9uTWFuYWdlciIpOwotCSAgICBNZXRob2QgY3JlYXRlTWFuYWdlZE1ldGhvZCA9IGluamVjdGlvbk1nci5nZXRDbGFzcygpLmdldE1ldGhvZCgiY3JlYXRlTWFuYWdlZE9iamVjdCIsIGphdmEubGFuZy5DbGFzcy5jbGFzcyk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRlIG1hbmFnZWQgb2JqZWN0IG1ldGhvZCA9ICIgKyBjcmVhdGVNYW5hZ2VkTWV0aG9kKTsKLQkgICAgRm9vTWFuYWdlZEJlYW4gZjIgPSAoRm9vTWFuYWdlZEJlYW4pIGNyZWF0ZU1hbmFnZWRNZXRob2QuaW52b2tlKGluamVjdGlvbk1nciwgRm9vTWFuYWdlZEJlYW4uY2xhc3MpOwotCSAgICBmMi5oZWxsbygpOwotCQotCi0JICAgIE1ldGhvZCBkZXN0cm95TWFuYWdlZE1ldGhvZCA9IGluamVjdGlvbk1nci5nZXRDbGFzcygpLmdldE1ldGhvZCgiZGVzdHJveU1hbmFnZWRPYmplY3QiLCBqYXZhLmxhbmcuT2JqZWN0LmNsYXNzKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJkZXN0cm95IG1hbmFnZWQgb2JqZWN0IG1ldGhvZCA9ICIgKyBkZXN0cm95TWFuYWdlZE1ldGhvZCk7Ci0JICAgIGRlc3Ryb3lNYW5hZ2VkTWV0aG9kLmludm9rZShpbmplY3Rpb25NZ3IsIGYyKTsKLQotCSAgICAgRm9vTm9uTWFuYWdlZEJlYW4gbm9uRiA9IChGb29Ob25NYW5hZ2VkQmVhbikgY3JlYXRlTWFuYWdlZE1ldGhvZC5pbnZva2UoaW5qZWN0aW9uTWdyLCBGb29Ob25NYW5hZ2VkQmVhbi5jbGFzcyk7Ci0JICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZvb05vbk1hbmFnZWRCZWFuID0gIiArIG5vbkYpOwotCSAgICAgbm9uRi5oZWxsbygpOwotCSAgICAgZGVzdHJveU1hbmFnZWRNZXRob2QuaW52b2tlKGluamVjdGlvbk1nciwgbm9uRik7CisgICAgICAgIC8vIFRlc3QgSW5qZWN0aW9uTWFuYWdlciBtYW5hZ2VkIGJlYW4gZnVuY3Rpb25hbGl0eQorICAgICAgICBPYmplY3QgaW5qZWN0aW9uTWdyID0gbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJjb20uc3VuLmVudGVycHJpc2UuY29udGFpbmVyLmNvbW1vbi5zcGkudXRpbC5JbmplY3Rpb25NYW5hZ2VyIik7CisgICAgICAgIE1ldGhvZCBjcmVhdGVNYW5hZ2VkTWV0aG9kID0gaW5qZWN0aW9uTWdyLmdldENsYXNzKCkuZ2V0TWV0aG9kKCJjcmVhdGVNYW5hZ2VkT2JqZWN0IiwgamF2YS5sYW5nLkNsYXNzLmNsYXNzKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjcmVhdGUgbWFuYWdlZCBvYmplY3QgbWV0aG9kID0gIiArIGNyZWF0ZU1hbmFnZWRNZXRob2QpOworICAgICAgICBGb29NYW5hZ2VkQmVhbiBmMiA9IChGb29NYW5hZ2VkQmVhbikgY3JlYXRlTWFuYWdlZE1ldGhvZC5pbnZva2UoaW5qZWN0aW9uTWdyLCBGb29NYW5hZ2VkQmVhbi5jbGFzcyk7CisgICAgICAgIGYyLmhlbGxvKCk7CiAKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLQl9CisgICAgICAgIE1ldGhvZCBkZXN0cm95TWFuYWdlZE1ldGhvZCA9IGluamVjdGlvbk1nci5nZXRDbGFzcygpLmdldE1ldGhvZCgiZGVzdHJveU1hbmFnZWRPYmplY3QiLCBqYXZhLmxhbmcuT2JqZWN0LmNsYXNzKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkZXN0cm95IG1hbmFnZWQgb2JqZWN0IG1ldGhvZCA9ICIgKyBkZXN0cm95TWFuYWdlZE1ldGhvZCk7CisgICAgICAgIGRlc3Ryb3lNYW5hZ2VkTWV0aG9kLmludm9rZShpbmplY3Rpb25NZ3IsIGYyKTsKKworICAgICAgICAgRm9vTm9uTWFuYWdlZEJlYW4gbm9uRiA9IChGb29Ob25NYW5hZ2VkQmVhbikgY3JlYXRlTWFuYWdlZE1ldGhvZC5pbnZva2UoaW5qZWN0aW9uTWdyLCBGb29Ob25NYW5hZ2VkQmVhbi5jbGFzcyk7CisgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZvb05vbk1hbmFnZWRCZWFuID0gIiArIG5vbkYpOworICAgICAgICAgbm9uRi5oZWxsbygpOworICAgICAgICAgZGVzdHJveU1hbmFnZWRNZXRob2QuaW52b2tlKGluamVjdGlvbk1nciwgbm9uRik7CisKKworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKKyAgICB9CiAKIAogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9TaW5nbGV0b25CZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1NpbmdsZXRvbkJlYW4yLmphdmEKaW5kZXggNTM4OTllMy4uNzM2YzQ4NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1NpbmdsZXRvbkJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1NpbmdsZXRvbkJlYW4yLmphdmEKQEAgLTQwLDE1ICs0MCwxNSBAQAogCiAgICAgQEluamVjdAogICAgIHB1YmxpYyBTaW5nbGV0b25CZWFuMihFdmVudDxTb21lRXZlbnQ+IHNlKSB7Ci0Jc29tZUV2ZW50ID0gc2U7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuMiBzb21lRXZlbnQgPSAiICsgc29tZUV2ZW50KTsKLQkKKyAgICBzb21lRXZlbnQgPSBzZTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW4yIHNvbWVFdmVudCA9ICIgKyBzb21lRXZlbnQpOworCiAgICAgfQogCiAgICAgQEluamVjdCBGb28gZm9vOwogCiAgICAgQEVKQgotCXByaXZhdGUgU3RhdGVsZXNzTG9jYWwgc3RhdGVsZXNzRUU7CisgICAgcHJpdmF0ZSBTdGF0ZWxlc3NMb2NhbCBzdGF0ZWxlc3NFRTsKIAogICAgIEBJbmplY3QgcHJpdmF0ZSBUcmFuc2xhdG9yQ29udHJvbGxlciB0YzsKIApAQCAtNTksNDUgKzU5LDQ1IEBACiAKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIEJlYW5NYW5hZ2VyIGJlYW5NYW5hZ2VySW5qZWN0OwotICAgIAorCiAgICAgQFJlc291cmNlIFNlc3Npb25Db250ZXh0IHNlc0N0eDsKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuMjo6aW5pdCgpIik7Ci0JaWYoIGJlYW5NYW5hZ2VySW5qZWN0ID09IG51bGwgKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkJlYW5NYW5hZ2VyIGlzIG51bGwiKTsKLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJCZWFuIG1hbmFnZXIgaW5qZWN0ID0gIiArIGJlYW5NYW5hZ2VySW5qZWN0KTsKLQl0ZXN0SU1DcmVhdGVEZXN0cm95TU8oKTsKLQl0ZXN0U2luZ2xldG9uV2l0aEluamVjdGlvbkNvbnN0cnVjdG9yKCk7CisgICAgaWYoIGJlYW5NYW5hZ2VySW5qZWN0ID09IG51bGwgKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkJlYW5NYW5hZ2VyIGlzIG51bGwiKTsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWFuIG1hbmFnZXIgaW5qZWN0ID0gIiArIGJlYW5NYW5hZ2VySW5qZWN0KTsKKyAgICB0ZXN0SU1DcmVhdGVEZXN0cm95TU8oKTsKKyAgICB0ZXN0U2luZ2xldG9uV2l0aEluamVjdGlvbkNvbnN0cnVjdG9yKCk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgc29tZSBldmVudC4uLiIpOwotCXNvbWVFdmVudC5maXJlKCBuZXcgU29tZUV2ZW50KDIpICk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIHNvbWUgZXZlbnQuLi4iKTsKKyAgICBzb21lRXZlbnQuZmlyZSggbmV3IFNvbWVFdmVudCgyKSApOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjI6OmhlbGxvKCkgIiArIGZvbyk7Ci0Jc3RhdGVsZXNzRUUuaGVsbG8oKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW4yOjpoZWxsbygpICIgKyBmb28pOworICAgIHN0YXRlbGVzc0VFLmhlbGxvKCk7CiAKLQlmbWIuaGVsbG8oKTsKLQkKLQlCZWFuTWFuYWdlciBiZWFuTWdyID0gKEJlYW5NYW5hZ2VyKQotCSAgICBzZXNDdHgubG9va3VwKCJqYXZhOmNvbXAvQmVhbk1hbmFnZXIiKTsKLQkKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgYmVhbiBtYW5hZ2VyICIgKwotCQkJICAgYmVhbk1nciArICIgZm9yIEpDREkgZW5hYmxlZCBhcHAiKTsKLQkJCSAgIAorICAgIGZtYi5oZWxsbygpOworCisgICAgQmVhbk1hbmFnZXIgYmVhbk1nciA9IChCZWFuTWFuYWdlcikKKyAgICAgICAgc2VzQ3R4Lmxvb2t1cCgiamF2YTpjb21wL0JlYW5NYW5hZ2VyIik7CisKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgYmVhbiBtYW5hZ2VyICIgKworICAgICAgICAgICAgICAgYmVhbk1nciArICIgZm9yIEpDREkgZW5hYmxlZCBhcHAiKTsKKwogCiAgICAgfQogCiAgICAgQFNjaGVkdWxlKHNlY29uZD0iKi8xMCIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiKQotCXByaXZhdGUgdm9pZCB0aW1lb3V0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6dGltZW91dCgpICIgKyBmb28pOworICAgIHByaXZhdGUgdm9pZCB0aW1lb3V0KCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6dGltZW91dCgpICIgKyBmb28pOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJ0Yy5nZXRUZXh0KCkgPSAiICsgdGMuZ2V0VGV4dCgpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRjLmdldFRleHQoKSA9ICIgKyB0Yy5nZXRUZXh0KCkpOwogCi0Jc3RhdGVsZXNzRUUuaGVsbG8oKTsKKyAgICBzdGF0ZWxlc3NFRS5oZWxsbygpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CkBAIC0xMDcsMjkgKzEwNywyOSBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3RJTUNyZWF0ZURlc3Ryb3lNTygpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICAvLyBUZXN0IEluamVjdGlvbk1hbmFnZXIgbWFuYWdlZCBiZWFuIGZ1bmN0aW9uYWxpdHkKLQkgICAgT2JqZWN0IGluamVjdGlvbk1nciA9IG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiY29tLnN1bi5lbnRlcnByaXNlLmNvbnRhaW5lci5jb21tb24uc3BpLnV0aWwuSW5qZWN0aW9uTWFuYWdlciIpOwotCSAgICBNZXRob2QgY3JlYXRlTWFuYWdlZE1ldGhvZCA9IGluamVjdGlvbk1nci5nZXRDbGFzcygpLmdldE1ldGhvZCgiY3JlYXRlTWFuYWdlZE9iamVjdCIsIGphdmEubGFuZy5DbGFzcy5jbGFzcyk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRlIG1hbmFnZWQgb2JqZWN0IG1ldGhvZCA9ICIgKyBjcmVhdGVNYW5hZ2VkTWV0aG9kKTsKLQkgICAgRm9vTWFuYWdlZEJlYW4gZjIgPSAoRm9vTWFuYWdlZEJlYW4pIGNyZWF0ZU1hbmFnZWRNZXRob2QuaW52b2tlKGluamVjdGlvbk1nciwgRm9vTWFuYWdlZEJlYW4uY2xhc3MpOwotCSAgICBmMi5oZWxsbygpOwotCQotCi0JICAgIE1ldGhvZCBkZXN0cm95TWFuYWdlZE1ldGhvZCA9IGluamVjdGlvbk1nci5nZXRDbGFzcygpLmdldE1ldGhvZCgiZGVzdHJveU1hbmFnZWRPYmplY3QiLCBqYXZhLmxhbmcuT2JqZWN0LmNsYXNzKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJkZXN0cm95IG1hbmFnZWQgb2JqZWN0IG1ldGhvZCA9ICIgKyBkZXN0cm95TWFuYWdlZE1ldGhvZCk7Ci0JICAgIGRlc3Ryb3lNYW5hZ2VkTWV0aG9kLmludm9rZShpbmplY3Rpb25NZ3IsIGYyKTsKLQotCSAgICAgRm9vTm9uTWFuYWdlZEJlYW4gbm9uRiA9IChGb29Ob25NYW5hZ2VkQmVhbikgY3JlYXRlTWFuYWdlZE1ldGhvZC5pbnZva2UoaW5qZWN0aW9uTWdyLCBGb29Ob25NYW5hZ2VkQmVhbi5jbGFzcyk7Ci0JICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZvb05vbk1hbmFnZWRCZWFuID0gIiArIG5vbkYpOwotCSAgICAgbm9uRi5oZWxsbygpOwotCSAgICAgZGVzdHJveU1hbmFnZWRNZXRob2QuaW52b2tlKGluamVjdGlvbk1nciwgbm9uRik7CisgICAgICAgIC8vIFRlc3QgSW5qZWN0aW9uTWFuYWdlciBtYW5hZ2VkIGJlYW4gZnVuY3Rpb25hbGl0eQorICAgICAgICBPYmplY3QgaW5qZWN0aW9uTWdyID0gbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJjb20uc3VuLmVudGVycHJpc2UuY29udGFpbmVyLmNvbW1vbi5zcGkudXRpbC5JbmplY3Rpb25NYW5hZ2VyIik7CisgICAgICAgIE1ldGhvZCBjcmVhdGVNYW5hZ2VkTWV0aG9kID0gaW5qZWN0aW9uTWdyLmdldENsYXNzKCkuZ2V0TWV0aG9kKCJjcmVhdGVNYW5hZ2VkT2JqZWN0IiwgamF2YS5sYW5nLkNsYXNzLmNsYXNzKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjcmVhdGUgbWFuYWdlZCBvYmplY3QgbWV0aG9kID0gIiArIGNyZWF0ZU1hbmFnZWRNZXRob2QpOworICAgICAgICBGb29NYW5hZ2VkQmVhbiBmMiA9IChGb29NYW5hZ2VkQmVhbikgY3JlYXRlTWFuYWdlZE1ldGhvZC5pbnZva2UoaW5qZWN0aW9uTWdyLCBGb29NYW5hZ2VkQmVhbi5jbGFzcyk7CisgICAgICAgIGYyLmhlbGxvKCk7CiAKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLQl9CisgICAgICAgIE1ldGhvZCBkZXN0cm95TWFuYWdlZE1ldGhvZCA9IGluamVjdGlvbk1nci5nZXRDbGFzcygpLmdldE1ldGhvZCgiZGVzdHJveU1hbmFnZWRPYmplY3QiLCBqYXZhLmxhbmcuT2JqZWN0LmNsYXNzKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkZXN0cm95IG1hbmFnZWQgb2JqZWN0IG1ldGhvZCA9ICIgKyBkZXN0cm95TWFuYWdlZE1ldGhvZCk7CisgICAgICAgIGRlc3Ryb3lNYW5hZ2VkTWV0aG9kLmludm9rZShpbmplY3Rpb25NZ3IsIGYyKTsKKworICAgICAgICAgRm9vTm9uTWFuYWdlZEJlYW4gbm9uRiA9IChGb29Ob25NYW5hZ2VkQmVhbikgY3JlYXRlTWFuYWdlZE1ldGhvZC5pbnZva2UoaW5qZWN0aW9uTWdyLCBGb29Ob25NYW5hZ2VkQmVhbi5jbGFzcyk7CisgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZvb05vbk1hbmFnZWRCZWFuID0gIiArIG5vbkYpOworICAgICAgICAgbm9uRi5oZWxsbygpOworICAgICAgICAgZGVzdHJveU1hbmFnZWRNZXRob2QuaW52b2tlKGluamVjdGlvbk1nciwgbm9uRik7CisKKworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKKyAgICB9CiAKIAogICAgIH0KQEAgLTEzNywxNiArMTM3LDE2IEBACiAKICAgICBwcml2YXRlIHZvaWQgdGVzdFNpbmdsZXRvbldpdGhJbmplY3Rpb25Db25zdHJ1Y3RvcigpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICBTaW5nbGV0b25CZWFuQSBiPSAoU2luZ2xldG9uQmVhbkEpIHNlc0N0eC5sb29rdXAoImphdmE6bW9kdWxlL1NpbmdsZXRvbkJlYW5BIik7CisgICAgICAgIFNpbmdsZXRvbkJlYW5BIGI9IChTaW5nbGV0b25CZWFuQSkgc2VzQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvU2luZ2xldG9uQmVhbkEiKTsKICAgICAgICAgICAgIGlmIChiLmdldEJhcigpID09IG51bGwpIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJCYXIgaXMgbnVsbCIpOwogICAgICAgICAgICAgfQogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCX0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CisgICAgfQogCiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvU2luZ2xldG9uQmVhbkEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9TaW5nbGV0b25CZWFuQS5qYXZhCmluZGV4IGYzMjljNGMuLmE5NmI3MGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9TaW5nbGV0b25CZWFuQS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9TaW5nbGV0b25CZWFuQS5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKICAgICBCYXIgYmFyOwogCi0gICAgQEluamVjdCAKKyAgICBASW5qZWN0CiAgICAgcHVibGljIFNpbmdsZXRvbkJlYW5BKEJhciBiYXIpIHsKICAgICAgICAgdGhpcy5iYXIgPSBiYXI7CiAgICAgfQpAQCAtMzYsMTAgKzM2LDEwIEBACiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW5BOjppbml0KCkiKTsKLQlpZiggYmFyID09IG51bGwgKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImJhciBpcyBudWxsIik7Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiYmFyIGluamVjdCA9ICIgKyBiYXIpOworICAgIGlmKCBiYXIgPT0gbnVsbCApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiYmFyIGlzIG51bGwiKTsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJiYXIgaW5qZWN0ID0gIiArIGJhcik7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9TaW5nbGV0b25TdGFydHVwV2l0aEluamVjdGVkRGVwZW5kZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvU2luZ2xldG9uU3RhcnR1cFdpdGhJbmplY3RlZERlcGVuZGVudC5qYXZhCmluZGV4IDliZjljNGUuLjA1ODEzMTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9TaW5nbGV0b25TdGFydHVwV2l0aEluamVjdGVkRGVwZW5kZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1NpbmdsZXRvblN0YXJ0dXBXaXRoSW5qZWN0ZWREZXBlbmRlbnQuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogICAgIEBJbmplY3QKICAgICBwdWJsaWMgU2luZ2xldG9uU3RhcnR1cFdpdGhJbmplY3RlZERlcGVuZGVudChEZXBlbmRlbnRXaXRoSW5qZWN0ZWREYXRhU291cmNlIHNlcnZpY2UpIHsKICAgICAgICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvbnN0cnVjdGVkOjpTaW5nbGV0b25TdGFydHVwV2l0aEluamVjdGVkRGVwZW5kZW50Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25zdHJ1Y3RlZDo6U2luZ2xldG9uU3RhcnR1cFdpdGhJbmplY3RlZERlcGVuZGVudCIpOwogICAgIH0KIAogICAgIEBQb3N0Q29uc3RydWN0CkBAIC00MSw3ICs0MSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQlyZXR1cm4gIlNpbmdsZXRvblN0YXJ0dXBXaXRoSW5qZWN0ZWREZXBlbmRlbnQiOworICAgIHJldHVybiAiU2luZ2xldG9uU3RhcnR1cFdpdGhJbmplY3RlZERlcGVuZGVudCI7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvU29tZUV2ZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvU29tZUV2ZW50LmphdmEKaW5kZXggOGI0MTdmYy4uNTg0Y2FhYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1NvbWVFdmVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9Tb21lRXZlbnQuamF2YQpAQCAtMjAsMTEgKzIwLDExIEBACiAKICAgICBwcml2YXRlIGludCBzb21lSW50OwogCi0gICAgcHVibGljIFNvbWVFdmVudChpbnQgaSkgeyAKLQlzb21lSW50ID0gaTsKKyAgICBwdWJsaWMgU29tZUV2ZW50KGludCBpKSB7CisgICAgc29tZUludCA9IGk7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQlyZXR1cm4gIiIgKyBzb21lSW50OworICAgIHJldHVybiAiIiArIHNvbWVJbnQ7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1N0YXRlbGVzc0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9TdGF0ZWxlc3NCZWFuLmphdmEKaW5kZXggMmQ1MmMyYS4uOTY3ODgzMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1N0YXRlbGVzc0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvU3RhdGVsZXNzQmVhbi5qYXZhCkBAIC00MCwxOCArNDAsMTggQEAKICAgICBASW5qZWN0IEZvbyBmb287CiAKICAgICBAUG9zdENvbnN0cnVjdAotCXB1YmxpYyB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuOjppbml0KCkiKTsKKyAgICBwdWJsaWMgdm9pZCBpbml0KCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjo6aW5pdCgpIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcHJvY2Vzc1NvbWVFdmVudChAT2JzZXJ2ZXMgU29tZUV2ZW50IGV2ZW50KSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuOjpwcm9jZXNzU29tZUV2ZW50ICIgKwotCQkJICAgZXZlbnQpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjo6cHJvY2Vzc1NvbWVFdmVudCAiICsKKyAgICAgICAgICAgICAgIGV2ZW50KTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW46OmhlbGxvKCkgIiArCi0JCQkgICBmb28pOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjo6aGVsbG8oKSAiICsKKyAgICAgICAgICAgICAgIGZvbyk7CiAgICAgICAgIGlmIChpbnRlcmNlcHRvcklkcy5zaXplKCkgIT0gMikgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiV3JvbmcgbnVtYmVyIG9mIGludGVyY2VwdG9ycyB3ZXJlIGNhbGxlZDogZXhwZWN0ZWQgMiwgZ290ICIgKyBpbnRlcmNlcHRvcklkcy5zaXplKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGludGVyY2VwdG9ySWRzLmdldCgwKSAhPSAwIHx8IGludGVyY2VwdG9ySWRzLmdldCgxKSAhPSAxKSB7CkBAIC02NCwxNSArNjQsMTUgQEAKICAgICBARXhjbHVkZUNsYXNzSW50ZXJjZXB0b3JzCiAgICAgQEV4Y2x1ZGVEZWZhdWx0SW50ZXJjZXB0b3JzCiAgICAgcHVibGljIHZvaWQgaW50ZXJjZXB0b3JDYWxsZWQoaW50IGlkKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuOjppbnRlcmNlcHRvckNhbGxlZCgpICIgKyBpZCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuOjppbnRlcmNlcHRvckNhbGxlZCgpICIgKyBpZCk7CiAgICAgICAgIGludGVyY2VwdG9ySWRzLmFkZChpZCk7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKLQlwdWJsaWMgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjo6ZGVzdHJveSgpIik7CisgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW46OmRlc3Ryb3koKSIpOwogICAgIH0KIAotICAgIAorCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9TdGF0ZWxlc3NCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1N0YXRlbGVzc0JlYW4yLmphdmEKaW5kZXggOTFmMjA1ZC4uZDM2ZDJiNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1N0YXRlbGVzc0JlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1N0YXRlbGVzc0JlYW4yLmphdmEKQEAgLTI5LDI3ICsyOSwyNyBAQAogICAgIHByaXZhdGUgRm9vIGZvbzsKIAogICAgIEBJbmplY3QKLQlwdWJsaWMgU3RhdGVsZXNzQmVhbjIoRm9vIGYsIEZvbyBzcikgewotCWZvbyA9IGY7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuMigpICBmb28gPSAiICsgZm9vICsgCi0JCQkgICAiIHNyID0gIiArIHNyKTsKKyAgICBwdWJsaWMgU3RhdGVsZXNzQmVhbjIoRm9vIGYsIEZvbyBzcikgeworICAgIGZvbyA9IGY7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuMigpICBmb28gPSAiICsgZm9vICsKKyAgICAgICAgICAgICAgICIgc3IgPSAiICsgc3IpOwogICAgIH0KIAogICAgIEBQb3N0Q29uc3RydWN0Ci0JcHVibGljIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW4yOjppbml0KCkiKTsKKyAgICBwdWJsaWMgdm9pZCBpbml0KCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjI6OmluaXQoKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjI6OmhlbGxvKCkgIiArCi0JCQkgICBmb28pOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjI6OmhlbGxvKCkgIiArCisgICAgICAgICAgICAgICBmb28pOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95Ci0JcHVibGljIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW4yOjpkZXN0cm95KCkiKTsKKyAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjI6OmRlc3Ryb3koKSIpOwogICAgIH0KIAotICAgIAorCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9UZXh0VHJhbnNsYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1RleHRUcmFuc2xhdG9yLmphdmEKaW5kZXggNzYxMGJiZi4uMWQ3N2VjOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1RleHRUcmFuc2xhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1RleHRUcmFuc2xhdG9yLmphdmEKQEAgLTIyLDI1ICsyMiwyNSBAQAogaW1wb3J0IGpha2FydGEuaW5qZWN0LkluamVjdDsKIAogcHVibGljIGNsYXNzIFRleHRUcmFuc2xhdG9yIGltcGxlbWVudHMgU2VyaWFsaXphYmxlCi17IAotICAgcHJpdmF0ZSBTZW50ZW5jZVBhcnNlciBzZW50ZW5jZVBhcnNlcjsgCi0gICAKK3sKKyAgIHByaXZhdGUgU2VudGVuY2VQYXJzZXIgc2VudGVuY2VQYXJzZXI7CisKICAgIEBFSkIgVHJhbnNsYXRvciB0cmFuc2xhdG9yOwotICAgCisKICAgIEBJbmplY3QKLSAgIHB1YmxpYyBUZXh0VHJhbnNsYXRvcihTZW50ZW5jZVBhcnNlciBzZW50ZW5jZVBhcnNlcikgCi0gICB7IAotICAgICAgdGhpcy5zZW50ZW5jZVBhcnNlciA9IHNlbnRlbmNlUGFyc2VyOyAgCisgICBwdWJsaWMgVGV4dFRyYW5zbGF0b3IoU2VudGVuY2VQYXJzZXIgc2VudGVuY2VQYXJzZXIpCisgICB7CisgICAgICB0aGlzLnNlbnRlbmNlUGFyc2VyID0gc2VudGVuY2VQYXJzZXI7CiAgICB9Ci0gICAKLSAgIHB1YmxpYyBTdHJpbmcgdHJhbnNsYXRlKFN0cmluZyB0ZXh0KSAKLSAgIHsgCi0gICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsgCi0gICAgICBmb3IgKFN0cmluZyBzZW50ZW5jZTogc2VudGVuY2VQYXJzZXIucGFyc2UodGV4dCkpIAotICAgICAgeyAKLSAgICAgICAgIHNiLmFwcGVuZCh0cmFuc2xhdG9yLnRyYW5zbGF0ZShzZW50ZW5jZSkpLmFwcGVuZCgiLiAiKTsgCi0gICAgICB9IAotICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCkudHJpbSgpOyAKKworICAgcHVibGljIFN0cmluZyB0cmFuc2xhdGUoU3RyaW5nIHRleHQpCisgICB7CisgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgIGZvciAoU3RyaW5nIHNlbnRlbmNlOiBzZW50ZW5jZVBhcnNlci5wYXJzZSh0ZXh0KSkKKyAgICAgIHsKKyAgICAgICAgIHNiLmFwcGVuZCh0cmFuc2xhdG9yLnRyYW5zbGF0ZShzZW50ZW5jZSkpLmFwcGVuZCgiLiAiKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBzYi50b1N0cmluZygpLnRyaW0oKTsKICAgIH0KLSAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvVHJhbnNsYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1RyYW5zbGF0b3IuamF2YQppbmRleCAwNTc4MzBjLi5hZjQ5YTQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvVHJhbnNsYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9UcmFuc2xhdG9yLmphdmEKQEAgLTE4LDEwICsxOCwxMCBAQAogCiBpbXBvcnQgamFrYXJ0YS5lamIuTG9jYWw7CiAKLUBMb2NhbCAKLXB1YmxpYyBpbnRlcmZhY2UgVHJhbnNsYXRvciAKLXsgCitATG9jYWwKK3B1YmxpYyBpbnRlcmZhY2UgVHJhbnNsYXRvcgorewogCiAgICBwdWJsaWMgU3RyaW5nIHRyYW5zbGF0ZShTdHJpbmcgc2VudGVuY2UpOwotICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9UcmFuc2xhdG9yQ29udHJvbGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1RyYW5zbGF0b3JDb250cm9sbGVyLmphdmEKaW5kZXggYTMyOTEwNi4uNTU1NmE4OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1RyYW5zbGF0b3JDb250cm9sbGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1RyYW5zbGF0b3JDb250cm9sbGVyLmphdmEKQEAgLTE4LDE1ICsxOCwxNSBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIFRyYW5zbGF0b3JDb250cm9sbGVyCiB7Ci0gICAKKwogICAgcHVibGljIFN0cmluZyBnZXRUZXh0KCk7Ci0gICAKKwogICAgcHVibGljIHZvaWQgc2V0VGV4dChTdHJpbmcgdGV4dCk7Ci0gICAKKwogICAgcHVibGljIHZvaWQgdHJhbnNsYXRlKCk7Ci0gICAKKwogICAgcHVibGljIFN0cmluZyBnZXRUcmFuc2xhdGVkVGV4dCgpOwotICAgCisKICAgIHB1YmxpYyB2b2lkIHJlbW92ZSgpOwotICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9UcmFuc2xhdG9yQ29udHJvbGxlcjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9UcmFuc2xhdG9yQ29udHJvbGxlcjIuamF2YQppbmRleCAzYjEwMWQ0Li4wMDdlMjY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvVHJhbnNsYXRvckNvbnRyb2xsZXIyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1RyYW5zbGF0b3JDb250cm9sbGVyMi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIHB1YmxpYyBpbnRlcmZhY2UgVHJhbnNsYXRvckNvbnRyb2xsZXIyCiB7Ci0gICAKKwogICAgIHB1YmxpYyB2b2lkIGZvbygpOwotICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9UcmFuc2xhdG9yQ29udHJvbGxlckJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9UcmFuc2xhdG9yQ29udHJvbGxlckJlYW4uamF2YQppbmRleCA5Nzc1MGVlLi4yMDliNTIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvVHJhbnNsYXRvckNvbnRyb2xsZXJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1RyYW5zbGF0b3JDb250cm9sbGVyQmVhbi5qYXZhCkBAIC0yNSw0MiArMjUsNDIgQEAKIEBTdGF0ZWZ1bAogQFJlcXVlc3RTY29wZWQKIEBOYW1lZCgidHJhbnNsYXRvciIpCi0gICAgcHVibGljIGNsYXNzIFRyYW5zbGF0b3JDb250cm9sbGVyQmVhbiBpbXBsZW1lbnRzIFRyYW5zbGF0b3JDb250cm9sbGVyICwgVHJhbnNsYXRvckNvbnRyb2xsZXIyIAorICAgIHB1YmxpYyBjbGFzcyBUcmFuc2xhdG9yQ29udHJvbGxlckJlYW4gaW1wbGVtZW50cyBUcmFuc2xhdG9yQ29udHJvbGxlciAsIFRyYW5zbGF0b3JDb250cm9sbGVyMgogewotICAgCisKICAgIEBJbmplY3QKICAgIHByaXZhdGUgVGV4dFRyYW5zbGF0b3IgdHJhbnNsYXRvcjsKLSAgIAorCiAgICBwcml2YXRlIFN0cmluZyBpbnB1dFRleHQ7Ci0gICAKKwogICAgcHJpdmF0ZSBTdHJpbmcgdHJhbnNsYXRlZFRleHQ7Ci0gICAKKwogICAgcHVibGljIFN0cmluZyBnZXRUZXh0KCkKICAgIHsKICAgICAgIHJldHVybiBpbnB1dFRleHQ7CiAgICB9Ci0gICAKKwogICAgcHVibGljIHZvaWQgc2V0VGV4dChTdHJpbmcgdGV4dCkKICAgIHsKICAgICAgIHRoaXMuaW5wdXRUZXh0ID0gdGV4dDsKICAgIH0KLSAgIAorCiAgICBwdWJsaWMgdm9pZCB0cmFuc2xhdGUoKQogICAgewogICAgICAgdHJhbnNsYXRlZFRleHQgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZShpbnB1dFRleHQpOwogICAgfQotICAgCisKICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJhbnNsYXRlZFRleHQoKQogICAgewogICAgICAgcmV0dXJuIHRyYW5zbGF0ZWRUZXh0OwogICAgfQogCiAgICAgcHVibGljIHZvaWQgZm9vKCkge30KLSAgIAorCiAgICBAUmVtb3ZlCiAgICBwdWJsaWMgdm9pZCByZW1vdmUoKQogICAgewotICAgICAgCisKICAgIH0KLSAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjI2N2VhZC4uYmY3YWQyNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZnVsbC1wYXNzYWN0Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KLQkKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvYnVpbGQueG1sCmluZGV4IGNiMDUxZWIuLjE4MWJiMDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvYnVpbGQueG1sCkBAIC0yOSwxNSArMjksMTUgQEAKICAgICAmY29tbW9uQnVpbGQ7CiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwogCi0gICAgPCEtLSBub3RlIHRoYXQgd2UgZG9uJ3QgdW5kZXBsb3kgYXMgcGFydCBvZiBhbGwgdGFyZ2V0IHNvIAorICAgIDwhLS0gbm90ZSB0aGF0IHdlIGRvbid0IHVuZGVwbG95IGFzIHBhcnQgb2YgYWxsIHRhcmdldCBzbwogICAgIHRoYXQgdG9wLWxldmVsIGJ1aWxkIHNjcmlwdCBjYW4gcnVuIHJlbW90ZTIgZmlyc3QgLS0+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJ1bix1bmRlcGxveSIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OSwxMiArNDksMTIgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDkgKzYyLDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CkBAIC03NSw3ICs3NSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDBlNTQ5OWMuLjRhOTAxNGMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzEsMTcgKzMxLDE3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCi0JYXBwTmFtZSA9IGFyZ3NbMF07IAotCXN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7Ci0JQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7ICAgICAgIAotICAgICAgICBjbGllbnQuZG9UZXN0KCk7CQorICAgIGFwcE5hbWUgPSBhcmdzWzBdOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7CisgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CisgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwogICAgIH0KIApAQCAtNDksNDQgKzQ5LDQ0IEBACiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKLQl0cnkgewotCSAgICBpbnQgbnVtSGVsbG9zID0gODsgLy8gOCBpcyB0aGUgYmF0Y2ggc2l6ZSwgc28gOCBzaG91bGQgYmUgZ3VhcmFudGVlZCB0byBiZSBwYXNpdmF0ZWQKKyAgICB0cnkgeworICAgICAgICBpbnQgbnVtSGVsbG9zID0gODsgLy8gOCBpcyB0aGUgYmF0Y2ggc2l6ZSwgc28gOCBzaG91bGQgYmUgZ3VhcmFudGVlZCB0byBiZSBwYXNpdmF0ZWQKIAotCSAgICBIZWxsb1tdIGhlbGxvcyA9IG5ldyBIZWxsb1tudW1IZWxsb3NdOwotCSAgICBpbnQgcGFzc2l2YXRpb25Db3VudCA9IDA7CisgICAgICAgIEhlbGxvW10gaGVsbG9zID0gbmV3IEhlbGxvW251bUhlbGxvc107CisgICAgICAgIGludCBwYXNzaXZhdGlvbkNvdW50ID0gMDsKIAotCSAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtSGVsbG9zOyBpKyspIHsKLQkJCi0JCWhlbGxvc1tpXSA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iK2FwcE5hbWUrIi9IZWxsb0JlYW4iKTsKLQkJaGVsbG9zW2ldLmhlbGxvKCk7Ci0JICAgIH0KKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bUhlbGxvczsgaSsrKSB7CiAKLQkgICAgdHJ5IHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciBwYXNzaXZhdGlvbi4uLiIpOwotCQlUaHJlYWQuc2xlZXAoMjAwMDApOwotCSAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0KKyAgICAgICAgaGVsbG9zW2ldID0gKEhlbGxvKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIrYXBwTmFtZSsiL0hlbGxvQmVhbiIpOworICAgICAgICBoZWxsb3NbaV0uaGVsbG8oKTsKKyAgICAgICAgfQogCi0JICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1IZWxsb3M7IGkrKykgewotCQkKLQkJaGVsbG9zW2ldLmhlbGxvKCk7Ci0JCWlmKCBoZWxsb3NbaV0ucGFzc2l2YXRlZEFuZEFjdGl2YXRlZCgpICkgewotCQkgICAgcGFzc2l2YXRpb25Db3VudCsrOwotCQl9Ci0JICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciBwYXNzaXZhdGlvbi4uLiIpOworICAgICAgICBUaHJlYWQuc2xlZXAoMjAwMDApOworICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KIAotCSAgICBpZiggcGFzc2l2YXRpb25Db3VudCAhPSBudW1IZWxsb3MgKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiUGFzc2l2YXRpb24gZmFpbGVkIC0tIGNvdW50ID0gIiArIHBhc3NpdmF0aW9uQ291bnQgKyAiIGluc3RlYWQgb2YgZXhwZWN0ZWQgIiArIG51bUhlbGxvcyk7Ci0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oInBhc3NpdmF0aW9uIGZhaWxlZCIpOwotCSAgICB9CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1IZWxsb3M7IGkrKykgewogCi0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgaGVsbG9zW2ldLmhlbGxvKCk7CisgICAgICAgIGlmKCBoZWxsb3NbaV0ucGFzc2l2YXRlZEFuZEFjdGl2YXRlZCgpICkgeworICAgICAgICAgICAgcGFzc2l2YXRpb25Db3VudCsrOworICAgICAgICB9CisgICAgICAgIH0KIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICAgICAgaWYoIHBhc3NpdmF0aW9uQ291bnQgIT0gbnVtSGVsbG9zICkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBhc3NpdmF0aW9uIGZhaWxlZCAtLSBjb3VudCA9ICIgKyBwYXNzaXZhdGlvbkNvdW50ICsgIiBpbnN0ZWFkIG9mIGV4cGVjdGVkICIgKyBudW1IZWxsb3MpOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJwYXNzaXZhdGlvbiBmYWlsZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKKworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggYjczZWY3NC4uOWJlMzQ0OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgICA8ZWpiLW5hbWU+SGVsbG9CZWFuPC9lamItbmFtZT4KICAgICAgIDxiZWFuLWNhY2hlPgogICAgICAgICAgPG1heC1jYWNoZS1zaXplPjQ8L21heC1jYWNoZS1zaXplPgotCSA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4KKyAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+CiAgICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICA8L2JlYW4tY2FjaGU+CiAgICAgPC9lamI+CkBAIC0zMiw3ICszMiw3IEBACiAgICAgICA8ZWpiLW5hbWU+U3RhdGVmdWxOb0ludGY8L2VqYi1uYW1lPgogICAgICAgPGJlYW4tY2FjaGU+CiAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+NDwvbWF4LWNhY2hlLXNpemU+Ci0JIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PgorICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4KICAgICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KICAgICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZWpiL0hlbGxvQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9lamIvSGVsbG9CZWFuLmphdmEKaW5kZXggYjBkZjRlZi4uNDZiMzViMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9lamIvSGVsbG9CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9lamIvSGVsbG9CZWFuLmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gYWN0aXZhdGVkID0gZmFsc2U7CiAKICAgICBARUpCIHByaXZhdGUgU2luZ2xldG9uTm9JbnRmIHNpbmdsZXRvbk5vSW50ZjsKLSAgIAorCiAgICAgQEVKQiBwcml2YXRlIFNpbmdsZXRvbk11bHRpSW50ZiBzaW5nbGV0b25NdWx0aUludGY7CiAKICAgICBARUpCIHByaXZhdGUgTG9jYWwxIGxvY2FsMTsKQEAgLTUwLDUwICs1MCw1MCBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjppbml0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6aW5pdCgpIik7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6aGVsbG8oKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjpoZWxsbygpIik7CiBTeXN0ZW0ub3V0LnByaW50bG4oIisrKyBzZXNzaW9uQ3R4IHR5cGU6ICIgKyBzZXNzaW9uQ3R4LmdldENsYXNzKCkpOwogCi0JU3RhdGVmdWxFeHBpcmF0aW9uIHNlID0gKFN0YXRlZnVsRXhwaXJhdGlvbikgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL1N0YXRlZnVsRXhwaXJhdGlvbiIpOwotCXNlLmhlbGxvKCk7CisgICAgU3RhdGVmdWxFeHBpcmF0aW9uIHNlID0gKFN0YXRlZnVsRXhwaXJhdGlvbikgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL1N0YXRlZnVsRXhwaXJhdGlvbiIpOworICAgIHNlLmhlbGxvKCk7CiAKLQlzaW5nbGV0b25Ob0ludGYuaGVsbG8oKTsKLQlzaW5nbGV0b25NdWx0aUludGYuaGVsbG8oKTsKLQlsb2NhbDEuaGVsbG8oKTsKLQlsb2NhbDIuaGVsbG8oKTsKLQlyZW1vdGUxLmhlbGxvKCk7Ci0JcmVtb3RlMi5oZWxsbygpOwotCXN0YXRlbGVzc05vSW50Zi5oZWxsbygpOwotCXN0YXRlZnVsTm9JbnRmLmhlbGxvKCk7CisgICAgc2luZ2xldG9uTm9JbnRmLmhlbGxvKCk7CisgICAgc2luZ2xldG9uTXVsdGlJbnRmLmhlbGxvKCk7CisgICAgbG9jYWwxLmhlbGxvKCk7CisgICAgbG9jYWwyLmhlbGxvKCk7CisgICAgcmVtb3RlMS5oZWxsbygpOworICAgIHJlbW90ZTIuaGVsbG8oKTsKKyAgICBzdGF0ZWxlc3NOb0ludGYuaGVsbG8oKTsKKyAgICBzdGF0ZWZ1bE5vSW50Zi5oZWxsbygpOwogCi0JcmV0dXJuICJoZWxsbywgd29ybGRcbiI7CisgICAgcmV0dXJuICJoZWxsbywgd29ybGRcbiI7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gcGFzc2l2YXRlZEFuZEFjdGl2YXRlZCgpIHsKLQlyZXR1cm4gcGFzc2l2YXRlZCAmJiBhY3RpdmF0ZWQ7CisgICAgcmV0dXJuIHBhc3NpdmF0ZWQgJiYgYWN0aXZhdGVkOwogICAgIH0KIAogICAgIEBQcmVQYXNzaXZhdGUKICAgICBwdWJsaWMgdm9pZCBwcmVQYXNzKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjpwcmVQYXNzKCkiKTsKLQlwYXNzaXZhdGVkID0gdHJ1ZTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6cHJlUGFzcygpIik7CisgICAgcGFzc2l2YXRlZCA9IHRydWU7CiAgICAgfQogCiAgICAgQFBvc3RBY3RpdmF0ZQogICAgIHB1YmxpYyB2b2lkIHBvc3RBY3QoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OnBvc3RBY3QoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjpwb3N0QWN0KCkiKTsKICAgICAgICAgaGVsbG8oKTsKLQlhY3RpdmF0ZWQgPSB0cnVlOworICAgIGFjdGl2YXRlZCA9IHRydWU7CiAgICAgfQotICAgIAorCiAKIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6ZGVzdHJveSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmRlc3Ryb3koKSIpOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2VqYi9Ob25TZXJpYWxpemFibGVJbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9lamIvTm9uU2VyaWFsaXphYmxlSW50ZXJjZXB0b3IuamF2YQppbmRleCA0MmI3OGUzLi5kNzc1YTQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2VqYi9Ob25TZXJpYWxpemFibGVJbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZWpiL05vblNlcmlhbGl6YWJsZUludGVyY2VwdG9yLmphdmEKQEAgLTI3LDI2ICsyNywyNiBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdChJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIE5vblNlcmlhbGl6YWJsZUludGVyY2VwdG9yOjppbml0KCkgIik7Ci0JaSA9IDEwOwotCWMucHJvY2VlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTm9uU2VyaWFsaXphYmxlSW50ZXJjZXB0b3I6OmluaXQoKSAiKTsKKyAgICBpID0gMTA7CisgICAgYy5wcm9jZWVkKCk7CiAgICAgfQogCiAgICAgQEFyb3VuZEludm9rZQotCXB1YmxpYyBPYmplY3QgZG9BSShJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBwdWJsaWMgT2JqZWN0IGRvQUkoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIGRvQUkgLCBpID0gIiArIGkpOwotCWlmKCBpICE9IDEwICkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJXcm9uZyB2YWx1ZSBvZiBpbnRlcmNlcHRvciBzdGF0ZSA9ICIgKwotCQkJCSAgIGkpOwotCX0KLQlyZXR1cm4gYy5wcm9jZWVkKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBkb0FJICwgaSA9ICIgKyBpKTsKKyAgICBpZiggaSAhPSAxMCApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiV3JvbmcgdmFsdWUgb2YgaW50ZXJjZXB0b3Igc3RhdGUgPSAiICsKKyAgICAgICAgICAgICAgICAgICBpKTsKKyAgICB9CisgICAgcmV0dXJuIGMucHJvY2VlZCgpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBOb25TZXJpYWxpemFibGVJbnRlcmNlcHRvcjo6ZGVzdHJveSgpICIpOwotCWMucHJvY2VlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTm9uU2VyaWFsaXphYmxlSW50ZXJjZXB0b3I6OmRlc3Ryb3koKSAiKTsKKyAgICBjLnByb2NlZWQoKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZWpiL1NpbmdsZXRvbk11bHRpSW50Zi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9lamIvU2luZ2xldG9uTXVsdGlJbnRmLmphdmEKaW5kZXggNDJlOWY5NC4uMWJmNTFhMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9lamIvU2luZ2xldG9uTXVsdGlJbnRmLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9lamIvU2luZ2xldG9uTXVsdGlJbnRmLmphdmEKQEAgLTMxLDE4ICszMSwxOCBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uTXVsdGlJbnRmOjppbml0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbk11bHRpSW50Zjo6aW5pdCgpIik7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbk11bHRpSW50Zjo6aGVsbG8oKSBpbnZva2VkIGJ5ICIgKwotCQkJICAgc2Vzc2lvbkN0eC5nZXRJbnZva2VkQnVzaW5lc3NJbnRlcmZhY2UoKSk7Ci0JcmV0dXJuICJoZWxsbywgd29ybGRcbiI7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25NdWx0aUludGY6OmhlbGxvKCkgaW52b2tlZCBieSAiICsKKyAgICAgICAgICAgICAgIHNlc3Npb25DdHguZ2V0SW52b2tlZEJ1c2luZXNzSW50ZXJmYWNlKCkpOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkXG4iOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbk11bHRpSW50Zjo6ZGVzdHJveSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25NdWx0aUludGY6OmRlc3Ryb3koKSIpOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2VqYi9TaW5nbGV0b25Ob0ludGYuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZWpiL1NpbmdsZXRvbk5vSW50Zi5qYXZhCmluZGV4IDBkNTNhZGIuLmFhODNlNTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZWpiL1NpbmdsZXRvbk5vSW50Zi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZWpiL1NpbmdsZXRvbk5vSW50Zi5qYXZhCkBAIC0yNSwxNyArMjUsMTcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbk5vSW50Zjo6aW5pdCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25Ob0ludGY6OmluaXQoKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25Ob0ludGY6OmhlbGxvKCkiKTsKLQlyZXR1cm4gImhlbGxvLCB3b3JsZFxuIjsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbk5vSW50Zjo6aGVsbG8oKSIpOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkXG4iOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbk5vSW50Zjo6ZGVzdHJveSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25Ob0ludGY6OmRlc3Ryb3koKSIpOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2VqYi9TdGF0ZWZ1bEV4cGlyYXRpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZWpiL1N0YXRlZnVsRXhwaXJhdGlvbi5qYXZhCmluZGV4IDc3MTRlMGIuLjFlNDFjOWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZWpiL1N0YXRlZnVsRXhwaXJhdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZWpiL1N0YXRlZnVsRXhwaXJhdGlvbi5qYXZhCkBAIC0yNiwxNyArMjYsMTcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsRXhwaXJhdGlvbjo6aW5pdCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEV4cGlyYXRpb246OmluaXQoKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEV4cGlyYXRpb246OmhlbGxvKCkiKTsKLQlyZXR1cm4gImhlbGxvLCB3b3JsZFxuIjsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsRXhwaXJhdGlvbjo6aGVsbG8oKSIpOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkXG4iOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsRXhwaXJhdGlvbjo6ZGVzdHJveSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEV4cGlyYXRpb246OmRlc3Ryb3koKSIpOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2VqYi9TdGF0ZWZ1bE5vSW50Zi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9lamIvU3RhdGVmdWxOb0ludGYuamF2YQppbmRleCA4NWEzODc0Li45MzM0OWE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2VqYi9TdGF0ZWZ1bE5vSW50Zi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZWpiL1N0YXRlZnVsTm9JbnRmLmphdmEKQEAgLTI3LDIyICsyNywyMiBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxOb0ludGY6OmluaXQoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxOb0ludGY6OmluaXQoKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bE5vSW50Zjo6aGVsbG8oKSIpOwotCXJldHVybiAiaGVsbG8sIHdvcmxkXG4iOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxOb0ludGY6OmhlbGxvKCkiKTsKKyAgICByZXR1cm4gImhlbGxvLCB3b3JsZFxuIjsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bE5vSW50Zjo6ZGVzdHJveSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bE5vSW50Zjo6ZGVzdHJveSgpIik7CiAgICAgfQogCiAgICAgQFByZVBhc3NpdmF0ZQogICAgIHB1YmxpYyB2b2lkIHBhc3NpdmF0ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsTm9JbnRmOjpwYXNzaXZhdGUoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxOb0ludGY6OnBhc3NpdmF0ZSgpIik7CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZWpiL1N0YXRlbGVzc05vSW50Zi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9lamIvU3RhdGVsZXNzTm9JbnRmLmphdmEKaW5kZXggYzA4Mjc1NC4uNjA4OTczYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9lamIvU3RhdGVsZXNzTm9JbnRmLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9lamIvU3RhdGVsZXNzTm9JbnRmLmphdmEKQEAgLTI1LDE3ICsyNSwxNyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzTm9JbnRmOjppbml0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc05vSW50Zjo6aW5pdCgpIik7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc05vSW50Zjo6aGVsbG8oKSIpOwotCXJldHVybiAiaGVsbG8sIHdvcmxkXG4iOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzTm9JbnRmOjpoZWxsbygpIik7CisgICAgcmV0dXJuICJoZWxsbywgd29ybGRcbiI7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzTm9JbnRmOjpkZXN0cm95KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc05vSW50Zjo6ZGVzdHJveSgpIik7CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTEvYnVpbGQucHJvcGVydGllcwppbmRleCBiMjZhNTMxLi4wMzJmYTJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUxL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMS1mdWxsLXJlbW90ZTEiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KLQkKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUxL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTEvYnVpbGQueG1sCmluZGV4IDdjYzNlMGUuLjdlOTIxNWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTEvYnVpbGQueG1sCkBAIC0yOSwxNSArMjksMTUgQEAKICAgICAmY29tbW9uQnVpbGQ7CiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwogCi0gICAgPCEtLSBub3RlIHRoYXQgd2UgZG9uJ3QgdW5kZXBsb3kgYXMgcGFydCBvZiBhbGwgdGFyZ2V0IHNvIAorICAgIDwhLS0gbm90ZSB0aGF0IHdlIGRvbid0IHVuZGVwbG95IGFzIHBhcnQgb2YgYWxsIHRhcmdldCBzbwogICAgIHRoYXQgdG9wLWxldmVsIGJ1aWxkIHNjcmlwdCBjYW4gcnVuIHJlbW90ZTIgZmlyc3QgLS0+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJ1biIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OSwxMiArNDksMTIgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9CbGFoLmNsYXNzLCoqL1NpbmdsZXRvbiouY2xhc3MsKiovSGVsbG8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDkgKzYyLDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CkBAIC03NSw3ICs3NSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUxL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTEvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGY2MWJiZDIuLjNlNTExMzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTEvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTEvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMSwxNyArMzEsMTcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAKLQlhcHBOYW1lID0gYXJnc1swXTsgCi0Jc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKLQlDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsgICAgICAgCi0gICAgICAgIGNsaWVudC5kb1Rlc3QoKTsJCisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKKyAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKKyAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7CiAgICAgfQogCkBAIC00OSwxNDQgKzQ5LDE0NCBAQAogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCi0JdHJ5IHsKKyAgICB0cnkgewogCi0JICAgIC8qKgotCSAgICBPYmplY3Qgbz0gKEhlbGxvSG9tZSkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJjb3JiYW5hbWU6aWlvcDpsb2NhbGhvc3Q6MzcwMCNISCIpOwotCSAgICBIZWxsb0hvbWUgaGVsbG9Ib21lQ29yYmFOYW1lID0gKEhlbGxvSG9tZSkKLQkJamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBIZWxsb0hvbWUuY2xhc3MpOwotCSAgICBjYWxsSG9tZShoZWxsb0hvbWVDb3JiYU5hbWUpOwotCSAgICAqLworICAgICAgICAvKioKKyAgICAgICAgT2JqZWN0IG89IChIZWxsb0hvbWUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiY29yYmFuYW1lOmlpb3A6bG9jYWxob3N0OjM3MDAjSEgiKTsKKyAgICAgICAgSGVsbG9Ib21lIGhlbGxvSG9tZUNvcmJhTmFtZSA9IChIZWxsb0hvbWUpCisgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgSGVsbG9Ib21lLmNsYXNzKTsKKyAgICAgICAgY2FsbEhvbWUoaGVsbG9Ib21lQ29yYmFOYW1lKTsKKyAgICAgICAgKi8KIAotCSAgICBIZWxsb0hvbWUgaGVsbG9Ib21lID0gKEhlbGxvSG9tZSkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvSGVsbG9CZWFuIWNvbS5hY21lLkhlbGxvSG9tZSIpOwotCSAgICBjYWxsSG9tZShoZWxsb0hvbWUpOworICAgICAgICBIZWxsb0hvbWUgaGVsbG9Ib21lID0gKEhlbGxvSG9tZSkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvSGVsbG9CZWFuIWNvbS5hY21lLkhlbGxvSG9tZSIpOworICAgICAgICBjYWxsSG9tZShoZWxsb0hvbWUpOwogCi0JICAgIEhlbGxvIGhlbGxvID0gKEhlbGxvKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoIkhII2NvbS5hY21lLkhlbGxvIik7CisgICAgICAgIEhlbGxvIGhlbGxvID0gKEhlbGxvKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoIkhII2NvbS5hY21lLkhlbGxvIik7CiAKLQkgICAgLy8gQEBAIFRPRE8gU3lzdGVtLm91dC5wcmludGxuKCJMb29rdXAgdmlhIGFwcC1kZWZpbmVkIGdsb2JhbCBuYW1lIik7Ci0JICAgIC8vIEBAQCBOb3QgaW1wbGVtZW50ZWQgeWV0IEBAQCBIZWxsbyBoZWxsb2cgPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvSEJHbG9iYWwiKTsKKyAgICAgICAgLy8gQEBAIFRPRE8gU3lzdGVtLm91dC5wcmludGxuKCJMb29rdXAgdmlhIGFwcC1kZWZpbmVkIGdsb2JhbCBuYW1lIik7CisgICAgICAgIC8vIEBAQCBOb3QgaW1wbGVtZW50ZWQgeWV0IEBAQCBIZWxsbyBoZWxsb2cgPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvSEJHbG9iYWwiKTsKIAotCSAgICBGdXR1cmU8U3RyaW5nPiBmdXR1cmUgPSBoZWxsby5oZWxsb0FzeW5jKCk7CSAgIAotCSAgICAKLQkgICAgLy8gIm1lbW9yeSBsZWFrIiBkb24ndCBjYWxsIGdldCBvbiBhc3luYyB0aGF0IHJldHVybnMgYSBmdXR1cmUKLQkgICAgLy8gQXQgdGhlIGxlYXN0IHNob3VsZCBiZSBjbGVhbmVkIHVwIGF0IGNvbnRhaW5lciBzaHV0ZG93biBidXQKLQkgICAgLy8gYnV0IHBvc3NpYmx5IHNvb25lcgotCSAgICBoZWxsby5oZWxsb0FzeW5jKCk7Ci0JICAgIGhlbGxvLmhlbGxvQXN5bmMoKTsKLQkgICAgaGVsbG8uaGVsbG9Bc3luYygpOworICAgICAgICBGdXR1cmU8U3RyaW5nPiBmdXR1cmUgPSBoZWxsby5oZWxsb0FzeW5jKCk7CiAKLQkgICAgaGVsbG8uZmlyZUFuZEZvcmdldCgpOwkgICAKLQkgICAKLQkgICAgdHJ5IHsKLQkJU3RyaW5nIHJlc3VsdCA9IGZ1dHVyZS5nZXQoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJoZWxsb0FzeW5jKCkgc2F5cyA6ICIgKyByZXN1bHQpOwotCSAgICB9IGNhdGNoKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiR290IGFzeW5jIEV4ZWN1dGlvbkV4Y2VwdGlvbi4gQ2F1c2UgaXMgIiArCi0JCQkJICAgZS5nZXRDYXVzZSgpLmdldE1lc3NhZ2UoKSk7Ci0JCWUuZ2V0Q2F1c2UoKS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgfQorICAgICAgICAvLyAibWVtb3J5IGxlYWsiIGRvbid0IGNhbGwgZ2V0IG9uIGFzeW5jIHRoYXQgcmV0dXJucyBhIGZ1dHVyZQorICAgICAgICAvLyBBdCB0aGUgbGVhc3Qgc2hvdWxkIGJlIGNsZWFuZWQgdXAgYXQgY29udGFpbmVyIHNodXRkb3duIGJ1dAorICAgICAgICAvLyBidXQgcG9zc2libHkgc29vbmVyCisgICAgICAgIGhlbGxvLmhlbGxvQXN5bmMoKTsKKyAgICAgICAgaGVsbG8uaGVsbG9Bc3luYygpOworICAgICAgICBoZWxsby5oZWxsb0FzeW5jKCk7CiAKLQkgICAgRnV0dXJlPFN0cmluZz4gZnV0dXJlVE8gPSBoZWxsby5hc3luY0Jsb2NrKDUpOwkgICAgCi0JICAgIC8vIFRlc3QgdGltZW91dAotCSAgICB0cnkgeworICAgICAgICBoZWxsby5maXJlQW5kRm9yZ2V0KCk7CiAKLQkJU3RyaW5nIHJlc3VsdCA9IGZ1dHVyZVRPLmdldCgxLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOwotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTaG91bGQgaGF2ZSB0aW1lZCBvdXQiKTsKLQkgICAgfSBjYXRjaChUaW1lb3V0RXhjZXB0aW9uIHRvZSkgewotCQl0cnkgewotCQkgICAgU3RyaW5nIHJlc3VsdCA9IGZ1dHVyZVRPLmdldCgpOwotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJhc3luY0Jsb2NrKCkgc2F5cyA6ICIgKyByZXN1bHQpOwotCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCQl9Ci0JICAgIH0gY2F0Y2goRXhlY3V0aW9uRXhjZXB0aW9uIGUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJHb3QgYXN5bmMgRXhlY3V0aW9uRXhjZXB0aW9uLiBDYXVzZSBpcyAiICsKLQkJCQkgICBlLmdldENhdXNlKCkuZ2V0TWVzc2FnZSgpKTsKLQkJZS5nZXRDYXVzZSgpLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9Ci0JIAotCSAgICBGdXR1cmU8U3RyaW5nPiBmdXR1cmVFeGNlcHRpb24gPSAKLQkJaGVsbG8uYXN5bmNUaHJvd0V4Y2VwdGlvbigiamFrYXJ0YS5lamIuQ29uY3VycmVudEFjY2Vzc1RpbWVvdXRFeGNlcHRpb24iKTsKLQkgICAgdHJ5IHsKLQkJU3RyaW5nIHJlc3VsdCA9IGZ1dHVyZUV4Y2VwdGlvbi5nZXQoKTsKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU2hvdWxkIGhhdmUgZ290dGVuIGV4Y2VwdGlvbiIpOwotCSAgICB9IGNhdGNoKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCWlmKCBlLmdldENhdXNlKCkgaW5zdGFuY2VvZiBqYWthcnRhLmVqYi5Db25jdXJyZW50QWNjZXNzVGltZW91dEV4Y2VwdGlvbikgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgY29ycmVjdCBhc3luYyBleGNlcHRpb24uIENhdXNlIGlzICIgKwotCQkJCSAgICAgICBlLmdldENhdXNlKCkuZ2V0TWVzc2FnZSgpKTsKLQkJfSBlbHNlIHsKLQkJICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIndyb25nIGV4Y2VwdGlvbiIsIGUpOwotCQl9Ci0JICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGZ1dHVyZS5nZXQoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJoZWxsb0FzeW5jKCkgc2F5cyA6ICIgKyByZXN1bHQpOworICAgICAgICB9IGNhdGNoKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGFzeW5jIEV4ZWN1dGlvbkV4Y2VwdGlvbi4gQ2F1c2UgaXMgIiArCisgICAgICAgICAgICAgICAgICAgZS5nZXRDYXVzZSgpLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIGUuZ2V0Q2F1c2UoKS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQogCi0JICAgIEZ1dHVyZTxTdHJpbmc+IGZ1dHVyZUNhbmNlbCA9IG51bGw7Ci0JICAgIHRyeSB7Ci0JCWZ1dHVyZUNhbmNlbCA9IGhlbGxvLmFzeW5jQ2FuY2VsKDUpOwotCQlmdXR1cmVDYW5jZWwuY2FuY2VsKHRydWUpOwotCQlmdXR1cmVDYW5jZWwuZ2V0KCk7CQotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTaG91bGQgaGF2ZSBnb3R0ZW4gZXhjZXB0aW9uIik7Ci0JICAgIH0gY2F0Y2goRXhlY3V0aW9uRXhjZXB0aW9uIGUpIHsKLQkJaWYoIGUuZ2V0Q2F1c2UoKS5nZXRDbGFzcygpLmdldE5hbWUoKS5lcXVhbHMoImphdmEubGFuZy5FeGNlcHRpb24iKSkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgY29ycmVjdCBhc3luYyBleGNlcHRpb24uIENhdXNlIGlzICIgKwotCQkJCSAgICAgICBlLmdldENhdXNlKCkuZ2V0TWVzc2FnZSgpKTsKLQkJfSBlbHNlIHsKLQkJICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIndyb25nIGV4Y2VwdGlvbiIsIGUpOwotCQl9Ci0JICAgIH0KKyAgICAgICAgRnV0dXJlPFN0cmluZz4gZnV0dXJlVE8gPSBoZWxsby5hc3luY0Jsb2NrKDUpOworICAgICAgICAvLyBUZXN0IHRpbWVvdXQKKyAgICAgICAgdHJ5IHsKIAotCSAgICB0cnkgewotCQloZWxsby50aHJvd0V4Y2VwdGlvbigiamFrYXJ0YS5lamIuQ29uY3VycmVudEFjY2Vzc0V4Y2VwdGlvbiIpOwotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJleHBlY3RlZCBhbiBleGNlcHRpb24iKTsKLQkgICAgfSBjYXRjaChDb25jdXJyZW50QWNjZXNzRXhjZXB0aW9uIGNhZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCAiICsgY2FlKTsKLQkgICAgfQorICAgICAgICBTdHJpbmcgcmVzdWx0ID0gZnV0dXJlVE8uZ2V0KDEsIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNob3VsZCBoYXZlIHRpbWVkIG91dCIpOworICAgICAgICB9IGNhdGNoKFRpbWVvdXRFeGNlcHRpb24gdG9lKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gZnV0dXJlVE8uZ2V0KCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFzeW5jQmxvY2soKSBzYXlzIDogIiArIHJlc3VsdCk7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CisgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBhc3luYyBFeGVjdXRpb25FeGNlcHRpb24uIENhdXNlIGlzICIgKworICAgICAgICAgICAgICAgICAgIGUuZ2V0Q2F1c2UoKS5nZXRNZXNzYWdlKCkpOworICAgICAgICBlLmdldENhdXNlKCkucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KIAotCSAgICB0cnkgewotCQloZWxsby50aHJvd0V4Y2VwdGlvbigiamFrYXJ0YS5lamIuQ29uY3VycmVudEFjY2Vzc1RpbWVvdXRFeGNlcHRpb24iKTsKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZXhwZWN0ZWQgYW4gZXhjZXB0aW9uIik7Ci0JICAgIH0gY2F0Y2goQ29uY3VycmVudEFjY2Vzc1RpbWVvdXRFeGNlcHRpb24gY2F0KSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkICIgKyBjYXQpOwotCSAgICB9CisgICAgICAgIEZ1dHVyZTxTdHJpbmc+IGZ1dHVyZUV4Y2VwdGlvbiA9CisgICAgICAgIGhlbGxvLmFzeW5jVGhyb3dFeGNlcHRpb24oImpha2FydGEuZWpiLkNvbmN1cnJlbnRBY2Nlc3NUaW1lb3V0RXhjZXB0aW9uIik7CisgICAgICAgIHRyeSB7CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBmdXR1cmVFeGNlcHRpb24uZ2V0KCk7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNob3VsZCBoYXZlIGdvdHRlbiBleGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZSkgeworICAgICAgICBpZiggZS5nZXRDYXVzZSgpIGluc3RhbmNlb2YgamFrYXJ0YS5lamIuQ29uY3VycmVudEFjY2Vzc1RpbWVvdXRFeGNlcHRpb24pIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGNvcnJlY3QgYXN5bmMgZXhjZXB0aW9uLiBDYXVzZSBpcyAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgZS5nZXRDYXVzZSgpLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJ3cm9uZyBleGNlcHRpb24iLCBlKTsKKyAgICAgICAgfQorICAgICAgICB9CiAKLQkgICAgdHJ5IHsKLQkJaGVsbG8udGhyb3dFeGNlcHRpb24oImpha2FydGEuZWpiLklsbGVnYWxMb29wYmFja0V4Y2VwdGlvbiIpOwotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJleHBlY3RlZCBhbiBleGNlcHRpb24iKTsKLQkgICAgfSBjYXRjaChJbGxlZ2FsTG9vcGJhY2tFeGNlcHRpb24gaWxlKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkICIgKyBpbGUpOwotCSAgICB9CisgICAgICAgIEZ1dHVyZTxTdHJpbmc+IGZ1dHVyZUNhbmNlbCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgIGZ1dHVyZUNhbmNlbCA9IGhlbGxvLmFzeW5jQ2FuY2VsKDUpOworICAgICAgICBmdXR1cmVDYW5jZWwuY2FuY2VsKHRydWUpOworICAgICAgICBmdXR1cmVDYW5jZWwuZ2V0KCk7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNob3VsZCBoYXZlIGdvdHRlbiBleGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZSkgeworICAgICAgICBpZiggZS5nZXRDYXVzZSgpLmdldENsYXNzKCkuZ2V0TmFtZSgpLmVxdWFscygiamF2YS5sYW5nLkV4Y2VwdGlvbiIpKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBjb3JyZWN0IGFzeW5jIGV4Y2VwdGlvbi4gQ2F1c2UgaXMgIiArCisgICAgICAgICAgICAgICAgICAgICAgIGUuZ2V0Q2F1c2UoKS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigid3JvbmcgZXhjZXB0aW9uIiwgZSk7CisgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7CisgICAgICAgIGhlbGxvLnRocm93RXhjZXB0aW9uKCJqYWthcnRhLmVqYi5Db25jdXJyZW50QWNjZXNzRXhjZXB0aW9uIik7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImV4cGVjdGVkIGFuIGV4Y2VwdGlvbiIpOworICAgICAgICB9IGNhdGNoKENvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24gY2FlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkICIgKyBjYWUpOworICAgICAgICB9CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaGVsbG8udGhyb3dFeGNlcHRpb24oImpha2FydGEuZWpiLkNvbmN1cnJlbnRBY2Nlc3NUaW1lb3V0RXhjZXB0aW9uIik7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImV4cGVjdGVkIGFuIGV4Y2VwdGlvbiIpOworICAgICAgICB9IGNhdGNoKENvbmN1cnJlbnRBY2Nlc3NUaW1lb3V0RXhjZXB0aW9uIGNhdCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCAiICsgY2F0KTsKKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7CisgICAgICAgIGhlbGxvLnRocm93RXhjZXB0aW9uKCJqYWthcnRhLmVqYi5JbGxlZ2FsTG9vcGJhY2tFeGNlcHRpb24iKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZXhwZWN0ZWQgYW4gZXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2goSWxsZWdhbExvb3BiYWNrRXhjZXB0aW9uIGlsZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCAiICsgaWxlKTsKKyAgICAgICAgfQogCiAKLQkgICAgLy8gRnVsbHktcXVhbGlmaWVkIHBvcnRhYmxlIGdsb2JhbAotCSAgICBIZWxsb0hvbWUgaGVsbG9Ib21lMiA9IChIZWxsb0hvbWUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL0hlbGxvQmVhbiFjb20uYWNtZS5IZWxsb0hvbWUiKTsKLQkgICAgY2FsbEhvbWUoaGVsbG9Ib21lMik7CisgICAgICAgIC8vIEZ1bGx5LXF1YWxpZmllZCBwb3J0YWJsZSBnbG9iYWwKKyAgICAgICAgSGVsbG9Ib21lIGhlbGxvSG9tZTIgPSAoSGVsbG9Ib21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9IZWxsb0JlYW4hY29tLmFjbWUuSGVsbG9Ib21lIik7CisgICAgICAgIGNhbGxIb21lKGhlbGxvSG9tZTIpOwogCi0JICAgIEhlbGxvIGhlbGxvMiA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvSGVsbG9CZWFuIWNvbS5hY21lLkhlbGxvIik7Ci0JICAgIGNhbGxCdXNIb21lKGhlbGxvMik7CisgICAgICAgIEhlbGxvIGhlbGxvMiA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvSGVsbG9CZWFuIWNvbS5hY21lLkhlbGxvIik7CisgICAgICAgIGNhbGxCdXNIb21lKGhlbGxvMik7CiAKLQkgICAgLy8gbm9uLXBvcnRhYmxlIGdsb2JhbAotCSAgICBIZWxsb0hvbWUgaGVsbG9Ib21lNSA9IChIZWxsb0hvbWUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiSEgiKTsKLQkgICAgY2FsbEhvbWUoaGVsbG9Ib21lNSk7CisgICAgICAgIC8vIG5vbi1wb3J0YWJsZSBnbG9iYWwKKyAgICAgICAgSGVsbG9Ib21lIGhlbGxvSG9tZTUgPSAoSGVsbG9Ib21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoIkhIIik7CisgICAgICAgIGNhbGxIb21lKGhlbGxvSG9tZTUpOwogCi0JICAgIEhlbGxvIGhlbGxvNSA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJISCNjb20uYWNtZS5IZWxsbyIpOwotCSAgICBjYWxsQnVzSG9tZShoZWxsbzUpOworICAgICAgICBIZWxsbyBoZWxsbzUgPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiSEgjY29tLmFjbWUuSGVsbG8iKTsKKyAgICAgICAgY2FsbEJ1c0hvbWUoaGVsbG81KTsKIAotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGNhbGxIb21lKEhlbGxvSG9tZSBob21lKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkvLwlIZWxsb0hvbWUgaG9tZSA9IChIZWxsb0hvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmosIEhlbGxvSG9tZS5jbGFzcyk7Ci0JSGVsbG9SZW1vdGUgaHIgPSBob21lLmNyZWF0ZSgpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiMi54IEhlbGxvUmVtb3RlLmhlbGxvKCkgc2F5cyAiICsgaHIuaGVsbG8oKSk7CisgICAgLy8gICAgSGVsbG9Ib21lIGhvbWUgPSAoSGVsbG9Ib21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqLCBIZWxsb0hvbWUuY2xhc3MpOworICAgIEhlbGxvUmVtb3RlIGhyID0gaG9tZS5jcmVhdGUoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjIueCBIZWxsb1JlbW90ZS5oZWxsbygpIHNheXMgIiArIGhyLmhlbGxvKCkpOwogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgY2FsbEJ1c0hvbWUoSGVsbG8gaCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8uaGVsbG8oKSBzYXlzICIgKyBoLmhlbGxvKCkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8uaGVsbG8oKSBzYXlzICIgKyBoLmhlbGxvKCkpOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUxL2NsaWVudC9DbGllbnQyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUxL2NsaWVudC9DbGllbnQyLmphdmEKaW5kZXggOWJiODdlZi4uODMwY2UzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMS9jbGllbnQvQ2xpZW50Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTEvY2xpZW50L0NsaWVudDIuamF2YQpAQCAtMjMsMjkgKzIzLDI5IEBACiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAKLQlTdHJpbmcgaG9zdDsKLQkgU3RyaW5nIHBvcnQ7CisgICAgU3RyaW5nIGhvc3Q7CisgICAgIFN0cmluZyBwb3J0OwogCi0JdHJ5IHsKLQkgICAgUHJvcGVydGllcyBwID0gbmV3IFByb3BlcnRpZXMoKTsKLQkgICAgaWYoIGFyZ3MubGVuZ3RoID4gMCApIHsKLQkJaG9zdCA9IGFyZ3NbMF07Ci0JCXAucHV0KCJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxIb3N0IiwgaG9zdCk7Ci0JICAgIH0KKyAgICB0cnkgeworICAgICAgICBQcm9wZXJ0aWVzIHAgPSBuZXcgUHJvcGVydGllcygpOworICAgICAgICBpZiggYXJncy5sZW5ndGggPiAwICkgeworICAgICAgICBob3N0ID0gYXJnc1swXTsKKyAgICAgICAgcC5wdXQoIm9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbEhvc3QiLCBob3N0KTsKKyAgICAgICAgfQogCi0JICAgIGlmKCBhcmdzLmxlbmd0aCA+IDEgKSB7Ci0JCXBvcnQgPSBhcmdzWzFdOwotCQlwLnB1dCgib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIsIHBvcnQpOwotCSAgICB9CisgICAgICAgIGlmKCBhcmdzLmxlbmd0aCA+IDEgKSB7CisgICAgICAgIHBvcnQgPSBhcmdzWzFdOworICAgICAgICBwLnB1dCgib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIsIHBvcnQpOworICAgICAgICB9CiAKLQkgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQocCk7Ci0JICAgIEhlbGxvIGggPSAoSGVsbG8pIGljLmxvb2t1cCgiSEgjY29tLmFjbWUuSGVsbG8iKTsKLQkgICAgaC5oZWxsbygpOworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dChwKTsKKyAgICAgICAgSGVsbG8gaCA9IChIZWxsbykgaWMubG9va3VwKCJISCNjb20uYWNtZS5IZWxsbyIpOworICAgICAgICBoLmhlbGxvKCk7CiAKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMS9lamIvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTEvZWpiL0hlbGxvLmphdmEKaW5kZXggODBlYWEzMS4uM2VkZTA2ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMS9lamIvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUxL2VqYi9IZWxsby5qYXZhCkBAIC0zMCwxMCArMzAsMTAgQEAKIAogICAgIC8vIG1hcmtlZCBhc3luYyBvbiBiZWFuIGNsYXNzCiAgICAgdm9pZCBmaXJlQW5kRm9yZ2V0KCk7Ci0JCisKICAgICBGdXR1cmU8U3RyaW5nPiBhc3luY1Rocm93RXhjZXB0aW9uKFN0cmluZyBleGNlcHRpb25UeXBlKTsKIAogICAgIEZ1dHVyZTxTdHJpbmc+IGFzeW5jQ2FuY2VsKGludCBzZWNvbmRzKSB0aHJvd3MgRXhjZXB0aW9uOwotICAgIAorCiAgICAgdm9pZCB0aHJvd0V4Y2VwdGlvbihTdHJpbmcgZXhjZXB0aW9uVHlwZSk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUxL2VqYi9IZWxsb0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTEvZWpiL0hlbGxvQmVhbi5qYXZhCmluZGV4IGVlYzM1MjMuLmIzMWQ2ZTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTEvZWpiL0hlbGxvQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTEvZWpiL0hlbGxvQmVhbi5qYXZhCkBAIC01MSw4MyArNTEsODMgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6aW5pdCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmluaXQoKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmhlbGxvKCkiKTsKLQlyZXR1cm4gImhlbGxvLCB3b3JsZFxuIjsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6aGVsbG8oKSIpOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkXG4iOwogICAgIH0KIAogICAgIEBBc3luY2hyb25vdXMKICAgICBwdWJsaWMgRnV0dXJlPFN0cmluZz4gaGVsbG9Bc3luYygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6aGVsbG9Bc3luYygpIik7Ci0JcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KCJoZWxvLCBhc3luYyB3b3JsZCFcbiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjpoZWxsb0FzeW5jKCkiKTsKKyAgICByZXR1cm4gbmV3IEFzeW5jUmVzdWx0PFN0cmluZz4oImhlbG8sIGFzeW5jIHdvcmxkIVxuIik7CiAgICAgfQogCiAgICAgQEFzeW5jaHJvbm91cwogICAgIHB1YmxpYyBGdXR1cmU8U3RyaW5nPiBhc3luY0Jsb2NrKGludCBzZWNvbmRzKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmFzeW5jQmxvY2siKTsKLQlzbGVlcChzZWNvbmRzKTsKLQlyZXR1cm4gbmV3IEFzeW5jUmVzdWx0PFN0cmluZz4oImJsb2NrZWQgc3VjY2Vzc2Z1bGx5Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmFzeW5jQmxvY2siKTsKKyAgICBzbGVlcChzZWNvbmRzKTsKKyAgICByZXR1cm4gbmV3IEFzeW5jUmVzdWx0PFN0cmluZz4oImJsb2NrZWQgc3VjY2Vzc2Z1bGx5Iik7CiAgICAgfQogCi0gICAgQEFzeW5jaHJvbm91cyAKKyAgICBAQXN5bmNocm9ub3VzCiAgICAgcHVibGljIHZvaWQgZmlyZUFuZEZvcmdldCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6ZmlyZUFuZEZvcmdldCgpIik7Ci0Jc2xlZXAoNSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmZpcmVBbmRGb3JnZXQoKSIpOworICAgIHNsZWVwKDUpOwogICAgIH0KLQkKKwogICAgIEBBc3luY2hyb25vdXMKICAgICBwdWJsaWMgRnV0dXJlPFN0cmluZz4gYXN5bmNUaHJvd0V4Y2VwdGlvbihTdHJpbmcgZXhjZXB0aW9uVHlwZSkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjphc3luY1Rocm93RXhjZXB0aW9uIik7Ci0JdGhyb3dFeGNlcHRpb24oZXhjZXB0aW9uVHlwZSk7Ci0JcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KCJzaG91bGQgaGF2ZSB0aHJvd24gZXhjZXB0aW9uIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmFzeW5jVGhyb3dFeGNlcHRpb24iKTsKKyAgICB0aHJvd0V4Y2VwdGlvbihleGNlcHRpb25UeXBlKTsKKyAgICByZXR1cm4gbmV3IEFzeW5jUmVzdWx0PFN0cmluZz4oInNob3VsZCBoYXZlIHRocm93biBleGNlcHRpb24iKTsKICAgICB9CiAKICAgICBAQXN5bmNocm9ub3VzCiAgICAgcHVibGljIEZ1dHVyZTxTdHJpbmc+IGFzeW5jQ2FuY2VsKGludCBzZWNvbmRzKSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjphc3luY0NhbmNlbCIpOwotCXNsZWVwKHNlY29uZHMpOwotCWlmKCBzZXNzaW9uQ3R4Lndhc0NhbmNlbENhbGxlZCgpICkgewotCSAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJDYW5jZWxlZCBhZnRlciAiICsgc2Vjb25kcyArICIgc2Vjb25kcyIpOwotCX0KLQlyZXR1cm4gbmV3IEFzeW5jUmVzdWx0PFN0cmluZz4oImFzeW5jQ2FuY2VsKCkgc2hvdWxkIGhhdmUgYmVlbiBjYW5jZWxsZWQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6YXN5bmNDYW5jZWwiKTsKKyAgICBzbGVlcChzZWNvbmRzKTsKKyAgICBpZiggc2Vzc2lvbkN0eC53YXNDYW5jZWxDYWxsZWQoKSApIHsKKyAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQ2FuY2VsZWQgYWZ0ZXIgIiArIHNlY29uZHMgKyAiIHNlY29uZHMiKTsKKyAgICB9CisgICAgcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KCJhc3luY0NhbmNlbCgpIHNob3VsZCBoYXZlIGJlZW4gY2FuY2VsbGVkIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGhyb3dFeGNlcHRpb24oU3RyaW5nIGV4Y2VwdGlvblR5cGUpIHsKLQlpZiggZXhjZXB0aW9uVHlwZS5lcXVhbHMoImpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbiIpICkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4Y2VwdGlvblR5cGUpOwotCX0gZWxzZSBpZiggZXhjZXB0aW9uVHlwZS5lcXVhbHMoImpha2FydGEuZWpiLkNvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24iKSApIHsKLQkgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24oZXhjZXB0aW9uVHlwZSk7Ci0JfSBlbHNlIGlmKCBleGNlcHRpb25UeXBlLmVxdWFscygiamFrYXJ0YS5lamIuQ29uY3VycmVudEFjY2Vzc1RpbWVvdXRFeGNlcHRpb24iKSApIHsKLQkgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRBY2Nlc3NUaW1lb3V0RXhjZXB0aW9uKGV4Y2VwdGlvblR5cGUpOwotCX0gZWxzZSBpZiggZXhjZXB0aW9uVHlwZS5lcXVhbHMoImpha2FydGEuZWpiLklsbGVnYWxMb29wYmFja0V4Y2VwdGlvbiIpICkgewotCSAgICB0aHJvdyBuZXcgSWxsZWdhbExvb3BiYWNrRXhjZXB0aW9uKGV4Y2VwdGlvblR5cGUpOwotCX0KKyAgICBpZiggZXhjZXB0aW9uVHlwZS5lcXVhbHMoImpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbiIpICkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4Y2VwdGlvblR5cGUpOworICAgIH0gZWxzZSBpZiggZXhjZXB0aW9uVHlwZS5lcXVhbHMoImpha2FydGEuZWpiLkNvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24iKSApIHsKKyAgICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24oZXhjZXB0aW9uVHlwZSk7CisgICAgfSBlbHNlIGlmKCBleGNlcHRpb25UeXBlLmVxdWFscygiamFrYXJ0YS5lamIuQ29uY3VycmVudEFjY2Vzc1RpbWVvdXRFeGNlcHRpb24iKSApIHsKKyAgICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRBY2Nlc3NUaW1lb3V0RXhjZXB0aW9uKGV4Y2VwdGlvblR5cGUpOworICAgIH0gZWxzZSBpZiggZXhjZXB0aW9uVHlwZS5lcXVhbHMoImpha2FydGEuZWpiLklsbGVnYWxMb29wYmFja0V4Y2VwdGlvbiIpICkgeworICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbExvb3BiYWNrRXhjZXB0aW9uKGV4Y2VwdGlvblR5cGUpOworICAgIH0KIAotCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oZXhjZXB0aW9uVHlwZSk7CisgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihleGNlcHRpb25UeXBlKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgc2xlZXAoaW50IHNlY29uZHMpIHsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjpzbGVlcGluZyBmb3IgIiArIHNlY29uZHMgKyAKLQkJCSAgICJzZWNvbmRzIik7Ci0JdHJ5IHsKLQkgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcChzZWNvbmRzICogMTAwMCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjp3b2tlIHVwIGZyb20gIiArIHNlY29uZHMgKyAKLQkJCSAgICAgICAic2Vjb25kIHNsZWVwIik7Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6c2xlZXBpbmcgZm9yICIgKyBzZWNvbmRzICsKKyAgICAgICAgICAgICAgICJzZWNvbmRzIik7CisgICAgdHJ5IHsKKyAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcChzZWNvbmRzICogMTAwMCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjp3b2tlIHVwIGZyb20gIiArIHNlY29uZHMgKworICAgICAgICAgICAgICAgICAgICJzZWNvbmQgc2xlZXAiKTsKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogCiAgICAgfQogCiAKICAgICBAUHJlRGVzdHJveQogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjpkZXN0cm95KCkiKTsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMS9lamIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMS9lamIvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IDM3YjEyNjUuLmM2NzhiZGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTEvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUxL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTMyLDU2ICszMiw1NiBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aW5pdCgpIik7CiAKLQl0cnkgewotCSAgICBIZWxsb1JlbW90ZSBociA9IGhlbGxvSG9tZS5jcmVhdGUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb2hlbGxvUmVtb3RlLmhlbGxvKCkgc2F5cyAiICsgaHIuaGVsbG8oKSk7CisgICAgdHJ5IHsKKyAgICAgICAgSGVsbG9SZW1vdGUgaHIgPSBoZWxsb0hvbWUuY3JlYXRlKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9oZWxsb1JlbW90ZS5oZWxsbygpIHNheXMgIiArIGhyLmhlbGxvKCkpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8uaGVsbG8oKSBzYXlzICIgKyBoZWxsby5oZWxsbygpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsby5oZWxsbygpIHNheXMgIiArIGhlbGxvLmhlbGxvKCkpOwogCi0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKLQkgICAgU2Vzc2lvbkNvbnRleHQgY3R4ID0gKFNlc3Npb25Db250ZXh0KSAKLQkJaWMubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvc2VzQ3R4Iik7CisgICAgICAgIFNlc3Npb25Db250ZXh0IGN0eCA9IChTZXNzaW9uQ29udGV4dCkKKyAgICAgICAgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvc2VzQ3R4Iik7CiAKLQkgICAgU2luZ2xldG9uQmVhbiBtZSA9IChTaW5nbGV0b25CZWFuKQotCQlpYy5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1mdWxsLXJlbW90ZTEtZWpiL1NpbmdsZXRvbkJlYW4iKTsKLQkgICAgCi0JICAgIFNpbmdsZXRvbkJlYW4gbWVUb28gPSAoU2luZ2xldG9uQmVhbikKLQkJaWMubG9va3VwKCJqYXZhOmFwcC9lamItZWpiMzEtZnVsbC1yZW1vdGUxLWVqYi9TaW5nbGV0b25CZWFuIWNvbS5hY21lLlNpbmdsZXRvbkJlYW4iKTsKKyAgICAgICAgU2luZ2xldG9uQmVhbiBtZSA9IChTaW5nbGV0b25CZWFuKQorICAgICAgICBpYy5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1mdWxsLXJlbW90ZTEtZWpiL1NpbmdsZXRvbkJlYW4iKTsKIAotCSAgICBIZWxsbyBtMSA9IChIZWxsbykgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvTTEiKTsKKyAgICAgICAgU2luZ2xldG9uQmVhbiBtZVRvbyA9IChTaW5nbGV0b25CZWFuKQorICAgICAgICBpYy5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1mdWxsLXJlbW90ZTEtZWpiL1NpbmdsZXRvbkJlYW4hY29tLmFjbWUuU2luZ2xldG9uQmVhbiIpOwogCi0JICAgIEhlbGxvSG9tZSBtMiA9IChIZWxsb0hvbWUpIGN0eC5sb29rdXAoImphdmE6bW9kdWxlL00yIik7CisgICAgICAgIEhlbGxvIG0xID0gKEhlbGxvKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL2Vudi9NMSIpOwogCi0JICAgIEhlbGxvIGExID0gKEhlbGxvKSBjdHgubG9va3VwKCJqYXZhOmFwcC9lbnYvQTEiKTsKKyAgICAgICAgSGVsbG9Ib21lIG0yID0gKEhlbGxvSG9tZSkgY3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvTTIiKTsKIAotCSAgICBIZWxsb0hvbWUgYTIgPSAoSGVsbG9Ib21lKSBpYy5sb29rdXAoImphdmE6YXBwL0EyIik7CisgICAgICAgIEhlbGxvIGExID0gKEhlbGxvKSBjdHgubG9va3VwKCJqYXZhOmFwcC9lbnYvQTEiKTsKIAotCSAgICB0cnkgewotCQlpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvQzEiKTsKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRXhwZWN0ZWQgZXhjZXB0aW9uIGFjY2Vzc2luZyBwcml2YXRlIGNvbXBvbmVudCBlbnZpcm9ubWVudCBlbnRyeSBvZiBIZWxsb0JlYW4iKTsKLQkgICAgfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBkaWQgKm5vdCogZmluZCBIZWxsb0JlYW4gcHJpdmF0ZSBjb21wb25lbnQgZW52aXJvbm1lbnQgZGVwZW5kZW5jeSIpOwotCSAgICB9CisgICAgICAgIEhlbGxvSG9tZSBhMiA9IChIZWxsb0hvbWUpIGljLmxvb2t1cCgiamF2YTphcHAvQTIiKTsKIAotCSAgICB0cnkgewotCQlpYy5sb29rdXAoImphdmE6Y29tcC9DMSIpOwotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJFeHBlY3RlZCBleGNlcHRpb24gYWNjZXNzaW5nIHByaXZhdGUgY29tcG9uZW50IGVudmlyb25tZW50IGVudHJ5IG9mIEhlbGxvQmVhbiIpOwotCSAgICB9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBlKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGRpZCAqbm90KiBmaW5kIEhlbGxvQmVhbiBwcml2YXRlIGNvbXBvbmVudCBlbnZpcm9ubWVudCBkZXBlbmRlbmN5Iik7Ci0JICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L0MxIik7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkV4cGVjdGVkIGV4Y2VwdGlvbiBhY2Nlc3NpbmcgcHJpdmF0ZSBjb21wb25lbnQgZW52aXJvbm1lbnQgZW50cnkgb2YgSGVsbG9CZWFuIik7CisgICAgICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgZGlkICpub3QqIGZpbmQgSGVsbG9CZWFuIHByaXZhdGUgY29tcG9uZW50IGVudmlyb25tZW50IGRlcGVuZGVuY3kiKTsKKyAgICAgICAgfQogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXkgQXBwTmFtZSA9ICIgKyAKLQkJCSAgICAgICBjdHgubG9va3VwKCJqYXZhOmFwcC9BcHBOYW1lIikpOworICAgICAgICB0cnkgeworICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9DMSIpOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJFeHBlY3RlZCBleGNlcHRpb24gYWNjZXNzaW5nIHByaXZhdGUgY29tcG9uZW50IGVudmlyb25tZW50IGVudHJ5IG9mIEhlbGxvQmVhbiIpOworICAgICAgICB9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGRpZCAqbm90KiBmaW5kIEhlbGxvQmVhbiBwcml2YXRlIGNvbXBvbmVudCBlbnZpcm9ubWVudCBkZXBlbmRlbmN5Iik7CisgICAgICAgIH0KIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15IE1vZHVsZU5hbWUgPSAiICsgCi0JCQkgICAgICAgY3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvTW9kdWxlTmFtZSIpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeSBBcHBOYW1lID0gIiArCisgICAgICAgICAgICAgICAgICAgY3R4Lmxvb2t1cCgiamF2YTphcHAvQXBwTmFtZSIpKTsKIAotCQkJICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15IE1vZHVsZU5hbWUgPSAiICsKKyAgICAgICAgICAgICAgICAgICBjdHgubG9va3VwKCJqYXZhOm1vZHVsZS9Nb2R1bGVOYW1lIikpOwogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJzaW5nbGV0b24gaW5pdCBlcnJvciIgLCBlKTsKLQl9CisKKworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigic2luZ2xldG9uIGluaXQgZXJyb3IiICwgZSk7CisgICAgfQogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGM5N2E3Mi4uMWY4ZjVjMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTIgKzE1LDEyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZnVsbC1yZW1vdGUyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+Ci0JCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUyL2J1aWxkLnhtbAppbmRleCAyZGZiYWE4Li5lMjFmZGE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTIgKzQ2LDEyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01OSw5ICs1OSw5IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtNzMsNyArNzMsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUyL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA5Y2FkMDA5Li40ZjY3YjYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUyL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjYsNDIgKzI2LDQyIEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCi0JYXBwTmFtZSA9IGFyZ3NbMF07IAotCXN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7Ci0JQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7ICAgICAgIAotICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3NbMV0pOwkKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOworICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOworICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3NbMV0pOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7CiAgICAgfQogCi0gICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7CQorICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmcgb3RoZXJBcHApIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICBIZWxsbyBoR2xvYmFsID0gIChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC9IQkdsb2JhbCIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImhHbG9iYWwgPSAiICsgaEdsb2JhbCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaEdsb2JhbCBoZWxsbyA9ICIgKyBoR2xvYmFsLmhlbGxvKCkpOworICAgICAgICBIZWxsbyBoR2xvYmFsID0gIChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC9IQkdsb2JhbCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImhHbG9iYWwgPSAiICsgaEdsb2JhbCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaEdsb2JhbCBoZWxsbyA9ICIgKyBoR2xvYmFsLmhlbGxvKCkpOwogCi0JICAgIFNpbmdsZXRvblJlbW90ZSBzaW5nbGV0b24gPSAoU2luZ2xldG9uUmVtb3RlKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9TaW5nbGV0b25CZWFuIik7CisgICAgICAgIFNpbmdsZXRvblJlbW90ZSBzaW5nbGV0b24gPSAoU2luZ2xldG9uUmVtb3RlKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9TaW5nbGV0b25CZWFuIik7CiAKLQkgICAgLy8gcGFzcyBuYW1lIG9mIHJlbW90ZXN0YXRlbGVzcyBhcHAKLQkgICAgc2luZ2xldG9uLmRvVGVzdChvdGhlckFwcCk7CisgICAgICAgIC8vIHBhc3MgbmFtZSBvZiByZW1vdGVzdGF0ZWxlc3MgYXBwCisgICAgICAgIHNpbmdsZXRvbi5kb1Rlc3Qob3RoZXJBcHApOwogCi0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOwogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMi9lamIvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTIvZWpiL0hlbGxvLmphdmEKaW5kZXggODBlYWEzMS4uM2VkZTA2ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMi9lamIvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUyL2VqYi9IZWxsby5qYXZhCkBAIC0zMCwxMCArMzAsMTAgQEAKIAogICAgIC8vIG1hcmtlZCBhc3luYyBvbiBiZWFuIGNsYXNzCiAgICAgdm9pZCBmaXJlQW5kRm9yZ2V0KCk7Ci0JCisKICAgICBGdXR1cmU8U3RyaW5nPiBhc3luY1Rocm93RXhjZXB0aW9uKFN0cmluZyBleGNlcHRpb25UeXBlKTsKIAogICAgIEZ1dHVyZTxTdHJpbmc+IGFzeW5jQ2FuY2VsKGludCBzZWNvbmRzKSB0aHJvd3MgRXhjZXB0aW9uOwotICAgIAorCiAgICAgdm9pZCB0aHJvd0V4Y2VwdGlvbihTdHJpbmcgZXhjZXB0aW9uVHlwZSk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUyL2VqYi9TaW5nbGV0b25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUyL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggMDZhYzQzZS4uZjI5YjBkZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMi9lamIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTIvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgIEBFSkIobmFtZT0iaGVsbG9ob21lcmVmIiwgbWFwcGVkTmFtZT0iSEgiKSBIZWxsb0hvbWUgaGVsbG9Ib21lOwogCiAgICAgQEVKQihuYW1lPSJoZWxsb3JlZjIiLCBsb29rdXA9IkhII2NvbS5hY21lLkhlbGxvIikgSGVsbG8gaGVsbG8yOwotICAgIEBFSkIobmFtZT0iaGVsbG9ob21lcmVmMiIsIGxvb2t1cD0iSEgiKSBIZWxsb0hvbWUgaGVsbG9Ib21lMjsgCisgICAgQEVKQihuYW1lPSJoZWxsb2hvbWVyZWYyIiwgbG9va3VwPSJISCIpIEhlbGxvSG9tZSBoZWxsb0hvbWUyOwogCiAgICAgQEVKQiBSZW1vdGVBc3luYyBzdGF0ZWZ1bEJlYW47CiAKQEAgLTUwLDE5MiArNTAsMTkyIEBACiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nIHRhcmdldEFwcE5hbWUpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICBIZWxsbyBoR2xvYmFsID0gKEhlbGxvKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsL0hCR2xvYmFsIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaEdsb2JhbCA9ICIgKyBoR2xvYmFsKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJoR2xvYmFsIGhlbGxvID0gIiArIGhHbG9iYWwuaGVsbG8oKSk7CisgICAgICAgIEhlbGxvIGhHbG9iYWwgPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvSEJHbG9iYWwiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJoR2xvYmFsID0gIiArIGhHbG9iYWwpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImhHbG9iYWwgaGVsbG8gPSAiICsgaEdsb2JhbC5oZWxsbygpKTsKIAotCSAgICAgRnV0dXJlPFN0cmluZz4gZnV0dXJlU2Z1bCA9IHN0YXRlZnVsQmVhbi5oZWxsb0FzeW5jKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVmdWwgYmVhbiBzYXlzICIgKyBmdXR1cmVTZnVsLmdldCgpKTsKKyAgICAgICAgIEZ1dHVyZTxTdHJpbmc+IGZ1dHVyZVNmdWwgPSBzdGF0ZWZ1bEJlYW4uaGVsbG9Bc3luYygpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlZnVsIGJlYW4gc2F5cyAiICsgZnV0dXJlU2Z1bC5nZXQoKSk7CiAKLQkgICAgZnV0dXJlU2Z1bCA9IHN0YXRlZnVsQmVhbi5yZW1vdmVBZnRlckNhbGxpbmcoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZWZ1bCBiZWFuIHJlbW92ZWQgc3RhdHVzID0gIiArIGZ1dHVyZVNmdWwuZ2V0KCkpOworICAgICAgICBmdXR1cmVTZnVsID0gc3RhdGVmdWxCZWFuLnJlbW92ZUFmdGVyQ2FsbGluZygpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlZnVsIGJlYW4gcmVtb3ZlZCBzdGF0dXMgPSAiICsgZnV0dXJlU2Z1bC5nZXQoKSk7CiAKLQkgICAgYm9vbGVhbiBnb3RTZnVsRXhjZXB0aW9uID0gZmFsc2U7Ci0JICAgIHRyeSB7Ci0JCWZ1dHVyZVNmdWwgPSBzdGF0ZWZ1bEJlYW4uaGVsbG9Bc3luYygpOyAgICAKLQkgICAgfSBjYXRjaChOb1N1Y2hFSkJFeGNlcHRpb24gbnNlZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBuc2VlIGZyb20gaGVsbG9Bc3luYyIpOwotCQlnb3RTZnVsRXhjZXB0aW9uID0gdHJ1ZTsKLQkgICAgfQorICAgICAgICBib29sZWFuIGdvdFNmdWxFeGNlcHRpb24gPSBmYWxzZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgZnV0dXJlU2Z1bCA9IHN0YXRlZnVsQmVhbi5oZWxsb0FzeW5jKCk7CisgICAgICAgIH0gY2F0Y2goTm9TdWNoRUpCRXhjZXB0aW9uIG5zZWUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgbnNlZSBmcm9tIGhlbGxvQXN5bmMiKTsKKyAgICAgICAgZ290U2Z1bEV4Y2VwdGlvbiA9IHRydWU7CisgICAgICAgIH0KIAotCSAgICB0cnkgewotCQlpZiggIWdvdFNmdWxFeGNlcHRpb24gKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJldHVybiB2YWx1ZSA9ICIgKyBmdXR1cmVTZnVsLmdldCgpKTsKLQkJICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNob3VsZCBoYXZlIGdvdHRlbiBleGNlcHRpb24iKTsKLQkJfQotCSAgICB9IGNhdGNoKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlZSkgewotCQlpZiggZWUuZ2V0Q2F1c2UoKSBpbnN0YW5jZW9mIE5vU3VjaEVKQkV4Y2VwdGlvbiApIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBOb1N1Y2hFSkJFeGNlcHRpb24gd2hlbiAiICsKLQkJCQkgICAgICAgImFjY2Vzc2luZyBzZnVsIGJlYW4gYXN5bmNocm9ub3VzbHkgYWZ0ZXIgcmVtb3ZhbCIpOwotCQl9IGVsc2UgewotCQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigid3JvbmcgZXhjZXB0aW9uIGR1cmluZyBzZnNiIGFjY2VzcyBhZnRlciByZW1vdmFsIiwKLQkJCQkJICAgZWUpOwotCQl9Ci0JICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYoICFnb3RTZnVsRXhjZXB0aW9uICkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZXR1cm4gdmFsdWUgPSAiICsgZnV0dXJlU2Z1bC5nZXQoKSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTaG91bGQgaGF2ZSBnb3R0ZW4gZXhjZXB0aW9uIik7CisgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZWUpIHsKKyAgICAgICAgaWYoIGVlLmdldENhdXNlKCkgaW5zdGFuY2VvZiBOb1N1Y2hFSkJFeGNlcHRpb24gKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgTm9TdWNoRUpCRXhjZXB0aW9uIHdoZW4gIiArCisgICAgICAgICAgICAgICAgICAgICAgICJhY2Nlc3Npbmcgc2Z1bCBiZWFuIGFzeW5jaHJvbm91c2x5IGFmdGVyIHJlbW92YWwiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIndyb25nIGV4Y2VwdGlvbiBkdXJpbmcgc2ZzYiBhY2Nlc3MgYWZ0ZXIgcmVtb3ZhbCIsCisgICAgICAgICAgICAgICAgICAgICAgIGVlKTsKKyAgICAgICAgfQorICAgICAgICB9CiAKLQkgICAgU3RyaW5nIHRhcmdldEFwcEpuZGlQcmVmaXggPSAiamF2YTpnbG9iYWwvIiArIHRhcmdldEFwcE5hbWUgKyAiLyI7CisgICAgICAgIFN0cmluZyB0YXJnZXRBcHBKbmRpUHJlZml4ID0gImphdmE6Z2xvYmFsLyIgKyB0YXJnZXRBcHBOYW1lICsgIi8iOwogCi0JICAgIEhlbGxvSG9tZSBoZWxsb0hvbWVQR2xvYmFsID0gKEhlbGxvSG9tZSkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKHRhcmdldEFwcEpuZGlQcmVmaXggKyAiSGVsbG9CZWFuIWNvbS5hY21lLkhlbGxvSG9tZSIpOworICAgICAgICBIZWxsb0hvbWUgaGVsbG9Ib21lUEdsb2JhbCA9IChIZWxsb0hvbWUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCh0YXJnZXRBcHBKbmRpUHJlZml4ICsgIkhlbGxvQmVhbiFjb20uYWNtZS5IZWxsb0hvbWUiKTsKIAogCi0JICAgIE9SQiBvcmIgPSAoT1JCKSBzZXNDdHgubG9va3VwKCJqYXZhOmNvbXAvT1JCIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3JiID0gIiArIG9yYik7Ci0JICAgIE9SQiBvcmIyID0gKE9SQikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvT1JCIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3JiMiA9ICIgKyBvcmIyKTsKKyAgICAgICAgT1JCIG9yYiA9IChPUkIpIHNlc0N0eC5sb29rdXAoImphdmE6Y29tcC9PUkIiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcmIgPSAiICsgb3JiKTsKKyAgICAgICAgT1JCIG9yYjIgPSAoT1JCKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Y29tcC9PUkIiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcmIyID0gIiArIG9yYjIpOwogCiAKLQkgICAgRnV0dXJlPFN0cmluZz4gZnV0dXJlID0gaGVsbG8uaGVsbG9Bc3luYygpOwkgICAKLQkgICAgCi0JICAgIC8vICJtZW1vcnkgbGVhayIgZG9uJ3QgY2FsbCBnZXQgb24gYXN5bmMgdGhhdCByZXR1cm5zIGEgZnV0dXJlCi0JICAgIC8vIEF0IHRoZSBsZWFzdCBzaG91bGQgYmUgY2xlYW5lZCB1cCBhdCBjb250YWluZXIgc2h1dGRvd24gYnV0Ci0JICAgIC8vIGJ1dCBwb3NzaWJseSBzb29uZXIKLQkgICAgaGVsbG8uaGVsbG9Bc3luYygpOwotCSAgICBoZWxsby5oZWxsb0FzeW5jKCk7Ci0JICAgIGhlbGxvLmhlbGxvQXN5bmMoKTsKKyAgICAgICAgRnV0dXJlPFN0cmluZz4gZnV0dXJlID0gaGVsbG8uaGVsbG9Bc3luYygpOworCisgICAgICAgIC8vICJtZW1vcnkgbGVhayIgZG9uJ3QgY2FsbCBnZXQgb24gYXN5bmMgdGhhdCByZXR1cm5zIGEgZnV0dXJlCisgICAgICAgIC8vIEF0IHRoZSBsZWFzdCBzaG91bGQgYmUgY2xlYW5lZCB1cCBhdCBjb250YWluZXIgc2h1dGRvd24gYnV0CisgICAgICAgIC8vIGJ1dCBwb3NzaWJseSBzb29uZXIKKyAgICAgICAgaGVsbG8uaGVsbG9Bc3luYygpOworICAgICAgICBoZWxsby5oZWxsb0FzeW5jKCk7CisgICAgICAgIGhlbGxvLmhlbGxvQXN5bmMoKTsKIAogCi0JICAgIGhlbGxvLmZpcmVBbmRGb3JnZXQoKTsJICAgCi0JICAgCi0JICAgIHRyeSB7Ci0JCVN0cmluZyByZXN1bHQgPSBmdXR1cmUuZ2V0KCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG9Bc3luYygpIHNheXMgOiAiICsgcmVzdWx0KTsKLQkgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBhc3luYyBFeGVjdXRpb25FeGNlcHRpb24uIENhdXNlIGlzICIgKwotCQkJCSAgIGUuZ2V0Q2F1c2UoKS5nZXRNZXNzYWdlKCkpOwotCQllLmdldENhdXNlKCkucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0KKyAgICAgICAgaGVsbG8uZmlyZUFuZEZvcmdldCgpOwogCi0JICAgIEZ1dHVyZTxTdHJpbmc+IGZ1dHVyZVRPID0gaGVsbG8uYXN5bmNCbG9jayg1KTsJICAgIAotCSAgICAvLyBUZXN0IHRpbWVvdXQKLQkgICAgdHJ5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGZ1dHVyZS5nZXQoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJoZWxsb0FzeW5jKCkgc2F5cyA6ICIgKyByZXN1bHQpOworICAgICAgICB9IGNhdGNoKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGFzeW5jIEV4ZWN1dGlvbkV4Y2VwdGlvbi4gQ2F1c2UgaXMgIiArCisgICAgICAgICAgICAgICAgICAgZS5nZXRDYXVzZSgpLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIGUuZ2V0Q2F1c2UoKS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQogCi0JCVN0cmluZyByZXN1bHQgPSBmdXR1cmVUTy5nZXQoMSwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU2hvdWxkIGhhdmUgdGltZWQgb3V0Iik7Ci0JICAgIH0gY2F0Y2goVGltZW91dEV4Y2VwdGlvbiB0b2UpIHsKLQkJdHJ5IHsKLQkJICAgIFN0cmluZyByZXN1bHQgPSBmdXR1cmVUTy5nZXQoKTsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXN5bmNCbG9jaygpIHNheXMgOiAiICsgcmVzdWx0KTsKLQkJfSBjYXRjaChFeGNlcHRpb24gZSkgewotCQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLQkJfQotCSAgICB9IGNhdGNoKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiR290IGFzeW5jIEV4ZWN1dGlvbkV4Y2VwdGlvbi4gQ2F1c2UgaXMgIiArCi0JCQkJICAgZS5nZXRDYXVzZSgpLmdldE1lc3NhZ2UoKSk7Ci0JCWUuZ2V0Q2F1c2UoKS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgfQotCSAKLQkgICAgRnV0dXJlPFN0cmluZz4gZnV0dXJlRXhjZXB0aW9uID0gCi0JCWhlbGxvLmFzeW5jVGhyb3dFeGNlcHRpb24oImpha2FydGEuZWpiLkNvbmN1cnJlbnRBY2Nlc3NUaW1lb3V0RXhjZXB0aW9uIik7Ci0JICAgIHRyeSB7Ci0JCVN0cmluZyByZXN1bHQgPSBmdXR1cmVFeGNlcHRpb24uZ2V0KCk7Ci0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNob3VsZCBoYXZlIGdvdHRlbiBleGNlcHRpb24iKTsKLQkgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZSkgewotCQlpZiggZS5nZXRDYXVzZSgpIGluc3RhbmNlb2YgamFrYXJ0YS5lamIuQ29uY3VycmVudEFjY2Vzc1RpbWVvdXRFeGNlcHRpb24pIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGNvcnJlY3QgYXN5bmMgZXhjZXB0aW9uLiBDYXVzZSBpcyAiICsKLQkJCQkgICAgICAgZS5nZXRDYXVzZSgpLmdldE1lc3NhZ2UoKSk7Ci0JCX0gZWxzZSB7Ci0JCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJ3cm9uZyBleGNlcHRpb24iLCBlKTsKLQkJfQotCSAgICB9CisgICAgICAgIEZ1dHVyZTxTdHJpbmc+IGZ1dHVyZVRPID0gaGVsbG8uYXN5bmNCbG9jayg1KTsKKyAgICAgICAgLy8gVGVzdCB0aW1lb3V0CisgICAgICAgIHRyeSB7CiAKLQkgICAgRnV0dXJlPFN0cmluZz4gZnV0dXJlQ2FuY2VsID0gbnVsbDsKLQkgICAgdHJ5IHsKLQkJZnV0dXJlQ2FuY2VsID0gaGVsbG8uYXN5bmNDYW5jZWwoNSk7Ci0JCWZ1dHVyZUNhbmNlbC5jYW5jZWwodHJ1ZSk7Ci0JCWZ1dHVyZUNhbmNlbC5nZXQoKTsJCi0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNob3VsZCBoYXZlIGdvdHRlbiBleGNlcHRpb24iKTsKLQkgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZSkgewotCQlpZiggZS5nZXRDYXVzZSgpLmdldENsYXNzKCkuZ2V0TmFtZSgpLmVxdWFscygiamF2YS5sYW5nLkV4Y2VwdGlvbiIpKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBjb3JyZWN0IGFzeW5jIGV4Y2VwdGlvbi4gQ2F1c2UgaXMgIiArCi0JCQkJICAgICAgIGUuZ2V0Q2F1c2UoKS5nZXRNZXNzYWdlKCkpOwotCQl9IGVsc2UgewotCQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigid3JvbmcgZXhjZXB0aW9uIiwgZSk7Ci0JCX0KLQkgICAgfQorICAgICAgICBTdHJpbmcgcmVzdWx0ID0gZnV0dXJlVE8uZ2V0KDEsIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNob3VsZCBoYXZlIHRpbWVkIG91dCIpOworICAgICAgICB9IGNhdGNoKFRpbWVvdXRFeGNlcHRpb24gdG9lKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gZnV0dXJlVE8uZ2V0KCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFzeW5jQmxvY2soKSBzYXlzIDogIiArIHJlc3VsdCk7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CisgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBhc3luYyBFeGVjdXRpb25FeGNlcHRpb24uIENhdXNlIGlzICIgKworICAgICAgICAgICAgICAgICAgIGUuZ2V0Q2F1c2UoKS5nZXRNZXNzYWdlKCkpOworICAgICAgICBlLmdldENhdXNlKCkucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KIAotCSAgICAvLyBpbmplY3RlZAotCSAgICBjYWxsSG9tZShoZWxsb0hvbWUpOwotCSAgICBjYWxsQnVzSG9tZShoZWxsbyk7CisgICAgICAgIEZ1dHVyZTxTdHJpbmc+IGZ1dHVyZUV4Y2VwdGlvbiA9CisgICAgICAgIGhlbGxvLmFzeW5jVGhyb3dFeGNlcHRpb24oImpha2FydGEuZWpiLkNvbmN1cnJlbnRBY2Nlc3NUaW1lb3V0RXhjZXB0aW9uIik7CisgICAgICAgIHRyeSB7CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBmdXR1cmVFeGNlcHRpb24uZ2V0KCk7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNob3VsZCBoYXZlIGdvdHRlbiBleGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZSkgeworICAgICAgICBpZiggZS5nZXRDYXVzZSgpIGluc3RhbmNlb2YgamFrYXJ0YS5lamIuQ29uY3VycmVudEFjY2Vzc1RpbWVvdXRFeGNlcHRpb24pIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGNvcnJlY3QgYXN5bmMgZXhjZXB0aW9uLiBDYXVzZSBpcyAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgZS5nZXRDYXVzZSgpLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJ3cm9uZyBleGNlcHRpb24iLCBlKTsKKyAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgRnV0dXJlPFN0cmluZz4gZnV0dXJlQ2FuY2VsID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgZnV0dXJlQ2FuY2VsID0gaGVsbG8uYXN5bmNDYW5jZWwoNSk7CisgICAgICAgIGZ1dHVyZUNhbmNlbC5jYW5jZWwodHJ1ZSk7CisgICAgICAgIGZ1dHVyZUNhbmNlbC5nZXQoKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU2hvdWxkIGhhdmUgZ290dGVuIGV4Y2VwdGlvbiIpOworICAgICAgICB9IGNhdGNoKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGlmKCBlLmdldENhdXNlKCkuZ2V0Q2xhc3MoKS5nZXROYW1lKCkuZXF1YWxzKCJqYXZhLmxhbmcuRXhjZXB0aW9uIikpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGNvcnJlY3QgYXN5bmMgZXhjZXB0aW9uLiBDYXVzZSBpcyAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgZS5nZXRDYXVzZSgpLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJ3cm9uZyBleGNlcHRpb24iLCBlKTsKKyAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gaW5qZWN0ZWQKKyAgICAgICAgY2FsbEhvbWUoaGVsbG9Ib21lKTsKKyAgICAgICAgY2FsbEJ1c0hvbWUoaGVsbG8pOwogCiAKLQkgICAgdHJ5IHsKLQkJaGVsbG8udGhyb3dFeGNlcHRpb24oImpha2FydGEuZWpiLkNvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24iKTsKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZXhwZWN0ZWQgYW4gZXhjZXB0aW9uIik7Ci0JICAgIH0gY2F0Y2goQ29uY3VycmVudEFjY2Vzc0V4Y2VwdGlvbiBjYWUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgIiArIGNhZSk7Ci0JICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaGVsbG8udGhyb3dFeGNlcHRpb24oImpha2FydGEuZWpiLkNvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24iKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZXhwZWN0ZWQgYW4gZXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2goQ29uY3VycmVudEFjY2Vzc0V4Y2VwdGlvbiBjYWUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgIiArIGNhZSk7CisgICAgICAgIH0KIAotCSAgICB0cnkgewotCQloZWxsby50aHJvd0V4Y2VwdGlvbigiamFrYXJ0YS5lamIuQ29uY3VycmVudEFjY2Vzc1RpbWVvdXRFeGNlcHRpb24iKTsKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZXhwZWN0ZWQgYW4gZXhjZXB0aW9uIik7Ci0JICAgIH0gY2F0Y2goQ29uY3VycmVudEFjY2Vzc1RpbWVvdXRFeGNlcHRpb24gY2F0KSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkICIgKyBjYXQpOwotCSAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgIGhlbGxvLnRocm93RXhjZXB0aW9uKCJqYWthcnRhLmVqYi5Db25jdXJyZW50QWNjZXNzVGltZW91dEV4Y2VwdGlvbiIpOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJleHBlY3RlZCBhbiBleGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaChDb25jdXJyZW50QWNjZXNzVGltZW91dEV4Y2VwdGlvbiBjYXQpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgIiArIGNhdCk7CisgICAgICAgIH0KIAotCSAgICB0cnkgewotCQloZWxsby50aHJvd0V4Y2VwdGlvbigiamFrYXJ0YS5lamIuSWxsZWdhbExvb3BiYWNrRXhjZXB0aW9uIik7Ci0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oImV4cGVjdGVkIGFuIGV4Y2VwdGlvbiIpOwotCSAgICB9IGNhdGNoKElsbGVnYWxMb29wYmFja0V4Y2VwdGlvbiBpbGUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgIiArIGlsZSk7Ci0JICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaGVsbG8udGhyb3dFeGNlcHRpb24oImpha2FydGEuZWpiLklsbGVnYWxMb29wYmFja0V4Y2VwdGlvbiIpOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJleHBlY3RlZCBhbiBleGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaChJbGxlZ2FsTG9vcGJhY2tFeGNlcHRpb24gaWxlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkICIgKyBpbGUpOworICAgICAgICB9CiAKIAotCSAgICAvLyBGdWxseS1xdWFsaWZpZWQgcG9ydGFibGUgZ2xvYmFsCi0JICAgIEhlbGxvSG9tZSBoZWxsb0hvbWUyID0gKEhlbGxvSG9tZSkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKHRhcmdldEFwcEpuZGlQcmVmaXggKyAiSGVsbG9CZWFuIWNvbS5hY21lLkhlbGxvSG9tZSIpOwotCSAgICBjYWxsSG9tZShoZWxsb0hvbWUyKTsKKyAgICAgICAgLy8gRnVsbHktcXVhbGlmaWVkIHBvcnRhYmxlIGdsb2JhbAorICAgICAgICBIZWxsb0hvbWUgaGVsbG9Ib21lMiA9IChIZWxsb0hvbWUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCh0YXJnZXRBcHBKbmRpUHJlZml4ICsgIkhlbGxvQmVhbiFjb20uYWNtZS5IZWxsb0hvbWUiKTsKKyAgICAgICAgY2FsbEhvbWUoaGVsbG9Ib21lMik7CiAKLQkgICAgSGVsbG8gaGVsbG8yID0gKEhlbGxvKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAodGFyZ2V0QXBwSm5kaVByZWZpeCArICJIZWxsb0JlYW4hY29tLmFjbWUuSGVsbG8iKTsKLQkgICAgY2FsbEJ1c0hvbWUoaGVsbG8yKTsKKyAgICAgICAgSGVsbG8gaGVsbG8yID0gKEhlbGxvKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAodGFyZ2V0QXBwSm5kaVByZWZpeCArICJIZWxsb0JlYW4hY29tLmFjbWUuSGVsbG8iKTsKKyAgICAgICAgY2FsbEJ1c0hvbWUoaGVsbG8yKTsKIAotCSAgICAvLyBGdWxseS1xdWFsaWZpZWQgcG9ydGFibGUgZ2xvYmFsIHZpYSBzZXNpb24gY29udGV4dAotCSAgICBIZWxsb0hvbWUgaGVsbG9Ib21lMyA9IChIZWxsb0hvbWUpIHNlc0N0eC5sb29rdXAodGFyZ2V0QXBwSm5kaVByZWZpeCArICJIZWxsb0JlYW4hY29tLmFjbWUuSGVsbG9Ib21lIik7Ci0JICAgIGNhbGxIb21lKGhlbGxvSG9tZTMpOworICAgICAgICAvLyBGdWxseS1xdWFsaWZpZWQgcG9ydGFibGUgZ2xvYmFsIHZpYSBzZXNpb24gY29udGV4dAorICAgICAgICBIZWxsb0hvbWUgaGVsbG9Ib21lMyA9IChIZWxsb0hvbWUpIHNlc0N0eC5sb29rdXAodGFyZ2V0QXBwSm5kaVByZWZpeCArICJIZWxsb0JlYW4hY29tLmFjbWUuSGVsbG9Ib21lIik7CisgICAgICAgIGNhbGxIb21lKGhlbGxvSG9tZTMpOwogCi0JICAgIEhlbGxvIGhlbGxvMyA9IChIZWxsbykgc2VzQ3R4Lmxvb2t1cCh0YXJnZXRBcHBKbmRpUHJlZml4ICsgIkhlbGxvQmVhbiFjb20uYWNtZS5IZWxsbyIpOwotCSAgICBjYWxsQnVzSG9tZShoZWxsbzMpOworICAgICAgICBIZWxsbyBoZWxsbzMgPSAoSGVsbG8pIHNlc0N0eC5sb29rdXAodGFyZ2V0QXBwSm5kaVByZWZpeCArICJIZWxsb0JlYW4hY29tLmFjbWUuSGVsbG8iKTsKKyAgICAgICAgY2FsbEJ1c0hvbWUoaGVsbG8zKTsKIAotCSAgICAvLyBlamItcmVmCi0JICAgIEhlbGxvSG9tZSBoZWxsb0hvbWU0ID0gKEhlbGxvSG9tZSkgc2VzQ3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9oZWxsb2hvbWVyZWYiKTsKLQkgICAgY2FsbEhvbWUoaGVsbG9Ib21lNCk7CisgICAgICAgIC8vIGVqYi1yZWYKKyAgICAgICAgSGVsbG9Ib21lIGhlbGxvSG9tZTQgPSAoSGVsbG9Ib21lKSBzZXNDdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L2hlbGxvaG9tZXJlZiIpOworICAgICAgICBjYWxsSG9tZShoZWxsb0hvbWU0KTsKIAotCSAgICBIZWxsbyBoZWxsbzQgPSAoSGVsbG8pIHNlc0N0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvaGVsbG9yZWYiKTsKLQkgICAgY2FsbEJ1c0hvbWUoaGVsbG80KTsKLQkgICAgCi0JICAgIC8vIG5vbi1wb3J0YWJsZSBnbG9iYWwKLQkgICAgSGVsbG9Ib21lIGhlbGxvSG9tZTUgPSAoSGVsbG9Ib21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoIkhIIik7Ci0JICAgIGNhbGxIb21lKGhlbGxvSG9tZTUpOworICAgICAgICBIZWxsbyBoZWxsbzQgPSAoSGVsbG8pIHNlc0N0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvaGVsbG9yZWYiKTsKKyAgICAgICAgY2FsbEJ1c0hvbWUoaGVsbG80KTsKIAotCSAgICBIZWxsbyBoZWxsbzUgPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiSEgjY29tLmFjbWUuSGVsbG8iKTsKLQkgICAgY2FsbEJ1c0hvbWUoaGVsbG81KTsKKyAgICAgICAgLy8gbm9uLXBvcnRhYmxlIGdsb2JhbAorICAgICAgICBIZWxsb0hvbWUgaGVsbG9Ib21lNSA9IChIZWxsb0hvbWUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiSEgiKTsKKyAgICAgICAgY2FsbEhvbWUoaGVsbG9Ib21lNSk7CisKKyAgICAgICAgSGVsbG8gaGVsbG81ID0gKEhlbGxvKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoIkhII2NvbS5hY21lLkhlbGxvIik7CisgICAgICAgIGNhbGxCdXNIb21lKGhlbGxvNSk7CiAKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigidGVzdCBmYWlsZWQiLCBlKTsKLQl9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJ0ZXN0IGZhaWxlZCIsIGUpOworICAgIH0KIAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBjYWxsSG9tZShIZWxsb0hvbWUgaG9tZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JLy8JSGVsbG9Ib21lIGhvbWUgPSAoSGVsbG9Ib21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqLCBIZWxsb0hvbWUuY2xhc3MpOwotCUhlbGxvUmVtb3RlIGhyID0gaG9tZS5jcmVhdGUoKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIjIueCBIZWxsb1JlbW90ZS5oZWxsbygpIHNheXMgIiArIGhyLmhlbGxvKCkpOworICAgIC8vICAgIEhlbGxvSG9tZSBob21lID0gKEhlbGxvSG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9iaiwgSGVsbG9Ib21lLmNsYXNzKTsKKyAgICBIZWxsb1JlbW90ZSBociA9IGhvbWUuY3JlYXRlKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIyLnggSGVsbG9SZW1vdGUuaGVsbG8oKSBzYXlzICIgKyBoci5oZWxsbygpKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgY2FsbEJ1c0hvbWUoSGVsbG8gaCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8uaGVsbG8oKSBzYXlzICIgKyBoLmhlbGxvKCkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8uaGVsbG8oKSBzYXlzICIgKyBoLmhlbGxvKCkpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUyL2VqYi9TdGF0ZWZ1bEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTIvZWpiL1N0YXRlZnVsQmVhbi5qYXZhCmluZGV4IDA0NzQwNjIuLjk4ZTVmYmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTIvZWpiL1N0YXRlZnVsQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTIvZWpiL1N0YXRlZnVsQmVhbi5qYXZhCkBAIC0zNSwxNCArMzUsMTQgQEAKIAogICAgIEBBc3luY2hyb25vdXMKICAgICBwdWJsaWMgRnV0dXJlPFN0cmluZz4gaGVsbG9Bc3luYygpIHsKLQlyZXR1cm4gbmV3IEFzeW5jUmVzdWx0PFN0cmluZz4oImhlbGxvLCB3b3JsZFxuIik7CisgICAgcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KCJoZWxsbywgd29ybGRcbiIpOwogICAgIH0KIAogICAgIEBBc3luY2hyb25vdXMKICAgICBAUmVtb3ZlCiAgICAgcHVibGljIEZ1dHVyZTxTdHJpbmc+IHJlbW92ZUFmdGVyQ2FsbGluZygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjo6cmVtb3ZlQWZ0ZXJDYWxsaW5nKCkiKTsKLQlyZXR1cm4gbmV3IEFzeW5jUmVzdWx0PFN0cmluZz4oInJlbW92ZWQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjo6cmVtb3ZlQWZ0ZXJDYWxsaW5nKCkiKTsKKyAgICByZXR1cm4gbmV3IEFzeW5jUmVzdWx0PFN0cmluZz4oInJlbW92ZWQiKTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvYnVpbGQucHJvcGVydGllcwppbmRleCA3OTJhOWQ1Li5mNTdjNzc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZnVsbC1zY2hlbWEiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iZWpibW9kdWxlbmFtZSIvPiAgCi08cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+ICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSJlamJtb2R1bGVuYW1lIi8+IFx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPiBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgotCQorCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvYnVpbGQueG1sCmluZGV4IDVkZjA5Y2YuLjM2MDVkNTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTIgKzQ2LDEyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01OSw5ICs1OSw5IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGVwbG95ZWRhcHAubmFtZSIgdmFsdWU9ImVqYm1vZHVsZW5hbWUiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAwMDI4OTUyLi4xNzIyNmQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI2LDUzICsyNiw1MyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIAotCWFwcE5hbWUgPSBhcmdzWzBdOyAKLQlzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwotCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOyAgICAKLQljbGllbnQuZG9UZXN0KCk7CisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKKyAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKKyAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKICAgICB9CiAKLSAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsJCisgICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCi0JdHJ5IHsKKyAgICB0cnkgewogCi0JICAgIFJlbW90ZVNpbmdsZXRvbiBzaW5nbGV0b24gPSAoUmVtb3RlU2luZ2xldG9uKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9TaW5nbGV0b25CZWFuIWNvbS5hY21lLlJlbW90ZVNpbmdsZXRvbiIpOworICAgICAgICBSZW1vdGVTaW5nbGV0b24gc2luZ2xldG9uID0gKFJlbW90ZVNpbmdsZXRvbikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU2luZ2xldG9uQmVhbiFjb20uYWNtZS5SZW1vdGVTaW5nbGV0b24iKTsKIAotCSAgICAvLyBBbHNvIG1ha2Ugc3VyZSB3ZSBjYW4gbG9vayBpdCB1cCB2aWEgdGhlIHByb2R1Y3Qtc3BlY2lmaWMKLQkgICAgLy8gZ2xvYmFsIEpOREkgbmFtZSBzcGVjaWZpZWQgdmlhIGVqYi1qYXIueG1sCi0JICAgIFJlbW90ZVNpbmdsZXRvbiBzaW5nbGV0b24yID0gKFJlbW90ZVNpbmdsZXRvbikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJlamJfZWpiMzFfZnVsbF9zY2hlbWFfU2luZ2xldG9uUmVtb3RlIik7CisgICAgICAgIC8vIEFsc28gbWFrZSBzdXJlIHdlIGNhbiBsb29rIGl0IHVwIHZpYSB0aGUgcHJvZHVjdC1zcGVjaWZpYworICAgICAgICAvLyBnbG9iYWwgSk5ESSBuYW1lIHNwZWNpZmllZCB2aWEgZWpiLWphci54bWwKKyAgICAgICAgUmVtb3RlU2luZ2xldG9uIHNpbmdsZXRvbjIgPSAoUmVtb3RlU2luZ2xldG9uKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImVqYl9lamIzMV9mdWxsX3NjaGVtYV9TaW5nbGV0b25SZW1vdGUiKTsKIAotCSAgICBpbnQgc2xlZXBTZWNvbmRzID0gMTA7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2xlZXBpbmcgZm9yICIgKyBzbGVlcFNlY29uZHMgKyAiIHNlY29uZHMgYmVmb3JlIGNoZWNraW5nICIgKwotCQkJICAgICAgICJyZXN1bHRzLi4uIik7Ci0JICAgIC8vIHdhaXQgYSBmZXcgc2Vjb25kcyBmb3IgdGltZW91dCB0byBoYXBwZW4KLQkgICAgVGhyZWFkLnNsZWVwKHNsZWVwU2Vjb25kcyAqIDEwMDApOworICAgICAgICBpbnQgc2xlZXBTZWNvbmRzID0gMTA7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2xlZXBpbmcgZm9yICIgKyBzbGVlcFNlY29uZHMgKyAiIHNlY29uZHMgYmVmb3JlIGNoZWNraW5nICIgKworICAgICAgICAgICAgICAgICAgICJyZXN1bHRzLi4uIik7CisgICAgICAgIC8vIHdhaXQgYSBmZXcgc2Vjb25kcyBmb3IgdGltZW91dCB0byBoYXBwZW4KKyAgICAgICAgVGhyZWFkLnNsZWVwKHNsZWVwU2Vjb25kcyAqIDEwMDApOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV29rZSB1cCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldva2UgdXAiKTsKIAotCSAgICBib29sZWFuIHRlc3RSZXN1bHQgPSBzaW5nbGV0b24uZ2V0VGVzdFJlc3VsdCgpOworICAgICAgICBib29sZWFuIHRlc3RSZXN1bHQgPSBzaW5nbGV0b24uZ2V0VGVzdFJlc3VsdCgpOwogCi0JICAgIGlmKCAhdGVzdFJlc3VsdCApIHsKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigidGVzdFJlc3VsdCA9IGZhbHNlIik7Ci0JICAgIH0gCisgICAgICAgIGlmKCAhdGVzdFJlc3VsdCApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigidGVzdFJlc3VsdCA9IGZhbHNlIik7CisgICAgICAgIH0KIAotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggOTRiMDM4My4uMGFkMjEyMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTI0LDEwICsyNCwxMCBAQAogICAgIDxlbnRlcnByaXNlLWJlYW5zPgogICAgICAgPHNlc3Npb24+CiAgICAgICAgIDxlamItbmFtZT5TaW5nbGV0b25CZWFuPC9lamItbmFtZT4KLQk8bG9jYWwtYmVhbi8+Ci0JPGVqYi1jbGFzcz5jb20uYWNtZS5TaW5nbGV0b25CZWFuPC9lamItY2xhc3M+Ci0JPHNlc3Npb24tdHlwZT5TaW5nbGV0b248L3Nlc3Npb24tdHlwZT4KLQk8dGltZXI+CisgICAgPGxvY2FsLWJlYW4vPgorICAgIDxlamItY2xhc3M+Y29tLmFjbWUuU2luZ2xldG9uQmVhbjwvZWpiLWNsYXNzPgorICAgIDxzZXNzaW9uLXR5cGU+U2luZ2xldG9uPC9zZXNzaW9uLXR5cGU+CisgICAgPHRpbWVyPgogICAgICAgICAgIDxkZXNjcmlwdGlvbj5TYW1wbGUgdGltZXI8L2Rlc2NyaXB0aW9uPgogICAgICAgICAgIDxzY2hlZHVsZT4KICAgICAgICAgICAgIDxzZWNvbmQ+MTwvc2Vjb25kPgpAQCAtMzYsMTMyICszNiwxMzIgQEAKICAgICAgICAgICAgIDxkYXktb2YtbW9udGg+TGFzdCBUdWU8L2RheS1vZi1tb250aD4KICAgICAgICAgICAgIDxtb250aD5GZWI8L21vbnRoPgogICAgICAgICAgICAgPHllYXI+MjAxMDwveWVhcj4KLQkgIDwvc2NoZWR1bGU+CisgICAgICA8L3NjaGVkdWxlPgogICAgICAgICAgIDxzdGFydD4yMDAyLTEwLTEwVDEyOjAwOjAwPC9zdGFydD4KICAgICAgICAgICA8ZW5kPjIwMDItMTAtMTBUMTI6MDA6MDA8L2VuZD4KICAgICAgICAgICA8dGltZW91dC1tZXRob2Q+CiAgICAgICAgICAgICA8bWV0aG9kLW5hbWU+bXl0aW1lb3V0MjwvbWV0aG9kLW5hbWU+Ci0JICA8L3RpbWVvdXQtbWV0aG9kPgorICAgICAgPC90aW1lb3V0LW1ldGhvZD4KICAgICAgICAgICA8cGVyc2lzdGVudD5mYWxzZTwvcGVyc2lzdGVudD4KICAgICAgICAgICA8dGltZXpvbmU+QW1lcmljYS9OZXdfWW9yazwvdGltZXpvbmU+CiAgICAgICAgICAgPGluZm8+c29tZSBpbmZvPC9pbmZvPgotCTwvdGltZXI+Ci0JPHRpbWVyPgorICAgIDwvdGltZXI+CisgICAgPHRpbWVyPgogICAgICAgICAgIDxkZXNjcmlwdGlvbj5TYW1wbGUgdGltZXIxPC9kZXNjcmlwdGlvbj4KICAgICAgICAgICA8c2NoZWR1bGU+CiAgICAgICAgICAgICA8c2Vjb25kPiovMjwvc2Vjb25kPgogICAgICAgICAgICAgPG1pbnV0ZT4qPC9taW51dGU+CiAgICAgICAgICAgICA8aG91cj4qPC9ob3VyPgotCSAgPC9zY2hlZHVsZT4KKyAgICAgIDwvc2NoZWR1bGU+CiAgICAgICAgICAgPHRpbWVvdXQtbWV0aG9kPgogICAgICAgICAgICAgPG1ldGhvZC1uYW1lPm15dGltZW91dDE8L21ldGhvZC1uYW1lPgotCSAgPC90aW1lb3V0LW1ldGhvZD4KKyAgICAgIDwvdGltZW91dC1tZXRob2Q+CiAgICAgICAgICAgPHBlcnNpc3RlbnQ+ZmFsc2U8L3BlcnNpc3RlbnQ+CiAgICAgICAgICAgPHRpbWV6b25lPkFtZXJpY2EvTmV3X1lvcms8L3RpbWV6b25lPgogICAgICAgICAgIDxpbmZvPnNvbWUgaW5mbzwvaW5mbz4KLQk8L3RpbWVyPgotCTx0aW1lcj4KKyAgICA8L3RpbWVyPgorICAgIDx0aW1lcj4KICAgICAgICAgICA8ZGVzY3JpcHRpb24+U2FtcGxlIHRpbWVyMjwvZGVzY3JpcHRpb24+CiAgICAgICAgICAgPHNjaGVkdWxlPgogICAgICAgICAgICAgPHNlY29uZD4qLzc8L3NlY29uZD4KICAgICAgICAgICAgIDxtaW51dGU+KjwvbWludXRlPgogICAgICAgICAgICAgPGhvdXI+KjwvaG91cj4KICAgICAgICAgICAgIDxkYXktb2YtbW9udGg+KjwvZGF5LW9mLW1vbnRoPgotCSAgPC9zY2hlZHVsZT4KKyAgICAgIDwvc2NoZWR1bGU+CiAgICAgICAgICAgPHRpbWVvdXQtbWV0aG9kPgogICAgICAgICAgICAgPG1ldGhvZC1uYW1lPm15dGltZW91dDwvbWV0aG9kLW5hbWU+Ci0JICAgIDxtZXRob2QtcGFyYW1zPgotCSAgICAgIDxtZXRob2QtcGFyYW0+amFrYXJ0YS5lamIuVGltZXI8L21ldGhvZC1wYXJhbT4KLQkgICAgPC9tZXRob2QtcGFyYW1zPgotCSAgPC90aW1lb3V0LW1ldGhvZD4KKyAgICAgICAgPG1ldGhvZC1wYXJhbXM+CisgICAgICAgICAgPG1ldGhvZC1wYXJhbT5qYWthcnRhLmVqYi5UaW1lcjwvbWV0aG9kLXBhcmFtPgorICAgICAgICA8L21ldGhvZC1wYXJhbXM+CisgICAgICA8L3RpbWVvdXQtbWV0aG9kPgogICAgICAgICAgIDxwZXJzaXN0ZW50PnRydWU8L3BlcnNpc3RlbnQ+CiAgICAgICAgICAgPGluZm8+aW5mbzwvaW5mbz4KLQk8L3RpbWVyPgotCTxpbml0LW9uLXN0YXJ0dXA+dHJ1ZTwvaW5pdC1vbi1zdGFydHVwPgotCTxjb25jdXJyZW5jeS1tYW5hZ2VtZW50LXR5cGU+QmVhbjwvY29uY3VycmVuY3ktbWFuYWdlbWVudC10eXBlPgotCTxjb25jdXJyZW50LW1ldGhvZD4KLQkgIDxtZXRob2Q+CisgICAgPC90aW1lcj4KKyAgICA8aW5pdC1vbi1zdGFydHVwPnRydWU8L2luaXQtb24tc3RhcnR1cD4KKyAgICA8Y29uY3VycmVuY3ktbWFuYWdlbWVudC10eXBlPkJlYW48L2NvbmN1cnJlbmN5LW1hbmFnZW1lbnQtdHlwZT4KKyAgICA8Y29uY3VycmVudC1tZXRob2Q+CisgICAgICA8bWV0aG9kPgogICAgICAgICAgICAgPG1ldGhvZC1uYW1lPmZvbzwvbWV0aG9kLW5hbWU+Ci0JICA8L21ldGhvZD4KKyAgICAgIDwvbWV0aG9kPgogICAgICAgICAgIDxsb2NrPldyaXRlPC9sb2NrPgogICAgICAgICAgIDxhY2Nlc3MtdGltZW91dD4KLQkgICAgPHRpbWVvdXQ+MTk4NzY8L3RpbWVvdXQ+Ci0JICAgIDx1bml0PlNlY29uZHM8L3VuaXQ+Ci0JICA8L2FjY2Vzcy10aW1lb3V0PgotCTwvY29uY3VycmVudC1tZXRob2Q+Ci0JPGRlcGVuZHMtb24+CisgICAgICAgIDx0aW1lb3V0PjE5ODc2PC90aW1lb3V0PgorICAgICAgICA8dW5pdD5TZWNvbmRzPC91bml0PgorICAgICAgPC9hY2Nlc3MtdGltZW91dD4KKyAgICA8L2NvbmN1cnJlbnQtbWV0aG9kPgorICAgIDxkZXBlbmRzLW9uPgogICAgICAgICAgIDxlamItbmFtZT5TaW5nbGV0b25CZWFuMjwvZWpiLW5hbWU+Ci0JPC9kZXBlbmRzLW9uPgotCTxhc3luYy1tZXRob2Q+Ci0JICA8bWV0aG9kLW5hbWU+Zm9vPC9tZXRob2QtbmFtZT4KLQk8L2FzeW5jLW1ldGhvZD4KKyAgICA8L2RlcGVuZHMtb24+CisgICAgPGFzeW5jLW1ldGhvZD4KKyAgICAgIDxtZXRob2QtbmFtZT5mb288L21ldGhvZC1uYW1lPgorICAgIDwvYXN5bmMtbWV0aG9kPgogICAgICAgICA8ZWpiLXJlZj4KICAgICAgICAgICA8ZWpiLXJlZi1uYW1lPmVqYi9sb29rdXAxPC9lamItcmVmLW5hbWU+CiAgICAgICAgICAgPGVqYi1yZWYtdHlwZT5TZXNzaW9uPC9lamItcmVmLXR5cGU+CiAgICAgICAgICAgPHJlbW90ZT5jb20uYWNtZS5SZW1vdGVTaW5nbGV0b248L3JlbW90ZT4KLQkgIDxsb29rdXAtbmFtZT5qYXZhOm1vZHVsZS9TaW5nbGV0b25CZWFuIWNvbS5hY21lLlJlbW90ZVNpbmdsZXRvbjwvbG9va3VwLW5hbWU+CisgICAgICA8bG9va3VwLW5hbWU+amF2YTptb2R1bGUvU2luZ2xldG9uQmVhbiFjb20uYWNtZS5SZW1vdGVTaW5nbGV0b248L2xvb2t1cC1uYW1lPgogICAgICAgICA8L2VqYi1yZWY+CiAgICAgICAgIDxlamItbG9jYWwtcmVmPgogICAgICAgICAgIDxlamItcmVmLW5hbWU+ZWpiL2xvb2t1cDI8L2VqYi1yZWYtbmFtZT4KICAgICAgICAgICA8ZWpiLXJlZi10eXBlPlNlc3Npb248L2VqYi1yZWYtdHlwZT4KICAgICAgICAgICA8bG9jYWw+Y29tLmFjbWUuU2luZ2xldG9uQmVhbjI8L2xvY2FsPgotCSAgPGxvb2t1cC1uYW1lPmphdmE6bW9kdWxlL1NpbmdsZXRvbkJlYW4yPC9sb29rdXAtbmFtZT4KKyAgICAgIDxsb29rdXAtbmFtZT5qYXZhOm1vZHVsZS9TaW5nbGV0b25CZWFuMjwvbG9va3VwLW5hbWU+CiAgICAgICAgIDwvZWpiLWxvY2FsLXJlZj4KICAgICAgIDwvc2Vzc2lvbj4KICAgICAgIDxzZXNzaW9uPgogICAgICAgICA8ZWpiLW5hbWU+U2luZ2xldG9uQmVhbjI8L2VqYi1uYW1lPgotCTxsb2NhbC1iZWFuLz4KLQk8ZWpiLWNsYXNzPmNvbS5hY21lLlNpbmdsZXRvbkJlYW4yPC9lamItY2xhc3M+Ci0JPHNlc3Npb24tdHlwZT5TaW5nbGV0b248L3Nlc3Npb24tdHlwZT4KLQk8dGltZXI+CisgICAgPGxvY2FsLWJlYW4vPgorICAgIDxlamItY2xhc3M+Y29tLmFjbWUuU2luZ2xldG9uQmVhbjI8L2VqYi1jbGFzcz4KKyAgICA8c2Vzc2lvbi10eXBlPlNpbmdsZXRvbjwvc2Vzc2lvbi10eXBlPgorICAgIDx0aW1lcj4KICAgICAgICAgICA8ZGVzY3JpcHRpb24+U2FtcGxlIHRpbWVyPC9kZXNjcmlwdGlvbj4KICAgICAgICAgICA8c2NoZWR1bGU+CiAgICAgICAgICAgICA8bWludXRlPio8L21pbnV0ZT4KLQkgIDwvc2NoZWR1bGU+CisgICAgICA8L3NjaGVkdWxlPgogICAgICAgICAgIDx0aW1lb3V0LW1ldGhvZD4KICAgICAgICAgICAgIDxtZXRob2QtbmFtZT5teVRpbWVvdXQ8L21ldGhvZC1uYW1lPgotCSAgPC90aW1lb3V0LW1ldGhvZD4KLQk8L3RpbWVyPgotCTxjb25jdXJyZW50LW1ldGhvZD4KLQkgIDxtZXRob2Q+CisgICAgICA8L3RpbWVvdXQtbWV0aG9kPgorICAgIDwvdGltZXI+CisgICAgPGNvbmN1cnJlbnQtbWV0aG9kPgorICAgICAgPG1ldGhvZD4KICAgICAgICAgICAgIDxtZXRob2QtbmFtZT5mb288L21ldGhvZC1uYW1lPgotCSAgPC9tZXRob2Q+CisgICAgICA8L21ldGhvZD4KICAgICAgICAgICA8bG9jaz5Xcml0ZTwvbG9jaz4KICAgICAgICAgICA8YWNjZXNzLXRpbWVvdXQ+Ci0JICAgIDx0aW1lb3V0PjU8L3RpbWVvdXQ+Ci0JICAgIDx1bml0PlNlY29uZHM8L3VuaXQ+Ci0JICA8L2FjY2Vzcy10aW1lb3V0PgotCTwvY29uY3VycmVudC1tZXRob2Q+CisgICAgICAgIDx0aW1lb3V0PjU8L3RpbWVvdXQ+CisgICAgICAgIDx1bml0PlNlY29uZHM8L3VuaXQ+CisgICAgICA8L2FjY2Vzcy10aW1lb3V0PgorICAgIDwvY29uY3VycmVudC1tZXRob2Q+CiAgICAgICAgPGNvbmN1cnJlbnQtbWV0aG9kPgotCSAgPG1ldGhvZD4KKyAgICAgIDxtZXRob2Q+CiAgICAgICAgICAgICA8bWV0aG9kLW5hbWU+Zm9vMjwvbWV0aG9kLW5hbWU+Ci0JICA8L21ldGhvZD4KKyAgICAgIDwvbWV0aG9kPgogICAgICAgICAgIDxsb2NrPlJlYWQ8L2xvY2s+Ci0JPC9jb25jdXJyZW50LW1ldGhvZD4KKyAgICA8L2NvbmN1cnJlbnQtbWV0aG9kPgogICAgICAgIDxjb25jdXJyZW50LW1ldGhvZD4KLQkgIDxtZXRob2Q+CisgICAgICA8bWV0aG9kPgogICAgICAgICAgICAgPG1ldGhvZC1uYW1lPmZvb0FzeW5jPC9tZXRob2QtbmFtZT4KICAgICAgICAgICAgIDxtZXRob2QtcGFyYW1zPgogICAgICAgICAgICAgPG1ldGhvZC1wYXJhbT5pbnQ8L21ldGhvZC1wYXJhbT4KLQkgIDwvbWV0aG9kLXBhcmFtcz4KLQkgIDwvbWV0aG9kPgorICAgICAgPC9tZXRob2QtcGFyYW1zPgorICAgICAgPC9tZXRob2Q+CiAgICAgICAgICAgPGxvY2s+UmVhZDwvbG9jaz4KLQk8L2NvbmN1cnJlbnQtbWV0aG9kPgotCTxhc3luYy1tZXRob2Q+Ci0JICA8bWV0aG9kLW5hbWU+Zm9vQXN5bmM8L21ldGhvZC1uYW1lPgorICAgIDwvY29uY3VycmVudC1tZXRob2Q+CisgICAgPGFzeW5jLW1ldGhvZD4KKyAgICAgIDxtZXRob2QtbmFtZT5mb29Bc3luYzwvbWV0aG9kLW5hbWU+CiAgICAgICAgICAgPG1ldGhvZC1wYXJhbXM+CiAgICAgICAgICAgICA8bWV0aG9kLXBhcmFtPmludDwvbWV0aG9kLXBhcmFtPgotCSAgPC9tZXRob2QtcGFyYW1zPgotCTwvYXN5bmMtbWV0aG9kPgorICAgICAgPC9tZXRob2QtcGFyYW1zPgorICAgIDwvYXN5bmMtbWV0aG9kPgogICAgICAgICA8dHJhbnNhY3Rpb24tdHlwZT5Db250YWluZXI8L3RyYW5zYWN0aW9uLXR5cGU+CiAgICAgICAgIDxwb3N0LWNvbnN0cnVjdD4KICAgICAgICAgICA8bGlmZWN5Y2xlLWNhbGxiYWNrLWNsYXNzPmNvbS5hY21lLlNpbmdsZXRvbkJlYW4yPC9saWZlY3ljbGUtY2FsbGJhY2stY2xhc3M+CiAgICAgICAgICAgPGxpZmVjeWNsZS1jYWxsYmFjay1tZXRob2Q+aW5pdDwvbGlmZWN5Y2xlLWNhbGxiYWNrLW1ldGhvZD4KLQk8L3Bvc3QtY29uc3RydWN0PgorICAgIDwvcG9zdC1jb25zdHJ1Y3Q+CiAgICAgICAgIDxwcmUtZGVzdHJveT4KICAgICAgICAgICA8bGlmZWN5Y2xlLWNhbGxiYWNrLWNsYXNzPmNvbS5hY21lLlNpbmdsZXRvbkJlYW4yPC9saWZlY3ljbGUtY2FsbGJhY2stY2xhc3M+CiAgICAgICAgICAgPGxpZmVjeWNsZS1jYWxsYmFjay1tZXRob2Q+ZGVzdHJveTwvbGlmZWN5Y2xlLWNhbGxiYWNrLW1ldGhvZD4KLQk8L3ByZS1kZXN0cm95PgorICAgIDwvcHJlLWRlc3Ryb3k+CiAgICAgICA8L3Nlc3Npb24+CiAgICAgICA8c2Vzc2lvbj4KICAgICAgICAgPGVqYi1uYW1lPlN0YXRlbGVzc0JlYW48L2VqYi1uYW1lPgpAQCAtMTcwLDcgKzE3MCw3IEBACiAgICAgICAgIDwvYXN5bmMtbWV0aG9kPgogICAgICAgPC9zZXNzaW9uPgogICAgICAgPHNlc3Npb24+Ci0JIDxlamItbmFtZT5NdWx0aUJlYW48L2VqYi1uYW1lPgorICAgICA8ZWpiLW5hbWU+TXVsdGlCZWFuPC9lamItbmFtZT4KICAgICAgICAgICAgPGVudi1lbnRyeT4KICAgICAgICAgICAgPGVudi1lbnRyeS1uYW1lPm11bHRpPC9lbnYtZW50cnktbmFtZT4KICAgICAgICAgICAgPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2Vudi1lbnRyeS10eXBlPgpAQCAtMTc5LDkgKzE3OSw5IEBACiAgICAgICA8L3Nlc3Npb24+CiAgICAgICA8c2Vzc2lvbj4KICAgICAgICAgPGVqYi1uYW1lPk11bHRpQmVhbjI8L2VqYi1uYW1lPgotCTxsb2NhbC1iZWFuLz4KLQk8ZWpiLWNsYXNzPmNvbS5hY21lLk11bHRpQmVhbjwvZWpiLWNsYXNzPgotCTxzZXNzaW9uLXR5cGU+U2luZ2xldG9uPC9zZXNzaW9uLXR5cGU+CisgICAgPGxvY2FsLWJlYW4vPgorICAgIDxlamItY2xhc3M+Y29tLmFjbWUuTXVsdGlCZWFuPC9lamItY2xhc3M+CisgICAgPHNlc3Npb24tdHlwZT5TaW5nbGV0b248L3Nlc3Npb24tdHlwZT4KICAgICAgICAgICAgPGVudi1lbnRyeT4KICAgICAgICAgICAgPGVudi1lbnRyeS1uYW1lPm11bHRpPC9lbnYtZW50cnktbmFtZT4KICAgICAgICAgICAgPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2Vudi1lbnRyeS10eXBlPgpAQCAtMTkwLDkgKzE5MCw5IEBACiAgICAgICA8L3Nlc3Npb24+CiAgICAgICA8c2Vzc2lvbj4KICAgICAgICAgPGVqYi1uYW1lPk11bHRpQmVhbjM8L2VqYi1uYW1lPgotCTxsb2NhbC1iZWFuLz4KLQk8ZWpiLWNsYXNzPmNvbS5hY21lLk11bHRpQmVhbjwvZWpiLWNsYXNzPgotCTxzZXNzaW9uLXR5cGU+U2luZ2xldG9uPC9zZXNzaW9uLXR5cGU+CisgICAgPGxvY2FsLWJlYW4vPgorICAgIDxlamItY2xhc3M+Y29tLmFjbWUuTXVsdGlCZWFuPC9lamItY2xhc3M+CisgICAgPHNlc3Npb24tdHlwZT5TaW5nbGV0b248L3Nlc3Npb24tdHlwZT4KICAgICAgICAgICAgPGVudi1lbnRyeT4KICAgICAgICAgICAgPGVudi1lbnRyeS1uYW1lPm11bHRpPC9lbnYtZW50cnktbmFtZT4KICAgICAgICAgICAgPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2Vudi1lbnRyeS10eXBlPgpAQCAtMjAyLDMxICsyMDIsMzEgQEAKIAogICAgICAgPHNlc3Npb24+CiAgICAgICAgIDxlamItbmFtZT5TdGF0ZWZ1bEJlYW48L2VqYi1uYW1lPgotCTxsb2NhbC1iZWFuLz4KLQk8ZWpiLWNsYXNzPmNvbS5hY21lLlN0YXRlZnVsQmVhbjwvZWpiLWNsYXNzPgotCTxzZXNzaW9uLXR5cGU+U3RhdGVmdWw8L3Nlc3Npb24tdHlwZT4KLQk8c3RhdGVmdWwtdGltZW91dD4KLQkgICA8dGltZW91dD4xMDAxPC90aW1lb3V0PgorICAgIDxsb2NhbC1iZWFuLz4KKyAgICA8ZWpiLWNsYXNzPmNvbS5hY21lLlN0YXRlZnVsQmVhbjwvZWpiLWNsYXNzPgorICAgIDxzZXNzaW9uLXR5cGU+U3RhdGVmdWw8L3Nlc3Npb24tdHlwZT4KKyAgICA8c3RhdGVmdWwtdGltZW91dD4KKyAgICAgICA8dGltZW91dD4xMDAxPC90aW1lb3V0PgogICAgICAgICAgICA8dW5pdD5NaW51dGVzPC91bml0PgotCTwvc3RhdGVmdWwtdGltZW91dD4KLQk8Y29uY3VycmVuY3ktbWFuYWdlbWVudC10eXBlPkNvbnRhaW5lcjwvY29uY3VycmVuY3ktbWFuYWdlbWVudC10eXBlPgotCTxhc3luYy1tZXRob2Q+Ci0JICA8bWV0aG9kLW5hbWU+Zm9vPC9tZXRob2QtbmFtZT4KLQk8L2FzeW5jLW1ldGhvZD4KKyAgICA8L3N0YXRlZnVsLXRpbWVvdXQ+CisgICAgPGNvbmN1cnJlbmN5LW1hbmFnZW1lbnQtdHlwZT5Db250YWluZXI8L2NvbmN1cnJlbmN5LW1hbmFnZW1lbnQtdHlwZT4KKyAgICA8YXN5bmMtbWV0aG9kPgorICAgICAgPG1ldGhvZC1uYW1lPmZvbzwvbWV0aG9kLW5hbWU+CisgICAgPC9hc3luYy1tZXRob2Q+CiAgICAgICAgIDxhZnRlci1iZWdpbi1tZXRob2Q+Ci0JICA8bWV0aG9kLW5hbWU+YWZ0ZXJCZWdpbjwvbWV0aG9kLW5hbWU+Ci0JPC9hZnRlci1iZWdpbi1tZXRob2Q+CisgICAgICA8bWV0aG9kLW5hbWU+YWZ0ZXJCZWdpbjwvbWV0aG9kLW5hbWU+CisgICAgPC9hZnRlci1iZWdpbi1tZXRob2Q+CiAgICAgICAgIDxiZWZvcmUtY29tcGxldGlvbi1tZXRob2Q+Ci0JICA8bWV0aG9kLW5hbWU+YmVmb3JlQ29tcGxldGlvbjwvbWV0aG9kLW5hbWU+Ci0JPC9iZWZvcmUtY29tcGxldGlvbi1tZXRob2Q+CisgICAgICA8bWV0aG9kLW5hbWU+YmVmb3JlQ29tcGxldGlvbjwvbWV0aG9kLW5hbWU+CisgICAgPC9iZWZvcmUtY29tcGxldGlvbi1tZXRob2Q+CiAgICAgICAgIDxhZnRlci1jb21wbGV0aW9uLW1ldGhvZD4KLQkgIDxtZXRob2QtbmFtZT5hZnRlckNvbXBsZXRpb248L21ldGhvZC1uYW1lPgorICAgICAgPG1ldGhvZC1uYW1lPmFmdGVyQ29tcGxldGlvbjwvbWV0aG9kLW5hbWU+CiAgICAgICAgICAgPG1ldGhvZC1wYXJhbXM+CiAgICAgICAgICAgICA8bWV0aG9kLXBhcmFtPmJvb2xlYW48L21ldGhvZC1wYXJhbT4KLQkgIDwvbWV0aG9kLXBhcmFtcz4KLQk8L2FmdGVyLWNvbXBsZXRpb24tbWV0aG9kPgorICAgICAgPC9tZXRob2QtcGFyYW1zPgorICAgIDwvYWZ0ZXItY29tcGxldGlvbi1tZXRob2Q+CiAgICAgICA8L3Nlc3Npb24+Ci0gICAgICAKKwogICAgIDwvZW50ZXJwcmlzZS1iZWFucz4KICAgPGFzc2VtYmx5LWRlc2NyaXB0b3I+CiAgICAgPGNvbnRhaW5lci10cmFuc2FjdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9lamIvRGF0ZVRpbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9lamIvRGF0ZVRpbWUuamF2YQppbmRleCAyMTU5M2VkLi41M2FiNmY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvZWpiL0RhdGVUaW1lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2VqYi9EYXRlVGltZS5qYXZhCkBAIC0xOSwzOCArMTksMzggQEAKIAogcHVibGljIGNsYXNzIERhdGVUaW1lIHsKIAotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCi0JU3RyaW5nIHhzZERhdGVUaW1lID0gYXJnc1swXTsKKyAgICBTdHJpbmcgeHNkRGF0ZVRpbWUgPSBhcmdzWzBdOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJDb252ZXJ0aW5nIHhzZERhdGVUaW1lICIgKyB4c2REYXRlVGltZSArICIgLi4uIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb252ZXJ0aW5nIHhzZERhdGVUaW1lICIgKyB4c2REYXRlVGltZSArICIgLi4uIik7CiAKLQl0cnkgewotCSAgICBEYXRhdHlwZUZhY3RvcnkgZmFjdG9yeSA9IERhdGF0eXBlRmFjdG9yeS5uZXdJbnN0YW5jZSgpOworICAgIHRyeSB7CisgICAgICAgIERhdGF0eXBlRmFjdG9yeSBmYWN0b3J5ID0gRGF0YXR5cGVGYWN0b3J5Lm5ld0luc3RhbmNlKCk7CiAKLQkgICAgWE1MR3JlZ29yaWFuQ2FsZW5kYXIgeG1sR3JlZyA9IGZhY3RvcnkubmV3WE1MR3JlZ29yaWFuQ2FsZW5kYXIoeHNkRGF0ZVRpbWUpOworICAgICAgICBYTUxHcmVnb3JpYW5DYWxlbmRhciB4bWxHcmVnID0gZmFjdG9yeS5uZXdYTUxHcmVnb3JpYW5DYWxlbmRhcih4c2REYXRlVGltZSk7CiAKLQkgICAgR3JlZ29yaWFuQ2FsZW5kYXIgZ3JlZyA9IHhtbEdyZWcudG9HcmVnb3JpYW5DYWxlbmRhcigpOworICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBncmVnID0geG1sR3JlZy50b0dyZWdvcmlhbkNhbGVuZGFyKCk7CiAKLQkgICAgRGF0ZSBkYXRlID0gZ3JlZy5nZXRUaW1lKCk7CisgICAgICAgIERhdGUgZGF0ZSA9IGdyZWcuZ2V0VGltZSgpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGF0ZSA9ICIgKyBkYXRlKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEYXRlID0gIiArIGRhdGUpOwogCi0JICAgIEdyZWdvcmlhbkNhbGVuZGFyIHJldmVyc2VDYWxlbmRhciA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOwotCSAgICByZXZlcnNlQ2FsZW5kYXIuc2V0VGltZShkYXRlKTsKKyAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgcmV2ZXJzZUNhbGVuZGFyID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKCk7CisgICAgICAgIHJldmVyc2VDYWxlbmRhci5zZXRUaW1lKGRhdGUpOwogCiAKLQkgICAgWE1MR3JlZ29yaWFuQ2FsZW5kYXIgcmV2ZXJzZVhtbEdyZWcgPSAKLQkJZmFjdG9yeS5uZXdYTUxHcmVnb3JpYW5DYWxlbmRhcihyZXZlcnNlQ2FsZW5kYXIpOworICAgICAgICBYTUxHcmVnb3JpYW5DYWxlbmRhciByZXZlcnNlWG1sR3JlZyA9CisgICAgICAgIGZhY3RvcnkubmV3WE1MR3JlZ29yaWFuQ2FsZW5kYXIocmV2ZXJzZUNhbGVuZGFyKTsKIAotCSAgICBTdHJpbmcgcmV2ZXJzZVhzZERhdGVUaW1lID0gcmV2ZXJzZVhtbEdyZWcudG9YTUxGb3JtYXQoKTsKKyAgICAgICAgU3RyaW5nIHJldmVyc2VYc2REYXRlVGltZSA9IHJldmVyc2VYbWxHcmVnLnRvWE1MRm9ybWF0KCk7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJCYWNrIHRvIHhzZERhdGVUaW1lID0gIiArIHJldmVyc2VYc2REYXRlVGltZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmFjayB0byB4c2REYXRlVGltZSA9ICIgKyByZXZlcnNlWHNkRGF0ZVRpbWUpOwogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogCiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvZWpiL011bHRpQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2VqYi9NdWx0aUJlYW4uamF2YQppbmRleCA5YTU0ZThjLi41OWZhZTA2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvZWpiL011bHRpQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9lamIvTXVsdGlCZWFuLmphdmEKQEAgLTI3LDM2ICsyNywzNiBAQAogICAgIEBSZXNvdXJjZShuYW1lPSJtdWx0aSIpCiAgICAgcHJpdmF0ZSBTdHJpbmcgbXVsdGk7CiAKLSAgICBAUG9zdENvbnN0cnVjdCAKKyAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gaW5pdCgpIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJtdWx0aSA9ICIgKyBtdWx0aSk7Ci0JdHJ5IHsKLQkgICAgU3RyaW5nIG11bHRpTG9va3VwID0gKFN0cmluZykKLQkJbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvZW52L211bHRpIik7Ci0JICAgIGlmKCAhbXVsdGkuZXF1YWxzKG11bHRpTG9va3VwKSApIHsKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiTm9uLW1hdGNoaW5nIHZhbHVlcyBvZiBtdWx0aSIgKyAKLQkJCQkgICAgICAgbXVsdGkgKyAiIDogIiArIG11bHRpTG9va3VwKTsKLQkgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gaW5pdCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJtdWx0aSA9ICIgKyBtdWx0aSk7CisgICAgdHJ5IHsKKyAgICAgICAgU3RyaW5nIG11bHRpTG9va3VwID0gKFN0cmluZykKKyAgICAgICAgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvZW52L211bHRpIik7CisgICAgICAgIGlmKCAhbXVsdGkuZXF1YWxzKG11bHRpTG9va3VwKSApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiTm9uLW1hdGNoaW5nIHZhbHVlcyBvZiBtdWx0aSIgKworICAgICAgICAgICAgICAgICAgICAgICBtdWx0aSArICIgOiAiICsgbXVsdGlMb29rdXApOworICAgICAgICB9CiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBmb28oKSB7Ci0JdHJ5IHsKLQkgICAgU3RyaW5nIG11bHRpTG9va3VwID0gKFN0cmluZykKLQkJbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvZW52L211bHRpIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigibXVsdGlMb29rdXAgPSAiICsgbXVsdGlMb29rdXApOwotCSAgICBpZiggIW11bHRpLmVxdWFscyhtdWx0aUxvb2t1cCkgKSB7Ci0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oIk5vbi1tYXRjaGluZyB2YWx1ZXMgb2YgbXVsdGkiICsgCi0JCQkJICAgICAgIG11bHRpICsgIiA6ICIgKyBtdWx0aUxvb2t1cCk7Ci0JICAgIH0KLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JfQotCXJldHVybiBtdWx0aTsKKyAgICB0cnkgeworICAgICAgICBTdHJpbmcgbXVsdGlMb29rdXAgPSAoU3RyaW5nKQorICAgICAgICBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Y29tcC9lbnYvbXVsdGkiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtdWx0aUxvb2t1cCA9ICIgKyBtdWx0aUxvb2t1cCk7CisgICAgICAgIGlmKCAhbXVsdGkuZXF1YWxzKG11bHRpTG9va3VwKSApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiTm9uLW1hdGNoaW5nIHZhbHVlcyBvZiBtdWx0aSIgKworICAgICAgICAgICAgICAgICAgICAgICBtdWx0aSArICIgOiAiICsgbXVsdGlMb29rdXApOworICAgICAgICB9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOworICAgIH0KKyAgICByZXR1cm4gbXVsdGk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvZWpiL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9lamIvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IGRlMmQyZGMuLjBiNDUyMTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9lamIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9lamIvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiBwdWJsaWMgY2xhc3MgU2luZ2xldG9uQmVhbiBpbXBsZW1lbnRzIFJlbW90ZVNpbmdsZXRvbiB7CiAKIAotICAgIEBFSkIgCisgICAgQEVKQgogICAgIHByaXZhdGUgU3RhdGVmdWxCZWFuIHNmOwogCiAgICAgQFJlc291cmNlCkBAIC00NCw5MyArNDQsOTMgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjppbml0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmluaXQoKSIpOwogCi0JLy8gQ2FsbCBhIG1ldGhvZCBtYXJrZWQgYXMgYXN5bmMgaW4gLnhtbC4gIFRoaXMgd291bGQgYmxvY2sKLQkvLyBpZiBpdCdzIG5vdCBjb3JyZWN0bHkgaWRlbnRpZmllZCBhcyBhbiBhc3luYyBtZXRob2Qgc2luY2UKLQkvLyB3ZSdyZSBub3Qgb3V0IG9mIFBvc3RDb25zdHJ1Y3QgeWV0LgotCW1lLmZvbygpOworICAgIC8vIENhbGwgYSBtZXRob2QgbWFya2VkIGFzIGFzeW5jIGluIC54bWwuICBUaGlzIHdvdWxkIGJsb2NrCisgICAgLy8gaWYgaXQncyBub3QgY29ycmVjdGx5IGlkZW50aWZpZWQgYXMgYW4gYXN5bmMgbWV0aG9kIHNpbmNlCisgICAgLy8gd2UncmUgbm90IG91dCBvZiBQb3N0Q29uc3RydWN0IHlldC4KKyAgICBtZS5mb28oKTsKIAotCVNpbmdsZXRvbkJlYW4yIHNiMiA9IChTaW5nbGV0b25CZWFuMikgCi0JICAgIGN0eC5sb29rdXAoImphdmE6bW9kdWxlL1NpbmdsZXRvbkJlYW4yIik7CisgICAgU2luZ2xldG9uQmVhbjIgc2IyID0gKFNpbmdsZXRvbkJlYW4yKQorICAgICAgICBjdHgubG9va3VwKCJqYXZhOm1vZHVsZS9TaW5nbGV0b25CZWFuMiIpOwogCi0JLy8gQ2FsbCByZWFkLWxvY2sgYXN5bmMgbWV0aG9kIGFuZCBoYXZlIGl0IHNsZWVwIGZvciBhIGxpdHRsZQotCS8vIHdoaWxlCi0Jc2IyLmZvb0FzeW5jKDEwKTsKKyAgICAvLyBDYWxsIHJlYWQtbG9jayBhc3luYyBtZXRob2QgYW5kIGhhdmUgaXQgc2xlZXAgZm9yIGEgbGl0dGxlCisgICAgLy8gd2hpbGUKKyAgICBzYjIuZm9vQXN5bmMoMTApOwogCi0JLy8gU2xlZXAgZm9yIGEgc2hvcnQgdGltZSB0byBhbGxvdyBlbm91Z2ggdGltZSBmb3IgZm9vQXN5bmMoKSB0bwotCS8vIGJsb2NrCi0JdHJ5IHsKLQkgICAgVGhyZWFkLnNsZWVwKDEwMDApOwotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgLy8gU2xlZXAgZm9yIGEgc2hvcnQgdGltZSB0byBhbGxvdyBlbm91Z2ggdGltZSBmb3IgZm9vQXN5bmMoKSB0bworICAgIC8vIGJsb2NrCisgICAgdHJ5IHsKKyAgICAgICAgVGhyZWFkLnNsZWVwKDEwMDApOworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAKLQkvLyBDYWxsIGEgc3ljaHJvbm91cyB3cml0ZS1sb2NrIG1ldGhvZCB3aXRoIGEgLnhtbCBzcGVjaWZpZWQKLQkvLyB0aW1lb3V0IHRoYXQncyBsZXNzIHRoYW4gdGhlIGZvb0FzeW5jIHNsZWVwIHRpbWUKLQl0cnkgewotCSAgICBzYjIuZm9vKCk7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNob3VsZCBoYXZlIGdvdHRlbiB0aW1lb3V0IGV4Y2VwdGlvbiIpOwotCX0gY2F0Y2goQ29uY3VycmVudEFjY2Vzc1RpbWVvdXRFeGNlcHRpb24gY2F0ZSkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCB0aW1lb3V0IGV4Y2VwdGlvbiIpOwotCX0KKyAgICAvLyBDYWxsIGEgc3ljaHJvbm91cyB3cml0ZS1sb2NrIG1ldGhvZCB3aXRoIGEgLnhtbCBzcGVjaWZpZWQKKyAgICAvLyB0aW1lb3V0IHRoYXQncyBsZXNzIHRoYW4gdGhlIGZvb0FzeW5jIHNsZWVwIHRpbWUKKyAgICB0cnkgeworICAgICAgICBzYjIuZm9vKCk7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNob3VsZCBoYXZlIGdvdHRlbiB0aW1lb3V0IGV4Y2VwdGlvbiIpOworICAgIH0gY2F0Y2goQ29uY3VycmVudEFjY2Vzc1RpbWVvdXRFeGNlcHRpb24gY2F0ZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCB0aW1lb3V0IGV4Y2VwdGlvbiIpOworICAgIH0KIAotCVJlbW90ZVNpbmdsZXRvbiBsb29rdXAxID0gKFJlbW90ZVNpbmdsZXRvbikKLQkgICAgY3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvbG9va3VwMSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigibG9va3VwMSA9ICIgKyBsb29rdXAxKTsKKyAgICBSZW1vdGVTaW5nbGV0b24gbG9va3VwMSA9IChSZW1vdGVTaW5nbGV0b24pCisgICAgICAgIGN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2xvb2t1cDEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxvb2t1cDEgPSAiICsgbG9va3VwMSk7CiAKLQlTaW5nbGV0b25CZWFuMiBsb29rdXAyID0gKFNpbmdsZXRvbkJlYW4yKQotCSAgICBjdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9sb29rdXAyIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJsb29rdXAyID0gIiArIGxvb2t1cDIpOworICAgIFNpbmdsZXRvbkJlYW4yIGxvb2t1cDIgPSAoU2luZ2xldG9uQmVhbjIpCisgICAgICAgIGN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2xvb2t1cDIiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxvb2t1cDIgPSAiICsgbG9va3VwMik7CiAKLQkvLyBOb3cgY2FsbCBhIHN5bmNocm9ub3VzIHJlYWQtbG9jayBtZXRob2QuICBUaGlzIHNob3VsZCBqdXN0Ci0JLy8gcHJvY2VlZC4KLQlzYjIuZm9vMigpOworICAgIC8vIE5vdyBjYWxsIGEgc3luY2hyb25vdXMgcmVhZC1sb2NrIG1ldGhvZC4gIFRoaXMgc2hvdWxkIGp1c3QKKyAgICAvLyBwcm9jZWVkLgorICAgIHNiMi5mb28yKCk7CiAKLQlzZi5mb28oKTsKKyAgICBzZi5mb28oKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiTGVhdmluZyBTaW5nbGV0b25CZWFuOjppbml0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxlYXZpbmcgU2luZ2xldG9uQmVhbjo6aW5pdCgpIik7CiAgICAgfQogCiAgICAgQEFjY2Vzc1RpbWVvdXQodmFsdWU9MTAsIHVuaXQ9VGltZVVuaXQuREFZUykKICAgICBwdWJsaWMgdm9pZCBmb28oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpmb28oKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6Zm9vKCkiKTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6ZGVzdHJveSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpkZXN0cm95KCkiKTsKICAgICB9CiAKICAgICBAU2NoZWR1bGUoc2Vjb25kPSIxIiwgbWludXRlPSIqIiwgaG91cj0iKiIsIHBlcnNpc3RlbnQ9ZmFsc2UpCiAgICAgcHJpdmF0ZSB2b2lkIG15dGltZW91dChUaW1lciB0KSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpteXRpbWVvdXQsIGluZm8gPSAiICsgdC5nZXRJbmZvKCkgKyAidCA9ICIgKyAKLQkJCSAgIHQuZ2V0U2NoZWR1bGUoKSk7CQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6bXl0aW1lb3V0LCBpbmZvID0gIiArIHQuZ2V0SW5mbygpICsgInQgPSAiICsKKyAgICAgICAgICAgICAgIHQuZ2V0U2NoZWR1bGUoKSk7CiAKLQl0cnkgewotCSAgICB0LmdldEhhbmRsZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBnb3QgaGFuZGxlIGZvciBwZXJzaXN0ZW50IHRpbWVyIik7Ci0JfSBjYXRjaChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCX0KKyAgICB0cnkgeworICAgICAgICB0LmdldEhhbmRsZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBnb3QgaGFuZGxlIGZvciBwZXJzaXN0ZW50IHRpbWVyIik7CisgICAgfSBjYXRjaChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOworICAgIH0KIAotCWlmKCB0LmdldEluZm8oKS5lcXVhbHMoImluZm8iKSAmJiB0LmlzUGVyc2lzdGVudCgpICYmIHQuaXNDYWxlbmRhclRpbWVyKCkgKSB7Ci0JICAgIGdvdFRpbWVvdXQgPSB0cnVlOwotCX0gZWxzZSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlRpbWVyIG1ldGFkYXRhIGRvZXNuJ3QgbWF0Y2ggZGVzY3JpcHRvciAiICsgdCk7Ci0JfQorICAgIGlmKCB0LmdldEluZm8oKS5lcXVhbHMoImluZm8iKSAmJiB0LmlzUGVyc2lzdGVudCgpICYmIHQuaXNDYWxlbmRhclRpbWVyKCkgKSB7CisgICAgICAgIGdvdFRpbWVvdXQgPSB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlRpbWVyIG1ldGFkYXRhIGRvZXNuJ3QgbWF0Y2ggZGVzY3JpcHRvciAiICsgdCk7CisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBteXRpbWVvdXQyKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6bXl0aW1lb3V0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpteXRpbWVvdXQiKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgbXl0aW1lb3V0MShUaW1lciB0KSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpteXRpbWVvdXQxIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpteXRpbWVvdXQxIik7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gZ2V0VGVzdFJlc3VsdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OnRlc3RQYXNzZWQiKTsKLQlyZXR1cm4gZ290VGltZW91dDsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OnRlc3RQYXNzZWQiKTsKKyAgICByZXR1cm4gZ290VGltZW91dDsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvZWpiL1NpbmdsZXRvbkJlYW4yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvZWpiL1NpbmdsZXRvbkJlYW4yLmphdmEKaW5kZXggNDljMGI2ZS4uODk0NjBhNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2VqYi9TaW5nbGV0b25CZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9lamIvU2luZ2xldG9uQmVhbjIuamF2YQpAQCAtMjEsMTAgKzIxLDEwIEBACiAgICAgcHJpdmF0ZSBpbnQgaW5pdFR4ID0gLTE7CiAKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW4yOjppbml0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW4yOjppbml0KCkiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCBpYyA9IG5ldyBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQoKTsKLQkgICAgamFrYXJ0YS50cmFuc2FjdGlvbi5UcmFuc2FjdGlvblN5bmNocm9uaXphdGlvblJlZ2lzdHJ5IHRyID0gCisgICAgICAgIGpha2FydGEudHJhbnNhY3Rpb24uVHJhbnNhY3Rpb25TeW5jaHJvbml6YXRpb25SZWdpc3RyeSB0ciA9CiAgICAgICAgICAgICAgICAgIChqYWthcnRhLnRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uU3luY2hyb25pemF0aW9uUmVnaXN0cnkpCiAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL1RyYW5zYWN0aW9uU3luY2hyb25pemF0aW9uUmVnaXN0cnkiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjI6OmluaXQoKSB0eCBzdGF0dXM6ICIgKyB0ci5nZXRUcmFuc2FjdGlvblN0YXR1cygpKTsKQEAgLTM1LDMyICszNSwzMiBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW4yOjpmb28oKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjI6OmZvbygpIik7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZm9vMigpIHsgCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuMjo6Zm9vMigpIik7CisgICAgcHVibGljIHZvaWQgZm9vMigpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW4yOjpmb28yKCkiKTsKICAgICAgICAgaWYgKGluaXRUeCAhPSA2KQogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImluaXRUeCBpcyAiICsgaW5pdFR4KTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBmb29Bc3luYyhpbnQgc2xlZXBTZWNvbmRzKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuMjo6Zm9vQXN5bmMoKSBTbGVlcGluZyBmb3IgIiArCi0JCQkgICBzbGVlcFNlY29uZHMgKyAiIHNlY29uZHMuLi4iKTsKLQl0cnkgewotCSAgICBUaHJlYWQuc2xlZXAoc2xlZXBTZWNvbmRzICogMTAwMCk7Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oImZvb0FzeW5jKCkgYXdva2UgZnJvbSBTbGVlcCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjI6OmZvb0FzeW5jKCkgU2xlZXBpbmcgZm9yICIgKworICAgICAgICAgICAgICAgc2xlZXBTZWNvbmRzICsgIiBzZWNvbmRzLi4uIik7CisgICAgdHJ5IHsKKyAgICAgICAgVGhyZWFkLnNsZWVwKHNsZWVwU2Vjb25kcyAqIDEwMDApOworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJmb29Bc3luYygpIGF3b2tlIGZyb20gU2xlZXAiKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW4yOjpkZXN0cm95KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW4yOjpkZXN0cm95KCkiKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgbXlUaW1lb3V0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVuMjo6bXlUaW1lb3V0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlbjI6Om15VGltZW91dCgpIik7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvZWpiL1N0YXRlZnVsQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2VqYi9TdGF0ZWZ1bEJlYW4uamF2YQppbmRleCA2ZTdiOWU3Li43MTkyMzgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvZWpiL1N0YXRlZnVsQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9lamIvU3RhdGVmdWxCZWFuLmphdmEKQEAgLTIxLDI3ICsyMSwyNyBAQAogCiBwdWJsaWMgY2xhc3MgU3RhdGVmdWxCZWFuIHsKIAotICAgIEBFSkIgcHJpdmF0ZSBTdGF0ZWxlc3NCZWFuIHNsc2I7ICAgIAorICAgIEBFSkIgcHJpdmF0ZSBTdGF0ZWxlc3NCZWFuIHNsc2I7CiAKICAgICBwdWJsaWMgdm9pZCBmb28oKSB7CiAKLQlzbHNiLmZvbygpOwotCQorICAgIHNsc2IuZm9vKCk7CisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBhZnRlckJlZ2luKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuOjphZnRlckJlZ2luIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW46OmFmdGVyQmVnaW4iKTsKICAgICB9CiAKIAogICAgIHByaXZhdGUgdm9pZCBiZWZvcmVDb21wbGV0aW9uKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuOjpiZWZvcmVDb21wbGV0aW9uIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW46OmJlZm9yZUNvbXBsZXRpb24iKTsKICAgICB9CiAKIAogICAgIHZvaWQgYWZ0ZXJDb21wbGV0aW9uKGJvb2xlYW4gY29tbWl0dGVkKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW46OmFmdGVyQ29tcGxldGlvbiBjID0gIiArCi0JCQkgICBjb21taXR0ZWQpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuOjphZnRlckNvbXBsZXRpb24gYyA9ICIgKworICAgICAgICAgICAgICAgY29tbWl0dGVkKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9lamIvU3RhdGVsZXNzQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2VqYi9TdGF0ZWxlc3NCZWFuLmphdmEKaW5kZXggZDEzNDU4Mi4uZThkNGVlNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2VqYi9TdGF0ZWxlc3NCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2VqYi9TdGF0ZWxlc3NCZWFuLmphdmEKQEAgLTI3LDIzICsyNywyMyBAQAogCiAgICAgcHVibGljIHZvaWQgZm9vKCkgewogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuOjpmb28iKTsKLQkJCi0gICAgICAgCVN0cmluZyBtdWx0aTFTdHIgPSBtdWx0aTEuZm9vKCk7Ci0JU3RyaW5nIG11bHRpMlN0ciA9IG11bHRpMi5mb28oKTsKLQlTdHJpbmcgbXVsdGkzU3RyID0gbXVsdGkzLmZvbygpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjo6Zm9vIik7CiAKLSAgICAgICAJU3lzdGVtLm91dC5wcmludGxuKCJtdWx0aTEgPSAiICsgbXVsdGkxU3RyKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIm11bHRpMiA9ICIgKyBtdWx0aTJTdHIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigibXVsdGkzID0gIiArIG11bHRpM1N0cik7CisgICAgICAgICAgIFN0cmluZyBtdWx0aTFTdHIgPSBtdWx0aTEuZm9vKCk7CisgICAgU3RyaW5nIG11bHRpMlN0ciA9IG11bHRpMi5mb28oKTsKKyAgICBTdHJpbmcgbXVsdGkzU3RyID0gbXVsdGkzLmZvbygpOwogCi0JaWYoIC8qKiFtdWx0aTFTdHIuZXF1YWxzKCIxIikgfHwgKiovCi0JICAgICFtdWx0aTJTdHIuZXF1YWxzKCIyIikgfHwKLQkgICAgIW11bHRpM1N0ci5lcXVhbHMoIjMiKSApIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiSW52YWxpZCBtdWx0aSB2YWx1ZXMiKTsKKyAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtdWx0aTEgPSAiICsgbXVsdGkxU3RyKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm11bHRpMiA9ICIgKyBtdWx0aTJTdHIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigibXVsdGkzID0gIiArIG11bHRpM1N0cik7CiAKLQl9Ci0JCisgICAgaWYoIC8qKiFtdWx0aTFTdHIuZXF1YWxzKCIxIikgfHwgKiovCisgICAgICAgICFtdWx0aTJTdHIuZXF1YWxzKCIyIikgfHwKKyAgICAgICAgIW11bHRpM1N0ci5lcXVhbHMoIjMiKSApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiSW52YWxpZCBtdWx0aSB2YWx1ZXMiKTsKKworICAgIH0KKwogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2ZzYnNjbmMvYnVpbGQucHJvcGVydGllcwppbmRleCBjNTEwMjYwLi4yMTQ3Y2E1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEyICsxNSwxMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWZ1bGwtc2ZzYnNjbmMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KLQkKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9idWlsZC54bWwKaW5kZXggOTkzNjdmYi4uNjFhZDY0OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2ZzYnNjbmMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTIgKzQ2LDEyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01OSw5ICs1OSw5IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtNzMsNyArNzMsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2ZzYnNjbmMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2ZzYnNjbmMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDY5NDJhNGMuLjM0OTI2N2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CkBAIC00MywxMjEgKzQzLDEyMSBAQAogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCi0JYXBwTmFtZSA9IGFyZ3NbMF07IAotCXN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7Ci0JQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7ICAgICAgIAotICAgICAgICBjbGllbnQuZG9UZXN0KCk7CQorICAgIGFwcE5hbWUgPSBhcmdzWzBdOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7CisgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CisgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwogICAgIH0KIAogICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewotCW51bSA9IEludGVnZXIudmFsdWVPZihhcmdzWzFdKTsKKyAgICBudW0gPSBJbnRlZ2VyLnZhbHVlT2YoYXJnc1sxXSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCi0JdHJ5IHsKKyAgICB0cnkgewogCi0JICAgIHNlcmlhbGl6ZWRCZWFuID0gKFN0YXRlZnVsQ25jU3VwZXJJbnRmKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9TdGF0ZWZ1bEJlYW5TZXJpYWxpemVkIWNvbS5hY21lLlN0YXRlZnVsQ25jUmVtb3RlIik7CisgICAgICAgIHNlcmlhbGl6ZWRCZWFuID0gKFN0YXRlZnVsQ25jU3VwZXJJbnRmKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9TdGF0ZWZ1bEJlYW5TZXJpYWxpemVkIWNvbS5hY21lLlN0YXRlZnVsQ25jUmVtb3RlIik7CiAKLQkgICAgbm9uU2VyaWFsaXplZEJlYW4gPSAoU3RhdGVmdWxDbmNTdXBlckludGYpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1N0YXRlZnVsQmVhbk5vdFNlcmlhbGl6ZWQhY29tLmFjbWUuU3RhdGVmdWxDbmNSZW1vdGUiKTsKKyAgICAgICAgbm9uU2VyaWFsaXplZEJlYW4gPSAoU3RhdGVmdWxDbmNTdXBlckludGYpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1N0YXRlZnVsQmVhbk5vdFNlcmlhbGl6ZWQhY29tLmFjbWUuU3RhdGVmdWxDbmNSZW1vdGUiKTsKIAogCi0JICAgIG5vblNlcmlhbGl6ZWRCZWFuLnNsZWVwKDMpOworICAgICAgICBub25TZXJpYWxpemVkQmVhbi5zbGVlcCgzKTsKIAogCi0JICAgIHRyeSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiU2xlZXAgYSBzbWFsbCBhbW91bnQgdG8gbWFrZSBzdXJlIHRoZSBhc3luYyBtZXRob2QiICsKLQkJCQkgICAiaXMgZGlzcGF0Y2hlZCBiZWZvcmUgd2UgbWFrZSB0aGUgbmV4dCBjYWxsLi4uIik7Ci0JCVRocmVhZC5zbGVlcCg1MDApOwotCQlub25TZXJpYWxpemVkQmVhbi5oZWxsbygpOwotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJEaWQgbm90IHJlY2VpdmUgY29uY3VycmVudCBhY2Nlc3MgZXhjZXB0aW9uIik7Ci0JICAgIH0gY2F0Y2goQ29uY3VycmVudEFjY2Vzc0V4Y2VwdGlvbiBjYWUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgY29uY3VycmVudCBhY2Nlc3MgZXhjZXB0aW9uIGZvciAiICsKLQkJCQkgICAiIGNvbmN1cnJlbnQgYWNjZXNzIGF0dGVtcHQgb24gbm9uLXNlcmlhbGl6ZWQgc2ZzYiIpOwotCSAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2xlZXAgYSBzbWFsbCBhbW91bnQgdG8gbWFrZSBzdXJlIHRoZSBhc3luYyBtZXRob2QiICsKKyAgICAgICAgICAgICAgICAgICAiaXMgZGlzcGF0Y2hlZCBiZWZvcmUgd2UgbWFrZSB0aGUgbmV4dCBjYWxsLi4uIik7CisgICAgICAgIFRocmVhZC5zbGVlcCg1MDApOworICAgICAgICBub25TZXJpYWxpemVkQmVhbi5oZWxsbygpOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJEaWQgbm90IHJlY2VpdmUgY29uY3VycmVudCBhY2Nlc3MgZXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2goQ29uY3VycmVudEFjY2Vzc0V4Y2VwdGlvbiBjYWUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgY29uY3VycmVudCBhY2Nlc3MgZXhjZXB0aW9uIGZvciAiICsKKyAgICAgICAgICAgICAgICAgICAiIGNvbmN1cnJlbnQgYWNjZXNzIGF0dGVtcHQgb24gbm9uLXNlcmlhbGl6ZWQgc2ZzYiIpOworICAgICAgICB9CiAKLQkgICAgdHJ5IHsKLQkJc2VyaWFsaXplZEJlYW4uc2xlZXAoMyk7Ci0JCXRyeSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwIGEgc21hbGwgYW1vdW50IHRvIG1ha2Ugc3VyZSB0aGUgYXN5bmMgbWV0aG9kIiArCi0JCQkJICAgImlzIGRpc3BhdGNoZWQgYmVmb3JlIHdlIG1ha2UgdGhlIG5leHQgY2FsbC4uLiIpOwotCQkgICAgVGhyZWFkLnNsZWVwKDEwMCk7Ci0JCSAgICBzZXJpYWxpemVkQmVhbi5oZWxsb1dhaXQoKTsKLQkJICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNob3VsZCBoYXZlIHJlY2VpdmVkIHRpbWVvdXQgZXhjZXB0aW9uIik7Ci0JCX0gY2F0Y2goQ29uY3VycmVudEFjY2Vzc1RpbWVvdXRFeGNlcHRpb24gY2F0ZSkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgdGltZW91dCBleGNlcHRpb24iKTsKLQkJfQorICAgICAgICB0cnkgeworICAgICAgICBzZXJpYWxpemVkQmVhbi5zbGVlcCgzKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2xlZXAgYSBzbWFsbCBhbW91bnQgdG8gbWFrZSBzdXJlIHRoZSBhc3luYyBtZXRob2QiICsKKyAgICAgICAgICAgICAgICAgICAiaXMgZGlzcGF0Y2hlZCBiZWZvcmUgd2UgbWFrZSB0aGUgbmV4dCBjYWxsLi4uIik7CisgICAgICAgICAgICBUaHJlYWQuc2xlZXAoMTAwKTsKKyAgICAgICAgICAgIHNlcmlhbGl6ZWRCZWFuLmhlbGxvV2FpdCgpOworICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU2hvdWxkIGhhdmUgcmVjZWl2ZWQgdGltZW91dCBleGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaChDb25jdXJyZW50QWNjZXNzVGltZW91dEV4Y2VwdGlvbiBjYXRlKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSByZWNlaXZlZCB0aW1lb3V0IGV4Y2VwdGlvbiIpOworICAgICAgICB9CiAKLQkJU3lzdGVtLm91dC5wcmludGxuKCJBdHRlbXB0IGxvb3BiYWNrIGNhbGwiKTsKLQkJc2VyaWFsaXplZEJlYW4uYXR0ZW1wdExvb3BiYWNrKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXR0ZW1wdCBsb29wYmFjayBjYWxsIik7CisgICAgICAgIHNlcmlhbGl6ZWRCZWFuLmF0dGVtcHRMb29wYmFjaygpOwogCi0JCS8vIEludm9raW5nIHRoZSBzYW1lIGJlYW4gbXVzdCBzdGlsbCB3b3JrIHNpbmNlIHRoZSBjb25jdXJyZW50IGFjY2VzcwotCQkvLyBleGNlcHRpb25zIGRvIG5vdCByZXN1bHQgaW4gdGhlIGJlYW4gYmVpbmcgZGVzdHJveWVkCi0JCVN0cmluZyByZXN1bHQgPSBzZXJpYWxpemVkQmVhbi5oZWxsbygpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNlcmlhbGl6ZWQgYmVhbiBzYXlzICIgKyByZXN1bHQpOworICAgICAgICAvLyBJbnZva2luZyB0aGUgc2FtZSBiZWFuIG11c3Qgc3RpbGwgd29yayBzaW5jZSB0aGUgY29uY3VycmVudCBhY2Nlc3MKKyAgICAgICAgLy8gZXhjZXB0aW9ucyBkbyBub3QgcmVzdWx0IGluIHRoZSBiZWFuIGJlaW5nIGRlc3Ryb3llZAorICAgICAgICBTdHJpbmcgcmVzdWx0ID0gc2VyaWFsaXplZEJlYW4uaGVsbG8oKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXJpYWxpemVkIGJlYW4gc2F5cyAiICsgcmVzdWx0KTsKIAotCSAgICB9IGNhdGNoKENvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24gY2FlKSB7Ci0JCSB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTaG91bGRuJ3QgaGF2ZSByZWNlaXZlZCBjb25jdXJyZW50IGFjY2VzcyBleGNlcHRpb24iKTsKLQkgICAgfQorICAgICAgICB9IGNhdGNoKENvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24gY2FlKSB7CisgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTaG91bGRuJ3QgaGF2ZSByZWNlaXZlZCBjb25jdXJyZW50IGFjY2VzcyBleGNlcHRpb24iKTsKKyAgICAgICAgfQogCi0JICAgIG5vblNlcmlhbGl6ZWRCZWFuLmF0dGVtcHRMb29wYmFjaygpOworICAgICAgICBub25TZXJpYWxpemVkQmVhbi5hdHRlbXB0TG9vcGJhY2soKTsKIAotCSAgICByZW1vdGVBc3luYyA9IChSZW1vdGVBc3luYykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU2luZ2xldG9uQmVhbiIpOwotCSAgICByZW1vdGVBc3luYy5zdGFydFRlc3QoKTsKLQkgICAgCi0JICAgIEV4ZWN1dG9yU2VydmljZSBleGVjdXRvciA9IEV4ZWN1dG9ycy5uZXdDYWNoZWRUaHJlYWRQb29sKCk7CisgICAgICAgIHJlbW90ZUFzeW5jID0gKFJlbW90ZUFzeW5jKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9TaW5nbGV0b25CZWFuIik7CisgICAgICAgIHJlbW90ZUFzeW5jLnN0YXJ0VGVzdCgpOwogCi0JICAgIEluY3JlbWVudENvdW50IGljc1tdID0gbmV3IEluY3JlbWVudENvdW50W251bV07Ci0JICAgIGZvcihpbnQgaSA9IDA7IGkgPCBpY3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgRXhlY3V0b3JTZXJ2aWNlIGV4ZWN1dG9yID0gRXhlY3V0b3JzLm5ld0NhY2hlZFRocmVhZFBvb2woKTsKIAotCQlpY3NbaV0gPSBuZXcgSW5jcmVtZW50Q291bnQoKTsKKyAgICAgICAgSW5jcmVtZW50Q291bnQgaWNzW10gPSBuZXcgSW5jcmVtZW50Q291bnRbbnVtXTsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGljcy5sZW5ndGg7IGkrKykgewogCi0JCWV4ZWN1dG9yLmV4ZWN1dGUoIGljc1tpXSApOwotCSAgICB9CisgICAgICAgIGljc1tpXSA9IG5ldyBJbmNyZW1lbnRDb3VudCgpOwogCi0JICAgIGV4ZWN1dG9yLnNodXRkb3duKCk7CisgICAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUoIGljc1tpXSApOworICAgICAgICB9CiAKLQkgICAgZXhlY3V0b3IuYXdhaXRUZXJtaW5hdGlvbigxNSwgVGltZVVuaXQuU0VDT05EUyk7CisgICAgICAgIGV4ZWN1dG9yLnNodXRkb3duKCk7CiAKLQkgICAgaW50IGNvdW50ID0gc2VyaWFsaXplZEJlYW4uZ2V0Q291bnQoKTsKKyAgICAgICAgZXhlY3V0b3IuYXdhaXRUZXJtaW5hdGlvbigxNSwgVGltZVVuaXQuU0VDT05EUyk7CiAKLQkgICAgaWYoIGNvdW50ID09IG51bSApIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJUb3RhbCBjb3VudCBvZiAiICsgY291bnQgKyAiIGludm9jYXRpb25zIGlzIGNvcnJlY3QiKTsKLQkgICAgfSBlbHNlIHsKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiV3JvbmcgY291bnQgdG90YWwgPSAiICsgY291bnQpOwotCSAgICB9CisgICAgICAgIGludCBjb3VudCA9IHNlcmlhbGl6ZWRCZWFuLmdldENvdW50KCk7CiAKLQkgICAgLy8gTm93IHB1dCB0aGUgYmVhbiB0byBzbGVlcCBhbmQgbWFrZSBhIGJsb2NraW5nIDJuZCBjYWxsLiAgVGhlIGZpcnN0IG1ldGhvZAotCSAgICAvLyBpcyBhIEBSZW1vdmUgbWV0aG9kIHNvIHdoZW4gdGhlIGJsb2NraW5nIGNhbGwgYXdha2VzIHdlIHNob3VsZCBnZXQgdGhlCi0JICAgIC8vIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbi4KLQkgICAgc2VyaWFsaXplZEJlYW4uc2xlZXBBbmRSZW1vdmUoMyk7CisgICAgICAgIGlmKCBjb3VudCA9PSBudW0gKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVG90YWwgY291bnQgb2YgIiArIGNvdW50ICsgIiBpbnZvY2F0aW9ucyBpcyBjb3JyZWN0Iik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIldyb25nIGNvdW50IHRvdGFsID0gIiArIGNvdW50KTsKKyAgICAgICAgfQogCi0JICAgIHRyeSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiU2xlZXAgYSBzbWFsbCBhbW91bnQgdG8gbWFrZSBzdXJlIHRoZSBhc3luYyBtZXRob2QiICsKLQkJCQkgICAiaXMgZGlzcGF0Y2hlZCBiZWZvcmUgd2UgbWFrZSB0aGUgbmV4dCBjYWxsLi4uIik7Ci0JCVRocmVhZC5zbGVlcCgxMDApOwotCQlzZXJpYWxpemVkQmVhbi5oZWxsbygpOwotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJEaWQgbm90IHJlY2VpdmUgTm9TdWNoRUpCRXhjZXB0aW9uIik7Ci0JICAgIH0gY2F0Y2goTm9TdWNoRUpCRXhjZXB0aW9uIG5zZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSByZWNlaXZlZCBOb1N1Y2hFSkJFeGNlcHRpb24gZm9yICIgKwotCQkJCSAgICIgY29uY3VycmVudCBhY2Nlc3MgYXR0ZW1wdCBvbiByZW1vdmVkIHNmc2IiKTsKLQkgICAgfQorICAgICAgICAvLyBOb3cgcHV0IHRoZSBiZWFuIHRvIHNsZWVwIGFuZCBtYWtlIGEgYmxvY2tpbmcgMm5kIGNhbGwuICBUaGUgZmlyc3QgbWV0aG9kCisgICAgICAgIC8vIGlzIGEgQFJlbW92ZSBtZXRob2Qgc28gd2hlbiB0aGUgYmxvY2tpbmcgY2FsbCBhd2FrZXMgd2Ugc2hvdWxkIGdldCB0aGUKKyAgICAgICAgLy8gYXBwcm9wcmlhdGUgZXhjZXB0aW9uLgorICAgICAgICBzZXJpYWxpemVkQmVhbi5zbGVlcEFuZFJlbW92ZSgzKTsKKworICAgICAgICB0cnkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwIGEgc21hbGwgYW1vdW50IHRvIG1ha2Ugc3VyZSB0aGUgYXN5bmMgbWV0aG9kIiArCisgICAgICAgICAgICAgICAgICAgImlzIGRpc3BhdGNoZWQgYmVmb3JlIHdlIG1ha2UgdGhlIG5leHQgY2FsbC4uLiIpOworICAgICAgICBUaHJlYWQuc2xlZXAoMTAwKTsKKyAgICAgICAgc2VyaWFsaXplZEJlYW4uaGVsbG8oKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkIG5vdCByZWNlaXZlIE5vU3VjaEVKQkV4Y2VwdGlvbiIpOworICAgICAgICB9IGNhdGNoKE5vU3VjaEVKQkV4Y2VwdGlvbiBuc2UpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgTm9TdWNoRUpCRXhjZXB0aW9uIGZvciAiICsKKyAgICAgICAgICAgICAgICAgICAiIGNvbmN1cnJlbnQgYWNjZXNzIGF0dGVtcHQgb24gcmVtb3ZlZCBzZnNiIik7CisgICAgICAgIH0KIAogCi0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOwogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKIAogICAgICBjbGFzcyBJbmNyZW1lbnRDb3VudCBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JICAgIHNlcmlhbGl6ZWRCZWFuLmluY3JlbWVudENvdW50KDEpOwotCX0KKyAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIHNlcmlhbGl6ZWRCZWFuLmluY3JlbWVudENvdW50KDEpOworICAgIH0KICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2VqYi9SZW1vdGVBc3luYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2ZzYnNjbmMvZWpiL1JlbW90ZUFzeW5jLmphdmEKaW5kZXggOTdhMjRjOC4uYWMzZTg1ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2ZzYnNjbmMvZWpiL1JlbW90ZUFzeW5jLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2ZzYnNjbmMvZWpiL1JlbW90ZUFzeW5jLmphdmEKQEAgLTI0LDYgKzI0LDYgQEAKIAogICAgIHZvaWQgc3RhcnRUZXN0KCk7CiAKLSAgICAKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9lamIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2ZzYnNjbmMvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQppbmRleCBlZjRiNzFmLi4zYTlhMWNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9lamIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTM5LDkgKzM5LDkgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzdGFydFRlc3QoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJpbiBTaW5nbGV0b25CZWFuOjpzdGFydFRlc3QoKSIpOwotCS8vIHJlc2V0IHN0YXRlCi0JcmV0dXJuOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2luZ2xldG9uQmVhbjo6c3RhcnRUZXN0KCkiKTsKKyAgICAvLyByZXNldCBzdGF0ZQorICAgIHJldHVybjsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2ZzYnNjbmMvZWpiL1N0YXRlZnVsQmVhbk5vdFNlcmlhbGl6ZWQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2VqYi9TdGF0ZWZ1bEJlYW5Ob3RTZXJpYWxpemVkLmphdmEKaW5kZXggMzVmNjJkMy4uODRmNTZhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2ZzYnNjbmMvZWpiL1N0YXRlZnVsQmVhbk5vdFNlcmlhbGl6ZWQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9lamIvU3RhdGVmdWxCZWFuTm90U2VyaWFsaXplZC5qYXZhCkBAIC0zOSwzMSArMzksMzEgQEAKIAogICAgIEBBc3luY2hyb25vdXMKICAgICBwdWJsaWMgdm9pZCBzbGVlcChpbnQgc2Vjb25kcykgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuTm90U2VyaWFsaXplZDo6YXN5bmNTbGVlcCIpOwotCXRyeSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2xlZXBpbmcgZm9yICIgKyBzZWNvbmRzICsgIiBzZWNvbmRzLi4uIik7Ci0JICAgIFRocmVhZC5zbGVlcChzZWNvbmRzICogMTAwMCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV29rZSB1cCBmcm9tIHNsZWVwIik7Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbk5vdFNlcmlhbGl6ZWQ6OmFzeW5jU2xlZXAiKTsKKyAgICB0cnkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwaW5nIGZvciAiICsgc2Vjb25kcyArICIgc2Vjb25kcy4uLiIpOworICAgICAgICBUaHJlYWQuc2xlZXAoc2Vjb25kcyAqIDEwMDApOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldva2UgdXAgZnJvbSBzbGVlcCIpOworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKKyAgICB9CiAgICAgfQogCiAgICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW5Ob3RTZXJpYWxpemVkOjpoZWxsbyIpOwotCXJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbk5vdFNlcmlhbGl6ZWQ6OmhlbGxvIik7CisgICAgcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGF0dGVtcHRMb29wYmFjaygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbk5vdFNlcmlhbGl6ZWQ6OmF0dGVtcHRMb29wYmFjayIpOwotCVN0YXRlZnVsQ25jU3VwZXJJbnRmIG1lID0gc2Vzc2lvbkN0eC5nZXRCdXNpbmVzc09iamVjdChTdGF0ZWZ1bENuY0xvY2FsLmNsYXNzKTsKLQl0cnkgewotCSAgICBtZS5oZWxsbygpOwotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTaG91bGQgaGF2ZSByZWNlaXZlZCBjb25jdXJyZW50IGFjY2VzcyBleCIpOwotCX0gY2F0Y2goQ29uY3VycmVudEFjY2Vzc0V4Y2VwdGlvbiBjYWUpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgY29uY3VyZW50IGFjY2VzcyBleGNlcHRpb24iKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW5Ob3RTZXJpYWxpemVkOjphdHRlbXB0TG9vcGJhY2siKTsKKyAgICBTdGF0ZWZ1bENuY1N1cGVySW50ZiBtZSA9IHNlc3Npb25DdHguZ2V0QnVzaW5lc3NPYmplY3QoU3RhdGVmdWxDbmNMb2NhbC5jbGFzcyk7CisgICAgdHJ5IHsKKyAgICAgICAgbWUuaGVsbG8oKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29uY3VycmVudCBhY2Nlc3MgZXgiKTsKKyAgICB9IGNhdGNoKENvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24gY2FlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGNvbmN1cmVudCBhY2Nlc3MgZXhjZXB0aW9uIik7CisgICAgfQogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9lamIvU3RhdGVmdWxCZWFuU2VyaWFsaXplZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2ZzYnNjbmMvZWpiL1N0YXRlZnVsQmVhblNlcmlhbGl6ZWQuamF2YQppbmRleCA4NGY5ZTM4Li5hYmI3NzA1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9lamIvU3RhdGVmdWxCZWFuU2VyaWFsaXplZC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2VqYi9TdGF0ZWZ1bEJlYW5TZXJpYWxpemVkLmphdmEKQEAgLTMyLDE0ICszMiwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGF0dGVtcHRMb29wYmFjaygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhblNlcmlhbGl6ZWQ6OmF0dGVtcHRMb29wYmFjayIpOwotCVN0YXRlZnVsQ25jU3VwZXJJbnRmIG1lID0gc2Vzc2lvbkN0eC5nZXRCdXNpbmVzc09iamVjdChTdGF0ZWZ1bENuY0xvY2FsLmNsYXNzKTsKLQl0cnkgewotCSAgICBtZS5oZWxsbygpOwotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTaG91bGQgaGF2ZSByZWNlaXZlZCBsb29wYmFjayBleCIpOwotCX0gY2F0Y2goSWxsZWdhbExvb3BiYWNrRXhjZXB0aW9uIGlsZSkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSByZWNlaXZlZCBsb29wYmFjayBleGNlcHRpb24iKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW5TZXJpYWxpemVkOjphdHRlbXB0TG9vcGJhY2siKTsKKyAgICBTdGF0ZWZ1bENuY1N1cGVySW50ZiBtZSA9IHNlc3Npb25DdHguZ2V0QnVzaW5lc3NPYmplY3QoU3RhdGVmdWxDbmNMb2NhbC5jbGFzcyk7CisgICAgdHJ5IHsKKyAgICAgICAgbWUuaGVsbG8oKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU2hvdWxkIGhhdmUgcmVjZWl2ZWQgbG9vcGJhY2sgZXgiKTsKKyAgICB9IGNhdGNoKElsbGVnYWxMb29wYmFja0V4Y2VwdGlvbiBpbGUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgbG9vcGJhY2sgZXhjZXB0aW9uIik7CisgICAgfQogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9lamIvU3RhdGVmdWxCZWFuU3VwZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2VqYi9TdGF0ZWZ1bEJlYW5TdXBlci5qYXZhCmluZGV4IDU5YzRmOWYuLjE2NDIwMjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2VqYi9TdGF0ZWZ1bEJlYW5TdXBlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2VqYi9TdGF0ZWZ1bEJlYW5TdXBlci5qYXZhCkBAIC0yOSw2MyArMjksNjMgQEAKIAogICAgIEBBY2Nlc3NUaW1lb3V0KC0xKQogICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuU3VwZXI6OmhlbGxvIik7Ci0JcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuU3VwZXI6OmhlbGxvIik7CisgICAgcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOwogICAgIH0KIAogICAgIEBBY2Nlc3NUaW1lb3V0KHZhbHVlPTEwMCwgdW5pdD1UaW1lVW5pdC5OQU5PU0VDT05EUykKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvV2FpdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhblN1cGVyOjpoZWxsb1dhaXQiKTsKLQlyZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW5TdXBlcjo6aGVsbG9XYWl0Iik7CisgICAgcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOwogICAgIH0KLSAgICAKKwogICAgIEBBc3luY2hyb25vdXMKICAgICBwdWJsaWMgRnV0dXJlPFN0cmluZz4gaGVsbG9Bc3luYygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhblN1cGVyOjpoZWxsb0FzeW5jIik7Ci0JcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KCJoZWxsbyIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuU3VwZXI6OmhlbGxvQXN5bmMiKTsKKyAgICByZXR1cm4gbmV3IEFzeW5jUmVzdWx0PFN0cmluZz4oImhlbGxvIik7CiAgICAgfQogCiAgICAgQEFzeW5jaHJvbm91cwogICAgIHB1YmxpYyB2b2lkIGZpcmVBbmRGb3JnZXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW5TdXBlcjo6ZmlyZUFuZEZvcmdldCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuU3VwZXI6OmZpcmVBbmRGb3JnZXQiKTsKICAgICB9CiAKICAgICBAQXN5bmNocm9ub3VzCiAgICAgcHVibGljIHZvaWQgc2xlZXAoaW50IHNlY29uZHMpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhblN1cGVyOjphc3luY1NsZWVwIik7Ci0JdHJ5IHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTbGVlcGluZyBmb3IgIiArIHNlY29uZHMgKyAiIHNlY29uZHMuLi4iKTsKLQkgICAgVGhyZWFkLnNsZWVwKHNlY29uZHMgKiAxMDAwKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJXb2tlIHVwIGZyb20gc2xlZXAiKTsKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuU3VwZXI6OmFzeW5jU2xlZXAiKTsKKyAgICB0cnkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwaW5nIGZvciAiICsgc2Vjb25kcyArICIgc2Vjb25kcy4uLiIpOworICAgICAgICBUaHJlYWQuc2xlZXAoc2Vjb25kcyAqIDEwMDApOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldva2UgdXAgZnJvbSBzbGVlcCIpOworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKKyAgICB9CiAgICAgfQogCiAgICAgQEFzeW5jaHJvbm91cwogICAgIEBSZW1vdmUKICAgICBwdWJsaWMgdm9pZCBzbGVlcEFuZFJlbW92ZShpbnQgc2Vjb25kcykgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuU3VwZXI6OnNsZWVwQW5kUmVtb3ZlIik7Ci0JdHJ5IHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTbGVlcGluZyBmb3IgIiArIHNlY29uZHMgKyAiIHNlY29uZHMuLi4iKTsKLQkgICAgVGhyZWFkLnNsZWVwKHNlY29uZHMgKiAxMDAwKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJXb2tlIHVwIGZyb20gc2xlZXAuIEkgd2lsbCBub3cgYmUgcmVtb3ZlZC4uLiIpOwotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW5TdXBlcjo6c2xlZXBBbmRSZW1vdmUiKTsKKyAgICB0cnkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwaW5nIGZvciAiICsgc2Vjb25kcyArICIgc2Vjb25kcy4uLiIpOworICAgICAgICBUaHJlYWQuc2xlZXAoc2Vjb25kcyAqIDEwMDApOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldva2UgdXAgZnJvbSBzbGVlcC4gSSB3aWxsIG5vdyBiZSByZW1vdmVkLi4uIik7CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBpbmNyZW1lbnRDb3VudChpbnQgc2Vjb25kcykgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuU3VwZXI6OmluY3JlbWVudENvdW50KCIgKyBzZWNvbmRzICsgIikiKTsKLQkvLyBpbmNyZW1lbnQgY291bnQgYnV0IHdhaXQgYSBiaXQgdG8gdHJ5IGZvcmNlIHNlcmlhbGl6YXRpb24KLQlzbGVlcChzZWNvbmRzKTsKLQljb3VudCsrOwotCVN5c3RlbS5vdXQucHJpbnRsbigiQ291bnQgPSAiICsgY291bnQpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuU3VwZXI6OmluY3JlbWVudENvdW50KCIgKyBzZWNvbmRzICsgIikiKTsKKyAgICAvLyBpbmNyZW1lbnQgY291bnQgYnV0IHdhaXQgYSBiaXQgdG8gdHJ5IGZvcmNlIHNlcmlhbGl6YXRpb24KKyAgICBzbGVlcChzZWNvbmRzKTsKKyAgICBjb3VudCsrOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bnQgPSAiICsgY291bnQpOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0Q291bnQoKSB7Ci0JcmV0dXJuIGNvdW50OworICAgIHJldHVybiBjb3VudDsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9lamIvU3RhdGVmdWxDbmNTdXBlckludGYuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2VqYi9TdGF0ZWZ1bENuY1N1cGVySW50Zi5qYXZhCmluZGV4IGUyNDgyODMuLmFhOTFkNzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2VqYi9TdGF0ZWZ1bENuY1N1cGVySW50Zi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2VqYi9TdGF0ZWZ1bENuY1N1cGVySW50Zi5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpOwogCiAgICAgcHVibGljIFN0cmluZyBoZWxsb1dhaXQoKTsKLSAgCisKICAgICBwdWJsaWMgRnV0dXJlPFN0cmluZz4gaGVsbG9Bc3luYygpOwogCiAgICAgcHVibGljIHZvaWQgZmlyZUFuZEZvcmdldCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvYnVpbGQucHJvcGVydGllcwppbmRleCAwMzI5ODkyLi5kNzkxZmQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZnVsbC13ZWJlamIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlc30vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iJHttb2R1bGV9Ii8+Ci0JCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi9idWlsZC54bWwKaW5kZXggYjg3YzNhNC4uMzliYzE0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0id2FyIi8+CkBAIC00OCw5ICs0OCw5IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0iZmFsc2UiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNTgsOSArNTgsOSBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTcyLDcgKzcyLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGMyOThhNGIuLmMxOGNkZTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKQEAgLTM0LDQ2ICszNCw0NiBAQAogICAgIHByaXZhdGUgU3RyaW5nIHBvcnQ7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7Ci0JYXBwTmFtZSA9IGFyZ3NbMF07Ci0Jc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKLQlDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsgICAgICAgCi0gICAgICAgIGNsaWVudC5kb1Rlc3QoKTsJCisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKKyAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKKyAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7CiAgICAgfQogCiAgICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7Ci0JaG9zdCA9IGFyZ3NbMV07CisgICAgaG9zdCA9IGFyZ3NbMV07CiAgICAgICAgIHBvcnQgPSBhcmdzWzJdOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyAKKyAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICAgICAiLyIgKyBhcHBOYW1lICsgIi9IZWxsb1NlcnZsZXQiOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIHdlYmNsaWVudCBzZXJ2bGV0IGF0ICIgKyB1cmwpOwogCi0JICAgIFVSTCB1ID0gbmV3IFVSTCh1cmwpOwotICAgICAgICAKLQkgICAgSHR0cFVSTENvbm5lY3Rpb24gYzEgPSAoSHR0cFVSTENvbm5lY3Rpb24pdS5vcGVuQ29ubmVjdGlvbigpOwotCSAgICBpbnQgY29kZSA9IGMxLmdldFJlc3BvbnNlQ29kZSgpOwotCSAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7Ci0JICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKLQkgICAgU3RyaW5nIGxpbmUgPSBudWxsOwotCSAgICB3aGlsZSgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpCi0JCVN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKLQkgICAgaWYoY29kZSAhPSAyMDApIHsKLQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluY29ycmVjdCByZXR1cm4gY29kZTogIiArIGNvZGUpOwotCSAgICB9Ci0JICAgIAotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisgICAgICAgIFVSTCB1ID0gbmV3IFVSTCh1cmwpOwogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjMSA9IChIdHRwVVJMQ29ubmVjdGlvbil1Lm9wZW5Db25uZWN0aW9uKCk7CisgICAgICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7CisgICAgICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOworICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CisgICAgICAgIHdoaWxlKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOworICAgICAgICBpZihjb2RlICE9IDIwMCkgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW5jb3JyZWN0IHJldHVybiBjb2RlOiAiICsgY29kZSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi93YXIvSGVsbG9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvd2FyL0hlbGxvU2VydmxldC5qYXZhCmluZGV4IDAzY2RjODcuLjBiOTE3Y2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi93YXIvSGVsbG9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL3dhci9IZWxsb1NlcnZsZXQuamF2YQpAQCAtNDksNjggKzQ5LDY4IEBACiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2VydmxldDo6aW5pdCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojppbml0Iik7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmRvR2V0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmRvR2V0Iik7CiAKLQlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKIAotCXRyeSB7Ci0JICAgIEhlbGxvU3RhdGVmdWwgc2Z1bCA9IChIZWxsb1N0YXRlZnVsKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Y29tcC9lbnYvaGVsbG9TdGF0ZWZ1bCIpOwotCSAgICBzZnVsLmhlbGxvKCk7Ci0JICAgIGhlbGxvLmZvbygpOwotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgSGVsbG9TdGF0ZWZ1bCBzZnVsID0gKEhlbGxvU3RhdGVmdWwpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpjb21wL2Vudi9oZWxsb1N0YXRlZnVsIik7CisgICAgICAgIHNmdWwuaGVsbG8oKTsKKyAgICAgICAgaGVsbG8uZm9vKCk7CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KIAotCVN5c3RlbS5vdXQucHJpbnRsbigiUmVtb3RlIGludGYgYmVhbiBzYXlzICIgKwotCQkJICAgaGVsbG9SZW1vdGUuaGVsbG8oKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZW1vdGUgaW50ZiBiZWFuIHNheXMgIiArCisgICAgICAgICAgICAgICBoZWxsb1JlbW90ZS5oZWxsbygpKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyB0ZXN0Tm9XYWl0LiBUaGlzIG9uZSBzaG91bGQgd29yayBzaW5jZSBpdCdzIG5vdCBhIGNvbmN1cnJlbnQgaW52b2NhdGlvbiIpOwotCXNpbmdsZXRvbi50ZXN0Tm9XYWl0KCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIHRlc3ROb1dhaXQuIFRoaXMgb25lIHNob3VsZCB3b3JrIHNpbmNlIGl0J3Mgbm90IGEgY29uY3VycmVudCBpbnZvY2F0aW9uIik7CisgICAgc2luZ2xldG9uLnRlc3ROb1dhaXQoKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbCBhc3luYyB3YWl0LCB0aGVuIHNsZWVwIGEgYml0IHRvIG1ha2Ugc3VyZSBpdCB0YWtlcyBhZmZlY3QiKTsKLQlzaW5nbGV0b24uYXN5bmNXYWl0KDEpOwotCXRyeSB7Ci0JICAgIC8vIFNsZWVwIGEgYml0IHRvIG1ha2Ugc3VyZSBhc3luYyBjYWxsIHByb2Nlc3NlcyBiZWZvcmUgd2UgcHJvY2VlZAotCSAgICBUaHJlYWQuc2xlZXAoMTAwKTsKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbihlKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsIGFzeW5jIHdhaXQsIHRoZW4gc2xlZXAgYSBiaXQgdG8gbWFrZSBzdXJlIGl0IHRha2VzIGFmZmVjdCIpOworICAgIHNpbmdsZXRvbi5hc3luY1dhaXQoMSk7CisgICAgdHJ5IHsKKyAgICAgICAgLy8gU2xlZXAgYSBiaXQgdG8gbWFrZSBzdXJlIGFzeW5jIGNhbGwgcHJvY2Vzc2VzIGJlZm9yZSB3ZSBwcm9jZWVkCisgICAgICAgIFRocmVhZC5zbGVlcCgxMDApOworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUpOworICAgIH0KIAotCXRyeSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyB0ZXN0Tm9XYWl0Iik7Ci0JICAgIHNpbmdsZXRvbi50ZXN0Tm9XYWl0KCk7Ci0JICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFeHBlY3RlZCBDb25jdXJyZW50QWNjZXNzRXhjZXB0aW9uIik7Ci0JfSBjYXRjaChDb25jdXJyZW50QWNjZXNzVGltZW91dEV4Y2VwdGlvbiBjYXRlKSB7Ci0JICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFeHBlY3RlZCBDb25jdXJyZW50QWNjZXNzRXhjZXB0aW9uIik7Ci0JfSBjYXRjaChDb25jdXJyZW50QWNjZXNzRXhjZXB0aW9uIGNhZSkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCBleGNlcHRpb24gZm9yIGNvbmN1cnJlbnQgYWNjZXNzIG9uIG1ldGhvZCB3aXRoIDAgd2FpdCIpOwotCX0KKyAgICB0cnkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgdGVzdE5vV2FpdCIpOworICAgICAgICBzaW5nbGV0b24udGVzdE5vV2FpdCgpOworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRXhwZWN0ZWQgQ29uY3VycmVudEFjY2Vzc0V4Y2VwdGlvbiIpOworICAgIH0gY2F0Y2goQ29uY3VycmVudEFjY2Vzc1RpbWVvdXRFeGNlcHRpb24gY2F0ZSkgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRXhwZWN0ZWQgQ29uY3VycmVudEFjY2Vzc0V4Y2VwdGlvbiIpOworICAgIH0gY2F0Y2goQ29uY3VycmVudEFjY2Vzc0V4Y2VwdGlvbiBjYWUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgZXhjZXB0aW9uIGZvciBjb25jdXJyZW50IGFjY2VzcyBvbiBtZXRob2Qgd2l0aCAwIHdhaXQiKTsKKyAgICB9CiAKLQlzaW5nbGV0b24ud2FpdCgxMCk7CisgICAgc2luZ2xldG9uLndhaXQoMTApOwogCi0Jc2luZ2xldG9uLnJlZW50cmFudFJlYWRXcml0ZSgpOworICAgIHNpbmdsZXRvbi5yZWVudHJhbnRSZWFkV3JpdGUoKTsKIAotCXNpbmdsZXRvbi5jYWxsU2luZzJXaXRoVHhBbmRSb2xsYmFjaygpOwotCXNpbmdsZXRvbi5oZWxsbygpOworICAgIHNpbmdsZXRvbi5jYWxsU2luZzJXaXRoVHhBbmRSb2xsYmFjaygpOworICAgIHNpbmdsZXRvbi5oZWxsbygpOwogCi0Jc2luZ2xldG9uLnJlYWQoKTsKLQlzaW5nbGV0b24ud3JpdGUoKTsKLQlzaW5nbGV0b24ucmVlbnRyYW50UmVhZFJlYWQoKTsKLQlzaW5nbGV0b24ucmVlbnRyYW50V3JpdGVXcml0ZSgpOwotCXNpbmdsZXRvbi5yZWVudHJhbnRXcml0ZVJlYWQoKTsKKyAgICBzaW5nbGV0b24ucmVhZCgpOworICAgIHNpbmdsZXRvbi53cml0ZSgpOworICAgIHNpbmdsZXRvbi5yZWVudHJhbnRSZWFkUmVhZCgpOworICAgIHNpbmdsZXRvbi5yZWVudHJhbnRXcml0ZVdyaXRlKCk7CisgICAgc2luZ2xldG9uLnJlZW50cmFudFdyaXRlUmVhZCgpOwogCi0gICAgICAgCW91dC5wcmludGxuKCI8SFRNTD4gPEhFQUQ+IDxUSVRMRT4gSk1TIFNlcnZsZXQgT3V0cHV0IDwvVElUTEU+IDwvSEVBRD4gPEJPRFkgQkdDT0xPUj13aGl0ZT4iKTsKKyAgICAgICAgICAgb3V0LnByaW50bG4oIjxIVE1MPiA8SEVBRD4gPFRJVExFPiBKTVMgU2VydmxldCBPdXRwdXQgPC9USVRMRT4gPC9IRUFEPiA8Qk9EWSBCR0NPTE9SPXdoaXRlPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxDRU5URVI+IDxGT05UIHNpemU9KzEgQ09MT1I9Ymx1ZT5EYXRhYmFzZVNlcnZlbHQgOjogQWxsIGluZm9ybWF0aW9uIEkgY2FuIGdpdmUgPC9GT05UPiA8L0NFTlRFUj4gPHA+ICIgKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gQ29udGV4dCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRDb250ZXh0UGF0aCgpICsgIjxicj4iICk7IAotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBTZXJ2bGV0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldFNlcnZsZXRQYXRoKCkgKyAiPGJyPiIgKTsgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBhdGggSW5mbyA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0UGF0aEluZm8oKSArICI8YnI+IiApOyAKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gQ29udGV4dCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRDb250ZXh0UGF0aCgpICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFNlcnZsZXQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0U2VydmxldFBhdGgoKSArICI8YnI+IiApOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBQYXRoIEluZm8gOiAgPC9GT05UPiAiICsgcmVxLmdldFBhdGhJbmZvKCkgKyAiPGJyPiIgKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L0JPRFk+IDwvSFRNTD4gIik7CiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvd2FyL0hlbGxvU2luZ2xldG9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvd2FyL0hlbGxvU2luZ2xldG9uLmphdmEKaW5kZXggMDY4MzcwYy4uMTlkMjJiMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL3dhci9IZWxsb1NpbmdsZXRvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi93YXIvSGVsbG9TaW5nbGV0b24uamF2YQpAQCAtMjYsNyArMjYsNyBAQAogQEFjY2Vzc1RpbWVvdXQodmFsdWU9MTAsIHVuaXQ9VGltZVVuaXQuU0VDT05EUykKIHB1YmxpYyBjbGFzcyBIZWxsb1NpbmdsZXRvbiBleHRlbmRzIFN1cGVyMSAgewogCi0gICAgQEVKQiAKKyAgICBARUpCCiAgICAgSGVsbG8gaGVsbG87CiAKICAgICBARUpCCkBAIC0zNSwxNDYgKzM1LDE0NiBAQAogICAgIEBFSkIKICAgICBwcml2YXRlIEhlbGxvU2luZ2xldG9uMiBzaW5nMjsKIAotICAgIEBSZXNvdXJjZSAKKyAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNlc0N0eDsKLSAgICAKKwogICAgIHByaXZhdGUgSGVsbG9TaW5nbGV0b24gbWU7CiAKLSAgICBAUG9zdENvbnN0cnVjdCAgICAKKyAgICBAUG9zdENvbnN0cnVjdAogICAgIC8vQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TaW5nbGV0b246OmluaXQoKSIpOwotCW1lID0gc2VzQ3R4LmdldEJ1c2luZXNzT2JqZWN0KEhlbGxvU2luZ2xldG9uLmNsYXNzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU2luZ2xldG9uOjppbml0KCkiKTsKKyAgICBtZSA9IHNlc0N0eC5nZXRCdXNpbmVzc09iamVjdChIZWxsb1NpbmdsZXRvbi5jbGFzcyk7CiAKLQlUaW1lclNlcnZpY2UgdHMgPSBzZXNDdHguZ2V0VGltZXJTZXJ2aWNlKCk7Ci0JdHMuY3JlYXRlVGltZXIoMjAwMCwgIiIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCB0aW1lciBpbiBIZWxsb1NpbmdsZXRvbiIpOworICAgIFRpbWVyU2VydmljZSB0cyA9IHNlc0N0eC5nZXRUaW1lclNlcnZpY2UoKTsKKyAgICB0cy5jcmVhdGVUaW1lcigyMDAwLCAiIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIHRpbWVyIGluIEhlbGxvU2luZ2xldG9uIik7CiAKLQlzbHNiLmhlbGxvKCk7CisgICAgc2xzYi5oZWxsbygpOwogCi0Jc2xzYi5oZWxsb0FzeW5jKCk7CisgICAgc2xzYi5oZWxsb0FzeW5jKCk7CiAKLQkvL3Rocm93IG5ldyBFSkJFeGNlcHRpb24oImZvcmNlIFBvc3RDb25zdHJ1Y3QgZmFpbHVyZSIpOworICAgIC8vdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZm9yY2UgUG9zdENvbnN0cnVjdCBmYWlsdXJlIik7CiAgICAgfQogCiAgICAgQFRpbWVvdXQKICAgICBATG9jayhMb2NrVHlwZS5XUklURSkKICAgICBwdWJsaWMgdm9pZCB0aW1lb3V0KFRpbWVyIHQpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2luZ2xldG9uOjp0aW1lb3V0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NpbmdsZXRvbjo6dGltZW91dCIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGNhbGxTaW5nMldpdGhUeEFuZFJvbGxiYWNrKCkgewotCS8vIENhbGwgU2luZ2xldG9uIDIgd2l0aCBhIHRyYW5zYWN0aW9uCi0JLy8gSWYgaXQncyBpbml0aWFsaXplZCBsYXppbHkgYXMgYSBzaWRlLWVmZmVjdCBvZiB0aGlzCi0JLy8gaW52b2NhdGlvbiwgdGhlIGZhY3QgdGhhdCB3ZSByb2xsYmFjayBvdXIgdHJhbnNhY3Rpb24KLQkvLyBzaG91bGQgbm90IGltcGFjdCBhbnkgdHJhbnNhY3Rpb25hbCB3b3JrIHBlcmZvcm1lZCBpbgotCS8vIGl0cyBDTVQvVFhfUkVRVUlSRUQgY29uc3RydWN0b3IuCi0JdHJ5IHsKLQkgICAgLy8gRXhlY3V0ZXMgaW4gaXRzIG93biB0cmFuc2FjdGlvbiBidXQgdGhyb3dzIGEgcnVudGltZSBleGNlcHRpb24uCi0JICAgIHNpbmcyLmhlbGxvMSgpOwotCX0gY2F0Y2goRUpCRXhjZXB0aW9uIGUpIHsKLQkgICAgLy8gQ2F0Y2ggdGhlIHJ1bnRpbWUgZXhjZXB0aW9uIHNvIGl0IGRvZXNuJ3QgYWZmZWN0IHRoZSBjbGllbnQKLQkgICAgLy8gdHggKHlldCkKLQl9CisgICAgLy8gQ2FsbCBTaW5nbGV0b24gMiB3aXRoIGEgdHJhbnNhY3Rpb24KKyAgICAvLyBJZiBpdCdzIGluaXRpYWxpemVkIGxhemlseSBhcyBhIHNpZGUtZWZmZWN0IG9mIHRoaXMKKyAgICAvLyBpbnZvY2F0aW9uLCB0aGUgZmFjdCB0aGF0IHdlIHJvbGxiYWNrIG91ciB0cmFuc2FjdGlvbgorICAgIC8vIHNob3VsZCBub3QgaW1wYWN0IGFueSB0cmFuc2FjdGlvbmFsIHdvcmsgcGVyZm9ybWVkIGluCisgICAgLy8gaXRzIENNVC9UWF9SRVFVSVJFRCBjb25zdHJ1Y3Rvci4KKyAgICB0cnkgeworICAgICAgICAvLyBFeGVjdXRlcyBpbiBpdHMgb3duIHRyYW5zYWN0aW9uIGJ1dCB0aHJvd3MgYSBydW50aW1lIGV4Y2VwdGlvbi4KKyAgICAgICAgc2luZzIuaGVsbG8xKCk7CisgICAgfSBjYXRjaChFSkJFeGNlcHRpb24gZSkgeworICAgICAgICAvLyBDYXRjaCB0aGUgcnVudGltZSBleGNlcHRpb24gc28gaXQgZG9lc24ndCBhZmZlY3QgdGhlIGNsaWVudAorICAgICAgICAvLyB0eCAoeWV0KQorICAgIH0KIAotCS8vIE1ha2Ugc3VyZSB3ZSBjYW4gc3RpbGwgY2FsbCB0aGUgc2luZ2xldG9uIGFmdGVyIGEKLQkvLyBydW50aW1lIGV4Y2VwdGlvbgotCXNpbmcyLmhlbGxvMigpOworICAgIC8vIE1ha2Ugc3VyZSB3ZSBjYW4gc3RpbGwgY2FsbCB0aGUgc2luZ2xldG9uIGFmdGVyIGEKKyAgICAvLyBydW50aW1lIGV4Y2VwdGlvbgorICAgIHNpbmcyLmhlbGxvMigpOwogCi0Jc2VzQ3R4LnNldFJvbGxiYWNrT25seSgpOworICAgIHNlc0N0eC5zZXRSb2xsYmFja09ubHkoKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiRXhpdGluZyBIZWxsb1NpbmdsZXRvbjo6Y2FsbFNpbmcyV2l0aFR4QW5kUm9sbGJhY2siKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4aXRpbmcgSGVsbG9TaW5nbGV0b246OmNhbGxTaW5nMldpdGhUeEFuZFJvbGxiYWNrIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgd2FpdChpbnQgc2Vjb25kcykgewotCXRyeSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TaW5nbGV0b246OndhaXQuIFNsZWVwaW5nIHdpdGggbG9jay4uLiIpOwotCSAgICBUaHJlYWQuc2xlZXAoc2Vjb25kcyAqIDEwMDApOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF3YWtlIGluIEhlbGxvU2luZ2xldG9uOjp3YWl0LiBSZWxlYXNpbmcgbG9jay4uLiIpOwotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKGUpOwotCX0KKyAgICB0cnkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2luZ2xldG9uOjp3YWl0LiBTbGVlcGluZyB3aXRoIGxvY2suLi4iKTsKKyAgICAgICAgVGhyZWFkLnNsZWVwKHNlY29uZHMgKiAxMDAwKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBd2FrZSBpbiBIZWxsb1NpbmdsZXRvbjo6d2FpdC4gUmVsZWFzaW5nIGxvY2suLi4iKTsKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlKTsKKyAgICB9CiAgICAgfQogCiAgICAgQEFzeW5jaHJvbm91cwogICAgIHB1YmxpYyB2b2lkIGFzeW5jV2FpdChpbnQgc2Vjb25kcykgewotCW1lLndhaXQoc2Vjb25kcyk7CisgICAgbWUud2FpdChzZWNvbmRzKTsKICAgICB9CiAKICAgICBAQWNjZXNzVGltZW91dCh2YWx1ZT01LCB1bml0PVRpbWVVbml0Lk1JTExJU0VDT05EUykKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewotCQotCVN5c3RlbS5vdXQucHJpbnRsbigiZ2V0IGludm9rZWQgaW50ZXJmYWNlID0gIiArIAotCQkJICAgc2VzQ3R4LmdldEludm9rZWRCdXNpbmVzc0ludGVyZmFjZSgpKTsKIAotCUhlbGxvU3RhdGVmdWwgc2Z1bCA9IChIZWxsb1N0YXRlZnVsKSBzZXNDdHgubG9va3VwKCJoZWxsb1N0YXRlZnVsIik7Ci0Jc2Z1bC5oZWxsbygpOwotCWhlbGxvLmZvbygpOwotCXNmdWwuZ29vZGJ5ZSgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0IGludm9rZWQgaW50ZXJmYWNlID0gIiArCisgICAgICAgICAgICAgICBzZXNDdHguZ2V0SW52b2tlZEJ1c2luZXNzSW50ZXJmYWNlKCkpOwogCi0JcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOworICAgIEhlbGxvU3RhdGVmdWwgc2Z1bCA9IChIZWxsb1N0YXRlZnVsKSBzZXNDdHgubG9va3VwKCJoZWxsb1N0YXRlZnVsIik7CisgICAgc2Z1bC5oZWxsbygpOworICAgIGhlbGxvLmZvbygpOworICAgIHNmdWwuZ29vZGJ5ZSgpOworCisgICAgcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOwogICAgIH0KIAogICAgIEBMb2NrKExvY2tUeXBlLlJFQUQpCiAgICAgcHVibGljIHZvaWQgcmVhZCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2luZ2xldG9uOjpyZWFkKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2luZ2xldG9uOjpyZWFkKCkiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB3cml0ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2luZ2xldG9uOjp3cml0ZSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NpbmdsZXRvbjo6d3JpdGUoKSIpOwogICAgIH0KIAogICAgIEBMb2NrKExvY2tUeXBlLlJFQUQpCiAgICAgcHVibGljIHZvaWQgcmVlbnRyYW50UmVhZFJlYWQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NpbmdsZXRvbjo6UmVlbnRyYW50UmVhZFJlYWQoKSIpOwotCW1lLnJlYWQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2luZ2xldG9uOjpSZWVudHJhbnRSZWFkUmVhZCgpIik7CisgICAgbWUucmVhZCgpOwogICAgIH0KIAogICAgIEBMb2NrKExvY2tUeXBlLlJFQUQpCiAgICAgcHVibGljIHZvaWQgcmVlbnRyYW50UmVhZFdyaXRlKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TaW5nbGV0b246OlJlZW50cmFudFJlYWRXcml0ZSgpIik7Ci0JdHJ5IHsKLQkgICAgbWUud3JpdGUoKTsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRXhwZWN0ZWQgaWxsZWdhbCBsb29wYmFjayBleGNlcHRpb24iKTsKLQl9IGNhdGNoKElsbGVnYWxMb29wYmFja0V4Y2VwdGlvbiBpbGUpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1c2VkIGlsbGVnYWwgbG9vcGJhY2siKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NpbmdsZXRvbjo6UmVlbnRyYW50UmVhZFdyaXRlKCkiKTsKKyAgICB0cnkgeworICAgICAgICBtZS53cml0ZSgpOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJFeHBlY3RlZCBpbGxlZ2FsIGxvb3BiYWNrIGV4Y2VwdGlvbiIpOworICAgIH0gY2F0Y2goSWxsZWdhbExvb3BiYWNrRXhjZXB0aW9uIGlsZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVzZWQgaWxsZWdhbCBsb29wYmFjayIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCByZWVudHJhbnRXcml0ZVJlYWQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NpbmdsZXRvbjo6UmVlbnRyYW50V3JpdGVSZWFkKCkiKTsKLQltZS5yZWFkKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NpbmdsZXRvbjo6UmVlbnRyYW50V3JpdGVSZWFkKCkiKTsKKyAgICBtZS5yZWFkKCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcmVlbnRyYW50V3JpdGVXcml0ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2luZ2xldG9uOjpSZWVudHJhbnRXcml0ZVdyaXRlKCkiKTsKLQltZS53cml0ZSgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TaW5nbGV0b246OlJlZW50cmFudFdyaXRlV3JpdGUoKSIpOworICAgIG1lLndyaXRlKCk7CiAgICAgfQogCiAgICAgQEFjY2Vzc1RpbWVvdXQoMCkKICAgICBwdWJsaWMgdm9pZCB0ZXN0Tm9XYWl0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TaW5nbGV0b246OnRlc3ROb1dhaXQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2luZ2xldG9uOjp0ZXN0Tm9XYWl0Iik7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1NpbmdsZXRvbjo6ZGVzdHJveSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1NpbmdsZXRvbjo6ZGVzdHJveSgpIik7CiAgICAgfQogCiB9CiAKIAogCi0gCisKIC8qCiAgICAgQExvY2soTG9ja1R5cGUuV1JJVEUpCiAgIGNsYXNzIFN1cGVyMiB7CiAKLQlATG9jayhMb2NrVHlwZS5SRUFEKQotCXB1YmxpYyB2b2lkIHN1cGVyMigpIHt9CisgICAgQExvY2soTG9ja1R5cGUuUkVBRCkKKyAgICBwdWJsaWMgdm9pZCBzdXBlcjIoKSB7fQogCi0JcHVibGljIHZvaWQgc3VwZXIyMigpIHt9CisgICAgcHVibGljIHZvaWQgc3VwZXIyMigpIHt9CiAKICAgICB9CiAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL3dhci9IZWxsb1NpbmdsZXRvbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi93YXIvSGVsbG9TaW5nbGV0b24yLmphdmEKaW5kZXggMTdhZjk0Zi4uMDU5MzFiZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL3dhci9IZWxsb1NpbmdsZXRvbjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvd2FyL0hlbGxvU2luZ2xldG9uMi5qYXZhCkBAIC0yOCw1MSArMjgsNTEgQEAKICAgICAvL0BSZXNvdXJjZQogICAgIC8vICAgIHByaXZhdGUgVXNlclRyYW5zYWN0aW9uIHV0OwogCi0gICAgQFJlc291cmNlIAorICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2VzQ3R4OwogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TaW5nbGV0b24yOjppbml0KCkiKTsKLQlVc2VyVHJhbnNhY3Rpb24gdXQgPSBzZXNDdHguZ2V0VXNlclRyYW5zYWN0aW9uKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NpbmdsZXRvbjI6OmluaXQoKSIpOworICAgIFVzZXJUcmFuc2FjdGlvbiB1dCA9IHNlc0N0eC5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKICAgICAgICAgdHJ5IHsKLQkgICB1dC5iZWdpbigpOwotCSAgIFRpbWVyU2VydmljZSB0cyA9IHNlc0N0eC5nZXRUaW1lclNlcnZpY2UoKTsKLQkgICB0cy5jcmVhdGVUaW1lcigyMDAwLCAiIik7Ci0JICAgdXQuY29tbWl0KCk7CisgICAgICAgdXQuYmVnaW4oKTsKKyAgICAgICBUaW1lclNlcnZpY2UgdHMgPSBzZXNDdHguZ2V0VGltZXJTZXJ2aWNlKCk7CisgICAgICAgdHMuY3JlYXRlVGltZXIoMjAwMCwgIiIpOworICAgICAgIHV0LmNvbW1pdCgpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHRyeSB7Ci0JCXV0LnJvbGxiYWNrKCk7Ci0JICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUxKSB7IGUxLnByaW50U3RhY2tUcmFjZSgpOyB9Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0gCi0JLy90aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJIZWxsb1NpbmdsZXRvbjIgOjogZm9yY2UgaW5pdCBmYWlsdXJlIik7CisgICAgICAgIHRyeSB7CisgICAgICAgIHV0LnJvbGxiYWNrKCk7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUxKSB7IGUxLnByaW50U3RhY2tUcmFjZSgpOyB9CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICAvL3Rocm93IG5ldyBFSkJFeGNlcHRpb24oIkhlbGxvU2luZ2xldG9uMiA6OiBmb3JjZSBpbml0IGZhaWx1cmUiKTsKICAgICB9CiAKLSAgICBAUHJlRGVzdHJveSAKKyAgICBAUHJlRGVzdHJveQogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NpbmdsZXRvbjI6OmRlc3Ryb3kiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2luZ2xldG9uMjo6ZGVzdHJveSIpOwogICAgIH0KIAotICAgIEBUaW1lb3V0IAorICAgIEBUaW1lb3V0CiAgICAgcHVibGljIHZvaWQgdGltZW91dChUaW1lciB0KSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NpbmdsZXRvbjI6OnRpbWVvdXQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2luZ2xldG9uMjo6dGltZW91dCIpOwogICAgIH0KIAogICAgIC8vQFNjaGVkdWxlKHNlY29uZD0iMTUiLCBtaW51dGU9IioiLCBwZXJzaXN0ZW50PWZhbHNlKQogICAgIHB1YmxpYyB2b2lkIHJlZnJlc2goKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NpbmdsZXRvbjI6cmVmcmVzaCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NpbmdsZXRvbjI6cmVmcmVzaCgpIik7CiAKICAgICB9CiAKICAgICAvL0BUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuUkVRVUlSRVNfTkVXKQogICAgIHB1YmxpYyB2b2lkIGhlbGxvMSgpIHsKLQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJIZWxsb1NpbmdsZXRvbjI6OmhlbGxvMSAtLSBmb3JjZSBidXNpbmVzcyBtZXRob2QgcnVudGltZSBleGNlcHRpb24iKTsKLQkvL1N5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TaW5nbGV0b24yOmhlbGxvMSgpIik7CisgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiSGVsbG9TaW5nbGV0b24yOjpoZWxsbzEgLS0gZm9yY2UgYnVzaW5lc3MgbWV0aG9kIHJ1bnRpbWUgZXhjZXB0aW9uIik7CisgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2luZ2xldG9uMjpoZWxsbzEoKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvMigpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2luZ2xldG9uMjpoZWxsbzIoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TaW5nbGV0b24yOmhlbGxvMigpIik7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvd2FyL0hlbGxvU3RhdGVmdWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi93YXIvSGVsbG9TdGF0ZWZ1bC5qYXZhCmluZGV4IGQ5MDhkMTQuLjAxZWU5ZmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi93YXIvSGVsbG9TdGF0ZWZ1bC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi93YXIvSGVsbG9TdGF0ZWZ1bC5qYXZhCkBAIC0zNiwyNiArMzYsMjYgQEAKICAgICAvLyBpbnZhbGlkICAgIEBFSkIgamF2YS51dGlsLk9ic2VydmFibGUgc2YyMjsKIAogCi0gICAgQFBvc3RDb25zdHJ1Y3QgCisgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU3RhdGVmdWw6OmluaXQoKSIpOwotICAgICAgIAltZSA9IHNlc0N0eC5nZXRCdXNpbmVzc09iamVjdChIZWxsb1N0YXRlZnVsLmNsYXNzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU3RhdGVmdWw6OmluaXQoKSIpOworICAgICAgICAgICBtZSA9IHNlc0N0eC5nZXRCdXNpbmVzc09iamVjdChIZWxsb1N0YXRlZnVsLmNsYXNzKTsKICAgICB9CiAKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLlJFUVVJUkVTX05FVykKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewotCQotCVN5c3RlbS5vdXQucHJpbnRsbigiZ2V0IGludm9rZWQgaW50ZXJmYWNlID0gIiArIAotCQkgICAgIAlzZXNDdHguZ2V0SW52b2tlZEJ1c2luZXNzSW50ZXJmYWNlKCkgKTsKLQkKLQlzZjIuaGVsbG8oKTsKLQlzZjIuZ29vZGJ5ZSgpOwogCi0JcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0IGludm9rZWQgaW50ZXJmYWNlID0gIiArCisgICAgICAgICAgICAgICAgIHNlc0N0eC5nZXRJbnZva2VkQnVzaW5lc3NJbnRlcmZhY2UoKSApOworCisgICAgc2YyLmhlbGxvKCk7CisgICAgc2YyLmdvb2RieWUoKTsKKworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBmb28oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlZnVsOjpmb28iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVmdWw6OmZvbyIpOwogICAgIH0KIAogICAgIEBSZW1vdmUKQEAgLTYzLDIzICs2MywyMyBAQAogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU3RhdGVmdWw6OmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TdGF0ZWZ1bDo6ZGVzdHJveSgpIik7CiAgICAgfQogCiAgICAgQEFmdGVyQmVnaW4KLQlwcml2YXRlIHZvaWQgYWZ0ZXJCZWdpbigpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVmdWw6OmFmdGVyQmVnaW4oKSIpOworICAgIHByaXZhdGUgdm9pZCBhZnRlckJlZ2luKCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TdGF0ZWZ1bDo6YWZ0ZXJCZWdpbigpIik7CiAgICAgfQogCiAgICAgQEJlZm9yZUNvbXBsZXRpb24KLQlwcm90ZWN0ZWQgdm9pZCBiZWZvcmVDb21wbGV0aW9uKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TdGF0ZWZ1bDo6YmVmb3JlQ29tcGxldGlvbigpIik7CisgICAgcHJvdGVjdGVkIHZvaWQgYmVmb3JlQ29tcGxldGlvbigpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVmdWw6OmJlZm9yZUNvbXBsZXRpb24oKSIpOwogICAgIH0KIAogICAgIEBBZnRlckNvbXBsZXRpb24KICAgICB2b2lkIGFmdGVyQ29tcGxldGlvbihib29sZWFuIGNvbW1pdHRlZCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TdGF0ZWZ1bDo6YWZ0ZXJDb21wbGV0aW9uKCkuIENvbW1pdHRlZCA9ICIgKwotCQkJICAgY29tbWl0dGVkKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVmdWw6OmFmdGVyQ29tcGxldGlvbigpLiBDb21taXR0ZWQgPSAiICsKKyAgICAgICAgICAgICAgIGNvbW1pdHRlZCk7CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi93YXIvSGVsbG9TdGF0ZWZ1bDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi93YXIvSGVsbG9TdGF0ZWZ1bDIuamF2YQppbmRleCBiZWQyMTk0Li43YTE4ZTY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvd2FyL0hlbGxvU3RhdGVmdWwyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL3dhci9IZWxsb1N0YXRlZnVsMi5qYXZhCkBAIC0yMywxNCArMjMsMTQgQEAKIEBMb2NhbEJlYW4KIHB1YmxpYyBjbGFzcyBIZWxsb1N0YXRlZnVsMiBpbXBsZW1lbnRzIGphdmEudXRpbC5PYnNlcnZlciB7CiAKLSAgICBAUG9zdENvbnN0cnVjdCAKKyAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TdGF0ZWZ1bDI6OmluaXQoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TdGF0ZWZ1bDI6OmluaXQoKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlZnVsMjo6aGVsbG8oKSIpOwkKLQlyZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlZnVsMjo6aGVsbG8oKSIpOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKICAgICB9CiAKIApAQCAtMzksMTIgKzM5LDEyIEBACiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TdGF0ZWZ1bDI6OmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TdGF0ZWZ1bDI6OmRlc3Ryb3koKSIpOwogICAgIH0KIAogICAgIC8vIG5vdCBwYXJ0IG9mIHB1YmxpYyBpbnRlcmZhY2UKICAgICBwdWJsaWMgdm9pZCB1cGRhdGUoamF2YS51dGlsLk9ic2VydmFibGUgbywgT2JqZWN0IGEpIHsKLQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJzaG91bGRuJ3QgYmUgaW52b2tlZCBieSBjbGllbnQiKTsKKyAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJzaG91bGRuJ3QgYmUgaW52b2tlZCBieSBjbGllbnQiKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi93YXIvSGVsbG9TdGF0ZWxlc3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi93YXIvSGVsbG9TdGF0ZWxlc3MuamF2YQppbmRleCA4NzE4OTgxLi40NGNlNDlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvd2FyL0hlbGxvU3RhdGVsZXNzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL3dhci9IZWxsb1N0YXRlbGVzcy5qYXZhCkBAIC0yMywyNCArMjMsMjQgQEAKIEBMb2NhbEJlYW4KIHB1YmxpYyBjbGFzcyBIZWxsb1N0YXRlbGVzcyBpbXBsZW1lbnRzIEhlbGxvUmVtb3RlIHsKIAotICAgIEBQb3N0Q29uc3RydWN0IAorICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1N0YXRlbGVzczo6aW5pdCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1N0YXRlbGVzczo6aW5pdCgpIik7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVsZXNzOjpoZWxsbygpIik7CQotCXJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVsZXNzOjpoZWxsbygpIik7CisgICAgcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOwogICAgIH0KIAogICAgIEBBc3luY2hyb25vdXMKICAgICBwdWJsaWMgdm9pZCBoZWxsb0FzeW5jKCkgewotICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVsZXNzOjpoZWxsb0FzeW5jKCkiKTsJICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVsZXNzOjpoZWxsb0FzeW5jKCkiKTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TdGF0ZWxlc3M6OmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TdGF0ZWxlc3M6OmRlc3Ryb3koKSIpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL3dhci9TdXBlcjEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi93YXIvU3VwZXIxLmphdmEKaW5kZXggMDRmMTBiZC4uNWFiMzc5ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL3dhci9TdXBlcjEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvd2FyL1N1cGVyMS5qYXZhCkBAIC0yNCwxNSArMjQsMTUgQEAKIEBMb2NrKExvY2tUeXBlLlJFQUQpCiBwdWJsaWMgICBjbGFzcyBTdXBlcjEgLypleHRlbmRzIFN1cGVyMiovIHsKIAotCXB1YmxpYyB2b2lkIHN1cGVyMSgpIHt9CisgICAgcHVibGljIHZvaWQgc3VwZXIxKCkge30KIAotCUBMb2NrKExvY2tUeXBlLldSSVRFKQotCXB1YmxpYyB2b2lkIHN1cGVyMTEoKSB7fQorICAgIEBMb2NrKExvY2tUeXBlLldSSVRFKQorICAgIHB1YmxpYyB2b2lkIHN1cGVyMTEoKSB7fQogCiAgICAgICAgIEBBY2Nlc3NUaW1lb3V0KHZhbHVlPTQ0NTQ0LCB1bml0PVRpbWVVbml0LkhPVVJTKQotCXByaXZhdGUgdm9pZCBmb29iYXIoKSB7fQorICAgIHByaXZhdGUgdm9pZCBmb29iYXIoKSB7fQogCiAgICAgICAgIEBBY2Nlc3NUaW1lb3V0KHZhbHVlPTQ0NTQ0LCB1bml0PVRpbWVVbml0LkhPVVJTKQotCSAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgeyByZXR1cm4gIiI7IH0KKyAgICAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsgcmV0dXJuICIiOyB9CiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L2J1aWxkLnhtbAppbmRleCBkMDFhMzkwLi5mZDY3ODM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9idWlsZC54bWwKQEAgLTM5LDkgKzM5LDkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWVqYjMxLXNlY3VyaXR5IHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamIzMS1zZWN1cml0eSB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzU0NDg4Zi4uMDIxYWNjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L3NpbXBsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtc2VjdXJpdHktc2ltcGxlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKICAgICAgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiAKIAotCQorCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L3NpbXBsZS9idWlsZC54bWwKaW5kZXggNTU4ZTNkMi4uYmNjNTBlYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L3NpbXBsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L3NpbXBsZS9idWlsZC54bWwKQEAgLTM1LDEzICszNSwxMyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGphdmFjIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBzcmNkaXI9ImNsaWVudCIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGRlYnVnPSJvbiIgZmFpbG9uZXJyb3I9InRydWUiPgotCSAKKyAgICA8amF2YWMgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIHNyY2Rpcj0iY2xpZW50IiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZGVidWc9Im9uIiBmYWlsb25lcnJvcj0idHJ1ZSI+CisKICAgICAgICAgPC9qYXZhYz4KICAgICA8L3RhcmdldD4KIApAQCAtNjksMTUgKzY5LDE1IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCi0JCSAgIHZhbHVlPSIqKi9TaW5nbGV0b24qLmNsYXNzLCoqL0hlbGxvKi5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKKyAgICAgICAgICAgdmFsdWU9IioqL1NpbmdsZXRvbiouY2xhc3MsKiovSGVsbG8qLmNsYXNzIi8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovRm9vTWFuYWdlZEJlYW4qLmNsYXNzLCoqL0hlbGxvKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtODUsNyArODUsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJydW5fYm9iIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KLQkgICAgPGVudiBrZXk9IkFQUENQQVRIIiBmaWxlPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIvPgorICAgICAgICA8ZW52IGtleT0iQVBQQ1BBVEgiIGZpbGU9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIi8+CiAKICAgICAgICAgICAgIDxhcmcgbGluZT0iLWNsaWVudAogICAgICAgICAgICAgICAgICAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KQEAgLTEwMCw3ICsxMDAsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJydW5fbWFyeSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iIGZhaWxvbmVycm9yPSJmYWxzZSI+Ci0JICAgIDxlbnYga2V5PSJBUFBDUEFUSCIgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KKyAgICAgICAgPGVudiBrZXk9IkFQUENQQVRIIiBmaWxlPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIvPgogCiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii1jbGllbnQKICAgICAgICAgICAgICAgICAgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+CkBAIC0xMTIsOSArMTEyLDkgQEAKICAgICAgICAgPC9leGVjPgogCiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTEyNiw3ICsxMjYsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDk5MzIwYzAuLjU3NDVhYjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwpAQCAtNTQsMTkgKzU0LDE5IEBACiAgICAgc3RhdGljIFN0cmluZyBhcHBOYW1lTDsKIAogCi0gICAgQEVKQihsb29rdXA9ImphdmE6YXBwL2Vudi9mb3JhcHBjbGllbnQiKSAKKyAgICBARUpCKGxvb2t1cD0iamF2YTphcHAvZW52L2ZvcmFwcGNsaWVudCIpCiAgICAgc3RhdGljIEhlbGxvIGhlbGxvMzsKIAotICAgIEBFSkIobWFwcGVkTmFtZT0iamF2YTphcHAvZWpiLWVqYjMxLXNlY3VyaXR5LXNpbXBsZS1lamIvU2luZ2xldG9uQmVhbiFjb20uYWNtZS5IZWxsbyIpIAorICAgIEBFSkIobWFwcGVkTmFtZT0iamF2YTphcHAvZWpiLWVqYjMxLXNlY3VyaXR5LXNpbXBsZS1lamIvU2luZ2xldG9uQmVhbiFjb20uYWNtZS5IZWxsbyIpCiAgICAgc3RhdGljIEhlbGxvIGhlbGxvNDsKIAotICAgIEBFSkIobmFtZT0iamF2YTphcHAvZW52L2FwcGNsaWVudGRlZmluZWRlamJyZWYxIikgCisgICAgQEVKQihuYW1lPSJqYXZhOmFwcC9lbnYvYXBwY2xpZW50ZGVmaW5lZGVqYnJlZjEiKQogICAgIHN0YXRpYyBIZWxsbyBoZWxsbzU7CiAKLSAgICBARUpCKG5hbWU9ImphdmE6YXBwL2FwcGNsaWVudGRlZmluZWRlamJyZWYyIikgCisgICAgQEVKQihuYW1lPSJqYXZhOmFwcC9hcHBjbGllbnRkZWZpbmVkZWpicmVmMiIpCiAgICAgc3RhdGljIEhlbGxvIGhlbGxvNjsKIAotICAgIEBFSkIobmFtZT0iamF2YTpnbG9iYWwvYXBwY2xpZW50ZGVmaW5lZGVqYnJlZjMiKSAKKyAgICBARUpCKG5hbWU9ImphdmE6Z2xvYmFsL2FwcGNsaWVudGRlZmluZWRlamJyZWYzIikKICAgICBzdGF0aWMgSGVsbG8gaGVsbG83OwogCiAgICAgQFJlc291cmNlKG5hbWU9ImphdmE6YXBwL2Vudi9lbnZlbnRyeTEiKQpAQCAtODUsNTQgKzg1LDU0IEBACiAKICBAUG9zdENvbnN0cnVjdAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBpbml0KCkgewotCXRyeSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gaW5pdCgpIik7CisgICAgdHJ5IHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBpbml0KCkiKTsKIAotCSAgICBhcHBDbGllbnQgPSB0cnVlOworICAgICAgICBhcHBDbGllbnQgPSB0cnVlOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXBwTmFtZSA9ICIgKyBhcHBOYW1lTCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTW9kdWxlTmFtZSA9ICIgKyBtb2R1bGVOYW1lKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBcHBOYW1lID0gIiArIGFwcE5hbWVMKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNb2R1bGVOYW1lID0gIiArIG1vZHVsZU5hbWUpOwogCi0JICAgIGZvb01iLmhlbGxvKCk7Ci0JICAgIGZvb01iMi5oZWxsbygpOwotCSAgICBmb29NYjMuaGVsbG8oKTsKKyAgICAgICAgZm9vTWIuaGVsbG8oKTsKKyAgICAgICAgZm9vTWIyLmhlbGxvKCk7CisgICAgICAgIGZvb01iMy5oZWxsbygpOwogCi0JICAgIEludGVnZXIgZW52RW50cnkgPSAoSW50ZWdlcikKLQkJbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmFwcC9lbnYvdmFsdWUxIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiamF2YTphcHAvZW52L3ZhbHVlMSA9ICIgKyBlbnZFbnRyeSk7Ci0JCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiamF2YTphcHAvZW52L2VudmVudHJ5MSA9ICIgKyBlbnZFbnRyeTEpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImphdmE6Z2xvYmFsL2VudmVudHJ5MiA9ICIgKyBlbnZFbnRyeTIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImphdmE6Z2xvYmFsL2VudmVudHJ5MyA9ICIgKyBlbnZFbnRyeTMpOwotCSAgICBpZiggKGVudkVudHJ5MyA9PSBudWxsKSB8fCBlbnZFbnRyeTMuaW50VmFsdWUoKSAhPSAxODMzOCApIHsKLQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImludmFsaWQgZW52ZW50cnkzIHZhbHVlIik7Ci0JICAgIH0KLQkgICAgCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiamF2YTpnbG9iYWwvZW52ZW50cnk0ID0gIiArIGVudkVudHJ5NCk7Ci0JICAgIGlmKCAoZW52RW50cnk0ID09IG51bGwpIHx8IGVudkVudHJ5NC5pbnRWYWx1ZSgpICE9IDE4MzM4ICkgewotCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiaW52YWxpZCBlbnZlbnRyeTQgdmFsdWUiKTsKLQkgICAgfQorICAgICAgICBJbnRlZ2VyIGVudkVudHJ5ID0gKEludGVnZXIpCisgICAgICAgIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTphcHAvZW52L3ZhbHVlMSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImphdmE6YXBwL2Vudi92YWx1ZTEgPSAiICsgZW52RW50cnkpOwogCi0JICAgIEZvb01hbmFnZWRCZWFuIGZtYmwgPSAoRm9vTWFuYWdlZEJlYW4pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTptb2R1bGUvRm9vTWFuYWdlZEJlYW4iKTsKLQkgICAgZm1ibC5oZWxsbygpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImphdmE6YXBwL2Vudi9lbnZlbnRyeTEgPSAiICsgZW52RW50cnkxKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJqYXZhOmdsb2JhbC9lbnZlbnRyeTIgPSAiICsgZW52RW50cnkyKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJqYXZhOmdsb2JhbC9lbnZlbnRyeTMgPSAiICsgZW52RW50cnkzKTsKKyAgICAgICAgaWYoIChlbnZFbnRyeTMgPT0gbnVsbCkgfHwgZW52RW50cnkzLmludFZhbHVlKCkgIT0gMTgzMzggKSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJpbnZhbGlkIGVudmVudHJ5MyB2YWx1ZSIpOworICAgICAgICB9CiAKLQkgICAgIEZvb01hbmFnZWRCZWFuIGZtYmwyID0gKEZvb01hbmFnZWRCZWFuKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1zZWN1cml0eS1zaW1wbGUtY2xpZW50L0Zvb01hbmFnZWRCZWFuIik7Ci0JICAgIGZtYmwyLmhlbGxvKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiamF2YTpnbG9iYWwvZW52ZW50cnk0ID0gIiArIGVudkVudHJ5NCk7CisgICAgICAgIGlmKCAoZW52RW50cnk0ID09IG51bGwpIHx8IGVudkVudHJ5NC5pbnRWYWx1ZSgpICE9IDE4MzM4ICkgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiaW52YWxpZCBlbnZlbnRyeTQgdmFsdWUiKTsKKyAgICAgICAgfQogCi0JfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLQl9CisgICAgICAgIEZvb01hbmFnZWRCZWFuIGZtYmwgPSAoRm9vTWFuYWdlZEJlYW4pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTptb2R1bGUvRm9vTWFuYWdlZEJlYW4iKTsKKyAgICAgICAgZm1ibC5oZWxsbygpOworCisgICAgICAgICBGb29NYW5hZ2VkQmVhbiBmbWJsMiA9IChGb29NYW5hZ2VkQmVhbikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmFwcC9lamItZWpiMzEtc2VjdXJpdHktc2ltcGxlLWNsaWVudC9Gb29NYW5hZ2VkQmVhbiIpOworICAgICAgICBmbWJsMi5oZWxsbygpOworCisgICAgfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gZSkgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogICAgICAgICBmb3IgKFN0cmluZyBhcmcgOiBhcmdzKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFyZzogIiArIGFyZyk7CiAgICAgICAgIH0KLQlhcHBOYW1lID0gYXJnc1swXTsKLQlwcmluY2lwYWwgPSBhcmdzWzFdOwotCXN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7Ci0JQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7ICAgICAgIAotICAgICAgICBjbGllbnQuZG9UZXN0KCk7CQorICAgIGFwcE5hbWUgPSBhcmdzWzBdOworICAgIHByaW5jaXBhbCA9IGFyZ3NbMV07CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKKyAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKKyAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7CiAgICAgfQogCkBAIC0xNDAsMTU2ICsxNDAsMTU2IEBACiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyB0ZXN0IHdpdGggdXNlciBwcmluY2lwYWwgIiArIHByaW5jaXBhbCk7Ci0JYm9vbGVhbiBoYXZlUGVybWlzc2lvbiA9IHByaW5jaXBhbC5lcXVhbHMoImJvYiIpOwotCWlmKCBoYXZlUGVybWlzc2lvbiApIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeHBlY3RpbmcgcGVybWlzc2lvbiB0byBhY2Nlc3MgcHJvdGVjdGVkIG1ldGhvZHMiKTsKLQl9IGVsc2UgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5PVCBleHBlY3RpbmcgcGVybWlzc2lvbiB0byBhY2Nlc3MgcHJvdGVjdGVkIG1ldGhvZHMiKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRpbmcgdGVzdCB3aXRoIHVzZXIgcHJpbmNpcGFsICIgKyBwcmluY2lwYWwpOworICAgIGJvb2xlYW4gaGF2ZVBlcm1pc3Npb24gPSBwcmluY2lwYWwuZXF1YWxzKCJib2IiKTsKKyAgICBpZiggaGF2ZVBlcm1pc3Npb24gKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhwZWN0aW5nIHBlcm1pc3Npb24gdG8gYWNjZXNzIHByb3RlY3RlZCBtZXRob2RzIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOT1QgZXhwZWN0aW5nIHBlcm1pc3Npb24gdG8gYWNjZXNzIHByb3RlY3RlZCBtZXRob2RzIik7CisgICAgfQogCiAKLQlTdHJpbmcgcmVzdWx0czsKKyAgICBTdHJpbmcgcmVzdWx0czsKIAotCXRyeSB7Ci0JICAgIAotCSAgICAvKioKLQkgICAgaWYoICFhcHBDbGllbnQgKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU0UgY2xpZW50LiAgVXNpbmcgcHJvZ3JhbW1hdGljIGxvZ2luIik7Ci0JCVByb2dyYW1tYXRpY0xvZ2luIHBtID0gbmV3IFByb2dyYW1tYXRpY0xvZ2luKCk7Ci0JCXBtLmxvZ2luKCJtYXJ5IiwgIm1vYiIsICJkZWZhdWx0IiwgdHJ1ZSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiUHJvZ3JhbW1hdGljIGxvZ2luIHN1Y2NlZWRlZCIpOwotCQkKLQkgICAgfQotCSAgICAqLworICAgIHRyeSB7CiAKLQkgICAgLy8JICAgIFByb2dyYW1tYXRpY0xvZ2luIGxvZ2luID0gbmV3IGNvbS5zdW4uYXBwc2Vydi5zZWN1cml0eS5hcGkuUHJvZ3JhbW1hdGljTG9naW4oKTsKLQkgICAgCi0JICAgIGlmKCBoZWxsbyA9PSBudWxsICkgewotCQloZWxsbyA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC9lamItZWpiMzEtc2VjdXJpdHktc2ltcGxlQXBwL2VqYi1lamIzMS1zZWN1cml0eS1zaW1wbGUtZWpiL1NpbmdsZXRvbkJlYW4hY29tLmFjbWUuSGVsbG8iKTsKLQkgICAgfSBlbHNlIHsKLQkJLy8gSW4gYW4gYXBwY2xpZW50LiAgCi0JCUhlbGxvIGhlbGxvMiA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmFwcC9lbnYvZm9yYXBwY2xpZW50Iik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiamF2YTphcHAvZW52L2ZvcmFwcGNsaWVudCBsb29rdXAgPSAiICsgaGVsbG8yKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJoZWxsbzMgPSAiICsgaGVsbG8zKTsKKyAgICAgICAgLyoqCisgICAgICAgIGlmKCAhYXBwQ2xpZW50ICkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNFIGNsaWVudC4gIFVzaW5nIHByb2dyYW1tYXRpYyBsb2dpbiIpOworICAgICAgICBQcm9ncmFtbWF0aWNMb2dpbiBwbSA9IG5ldyBQcm9ncmFtbWF0aWNMb2dpbigpOworICAgICAgICBwbS5sb2dpbigibWFyeSIsICJtb2IiLCAiZGVmYXVsdCIsIHRydWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlByb2dyYW1tYXRpYyBsb2dpbiBzdWNjZWVkZWQiKTsKIAotCQlIZWxsbyBoZWxsbzUgPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTphcHAvZWpiLWVqYjMxLXNlY3VyaXR5LXNpbXBsZS1lamIvU2luZ2xldG9uQmVhbiFjb20uYWNtZS5IZWxsbyIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oImhlbGxvNCA9ICIgKyBoZWxsbzQpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oImhlbGxvNSA9ICIgKyBoZWxsbzUpOwotCQlTdHJpbmcgZW52ID0gKFN0cmluZykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmFwcC9lbnZlbnRyeWZvcmFwcGNsaWVudCIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oImphdmE6YXBwIGVudiBlbnRyeSA9ICIgKyBlbnYpOwotCSAgICB9CisgICAgICAgIH0KKyAgICAgICAgKi8KIAotCSAgICBib29sZWFuIHBhc3M7CisgICAgICAgIC8vICAgICAgICBQcm9ncmFtbWF0aWNMb2dpbiBsb2dpbiA9IG5ldyBjb20uc3VuLmFwcHNlcnYuc2VjdXJpdHkuYXBpLlByb2dyYW1tYXRpY0xvZ2luKCk7CiAKLQkgICAgdHJ5IHsKLQkJaGVsbG8ucHJvdGVjdGVkU3luY1JlbW90ZSgpOwotCQlwYXNzID0gaGF2ZVBlcm1pc3Npb247IAotCSAgICB9IGNhdGNoKEVKQkFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCXBhc3MgPSAhaGF2ZVBlcm1pc3Npb247Ci0JICAgIH0KLQkgICAgCisgICAgICAgIGlmKCBoZWxsbyA9PSBudWxsICkgeworICAgICAgICBoZWxsbyA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC9lamItZWpiMzEtc2VjdXJpdHktc2ltcGxlQXBwL2VqYi1lamIzMS1zZWN1cml0eS1zaW1wbGUtZWpiL1NpbmdsZXRvbkJlYW4hY29tLmFjbWUuSGVsbG8iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSW4gYW4gYXBwY2xpZW50LgorICAgICAgICBIZWxsbyBoZWxsbzIgPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTphcHAvZW52L2ZvcmFwcGNsaWVudCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImphdmE6YXBwL2Vudi9mb3JhcHBjbGllbnQgbG9va3VwID0gIiArIGhlbGxvMik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG8zID0gIiArIGhlbGxvMyk7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJwYXNzID0gIiArIHBhc3MpOworICAgICAgICBIZWxsbyBoZWxsbzUgPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTphcHAvZWpiLWVqYjMxLXNlY3VyaXR5LXNpbXBsZS1lamIvU2luZ2xldG9uQmVhbiFjb20uYWNtZS5IZWxsbyIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImhlbGxvNCA9ICIgKyBoZWxsbzQpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImhlbGxvNSA9ICIgKyBoZWxsbzUpOworICAgICAgICBTdHJpbmcgZW52ID0gKFN0cmluZykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmFwcC9lbnZlbnRyeWZvcmFwcGNsaWVudCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImphdmE6YXBwIGVudiBlbnRyeSA9ICIgKyBlbnYpOworICAgICAgICB9CiAKLQkgICAgdHJ5IHsKLQkJaGVsbG8udW5wcm90ZWN0ZWRTeW5jUmVtb3RlKCk7Ci0JCXBhc3MgPSB0cnVlOwotCSAgICB9IGNhdGNoKEVKQkFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCXBhc3MgPSBmYWxzZTsKLQkgICAgfQorICAgICAgICBib29sZWFuIHBhc3M7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaGVsbG8ucHJvdGVjdGVkU3luY1JlbW90ZSgpOworICAgICAgICBwYXNzID0gaGF2ZVBlcm1pc3Npb247CisgICAgICAgIH0gY2F0Y2goRUpCQWNjZXNzRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzcyA9ICFoYXZlUGVybWlzc2lvbjsKKyAgICAgICAgfQogCiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJwYXNzID0gIiArIHBhc3MpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInBhc3MgPSAiICsgcGFzcyk7CiAKLQkgICAgdHJ5IHsKLQkJRnV0dXJlPE9iamVjdD4gZnV0dXJlID0gaGVsbG8ucHJvdGVjdGVkQXN5bmNSZW1vdGUoKTsKLQkJT2JqZWN0IG9iaiA9IGZ1dHVyZS5nZXQoKTsKLQkJcGFzcyA9IGhhdmVQZXJtaXNzaW9uOwotCQkKLQkgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZWUpIHsKLQkJaWYoIGVlLmdldENhdXNlKCkgaW5zdGFuY2VvZiBFSkJBY2Nlc3NFeGNlcHRpb24gKSB7Ci0JCSAgICBwYXNzID0gIWhhdmVQZXJtaXNzaW9uOwotCQl9IGVsc2UgewotCQkgICAgcGFzcyA9IGZhbHNlOwotCQl9Ci0JICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaGVsbG8udW5wcm90ZWN0ZWRTeW5jUmVtb3RlKCk7CisgICAgICAgIHBhc3MgPSB0cnVlOworICAgICAgICB9IGNhdGNoKEVKQkFjY2Vzc0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3MgPSBmYWxzZTsKKyAgICAgICAgfQogCiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJwYXNzID0gIiArIHBhc3MpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInBhc3MgPSAiICsgcGFzcyk7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgRnV0dXJlPE9iamVjdD4gZnV0dXJlID0gaGVsbG8ucHJvdGVjdGVkQXN5bmNSZW1vdGUoKTsKKyAgICAgICAgT2JqZWN0IG9iaiA9IGZ1dHVyZS5nZXQoKTsKKyAgICAgICAgcGFzcyA9IGhhdmVQZXJtaXNzaW9uOworCisgICAgICAgIH0gY2F0Y2goRXhlY3V0aW9uRXhjZXB0aW9uIGVlKSB7CisgICAgICAgIGlmKCBlZS5nZXRDYXVzZSgpIGluc3RhbmNlb2YgRUpCQWNjZXNzRXhjZXB0aW9uICkgeworICAgICAgICAgICAgcGFzcyA9ICFoYXZlUGVybWlzc2lvbjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBhc3MgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB9CiAKIAotCSAgICB0cnkgewotCQlGdXR1cmU8T2JqZWN0PiBmdXR1cmUgPSBoZWxsby51bnByb3RlY3RlZEFzeW5jUmVtb3RlKCk7Ci0JCU9iamVjdCBvYmogPSBmdXR1cmUuZ2V0KCk7Ci0JCXBhc3MgPSB0cnVlOwotCSAgICB9IGNhdGNoKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlZSkgewotCQlwYXNzID0gZmFsc2U7Ci0JICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwYXNzID0gIiArIHBhc3MpOworCisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgRnV0dXJlPE9iamVjdD4gZnV0dXJlID0gaGVsbG8udW5wcm90ZWN0ZWRBc3luY1JlbW90ZSgpOworICAgICAgICBPYmplY3Qgb2JqID0gZnV0dXJlLmdldCgpOworICAgICAgICBwYXNzID0gdHJ1ZTsKKyAgICAgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZWUpIHsKKyAgICAgICAgcGFzcyA9IGZhbHNlOworICAgICAgICB9CiAKIAogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigicGFzcyA9ICIgKyBwYXNzKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwYXNzID0gIiArIHBhc3MpOwogCiAKLQkgICAgdHJ5IHsKLQkJaGVsbG8udGVzdFByb3RlY3RlZFN5bmNMb2NhbCgpOwotCQlwYXNzID0gaGF2ZVBlcm1pc3Npb247Ci0JICAgIH0gIGNhdGNoKEVKQkFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCXBhc3MgPSAhaGF2ZVBlcm1pc3Npb247Ci0JICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaGVsbG8udGVzdFByb3RlY3RlZFN5bmNMb2NhbCgpOworICAgICAgICBwYXNzID0gaGF2ZVBlcm1pc3Npb247CisgICAgICAgIH0gIGNhdGNoKEVKQkFjY2Vzc0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3MgPSAhaGF2ZVBlcm1pc3Npb247CisgICAgICAgIH0KIAogCiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJwYXNzID0gIiArIHBhc3MpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInBhc3MgPSAiICsgcGFzcyk7CiAKIAotCSAgICB0cnkgewotCQloZWxsby50ZXN0VW5wcm90ZWN0ZWRTeW5jTG9jYWwoKTsKLQkJcGFzcyA9IHRydWU7Ci0JICAgIH0gIGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCXBhc3MgPSBmYWxzZTsKLQkgICAgfQorICAgICAgICB0cnkgeworICAgICAgICBoZWxsby50ZXN0VW5wcm90ZWN0ZWRTeW5jTG9jYWwoKTsKKyAgICAgICAgcGFzcyA9IHRydWU7CisgICAgICAgIH0gIGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3MgPSBmYWxzZTsKKyAgICAgICAgfQogCiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJwYXNzID0gIiArIHBhc3MpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInBhc3MgPSAiICsgcGFzcyk7CiAKIAotCSAgICB0cnkgewotCQloZWxsby50ZXN0UHJvdGVjdGVkQXN5bmNMb2NhbCgpOwotCQlwYXNzID0gaGF2ZVBlcm1pc3Npb247Ci0JICAgIH0gIGNhdGNoKEVKQkFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCXBhc3MgPSAhaGF2ZVBlcm1pc3Npb247Ci0JICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaGVsbG8udGVzdFByb3RlY3RlZEFzeW5jTG9jYWwoKTsKKyAgICAgICAgcGFzcyA9IGhhdmVQZXJtaXNzaW9uOworICAgICAgICB9ICBjYXRjaChFSkJBY2Nlc3NFeGNlcHRpb24gZSkgeworICAgICAgICBwYXNzID0gIWhhdmVQZXJtaXNzaW9uOworICAgICAgICB9CiAKIAogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigicGFzcyA9ICIgKyBwYXNzKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwYXNzID0gIiArIHBhc3MpOwogCi0JICAgIHRyeSB7Ci0JCWhlbGxvLnRlc3RVbnByb3RlY3RlZEFzeW5jTG9jYWwoKTsKLQkJcGFzcyA9IHRydWU7Ci0JICAgIH0gIGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCXBhc3MgPSBmYWxzZTsKLQkgICAgfQorICAgICAgICB0cnkgeworICAgICAgICBoZWxsby50ZXN0VW5wcm90ZWN0ZWRBc3luY0xvY2FsKCk7CisgICAgICAgIHBhc3MgPSB0cnVlOworICAgICAgICB9ICBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBwYXNzID0gZmFsc2U7CisgICAgICAgIH0KIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oInBhc3MgPSAiICsgcGFzcyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicGFzcyA9ICIgKyBwYXNzKTsKIAotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKIAotCX0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKSB7Ci0JICAgIAotCSAgICBpZiggYXBwQ2xpZW50ICkgewotCQlzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7Ci0JICAgIH0gZWxzZSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIHNlY3VyaXR5IGZhaWx1cmUgZHVyaW5nIGxvb2t1cCBmb3Igbm9uLWF1dGhlbnRpY2F0ZWQgU0UgY2xpZW50Iik7Ci0JCXN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKLQkgICAgfQorICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKSB7CiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgICAgIGlmKCBhcHBDbGllbnQgKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgc2VjdXJpdHkgZmFpbHVyZSBkdXJpbmcgbG9va3VwIGZvciBub24tYXV0aGVudGljYXRlZCBTRSBjbGllbnQiKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworICAgICAgICB9CisKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvY2xpZW50L0Zvb01hbmFnZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2NsaWVudC9Gb29NYW5hZ2VkQmVhbi5qYXZhCmluZGV4IDJjYzdlNjYuLmFlZTJjZWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvY2xpZW50L0Zvb01hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L3NpbXBsZS9jbGllbnQvRm9vTWFuYWdlZEJlYW4uamF2YQpAQCAtMzEsMjEgKzMxLDIxIEBACiAgIEBSZXNvdXJjZQogICBwcml2YXRlIEZvb01hbmFnZWRCZWFuMiBmbWIyOwogCi0gIEBQb3N0Q29uc3RydWN0IAorICBAUG9zdENvbnN0cnVjdAogICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjppbml0KCkiKTsKICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFwcE5hbWUgPSAiICsgYXBwTmFtZSk7CiAgICAgZm1iMi5oZWxsbygpOwogCi0gIH0gCisgIH0KIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmhlbGxvKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjpoZWxsbygpIik7CiAgICAgfQotICAgIAorCiAgICAgQFByZURlc3Ryb3kKLQlwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjpkZXN0cm95KCkiKTsKKyAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjpkZXN0cm95KCkiKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvY2xpZW50L0Zvb01hbmFnZWRCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L3NpbXBsZS9jbGllbnQvRm9vTWFuYWdlZEJlYW4yLmphdmEKaW5kZXggMmJjN2YzYi4uODQ4MTEyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L3NpbXBsZS9jbGllbnQvRm9vTWFuYWdlZEJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L3NpbXBsZS9jbGllbnQvRm9vTWFuYWdlZEJlYW4yLmphdmEKQEAgLTI4LDI2ICsyOCwyNiBAQAogICBTdHJpbmcgYXBwTmFtZTsKIAogICAgIEBSZXNvdXJjZShuYW1lPSJqYXZhOm1vZHVsZS9lbnYvZm1iQXBwTmFtZSIsIGxvb2t1cD0iamF2YTphcHAvQXBwTmFtZSIpCi0JU3RyaW5nIGFwcE5hbWUyOworICAgIFN0cmluZyBhcHBOYW1lMjsKIAogICAgIEBSZXNvdXJjZShsb29rdXA9ImphdmE6bW9kdWxlL2Vudi9mbWJBcHBOYW1lIikKLQlTdHJpbmcgYXBwTmFtZTM7CisgICAgU3RyaW5nIGFwcE5hbWUzOwogCi0gIEBQb3N0Q29uc3RydWN0IAorICBAUG9zdENvbnN0cnVjdAogICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuMjo6aW5pdCgpIik7CiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhcHBOYW1lID0gIiArIGFwcE5hbWUpOwogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXBwTmFtZTIgPSAiICsgYXBwTmFtZTIpOwogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXBwTmFtZTMgPSAiICsgYXBwTmFtZTMpOwotICB9IAorICB9CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuMjo6aGVsbG8oKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW4yOjpoZWxsbygpIik7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKLQlwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuMjo6ZGVzdHJveSgpIik7CisgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjI6OmRlc3Ryb3koKSIpOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IDg5YmNlZTEuLjliN2ViNGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC0zMSw3ICszMSw3IEBACiAgICA8ZW52LWVudHJ5PgogICAgICAgICAgPGVudi1lbnRyeS1uYW1lPmVudkVudHJ5MzwvZW52LWVudHJ5LW5hbWU+CiAgICAgICAgICA8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLkludGVnZXI8L2Vudi1lbnRyeS10eXBlPgotCSA8bG9va3VwLW5hbWU+amF2YTphcHAvZW52L3ZhbHVlMTwvbG9va3VwLW5hbWU+CisgICAgIDxsb29rdXAtbmFtZT5qYXZhOmFwcC9lbnYvdmFsdWUxPC9sb29rdXAtbmFtZT4KICAgICAgICA8L2Vudi1lbnRyeT4KIAogPC9hcHBsaWNhdGlvbi1jbGllbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggODA3OWZiZC4uNGI0ZmJkNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L3NpbXBsZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtMjMsNyArMjMsNyBAQAogICA8ZW50ZXJwcmlzZS1iZWFucz4KICAgICAgIDxzZXNzaW9uPgogICAgICAgICA8ZWpiLW5hbWU+U2luZ2xldG9uQmVhbjwvZWpiLW5hbWU+Ci0gICAgICAKKwogICAgICAgICA8ZW52LWVudHJ5PgogICAgICAgICAgPGVudi1lbnRyeS1uYW1lPmphdmE6YXBwL2VudmVudHJ5Zm9yYXBwY2xpZW50PC9lbnYtZW50cnktbmFtZT4KICAgICAgICAgIDxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDFlOTU4YWIuLmVjMmRmNTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L3NpbXBsZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjEsMTAgKzIxLDEwIEBACiA8c3VuLWVqYi1qYXI+CiAgICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICAgIDxyb2xlLW5hbWU+Zm9vPC9yb2xlLW5hbWU+Ci0gICAgICA8cHJpbmNpcGFsLW5hbWU+Ym9iPC9wcmluY2lwYWwtbmFtZT4gIAorICAgICAgPHByaW5jaXBhbC1uYW1lPmJvYjwvcHJpbmNpcGFsLW5hbWU+CiAgICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICAgIDxyb2xlLW5hbWU+YmFyPC9yb2xlLW5hbWU+Ci0gICAgICA8cHJpbmNpcGFsLW5hbWU+bWFyeTwvcHJpbmNpcGFsLW5hbWU+ICAKKyAgICAgIDxwcmluY2lwYWwtbmFtZT5tYXJ5PC9wcmluY2lwYWwtbmFtZT4KICAgICA8L3NlY3VyaXR5LXJvbGUtbWFwcGluZz4KIDwvc3VuLWVqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2VqYi9TaW5nbGV0b25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggNThkMTQ4OC4uN2YxZTQzYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L3NpbXBsZS9lamIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQpAQCAtNDMsMjcgKzQzLDI3IEBACiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjppbml0KCkiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcmIgPSAiICsgb3JiKTsKLQlpZiggb3JiID09IG51bGwgKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIm51bGwgT1JCIik7Ci0JfQorICAgIGlmKCBvcmIgPT0gbnVsbCApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigibnVsbCBPUkIiKTsKKyAgICB9CiAKLQlIZWxsbyBtZVZpYUFwcENsaWVudERlZmluZWREZXBlbmRlbmN5ID0gKEhlbGxvKQotCSAgICBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTphcHAvZW52L2FwcGNsaWVudGRlZmluZWRlamJyZWYxIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJtZVZpYUFwcENsaWVudERlZmluZWREZXBlbmRlbmN5ID0iICsKLQkJCSAgIG1lVmlhQXBwQ2xpZW50RGVmaW5lZERlcGVuZGVuY3kpOwotCUhlbGxvIG1lVmlhQXBwQ2xpZW50RGVmaW5lZERlcGVuZGVuY3kyID0gKEhlbGxvKQotCSAgICBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTphcHAvYXBwY2xpZW50ZGVmaW5lZGVqYnJlZjIiKTsKKyAgICBIZWxsbyBtZVZpYUFwcENsaWVudERlZmluZWREZXBlbmRlbmN5ID0gKEhlbGxvKQorICAgICAgICBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTphcHAvZW52L2FwcGNsaWVudGRlZmluZWRlamJyZWYxIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJtZVZpYUFwcENsaWVudERlZmluZWREZXBlbmRlbmN5ID0iICsKKyAgICAgICAgICAgICAgIG1lVmlhQXBwQ2xpZW50RGVmaW5lZERlcGVuZGVuY3kpOworICAgIEhlbGxvIG1lVmlhQXBwQ2xpZW50RGVmaW5lZERlcGVuZGVuY3kyID0gKEhlbGxvKQorICAgICAgICBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTphcHAvYXBwY2xpZW50ZGVmaW5lZGVqYnJlZjIiKTsKIAotCUhlbGxvIG1lVmlhQXBwQ2xpZW50RGVmaW5lZERlcGVuZGVuY3kzID0gKEhlbGxvKQotCSAgICBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTpnbG9iYWwvYXBwY2xpZW50ZGVmaW5lZGVqYnJlZjMiKTsKKyAgICBIZWxsbyBtZVZpYUFwcENsaWVudERlZmluZWREZXBlbmRlbmN5MyA9IChIZWxsbykKKyAgICAgICAgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6Z2xvYmFsL2FwcGNsaWVudGRlZmluZWRlamJyZWYzIik7CiAKLQlTdHJpbmcgYXBwTGV2ZWxFbnZFbnRyeSA9IChTdHJpbmcpCi0JICAgIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmFwcC9lbnYvZW52ZW50cnkxIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJhcHBMZXZlbEVudkVudHJ5ID0gIiArIGFwcExldmVsRW52RW50cnkpOworICAgIFN0cmluZyBhcHBMZXZlbEVudkVudHJ5ID0gKFN0cmluZykKKyAgICAgICAgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6YXBwL2Vudi9lbnZlbnRyeTEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFwcExldmVsRW52RW50cnkgPSAiICsgYXBwTGV2ZWxFbnZFbnRyeSk7CiAKLQlTdHJpbmcgZ2xvYmFsTGV2ZWxFbnZFbnRyeSA9IChTdHJpbmcpCi0JICAgIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmdsb2JhbC9lbnZlbnRyeTIiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImdsb2JhbExldmVsRW52RW50cnkgPSAiICsgZ2xvYmFsTGV2ZWxFbnZFbnRyeSk7CisgICAgU3RyaW5nIGdsb2JhbExldmVsRW52RW50cnkgPSAoU3RyaW5nKQorICAgICAgICBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTpnbG9iYWwvZW52ZW50cnkyIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJnbG9iYWxMZXZlbEVudkVudHJ5ID0gIiArIGdsb2JhbExldmVsRW52RW50cnkpOwogCiAgICAgfQogCkBAIC03MSwxMTEgKzcxLDExMSBAQAogCiAgICAgQFJvbGVzQWxsb3dlZCgiZm9vIikKICAgICBwdWJsaWMgdm9pZCBwcm90ZWN0ZWRTeW5jUmVtb3RlKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6cHJvdGVjdGVkU3luY1JlbW90ZSBjcCA9ICIgKwotCQkJICAgc2Vzc2lvbkN0eC5nZXRDYWxsZXJQcmluY2lwYWwoKSAgKyAiICwgIiArCi0JCQkgICBUaHJlYWQuY3VycmVudFRocmVhZCgpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OnByb3RlY3RlZFN5bmNSZW1vdGUgY3AgPSAiICsKKyAgICAgICAgICAgICAgIHNlc3Npb25DdHguZ2V0Q2FsbGVyUHJpbmNpcGFsKCkgICsgIiAsICIgKworICAgICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7CiAgICAgfQogICAgIEBQZXJtaXRBbGwKICAgICBwdWJsaWMgdm9pZCB1bnByb3RlY3RlZFN5bmNSZW1vdGUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjp1bnByb3RlY3RlZFN5bmNSZW1vdGUgY3AgPSAiICsKLQkJCSAgIHNlc3Npb25DdHguZ2V0Q2FsbGVyUHJpbmNpcGFsKCkgICsgIiAsICIgKwotCQkJICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjp1bnByb3RlY3RlZFN5bmNSZW1vdGUgY3AgPSAiICsKKyAgICAgICAgICAgICAgIHNlc3Npb25DdHguZ2V0Q2FsbGVyUHJpbmNpcGFsKCkgICsgIiAsICIgKworICAgICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7CiAgICAgfQogCiAgICAgQFJvbGVzQWxsb3dlZCgiZm9vIikKICAgICBAQXN5bmNocm9ub3VzCiAgICAgcHVibGljIEZ1dHVyZTxPYmplY3Q+IHByb3RlY3RlZEFzeW5jUmVtb3RlKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6cHJvdGVjdGVkQXN5bmNSZW1vdGUgY3AgPSAiICsKLQkJCSAgIHNlc3Npb25DdHguZ2V0Q2FsbGVyUHJpbmNpcGFsKCkgICsgIiAsICIgKwotCQkJICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7Ci0JcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxPYmplY3Q+KG5ldyBTdHJpbmcoKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpwcm90ZWN0ZWRBc3luY1JlbW90ZSBjcCA9ICIgKworICAgICAgICAgICAgICAgc2Vzc2lvbkN0eC5nZXRDYWxsZXJQcmluY2lwYWwoKSAgKyAiICwgIiArCisgICAgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpKTsKKyAgICByZXR1cm4gbmV3IEFzeW5jUmVzdWx0PE9iamVjdD4obmV3IFN0cmluZygpKTsKICAgICB9CiAKICAgICBAQXN5bmNocm9ub3VzCiAgICAgQFBlcm1pdEFsbAogICAgIHB1YmxpYyBGdXR1cmU8T2JqZWN0PiB1bnByb3RlY3RlZEFzeW5jUmVtb3RlKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6dW5wcm90ZWN0ZWRBc3luY1JlbW90ZSBjcCA9ICIgKwotCQkJICAgc2Vzc2lvbkN0eC5nZXRDYWxsZXJQcmluY2lwYWwoKSAgKyAiICwgIiArCi0JCQkgICBUaHJlYWQuY3VycmVudFRocmVhZCgpKTsKLQlyZXR1cm4gbmV3IEFzeW5jUmVzdWx0PE9iamVjdD4obmV3IFN0cmluZygpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OnVucHJvdGVjdGVkQXN5bmNSZW1vdGUgY3AgPSAiICsKKyAgICAgICAgICAgICAgIHNlc3Npb25DdHguZ2V0Q2FsbGVyUHJpbmNpcGFsKCkgICsgIiAsICIgKworICAgICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7CisgICAgcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxPYmplY3Q+KG5ldyBTdHJpbmcoKSk7CiAgICAgfQogCiAgICAgQFJvbGVzQWxsb3dlZCgiZm9vIikKICAgICBAQXN5bmNocm9ub3VzCiAgICAgcHVibGljIEZ1dHVyZTxPYmplY3Q+IHByb3RlY3RlZEFzeW5jTG9jYWwoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpwcm90ZWN0ZWRBc3luY0xvY2FsIGNwID0gIiArCi0JCQkgICBzZXNzaW9uQ3R4LmdldENhbGxlclByaW5jaXBhbCgpICArICIgLCAiICsKLQkJCSAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOwotCXJldHVybiBuZXcgQXN5bmNSZXN1bHQ8T2JqZWN0PihuZXcgU3RyaW5nKCkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6cHJvdGVjdGVkQXN5bmNMb2NhbCBjcCA9ICIgKworICAgICAgICAgICAgICAgc2Vzc2lvbkN0eC5nZXRDYWxsZXJQcmluY2lwYWwoKSAgKyAiICwgIiArCisgICAgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpKTsKKyAgICByZXR1cm4gbmV3IEFzeW5jUmVzdWx0PE9iamVjdD4obmV3IFN0cmluZygpKTsKICAgICB9CiAKICAgICBAQXN5bmNocm9ub3VzCiAgICAgQFBlcm1pdEFsbAogICAgIHB1YmxpYyBGdXR1cmU8T2JqZWN0PiB1bnByb3RlY3RlZEFzeW5jTG9jYWwoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjp1bnByb3RlY3RlZEFzeW5jTG9jYWwgY3AgPSAiICsKLQkJCSAgIHNlc3Npb25DdHguZ2V0Q2FsbGVyUHJpbmNpcGFsKCkgICsgIiAsICIgKwotCQkJICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7Ci0JcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxPYmplY3Q+KG5ldyBTdHJpbmcoKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjp1bnByb3RlY3RlZEFzeW5jTG9jYWwgY3AgPSAiICsKKyAgICAgICAgICAgICAgIHNlc3Npb25DdHguZ2V0Q2FsbGVyUHJpbmNpcGFsKCkgICsgIiAsICIgKworICAgICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7CisgICAgcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxPYmplY3Q+KG5ldyBTdHJpbmcoKSk7CiAgICAgfQogCiAgICAgQFJvbGVzQWxsb3dlZCgiZm9vIikKICAgICBwdWJsaWMgdm9pZCBwcm90ZWN0ZWRTeW5jTG9jYWwoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpwcm90ZWN0ZWRTeW5jTG9jYWwgY3AgPSAiICsKLQkJCSAgIHNlc3Npb25DdHguZ2V0Q2FsbGVyUHJpbmNpcGFsKCkgICsgIiAsICIgKwotCQkJICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7Ci0JcmV0dXJuOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6cHJvdGVjdGVkU3luY0xvY2FsIGNwID0gIiArCisgICAgICAgICAgICAgICBzZXNzaW9uQ3R4LmdldENhbGxlclByaW5jaXBhbCgpICArICIgLCAiICsKKyAgICAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOworICAgIHJldHVybjsKICAgICB9CiAKLSAgICAKKwogICAgIEBQZXJtaXRBbGwKICAgICBwdWJsaWMgdm9pZCB1bnByb3RlY3RlZFN5bmNMb2NhbCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OnVucHJvdGVjdGVkU3luY0xvY2FsIGNwID0gIiArCi0JCQkgICBzZXNzaW9uQ3R4LmdldENhbGxlclByaW5jaXBhbCgpICArICIgLCAiICsKLQkJCSAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOwotCXJldHVybiA7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjp1bnByb3RlY3RlZFN5bmNMb2NhbCBjcCA9ICIgKworICAgICAgICAgICAgICAgc2Vzc2lvbkN0eC5nZXRDYWxsZXJQcmluY2lwYWwoKSAgKyAiICwgIiArCisgICAgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpKTsKKyAgICByZXR1cm4gOwogICAgIH0KIAogICAgIEBQZXJtaXRBbGwKICAgICBwdWJsaWMgdm9pZCB0ZXN0UHJvdGVjdGVkU3luY0xvY2FsKCkgewotCW1lLnByb3RlY3RlZFN5bmNMb2NhbCgpOworICAgIG1lLnByb3RlY3RlZFN5bmNMb2NhbCgpOwogICAgIH0KIAogICAgIEBQZXJtaXRBbGwKICAgICBwdWJsaWMgdm9pZCB0ZXN0UHJvdGVjdGVkQXN5bmNMb2NhbCgpIHsKLQl0cnkgewotCSAgICBGdXR1cmU8T2JqZWN0PiBmdXR1cmUgPSBtZS5wcm90ZWN0ZWRBc3luY0xvY2FsKCk7Ci0JICAgIE9iamVjdCBvYmogPSBmdXR1cmUuZ2V0KCk7Ci0JfSBjYXRjaChFeGNlcHRpb24gZWUpIHsKLQkgICAgaWYoIGVlLmdldENhdXNlKCkgaW5zdGFuY2VvZiBFSkJBY2Nlc3NFeGNlcHRpb24pIHsKLQkJdGhyb3cgKEVKQkFjY2Vzc0V4Y2VwdGlvbikgZWUuZ2V0Q2F1c2UoKTsKLQkgICAgfQotCX0KKyAgICB0cnkgeworICAgICAgICBGdXR1cmU8T2JqZWN0PiBmdXR1cmUgPSBtZS5wcm90ZWN0ZWRBc3luY0xvY2FsKCk7CisgICAgICAgIE9iamVjdCBvYmogPSBmdXR1cmUuZ2V0KCk7CisgICAgfSBjYXRjaChFeGNlcHRpb24gZWUpIHsKKyAgICAgICAgaWYoIGVlLmdldENhdXNlKCkgaW5zdGFuY2VvZiBFSkJBY2Nlc3NFeGNlcHRpb24pIHsKKyAgICAgICAgdGhyb3cgKEVKQkFjY2Vzc0V4Y2VwdGlvbikgZWUuZ2V0Q2F1c2UoKTsKKyAgICAgICAgfQorICAgIH0KICAgICB9CiAKICAgICBAUGVybWl0QWxsCiAgICAgcHVibGljIHZvaWQgdGVzdFVucHJvdGVjdGVkU3luY0xvY2FsKCkgewotCW1lLnVucHJvdGVjdGVkU3luY0xvY2FsKCk7CisgICAgbWUudW5wcm90ZWN0ZWRTeW5jTG9jYWwoKTsKIAogICAgIH0KIAogICAgIEBQZXJtaXRBbGwKICAgICBwdWJsaWMgdm9pZCB0ZXN0VW5wcm90ZWN0ZWRBc3luY0xvY2FsKCkgewotCXRyeSB7Ci0JICAgIEZ1dHVyZTxPYmplY3Q+IGZ1dHVyZSA9IG1lLnVucHJvdGVjdGVkQXN5bmNMb2NhbCgpOwotCSAgICBPYmplY3Qgb2JqID0gZnV0dXJlLmdldCgpOwotCSAgICAvLyBTdWNjZXNzCi0JfSBjYXRjaChFeGNlcHRpb24gZWUpIHsKLQkgICAgdGhyb3cgKEVKQkV4Y2VwdGlvbikgbmV3IEVKQkV4Y2VwdGlvbigiR290IHVuZXhwZWN0ZWQgZXhjZXB0aW9uIikuaW5pdENhdXNlKGVlLmdldENhdXNlKCkpOwotCX0KKyAgICB0cnkgeworICAgICAgICBGdXR1cmU8T2JqZWN0PiBmdXR1cmUgPSBtZS51bnByb3RlY3RlZEFzeW5jTG9jYWwoKTsKKyAgICAgICAgT2JqZWN0IG9iaiA9IGZ1dHVyZS5nZXQoKTsKKyAgICAgICAgLy8gU3VjY2VzcworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGVlKSB7CisgICAgICAgIHRocm93IChFSkJFeGNlcHRpb24pIG5ldyBFSkJFeGNlcHRpb24oIkdvdCB1bmV4cGVjdGVkIGV4Y2VwdGlvbiIpLmluaXRDYXVzZShlZS5nZXRDYXVzZSgpKTsKICAgICB9Ci0gICAgCisgICAgfQorCiAKIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpkZXN0cm95KCkiKTsKICAgICB9Ci0gICAgCisKIAogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vYnVpbGQueG1sCmluZGV4IDFmODRmODEuLjFjOGRjN2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vYnVpbGQueG1sCkBAIC02MCw5ICs2MCw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamIzMS1zaW5nbGV0b24gdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWVqYjMxLXNpbmdsZXRvbiB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2NhY2hlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2NhY2hlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNGYxMjNmNS4uZTNhNTUwYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9jYWNoZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vY2FjaGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTIgKzE1LDEyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtc2luZ2xldG9uLWNhY2hlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+Ci0JCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9jYWNoZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2NhY2hlL2J1aWxkLnhtbAppbmRleCAzMzc4M2Q0Li4yOWEzYzE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2NhY2hlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2NhY2hlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTIgKzQ2LDEyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2FjaGUqLmNsYXNzLCoqL1NpbmdsZXRvbiouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNTksOSArNTksOSBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTcyLDcgKzcyLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vY2FjaGUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9jYWNoZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMzFlZDgzNy4uNDJkZTIxYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9jYWNoZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9jYWNoZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI2LDE3ICsyNiwxNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIAotCWFwcE5hbWUgPSBhcmdzWzBdOyAKLQlzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwotCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOyAgICAgICAKLSAgICAgICAgY2xpZW50LmRvVGVzdCgpOwkKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOworICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOworICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKICAgICB9CiAKQEAgLTQ0LDI3ICs0NCwyNyBAQAogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCi0JdHJ5IHsKKyAgICB0cnkgewogCi0JICAgIENhY2hlUmVtb3RlIGNhY2hlID0gKENhY2hlUmVtb3RlKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9DYWNoZUJlYW4hY29tLmFjbWUuQ2FjaGVSZW1vdGUiKTsKKyAgICAgICAgQ2FjaGVSZW1vdGUgY2FjaGUgPSAoQ2FjaGVSZW1vdGUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL0NhY2hlQmVhbiFjb20uYWNtZS5DYWNoZVJlbW90ZSIpOwogCi0JICAgIC8vIHNsZWVwIGZvciBhIGZldyBzZWNvbmQKLQkgICAgaW50IHNsZWVwID0gMTE7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyAiICsgc2xlZXAgKyAiIHNlY29uZHMgZm9yIGNhY2hlIHJlZnJlc2guLi4iKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIoTG93ZXIgdGhpcyB2YWx1ZSBvbmNlIG1pbmltdW0gdGltZW91dCBpcyAxIHNlYykiKTsKLQkgICAgVGhyZWFkLnNsZWVwKHNsZWVwICogMTAwMCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FraW5nIHVwIGZyb20gc2xlZXAuIE5vdyBjaGVjayBjYWNoZSIpOwotCSAgICAKLQkgICAgaW50IG51bVJlZnJlc2hlcyA9IGNhY2hlLmNoZWNrQ2FjaGUoKTsKLQkgICAgCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTnVtIHJlZnJlc2hlcyA9ICIgKyBudW1SZWZyZXNoZXMpOworICAgICAgICAvLyBzbGVlcCBmb3IgYSBmZXcgc2Vjb25kCisgICAgICAgIGludCBzbGVlcCA9IDExOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgIiArIHNsZWVwICsgIiBzZWNvbmRzIGZvciBjYWNoZSByZWZyZXNoLi4uIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKExvd2VyIHRoaXMgdmFsdWUgb25jZSBtaW5pbXVtIHRpbWVvdXQgaXMgMSBzZWMpIik7CisgICAgICAgIFRocmVhZC5zbGVlcChzbGVlcCAqIDEwMDApOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldha2luZyB1cCBmcm9tIHNsZWVwLiBOb3cgY2hlY2sgY2FjaGUiKTsKIAotCSAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworICAgICAgICBpbnQgbnVtUmVmcmVzaGVzID0gY2FjaGUuY2hlY2tDYWNoZSgpOwogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk51bSByZWZyZXNoZXMgPSAiICsgbnVtUmVmcmVzaGVzKTsKKworICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworCisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2NhY2hlL2VqYi9DYWNoZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vY2FjaGUvZWpiL0NhY2hlQmVhbi5qYXZhCmluZGV4IGQxNjRiMTMuLjdmOTE4ZmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vY2FjaGUvZWpiL0NhY2hlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vY2FjaGUvZWpiL0NhY2hlQmVhbi5qYXZhCkBAIC00MCwxNiArNDAsMTYgQEAKICAgICAgICBAUG9zdENvbnN0cnVjdAogICAgICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewogICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIENhY2hlOmluaXQoKSIpOwotCSAgICAgIG1lID0gc2VzQ3R4LmdldEJ1c2luZXNzT2JqZWN0KENhY2hlQmVhbi5jbGFzcyk7Ci0JICAgICAgbWUucnVuQXN5bmMoKTsKLQkgICAgICB0cnkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJsb2NraW5nIDIgc2VjcyBpbiBpbml0Iik7Ci0JCVRocmVhZC5zbGVlcCgxNTAwKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJXYWtpbmcgdXAgZnJvbSBzbGVlcCBpbiBpbml0Li4uIik7Ci0JICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgfQotCSAgICAgIGZpbmlzaGVkSW5pdCA9IHRydWU7CisgICAgICAgICAgbWUgPSBzZXNDdHguZ2V0QnVzaW5lc3NPYmplY3QoQ2FjaGVCZWFuLmNsYXNzKTsKKyAgICAgICAgICBtZS5ydW5Bc3luYygpOworICAgICAgICAgIHRyeSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmxvY2tpbmcgMiBzZWNzIGluIGluaXQiKTsKKyAgICAgICAgVGhyZWFkLnNsZWVwKDE1MDApOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldha2luZyB1cCBmcm9tIHNsZWVwIGluIGluaXQuLi4iKTsKKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgICAgICAgZmluaXNoZWRJbml0ID0gdHJ1ZTsKICAgICAgICB9CiAKICAgICBAQXN5bmNocm9ub3VzCkBAIC01Nyw1NSArNTcsNTUgQEAKIAogICAgIHB1YmxpYyBpbnQgY2hlY2tDYWNoZSgpIHsKIAotCWlmKCBmYWlsdXJlICkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGZhaWx1cmVNc2cpOwotCX0KKyAgICBpZiggZmFpbHVyZSApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihmYWlsdXJlTXNnKTsKKyAgICB9CiAKLQlpbnQgcmVmcmVzaGVzID0gcmVmcmVzaENvdW50LmludFZhbHVlKCk7Ci0JaWYoIHJlZnJlc2hlcyA9PSAwICkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJubyByZWZyZXNoZXMiKTsKLQl9CisgICAgaW50IHJlZnJlc2hlcyA9IHJlZnJlc2hDb3VudC5pbnRWYWx1ZSgpOworICAgIGlmKCByZWZyZXNoZXMgPT0gMCApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigibm8gcmVmcmVzaGVzIik7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsIGNhY2hlIGNoZWNrIHRvdGFsIHJlZnJlc2hlcyA9ICIgKyByZWZyZXNoZXMpOwotCXJldHVybiByZWZyZXNoZXM7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsIGNhY2hlIGNoZWNrIHRvdGFsIHJlZnJlc2hlcyA9ICIgKyByZWZyZXNoZXMpOworICAgIHJldHVybiByZWZyZXNoZXM7CiAgICAgfQogCiAgICAgICAgQFNjaGVkdWxlKHNlY29uZD0iKi8xIiwgbWludXRlPSIqIiwgaG91cj0iKiIsIHBlcnNpc3RlbnQ9ZmFsc2UpCiAgICAgICAgcHJpdmF0ZSB2b2lkIHJlZnJlc2goKSB7Ci0JICAgaW50IGNvdW50ID0gcmVmcmVzaENvdW50LmluY3JlbWVudEFuZEdldCgpOwotCSAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gQ2FjaGU6cmVmcmVzaCgpIG51bSByZWZyZXNoZXMgPSAiICsgY291bnQpOworICAgICAgIGludCBjb3VudCA9IHJlZnJlc2hDb3VudC5pbmNyZW1lbnRBbmRHZXQoKTsKKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIENhY2hlOnJlZnJlc2goKSBudW0gcmVmcmVzaGVzID0gIiArIGNvdW50KTsKICAgICAgICB9CiAKICAgICAgICBAUHJlRGVzdHJveQogICAgICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCSAgIHNodXRkb3duID0gdHJ1ZTsKKyAgICAgICBzaHV0ZG93biA9IHRydWU7CiAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gQ2FjaGU6ZGVzdHJveSgpIik7CiAgICAgICAgfQogCiAgICAgQEFzeW5jaHJvbm91cwogICAgIHB1YmxpYyB2b2lkIHJ1bkFzeW5jKCkgewogCi0JaWYoICFmaW5pc2hlZEluaXQgKSB7Ci0JICAgIGZhaWx1cmUgPSB0cnVlOwotCSAgICBmYWlsdXJlTXNnID0gIkFzeW5jIGNhbGxlZCBiZWZvcmUgaW5pdCBmaW5pc2hlZCI7Ci0JfQotCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b246OnJ1bigpIik7Ci0KLQl3aGlsZSghc2h1dGRvd24pIHsKLQotCSAgICB0cnkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkdvaW5nIHRvIHNsZWVwLi4uIik7Ci0JCVRocmVhZC5zbGVlcCg1MDAwKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJXYWtpbmcgdXAgZnJvbSBzbGVlcC4uLiIpOwotCSAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0KLQl9Ci0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIkV4aXRpbmcgQ2FjaGU6OnJ1bigpIGR1ZSB0byBzaHV0ZG93biIpOwotCXJldHVybjsKKyAgICBpZiggIWZpbmlzaGVkSW5pdCApIHsKKyAgICAgICAgZmFpbHVyZSA9IHRydWU7CisgICAgICAgIGZhaWx1cmVNc2cgPSAiQXN5bmMgY2FsbGVkIGJlZm9yZSBpbml0IGZpbmlzaGVkIjsKICAgICB9Ci0gICAgICAgCisKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbjo6cnVuKCkiKTsKKworICAgIHdoaWxlKCFzaHV0ZG93bikgeworCisgICAgICAgIHRyeSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR29pbmcgdG8gc2xlZXAuLi4iKTsKKyAgICAgICAgVGhyZWFkLnNsZWVwKDUwMDApOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldha2luZyB1cCBmcm9tIHNsZWVwLi4uIik7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhpdGluZyBDYWNoZTo6cnVuKCkgZHVlIHRvIHNodXRkb3duIik7CisgICAgcmV0dXJuOworICAgIH0KKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2hlbGxvL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2hlbGxvL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjcyOTQ1NC4uNTczZWYyYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9oZWxsby9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vaGVsbG8vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtc2luZ2xldG9uLWhlbGxvIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0icGVyc2lzdGVuY2UueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KLQkKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2hlbGxvL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vaGVsbG8vYnVpbGQueG1sCmluZGV4IGI3MmE0MGYuLjFhODQzM2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vaGVsbG8vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vaGVsbG8vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwyNCArNDYsMjQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9Gb28qLmNsYXNzLCoqL1NpbmdsZXRvbiouY2xhc3MsKiovSGVsbG8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnREZXJieSIvPgogICAgICAgICA8c2xlZXAgbWludXRlcz0iMiIvPgotICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+ICAgICAgIAorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtNzUsNyArNzUsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RvcERlcmJ5Ii8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vaGVsbG8vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9oZWxsby9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYzY4ZTA0My4uZmNlYjQwMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9oZWxsby9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9oZWxsby9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI5LDE3ICsyOSwxNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIAotCWFwcE5hbWUgPSBhcmdzWzBdOyAKLQlzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwotCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOyAgICAgICAKLSAgICAgICAgY2xpZW50LmRvVGVzdCgpOwkKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOworICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOworICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKICAgICB9CiAKQEAgLTQ3LDM3ICs0NywzNyBAQAogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCi0JdHJ5IHsKKyAgICB0cnkgewogCi0JICAgIC8vIEVuc3VyZSB0aGF0IE1FSkIgaXMgcmVnaXN0ZXJlZCB1bmRlciBhbGwgdGhyZWUgb2YgaXRzIEpOREkgbmFtZXMKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIE1FSkIgSG9tZXMiKTsKLQkgICAgTWFuYWdlbWVudEhvbWUgbWgxT2JqID0gKE1hbmFnZW1lbnRIb21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImVqYi9tZ210L01FSkIiKTsKLQkgICAgTWFuYWdlbWVudEhvbWUgbWgyT2JqID0gKE1hbmFnZW1lbnRIb21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsL21lamIvTUVKQkJlYW4iKTsKLQkgICAgTWFuYWdlbWVudEhvbWUgbWgzT2JqID0gKE1hbmFnZW1lbnRIb21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsL21lamIvTUVKQkJlYW4hamF2YXgubWFuYWdlbWVudC5qMmVlLk1hbmFnZW1lbnRIb21lIik7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IE1FSkIgaXMgcmVnaXN0ZXJlZCB1bmRlciBhbGwgdGhyZWUgb2YgaXRzIEpOREkgbmFtZXMKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIE1FSkIgSG9tZXMiKTsKKyAgICAgICAgTWFuYWdlbWVudEhvbWUgbWgxT2JqID0gKE1hbmFnZW1lbnRIb21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImVqYi9tZ210L01FSkIiKTsKKyAgICAgICAgTWFuYWdlbWVudEhvbWUgbWgyT2JqID0gKE1hbmFnZW1lbnRIb21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsL21lamIvTUVKQkJlYW4iKTsKKyAgICAgICAgTWFuYWdlbWVudEhvbWUgbWgzT2JqID0gKE1hbmFnZW1lbnRIb21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsL21lamIvTUVKQkJlYW4hamF2YXgubWFuYWdlbWVudC5qMmVlLk1hbmFnZW1lbnRIb21lIik7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJtZWpiIGhvbWUgb2JqIDEgPSAiICsgbWgxT2JqKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJtZWpiIGhvbWUgb2JqIDIgPSAiICsgbWgyT2JqKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJtZWpiIGhvbWUgb2JqIDMgPSAiICsgbWgzT2JqKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtZWpiIGhvbWUgb2JqIDEgPSAiICsgbWgxT2JqKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtZWpiIGhvbWUgb2JqIDIgPSAiICsgbWgyT2JqKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtZWpiIGhvbWUgb2JqIDMgPSAiICsgbWgzT2JqKTsKIAotCSAgICBIZWxsbyBoZWxsbyA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU2luZ2xldG9uQmVhbiIpOworICAgICAgICBIZWxsbyBoZWxsbyA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU2luZ2xldG9uQmVhbiIpOwogCiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTaW5nbGV0b24gc2F5cyA6ICIgKyBoZWxsby5oZWxsbygpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTaW5nbGV0b24gc2F5cyA6ICIgKyBoZWxsby5oZWxsbygpKTsKICAgICAgICAgICAgIGhlbGxvLmFzeW5jKCk7CiAKLQkgICAgdHJ5IHsKLQkJaGVsbG8udGVzdF9FcnJfb3IoImZvbyIsICJiYXIiKTsKLQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkV4cGVjdGVkIEVKQkV4Y2VwdGlvbiIpOwotCSAgICB9IGNhdGNoKEVKQkV4Y2VwdGlvbiBlKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIEVKQkV4Y2VwdGlvbiBhZnRlciBqYXZhLmxhbmcuRXJyb3IgdGhyb3duIGZyb20gZWpiIik7Ci0JICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaGVsbG8udGVzdF9FcnJfb3IoImZvbyIsICJiYXIiKTsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkV4cGVjdGVkIEVKQkV4Y2VwdGlvbiIpOworICAgICAgICB9IGNhdGNoKEVKQkV4Y2VwdGlvbiBlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIEVKQkV4Y2VwdGlvbiBhZnRlciBqYXZhLmxhbmcuRXJyb3IgdGhyb3duIGZyb20gZWpiIik7CisgICAgICAgIH0KIAotCSAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOwogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9oZWxsby9jbGllbnQvQ2xpZW50Mi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9oZWxsby9jbGllbnQvQ2xpZW50Mi5qYXZhCmluZGV4IDliYjg3ZWYuLjgzMGNlMzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vaGVsbG8vY2xpZW50L0NsaWVudDIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2hlbGxvL2NsaWVudC9DbGllbnQyLmphdmEKQEAgLTIzLDI5ICsyMywyOSBAQAogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCi0JU3RyaW5nIGhvc3Q7Ci0JIFN0cmluZyBwb3J0OworICAgIFN0cmluZyBob3N0OworICAgICBTdHJpbmcgcG9ydDsKIAotCXRyeSB7Ci0JICAgIFByb3BlcnRpZXMgcCA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JICAgIGlmKCBhcmdzLmxlbmd0aCA+IDAgKSB7Ci0JCWhvc3QgPSBhcmdzWzBdOwotCQlwLnB1dCgib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsSG9zdCIsIGhvc3QpOwotCSAgICB9CisgICAgdHJ5IHsKKyAgICAgICAgUHJvcGVydGllcyBwID0gbmV3IFByb3BlcnRpZXMoKTsKKyAgICAgICAgaWYoIGFyZ3MubGVuZ3RoID4gMCApIHsKKyAgICAgICAgaG9zdCA9IGFyZ3NbMF07CisgICAgICAgIHAucHV0KCJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxIb3N0IiwgaG9zdCk7CisgICAgICAgIH0KIAotCSAgICBpZiggYXJncy5sZW5ndGggPiAxICkgewotCQlwb3J0ID0gYXJnc1sxXTsKLQkJcC5wdXQoIm9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiLCBwb3J0KTsKLQkgICAgfQorICAgICAgICBpZiggYXJncy5sZW5ndGggPiAxICkgeworICAgICAgICBwb3J0ID0gYXJnc1sxXTsKKyAgICAgICAgcC5wdXQoIm9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiLCBwb3J0KTsKKyAgICAgICAgfQogCi0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KHApOwotCSAgICBIZWxsbyBoID0gKEhlbGxvKSBpYy5sb29rdXAoIkhII2NvbS5hY21lLkhlbGxvIik7Ci0JICAgIGguaGVsbG8oKTsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQocCk7CisgICAgICAgIEhlbGxvIGggPSAoSGVsbG8pIGljLmxvb2t1cCgiSEgjY29tLmFjbWUuSGVsbG8iKTsKKyAgICAgICAgaC5oZWxsbygpOwogCiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vaGVsbG8vZWpiL0Zvb0VudGl0eS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9oZWxsby9lamIvRm9vRW50aXR5LmphdmEKaW5kZXggMmJkZDJhYi4uOGY0NGM5NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9oZWxsby9lamIvRm9vRW50aXR5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9oZWxsby9lamIvRm9vRW50aXR5LmphdmEKQEAgLTI0LDggKzI0LDggQEAKIAogQEVudGl0eQogcHVibGljIGNsYXNzIEZvb0VudGl0eSB7Ci0gICAgCi0gICAgQElkIAorCisgICAgQElkCiAgICAgQEdlbmVyYXRlZFZhbHVlCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKQEAgLTMzLDEwICszMywxMCBAQAogICAgIHB1YmxpYyBGb29FbnRpdHkoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgRm9vRW50aXR5KCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9oZWxsby9lamIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9oZWxsby9lamIvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IDYxYjcyZjEuLmMyM2Y3Y2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vaGVsbG8vZWpiL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2hlbGxvL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTU0LDcgKzU0LDcgQEAKICAgICBNYW5hZ2VtZW50SG9tZSBtSG9tZTI7CiAgICAgKi8KIAotICAgIAorCiAKIAogICAgIC8vTUVKQkhvbWUgbUhvbWUyOwpAQCAtNjMsMzAgKzYzLDMwIEBACiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjppbml0KCkiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcmIgPSAiICsgb3JiKTsKLQlpZiggb3JiID09IG51bGwgKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIm51bGwgT1JCIik7Ci0JfQotCXRyeSB7Ci0JICAgIC8vIHNhbWUgcHJvYmxlbSBNYW5hZ2VtZW50SG9tZSBtSG9tZUwgPSAoTWFuYWdlbWVudEhvbWUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpjb21wL2Vudi9tZWpiIik7Ci0JICAgIC8vIHNhbWUgcHJvYmxlbSBNYW5hZ2VtZW50SG9tZSBtSG9tZUwyID0gKE1hbmFnZW1lbnRIb21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsL21lamIvTUVKQkJlYW4iKTsKLQkgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCJtSG9tZUwgPSAiICsgbUhvbWVMKTsKLQkgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCJtSG9tZUwyID0gIiArIG1Ib21lTDIpOwotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLQl9CisgICAgaWYoIG9yYiA9PSBudWxsICkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJudWxsIE9SQiIpOworICAgIH0KKyAgICB0cnkgeworICAgICAgICAvLyBzYW1lIHByb2JsZW0gTWFuYWdlbWVudEhvbWUgbUhvbWVMID0gKE1hbmFnZW1lbnRIb21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Y29tcC9lbnYvbWVqYiIpOworICAgICAgICAvLyBzYW1lIHByb2JsZW0gTWFuYWdlbWVudEhvbWUgbUhvbWVMMiA9IChNYW5hZ2VtZW50SG9tZSkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC9tZWpiL01FSkJCZWFuIik7CisgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigibUhvbWVMID0gIiArIG1Ib21lTCk7CisgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigibUhvbWVMMiA9ICIgKyBtSG9tZUwyKTsKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CisgICAgfQogCi0JLy8gU3lzdGVtLm91dC5wcmludGxuKCJtSG9tZTEgPSAiICsgbUhvbWUxKTsKLQkvLwlTeXN0ZW0ub3V0LnByaW50bG4oIm1Ib21lMiA9ICIgKyBtSG9tZTIpOworICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigibUhvbWUxID0gIiArIG1Ib21lMSk7CisgICAgLy8gICAgU3lzdGVtLm91dC5wcmludGxuKCJtSG9tZTIgPSAiICsgbUhvbWUyKTsKIAogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpoZWxsbygpIik7Ci0JcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aGVsbG8oKSIpOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0X0Vycl9vcihTdHJpbmcgczEsIFN0cmluZyBzMikgewotCXRocm93IG5ldyBFcnJvcigidGVzdCBqYXZhLmxhbmcuRXJyb3IiKTsKKyAgICB0aHJvdyBuZXcgRXJyb3IoInRlc3QgamF2YS5sYW5nLkVycm9yIik7CiAgICAgfQogCiAgICAgQEFzeW5jaHJvbm91cwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9tdWx0aS1tb2R1bGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vbXVsdGktbW9kdWxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGRkYWI2ZS4uOGNmYWY2OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9tdWx0aS1tb2R1bGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL211bHRpLW1vZHVsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNiArMTUsMTYgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMS1zaW5nbGV0b24tbXVsdGltb2R1bGUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uc3VuLmRldnRlc3QuY2xpZW50LkNsaWVudCIvPgogCiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9tdWx0aS1tb2R1bGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9tdWx0aS1tb2R1bGUvYnVpbGQueG1sCmluZGV4IGU4NTFjNWEuLjA3ZDMxODggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vbXVsdGktbW9kdWxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL211bHRpLW1vZHVsZS9idWlsZC54bWwKQEAgLTMwLDE0ICszMCwxNCBAQAogICAgICZ0ZXN0cHJvcGVydGllczsKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxkZXBsb3kiPgotCTxhbnRjYWxsIHRhcmdldD0icnVuIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1biIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDksNzcgKzQ5LDc3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPCEtLSBwYWNrYWdlIG91cnNlbHZlcyB0byBpbmNsdWRlIHBlcnNpc3RlbmNlLnhtbCAtLT4KLQk8ZWNobyBtZXNzYWdlPSJBc3NlbWJsZSBkaXI6ICR7YXNzZW1ibGUuZGlyfSAiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJBc3NlbWJsZSBkaXI6ICR7YXNzZW1ibGUuZGlyfSAiLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovKlRyYWNrZXIuY2xhc3MsICoqL0luaXRPcmRlclRyYWNrZXJCZWFuLmNsYXNzIj4KICAgICAgICAgPC9qYXI+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiMS5qYXIiIAotICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIxLmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi8qTW9kMS5jbGFzcywgKiovTG9jYWxJbml0VHJhY2tlci5jbGFzcyI+CiAgICAgICAgIDwvamFyPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYjIuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiMi5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovKk1vZDIuY2xhc3MsICoqL0xvY2FsSW5pdFRyYWNrZXIuY2xhc3MiPgogICAgICAgICA8L2phcj4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCi0JICAgICBtYW5pZmVzdD0iLi9jbGllbnQvTUFOSUZFU1QuTUYiCisgICAgICAgICBtYW5pZmVzdD0iLi9jbGllbnQvTUFOSUZFU1QuTUYiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi8qVHJhY2tlci5jbGFzcywgKiovKkNsaWVudC5jbGFzcyI+CiAgICAgICAgIDwvamFyPgogCiA8IS0tCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KLSAgICAJCTxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIAotICAgICAgCQkJdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgCQk8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIgCi0gICAgICAJCQl2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPi9zcGFjZS93b3JrL3YzL2FwcHNlcnYtdGVzdHMvYnVpbGQvbW9kdWxlL2FyY2hpdmUvZWpiLWVqYjMxLXNpbmdsZXRvbi1tdWx0aW1vZHVsZS1lamIuamFyCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIgorICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIKKyAgICAgICAgICAgICAgICAgIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+L3NwYWNlL3dvcmsvdjMvYXBwc2Vydi10ZXN0cy9idWlsZC9tb2R1bGUvYXJjaGl2ZS9lamItZWpiMzEtc2luZ2xldG9uLW11bHRpbW9kdWxlLWVqYi5qYXIKICAgICAgICAgPC9hbnRjYWxsPgogLS0+Ci0gIAk8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgotICAJPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gIAk8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgIAotICAJPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgIAlmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gIAk8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+IAotICAgIAk8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+Ci0gICAgICAJPGluY2x1ZGUgbmFtZT0iKmVqYi5qYXIiLz4KLSAgICAgIAk8aW5jbHVkZSBuYW1lPSIqZWpiMS5qYXIiLz4KLSAgICAgIAk8aW5jbHVkZSBuYW1lPSIqZWpiMi5qYXIiLz4KLSAgICAgIAk8aW5jbHVkZSBuYW1lPSIqY2xpZW50LmphciIvPgotICAgIAk8L2ZpbGVzZXQ+Ci0gICAgCTxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotCQk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci0JCTxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgotICAgIAk8L2ZpbGVzZXQ+Ci0gICAgCTxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiBpbmNsdWRlcz0ibGliL3JlcG9ydGVyLmphciIvPgotICAJPC9qYXI+ICAgICAgICAKKyAgICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CisgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KKyAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CisgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgorICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CisgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKmVqYi5qYXIiLz4KKyAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqZWpiMS5qYXIiLz4KKyAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqZWpiMi5qYXIiLz4KKyAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqY2xpZW50LmphciIvPgorICAgICAgICA8L2ZpbGVzZXQ+CisgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgorICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgorICAgICAgICA8L2ZpbGVzZXQ+CisgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiBpbmNsdWRlcz0ibGliL3JlcG9ydGVyLmphciIvPgorICAgICAgPC9qYXI+CiAKLSAgICA8L3RhcmdldD4gICAgIAotICAgICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveWVkLmFwcCIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgIDxhcmcgbGluZT0iZGVwbG95Ii8+CiAgICAgPGFyZyBsaW5lPSItLWZvcmNlPXRydWUiLz4KLSAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+ICAgIAorICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICA8YXJnIGxpbmU9IiR7ZGVwbG95ZWQuYXBwfSIvPgogICA8L2V4ZWM+CiAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveW1lbnQgb24gdGFyZ2V0IHNlcnZlciAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSBzdWNjZXNzZnVsIi8+Ci0gICAgICAgIAotICAgIDwvdGFyZ2V0PiAKKworICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGVjaG8gbWVzc2FnZT0ic2UuY2xpZW50OiAke3NlLmNsaWVudH0iLz4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9tdWx0aS1tb2R1bGUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9tdWx0aS1tb2R1bGUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGU0NjBjYmYuLjU2NDY5OTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vbXVsdGktbW9kdWxlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL211bHRpLW1vZHVsZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMxLDIzICszMSwyMyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotCXByaXZhdGUgc3RhdGljIFN0cmluZ1tdIEJFQU5fTkFNRVMgPSBuZXcgU3RyaW5nW10gewotCQkib3JnLmdsYXNzZmlzaC5kZXZ0ZXN0LmVqYjMxLnNpbmdsZXRvbi5tdWx0aW1vZHVsZS5zZXJ2bGV0LkluaXRPcmRlclRyYWNrZXJCZWFuIiwKLQkJIm9yZy5nbGFzc2Zpc2guZGV2dGVzdC5lamIzMS5zaW5nbGV0b24ubXVsdGltb2R1bGUubW9kMS5CZWFuQV9Nb2QxIiwKLQkJIm9yZy5nbGFzc2Zpc2guZGV2dGVzdC5lamIzMS5zaW5nbGV0b24ubXVsdGltb2R1bGUubW9kMS5Sb290QmVhbl9Nb2QxIiwKLQkJIm9yZy5nbGFzc2Zpc2guZGV2dGVzdC5lamIzMS5zaW5nbGV0b24ubXVsdGltb2R1bGUubW9kMi5CZWFuQV9Nb2QyIiwKLQkJIm9yZy5nbGFzc2Zpc2guZGV2dGVzdC5lamIzMS5zaW5nbGV0b24ubXVsdGltb2R1bGUubW9kMi5Sb290QmVhbl9Nb2QyIgotCX07CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gQkVBTl9OQU1FUyA9IG5ldyBTdHJpbmdbXSB7CisgICAgICAgICJvcmcuZ2xhc3NmaXNoLmRldnRlc3QuZWpiMzEuc2luZ2xldG9uLm11bHRpbW9kdWxlLnNlcnZsZXQuSW5pdE9yZGVyVHJhY2tlckJlYW4iLAorICAgICAgICAib3JnLmdsYXNzZmlzaC5kZXZ0ZXN0LmVqYjMxLnNpbmdsZXRvbi5tdWx0aW1vZHVsZS5tb2QxLkJlYW5BX01vZDEiLAorICAgICAgICAib3JnLmdsYXNzZmlzaC5kZXZ0ZXN0LmVqYjMxLnNpbmdsZXRvbi5tdWx0aW1vZHVsZS5tb2QxLlJvb3RCZWFuX01vZDEiLAorICAgICAgICAib3JnLmdsYXNzZmlzaC5kZXZ0ZXN0LmVqYjMxLnNpbmdsZXRvbi5tdWx0aW1vZHVsZS5tb2QyLkJlYW5BX01vZDIiLAorICAgICAgICAib3JnLmdsYXNzZmlzaC5kZXZ0ZXN0LmVqYjMxLnNpbmdsZXRvbi5tdWx0aW1vZHVsZS5tb2QyLlJvb3RCZWFuX01vZDIiCisgICAgfTsKIAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTklUX09SREVSX0JFQU4gPSBCRUFOX05BTUVTWzBdOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTklUX09SREVSX0JFQU4gPSBCRUFOX05BTUVTWzBdOwogCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJFQU5fTU9EMSA9IEJFQU5fTkFNRVNbMV07CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJFQU5fTU9EMSA9IEJFQU5fTkFNRVNbMV07CiAKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9PVDEgPSBCRUFOX05BTUVTWzJdOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBST09UMSA9IEJFQU5fTkFNRVNbMl07CiAKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkVBTl9NT0QyID0gQkVBTl9OQU1FU1szXTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkVBTl9NT0QyID0gQkVBTl9OQU1FU1szXTsKIAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBST09UMiA9IEJFQU5fTkFNRVNbNF07CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJPT1QyID0gQkVBTl9OQU1FU1s0XTsKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwpAQCAtNjUsMzcgKzY1LDM3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3QoKSB7Ci0JdHJ5IHsKLSAKLQkJU3RyaW5nIGxvb2t1cE5hbWUgPSAiamF2YTpnbG9iYWwvZWpiLWVqYjMxLXNpbmdsZXRvbi1tdWx0aW1vZHVsZUFwcC9lamItZWpiMzEtc2luZ2xldG9uLW11bHRpbW9kdWxlLWVqYi9Jbml0T3JkZXJUcmFja2VyQmVhbiFvcmcuZ2xhc3NmaXNoLmRldnRlc3QuZWpiMzEuc2luZ2xldG9uLm11bHRpbW9kdWxlLnNlcnZsZXQuUmVtb3RlSW5pdFRyYWNrZXIiOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiKioqICIgKyBsb29rdXBOYW1lICsgIiAqKioiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwotCQl0cmFja2VyID0gKFJlbW90ZUluaXRUcmFja2VyKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAobG9va3VwTmFtZSk7Ci0JICAgIAotCQlNYXA8U3RyaW5nLCBJbnRlZ2VyPiBpbml0T3JkZXIgPSB0cmFja2VyLmdldEluaXRpYWxpemVkTmFtZXMoKTsKLQkJYm9vbGVhbiByZXN1bHQgPSBpbml0T3JkZXIuc2l6ZSgpID09IEJFQU5fTkFNRVMubGVuZ3RoOworICAgIHRyeSB7CiAKLQkJaW50IGIxbTEgPSBpbml0T3JkZXIuZ2V0KEJFQU5fTU9EMSk7Ci0JCWludCBiMm0yID0gaW5pdE9yZGVyLmdldChCRUFOX01PRDIpOwotCQlpbnQgcm9vdDEgPSBpbml0T3JkZXIuZ2V0KFJPT1QxKTsKLQkJaW50IHJvb3QyID0gaW5pdE9yZGVyLmdldChST09UMik7CisgICAgICAgIFN0cmluZyBsb29rdXBOYW1lID0gImphdmE6Z2xvYmFsL2VqYi1lamIzMS1zaW5nbGV0b24tbXVsdGltb2R1bGVBcHAvZWpiLWVqYjMxLXNpbmdsZXRvbi1tdWx0aW1vZHVsZS1lamIvSW5pdE9yZGVyVHJhY2tlckJlYW4hb3JnLmdsYXNzZmlzaC5kZXZ0ZXN0LmVqYjMxLnNpbmdsZXRvbi5tdWx0aW1vZHVsZS5zZXJ2bGV0LlJlbW90ZUluaXRUcmFja2VyIjsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiAiICsgbG9va3VwTmFtZSArICIgKioqIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgICAgdHJhY2tlciA9IChSZW1vdGVJbml0VHJhY2tlcikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKGxvb2t1cE5hbWUpOwogCi0JCWJvb2xlYW4gdGVzdDEgPSBiMW0xIDwgcm9vdDE7Ci0JCWJvb2xlYW4gdGVzdDIgPSByb290MSA8IHJvb3QyOwotCQlib29sZWFuIHRlc3QzID0gYjJtMiA8IHJvb3QyOwotCQlmb3IgKFN0cmluZyBrZXkgOiBpbml0T3JkZXIua2V5U2V0KCkpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihrZXkgKyAiOiAiICsgaW5pdE9yZGVyLmdldChrZXkpKTsKLQkJfQorICAgICAgICBNYXA8U3RyaW5nLCBJbnRlZ2VyPiBpbml0T3JkZXIgPSB0cmFja2VyLmdldEluaXRpYWxpemVkTmFtZXMoKTsKKyAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBpbml0T3JkZXIuc2l6ZSgpID09IEJFQU5fTkFNRVMubGVuZ3RoOwogCi0JCXJlc3VsdCA9IHJlc3VsdCAmJiB0ZXN0MSAmJiB0ZXN0MiAmJiB0ZXN0MzsKKyAgICAgICAgaW50IGIxbTEgPSBpbml0T3JkZXIuZ2V0KEJFQU5fTU9EMSk7CisgICAgICAgIGludCBiMm0yID0gaW5pdE9yZGVyLmdldChCRUFOX01PRDIpOworICAgICAgICBpbnQgcm9vdDEgPSBpbml0T3JkZXIuZ2V0KFJPT1QxKTsKKyAgICAgICAgaW50IHJvb3QyID0gaW5pdE9yZGVyLmdldChST09UMik7CiAKLSAgICAgICAgCXN0YXQuYWRkU3RhdHVzKCJFSkIgc2luZ2xldG9uLWNyb3NzLW1vZHVsZS1kZXBlbmRlbmN5IiwKLQkJCShyZXN1bHQgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKLQl9IGNhdGNoIChUaHJvd2FibGUgdGgpIHsKLQkJdGgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIAlzdGF0LmFkZFN0YXR1cygiRUpCIHNpbmdsZXRvbi1jcm9zcy1tb2R1bGUtZGVwZW5kZW5jeSIsIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBib29sZWFuIHRlc3QxID0gYjFtMSA8IHJvb3QxOworICAgICAgICBib29sZWFuIHRlc3QyID0gcm9vdDEgPCByb290MjsKKyAgICAgICAgYm9vbGVhbiB0ZXN0MyA9IGIybTIgPCByb290MjsKKyAgICAgICAgZm9yIChTdHJpbmcga2V5IDogaW5pdE9yZGVyLmtleVNldCgpKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oa2V5ICsgIjogIiArIGluaXRPcmRlci5nZXQoa2V5KSk7CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgdGVzdDEgJiYgdGVzdDIgJiYgdGVzdDM7CisKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJFSkIgc2luZ2xldG9uLWNyb3NzLW1vZHVsZS1kZXBlbmRlbmN5IiwKKyAgICAgICAgICAgIChyZXN1bHQgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKKyAgICB9IGNhdGNoIChUaHJvd2FibGUgdGgpIHsKKyAgICAgICAgdGgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiRUpCIHNpbmdsZXRvbi1jcm9zcy1tb2R1bGUtZGVwZW5kZW5jeSIsIHN0YXQuRkFJTCk7CisgICAgfQogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9tdWx0aS1tb2R1bGUvZWpiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0L2VqYjMxL3NpbmdsZXRvbi9tb2QxL1Jvb3RCZWFuX01vZDEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vbXVsdGktbW9kdWxlL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vbW9kMS9Sb290QmVhbl9Nb2QxLmphdmEKaW5kZXggZjEwYjYyZi4uODk5YmRkMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9tdWx0aS1tb2R1bGUvZWpiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0L2VqYjMxL3NpbmdsZXRvbi9tb2QxL1Jvb3RCZWFuX01vZDEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL211bHRpLW1vZHVsZS9lamIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3QvZWpiMzEvc2luZ2xldG9uL21vZDEvUm9vdEJlYW5fTW9kMS5qYXZhCkBAIC00Niw1ICs0Niw1IEBACiAgICAgcHVibGljIHZvaWQgYWZ0ZXJJbml0KCkgewogICAgICAgICB0cmFja2VyLmFkZCh0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKICAgICB9Ci0gCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vbXVsdGktbW9kdWxlL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vbW9kMi9CZWFuQV9Nb2QyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL211bHRpLW1vZHVsZS9lamIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3QvZWpiMzEvc2luZ2xldG9uL21vZDIvQmVhbkFfTW9kMi5qYXZhCmluZGV4IGI5Njg2OGYuLmE4ZTgwMTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vbXVsdGktbW9kdWxlL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vbW9kMi9CZWFuQV9Nb2QyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9tdWx0aS1tb2R1bGUvZWpiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0L2VqYjMxL3NpbmdsZXRvbi9tb2QyL0JlYW5BX01vZDIuamF2YQpAQCAtMzcsMTAgKzM3LDEwIEBACiAKICAgICBARUpCCiAgICAgTG9jYWxJbml0VHJhY2tlciB0cmFja2VyOwotICAgIAorCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBhZnRlckluaXQoKSB7CiAgICAgICAgIHRyYWNrZXIuYWRkKHRoaXMuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwogICAgIH0KLSAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9tdWx0aS1tb2R1bGUvZWpiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0L2VqYjMxL3NpbmdsZXRvbi9tb2QyL1Jvb3RCZWFuX01vZDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vbXVsdGktbW9kdWxlL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vbW9kMi9Sb290QmVhbl9Nb2QyLmphdmEKaW5kZXggYTk3MzhiMS4uMmM5ODA4ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9tdWx0aS1tb2R1bGUvZWpiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0L2VqYjMxL3NpbmdsZXRvbi9tb2QyL1Jvb3RCZWFuX01vZDIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL211bHRpLW1vZHVsZS9lamIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3QvZWpiMzEvc2luZ2xldG9uL21vZDIvUm9vdEJlYW5fTW9kMi5qYXZhCkBAIC00Nyw1ICs0Nyw1IEBACiAgICAgcHVibGljIHZvaWQgYWZ0ZXJJbml0KCkgewogICAgICAgICB0cmFja2VyLmFkZCh0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKICAgICB9Ci0gCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vbXVsdGktbW9kdWxlL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vc2VydmxldC9Mb2NhbEluaXRUcmFja2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL211bHRpLW1vZHVsZS9lamIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3QvZWpiMzEvc2luZ2xldG9uL3NlcnZsZXQvTG9jYWxJbml0VHJhY2tlci5qYXZhCmluZGV4IGRkNDliNGQuLmNmMzA2ZWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vbXVsdGktbW9kdWxlL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vc2VydmxldC9Mb2NhbEluaXRUcmFja2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9tdWx0aS1tb2R1bGUvZWpiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0L2VqYjMxL3NpbmdsZXRvbi9zZXJ2bGV0L0xvY2FsSW5pdFRyYWNrZXIuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiBATG9jYWwKIHB1YmxpYyBpbnRlcmZhY2UgTG9jYWxJbml0VHJhY2tlciB7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhZGQoU3RyaW5nIGVudHJ5KTsKIAogICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBJbnRlZ2VyPiBnZXRJbml0aWFsaXplZE5hbWVzKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL3RocmVlbW9kdWxlcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi90aHJlZW1vZHVsZXMvYnVpbGQucHJvcGVydGllcwppbmRleCA5NzFlMTJmLi5jOTg0MWRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL3RocmVlbW9kdWxlcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vdGhyZWVtb2R1bGVzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE2ICsxNSwxNiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLXNpbmdsZXRvbi10aHJlZW1vZHVsZXMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uc3VuLmRldnRlc3QuY2xpZW50LkNsaWVudCIvPgogCiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi90aHJlZW1vZHVsZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi90aHJlZW1vZHVsZXMvYnVpbGQueG1sCmluZGV4IGJhNzg3ZTUuLmU5NDIzZWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vdGhyZWVtb2R1bGVzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL3RocmVlbW9kdWxlcy9idWlsZC54bWwKQEAgLTMwLDE0ICszMCwxNCBAQAogICAgICZ0ZXN0cHJvcGVydGllczsKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxkZXBsb3kiPgotCTxhbnRjYWxsIHRhcmdldD0icnVuIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1biIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDksNzcgKzQ5LDc3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPCEtLSBwYWNrYWdlIG91cnNlbHZlcyB0byBpbmNsdWRlIHBlcnNpc3RlbmNlLnhtbCAtLT4KLQk8ZWNobyBtZXNzYWdlPSJBc3NlbWJsZSBkaXI6ICR7YXNzZW1ibGUuZGlyfSAiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJBc3NlbWJsZSBkaXI6ICR7YXNzZW1ibGUuZGlyfSAiLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovKlRyYWNrZXIuY2xhc3MsICoqL0luaXRPcmRlclRyYWNrZXJCZWFuLmNsYXNzIj4KICAgICAgICAgPC9qYXI+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiMS5qYXIiIAotICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIxLmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi8qTW9kMS5jbGFzcywgKiovTG9jYWxJbml0VHJhY2tlci5jbGFzcyI+CiAgICAgICAgIDwvamFyPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYjIuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiMi5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovKk1vZDIuY2xhc3MsICoqL0xvY2FsSW5pdFRyYWNrZXIuY2xhc3MiPgogICAgICAgICA8L2phcj4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCi0JICAgICBtYW5pZmVzdD0iLi9jbGllbnQvTUFOSUZFU1QuTUYiCisgICAgICAgICBtYW5pZmVzdD0iLi9jbGllbnQvTUFOSUZFU1QuTUYiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi8qVHJhY2tlci5jbGFzcywgKiovKkNsaWVudC5jbGFzcyI+CiAgICAgICAgIDwvamFyPgogCiA8IS0tCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KLSAgICAJCTxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIAotICAgICAgCQkJdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgCQk8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIgCi0gICAgICAJCQl2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPi9zcGFjZS93b3JrL3YzL2FwcHNlcnYtdGVzdHMvYnVpbGQvbW9kdWxlL2FyY2hpdmUvZWpiLWVqYjMxLXNpbmdsZXRvbi10aHJlZW1vZHVsZXMtZWpiLmphcgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIKKyAgICAgICAgICAgICAgICAgIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiCisgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPi9zcGFjZS93b3JrL3YzL2FwcHNlcnYtdGVzdHMvYnVpbGQvbW9kdWxlL2FyY2hpdmUvZWpiLWVqYjMxLXNpbmdsZXRvbi10aHJlZW1vZHVsZXMtZWpiLmphcgogICAgICAgICA8L2FudGNhbGw+CiAtLT4KLSAgCTxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+Ci0gIAk8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgCTxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+ICAgCi0gIAk8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiAgCWZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgCTxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4gCi0gICAgCTxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KLSAgICAgIAk8aW5jbHVkZSBuYW1lPSIqZWpiLmphciIvPgotICAgICAgCTxpbmNsdWRlIG5hbWU9IiplamIxLmphciIvPgotICAgICAgCTxpbmNsdWRlIG5hbWU9IiplamIyLmphciIvPgotICAgICAgCTxpbmNsdWRlIG5hbWU9IipjbGllbnQuamFyIi8+Ci0gICAgCTwvZmlsZXNldD4KLSAgICAJPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+Ci0JCTxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLQkJPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+Ci0gICAgCTwvZmlsZXNldD4KLSAgICAJPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0iIGluY2x1ZGVzPSJsaWIvcmVwb3J0ZXIuamFyIi8+Ci0gIAk8L2phcj4gICAgICAgIAorICAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KKyAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgorICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+CisgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KKyAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqZWpiLmphciIvPgorICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiplamIxLmphciIvPgorICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiplamIyLmphciIvPgorICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IipjbGllbnQuamFyIi8+CisgICAgICAgIDwvZmlsZXNldD4KKyAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+CisgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgIDwvZmlsZXNldD4KKyAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0iIGluY2x1ZGVzPSJsaWIvcmVwb3J0ZXIuamFyIi8+CisgICAgICA8L2phcj4KIAotICAgIDwvdGFyZ2V0PiAgICAgCi0gICAgICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0iZGVwbG95ZWQuYXBwIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIi8+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgPGFyZyBsaW5lPSJkZXBsb3kiLz4KICAgICA8YXJnIGxpbmU9Ii0tZm9yY2U9dHJ1ZSIvPgotICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4gICAgCisgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgIDxhcmcgbGluZT0iJHtkZXBsb3llZC5hcHB9Ii8+CiAgIDwvZXhlYz4KICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95bWVudCBvbiB0YXJnZXQgc2VydmVyICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IHN1Y2Nlc3NmdWwiLz4KLSAgICAgICAgCi0gICAgPC90YXJnZXQ+IAorCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICA8ZWNobyBtZXNzYWdlPSJzZS5jbGllbnQ6ICR7c2UuY2xpZW50fSIvPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKIAogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL3RocmVlbW9kdWxlcy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL3RocmVlbW9kdWxlcy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYWViMzhjNC4uYWQ4ODgwMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi90aHJlZW1vZHVsZXMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vdGhyZWVtb2R1bGVzL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzMsMTMgKzMzLDEzIEBACiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAogCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gRVhQRUNURURfT1JERVIgPSBuZXcgU3RyaW5nW10gewotCQkib3JnLmdsYXNzZmlzaC5kZXZ0ZXN0LmVqYjMxLnNpbmdsZXRvbi5zZXJ2bGV0LkluaXRPcmRlclRyYWNrZXJCZWFuIiwKLQkJIm9yZy5nbGFzc2Zpc2guZGV2dGVzdC5lamIzMS5zaW5nbGV0b24ubW9kMS5CZWFuQV9Nb2QxIiwKLQkJIm9yZy5nbGFzc2Zpc2guZGV2dGVzdC5lamIzMS5zaW5nbGV0b24ubW9kMS5Sb290QmVhbl9Nb2QxIiwKLQkJIm9yZy5nbGFzc2Zpc2guZGV2dGVzdC5lamIzMS5zaW5nbGV0b24ubW9kMi5CZWFuQV9Nb2QyIiwKLQkJIm9yZy5nbGFzc2Zpc2guZGV2dGVzdC5lamIzMS5zaW5nbGV0b24ubW9kMi5Sb290QmVhbl9Nb2QyIgotCX07CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gRVhQRUNURURfT1JERVIgPSBuZXcgU3RyaW5nW10geworICAgICAgICAib3JnLmdsYXNzZmlzaC5kZXZ0ZXN0LmVqYjMxLnNpbmdsZXRvbi5zZXJ2bGV0LkluaXRPcmRlclRyYWNrZXJCZWFuIiwKKyAgICAgICAgIm9yZy5nbGFzc2Zpc2guZGV2dGVzdC5lamIzMS5zaW5nbGV0b24ubW9kMS5CZWFuQV9Nb2QxIiwKKyAgICAgICAgIm9yZy5nbGFzc2Zpc2guZGV2dGVzdC5lamIzMS5zaW5nbGV0b24ubW9kMS5Sb290QmVhbl9Nb2QxIiwKKyAgICAgICAgIm9yZy5nbGFzc2Zpc2guZGV2dGVzdC5lamIzMS5zaW5nbGV0b24ubW9kMi5CZWFuQV9Nb2QyIiwKKyAgICAgICAgIm9yZy5nbGFzc2Zpc2guZGV2dGVzdC5lamIzMS5zaW5nbGV0b24ubW9kMi5Sb290QmVhbl9Nb2QyIgorICAgIH07CiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKQEAgLTU3LDI4ICs1NywyOCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB0ZXN0KCkgewotCXRyeSB7Ci0gCi0JCVN0cmluZyBsb29rdXBOYW1lID0gImphdmE6Z2xvYmFsL2VqYi1lamIzMS1zaW5nbGV0b24tdGhyZWVtb2R1bGVzQXBwL2VqYi1lamIzMS1zaW5nbGV0b24tdGhyZWVtb2R1bGVzLWVqYi9Jbml0T3JkZXJUcmFja2VyQmVhbiFvcmcuZ2xhc3NmaXNoLmRldnRlc3QuZWpiMzEuc2luZ2xldG9uLnNlcnZsZXQuUmVtb3RlSW5pdFRyYWNrZXIiOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiKioqICIgKyBsb29rdXBOYW1lICsgIiAqKioiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwotCQl0cmFja2VyID0gKFJlbW90ZUluaXRUcmFja2VyKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAobG9va3VwTmFtZSk7Ci0JICAgIAotCQlMaXN0PFN0cmluZz4gYWN0dWFsTGlzdCA9IHRyYWNrZXIuZ2V0SW5pdGlhbGl6ZWROYW1lcygpOwotCQlib29sZWFuIHJlc3VsdCA9IGFjdHVhbExpc3Quc2l6ZSgpID09IEVYUEVDVEVEX09SREVSLmxlbmd0aDsKLQkJZm9yIChpbnQgaT0wOyBpPEVYUEVDVEVEX09SREVSLmxlbmd0aDsgaSsrKSB7Ci0JCQlpZiAoISBFWFBFQ1RFRF9PUkRFUltpXS5lcXVhbHMoYWN0dWFsTGlzdC5nZXQoaSkpKSB7Ci0JCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCQl9Ci0JCX0KKyAgICB0cnkgeworCisgICAgICAgIFN0cmluZyBsb29rdXBOYW1lID0gImphdmE6Z2xvYmFsL2VqYi1lamIzMS1zaW5nbGV0b24tdGhyZWVtb2R1bGVzQXBwL2VqYi1lamIzMS1zaW5nbGV0b24tdGhyZWVtb2R1bGVzLWVqYi9Jbml0T3JkZXJUcmFja2VyQmVhbiFvcmcuZ2xhc3NmaXNoLmRldnRlc3QuZWpiMzEuc2luZ2xldG9uLnNlcnZsZXQuUmVtb3RlSW5pdFRyYWNrZXIiOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqICIgKyBsb29rdXBOYW1lICsgIiAqKioiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworICAgICAgICB0cmFja2VyID0gKFJlbW90ZUluaXRUcmFja2VyKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAobG9va3VwTmFtZSk7CisKKyAgICAgICAgTGlzdDxTdHJpbmc+IGFjdHVhbExpc3QgPSB0cmFja2VyLmdldEluaXRpYWxpemVkTmFtZXMoKTsKKyAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBhY3R1YWxMaXN0LnNpemUoKSA9PSBFWFBFQ1RFRF9PUkRFUi5sZW5ndGg7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxFWFBFQ1RFRF9PUkRFUi5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKCEgRVhQRUNURURfT1JERVJbaV0uZXF1YWxzKGFjdHVhbExpc3QuZ2V0KGkpKSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CiBTeXN0ZW0ub3V0LnByaW50bG4oYWN0dWFsTGlzdCk7Ci0gICAgICAgIAlzdGF0LmFkZFN0YXR1cygiRUpCIHNpbmdsZXRvbi10aHJlZS1tb2R1bGUtZGVwZW5kZW5jeSIsCi0JCQkocmVzdWx0ID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7Ci0JfSBjYXRjaCAoVGhyb3dhYmxlIHRoKSB7Ci0JCXRoLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAJc3RhdC5hZGRTdGF0dXMoIkVKQiBzaW5nbGV0b24tdGhyZWUtbW9kdWxlLWRlcGVuZGVuY3kiLCBzdGF0LkZBSUwpOwotCX0KKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJFSkIgc2luZ2xldG9uLXRocmVlLW1vZHVsZS1kZXBlbmRlbmN5IiwKKyAgICAgICAgICAgIChyZXN1bHQgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKKyAgICB9IGNhdGNoIChUaHJvd2FibGUgdGgpIHsKKyAgICAgICAgdGgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiRUpCIHNpbmdsZXRvbi10aHJlZS1tb2R1bGUtZGVwZW5kZW5jeSIsIHN0YXQuRkFJTCk7CisgICAgfQogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi90aHJlZW1vZHVsZXMvZWpiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0L2VqYjMxL3NpbmdsZXRvbi9tb2QxL1Jvb3RCZWFuX01vZDEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vdGhyZWVtb2R1bGVzL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vbW9kMS9Sb290QmVhbl9Nb2QxLmphdmEKaW5kZXggMWZkYzhlMC4uNjgxZDA0MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi90aHJlZW1vZHVsZXMvZWpiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0L2VqYjMxL3NpbmdsZXRvbi9tb2QxL1Jvb3RCZWFuX01vZDEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL3RocmVlbW9kdWxlcy9lamIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3QvZWpiMzEvc2luZ2xldG9uL21vZDEvUm9vdEJlYW5fTW9kMS5qYXZhCkBAIC00Niw1ICs0Niw1IEBACiAgICAgcHVibGljIHZvaWQgYWZ0ZXJJbml0KCkgewogICAgICAgICB0cmFja2VyLmFkZCh0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKICAgICB9Ci0gCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vdGhyZWVtb2R1bGVzL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vbW9kMi9CZWFuQV9Nb2QyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL3RocmVlbW9kdWxlcy9lamIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3QvZWpiMzEvc2luZ2xldG9uL21vZDIvQmVhbkFfTW9kMi5qYXZhCmluZGV4IDJiNjAyOTUuLjM5MDljYzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vdGhyZWVtb2R1bGVzL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vbW9kMi9CZWFuQV9Nb2QyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi90aHJlZW1vZHVsZXMvZWpiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0L2VqYjMxL3NpbmdsZXRvbi9tb2QyL0JlYW5BX01vZDIuamF2YQpAQCAtMzcsMTAgKzM3LDEwIEBACiAKICAgICBARUpCCiAgICAgTG9jYWxJbml0VHJhY2tlciB0cmFja2VyOwotICAgIAorCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBhZnRlckluaXQoKSB7CiAgICAgICAgIHRyYWNrZXIuYWRkKHRoaXMuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwogICAgIH0KLSAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi90aHJlZW1vZHVsZXMvZWpiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0L2VqYjMxL3NpbmdsZXRvbi9tb2QyL1Jvb3RCZWFuX01vZDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vdGhyZWVtb2R1bGVzL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vbW9kMi9Sb290QmVhbl9Nb2QyLmphdmEKaW5kZXggOTAwZDIxMS4uNjc3ODdjYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi90aHJlZW1vZHVsZXMvZWpiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0L2VqYjMxL3NpbmdsZXRvbi9tb2QyL1Jvb3RCZWFuX01vZDIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL3RocmVlbW9kdWxlcy9lamIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3QvZWpiMzEvc2luZ2xldG9uL21vZDIvUm9vdEJlYW5fTW9kMi5qYXZhCkBAIC00Nyw1ICs0Nyw1IEBACiAgICAgcHVibGljIHZvaWQgYWZ0ZXJJbml0KCkgewogICAgICAgICB0cmFja2VyLmFkZCh0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKICAgICB9Ci0gCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vdGhyZWVtb2R1bGVzL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vc2VydmxldC9Mb2NhbEluaXRUcmFja2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL3RocmVlbW9kdWxlcy9lamIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3QvZWpiMzEvc2luZ2xldG9uL3NlcnZsZXQvTG9jYWxJbml0VHJhY2tlci5qYXZhCmluZGV4IGEyY2NkZDguLmQ0MWJkMGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vdGhyZWVtb2R1bGVzL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vc2VydmxldC9Mb2NhbEluaXRUcmFja2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi90aHJlZW1vZHVsZXMvZWpiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0L2VqYjMxL3NpbmdsZXRvbi9zZXJ2bGV0L0xvY2FsSW5pdFRyYWNrZXIuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiBATG9jYWwKIHB1YmxpYyBpbnRlcmZhY2UgTG9jYWxJbml0VHJhY2tlciB7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhZGQoU3RyaW5nIGVudHJ5KTsKIAogICAgIHB1YmxpYyBMaXN0IGdldEluaXRpYWxpemVkTmFtZXMoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvYnVpbGQucHJvcGVydGllcwppbmRleCBlY2NmMmU3Li5lZDdiZWYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMiArMTUsMjIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMS1hcm91bmR0aW1lb3V0Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNpbXBsZS5jbGllbnQiIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMxLmFyb3VuZHRpbWVvdXQuY2xpZW50LlN0YW5kYWxvbmVDbGllbnQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2J1aWxkLnhtbAppbmRleCBiMTMwZmE3Li5hYTliMDMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TZnVsKi5jbGFzcywqKi9TbGVzcyouY2xhc3MsKiovQ29tbW9uKi5jbGFzcywqKi9JbnRlcmNlcHRvciouY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovU2Z1bC5jbGFzcywqKi9TbGVzcy5jbGFzcywqKi9TZnVsMi5jbGFzcywqKi9TbGVzczMuY2xhc3MsKiovU2xlc3M0LmNsYXNzLCoqL1NsZXNzNS5jbGFzcywqKi9TbGVzczYuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02MSwxMCArNjEsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2NsaWVudC9DbGllbnQuamF2YQppbmRleCA4YjdlMzRmLi40OGNhYWM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC0zNiwxMSArMzYsMTEgQEAKICAgICAgICAgVGhyZWFkLnNsZWVwKDcwMDApOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItZWpiMzEtYXJvdW5kdGltZW91dElEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU2xlc3MzIHNsZXNzMzsKICAgICBwcml2YXRlIHN0YXRpYyBARUpCIFNsZXNzNCBzbGVzczQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBTbGVzczUgc2xlc3M1OwpAQCAtODEsOCArODEsOCBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9Db21tb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL0NvbW1vbi5qYXZhCmluZGV4IGI2ZWIzYTcuLmZhZjJhMWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL0NvbW1vbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL0NvbW1vbi5qYXZhCkBAIC0zNiwxNiArMzYsMTYgQEAKIAogICAgIHN0YXRpYyB2b2lkIGFyb3VuZFRpbWVvdXRDYWxsZWQoSW52b2NhdGlvbkNvbnRleHQgY3R4LCBTdHJpbmcgaWQpIHsKIAotICAgICAgICBMaXN0PFN0cmluZz4gYXJvdW5kdGltZW91dCA9IChMaXN0PFN0cmluZz4pIAorICAgICAgICBMaXN0PFN0cmluZz4gYXJvdW5kdGltZW91dCA9IChMaXN0PFN0cmluZz4pCiAgICAgICAgICAgICBjdHguZ2V0Q29udGV4dERhdGEoKS5nZXQoSU5URVJDRVBUT1JTX1BST1ApOwotICAgICAgICAKKwogICAgICAgICBpZiggYXJvdW5kdGltZW91dCA9PSBudWxsICkgewogICAgICAgICAgICAgYXJvdW5kdGltZW91dCA9IG5ldyBMaW5rZWRMaXN0PFN0cmluZz4oKTsKICAgICAgICAgICAgIGN0eC5nZXRDb250ZXh0RGF0YSgpLnB1dChJTlRFUkNFUFRPUlNfUFJPUCwgYXJvdW5kdGltZW91dCk7CiAgICAgICAgIH0KIAogICAgICAgICBhcm91bmR0aW1lb3V0LmFkZChpZCk7Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQgY2hlY2tSZXN1bHRzKEludm9jYXRpb25Db250ZXh0IGN0eCkgewpAQCAtODIsOSArODIsOSBAQAogICAgICAgICAgICAgZm9yKCBjaGFyIG5leHRDaGFyIDogbWV0aG9kTmFtZVVwcGVyLnRvQ2hhckFycmF5KCkgKSB7CiAgICAgICAgICAgICAgICAgZXhwZWN0ZWQuYWRkKG5leHRDaGFyICsgIiIpOwogICAgICAgICAgICAgfQotICAgICAgICB9IAorICAgICAgICB9CiAKLSAgICAgICAgTGlzdDxTdHJpbmc+IGFjdHVhbCA9IChMaXN0PFN0cmluZz4pIAorICAgICAgICBMaXN0PFN0cmluZz4gYWN0dWFsID0gKExpc3Q8U3RyaW5nPikKICAgICAgICAgICAgIGN0eC5nZXRDb250ZXh0RGF0YSgpLmdldChJTlRFUkNFUFRPUlNfUFJPUCk7CiAKICAgICAgICAgU3RyaW5nIG1zZyA9ICJFeHBlY3RlZCAiICsgZXhwZWN0ZWQgKyAiIGZvciBtZXRob2QgIiArCkBAIC0xMDEsNyArMTAxLDcgQEAKICAgICAgICAgfQogICAgICAgICBjYWxscy5hZGQoaW5mbyk7CiAgICAgfQotICAgCisKICAgICBzdGF0aWMgdm9pZCBjaGVja1Jlc3VsdHMoU3RyaW5nIHMwLCBpbnQgZXhwZWN0ZWQpIHsKICAgICAgICAgTGlzdDxTdHJpbmc+IHJlc3VsdHMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKICAgICAgICAgZm9yIChTdHJpbmcgcyA6IGNhbGxzKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9JbnRlcmNlcHRvckEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL0ludGVyY2VwdG9yQS5qYXZhCmluZGV4IDY5OTY0MGIuLmNjZWJmNWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL0ludGVyY2VwdG9yQS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL0ludGVyY2VwdG9yQS5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiBwdWJsaWMgY2xhc3MgSW50ZXJjZXB0b3JBIHsKIAogICAgIEBSZXNvdXJjZSBTZXNzaW9uQ29udGV4dCBzZXNzaW9uQ3R4OwotICAgIAorCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgcG9zdENvbnN0cnVjdChJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHsKICAgICAgICAgdHJ5IHsKQEAgLTM4LDcgKzM4LDcgQEAKIAogICAgIEBBcm91bmRUaW1lb3V0CiAgICAgT2JqZWN0IGFyb3VuZFRpbWVvdXQoSW52b2NhdGlvbkNvbnRleHQgY3R4KQotCSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogLyoqCiAgICAgICAgIC8vIGFjY2VzcyBpbmplY3RlZCBlbnZpcm9ubWVudCBkZXBlbmRlbmN5CkBAIC00OSwxMCArNDksMTAgQEAKICAgICAgICAgLy8gbG9vayB1cCBlamItcmVmIGRlZmluZWQgd2l0aGluIGRlZmF1bHQgaW50ZXJjZXB0b3IgaW4gZWpiLWphci54bWwKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgU2xlc3MzIHNsZXNzMyA9IChTbGVzczMpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2xlc3MzIik7Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIENvbW1vbi5hcm91bmRUaW1lb3V0Q2FsbGVkKGN0eCwgIkEiKTsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CiAgICAgfQotICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL0ludGVyY2VwdG9yQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvSW50ZXJjZXB0b3JCLmphdmEKaW5kZXggNzQxNDUyZC4uNjkwOTNlOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvSW50ZXJjZXB0b3JCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvSW50ZXJjZXB0b3JCLmphdmEKQEAgLTMyLDkgKzMyLDkgQEAKIAogICAgIC8vIGFyb3VuZC10aW1lb3V0IGRlY2xhcmVkIGluIGVqYi1qYXIueG1sCiAgICAgT2JqZWN0IGFyb3VuZFRpbWVvdXQoSW52b2NhdGlvbkNvbnRleHQgY3R4KQotCSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgQ29tbW9uLmFyb3VuZFRpbWVvdXRDYWxsZWQoY3R4LCAiQiIpOwogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKICAgICB9Ci0gICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvSW50ZXJjZXB0b3JDLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9JbnRlcmNlcHRvckMuamF2YQppbmRleCBkMDE1YjliLi44MmY4ZTQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9JbnRlcmNlcHRvckMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9JbnRlcmNlcHRvckMuamF2YQpAQCAtMzMsOSArMzMsOSBAQAogCiAgICAgQEFyb3VuZFRpbWVvdXQKICAgICBPYmplY3QgYXJvdW5kVGltZW91dChJbnZvY2F0aW9uQ29udGV4dCBjdHgpCi0JICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBDb21tb24uYXJvdW5kVGltZW91dENhbGxlZChjdHgsICJDIik7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwogICAgIH0KLSAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9JbnRlcmNlcHRvckQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL0ludGVyY2VwdG9yRC5qYXZhCmluZGV4IDEwNGVmOGUuLjczZjIxMjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL0ludGVyY2VwdG9yRC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL0ludGVyY2VwdG9yRC5qYXZhCkBAIC0zNSw3ICszNSw3IEBACiAgICAgQEFyb3VuZFRpbWVvdXQKICAgICBAQXJvdW5kSW52b2tlCiAgICAgT2JqZWN0IGFyb3VuZEFsbChJbnZvY2F0aW9uQ29udGV4dCBjdHgpCi0JICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBDb21tb24uYXJvdW5kVGltZW91dENhbGxlZChjdHgsICJEIik7CiAgICAgICAgIE9iamVjdCBpbnN0YW5jZSA9IGN0eC5nZXRUYXJnZXQoKTsKICAgICAgICAgaWYoIGluc3RhbmNlIGluc3RhbmNlb2YgU2xlc3NFSkI1ICkgewpAQCAtNDQsNSArNDQsNSBAQAogCiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwogICAgIH0KLSAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9JbnRlcmNlcHRvckUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL0ludGVyY2VwdG9yRS5qYXZhCmluZGV4IDU2Y2IwY2YuLmFhM2Q1YjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL0ludGVyY2VwdG9yRS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL0ludGVyY2VwdG9yRS5qYXZhCkBAIC0zMyw5ICszMyw5IEBACiAKICAgICBAQXJvdW5kVGltZW91dAogICAgIE9iamVjdCBhcm91bmRUaW1lb3V0KEludm9jYXRpb25Db250ZXh0IGN0eCkKLQkgICAgICAgIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIENvbW1vbi5hcm91bmRUaW1lb3V0Q2FsbGVkKGN0eCwgIkUiKTsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CiAgICAgfQotICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL0ludGVyY2VwdG9yRi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvSW50ZXJjZXB0b3JGLmphdmEKaW5kZXggMzRjOTFhYi4uZWE0Yjg5MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvSW50ZXJjZXB0b3JGLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvSW50ZXJjZXB0b3JGLmphdmEKQEAgLTMzLDkgKzMzLDkgQEAKIAogICAgIEBBcm91bmRUaW1lb3V0CiAgICAgT2JqZWN0IGFyb3VuZFRpbWVvdXQoSW52b2NhdGlvbkNvbnRleHQgY3R4KQotCSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgQ29tbW9uLmFyb3VuZFRpbWVvdXRDYWxsZWQoY3R4LCAiRiIpOwogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKICAgICB9Ci0gICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvSW50ZXJjZXB0b3JHLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9JbnRlcmNlcHRvckcuamF2YQppbmRleCBjNzQ3ZmMxLi40ZjM1YWY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9JbnRlcmNlcHRvckcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9JbnRlcmNlcHRvckcuamF2YQpAQCAtMzQsNyArMzQsNyBAQAogCiAgICAgQEFyb3VuZFRpbWVvdXQKICAgICBPYmplY3QgYXJvdW5kVGltZW91dChJbnZvY2F0aW9uQ29udGV4dCBjdHgpCi0JICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBDb21tb24uYXJvdW5kVGltZW91dENhbGxlZChjdHgsICJHIik7CiAgICAgICAgIE9iamVjdCBpbnN0YW5jZSA9IGN0eC5nZXRUYXJnZXQoKTsKICAgICAgICAgaWYoIGluc3RhbmNlIGluc3RhbmNlb2YgU2xlc3NFSkI2ICkgewpAQCAtNDMsMTAgKzQzLDEwIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CiAgICAgfQotICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgT2JqZWN0IGFyb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjdHgpCi0JICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgaW5zdGFuY2UgPSBjdHguZ2V0VGFyZ2V0KCk7CiAgICAgICAgIGlmKCBpbnN0YW5jZSBpbnN0YW5jZW9mIFNsZXNzRUpCNiApIHsKICAgICAgICAgICAgICgoU2xlc3NFSkI2KSBpbnN0YW5jZSkuYXJvdW5kVGltZW91dENhbGxlZCA9IGZhbHNlOwpAQCAtNTQsNSArNTQsNSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwogICAgIH0KLSAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzczMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzMy5qYXZhCmluZGV4IGNmYzRlMTAuLmFmNjFjYjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzMy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzMy5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzEuYXJvdW5kdGltZW91dDsKIAogaW1wb3J0IGpha2FydGEuZWpiLlJlbW90ZTsKLQkKKwogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBTbGVzczMKIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzNC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvU2xlc3M0LmphdmEKaW5kZXggNWI1NmFhNi4uMTRhOTYxYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvU2xlc3M0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvU2xlc3M0LmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMS5hcm91bmR0aW1lb3V0OwogCiBpbXBvcnQgamFrYXJ0YS5lamIuUmVtb3RlOwotCQorCiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIFNsZXNzNAogewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvU2xlc3M1LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzczUuamF2YQppbmRleCA0ZmNiMzFlLi5jMjMzMjk2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzczUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzczUuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMxLmFyb3VuZHRpbWVvdXQ7CiAKIGltcG9ydCBqYWthcnRhLmVqYi5SZW1vdGU7Ci0JCisKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgU2xlc3M1CiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzczYuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzNi5qYXZhCmluZGV4IDc3Zjk0ZGIuLjBlYWE0NTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzNi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzNi5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzEuYXJvdW5kdGltZW91dDsKIAogaW1wb3J0IGpha2FydGEuZWpiLlJlbW90ZTsKLQkKKwogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBTbGVzczYKIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzRUpCMy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvU2xlc3NFSkIzLmphdmEKaW5kZXggMDE4Y2Y5Mi4uYTJmMGQ1MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvU2xlc3NFSkIzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvU2xlc3NFSkIzLmphdmEKQEAgLTYxLDE4ICs2MSwxOCBAQAogICAgIEBJbnRlcmNlcHRvcnMoe0ludGVyY2VwdG9yRS5jbGFzcywgSW50ZXJjZXB0b3JGLmNsYXNzfSkKICAgICBAU2NoZWR1bGUoc2Vjb25kPSIqIiwgbWludXRlPSIqIiwgaG91cj0iKiIsIGluZm89IlNsZXNzRUpCMy1kY2VmIikKICAgICBwcml2YXRlIHZvaWQgZGNlZigpIHt9Ci0gICAgCisKICAgICBARXhjbHVkZURlZmF1bHRJbnRlcmNlcHRvcnMKICAgICBARXhjbHVkZUNsYXNzSW50ZXJjZXB0b3JzCiAgICAgQFNjaGVkdWxlKHNlY29uZD0iKiIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBpbmZvPSJTbGVzc0VKQjMtbm90aGluZyIpCiAgICAgcHJpdmF0ZSB2b2lkIG5vdGhpbmcoKSB7fQogCi0gICAgQEludGVyY2VwdG9ycyh7SW50ZXJjZXB0b3JFLmNsYXNzLCBJbnRlcmNlcHRvckYuY2xhc3N9KSAgICAKKyAgICBASW50ZXJjZXB0b3JzKHtJbnRlcmNlcHRvckUuY2xhc3MsIEludGVyY2VwdG9yRi5jbGFzc30pCiAgICAgQFNjaGVkdWxlKHNlY29uZD0iKiIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBpbmZvPSJTbGVzc0VKQjMtZGNiYWVmIikKICAgICBwcml2YXRlIHZvaWQgZGNiYWVmKCkge30KIAogICAgIC8vIHRvdGFsIG9yZGVyaW5nIG92ZXJyaWRkZW4gaW4gZGVwbG95bWVudCBkZXNjcmlwdG9yCi0gICAgQEludGVyY2VwdG9ycyh7SW50ZXJjZXB0b3JFLmNsYXNzLCBJbnRlcmNlcHRvckYuY2xhc3N9KSAgICAKKyAgICBASW50ZXJjZXB0b3JzKHtJbnRlcmNlcHRvckUuY2xhc3MsIEludGVyY2VwdG9yRi5jbGFzc30pCiAgICAgQFNjaGVkdWxlKHNlY29uZD0iKiIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBpbmZvPSJTbGVzc0VKQjMtYWJjZGVmIikKICAgICBwcml2YXRlIHZvaWQgYWJjZGVmKCkge30KIApAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICBDb21tb24uY2hlY2tSZXN1bHRzKGN0eCk7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwcml2YXRlIE9iamVjdCBhcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdmVyaWZ5KCkgewogICAgICAgICBDb21tb24uY2hlY2tSZXN1bHRzKCJTbGVzc0VKQjMiLCBFWFBFQ1RFRCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvU2xlc3NFSkI0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzc0VKQjQuamF2YQppbmRleCA4MTJiZTk5Li4zOWZiZGVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzc0VKQjQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzc0VKQjQuamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgIC8vIGFyb3VuZFRpbWVvdXQgc2hvdWxkIGJlIHN0aWxsIGZhbHNlLCBhbmQgZXhjZXB0aW9uIGlzIGV4cGVjdGVkLgogICAgIEBTY2hlZHVsZShzZWNvbmQ9IioiLCBtaW51dGU9IioiLCBob3VyPSIqIiwgaW5mbz0iU2xlc3NFSkI0LWNiZCIpCiAgICAgcHVibGljIHZvaWQgY2JkKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNDpjYmQoKS4gIGFyb3VuZFRpbWVvdXRDYWxsZWQgPSAiICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI0OmNiZCgpLiAgYXJvdW5kVGltZW91dENhbGxlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJvdW5kVGltZW91dENhbGxlZCk7CiAKICAgICAgICAgLy8gYSBsaXR0bGUgZXh0cmEgY2hlY2tpbmcgdG8gbWFrZSBzdXJlIGFyb3VuZFRpbWVvdXQgaXMgaW52b2tlZC4uLgpAQCAtNjgsMTMgKzY4LDEzIEBACiAgICAgQFNjaGVkdWxlKHNlY29uZD0iKiIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBpbmZvPSJTbGVzc0VKQjQtYWJlZiIpCiAgICAgcHVibGljIHZvaWQgYWJlZihUaW1lciB0KSB7fQogCi0gICAgLy8gQEV4Y2x1ZGVEZWZhdWx0SW50ZXJjZXB0b3JzIGlzIGEgbm8tb3AgaGVyZSBzaW5jZSBpdCAKKyAgICAvLyBARXhjbHVkZURlZmF1bHRJbnRlcmNlcHRvcnMgaXMgYSBuby1vcCBoZXJlIHNpbmNlIGl0CiAgICAgLy8gd2FzIGFscmVhZHkgZXhjbHVkZWQgYXQgY2xhc3MtbGV2ZWwKICAgICBARXhjbHVkZURlZmF1bHRJbnRlcmNlcHRvcnMKICAgICBASW50ZXJjZXB0b3JzKHtJbnRlcmNlcHRvckUuY2xhc3MsIEludGVyY2VwdG9yRi5jbGFzc30pCiAgICAgQFNjaGVkdWxlKHNlY29uZD0iKiIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBpbmZvPSJTbGVzc0VKQjQtY2JkZWYiKQogICAgIHB1YmxpYyB2b2lkIGNiZGVmKCkge30KLSAgICAKKwogICAgIEBFeGNsdWRlQ2xhc3NJbnRlcmNlcHRvcnMKICAgICBAU2NoZWR1bGUoc2Vjb25kPSIqIiwgbWludXRlPSIqIiwgaG91cj0iKiIsIGluZm89IlNsZXNzRUpCNC1ub3RoaW5nIikKICAgICBwdWJsaWMgdm9pZCBub3RoaW5nKCkge30KQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB2ZXJpZnkoKSB7CiAgICAgICAgIENvbW1vbi5jaGVja1Jlc3VsdHMoIlNsZXNzRUpCNCIsIEVYUEVDVEVEKTsKICAgICAgICAgQ29sbGVjdGlvbjxUaW1lcj4gdGltZXJzID0gdGltZXJTdmMuZ2V0VGltZXJzKCk7CkBAIC0xMDAsNSArMTAwLDUgQEAKICAgICAgICAgYXJvdW5kVGltZW91dENhbGxlZCA9IGZhbHNlOwogICAgIH0KIH0KLSAgICAKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzc0VKQjUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzRUpCNS5qYXZhCmluZGV4IGViZGExYmEuLjgxZTg0NGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzRUpCNS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzRUpCNS5qYXZhCkBAIC00MCwxOCArNDAsMTggQEAKIAogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBFWFBFQ1RFRCA9IDM7CiAKLSAgICAvLyBDYWxsZWQgYXMgYSB0aW1lb3V0IGFuZCB0aHJvdWdoIGludGVyZmFjZS4gSW5kZXJjZXB0b3JEIHdpbGwgCisgICAgLy8gQ2FsbGVkIGFzIGEgdGltZW91dCBhbmQgdGhyb3VnaCBpbnRlcmZhY2UuIEluZGVyY2VwdG9yRCB3aWxsCiAgICAgLy8gc2V0IGFyb3VuZEFsbENhbGxlZCB0byB0cnVlIGVpdGhlciB3YXkuCiAgICAgQFNjaGVkdWxlKHNlY29uZD0iKiIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBpbmZvPSJTbGVzc0VKQjUtYWJkYyIpCiAgICAgcHVibGljIHZvaWQgYWJkYygpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjU6YWJkYygpLiAgYXJvdW5kVGltZW91dENhbGxlZCA9ICIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjU6YWJkYygpLiAgYXJvdW5kVGltZW91dENhbGxlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJvdW5kVGltZW91dENhbGxlZCk7CiAKICAgICAgICAgLy8gYSBsaXR0bGUgZXh0cmEgY2hlY2tpbmcgdG8gbWFrZSBzdXJlIEFyb3VuZFRpbWVvdXQgaXMgaW52b2tlZC4uLgogICAgICAgICBpZiggIWFyb3VuZFRpbWVvdXRDYWxsZWQgKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJiZWFuIGNsYXNzIGFyb3VuZFRpbWVvdXQgbm90IGNhbGxlZCIpOwogICAgICAgICB9Ci0gICAgICAgIC8vIEVub3VnaCBpZiBpdCBpcyBzZXQgb25jZSB0byB0cnVlLiBPdGhlcndpc2UgYSB0aW1lciBjYW4gYmUgZXhlY3V0ZWQgCisgICAgICAgIC8vIEVub3VnaCBpZiBpdCBpcyBzZXQgb25jZSB0byB0cnVlLiBPdGhlcndpc2UgYSB0aW1lciBjYW4gYmUgZXhlY3V0ZWQKICAgICAgICAgLy8gYmV0d2VlbiB2ZXJpZnkoKSBhbmQgZGlyZWN0IGNhbGwgdG8gdGhpcyBtZXRob2QgdGhyb3VnaCB0aGUgaW50ZXJmYWNlCiAgICAgICAgIC8vIGFyb3VuZFRpbWVvdXRDYWxsZWQgPSBmYWxzZTsKIApAQCAtODQsMTEgKzg0LDExIEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdmVyaWZ5KCkgewogICAgICAgICBDb21tb24uY2hlY2tSZXN1bHRzKCJTbGVzc0VKQjUiLCBFWFBFQ1RFRCk7CiAgICAgICAgIGFyb3VuZFRpbWVvdXRDYWxsZWQgPSB0cnVlOwogICAgIH0KIH0KLSAgICAKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzc0VKQjYuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzRUpCNi5qYXZhCmluZGV4IGI2MmE5NzYuLjY5YmY4MDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzRUpCNi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzRUpCNi5qYXZhCkBAIC00NCw5ICs0NCw5IEBACiAKICAgICAvLyBDYWxsZWQgYXMgYSB0aW1lb3V0IG9ubHkuIEludGVyY2VwdG9yRyBoYXMgMiBzZXBhcmF0ZSBhcm91bmRYWFggY2FsbHMuCiAgICAgQEludGVyY2VwdG9ycyh7SW50ZXJjZXB0b3JBLmNsYXNzLCBJbnRlcmNlcHRvckcuY2xhc3N9KQotICAgIEBTY2hlZHVsZShzZWNvbmQ9IioiLCBtaW51dGU9IioiLCBob3VyPSIqIiwgaW5mbz0iU2xlc3NFSkI2LWFnIikgICAgCisgICAgQFNjaGVkdWxlKHNlY29uZD0iKiIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBpbmZvPSJTbGVzc0VKQjYtYWciKQogICAgIHB1YmxpYyB2b2lkIGFnKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjphZygpLiAgYXJvdW5kVGltZW91dENhbGxlZCA9ICIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6YWcoKS4gIGFyb3VuZFRpbWVvdXRDYWxsZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyb3VuZFRpbWVvdXRDYWxsZWQpOwogCiAgICAgICAgIGlmKCAhYXJvdW5kVGltZW91dENhbGxlZCApIHsKQEAgLTYwLDExICs2MCwxMSBAQAogICAgICAgICBDb21tb24uc3RvcmVSZXN1bHQoIlNsZXNzRUpCNi1hZyIpOwogICAgIH0KIAotICAgIEBTY2hlZHVsZShzZWNvbmQ9IioiLCBtaW51dGU9IioiLCBob3VyPSIqIiwgaW5mbz0iU2xlc3NFSkI2X1RpbWVyLWFnIikgICAgCisgICAgQFNjaGVkdWxlKHNlY29uZD0iKiIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBpbmZvPSJTbGVzc0VKQjZfVGltZXItYWciKQogICAgIHB1YmxpYyB2b2lkIGFnKFRpbWVyIHQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6YWcoVGltZXIgdCkuICAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcm91bmRUaW1lb3V0Q2FsbGVkID0gIiArIGFyb3VuZFRpbWVvdXRDYWxsZWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgaWYoIGFyb3VuZFRpbWVvdXRDYWxsZWQgKSB7CiAgICAgICAgICAgICBhcm91bmRUaW1lb3V0Q2FsbGVkID0gZmFsc2U7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJiZWFuIGNsYXNzIGFyb3VuZFRpbWVvdXQgd2FzIGluY29ycmVjdGx5IGNhbGxlZCIpOwpAQCAtNzYsMTEgKzc2LDExIEBACiAgICAgICAgIENvbW1vbi5zdG9yZVJlc3VsdCgiU2xlc3NFSkI2X1RpbWVyLWFnIik7CiAgICAgfQogCi0gICAgLy8gYmcoKSAoYnV0IG5vdCBiZyhwYXJhbSkpIG1hcmtlZCB0aHJvdWdoIGVqYi1qYXIueG1sIAorICAgIC8vIGJnKCkgKGJ1dCBub3QgYmcocGFyYW0pKSBtYXJrZWQgdGhyb3VnaCBlamItamFyLnhtbAogICAgIC8vIGFzIGhhdmluZyBhcm91bmR0aW1lb3V0IEIsRwotICAgIEBTY2hlZHVsZShzZWNvbmQ9IioiLCBtaW51dGU9IioiLCBob3VyPSIqIiwgaW5mbz0iU2xlc3NFSkI2LWJnIikgICAgCisgICAgQFNjaGVkdWxlKHNlY29uZD0iKiIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBpbmZvPSJTbGVzc0VKQjYtYmciKQogICAgIHB1YmxpYyB2b2lkIGJnKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjpiZygpLiAgYXJvdW5kVGltZW91dENhbGxlZCA9ICIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6YmcoKS4gIGFyb3VuZFRpbWVvdXRDYWxsZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyb3VuZFRpbWVvdXRDYWxsZWQpOwogCiAgICAgICAgIGlmKCAhYXJvdW5kVGltZW91dENhbGxlZCApIHsKQEAgLTk0LDExICs5NCwxMSBAQAogICAgICAgICBDb21tb24uc3RvcmVSZXN1bHQoIlNsZXNzRUpCNi1iZyIpOwogICAgIH0KIAotICAgIEBTY2hlZHVsZShzZWNvbmQ9IioiLCBtaW51dGU9IioiLCBob3VyPSIqIiwgaW5mbz0iU2xlc3NFSkI2X1RpbWVyLWJnIikgICAgCisgICAgQFNjaGVkdWxlKHNlY29uZD0iKiIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBpbmZvPSJTbGVzc0VKQjZfVGltZXItYmciKQogICAgIHB1YmxpYyB2b2lkIGJnKFRpbWVyIHQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6YmcoVGltZXIgdCkuICAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcm91bmRUaW1lb3V0Q2FsbGVkID0gIiArIGFyb3VuZFRpbWVvdXRDYWxsZWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgaWYoIGFyb3VuZFRpbWVvdXRDYWxsZWQgKSB7CiAgICAgICAgICAgICBhcm91bmRUaW1lb3V0Q2FsbGVkID0gZmFsc2U7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJiZWFuIGNsYXNzIGFyb3VuZFRpbWVvdXQgd2FzIGluY29ycmVjdGx5IGNhbGxlZCIpOwpAQCAtMTEyLDkgKzExMiw5IEBACiAKICAgICAvLyBvdmVybG9hZGVkIHZlcnNpb24gb2YgaW50ZXJjZXB0b3ItYmluZGluZyB1c2VkIGluIGVqYi1qYXIueG1sIHRvCiAgICAgLy8gbWFyayBhbGwgbWV0aG9kcyB3aXRoIG5hbWUgY2cgYXMgaGF2aW5nIGFyb3VuZHRpbWVvdXQgQyxHCi0gICAgQFNjaGVkdWxlKHNlY29uZD0iKiIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBpbmZvPSJTbGVzc0VKQjYtY2ciKSAgICAKKyAgICBAU2NoZWR1bGUoc2Vjb25kPSIqIiwgbWludXRlPSIqIiwgaG91cj0iKiIsIGluZm89IlNsZXNzRUpCNi1jZyIpCiAgICAgcHVibGljIHZvaWQgY2coKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI2OmNnKCkuICBhcm91bmRUaW1lb3V0Q2FsbGVkID0gIiArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjpjZygpLiAgYXJvdW5kVGltZW91dENhbGxlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJvdW5kVGltZW91dENhbGxlZCk7CiAKICAgICAgICAgaWYoICFhcm91bmRUaW1lb3V0Q2FsbGVkICkgewpAQCAtMTI4LDkgKzEyOCw5IEBACiAgICAgICAgIENvbW1vbi5zdG9yZVJlc3VsdCgiU2xlc3NFSkI2LWNnIik7CiAgICAgfQogCi0gICAgQFNjaGVkdWxlKHNlY29uZD0iKiIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBpbmZvPSJTbGVzc0VKQjZfVGltZXItY2ciKSAgICAKKyAgICBAU2NoZWR1bGUoc2Vjb25kPSIqIiwgbWludXRlPSIqIiwgaG91cj0iKiIsIGluZm89IlNsZXNzRUpCNl9UaW1lci1jZyIpCiAgICAgcHVibGljIHZvaWQgY2coVGltZXIgdCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjpjZyhUaW1lciB0KS4gIGFyb3VuZFRpbWVvdXRDYWxsZWQgPSAiICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI2OmNnKFRpbWVyIHQpLiAgYXJvdW5kVGltZW91dENhbGxlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJvdW5kVGltZW91dENhbGxlZCk7CiAKICAgICAgICAgaWYoICFhcm91bmRUaW1lb3V0Q2FsbGVkICkgewpAQCAtMTQ0LDEyICsxNDQsMTIgQEAKICAgICAgICAgQ29tbW9uLnN0b3JlUmVzdWx0KCJTbGVzc0VKQjZfVGltZXItY2ciKTsKICAgICB9CiAKLSAgICAvLyBLaW5kIG9mIGxpa2UgYWcoKSwgaW4gdGhhdCBkZygpIGlzIG92ZXJsb2FkZWQsIGJ1dCBpdCdzIHRoZSAKKyAgICAvLyBLaW5kIG9mIGxpa2UgYWcoKSwgaW4gdGhhdCBkZygpIGlzIG92ZXJsb2FkZWQsIGJ1dCBpdCdzIHRoZQogICAgIC8vIHNpZ25hdHVyZSB0aGF0IGhhcyBhIHBhcmFtZXRlciB0aGF0IGlzIGFzc2lnbmVkIGFyb3VuZHRpbWVvdXQgdXNpbmcKICAgICAvLyBASW50ZXJjZXB0b3IuCi0gICAgQFNjaGVkdWxlKHNlY29uZD0iKiIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBpbmZvPSJTbGVzc0VKQjYtZGciKSAgICAKKyAgICBAU2NoZWR1bGUoc2Vjb25kPSIqIiwgbWludXRlPSIqIiwgaG91cj0iKiIsIGluZm89IlNsZXNzRUpCNi1kZyIpCiAgICAgcHVibGljIHZvaWQgZGcoKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI2OmRnKCkuICBhcm91bmRUaW1lb3V0Q2FsbGVkID0gIiArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjpkZygpLiAgYXJvdW5kVGltZW91dENhbGxlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJvdW5kVGltZW91dENhbGxlZCk7CiAKICAgICAgICAgaWYoIGFyb3VuZFRpbWVvdXRDYWxsZWQgKSB7CkBAIC0xNjQsMTEgKzE2NCwxMSBAQAogICAgIH0KIAogICAgIEBJbnRlcmNlcHRvcnMoe0ludGVyY2VwdG9yRC5jbGFzcywgSW50ZXJjZXB0b3JHLmNsYXNzfSkKLSAgICBAU2NoZWR1bGUoc2Vjb25kPSIqIiwgbWludXRlPSIqIiwgaG91cj0iKiIsIGluZm89IlNsZXNzRUpCNl9UaW1lci1kZyIpICAgIAorICAgIEBTY2hlZHVsZShzZWNvbmQ9IioiLCBtaW51dGU9IioiLCBob3VyPSIqIiwgaW5mbz0iU2xlc3NFSkI2X1RpbWVyLWRnIikKICAgICBwdWJsaWMgdm9pZCBkZyhUaW1lciB0KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI2OmRnKFRpbWVyIHQpLiAgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJvdW5kVGltZW91dENhbGxlZCA9ICIgKyBhcm91bmRUaW1lb3V0Q2FsbGVkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIGlmKCAhYXJvdW5kVGltZW91dENhbGxlZCApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImJlYW4gY2xhc3MgYXJvdW5kVGltZW91dCBub3QgY2FsbGVkIik7CiAgICAgICAgIH0KQEAgLTE4NCw5ICsxODQsOSBAQAogCiAgICAgLy8gTGlrZSBkZygpLCBleGNlcHQgdGhhdCBkZyhUaW1lciB0KSBpcyBhc3NpZ25lZCBpdHMgaW50ZXJjZXB0b3IKICAgICAvLyBjaGFpbiB0aHJvdWdoIGVqYi1qYXIueG1sCi0gICAgQFNjaGVkdWxlKHNlY29uZD0iKiIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBpbmZvPSJTbGVzc0VKQjYtZWciKSAgICAKKyAgICBAU2NoZWR1bGUoc2Vjb25kPSIqIiwgbWludXRlPSIqIiwgaG91cj0iKiIsIGluZm89IlNsZXNzRUpCNi1lZyIpCiAgICAgcHVibGljIHZvaWQgZWcoKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI2OmVnKCkuICBhcm91bmRUaW1lb3V0Q2FsbGVkID0gIiArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjplZygpLiAgYXJvdW5kVGltZW91dENhbGxlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJvdW5kVGltZW91dENhbGxlZCk7CiAKICAgICAgICAgaWYoIGFyb3VuZFRpbWVvdXRDYWxsZWQgKSB7CkBAIC0yMDQsNyArMjA0LDcgQEAKICAgICAvLyAyIHNlcGFyYXRlIGFyb3VuZFhYWCBjYWxscy4KICAgICBASW50ZXJjZXB0b3JzKHtJbnRlcmNlcHRvckEuY2xhc3MsIEludGVyY2VwdG9yRy5jbGFzc30pCiAgICAgcHVibGljIHZvaWQgbm9hcm91bmR0aW1lb3V0KCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjpub2Fyb3VuZHRpbWVvdXQoKS4gIGFyb3VuZFRpbWVvdXRDYWxsZWQgPSAiICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI2Om5vYXJvdW5kdGltZW91dCgpLiAgYXJvdW5kVGltZW91dENhbGxlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJvdW5kVGltZW91dENhbGxlZCk7CiAKICAgICAgICAgaWYoIGFyb3VuZFRpbWVvdXRDYWxsZWQgKSB7CkBAIC0yMTcsMTEgKzIxNywxMSBAQAogICAgICAgICBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBAU2NoZWR1bGUoc2Vjb25kPSIqIiwgbWludXRlPSIqIiwgaG91cj0iKiIsIGluZm89IlNsZXNzRUpCNl9UaW1lci1lZyIpICAgIAorICAgIEBTY2hlZHVsZShzZWNvbmQ9IioiLCBtaW51dGU9IioiLCBob3VyPSIqIiwgaW5mbz0iU2xlc3NFSkI2X1RpbWVyLWVnIikKICAgICBwdWJsaWMgdm9pZCBlZyhUaW1lciB0KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI2OmVnKFRpbWVyIHQpLiAgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJvdW5kVGltZW91dENhbGxlZCA9ICIgKyBhcm91bmRUaW1lb3V0Q2FsbGVkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIGlmKCAhYXJvdW5kVGltZW91dENhbGxlZCApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImJlYW4gY2xhc3MgYXJvdW5kVGltZW91dCBub3QgY2FsbGVkIik7CiAgICAgICAgIH0KQEAgLTIzOSw1ICsyMzksNSBAQAogICAgIH0KIAogfQotICAgIAorCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzRUpCNy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvU2xlc3NFSkI3LmphdmEKaW5kZXggODdiNTEwNy4uMjY0YjhhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvU2xlc3NFSkI3LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvU2xlc3NFSkI3LmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIEBTdGF0ZWxlc3MKIEBFeGNsdWRlRGVmYXVsdEludGVyY2VwdG9ycwogQEludGVyY2VwdG9ycyh7SW50ZXJjZXB0b3JELmNsYXNzLCBJbnRlcmNlcHRvckMuY2xhc3N9KQotcHVibGljIGNsYXNzIFNsZXNzRUpCNyAKK3B1YmxpYyBjbGFzcyBTbGVzc0VKQjcKIHsKIAogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBFWFBFQ1RFRCA9IDE7CkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgIENvbW1vbi5zdG9yZVJlc3VsdCgiU2xlc3NFSkI3LWRjIik7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwcml2YXRlIE9iamVjdCBhcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewpAQCAtNjEsNyArNjEsNyBAQAogCiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHZlcmlmeSgpIHsKICAgICAgICAgQ29tbW9uLmNoZWNrUmVzdWx0cygiU2xlc3NFSkI3IiwgRVhQRUNURUQpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2J1aWxkLnhtbAppbmRleCBjZDQxYzEwLi40OTM1MmE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYnVpbGQueG1sCkBAIC05MCwxNyArOTAsMTcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLXRpbWVyIHRlc3RzKQorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLXRpbWVyIHRlc3RzKQogCi0JCQlhbnQgbm9ucGVyc2lzdGVudHRpbWVyIChFeGVjdXRlcyB0aGUgbm9uLXBlcnNpc3RlbnQgZWpiLXRpbWVyIHRlc3QpCi0JCQlhbnQgc2NoZWR1bGVfZXhwIChFeGVjdXRlcyB0aGUgc2NoZWR1bGVfZXhwIGVqYi10aW1lciB0ZXN0KQotCQkJYW50IHNjaGVkdWxlX2FubiAoRXhlY3V0ZXMgdGhlIHNjaGVkdWxlX2FubiBlamItdGltZXIgdGVzdCkKLQkJCWFudCBzY2hlZHVsZV9vbl9lamJfdGltZW91dCAoRXhlY3V0ZXMgdGhlIHNjaGVkdWxlX29uX2VqYl90aW1lb3V0IGVqYi10aW1lciB0ZXN0KQotCQkJYW50IGFyb3VuZHRpbWVvdXQgKEV4ZWN1dGVzIHRoZSBhcm91bmR0aW1lb3V0IGVqYi10aW1lciB0ZXN0KQotCQkJYW50IG1kYiAoRXhlY3V0ZXMgdGhlIG1kYiBlamItdGltZXIgdGVzdCkKKyAgICAgICAgICAgIGFudCBub25wZXJzaXN0ZW50dGltZXIgKEV4ZWN1dGVzIHRoZSBub24tcGVyc2lzdGVudCBlamItdGltZXIgdGVzdCkKKyAgICAgICAgICAgIGFudCBzY2hlZHVsZV9leHAgKEV4ZWN1dGVzIHRoZSBzY2hlZHVsZV9leHAgZWpiLXRpbWVyIHRlc3QpCisgICAgICAgICAgICBhbnQgc2NoZWR1bGVfYW5uIChFeGVjdXRlcyB0aGUgc2NoZWR1bGVfYW5uIGVqYi10aW1lciB0ZXN0KQorICAgICAgICAgICAgYW50IHNjaGVkdWxlX29uX2VqYl90aW1lb3V0IChFeGVjdXRlcyB0aGUgc2NoZWR1bGVfb25fZWpiX3RpbWVvdXQgZWpiLXRpbWVyIHRlc3QpCisgICAgICAgICAgICBhbnQgYXJvdW5kdGltZW91dCAoRXhlY3V0ZXMgdGhlIGFyb3VuZHRpbWVvdXQgZWpiLXRpbWVyIHRlc3QpCisgICAgICAgICAgICBhbnQgbWRiIChFeGVjdXRlcyB0aGUgbWRiIGVqYi10aW1lciB0ZXN0KQogCi0JPC9lY2hvPgorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2tlZXBzdGF0ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEva2VlcHN0YXRlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYmYzODQxNy4uNzBjOTY5ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEva2VlcHN0YXRlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEva2VlcHN0YXRlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE1ICsxNSwxNSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXRpbWVyLWtlZXBzdGF0ZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEva2VlcHN0YXRlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2tlZXBzdGF0ZS9idWlsZC54bWwKaW5kZXggY2YyMzk4OS4uNGUwYmI4MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEva2VlcHN0YXRlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9rZWVwc3RhdGUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OSw4ICs0OSw4IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi9LZWVwU3RhdGUqLmNsYXNzIiAvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL0tlZXBTdGF0ZUlGLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkZpcnN0IHRpbWUgZGVwbG95IHN1Y2NlZWRlZC4iIC8+CkBAIC05MCwxMCArOTAsMTAgQEAKICAgICAgICAgICAgICAgdmFsdWU9Ii0tZm9yY2U9dHJ1ZSAtLWtlZXBzdGF0ZT0ke2tlZXBzdGF0ZX0gLS1yZXRyaWV2ZSAke2Fzc2VtYmxlLmRpcn0gJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyICIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9rZWVwc3RhdGUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEva2VlcHN0YXRlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBiMWQ4NWZlLi5iZDc5N2IwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9rZWVwc3RhdGUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2tlZXBzdGF0ZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKIAogICAgIEBFSkIgcHJpdmF0ZSBzdGF0aWMgS2VlcFN0YXRlSUYgYmVhbjsKIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogICAgICAgICBib29sZWFuIGtlZXBTdGF0ZSA9IEJvb2xlYW4udmFsdWVPZihhcmdzWzBdKTsKICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gImVqYjMxLXRpbWVyLWtlZXBzdGF0ZS0iICsga2VlcFN0YXRlOwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3ROYW1lKTsKQEAgLTQxLDcgKzQxLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdEtlZXBTdGF0ZShib29sZWFuIGtlZXBTdGF0ZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFN0cmluZyByZXN1bHQgPSBiZWFuLnZlcmlmeVRpbWVycyhrZWVwU3RhdGUpOyAgICAgICAgCisgICAgICAgIFN0cmluZyByZXN1bHQgPSBiZWFuLnZlcmlmeVRpbWVycyhrZWVwU3RhdGUpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3RLZWVwU3RhdGVUcnVlIHJlc3VsdDogIiArIHJlc3VsdCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9rZWVwc3RhdGUvZWpiL0tlZXBTdGF0ZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2tlZXBzdGF0ZS9lamIvS2VlcFN0YXRlQmVhbi5qYXZhCmluZGV4IDBhMGEwOGEuLjkyMmExMTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2tlZXBzdGF0ZS9lamIvS2VlcFN0YXRlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2tlZXBzdGF0ZS9lamIvS2VlcFN0YXRlQmVhbi5qYXZhCkBAIC0yMyw5ICsyMyw5IEBACiBAU2luZ2xldG9uCiBwdWJsaWMgY2xhc3MgS2VlcFN0YXRlQmVhbiBpbXBsZW1lbnRzIEtlZXBTdGF0ZUlGIHsKICAgICBwcml2YXRlIExpc3Q8U3RyaW5nPiBpbmZvcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotICAgIAorCiAgICAgLyoqCi0gICAgICoga2VlcHN0YXRlIGlzIHBhc3NlZCBmcm9tIGJ1aWxkLnhtbCB0byBhcHBjbGllbnQgYXMgYXBwbGljYXRpb24gYXJncywgYW5kIHRvIHRoaXMgCisgICAgICoga2VlcHN0YXRlIGlzIHBhc3NlZCBmcm9tIGJ1aWxkLnhtbCB0byBhcHBjbGllbnQgYXMgYXBwbGljYXRpb24gYXJncywgYW5kIHRvIHRoaXMKICAgICAgKiBidXNpbmVzcyBtZXRob2QuIFRoZSB0ZXN0IEVBUiBhcHAgaXMgZGVwbG95ZWQgb25jZSBmaXJzdCwgdGhlbiBLZWVwU3RhdGVJRi5JTkZPCiAgICAgICogaXMgbW9kaWZpZWQsIHJlYnVpbGQsIGFuZCByZWRlcGxveWVkLiAgSWYgcmVkZXBsb3llZCB3aXRoIGtlZXBzdGF0ZSB0cnVlLCBubyBuZXcKICAgICAgKiBhdXRvIHRpbWVycyBhcmUgY3JlYXRlZCwgYW5kIGV4aXN0aW5nIHRpbWVycyBhcmUgY2FycmllZCBvdmVyLiAgU28gdGhlc2UgdGltZXJzCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZGIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21kYi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDI5MzQ4MGQuLjQ0ZjE0YzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21kYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21kYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMSArMTUsMTEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMS10aW1lcjMxLW1kYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWRiL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21kYi9idWlsZC54bWwKaW5kZXggZGFiMmI0MTMuLmI2NDEzYmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21kYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWRiL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTIgKzQ2LDEyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovSW50ZXJjZXB0b3IqLmNsYXNzLCoqL1NpbmdsZXRvbiouY2xhc3MsKiovTWVzc2FnZUJlYW4uY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjUsMTYgKzY1LDE2IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtODUsNyArODUsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWRiL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21kYi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggN2M2ODY5ZS4uNzFlZmZmYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWRiL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZGIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNiwxNyArMjYsMTcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAKLQlhcHBOYW1lID0gYXJnc1swXTsgCi0Jc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKLQlDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsgICAgICAgCi0gICAgICAgIGNsaWVudC5kb1Rlc3QoKTsJCisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKKyAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKKyAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7CiAgICAgfQogCkBAIC00NCwyOSArNDQsMjkgQEAKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICBTaW5nbGV0b25SZW1vdGUgc2luZ2xldG9uID0gKFNpbmdsZXRvblJlbW90ZSkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU2luZ2xldG9uQmVhbiFjb20uYWNtZS5TaW5nbGV0b25SZW1vdGUiKTsKKyAgICAgICAgU2luZ2xldG9uUmVtb3RlIHNpbmdsZXRvbiA9IChTaW5nbGV0b25SZW1vdGUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1NpbmdsZXRvbkJlYW4hY29tLmFjbWUuU2luZ2xldG9uUmVtb3RlIik7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGEgZmV3IHNlY29uZHMgZm9yIHRpbWVyIGNhbGxiYWNrLi4uIik7Ci0JICAgIHRyeSB7Ci0JCVRocmVhZC5zbGVlcCg0MDAwKTsKLQkgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewotCQllLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBhIGZldyBzZWNvbmRzIGZvciB0aW1lciBjYWxsYmFjay4uLiIpOworICAgICAgICB0cnkgeworICAgICAgICBUaHJlYWQuc2xlZXAoNDAwMCk7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBwYXNzZWQgPSAiICsgc2luZ2xldG9uLmdldFRlc3RQYXNzZWQoKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBwYXNzZWQgPSAiICsgc2luZ2xldG9uLmdldFRlc3RQYXNzZWQoKSk7CiAKLQkgICAgaWYoIHNpbmdsZXRvbi5nZXRUZXN0UGFzc2VkKCkgKSB7Ci0JCXN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKLQkgICAgfSBlbHNlIHsKLQkJc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOwotCSAgICB9CisgICAgICAgIGlmKCBzaW5nbGV0b24uZ2V0VGVzdFBhc3NlZCgpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgfQogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWRiL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWRiL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IGM5YjIyNWQuLjY5MTVjZDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21kYi9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZGIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTIxLDYgKzIxLDYgQEAKIDxzdW4tZWpiLWphcj4KICAgICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgICAgPHJvbGUtbmFtZT5mb288L3JvbGUtbmFtZT4KLSAgICAgIDxwcmluY2lwYWwtbmFtZT5ib2I8L3ByaW5jaXBhbC1uYW1lPiAgCisgICAgICA8cHJpbmNpcGFsLW5hbWU+Ym9iPC9wcmluY2lwYWwtbmFtZT4KICAgICA8L3NlY3VyaXR5LXJvbGUtbWFwcGluZz4KIDwvc3VuLWVqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZGIvZWpiL0ludGVyY2VwdG9yQS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWRiL2VqYi9JbnRlcmNlcHRvckEuamF2YQppbmRleCBiMzVhMjQ1Li5lZTc5YTQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZGIvZWpiL0ludGVyY2VwdG9yQS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21kYi9lamIvSW50ZXJjZXB0b3JBLmphdmEKQEAgLTMxLDUgKzMxLDUgQEAKICAgICAgICAgICAgIGJlYW4ubW5hbWUgPSBtLmdldE5hbWUoKTsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CiAgICAgfQotICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21kYi9lamIvTWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21kYi9lamIvTWVzc2FnZUJlYW4uamF2YQppbmRleCBhZDE4ZGZjLi5hYTczMDk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZGIvZWpiL01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWRiL2VqYi9NZXNzYWdlQmVhbi5qYXZhCkBAIC00MCw1MCArNDAsNTAgQEAKIAogICAgIFN0cmluZyBtbmFtZTsKIAotICAgIEBFSkIgCisgICAgQEVKQgogICAgIHByaXZhdGUgU2luZ2xldG9uQmVhbiBzaW5nbGV0b247CiAKICAgICBAUmVzb3VyY2UKLQlwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKLSAgICAgCisgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CisKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWVzc2FnZUJlYW46OmluaXQoKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VCZWFuOjpvbk1lc3NhZ2UoKSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiZ2V0Q2FsbGVyUHJpbmNpcGFsID0gIiArIG1kYy5nZXRDYWxsZXJQcmluY2lwYWwoKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBNZXNzYWdlQmVhbjo6b25NZXNzYWdlKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdldENhbGxlclByaW5jaXBhbCA9ICIgKyBtZGMuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkpOwogICAgICAgICB2ZXJpZnlNZXRob2ROYW1lKCJvbk1lc3NhZ2UiKTsKICAgICB9CiAKICAgICBAU2NoZWR1bGUoc2Vjb25kPSIqLzEiLCBtaW51dGU9IioiLCBob3VyPSIqIikKICAgICBwcml2YXRlIHZvaWQgb25UaW1lb3V0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWVzc2FnZUJlYW46Om9uVGltZW91dCgpIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJnZXRDYWxsZXJQcmluY2lwYWwgPSAiICsgbWRjLmdldENhbGxlclByaW5jaXBhbCgpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VCZWFuOjpvblRpbWVvdXQoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0Q2FsbGVyUHJpbmNpcGFsID0gIiArIG1kYy5nZXRDYWxsZXJQcmluY2lwYWwoKSk7CiAKICAgICAgICAgdmVyaWZ5TWV0aG9kTmFtZSgib25UaW1lb3V0Iik7Ci0JdHJ5IHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJJc0NhbGxlckluUm9sZSgnZm9vJyk9ICIgKyAKLQkJCSAgICAgICBtZGMuaXNDYWxsZXJJblJvbGUoImZvbyIpKTsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRXhwZWN0aW5nIElsbGVnYWxTdGF0ZUVYY2VwdGlvbiBmb3IgY2FsbCB0byBpc0NhbGxlckluUm9sZSgpIGZyb20gdGltZXIgY2FsbGJhY2siKTsKLQl9IGNhdGNoKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpc2UpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgZXhjZXB0aW9uIGZvciBpbnZvY2F0aW9uIG9mIGlzQ2FsbGVySW5Sb2xlIGZyb20gdGltZXIgY2FsbGJhY2siKTsKLQl9Ci0JICAgIAorICAgIHRyeSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSXNDYWxsZXJJblJvbGUoJ2ZvbycpPSAiICsKKyAgICAgICAgICAgICAgICAgICBtZGMuaXNDYWxsZXJJblJvbGUoImZvbyIpKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRXhwZWN0aW5nIElsbGVnYWxTdGF0ZUVYY2VwdGlvbiBmb3IgY2FsbCB0byBpc0NhbGxlckluUm9sZSgpIGZyb20gdGltZXIgY2FsbGJhY2siKTsKKyAgICB9IGNhdGNoKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpc2UpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgZXhjZXB0aW9uIGZvciBpbnZvY2F0aW9uIG9mIGlzQ2FsbGVySW5Sb2xlIGZyb20gdGltZXIgY2FsbGJhY2siKTsKKyAgICB9CisKICAgICAgICAgaWYgKHNpbmdsZXRvbi5nZXRBcm91bmRUaW1lb3V0Q2FsbGVkKG51bGwpKSB7Ci0JICAgIHNpbmdsZXRvbi50ZXN0MVBhc3NlZCgpOworICAgICAgICBzaW5nbGV0b24udGVzdDFQYXNzZWQoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBvbkREVGltZW91dChUaW1lciB0KSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBNZXNzYWdlQmVhbjo6b25ERFRpbWVvdXQoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWVzc2FnZUJlYW46Om9uRERUaW1lb3V0KCkiKTsKICAgICAgICAgaWYgKHNpbmdsZXRvbi5nZXRBcm91bmRUaW1lb3V0Q2FsbGVkKChTdHJpbmcpdC5nZXRJbmZvKCkpKSB7Ci0JICAgIHNpbmdsZXRvbi50ZXN0MlBhc3NlZCgpOworICAgICAgICBzaW5nbGV0b24udGVzdDJQYXNzZWQoKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIAorCiAgICAgQFByZURlc3Ryb3kKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VCZWFuOjpkZXN0cm95KCkiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21kYi9lamIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWRiL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggNjQ5NDA5Ni4uNDZjZDg0MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWRiL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWRiL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTM2LDE3ICszNiwxNyBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aW5pdCgpIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdGVzdDFQYXNzZWQoKSB7Ci0JcGFzc2VkMSA9IHRydWU7CisgICAgcGFzc2VkMSA9IHRydWU7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdDJQYXNzZWQoKSB7Ci0JcGFzc2VkMiA9IHRydWU7CisgICAgcGFzc2VkMiA9IHRydWU7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gZ2V0VGVzdFBhc3NlZCgpIHsKLQlyZXR1cm4gcGFzc2VkMSAmJiBwYXNzZWQyOworICAgIHJldHVybiBwYXNzZWQxICYmIHBhc3NlZDI7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gZ2V0QXJvdW5kVGltZW91dENhbGxlZChTdHJpbmcgcykgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWV0aG9kaW50Zi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWV0aG9kaW50Zi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDlmYzA4NDIuLjQ1MTRlMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21ldGhvZGludGYvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZXRob2RpbnRmL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXRpbWVyLW1ldGhvZGludGYiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY2xpZW50LnRpbWVyMzEubWV0aG9kaW50Zi5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21ldGhvZGludGYvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWV0aG9kaW50Zi9idWlsZC54bWwKaW5kZXggZGFlNmY0Zi4uMmYxYjAzNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWV0aG9kaW50Zi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWV0aG9kaW50Zi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NSwxMCArNjUsMTAgQEAKICAgICAgICAgICAgPGFyZyBsaW5lPSIke2puZGlyb290fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZXRob2RpbnRmL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21ldGhvZGludGYvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDkzYzE1N2MuLjc2MWU1ZGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21ldGhvZGludGYvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21ldGhvZGludGYvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNSwxMiArMjUsMTIgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgSW5pdGlhbENvbnRleHQgY29udGV4dDsKIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamIzMS10aW1lci1tZXRob2RpbnRmIik7CiAKICAgICAgICAgdHJ5IHsKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyB0aW1lcnMgdG8gZXhwaXJlIGZvciBzY2hlZHVsZV9hbm4gdGltZXIgdGVzdCIpOwogICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDgwMDApOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWZXJpZnlpbmcgdGltZXJzIHRyYW5zYWN0aW9uIHN0YXR1cyIpOwotICAgICAgICAgICAgYm9vbGVhbiBwYXNzID0gYmVhbi52ZXJpZnlUaW1lcnMoKTsgCisgICAgICAgICAgICBib29sZWFuIHBhc3MgPSBiZWFuLnZlcmlmeVRpbWVycygpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm1ldGhvZGludGY6ICIsICgocGFzcyk/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkgKTsKIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA4ZWE1ZjguLmZjYjZmYzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi10aW1lci1ub25wZXJzaXN0ZW50dGltZXIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvYnVpbGQueG1sCmluZGV4IGEwMWU3MGUuLmViM2QyZGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSJjb20vc3VuL3MxYXNkZXYvZWpiMzEvdGltZXIvbm9ucGVyc2lzdGVudHRpbWVyLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzLCoqL1N0YXRlZnVsV3JhcHBlci5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzMsMTQgKzczLDE0IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAwYTM1N2YxLi42MDU5MTExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI1LDE0ICsyNSwxNCBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBJbml0aWFsQ29udGV4dCBjb250ZXh0OwogCiAgICAgQEVKQiBwcml2YXRlIHN0YXRpYyBTdGF0ZWZ1bFdyYXBwZXIgd3JhcHBlcjsKIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogICAgICAgICBib29sZWFuIGRvSm1zID0gZmFsc2U7IC8vIFRPRE8gKGFyZ3MubGVuZ3RoID09IDEpICYmIChhcmdzWzBdLmVxdWFsc0lnbm9yZUNhc2UoImptcyIpKTsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamIzMS10aW1lci1ub25wZXJzaXN0ZW50dGltZXIiKTsKQEAgLTU0LDIyICs1NCwyMiBAQAogICAgICAgICBzdGF0LmFkZFN0YXR1cygiRm9vOiBlamJzL0Zvb19CTVQiLCAocmVzdWx0KT8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKIAogCi0JLyoqIFRPRE8KKyAgICAvKiogVE9ETwogICAgICAgICByZXN1bHQgPSB3cmFwcGVyLmRvTWVzc2FnZURyaXZlblRlc3QoImptcy9UaW1lck1EQlF1ZXVlX0NNVCIsIGRvSm1zKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXNzYWdlLWRyaXZlbiB0ZXN0IGptcy9UaW1lck1EQlF1ZXVlX0NNVCIgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWVzc2FnZS1kcml2ZW4gdGVzdCBqbXMvVGltZXJNREJRdWV1ZV9DTVQiCiAgICAgICAgICAgICAgICAgKyAoKHJlc3VsdCk/ICIgcGFzc2VkISEiIDogImZhaWxlZCEhIikpOwotICAgICAgICBzdGF0LmFkZFN0YXR1cygiTWVzc2FnZS1kcml2ZW4gdGVzdDogam1zL1RpbWVyTURCUXVldWVfQ01UIiwgCisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJNZXNzYWdlLWRyaXZlbiB0ZXN0OiBqbXMvVGltZXJNREJRdWV1ZV9DTVQiLAogICAgICAgICAgICAgICAgIChyZXN1bHQpPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwogCiAgICAgICAgIHJlc3VsdCA9IHdyYXBwZXIuZG9NZXNzYWdlRHJpdmVuVGVzdCgiam1zL1RpbWVyTURCUXVldWVfQk1UIiwgZG9KbXMpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1lc3NhZ2UtZHJpdmVuIHRlc3Qgam1zL1RpbWVyTURCUXVldWVfQk1UIiAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXNzYWdlLWRyaXZlbiB0ZXN0IGptcy9UaW1lck1EQlF1ZXVlX0JNVCIKICAgICAgICAgICAgICAgICArICgocmVzdWx0KT8gIiBwYXNzZWQhISIgOiAiZmFpbGVkISEiKSk7Ci0gICAgICAgIHN0YXQuYWRkU3RhdHVzKCJNZXNzYWdlLWRyaXZlbiB0ZXN0OiBqbXMvVGltZXJNREJRdWV1ZV9CTVQiLCAKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIk1lc3NhZ2UtZHJpdmVuIHRlc3Q6IGptcy9UaW1lck1EQlF1ZXVlX0JNVCIsCiAgICAgICAgICAgICAgICAgKHJlc3VsdCk/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7Ci0JKiovCisgICAgKiovCiAKICAgICAgICAgdHJ5IHsKLQkgICAgIHdyYXBwZXIucmVtb3ZlRm9vKCk7CisgICAgICAgICB3cmFwcGVyLnJlbW92ZUZvbygpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDU2MmJlNzEuLmRjOGZmMzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIDxyZXMtYXV0aD5Db250YWluZXI8L3Jlcy1hdXRoPgogICAgICAgICA8cmVzLXNoYXJpbmctc2NvcGU+U2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmPiAgICAgICAKKyAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4KICAgICAgICAgPGRlc2NyaXB0aW9uPnRpbWVydGVzdCBkZXN0aW5hdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPmptcy9NeVF1ZXVlPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPgogICAgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlPmpha2FydGEuam1zLlF1ZXVlPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgIDxyZXMtYXV0aD5Db250YWluZXI8L3Jlcy1hdXRoPgogICAgICAgICA8cmVzLXNoYXJpbmctc2NvcGU+U2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmPiAgICAgICAKKyAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4KICAgICAgICAgPGRlc2NyaXB0aW9uPnRpbWVydGVzdCBkZXN0aW5hdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPmptcy9NeVF1ZXVlPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPgogICAgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlPmpha2FydGEuam1zLlF1ZXVlPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+CkBAIC05Niw3ICs5Niw3IEBACiAgICAgICAgIDxyZXMtYXV0aD5Db250YWluZXI8L3Jlcy1hdXRoPgogICAgICAgICA8cmVzLXNoYXJpbmctc2NvcGU+U2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmPiAgICAgICAKKyAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4KICAgICAgICAgPGRlc2NyaXB0aW9uPnRpbWVydGVzdCBkZXN0aW5hdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPmptcy9NeVF1ZXVlPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPgogICAgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlPmpha2FydGEuam1zLlF1ZXVlPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+CkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICAgICAgPHJlcy1hdXRoPkNvbnRhaW5lcjwvcmVzLWF1dGg+CiAgICAgICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+ICAgICAgIAorICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmPgogICAgICAgICA8ZGVzY3JpcHRpb24+dGltZXJ0ZXN0IGRlc3RpbmF0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWU+am1zL015UXVldWU8L21lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWU+CiAgICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+amFrYXJ0YS5qbXMuUXVldWU8L21lc3NhZ2UtZGVzdGluYXRpb24tdHlwZT4KQEAgLTE2MCw3ICsxNjAsNyBAQAogICAgICAgICA8cmVzLWF1dGg+Q29udGFpbmVyPC9yZXMtYXV0aD4KICAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4gICAgICAgCisgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+CiAgICAgICAgIDxkZXNjcmlwdGlvbj50aW1lcnRlc3QgZGVzdGluYXRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT5qbXMvTXlRdWV1ZTwvbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT4KICAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tdHlwZT5qYWthcnRhLmptcy5RdWV1ZTwvbWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2VqYi9BcHBJbmZvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvZWpiL0FwcEluZm8uamF2YQppbmRleCBlM2JlN2RjLi43Y2QwZDE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvZWpiL0FwcEluZm8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvZWpiL0FwcEluZm8uamF2YQpAQCAtMjgsNiArMjgsNiBAQAogCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCiAgICAgewotCXJldHVybiBmb287CisgICAgcmV0dXJuIGZvbzsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvZWpiL0Zvb0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2VqYi9Gb29FSkIuamF2YQppbmRleCA3MzFkYjY5Li5mMWEyYTRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvZWpiL0Zvb0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9lamIvRm9vRUpCLmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vRUpCOjplamJUaW1lb3V0IC0tPiAiICsgdC5nZXRJbmZvKCkpOwogICAgICAgICAgICAgaWYgKHQuaXNQZXJzaXN0ZW50KCkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkZvb0VKQjo6ZWpiVGltZW91dCAtPiAiIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJGb29FSkI6OmVqYlRpbWVvdXQgLT4gIgogICAgICAgICAgICAgICAgICAgICAgICArIHQuZ2V0SW5mbygpICsgIiBpcyBQRVJTSVNURU5UISEhIik7CiAgICAgICAgIH0gY2F0Y2goUnVudGltZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdvdCBleGNlcHRpb24gd2hpbGUgY2FsbGluZyBnZXRJbmZvIik7CkBAIC01Miw3ICs1Miw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQl0aGlzLnNjID0gc2M7CisgICAgdGhpcy5zYyA9IHNjOwogICAgICAgICBzZXRDb250ZXh0KHNjKTsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0VKQjo6c2V0U2Vzc2lvbkNvbnRleHQiKTsKQEAgLTY0LDcgKzY0LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgRUpCRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYm5vbnBlcnNpc3RlbnR0aW1lci5Gb286OmVqYkNyZWF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gZWpibm9ucGVyc2lzdGVudHRpbWVyLkZvbzo6ZWpiQ3JlYXRlICEhIik7CiAgICAgICAgIHNldHVwSm1zQ29ubmVjdGlvbigpOwogICAgICAgICBjaGVja0dldFNldFJvbGxiYWNrT25seSgiZWpiQ3JlYXRlIiwgZmFsc2UpOwogICAgICAgICBjaGVja0NhbGxlclNlY3VyaXR5QWNjZXNzKCJlamJDcmVhdGUiLCBmYWxzZSk7CkBAIC04OCw2ICs4OCw2IEBACiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewogICAgIH0KIAotICAgIAorCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9lamIvTWVzc2FnZURyaXZlbkVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2VqYi9NZXNzYWdlRHJpdmVuRUpCLmphdmEKaW5kZXggYTQxY2RjZS4uYmI1MjI3NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2VqYi9NZXNzYWdlRHJpdmVuRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2VqYi9NZXNzYWdlRHJpdmVuRUpCLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBqYWthcnRhLmptcy4qOwogaW1wb3J0IGpha2FydGEuZWpiLio7CiAKLXB1YmxpYyBjbGFzcyBNZXNzYWdlRHJpdmVuRUpCIGV4dGVuZHMgVGltZXJTdHVmZkltcGwgCitwdWJsaWMgY2xhc3MgTWVzc2FnZURyaXZlbkVKQiBleHRlbmRzIFRpbWVyU3R1ZmZJbXBsCiAgICAgaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwgVGltZWRPYmplY3QsIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgbWVzc2FnZSAiICsgaW5mbyArICIgLCByZWRlbGl2ZXJlZCA9ICIgKyByZWRlbGl2ZXJlZCk7CiAKICAgICAgICAgICAgIGlmIChpbmZvLmVxdWFscygidGVzdDEiKSApIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIG9uTWVzc2FnZSA6IEdvdCB0IGZvciB0aW1lciA9ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIG9uTWVzc2FnZSA6IEdvdCB0IGZvciB0aW1lciA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmdldEluZm8oKSk7CiAgICAgICAgICAgICAgICAgZG9UaW1lclN0dWZmKCJvbk1lc3NhZ2UiLCB0cnVlKTsKICAgICAgICAgICAgICAgICBnZXRJbmZvKHQpOwpAQCAtNDQsOSArNDQsOSBAQAogICAgICAgICAgICAgICAgIGdldFRpbWVSZW1haW5pbmdUZXN0Mig1LCB0KTsKIAogICAgICAgICAgICAgICAgIGNhbmNlbFRpbWVyKHQpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgY3JlYXRlVGltZXJBbmRDYW5jZWwoMTAwMDAwMDApOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgVGltZXIgdDEgPSBjcmVhdGVUaW1lcigxMDAwMDAwLCAibWVzc2FnZWRyaXZlbmVqYiIpOwogICAgICAgICAgICAgICAgIGNhbmNlbFRpbWVyKHQxKTsKICAgICAgICAgICAgICAgICBUaW1lciB0MiA9IGNyZWF0ZVRpbWVyKDEwMDAwLCAibWVzc2FnZWRyaXZlbmVqYiIpOwpAQCAtNTcsNyArNTcsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiggaXNCTVQoKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFRpbWVyKHQpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsVGltZXJBbmRSb2xsYmFjayh0KTsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxUaW1lckFuZFJvbGxiYWNrKHQpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmKCBpbmZvLmVxdWFscygidGVzdDMiKSApIHsKQEAgLTc5LDggKzc5LDggQEAKICAgICAgICAgICAgICAgICBjYW5jZWxUaW1lcih0KTsKICAgICAgICAgICAgICAgICBUaW1lciBjdGFyID0gY3JlYXRlVGltZXIoMSwgMSwgImNhbmNlbFRpbWVyQW5kUm9sbGJhY2siKTsKICAgICAgICAgICAgICAgICBjYW5jZWxUaW1lcihjdGFyKTsKLSAgICAgICAgICAgIH0gCi0gICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC05MCw3ICs5MCw3IEBACiAgICAgICAgIGNoZWNrQ2FsbGVyU2VjdXJpdHlBY2Nlc3MoImVqYlRpbWVvdXQiLCBmYWxzZSk7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWVzc2FnZURyaXZlbkVKQjo6ZWpiVGltZW91dCAtLT4gIiAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWVzc2FnZURyaXZlbkVKQjo6ZWpiVGltZW91dCAtLT4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgdC5nZXRJbmZvKCkpOwogICAgICAgICB9IGNhdGNoKFJ1bnRpbWVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnb3QgZXhjZXB0aW9uIHdoaWxlIGNhbGxpbmcgZ2V0SW5mbyIpOwpAQCAtMTA5LDkgKzEwOSw5IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjKSB7Ci0JdGhpcy5tZGMgPSBtZGM7CisgICAgdGhpcy5tZGMgPSBtZGM7CiAgICAgICAgIHNldENvbnRleHQobWRjKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYm5vbnBlcnNpc3RlbnR0aW1lci5NZXNzYWdlRHJpdmVuRUpCOjpzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gZWpibm9ucGVyc2lzdGVudHRpbWVyLk1lc3NhZ2VEcml2ZW5FSkI6OnNldE1lc3NhZ2VEcml2ZW5Db250ZXh0ICEhIik7CiAgICAgICAgIGNoZWNrQ2FsbGVyU2VjdXJpdHlBY2Nlc3MoInNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IiwgZmFsc2UpOwogCiAgICAgICAgIGdldFRpbWVyU2VydmljZSgic2V0TWVzc2FnZURyaXZlbkNvbnRleHQiLCBmYWxzZSk7CkBAIC0xMTksNyArMTE5LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgRUpCRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYm5vbnBlcnNpc3RlbnR0aW1lci5NZXNzYWdlRHJpdmVuRUpCOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYm5vbnBlcnNpc3RlbnR0aW1lci5NZXNzYWdlRHJpdmVuRUpCOjplamJDcmVhdGUgISEiKTsKICAgICAgICAgc2V0dXBKbXNDb25uZWN0aW9uKCk7CiAgICAgICAgIGNoZWNrR2V0U2V0Um9sbGJhY2tPbmx5KCJlamJDcmVhdGUiLCBmYWxzZSk7CiAgICAgICAgIGNoZWNrQ2FsbGVyU2VjdXJpdHlBY2Nlc3MoImVqYkNyZWF0ZSIsIGZhbHNlKTsKQEAgLTEyOCw3ICsxMjgsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYm5vbnBlcnNpc3RlbnR0aW1lci5NZXNzYWdlRHJpdmVuRUpCOjplamJSZW1vdmUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYm5vbnBlcnNpc3RlbnR0aW1lci5NZXNzYWdlRHJpdmVuRUpCOjplamJSZW1vdmUgISEiKTsKICAgICAgICAgY2hlY2tDYWxsZXJTZWN1cml0eUFjY2VzcygiZWpiUmVtb3ZlIiwgZmFsc2UpOwogICAgICAgICBjaGVja0dldFNldFJvbGxiYWNrT25seSgiZWpiUmVtb3ZlIiwgZmFsc2UpOwogICAgICAgICBnZXRUaW1lclNlcnZpY2UoImVqYlJlbW92ZSIsIHRydWUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2VqYi9TdGF0ZWZ1bFdyYXBwZXJJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvZWpiL1N0YXRlZnVsV3JhcHBlckltcGwuamF2YQppbmRleCAzN2VmOTdjLi40YzdlMDg4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvZWpiL1N0YXRlZnVsV3JhcHBlckltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvZWpiL1N0YXRlZnVsV3JhcHBlckltcGwuamF2YQpAQCAtMzgsMTkgKzM4LDE5IEBACiAgICAgcHJpdmF0ZSBRdWV1ZVNlbmRlciBxdWV1ZVNlbmRlcjsKICAgICAqLwogCi0gICAgcHVibGljIGJvb2xlYW4gZG9NZXNzYWdlRHJpdmVuVGVzdChTdHJpbmcgam5kaU5hbWUsIAorICAgIHB1YmxpYyBib29sZWFuIGRvTWVzc2FnZURyaXZlblRlc3QoU3RyaW5nIGpuZGlOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBqbXMpIHsKICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkvKioKKyAgICAvKioKICAgICAgICAgaWYoIGptcyApIHsgcmV0dXJuOyB9CiAKICAgICAgICAgdHJ5IHsKIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKipQRy0+IGluIGRvTWVzc2FnZURyaXZlblRlc3QoKSBmb3Igam5kaU5hbWUgPSAiICsgam5kaU5hbWUgKTsKLSAgICAgICAgICAgCisKICAgICAgICAgICAgIHNldHVwKHNldHVwKTsKIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKipQRy0+IGluIGRvTWVzc2FnZURyaXZlblRlc3QoKSBhZnRlciBzZXR1cCIpOwogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICAgUXVldWUgbWVzc2FnZURyaXZlbkRlc3QgPSAoUXVldWUpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi8iICsgam5kaU5hbWUpOworICAgICAgICAgUXVldWUgbWVzc2FnZURyaXZlbkRlc3QgPSAoUXVldWUpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi8iICsgam5kaU5hbWUpOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvaW5nIG1lc3NhZ2UgZHJpdmVuIHRlc3RzIGZvciIgKyBqbmRpTmFtZSk7CiAKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgICAgIGxvbmcgc2xlZXBUaW1lID0gMzAwMDA7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwaW5nIGZvciAiICsgc2xlZXBUaW1lIC8gMTAwMCArICIgc2Vjb25kcyIpOwogICAgICAgICAgICAgVGhyZWFkLnNsZWVwKHNsZWVwVGltZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgYWxsIGZvbyB0aW1lcnMgc2hvdWxkIGhhdmUgYmVlbiBjYW5jZWxsZWQKICAgICAgICAgICAgIC8vIGJ5IHRoZSBtZXNzYWdlIGJlYW4uCiAgICAgICAgICAgICBmb28uYXNzZXJ0Tm9UaW1lcnMoKTsKQEAgLTc5LDI3ICs3OSwyNyBAQAogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgY2xlYW51cCgpOwogICAgICAgICB9Ci0JKiovCisgICAgKiovCiAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgc2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkvKioKKyAgICAvKioKIC8vUEctPiAgICAgICAgY29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAKLSAgICAgICAgVG9waWNDb25uZWN0aW9uRmFjdG9yeSB0b3BpY0NvbkZhY3RvcnkgPSAKKworICAgICAgICBUb3BpY0Nvbm5lY3Rpb25GYWN0b3J5IHRvcGljQ29uRmFjdG9yeSA9CiAgICAgICAgICAgICAoVG9waWNDb25uZWN0aW9uRmFjdG9yeSkgY29udGV4dC5sb29rdXAKICAgICAgICAgICAgICAgICAoImphdmE6Y29tcC9lbnYvam1zL015VG9waWNDb25uZWN0aW9uRmFjdG9yeSIpOwotICAgICAgICAgICAgICAgIAorCiBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqUEctPiBzZXR1cCgpOiBhZnRlciAgbG9va3VwIik7CiAgICAgICAgIHRvcGljQ29uID0gdG9waWNDb25GYWN0b3J5LmNyZWF0ZVRvcGljQ29ubmVjdGlvbigpOwogCiBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqUEctPiBzZXR1cCgpOiBhZnRlciAgY3JlYXRlVG9waWNDb25uZWN0aW9uIik7Ci0gICAgICAgIHRvcGljU2Vzc2lvbiA9IAorICAgICAgICB0b3BpY1Nlc3Npb24gPQogICAgICAgICAgICAgdG9waWNDb24uY3JlYXRlVG9waWNTZXNzaW9uKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwogU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKlBHLT4gc2V0dXAoKTogYWZ0ZXIgIGNyZWF0ZVRvcGljU2Vzc2lvbiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgLy8gUHJvZHVjZXIgd2lsbCBiZSBzcGVjaWZpZWQgd2hlbiBhY3R1YWwgbXNnIGlzIHB1Ymxpc2hlZC4KICAgICAgICAgdG9waWNQdWJsaXNoZXIgPSB0b3BpY1Nlc3Npb24uY3JlYXRlUHVibGlzaGVyKG51bGwpOwogU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKlBHLT4gc2V0dXAoKTogYWZ0ZXIgY3JlYXRlUHVibGlzaGVyIik7CkBAIC0xMDcsMjUgKzEwNywyNSBAQAogICAgICAgICB0b3BpY0Nvbi5zdGFydCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqUEctPiBzZXR1cCgpOiBhZnRlciBzdGFydCIpOwogCi0gICAgICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcXVldWVDb25GYWN0b3J5ID0gCisgICAgICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcXVldWVDb25GYWN0b3J5ID0KICAgICAgICAgICAgIChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KSBjb250ZXh0Lmxvb2t1cAogICAgICAgICAgICAgKCJqYXZhOmNvbXAvZW52L2ptcy9NeVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkiKTsKIAogICAgICAgICBxdWV1ZUNvbiA9IHF1ZXVlQ29uRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKIAogICAgICAgICBxdWV1ZVNlc3Npb24gPSBxdWV1ZUNvbi5jcmVhdGVRdWV1ZVNlc3Npb24KLSAgICAgICAgICAgIChmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsgCisgICAgICAgICAgICAoZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CiAKICAgICAgICAgLy8gUHJvZHVjZXIgd2lsbCBiZSBzcGVjaWZpZWQgd2hlbiBhY3R1YWwgbXNnIGlzIHNlbnQuCi0gICAgICAgIHF1ZXVlU2VuZGVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVNlbmRlcihudWxsKTsgICAgICAgIAorICAgICAgICBxdWV1ZVNlbmRlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVTZW5kZXIobnVsbCk7CiAKICAgICAgICAgcXVldWVDb24uc3RhcnQoKTsKLQkqKi8KKyAgICAqKi8KIAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBjbGVhbnVwKCkgewotCS8qKgorICAgIC8qKgogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYoIHRvcGljQ29uICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgdG9waWNDb24uY2xvc2UoKTsKQEAgLTEzOSw3ICsxMzksNyBAQAogICAgICAgICAqKi8KICAgICB9CiAgICAgLyoqCi0gICAgcHVibGljIHZvaWQgcHVibGlzaE1zZ3MoVG9waWMgdG9waWMsIE1lc3NhZ2UgbXNnLCBpbnQgbnVtKSAKKyAgICBwdWJsaWMgdm9pZCBwdWJsaXNoTXNncyhUb3BpYyB0b3BpYywgTWVzc2FnZSBtc2csIGludCBudW0pCiAgICAgICAgIHRocm93cyBKTVNFeGNlcHRpb24gewogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHVibGlzaGluZyBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgdG9waWMpOwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBzZW5kTXNncyhRdWV1ZSBxdWV1ZSwgTWVzc2FnZSBtc2csIGludCBudW0pIAorICAgIHB1YmxpYyB2b2lkIHNlbmRNc2dzKFF1ZXVlIHF1ZXVlLCBNZXNzYWdlIG1zZywgaW50IG51bSkKICAgICAgICAgdGhyb3dzIEpNU0V4Y2VwdGlvbiB7CiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW07IGkrKykgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQdWJsaXNoaW5nIG1lc3NhZ2UgIiArIGkgKyAiIHRvICIgKyBxdWV1ZSk7CkBAIC0xOTYsMzcgKzE5NiwzNyBAQAogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZG9UZXN0KCk6IGNyZWF0aW5nIHRoZSB0aW1lciIpOwogICAgICAgICBUaW1lciB0aW1lciA9IHRpbWVyU3R1ZmYuY3JlYXRlVGltZXIoMSwgMSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZG9UZXN0KCk6IGNyZWF0aW5nIHRoZSB0aW1lcjIiKTsKICAgICAgICAgVGltZXIgdGltZXIyID0gdGltZXJTdHVmZi5jcmVhdGVUaW1lcigxMDAwMCwgMTAwMDApOwotICAgICAgICAKKwogICAgICAgICAvLwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvVGVzdCgpOiBjcmVhdGluZyB0aGUgdGltZXIzIik7CiAgICAgICAgIFRpbWVyIHRpbWVyMyA9IHRpbWVyU3R1ZmYuY3JlYXRlVGltZXIobmV3IERhdGUoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZG9UZXN0KCk6IGNyZWF0aW5nIHRoZSB0aW1lcjQiKTsKICAgICAgICAgVGltZXIgdGltZXI0ID0gdGltZXJTdHVmZi5jcmVhdGVUaW1lcihuZXcgRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWUoKSArIDIwMDApKTsKLSAgICAgICAgCisKICAgICAgICAgLy8KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkb1Rlc3QoKTogY3JlYXRpbmcgdGhlIHRpbWVyNSIpOwogICAgICAgICBUaW1lciB0aW1lcjUgPSB0aW1lclN0dWZmLmNyZWF0ZVRpbWVyKG5ldyBEYXRlKG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgMjAwMDApLCAxMDAwMCk7CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkb1Rlc3QoKTogY3JlYXRpbmcgdGhlIGNyZWF0ZVRpbWVyQW5kUm9sbGJhY2siKTsKICAgICAgICAgdGltZXJTdHVmZi5jcmVhdGVUaW1lckFuZFJvbGxiYWNrKDIwMDAwKTsKLSAgICAgICAgCisKICAgICAgICAgLy8KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkb1Rlc3QoKTogY3JlYXRpbmcgdGhlIGNyZWF0ZVRpbWVyQW5kQ2FuY2VsIik7CiAgICAgICAgIHRpbWVyU3R1ZmYuY3JlYXRlVGltZXJBbmRDYW5jZWwoMjAwMDApOwotICAgICAgICAKKwogICAgICAgICAvLyBAQEAgcmVldmFsdWF0ZSBkb3VibGUgY2FuY2VsIGxvZ2ljCiAgICAgICAgIC8vdGltZXJTdHVmZi5jcmVhdGVUaW1lckFuZENhbmNlbEFuZENhbmNlbCgyMDAwMCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZG9UZXN0KCk6IGNyZWF0aW5nIHRoZSBjcmVhdGVUaW1lckFuZENhbmNlbEFuZFJvbGxiYWNrIik7CiAgICAgICAgIHRpbWVyU3R1ZmYuY3JlYXRlVGltZXJBbmRDYW5jZWxBbmRSb2xsYmFjaygyMDAwMCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZG9UZXN0KCk6IGNyZWF0aW5nIHRoZSBjYW5jZWxUaW1lcih0aW1lcjIpIik7CiAgICAgICAgIHRpbWVyU3R1ZmYuY2FuY2VsVGltZXIodGltZXIyKTsKQEAgLTIzNywxOCArMjM3LDE4IEBACiAgICAgICAgIHRpbWVyU3R1ZmYuY2FuY2VsVGltZXJBbmRSb2xsYmFjayh0aW1lcjUpOwogICAgICAgICAvLyBAQEAgcmVldmFsdWF0ZSBkb3VibGUgY2FuY2VsIGxvZ2ljCiAgICAgICAgIC8vdGltZXJTdHVmZi5jYW5jZWxUaW1lckFuZENhbmNlbEFuZFJvbGxiYWNrKHRpbWVyNik7Ci0gICAgICAgIAotICAgICAgICBUaW1lciB0aW1lcjcgPSAKKworICAgICAgICBUaW1lciB0aW1lcjcgPQogICAgICAgICAgICAgdGltZXJTdHVmZi5jcmVhdGVUaW1lcigxLCAxLCAiY2FuY2VsVGltZXIiKTsKLSAgICAgICAgVGltZXIgdGltZXI4ID0gCisgICAgICAgIFRpbWVyIHRpbWVyOCA9CiAgICAgICAgICAgICB0aW1lclN0dWZmLmNyZWF0ZVRpbWVyKDEsIDEsICJjYW5jZWxUaW1lckFuZFJvbGxiYWNrIik7Ci0gICAgICAgIFRpbWVyIHRpbWVyOSA9ICAgICAgICAgCisgICAgICAgIFRpbWVyIHRpbWVyOSA9CiAgICAgICAgICAgICB0aW1lclN0dWZmLmNyZWF0ZVRpbWVyKDEsICJjYW5jZWxUaW1lckFuZFJvbGxiYWNrIik7CiAKICAgICAgICAgVGltZXIgdGltZXIxMSA9IHRpbWVyU3R1ZmYuZ2V0VGltZVJlbWFpbmluZ1Rlc3QxKDIwKTsKICAgICAgICAgdGltZXJTdHVmZi5nZXRUaW1lUmVtYWluaW5nVGVzdDIoMjAsIHRpbWVyMTEpOwogICAgICAgICB0aW1lclN0dWZmLmdldFRpbWVSZW1haW5pbmdUZXN0MigyMCwgdGltZXIpOwotICAgICAgICAKKwogICAgICAgICBUaW1lciB0aW1lcjEyID0gdGltZXJTdHVmZi5nZXROZXh0VGltZW91dFRlc3QxKDIwKTsKICAgICAgICAgdGltZXJTdHVmZi5nZXROZXh0VGltZW91dFRlc3QyKDIwLCB0aW1lcjEyKTsKICAgICAgICAgdGltZXJTdHVmZi5nZXROZXh0VGltZW91dFRlc3QyKDIwLCB0aW1lcik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvZWpiL1RpbWVyU3R1ZmYuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9lamIvVGltZXJTdHVmZi5qYXZhCmluZGV4IGIwNzcwZTUuLjJhYTI1MWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9lamIvVGltZXJTdHVmZi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9lamIvVGltZXJTdHVmZi5qYXZhCkBAIC02NSwxMSArNjUsMTEgQEAKICAgICB2b2lkIGFzc2VydFRpbWVyTm90QWN0aXZlKFRpbWVyIHRpbWVyKSB0aHJvd3MgRXhjZXB0aW9uOwogCiAgICAgdm9pZCBzZW5kTWVzc2FnZUFuZENyZWF0ZVRpbWVyKCkgdGhyb3dzICBFeGNlcHRpb247Ci0gICAgdm9pZCByZWN2TWVzc2FnZUFuZENyZWF0ZVRpbWVyKGJvb2xlYW4gZXhwZWN0TWVzc2FnZSkgCisgICAgdm9pZCByZWN2TWVzc2FnZUFuZENyZWF0ZVRpbWVyKGJvb2xlYW4gZXhwZWN0TWVzc2FnZSkKICAgICAgICAgdGhyb3dzICBFeGNlcHRpb247Ci0gICAgdm9pZCBzZW5kTWVzc2FnZUFuZENyZWF0ZVRpbWVyQW5kUm9sbGJhY2soKSAKKyAgICB2b2lkIHNlbmRNZXNzYWdlQW5kQ3JlYXRlVGltZXJBbmRSb2xsYmFjaygpCiAgICAgICAgIHRocm93cyAgRXhjZXB0aW9uOwotICAgIHZvaWQgcmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lckFuZFJvbGxiYWNrKGJvb2xlYW4gZXhwZWN0TWVzc2FnZSkgCisgICAgdm9pZCByZWN2TWVzc2FnZUFuZENyZWF0ZVRpbWVyQW5kUm9sbGJhY2soYm9vbGVhbiBleHBlY3RNZXNzYWdlKQogICAgICAgICB0aHJvd3MgIEV4Y2VwdGlvbjsKIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvZWpiL1RpbWVyU3R1ZmZJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvZWpiL1RpbWVyU3R1ZmZJbXBsLmphdmEKaW5kZXggMTI2NzQ1MS4uNjVjMTdmYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2VqYi9UaW1lclN0dWZmSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9lamIvVGltZXJTdHVmZkltcGwuamF2YQpAQCAtMzMsMTQgKzMzLDE0IEBACiBpbXBvcnQgamFrYXJ0YS5qbXMuVGV4dE1lc3NhZ2U7CiAKIHB1YmxpYyBjbGFzcyBUaW1lclN0dWZmSW1wbCBpbXBsZW1lbnRzIFRpbWVyU3R1ZmYgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRYX0NNVCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRYX0JNVCA9IDE7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRYX1VOU1BFQ0lGSUVEID0gMjsKLSAgICAKKwogICAgIHByaXZhdGUgRUpCQ29udGV4dCBjb250ZXh0XzsKICAgICBwcml2YXRlIGludCB0eE1vZGUgPSBUWF9DTVQ7Ci0gICAgCisKICAgICBwcml2YXRlIFF1ZXVlIHF1ZXVlOwogICAgIHByaXZhdGUgUXVldWVTZXNzaW9uIHNlc3Npb247CiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb24gY29ubmVjdGlvbjsKQEAgLTYwLDEyICs2MCwxMiBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICB0eE1vZGUgPSBUWF9VTlNQRUNJRklFRDsKICAgICAgICAgICAgIH0KLQkgICAgLyoqIFRPRE8KKyAgICAgICAgLyoqIFRPRE8KICAgICAgICAgICAgIHF1ZXVlID0gKFF1ZXVlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL015UXVldWUiKTsKIAotICAgICAgICAgICAgcWNGYWN0b3J5ID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpIAorICAgICAgICAgICAgcWNGYWN0b3J5ID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpCiAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9NeVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkiKTsKLQkgICAgKiovCisgICAgICAgICoqLwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CkBAIC03NSw3ICs3NSw3IEBACiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNDTVQoKSB7IHJldHVybiB0eE1vZGUgPT0gVFhfQ01UOyB9CiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNCTVQoKSB7IHJldHVybiB0eE1vZGUgPT0gVFhfQk1UOyB9CiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNUeFVuc3BlY2lmaWVkKCkgeyByZXR1cm4gdHhNb2RlID09IFRYX1VOU1BFQ0lGSUVEOyB9Ci0gICAgCisKICAgICBwdWJsaWMgVGltZXIgY3JlYXRlVGltZXIobG9uZyBkdXJhdGlvbiwgU3RyaW5nIGluZm8pIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBUaW1lclNlcnZpY2UgdHMgPSBjb250ZXh0Xy5nZXRUaW1lclNlcnZpY2UoKTsKICAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZVNpbmdsZUFjdGlvblRpbWVyKGR1cmF0aW9uLCBuZXcgVGltZXJDb25maWcoaW5mbywgZmFsc2UpKTsKQEAgLTg2LDMwICs4NiwzMCBAQAogICAgICAgICByZXR1cm4gY3JlYXRlVGltZXIoZHVyYXRpb24sICJjcmVhdGVUaW1lcjxsb25nPiIgKyBkdXJhdGlvbik7CiAgICAgfQogCi0gICAgcHVibGljIFRpbWVyIGNyZWF0ZVRpbWVyKGxvbmcgaW5pdGlhbER1cmF0aW9uLCBsb25nIGludGVydmFsKSAKKyAgICBwdWJsaWMgVGltZXIgY3JlYXRlVGltZXIobG9uZyBpbml0aWFsRHVyYXRpb24sIGxvbmcgaW50ZXJ2YWwpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gY3JlYXRlVGltZXIoaW5pdGlhbER1cmF0aW9uLCBpbnRlcnZhbCwgCisgICAgICAgIHJldHVybiBjcmVhdGVUaW1lcihpbml0aWFsRHVyYXRpb24sIGludGVydmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImNyZWF0ZVRpbWVyPGxvbmcsIGxvbmc+IiArIGluaXRpYWxEdXJhdGlvbiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCIgKyBpbnRlcnZhbCk7CiAgICAgfQogCi0gICAgcHVibGljIFRpbWVyIGNyZWF0ZVRpbWVyKGxvbmcgaW5pdGlhbER1cmF0aW9uLCBsb25nIGludGVydmFsLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGluZm8pIAorICAgIHB1YmxpYyBUaW1lciBjcmVhdGVUaW1lcihsb25nIGluaXRpYWxEdXJhdGlvbiwgbG9uZyBpbnRlcnZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGluZm8pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBpZiggaXNCTVQoKSApIHsKICAgICAgICAgICAgIGNvbnRleHRfLmdldFVzZXJUcmFuc2FjdGlvbigpLmJlZ2luKCk7CiAgICAgICAgIH0KICAgICAgICAgVGltZXJTZXJ2aWNlIHRzID0gY29udGV4dF8uZ2V0VGltZXJTZXJ2aWNlKCk7Ci0gICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVJbnRlcnZhbFRpbWVyKGluaXRpYWxEdXJhdGlvbiwgaW50ZXJ2YWwsIAorICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlSW50ZXJ2YWxUaW1lcihpbml0aWFsRHVyYXRpb24sIGludGVydmFsLAogICAgICAgICAgICAgICAgICAgICBuZXcgVGltZXJDb25maWcobmV3IEFwcEluZm8oaW5mbyksIGZhbHNlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBpZiggaXNCTVQoKSApIHsKICAgICAgICAgICAgIGNvbnRleHRfLmdldFVzZXJUcmFuc2FjdGlvbigpLmNvbW1pdCgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0OwogICAgIH0KIAotICAgIHB1YmxpYyBUaW1lciBjcmVhdGVUaW1lcihEYXRlIGV4cGlyYXRpb25UaW1lKSAKKyAgICBwdWJsaWMgVGltZXIgY3JlYXRlVGltZXIoRGF0ZSBleHBpcmF0aW9uVGltZSkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFRpbWVyU2VydmljZSB0cyA9IGNvbnRleHRfLmdldFRpbWVyU2VydmljZSgpOwogICAgICAgICBpZiggaXNCTVQoKSApIHsKQEAgLTEyMCw3ICsxMjAsNyBAQAogICAgICAgICAvLyBUaGlzIHNob3VsZCBoYXBwZW4gdmVyeSByYXJlbHkgc2luY2UgY29udGFpbmVyIHB1dHMgdGhlIGJyYWtlcwogICAgICAgICAvLyBvbiBhIGJpdCBieSBhZGRpbmcgYSBmZXcgc2Vjb25kcyBpZiwgdXBvbiBjcmVhdGlvbiwgdGhlIGV4cGlyYXRpb24KICAgICAgICAgLy8gdGltZSBoYXMgYWxyZWFkeSBwYXNzZWQuCi0gICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVTaW5nbGVBY3Rpb25UaW1lcihleHBpcmF0aW9uVGltZSwgCisgICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVTaW5nbGVBY3Rpb25UaW1lcihleHBpcmF0aW9uVGltZSwKICAgICAgICAgICAgICAgICBuZXcgVGltZXJDb25maWcoImNyZWF0ZVRpbWVyPERhdGU+IiArIGV4cGlyYXRpb25UaW1lLCBmYWxzZSkpOwogICAgICAgICBpZiggaXNCTVQoKSApIHsKICAgICAgICAgICAgIGNvbnRleHRfLmdldFVzZXJUcmFuc2FjdGlvbigpLmNvbW1pdCgpOwpAQCAtMTI4LDE0ICsxMjgsMTQgQEAKICAgICAgICAgcmV0dXJuIHQ7CiAgICAgfQogCi0gICAgcHVibGljIFRpbWVyIGNyZWF0ZVRpbWVyKERhdGUgZXhwaXJhdGlvblRpbWUsIGxvbmcgaW50ZXJ2YWwpIAorICAgIHB1YmxpYyBUaW1lciBjcmVhdGVUaW1lcihEYXRlIGV4cGlyYXRpb25UaW1lLCBsb25nIGludGVydmFsKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBpZiggaXNCTVQoKSApIHsKICAgICAgICAgICAgIGNvbnRleHRfLmdldFVzZXJUcmFuc2FjdGlvbigpLmJlZ2luKCk7CiAgICAgICAgIH0KICAgICAgICAgVGltZXJTZXJ2aWNlIHRzID0gY29udGV4dF8uZ2V0VGltZXJTZXJ2aWNlKCk7Ci0gICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVJbnRlcnZhbFRpbWVyKGV4cGlyYXRpb25UaW1lLCBpbnRlcnZhbCwgCisgICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVJbnRlcnZhbFRpbWVyKGV4cGlyYXRpb25UaW1lLCBpbnRlcnZhbCwKICAgICAgICAgICAgICAgICBuZXcgVGltZXJDb25maWcoImNyZWF0ZVRpbWVyPERhdGUsIGxvbmc+IiArIGV4cGlyYXRpb25UaW1lICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIiArIGludGVydmFsLCBmYWxzZSkpOwogICAgICAgICBpZiggaXNCTVQoKSApIHsKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgICAgICAgICAgY29udGV4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCkuYmVnaW4oKTsKICAgICAgICAgfQogICAgICAgICBUaW1lclNlcnZpY2UgdHMgPSBjb250ZXh0Xy5nZXRUaW1lclNlcnZpY2UoKTsKLSAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZVNpbmdsZUFjdGlvblRpbWVyKGR1cmF0aW9uLCAKKyAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZVNpbmdsZUFjdGlvblRpbWVyKGR1cmF0aW9uLAogICAgICAgICAgICAgICAgIG5ldyBUaW1lckNvbmZpZygiY3JlYXRlVGltZXJBbmRSb2xsYmFjayIgKyBkdXJhdGlvbiwgZmFsc2UpKTsKICAgICAgICAgaWYoIGlzQk1UKCkgKSB7CiAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5yb2xsYmFjaygpOwpAQCAtMTY1LDcgKzE2NSw3IEBACiAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogICAgICAgICB9CiAgICAgICAgIFRpbWVyU2VydmljZSB0cyA9IGNvbnRleHRfLmdldFRpbWVyU2VydmljZSgpOwotICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlU2luZ2xlQWN0aW9uVGltZXIoZHVyYXRpb24sIAorICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlU2luZ2xlQWN0aW9uVGltZXIoZHVyYXRpb24sCiAgICAgICAgICAgICAgICAgbmV3IFRpbWVyQ29uZmlnKCJjcmVhdGVUaW1lckFuZENhbmNlbCIgKyBkdXJhdGlvbiwgZmFsc2UpKTsKICAgICAgICAgdC5jYW5jZWwoKTsKICAgICAgICAgaWYoIGlzQk1UKCkgKSB7CkBAIC0xNzUsMTIgKzE3NSwxMiBAQAogCiAgICAgcHVibGljIHZvaWQgY3JlYXRlVGltZXJBbmRDYW5jZWxBbmRDYW5jZWwobG9uZyBkdXJhdGlvbikgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKCBpc1R4VW5zcGVjaWZpZWQoKSApIHsKLSAgICAgICAgICAgIHJldHVybjsgCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSBpZiggaXNCTVQoKSApIHsKICAgICAgICAgICAgIGNvbnRleHRfLmdldFVzZXJUcmFuc2FjdGlvbigpLmJlZ2luKCk7CiAgICAgICAgIH0KICAgICAgICAgVGltZXJTZXJ2aWNlIHRzID0gY29udGV4dF8uZ2V0VGltZXJTZXJ2aWNlKCk7Ci0gICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVTaW5nbGVBY3Rpb25UaW1lcihkdXJhdGlvbiwgCisgICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVTaW5nbGVBY3Rpb25UaW1lcihkdXJhdGlvbiwKICAgICAgICAgICAgICAgICBuZXcgVGltZXJDb25maWcoImNyZWF0ZVRpbWVyQW5kQ2FuY2VsQW5kQ2FuY2VsIisgZHVyYXRpb24sIGZhbHNlKSk7CiAgICAgICAgIHQuY2FuY2VsKCk7CiAgICAgICAgIHQuY2FuY2VsKCk7CkBAIC0xODksNyArMTg5LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRpbWVyQW5kQ2FuY2VsQW5kUm9sbGJhY2sobG9uZyBkdXJhdGlvbikgCisgICAgcHVibGljIHZvaWQgY3JlYXRlVGltZXJBbmRDYW5jZWxBbmRSb2xsYmFjayhsb25nIGR1cmF0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgaWYoIGlzVHhVbnNwZWNpZmllZCgpICkgewogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogICAgICAgICB9CiAgICAgICAgIFRpbWVyU2VydmljZSB0cyA9IGNvbnRleHRfLmdldFRpbWVyU2VydmljZSgpOwotICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlU2luZ2xlQWN0aW9uVGltZXIoZHVyYXRpb24sIAorICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlU2luZ2xlQWN0aW9uVGltZXIoZHVyYXRpb24sCiAgICAgICAgICAgICAgICAgbmV3IFRpbWVyQ29uZmlnKCJjcmVhdGVUaW1lckFuZENhbmNlbEFuZFJvbGxiYWNrIiArIGR1cmF0aW9uLCBmYWxzZSkpOwogICAgICAgICB0LmNhbmNlbCgpOwogICAgICAgICBpZiggaXNCTVQoKSApIHsKQEAgLTI0Miw4ICsyNDIsOCBAQAogICAgICAgICAgICAgY29udGV4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCkuY29tbWl0KCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgY2FuY2VsVGltZXJBbmRSb2xsYmFjayhUaW1lciB0aW1lcikgCisKKyAgICBwdWJsaWMgdm9pZCBjYW5jZWxUaW1lckFuZFJvbGxiYWNrKFRpbWVyIHRpbWVyKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgaWYoIGlzVHhVbnNwZWNpZmllZCgpICkgewogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjU4LDcgKzI1OCw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBjYW5jZWxUaW1lckFuZENhbmNlbEFuZFJvbGxiYWNrKFRpbWVyIHRpbWVyKSAKKyAgICBwdWJsaWMgdm9pZCBjYW5jZWxUaW1lckFuZENhbmNlbEFuZFJvbGxiYWNrKFRpbWVyIHRpbWVyKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgaWYoIGlzVHhVbnNwZWNpZmllZCgpICkgewogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzA4LDcgKzMwOCw3IEBACiAgICAgICAgICAgICAvLyBzdWNjZXNzCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVtb3RlRXhjZXB0aW9uKCJnZXRUaW1lcnMgZmFpbHVyZSIpOwotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBUaW1lciBnZXRUaW1lUmVtYWluaW5nVGVzdDEoaW50IG51bUl0ZXJhdGlvbnMpIHRocm93cyBFeGNlcHRpb24gewpAQCAtMzE2LDcgKzMxNiw3IEBACiAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogICAgICAgICB9CiAgICAgICAgIFRpbWVyU2VydmljZSB0cyA9IGNvbnRleHRfLmdldFRpbWVyU2VydmljZSgpOwotICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlSW50ZXJ2YWxUaW1lcigxLCAxLCAKKyAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZUludGVydmFsVGltZXIoMSwgMSwKICAgICAgICAgICAgICAgICBuZXcgVGltZXJDb25maWcoImdldFRpbWVSZW1haW5pbmdUZXN0MSIsIGZhbHNlKSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVtYWluaW5nIHRpbWVzIGZvciAiICsgdC5nZXRJbmZvKCkpOwogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtSXRlcmF0aW9uczsgaSsrKSB7CkBAIC0zNDUsNyArMzQ1LDcgQEAKICAgICAgICAgICAgIGNvbnRleHRfLmdldFVzZXJUcmFuc2FjdGlvbigpLmJlZ2luKCk7CiAgICAgICAgIH0KICAgICAgICAgVGltZXJTZXJ2aWNlIHRzID0gY29udGV4dF8uZ2V0VGltZXJTZXJ2aWNlKCk7Ci0gICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVJbnRlcnZhbFRpbWVyKDEsIDEsIAorICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlSW50ZXJ2YWxUaW1lcigxLCAxLAogICAgICAgICAgICAgICAgIG5ldyBUaW1lckNvbmZpZygiZ2V0TmV4dFRpbWVvdXRUZXN0MSIsIGZhbHNlKSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVtYWluaW5nIHRpbWVzIGZvciAiICsgdC5nZXRJbmZvKCkpOwogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtSXRlcmF0aW9uczsgaSsrKSB7CkBAIC0zNjksNyArMzY5LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gYWN0aXZlIHRpbWVycy4gIAorICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gYWN0aXZlIHRpbWVycy4KICAgICBwdWJsaWMgdm9pZCBhc3NlcnROb1RpbWVycygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBjaGVja0NhbGxlclNlY3VyaXR5QWNjZXNzKCJhc3NlcnROb1RpbWVycyIsIHRydWUpOwogICAgICAgICBUaW1lclNlcnZpY2UgdHMgPSBjb250ZXh0Xy5nZXRUaW1lclNlcnZpY2UoKTsKQEAgLTM3OSwxMSArMzc5LDExIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBhc3NlcnRUaW1lck5vdEFjdGl2ZShUaW1lciB0aW1lcikgCisgICAgcHVibGljIHZvaWQgYXNzZXJ0VGltZXJOb3RBY3RpdmUoVGltZXIgdGltZXIpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgdGltZXIuZ2V0VGltZVJlbWFpbmluZygpOwotICAgICAgICAgICAgdGhyb3cgCisgICAgICAgICAgICB0aHJvdwogICAgICAgICAgICAgICAgIG5ldyBFeGNlcHRpb24oImFzc2VydFRpbWVyTm90QWN0aXZlIGNhbGxlZCB3aXRoIGFjdGl2ZSB0aW1lciIpOwogICAgICAgICB9IGNhdGNoKE5vU3VjaE9iamVjdExvY2FsRXhjZXB0aW9uIG5zb2xlKSB7CiAgICAgICAgICAgICAvLyBjYXVnaHQgZXhwZWN0ZWQgZXhjZXB0aW9uCkBAIC0zOTIsMTAgKzM5MiwxMCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIFNlcmlhbGl6YWJsZSBnZXRJbmZvTm9FcnJvcihUaW1lciB0aW1lcikgCisgICAgcHVibGljIFNlcmlhbGl6YWJsZSBnZXRJbmZvTm9FcnJvcihUaW1lciB0aW1lcikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBnZXRJbmZvKHRpbWVyLCBmYWxzZSk7Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIFNlcmlhbGl6YWJsZSBnZXRJbmZvKFRpbWVyIHRpbWVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTQ0NiwxOCArNDQ2LDE4IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCByZWN2TWVzc2FnZUFuZENyZWF0ZVRpbWVyKGJvb2xlYW4gZXhwZWN0TWVzc2FnZSkgCisgICAgcHVibGljIHZvaWQgcmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lcihib29sZWFuIGV4cGVjdE1lc3NhZ2UpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBpZiggaXNUeFVuc3BlY2lmaWVkKCkgKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiggaXNCTVQoKSApIHsKICAgICAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZWN2TWVzc2FnZUFuZENyZWF0ZVRpbWVyKCJyZWN2TWVzc2FnZUFuZENyZWF0ZVRpbWVyIiwgCisgICAgICAgICAgICByZWN2TWVzc2FnZUFuZENyZWF0ZVRpbWVyKCJyZWN2TWVzc2FnZUFuZENyZWF0ZVRpbWVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0TWVzc2FnZSk7CiAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpAQCAtNDcxLDcgKzQ3MSw3IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCByZWN2TWVzc2FnZUFuZENyZWF0ZVRpbWVyQW5kUm9sbGJhY2soYm9vbGVhbiBleHBlY3RNZXNzYWdlKSAKKyAgICBwdWJsaWMgdm9pZCByZWN2TWVzc2FnZUFuZENyZWF0ZVRpbWVyQW5kUm9sbGJhY2soYm9vbGVhbiBleHBlY3RNZXNzYWdlKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBpZiggaXNUeFVuc3BlY2lmaWVkKCkgKSB7CkBAIC01MTEsNyArNTExLDcgQEAKICAgICAgICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVTaW5nbGVBY3Rpb25UaW1lcigxLCBuZXcgVGltZXJDb25maWcodGltZXJOYW1lLCBmYWxzZSkpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB0aHJvdyBlOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTUyMiwxMSArNTIyLDExIEBACiAgICAgICAgICAgICBRdWV1ZVJlY2VpdmVyIHJlY2VpdmVyID0gc2Vzc2lvbi5jcmVhdGVSZWNlaXZlcihxdWV1ZSk7CiAgICAgICAgICAgICAvLyBTZW5kIGEgbWVzc2FnZS4KICAgICAgICAgICAgIFRleHRNZXNzYWdlIG1lc3NhZ2UgPSAoVGV4dE1lc3NhZ2UpIHJlY2VpdmVyLnJlY2VpdmVOb1dhaXQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiggbWVzc2FnZSA9PSBudWxsICkgewogICAgICAgICAgICAgICAgIGlmKCBleHBlY3RNZXNzYWdlICkgewogICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVtb3RlRXhjZXB0aW9uKCJFeHBlY3RpbmcgbWVzc2FnZSBpbiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lckFuZFJvbGxiYWNrIik7ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lckFuZFJvbGxiYWNrIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiggIWV4cGVjdE1lc3NhZ2UgKSB7CkBAIC01MzQsMTIgKzUzNCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZ2V0VGV4dCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgVGltZXJTZXJ2aWNlIHRzID0gY29udGV4dF8uZ2V0VGltZXJTZXJ2aWNlKCk7CiAgICAgICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlU2luZ2xlQWN0aW9uVGltZXIoMSwgbmV3IFRpbWVyQ29uZmlnKHRpbWVyTmFtZSwgZmFsc2UpKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogCiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC02MjUsNyArNjI1LDcgQEAKICAgICAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogICAgICAgICAgICAgICAgIHR4U3RhcnRlZCA9IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlSW50ZXJ2YWxUaW1lcigxLCAxLCAKKyAgICAgICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVJbnRlcnZhbFRpbWVyKDEsIDEsCiAgICAgICAgICAgICAgICAgICAgIG5ldyBUaW1lckNvbmZpZygiZG9UaW1lclN0dWZmXyIgKyBtZXRob2QsIGZhbHNlKSk7CiAgICAgICAgICAgICB0LmNhbmNlbCgpOwogICAgICAgICAgICAgaWYoICFhbGxvd2VkICkgewpAQCAtNjg4LDcgKzY4OCw3IEBACiAgICAgICAgICAgICB9IGNhdGNoKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7IH0KICAgICAgICAgICAgIGdldFRpbWVyU2VydmljZSgiZWpiVGltZW91dCIsIHRydWUpOwogICAgICAgICAgICAgZG9UaW1lclN0dWZmKCJlamJUaW1lb3V0IiwgdHJ1ZSk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICB9CiAKICAgICBwcm90ZWN0ZWQgdm9pZCBjaGVja0NhbGxlclNlY3VyaXR5QWNjZXNzKFN0cmluZyBtZXRob2QsIGJvb2xlYW4gYWxsb3dlZCkgewpAQCAtNzMwLDE5ICs3MzAsMTkgQEAKIAogCiAgICAgcHJvdGVjdGVkIHZvaWQgc2V0dXBKbXNDb25uZWN0aW9uKCkgewotCS8qKiBUT0RPCi0JCisgICAgLyoqIFRPRE8KKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBxY0ZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBzZXNzaW9uID0gY29ubmVjdGlvbi5jcmVhdGVRdWV1ZVNlc3Npb24odHJ1ZSwgMCk7CiAgICAgICAgICAgICBjb25uZWN0aW9uLnN0YXJ0KCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsgZS5wcmludFN0YWNrVHJhY2UoKTsgfQotCSovCisgICAgKi8KICAgICB9CiAKICAgICBwcm90ZWN0ZWQgdm9pZCBjbGVhbnVwKCkgewotCS8qKiBUT0RPCisgICAgLyoqIFRPRE8KICAgICAgICAgaWYoIGNvbm5lY3Rpb24gIT0gbnVsbCApIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5jbG9zZSgpOwpAQCAtNzUxLDcgKzc1MSw3IEBACiAgICAgICAgICAgICAgICAgam1zZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCSoqLworICAgICoqLwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9yZXNjaGVkdWxlX2FmdGVyX2ZhaWx1cmVzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9yZXNjaGVkdWxlX2FmdGVyX2ZhaWx1cmVzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzFkZDFhMS4uNjk4OWYwNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvcmVzY2hlZHVsZV9hZnRlcl9mYWlsdXJlcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3Jlc2NoZWR1bGVfYWZ0ZXJfZmFpbHVyZXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItdGltZXItcmVzY2hlZHVsZS1hZnRlci1mYWlsdXJlcyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3Jlc2NoZWR1bGVfYWZ0ZXJfZmFpbHVyZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvcmVzY2hlZHVsZV9hZnRlcl9mYWlsdXJlcy9idWlsZC54bWwKaW5kZXggNDJmNzNjMi4uZmRkODVjYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvcmVzY2hlZHVsZV9hZnRlcl9mYWlsdXJlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvcmVzY2hlZHVsZV9hZnRlcl9mYWlsdXJlcy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDIwICs0OCwyMCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU3RsZXMqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TdGxlcy5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9InJlc2V0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXNldC12YWx1ZSIgdmFsdWU9InRydWUiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InJlc2V0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CkBAIC03NCwxMyArNzQsMTMgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgIHRhcmdldD0icmVzZXQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc2V0LXZhbHVlIiB2YWx1ZT0iIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvcmVzY2hlZHVsZV9hZnRlcl9mYWlsdXJlcy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9yZXNjaGVkdWxlX2FmdGVyX2ZhaWx1cmVzL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA3ZGRlYWUxLi43YjAzNzlkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9yZXNjaGVkdWxlX2FmdGVyX2ZhaWx1cmVzL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9yZXNjaGVkdWxlX2FmdGVyX2ZhaWx1cmVzL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjMsMjUgKzIzLDI1IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIEluaXRpYWxDb250ZXh0IGNvbnRleHQ7CiAKICAgICBARUpCIHByaXZhdGUgc3RhdGljIFN0bGVzIGJlYW47CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7IAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamIzMS10aW1lci1yZXNjaGVkdWxlX2FmdGVyX2ZhaWx1cmVzIik7CiAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyB0aW1lcnMgZm9yIHJlc2NoZWR1bGVfYWZ0ZXJfZmFpbHVyZXMgdGltZXIgdGVzdCIpOwotICAgICAgICAgICAgYmVhbi5jcmVhdGVUaW1lcnMoKTsgCisgICAgICAgICAgICBiZWFuLmNyZWF0ZVRpbWVycygpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIHNvbWUgdGltZSBmb3IgdGltZXJzIHRvIGZhaWwgYW5kIGJlIHJlc2NoZWR1bGVkIGZvciByZXNjaGVkdWxlX2FmdGVyX2ZhaWx1cmVzIHRpbWVyIHRlc3QiKTsKICAgICAgICAgICAgIFRocmVhZC5zbGVlcCgyNDAwMCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlZlcmlmeWluZyB0aW1lcnMgZm9yIHJlc2NoZWR1bGVfYWZ0ZXJfZmFpbHVyZXMgdGltZXIgdGVzdCIpOwotICAgICAgICAgICAgYmVhbi52ZXJpZnlUaW1lcnMoKTsgCisgICAgICAgICAgICBiZWFuLnZlcmlmeVRpbWVycygpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInJlc2NoZWR1bGVfYWZ0ZXJfZmFpbHVyZXM6ICIsIHN0YXQuUEFTUyApOwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2Fubi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfYW5uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzAzYzNhOS4uZTNjMjNmNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfYW5uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfYW5uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE2ICsxNSwxNiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXRpbWVyLXNjaGVkdWxlLWFubiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2Fubi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9hbm4vYnVpbGQueG1sCmluZGV4IGZmZGY3MWEuLjg5NDAwYTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2Fubi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfYW5uL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TdGxlcyouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1N0bGVzLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYxLDEwICs2MSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9hbm4vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfYW5uL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBlYjYyYmM0Li5iOWY3Zjg3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9hbm4vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2Fubi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTIzLDE0ICsyMywxNCBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBJbml0aWFsQ29udGV4dCBjb250ZXh0OwogCiAgICAgQEVKQiBwcml2YXRlIHN0YXRpYyBTdGxlcyBiZWFuOwogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgeyAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAgICAgICAgIGJvb2xlYW4gZG9KbXMgPSBmYWxzZTsgLy8gVE9ETyAoYXJncy5sZW5ndGggPT0gMSkgJiYgKGFyZ3NbMF0uZXF1YWxzSWdub3JlQ2FzZSgiam1zIikpOwogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImVqYjMxLXRpbWVyLXNjaGVkdWxlX2FubiIpOwpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIHRpbWVycyB0byBleHBpcmUgZm9yIHNjaGVkdWxlX2FubiB0aW1lciB0ZXN0Iik7CiAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoMTIwMDApOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWZXJpZnlpbmcgdGltZXJzIGZvciBzY2hlZHVsZV9hbm4gdGltZXIgdGVzdCIpOwotICAgICAgICAgICAgYmVhbi52ZXJpZnlUaW1lcnMoKTsgCisgICAgICAgICAgICBiZWFuLnZlcmlmeVRpbWVycygpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInNjaGVkdWxlX2FubjogIiwgc3RhdC5QQVNTICk7CiAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfYW5uL2VqYi9TdGxlc0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfYW5uL2VqYi9TdGxlc0VKQi5qYXZhCmluZGV4IGVjYmYyNmEuLmRkY2NlNjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2Fubi9lamIvU3RsZXNFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9hbm4vZWpiL1N0bGVzRUpCLmphdmEKQEAgLTEwNyw3ICsxMDcsNyBAQAogICAgICAgICAgICAgICAgIGVycm9ycy5hZGQoaW5mbyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKCFleHBlY3RlZF9jYWxsZXJzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNaXNzZWQgaW5mbyBjb3VudDogIiArIGV4cGVjdGVkX2NhbGxlcnMuc2l6ZSgpKTsKICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKQEAgLTEzNCwxMiArMTM0LDEyIEBACiAgICAgICAgICAgICBmb3IgKFN0cmluZyBlIDogZXJyb3JzKSB7CiAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCIiICsgZSkuYXBwZW5kKCIsICIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiSW50ZXJuYWwgZXJyb3I6IFNjaGVkdWxlRXhwcmVzc2lvbnMgZm9yIGluZm9zOiAiIAorICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiSW50ZXJuYWwgZXJyb3I6IFNjaGVkdWxlRXhwcmVzc2lvbnMgZm9yIGluZm9zOiAiCiAgICAgICAgICAgICAgICAgICAgICsgc2IudG9TdHJpbmcoKSArICIgd2VyZSBub3QgYXZhaWxhYmxlIGF0IHZlcmlmeSEiKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICh0aW1lclN2Yy5nZXRUaW1lcnMoKS5zaXplKCkgIT0gMCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiQWZ0ZXIgY2VuY2VsLCB0aW1lclN2Yy5nZXRUaW1lcnMoKS5zaXplKCkgPSAiIAorICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiQWZ0ZXIgY2VuY2VsLCB0aW1lclN2Yy5nZXRUaW1lcnMoKS5zaXplKCkgPSAiCiAgICAgICAgICAgICAgICAgICAgICsgdGltZXJTdmMuZ2V0VGltZXJzKCkuc2l6ZSgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2V4cC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfZXhwL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTE5ZTgxMS4uZjRlYjIxZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfZXhwL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfZXhwL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE1ICsxNSwxNSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXRpbWVyLXNjaGVkdWxlLWV4cCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2V4cC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9leHAvYnVpbGQueG1sCmluZGV4IDc2NTEwNDguLjk4OTlkOGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2V4cC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfZXhwL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TdGxlcyouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1N0bGVzLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYxLDEwICs2MSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9leHAvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfZXhwL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA2MjMzODdkLi5mYzI2MjQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9leHAvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2V4cC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI1LDE0ICsyNSwxNCBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBJbml0aWFsQ29udGV4dCBjb250ZXh0OwogCiAgICAgQEVKQiBwcml2YXRlIHN0YXRpYyBTdGxlcyBiZWFuOwogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgeyAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAgICAgICAgIGJvb2xlYW4gZG9KbXMgPSBmYWxzZTsgLy8gVE9ETyAoYXJncy5sZW5ndGggPT0gMSkgJiYgKGFyZ3NbMF0uZXF1YWxzSWdub3JlQ2FzZSgiam1zIikpOwogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImVqYjMxLXRpbWVyLXNjaGVkdWxlX2V4cCIpOwpAQCAtNDAsMTEgKzQwLDExIEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgdGltZXJzIGZvciBzY2hlZHVsZV9leHAgdGltZXIgdGVzdCIpOwotICAgICAgICAgICAgYmVhbi5jcmVhdGVUaW1lcnMoKTsgCisgICAgICAgICAgICBiZWFuLmNyZWF0ZVRpbWVycygpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIHRpbWVycyB0byBleHBpcmUgZm9yIHNjaGVkdWxlX2V4cCB0aW1lciB0ZXN0Iik7CiAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoMTIwMDApOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWZXJpZnlpbmcgdGltZXJzIGZvciBzY2hlZHVsZV9leHAgdGltZXIgdGVzdCIpOwotICAgICAgICAgICAgYmVhbi52ZXJpZnlUaW1lcnMoKTsgCisgICAgICAgICAgICBiZWFuLnZlcmlmeVRpbWVycygpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInNjaGVkdWxlX2V4cDogIiwgc3RhdC5QQVNTICk7CiAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfZXhwL2VqYi9TdGxlc0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfZXhwL2VqYi9TdGxlc0VKQi5qYXZhCmluZGV4IDUxZTlmYTcuLmY1ZjkwYjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2V4cC9lamIvU3RsZXNFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9leHAvZWpiL1N0bGVzRUpCLmphdmEKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgZXhwZWN0ZWRfY2FsbGVycy5hZGQoIiIgKyB0Yy5nZXRJbmZvKCkpOwogCiAgICAgICAgIGludCBkYXlPZldlZWsgPSAobm93LmdldChDYWxlbmRhci5EQVlfT0ZfV0VFSykgLSAxKTsgLy8gU1VOIGlzIDEKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjcmVhdGVUaW1lcnMoKTogY3JlYXRpbmcgdGltZXIgd2l0aCBkYXlPZldlZWs9dG9kYXktdG9kYXkgKCIgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRlVGltZXJzKCk6IGNyZWF0aW5nIHRpbWVyIHdpdGggZGF5T2ZXZWVrPXRvZGF5LXRvZGF5ICgiCiAgICAgICAgICAgICAgICAgKyBkYXlPZldlZWsgKyAiLSIgKyBkYXlPZldlZWsgKyAiKSAiKTsKICAgICAgICAgc2UgPSBuZXcgU2NoZWR1bGVFeHByZXNzaW9uKCkuc2Vjb25kKCIyIC8gICAgNSIpLm1pbnV0ZSgiKiIpLmhvdXIoIioiKS4KICAgICAgICAgICAgICAgICBkYXlPZldlZWsoIiIgKyBkYXlPZldlZWsrIiAtICAiICsgZGF5T2ZXZWVrKTsKQEAgLTc3LDcgKzc3LDcgQEAKICAgICAgICAgICAgIHNlY29uZCAtPSA2MDsKICAgICAgICAgfQogCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRlVGltZXJzKCk6IGNyZWF0aW5nIHRpbWVyIHdpdGggc2Vjb25kPSIgKyAoc2Vjb25kICsgNSkgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRlVGltZXJzKCk6IGNyZWF0aW5nIHRpbWVyIHdpdGggc2Vjb25kPSIgKyAoc2Vjb25kICsgNSkKICAgICAgICAgICAgICAgICArICIsIGhvdXI9IiArIHMgKTsKICAgICAgICAgc2UgPSBuZXcgU2NoZWR1bGVFeHByZXNzaW9uKCkuc2Vjb25kKHNlY29uZCArIDUpLm1pbnV0ZSgiKiIpLmhvdXIocyk7CiAKQEAgLTE3NCw3ICsxNzQsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgdC5jYW5jZWwoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoIWV4cGVjdGVkX2NhbGxlcnMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgICAgICBmb3IgKFN0cmluZyBjIDogZXhwZWN0ZWRfY2FsbGVycykgewpAQCAtMTk5LDEyICsxOTksMTIgQEAKICAgICAgICAgICAgIGZvciAoU3RyaW5nIGUgOiBlcnJvcnMpIHsKICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIiIgKyBlKS5hcHBlbmQoIiwgIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJJbnRlcm5hbCBlcnJvcjogU2NoZWR1bGVFeHByZXNzaW9ucyBmb3IgaW5mb3M6ICIgCisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJJbnRlcm5hbCBlcnJvcjogU2NoZWR1bGVFeHByZXNzaW9ucyBmb3IgaW5mb3M6ICIKICAgICAgICAgICAgICAgICAgICAgKyBzYi50b1N0cmluZygpICsgIiB3ZXJlIG5vdCBhdmFpbGFibGUgYXQgdmVyaWZ5ISIpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHRpbWVyU3ZjLmdldFRpbWVycygpLnNpemUoKSAhPSAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJBZnRlciBjZW5jZWwsIHRpbWVyU3ZjLmdldFRpbWVycygpLnNpemUoKSA9ICIgCisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJBZnRlciBjZW5jZWwsIHRpbWVyU3ZjLmdldFRpbWVycygpLnNpemUoKSA9ICIKICAgICAgICAgICAgICAgICAgICAgKyB0aW1lclN2Yy5nZXRUaW1lcnMoKS5zaXplKCkpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfb25fZWpiX3RpbWVvdXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX29uX2VqYl90aW1lb3V0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODFhOWY3ZC4uNTEzMmYyZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfb25fZWpiX3RpbWVvdXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9vbl9lamJfdGltZW91dC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNiArMTUsMTYgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi10aW1lci1zY2hlZHVsZS1vbi1lamItdGltZW91dCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX29uX2VqYl90aW1lb3V0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX29uX2VqYl90aW1lb3V0L2J1aWxkLnhtbAppbmRleCA5MmJkNTUzLi43OTA1OTJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9vbl9lamJfdGltZW91dC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfb25fZWpiX3RpbWVvdXQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1N0bGVzKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovU3RsZXMuY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjEsMTAgKzYxLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX29uX2VqYl90aW1lb3V0L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX29uX2VqYl90aW1lb3V0L2NsaWVudC9DbGllbnQuamF2YQppbmRleCA5OWFlNDgzLi41NjFkMTRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9vbl9lamJfdGltZW91dC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfb25fZWpiX3RpbWVvdXQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMiwxNCArMzIsMTQgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgSW5pdGlhbENvbnRleHQgY29udGV4dDsKIAogICAgIEBFSkIgcHJpdmF0ZSBzdGF0aWMgU3RsZXMgYmVhbjsKIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamIzMS10aW1lci1zY2hlZHVsZV9vbl9lamJfdGltZW91dCIpOwogCiAKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyB0aW1lcnMgdG8gZXhwaXJlIGZvciBzY2hlZHVsZV9vbl9lamJfdGltZW91dCB0aW1lciB0ZXN0Iik7CiAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoMjAwMCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlZlcmlmeWluZyB0aW1lcnMgZm9yIHNjaGVkdWxlX29uX2VqYl90aW1lb3V0IHRpbWVyIHRlc3QiKTsKLSAgICAgICAgICAgIGJlYW4udmVyaWZ5VGltZXJzKCk7IAorICAgICAgICAgICAgYmVhbi52ZXJpZnlUaW1lcnMoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJzY2hlZHVsZV9vbl9lamJfdGltZW91dDogIiwgc3RhdC5QQVNTICk7CiAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfb25fZWpiX3RpbWVvdXQvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX29uX2VqYl90aW1lb3V0L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggNDhlOGNhNC4uMjZkOWFjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfb25fZWpiX3RpbWVvdXQvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9vbl9lamJfdGltZW91dC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0xOSw3ICsxOSw3IEBACiA8ZWpiLWphciB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0gICAgICAJICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzEueHNkIgorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18xLnhzZCIKICAgICAgICAgIHZlcnNpb249IjMuMSI+CiAgICAgPGVudGVycHJpc2UtYmVhbnM+CiAgICAgICAgIDxzZXNzaW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfb25fZWpiX3RpbWVvdXQvZWpiL1N0bGVzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9vbl9lamJfdGltZW91dC9lamIvU3RsZXNFSkIuamF2YQppbmRleCA5NTNkYTk0Li4yZWY1ZmY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9vbl9lamJfdGltZW91dC9lamIvU3RsZXNFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9vbl9lamJfdGltZW91dC9lamIvU3RsZXNFSkIuamF2YQpAQCAtNDgsOSArNDgsOSBAQAogCiAgICAgcHVibGljIHZvaWQgdmVyaWZ5VGltZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmICghdGltZXJzLmNvbnRhaW5zKCJUaW1lcjAxIikpCi0gICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJUaW1lcjAxIGhhZG4ndCBmaXJlZCIpOyAKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlRpbWVyMDEgaGFkbid0IGZpcmVkIik7CiAgICAgICAgIGlmICghdGltZXJzLmNvbnRhaW5zKCJUaW1lcjAwIikpCi0gICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJUaW1lcjAwIGhhZG4ndCBmaXJlZCIpOyAKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlRpbWVyMDAgaGFkbid0IGZpcmVkIik7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2J1aWxkLnhtbAppbmRleCBjY2I4NjVjLi45ZWViMzFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9idWlsZC54bWwKQEAgLTEwNSwxMCArMTA1LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBzZXQgb2YgZWpiLWVqYjMyIHRlc3RzIGluIGEgZnVsbCBwcm9maWxlKQotCQkJYW50IGxpdGUgKEV4ZWN1dGVzIHNldCBvZiB0aGUgZWpiLWVqYjMyIHRlc3RzIGluIGEgbGl0ZSBwcm9maWxlKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBzZXQgb2YgZWpiLWVqYjMyIHRlc3RzIGluIGEgZnVsbCBwcm9maWxlKQorICAgICAgICAgICAgYW50IGxpdGUgKEV4ZWN1dGVzIHNldCBvZiB0aGUgZWpiLWVqYjMyIHRlc3RzIGluIGEgbGl0ZSBwcm9maWxlKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL2FzeW5jL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9hc3luYy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGFjYmRlZDkuLmU5ZjZkOWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL2FzeW5jL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvYXN5bmMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzItZWpibGl0ZS1hc3luYyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iJHttb2R1bGV9Ii8+Ci0JCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvYXN5bmMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvYXN5bmMvYnVpbGQueG1sCmluZGV4IDk1YzBlYjMuLjgwMjY1YjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL2FzeW5jL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9hc3luYy9idWlsZC54bWwKQEAgLTM0LDExICszNCwxMSBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9IndhciIvPgotICAgICAgICA8L2FudGNhbGw+ICAgIAorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KQEAgLTQ4LDkgKzQ4LDkgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01OCw5ICs1OCw5IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtNzIsNyArNzIsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvYXN5bmMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvYXN5bmMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGMyOThhNGIuLmMxOGNkZTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL2FzeW5jL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9hc3luYy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CkBAIC0zNCw0NiArMzQsNDYgQEAKICAgICBwcml2YXRlIFN0cmluZyBwb3J0OwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewotCWFwcE5hbWUgPSBhcmdzWzBdOwotCXN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7Ci0JQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7ICAgICAgIAotICAgICAgICBjbGllbnQuZG9UZXN0KCk7CQorICAgIGFwcE5hbWUgPSBhcmdzWzBdOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7CisgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CisgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwogICAgIH0KIAogICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewotCWhvc3QgPSBhcmdzWzFdOworICAgIGhvc3QgPSBhcmdzWzFdOwogICAgICAgICBwb3J0ID0gYXJnc1syXTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKLQl0cnkgeworICAgIHRyeSB7CiAKLQkgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgCisgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICAgICAgIi8iICsgYXBwTmFtZSArICIvSGVsbG9TZXJ2bGV0IjsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyB3ZWJjbGllbnQgc2VydmxldCBhdCAiICsgdXJsKTsKIAotCSAgICBVUkwgdSA9IG5ldyBVUkwodXJsKTsKLSAgICAgICAgCi0JICAgIEh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKXUub3BlbkNvbm5lY3Rpb24oKTsKLQkgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKLQkgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOwotCSAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlciAobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7Ci0JICAgIFN0cmluZyBsaW5lID0gbnVsbDsKLQkgICAgd2hpbGUoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKQotCQlTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7Ci0JICAgIGlmKGNvZGUgIT0gMjAwKSB7Ci0JCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbmNvcnJlY3QgcmV0dXJuIGNvZGU6ICIgKyBjb2RlKTsKLQkgICAgfQotCSAgICAKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworICAgICAgICBVUkwgdSA9IG5ldyBVUkwodXJsKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gYzEgPSAoSHR0cFVSTENvbm5lY3Rpb24pdS5vcGVuQ29ubmVjdGlvbigpOworICAgICAgICBpbnQgY29kZSA9IGMxLmdldFJlc3BvbnNlQ29kZSgpOworICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7CisgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKKyAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOworICAgICAgICB3aGlsZSgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKKyAgICAgICAgaWYoY29kZSAhPSAyMDApIHsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluY29ycmVjdCByZXR1cm4gY29kZTogIiArIGNvZGUpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworCisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9hc3luYy93YXIvSGVsbG9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9hc3luYy93YXIvSGVsbG9TZXJ2bGV0LmphdmEKaW5kZXggNzIwNWI3MC4uODRhODMxMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvYXN5bmMvd2FyL0hlbGxvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL2FzeW5jL3dhci9IZWxsb1NlcnZsZXQuamF2YQpAQCAtMzUsNyArMzUsNyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojppbml0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmluaXQiKTsKICAgICB9CiAKICAgICBARUpCIFNpbmdsZXRvbkJlYW4gc2I7CkBAIC00NiwxMyArNDYsMTMgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAotCXJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmRvR2V0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmRvR2V0Iik7CiAKIAotCXRyeSB7CisgICAgdHJ5IHsKIAogICAgICAgICAgICAgc2IuaGVsbG8oKTsKIApAQCAtODAsMTggKzgwLDE4IEBACiAgICAgICAgICAgICB9CiAKIAotCX0gY2F0Y2goUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IGU7Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICB9IGNhdGNoKFJ1bnRpbWVFeGNlcHRpb24gZSkgeworICAgICAgICB0aHJvdyBlOworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CiAgICAgICAgfQogCiAKLQlvdXQucHJpbnRsbigiPEhUTUw+IDxIRUFEPiA8VElUTEU+IEpNUyBTZXJ2bGV0IE91dHB1dCA8L1RJVExFPiA8L0hFQUQ+IDxCT0RZIEJHQ09MT1I9d2hpdGU+Iik7CisgICAgb3V0LnByaW50bG4oIjxIVE1MPiA8SEVBRD4gPFRJVExFPiBKTVMgU2VydmxldCBPdXRwdXQgPC9USVRMRT4gPC9IRUFEPiA8Qk9EWSBCR0NPTE9SPXdoaXRlPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxDRU5URVI+IDxGT05UIHNpemU9KzEgQ09MT1I9Ymx1ZT5EYXRhYmFzZVNlcnZlbHQgOjogQWxsIGluZm9ybWF0aW9uIEkgY2FuIGdpdmUgPC9GT05UPiA8L0NFTlRFUj4gPHA+ICIgKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gQ29udGV4dCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRDb250ZXh0UGF0aCgpICsgIjxicj4iICk7IAotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBTZXJ2bGV0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldFNlcnZsZXRQYXRoKCkgKyAiPGJyPiIgKTsgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBhdGggSW5mbyA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0UGF0aEluZm8oKSArICI8YnI+IiApOyAKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gQ29udGV4dCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRDb250ZXh0UGF0aCgpICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFNlcnZsZXQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0U2VydmxldFBhdGgoKSArICI8YnI+IiApOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBQYXRoIEluZm8gOiAgPC9GT05UPiAiICsgcmVxLmdldFBhdGhJbmZvKCkgKyAiPGJyPiIgKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L0JPRFk+IDwvSFRNTD4gIik7CiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9hc3luYy93YXIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvYXN5bmMvd2FyL1NpbmdsZXRvbkJlYW4uamF2YQppbmRleCA0ZDZhNTNjLi45NjAwNGE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9hc3luYy93YXIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL2FzeW5jL3dhci9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTM3LDI0ICszNywyNCBAQAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjppbml0KCkiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlRocmVhZCA9ICIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpKTsKLQltZS5mb29Bc3luYygpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhyZWFkID0gIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOworICAgIG1lLmZvb0FzeW5jKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmhlbGxvKCkiKTsKLQlyZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpoZWxsbygpIik7CisgICAgcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOwogICAgIH0KIAogICAgIEBBc3luY2hyb25vdXMKICAgICBwdWJsaWMgdm9pZCBmb29Bc3luYygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmZvb0FzeW5jKCkiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlRocmVhZCA9ICIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpKTsKLQlnb3RBc3luY0NhbGwgPSB0cnVlOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6Zm9vQXN5bmMoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhyZWFkID0gIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOworICAgIGdvdEFzeW5jQ2FsbCA9IHRydWU7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gZ2V0UGFzc2VkKCkgewotCXJldHVybiBnb3RBc3luY0NhbGw7CisgICAgcmV0dXJuIGdvdEFzeW5jQ2FsbDsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvYXN5bmMvd2FyL1N0YXRlZnVsQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvYXN5bmMvd2FyL1N0YXRlZnVsQmVhbi5qYXZhCmluZGV4IDNhOTIzNTkuLmU0NmM3YTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL2FzeW5jL3dhci9TdGF0ZWZ1bEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9hc3luYy93YXIvU3RhdGVmdWxCZWFuLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjo6aGVsbG8oKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuOjpoZWxsbygpIik7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL2FzeW5jL3dhci9TdGF0ZWZ1bEJlYW4yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9hc3luYy93YXIvU3RhdGVmdWxCZWFuMi5qYXZhCmluZGV4IGFlMjc2N2YuLmMxYTJmZDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL2FzeW5jL3dhci9TdGF0ZWZ1bEJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvYXN5bmMvd2FyL1N0YXRlZnVsQmVhbjIuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuMjo6aGVsbG8oKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuMjo6aGVsbG8oKSIpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9idWlsZC54bWwKaW5kZXggMDExYmE0NS4uZmUyNGJhYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL2J1aWxkLnhtbApAQCAtNDYsOSArNDYsOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWpiMzItZWpibGl0ZSB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWpiMzItZWpibGl0ZSB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL25vbnBlcnNpc3RlbnR0aW1lci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk1ZDVmMjcuLjE4MmM3YTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL25vbnBlcnNpc3RlbnR0aW1lci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL25vbnBlcnNpc3RlbnR0aW1lci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMyArMTUsMTMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMi1lamJsaXRlLXRpbWVyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIke21vZHVsZX0iLz4KLQkKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL2J1aWxkLnhtbAppbmRleCBkOGM3ZDQ3Li44OGM3NmQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL25vbnBlcnNpc3RlbnR0aW1lci9idWlsZC54bWwKQEAgLTM0LDExICszNCwxMSBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9IndhciIvPgotICAgICAgICA8L2FudGNhbGw+ICAgIAorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KQEAgLTQ4LDkgKzQ4LDkgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01OCw5ICs1OCw5IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtNzIsNyArNzIsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL25vbnBlcnNpc3RlbnR0aW1lci9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYzI5OGE0Yi4uYzE4Y2RlMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwpAQCAtMzQsNDYgKzM0LDQ2IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgcG9ydDsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKLQlhcHBOYW1lID0gYXJnc1swXTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwotCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOyAgICAgICAKLSAgICAgICAgY2xpZW50LmRvVGVzdCgpOwkKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOworICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOworICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKICAgICB9CiAKICAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKLQlob3N0ID0gYXJnc1sxXTsKKyAgICBob3N0ID0gYXJnc1sxXTsKICAgICAgICAgcG9ydCA9IGFyZ3NbMl07CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCi0JdHJ5IHsKKyAgICB0cnkgewogCi0JICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIAorICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKwogICAgICAgICAgICAgICAgICIvIiArIGFwcE5hbWUgKyAiL0hlbGxvU2VydmxldCI7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgd2ViY2xpZW50IHNlcnZsZXQgYXQgIiArIHVybCk7CiAKLQkgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7Ci0gICAgICAgIAotCSAgICBIdHRwVVJMQ29ubmVjdGlvbiBjMSA9IChIdHRwVVJMQ29ubmVjdGlvbil1Lm9wZW5Db25uZWN0aW9uKCk7Ci0JICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7Ci0JICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKLQkgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwotCSAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0JICAgIHdoaWxlKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkKLQkJU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOwotCSAgICBpZihjb2RlICE9IDIwMCkgewotCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW5jb3JyZWN0IHJldHVybiBjb2RlOiAiICsgY29kZSk7Ci0JICAgIH0KLQkgICAgCi0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7CiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKXUub3BlbkNvbm5lY3Rpb24oKTsKKyAgICAgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKKyAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOworICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlciAobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CisgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKKyAgICAgICAgd2hpbGUoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7CisgICAgICAgIGlmKGNvZGUgIT0gMjAwKSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbmNvcnJlY3QgcmV0dXJuIGNvZGU6ICIgKyBjb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKKworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL3dhci9BcHBJbmZvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvd2FyL0FwcEluZm8uamF2YQppbmRleCAwZTc4NjRjLi5kYTMxNjQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvd2FyL0FwcEluZm8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvd2FyL0FwcEluZm8uamF2YQpAQCAtMjgsNiArMjgsNiBAQAogCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCiAgICAgewotCXJldHVybiBmb287CisgICAgcmV0dXJuIGZvbzsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvd2FyL0Zvb0JNVC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL3dhci9Gb29CTVQuamF2YQppbmRleCA1ZjEyYmZmLi4wOGQ1ZTA5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvd2FyL0Zvb0JNVC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL25vbnBlcnNpc3RlbnR0aW1lci93YXIvRm9vQk1ULmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQk1UOjpUaW1lb3V0IC0tPiAiICsgdC5nZXRJbmZvKCkpOwogICAgICAgICAgICAgaWYgKHQuaXNQZXJzaXN0ZW50KCkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkZvb0JNVDo6VGltZW91dCAtPiAiIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJGb29CTVQ6OlRpbWVvdXQgLT4gIgogICAgICAgICAgICAgICAgICAgICAgICArIHQuZ2V0SW5mbygpICsgIiBpcyBQRVJTSVNURU5UISEhIik7CiAgICAgICAgIH0gY2F0Y2goUnVudGltZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdvdCBleGNlcHRpb24gd2hpbGUgY2FsbGluZyBnZXRJbmZvIik7CkBAIC01MSw3ICs1MSw3IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgdGhyb3dzIEVKQkV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJsaXRlLnRpbWVyLkZvbzo6aW5pdCAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gZWpibGl0ZS50aW1lci5Gb286OmluaXQgISEiKTsKICAgICAgICAgaXNCTVQgPSB0cnVlOwogICAgICAgICBzZXRDb250ZXh0KHNjKTsKICAgICAgICAgZ2V0VGltZXJTZXJ2aWNlKCJpbml0IiwgdHJ1ZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvd2FyL0Zvb0NNVC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL3dhci9Gb29DTVQuamF2YQppbmRleCBjZjk0MzdlLi4wMzU3YTJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvd2FyL0Zvb0NNVC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL25vbnBlcnNpc3RlbnR0aW1lci93YXIvRm9vQ01ULmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQ01UOjpUaW1lb3V0IC0tPiAiICsgdC5nZXRJbmZvKCkpOwogICAgICAgICAgICAgaWYgKHQuaXNQZXJzaXN0ZW50KCkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkZvb0NNVDo6VGltZW91dCAtPiAiIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJGb29DTVQ6OlRpbWVvdXQgLT4gIgogICAgICAgICAgICAgICAgICAgICAgICArIHQuZ2V0SW5mbygpICsgIiBpcyBQRVJTSVNURU5UISEhIik7CiAgICAgICAgIH0gY2F0Y2goUnVudGltZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdvdCBleGNlcHRpb24gd2hpbGUgY2FsbGluZyBnZXRJbmZvIik7CkBAIC01MCw3ICs1MCw3IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgdGhyb3dzIEVKQkV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJsaXRlLnRpbWVyLkZvbzo6aW5pdCAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gZWpibGl0ZS50aW1lci5Gb286OmluaXQgISEiKTsKICAgICAgICAgc2V0Q29udGV4dChzYyk7CiAgICAgICAgIGdldFRpbWVyU2VydmljZSgiaW5pdCIsIHRydWUpOwogICAgICAgICBkb1RpbWVyU3R1ZmYoImluaXQiLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvd2FyL0hlbGxvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL3dhci9IZWxsb1NlcnZsZXQuamF2YQppbmRleCA1MWMyZGE5Li5kZTA5YjQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvd2FyL0hlbGxvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL25vbnBlcnNpc3RlbnR0aW1lci93YXIvSGVsbG9TZXJ2bGV0LmphdmEKQEAgLTM2LDQ2ICszNiw0NiBAQAogQFdlYlNlcnZsZXQodXJsUGF0dGVybnM9Ii9IZWxsb1NlcnZsZXQiLCBsb2FkT25TdGFydHVwPTEpCiBwdWJsaWMgY2xhc3MgSGVsbG9TZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCi0gICAgQEVKQiAgICAKKyAgICBARUpCCiAgICAgcHJpdmF0ZSBTdGF0ZWZ1bFdyYXBwZXIgd3JhcHBlcjsKIAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmluaXQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2VydmxldDo6aW5pdCIpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCi0JcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2VydmxldDo6ZG9HZXQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2VydmxldDo6ZG9HZXQiKTsKIAogCi0JdHJ5IHsKKyAgICB0cnkgewogCiAgICAgICAgICAgICBib29sZWFuIHJlc3VsdCA9IHdyYXBwZXIuZG9Gb29UZXN0KHRydWUpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpIAorICAgICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkJNVCBmYWlsZWQiKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2VydmxldDo6Qk1UIHBhc3NlZCIpOwogCiAgICAgICAgICAgICByZXN1bHQgPSB3cmFwcGVyLmRvRm9vVGVzdChmYWxzZSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkgCisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ01UIGZhaWxlZCIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0OjpDTVQgcGFzc2VkIik7Ci0JICAgIAogCi0JfSBjYXRjaChSdW50aW1lRXhjZXB0aW9uIGUpIHsKLQkgICAgdGhyb3cgZTsKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotCX0gZmluYWxseSB7CisKKyAgICB9IGNhdGNoKFJ1bnRpbWVFeGNlcHRpb24gZSkgeworICAgICAgICB0aHJvdyBlOworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgIHdyYXBwZXIucmVtb3ZlRm9vKCk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CkBAIC04NCwxMSArODQsMTEgQEAKICAgICAgICB9CiAKIAotCW91dC5wcmludGxuKCI8SFRNTD4gPEhFQUQ+IDxUSVRMRT4gSk1TIFNlcnZsZXQgT3V0cHV0IDwvVElUTEU+IDwvSEVBRD4gPEJPRFkgQkdDT0xPUj13aGl0ZT4iKTsKKyAgICBvdXQucHJpbnRsbigiPEhUTUw+IDxIRUFEPiA8VElUTEU+IEpNUyBTZXJ2bGV0IE91dHB1dCA8L1RJVExFPiA8L0hFQUQ+IDxCT0RZIEJHQ09MT1I9d2hpdGU+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPENFTlRFUj4gPEZPTlQgc2l6ZT0rMSBDT0xPUj1ibHVlPkRhdGFiYXNlU2VydmVsdCA6OiBBbGwgaW5mb3JtYXRpb24gSSBjYW4gZ2l2ZSA8L0ZPTlQ+IDwvQ0VOVEVSPiA8cD4gIiApOwotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBDb250ZXh0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldENvbnRleHRQYXRoKCkgKyAiPGJyPiIgKTsgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFNlcnZsZXQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0U2VydmxldFBhdGgoKSArICI8YnI+IiApOyAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gUGF0aCBJbmZvIDogIDwvRk9OVD4gIiArIHJlcS5nZXRQYXRoSW5mbygpICsgIjxicj4iICk7IAorICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBDb250ZXh0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldENvbnRleHRQYXRoKCkgKyAiPGJyPiIgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gU2VydmxldCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRTZXJ2bGV0UGF0aCgpICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBhdGggSW5mbyA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0UGF0aEluZm8oKSArICI8YnI+IiApOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvQk9EWT4gPC9IVE1MPiAiKTsKIAogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL25vbnBlcnNpc3RlbnR0aW1lci93YXIvU3RhdGVmdWxXcmFwcGVySW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL3dhci9TdGF0ZWZ1bFdyYXBwZXJJbXBsLmphdmEKaW5kZXggZDgzMTE2YS4uODNkMzBjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL3dhci9TdGF0ZWZ1bFdyYXBwZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL3dhci9TdGF0ZWZ1bFdyYXBwZXJJbXBsLmphdmEKQEAgLTU3LDM3ICs1NywzNyBAQAogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZG9UZXN0KCk6IGNyZWF0aW5nIHRoZSB0aW1lciIpOwogICAgICAgICBUaW1lciB0aW1lciA9IHRpbWVyU3R1ZmYuY3JlYXRlVGltZXIoMSwgMSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZG9UZXN0KCk6IGNyZWF0aW5nIHRoZSB0aW1lcjIiKTsKICAgICAgICAgVGltZXIgdGltZXIyID0gdGltZXJTdHVmZi5jcmVhdGVUaW1lcigxMDAwMCwgMTAwMDApOwotICAgICAgICAKKwogICAgICAgICAvLwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvVGVzdCgpOiBjcmVhdGluZyB0aGUgdGltZXIzIik7CiAgICAgICAgIFRpbWVyIHRpbWVyMyA9IHRpbWVyU3R1ZmYuY3JlYXRlVGltZXIobmV3IERhdGUoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZG9UZXN0KCk6IGNyZWF0aW5nIHRoZSB0aW1lcjQiKTsKICAgICAgICAgVGltZXIgdGltZXI0ID0gdGltZXJTdHVmZi5jcmVhdGVUaW1lcihuZXcgRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWUoKSArIDIwMDApKTsKLSAgICAgICAgCisKICAgICAgICAgLy8KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkb1Rlc3QoKTogY3JlYXRpbmcgdGhlIHRpbWVyNSIpOwogICAgICAgICBUaW1lciB0aW1lcjUgPSB0aW1lclN0dWZmLmNyZWF0ZVRpbWVyKG5ldyBEYXRlKG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgMjAwMDApLCAxMDAwMCk7CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkb1Rlc3QoKTogY3JlYXRpbmcgdGhlIGNyZWF0ZVRpbWVyQW5kUm9sbGJhY2siKTsKICAgICAgICAgdGltZXJTdHVmZi5jcmVhdGVUaW1lckFuZFJvbGxiYWNrKDIwMDAwKTsKLSAgICAgICAgCisKICAgICAgICAgLy8KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkb1Rlc3QoKTogY3JlYXRpbmcgdGhlIGNyZWF0ZVRpbWVyQW5kQ2FuY2VsIik7CiAgICAgICAgIHRpbWVyU3R1ZmYuY3JlYXRlVGltZXJBbmRDYW5jZWwoMjAwMDApOwotICAgICAgICAKKwogICAgICAgICAvLyBAQEAgcmVldmFsdWF0ZSBkb3VibGUgY2FuY2VsIGxvZ2ljCiAgICAgICAgIC8vdGltZXJTdHVmZi5jcmVhdGVUaW1lckFuZENhbmNlbEFuZENhbmNlbCgyMDAwMCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZG9UZXN0KCk6IGNyZWF0aW5nIHRoZSBjcmVhdGVUaW1lckFuZENhbmNlbEFuZFJvbGxiYWNrIik7CiAgICAgICAgIHRpbWVyU3R1ZmYuY3JlYXRlVGltZXJBbmRDYW5jZWxBbmRSb2xsYmFjaygyMDAwMCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZG9UZXN0KCk6IGNyZWF0aW5nIHRoZSBjYW5jZWxUaW1lcih0aW1lcjIpIik7CiAgICAgICAgIHRpbWVyU3R1ZmYuY2FuY2VsVGltZXIodGltZXIyKTsKQEAgLTk4LDE4ICs5OCwxOCBAQAogICAgICAgICB0aW1lclN0dWZmLmNhbmNlbFRpbWVyQW5kUm9sbGJhY2sodGltZXI1KTsKICAgICAgICAgLy8gQEBAIHJlZXZhbHVhdGUgZG91YmxlIGNhbmNlbCBsb2dpYwogICAgICAgICAvL3RpbWVyU3R1ZmYuY2FuY2VsVGltZXJBbmRDYW5jZWxBbmRSb2xsYmFjayh0aW1lcjYpOwotICAgICAgICAKLSAgICAgICAgVGltZXIgdGltZXI3ID0gCisKKyAgICAgICAgVGltZXIgdGltZXI3ID0KICAgICAgICAgICAgIHRpbWVyU3R1ZmYuY3JlYXRlVGltZXIoMSwgMSwgImNhbmNlbFRpbWVyIik7Ci0gICAgICAgIFRpbWVyIHRpbWVyOCA9IAorICAgICAgICBUaW1lciB0aW1lcjggPQogICAgICAgICAgICAgdGltZXJTdHVmZi5jcmVhdGVUaW1lcigxLCAxLCAiY2FuY2VsVGltZXJBbmRSb2xsYmFjayIpOwotICAgICAgICBUaW1lciB0aW1lcjkgPSAgICAgICAgIAorICAgICAgICBUaW1lciB0aW1lcjkgPQogICAgICAgICAgICAgdGltZXJTdHVmZi5jcmVhdGVUaW1lcigxLCAiY2FuY2VsVGltZXJBbmRSb2xsYmFjayIpOwogCiAgICAgICAgIFRpbWVyIHRpbWVyMTEgPSB0aW1lclN0dWZmLmdldFRpbWVSZW1haW5pbmdUZXN0MSgyMCk7CiAgICAgICAgIHRpbWVyU3R1ZmYuZ2V0VGltZVJlbWFpbmluZ1Rlc3QyKDIwLCB0aW1lcjExKTsKICAgICAgICAgdGltZXJTdHVmZi5nZXRUaW1lUmVtYWluaW5nVGVzdDIoMjAsIHRpbWVyKTsKLSAgICAgICAgCisKICAgICAgICAgVGltZXIgdGltZXIxMiA9IHRpbWVyU3R1ZmYuZ2V0TmV4dFRpbWVvdXRUZXN0MSgyMCk7CiAgICAgICAgIHRpbWVyU3R1ZmYuZ2V0TmV4dFRpbWVvdXRUZXN0MigyMCwgdGltZXIxMik7CiAgICAgICAgIHRpbWVyU3R1ZmYuZ2V0TmV4dFRpbWVvdXRUZXN0MigyMCwgdGltZXIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL3dhci9UaW1lclN0dWZmSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL3dhci9UaW1lclN0dWZmSW1wbC5qYXZhCmluZGV4IDlkNzUwNjguLjA3MjJiYzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL25vbnBlcnNpc3RlbnR0aW1lci93YXIvVGltZXJTdHVmZkltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvd2FyL1RpbWVyU3R1ZmZJbXBsLmphdmEKQEAgLTI2LDEyICsyNiwxMiBAQAogaW1wb3J0IGpha2FydGEuZWpiLio7CiAKIHB1YmxpYyBjbGFzcyBUaW1lclN0dWZmSW1wbCBpbXBsZW1lbnRzIFRpbWVyU3R1ZmYgewotICAgIAorCiAgICAgcHJpdmF0ZSBFSkJDb250ZXh0IGNvbnRleHRfOwogICAgIHByb3RlY3RlZCBib29sZWFuIGlzQk1UID0gZmFsc2U7CiAKICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBjYW5jZWxBdXRvbWF0aWNUaW1lciA9IGZhbHNlOwotICAgIAorCiAgICAgcHVibGljIFRpbWVyU3R1ZmZJbXBsKCkge30KIAogICAgIHByb3RlY3RlZCB2b2lkIHNldENvbnRleHQoRUpCQ29udGV4dCBjb250ZXh0KSB7CkBAIC00MCw3ICs0MCw3IEBACiAKICAgICAvLyBYWFggLSBUT0RPCiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNUeFVuc3BlY2lmaWVkKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAKKwogICAgIHB1YmxpYyBUaW1lciBjcmVhdGVUaW1lcihsb25nIGR1cmF0aW9uLCBTdHJpbmcgaW5mbykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFRpbWVyU2VydmljZSB0cyA9IGNvbnRleHRfLmdldFRpbWVyU2VydmljZSgpOwogICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlU2luZ2xlQWN0aW9uVGltZXIoZHVyYXRpb24sIG5ldyBUaW1lckNvbmZpZyhpbmZvLCBmYWxzZSkpOwpAQCAtNTEsMzAgKzUxLDMwIEBACiAgICAgICAgIHJldHVybiBjcmVhdGVUaW1lcihkdXJhdGlvbiwgImNyZWF0ZVRpbWVyPGxvbmc+IiArIGR1cmF0aW9uKTsKICAgICB9CiAKLSAgICBwdWJsaWMgVGltZXIgY3JlYXRlVGltZXIobG9uZyBpbml0aWFsRHVyYXRpb24sIGxvbmcgaW50ZXJ2YWwpIAorICAgIHB1YmxpYyBUaW1lciBjcmVhdGVUaW1lcihsb25nIGluaXRpYWxEdXJhdGlvbiwgbG9uZyBpbnRlcnZhbCkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVUaW1lcihpbml0aWFsRHVyYXRpb24sIGludGVydmFsLCAKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVRpbWVyKGluaXRpYWxEdXJhdGlvbiwgaW50ZXJ2YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3JlYXRlVGltZXI8bG9uZywgbG9uZz4iICsgaW5pdGlhbER1cmF0aW9uICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIiArIGludGVydmFsKTsKICAgICB9CiAKLSAgICBwdWJsaWMgVGltZXIgY3JlYXRlVGltZXIobG9uZyBpbml0aWFsRHVyYXRpb24sIGxvbmcgaW50ZXJ2YWwsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaW5mbykgCisgICAgcHVibGljIFRpbWVyIGNyZWF0ZVRpbWVyKGxvbmcgaW5pdGlhbER1cmF0aW9uLCBsb25nIGludGVydmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaW5mbykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKCBpc0JNVCApIHsKICAgICAgICAgICAgIGNvbnRleHRfLmdldFVzZXJUcmFuc2FjdGlvbigpLmJlZ2luKCk7CiAgICAgICAgIH0KICAgICAgICAgVGltZXJTZXJ2aWNlIHRzID0gY29udGV4dF8uZ2V0VGltZXJTZXJ2aWNlKCk7Ci0gICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVJbnRlcnZhbFRpbWVyKGluaXRpYWxEdXJhdGlvbiwgaW50ZXJ2YWwsIAorICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlSW50ZXJ2YWxUaW1lcihpbml0aWFsRHVyYXRpb24sIGludGVydmFsLAogICAgICAgICAgICAgICAgICAgICBuZXcgVGltZXJDb25maWcobmV3IEFwcEluZm8oaW5mbyksIGZhbHNlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBpZiggaXNCTVQgKSB7CiAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5jb21taXQoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdDsKICAgICB9CiAKLSAgICBwdWJsaWMgVGltZXIgY3JlYXRlVGltZXIoRGF0ZSBleHBpcmF0aW9uVGltZSkgCisgICAgcHVibGljIFRpbWVyIGNyZWF0ZVRpbWVyKERhdGUgZXhwaXJhdGlvblRpbWUpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBUaW1lclNlcnZpY2UgdHMgPSBjb250ZXh0Xy5nZXRUaW1lclNlcnZpY2UoKTsKICAgICAgICAgaWYoIGlzQk1UICkgewpAQCAtODUsNyArODUsNyBAQAogICAgICAgICAvLyBUaGlzIHNob3VsZCBoYXBwZW4gdmVyeSByYXJlbHkgc2luY2UgY29udGFpbmVyIHB1dHMgdGhlIGJyYWtlcwogICAgICAgICAvLyBvbiBhIGJpdCBieSBhZGRpbmcgYSBmZXcgc2Vjb25kcyBpZiwgdXBvbiBjcmVhdGlvbiwgdGhlIGV4cGlyYXRpb24KICAgICAgICAgLy8gdGltZSBoYXMgYWxyZWFkeSBwYXNzZWQuCi0gICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVTaW5nbGVBY3Rpb25UaW1lcihleHBpcmF0aW9uVGltZSwgCisgICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVTaW5nbGVBY3Rpb25UaW1lcihleHBpcmF0aW9uVGltZSwKICAgICAgICAgICAgICAgICBuZXcgVGltZXJDb25maWcoImNyZWF0ZVRpbWVyPERhdGU+IiArIGV4cGlyYXRpb25UaW1lLCBmYWxzZSkpOwogICAgICAgICBpZiggaXNCTVQgKSB7CiAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5jb21taXQoKTsKQEAgLTkzLDE0ICs5MywxNCBAQAogICAgICAgICByZXR1cm4gdDsKICAgICB9CiAKLSAgICBwdWJsaWMgVGltZXIgY3JlYXRlVGltZXIoRGF0ZSBleHBpcmF0aW9uVGltZSwgbG9uZyBpbnRlcnZhbCkgCisgICAgcHVibGljIFRpbWVyIGNyZWF0ZVRpbWVyKERhdGUgZXhwaXJhdGlvblRpbWUsIGxvbmcgaW50ZXJ2YWwpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIGlmKCBpc0JNVCApIHsKICAgICAgICAgICAgIGNvbnRleHRfLmdldFVzZXJUcmFuc2FjdGlvbigpLmJlZ2luKCk7CiAgICAgICAgIH0KICAgICAgICAgVGltZXJTZXJ2aWNlIHRzID0gY29udGV4dF8uZ2V0VGltZXJTZXJ2aWNlKCk7Ci0gICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVJbnRlcnZhbFRpbWVyKGV4cGlyYXRpb25UaW1lLCBpbnRlcnZhbCwgCisgICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVJbnRlcnZhbFRpbWVyKGV4cGlyYXRpb25UaW1lLCBpbnRlcnZhbCwKICAgICAgICAgICAgICAgICBuZXcgVGltZXJDb25maWcoImNyZWF0ZVRpbWVyPERhdGUsIGxvbmc+IiArIGV4cGlyYXRpb25UaW1lICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIiArIGludGVydmFsLCBmYWxzZSkpOwogICAgICAgICBpZiggaXNCTVQgKSB7CkBAIC0xMTYsNyArMTE2LDcgQEAKICAgICAgICAgICAgIGNvbnRleHRfLmdldFVzZXJUcmFuc2FjdGlvbigpLmJlZ2luKCk7CiAgICAgICAgIH0KICAgICAgICAgVGltZXJTZXJ2aWNlIHRzID0gY29udGV4dF8uZ2V0VGltZXJTZXJ2aWNlKCk7Ci0gICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVTaW5nbGVBY3Rpb25UaW1lcihkdXJhdGlvbiwgCisgICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVTaW5nbGVBY3Rpb25UaW1lcihkdXJhdGlvbiwKICAgICAgICAgICAgICAgICBuZXcgVGltZXJDb25maWcoImNyZWF0ZVRpbWVyQW5kUm9sbGJhY2siICsgZHVyYXRpb24sIGZhbHNlKSk7CiAgICAgICAgIGlmKCBpc0JNVCApIHsKICAgICAgICAgICAgIGNvbnRleHRfLmdldFVzZXJUcmFuc2FjdGlvbigpLnJvbGxiYWNrKCk7CkBAIC0xMzAsNyArMTMwLDcgQEAKICAgICAgICAgICAgIGNvbnRleHRfLmdldFVzZXJUcmFuc2FjdGlvbigpLmJlZ2luKCk7CiAgICAgICAgIH0KICAgICAgICAgVGltZXJTZXJ2aWNlIHRzID0gY29udGV4dF8uZ2V0VGltZXJTZXJ2aWNlKCk7Ci0gICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVTaW5nbGVBY3Rpb25UaW1lcihkdXJhdGlvbiwgCisgICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVTaW5nbGVBY3Rpb25UaW1lcihkdXJhdGlvbiwKICAgICAgICAgICAgICAgICBuZXcgVGltZXJDb25maWcoImNyZWF0ZVRpbWVyQW5kQ2FuY2VsIiArIGR1cmF0aW9uLCBmYWxzZSkpOwogICAgICAgICB0LmNhbmNlbCgpOwogICAgICAgICBpZiggaXNCTVQgKSB7CkBAIC0xNDAsMTIgKzE0MCwxMiBAQAogCiAgICAgcHVibGljIHZvaWQgY3JlYXRlVGltZXJBbmRDYW5jZWxBbmRDYW5jZWwobG9uZyBkdXJhdGlvbikgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKCBpc1R4VW5zcGVjaWZpZWQoKSApIHsKLSAgICAgICAgICAgIHJldHVybjsgCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSBpZiggaXNCTVQgKSB7CiAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogICAgICAgICB9CiAgICAgICAgIFRpbWVyU2VydmljZSB0cyA9IGNvbnRleHRfLmdldFRpbWVyU2VydmljZSgpOwotICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlU2luZ2xlQWN0aW9uVGltZXIoZHVyYXRpb24sIAorICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlU2luZ2xlQWN0aW9uVGltZXIoZHVyYXRpb24sCiAgICAgICAgICAgICAgICAgbmV3IFRpbWVyQ29uZmlnKCJjcmVhdGVUaW1lckFuZENhbmNlbEFuZENhbmNlbCIrIGR1cmF0aW9uLCBmYWxzZSkpOwogICAgICAgICB0LmNhbmNlbCgpOwogICAgICAgICB0LmNhbmNlbCgpOwpAQCAtMTU0LDcgKzE1NCw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVUaW1lckFuZENhbmNlbEFuZFJvbGxiYWNrKGxvbmcgZHVyYXRpb24pIAorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRpbWVyQW5kQ2FuY2VsQW5kUm9sbGJhY2sobG9uZyBkdXJhdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKCBpc1R4VW5zcGVjaWZpZWQoKSApIHsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE2Miw3ICsxNjIsNyBAQAogICAgICAgICAgICAgY29udGV4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCkuYmVnaW4oKTsKICAgICAgICAgfQogICAgICAgICBUaW1lclNlcnZpY2UgdHMgPSBjb250ZXh0Xy5nZXRUaW1lclNlcnZpY2UoKTsKLSAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZVNpbmdsZUFjdGlvblRpbWVyKGR1cmF0aW9uLCAKKyAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZVNpbmdsZUFjdGlvblRpbWVyKGR1cmF0aW9uLAogICAgICAgICAgICAgICAgIG5ldyBUaW1lckNvbmZpZygiY3JlYXRlVGltZXJBbmRDYW5jZWxBbmRSb2xsYmFjayIgKyBkdXJhdGlvbiwgZmFsc2UpKTsKICAgICAgICAgdC5jYW5jZWwoKTsKICAgICAgICAgaWYoIGlzQk1UICkgewpAQCAtMjEyLDggKzIxMiw4IEBACiAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5jb21taXQoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBjYW5jZWxUaW1lckFuZFJvbGxiYWNrKFRpbWVyIHRpbWVyKSAKKworICAgIHB1YmxpYyB2b2lkIGNhbmNlbFRpbWVyQW5kUm9sbGJhY2soVGltZXIgdGltZXIpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBpZiggaXNUeFVuc3BlY2lmaWVkKCkgKSB7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yMjgsNyArMjI4LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGNhbmNlbFRpbWVyQW5kQ2FuY2VsQW5kUm9sbGJhY2soVGltZXIgdGltZXIpIAorICAgIHB1YmxpYyB2b2lkIGNhbmNlbFRpbWVyQW5kQ2FuY2VsQW5kUm9sbGJhY2soVGltZXIgdGltZXIpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBpZiggaXNUeFVuc3BlY2lmaWVkKCkgKSB7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNzgsNyArMjc4LDcgQEAKICAgICAgICAgICAgIC8vIHN1Y2Nlc3MKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZW1vdGVFeGNlcHRpb24oImdldFRpbWVycyBmYWlsdXJlIik7Ci0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIFRpbWVyIGdldFRpbWVSZW1haW5pbmdUZXN0MShpbnQgbnVtSXRlcmF0aW9ucykgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC0yODYsNyArMjg2LDcgQEAKICAgICAgICAgICAgIGNvbnRleHRfLmdldFVzZXJUcmFuc2FjdGlvbigpLmJlZ2luKCk7CiAgICAgICAgIH0KICAgICAgICAgVGltZXJTZXJ2aWNlIHRzID0gY29udGV4dF8uZ2V0VGltZXJTZXJ2aWNlKCk7Ci0gICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVJbnRlcnZhbFRpbWVyKDEsIDEsIAorICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlSW50ZXJ2YWxUaW1lcigxLCAxLAogICAgICAgICAgICAgICAgIG5ldyBUaW1lckNvbmZpZygiZ2V0VGltZVJlbWFpbmluZ1Rlc3QxIiwgZmFsc2UpKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZW1haW5pbmcgdGltZXMgZm9yICIgKyB0LmdldEluZm8oKSk7CiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1JdGVyYXRpb25zOyBpKyspIHsKQEAgLTMxNSw3ICszMTUsNyBAQAogICAgICAgICAgICAgY29udGV4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCkuYmVnaW4oKTsKICAgICAgICAgfQogICAgICAgICBUaW1lclNlcnZpY2UgdHMgPSBjb250ZXh0Xy5nZXRUaW1lclNlcnZpY2UoKTsKLSAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZUludGVydmFsVGltZXIoMSwgMSwgCisgICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVJbnRlcnZhbFRpbWVyKDEsIDEsCiAgICAgICAgICAgICAgICAgbmV3IFRpbWVyQ29uZmlnKCJnZXROZXh0VGltZW91dFRlc3QxIiwgZmFsc2UpKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZW1haW5pbmcgdGltZXMgZm9yICIgKyB0LmdldEluZm8oKSk7CiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1JdGVyYXRpb25zOyBpKyspIHsKQEAgLTMzOSw3ICszMzksNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBhY3RpdmUgdGltZXJzLiAgCisgICAgLy8gTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBhY3RpdmUgdGltZXJzLgogICAgIHB1YmxpYyB2b2lkIGFzc2VydE5vVGltZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFRpbWVyU2VydmljZSB0cyA9IGNvbnRleHRfLmdldFRpbWVyU2VydmljZSgpOwogICAgICAgICBDb2xsZWN0aW9uIHRpbWVycz0gdHMuZ2V0VGltZXJzKCk7CkBAIC0zNDgsMTEgKzM0OCwxMSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgYXNzZXJ0VGltZXJOb3RBY3RpdmUoVGltZXIgdGltZXIpIAorICAgIHB1YmxpYyB2b2lkIGFzc2VydFRpbWVyTm90QWN0aXZlKFRpbWVyIHRpbWVyKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRpbWVyLmdldFRpbWVSZW1haW5pbmcoKTsKLSAgICAgICAgICAgIHRocm93IAorICAgICAgICAgICAgdGhyb3cKICAgICAgICAgICAgICAgICBuZXcgRXhjZXB0aW9uKCJhc3NlcnRUaW1lck5vdEFjdGl2ZSBjYWxsZWQgd2l0aCBhY3RpdmUgdGltZXIiKTsKICAgICAgICAgfSBjYXRjaChOb1N1Y2hPYmplY3RMb2NhbEV4Y2VwdGlvbiBuc29sZSkgewogICAgICAgICAgICAgLy8gY2F1Z2h0IGV4cGVjdGVkIGV4Y2VwdGlvbgpAQCAtMzYxLDEwICszNjEsMTAgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBTZXJpYWxpemFibGUgZ2V0SW5mb05vRXJyb3IoVGltZXIgdGltZXIpIAorICAgIHB1YmxpYyBTZXJpYWxpemFibGUgZ2V0SW5mb05vRXJyb3IoVGltZXIgdGltZXIpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gZ2V0SW5mbyh0aW1lciwgZmFsc2UpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyBTZXJpYWxpemFibGUgZ2V0SW5mbyhUaW1lciB0aW1lcikgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC00NTIsNyArNDUyLDcgQEAKICAgICAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogICAgICAgICAgICAgICAgIHR4U3RhcnRlZCA9IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlSW50ZXJ2YWxUaW1lcigxLCAxLCAKKyAgICAgICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVJbnRlcnZhbFRpbWVyKDEsIDEsCiAgICAgICAgICAgICAgICAgICAgIG5ldyBUaW1lckNvbmZpZygiZG9UaW1lclN0dWZmXyIgKyBtZXRob2QsIGZhbHNlKSk7CiAgICAgICAgICAgICB0LmNhbmNlbCgpOwogICAgICAgICAgICAgaWYoICFhbGxvd2VkICkgewpAQCAtNTIxLDcgKzUyMSw3IEBACiAgICAgICAgICAgICB9IGNhdGNoKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7IH0KICAgICAgICAgICAgIGdldFRpbWVyU2VydmljZSgiVGltZW91dCIsIHRydWUpOwogICAgICAgICAgICAgZG9UaW1lclN0dWZmKCJUaW1lb3V0IiwgdHJ1ZSk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lbWJlZGRlZC9hdXRvY2xvc2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lbWJlZGRlZC9hdXRvY2xvc2UvYnVpbGQucHJvcGVydGllcwppbmRleCBmODE0ZjQ0Li5kMGNhYTNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZW1iZWRkZWQvYXV0b2Nsb3NlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VtYmVkZGVkL2F1dG9jbG9zZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMi1lbWJlZGRlZC1hdXRvY2xvc2UiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lbWJlZGRlZC9hdXRvY2xvc2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VtYmVkZGVkL2F1dG9jbG9zZS9idWlsZC54bWwKaW5kZXggOTY2N2EwMi4uNjU5YWY5NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VtYmVkZGVkL2F1dG9jbG9zZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VtYmVkZGVkL2F1dG9jbG9zZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ5LDIxICs0OSwyMSBAQAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8IS0tIHBhY2thZ2Ugb3Vyc2VsdmVzIHRvIGluY2x1ZGUgcGVyc2lzdGVuY2UueG1sIC0tPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi9TKi5jbGFzcyI+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vb3JnIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyB3aXRoICR7ZW1iZWRkZWQuY2xhc3NwYXRofSBpbiBjbGFzc3BhdGgiLz4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphcjoke2VtYmVkZGVkLmNsYXNzcGF0aH06JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lbWJlZGRlZC9hdXRvY2xvc2UvZWpiL1NpbXBsZUVqYi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VtYmVkZGVkL2F1dG9jbG9zZS9lamIvU2ltcGxlRWpiLmphdmEKaW5kZXggMjIxZjcyZS4uNTYzZTYwNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VtYmVkZGVkL2F1dG9jbG9zZS9lamIvU2ltcGxlRWpiLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VtYmVkZGVkL2F1dG9jbG9zZS9lamIvU2ltcGxlRWpiLmphdmEKQEAgLTM1LDUgKzM1LDUgQEAKICAgICBwcml2YXRlIHZvaWQgb25EZXN0cm95KCkgewogICAgICAgICB4LmFkZCgiPT09PT1kZXN0cm95ZWQ9PT09PSIpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VtYmVkZGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lbWJlZGRlZC9idWlsZC54bWwKaW5kZXggNmY2YWEzMS4uOTIwZjZiOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VtYmVkZGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZW1iZWRkZWQvYnVpbGQueG1sCkBAIC04OSw5ICs4OSw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamIzMS1lbWJlZGRlZCB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWpiMzEtZW1iZWRkZWQgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvYW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvYW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDRjYjNlZWMuLmVhNTRiOWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Fubm90YXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9hbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDkgKzE1LDkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1hcm91bmQtY29uc3RydWN0LWFubiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Fubm90YXRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvYW5ub3RhdGlvbi9idWlsZC54bWwKaW5kZXggMDgwNjE1NS4uYzRlNGQ3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvYW5ub3RhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvYW5ub3RhdGlvbi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUwLDggKzUwLDggQEAKICAgICAgICAgICAgICAgdmFsdWU9IioqL0ludGVyY2VwdG9yKi5jbGFzcywqKi9TKi5jbGFzcywqKi9CKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY1LDEwICs2NSwxMCBAQAogICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXBwbmFtZX0tZWpiIi8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Fubm90YXRpb24vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvYW5ub3RhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYjViZGM0MC4uMWIxOGY3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvYW5ub3RhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvYW5ub3RhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI0LDIxICsyNCwyMSBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotIAlwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAotICAJCW5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKKyAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQorICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotCXByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKIAotCWFwcE5hbWUgPSBhcmdzWzBdOworICAgIGFwcE5hbWUgPSBhcmdzWzBdOwogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwotICAgCWNsaWVudC5kb1Rlc3QoKTsKKyAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9hbm5vdGF0aW9uL2VqYi9TZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9hbm5vdGF0aW9uL2VqYi9TZnVsRUpCLmphdmEKaW5kZXggMTFkMzI5Mi4uZTRkYWI1NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvYW5ub3RhdGlvbi9lamIvU2Z1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Fubm90YXRpb24vZWpiL1NmdWxFSkIuamF2YQpAQCAtMzQsNyArMzQsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQjpoZWxsbygpIik7CiAgICAgICAgIHZlcmlmeSgiU2Z1bEVKQiIpOwotCXJldHVybiBzbGVzcy5zYXlIZWxsbygpOworICAgIHJldHVybiBzbGVzcy5zYXlIZWxsbygpOwogICAgIH0KIAogICAgIEBSZW1vdmUKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQwKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiKipTZnVsRUpCIFBvc3RDb25zdHJ1Y3QiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqU2Z1bEVKQiBQb3N0Q29uc3RydWN0Iik7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9hbm5vdGF0aW9uL2VqYi9TaW5nbGV0b25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9hbm5vdGF0aW9uL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggNzE3NjQwMi4uY2YwMzI5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvYW5ub3RhdGlvbi9lamIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Fubm90YXRpb24vZWpiL1NpbmdsZXRvbkJlYW4uamF2YQpAQCAtMzMsMTIgKzMzLDEyIEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aW5pdCgpIik7CiAgICAgICAgIHNmdWwuaGVsbG8oKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewogICAgICAgICB2ZXJpZnkoIlNpbmdsZXRvbkJlYW4iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmhlbGxvKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmhlbGxvKCkiKTsKICAgICAgICAgc2Z1bC5yZW1vdmUoKTsKLQlyZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CisgICAgcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Fubm90YXRpb24vZWpiL1NvbWVNYW5hZ2VkQmVhbi5qYXZhCmluZGV4IDA5ZTNhZmEuLjdkOTEyOTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Fubm90YXRpb24vZWpiL1NvbWVNYW5hZ2VkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Fubm90YXRpb24vZWpiL1NvbWVNYW5hZ2VkQmVhbi5qYXZhCkBAIC0zMywxOCArMzMsMTggQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW46OmluaXQoKSAiICsgdGhpcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW46OmluaXQoKSAiICsgdGhpcyk7CiAgICAgfQotICAgIAorCiAKICAgICBwdWJsaWMgdm9pZCBmb28oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW46OmZvbygpICIpOwotCXZlcmlmeUEoIlNvbWVNYW5hZ2VkQmVhbiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuOjpmb28oKSAiKTsKKyAgICB2ZXJpZnlBKCJTb21lTWFuYWdlZEJlYW4iKTsKICAgICAgICAgaWYgKG9yYiA9PSBudWxsKSB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiU29tZU1hbmFnZWRCZWFuOiBPUkIgaXMgbnVsbCIpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Fubm90YXRpb24vZWpiL1NvbWVNYW5hZ2VkQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Fubm90YXRpb24vZWpiL1NvbWVNYW5hZ2VkQmVhbjIuamF2YQppbmRleCBkZGUxYzQzLi5mZGIwNGMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuMi5qYXZhCkBAIC0zMiwxNyArMzIsMTcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW4yOjppbml0KCkgIiArIHRoaXMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuMjo6aW5pdCgpICIgKyB0aGlzKTsKICAgICB9Ci0gICAgCisKIAogICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjI6OmZvbygpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuMjo6Zm9vKCkgIik7CiAgICAgICAgIGlmIChvcmIgPT0gbnVsbCkgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlNvbWVNYW5hZ2VkQmVhbjI6IE9SQiBpcyBudWxsIik7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjI6OmRlc3Ryb3koKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjI6OmRlc3Ryb3koKSAiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4zLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4zLmphdmEKaW5kZXggZGZlMDhmYS4uNmJiMWM5MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuMy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Fubm90YXRpb24vZWpiL1NvbWVNYW5hZ2VkQmVhbjMuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogICAgIEBSZXNvdXJjZSBPUkIgb3JiOwogCiAgICAgcHVibGljIHZvaWQgZm9vKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuMzo6Zm9vKCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW4zOjpmb28oKSAiKTsKICAgICAgICAgaWYgKG9yYiA9PSBudWxsKSB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiU29tZU1hbmFnZWRCZWFuMzogT1JCIGlzIG51bGwiKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2J1aWxkLnhtbAppbmRleCAzMDdmNjVlLi5hZGMyZDQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvYnVpbGQueG1sCkBAIC00Niw5ICs0Niw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBzZXQgb2YgZWpiLWVqYjMyLWFyb3VuZGNvbnN0cnVjdCB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgc2V0IG9mIGVqYi1lamIzMi1hcm91bmRjb25zdHJ1Y3QgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvZGVzY3JpcHRvci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvZGVzY3JpcHRvci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGE3MjlhN2QuLjBhNDc5YzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Rlc2NyaXB0b3IvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9kZXNjcmlwdG9yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWFyb3VuZC1jb25zdHJ1Y3QtZGVzY3IiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9ycy9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvZGVzY3JpcHRvci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9kZXNjcmlwdG9yL2J1aWxkLnhtbAppbmRleCA5Mjg2NWU4Li45MTYzNDBmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9kZXNjcmlwdG9yL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9kZXNjcmlwdG9yL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTEgKzQ4LDExIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovSW50ZXJjZXB0b3IqLmNsYXNzLCoqL1MqLmNsYXNzLCoqL0IqLmNsYXNzIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJiZWFucy54bWwiIHZhbHVlPSJkZXNjcmlwdG9ycy9iZWFucy54bWwiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImJlYW5zLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3JzL2JlYW5zLnhtbCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY2LDEwICs2NiwxMCBAQAogICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXBwbmFtZX0tZWpiIi8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Rlc2NyaXB0b3IvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvZGVzY3JpcHRvci9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYjViZGM0MC4uMWIxOGY3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvZGVzY3JpcHRvci9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvZGVzY3JpcHRvci9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI0LDIxICsyNCwyMSBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotIAlwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAotICAJCW5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKKyAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQorICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotCXByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKIAotCWFwcE5hbWUgPSBhcmdzWzBdOworICAgIGFwcE5hbWUgPSBhcmdzWzBdOwogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwotICAgCWNsaWVudC5kb1Rlc3QoKTsKKyAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9kZXNjcmlwdG9yL2VqYi9TZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9kZXNjcmlwdG9yL2VqYi9TZnVsRUpCLmphdmEKaW5kZXggN2JlNzEzOC4uMDY4NmNjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvZGVzY3JpcHRvci9lamIvU2Z1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Rlc2NyaXB0b3IvZWpiL1NmdWxFSkIuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQjpoZWxsbygpIik7CiAgICAgICAgIHZlcmlmeSgiU2Z1bEVKQiIpOwotCXJldHVybiBzbGVzcy5zYXlIZWxsbygpOworICAgIHJldHVybiBzbGVzcy5zYXlIZWxsbygpOwogICAgIH0KIAogICAgIEBSZW1vdmUKQEAgLTQzLDcgKzQzLDcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQwKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiKipTZnVsRUpCIFBvc3RDb25zdHJ1Y3QiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqU2Z1bEVKQiBQb3N0Q29uc3RydWN0Iik7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9kZXNjcmlwdG9yL2VqYi9TaW5nbGV0b25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9kZXNjcmlwdG9yL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggMzVhMjg5My4uYmNjZTIwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvZGVzY3JpcHRvci9lamIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Rlc2NyaXB0b3IvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQpAQCAtMzIsMTIgKzMyLDEyIEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aW5pdCgpIik7CiAgICAgICAgIHNmdWwuaGVsbG8oKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewogICAgICAgICB2ZXJpZnkoIlNpbmdsZXRvbkJlYW4iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmhlbGxvKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmhlbGxvKCkiKTsKICAgICAgICAgc2Z1bC5yZW1vdmUoKTsKLQlyZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CisgICAgcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9kZXNjcmlwdG9yL2VqYi9Tb21lTWFuYWdlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Rlc2NyaXB0b3IvZWpiL1NvbWVNYW5hZ2VkQmVhbi5qYXZhCmluZGV4IDU4ZmUyYTYuLjNjOTdlZDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Rlc2NyaXB0b3IvZWpiL1NvbWVNYW5hZ2VkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Rlc2NyaXB0b3IvZWpiL1NvbWVNYW5hZ2VkQmVhbi5qYXZhCkBAIC0yOSwxOCArMjksMTggQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW46OmluaXQoKSAiICsgdGhpcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW46OmluaXQoKSAiICsgdGhpcyk7CiAgICAgfQotICAgIAorCiAKICAgICBwdWJsaWMgdm9pZCBmb28oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW46OmZvbygpICIpOwotCS8vIHZlcmlmeSgiU29tZU1hbmFnZWRCZWFuIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW46OmZvbygpICIpOworICAgIC8vIHZlcmlmeSgiU29tZU1hbmFnZWRCZWFuIik7CiAgICAgICAgIGlmIChvcmIgPT0gbnVsbCkgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlNvbWVNYW5hZ2VkQmVhbjogT1JCIGlzIG51bGwiKTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuOjpkZXN0cm95KCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYnVpbGQueG1sCmluZGV4IGNmMzIwMjguLjUzYzMzYTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYnVpbGQueG1sCkBAIC01Myw5ICs1Myw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBzZXQgb2YgZWpiLWVqYjMyLWludGVyY2VwdG9ycyB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgc2V0IG9mIGVqYi1lamIzMi1pbnRlcmNlcHRvcnMgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCBlMzViZmVhLi5iNGJmN2I5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOSArMTUsOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWNvbnN0cnVjdG9yLWxldmVsLWFubiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vYnVpbGQueG1sCmluZGV4IDZhNDEyZGQuLmE3M2ZiYzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTAsOCArNTAsOCBAQAogICAgICAgICAgICAgICB2YWx1ZT0iKiovSW50ZXJjZXB0b3IqLmNsYXNzLCoqL1MqLmNsYXNzLCoqL0IqLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjUsMTAgKzY1LDEwIEBACiAgICAgICAgICAgIDxhcmcgbGluZT0iJHthcHBuYW1lfS1lamIiLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYjViZGM0MC4uMWIxOGY3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCwyMSArMjQsMjEgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAJcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKLSAgCQluZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CisgICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KKyAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAKLQlhcHBOYW1lID0gYXJnc1swXTsKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKLSAgIAljbGllbnQuZG9UZXN0KCk7CisgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9CYXNlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9CYXNlQmVhbi5qYXZhCmluZGV4IDZmYjFjZjkuLjFkMDk4NGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvQmFzZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL0Jhc2VCZWFuLmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgaWYgKG1ldGhvZCA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZiAobmFtZSAhPSBudWxsKSB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW4gIiArIGdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiBleHBlY3RlZCBtZXRob2QgbmFtZTogIiArIG5hbWUgKyAiIGdvdCBudWxsIik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIW1ldGhvZC5nZXROYW1lKCkuZXF1YWxzKG5hbWUpKSAKKyAgICAgICAgICAgIGlmICghbWV0aG9kLmdldE5hbWUoKS5lcXVhbHMobmFtZSkpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluICIgKyBnZXRDbGFzcygpLmdldE5hbWUoKSArICIgZXhwZWN0ZWQgbWV0aG9kIG5hbWU6ICIgKyBuYW1lICsgIiBnb3Q6ICIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU2Z1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9TZnVsRUpCLmphdmEKaW5kZXggNTgyNDIxZi4uMjA4ZTYxZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9TZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9TZnVsRUpCLmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkI6aGVsbG8oKSIpOwogICAgICAgICB2ZXJpZnkoIlNmdWxFSkIiKTsKLQlyZXR1cm4gc2xlc3Muc2F5SGVsbG8oKTsKKyAgICByZXR1cm4gc2xlc3Muc2F5SGVsbG8oKTsKICAgICB9CiAKICAgICBASW50ZXJjZXB0b3JzKEludGVyY2VwdG9yQS5jbGFzcykKQEAgLTQ5LDcgKzQ5LDcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQwKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiKipTZnVsRUpCIFBvc3RDb25zdHJ1Y3QiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqU2Z1bEVKQiBQb3N0Q29uc3RydWN0Iik7CiAgICAgICAgIHZlcmlmeU1ldGhvZChudWxsKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggMzY0MjI3Yi4uZjBhYjAwYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTM4LDEzICszOCwxMyBAQAogICAgICAgICB2ZXJpZnlNZXRob2QoImluaXQiKTsKICAgICAgICAgc2Z1bC5oZWxsbygpOwogICAgIH0KLSAgICAKKwogICAgIEBJbnRlcmNlcHRvcnMoSW50ZXJjZXB0b3JDLmNsYXNzKQogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7CiAgICAgICAgIHZlcmlmeUFCX0FDKCJTaW5nbGV0b25CZWFuIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpoZWxsbygpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpoZWxsbygpIik7CiAgICAgICAgIHNmdWwucmVtb3ZlKCk7Ci0JcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuLmphdmEKaW5kZXggMDEzOGQ3Mi4uMThkZmU0YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL1NvbWVNYW5hZ2VkQmVhbi5qYXZhCkBAIC0zNSwxNCArMzUsMTQgQEAKIAogICAgIEBJbnRlcmNlcHRvcnMoSW50ZXJjZXB0b3JBLmNsYXNzKQogICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjo6Zm9vKCkgIik7Ci0JdmVyaWZ5QSgiU29tZU1hbmFnZWRCZWFuIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW46OmZvbygpICIpOworICAgIHZlcmlmeUEoIlNvbWVNYW5hZ2VkQmVhbiIpOwogICAgICAgICBpZiAob3JiID09IG51bGwpIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJTb21lTWFuYWdlZEJlYW46IE9SQiBpcyBudWxsIik7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuOjpkZXN0cm95KCkgIik7CiAgICAgICAgIHZlcmlmeU1ldGhvZCgiZGVzdHJveSIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4yLmphdmEKaW5kZXggZGI4YThjNy4uYjA5YmYwYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4yLmphdmEKQEAgLTM1LDEzICszNSwxMyBAQAogCiAgICAgQEludGVyY2VwdG9ycyhJbnRlcmNlcHRvckEuY2xhc3MpCiAgICAgcHVibGljIHZvaWQgZm9vMigpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjI6OmZvbzIoKSAiKTsKLQl2ZXJpZnlBQ19BQygiU29tZU1hbmFnZWRCZWFuMiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuMjo6Zm9vMigpICIpOworICAgIHZlcmlmeUFDX0FDKCJTb21lTWFuYWdlZEJlYW4yIik7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjI6OmRlc3Ryb3koKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjI6OmRlc3Ryb3koKSAiKTsKICAgICAgICAgdmVyaWZ5TWV0aG9kKCJkZXN0cm95Iik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4zLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL1NvbWVNYW5hZ2VkQmVhbjMuamF2YQppbmRleCA0NjIyMzUyLi5iMWVjMzhhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL1NvbWVNYW5hZ2VkQmVhbjMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL1NvbWVNYW5hZ2VkQmVhbjMuamF2YQpAQCAtMzYsMTggKzM2LDE4IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0MygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjM6OmluaXQzKCkgIiArIHRoaXMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuMzo6aW5pdDMoKSAiICsgdGhpcyk7CiAgICAgfQotICAgIAorCiAKICAgICBASW50ZXJjZXB0b3JzKEludGVyY2VwdG9yQS5jbGFzcykKICAgICBwdWJsaWMgdm9pZCBmb28zKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuMzo6Zm9vMygpICIpOwotCXZlcmlmeUEoIlNvbWVNYW5hZ2VkQmVhbjMiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjM6OmZvbzMoKSAiKTsKKyAgICB2ZXJpZnlBKCJTb21lTWFuYWdlZEJlYW4zIik7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjM6OmRlc3Ryb3koKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjM6OmRlc3Ryb3koKSAiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYnVpbGQueG1sCmluZGV4IGE2NjdlNmIuLjFjMWE5NzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYnVpbGQueG1sCkBAIC00Niw5ICs0Niw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBzZXQgb2YgZWpiLWVqYjMyLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbCB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgc2V0IG9mIGVqYi1lamIzMi1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvYnVpbGQucHJvcGVydGllcwppbmRleCBhNTIxNjU3Li5iZmY5OTIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItY29uc3RydWN0b3ItbGV2ZWwtZGVzY3IiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9ycy9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9idWlsZC54bWwKaW5kZXggOTYwMzFlYi4uMjgyMGZiYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MSw4ICs1MSw4IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYmVhbnMueG1sIiB2YWx1ZT0iZGVzY3JpcHRvcnMvYmVhbnMueG1sIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjYsMTAgKzY2LDEwIEBACiAgICAgICAgICAgIDxhcmcgbGluZT0iJHthcHBuYW1lfS1lamIiLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYjViZGM0MC4uMWIxOGY3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCwyMSArMjQsMjEgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAJcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKLSAgCQluZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CisgICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KKyAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAKLQlhcHBOYW1lID0gYXJnc1swXTsKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKLSAgIAljbGllbnQuZG9UZXN0KCk7CisgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2VqYi9CYXNlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2VqYi9CYXNlQmVhbi5qYXZhCmluZGV4IDVjZmQ2MmUuLjRhZDRkOWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9lamIvQmFzZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvZWpiL0Jhc2VCZWFuLmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgaWYgKG1ldGhvZCA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZiAobmFtZSAhPSBudWxsKSB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW4gIiArIGdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiBleHBlY3RlZCBtZXRob2QgbmFtZTogIiArIG5hbWUgKyAiIGdvdCBudWxsIik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIW1ldGhvZC5nZXROYW1lKCkuZXF1YWxzKG5hbWUpKSAKKyAgICAgICAgICAgIGlmICghbWV0aG9kLmdldE5hbWUoKS5lcXVhbHMobmFtZSkpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluICIgKyBnZXRDbGFzcygpLmdldE5hbWUoKSArICIgZXhwZWN0ZWQgbWV0aG9kIG5hbWU6ICIgKyBuYW1lICsgIiBnb3Q6ICIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9lamIvU2Z1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2VqYi9TZnVsRUpCLmphdmEKaW5kZXggZmZiNTg0ZC4uMGI3N2MxMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2VqYi9TZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2VqYi9TZnVsRUpCLmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkI6aGVsbG8oKSIpOwogICAgICAgICB2ZXJpZnkoIlNmdWxFSkIiKTsKLQlyZXR1cm4gc2xlc3Muc2F5SGVsbG8oKTsKKyAgICByZXR1cm4gc2xlc3Muc2F5SGVsbG8oKTsKICAgICB9CiAKICAgICBAUmVtb3ZlCkBAIC00NSw3ICs0NSw3IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0MCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqU2Z1bEVKQiBQb3N0Q29uc3RydWN0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKlNmdWxFSkIgUG9zdENvbnN0cnVjdCIpOwogICAgICAgICB2ZXJpZnlNZXRob2QobnVsbCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvZWpiL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9lamIvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IGMxOWQ0YTkuLjM3NzM3MzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9lamIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9lamIvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC0zNiwxMiArMzYsMTIgQEAKICAgICAgICAgdmVyaWZ5TWV0aG9kKCJpbml0Iik7CiAgICAgICAgIHNmdWwuaGVsbG8oKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewogICAgICAgICB2ZXJpZnlBQl9BQygiU2luZ2xldG9uQmVhbiIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aGVsbG8oKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aGVsbG8oKSIpOwogICAgICAgICBzZnVsLnJlbW92ZSgpOwotCXJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKKyAgICByZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9hbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvYW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDljMzM5OGYuLmFkOWUyZTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9hbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Fubm90YXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOSArMTUsOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWdldC1tZXRob2QtbGMtYW5uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Fubm90YXRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Fubm90YXRpb24vYnVpbGQueG1sCmluZGV4IDNlMGJjYWUuLmMzZTc5MTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9hbm5vdGF0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvYW5ub3RhdGlvbi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUwLDggKzUwLDggQEAKICAgICAgICAgICAgICAgdmFsdWU9IioqL0ludGVyY2VwdG9yKi5jbGFzcywqKi9TKi5jbGFzcywqKi9CKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY1LDEwICs2NSwxMCBAQAogICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXBwbmFtZX0tZWpiIi8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9hbm5vdGF0aW9uL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9hbm5vdGF0aW9uL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBiNWJkYzQwLi4xYjE4ZjdhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvYW5ub3RhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Fubm90YXRpb24vY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCwyMSArMjQsMjEgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAJcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKLSAgCQluZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CisgICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KKyAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAKLQlhcHBOYW1lID0gYXJnc1swXTsKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKLSAgIAljbGllbnQuZG9UZXN0KCk7CisgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Fubm90YXRpb24vZWpiL0Jhc2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvYW5ub3RhdGlvbi9lamIvQmFzZUJlYW4uamF2YQppbmRleCAwMDNiNDE2Li45Zjg0NjJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvYW5ub3RhdGlvbi9lamIvQmFzZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvYW5ub3RhdGlvbi9lamIvQmFzZUJlYW4uamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICBpZiAobWV0aG9kID09IG51bGwpIHsKICAgICAgICAgICAgIGlmIChuYW1lICE9IG51bGwpIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbiAiICsgZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiIGV4cGVjdGVkIG1ldGhvZCBuYW1lOiAiICsgbmFtZSArICIgZ290IG51bGwiKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghbWV0aG9kLmdldE5hbWUoKS5lcXVhbHMobmFtZSkpIAorICAgICAgICAgICAgaWYgKCFtZXRob2QuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW4gIiArIGdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiBleHBlY3RlZCBtZXRob2QgbmFtZTogIiArIG5hbWUgKyAiIGdvdDogIiArIG1ldGhvZC5nZXROYW1lKCkpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Fubm90YXRpb24vZWpiL1NmdWxFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9hbm5vdGF0aW9uL2VqYi9TZnVsRUpCLmphdmEKaW5kZXggNmVmMDI4ZS4uZTliNWQ3MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Fubm90YXRpb24vZWpiL1NmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvYW5ub3RhdGlvbi9lamIvU2Z1bEVKQi5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQjpoZWxsbygpIik7CiAgICAgICAgIHZlcmlmeUFCX0FDKCJTZnVsRUpCIik7CiAgICAgICAgIHZlcmlmeUJfUEMoIlNmdWxFSkIiKTsKLQlyZXR1cm4gc2xlc3Muc2F5SGVsbG8oKTsKKyAgICByZXR1cm4gc2xlc3Muc2F5SGVsbG8oKTsKICAgICB9CiAKICAgICBASW50ZXJjZXB0b3JzKEludGVyY2VwdG9yQS5jbGFzcykKQEAgLTUwLDcgKzUwLDcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQwKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiKipTZnVsRUpCIFBvc3RDb25zdHJ1Y3QiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqU2Z1bEVKQiBQb3N0Q29uc3RydWN0Iik7CiAgICAgICAgIHZlcmlmeU1ldGhvZChudWxsKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9hbm5vdGF0aW9uL2VqYi9TaW5nbGV0b25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvYW5ub3RhdGlvbi9lamIvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IDliMTU2OTQuLmMyMjNhNjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9hbm5vdGF0aW9uL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Fubm90YXRpb24vZWpiL1NpbmdsZXRvbkJlYW4uamF2YQpAQCAtMzgsMTQgKzM4LDE0IEBACiAgICAgICAgIHZlcmlmeU1ldGhvZCgiaW5pdCIpOwogICAgICAgICBzZnVsLmhlbGxvKCk7CiAgICAgfQotICAgIAorCiAgICAgQEludGVyY2VwdG9ycyhJbnRlcmNlcHRvckMuY2xhc3MpCiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKICAgICAgICAgdmVyaWZ5QUJfQUMoIlNpbmdsZXRvbkJlYW4iKTsKICAgICAgICAgdmVyaWZ5QV9QQygiU2luZ2xldG9uQmVhbiIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aGVsbG8oKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aGVsbG8oKSIpOwogICAgICAgICBzZnVsLnJlbW92ZSgpOwotCXJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKKyAgICByZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW5CYXNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuQmFzZS5qYXZhCmluZGV4IDU2MmQ4ZGIuLjY3ZDM1ZmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW5CYXNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Fubm90YXRpb24vZWpiL1NvbWVNYW5hZ2VkQmVhbkJhc2UuamF2YQpAQCAtMzEsMjMgKzMxLDIzIEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuOjppbml0KCkgIiArIHRoaXMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuOjppbml0KCkgIiArIHRoaXMpOwogICAgICAgICB2ZXJpZnlNZXRob2QobnVsbCk7CiAgICAgfQotICAgIAorCiAKICAgICBASW50ZXJjZXB0b3JzKEludGVyY2VwdG9yQS5jbGFzcykKICAgICBwdWJsaWMgdm9pZCBmb28oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW46OmZvbygpICIpOwotCXZlcmlmeUFfQUMoIlNvbWVNYW5hZ2VkQmVhbiIpOwotCXZlcmlmeUFfQUkoIlNvbWVNYW5hZ2VkQmVhbiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuOjpmb28oKSAiKTsKKyAgICB2ZXJpZnlBX0FDKCJTb21lTWFuYWdlZEJlYW4iKTsKKyAgICB2ZXJpZnlBX0FJKCJTb21lTWFuYWdlZEJlYW4iKTsKICAgICAgICAgYWkgPSBmYWxzZTsKICAgICAgICAgaWYgKG9yYiA9PSBudWxsKSB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiU29tZU1hbmFnZWRCZWFuOiBPUkIgaXMgbnVsbCIpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOwogICAgICAgICB2ZXJpZnlNZXRob2QobnVsbCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9idWlsZC54bWwKaW5kZXggMzJmOTUzOC4uMDBmMThlNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvYnVpbGQueG1sCkBAIC00Niw5ICs0Niw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBzZXQgb2YgZWpiLWVqYjMyLWdldF9tZXRob2RfbGMgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIHNldCBvZiBlamItZWpiMzItZ2V0X21ldGhvZF9sYyB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvZGVzY3JpcHRvci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Rlc2NyaXB0b3IvYnVpbGQucHJvcGVydGllcwppbmRleCAwMDQ1NzQ3Li5iZGNmN2ZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvZGVzY3JpcHRvci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9kZXNjcmlwdG9yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWdldC1tZXRob2QtbGMtZGVzY3IiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9ycy9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Rlc2NyaXB0b3IvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Rlc2NyaXB0b3IvYnVpbGQueG1sCmluZGV4IGYxYTg3ZTYuLjI0MGUzODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9kZXNjcmlwdG9yL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvZGVzY3JpcHRvci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUxLDggKzUxLDggQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJiZWFucy54bWwiIHZhbHVlPSJkZXNjcmlwdG9ycy9iZWFucy54bWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NiwxMCArNjYsMTAgQEAKICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FwcG5hbWV9LWVqYiIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvZGVzY3JpcHRvci9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvZGVzY3JpcHRvci9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYjViZGM0MC4uMWIxOGY3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Rlc2NyaXB0b3IvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9kZXNjcmlwdG9yL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjQsMjEgKzI0LDIxIEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gCXByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCi0gIAkJbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOworICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CisgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogCi0JYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7Ci0gICAJY2xpZW50LmRvVGVzdCgpOworICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9kZXNjcmlwdG9yL2VqYi9CYXNlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Rlc2NyaXB0b3IvZWpiL0Jhc2VCZWFuLmphdmEKaW5kZXggNjVmYjc5Ny4uMTlkMWUyZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Rlc2NyaXB0b3IvZWpiL0Jhc2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Rlc2NyaXB0b3IvZWpiL0Jhc2VCZWFuLmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgaWYgKG1ldGhvZCA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZiAobmFtZSAhPSBudWxsKSB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW4gIiArIGdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiBleHBlY3RlZCBtZXRob2QgbmFtZTogIiArIG5hbWUgKyAiIGdvdCBudWxsIik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIW1ldGhvZC5nZXROYW1lKCkuZXF1YWxzKG5hbWUpKSAKKyAgICAgICAgICAgIGlmICghbWV0aG9kLmdldE5hbWUoKS5lcXVhbHMobmFtZSkpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluICIgKyBnZXRDbGFzcygpLmdldE5hbWUoKSArICIgZXhwZWN0ZWQgbWV0aG9kIG5hbWU6ICIgKyBuYW1lICsgIiBnb3Q6ICIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9kZXNjcmlwdG9yL2VqYi9TZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvZGVzY3JpcHRvci9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IDZmMTgxYjAuLjcxZTBiMjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9kZXNjcmlwdG9yL2VqYi9TZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Rlc2NyaXB0b3IvZWpiL1NmdWxFSkIuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkI6aGVsbG8oKSIpOwogICAgICAgICB2ZXJpZnlCX0FDKCJTZnVsRUpCIik7CiAgICAgICAgIHZlcmlmeUJfUEMoIlNmdWxFSkIiKTsKLQlyZXR1cm4gc2xlc3Muc2F5SGVsbG8oKTsKKyAgICByZXR1cm4gc2xlc3Muc2F5SGVsbG8oKTsKICAgICB9CiAKICAgICBAUmVtb3ZlCkBAIC00Niw3ICs0Niw3IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0MCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqU2Z1bEVKQiBQb3N0Q29uc3RydWN0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKlNmdWxFSkIgUG9zdENvbnN0cnVjdCIpOwogICAgICAgICB2ZXJpZnlNZXRob2QobnVsbCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvZGVzY3JpcHRvci9lamIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Rlc2NyaXB0b3IvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQppbmRleCBhNmIxMGM3Li5mZmQyZjk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvZGVzY3JpcHRvci9lamIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9kZXNjcmlwdG9yL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTM0LDE0ICszNCwxNCBAQAogICAgICAgICB2ZXJpZnlNZXRob2QoImluaXQiKTsKICAgICAgICAgc2Z1bC5oZWxsbygpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7CiAgICAgICAgIHZlcmlmeUFfQUMoIlNpbmdsZXRvbkJlYW4iKTsKICAgICAgICAgLy92ZXJpZnlBQl9BQygiU2luZ2xldG9uQmVhbiIpOwogICAgICAgICB2ZXJpZnlBX1BDKCJTaW5nbGV0b25CZWFuIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpoZWxsbygpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpoZWxsbygpIik7CiAgICAgICAgIHNmdWwucmVtb3ZlKCk7Ci0JcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW5oZXJpdGFuY2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWluaGVyaXRhbmNlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzBmMGM0Yi4uYTE0ODczNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW5oZXJpdGFuY2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbmhlcml0YW5jZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw5ICsxNSw5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItaW50ZXJjZXB0b3JzLWluaGVyaXRhbmNlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW5oZXJpdGFuY2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW5oZXJpdGFuY2UvYnVpbGQueG1sCmluZGV4IGVhMzZkYzUuLmYzNjMzMDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWluaGVyaXRhbmNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbmhlcml0YW5jZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUwLDggKzUwLDggQEAKICAgICAgICAgICAgICAgdmFsdWU9IioqL0ludGVyY2VwdG9yKi5jbGFzcywqKi9TKi5jbGFzcywqKi9CKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY1LDEwICs2NSwxMCBAQAogICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXBwbmFtZX0tZWpiIi8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWluaGVyaXRhbmNlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWluaGVyaXRhbmNlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBiNWJkYzQwLi4xYjE4ZjdhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbmhlcml0YW5jZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW5oZXJpdGFuY2UvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCwyMSArMjQsMjEgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAJcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKLSAgCQluZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CisgICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KKyAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAKLQlhcHBOYW1lID0gYXJnc1swXTsKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKLSAgIAljbGllbnQuZG9UZXN0KCk7CisgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW5oZXJpdGFuY2UvZWpiL0Jhc2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbmhlcml0YW5jZS9lamIvQmFzZUJlYW4uamF2YQppbmRleCBjYTdhYjQ1Li4zM2VhZDhkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbmhlcml0YW5jZS9lamIvQmFzZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbmhlcml0YW5jZS9lamIvQmFzZUJlYW4uamF2YQpAQCAtMjksMjAgKzI5LDIwIEBACiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHJpdmF0ZSBPYmplY3QgaW50ZXJjZXB0Q2FsbChJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiKipCYXNlQmVhbiBBUk9VTkQtSU5WT0tFKysgW0BBcm91bmRJbnZva2VdOiAiICsgY3R4LmdldE1ldGhvZCgpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqQmFzZUJlYW4gQVJPVU5ELUlOVk9LRSsrIFtAQXJvdW5kSW52b2tlXTogIiArIGN0eC5nZXRNZXRob2QoKSk7CiAgICAgICAgIGFpID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CiAgICAgfQogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqQmFzZUJlYW4gUG9zdENvbnN0cnVjdCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKipCYXNlQmVhbiBQb3N0Q29uc3RydWN0Iik7CiAgICAgICAgIHBjID0gdHJ1ZTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiKipCYXNlQmVhbiBQcmVEZXN0cm95Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKkJhc2VCZWFuIFByZURlc3Ryb3kiKTsKICAgICAgICAgcGQgPSB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW5oZXJpdGFuY2UvZWpiL1NmdWxFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWluaGVyaXRhbmNlL2VqYi9TZnVsRUpCLmphdmEKaW5kZXggMTcxZGVhMS4uZjQ3OTc3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW5oZXJpdGFuY2UvZWpiL1NmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbmhlcml0YW5jZS9lamIvU2Z1bEVKQi5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkI6aGVsbG8oKSIpOwotCXJldHVybiBzbGVzcy5zYXlIZWxsbygpOworICAgIHJldHVybiBzbGVzcy5zYXlIZWxsbygpOwogICAgIH0KIAogICAgIEBSZW1vdmUKQEAgLTQzLDcgKzQzLDcgQEAKIAogICAgIEBBcm91bmRJbnZva2UKICAgICBwcml2YXRlIE9iamVjdCBpbnRlcmNlcHRDYWxsMChJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiKipTZnVsRUpCIEFST1VORC1JTlZPS0UrKyBbQEFyb3VuZEludm9rZV06ICIgKyBjdHguZ2V0TWV0aG9kKCkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKipTZnVsRUpCIEFST1VORC1JTlZPS0UrKyBbQEFyb3VuZEludm9rZV06ICIgKyBjdHguZ2V0TWV0aG9kKCkpOwogICAgICAgICBpZiAoIWFpKSB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQmFzZUJlYW4gd2FzIG5vdCBjYWxsZWQiKTsKICAgICAgICAgYWkgPSBmYWxzZTsgLy9yZXNldAogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKQEAgLTUxLDE0ICs1MSwxNCBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdDAoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIqKlNmdWxFSkIgUG9zdENvbnN0cnVjdCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKipTZnVsRUpCIFBvc3RDb25zdHJ1Y3QiKTsKICAgICAgICAgaWYgKCFwYykgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkJhc2VCZWFuIHdhcyBub3QgY2FsbGVkIik7CiAgICAgICAgIHBjID0gZmFsc2U7IC8vcmVzZXQKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95MCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqU2Z1bEVKQiBQcmVEZXN0cm95Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKlNmdWxFSkIgUHJlRGVzdHJveSIpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW5oZXJpdGFuY2UvZWpiL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWluaGVyaXRhbmNlL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggOGE1MzM2MC4uMmVmZTcyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW5oZXJpdGFuY2UvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbmhlcml0YW5jZS9lamIvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC0zMywxMSArMzMsMTEgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjppbml0KCkiKTsKICAgICAgICAgc2Z1bC5oZWxsbygpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpoZWxsbygpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpoZWxsbygpIik7CiAgICAgICAgIHNmdWwucmVtb3ZlKCk7Ci0JcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW5oZXJpdGFuY2UvZWpiL1NsZXNzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbmhlcml0YW5jZS9lamIvU2xlc3NFSkIuamF2YQppbmRleCAxNjhlYmMyLi43MDIzNjY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbmhlcml0YW5jZS9lamIvU2xlc3NFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbmhlcml0YW5jZS9lamIvU2xlc3NFSkIuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogQEludGVyY2VwdG9ycyhJbnRlcmNlcHRvckEuY2xhc3MpCiBwdWJsaWMgY2xhc3MgU2xlc3NFSkIgZXh0ZW5kcyBCYXNlQmVhbiBpbXBsZW1lbnRzIFNsZXNzIHsKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKCkgewotCSAgICByZXR1cm4gIkhlbGxvIjsKKyAgICAgICAgcmV0dXJuICJIZWxsbyI7CiAgICAgfQogCiAgICAgQEFyb3VuZEludm9rZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDRjMWQ4MGIuLjlhMDY1YzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDkgKzE1LDkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwtYW5uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2J1aWxkLnhtbAppbmRleCBkYWNkMzkzLi4zNTY4ZDE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTAsOCArNTAsOCBAQAogICAgICAgICAgICAgICB2YWx1ZT0iKiovSW50ZXJjZXB0b3IqLmNsYXNzLCoqL1MqLmNsYXNzLCoqL0IqLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjUsMTAgKzY1LDEwIEBACiAgICAgICAgICAgIDxhcmcgbGluZT0iJHthcHBuYW1lfS1lamIiLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA4M2ZkMDczLi5kMjhjZTVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjQsMjEgKzI0LDIxIEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gCXByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCi0gIAkJbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOworICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CisgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogCi0JYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7Ci0gICAJY2xpZW50LmRvVGVzdCgpOworICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL0Jhc2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9CYXNlQmVhbi5qYXZhCmluZGV4IGY3NzUxNGIuLjY5ZTViYWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL0Jhc2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvQmFzZUJlYW4uamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBpZiAobWV0aG9kID09IG51bGwpIHsKICAgICAgICAgICAgIGlmIChuYW1lICE9IG51bGwpIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbiAiICsgZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiIGV4cGVjdGVkIG1ldGhvZCBuYW1lOiAiICsgbmFtZSArICIgZ290IG51bGwiKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghbWV0aG9kLmdldE5hbWUoKS5lcXVhbHMobmFtZSkpIAorICAgICAgICAgICAgaWYgKCFtZXRob2QuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW4gIiArIGdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiBleHBlY3RlZCBtZXRob2QgbmFtZTogIiArIG5hbWUgKyAiIGdvdDogIiArIG1ldGhvZC5nZXROYW1lKCkpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU2Z1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IDQ1YWMzYjAuLmVhM2I3YmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL1NmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9TZnVsRUpCLmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkI6aGVsbG8oKSIpOwogICAgICAgICB2ZXJpZnkoIlNmdWxFSkIiKTsKLQlyZXR1cm4gc2xlc3Muc2F5SGVsbG8oKTsKKyAgICByZXR1cm4gc2xlc3Muc2F5SGVsbG8oKTsKICAgICB9CiAKICAgICBASW50ZXJjZXB0b3JzKEludGVyY2VwdG9yQS5jbGFzcykKQEAgLTUwLDcgKzUwLDcgQEAKICAgICBASW50ZXJjZXB0b3JzKEludGVyY2VwdG9yQS5jbGFzcykKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0MCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqU2Z1bEVKQiBQb3N0Q29uc3RydWN0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKlNmdWxFSkIgUG9zdENvbnN0cnVjdCIpOwogICAgICAgICB2ZXJpZnlNZXRob2QoImluaXQwIik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9TaW5nbGV0b25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggOWUxYjQ1NC4uZmE3NDkxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL1NpbmdsZXRvbkJlYW4uamF2YQpAQCAtMzksMTQgKzM5LDE0IEBACiAgICAgICAgIHZlcmlmeU1ldGhvZCgiaW5pdCIpOwogICAgICAgICBzZnVsLmhlbGxvKCk7CiAgICAgfQotICAgIAorCiAgICAgQEludGVyY2VwdG9ycyhJbnRlcmNlcHRvckMuY2xhc3MpCiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKICAgICAgICAgdmVyaWZ5QUJfQUMoIlNpbmdsZXRvbkJlYW4iKTsKICAgICAgICAgdmVyaWZ5QUNfUEMoIlNpbmdsZXRvbkJlYW4iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmhlbGxvKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmhlbGxvKCkiKTsKICAgICAgICAgc2Z1bC5yZW1vdmUoKTsKLQlyZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CisgICAgcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOwogICAgIH0KIAogICAgIEBJbnRlcmNlcHRvcnMoSW50ZXJjZXB0b3JCLmNsYXNzKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4uamF2YQppbmRleCBkNWMwNjFiLi5jNWRiZjNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4uamF2YQpAQCAtMzYsMjIgKzM2LDIyIEBACiAgICAgQEludGVyY2VwdG9ycyhJbnRlcmNlcHRvckEuY2xhc3MpCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjo6aW5pdCgpICIgKyB0aGlzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjo6aW5pdCgpICIgKyB0aGlzKTsKICAgICAgICAgdmVyaWZ5TWV0aG9kKCJpbml0Iik7CiAgICAgfQotICAgIAorCiAKICAgICBASW50ZXJjZXB0b3JzKEludGVyY2VwdG9yQS5jbGFzcykKICAgICBwdWJsaWMgdm9pZCBmb28oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW46OmZvbygpICIpOwotCXZlcmlmeUEoIlNvbWVNYW5hZ2VkQmVhbiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuOjpmb28oKSAiKTsKKyAgICB2ZXJpZnlBKCJTb21lTWFuYWdlZEJlYW4iKTsKICAgICAgICAgaWYgKG9yYiA9PSBudWxsKSB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiU29tZU1hbmFnZWRCZWFuOiBPUkIgaXMgbnVsbCIpOwogICAgIH0KIAogICAgIEBJbnRlcmNlcHRvcnMoSW50ZXJjZXB0b3JBLmNsYXNzKQogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOwogICAgICAgICB2ZXJpZnlNZXRob2QoImRlc3Ryb3kiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4yLmphdmEKaW5kZXggMTRiZWUyMC4uYmQwY2M2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL1NvbWVNYW5hZ2VkQmVhbjIuamF2YQpAQCAtMzcsMjEgKzM3LDIxIEBACiAgICAgQEludGVyY2VwdG9ycyhJbnRlcmNlcHRvckEuY2xhc3MpCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdDIoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW4yOjppbml0MigpICIgKyB0aGlzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjI6OmluaXQyKCkgIiArIHRoaXMpOwogICAgICAgICB2ZXJpZnlNZXRob2QoImluaXQyIik7CiAgICAgfQotICAgIAorCiAKICAgICBASW50ZXJjZXB0b3JzKEludGVyY2VwdG9yQS5jbGFzcykKICAgICBwdWJsaWMgdm9pZCBmb28yKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuMjo6Zm9vMigpICIpOwotCXZlcmlmeUFDX0FDKCJTb21lTWFuYWdlZEJlYW4yIik7Ci0JdmVyaWZ5QV9QQygiU29tZU1hbmFnZWRCZWFuMiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuMjo6Zm9vMigpICIpOworICAgIHZlcmlmeUFDX0FDKCJTb21lTWFuYWdlZEJlYW4yIik7CisgICAgdmVyaWZ5QV9QQygiU29tZU1hbmFnZWRCZWFuMiIpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW4yOjpkZXN0cm95KCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW4yOjpkZXN0cm95KCkgIik7CiAgICAgICAgIHZlcmlmeU1ldGhvZCgiZGVzdHJveSIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL1NvbWVNYW5hZ2VkQmVhbjMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL1NvbWVNYW5hZ2VkQmVhbjMuamF2YQppbmRleCA1MmQzMDdjLi41MDVlNjUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4zLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuMy5qYXZhCkBAIC0zNywyMSArMzcsMjEgQEAKICAgICBASW50ZXJjZXB0b3JzKEludGVyY2VwdG9yQS5jbGFzcykKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0MygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjM6OmluaXQzKCkgIiArIHRoaXMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuMzo6aW5pdDMoKSAiICsgdGhpcyk7CiAgICAgICAgIHZlcmlmeU1ldGhvZCgiaW5pdDMiKTsKICAgICB9Ci0gICAgCisKIAogICAgIEBJbnRlcmNlcHRvcnMoSW50ZXJjZXB0b3JBLmNsYXNzKQogICAgIHB1YmxpYyB2b2lkIGZvbzMoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW4zOjpmb28zKCkgIik7Ci0JdmVyaWZ5QV9BQygiU29tZU1hbmFnZWRCZWFuMyIpOwotCXZlcmlmeUFDX1BDKCJTb21lTWFuYWdlZEJlYW4zIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW4zOjpmb28zKCkgIik7CisgICAgdmVyaWZ5QV9BQygiU29tZU1hbmFnZWRCZWFuMyIpOworICAgIHZlcmlmeUFDX1BDKCJTb21lTWFuYWdlZEJlYW4zIik7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjM6OmRlc3Ryb3koKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjM6OmRlc3Ryb3koKSAiKTsKICAgICAgICAgdmVyaWZ5TWV0aG9kKCJkZXN0cm95Iik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYnVpbGQueG1sCmluZGV4IGE2NjdlNmIuLjFjMWE5NzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9idWlsZC54bWwKQEAgLTQ2LDkgKzQ2LDkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIHNldCBvZiBlamItZWpiMzItbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBzZXQgb2YgZWpiLWVqYjMyLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbCB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDllZTU4MS4uZjVkNmNhYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsLWRlc2NyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvcnMvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9idWlsZC54bWwKaW5kZXggMDJmYTI1Yi4uNmNmMjg1NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUxLDggKzUxLDggQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJiZWFucy54bWwiIHZhbHVlPSJkZXNjcmlwdG9ycy9iZWFucy54bWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NiwxMCArNjYsMTAgQEAKICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FwcG5hbWV9LWVqYiIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDgzZmQwNzMuLmQyOGNlNWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCwyMSArMjQsMjEgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAJcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKLSAgCQluZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CisgICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KKyAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAKLQlhcHBOYW1lID0gYXJnc1swXTsKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKLSAgIAljbGllbnQuZG9UZXN0KCk7CisgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9lamIvQmFzZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvZWpiL0Jhc2VCZWFuLmphdmEKaW5kZXggNjVmYjc5Ny4uMTlkMWUyZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9lamIvQmFzZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2VqYi9CYXNlQmVhbi5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIGlmIChtZXRob2QgPT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCkgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluICIgKyBnZXRDbGFzcygpLmdldE5hbWUoKSArICIgZXhwZWN0ZWQgbWV0aG9kIG5hbWU6ICIgKyBuYW1lICsgIiBnb3QgbnVsbCIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFtZXRob2QuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkgCisgICAgICAgICAgICBpZiAoIW1ldGhvZC5nZXROYW1lKCkuZXF1YWxzKG5hbWUpKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbiAiICsgZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiIGV4cGVjdGVkIG1ldGhvZCBuYW1lOiAiICsgbmFtZSArICIgZ290OiAiICsgbWV0aG9kLmdldE5hbWUoKSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2VqYi9TZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2VqYi9TZnVsRUpCLmphdmEKaW5kZXggMDE1NGEzYS4uMDZkYzQ3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9lamIvU2Z1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvZWpiL1NmdWxFSkIuamF2YQpAQCAtMzUsNyArMzUsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQjpoZWxsbygpIik7CiAgICAgICAgIHZlcmlmeSgiU2Z1bEVKQiIpOwotCXJldHVybiBzbGVzcy5zYXlIZWxsbygpOworICAgIHJldHVybiBzbGVzcy5zYXlIZWxsbygpOwogICAgIH0KIAogICAgIEBSZW1vdmUKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQwKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiKipTZnVsRUpCIFBvc3RDb25zdHJ1Y3QiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqU2Z1bEVKQiBQb3N0Q29uc3RydWN0Iik7CiAgICAgICAgIHZlcmlmeU1ldGhvZCgiaW5pdDAiKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvZWpiL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQppbmRleCBjMWU2NTViLi4xYTlhMWVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9lamIvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC0zNiwxMyArMzYsMTMgQEAKICAgICAgICAgdmVyaWZ5TWV0aG9kKCJpbml0Iik7CiAgICAgICAgIHNmdWwuaGVsbG8oKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewogICAgICAgICB2ZXJpZnlBQl9BQygiU2luZ2xldG9uQmVhbiIpOwogICAgICAgICB2ZXJpZnlBQ19QQygiU2luZ2xldG9uQmVhbiIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aGVsbG8oKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aGVsbG8oKSIpOwogICAgICAgICBzZnVsLnJlbW92ZSgpOwotCXJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKKyAgICByZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRmY2VzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZmNlcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDMzZDcyMWIuLjgyY2Y2OTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRmY2VzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGZjZXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamIzMi1pbnRyZmFjZXMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY2xpZW50LmludHJmYWNlcy5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGZjZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGZjZXMvYnVpbGQueG1sCmluZGV4IDhlMTRjOGQuLjhiNmQ5NDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRmY2VzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZmNlcy9idWlsZC54bWwKQEAgLTM0LDEyICszNCwxMiBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbixwcmVjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAgPGphdmFjIGZvcms9InRydWUiIGluY2x1ZGVBbnRSdW50aW1lPSJmYWxzZSIgCisgICAgICAgIDxqYXZhYyBmb3JrPSJ0cnVlIiBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiCiAgICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtzMWFzLmNsYXNzcGF0aH0iCiAgICAgICAgICAgICAgICBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZGVidWc9InRydWUiIHNyY2Rpcj0iY2xpZW50IiBpbmNsdWRlcz0iKiovKi5qYXZhIj4KICAgICAgICAgICAgIDxjbGFzc3BhdGggcGF0aD0iJHtjbGFzc3BhdGh9Ii8+CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudC50eXBlIiB2YWx1ZT0iZGVwbG95LWZhaWwiIC8+Ci0JCQkJCQk8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamIuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImluZGV4IiB2YWx1ZT0iMSIgLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLW5lZyI+CkBAIC05NCw3ICs5NCw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudC50eXBlIiB2YWx1ZT0iZGVwbG95LWZhaWwiIC8+Ci0JCQkJCQk8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamIuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImluZGV4IiB2YWx1ZT0iMiIgLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgpAQCAtMTEwLDEwICsxMTAsMTAgQEAKICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL21ldGhvZGludGYvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9tZXRob2RpbnRmL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjMxZmFmMy4uMzkzZmRhNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL21ldGhvZGludGYvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvbWV0aG9kaW50Zi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYjMyLW1ldGhvZGludGYiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY2xpZW50Lm1ldGhvZGludGYuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvbWV0aG9kaW50Zi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvbWV0aG9kaW50Zi9idWlsZC54bWwKaW5kZXggNjYxZTc4Ny4uZGM4OThlZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL21ldGhvZGludGYvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9tZXRob2RpbnRmL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY1LDEwICs2NSwxMCBAQAogICAgICAgICAgICA8YXJnIGxpbmU9IiR7am5kaXJvb3R9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9tZXRob2RpbnRmL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9tZXRob2RpbnRmL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAwZjYyZDQxLi4xYWYyYjFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvbWV0aG9kaW50Zi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL21ldGhvZGludGYvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNSwxMiArMjUsMTIgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgSW5pdGlhbENvbnRleHQgY29udGV4dDsKIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamIzMi1tZXRob2RpbnRmIik7CiAKICAgICAgICAgdHJ5IHsKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIHN0ZnVsLnRlc3QoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyB0aW1lciB0byBleHBpcmUgdG8gdmVyaWZ5IHRoZSByZXN1bHRzIik7CiAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoMzAwMCk7Ci0gICAgICAgICAgICBib29sZWFuIHBhc3MgPSBzdGxlcy52ZXJpZnkoKSAmJiBzdGZ1bC52ZXJpZnkoKTsgCisgICAgICAgICAgICBib29sZWFuIHBhc3MgPSBzdGxlcy52ZXJpZnkoKSAmJiBzdGZ1bC52ZXJpZnkoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamIzMi1tZXRob2RpbnRmOiAiLCAoKHBhc3MpPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpICk7CiAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL21ldGhvZGludGYvZWpiL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9tZXRob2RpbnRmL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggODEzODcyYy4uYTZhNDYxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL21ldGhvZGludGYvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvbWV0aG9kaW50Zi9lamIvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdmVyaWZ5UmVzdWx0KCkgewotCXJldHVybiBfcGMgJiYgX2ludGY7CisgICAgcmV0dXJuIF9wYyAmJiBfaW50ZjsKICAgICB9CiAKICAgICBAQXJvdW5kSW52b2tlCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL2J1aWxkLnhtbAppbmRleCBjYWQzODE0Li4yNmEzMzk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS9idWlsZC54bWwKQEAgLTM5LDkgKzM5LDkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIHNldCBvZiBlamItZWpiMzItcGVyc2lzdGVuY2UgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIHNldCBvZiBlamItZWpiMzItcGVyc2lzdGVuY2UgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvYnVpbGQueG1sCmluZGV4IGE2ODI5YzIuLjUwNjJjNWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9idWlsZC54bWwKQEAgLTc0LDkgKzc0LDkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIHNldCBvZiBlamItZWpiMzItcGVyc2lzdGVuY2UtdW5zeW5jaHJvbml6ZWRQQyB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgc2V0IG9mIGVqYi1lamIzMi1wZXJzaXN0ZW5jZS11bnN5bmNocm9uaXplZFBDIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2Rpc2FsbG93ZWRfbWV0aG9kcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZGlzYWxsb3dlZF9tZXRob2RzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYWZmYjU3Ni4uN2RhMmMxYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZGlzYWxsb3dlZF9tZXRob2RzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZGlzYWxsb3dlZF9tZXRob2RzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InVuc3luY2hwY19kaXNhbGxvd2VkX21ldGhvZHMiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9kaXNhbGxvd2VkX21ldGhvZHMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZGlzYWxsb3dlZF9tZXRob2RzL2J1aWxkLnhtbAppbmRleCA2MDI3MmUyLi4wNmU5ZjgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9kaXNhbGxvd2VkX21ldGhvZHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2Rpc2FsbG93ZWRfbWV0aG9kcy9idWlsZC54bWwKQEAgLTQ2LDE3ICs0NiwxNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS9saWIiLz4KLSAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LWxpYi5qYXIiIAorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIKICAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICBpbmNsdWRlcz0iKiovUGVyc29uLmNsYXNzIj4KLSAgICAgICAgPC9qYXI+ICAgICAgICAKKyAgICAgICAgPC9qYXI+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1wYXIuamFyIj4KICAgICAgICAgICAgICA8bWV0YWluZiBmaWxlPSJkZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbCIvPgogICAgICAgICA8L2phcj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQmVhbi5jbGFzcywqKi9UZXN0ZXIuY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovVGVzdGVyLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiB1cGRhdGU9InllcyIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2Rpc2FsbG93ZWRfbWV0aG9kcy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9kaXNhbGxvd2VkX21ldGhvZHMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGUzYTA2OTIuLmI1MjQ1YzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2Rpc2FsbG93ZWRfbWV0aG9kcy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZGlzYWxsb3dlZF9tZXRob2RzL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkkgYW0gaW4gY2xpZW50Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiByZXN1bHRNYXAgPSBzbGVzc0JlYW4uZG9UZXN0KCk7CiAgICAgICAgICAgICBmb3IgKEVudHJ5PFN0cmluZywgQm9vbGVhbj4gZW50cnkgOiByZXN1bHRNYXAuZW50cnlTZXQoKSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZGlzYWxsb3dlZF9tZXRob2RzL2VqYi9QZXJzb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2Rpc2FsbG93ZWRfbWV0aG9kcy9lamIvUGVyc29uLmphdmEKaW5kZXggODM0NzBlMy4uNjQyM2MxYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZGlzYWxsb3dlZF9tZXRob2RzL2VqYi9QZXJzb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9kaXNhbGxvd2VkX21ldGhvZHMvZWpiL1BlcnNvbi5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAKICAgICBASWQKICAgICBwcml2YXRlIGludCBpZDsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CiAKICAgICBwdWJsaWMgUGVyc29uKCkgewpAQCAtMzMsNyArMzMsNyBAQAogICAgIHB1YmxpYyBQZXJzb24oU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgUGVyc29uKGludCBpZCkgewogICAgICAgICB0aGlzLmlkID0gaWQ7CiAgICAgfQpAQCAtNDIsNyArNDIsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgIHJldHVybiAiUGVyc29uOiB7IiArICIobmFtZSA9ICIgKyBuYW1lICsgIil9IjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgaW50IGdldElkKCkgewogICAgICAgICByZXR1cm4gdGhpcy5pZDsKICAgICB9CkBAIC01MCw3ICs1MCw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZGlzYWxsb3dlZF9tZXRob2RzL2VqYi9TbGVzc0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2Rpc2FsbG93ZWRfbWV0aG9kcy9lamIvU2xlc3NCZWFuLmphdmEKaW5kZXggODJlMWI2Yi4uZTUxZDRjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZGlzYWxsb3dlZF9tZXRob2RzL2VqYi9TbGVzc0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9kaXNhbGxvd2VkX21ldGhvZHMvZWpiL1NsZXNzQmVhbi5qYXZhCkBAIC0zMiwxNSArMzIsMTUgQEAKICAgICBAUGVyc2lzdGVuY2VDb250ZXh0KHVuaXROYW1lPSJsaWIvdW5zeW5jaHBjX2Rpc2FsbG93ZWRfbWV0aG9kcy1wYXIuamFyI2VtIiwKICAgICAgICAgICAgIHN5bmNocm9uaXphdGlvbj1TeW5jaHJvbml6YXRpb25UeXBlLlVOU1lOQ0hST05JWkVEKQogICAgIEVudGl0eU1hbmFnZXIgZW07Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgTWFwPFN0cmluZywgQm9vbGVhbj4gZG9UZXN0KCkgewogICAgICAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiByZXN1bHRNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+KCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8qCiAgICAgICAgICAqIFNQRUM6IFRoZSBhcHBsaWNhdGlvbidzIHVzZSBvZiBxdWVyaWVzIHdpdGggcGVzc2ltaXN0aWMgbG9ja3MsCi0gICAgICAgICAqIGJ1bGsgdXBkYXRlIG9yIGRlbGV0ZSBxdWVyaWVzLCBldGMuIHJlc3VsdCBpbiB0aGUgcHJvdmlkZXIgCi0gICAgICAgICAqIHRocm93aW5nIHRoZSBUcmFuc2FjdGlvblJlcXVpcmVkRXhjZXB0aW9uLiAKKyAgICAgICAgICogYnVsayB1cGRhdGUgb3IgZGVsZXRlIHF1ZXJpZXMsIGV0Yy4gcmVzdWx0IGluIHRoZSBwcm92aWRlcgorICAgICAgICAgKiB0aHJvd2luZyB0aGUgVHJhbnNhY3Rpb25SZXF1aXJlZEV4Y2VwdGlvbi4KICAgICAgICAgICovCiAgICAgICAgIC8vUXVlcnkgd2l0aCBwZXNzaW1pc3RpYyBsb2NrcwogICAgICAgICBRdWVyeSBxdWVyeSA9IGVtLmNyZWF0ZVF1ZXJ5KCJTRUxFQ1QgT0JKRUNUKHApIEZST00gUGVyc29uIHAgV0hFUkUgcC5uYW1lPSdUb20nIik7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgcmVzdWx0TWFwLnB1dCgiVGVzdFBlc3NpbWlzdGljTG9ja1F1ZXJ5IiwgZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vQnVsayB1cGRhdGUKICAgICAgICAgUXVlcnkgdXBkYXRlUXVlcnkgPSBlbS5jcmVhdGVRdWVyeSgiVVBEQVRFIFBlcnNvbiBwIFNFVCBwLm5hbWU9J0ppbScgV0hFUkUgcC5pZCA+IDEwMCIpOwogICAgICAgICB0cnkgewpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHJlc3VsdE1hcC5wdXQoIlRlc3RCdWxrVXBkYXRlIiwgZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vQnVsayBkZWxldGUKICAgICAgICAgUXVlcnkgZGVsZXRlUXVlcnkgPSBlbS5jcmVhdGVRdWVyeSgiREVMRVRFIEZST00gUGVyc29uIHAgV0hFUkUgcC5uYW1lID0gJ0ppbSciKTsKICAgICAgICAgdHJ5IHsKQEAgLTg0LDEyICs4NCwxMiBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHJlc3VsdE1hcC5wdXQoIlRlc3RCdWxrRGVsZXRlIiwgZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIC8qCi0gICAgICAgICAqIFNQRUM6IFRoZSBhcHBsaWNhdGlvbiBpcyBwZXJtaXR0ZWQgdG8gaW52b2tlIHRoZSBwZXJzaXN0LCBtZXJnZSwgcmVtb3ZlLCAKLSAgICAgICAgICogYW5kIHJlZnJlc2ggZW50aXR5IGxpZmVjeWNsZSBvcGVyYXRpb25zIG9uIGFuIGVudGl0eSBtYW5hZ2VyIG9mIHR5cGUgCi0gICAgICAgICAqIFN5bmNocm9uaXphdGlvblR5cGUuVU5TWU5DSFJPTklaRUQgaW5kZXBlbmRlbnQgb2Ygd2hldGhlciB0aGUgCisgICAgICAgICAqIFNQRUM6IFRoZSBhcHBsaWNhdGlvbiBpcyBwZXJtaXR0ZWQgdG8gaW52b2tlIHRoZSBwZXJzaXN0LCBtZXJnZSwgcmVtb3ZlLAorICAgICAgICAgKiBhbmQgcmVmcmVzaCBlbnRpdHkgbGlmZWN5Y2xlIG9wZXJhdGlvbnMgb24gYW4gZW50aXR5IG1hbmFnZXIgb2YgdHlwZQorICAgICAgICAgKiBTeW5jaHJvbml6YXRpb25UeXBlLlVOU1lOQ0hST05JWkVEIGluZGVwZW5kZW50IG9mIHdoZXRoZXIgdGhlCiAgICAgICAgICAqIHBlcnNpc3RlbmNlIGNvbnRleHQgaXMgam9pbmVkIHRvIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgogICAgICAgICAgKi8KICAgICAgICAgUGVyc29uIHBlcnNvbjIgPSBuZXcgUGVyc29uKCJKYWNrIik7CkBAIC0xMDAsNyArMTAwLDcgQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICByZXN1bHRNYXAucHV0KCJUZXN0UGVyc2lzdCIsIGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZW0ubWVyZ2UobmV3IFBlcnNvbigiTGlseSIpKTsKICAgICAgICAgICAgIHJlc3VsdE1hcC5wdXQoIlRlc3RNZXJnZSIsIHRydWUpOwpAQCAtMTA4LDcgKzEwOCw3IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgcmVzdWx0TWFwLnB1dCgiVGVzdE1lcmdlIiwgZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFBlcnNvbiBwZXJzb24zID0gZW0uZmluZChQZXJzb24uY2xhc3MsIDIpOwogICAgICAgICBwZXJzb24zLnNldE5hbWUoIkx1Y3kyIik7CiAgICAgICAgIHRyeSB7CkBAIC0xMTgsNyArMTE4LDcgQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICByZXN1bHRNYXAucHV0KCJUZXN0UmVmcmVzaCIsIGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZW0ucmVtb3ZlKHBlcnNvbjIpOwogICAgICAgICAgICAgcmVzdWx0TWFwLnB1dCgiVGVzdFJlbW92ZSIsIHRydWUpOwpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgcmVzdWx0TWFwLnB1dCgiVGVzdFJlbW92ZSIsIGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gcmVzdWx0TWFwOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2V4dGVuZGVkc2NvcGVfY3Jvc3Nfc2ZzYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZXh0ZW5kZWRzY29wZV9jcm9zc19zZnNiL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYWJhZTExNC4uZDkwZGU5OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZXh0ZW5kZWRzY29wZV9jcm9zc19zZnNiL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZXh0ZW5kZWRzY29wZV9jcm9zc19zZnNiL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InVuc3luY3BjX2V4dGVuZGVkc2NvcGVfY3Jvc3Nfc2ZzYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2V4dGVuZGVkc2NvcGVfY3Jvc3Nfc2ZzYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9leHRlbmRlZHNjb3BlX2Nyb3NzX3Nmc2IvYnVpbGQueG1sCmluZGV4IGYwZmFjNzYuLjFlN2RmMGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2V4dGVuZGVkc2NvcGVfY3Jvc3Nfc2ZzYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZXh0ZW5kZWRzY29wZV9jcm9zc19zZnNiL2J1aWxkLnhtbApAQCAtNDYsMTcgKzQ2LDE3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9L2xpYiIvPgotICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIgCisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1saWIuamFyIgogICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIGluY2x1ZGVzPSIqKi9QZXJzb24uY2xhc3MiPgotICAgICAgICA8L2phcj4gICAgICAgIAorICAgICAgICA8L2phcj4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LXBhci5qYXIiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGZpbGU9ImRlc2NyaXB0b3IvcGVyc2lzdGVuY2UueG1sIi8+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypGaW5kZXIqLmNsYXNzLCoqLyp5bmNoUEMqLmNsYXNzLCoqL1Rlc3Rlci5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9UZXN0ZXIuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIHVwZGF0ZT0ieWVzIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZXh0ZW5kZWRzY29wZV9jcm9zc19zZnNiL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2V4dGVuZGVkc2NvcGVfY3Jvc3Nfc2ZzYi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNjVhMmFiYy4uYTBjZTZlYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZXh0ZW5kZWRzY29wZV9jcm9zc19zZnNiL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9leHRlbmRlZHNjb3BlX2Nyb3NzX3Nmc2IvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgICAgICAgICAiYXBwc2Vydi10ZXN0cyIpOwogICAgIEBFSkIoYmVhbk5hbWUgPSAiVEMxU2ZzYldpdGhVbnN5bmNoUEMiKQogICAgIHByaXZhdGUgc3RhdGljIFRlc3RlciB0QzFTZnNiV2l0aFVuc3luY2hQQzsKLSAgICAKKwogICAgIEBFSkIoYmVhbk5hbWUgPSAiVEMyU2ZzYldpdGhTeW5jaFBDIikKICAgICBwcml2YXRlIHN0YXRpYyBUZXN0ZXIgdEMyU2ZzYldpdGhTeW5jaFBDOwogCkBAIC00MSwxMyArNDEsMTMgQEAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkkgYW0gaW4gY2xpZW50Iik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIFNGU0JXaXRoVW5zeW5jaFBDLmRvVGVzdCIpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlRlc3RDYXNlMV9leHRlbmRlZFNjb3BlU2ZzYldpdGhVbnN5bmNQQ0ludm9rZVNmc2JXaXRoU3luY2hQQyIsIHRDMVNmc2JXaXRoVW5zeW5jaFBDLmRvVGVzdCgpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgVEMyX1NGU0JXaXRoU3luY2hQQy5kb1Rlc3QiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJUZXN0Q2FzZTJfZXh0ZW5kZWRTY29wZVNmc2JXaXRoU3luY1BDSW52b2tlU2ZzYldpdGhVbnN5bmNoUEMiLCB0QzJTZnNiV2l0aFN5bmNoUEMuZG9UZXN0KCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9UZXN0IG1ldGhvZCBlbmRzIik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZXh0ZW5kZWRzY29wZV9jcm9zc19zZnNiL2VqYi9UQzFTZnNiV2l0aFN5bmNoUEMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2V4dGVuZGVkc2NvcGVfY3Jvc3Nfc2ZzYi9lamIvVEMxU2ZzYldpdGhTeW5jaFBDLmphdmEKaW5kZXggYzg1NTA5Mi4uMjVlZTAwZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZXh0ZW5kZWRzY29wZV9jcm9zc19zZnNiL2VqYi9UQzFTZnNiV2l0aFN5bmNoUEMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9leHRlbmRlZHNjb3BlX2Nyb3NzX3Nmc2IvZWpiL1RDMVNmc2JXaXRoU3luY2hQQy5qYXZhCkBAIC0zNCwxNyArMzQsMTcgQEAKICAgICAgICAgICAgIHN5bmNocm9uaXphdGlvbiA9IFN5bmNocm9uaXphdGlvblR5cGUuU1lOQ0hST05JWkVELAogICAgICAgICAgICAgdHlwZSA9IFBlcnNpc3RlbmNlQ29udGV4dFR5cGUuRVhURU5ERUQpCiAgICAgRW50aXR5TWFuYWdlciBlbTsKLSAgICAKKwogICAgIC8vQE92ZXJyaWRlCiAgICAgcHVibGljIFBlcnNvbiBmaW5kUGVyc29uKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIFBlcnNvbiBwID0gZW0uZmluZChQZXJzb24uY2xhc3MsIG5hbWUpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJGaW5kIHBlcnNpb24gIiArIHApOwogICAgICAgICByZXR1cm4gcDsKICAgICB9Ci0gICAgCisKICAgICBASW5pdAogICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUZpbmRlcigpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2V4dGVuZGVkc2NvcGVfY3Jvc3Nfc2ZzYi9lamIvVEMxU2ZzYldpdGhVbnN5bmNoUEMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2V4dGVuZGVkc2NvcGVfY3Jvc3Nfc2ZzYi9lamIvVEMxU2ZzYldpdGhVbnN5bmNoUEMuamF2YQppbmRleCA2YzQ4YzkwLi5mY2ExY2E1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9leHRlbmRlZHNjb3BlX2Nyb3NzX3Nmc2IvZWpiL1RDMVNmc2JXaXRoVW5zeW5jaFBDLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZXh0ZW5kZWRzY29wZV9jcm9zc19zZnNiL2VqYi9UQzFTZnNiV2l0aFVuc3luY2hQQy5qYXZhCkBAIC0zMCwxMCArMzAsMTAgQEAKICAgICAgICAgICAgIHN5bmNocm9uaXphdGlvbiA9IFN5bmNocm9uaXphdGlvblR5cGUuVU5TWU5DSFJPTklaRUQsCiAgICAgICAgICAgICB0eXBlID0gUGVyc2lzdGVuY2VDb250ZXh0VHlwZS5FWFRFTkRFRCkKICAgICBFbnRpdHlNYW5hZ2VyIGVtOwotICAgIAorCiAgICAgQEVKQiBwcml2YXRlIFRDMUZpbmRlckhvbWUgZmluZGVySG9tZTsKICAgICBwcml2YXRlIFRDMUZpbmRlciBmaW5kZXJMb2NhbE9iamVjdDsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGRvVGVzdCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vIFNob3VsZCB0aHJvdyBFSkJFeGNlcHRpb24gaGVyZQpAQCAtNTEsNiArNTEsNiBAQAogICAgICAgICAgICAgLy8gVW5leHBlY3RlZCBleGNlcHRpb24KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2V4dGVuZGVkc2NvcGVfY3Jvc3Nfc2ZzYi9lamIvVEMyU2ZzYldpdGhTeW5jaFBDLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9leHRlbmRlZHNjb3BlX2Nyb3NzX3Nmc2IvZWpiL1RDMlNmc2JXaXRoU3luY2hQQy5qYXZhCmluZGV4IDk2MjgwNjUuLmFiZTJlZDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2V4dGVuZGVkc2NvcGVfY3Jvc3Nfc2ZzYi9lamIvVEMyU2ZzYldpdGhTeW5jaFBDLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZXh0ZW5kZWRzY29wZV9jcm9zc19zZnNiL2VqYi9UQzJTZnNiV2l0aFN5bmNoUEMuamF2YQpAQCAtMzAsMTAgKzMwLDEwIEBACiAgICAgICAgICAgICBzeW5jaHJvbml6YXRpb24gPSBTeW5jaHJvbml6YXRpb25UeXBlLlNZTkNIUk9OSVpFRCwKICAgICAgICAgICAgIHR5cGUgPSBQZXJzaXN0ZW5jZUNvbnRleHRUeXBlLkVYVEVOREVEKQogICAgIEVudGl0eU1hbmFnZXIgZW07Ci0gICAgCisKICAgICBARUpCIHByaXZhdGUgVEMyRmluZGVySG9tZSBmaW5kZXJIb21lOwogICAgIHByaXZhdGUgVEMyRmluZGVyIGZpbmRlckxvY2FsT2JqZWN0OwotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gZG9UZXN0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy8gU2hvdWxkIHRocm93IEVKQkV4Y2VwdGlvbiBoZXJlCkBAIC01MSw2ICs1MSw2IEBACiAgICAgICAgICAgICAvLyBVbmV4cGVjdGVkIGV4Y2VwdGlvbgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZXh0ZW5kZWRzY29wZV9jcm9zc19zZnNiL2VqYi9UQzJTZnNiV2l0aFVuc3luY2hQQy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZXh0ZW5kZWRzY29wZV9jcm9zc19zZnNiL2VqYi9UQzJTZnNiV2l0aFVuc3luY2hQQy5qYXZhCmluZGV4IDA1ZGVjYjQuLjMxMzZmYjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2V4dGVuZGVkc2NvcGVfY3Jvc3Nfc2ZzYi9lamIvVEMyU2ZzYldpdGhVbnN5bmNoUEMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9leHRlbmRlZHNjb3BlX2Nyb3NzX3Nmc2IvZWpiL1RDMlNmc2JXaXRoVW5zeW5jaFBDLmphdmEKQEAgLTMxLDE2ICszMSwxNiBAQAogICAgICAgICAgICAgc3luY2hyb25pemF0aW9uID0gU3luY2hyb25pemF0aW9uVHlwZS5VTlNZTkNIUk9OSVpFRCwKICAgICAgICAgICAgIHR5cGUgPSBQZXJzaXN0ZW5jZUNvbnRleHRUeXBlLkVYVEVOREVEKQogICAgIEVudGl0eU1hbmFnZXIgZW07Ci0gICAgCisKICAgICAvL0BPdmVycmlkZQogICAgIHB1YmxpYyBQZXJzb24gZmluZFBlcnNvbihTdHJpbmcgbmFtZSkgewogICAgICAgICBQZXJzb24gcCA9IGVtLmZpbmQoUGVyc29uLmNsYXNzLCBuYW1lKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiRmluZCBwZXJzaW9uICIgKyBwKTsKICAgICAgICAgcmV0dXJuIHA7CiAgICAgfQotICAgIAorCiAgICAgQEluaXQKICAgICBwdWJsaWMgdm9pZCBjcmVhdGVGaW5kZXIoKSB7Ci0gICAgICAgIAorCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvcm9sbGJhY2tfbm90Y2xlYXJfdW5zeW5jaFBDL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9yb2xsYmFja19ub3RjbGVhcl91bnN5bmNoUEMvYnVpbGQucHJvcGVydGllcwppbmRleCAxMGJiMmVlLi4yNzMxMDFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9yb2xsYmFja19ub3RjbGVhcl91bnN5bmNoUEMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9yb2xsYmFja19ub3RjbGVhcl91bnN5bmNoUEMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0idW5zeW5jaHBjX3JvbGxiYWNrX25vdGNsZWFyX3Vuc3luY2hQQyIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3JvbGxiYWNrX25vdGNsZWFyX3Vuc3luY2hQQy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9yb2xsYmFja19ub3RjbGVhcl91bnN5bmNoUEMvYnVpbGQueG1sCmluZGV4IDFhZDMwZmIuLjcyMDFjMTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3JvbGxiYWNrX25vdGNsZWFyX3Vuc3luY2hQQy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvcm9sbGJhY2tfbm90Y2xlYXJfdW5zeW5jaFBDL2J1aWxkLnhtbApAQCAtNDYsMTcgKzQ2LDE3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9L2xpYiIvPgotICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIgCisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1saWIuamFyIgogICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIGluY2x1ZGVzPSIqKi9QZXJzb24uY2xhc3MiPgotICAgICAgICA8L2phcj4gICAgICAgIAorICAgICAgICA8L2phcj4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LXBhci5qYXIiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGZpbGU9ImRlc2NyaXB0b3IvcGVyc2lzdGVuY2UueG1sIi8+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypCZWFuLmNsYXNzLCoqL1Rlc3Rlci5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9UZXN0ZXIuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIHVwZGF0ZT0ieWVzIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvcm9sbGJhY2tfbm90Y2xlYXJfdW5zeW5jaFBDL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3JvbGxiYWNrX25vdGNsZWFyX3Vuc3luY2hQQy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMGFmNGNmZi4uYzVmZDJhMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvcm9sbGJhY2tfbm90Y2xlYXJfdW5zeW5jaFBDL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9yb2xsYmFja19ub3RjbGVhcl91bnN5bmNoUEMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSSBhbSBpbiBjbGllbnQiKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJUZXN0VW5zeW5jaFBDSXNDTGVhcmVkQWZ0ZXJSb2xsYmFjayIsIHNsZXNzQmVhbi5kb1Rlc3QoKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9yb2xsYmFja19ub3RjbGVhcl91bnN5bmNoUEMvZWpiL1BlcnNvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvcm9sbGJhY2tfbm90Y2xlYXJfdW5zeW5jaFBDL2VqYi9QZXJzb24uamF2YQppbmRleCA0OWNlY2MzLi5jYTEyZGUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9yb2xsYmFja19ub3RjbGVhcl91bnN5bmNoUEMvZWpiL1BlcnNvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3JvbGxiYWNrX25vdGNsZWFyX3Vuc3luY2hQQy9lamIvUGVyc29uLmphdmEKQEAgLTM2LDExICszNiwxMSBAQAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgIHJldHVybiAiUGVyc29uOiB7IiArICIobmFtZSA9ICIgKyBuYW1lICsgIil9IjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9yb2xsYmFja19ub3RjbGVhcl91bnN5bmNoUEMvZWpiL1NsZXNzQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvcm9sbGJhY2tfbm90Y2xlYXJfdW5zeW5jaFBDL2VqYi9TbGVzc0JlYW4uamF2YQppbmRleCAxMzhkMWNiLi5mY2FkYWVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9yb2xsYmFja19ub3RjbGVhcl91bnN5bmNoUEMvZWpiL1NsZXNzQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3JvbGxiYWNrX25vdGNsZWFyX3Vuc3luY2hQQy9lamIvU2xlc3NCZWFuLmphdmEKQEAgLTMwLDI2ICszMCwyNiBAQAogICAgIEBQZXJzaXN0ZW5jZUNvbnRleHQodW5pdE5hbWU9ImxpYi91bnN5bmNocGNfcm9sbGJhY2tfbm90Y2xlYXJfdW5zeW5jaFBDLXBhci5qYXIjZW0iLAogICAgICAgICAgICAgc3luY2hyb25pemF0aW9uPVN5bmNocm9uaXphdGlvblR5cGUuVU5TWU5DSFJPTklaRUQpCiAgICAgRW50aXR5TWFuYWdlciBlbTsKLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIGRvVGVzdCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJIGFtIGluIFNsZXNzQmVhbi5kb1Rlc3QiKTsKLSAgICAgICAgCisKICAgICAgICAgVXNlclRyYW5zYWN0aW9uIHV0eCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB1dHggPSAoVXNlclRyYW5zYWN0aW9uKShuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiamF2YTpjb21wL1VzZXJUcmFuc2FjdGlvbiIpOwogICAgICAgICAgICAgdXR4LmJlZ2luKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgUGVyc29uIHBlcnNvbiA9IG5ldyBQZXJzb24oIlRvbSIpOwogICAgICAgICAgICAgZW0ucGVyc2lzdChwZXJzb24pOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vTGV0IHVuc3luY2hyb25pemVkIFBDIGpvaW4gdGhlIHRyYW5zYWN0aW9uOwogICAgICAgICAgICAgZW0uam9pblRyYW5zYWN0aW9uKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb2VzIFBDIGNvbnRhaW4gcGVyc29uIGJlZm9yZSByb2xsYmFjazogIiArIGVtLmNvbnRhaW5zKHBlcnNvbikpOwogICAgICAgICAgICAgdXR4LnJvbGxiYWNrKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvZXMgUEMgY29udGFpbiBwZXJzb24gYWZ0ZXIgcm9sbGJhY2s6ICIgKyBlbS5jb250YWlucyhwZXJzb24pKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICByZXR1cm4gIShlbS5jb250YWlucyhwZXJzb24pKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNWJlNjM5OS4uZDhiYWM2MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0idW5zeW5jcGNfdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9idWlsZC54bWwKaW5kZXggMTI5NmM2OS4uMDRlZjk4ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9idWlsZC54bWwKQEAgLTQ2LDE3ICs0NiwxNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS9saWIiLz4KLSAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LWxpYi5qYXIiIAorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIKICAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICBpbmNsdWRlcz0iKiovUGVyc29uLmNsYXNzIj4KLSAgICAgICAgPC9qYXI+ICAgICAgICAKKyAgICAgICAgPC9qYXI+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1wYXIuamFyIj4KICAgICAgICAgICAgICA8bWV0YWluZiBmaWxlPSJkZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbCIvPgogICAgICAgICA8L2phcj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9GaW5kZXIuY2xhc3MsKiovKnluY2hQQyouY2xhc3MsKiovVGVzdGVyLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1Rlc3Rlci5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgdXBkYXRlPSJ5ZXMiCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDBjYzNiZTkuLjgyZGMzNWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNywxMyArMjcsMTMgQEAKICAgICAgICAgICAgICJhcHBzZXJ2LXRlc3RzIik7CiAgICAgQEVKQihiZWFuTmFtZSA9ICJUQzFTZnNiV2l0aFVuc3luY2hQQyIpCiAgICAgcHJpdmF0ZSBzdGF0aWMgVGVzdGVyIHRDMVNmc2JXaXRoVW5zeW5jaFBDOwotICAgIAorCiAgICAgQEVKQihiZWFuTmFtZSA9ICJUQzJTbHNiV2l0aFVuc3luY2hQQyIpCiAgICAgcHJpdmF0ZSBzdGF0aWMgVGVzdGVyIHRDMlNsc2JXaXRoVW5zeW5jaFBDOwotICAgIAorCiAgICAgQEVKQihiZWFuTmFtZSA9ICJUQzNTbHNiV2l0aFN5bmNoUEMiKQogICAgIHByaXZhdGUgc3RhdGljIFRlc3RlciB0QzNTbHNiV2l0aFN5bmNoUEM7Ci0gICAgCisKICAgICBARUpCKGJlYW5OYW1lID0gIlRDNFNsc2JXaXRoU3luY2hQQyIpCiAgICAgcHJpdmF0ZSBzdGF0aWMgVGVzdGVyIHRDNFNsc2JXaXRoU3luY2hQQzsKIApAQCAtNDcsMTkgKzQ3LDE5IEBACiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJIGFtIGluIGNsaWVudCIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyB0QzFfU0ZTQldpdGhVbnN5bmNoUEMuZG9UZXN0Iik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiVGVzdENhc2UxX3Nmc2JXaXRoVW5zeW5jUENJbnZva2VTbHNiV2l0aFN5bmNoUEMiLCB0QzFTZnNiV2l0aFVuc3luY2hQQy5kb1Rlc3QoKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIHRDMl9TTFNCV2l0aFVuc3luY2hQQy5kb1Rlc3QiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJUZXN0Q2FzZTJfc2xzYldpdGhVbnN5bmNQQ0ludm9rZVNsc2JXaXRoU3luY2hQQyIsIHRDMlNsc2JXaXRoVW5zeW5jaFBDLmRvVGVzdCgpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgdEMzX1NMU0JXaXRoU3luY2hQQy5kb1Rlc3QiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJUZXN0Q2FzZTNfc2xzYldpdGhTeW5jUENJbnZva2VTbHNiV2l0aFVuc3luY2hQQyIsIHRDM1Nsc2JXaXRoU3luY2hQQy5kb1Rlc3QoKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIHRDNF9TTFNCV2l0aFN5bmNoUEMuZG9UZXN0Iik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiVGVzdENhc2U0X3Nsc2JXaXRoU3luY1BDSW52b2tlU2ZzYldpdGhVbnN5bmNoUEMiLCB0QzRTbHNiV2l0aFN5bmNoUEMuZG9UZXN0KCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9UZXN0IG1ldGhvZCBlbmRzIik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9lamIvVEMxU2ZzYldpdGhVbnN5bmNoUEMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gvZWpiL1RDMVNmc2JXaXRoVW5zeW5jaFBDLmphdmEKaW5kZXggY2NlMjUwNC4uODRhMzM3NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9lamIvVEMxU2ZzYldpdGhVbnN5bmNoUEMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2VqYi9UQzFTZnNiV2l0aFVuc3luY2hQQy5qYXZhCkBAIC0yOSwxNyArMjksMTcgQEAKICAgICBAUGVyc2lzdGVuY2VDb250ZXh0KHVuaXROYW1lPSJsaWIvdW5zeW5jcGNfdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC1wYXIuamFyI2VtIiwKICAgICAgICAgICAgIHN5bmNocm9uaXphdGlvbiA9IFN5bmNocm9uaXphdGlvblR5cGUuVU5TWU5DSFJPTklaRUQpCiAgICAgRW50aXR5TWFuYWdlciBlbTsKLSAgICAKKwogICAgIEBFSkIoYmVhbk5hbWUgPSAiU2xzYldpdGhTeW5jaFBDIikKICAgICBGaW5kZXIgZmluZGVyOwogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gZG9UZXN0KCkgewogICAgICAgICB0cnkgewotICAgICAgICAgICAgLy9GSVhNRTogYSB3b3JrYXJvdW5kIHRvIGluaXRpYXRlIEphdmFFRVRyYW5zYWN0aW9uSW1wbC50eEVudGl0eU1hbmFnZXJNYXAsIAorICAgICAgICAgICAgLy9GSVhNRTogYSB3b3JrYXJvdW5kIHRvIGluaXRpYXRlIEphdmFFRVRyYW5zYWN0aW9uSW1wbC50eEVudGl0eU1hbmFnZXJNYXAsCiAgICAgICAgICAgICAvL3NvIHRoYXQgdGhlIGN1cnJlbnQgUEMgd2lsbCBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgVFguCiAgICAgICAgICAgICBlbS5maW5kKFBlcnNvbi5jbGFzcywgIlRvbSIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSSBhbSBpbiBUQzFTZnNiV2l0aFVuc3luY2hQQy5kb1Rlc3QiKTsKICAgICAgICAgICAgIC8vZXhwZWN0IGV4Y2VwdGlvbiB0aHJvd24gZnJvbSBmaW5kZXIuZmluZFBlcnNvbgogICAgICAgICAgICAgZmluZGVyLmZpbmRQZXJzb24oIlRvbSIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9lamIvVEMyU2xzYldpdGhVbnN5bmNoUEMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gvZWpiL1RDMlNsc2JXaXRoVW5zeW5jaFBDLmphdmEKaW5kZXggNWQ4NDRkZi4uNzIwYzBmMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9lamIvVEMyU2xzYldpdGhVbnN5bmNoUEMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2VqYi9UQzJTbHNiV2l0aFVuc3luY2hQQy5qYXZhCkBAIC0yOSwxNyArMjksMTcgQEAKICAgICBAUGVyc2lzdGVuY2VDb250ZXh0KHVuaXROYW1lPSJsaWIvdW5zeW5jcGNfdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC1wYXIuamFyI2VtIiwKICAgICAgICAgICAgIHN5bmNocm9uaXphdGlvbiA9IFN5bmNocm9uaXphdGlvblR5cGUuVU5TWU5DSFJPTklaRUQpCiAgICAgRW50aXR5TWFuYWdlciBlbTsKLSAgICAKLSAgICBARUpCKGJlYW5OYW1lID0gIlNsc2JXaXRoU3luY2hQQyIpIAorCisgICAgQEVKQihiZWFuTmFtZSA9ICJTbHNiV2l0aFN5bmNoUEMiKQogICAgIEZpbmRlciBmaW5kZXI7Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBkb1Rlc3QoKSB7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvL0ZJWE1FOiBhIHdvcmthcm91bmQgdG8gaW5pdGlhdGUgSmF2YUVFVHJhbnNhY3Rpb25JbXBsLnR4RW50aXR5TWFuYWdlck1hcCwgCisgICAgICAgICAgICAvL0ZJWE1FOiBhIHdvcmthcm91bmQgdG8gaW5pdGlhdGUgSmF2YUVFVHJhbnNhY3Rpb25JbXBsLnR4RW50aXR5TWFuYWdlck1hcCwKICAgICAgICAgICAgIC8vc28gdGhhdCB0aGUgY3VycmVudCBQQyB3aWxsIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCBUWC4KICAgICAgICAgICAgIGVtLmZpbmQoUGVyc29uLmNsYXNzLCAiVG9tIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJIGFtIGluIFRDMlNsc2JXaXRoVW5zeW5jaFBDLmRvVGVzdCIpOwogICAgICAgICAgICAgLy9leHBlY3QgZXhjZXB0aW9uIHRocm93biBmcm9tIGZpbmRlci5maW5kUGVyc29uCiAgICAgICAgICAgICBmaW5kZXIuZmluZFBlcnNvbigiVG9tIik7CkBAIC01Niw2ICs1Niw2IEBACiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9lamIvVEMzU2xzYldpdGhTeW5jaFBDLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2VqYi9UQzNTbHNiV2l0aFN5bmNoUEMuamF2YQppbmRleCAzYTc0ZTFlLi5kNDE5ZjU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2VqYi9UQzNTbHNiV2l0aFN5bmNoUEMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2VqYi9UQzNTbHNiV2l0aFN5bmNoUEMuamF2YQpAQCAtMjQsMTQgKzI0LDE0IEBACiAKIEBTdGF0ZWxlc3MKIHB1YmxpYyBjbGFzcyBUQzNTbHNiV2l0aFN5bmNoUEMgaW1wbGVtZW50cyBUZXN0ZXJ7Ci0gICAgCisKICAgICBAUGVyc2lzdGVuY2VDb250ZXh0KHVuaXROYW1lPSJsaWIvdW5zeW5jcGNfdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC1wYXIuamFyI2VtIiwKICAgICAgICAgICAgIHN5bmNocm9uaXphdGlvbiA9IFN5bmNocm9uaXphdGlvblR5cGUuU1lOQ0hST05JWkVEKQogICAgIEVudGl0eU1hbmFnZXIgZW07Ci0gICAgCi0gICAgQEVKQihiZWFuTmFtZSA9ICJUQzNTbHNiV2l0aFVuU3luY2hQQyIpIAorCisgICAgQEVKQihiZWFuTmFtZSA9ICJUQzNTbHNiV2l0aFVuU3luY2hQQyIpCiAgICAgRmluZGVyIGZpbmRlcjsKLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIGRvVGVzdCgpIHsKICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gvZWpiL1RDM1Nsc2JXaXRoVW5TeW5jaFBDLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2VqYi9UQzNTbHNiV2l0aFVuU3luY2hQQy5qYXZhCmluZGV4IDkwODU0ODEuLjQyNTRkZGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gvZWpiL1RDM1Nsc2JXaXRoVW5TeW5jaFBDLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9lamIvVEMzU2xzYldpdGhVblN5bmNoUEMuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogCiBAU3RhdGVsZXNzCiBwdWJsaWMgY2xhc3MgVEMzU2xzYldpdGhVblN5bmNoUEMgaW1wbGVtZW50cyBGaW5kZXJ7Ci0gICAgCisKICAgICBAUGVyc2lzdGVuY2VDb250ZXh0KHVuaXROYW1lPSJsaWIvdW5zeW5jcGNfdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC1wYXIuamFyI2VtIiwKICAgICAgICAgICAgIHN5bmNocm9uaXphdGlvbiA9IFN5bmNocm9uaXphdGlvblR5cGUuVU5TWU5DSFJPTklaRUQpCiAgICAgRW50aXR5TWFuYWdlciBlbTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gvZWpiL1RDNFNmc2JXaXRoVW5zeW5jaFBDLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2VqYi9UQzRTZnNiV2l0aFVuc3luY2hQQy5qYXZhCmluZGV4IDIwODRkN2QuLjI5ZDA0YzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gvZWpiL1RDNFNmc2JXaXRoVW5zeW5jaFBDLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9lamIvVEM0U2ZzYldpdGhVbnN5bmNoUEMuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogCiBAU3RhdGVmdWwKIHB1YmxpYyBjbGFzcyBUQzRTZnNiV2l0aFVuc3luY2hQQyBpbXBsZW1lbnRzIEZpbmRlcnsKLSAgICAKKwogICAgIEBQZXJzaXN0ZW5jZUNvbnRleHQodW5pdE5hbWU9ImxpYi91bnN5bmNwY190eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoLXBhci5qYXIjZW0iLAogICAgICAgICAgICAgc3luY2hyb25pemF0aW9uID0gU3luY2hyb25pemF0aW9uVHlwZS5VTlNZTkNIUk9OSVpFRCkKICAgICBFbnRpdHlNYW5hZ2VyIGVtOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9lamIvVEM0U2xzYldpdGhTeW5jaFBDLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2VqYi9UQzRTbHNiV2l0aFN5bmNoUEMuamF2YQppbmRleCBkNTBjNzBkLi4zMjY1MDdmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2VqYi9UQzRTbHNiV2l0aFN5bmNoUEMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2VqYi9UQzRTbHNiV2l0aFN5bmNoUEMuamF2YQpAQCAtMjgsMTAgKzI4LDEwIEBACiAgICAgQFBlcnNpc3RlbmNlQ29udGV4dCh1bml0TmFtZT0ibGliL3Vuc3luY3BjX3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gtcGFyLmphciNlbSIsCiAgICAgICAgICAgICBzeW5jaHJvbml6YXRpb24gPSBTeW5jaHJvbml6YXRpb25UeXBlLlNZTkNIUk9OSVpFRCkKICAgICBFbnRpdHlNYW5hZ2VyIGVtOwotICAgIAorCiAgICAgQEVKQihiZWFuTmFtZSA9ICJUQzRTZnNiV2l0aFVuc3luY2hQQyIpCiAgICAgRmluZGVyIGZpbmRlcjsKLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIGRvVGVzdCgpIHsKICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3Vuc3luY2hwY19mbHVzaC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdW5zeW5jaHBjX2ZsdXNoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODBkMDk0OC4uNDIyMTYzZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdW5zeW5jaHBjX2ZsdXNoL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdW5zeW5jaHBjX2ZsdXNoL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InVuc3luY2hwY19mbHVzaCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3Vuc3luY2hwY19mbHVzaC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91bnN5bmNocGNfZmx1c2gvYnVpbGQueG1sCmluZGV4IDc3ZTI4OGMuLjA1YmU3NmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3Vuc3luY2hwY19mbHVzaC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdW5zeW5jaHBjX2ZsdXNoL2J1aWxkLnhtbApAQCAtNDYsMTcgKzQ2LDE3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9L2xpYiIvPgotICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIgCisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1saWIuamFyIgogICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIGluY2x1ZGVzPSIqKi9QZXJzb24uY2xhc3MiPgotICAgICAgICA8L2phcj4gICAgICAgIAorICAgICAgICA8L2phcj4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LXBhci5qYXIiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGZpbGU9ImRlc2NyaXB0b3IvcGVyc2lzdGVuY2UueG1sIi8+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyp5bmNoUEMqLmNsYXNzLCoqL1Rlc3Rlci5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9UZXN0ZXIuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIHVwZGF0ZT0ieWVzIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdW5zeW5jaHBjX2ZsdXNoL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3Vuc3luY2hwY19mbHVzaC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNmVkOWZmOC4uMjAwNjY5ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdW5zeW5jaHBjX2ZsdXNoL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91bnN5bmNocGNfZmx1c2gvY2xpZW50L0NsaWVudC5qYXZhCkBAIC00MCwyMiArNDAsMjIgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSSBhbSBpbiBjbGllbnQiKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIFNMU0JXaXRoVW5zeW5jaFBDLmZsdXNoQmVmb3JlSm9pbiIpOwotICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkZsdXNoVW5zeW5jUENCZWZvcmVKb2luIiwgc0xTQldpdGhVbnN5bmNoUEMuZmx1c2hCZWZvcmVKb2luKCkgPyAKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJGbHVzaFVuc3luY1BDQmVmb3JlSm9pbiIsIHNMU0JXaXRoVW5zeW5jaFBDLmZsdXNoQmVmb3JlSm9pbigpID8KICAgICAgICAgICAgICAgICAgICAgc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgU0xTQldpdGhVbnN5bmNoUEMuZmx1c2hBZnRlckpvaW4iKTsKLSAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJGbHVzaFVuc3luY1BDQWZ0ZXJKb2luIiwgc0xTQldpdGhVbnN5bmNoUEMuZmx1c2hBZnRlckpvaW4oKSA/IAorICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkZsdXNoVW5zeW5jUENBZnRlckpvaW4iLCBzTFNCV2l0aFVuc3luY2hQQy5mbHVzaEFmdGVySm9pbigpID8KICAgICAgICAgICAgICAgICAgIHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8qIFNQRUM6IElmIHRoZSBmbHVzaCBtZXRob2QgaXMgbm90IGV4cGxpY2l0bHkgaW52b2tlZCwgdGhlIHBlcnNpc3RlbmNlIHByb3ZpZGVyIAotICAgICAgICAgICAgICogbWF5IGRlZmVyIGZsdXNoaW5nIHVudGlsIGNvbW1pdCB0aW1lIGRlcGVuZGluZyBvbiB0aGUgb3BlcmF0aW9ucyBpbnZva2VkIGFuZCAKKworICAgICAgICAgICAgLyogU1BFQzogSWYgdGhlIGZsdXNoIG1ldGhvZCBpcyBub3QgZXhwbGljaXRseSBpbnZva2VkLCB0aGUgcGVyc2lzdGVuY2UgcHJvdmlkZXIKKyAgICAgICAgICAgICAqIG1heSBkZWZlciBmbHVzaGluZyB1bnRpbCBjb21taXQgdGltZSBkZXBlbmRpbmcgb24gdGhlIG9wZXJhdGlvbnMgaW52b2tlZCBhbmQKICAgICAgICAgICAgICAqIHRoZSBmbHVzaCBtb2RlIHNldHRpbmcgaW4gZWZmZWN0LgogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgU0xTQldpdGhVbnN5bmNoUEMuQXV0b0ZsdXNoQnlQcm92aWRlciIpOwogICAgICAgICAgICAgc0xTQldpdGhVbnN5bmNoUEMuYXV0b0ZsdXNoQnlQcm92aWRlcigiVG9tMyIpOwotICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkF1dG9GbHVzaEJ5UHJvdmlkZXIiLCBzTFNCV2l0aFVuc3luY2hQQy5pc1BlcnNvbkZvdW5kKCJUb20zIikgPyAKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJBdXRvRmx1c2hCeVByb3ZpZGVyIiwgc0xTQldpdGhVbnN5bmNoUEMuaXNQZXJzb25Gb3VuZCgiVG9tMyIpID8KICAgICAgICAgICAgICAgICAgICAgc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvVGVzdCBtZXRob2QgZW5kcyIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3Vuc3luY2hwY19mbHVzaC9lamIvU0xTQldpdGhVbnN5bmNoUEMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3Vuc3luY2hwY19mbHVzaC9lamIvU0xTQldpdGhVbnN5bmNoUEMuamF2YQppbmRleCBiODBjYzNjLi5lYjUwZTg5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91bnN5bmNocGNfZmx1c2gvZWpiL1NMU0JXaXRoVW5zeW5jaFBDLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdW5zeW5jaHBjX2ZsdXNoL2VqYi9TTFNCV2l0aFVuc3luY2hQQy5qYXZhCkBAIC0zMiwxMCArMzIsMTAgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBmbHVzaEJlZm9yZUpvaW4oKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSSBhbSBpbiBmbHVzaEJlZm9yZUpvaW4iKTsKLSAgICAgICAgCisKICAgICAgICAgUGVyc29uIHAgPSBuZXcgUGVyc29uKCJUb20iKTsKICAgICAgICAgZW0ucGVyc2lzdChwKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXMgam9uaW5lZCBiZWZvcmUgZmx1c2g6ICIgKyBlbS5pc0pvaW5lZFRvVHJhbnNhY3Rpb24oKSk7CiAgICAgICAgICAgICAvL2ZsdXNoIGJlZm9yZSB0aGUgdW5zeW5jaHJvbml6ZWQgUEMgam9pbiB0cmFuc2FjdGlvbgpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmbHVzaGVkIHdpdGggbm8gZXhjZXB0aW9ucyB0aHJvd24iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBjYXRjaCAoVHJhbnNhY3Rpb25SZXF1aXJlZEV4Y2VwdGlvbiB0cmUpIHsKLSAgICAgICAgICAgIC8qIFNQRUM6IEEgcGVyc2lzdGVuY2UgY29udGV4dCBvZiB0eXBlIFN5bmNocm9uaXphdGlvblR5cGUuVU5TWU5DSFJPTklaRUQgbXVzdCAKKyAgICAgICAgICAgIC8qIFNQRUM6IEEgcGVyc2lzdGVuY2UgY29udGV4dCBvZiB0eXBlIFN5bmNocm9uaXphdGlvblR5cGUuVU5TWU5DSFJPTklaRUQgbXVzdAogICAgICAgICAgICAgICogbm90IGJlIGZsdXNoZWQgdG8gdGhlIGRhdGFiYXNlIHVubGVzcyBpdCBpcyBqb2luZWQgdG8gYSB0cmFuc2FjdGlvbgogICAgICAgICAgICAgICovCiAgICAgICAgICAgICAvL0V4cGVjdGVkIGV4Y2VwdGlvbiB0aHJvd24KQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIGZsdXNoQWZ0ZXJKb2luKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkkgYW0gaW4gZmx1c2hBZnRlckpvaW4iKTsKQEAgLTY3LDggKzY3LDggQEAKICAgICAgICAgZW0uam9pblRyYW5zYWN0aW9uKCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzIGpvbmluZWQgYmVmb3JlIGZsdXNoOiAiICsgZW0uaXNKb2luZWRUb1RyYW5zYWN0aW9uKCkpOwotICAgICAgICAgICAgLyogU1BFQzogQWZ0ZXIgdGhlIHBlcnNpc3RlbmNlIGNvbnRleHQgaGFzIGJlZW4gam9pbmVkIHRvIGEgdHJhbnNhY3Rpb24sIAotICAgICAgICAgICAgICogY2hhbmdlcyBpbiBhIHBlcnNpc3RlbmNlIGNvbnRleHQgY2FuIGJlIGZsdXNoZWQgdG8gdGhlIGRhdGFiYXNlIGV4cGxpY2l0bHkgCisgICAgICAgICAgICAvKiBTUEVDOiBBZnRlciB0aGUgcGVyc2lzdGVuY2UgY29udGV4dCBoYXMgYmVlbiBqb2luZWQgdG8gYSB0cmFuc2FjdGlvbiwKKyAgICAgICAgICAgICAqIGNoYW5nZXMgaW4gYSBwZXJzaXN0ZW5jZSBjb250ZXh0IGNhbiBiZSBmbHVzaGVkIHRvIHRoZSBkYXRhYmFzZSBleHBsaWNpdGx5CiAgICAgICAgICAgICAgKiBieSB0aGUgYXBwbGljYXRpb24KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgZW0uZmx1c2goKTsKQEAgLTc5LDE5ICs3OSwxOSBAQAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgYXV0b0ZsdXNoQnlQcm92aWRlcihTdHJpbmcgbmFtZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkkgYW0gaW4gYXV0b0ZsdXNoQnlQcm92aWRlciIpOwotICAgICAgICAKKwogICAgICAgICBQZXJzb24gcCA9IG5ldyBQZXJzb24obmFtZSk7CiAgICAgICAgIGVtLnBlcnNpc3QocCk7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXMgam9uaW5lZCBiZWZvcmUgam9pblRyYW5zYWN0aW9uOiAiICsgZW0uaXNKb2luZWRUb1RyYW5zYWN0aW9uKCkpOwogICAgICAgICAvL0pvaW4gdHJhbnNhY3Rpb24KICAgICAgICAgZW0uam9pblRyYW5zYWN0aW9uKCk7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gaXNQZXJzb25Gb3VuZChTdHJpbmcgbmFtZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkkgYW0gaW4gaXNQZXJzb25Gb3VuZCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdW5zeW5jaHBjX2ZsdXNoL2VqYi9UZXN0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3Vuc3luY2hwY19mbHVzaC9lamIvVGVzdGVyLmphdmEKaW5kZXggYzNhMDQ4Yi4uNmM3NmM0NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdW5zeW5jaHBjX2ZsdXNoL2VqYi9UZXN0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91bnN5bmNocGNfZmx1c2gvZWpiL1Rlc3Rlci5qYXZhCkBAIC0yMSwxMCArMjEsMTAgQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgVGVzdGVyIHsKICAgICBwdWJsaWMgYm9vbGVhbiBmbHVzaEJlZm9yZUpvaW4oKTsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGZsdXNoQWZ0ZXJKb2luKCk7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhdXRvRmx1c2hCeVByb3ZpZGVyKFN0cmluZyBuYW1lKTsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGlzUGVyc29uRm91bmQoU3RyaW5nIG5hbWUpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdXNlX25vbmp0YWRhdGFzb3VyY2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3VzZV9ub25qdGFkYXRhc291cmNlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDhmYmYyYy4uMzI1M2NlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdXNlX25vbmp0YWRhdGFzb3VyY2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91c2Vfbm9uanRhZGF0YXNvdXJjZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ1bnN5bmNocGNfdXNlX25vbmp0YWRhdGFzb3VyY2UiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91c2Vfbm9uanRhZGF0YXNvdXJjZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91c2Vfbm9uanRhZGF0YXNvdXJjZS9idWlsZC54bWwKaW5kZXggYzRkYTE4MC4uZTI5YTUwNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdXNlX25vbmp0YWRhdGFzb3VyY2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3VzZV9ub25qdGFkYXRhc291cmNlL2J1aWxkLnhtbApAQCAtNDYsMTcgKzQ2LDE3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9L2xpYiIvPgotICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIgCisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1saWIuamFyIgogICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIGluY2x1ZGVzPSIqKi9QZXJzb24uY2xhc3MiPgotICAgICAgICA8L2phcj4gICAgICAgIAorICAgICAgICA8L2phcj4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LXBhci5qYXIiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGZpbGU9ImRlc2NyaXB0b3IvcGVyc2lzdGVuY2UueG1sIi8+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypCZWFuLmNsYXNzLCoqL1Rlc3Rlci5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9UZXN0ZXIuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIHVwZGF0ZT0ieWVzIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdXNlX25vbmp0YWRhdGFzb3VyY2UvZWpiL1BlcnNvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdXNlX25vbmp0YWRhdGFzb3VyY2UvZWpiL1BlcnNvbi5qYXZhCmluZGV4IGFiYTZhMzQuLmM2ZmUxZWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3VzZV9ub25qdGFkYXRhc291cmNlL2VqYi9QZXJzb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91c2Vfbm9uanRhZGF0YXNvdXJjZS9lamIvUGVyc29uLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIAogICAgIEBJZAogICAgIHByaXZhdGUgaW50IGlkOwotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKIAogICAgIHB1YmxpYyBQZXJzb24oKSB7CkBAIC0zOCw3ICszOCw3IEBACiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgcmV0dXJuICJQZXJzb246IHsiICsgIihuYW1lID0gIiArIG5hbWUgKyAiKX0iOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBpbnQgZ2V0SWQoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmlkOwogICAgIH0KQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91c2Vfbm9uanRhZGF0YXNvdXJjZS9lamIvU2Z1bEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3VzZV9ub25qdGFkYXRhc291cmNlL2VqYi9TZnVsQmVhbi5qYXZhCmluZGV4IDViNDU1YjEuLmI5MmFlMmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3VzZV9ub25qdGFkYXRhc291cmNlL2VqYi9TZnVsQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3VzZV9ub25qdGFkYXRhc291cmNlL2VqYi9TZnVsQmVhbi5qYXZhCkBAIC0yOCwxOCArMjgsMTggQEAKIEBTdGF0ZWZ1bAogcHVibGljIGNsYXNzIFNmdWxCZWFuIHsKICAgICBAUGVyc2lzdGVuY2VDb250ZXh0KHVuaXROYW1lPSJsaWIvdW5zeW5jaHBjX3VzZV9ub25qdGFkYXRhc291cmNlLXBhci5qYXIjZW0iLAotICAgICAgICAgICAgdHlwZT1QZXJzaXN0ZW5jZUNvbnRleHRUeXBlLkVYVEVOREVELCAKKyAgICAgICAgICAgIHR5cGU9UGVyc2lzdGVuY2VDb250ZXh0VHlwZS5FWFRFTkRFRCwKICAgICAgICAgICAgIHN5bmNocm9uaXphdGlvbj1TeW5jaHJvbml6YXRpb25UeXBlLlVOU1lOQ0hST05JWkVEKQogICAgIEVudGl0eU1hbmFnZXIgZW07Ci0gICAgCisKICAgICBwdWJsaWMgUGVyc29uIHRlc3RVc2luZ05vbkpUQURhdGFTb3VyY2UoTWFwPFN0cmluZywgQm9vbGVhbj4gcmVzdWx0TWFwKSB7CiAgICAgICAgIFBlcnNvbiBwID0gZW0uZmluZChQZXJzb24uY2xhc3MsIDEpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkkgYW0gaW4gdGVzdFVzaW5nTm9uSlRBRGF0YVNvdXJjZSwgYW5kIHBlcnNvbiBuYW1lIGlzICIgKyBwLmdldE5hbWUoKSk7CiAgICAgICAgIHJlc3VsdE1hcC5wdXQoImVxdWFsc0N1cnJlbnROYW1lIiwgcC5nZXROYW1lKCkuZXF1YWxzKCJjdXJyZW50TmFtZSIpKTsKICAgICAgICAgcmV0dXJuIHA7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdFJvbGxCYWNrRG9lc05vdENsZWFyVW5zeW5jaFBDKFBlcnNvbiBwZXJzb24pIHsKLSAgICAgICAgIHJldHVybiAoZW0uY29udGFpbnMocGVyc29uKSAmJiBwZXJzb24uZ2V0TmFtZSgpICE9ICJuZXdOYW1lIik7IAorICAgICAgICAgcmV0dXJuIChlbS5jb250YWlucyhwZXJzb24pICYmIHBlcnNvbi5nZXROYW1lKCkgIT0gIm5ld05hbWUiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91c2Vfbm9uanRhZGF0YXNvdXJjZS9lamIvU2xlc3NCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91c2Vfbm9uanRhZGF0YXNvdXJjZS9lamIvU2xlc3NCZWFuLmphdmEKaW5kZXggZWI2NTc4Yi4uY2YzNjFjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdXNlX25vbmp0YWRhdGFzb3VyY2UvZWpiL1NsZXNzQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3VzZV9ub25qdGFkYXRhc291cmNlL2VqYi9TbGVzc0JlYW4uamF2YQpAQCAtMzEsMTQgKzMxLDE0IEBACiBpbXBvcnQgamFrYXJ0YS50cmFuc2FjdGlvbi5Vc2VyVHJhbnNhY3Rpb247CiAKIEBTdGF0ZWxlc3MKLUBFSkIobmFtZT0iZWpiL1NmdWxCZWFuIiwgCitARUpCKG5hbWU9ImVqYi9TZnVsQmVhbiIsCiBiZWFuSW50ZXJmYWNlPWNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzIucGVyc2lzdGVuY2UudW5zeW5jaHJvbml6ZWRQQy51c2Vfbm9uanRhZGF0YXNvdXJjZS5lamIuU2Z1bEJlYW4uY2xhc3MpCiBAVHJhbnNhY3Rpb25NYW5hZ2VtZW50KFRyYW5zYWN0aW9uTWFuYWdlbWVudFR5cGUuQkVBTikKIHB1YmxpYyBjbGFzcyBTbGVzc0JlYW4gaW1wbGVtZW50cyBUZXN0ZXJ7Ci0gICAgCisKICAgICBwdWJsaWMgTWFwPFN0cmluZywgQm9vbGVhbj4gZG9UZXN0KCkgewogICAgICAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiByZXN1bHRNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+KCk7Ci0gICAgICAgIAorCiAgICAgICAgIERhdGFTb3VyY2UgZHMgPSBudWxsOwogICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwogICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CkBAIC00OCwyMyArNDgsMjMgQEAKIAogICAgICAgICAgICAgdXR4ID0gKFVzZXJUcmFuc2FjdGlvbikobmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpKS5sb29rdXAoImphdmE6Y29tcC9Vc2VyVHJhbnNhY3Rpb24iKTsKICAgICAgICAgICAgIGRzID0gKERhdGFTb3VyY2UpKG5ldyBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJqYXZhOmNvbXAvRGVmYXVsdERhdGFTb3VyY2UiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB1dHguYmVnaW4oKTsKICAgICAgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBwcyA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgiVXBkYXRlIEVKQjMyX1BFUlNJU1RFTkNFX0NPTlRFWFRfUEVSU09OIHNldCBuYW1lID0gJ25ld05hbWUnIHdoZXJlIGlkID0gMSIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN0cmluZyBsb29rdXBOYW1lID0gImphdmE6Y29tcC9lbnYvZWpiL1NmdWxCZWFuIjsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpbml0Q3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBTZnVsQmVhbiBzZnVsQmVhbiA9IChTZnVsQmVhbikgaW5pdEN0eC5sb29rdXAobG9va3VwTmFtZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgUGVyc29uIHBlcnNvbiA9IHNmdWxCZWFuLnRlc3RVc2luZ05vbkpUQURhdGFTb3VyY2UocmVzdWx0TWFwKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB1dHgucm9sbGJhY2soKTsKICAgICAgICAgICAgIHV0eCA9IG51bGw7CiAgICAgICAgICAgICByZXN1bHRNYXAucHV0KCJ0ZXN0Um9sbEJhY2tEb2VzTm90Q2xlYXJVbnN5bmNoUEMiLCBzZnVsQmVhbi50ZXN0Um9sbEJhY2tEb2VzTm90Q2xlYXJVbnN5bmNoUEMocGVyc29uKSk7CiAKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvVGVzdCBtZXRob2QgZW5kcyIpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE1hcDsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Jhc2ljL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9iYXNpYy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk1YjVjZDMuLjIzMjQxMmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Jhc2ljL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvYmFzaWMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzItc2ZzYi1iYXNpYyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9InBlcnNpc3RlbmNlLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvcGVyc2lzdGVuY2UueG1sIi8+Ci0JCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvYmFzaWMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvYmFzaWMvYnVpbGQueG1sCmluZGV4IGNmYjkyNmYuLjRlNGU2ZTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Jhc2ljL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9iYXNpYy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDEyICs0NiwxMiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0ZvbyouY2xhc3MsKiovSGVsbCouY2xhc3MsKiovUyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNTksOSArNTksOSBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtcnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CkBAIC03Miw3ICs3Miw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9iYXNpYy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9iYXNpYy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZTc1YmZiNy4uNDhkMDM2OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvYmFzaWMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Jhc2ljL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjksMTcgKzI5LDE3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCi0JYXBwTmFtZSA9IGFyZ3NbMF07IAotCXN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7Ci0JQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7ICAgICAgIAotICAgICAgICBjbGllbnQuZG9UZXN0KCk7CQorICAgIGFwcE5hbWUgPSBhcmdzWzBdOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7CisgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CisgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwogICAgIH0KIApAQCAtNDcsMjYgKzQ3LDI2IEBACiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKLQl0cnkgeworICAgIHRyeSB7CiAKLQkgICAgSGVsbG8gYmVhbiA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU0ZTQiFjb20uYWNtZS5IZWxsbyIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNGU0IgdGVzdCA6ICIgKyBiZWFuLnRlc3QoIkJBUiIsIDEpKTsKKyAgICAgICAgSGVsbG8gYmVhbiA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU0ZTQiFjb20uYWNtZS5IZWxsbyIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNGU0IgdGVzdCA6ICIgKyBiZWFuLnRlc3QoIkJBUiIsIDEpKTsKICAgICAgICAgICAgIGJlYW4udGVzdFJlbW92ZSgpOwogCi0JICAgIGJlYW4gPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1NGU0IhY29tLmFjbWUuSGVsbG8iKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTRlNCIHRlc3QgZGVzdHJveWVkOiAiICsgYmVhbi50ZXN0KCJGT08iLCAxKSk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU0ZTQiB0ZXN0IGFnYWluOiAiICsgYmVhbi50ZXN0KCJCQVIiLCAyKSk7CisgICAgICAgIGJlYW4gPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1NGU0IhY29tLmFjbWUuSGVsbG8iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTRlNCIHRlc3QgZGVzdHJveWVkOiAiICsgYmVhbi50ZXN0KCJGT08iLCAxKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU0ZTQiB0ZXN0IGFnYWluOiAiICsgYmVhbi50ZXN0KCJCQVIiLCAyKSk7CiAKLQkgICAgSGVsbG8yIGJlYW4yID0gKEhlbGxvMikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU0xTQiIpOworICAgICAgICBIZWxsbzIgYmVhbjIgPSAoSGVsbG8yKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9TTFNCIik7CiAgICAgICAgICAgICBiZWFuMi50ZXN0UmVtb3ZlKCk7CiAKIAotCSAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOwogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvYmFzaWMvZWpiL0Zvb0VudGl0eS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvYmFzaWMvZWpiL0Zvb0VudGl0eS5qYXZhCmluZGV4IDJiZGQyYWIuLjhmNDRjOTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Jhc2ljL2VqYi9Gb29FbnRpdHkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9iYXNpYy9lamIvRm9vRW50aXR5LmphdmEKQEAgLTI0LDggKzI0LDggQEAKIAogQEVudGl0eQogcHVibGljIGNsYXNzIEZvb0VudGl0eSB7Ci0gICAgCi0gICAgQElkIAorCisgICAgQElkCiAgICAgQEdlbmVyYXRlZFZhbHVlCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKQEAgLTMzLDEwICszMywxMCBAQAogICAgIHB1YmxpYyBGb29FbnRpdHkoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgRm9vRW50aXR5KCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvYmFzaWMvZWpiL1NGU0IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Jhc2ljL2VqYi9TRlNCLmphdmEKaW5kZXggYTk5NmEwNS4uZTc1MzI1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvYmFzaWMvZWpiL1NGU0IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9iYXNpYy9lamIvU0ZTQi5qYXZhCkBAIC0zOSwxNiArMzksMTYgQEAKICAgICAgICAgZW0ucGVyc2lzdChmZSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9uZSBTRlNCOjppbml0KCkiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHRlc3QoU3RyaW5nIHZhbHVlLCBpbnQgY291bnQpIHRocm93cyBFSkJFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU0ZTQjo6dGVzdCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTRlNCOjp0ZXN0KCkiKTsKICAgICAgICAgUXVlcnkgcSA9IGVtLmNyZWF0ZVF1ZXJ5KCJTRUxFQ1QgZiBGUk9NIEZvb0VudGl0eSBmIFdIRVJFIGYubmFtZT06bmFtZSIpOwogICAgICAgICBxLnNldFBhcmFtZXRlcigibmFtZSIsIHZhbHVlKTsKLSAgICAgICAgamF2YS51dGlsLkxpc3QgcmVzdWx0ID0gcS5nZXRSZXN1bHRMaXN0KCk7IAotICAgICAgICBpZiAocmVzdWx0LnNpemUoKSAhPSBjb3VudCkgCisgICAgICAgIGphdmEudXRpbC5MaXN0IHJlc3VsdCA9IHEuZ2V0UmVzdWx0TGlzdCgpOworICAgICAgICBpZiAocmVzdWx0LnNpemUoKSAhPSBjb3VudCkKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkVSUk9SOiBGb3VuZCAiICsgcmVzdWx0LnNpemUoKSArICIgRm9vRW50aXR5IG5hbWVkICIgKyB2YWx1ZSArICIsIG5vdCBleHBlY3RlZCAiICsgY291bnQpOwogCi0JcmV0dXJuICJGb3VuZCAiICsgcmVzdWx0LnNpemUoKSArICIgRm9vRW50aXR5IG5hbWVkICIgKyB2YWx1ZTsKKyAgICByZXR1cm4gIkZvdW5kICIgKyByZXN1bHQuc2l6ZSgpICsgIiBGb29FbnRpdHkgbmFtZWQgIiArIHZhbHVlOwogICAgIH0KIAogICAgIEBSZW1vdmUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Jhc2ljL2VqYi9TTFNCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9iYXNpYy9lamIvU0xTQi5qYXZhCmluZGV4IDlkZjFkODYuLjY1YmZlM2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Jhc2ljL2VqYi9TTFNCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvYmFzaWMvZWpiL1NMU0IuamF2YQpAQCAtMjYsMTMgKzI2LDEzIEBACiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNMU0I6OnRlc3RSZW1vdmUoKSIpOwotCWJlYW4udGVzdCgiWFlaIiwgMCk7CisgICAgYmVhbi50ZXN0KCJYWVoiLCAwKTsKICAgICAgICAgYmVhbi50ZXN0UmVtb3ZlKCk7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgIAliZWFuLmZvbygpOwotICAgICAgICAJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlJlbW92ZWQgYmVhbiBnb3QgaW52b2tlZCEiKTsKKyAgICAgICAgICAgIGJlYW4uZm9vKCk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiUmVtb3ZlZCBiZWFuIGdvdCBpbnZva2VkISIpOwogICAgICAgICB9IGNhdGNoKE5vU3VjaEVKQkV4Y2VwdGlvbiBuc2UpIHsKLSAgICAgICAgCVN5c3RlbS5vdXQucHJpbnRsbigiU0ZTQiBoYXMgYmVlbiByZW1vdmVkLCBzdWJzZXF1ZW50IGludm9jYXRpb24gZ290IGV4Y2VwdGlvbiIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTRlNCIGhhcyBiZWVuIHJlbW92ZWQsIHN1YnNlcXVlbnQgaW52b2NhdGlvbiBnb3QgZXhjZXB0aW9uIik7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Jhc2ljL2VqYi9TdXBlclNGU0IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Jhc2ljL2VqYi9TdXBlclNGU0IuamF2YQppbmRleCA2NWQ2NzAzLi42NzU4YTc5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9iYXNpYy9lamIvU3VwZXJTRlNCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvYmFzaWMvZWpiL1N1cGVyU0ZTQi5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5hY21lOwogCiBwdWJsaWMgY2xhc3MgU3VwZXJTRlNCIHsKLQlwdWJsaWMgdm9pZCBmb28oKSB7Ci0JCXJldHVybjsKLQl9CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICByZXR1cm47CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvYnVpbGQueG1sCmluZGV4IDBmN2IxY2UuLmViYjZmMjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9idWlsZC54bWwKQEAgLTUzLDkgKzUzLDkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIHNldCBvZiBlamItZWpiMzItc2ZzYiB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgc2V0IG9mIGVqYi1lamIzMi1zZnNiIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Rlc2NyaXB0b3IvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Rlc2NyaXB0b3IvYnVpbGQucHJvcGVydGllcwppbmRleCBmMzFkMWQ1Li45NzBlZjg0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9kZXNjcmlwdG9yL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvZGVzY3JpcHRvci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMi1zZnNiLWRlc2NyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0icGVyc2lzdGVuY2UueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KLQkKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9kZXNjcmlwdG9yL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Rlc2NyaXB0b3IvYnVpbGQueG1sCmluZGV4IDBiZjY2MmQuLjk3ZTU3YmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Rlc2NyaXB0b3IvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Rlc2NyaXB0b3IvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxMiArNDYsMTIgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9Gb28qLmNsYXNzLCoqL0hlbGxvLmNsYXNzLCoqL1NGU0IuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNTksOSArNTksOSBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtcnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CkBAIC03Miw3ICs3Miw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9kZXNjcmlwdG9yL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Rlc2NyaXB0b3IvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGIwOWI2M2YuLjEyOGUzZjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Rlc2NyaXB0b3IvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Rlc2NyaXB0b3IvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOSwxNyArMjksMTcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAKLQlhcHBOYW1lID0gYXJnc1swXTsgCi0Jc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKLQlDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsgICAgICAgCi0gICAgICAgIGNsaWVudC5kb1Rlc3QoKTsJCisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKKyAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKKyAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7CiAgICAgfQogCkBAIC00NywyMiArNDcsMjIgQEAKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICBIZWxsbyBiZWFuID0gKEhlbGxvKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9TRlNCIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU0ZTQiB0ZXN0IDogIiArIGJlYW4udGVzdCgiQkFSIiwgMSkpOworICAgICAgICBIZWxsbyBiZWFuID0gKEhlbGxvKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9TRlNCIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU0ZTQiB0ZXN0IDogIiArIGJlYW4udGVzdCgiQkFSIiwgMSkpOwogICAgICAgICAgICAgYmVhbi50ZXN0UmVtb3ZlKCk7CiAKLQkgICAgYmVhbiA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU0ZTQiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNGU0IgdGVzdCBkZXN0cm95ZWQ6ICIgKyBiZWFuLnRlc3QoIkZPTyIsIDEpKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTRlNCIHRlc3QgYWdhaW46ICIgKyBiZWFuLnRlc3QoIkJBUiIsIDIpKTsKKyAgICAgICAgYmVhbiA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU0ZTQiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNGU0IgdGVzdCBkZXN0cm95ZWQ6ICIgKyBiZWFuLnRlc3QoIkZPTyIsIDEpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTRlNCIHRlc3QgYWdhaW46ICIgKyBiZWFuLnRlc3QoIkJBUiIsIDIpKTsKIAotCSAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOwogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvZGVzY3JpcHRvci9lamIvRm9vRW50aXR5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9kZXNjcmlwdG9yL2VqYi9Gb29FbnRpdHkuamF2YQppbmRleCAyYmRkMmFiLi44ZjQ0Yzk2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9kZXNjcmlwdG9yL2VqYi9Gb29FbnRpdHkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9kZXNjcmlwdG9yL2VqYi9Gb29FbnRpdHkuamF2YQpAQCAtMjQsOCArMjQsOCBAQAogCiBARW50aXR5CiBwdWJsaWMgY2xhc3MgRm9vRW50aXR5IHsKLSAgICAKLSAgICBASWQgCisKKyAgICBASWQKICAgICBAR2VuZXJhdGVkVmFsdWUKICAgICBwcml2YXRlIGludCBpZDsKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwpAQCAtMzMsMTAgKzMzLDEwIEBACiAgICAgcHVibGljIEZvb0VudGl0eShTdHJpbmcgbmFtZSkgewogICAgICAgICBzZXROYW1lKG5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBGb29FbnRpdHkoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9kZXNjcmlwdG9yL2VqYi9TRlNCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9kZXNjcmlwdG9yL2VqYi9TRlNCLmphdmEKaW5kZXggYTc0ZWYyMS4uM2Q0YzNjZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvZGVzY3JpcHRvci9lamIvU0ZTQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Rlc2NyaXB0b3IvZWpiL1NGU0IuamF2YQpAQCAtMzQsMTYgKzM0LDE2IEBACiAgICAgICAgIGVtLnBlcnNpc3QoZmUpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvbmUgU0ZTQjo6aW5pdCgpIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyB0ZXN0KFN0cmluZyB2YWx1ZSwgaW50IGNvdW50KSB0aHJvd3MgRUpCRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNGU0I6OnRlc3QoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU0ZTQjo6dGVzdCgpIik7CiAgICAgICAgIFF1ZXJ5IHEgPSBlbS5jcmVhdGVRdWVyeSgiU0VMRUNUIGYgRlJPTSBGb29FbnRpdHkgZiBXSEVSRSBmLm5hbWU9Om5hbWUiKTsKICAgICAgICAgcS5zZXRQYXJhbWV0ZXIoIm5hbWUiLCB2YWx1ZSk7Ci0gICAgICAgIGphdmEudXRpbC5MaXN0IHJlc3VsdCA9IHEuZ2V0UmVzdWx0TGlzdCgpOyAKLSAgICAgICAgaWYgKHJlc3VsdC5zaXplKCkgIT0gY291bnQpIAorICAgICAgICBqYXZhLnV0aWwuTGlzdCByZXN1bHQgPSBxLmdldFJlc3VsdExpc3QoKTsKKyAgICAgICAgaWYgKHJlc3VsdC5zaXplKCkgIT0gY291bnQpCiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJFUlJPUjogRm91bmQgIiArIHJlc3VsdC5zaXplKCkgKyAiIEZvb0VudGl0eSBuYW1lZCAiICsgdmFsdWUgKyAiLCBub3QgZXhwZWN0ZWQgIiArIGNvdW50KTsKIAotCXJldHVybiAiRm91bmQgIiArIHJlc3VsdC5zaXplKCkgKyAiIEZvb0VudGl0eSBuYW1lZCAiICsgdmFsdWU7CisgICAgcmV0dXJuICJGb3VuZCAiICsgcmVzdWx0LnNpemUoKSArICIgRm9vRW50aXR5IG5hbWVkICIgKyB2YWx1ZTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvbGlmZWN5Y2xlX2NiX3R4YXR0ci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvbGlmZWN5Y2xlX2NiX3R4YXR0ci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI1YWM5OTUuLmVkYTRhODUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2xpZmVjeWNsZV9jYl90eGF0dHIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9saWZlY3ljbGVfY2JfdHhhdHRyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEyICsxNSwxMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMyLXNmc2ItbGlmZWN5Y2xlX2NiX3R4YXR0ciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgotCQorCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2xpZmVjeWNsZV9jYl90eGF0dHIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvbGlmZWN5Y2xlX2NiX3R4YXR0ci9idWlsZC54bWwKaW5kZXggMDkzMGVlYy4uNmM4N2FmOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvbGlmZWN5Y2xlX2NiX3R4YXR0ci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvbGlmZWN5Y2xlX2NiX3R4YXR0ci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDEyICs0NiwxMiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0gqLmNsYXNzLCoqL1MqLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTU5LDkgKzU5LDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtNzIsNyArNzIsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvbGlmZWN5Y2xlX2NiX3R4YXR0ci9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9saWZlY3ljbGVfY2JfdHhhdHRyL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA1YmZhNGRiLi4xOGIxNGFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9saWZlY3ljbGVfY2JfdHhhdHRyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9saWZlY3ljbGVfY2JfdHhhdHRyL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjksMTcgKzI5LDE3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCi0gICAgICAgIGFwcE5hbWUgPSBhcmdzWzBdOyAKKyAgICAgICAgYXBwTmFtZSA9IGFyZ3NbMF07CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7Ci0gICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOyAgICAgICAKLSAgICAgICAgY2xpZW50LmRvVGVzdCgpOwkKKyAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CisgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvbGlmZWN5Y2xlX2NiX3R4YXR0ci9lamIvU0ZTQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvbGlmZWN5Y2xlX2NiX3R4YXR0ci9lamIvU0ZTQi5qYXZhCmluZGV4IDFiY2Y3MzAuLmVjNDUxNzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2xpZmVjeWNsZV9jYl90eGF0dHIvZWpiL1NGU0IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9saWZlY3ljbGVfY2JfdHhhdHRyL2VqYi9TRlNCLmphdmEKQEAgLTM0LDkgKzM0LDkgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTRlNCOjppbml0KCkiKTsKIChuZXcgRXhjZXB0aW9uKCJpbml0IikpLnByaW50U3RhY2tUcmFjZSgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgdGVzdCgpIHRocm93cyBFSkJFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU0ZTQjo6dGVzdCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTRlNCOjp0ZXN0KCkiKTsKICAgICAgICAgcmV0dXJuICJTRlNCIjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2xpZmVjeWNsZV9jYl90eGF0dHIvZWpiL1NGU0IxLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9saWZlY3ljbGVfY2JfdHhhdHRyL2VqYi9TRlNCMS5qYXZhCmluZGV4IDY4YjU0M2QuLjZmYmU2Y2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2xpZmVjeWNsZV9jYl90eGF0dHIvZWpiL1NGU0IxLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvbGlmZWN5Y2xlX2NiX3R4YXR0ci9lamIvU0ZTQjEuamF2YQpAQCAtMzMsOSArMzMsOSBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU0ZTQjE6OmluaXQoKSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgdGVzdCgpIHRocm93cyBFSkJFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU0ZTQjE6OnRlc3QoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU0ZTQjE6OnRlc3QoKSIpOwogICAgICAgICByZXR1cm4gIlNGU0IxIjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2xpZmVjeWNsZV9jYl90eGF0dHIvZWpiL1NGU0IyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9saWZlY3ljbGVfY2JfdHhhdHRyL2VqYi9TRlNCMi5qYXZhCmluZGV4IGU3YjllN2QuLjgwNTIyYTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2xpZmVjeWNsZV9jYl90eGF0dHIvZWpiL1NGU0IyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvbGlmZWN5Y2xlX2NiX3R4YXR0ci9lamIvU0ZTQjIuamF2YQpAQCAtMzMsOSArMzMsOSBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU0ZTQjI6OmluaXQoKSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgdGVzdCgpIHRocm93cyBFSkJFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU0ZTQjI6OnRlc3QoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU0ZTQjI6OnRlc3QoKSIpOwogICAgICAgICByZXR1cm4gIlNGU0IyIjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvYnVpbGQueG1sCmluZGV4IDE5ZjJiZWQuLjY3NjJiNDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3RpbWVyL2J1aWxkLnhtbApAQCAtNDgsMTMgKzQ4LDEzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi10aW1lciB0ZXN0cykKKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi10aW1lciB0ZXN0cykKIAotCQkJYW50IGdldGFsbHRpbWVycyAoRXhlY3V0ZXMgdGhlIGdldEFsbFRpbWVycyBlamItdGltZXIgdGVzdCkKLQkJCWFudCBvcGFsbG93ZWQgKEV4ZWN1dGVzIHRoZSBvcGVyYXRpb24gYWxsb3dlZCBlamItdGltZXIgdGVzdCkKKyAgICAgICAgICAgIGFudCBnZXRhbGx0aW1lcnMgKEV4ZWN1dGVzIHRoZSBnZXRBbGxUaW1lcnMgZWpiLXRpbWVyIHRlc3QpCisgICAgICAgICAgICBhbnQgb3BhbGxvd2VkIChFeGVjdXRlcyB0aGUgb3BlcmF0aW9uIGFsbG93ZWQgZWpiLXRpbWVyIHRlc3QpCiAKLQk8L2VjaG8+CisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3RpbWVyL2dldGFsbHRpbWVycy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3RpbWVyL2dldGFsbHRpbWVycy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGMwZjU5NDYuLmM5ZTg3ZGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9nZXRhbGx0aW1lcnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvZ2V0YWxsdGltZXJzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXRpbWVyLWdldGFsbHRpbWVycyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZ2xhc3NmaXNoLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9nbGFzc2Zpc2gtZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9nZXRhbGx0aW1lcnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3RpbWVyL2dldGFsbHRpbWVycy9idWlsZC54bWwKaW5kZXggZTdmYjI3OS4uMjQyMTMwYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3RpbWVyL2dldGFsbHRpbWVycy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3RpbWVyL2dldGFsbHRpbWVycy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTYwLDkgKzYwLDkgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqLypUaW1lb3V0LmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTcwLDEwICs3MCwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvZ2V0YWxsdGltZXJzL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9nZXRhbGx0aW1lcnMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGUzOWM3MDcuLjYxYjBmMGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9nZXRhbGx0aW1lcnMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9nZXRhbGx0aW1lcnMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIEluaXRpYWxDb250ZXh0IGNvbnRleHQ7CkBAIC0zMyw3ICszMyw3IEBACiAgICAgQEVKQihsb29rdXAgPSAiamF2YTphcHAvZWpiLXRpbWVyLWdldGFsbHRpbWVycy1lamIyL1N0bGVzTm9uVGltZW91dEVKQiIpCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RsZXNOb25UaW1lb3V0IHN0bGVzTm9uVGltZW91dDsKIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamIzMi10aW1lci1nZXRhbGx0aW1lcnMiKTsKIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvZ2V0YWxsdGltZXJzL2VqYi9TdGxlc05vblRpbWVvdXRFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9nZXRhbGx0aW1lcnMvZWpiL1N0bGVzTm9uVGltZW91dEVKQi5qYXZhCmluZGV4IGEwZjY0ZjAuLjVjYWEwZGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9nZXRhbGx0aW1lcnMvZWpiL1N0bGVzTm9uVGltZW91dEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9nZXRhbGx0aW1lcnMvZWpiL1N0bGVzTm9uVGltZW91dEVKQi5qYXZhCkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgICAgICAgICAgZXJyb3JzLmFkZChpbmZvKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAodHMuc2l6ZSgpICE9IGV4cGVjdGVkX2luZm9zLnNpemUoKSkgewogICAgICAgICAgICAgcHJpbnRUaW1lckluZm9zKHRzKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oInRpbWVyU3ZjLmdldEFsbFRpbWVycygpLnNpemUoKSA9ICIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9vcGFsbG93ZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9vcGFsbG93ZWQvYnVpbGQucHJvcGVydGllcwppbmRleCA3NWEwNjc5Li5kZjQxNjQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvb3BhbGxvd2VkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3RpbWVyL29wYWxsb3dlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNSArMTUsMTUgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi10aW1lci1vcGFsbG93ZWQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5lamIzMi50aW1lci5vcGFsbG93ZWQuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJnbGFzc2Zpc2gtZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2dsYXNzZmlzaC1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iYXBwY2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvb3BhbGxvd2VkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9vcGFsbG93ZWQvYnVpbGQueG1sCmluZGV4IGRiNTAyNDcuLjA3YmY3ZWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9vcGFsbG93ZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9vcGFsbG93ZWQvYnVpbGQueG1sCkBAIC0zNCwxOSArMzQsMTkgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8IS0tdGhpcyBpcyB0cmlja3kgc2luY2Ugd2ViY2xpZW50LXdhci1jb21tb24gc2ltcGx5IHBhY2thZ2UgYWxsIGNsYXNzZXMgdW5kZXIgJHt3YXIuY2xhc3Nlc30KICAgICAgICAgYW5kIHdlIG5lZWQgcmVtb3RlL2xvY2FsIGludGVyZmFjZSBpbiB0aGUgd2FyLS0+Ci0JCQkJPGNvcHkgdG9kaXI9IndhciI+Ci0gICAgCQkJCTxmaWxlc2V0IGRpcj0iZWpiIiBpbmNsdWRlcz0iKiovKlRpbWVvdXQuamF2YSwqKi8qVGltZW91dExvY2FsLmphdmEiLz4KLSAgCQkJPC9jb3B5PgorICAgICAgICAgICAgICAgIDxjb3B5IHRvZGlyPSJ3YXIiPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImVqYiIgaW5jbHVkZXM9IioqLypUaW1lb3V0LmphdmEsKiovKlRpbWVvdXRMb2NhbC5qYXZhIi8+CisgICAgICAgICAgICAgIDwvY29weT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0id2FyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGRlbGV0ZT4KLSAgICAJCQkJPGZpbGVzZXQgZGlyPSJ3YXIiIGluY2x1ZGVzPSIqKi8qVGltZW91dC5qYXZhLCoqLypUaW1lb3V0TG9jYWwuamF2YSIvPgotICAJCQk8L2RlbGV0ZT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJ3YXIiIGluY2x1ZGVzPSIqKi8qVGltZW91dC5qYXZhLCoqLypUaW1lb3V0TG9jYWwuamF2YSIvPgorICAgICAgICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InRydWUiLz4KICAgICAgICAgPC9hbnRjYWxsPgpAQCAtNjksNTggKzY5LDU4IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi8qVGltZW91dC5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKLQkgIDwhLS1ydW4tYXBwY2xpZW50ICYgcnVuLWpzZWNsaWVudCBhcmUgYmxvY2tlZCBieSBKSVJBMTk1NDYtLT4KKyAgICAgIDwhLS1ydW4tYXBwY2xpZW50ICYgcnVuLWpzZWNsaWVudCBhcmUgYmxvY2tlZCBieSBKSVJBMTk1NDYtLT4KICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0icnVuLXBvam8sIHJ1bi13ZWJhcHAsIHJ1bi1tYW5hZ2VkYmVhbiIvPgogCi0JICA8dGFyZ2V0IG5hbWU9InJ1bi1hcHBjbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KLQkgIDwvdGFyZ2V0PgotCSAgICAgIAotCSAgPHRhcmdldCBuYW1lPSJydW4tanNlY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1hcHBjbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KKyAgICAgIDwvdGFyZ2V0PgorCisgICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1qc2VjbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1jbGllbnQiPgogICAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudC50eXBlIiB2YWx1ZT0ianNlQ2xpZW50IiAvPgogICAgICAgPC9hbnRjYWxsPgotCSAgPC90YXJnZXQ+CisgICAgICA8L3RhcmdldD4KIAotCSAgPHRhcmdldCBuYW1lPSJydW4tY2xpZW50Ij4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgPHRhcmdldCBuYW1lPSJydW4tY2xpZW50Ij4KKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3Rlc3QuY2xpZW50fSI+Ci0JCQkJCSA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KKyAgICAgICAgICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICAgICA8YXJnIGxpbmU9IiR7Y2xpZW50LnR5cGV9Ii8+CiAgICAgICAgICAgIDxhcmcgbGluZT0iJHtodHRwLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KLQkgIDwvdGFyZ2V0PgorICAgICAgPC90YXJnZXQ+CiAKLQkgIDx0YXJnZXQgbmFtZT0icnVuLXBvam8iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgIDx0YXJnZXQgbmFtZT0icnVuLXBvam8iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1jbGllbnQiPgogICAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudC50eXBlIiB2YWx1ZT0icG9qbyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLQkgIDwvdGFyZ2V0PgorICAgICAgPC90YXJnZXQ+CiAKLQkgIDx0YXJnZXQgbmFtZT0icnVuLXdlYmFwcCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgPHRhcmdldCBuYW1lPSJydW4td2ViYXBwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tY2xpZW50Ij4KICAgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQudHlwZSIgdmFsdWU9IndlYmFwcCIgLz4KICAgICAgIDwvYW50Y2FsbD4KLQkgIDwvdGFyZ2V0PgorICAgICAgPC90YXJnZXQ+CiAKLQkgIDx0YXJnZXQgbmFtZT0icnVuLW1hbmFnZWRiZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1tYW5hZ2VkYmVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWNsaWVudCI+CiAgICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50LnR5cGUiIHZhbHVlPSJtYW5hZ2VkYmVhbiIgLz4KICAgICAgIDwvYW50Y2FsbD4KLQkgIDwvdGFyZ2V0PgorICAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9vcGFsbG93ZWQvZWpiL1NpbmdsZXRvblRpbWVvdXRFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9vcGFsbG93ZWQvZWpiL1NpbmdsZXRvblRpbWVvdXRFSkIuamF2YQppbmRleCAwNDUyMzRjLi4wMDg5ZmYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvb3BhbGxvd2VkL2VqYi9TaW5nbGV0b25UaW1lb3V0RUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3RpbWVyL29wYWxsb3dlZC9lamIvU2luZ2xldG9uVGltZW91dEVKQi5qYXZhCkBAIC0zMSw5ICszMSw5IEBACiBwdWJsaWMgY2xhc3MgU2luZ2xldG9uVGltZW91dEVKQiBpbXBsZW1lbnRzIFNpbmdsZXRvblRpbWVvdXRMb2NhbCwgU2luZ2xldG9uVGltZW91dCB7CiAgICAgQFJlc291cmNlCiAgICAgVGltZXJTZXJ2aWNlIHRzOwotICAgIAorCiAgICAgVGltZXIgdDsKLSAgICAKKwogICAgIHB1YmxpYyBUaW1lckhhbmRsZSBjcmVhdGVUaW1lcihTdHJpbmcgaW5mbykgewogICAgICAgICBib29sZWFuIGNyZWF0ZWQgPSBmYWxzZTsKICAgICAgICAgZm9yKFRpbWVyIHRpbWVyOnRzLmdldFRpbWVycygpKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvb3BhbGxvd2VkL3dhci9WZXJpZnlTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvb3BhbGxvd2VkL3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKaW5kZXggNGI1ODk0Yi4uZWQ1MTUxNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3RpbWVyL29wYWxsb3dlZC93YXIvVmVyaWZ5U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9vcGFsbG93ZWQvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBTdHJpbmcgdHlwZSA9IHJlcS5nZXRRdWVyeVN0cmluZygpOwogCiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7Ci0gICAgCXJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgICAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKIAogICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9idWlsZC54bWwKaW5kZXggMmMzYWY1Yi4uMGY4N2UwZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL2J1aWxkLnhtbApAQCAtNTMsMTMgKzUzLDEzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgZXF1YWxzIChFeGVjdXRlcyB0aGUgZWpiLWVqYmMgZXF1YWxzIHRlc3QpCi0JCQlhbnQgcmVkZWYgKEV4ZWN1dGVzIHRoZSBlamItZWpiYyByZWRlZiB0ZXN0KQotCQkJYW50IHNhbWVpbXBsIChFeGVjdXRlcyB0aGUgZWpiLWVqYmMgc2FtZWltcGwKKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgZXF1YWxzIChFeGVjdXRlcyB0aGUgZWpiLWVqYmMgZXF1YWxzIHRlc3QpCisgICAgICAgICAgICBhbnQgcmVkZWYgKEV4ZWN1dGVzIHRoZSBlamItZWpiYyByZWRlZiB0ZXN0KQorICAgICAgICAgICAgYW50IHNhbWVpbXBsIChFeGVjdXRlcyB0aGUgZWpiLWVqYmMgc2FtZWltcGwKIHRlc3QpCi0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamJjIHRlc3RzKQotCTwvZWNobz4KKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWVqYmMgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvZXF1YWxzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9lcXVhbHMvYnVpbGQucHJvcGVydGllcwppbmRleCA1YjIzM2RiLi4zM2UxZmNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9lcXVhbHMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9lcXVhbHMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiYy1lcXVhbHMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL2VxdWFscy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9lcXVhbHMvYnVpbGQueG1sCmluZGV4IGFiNzUwYWEuLmMwNjA5OWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL2VxdWFscy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvZXF1YWxzL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywqKi9IZWxsby5jbGFzcywqKi9IZWxsb0hvbWUuY2xhc3MsKiovKkZvbyouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjEsMTcgKzYxLDE3IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJlZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvZXF1YWxzL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL2VxdWFscy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMzk3YTU1My4uNDU0ZTkzZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvZXF1YWxzL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9lcXVhbHMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC00MSwyMiArNDEsMjIgQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1lamJjLWVxdWFsc0lEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgZWpiIHJlZiAiKTsKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lciAKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lcgogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvZm9vIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9ianJlZiA9ICIgKyBvYmpyZWYpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEZvb0hvbWUgIGhvbWUgPSAoRm9vSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cKICAgICAgICAgICAgICAgICAob2JqcmVmLCBGb29Ib21lLmNsYXNzKTsKIApAQCAtNjUsMTMgKzY1LDEzIEBACiAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgc3R1YnMgZm9yIHN1cGVyIGNsYXNzIGFyZSBhdmFpbGFibGUgdG8gY2xpZW50CiAgICAgICAgICAgICBGb29Ib21lU3VwZXIgaG9tZVN1cGVyID0gKEZvb0hvbWVTdXBlcikKICAgICAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBGb29Ib21lU3VwZXIuY2xhc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgRm9vSG9tZVN1cGVyISEiKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAKKworCiAgICAgICAgICAgICBGb28gZiA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKLSAgICAgICAgICAgIGYuY2FsbEhlbGxvKCk7ICAgICAgICAgICAgCisgICAgICAgICAgICBmLmNhbGxIZWxsbygpOwogCiAgICAgICAgICAgICBGb29TdXBlciBmMiA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgICAgICBmMi5sb3VpZSgpOwpAQCAtODIsMTAgKzgyLDEwIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCi0gICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCisgICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2hlbGxvIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9ianJlZiA9ICIgKyBvYmpyZWYpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7CkBAIC05MywzMCArOTMsMzAgQEAKIAogICAgICAgICAgICAgSGVsbG9Ib21lICBob21lID0gKEhlbGxvSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cKICAgICAgICAgICAgICAgICAob2JqcmVmLCBIZWxsb0hvbWUuY2xhc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEhlbGxvIGhyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIGhlbGxvIGVqYiIpOwogCiAgICAgICAgICAgICBTdHJpbmcgc2FpZCA9IGhyLnNheUhlbGxvKCk7CiAKICAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBoci5hc3NlcnRWYWxpZFJlbW90ZU9iamVjdCgpOwogICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7Ci0JCXN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgYXNzZXJ0VmFsaWRSZW1vdGVPYmplY3QiLCBzdGF0LlBBU1MpOwotCSAgICB9IGVsc2UgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oImFzc2VydFZhbGlkUmVtb3RlT2JqZWN0OiAiICsgcmVzdWx0KTsKLQkJc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBhc3NlcnRWYWxpZFJlbW90ZU9iamVjdCIsIHN0YXQuRkFJTCk7Ci0JICAgIH0KKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBhc3NlcnRWYWxpZFJlbW90ZU9iamVjdCIsIHN0YXQuUEFTUyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXNzZXJ0VmFsaWRSZW1vdGVPYmplY3Q6ICIgKyByZXN1bHQpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGFzc2VydFZhbGlkUmVtb3RlT2JqZWN0Iiwgc3RhdC5GQUlMKTsKKyAgICAgICAgfQogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGFzc2VydFZhbGlkUmVtb3RlT2JqZWN0IiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9lcXVhbHMvZWpiL0Zvby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvZXF1YWxzL2VqYi9Gb28uamF2YQppbmRleCA4ZjFjOWQyLi40NGI2ZjA2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9lcXVhbHMvZWpiL0Zvby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL2VxdWFscy9lamIvRm9vLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIHB1YmxpYyBpbnRlcmZhY2UgRm9vIGV4dGVuZHMgRUpCT2JqZWN0LCBGb29TdXBlciwgamF2YS5ybWkuUmVtb3RlIHsKICAgICB2b2lkIGNhbGxIZWxsbygpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgICAgU3RyaW5nIHNheUhlbGxvKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGFzc2VydFZhbGlkUmVtb3RlT2JqZWN0KFN0cmluZyBtc2cpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvZXF1YWxzL2VqYi9Gb29CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9lcXVhbHMvZWpiL0Zvb0JlYW4uamF2YQppbmRleCA1NTVmZTQ4Li4wNjQ2OTk3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9lcXVhbHMvZWpiL0Zvb0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9lcXVhbHMvZWpiL0Zvb0JlYW4uamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTMzLDExICszMywxMSBAQAogICAgIHB1YmxpYyBGb29CZWFuKCkge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmVhbjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CZWFuOjplamJDcmVhdGUgISEiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCXRoaXMuc2MgPSBzYzsKKyAgICB0aGlzLnNjID0gc2M7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgbG91aWUoKSB7IFN5c3RlbS5vdXQucHJpbnRsbigibHVpZ2kgbHVpZ2kiKTsgfQpAQCAtNjksMjIgKzY5LDIyIEBACiAgICAgICAgICAgICBGb29Mb2NhbEhvbWUgZm9vTG9jYWxIb21lID0gKEZvb0xvY2FsSG9tZSkKICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL21lbG9jYWwiKTsKICAgICAgICAgICAgIEZvb0xvY2FsIG1lTG9jYWwgPSBmb29Mb2NhbEhvbWUuY3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBlamIgcmVmIGhlbGxvICIpOwotICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9oZWxsbyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvYmpyZWYgPSAiICsgb2JqcmVmKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsb0hvbWUgIGhvbWUgPSAoSGVsbG9Ib21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdwogICAgICAgICAgICAgICAgIChvYmpyZWYsIEhlbGxvSG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKICAgICAgICAgICAgIEhlbGxvIGhyID0gaG9tZS5jcmVhdGUoKTsKIAogCiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBoZWxsbyBlamIiKTsKIAogICAgICAgICAgICAgaHIuc2F5SGVsbG8oKTsKQEAgLTk4LDEwICs5OCwxMCBAQAogICAgICAgICAgICAgSGVsbG9Mb2NhbEhvbWUgIGxvY2FsSG9tZSA9IChIZWxsb0xvY2FsSG9tZSkKICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2hlbGxvbG9jYWwiKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsb0xvY2FsIGhsID0gbG9jYWxIb21lLmNyZWF0ZSgpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgaGVsbG8gZWpiIik7CiAKICAgICAgICAgICAgIGhsLnNheUhlbGxvKCk7CkBAIC0xMTIsNyArMTEyLDcgQEAKICAgICAgICAgICAgIC8vCiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBlamIgcmVmIGhlbGxvICIpOwotICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgICAgICBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2hlbGxvMiIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvYmpyZWYgPSAiICsgb2JqcmVmKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwpAQCAtMTIwLDEyICsxMjAsMTIgQEAKIAogICAgICAgICAgICAgSGVsbG9Ib21lICBob21lMiA9IChIZWxsb0hvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93CiAgICAgICAgICAgICAgICAgKG9ianJlZiwgSGVsbG9Ib21lLmNsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsbyBocjIgPSBob21lMi5jcmVhdGUoKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIGhlbGxvIGVqYiIpOwogCiAgICAgICAgICAgICBTdHJpbmcgc2FpZCA9IGhyMi5zYXlIZWxsbygpOwpAQCAtMTM3LDEwICsxMzcsMTAgQEAKICAgICAgICAgICAgIEhlbGxvTG9jYWxIb21lICBsb2NhbEhvbWUyID0gKEhlbGxvTG9jYWxIb21lKQogICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvaGVsbG9sb2NhbDIiKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsb0xvY2FsIGhsMiA9IGxvY2FsSG9tZTIuY3JlYXRlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBoZWxsbzIgZWpiIik7CiAKICAgICAgICAgICAgIFN0cmluZyBzYWlkTG9jYWwgPSBobDIuc2F5SGVsbG8oKTsKQEAgLTE1NSw3ICsxNTUsNyBAQAogICAgICAgICAgICAgfQogCiAKLSAgICAgICAgICAgIGNvbS5zdW4uZWpiLkNvbnRhaW5lciBjb250ID0gCisgICAgICAgICAgICBjb20uc3VuLmVqYi5Db250YWluZXIgY29udCA9CiAgICAgICAgICAgICAgICAgKChjb20uc3VuLmVqYi5jb250YWluZXJzLkVKQkNvbnRleHRJbXBsKSBzYykuZ2V0Q29udGFpbmVyKCk7CiAKICAgICAgICAgICAgIC8vCkBAIC0yODEsMjIgKzI4MSwyMiBAQAogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgZWpiIHJlZiBoZWxsbyAiKTsKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lciAKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lcgogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvaGVsbG8iKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib2JqcmVmID0gIiArIG9ianJlZik7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSGVsbG9Ib21lICBob21lID0gKEhlbGxvSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cKICAgICAgICAgICAgICAgICAob2JqcmVmLCBIZWxsb0hvbWUuY2xhc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7CiAgICAgICAgICAgICBIZWxsbyBociA9IGhvbWUuY3JlYXRlKCk7CiAKLQkgICAgcmV0dXJuIChoci5hc3NlcnRWYWxpZFJlbW90ZU9iamVjdCgpID09IG51bGwpCi0JCT8gdHJ1ZTogZmFsc2U7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXgpOwotCX0KKyAgICAgICAgcmV0dXJuIChoci5hc3NlcnRWYWxpZFJlbW90ZU9iamVjdCgpID09IG51bGwpCisgICAgICAgID8gdHJ1ZTogZmFsc2U7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXgpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGFzc2VydFZhbGlkUmVtb3RlT2JqZWN0KCkgIHsKQEAgLTMwNiwxMCArMzA2LDEwIEBACiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2hlbGxvMiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsb0hvbWUgIGhvbWUgPSAoSGVsbG9Ib21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdwogICAgICAgICAgICAgICAgIChvYmpyZWYsIEhlbGxvSG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSGVsbG8gaHIyID0gaG9tZS5jcmVhdGUoKTsKIAogICAgICAgICAgICAgaHIyLnNheUhlbGxvKCk7CkBAIC0zMTcsNyArMzE3LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic3VjY2Vzc2Z1bGx5IGludm9rZWQgc2F5SGVsbG8oKSBlamIyIik7CiAKICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBjb20uc3VuLmVqYi5Db250YWluZXIgY29udCA9IAorICAgICAgICAgICAgY29tLnN1bi5lamIuQ29udGFpbmVyIGNvbnQgPQogICAgICAgICAgICAgICAgICgoY29tLnN1bi5lamIuY29udGFpbmVycy5FSkJDb250ZXh0SW1wbCkgc2MpLmdldENvbnRhaW5lcigpOwogCiAgICAgICAgICAgICAvLwpAQCAtMzM2LDggKzMzNiw4IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGNvbnQuYXNzZXJ0VmFsaWRSZW1vdGVPYmplY3QoaG9tZSk7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHN0ciA9ICJDb21wYXJpc29uIG9mIChlamJvIGFuZCBob21lKSBzaG91bGQgaGF2ZSBmYWlsZWQiOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oc3RyKTsKLQkJcmV0dXJuIHN0cjsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHN0cik7CisgICAgICAgIHJldHVybiBzdHI7CiAgICAgICAgICAgICB9IGNhdGNoKGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhc3NlcnRWYWxpZFJlbW90ZU9iamVjdDogU3VjY2Vzc2Z1bGx5IGNhdWdodCBleHBlY3RlZCBleGNlcHRpb246IiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KQEAgLTM0NSw4ICszNDUsOCBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBjb250LmFzc2VydFZhbGlkUmVtb3RlT2JqZWN0KG51bGwpOwogICAgICAgICAgICAgICAgIFN0cmluZyBzdHIgPSAiQ29tcGFyaXNvbiBvZiAoZWpibyBhbmQgbnVsbCkgc2hvdWxkIGhhdmUgZmFpbGVkIjsKLQkJU3lzdGVtLm91dC5wcmludGxuKHN0cik7Ci0JCXJldHVybiBzdHI7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzdHIpOworICAgICAgICByZXR1cm4gc3RyOwogICAgICAgICAgICAgfSBjYXRjaChqYWthcnRhLmVqYi5FSkJFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXNzZXJ0VmFsaWRSZW1vdGVPYmplY3Q6IFN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhwZWN0ZWQgZXhjZXB0aW9uOiIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CkBAIC0zNTQsOCArMzU0LDggQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgY29udC5hc3NlcnRWYWxpZFJlbW90ZU9iamVjdCh0aGlzKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgc3RyID0gIkNvbXBhcmlzb24gb2YgKGVqYm8gYW5kIGJlYW4pIHNob3VsZCBoYXZlIGZhaWxlZCI7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihzdHIpOwotCQlyZXR1cm4gc3RyOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc3RyKTsKKyAgICAgICAgcmV0dXJuIHN0cjsKICAgICAgICAgICAgIH0gY2F0Y2goamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFzc2VydFZhbGlkUmVtb3RlT2JqZWN0OiBTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4cGVjdGVkIGV4Y2VwdGlvbjoiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQpAQCAtMzYzLDE4ICszNjMsMTggQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgY29udC5hc3NlcnRWYWxpZFJlbW90ZU9iamVjdChocjIpOwogICAgICAgICAgICAgICAgIFN0cmluZyBzdHIgPSAiQ29tcGFyaXNvbiBvZiAoZWpibyBhbmQgZWpib19mcm9tX2RpZmZfY29udGFpbmVyKSBzaG91bGQgaGF2ZSBmYWlsZWQiOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oc3RyKTsKLQkJcmV0dXJuIHN0cjsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHN0cik7CisgICAgICAgIHJldHVybiBzdHI7CiAgICAgICAgICAgICB9IGNhdGNoKGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhc3NlcnRWYWxpZFJlbW90ZU9iamVjdDogU3VjY2Vzc2Z1bGx5IGNhdWdodCBleHBlY3RlZCBleGNlcHRpb246IiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KIAogCi0JICAgIHJldHVybiBudWxsOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuICJDYXVnaHQgdW5leHBlY3RlZCBleGNlcHRpb246ICIgKyBleC50b1N0cmluZygpOwotCX0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gIkNhdWdodCB1bmV4cGVjdGVkIGV4Y2VwdGlvbjogIiArIGV4LnRvU3RyaW5nKCk7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL2VxdWFscy9lamIvRm9vSG9tZVN1cGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9lcXVhbHMvZWpiL0Zvb0hvbWVTdXBlci5qYXZhCmluZGV4IGFiYjRkZDUuLjQxNTJlNjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL2VxdWFscy9lamIvRm9vSG9tZVN1cGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvZXF1YWxzL2VqYi9Gb29Ib21lU3VwZXIuamF2YQpAQCAtMjAsNSArMjAsNSBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIAogcHVibGljIGludGVyZmFjZSBGb29Ib21lU3VwZXIgZXh0ZW5kcyBqYXZhLnJtaS5SZW1vdGUgewotICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL2VxdWFscy9lamIvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL2VxdWFscy9lamIvSGVsbG8uamF2YQppbmRleCBiNGViOTRmLi5jZWRhNmQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9lcXVhbHMvZWpiL0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvZXF1YWxzL2VqYi9IZWxsby5qYXZhCkBAIC0yNyw2ICsyNyw2IEBACiAgICAgU3RyaW5nIHNheUhlbGxvKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIFN0cmluZyBhc3NlcnRWYWxpZFJlbW90ZU9iamVjdCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9yZWRlZi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvcmVkZWYvYnVpbGQucHJvcGVydGllcwppbmRleCBmYWE2OTQzLi4zMGRkZDM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9yZWRlZi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL3JlZGVmL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYmMtcmVkZWYiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL3JlZGVmL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL3JlZGVmL2J1aWxkLnhtbAppbmRleCAyMDU1ZGEwLi4wNGMyNzJkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9yZWRlZi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvcmVkZWYvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzLCoqLypGb28qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYxLDEwICs2MSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9yZWRlZi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9yZWRlZi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNGE4Y2UxOC4uZTg4ZTVhNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvcmVkZWYvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL3JlZGVmL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzcsMzEgKzM3LDMxIEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItZWpiYy1yZWRlZklEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgZWpiIHJlZiAiKTsKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lciAKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lcgogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvZm9vIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9ianJlZiA9ICIgKyBvYmpyZWYpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEZvb0hvbWUgIGhvbWUgPSAoRm9vSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cKICAgICAgICAgICAgICAgICAob2JqcmVmLCBGb29Ib21lLmNsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIAorCisKICAgICAgICAgICAgIEZvbyBmID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBpbnZva2UgbWV0aG9kIG9uIHRoZSBFSkIKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgZWpiIik7CiAgICAgICAgICAgICBmLmNhbGxIZWxsbygpOwpAQCAtNzUsOCArNzUsOCBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvcmVkZWYvZWpiL0Zvb0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL3JlZGVmL2VqYi9Gb29CZWFuLmphdmEKaW5kZXggNzE1ODBjOS4uMjhiNTY1YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvcmVkZWYvZWpiL0Zvb0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9yZWRlZi9lamIvRm9vQmVhbi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMzMsMTEgKzMzLDExIEBACiAgICAgcHVibGljIEZvb0JlYW4oKSB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CZWFuOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0JlYW46OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JdGhpcy5zYyA9IHNjOworICAgIHRoaXMuc2MgPSBzYzsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvcmVkZWYvZWpiL0Zvb0hvbWVTdXBlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvcmVkZWYvZWpiL0Zvb0hvbWVTdXBlci5qYXZhCmluZGV4IGViMDUzMGMuLjY0MmJkOWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL3JlZGVmL2VqYi9Gb29Ib21lU3VwZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9yZWRlZi9lamIvRm9vSG9tZVN1cGVyLmphdmEKQEAgLTIzLDYgKzIzLDYgQEAKIAogCiBwdWJsaWMgaW50ZXJmYWNlIEZvb0hvbWVTdXBlciBleHRlbmRzIFJlbW90ZSB7Ci0gICAKKwogICAgIEZvbyBjcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBDcmVhdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9zYW1laW1wbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvc2FtZWltcGwvYnVpbGQucHJvcGVydGllcwppbmRleCBmZGNlOTM5Li4wNDNiYjI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9zYW1laW1wbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL3NhbWVpbXBsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYmMtc2FtZWltcGwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL3NhbWVpbXBsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL3NhbWVpbXBsL2J1aWxkLnhtbAppbmRleCA2ZTczZmQ4Li44Y2E3ZTRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9zYW1laW1wbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvc2FtZWltcGwvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzLCoqLypGb28uY2xhc3MsKiovKkZvb0hvbWUuY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjEsMTAgKzYxLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL3NhbWVpbXBsL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL3NhbWVpbXBsL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA5YjVmM2U4Li42Y2RjNDRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9zYW1laW1wbC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvc2FtZWltcGwvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zNywzMSArMzcsMzEgQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1lamJjLXNhbWVpbXBsSUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBlamIgcmVmICIpOwotICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9mb28iKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib2JqcmVmID0gIiArIG9ianJlZik7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgRm9vSG9tZSAgaG9tZSA9IChGb29Ib21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdwogICAgICAgICAgICAgICAgIChvYmpyZWYsIEZvb0hvbWUuY2xhc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgCisKKwogICAgICAgICAgICAgRm9vIGYgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIGludm9rZSBtZXRob2Qgb24gdGhlIEVKQgogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBlamIiKTsKICAgICAgICAgICAgIGYuY2FsbEhlbGxvKCk7CkBAIC03Myw4ICs3Myw4IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9zYW1laW1wbC9lamIvRm9vQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvc2FtZWltcGwvZWpiL0Zvb0JlYW4uamF2YQppbmRleCA0YjcwNWVlLi5iNjFiNzM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9zYW1laW1wbC9lamIvRm9vQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL3NhbWVpbXBsL2VqYi9Gb29CZWFuLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC0zMywxMSArMzMsMTEgQEAKICAgICBwdWJsaWMgRm9vQmVhbigpIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0JlYW46OmVqYkNyZWF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmVhbjo6ZWpiQ3JlYXRlICEhIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQl0aGlzLnNjID0gc2M7CisgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oKSB7CkBAIC02MiwyMSArNjIsMjEgQEAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIAogICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIGVqYiByZWYgaGVsbG8gIik7Ci0gICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCisgICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2hlbGxvIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9ianJlZiA9ICIgKyBvYmpyZWYpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEhlbGxvSG9tZSAgaG9tZSA9IChIZWxsb0hvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93CiAgICAgICAgICAgICAgICAgKG9ianJlZiwgSGVsbG9Ib21lLmNsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsbyBociA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBoZWxsbyBlamIiKTsKIAogICAgICAgICAgICAgaHIuc2F5SGVsbG8oKTsKQEAgLTkwLDEwICs5MCwxMCBAQAogICAgICAgICAgICAgSGVsbG9Mb2NhbEhvbWUgIGxvY2FsSG9tZSA9IChIZWxsb0xvY2FsSG9tZSkKICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2hlbGxvbG9jYWwiKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsb0xvY2FsIGhsID0gbG9jYWxIb21lLmNyZWF0ZSgpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgaGVsbG8gZWpiIik7CiAKICAgICAgICAgICAgIGhsLnNheUhlbGxvKCk7CkBAIC0xMDQsMTkgKzEwNCwxOSBAQAogICAgICAgICAgICAgLy8KIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIGVqYiByZWYgaGVsbG8gIik7Ci0gICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCisgICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKICAgICAgICAgICAgIG9ianJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvaGVsbG8yIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9ianJlZiA9ICIgKyBvYmpyZWYpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEhlbGxvSG9tZSAgaG9tZTIgPSAoSGVsbG9Ib21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdwogICAgICAgICAgICAgICAgIChvYmpyZWYsIEhlbGxvSG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSGVsbG8gaHIyID0gaG9tZTIuY3JlYXRlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBoZWxsbyBlamIiKTsKIAogICAgICAgICAgICAgU3RyaW5nIHNhaWQgPSBocjIuc2F5SGVsbG8oKTsKQEAgLTEyOCwxMCArMTI4LDEwIEBACiAgICAgICAgICAgICBIZWxsb0xvY2FsSG9tZSAgbG9jYWxIb21lMiA9IChIZWxsb0xvY2FsSG9tZSkKICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2hlbGxvbG9jYWwyIik7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSGVsbG9Mb2NhbCBobDIgPSBsb2NhbEhvbWUyLmNyZWF0ZSgpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgaGVsbG8yIGVqYiIpOwogCiAgICAgICAgICAgICBTdHJpbmcgc2FpZExvY2FsID0gaGwyLnNheUhlbGxvKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvYnVpbGQueG1sCmluZGV4IDZjMWVhMzIuLjQ2YWJjZDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvYnVpbGQueG1sCkBAIC00NSwxMSArNDUsMTEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBqbXNlamIgKEV4ZWN1dGVzIHRoZSBlamItam1zIGptc2VqYiB0ZXN0KQotCQkJYW50IGptc2VqYjIgKEV4ZWN1dGVzIHRoZSBlamItam1zIGptc2VqYjIgdGVzdCkKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWptcyB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGptc2VqYiAoRXhlY3V0ZXMgdGhlIGVqYi1qbXMgam1zZWpiIHRlc3QpCisgICAgICAgICAgICBhbnQgam1zZWpiMiAoRXhlY3V0ZXMgdGhlIGVqYi1qbXMgam1zZWpiMiB0ZXN0KQorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItam1zIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvam1zZWpiL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2ptc2VqYi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDYyNzM5ZGEuLmEyZmE4NWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvam1zZWpiL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2ptcy9qbXNlamIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItam1zLWptc2VqYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2ptcy9qbXNlamIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2ptcy9qbXNlamIvYnVpbGQueG1sCmluZGV4IDBjZGM2YTYuLjg1YTNjMzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvam1zZWpiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2ptc2VqYi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovSGVsbG8qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzLCoqL0hlbGxvSG9tZS5jbGFzcywqKi9IZWxsby5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzMsMTQgKzczLDE0IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2ptc2VqYi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2ptc2VqYi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNTg5YzRmMy4uOGNjMjFiYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2ptcy9qbXNlamIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvam1zZWpiL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTMzLDExICszMywxMSBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLW1kYi1qbXNlamJJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgU3RyaW5nIGVqYk5hbWVzW10gPSB7ICJlamJzL2hlbGxvYm10IiwgImVqYnMvaGVsbG9jbXQiIH07CkBAIC00NSw1NiArNDUsNTYgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBlamJOYW1lcy5sZW5ndGg7IGkrKyApIHsKICAgICAgICAgICAgICAgICBlamJOYW1lID0gZWpiTmFtZXNbaV07Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgZWpiIHJlZiAiICsgZWpiTmFtZSk7Ci0gICAgICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lcgogICAgICAgICAgICAgICAgIC8vIGphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJoZWxsb0FwcC9IZWxsbyIpOwogICAgICAgICAgICAgICAgIGphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52LyIrZWpiTmFtZSk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS1lamIgc3R1Yi0tLSIgKyBvYmpyZWYuZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLWVqYiBjbGFzc25hbWUtLS0iICsgb2JqcmVmLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLUhlbGxvSG9tZS0tLSIgKyBIZWxsb0hvbWUuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBIZWxsb0hvbWUgIGhvbWUgPSAoSGVsbG9Ib21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpyZWYsIEhlbGxvSG9tZS5jbGFzcyk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAKKworCiAgICAgICAgICAgICAgICAgSGVsbG8gaHIgPSBob21lLmNyZWF0ZShoZWxsb1N0cik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBpbnZva2UgbWV0aG9kIG9uIHRoZSBFSkIKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFza2luZyBlamIgdG8gc2VuZCBhIG1lc3NhZ2UiKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgbXNnVGV4dCA9ICJMb29rIG1hLCBJIHJlY2VpdmVkIGEgSk1TIG1lc3NhZ2UhISEiOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gaHIuc2VuZE1lc3NhZ2UxKG1zZ1RleHQpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzdWx0IGZyb20gc2VuZE1lc3NhZ2UgPSAiICsgcmVzdWx0KTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFza2luZyBlamIgdG8gcmVjZWl2ZSBhIG1lc3NhZ2UiKTsKICAgICAgICAgICAgICAgICBoci5yZWNlaXZlTWVzc2FnZTEoKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gaHIuc2VuZE1lc3NhZ2UyKG1zZ1RleHQpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzdWx0IGZyb20gc2VuZE1lc3NhZ2UgPSAiICsgcmVzdWx0KTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFza2luZyBlamIgdG8gcmVjZWl2ZSBhIG1lc3NhZ2UiKTsKICAgICAgICAgICAgICAgICBoci5yZWNlaXZlTWVzc2FnZTIoKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gaHIuc2VuZE1lc3NhZ2UzKG1zZ1RleHQpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzdWx0IGZyb20gc2VuZE1lc3NhZ2UgPSAiICsgcmVzdWx0KTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFza2luZyBlamIgdG8gcmVjZWl2ZSBhIG1lc3NhZ2UiKTsKICAgICAgICAgICAgICAgICBoci5yZWNlaXZlTWVzc2FnZTMoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvKiAgY29tbWVudCBvdXQgCisKKyAgICAgICAgICAgICAgICAvKiAgY29tbWVudCBvdXQKICAgICAgICAgICAgICAgICBoci5zZW5kTWVzc2FnZTRQYXJ0MShtc2dUZXh0KTsKICAgICAgICAgICAgICAgICBoci5zZW5kTWVzc2FnZTRQYXJ0Mihtc2dUZXh0KTsKIAogICAgICAgICAgICAgICAgIGhyLnJlY2VpdmVNZXNzYWdlNFBhcnQxKCk7CiAgICAgICAgICAgICAgICAgaHIucmVjZWl2ZU1lc3NhZ2U0UGFydDIoKTsKICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgaHIuc2VuZEFuZFJlY2VpdmVNZXNzYWdlKCk7CiAKICAgICAgICAgICAgICAgICBoci5zZW5kQW5kUmVjZWl2ZVJvbGxiYWNrKCk7CkBAIC0xMDMsMTUgKzEwMywxNSBAQAogICAgICAgICAgICAgICAgIGhyLnNlbmRNZXNzYWdlUm9sbGJhY2sobXNnVGV4dCArICJyb2xsYmFjayIpOwogICAgICAgICAgICAgICAgIGhyLnJlY2VpdmVNZXNzYWdlUm9sbGJhY2soKTsKIAotICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJqbXNlamIgIiArIGVqYk5hbWUsIAorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJqbXNlamIgIiArIGVqYk5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJqbXNlamIgIiArIGVqYk5hbWUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgZmluYWwgc3RhdGljIFN0cmluZyBoZWxsb1N0ciA9ICJIZWxsbyBXb3JsZCEiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2ptcy9qbXNlamIvZWpiL0hlbGxvQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2ptcy9qbXNlamIvZWpiL0hlbGxvQmVhbi5qYXZhCmluZGV4IDdlN2Y0ZDYuLjlkMDM5YTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvam1zZWpiL2VqYi9IZWxsb0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2ptc2VqYi9lamIvSGVsbG9CZWFuLmphdmEKQEAgLTE2LDcgKzE2LDcgQEAKIAogcGFja2FnZSBjb20uc3VuLnMxYXNkZXYuZWpiLmptcy5qbXNlamI7CiAKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC0zNSw3ICszNSw3IEBACiAgICAgcHVibGljIEhlbGxvQmVhbigpIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoU3RyaW5nIHN0cikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYkNyZWF0ZSAhISIpOwogICAgICAgICB0aGlzLnN0ciA9IHN0cjsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgY29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwpAQCAtNDcsMTMgKzQ3LDEzIEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb0VKQiBoYXMgQ09OVEFJTkVSIE1BTkFHRUQgVFgiKTsKICAgICAgICAgICAgIH0KIAotCSAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L3VzZXIiKTsKLQkgICAgRG91YmxlIGQgPSAoRG91YmxlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9udW1iZXIiKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8gRUpCIC0gc2F5aW5nIGhlbGxvIHRvICIgKyBuYW1lICsgCi0JCQkgICAgIixudW1iZXIgaXMgIiArIGQpOworICAgICAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L3VzZXIiKTsKKyAgICAgICAgRG91YmxlIGQgPSAoRG91YmxlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9udW1iZXIiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8gRUpCIC0gc2F5aW5nIGhlbGxvIHRvICIgKyBuYW1lICsKKyAgICAgICAgICAgICAgICAiLG51bWJlciBpcyAiICsgZCk7CiAgICAgICAgICAgICBxdWV1ZSA9IChRdWV1ZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL1F1ZXVlTmFtZSIpOwogCi0gICAgICAgICAgICBxY0ZhY3RvcnkgPSAKKyAgICAgICAgICAgIHFjRmFjdG9yeSA9CiAgICAgICAgICAgICAgICAgKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9NeVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkiKTsKIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CkBAIC0xMDAsNyArMTAwLDcgQEAKICAgICAgICAgICAgICAgICBzYy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5jb21taXQoKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gTm93IG1ha2Ugc3VyZSB0aGF0IGV2ZW4gdGhvdWdoIHRoZSBnbG9iYWwgdHJhbnNhY3Rpb24gCisgICAgICAgICAgICAvLyBOb3cgbWFrZSBzdXJlIHRoYXQgZXZlbiB0aG91Z2ggdGhlIGdsb2JhbCB0cmFuc2FjdGlvbgogICAgICAgICAgICAgLy8gaXMgb3ZlciwgY2FsbGluZyBjb21taXQgcmVzdWx0cyBpbiBhbiBleGNlcHRpb24uCiAgICAgICAgICAgICAvLyBzaW5jZSB3ZSdyZSBpbiBhbiBlamIuCiAgICAgICAgICAgICB0cnkgewpAQCAtMTUyLDcgKzE1Miw3IEBACiAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goamFrYXJ0YS5qbXMuSk1TRXhjZXB0aW9uIGoyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSk1TRXhjZXB0aW9uKCJHb3Qgd3Jvbmcgam1zZXhjZXB0aW9uIik7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24uZ2V0TWVzc2FnZUxpc3RlbmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSk1TRXhjZXB0aW9uCkBAIC0xODYsNyArMTg2LDcgQEAKICAgICAgICAgICAgIFF1ZXVlU2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5jcmVhdGVRdWV1ZVNlc3Npb24odHJ1ZSwgMCk7CiAKICAgICAgICAgICAgIHNlbmRNZXNzYWdlSW50ZXJuYWwoc2Vzc2lvbiwgbXNnKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzZXNzaW9uLmNsb3NlKCk7CiAKICAgICAgICAgICAgIGlmKCBiZWFuTWFuYWdlZFR4ICkgewpAQCAtMjEzLDcgKzIxMyw3IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQ3JlYXRlIGEgc2Vzc2lvbiBhbmQgc3RvcmUgaXQgYXMgcGFydCBvZiAKKyAgICAgKiBDcmVhdGUgYSBzZXNzaW9uIGFuZCBzdG9yZSBpdCBhcyBwYXJ0IG9mCiAgICAgICogdGhlIGVqYidzIHN0YXRlLiAgVGhlbiBzZW5kIGEgbWVzc2FnZS4KICAgICAgKiBDb3JyZXNwb25kaW5nIHJlY3YgbWV0aG9kIHdpbGwgY2xvc2UgdGhlIHNlc3Npb24uCiAgICAgICovCkBAIC0yNDcsNyArMjQ3LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBuZSkge30KICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1zZzsKICAgICB9CiAKQEAgLTI1OSw3ICsyNTksNyBAQAogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBjb25uZWN0aW9uID0gcWNGYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9IGNvbm5lY3Rpb24uY3JlYXRlUXVldWVTZXNzaW9uKHRydWUsIDApOwogCiAgICAgICAgICAgICBpZiggYmVhbk1hbmFnZWRUeCApIHsKQEAgLTMwMiw3ICszMDIsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjb25uZWN0aW9uID0gcWNGYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9IGNvbm5lY3Rpb24uY3JlYXRlUXVldWVTZXNzaW9uKHRydWUsIDApOwogCiAgICAgICAgICAgICBjb25uZWN0aW9uLnN0YXJ0KCk7CkBAIC0zNzQsNyArMzc0LDcgQEAKICAgICAvKioKICAgICAgKiBTZW5kIGEgbWVzc2FnZSBidXQgZG9uJ3QgY29tbWl0LiAgc2VuZE1lc3NhZ2VQYXJ0MgogICAgICAqIHdpbGwgY29tbWl0LiAgVGhpcyBtZXRob2Qgd2lsbCBvbmx5IHdvcmsgd2l0aAotICAgICAqIHdoZW4gYmVhbiBoYXMgYmVhbiBtYW5hZ2VkIHR4LiAgCisgICAgICogd2hlbiBiZWFuIGhhcyBiZWFuIG1hbmFnZWQgdHguCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBzZW5kTWVzc2FnZTRQYXJ0MShTdHJpbmcgbXNnKSB0aHJvd3MgRUpCRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKQEAgLTM4Niw3ICszODYsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzYXZlZENvbm5lY3Rpb24gPSBxY0ZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIHNhdmVkU2Vzc2lvbiA9IHNhdmVkQ29ubmVjdGlvbi5jcmVhdGVRdWV1ZVNlc3Npb24odHJ1ZSwgMCk7CiAgICAgICAgICAgICBzZW5kTWVzc2FnZUludGVybmFsKHNhdmVkU2Vzc2lvbiwgbXNnKTsKIApAQCAtNDA0LDcgKzQwNCw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gbmUpIHt9CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgICAgIHJldHVybiBtc2c7CiAgICAgfQogCkBAIC00MzQsNyArNDM0LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBuZSkge30KICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1zZzsKICAgICB9CiAKQEAgLTQ0Nyw5ICs0NDcsOSBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBzZW5kTWVzc2FnZVJvbGxiYWNrIik7CiAgICAgICAgICAgICBpZiggYmVhbk1hbmFnZWRUeCApIHsKICAgICAgICAgICAgICAgICBzYy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwotICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNhdmVkQ29ubmVjdGlvbiA9IHFjRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgc2F2ZWRTZXNzaW9uID0gc2F2ZWRDb25uZWN0aW9uLmNyZWF0ZVF1ZXVlU2Vzc2lvbih0cnVlLCAwKTsKICAgICAgICAgICAgIHNlbmRNZXNzYWdlSW50ZXJuYWwoc2F2ZWRTZXNzaW9uLCBtc2cpOwogCkBAIC00NzMsNyArNDczLDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBuZSkge30KICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1zZzsKICAgICB9CiAKQEAgLTQ4OSw3ICs0ODksNyBAQAogICAgICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gcmVjZWl2ZXIucmVjZWl2ZU5vV2FpdCgpOwogCiAgICAgICAgICAgICBpZiggbWVzc2FnZSAhPSBudWxsICkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlNob3VsZG4ndCBoYXZlIGdvdHRlbiBtc2cgIiArIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlNob3VsZG4ndCBoYXZlIGdvdHRlbiBtc2cgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgRElETidUIHJlY2VpdmUgbXNnIik7CkBAIC01MTAsNyArNTEwLDcgQEAKICAgICAvKioKICAgICAgKiBSZWNlaXZlIGEgbWVzc2FnZSBidXQgZG9uJ3QgY29tbWl0LiAgcmVjdk1lc3NhZ2VQYXJ0MgogICAgICAqIHdpbGwgY29tbWl0LiAgVGhpcyBtZXRob2Qgd2lsbCBvbmx5IHdvcmsgd2l0aAotICAgICAqIHdoZW4gYmVhbiBoYXMgYmVhbiBtYW5hZ2VkIHR4LiAgCisgICAgICogd2hlbiBiZWFuIGhhcyBiZWFuIG1hbmFnZWQgdHguCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVjZWl2ZU1lc3NhZ2U0UGFydDEoKSB0aHJvd3MgRUpCRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKQEAgLTUyMCw3ICs1MjAsNyBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic2tpcHBpbmcgcmVjdk1lc3NhZ2U0UGFydDEgYi9jIG9mIENNVCIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzYXZlZENvbm5lY3Rpb24uc3RhcnQoKTsKICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHJlY3ZNZXNzYWdlSW50ZXJuYWwoc2F2ZWRTZXNzaW9uKTsKIApAQCAtNTM4LDkgKzUzOCw5IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gbmUpIHt9CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IHRoZSByZWNlaXZlIHRoYXQgd2FzIGRvbmUgaW4gcmVjdk1lc3NhZ2VQYXJ0MQogICAgICAqLwpAQCAtNTg2LDIxICs1ODYsMjEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29ubmVjdGlvbiA9IHFjRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLmNyZWF0ZVF1ZXVlU2Vzc2lvbih0cnVlLCAwKTsKIAogICAgICAgICAgICAgU3RyaW5nIG1zZ1RleHQgPSAic2VuZGFuZHJlY2VpdmUiOwogICAgICAgICAgICAgc2VuZE1lc3NhZ2VJbnRlcm5hbChzZXNzaW9uLCBtc2dUZXh0KTsKICAgICAgICAgICAgIHNjLmdldFVzZXJUcmFuc2FjdGlvbigpLmNvbW1pdCgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW50IG1lc3NhZ2UgIiArIG1zZ1RleHQpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vCiAKICAgICAgICAgICAgIGNvbm5lY3Rpb24uc3RhcnQoKTsKICAgICAgICAgICAgIHNjLmdldFVzZXJUcmFuc2FjdGlvbigpLmJlZ2luKCk7CiAgICAgICAgICAgICByZWN2TWVzc2FnZUludGVybmFsKHNlc3Npb24pOwogICAgICAgICAgICAgc2MuZ2V0VXNlclRyYW5zYWN0aW9uKCkuY29tbWl0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdHJ5IHsKQEAgLTYzMSw3ICs2MzEsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjb25uZWN0aW9uID0gcWNGYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9IGNvbm5lY3Rpb24uY3JlYXRlUXVldWVTZXNzaW9uKHRydWUsIDApOwogCiAgICAgICAgICAgICBTdHJpbmcgbXNnVGV4dCA9ICJzZW5kYW5kcmVjZWl2ZXJvbGxiYWNrIjsKQEAgLTY4NSw3ICs2ODUsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JdGhpcy5zYyA9IHNjOworICAgIHRoaXMuc2MgPSBzYzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2ptc2VqYjIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvam1zZWpiMi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDkyMjkzMmUuLjE0NTEyNzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvam1zZWpiMi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvam1zZWpiMi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1qbXMtam1zZWpiMiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2ptcy9qbXNlamIyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvam1zZWpiMi9idWlsZC54bWwKaW5kZXggZjIyYzI0Zi4uMzNmYmIwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2ptcy9qbXNlamIyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2ptc2VqYjIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0hlbGxvKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywqKi9IZWxsb0hvbWUuY2xhc3MsKiovSGVsbG8uY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTczLDE0ICs3MywxNCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2ptcy9qbXNlamIyL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvam1zZWpiMi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZDI5ODEyOS4uMmQ3ZmRmZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2ptcy9qbXNlamIyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2ptc2VqYjIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzMsNDMgKzMzLDQzIEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItbWRiLWptc2VqYjJJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgU3RyaW5nIGVqYk5hbWUgPSAiZWpicy9oZWxsb2JtdCI7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgZWpiIHJlZiAiICsgZWpiTmFtZSk7Ci0gICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCisgICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKIAogICAgICAgICAgICAgamF2YS5sYW5nLk9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvIitlamJOYW1lKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tZWpiIHN0dWItLS0iICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLWVqYiBzdHViLS0tIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqcmVmLmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLWVqYiBjbGFzc25hbWUtLS0iICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLWVqYiBjbGFzc25hbWUtLS0iICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpyZWYuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS1IZWxsb0hvbWUtLS0iICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLUhlbGxvSG9tZS0tLSIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlbGxvSG9tZS5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEhlbGxvSG9tZSAgaG9tZSA9IChIZWxsb0hvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93CiAgICAgICAgICAgICAgICAgKG9ianJlZiwgSGVsbG9Ib21lLmNsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsbyBociA9IGhvbWUuY3JlYXRlKGhlbGxvU3RyKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBpbnZva2UgbWV0aG9kIG9uIHRoZSBFSkIKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXNraW5nIGVqYiB0byBzZW5kIGEgbWVzc2FnZSIpOwogICAgICAgICAgICAgU3RyaW5nIG1zZ1RleHQgPSAidGhpcyBpcyB0aGUgZWpiLWptcy1qbXNlamIyIHRlc3QiOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBoci5zZW5kTWVzc2FnZU5vQ29tbWl0UGFydDEobXNnVGV4dCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3VsdCBmcm9tIHNlbmRNZXNzYWdlID0gIiArIHJlc3VsdCk7CiAKQEAgLTgyLDggKzgyLDggQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiam1zZWpiMiAiICsgZWpiTmFtZSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBmaW5hbCBzdGF0aWMgU3RyaW5nIGhlbGxvU3RyID0gIkhlbGxvIFdvcmxkISI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2ptc2VqYjIvZWpiL0hlbGxvQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2ptcy9qbXNlamIyL2VqYi9IZWxsb0JlYW4uamF2YQppbmRleCAyMGFlZWViLi5lYzQ3N2M3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2ptc2VqYjIvZWpiL0hlbGxvQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvam1zZWpiMi9lamIvSGVsbG9CZWFuLmphdmEKQEAgLTE2LDcgKzE2LDcgQEAKIAogcGFja2FnZSBjb20uc3VuLnMxYXNkZXYuZWpiLmptcy5qbXNlamIyOwogCi1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMzQsNyArMzQsNyBAQAogICAgIHB1YmxpYyBIZWxsb0JlYW4oKSB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKFN0cmluZyBzdHIpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJDcmVhdGUgISEiKTsKICAgICAgICAgdGhpcy5zdHIgPSBzdHI7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKQEAgLTQzLDcgKzQzLDcgQEAKIAogICAgICAgICAgICAgcXVldWUgPSAoUXVldWUpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9RdWV1ZU5hbWUiKTsKIAotICAgICAgICAgICAgcWNGYWN0b3J5ID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpIAorICAgICAgICAgICAgcWNGYWN0b3J5ID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpCiAgICAgICAgICAgICAgICAgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL015UXVldWVDb25uZWN0aW9uRmFjdG9yeSIpOwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBOT1RFIDogbGVhdmUgY29ubmVjdGlvbiBhbmQgc2Vzc2lvbiBvcGVuLiAgdGhleSB3aWxsIGJlIAorICAgICAgICAvLyBOT1RFIDogbGVhdmUgY29ubmVjdGlvbiBhbmQgc2Vzc2lvbiBvcGVuLiAgdGhleSB3aWxsIGJlCiAgICAgICAgIC8vIHJlLWVubGlzdGVkIHdoZW4gdGhlIG5leHQgYnVzaW5lc3MgbWV0aG9kIGlzIGNhbGxlZCBzaW5jZQogICAgICAgICAvLyB0aGUgdHJhbnNhY3Rpb24gaXMgc3RpbGwgYWN0aXZlLgogCkBAIC0xMjIsNyArMTIyLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBzZW5kTWVzc2FnZUludGVybmFsKFF1ZXVlU2Vzc2lvbiBzZXNzaW9uLCBTdHJpbmcgbXNnKSAKKyAgICBwcml2YXRlIHZvaWQgc2VuZE1lc3NhZ2VJbnRlcm5hbChRdWV1ZVNlc3Npb24gc2Vzc2lvbiwgU3RyaW5nIG1zZykKICAgICAgICAgdGhyb3dzIEpNU0V4Y2VwdGlvbiB7CiAgICAgICAgIC8vIENyZWF0ZSBhIG1lc3NhZ2UgcHJvZHVjZXIuCiAgICAgICAgIFF1ZXVlU2VuZGVyIHNlbmRlciA9IHNlc3Npb24uY3JlYXRlU2VuZGVyKHF1ZXVlKTsKQEAgLTEzMyw3ICsxMzMsNyBAQAogICAgICAgICBzZW5kZXIuc2VuZChtZXNzYWdlKTsKICAgICB9CiAKLSAgICBwcml2YXRlIE1lc3NhZ2UgcmVjdk1lc3NhZ2VJbnRlcm5hbChRdWV1ZVNlc3Npb24gc2Vzc2lvbikgCisgICAgcHJpdmF0ZSBNZXNzYWdlIHJlY3ZNZXNzYWdlSW50ZXJuYWwoUXVldWVTZXNzaW9uIHNlc3Npb24pCiAgICAgICAgIHRocm93cyBKTVNFeGNlcHRpb24gewogICAgICAgICAvLyBDcmVhdGUgYSBtZXNzYWdlIGNvbnN1bWVyCiAgICAgICAgIFF1ZXVlUmVjZWl2ZXIgcmVjZWl2ZXIgPSBzZXNzaW9uLmNyZWF0ZVJlY2VpdmVyKHF1ZXVlKTsKQEAgLTE0Myw3ICsxNDMsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JdGhpcy5zYyA9IHNjOworICAgIHRoaXMuc2MgPSBzYzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvYnVpbGQueG1sCmluZGV4IDRmZGE5ZTQuLjRiMTRiMTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvYnVpbGQueG1sCkBAIC0zMCw5ICszMCw5IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCI+CiAKLSAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbXQiLz4gCi0gICAgICAgPGFudGNhbGwgdGFyZ2V0PSJtc2diZWFuIi8+IAotICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2luZ2xldG9uIi8+IAorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNtdCIvPgorICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibXNnYmVhbiIvPgorICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2luZ2xldG9uIi8+CiAKICAgICA8L3RhcmdldD4KIApAQCAtNTUsMTIgKzU1LDEyIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgY210IChFeGVjdXRlcyB0aGUgZWpiLW1kYiBjbXQgdGVzdCkKLQkJCWFudCBtc2diZWFuIChFeGVjdXRlcyB0aGUgZWpiLW1kYiBtc2diZWFuIHRlc3QpCi0JCQlhbnQgc2luZ2xldG9uIChFeGVjdXRlcyB0aGUgZWpiLW1kYiBzaW5nbGV0b24gdGVzdCkKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLW1kYiB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGNtdCAoRXhlY3V0ZXMgdGhlIGVqYi1tZGIgY210IHRlc3QpCisgICAgICAgICAgICBhbnQgbXNnYmVhbiAoRXhlY3V0ZXMgdGhlIGVqYi1tZGIgbXNnYmVhbiB0ZXN0KQorICAgICAgICAgICAgYW50IHNpbmdsZXRvbiAoRXhlY3V0ZXMgdGhlIGVqYi1tZGIgc2luZ2xldG9uIHRlc3QpCisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1tZGIgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9jbXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvY210L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMmJiNDNiOS4uY2FhODk0MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9jbXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL2NtdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1tZGItY210Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL2NtdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL2NtdC9idWlsZC54bWwKaW5kZXggNWI5YjIwNy4uZGZmZmYyOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9jbXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvY210L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc1LDE0ICs3NSwxNCBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9jbXQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9jbXQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGVjMDMxZTAuLmNiYjhkMDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvY210L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL2NtdC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTUxLDcgKzUxLDcgQEAKIAogICAgIHByaXZhdGUgaW50IG51bU1lc3NhZ2VzID0gMjsKICAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgCisKICAgICAgICAgaWYoIGFyZ3MubGVuZ3RoID09IDEgKSB7CiAgICAgICAgICAgICBudW1NZXNzYWdlcyA9IG5ldyBJbnRlZ2VyKGFyZ3NbMF0pLmludFZhbHVlKCk7CiAgICAgICAgIH0KQEAgLTYwLDkgKzYwLDkgQEAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzZXR1cCgpOwotCSAgICBkb1Rlc3QoImptcy9lamJfbWRiX2NtdF9JblF1ZXVlIiwgbnVtTWVzc2FnZXMpOwotCSAgICAvLyBAQEAgbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYgc3VwcG9ydAotCSAgICAvLyBvVGVzdCgiamF2YTpjb21wL2Vudi9qbXMvTXNnQmVhblF1ZXVlIiwgbnVtTWVzc2FnZXMpOworICAgICAgICBkb1Rlc3QoImptcy9lamJfbWRiX2NtdF9JblF1ZXVlIiwgbnVtTWVzc2FnZXMpOworICAgICAgICAvLyBAQEAgbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYgc3VwcG9ydAorICAgICAgICAvLyBvVGVzdCgiamF2YTpjb21wL2Vudi9qbXMvTXNnQmVhblF1ZXVlIiwgbnVtTWVzc2FnZXMpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImNtdCBtYWluIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaChUaHJvd2FibGUgdCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImNtdCBtYWluIiwgc3RhdC5GQUlMKTsKQEAgLTc0LDMxICs3NCwzMSBAQAogCiAgICAgcHVibGljIHZvaWQgc2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgY29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAKLSAgICAgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxdWV1ZUNvbkZhY3RvcnkgPSAKKworICAgICAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHF1ZXVlQ29uRmFjdG9yeSA9CiAgICAgICAgICAgICAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkgY29udGV4dC5sb29rdXAKICAgICAgICAgICAgICgiamF2YTpjb21wL2Vudi9Gb29DRiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgcXVldWVDb24gPSBxdWV1ZUNvbkZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7CiAKICAgICAgICAgcXVldWVTZXNzaW9uID0gcXVldWVDb24uY3JlYXRlUXVldWVTZXNzaW9uCi0gICAgICAgICAgICAoZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7IAorICAgICAgICAgICAgKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwogCiAgICAgICAgIC8vIFByb2R1Y2VyIHdpbGwgYmUgc3BlY2lmaWVkIHdoZW4gYWN0dWFsIG1zZyBpcyBzZW50LgotICAgICAgICBxdWV1ZVNlbmRlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVTZW5kZXIobnVsbCk7ICAgICAgICAKKyAgICAgICAgcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKG51bGwpOwogCiAgICAgICAgIHF1ZXVlQ29uLnN0YXJ0KCk7CiAKICAgICAgICAgLyoKLSAgICAgICAgVG9waWNDb25uZWN0aW9uRmFjdG9yeSB0b3BpY0NvbkZhY3RvcnkgPSAKKyAgICAgICAgVG9waWNDb25uZWN0aW9uRmFjdG9yeSB0b3BpY0NvbkZhY3RvcnkgPQogICAgICAgICAgICAgKFRvcGljQ29ubmVjdGlvbkZhY3RvcnkpIGNvbnRleHQubG9va3VwCiAgICAgICAgICAgICAoImptcy9Ub3BpY0Nvbm5lY3Rpb25GYWN0b3J5Iik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgdG9waWNDb24gPSB0b3BpY0NvbkZhY3RvcnkuY3JlYXRlVG9waWNDb25uZWN0aW9uKCk7CiAKLSAgICAgICAgdG9waWNTZXNzaW9uID0gCisgICAgICAgIHRvcGljU2Vzc2lvbiA9CiAgICAgICAgICAgICB0b3BpY0Nvbi5jcmVhdGVUb3BpY1Nlc3Npb24oZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAvLyBQcm9kdWNlciB3aWxsIGJlIHNwZWNpZmllZCB3aGVuIGFjdHVhbCBtc2cgaXMgcHVibGlzaGVkLgogICAgICAgICB0b3BpY1B1Ymxpc2hlciA9IHRvcGljU2Vzc2lvbi5jcmVhdGVQdWJsaXNoZXIobnVsbCk7CiAgICAgICAgICovCkBAIC0xMTQsMTggKzExNCwxOCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgc2VuZE1zZ3MoamFrYXJ0YS5qbXMuUXVldWUgcXVldWUsIE1lc3NhZ2UgbXNnLCBpbnQgbnVtKSAKKyAgICBwdWJsaWMgdm9pZCBzZW5kTXNncyhqYWthcnRhLmptcy5RdWV1ZSBxdWV1ZSwgTWVzc2FnZSBtc2csIGludCBudW0pCiAgICAgICAgIHRocm93cyBKTVNFeGNlcHRpb24gewogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYXQgdGltZSAiICsgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwogICAgICAgICAgICAgcXVldWVTZW5kZXIuc2VuZChxdWV1ZSwgbXNnKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYXQgdGltZSAiICsgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgc2VuZE1zZ3MoVG9waWMgdG9waWMsIE1lc3NhZ2UgbXNnLCBpbnQgbnVtKSAKKyAgICBwdWJsaWMgdm9pZCBzZW5kTXNncyhUb3BpYyB0b3BpYywgTWVzc2FnZSBtc2csIGludCBudW0pCiAgICAgICAgIHRocm93cyBKTVNFeGNlcHRpb24gewogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKICAgICAgICAgICAgIC8vICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQdWJsaXNoaW5nIG1lc3NhZ2UgIiArIGkgKyAiIHRvICIgKyBxdWV1ZSk7CkBAIC0xMzQsMTEgKzEzNCwxMSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyBkZXN0TmFtZSwgaW50IG51bSkgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyBkZXN0TmFtZSwgaW50IG51bSkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgRGVzdGluYXRpb24gZGVzdCA9IChEZXN0aW5hdGlvbikgY29udGV4dC5sb29rdXAoZGVzdE5hbWUpOwotICAgICAgICAgICAgCisKICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gcXVldWVTZXNzaW9uLmNyZWF0ZVRleHRNZXNzYWdlKGRlc3ROYW1lKTsKICAgICAgICAgLy8gICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHRvcGljU2Vzc2lvbi5jcmVhdGVUZXh0TWVzc2FnZShkZXN0TmFtZSk7CiAgICAgICAgIG1lc3NhZ2Uuc2V0Qm9vbGVhblByb3BlcnR5KCJmbGFnIiwgdHJ1ZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL2NtdC9lamIvTWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvY210L2VqYi9NZXNzYWdlQmVhbi5qYXZhCmluZGV4IDAxNTRlMjIuLjYxZWEzYzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvY210L2VqYi9NZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvY210L2VqYi9NZXNzYWdlQmVhbi5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiBpbXBvcnQgamFrYXJ0YS5lamIuKjsKIGltcG9ydCBqYXZheC5uYW1pbmcuKjsKIAotcHVibGljIGNsYXNzIE1lc3NhZ2VCZWFuICAKK3B1YmxpYyBjbGFzcyBNZXNzYWdlQmVhbgogICAgIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTY2LDE2ICs2NiwxNiBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYykgewotCXRoaXMubWRjID0gbWRjOwotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWVzc2FnZURyaXZlbkVKQjo6c2V0TWVzc2FnZURyaXZlbkNvbnRleHQgISEiKTsKKyAgICB0aGlzLm1kYyA9IG1kYzsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VEcml2ZW5FSkI6OnNldE1lc3NhZ2VEcml2ZW5Db250ZXh0ICEhIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBNZXNzYWdlRHJpdmVuRUpCOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VEcml2ZW5FSkI6OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VEcml2ZW5FSkI6OmVqYlJlbW92ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWVzc2FnZURyaXZlbkVKQjo6ZWpiUmVtb3ZlICEhIik7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL21zZ2JlYW4vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvbXNnYmVhbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQyZDkwZmUuLjAyZGQ3ODkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvbXNnYmVhbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvbXNnYmVhbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1tZGItbXNnYmVhbiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9tc2diZWFuL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvbXNnYmVhbi9idWlsZC54bWwKaW5kZXggMzIyMTUzYy4uZTg1YTU2ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9tc2diZWFuL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL21zZ2JlYW4vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KQEAgLTc2LDE3ICs3NiwxNyBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9tc2diZWFuL2NsaWVudC9IZWxsb0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9tc2diZWFuL2NsaWVudC9IZWxsb0NsaWVudC5qYXZhCmluZGV4IDEwNTIwNjkuLjliNDA0Y2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvbXNnYmVhbi9jbGllbnQvSGVsbG9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL21zZ2JlYW4vY2xpZW50L0hlbGxvQ2xpZW50LmphdmEKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRkFMU0UsICAvLyBqZGJjCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkZBTFNFIH0gfTsgIC8vIHJvbGxiYWNrCiAKLSAgICBPYmplY3RbXVtdIG9uZVBoYXNlQ29tbWl0VGVzdHMgPSB7IAorICAgIE9iamVjdFtdW10gb25lUGhhc2VDb21taXRUZXN0cyA9IHsKICAgICAgICAgeyAiam1zL3F1ZXVlX2NtdCIsICAgQkZBTFNFLCBCRkFMU0UsIEJGQUxTRSB9LAogICAgICAgICB7ICJqbXMvdG9waWNfY210IiwgICBCRkFMU0UsIEJGQUxTRSwgQkZBTFNFIH0sCiAKQEAgLTc5LDcgKzc5LDcgQEAKICAgICAgICAgeyAiam1zL3RvcGljX2JtdCIsICAgQkZBTFNFLCBCVFJVRSwgIEJGQUxTRSB9LAogICAgIH07CiAKLSAgICBPYmplY3RbXVtdIHR3b1BoYXNlQ29tbWl0VGVzdHMgPSB7IAorICAgIE9iamVjdFtdW10gdHdvUGhhc2VDb21taXRUZXN0cyA9IHsKICAgICAgICAgeyAiam1zL3F1ZXVlX2NtdCIsICAgQkZBTFNFLCBCVFJVRSwgIEJGQUxTRSB9LAogICAgICAgICB7ICJqbXMvdG9waWNfY210IiwgICBCRkFMU0UsIEJUUlVFLCAgQkZBTFNFIH0sCiAKQEAgLTkyLDIxICs5MiwyMSBAQAogICAgICAgICB7ICJqbXMvcXVldWVfY210IiwgICBCVFJVRSwgIEJUUlVFLCAgQkZBTFNFIH0sCiAgICAgICAgIHsgImptcy90b3BpY19jbXQiLCAgIEJUUlVFLCAgQlRSVUUsICBCRkFMU0UgfSwKICAgICB9OwotICAgIAotICAgIE9iamVjdFtdW10gcm9sbGJhY2tUZXN0cyA9IHsgCisKKyAgICBPYmplY3RbXVtdIHJvbGxiYWNrVGVzdHMgPSB7CiAKICAgICAgICAgeyAiam1zL3F1ZXVlX2NtdCIsICAgQlRSVUUsICBCRkFMU0UsICBCVFJVRSB9LAogICAgICAgICB7ICJqbXMvdG9waWNfY210IiwgICBCVFJVRSwgIEJGQUxTRSwgIEJUUlVFIH0sCi0JCisKICAgICAgICAgeyAiam1zL3F1ZXVlX2NtdCIsICAgQlRSVUUsICBCVFJVRSwgICBCVFJVRSB9LAogICAgICAgICB7ICJqbXMvdG9waWNfY210IiwgICBCVFJVRSwgIEJUUlVFLCAgIEJUUlVFIH0sCi0JCisKICAgICAgICAgeyAiam1zL3F1ZXVlX2NtdCIsICAgQkZBTFNFLCBCRkFMU0UsICBCVFJVRSB9LAogICAgICAgICB7ICJqbXMvdG9waWNfY210IiwgICBCRkFMU0UsIEJGQUxTRSwgIEJUUlVFIH0sCi0JCisKICAgICAgICAgeyAiam1zL3F1ZXVlX2NtdCIsICAgQlRSVUUsICBCRkFMU0UsICBCVFJVRSB9LAotICAgICAgICB7ICJqbXMvdG9waWNfY210IiwgICBCVFJVRSwgIEJGQUxTRSwgIEJUUlVFIH0sICAgICAgICAKLSAgICAgICAgCisgICAgICAgIHsgImptcy90b3BpY19jbXQiLCAgIEJUUlVFLCAgQkZBTFNFLCAgQlRSVUUgfSwKKwogICAgIH07CiAKIApAQCAtMTE5LDEwICsxMTksMTAgQEAKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKICAgICAgICAgaW50IG51bUl0ZXIgPSAxMDsKLSAgICAgICAgaWYoYXJncy5sZW5ndGggPT0gMCB8fCAoYXJncy5sZW5ndGggPiAwICYmIAorICAgICAgICBpZihhcmdzLmxlbmd0aCA9PSAwIHx8IChhcmdzLmxlbmd0aCA+IDAgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzBdLmVxdWFscygiMXBjIiApKSApIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUnVubmluZyAxIHBoYXNlIGNvbW1pdCBtc2diZWFuIHRlc3RzIik7Ci0gICAgICAgICAgICBudW1JdGVyID0gKGFyZ3MubGVuZ3RoID49IDIpID8gCisgICAgICAgICAgICBudW1JdGVyID0gKGFyZ3MubGVuZ3RoID49IDIpID8KICAgICAgICAgICAgICAgICBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMV0pIDogbnVtSXRlcjsKICAgICAgICAgICAgIGRvVGVzdHMob25lUGhhc2VDb21taXRUZXN0cywgbnVtSXRlcik7CiAgICAgICAgIH0gZWxzZSBpZiggYXJnc1swXS5lcXVhbHMoIjJwYyIpICkgewpAQCAtMTQzLDIyICsxNDMsMjIgQEAKICAgICAgICAgICAgIGRvVGVzdHMob25lUGhhc2VDb21taXRUZXN0cywgbnVtSXRlcik7CiAgICAgICAgICAgICBkb1Rlc3RzKHR3b1BoYXNlQ29tbWl0VGVzdHMsIG51bUl0ZXIpOwogICAgICAgICAgICAgZG9UZXN0cyhsb2NhbFR4VGVzdHMsIG51bUl0ZXIpOwotCSAgICBkb1Rlc3RzKHJvbGxiYWNrVGVzdHMsIG51bUl0ZXIpOworICAgICAgICBkb1Rlc3RzKHJvbGxiYWNrVGVzdHMsIG51bUl0ZXIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdXNlclNwZWNpZmllZFR4VGVzdFswXVswXSA9IGFyZ3NbMF07CiAgICAgICAgICAgICBudW1JdGVyID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUnVubmluZyAiICsgdXNlclNwZWNpZmllZFR4VGVzdFswXVswXSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk51bSBpdGVyYXRpb25zID0gIiArIG51bUl0ZXIpOwogICAgICAgICAgICAgaWYoIGFyZ3MubGVuZ3RoID09IDMgKSB7Ci0gICAgICAgICAgICAgICAgdXNlclNwZWNpZmllZFR4VGVzdFswXVsxXSA9IAorICAgICAgICAgICAgICAgIHVzZXJTcGVjaWZpZWRUeFRlc3RbMF1bMV0gPQogICAgICAgICAgICAgICAgICAgICBuZXcgQm9vbGVhbihhcmdzWzJdLmluZGV4T2YoInJlcGx5IikgIT0gLTEpOwotICAgICAgICAgICAgICAgIHVzZXJTcGVjaWZpZWRUeFRlc3RbMF1bMl0gPSAKKyAgICAgICAgICAgICAgICB1c2VyU3BlY2lmaWVkVHhUZXN0WzBdWzJdID0KICAgICAgICAgICAgICAgICAgICAgbmV3IEJvb2xlYW4oKGFyZ3NbMl0uaW5kZXhPZigiamRiYyIpICE9IC0xKSk7Ci0gICAgICAgICAgICAgICAgdXNlclNwZWNpZmllZFR4VGVzdFswXVszXSA9IAorICAgICAgICAgICAgICAgIHVzZXJTcGVjaWZpZWRUeFRlc3RbMF1bM10gPQogICAgICAgICAgICAgICAgICAgICBuZXcgQm9vbGVhbigoYXJnc1syXS5pbmRleE9mKCJyb2xsYmFjayIpICE9IC0xKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkb1Rlc3RzKHVzZXJTcGVjaWZpZWRUeFRlc3QsIG51bUl0ZXIpOwotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE2Nyw3ICsxNjcsNyBAQAogICAgICAgICBpZiAobnVtSXRlciA+IDIwKSB7CiAgICAgICAgICAgICBUSU1FT1VUID0gVElNRU9VVCAqIChpbnQpKG51bUl0ZXIgLyAxMCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBTdHJpbmcgZGVzdE5hbWUgPSAiamF2YTpjb21wL2Vudi8iICsgKFN0cmluZykgdGVzdHNbaV1bMF07CiAgICAgICAgICAgICBib29sZWFuIGV4cGVjdFJlcGx5ID0gKChCb29sZWFuKXRlc3RzW2ldWzFdKS5ib29sZWFuVmFsdWUoKTsKQEAgLTE3OCwxMSArMTc4LDExIEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHNldHVwKCk7CiAgICAgICAgICAgICAgICAgZG9UZXN0KGRlc3ROYW1lLCBudW1JdGVyLCBleHBlY3RSZXBseSwgamRiYywgcm9sbGJhY2spOwotICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3QsIHN0YXQuUEFTUyk7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3QsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGNhdGNoKFRocm93YWJsZSB0KSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgdW5leHBlY3RlZCBleGNlcHRpb24gIiArIHQpOwogICAgICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdCwgc3RhdC5GQUlMKTsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdCwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICAgY2xlYW51cCgpOwpAQCAtMTkzLDM3ICsxOTMsMzcgQEAKIAogICAgIHB1YmxpYyB2b2lkIHNldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgCi0gICAgICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcXVldWVDb25GYWN0b3J5ID0gCisKKyAgICAgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxdWV1ZUNvbkZhY3RvcnkgPQogICAgICAgICAgICAgKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpIGNvbnRleHQubG9va3VwCiAgICAgICAgICAgICAoImphdmE6Y29tcC9lbnYvam1zL1FDRiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgcXVldWVDb24gPSBxdWV1ZUNvbkZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7CiAKICAgICAgICAgcXVldWVTZXNzaW9uID0gcXVldWVDb24uY3JlYXRlUXVldWVTZXNzaW9uCi0gICAgICAgICAgICAoZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7IAorICAgICAgICAgICAgKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwogCiAgICAgICAgIC8vIFByb2R1Y2VyIHdpbGwgYmUgc3BlY2lmaWVkIHdoZW4gYWN0dWFsIG1zZyBpcyBzZW50LgotICAgICAgICBxdWV1ZVNlbmRlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVTZW5kZXIobnVsbCk7ICAgICAgICAKKyAgICAgICAgcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKG51bGwpOwogCi0gICAgICAgIGNsaWVudFF1ZXVlID0gKGpha2FydGEuam1zLlF1ZXVlKSAKKyAgICAgICAgY2xpZW50UXVldWUgPSAoamFrYXJ0YS5qbXMuUXVldWUpCiAgICAgICAgICAgICBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvY2xpZW50X3F1ZXVlIik7CiAKICAgICAgICAgcXVldWVSZWNlaXZlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVSZWNlaXZlcihjbGllbnRRdWV1ZSk7CiAKLSAgICAgICAgVG9waWNDb25uZWN0aW9uRmFjdG9yeSB0b3BpY0NvbkZhY3RvcnkgPSAKKyAgICAgICAgVG9waWNDb25uZWN0aW9uRmFjdG9yeSB0b3BpY0NvbkZhY3RvcnkgPQogICAgICAgICAgICAgKFRvcGljQ29ubmVjdGlvbkZhY3RvcnkpIGNvbnRleHQubG9va3VwCiAgICAgICAgICAgICAoImphdmE6Y29tcC9lbnYvam1zL1RDRiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgIHRvcGljQ29uID0gdG9waWNDb25GYWN0b3J5LmNyZWF0ZVRvcGljQ29ubmVjdGlvbigpOwogCi0gICAgICAgIHRvcGljU2Vzc2lvbiA9IAorICAgICAgICB0b3BpY1Nlc3Npb24gPQogICAgICAgICAgICAgdG9waWNDb24uY3JlYXRlVG9waWNTZXNzaW9uKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwotICAgICAgICAgICAgCisKICAgICAgICAgLy8gUHJvZHVjZXIgd2lsbCBiZSBzcGVjaWZpZWQgd2hlbiBhY3R1YWwgbXNnIGlzIHB1Ymxpc2hlZC4KICAgICAgICAgdG9waWNQdWJsaXNoZXIgPSB0b3BpY1Nlc3Npb24uY3JlYXRlUHVibGlzaGVyKG51bGwpOwogCi0gICAgICAgIGNsaWVudFRvcGljID0gKFRvcGljKSAKKyAgICAgICAgY2xpZW50VG9waWMgPSAoVG9waWMpCiAgICAgICAgICAgICBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvY2xpZW50X3RvcGljIik7CiAKICAgICAgICAgdG9waWNTdWJzY3JpYmVyID0gdG9waWNTZXNzaW9uLmNyZWF0ZVN1YnNjcmliZXIoY2xpZW50VG9waWMpOwpAQCAtMjQ5LDcgKzI0OSw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBzZW5kTXNncyhqYWthcnRhLmptcy5RdWV1ZSBxdWV1ZSwgTWVzc2FnZSBtc2csIGludCBudW0pIAorICAgIHB1YmxpYyB2b2lkIHNlbmRNc2dzKGpha2FydGEuam1zLlF1ZXVlIHF1ZXVlLCBNZXNzYWdlIG1zZywgaW50IG51bSkKICAgICAgICAgdGhyb3dzIEpNU0V4Y2VwdGlvbiB7CiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW07IGkrKykgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIG1lc3NhZ2UgIiArIGkgKyAiIHRvICIgKyBxdWV1ZSk7CkBAIC0yNTcsNyArMjU3LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHB1Ymxpc2hNc2dzKFRvcGljIHRvcGljLCBNZXNzYWdlIG1zZywgaW50IG51bSkgCisgICAgcHVibGljIHZvaWQgcHVibGlzaE1zZ3MoVG9waWMgdG9waWMsIE1lc3NhZ2UgbXNnLCBpbnQgbnVtKQogICAgICAgICB0aHJvd3MgSk1TRXhjZXB0aW9uIHsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlB1Ymxpc2hpbmcgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHRvcGljKTsKQEAgLTI3MCw3ICsyNzAsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciBxdWV1ZSBtZXNzYWdlICIgKyAoaSsxKSArICIgb2YgIiArIG51bSk7CiAgICAgICAgICAgICBNZXNzYWdlIHJlY3ZkbWVzc2FnZSA9IHF1ZXVlUmVjZWl2ZXIucmVjZWl2ZShUSU1FT1VUKTsKICAgICAgICAgICAgIGlmKCByZWN2ZG1lc3NhZ2UgIT0gbnVsbCApIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VpdmVkIG1lc3NhZ2UgOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNlaXZlZCBtZXNzYWdlIDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVGV4dE1lc3NhZ2UpcmVjdmRtZXNzYWdlKS5nZXRUZXh0KCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRpbWVvdXQgYWZ0ZXIgIiArIFRJTUVPVVQgKyAiIHNlY29uZHMiKTsKQEAgLTI4NCw3ICsyODQsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciB0b3BpYyBtZXNzYWdlICIgKyAoaSsxKSArICIgb2YgIiArIG51bSk7CiAgICAgICAgICAgICBNZXNzYWdlIHJlY3ZkbWVzc2FnZSA9IHRvcGljU3Vic2NyaWJlci5yZWNlaXZlKFRJTUVPVVQpOwogICAgICAgICAgICAgaWYoIHJlY3ZkbWVzc2FnZSAhPSBudWxsICkgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgbWVzc2FnZSA6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VpdmVkIG1lc3NhZ2UgOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUZXh0TWVzc2FnZSlyZWN2ZG1lc3NhZ2UpLmdldFRleHQoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGltZW91dCBhZnRlciAiICsgVElNRU9VVCArICIgc2Vjb25kcyIpOwpAQCAtMjkzLDExICsyOTMsMTEgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBHZW5lcmF0ZSB0ZXN0bmFtZS4gKFRyeSB0byBrZWVwIHN5bmNoZWQgd2l0aCB0YXJnZXQgbmFtZXMgaW4gTWFrZWZpbGUuKQogICAgICAqLwotICAgIHByaXZhdGUgU3RyaW5nIGdlbmVyYXRlVGVzdE5hbWUoU3RyaW5nIGRlc3ROYW1lLCBib29sZWFuIGRvSmRiYywgCi0JCQkJICAgIGJvb2xlYW4gZXhwZWN0UmVwbHksIGJvb2xlYW4gcm9sbGJhY2tFbmFibGVkKSAKKyAgICBwcml2YXRlIFN0cmluZyBnZW5lcmF0ZVRlc3ROYW1lKFN0cmluZyBkZXN0TmFtZSwgYm9vbGVhbiBkb0pkYmMsCisgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZXhwZWN0UmVwbHksIGJvb2xlYW4gcm9sbGJhY2tFbmFibGVkKQogICAgIHsKICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gZGVzdE5hbWUudG9Mb3dlckNhc2UoKTsKICAgICAgICAgaWYgKGRvSmRiYykgewpAQCAtMzE3LDI3ICszMTcsMjcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nIGRlc3ROYW1lLCBpbnQgbnVtSXRlciwgYm9vbGVhbiBleHBlY3RSZXBseSwKLSAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBkb0pkYmMsIGJvb2xlYW4gcm9sbGJhY2tFbmFibGVkKSAKLSAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24gCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZG9KZGJjLCBib29sZWFuIHJvbGxiYWNrRW5hYmxlZCkKKworICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSAKKyAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0KICAgICAgICAgICAgIGdlbmVyYXRlVGVzdE5hbWUoZGVzdE5hbWUsIGRvSmRiYywgZXhwZWN0UmVwbHksIHJvbGxiYWNrRW5hYmxlZCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBkZXN0ID0gKERlc3RpbmF0aW9uKSBjb250ZXh0Lmxvb2t1cChkZXN0TmFtZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYm9vbGVhbiBwb2ludFRvUG9pbnQgPSBkZXN0IGluc3RhbmNlb2YgamFrYXJ0YS5qbXMuUXVldWU7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWdpbm5pbmcgdGVzdCA6ICIgKyB0ZXN0TmFtZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgVGltZXIuc3RhcnQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiggcG9pbnRUb1BvaW50ICkgewotICAgICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IAorICAgICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9CiAgICAgICAgICAgICAgICAgICAgIHF1ZXVlU2Vzc2lvbi5jcmVhdGVUZXh0TWVzc2FnZShkZXN0TmFtZSk7CiAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXRCb29sZWFuUHJvcGVydHkoImRvSmRiYyIsIGRvSmRiYyk7CiAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXRCb29sZWFuUHJvcGVydHkoInJvbGxiYWNrRW5hYmxlZCIsIHJvbGxiYWNrRW5hYmxlZCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvKiBhaWQgaWRlbnRpZnlpbmcgd2hhdCB0ZXN0IG1lc3NhZ2UgaXMgYXNzb2NpYXRlZCB3aXRoIG9uIEpNUyBzZXJ2ZXIgc2lkZS4KICAgICAgICAgICAgICAgICAgKiAoSk1TIFJJIE1lc3NhZ2UgSW1wbGVtZW50YXRpb24gdG9TdHJpbmcoKSB3aWxsIHByaW50IHRoaXMgcHJvcGVydHkgaWYgaXQKICAgICAgICAgICAgICAgICAgKiAgaXMgc2V0LikKQEAgLTM0OCwxMSArMzQ4LDExIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHNlbmRNc2dzKChqYWthcnRhLmptcy5RdWV1ZSkgZGVzdCwgbWVzc2FnZSwgbnVtSXRlcik7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IAorICAgICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9CiAgICAgICAgICAgICAgICAgICAgIHRvcGljU2Vzc2lvbi5jcmVhdGVUZXh0TWVzc2FnZShkZXN0TmFtZSk7CiAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXRCb29sZWFuUHJvcGVydHkoImRvSmRiYyIsIGRvSmRiYyk7CiAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXRCb29sZWFuUHJvcGVydHkoInJvbGxiYWNrRW5hYmxlZCIsIHJvbGxiYWNrRW5hYmxlZCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvKiBhaWQgaWRlbnRpZnlpbmcgd2hhdCB0ZXN0IG1lc3NhZ2UgaXMgYXNzb2NpYXRlZCB3aXRoIG9uIEpNUyBzZXJ2ZXIgc2lkZS4KICAgICAgICAgICAgICAgICAgKiAoSk1TIFJJIE1lc3NhZ2UgSW1wbGVtZW50YXRpb24gdG9TdHJpbmcoKSB3aWxsIHByaW50IHRoaXMgcHJvcGVydHkgaWYgaXQKICAgICAgICAgICAgICAgICAgKiAgaXMgc2V0LikKQEAgLTM2Myw3ICszNjMsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwdWJsaXNoTXNncygoVG9waWMpIGRlc3QsIG1lc3NhZ2UsIG51bUl0ZXIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKCBleHBlY3RSZXBseSApIHsKICAgICAgICAgICAgICAgICBpZiggcG9pbnRUb1BvaW50ICkgewogICAgICAgICAgICAgICAgICAgICByZWN2UXVldWVNc2dzKG51bUl0ZXIpOwpAQCAtMzcxLDM4ICszNzEsMzggQEAKICAgICAgICAgICAgICAgICAgICAgcmVjdlRvcGljTXNncyhudW1JdGVyKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgbG9uZyB0aW1lID0gVGltZXIuc3RvcCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW5kIHRlc3QgOiAiICsgdGVzdE5hbWUgKyAiLiBUaW1lID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZXIuZm9ybWF0KHRpbWUpICsgIiAtPiAiICsgKHRpbWUvbnVtSXRlcikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgbXNlYy9tc2cgKCIgKyBudW1JdGVyICsgIiBtc2dzKSIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGV4Y2VwdGlvbiAiICsgZSArICIgaW4gdGVzdCAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZXhjZXB0aW9uICIgKyBlICsgIiBpbiB0ZXN0ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3ROYW1lKTsKICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvLyBoZWxwZXIgY2xhc3MgZm9yIHRpbWluZyB0aGUgdGVzdHMKICAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBUaW1lciB7CiAgICAgICAgIHN0YXRpYyBsb25nIHN0YXJ0VGltZTsKLSAgICAgICAgCisKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIHN0YXJ0KCkgewogICAgICAgICAgICAgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcHVibGljIHN0YXRpYyBsb25nIHN0b3AoKSB7CiAgICAgICAgICAgICByZXR1cm4gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWU7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLyoqCiAgICAgICAgICAqIFJldHVybnMgYSBzdHJpbmcgdGhhdCBvdXRwdXRzIHRpbWUgaW4gYW4KICAgICAgICAgICogZWFzaWx5IHJlYWRhYmxlIGZvcm1hdC4KICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGZvcm1hdChsb25nIHRpbWVJbikgewogICAgICAgICAgICAgZG91YmxlIGZvbyA9ICgoZG91YmxlKXRpbWVJbikvMTAwMDsKLSAgICAgICAgICAgIGxvbmcgdGltZSA9IE1hdGgucm91bmQoZm9vKTsgCisgICAgICAgICAgICBsb25nIHRpbWUgPSBNYXRoLnJvdW5kKGZvbyk7CiAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gbnVsbDsKICAgICAgICAgICAgIGlmICh0aW1lIDwgNjApIHsKICAgICAgICAgICAgICAgICByZXQgPSB0aW1lICsgIiBzZWNvbmRzIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvbXNnYmVhbi9lamIvTXNnQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9tc2diZWFuL2VqYi9Nc2dCZWFuLmphdmEKaW5kZXggNTlkYTkwZC4uNWMwMmYyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9tc2diZWFuL2VqYi9Nc2dCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9tc2diZWFuL2VqYi9Nc2dCZWFuLmphdmEKQEAgLTYyLDIwICs2MiwyMCBAQAogICAgICAgICAgICAgY29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgYmVhbk1hbmFnZWRUeCA9ICgoQm9vbGVhbikgY29udGV4dC5sb29rdXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJqYXZhOmNvbXAvZW52L2JlYW5NYW5hZ2VkVHgiKSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYoIGJlYW5NYW5hZ2VkVHggKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCRUFOIE1BTkFHRUQgVFJBTlNBQ1RJT05TIik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ09OVEFJTkVSIE1BTkFHRUQgVFJBTlNBQ1RJT05TIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGRhdGFTb3VyY2UgPSAoRGF0YVNvdXJjZSkgCisKKyAgICAgICAgICAgIGRhdGFTb3VyY2UgPSAoRGF0YVNvdXJjZSkKICAgICAgICAgICAgICAgICBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qZGJjL0FjY291bnREQiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIENyZWF0ZSBhIFF1ZXVlIFNlc3Npb24uCi0gICAgICAgICAgICBxdWV1ZUNvbkZhY3RvcnkgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkgCisgICAgICAgICAgICBxdWV1ZUNvbkZhY3RvcnkgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKICAgICAgICAgICAgICAgICBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvTXlRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5Iik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdG9waWNDb25GYWN0b3J5ID0gKFRvcGljQ29ubmVjdGlvbkZhY3RvcnkpCiAgICAgICAgICAgICAgICAgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL015VG9waWNDb25uZWN0aW9uRmFjdG9yeSIpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CkBAIC05MSwxNiArOTEsMTYgQEAKICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlSUQgPSByZWN2TXNnLmdldEpNU01lc3NhZ2VJRCgpOwogCiAgICAgICAgICAgICBib29sZWFuIGRvSm1zID0gKHJlY3ZNc2cuZ2V0Sk1TUmVwbHlUbygpICE9IG51bGwpOwotICAgICAgICAgICAgYm9vbGVhbiBkb0pkYmMgPSAKKyAgICAgICAgICAgIGJvb2xlYW4gZG9KZGJjID0KICAgICAgICAgICAgICAgICByZWN2TXNnLmdldEJvb2xlYW5Qcm9wZXJ0eSgiZG9KZGJjIik7Ci0gICAgICAgICAgICBib29sZWFuIHJvbGxiYWNrRW5hYmxlZCA9IAorICAgICAgICAgICAgYm9vbGVhbiByb2xsYmFja0VuYWJsZWQgPQogICAgICAgICAgICAgICAgIHJlY3ZNc2cuZ2V0Qm9vbGVhblByb3BlcnR5KCJyb2xsYmFja0VuYWJsZWQiKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBNc2dCZWFuOjpvbk1lc3NhZ2UoKSA6ICIgKyBtZXNzYWdlSUQpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJqZGJjIGVuYWJsZWQgOiAiICsgZG9KZGJjICsgIiAsICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJqbXMgcmVwbHkgZW5hYmxlZCA6ICIgKyBkb0ptcyArICIgLCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicm9sbGJhY2sgZW5hYmxlZCA6ICIgKyByb2xsYmFja0VuYWJsZWQpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKCBiZWFuTWFuYWdlZFR4ICkgewogICAgICAgICAgICAgICAgIG1kYy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogICAgICAgICAgICAgfSBlbHNlIGlmKCByb2xsYmFja0VuYWJsZWQgKSB7CkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1dCByZWRlbGl2ZXJlZCBmbGFnIG5vdCBzZXQiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiA6ICIgKyByZWN2TXNnKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHJlZGVsaXZlcmVkIG1lc3NhZ2UgIiArIAorICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgcmVkZWxpdmVyZWQgbWVzc2FnZSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSUQpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMTIzLDEyICsxMjMsMTIgQEAKICAgICAgICAgICAgICAgICBtZGMuZ2V0VXNlclRyYW5zYWN0aW9uKCkuY29tbWl0KCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYoIHJvbGxiYWNrRW5hYmxlZCApIHsKICAgICAgICAgICAgICAgICBpZiggcmVjdk1zZy5nZXRKTVNSZWRlbGl2ZXJlZCgpICkgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCByZWRlbGl2ZXJlZCBtZXNzYWdlICIgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgcmVkZWxpdmVyZWQgbWVzc2FnZSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VJRCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIG5vIG1vcmUgcm9sbGJhY2tzIC0tIGNvbnRhaW5lciB3aWxsIGNvbW1pdCB0eAogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHJvbGxiYWNrTWVzc2FnZXMuYWRkKHJlY3ZNc2cpOwotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJvbGxpbmcgYmFjayBtZXNzYWdlICIgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSb2xsaW5nIGJhY2sgbWVzc2FnZSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VJRCk7CiAgICAgICAgICAgICAgICAgICAgIG1kYy5zZXRSb2xsYmFja09ubHkoKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xNDAsMTMgKzE0MCwxMyBAQAogICAgIH0KIAogICAgIHByb3RlY3RlZCB2b2lkIGRvU3R1ZmYoYm9vbGVhbiBkb0pkYmMsIE1lc3NhZ2UgcmVjdk1zZykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIERlc3RpbmF0aW9uIHJlcGx5VG8gPSByZWN2TXNnLmdldEpNU1JlcGx5VG8oKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoIHJlcGx5VG8gIT0gbnVsbCApIHsKICAgICAgICAgICAgIGRvSm1zU3R1ZmYocmVwbHlUbywgcmVjdk1zZyk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoIGRvSmRiYykgewogICAgICAgICAgICAgZG9KZGJjU3R1ZmYoKTsKICAgICAgICAgfQpAQCAtMTc4LDQxICsxNzgsNDEgQEAKIAogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcXVldWVDb24gPSBudWxsOwogICAgICAgICBUb3BpY0Nvbm5lY3Rpb24gdG9waWNDb24gPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKCByZXBseVRvIGluc3RhbmNlb2YgUXVldWUgKSB7CiAgICAgICAgICAgICAgICAgcXVldWVDb24gPSBxdWV1ZUNvbkZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBwYXJhbWV0ZXJzIHRvIGNyZWF0ZVF1ZXVlU2Vzc2lvbiBhcmUgaWdub3JlZCB3aGVuIHRoZXJlCiAgICAgICAgICAgICAgICAgLy8gaXMgYSB0eCBjb250ZXh0LiAgSWYgdGhlcmUncyBhIENNVCB1bnNwZWNpZmllZCB0eCBjb250ZXh0LAotICAgICAgICAgICAgICAgIC8vIGUuZy4gQ01UIE5vdFN1cHBvcnRlZCwgam1zIGFjdGl2aXR5IG11c3QgYmUgY29kZWQgCisgICAgICAgICAgICAgICAgLy8gZS5nLiBDTVQgTm90U3VwcG9ydGVkLCBqbXMgYWN0aXZpdHkgbXVzdCBiZSBjb2RlZAogICAgICAgICAgICAgICAgIC8vIGluIGEgZGVmZW5zaXZlIHdheSBzaW5jZSB0aGUgY29udGFpbmVyIGhhcyBhIGxvdCBvZiBsZWV3YXkKLSAgICAgICAgICAgICAgICAvLyBpbiBob3cgaXQgcGVyZm9ybXMgdGhlIHdvcmsuICAKKyAgICAgICAgICAgICAgICAvLyBpbiBob3cgaXQgcGVyZm9ybXMgdGhlIHdvcmsuCiAgICAgICAgICAgICAgICAgUXVldWVTZXNzaW9uIHF1ZXVlU2Vzc2lvbiA9IHF1ZXVlQ29uLgogICAgICAgICAgICAgICAgICAgICBjcmVhdGVRdWV1ZVNlc3Npb24oZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBRdWV1ZVNlbmRlciBzZW5kZXIgID0gcXVldWVTZXNzaW9uLgogICAgICAgICAgICAgICAgICAgICBjcmVhdGVTZW5kZXIoKFF1ZXVlKXJlcGx5VG8pOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgVGV4dE1lc3NhZ2Ugc2VuZE1zZyA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVUZXh0TWVzc2FnZSgpOwogICAgICAgICAgICAgICAgIHNlbmRNc2cuc2V0VGV4dCgiUmVwbHkgZm9yICIgKyAoKFRleHRNZXNzYWdlKXJlY3ZNc2cpLmdldFRleHQoKSArICIgIiArIHJlY3ZNc2cuZ2V0Sk1TTWVzc2FnZUlEKCkpOwogICAgICAgICAgICAgICAgIHNlbmRlci5zZW5kKHNlbmRNc2cpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCByZXBseSAiICsgc2VuZE1zZyArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCByZXBseSAiICsgc2VuZE1zZyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdG8gIiArIHJlcGx5VG8pOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICB0b3BpY0NvbiA9IHRvcGljQ29uRmFjdG9yeS5jcmVhdGVUb3BpY0Nvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIFRvcGljU2Vzc2lvbiB0b3BpY1Nlc3Npb24gPSB0b3BpY0Nvbi4KICAgICAgICAgICAgICAgICAgICAgY3JlYXRlVG9waWNTZXNzaW9uKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgVG9waWNQdWJsaXNoZXIgcHVibGlzaGVyID0KICAgICAgICAgICAgICAgICAgICAgdG9waWNTZXNzaW9uLmNyZWF0ZVB1Ymxpc2hlcigoVG9waWMpcmVwbHlUbyk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBUZXh0TWVzc2FnZSBzZW5kTXNnID0gdG9waWNTZXNzaW9uLmNyZWF0ZVRleHRNZXNzYWdlKCk7CiAgICAgICAgICAgICAgICAgc2VuZE1zZy5zZXRUZXh0KCJSZXBseSBmb3IgIiArICgoVGV4dE1lc3NhZ2UpcmVjdk1zZykuZ2V0VGV4dCgpICsgIiAiICsgcmVjdk1zZy5nZXRKTVNNZXNzYWdlSUQoKSk7CiAgICAgICAgICAgICAgICAgcHVibGlzaGVyLnB1Ymxpc2goc2VuZE1zZyk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQdWJsaXNoZWQgcmVwbHkgIiArIHNlbmRNc2cgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlB1Ymxpc2hlZCByZXBseSAiICsgc2VuZE1zZyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdG8gIiArIHJlcGx5VG8pOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKEpNU0V4Y2VwdGlvbiBqbXNlKSB7CkBAIC0yMzAsMTAgKzIzMCwxMCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1zZ0JlYW46OnNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KCkhISIpOwotCXRoaXMubWRjID0gbWRjOworICAgIHRoaXMubWRjID0gbWRjOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvbXNnYmVhbi9lamIvT3BlcmF0aW9uVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9tc2diZWFuL2VqYi9PcGVyYXRpb25UZXN0LmphdmEKaW5kZXggMTNhZDMyOC4uMzQ4NzJlOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9tc2diZWFuL2VqYi9PcGVyYXRpb25UZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9tc2diZWFuL2VqYi9PcGVyYXRpb25UZXN0LmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIAogLyoqCiAgKiBUZXN0cyBtYXRyaXggb2Ygb3BlcmF0aW9ucyBjYWxsYWJsZSBmcm9tIHRoZSBkaWZmZXJlbnQKLSAqIG1ldGhvZHMgaW4gYSBtZXNzYWdlLWRyaXZlbiBiZWFuLiAgCisgKiBtZXRob2RzIGluIGEgbWVzc2FnZS1kcml2ZW4gYmVhbi4KICAqLwogcHVibGljIGNsYXNzIE9wZXJhdGlvblRlc3QgewogCkBAIC0zOCwxOCArMzgsMTggQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJU19DQUxMRVJfSU5fUk9MRSA9IDU7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX0VKQl9IT01FID0gNjsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VSX1RYX0JFR0lOID0gNzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VSX1RYX0NPTU1JVCA9IDg7IAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRVJfVFhfQ09NTUlUID0gODsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VSX1RYX1JPTExCQUNLID0gOTsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOVU1fT1BFUkFUSU9OUyA9IDEwOwotICAgIAorCiAgICAgLy8gT1BFUkFUSU9OIFNFVFMgKFRhYmxlIDksIFNlY3Rpb24gMTMuNS4xIEVKQiAyLjApCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbltdW10gT1BFUkFUSU9OX1NFVFMgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuW11bXSBPUEVSQVRJT05fU0VUUyA9CiAgICAgewotICAgICAgICB7IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgIGZhbHNlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UgfSwgCisgICAgICAgIHsgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAgZmFsc2UsICBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSB9LAogICAgICAgICB7IHRydWUsICBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgIGZhbHNlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UgfSwKICAgICAgICAgeyB0cnVlLCAgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2UsICBmYWxzZSwgIGZhbHNlLCB0cnVlLCAgdHJ1ZSwgIHRydWUgIH0sCiAgICAgICAgIHsgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgIHRydWUsICAgZmFsc2UsICBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSB9LAotICAgICAgICB7IHRydWUsICB0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwgIGZhbHNlLCAgZmFsc2UsIHRydWUsICB0cnVlLCAgdHJ1ZSAgfSAKKyAgICAgICAgeyB0cnVlLCAgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2UsICBmYWxzZSwgIGZhbHNlLCB0cnVlLCAgdHJ1ZSwgIHRydWUgIH0KICAgICB9OwogCiAgICAgLy8gVHJhbnNhY3Rpb24gdHlwZXMKQEAgLTYyLDggKzYyLDggQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFSkJfQ1JFQVRFICA9IDI7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRUpCX1JFTU9WRSA9IDM7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT05fTUVTU0FHRSA9IDQ7Ci0gICAKLSAgICAvLyAKKworICAgIC8vCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9TRVRfTUFUUklYW11bXSA9CiAgICAgewogICAgICAgICB7IDAsIDEsIDEsIDEsIDMgfSwKQEAgLTgyLDExICs4MiwxMSBAQAogCiAgICAgICAgIGJvb2xlYW5bXSB0ZXN0UmVzdWx0cyA9IG5ldyBib29sZWFuW05VTV9PUEVSQVRJT05TXTsKIAotICAgICAgICBmb3IoaW50IG9wZXJhdGlvbiA9IDA7IG9wZXJhdGlvbiA8IE5VTV9PUEVSQVRJT05TOyBvcGVyYXRpb24rKykgeyAgICAgICAgICAgIAorICAgICAgICBmb3IoaW50IG9wZXJhdGlvbiA9IDA7IG9wZXJhdGlvbiA8IE5VTV9PUEVSQVRJT05TOyBvcGVyYXRpb24rKykgewogICAgICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgc3dpdGNoKG9wZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICBjYXNlIEVOVl9BQ0NFU1MgOiAKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFTlZfQUNDRVNTIDoKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRvRW52QWNjZXNzKCk7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIFVTRVJfVFhfQUNDRVNTIDoKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRvVXNlclR4QWNjZXNzKCk7IGJyZWFrOwpAQCAtMTI3LDcgKzEyNyw3IEBACiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWN0dWFsIHJlc3VsdCAgIDogIiArIHJlc3VsdCk7CiAKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAgICAgCisgICAgICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIGJvb2xlYW4gZG9FbnZBY2Nlc3MoKSB0aHJvd3MgVGhyb3dhYmxlIHsKQEAgLTEzNSw3ICsxMzUsNyBAQAogICAgICAgICBDb250ZXh0IGVudiA9IChDb250ZXh0KSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2VudiIpOwogICAgICAgICBTdHJpbmcgIGVudlZhciA9IChTdHJpbmcpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0VudlZhciIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9ICAgIAorICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiBkb1VzZXJUeEFjY2VzcygpIHRocm93cyBUaHJvd2FibGUgewogICAgICAgICBVc2VyVHJhbnNhY3Rpb24gdXNlclR4ID0gbWRjLmdldFVzZXJUcmFuc2FjdGlvbigpOwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAgICAgICAgIG1kYy5nZXRDYWxsZXJQcmluY2lwYWwoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGRvR2V0Um9sbGJhY2tPbmx5KCkgdGhyb3dzIFRocm93YWJsZSB7CiAgICAgICAgIG1kYy5nZXRSb2xsYmFja09ubHkoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xODcsNiArMTg3LDYgQEAKICAgICAgICAgdXNlclR4LmJlZ2luKCk7CiAgICAgICAgIHVzZXJUeC5yb2xsYmFjaygpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9ICAgIAorICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9tc2diZWFuL2VqYi9PcGVyYXRpb25UZXN0TXNnQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9tc2diZWFuL2VqYi9PcGVyYXRpb25UZXN0TXNnQmVhbi5qYXZhCmluZGV4IDlkZGVmMGUuLjczMWQ2ZWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvbXNnYmVhbi9lamIvT3BlcmF0aW9uVGVzdE1zZ0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL21zZ2JlYW4vZWpiL09wZXJhdGlvblRlc3RNc2dCZWFuLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIGltcG9ydCBqYWthcnRhLmptcy5NZXNzYWdlTGlzdGVuZXI7CiBpbXBvcnQgamF2YXgubmFtaW5nLio7CiAKLXB1YmxpYyBjbGFzcyBPcGVyYXRpb25UZXN0TXNnQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLCAKK3B1YmxpYyBjbGFzcyBPcGVyYXRpb25UZXN0TXNnQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLAogICAgIE1lc3NhZ2VMaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYyA9IG51bGw7CkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gT3BlcmF0aW9uVGVzdE1zZ0JlYW46OmVqYkNyZWF0ZSgpICEhIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIGJlYW5NYW5hZ2VkVHggPSAKKyAgICAgICAgICAgIGJlYW5NYW5hZ2VkVHggPQogICAgICAgICAgICAgICAgICgoQm9vbGVhbikgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvYmVhbk1hbmFnZWRUeCIpKS5ib29sZWFuVmFsdWUoKTsKIAogICAgICAgICAgICAgaWYoIGJlYW5NYW5hZ2VkVHggKSB7CkBAIC01NSw3ICs1NSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgcmVjdk1zZykgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE9wZXJhdGlvblRlc3RNc2dCZWFuOjpvbk1lc3NhZ2UoKSA6ICIgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gT3BlcmF0aW9uVGVzdE1zZ0JlYW46Om9uTWVzc2FnZSgpIDogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyByZWN2TXNnKTsKIAogICAgICAgICBydW5UZXN0KE9wZXJhdGlvblRlc3QuT05fTUVTU0FHRSk7CkBAIC02NCw3ICs2NCw3IEBACiAgICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbgogICAgICAgICAgICAgKCJJbiBPcGVyYXRpb25UZXN0TXNnQmVhbjo6c2V0TWVzc2FnZURyaXZlbkNvbnRleHQoKSEhIik7Ci0JdGhpcy5tZGMgPSBtZGM7CisgICAgdGhpcy5tZGMgPSBtZGM7CiAgICAgICAgIHJ1blRlc3QoT3BlcmF0aW9uVGVzdC5TRVRfQ09OVEVYVCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL3NpbmdsZXRvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9zaW5nbGV0b24vYnVpbGQucHJvcGVydGllcwppbmRleCA2OTczM2JkLi5iMDZkNDE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL3NpbmdsZXRvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvc2luZ2xldG9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLW1kYi1zaW5nbGV0b24iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJnbGFzc2Zpc2gtYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9nbGFzc2Zpc2gtYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZ2xhc3NmaXNoLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9nbGFzc2Zpc2gtZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2dsYXNzZmlzaC1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJnbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9nbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvc2luZ2xldG9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvc2luZ2xldG9uL2J1aWxkLnhtbAppbmRleCAxNjEyYzQwLi4xZjE2NjM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL3NpbmdsZXRvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9zaW5nbGV0b24vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypCZWFuKi5jbGFzcywgKiovKklGLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzLCAqKi8qSUYuY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc1LDE0ICs3NSwxNCBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9zaW5nbGV0b24vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9zaW5nbGV0b24vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGM5MThlOWIuLmNhMjJkZDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvc2luZ2xldG9uL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL3NpbmdsZXRvbi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKIAogLyoqCiAgKiBUZXN0cyBmb3IgaHR0cDovL2phdmEubmV0L2ppcmEvYnJvd3NlL0dMQVNTRklTSC0xMzAwNCAoU3VwcG9ydCBNREIgc2luZ2xldG9uKS4KLSAqIFRoZSB0ZXN0IGVqYiBqYXIgaXMgY29uZmlndXJlZCB3aXRoIHByb3BlcnR5IHNpbmdsZXRvbi1iZWFuLXBvb2w9dHJ1ZSBpbiAKKyAqIFRoZSB0ZXN0IGVqYiBqYXIgaXMgY29uZmlndXJlZCB3aXRoIHByb3BlcnR5IHNpbmdsZXRvbi1iZWFuLXBvb2w9dHJ1ZSBpbgogICogc3VuLWVqYi1qYXIueG1sLiAgVGhpcyB0ZXN0IGNsaWVudCBjYWxscyBmb29UZXN0IGFuZCBkb1Rlc3QoLi4uKToKICAqIGZvb1Rlc3Q6IHZlcmlmeSB0aGUgc3RhdGVsZXNzIGJlYW4gRm9vQmVhbiBpcyBzaW5nbGUgaW5zdGFuY2U7CiAgKiBkb1Rlc3QoLi4pOiB2ZXJpZnkgdGhlIG1kYiBNZXNzYWdlQmVhbiBpcyBzaW5nbGUgaW5zdGFuY2UuCkBAIC01OSw3ICs1OSw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgRm9vUmVtb3RlSUYgZm9vOwogCiAgICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKCBhcmdzLmxlbmd0aCA9PSAxICkgewogICAgICAgICAgICAgbnVtTWVzc2FnZXMgPSBuZXcgSW50ZWdlcihhcmdzWzBdKS5pbnRWYWx1ZSgpOwogICAgICAgICB9CkBAIC02OCw3ICs2OCw3IEBACiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgc2V0dXAoKTsKLQkgICAgZG9UZXN0KCJqbXMvZWpiX21kYl9zaW5nbGV0b25fSW5RdWV1ZSIsIG51bU1lc3NhZ2VzKTsKKyAgICAgICAgZG9UZXN0KCJqbXMvZWpiX21kYl9zaW5nbGV0b25fSW5RdWV1ZSIsIG51bU1lc3NhZ2VzKTsKICAgICAgICAgICAgIGZvb1Rlc3QoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJzaW5nbGV0b24gbWFpbiIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2goVGhyb3dhYmxlIHQpIHsKQEAgLTEwNCw4ICsxMDQsOCBAQAogICAgICAgICBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcXVldWVDb25GYWN0b3J5ID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpIGNvbnRleHQubG9va3VwICgiamF2YTpjb21wL2Vudi9Gb29DRiIpOwogICAgICAgICBxdWV1ZUNvbiA9IHF1ZXVlQ29uRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKLSAgICAgICAgcXVldWVTZXNzaW9uID0gcXVldWVDb24uY3JlYXRlUXVldWVTZXNzaW9uKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOyAKLSAgICAgICAgcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKG51bGwpOyAgICAgICAgCisgICAgICAgIHF1ZXVlU2Vzc2lvbiA9IHF1ZXVlQ29uLmNyZWF0ZVF1ZXVlU2Vzc2lvbihmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKKyAgICAgICAgcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKG51bGwpOwogICAgICAgICBxdWV1ZUNvbi5zdGFydCgpOwogICAgIH0KIApAQCAtMTE5LDIwICsxMTksMjAgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHNlbmRNc2dzKGpha2FydGEuam1zLlF1ZXVlIHF1ZXVlLCBNZXNzYWdlIG1zZywgaW50IG51bSkgCisgICAgcHVibGljIHZvaWQgc2VuZE1zZ3MoamFrYXJ0YS5qbXMuUXVldWUgcXVldWUsIE1lc3NhZ2UgbXNnLCBpbnQgbnVtKQogICAgICAgICB0aHJvd3MgSk1TRXhjZXB0aW9uIHsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0gICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKyAKKyAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIG1lc3NhZ2UgIiArIGkgKyAiIHRvICIgKyBxdWV1ZSArCiAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAiIGF0IHRpbWUgIiArIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKICAgICAgICAgICAgIHF1ZXVlU2VuZGVyLnNlbmQocXVldWUsIG1zZyk7Ci0gICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKyAKKyAgICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCJTZW50IG1lc3NhZ2UgIiArIGkgKyAiIHRvICIgKyBxdWV1ZSArCiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAiIGF0IHRpbWUgIiArIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmcgZGVzdE5hbWUsIGludCBudW0pIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBEZXN0aW5hdGlvbiBkZXN0ID0gKERlc3RpbmF0aW9uKSBjb250ZXh0Lmxvb2t1cChkZXN0TmFtZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtT2ZDYWxsczsgaSsrKSB7CiAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBxdWV1ZVNlc3Npb24uY3JlYXRlVGV4dE1lc3NhZ2UoZGVzdE5hbWUpOwogICAgICAgICAgICAgLy8gICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHRvcGljU2Vzc2lvbi5jcmVhdGVUZXh0TWVzc2FnZShkZXN0TmFtZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwvYnVpbGQucHJvcGVydGllcwppbmRleCA4ZDQ5MzhkLi5kMzNjZTljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXBlcmYtbG9jYWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsL2J1aWxkLnhtbAppbmRleCBhOTdlODNhLi4zNzNjMDhhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjEsMTAgKzYxLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA0NmFkYTk0Li5mYWRjNjI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zNiwzMiArMzYsMzIgQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1wZXJmLWxvY2FsSUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIHRyeSB7CiAKLQkgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKLQkgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAotCSAgICBqYXZhLmxhbmcuT2JqZWN0IG9ianJlZiA9IAorICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKKyAgICAgICAgamF2YS5sYW5nLk9iamVjdCBvYmpyZWYgPQogICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvUGVyZm9ybWFuY2VBcHAiKTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7CiAKLQkgICAgSGVsbG9Ib21lICBob21lID0gKEhlbGxvSG9tZSkKKyAgICAgICAgSGVsbG9Ib21lICBob21lID0gKEhlbGxvSG9tZSkKICAgICAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBIZWxsb0hvbWUuY2xhc3MpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwogCi0JICAgIEhlbGxvIGhyID0gaG9tZS5jcmVhdGUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7CisgICAgICAgIEhlbGxvIGhyID0gaG9tZS5jcmVhdGUoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7CiAKLQkgICAgLy8gaW52b2tlIG1ldGhvZCBvbiB0aGUgRUpCCi0JICAgIGRvUGVyZlRlc3QoaHIsIHRydWUpOworICAgICAgICAvLyBpbnZva2UgbWV0aG9kIG9uIHRoZSBFSkIKKyAgICAgICAgZG9QZXJmVGVzdChociwgdHJ1ZSk7CiAgICAgICAgICAgICBkb1BlcmZUZXN0KGhyLCBmYWxzZSk7CiAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKQEAgLTcwLDY2ICs3MCw2NiBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRvUGVyZlRlc3QoSGVsbG8gaHIsIGJvb2xlYW4gbG9jYWwpIAotCXRocm93cyBFeGNlcHRpb24KKyAgICBwcml2YXRlIHZvaWQgZG9QZXJmVGVzdChIZWxsbyBociwgYm9vbGVhbiBsb2NhbCkKKyAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotCVN5c3RlbS5vdXQucHJpbnRsbigiXG5TdGF0ZWZ1bCBTZXNzaW9uIHJlc3VsdHMgKG1pY3Jvc2VjKTogXHR3aXRoIHR4IFx0bm8gdHg6Iik7Ci0JaHIud2FybXVwKENvbW1vbi5TVEFURUZVTCwgbG9jYWwpOwotCXJ1blRlc3RzKENvbW1vbi5TVEFURUZVTCwgaHIsIGxvY2FsKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuU3RhdGVmdWwgU2Vzc2lvbiByZXN1bHRzIChtaWNyb3NlYyk6IFx0d2l0aCB0eCBcdG5vIHR4OiIpOworICAgIGhyLndhcm11cChDb21tb24uU1RBVEVGVUwsIGxvY2FsKTsKKyAgICBydW5UZXN0cyhDb21tb24uU1RBVEVGVUwsIGhyLCBsb2NhbCk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuU3RhdGVsZXNzIFNlc3Npb24gcmVzdWx0cyAobWljcm9zZWMpOiBcdHdpdGggdHggXHRubyB0eDoiKTsKLQloci53YXJtdXAoQ29tbW9uLlNUQVRFRlVMLCBsb2NhbCk7Ci0JcnVuVGVzdHMoQ29tbW9uLlNUQVRFTEVTUywgaHIsIGxvY2FsKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuU3RhdGVsZXNzIFNlc3Npb24gcmVzdWx0cyAobWljcm9zZWMpOiBcdHdpdGggdHggXHRubyB0eDoiKTsKKyAgICBoci53YXJtdXAoQ29tbW9uLlNUQVRFRlVMLCBsb2NhbCk7CisgICAgcnVuVGVzdHMoQ29tbW9uLlNUQVRFTEVTUywgaHIsIGxvY2FsKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiXG5CTVAgRW50aXR5IHJlc3VsdHMgKG1pY3Jvc2VjKTogXHRcdHdpdGggdHggXHRubyB0eDoiKTsKLQloci53YXJtdXAoQ29tbW9uLkJNUCwgbG9jYWwpOwotCXJ1blRlc3RzKENvbW1vbi5CTVAsIGhyLCBsb2NhbCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbkJNUCBFbnRpdHkgcmVzdWx0cyAobWljcm9zZWMpOiBcdFx0d2l0aCB0eCBcdG5vIHR4OiIpOworICAgIGhyLndhcm11cChDb21tb24uQk1QLCBsb2NhbCk7CisgICAgcnVuVGVzdHMoQ29tbW9uLkJNUCwgaHIsIGxvY2FsKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgcnVuVGVzdHMoaW50IHR5cGUsIEhlbGxvIGhyLCBib29sZWFuIGxvY2FsKQotCXRocm93cyBFeGNlcHRpb24KKyAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RpbmcgIiArIChsb2NhbCA/ICIgTG9jYWwgIiA6IAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RpbmcgIiArIChsb2NhbCA/ICIgTG9jYWwgIiA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgQ29sbG9jYXRlZCBSZW1vdGUgIikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgInBlcmZvcm1hbmNlLi4uIik7CiAKICAgICAgICAgaWYoIGxvY2FsICkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJub3RTdXBwb3J0ZWQgOiBcdFx0XHRcdCIgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm5vdFN1cHBvcnRlZCA6IFx0XHRcdFx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaHIubm90U3VwcG9ydGVkKHR5cGUsIHRydWUpICsgIlx0XHQiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGhyLm5vdFN1cHBvcnRlZCh0eXBlLCBmYWxzZSkgKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic3VwcG9ydHMgOiBcdFx0XHRcdCIgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN1cHBvcnRzIDogXHRcdFx0XHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBoci5zdXBwb3J0cyh0eXBlLCB0cnVlKSArICJcdFx0IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBoci5zdXBwb3J0cyh0eXBlLCBmYWxzZSkgKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmVxdWlyZWQgOiBcdFx0XHRcdCIgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlcXVpcmVkIDogXHRcdFx0XHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBoci5yZXF1aXJlZCh0eXBlLCB0cnVlKSArICJcdFx0IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBoci5yZXF1aXJlZCh0eXBlLCBmYWxzZSkgKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmVxdWlyZXNOZXcgOiBcdFx0XHRcdCIgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlcXVpcmVzTmV3IDogXHRcdFx0XHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBoci5yZXF1aXJlc05ldyh0eXBlLCB0cnVlKSArICJcdFx0IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBoci5yZXF1aXJlc05ldyh0eXBlLCBmYWxzZSkgKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWFuZGF0b3J5IDogXHRcdFx0XHQiIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtYW5kYXRvcnkgOiBcdFx0XHRcdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGhyLm1hbmRhdG9yeSh0eXBlLCB0cnVlKSk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm5ldmVyIDogXHRcdFx0XHRcdFx0IiAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibmV2ZXIgOiBcdFx0XHRcdFx0XHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBoci5uZXZlcih0eXBlLCBmYWxzZSkgKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibm90U3VwcG9ydGVkIDogXHRcdFx0XHQiIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJub3RTdXBwb3J0ZWQgOiBcdFx0XHRcdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGhyLm5vdFN1cHBvcnRlZFJlbW90ZSh0eXBlLCB0cnVlKSArICJcdFx0IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBoci5ub3RTdXBwb3J0ZWRSZW1vdGUodHlwZSwgZmFsc2UpICk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN1cHBvcnRzIDogXHRcdFx0XHQiIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzdXBwb3J0cyA6IFx0XHRcdFx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaHIuc3VwcG9ydHNSZW1vdGUodHlwZSwgdHJ1ZSkgKyAiXHRcdCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaHIuc3VwcG9ydHNSZW1vdGUodHlwZSwgZmFsc2UpICk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlcXVpcmVkIDogXHRcdFx0XHQiIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZXF1aXJlZCA6IFx0XHRcdFx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaHIucmVxdWlyZWRSZW1vdGUodHlwZSwgdHJ1ZSkgKyAiXHRcdCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaHIucmVxdWlyZWRSZW1vdGUodHlwZSwgZmFsc2UpICk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlcXVpcmVzTmV3IDogXHRcdFx0XHQiIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZXF1aXJlc05ldyA6IFx0XHRcdFx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaHIucmVxdWlyZXNOZXdSZW1vdGUodHlwZSwgdHJ1ZSkgKyAiXHRcdCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaHIucmVxdWlyZXNOZXdSZW1vdGUodHlwZSwgZmFsc2UpICk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm1hbmRhdG9yeSA6IFx0XHRcdFx0IiAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWFuZGF0b3J5IDogXHRcdFx0XHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBoci5tYW5kYXRvcnlSZW1vdGUodHlwZSwgdHJ1ZSkpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJuZXZlciA6IFx0XHRcdFx0XHRcdCIgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm5ldmVyIDogXHRcdFx0XHRcdFx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaHIubmV2ZXJSZW1vdGUodHlwZSwgZmFsc2UpICk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9lamIvQm1wRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9lamIvQm1wRUpCLmphdmEKaW5kZXggY2JjMjhjYy4uYmFhYmU0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwvZWpiL0JtcEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsL2VqYi9CbXBFSkIuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogICAgIHB1YmxpYyBCbXBFSkIoKXt9CiAKICAgICBwdWJsaWMgU3RyaW5nIGVqYkNyZWF0ZShTdHJpbmcgcykgewotCXJldHVybiBzOworICAgIHJldHVybiBzOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoU3RyaW5nIHMpIHt9CkBAIC00MSwxMCArNDEsMTAgQEAKICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKQogICAgIHt9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKQogICAgIHt9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkKICAgICB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkKQEAgLTU3LDYgKzU3LDYgQEAKICAgICB7fQogCiAgICAgcHVibGljIFN0cmluZyBlamJGaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBzKSB7Ci0JcmV0dXJuIHM7CisgICAgcmV0dXJuIHM7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwvZWpiL0JtcFJlbW90ZUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsL2VqYi9CbXBSZW1vdGVIb21lLmphdmEKaW5kZXggNWRlYzYwYy4uNzZkYmNiNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwvZWpiL0JtcFJlbW90ZUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9lamIvQm1wUmVtb3RlSG9tZS5qYXZhCkBAIC0yMiw1ICsyMiw1IEBACiBwdWJsaWMgaW50ZXJmYWNlIEJtcFJlbW90ZUhvbWUgZXh0ZW5kcyBFSkJIb21lCiB7CiAgICAgQm1wUmVtb3RlIGNyZWF0ZShTdHJpbmcgcykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgQ3JlYXRlRXhjZXB0aW9uOwotICAgIEJtcFJlbW90ZSBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBDcmVhdGVFeGNlcHRpb247ICAgIAorICAgIEJtcFJlbW90ZSBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBDcmVhdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9lamIvSGVsbG9FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsL2VqYi9IZWxsb0VKQi5qYXZhCmluZGV4IDI4YjAyMmEuLmZjOGYxM2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsL2VqYi9IZWxsb0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsL2VqYi9IZWxsb0VKQi5qYXZhCkBAIC00NiwxMCArNDYsMTAgQEAKIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTnVtIGl0ZXJhdGlvbnMgc2V0IHRvICIgKyBJVEVSQVRJT05TKTsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgU2Z1bEhvbWUgc2Z1bEhvbWUgPSAoU2Z1bEhvbWUpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2Z1bCIpOworICAgICAgICBTZnVsSG9tZSBzZnVsSG9tZSA9IChTZnVsSG9tZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TZnVsIik7CiAgICAgICAgICAgICBzZnVsID0gc2Z1bEhvbWUuY3JlYXRlKCk7CiAKIApAQCAtNTcsMTkgKzU3LDE5IEBACiAgICAgICAgICAgICBzZnVsUmVtb3RlSG9tZSA9IChTZnVsUmVtb3RlSG9tZSkKICAgICAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqLCBTZnVsUmVtb3RlSG9tZS5jbGFzcyk7CiAgICAgICAgICAgICBzZnVsUmVtb3RlID0gc2Z1bFJlbW90ZUhvbWUuY3JlYXRlKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBTdGF0ZWZ1bCBiZWFuLiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgU3RhdGVmdWwgYmVhbi4iKTsKIAotCSAgIAkgICAgIAotCSAgICBTbGVzc0hvbWUgc2xlc3NIb21lID0gKFNsZXNzSG9tZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TbGVzcyIpOworCisgICAgICAgIFNsZXNzSG9tZSBzbGVzc0hvbWUgPSAoU2xlc3NIb21lKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NsZXNzIik7CiAgICAgICAgICAgICBzbGVzcyA9IHNsZXNzSG9tZS5jcmVhdGUoKTsKICAgICAgICAgICAgIG9iaiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2xlc3NSZW1vdGUiKTsKICAgICAgICAgICAgIHNsZXNzUmVtb3RlSG9tZSA9IChTbGVzc1JlbW90ZUhvbWUpCiAgICAgICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9iaiwgU2xlc3NSZW1vdGVIb21lLmNsYXNzKTsKICAgICAgICAgICAgIHNsZXNzUmVtb3RlID0gc2xlc3NSZW1vdGVIb21lLmNyZWF0ZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgU3RhdGVsZXNzIGJlYW4uIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBTdGF0ZWxlc3MgYmVhbi4iKTsKIAogCi0JICAgIEJtcEhvbWUgYm1wSG9tZSA9IChCbXBIb21lKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0JtcCIpOworICAgICAgICBCbXBIb21lIGJtcEhvbWUgPSAoQm1wSG9tZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9CbXAiKTsKICAgICAgICAgICAgIFN0cmluZyBwa2V5ID0gIkEgQk1QIEJlYW4iOwogICAgICAgICAgICAgYm1wID0gYm1wSG9tZS5jcmVhdGUocGtleSk7CiAgICAgICAgICAgICBvYmogPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0JtcFJlbW90ZSIpOwpAQCAtNzcsMTQgKzc3LDE0IEBACiAgICAgICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9iaiwgQm1wUmVtb3RlSG9tZS5jbGFzcyk7CiAgICAgICAgICAgICBibXBSZW1vdGUgPSAoQm1wUmVtb3RlKQogICAgICAgICAgICAgICAgIGJtcFJlbW90ZUhvbWUuZmluZEJ5UHJpbWFyeUtleShwa2V5KTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIEJNUCBiZWFuLiIpOwotCSAgIAkgICAgIAotCSAgICB1dCA9IGNvbnRleHQuZ2V0VXNlclRyYW5zYWN0aW9uKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBCTVAgYmVhbi4iKTsKIAotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvdWxkbid0IGdldCBzZnVsIGJlYW4iKTsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgICAgICB1dCA9IGNvbnRleHQuZ2V0VXNlclRyYW5zYWN0aW9uKCk7CisKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb3VsZG4ndCBnZXQgc2Z1bCBiZWFuIik7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKIApAQCAtOTcsMjI0ICs5NywyMjQgQEAKICAgICAgICAgICAgIHdhcm11cFJlbW90ZSh0eXBlLCBmYWxzZSk7CiAgICAgICAgIH0KIAotCS8vIE1lYXN1cmUgbG9vcGluZyBhbmQgdGltaW5nIG92ZXJoZWFkIAotCWxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQl9Ci0JbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlvdmVyaGVhZCA9IGVuZCAtIGJlZ2luOworICAgIC8vIE1lYXN1cmUgbG9vcGluZyBhbmQgdGltaW5nIG92ZXJoZWFkCisgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgIH0KKyAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIG92ZXJoZWFkID0gZW5kIC0gYmVnaW47CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHdhcm11cExvY2FsKGludCB0eXBlLCBib29sZWFuIHR4KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkvLyBnZXQgSG90c3BvdCB3YXJtZWQgdXAJCi0JQ29tbW9uIGJlYW4gPSBwcmVMb2NhbCh0eXBlLCB0eCk7Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW4ucmVxdWlyZXNOZXcoKTsKLQkgICAgYmVhbi5ub3RTdXBwb3J0ZWQoKTsKLQl9Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW4ucmVxdWlyZWQoKTsKLQkgICAgaWYgKCB0eCApCi0JCWJlYW4ubWFuZGF0b3J5KCk7Ci0JICAgIGVsc2UKLQkJYmVhbi5uZXZlcigpOwotCSAgICBiZWFuLnN1cHBvcnRzKCk7Ci0JfQotCWlmICggdHggKSB0cnkgeyB1dC5jb21taXQoKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHsKKyAgICAvLyBnZXQgSG90c3BvdCB3YXJtZWQgdXAKKyAgICBDb21tb24gYmVhbiA9IHByZUxvY2FsKHR5cGUsIHR4KTsKKyAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKKyAgICAgICAgYmVhbi5yZXF1aXJlc05ldygpOworICAgICAgICBiZWFuLm5vdFN1cHBvcnRlZCgpOworICAgIH0KKyAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKKyAgICAgICAgYmVhbi5yZXF1aXJlZCgpOworICAgICAgICBpZiAoIHR4ICkKKyAgICAgICAgYmVhbi5tYW5kYXRvcnkoKTsKKyAgICAgICAgZWxzZQorICAgICAgICBiZWFuLm5ldmVyKCk7CisgICAgICAgIGJlYW4uc3VwcG9ydHMoKTsKKyAgICB9CisgICAgaWYgKCB0eCApIHRyeSB7IHV0LmNvbW1pdCgpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkgewogICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHdhcm11cFJlbW90ZShpbnQgdHlwZSwgYm9vbGVhbiB0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JLy8gZ2V0IEhvdHNwb3Qgd2FybWVkIHVwCQotCUNvbW1vblJlbW90ZSBiZWFuID0gcHJlUmVtb3RlKHR5cGUsIHR4KTsKLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhbi5yZXF1aXJlc05ldygpOwotCSAgICBiZWFuLm5vdFN1cHBvcnRlZCgpOwotCX0KLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhbi5yZXF1aXJlZCgpOwotCSAgICBpZiAoIHR4ICkKLQkJYmVhbi5tYW5kYXRvcnkoKTsKLQkgICAgZWxzZQotCQliZWFuLm5ldmVyKCk7Ci0JICAgIGJlYW4uc3VwcG9ydHMoKTsKLQl9Ci0JaWYgKCB0eCApIHRyeSB7IHV0LmNvbW1pdCgpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkgeworICAgIC8vIGdldCBIb3RzcG90IHdhcm1lZCB1cAorICAgIENvbW1vblJlbW90ZSBiZWFuID0gcHJlUmVtb3RlKHR5cGUsIHR4KTsKKyAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKKyAgICAgICAgYmVhbi5yZXF1aXJlc05ldygpOworICAgICAgICBiZWFuLm5vdFN1cHBvcnRlZCgpOworICAgIH0KKyAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKKyAgICAgICAgYmVhbi5yZXF1aXJlZCgpOworICAgICAgICBpZiAoIHR4ICkKKyAgICAgICAgYmVhbi5tYW5kYXRvcnkoKTsKKyAgICAgICAgZWxzZQorICAgICAgICBiZWFuLm5ldmVyKCk7CisgICAgICAgIGJlYW4uc3VwcG9ydHMoKTsKKyAgICB9CisgICAgaWYgKCB0eCApIHRyeSB7IHV0LmNvbW1pdCgpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkgewogICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSBDb21tb24gcHJlTG9jYWwoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAorICAgIHByaXZhdGUgQ29tbW9uIHByZUxvY2FsKGludCB0eXBlLCBib29sZWFuIHR4KQogICAgIHsKLQlpZiAoIHR4ICkgdHJ5IHsgdXQuYmVnaW4oKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHsKKyAgICBpZiAoIHR4ICkgdHJ5IHsgdXQuYmVnaW4oKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0JaWYgKCB0eXBlID09IENvbW1vbi5TVEFURUxFU1MgKQotCSAgICByZXR1cm4gc2xlc3M7Ci0JZWxzZSBpZiAoIHR5cGUgPT0gQ29tbW9uLlNUQVRFRlVMICkKLQkgICAgcmV0dXJuIHNmdWw7Ci0JZWxzZQotCSAgICByZXR1cm4gYm1wOworICAgIGlmICggdHlwZSA9PSBDb21tb24uU1RBVEVMRVNTICkKKyAgICAgICAgcmV0dXJuIHNsZXNzOworICAgIGVsc2UgaWYgKCB0eXBlID09IENvbW1vbi5TVEFURUZVTCApCisgICAgICAgIHJldHVybiBzZnVsOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGJtcDsKICAgICB9CiAKLSAgICBwcml2YXRlIENvbW1vblJlbW90ZSBwcmVSZW1vdGUoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAorICAgIHByaXZhdGUgQ29tbW9uUmVtb3RlIHByZVJlbW90ZShpbnQgdHlwZSwgYm9vbGVhbiB0eCkKICAgICB7Ci0JaWYgKCB0eCApIHRyeSB7IHV0LmJlZ2luKCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZXggKSB7CisgICAgaWYgKCB0eCApIHRyeSB7IHV0LmJlZ2luKCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZXggKSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCWlmICggdHlwZSA9PSBDb21tb24uU1RBVEVMRVNTICkKLQkgICAgcmV0dXJuIHNsZXNzUmVtb3RlOwotCWVsc2UgaWYgKCB0eXBlID09IENvbW1vbi5TVEFURUZVTCApCi0JICAgIHJldHVybiBzZnVsUmVtb3RlOwotCWVsc2UKLQkgICAgcmV0dXJuIGJtcFJlbW90ZTsKKyAgICBpZiAoIHR5cGUgPT0gQ29tbW9uLlNUQVRFTEVTUyApCisgICAgICAgIHJldHVybiBzbGVzc1JlbW90ZTsKKyAgICBlbHNlIGlmICggdHlwZSA9PSBDb21tb24uU1RBVEVGVUwgKQorICAgICAgICByZXR1cm4gc2Z1bFJlbW90ZTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBibXBSZW1vdGU7CiAgICAgfQogCiAKICAgICBwcml2YXRlIGZsb2F0IHBvc3QobG9uZyBiZWdpbiwgbG9uZyBlbmQsIGJvb2xlYW4gdHgpCiAgICAgewotCWlmICggdHggKSB0cnkgeyB1dC5jb21taXQoKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHsKKyAgICBpZiAoIHR4ICkgdHJ5IHsgdXQuY29tbWl0KCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZXggKSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCXJldHVybiAoZmxvYXQpKCAoKGRvdWJsZSkoZW5kLWJlZ2luLW92ZXJoZWFkKSkvKChkb3VibGUpSVRFUkFUSU9OUykgKiAxMDAwLjAgKTsKKyAgICByZXR1cm4gKGZsb2F0KSggKChkb3VibGUpKGVuZC1iZWdpbi1vdmVyaGVhZCkpLygoZG91YmxlKUlURVJBVElPTlMpICogMTAwMC4wICk7CiAgICAgfQogCi0gICAgcHVibGljIGZsb2F0IHJlcXVpcmVzTmV3KGludCB0eXBlLCBib29sZWFuIHR4KSAKKyAgICBwdWJsaWMgZmxvYXQgcmVxdWlyZXNOZXcoaW50IHR5cGUsIGJvb2xlYW4gdHgpCiAgICAgewotCUNvbW1vbiBiZWFuID0gcHJlTG9jYWwodHlwZSwgdHgpOwotCWxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhbi5yZXF1aXJlc05ldygpOwotCX0KLQlsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCXJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKKyAgICBDb21tb24gYmVhbiA9IHByZUxvY2FsKHR5cGUsIHR4KTsKKyAgICBsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CisgICAgICAgIGJlYW4ucmVxdWlyZXNOZXcoKTsKKyAgICB9CisgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICByZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CiAgICAgfQogCi0gICAgcHVibGljIGZsb2F0IG5vdFN1cHBvcnRlZChpbnQgdHlwZSwgYm9vbGVhbiB0eCkgCisgICAgcHVibGljIGZsb2F0IG5vdFN1cHBvcnRlZChpbnQgdHlwZSwgYm9vbGVhbiB0eCkKICAgICB7Ci0JQ29tbW9uIGJlYW4gPSBwcmVMb2NhbCh0eXBlLCB0eCk7Ci0JbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCWZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgewotCSAgICBiZWFuLm5vdFN1cHBvcnRlZCgpOwotCX0KLQlsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCXJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKKyAgICBDb21tb24gYmVhbiA9IHByZUxvY2FsKHR5cGUsIHR4KTsKKyAgICBsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CisgICAgICAgIGJlYW4ubm90U3VwcG9ydGVkKCk7CisgICAgfQorICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOwogICAgIH0KIAotICAgIHB1YmxpYyBmbG9hdCByZXF1aXJlZChpbnQgdHlwZSwgYm9vbGVhbiB0eCkgCisgICAgcHVibGljIGZsb2F0IHJlcXVpcmVkKGludCB0eXBlLCBib29sZWFuIHR4KQogICAgIHsKLQlDb21tb24gYmVhbiA9IHByZUxvY2FsKHR5cGUsIHR4KTsKLQlsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW4ucmVxdWlyZWQoKTsKLQl9Ci0JbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlyZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CisgICAgQ29tbW9uIGJlYW4gPSBwcmVMb2NhbCh0eXBlLCB0eCk7CisgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgICAgICBiZWFuLnJlcXVpcmVkKCk7CisgICAgfQorICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOwogICAgIH0KIAotICAgIHB1YmxpYyBmbG9hdCBtYW5kYXRvcnkoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAorICAgIHB1YmxpYyBmbG9hdCBtYW5kYXRvcnkoaW50IHR5cGUsIGJvb2xlYW4gdHgpCiAgICAgewotCUNvbW1vbiBiZWFuID0gcHJlTG9jYWwodHlwZSwgdHgpOwotCWxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhbi5tYW5kYXRvcnkoKTsKLQl9Ci0JbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlyZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CisgICAgQ29tbW9uIGJlYW4gPSBwcmVMb2NhbCh0eXBlLCB0eCk7CisgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgICAgICBiZWFuLm1hbmRhdG9yeSgpOworICAgIH0KKyAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKLSAgICBwdWJsaWMgZmxvYXQgbmV2ZXIoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAorICAgIHB1YmxpYyBmbG9hdCBuZXZlcihpbnQgdHlwZSwgYm9vbGVhbiB0eCkKICAgICB7Ci0JQ29tbW9uIGJlYW4gPSBwcmVMb2NhbCh0eXBlLCB0eCk7Ci0JbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCWZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgewotCSAgICBiZWFuLm5ldmVyKCk7Ci0JfQotCWxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOworICAgIENvbW1vbiBiZWFuID0gcHJlTG9jYWwodHlwZSwgdHgpOworICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKKyAgICAgICAgYmVhbi5uZXZlcigpOworICAgIH0KKyAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKLSAgICBwdWJsaWMgZmxvYXQgc3VwcG9ydHMoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAorICAgIHB1YmxpYyBmbG9hdCBzdXBwb3J0cyhpbnQgdHlwZSwgYm9vbGVhbiB0eCkKICAgICB7Ci0JQ29tbW9uIGJlYW4gPSBwcmVMb2NhbCh0eXBlLCB0eCk7Ci0JbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCWZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgewotCSAgICBiZWFuLnN1cHBvcnRzKCk7Ci0JfQotCWxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOworICAgIENvbW1vbiBiZWFuID0gcHJlTG9jYWwodHlwZSwgdHgpOworICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKKyAgICAgICAgYmVhbi5zdXBwb3J0cygpOworICAgIH0KKyAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKIAogICAgIHB1YmxpYyBmbG9hdCByZXF1aXJlc05ld1JlbW90ZShpbnQgdHlwZSwgYm9vbGVhbiB0eCkgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLQlDb21tb25SZW1vdGUgYmVhbiA9IHByZVJlbW90ZSh0eXBlLCB0eCk7Ci0JbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCWZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgewotCSAgICBiZWFuLnJlcXVpcmVzTmV3KCk7Ci0JfQotCWxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOworICAgIENvbW1vblJlbW90ZSBiZWFuID0gcHJlUmVtb3RlKHR5cGUsIHR4KTsKKyAgICBsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CisgICAgICAgIGJlYW4ucmVxdWlyZXNOZXcoKTsKKyAgICB9CisgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICByZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CiAgICAgfQogCiAgICAgcHVibGljIGZsb2F0IG5vdFN1cHBvcnRlZFJlbW90ZShpbnQgdHlwZSwgYm9vbGVhbiB0eCkgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLQlDb21tb25SZW1vdGUgYmVhbiA9IHByZVJlbW90ZSh0eXBlLCB0eCk7Ci0JbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCWZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgewotCSAgICBiZWFuLm5vdFN1cHBvcnRlZCgpOwotCX0KLQlsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCXJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKKyAgICBDb21tb25SZW1vdGUgYmVhbiA9IHByZVJlbW90ZSh0eXBlLCB0eCk7CisgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgICAgICBiZWFuLm5vdFN1cHBvcnRlZCgpOworICAgIH0KKyAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKICAgICBwdWJsaWMgZmxvYXQgcmVxdWlyZWRSZW1vdGUoaW50IHR5cGUsIGJvb2xlYW4gdHgpIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0JQ29tbW9uUmVtb3RlIGJlYW4gPSBwcmVSZW1vdGUodHlwZSwgdHgpOwotCWxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhbi5yZXF1aXJlZCgpOwotCX0KLQlsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCXJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKKyAgICBDb21tb25SZW1vdGUgYmVhbiA9IHByZVJlbW90ZSh0eXBlLCB0eCk7CisgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgICAgICBiZWFuLnJlcXVpcmVkKCk7CisgICAgfQorICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOwogICAgIH0KIAogICAgIHB1YmxpYyBmbG9hdCBtYW5kYXRvcnlSZW1vdGUoaW50IHR5cGUsIGJvb2xlYW4gdHgpIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0JQ29tbW9uUmVtb3RlIGJlYW4gPSBwcmVSZW1vdGUodHlwZSwgdHgpOwotCWxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhbi5tYW5kYXRvcnkoKTsKLQl9Ci0JbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlyZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CisgICAgQ29tbW9uUmVtb3RlIGJlYW4gPSBwcmVSZW1vdGUodHlwZSwgdHgpOworICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKKyAgICAgICAgYmVhbi5tYW5kYXRvcnkoKTsKKyAgICB9CisgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICByZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CiAgICAgfQogCiAgICAgcHVibGljIGZsb2F0IG5ldmVyUmVtb3RlKGludCB0eXBlLCBib29sZWFuIHR4KSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotCUNvbW1vblJlbW90ZSBiZWFuID0gcHJlUmVtb3RlKHR5cGUsIHR4KTsKLQlsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW4ubmV2ZXIoKTsKLQl9Ci0JbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlyZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CisgICAgQ29tbW9uUmVtb3RlIGJlYW4gPSBwcmVSZW1vdGUodHlwZSwgdHgpOworICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKKyAgICAgICAgYmVhbi5uZXZlcigpOworICAgIH0KKyAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKICAgICBwdWJsaWMgZmxvYXQgc3VwcG9ydHNSZW1vdGUoaW50IHR5cGUsIGJvb2xlYW4gdHgpIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0JQ29tbW9uUmVtb3RlIGJlYW4gPSBwcmVSZW1vdGUodHlwZSwgdHgpOwotCWxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhbi5zdXBwb3J0cygpOwotCX0KLQlsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCXJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKKyAgICBDb21tb25SZW1vdGUgYmVhbiA9IHByZVJlbW90ZSh0eXBlLCB0eCk7CisgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgICAgICBiZWFuLnN1cHBvcnRzKCk7CisgICAgfQorICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JY29udGV4dCA9IHNjOworICAgIGNvbnRleHQgPSBzYzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwvZWpiL1NmdWxFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsL2VqYi9TZnVsRUpCLmphdmEKaW5kZXggYmRiNDRiMS4uMzRjZDUwNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwvZWpiL1NmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9lamIvU2Z1bEVKQi5qYXZhCkBAIC0zNCwxMCArMzQsMTAgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykKICAgICB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgCisgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkKICAgICB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpCiAgICAge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9lamIvU2xlc3NFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsL2VqYi9TbGVzc0VKQi5qYXZhCmluZGV4IGNmNWI3ZDAuLjg0ZTU4NGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsL2VqYi9TbGVzc0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsL2VqYi9TbGVzc0VKQi5qYXZhCkBAIC0zNCwxMCArMzQsMTAgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykKICAgICB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgCisgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkKICAgICB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpCiAgICAge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvQ29tcGFyZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwyL0NvbXBhcmUuamF2YQppbmRleCBhODlkMzY5Li5lNmM3YjBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvQ29tcGFyZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsMi9Db21wYXJlLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogICAgICAgICBGaWxlIGZpbGUxID0gbmV3IEZpbGUoZmlsZTFOYW1lKTsKICAgICAgICAgRmlsZSBmaWxlMiA9IG5ldyBGaWxlKGZpbGUyTmFtZSk7Ci0gICAgICAgIAorCiAgICAgICAgIGZsb2F0IGFsbFJlc3VsdHMgPSAwOwogICAgICAgICBpbnQgdG90YWxSZXN1bHRzID0gMDsKIApAQCAtMzksMTYgKzM5LDE2IEBACiAKICAgICAgICAgICAgIExpbmVOdW1iZXJSZWFkZXIgcmVhZGVyMiA9IG5ldyBMaW5lTnVtYmVyUmVhZGVyCiAgICAgICAgICAgICAgICAgKG5ldyBGaWxlUmVhZGVyKGZpbGUyKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3RyaW5nIG5leHRMaW5lMSA9IHJlYWRlcjEucmVhZExpbmUoKTsKIAogICAgICAgICAgICAgd2hpbGUobmV4dExpbmUxICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgbmV4dExpbmUyID0gcmVhZGVyMi5yZWFkTGluZSgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIxID0gCisKKyAgICAgICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyMSA9CiAgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdUb2tlbml6ZXIobmV4dExpbmUxKTsKLSAgICAgICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyMiA9IAotICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKG5leHRMaW5lMik7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIyID0KKyAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1Rva2VuaXplcihuZXh0TGluZTIpOwogICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBjYXRlZ29yeSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgICAgICAgICAgICBib29sZWFuIHR4ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBpbnQgbnVtUmVzdWx0cyA9IDA7CkBAIC04Miw3ICs4Miw3IEBACiAKICAgICAgICAgICAgICAgICBuZXh0TGluZTEgPSByZWFkZXIxLnJlYWRMaW5lKCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7Ci0gICAgICAgICAgICB9IAorICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRvdGFsIHJlc3VsdHMgPSAiICsgdG90YWxSZXN1bHRzKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXZnIHBjZyBkaWYgPSAiICsgYWxsUmVzdWx0cyAvIHRvdGFsUmVzdWx0cyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsMi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDkzOTBhNTEuLmVjMmQwMTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsMi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsMi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1wZXJmLWxvY2FsMiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsMi9idWlsZC54bWwKaW5kZXggYTc4MGI3NS4uZTg1YzE0ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsMTAgKzYzLDEwIEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iNTAwMDAgMTAiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwyL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAzODA1ZTAzLi5kNWQyMGExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsMi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBpbnQgbnVtSXRlcmF0aW9ucyA9IDUwMDAwMDsKQEAgLTQxLDE2ICs0MSwxNiBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLXBlcmYtbG9jYWwySUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgIG51bUl0ZXJhdGlvbnMgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMF0pOwogICAgICAgICAgICAgbnVtVGhyZWFkcyA9IEludGVnZXIucGFyc2VJbnQoYXJnc1sxXSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgdHJ5IHsKQEAgLTU4LDI2ICs1OCwyNiBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOdW0gaXRlcmF0aW9ucyBzZXQgdG8gIiArIG51bUl0ZXJhdGlvbnMpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOdW0gdGhyZWFkcyBzZXQgdG8gIiArIG51bVRocmVhZHMpOwogCi0JICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCi0JICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lciAKLQkgICAgamF2YS5sYW5nLk9iamVjdCBvYmpyZWYgPSAKKyAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCisgICAgICAgIGphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0KICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1BlcmZvcm1hbmNlQXBwIik7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwogCi0JICAgIEhlbGxvSG9tZSAgaG9tZSA9IChIZWxsb0hvbWUpCisgICAgICAgIEhlbGxvSG9tZSAgaG9tZSA9IChIZWxsb0hvbWUpCiAgICAgICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgSGVsbG9Ib21lLmNsYXNzKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKIAogICAgICAgICAgICAgaGVsbG9zID0gbmV3IEhlbGxvW251bVRocmVhZHNdOwogICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bVRocmVhZHM7IGkrKykgewogICAgICAgICAgICAgICAgIGhlbGxvc1tpXSA9IGhvbWUuY3JlYXRlKG51bUl0ZXJhdGlvbnMpOwogICAgICAgICAgICAgfQotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7CiAKLQkgICAgLy8gaW52b2tlIG1ldGhvZCBvbiB0aGUgRUpCCi0JICAgIGRvUGVyZlRlc3QoKTsKKyAgICAgICAgLy8gaW52b2tlIG1ldGhvZCBvbiB0aGUgRUpCCisgICAgICAgIGRvUGVyZlRlc3QoKTsKIAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsMiBtYWluIiwgc3RhdC5QQVNTKTsKIApAQCAtODUsNjEgKzg1LDYxIEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsMiBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRvUGVyZlRlc3QoKSAKLQl0aHJvd3MgRXhjZXB0aW9uCisgICAgcHJpdmF0ZSB2b2lkIGRvUGVyZlRlc3QoKQorICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJcblN0YXRlZnVsIFNlc3Npb24gcmVzdWx0cyAobWljcm9zZWMpOiBcdHdpdGggdHggXHRubyB0eDoiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuU3RhdGVmdWwgU2Vzc2lvbiByZXN1bHRzIChtaWNyb3NlYyk6IFx0d2l0aCB0eCBcdG5vIHR4OiIpOwogICAgICAgICBoZWxsb3NbMF0ud2FybXVwKENvbW1vbi5TVEFURUZVTCk7Ci0gICAgICAgIAotCXJ1blRlc3RzKENvbW1vbi5TVEFURUZVTCk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuU3RhdGVsZXNzIFNlc3Npb24gcmVzdWx0cyAobWljcm9zZWMpOiBcdHdpdGggdHggXHRubyB0eDoiKTsKKyAgICBydW5UZXN0cyhDb21tb24uU1RBVEVGVUwpOworCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblN0YXRlbGVzcyBTZXNzaW9uIHJlc3VsdHMgKG1pY3Jvc2VjKTogXHR3aXRoIHR4IFx0bm8gdHg6Iik7CiAKICAgICAgICAgaGVsbG9zWzBdLndhcm11cChDb21tb24uU1RBVEVMRVNTKTsKLQlydW5UZXN0cyhDb21tb24uU1RBVEVMRVNTKTsKKyAgICBydW5UZXN0cyhDb21tb24uU1RBVEVMRVNTKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiXG5CTVAgRW50aXR5IHJlc3VsdHMgKG1pY3Jvc2VjKTogXHRcdHdpdGggdHggXHRubyB0eDoiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuQk1QIEVudGl0eSByZXN1bHRzIChtaWNyb3NlYyk6IFx0XHR3aXRoIHR4IFx0bm8gdHg6Iik7CiAgICAgICAgIGhlbGxvc1swXS53YXJtdXAoQ29tbW9uLkJNUCk7CiAKLQlydW5UZXN0cyhDb21tb24uQk1QKTsKKyAgICBydW5UZXN0cyhDb21tb24uQk1QKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgcnVuVGVzdHMoaW50IHR5cGUpCi0JdGhyb3dzIEV4Y2VwdGlvbgorICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CiAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjYXIgbm8gdHggICAgOiBcdFx0XHRcdCIgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY2FyIG5vIHR4ICAgIDogXHRcdFx0XHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHJ1blRlc3QodHlwZSwgSW52b2tlVHlwZS5DQVIsIGZhbHNlKSk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibm90U3VwcG9ydGVkIDogXHRcdFx0XHQiIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm5vdFN1cHBvcnRlZCA6IFx0XHRcdFx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBydW5UZXN0KHR5cGUsIEludm9rZVR5cGUuTk9UX1NVUFBPUlRFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKSArICJcdFx0IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHJ1blRlc3QodHlwZSwgSW52b2tlVHlwZS5OT1RfU1VQUE9SVEVELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKSk7CiAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzdXBwb3J0cyA6IFx0XHRcdFx0IiAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzdXBwb3J0cyA6IFx0XHRcdFx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBydW5UZXN0KHR5cGUsIEludm9rZVR5cGUuU1VQUE9SVFMsIHRydWUpICsgIlx0XHQiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcnVuVGVzdCh0eXBlLCBJbnZva2VUeXBlLlNVUFBPUlRTLCBmYWxzZSkgKTsKIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlcXVpcmVkIDogXHRcdFx0XHQiIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlcXVpcmVkIDogXHRcdFx0XHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHJ1blRlc3QodHlwZSwgSW52b2tlVHlwZS5SRVFVSVJFRCx0cnVlKSArICJcdFx0IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHJ1blRlc3QodHlwZSwgSW52b2tlVHlwZS5SRVFVSVJFRCwgZmFsc2UpICk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmVxdWlyZXNOZXcgOiBcdFx0XHRcdCIgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmVxdWlyZXNOZXcgOiBcdFx0XHRcdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcnVuVGVzdCh0eXBlLCBJbnZva2VUeXBlLlJFUVVJUkVTX05FVywgdHJ1ZSkgKyAiXHRcdCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBydW5UZXN0KHR5cGUsIEludm9rZVR5cGUuUkVRVUlSRVNfTkVXLCBmYWxzZSkgKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtYW5kYXRvcnkgOiBcdFx0XHRcdCIgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWFuZGF0b3J5IDogXHRcdFx0XHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHJ1blRlc3QodHlwZSwgSW52b2tlVHlwZS5NQU5EQVRPUlksIHRydWUpKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJuZXZlciA6IFx0XHRcdFx0XHRcdCIgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibmV2ZXIgOiBcdFx0XHRcdFx0XHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHJ1blRlc3QodHlwZSwgSW52b2tlVHlwZS5ORVZFUiwgZmFsc2UpICk7CiAKICAgICB9CiAKICAgICBwcml2YXRlIGZsb2F0IHJ1blRlc3QoaW50IHR5cGUsIEludm9rZVR5cGUgaW52b2tlVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHR4KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgSW52b2tlVGhyZWFkW10gdGhyZWFkcyA9IG5ldyBJbnZva2VUaHJlYWRbbnVtVGhyZWFkc107CiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1UaHJlYWRzOyBpKyspIHsKICAgICAgICAgICAgIHRocmVhZHNbaV0gPSBuZXcgSW52b2tlVGhyZWFkKGludm9rZVR5cGUsIHR5cGUsIGhlbGxvc1tpXSwgdHgpOwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gdG90YWwgLyBudW1UaHJlYWRzOwotICAgICAgICAKKwogICAgIH0KIAogICAgIGVudW0gSW52b2tlVHlwZSB7CkBAIC0xOTIsNTAgKzE5Miw1MCBAQAogCiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHN3aXRjaChpbnZva2VUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgY2FzZSBDQVIgOgogICAgICAgICAgICAgICAgICAgICByZXN1bHRUaW1lID0gaW52b2tlVGFyZ2V0LmNyZWF0ZUFjY2Vzc1JlbW92ZQogICAgICAgICAgICAgICAgICAgICAgICAgKGludm9rZUJlYW5UeXBlLCBpbnZva2VUeCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGNhc2UgTk9UX1NVUFBPUlRFRCA6CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFRpbWUgPSBpbnZva2VUYXJnZXQubm90U3VwcG9ydGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAoaW52b2tlQmVhblR5cGUsIGludm9rZVR4KTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgY2FzZSBTVVBQT1JUUyA6CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFRpbWUgPSBpbnZva2VUYXJnZXQuc3VwcG9ydHMKICAgICAgICAgICAgICAgICAgICAgICAgIChpbnZva2VCZWFuVHlwZSwgaW52b2tlVHgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBjYXNlIFJFUVVJUkVEIDoKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0VGltZSA9IGludm9rZVRhcmdldC5yZXF1aXJlZAogICAgICAgICAgICAgICAgICAgICAgICAgKGludm9rZUJlYW5UeXBlLCBpbnZva2VUeCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgCisKKwogICAgICAgICAgICAgICAgIGNhc2UgUkVRVUlSRVNfTkVXIDoKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0VGltZSA9IGludm9rZVRhcmdldC5yZXF1aXJlc05ldwogICAgICAgICAgICAgICAgICAgICAgICAgKGludm9rZUJlYW5UeXBlLCBpbnZva2VUeCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgCisKKwogICAgICAgICAgICAgICAgIGNhc2UgTUFOREFUT1JZIDoKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0VGltZSA9IGludm9rZVRhcmdldC5tYW5kYXRvcnkKICAgICAgICAgICAgICAgICAgICAgICAgIChpbnZva2VCZWFuVHlwZSwgaW52b2tlVHgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIAorCisKICAgICAgICAgICAgICAgICBjYXNlIE5FVkVSIDoKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0VGltZSA9IGludm9rZVRhcmdldC5uZXZlcgogICAgICAgICAgICAgICAgICAgICAgICAgKGludm9rZUJlYW5UeXBlLCBpbnZva2VUeCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsMi9lamIvQm1wRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvZWpiL0JtcEVKQi5qYXZhCmluZGV4IDIxODNiMjkuLjVlODBlMGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsMi9lamIvQm1wRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwyL2VqYi9CbXBFSkIuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogICAgIHB1YmxpYyBCbXBFSkIoKXt9CiAKICAgICBwdWJsaWMgU3RyaW5nIGVqYkNyZWF0ZShTdHJpbmcgcykgewotCXJldHVybiBzOworICAgIHJldHVybiBzOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoU3RyaW5nIHMpIHt9CkBAIC00MSwxMCArNDEsMTAgQEAKICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKQogICAgIHt9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKQogICAgIHt9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkKICAgICB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkKQEAgLTU3LDYgKzU3LDYgQEAKICAgICB7fQogCiAgICAgcHVibGljIFN0cmluZyBlamJGaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBzKSB7Ci0JcmV0dXJuIHM7CisgICAgcmV0dXJuIHM7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwyL2VqYi9IZWxsb0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwyL2VqYi9IZWxsb0VKQi5qYXZhCmluZGV4IDk5M2JlM2MuLmI3MzEzNDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsMi9lamIvSGVsbG9FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvZWpiL0hlbGxvRUpCLmphdmEKQEAgLTQzLDQ2ICs0Myw0NiBAQAogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKGludCBudW1JdGVyYXRpb25zKSB7CiAKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICBpdGVyYXRpb25zID0gbnVtSXRlcmF0aW9uczsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTnVtIGl0ZXJhdGlvbnMgc2V0IHRvICIgKyBpdGVyYXRpb25zKTsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgc2Z1bEhvbWUgPSAoU2Z1bEhvbWUpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2Z1bCIpOworICAgICAgICBzZnVsSG9tZSA9IChTZnVsSG9tZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TZnVsIik7CiAgICAgICAgICAgICBzZnVsID0gc2Z1bEhvbWUuY3JlYXRlKCk7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIFN0YXRlZnVsIGJlYW4uIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBTdGF0ZWZ1bCBiZWFuLiIpOwogCi0JICAgCSAgICAgCi0JICAgIHNsZXNzSG9tZSA9IChTbGVzc0hvbWUpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2xlc3MiKTsKKworICAgICAgICBzbGVzc0hvbWUgPSAoU2xlc3NIb21lKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NsZXNzIik7CiAgICAgICAgICAgICBzbGVzcyA9IHNsZXNzSG9tZS5jcmVhdGUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIFN0YXRlbGVzcyBiZWFuLiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgU3RhdGVsZXNzIGJlYW4uIik7CiAKIAotCSAgICBibXBIb21lID0gKEJtcEhvbWUpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvQm1wIik7Ci0gICAgICAgICAgICAKKyAgICAgICAgYm1wSG9tZSA9IChCbXBIb21lKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0JtcCIpOworCiAgICAgICAgICAgICBibXAgPSBibXBIb21lLmNyZWF0ZShwa2V5KTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIEJNUCBiZWFuLiIpOwotCSAgIAkgICAgIAotCSAgICB1dCA9IGNvbnRleHQuZ2V0VXNlclRyYW5zYWN0aW9uKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBCTVAgYmVhbi4iKTsKIAotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvdWxkbid0IGdldCBzZnVsIGJlYW4iKTsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgICAgICB1dCA9IGNvbnRleHQuZ2V0VXNlclRyYW5zYWN0aW9uKCk7CisKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb3VsZG4ndCBnZXQgc2Z1bCBiZWFuIik7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKIAotICAgIHB1YmxpYyBmbG9hdCBjcmVhdGVBY2Nlc3NSZW1vdmUoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAorICAgIHB1YmxpYyBmbG9hdCBjcmVhdGVBY2Nlc3NSZW1vdmUoaW50IHR5cGUsIGJvb2xlYW4gdHgpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCi0gICAgICAgCWxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogCiAgICAgICAgIGZvciAoIGludCBpPTA7IGk8aXRlcmF0aW9uczsgaSsrICkgewogICAgICAgICAgICAgQ29tbW9uIGJlYW4gPSBwcmVMb2NhbCh0eXBlLCB0eCwgdHJ1ZSk7CiAgICAgICAgICAgICBiZWFuLnJlcXVpcmVkKCk7CiAgICAgICAgICAgICBiZWFuLnJlbW92ZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIGZhbHNlKTsKICAgICB9CkBAIC05MSw0MiArOTEsNDIgQEAKICAgICAgICAgd2FybXVwTG9jYWwodHlwZSwgdHJ1ZSk7CiAgICAgICAgIHdhcm11cExvY2FsKHR5cGUsIGZhbHNlKTsKIAotCS8vIE1lYXN1cmUgbG9vcGluZyBhbmQgdGltaW5nIG92ZXJoZWFkIAotCWxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlmb3IgKCBpbnQgaT0wOyBpPGl0ZXJhdGlvbnM7IGkrKyApIHsKLQl9Ci0JbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlvdmVyaGVhZCA9IGVuZCAtIGJlZ2luOworICAgIC8vIE1lYXN1cmUgbG9vcGluZyBhbmQgdGltaW5nIG92ZXJoZWFkCisgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIGZvciAoIGludCBpPTA7IGk8aXRlcmF0aW9uczsgaSsrICkgeworICAgIH0KKyAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIG92ZXJoZWFkID0gZW5kIC0gYmVnaW47CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHdhcm11cExvY2FsKGludCB0eXBlLCBib29sZWFuIHR4KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkvLyBnZXQgSG90c3BvdCB3YXJtZWQgdXAJCi0JQ29tbW9uIGJlYW4gPSBwcmVMb2NhbCh0eXBlLCB0eCk7Ci0JZm9yICggaW50IGk9MDsgaTxpdGVyYXRpb25zOyBpKysgKSB7Ci0JICAgIGJlYW4ucmVxdWlyZXNOZXcoKTsKLQkgICAgYmVhbi5ub3RTdXBwb3J0ZWQoKTsKLQl9Ci0JZm9yICggaW50IGk9MDsgaTxpdGVyYXRpb25zOyBpKysgKSB7Ci0JICAgIGJlYW4ucmVxdWlyZWQoKTsKLQkgICAgaWYgKCB0eCApCi0JCWJlYW4ubWFuZGF0b3J5KCk7Ci0JICAgIGVsc2UKLQkJYmVhbi5uZXZlcigpOwotCSAgICBiZWFuLnN1cHBvcnRzKCk7Ci0JfQotCWlmICggdHggKSB0cnkgeyB1dC5jb21taXQoKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHsKKyAgICAvLyBnZXQgSG90c3BvdCB3YXJtZWQgdXAKKyAgICBDb21tb24gYmVhbiA9IHByZUxvY2FsKHR5cGUsIHR4KTsKKyAgICBmb3IgKCBpbnQgaT0wOyBpPGl0ZXJhdGlvbnM7IGkrKyApIHsKKyAgICAgICAgYmVhbi5yZXF1aXJlc05ldygpOworICAgICAgICBiZWFuLm5vdFN1cHBvcnRlZCgpOworICAgIH0KKyAgICBmb3IgKCBpbnQgaT0wOyBpPGl0ZXJhdGlvbnM7IGkrKyApIHsKKyAgICAgICAgYmVhbi5yZXF1aXJlZCgpOworICAgICAgICBpZiAoIHR4ICkKKyAgICAgICAgYmVhbi5tYW5kYXRvcnkoKTsKKyAgICAgICAgZWxzZQorICAgICAgICBiZWFuLm5ldmVyKCk7CisgICAgICAgIGJlYW4uc3VwcG9ydHMoKTsKKyAgICB9CisgICAgaWYgKCB0eCApIHRyeSB7IHV0LmNvbW1pdCgpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkgewogICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSBDb21tb24gcHJlTG9jYWwoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAorICAgIHByaXZhdGUgQ29tbW9uIHByZUxvY2FsKGludCB0eXBlLCBib29sZWFuIHR4KQogICAgIHsKICAgICAgICAgcmV0dXJuIHByZUxvY2FsKHR5cGUsIHR4LCBmYWxzZSk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBDb21tb24gcHJlTG9jYWwoaW50IHR5cGUsIGJvb2xlYW4gdHgsIGJvb2xlYW4gY3JlYXRlTmV3KSAKKyAgICBwcml2YXRlIENvbW1vbiBwcmVMb2NhbChpbnQgdHlwZSwgYm9vbGVhbiB0eCwgYm9vbGVhbiBjcmVhdGVOZXcpCiAgICAgewotCWlmICggdHggKSB0cnkgeyB1dC5iZWdpbigpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkgeworICAgIGlmICggdHggKSB0cnkgeyB1dC5iZWdpbigpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICAgICAgdHJ5IHsKQEAgLTE0NCw4MiArMTQ0LDgyIEBACiAKICAgICBwcml2YXRlIGZsb2F0IHBvc3QobG9uZyBiZWdpbiwgbG9uZyBlbmQsIGJvb2xlYW4gdHgpCiAgICAgewotCWlmICggdHggKSB0cnkgeyB1dC5jb21taXQoKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHsKKyAgICBpZiAoIHR4ICkgdHJ5IHsgdXQuY29tbWl0KCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZXggKSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCXJldHVybiAoZmxvYXQpKCAoKGRvdWJsZSkoZW5kLWJlZ2luLW92ZXJoZWFkKSkvKChkb3VibGUpaXRlcmF0aW9ucykgKiAxMDAwLjAgKTsKKyAgICByZXR1cm4gKGZsb2F0KSggKChkb3VibGUpKGVuZC1iZWdpbi1vdmVyaGVhZCkpLygoZG91YmxlKWl0ZXJhdGlvbnMpICogMTAwMC4wICk7CiAgICAgfQogCi0gICAgcHVibGljIGZsb2F0IHJlcXVpcmVzTmV3KGludCB0eXBlLCBib29sZWFuIHR4KSAKKyAgICBwdWJsaWMgZmxvYXQgcmVxdWlyZXNOZXcoaW50IHR5cGUsIGJvb2xlYW4gdHgpCiAgICAgewotCUNvbW1vbiBiZWFuID0gcHJlTG9jYWwodHlwZSwgdHgpOwotCWxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlmb3IgKCBpbnQgaT0wOyBpPGl0ZXJhdGlvbnM7IGkrKyApIHsKLQkgICAgYmVhbi5yZXF1aXJlc05ldygpOwotCX0KLQlsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCXJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKKyAgICBDb21tb24gYmVhbiA9IHByZUxvY2FsKHR5cGUsIHR4KTsKKyAgICBsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgZm9yICggaW50IGk9MDsgaTxpdGVyYXRpb25zOyBpKysgKSB7CisgICAgICAgIGJlYW4ucmVxdWlyZXNOZXcoKTsKKyAgICB9CisgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICByZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CiAgICAgfQogCi0gICAgcHVibGljIGZsb2F0IG5vdFN1cHBvcnRlZChpbnQgdHlwZSwgYm9vbGVhbiB0eCkgCisgICAgcHVibGljIGZsb2F0IG5vdFN1cHBvcnRlZChpbnQgdHlwZSwgYm9vbGVhbiB0eCkKICAgICB7Ci0JQ29tbW9uIGJlYW4gPSBwcmVMb2NhbCh0eXBlLCB0eCk7Ci0JbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCWZvciAoIGludCBpPTA7IGk8aXRlcmF0aW9uczsgaSsrICkgewotCSAgICBiZWFuLm5vdFN1cHBvcnRlZCgpOwotCX0KLQlsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCXJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKKyAgICBDb21tb24gYmVhbiA9IHByZUxvY2FsKHR5cGUsIHR4KTsKKyAgICBsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgZm9yICggaW50IGk9MDsgaTxpdGVyYXRpb25zOyBpKysgKSB7CisgICAgICAgIGJlYW4ubm90U3VwcG9ydGVkKCk7CisgICAgfQorICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOwogICAgIH0KIAotICAgIHB1YmxpYyBmbG9hdCByZXF1aXJlZChpbnQgdHlwZSwgYm9vbGVhbiB0eCkgCisgICAgcHVibGljIGZsb2F0IHJlcXVpcmVkKGludCB0eXBlLCBib29sZWFuIHR4KQogICAgIHsKLQlDb21tb24gYmVhbiA9IHByZUxvY2FsKHR5cGUsIHR4KTsKLQlsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JZm9yICggaW50IGk9MDsgaTxpdGVyYXRpb25zOyBpKysgKSB7Ci0JICAgIGJlYW4ucmVxdWlyZWQoKTsKLQl9Ci0JbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlyZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CisgICAgQ29tbW9uIGJlYW4gPSBwcmVMb2NhbCh0eXBlLCB0eCk7CisgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIGZvciAoIGludCBpPTA7IGk8aXRlcmF0aW9uczsgaSsrICkgeworICAgICAgICBiZWFuLnJlcXVpcmVkKCk7CisgICAgfQorICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOwogICAgIH0KIAotICAgIHB1YmxpYyBmbG9hdCBtYW5kYXRvcnkoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAorICAgIHB1YmxpYyBmbG9hdCBtYW5kYXRvcnkoaW50IHR5cGUsIGJvb2xlYW4gdHgpCiAgICAgewotCUNvbW1vbiBiZWFuID0gcHJlTG9jYWwodHlwZSwgdHgpOwotCWxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlmb3IgKCBpbnQgaT0wOyBpPGl0ZXJhdGlvbnM7IGkrKyApIHsKLQkgICAgYmVhbi5tYW5kYXRvcnkoKTsKLQl9Ci0JbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlyZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CisgICAgQ29tbW9uIGJlYW4gPSBwcmVMb2NhbCh0eXBlLCB0eCk7CisgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIGZvciAoIGludCBpPTA7IGk8aXRlcmF0aW9uczsgaSsrICkgeworICAgICAgICBiZWFuLm1hbmRhdG9yeSgpOworICAgIH0KKyAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKLSAgICBwdWJsaWMgZmxvYXQgbmV2ZXIoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAorICAgIHB1YmxpYyBmbG9hdCBuZXZlcihpbnQgdHlwZSwgYm9vbGVhbiB0eCkKICAgICB7Ci0JQ29tbW9uIGJlYW4gPSBwcmVMb2NhbCh0eXBlLCB0eCk7Ci0JbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCWZvciAoIGludCBpPTA7IGk8aXRlcmF0aW9uczsgaSsrICkgewotCSAgICBiZWFuLm5ldmVyKCk7Ci0JfQotCWxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOworICAgIENvbW1vbiBiZWFuID0gcHJlTG9jYWwodHlwZSwgdHgpOworICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICBmb3IgKCBpbnQgaT0wOyBpPGl0ZXJhdGlvbnM7IGkrKyApIHsKKyAgICAgICAgYmVhbi5uZXZlcigpOworICAgIH0KKyAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKLSAgICBwdWJsaWMgZmxvYXQgc3VwcG9ydHMoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAorICAgIHB1YmxpYyBmbG9hdCBzdXBwb3J0cyhpbnQgdHlwZSwgYm9vbGVhbiB0eCkKICAgICB7Ci0JQ29tbW9uIGJlYW4gPSBwcmVMb2NhbCh0eXBlLCB0eCk7Ci0JbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCWZvciAoIGludCBpPTA7IGk8aXRlcmF0aW9uczsgaSsrICkgewotCSAgICBiZWFuLnN1cHBvcnRzKCk7Ci0JfQotCWxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOworICAgIENvbW1vbiBiZWFuID0gcHJlTG9jYWwodHlwZSwgdHgpOworICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICBmb3IgKCBpbnQgaT0wOyBpPGl0ZXJhdGlvbnM7IGkrKyApIHsKKyAgICAgICAgYmVhbi5zdXBwb3J0cygpOworICAgIH0KKyAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKIAogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQljb250ZXh0ID0gc2M7CisgICAgY29udGV4dCA9IHNjOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvZWpiL1NmdWxFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsMi9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IDM2NDhjODYuLjhmMjY3ZjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsMi9lamIvU2Z1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsMi9lamIvU2Z1bEVKQi5qYXZhCkBAIC0zNCwxMCArMzQsMTAgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykKICAgICB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgCisgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkKICAgICB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpCiAgICAge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvZWpiL1NsZXNzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvZWpiL1NsZXNzRUpCLmphdmEKaW5kZXggOTIzMjhjYi4uYjgxOTlkOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwyL2VqYi9TbGVzc0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsMi9lamIvU2xlc3NFSkIuamF2YQpAQCAtMzQsMTAgKzM0LDEwIEBACiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpCiAgICAge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpCiAgICAge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKQogICAgIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvdGltZXIxL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi90aW1lcjEvYnVpbGQucHJvcGVydGllcwppbmRleCA3ZGI5YTUzLi5jYjI2Nzc5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi90aW1lcjEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi90aW1lcjEvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItcGVyZi10aW1lcjEiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL3RpbWVyMS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi90aW1lcjEvYnVpbGQueG1sCmluZGV4IDFhODBjYzAuLmYwOGU5MGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL3RpbWVyMS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvdGltZXIxL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzUsMTQgKzc1LDE0IEBACiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEgMTAwMCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi90aW1lcjEvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvdGltZXIxL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBmODllZjg4Li4zNDMwOTFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi90aW1lcjEvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL3RpbWVyMS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI3LDkgKzI3LDkgQEAKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdE5vdFJ1biAgICA9ICJURVNUIE5PVCBSVU4iOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0UGFzc2VkICAgID0gIlRFU1QgUEFTU0VEIjsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdEZhaWxlZCAgICA9ICJURVNUIEZBSUxFRCI7Ci0gICAgCi0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKworCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBARUpCIFRpbWVyU2Vzc2lvbiB0aW1lclNlc3Npb247CkBAIC0zNyw3ICszNyw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgQFJlc291cmNlKG1hcHBlZE5hbWU9Imptcy9lamJfcGVyZl90aW1lcjFfVFFDRiIpCiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNGYWN0b3J5OwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgQFJlc291cmNlKG1hcHBlZE5hbWU9Imptcy9lamJfcGVyZl90aW1lcjFfVFF1ZXVlIikgCisgICAgcHJpdmF0ZSBzdGF0aWMgQFJlc291cmNlKG1hcHBlZE5hbWU9Imptcy9lamJfcGVyZl90aW1lcjFfVFF1ZXVlIikKICAgICAgICAgUXVldWUgcXVldWU7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CkBAIC01NiwzMCArNTYsMzAgQEAKIAogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KGludCBpbnRlcnZhbCwgaW50IG1heFRpbWVvdXRzKSB7CiAgICAgICAgIFN0cmluZyByZXN1bHQgPSBrVGVzdFBhc3NlZDsKLSAgICAgICAgUXVldWVDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBudWxsOyAKKyAgICAgICAgUXVldWVDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBudWxsOwogCiAgICAgICAgIHRpbWVyU2Vzc2lvbi5jcmVhdGVUaW1lcihpbnRlcnZhbCwgbWF4VGltZW91dHMpOwogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgcGVyaW9kaWMgdGltZXIgd2l0aCBpbnRlcnZhbCBvZiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVydmFsICsgIiBtaWxsaXNlY29uZHMuIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWF4IHRpbWVvdXRzID0gIiArIG1heFRpbWVvdXRzKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBxY0ZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICBRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9IAorICAgICAgICAgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPQogICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uY3JlYXRlUXVldWVTZXNzaW9uKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwogICAgICAgICAgICAgUXVldWVSZWNlaXZlciByZWNlaXZlciA9IHNlc3Npb24uY3JlYXRlUmVjZWl2ZXIocXVldWUpOwogICAgICAgICAgICAgY29ubmVjdGlvbi5zdGFydCgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciBtZXNzYWdlIik7CiAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSByZWNlaXZlci5yZWNlaXZlKCk7CiAgICAgICAgICAgICBUZXh0TWVzc2FnZSB0ZXh0TXNnID0gKFRleHRNZXNzYWdlKW1lc3NhZ2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICggKG1lc3NhZ2UgPT0gbnVsbCkgfHwgCisKKyAgICAgICAgICAgIGlmICggKG1lc3NhZ2UgPT0gbnVsbCkgfHwKICAgICAgICAgICAgICAgICAgKCEgdGV4dE1zZy5nZXRUZXh0KCkuZXF1YWxzKCJlamJUaW1lb3V0KCkgaW52b2tlZCIpKSkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJSZWNlaXZlZCBhIG51bGwgbWVzc2FnZSAuLi4gVGltZU91dCBmYWlsZWQhISIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXNzYWdlIDogIiArIG1lc3NhZ2UpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAKKworCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygidGltZXIxICIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvdGltZXIxL2VqYi9UaW1lclNlc3Npb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL3RpbWVyMS9lamIvVGltZXJTZXNzaW9uLmphdmEKaW5kZXggMWFlODRjYy4uZWU0MjBlMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvdGltZXIxL2VqYi9UaW1lclNlc3Npb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi90aW1lcjEvZWpiL1RpbWVyU2Vzc2lvbi5qYXZhCkBAIC0yMiw2ICsyMiw2IEBACiBwdWJsaWMgaW50ZXJmYWNlIFRpbWVyU2Vzc2lvbiB7CiAKICAgICBwdWJsaWMgdm9pZCBjcmVhdGVUaW1lcihpbnQgaW50ZXJ2YWxJbk1pbGxpcywgaW50IG51bVRpbWVvdXRzKTsKLSAgICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi90aW1lcjEvZWpiL1RpbWVyU2Vzc2lvbkVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvdGltZXIxL2VqYi9UaW1lclNlc3Npb25FSkIuamF2YQppbmRleCBiNGIwMWQwLi5iMzFlMzFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi90aW1lcjEvZWpiL1RpbWVyU2Vzc2lvbkVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL3RpbWVyMS9lamIvVGltZXJTZXNzaW9uRUpCLmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbiBjb25uZWN0aW9uOwogCiAgICAgcHJpdmF0ZSBRdWV1ZVNlc3Npb24gc2Vzc2lvbjsKLSAgICAKKwogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqbXMvZWpiX3BlcmZfdGltZXIxX1RRdWV1ZSIpCiAgICAgcHJpdmF0ZSBRdWV1ZSBxdWV1ZTsKIApAQCAtNTgsNyArNTgsNyBAQAogICAgIHB1YmxpYyB2b2lkIGVqYlRpbWVvdXQoVGltZXIgdGltZXIpIHsKIAogICAgICAgICB0aW1lb3V0Q291bnQrKzsKLSAgICAgICAgCisKICAgICAgICAgaWYoIHRpbWVvdXRDb3VudCA8PSBtYXhUaW1lb3V0cyApIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNzQsNyArNzQsNyBAQAogCiAgICAgICAgICAgICBjb25uZWN0aW9uID0gcWNGYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwogCi0gICAgICAgICAgICBRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9IAorICAgICAgICAgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPQogICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uY3JlYXRlUXVldWVTZXNzaW9uKHRydWUsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CiAgICAgICAgICAgICBzZW5kZXIgID0gc2Vzc2lvbi5jcmVhdGVTZW5kZXIocXVldWUpOwogCkBAIC05Niw3ICs5Niw3IEBACiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KLQl9CisgICAgfQogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wb20ueG1sCmluZGV4IGJiNTk1MDEuLmNkNzk0MGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wb20ueG1sCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5tYWluLnRlc3RzPC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPnRlc3RzPC9hcnRpZmFjdElkPgogICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+Ci0gICAgPG5hbWU+R2xhc3NGaXNoIGRldnRlc3RzIGVqYjwvbmFtZT4gIAorICAgIDxuYW1lPkdsYXNzRmlzaCBkZXZ0ZXN0cyBlamI8L25hbWU+CiAgICAgPG1vZHVsZXM+CiAgICAgICAgIDwhLS0gbW9kdWxlPnF1aWNrbG9vazwvbW9kdWxlIC0tPgogICAgIDwvbW9kdWxlcz4KQEAgLTQ0LDEzICs0NCwxMyBAQAogICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWFudHJ1bi1wbHVnaW48L2FydGlmYWN0SWQ+CiAgICAgICAgICAgPHZlcnNpb24+MS44PC92ZXJzaW9uPgogICAgICAgICAgIDxkZXBlbmRlbmNpZXM+Ci0JICAgIDxkZXBlbmRlbmN5PgotCSAgICAgIDxncm91cElkPmNvbS5zdW48L2dyb3VwSWQ+Ci0JICAgICAgPGFydGlmYWN0SWQ+dG9vbHM8L2FydGlmYWN0SWQ+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgIDxncm91cElkPmNvbS5zdW48L2dyb3VwSWQ+CisgICAgICAgICAgPGFydGlmYWN0SWQ+dG9vbHM8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuOC4wPC92ZXJzaW9uPgotCSAgICAgIDxzY29wZT5zeXN0ZW08L3Njb3BlPgotCSAgICAgIDxzeXN0ZW1QYXRoPiR7ZW52LkpBVkFfSE9NRX0vbGliL3Rvb2xzLmphcjwvc3lzdGVtUGF0aD4KLQkgICA8L2RlcGVuZGVuY3k+ICAgICAKKyAgICAgICAgICA8c2NvcGU+c3lzdGVtPC9zY29wZT4KKyAgICAgICAgICA8c3lzdGVtUGF0aD4ke2Vudi5KQVZBX0hPTUV9L2xpYi90b29scy5qYXI8L3N5c3RlbVBhdGg+CisgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICAgPC9kZXBlbmRlbmNpZXM+CiAgICAgICAgICAgPGV4ZWN1dGlvbnM+CiAgICAgICAgICAgICA8ZXhlY3V0aW9uPgpAQCAtNTgsOCArNTgsOCBAQAogICAgICAgICAgICAgICA8cGhhc2U+dGVzdDwvcGhhc2U+CiAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgogICAgICAgICAgICAgICAgIDx0YXJnZXQgbmFtZT0iYW50VGVzdHMiPgotICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRlc3RNb2RzIiB2YWx1ZT0iYWxsIi8+ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYW50LWNvbnRyaWItcGF0aCIgdmFsdWU9IiR7bWF2ZW4uZGVwZW5kZW5jeS5hbnQtY29udHJpYi5hbnQtY29udHJpYi5qYXIucGF0aH0iLz4gIAorICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRlc3RNb2RzIiB2YWx1ZT0iYWxsIi8+CisgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYW50LWNvbnRyaWItcGF0aCIgdmFsdWU9IiR7bWF2ZW4uZGVwZW5kZW5jeS5hbnQtY29udHJpYi5hbnQtY29udHJpYi5qYXIucGF0aH0iLz4KICAgICAgICAgICAgICAgICAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIHRhcmdldD0iYW50VGVzdHMiLz4KICAgICAgICAgICAgICAgICA8L3RhcmdldD4KICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgpAQCAtNzIsNyArNzIsNyBAQAogICAgICAgICAgICAgICA8cGhhc2U+Y2xlYW48L3BoYXNlPgogICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuLXJlc3VsdCI+Ci0gICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYW50LWNvbnRyaWItcGF0aCIgdmFsdWU9IiR7bWF2ZW4uZGVwZW5kZW5jeS5hbnQtY29udHJpYi5hbnQtY29udHJpYi5qYXIucGF0aH0iLz4gIAorICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImFudC1jb250cmliLXBhdGgiIHZhbHVlPSIke21hdmVuLmRlcGVuZGVuY3kuYW50LWNvbnRyaWIuYW50LWNvbnRyaWIuamFyLnBhdGh9Ii8+CiAgICAgICAgICAgICAgICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgdGFyZ2V0PSJjbGVhbi1yZXN1bHQiLz4KICAgICAgICAgICAgICAgICA8L3RhcmdldD4KICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3J1bl90ZXN0LnNoIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3J1bl90ZXN0LnNoCmluZGV4IDU5NTFlODQuLmZjNjFlZmMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ydW5fdGVzdC5zaAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcnVuX3Rlc3Quc2gKQEAgLTE3LDI4NCArMTcsMjg0IEBACiAKIHRlc3RfcnVuX2VqYigpewogCi0Jcm0gLXJmICR7UzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEKLQljZCAke0FQU19IT01FfQotCWVjaG8gIkFTX0FETUlOX1BBU1NXT1JEPSIgPiB0ZW1wcHdkCi0JY2F0ICR7QVBTX0hPTUV9L3RlbXBwd2QKKyAgICBybSAtcmYgJHtTMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMQorICAgIGNkICR7QVBTX0hPTUV9CisgICAgZWNobyAiQVNfQURNSU5fUEFTU1dPUkQ9IiA+IHRlbXBwd2QKKyAgICBjYXQgJHtBUFNfSE9NRX0vdGVtcHB3ZAogCi0JQURNSU5fUE9SVD00NTcwNwotCUpNU19QT1JUPTQ1NzA4Ci0JSk1YX1BPUlQ9NDU3MDkKLQlPUkJfUE9SVD00NTcxMAotCVNTTF9QT1JUPTQ1NzExCi0JSU5TVEFOQ0VfUE9SVD00NTcxMgotCUFMVEVSTkFURV9QT1JUPTQ1NzEzCi0JT1JCX1NTTF9QT1JUPTQ1NzE0Ci0JT1JCX1NTTF9NVVRVQUxBVVRIX1BPUlQ9NDU3MTUKLQlEQl9QT1JUPTQ1NzE2Ci0JREJfUE9SVF8yPTQ1NzE3CisgICAgQURNSU5fUE9SVD00NTcwNworICAgIEpNU19QT1JUPTQ1NzA4CisgICAgSk1YX1BPUlQ9NDU3MDkKKyAgICBPUkJfUE9SVD00NTcxMAorICAgIFNTTF9QT1JUPTQ1NzExCisgICAgSU5TVEFOQ0VfUE9SVD00NTcxMgorICAgIEFMVEVSTkFURV9QT1JUPTQ1NzEzCisgICAgT1JCX1NTTF9QT1JUPTQ1NzE0CisgICAgT1JCX1NTTF9NVVRVQUxBVVRIX1BPUlQ9NDU3MTUKKyAgICBEQl9QT1JUPTQ1NzE2CisgICAgREJfUE9SVF8yPTQ1NzE3CiAKLQkke1MxQVNfSE9NRX0vYmluL2FzYWRtaW4gXAotCQktLXVzZXIgYW5vbnltb3VzIFwKLQkJLS1wYXNzd29yZGZpbGUgJHtBUFNfSE9NRX0vdGVtcHB3ZCBcCi0JCWNyZWF0ZS1kb21haW4gXAotCQkJLS1hZG1pbnBvcnQgJHtBRE1JTl9QT1JUfSBcCi0JCQktLWRvbWFpbnByb3BlcnRpZXMgam1zLnBvcnQ9JHtKTVNfUE9SVH06ZG9tYWluLmpteFBvcnQ9JHtKTVhfUE9SVH06b3JiLmxpc3RlbmVyLnBvcnQ9JHtPUkJfUE9SVH06aHR0cC5zc2wucG9ydD0ke1NTTF9QT1JUfTpvcmIuc3NsLnBvcnQ9JHtPUkJfU1NMX1BPUlR9Om9yYi5tdXR1YWxhdXRoLnBvcnQ9JHtPUkJfU1NMX01VVFVBTEFVVEhfUE9SVH0gXAotCQkJLS1pbnN0YW5jZXBvcnQgJHtJTlNUQU5DRV9QT1JUfSBcCi0JCQlkb21haW4xCisgICAgJHtTMUFTX0hPTUV9L2Jpbi9hc2FkbWluIFwKKyAgICAgICAgLS11c2VyIGFub255bW91cyBcCisgICAgICAgIC0tcGFzc3dvcmRmaWxlICR7QVBTX0hPTUV9L3RlbXBwd2QgXAorICAgICAgICBjcmVhdGUtZG9tYWluIFwKKyAgICAgICAgICAgIC0tYWRtaW5wb3J0ICR7QURNSU5fUE9SVH0gXAorICAgICAgICAgICAgLS1kb21haW5wcm9wZXJ0aWVzIGptcy5wb3J0PSR7Sk1TX1BPUlR9OmRvbWFpbi5qbXhQb3J0PSR7Sk1YX1BPUlR9Om9yYi5saXN0ZW5lci5wb3J0PSR7T1JCX1BPUlR9Omh0dHAuc3NsLnBvcnQ9JHtTU0xfUE9SVH06b3JiLnNzbC5wb3J0PSR7T1JCX1NTTF9QT1JUfTpvcmIubXV0dWFsYXV0aC5wb3J0PSR7T1JCX1NTTF9NVVRVQUxBVVRIX1BPUlR9IFwKKyAgICAgICAgICAgIC0taW5zdGFuY2Vwb3J0ICR7SU5TVEFOQ0VfUE9SVH0gXAorICAgICAgICAgICAgZG9tYWluMQogCi0JIyBDcmVhdGUKLQllY2hvICJhZG1pbi5kb21haW49ZG9tYWluMQotCWFkbWluLmRvbWFpbi5kaXI9XCR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucwotCWFkbWluLnBvcnQ9JHtBRE1JTl9QT1JUfQotCWFkbWluLnVzZXI9YW5vbnltb3VzCi0JYWRtaW4uaG9zdD1sb2NhbGhvc3QKLQlodHRwLnBvcnQ9JHtJTlNUQU5DRV9QT1JUfQotCWh0dHBzLnBvcnQ9JHtTU0xfUE9SVH0KLQlodHRwLmhvc3Q9bG9jYWxob3N0Ci0JaHR0cC5hZGRyZXNzPTEyNy4wLjAuMQotCWh0dHAuYWx0ZXJuYXRlLnBvcnQ9JHtBTFRFUk5BVEVfUE9SVH0KLQlvcmIucG9ydD0ke09SQl9QT1JUfQotCWFkbWluLnBhc3N3b3JkPQotCXNzbC5wYXNzd29yZD1jaGFuZ2VpdAotCW1hc3Rlci5wYXNzd29yZD1jaGFuZ2VpdAotCWFkbWluLnBhc3N3b3JkLmZpbGU9XCR7ZW52LkFQU19IT01FfS9jb25maWcvYWRtaW5wYXNzd29yZC50eHQKLQlhcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZT1zZXJ2ZXIKLQljb25maWcuZG90dGVkbmFtZS5wcmVmaXg9c2VydmVyCi0JcmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4PWRvbWFpbi5yZXNvdXJjZXMKLQlyZXN1bHRzLm1haWxob3N0PWxvY2FsaG9zdAotCXJlc3VsdHMubWFpbGVyPVFMVGVzdHNGb3JQRUluc3RhbGxPckRBU0luRUVJbnN0YWxsQHN1bi5jb20KLQlyZXN1bHRzLm1haWxlZT15b3VybmFtZUBzdW4uY29tCi0JYXV0b2RlcGxveS5kaXI9XCR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9cJHthZG1pbi5kb21haW59L2F1dG9kZXBsb3kKLQlwcmVjb21waWxlanNwPXRydWUKLQlqdm0ubWF4cGVybXNpemU9MTkybQotCWFwcHNlcnZlci5pbnN0YW5jZS5kaXI9XCR7YWRtaW4uZG9tYWluLmRpcn0vXCR7YWRtaW4uZG9tYWlufSIgPiBjb25maWcucHJvcGVydGllcworICAgICMgQ3JlYXRlCisgICAgZWNobyAiYWRtaW4uZG9tYWluPWRvbWFpbjEKKyAgICBhZG1pbi5kb21haW4uZGlyPVwke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMKKyAgICBhZG1pbi5wb3J0PSR7QURNSU5fUE9SVH0KKyAgICBhZG1pbi51c2VyPWFub255bW91cworICAgIGFkbWluLmhvc3Q9bG9jYWxob3N0CisgICAgaHR0cC5wb3J0PSR7SU5TVEFOQ0VfUE9SVH0KKyAgICBodHRwcy5wb3J0PSR7U1NMX1BPUlR9CisgICAgaHR0cC5ob3N0PWxvY2FsaG9zdAorICAgIGh0dHAuYWRkcmVzcz0xMjcuMC4wLjEKKyAgICBodHRwLmFsdGVybmF0ZS5wb3J0PSR7QUxURVJOQVRFX1BPUlR9CisgICAgb3JiLnBvcnQ9JHtPUkJfUE9SVH0KKyAgICBhZG1pbi5wYXNzd29yZD0KKyAgICBzc2wucGFzc3dvcmQ9Y2hhbmdlaXQKKyAgICBtYXN0ZXIucGFzc3dvcmQ9Y2hhbmdlaXQKKyAgICBhZG1pbi5wYXNzd29yZC5maWxlPVwke2Vudi5BUFNfSE9NRX0vY29uZmlnL2FkbWlucGFzc3dvcmQudHh0CisgICAgYXBwc2VydmVyLmluc3RhbmNlLm5hbWU9c2VydmVyCisgICAgY29uZmlnLmRvdHRlZG5hbWUucHJlZml4PXNlcnZlcgorICAgIHJlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeD1kb21haW4ucmVzb3VyY2VzCisgICAgcmVzdWx0cy5tYWlsaG9zdD1sb2NhbGhvc3QKKyAgICByZXN1bHRzLm1haWxlcj1RTFRlc3RzRm9yUEVJbnN0YWxsT3JEQVNJbkVFSW5zdGFsbEBzdW4uY29tCisgICAgcmVzdWx0cy5tYWlsZWU9eW91cm5hbWVAc3VuLmNvbQorICAgIGF1dG9kZXBsb3kuZGlyPVwke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvXCR7YWRtaW4uZG9tYWlufS9hdXRvZGVwbG95CisgICAgcHJlY29tcGlsZWpzcD10cnVlCisgICAganZtLm1heHBlcm1zaXplPTE5Mm0KKyAgICBhcHBzZXJ2ZXIuaW5zdGFuY2UuZGlyPVwke2FkbWluLmRvbWFpbi5kaXJ9L1wke2FkbWluLmRvbWFpbn0iID4gY29uZmlnLnByb3BlcnRpZXMKIAotCShqcHMgfGdyZXAgTWFpbiB8Y3V0IC1mMSAtZCIgIiB8IHhhcmdzIGtpbGwgLTkgID4gL2Rldi9udWxsIDI+JjEpIHx8IHRydWUKKyAgICAoanBzIHxncmVwIE1haW4gfGN1dCAtZjEgLWQiICIgfCB4YXJncyBraWxsIC05ICA+IC9kZXYvbnVsbCAyPiYxKSB8fCB0cnVlCiAKLQljZCAke1MxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2NvbmZpZy8KLQlzZWQgInMvMTUyNy8ke0RCX1BPUlR9L2ciIGRvbWFpbi54bWwgPiBkb21haW4ueG1sLnJlcGxhY2VkCi0JbXYgZG9tYWluLnhtbC5yZXBsYWNlZCBkb21haW4ueG1sCi0JZ3JlcCBQb3J0TnVtYmVyIGRvbWFpbi54bWwKKyAgICBjZCAke1MxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2NvbmZpZy8KKyAgICBzZWQgInMvMTUyNy8ke0RCX1BPUlR9L2ciIGRvbWFpbi54bWwgPiBkb21haW4ueG1sLnJlcGxhY2VkCisgICAgbXYgZG9tYWluLnhtbC5yZXBsYWNlZCBkb21haW4ueG1sCisgICAgZ3JlcCBQb3J0TnVtYmVyIGRvbWFpbi54bWwKIAotCWNkICR7QVBTX0hPTUV9L2NvbmZpZwotCShybSBkZXJieS5wcm9wZXJ0aWVzLnJlcGxhY2VkICA+IC9kZXYvbnVsbCAyPiYxKSB8fCB0cnVlCi0Jc2VkICJzLzE1MjcvJHtEQl9QT1JUfS9nIiBkZXJieS5wcm9wZXJ0aWVzID4gZGVyYnkucHJvcGVydGllcy5yZXBsYWNlZAotCXJtIGRlcmJ5LnByb3BlcnRpZXMKLQlzZWQgInMvMTUyOC8ke0RCX1BPUlRfMn0vZyIgZGVyYnkucHJvcGVydGllcy5yZXBsYWNlZCA+IGRlcmJ5LnByb3BlcnRpZXMKLQljYXQgZGVyYnkucHJvcGVydGllcwotCXJtIC1yZiAke0FQU19IT01FfS90ZXN0X3Jlc3VsdHMqCi0JY2QgJHtBUFNfSE9NRX0vZGV2dGVzdHMvZWpiCi0Jcm0gY291bnQudHh0IHx8IHRydWUKKyAgICBjZCAke0FQU19IT01FfS9jb25maWcKKyAgICAocm0gZGVyYnkucHJvcGVydGllcy5yZXBsYWNlZCAgPiAvZGV2L251bGwgMj4mMSkgfHwgdHJ1ZQorICAgIHNlZCAicy8xNTI3LyR7REJfUE9SVH0vZyIgZGVyYnkucHJvcGVydGllcyA+IGRlcmJ5LnByb3BlcnRpZXMucmVwbGFjZWQKKyAgICBybSBkZXJieS5wcm9wZXJ0aWVzCisgICAgc2VkICJzLzE1MjgvJHtEQl9QT1JUXzJ9L2ciIGRlcmJ5LnByb3BlcnRpZXMucmVwbGFjZWQgPiBkZXJieS5wcm9wZXJ0aWVzCisgICAgY2F0IGRlcmJ5LnByb3BlcnRpZXMKKyAgICBybSAtcmYgJHtBUFNfSE9NRX0vdGVzdF9yZXN1bHRzKgorICAgIGNkICR7QVBTX0hPTUV9L2RldnRlc3RzL2VqYgorICAgIHJtIGNvdW50LnR4dCB8fCB0cnVlCiAKLQlhbnQgJHtUQVJHRVR9IHJlcG9ydC1yZXN1bHQgLURkYi5wb3J0PSR7REJfUE9SVH0gLURkYi5wb3J0LjI9JHtEQl9QT1JUXzJ9IHx0ZWUgJFRFU1RfUlVOX0xPRworICAgIGFudCAke1RBUkdFVH0gcmVwb3J0LXJlc3VsdCAtRGRiLnBvcnQ9JHtEQl9QT1JUfSAtRGRiLnBvcnQuMj0ke0RCX1BPUlRfMn0gfHRlZSAkVEVTVF9SVU5fTE9HCiB9CiAKIHRlc3RfcnVuX2VqYl93ZWIoKXsKIAotCXJtIC1yZiAkUzFBU19IT01FL2RvbWFpbnMvZG9tYWluMQorICAgIHJtIC1yZiAkUzFBU19IT01FL2RvbWFpbnMvZG9tYWluMQogCi0JZXhwb3J0IEFETUlOX1BPUlQ9NDU3MDcgXAotCQkJCSBKTVNfUE9SVD00NTcwOCBcCi0JCQkJIEpNWF9QT1JUPTQ1NzA5IFwKLQkJCQkgT1JCX1BPUlQ9NDU3MTAgXAotCQkJCSBTU0xfUE9SVD00NTcxMSBcCi0JCQkJIElOU1RBTkNFX1BPUlQ9NDU3MTIgXAotCQkJCSBJTlNUQU5DRV9IVFRQU19QT1JUPTQ1NzE4IFwKLQkJCQkgSU5TVEFOQ0VfUE9SVF8yPTQ1NzE5IFwKLQkJCQkgSU5TVEFOQ0VfUE9SVF8zPTQ1NzIwIFwKLQkJCQkgQUxURVJOQVRFX1BPUlQ9NDU3MTMgXAotCQkJCSBPUkJfU1NMX1BPUlQ9NDU3MTQgXAotCQkJCSBPUkJfU1NMX01VVFVBTEFVVEhfUE9SVD00NTcxNSBcCi0JCQkJIERCX1BPUlQ9NDU3MTYgXAotCQkJCSBEQl9QT1JUXzI9NDU3MTcKLQllbnYKKyAgICBleHBvcnQgQURNSU5fUE9SVD00NTcwNyBcCisgICAgICAgICAgICAgICAgIEpNU19QT1JUPTQ1NzA4IFwKKyAgICAgICAgICAgICAgICAgSk1YX1BPUlQ9NDU3MDkgXAorICAgICAgICAgICAgICAgICBPUkJfUE9SVD00NTcxMCBcCisgICAgICAgICAgICAgICAgIFNTTF9QT1JUPTQ1NzExIFwKKyAgICAgICAgICAgICAgICAgSU5TVEFOQ0VfUE9SVD00NTcxMiBcCisgICAgICAgICAgICAgICAgIElOU1RBTkNFX0hUVFBTX1BPUlQ9NDU3MTggXAorICAgICAgICAgICAgICAgICBJTlNUQU5DRV9QT1JUXzI9NDU3MTkgXAorICAgICAgICAgICAgICAgICBJTlNUQU5DRV9QT1JUXzM9NDU3MjAgXAorICAgICAgICAgICAgICAgICBBTFRFUk5BVEVfUE9SVD00NTcxMyBcCisgICAgICAgICAgICAgICAgIE9SQl9TU0xfUE9SVD00NTcxNCBcCisgICAgICAgICAgICAgICAgIE9SQl9TU0xfTVVUVUFMQVVUSF9QT1JUPTQ1NzE1IFwKKyAgICAgICAgICAgICAgICAgREJfUE9SVD00NTcxNiBcCisgICAgICAgICAgICAgICAgIERCX1BPUlRfMj00NTcxNworICAgIGVudgogCi0JY2QgJHtBUFNfSE9NRX0KKyAgICBjZCAke0FQU19IT01FfQogCi0JZWNobyAiQVNfQURNSU5fUEFTU1dPUkQ9IiA+IHRlbXBwd2QKLQljYXQgJHtBUFNfSE9NRX0vdGVtcHB3ZAotCSR7UzFBU19IT01FfS9iaW4vYXNhZG1pbiBcCi0JCS0tdXNlciBhbm9ueW1vdXMgXAotCQktLXBhc3N3b3JkZmlsZSAke0FQU19IT01FfS90ZW1wcHdkIFwKLQkJY3JlYXRlLWRvbWFpbiBcCi0JCQktLWFkbWlucG9ydCAke0FETUlOX1BPUlR9IFwKLQkJCS0tZG9tYWlucHJvcGVydGllcyBqbXMucG9ydD0ke0pNU19QT1JUfTpkb21haW4uam14UG9ydD0ke0pNWF9QT1JUfTpvcmIubGlzdGVuZXIucG9ydD0ke09SQl9QT1JUfTpodHRwLnNzbC5wb3J0PSR7U1NMX1BPUlR9Om9yYi5zc2wucG9ydD0ke09SQl9TU0xfUE9SVH06b3JiLm11dHVhbGF1dGgucG9ydD0ke09SQl9TU0xfTVVUVUFMQVVUSF9QT1JUfSBcCi0JCQktLWluc3RhbmNlcG9ydCAke0lOU1RBTkNFX1BPUlR9IFwKLQkJCWRvbWFpbjEKKyAgICBlY2hvICJBU19BRE1JTl9QQVNTV09SRD0iID4gdGVtcHB3ZAorICAgIGNhdCAke0FQU19IT01FfS90ZW1wcHdkCisgICAgJHtTMUFTX0hPTUV9L2Jpbi9hc2FkbWluIFwKKyAgICAgICAgLS11c2VyIGFub255bW91cyBcCisgICAgICAgIC0tcGFzc3dvcmRmaWxlICR7QVBTX0hPTUV9L3RlbXBwd2QgXAorICAgICAgICBjcmVhdGUtZG9tYWluIFwKKyAgICAgICAgICAgIC0tYWRtaW5wb3J0ICR7QURNSU5fUE9SVH0gXAorICAgICAgICAgICAgLS1kb21haW5wcm9wZXJ0aWVzIGptcy5wb3J0PSR7Sk1TX1BPUlR9OmRvbWFpbi5qbXhQb3J0PSR7Sk1YX1BPUlR9Om9yYi5saXN0ZW5lci5wb3J0PSR7T1JCX1BPUlR9Omh0dHAuc3NsLnBvcnQ9JHtTU0xfUE9SVH06b3JiLnNzbC5wb3J0PSR7T1JCX1NTTF9QT1JUfTpvcmIubXV0dWFsYXV0aC5wb3J0PSR7T1JCX1NTTF9NVVRVQUxBVVRIX1BPUlR9IFwKKyAgICAgICAgICAgIC0taW5zdGFuY2Vwb3J0ICR7SU5TVEFOQ0VfUE9SVH0gXAorICAgICAgICAgICAgZG9tYWluMQogCi0JIyBDcmVhdGUKLQllY2hvICJhZG1pbi5kb21haW49ZG9tYWluMQotCWFkbWluLmRvbWFpbi5kaXI9XCR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucwotCWFkbWluLnBvcnQ9JHtBRE1JTl9QT1JUfQotCWFkbWluLnVzZXI9YW5vbnltb3VzCi0JYWRtaW4uaG9zdD1sb2NhbGhvc3QKLQlodHRwLnBvcnQ9JHtJTlNUQU5DRV9QT1JUfQotCWh0dHBzLnBvcnQ9JHtTU0xfUE9SVH0KLQlodHRwLmhvc3Q9bG9jYWxob3N0Ci0JaHR0cC5hZGRyZXNzPTEyNy4wLjAuMQotCWh0dHAuYWx0ZXJuYXRlLnBvcnQ9JHtBTFRFUk5BVEVfUE9SVH0KLQlvcmIucG9ydD0ke09SQl9QT1JUfQotCWFkbWluLnBhc3N3b3JkPQotCXNzbC5wYXNzd29yZD1jaGFuZ2VpdAotCW1hc3Rlci5wYXNzd29yZD1jaGFuZ2VpdAotCWFkbWluLnBhc3N3b3JkLmZpbGU9XCR7ZW52LkFQU19IT01FfS9jb25maWcvYWRtaW5wYXNzd29yZC50eHQKLQlhcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZT1zZXJ2ZXIKLQljb25maWcuZG90dGVkbmFtZS5wcmVmaXg9c2VydmVyCi0JcmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4PWRvbWFpbi5yZXNvdXJjZXMKLQlyZXN1bHRzLm1haWxob3N0PWxvY2FsaG9zdAotCXJlc3VsdHMubWFpbGVyPVFMVGVzdHNGb3JQRUluc3RhbGxPckRBU0luRUVJbnN0YWxsQHN1bi5jb20KLQlyZXN1bHRzLm1haWxlZT15b3VybmFtZUBzdW4uY29tCi0JYXV0b2RlcGxveS5kaXI9XCR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9cJHthZG1pbi5kb21haW59L2F1dG9kZXBsb3kKLQlwcmVjb21waWxlanNwPXRydWUKLQlqdm0ubWF4cGVybXNpemU9MTkybQotCWFwcHNlcnZlci5pbnN0YW5jZS5kaXI9XCR7YWRtaW4uZG9tYWluLmRpcn0vXCR7YWRtaW4uZG9tYWlufSIgPiBjb25maWcucHJvcGVydGllcworICAgICMgQ3JlYXRlCisgICAgZWNobyAiYWRtaW4uZG9tYWluPWRvbWFpbjEKKyAgICBhZG1pbi5kb21haW4uZGlyPVwke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMKKyAgICBhZG1pbi5wb3J0PSR7QURNSU5fUE9SVH0KKyAgICBhZG1pbi51c2VyPWFub255bW91cworICAgIGFkbWluLmhvc3Q9bG9jYWxob3N0CisgICAgaHR0cC5wb3J0PSR7SU5TVEFOQ0VfUE9SVH0KKyAgICBodHRwcy5wb3J0PSR7U1NMX1BPUlR9CisgICAgaHR0cC5ob3N0PWxvY2FsaG9zdAorICAgIGh0dHAuYWRkcmVzcz0xMjcuMC4wLjEKKyAgICBodHRwLmFsdGVybmF0ZS5wb3J0PSR7QUxURVJOQVRFX1BPUlR9CisgICAgb3JiLnBvcnQ9JHtPUkJfUE9SVH0KKyAgICBhZG1pbi5wYXNzd29yZD0KKyAgICBzc2wucGFzc3dvcmQ9Y2hhbmdlaXQKKyAgICBtYXN0ZXIucGFzc3dvcmQ9Y2hhbmdlaXQKKyAgICBhZG1pbi5wYXNzd29yZC5maWxlPVwke2Vudi5BUFNfSE9NRX0vY29uZmlnL2FkbWlucGFzc3dvcmQudHh0CisgICAgYXBwc2VydmVyLmluc3RhbmNlLm5hbWU9c2VydmVyCisgICAgY29uZmlnLmRvdHRlZG5hbWUucHJlZml4PXNlcnZlcgorICAgIHJlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeD1kb21haW4ucmVzb3VyY2VzCisgICAgcmVzdWx0cy5tYWlsaG9zdD1sb2NhbGhvc3QKKyAgICByZXN1bHRzLm1haWxlcj1RTFRlc3RzRm9yUEVJbnN0YWxsT3JEQVNJbkVFSW5zdGFsbEBzdW4uY29tCisgICAgcmVzdWx0cy5tYWlsZWU9eW91cm5hbWVAc3VuLmNvbQorICAgIGF1dG9kZXBsb3kuZGlyPVwke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvXCR7YWRtaW4uZG9tYWlufS9hdXRvZGVwbG95CisgICAgcHJlY29tcGlsZWpzcD10cnVlCisgICAganZtLm1heHBlcm1zaXplPTE5Mm0KKyAgICBhcHBzZXJ2ZXIuaW5zdGFuY2UuZGlyPVwke2FkbWluLmRvbWFpbi5kaXJ9L1wke2FkbWluLmRvbWFpbn0iID4gY29uZmlnLnByb3BlcnRpZXMKIAotCShqcHMgfGdyZXAgTWFpbiB8Y3V0IC1mMSAtZCIgIiB8IHhhcmdzIGtpbGwgLTkgID4gL2Rldi9udWxsIDI+JjEpIHx8IHRydWUKKyAgICAoanBzIHxncmVwIE1haW4gfGN1dCAtZjEgLWQiICIgfCB4YXJncyBraWxsIC05ICA+IC9kZXYvbnVsbCAyPiYxKSB8fCB0cnVlCiAKLQljZCAke1MxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2NvbmZpZy8KLQlzZWQgInMvMTUyNy8ke0RCX1BPUlR9L2ciIGRvbWFpbi54bWwgPiBkb21haW4ueG1sLnJlcGxhY2VkCi0JbXYgZG9tYWluLnhtbC5yZXBsYWNlZCBkb21haW4ueG1sCi0JZ3JlcCBQb3J0TnVtYmVyIGRvbWFpbi54bWwKKyAgICBjZCAke1MxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2NvbmZpZy8KKyAgICBzZWQgInMvMTUyNy8ke0RCX1BPUlR9L2ciIGRvbWFpbi54bWwgPiBkb21haW4ueG1sLnJlcGxhY2VkCisgICAgbXYgZG9tYWluLnhtbC5yZXBsYWNlZCBkb21haW4ueG1sCisgICAgZ3JlcCBQb3J0TnVtYmVyIGRvbWFpbi54bWwKIAotCWNkICR7QVBTX0hPTUV9L2NvbmZpZwotCShybSBkZXJieS5wcm9wZXJ0aWVzLnJlcGxhY2VkICA+IC9kZXYvbnVsbCAyPiYxKSB8fCB0cnVlCi0Jc2VkICJzLzE1MjcvJHtEQl9QT1JUfS9nIiBkZXJieS5wcm9wZXJ0aWVzID4gZGVyYnkucHJvcGVydGllcy5yZXBsYWNlZAotCXJtIGRlcmJ5LnByb3BlcnRpZXMKLQlzZWQgInMvMTUyOC8ke0RCX1BPUlRfMn0vZyIgZGVyYnkucHJvcGVydGllcy5yZXBsYWNlZCA+IGRlcmJ5LnByb3BlcnRpZXMKLQljYXQgZGVyYnkucHJvcGVydGllcwotCWNkICR7QVBTX0hPTUV9L2RldnRlc3RzL2VqYgotCXJtIGNvdW50LnR4dCB8fCB0cnVlCi0JYW50ICR7VEFSR0VUfSByZXBvcnQtcmVzdWx0IC1EZGIucG9ydD0ke0RCX1BPUlR9IC1EZGIucG9ydC4yPSR7REJfUE9SVF8yfSB8dGVlICRURVNUX1JVTl9MT0cKLQljYXQgJHtTMUFTX0hPTUV9L2RhdGFiYXNlcy9kZXJieS5sb2cKLQllZ3JlcCAnRElEIE5PVCBSVU49ICowJyBjb3VudC50eHQgfHwgdHJ1ZQorICAgIGNkICR7QVBTX0hPTUV9L2NvbmZpZworICAgIChybSBkZXJieS5wcm9wZXJ0aWVzLnJlcGxhY2VkICA+IC9kZXYvbnVsbCAyPiYxKSB8fCB0cnVlCisgICAgc2VkICJzLzE1MjcvJHtEQl9QT1JUfS9nIiBkZXJieS5wcm9wZXJ0aWVzID4gZGVyYnkucHJvcGVydGllcy5yZXBsYWNlZAorICAgIHJtIGRlcmJ5LnByb3BlcnRpZXMKKyAgICBzZWQgInMvMTUyOC8ke0RCX1BPUlRfMn0vZyIgZGVyYnkucHJvcGVydGllcy5yZXBsYWNlZCA+IGRlcmJ5LnByb3BlcnRpZXMKKyAgICBjYXQgZGVyYnkucHJvcGVydGllcworICAgIGNkICR7QVBTX0hPTUV9L2RldnRlc3RzL2VqYgorICAgIHJtIGNvdW50LnR4dCB8fCB0cnVlCisgICAgYW50ICR7VEFSR0VUfSByZXBvcnQtcmVzdWx0IC1EZGIucG9ydD0ke0RCX1BPUlR9IC1EZGIucG9ydC4yPSR7REJfUE9SVF8yfSB8dGVlICRURVNUX1JVTl9MT0cKKyAgICBjYXQgJHtTMUFTX0hPTUV9L2RhdGFiYXNlcy9kZXJieS5sb2cKKyAgICBlZ3JlcCAnRElEIE5PVCBSVU49ICowJyBjb3VudC50eHQgfHwgdHJ1ZQogfQogCiAKIHRlc3RfcnVuX2VqYl90aW1lcl9jbHVzdGVyKCl7CiAKLQlybSAtcmYgJHtTMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMQorICAgIHJtIC1yZiAke1MxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xCiAKLQlleHBvcnQgQURNSU5fUE9SVD00NTcwNyBcCi0JCQkJIEpNU19QT1JUPTQ1NzA4IFwKLQkJCQkgSk1YX1BPUlQ9NDU3MDkgXAotCQkJCSBPUkJfUE9SVD00NTcxMCBcCi0JCQkJIFNTTF9QT1JUPTQ1NzExIFwKLQkJCQkgSU5TVEFOQ0VfUE9SVD00NTcxMiBcCi0JCQkJIElOU1RBTkNFX0hUVFBfUE9SVD00NTcyMSBcCi0JCQkJIElOU1RBTkNFX0hUVFBTX1BPUlQ9NDU3MTggXAotCQkJCSBJTlNUQU5DRV9QT1JUXzI9NDU3MTkgXAotCQkJCSBJTlNUQU5DRV9QT1JUXzM9NDU3MjAgXAotCQkJCSBBTFRFUk5BVEVfUE9SVD00NTcxMyBcCi0JCQkJIE9SQl9TU0xfUE9SVD00NTcxNCBcCi0JCQkJIE9SQl9TU0xfTVVUVUFMQVVUSF9QT1JUPTQ1NzE1IFwKLQkJCQkgREJfUE9SVD00NTcxNiBcCi0JCQkJIERCX1BPUlRfMj00NTcxNwotCWVudgorICAgIGV4cG9ydCBBRE1JTl9QT1JUPTQ1NzA3IFwKKyAgICAgICAgICAgICAgICAgSk1TX1BPUlQ9NDU3MDggXAorICAgICAgICAgICAgICAgICBKTVhfUE9SVD00NTcwOSBcCisgICAgICAgICAgICAgICAgIE9SQl9QT1JUPTQ1NzEwIFwKKyAgICAgICAgICAgICAgICAgU1NMX1BPUlQ9NDU3MTEgXAorICAgICAgICAgICAgICAgICBJTlNUQU5DRV9QT1JUPTQ1NzEyIFwKKyAgICAgICAgICAgICAgICAgSU5TVEFOQ0VfSFRUUF9QT1JUPTQ1NzIxIFwKKyAgICAgICAgICAgICAgICAgSU5TVEFOQ0VfSFRUUFNfUE9SVD00NTcxOCBcCisgICAgICAgICAgICAgICAgIElOU1RBTkNFX1BPUlRfMj00NTcxOSBcCisgICAgICAgICAgICAgICAgIElOU1RBTkNFX1BPUlRfMz00NTcyMCBcCisgICAgICAgICAgICAgICAgIEFMVEVSTkFURV9QT1JUPTQ1NzEzIFwKKyAgICAgICAgICAgICAgICAgT1JCX1NTTF9QT1JUPTQ1NzE0IFwKKyAgICAgICAgICAgICAgICAgT1JCX1NTTF9NVVRVQUxBVVRIX1BPUlQ9NDU3MTUgXAorICAgICAgICAgICAgICAgICBEQl9QT1JUPTQ1NzE2IFwKKyAgICAgICAgICAgICAgICAgREJfUE9SVF8yPTQ1NzE3CisgICAgZW52CiAKLQljZCAke0FQU19IT01FfQorICAgIGNkICR7QVBTX0hPTUV9CiAKLQllY2hvICJBU19BRE1JTl9QQVNTV09SRD0iID4gdGVtcHB3ZAotCWNhdCAke0FQU19IT01FfS90ZW1wcHdkCi0JJHtTMUFTX0hPTUV9L2Jpbi9hc2FkbWluIFwKLQkJLS11c2VyIGFub255bW91cyBcCi0JCS0tcGFzc3dvcmRmaWxlICR7QVBTX0hPTUV9L3RlbXBwd2QgXAotCQljcmVhdGUtZG9tYWluIFwKLQkJCS0tYWRtaW5wb3J0ICR7QURNSU5fUE9SVH0gXAotCQkJLS1kb21haW5wcm9wZXJ0aWVzIGptcy5wb3J0PSR7Sk1TX1BPUlR9OmRvbWFpbi5qbXhQb3J0PSR7Sk1YX1BPUlR9Om9yYi5saXN0ZW5lci5wb3J0PSR7T1JCX1BPUlR9Omh0dHAuc3NsLnBvcnQ9JHtTU0xfUE9SVH06b3JiLnNzbC5wb3J0PSR7T1JCX1NTTF9QT1JUfTpvcmIubXV0dWFsYXV0aC5wb3J0PSR7T1JCX1NTTF9NVVRVQUxBVVRIX1BPUlR9IFwKLQkJCS0taW5zdGFuY2Vwb3J0ICR7SU5TVEFOQ0VfUE9SVH0gXAotCQkJZG9tYWluMQorICAgIGVjaG8gIkFTX0FETUlOX1BBU1NXT1JEPSIgPiB0ZW1wcHdkCisgICAgY2F0ICR7QVBTX0hPTUV9L3RlbXBwd2QKKyAgICAke1MxQVNfSE9NRX0vYmluL2FzYWRtaW4gXAorICAgICAgICAtLXVzZXIgYW5vbnltb3VzIFwKKyAgICAgICAgLS1wYXNzd29yZGZpbGUgJHtBUFNfSE9NRX0vdGVtcHB3ZCBcCisgICAgICAgIGNyZWF0ZS1kb21haW4gXAorICAgICAgICAgICAgLS1hZG1pbnBvcnQgJHtBRE1JTl9QT1JUfSBcCisgICAgICAgICAgICAtLWRvbWFpbnByb3BlcnRpZXMgam1zLnBvcnQ9JHtKTVNfUE9SVH06ZG9tYWluLmpteFBvcnQ9JHtKTVhfUE9SVH06b3JiLmxpc3RlbmVyLnBvcnQ9JHtPUkJfUE9SVH06aHR0cC5zc2wucG9ydD0ke1NTTF9QT1JUfTpvcmIuc3NsLnBvcnQ9JHtPUkJfU1NMX1BPUlR9Om9yYi5tdXR1YWxhdXRoLnBvcnQ9JHtPUkJfU1NMX01VVFVBTEFVVEhfUE9SVH0gXAorICAgICAgICAgICAgLS1pbnN0YW5jZXBvcnQgJHtJTlNUQU5DRV9QT1JUfSBcCisgICAgICAgICAgICBkb21haW4xCiAKLQkjIENyZWF0ZQotCWVjaG8gImFkbWluLmRvbWFpbj1kb21haW4xCi0JYWRtaW4uZG9tYWluLmRpcj1cJHtlbnYuUzFBU19IT01FfS9kb21haW5zCi0JYWRtaW4ucG9ydD0ke0FETUlOX1BPUlR9Ci0JYWRtaW4udXNlcj1hbm9ueW1vdXMKLQlhZG1pbi5ob3N0PWxvY2FsaG9zdAotCWh0dHAucG9ydD0ke0lOU1RBTkNFX1BPUlR9Ci0JaHR0cHMucG9ydD0ke1NTTF9QT1JUfQotCWluc3RhbmNlLmh0dHAucG9ydD0ke0lOU1RBTkNFX0hUVFBfUE9SVH0KLQlpbnN0YW5jZS5odHRwcy5wb3J0PSR7SU5TVEFOQ0VfSFRUUFNfUE9SVH0KLQlodHRwLmhvc3Q9bG9jYWxob3N0Ci0JaHR0cC5hZGRyZXNzPTEyNy4wLjAuMQotCWh0dHAuYWx0ZXJuYXRlLnBvcnQ9JHtBTFRFUk5BVEVfUE9SVH0KLQlvcmIucG9ydD0ke09SQl9QT1JUfQotCWFkbWluLnBhc3N3b3JkPQotCXNzbC5wYXNzd29yZD1jaGFuZ2VpdAotCW1hc3Rlci5wYXNzd29yZD1jaGFuZ2VpdAotCWFkbWluLnBhc3N3b3JkLmZpbGU9XCR7ZW52LkFQU19IT01FfS9jb25maWcvYWRtaW5wYXNzd29yZC50eHQKLQlhcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZT1zZXJ2ZXIKLQljb25maWcuZG90dGVkbmFtZS5wcmVmaXg9c2VydmVyCi0JcmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4PWRvbWFpbi5yZXNvdXJjZXMKLQlyZXN1bHRzLm1haWxob3N0PWxvY2FsaG9zdAotCXJlc3VsdHMubWFpbGVyPVFMVGVzdHNGb3JQRUluc3RhbGxPckRBU0luRUVJbnN0YWxsQHN1bi5jb20KLQlyZXN1bHRzLm1haWxlZT15b3VybmFtZUBzdW4uY29tCi0JYXV0b2RlcGxveS5kaXI9XCR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9cJHthZG1pbi5kb21haW59L2F1dG9kZXBsb3kKLQlwcmVjb21waWxlanNwPXRydWUKLQlqdm0ubWF4cGVybXNpemU9MTkybQotCWFwcHNlcnZlci5pbnN0YW5jZS5kaXI9XCR7YWRtaW4uZG9tYWluLmRpcn0vXCR7YWRtaW4uZG9tYWlufSIgPiBjb25maWcucHJvcGVydGllcworICAgICMgQ3JlYXRlCisgICAgZWNobyAiYWRtaW4uZG9tYWluPWRvbWFpbjEKKyAgICBhZG1pbi5kb21haW4uZGlyPVwke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMKKyAgICBhZG1pbi5wb3J0PSR7QURNSU5fUE9SVH0KKyAgICBhZG1pbi51c2VyPWFub255bW91cworICAgIGFkbWluLmhvc3Q9bG9jYWxob3N0CisgICAgaHR0cC5wb3J0PSR7SU5TVEFOQ0VfUE9SVH0KKyAgICBodHRwcy5wb3J0PSR7U1NMX1BPUlR9CisgICAgaW5zdGFuY2UuaHR0cC5wb3J0PSR7SU5TVEFOQ0VfSFRUUF9QT1JUfQorICAgIGluc3RhbmNlLmh0dHBzLnBvcnQ9JHtJTlNUQU5DRV9IVFRQU19QT1JUfQorICAgIGh0dHAuaG9zdD1sb2NhbGhvc3QKKyAgICBodHRwLmFkZHJlc3M9MTI3LjAuMC4xCisgICAgaHR0cC5hbHRlcm5hdGUucG9ydD0ke0FMVEVSTkFURV9QT1JUfQorICAgIG9yYi5wb3J0PSR7T1JCX1BPUlR9CisgICAgYWRtaW4ucGFzc3dvcmQ9CisgICAgc3NsLnBhc3N3b3JkPWNoYW5nZWl0CisgICAgbWFzdGVyLnBhc3N3b3JkPWNoYW5nZWl0CisgICAgYWRtaW4ucGFzc3dvcmQuZmlsZT1cJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy9hZG1pbnBhc3N3b3JkLnR4dAorICAgIGFwcHNlcnZlci5pbnN0YW5jZS5uYW1lPXNlcnZlcgorICAgIGNvbmZpZy5kb3R0ZWRuYW1lLnByZWZpeD1zZXJ2ZXIKKyAgICByZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXg9ZG9tYWluLnJlc291cmNlcworICAgIHJlc3VsdHMubWFpbGhvc3Q9bG9jYWxob3N0CisgICAgcmVzdWx0cy5tYWlsZXI9UUxUZXN0c0ZvclBFSW5zdGFsbE9yREFTSW5FRUluc3RhbGxAc3VuLmNvbQorICAgIHJlc3VsdHMubWFpbGVlPXlvdXJuYW1lQHN1bi5jb20KKyAgICBhdXRvZGVwbG95LmRpcj1cJHtlbnYuUzFBU19IT01FfS9kb21haW5zL1wke2FkbWluLmRvbWFpbn0vYXV0b2RlcGxveQorICAgIHByZWNvbXBpbGVqc3A9dHJ1ZQorICAgIGp2bS5tYXhwZXJtc2l6ZT0xOTJtCisgICAgYXBwc2VydmVyLmluc3RhbmNlLmRpcj1cJHthZG1pbi5kb21haW4uZGlyfS9cJHthZG1pbi5kb21haW59IiA+IGNvbmZpZy5wcm9wZXJ0aWVzCiAKLQkoanBzIHxncmVwIE1haW4gfGN1dCAtZjEgLWQiICIgfCB4YXJncyBraWxsIC05ICA+IC9kZXYvbnVsbCAyPiYxKSB8fCB0cnVlCisgICAgKGpwcyB8Z3JlcCBNYWluIHxjdXQgLWYxIC1kIiAiIHwgeGFyZ3Mga2lsbCAtOSAgPiAvZGV2L251bGwgMj4mMSkgfHwgdHJ1ZQogCi0JY2QgJHtTMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9jb25maWcvCi0Jc2VkICJzLzE1MjcvJHtEQl9QT1JUfS9nIiBkb21haW4ueG1sID4gZG9tYWluLnhtbC5yZXBsYWNlZAotCW12IGRvbWFpbi54bWwucmVwbGFjZWQgZG9tYWluLnhtbAotCWdyZXAgUG9ydE51bWJlciBkb21haW4ueG1sCisgICAgY2QgJHtTMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9jb25maWcvCisgICAgc2VkICJzLzE1MjcvJHtEQl9QT1JUfS9nIiBkb21haW4ueG1sID4gZG9tYWluLnhtbC5yZXBsYWNlZAorICAgIG12IGRvbWFpbi54bWwucmVwbGFjZWQgZG9tYWluLnhtbAorICAgIGdyZXAgUG9ydE51bWJlciBkb21haW4ueG1sCiAKLQljZCAke0FQU19IT01FfS9jb25maWcKLQkocm0gZGVyYnkucHJvcGVydGllcy5yZXBsYWNlZCAgPiAvZGV2L251bGwgMj4mMSkgfHwgdHJ1ZQotCXNlZCAicy8xNTI3LyR7REJfUE9SVH0vZyIgZGVyYnkucHJvcGVydGllcyA+IGRlcmJ5LnByb3BlcnRpZXMucmVwbGFjZWQKLQlybSBkZXJieS5wcm9wZXJ0aWVzCi0Jc2VkICJzLzE1MjgvJHtEQl9QT1JUXzJ9L2ciIGRlcmJ5LnByb3BlcnRpZXMucmVwbGFjZWQgPiBkZXJieS5wcm9wZXJ0aWVzCi0JY2F0IGRlcmJ5LnByb3BlcnRpZXMKKyAgICBjZCAke0FQU19IT01FfS9jb25maWcKKyAgICAocm0gZGVyYnkucHJvcGVydGllcy5yZXBsYWNlZCAgPiAvZGV2L251bGwgMj4mMSkgfHwgdHJ1ZQorICAgIHNlZCAicy8xNTI3LyR7REJfUE9SVH0vZyIgZGVyYnkucHJvcGVydGllcyA+IGRlcmJ5LnByb3BlcnRpZXMucmVwbGFjZWQKKyAgICBybSBkZXJieS5wcm9wZXJ0aWVzCisgICAgc2VkICJzLzE1MjgvJHtEQl9QT1JUXzJ9L2ciIGRlcmJ5LnByb3BlcnRpZXMucmVwbGFjZWQgPiBkZXJieS5wcm9wZXJ0aWVzCisgICAgY2F0IGRlcmJ5LnByb3BlcnRpZXMKIAotCXB1c2hkICR7QVBTX0hPTUV9L2RldnRlc3RzL2VqYi9lZS90aW1lcgorICAgIHB1c2hkICR7QVBTX0hPTUV9L2RldnRlc3RzL2VqYi9lZS90aW1lcgogCi0JYW50ICR7VEFSR0VUfSB8dGVlICR7VEVTVF9SVU5fTE9HfQotCWFudFN0YXR1cz0kez99Ci0JYW50IGRldi1yZXBvcnQKKyAgICBhbnQgJHtUQVJHRVR9IHx0ZWUgJHtURVNUX1JVTl9MT0d9CisgICAgYW50U3RhdHVzPSR7P30KKyAgICBhbnQgZGV2LXJlcG9ydAogfQogCiBnZXRfdGVzdF90YXJnZXQoKXsKLQljYXNlICQxIGluCi0JCWVqYl9hbGx8ZWpiX3RpbWVyX2NsdXN0ZXJfYWxsICkKLQkJCVRBUkdFVD1hbGwgOzsKLQkJZWpiX3dlYl9hbGwpCi0JCQlUQVJHRVQ9bGl0ZSA7OworICAgIGNhc2UgJDEgaW4KKyAgICAgICAgZWpiX2FsbHxlamJfdGltZXJfY2x1c3Rlcl9hbGwgKQorICAgICAgICAgICAgVEFSR0VUPWFsbCA7OworICAgICAgICBlamJfd2ViX2FsbCkKKyAgICAgICAgICAgIFRBUkdFVD1saXRlIDs7CiAgICAgKiApCiAgICAgICBUQVJHRVQ9JDEgOzsKLQllc2FjCi0JZXhwb3J0IFRBUkdFVAorICAgIGVzYWMKKyAgICBleHBvcnQgVEFSR0VUCiB9CiAKIAogcnVuX3Rlc3RfaWQoKXsKLQlpZiBbWyAkezF9ID0gImVqYl93ZWJfYWxsIiBdXTsgdGhlbgotCQl1bnppcF90ZXN0X3Jlc291cmNlcyAke1dPUktTUEFDRX0vYnVuZGxlcy93ZWIuemlwCi0JZWxzZQotCQl1bnppcF90ZXN0X3Jlc291cmNlcyAke1dPUktTUEFDRX0vYnVuZGxlcy9nbGFzc2Zpc2guemlwCi0JZmkKLQlkbmFtZT1gcHdkYAotCWNkIGBkaXJuYW1lICR7MH1gCi0JdGVzdF9pbml0Ci0JZ2V0X3Rlc3RfdGFyZ2V0ICR7MX0KLQlpZiBbWyAkezF9ID0gImVqYl9hbGwiIHx8ICR7MX0gPSAiZWpiX2dyb3VwIiogXV07IHRoZW4KLQkJdGVzdF9ydW5fZWpiCi0JZWxpZiBbWyAkezF9ID0gImVqYl90aW1lcl9jbHVzdGVyX2FsbCIgXV07IHRoZW4KLQkJdGVzdF9ydW5fZWpiX3RpbWVyX2NsdXN0ZXIKLQllbGlmIFtbICR7MX0gPSAiZWpiX3dlYl9hbGwiIF1dOyB0aGVuCi0JCXRlc3RfcnVuX2VqYl93ZWIKLQllbHNlCi0JCWVjaG8gIkludmFsaWQgVGVzdCBJRCIKLQkJZXhpdCAxCi0JZmkKLQljaGVja19zdWNjZXNzZnVsX3J1bgorICAgIGlmIFtbICR7MX0gPSAiZWpiX3dlYl9hbGwiIF1dOyB0aGVuCisgICAgICAgIHVuemlwX3Rlc3RfcmVzb3VyY2VzICR7V09SS1NQQUNFfS9idW5kbGVzL3dlYi56aXAKKyAgICBlbHNlCisgICAgICAgIHVuemlwX3Rlc3RfcmVzb3VyY2VzICR7V09SS1NQQUNFfS9idW5kbGVzL2dsYXNzZmlzaC56aXAKKyAgICBmaQorICAgIGRuYW1lPWBwd2RgCisgICAgY2QgYGRpcm5hbWUgJHswfWAKKyAgICB0ZXN0X2luaXQKKyAgICBnZXRfdGVzdF90YXJnZXQgJHsxfQorICAgIGlmIFtbICR7MX0gPSAiZWpiX2FsbCIgfHwgJHsxfSA9ICJlamJfZ3JvdXAiKiBdXTsgdGhlbgorICAgICAgICB0ZXN0X3J1bl9lamIKKyAgICBlbGlmIFtbICR7MX0gPSAiZWpiX3RpbWVyX2NsdXN0ZXJfYWxsIiBdXTsgdGhlbgorICAgICAgICB0ZXN0X3J1bl9lamJfdGltZXJfY2x1c3RlcgorICAgIGVsaWYgW1sgJHsxfSA9ICJlamJfd2ViX2FsbCIgXV07IHRoZW4KKyAgICAgICAgdGVzdF9ydW5fZWpiX3dlYgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiSW52YWxpZCBUZXN0IElEIgorICAgICAgICBleGl0IDEKKyAgICBmaQorICAgIGNoZWNrX3N1Y2Nlc3NmdWxfcnVuCiAgIGdlbmVyYXRlX2p1bml0X3JlcG9ydCAkezF9CiAgIGNoYW5nZV9qdW5pdF9yZXBvcnRfY2xhc3NfbmFtZXMKIH0KIAogbGlzdF90ZXN0X2lkcygpewotCWVjaG8gZWpiX2FsbCBlamJfdGltZXJfY2x1c3Rlcl9hbGwgZWpiX3dlYl9hbGwgZWpiX2dyb3VwXzEgZWpiX2dyb3VwXzIgZWpiX2dyb3VwXzMKKyAgICBlY2hvIGVqYl9hbGwgZWpiX3RpbWVyX2NsdXN0ZXJfYWxsIGVqYl93ZWJfYWxsIGVqYl9ncm91cF8xIGVqYl9ncm91cF8yIGVqYl9ncm91cF8zCiB9CiAKIE9QVD0kezF9CkBAIC0zMDIsOSArMzAyLDkgQEAKIHNvdXJjZSBgZGlybmFtZSAkezB9YC8uLi8uLi8uLi9jb21tb25fdGVzdC5zaAogCiBjYXNlICR7T1BUfSBpbgotCWxpc3RfdGVzdF9pZHMgKQotCQlsaXN0X3Rlc3RfaWRzOzsKLQlydW5fdGVzdF9pZCApCi0JCXRyYXAgImNvcHlfdGVzdF9hcnRpZmFjdHMgJHtURVNUX0lEfSIgRVhJVAotCQlydW5fdGVzdF9pZCAke1RFU1RfSUR9IDs7CisgICAgbGlzdF90ZXN0X2lkcyApCisgICAgICAgIGxpc3RfdGVzdF9pZHM7OworICAgIHJ1bl90ZXN0X2lkICkKKyAgICAgICAgdHJhcCAiY29weV90ZXN0X2FydGlmYWN0cyAke1RFU1RfSUR9IiBFWElUCisgICAgICAgIHJ1bl90ZXN0X2lkICR7VEVTVF9JRH0gOzsKIGVzYWMKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2J1aWxkLnhtbAppbmRleCBlYzc0NTUwLi45NzRmNjY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvYnVpbGQueG1sCkBAIC00NywxMSArNDcsMTEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLXNmc2IgdGVzdHMpCi0JCQlhbnQgcGFzc2l2YXRlYWN0aXZhdGUgKEV4ZWN1dGVzIHRoZSBlamItc2ZzYi1wYXNzaXZhdGVhY3RpdmF0ZSB0ZXN0KQotCQkJYW50IGNhY2hlTlBFIChFeGVjdXRlcyB0aGUgZWpiLXNmc2ItY2FjaGVOUEUgdGVzdCkKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItc2ZzYiB0ZXN0cykKKyAgICAgICAgICAgIGFudCBwYXNzaXZhdGVhY3RpdmF0ZSAoRXhlY3V0ZXMgdGhlIGVqYi1zZnNiLXBhc3NpdmF0ZWFjdGl2YXRlIHRlc3QpCisgICAgICAgICAgICBhbnQgY2FjaGVOUEUgKEV4ZWN1dGVzIHRoZSBlamItc2ZzYi1jYWNoZU5QRSB0ZXN0KQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2NhY2hlTlBFL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGE4ODQ1ZTQuLjZjYWQ0MDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2NhY2hlTlBFL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvY2FjaGVOUEUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItc2ZzYi1jYWNoZU5QRSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvY2FjaGVOUEUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvY2FjaGVOUEUvYnVpbGQueG1sCmluZGV4IDk3MWY5YzYuLjVmZDlhNDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2NhY2hlTlBFL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MsICoqLypTRlNCKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiA8IS0tCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAtLT4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwhLS0KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CkBAIC04OSwxOCArODksMTggQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKLSAKKworCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggN2NmNWU4ZS4uNWI2OTQ4ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvY2FjaGVOUEUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2NhY2hlTlBFL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzQsOCArMzQsOCBAQAogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0Tm90UnVuICAgID0gIlRFU1QgTk9UIFJVTiI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RQYXNzZWQgICAgPSAiVEVTVCBQQVNTRUQiOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0RmFpbGVkICAgID0gIlRFU1QgRkFJTEVEIjsKLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIEFycmF5TGlzdCBzZnNiTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKQEAgLTUwLDEzICs1MCwxMyBAQAogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW2NhY2hlTlBFQ2xpZW50XSBET05FIGRvVGVzdCgpLi4uIik7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJjYWNoZU5QRSIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIGluaXRTRlNCTGlzdCgwLDQpOyAgICAgLy9jcmVhdGUgU0ZTQnMgCisgICAgICAgIGluaXRTRlNCTGlzdCgwLDQpOyAgICAgLy9jcmVhdGUgU0ZTQnMKIAogICAgICAgICBmb3IoIGludCBqID0gMDsgaiA8IDQwMDsgaisrKSB7CiAgICAgICAgICAgICBhY2Nlc3NTRlNCKDAsMyw1KTsKQEAgLTY3LDEzICs2NywxMyBAQAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXggKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCAiRXhjZXB0aW9uIGNhdWdodCA6ICIgKyBleCApOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KIAogICAgICAgICByZW1vdmVTRlNCKDMpOwogICAgICAgICByZW1vdmVTRlNCKDIpOwogICAgICAgICBhY2Nlc3NTRlNCKDEsNCw1KTsKIAotICAgICAgICBpbml0U0ZTQkxpc3QoNSwyMCk7ICAgICAvL2NyZWF0ZSBTRlNCcyAKKyAgICAgICAgaW5pdFNGU0JMaXN0KDUsMjApOyAgICAgLy9jcmVhdGUgU0ZTQnMKIAogICAgIH0KIApAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgICAgICBmb3IgKDsgaSA8IE1BWFNGU0JTOyBpPWkrc3RlcCkgewogICAgICAgICAgICAgICAgIFNGU0Igc2ZzYiA9IChTRlNCKSBzZnNiTGlzdC5nZXQoaSk7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHNmc2JOYW1lID0gc2ZzYi5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBib29sZWFuIHNlc3Npb25DdHhUZXN0ID0gc2ZzYi5jaGVja1Nlc3Npb25Db250ZXh0KCk7CiAgICAgICAgICAgICAgICAgYm9vbGVhbiBpbml0aWFsQ3R4VGVzdCA9IHNmc2IuY2hlY2tJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgICAgIGJvb2xlYW4gZW50aXR5SG9tZVRlc3QgPSBzZnNiLmNoZWNrRW50aXR5SG9tZSgpOwpAQCAtMTIwLDExICsxMjAsMTEgQEAKICAgICAgICAgICAgICAgICBib29sZWFuIGhhbmRsZVRlc3QgPSBzZnNiLmNoZWNrSGFuZGxlKCk7CiAgICAgICAgICAgICAgICAgYm9vbGVhbiB1dFRlc3QgPSBzZnNiLmNoZWNrVXNlclRyYW5zYWN0aW9uKCk7CiAKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGFjY2Vzc1NGU0I6IGZvciBiZWFuIC0+ICIgKyBzZnNiTmFtZSAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGFjY2Vzc1NGU0I6IGZvciBiZWFuIC0+ICIgKyBzZnNiTmFtZQogICAgICAgICAgICAgICAgICAgICArICI7ICIgKyBzZXNzaW9uQ3R4VGVzdCArICI7ICIgKyBpbml0aWFsQ3R4VGVzdAogICAgICAgICAgICAgICAgICAgICArICI7ICIgKyBlbnRpdHlIb21lVGVzdCArICI7ICIgKyBlbnRpdHlMb2NhbEhvbWVUZXN0CiAgICAgICAgICAgICAgICAgICAgICsgIjsgIiArIGVudGl0eVJlbW90ZVRlc3QgKyAiOyAiICsgZW50aXR5TG9jYWxUZXN0Ci0gICAgICAgICAgICAgICAgICAgICsgIjsgIiArIGhvbWVIYW5kbGVUZXN0ICsgIjsgIiArIGhhbmRsZVRlc3QgCisgICAgICAgICAgICAgICAgICAgICsgIjsgIiArIGhvbWVIYW5kbGVUZXN0ICsgIjsgIiArIGhhbmRsZVRlc3QKICAgICAgICAgICAgICAgICAgICAgKyAiOyAiICsgdXRUZXN0KTsKIAogICAgICAgICAgICAgICAgIHBhc3NlZCA9IHNlc3Npb25DdHhUZXN0ICYmIGluaXRpYWxDdHhUZXN0CkBAIC0xMzYsNyArMTM2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKIAogICAgICAgICAgICAgaWYgKHBhc3NlZCkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgYWNjZXNzU0ZTQnMiLCBzdGF0LlBBU1MpOwpAQCAtMTU5LDcgKzE1OSw3IEBACiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgcmVtb3ZlU0ZTQnMiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCByZW1vdmVTRlNCcyIsIHN0YXQuUEFTUyk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2NhY2hlTlBFL2VqYi9TRlNCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9lamIvU0ZTQi5qYXZhCmluZGV4IGY5ZGU3N2MuLjQyYTQxYTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2NhY2hlTlBFL2VqYi9TRlNCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvY2FjaGVOUEUvZWpiL1NGU0IuamF2YQpAQCAtMjMsMzUgKzIzLDM1IEBACiAgICAgZXh0ZW5kcyBFSkJPYmplY3QKIHsKIAotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCisgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotCXB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpCisgICAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2Vzc2lvbkNvbnRleHQoKQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOyAgICAgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrSW5pdGlhbENvbnRleHQoKQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOyAgICAgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrRW50aXR5SG9tZSgpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247ICAgICAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tFbnRpdHlMb2NhbEhvbWUoKQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOyAgICAgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrRW50aXR5UmVtb3RlUmVmKCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAgICAgCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja0VudGl0eUxvY2FsUmVmKCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAgICAgCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja0hvbWVIYW5kbGUoKQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOyAgICAgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrSGFuZGxlKCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAgICAgCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1VzZXJUcmFuc2FjdGlvbigpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9lamIvU0ZTQkVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvY2FjaGVOUEUvZWpiL1NGU0JFSkIuamF2YQppbmRleCAxMGNlMzU0Li4zYzIxYjNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9lamIvU0ZTQkVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2NhY2hlTlBFL2VqYi9TRlNCRUpCLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIHB1YmxpYyBjbGFzcyBTRlNCRUpCCi0gICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiAKKyAgICBpbXBsZW1lbnRzIFNlc3Npb25CZWFuCiB7CiAgICAgcHJpdmF0ZSBDb250ZXh0IGVudkN0eDsKICAgICBwcml2YXRlIENvbnRleHQgZW52U3ViQ3R4OwpAQCAtNjQsNyArNjQsNyBAQAogCiAgICAgICAgICAgICBob21lSGFuZGxlID0gZW50aXR5SG9tZS5nZXRIb21lSGFuZGxlKCk7CiAgICAgICAgICAgICBoYW5kbGUgPSBlbnRpdHlSZW1vdGUuZ2V0SGFuZGxlKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdXNlclRyYW5zYWN0aW9uMSA9IHNlc3Npb25DdHguZ2V0VXNlclRyYW5zYWN0aW9uKCk7CiAgICAgICAgICAgICB1c2VyVHJhbnNhY3Rpb24yID0gKFVzZXJUcmFuc2FjdGlvbikgbmV3IEluaXRpYWxDb250ZXh0KCkuCiAgICAgICAgICAgICAgICAgbG9va3VwKCJqYXZhOmNvbXAvVXNlclRyYW5zYWN0aW9uIik7CkBAIC0xNzMsNyArMTczLDcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1VzZXJUcmFuc2FjdGlvbigpIHsKICAgICAgICAgYm9vbGVhbiBzdGF0dXMgPQogICAgICAgICAgICAgKCh1c2VyVHJhbnNhY3Rpb24xICE9IG51bGwpICYmICh1c2VyVHJhbnNhY3Rpb24yICE9IG51bGwpKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmKCBzdGF0dXMgKSB7CiAgICAgICAgICAgICAgICAgdXNlclRyYW5zYWN0aW9uMS5iZWdpbigpOwpAQCAtMjA1LDcgKzIwNSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSAiamF2YToiOwotICAgICAgICAgICAgICAgIG9rID0gKCAoamF2YUN0eCAhPSBudWxsKSAmJiAKKyAgICAgICAgICAgICAgICBvayA9ICggKGphdmFDdHggIT0gbnVsbCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgamF2YUN0eC5nZXROYW1lSW5OYW1lc3BhY2UoKS5lcXVhbHMoZmllbGROYW1lKSApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG9rKSB7CkBAIC0yMTcsNyArMjE3LDcgQEAKICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSAiamF2YTpjb21wL2VudiI7CiAgICAgICAgICAgICAgICAgb2sgPSAoIChlbnZDdHggIT0gbnVsbCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgZW52Q3R4LmdldE5hbWVJbk5hbWVzcGFjZSgpLmVxdWFscyhmaWVsZE5hbWUpICk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9ICJqYXZhOmNvbXAvZW52L2VqYiI7CkBAIC0yMjYsNyArMjI2LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9ICJlbnYtZW50cnkiOwotICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlMSA9IChTdHJpbmcpCiAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxDdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L1RhZ1ZhbHVlIik7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlMiA9IChTdHJpbmcpIGVudkN0eC5sb29rdXAoIlRhZ1ZhbHVlIik7CkBAIC0yMzgsOSArMjM4LDkgQEAKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgb2sgPSBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0aGlzLm1lc3NhZ2UgPSAob2spID8gbnVsbCA6IChmaWVsZE5hbWUgKyAiIG5vdCByZXN0b3JlZCBwcm9wZXJseSIpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gb2s7CiAgICAgfQogCkBAIC0yNjgsNyArMjY4LDcgQEAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIlxuXHRJbiBTRlNCLmVqYlJlbW92ZSgpIGZvciBuYW1lIC0+ICIgKyBzZnNiTmFtZSk7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBlbnRpdHlSZW1vdGUucmVtb3ZlKCk7IAorICAgICAgICAgICAgZW50aXR5UmVtb3RlLnJlbW92ZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9lamIvU0ZTQkhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2NhY2hlTlBFL2VqYi9TRlNCSG9tZS5qYXZhCmluZGV4IDJhNDU3ZWIuLmJiM2ZkNGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2NhY2hlTlBFL2VqYi9TRlNCSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2NhY2hlTlBFL2VqYi9TRlNCSG9tZS5qYXZhCkBAIC0yMyw2ICsyMyw2IEBACiBwdWJsaWMgaW50ZXJmYWNlIFNGU0JIb21lCiAgICAgZXh0ZW5kcyBFSkJIb21lCiB7Ci0JcHVibGljIFNGU0IgY3JlYXRlKFN0cmluZyBzZnNiTmFtZSkKKyAgICBwdWJsaWMgU0ZTQiBjcmVhdGUoU3RyaW5nIHNmc2JOYW1lKQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9lamIvU2ltcGxlRW50aXR5QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvY2FjaGVOUEUvZWpiL1NpbXBsZUVudGl0eUJlYW4uamF2YQppbmRleCBiOWE3M2QwLi4xMjUxZjkyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9lamIvU2ltcGxlRW50aXR5QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2NhY2hlTlBFL2VqYi9TaW1wbGVFbnRpdHlCZWFuLmphdmEKQEAgLTU2LDggKzU2LDggQEAKICAgICAgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwogICAgICAgICB0cnkgewotCSAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCiAgICAgICAgICAgICAgICAgIklOU0VSVCBJTlRPIFNpbXBsZUVudGl0eSAoa2V5aWQsIG5hbWUpIFZBTFVFUyAoPyw/KSIpOwogICAgICAgICAgICAgcHMuc2V0U3RyaW5nKDEsIGtleSk7CiAgICAgICAgICAgICBwcy5zZXRTdHJpbmcoMiwgbmFtZSk7CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKICAgICAgICAgICAgIHRocm93IG5ldyBDcmVhdGVFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotICAgICAgICB9IGZpbmFsbHkgeyAKKyAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYgKHBzICE9IG51bGwpCiAgICAgICAgICAgICAgICAgICAgIHBzLmNsb3NlKCk7CkBAIC05NCwxMCArOTQsMTAgQEAKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAogICAgICAgICAgICAgICAgICJTRUxFQ1Qga2V5aWQgZnJvbSBTaW1wbGVFbnRpdHkgd2hlcmUga2V5aWQgPSA/Iik7CiAgICAgICAgICAgICBwcy5zZXRTdHJpbmcoMSwga2V5KTsKICAgICAgICAgICAgIFJlc3VsdFNldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpOwpAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgICAgICAgICByZXR1cm4ga2V5OwogICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKICAgICAgICAgICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotICAgICAgICB9IGZpbmFsbHkgeyAKKyAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYgKHBzICE9IG51bGwpCiAgICAgICAgICAgICAgICAgICAgIHBzLmNsb3NlKCk7CkBAIC0xMjUsNjggKzEyNSw2OCBAQAogICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCiAgICAgICAgICAgICAgICAgIlNFTEVDVCBuYW1lIGZyb20gU2ltcGxlRW50aXR5IHdoZXJlIGtleWlkID0gPyIpOwogICAgICAgICAgICAgcHMuc2V0U3RyaW5nKDEsIGtleSk7Ci0JICAgIFJlc3VsdFNldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpOwotCSAgICBpZiAoIXJzLm5leHQoKSkKLQkgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbigiTm8gY3VzdCBmb3IgIiArIGtleSk7Ci0JICAgIHRoaXMubmFtZSA9IHJzLmdldFN0cmluZygxKTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JfSBmaW5hbGx5IHsgCi0JICAgIHRyeSB7Ci0JCWlmIChwcyAhPSBudWxsKQotCQkgICAgcHMuY2xvc2UoKTsKLQkJaWYgKGMgIT0gbnVsbCkKLQkJICAgIGMuY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JfQorICAgICAgICBSZXN1bHRTZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTsKKyAgICAgICAgaWYgKCFycy5uZXh0KCkpCisgICAgICAgICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIk5vIGN1c3QgZm9yICIgKyBrZXkpOworICAgICAgICB0aGlzLm5hbWUgPSBycy5nZXRTdHJpbmcoMSk7CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewotCUNvbm5lY3Rpb24gYyA9IG51bGw7Ci0gICAgIAlQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKLQkJIlVQREFURSBTaW1wbGVFbnRpdHkgU0VUIG5hbWUgPSA/IFdIRVJFIGtleWlkID0gPyIpOwotCSAgICBwcy5zZXRTdHJpbmcoMSwgbmFtZSk7Ci0JICAgIHBzLnNldFN0cmluZygyLCBrZXkpOwotCSAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCi0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oIkRpZG50IHN0b3JlIGVqYiIpOwotCX0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQl9IGZpbmFsbHkgeyAKLQkgICAgdHJ5IHsKLQkJaWYgKHBzICE9IG51bGwpCi0JCSAgICBwcy5jbG9zZSgpOwotCQlpZiAoYyAhPSBudWxsKQotCQkgICAgYy5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQl9CisgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiVVBEQVRFIFNpbXBsZUVudGl0eSBTRVQgbmFtZSA9ID8gV0hFUkUga2V5aWQgPSA/Iik7CisgICAgICAgIHBzLnNldFN0cmluZygxLCBuYW1lKTsKKyAgICAgICAgcHMuc2V0U3RyaW5nKDIsIGtleSk7CisgICAgICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkbnQgc3RvcmUgZWpiIik7CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdmVFeGNlcHRpb24gewotCUNvbm5lY3Rpb24gYyA9IG51bGw7Ci0gICAgIAlQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7Ci0JdHJ5IHsKKyAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsqKlNpbXBsZUVudGl0eUJlYW4qKl0gZWpiUmVtb3ZlIGNhbGxlZCBmb3Iga2V5ID0gIiArIHRoaXMua2V5KTsKLQkgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKLQkJIkRFTEVURSBGUk9NIFNpbXBsZUVudGl0eSBXSEVSRSBrZXlpZCA9ID8iKTsKLQkgICAgcHMuc2V0U3RyaW5nKDEsIG5hbWUpOwotCSAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCi0JCXRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIkRpZG50IHJlbW92ZSBlamIiKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqU2ltcGxlRW50aXR5QmVhbioqXSBlamJSZW1vdmUgZm9yIGtleSA9ICIgCisgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICJERUxFVEUgRlJPTSBTaW1wbGVFbnRpdHkgV0hFUkUga2V5aWQgPSA/Iik7CisgICAgICAgIHBzLnNldFN0cmluZygxLCBuYW1lKTsKKyAgICAgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQorICAgICAgICB0aHJvdyBuZXcgUmVtb3ZlRXhjZXB0aW9uKCJEaWRudCByZW1vdmUgZWpiIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsqKlNpbXBsZUVudGl0eUJlYW4qKl0gZWpiUmVtb3ZlIGZvciBrZXkgPSAiCiAgICAgICAgICAgICAgICAgKyB0aGlzLmtleSArICIgc3VjY2VlZGVkIik7Ci0JfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgIHRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCX0gZmluYWxseSB7IAotCSAgICB0cnkgewotCQlpZiAocHMgIT0gbnVsbCkKLQkJICAgIHBzLmNsb3NlKCk7Ci0JCWlmIChjICE9IG51bGwpCi0JCSAgICBjLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCX0KKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggYjE0YzczNi4uNzRiMTY4NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvY2FjaGVOUEUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2NhY2hlTlBFL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgU2ltcGxlRW50aXR5Ow0KLQ0KLUNSRUFURSBUQUJMRSBTaW1wbGVFbnRpdHkgKA0KLSAgICBrZXlpZCAgICAgY2hhcigyMCkgbm90IG51bGwsDQotICAgIG5hbWUgICAgY2hhcigyMCkNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgU2ltcGxlRW50aXR5OworCitDUkVBVEUgVEFCTEUgU2ltcGxlRW50aXR5ICgKKyAgICBrZXlpZCAgICAgY2hhcigyMCkgbm90IG51bGwsCisgICAgbmFtZSAgICBjaGFyKDIwKQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvY2FjaGVOUEUvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2NhY2hlTlBFL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggOTM1YzRhNi4uM2YyMWFlYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvY2FjaGVOUEUvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIFNpbXBsZUVudGl0eTsNCitEcm9wIHRhYmxlIFNpbXBsZUVudGl0eTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDc0MWE2Yi4uZjg0NTk0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXNmc2Ita2VlcHN0YXRlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2J1aWxkLnhtbAppbmRleCA0Y2Q3ZjI3Li4yMDBkM2NlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MsICoqLypTRlNCKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgIC0tPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPCEtLQogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KQEAgLTgxLDE3ICs4MSwxNyBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAwMmQ0Y2VjLi4wZTAyZDUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTM0LDggKzM0LDggQEAKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdE5vdFJ1biAgICA9ICJURVNUIE5PVCBSVU4iOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0UGFzc2VkICAgID0gIlRFU1QgUEFTU0VEIjsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdEZhaWxlZCAgICA9ICJURVNUIEZBSUxFRCI7Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKworICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50ICAgIE1BWF9TRlNCUyA9IDQwOwpAQCAtNTMsMjMgKzUzLDIzIEBACiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJba2VlcHN0YXRlQ2xpZW50XSBET05FIGRvVGVzdCgpLi4uIik7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJrZWVwc3RhdGUiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICBpbml0U0ZTQkxpc3QoKTsgICAgIC8vY3JlYXRlIFNGU0JzIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIDE1IHNlY29uZHMgYmVmb3JlIGFjY2Vzc2luZy4uLiIpOwotCSAgICBmb3IgKGludCBpPTA7IGk8MTU7IGkrKykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyAoMTUgLSBpKSArICIgc2Vjb25kcyBsZWZ0Li4uIik7Ci0JCXRyeSB7Ci0JCSAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEqMTAwMCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQl9Ci0JICAgIH0KKyAgICAgICAgaW5pdFNGU0JMaXN0KCk7ICAgICAvL2NyZWF0ZSBTRlNCcworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIDE1IHNlY29uZHMgYmVmb3JlIGFjY2Vzc2luZy4uLiIpOworICAgICAgICBmb3IgKGludCBpPTA7IGk8MTU7IGkrKykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyAoMTUgLSBpKSArICIgc2Vjb25kcyBsZWZ0Li4uIik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEqMTAwMCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgYWNjZXNzU0ZTQigpOyAgICAgICAvL2FjY2VzcyB0aGUgU0ZCUwotCXJlbW92ZVRlc3QoKTsKKyAgICByZW1vdmVUZXN0KCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGluaXRTRlNCTGlzdCgpIHsKQEAgLTk5LDIxICs5OSwyMSBAQAogCiAgICAgcHVibGljIHZvaWQgYWNjZXNzU0ZTQigpIHsKICAgICAgICAgdHJ5IHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciAxMCBzZWNvbmRzIGJlZm9yZSBhY2Nlc3NpbmcuLi4iKTsKLQkgICAgZm9yIChpbnQgaT0wOyBpPDEwOyBpKyspIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIiICsgKDEwIC0gaSkgKyAiIHNlY29uZHMgbGVmdC4uLiIpOwotCQl0cnkgewotCQkgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxKjEwMDApOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJfQotCSAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgMTAgc2Vjb25kcyBiZWZvcmUgYWNjZXNzaW5nLi4uIik7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTwxMDsgaSsrKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArICgxMCAtIGkpICsgIiBzZWNvbmRzIGxlZnQuLi4iKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMSoxMDAwKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAgICAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CiAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBNQVhfU0ZTQlM7IGkrKykgewogICAgICAgICAgICAgICAgIFNGU0Igc2ZzYiA9IChTRlNCKSBzZnNiTGlzdC5nZXQoaSk7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHNmc2JOYW1lID0gX3Nmc2JQcmVmaXgraTsKLQkJU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldE5hbWUoKTsKKwogICAgICAgICAgICAgICAgIGJvb2xlYW4gc2Vzc2lvbkN0eFRlc3QgPSBzZnNiLmNoZWNrU2Vzc2lvbkNvbnRleHQoKTsKICAgICAgICAgICAgICAgICBib29sZWFuIGluaXRpYWxDdHhUZXN0ID0gc2ZzYi5jaGVja0luaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICAgICAgYm9vbGVhbiBlbnRpdHlIb21lVGVzdCA9IHNmc2IuY2hlY2tFbnRpdHlIb21lKCk7CkBAIC0xMjMsMzMgKzEyMywzMyBAQAogICAgICAgICAgICAgICAgIGJvb2xlYW4gaG9tZUhhbmRsZVRlc3QgPSBzZnNiLmNoZWNrSG9tZUhhbmRsZSgpOwogICAgICAgICAgICAgICAgIGJvb2xlYW4gaGFuZGxlVGVzdCA9IHNmc2IuY2hlY2tIYW5kbGUoKTsKICAgICAgICAgICAgICAgICBib29sZWFuIHV0VGVzdCA9IHNmc2IuY2hlY2tVc2VyVHJhbnNhY3Rpb24oKTsKLQkJYm9vbGVhbiBhY3RpdmF0aW9uVGVzdCA9IChzZnNiLmdldEFjdGl2YXRpb25Db3VudCgpICE9IDApOwotCQlib29sZWFuIHBhc3NpdmF0aW9uVGVzdCA9IChzZnNiLmdldFBhc3NpdmF0aW9uQ291bnQoKSAhPSAwKTsKKyAgICAgICAgYm9vbGVhbiBhY3RpdmF0aW9uVGVzdCA9IChzZnNiLmdldEFjdGl2YXRpb25Db3VudCgpICE9IDApOworICAgICAgICBib29sZWFuIHBhc3NpdmF0aW9uVGVzdCA9IChzZnNiLmdldFBhc3NpdmF0aW9uQ291bnQoKSAhPSAwKTsKIAotCQlpbnQgYWN0Q291bnQgPSBzZnNiLmdldEFjdGl2YXRpb25Db3VudCgpOwotCQlpbnQgcGFzQ291bnQgPSBzZnNiLmdldFBhc3NpdmF0aW9uQ291bnQoKTsKKyAgICAgICAgaW50IGFjdENvdW50ID0gc2ZzYi5nZXRBY3RpdmF0aW9uQ291bnQoKTsKKyAgICAgICAgaW50IHBhc0NvdW50ID0gc2ZzYi5nZXRQYXNzaXZhdGlvbkNvdW50KCk7CiAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNGU0JbIiArIGkgKyAiLyIgKyBNQVhfU0ZTQlMgKyAiXTogIiArIHNlc3Npb25DdHhUZXN0ICsgIjsgIiArIGluaXRpYWxDdHhUZXN0CiAgICAgICAgICAgICAgICAgICAgICsgIjsgIiArIGVudGl0eUhvbWVUZXN0ICsgIjsgIiArIGVudGl0eUxvY2FsSG9tZVRlc3QKICAgICAgICAgICAgICAgICAgICAgKyAiOyAiICsgZW50aXR5UmVtb3RlVGVzdCArICI7ICIgKyBlbnRpdHlMb2NhbFRlc3QKLSAgICAgICAgICAgICAgICAgICAgKyAiOyAiICsgaG9tZUhhbmRsZVRlc3QgKyAiOyAiICsgaGFuZGxlVGVzdCAKKyAgICAgICAgICAgICAgICAgICAgKyAiOyAiICsgaG9tZUhhbmRsZVRlc3QgKyAiOyAiICsgaGFuZGxlVGVzdAogICAgICAgICAgICAgICAgICAgICArICI7ICIgKyB1dFRlc3QKLQkJICAgICsgIjsgIiArIGFjdGl2YXRpb25UZXN0ICsgIiAoIiArIGFjdENvdW50ICsgIikiCi0JCSAgICArICI7ICIgKyBwYXNzaXZhdGlvblRlc3QgKyAiICgiICsgcGFzQ291bnQgKyAiKSIKLQkJKTsKKyAgICAgICAgICAgICsgIjsgIiArIGFjdGl2YXRpb25UZXN0ICsgIiAoIiArIGFjdENvdW50ICsgIikiCisgICAgICAgICAgICArICI7ICIgKyBwYXNzaXZhdGlvblRlc3QgKyAiICgiICsgcGFzQ291bnQgKyAiKSIKKyAgICAgICAgKTsKIAogICAgICAgICAgICAgICAgIHBhc3NlZCA9IHNlc3Npb25DdHhUZXN0ICYmIGluaXRpYWxDdHhUZXN0CiAgICAgICAgICAgICAgICAgICAgICYmIGVudGl0eUhvbWVUZXN0ICYmIGVudGl0eUxvY2FsSG9tZVRlc3QKICAgICAgICAgICAgICAgICAgICAgJiYgZW50aXR5UmVtb3RlVGVzdCAmJiBlbnRpdHlMb2NhbFRlc3QKICAgICAgICAgICAgICAgICAgICAgJiYgaG9tZUhhbmRsZVRlc3QgJiYgaGFuZGxlVGVzdCAmJiB1dFRlc3QKLQkJICAgICYmIGFjdGl2YXRpb25UZXN0ICYmIHBhc3NpdmF0aW9uVGVzdDsKKyAgICAgICAgICAgICYmIGFjdGl2YXRpb25UZXN0ICYmIHBhc3NpdmF0aW9uVGVzdDsKIAogLyoKICAgICAgICAgICAgICAgICBpZiAoISBwYXNzZWQpIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogKi8KLQkJc2ZzYi5zbGVlcEZvclNlY29uZHMoMik7CisgICAgICAgIHNmc2Iuc2xlZXBGb3JTZWNvbmRzKDIpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAocGFzc2VkKSB7CkBAIC0xNjMsNDQgKzE2Myw0NCBAQAogICAgICAgICAgICAgICAgIFN0cmluZyBzZnNiTmFtZSA9IF9zZnNiUHJlZml4K2k7CiAKICAgICAgICAgICAgICAgICBzZnNiLm1ha2VTdGF0ZU5vblNlcmlhbGl6YWJsZSgpOwotCSAgICB9CisgICAgICAgIH0KIAotCSAgICAvL0NyZWF0aW5nIHRoZXNlIG1hbnkgU0ZTQnMgc2hvdWxkIGZvcmNlIHBhc3NpdmF0aW9uIG9mIHRoZSBhYm92ZQotCSAgICAvLwlub24tc2VyaWFsaXphYmxlIGJlYW5zCisgICAgICAgIC8vQ3JlYXRpbmcgdGhlc2UgbWFueSBTRlNCcyBzaG91bGQgZm9yY2UgcGFzc2l2YXRpb24gb2YgdGhlIGFib3ZlCisgICAgICAgIC8vICAgIG5vbi1zZXJpYWxpemFibGUgYmVhbnMKICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IE1BWF9TRlNCUzsgaSsrKSB7Ci0JCWhvbWUuY3JlYXRlKF9zZnNiUHJlZml4ICsgKGkrMSkqMTAwMCk7Ci0JICAgIH0KKyAgICAgICAgaG9tZS5jcmVhdGUoX3Nmc2JQcmVmaXggKyAoaSsxKSoxMDAwKTsKKyAgICAgICAgfQogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgMTAgc2Vjb25kcyBmb3IgcGFzc2l2YXRpb24gdG8gY29tcGxldGUuLi4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciAxMCBzZWNvbmRzIGZvciBwYXNzaXZhdGlvbiB0byBjb21wbGV0ZS4uLiIpOwogCi0JICAgIGZvciAoaW50IGk9MDsgaTwxMDsgaSsrKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIiArICgxMCAtIGkpICsgIiBzZWNvbmRzIGxlZnQuLi4iKTsKLQkJdHJ5IHsKLQkJICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMSoxMDAwKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCX0KLQkgICAgfQorICAgICAgICBmb3IgKGludCBpPTA7IGk8MTA7IGkrKykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyAoMTAgLSBpKSArICIgc2Vjb25kcyBsZWZ0Li4uIik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEqMTAwMCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICB9CisgICAgICAgIH0KIAogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgTUFYX1NGU0JTOyBpKyspIHsKICAgICAgICAgICAgICAgICBTRlNCIHNmc2IgPSAoU0ZTQikgc2ZzYkxpc3QuZ2V0KGkpOwogICAgICAgICAgICAgICAgIFN0cmluZyBzZnNiTmFtZSA9IF9zZnNiUHJlZml4K2k7CiAKICAgICAgICAgICAgICAgICB0cnkgewotCQkgICAgU3lzdGVtLm91dC5wcmludCgiRXhwZWN0aW5nIGV4Y2VwdGlvbiBmb3I6ICIgKyBzZnNiTmFtZSk7Ci0JCSAgICBTdHJpbmcgbm0gPSBzZnNiLmdldE5hbWUoKTsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRVJST1IuIERpZG4ndCBnZXQgZXhwZWN0ZWQgZXhjZXB0aW9uLiAiCi0JCQkgICAgKyAiR290OiAiICsgbm0pOwotCQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JCSAgICBicmVhazsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsqKkdvdCBFeGNlcHRpb24qKl0iKTsKLQkJfQotCSAgICB9Ci0JICAgIGlmIChwYXNzZWQpIHsKLQkJc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBub24tc2VyaWFsaXphYmxlLXN0YXRlIiwgc3RhdC5QQVNTKTsKLQkgICAgfSBlbHNlIHsKLQkJc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBub24tc2VyaWFsaXphYmxlLXN0YXRlIiwgc3RhdC5GQUlMKTsKLQkgICAgfQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiRXhwZWN0aW5nIGV4Y2VwdGlvbiBmb3I6ICIgKyBzZnNiTmFtZSk7CisgICAgICAgICAgICBTdHJpbmcgbm0gPSBzZnNiLmdldE5hbWUoKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRVJST1IuIERpZG4ndCBnZXQgZXhwZWN0ZWQgZXhjZXB0aW9uLiAiCisgICAgICAgICAgICAgICAgKyAiR290OiAiICsgbm0pOworICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsqKkdvdCBFeGNlcHRpb24qKl0iKTsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChwYXNzZWQpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBub24tc2VyaWFsaXphYmxlLXN0YXRlIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBub24tc2VyaWFsaXphYmxlLXN0YXRlIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgYWNjZXNzU0ZTQiIsIHN0YXQuRkFJTCk7CiAKQEAgLTIwOSwyNiArMjA5LDI2IEBACiAKIAogICAgIHB1YmxpYyB2b2lkIHJlbW92ZVRlc3QoKSB7Ci0JU0ZTQiBzZnNiID0gbnVsbDsKLQl0cnkgewotCSAgICBTdHJpbmcgbXlOYW1lID0gIl8yXyIgKyBfc2ZzYlByZWZpeCArICJfMl8iOwotCSAgICBzZnNiID0gKFNGU0IpIGhvbWUuY3JlYXRlKG15TmFtZSk7Ci0JICAgIFN0cmluZyByZXRyaWV2ZWROYW1lID0gc2ZzYi5nZXROYW1lKCk7Ci0JICAgIGJvb2xlYW4gbmFtZU9LID0gbXlOYW1lLmVxdWFsc0lnbm9yZUNhc2UocmV0cmlldmVkTmFtZSk7Ci0JICAgIGJvb2xlYW4gZ290RXhjZXB0aW9uID0gZmFsc2U7Ci0JICAgIHNmc2IucmVtb3ZlKCk7Ci0JICAgIHRyeSB7Ci0JCXNmc2IuZ2V0TmFtZSgpOwotCQlnb3RFeGNlcHRpb24gPSBmYWxzZTsJICAgIC8vRXhwZWN0aW5nIGFuIGV4Y2VwdGlvbgotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJZ290RXhjZXB0aW9uID0gdHJ1ZTsKLQkgICAgfQorICAgIFNGU0Igc2ZzYiA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgU3RyaW5nIG15TmFtZSA9ICJfMl8iICsgX3Nmc2JQcmVmaXggKyAiXzJfIjsKKyAgICAgICAgc2ZzYiA9IChTRlNCKSBob21lLmNyZWF0ZShteU5hbWUpOworICAgICAgICBTdHJpbmcgcmV0cmlldmVkTmFtZSA9IHNmc2IuZ2V0TmFtZSgpOworICAgICAgICBib29sZWFuIG5hbWVPSyA9IG15TmFtZS5lcXVhbHNJZ25vcmVDYXNlKHJldHJpZXZlZE5hbWUpOworICAgICAgICBib29sZWFuIGdvdEV4Y2VwdGlvbiA9IGZhbHNlOworICAgICAgICBzZnNiLnJlbW92ZSgpOworICAgICAgICB0cnkgeworICAgICAgICBzZnNiLmdldE5hbWUoKTsKKyAgICAgICAgZ290RXhjZXB0aW9uID0gZmFsc2U7ICAgICAgICAvL0V4cGVjdGluZyBhbiBleGNlcHRpb24KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGdvdEV4Y2VwdGlvbiA9IHRydWU7CisgICAgICAgIH0KIAotCSAgICBTdHJpbmcgcmVzdWx0U3RyID0gIigiICsgbmFtZU9LICsgIiBAQEAgIiArIGdvdEV4Y2VwdGlvbiArICIpIjsKKyAgICAgICAgU3RyaW5nIHJlc3VsdFN0ciA9ICIoIiArIG5hbWVPSyArICIgQEBAICIgKyBnb3RFeGNlcHRpb24gKyAiKSI7CiAgICAgICAgICAgICBpZiAobmFtZU9LICYmIGdvdEV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgcmVtb3ZlVGVzdCAiICsgcmVzdWx0U3RyLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLQkJc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCByZW1vdmVUZXN0ICIgKyByZXN1bHRTdHIsIHN0YXQuRkFJTCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgcmVtb3ZlVGVzdCAiICsgcmVzdWx0U3RyLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDQ3OGQ0NDkuLjFmMGJiZGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgPC9lamItcmVmPgogICAgICAgICA8YmVhbi1jYWNoZT4KICAgICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT44PC9tYXgtY2FjaGUtc2l6ZT4KLQkgICAgPHJlc2l6ZS1xdWFudGl0eT40PC9yZXNpemUtcXVhbnRpdHk+CisgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+NDwvcmVzaXplLXF1YW50aXR5PgogICAgICAgICA8L2JlYW4tY2FjaGU+CiAgICAgIDwvZWpiPgogICAgICA8ZWpiPgpAQCAtNDcsMTAgKzQ3LDEwIEBACiAgICAgICAgICAgICA8cmVzLXJlZi1uYW1lPmpkYmMvRGF0YVNvdXJjZTwvcmVzLXJlZi1uYW1lPgogICAgICAgICAgICAgPGpuZGktbmFtZT5qZGJjL19fZGVmYXVsdDwvam5kaS1uYW1lPgogICAgICAgICA8L3Jlc291cmNlLXJlZj4KLQk8YmVhbi1wb29sPgotCSAgICA8c3RlYWR5LXBvb2wtc2l6ZT40PC9zdGVhZHktcG9vbC1zaXplPgotCSAgICA8bWF4LXBvb2wtc2l6ZT4xNzwvbWF4LXBvb2wtc2l6ZT4KLQk8L2JlYW4tcG9vbD4KKyAgICA8YmVhbi1wb29sPgorICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT40PC9zdGVhZHktcG9vbC1zaXplPgorICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xNzwvbWF4LXBvb2wtc2l6ZT4KKyAgICA8L2JlYW4tcG9vbD4KICAgICAgPC9lamI+CiAgICA8L2VudGVycHJpc2UtYmVhbnM+CiA8L3N1bi1lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2VqYi9TRlNCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvZWpiL1NGU0IuamF2YQppbmRleCA1ZTY5N2NkLi4zMmNhOGJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvZWpiL1NGU0IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvZWpiL1NGU0IuamF2YQpAQCAtMjQsMzcgKzI0LDM3IEBACiB7CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVNGU0JDaGlsZCgpIAotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgcHVibGljIHZvaWQgY3JlYXRlU0ZTQkNoaWxkKCkKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1Nlc3Npb25Db250ZXh0KCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAgICAgCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja0luaXRpYWxDb250ZXh0KCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAgICAgCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja0VudGl0eUhvbWUoKQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOyAgICAgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrRW50aXR5TG9jYWxIb21lKCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAgICAgCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja0VudGl0eVJlbW90ZVJlZigpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247ICAgICAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tFbnRpdHlMb2NhbFJlZigpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247ICAgICAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tIb21lSGFuZGxlKCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAgICAgCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja0hhbmRsZSgpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247ICAgICAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tVc2VyVHJhbnNhY3Rpb24oKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwpAQCAtNjMsMTcgKzYzLDE3IEBACiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgaW50IGdldEFjdGl2YXRpb25Db3VudCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGludCBnZXRQYXNzaXZhdGlvbkNvdW50KCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgdm9pZCBtYWtlU3RhdGVOb25TZXJpYWxpemFibGUoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyB2b2lkIHNsZWVwRm9yU2Vjb25kcyhpbnQgc2VjKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyB2b2lkIHVudXNlZE1ldGhvZCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2VqYi9TRlNCRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvZWpiL1NGU0JFSkIuamF2YQppbmRleCA2ZjA2ZGVjLi40MmY0ZmQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvZWpiL1NGU0JFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvZWpiL1NGU0JFSkIuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIAogcHVibGljIGNsYXNzIFNGU0JFSkIKLSAgICBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIAorICAgIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4KIHsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBTF9DSElMRF9TVUZGSVggPSAiX2NoaWxkTG9jYWwiOwpAQCAtNTEsNyArNTEsNyBAQAogICAgIHByaXZhdGUgU2ltcGxlRW50aXR5TG9jYWxIb21lICAgICAgIGVudGl0eUxvY2FsSG9tZTsKICAgICBwcml2YXRlIFNpbXBsZUVudGl0eUxvY2FsICAgICAgICAgICBlbnRpdHlMb2NhbDsKICAgICBwcml2YXRlIFNGU0JIb21lICAgICAgICAgICAgICAgICAgICBzZnNiSG9tZTsKLSAgICBwcml2YXRlIFNGU0IgICAgICAgICAgICAgICAgICAgICAgICBzZnNiUmVtb3RlOyAgICAKKyAgICBwcml2YXRlIFNGU0IgICAgICAgICAgICAgICAgICAgICAgICBzZnNiUmVtb3RlOwogICAgIHByaXZhdGUgU0ZTQkxvY2FsSG9tZSAgICAgICAgICAgICAgIHNmc2JMb2NhbEhvbWU7CiAgICAgcHJpdmF0ZSBTRlNCTG9jYWwgICAgICAgICAgICAgICAgICAgc2ZzYkxvY2FsOwogCkBAIC02MCw5ICs2MCw5IEBACiAgICAgcHJpdmF0ZSBVc2VyVHJhbnNhY3Rpb24gICAgICAgICAgICAgdXNlclRyYW5zYWN0aW9uMTsKICAgICBwcml2YXRlIFVzZXJUcmFuc2FjdGlvbiAgICAgICAgICAgICB1c2VyVHJhbnNhY3Rpb24yOwogCi0gICAgcHJpdmF0ZSBpbnQJCQkJYWN0aXZhdGlvbkNvdW50OwotICAgIHByaXZhdGUgaW50CQkJCXBhc3NpdmF0aW9uQ291bnQ7Ci0gICAgcHJpdmF0ZSBPYmplY3QJCQlub25TZXJpYWxpemFibGVTdGF0ZTsKKyAgICBwcml2YXRlIGludCAgICAgICAgICAgICAgICBhY3RpdmF0aW9uQ291bnQ7CisgICAgcHJpdmF0ZSBpbnQgICAgICAgICAgICAgICAgcGFzc2l2YXRpb25Db3VudDsKKyAgICBwcml2YXRlIE9iamVjdCAgICAgICAgICAgIG5vblNlcmlhbGl6YWJsZVN0YXRlOwogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKFN0cmluZyBzZnNiTmFtZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJJbiBTRlNCLmVqYkNyZWF0ZSgpIGZvciBuYW1lIC0+ICIgKyBzZnNiTmFtZSk7CkBAIC03NSwxMCArNzUsMTAgQEAKIAogICAgICAgICAgICAgc2ZzYkhvbWUgPSAoU0ZTQkhvbWUpIHNlc3Npb25DdHguZ2V0RUpCSG9tZSgpOwogICAgICAgICAgICAgc2ZzYkxvY2FsSG9tZSA9IChTRlNCTG9jYWxIb21lKSBzZXNzaW9uQ3R4LmdldEVKQkxvY2FsSG9tZSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGhvbWVIYW5kbGUgPSBlbnRpdHlIb21lLmdldEhvbWVIYW5kbGUoKTsKICAgICAgICAgICAgIGhhbmRsZSA9IGVudGl0eVJlbW90ZS5nZXRIYW5kbGUoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB1c2VyVHJhbnNhY3Rpb24xID0gc2Vzc2lvbkN0eC5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKICAgICAgICAgICAgIHVzZXJUcmFuc2FjdGlvbjIgPSAoVXNlclRyYW5zYWN0aW9uKSBuZXcgSW5pdGlhbENvbnRleHQoKS4KICAgICAgICAgICAgICAgICBsb29rdXAoImphdmE6Y29tcC9Vc2VyVHJhbnNhY3Rpb24iKTsKQEAgLTk4LDE1ICs5OCwxNSBAQAogICAgICAgICAgICAgc2ZzYlJlbW90ZSA9IHNmc2JIb21lLmNyZWF0ZShzZnNiTmFtZSArICIgX2NoaWxkIik7CiAgICAgICAgICAgICBzZnNiTG9jYWwgPSBzZnNiTG9jYWxIb21lLmNyZWF0ZShzZnNiTmFtZSArIExPQ0FMX0NISUxEX1NVRkZJWCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgRUpCRXhjZXB0aW9uIGV4ID0gbmV3IEVKQkV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JICAgIGV4LmluaXRDYXVzZShlKTsKKyAgICAgICAgRUpCRXhjZXB0aW9uIGV4ID0gbmV3IEVKQkV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIGV4LmluaXRDYXVzZShlKTsKICAgICAgICAgICAgIHRocm93IGV4OwogICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tTRlNCQ2hpbGQoKSB7CiAgICAgICAgIFN0cmluZyBjaGlsZE5hbWUgPSBzZnNiTG9jYWwuZ2V0TmFtZSgpOwotICAgICAgICBib29sZWFuIHN0YXR1cyA9IGNoaWxkTmFtZS5lcXVhbHMoc2ZzYk5hbWUgKyBMT0NBTF9DSElMRF9TVUZGSVgpOyAgICAgICAKKyAgICAgICAgYm9vbGVhbiBzdGF0dXMgPSBjaGlsZE5hbWUuZXF1YWxzKHNmc2JOYW1lICsgTE9DQUxfQ0hJTERfU1VGRklYKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKQEAgLTIwMyw3ICsyMDMsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrVXNlclRyYW5zYWN0aW9uKCkgewogICAgICAgICBib29sZWFuIHN0YXR1cyA9CiAgICAgICAgICAgICAoKHVzZXJUcmFuc2FjdGlvbjEgIT0gbnVsbCkgJiYgKHVzZXJUcmFuc2FjdGlvbjIgIT0gbnVsbCkpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYoIHN0YXR1cyApIHsKICAgICAgICAgICAgICAgICB1c2VyVHJhbnNhY3Rpb24xLmJlZ2luKCk7CkBAIC0yMzUsNyArMjM1LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9ICJqYXZhOiI7Ci0gICAgICAgICAgICAgICAgb2sgPSAoIChqYXZhQ3R4ICE9IG51bGwpICYmIAorICAgICAgICAgICAgICAgIG9rID0gKCAoamF2YUN0eCAhPSBudWxsKSAmJgogICAgICAgICAgICAgICAgICAgICAgICBqYXZhQ3R4LmdldE5hbWVJbk5hbWVzcGFjZSgpLmVxdWFscyhmaWVsZE5hbWUpICk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAob2spIHsKQEAgLTI0Nyw3ICsyNDcsNyBAQAogICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9ICJqYXZhOmNvbXAvZW52IjsKICAgICAgICAgICAgICAgICBvayA9ICggKGVudkN0eCAhPSBudWxsKSAmJgogICAgICAgICAgICAgICAgICAgICAgICBlbnZDdHguZ2V0TmFtZUluTmFtZXNwYWNlKCkuZXF1YWxzKGZpZWxkTmFtZSkgKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gImphdmE6Y29tcC9lbnYvZWpiIjsKQEAgLTI1Niw3ICsyNTYsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gImVudi1lbnRyeSI7Ci0gICAgICAgICAgCisKICAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWUxID0gKFN0cmluZykKICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvVGFnVmFsdWUiKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWUyID0gKFN0cmluZykgZW52Q3R4Lmxvb2t1cCgiVGFnVmFsdWUiKTsKQEAgLTI2OCw5ICsyNjgsOSBAQAogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBvayA9IGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRoaXMubWVzc2FnZSA9IChvaykgPyBudWxsIDogKGZpZWxkTmFtZSArICIgbm90IHJlc3RvcmVkIHByb3Blcmx5Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBvazsKICAgICB9CiAKQEAgLTI3OSwyMiArMjc5LDIyIEBACiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRBY3RpdmF0aW9uQ291bnQoKSB7Ci0JcmV0dXJuIHRoaXMuYWN0aXZhdGlvbkNvdW50OworICAgIHJldHVybiB0aGlzLmFjdGl2YXRpb25Db3VudDsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldFBhc3NpdmF0aW9uQ291bnQoKSB7Ci0JcmV0dXJuIHRoaXMucGFzc2l2YXRpb25Db3VudDsKKyAgICByZXR1cm4gdGhpcy5wYXNzaXZhdGlvbkNvdW50OwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIG1ha2VTdGF0ZU5vblNlcmlhbGl6YWJsZSgpIHsKLQlub25TZXJpYWxpemFibGVTdGF0ZSA9IG5ldyBPYmplY3QoKTsKKyAgICBub25TZXJpYWxpemFibGVTdGF0ZSA9IG5ldyBPYmplY3QoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzbGVlcEZvclNlY29uZHMoaW50IHNlYykgewotCXRyeSB7Ci0JICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoc2VjICogMTAwMCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JfQorICAgIHRyeSB7CisgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoc2VjICogMTAwMCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHVudXNlZE1ldGhvZCgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9lamIvU0ZTQkhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9lamIvU0ZTQkhvbWUuamF2YQppbmRleCBmYTM0NjM4Li5hNDBlNjhkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvZWpiL1NGU0JIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2VqYi9TRlNCSG9tZS5qYXZhCkBAIC0yMyw2ICsyMyw2IEBACiBwdWJsaWMgaW50ZXJmYWNlIFNGU0JIb21lCiAgICAgZXh0ZW5kcyBFSkJIb21lCiB7Ci0JcHVibGljIFNGU0IgY3JlYXRlKFN0cmluZyBzZnNiTmFtZSkKKyAgICBwdWJsaWMgU0ZTQiBjcmVhdGUoU3RyaW5nIHNmc2JOYW1lKQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvZWpiL1NGU0JMb2NhbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2VqYi9TRlNCTG9jYWwuamF2YQppbmRleCA3NmNlODgxLi44ZGVmYWU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvZWpiL1NGU0JMb2NhbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9lamIvU0ZTQkxvY2FsLmphdmEKQEAgLTIxLDUgKzIxLDUgQEAKIHB1YmxpYyBpbnRlcmZhY2UgU0ZTQkxvY2FsCiAgICAgZXh0ZW5kcyBFSkJMb2NhbE9iamVjdAogewotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpOwkKKyAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9lamIvU0ZTQkxvY2FsSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2VqYi9TRlNCTG9jYWxIb21lLmphdmEKaW5kZXggMDUwMmExMi4uNDc3YzgzNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2VqYi9TRlNCTG9jYWxIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2VqYi9TRlNCTG9jYWxIb21lLmphdmEKQEAgLTIyLDYgKzIyLDYgQEAKIHB1YmxpYyBpbnRlcmZhY2UgU0ZTQkxvY2FsSG9tZQogICAgIGV4dGVuZHMgRUpCTG9jYWxIb21lCiB7Ci0JcHVibGljIFNGU0JMb2NhbCBjcmVhdGUoU3RyaW5nIHNmc2JOYW1lKQorICAgIHB1YmxpYyBTRlNCTG9jYWwgY3JlYXRlKFN0cmluZyBzZnNiTmFtZSkKICAgICAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvZWpiL1NpbXBsZUVudGl0eUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9lamIvU2ltcGxlRW50aXR5QmVhbi5qYXZhCmluZGV4IDRlNTYxMmMuLjg0MTM3OGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9lamIvU2ltcGxlRW50aXR5QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9lamIvU2ltcGxlRW50aXR5QmVhbi5qYXZhCkBAIC01Niw4ICs1Niw4IEBACiAgICAgICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CiAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKICAgICAgICAgdHJ5IHsKLQkgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAogICAgICAgICAgICAgICAgICJJTlNFUlQgSU5UTyBTaW1wbGVFbnRpdHkgKGtleWlkLCBuYW1lKSBWQUxVRVMgKD8sPykiKTsKICAgICAgICAgICAgIHBzLnNldFN0cmluZygxLCBrZXkpOwogICAgICAgICAgICAgcHMuc2V0U3RyaW5nKDIsIG5hbWUpOwpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgQ3JlYXRlRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLSAgICAgICAgfSBmaW5hbGx5IHsgCisgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmIChwcyAhPSBudWxsKQogICAgICAgICAgICAgICAgICAgICBwcy5jbG9zZSgpOwpAQCAtOTQsMTAgKzk0LDEwIEBACiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24KICAgICB7CiAgICAgICAgIENvbm5lY3Rpb24gYyA9IG51bGw7Ci0gICAgIAlQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKICAgICAgICAgICAgICAgICAiU0VMRUNUIGtleWlkIGZyb20gU2ltcGxlRW50aXR5IHdoZXJlIGtleWlkID0gPyIpOwogICAgICAgICAgICAgcHMuc2V0U3RyaW5nKDEsIGtleSk7CiAgICAgICAgICAgICBSZXN1bHRTZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTsKQEAgLTEwNyw3ICsxMDcsNyBAQAogICAgICAgICAgICAgcmV0dXJuIGtleTsKICAgICAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRmluZGVyRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLSAgICAgICAgfSBmaW5hbGx5IHsgCisgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmIChwcyAhPSBudWxsKQogICAgICAgICAgICAgICAgICAgICBwcy5jbG9zZSgpOwpAQCAtMTI1LDY1ICsxMjUsNjUgQEAKICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAogICAgICAgICAgICAgICAgICJTRUxFQ1QgbmFtZSBmcm9tIFNpbXBsZUVudGl0eSB3aGVyZSBrZXlpZCA9ID8iKTsKICAgICAgICAgICAgIHBzLnNldFN0cmluZygxLCBrZXkpOwotCSAgICBSZXN1bHRTZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTsKLQkgICAgaWYgKCFycy5uZXh0KCkpCi0JICAgICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIk5vIGN1c3QgZm9yICIgKyBrZXkpOwotCSAgICB0aGlzLm5hbWUgPSBycy5nZXRTdHJpbmcoMSk7Ci0JfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCX0gZmluYWxseSB7IAotCSAgICB0cnkgewotCQlpZiAocHMgIT0gbnVsbCkKLQkJICAgIHBzLmNsb3NlKCk7Ci0JCWlmIChjICE9IG51bGwpCi0JCSAgICBjLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCX0KKyAgICAgICAgUmVzdWx0U2V0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7CisgICAgICAgIGlmICghcnMubmV4dCgpKQorICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJObyBjdXN0IGZvciAiICsga2V5KTsKKyAgICAgICAgdGhpcy5uYW1lID0gcnMuZ2V0U3RyaW5nKDEpOworICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgeworICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgIGlmIChjICE9IG51bGwpCisgICAgICAgICAgICBjLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsKLQlDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCXRyeSB7Ci0JICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSJVUERBVEUgU2ltcGxlRW50aXR5IFNFVCBuYW1lID0gPyBXSEVSRSBrZXlpZCA9ID8iKTsKLQkgICAgcHMuc2V0U3RyaW5nKDEsIG5hbWUpOwotCSAgICBwcy5zZXRTdHJpbmcoMiwga2V5KTsKLQkgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJEaWRudCBzdG9yZSBlamIiKTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JfSBmaW5hbGx5IHsgCi0JICAgIHRyeSB7Ci0JCWlmIChwcyAhPSBudWxsKQotCQkgICAgcHMuY2xvc2UoKTsKLQkJaWYgKGMgIT0gbnVsbCkKLQkJICAgIGMuY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JfQorICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgIlVQREFURSBTaW1wbGVFbnRpdHkgU0VUIG5hbWUgPSA/IFdIRVJFIGtleWlkID0gPyIpOworICAgICAgICBwcy5zZXRTdHJpbmcoMSwgbmFtZSk7CisgICAgICAgIHBzLnNldFN0cmluZygyLCBrZXkpOworICAgICAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkRpZG50IHN0b3JlIGVqYiIpOworICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgIGlmIChjICE9IG51bGwpCisgICAgICAgICAgICBjLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3ZlRXhjZXB0aW9uIHsKLQlDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCXRyeSB7Ci0JICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSJERUxFVEUgRlJPTSBTaW1wbGVFbnRpdHkgV0hFUkUga2V5aWQgPSA/Iik7Ci0JICAgIHBzLnNldFN0cmluZygxLCBuYW1lKTsKLQkgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQotCQl0aHJvdyBuZXcgUmVtb3ZlRXhjZXB0aW9uKCJEaWRudCByZW1vdmUgZWpiIik7Ci0JfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgIHRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCX0gZmluYWxseSB7IAotCSAgICB0cnkgewotCQlpZiAocHMgIT0gbnVsbCkKLQkJICAgIHBzLmNsb3NlKCk7Ci0JCWlmIChjICE9IG51bGwpCi0JCSAgICBjLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCX0KKyAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICJERUxFVEUgRlJPTSBTaW1wbGVFbnRpdHkgV0hFUkUga2V5aWQgPSA/Iik7CisgICAgICAgIHBzLnNldFN0cmluZygxLCBuYW1lKTsKKyAgICAgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQorICAgICAgICB0aHJvdyBuZXcgUmVtb3ZlRXhjZXB0aW9uKCJEaWRudCByZW1vdmUgZWpiIik7CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgIHRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBkNzA4NzE5Li40MTM4N2FjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItc2ZzYi1saWZlY3ljbGUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvYnVpbGQueG1sCmluZGV4IDlhMTRjNWEuLjc0NmJhOTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywgKiovKlNGU0IqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtNjksNyArNjksNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgLS0+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8IS0tCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgpAQCAtODEsMTcgKzgxLDE3IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDRmMTgyYWUuLjllZTc3MDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzMsOCArMzMsOCBAQAogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0Tm90UnVuICAgID0gIlRFU1QgTk9UIFJVTiI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RQYXNzZWQgICAgPSAiVEVTVCBQQVNTRUQiOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0RmFpbGVkICAgID0gIlRFU1QgRkFJTEVEIjsKLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgICAgTUFYX1NGU0JTID0gMjQ7CkBAIC01MiwxNSArNTIsMTUgQEAKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltsZlRyYWRpdGlvbmFsXSBET05FIGRvVGVzdCgpLi4uIik7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJwYXNzaXZhdGVhY3RpdmF0ZSIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIGluaXRTRlNCTGlzdCgpOyAgICAgLy9jcmVhdGUgU0ZTQnMgCisgICAgICAgIGluaXRTRlNCTGlzdCgpOyAgICAgLy9jcmVhdGUgU0ZTQnMKICAgICAgICAgYWNjZXNzU0ZTQigpOyAgICAgICAvL2FjY2VzcyB0aGUgU0ZCUwotCXJlbW92ZVRlc3QoKTsKKyAgICByZW1vdmVUZXN0KCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGluaXRTRlNCTGlzdCgpIHsKQEAgLTkwLDQ3ICs5MCw0NyBAQAogCiAgICAgcHVibGljIHZvaWQgYWNjZXNzU0ZTQigpIHsKICAgICAgICAgdHJ5IHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciAxMCBzZWNvbmRzIGJlZm9yZSBhY2Nlc3NpbmcuLi4iKTsKLQkgICAgZm9yIChpbnQgaT0wOyBpPDEwOyBpKyspIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIiICsgKDEwIC0gaSkgKyAiIHNlY29uZHMgbGVmdC4uLiIpOwotCQl0cnkgewotCQkgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxKjEwMDApOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJfQotCSAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgMTAgc2Vjb25kcyBiZWZvcmUgYWNjZXNzaW5nLi4uIik7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTwxMDsgaSsrKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArICgxMCAtIGkpICsgIiBzZWNvbmRzIGxlZnQuLi4iKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMSoxMDAwKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAgICAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CiAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBNQVhfU0ZTQlM7IGkrKykgewogICAgICAgICAgICAgICAgIHRyeSB7Ci0JCVNGU0Igc2ZzYiA9IChTRlNCKSBzZnNiTGlzdC5nZXQoaSk7CisgICAgICAgIFNGU0Igc2ZzYiA9IChTRlNCKSBzZnNiTGlzdC5nZXQoaSk7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHNmc2JOYW1lID0gX3Nmc2JQcmVmaXgraTsKLQkJU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBib29sZWFuIG9rID0gc2ZzYi5pc09LKHNmc2JOYW1lKTsKLQkJaW50IGFjdENvdW50ID0gc2ZzYi5nZXRBY3RpdmF0aW9uQ291bnQoKTsKLQkJaW50IHBhc0NvdW50ID0gc2ZzYi5nZXRQYXNzaXZhdGlvbkNvdW50KCk7CisgICAgICAgIFN0cmluZyByZXRyaWV2ZWROYW1lID0gc2ZzYi5nZXROYW1lKCk7CiAKLQkJYm9vbGVhbiBhY3RpdmF0aW9uVGVzdCA9IChhY3RDb3VudCAhPSAwKTsKLQkJYm9vbGVhbiBwYXNzaXZhdGlvblRlc3QgPSAocGFzQ291bnQgIT0gMCk7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBvayA9IHNmc2IuaXNPSyhzZnNiTmFtZSk7CisgICAgICAgIGludCBhY3RDb3VudCA9IHNmc2IuZ2V0QWN0aXZhdGlvbkNvdW50KCk7CisgICAgICAgIGludCBwYXNDb3VudCA9IHNmc2IuZ2V0UGFzc2l2YXRpb25Db3VudCgpOworCisgICAgICAgIGJvb2xlYW4gYWN0aXZhdGlvblRlc3QgPSAoYWN0Q291bnQgIT0gMCk7CisgICAgICAgIGJvb2xlYW4gcGFzc2l2YXRpb25UZXN0ID0gKHBhc0NvdW50ICE9IDApOwogCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWFuWyIgKyBpICsgIi8iICsgTUFYX1NGU0JTICsgIl0gbmFtZTogIiArIHNmc2JOYW1lCi0JCSAgICArICI7IHJldHJpZXZlZE5hbWU6ICIgKyByZXRyaWV2ZWROYW1lCi0JCSAgICArICI7IG9rOiAiICsgb2sKLQkJICAgICsgIjsgIiArIGFjdGl2YXRpb25UZXN0ICsgIiAoIiArIGFjdENvdW50ICsgIikiCi0JCSAgICArICI7ICIgKyBwYXNzaXZhdGlvblRlc3QgKyAiICgiICsgcGFzQ291bnQgKyAiKSIKLQkJKTsKKyAgICAgICAgICAgICsgIjsgcmV0cmlldmVkTmFtZTogIiArIHJldHJpZXZlZE5hbWUKKyAgICAgICAgICAgICsgIjsgb2s6ICIgKyBvaworICAgICAgICAgICAgKyAiOyAiICsgYWN0aXZhdGlvblRlc3QgKyAiICgiICsgYWN0Q291bnQgKyAiKSIKKyAgICAgICAgICAgICsgIjsgIiArIHBhc3NpdmF0aW9uVGVzdCArICIgKCIgKyBwYXNDb3VudCArICIpIgorICAgICAgICApOwogCiAgICAgICAgICAgICAgICAgcGFzc2VkID0gcGFzc2VkICYgc2ZzYk5hbWUuZXF1YWxzKHJldHJpZXZlZE5hbWUpCiAgICAgICAgICAgICAgICAgICAgICYmIG9rCi0JCSAgICAmJiBhY3RpdmF0aW9uVGVzdCAmJiBwYXNzaXZhdGlvblRlc3Q7CisgICAgICAgICAgICAmJiBhY3RpdmF0aW9uVGVzdCAmJiBwYXNzaXZhdGlvblRlc3Q7CiAKICAgICAgICAgICAgICAgICBpZiAoISBwYXNzZWQpIHsKICAgICAgICAgICAgICAgICAgICAgLy9icmVhazsKICAgICAgICAgICAgICAgICB9Ci0JCXNmc2Iuc2xlZXBGb3JTZWNvbmRzKDEpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVhblsiICsgaSArICJdIEdvdCBleGNlcHRpb246ICIgKyBleCk7Ci0JCX0KKyAgICAgICAgc2ZzYi5zbGVlcEZvclNlY29uZHMoMSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWFuWyIgKyBpICsgIl0gR290IGV4Y2VwdGlvbjogIiArIGV4KTsKKyAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAocGFzc2VkKSB7CkBAIC0xNDQsNDQgKzE0NCw0NCBAQAogICAgICAgICAgICAgICAgIFN0cmluZyBzZnNiTmFtZSA9IF9zZnNiUHJlZml4K2k7CiAKICAgICAgICAgICAgICAgICBzZnNiLm1ha2VTdGF0ZU5vblNlcmlhbGl6YWJsZSgpOwotCSAgICB9CisgICAgICAgIH0KIAotCSAgICAvL0NyZWF0aW5nIHRoZXNlIG1hbnkgU0ZTQnMgc2hvdWxkIGZvcmNlIHBhc3NpdmF0aW9uIG9mIHRoZSBhYm92ZQotCSAgICAvLwlub24tc2VyaWFsaXphYmxlIGJlYW5zCisgICAgICAgIC8vQ3JlYXRpbmcgdGhlc2UgbWFueSBTRlNCcyBzaG91bGQgZm9yY2UgcGFzc2l2YXRpb24gb2YgdGhlIGFib3ZlCisgICAgICAgIC8vICAgIG5vbi1zZXJpYWxpemFibGUgYmVhbnMKICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IE1BWF9TRlNCUzsgaSsrKSB7Ci0JCWhvbWUuY3JlYXRlKF9zZnNiUHJlZml4ICsgKGkrMSkqMTAwMCk7Ci0JICAgIH0KKyAgICAgICAgaG9tZS5jcmVhdGUoX3Nmc2JQcmVmaXggKyAoaSsxKSoxMDAwKTsKKyAgICAgICAgfQogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgMTAgc2Vjb25kcyBmb3IgcGFzc2l2YXRpb24gdG8gY29tcGxldGUuLi4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciAxMCBzZWNvbmRzIGZvciBwYXNzaXZhdGlvbiB0byBjb21wbGV0ZS4uLiIpOwogCi0JICAgIGZvciAoaW50IGk9MDsgaTwxMDsgaSsrKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIiArICgxMCAtIGkpICsgIiBzZWNvbmRzIGxlZnQuLi4iKTsKLQkJdHJ5IHsKLQkJICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMSoxMDAwKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCX0KLQkgICAgfQorICAgICAgICBmb3IgKGludCBpPTA7IGk8MTA7IGkrKykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyAoMTAgLSBpKSArICIgc2Vjb25kcyBsZWZ0Li4uIik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEqMTAwMCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICB9CisgICAgICAgIH0KIAogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgTUFYX1NGU0JTOyBpKyspIHsKICAgICAgICAgICAgICAgICBTRlNCIHNmc2IgPSAoU0ZTQikgc2ZzYkxpc3QuZ2V0KGkpOwogICAgICAgICAgICAgICAgIFN0cmluZyBzZnNiTmFtZSA9IF9zZnNiUHJlZml4K2k7CiAKICAgICAgICAgICAgICAgICB0cnkgewotCQkgICAgU3lzdGVtLm91dC5wcmludCgiRXhwZWN0aW5nIGV4Y2VwdGlvbiBmb3I6ICIgKyBzZnNiTmFtZSk7Ci0JCSAgICBTdHJpbmcgbm0gPSBzZnNiLmdldE5hbWUoKTsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRVJST1IuIERpZG4ndCBnZXQgZXhwZWN0ZWQgZXhjZXB0aW9uLiAiCi0JCQkgICAgKyAiR290OiAiICsgbm0pOwotCQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JCSAgICBicmVhazsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsqKkdvdCBFeGNlcHRpb24qKl0iKTsKLQkJfQotCSAgICB9Ci0JICAgIGlmIChwYXNzZWQpIHsKLQkJc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBub24tc2VyaWFsaXphYmxlLXN0YXRlIiwgc3RhdC5QQVNTKTsKLQkgICAgfSBlbHNlIHsKLQkJc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBub24tc2VyaWFsaXphYmxlLXN0YXRlIiwgc3RhdC5GQUlMKTsKLQkgICAgfQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiRXhwZWN0aW5nIGV4Y2VwdGlvbiBmb3I6ICIgKyBzZnNiTmFtZSk7CisgICAgICAgICAgICBTdHJpbmcgbm0gPSBzZnNiLmdldE5hbWUoKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRVJST1IuIERpZG4ndCBnZXQgZXhwZWN0ZWQgZXhjZXB0aW9uLiAiCisgICAgICAgICAgICAgICAgKyAiR290OiAiICsgbm0pOworICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsqKkdvdCBFeGNlcHRpb24qKl0iKTsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChwYXNzZWQpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBub24tc2VyaWFsaXphYmxlLXN0YXRlIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBub24tc2VyaWFsaXphYmxlLXN0YXRlIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgYWNjZXNzU0ZTQiIsIHN0YXQuRkFJTCk7CiAKQEAgLTE5MCwyOCArMTkwLDI4IEBACiAKIAogICAgIHB1YmxpYyB2b2lkIHJlbW92ZVRlc3QoKSB7Ci0JU0ZTQiBzZnNiID0gbnVsbDsKLQl0cnkgewotCSAgICBTdHJpbmcgbXlOYW1lID0gIl8yXyIgKyBfc2ZzYlByZWZpeCArICJfMl8iOwotCSAgICBzZnNiID0gKFNGU0IpIGhvbWUuY3JlYXRlKG15TmFtZSk7Ci0JICAgIFN0cmluZyByZXRyaWV2ZWROYW1lID0gc2ZzYi5nZXROYW1lKCk7Ci0JICAgIGJvb2xlYW4gbmFtZU9LID0gbXlOYW1lLmVxdWFsc0lnbm9yZUNhc2UocmV0cmlldmVkTmFtZSk7Ci0JICAgIGJvb2xlYW4gZ290RXhjZXB0aW9uID0gZmFsc2U7Ci0JICAgIHNmc2IucmVtb3ZlKCk7Ci0JICAgIEV4Y2VwdGlvbiBleGNlcCA9IG51bGw7Ci0JICAgIHRyeSB7Ci0JCXNmc2IuZ2V0TmFtZSgpOwotCQlnb3RFeGNlcHRpb24gPSBmYWxzZTsJICAgIC8vRXhwZWN0aW5nIGFuIGV4Y2VwdGlvbgotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJZ290RXhjZXB0aW9uID0gdHJ1ZTsKLQkJZXhjZXAgPSBleDsKLQkgICAgfQorICAgIFNGU0Igc2ZzYiA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgU3RyaW5nIG15TmFtZSA9ICJfMl8iICsgX3Nmc2JQcmVmaXggKyAiXzJfIjsKKyAgICAgICAgc2ZzYiA9IChTRlNCKSBob21lLmNyZWF0ZShteU5hbWUpOworICAgICAgICBTdHJpbmcgcmV0cmlldmVkTmFtZSA9IHNmc2IuZ2V0TmFtZSgpOworICAgICAgICBib29sZWFuIG5hbWVPSyA9IG15TmFtZS5lcXVhbHNJZ25vcmVDYXNlKHJldHJpZXZlZE5hbWUpOworICAgICAgICBib29sZWFuIGdvdEV4Y2VwdGlvbiA9IGZhbHNlOworICAgICAgICBzZnNiLnJlbW92ZSgpOworICAgICAgICBFeGNlcHRpb24gZXhjZXAgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICBzZnNiLmdldE5hbWUoKTsKKyAgICAgICAgZ290RXhjZXB0aW9uID0gZmFsc2U7ICAgICAgICAvL0V4cGVjdGluZyBhbiBleGNlcHRpb24KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGdvdEV4Y2VwdGlvbiA9IHRydWU7CisgICAgICAgIGV4Y2VwID0gZXg7CisgICAgICAgIH0KIAotCSAgICBTdHJpbmcgcmVzdWx0U3RyID0gIigiICsgbmFtZU9LICsgIiBAQEAgIiArIGdvdEV4Y2VwdGlvbiArICIpIjsKKyAgICAgICAgU3RyaW5nIHJlc3VsdFN0ciA9ICIoIiArIG5hbWVPSyArICIgQEBAICIgKyBnb3RFeGNlcHRpb24gKyAiKSI7CiAgICAgICAgICAgICBpZiAobmFtZU9LICYmIGdvdEV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgcmVtb3ZlVGVzdCAiICsgcmVzdWx0U3RyLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLQkJc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCByZW1vdmVUZXN0ICIgKyByZXN1bHRTdHIsIHN0YXQuRkFJTCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgcmVtb3ZlVGVzdCAiICsgcmVzdWx0U3RyLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDllY2YwMDEuLjNmNmUxYTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgICAgPGpuZGktbmFtZT5lamIvZWpiX3Nmc2JfbGlmZWN5Y2xlX1NGU0I8L2puZGktbmFtZT4KICAgICAgICAgPGJlYW4tY2FjaGU+CiAgICAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+ODwvbWF4LWNhY2hlLXNpemU+Ci0JICAgIDxyZXNpemUtcXVhbnRpdHk+NDwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICA8cmVzaXplLXF1YW50aXR5PjQ8L3Jlc2l6ZS1xdWFudGl0eT4KICAgICAgICAgPC9iZWFuLWNhY2hlPgogICAgICA8L2VqYj4KICAgIDwvZW50ZXJwcmlzZS1iZWFucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9lamIvU0ZTQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL2VqYi9TRlNCLmphdmEKaW5kZXggOWExMTQ4OC4uMmJmOWZmZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL2VqYi9TRlNCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL2VqYi9TRlNCLmphdmEKQEAgLTI0LDIzICsyNCwyMyBAQAogewogCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgaW50IGdldEFjdGl2YXRpb25Db3VudCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGludCBnZXRQYXNzaXZhdGlvbkNvdW50KCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgdm9pZCBtYWtlU3RhdGVOb25TZXJpYWxpemFibGUoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyB2b2lkIHNsZWVwRm9yU2Vjb25kcyhpbnQgc2VjKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBib29sZWFuIGlzT0soU3RyaW5nIG5hbWUpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIHZvaWQgdW51c2VkTWV0aG9kKCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvZWpiL1NGU0JFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9lamIvU0ZTQkVKQi5qYXZhCmluZGV4IDgzOGE1YWYuLjhlODYwMzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9lamIvU0ZTQkVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9lamIvU0ZTQkVKQi5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiBAQ2FsbGJhY2tMaXN0ZW5lcigiY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5zZnNiLmxpZmVjeWNsZS5lamIuTGlmZWN5Y2xlTGlzdGVuZXIiKQogQFN0YXRlZnVsCiBwdWJsaWMgY2xhc3MgU0ZTQkVKQgotICAgIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gCisgICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbgogewogCiAgICAgcHJpdmF0ZSBDb250ZXh0IGVudkN0eDsKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICBzZnNiTmFtZTsKICAgICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICBlbnZFbnRyeVRhZ1ZhbHVlOwogICAgIHByaXZhdGUgU0ZTQkhvbWUgICAgICAgICAgICAgICAgICAgIHNmc2JIb21lOwotICAgIHByaXZhdGUgU0ZTQiAgICAgICAgICAgICAgICAgICAgICAgIHNmc2JSZW1vdGU7ICAgIAorICAgIHByaXZhdGUgU0ZTQiAgICAgICAgICAgICAgICAgICAgICAgIHNmc2JSZW1vdGU7CiAgICAgcHJpdmF0ZSBTRlNCTG9jYWxIb21lICAgICAgICAgICAgICAgc2ZzYkxvY2FsSG9tZTsKICAgICBwcml2YXRlIFNGU0JMb2NhbCAgICAgICAgICAgICAgICAgICBzZnNiTG9jYWw7CiAKQEAgLTU3LDkgKzU3LDkgQEAKICAgICBwcml2YXRlIFVzZXJUcmFuc2FjdGlvbiAgICAgICAgICAgICB1c2VyVHJhbnNhY3Rpb24xOwogICAgIHByaXZhdGUgVXNlclRyYW5zYWN0aW9uICAgICAgICAgICAgIHVzZXJUcmFuc2FjdGlvbjI7CiAKLSAgICBwcml2YXRlIGludAkJCQlhY3RpdmF0aW9uQ291bnQ7Ci0gICAgcHJpdmF0ZSBpbnQJCQkJcGFzc2l2YXRpb25Db3VudDsKLSAgICBwcml2YXRlIE9iamVjdAkJCW5vblNlcmlhbGl6YWJsZVN0YXRlOworICAgIHByaXZhdGUgaW50ICAgICAgICAgICAgICAgIGFjdGl2YXRpb25Db3VudDsKKyAgICBwcml2YXRlIGludCAgICAgICAgICAgICAgICBwYXNzaXZhdGlvbkNvdW50OworICAgIHByaXZhdGUgT2JqZWN0ICAgICAgICAgICAgbm9uU2VyaWFsaXphYmxlU3RhdGU7CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoU3RyaW5nIHNmc2JOYW1lKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkluIFNGU0IuZWpiQ3JlYXRlKCkgZm9yIG5hbWUgLT4gIiArIHNmc2JOYW1lKTsKQEAgLTY4LDEzICs2OCwxMyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgc2ZzYkhvbWUgPSAoU0ZTQkhvbWUpIHNlc3Npb25DdHguZ2V0RUpCSG9tZSgpOwogICAgICAgICAgICAgc2ZzYkxvY2FsSG9tZSA9IChTRlNCTG9jYWxIb21lKSBzZXNzaW9uQ3R4LmdldEVKQkxvY2FsSG9tZSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGhvbWVIYW5kbGUgPSBzZnNiSG9tZS5nZXRIb21lSGFuZGxlKCk7CiAgICAgICAgICAgICBoYW5kbGUgPSBzZXNzaW9uQ3R4LmdldEVKQk9iamVjdCgpLmdldEhhbmRsZSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHVzZXJUcmFuc2FjdGlvbjEgPSBzZXNzaW9uQ3R4LmdldFVzZXJUcmFuc2FjdGlvbigpOwogICAgICAgICAgICAgdXNlclRyYW5zYWN0aW9uMiA9IChVc2VyVHJhbnNhY3Rpb24pIG5ldyBJbml0aWFsQ29udGV4dCgpLgotCSAgICBsb29rdXAoImphdmE6Y29tcC9Vc2VyVHJhbnNhY3Rpb24iKTsKKyAgICAgICAgbG9va3VwKCJqYXZhOmNvbXAvVXNlclRyYW5zYWN0aW9uIik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAvL1RPRE8KQEAgLTEzMyw3ICsxMzMsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrVXNlclRyYW5zYWN0aW9uKCkgewogICAgICAgICBib29sZWFuIHN0YXR1cyA9CiAgICAgICAgICAgICAoKHVzZXJUcmFuc2FjdGlvbjEgIT0gbnVsbCkgJiYgKHVzZXJUcmFuc2FjdGlvbjIgIT0gbnVsbCkpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYoIHN0YXR1cyApIHsKICAgICAgICAgICAgICAgICB1c2VyVHJhbnNhY3Rpb24xLmJlZ2luKCk7CkBAIC0xODQsOSArMTg0LDkgQEAKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgb2sgPSBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0aGlzLm1lc3NhZ2UgPSAob2spID8gbnVsbCA6IChmaWVsZE5hbWUgKyAiIG5vdCByZXN0b3JlZCBwcm9wZXJseSIpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gb2s7CiAgICAgfQogCkBAIC0xOTUsMjIgKzE5NSwyMiBAQAogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0QWN0aXZhdGlvbkNvdW50KCkgewotCXJldHVybiB0aGlzLmFjdGl2YXRpb25Db3VudDsKKyAgICByZXR1cm4gdGhpcy5hY3RpdmF0aW9uQ291bnQ7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRQYXNzaXZhdGlvbkNvdW50KCkgewotCXJldHVybiB0aGlzLnBhc3NpdmF0aW9uQ291bnQ7CisgICAgcmV0dXJuIHRoaXMucGFzc2l2YXRpb25Db3VudDsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBtYWtlU3RhdGVOb25TZXJpYWxpemFibGUoKSB7Ci0Jbm9uU2VyaWFsaXphYmxlU3RhdGUgPSBuZXcgT2JqZWN0KCk7CisgICAgbm9uU2VyaWFsaXphYmxlU3RhdGUgPSBuZXcgT2JqZWN0KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2xlZXBGb3JTZWNvbmRzKGludCBzZWMpIHsKLQl0cnkgewotCSAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKHNlYyAqIDEwMDApOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCX0KKyAgICB0cnkgeworICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKHNlYyAqIDEwMDApOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB1bnVzZWRNZXRob2QoKSB7CkBAIC0yMzIsNyArMjMyLDcgQEAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7Ci0JdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiQ29udGFpbmVyIGNhbGxlZCBlamJBY3RpdmF0ZT8/Pz8/Iik7CisgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiQ29udGFpbmVyIGNhbGxlZCBlamJBY3RpdmF0ZT8/Pz8/Iik7CiAgICAgfQogCiAgICAgdm9pZCBwb3N0QWN0aXZhdGUoKSB7CkBAIC0yNDAsNyArMjQwLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7Ci0JdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiQ29udGFpbmVyIGNhbGxlZCBlamJQYXNzaXZhdGU/Pz8/PyIpOworICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkNvbnRhaW5lciBjYWxsZWQgZWpiUGFzc2l2YXRlPz8/Pz8iKTsKICAgICB9CiAKICAgICBAUHJlUGFzc2l2YXRlCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvZWpiL1NGU0JMb2NhbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL2VqYi9TRlNCTG9jYWwuamF2YQppbmRleCA4NzcxNWJlLi5iMjM0MGIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvZWpiL1NGU0JMb2NhbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9lamIvU0ZTQkxvY2FsLmphdmEKQEAgLTIxLDUgKzIxLDUgQEAKIHB1YmxpYyBpbnRlcmZhY2UgU0ZTQkxvY2FsCiAgICAgZXh0ZW5kcyBFSkJMb2NhbE9iamVjdAogewotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpOwkKKyAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9lamIvU0ZTQkxvY2FsSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL2VqYi9TRlNCTG9jYWxIb21lLmphdmEKaW5kZXggYjg4ZGMyZC4uNDE1MGJhNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL2VqYi9TRlNCTG9jYWxIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL2VqYi9TRlNCTG9jYWxIb21lLmphdmEKQEAgLTIyLDYgKzIyLDYgQEAKIHB1YmxpYyBpbnRlcmZhY2UgU0ZTQkxvY2FsSG9tZQogICAgIGV4dGVuZHMgRUpCTG9jYWxIb21lCiB7Ci0JcHVibGljIFNGU0JMb2NhbCBjcmVhdGUoU3RyaW5nIHNmc2JOYW1lKQorICAgIHB1YmxpYyBTRlNCTG9jYWwgY3JlYXRlKFN0cmluZyBzZnNiTmFtZSkKICAgICAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCA2NmM0YjEyLi44M2ZiMjhjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIFNpbXBsZUVudGl0eTsNCi0NCi1DUkVBVEUgVEFCTEUgU2ltcGxlRW50aXR5ICgNCi0gICAga2V5ICAgICBjaGFyKDEyOCkgbm90IG51bGwsDQotICAgIG5hbWUgICAgY2hhcigxMjgpDQotKTsNCi0NCitEcm9wIHRhYmxlIFNpbXBsZUVudGl0eTsKKworQ1JFQVRFIFRBQkxFIFNpbXBsZUVudGl0eSAoCisgICAga2V5ICAgICBjaGFyKDEyOCkgbm90IG51bGwsCisgICAgbmFtZSAgICBjaGFyKDEyOCkKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggOTM1YzRhNi4uM2YyMWFlYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgU2ltcGxlRW50aXR5Ow0KK0Ryb3AgdGFibGUgU2ltcGxlRW50aXR5OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggMWFkNjE4Ny4uNTliZjc5ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBTaW1wbGVFbnRpdHk7DQotDQotQ1JFQVRFIFRBQkxFIFNpbXBsZUVudGl0eSAoDQotICAgIGtleWlkICAgICBjaGFyKDEyOCkgbm90IG51bGwsDQotICAgIG5hbWUgICAgY2hhcigxMjgpDQotKTsNCi0NCitEcm9wIHRhYmxlIFNpbXBsZUVudGl0eTsKKworQ1JFQVRFIFRBQkxFIFNpbXBsZUVudGl0eSAoCisgICAga2V5aWQgICAgIGNoYXIoMTI4KSBub3QgbnVsbCwKKyAgICBuYW1lICAgIGNoYXIoMTI4KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA5MzVjNGE2Li4zZjIxYWViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBTaW1wbGVFbnRpdHk7DQorRHJvcCB0YWJsZSBTaW1wbGVFbnRpdHk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvYnVpbGQucHJvcGVydGllcwppbmRleCAyYTZiOGE0Li45ZTk2MWZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXNmc2ItcGFzc2l2YXRlYWN0aXZhdGUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2J1aWxkLnhtbAppbmRleCAyZjg2OGNhLi5kM2E2NzY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzLCAqKi8qU0ZTQiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAtLT4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwhLS0KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CkBAIC04MSwxNyArODEsMTcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDhjMjI5NTYuLjNiM2Y1YzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMzLDggKzMzLDggQEAKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdE5vdFJ1biAgICA9ICJURVNUIE5PVCBSVU4iOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0UGFzc2VkICAgID0gIlRFU1QgUEFTU0VEIjsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdEZhaWxlZCAgICA9ICJURVNUIEZBSUxFRCI7Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKworICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50ICAgIE1BWF9TRlNCUyA9IDQwOwpAQCAtNTIsMTUgKzUyLDE1IEBACiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbcGFzc2l2YXRlYWN0aXZhdGVDbGllbnRdIERPTkUgZG9UZXN0KCkuLi4iKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInBhc3NpdmF0ZWFjdGl2YXRlIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgaW5pdFNGU0JMaXN0KCk7ICAgICAvL2NyZWF0ZSBTRlNCcyAKKyAgICAgICAgaW5pdFNGU0JMaXN0KCk7ICAgICAvL2NyZWF0ZSBTRlNCcwogICAgICAgICBhY2Nlc3NTRlNCKCk7ICAgICAgIC8vYWNjZXNzIHRoZSBTRkJTCi0JcmVtb3ZlVGVzdCgpOworICAgIHJlbW92ZVRlc3QoKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW5pdFNGU0JMaXN0KCkgewpAQCAtOTAsMjEgKzkwLDIxIEBACiAKICAgICBwdWJsaWMgdm9pZCBhY2Nlc3NTRlNCKCkgewogICAgICAgICB0cnkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIDEwIHNlY29uZHMgYmVmb3JlIGFjY2Vzc2luZy4uLiIpOwotCSAgICBmb3IgKGludCBpPTA7IGk8MTA7IGkrKykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyAoMTAgLSBpKSArICIgc2Vjb25kcyBsZWZ0Li4uIik7Ci0JCXRyeSB7Ci0JCSAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEqMTAwMCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQl9Ci0JICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciAxMCBzZWNvbmRzIGJlZm9yZSBhY2Nlc3NpbmcuLi4iKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPDEwOyBpKyspIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiICsgKDEwIC0gaSkgKyAiIHNlY29uZHMgbGVmdC4uLiIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxKjEwMDApOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgfQorICAgICAgICB9CiAKICAgICAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IE1BWF9TRlNCUzsgaSsrKSB7CiAgICAgICAgICAgICAgICAgU0ZTQiBzZnNiID0gKFNGU0IpIHNmc2JMaXN0LmdldChpKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgc2ZzYk5hbWUgPSBfc2ZzYlByZWZpeCtpOwotCQlTdHJpbmcgcmV0cmlldmVkTmFtZSA9IHNmc2IuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgIAorICAgICAgICBTdHJpbmcgcmV0cmlldmVkTmFtZSA9IHNmc2IuZ2V0TmFtZSgpOworCiAgICAgICAgICAgICAgICAgYm9vbGVhbiBzZXNzaW9uQ3R4VGVzdCA9IHNmc2IuY2hlY2tTZXNzaW9uQ29udGV4dCgpOwogICAgICAgICAgICAgICAgIGJvb2xlYW4gaW5pdGlhbEN0eFRlc3QgPSBzZnNiLmNoZWNrSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgICAgICBib29sZWFuIGVudGl0eUhvbWVUZXN0ID0gc2ZzYi5jaGVja0VudGl0eUhvbWUoKTsKQEAgLTExNCwzMiArMTE0LDMyIEBACiAgICAgICAgICAgICAgICAgYm9vbGVhbiBob21lSGFuZGxlVGVzdCA9IHNmc2IuY2hlY2tIb21lSGFuZGxlKCk7CiAgICAgICAgICAgICAgICAgYm9vbGVhbiBoYW5kbGVUZXN0ID0gc2ZzYi5jaGVja0hhbmRsZSgpOwogICAgICAgICAgICAgICAgIGJvb2xlYW4gdXRUZXN0ID0gc2ZzYi5jaGVja1VzZXJUcmFuc2FjdGlvbigpOwotCQlib29sZWFuIGFjdGl2YXRpb25UZXN0ID0gKHNmc2IuZ2V0QWN0aXZhdGlvbkNvdW50KCkgIT0gMCk7Ci0JCWJvb2xlYW4gcGFzc2l2YXRpb25UZXN0ID0gKHNmc2IuZ2V0UGFzc2l2YXRpb25Db3VudCgpICE9IDApOworICAgICAgICBib29sZWFuIGFjdGl2YXRpb25UZXN0ID0gKHNmc2IuZ2V0QWN0aXZhdGlvbkNvdW50KCkgIT0gMCk7CisgICAgICAgIGJvb2xlYW4gcGFzc2l2YXRpb25UZXN0ID0gKHNmc2IuZ2V0UGFzc2l2YXRpb25Db3VudCgpICE9IDApOwogCi0JCWludCBhY3RDb3VudCA9IHNmc2IuZ2V0QWN0aXZhdGlvbkNvdW50KCk7Ci0JCWludCBwYXNDb3VudCA9IHNmc2IuZ2V0UGFzc2l2YXRpb25Db3VudCgpOworICAgICAgICBpbnQgYWN0Q291bnQgPSBzZnNiLmdldEFjdGl2YXRpb25Db3VudCgpOworICAgICAgICBpbnQgcGFzQ291bnQgPSBzZnNiLmdldFBhc3NpdmF0aW9uQ291bnQoKTsKIAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzZXNzaW9uQ3R4VGVzdCArICI7ICIgKyBpbml0aWFsQ3R4VGVzdAogICAgICAgICAgICAgICAgICAgICArICI7ICIgKyBlbnRpdHlIb21lVGVzdCArICI7ICIgKyBlbnRpdHlMb2NhbEhvbWVUZXN0CiAgICAgICAgICAgICAgICAgICAgICsgIjsgIiArIGVudGl0eVJlbW90ZVRlc3QgKyAiOyAiICsgZW50aXR5TG9jYWxUZXN0Ci0gICAgICAgICAgICAgICAgICAgICsgIjsgIiArIGhvbWVIYW5kbGVUZXN0ICsgIjsgIiArIGhhbmRsZVRlc3QgCisgICAgICAgICAgICAgICAgICAgICsgIjsgIiArIGhvbWVIYW5kbGVUZXN0ICsgIjsgIiArIGhhbmRsZVRlc3QKICAgICAgICAgICAgICAgICAgICAgKyAiOyAiICsgdXRUZXN0Ci0JCSAgICArICI7ICIgKyBhY3RpdmF0aW9uVGVzdCArICIgKCIgKyBhY3RDb3VudCArICIpIgotCQkgICAgKyAiOyAiICsgcGFzc2l2YXRpb25UZXN0ICsgIiAoIiArIHBhc0NvdW50ICsgIikiCi0JCSk7CisgICAgICAgICAgICArICI7ICIgKyBhY3RpdmF0aW9uVGVzdCArICIgKCIgKyBhY3RDb3VudCArICIpIgorICAgICAgICAgICAgKyAiOyAiICsgcGFzc2l2YXRpb25UZXN0ICsgIiAoIiArIHBhc0NvdW50ICsgIikiCisgICAgICAgICk7CiAKICAgICAgICAgICAgICAgICBwYXNzZWQgPSBzZXNzaW9uQ3R4VGVzdCAmJiBpbml0aWFsQ3R4VGVzdAogICAgICAgICAgICAgICAgICAgICAmJiBlbnRpdHlIb21lVGVzdCAmJiBlbnRpdHlMb2NhbEhvbWVUZXN0CiAgICAgICAgICAgICAgICAgICAgICYmIGVudGl0eVJlbW90ZVRlc3QgJiYgZW50aXR5TG9jYWxUZXN0CiAgICAgICAgICAgICAgICAgICAgICYmIGhvbWVIYW5kbGVUZXN0ICYmIGhhbmRsZVRlc3QgJiYgdXRUZXN0Ci0JCSAgICAmJiBhY3RpdmF0aW9uVGVzdCAmJiBwYXNzaXZhdGlvblRlc3Q7CisgICAgICAgICAgICAmJiBhY3RpdmF0aW9uVGVzdCAmJiBwYXNzaXZhdGlvblRlc3Q7CiAKICAgICAgICAgICAgICAgICBpZiAoISBwYXNzZWQpIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCi0JCXNmc2Iuc2xlZXBGb3JTZWNvbmRzKDIpOworICAgICAgICBzZnNiLnNsZWVwRm9yU2Vjb25kcygyKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHBhc3NlZCkgewpAQCAtMTUzLDQ0ICsxNTMsNDQgQEAKICAgICAgICAgICAgICAgICBTdHJpbmcgc2ZzYk5hbWUgPSBfc2ZzYlByZWZpeCtpOwogCiAgICAgICAgICAgICAgICAgc2ZzYi5tYWtlU3RhdGVOb25TZXJpYWxpemFibGUoKTsKLQkgICAgfQorICAgICAgICB9CiAKLQkgICAgLy9DcmVhdGluZyB0aGVzZSBtYW55IFNGU0JzIHNob3VsZCBmb3JjZSBwYXNzaXZhdGlvbiBvZiB0aGUgYWJvdmUKLQkgICAgLy8Jbm9uLXNlcmlhbGl6YWJsZSBiZWFucworICAgICAgICAvL0NyZWF0aW5nIHRoZXNlIG1hbnkgU0ZTQnMgc2hvdWxkIGZvcmNlIHBhc3NpdmF0aW9uIG9mIHRoZSBhYm92ZQorICAgICAgICAvLyAgICBub24tc2VyaWFsaXphYmxlIGJlYW5zCiAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBNQVhfU0ZTQlM7IGkrKykgewotCQlob21lLmNyZWF0ZShfc2ZzYlByZWZpeCArIChpKzEpKjEwMDApOwotCSAgICB9CisgICAgICAgIGhvbWUuY3JlYXRlKF9zZnNiUHJlZml4ICsgKGkrMSkqMTAwMCk7CisgICAgICAgIH0KIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIDEwIHNlY29uZHMgZm9yIHBhc3NpdmF0aW9uIHRvIGNvbXBsZXRlLi4uIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgMTAgc2Vjb25kcyBmb3IgcGFzc2l2YXRpb24gdG8gY29tcGxldGUuLi4iKTsKIAotCSAgICBmb3IgKGludCBpPTA7IGk8MTA7IGkrKykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyAoMTAgLSBpKSArICIgc2Vjb25kcyBsZWZ0Li4uIik7Ci0JCXRyeSB7Ci0JCSAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEqMTAwMCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQl9Ci0JICAgIH0KKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPDEwOyBpKyspIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiICsgKDEwIC0gaSkgKyAiIHNlY29uZHMgbGVmdC4uLiIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxKjEwMDApOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgfQorICAgICAgICB9CiAKICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IE1BWF9TRlNCUzsgaSsrKSB7CiAgICAgICAgICAgICAgICAgU0ZTQiBzZnNiID0gKFNGU0IpIHNmc2JMaXN0LmdldChpKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgc2ZzYk5hbWUgPSBfc2ZzYlByZWZpeCtpOwogCiAgICAgICAgICAgICAgICAgdHJ5IHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnQoIkV4cGVjdGluZyBleGNlcHRpb24gZm9yOiAiICsgc2ZzYk5hbWUpOwotCQkgICAgU3RyaW5nIG5tID0gc2ZzYi5nZXROYW1lKCk7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SLiBEaWRuJ3QgZ2V0IGV4cGVjdGVkIGV4Y2VwdGlvbi4gIgotCQkJICAgICsgIkdvdDogIiArIG5tKTsKLQkJICAgIHBhc3NlZCA9IGZhbHNlOwotCQkgICAgYnJlYWs7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJbKipHb3QgRXhjZXB0aW9uKipdIik7Ci0JCX0KLQkgICAgfQotCSAgICBpZiAocGFzc2VkKSB7Ci0JCXN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgbm9uLXNlcmlhbGl6YWJsZS1zdGF0ZSIsIHN0YXQuUEFTUyk7Ci0JICAgIH0gZWxzZSB7Ci0JCXN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgbm9uLXNlcmlhbGl6YWJsZS1zdGF0ZSIsIHN0YXQuRkFJTCk7Ci0JICAgIH0KKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkV4cGVjdGluZyBleGNlcHRpb24gZm9yOiAiICsgc2ZzYk5hbWUpOworICAgICAgICAgICAgU3RyaW5nIG5tID0gc2ZzYi5nZXROYW1lKCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SLiBEaWRuJ3QgZ2V0IGV4cGVjdGVkIGV4Y2VwdGlvbi4gIgorICAgICAgICAgICAgICAgICsgIkdvdDogIiArIG5tKTsKKyAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbKipHb3QgRXhjZXB0aW9uKipdIik7CisgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocGFzc2VkKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgbm9uLXNlcmlhbGl6YWJsZS1zdGF0ZSIsIHN0YXQuUEFTUyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgbm9uLXNlcmlhbGl6YWJsZS1zdGF0ZSIsIHN0YXQuRkFJTCk7CisgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGFjY2Vzc1NGU0IiLCBzdGF0LkZBSUwpOwogCkBAIC0xOTksMzMgKzE5OSwzMyBAQAogCiAKICAgICBwdWJsaWMgdm9pZCByZW1vdmVUZXN0KCkgewotCVNGU0Igc2ZzYiA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgU3RyaW5nIG15TmFtZSA9ICJfMl8iICsgX3Nmc2JQcmVmaXggKyAiXzJfIjsKLQkgICAgc2ZzYiA9IChTRlNCKSBob21lLmNyZWF0ZShteU5hbWUpOwotCSAgICBTdHJpbmcgcmV0cmlldmVkTmFtZSA9IHNmc2IuZ2V0TmFtZSgpOwotCSAgICBib29sZWFuIG5hbWVPSyA9IG15TmFtZS5lcXVhbHNJZ25vcmVDYXNlKHJldHJpZXZlZE5hbWUpOwotCSAgICBib29sZWFuIGdvdEV4Y2VwdGlvbiA9IGZhbHNlOworICAgIFNGU0Igc2ZzYiA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgU3RyaW5nIG15TmFtZSA9ICJfMl8iICsgX3Nmc2JQcmVmaXggKyAiXzJfIjsKKyAgICAgICAgc2ZzYiA9IChTRlNCKSBob21lLmNyZWF0ZShteU5hbWUpOworICAgICAgICBTdHJpbmcgcmV0cmlldmVkTmFtZSA9IHNmc2IuZ2V0TmFtZSgpOworICAgICAgICBib29sZWFuIG5hbWVPSyA9IG15TmFtZS5lcXVhbHNJZ25vcmVDYXNlKHJldHJpZXZlZE5hbWUpOworICAgICAgICBib29sZWFuIGdvdEV4Y2VwdGlvbiA9IGZhbHNlOwogCiAgICAgICAgICAgICAvLyBUZXN0IEJNVCBTRlNCIHJlbW92ZSBjYWxsZWQgaW4gYSB0cmFuc2FjdGlvbgotICAgICAgICAgICAgamFrYXJ0YS50cmFuc2FjdGlvbi5Vc2VyVHJhbnNhY3Rpb24gdXQgPSAoamFrYXJ0YS50cmFuc2FjdGlvbi5Vc2VyVHJhbnNhY3Rpb24pIAorICAgICAgICAgICAgamFrYXJ0YS50cmFuc2FjdGlvbi5Vc2VyVHJhbnNhY3Rpb24gdXQgPSAoamFrYXJ0YS50cmFuc2FjdGlvbi5Vc2VyVHJhbnNhY3Rpb24pCiAgICAgICAgICAgICAgICAgICAgICAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiamF2YTpjb21wL1VzZXJUcmFuc2FjdGlvbiIpOwogICAgICAgICAgICAgdXQuYmVnaW4oKTsKLQkgICAgc2ZzYi5yZW1vdmUoKTsKKyAgICAgICAgc2ZzYi5yZW1vdmUoKTsKICAgICAgICAgICAgIHV0LmNvbW1pdCgpOwotCSAgICB0cnkgewotCQlzZnNiLmdldE5hbWUoKTsKLQkJZ290RXhjZXB0aW9uID0gZmFsc2U7CSAgICAvL0V4cGVjdGluZyBhbiBleGNlcHRpb24KLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCWdvdEV4Y2VwdGlvbiA9IHRydWU7Ci0JICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgc2ZzYi5nZXROYW1lKCk7CisgICAgICAgIGdvdEV4Y2VwdGlvbiA9IGZhbHNlOyAgICAgICAgLy9FeHBlY3RpbmcgYW4gZXhjZXB0aW9uCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBnb3RFeGNlcHRpb24gPSB0cnVlOworICAgICAgICB9CiAKLQkgICAgU3RyaW5nIHJlc3VsdFN0ciA9ICIoIiArIG5hbWVPSyArICIgQEBAICIgKyBnb3RFeGNlcHRpb24gKyAiKSI7CisgICAgICAgIFN0cmluZyByZXN1bHRTdHIgPSAiKCIgKyBuYW1lT0sgKyAiIEBAQCAiICsgZ290RXhjZXB0aW9uICsgIikiOwogICAgICAgICAgICAgaWYgKG5hbWVPSyAmJiBnb3RFeGNlcHRpb24pIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IHJlbW92ZVRlc3QgIiArIHJlc3VsdFN0ciwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCI9PT09PT0+IEZBSUwgYmVjYXVzZTogbmFtZU9LOiAiICsgbmFtZU9LICsgIiBnb3RFeGNlcHRpb246ICIgKyBnb3RFeGNlcHRpb24pOwotCQlzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IHJlbW92ZVRlc3QgIiArIHJlc3VsdFN0ciwgc3RhdC5GQUlMKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCByZW1vdmVUZXN0ICIgKyByZXN1bHRTdHIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDMxYzk3MWIuLmMyOWFmMzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgIDwvZWpiLXJlZj4KICAgICAgICAgPGJlYW4tY2FjaGU+CiAgICAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+ODwvbWF4LWNhY2hlLXNpemU+Ci0JICAgIDxyZXNpemUtcXVhbnRpdHk+NDwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICA8cmVzaXplLXF1YW50aXR5PjQ8L3Jlc2l6ZS1xdWFudGl0eT4KICAgICAgICAgPC9iZWFuLWNhY2hlPgogICAgICA8L2VqYj4KICAgICAgPGVqYj4KQEAgLTQ3LDEwICs0NywxMCBAQAogICAgICAgICAgICAgPHJlcy1yZWYtbmFtZT5qZGJjL0RhdGFTb3VyY2U8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9fX2RlZmF1bHQ8L2puZGktbmFtZT4KICAgICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0JPGJlYW4tcG9vbD4KLQkgICAgPHN0ZWFkeS1wb29sLXNpemU+NDwvc3RlYWR5LXBvb2wtc2l6ZT4KLQkgICAgPG1heC1wb29sLXNpemU+MTc8L21heC1wb29sLXNpemU+Ci0JPC9iZWFuLXBvb2w+CisgICAgPGJlYW4tcG9vbD4KKyAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+NDwvc3RlYWR5LXBvb2wtc2l6ZT4KKyAgICAgICAgPG1heC1wb29sLXNpemU+MTc8L21heC1wb29sLXNpemU+CisgICAgPC9iZWFuLXBvb2w+CiAgICAgIDwvZWpiPgogICAgPC9lbnRlcnByaXNlLWJlYW5zPgogPC9zdW4tZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TRlNCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU0ZTQi5qYXZhCmluZGV4IDJiNGEyMTEuLmQ2MDJhY2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TRlNCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvZWpiL1NGU0IuamF2YQpAQCAtMjQsMzcgKzI0LDM3IEBACiB7CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVNGU0JDaGlsZCgpIAotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgcHVibGljIHZvaWQgY3JlYXRlU0ZTQkNoaWxkKCkKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1Nlc3Npb25Db250ZXh0KCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAgICAgCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja0luaXRpYWxDb250ZXh0KCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAgICAgCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja0VudGl0eUhvbWUoKQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOyAgICAgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrRW50aXR5TG9jYWxIb21lKCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAgICAgCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja0VudGl0eVJlbW90ZVJlZigpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247ICAgICAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tFbnRpdHlMb2NhbFJlZigpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247ICAgICAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tIb21lSGFuZGxlKCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAgICAgCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja0hhbmRsZSgpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247ICAgICAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tVc2VyVHJhbnNhY3Rpb24oKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwpAQCAtNjMsMTcgKzYzLDE3IEBACiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgaW50IGdldEFjdGl2YXRpb25Db3VudCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGludCBnZXRQYXNzaXZhdGlvbkNvdW50KCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgdm9pZCBtYWtlU3RhdGVOb25TZXJpYWxpemFibGUoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyB2b2lkIHNsZWVwRm9yU2Vjb25kcyhpbnQgc2VjKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyB2b2lkIHVudXNlZE1ldGhvZCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvZWpiL1NGU0JFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TRlNCRUpCLmphdmEKaW5kZXggZGYxYTQ2ZC4uZDg3ZWQ4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvZWpiL1NGU0JFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU0ZTQkVKQi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCiBwdWJsaWMgY2xhc3MgU0ZTQkVKQgotICAgIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gCisgICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbgogewogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExPQ0FMX0NISUxEX1NVRkZJWCA9ICJfY2hpbGRMb2NhbCI7CkBAIC01MSw3ICs1MSw3IEBACiAgICAgcHJpdmF0ZSBTaW1wbGVFbnRpdHlMb2NhbEhvbWUgICAgICAgZW50aXR5TG9jYWxIb21lOwogICAgIHByaXZhdGUgU2ltcGxlRW50aXR5TG9jYWwgICAgICAgICAgIGVudGl0eUxvY2FsOwogICAgIHByaXZhdGUgU0ZTQkhvbWUgICAgICAgICAgICAgICAgICAgIHNmc2JIb21lOwotICAgIHByaXZhdGUgU0ZTQiAgICAgICAgICAgICAgICAgICAgICAgIHNmc2JSZW1vdGU7ICAgIAorICAgIHByaXZhdGUgU0ZTQiAgICAgICAgICAgICAgICAgICAgICAgIHNmc2JSZW1vdGU7CiAgICAgcHJpdmF0ZSBTRlNCTG9jYWxIb21lICAgICAgICAgICAgICAgc2ZzYkxvY2FsSG9tZTsKICAgICBwcml2YXRlIFNGU0JMb2NhbCAgICAgICAgICAgICAgICAgICBzZnNiTG9jYWw7CiAKQEAgLTYwLDkgKzYwLDkgQEAKICAgICBwcml2YXRlIFVzZXJUcmFuc2FjdGlvbiAgICAgICAgICAgICB1c2VyVHJhbnNhY3Rpb24xOwogICAgIHByaXZhdGUgVXNlclRyYW5zYWN0aW9uICAgICAgICAgICAgIHVzZXJUcmFuc2FjdGlvbjI7CiAKLSAgICBwcml2YXRlIGludAkJCQlhY3RpdmF0aW9uQ291bnQ7Ci0gICAgcHJpdmF0ZSBpbnQJCQkJcGFzc2l2YXRpb25Db3VudDsKLSAgICBwcml2YXRlIE9iamVjdAkJCW5vblNlcmlhbGl6YWJsZVN0YXRlOworICAgIHByaXZhdGUgaW50ICAgICAgICAgICAgICAgIGFjdGl2YXRpb25Db3VudDsKKyAgICBwcml2YXRlIGludCAgICAgICAgICAgICAgICBwYXNzaXZhdGlvbkNvdW50OworICAgIHByaXZhdGUgT2JqZWN0ICAgICAgICAgICAgbm9uU2VyaWFsaXphYmxlU3RhdGU7CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoU3RyaW5nIHNmc2JOYW1lKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkluIFNGU0IuZWpiQ3JlYXRlKCkgZm9yIG5hbWUgLT4gIiArIHNmc2JOYW1lKTsKQEAgLTc1LDEwICs3NSwxMCBAQAogCiAgICAgICAgICAgICBzZnNiSG9tZSA9IChTRlNCSG9tZSkgc2Vzc2lvbkN0eC5nZXRFSkJIb21lKCk7CiAgICAgICAgICAgICBzZnNiTG9jYWxIb21lID0gKFNGU0JMb2NhbEhvbWUpIHNlc3Npb25DdHguZ2V0RUpCTG9jYWxIb21lKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaG9tZUhhbmRsZSA9IGVudGl0eUhvbWUuZ2V0SG9tZUhhbmRsZSgpOwogICAgICAgICAgICAgaGFuZGxlID0gZW50aXR5UmVtb3RlLmdldEhhbmRsZSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHVzZXJUcmFuc2FjdGlvbjEgPSBzZXNzaW9uQ3R4LmdldFVzZXJUcmFuc2FjdGlvbigpOwogICAgICAgICAgICAgdXNlclRyYW5zYWN0aW9uMiA9IChVc2VyVHJhbnNhY3Rpb24pIG5ldyBJbml0aWFsQ29udGV4dCgpLgogICAgICAgICAgICAgICAgIGxvb2t1cCgiamF2YTpjb21wL1VzZXJUcmFuc2FjdGlvbiIpOwpAQCAtOTgsMTUgKzk4LDE1IEBACiAgICAgICAgICAgICBzZnNiUmVtb3RlID0gc2ZzYkhvbWUuY3JlYXRlKHNmc2JOYW1lICsgIiBfY2hpbGQiKTsKICAgICAgICAgICAgIHNmc2JMb2NhbCA9IHNmc2JMb2NhbEhvbWUuY3JlYXRlKHNmc2JOYW1lICsgTE9DQUxfQ0hJTERfU1VGRklYKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBFSkJFeGNlcHRpb24gZXggPSBuZXcgRUpCRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkgICAgZXguaW5pdENhdXNlKGUpOworICAgICAgICBFSkJFeGNlcHRpb24gZXggPSBuZXcgRUpCRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgZXguaW5pdENhdXNlKGUpOwogICAgICAgICAgICAgdGhyb3cgZXg7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NGU0JDaGlsZCgpIHsKICAgICAgICAgU3RyaW5nIGNoaWxkTmFtZSA9IHNmc2JMb2NhbC5nZXROYW1lKCk7Ci0gICAgICAgIGJvb2xlYW4gc3RhdHVzID0gY2hpbGROYW1lLmVxdWFscyhzZnNiTmFtZSArIExPQ0FMX0NISUxEX1NVRkZJWCk7ICAgICAgIAorICAgICAgICBib29sZWFuIHN0YXR1cyA9IGNoaWxkTmFtZS5lcXVhbHMoc2ZzYk5hbWUgKyBMT0NBTF9DSElMRF9TVUZGSVgpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIApAQCAtMjAzLDcgKzIwMyw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tVc2VyVHJhbnNhY3Rpb24oKSB7CiAgICAgICAgIGJvb2xlYW4gc3RhdHVzID0KICAgICAgICAgICAgICgodXNlclRyYW5zYWN0aW9uMSAhPSBudWxsKSAmJiAodXNlclRyYW5zYWN0aW9uMiAhPSBudWxsKSk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiggc3RhdHVzICkgewogICAgICAgICAgICAgICAgIHVzZXJUcmFuc2FjdGlvbjEuYmVnaW4oKTsKQEAgLTIzNSw3ICsyMzUsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gImphdmE6IjsKLSAgICAgICAgICAgICAgICBvayA9ICggKGphdmFDdHggIT0gbnVsbCkgJiYgCisgICAgICAgICAgICAgICAgb2sgPSAoIChqYXZhQ3R4ICE9IG51bGwpICYmCiAgICAgICAgICAgICAgICAgICAgICAgIGphdmFDdHguZ2V0TmFtZUluTmFtZXNwYWNlKCkuZXF1YWxzKGZpZWxkTmFtZSkgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChvaykgewpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gImphdmE6Y29tcC9lbnYiOwogICAgICAgICAgICAgICAgIG9rID0gKCAoZW52Q3R4ICE9IG51bGwpICYmCiAgICAgICAgICAgICAgICAgICAgICAgIGVudkN0eC5nZXROYW1lSW5OYW1lc3BhY2UoKS5lcXVhbHMoZmllbGROYW1lKSApOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSAiamF2YTpjb21wL2Vudi9lamIiOwpAQCAtMjU2LDcgKzI1Niw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSAiZW52LWVudHJ5IjsKLSAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZTEgPSAoU3RyaW5nKQogICAgICAgICAgICAgICAgICAgICBpbml0aWFsQ3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9UYWdWYWx1ZSIpOwogICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZTIgPSAoU3RyaW5nKSBlbnZDdHgubG9va3VwKCJUYWdWYWx1ZSIpOwpAQCAtMjY4LDkgKzI2OCw5IEBACiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdGhpcy5tZXNzYWdlID0gKG9rKSA/IG51bGwgOiAoZmllbGROYW1lICsgIiBub3QgcmVzdG9yZWQgcHJvcGVybHkiKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG9rOwogICAgIH0KIApAQCAtMjc5LDIyICsyNzksMjIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldEFjdGl2YXRpb25Db3VudCgpIHsKLQlyZXR1cm4gdGhpcy5hY3RpdmF0aW9uQ291bnQ7CisgICAgcmV0dXJuIHRoaXMuYWN0aXZhdGlvbkNvdW50OwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0UGFzc2l2YXRpb25Db3VudCgpIHsKLQlyZXR1cm4gdGhpcy5wYXNzaXZhdGlvbkNvdW50OworICAgIHJldHVybiB0aGlzLnBhc3NpdmF0aW9uQ291bnQ7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgbWFrZVN0YXRlTm9uU2VyaWFsaXphYmxlKCkgewotCW5vblNlcmlhbGl6YWJsZVN0YXRlID0gbmV3IE9iamVjdCgpOworICAgIG5vblNlcmlhbGl6YWJsZVN0YXRlID0gbmV3IE9iamVjdCgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNsZWVwRm9yU2Vjb25kcyhpbnQgc2VjKSB7Ci0JdHJ5IHsKLQkgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcChzZWMgKiAxMDAwKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcChzZWMgKiAxMDAwKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdW51c2VkTWV0aG9kKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvZWpiL1NGU0JIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU0ZTQkhvbWUuamF2YQppbmRleCA0YzYzNmIzLi40ZWEyZWFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU0ZTQkhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU0ZTQkhvbWUuamF2YQpAQCAtMjMsNiArMjMsNiBAQAogcHVibGljIGludGVyZmFjZSBTRlNCSG9tZQogICAgIGV4dGVuZHMgRUpCSG9tZQogewotCXB1YmxpYyBTRlNCIGNyZWF0ZShTdHJpbmcgc2ZzYk5hbWUpCisgICAgcHVibGljIFNGU0IgY3JlYXRlKFN0cmluZyBzZnNiTmFtZSkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvZWpiL1NGU0JMb2NhbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvZWpiL1NGU0JMb2NhbC5qYXZhCmluZGV4IGI1NGFjYTcuLmFjOGE3NDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TRlNCTG9jYWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU0ZTQkxvY2FsLmphdmEKQEAgLTIxLDUgKzIxLDUgQEAKIHB1YmxpYyBpbnRlcmZhY2UgU0ZTQkxvY2FsCiAgICAgZXh0ZW5kcyBFSkJMb2NhbE9iamVjdAogewotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpOwkKKyAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TRlNCTG9jYWxIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU0ZTQkxvY2FsSG9tZS5qYXZhCmluZGV4IGM5MWNiOWQuLjRhZmI2OGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TRlNCTG9jYWxIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvZWpiL1NGU0JMb2NhbEhvbWUuamF2YQpAQCAtMjIsNiArMjIsNiBAQAogcHVibGljIGludGVyZmFjZSBTRlNCTG9jYWxIb21lCiAgICAgZXh0ZW5kcyBFSkJMb2NhbEhvbWUKIHsKLQlwdWJsaWMgU0ZTQkxvY2FsIGNyZWF0ZShTdHJpbmcgc2ZzYk5hbWUpCisgICAgcHVibGljIFNGU0JMb2NhbCBjcmVhdGUoU3RyaW5nIHNmc2JOYW1lKQogICAgICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TaW1wbGVFbnRpdHlCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU2ltcGxlRW50aXR5QmVhbi5qYXZhCmluZGV4IGM5ZTRlY2EuLjcwYmQ2OTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TaW1wbGVFbnRpdHlCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvZWpiL1NpbXBsZUVudGl0eUJlYW4uamF2YQpAQCAtNTYsOCArNTYsOCBAQAogICAgICAgICBDb25uZWN0aW9uIGMgPSBudWxsOwogICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CiAgICAgICAgIHRyeSB7Ci0JICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKICAgICAgICAgICAgICAgICAiSU5TRVJUIElOVE8gU2ltcGxlRW50aXR5IChrZXlpZCwgbmFtZSkgVkFMVUVTICg/LD8pIik7CiAgICAgICAgICAgICBwcy5zZXRTdHJpbmcoMSwga2V5KTsKICAgICAgICAgICAgIHBzLnNldFN0cmluZygyLCBuYW1lKTsKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewogICAgICAgICAgICAgdGhyb3cgbmV3IENyZWF0ZUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0gICAgICAgIH0gZmluYWxseSB7IAorICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZiAocHMgIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICAgcHMuY2xvc2UoKTsKQEAgLTk0LDEwICs5NCwxMCBAQAogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uCiAgICAgewogICAgICAgICBDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCSAgICB0cnkgewotCSAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCiAgICAgICAgICAgICAgICAgIlNFTEVDVCBrZXlpZCBmcm9tIFNpbXBsZUVudGl0eSB3aGVyZSBrZXlpZCA9ID8iKTsKICAgICAgICAgICAgIHBzLnNldFN0cmluZygxLCBrZXkpOwogICAgICAgICAgICAgUmVzdWx0U2V0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7CkBAIC0xMDcsNyArMTA3LDcgQEAKICAgICAgICAgICAgIHJldHVybiBrZXk7CiAgICAgICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewogICAgICAgICAgICAgdGhyb3cgbmV3IEZpbmRlckV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0gICAgICAgIH0gZmluYWxseSB7IAorICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZiAocHMgIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICAgcHMuY2xvc2UoKTsKQEAgLTEyNSw2NSArMTI1LDY1IEBACiAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKICAgICAgICAgICAgICAgICAiU0VMRUNUIG5hbWUgZnJvbSBTaW1wbGVFbnRpdHkgd2hlcmUga2V5aWQgPSA/Iik7CiAgICAgICAgICAgICBwcy5zZXRTdHJpbmcoMSwga2V5KTsKLQkgICAgUmVzdWx0U2V0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7Ci0JICAgIGlmICghcnMubmV4dCgpKQotCSAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJObyBjdXN0IGZvciAiICsga2V5KTsKLQkgICAgdGhpcy5uYW1lID0gcnMuZ2V0U3RyaW5nKDEpOwotCX0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewotCSAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQl9IGZpbmFsbHkgeyAKLQkgICAgdHJ5IHsKLQkJaWYgKHBzICE9IG51bGwpCi0JCSAgICBwcy5jbG9zZSgpOwotCQlpZiAoYyAhPSBudWxsKQotCQkgICAgYy5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQl9CisgICAgICAgIFJlc3VsdFNldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpOworICAgICAgICBpZiAoIXJzLm5leHQoKSkKKyAgICAgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbigiTm8gY3VzdCBmb3IgIiArIGtleSk7CisgICAgICAgIHRoaXMubmFtZSA9IHJzLmdldFN0cmluZygxKTsKKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7Ci0JQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQl0cnkgewotCSAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAotCQkiVVBEQVRFIFNpbXBsZUVudGl0eSBTRVQgbmFtZSA9ID8gV0hFUkUga2V5aWQgPSA/Iik7Ci0JICAgIHBzLnNldFN0cmluZygxLCBuYW1lKTsKLQkgICAgcHMuc2V0U3RyaW5nKDIsIGtleSk7Ci0JICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkbnQgc3RvcmUgZWpiIik7Ci0JfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCX0gZmluYWxseSB7IAotCSAgICB0cnkgewotCQlpZiAocHMgIT0gbnVsbCkKLQkJICAgIHBzLmNsb3NlKCk7Ci0JCWlmIChjICE9IG51bGwpCi0JCSAgICBjLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCX0KKyAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICJVUERBVEUgU2ltcGxlRW50aXR5IFNFVCBuYW1lID0gPyBXSEVSRSBrZXlpZCA9ID8iKTsKKyAgICAgICAgcHMuc2V0U3RyaW5nKDEsIG5hbWUpOworICAgICAgICBwcy5zZXRTdHJpbmcoMiwga2V5KTsKKyAgICAgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQorICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJEaWRudCBzdG9yZSBlamIiKTsKKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW92ZUV4Y2VwdGlvbiB7Ci0JQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQl0cnkgewotCSAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAotCQkiREVMRVRFIEZST00gU2ltcGxlRW50aXR5IFdIRVJFIGtleWlkID0gPyIpOwotCSAgICBwcy5zZXRTdHJpbmcoMSwgbmFtZSk7Ci0JICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKLQkJdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiRGlkbnQgcmVtb3ZlIGVqYiIpOwotCX0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewotCSAgICB0aHJvdyBuZXcgUmVtb3ZlRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQl9IGZpbmFsbHkgeyAKLQkgICAgdHJ5IHsKLQkJaWYgKHBzICE9IG51bGwpCi0JCSAgICBwcy5jbG9zZSgpOwotCQlpZiAoYyAhPSBudWxsKQotCQkgICAgYy5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQl9CisgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiREVMRVRFIEZST00gU2ltcGxlRW50aXR5IFdIRVJFIGtleWlkID0gPyIpOworICAgICAgICBwcy5zZXRTdHJpbmcoMSwgbmFtZSk7CisgICAgICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKKyAgICAgICAgdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiRGlkbnQgcmVtb3ZlIGVqYiIpOworICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgeworICAgICAgICB0aHJvdyBuZXcgUmVtb3ZlRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgIGlmIChjICE9IG51bGwpCisgICAgICAgICAgICBjLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQ3MDg3MTkuLjQxMzg3YWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItc2ZzYi1saWZlY3ljbGUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2J1aWxkLnhtbAppbmRleCA5YTE0YzVhLi43NDZiYTk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzLCAqKi8qU0ZTQiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAtLT4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwhLS0KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CkBAIC04MSwxNyArODEsMTcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDZjMWM2M2EuLjA1OGJjNzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTM0LDggKzM0LDggQEAKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdE5vdFJ1biAgICA9ICJURVNUIE5PVCBSVU4iOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0UGFzc2VkICAgID0gIlRFU1QgUEFTU0VEIjsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdEZhaWxlZCAgICA9ICJURVNUIEZBSUxFRCI7Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKworICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50ICAgIE1BWF9TRlNCUyA9IDI0OwpAQCAtNTMsMTUgKzUzLDE1IEBACiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbbGZUcmFkaXRpb25hbF0gRE9ORSBkb1Rlc3QoKS4uLiIpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgicGFzc2l2YXRlYWN0aXZhdGUiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICBpbml0U0ZTQkxpc3QoKTsgICAgIC8vY3JlYXRlIFNGU0JzIAorICAgICAgICBpbml0U0ZTQkxpc3QoKTsgICAgIC8vY3JlYXRlIFNGU0JzCiAgICAgICAgIGFjY2Vzc1NGU0IoKTsgICAgICAgLy9hY2Nlc3MgdGhlIFNGQlMKLQlyZW1vdmVUZXN0KCk7CisgICAgcmVtb3ZlVGVzdCgpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbml0U0ZTQkxpc3QoKSB7CkBAIC05MSw0NyArOTEsNDcgQEAKIAogICAgIHB1YmxpYyB2b2lkIGFjY2Vzc1NGU0IoKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgMTAgc2Vjb25kcyBiZWZvcmUgYWNjZXNzaW5nLi4uIik7Ci0JICAgIGZvciAoaW50IGk9MDsgaTwxMDsgaSsrKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIiArICgxMCAtIGkpICsgIiBzZWNvbmRzIGxlZnQuLi4iKTsKLQkJdHJ5IHsKLQkJICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMSoxMDAwKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCX0KLQkgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIDEwIHNlY29uZHMgYmVmb3JlIGFjY2Vzc2luZy4uLiIpOworICAgICAgICBmb3IgKGludCBpPTA7IGk8MTA7IGkrKykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyAoMTAgLSBpKSArICIgc2Vjb25kcyBsZWZ0Li4uIik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEqMTAwMCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICB9CisgICAgICAgIH0KIAogICAgICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgTUFYX1NGU0JTOyBpKyspIHsKICAgICAgICAgICAgICAgICB0cnkgewotCQlTRlNCIHNmc2IgPSAoU0ZTQikgc2ZzYkxpc3QuZ2V0KGkpOworICAgICAgICBTRlNCIHNmc2IgPSAoU0ZTQikgc2ZzYkxpc3QuZ2V0KGkpOwogICAgICAgICAgICAgICAgIFN0cmluZyBzZnNiTmFtZSA9IF9zZnNiUHJlZml4K2k7Ci0JCVN0cmluZyByZXRyaWV2ZWROYW1lID0gc2ZzYi5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYm9vbGVhbiBvayA9IHNmc2IuaXNPSyhzZnNiTmFtZSk7Ci0JCWludCBhY3RDb3VudCA9IHNmc2IuZ2V0QWN0aXZhdGlvbkNvdW50KCk7Ci0JCWludCBwYXNDb3VudCA9IHNmc2IuZ2V0UGFzc2l2YXRpb25Db3VudCgpOworICAgICAgICBTdHJpbmcgcmV0cmlldmVkTmFtZSA9IHNmc2IuZ2V0TmFtZSgpOwogCi0JCWJvb2xlYW4gYWN0aXZhdGlvblRlc3QgPSAoYWN0Q291bnQgIT0gMCk7Ci0JCWJvb2xlYW4gcGFzc2l2YXRpb25UZXN0ID0gKHBhc0NvdW50ICE9IDApOworICAgICAgICAgICAgICAgIGJvb2xlYW4gb2sgPSBzZnNiLmlzT0soc2ZzYk5hbWUpOworICAgICAgICBpbnQgYWN0Q291bnQgPSBzZnNiLmdldEFjdGl2YXRpb25Db3VudCgpOworICAgICAgICBpbnQgcGFzQ291bnQgPSBzZnNiLmdldFBhc3NpdmF0aW9uQ291bnQoKTsKKworICAgICAgICBib29sZWFuIGFjdGl2YXRpb25UZXN0ID0gKGFjdENvdW50ICE9IDApOworICAgICAgICBib29sZWFuIHBhc3NpdmF0aW9uVGVzdCA9IChwYXNDb3VudCAhPSAwKTsKIAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVhblsiICsgaSArICIvIiArIE1BWF9TRlNCUyArICJdIG5hbWU6ICIgKyBzZnNiTmFtZQotCQkgICAgKyAiOyByZXRyaWV2ZWROYW1lOiAiICsgcmV0cmlldmVkTmFtZQotCQkgICAgKyAiOyBvazogIiArIG9rCi0JCSAgICArICI7ICIgKyBhY3RpdmF0aW9uVGVzdCArICIgKCIgKyBhY3RDb3VudCArICIpIgotCQkgICAgKyAiOyAiICsgcGFzc2l2YXRpb25UZXN0ICsgIiAoIiArIHBhc0NvdW50ICsgIikiCi0JCSk7CisgICAgICAgICAgICArICI7IHJldHJpZXZlZE5hbWU6ICIgKyByZXRyaWV2ZWROYW1lCisgICAgICAgICAgICArICI7IG9rOiAiICsgb2sKKyAgICAgICAgICAgICsgIjsgIiArIGFjdGl2YXRpb25UZXN0ICsgIiAoIiArIGFjdENvdW50ICsgIikiCisgICAgICAgICAgICArICI7ICIgKyBwYXNzaXZhdGlvblRlc3QgKyAiICgiICsgcGFzQ291bnQgKyAiKSIKKyAgICAgICAgKTsKIAogICAgICAgICAgICAgICAgIHBhc3NlZCA9IHBhc3NlZCAmIHNmc2JOYW1lLmVxdWFscyhyZXRyaWV2ZWROYW1lKQogICAgICAgICAgICAgICAgICAgICAmJiBvawotCQkgICAgJiYgYWN0aXZhdGlvblRlc3QgJiYgcGFzc2l2YXRpb25UZXN0OworICAgICAgICAgICAgJiYgYWN0aXZhdGlvblRlc3QgJiYgcGFzc2l2YXRpb25UZXN0OwogCiAgICAgICAgICAgICAgICAgaWYgKCEgcGFzc2VkKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotCQlzZnNiLnNsZWVwRm9yU2Vjb25kcygxKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlYW5bIiArIGkgKyAiXSBHb3QgZXhjZXB0aW9uOiAiICsgZXgpOwotCQl9CisgICAgICAgIHNmc2Iuc2xlZXBGb3JTZWNvbmRzKDEpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVhblsiICsgaSArICJdIEdvdCBleGNlcHRpb246ICIgKyBleCk7CisgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHBhc3NlZCkgewpAQCAtMTQ1LDQ0ICsxNDUsNDQgQEAKICAgICAgICAgICAgICAgICBTdHJpbmcgc2ZzYk5hbWUgPSBfc2ZzYlByZWZpeCtpOwogCiAgICAgICAgICAgICAgICAgc2ZzYi5tYWtlU3RhdGVOb25TZXJpYWxpemFibGUoKTsKLQkgICAgfQorICAgICAgICB9CiAKLQkgICAgLy9DcmVhdGluZyB0aGVzZSBtYW55IFNGU0JzIHNob3VsZCBmb3JjZSBwYXNzaXZhdGlvbiBvZiB0aGUgYWJvdmUKLQkgICAgLy8Jbm9uLXNlcmlhbGl6YWJsZSBiZWFucworICAgICAgICAvL0NyZWF0aW5nIHRoZXNlIG1hbnkgU0ZTQnMgc2hvdWxkIGZvcmNlIHBhc3NpdmF0aW9uIG9mIHRoZSBhYm92ZQorICAgICAgICAvLyAgICBub24tc2VyaWFsaXphYmxlIGJlYW5zCiAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBNQVhfU0ZTQlM7IGkrKykgewotCQlob21lLmNyZWF0ZShfc2ZzYlByZWZpeCArIChpKzEpKjEwMDApOwotCSAgICB9CisgICAgICAgIGhvbWUuY3JlYXRlKF9zZnNiUHJlZml4ICsgKGkrMSkqMTAwMCk7CisgICAgICAgIH0KIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIDEwIHNlY29uZHMgZm9yIHBhc3NpdmF0aW9uIHRvIGNvbXBsZXRlLi4uIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgMTAgc2Vjb25kcyBmb3IgcGFzc2l2YXRpb24gdG8gY29tcGxldGUuLi4iKTsKIAotCSAgICBmb3IgKGludCBpPTA7IGk8MTA7IGkrKykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyAoMTAgLSBpKSArICIgc2Vjb25kcyBsZWZ0Li4uIik7Ci0JCXRyeSB7Ci0JCSAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEqMTAwMCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQl9Ci0JICAgIH0KKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPDEwOyBpKyspIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiICsgKDEwIC0gaSkgKyAiIHNlY29uZHMgbGVmdC4uLiIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxKjEwMDApOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgfQorICAgICAgICB9CiAKICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IE1BWF9TRlNCUzsgaSsrKSB7CiAgICAgICAgICAgICAgICAgU0ZTQiBzZnNiID0gKFNGU0IpIHNmc2JMaXN0LmdldChpKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgc2ZzYk5hbWUgPSBfc2ZzYlByZWZpeCtpOwogCiAgICAgICAgICAgICAgICAgdHJ5IHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnQoIkV4cGVjdGluZyBleGNlcHRpb24gZm9yOiAiICsgc2ZzYk5hbWUpOwotCQkgICAgU3RyaW5nIG5tID0gc2ZzYi5nZXROYW1lKCk7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SLiBEaWRuJ3QgZ2V0IGV4cGVjdGVkIGV4Y2VwdGlvbi4gIgotCQkJICAgICsgIkdvdDogIiArIG5tKTsKLQkJICAgIHBhc3NlZCA9IGZhbHNlOwotCQkgICAgYnJlYWs7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJbKipHb3QgRXhjZXB0aW9uKipdIik7Ci0JCX0KLQkgICAgfQotCSAgICBpZiAocGFzc2VkKSB7Ci0JCXN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgbm9uLXNlcmlhbGl6YWJsZS1zdGF0ZSIsIHN0YXQuUEFTUyk7Ci0JICAgIH0gZWxzZSB7Ci0JCXN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgbm9uLXNlcmlhbGl6YWJsZS1zdGF0ZSIsIHN0YXQuRkFJTCk7Ci0JICAgIH0KKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkV4cGVjdGluZyBleGNlcHRpb24gZm9yOiAiICsgc2ZzYk5hbWUpOworICAgICAgICAgICAgU3RyaW5nIG5tID0gc2ZzYi5nZXROYW1lKCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SLiBEaWRuJ3QgZ2V0IGV4cGVjdGVkIGV4Y2VwdGlvbi4gIgorICAgICAgICAgICAgICAgICsgIkdvdDogIiArIG5tKTsKKyAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbKipHb3QgRXhjZXB0aW9uKipdIik7CisgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocGFzc2VkKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgbm9uLXNlcmlhbGl6YWJsZS1zdGF0ZSIsIHN0YXQuUEFTUyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgbm9uLXNlcmlhbGl6YWJsZS1zdGF0ZSIsIHN0YXQuRkFJTCk7CisgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGFjY2Vzc1NGU0IiLCBzdGF0LkZBSUwpOwogCkBAIC0xOTEsMjkgKzE5MSwyOSBAQAogCiAKICAgICBwdWJsaWMgdm9pZCByZW1vdmVUZXN0KCkgewotCVNGU0Igc2ZzYiA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgU3RyaW5nIG15TmFtZSA9ICJfMl8iICsgX3Nmc2JQcmVmaXggKyAiXzJfIjsKLQkgICAgc2ZzYiA9IChTRlNCKSBob21lLmNyZWF0ZShteU5hbWUpOwotCSAgICBTdHJpbmcgcmV0cmlldmVkTmFtZSA9IHNmc2IuZ2V0TmFtZSgpOwotCSAgICBib29sZWFuIG5hbWVPSyA9IG15TmFtZS5lcXVhbHNJZ25vcmVDYXNlKHJldHJpZXZlZE5hbWUpOwotCSAgICBib29sZWFuIGdvdEV4Y2VwdGlvbiA9IGZhbHNlOwotCSAgICBzZnNiLnJlbW92ZSgpOwotCSAgICBFeGNlcHRpb24gZXhjZXAgPSBudWxsOwotCSAgICB0cnkgewotCQlzZnNiLmdldE5hbWUoKTsKLQkJZ290RXhjZXB0aW9uID0gZmFsc2U7CSAgICAvL0V4cGVjdGluZyBhbiBleGNlcHRpb24KLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCWdvdEV4Y2VwdGlvbiA9IHRydWU7Ci0JCWV4Y2VwID0gZXg7Ci0JICAgIH0KKyAgICBTRlNCIHNmc2IgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIFN0cmluZyBteU5hbWUgPSAiXzJfIiArIF9zZnNiUHJlZml4ICsgIl8yXyI7CisgICAgICAgIHNmc2IgPSAoU0ZTQikgaG9tZS5jcmVhdGUobXlOYW1lKTsKKyAgICAgICAgU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldE5hbWUoKTsKKyAgICAgICAgYm9vbGVhbiBuYW1lT0sgPSBteU5hbWUuZXF1YWxzSWdub3JlQ2FzZShyZXRyaWV2ZWROYW1lKTsKKyAgICAgICAgYm9vbGVhbiBnb3RFeGNlcHRpb24gPSBmYWxzZTsKKyAgICAgICAgc2ZzYi5yZW1vdmUoKTsKKyAgICAgICAgRXhjZXB0aW9uIGV4Y2VwID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgc2ZzYi5nZXROYW1lKCk7CisgICAgICAgIGdvdEV4Y2VwdGlvbiA9IGZhbHNlOyAgICAgICAgLy9FeHBlY3RpbmcgYW4gZXhjZXB0aW9uCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBnb3RFeGNlcHRpb24gPSB0cnVlOworICAgICAgICBleGNlcCA9IGV4OworICAgICAgICB9CiAKLQkgICAgU3RyaW5nIHJlc3VsdFN0ciA9ICIoIiArIG5hbWVPSyArICIgQEBAICIgKyBnb3RFeGNlcHRpb24gKyAiKSI7CisgICAgICAgIFN0cmluZyByZXN1bHRTdHIgPSAiKCIgKyBuYW1lT0sgKyAiIEBAQCAiICsgZ290RXhjZXB0aW9uICsgIikiOwogICAgICAgICAgICAgaWYgKG5hbWVPSyAmJiBnb3RFeGNlcHRpb24pIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IHJlbW92ZVRlc3QgIiArIHJlc3VsdFN0ciwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCI9PT09PT0+IEZBSUwgMiBiZWNhdXNlOiBuYW1lT0s6ICIgKyBuYW1lT0sgKyAiIGdvdEV4Y2VwdGlvbjogIiArIGdvdEV4Y2VwdGlvbik7Ci0JCXN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgcmVtb3ZlVGVzdCAiICsgcmVzdWx0U3RyLCBzdGF0LkZBSUwpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IHJlbW92ZVRlc3QgIiArIHJlc3VsdFN0ciwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggOWVjZjAwMS4uM2Y2ZTFhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgICAgPGpuZGktbmFtZT5lamIvZWpiX3Nmc2JfbGlmZWN5Y2xlX1NGU0I8L2puZGktbmFtZT4KICAgICAgICAgPGJlYW4tY2FjaGU+CiAgICAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+ODwvbWF4LWNhY2hlLXNpemU+Ci0JICAgIDxyZXNpemUtcXVhbnRpdHk+NDwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICA8cmVzaXplLXF1YW50aXR5PjQ8L3Jlc2l6ZS1xdWFudGl0eT4KICAgICAgICAgPC9iZWFuLWNhY2hlPgogICAgICA8L2VqYj4KICAgIDwvZW50ZXJwcmlzZS1iZWFucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2VqYi9TRlNCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9lamIvU0ZTQi5qYXZhCmluZGV4IDlhMTE0ODguLjJiZjlmZmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2VqYi9TRlNCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvZWpiL1NGU0IuamF2YQpAQCAtMjQsMjMgKzI0LDIzIEBACiB7CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBpbnQgZ2V0QWN0aXZhdGlvbkNvdW50KCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgaW50IGdldFBhc3NpdmF0aW9uQ291bnQoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyB2b2lkIG1ha2VTdGF0ZU5vblNlcmlhbGl6YWJsZSgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIHZvaWQgc2xlZXBGb3JTZWNvbmRzKGludCBzZWMpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGJvb2xlYW4gaXNPSyhTdHJpbmcgbmFtZSkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgdm9pZCB1bnVzZWRNZXRob2QoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2VqYi9TRlNCRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9lamIvU0ZTQkVKQi5qYXZhCmluZGV4IDgzOGE1YWYuLjhlODYwMzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2VqYi9TRlNCRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvZWpiL1NGU0JFSkIuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogQENhbGxiYWNrTGlzdGVuZXIoImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuc2ZzYi5saWZlY3ljbGUuZWpiLkxpZmVjeWNsZUxpc3RlbmVyIikKIEBTdGF0ZWZ1bAogcHVibGljIGNsYXNzIFNGU0JFSkIKLSAgICBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIAorICAgIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4KIHsKIAogICAgIHByaXZhdGUgQ29udGV4dCBlbnZDdHg7CkBAIC00OCw3ICs0OCw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgc2ZzYk5hbWU7CiAgICAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgZW52RW50cnlUYWdWYWx1ZTsKICAgICBwcml2YXRlIFNGU0JIb21lICAgICAgICAgICAgICAgICAgICBzZnNiSG9tZTsKLSAgICBwcml2YXRlIFNGU0IgICAgICAgICAgICAgICAgICAgICAgICBzZnNiUmVtb3RlOyAgICAKKyAgICBwcml2YXRlIFNGU0IgICAgICAgICAgICAgICAgICAgICAgICBzZnNiUmVtb3RlOwogICAgIHByaXZhdGUgU0ZTQkxvY2FsSG9tZSAgICAgICAgICAgICAgIHNmc2JMb2NhbEhvbWU7CiAgICAgcHJpdmF0ZSBTRlNCTG9jYWwgICAgICAgICAgICAgICAgICAgc2ZzYkxvY2FsOwogCkBAIC01Nyw5ICs1Nyw5IEBACiAgICAgcHJpdmF0ZSBVc2VyVHJhbnNhY3Rpb24gICAgICAgICAgICAgdXNlclRyYW5zYWN0aW9uMTsKICAgICBwcml2YXRlIFVzZXJUcmFuc2FjdGlvbiAgICAgICAgICAgICB1c2VyVHJhbnNhY3Rpb24yOwogCi0gICAgcHJpdmF0ZSBpbnQJCQkJYWN0aXZhdGlvbkNvdW50OwotICAgIHByaXZhdGUgaW50CQkJCXBhc3NpdmF0aW9uQ291bnQ7Ci0gICAgcHJpdmF0ZSBPYmplY3QJCQlub25TZXJpYWxpemFibGVTdGF0ZTsKKyAgICBwcml2YXRlIGludCAgICAgICAgICAgICAgICBhY3RpdmF0aW9uQ291bnQ7CisgICAgcHJpdmF0ZSBpbnQgICAgICAgICAgICAgICAgcGFzc2l2YXRpb25Db3VudDsKKyAgICBwcml2YXRlIE9iamVjdCAgICAgICAgICAgIG5vblNlcmlhbGl6YWJsZVN0YXRlOwogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKFN0cmluZyBzZnNiTmFtZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJJbiBTRlNCLmVqYkNyZWF0ZSgpIGZvciBuYW1lIC0+ICIgKyBzZnNiTmFtZSk7CkBAIC02OCwxMyArNjgsMTMgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNmc2JIb21lID0gKFNGU0JIb21lKSBzZXNzaW9uQ3R4LmdldEVKQkhvbWUoKTsKICAgICAgICAgICAgIHNmc2JMb2NhbEhvbWUgPSAoU0ZTQkxvY2FsSG9tZSkgc2Vzc2lvbkN0eC5nZXRFSkJMb2NhbEhvbWUoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBob21lSGFuZGxlID0gc2ZzYkhvbWUuZ2V0SG9tZUhhbmRsZSgpOwogICAgICAgICAgICAgaGFuZGxlID0gc2Vzc2lvbkN0eC5nZXRFSkJPYmplY3QoKS5nZXRIYW5kbGUoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB1c2VyVHJhbnNhY3Rpb24xID0gc2Vzc2lvbkN0eC5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKICAgICAgICAgICAgIHVzZXJUcmFuc2FjdGlvbjIgPSAoVXNlclRyYW5zYWN0aW9uKSBuZXcgSW5pdGlhbENvbnRleHQoKS4KLQkgICAgbG9va3VwKCJqYXZhOmNvbXAvVXNlclRyYW5zYWN0aW9uIik7CisgICAgICAgIGxvb2t1cCgiamF2YTpjb21wL1VzZXJUcmFuc2FjdGlvbiIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgLy9UT0RPCkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1VzZXJUcmFuc2FjdGlvbigpIHsKICAgICAgICAgYm9vbGVhbiBzdGF0dXMgPQogICAgICAgICAgICAgKCh1c2VyVHJhbnNhY3Rpb24xICE9IG51bGwpICYmICh1c2VyVHJhbnNhY3Rpb24yICE9IG51bGwpKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmKCBzdGF0dXMgKSB7CiAgICAgICAgICAgICAgICAgdXNlclRyYW5zYWN0aW9uMS5iZWdpbigpOwpAQCAtMTg0LDkgKzE4NCw5IEBACiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdGhpcy5tZXNzYWdlID0gKG9rKSA/IG51bGwgOiAoZmllbGROYW1lICsgIiBub3QgcmVzdG9yZWQgcHJvcGVybHkiKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG9rOwogICAgIH0KIApAQCAtMTk1LDIyICsxOTUsMjIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldEFjdGl2YXRpb25Db3VudCgpIHsKLQlyZXR1cm4gdGhpcy5hY3RpdmF0aW9uQ291bnQ7CisgICAgcmV0dXJuIHRoaXMuYWN0aXZhdGlvbkNvdW50OwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0UGFzc2l2YXRpb25Db3VudCgpIHsKLQlyZXR1cm4gdGhpcy5wYXNzaXZhdGlvbkNvdW50OworICAgIHJldHVybiB0aGlzLnBhc3NpdmF0aW9uQ291bnQ7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgbWFrZVN0YXRlTm9uU2VyaWFsaXphYmxlKCkgewotCW5vblNlcmlhbGl6YWJsZVN0YXRlID0gbmV3IE9iamVjdCgpOworICAgIG5vblNlcmlhbGl6YWJsZVN0YXRlID0gbmV3IE9iamVjdCgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNsZWVwRm9yU2Vjb25kcyhpbnQgc2VjKSB7Ci0JdHJ5IHsKLQkgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcChzZWMgKiAxMDAwKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcChzZWMgKiAxMDAwKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdW51c2VkTWV0aG9kKCkgewpAQCAtMjMyLDcgKzIzMiw3IEBACiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewotCXRocm93IG5ldyBFSkJFeGNlcHRpb24oIkNvbnRhaW5lciBjYWxsZWQgZWpiQWN0aXZhdGU/Pz8/PyIpOworICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkNvbnRhaW5lciBjYWxsZWQgZWpiQWN0aXZhdGU/Pz8/PyIpOwogICAgIH0KIAogICAgIHZvaWQgcG9zdEFjdGl2YXRlKCkgewpAQCAtMjQwLDcgKzI0MCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewotCXRocm93IG5ldyBFSkJFeGNlcHRpb24oIkNvbnRhaW5lciBjYWxsZWQgZWpiUGFzc2l2YXRlPz8/Pz8iKTsKKyAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJDb250YWluZXIgY2FsbGVkIGVqYlBhc3NpdmF0ZT8/Pz8/Iik7CiAgICAgfQogCiAgICAgQFByZVBhc3NpdmF0ZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvZWpiL1NGU0JMb2NhbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvZWpiL1NGU0JMb2NhbC5qYXZhCmluZGV4IDg3NzE1YmUuLmIyMzQwYjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2VqYi9TRlNCTG9jYWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9lamIvU0ZTQkxvY2FsLmphdmEKQEAgLTIxLDUgKzIxLDUgQEAKIHB1YmxpYyBpbnRlcmZhY2UgU0ZTQkxvY2FsCiAgICAgZXh0ZW5kcyBFSkJMb2NhbE9iamVjdAogewotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpOwkKKyAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2VqYi9TRlNCTG9jYWxIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9lamIvU0ZTQkxvY2FsSG9tZS5qYXZhCmluZGV4IGI4OGRjMmQuLjQxNTBiYTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2VqYi9TRlNCTG9jYWxIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvZWpiL1NGU0JMb2NhbEhvbWUuamF2YQpAQCAtMjIsNiArMjIsNiBAQAogcHVibGljIGludGVyZmFjZSBTRlNCTG9jYWxIb21lCiAgICAgZXh0ZW5kcyBFSkJMb2NhbEhvbWUKIHsKLQlwdWJsaWMgU0ZTQkxvY2FsIGNyZWF0ZShTdHJpbmcgc2ZzYk5hbWUpCisgICAgcHVibGljIFNGU0JMb2NhbCBjcmVhdGUoU3RyaW5nIHNmc2JOYW1lKQogICAgICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCA2NmM0YjEyLi44M2ZiMjhjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBTaW1wbGVFbnRpdHk7DQotDQotQ1JFQVRFIFRBQkxFIFNpbXBsZUVudGl0eSAoDQotICAgIGtleSAgICAgY2hhcigxMjgpIG5vdCBudWxsLA0KLSAgICBuYW1lICAgIGNoYXIoMTI4KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBTaW1wbGVFbnRpdHk7CisKK0NSRUFURSBUQUJMRSBTaW1wbGVFbnRpdHkgKAorICAgIGtleSAgICAgY2hhcigxMjgpIG5vdCBudWxsLAorICAgIG5hbWUgICAgY2hhcigxMjgpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA5MzVjNGE2Li4zZjIxYWViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgU2ltcGxlRW50aXR5Ow0KK0Ryb3AgdGFibGUgU2ltcGxlRW50aXR5OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDFhZDYxODcuLjU5YmY3OWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIFNpbXBsZUVudGl0eTsNCi0NCi1DUkVBVEUgVEFCTEUgU2ltcGxlRW50aXR5ICgNCi0gICAga2V5aWQgICAgIGNoYXIoMTI4KSBub3QgbnVsbCwNCi0gICAgbmFtZSAgICBjaGFyKDEyOCkNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgU2ltcGxlRW50aXR5OworCitDUkVBVEUgVEFCTEUgU2ltcGxlRW50aXR5ICgKKyAgICBrZXlpZCAgICAgY2hhcigxMjgpIG5vdCBudWxsLAorICAgIG5hbWUgICAgY2hhcigxMjgpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA5MzVjNGE2Li4zZjIxYWViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgU2ltcGxlRW50aXR5Ow0KK0Ryb3AgdGFibGUgU2ltcGxlRW50aXR5OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvYnVpbGQucHJvcGVydGllcwppbmRleCAxMjA4NDQ2Li45ODNhNTQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjIgKzE1LDIyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItc2ZzYi1zdHJlc3MiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJsb2FkZ2VuZXJhdG9yLmNsaWVudCIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIuc2ZzYi5zdHJlc3MuY2xpZW50LkxvYWRHZW5lcmF0b3IiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvYnVpbGQueG1sCmluZGV4IDg0MTMyZDAuLmNlZGUzMGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywgKiovKkxvYWQqLmNsYXNzICoqLypTRlNCKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJidWlsZCxpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgIC0tPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPCEtLQogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KQEAgLTgxLDEzICs4MSwxMyBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmxvYWRnZW5lcmF0b3IiPgogICAgICAgIDxqYXZhICBmb3JrPSJ0cnVlIiBmYWlsb25lcnJvcj0idHJ1ZSIKQEAgLTk3LDcgKzk3LDcgQEAKICAgICAgICAgICAgPGFyZyB2YWx1ZT0iZWpiL2VqYl9zZnNiX3N0cmVzc19TdHJlc3NTRlNCSG9tZSIvPgogICAgICAgICAgICA8YXJnIHZhbHVlPSIke2ljdHgucHJvcHN9Ii8+CiAgICAgICAgIDwvamF2YT4KLSAgICA8L3RhcmdldD4gICAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW5fY29zbmFtaW5nIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVubG9hZGdlbmVyYXRvciI+CkBAIC0xMDgsNyArMTA4LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGQ2MTU3MWIuLmUxZmNmOTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzQsOCArMzQsOCBAQAogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0Tm90UnVuICAgID0gIlRFU1QgTk9UIFJVTiI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RQYXNzZWQgICAgPSAiVEVTVCBQQVNTRUQiOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0RmFpbGVkICAgID0gIlRFU1QgRkFJTEVEIjsKLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgICAgTUFYX1NGU0JTID0gNDA7CkBAIC01MCwxMyArNTAsMTMgQEAKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltzdHJlc3NDbGllbnRdIERPTkUgZG9UZXN0KCkuLi4iKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInN0cmVzcyIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIGluaXRTRlNCTGlzdCgpOyAgICAgLy9jcmVhdGUgU0ZTQnMgCisgICAgICAgIGluaXRTRlNCTGlzdCgpOyAgICAgLy9jcmVhdGUgU0ZTQnMKICAgICAgICAgYWNjZXNzU0ZTQigpOyAgICAgICAvL2FjY2VzcyB0aGUgU0ZCUwogCiAgICAgfQpAQCAtOTIsNyArOTIsNyBAQAogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgTUFYX1NGU0JTOyBpKyspIHsKICAgICAgICAgICAgICAgICBTdHJlc3NTRlNCIHNmc2IgPSAoU3RyZXNzU0ZTQikgc2ZzYkxpc3QuZ2V0KGkpOwogICAgICAgICAgICAgICAgIFN0cmluZyBzZnNiTmFtZSA9ICJTRlNCXyIraTsKLSAgICAgICAgICAgICAgICAKKwogCiAgICAgICAgICAgICAgICAgcGFzc2VkID0gc2ZzYi5kb1dvcmsoKGxvbmcpIDIwMDApOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvY2xpZW50L0xvYWRHZW5lcmF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9jbGllbnQvTG9hZEdlbmVyYXRvci5qYXZhCmluZGV4IDcyNWQyYzQuLmRmMjU2NzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9jbGllbnQvTG9hZEdlbmVyYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9jbGllbnQvTG9hZEdlbmVyYXRvci5qYXZhCkBAIC0yOCwyNyArMjgsMjcgQEAKIAogcHVibGljIGNsYXNzIExvYWRHZW5lcmF0b3IgewogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KLSAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOyAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcHJvcHNGaWxlTmFtZSA9IAotCSIvZXhwb3J0L2hvbWUvczFhcy9jdHMvd3MvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvY2xpZW50L2puZGkucHJvcGVydGllcyI7CisgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcHJvcHNGaWxlTmFtZSA9CisgICAgIi9leHBvcnQvaG9tZS9zMWFzL2N0cy93cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9jbGllbnQvam5kaS5wcm9wZXJ0aWVzIjsKIAogICAgIHByaXZhdGUgQ29udGV4dCBjdHg7CiAgICAgcHJpdmF0ZSBTdHJlc3NTRlNCSG9tZSBob21lOwogCiAgICAgcHVibGljIExvYWRHZW5lcmF0b3IoU3RyaW5nW10gYXJncykKLQl0aHJvd3MgRXhjZXB0aW9uCisgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLQlTdHJpbmcgam5kaU5hbWUgPSBhcmdzWzBdOwotCWN0eCA9IGdldENvbnRleHQoYXJnc1sxXSk7ICAgIAorICAgIFN0cmluZyBqbmRpTmFtZSA9IGFyZ3NbMF07CisgICAgY3R4ID0gZ2V0Q29udGV4dChhcmdzWzFdKTsKIAotCU9iamVjdCByZWYgPSBjdHgubG9va3VwKGpuZGlOYW1lKTsKLQl0aGlzLmhvbWUgPSAoU3RyZXNzU0ZTQkhvbWUpIAotCSAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cocmVmLCBTdHJlc3NTRlNCSG9tZS5jbGFzcyk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJMb2FkR2VuZXJhdG9yIGdvdCBob21lOiAiICsgaG9tZS5nZXRDbGFzcygpKTsKKyAgICBPYmplY3QgcmVmID0gY3R4Lmxvb2t1cChqbmRpTmFtZSk7CisgICAgdGhpcy5ob21lID0gKFN0cmVzc1NGU0JIb21lKQorICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cocmVmLCBTdHJlc3NTRlNCSG9tZS5jbGFzcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb2FkR2VuZXJhdG9yIGdvdCBob21lOiAiICsgaG9tZS5nZXRDbGFzcygpKTsKICAgICB9CiAKICAgICBwcml2YXRlIEluaXRpYWxDb250ZXh0IGdldENvbnRleHQoU3RyaW5nIHByb3BzRmlsZU5hbWUpCi0JdGhyb3dzIEV4Y2VwdGlvbgorICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljOwogCkBAIC02NiwyMSArNjYsMjEgQEAKIAogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotCWZvciAoaW50IGk9MDsgaTwxMDsgaSsrKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgU3RyZXNzU0ZTQkNsaWVudFsiICsgaSArICJdIik7Ci0JICAgIFN0cmluZyBjbGllbnROYW1lID0gImNsaWVudC0iK2k7Ci0JICAgIFN0cmVzc1NGU0JDbGllbnQgY2xpZW50ID0gbmV3IFN0cmVzc1NGU0JDbGllbnQoY2xpZW50TmFtZSwKLQkJICAgIGhvbWUsIDEwKTsKLQl9CisgICAgZm9yIChpbnQgaT0wOyBpPDEwOyBpKyspIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBTdHJlc3NTRlNCQ2xpZW50WyIgKyBpICsgIl0iKTsKKyAgICAgICAgU3RyaW5nIGNsaWVudE5hbWUgPSAiY2xpZW50LSIraTsKKyAgICAgICAgU3RyZXNzU0ZTQkNsaWVudCBjbGllbnQgPSBuZXcgU3RyZXNzU0ZTQkNsaWVudChjbGllbnROYW1lLAorICAgICAgICAgICAgaG9tZSwgMTApOworICAgIH0KICAgICB9CiAKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgdHJ5IHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpiLXNmc2Itc3RyZXNzIik7Ci0JICAgIExvYWRHZW5lcmF0b3IgZ2VuZXJhdG9yID0gbmV3IExvYWRHZW5lcmF0b3IoYXJncyk7Ci0JICAgIGdlbmVyYXRvci5kb1Rlc3QoKTsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImVqYi1zZnNiLXN0cmVzcyBtYWluIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpiLXNmc2Itc3RyZXNzIik7CisgICAgICAgIExvYWRHZW5lcmF0b3IgZ2VuZXJhdG9yID0gbmV3IExvYWRHZW5lcmF0b3IoYXJncyk7CisgICAgICAgIGdlbmVyYXRvci5kb1Rlc3QoKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYi1zZnNiLXN0cmVzcyBtYWluIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamItc2ZzYi1zdHJlc3MgbWFpbiIsIHN0YXQuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvY2xpZW50L1N0cmVzc1NGU0JDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9jbGllbnQvU3RyZXNzU0ZTQkNsaWVudC5qYXZhCmluZGV4IGM2MzU4NDkuLmJiZmE1ZDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9jbGllbnQvU3RyZXNzU0ZTQkNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9jbGllbnQvU3RyZXNzU0ZTQkNsaWVudC5qYXZhCkBAIC0zMyw0MSArMzMsNDEgQEAKICAgICBpbXBsZW1lbnRzIFJ1bm5hYmxlCiB7CiAKLSAgICBTdHJpbmcJICAgIG5hbWU7CisgICAgU3RyaW5nICAgICAgICBuYW1lOwogICAgIFN0cmVzc1NGU0JIb21lICBob21lOwotICAgIEFycmF5TGlzdAkgICAgbGlzdDsKLSAgICBpbnQJCSAgICBtYXhBY3RpdmVDb3VudDsKLSAgICBib29sZWFuCSAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICBpbnQJCSAgICBtYXhJdGVyID0gNTsKLSAgICBUaHJlYWQJICAgIHRocmVhZDsKKyAgICBBcnJheUxpc3QgICAgICAgIGxpc3Q7CisgICAgaW50ICAgICAgICAgICAgbWF4QWN0aXZlQ291bnQ7CisgICAgYm9vbGVhbiAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgaW50ICAgICAgICAgICAgbWF4SXRlciA9IDU7CisgICAgVGhyZWFkICAgICAgICB0aHJlYWQ7CiAKICAgICBwdWJsaWMgU3RyZXNzU0ZTQkNsaWVudChTdHJpbmcgbmFtZSwKLQkgICAgU3RyZXNzU0ZTQkhvbWUgaG9tZSwgaW50IG1heEFjdGl2ZUNvdW50KQorICAgICAgICBTdHJlc3NTRlNCSG9tZSBob21lLCBpbnQgbWF4QWN0aXZlQ291bnQpCiAgICAgewotCXRocmVhZCA9IG5ldyBUaHJlYWQodGhpcywgbmFtZSk7Ci0JdGhpcy5uYW1lID0gbmFtZTsKLQl0aGlzLmhvbWUgPSBob21lOwotCXRoaXMubWF4QWN0aXZlQ291bnQgPSBtYXhBY3RpdmVDb3VudDsKLQl0aGlzLmxpc3QgPSBuZXcgQXJyYXlMaXN0KG1heEFjdGl2ZUNvdW50KTsKLQl0aHJlYWQuc3RhcnQoKTsKKyAgICB0aHJlYWQgPSBuZXcgVGhyZWFkKHRoaXMsIG5hbWUpOworICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgdGhpcy5ob21lID0gaG9tZTsKKyAgICB0aGlzLm1heEFjdGl2ZUNvdW50ID0gbWF4QWN0aXZlQ291bnQ7CisgICAgdGhpcy5saXN0ID0gbmV3IEFycmF5TGlzdChtYXhBY3RpdmVDb3VudCk7CisgICAgdGhyZWFkLnN0YXJ0KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiU3RyZXNzU0ZTQkNsaWVudDogIiArIG5hbWUgKyAiIHN0YXJ0ZWQuLi4uIik7Ci0JdHJ5IHsKLQkgICAgZm9yIChpbnQgaT0wOyBpPG1heEFjdGl2ZUNvdW50OyBpKyspIHsKLQkJbGlzdC5hZGQoaG9tZS5jcmVhdGUobmFtZSsiLSIraSkpOwotCSAgICB9Ci0JICAgIGZvciAoaW50IGNvdW50ID0gMDsgY291bnQgPCBtYXhJdGVyOyBjb3VudCsrKSB7Ci0JCWZvciAoaW50IGk9MDsgaTxtYXhBY3RpdmVDb3VudDsgaSsrKSB7Ci0JCSAgICBTdHJlc3NTRlNCIHNmc2IgPSAoU3RyZXNzU0ZTQikgbGlzdC5nZXQoaSk7Ci0JCSAgICBzZnNiLnBpbmcoKTsKLQkJfQotCSAgICB9Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBzdWNjZXNzID0gZmFsc2U7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RyZXNzU0ZTQkNsaWVudDogIiArIG5hbWUgKyAiIHN0YXJ0ZWQuLi4uIik7CisgICAgdHJ5IHsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPG1heEFjdGl2ZUNvdW50OyBpKyspIHsKKyAgICAgICAgbGlzdC5hZGQoaG9tZS5jcmVhdGUobmFtZSsiLSIraSkpOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGNvdW50ID0gMDsgY291bnQgPCBtYXhJdGVyOyBjb3VudCsrKSB7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxtYXhBY3RpdmVDb3VudDsgaSsrKSB7CisgICAgICAgICAgICBTdHJlc3NTRlNCIHNmc2IgPSAoU3RyZXNzU0ZTQikgbGlzdC5nZXQoaSk7CisgICAgICAgICAgICBzZnNiLnBpbmcoKTsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgfQogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL2VqYi9TdHJlc3NTRlNCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvZWpiL1N0cmVzc1NGU0IuamF2YQppbmRleCBmYTYyYmJmLi5kMmRjYTRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvZWpiL1N0cmVzc1NGU0IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvZWpiL1N0cmVzc1NGU0IuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogewogCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiBoYXNTYW1lTmFtZShTdHJpbmcgbmFtZSkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9lamIvU3RyZXNzU0ZTQkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9lamIvU3RyZXNzU0ZTQkJlYW4uamF2YQppbmRleCA2M2Q4NzIxLi40Njc5ZTMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvZWpiL1N0cmVzc1NGU0JCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL2VqYi9TdHJlc3NTRlNCQmVhbi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCiBwdWJsaWMgY2xhc3MgU3RyZXNzU0ZTQkJlYW4KLSAgICBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIAorICAgIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4KIHsKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0ICAgICAgICAgICAgICBzZXNzaW9uQ3R4OwogICAgIHByaXZhdGUgQ29udGV4dCAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxDdHg7CkBAIC01Miw3ICs1Miw3IEBACiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gZG9Xb3JrKGxvbmcgbWlsbGlzKSB7Ci0JcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9lamIvU3RyZXNzU0ZTQkhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9lamIvU3RyZXNzU0ZTQkhvbWUuamF2YQppbmRleCA3NThjMmFhLi4xZmY5MmNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvZWpiL1N0cmVzc1NGU0JIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL2VqYi9TdHJlc3NTRlNCSG9tZS5qYXZhCkBAIC0yNCw1ICsyNCw1IEBACiAgICAgZXh0ZW5kcyBFSkJIb21lCiB7CiAgICAgcHVibGljIFN0cmVzc1NGU0IgY3JlYXRlKFN0cmluZyBzZnNiTmFtZSkKLQl0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggODUwNGMzZS4uNTgzNDJkNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3Mvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBTdHJlc3NFbnRpdHk7DQotDQotQ1JFQVRFIFRBQkxFIFN0cmVzc0VudGl0eSAoDQotICAgIGtleSAgICAgY2hhcigyMCkgbm90IG51bGwsDQotICAgIG5hbWUgICAgY2hhcigyMCkNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgU3RyZXNzRW50aXR5OworCitDUkVBVEUgVEFCTEUgU3RyZXNzRW50aXR5ICgKKyAgICBrZXkgICAgIGNoYXIoMjApIG5vdCBudWxsLAorICAgIG5hbWUgICAgY2hhcigyMCkKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggZWEwNTQ4Ny4uMmExODE3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgU3RyZXNzRW50aXR5Ow0KK0Ryb3AgdGFibGUgU3RyZXNzRW50aXR5OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL2J1aWxkLnhtbAppbmRleCA0ZDQ3NTJkLi4yZTA1MWJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL2J1aWxkLnhtbApAQCAtMzcsMTEgKzM3LDExIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1zZnNiIHRlc3RzKQotCQkJYW50IHBhc3NpdmF0ZWFjdGl2YXRlIChFeGVjdXRlcyB0aGUgZWpiLXNmc2ItcGFzc2l2YXRlYWN0aXZhdGUgdGVzdCkKLQkJCWFudCBzZnNiY2FjaGUgKEV4ZWN1dGVzIHRoZSBlamItc2ZzYi1zZnNiY2FjaGUgdGVzdCkKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItc2ZzYiB0ZXN0cykKKyAgICAgICAgICAgIGFudCBwYXNzaXZhdGVhY3RpdmF0ZSAoRXhlY3V0ZXMgdGhlIGVqYi1zZnNiLXBhc3NpdmF0ZWFjdGl2YXRlIHRlc3QpCisgICAgICAgICAgICBhbnQgc2ZzYmNhY2hlIChFeGVjdXRlcyB0aGUgZWpiLXNmc2Itc2ZzYmNhY2hlIHRlc3QpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9wYXNzaXZhdGVhY3RpdmF0ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9wYXNzaXZhdGVhY3RpdmF0ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDYwY2VlYTEuLjM4ZGY2ZmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3MvcGFzc2l2YXRlYWN0aXZhdGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Bhc3NpdmF0ZWFjdGl2YXRlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXN0cmVzcy1wYXNzaXZhdGVhY3RpdmF0ZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9wYXNzaXZhdGVhY3RpdmF0ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Bhc3NpdmF0ZWFjdGl2YXRlL2J1aWxkLnhtbAppbmRleCBhYWVlYTYwLi4xMDU0NzBmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Bhc3NpdmF0ZWFjdGl2YXRlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Bhc3NpdmF0ZWFjdGl2YXRlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTQgKzQ4LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywgKiovKlNGU0IqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgIC0tPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPCEtLQogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KQEAgLTc5LDE0ICs3OSwxNCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9wYXNzaXZhdGVhY3RpdmF0ZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Bhc3NpdmF0ZWFjdGl2YXRlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAyY2U4YTBiLi40YjQyMThkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Bhc3NpdmF0ZWFjdGl2YXRlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Bhc3NpdmF0ZWFjdGl2YXRlL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzQsOCArMzQsOCBAQAogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0Tm90UnVuICAgID0gIlRFU1QgTk9UIFJVTiI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RQYXNzZWQgICAgPSAiVEVTVCBQQVNTRUQiOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0RmFpbGVkICAgID0gIlRFU1QgRkFJTEVEIjsKLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgICAgTUFYX1NGU0JTID0gNjAwOwpAQCAtNTAsMTMgKzUwLDEzIEBACiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbcGFzc2l2YXRlYWN0aXZhdGVDbGllbnRdIERPTkUgZG9UZXN0KCkuLi4iKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInBhc3NpdmF0ZWFjdGl2YXRlIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgaW5pdFNGU0JMaXN0KCk7ICAgICAvL2NyZWF0ZSBTRlNCcyAKKyAgICAgICAgaW5pdFNGU0JMaXN0KCk7ICAgICAvL2NyZWF0ZSBTRlNCcwogICAgICAgICBhY2Nlc3NTRlNCKCk7ICAgICAgIC8vYWNjZXNzIHRoZSBTRkJTCiAKICAgICB9CkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgICAgICAgICAgU0ZTQiBzZnNiID0gKFNGU0IpIHNmc2JMaXN0LmdldChpKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgc2ZzYk5hbWUgPSBzZnNiLmdldE5hbWUoKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBhY2Nlc3NlZCBTRlNCIGJlYW4gZm9yOiAiICsgc2ZzYk5hbWUpOwotICAgIAorCiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBhY2Nlc3NTRlNCIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TRlNCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TRlNCLmphdmEKaW5kZXggMzVmYmYwOC4uMDQ5YmU4NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU0ZTQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3MvcGFzc2l2YXRlYWN0aXZhdGUvZWpiL1NGU0IuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogICAgIGV4dGVuZHMgRUpCT2JqZWN0CiB7CiAKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU0ZTQkVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU0ZTQkVKQi5qYXZhCmluZGV4IDhiMmVjMWQuLmM5OWVlYmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3MvcGFzc2l2YXRlYWN0aXZhdGUvZWpiL1NGU0JFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TRlNCRUpCLmphdmEKQEAgLTI2LDEzICsyNiwxMyBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIAogcHVibGljIGNsYXNzIFNGU0JFSkIKLSAgICBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIAorICAgIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4KIHsKLQlwcml2YXRlIFNlc3Npb25Db250ZXh0IGNvbnRleHQ7CisgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjb250ZXh0OwogICAgIHByaXZhdGUgU3RyaW5nIHNmc2JOYW1lOwogICAgIHByaXZhdGUgQ29udGV4dCBpbml0aWFsQ3R4OwogCi0JcHVibGljIHZvaWQgZWpiQ3JlYXRlKFN0cmluZyBzZnNiTmFtZSkgeworICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZShTdHJpbmcgc2ZzYk5hbWUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiSW4gU0ZTQi5lamJDcmVhdGUoKSBmb3IgbmFtZSAtPiAiICsgc2ZzYk5hbWUpOwogICAgICAgICB0aGlzLnNmc2JOYW1lID0gc2ZzYk5hbWU7CiAgICAgfQpAQCAtNDEsMjIgKzQxLDIyIEBACiAgICAgICAgIHJldHVybiB0aGlzLnNmc2JOYW1lOwogICAgIH0KIAotCXB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JCXRoaXMuY29udGV4dCA9IHNjOworICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7CisgICAgICAgIHRoaXMuY29udGV4dCA9IHNjOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgdGhpcy5pbml0aWFsQ3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0aCkgewogICAgICAgICAgICAgdGgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLQl9CisgICAgfQogCi0JcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KKyAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQogCi0JcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7CisgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkluIFNGU0IuZWpiQWN0aXZhdGUoKSBmb3IgbmFtZSAtPiAiICsgc2ZzYk5hbWUpOwogICAgIH0KIAotCXB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKKyAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkluIFNGU0IuZWpiUGFzc2l2YXRlKCkgZm9yIG5hbWUgLT4gIiArIHNmc2JOYW1lKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TRlNCSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU0ZTQkhvbWUuamF2YQppbmRleCA3ZWJmNWMzLi4zYWNmNzcwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TRlNCSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3MvcGFzc2l2YXRlYWN0aXZhdGUvZWpiL1NGU0JIb21lLmphdmEKQEAgLTIzLDYgKzIzLDYgQEAKIHB1YmxpYyBpbnRlcmZhY2UgU0ZTQkhvbWUKICAgICBleHRlbmRzIEVKQkhvbWUKIHsKLQlwdWJsaWMgU0ZTQiBjcmVhdGUoU3RyaW5nIHNmc2JOYW1lKQorICAgIHB1YmxpYyBTRlNCIGNyZWF0ZShTdHJpbmcgc2ZzYk5hbWUpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3Mvc2ZzYmNhY2hlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Nmc2JjYWNoZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk4ODc1MTAuLmYzOWQ5ZTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3Mvc2ZzYmNhY2hlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9zZnNiY2FjaGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItc3RyZXNzLXNmc2JjYWNoZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9zZnNiY2FjaGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9zZnNiY2FjaGUvYnVpbGQueG1sCmluZGV4IDc4NDAyM2IuLjY2NDQ0NzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3Mvc2ZzYmNhY2hlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Nmc2JjYWNoZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDE0ICs0OCwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MsICoqLypTRlNCKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAtLT4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwhLS0KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CkBAIC03OSwxNCArNzksMTQgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3Mvc2ZzYmNhY2hlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3Mvc2ZzYmNhY2hlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBhZjNjMDE4Li5lMTQ1NGFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Nmc2JjYWNoZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9zZnNiY2FjaGUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zNCw4ICszNCw4IEBACiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3ROb3RSdW4gICAgPSAiVEVTVCBOT1QgUlVOIjsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdFBhc3NlZCAgICA9ICJURVNUIFBBU1NFRCI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RGYWlsZWQgICAgPSAiVEVTVCBGQUlMRUQiOwotICAgIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCAgICBNQVhfU0ZTQlMgPSA2MDA7CkBAIC01MCwxMyArNTAsMTMgQEAKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltzZnNiY2FjaGVDbGllbnRdIERPTkUgZG9UZXN0KCkuLi4iKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInNmc2JjYWNoZSIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbc2ZzYmNhY2hlQ2xpZW50XSBJbnNpZGUgaW5pdC4uLi4iKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKQEAgLTY2LDcgKzY2LDcgQEAKIAogICAgICAgICAgICAgLy9DcmVhdGluZyB0aGVzZSBtYW55IFNGU0JzIHdpbGwgY2F1c2UgcGFzc2l2YXRpb24KICAgICAgICAgICAgIFNGU0Igc2ZzYiA9IChTRlNCKSBob21lLmNyZWF0ZSgiU0ZTQl8iKTsKLSAgIAorCiAgICAgICAgICAgICBzZnNiLmdldE5hbWUoKTsKIAogICAgICAgICAgICAgc2ZzYi5yZW1vdmUoKTsKQEAgLTk3LDYgKzk3LDYgQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGFjY2Vzc1NGU0IiLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgfSAgICAgICAgICAgICAgICAgCisgICAgfQogCiB9IC8vQ2xpZW50e30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3Mvc2ZzYmNhY2hlL2VqYi9TRlNCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Nmc2JjYWNoZS9lamIvU0ZTQi5qYXZhCmluZGV4IDBiYTQwNDAuLjBhM2Y4MzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3Mvc2ZzYmNhY2hlL2VqYi9TRlNCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9zZnNiY2FjaGUvZWpiL1NGU0IuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogICAgIGV4dGVuZHMgRUpCT2JqZWN0CiB7CiAKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9zZnNiY2FjaGUvZWpiL1NGU0JFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3Mvc2ZzYmNhY2hlL2VqYi9TRlNCRUpCLmphdmEKaW5kZXggZjBmMWUxNC4uNjcxYmE2OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9zZnNiY2FjaGUvZWpiL1NGU0JFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Nmc2JjYWNoZS9lamIvU0ZTQkVKQi5qYXZhCkBAIC0yNiwxMyArMjYsMTMgQEAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIHB1YmxpYyBjbGFzcyBTRlNCRUpCCi0gICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiAKKyAgICBpbXBsZW1lbnRzIFNlc3Npb25CZWFuCiB7Ci0JcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjb250ZXh0OworICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY29udGV4dDsKICAgICBwcml2YXRlIFN0cmluZyBzZnNiTmFtZTsKICAgICBwcml2YXRlIENvbnRleHQgaW5pdGlhbEN0eDsKIAotCXB1YmxpYyB2b2lkIGVqYkNyZWF0ZShTdHJpbmcgc2ZzYk5hbWUpIHsKKyAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoU3RyaW5nIHNmc2JOYW1lKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkluIFNGU0IuZWpiQ3JlYXRlKCkgZm9yIG5hbWUgLT4gIiArIHNmc2JOYW1lKTsKICAgICAgICAgdGhpcy5zZnNiTmFtZSA9IHNmc2JOYW1lOwogICAgIH0KQEAgLTQxLDIyICs0MSwyMiBAQAogICAgICAgICByZXR1cm4gdGhpcy5zZnNiTmFtZTsKICAgICB9CiAKLQlwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQl0aGlzLmNvbnRleHQgPSBzYzsKKyAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgeworICAgICAgICB0aGlzLmNvbnRleHQgPSBzYzsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRoaXMuaW5pdGlhbEN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdGgpIHsKICAgICAgICAgICAgIHRoLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0JfQorICAgIH0KIAotCXB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CisgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KIAotCXB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgeworICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJJbiBTRlNCLmVqYkFjdGl2YXRlKCkgZm9yIG5hbWUgLT4gIiArIHNmc2JOYW1lKTsKICAgICB9CiAKLQlwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7CisgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJJbiBTRlNCLmVqYlBhc3NpdmF0ZSgpIGZvciBuYW1lIC0+ICIgKyBzZnNiTmFtZSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9zZnNiY2FjaGUvZWpiL1NGU0JIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Nmc2JjYWNoZS9lamIvU0ZTQkhvbWUuamF2YQppbmRleCA2YmEwOTRhLi5jNDU5MzUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Nmc2JjYWNoZS9lamIvU0ZTQkhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Nmc2JjYWNoZS9lamIvU0ZTQkhvbWUuamF2YQpAQCAtMjMsNiArMjMsNiBAQAogcHVibGljIGludGVyZmFjZSBTRlNCSG9tZQogICAgIGV4dGVuZHMgRUpCSG9tZQogewotCXB1YmxpYyBTRlNCIGNyZWF0ZShTdHJpbmcgc2ZzYk5hbWUpCisgICAgcHVibGljIFNGU0IgY3JlYXRlKFN0cmluZyBzZnNiTmFtZSkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2FwcGNsaWVudC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2FwcGNsaWVudC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQ3ZTE4ZGIuLjZmMjE1MjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9hcHBjbGllbnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvYXBwY2xpZW50L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXN0dWJzLWFwcGNsaWVudCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9hcHBjbGllbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2FwcGNsaWVudC9idWlsZC54bWwKaW5kZXggYWE2YTVjYi4uZjg2MzkxMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2FwcGNsaWVudC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2FwcGNsaWVudC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KQEAgLTQzLDEzICs0MywxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXBwY2xpZW50LWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzLCoqLypIZWxsby5jbGFzcywqKi8qSGVsbG9Ib21lLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01NywxMCArNTcsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2FwcGNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvYXBwY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQppbmRleCAwZWViYzI4Li4wYTEyMDQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvYXBwY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvYXBwY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzcsMzEgKzM3LDMxIEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItc3R1YnMtYXBwY2xpZW50SUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBlamIgcmVmICIpOwotICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9oZWxsbyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvYmpyZWYgPSAiICsgb2JqcmVmKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsb0hvbWUgIGhvbWUgPSAoSGVsbG9Ib21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdwogICAgICAgICAgICAgICAgIChvYmpyZWYsIEhlbGxvSG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAKKworCiAgICAgICAgICAgICBIZWxsbyBociA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gaW52b2tlIG1ldGhvZCBvbiB0aGUgRUpCCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIGVqYiIpOwogICAgICAgICAgICAgaHIuc2F5SGVsbG8oKTsKQEAgLTczLDggKzczLDggQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXBwY2xpZW50IG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvYnVpbGQueG1sCmluZGV4IGQwM2MxN2YuLmE4NDk1MDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2J1aWxkLnhtbApAQCAtMzMsNyArMzMsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0dWJzZXIiLz4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYmFwcCIvPgotICAgICAgICA8IS0tIHN0YW5kYWxvbmVjbGllbnQgbXVzdCBiZSBleGVjdXRlZCByaWdodCBhZnRlciBlamJhcHAgCisgICAgICAgIDwhLS0gc3RhbmRhbG9uZWNsaWVudCBtdXN0IGJlIGV4ZWN1dGVkIHJpZ2h0IGFmdGVyIGVqYmFwcAogICAgICAgICAgICAgIHRvIGJlIGFibGUgdG8gdXNlIHRoZSBnZW5lcmF0ZWQgc3R1YnMgZnJvbSB0aGUgYXBwIGNsaWVudAogICAgICAgICAtLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFuZGFsb25lY2xpZW50Ii8+CkBAIC05MiwxNCArOTIsMTQgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBlamJhcHAgKEV4ZWN1dGVzIHRoZSBlamItc3R1YnMgZWpiYXBwIHRlc3QpCi0JCQlhbnQgZWpiY2xpZW50IChFeGVjdXRlcyB0aGUgZWpiLXN0dWJzIGVqYmNsaWVudCB0ZXN0KQotCQkJYW50IGFwcGNsaWVudCAoRXhlY3V0ZXMgdGhlIGVqYi1zdHVicyBhcHBjbGllbnQgdGVzdCkKLQkJCWFudCB3ZWJjbGllbnQgKEV4ZWN1dGVzIHRoZSBlamItc3R1YnMgd2ViY2xpZW50IHRlc3QpCisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGVqYmFwcCAoRXhlY3V0ZXMgdGhlIGVqYi1zdHVicyBlamJhcHAgdGVzdCkKKyAgICAgICAgICAgIGFudCBlamJjbGllbnQgKEV4ZWN1dGVzIHRoZSBlamItc3R1YnMgZWpiY2xpZW50IHRlc3QpCisgICAgICAgICAgICBhbnQgYXBwY2xpZW50IChFeGVjdXRlcyB0aGUgZWpiLXN0dWJzIGFwcGNsaWVudCB0ZXN0KQorICAgICAgICAgICAgYW50IHdlYmNsaWVudCAoRXhlY3V0ZXMgdGhlIGVqYi1zdHVicyB3ZWJjbGllbnQgdGVzdCkKICAgICAgICAgICAgICAgICAgICAgICAgIGFudCBwcm94eSAoRXhlY3V0ZXMgdGhlIGVqYi1zdHVicyBwcm94eSB0ZXN0KQotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItc3R1YnMgdGVzdHMpCi0JPC9lY2hvPgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItc3R1YnMgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmFwcC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmFwcC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDVkOTBkYTYuLjU1ZjQwMGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJhcHAvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiYXBwL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXN0dWJzLWVqYmFwcCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiYXBwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJhcHAvYnVpbGQueG1sCmluZGV4IDA5MWZjOGEuLjY3ZmE5YjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJhcHAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJhcHAvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01NCwyNiArNTQsMjYgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi9IZWxsbyouY2xhc3MsKiovRHVtbXkqLmNsYXNzIi8+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamIuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIvPiAgICAgICAgICAgICAgIAorICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamIuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi9Gb28qLmNsYXNzLCoqL0hlbGxvLmNsYXNzLCoqL0hlbGxvSG9tZS5jbGFzcyIvPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwuZWpiY2xpZW50Ii8+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sLmVqYmNsaWVudCIvPgotICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamIuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLWVqYmNsaWVudC5qYXIiLz4gICAgICAgICAgICAgICAKKyAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi1lamJjbGllbnQuamFyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MsKiovKkZvby5jbGFzcywqKi8qRm9vSG9tZS5jbGFzcywqKi8qSGVsbG8uY2xhc3MsKiovKkhlbGxvSG9tZS5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0idHJ1ZSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcy5wcm9wcyIgdmFsdWU9IiR7YXMucHJvcHN9IC0tZ2VuZXJhdGVybWlzdHVicz10cnVlIi8+CkBAIC04NSwxMCArODUsMTAgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIke2h0dHAuaG9zdH0gJHtodHRwLnBvcnR9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmFwcC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiYXBwL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBhOWU5N2M0Li5lYTY1MDdhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiYXBwL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiYXBwL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtNDEsMzggKzQxLDM4IEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItc3R1YnMtZWpiYXBwSUQiKTsKLSAgICB9ICAKKyAgICB9CiAKICAgICBwcml2YXRlIFN0cmluZyBob3N0OwogICAgIHByaXZhdGUgU3RyaW5nIHBvcnQ7Ci0gICAgCisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIGhvc3QgPSAoIGFyZ3MubGVuZ3RoID4gMCkgPyBhcmdzWzBdIDogImxvY2FsaG9zdCI7CiAgICAgICAgIHBvcnQgPSAoIGFyZ3MubGVuZ3RoID4gMSkgPyBhcmdzWzFdIDogIjQ4NDgiOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICBDb250ZXh0IGljID0gbnVsbDsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgZWpiYXBwIGVqYiByZWYgIik7Ci0gICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCisgICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2hlbGxvIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9ianJlZiA9ICIgKyBvYmpyZWYpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEhlbGxvSG9tZSAgaG9tZSA9IChIZWxsb0hvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93CiAgICAgICAgICAgICAgICAgKG9ianJlZiwgSGVsbG9Ib21lLmNsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIAorCisKICAgICAgICAgICAgIEhlbGxvIGhyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBpbnZva2UgbWV0aG9kIG9uIHRoZSBFSkIKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgZWpiIik7CiAgICAgICAgICAgICBoci5zYXlIZWxsbygpOwpAQCAtODYsMjAgKzg2LDIwIEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgZWpiY2xpZW50ICBlamJyZWYgIik7Ci0gICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCisgICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2hlbGxvX2VqYmNsaWVudCIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvYmpyZWYgPSAiICsgb2JqcmVmKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBGb29Ib21lICBmb29Ib21lID0gKEZvb0hvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93CiAgICAgICAgICAgICAgICAgKG9ianJlZiwgRm9vSG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAKKworCiAgICAgICAgICAgICBGb28gZm9vID0gZm9vSG9tZS5jcmVhdGUoKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBpbnZva2UgbWV0aG9kIG9uIHRoZSBFSkIKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgZWpiIik7CiAgICAgICAgICAgICBmb28uY2FsbEhlbGxvKCk7CkBAIC0xMTMsMTEgKzExMywxMSBAQAogICAgICAgICB9CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIAorICAgICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICAgICAiL2VqYi1zdHVicy1lamJhcHAvc2VydmxldCI7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIHdlYmNsaWVudCBzZXJ2bGV0IGF0ICIgKyB1cmwpOwogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYoY29kZSAhPSAyMDApIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluY29ycmVjdCByZXR1cm4gY29kZTogIiArIGNvZGUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJhcHAgd2ViY2xpZW50Iiwgc3RhdC5GQUlMKTsKQEAgLTEyOSwxNCArMTI5LDE0IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiYXBwIHdlYmNsaWVudCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBwcml2YXRlIGludCBpbnZva2VTZXJ2bGV0KFN0cmluZyB1cmwpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgICAgCisKICAgICAgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7Ci0gICAgICAgIAorCiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKXUub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmFwcC9lamIvRHVtbXlNRUpCQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmFwcC9lamIvRHVtbXlNRUpCQmVhbi5qYXZhCmluZGV4IDdkMzg5MjEuLjI4N2IzNGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJhcHAvZWpiL0R1bW15TUVKQkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiYXBwL2VqYi9EdW1teU1FSkJCZWFuLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29tLnN1bi5zMWFzZGV2LmVqYi5zdHVicy5lamJhcHA7CiAKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC0zNCwxMSArMzQsMTEgQEAKICAgICBwdWJsaWMgRHVtbXlNRUpCQmVhbigpIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIER1bW15TUVKQkJlYW46OmVqYkNyZWF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRHVtbXlNRUpCQmVhbjo6ZWpiQ3JlYXRlICEhIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQl0aGlzLnNjID0gc2M7CisgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KIAogICAgIHB1YmxpYyBTZXQgcXVlcnlOYW1lcyhPYmplY3ROYW1lIG5hbWUsIFF1ZXJ5RXhwIHF1ZXJ5KSB7CkBAIC01MSwzNCArNTEsMzQgQEAKIAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldE1CZWFuQ291bnQoKSB7CiAKLSAgICAgICAgLy8gSW52b2tpbmcgdGhpcyBtZXRob2QgZnJvbSBhbm90aGVyIGFwcCB3aWxsIHZlcmlmeSB0aGF0IAorICAgICAgICAvLyBJbnZva2luZyB0aGlzIG1ldGhvZCBmcm9tIGFub3RoZXIgYXBwIHdpbGwgdmVyaWZ5IHRoYXQKICAgICAgICAgLy8gdGhlIGNvbnRleHQgY2xhc3MgbG9hZGVyIGZvciB0aGlzIGFwcCBpcyBzZXQgYXBwcm9wcmlhdGVseSBkdXJpbmcKICAgICAgICAgLy8gdGhlIGludm9jYXRpb24uICAgVGhlIGphdmF4Lm1hbmFnZW1lbnQuajJlZSBhcGlzIGFyZSBwYWNrYWdlZAogICAgICAgICAvLyBhcyBwYXJ0IG9mIHRoZSBzZXJ2ZXIncyBjbGFzc3BhdGguICBUaGF0IG1hdGNoZXMgdGhlIGJlaGF2aW9yIG9mCiAgICAgICAgIC8vIEJ1ZyA2MzQyNDk1LCB3aGljaCBzaG93ZWQgdGhhdCB0aGUgY29udGV4dCBjbGFzcyBsb2FkZXIgd2FzIHN0aWxsCiAgICAgICAgIC8vIHNldCB0byB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbiB3aGVuIHRoZSBIb21lL1JlbW90ZSBpbnRlcmZhY2VzIHdlcmUKLSAgICAgICAgLy8gbG9hZGVkIGZyb20gYWJvdmUgdGhlIGFwcGxpY2F0aW9uIGNsYXNzbG9hZGVyIGxldmVsLiAgCisgICAgICAgIC8vIGxvYWRlZCBmcm9tIGFib3ZlIHRoZSBhcHBsaWNhdGlvbiBjbGFzc2xvYWRlciBsZXZlbC4KICAgICAgICAgLy8KICAgICAgICAgLy8gQ2FsbGluZyBnZXRDbGFzc0xvYWRlciB0ZXN0cyB0aGF0IHRoZSBjb250ZXh0IGNsYXNzbG9hZGVyIGlzIHNldAogICAgICAgICAvLyBhcHByb3ByaWF0ZWx5IGJlY2F1c2Ugb2YgdGhlIHNlY3VyaXR5IHJlcXVpcmVtZW50cyB0aGF0IEoyU0UKICAgICAgICAgLy8gaW1wb3NlcyBvbiByZXF1ZXN0aW5nIGEgY2xhc3MgbG9hZGVyLiAgQnkgZGVmYXVsdCBhcHBsaWNhdGlvbiBjb2RlCi0gICAgICAgIC8vIGluIHRoZSBhcHBzZXJ2ZXIgZG9lcyBub3QgaGF2ZSB0aGUgUnVudGltZVBlcm1pc3Npb24gCisgICAgICAgIC8vIGluIHRoZSBhcHBzZXJ2ZXIgZG9lcyBub3QgaGF2ZSB0aGUgUnVudGltZVBlcm1pc3Npb24KICAgICAgICAgLy8gImdldENsYXNzTG9hZGVyIi4gICBJbiB0aGF0IGNhc2UsIHJlcXVlc3RpbmcgYSBjbGFzcyBsb2FkZXIgaXMgb25seQotICAgICAgICAvLyBhbGxvd2VkIGlmIHRoZSByZXR1cm5lZCBjbGFzcyBsb2FkZXIgbWF0Y2hlcyB0aGUgcmVxdWVzdGluZyAKLSAgICAgICAgLy8gY2xhc3MnIGNsYXNzIGxvYWRlcihvciBpcyBhIGNoaWxkIG9mIGl0KS4gIFNvLCBpZiB0aGUgY29udGV4dCAKLSAgICAgICAgLy8gY2xhc3MgbG9hZGVyIGlzIHN0aWxsIGluY29ycmVjdGx5IHNldCB0byB0aGUgY2FsbGluZyBhcHAncyAKKyAgICAgICAgLy8gYWxsb3dlZCBpZiB0aGUgcmV0dXJuZWQgY2xhc3MgbG9hZGVyIG1hdGNoZXMgdGhlIHJlcXVlc3RpbmcKKyAgICAgICAgLy8gY2xhc3MnIGNsYXNzIGxvYWRlcihvciBpcyBhIGNoaWxkIG9mIGl0KS4gIFNvLCBpZiB0aGUgY29udGV4dAorICAgICAgICAvLyBjbGFzcyBsb2FkZXIgaXMgc3RpbGwgaW5jb3JyZWN0bHkgc2V0IHRvIHRoZSBjYWxsaW5nIGFwcCdzCiAgICAgICAgIC8vIGNsYXNzIGxvYWRlciwgdGhlIGNhbGwgdG8gZ2V0Q29udGV4dENsYXNzTG9hZGVyKCkgc2hvdWxkIHRocm93Ci0gICAgICAgIC8vIGEgc2VjdXJpdHkgZXhjZXB0aW9uLiAgIAorICAgICAgICAvLyBhIHNlY3VyaXR5IGV4Y2VwdGlvbi4KIAogICAgICAgICAvLyBUaGUgYWR2YW50YWdlIHRvIHdyaXRpbmcgdGhlIHRlc3QgdXNpbmcKICAgICAgICAgLy8gamF2YXgubWFuYWdlbWVudCBBUElzIGFuZCB0aGlzIGJlaGF2aW9yIGlzIGl0IHdpbGwgd29yayBvbiBhbgogICAgICAgICAvLyBvdXQtb2YtdGhlLWJveCBpbnN0YWxsYXRpb24gb2YgdGhlIGFwcHNlcnZlci4gIE5vIGFkZGl0aW9ucyB0byB0aGUKICAgICAgICAgLy8gc2VydmVyJ3MgY2xhc3NwYXRoIG9yIHRoZSBkZWZhdWx0IHNlcnZlci5wb2xpY3kgZmlsZSBhcmUgbmVlZGVkLgotICAgICAgICAKKwogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRHVtbXlFSkJCZWFuOjpnZXRNQmVhbkNvdW50KCkiKTsKIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15IGNsYXNzbG9hZGVyID0gIiArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15IGNsYXNzbG9hZGVyID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEdW1teU1FSkJCZWFuLmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOwogCiAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhIHNlY3VyaXR5IGV4Y2VwdGlvbiBpZiB0aGUgY2FsbGVyIGlzIGluCkBAIC04Niw3ICs4Niw3IEBACiAgICAgICAgIC8vIGxvYWRlciBpcyBzdGlsbCBpbmNvcnJlY3RseSBzZXQgdG8gdGhlIGNhbGxlciBhcHAncyBjbGFzc2xvYWRlci4KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb250ZXh0IGNsYXNzIGxvYWRlciA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKSk7Ci0gICAgICAgIAorCiAKICAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKDApOwogICAgIH0KQEAgLTEzMCw0ICsxMzAsNCBAQAogCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIH0KLQkJCSAgICAgICovCisgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmFwcC9lamIvRm9vQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmFwcC9lamIvRm9vQmVhbi5qYXZhCmluZGV4IDE1ODFlYzYuLjk4MjI4M2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJhcHAvZWpiL0Zvb0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiYXBwL2VqYi9Gb29CZWFuLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC0zNCwxMyArMzQsMTMgQEAKICAgICBwdWJsaWMgRm9vQmVhbigpIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0JlYW46OmVqYkNyZWF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmVhbjo6ZWpiQ3JlYXRlICEhIik7CiAKIAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JdGhpcy5zYyA9IHNjOworICAgIHRoaXMuc2MgPSBzYzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBjYWxsSGVsbG8oKSAgewpAQCAtNDgsMjEgKzQ4LDIxIEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIGVqYiByZWYgIik7Ci0gICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCisgICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2hlbGxvIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9ianJlZiA9ICIgKyBvYmpyZWYpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEhlbGxvSG9tZSAgaG9tZSA9IChIZWxsb0hvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93CiAgICAgICAgICAgICAgICAgKG9ianJlZiwgSGVsbG9Ib21lLmNsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsbyBociA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gaW52b2tlIG1ldGhvZCBvbiB0aGUgRUpCCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIGVqYiIpOwogICAgICAgICAgICAgaHIuc2F5SGVsbG8oKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJhcHAvZWpiL0hlbGxvQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmFwcC9lamIvSGVsbG9CZWFuLmphdmEKaW5kZXggMzhmMDM3ZC4uZDBhMGM0ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmFwcC9lamIvSGVsbG9CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmFwcC9lamIvSGVsbG9CZWFuLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC0zMSwxMSArMzEsMTEgQEAKICAgICBwdWJsaWMgSGVsbG9CZWFuKCkge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6ZWpiQ3JlYXRlICEhIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQl0aGlzLnNjID0gc2M7CisgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNheUhlbGxvKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmFwcC9zZXJ2bGV0L1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJhcHAvc2VydmxldC9TZXJ2bGV0LmphdmEKaW5kZXggODMxODg2Zi4uYmMxYmM3NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmFwcC9zZXJ2bGV0L1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiYXBwL3NlcnZsZXQvU2VydmxldC5qYXZhCkBAIC0yNiwzNyArMjYsMzcgQEAKIGltcG9ydCBjb20uc3VuLnMxYXNkZXYuZWpiLnN0dWJzLmVqYmFwcC5IZWxsb0hvbWU7CiAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewotICAgIAorCiAKICAgICBwdWJsaWMgdm9pZCAgaW5pdCggU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYmFwcDo6c2VydmxldC4uLiBpbml0KCkiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXJ2aWNlICggSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSAsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCApIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAgICAgIAorCiAgICAgICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogCiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBlamIgcmVmICIpOwotICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9oZWxsbyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvYmpyZWYgPSAiICsgb2JqcmVmKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsb0hvbWUgIGhvbWUgPSAoSGVsbG9Ib21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdwogICAgICAgICAgICAgICAgIChvYmpyZWYsIEhlbGxvSG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSGVsbG8gaHIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIGludm9rZSBtZXRob2Qgb24gdGhlIEVKQgogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBlamIiKTsKICAgICAgICAgICAgIGhyLnNheUhlbGxvKCk7CkBAIC02NSwyMiArNjUsMjIgQEAKIAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxIVE1MPiA8SEVBRD4gPFRJVExFPiBKTVMgU2VydmxldCBPdXRwdXQgPC9USVRMRT4gPC9IRUFEPiA8Qk9EWSBCR0NPTE9SPXdoaXRlPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxDRU5URVI+IDxGT05UIHNpemU9KzEgQ09MT1I9Ymx1ZT5EYXRhYmFzZVNlcnZlbHQgOjogQWxsIGluZm9ybWF0aW9uIEkgY2FuIGdpdmUgPC9GT05UPiA8L0NFTlRFUj4gPHA+ICIgKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gQ29udGV4dCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRDb250ZXh0UGF0aCgpICsgIjxicj4iICk7IAotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBTZXJ2bGV0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldFNlcnZsZXRQYXRoKCkgKyAiPGJyPiIgKTsgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBhdGggSW5mbyA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0UGF0aEluZm8oKSArICI8YnI+IiApOyAKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gQ29udGV4dCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRDb250ZXh0UGF0aCgpICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFNlcnZsZXQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0U2VydmxldFBhdGgoKSArICI8YnI+IiApOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBQYXRoIEluZm8gOiAgPC9GT05UPiAiICsgcmVxLmdldFBhdGhJbmZvKCkgKyAiPGJyPiIgKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L0JPRFk+IDwvSFRNTD4gIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9Y2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIndlYmNsaWVudCBzZXJ2bGV0IHRlc3QgZmFpbGVkIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihleCk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICB9CiAKLSAgICAKLSAgICAKKworCiAgICAgcHVibGljIHZvaWQgIGRlc3Ryb3koKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gd2ViY2xpZW50OjpzZXJ2bGV0IGRlc3Ryb3kiKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJjbGllbnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJjbGllbnQvYnVpbGQucHJvcGVydGllcwppbmRleCBiNzNmZjIwLi5mYjhjYzhjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiY2xpZW50L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmNsaWVudC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1zdHVicy1lamJjbGllbnQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJjbGllbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmNsaWVudC9idWlsZC54bWwKaW5kZXggZTIwZGNkNy4uZTFkM2UyMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmNsaWVudC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmNsaWVudC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDMwICs0NiwzMCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9oZWxsb19saWJyYXJ5LmphciIgCi0gICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2hlbGxvX2xpYnJhcnkuamFyIgorICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICBpbmNsdWRlcyA9IioqL0hlbGxvKi5jbGFzcyI+Ci0gICAgICAgPC9qYXI+ICAgIAorICAgICAgIDwvamFyPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFwcGNsaWVudC1qYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MsKiovKkZvby5jbGFzcywqKi8qRm9vSG9tZS5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIiAKLSAgICAgICAgICAgICB1cGRhdGU9InRydWUiIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIKKyAgICAgICAgICAgICB1cGRhdGU9InRydWUiIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovRm9vKi5jbGFzcyI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIuL2Rlc2NyaXB0b3IiPgogICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iZWpiLWphci54bWwiLz4KICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InN1bi1lamItamFyLnhtbCIvPgogICAgICAgICAgICAgIDwvbWV0YWluZj4KICAgICAgICAgICAgICA8bWFuaWZlc3Q+Ci0gICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9IkNsYXNzLVBhdGgiIAorICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJDbGFzcy1QYXRoIgogICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iaGVsbG9fbGlicmFyeS5qYXIiLz4KICAgICAgICAgICAgICA8L21hbmlmZXN0PgotICAgICAgICA8L2phcj4gIAorICAgICAgICA8L2phcj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTc3LDEwICs3NywxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDcyMmEwNTMuLmJhNmZiNjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zNywzMSArMzcsMzEgQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1zdHVicy1lamJjbGllbnRJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIGVqYiByZWYgIik7Ci0gICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCisgICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2ZvbyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvYmpyZWYgPSAiICsgb2JqcmVmKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBGb29Ib21lICBob21lID0gKEZvb0hvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93CiAgICAgICAgICAgICAgICAgKG9ianJlZiwgRm9vSG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAKKworCiAgICAgICAgICAgICBGb28gZiA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gaW52b2tlIG1ldGhvZCBvbiB0aGUgRUpCCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIGVqYiIpOwogICAgICAgICAgICAgZi5jYWxsSGVsbG8oKTsKQEAgLTczLDggKzczLDggQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJjbGllbnQvZWpiL0Zvb0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJjbGllbnQvZWpiL0Zvb0JlYW4uamF2YQppbmRleCBjNjI3MDY0Li4xMWMzMjE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiY2xpZW50L2VqYi9Gb29CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmNsaWVudC9lamIvRm9vQmVhbi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMzQsMTEgKzM0LDExIEBACiAgICAgcHVibGljIEZvb0JlYW4oKSB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CZWFuOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0JlYW46OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JdGhpcy5zYyA9IHNjOworICAgIHRoaXMuc2MgPSBzYzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBjYWxsSGVsbG8oKSAgewpAQCAtNDYsMjEgKzQ2LDIxIEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIGVqYiByZWYgIik7Ci0gICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCisgICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2hlbGxvIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9ianJlZiA9ICIgKyBvYmpyZWYpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEhlbGxvSG9tZSAgaG9tZSA9IChIZWxsb0hvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93CiAgICAgICAgICAgICAgICAgKG9ianJlZiwgSGVsbG9Ib21lLmNsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsbyBociA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gaW52b2tlIG1ldGhvZCBvbiB0aGUgRUpCCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIGVqYiIpOwogICAgICAgICAgICAgaHIuc2F5SGVsbG8oKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzI5NTc5ZS4uYjQ1YmI4OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXN0dWJzLXByb3h5Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvcHJveHkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2J1aWxkLnhtbAppbmRleCAzN2Y4ZWE4Li4yZTcyYWI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvcHJveHkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovSGVsbG9Ib21lLmNsYXNzLCoqL0hlbGxvLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjEsMTAgKzYxLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvcHJveHkvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGI2ZmQ0MzguLmFjNWMyMWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzYsMzQgKzM2LDM0IEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItc3R1YnMtcHJveHlJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgdHJ5IHsKIAotCSAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIAotCSAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCi0JICAgIGphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0gCisgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lcgorICAgICAgICBqYXZhLmxhbmcuT2JqZWN0IG9ianJlZiA9CiAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9Qcm94eUFwcCIpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKIAotCSAgICBIZWxsb0hvbWUgIGhvbWUgPSAoSGVsbG9Ib21lKQorICAgICAgICBIZWxsb0hvbWUgIGhvbWUgPSAoSGVsbG9Ib21lKQogICAgICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIEhlbGxvSG9tZS5jbGFzcyk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7CiAKLQkgICAgSGVsbG8gaHIgPSBob21lLmNyZWF0ZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKKyAgICAgICAgSGVsbG8gaHIgPSBob21lLmNyZWF0ZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKIAogICAgICAgICAgICAgaHIudGVzdFBhc3NCeVJlZigpOwogCi0JICAgIC8vIGludm9rZSBtZXRob2Qgb24gdGhlIEVKQgotCSAgICBkb1Byb3h5VGVzdChocik7CisgICAgICAgIC8vIGludm9rZSBtZXRob2Qgb24gdGhlIEVKQgorICAgICAgICBkb1Byb3h5VGVzdChocik7CiAKICAgICAgICAgICAgIHRlc3RFeGNlcHRpb25zKGhyKTsKIApAQCAtNzUsOCArNzUsOCBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3RFeGNlcHRpb25zKEhlbGxvIGgpIHRocm93cyBFeGNlcHRpb24gewpAQCAtODUsNyArODUsNyBAQAogICAgICAgICAgICAgaC50aHJvd0V4Y2VwdGlvbigpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBpZiggZS5nZXRDbGFzcygpID09IEV4Y2VwdGlvbi5jbGFzcyApIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmdldENsYXNzKCkgKyAiICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHRocm93IGU7CkBAIC05Niw3ICs5Niw3IEBACiAgICAgICAgICAgICBoLnRocm93QXBwRXhjZXB0aW9uMSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiZGlkbid0IGdldCBleGNlcHRpb24gZm9yIHRlc3RFeGNlcHRpb24yIik7CiAgICAgICAgIH0gY2F0Y2goamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmdldENsYXNzKCkgKyAiICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KIApAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgICAgICAgICBoLnRocm93QXBwRXhjZXB0aW9uMigpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiZGlkbid0IGdldCBleGNlcHRpb24gZm9yIHRlc3RFeGNlcHRpb24zIik7CiAgICAgICAgIH0gY2F0Y2goamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmdldENsYXNzKCkgKyAiICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KIApAQCAtMTMwLDM2ICsxMzAsMzYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkb1Byb3h5VGVzdChIZWxsbyBocikgCi0JdGhyb3dzIEV4Y2VwdGlvbgorICAgIHByaXZhdGUgdm9pZCBkb1Byb3h5VGVzdChIZWxsbyBocikKKyAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotCVN5c3RlbS5vdXQucHJpbnRsbigiXG5TdGF0ZWZ1bCBTZXNzaW9uIHJlc3VsdHMgKG1pY3Jvc2VjKTogXHR3aXRoIHR4IFx0bm8gdHg6Iik7Ci0JaHIud2FybXVwKENvbW1vbi5TVEFURUZVTCk7Ci0JcnVuVGVzdHMoQ29tbW9uLlNUQVRFRlVMLCBocik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblN0YXRlZnVsIFNlc3Npb24gcmVzdWx0cyAobWljcm9zZWMpOiBcdHdpdGggdHggXHRubyB0eDoiKTsKKyAgICBoci53YXJtdXAoQ29tbW9uLlNUQVRFRlVMKTsKKyAgICBydW5UZXN0cyhDb21tb24uU1RBVEVGVUwsIGhyKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiXG5TdGF0ZWxlc3MgU2Vzc2lvbiByZXN1bHRzIChtaWNyb3NlYyk6IFx0d2l0aCB0eCBcdG5vIHR4OiIpOwotCWhyLndhcm11cChDb21tb24uU1RBVEVGVUwpOwotCXJ1blRlc3RzKENvbW1vbi5TVEFURUxFU1MsIGhyKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuU3RhdGVsZXNzIFNlc3Npb24gcmVzdWx0cyAobWljcm9zZWMpOiBcdHdpdGggdHggXHRubyB0eDoiKTsKKyAgICBoci53YXJtdXAoQ29tbW9uLlNUQVRFRlVMKTsKKyAgICBydW5UZXN0cyhDb21tb24uU1RBVEVMRVNTLCBocik7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuQk1QIEVudGl0eSByZXN1bHRzIChtaWNyb3NlYyk6IFx0XHR3aXRoIHR4IFx0bm8gdHg6Iik7Ci0JaHIud2FybXVwKENvbW1vbi5CTVApOwotCXJ1blRlc3RzKENvbW1vbi5CTVAsIGhyKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuQk1QIEVudGl0eSByZXN1bHRzIChtaWNyb3NlYyk6IFx0XHR3aXRoIHR4IFx0bm8gdHg6Iik7CisgICAgaHIud2FybXVwKENvbW1vbi5CTVApOworICAgIHJ1blRlc3RzKENvbW1vbi5CTVAsIGhyKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcnVuVGVzdHMoaW50IHR5cGUsIEhlbGxvIGhyKQotCXRocm93cyBFeGNlcHRpb24KKyAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotICAgICAgCisKICAgICAgICAgaHIubm90U3VwcG9ydGVkKHR5cGUsIHRydWUpOwogICAgICAgICBoci5ub3RTdXBwb3J0ZWQodHlwZSwgZmFsc2UpOwogICAgICAgICBoci5zdXBwb3J0cyh0eXBlLCB0cnVlKTsKLQloci5zdXBwb3J0cyh0eXBlLCBmYWxzZSk7CisgICAgaHIuc3VwcG9ydHModHlwZSwgZmFsc2UpOwogICAgICAgICBoci5yZXF1aXJlZCh0eXBlLCB0cnVlKTsKLQloci5yZXF1aXJlZCh0eXBlLCBmYWxzZSk7CisgICAgaHIucmVxdWlyZWQodHlwZSwgZmFsc2UpOwogICAgICAgICBoci5yZXF1aXJlc05ldyh0eXBlLCB0cnVlKTsKLQloci5yZXF1aXJlc05ldyh0eXBlLCBmYWxzZSk7CisgICAgaHIucmVxdWlyZXNOZXcodHlwZSwgZmFsc2UpOwogICAgICAgICBoci5tYW5kYXRvcnkodHlwZSwgdHJ1ZSk7Ci0JaHIubmV2ZXIodHlwZSwgZmFsc2UpOworICAgIGhyLm5ldmVyKHR5cGUsIGZhbHNlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggOWI4NGUxMy4uNjM4OTk2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgIDwvc2Vzc2lvbj4KICAgICA8c2Vzc2lvbj4KICAgICAgIDxlamItbmFtZT5TZnVsQmVhbjwvZWpiLW5hbWU+Ci0gICAgICA8aG9tZT5jb20uc3VuLnMxYXNkZXYuZWpiLnN0dWJzLnByb3h5LlNmdWxSZW1vdGVIb21lPC9ob21lPiAKKyAgICAgIDxob21lPmNvbS5zdW4uczFhc2Rldi5lamIuc3R1YnMucHJveHkuU2Z1bFJlbW90ZUhvbWU8L2hvbWU+CiAgICAgICA8cmVtb3RlPmNvbS5zdW4uczFhc2Rldi5lamIuc3R1YnMucHJveHkuU2Z1bFJlbW90ZTwvcmVtb3RlPgogICAgICAgPGxvY2FsLWhvbWU+Y29tLnN1bi5zMWFzZGV2LmVqYi5zdHVicy5wcm94eS5TZnVsSG9tZTwvbG9jYWwtaG9tZT4KICAgICAgIDxsb2NhbD5jb20uc3VuLnMxYXNkZXYuZWpiLnN0dWJzLnByb3h5LlNmdWw8L2xvY2FsPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2VqYi9CbXBFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9lamIvQm1wRUpCLmphdmEKaW5kZXggZWQ0ODBiNS4uMDRjZTVkMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2VqYi9CbXBFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvcHJveHkvZWpiL0JtcEVKQi5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgcHVibGljIEJtcEVKQigpe30KIAogICAgIHB1YmxpYyBTdHJpbmcgZWpiQ3JlYXRlKFN0cmluZyBzKSB7Ci0JcmV0dXJuIHM7CisgICAgcmV0dXJuIHM7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZShTdHJpbmcgcykge30KQEAgLTQ1LDEwICs0NSwxMCBAQAogICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpCiAgICAge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpCiAgICAge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKQogICAgIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKQpAQCAtNjEsNyArNjEsNyBAQAogICAgIHt9CiAKICAgICBwdWJsaWMgU3RyaW5nIGVqYkZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHMpIHsKLQlyZXR1cm4gczsKKyAgICByZXR1cm4gczsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0RXhjZXB0aW9uMSgpIHRocm93cyBFeGNlcHRpb24gewpAQCAtOTksNyArOTksNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RQYXNzQnlSZWY0KENvbW1vblJlbW90ZSBjcikgewotICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIEhlbHBlcjEgdGVzdFBhc3NCeVJlZjUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvcHJveHkvZWpiL0JtcEhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9lamIvQm1wSG9tZS5qYXZhCmluZGV4IDNlNGNiN2QuLmFmYzk1MmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9lamIvQm1wSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9lamIvQm1wSG9tZS5qYXZhCkBAIC0yMiw1ICsyMiw1IEBACiBwdWJsaWMgaW50ZXJmYWNlIEJtcEhvbWUgZXh0ZW5kcyBFSkJMb2NhbEhvbWUKIHsKICAgICBCbXAgY3JlYXRlKFN0cmluZyBzKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uOwotICAgIEJtcCBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBzKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uOyAgICAKKyAgICBCbXAgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgcykgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9lamIvQm1wUmVtb3RlSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2VqYi9CbXBSZW1vdGVIb21lLmphdmEKaW5kZXggYzNmMjlmYy4uN2Q5NDM5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2VqYi9CbXBSZW1vdGVIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2VqYi9CbXBSZW1vdGVIb21lLmphdmEKQEAgLTIyLDUgKzIyLDUgQEAKIHB1YmxpYyBpbnRlcmZhY2UgQm1wUmVtb3RlSG9tZSBleHRlbmRzIEVKQkhvbWUKIHsKICAgICBCbXBSZW1vdGUgY3JlYXRlKFN0cmluZyBzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBDcmVhdGVFeGNlcHRpb247Ci0gICAgQm1wUmVtb3RlIGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHMpIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIENyZWF0ZUV4Y2VwdGlvbjsgICAgCisgICAgQm1wUmVtb3RlIGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHMpIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIENyZWF0ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9lamIvSGVsbG9FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9lamIvSGVsbG9FSkIuamF2YQppbmRleCA0ODk2ZmZhLi4xOTdkYWU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvcHJveHkvZWpiL0hlbGxvRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2VqYi9IZWxsb0VKQi5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAgICAgcHJpdmF0ZSBCbXBSZW1vdGVIb21lIGJtcFJlbW90ZUhvbWU7CiAKICAgICBwcml2YXRlIGxvbmcgb3ZlcmhlYWQ7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgcGtleSA9ICJBIEJNUCBCZWFuIjsKIAogICAgIGpha2FydGEudHJhbnNhY3Rpb24uVXNlclRyYW5zYWN0aW9uIHV0OwpAQCAtNTEsNyArNTEsNyBAQAogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgewogCi0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCiAgICAgICAgICAgICBDb250ZXh0IGljMSA9IChDb250ZXh0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYiKTsKQEAgLTYwLDI3ICs2MCwyNyBAQAogCiAgICAgICAgICAgICBDb250ZXh0IGljMiA9IChDb250ZXh0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiIik7CiAgICAgICAgICAgICBTdHJpbmcgaWMyTmFtZSA9IGljMi5nZXROYW1lSW5OYW1lc3BhY2UoKTsKLSAgICAgICAgICAgIENvbnRleHQgaWMyXyA9IChDb250ZXh0KSBpYy5sb29rdXAoaWMyTmFtZSk7ICAgICAgICAgICAgCisgICAgICAgICAgICBDb250ZXh0IGljMl8gPSAoQ29udGV4dCkgaWMubG9va3VwKGljMk5hbWUpOwogCi0JICAgIHNmdWxIb21lID0gKFNmdWxIb21lKSBpYzJfLmxvb2t1cCgiU2Z1bCIpOworICAgICAgICBzZnVsSG9tZSA9IChTZnVsSG9tZSkgaWMyXy5sb29rdXAoIlNmdWwiKTsKICAgICAgICAgICAgIHNmdWwgPSBzZnVsSG9tZS5jcmVhdGUoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmogPSBpYzJfLmxvb2t1cCgiU2Z1bFJlbW90ZSIpOwogICAgICAgICAgICAgc2Z1bFJlbW90ZUhvbWUgPSAoU2Z1bFJlbW90ZUhvbWUpCiAgICAgICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9iaiwgU2Z1bFJlbW90ZUhvbWUuY2xhc3MpOwogICAgICAgICAgICAgc2Z1bFJlbW90ZSA9IHNmdWxSZW1vdGVIb21lLmNyZWF0ZSgpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBTdGF0ZWZ1bCBiZWFuLiIpOwotCSAgIAkgICAgIAotCSAgICBzbGVzc0hvbWUgPSAoU2xlc3NIb21lKSBpYzFfLmxvb2t1cCgiZWpiL1NsZXNzIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBTdGF0ZWZ1bCBiZWFuLiIpOworCisgICAgICAgIHNsZXNzSG9tZSA9IChTbGVzc0hvbWUpIGljMV8ubG9va3VwKCJlamIvU2xlc3MiKTsKICAgICAgICAgICAgIHNsZXNzID0gc2xlc3NIb21lLmNyZWF0ZSgpOwogICAgICAgICAgICAgb2JqID0gaWMyXy5sb29rdXAoIlNsZXNzUmVtb3RlIik7CiAgICAgICAgICAgICBzbGVzc1JlbW90ZUhvbWUgPSAoU2xlc3NSZW1vdGVIb21lKQogICAgICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmosIFNsZXNzUmVtb3RlSG9tZS5jbGFzcyk7CiAgICAgICAgICAgICBzbGVzc1JlbW90ZSA9IHNsZXNzUmVtb3RlSG9tZS5jcmVhdGUoKTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgU3RhdGVsZXNzIGJlYW4uIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBTdGF0ZWxlc3MgYmVhbi4iKTsKIAotCSAgICBibXBIb21lID0gKEJtcEhvbWUpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvQm1wIik7CisgICAgICAgIGJtcEhvbWUgPSAoQm1wSG9tZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9CbXAiKTsKIAogICAgICAgICAgICAgYm1wID0gYm1wSG9tZS5jcmVhdGUocGtleSk7CiAgICAgICAgICAgICBvYmogPSBpYzJfLmxvb2t1cCgiQm1wUmVtb3RlIik7CkBAIC04OSwxNCArODksMTQgQEAKICAgICAgICAgICAgIGJtcFJlbW90ZSA9IChCbXBSZW1vdGUpCiAgICAgICAgICAgICAgICAgYm1wUmVtb3RlSG9tZS5maW5kQnlQcmltYXJ5S2V5KHBrZXkpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBCTVAgYmVhbi4iKTsKLQkgICAJICAgICAKLQkgICAgdXQgPSBjb250ZXh0LmdldFVzZXJUcmFuc2FjdGlvbigpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgQk1QIGJlYW4uIik7CiAKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb3VsZG4ndCBnZXQgYWxsIGJlYW5zIik7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICAgICAgdXQgPSBjb250ZXh0LmdldFVzZXJUcmFuc2FjdGlvbigpOworCisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY291bGRuJ3QgZ2V0IGFsbCBiZWFucyIpOworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3RSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIEJNUCBiZWFuLiIpOwogICAgICAgICAgICAgYm1wSG9tZS5yZW1vdmUoYm1wMi5nZXRQcmltYXJ5S2V5KCkpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmVtb3ZlZCBsb2NhbCBlbnRpdHkgYmVhbiIpOwotICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7ICAgICAgICAgICAgCisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwogICAgICAgICB9CkBAIC0xMzAsNyArMTMwLDcgQEAKICAgICAgICAgICAgIC8vIHN1Y2Nlc3MKICAgICAgICAgfQogCi0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBFSkJPYmplY3QgYm1wUmVtb3RlMiA9IGJtcFJlbW90ZUhvbWUuY3JlYXRlKCJmb29iYXIyIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgQk1QIGJlYW4uIik7CkBAIC0xNzQsOSArMTc0LDkgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgc2Z1bC5yZW1vdmUoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHNmdWwucmVtb3ZlKCk7IAorICAgICAgICAgICAgICAgIHNmdWwucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiMm5kIHNmdWwgcmVtb3ZlIHNob3VsZCBoYXZlIGNhdXNlZCBleGNlcHRpb24iKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uIHdoZW4gYXR0ZW1wdGluZyB0byAiKwpAQCAtMTg2LDcgKzE4Niw3IEBACiAKICAgICAgICAgICAgIHNsZXNzLnJlbW92ZSgpOwogCi0gICAgICAgICAgICBibXAucmVtb3ZlKCk7IAorICAgICAgICAgICAgYm1wLnJlbW92ZSgpOwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0yMDgsMjkgKzIwOCwyOSBAQAogICAgIHB1YmxpYyB2b2lkIHRocm93QXBwRXhjZXB0aW9uMigpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgT2JqZWN0Tm90Rm91bmRFeGNlcHRpb24oInRocm93QXBwRXhjZXB0aW9uMiIpOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB3YXJtdXAoaW50IHR5cGUpIHRocm93cyBFeGNlcHRpb24gewotCXdhcm11cCh0eXBlLCB0cnVlKTsKLQl3YXJtdXAodHlwZSwgZmFsc2UpOwogCi0JLy8gTWVhc3VyZSBsb29waW5nIGFuZCB0aW1pbmcgb3ZlcmhlYWQgCi0JbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCWZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgewotCX0KLQlsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCW92ZXJoZWFkID0gZW5kIC0gYmVnaW47CisgICAgcHVibGljIHZvaWQgd2FybXVwKGludCB0eXBlKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB3YXJtdXAodHlwZSwgdHJ1ZSk7CisgICAgd2FybXVwKHR5cGUsIGZhbHNlKTsKKworICAgIC8vIE1lYXN1cmUgbG9vcGluZyBhbmQgdGltaW5nIG92ZXJoZWFkCisgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgIH0KKyAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIG92ZXJoZWFkID0gZW5kIC0gYmVnaW47CiAKICAgICAgICAgU3RyaW5nIHBrZXkyID0gKFN0cmluZykgYm1wLmdldFByaW1hcnlLZXkoKTsKICAgICAgICAgaWYoICFwa2V5Mi5lcXVhbHMocGtleSkgKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJwa2V5MiAiICsgcGtleTIgKyAiIGRvZXNuJ3QgbWF0Y2ggIiArIHBrZXkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHV0ID0gY29udGV4dC5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKLSAgICAgICAgCisKICAgICAgICAgdGVzdExvY2FsT2JqZWN0cyhzZnVsLCBzbGVzcyk7CiAgICAgICAgIHRlc3RMb2NhbE9iamVjdHMoc2Z1bCwgYm1wKTsKICAgICAgICAgdGVzdExvY2FsT2JqZWN0cyhzbGVzcywgYm1wKTsKLSAgICAgICAgCisKICAgICAgICAgdGVzdEVKQk9iamVjdHMoc2Z1bFJlbW90ZSwgc2xlc3NSZW1vdGUpOwogICAgICAgICB0ZXN0RUpCT2JqZWN0cyhzZnVsUmVtb3RlLCBibXBSZW1vdGUpOwogICAgICAgICB0ZXN0RUpCT2JqZWN0cyhzbGVzc1JlbW90ZSwgYm1wUmVtb3RlKTsKQEAgLTI1OSwxNCArMjU5LDE0IEBACiAgICAgICAgIHRlc3RFeGNlcHRpb25zKHNsZXNzUmVtb3RlKTsKICAgICAgICAgdGVzdEV4Y2VwdGlvbnMoYm1wUmVtb3RlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgdGVzdEV4Y2VwdGlvbnMoQ29tbW9uIGMpIHsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgYy50ZXN0RXhjZXB0aW9uMSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZGlkbid0IGdldCBleGNlcHRpb24gZm9yIHRlc3RFeGNlcHRpb24xIik7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmdldENsYXNzKCkgKyAiICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KIApAQCAtMjc0LDcgKzI3NCw3IEBACiAgICAgICAgICAgICBjLnRlc3RFeGNlcHRpb24yKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJkaWRuJ3QgZ2V0IGV4Y2VwdGlvbiBmb3IgdGVzdEV4Y2VwdGlvbjIiKTsKICAgICAgICAgfSBjYXRjaChFSkJFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuZ2V0Q2xhc3MoKSArICIgIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogCkBAIC0yODIsMTAgKzI4MiwxMCBAQAogICAgICAgICAgICAgYy50ZXN0RXhjZXB0aW9uMygpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZGlkbid0IGdldCBleGNlcHRpb24gZm9yIHRlc3RFeGNlcHRpb24zIik7CiAgICAgICAgIH0gY2F0Y2goRmluZGVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmdldENsYXNzKCkgKyAiICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB0ZXN0RXhjZXB0aW9ucyhDb21tb25SZW1vdGUgYykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CkBAIC0yOTQsNyArMjk0LDcgQEAKICAgICAgICAgICAgIGMudGVzdEV4Y2VwdGlvbjEoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImRpZG4ndCBnZXQgZXhjZXB0aW9uIGZvciB0ZXN0RXhjZXB0aW9uMSIpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5nZXRDbGFzcygpICsgIiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAKQEAgLTMwMiw3ICszMDIsNyBAQAogICAgICAgICAgICAgYy50ZXN0RXhjZXB0aW9uMigpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZGlkbid0IGdldCBleGNlcHRpb24gZm9yIHRlc3RFeGNlcHRpb24yIik7CiAgICAgICAgIH0gY2F0Y2goUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmdldENsYXNzKCkgKyAiICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KIApAQCAtMzEwLDcgKzMxMCw3IEBACiAgICAgICAgICAgICBjLnRlc3RFeGNlcHRpb24zKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJkaWRuJ3QgZ2V0IGV4Y2VwdGlvbiBmb3IgdGVzdEV4Y2VwdGlvbjMiKTsKICAgICAgICAgfSBjYXRjaChGaW5kZXJFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuZ2V0Q2xhc3MoKSArICIgIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogCkBAIC0zMTgsMTAgKzMxOCwxMCBAQAogICAgICAgICAgICAgYy50ZXN0RXhjZXB0aW9uNCgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZGlkbid0IGdldCBleGNlcHRpb24gZm9yIHRlc3RFeGNlcHRpb240Iik7CiAgICAgICAgIH0gY2F0Y2goRmluZGVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmdldENsYXNzKCkgKyAiICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyBPYmplY3QgdGVzdFBhc3NCeVJlZigpIHRocm93cyBFeGNlcHRpb24gewpAQCAtMzQzLDkgKzM0Myw5IEBACiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBfdGVzdFBhc3NCeVJlZihDb21tb25SZW1vdGUgYywgYm9vbGVhbiBwYXNzQnlSZWYpIAorICAgIHByaXZhdGUgdm9pZCBfdGVzdFBhc3NCeVJlZihDb21tb25SZW1vdGUgYywgYm9vbGVhbiBwYXNzQnlSZWYpCiAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgaW50IGludFZhbCA9IDE7CiAgICAgICAgIFN0cmluZyBzdHJpbmdWYWwgPSAiSGVsbG9FSkI6Ol90ZXN0UGFzc0J5UmVmIjsKIApAQCAtMzYxLDcgKzM2MSw3IEBACiAgICAgICAgIGlmKCBwYXNzQnlSZWYgKSB7CiAgICAgICAgICAgICBpZiggKGgxLmEgPT0gaW50VmFsKSB8fCBoMS5iLmVxdWFscyhzdHJpbmdWYWwpICkgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImgxIG11dGF0aW9ucyBub3QgcHJlc2VudCAiICsgaDEpOwotICAgICAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYoIChoMS5hICE9IGludFZhbCkgfHwgIWgxLmIuZXF1YWxzKHN0cmluZ1ZhbCkgKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZXJyb3IgOiBoMSB3YXMgbXV0YXRlZCAiICsgaDEpOwpAQCAtMzc4LDIzICszNzgsMjMgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgdGVzdFBhc3NCeVJlZjMgOiAiICsgaDIpOwogICAgICAgICAgICAgaWYoIChoMi5hID09IGludFZhbCkgfHwgaDIuYi5lcXVhbHMoc3RyaW5nVmFsKSApIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJoMiBtdXRhdGlvbnMgbm90IHByZXNlbnQgIiArIGgyKTsKLSAgICAgICAgICAgIH0gICAKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgYy50ZXN0UGFzc0J5UmVmMyhoMik7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciA6IEV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIDogRXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXNzaW5nIG5vbi1zZXJpYWxpemFibGUgZGF0YSAiICsgaDIpOwotICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8qIERPTidUIFRSRUFUIEFTIEZBVEFMIEVSUk9SIFdISUxFIFdFIElOVkVTVElHQVRFIFdIRVRIRVIKICAgICAgICAgICAgICAgICAgKiBUSElTIFdBUyBJTlRFTkRFRCBCRUhBVklPUiBGT1IgVEhFIE9SQgotICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJFcnJvciA6IEV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuICIgKyAKLSAgICAgICAgICAgICAgICAgInBhc3Npbmcgbm9uLXNlcmlhbGl6YWJsZSBkYXRhICIgKyAKKyAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRXJyb3IgOiBFeHBlY3RlZCBleGNlcHRpb24gd2hlbiAiICsKKyAgICAgICAgICAgICAgICAgInBhc3Npbmcgbm9uLXNlcmlhbGl6YWJsZSBkYXRhICIgKwogICAgICAgICAgICAgICAgICBoMik7CiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIH0gY2F0Y2goRUpCRXhjZXB0aW9uIGVqYmV4KSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgZWpiZXg7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgZXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IGV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHBhc3Npbmcgbm9uLXNlcmlhbGl6YWJsZSBkYXRhIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICB9CkBAIC00MDksMTYgKzQwOSwxNiBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBIZWxwZXIyIGg2ID0gYy50ZXN0UGFzc0J5UmVmNigpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IgOiBFeHBlY3RlZCBleGNlcHRpb24gd2hlbiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciA6IEV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybmluZyBub24tc2VyaWFsaXphYmxlIGRhdGEgIiArIGg2KTsKLSAgICAgICAgICAgICAgICAvKiBzZWUgY29tbWVudCBmb3IgdGVzdFBhc3NCeVJlZjMgYWJvdmUgCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRXJyb3IgOiBFeHBlY3RlZCBleGNlcHRpb24gd2hlbiAiICsgCisgICAgICAgICAgICAgICAgLyogc2VlIGNvbW1lbnQgZm9yIHRlc3RQYXNzQnlSZWYzIGFib3ZlCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRXJyb3IgOiBFeHBlY3RlZCBleGNlcHRpb24gd2hlbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5pbmcgbm9uLXNlcmlhbGl6YWJsZSBkYXRhICIpOwogICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICB9IGNhdGNoKEVKQkV4Y2VwdGlvbiBlamJleCkgewotICAgICAgICAgICAgICAgIHRocm93IGVqYmV4OyAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHRocm93IGVqYmV4OwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IGV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBleHBlY3RlZCBleGNlcHRpb24gd2hlbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiByZXR1cm5pbmcgbm9uLXNlcmlhbGl6YWJsZSBkYXRhIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICB9CkBAIC00NTAsMTQ0ICs0NTAsMTQ0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHdhcm11cChpbnQgdHlwZSwgYm9vbGVhbiB0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JLy8gZ2V0IEhvdHNwb3Qgd2FybWVkIHVwCQotCUNvbW1vbiBiZWFuID0gcHJlKHR5cGUsIHR4KTsKLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhbi5yZXF1aXJlc05ldygpOwotCSAgICBiZWFuLm5vdFN1cHBvcnRlZCgpOwotCX0KLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhbi5yZXF1aXJlZCgpOwotCSAgICBpZiAoIHR4ICkKLQkJYmVhbi5tYW5kYXRvcnkoKTsKLQkgICAgZWxzZQotCQliZWFuLm5ldmVyKCk7Ci0JICAgIGJlYW4uc3VwcG9ydHMoKTsKLQl9Ci0JaWYgKCB0eCApIHRyeSB7IHV0LmNvbW1pdCgpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkge30KKyAgICAvLyBnZXQgSG90c3BvdCB3YXJtZWQgdXAKKyAgICBDb21tb24gYmVhbiA9IHByZSh0eXBlLCB0eCk7CisgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CisgICAgICAgIGJlYW4ucmVxdWlyZXNOZXcoKTsKKyAgICAgICAgYmVhbi5ub3RTdXBwb3J0ZWQoKTsKKyAgICB9CisgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CisgICAgICAgIGJlYW4ucmVxdWlyZWQoKTsKKyAgICAgICAgaWYgKCB0eCApCisgICAgICAgIGJlYW4ubWFuZGF0b3J5KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgYmVhbi5uZXZlcigpOworICAgICAgICBiZWFuLnN1cHBvcnRzKCk7CisgICAgfQorICAgIGlmICggdHggKSB0cnkgeyB1dC5jb21taXQoKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHt9CiAgICAgfQogCi0gICAgcHJpdmF0ZSBDb21tb24gcHJlKGludCB0eXBlLCBib29sZWFuIHR4KSAKKyAgICBwcml2YXRlIENvbW1vbiBwcmUoaW50IHR5cGUsIGJvb2xlYW4gdHgpCiAgICAgewotCWlmICggdHggKSB0cnkgeyB1dC5iZWdpbigpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkge30KLQlpZiAoIHR5cGUgPT0gQ29tbW9uLlNUQVRFTEVTUyApCi0JICAgIHJldHVybiBzbGVzczsKLQllbHNlIGlmICggdHlwZSA9PSBDb21tb24uU1RBVEVGVUwgKQotCSAgICByZXR1cm4gc2Z1bDsKLQllbHNlCi0JICAgIHJldHVybiBibXA7CisgICAgaWYgKCB0eCApIHRyeSB7IHV0LmJlZ2luKCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZXggKSB7fQorICAgIGlmICggdHlwZSA9PSBDb21tb24uU1RBVEVMRVNTICkKKyAgICAgICAgcmV0dXJuIHNsZXNzOworICAgIGVsc2UgaWYgKCB0eXBlID09IENvbW1vbi5TVEFURUZVTCApCisgICAgICAgIHJldHVybiBzZnVsOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGJtcDsKICAgICB9CiAKLSAgICBwcml2YXRlIENvbW1vblJlbW90ZSBwcmVSZW1vdGUoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAotICAgIHsgICAgICAgCi0JaWYgKCB0eXBlID09IENvbW1vbi5TVEFURUxFU1MgKQotCSAgICByZXR1cm4gc2xlc3NSZW1vdGU7Ci0JZWxzZSBpZiAoIHR5cGUgPT0gQ29tbW9uLlNUQVRFRlVMICkKLQkgICAgcmV0dXJuIHNmdWxSZW1vdGU7Ci0JZWxzZQotCSAgICByZXR1cm4gYm1wUmVtb3RlOworICAgIHByaXZhdGUgQ29tbW9uUmVtb3RlIHByZVJlbW90ZShpbnQgdHlwZSwgYm9vbGVhbiB0eCkKKyAgICB7CisgICAgaWYgKCB0eXBlID09IENvbW1vbi5TVEFURUxFU1MgKQorICAgICAgICByZXR1cm4gc2xlc3NSZW1vdGU7CisgICAgZWxzZSBpZiAoIHR5cGUgPT0gQ29tbW9uLlNUQVRFRlVMICkKKyAgICAgICAgcmV0dXJuIHNmdWxSZW1vdGU7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gYm1wUmVtb3RlOwogICAgIH0KIAogCiAgICAgcHJpdmF0ZSBmbG9hdCBwb3N0KGxvbmcgYmVnaW4sIGxvbmcgZW5kLCBib29sZWFuIHR4KQogICAgIHsKLQlpZiAoIHR4ICkgdHJ5IHsgdXQuY29tbWl0KCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZXggKSB7fQotCXJldHVybiAoZmxvYXQpKCAoKGRvdWJsZSkoZW5kLWJlZ2luLW92ZXJoZWFkKSkvKChkb3VibGUpSVRFUkFUSU9OUykgKiAxMDAwLjAgKTsKKyAgICBpZiAoIHR4ICkgdHJ5IHsgdXQuY29tbWl0KCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZXggKSB7fQorICAgIHJldHVybiAoZmxvYXQpKCAoKGRvdWJsZSkoZW5kLWJlZ2luLW92ZXJoZWFkKSkvKChkb3VibGUpSVRFUkFUSU9OUykgKiAxMDAwLjAgKTsKICAgICB9CiAKICAgICBwdWJsaWMgZmxvYXQgcmVxdWlyZXNOZXcoaW50IHR5cGUsIGJvb2xlYW4gdHgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24KICAgICB7Ci0JQ29tbW9uIGJlYW4gPSBwcmUodHlwZSwgdHgpOworICAgIENvbW1vbiBiZWFuID0gcHJlKHR5cGUsIHR4KTsKICAgICAgICAgQ29tbW9uUmVtb3RlIGJlYW5SZW1vdGUgPSBwcmVSZW1vdGUodHlwZSwgdHgpOwotCWxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhbi5yZXF1aXJlc05ldygpOwotCX0KKyAgICBsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CisgICAgICAgIGJlYW4ucmVxdWlyZXNOZXcoKTsKKyAgICB9CiAgICAgICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgewotCSAgICBiZWFuUmVtb3RlLnJlcXVpcmVzTmV3KCk7Ci0JfQotCWxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOworICAgICAgICBiZWFuUmVtb3RlLnJlcXVpcmVzTmV3KCk7CisgICAgfQorICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOwogICAgIH0KIAogICAgIHB1YmxpYyBmbG9hdCBub3RTdXBwb3J0ZWQoaW50IHR5cGUsIGJvb2xlYW4gdHgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24KICAgICB7Ci0JQ29tbW9uIGJlYW4gPSBwcmUodHlwZSwgdHgpOworICAgIENvbW1vbiBiZWFuID0gcHJlKHR5cGUsIHR4KTsKICAgICAgICAgQ29tbW9uUmVtb3RlIGJlYW5SZW1vdGUgPSBwcmVSZW1vdGUodHlwZSwgdHgpOwotCWxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhbi5ub3RTdXBwb3J0ZWQoKTsKLQl9CisgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgICAgICBiZWFuLm5vdFN1cHBvcnRlZCgpOworICAgIH0KICAgICAgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW5SZW1vdGUubm90U3VwcG9ydGVkKCk7Ci0JfQotCWxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOworICAgICAgICBiZWFuUmVtb3RlLm5vdFN1cHBvcnRlZCgpOworICAgIH0KKyAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKICAgICBwdWJsaWMgZmxvYXQgcmVxdWlyZWQoaW50IHR5cGUsIGJvb2xlYW4gdHgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24KICAgICB7Ci0JQ29tbW9uIGJlYW4gPSBwcmUodHlwZSwgdHgpOworICAgIENvbW1vbiBiZWFuID0gcHJlKHR5cGUsIHR4KTsKICAgICAgICAgQ29tbW9uUmVtb3RlIGJlYW5SZW1vdGUgPSBwcmVSZW1vdGUodHlwZSwgdHgpOwotCWxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhbi5yZXF1aXJlZCgpOwotCX0KLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhblJlbW90ZS5yZXF1aXJlZCgpOwotCX0KKyAgICBsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CisgICAgICAgIGJlYW4ucmVxdWlyZWQoKTsKKyAgICB9CisgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CisgICAgICAgIGJlYW5SZW1vdGUucmVxdWlyZWQoKTsKKyAgICB9CiAKLQlsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCXJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKKyAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKICAgICBwdWJsaWMgZmxvYXQgbWFuZGF0b3J5KGludCB0eXBlLCBib29sZWFuIHR4KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uCiAgICAgewotCUNvbW1vbiBiZWFuID0gcHJlKHR5cGUsIHR4KTsKKyAgICBDb21tb24gYmVhbiA9IHByZSh0eXBlLCB0eCk7CiAgICAgICAgIENvbW1vblJlbW90ZSBiZWFuUmVtb3RlID0gcHJlUmVtb3RlKHR5cGUsIHR4KTsKLQlsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW4ubWFuZGF0b3J5KCk7Ci0JfQotCWZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgewotCSAgICBiZWFuUmVtb3RlLm1hbmRhdG9yeSgpOwotCX0KLQlsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCXJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKKyAgICBsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CisgICAgICAgIGJlYW4ubWFuZGF0b3J5KCk7CisgICAgfQorICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgICAgICBiZWFuUmVtb3RlLm1hbmRhdG9yeSgpOworICAgIH0KKyAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKICAgICBwdWJsaWMgZmxvYXQgbmV2ZXIoaW50IHR5cGUsIGJvb2xlYW4gdHgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24KICAgICB7Ci0JQ29tbW9uIGJlYW4gPSBwcmUodHlwZSwgdHgpOworICAgIENvbW1vbiBiZWFuID0gcHJlKHR5cGUsIHR4KTsKICAgICAgICAgQ29tbW9uUmVtb3RlIGJlYW5SZW1vdGUgPSBwcmVSZW1vdGUodHlwZSwgdHgpOwotCWxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhbi5uZXZlcigpOwotCX0KLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhblJlbW90ZS5uZXZlcigpOwotCX0KLQlsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCXJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKKyAgICBsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CisgICAgICAgIGJlYW4ubmV2ZXIoKTsKKyAgICB9CisgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CisgICAgICAgIGJlYW5SZW1vdGUubmV2ZXIoKTsKKyAgICB9CisgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICByZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CiAgICAgfQogCiAgICAgcHVibGljIGZsb2F0IHN1cHBvcnRzKGludCB0eXBlLCBib29sZWFuIHR4KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uCiAgICAgewotCUNvbW1vbiBiZWFuID0gcHJlKHR5cGUsIHR4KTsKKyAgICBDb21tb24gYmVhbiA9IHByZSh0eXBlLCB0eCk7CiAgICAgICAgIENvbW1vblJlbW90ZSBiZWFuUmVtb3RlID0gcHJlUmVtb3RlKHR5cGUsIHR4KTsKLQlsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW4uc3VwcG9ydHMoKTsKLQl9Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW5SZW1vdGUuc3VwcG9ydHMoKTsKLQl9Ci0JbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlyZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CisgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgICAgICBiZWFuLnN1cHBvcnRzKCk7CisgICAgfQorICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgICAgICBiZWFuUmVtb3RlLnN1cHBvcnRzKCk7CisgICAgfQorICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JY29udGV4dCA9IHNjOworICAgIGNvbnRleHQgPSBzYzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQpAQCAtNjM3LDExICs2MzcsMTEgQEAKICAgICAgICAgaWYoIG8xLmlzSWRlbnRpY2FsKG8yKSApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImlzSWRlbnRpY2FsIGZhaWxlZCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKCBvMi5pc0lkZW50aWNhbChvMSkgKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJpc0lkZW50aWNhbCBmYWlsZWQiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiggIW8xLmlzSWRlbnRpY2FsKG8xKSApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImlzSWRlbnRpY2FsIGZhaWxlZCIpOwogICAgICAgICB9CkBAIC02OTQsMTIgKzY5NCwxMiBAQAogICAgICAgICB9CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvMS5oYXNoQ29kZSgpID0gIiArIG8xLmhhc2hDb2RlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvMi5oYXNoQ29kZSgpID0gIiArIG8yLmhhc2hDb2RlKCkpOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm8xLnRvU3RyaW5nKCkgPSAiICsgbzEudG9TdHJpbmcoKSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibzIudG9TdHJpbmcoKSA9ICIgKyBvMi50b1N0cmluZygpKTsKLSAgICAgICAgCisKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9lamIvU2Z1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2VqYi9TZnVsRUpCLmphdmEKaW5kZXggZTQxNjkxNS4uMjFkOTg1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2VqYi9TZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2VqYi9TZnVsRUpCLmphdmEKQEAgLTM5LDE0ICszOSwxNCBAQAogICAgICAgICBzY18gPSBzYzsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSAKLSAgICB7IAorICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpCisgICAgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkIuZWpiUmVtb3ZlKCkuIGFib3V0IHRvIHRocm93IGV4Y2VwdGlvbiIpOwogICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigidGVzdCBjbGVhbnVwIGZvciBjYXNlIHdoZXJlICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWpiUmVtb3ZlIHRocm93cyBhbiBleGNlcHRpb24iKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkKICAgICB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICBIZWxwZXIyIGgyID0gbmV3IEhlbHBlcjIoKTsKICAgICAgICAgaDIuYSA9IDE7CiAgICAgICAgIGgyLmIgPSAiU2Z1bEVKQjo6dGVzdFBhc3NCeVJlZjYiOwotICAgICAgICByZXR1cm4gaDI7ICAgIAorICAgICAgICByZXR1cm4gaDI7CiAgICAgfQogCiAgICAgcHVibGljIENvbW1vblJlbW90ZSB0ZXN0UGFzc0J5UmVmNygpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9lamIvU2xlc3NFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9lamIvU2xlc3NFSkIuamF2YQppbmRleCA5YmUwNTNlLi5hZTZlMGNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvcHJveHkvZWpiL1NsZXNzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2VqYi9TbGVzc0VKQi5qYXZhCkBAIC00MCwxMCArNDAsMTAgQEAKICAgICAgICAgc2NfID0gc2M7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgCisgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkKICAgICB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpCiAgICAge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpCkBAIC03MCw3ICs3MCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdFBhc3NCeVJlZjEoaW50IGEpIHsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0UGFzc0J5UmVmMihIZWxwZXIxIGhlbHBlcjEpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdGFuZGFsb25lY2xpZW50L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3RhbmRhbG9uZWNsaWVudC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGE4MDIzMzMuLmQ2OGViMWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdGFuZGFsb25lY2xpZW50L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0YW5kYWxvbmVjbGllbnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0idGVzdC5uYW1lIiB2YWx1ZT0iY29tLnN1bi5zMWFzZGV2LmVqYi5zdHVicy5zdGFuZGFsb25lY2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0ic2ltcGxlLmNsaWVudCIgdmFsdWU9IiR7dGVzdC5uYW1lfS5TaW1wbGVDbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdGFuZGFsb25lY2xpZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdGFuZGFsb25lY2xpZW50L2J1aWxkLnhtbAppbmRleCA0ZjlmMTUxLi5iMTMxNDBkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3RhbmRhbG9uZWNsaWVudC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0YW5kYWxvbmVjbGllbnQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBDb21waWxpbmcgdGVzdCBzb3VyY2UgZmlsZXMiIGxldmVsPSJ2ZXJib3NlIi8+CkBAIC00MiwxMSArNDIsMTEgQEAKICAgICAgICAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9OiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgICBkZWJ1Zz0ib24iCi0gICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+ICAgICAgICAKKyAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50X25vb3ZlcnJpZGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Fzc2VtYmxlLmRpcn0vZWpiLXN0dWJzLWVqYmFwcEFwcENsaWVudC9lamItc3R1YnMtZWpiYXBwLWNsaWVudENsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzaW1wbGUuY2xpZW50fSI+CkBAIC01NSw3ICs1NSw3IEBACiAgICAgICAgICAgIDxhcmcgdmFsdWU9ImVqYi9lamJfc3R1YnNfZWpiYXBwX0hlbGxvQmVhbiIvPgogICAgICAgICAgICA8YXJnIHZhbHVlPSIke2ljLnByb3BzfSIvPgogICAgICAgICA8L2phdmE+Ci0gICAgPC90YXJnZXQ+ICAgICAKKyAgICA8L3RhcmdldD4KIAogPCEtLVRoaXMgdGFyZ2V0IGlzIHVzZWQgdG8gdGVzdCB0aGF0IHVzaW5nIG5vLWFyZyBJbml0aWFsQ29udGV4dCBhbmQKICAgICBub3Qgc2V0dGluZyBhbnkgdm0gcGFyYW1zIHdpbGwgc3RpbGwgd29yaywgYXNzdW1pbmcgdGhlIGRlZmF1bHQKQEAgLTYzLDEzICs2MywxMyBAQAogICAgIHRlc3RzIHJ1biBiL2Mgb2YgdGhlIHBvcnQgY2hhbmdlIHBvc3NpYmlsaXR5LiAgSG93ZXZlciwgaWYgdGhlCiAgICAgZGVmYXVsdCBwb3J0IG9mIDM3MDAgaXMgc2V0LCB0aGlzIHRlc3Qgc2hvdWxkIHdvcmsuICAgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnRfc2V0bm90aGluZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7YXNzZW1ibGUuZGlyfS9lamItc3R1YnMtZWpiYXBwQXBwQ2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NpbXBsZS5jbGllbnR9Ij4KICAgICAgICAgICAgPGFyZyB2YWx1ZT0iZWpiL2VqYl9zdHVic19lamJhcHBfSGVsbG9CZWFuIi8+CiAgICAgICAgIDwvamF2YT4KLSAgICA8L3RhcmdldD4gICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9kZWZhdWx0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50X25vb3ZlcnJpZGUiPgpAQCAtOTQsNyArOTQsNyBAQAogCiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudF93aXRob3ZlcnJpZGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Fzc2VtYmxlLmRpcn0vZWpiLXN0dWJzLWVqYmFwcEFwcENsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzaW1wbGUuY2xpZW50fSI+CkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICAgICAgICAgPGFyZyB2YWx1ZT0iZWpiL2VqYl9zdHVic19lamJhcHBfSGVsbG9CZWFuIi8+CiAgICAgICAgICAgIDxhcmcgdmFsdWU9ImpuZGkucHJvcGVydGllcy5zMWFzOF9kZWZhdWx0Ii8+CiAgICAgICAgIDwvamF2YT4KLSAgICA8L3RhcmdldD4gICAgIAorICAgIDwvdGFyZ2V0PgogCiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9jb3NuYW1pbmdfb3ZlcnJpZGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdGFuZGFsb25lY2xpZW50L2NsaWVudC9CdGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0YW5kYWxvbmVjbGllbnQvY2xpZW50L0J0ZXN0LmphdmEKaW5kZXggNzVkMGYwNS4uY2UwYTg1YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0YW5kYWxvbmVjbGllbnQvY2xpZW50L0J0ZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0YW5kYWxvbmVjbGllbnQvY2xpZW50L0J0ZXN0LmphdmEKQEAgLTM1LDEzICszNSwxMyBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgewogICAgICAgIHRyeSB7Ci0gICAgICAgICAgIC8vIFN0ZXAgMTogIEl0IGlzIGltcG9ydGFudCB0byBjYWxsIGluaXRhaWxpemVTeXN0ZW1Qcm9wZXJ0aWVzIHRvIAotICAgICAgICAgICAvLyBhdm9pZCBwcm9ibGVtcyB3aXRoIHN3aXRjaGluZyBPUkJzIGJldHdlZW4gSjJTRSBhbmQgQXBwU2VydmVyLiAKLSAgICAgICAgICAgLy8gVGhlc2UgYXJlIHN5c3RlbSBwcm9wZXJ0aWVzIHRoYXQgbmVlZHMgdG8gYmUgcnVuIG9uY2Ugb3IgdGhlc2UgCisgICAgICAgICAgIC8vIFN0ZXAgMTogIEl0IGlzIGltcG9ydGFudCB0byBjYWxsIGluaXRhaWxpemVTeXN0ZW1Qcm9wZXJ0aWVzIHRvCisgICAgICAgICAgIC8vIGF2b2lkIHByb2JsZW1zIHdpdGggc3dpdGNoaW5nIE9SQnMgYmV0d2VlbiBKMlNFIGFuZCBBcHBTZXJ2ZXIuCisgICAgICAgICAgIC8vIFRoZXNlIGFyZSBzeXN0ZW0gcHJvcGVydGllcyB0aGF0IG5lZWRzIHRvIGJlIHJ1biBvbmNlIG9yIHRoZXNlCiAgICAgICAgICAgIC8vIHByb3BlcnRpZXMgY2FuIGJlIHBhc3NlZCB0aHJvdWdoIC1EIGZsYWdzCiAgICAgICAgICAgIGluaXRpYWxpemVTeXN0ZW1Qcm9wZXJ0aWVzKCApOwotICAgICAgICAKLSAgICAgICAgICAgLy8gU3RlcCAyOiBOb3cgZG8gdGhlIEVKQiBsb29rdXAsIGFuZCBjYWxsIHRoZSBtZXRob2RzIG9uIHRoZSAKKworICAgICAgICAgICAvLyBTdGVwIDI6IE5vdyBkbyB0aGUgRUpCIGxvb2t1cCwgYW5kIGNhbGwgdGhlIG1ldGhvZHMgb24gdGhlCiAgICAgICAgICAgIC8vIE1ldGFkYXRhIE9iamVjdAogICAgICAgICAgICBnZXRDb250ZXh0KCk7CiAKQEAgLTQ5LDkgKzQ5LDkgQEAKICAgICAgICAgICAgRUpCSG9tZSBob21lID0gZ2V0SG9tZSggYm91bmRPYmogKTsKICAgICAgICAgICAgZ2V0TWV0YURhdGEoIGhvbWUgKTsKIAotICAgICAgICAgICAvLyBTdGVwIDM6ICBSZXBlYXQgU3RlcCAyIGFzIG1hbnkgdGltZXMgYXMgbmVlZGVkLiBBbHRob3VnaCB0aGUgCisgICAgICAgICAgIC8vIFN0ZXAgMzogIFJlcGVhdCBTdGVwIDIgYXMgbWFueSB0aW1lcyBhcyBuZWVkZWQuIEFsdGhvdWdoIHRoZQogICAgICAgICAgICAvLyBhZHZpc2UgaXMgdG8gcGFzcyAiamF2YXgubmFtaW5nLkNPUkJBLk9SQiIgcHJvcGVydHkKLSAgICAgICAgICAgLy8gdG8gYXZvaWQgaHVnZSBtZW1vcnkgZm9vdHByaW50IGR1ZSB0byBuZXcgaW5pdGlhbENvbnRleHRzLiAKKyAgICAgICAgICAgLy8gdG8gYXZvaWQgaHVnZSBtZW1vcnkgZm9vdHByaW50IGR1ZSB0byBuZXcgaW5pdGlhbENvbnRleHRzLgogICAgICAgICAgICAvLyBSZW1lbWJlciBldmVyeSBuZXcgSW5pdGlhbENvbnRleHQgd2lsbCBpbml0aWFsaXplIGEgbmV3IE9SQgogICAgICAgICAgICAvLyB3aGljaCBpcyB2ZXJ5IGV4cGVuc2l2ZSBtZW1vcnkgd2lzZS4KIC8qUEctPgpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICAgICAgICAgZ2V0TWV0YURhdGEoIGhvbWUgKTsKICAgICAgICAgIH0KICovCi0gICAgICAgICAgIAorCiAgICAgICAgfSBjYXRjaCAoIEV4Y2VwdGlvbiBlICkgewogICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCApOwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggZSApOwpAQCAtNzMsMTYgKzczLDE2IEBACiAKIAogICAgIC8vIEluaXRpYWxpemUgdG8gdXNlIFNVTiBPTkUgQXBwU2VydmVyIDcgT1JCIGFuZCBVdGlsRGVsZWdhdGUKLSAgICAvLyBOT1RFOiBBbGwgdGhlc2UgYXJlIE9NRyBzdGFuZGFyZCBwcm9wZXJ0aWVzIHByb3ZpZGVkIHRvIHBsdWcgaW4gYW4gT1JCIAorICAgIC8vIE5PVEU6IEFsbCB0aGVzZSBhcmUgT01HIHN0YW5kYXJkIHByb3BlcnRpZXMgcHJvdmlkZWQgdG8gcGx1ZyBpbiBhbiBPUkIKICAgICAvLyB0byBKREsKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGluaXRpYWxpemVTeXN0ZW1Qcm9wZXJ0aWVzKCApIHsKICAgICAgICAgU3lzdGVtLnNldFByb3BlcnR5KCAib3JnLm9tZy5DT1JCQS5PUkJDbGFzcyIsCiAgICAgICAgICAgICAiY29tLnN1bi5jb3JiYS5lZS5pbXBsLm9yYi5PUkJJbXBsIiApOwotICAgICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoICJqYXZheC5ybWkuQ09SQkEuVXRpbENsYXNzIiwgCisgICAgICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSggImphdmF4LnJtaS5DT1JCQS5VdGlsQ2xhc3MiLAogICAgICAgICAgICAgImNvbS5zdW4uY29yYmEuZWUuaW1wbC5qYXZheC5ybWkuQ09SQkEuVXRpbCIgKTsKIAogICAgICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoICJqYXZheC5ybWkuQ09SQkEuU3R1YkNsYXNzIiwKLSAgICAgICAgICAgICJjb20uc3VuLmNvcmJhLmVlLmltcGwuamF2YXgucm1pLkNPUkJBLlN0dWJEZWxlZ2F0ZUltcGwiKTsgIAorICAgICAgICAgICAgImNvbS5zdW4uY29yYmEuZWUuaW1wbC5qYXZheC5ybWkuQ09SQkEuU3R1YkRlbGVnYXRlSW1wbCIpOwogICAgICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoICJqYXZheC5ybWkuQ09SQkEuUG9ydGFibGVSZW1vdGVDbGFzcyIsCiAgICAgICAgICAgICAiY29tLnN1bi5jb3JiYS5lZS5pbXBsLmphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdCIpOwogICAgIH0KQEAgLTkxLDI0ICs5MSwyNCBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBnZXRDb250ZXh0KCkKICAgICB7CiAgICAgICAgIFByb3BlcnRpZXMgX3Byb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKLSAgICAgICAgX3Byb3BzLnB1dChDb250ZXh0LklOSVRJQUxfQ09OVEVYVF9GQUNUT1JZLCAKKyAgICAgICAgX3Byb3BzLnB1dChDb250ZXh0LklOSVRJQUxfQ09OVEVYVF9GQUNUT1JZLAogICAgICAgICAgICAgIm9yZy5nbGFzc2Zpc2guam5kaS5jb3NuYW1pbmcuQ05DdHhGYWN0b3J5Iik7CiAgICAgICAgIF9wcm9wcy5wdXQoQ29udGV4dC5QUk9WSURFUl9VUkwsICJpaW9wOi8vYWNodW1iYTozNzAwIik7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIF9jb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KF9wcm9wcyk7CiAgICAgICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3QgLSAnbmV3IEluaXRpYWxDb250ZXh0KCknIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0IC0gJ25ldyBJbml0aWFsQ29udGV4dCgpJyIgKwogICAgICAgICAgICAgICAgICJ0aHJldyB0aGlzOiB0eXBlKCIgKyBuZS5nZXRDbGFzcygpLmdldE5hbWUoKSArCiAgICAgICAgICAgICAgICAgIiksIG1zZygiICsgbmUuZ2V0TWVzc2FnZSgpICsgIikiKTsKICAgICAgICAgICAgIFRocm93YWJsZSByb290Q2F1c2UgPSBuZS5nZXRSb290Q2F1c2UoKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdC5pbml0aWFsQ29udGV4dCAtIiArIAotICAgICAgICAgICAgICAgICJyb290IGNhdXNlIG9mIHByZXZpb3VzIGV4Y2VwdGlvbjogIiArICJ0eXBlKCIgKyAKLSAgICAgICAgICAgICAgICByb290Q2F1c2UuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiKSwgbXNnKCIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdC5pbml0aWFsQ29udGV4dCAtIiArCisgICAgICAgICAgICAgICAgInJvb3QgY2F1c2Ugb2YgcHJldmlvdXMgZXhjZXB0aW9uOiAiICsgInR5cGUoIiArCisgICAgICAgICAgICAgICAgcm9vdENhdXNlLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiksIG1zZygiICsKICAgICAgICAgICAgICAgICByb290Q2F1c2UuZ2V0TWVzc2FnZSgpICsgIikiKTsKICAgICAgICAgfQogICAgIH0KLSAKKwogCiAgICAgLy9Eb0xvb2t1cAogCkBAIC0xMTgsMTIgKzExOCwxMiBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgYm91bmRPYmogPSBfY29udGV4dC5sb29rdXAoaW5OYW1lKTsKICAgICAgICAgfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdCAtICdsb29rdXAoKSciICsgInRocmV3IHRoaXM6IHR5cGUoIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0IC0gJ2xvb2t1cCgpJyIgKyAidGhyZXcgdGhpczogdHlwZSgiICsKICAgICAgICAgICAgICAgICBuZS5nZXRDbGFzcygpLmdldE5hbWUoKSArICIpLCBtc2coIiArIG5lLmdldE1lc3NhZ2UoKSArICIpIik7CiAgICAgICAgICAgICBUaHJvd2FibGUgcm9vdENhdXNlID0gbmUuZ2V0Um9vdENhdXNlKCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3QubG9va3VwIC0iICsgCi0gICAgICAgICAgICAgICAgInJvb3QgY2F1c2Ugb2YgcHJldmlvdXMgZXhjZXB0aW9uOiAiICsgInR5cGUoIiArIAotICAgICAgICAgICAgICAgIHJvb3RDYXVzZS5nZXRDbGFzcygpLmdldE5hbWUoKSArICIpLCBtc2coIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0Lmxvb2t1cCAtIiArCisgICAgICAgICAgICAgICAgInJvb3QgY2F1c2Ugb2YgcHJldmlvdXMgZXhjZXB0aW9uOiAiICsgInR5cGUoIiArCisgICAgICAgICAgICAgICAgcm9vdENhdXNlLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiksIG1zZygiICsKICAgICAgICAgICAgICAgICByb290Q2F1c2UuZ2V0TWVzc2FnZSgpICsgIikiKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYm91bmRPYmo7CkBAIC0xNDYsMTEgKzE0NiwxMSBAQAogICAgICAgICBFSkJNZXRhRGF0YSBtZXRhPW51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBtZXRhID0gZm9ybWFsYm91bmRIb21lLmdldEVKQk1ldGFEYXRhKCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJtZXRhLmdldENsYXNzKCkuZ2V0TmFtZSgpID0gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAibWV0YS5nZXRDbGFzcygpLmdldE5hbWUoKSA9ICIgKwogICAgICAgICAgICAgICAgIG1ldGEuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gbmUpIHsKICAgICAgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0IC0gJ21ldGFkYXRhKCknIiArICJ0aHJldyB0aGlzOiB0eXBlKCIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdCAtICdtZXRhZGF0YSgpJyIgKyAidGhyZXcgdGhpczogdHlwZSgiICsKICAgICAgICAgICAgICAgICBuZS5nZXRDbGFzcygpLmdldE5hbWUoKSArICIpLCBtc2coIiArIG5lLmdldE1lc3NhZ2UoKSArICIpIik7CiAgICAgICAgIH0KICAgICAgICAgaWYobWV0YSAhPSBudWxsKQpAQCAtMTYxLDggKzE2MSw4IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHRlbXBDbGFzcyA9IG1ldGEuZ2V0SG9tZUludGVyZmFjZUNsYXNzKCk7CiAgICAgICAgICAgICB9IGNhdGNoKEVycm9yIGUpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIAotICAgICAgICAgICAgICAgICAgICAiZm91bmQgRUpCIEhvbWUsbWV0YS5nZXRIb21lSW50ZXJmYWNlQ2xhc3MoKSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKAorICAgICAgICAgICAgICAgICAgICAiZm91bmQgRUpCIEhvbWUsbWV0YS5nZXRIb21lSW50ZXJmYWNlQ2xhc3MoKSAiICsKICAgICAgICAgICAgICAgICAgICAgZS5nZXRNZXNzYWdlKCkgKTsKICAgICAgICAgICAgICAgICB0ZW1wQ2xhc3MgPSBudWxsOwogICAgICAgICAgICAgfQpAQCAtMTcxLDYgKzE3MSw2IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhvbWVJbnRlZmFjZSIrdGVtcENsYXNzKTsKICAgICAgICAgICAgIG1ldGEgPSBudWxsOwogICAgICAgICB9Ci0gICAgfSAKKyAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdGFuZGFsb25lY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdGFuZGFsb25lY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQppbmRleCBmZDc3NDMzLi42NWU0OGM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3RhbmRhbG9uZWNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0YW5kYWxvbmVjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zNCw1NiArMzQsNTYgQEAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCiAgICAgcHJpdmF0ZSBDb250ZXh0IGljOwotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImVqYi1zdHVicy1zdGFuZGFsb25lY2xpZW50Iik7CiAKLSAgICAgICAgLy8gU3RlcCAxOiAgSXQgaXMgaW1wb3J0YW50IHRvIGNhbGwgaW5pdGFpbGl6ZVN5c3RlbVByb3BlcnRpZXMgdG8gCi0gICAgICAgIC8vIGF2b2lkIHByb2JsZW1zIHdpdGggc3dpdGNoaW5nIE9SQnMgYmV0d2VlbiBKMlNFIGFuZCBBcHBTZXJ2ZXIuIAotICAgICAgICAvLyBUaGVzZSBhcmUgc3lzdGVtIHByb3BlcnRpZXMgdGhhdCBuZWVkcyB0byBiZSBydW4gb25jZSBvciB0aGVzZSAKKyAgICAgICAgLy8gU3RlcCAxOiAgSXQgaXMgaW1wb3J0YW50IHRvIGNhbGwgaW5pdGFpbGl6ZVN5c3RlbVByb3BlcnRpZXMgdG8KKyAgICAgICAgLy8gYXZvaWQgcHJvYmxlbXMgd2l0aCBzd2l0Y2hpbmcgT1JCcyBiZXR3ZWVuIEoyU0UgYW5kIEFwcFNlcnZlci4KKyAgICAgICAgLy8gVGhlc2UgYXJlIHN5c3RlbSBwcm9wZXJ0aWVzIHRoYXQgbmVlZHMgdG8gYmUgcnVuIG9uY2Ugb3IgdGhlc2UKICAgICAgICAgLy8gcHJvcGVydGllcyBjYW4gYmUgcGFzc2VkIHRocm91Z2ggLUQgZmxhZ3MKIC8vUEctPiAgICAgICAgaW5pdGlhbGl6ZVN5c3RlbVByb3BlcnRpZXMoICk7Ci0gICAgICAgIAorCiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItc3R1YnMtc3RhbmRhbG9uZWNsaWVudElEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgICAgICB0cnkgewotICAgICAgICAgICAgc2V0dXBJbml0aWFsQ29udGV4dCggImFjaHVtYmEiICwgIjM3MDAiICk7ICAKKyAgICAgICAgICAgIHNldHVwSW5pdGlhbENvbnRleHQoICJhY2h1bWJhIiAsICIzNzAwIiApOwogLy8gICAgICAgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIAogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oCi0gICAgICAgICAgICAgICAgICAic3RhbmRhbG9uZWNsaWVudC5DbGllbnQoKSwgRXhjZXB0aW9uIHdoZW4gc2V0dGluZyAiICsgCisgICAgICAgICAgICAgICAgICAic3RhbmRhbG9uZWNsaWVudC5DbGllbnQoKSwgRXhjZXB0aW9uIHdoZW4gc2V0dGluZyAiICsKICAgICAgICAgICAgICAgICAgICJ1cCB0aGUgSW5pdGlhbENvbnRleHQgZW52aXJvbm1lbnQiKTsKICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBlamIgcmVmICIpOwotICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJlamIvZWpiX3N0dWJzX2VqYmFwcF9IZWxsb0JlYW4iKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib2JqcmVmID0gIiArIG9ianJlZik7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSGVsbG9Ib21lICBob21lID0gKEhlbGxvSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cKICAgICAgICAgICAgICAgICAob2JqcmVmLCBIZWxsb0hvbWUuY2xhc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEhlbGxvIGhyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBpbnZva2UgbWV0aG9kIG9uIHRoZSBFSkIKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgZWpiIik7CiAgICAgICAgICAgICBoci5zYXlIZWxsbygpOwpAQCAtMTA4LDMzICsxMDgsMzMgQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic3RhbmRhbG9uZWNsaWVudCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIHNldHVwSW5pdGlhbENvbnRleHQoIFN0cmluZyBob3N0LCBTdHJpbmcgcG9ydCApIAotICAgIHRocm93cyBFeGNlcHRpb24gCisgICAgcHJpdmF0ZSB2b2lkIHNldHVwSW5pdGlhbENvbnRleHQoIFN0cmluZyBob3N0LCBTdHJpbmcgcG9ydCApCisgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgUHJvcGVydGllcyBlbnYgPSBuZXcgUHJvcGVydGllcygpOwogCiAgICAgICAgIGVudi5wdXQoIENvbnRleHQuSU5JVElBTF9DT05URVhUX0ZBQ1RPUlksICJjb20uc3VuLmVudGVycHJpc2UubmFtaW5nLlNlcmlhbEluaXRDb250ZXh0RmFjdG9yeSIpOwotICAgICAgICAKKwogICAgICAgICBlbnYucHV0KCBDb250ZXh0LlBST1ZJREVSX1VSTCwgImlpb3A6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKTsKIAogICAgICAgICBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCggZW52ICk7CiAgICAgfQogCiAgICAgLy8gSW5pdGlhbGl6ZSB0byB1c2UgU1VOIE9ORSBBcHBTZXJ2ZXIgNyBPUkIgYW5kIFV0aWxEZWxlZ2F0ZQotICAgIC8vIE5PVEU6IEFsbCB0aGVzZSBhcmUgT01HIHN0YW5kYXJkIHByb3BlcnRpZXMgcHJvdmlkZWQgdG8gcGx1ZyBpbiBhbiBPUkIgCisgICAgLy8gTk9URTogQWxsIHRoZXNlIGFyZSBPTUcgc3RhbmRhcmQgcHJvcGVydGllcyBwcm92aWRlZCB0byBwbHVnIGluIGFuIE9SQgogICAgIC8vIHRvIEpESwogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVN5c3RlbVByb3BlcnRpZXMoICkgewogICAgICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoICJvcmcub21nLkNPUkJBLk9SQkNsYXNzIiwKICAgICAgICAgICAgICAiY29tLnN1bi5jb3JiYS5lZS5pbXBsLm9yYi5PUkJJbXBsIiApOwotICAgICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoICJqYXZheC5ybWkuQ09SQkEuVXRpbENsYXNzIiwgCisgICAgICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSggImphdmF4LnJtaS5DT1JCQS5VdGlsQ2xhc3MiLAogICAgICAgICAgICAgICJjb20uc3VuLmNvcmJhLmVlLmltcGwuamF2YXgucm1pLkNPUkJBLlV0aWwiICk7CiAKICAgICAgICAgU3lzdGVtLnNldFByb3BlcnR5KCAiamF2YXgucm1pLkNPUkJBLlN0dWJDbGFzcyIsCi0gICAgICAgICAgICAgImNvbS5zdW4uY29yYmEuZWUuaW1wbC5qYXZheC5ybWkuQ09SQkEuU3R1YkRlbGVnYXRlSW1wbCIpOyAgCisgICAgICAgICAgICAgImNvbS5zdW4uY29yYmEuZWUuaW1wbC5qYXZheC5ybWkuQ09SQkEuU3R1YkRlbGVnYXRlSW1wbCIpOwogICAgICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoICJqYXZheC5ybWkuQ09SQkEuUG9ydGFibGVSZW1vdGVDbGFzcyIsCiAgICAgICAgICAgICAgImNvbS5zdW4uY29yYmEuZWUuaW1wbC5qYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QiKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3RhbmRhbG9uZWNsaWVudC9jbGllbnQvU2ltcGxlQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3RhbmRhbG9uZWNsaWVudC9jbGllbnQvU2ltcGxlQ2xpZW50LmphdmEKaW5kZXggMmIzYTQwYy4uM2VhMDdjMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0YW5kYWxvbmVjbGllbnQvY2xpZW50L1NpbXBsZUNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdGFuZGFsb25lY2xpZW50L2NsaWVudC9TaW1wbGVDbGllbnQuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiBwdWJsaWMgY2xhc3MgU2ltcGxlQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtNDcsOCArNDcsOCBAQAogICAgICAgICB9CiAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1zdHVicy1zdGFuZGFsb25lY2xpZW50Iik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHJpdmF0ZSBTdHJpbmcgam5kaU5hbWU7CiAgICAgcHJpdmF0ZSBTdHJpbmcgcHJvcHNGaWxlTmFtZTsKIApAQCAtNTgsNyArNTgsNyBAQAogCiAgICAgICAgIGlmKCAoYXJncy5sZW5ndGggPiAxKSAmJiAoYXJnc1sxXS5sZW5ndGgoKSA+IDApICkgewogICAgICAgICAgICAgcHJvcHNGaWxlTmFtZSA9IGFyZ3NbMV07Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzaW5nIHByb3BzIGZpbGUgIiArIHByb3BzRmlsZU5hbWUgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVXNpbmcgcHJvcHMgZmlsZSAiICsgcHJvcHNGaWxlTmFtZSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBmb3IgSW5pdGlhbENvbnRleHQiKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVXNpbmcgbm8tYXJnIEluaXRpYWxDb250ZXh0Iik7CkBAIC03NSw5ICs3NSw5IEBACiAgICAgICAgICAgICBQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKICAgICAgICAgICAgIEZpbGVJbnB1dFN0cmVhbSBmaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKHByb3BzRmlsZU5hbWUpOwogICAgICAgICAgICAgcHJvcHMubG9hZChmaXMpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzaW5nIHByb3BzID0gIiArIHByb3BzKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVc2luZyBwcm9wcyA9ICIgKyBwcm9wcyk7CiAgICAgICAgICAgICBpYyA9IG5ldyBJbml0aWFsQ29udGV4dChwcm9wcyk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaWMgPSAiICsgaWMpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImljID0gIiArIGljKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBpYzsKQEAgLTg2LDQ3ICs4Niw0NyBAQAogICAgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBDb250ZXh0IGljID0gZ2V0Q29udGV4dCgpOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgZ2xvYmFsIGpuZGkgbmFtZSA9ICIgKyBqbmRpTmFtZSk7Ci0gICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lciAKKyAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoam5kaU5hbWUpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9ianJlZiA9ICIgKyBvYmpyZWYpOwogICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKLSAgICAgICAgCisKICAgICAgICAgSGVsbG9Ib21lICBob21lID0gKEhlbGxvSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cKICAgICAgICAgICAgIChvYmpyZWYsIEhlbGxvSG9tZS5jbGFzcyk7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7Ci0gICAgICAgIAorCiAgICAgICAgIEhlbGxvIGhyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIGludm9rZSBtZXRob2Qgb24gdGhlIEVKQgogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIGVqYiIpOwogICAgICAgICBoci5zYXlIZWxsbygpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN1Y2Nlc3NmdWxseSBpbnZva2VkIGVqYiIpOwotICAgICAgICAKLSAgICAgICAgRUpCTWV0YURhdGEgbWQgPSBob21lLmdldEVKQk1ldGFEYXRhKCk7ICAgICAgICAgICAgCisKKyAgICAgICAgRUpCTWV0YURhdGEgbWQgPSBob21lLmdldEVKQk1ldGFEYXRhKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IEVKQiBtZXRhIGRhdGEgPSAiICsgbWQpOwotICAgICAgICAKLSAgICAgICAgRUpCTWV0YURhdGEgbWQyID0gaG9tZS5nZXRFSkJNZXRhRGF0YSgpOyAgICAgICAgICAgIAorCisgICAgICAgIEVKQk1ldGFEYXRhIG1kMiA9IGhvbWUuZ2V0RUpCTWV0YURhdGEoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgRUpCIG1ldGEgZGF0YSBhZ2FpbiA9ICIgKyBtZDIpOwotICAgICAgICAKKwogICAgICAgICBIb21lSGFuZGxlIGhvbWVIYW5kbGUgPSBob21lLmdldEhvbWVIYW5kbGUoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgSG9tZSBIYW5kbGUiKTsKICAgICAgICAgSGVsbG9Ib21lIGhvbWUyID0gKEhlbGxvSG9tZSkgaG9tZUhhbmRsZS5nZXRFSkJIb21lKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29udmVydGVkIEhvbWUgSGFuZGxlIGJhY2sgdG8gSGVsbG9Ib21lIik7Ci0gICAgICAgIEVKQk1ldGFEYXRhIG1kMyA9IGhvbWUyLmdldEVKQk1ldGFEYXRhKCk7ICAgICAgICAgICAgCisgICAgICAgIEVKQk1ldGFEYXRhIG1kMyA9IGhvbWUyLmdldEVKQk1ldGFEYXRhKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IEVKQiBtZXRhIGRhdGEgYSAzcmQgdGltZSA9ICIgKyBtZDMpOwotICAgICAgICAKKwogICAgICAgICBIYW5kbGUgaGVsbG9IYW5kbGUgPSBoci5nZXRIYW5kbGUoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgaGVsbG8gSGFuZGxlIik7CiAgICAgICAgIEhlbGxvIGhlbGxvMiA9IChIZWxsbykgaGVsbG9IYW5kbGUuZ2V0RUpCT2JqZWN0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29udmVydGVkIEhlbGxvIEhhbmRsZSBiYWNrIHRvIEhlbGxvIik7CiAgICAgICAgIGhlbGxvMi5zYXlIZWxsbygpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN1Y2Nlc3NmdWxseSBpbnZva2VkIGVqYiBhZ2FpbiIpOwotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHViY291bnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHViY291bnQvYnVpbGQucHJvcGVydGllcwppbmRleCBiMzgwN2I5Li5hMmFlZmJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YmNvdW50L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0dWJjb3VudC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw5ICsxNSw5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItc3R1YnMtc3R1YmNvdW50LWVqYjEuamFyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iZWpiIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YmNvdW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHViY291bnQvYnVpbGQueG1sCmluZGV4IDUxY2U2NzMuLjQ0MDg0YjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHViY291bnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHViY291bnQvYnVpbGQueG1sCkBAIC0zNCwyOSArMzQsMjkgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgICAgIAorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJteWJ1aWxkIj4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImJ1aWxkbnVtIiB2YWx1ZT0iMSIvPgotICAgICAgICA8L2FudGNhbGw+ICAgICAgCisgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJteWJ1aWxkIj4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImJ1aWxkbnVtIiB2YWx1ZT0iMiIvPgotICAgICAgICA8L2FudGNhbGw+ICAgICAgCisgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJteWJ1aWxkIj4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImJ1aWxkbnVtIiB2YWx1ZT0iMyIvPgotICAgICAgICA8L2FudGNhbGw+ICAgICAgCisgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJteWJ1aWxkIj4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImJ1aWxkbnVtIiB2YWx1ZT0iNSIvPgotICAgICAgICA8L2FudGNhbGw+ICAgICAgCisgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJteWJ1aWxkIj4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImJ1aWxkbnVtIiB2YWx1ZT0iMTAiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgICAgIAorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9Im15YnVpbGQiID4KQEAgLTY4LDI4ICs2OCwyOCBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyJHtidWlsZG51bX0ueG1sIi8+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi5qYXIiCiAgICAgICAgICAgICAgICAgIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vZWpiLXN0dWJzLXN0dWJjb3VudCR7YnVpbGRudW19LWVqYi5qYXIiLz4KLTwvYW50Y2FsbD4gICAgICAgIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKzwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJteWRlcGxveSI+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJidWlsZG51bSIgdmFsdWU9IjEiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgICAgIAorICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibXlkZXBsb3kiPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0iYnVpbGRudW0iIHZhbHVlPSIyIi8+Ci0gICAgICAgIDwvYW50Y2FsbD4gICAgICAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9Im15ZGVwbG95Ij4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImJ1aWxkbnVtIiB2YWx1ZT0iMyIvPgotICAgICAgICA8L2FudGNhbGw+ICAgICAgCisgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJteWRlcGxveSI+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJidWlsZG51bSIgdmFsdWU9IjUiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgICAgIAorICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibXlkZXBsb3kiPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0iYnVpbGRudW0iIHZhbHVlPSIxMCIvPgotICAgICAgICA8L2FudGNhbGw+ICAgICAgCisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0ibXlkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0ibXlkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJlamItc3R1YnMtc3R1YmNvdW50JHtidWlsZG51bX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHViY291bnQvZGVzY3JpcHRvci9lamItamFyMi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YmNvdW50L2Rlc2NyaXB0b3IvZWpiLWphcjIueG1sCmluZGV4IGQzNDZhNjAuLjAxNGY0NzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHViY291bnQvZGVzY3JpcHRvci9lamItamFyMi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0dWJjb3VudC9kZXNjcmlwdG9yL2VqYi1qYXIyLnhtbApAQCAtNDQsNyArNDQsNyBAQAogICAgICAgPHNlY3VyaXR5LWlkZW50aXR5PgogICAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eS8+CiAgICAgICA8L3NlY3VyaXR5LWlkZW50aXR5PgotICAgIDwvc2Vzc2lvbj4gICAKKyAgICA8L3Nlc3Npb24+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KICAgPGFzc2VtYmx5LWRlc2NyaXB0b3I+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHViY291bnQvZWpiL0Zvb0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHViY291bnQvZWpiL0Zvb0JlYW4uamF2YQppbmRleCAxNDRkNDQ4Li5lZDJlOTIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YmNvdW50L2VqYi9Gb29CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0dWJjb3VudC9lamIvRm9vQmVhbi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMzIsMTQgKzMyLDE0IEBACiAgICAgcHVibGljIEZvb0JlYW4oKSB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CZWFuOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0JlYW46OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JdGhpcy5zYyA9IHNjOworICAgIHRoaXMuc2MgPSBzYzsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBzYXlGb28oKSAgeyAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBzYXlGb28oKSAgewogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHVic2VyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YnNlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGYzZWY0NDEuLjg4ODI0YTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHVic2VyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0dWJzZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjIgKzE1LDIyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItc3R1YnMtc3R1YnNlciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIuc3R1YnMuc3R1YnNlci5jbGllbnQuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YnNlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YnNlci9idWlsZC54bWwKaW5kZXggMzk5MGFlOC4uZjYwMjQ0YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0dWJzZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHVic2VyL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgICAgPGRlbGV0ZSBmaWxlPSJob21laGFuZGxlIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9ImZvb2hhbmRsZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMjYgKzQ4LDI2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywqKi8qRm9vLmNsYXNzLCoqLypGb29Ib21lLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgotCTwhLS0gdGVtcG9yYXJpbHkgY29tbWVudCBvdXQgdGVzdCB0aGF0IHJlY29uc3RpdHV0ZXMgaGFuZGxlIGZyb20gZmlsZS4gIAorICAgIDwhLS0gdGVtcG9yYXJpbHkgY29tbWVudCBvdXQgdGVzdCB0aGF0IHJlY29uc3RpdHV0ZXMgaGFuZGxlIGZyb20gZmlsZS4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5faGFuZGxlIi8+Ci0JLS0+CisgICAgLS0+CiAgICAgPC90YXJnZXQ+CiAKLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX2hhbmRsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSJoYW5kbGUiLz4KQEAgLTgwLDcgKzgwLDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlX25vaGFuZGxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtODgsMTcgKzg4LDE3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZV9oYW5kbGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+Ci0JIDxhcmcgbGluZT0iaGFuZGxlIi8+CisgICAgIDxhcmcgbGluZT0iaGFuZGxlIi8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0dWJzZXIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0dWJzZXIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDE1N2JiOGQuLjdiYTY3NmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHVic2VyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YnNlci9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMxLDE5ICszMSwxOSBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIT01FX0hBTkRMRV9GSUxFID0gImhvbWVoYW5kbGUiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGT09fSEFORExFX0ZJTEUgPSAiZm9vaGFuZGxlIjsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogCi0JU3lzdGVtLm91dC5wcmludGxuKCJjcCA9ICIgKyBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEuY2xhc3MucGF0aCIpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNwID0gIiArIFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5jbGFzcy5wYXRoIikpOwogCiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiYXJncy5sZW5ndGggPSAiICsgYXJncy5sZW5ndGgpOwotCWZvcihpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXJnICIgKyBpICsgIiA9ICIgKyBhcmdzWzBdKTsKLQl9Ci0JCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJhcmdzLmxlbmd0aCA9ICIgKyBhcmdzLmxlbmd0aCk7CisgICAgZm9yKGludCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhcmcgIiArIGkgKyAiID0gIiArIGFyZ3NbMF0pOworICAgIH0KKwogCiAgICAgICAgIGlmKCBhcmdzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamItc3R1YnMtc3R1YnNlcjIiKTsKQEAgLTU0LDM1ICs1NCwzNSBAQAogICAgICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1zdHVicy1zdHVic2VyMUlEIik7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgfSAgCi0gICAgCisKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9SZXN0YXJ0VGVzdCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vIHdoZW4gd2UgbG9va3VwIGEgRm9vSG9tZSAqYmVmb3JlKiBkZXNlcmlhbGl6aW5nIHRoZSBob21lIHJlZmVyZW5jZSwKICAgICAgICAgICAgIC8vIGV2ZXJ5dGhpbmcgd29ya3MKLQkgICAgLy8gQEBACisgICAgICAgIC8vIEBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZGRpbmcgbG9va3VwIGJlZm9yZSByZWNvbnN0aXR1dGlvbiAuLi4iKTsKICAgICAgICAgICAgIGxvb2t1cEhvbWUoKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdHRlbXB0aW5nIHRvIHJlY29uc3RydWN0IGZvbyBoYW5kbGUiKTsKLQkgICAgSGFuZGxlIGZoID0gKEhhbmRsZSkgcmVhZEZyb21GaWxlKEZPT19IQU5ETEVfRklMRSk7CisgICAgICAgIEhhbmRsZSBmaCA9IChIYW5kbGUpIHJlYWRGcm9tRmlsZShGT09fSEFORExFX0ZJTEUpOwogICAgICAgICAgICAgRm9vIGYgPSAoRm9vKSBmaC5nZXRFSkJPYmplY3QoKTsKLQkgICAgZi5jYWxsSGVsbG8oKTsKLQkgICAgCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigic3VjY2Vzc2Z1bGx5IGludm9rZWQgZm9vIHZpYSByZWNvbnNpdHV0ZWQgaGFuZGxlIik7CisgICAgICAgIGYuY2FsbEhlbGxvKCk7CisKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzdWNjZXNzZnVsbHkgaW52b2tlZCBmb28gdmlhIHJlY29uc2l0dXRlZCBoYW5kbGUiKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdHRlbXB0aW5nIHRvIHJlY29uc3RydWN0IGhvbWUgaGFuZGxlIGFzIGZpcnN0IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBvcGVyYXRpb24gaW4gY2xpZW50Iik7CiAgICAgICAgICAgICBIb21lSGFuZGxlIGhoID0gKEhvbWVIYW5kbGUpIHJlYWRGcm9tRmlsZShIT01FX0hBTkRMRV9GSUxFKTsKICAgICAgICAgICAgIGludm9rZSgoRm9vSG9tZSkgaGguZ2V0RUpCSG9tZSgpKTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN1Y2Nlc3NmdWxseSBpbnZva2VkIGVqYiB2aWEgcmVjb25zaXR1dGVkIGhvbWUiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzdWNjZXNzZnVsbHkgaW52b2tlZCBlamIgdmlhIHJlY29uc2l0dXRlZCBob21lIik7CiAKLQkgICAgCisKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgcmVzdGFydDIiLCBzdGF0LlBBU1MpOwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKQEAgLTk4LDEwICs5OCwxMCBAQAogCiAKICAgICAgICAgICAgIEZvb0hvbWUgIGhvbWUgPSBsb29rdXBIb21lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKLSAgICAgICAgICAgIAotCSAgIAorCisKIAogICAgICAgICAgICAgLy8gY3JlYXRlIGhvbWUgaGFuZGxlCiAgICAgICAgICAgICBIb21lSGFuZGxlIGhoID0gaG9tZS5nZXRIb21lSGFuZGxlKCk7CkBAIC0xMTIsMTIgKzExMiwxMiBAQAogICAgICAgICAgICAgRm9vIGYgPSBpbnZva2UoaG9tZSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN1Y2Nlc3NmdWxseSBpbnZva2VkIGVqYiB2aWEgcmVjb25zaXR1dGVkIGhvbWUiKTsKIAotCSAgICAvLyBjcmVhdGUgU0ZTQiBpbnN0YW5jZSBoYW5kbGUgZmlsZQorICAgICAgICAvLyBjcmVhdGUgU0ZTQiBpbnN0YW5jZSBoYW5kbGUgZmlsZQogICAgICAgICAgICAgSGFuZGxlIGZoID0gZi5nZXRIYW5kbGUoKTsKICAgICAgICAgICAgIHNlcmlhbGl6ZVRvRmlsZShGT09fSEFORExFX0ZJTEUsIGZoKTsKICAgICAgICAgICAgIEhhbmRsZSBmaDIgPSAoSGFuZGxlKSByZWFkRnJvbUZpbGUoRk9PX0hBTkRMRV9GSUxFKTsKICAgICAgICAgICAgIEZvbyBmMiA9IChGb28pIGZoMi5nZXRFSkJPYmplY3QoKTsKLQkgICAgZjIuY2FsbEhlbGxvKCk7CisgICAgICAgIGYyLmNhbGxIZWxsbygpOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN1Y2Nlc3NmdWxseSBpbnZva2VkIGVqYiIpOwogCkBAIC0xMjcsMzcgKzEyNywzNyBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIHByaXZhdGUgRm9vSG9tZSBsb29rdXBIb21lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgZWpiIHJlZiAiKTsKLSAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiamF2YTpnbG9iYWwvZWpiLXN0dWJzLXN0dWJzZXJBcHAvZWpiLXN0dWJzLXN0dWJzZXItZWpiL0Zvb0JlYW4iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvYmpyZWYgPSAiICsgb2JqcmVmKTsKICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7Ci0gICAgICAgIAorCiAgICAgICAgIEZvb0hvbWUgIGhvbWUgPSAoRm9vSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cKICAgICAgICAgICAgIChvYmpyZWYsIEZvb0hvbWUuY2xhc3MpOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwogCiAgICAgICAgIHJldHVybiBob21lOwogICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgcHJpdmF0ZSBGb28gaW52b2tlKEZvb0hvbWUgZm9vSG9tZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgRm9vIGYgPSBmb29Ib21lLmNyZWF0ZSgpOwogICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gaW52b2tlIG1ldGhvZCBvbiB0aGUgRUpCCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgZWpiIik7CiAgICAgICAgIGYuY2FsbEhlbGxvKCk7CiAKLQlyZXR1cm4gZjsKKyAgICByZXR1cm4gZjsKIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0dWJzZXIvZWpiL0Zvb0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHVic2VyL2VqYi9Gb29CZWFuLmphdmEKaW5kZXggMjIxNDNmOS4uYjcwYTA3NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0dWJzZXIvZWpiL0Zvb0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YnNlci9lamIvRm9vQmVhbi5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgamF2YS51dGlsLkRhdGU7CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMzYsMjAgKzM2LDIwIEBACiAgICAgcHVibGljIEZvb0JlYW4oKSB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CZWFuOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0JlYW46OmVqYkNyZWF0ZSAhISIpOwogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBlamIgcmVmICIpOwotICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9oZWxsbyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvYmpyZWYgPSAiICsgb2JqcmVmKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBoZWxsb0hvbWUgPSAoSGVsbG9Ib21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdwogICAgICAgICAgICAgICAgIChvYmpyZWYsIEhlbGxvSG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKIAogICAgICAgICAgICAgaGVsbG8gPSBoZWxsb0hvbWUuY3JlYXRlKCk7CkBAIC02NCwxNCArNjQsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCXRoaXMuc2MgPSBzYzsKKyAgICB0aGlzLnNjID0gc2M7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgY2FsbEhlbGxvKCkgIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBGb29CZWFuOjpjYWxsSGVsbG8oKSIpOwogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIGhlbGxvLnNheUhlbGxvKCk7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic3VjY2Vzc2Z1bGx5IGludm9rZWQgZWpiIik7CkBAIC04NCw3ICs4NCw3IEBACiAgICAgICAgICAgICB0aHJvdyBpc2U7CiAgICAgICAgIH0KIAotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHVic2VyL2VqYi9IZWxsb0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHVic2VyL2VqYi9IZWxsb0JlYW4uamF2YQppbmRleCA4NzEzZWJhLi4wM2Q2Yzg2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YnNlci9lamIvSGVsbG9CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0dWJzZXIvZWpiL0hlbGxvQmVhbi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMzEsMTEgKzMxLDExIEBACiAgICAgcHVibGljIEhlbGxvQmVhbigpIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JdGhpcy5zYyA9IHNjOworICAgIHRoaXMuc2MgPSBzYzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzYXlIZWxsbygpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy93ZWJjbGllbnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy93ZWJjbGllbnQvYnVpbGQucHJvcGVydGllcwppbmRleCA4NDE1ZDVlLi45YTI4MjU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvd2ViY2xpZW50L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3dlYmNsaWVudC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMyArMTUsMjMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1zdHVicy13ZWJjbGllbnQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvd2ViY2xpZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy93ZWJjbGllbnQvYnVpbGQueG1sCmluZGV4IDJjMGNkYjYuLmNiMGI4ZTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy93ZWJjbGllbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy93ZWJjbGllbnQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDYsMTYgKzQ2LDE2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InRydWUiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjUsMTAgKzY1LDEwIEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iJHtodHRwLmhvc3R9ICR7aHR0cC5wb3J0fSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOGZjMzQ5Mi4uODRjM2NjOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBob3N0OwogICAgIHByaXZhdGUgU3RyaW5nIHBvcnQ7CiAKQEAgLTM1LDIzICszNSwyMyBAQAogICAgICAgICBob3N0ID0gKCBhcmdzLmxlbmd0aCA+IDApID8gYXJnc1swXSA6ICJsb2NhbGhvc3QiOwogICAgICAgICBwb3J0ID0gKCBhcmdzLmxlbmd0aCA+IDEpID8gYXJnc1sxXSA6ICI0ODQ4IjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImVqYi1zdHVicy13ZWJjbGllbnQiKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1zdHVicy13ZWJjbGllbnRJRCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGVudiA9IG51bGw7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyAKKyAgICAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICAgICAgIi9lamItc3R1YnMtd2ViY2xpZW50L3NlcnZsZXQiOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyB3ZWJjbGllbnQgc2VydmxldCBhdCAiICsgdXJsKTsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKGNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmNvcnJlY3QgcmV0dXJuIGNvZGU6ICIgKyBjb2RlKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViY2xpZW50IG1haW4iLCBzdGF0LkZBSUwpOwpAQCAtNjMsMTUgKzYzLDE1IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViY2xpZW50IG1haW4iLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHByaXZhdGUgaW50IGludm9rZVNlcnZsZXQoU3RyaW5nIHVybCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAKKwogICAgICAgICBVUkwgdSA9IG5ldyBVUkwodXJsKTsKLSAgICAgICAgCisKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gYzEgPSAoSHR0cFVSTENvbm5lY3Rpb24pdS5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBpbnQgY29kZSA9IGMxLmdldFJlc3BvbnNlQ29kZSgpOwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7CkBAIC04NCw2ICs4NCw2IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy93ZWJjbGllbnQvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3dlYmNsaWVudC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggN2QzNjg1NS4uYjI4ODc4ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3dlYmNsaWVudC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3dlYmNsaWVudC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8aG9tZT5jb20uc3VuLnMxYXNkZXYuZWpiLnN0dWJzLmVqYmFwcC5IZWxsb0hvbWU8L2hvbWU+CiAgICAgPHJlbW90ZT5jb20uc3VuLnMxYXNkZXYuZWpiLnN0dWJzLmVqYmFwcC5IZWxsbzwvcmVtb3RlPgogICA8L2VqYi1yZWY+Ci08IS0tIAorPCEtLQogIDxlamItcmVmPgogICAgIDxlamItcmVmLW5hbWU+ZWpiL2R1bW15bWVqYjwvZWpiLXJlZi1uYW1lPgogICAgIDxlamItcmVmLXR5cGU+U2Vzc2lvbjwvZWpiLXJlZi10eXBlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3dlYmNsaWVudC9zZXJ2bGV0L1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy93ZWJjbGllbnQvc2VydmxldC9TZXJ2bGV0LmphdmEKaW5kZXggYWY5ZWJiMy4uMDVkZmZlYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3dlYmNsaWVudC9zZXJ2bGV0L1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvd2ViY2xpZW50L3NlcnZsZXQvU2VydmxldC5qYXZhCkBAIC0yOSwyOSArMjksMjkgQEAKIC8vaW1wb3J0IGphdmF4Lm1hbmFnZW1lbnQuajJlZS5NYW5hZ2VtZW50OwogCiBwdWJsaWMgY2xhc3MgU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICAKKwogCiAgICAgcHVibGljIHZvaWQgIGluaXQoIFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiB3ZWJjbGllbnQ6OnNlcnZsZXQuLi4gaW5pdCgpIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VydmljZSAoIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEgLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3AgKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAgICAgICAgICAgICAgICAKKwogICAgICAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTa2lwcGluZyBtZWpiIHRlc3QgZm9yIG5vdy4gIE5FRUQgVE8gUkVFTkFCTEUiKTsKLQkgICAgLy8gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgRHVtbXlNRUpCQmVhbiIpOworICAgICAgICAvLyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBEdW1teU1FSkJCZWFuIik7CiAKLQkgICAgLyogVE9ETyByZWVuYWJsZSBvbmNlIGphdmF4Lm1hbmFnZW1lbnQgY2xhc3NlcyBhcmUgYXZhaWxhYmxlCisgICAgICAgIC8qIFRPRE8gcmVlbmFibGUgb25jZSBqYXZheC5tYW5hZ2VtZW50IGNsYXNzZXMgYXJlIGF2YWlsYWJsZQogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvZHVtbXltZWpiIik7Ci0gICAgICAgICAgICBNYW5hZ2VtZW50SG9tZSBtSG9tZSA9IChNYW5hZ2VtZW50SG9tZSkgCisgICAgICAgICAgICBNYW5hZ2VtZW50SG9tZSBtSG9tZSA9IChNYW5hZ2VtZW50SG9tZSkKICAgICAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBNYW5hZ2VtZW50SG9tZS5jbGFzcyk7CiAgICAgICAgICAgICBNYW5hZ2VtZW50IGR1bW15TWVqYiA9IG1Ib21lLmNyZWF0ZSgpOwogCkBAIC01OSwyMiArNTksMjIgQEAKICAgICAgICAgICAgIGR1bW15TWVqYi5nZXRNQmVhbkNvdW50KCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImR1bW15IG1lamIgdGVzdCBzdWNjZXNzZnVsIik7CiAKLQkgICAgKi8KKyAgICAgICAgKi8KIAogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgZWpiIHJlZiAiKTsKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lciAKLQkgICAgT2JqZWN0IG9ianJlZjIgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2hlbGxvIik7CisgICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKKyAgICAgICAgT2JqZWN0IG9ianJlZjIgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2hlbGxvIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9ianJlZiA9ICIgKyBvYmpyZWYyKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsb0hvbWUgIGhvbWUgPSAoSGVsbG9Ib21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdwogICAgICAgICAgICAgICAgIChvYmpyZWYyLCBIZWxsb0hvbWUuY2xhc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEhlbGxvIGhyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBpbnZva2UgbWV0aG9kIG9uIHRoZSBFSkIKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgZWpiIik7CiAgICAgICAgICAgICBoci5zYXlIZWxsbygpOwpAQCAtODMsMjIgKzgzLDIyIEBACiAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8SFRNTD4gPEhFQUQ+IDxUSVRMRT4gSk1TIFNlcnZsZXQgT3V0cHV0IDwvVElUTEU+IDwvSEVBRD4gPEJPRFkgQkdDT0xPUj13aGl0ZT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Q0VOVEVSPiA8Rk9OVCBzaXplPSsxIENPTE9SPWJsdWU+RGF0YWJhc2VTZXJ2ZWx0IDo6IEFsbCBpbmZvcm1hdGlvbiBJIGNhbiBnaXZlIDwvRk9OVD4gPC9DRU5URVI+IDxwPiAiICk7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IENvbnRleHQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0Q29udGV4dFBhdGgoKSArICI8YnI+IiApOyAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gU2VydmxldCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRTZXJ2bGV0UGF0aCgpICsgIjxicj4iICk7IAotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBQYXRoIEluZm8gOiAgPC9GT05UPiAiICsgcmVxLmdldFBhdGhJbmZvKCkgKyAiPGJyPiIgKTsgCisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IENvbnRleHQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0Q29udGV4dFBhdGgoKSArICI8YnI+IiApOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBTZXJ2bGV0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldFNlcnZsZXRQYXRoKCkgKyAiPGJyPiIgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gUGF0aCBJbmZvIDogIDwvRk9OVD4gIiArIHJlcS5nZXRQYXRoSW5mbygpICsgIjxicj4iICk7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9CT0RZPiA8L0hUTUw+ICIpOwotICAgICAgICAgICAgCisKICAgICAgICAgfWNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ3ZWJjbGllbnQgc2VydmxldCB0ZXN0IGZhaWxlZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZXgpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgfQogCi0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkICBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIHdlYmNsaWVudDo6c2VydmxldCBkZXN0cm95Iik7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGVzdHMvY2FjaGUvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGVzdHMvY2FjaGUvQ2xpZW50LmphdmEKaW5kZXggNTA2MjEzZS4uNzkwYzViNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Rlc3RzL2NhY2hlL0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90ZXN0cy9jYWNoZS9DbGllbnQuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIFN0cmluZyBjYWNoZU5hbWU7IAorICAgIFN0cmluZyBjYWNoZU5hbWU7CiAgICAgaW50ICAgIGNhY2hlU2l6ZSwgcmVzaXplUXVhbnRpdHk7CiAgICAgbG9uZyAgIGlkbGVUaW1lb3V0OyAvLyBpZGxlVGltZW91dCB2YWx1ZSBpbiBtaWxsaXNlY29uZHMKICAgICBmbG9hdCAgbG9hZEZhY3RvcjsKQEAgLTY5LDExICs2OSwxMSBAQAogICAgICAgICAgICAgY3JlYXRlT2JqZWN0cygpOwogICAgICAgICAgICAgYWRkQ2FjaGVFbnRyaWVzKCk7CiAgICAgICAgICAgICBpZiAoIGRlYnVnICkKLSAgICAgICAgICAgICAgICBkaXNwbGF5Q2FjaGVFbnRyaWVzKCAiRGlzcGxheSBpdGVtcyBpbiBjYWNoZSBhZnRlciBhZGRpbmciICk7IAorICAgICAgICAgICAgICAgIGRpc3BsYXlDYWNoZUVudHJpZXMoICJEaXNwbGF5IGl0ZW1zIGluIGNhY2hlIGFmdGVyIGFkZGluZyIgKTsKIAogICAgICAgICAgICAgcmVtb3ZlQ2FjaGVFbnRyaWVzKCk7CiAgICAgICAgICAgICBpZiAoIGRlYnVnICkKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJUb3RhbCBpdGVtcyBpbiBjYWNoZSAoIiArIGNhY2hlTmFtZSArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlRvdGFsIGl0ZW1zIGluIGNhY2hlICgiICsgY2FjaGVOYW1lICsKICAgICAgICAgICAgICAgICAgICAgIikgYWZ0ZXIgcmVtb3ZlIGNhbGwgPSAiICsgZ2V0RW50cnlDb3VudCgpICk7CiAKICAgICAgICAgICAgIGFkZENhY2hlRW50cmllcygpOwpAQCAtOTksNyArOTksNyBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlxuXG5JbiBjcmVhdGVDYWNoZSBvZiBDYWNoZSgiICsgY2FjaGVOYW1lICsgIikiICk7CiAgICAgICAgICAgICBpZiAoIGNhY2hlU2l6ZSA8PSAwICYmIGlkbGVUaW1lb3V0IDw9IDAgKSB7CiAgICAgICAgICAgICAgICAgaWYgKCBkZWJ1ZyApCi0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlx0XHRDcmVhdGluZyBCYXNlQ2FjaGUgZm9yIGNhY2hlU2l6ZSA9ICIgKyBjYWNoZVNpemUgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiXHRcdENyZWF0aW5nIEJhc2VDYWNoZSBmb3IgY2FjaGVTaXplID0gIiArIGNhY2hlU2l6ZSArCiAgICAgICAgICAgICAgICAgICAgICAgICAiIDpyZXNpemVRdWFudGl0eSA9ICIgKyByZXNpemVRdWFudGl0eSArICIgOjpsb2FkRmFjdG9yID0gIiArIGxvYWRGYWN0b3IgKTsKICAgICAgICAgICAgICAgICBjYWNoZSA9IG5ldyBCYXNlQ2FjaGUoKTsKICAgICAgICAgICAgICAgICBjYWNoZS5pbml0KCBERUZBVUxUX0NBQ0hFX1NJWkUsIERFRkFVTFRfTE9BRF9GQUNUT1IsIG51bGwgKTsKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgICAgICAgICAgICAgIExydUNhY2hlIGxydSA9IG5ldyBMcnVDYWNoZSggREVGQVVMVF9DQUNIRV9TSVpFKTsKICAgICAgICAgICAgICAgICBjYWxjdWxhdGVMb2FkRmFjdG9yKCk7CiAgICAgICAgICAgICAgICAgaWYgKCBkZWJ1ZyApCi0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlx0XHRDcmVhdGluZyBMcnVDYWNoZSBmb3IgY2FjaGVTaXplID0gIiArIGNhY2hlU2l6ZSArIAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJcdFx0Q3JlYXRpbmcgTHJ1Q2FjaGUgZm9yIGNhY2hlU2l6ZSA9ICIgKyBjYWNoZVNpemUgKwogICAgICAgICAgICAgICAgICAgICAgICAgIiA6cmVzaXplUXVhbnRpdHkgPSAiICsgcmVzaXplUXVhbnRpdHkgKyAiIDo6bG9hZEZhY3RvciA9ICIgKyBsb2FkRmFjdG9yICk7CiAgICAgICAgICAgICAgICAgbHJ1LmluaXQoIGNhY2hlU2l6ZSwgaWRsZVRpbWVvdXQsIGxvYWRGYWN0b3IsIG51bGwgKTsKICAgICAgICAgICAgICAgICBjYWNoZSA9IGxydTsKQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgICAgICBmb3IoIGludCBpID0gMDsgaSA8IE1BWF9URVNUX0VOVFJJRVM7IGkrKyApIHsKICAgICAgICAgICAgIGR1bW15c1tpXSA9IG5ldyBEdW1teU9iamVjdCggaSApOwogICAgICAgICB9Ci0gICAgfSAvL2NyZWF0ZU9iamVjdHMoKSAKKyAgICB9IC8vY3JlYXRlT2JqZWN0cygpCiAKICAgICBwcml2YXRlIHZvaWQgYWRkQ2FjaGVFbnRyaWVzKCkgewogICAgICAgICBPYmplY3Qgb2JqOwpAQCAtMTc2LDEzICsxNzYsMTMgQEAKICAgICAgICAgfQogICAgIH0gLy9EdW1teU9iamVjdHt9CiAKLSAgICBjbGFzcyBFeHBpcmVkSXRlbVRhc2sgCisgICAgY2xhc3MgRXhwaXJlZEl0ZW1UYXNrCiAgICAgICAgIGV4dGVuZHMgamF2YS51dGlsLlRpbWVyVGFzayB7Ci0gICAgICAgIAorCiAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgIGNhY2hlLnRyaW1FeHBpcmVkRW50cmllcyggcmVzaXplUXVhbnRpdHkgKTsgCisgICAgICAgICAgICBjYWNoZS50cmltRXhwaXJlZEVudHJpZXMoIHJlc2l6ZVF1YW50aXR5ICk7CiAgICAgICAgIH0KLSAgICB9IC8vRXhwaXJlZEl0ZW1UYXNrIAorICAgIH0gLy9FeHBpcmVkSXRlbVRhc2sKIAogCiAKQEAgLTI2NSwyMiArMjY1LDIyIEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIGRlYnVnICkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICggCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKAogICAgICAgICAgICAgICAgICJcblxuTGlzdCBhbGwgdGhlIGl0ZW1zIGluIGFsbCB0aGUgY2FjaGVzIHRvIGVuc3VyZSB0aGF0IHRoZSBpZGxlIHRpbWVvdXQgd29ya3MgY29ycmVjdGx5IiApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoICJcdFx0IFRvdGFsIGl0ZW1zIGluIGNhY2hlIChjMCkgPSAiICsgYzAuZ2V0RW50cnlDb3VudCgpICk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCAiXHRcdCBUb3RhbCBpdGVtcyBpbiBjYWNoZSAoYzEpID0gIiArIGMxLmdldEVudHJ5Q291bnQoKSApOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICggIlx0XHQgVG90YWwgaXRlbXMgaW4gY2FjaGUgKGMyKSA9ICIgKyBjMi5nZXRFbnRyeUNvdW50KCkgKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoICJcdFx0IFRvdGFsIGl0ZW1zIGluIGNhY2hlIChjMykgPSAiICsgYzMuZ2V0RW50cnlDb3VudCgpICk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCAiXHRcdCBUb3RhbCBpdGVtcyBpbiBjYWNoZSAoYzQpID0gIiArIGM0LmdldEVudHJ5Q291bnQoKSApOwogCi0gICAgICAgICAgICBjMC5kaXNwbGF5Q2FjaGVFbnRyaWVzKCAiTGlzdCBpdGVtcyBpbiBjYWNoZSBhZnRlciB0aW1lb3V0ICIgKTsgCi0gICAgICAgICAgICBjMS5kaXNwbGF5Q2FjaGVFbnRyaWVzKCAiTGlzdCBpdGVtcyBpbiBjYWNoZSBhZnRlciB0aW1lb3V0ICIgKTsgCi0gICAgICAgICAgICBjMi5kaXNwbGF5Q2FjaGVFbnRyaWVzKCAiTGlzdCBpdGVtcyBpbiBjYWNoZSBhZnRlciB0aW1lb3V0ICIgKTsgCi0gICAgICAgICAgICBjMy5kaXNwbGF5Q2FjaGVFbnRyaWVzKCAiTGlzdCBpdGVtcyBpbiBjYWNoZSBhZnRlciB0aW1lb3V0ICIgKTsgCi0gICAgICAgICAgICBjNC5kaXNwbGF5Q2FjaGVFbnRyaWVzKCAiTGlzdCBpdGVtcyBpbiBjYWNoZSBhZnRlciB0aW1lb3V0ICIgKTsgCisgICAgICAgICAgICBjMC5kaXNwbGF5Q2FjaGVFbnRyaWVzKCAiTGlzdCBpdGVtcyBpbiBjYWNoZSBhZnRlciB0aW1lb3V0ICIgKTsKKyAgICAgICAgICAgIGMxLmRpc3BsYXlDYWNoZUVudHJpZXMoICJMaXN0IGl0ZW1zIGluIGNhY2hlIGFmdGVyIHRpbWVvdXQgIiApOworICAgICAgICAgICAgYzIuZGlzcGxheUNhY2hlRW50cmllcyggIkxpc3QgaXRlbXMgaW4gY2FjaGUgYWZ0ZXIgdGltZW91dCAiICk7CisgICAgICAgICAgICBjMy5kaXNwbGF5Q2FjaGVFbnRyaWVzKCAiTGlzdCBpdGVtcyBpbiBjYWNoZSBhZnRlciB0aW1lb3V0ICIgKTsKKyAgICAgICAgICAgIGM0LmRpc3BsYXlDYWNoZUVudHJpZXMoICJMaXN0IGl0ZW1zIGluIGNhY2hlIGFmdGVyIHRpbWVvdXQgIiApOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHN1Y2Nlc3MgPSAwOwogICAgICAgICBmYWlsdXJlID0gMDsKIApAQCAtMzE4LDcgKzMxOCw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoICJcbkFjdHVhbCAgIGZhaWx1cmUgY291bnQgPSAiICArIGZhaWx1cmUgKTsKIAogICAgICAgICB0aW1lci5jYW5jZWwoKTsKLSAgICAgICAgCisKICAgICB9IC8vbWFpbigpCiAKIH0gLy9DbGllbnQge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvYnVpbGQueG1sCmluZGV4IDZiZGE0OWUuLmU4ODFiMWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL2J1aWxkLnhtbApAQCAtNjEsMTYgKzYxLDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi10aW1lciB0ZXN0cykKKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi10aW1lciB0ZXN0cykKIAotCQkJYW50IG1kYnRpbWVyIChFeGVjdXRlcyB0aGUgZWpiLXRpbWVyIG1kYnRpbWVyCisgICAgICAgICAgICBhbnQgbWRidGltZXIgKEV4ZWN1dGVzIHRoZSBlamItdGltZXIgbWRidGltZXIKIAotCQkJYW50IHNlc3Npb250aW1lciAoRXhlY3V0ZXMgdGhlIGVqYi10aW1lciBzZXNzaW9udGltZXIgdGVzdCkKLQkJCWFudCB0aW1lcnRlc3RzIChFeGVjdXRlcyB0aGUgZWpiLXRpbWVyIHRpbWVydGVzdHMgdGVzdCkKLQkJCWFudCB0aW1lcnNlcmlhbGl6YXRpb24gKEV4ZWN1dGVzIHRoZSBlamItdGltZXIgc2VyaWFsaXphdGlvbiB0ZXN0KQorICAgICAgICAgICAgYW50IHNlc3Npb250aW1lciAoRXhlY3V0ZXMgdGhlIGVqYi10aW1lciBzZXNzaW9udGltZXIgdGVzdCkKKyAgICAgICAgICAgIGFudCB0aW1lcnRlc3RzIChFeGVjdXRlcyB0aGUgZWpiLXRpbWVyIHRpbWVydGVzdHMgdGVzdCkKKyAgICAgICAgICAgIGFudCB0aW1lcnNlcmlhbGl6YXRpb24gKEV4ZWN1dGVzIHRoZSBlamItdGltZXIgc2VyaWFsaXphdGlvbiB0ZXN0KQogCi0JPC9lY2hvPgorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9tZGJ0aW1lci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL21kYnRpbWVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODA0Yzc0Zi4uMzE4MTZhNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL21kYnRpbWVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL21kYnRpbWVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXRpbWVyLW1kYnRpbWVyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvbWRidGltZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL21kYnRpbWVyL2J1aWxkLnhtbAppbmRleCA0ZDYyYzljLi5hNTlhMDY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvbWRidGltZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9tZGJ0aW1lci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NSwxNCArNzUsMTQgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9tZGJ0aW1lci9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvbWRidGltZXIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDZkZWY0YTMuLmM1MzJkYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9tZGJ0aW1lci9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL21kYnRpbWVyL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogCiAgICAgcHJpdmF0ZSBpbnQgbnVtTWVzc2FnZXMgPSAyOwogICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewotICAgICAgICAKKwogICAgICAgICBpZiggYXJncy5sZW5ndGggPT0gMSApIHsKICAgICAgICAgICAgIG51bU1lc3NhZ2VzID0gbmV3IEludGVnZXIoYXJnc1swXSkuaW50VmFsdWUoKTsKICAgICAgICAgfQpAQCAtNjcsMjAgKzY3LDIwIEBACiAKICAgICBwdWJsaWMgdm9pZCBzZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgIAotICAgICAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHF1ZXVlQ29uRmFjdG9yeSA9IAorCisgICAgICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcXVldWVDb25GYWN0b3J5ID0KICAgICAgICAgICAgIChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KSBjb250ZXh0Lmxvb2t1cAogICAgICAgICAgICAgKCJqYXZhOmNvbXAvZW52L0Zvb0NGIik7CiAKICAgICAgICAgcXVldWVDb24gPSBxdWV1ZUNvbkZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7CiAKICAgICAgICAgcXVldWVTZXNzaW9uID0gcXVldWVDb24uY3JlYXRlUXVldWVTZXNzaW9uCi0gICAgICAgICAgICAoZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7IAorICAgICAgICAgICAgKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwogCiAgICAgICAgIHRhcmdldERlc3QgPSAoamFrYXJ0YS5qbXMuUXVldWUpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9Nc2dCZWFuUXVldWUiKTsKIAogICAgICAgICAvLyBQcm9kdWNlciB3aWxsIGJlIHNwZWNpZmllZCB3aGVuIGFjdHVhbCBtc2cgaXMgc2VudC4KLSAgICAgICAgcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKHRhcmdldERlc3QpOyAgICAgICAgCisgICAgICAgIHF1ZXVlU2VuZGVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVNlbmRlcih0YXJnZXREZXN0KTsKIAogICAgICAgICBjbGllbnREZXN0ID0gKGpha2FydGEuam1zLlF1ZXVlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvQ2xpZW50UXVldWUiKTsKIApAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSAKKyAgICBwdWJsaWMgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKQogICAgICAgICB0aHJvd3MgSk1TRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIG1lc3NhZ2UgdG8gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBhdCB0aW1lICIgKyBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciBxdWV1ZSBtZXNzYWdlICIpOwogICAgICAgICBNZXNzYWdlIHJlY3ZkbWVzc2FnZSA9IHF1ZXVlUmVjZWl2ZXIucmVjZWl2ZSh0aW1lb3V0KTsKICAgICAgICAgaWYoIHJlY3ZkbWVzc2FnZSAhPSBudWxsICkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNlaXZlZCBtZXNzYWdlIDogIiArIHJlY3ZkbWVzc2FnZSArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNlaXZlZCBtZXNzYWdlIDogIiArIHJlY3ZkbWVzc2FnZSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBhdCAiICsgbmV3IERhdGUoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRpbWVvdXQgYWZ0ZXIgIiArIHRpbWVvdXQgKyAiIHNlY29uZHMiKTsKQEAgLTEzMSwxMSArMTMxLDExIEBACiAKICAgICAgICAgT2JqZWN0TWVzc2FnZSByZWN2TXNnMSA9IChPYmplY3RNZXNzYWdlKSByZWN2UXVldWVNc2coMjAwMDApOwogICAgICAgICBEYXRlIGNhbmNlbGxhdGlvbiA9IChEYXRlKSByZWN2TXNnMS5nZXRPYmplY3QoKTsKLSAgICAgICAgCisKICAgICAgICAgRGF0ZSBub3cgPSBuZXcgRGF0ZSgpOwotICAgICAgICAKKwogICAgICAgICAvLyB3YWl0IGZvciBtZXNzYWdlIGFmdGVyIHRpbWVyIGlzIGNhbmNlbGxlZCAocGx1cyBzb21lIGJ1ZmZlciB0aW1lKQotICAgICAgICBsb25nIHdhaXQgPSBub3cuYmVmb3JlKGNhbmNlbGxhdGlvbikgPyAKKyAgICAgICAgbG9uZyB3YWl0ID0gbm93LmJlZm9yZShjYW5jZWxsYXRpb24pID8KICAgICAgICAgICAgIChjYW5jZWxsYXRpb24uZ2V0VGltZSgpIC0gbm93LmdldFRpbWUoKSkgKyAzMDAwMCA6IDA7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZXIgd2lsbCBiZSBjYW5jZWxsZWQgYWZ0ZXIgIiArIGNhbmNlbGxhdGlvbik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgY2FuY2VsbGF0aW9uIG5vdGlmaWNhdGlvbiB1bnRpbCAiICsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9tZGJ0aW1lci9lamIvTWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9tZGJ0aW1lci9lamIvTWVzc2FnZUJlYW4uamF2YQppbmRleCBiYTg5NWVkLi4xNGU1ODllIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvbWRidGltZXIvZWpiL01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL21kYnRpbWVyL2VqYi9NZXNzYWdlQmVhbi5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiBpbXBvcnQgamF2YXgubmFtaW5nLio7CiBpbXBvcnQgamF2YS51dGlsLkRhdGU7CiAKLXB1YmxpYyBjbGFzcyBNZXNzYWdlQmVhbiAgCitwdWJsaWMgY2xhc3MgTWVzc2FnZUJlYW4KICAgICBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLCBNZXNzYWdlTGlzdGVuZXIsVGltZWRPYmplY3QgewogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIG1lc3NhZ2UgIiArIG1lc3NhZ2UpOwogICAgICAgICAgICAgICAgIHNlbmRlci5zZW5kKG1lc3NhZ2UpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWVzc2FnZSBzZW50Iik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgfQpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICAgICAgRGF0ZSBub3cgPSBuZXcgRGF0ZSgpOwogICAgICAgICAgICAgRGF0ZSBleHBpcmUgPSBuZXcgRGF0ZShub3cuZ2V0VGltZSgpICsgMjUwMDApOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBwZXJpb2RpYyB0aW1lciBhdCAiICsgbm93KTsKLSAgICAgICAgICAgIFRpbWVyIHQgPSBtZGMuZ2V0VGltZXJTZXJ2aWNlKCkuY3JlYXRlVGltZXIoMTAwMDAsIDEwMDAwLCAKKyAgICAgICAgICAgIFRpbWVyIHQgPSBtZGMuZ2V0VGltZXJTZXJ2aWNlKCkuY3JlYXRlVGltZXIoMTAwMDAsIDEwMDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmUpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaW1lciB3aWxsIGJlIGNhbmNlbGxlZCBvbiBmaXJzdCBleHBpcmF0aW9uIGFmdGVyICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyZSk7CkBAIC0xMDAsNyArMTAwLDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlICIgKyBvdXRNZXNzYWdlKTsKICAgICAgICAgICAgIHNlbmRlci5zZW5kKG91dE1lc3NhZ2UpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtZXNzYWdlIHNlbnQiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ290IGV4Y2VwdGlvbiBpbiBtZXNzYWdlIGJlYW4iKTsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0xMTcsMTYgKzExNywxNiBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYykgewotCXRoaXMubWRjID0gbWRjOwotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWVzc2FnZURyaXZlbkVKQjo6c2V0TWVzc2FnZURyaXZlbkNvbnRleHQgISEiKTsKKyAgICB0aGlzLm1kYyA9IG1kYzsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VEcml2ZW5FSkI6OnNldE1lc3NhZ2VEcml2ZW5Db250ZXh0ICEhIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBNZXNzYWdlRHJpdmVuRUpCOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VEcml2ZW5FSkI6OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VEcml2ZW5FSkI6OmVqYlJlbW92ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWVzc2FnZURyaXZlbkVKQjo6ZWpiUmVtb3ZlICEhIik7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvcmVzdG9yZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Jlc3RvcmUvYnVpbGQucHJvcGVydGllcwppbmRleCA4ODgzNmEyLi40YzMzYTYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvcmVzdG9yZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9yZXN0b3JlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXRpbWVyLXJlc3RvcmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9yZXN0b3JlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9yZXN0b3JlL2J1aWxkLnhtbAppbmRleCBjNmNjODJjLi5lNzI3Nzk4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvcmVzdG9yZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Jlc3RvcmUvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NywxNCArNDcsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03OCwxNCArNzgsMTQgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSJyZXN0b3JlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9yZXN0b3JlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9yZXN0b3JlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBmZTVjNWMwLi5mMDZhNmJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvcmVzdG9yZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Jlc3RvcmUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMSw5ICszMSw5IEBACiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3ROb3RSdW4gICAgPSAiVEVTVCBOT1QgUlVOIjsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdFBhc3NlZCAgICA9ICJURVNUIFBBU1NFRCI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RGYWlsZWQgICAgPSAiVEVTVCBGQUlMRUQiOwotICAgIAotICAgIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisKKworICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgU3RyaW5nIGpuZGlOYW1lID0gImVqYi9lamJfdGltZXJfc2Vzc2lvbnRpbWVyX1RpbWVyU2Vzc2lvbiI7CkBAIC01NSwxMiArNTUsMTIgQEAKIAogICAgICAgICBpZiggYXJncy5sZW5ndGggPT0gMSkgewogICAgICAgICAgICAgYWZ0ZXJSZXN0YXJ0ID0gYXJnc1swXS5lcXVhbHNJZ25vcmVDYXNlKCJyZXN0b3JlIik7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdCgpIHsKICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGtUZXN0UGFzc2VkOwotICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IG51bGw7IAorICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIFRpbWVyU2Vzc2lvbiByZW1vdGVPYmogPSBudWxsOwogCiAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9IGpuZGlOYW1lOwpAQCAtNjgsMTggKzY4LDE4IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgZWpiIHJlZiAiICsgZWpiTmFtZSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvaW5nIHRpbWVyIHRlc3QgZm9yICIgKyBqbmRpTmFtZSk7CiAKIAogICAgICAgICAgICAgamF2YS5sYW5nLk9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvIiArIGVqYk5hbWUpOwogCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLWVqYiBzdHViLS0tIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS1lamIgc3R1Yi0tLSIgKwogICAgICAgICAgICAgICAgIG9ianJlZi5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS1lamIgY2xhc3NuYW1lLS0tIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS1lamIgY2xhc3NuYW1lLS0tIiArCiAgICAgICAgICAgICAgICAgb2JqcmVmLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tVGltZXJTZXNzaW9uSG9tZS0tLSIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tVGltZXJTZXNzaW9uSG9tZS0tLSIgKwogICAgICAgICAgICAgICAgIFRpbWVyU2Vzc2lvbkhvbWUuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKIApAQCAtODcsNyArODcsNyBAQAogCiAgICAgICAgICAgICBUaW1lclNlc3Npb25Ib21lIGhvbWUgPSAoVGltZXJTZXNzaW9uSG9tZSkKICAgICAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBUaW1lclNlc3Npb25Ib21lLmNsYXNzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICByZW1vdGVPYmogPSBob21lLmNyZWF0ZSgpOwogICAgICAgICAgICAgU3RyaW5nIG90aGVyU2VydmVyMSA9ICJmb28iOwogCkBAIC05Niw1OSArOTYsNTkgQEAKICAgICAgICAgICAgICAgICB0ZXN0TmFtZSA9ICJhZnRlclJlc3RhcnQiOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWlncmF0aW5nIHRpbWVycyBmcm9tICIgKyBvdGhlclNlcnZlcjEpOwogICAgICAgICAgICAgICAgIHJlbW90ZU9iai5taWdyYXRlVGltZXJzRnJvbShvdGhlclNlcnZlcjEpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcmVtb3RlT2JqLmNyZWF0ZVRpbWVyKDUwMDAsIDAsICJ0aW1lcjEiKTsKICAgICAgICAgICAgICAgICByZW1vdGVPYmouY3JlYXRlVGltZXIoMzAwMDAsIDAsICJ0aW1lcjIiKTsKICAgICAgICAgICAgICAgICByZW1vdGVPYmouY3JlYXRlVGltZXIoNjAwMDAwMDAsIDAsICJ0aW1lcjMiKTsKICAgICAgICAgICAgICAgICByZW1vdGVPYmouY3JlYXRlVGltZXIoNTAwMCwgMTIwMDAsICJ0aW1lcjQiKTsKICAgICAgICAgICAgICAgICByZW1vdGVPYmouY3JlYXRlVGltZXIoNTAwMCwgMzAwMDAsICJ0aW1lcjUiKTsKLSAgICAgICAgICAgICAgICByZW1vdGVPYmouY3JlYXRlVGltZXIoNTAwMCwgMTAwMDAwMDAwLCAidGltZXI2Iik7ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZW1vdGVPYmouY3JlYXRlVGltZXIoNTAwMCwgMTAwMDAwMDAwLCAidGltZXI2Iik7CisKICAgICAgICAgICAgICAgICAvLyBzaW11bGF0ZSBjcmVhdGlvbiBvZiB0aW1lcnMgd2l0aGluIGFub3RoZXIgc2VydmVyCiAgICAgICAgICAgICAgICAgLy8gaW5zdGFuY2UuICBub25lIG9mIHRoZXNlIHNob3VsZCB0aW1lb3V0IHVudGlsIHdlCiAgICAgICAgICAgICAgICAgLy8gZG8gYSBtaWdyYXRpb24KLSAgICAgICAgICAgICAgICAKKwogCiAgICAgICAgICAgICAgICAgcmVtb3RlT2JqLmNyZWF0ZVRpbWVySW5PdGhlclNlcnZlcgogICAgICAgICAgICAgICAgICAgICAob3RoZXJTZXJ2ZXIxLCAib3RoZXJfdGltZXI3IiwKLSAgICAgICAgICAgICAgICAgICAgIDEwMDAsIDAsIAorICAgICAgICAgICAgICAgICAgICAgMTAwMCwgMCwKICAgICAgICAgICAgICAgICAgICAgICJvdGhlcl90aW1lcjciKTsKIAogICAgICAgICAgICAgICAgIHJlbW90ZU9iai5jcmVhdGVUaW1lckluT3RoZXJTZXJ2ZXIKICAgICAgICAgICAgICAgICAgICAgKG90aGVyU2VydmVyMSwgIm90aGVyX3RpbWVyOCIsCi0gICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMEwsIDAsIAotICAgICAgICAgICAgICAgICAgICAgIm90aGVyX3RpbWVyOCIpOyAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwTCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICJvdGhlcl90aW1lcjgiKTsKKwogICAgICAgICAgICAgICAgIHJlbW90ZU9iai5jcmVhdGVUaW1lckluT3RoZXJTZXJ2ZXIKICAgICAgICAgICAgICAgICAgICAgKG90aGVyU2VydmVyMSwgIm90aGVyX3RpbWVyOSIsCi0gICAgICAgICAgICAgICAgICAgICAxMDAwLCAxMDAwMDAwMDAwMEwsIAorICAgICAgICAgICAgICAgICAgICAgMTAwMCwgMTAwMDAwMDAwMDBMLAogICAgICAgICAgICAgICAgICAgICAgIm90aGVyX3RpbWVyOSIpOwogCiAKICAgICAgICAgICAgICAgICByZW1vdGVPYmouY3JlYXRlVGltZXJJbk90aGVyU2VydmVyCiAgICAgICAgICAgICAgICAgICAgIChvdGhlclNlcnZlcjEsICJvdGhlcl90aW1lcjEwIiwKLSAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMCwgMTAwMCwgCisgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAsIDEwMDAsCiAgICAgICAgICAgICAgICAgICAgICAib3RoZXJfdGltZXIxMCIpOwogCiAgICAgICAgICAgICAgICAgcmVtb3RlT2JqLmNyZWF0ZVRpbWVySW5PdGhlclNlcnZlcgogICAgICAgICAgICAgICAgICAgICAob3RoZXJTZXJ2ZXIxLCAib3RoZXJfdGltZXIxMSIsCi0gICAgICAgICAgICAgICAgICAgICAzMDAwMCwgMTAwMDAwMDAwLCAKKyAgICAgICAgICAgICAgICAgICAgIDMwMDAwLCAxMDAwMDAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAib3RoZXJfdGltZXIxMSIpOwogCiAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGEgY291cGxlIG9mIHRpbWVycyBmb3IgYW5vdGhlciBzaW11bGF0ZWQKICAgICAgICAgICAgICAgICAvLyBzZXJ2ZXIuICB3ZSB3aWxsIG5vdCBiZSBtaWdyYXRpbmcgdGhlc2UgdGltZXJzLCBzbwogICAgICAgICAgICAgICAgIC8vIGJ5IHZlcmlmeWluZyB0aGF0IHdlIGRvbid0IGdldCBub3RpZmljYXRpb25zIGZyb20gdGhlc2UKICAgICAgICAgICAgICAgICAvLyB0aW1lcnMgd2UgdGVzdCB0aGF0IHRoZSBtaWdyYXRpb24gb25seSBoYXBwZW5zIGZvcgotICAgICAgICAgICAgICAgIC8vIHRoZSBzcGVjaWZpZWQgc2VydmVyLiAgCisgICAgICAgICAgICAgICAgLy8gdGhlIHNwZWNpZmllZCBzZXJ2ZXIuCiAKICAgICAgICAgICAgICAgICByZW1vdGVPYmouY3JlYXRlVGltZXJJbk90aGVyU2VydmVyCiAgICAgICAgICAgICAgICAgICAgICgiYmFyIiwgImJhcl90aW1lcjEyIiwgMTAwMCwgMCwgImJhcl90aW1lcjEyIik7CiAgICAgICAgICAgICAgICAgcmVtb3RlT2JqLmNyZWF0ZVRpbWVySW5PdGhlclNlcnZlcgogICAgICAgICAgICAgICAgICAgICAoImJhciIsICJiYXJfdGltZXIxMyIsIDEwMDAsIDEwMDAsICJiYXJfdGltZXIxMyIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY0ZhY3RvcnkgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKICAgICAgICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL015UXVldWVDb25uZWN0aW9uRmFjdG9yeSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiIHFjRmFjdG9yeSA9ICIgKyBxY0ZhY3RvcnkpOwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgcXVldWUgPSAiICsgcXVldWUpOwogCiAgICAgICAgICAgICBjb25uZWN0aW9uID0gcWNGYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPSAKKyAgICAgICAgICAgIFF1ZXVlU2Vzc2lvbiBzZXNzaW9uID0KICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmNyZWF0ZVF1ZXVlU2Vzc2lvbihmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKICAgICAgICAgICAgIFF1ZXVlUmVjZWl2ZXIgcmVjZWl2ZXIgPSBzZXNzaW9uLmNyZWF0ZVJlY2VpdmVyKHF1ZXVlKTsKICAgICAgICAgICAgIGNvbm5lY3Rpb24uc3RhcnQoKTsKQEAgLTE2Nyw3ICsxNjcsNyBAQAogICAgICAgICAgICAgaWYoIGFmdGVyUmVzdGFydCApIHsKICAgICAgICAgICAgICAgICB0b1JlY2VpdmUuYWRkKCJ0aW1lcjIiKTsKICAgICAgICAgICAgICAgICB0b1JlY2VpdmUuYWRkKCJ0aW1lcjQiKTsKLSAgICAgICAgICAgICAgICB0b1JlY2VpdmUuYWRkKCJ0aW1lcjUiKTsgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHRvUmVjZWl2ZS5hZGQoInRpbWVyNSIpOwogCiAgICAgICAgICAgICAgICAgLy8gbWlncmF0ZWQgdGltZXJzCiAgICAgICAgICAgICAgICAgdG9SZWNlaXZlLmFkZCgib3RoZXJfdGltZXI3Iik7CkBAIC0xODEsMzcgKzE4MSwzNyBAQAogICAgICAgICAgICAgICAgIHRvUmVjZWl2ZS5hZGQoInRpbWVyNiIpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBsb25nIHdhaXRUaW1lID0gYWZ0ZXJSZXN0YXJ0ID8gCisgICAgICAgICAgICBsb25nIHdhaXRUaW1lID0gYWZ0ZXJSZXN0YXJ0ID8KICAgICAgICAgICAgICAgICA0MDAwMCA6IDEwMDAwOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB3aGlsZSh0cnVlKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciBtZXNzYWdlIik7CiAgICAgICAgICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gcmVjZWl2ZXIucmVjZWl2ZSh3YWl0VGltZSk7CiAgICAgICAgICAgICAgICAgVGV4dE1lc3NhZ2UgdGV4dE1zZyA9IChUZXh0TWVzc2FnZSltZXNzYWdlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICggKG1lc3NhZ2UgPT0gbnVsbCkgfHwgCisKKyAgICAgICAgICAgICAgICBpZiAoIChtZXNzYWdlID09IG51bGwpIHx8CiAgICAgICAgICAgICAgICAgICAgICAoISB0b1JlY2VpdmUuY29udGFpbnModGV4dE1zZy5nZXRUZXh0KCkpKSApIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiUmVjZWl2ZWQgYSBpbnZhbGlkIG1lc3NhZ2UgIiArIAorICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJSZWNlaXZlZCBhIGludmFsaWQgbWVzc2FnZSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICsgIiBUaW1lT3V0IGZhaWxlZCEhIik7Ci0gICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICByZWNlaXZlZC5hZGQodGV4dE1zZy5nZXRUZXh0KCkpOwogCi0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNlaXZlZCBNZXNzYWdlIDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgTWVzc2FnZSA6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0TXNnLmdldFRleHQoKSk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXNzYWdlcyByZWNlaXZlZCBzbyBmYXIgOiAiICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkKTsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXNzYWdlcyByZWNlaXZlZCBzbyBmYXIgOiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWQpOwogICAgICAgICAgICAgICAgIGlmKCByZWNlaXZlZC5lcXVhbHModG9SZWNlaXZlKSApIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgYWxsIGV4cGVjdGVkIG1lc3NhZ2VzIik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic2Vzc2lvbnRpbWVyICIgKyB0ZXN0TmFtZSwgc3RhdC5QQVNTKTsKIAogICAgICAgICAgICAgaWYoIGFmdGVyUmVzdGFydCApIHsKICAgICAgICAgICAgICAgICByZW1vdGVPYmouZGVsZXRlVGltZXJzKCk7Ci0gICAgICAgICAgICB9IAorICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWVyU2Vzc2lvbiA6ICIgKyB0ZXN0TmFtZSArICIgdGVzdCBmYWlsZWQiKTsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvcmVzdG9yZS9lamIvVGltZXJTZXNzaW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvcmVzdG9yZS9lamIvVGltZXJTZXNzaW9uLmphdmEKaW5kZXggYjY3Y2U5NS4uMTY1YTJhZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Jlc3RvcmUvZWpiL1RpbWVyU2Vzc2lvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9yZXN0b3JlL2VqYi9UaW1lclNlc3Npb24uamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAgICAgcHVibGljIHZvaWQgbWlncmF0ZVRpbWVyc0Zyb20oU3RyaW5nIG93bmVyKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIHZvaWQgY3JlYXRlVGltZXJJbk90aGVyU2VydmVyKFN0cmluZyBvd25lciwgU3RyaW5nIHRpbWVySWQsIAorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRpbWVySW5PdGhlclNlcnZlcihTdHJpbmcgb3duZXIsIFN0cmluZyB0aW1lcklkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGluaXRpYWxFeHBpcmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGludGVydmFsRHVyYXRpb24sIFN0cmluZyBpbmZvKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Jlc3RvcmUvZWpiL1RpbWVyU2Vzc2lvbkVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Jlc3RvcmUvZWpiL1RpbWVyU2Vzc2lvbkVKQi5qYXZhCmluZGV4IDlkNGIxYzcuLjFhODU2MTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9yZXN0b3JlL2VqYi9UaW1lclNlc3Npb25FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvcmVzdG9yZS9lamIvVGltZXJTZXNzaW9uRUpCLmphdmEKQEAgLTM4LDM1ICszOCwzNSBAQAogCiBpbXBvcnQgY29tLnN1bi5lamIuY29udGFpbmVycy5UaW1lckJlYW47CiAKLXB1YmxpYyBjbGFzcyBUaW1lclNlc3Npb25FSkIgaW1wbGVtZW50cyBUaW1lZE9iamVjdCwgU2Vzc2lvbkJlYW4gCitwdWJsaWMgY2xhc3MgVGltZXJTZXNzaW9uRUpCIGltcGxlbWVudHMgVGltZWRPYmplY3QsIFNlc3Npb25CZWFuCiB7CiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjb250ZXh0OwogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uIGNvbm5lY3Rpb247CiAgICAgcHJpdmF0ZSBRdWV1ZVNlc3Npb24gc2Vzc2lvbjsKICAgICBwcml2YXRlIFF1ZXVlIHF1ZXVlOwogICAgIHByaXZhdGUgUXVldWVTZW5kZXIgc2VuZGVyOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKICAgICAgICAgY29udGV4dCA9IHNjOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLy8gYnVzaW5lc3MgbWV0aG9kIHRvIGNyZWF0ZSBhIHRpbWVyCiAgICAgcHVibGljIFRpbWVySGFuZGxlIGNyZWF0ZVRpbWVyKGxvbmcgaW5pdGlhbERlbGF5LCBsb25nIGludGVydmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbXNnKSB7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgZ2V0TWVzc2FnZUNvbnRleHQiKTsKICAgICAgICAgICAgIGNvbnRleHQuZ2V0TWVzc2FnZUNvbnRleHQoKTsKICAgICAgICAgfSBjYXRjaChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaXNlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdldE1lc3NhZ2VDb250ZXh0KCkgc3VjY2Vzc2Z1bGx5IHRocmV3IGlsbGVnYWxTdGF0ZUV4Y2VwdGlvbiIpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIFRpbWVyU2VydmljZSB0aW1lclNlcnZpY2UgPSBjb250ZXh0LmdldFRpbWVyU2VydmljZSgpOwogICAgICAgICBUaW1lciB0aW1lcjsKICAgICAgICAgaWYoIGludGVydmFsID09IDAgKSB7CkBAIC03NywxNSArNzcsMTUgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdGltZXIuZ2V0SGFuZGxlKCk7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRpbWVySW5PdGhlclNlcnZlcihTdHJpbmcgb3duZXIsIFN0cmluZyB0aW1lcklkLCAKKworICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRpbWVySW5PdGhlclNlcnZlcihTdHJpbmcgb3duZXIsIFN0cmluZyB0aW1lcklkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGluaXRpYWxFeHBpcmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGludGVydmFsRHVyYXRpb24sIFN0cmluZyBpbmZvKSB7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIERhdGUgbm93ID0gbmV3IERhdGUoKTsKLSAgICAgICAgICAgIFRpbWVyQmVhbi50ZXN0Q3JlYXRlKHRpbWVySWQsIGNvbnRleHQsIG93bmVyLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUobm93LmdldFRpbWUoKSArIGluaXRpYWxFeHBpcmF0aW9uKSwgCisgICAgICAgICAgICBUaW1lckJlYW4udGVzdENyZWF0ZSh0aW1lcklkLCBjb250ZXh0LCBvd25lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUobm93LmdldFRpbWUoKSArIGluaXRpYWxFeHBpcmF0aW9uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVydmFsRHVyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8pOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CkBAIC05Niw3ICs5Niw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgbWlncmF0ZVRpbWVyc0Zyb20oU3RyaW5nIG93bmVyKSB7Ci0gICAgICAgIAorCiAgICAgICAgIFRpbWVyQmVhbi50ZXN0TWlncmF0ZShvd25lcik7CiAKICAgICB9CkBAIC0xMTQsMzEgKzExNCwzMSBAQAogCiAgICAgLy8gdGltZXIgY2FsbGJhY2sgbWV0aG9kCiAgICAgcHVibGljIHZvaWQgZWpiVGltZW91dChUaW1lciB0aW1lcikgewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgaW5mbyA9IChTdHJpbmcpIHRpbWVyLmdldEluZm8oKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZWpiVGltZW91dCBmb3IgdGltZXIgIiArIGluZm8pOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIGdldE1lc3NhZ2VDb250ZXh0Iik7CiAgICAgICAgICAgICBjb250ZXh0LmdldE1lc3NhZ2VDb250ZXh0KCk7CiAgICAgICAgIH0gY2F0Y2goSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlzZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXRNZXNzYWdlQ29udGV4dCgpIHN1Y2Nlc3NmdWxseSB0aHJldyBpbGxlZ2FsU3RhdGVFeGNlcHRpb24iKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICAvLyBhZGQgbWVzc2FnZSB0byBxdWV1ZQogICAgICAgICB0cnkgewotICAgICAgICAgICAgCi0gICAgICAgICAgICAKKworCiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY0ZhY3RvcnkgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL015UXVldWVDb25uZWN0aW9uRmFjdG9yeSIpOwogICAgICAgICAgICAgUXVldWUgcXVldWUgPSAoUXVldWUpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvTXlRdWV1ZSIpOwogICAgICAgICAgICAgY29ubmVjdGlvbiA9IHFjRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9IGNvbm5lY3Rpb24uY3JlYXRlUXVldWVTZXNzaW9uKHRydWUsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CiAgICAgICAgICAgICBzZW5kZXIgID0gc2Vzc2lvbi5jcmVhdGVTZW5kZXIocXVldWUpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFRleHRNZXNzYWdlIG1lc3NhZ2UgPSBzZXNzaW9uLmNyZWF0ZVRleHRNZXNzYWdlKCk7CiAgICAgICAgICAgICBtZXNzYWdlLnNldFRleHQoaW5mbyk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgdGltZSBvdXQgbWVzc2FnZSIpOwpAQCAtMTYwLDcgKzE2MCw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9CiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Jlc3RvcmUvZWpiL1RpbWVyU2Vzc2lvbkhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9yZXN0b3JlL2VqYi9UaW1lclNlc3Npb25Ib21lLmphdmEKaW5kZXggMWMwNGY1ZC4uNTA1M2NkYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Jlc3RvcmUvZWpiL1RpbWVyU2Vzc2lvbkhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvcmVzdG9yZS9lamIvVGltZXJTZXNzaW9uSG9tZS5qYXZhCkBAIC0yMSw1ICsyMSw1IEBACiBpbXBvcnQgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwogCiBwdWJsaWMgaW50ZXJmYWNlIFRpbWVyU2Vzc2lvbkhvbWUgZXh0ZW5kcyBFSkJIb21lIHsKLQlUaW1lclNlc3Npb24gY3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOworICAgIFRpbWVyU2Vzc2lvbiBjcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjViMThjNy4uOTBlZTMxZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItdGltZXItc2Vzc2lvbnRpbWVyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvYnVpbGQueG1sCmluZGV4IGQ1NTc3N2UuLmUyNGE5ZTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1RpbWVyU2luZ2xldG9uUmVtb3RlLmNsYXNzLCoqL1RpbWVyU2Vzc2lvbkhvbWUuY2xhc3MsKiovVGltZXJTZXNzaW9uLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYxLDEwICs2MSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDdmNTI1ZGYuLjI1Mzg0N2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zNSw5ICszNSw5IEBACiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3ROb3RSdW4gICAgPSAiVEVTVCBOT1QgUlVOIjsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdFBhc3NlZCAgICA9ICJURVNUIFBBU1NFRCI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RGYWlsZWQgICAgPSAiVEVTVCBGQUlMRUQiOwotICAgIAotICAgIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisKKworICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgU3RyaW5nIGpuZGlOYW1lID0gImVqYi9lamJfdGltZXJfc2Vzc2lvbnRpbWVyX1RpbWVyU2Vzc2lvbiI7CkBAIC02Nyw0NCArNjcsNDQgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBlamIgcmVmICIgKyBlamJOYW1lKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9pbmcgdGltZXIgdGVzdCBmb3IgIiArIGpuZGlOYW1lKTsKIC8vUEctPiAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoam5kaU5hbWUpOwogCiAKIC8vICAgICAgICAgICAgamF2YS5sYW5nLk9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvIiArIGVqYk5hbWUpOwotCSAgICBqYXZhLmxhbmcuT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiZWpiL2VqYl90aW1lcl9zZXNzaW9udGltZXJfVGltZXJTZXNzaW9uIik7CisgICAgICAgIGphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJlamIvZWpiX3RpbWVyX3Nlc3Npb250aW1lcl9UaW1lclNlc3Npb24iKTsKIAotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS1lamIgc3R1Yi0tLSIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tZWpiIHN0dWItLS0iICsKICAgICAgICAgICAgICAgICBvYmpyZWYuZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tZWpiIGNsYXNzbmFtZS0tLSIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tZWpiIGNsYXNzbmFtZS0tLSIgKwogICAgICAgICAgICAgICAgIG9ianJlZi5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLVRpbWVyU2Vzc2lvbkhvbWUtLS0iICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLVRpbWVyU2Vzc2lvbkhvbWUtLS0iICsKICAgICAgICAgICAgICAgICBUaW1lclNlc3Npb25Ib21lLmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7CiAKLQkgICAgVGltZXJTaW5nbGV0b25SZW1vdGUgdHNyID0gKFRpbWVyU2luZ2xldG9uUmVtb3RlKQotCQlpYy5sb29rdXAoImVqYi9lamJfdGltZXJfc2Vzc2lvbnRpbWVyX1RpbWVyU2luZ2xldG9uIik7CisgICAgICAgIFRpbWVyU2luZ2xldG9uUmVtb3RlIHRzciA9IChUaW1lclNpbmdsZXRvblJlbW90ZSkKKyAgICAgICAgaWMubG9va3VwKCJlamIvZWpiX3RpbWVyX3Nlc3Npb250aW1lcl9UaW1lclNpbmdsZXRvbiIpOwogICAgICAgICAgICAgLy8gY2xlYXIgb3V0IHNpbmdsZXRvbiBzdGF0ZS4gIFRoaXMgYWxsb3dzIG11bHRpcGxlIHRlc3QKICAgICAgICAgICAgIC8vIHJ1bnMgd2l0aG91dCBoYXZpbmcgdG8gcmVkZXBsb3kKLQkgICAgdHNyLnN0YXJ0VGVzdCgpOworICAgICAgICB0c3Iuc3RhcnRUZXN0KCk7CiAKICAgICAgICAgICAgIFRpbWVyU2Vzc2lvbkhvbWUgaG9tZSA9IChUaW1lclNlc3Npb25Ib21lKQogICAgICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIFRpbWVyU2Vzc2lvbkhvbWUuY2xhc3MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHJlbW90ZU9iaiA9IGhvbWUuY3JlYXRlKCk7Ci0JICAgIGludCB0aW1lb3V0SW5TZWNvbmRzID0gNTsKKyAgICAgICAgaW50IHRpbWVvdXRJblNlY29uZHMgPSA1OwogICAgICAgICAgICAgVGltZXJIYW5kbGUgaGFuZGxlID0gcmVtb3RlT2JqLmNyZWF0ZVRpbWVyKHRpbWVvdXRJblNlY29uZHMgKiAxMDAwKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciBtZXNzYWdlIik7CiAKLQkgICAgYm9vbGVhbiBnb3RUaW1lb3V0ID0gdHNyLndhaXRGb3JUaW1lb3V0KHRpbWVvdXRJblNlY29uZHMgKiAyKTsKKyAgICAgICAgYm9vbGVhbiBnb3RUaW1lb3V0ID0gdHNyLndhaXRGb3JUaW1lb3V0KHRpbWVvdXRJblNlY29uZHMgKiAyKTsKIAotCSAgICAvLyBAQEAKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZXJTZXNzaW9uIDogam5kaSBsb29rdXAgZm9yIC0+ICIgKyAKKyAgICAgICAgLy8gQEBACisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWVyU2Vzc2lvbiA6IGpuZGkgbG9va3VwIGZvciAtPiAiICsKICAgICAgICAgICAgICAgICBqbmRpTmFtZSArICIgPC0gdGVzdCBwYXNzZWQhISIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJzZXNzaW9udGltZXIgIiArIGpuZGlOYW1lLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWVyU2Vzc2lvbiA6ICIgKyBqbmRpTmFtZSArICIgdGVzdCBmYWlsZWQiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lci9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKaW5kZXggOWZjYjJhMy4uNTRhNGJmYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lci9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lci9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKQEAgLTMyLDUgKzMyLDUgQEAKICAgICA8cmVtb3RlPmNvbS5zdW4uczFhc2Rldi5lamIudGltZXIuc2Vzc2lvbnRpbWVyLlRpbWVyU2luZ2xldG9uUmVtb3RlPC9yZW1vdGU+CiAgICAgPGVqYi1saW5rPlRpbWVyU2luZ2xldG9uPC9lamItbGluaz4KICAgPC9lamItcmVmPgotIAorCiA8L2FwcGxpY2F0aW9uLWNsaWVudD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvZWpiL1RpbWVyU2Vzc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lci9lamIvVGltZXJTZXNzaW9uLmphdmEKaW5kZXggMGVhODYzNS4uYjg3OGU0MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lci9lamIvVGltZXJTZXNzaW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lci9lamIvVGltZXJTZXNzaW9uLmphdmEKQEAgLTIwLDYgKzIwLDYgQEAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIHB1YmxpYyBpbnRlcmZhY2UgVGltZXJTZXNzaW9uIGV4dGVuZHMgRUpCT2JqZWN0IHsKLQlwdWJsaWMgVGltZXJIYW5kbGUgY3JlYXRlVGltZXIoaW50IG1zKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHB1YmxpYyBUaW1lckhhbmRsZSBjcmVhdGVUaW1lcihpbnQgbXMpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvZWpiL1RpbWVyU2Vzc2lvbkVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lci9lamIvVGltZXJTZXNzaW9uRUpCLmphdmEKaW5kZXggMzI2MmVjYi4uNmQwNWVmNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lci9lamIvVGltZXJTZXNzaW9uRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lci9lamIvVGltZXJTZXNzaW9uRUpCLmphdmEKQEAgLTI2LDI2ICsyNiwyNiBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYXZheC5uYW1pbmcuKjsKIAotcHVibGljIGNsYXNzIFRpbWVyU2Vzc2lvbkVKQiBpbXBsZW1lbnRzIFRpbWVkT2JqZWN0LCBTZXNzaW9uQmVhbiAKK3B1YmxpYyBjbGFzcyBUaW1lclNlc3Npb25FSkIgaW1wbGVtZW50cyBUaW1lZE9iamVjdCwgU2Vzc2lvbkJlYW4KIHsKLQlwcml2YXRlIFNlc3Npb25Db250ZXh0IGNvbnRleHQ7CisgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjb250ZXh0OwogICAgIHByaXZhdGUgVGltZXJTaW5nbGV0b24gc2luZ2xldG9uOwogCi0JcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JICAgIAotCSAgICBzaW5nbGV0b24gPSAoVGltZXJTaW5nbGV0b24pIAotCQljb250ZXh0Lmxvb2t1cCgiamF2YTptb2R1bGUvVGltZXJTaW5nbGV0b24hY29tLnN1bi5zMWFzZGV2LmVqYi50aW1lci5zZXNzaW9udGltZXIuVGltZXJTaW5nbGV0b24iKTsKKyAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKIAotCX0KKyAgICAgICAgc2luZ2xldG9uID0gKFRpbWVyU2luZ2xldG9uKQorICAgICAgICBjb250ZXh0Lmxvb2t1cCgiamF2YTptb2R1bGUvVGltZXJTaW5nbGV0b24hY29tLnN1bi5zMWFzZGV2LmVqYi50aW1lci5zZXNzaW9udGltZXIuVGltZXJTaW5nbGV0b24iKTsKIAotCXB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQljb250ZXh0ID0gc2M7Ci0JfQorICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KIAotCS8vIGJ1c2luZXNzIG1ldGhvZCB0byBjcmVhdGUgYSB0aW1lcgotCXB1YmxpYyBUaW1lckhhbmRsZSBjcmVhdGVUaW1lcihpbnQgbXMpIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgeworICAgICAgICBjb250ZXh0ID0gc2M7CisgICAgfQorCisgICAgLy8gYnVzaW5lc3MgbWV0aG9kIHRvIGNyZWF0ZSBhIHRpbWVyCisgICAgcHVibGljIFRpbWVySGFuZGxlIGNyZWF0ZVRpbWVyKGludCBtcykgewogCiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBnZXRNZXNzYWdlQ29udGV4dCIpOwpAQCAtNTQsMTMgKzU0LDEzIEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXRNZXNzYWdlQ29udGV4dCgpIHN1Y2Nlc3NmdWxseSB0aHJldyBpbGxlZ2FsU3RhdGVFeGNlcHRpb24iKTsKICAgICAgICAgICAgIH0KIAotCSAgICBUaW1lclNlcnZpY2UgdGltZXJTZXJ2aWNlID0gY29udGV4dC5nZXRUaW1lclNlcnZpY2UoKTsKLQkgICAgVGltZXIgdGltZXIgPSB0aW1lclNlcnZpY2UuY3JlYXRlVGltZXIobXMsICJjcmVhdGVkIHRpbWVyIik7Ci0JICAgIHJldHVybiB0aW1lci5nZXRIYW5kbGUoKTsKLQl9CisgICAgICAgIFRpbWVyU2VydmljZSB0aW1lclNlcnZpY2UgPSBjb250ZXh0LmdldFRpbWVyU2VydmljZSgpOworICAgICAgICBUaW1lciB0aW1lciA9IHRpbWVyU2VydmljZS5jcmVhdGVUaW1lcihtcywgImNyZWF0ZWQgdGltZXIiKTsKKyAgICAgICAgcmV0dXJuIHRpbWVyLmdldEhhbmRsZSgpOworICAgIH0KIAotCS8vIHRpbWVyIGNhbGxiYWNrIG1ldGhvZAotCXB1YmxpYyB2b2lkIGVqYlRpbWVvdXQoVGltZXIgdGltZXIpIHsKKyAgICAvLyB0aW1lciBjYWxsYmFjayBtZXRob2QKKyAgICBwdWJsaWMgdm9pZCBlamJUaW1lb3V0KFRpbWVyIHRpbWVyKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBnZXRNZXNzYWdlQ29udGV4dCIpOwogICAgICAgICAgICAgICAgIGNvbnRleHQuZ2V0TWVzc2FnZUNvbnRleHQoKTsKQEAgLTY4LDEwICs2OCwxMCBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0TWVzc2FnZUNvbnRleHQoKSBzdWNjZXNzZnVsbHkgdGhyZXcgaWxsZWdhbFN0YXRlRXhjZXB0aW9uIik7CiAgICAgICAgICAgICB9CiAKLQkgICAgc2luZ2xldG9uLnNldFRpbWVvdXRSZWNlaXZlZCgpOworICAgICAgICBzaW5nbGV0b24uc2V0VGltZW91dFJlY2VpdmVkKCk7CiAKLQl9CisgICAgfQogCi0JcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotCXB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CisgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQorICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyL2VqYi9UaW1lclNlc3Npb25Ib21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyL2VqYi9UaW1lclNlc3Npb25Ib21lLmphdmEKaW5kZXggMTQxMTNiMy4uODk0MzE0MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lci9lamIvVGltZXJTZXNzaW9uSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvZWpiL1RpbWVyU2Vzc2lvbkhvbWUuamF2YQpAQCAtMjEsNSArMjEsNSBAQAogaW1wb3J0IGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKIAogcHVibGljIGludGVyZmFjZSBUaW1lclNlc3Npb25Ib21lIGV4dGVuZHMgRUpCSG9tZSB7Ci0JVGltZXJTZXNzaW9uIGNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICBUaW1lclNlc3Npb24gY3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lci9lamIvVGltZXJTaW5nbGV0b24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvZWpiL1RpbWVyU2luZ2xldG9uLmphdmEKaW5kZXggYjJlNWQxNi4uYjliM2U2ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lci9lamIvVGltZXJTaW5nbGV0b24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyL2VqYi9UaW1lclNpbmdsZXRvbi5qYXZhCkBAIC0yNSwzNSArMjUsMzUgQEAKIEBMb2NrKExvY2tUeXBlLlJFQUQpCiBwdWJsaWMgY2xhc3MgVGltZXJTaW5nbGV0b24KIHsKLSAgICAKKwogICAgIGJvb2xlYW4gdGltZW91dFJlY2VpdmVkID0gZmFsc2U7CiAKICAgICBwdWJsaWMgdm9pZCBzdGFydFRlc3QoKSB7Ci0JdGltZW91dFJlY2VpdmVkID0gZmFsc2U7CisgICAgdGltZW91dFJlY2VpdmVkID0gZmFsc2U7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0VGltZW91dFJlY2VpdmVkKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiVGltZXJTaW5nbGV0b246OnNldFRpbWVvdXRSZWNlaXZlZCgpIik7Ci0JdGltZW91dFJlY2VpdmVkID0gdHJ1ZTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWVyU2luZ2xldG9uOjpzZXRUaW1lb3V0UmVjZWl2ZWQoKSIpOworICAgIHRpbWVvdXRSZWNlaXZlZCA9IHRydWU7CiAgICAgfQogCiAgICAgIHB1YmxpYyBib29sZWFuIHdhaXRGb3JUaW1lb3V0KGludCBzZWNvbmRzKSB7Ci0JIGludCBpID0gMDsKLQkgd2hpbGUoaSA8IHNlY29uZHMpIHsKLQkgICAgIGkrKzsKLQkgICAgIHRyeSB7Ci0JCSBUaHJlYWQuc2xlZXAoMTAwMCk7Ci0JCSBpZiggdGltZW91dFJlY2VpdmVkICkgewotCQkgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHRpbWVvdXQgYWZ0ZXIgIiArCi0JCQkJCWkgKyAiIHNlY29uZHMiKTsKLQkJICAgICBicmVhazsKLQkJIH0KLQkgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCSB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCSAgICAgfQotCSB9Ci0JcmV0dXJuIHRpbWVvdXRSZWNlaXZlZDsKKyAgICAgaW50IGkgPSAwOworICAgICB3aGlsZShpIDwgc2Vjb25kcykgeworICAgICAgICAgaSsrOworICAgICAgICAgdHJ5IHsKKyAgICAgICAgIFRocmVhZC5zbGVlcCgxMDAwKTsKKyAgICAgICAgIGlmKCB0aW1lb3V0UmVjZWl2ZWQgKSB7CisgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgdGltZW91dCBhZnRlciAiICsKKyAgICAgICAgICAgICAgICAgICAgaSArICIgc2Vjb25kcyIpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CisgICAgICAgICB9CisgICAgIH0KKyAgICByZXR1cm4gdGltZW91dFJlY2VpdmVkOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lci9lamIvVGltZXJTaW5nbGV0b25SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvZWpiL1RpbWVyU2luZ2xldG9uUmVtb3RlLmphdmEKaW5kZXggNDU5NGRkYS4uZTQ2NzgwOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lci9lamIvVGltZXJTaW5nbGV0b25SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyL2VqYi9UaW1lclNpbmdsZXRvblJlbW90ZS5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiBwdWJsaWMgaW50ZXJmYWNlIFRpbWVyU2luZ2xldG9uUmVtb3RlIHsKIAogICAgIHB1YmxpYyB2b2lkIHN0YXJ0VGVzdCgpOwotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gd2FpdEZvclRpbWVvdXQoaW50IHNlY29uZHMpOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyU2VjdXJpdHkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXJTZWN1cml0eS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDdmZWViNDkuLjRjNjAzNDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXJTZWN1cml0eS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXJTZWN1cml0eS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi10aW1lci1zZXNzaW9udGltZXJzZWN1cml0eSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lclNlY3VyaXR5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXJTZWN1cml0eS9idWlsZC54bWwKaW5kZXggYWVmNTliMi4uOTBkYTEyZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lclNlY3VyaXR5L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyU2VjdXJpdHkvYnVpbGQueG1sCkBAIC0zOCw3ICszOCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MCwxNCArNTAsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24sZGVsZXRlLXVzZXIiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC04NCwxMCArODQsMTAgQEAKICAgICAgICAgPGVudiBrZXk9IlZNQVJHUyIgdmFsdWU9Ii1EajJlZWxvZ2luLm5hbWU9cHJpbmNpcGFsTmFtZSAtRGoyZWVsb2dpbi5wYXNzd29yZD1wcmluY2lwYWxOYW1lIiAvPgogICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtdXNlciI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXVzZXItY29tbW9uIj4KQEAgLTk3LDE0ICs5NywxNCBAQAogICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtdXNlciI+CiAgICAgICA8IS0tIHJlbW92ZSB0ZXN0IHVzZXJzLCBqdXN0IGNsZWFudXAuIC0tPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtdXNlci1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9InByaW5jaXBhbE5hbWUiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RhcnQiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTExNCw3ICsxMTQsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lclNlY3VyaXR5L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXJTZWN1cml0eS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOWVkY2RmMC4uMmM5M2YzNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lclNlY3VyaXR5L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyU2VjdXJpdHkvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOSw5ICsyOSw5IEBACiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3ROb3RSdW4gICAgPSAiVEVTVCBOT1QgUlVOIjsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdFBhc3NlZCAgICA9ICJURVNUIFBBU1NFRCI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RGYWlsZWQgICAgPSAiVEVTVCBGQUlMRUQiOwotICAgIAotICAgIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisKKworICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgU3RyaW5nIGpuZGlOYW1lID0gImVqYi9lamJfdGltZXJfc2Vzc2lvbnRpbWVyc2VjdXJpdHlfVGltZXJTZXNzaW9uIjsKQEAgLTU1LDI0ICs1NSwyNCBAQAogCiAgICAgcHVibGljIFN0cmluZyBkb1Rlc3QoKSB7CiAgICAgICAgIFN0cmluZyByZXN1bHQgPSBrVGVzdFBhc3NlZDsKLSAgICAgICAgUXVldWVDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBudWxsOyAKKyAgICAgICAgUXVldWVDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBUaW1lclNlc3Npb24gcmVtb3RlT2JqID0gbnVsbDsKIAogICAgICAgICBTdHJpbmcgZWpiTmFtZSA9ICJlamJzL1RpbWVyIjsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBlamIgcmVmICIgKyBlamJOYW1lKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9pbmcgdGltZXIgdGVzdCBmb3IgIiArIGpuZGlOYW1lKTsKIAogICAgICAgICAgICAgamF2YS5sYW5nLk9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvIiArIGVqYk5hbWUpOwogCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLWVqYiBzdHViLS0tIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS1lamIgc3R1Yi0tLSIgKwogICAgICAgICAgICAgICAgIG9ianJlZi5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS1lamIgY2xhc3NuYW1lLS0tIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS1lamIgY2xhc3NuYW1lLS0tIiArCiAgICAgICAgICAgICAgICAgb2JqcmVmLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tVGltZXJTZXNzaW9uSG9tZS0tLSIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tVGltZXJTZXNzaW9uSG9tZS0tLSIgKwogICAgICAgICAgICAgICAgIFRpbWVyU2Vzc2lvbkhvbWUuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKIApAQCAtODAsMTEgKzgwLDExIEBACiAKICAgICAgICAgICAgIFRpbWVyU2Vzc2lvbkhvbWUgaG9tZSA9IChUaW1lclNlc3Npb25Ib21lKQogICAgICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIFRpbWVyU2Vzc2lvbkhvbWUuY2xhc3MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHJlbW90ZU9iaiA9IGhvbWUuY3JlYXRlKCk7Ci0gICAgICAgICAgICByZW1vdGVPYmouZHVtbXlCdXNpbmVzc01ldGhvZCgpOyAKKyAgICAgICAgICAgIHJlbW90ZU9iai5kdW1teUJ1c2luZXNzTWV0aG9kKCk7CiAgICAgICAgICAgICBUaW1lckhhbmRsZSBoYW5kbGUgPSByZW1vdGVPYmouY3JlYXRlVGltZXIoNTAwMCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY0ZhY3RvcnkgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKICAgICAgICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImptcy9lamJfdGltZXJfc2Vzc2lvbnRpbWVyc2VjdXJpdHlfVFFDRiIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiIHFjRmFjdG9yeSA9ICIgKyBxY0ZhY3RvcnkpOwpAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiIHF1ZXVlID0gIiArIHF1ZXVlKTsKIAogICAgICAgICAgICAgY29ubmVjdGlvbiA9IHFjRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIFF1ZXVlU2Vzc2lvbiBzZXNzaW9uID0gCisgICAgICAgICAgICBRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9CiAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5jcmVhdGVRdWV1ZVNlc3Npb24oZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CiAgICAgICAgICAgICBRdWV1ZVJlY2VpdmVyIHJlY2VpdmVyID0gc2Vzc2lvbi5jcmVhdGVSZWNlaXZlcihxdWV1ZSk7CiAgICAgICAgICAgICBjb25uZWN0aW9uLnN0YXJ0KCk7CkBAIC0xMDEsMTQgKzEwMSwxNCBAQAogICAgICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gcmVjZWl2ZXIucmVjZWl2ZSg0NTAwMCk7CiAgICAgICAgICAgICBUZXh0TWVzc2FnZSB0ZXh0TXNnID0gKFRleHRNZXNzYWdlKW1lc3NhZ2U7CiAKLQkgICAgCWlmICggKG1lc3NhZ2UgPT0gbnVsbCkgfHwgCisgICAgICAgICAgICBpZiAoIChtZXNzYWdlID09IG51bGwpIHx8CiAgICAgICAgICAgICAgICAgICghIHRleHRNc2cuZ2V0VGV4dCgpLmVxdWFscygiZWpiVGltZW91dCgpIGludm9rZWQiKSkpCi0JCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiUmVjZWl2ZWQgYSBudWxsIG1lc3NhZ2UgLi4uIFRpbWVPdXQgZmFpbGVkISEiKTsKLQkgICAgCVN5c3RlbS5vdXQucHJpbnRsbigiTWVzc2FnZSA6ICIgKyBtZXNzYWdlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaW1lclNlc3Npb24gOiBqbmRpIGxvb2t1cCBmb3IgLT4gIiArIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlJlY2VpdmVkIGEgbnVsbCBtZXNzYWdlIC4uLiBUaW1lT3V0IGZhaWxlZCEhIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1lc3NhZ2UgOiAiICsgbWVzc2FnZSk7CisKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZXJTZXNzaW9uIDogam5kaSBsb29rdXAgZm9yIC0+ICIgKwogICAgICAgICAgICAgICAgIGpuZGlOYW1lICsgIiA8LSB0ZXN0IHBhc3NlZCEhIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInNlc3Npb250aW1lcnNlY3VyaXR5ICIgKyBqbmRpTmFtZSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaW1lclNlc3Npb24gOiAiICsgam5kaU5hbWUgKyAiIHRlc3QgZmFpbGVkIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyU2VjdXJpdHkvZWpiL1RpbWVyU2Vzc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lclNlY3VyaXR5L2VqYi9UaW1lclNlc3Npb24uamF2YQppbmRleCBhY2ZjMjFhLi45NWM0OGY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyU2VjdXJpdHkvZWpiL1RpbWVyU2Vzc2lvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXJTZWN1cml0eS9lamIvVGltZXJTZXNzaW9uLmphdmEKQEAgLTIwLDggKzIwLDggQEAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIHB1YmxpYyBpbnRlcmZhY2UgVGltZXJTZXNzaW9uIGV4dGVuZHMgRUpCT2JqZWN0IHsKLQlwdWJsaWMgVGltZXJIYW5kbGUgY3JlYXRlVGltZXIoaW50IG1zKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHB1YmxpYyBUaW1lckhhbmRsZSBjcmVhdGVUaW1lcihpbnQgbXMpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLQlwdWJsaWMgdm9pZCBkdW1teUJ1c2luZXNzTWV0aG9kKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICBwdWJsaWMgdm9pZCBkdW1teUJ1c2luZXNzTWV0aG9kKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lclNlY3VyaXR5L2VqYi9UaW1lclNlc3Npb25FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXJTZWN1cml0eS9lamIvVGltZXJTZXNzaW9uRUpCLmphdmEKaW5kZXggZTIwNWVjYy4uY2IxZjk3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lclNlY3VyaXR5L2VqYi9UaW1lclNlc3Npb25FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyU2VjdXJpdHkvZWpiL1RpbWVyU2Vzc2lvbkVKQi5qYXZhCkBAIC0zMyw0MiArMzMsNDIgQEAKIGltcG9ydCBqYWthcnRhLmptcy5UZXh0TWVzc2FnZTsKIGltcG9ydCBqYXZheC5uYW1pbmcuKjsKIAotcHVibGljIGNsYXNzIFRpbWVyU2Vzc2lvbkVKQiBpbXBsZW1lbnRzIFRpbWVkT2JqZWN0LCBTZXNzaW9uQmVhbiAKK3B1YmxpYyBjbGFzcyBUaW1lclNlc3Npb25FSkIgaW1wbGVtZW50cyBUaW1lZE9iamVjdCwgU2Vzc2lvbkJlYW4KIHsKLQlwcml2YXRlIFNlc3Npb25Db250ZXh0IGNvbnRleHQ7Ci0JcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb24gY29ubmVjdGlvbjsKLQlwcml2YXRlIFF1ZXVlU2Vzc2lvbiBzZXNzaW9uOwotCXByaXZhdGUgUXVldWUgcXVldWU7Ci0JcHJpdmF0ZSBRdWV1ZVNlbmRlciBzZW5kZXI7CisgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjb250ZXh0OworICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uIGNvbm5lY3Rpb247CisgICAgcHJpdmF0ZSBRdWV1ZVNlc3Npb24gc2Vzc2lvbjsKKyAgICBwcml2YXRlIFF1ZXVlIHF1ZXVlOworICAgIHByaXZhdGUgUXVldWVTZW5kZXIgc2VuZGVyOwogCi0JcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQorICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KIAotCXB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KKyAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9CiAKLQlwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQljb250ZXh0ID0gc2M7Ci0JfQorICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7CisgICAgICAgIGNvbnRleHQgPSBzYzsKKyAgICB9CiAKLQkvLyBidXNpbmVzcyBtZXRob2QgdG8gY3JlYXRlIGEgdGltZXIKKyAgICAvLyBidXNpbmVzcyBtZXRob2QgdG8gY3JlYXRlIGEgdGltZXIKICAgICBwdWJsaWMgdm9pZCBkdW1teUJ1c2luZXNzTWV0aG9kKCkgewogICAgICAgICB0cnkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkdW1teUJ1c2luZXNzTWV0aG9kKCk6IGdldENhbGxlclByaW5jaXBhbCgpID0gIiAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZHVtbXlCdXNpbmVzc01ldGhvZCgpOiBnZXRDYWxsZXJQcmluY2lwYWwoKSA9ICIKICAgICAgICAgICAgICAgICArIGNvbnRleHQuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkdW1teUJ1c2luZXNzTWV0aG9kKCk6IGlzQ2FsbGVySW5Sb2xlKGZvbykgPSAiIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkdW1teUJ1c2luZXNzTWV0aG9kKCk6IGlzQ2FsbGVySW5Sb2xlKGZvbykgPSAiCiAgICAgICAgICAgICAgICAgKyBjb250ZXh0LmlzQ2FsbGVySW5Sb2xlKCJmb28iKSk7CiAgICAgICAgIH0gY2F0Y2goSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlzZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKAotICAgICAgICAgICAgICAgICJkdW1teUJ1c2luZXNzTWV0aG9kKCk6IGlzQ2FsbGVySW5Sb2xlIHNob3VsZCBub3QgdGhyb3cgIiAKKyAgICAgICAgICAgICAgICAiZHVtbXlCdXNpbmVzc01ldGhvZCgpOiBpc0NhbGxlckluUm9sZSBzaG91bGQgbm90IHRocm93ICIKICAgICAgICAgICAgICAgICArICJpbGxlZ2Fsc3RhdGVleGNlcHRpb24gaW4gYnVzaW5lc3MgbWV0aG9kIik7CiAgICAgICAgICAgICB0aHJvdyBpc2U7CiAgICAgICAgIH0KICAgICB9CiAKLQlwdWJsaWMgVGltZXJIYW5kbGUgY3JlYXRlVGltZXIoaW50IG1zKSB7CisgICAgcHVibGljIFRpbWVySGFuZGxlIGNyZWF0ZVRpbWVyKGludCBtcykgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIGNyZWF0ZVRpbWVyIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNyZWF0ZVRpbWVyKCk6IGdldENhbGxlclByaW5jaXBhbCgpID0gIiAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRlVGltZXIoKTogZ2V0Q2FsbGVyUHJpbmNpcGFsKCkgPSAiCiAgICAgICAgICAgICAgICAgKyBjb250ZXh0LmdldENhbGxlclByaW5jaXBhbCgpKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRlVGltZXIoKTogaXNDYWxsZXJJblJvbGUoZm9vKSA9ICIgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNyZWF0ZVRpbWVyKCk6IGlzQ2FsbGVySW5Sb2xlKGZvbykgPSAiCiAgICAgICAgICAgICAgICAgKyBjb250ZXh0LmlzQ2FsbGVySW5Sb2xlKCJmb28iKSk7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBpc0NhbGxlckluUm9sZSIpOwpAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJpc0NhbGxlckluUm9sZSgpIHNob3VsZCBub3QgZmFpbCBpbiBhIGJ1c2luZXNzIG1ldGhvZCIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2goSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlzZSkgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNDYWxsZXJJblJvbGUgc2hvdWxkIG5vdCB0aHJvdyAiIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNDYWxsZXJJblJvbGUgc2hvdWxkIG5vdCB0aHJvdyAiCiAgICAgICAgICAgICAgICAgICAgICsgImlsbGVnYWxzdGF0ZWV4Y2VwdGlvbiBpbiBidXNpbmVzcyBtZXRob2QiKTsKICAgICAgICAgICAgICAgICB0aHJvdyBpc2U7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBpc2UpIHsKQEAgLTkzLDIyICs5MywyMiBAQAogICAgICAgICAgICAgfQogCiAKLQkJVGltZXJTZXJ2aWNlIHRpbWVyU2VydmljZSA9IGNvbnRleHQuZ2V0VGltZXJTZXJ2aWNlKCk7Ci0JCVRpbWVyIHRpbWVyID0gdGltZXJTZXJ2aWNlLmNyZWF0ZVRpbWVyKG1zLCAiY3JlYXRlZCB0aW1lciIpOwotCQlyZXR1cm4gdGltZXIuZ2V0SGFuZGxlKCk7Ci0JfQorICAgICAgICBUaW1lclNlcnZpY2UgdGltZXJTZXJ2aWNlID0gY29udGV4dC5nZXRUaW1lclNlcnZpY2UoKTsKKyAgICAgICAgVGltZXIgdGltZXIgPSB0aW1lclNlcnZpY2UuY3JlYXRlVGltZXIobXMsICJjcmVhdGVkIHRpbWVyIik7CisgICAgICAgIHJldHVybiB0aW1lci5nZXRIYW5kbGUoKTsKKyAgICB9CiAKLQkvLyB0aW1lciBjYWxsYmFjayBtZXRob2QKLQlwdWJsaWMgdm9pZCBlamJUaW1lb3V0KFRpbWVyIHRpbWVyKSB7CisgICAgLy8gdGltZXIgY2FsbGJhY2sgbWV0aG9kCisgICAgcHVibGljIHZvaWQgZWpiVGltZW91dChUaW1lciB0aW1lcikgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIGVqYlRpbWVvdXQiKTsKICAgICAgICAgICAgIGphdmEuc2VjdXJpdHkuUHJpbmNpcGFsIHByaW5jaXBhbCA9IGNvbnRleHQuZ2V0Q2FsbGVyUHJpbmNpcGFsKCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYlRpbWVvdXQoKTogZ2V0Q2FsbGVyUHJpbmNpcGFsKCksIHByaW5jaXBhbCAtICIgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYlRpbWVvdXQoKTogZ2V0Q2FsbGVyUHJpbmNpcGFsKCksIHByaW5jaXBhbCAtICIKICAgICAgICAgICAgICAgICArIHByaW5jaXBhbCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYlRpbWVvdXQoKTogaXNDYWxsZXJJblJvbGUoZm9vKSwgcmVzdWx0IC0gIiAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gZWpiVGltZW91dCgpOiBpc0NhbGxlckluUm9sZShmb28pLCByZXN1bHQgLSAiCiAgICAgICAgICAgICAgICAgKyBjb250ZXh0LmlzQ2FsbGVySW5Sb2xlKCJmb28iKSk7CiAgICAgICAgIH0gY2F0Y2goSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlzZSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlamJUaW1lb3V0KCk6IGdldENhbGxlclByaW5jaXBhbCgpIGZhaWxlZCBieSAiIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlamJUaW1lb3V0KCk6IGdldENhbGxlclByaW5jaXBhbCgpIGZhaWxlZCBieSAiCiAgICAgICAgICAgICAgICAgKyAidGhyb3dpbmcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIik7CiAgICAgICAgIH0KICAgICAgICAgdHJ5IHsKQEAgLTExOSw3ICsxMTksNyBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiVGltZW91dCgpOiBpc0NhbGxlckluUm9sZSgpIGZhaWxlZCIgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaXNlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYlRpbWVvdXQoKTogaXNDYWxsZXJJblJvbGUoKSBmYWlsZWQgYnkgIiAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiVGltZW91dCgpOiBpc0NhbGxlckluUm9sZSgpIGZhaWxlZCBieSAiCiAgICAgICAgICAgICAgICAgKyAidGhyb3dpbmcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIik7CiAgICAgICAgIH0KIApAQCAtMTI3LDQ2ICsxMjcsNDYgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBnZXRNZXNzYWdlQ29udGV4dCIpOwogICAgICAgICAgICAgY29udGV4dC5nZXRNZXNzYWdlQ29udGV4dCgpOwogICAgICAgICB9IGNhdGNoKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpc2UpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiVGltZW91dCgpOiBnZXRNZXNzYWdlQ29udGV4dCgpIHN1Y2Nlc3NmdWxseSAiIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlamJUaW1lb3V0KCk6IGdldE1lc3NhZ2VDb250ZXh0KCkgc3VjY2Vzc2Z1bGx5ICIKICAgICAgICAgICAgICAgICArICJ0aHJldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24iKTsKICAgICAgICAgfQogCiAKLQkJLy8gYWRkIG1lc3NhZ2UgdG8gcXVldWUKLQkJdHJ5IHsKKyAgICAgICAgLy8gYWRkIG1lc3NhZ2UgdG8gcXVldWUKKyAgICAgICAgdHJ5IHsKIAogCi0JCQlJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCQkJUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY0ZhY3RvcnkgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKLQkJCQlpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL015UXVldWVDb25uZWN0aW9uRmFjdG9yeSIpOwotCQkJUXVldWUgcXVldWUgPSAoUXVldWUpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvTXlRdWV1ZSIpOwotCQkJY29ubmVjdGlvbiA9IHFjRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgICAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjRmFjdG9yeSA9IChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KQorICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvTXlRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5Iik7CisgICAgICAgICAgICBRdWV1ZSBxdWV1ZSA9IChRdWV1ZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9NeVF1ZXVlIik7CisgICAgICAgICAgICBjb25uZWN0aW9uID0gcWNGYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwogCi0JCQlRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9IGNvbm5lY3Rpb24uY3JlYXRlUXVldWVTZXNzaW9uKHRydWUsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7Ci0JCQlzZW5kZXIgID0gc2Vzc2lvbi5jcmVhdGVTZW5kZXIocXVldWUpOworICAgICAgICAgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLmNyZWF0ZVF1ZXVlU2Vzc2lvbih0cnVlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOworICAgICAgICAgICAgc2VuZGVyICA9IHNlc3Npb24uY3JlYXRlU2VuZGVyKHF1ZXVlKTsKIAotCQkJVGV4dE1lc3NhZ2UgbWVzc2FnZSA9IHNlc3Npb24uY3JlYXRlVGV4dE1lc3NhZ2UoKTsKLQkJCW1lc3NhZ2Uuc2V0VGV4dCgiZWpiVGltZW91dCgpIGludm9rZWQiKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyB0aW1lIG91dCBtZXNzYWdlIik7Ci0JCQlzZW5kZXIuc2VuZChtZXNzYWdlKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGltZSBvdXQgbWVzc2FnZSBzZW50Iik7Ci0JCX0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0gY2F0Y2goSk1TRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQl0cnkgewotCQkJCWlmKGNvbm5lY3Rpb24gIT0gbnVsbCkgewotCQkJCQljb25uZWN0aW9uLmNsb3NlKCk7CisgICAgICAgICAgICBUZXh0TWVzc2FnZSBtZXNzYWdlID0gc2Vzc2lvbi5jcmVhdGVUZXh0TWVzc2FnZSgpOworICAgICAgICAgICAgbWVzc2FnZS5zZXRUZXh0KCJlamJUaW1lb3V0KCkgaW52b2tlZCIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIHRpbWUgb3V0IG1lc3NhZ2UiKTsKKyAgICAgICAgICAgIHNlbmRlci5zZW5kKG1lc3NhZ2UpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaW1lIG91dCBtZXNzYWdlIHNlbnQiKTsKKyAgICAgICAgfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfSBjYXRjaChKTVNFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5IHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaWYoY29ubmVjdGlvbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiA9IG51bGw7Ci0JCQkJfQotCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQl9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9Ci0JcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KKyAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9CisgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXJTZWN1cml0eS9lamIvVGltZXJTZXNzaW9uSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lclNlY3VyaXR5L2VqYi9UaW1lclNlc3Npb25Ib21lLmphdmEKaW5kZXggYzVkZGZmMy4uOTUyMzA5NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lclNlY3VyaXR5L2VqYi9UaW1lclNlc3Npb25Ib21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lclNlY3VyaXR5L2VqYi9UaW1lclNlc3Npb25Ib21lLmphdmEKQEAgLTIxLDUgKzIxLDUgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247CiAKIHB1YmxpYyBpbnRlcmZhY2UgVGltZXJTZXNzaW9uSG9tZSBleHRlbmRzIEVKQkhvbWUgewotCVRpbWVyU2Vzc2lvbiBjcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CisgICAgVGltZXJTZXNzaW9uIGNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCBlMDBiMjQ2Li44MDliYjYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVyc2VyaWFsaXphdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi10aW1lci10aW1lcnNlcmlhbGl6YXRpb24tc2Vzc2lvbnRpbWVyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vYnVpbGQueG1sCmluZGV4IDdiMDE1OTIuLjRmODc1NjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxNCArNDgsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzLCAqKi8qU0ZTQiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgLS0+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8IS0tCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgpAQCAtNzksMTQgKzc5LDE0IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGUwYzE4M2QuLjlhOTkxZDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zNCw4ICszNCw4IEBACiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3ROb3RSdW4gICAgPSAiVEVTVCBOT1QgUlVOIjsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdFBhc3NlZCAgICA9ICJURVNUIFBBU1NFRCI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RGYWlsZWQgICAgPSAiVEVTVCBGQUlMRUQiOwotICAgIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCAgICBNQVhfVElNRVJTID0gNjA7CkBAIC01MCwxMSArNTAsMTEgQEAKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltUaW1lclNlcmlhbGl6YXRpb25DbGluZXRdIERPTkUgZG9UZXN0KCkuLi4iKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInRpbWVyc2VyaWFsaXphdGlvbiIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAgICAgICAgIGluaXRTRlNCTGlzdCgpOyAgICAgICAvL2NyZWF0ZSBNQVhfVElNRVJTCiAKQEAgLTE3Miw3ICsxNzIsNyBAQAogICAgICAgICAgICAgVGltZXJTRlNCIHNmc2IgPSAoVGltZXJTRlNCKSBzZnNiTGlzdC5nZXQoaSk7CiAgICAgICAgICAgICBTdHJpbmcgdGltZXJOYW1lID0gc2ZzYi5nZXROYW1lKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFjY2Vzc2luZyBUaW1lciBiZWFuIGZvcjogIiArIHRpbWVyTmFtZSk7Ci0gICAgICAgICAgICBzZnNiLmNhbmNlbFRpbWVyKCk7ICAKKyAgICAgICAgICAgIHNmc2IuY2FuY2VsVGltZXIoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGFjY2Vzc2VkIFRpbWVyIGJlYW4gZm9yOiAiICsgdGltZXJOYW1lKTsKIAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBjYW5jZWxUaW1lcnMiLCBzdGF0LlBBU1MpOwpAQCAtMTg1LDQgKzE4NSw0IEBACiAKIAogfQotICAgIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2VqYi9UaW1lclNGU0IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vZWpiL1RpbWVyU0ZTQi5qYXZhCmluZGV4IGE2ZjVhNWIuLmZmNTMxMDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vZWpiL1RpbWVyU0ZTQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vZWpiL1RpbWVyU0ZTQi5qYXZhCkBAIC0yMywxOSArMjMsMTkgQEAKICAgICBleHRlbmRzIEVKQk9iamVjdAogewogCi0JcHVibGljIHZvaWQgY3JlYXRlVGltZXIoaW50IG1zKQorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRpbWVyKGludCBtcykKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCisgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotCXB1YmxpYyBsb25nIGdldFRpbWVSZW1haW5pbmcoKQorICAgIHB1YmxpYyBsb25nIGdldFRpbWVSZW1haW5pbmcoKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0JcHVibGljIFRpbWVySGFuZGxlIGdldFRpbWVySGFuZGxlKCkKKyAgICBwdWJsaWMgVGltZXJIYW5kbGUgZ2V0VGltZXJIYW5kbGUoKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0JcHVibGljIHZvaWQgY2FuY2VsVGltZXIoKQorICAgIHB1YmxpYyB2b2lkIGNhbmNlbFRpbWVyKCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVyc2VyaWFsaXphdGlvbi9lamIvVGltZXJTRlNCRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2VqYi9UaW1lclNGU0JFSkIuamF2YQppbmRleCA0YTFhZDZiLi44YzhhYzY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2VqYi9UaW1lclNGU0JFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2VqYi9UaW1lclNGU0JFSkIuamF2YQpAQCAtMzEsMTQgKzMxLDE0IEBACiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCiBwdWJsaWMgY2xhc3MgVGltZXJTRlNCRUpCCi0gICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiAKKyAgICBpbXBsZW1lbnRzIFNlc3Npb25CZWFuCiB7Ci0JcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjb250ZXh0OworICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY29udGV4dDsKICAgICBwcml2YXRlIFN0cmluZyB0aW1lck5hbWU7CiAgICAgcHJpdmF0ZSBDb250ZXh0IGluaXRpYWxDdHg7CiAgICAgcHJpdmF0ZSBUaW1lciB0aW1lcjsKIAotCXB1YmxpYyB2b2lkIGVqYkNyZWF0ZShTdHJpbmcgdGltZXJOYW1lKSB7CisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKFN0cmluZyB0aW1lck5hbWUpIHsKICAgICAgICAgdGhpcy50aW1lck5hbWUgPSB0aW1lck5hbWU7CiAgICAgfQogCkBAIC00NiwzMSArNDYsMzEgQEAKICAgICAgICAgcmV0dXJuIHRoaXMudGltZXJOYW1lOwogICAgIH0KIAotCXB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JCXRoaXMuY29udGV4dCA9IHNjOworICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7CisgICAgICAgIHRoaXMuY29udGV4dCA9IHNjOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgdGhpcy5pbml0aWFsQ3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0aCkgewogICAgICAgICAgICAgdGgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLQl9CisgICAgfQogCi0JLy8gYnVzaW5lc3MgbWV0aG9kIHRvIGNyZWF0ZSBhIHRpbWVyCi0JcHVibGljIHZvaWQgY3JlYXRlVGltZXIoaW50IG1zKQorICAgIC8vIGJ1c2luZXNzIG1ldGhvZCB0byBjcmVhdGUgYSB0aW1lcgorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRpbWVyKGludCBtcykKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGluaXRpYWxDdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIFRpbWVyU0xTQkhvbWUgaG9tZSA9IChUaW1lclNMU0JIb21lKSBpbml0aWFsQ3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvVGltZXJTTFNCIik7Ci0JCSAgICBUaW1lclNMU0Igc2xzYiA9IChUaW1lclNMU0IpIGhvbWUuY3JlYXRlKCk7Ci0JCSAgICB0aW1lciA9IHNsc2IuY3JlYXRlVGltZXIobXMpOworICAgICAgICAgICAgVGltZXJTTFNCIHNsc2IgPSAoVGltZXJTTFNCKSBob21lLmNyZWF0ZSgpOworICAgICAgICAgICAgdGltZXIgPSBzbHNiLmNyZWF0ZVRpbWVyKG1zKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIlBHLT4gYWZ0ZXIgY3JlYXRlVGltZXIoKSIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZW1vdGVFeGNlcHRpb24oIkV4Y2VwdGlvbiBkdXJpbmcgVGltZXJTRlNCRUpCOjpjcmVhdGVUaW1lciIsIGV4KTsKICAgICAgICAgfQotCX0KKyAgICB9CiAKLQlwdWJsaWMgbG9uZyBnZXRUaW1lUmVtYWluaW5nKCkgeworICAgIHB1YmxpYyBsb25nIGdldFRpbWVSZW1haW5pbmcoKSB7CiAgICAgICAgICAgICBsb25nIHRpbWVSZW1haW5pbmcgPSAtMTsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgdGltZVJlbWFpbmluZyA9IHRpbWVyLmdldFRpbWVSZW1haW5pbmcoKTsKQEAgLTgwLDcgKzgwLDcgQEAKICAgICAgICAgICAgIHJldHVybiB0aW1lUmVtYWluaW5nOwogICAgICAgICB9CiAKLQlwdWJsaWMgVGltZXJIYW5kbGUgZ2V0VGltZXJIYW5kbGUoKSB7CisgICAgcHVibGljIFRpbWVySGFuZGxlIGdldFRpbWVySGFuZGxlKCkgewogICAgICAgICAgICAgVGltZXJIYW5kbGUgaGFuZGxlID0gbnVsbDsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaGFuZGxlID0gdGltZXIuZ2V0SGFuZGxlKCk7CkBAIC05MCw3ICs5MCw3IEBACiAgICAgICAgICAgICByZXR1cm4gaGFuZGxlOwogICAgICAgICB9CiAKLQlwdWJsaWMgdm9pZCBjYW5jZWxUaW1lcigpIHsKKyAgICBwdWJsaWMgdm9pZCBjYW5jZWxUaW1lcigpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgdGltZXIuY2FuY2VsKCk7CiAgICAgICAgICAgICB9IGNhdGNoKE5vU3VjaE9iamVjdExvY2FsRXhjZXB0aW9uIG5zb2xlKSB7CkBAIC05OSwxMyArOTksMTMgQEAKICAgICB9CiAKIAotCXB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CisgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KIAotCXB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgeworICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJJbiBUaW1lclNGU0IuYWN0aXZhdGUoKSIpOwogICAgIH0KIAotCXB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKKyAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkluIFRpbWVyU0ZTQi5wYXNzaXZhdGUoKSIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vZWpiL1RpbWVyU0ZTQkhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vZWpiL1RpbWVyU0ZTQkhvbWUuamF2YQppbmRleCA5YzZmOTUxLi5mNmMwOGNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2VqYi9UaW1lclNGU0JIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVyc2VyaWFsaXphdGlvbi9lamIvVGltZXJTRlNCSG9tZS5qYXZhCkBAIC0yMyw2ICsyMyw2IEBACiBwdWJsaWMgaW50ZXJmYWNlIFRpbWVyU0ZTQkhvbWUKICAgICBleHRlbmRzIEVKQkhvbWUKIHsKLQlwdWJsaWMgVGltZXJTRlNCIGNyZWF0ZShTdHJpbmcgdGltZXJOYW1lKQorICAgIHB1YmxpYyBUaW1lclNGU0IgY3JlYXRlKFN0cmluZyB0aW1lck5hbWUpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vZWpiL1RpbWVyU0xTQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVyc2VyaWFsaXphdGlvbi9lamIvVGltZXJTTFNCLmphdmEKaW5kZXggNDAxNjI2Mi4uM2Q0MGYxNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVyc2VyaWFsaXphdGlvbi9lamIvVGltZXJTTFNCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVyc2VyaWFsaXphdGlvbi9lamIvVGltZXJTTFNCLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKICAgICBleHRlbmRzIEVKQkxvY2FsT2JqZWN0CiB7CiAKLQlwdWJsaWMgVGltZXIgY3JlYXRlVGltZXIoaW50IG1zKTsKKyAgICBwdWJsaWMgVGltZXIgY3JlYXRlVGltZXIoaW50IG1zKTsKIAogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2VqYi9UaW1lclNMU0JFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vZWpiL1RpbWVyU0xTQkVKQi5qYXZhCmluZGV4IGRlMGM4YzUuLmRhNTQ5NjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vZWpiL1RpbWVyU0xTQkVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vZWpiL1RpbWVyU0xTQkVKQi5qYXZhCkBAIC0yNCwzNSArMjQsMzUgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIAogcHVibGljIGNsYXNzIFRpbWVyU0xTQkVKQgotICAgIGltcGxlbWVudHMgVGltZWRPYmplY3QsIFNlc3Npb25CZWFuIAorICAgIGltcGxlbWVudHMgVGltZWRPYmplY3QsIFNlc3Npb25CZWFuCiB7Ci0JcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjb250ZXh0OworICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY29udGV4dDsKIAotCXB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHt9CisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkge30KIAotCXB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JCWNvbnRleHQgPSBzYzsKLQl9CisgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKKyAgICAgICAgY29udGV4dCA9IHNjOworICAgIH0KIAotCS8vIGJ1c2luZXNzIG1ldGhvZCB0byBjcmVhdGUgYSB0aW1lcgotCXB1YmxpYyBUaW1lciBjcmVhdGVUaW1lcihpbnQgbXMpIHsKLQkJVGltZXJTZXJ2aWNlIHRpbWVyU2VydmljZSA9IGNvbnRleHQuZ2V0VGltZXJTZXJ2aWNlKCk7Ci0JCVRpbWVyIHRpbWVyID0gdGltZXJTZXJ2aWNlLmNyZWF0ZVRpbWVyKG1zLCAiY3JlYXRlZCB0aW1lciIpOwotCQlyZXR1cm4gdGltZXI7Ci0JfQorICAgIC8vIGJ1c2luZXNzIG1ldGhvZCB0byBjcmVhdGUgYSB0aW1lcgorICAgIHB1YmxpYyBUaW1lciBjcmVhdGVUaW1lcihpbnQgbXMpIHsKKyAgICAgICAgVGltZXJTZXJ2aWNlIHRpbWVyU2VydmljZSA9IGNvbnRleHQuZ2V0VGltZXJTZXJ2aWNlKCk7CisgICAgICAgIFRpbWVyIHRpbWVyID0gdGltZXJTZXJ2aWNlLmNyZWF0ZVRpbWVyKG1zLCAiY3JlYXRlZCB0aW1lciIpOworICAgICAgICByZXR1cm4gdGltZXI7CisgICAgfQogCi0JLy8gdGltZXIgY2FsbGJhY2sgbWV0aG9kCi0JcHVibGljIHZvaWQgZWpiVGltZW91dChUaW1lciB0aW1lcikgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWVyU0xTQjo6ZWpiVGltZW91dCgpIGludm9rZWQiKTsKLQl9Ci0gICAgCi0JcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KKyAgICAvLyB0aW1lciBjYWxsYmFjayBtZXRob2QKKyAgICBwdWJsaWMgdm9pZCBlamJUaW1lb3V0KFRpbWVyIHRpbWVyKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZXJTTFNCOjplamJUaW1lb3V0KCkgaW52b2tlZCIpOworICAgIH0KIAotCXB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgeworICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CisKKyAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiSW4gVGltZXJTTFNCLmFjdGl2YXRlKCkiKTsKICAgICB9CiAKLQlwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7CisgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJJbiBUaW1lclNMU0IucGFzc2l2YXRlKCkiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2VqYi9UaW1lclNMU0JIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2VqYi9UaW1lclNMU0JIb21lLmphdmEKaW5kZXggYzY1ZTUwMC4uNjA3YzlkYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVyc2VyaWFsaXphdGlvbi9lamIvVGltZXJTTFNCSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vZWpiL1RpbWVyU0xTQkhvbWUuamF2YQpAQCAtMjIsNiArMjIsNiBAQAogcHVibGljIGludGVyZmFjZSBUaW1lclNMU0JIb21lCiAgICAgZXh0ZW5kcyBFSkJMb2NhbEhvbWUKIHsKLQlUaW1lclNMU0IgY3JlYXRlKCkKKyAgICBUaW1lclNMU0IgY3JlYXRlKCkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDY1ZWRiMmEuLjE0ZWIxZTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjIgKzE1LDIyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItdGltZXItdGltZXJ0ZXN0cyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImRic2NoZW1hIiB2YWx1ZT0iQmFyLmRic2NoZW1hIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9idWlsZC54bWwKaW5kZXggOWM0MTE2YS4uN2E1ZWM1YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywqKi9UaW1lclN0dWZmKi5jbGFzcywqKi9BcHBJbmZvLmNsYXNzLCoqL0Jhci5jbGFzcywqKi9CYXJIb21lLmNsYXNzLCoqL0JhclByaW1hcnlLZXkuY2xhc3MsKiovRm9vLmNsYXNzLCoqL0Zvb0hvbWUuY2xhc3MsKiovU3RhdGVmdWwuY2xhc3MsKiovU3RhdGVmdWxIb21lLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03MywxNCArNzMsMTQgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAzMTU3NTQ3Li44MmNlZjMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC00OCwxMCArNDgsMTAgQEAKICAgICBwcml2YXRlIFF1ZXVlU2VuZGVyIHF1ZXVlU2VuZGVyOwogICAgICovCiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgeyAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAgICAgICAgIGJvb2xlYW4gZG9KbXMgPSBmYWxzZTsgLy8gVE9ETyAoYXJncy5sZW5ndGggPT0gMSkgJiYgKGFyZ3NbMF0uZXF1YWxzSWdub3JlQ2FzZSgiam1zIikpOwogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImVqYi10aW1lci10aW1lcnRlc3RzIik7CkBAIC02MywxOCArNjMsMTggQEAKICAgICAgICAgVGltZXJTdHVmZiBmb28gPSBuZXcgQ2xpZW50KCkuZG9Gb29UZXN0KCJlamJzL0Zvb19CTVQiLCBkb0ptcyk7CiAKIAotCS8qKiBUT0RPCisgICAgLyoqIFRPRE8KICAgICAgICAgbmV3IENsaWVudCgpLmRvTWVzc2FnZURyaXZlblRlc3QoImptcy9UaW1lck1EQlF1ZXVlX0NNVCIsIGZvbywgZG9KbXMpOwogICAgICAgICBuZXcgQ2xpZW50KCkuZG9NZXNzYWdlRHJpdmVuVGVzdCgiam1zL1RpbWVyTURCUXVldWVfQk1UIiwgZm9vLCBkb0ptcyk7Ci0JKiovCisgICAgKiovCiAKLQluZXcgQ2xpZW50KCkuZG9TdGF0ZWZ1bFRlc3QoImVqYnMvU3RhdGVmdWxfQ01UIiwgZm9vLGRvSm1zKTsKLQluZXcgQ2xpZW50KCkuZG9TdGF0ZWZ1bFRlc3QoImVqYnMvU3RhdGVmdWxfQk1UIiwgZm9vLCBkb0ptcyk7CisgICAgbmV3IENsaWVudCgpLmRvU3RhdGVmdWxUZXN0KCJlamJzL1N0YXRlZnVsX0NNVCIsIGZvbyxkb0ptcyk7CisgICAgbmV3IENsaWVudCgpLmRvU3RhdGVmdWxUZXN0KCJlamJzL1N0YXRlZnVsX0JNVCIsIGZvbywgZG9KbXMpOwogCiAgICAgICAgIG5ldyBDbGllbnQoKS5kb0JhclRlc3QoImVqYnRpbWVyL0Jhcl9DTVQiLCBkb0ptcyk7CiAKICAgICAgICAgdHJ5IHsKLQkgICAgICgoRm9vKSBmb28pLnJlbW92ZSgpOworICAgICAgICAgKChGb28pIGZvbykucmVtb3ZlKCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTk1LDE2ICs5NSwxNiBAQAogCiAgICAgcHVibGljIHZvaWQgZG9NZXNzYWdlRHJpdmVuVGVzdChTdHJpbmcgam5kaU5hbWUsIFRpbWVyU3R1ZmYgZm9vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBqbXMpIHsKLQkvKioKKyAgICAvKioKICAgICAgICAgaWYoIGptcyApIHsgcmV0dXJuOyB9CiAKICAgICAgICAgdHJ5IHsKIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKipQRy0+IGluIGRvTWVzc2FnZURyaXZlblRlc3QoKSBmb3Igam5kaU5hbWUgPSAiICsgam5kaU5hbWUgKTsKLSAgICAgICAgICAgCisKICAgICAgICAgICAgIHNldHVwKCk7CiBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqUEctPiBpbiBkb01lc3NhZ2VEcml2ZW5UZXN0KCkgYWZ0ZXIgc2V0dXAiKTsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgIFF1ZXVlIG1lc3NhZ2VEcml2ZW5EZXN0ID0gKFF1ZXVlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvIiArIGpuZGlOYW1lKTsKKyAgICAgICAgIFF1ZXVlIG1lc3NhZ2VEcml2ZW5EZXN0ID0gKFF1ZXVlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvIiArIGpuZGlOYW1lKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb2luZyBtZXNzYWdlIGRyaXZlbiB0ZXN0cyBmb3IiICsgam5kaU5hbWUpOwogCkBAIC0xMjIsNyArMTIyLDcgQEAKICAgICAgICAgICAgIGxvbmcgc2xlZXBUaW1lID0gMzAwMDA7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwaW5nIGZvciAiICsgc2xlZXBUaW1lIC8gMTAwMCArICIgc2Vjb25kcyIpOwogICAgICAgICAgICAgVGhyZWFkLnNsZWVwKHNsZWVwVGltZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgYWxsIGZvbyB0aW1lcnMgc2hvdWxkIGhhdmUgYmVlbiBjYW5jZWxsZWQKICAgICAgICAgICAgIC8vIGJ5IHRoZSBtZXNzYWdlIGJlYW4uCiAgICAgICAgICAgICBmb28uYXNzZXJ0Tm9UaW1lcnMoKTsKQEAgLTEzNiwxMiArMTM2LDEyIEBACiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBjbGVhbnVwKCk7CiAgICAgICAgIH0KLQkqKi8KKyAgICAqKi8KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0JhclRlc3QoU3RyaW5nIGpuZGlOYW1lLCBib29sZWFuIGptcykgewogICAgICAgICB0cnkgewotCSAgICBPYmplY3QgYmFyT2JqcmVmID0gY29udGV4dC5sb29rdXAoam5kaU5hbWUpOworICAgICAgICBPYmplY3QgYmFyT2JqcmVmID0gY29udGV4dC5sb29rdXAoam5kaU5hbWUpOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvQmFyVGVzdCgpOiBEb2luZyBiYXIgdGltZXIgdGVzdCBmb3IgIiArIGpuZGlOYW1lKTsKIApAQCAtMTY4LDcgKzE2OCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvQmFyVGVzdCgpOiBCYXIgYWZ0ZXIgZmluZCAiICk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoam1zKSB7Ci0gICAgICAgICAgICAgICAgZG9KbXNUZXN0KGJhcik7ICAgIAorICAgICAgICAgICAgICAgIGRvSm1zVGVzdChiYXIpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBkb1Rlc3QoYmFyKTsKICAgICAgICAgICAgICAgICAoKEVKQk9iamVjdCliYXIpLnJlbW92ZSgpOwpAQCAtMTg1LDIxICsxODUsMjEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewotCS8qKgorICAgIC8qKgogLy9QRy0+ICAgICAgICBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgIAotICAgICAgICBUb3BpY0Nvbm5lY3Rpb25GYWN0b3J5IHRvcGljQ29uRmFjdG9yeSA9IAorCisgICAgICAgIFRvcGljQ29ubmVjdGlvbkZhY3RvcnkgdG9waWNDb25GYWN0b3J5ID0KICAgICAgICAgICAgIChUb3BpY0Nvbm5lY3Rpb25GYWN0b3J5KSBjb250ZXh0Lmxvb2t1cAogICAgICAgICAgICAgICAgICgiamF2YTpjb21wL2Vudi9qbXMvTXlUb3BpY0Nvbm5lY3Rpb25GYWN0b3J5Iik7Ci0gICAgICAgICAgICAgICAgCisKIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKipQRy0+IHNldHVwKCk6IGFmdGVyICBsb29rdXAiKTsKICAgICAgICAgdG9waWNDb24gPSB0b3BpY0NvbkZhY3RvcnkuY3JlYXRlVG9waWNDb25uZWN0aW9uKCk7CiAKIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKipQRy0+IHNldHVwKCk6IGFmdGVyICBjcmVhdGVUb3BpY0Nvbm5lY3Rpb24iKTsKLSAgICAgICAgdG9waWNTZXNzaW9uID0gCisgICAgICAgIHRvcGljU2Vzc2lvbiA9CiAgICAgICAgICAgICB0b3BpY0Nvbi5jcmVhdGVUb3BpY1Nlc3Npb24oZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CiBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqUEctPiBzZXR1cCgpOiBhZnRlciAgY3JlYXRlVG9waWNTZXNzaW9uIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAvLyBQcm9kdWNlciB3aWxsIGJlIHNwZWNpZmllZCB3aGVuIGFjdHVhbCBtc2cgaXMgcHVibGlzaGVkLgogICAgICAgICB0b3BpY1B1Ymxpc2hlciA9IHRvcGljU2Vzc2lvbi5jcmVhdGVQdWJsaXNoZXIobnVsbCk7CiBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqUEctPiBzZXR1cCgpOiBhZnRlciBjcmVhdGVQdWJsaXNoZXIiKTsKQEAgLTIwNywyNSArMjA3LDI1IEBACiAgICAgICAgIHRvcGljQ29uLnN0YXJ0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKipQRy0+IHNldHVwKCk6IGFmdGVyIHN0YXJ0Iik7CiAKLSAgICAgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxdWV1ZUNvbkZhY3RvcnkgPSAKKyAgICAgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxdWV1ZUNvbkZhY3RvcnkgPQogICAgICAgICAgICAgKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpIGNvbnRleHQubG9va3VwCiAgICAgICAgICAgICAoImphdmE6Y29tcC9lbnYvam1zL015UXVldWVDb25uZWN0aW9uRmFjdG9yeSIpOwogCiAgICAgICAgIHF1ZXVlQ29uID0gcXVldWVDb25GYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwogCiAgICAgICAgIHF1ZXVlU2Vzc2lvbiA9IHF1ZXVlQ29uLmNyZWF0ZVF1ZXVlU2Vzc2lvbgotICAgICAgICAgICAgKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOyAKKyAgICAgICAgICAgIChmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKIAogICAgICAgICAvLyBQcm9kdWNlciB3aWxsIGJlIHNwZWNpZmllZCB3aGVuIGFjdHVhbCBtc2cgaXMgc2VudC4KLSAgICAgICAgcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKG51bGwpOyAgICAgICAgCisgICAgICAgIHF1ZXVlU2VuZGVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVNlbmRlcihudWxsKTsKIAogICAgICAgICBxdWV1ZUNvbi5zdGFydCgpOwotCSoqLworICAgICoqLwogCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgY2xlYW51cCgpIHsKLQkvKioKKyAgICAvKioKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmKCB0b3BpY0NvbiAhPSBudWxsICkgewogICAgICAgICAgICAgICAgIHRvcGljQ29uLmNsb3NlKCk7CkBAIC0yMzksNyArMjM5LDcgQEAKICAgICAgICAgKiovCiAgICAgfQogICAgIC8qKgotICAgIHB1YmxpYyB2b2lkIHB1Ymxpc2hNc2dzKFRvcGljIHRvcGljLCBNZXNzYWdlIG1zZywgaW50IG51bSkgCisgICAgcHVibGljIHZvaWQgcHVibGlzaE1zZ3MoVG9waWMgdG9waWMsIE1lc3NhZ2UgbXNnLCBpbnQgbnVtKQogICAgICAgICB0aHJvd3MgSk1TRXhjZXB0aW9uIHsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlB1Ymxpc2hpbmcgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHRvcGljKTsKQEAgLTI0Nyw3ICsyNDcsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgc2VuZE1zZ3MoUXVldWUgcXVldWUsIE1lc3NhZ2UgbXNnLCBpbnQgbnVtKSAKKyAgICBwdWJsaWMgdm9pZCBzZW5kTXNncyhRdWV1ZSBxdWV1ZSwgTWVzc2FnZSBtc2csIGludCBudW0pCiAgICAgICAgIHRocm93cyBKTVNFeGNlcHRpb24gewogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHVibGlzaGluZyBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUpOwpAQCAtMzI3LDM3ICszMjcsMzcgQEAKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvVGVzdCgpOiBjcmVhdGluZyB0aGUgdGltZXJoYW5kbGUiKTsKICAgICAgICAgVGltZXJIYW5kbGUgdGltZXJIYW5kbGUgPSB0aW1lclN0dWZmLmNyZWF0ZVRpbWVyKDEsIDEpOwotICAgICAgICAKKwogICAgICAgICAvLwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvVGVzdCgpOiBjcmVhdGluZyB0aGUgdGltZXJoYW5kbGUyIik7CiAgICAgICAgIFRpbWVySGFuZGxlIHRpbWVySGFuZGxlMiA9IHRpbWVyU3R1ZmYuY3JlYXRlVGltZXIoMTAwMDAsIDEwMDAwKTsKLSAgICAgICAgCisKICAgICAgICAgLy8KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkb1Rlc3QoKTogY3JlYXRpbmcgdGhlIHRpbWVyaGFuZGxlMyIpOwogICAgICAgICBUaW1lckhhbmRsZSB0aW1lckhhbmRsZTMgPSB0aW1lclN0dWZmLmNyZWF0ZVRpbWVyKG5ldyBEYXRlKCkpOwotICAgICAgICAKKwogICAgICAgICAvLwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvVGVzdCgpOiBjcmVhdGluZyB0aGUgdGltZXJoYW5kbGU0Iik7CiAgICAgICAgIFRpbWVySGFuZGxlIHRpbWVySGFuZGxlNCA9IHRpbWVyU3R1ZmYuY3JlYXRlVGltZXIobmV3IERhdGUobmV3IERhdGUoKS5nZXRUaW1lKCkgKyAyMDAwKSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZG9UZXN0KCk6IGNyZWF0aW5nIHRoZSB0aW1lcmhhbmRsZTUiKTsKICAgICAgICAgVGltZXJIYW5kbGUgdGltZXJIYW5kbGU1ID0gdGltZXJTdHVmZi5jcmVhdGVUaW1lcihuZXcgRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWUoKSArIDIwMDAwKSwgMTAwMDApOwogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZG9UZXN0KCk6IGNyZWF0aW5nIHRoZSBjcmVhdGVUaW1lckFuZFJvbGxiYWNrIik7CiAgICAgICAgIHRpbWVyU3R1ZmYuY3JlYXRlVGltZXJBbmRSb2xsYmFjaygyMDAwMCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZG9UZXN0KCk6IGNyZWF0aW5nIHRoZSBjcmVhdGVUaW1lckFuZENhbmNlbCIpOwogICAgICAgICB0aW1lclN0dWZmLmNyZWF0ZVRpbWVyQW5kQ2FuY2VsKDIwMDAwKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gQEBAIHJlZXZhbHVhdGUgZG91YmxlIGNhbmNlbCBsb2dpYwogICAgICAgICAvL3RpbWVyU3R1ZmYuY3JlYXRlVGltZXJBbmRDYW5jZWxBbmRDYW5jZWwoMjAwMDApOwotICAgICAgICAKKwogICAgICAgICAvLwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvVGVzdCgpOiBjcmVhdGluZyB0aGUgY3JlYXRlVGltZXJBbmRDYW5jZWxBbmRSb2xsYmFjayIpOwogICAgICAgICB0aW1lclN0dWZmLmNyZWF0ZVRpbWVyQW5kQ2FuY2VsQW5kUm9sbGJhY2soMjAwMDApOwotICAgICAgICAKKwogICAgICAgICAvLwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvVGVzdCgpOiBjcmVhdGluZyB0aGUgY2FuY2VsVGltZXIodGltZXJoYW5kbGUyKSIpOwogICAgICAgICB0aW1lclN0dWZmLmNhbmNlbFRpbWVyKHRpbWVySGFuZGxlMik7CkBAIC0zNjgsMTggKzM2OCwxOCBAQAogICAgICAgICB0aW1lclN0dWZmLmNhbmNlbFRpbWVyQW5kUm9sbGJhY2sodGltZXJIYW5kbGU1KTsKICAgICAgICAgLy8gQEBAIHJlZXZhbHVhdGUgZG91YmxlIGNhbmNlbCBsb2dpYwogICAgICAgICAvL3RpbWVyU3R1ZmYuY2FuY2VsVGltZXJBbmRDYW5jZWxBbmRSb2xsYmFjayh0aW1lckhhbmRsZTYpOwotICAgICAgICAKLSAgICAgICAgVGltZXJIYW5kbGUgdGltZXJIYW5kbGU3ID0gCisKKyAgICAgICAgVGltZXJIYW5kbGUgdGltZXJIYW5kbGU3ID0KICAgICAgICAgICAgIHRpbWVyU3R1ZmYuY3JlYXRlVGltZXIoMSwgMSwgImNhbmNlbFRpbWVyIik7Ci0gICAgICAgIFRpbWVySGFuZGxlIHRpbWVySGFuZGxlOCA9IAorICAgICAgICBUaW1lckhhbmRsZSB0aW1lckhhbmRsZTggPQogICAgICAgICAgICAgdGltZXJTdHVmZi5jcmVhdGVUaW1lcigxLCAxLCAiY2FuY2VsVGltZXJBbmRSb2xsYmFjayIpOwotICAgICAgICBUaW1lckhhbmRsZSB0aW1lckhhbmRsZTkgPSAgICAgICAgIAorICAgICAgICBUaW1lckhhbmRsZSB0aW1lckhhbmRsZTkgPQogICAgICAgICAgICAgdGltZXJTdHVmZi5jcmVhdGVUaW1lcigxLCAiY2FuY2VsVGltZXJBbmRSb2xsYmFjayIpOwogCiAgICAgICAgIFRpbWVySGFuZGxlIHRpbWVySGFuZGxlMTEgPSB0aW1lclN0dWZmLmdldFRpbWVSZW1haW5pbmdUZXN0MSgyMCk7CiAgICAgICAgIHRpbWVyU3R1ZmYuZ2V0VGltZVJlbWFpbmluZ1Rlc3QyKDIwLCB0aW1lckhhbmRsZTExKTsKICAgICAgICAgdGltZXJTdHVmZi5nZXRUaW1lUmVtYWluaW5nVGVzdDIoMjAsIHRpbWVySGFuZGxlKTsKLSAgICAgICAgCisKICAgICAgICAgVGltZXJIYW5kbGUgdGltZXJIYW5kbGUxMiA9IHRpbWVyU3R1ZmYuZ2V0TmV4dFRpbWVvdXRUZXN0MSgyMCk7CiAgICAgICAgIHRpbWVyU3R1ZmYuZ2V0TmV4dFRpbWVvdXRUZXN0MigyMCwgdGltZXJIYW5kbGUxMik7CiAgICAgICAgIHRpbWVyU3R1ZmYuZ2V0TmV4dFRpbWVvdXRUZXN0MigyMCwgdGltZXJIYW5kbGUpOwpAQCAtNDMwLDcgKzQzMCw3IEBACiAKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb0VudGl0eVRlc3RzKEJhckhvbWUgYmFySG9tZSkgCisgICAgcHVibGljIHZvaWQgZG9FbnRpdHlUZXN0cyhCYXJIb21lIGJhckhvbWUpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBUaW1lclN0dWZmIGJhcjEgPSBiYXJIb21lLmNyZWF0ZShuZXcgTG9uZygxKSwgIjEiKTsKICAgICAgICAgVGltZXJIYW5kbGUgdGltZXJIYW5kbGUxID0gYmFyMS5jcmVhdGVUaW1lcigxMDAwMDAwMDApOwpAQCAtNDU0LDcgKzQ1NCw3IEBACiAgICAgICAgIGluZm8gPSBiYXI1LmdldEluZm8odGltZXJIYW5kbGU1KTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmZvID0gIiArIGluZm8pOwogICAgICAgICBiYXJIb21lLnJlbW92ZSgoKEVKQk9iamVjdCliYXI1KS5nZXRQcmltYXJ5S2V5KCkpOwotICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHRpbWVyIHNob3VsZCBub3QgZXhpc3Qgc2luY2Ugd2UgcmVtb3ZlZCBpdHMgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgdGltZXIgc2hvdWxkIG5vdCBleGlzdCBzaW5jZSB3ZSByZW1vdmVkIGl0cwogICAgICAgICAvLyB0aW1lZCBvYmplY3QKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGluZm8gPSBiYXI1LmdldEluZm9Ob0Vycm9yKHRpbWVySGFuZGxlNSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKaW5kZXggMWJhMThhZS4uYmQ2MTU4MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbApAQCAtNjcsMTQgKzY3LDE0IEBACiAgICAgPHJlcy1hdXRoPkNvbnRhaW5lcjwvcmVzLWF1dGg+CiAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgIDwvcmVzb3VyY2UtcmVmPgotICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+ICAgICAgIAorICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+CiAgICAgPGRlc2NyaXB0aW9uPnRpbWVydGVzdCBkZXN0aW5hdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWU+am1zL1RpbWVyTURCUXVldWVfQ01UPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPgogICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+amFrYXJ0YS5qbXMuUXVldWU8L21lc3NhZ2UtZGVzdGluYXRpb24tdHlwZT4KICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi11c2FnZT5Qcm9kdWNlczwvbWVzc2FnZS1kZXN0aW5hdGlvbi11c2FnZT4KICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1saW5rPlRpbWVyTURCUXVldWVfQ01UPC9tZXNzYWdlLWRlc3RpbmF0aW9uLWxpbms+CiAgIDwvbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+Ci0gIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4gICAgICAgCisgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4KICAgICA8ZGVzY3JpcHRpb24+dGltZXJ0ZXN0IGRlc3RpbmF0aW9uPC9kZXNjcmlwdGlvbj4KICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT5qbXMvVGltZXJNREJRdWV1ZV9CTVQ8L21lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWU+CiAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tdHlwZT5qYWthcnRhLmptcy5RdWV1ZTwvbWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggNmYwMGRkMC4uZWI1YmRmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgIDxyZXMtYXV0aD5Db250YWluZXI8L3Jlcy1hdXRoPgogICAgICAgICA8cmVzLXNoYXJpbmctc2NvcGU+U2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmPiAgICAgICAKKyAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4KICAgICAgICAgPGRlc2NyaXB0aW9uPnRpbWVydGVzdCBkZXN0aW5hdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPmptcy9NeVF1ZXVlPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPgogICAgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlPmpha2FydGEuam1zLlF1ZXVlPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+CkBAIC0xMTIsNyArMTEyLDcgQEAKICAgICAgICAgPHJlcy1hdXRoPkNvbnRhaW5lcjwvcmVzLWF1dGg+CiAgICAgICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+ICAgICAgIAorICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmPgogICAgICAgICA8ZGVzY3JpcHRpb24+dGltZXJ0ZXN0IGRlc3RpbmF0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWU+am1zL015UXVldWU8L21lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWU+CiAgICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+amFrYXJ0YS5qbXMuUXVldWU8L21lc3NhZ2UtZGVzdGluYXRpb24tdHlwZT4KQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgICA8cmVzLWF1dGg+Q29udGFpbmVyPC9yZXMtYXV0aD4KICAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4gICAgICAgCisgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+CiAgICAgICAgIDxkZXNjcmlwdGlvbj50aW1lcnRlc3QgZGVzdGluYXRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT5qbXMvTXlRdWV1ZTwvbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT4KICAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tdHlwZT5qYWthcnRhLmptcy5RdWV1ZTwvbWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlPgpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgICAgIDxyZXMtYXV0aD5Db250YWluZXI8L3Jlcy1hdXRoPgogICAgICAgICA8cmVzLXNoYXJpbmctc2NvcGU+U2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmPiAgICAgICAKKyAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4KICAgICAgICAgPGRlc2NyaXB0aW9uPnRpbWVydGVzdCBkZXN0aW5hdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPmptcy9NeVF1ZXVlPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPgogICAgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlPmpha2FydGEuam1zLlF1ZXVlPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+CkBAIC0yMDUsNyArMjA1LDcgQEAKICAgICAgICAgPHJlcy1hdXRoPkNvbnRhaW5lcjwvcmVzLWF1dGg+CiAgICAgICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+ICAgICAgIAorICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmPgogICAgICAgICA8ZGVzY3JpcHRpb24+dGltZXJ0ZXN0IGRlc3RpbmF0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWU+am1zL015UXVldWU8L21lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWU+CiAgICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+amFrYXJ0YS5qbXMuUXVldWU8L21lc3NhZ2UtZGVzdGluYXRpb24tdHlwZT4KQEAgLTIzNyw3ICsyMzcsNyBAQAogICAgICAgICA8cmVzLWF1dGg+Q29udGFpbmVyPC9yZXMtYXV0aD4KICAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4gICAgICAgCisgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+CiAgICAgICAgIDxkZXNjcmlwdGlvbj50aW1lcnRlc3QgZGVzdGluYXRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT5qbXMvTXlRdWV1ZTwvbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT4KICAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tdHlwZT5qYWthcnRhLmptcy5RdWV1ZTwvbWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlPgpAQCAtMjY5LDcgKzI2OSw3IEBACiAgICAgICAgIDxyZXMtYXV0aD5Db250YWluZXI8L3Jlcy1hdXRoPgogICAgICAgICA8cmVzLXNoYXJpbmctc2NvcGU+U2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmPiAgICAgICAKKyAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4KICAgICAgICAgPGRlc2NyaXB0aW9uPnRpbWVydGVzdCBkZXN0aW5hdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPmptcy9NeVF1ZXVlPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPgogICAgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlPmpha2FydGEuam1zLlF1ZXVlPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvQXBwSW5mby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL0FwcEluZm8uamF2YQppbmRleCBkZDFjMzU2Li4wYmFmNzBmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvQXBwSW5mby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9BcHBJbmZvLmphdmEKQEAgLTI4LDYgKzI4LDYgQEAKIAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQogICAgIHsKLQlyZXR1cm4gZm9vOworICAgIHJldHVybiBmb287CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL0Jhci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL0Jhci5qYXZhCmluZGV4IDg5N2JiMGEuLmI2NTdjYTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9CYXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvQmFyLmphdmEKQEAgLTIwLDUgKzIwLDUgQEAKIGltcG9ydCBqYWthcnRhLmVqYi4qOwogCiBwdWJsaWMgaW50ZXJmYWNlIEJhciBleHRlbmRzIEVKQk9iamVjdCwgVGltZXJTdHVmZiB7Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9CYXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9CYXJFSkIuamF2YQppbmRleCA0OGMzY2Y2Li5lZjkxNWMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvQmFyRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL0JhckVKQi5qYXZhCkBAIC0xOSw5ICsxOSw5IEBACiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLio7CiAKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXJFSkIgCi0gICAgZXh0ZW5kcyBUaW1lclN0dWZmSW1wbCAKLSAgICBpbXBsZW1lbnRzIEVudGl0eUJlYW4sIFRpbWVkT2JqZWN0IAorcHVibGljIGFic3RyYWN0IGNsYXNzIEJhckVKQgorICAgIGV4dGVuZHMgVGltZXJTdHVmZkltcGwKKyAgICBpbXBsZW1lbnRzIEVudGl0eUJlYW4sIFRpbWVkT2JqZWN0CiB7CiAKICAgICBwcml2YXRlIEVKQkNvbnRleHQgY29udGV4dF87CkBAIC0zMiw3ICszMiw3IEBACiAKICAgICAvLyBwcmltYXJ5IGtleQogCi0gICAgcHVibGljIGFic3RyYWN0IExvbmcgZ2V0SWQoKTsgICAgICAKKyAgICBwdWJsaWMgYWJzdHJhY3QgTG9uZyBnZXRJZCgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldElkKExvbmcgdGltZXJJZCk7CiAKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFZhbHVlMigpOwpAQCAtNjYsNyArNjYsNyBAQAogCiAgICAgfQogCi0gICAgcHVibGljIEJhclByaW1hcnlLZXkgZWpiQ3JlYXRlKExvbmcgaWQsIFN0cmluZyB2YWx1ZTIpIAorICAgIHB1YmxpYyBCYXJQcmltYXJ5S2V5IGVqYkNyZWF0ZShMb25nIGlkLCBTdHJpbmcgdmFsdWUyKQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSAiZWpiQ3JlYXRlIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBCYXJFSkI6OmVqYkNyZWF0ZSIpOwpAQCAtODAsNyArODAsNyBAQAogICAgICAgICByZXR1cm4gbmV3IEJhclByaW1hcnlLZXkoaWQsIHZhbHVlMik7CiAgICAgfQogCi0gICAgcHVibGljIEJhclByaW1hcnlLZXkgZWpiQ3JlYXRlV2l0aFRpbWVyKExvbmcgaWQsIFN0cmluZyB2YWx1ZTIpIAorICAgIHB1YmxpYyBCYXJQcmltYXJ5S2V5IGVqYkNyZWF0ZVdpdGhUaW1lcihMb25nIGlkLCBTdHJpbmcgdmFsdWUyKQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSAiZWpiQ3JlYXRlV2l0aFRpbWVyIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBCYXJFSkI6OmVqYkNyZWF0ZVdpdGhUaW1lciIpOwpAQCAtOTIsNyArOTIsNyBAQAogICAgICAgICBzZXRWYWx1ZTIodmFsdWUyKTsKICAgICAgICAgcmV0dXJuIG5ldyBCYXJQcmltYXJ5S2V5KGlkLCB2YWx1ZTIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoTG9uZyBpZCwgU3RyaW5nIHZhbHVlMikgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gImVqYlBvc3RDcmVhdGUiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEJhckVKQjo6ZWpiUG9zdENyZWF0ZSIpOwpAQCAtMTEzLDcgKzExMyw3IEBACiAgICAgICAgICAgICBUaW1lclNlcnZpY2UgdGltZXJTZXJ2aWNlID0gY29udGV4dF8uZ2V0VGltZXJTZXJ2aWNlKCk7CiAgICAgICAgICAgICBUaW1lciB0aW1lciA9IHRpbWVyU2VydmljZS5jcmVhdGVUaW1lcgogICAgICAgICAgICAgICAgICgxLCAxLCBtZXRob2ROYW1lICsgaWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBDcmVhdGVFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwpAQCAtMTM5LDcgKzEzOSw3IEBACiAgICAgICAgIGNvbnRleHRfID0gbnVsbDsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJIb21lTmV3VGltZXJBbmRSZW1vdmVCZWFuKExvbmcgaWQsIFN0cmluZyB2YWx1ZTIpIAorICAgIHB1YmxpYyB2b2lkIGVqYkhvbWVOZXdUaW1lckFuZFJlbW92ZUJlYW4oTG9uZyBpZCwgU3RyaW5nIHZhbHVlMikKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gImVqYkhvbWVOZXdUaW1lckFuZFJlbW92ZUJlYW4iOwogICAgICAgICBjaGVja0NhbGxlclNlY3VyaXR5QWNjZXNzKG1ldGhvZE5hbWUsIHRydWUpOwpAQCAtMTU1LDcgKzE1NSw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJIb21lTmV3VGltZXJBbmRSZW1vdmVCZWFuQW5kUm9sbGJhY2soTG9uZyBpZCwgU3RyaW5nIHZhbHVlMikgCisgICAgcHVibGljIHZvaWQgZWpiSG9tZU5ld1RpbWVyQW5kUmVtb3ZlQmVhbkFuZFJvbGxiYWNrKExvbmcgaWQsIFN0cmluZyB2YWx1ZTIpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogICAgICAgICBnZXRUaW1lclNlcnZpY2UoImVqYkhvbWVOZXdUaW1lckFuZFJlbW92ZUJlYW5BbmRSb2xsYmFjayIsIHRydWUpOwogICAgICAgICBkb1RpbWVyU3R1ZmYoImVqYkhvbWVOZXdUaW1lckFuZFJlbW92ZUJlYW5BbmRSb2xsYmFjayIsIGZhbHNlKTsKQEAgLTE3MCw3ICsxNzAsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZWpiSG9tZU5peEJlYW5BbmRSb2xsYmFjayhCYXIgYikgCisgICAgcHVibGljIHZvaWQgZWpiSG9tZU5peEJlYW5BbmRSb2xsYmFjayhCYXIgYikKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgIGdldFRpbWVyU2VydmljZSgiZWpiSG9tZU5peEJlYW5BbmRSb2xsYmFjayIsIHRydWUpOwogICAgICAgICBkb1RpbWVyU3R1ZmYoImVqYkhvbWVOaXhCZWFuQW5kUm9sbGJhY2siLCBmYWxzZSk7CkBAIC0xOTIsNyArMTkyLDcgQEAKICAgICAgICAgZG9UaW1lclN0dWZmKG1ldGhvZE5hbWUsIHRydWUpOwogICAgICAgICBjbGVhbnVwKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSAiZWpiTG9hZCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gQmFyRUpCOjplamJMb2FkIik7CkBAIC0yMDEsNyArMjAxLDcgQEAKICAgICAgICAgZ2V0VGltZXJTZXJ2aWNlKG1ldGhvZE5hbWUsIHRydWUpOwogICAgICAgICBkb1RpbWVyU3R1ZmYobWV0aG9kTmFtZSwgdHJ1ZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7CiAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gImVqYlN0b3JlIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBCYXJFSkI6OmVqYlN0b3JlIik7CkBAIC0yMTAsNyArMjEwLDcgQEAKICAgICAgICAgZ2V0VGltZXJTZXJ2aWNlKG1ldGhvZE5hbWUsIHRydWUpOwogICAgICAgICBkb1RpbWVyU3R1ZmYobWV0aG9kTmFtZSwgdHJ1ZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewogICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9ICJlamJQYXNzaXZhdGUiOwogICAgICAgICBjaGVja0NhbGxlclNlY3VyaXR5QWNjZXNzKG1ldGhvZE5hbWUsIGZhbHNlKTsKQEAgLTIxOCw3ICsyMTgsNyBAQAogICAgICAgICBnZXRUaW1lclNlcnZpY2UobWV0aG9kTmFtZSwgdHJ1ZSk7CiAgICAgICAgIGRvVGltZXJTdHVmZihtZXRob2ROYW1lLCBmYWxzZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7CiAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gImVqYkFjdGl2YXRlIjsKICAgICAgICAgY2hlY2tDYWxsZXJTZWN1cml0eUFjY2VzcyhtZXRob2ROYW1lLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvQmFySG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL0JhckhvbWUuamF2YQppbmRleCBhZWVlMzdmLi42MDRjMTliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvQmFySG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9CYXJIb21lLmphdmEKQEAgLTIxLDEyICsyMSwxMiBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEJhckhvbWUgZXh0ZW5kcyBFSkJIb21lIHsKIAotICAgIEJhciBjcmVhdGUoTG9uZyB2YWx1ZTEsIFN0cmluZyB2YWx1ZTIpIAorICAgIEJhciBjcmVhdGUoTG9uZyB2YWx1ZTEsIFN0cmluZyB2YWx1ZTIpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICBCYXIgY3JlYXRlV2l0aFRpbWVyKExvbmcgdmFsdWUxLCBTdHJpbmcgdmFsdWUyKSAKKyAgICBCYXIgY3JlYXRlV2l0aFRpbWVyKExvbmcgdmFsdWUxLCBTdHJpbmcgdmFsdWUyKQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAgICAgQmFyIGZpbmRCeVByaW1hcnlLZXkoQmFyUHJpbWFyeUtleSBicGspIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHZvaWQgbmV3VGltZXJBbmRSZW1vdmVCZWFuKExvbmcgdmFsdWUxLCBTdHJpbmcgdmFsdWUyKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHZvaWQgbmV3VGltZXJBbmRSZW1vdmVCZWFuQW5kUm9sbGJhY2soTG9uZyB2YWx1ZTEsIFN0cmluZyB2YWx1ZTIpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgICAgdm9pZCBuaXhCZWFuQW5kUm9sbGJhY2soQmFyIGIpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvQmFyUHJpbWFyeUtleS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL0JhclByaW1hcnlLZXkuamF2YQppbmRleCAzMjhjNjM3Li43MGI1OGMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvQmFyUHJpbWFyeUtleS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9CYXJQcmltYXJ5S2V5LmphdmEKQEAgLTM0LDIxICszNCwyMSBAQAogCiAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvdGhlcikKICAgICB7Ci0JaWYgKCBvdGhlciBpbnN0YW5jZW9mIEJhclByaW1hcnlLZXkgKSB7CisgICAgaWYgKCBvdGhlciBpbnN0YW5jZW9mIEJhclByaW1hcnlLZXkgKSB7CiAgICAgICAgICAgICBCYXJQcmltYXJ5S2V5IGJwayA9IChCYXJQcmltYXJ5S2V5KSBvdGhlcjsKLQkgICAgcmV0dXJuICgoaWQuZXF1YWxzKGJway5pZCkpIAorICAgICAgICByZXR1cm4gKChpZC5lcXVhbHMoYnBrLmlkKSkKICAgICAgICAgICAgICAgICAgICAgJiYgKHZhbHVlMi5lcXVhbHMoYnBrLnZhbHVlMikpKTsKICAgICAgICAgfQotCXJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpCiAgICAgewotCXJldHVybiBpZC5oYXNoQ29kZSgpOworICAgIHJldHVybiBpZC5oYXNoQ29kZSgpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQogICAgIHsKLQlyZXR1cm4gaWQgKyAiXyIgKyB2YWx1ZTI7CisgICAgcmV0dXJuIGlkICsgIl8iICsgdmFsdWUyOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9Gb29FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9Gb29FSkIuamF2YQppbmRleCA3ZDBiMzg4Li40YTU3YjExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvRm9vRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL0Zvb0VKQi5qYXZhCkBAIC01MCw3ICs1MCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQl0aGlzLnNjID0gc2M7CisgICAgdGhpcy5zYyA9IHNjOwogICAgICAgICBzZXRDb250ZXh0KHNjKTsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0VKQjo6c2V0U2Vzc2lvbkNvbnRleHQiKTsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYnRpbWVyLkZvbzo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJ0aW1lci5Gb286OmVqYkNyZWF0ZSAhISIpOwogICAgICAgICBzZXR1cEptc0Nvbm5lY3Rpb24oKTsKICAgICAgICAgY2hlY2tHZXRTZXRSb2xsYmFja09ubHkoImVqYkNyZWF0ZSIsIGZhbHNlKTsKICAgICAgICAgY2hlY2tDYWxsZXJTZWN1cml0eUFjY2VzcygiZWpiQ3JlYXRlIiwgZmFsc2UpOwpAQCAtODYsNiArODYsNiBAQAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKICAgICB9CiAKLSAgICAKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvTWVzc2FnZURyaXZlbkVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL01lc3NhZ2VEcml2ZW5FSkIuamF2YQppbmRleCAwY2M4ZmNkLi5jZTBjNzRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvTWVzc2FnZURyaXZlbkVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9NZXNzYWdlRHJpdmVuRUpCLmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIGltcG9ydCBqYWthcnRhLmptcy4qOwogaW1wb3J0IGpha2FydGEuZWpiLio7CiAKLXB1YmxpYyBjbGFzcyBNZXNzYWdlRHJpdmVuRUpCIGV4dGVuZHMgVGltZXJTdHVmZkltcGwgCitwdWJsaWMgY2xhc3MgTWVzc2FnZURyaXZlbkVKQiBleHRlbmRzIFRpbWVyU3R1ZmZJbXBsCiAgICAgaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwgVGltZWRPYmplY3QsIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgbWVzc2FnZSAiICsgaW5mbyArICIgLCByZWRlbGl2ZXJlZCA9ICIgKyByZWRlbGl2ZXJlZCk7CiAKICAgICAgICAgICAgIGlmIChpbmZvLmVxdWFscygidGVzdDEiKSApIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIG9uTWVzc2FnZSA6IEdvdCB0aCBmb3IgdGltZXIgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBvbk1lc3NhZ2UgOiBHb3QgdGggZm9yIHRpbWVyID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuZ2V0SW5mbygpKTsKICAgICAgICAgICAgICAgICBkb1RpbWVyU3R1ZmYoIm9uTWVzc2FnZSIsIHRydWUpOwogICAgICAgICAgICAgICAgIGdldEluZm8odGgpOwpAQCAtNDYsOSArNDYsOSBAQAogICAgICAgICAgICAgICAgIGdldFRpbWVSZW1haW5pbmdUZXN0Mig1LCB0aCk7CiAKICAgICAgICAgICAgICAgICBjYW5jZWxUaW1lcih0aCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBjcmVhdGVUaW1lckFuZENhbmNlbCgxMDAwMDAwMCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBUaW1lckhhbmRsZSB0MSA9IGNyZWF0ZVRpbWVyKDEwMDAwMDAsICJtZXNzYWdlZHJpdmVuZWpiIik7CiAgICAgICAgICAgICAgICAgY2FuY2VsVGltZXIodDEpOwogICAgICAgICAgICAgICAgIFRpbWVySGFuZGxlIHQyID0gY3JlYXRlVGltZXIoMTAwMDAsICJtZXNzYWdlZHJpdmVuZWpiIik7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmKCBpc0JNVCgpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsVGltZXIodGgpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsVGltZXJBbmRSb2xsYmFjayh0aCk7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsVGltZXJBbmRSb2xsYmFjayh0aCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYoIGluZm8uZXF1YWxzKCJ0ZXN0MyIpICkgewpAQCAtODEsOCArODEsOCBAQAogICAgICAgICAgICAgICAgIGNhbmNlbFRpbWVyKHRoKTsKICAgICAgICAgICAgICAgICBUaW1lckhhbmRsZSBjdGFyID0gY3JlYXRlVGltZXIoMSwgMSwgImNhbmNlbFRpbWVyQW5kUm9sbGJhY2siKTsKICAgICAgICAgICAgICAgICBjYW5jZWxUaW1lcihjdGFyKTsKLSAgICAgICAgICAgIH0gCi0gICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgIGNoZWNrQ2FsbGVyU2VjdXJpdHlBY2Nlc3MoImVqYlRpbWVvdXQiLCBmYWxzZSk7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWVzc2FnZURyaXZlbkVKQjo6ZWpiVGltZW91dCAtLT4gIiAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWVzc2FnZURyaXZlbkVKQjo6ZWpiVGltZW91dCAtLT4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgdC5nZXRJbmZvKCkpOwogICAgICAgICB9IGNhdGNoKFJ1bnRpbWVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnb3QgZXhjZXB0aW9uIHdoaWxlIGNhbGxpbmcgZ2V0SW5mbyIpOwpAQCAtMTExLDkgKzExMSw5IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjKSB7Ci0JdGhpcy5tZGMgPSBtZGM7CisgICAgdGhpcy5tZGMgPSBtZGM7CiAgICAgICAgIHNldENvbnRleHQobWRjKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYnRpbWVyLk1lc3NhZ2VEcml2ZW5FSkI6OnNldE1lc3NhZ2VEcml2ZW5Db250ZXh0ICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJ0aW1lci5NZXNzYWdlRHJpdmVuRUpCOjpzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCAhISIpOwogICAgICAgICBjaGVja0NhbGxlclNlY3VyaXR5QWNjZXNzKCJzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCIsIGZhbHNlKTsKIAogICAgICAgICBnZXRUaW1lclNlcnZpY2UoInNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IiwgZmFsc2UpOwpAQCAtMTIxLDcgKzEyMSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJ0aW1lci5NZXNzYWdlRHJpdmVuRUpCOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYnRpbWVyLk1lc3NhZ2VEcml2ZW5FSkI6OmVqYkNyZWF0ZSAhISIpOwogICAgICAgICBzZXR1cEptc0Nvbm5lY3Rpb24oKTsKICAgICAgICAgY2hlY2tHZXRTZXRSb2xsYmFja09ubHkoImVqYkNyZWF0ZSIsIGZhbHNlKTsKICAgICAgICAgY2hlY2tDYWxsZXJTZWN1cml0eUFjY2VzcygiZWpiQ3JlYXRlIiwgZmFsc2UpOwpAQCAtMTMwLDcgKzEzMCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gZWpidGltZXIuTWVzc2FnZURyaXZlbkVKQjo6ZWpiUmVtb3ZlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJ0aW1lci5NZXNzYWdlRHJpdmVuRUpCOjplamJSZW1vdmUgISEiKTsKICAgICAgICAgY2hlY2tDYWxsZXJTZWN1cml0eUFjY2VzcygiZWpiUmVtb3ZlIiwgZmFsc2UpOwogICAgICAgICBjaGVja0dldFNldFJvbGxiYWNrT25seSgiZWpiUmVtb3ZlIiwgZmFsc2UpOwogICAgICAgICBnZXRUaW1lclNlcnZpY2UoImVqYlJlbW92ZSIsIHRydWUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL1N0YXRlZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvU3RhdGVmdWxFSkIuamF2YQppbmRleCBlZmM5OTI3Li5hNTU0OThjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvU3RhdGVmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvU3RhdGVmdWxFSkIuamF2YQpAQCAtMjksNyArMjksNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JdGhpcy5zYyA9IHNjOworICAgIHRoaXMuc2MgPSBzYzsKICAgICAgICAgc2V0Q29udGV4dChzYyk7CiAKICAgICAgICAgY2hlY2tDYWxsZXJTZWN1cml0eUFjY2Vzcygic2V0U2Vzc2lvbkNvbnRleHQiLCBmYWxzZSk7CkBAIC0zNyw3ICszNyw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKFRpbWVySGFuZGxlIHRoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYnRpbWVyLlN0YXRlZnVsOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYnRpbWVyLlN0YXRlZnVsOjplamJDcmVhdGUgISEiKTsKIAogICAgICAgICB0aW1lckhhbmRsZSA9IHRoOwogCkBAIC02OCw4ICs2OCw4IEBACiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGFmdGVyQmVnaW4oKSB7ICAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBhZnRlckJlZ2luIik7IAorICAgIHB1YmxpYyB2b2lkIGFmdGVyQmVnaW4oKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gYWZ0ZXJCZWdpbiIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgVGltZXIgdCA9IHRpbWVySGFuZGxlLmdldFRpbWVyKCk7CiAgICAgICAgICAgICB0LmdldEluZm8oKTsKQEAgLTgyLDcgKzgyLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBiZWZvcmVDb21wbGV0aW9uKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIGJlZm9yZUNvbXBsZXRpb24iKTsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gYmVmb3JlQ29tcGxldGlvbiIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgVGltZXIgdCA9IHRpbWVySGFuZGxlLmdldFRpbWVyKCk7CiAgICAgICAgIH0gY2F0Y2goTm9TdWNoT2JqZWN0TG9jYWxFeGNlcHRpb24gbnNvbGUpIHsKQEAgLTk1LDcgKzk1LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBhZnRlckNvbXBsZXRpb24oYm9vbGVhbiBjb21taXR0ZWQpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBhZnRlckNvbXBsZXRpb24uIGNvbW1pdHRlZCA9ICIgKyBjb21taXR0ZWQpOyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBhZnRlckNvbXBsZXRpb24uIGNvbW1pdHRlZCA9ICIgKyBjb21taXR0ZWQpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgVGltZXIgdCA9IHRpbWVySGFuZGxlLmdldFRpbWVyKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIDogc2hvdWxkIGhhdmUgZ290dGVuIGV4Y2VwdGlvbiBpbiAiICsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9UaW1lclN0dWZmLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvVGltZXJTdHVmZi5qYXZhCmluZGV4IDNkZjBjYmEuLjQ3MDU1YzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9UaW1lclN0dWZmLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL1RpbWVyU3R1ZmYuamF2YQpAQCAtNjYsMTAgKzY2LDEwIEBACiAgICAgdm9pZCBhc3NlcnRUaW1lck5vdEFjdGl2ZShUaW1lckhhbmRsZSBoYW5kbGUpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICB2b2lkIHNlbmRNZXNzYWdlQW5kQ3JlYXRlVGltZXIoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBFeGNlcHRpb247Ci0gICAgdm9pZCByZWN2TWVzc2FnZUFuZENyZWF0ZVRpbWVyKGJvb2xlYW4gZXhwZWN0TWVzc2FnZSkgCisgICAgdm9pZCByZWN2TWVzc2FnZUFuZENyZWF0ZVRpbWVyKGJvb2xlYW4gZXhwZWN0TWVzc2FnZSkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgRXhjZXB0aW9uOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VBbmRDcmVhdGVUaW1lckFuZFJvbGxiYWNrKCkgCisgICAgdm9pZCBzZW5kTWVzc2FnZUFuZENyZWF0ZVRpbWVyQW5kUm9sbGJhY2soKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBFeGNlcHRpb247Ci0gICAgdm9pZCByZWN2TWVzc2FnZUFuZENyZWF0ZVRpbWVyQW5kUm9sbGJhY2soYm9vbGVhbiBleHBlY3RNZXNzYWdlKSAKKyAgICB2b2lkIHJlY3ZNZXNzYWdlQW5kQ3JlYXRlVGltZXJBbmRSb2xsYmFjayhib29sZWFuIGV4cGVjdE1lc3NhZ2UpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIEV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9UaW1lclN0dWZmSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL1RpbWVyU3R1ZmZJbXBsLmphdmEKaW5kZXggZTQ5NjMzNy4uMzA0NjVjZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL1RpbWVyU3R1ZmZJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL1RpbWVyU3R1ZmZJbXBsLmphdmEKQEAgLTM0LDE0ICszNCwxNCBAQAogaW1wb3J0IGpha2FydGEuam1zLlRleHRNZXNzYWdlOwogCiBwdWJsaWMgY2xhc3MgVGltZXJTdHVmZkltcGwgaW1wbGVtZW50cyBUaW1lclN0dWZmIHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUWF9DTVQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUWF9CTVQgPSAxOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUWF9VTlNQRUNJRklFRCA9IDI7Ci0gICAgCisKICAgICBwcml2YXRlIEVKQkNvbnRleHQgY29udGV4dF87CiAgICAgcHJpdmF0ZSBpbnQgdHhNb2RlID0gVFhfQ01UOwotICAgIAorCiAgICAgcHJpdmF0ZSBRdWV1ZSBxdWV1ZTsKICAgICBwcml2YXRlIFF1ZXVlU2Vzc2lvbiBzZXNzaW9uOwogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uIGNvbm5lY3Rpb247CkBAIC02MSwxMiArNjEsMTIgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgdHhNb2RlID0gVFhfVU5TUEVDSUZJRUQ7CiAgICAgICAgICAgICB9Ci0JICAgIC8qKiBUT0RPCisgICAgICAgIC8qKiBUT0RPCiAgICAgICAgICAgICBxdWV1ZSA9IChRdWV1ZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9NeVF1ZXVlIik7CiAKLSAgICAgICAgICAgIHFjRmFjdG9yeSA9IChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KSAKKyAgICAgICAgICAgIHFjRmFjdG9yeSA9IChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KQogICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvTXlRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5Iik7Ci0JICAgICoqLworICAgICAgICAqKi8KIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpAQCAtNzYsNyArNzYsNyBAQAogICAgIHByb3RlY3RlZCBib29sZWFuIGlzQ01UKCkgeyByZXR1cm4gdHhNb2RlID09IFRYX0NNVDsgfQogICAgIHByb3RlY3RlZCBib29sZWFuIGlzQk1UKCkgeyByZXR1cm4gdHhNb2RlID09IFRYX0JNVDsgfQogICAgIHByb3RlY3RlZCBib29sZWFuIGlzVHhVbnNwZWNpZmllZCgpIHsgcmV0dXJuIHR4TW9kZSA9PSBUWF9VTlNQRUNJRklFRDsgfQotICAgIAorCiAgICAgcHVibGljIFRpbWVySGFuZGxlIGNyZWF0ZVRpbWVyKGxvbmcgZHVyYXRpb24sIFN0cmluZyBpbmZvKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBFeGNlcHRpb24gewogICAgICAgICBUaW1lclNlcnZpY2UgdHMgPSBjb250ZXh0Xy5nZXRUaW1lclNlcnZpY2UoKTsKICAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZVRpbWVyKGR1cmF0aW9uLCBpbmZvKTsKQEAgLTg3LDMwICs4NywzMCBAQAogICAgICAgICByZXR1cm4gY3JlYXRlVGltZXIoZHVyYXRpb24sICJjcmVhdGVUaW1lcjxsb25nPiIgKyBkdXJhdGlvbik7CiAgICAgfQogCi0gICAgcHVibGljIFRpbWVySGFuZGxlIGNyZWF0ZVRpbWVyKGxvbmcgaW5pdGlhbER1cmF0aW9uLCBsb25nIGludGVydmFsKSAKKyAgICBwdWJsaWMgVGltZXJIYW5kbGUgY3JlYXRlVGltZXIobG9uZyBpbml0aWFsRHVyYXRpb24sIGxvbmcgaW50ZXJ2YWwpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVUaW1lcihpbml0aWFsRHVyYXRpb24sIGludGVydmFsLCAKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVRpbWVyKGluaXRpYWxEdXJhdGlvbiwgaW50ZXJ2YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3JlYXRlVGltZXI8bG9uZywgbG9uZz4iICsgaW5pdGlhbER1cmF0aW9uICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIiArIGludGVydmFsKTsKICAgICB9CiAKLSAgICBwdWJsaWMgVGltZXJIYW5kbGUgY3JlYXRlVGltZXIobG9uZyBpbml0aWFsRHVyYXRpb24sIGxvbmcgaW50ZXJ2YWwsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaW5mbykgCisgICAgcHVibGljIFRpbWVySGFuZGxlIGNyZWF0ZVRpbWVyKGxvbmcgaW5pdGlhbER1cmF0aW9uLCBsb25nIGludGVydmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaW5mbykKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgRXhjZXB0aW9uIHsKICAgICAgICAgaWYoIGlzQk1UKCkgKSB7CiAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogICAgICAgICB9CiAgICAgICAgIFRpbWVyU2VydmljZSB0cyA9IGNvbnRleHRfLmdldFRpbWVyU2VydmljZSgpOwotICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlVGltZXIoaW5pdGlhbER1cmF0aW9uLCBpbnRlcnZhbCwgCisgICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVUaW1lcihpbml0aWFsRHVyYXRpb24sIGludGVydmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEFwcEluZm8oaW5mbykpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgaWYoIGlzQk1UKCkgKSB7CiAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5jb21taXQoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdC5nZXRIYW5kbGUoKTsKICAgICB9CiAKLSAgICBwdWJsaWMgVGltZXJIYW5kbGUgY3JlYXRlVGltZXIoRGF0ZSBleHBpcmF0aW9uVGltZSkgCisgICAgcHVibGljIFRpbWVySGFuZGxlIGNyZWF0ZVRpbWVyKERhdGUgZXhwaXJhdGlvblRpbWUpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIEV4Y2VwdGlvbiB7CiAgICAgICAgIFRpbWVyU2VydmljZSB0cyA9IGNvbnRleHRfLmdldFRpbWVyU2VydmljZSgpOwogICAgICAgICBpZiggaXNCTVQoKSApIHsKQEAgLTEyOSw3ICsxMjksNyBAQAogICAgICAgICByZXR1cm4gdC5nZXRIYW5kbGUoKTsKICAgICB9CiAKLSAgICBwdWJsaWMgVGltZXJIYW5kbGUgY3JlYXRlVGltZXIoRGF0ZSBleHBpcmF0aW9uVGltZSwgbG9uZyBpbnRlcnZhbCkgCisgICAgcHVibGljIFRpbWVySGFuZGxlIGNyZWF0ZVRpbWVyKERhdGUgZXhwaXJhdGlvblRpbWUsIGxvbmcgaW50ZXJ2YWwpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgaWYoIGlzQk1UKCkgKSB7CkBAIC0xNzQsMTIgKzE3NCwxMiBAQAogCiAgICAgcHVibGljIHZvaWQgY3JlYXRlVGltZXJBbmRDYW5jZWxBbmRDYW5jZWwobG9uZyBkdXJhdGlvbikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgRXhjZXB0aW9uIHsKICAgICAgICAgaWYoIGlzVHhVbnNwZWNpZmllZCgpICkgewotICAgICAgICAgICAgcmV0dXJuOyAKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIGlmKCBpc0JNVCgpICkgewogICAgICAgICAgICAgY29udGV4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCkuYmVnaW4oKTsKICAgICAgICAgfQogICAgICAgICBUaW1lclNlcnZpY2UgdHMgPSBjb250ZXh0Xy5nZXRUaW1lclNlcnZpY2UoKTsKLSAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZVRpbWVyKGR1cmF0aW9uLCAiY3JlYXRlVGltZXJBbmRDYW5jZWxBbmRDYW5jZWwiIAorICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlVGltZXIoZHVyYXRpb24sICJjcmVhdGVUaW1lckFuZENhbmNlbEFuZENhbmNlbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZHVyYXRpb24pOwogICAgICAgICB0LmNhbmNlbCgpOwogICAgICAgICB0LmNhbmNlbCgpOwpAQCAtMTg4LDcgKzE4OCw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVUaW1lckFuZENhbmNlbEFuZFJvbGxiYWNrKGxvbmcgZHVyYXRpb24pIAorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRpbWVyQW5kQ2FuY2VsQW5kUm9sbGJhY2sobG9uZyBkdXJhdGlvbikKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgRXhjZXB0aW9uIHsKICAgICAgICAgaWYoIGlzVHhVbnNwZWNpZmllZCgpICkgewogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTk2LDcgKzE5Niw3IEBACiAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogICAgICAgICB9CiAgICAgICAgIFRpbWVyU2VydmljZSB0cyA9IGNvbnRleHRfLmdldFRpbWVyU2VydmljZSgpOwotICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlVGltZXIoZHVyYXRpb24sICJjcmVhdGVUaW1lckFuZENhbmNlbEFuZFJvbGxiYWNrIiAKKyAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZVRpbWVyKGR1cmF0aW9uLCAiY3JlYXRlVGltZXJBbmRDYW5jZWxBbmRSb2xsYmFjayIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZHVyYXRpb24pOwogICAgICAgICB0LmNhbmNlbCgpOwogICAgICAgICBpZiggaXNCTVQoKSApIHsKQEAgLTI0Myw4ICsyNDMsOCBAQAogICAgICAgICAgICAgY29udGV4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCkuY29tbWl0KCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgY2FuY2VsVGltZXJBbmRSb2xsYmFjayhUaW1lckhhbmRsZSB0aW1lckhhbmRsZSkgCisKKyAgICBwdWJsaWMgdm9pZCBjYW5jZWxUaW1lckFuZFJvbGxiYWNrKFRpbWVySGFuZGxlIHRpbWVySGFuZGxlKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBFeGNlcHRpb24gewogICAgICAgICBpZiggaXNUeFVuc3BlY2lmaWVkKCkgKSB7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNjAsNyArMjYwLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGNhbmNlbFRpbWVyQW5kQ2FuY2VsQW5kUm9sbGJhY2soVGltZXJIYW5kbGUgdGltZXJIYW5kbGUpIAorICAgIHB1YmxpYyB2b2lkIGNhbmNlbFRpbWVyQW5kQ2FuY2VsQW5kUm9sbGJhY2soVGltZXJIYW5kbGUgdGltZXJIYW5kbGUpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKCBpc1R4VW5zcGVjaWZpZWQoKSApIHsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMxMSw3ICszMTEsNyBAQAogICAgICAgICAgICAgLy8gc3VjY2VzcwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlbW90ZUV4Y2VwdGlvbigiZ2V0VGltZXJzIGZhaWx1cmUiKTsKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgVGltZXJIYW5kbGUgZ2V0VGltZVJlbWFpbmluZ1Rlc3QxKGludCBudW1JdGVyYXRpb25zKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBFeGNlcHRpb24gewpAQCAtMzcyLDcgKzM3Miw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGFjdGl2ZSB0aW1lcnMuICAKKyAgICAvLyBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGFjdGl2ZSB0aW1lcnMuCiAgICAgcHVibGljIHZvaWQgYXNzZXJ0Tm9UaW1lcnMoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBFeGNlcHRpb24gewogICAgICAgICBjaGVja0NhbGxlclNlY3VyaXR5QWNjZXNzKCJhc3NlcnROb1RpbWVycyIsIHRydWUpOwogICAgICAgICBUaW1lclNlcnZpY2UgdHMgPSBjb250ZXh0Xy5nZXRUaW1lclNlcnZpY2UoKTsKQEAgLTM4MiwxMSArMzgyLDExIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBhc3NlcnRUaW1lck5vdEFjdGl2ZShUaW1lckhhbmRsZSB0aW1lckhhbmRsZSkgCisgICAgcHVibGljIHZvaWQgYXNzZXJ0VGltZXJOb3RBY3RpdmUoVGltZXJIYW5kbGUgdGltZXJIYW5kbGUpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgVGltZXIgdCA9IHRpbWVySGFuZGxlLmdldFRpbWVyKCk7Ci0gICAgICAgICAgICB0aHJvdyAKKyAgICAgICAgICAgIHRocm93CiAgICAgICAgICAgICAgICAgbmV3IEV4Y2VwdGlvbigiYXNzZXJ0VGltZXJOb3RBY3RpdmUgY2FsbGVkIHdpdGggYWN0aXZlIHRpbWVyIik7CiAgICAgICAgIH0gY2F0Y2goTm9TdWNoT2JqZWN0TG9jYWxFeGNlcHRpb24gbnNvbGUpIHsKICAgICAgICAgICAgIC8vIGNhdWdodCBleHBlY3RlZCBleGNlcHRpb24KQEAgLTM5NSwxMCArMzk1LDEwIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgU2VyaWFsaXphYmxlIGdldEluZm9Ob0Vycm9yKFRpbWVySGFuZGxlIHRpbWVySGFuZGxlKSAKKyAgICBwdWJsaWMgU2VyaWFsaXphYmxlIGdldEluZm9Ob0Vycm9yKFRpbWVySGFuZGxlIHRpbWVySGFuZGxlKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIGdldEluZm8odGltZXJIYW5kbGUsIGZhbHNlKTsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgU2VyaWFsaXphYmxlIGdldEluZm8oVGltZXJIYW5kbGUgdGltZXJIYW5kbGUpIHRocm93cyBFeGNlcHRpb24gewpAQCAtNDQ5LDE4ICs0NDksMTggQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHJlY3ZNZXNzYWdlQW5kQ3JlYXRlVGltZXIoYm9vbGVhbiBleHBlY3RNZXNzYWdlKSAKKyAgICBwdWJsaWMgdm9pZCByZWN2TWVzc2FnZUFuZENyZWF0ZVRpbWVyKGJvb2xlYW4gZXhwZWN0TWVzc2FnZSkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgRXhjZXB0aW9uIHsKICAgICAgICAgaWYoIGlzVHhVbnNwZWNpZmllZCgpICkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYoIGlzQk1UKCkgKSB7CiAgICAgICAgICAgICAgICAgY29udGV4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCkuYmVnaW4oKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lcigicmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lciIsIAorICAgICAgICAgICAgcmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lcigicmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdE1lc3NhZ2UpOwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKQEAgLTQ3NCw3ICs0NzQsNyBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgcmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lckFuZFJvbGxiYWNrKGJvb2xlYW4gZXhwZWN0TWVzc2FnZSkgCisgICAgcHVibGljIHZvaWQgcmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lckFuZFJvbGxiYWNrKGJvb2xlYW4gZXhwZWN0TWVzc2FnZSkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgRXhjZXB0aW9uIHsKIAogICAgICAgICBpZiggaXNUeFVuc3BlY2lmaWVkKCkgKSB7CkBAIC01MTUsNyArNTE1LDcgQEAKICAgICAgICAgICAgIFRpbWVySGFuZGxlIHRoID0gdC5nZXRIYW5kbGUoKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MjYsMTEgKzUyNiwxMSBAQAogICAgICAgICAgICAgUXVldWVSZWNlaXZlciByZWNlaXZlciA9IHNlc3Npb24uY3JlYXRlUmVjZWl2ZXIocXVldWUpOwogICAgICAgICAgICAgLy8gU2VuZCBhIG1lc3NhZ2UuCiAgICAgICAgICAgICBUZXh0TWVzc2FnZSBtZXNzYWdlID0gKFRleHRNZXNzYWdlKSByZWNlaXZlci5yZWNlaXZlTm9XYWl0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYoIG1lc3NhZ2UgPT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICBpZiggZXhwZWN0TWVzc2FnZSApIHsKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlbW90ZUV4Y2VwdGlvbigiRXhwZWN0aW5nIG1lc3NhZ2UgaW4gIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlY3ZNZXNzYWdlQW5kQ3JlYXRlVGltZXJBbmRSb2xsYmFjayIpOyAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlY3ZNZXNzYWdlQW5kQ3JlYXRlVGltZXJBbmRSb2xsYmFjayIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYoICFleHBlY3RNZXNzYWdlICkgewpAQCAtNTM4LDEzICs1MzgsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmdldFRleHQoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFRpbWVyU2VydmljZSB0cyA9IGNvbnRleHRfLmdldFRpbWVyU2VydmljZSgpOwogICAgICAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZVRpbWVyKDEsIHRpbWVyTmFtZSk7CiAgICAgICAgICAgICBUaW1lckhhbmRsZSB0aCA9IHQuZ2V0SGFuZGxlKCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgIH0gCisgICAgICAgIH0KIAogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjk3LDcgKzY5Nyw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBnZXRUaW1lclNlcnZpY2UoImVqYlRpbWVvdXQiLCB0cnVlKTsKICAgICAgICAgICAgIGRvVGltZXJTdHVmZigiZWpiVGltZW91dCIsIHRydWUpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgfQogCiAgICAgcHJvdGVjdGVkIHZvaWQgY2hlY2tDYWxsZXJTZWN1cml0eUFjY2VzcyhTdHJpbmcgbWV0aG9kLCBib29sZWFuIGFsbG93ZWQpIHsKQEAgLTczOSwxOSArNzM5LDE5IEBACiAKIAogICAgIHByb3RlY3RlZCB2b2lkIHNldHVwSm1zQ29ubmVjdGlvbigpIHsKLQkvKiogVE9ETwotCQorICAgIC8qKiBUT0RPCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBjb25uZWN0aW9uID0gcWNGYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgc2Vzc2lvbiA9IGNvbm5lY3Rpb24uY3JlYXRlUXVldWVTZXNzaW9uKHRydWUsIDApOwogICAgICAgICAgICAgY29ubmVjdGlvbi5zdGFydCgpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7IGUucHJpbnRTdGFja1RyYWNlKCk7IH0KLQkqLworICAgICovCiAgICAgfQogCiAgICAgcHJvdGVjdGVkIHZvaWQgY2xlYW51cCgpIHsKLQkvKiogVE9ETworICAgIC8qKiBUT0RPCiAgICAgICAgIGlmKCBjb25uZWN0aW9uICE9IG51bGwgKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uY2xvc2UoKTsKQEAgLTc2MCw3ICs3NjAsNyBAQAogICAgICAgICAgICAgICAgIGptc2UucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQkqKi8KKyAgICAqKi8KICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2J1aWxkLnhtbAppbmRleCBlMDNkMzkxLi5kM2RhZGI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2J1aWxkLnhtbApAQCAtNDYsOSArNDYsOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItdHhwcm9wIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi10eHByb3AgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9jbXR0aW1lb3V0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2NtdHRpbWVvdXQvYnVpbGQucHJvcGVydGllcwppbmRleCA3NmY0ZmQ4Li5hNjdjN2FkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2NtdHRpbWVvdXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2NtdHRpbWVvdXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItdHhwcm9wLWNtdHRpbWVvdXQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3AvY210dGltZW91dC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2NtdHRpbWVvdXQvYnVpbGQueG1sCmluZGV4IDk0ZDVkZjkuLmE1M2IyOWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3AvY210dGltZW91dC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9jbXR0aW1lb3V0L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TaW1wbGVTTFNCSG9tZS5jbGFzcywqKi9TaW1wbGVTTFNCLmNsYXNzLCoqL1NpbXBsZUVudGl0eUhvbWUuY2xhc3MsKiovU2ltcGxlRW50aXR5LmNsYXNzLCoqLypDbGllbnQqLmNsYXNzLCoqLypGb28uY2xhc3MsKiovKkZvb0hvbWUuY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjEsMTAgKzYxLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3AvY210dGltZW91dC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2NtdHRpbWVvdXQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGEzOWU5OGEuLjBmZmEzZWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3AvY210dGltZW91dC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9jbXR0aW1lb3V0L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtNDAsMjcgKzQwLDI3IEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItdHhwcm9wLWNtdHRpbWVvdXQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBlamIgcmVmICIpOwotICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVTTFNCSG9tZSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvYmpyZWYgPSAiICsgb2JqcmVmKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU2ltcGxlU0xTQkhvbWUgIGhvbWUgPSAoU2ltcGxlU0xTQkhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93CiAgICAgICAgICAgICAgICAgKG9ianJlZiwgU2ltcGxlU0xTQkhvbWUuY2xhc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgCisKKwogICAgICAgICAgICAgU2ltcGxlU0xTQiBmID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwogCkBAIC03Miw3ICs3Miw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KLSAgICAgICAgCisKICAgICBwcml2YXRlIHZvaWQgZG9UZXN0MShTaW1wbGVTTFNCIHJlZikgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy8gaW52b2tlIG1ldGhvZCBvbiB0aGUgRUpCCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2NtdHRpbWVvdXQvZWpiL0Zvb0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3AvY210dGltZW91dC9lamIvRm9vQmVhbi5qYXZhCmluZGV4IGE5ZDEyY2MuLjFjZDczMTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3AvY210dGltZW91dC9lamIvRm9vQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3AvY210dGltZW91dC9lamIvRm9vQmVhbi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMzYsMTEgKzM2LDExIEBACiAgICAgcHVibGljIEZvb0JlYW4oKSB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CZWFuOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0JlYW46OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JdGhpcy5zYyA9IHNjOworICAgIHRoaXMuc2MgPSBzYzsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBpbnZva2VNZXRob2QoaW50IHRpbWVvdXQpICB7CkBAIC00OSwxNCArNDksMTQgQEAKICAgICAgICAgYm9vbGVhbiBtYXJrZWQgPSBzYy5nZXRSb2xsYmFja09ubHkoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvaGVsbG8iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSGVsbG9Ib21lICBob21lID0gKEhlbGxvSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cKICAgICAgICAgICAgICAgICAob2JqcmVmLCBIZWxsb0hvbWUuY2xhc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEhlbGxvIGhyID0gaG9tZS5jcmVhdGUoKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgbWFya2VkID0gc2MuZ2V0Um9sbGJhY2tPbmx5KCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBpbnZvY2F0aW9uIGN0eC5nZXRSb2xsYmFja09ubHkoKTogIgogICAgICAgICAgICAgICAgICAgICArIG1hcmtlZCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2NtdHRpbWVvdXQvZWpiL0hlbGxvQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9jbXR0aW1lb3V0L2VqYi9IZWxsb0JlYW4uamF2YQppbmRleCA4MGE5ZGI4Li40YmNiYzcxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2NtdHRpbWVvdXQvZWpiL0hlbGxvQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3AvY210dGltZW91dC9lamIvSGVsbG9CZWFuLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC0zMSwxMSArMzEsMTEgQEAKICAgICBwdWJsaWMgSGVsbG9CZWFuKCkge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6ZWpiQ3JlYXRlICEhIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQl0aGlzLnNjID0gc2M7CisgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGNvbXB1dGUoaW50IHRpbWVvdXQpIHsKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgKyAiOyB0aW1lIGxlZnQgPSAiICsgKChkZWFkbGluZSAtIG5vdykgLyAxMDAwKQogICAgICAgICAgICAgICAgICAgICArICIgc2Vjb25kcy4iKTsKICAgICAgICAgICAgIHNvcnRBcnJheSgxMDI0KTsKLSAgICAgICAgICAgIHRyeSB7VGhyZWFkLnNsZWVwKDEwKTt9IGNhdGNoIChFeGNlcHRpb24gZXgpIHt9IAorICAgICAgICAgICAgdHJ5IHtUaHJlYWQuc2xlZXAoMTApO30gY2F0Y2ggKEV4Y2VwdGlvbiBleCkge30KICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9jbXR0aW1lb3V0L2VqYi9TaW1wbGVFbnRpdHlCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2NtdHRpbWVvdXQvZWpiL1NpbXBsZUVudGl0eUJlYW4uamF2YQppbmRleCBjY2Q5MTFjLi4yOThjMmE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2NtdHRpbWVvdXQvZWpiL1NpbXBsZUVudGl0eUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2NtdHRpbWVvdXQvZWpiL1NpbXBsZUVudGl0eUJlYW4uamF2YQpAQCAtNTYsOCArNTYsOCBAQAogICAgICAgICBDb25uZWN0aW9uIGMgPSBudWxsOwogICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CiAgICAgICAgIHRyeSB7Ci0JICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKICAgICAgICAgICAgICAgICAiSU5TRVJUIElOVE8gU2ltcGxlRW50aXR5IChrZXksIG5hbWUpIFZBTFVFUyAoPyw/KSIpOwogICAgICAgICAgICAgcHMuc2V0U3RyaW5nKDEsIGtleSk7CiAgICAgICAgICAgICBwcy5zZXRTdHJpbmcoMiwgbmFtZSk7CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKICAgICAgICAgICAgIHRocm93IG5ldyBDcmVhdGVFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotICAgICAgICB9IGZpbmFsbHkgeyAKKyAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYgKHBzICE9IG51bGwpCiAgICAgICAgICAgICAgICAgICAgIHBzLmNsb3NlKCk7CkBAIC05NCwxMCArOTQsMTAgQEAKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAogICAgICAgICAgICAgICAgICJTRUxFQ1Qga2V5IGZyb20gU2ltcGxlRW50aXR5IHdoZXJlIGtleSA9ID8iKTsKICAgICAgICAgICAgIHBzLnNldFN0cmluZygxLCBrZXkpOwogICAgICAgICAgICAgUmVzdWx0U2V0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7CkBAIC0xMDcsNyArMTA3LDcgQEAKICAgICAgICAgICAgIHJldHVybiBrZXk7CiAgICAgICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewogICAgICAgICAgICAgdGhyb3cgbmV3IEZpbmRlckV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0gICAgICAgIH0gZmluYWxseSB7IAorICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZiAocHMgIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICAgcHMuY2xvc2UoKTsKQEAgLTEyNSw2NSArMTI1LDY1IEBACiAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKICAgICAgICAgICAgICAgICAiU0VMRUNUIG5hbWUgZnJvbSBTaW1wbGVFbnRpdHkgd2hlcmUga2V5ID0gPyIpOwogICAgICAgICAgICAgcHMuc2V0U3RyaW5nKDEsIGtleSk7Ci0JICAgIFJlc3VsdFNldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpOwotCSAgICBpZiAoIXJzLm5leHQoKSkKLQkgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbigiTm8gY3VzdCBmb3IgIiArIGtleSk7Ci0JICAgIHRoaXMubmFtZSA9IHJzLmdldFN0cmluZygxKTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JfSBmaW5hbGx5IHsgCi0JICAgIHRyeSB7Ci0JCWlmIChwcyAhPSBudWxsKQotCQkgICAgcHMuY2xvc2UoKTsKLQkJaWYgKGMgIT0gbnVsbCkKLQkJICAgIGMuY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JfQorICAgICAgICBSZXN1bHRTZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTsKKyAgICAgICAgaWYgKCFycy5uZXh0KCkpCisgICAgICAgICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIk5vIGN1c3QgZm9yICIgKyBrZXkpOworICAgICAgICB0aGlzLm5hbWUgPSBycy5nZXRTdHJpbmcoMSk7CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewotCUNvbm5lY3Rpb24gYyA9IG51bGw7Ci0gICAgIAlQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKLQkJIlVQREFURSBTaW1wbGVFbnRpdHkgU0VUIG5hbWUgPSA/IFdIRVJFIGtleSA9ID8iKTsKLQkgICAgcHMuc2V0U3RyaW5nKDEsIG5hbWUpOwotCSAgICBwcy5zZXRTdHJpbmcoMiwga2V5KTsKLQkgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJEaWRudCBzdG9yZSBlamIiKTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JfSBmaW5hbGx5IHsgCi0JICAgIHRyeSB7Ci0JCWlmIChwcyAhPSBudWxsKQotCQkgICAgcHMuY2xvc2UoKTsKLQkJaWYgKGMgIT0gbnVsbCkKLQkJICAgIGMuY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JfQorICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgIlVQREFURSBTaW1wbGVFbnRpdHkgU0VUIG5hbWUgPSA/IFdIRVJFIGtleSA9ID8iKTsKKyAgICAgICAgcHMuc2V0U3RyaW5nKDEsIG5hbWUpOworICAgICAgICBwcy5zZXRTdHJpbmcoMiwga2V5KTsKKyAgICAgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQorICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJEaWRudCBzdG9yZSBlamIiKTsKKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW92ZUV4Y2VwdGlvbiB7Ci0JQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQl0cnkgewotCSAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAotCQkiREVMRVRFIEZST00gU2ltcGxlRW50aXR5IFdIRVJFIGtleSA9ID8iKTsKLQkgICAgcHMuc2V0U3RyaW5nKDEsIG5hbWUpOwotCSAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCi0JCXRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIkRpZG50IHJlbW92ZSBlamIiKTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JfSBmaW5hbGx5IHsgCi0JICAgIHRyeSB7Ci0JCWlmIChwcyAhPSBudWxsKQotCQkgICAgcHMuY2xvc2UoKTsKLQkJaWYgKGMgIT0gbnVsbCkKLQkJICAgIGMuY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JfQorICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgIkRFTEVURSBGUk9NIFNpbXBsZUVudGl0eSBXSEVSRSBrZXkgPSA/Iik7CisgICAgICAgIHBzLnNldFN0cmluZygxLCBuYW1lKTsKKyAgICAgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQorICAgICAgICB0aHJvdyBuZXcgUmVtb3ZlRXhjZXB0aW9uKCJEaWRudCByZW1vdmUgZWpiIik7CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgIHRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9jbXR0aW1lb3V0L2VqYi9TaW1wbGVTTFNCQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9jbXR0aW1lb3V0L2VqYi9TaW1wbGVTTFNCQmVhbi5qYXZhCmluZGV4IDI3MTc1NzEuLjFlNTI2ODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3AvY210dGltZW91dC9lamIvU2ltcGxlU0xTQkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2NtdHRpbWVvdXQvZWpiL1NpbXBsZVNMU0JCZWFuLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC0zNCwxMSArMzQsMTEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVTTFNCSG9tZTo6ZWpiQ3JlYXRlICEhIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlU0xTQkhvbWU6OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JICAgIHRoaXMuc2MgPSBzYzsKKyAgICAgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGRvU29tZXRoaW5nKGludCB0aW1lb3V0KSB7CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICBsb25nIGRlYWRsaW5lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKyAodGltZW91dCAqIDEwMDApOwogICAgICAgICAgICAgZm9yIChpbnQgbiA9IDE7IHRydWU7IG4gPSBuIDw8IDEpIHsKICAgICAgICAgICAgICAgICBsb25nIG5vdyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgIAorCiAgICAgICAgICAgICAgICAgaWYgKG5vdyA+IGRlYWRsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICsgIjsgdGltZSBsZWZ0ID0gIiArICgoZGVhZGxpbmUgLSBub3cpIC8gMTAwMCkKICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBzZWNvbmRzLiByZXN1bHQ6ICIgKyByZXN1bHQpOwogICAgICAgICAgICAgICAgIHNvcnRBcnJheSgxMDI0KTsKLSAgICAgICAgICAgICAgICB0cnkge1RocmVhZC5zbGVlcCg1ICogMTAwMCk7fSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7fSAKKyAgICAgICAgICAgICAgICB0cnkge1RocmVhZC5zbGVlcCg1ICogMTAwMCk7fSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7fQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXN1bHQgPSBzYy5nZXRSb2xsYmFja09ubHkoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3Avc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL3NpbXBsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDJjYjlmZTkuLmIyZjA3N2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3Avc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9zaW1wbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItdHhwcm9wLXNpbXBsZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9zaW1wbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9zaW1wbGUvYnVpbGQueG1sCmluZGV4IDEwZGZiNmQuLmE5ODNjOTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3Avc2ltcGxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL3NpbXBsZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MsKiovKkZvby5jbGFzcywqKi8qRm9vSG9tZS5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02MSwxMCArNjEsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9zaW1wbGUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9zaW1wbGUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDllZWRlZWIuLjg2NzUwNzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3Avc2ltcGxlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL3NpbXBsZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTM3LDMxICszNywzMSBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLXR4cHJvcC1zaW1wbGVJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIGVqYiByZWYgIik7Ci0gICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCisgICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2ZvbyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvYmpyZWYgPSAiICsgb2JqcmVmKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBGb29Ib21lICBob21lID0gKEZvb0hvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93CiAgICAgICAgICAgICAgICAgKG9ianJlZiwgRm9vSG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAKKworCiAgICAgICAgICAgICBGb28gZiA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gaW52b2tlIG1ldGhvZCBvbiB0aGUgRUpCCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIGVqYiIpOwogICAgICAgICAgICAgZi5jYWxsSGVsbG8oKTsKQEAgLTczLDggKzczLDggQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3Avc2ltcGxlL2VqYi9Gb29CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL3NpbXBsZS9lamIvRm9vQmVhbi5qYXZhCmluZGV4IGVmNzUxZGQuLmE2OTlkMjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3Avc2ltcGxlL2VqYi9Gb29CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9zaW1wbGUvZWpiL0Zvb0JlYW4uamF2YQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IGphdmEudXRpbC5EYXRlOwogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTM3LDcgKzM3LDcgQEAKICAgICBwdWJsaWMgRm9vQmVhbigpIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0JlYW46OmVqYkNyZWF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmVhbjo6ZWpiQ3JlYXRlICEhIik7CiAKICAgICAgICAgLy8gZ2V0dGluZyBVc2VyVHJhbnNhY3Rpb24oKSBpcyBhbGxvd2VkCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBnZXRVc2VyVHJhbnNhY3Rpb24oKSIpOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JdGhpcy5zYyA9IHNjOworICAgIHRoaXMuc2MgPSBzYzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBjYWxsSGVsbG8oKSAgewpAQCAtNjQsMjQgKzY0LDI0IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIGVqYiByZWYgIik7Ci0gICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCisgICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2hlbGxvIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9ianJlZiA9ICIgKyBvYmpyZWYpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEhlbGxvSG9tZSAgaG9tZSA9IChIZWxsb0hvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93CiAgICAgICAgICAgICAgICAgKG9ianJlZiwgSGVsbG9Ib21lLmNsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsbyBociA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gaW52b2tlIG1ldGhvZCBvbiB0aGUgRUpCCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN0YXJ0aW5nIHVzZXIgdHgiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzYy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIGVqYiB3aXRoIHVzZXIgdHgiKTsKQEAgLTEwNCwxMyArMTA0LDEzIEBACiAgICAgICAgIH0KIAogICAgICAgICBUaW1lclNlcnZpY2UgdGltZXJTZXJ2aWNlID0gc2MuZ2V0VGltZXJTZXJ2aWNlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB0aW1lclNlcnZpY2UuY3JlYXRlVGltZXIobmV3IERhdGUoKSwgMTAwMCwgbnVsbCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJDcmVhdGVUaW1lciBjYWxsIHNob3VsZCBoYXZlIGZhaWxlZC4iKTsKICAgICAgICAgfSBjYXRjaChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaXNlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBnb3QgaWxsZWdhbCBzdGF0ZSBleGNlcHRpb24gIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZW4gYXR0ZW1wdGluZyB0byBjcmVhdGUgdGltZXIgOiAiICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZW4gYXR0ZW1wdGluZyB0byBjcmVhdGUgdGltZXIgOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc2UuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICB0cnkgewpAQCAtMTE4LDcgKzExOCw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJDcmVhdGVUaW1lciBjYWxsIHNob3VsZCBoYXZlIGZhaWxlZC4iKTsKICAgICAgICAgfSBjYXRjaChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaXNlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBnb3QgaWxsZWdhbCBzdGF0ZSBleGNlcHRpb24gIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZW4gYXR0ZW1wdGluZyB0byBjcmVhdGUgdGltZXIgOiAiICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZW4gYXR0ZW1wdGluZyB0byBjcmVhdGUgdGltZXIgOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc2UuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICB0cnkgewpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJDcmVhdGVUaW1lciBjYWxsIHNob3VsZCBoYXZlIGZhaWxlZC4iKTsKICAgICAgICAgfSBjYXRjaChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaXNlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBnb3QgaWxsZWdhbCBzdGF0ZSBleGNlcHRpb24gIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZW4gYXR0ZW1wdGluZyB0byBjcmVhdGUgdGltZXIgOiAiICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZW4gYXR0ZW1wdGluZyB0byBjcmVhdGUgdGltZXIgOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc2UuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICB0cnkgewpAQCAtMTM0LDI2ICsxMzQsMjYgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkNyZWF0ZVRpbWVyIGNhbGwgc2hvdWxkIGhhdmUgZmFpbGVkLiIpOwogICAgICAgICB9IGNhdGNoKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpc2UpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGdvdCBpbGxlZ2FsIHN0YXRlIGV4Y2VwdGlvbiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2hlbiBhdHRlbXB0aW5nIHRvIGNyZWF0ZSB0aW1lciA6ICIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2hlbiBhdHRlbXB0aW5nIHRvIGNyZWF0ZSB0aW1lciA6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAKICAgICAgICAgQ29sbGVjdGlvbiB0aW1lcnMgPSB0aW1lclNlcnZpY2UuZ2V0VGltZXJzKCk7CiAgICAgICAgIGlmKCB0aW1lcnMuc2l6ZSgpID4gMCApIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIldyb25nIG51bWJlciBvZiB0aW1lcnMgOiAiICsgCisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJXcm9uZyBudW1iZXIgb2YgdGltZXJzIDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVycy5zaXplKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmV0cmlldmVkIDAgdGltZXJzIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgUGFja2FnZSBwID0gdGhpcy5nZXRDbGFzcygpLmdldFBhY2thZ2UoKTsKICAgICAgICAgaWYoIHAgPT0gbnVsbCApIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIm51bGwgcGFja2FnZSBmb3IgIiArIAorICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigibnVsbCBwYWNrYWdlIGZvciAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBhY2thZ2UgbmFtZSA9ICIgKyBwKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3Avc2ltcGxlL2VqYi9IZWxsb0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3Avc2ltcGxlL2VqYi9IZWxsb0JlYW4uamF2YQppbmRleCBhMmViZTc4Li4zMDI0ZDVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL3NpbXBsZS9lamIvSGVsbG9CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9zaW1wbGUvZWpiL0hlbGxvQmVhbi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMzEsMTEgKzMxLDExIEBACiAgICAgcHVibGljIEhlbGxvQmVhbigpIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JdGhpcy5zYyA9IHNjOworICAgIHRoaXMuc2MgPSBzYzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzYXlIZWxsbygpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi91dGlsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi91dGlsL2J1aWxkLnhtbAppbmRleCA2YjczZGExLi42NGNiYjg0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdXRpbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3V0aWwvYnVpbGQueG1sCkBAIC0zOSwxMCArMzksMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CiAgICAgICAgICAgICAgICAgICAgYW50IG1ldGhvZG1hcCAoRXhlY3V0ZXMgdGhlIGVqYi11dGlsIG1ldGhvZG1hcCB0ZXN0KQogICAgICAgICAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLXV0aWwgdGVzdHMpCi0JPC9lY2hvPgorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi91dGlsL21ldGhvZG1hcC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3V0aWwvbWV0aG9kbWFwL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDM4N2I0ZS4uMGEzMDE5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3V0aWwvbWV0aG9kbWFwL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3V0aWwvbWV0aG9kbWFwL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9InRlc3QubmFtZSIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIudXRpbC5tZXRob2RtYXAiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzaW1wbGUuY2xpZW50IiB2YWx1ZT0iJHt0ZXN0Lm5hbWV9LmNsaWVudC5NZXRob2RNYXBUZXN0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdXRpbC9tZXRob2RtYXAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3V0aWwvbWV0aG9kbWFwL2J1aWxkLnhtbAppbmRleCAzY2EwMWI5Li5jMmJjMGQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdXRpbC9tZXRob2RtYXAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi91dGlsL21ldGhvZG1hcC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IENvbXBpbGluZyB0ZXN0IHNvdXJjZSBmaWxlcyIgbGV2ZWw9InZlcmJvc2UiLz4KQEAgLTQyLDI3ICs0MiwyNyBAQAogICAgICAgICAgICAgICBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH06JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGRlYnVnPSJvbiIKLSAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiLz4gICAgICAgIAorICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvYXBwc2Vydi1ydC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzaW1wbGUuY2xpZW50fSI+CiAgICAgICAgIDwvamF2YT4KLSAgICA8L3RhcmdldD4gICAgICAgCisgICAgPC90YXJnZXQ+CiAKIAogICAgIDx0YXJnZXQgbmFtZT0icGVyZiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgY2xhc3NuYW1lPSIke3BlcmYuY2xpZW50fSI+CiAgICAgICAgICAgIDxhcmcgdmFsdWU9ImphdmF4LnhtbC5ycGMuU2VydmljZSIvPgogICAgICAgICAgICA8YXJnIHZhbHVlPSIxMDAwMDAiLz4KICAgICAgICAgPC9qYXZhPgotICAgIDwvdGFyZ2V0PiAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi91dGlsL21ldGhvZG1hcC9jbGllbnQvTWV0aG9kTWFwVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3V0aWwvbWV0aG9kbWFwL2NsaWVudC9NZXRob2RNYXBUZXN0LmphdmEKaW5kZXggYzMwYTZjZS4uMTQ2MWM1NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3V0aWwvbWV0aG9kbWFwL2NsaWVudC9NZXRob2RNYXBUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3V0aWwvbWV0aG9kbWFwL2NsaWVudC9NZXRob2RNYXBUZXN0LmphdmEKQEAgLTI3LDIxICsyNywyMSBAQAogCiBwdWJsaWMgY2xhc3MgTWV0aG9kTWFwVGVzdCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ2xhc3NbXSBURVNUX0NMQVNTRVMgPSB7CiAgICAgICAgIGphdmEubGFuZy5PYmplY3QuY2xhc3MsCi0gICAgICAgIE1ldGhvZE1hcFRlc3QxLmNsYXNzLCBNZXRob2RNYXBUZXN0Mi5jbGFzcywgTWV0aG9kTWFwVGVzdDMuY2xhc3MsIAorICAgICAgICBNZXRob2RNYXBUZXN0MS5jbGFzcywgTWV0aG9kTWFwVGVzdDIuY2xhc3MsIE1ldGhvZE1hcFRlc3QzLmNsYXNzLAogICAgICAgICBNZXRob2RNYXBUZXN0NC5jbGFzcywgTWV0aG9kTWFwVGVzdDMuY2xhc3MsIE1ldGhvZE1hcFRlc3Q2LmNsYXNzLAotICAgICAgICBNZXRob2RNYXBUZXN0LmNsYXNzLCBqYWthcnRhLmVqYi5FSkJIb21lLmNsYXNzLCAKKyAgICAgICAgTWV0aG9kTWFwVGVzdC5jbGFzcywgamFrYXJ0YS5lamIuRUpCSG9tZS5jbGFzcywKICAgICAgICAgamFrYXJ0YS5lamIuRUpCT2JqZWN0LmNsYXNzLCBqYWthcnRhLmVqYi5FSkJMb2NhbE9iamVjdC5jbGFzcywKICAgICAgICAgamFrYXJ0YS5lamIuRUpCTG9jYWxIb21lLmNsYXNzLCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbi5jbGFzcywKICAgICAgICAgamFrYXJ0YS5lamIuRW50ZXJwcmlzZUJlYW4uY2xhc3MsIGphdmEudXRpbC5NYXAuY2xhc3MsCiAgICAgICAgIGpha2FydGEuam1zLlF1ZXVlQ29ubmVjdGlvbi5jbGFzcywgamFrYXJ0YS5qbXMuUXVldWVTZXNzaW9uLmNsYXNzLAogICAgICAgICBqYWthcnRhLmptcy5TZXNzaW9uLmNsYXNzLCBqYXZhLnV0aWwuRGF0ZS5jbGFzcywKICAgICAgICAgamF2YXguc3dpbmcuQWN0aW9uLmNsYXNzLCBqYXZheC5zd2luZy5BYnN0cmFjdEFjdGlvbi5jbGFzcywKLSAgICAgICAgamF2YXguc3dpbmcuSkNvbWJvQm94LmNsYXNzLCBqYXZheC5zd2luZy5KVGV4dEFyZWEuY2xhc3MgICAgICAgIAorICAgICAgICBqYXZheC5zd2luZy5KQ29tYm9Cb3guY2xhc3MsIGphdmF4LnN3aW5nLkpUZXh0QXJlYS5jbGFzcwogCiAgICAgfTsKIApAQCAtNTEsOSArNTEsOSBAQAogICAgICAgICBNZXRob2RNYXBUZXN0IHRlc3QgPSBuZXcgTWV0aG9kTWFwVGVzdChhcmdzKTsKICAgICAgICAgdGVzdC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi11dGlsLW1ldGhvZG1hcElEIik7Ci0gICAgfSAgCi0gICAgCi0gICAgcHVibGljIE1ldGhvZE1hcFRlc3QgKFN0cmluZ1tdIGFyZ3MpIHsgICAgICAgICAgICAgICAKKyAgICB9CisKKyAgICBwdWJsaWMgTWV0aG9kTWFwVGVzdCAoU3RyaW5nW10gYXJncykgewogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKQEAgLTYzLDE3ICs2MywxNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb2luZyBtZXRob2RtYXAgdGVzdCBmb3IgIiArIGMpOwogICAgICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSB0ZXN0Q2xhc3MoYyk7CiAgICAgICAgICAgICBpZiggcmVzdWx0ICkgewotICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtZXRob2RtYXBjbGllbnQgbWFpbiIsIHN0YXQuUEFTUyk7ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm1ldGhvZG1hcGNsaWVudCBtYWluIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm1ldGhvZG1hcGNsaWVudCBtYWluIiwgc3RhdC5GQUlMKTsgCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm1ldGhvZG1hcGNsaWVudCBtYWluIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAgICAgCi0gICAgICAgIAorICAgICAgICB9CisKICAgICAgICAgdGVzdEN0b3IoKTsKICAgICAgICAgdGVzdFVuc3VwcG9ydGVkT3BlcmF0aW9ucygpOwogCi0gICAgICAgIAotICAgICAgICAKKworCiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3RDdG9yKCkgewpAQCAtODMsNyArODMsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgbmV3IE1ldGhvZE1hcChuZXcgSGFzaE1hcCgpLCAtMSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImJ1Y2tldFNpemUgLTEgc2hvdWxkIGhhdmUgdGhyb3duIGV4Y2VwdGlvbiIpOwotICAgICAgICB9IGNhdGNoKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7ICAgICAgICAgCisgICAgICAgIH0gY2F0Y2goSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGN0b3JUZXN0MVBhc3NlZCA9IHRydWU7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0xMDcsMjMgKzEwNywyMyBAQAogICAgICAgICAgICAgY3RvclRlc3QzUGFzc2VkID0gdHJ1ZTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfSAgICAgICAgCisgICAgICAgIH0KIAogICAgICAgICAvLyBwYXNzIG1hcCBjb250YWluaW5nIHNvbWV0aGluZyBvdGhlciB0aGFuIE1ldGhvZCBvYmplY3RzCiAgICAgICAgIE1hcCBvdGhlck1hcCA9IG5ldyBIYXNoTWFwKCk7CiAgICAgICAgIG90aGVyTWFwLnB1dCgiZm9vIiwgImJhciIpOwogICAgICAgICBib29sZWFuIGN0b3JUZXN0NFBhc3NlZCA9IGZhbHNlOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgbmV3IE1ldGhvZE1hcChvdGhlck1hcCk7ICAgICAgICAgICAgCisgICAgICAgICAgICBuZXcgTWV0aG9kTWFwKG90aGVyTWFwKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgY3RvclRlc3Q0UGFzc2VkID0gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmKCBjdG9yVGVzdDFQYXNzZWQgJiYgY3RvclRlc3QyUGFzc2VkICYgY3RvclRlc3QzUGFzc2VkIAorICAgICAgICBpZiggY3RvclRlc3QxUGFzc2VkICYmIGN0b3JUZXN0MlBhc3NlZCAmIGN0b3JUZXN0M1Bhc3NlZAogICAgICAgICAgICAgJiYgY3RvclRlc3Q0UGFzc2VkICkgewotICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm1ldGhvZG1hcGNsaWVudCBjdG9yIiwgc3RhdC5QQVNTKTsgIAorICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm1ldGhvZG1hcGNsaWVudCBjdG9yIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtZXRob2RtYXBjbGllbnQgY3RvciIsIHN0YXQuRkFJTCk7ICAKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtZXRob2RtYXBjbGllbnQgY3RvciIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAogICAgIH0KQEAgLTE1Nyw3ICsxNTcsNyBAQAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGJvb2xlYW4gdW9lVGVzdDNQYXNzZWQgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1ldGhvZE1hcC5yZW1vdmUobWV0aG9kMSk7CkBAIC0xNzYsMTkgKzE3NiwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgbnVsbCBtZXRob2QgdmFsdWUiKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdW9lVGVzdDRQYXNzZWQgPSB0cnVlOwotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgaWYoIHVvZVRlc3QxUGFzc2VkICYmIHVvZVRlc3QyUGFzc2VkICYmIHVvZVRlc3QzUGFzc2VkICYmCiAgICAgICAgICAgICB1b2VUZXN0NFBhc3NlZCApIHsKLSAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtZXRob2RtYXBjbGllbnQgdW5zdXBwb3J0ZWRvcCIsIHN0YXQuUEFTUyk7IAorICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm1ldGhvZG1hcGNsaWVudCB1bnN1cHBvcnRlZG9wIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtZXRob2RtYXBjbGllbnQgdW5zdXBwb3J0ZWRvcCIsIHN0YXQuRkFJTCk7IAorICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm1ldGhvZG1hcGNsaWVudCB1bnN1cHBvcnRlZG9wIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIHRlc3RDbGFzcyhDbGFzcyBjKSB7Ci0gICAgICAKKwogICAgICAgICBNYXAgcmVndWxhck1hcCA9IG5ldyBIYXNoTWFwKCk7CiAKICAgICAgICAgTWV0aG9kW10gbWV0aG9kcyA9IGMuZ2V0RGVjbGFyZWRNZXRob2RzKCk7CkBAIC0xOTYsMzEgKzE5NiwzMSBAQAogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgcmVndWxhck1hcC5wdXQobWV0aG9kc1tpXSwgbWV0aG9kc1tpXS50b1N0cmluZygpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBNYXAgZGVmYXVsdE1ldGhvZE1hcCA9IG5ldyBNZXRob2RNYXAocmVndWxhck1hcCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdGluZyAiICsgYyArICIgd2l0aCBkZWZhdWx0IE1ldGhvZE1hcCIpOwotICAgICAgICBib29sZWFuIGRlZmF1bHRUZXN0ID0gCisgICAgICAgIGJvb2xlYW4gZGVmYXVsdFRlc3QgPQogICAgICAgICAgICAgdGVzdENsYXNzKGMsIG1ldGhvZHMsIGZhbHNlLCByZWd1bGFyTWFwLCBkZWZhdWx0TWV0aG9kTWFwKTsKLSAgICAgICAgYm9vbGVhbiBkZWZhdWx0VGVzdE9wdCA9IAorICAgICAgICBib29sZWFuIGRlZmF1bHRUZXN0T3B0ID0KICAgICAgICAgICAgIHRlc3RDbGFzcyhjLCBtZXRob2RzLCB0cnVlLCByZWd1bGFyTWFwLCBkZWZhdWx0TWV0aG9kTWFwKTsKIAogICAgICAgICAvLyB0ZXN0IGRlZ2VuZXJhdGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBvbmx5IDEgYnVja2V0IGluIE1ldGhvZE1hcC4KLSAgICAgICAgLy8gdW5sZXNzIHRoZXJlIGFyZSBsZXNzIHRoYW4gMiBtZXRob2RzIGluIHRoZSBtYXAsIHRoaXMgc2hvdWxkIAorICAgICAgICAvLyB1bmxlc3MgdGhlcmUgYXJlIGxlc3MgdGhhbiAyIG1ldGhvZHMgaW4gdGhlIG1hcCwgdGhpcyBzaG91bGQKICAgICAgICAgLy8gYWx3YXlzIGRlZmVyIHRvIHBhcmVudC4KICAgICAgICAgTWFwIG9uZUJ1Y2tldE1ldGhvZE1hcCA9IG5ldyBNZXRob2RNYXAocmVndWxhck1hcCwgMSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdGluZyAiICsgYyArICIgd2l0aCAxLWJ1Y2tldCBNZXRob2RNYXAiKTsKLSAgICAgICAgYm9vbGVhbiBvbmVCdWNrZXRUZXN0ID0gCisgICAgICAgIGJvb2xlYW4gb25lQnVja2V0VGVzdCA9CiAgICAgICAgICAgICB0ZXN0Q2xhc3MoYywgbWV0aG9kcywgZmFsc2UsIHJlZ3VsYXJNYXAsIG9uZUJ1Y2tldE1ldGhvZE1hcCk7CiAgICAgICAgIGJvb2xlYW4gb25lQnVja2V0VGVzdE9wdCA9CiAgICAgICAgICAgICB0ZXN0Q2xhc3MoYywgbWV0aG9kcywgdHJ1ZSwgcmVndWxhck1hcCwgb25lQnVja2V0TWV0aG9kTWFwKTsKIAogICAgICAgICBNYXAgc2V2ZW50ZWVuQnVja2V0TWV0aG9kTWFwID0gbmV3IE1ldGhvZE1hcChyZWd1bGFyTWFwLCAxNyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdGluZyAiICsgYyArICIgd2l0aCAxNy1idWNrZXQgTWV0aG9kTWFwIik7Ci0gICAgICAgIGJvb2xlYW4gc2V2ZW50ZWVuQnVja2V0VGVzdCA9IAotICAgICAgICAgICAgdGVzdENsYXNzKGMsIG1ldGhvZHMsIGZhbHNlLCByZWd1bGFyTWFwLCBzZXZlbnRlZW5CdWNrZXRNZXRob2RNYXApOyAKLSAgICAgICAgYm9vbGVhbiBzZXZlbnRlZW5CdWNrZXRUZXN0T3B0ID0gCi0gICAgICAgICAgICB0ZXN0Q2xhc3MoYywgbWV0aG9kcywgdHJ1ZSwgcmVndWxhck1hcCwgc2V2ZW50ZWVuQnVja2V0TWV0aG9kTWFwKTsgIAotICAgIAorICAgICAgICBib29sZWFuIHNldmVudGVlbkJ1Y2tldFRlc3QgPQorICAgICAgICAgICAgdGVzdENsYXNzKGMsIG1ldGhvZHMsIGZhbHNlLCByZWd1bGFyTWFwLCBzZXZlbnRlZW5CdWNrZXRNZXRob2RNYXApOworICAgICAgICBib29sZWFuIHNldmVudGVlbkJ1Y2tldFRlc3RPcHQgPQorICAgICAgICAgICAgdGVzdENsYXNzKGMsIG1ldGhvZHMsIHRydWUsIHJlZ3VsYXJNYXAsIHNldmVudGVlbkJ1Y2tldE1ldGhvZE1hcCk7CisKIAogICAgICAgICBib29sZWFuIGNsZWFyVGVzdCA9IGZhbHNlOwogICAgICAgICB0cnkgewpAQCAtMjMzLDcgKzIzMyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGVzdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGVhcigpIHNob3VsZCBoYXZlIHJldHVybmVkIG51bGwgZm9yICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kc1swXSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHNbMF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhZnRlciBjbGVhcigpLiAgaW5zdGVhZCBpdCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcmV0dXJuZWQgIiArIG9iaik7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjQ1LDggKzI0NSw4IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNsZWFyKCkgdGhyZXcgYW4gZXhjZXB0aW9uIik7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gKGRlZmF1bHRUZXN0ICYmIGRlZmF1bHRUZXN0T3B0ICYmIAorCisgICAgICAgIHJldHVybiAoZGVmYXVsdFRlc3QgJiYgZGVmYXVsdFRlc3RPcHQgJiYKICAgICAgICAgICAgICAgICBvbmVCdWNrZXRUZXN0ICYmIG9uZUJ1Y2tldFRlc3RPcHQgJiYKICAgICAgICAgICAgICAgICBzZXZlbnRlZW5CdWNrZXRUZXN0ICYmIHNldmVudGVlbkJ1Y2tldFRlc3RPcHQgJiYKICAgICAgICAgICAgICAgICBjbGVhclRlc3QpOwpAQCAtMjU0LDcgKzI1NCw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gdGVzdENsYXNzKENsYXNzIGMsIE1ldGhvZFtdIG1ldGhvZHMsIGJvb2xlYW4gdXNlUGFyYW1PcHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXAgcmVndWxhck1hcCwgTWFwIG1ldGhvZE1hcCkgewotICAgICAgICAKKwogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgTWV0aG9kIG5leHQgPSBtZXRob2RzW2ldOwogICAgICAgICAgICAgaW50IG51bVBhcmFtcyA9IG5leHQuZ2V0UGFyYW1ldGVyVHlwZXMoKS5sZW5ndGg7CkBAIC0yNjcsMTUgKzI2NywxNSBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtZXRob2RNYXBMb29rdXAgPSBtZXRob2RNYXAuZ2V0KG5leHQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKCByZWd1bGFyTG9va3VwICE9IG1ldGhvZE1hcExvb2t1cCApIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yLiAgcmVndWxhckxvb2t1cCA9ICIgKyByZWd1bGFyTG9va3VwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBtZXRob2RNYXBMb29rdXAgPSAiICsgbWV0aG9kTWFwTG9va3VwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBmb3IgTWV0aG9kICIgKyBuZXh0LnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgIiArIHJlZ3VsYXJMb29rdXAgKyAiIGZvciBtZXRob2QgIiArIAorICAgICAgICAgICAgLy8gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCAiICsgcmVndWxhckxvb2t1cCArICIgZm9yIG1ldGhvZCAiICsKICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBuZXh0LnRvU3RyaW5nKCkpOwogCiAgICAgICAgIH0KQEAgLTMwNSwxOSArMzA1LDE5IEBACiAKICAgICAgICAgLy8gYXJyYXkgcGFyYW1zCiAgICAgICAgIGludCBhYmMoaW50W10gYSk7Ci0gICAgICAgIGludCBkZWYoaW50W11bXVtdW11bXVtdW11bXSBiKTsgICAgICAgIAorICAgICAgICBpbnQgZGVmKGludFtdW11bXVtdW11bXVtdW10gYik7CiAKICAgICAgICAgLy8gYXJiaXRyYXJ5IHVuaWNvZGUgY2hhcnMKICAgICAgICAgdm9pZCBfQlx1ODAwMSQoKTsKICAgICAgICAgdm9pZCBfQ0NNY3hcdTA0ZTNcdTA1RTkwMTIzKCk7CiAKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwcml2YXRlIGludGVyZmFjZSBNZXRob2RNYXBUZXN0MyB7CiAKICAgICAgICAgdm9pZCBBKCk7Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnRlcmZhY2UgTWV0aG9kTWFwVGVzdDQgZXh0ZW5kcyBNZXRob2RNYXBUZXN0MyB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3V0aWwvbWV0aG9kbWFwL2NsaWVudC9NZXRob2RQZXJmLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdXRpbC9tZXRob2RtYXAvY2xpZW50L01ldGhvZFBlcmYuamF2YQppbmRleCA4ZjA4MjcyLi4zMzZhMDQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdXRpbC9tZXRob2RtYXAvY2xpZW50L01ldGhvZFBlcmYuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdXRpbC9tZXRob2RtYXAvY2xpZW50L01ldGhvZFBlcmYuamF2YQpAQCAtMjksNyArMjksNyBAQAogCiAgICAgICAgIHJldHVybiAoKHRpbWVJbk1pbGxpcyAqIDEwMDAuMCkgLyBudW1JdGVyYXRpb25zKSArICIgbWljcm8tc2Vjb25kcyI7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCiAKQEAgLTQwLDcgKzQwLDcgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgY2x6ID0gQ2xhc3MuZm9yTmFtZShjbGFzc05hbWUpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIE1hcCBtZXRob2RNYXAgPSBuZXcgSGFzaE1hcCgpOwogCiAgICAgICAgICAgICBNZXRob2RbXSBtZXRob2RzID0gY2x6LmdldE1ldGhvZHMoKTsKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgICAgICAgICAgICBtZXRob2RNYXAucHV0KG1ldGhvZHNbaV0sIG1ldGhvZHNbaV0udG9TdHJpbmcoKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldpdGggcmVndWxhciBoYXNobWFwIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CkBAIC02MCwxMSArNjAsMTEgQEAKICAgICAgICAgICAgICAgICB0b3RhbFRpbWUgKz0gdGltZTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odG9NaWNyb1NlY29uZHModGltZSwgbnVtSXRlcmF0aW9ucykgKyAiIDogIiArIG0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXZnIHRpbWUgPSAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF2ZyB0aW1lID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9NaWNyb1NlY29uZHModG90YWxUaW1lIC8gbWV0aG9kcy5sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtSXRlcmF0aW9ucykpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAKKworCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldpdGggb3B0aW1pemVkIG1ldGhvZCBsb29rdXAiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKQEAgLTc3LDExICs3NywxMSBAQAogICAgICAgICAgICAgICAgIHRvdGFsVGltZSArPSB0aW1lOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0b01pY3JvU2Vjb25kcyh0aW1lLCBudW1JdGVyYXRpb25zKSArICIgOiAiICsgbS5nZXROYW1lKCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdmcgdGltZSA9ICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXZnIHRpbWUgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b01pY3JvU2Vjb25kcyh0b3RhbFRpbWUgLyBtZXRob2RzLmxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1JdGVyYXRpb25zKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAKKworCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldpdGggZXh0cmEgb3B0aW1pemVkIG1ldGhvZCBsb29rdXAiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKQEAgLTk0LDEwICs5NCwxMCBAQAogICAgICAgICAgICAgICAgIHRvdGFsVGltZSArPSB0aW1lOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0b01pY3JvU2Vjb25kcyh0aW1lLCBudW1JdGVyYXRpb25zKSArICIgOiAiICsgbS5nZXROYW1lKCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdmcgdGltZSA9ICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXZnIHRpbWUgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b01pY3JvU2Vjb25kcyh0b3RhbFRpbWUgLyBtZXRob2RzLmxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1JdGVyYXRpb25zKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldpdGggamF2YS51dGlsLklkZW50aXR5SGFzaE1hcCBsb29rdXAiKTsKQEAgLTExMywxMCArMTEzLDEwIEBACiAKICAgICAgICAgICAgICovCiAKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbG9uZyBpaGNUaW1lID0gdGVzdFN5c3RlbUlkZW50aXR5SGFzaENvZGUobnVtSXRlcmF0aW9ucyk7ICAgICAgICAgICAgCisKKyAgICAgICAgICAgIGxvbmcgaWhjVGltZSA9IHRlc3RTeXN0ZW1JZGVudGl0eUhhc2hDb2RlKG51bUl0ZXJhdGlvbnMpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzeXN0ZW0gaWRlbnRpdHkgaGFzaCBjb2RlPSAiICsgdG9NaWNyb1NlY29uZHMoaWhjVGltZSwgbnVtSXRlcmF0aW9ucykpOwotICAgICAgICAgICAKKwogCiAgICAgICAgICAgICBNZXRob2RQZXJmIG1sID0gbmV3IE1ldGhvZFBlcmYoKTsKIApAQCAtMTMxLDcgKzEzMSw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluc3RhbmNlIHN0cm9uZyB0eXBlZCBpbnZvY2F0aW9uIHRpbWUgPSAiICsgdG9NaWNyb1NlY29uZHMoaV9zVGltZSwgbnVtSXRlcmF0aW9ucykpOwogICAgICAgICAgICAgbG9uZyBpX3JUaW1lID0gdGVzdFN0YXRpY1JlZmxlY3RpdmVJbnZvY2F0aW9uKG51bUl0ZXJhdGlvbnMsIGZvb01ldGhvZCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluc3RhbmNlIHJlZmxlY3RpdmUgaW52b2NhdGlvbiB0aW1lID0gIiArIHRvTWljcm9TZWNvbmRzKGlfclRpbWUsIG51bUl0ZXJhdGlvbnMpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTE1MSwxMCArMTUxLDEwIEBACiAgICAgICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAKIAotICAgICAgICAvLyBtZWFzdXJlIHRoZSB0aW1lIGZvciB0aGUgbG9vcCBwcm9jZXNzaW5nIGl0c2VsZiAKKyAgICAgICAgLy8gbWVhc3VyZSB0aGUgdGltZSBmb3IgdGhlIGxvb3AgcHJvY2Vzc2luZyBpdHNlbGYKICAgICAgICAgbG9uZyBiZWdpbkxvb3AgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bUl0ZXJhdGlvbnM7IGkrKykgewotICAgICAgICB9ICAgICAgICAKKyAgICAgICAgfQogICAgICAgICBsb25nIGVuZExvb3AgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgbG9uZyBsb29wVGltZSA9IGVuZExvb3AgLSBiZWdpbkxvb3A7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9vcCB0aW1lID0gIiArIGxvb3BUaW1lKTsKQEAgLTE2OSwxMCArMTY5LDEwIEBACiAgICAgICAgIH0KICAgICAgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKIAotICAgICAgICAvLyBtZWFzdXJlIHRoZSB0aW1lIGZvciB0aGUgbG9vcCBwcm9jZXNzaW5nIGl0c2VsZiAKKyAgICAgICAgLy8gbWVhc3VyZSB0aGUgdGltZSBmb3IgdGhlIGxvb3AgcHJvY2Vzc2luZyBpdHNlbGYKICAgICAgICAgbG9uZyBiZWdpbkxvb3AgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bUl0ZXJhdGlvbnM7IGkrKykgewotICAgICAgICB9ICAgICAgICAKKyAgICAgICAgfQogICAgICAgICBsb25nIGVuZExvb3AgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgbG9uZyBsb29wVGltZSA9IGVuZExvb3AgLSBiZWdpbkxvb3A7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9vcCB0aW1lID0gIiArIGxvb3BUaW1lKTsKQEAgLTE4NywxMCArMTg3LDEwIEBACiAgICAgICAgIH0KICAgICAgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKIAotICAgICAgICAvLyBtZWFzdXJlIHRoZSB0aW1lIGZvciB0aGUgbG9vcCBwcm9jZXNzaW5nIGl0c2VsZiAKKyAgICAgICAgLy8gbWVhc3VyZSB0aGUgdGltZSBmb3IgdGhlIGxvb3AgcHJvY2Vzc2luZyBpdHNlbGYKICAgICAgICAgbG9uZyBiZWdpbkxvb3AgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bUl0ZXJhdGlvbnM7IGkrKykgewotICAgICAgICB9ICAgICAgICAKKyAgICAgICAgfQogICAgICAgICBsb25nIGVuZExvb3AgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgbG9uZyBsb29wVGltZSA9IGVuZExvb3AgLSBiZWdpbkxvb3A7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9vcCB0aW1lID0gIiArIGxvb3BUaW1lKTsKQEAgLTIwNSwxMCArMjA1LDEwIEBACiAgICAgICAgIH0KICAgICAgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKIAotICAgICAgICAvLyBtZWFzdXJlIHRoZSB0aW1lIGZvciB0aGUgbG9vcCBwcm9jZXNzaW5nIGl0c2VsZiAKKyAgICAgICAgLy8gbWVhc3VyZSB0aGUgdGltZSBmb3IgdGhlIGxvb3AgcHJvY2Vzc2luZyBpdHNlbGYKICAgICAgICAgbG9uZyBiZWdpbkxvb3AgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bUl0ZXJhdGlvbnM7IGkrKykgewotICAgICAgICB9ICAgICAgICAKKyAgICAgICAgfQogICAgICAgICBsb25nIGVuZExvb3AgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgbG9uZyBsb29wVGltZSA9IGVuZExvb3AgLSBiZWdpbkxvb3A7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9vcCB0aW1lID0gIiArIGxvb3BUaW1lKTsKQEAgLTIyMiw0OCArMjIyLDQ4IEBACiAgICAgICAgIH0KICAgICAgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKIAotICAgICAgICAvLyBtZWFzdXJlIHRoZSB0aW1lIGZvciB0aGUgbG9vcCBwcm9jZXNzaW5nIGl0c2VsZiAKKyAgICAgICAgLy8gbWVhc3VyZSB0aGUgdGltZSBmb3IgdGhlIGxvb3AgcHJvY2Vzc2luZyBpdHNlbGYKICAgICAgICAgbG9uZyBiZWdpbkxvb3AgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bUl0ZXJhdGlvbnM7IGkrKykgewotICAgICAgICB9ICAgICAgICAKKyAgICAgICAgfQogICAgICAgICBsb25nIGVuZExvb3AgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgbG9uZyBsb29wVGltZSA9IGVuZExvb3AgLSBiZWdpbkxvb3A7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9vcCB0aW1lID0gIiArIGxvb3BUaW1lKTsKICAgICAgICAgcmV0dXJuIChlbmQgLSBiZWdpbikgLSBsb29wVGltZTsKICAgICB9CiAKLSAgICBwcml2YXRlIHN0YXRpYyBsb25nIHRlc3RTdGF0aWNSZWZsZWN0aXZlSW52b2NhdGlvbihpbnQgbnVtSXRlcmF0aW9ucywgTWV0aG9kIG0pIAorICAgIHByaXZhdGUgc3RhdGljIGxvbmcgdGVzdFN0YXRpY1JlZmxlY3RpdmVJbnZvY2F0aW9uKGludCBudW1JdGVyYXRpb25zLCBNZXRob2QgbSkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsgICAgICAgIAorCisgICAgICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bUl0ZXJhdGlvbnM7IGkrKykgewogICAgICAgICAgICAgbS5pbnZva2UobnVsbCwgbnVsbCk7CiAgICAgICAgIH0KICAgICAgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKIAotICAgICAgICAvLyBtZWFzdXJlIHRoZSB0aW1lIGZvciB0aGUgbG9vcCBwcm9jZXNzaW5nIGl0c2VsZiAKKyAgICAgICAgLy8gbWVhc3VyZSB0aGUgdGltZSBmb3IgdGhlIGxvb3AgcHJvY2Vzc2luZyBpdHNlbGYKICAgICAgICAgbG9uZyBiZWdpbkxvb3AgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bUl0ZXJhdGlvbnM7IGkrKykgewotICAgICAgICB9ICAgICAgICAKKyAgICAgICAgfQogICAgICAgICBsb25nIGVuZExvb3AgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgbG9uZyBsb29wVGltZSA9IGVuZExvb3AgLSBiZWdpbkxvb3A7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9vcCB0aW1lID0gIiArIGxvb3BUaW1lKTsKICAgICAgICAgcmV0dXJuIChlbmQgLSBiZWdpbikgLSBsb29wVGltZTsKICAgICB9CiAKLSAgICBwcml2YXRlIHN0YXRpYyBsb25nIHRlc3RJbnN0YW5jZVJlZmxlY3RpdmVJbnZvY2F0aW9uKGludCBudW1JdGVyYXRpb25zLCBPYmplY3QgbywgTWV0aG9kIG0pIAorICAgIHByaXZhdGUgc3RhdGljIGxvbmcgdGVzdEluc3RhbmNlUmVmbGVjdGl2ZUludm9jYXRpb24oaW50IG51bUl0ZXJhdGlvbnMsIE9iamVjdCBvLCBNZXRob2QgbSkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsgICAgICAgIAorCisgICAgICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bUl0ZXJhdGlvbnM7IGkrKykgewogICAgICAgICAgICAgbS5pbnZva2UobywgbnVsbCk7CiAgICAgICAgIH0KICAgICAgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKIAotICAgICAgICAvLyBtZWFzdXJlIHRoZSB0aW1lIGZvciB0aGUgbG9vcCBwcm9jZXNzaW5nIGl0c2VsZiAKKyAgICAgICAgLy8gbWVhc3VyZSB0aGUgdGltZSBmb3IgdGhlIGxvb3AgcHJvY2Vzc2luZyBpdHNlbGYKICAgICAgICAgbG9uZyBiZWdpbkxvb3AgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bUl0ZXJhdGlvbnM7IGkrKykgewotICAgICAgICB9ICAgICAgICAKKyAgICAgICAgfQogICAgICAgICBsb25nIGVuZExvb3AgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgbG9uZyBsb29wVGltZSA9IGVuZExvb3AgLSBiZWdpbkxvb3A7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9vcCB0aW1lID0gIiArIGxvb3BUaW1lKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2NvbW1pdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2UvY29tbWl0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjYwNGJjNC4uNDhjOGQ5ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2UvY29tbWl0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2UvY29tbWl0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXdlYnNlcnZpY2UtY29tbWl0Ii8+Ci08cHJvcGVydHkgbmFtZT0iY2xpZW50X3BrZ25hbWUiIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuZWpiLndlYnNlcnZpY2UuY29tbWl0LmNsaWVudCIvPiAgICAgICAgIAotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJjbGllbnRfcGtnbmFtZSIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIud2Vic2VydmljZS5jb21taXQuY2xpZW50Ii8+ICAgICAgICBcdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2UvY29tbWl0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2NvbW1pdC9idWlsZC54bWwKaW5kZXggMDYwMjkwMi4uN2I0Zjk3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2UvY29tbWl0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9jb21taXQvYnVpbGQueG1sCkBAIC0zMiwxMiArMzIsMTIgQEAKICAgICAmcnVuOwogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGNyZWF0ZV90YWJsZSxkZXBsb3kscnVuLHVuZGVwbG95LGRlbGV0ZV90YWJsZSIvPgotICAgICAgICAgICAgCisKIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTEgKzQ2LDExIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL0NvbW1pdCouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGVfdGFibGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtNjQsMTYgKzY0LDE2IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXBwY2xpZW50LWphci1jb21tb24iPgotICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9ImNvbS9zdW4vczFhc2Rldi9lamIvd2Vic2VydmljZS9jb21taXQvY2xpZW50LyouY2xhc3MiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIgdXBkYXRlPSJ5ZXMiPgotICAgICAgICAgICAgPHppcGZpbGVzZXQgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICAgICAgICA8emlwZmlsZXNldCBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZXM9Ik1FVEEtSU5GLyoqIi8+CiAgICAgICAgIDwvamFyPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAKICAgICA8dGFyZ2V0IG5hbWU9IndzZGwtaW1wb3J0Ij4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29uZmlndXJhYmxlLXdzZGwtaW1wb3J0Ij4KQEAgLTg1LDcgKzg1LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iY29uZmlndXJhYmxlLXdzZGwtaW1wb3J0Ij4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IndzaW1wb3J0aW5nICR7cHJvdG9jb2x9Oi8vJHtob3N0LW5hbWV9OiR7aG9zdC1wb3J0fS8ke3NlcnZlcn0KLSAgICAgICBTZXJ2aWNlLyR7cG9ydH0/V1NETDsgc3BlY2lhbCBhcmdzIGFyZSAke3dzaW1wb3J0LXNwZWNpYWwtYXJnc30iLz4gIAorICAgICAgIFNlcnZpY2UvJHtwb3J0fT9XU0RMOyBzcGVjaWFsIGFyZ3MgYXJlICR7d3NpbXBvcnQtc3BlY2lhbC1hcmdzfSIvPgogICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3NpbXBvcnQiPgogICAgICAgICA8YXJnIGxpbmU9Ii1rZWVwIC1wICR7Y2xpZW50X3BrZ25hbWV9IC1kICR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyAke3Byb3RvY29sfTovLyR7aG9zdC1uYW1lfToke2hvc3QtcG9ydH0vQ29tbWl0QmVhblNlcnZpY2UvQ29tbWl0QmVhbj9XU0RMIi8+CiAgICAgICA8L2V4ZWM+CkBAIC05MywxNCArOTMsMTQgQEAKIAogICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXBwY2xpZW50IiBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvYXJjaGl2ZSI+Ci0gICAgICAgIDxhcmcgbGluZT0iLWNsaWVudCAke21vZHVsZX0tY2xpZW50Q2xpZW50LmphciIvPiAgICAKKyAgICAgICAgPGFyZyBsaW5lPSItY2xpZW50ICR7bW9kdWxlfS1jbGllbnRDbGllbnQuamFyIi8+CiAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGVfdGFibGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9jb21taXQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2UvY29tbWl0L2NsaWVudC9DbGllbnQuamF2YQppbmRleCA1MWEyY2NiLi5lODQxZTk3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9jb21taXQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2NvbW1pdC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTUyLDExICs1MiwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgaW5zdGVhZCBvZiBzeXN0ZW0gZXhjZXB0aW9uIik7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9JRCwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0gY2F0Y2goVGhyb3dhYmxlIGUpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSByZWNlaXZlZCAiICsgZSArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkICIgKyBlICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciBjb21taXQgZmFpbHVyZSIpOwotICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfSUQsIHN0YXQuUEFTUyk7ICAgIAorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfSUQsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9JRCwgc3RhdC5GQUlMKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2NvbW1pdC9lamIvQ29tbWl0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2UvY29tbWl0L2VqYi9Db21taXRCZWFuLmphdmEKaW5kZXggNGJiNTI3NC4uYWQwMTBiNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2UvY29tbWl0L2VqYi9Db21taXRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2UvY29tbWl0L2VqYi9Db21taXRCZWFuLmphdmEKQEAgLTMxLDM0ICszMSwzNCBAQAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqZGJjL19fZGVmYXVsdCIpCiAgICAgcHJpdmF0ZSBEYXRhU291cmNlIGRzOwogCi0gICAgQFJlc291cmNlIAorICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2Vzc2lvbkN0eDsKIAogICAgIHB1YmxpYyBpbnQgZmluZEN1c3RvbWVyKGludCBpKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKLQlDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CiAgICAgICAgIGludCByZXR1cm5WYWx1ZSA9IC0xOwotCXRyeSB7Ci0JICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSJTRUxFQ1QgY19pZCBmcm9tIE9fY3VzdG9tZXIgd2hlcmUgY19pZCA9ID8iKTsKLQkgICAgcHMuc2V0SW50KDEsIGkpOwotCSAgICBSZXN1bHRTZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTsKLQkgICAgaWYgKCFycy5uZXh0KCkpCi0JICAgICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIk5vIGN1c3QgZm9yICIgKyBpKTsKLQkgICAgcmV0dXJuVmFsdWUgPSBycy5nZXRJbnQoMSk7CisgICAgdHJ5IHsKKyAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgIlNFTEVDVCBjX2lkIGZyb20gT19jdXN0b21lciB3aGVyZSBjX2lkID0gPyIpOworICAgICAgICBwcy5zZXRJbnQoMSwgaSk7CisgICAgICAgIFJlc3VsdFNldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpOworICAgICAgICBpZiAoIXJzLm5leHQoKSkKKyAgICAgICAgICAgdGhyb3cgbmV3IEZpbmRlckV4Y2VwdGlvbigiTm8gY3VzdCBmb3IgIiArIGkpOworICAgICAgICByZXR1cm5WYWx1ZSA9IHJzLmdldEludCgxKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmluZEN1c3RvbWVyID0gIiArIHJldHVyblZhbHVlKTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCX0gZmluYWxseSB7IAotCSAgICB0cnkgewotCQlpZiAocHMgIT0gbnVsbCkKLQkJICAgIHBzLmNsb3NlKCk7Ci0JCWlmIChjICE9IG51bGwpCi0JCSAgICBjLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCX0KKyAgICAgICAgdGhyb3cgbmV3IEZpbmRlckV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CiAKICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgIH0KQEAgLTY2LDM4ICs2NiwzOCBAQAogICAgIHB1YmxpYyB2b2lkIHVwZGF0ZUN1c3RvbWVyKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiSW4gdXBkYXRlQ3VzdG9tZXIgY2FsbGVyIiApOwotICAgICAgICAKLQlDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCXRyeSB7Ci0JICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSJVUERBVEUgT19jdXN0b21lciBTRVQgY19waG9uZSA9ID8gV0hFUkUgY19pZCA9IDIgQU5EIGNfcGhvbmUgPSAnZm9vJyIpOworCisgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiVVBEQVRFIE9fY3VzdG9tZXIgU0VUIGNfcGhvbmUgPSA/IFdIRVJFIGNfaWQgPSAyIEFORCBjX3Bob25lID0gJ2ZvbyciKTsKICAgICAgICAgICAgIHBzLnNldFN0cmluZygxLCAid2Vic2VydmljZSIpOwotCSAgICBpbnQgcmVzdWx0ID0gcHMuZXhlY3V0ZVVwZGF0ZSgpOworICAgICAgICBpbnQgcmVzdWx0ID0gcHMuZXhlY3V0ZVVwZGF0ZSgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJleGVjdXRlIHVwZGF0ZSByZXR1cm5lZCAiICsgcmVzdWx0KTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCX0gZmluYWxseSB7IAotCSAgICB0cnkgewotCQlpZiAocHMgIT0gbnVsbCkKLQkJICAgIHBzLmNsb3NlKCk7Ci0JCWlmIChjICE9IG51bGwpCi0JCSAgICBjLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCX0KKyAgICAgICAgdGhyb3cgbmV3IEZpbmRlckV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZGRpbmcgQ29tbWl0U3RhdGVmdWxCZWFuIHdpdGggU2Vzc2lvblN5bmNoICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0byB0cmFuc2FjdGlvbiIpOwotICAgICAgICAKKwogCiAgICAgICAgIENvbW1pdFN0YXRlZnVsTG9jYWwgY3NiID0gKENvbW1pdFN0YXRlZnVsTG9jYWwpCiAgICAgICAgICAgICBzZXNzaW9uQ3R4Lmxvb2t1cCgiY3NiIik7CiAgICAgICAgIGNzYi5mb28oKTsKIAogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9jb21taXQvZWpiL0NvbW1pdFN0YXRlZnVsQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2UvY29tbWl0L2VqYi9Db21taXRTdGF0ZWZ1bEJlYW4uamF2YQppbmRleCA5YmZlMzQxLi5hZTcyYzExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9jb21taXQvZWpiL0NvbW1pdFN0YXRlZnVsQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2NvbW1pdC9lamIvQ29tbWl0U3RhdGVmdWxCZWFuLmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIGltcG9ydCBqYWthcnRhLmFubm90YXRpb24uUmVzb3VyY2U7CiAKIEBTdGF0ZWZ1bAotcHVibGljIGNsYXNzIENvbW1pdFN0YXRlZnVsQmVhbiAKK3B1YmxpYyBjbGFzcyBDb21taXRTdGF0ZWZ1bEJlYW4KICAgICBpbXBsZW1lbnRzIENvbW1pdFN0YXRlZnVsTG9jYWwsIFNlc3Npb25TeW5jaHJvbml6YXRpb24gewogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2NvbW1pdC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9jb21taXQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDY5NzU4NzUuLmIwYTM0OTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2NvbW1pdC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2UvY29tbWl0L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw4ICsxLDggQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIE5PVCBOVUxMIFBSSU1BUlkgS0VZLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigzMikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIE5PVCBOVUxMIFBSSU1BUlkgS0VZLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDMyKQorKTsKKwogSU5TRVJUIElOVE8gT19DdXN0b21lciB2YWx1ZXMgKDIsICdmb28nKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9jb21taXQvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2NvbW1pdC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDcwZDFmY2MuLmQ4NTRiOTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2NvbW1pdC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2NvbW1pdC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3NpbmsvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjhmNzYzMS4uM2JiMDkxZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3NpbmsvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMyArMTUsMjMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImtzaW5rIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYnNlcnZpY2VzLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2Vic2VydmljZXMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dhci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dhci9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3NpbmsvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3NpbmsvYnVpbGQueG1sCmluZGV4IGU4MDBjNDIuLjM4YjY1MTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9idWlsZC54bWwKQEAgLTM0LDkgKzM0LDkgQEAKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLGJ1aWxkLGRlcGxveSxydW4sdW5kZXBsb3kiLz4KIAogICA8dGFyZ2V0IG5hbWU9InJ1bi53c2NvbXBpbGUiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KLSAgICAgICAgPGFyZyBsaW5lPSIke3dzY29tcGlsZS5jb21tYW5kfSIgLz4gICAgICAgIAotCTwvZXhlYz4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+CisgICAgICAgIDxhcmcgbGluZT0iJHt3c2NvbXBpbGUuY29tbWFuZH0iIC8+CisgICAgPC9leGVjPgogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9IiI+CkBAIC02NSwxMSArNjUsMTEgQEAKICAgPHRhcmdldCBuYW1lPSJ3c2NvbXBpbGUtYXBwY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPG1rZGlyIGRpcj0ib3V0cHV0Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1pbXBvcnQgLWY6bm9ycGNzdHJ1Y3R1cmVzIC1rZWVwIC1kIG91dHB1dCAtcyBvdXRwdXQgLWNsYXNzcGF0aCAuIC1tb2RlbCBnb29nbGVjbGllbnQubW9kZWwgd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jb20vc3VuL3MxYXNkZXYvZWpiL3dlYnNlcnZpY2Uva3NpbmsvZ29vZ2xlY2xpZW50Ij4KLSAgICAgICA8ZmlsZXNldCBkaXI9Im91dHB1dC8vY29tL3N1bi9zMWFzZGV2L2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2dvb2dsZWNsaWVudCIgCisgICAgICAgPGZpbGVzZXQgZGlyPSJvdXRwdXQvL2NvbS9zdW4vczFhc2Rldi9lamIvd2Vic2VydmljZS9rc2luay9nb29nbGVjbGllbnQiCiAgICAgICAgIGluY2x1ZGVzPSJEaXJlY3RvcnlDYXRlZ29yeS5jbGFzcywgR29vZ2xlU2VhcmNoUmVzdWx0LmNsYXNzLCBHb29nbGVTZWFyY2hTZXJ2aWNlLmNsYXNzLCBHb29nbGVTZWFyY2hQb3J0LmNsYXNzLCBSZXN1bHRFbGVtZW50LmNsYXNzIi8+CiAgICAgPC9jb3B5PgogICAgIDwhLS0gPGRlbGV0ZSBkaXI9Im91dHB1dCIvPiAtLT4KQEAgLTc4LDExICs3OCwxMSBAQAogICA8dGFyZ2V0IG5hbWU9IndzY29tcGlsZS1lamIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8bWtkaXIgZGlyPSJvdXRwdXQiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICB2YWx1ZT0iLWltcG9ydCAtZjpub3JwY3N0cnVjdHVyZXMgLWtlZXAgLWQgb3V0cHV0IC1zIG91dHB1dCAtY2xhc3NwYXRoIC4gd3Njb21waWxlX2NvbmZpZ19lamIueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jb20vc3VuL3MxYXNkZXYvZWpiL3dlYnNlcnZpY2Uva3NpbmsvZ29vZ2xlc2VydmVyIj4KLSAgICAgICA8ZmlsZXNldCBkaXI9Im91dHB1dC9jb20vc3VuL3MxYXNkZXYvZWpiL3dlYnNlcnZpY2Uva3NpbmsvZ29vZ2xlc2VydmVyIiAKKyAgICAgICA8ZmlsZXNldCBkaXI9Im91dHB1dC9jb20vc3VuL3MxYXNkZXYvZWpiL3dlYnNlcnZpY2Uva3NpbmsvZ29vZ2xlc2VydmVyIgogICAgICAgICBpbmNsdWRlcz0iRGlyZWN0b3J5Q2F0ZWdvcnkuY2xhc3MsIEdvb2dsZVNlYXJjaFJlc3VsdC5jbGFzcywgR29vZ2xlU2VhcmNoUG9ydC5jbGFzcywgUmVzdWx0RWxlbWVudC5jbGFzcyIvPgogICAgIDwvY29weT4KICAgICA8ZGVsZXRlIGRpcj0ib3V0cHV0Ii8+CkBAIC05MSwzNyArOTEsMzcgQEAKICAgPHRhcmdldCBuYW1lPSJ3c2NvbXBpbGUtd2ViIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPG1rZGlyIGRpcj0ib3V0cHV0Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgICAgICB2YWx1ZT0iLWltcG9ydCAtZjpub3JwY3N0cnVjdHVyZXMgLWtlZXAgLWQgb3V0cHV0IC1zIG91dHB1dCAtbW9kZWwgZ29vZ2xld2ViLm1vZGVsIC1jbGFzc3BhdGggLiB3c2NvbXBpbGVfY29uZmlnX3dlYi54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NvbS9zdW4vczFhc2Rldi9lamIvd2Vic2VydmljZS9rc2luay9nb29nbGVzZXJ2ZXJ3ZWIiPgotICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0L2NvbS9zdW4vczFhc2Rldi9lamIvd2Vic2VydmljZS9rc2luay9nb29nbGVzZXJ2ZXJ3ZWIiIAorICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0L2NvbS9zdW4vczFhc2Rldi9lamIvd2Vic2VydmljZS9rc2luay9nb29nbGVzZXJ2ZXJ3ZWIiCiAgICAgICAgIGluY2x1ZGVzPSJEaXJlY3RvcnlDYXRlZ29yeS5jbGFzcywgR29vZ2xlU2VhcmNoUmVzdWx0LmNsYXNzLCBHb29nbGVTZWFyY2hQb3J0LmNsYXNzLCBSZXN1bHRFbGVtZW50LmNsYXNzIi8+CiAgICAgPC9jb3B5PgogICAgIDxkZWxldGUgZGlyPSJvdXRwdXQiLz4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNvbXBpbGUiPgotICAgIDwhLS0gCi0JRUpCIG1vZHVsZSBjcmVhdGlvbgorICAgIDwhLS0KKyAgICBFSkIgbW9kdWxlIGNyZWF0aW9uCiAgICAgLS0+CiAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwiCiAgICAgICBmaWxlPSJHb29nbGVTZWFyY2gud3NkbCIvPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIgogICAgICAgZmlsZT0iR29vZ2xlU2VhcmNoX3R5cGVzLndzZGwiLz4KLSAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAotCSBmaWxlPSJHb29nbGVNYXBwaW5nX2VqYi54bWwiLz4KKyAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCisgICAgIGZpbGU9Ikdvb2dsZU1hcHBpbmdfZWpiLnhtbCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICB2YWx1ZT0iR29vZ2xlTWFwcGluZ19lamIueG1sLE1FVEEtSU5GL3dzZGwvKiosKiovKi5jbGFzcyIgLz4KIAogICAgIDwvYW50Y2FsbD4KLSAgICA8IS0tIAotCVdhciBtb2R1bGUgY3JlYXRpb24gCisgICAgPCEtLQorICAgIFdhciBtb2R1bGUgY3JlYXRpb24KICAgICAtLT4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLXdhci1maWxlIi8+Ci0gICAgPCEtLSAKLQlBcHBDbGllbnQgbW9kdWxlIGNyZWF0aW9uCisgICAgPCEtLQorICAgIEFwcENsaWVudCBtb2R1bGUgY3JlYXRpb24KICAgICAtLT4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIKICAgICAgIGZpbGU9Ikdvb2dsZVNlYXJjaC53c2RsIi8+CkBAIC0xMjksMzYgKzEyOSwzNiBAQAogICAgICAgZmlsZT0iR29vZ2xlU2VhcmNoX3R5cGVzLndzZGwiLz4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIKICAgICAgIGZpbGU9Ikdvb2dsZVNlYXJjaF9wYXJ0aWFsLndzZGwiLz4KLSAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAotCSBmaWxlPSJHb29nbGVNYXBwaW5nX2FwcGNsaWVudC54bWwiLz4KLSAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAotCSBmaWxlPSJnb29nbGVjbGllbnQubW9kZWwiLz4KKyAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCisgICAgIGZpbGU9Ikdvb2dsZU1hcHBpbmdfYXBwY2xpZW50LnhtbCIvPgorICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKKyAgICAgZmlsZT0iZ29vZ2xlY2xpZW50Lm1vZGVsIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiI+Ci0gICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgIHZhbHVlPSJnb29nbGVjbGllbnQubW9kZWwsR29vZ2xlTWFwcGluZ19hcHBjbGllbnQueG1sLE1FVEEtSU5GL3dzZGwvKiosKiovKi5jbGFzcyIgLz4KIAogICAgIDwvYW50Y2FsbD4KLSAgICA8IS0tIAotCUVBUiBmaWxlIGNyZWF0aW9uIAorICAgIDwhLS0KKyAgICBFQVIgZmlsZSBjcmVhdGlvbgogICAgIC0tPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIgLz4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiCiAgICAgICBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9Ii8+Ci0gICAgPGphciBkZXN0ZmlsZSA9ICIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIAotCXVwZGF0ZT0idHJ1ZSI+CisgICAgPGphciBkZXN0ZmlsZSA9ICIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiCisgICAgdXBkYXRlPSJ0cnVlIj4KICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotCTxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KKyAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiAgICAgICA8L2ZpbGVzZXQ+CiAgICAgPC9qYXI+Ci0JCi0gIDwvdGFyZ2V0PiAKKworICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWFwcGNsaWVudC1maWxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtd2FyLWZpbGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8ZWNobyBtZXNzYWdlPSJteSBidWlsZCBjbGFzc2VzIGRpciBpczoke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotICAgIDxkZWxldGUgZmlsZT0iJHt3YXIuZmlsZX0iLz4gIAorICAgIDxkZWxldGUgZmlsZT0iJHt3YXIuZmlsZX0iLz4KICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiLz4KICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORiIvPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORiIKQEAgLTE3MiwxMCArMTcyLDEwIEBACiAgICAgICBmaWxlPSJHb29nbGVTZWFyY2gud3NkbCIvPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93c2RsIgogICAgICAgZmlsZT0iR29vZ2xlU2VhcmNoX3R5cGVzLndzZGwiLz4KLSAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIiAKLQkgZmlsZT0iR29vZ2xlTWFwcGluZ193ZWIueG1sIi8+Ci0gICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcCIgCi0JIGZpbGU9Imdvb2dsZXdlYi5tb2RlbCIvPgorICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiCisgICAgIGZpbGU9Ikdvb2dsZU1hcHBpbmdfd2ViLnhtbCIvPgorICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiCisgICAgIGZpbGU9Imdvb2dsZXdlYi5tb2RlbCIvPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9jbGFzc2VzL2NvbS9zdW4vczFhc2Rldi9lamIvd2Vic2VydmljZS9rc2luay9nb29nbGVzZXJ2ZXJ3ZWIiPgogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NvbS9zdW4vczFhc2Rldi9lamIvd2Vic2VydmljZS9rc2luay9nb29nbGVzZXJ2ZXJ3ZWIiPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5jbGFzcyIvPgpAQCAtMTg1LDEyICsxODUsMTIgQEAKICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIiBjYXNlc2Vuc2l0aXZlPSJ5ZXMiPgogICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyoqIi8+CiAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgPC9qYXI+CQorICAgIDwvamFyPgogICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiLz4KICAgPC90YXJnZXQ+CiAKIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC0yMjEsNyArMjIxLDcgQEAKIAogICAgPHRhcmdldCBuYW1lPSJidWlsZC1zdGFuZGFsb25lIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgICB2YWx1ZT0iLWdlbjpjbGllbnQgLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0gLXMgJHtidWlsZC5jbGFzc2VzLmRpcn0gLWNsYXNzcGF0aCAuIHdzY29tcGlsZV9jb25maWdfc3RhbmRhbG9uZS54bWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgpAQCAtMjQxLDcgKzI0MSw3IEBACiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuUzFBU19IT01FfS9saWIvYXBwc2Vydi1ydC5qYXIiLz4KICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXIiLz4KICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiLz4KLQkgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIvPgorICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIi8+CiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgIDwvY2xhc3NwYXRoPgogCkBAIC0yNDksMTAgKzI0OSwxMCBAQAogICAgICAgPHN5c3Byb3BlcnR5IGtleT0iaHR0cC5wcm94eVBvcnQiIHZhbHVlPSI4MDgwIi8+CiAgICAgPC9qYXZhPgogICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAKKyAgICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImNvbnRhY3Rnb29nbGUiPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CkBAIC0yNjIsMzQgKzI2MiwzNCBAQAogCiAgIDx0YXJnZXQgbmFtZT0iZ2VuLW1hcHBpbmctYXBwY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1nZW4gLWNwIC4gLW1hcHBpbmcgR29vZ2xlTWFwcGluZ19hcHBjbGllbnQueG1sIHdzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJnZW4tbWFwcGluZy1lamIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICB2YWx1ZT0iLWdlbiAtY3AgLiAtbWFwcGluZyBHb29nbGVNYXBwaW5nX2VqYi54bWwgd3Njb21waWxlX2NvbmZpZ19lamIueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9Imdlbi1tYXBwaW5nLXdlYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItZ2VuIC1jcCAuIC1tYXBwaW5nIEdvb2dsZU1hcHBpbmdfd2ViLnhtbCB3c2NvbXBpbGVfY29uZmlnX3dlYi54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtdXNlciI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXVzZXItY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJqMmVlIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJwYXNzd29yZCIgdmFsdWU9ImoyZWUiLz4KLQkgICAgPHBhcmFtIG5hbWU9Imdyb3VwcyIgdmFsdWU9InN0YWZmIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0iajJlZSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icGFzc3dvcmQiIHZhbHVlPSJqMmVlIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJncm91cHMiIHZhbHVlPSJzdGFmZiIvPgogICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS11c2VyIj4KICAgICAgIDwhLS0gcmVtb3ZlIHRlc3QgdXNlcnMsIGp1c3QgY2xlYW51cC4gLS0+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbiI+CkBAIC0zMDIsMTAgKzMwMiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgdGhlIFdlYlNlcnZpY2VzIHRlc3QpCi0JCQlhbnQgY29udGFjdGdvb2dsZSAoRXhlY3V0ZXMgdGhlIGFwcGNsaWVudCBjb250YWN0aW5nIHRoZSBHb29nbGUuY29tIFdlYlNlcnZpY2VzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyB0aGUgV2ViU2VydmljZXMgdGVzdCkKKyAgICAgICAgICAgIGFudCBjb250YWN0Z29vZ2xlIChFeGVjdXRlcyB0aGUgYXBwY2xpZW50IGNvbnRhY3RpbmcgdGhlIEdvb2dsZS5jb20gV2ViU2VydmljZXMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3NpbmsvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3NpbmsvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDVhYWNkNmEuLmI5ZjViNjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMwLDEwICszMCwxMCBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBRTmFtZSBQT1JUX1FOQU1FID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUU5hbWUgUE9SVF9RTkFNRSA9CiAgICAgICAgIG5ldyBRTmFtZSgidXJuOkdvb2dsZVNlYXJjaCIsICJHb29nbGVTZWFyY2hQb3J0Iik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUU5hbWUgT1BFUkFUSU9OX1FOQU1FID0KICAgICAgICAgbmV3IFFOYW1lKCJ1cm46R29vZ2xlU2VhcmNoIiwgImRvU3BlbGxpbmdTdWdnZXN0aW9uIik7CkBAIC00NCwxMiArNDQsMTIgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAKLSAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZ29vZ2xlc2VydmVyIGFwcGNsaWVudCIpOwkKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZ29vZ2xlc2VydmVyIGFwcGNsaWVudCIpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZ29vZ2xlc2VydmVyLWFwcGxpZW50SUQiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgd29yZCA9IChhcmdzLmxlbmd0aCA+IDApID8gYXJnc1swXSA6ICJzcGVsbG5nIjsKICAgICAgICAgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0gKGFyZ3MubGVuZ3RoID4gMSkgPyBhcmdzWzFdIDogbnVsbDsKQEAgLTU4LDggKzU4LDggQEAKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAotICAgICAgICAKLSAgICAJdHJ5IHsKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgU3RyaW5nIGdvb2dsZUtleSA9IChTdHJpbmcpCiAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2dvb2dsZWtleSIpOwpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICAgICAgTWV0aG9kIGhlbGxvT25lV2F5ID0gZm9vLmdldENsYXNzKCkuZ2V0TWV0aG9kKCJoZWxsb09uZVdheSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IENsYXNzW10geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH0pOwogICAgICAgICAgICAgaGVsbG9PbmVXYXkuaW52b2tlKGZvbywgbmV3IE9iamVjdFtdIHsgIjEwMDAiIH0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBnb29nbGVTZWFyY2hTZXJ2aWNlLmdldEhhbmRsZXJSZWdpc3RyeSgpOwogICAgICAgICAgICAgfSBjYXRjaChqYXZhLmxhbmcuVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gdW9lKSB7CkBAIC05NSw3ICs5NSw3IEBACiAKICAgICAgICAgICAgIGRvRHluYW1pY1Byb3h5VGVzdChnb29nbGVTZWFyY2hTZXJ2aWNlLCBnb29nbGVLZXkpOwogCi0gICAgICAgICAgICBHb29nbGVTZWFyY2hQb3J0IGdvb2dsZVNlYXJjaFBvcnQgPSAKKyAgICAgICAgICAgIEdvb2dsZVNlYXJjaFBvcnQgZ29vZ2xlU2VhcmNoUG9ydCA9CiAgICAgICAgICAgICAgICAgZ29vZ2xlU2VhcmNoU2VydmljZS5nZXRHb29nbGVTZWFyY2hQb3J0KCk7CiAgICAgICAgICAgICBkb1NwZWxsaW5nU3VnZ2VzdGlvbihnb29nbGVTZWFyY2hQb3J0LCBnb29nbGVLZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwpAQCAtMTIxLDcgKzEyMSw3IEBACiAgICAgICAgICAgICAgICAgcGFydGlhbFdzZGxTZXJ2aWNlR2VuZXJpYy5nZXRQb3J0KEdvb2dsZVNlYXJjaFBvcnQuY2xhc3MpOwogICAgICAgICAgICAgZ29vZ2xlU2VhcmNoLmRvU3BlbGxpbmdTdWdnZXN0aW9uKGdvb2dsZUtleSwgd29yZCk7CiAKLS8qKiAgICAgICAgICAgIEdvb2dsZVNlYXJjaFNlcnZpY2UgcGFydGlhbFdzZGxTZXJ2aWNlR2VuZXJhdGVkID0gCisvKiogICAgICAgICAgICBHb29nbGVTZWFyY2hTZXJ2aWNlIHBhcnRpYWxXc2RsU2VydmljZUdlbmVyYXRlZCA9CiAgICAgICAgICAgICAgICAgKEdvb2dsZVNlYXJjaFNlcnZpY2UpCiAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvcGFydGlhbEdlbmVyYXRlZCIpOwogICAgICAgICAgICAgZ29vZ2xlU2VhcmNoID0gcGFydGlhbFdzZGxTZXJ2aWNlR2VuZXJhdGVkLmdldEdvb2dsZVNlYXJjaFBvcnQoKTsKQEAgLTEzMCwxNyArMTMwLDE3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXBwY2xpZW50ICIgKyB0ZXN0TmFtZSwgc3RhdC5QQVNTKTsKIAogCi0gICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ29vZ2xlIGNsaWVudCB0ZXN0IGZhaWxlZCIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXBwY2xpZW50ICIgKyB0ZXN0TmFtZSwgc3RhdC5GQUlMKTsKLQl9IAorICAgIH0KIAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkb1NwZWxsaW5nU3VnZ2VzdGlvbihHb29nbGVTZWFyY2hQb3J0IGdvb2dsZVNlYXJjaFBvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBnb29nbGVLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBlbmRwb2ludEFkZHJlc3MpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZW5kcG9pbnRBZGRyZXNzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBpZiggZW5kcG9pbnRBZGRyZXNzICE9IG51bGwgKSB7CkBAIC0xNTcsNyArMTU3LDcgQEAKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbnRhY3RpbmcgZ29vZ2xlIGZvciBzcGVsbGluZyAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWdnZXN0aW9uIGF0ICIgKyBlbmRwb2ludEFkZHJlc3MpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgc3BlbGxpbmdTdWdnZXN0aW9uID0KICAgICAgICAgICAgIGdvb2dsZVNlYXJjaFBvcnQuZG9TcGVsbGluZ1N1Z2dlc3Rpb24oZ29vZ2xlS2V5LCB3b3JkKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHYXZlIGdvb2dsZSB0aGUgd29yZCAnIiArIHdvcmQgKyAiJyAuLi4gIiArCkBAIC0xNzAsMjEgKzE3MCwyMSBAQAogICAgICAgICBDYWxsIGMxID0gc2VydmljZS5jcmVhdGVDYWxsKCk7CiAgICAgICAgIENhbGwgYzIgPSBzZXJ2aWNlLmNyZWF0ZUNhbGwoUE9SVF9RTkFNRSk7CiAgICAgICAgIENhbGwgYzMgPSBzZXJ2aWNlLmNyZWF0ZUNhbGwoUE9SVF9RTkFNRSwgT1BFUkFUSU9OX1FOQU1FKTsKLSAgICAgICAgQ2FsbCBjNCA9IHNlcnZpY2UuY3JlYXRlQ2FsbChQT1JUX1FOQU1FLCAKKyAgICAgICAgQ2FsbCBjNCA9IHNlcnZpY2UuY3JlYXRlQ2FsbChQT1JUX1FOQU1FLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QRVJBVElPTl9RTkFNRS5nZXRMb2NhbFBhcnQoKSk7CiAgICAgICAgIENhbGxbXSBjYWxscyA9IHNlcnZpY2UuZ2V0Q2FsbHMoUE9SVF9RTkFNRSk7CiAKICAgICAgICAgaWYoIHRhcmdldEVuZHBvaW50QWRkcmVzcyAhPSBudWxsICkgewotICAgICAgICAgICAgYzMuc2V0VGFyZ2V0RW5kcG9pbnRBZGRyZXNzKHRhcmdldEVuZHBvaW50QWRkcmVzcyk7ICAgICAgICAgICAgCi0gICAgICAgIH0gCisgICAgICAgICAgICBjMy5zZXRUYXJnZXRFbmRwb2ludEFkZHJlc3ModGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKKyAgICAgICAgfQogICAgICAgICBPYmplY3QgcGFyYW1zW10gPSBuZXcgT2JqZWN0W10ge2dvb2dsZUtleSwgImhlbGxvIiB9OwogICAgICAgICBTdHJpbmcgcmVzcG9uc2UgPSAoU3RyaW5nKSBjMy5pbnZva2UocGFyYW1zKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSA9ICIgKyByZXNwb25zZSk7CiAKICAgICAgICAgLy8gY29udGFpbmVyLW1hbmFnZWQgcG9ydCBzZWxlY3Rpb24KLSAgICAgICAgR29vZ2xlU2VhcmNoUG9ydCBzZWkgPSAoR29vZ2xlU2VhcmNoUG9ydCkgCisgICAgICAgIEdvb2dsZVNlYXJjaFBvcnQgc2VpID0gKEdvb2dsZVNlYXJjaFBvcnQpCiAgICAgICAgICAgICBzZXJ2aWNlLmdldFBvcnQoR29vZ2xlU2VhcmNoUG9ydC5jbGFzcyk7Ci0gICAgICAgIHNlaSA9IChHb29nbGVTZWFyY2hQb3J0KSAKKyAgICAgICAgc2VpID0gKEdvb2dsZVNlYXJjaFBvcnQpCiAgICAgICAgICAgICBzZXJ2aWNlLmdldFBvcnQoUE9SVF9RTkFNRSwgR29vZ2xlU2VhcmNoUG9ydC5jbGFzcyk7CiAKICAgICAgICAgUU5hbWUgc2VydmljZU5hbWUgPSBzZXJ2aWNlLmdldFNlcnZpY2VOYW1lKCk7CkBAIC0xOTcsMTggKzE5NywxOCBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgb25ld2F5IG9wZXJhdGlvbiIpOwogICAgICAgICBDYWxsIG9uZXdheSA9IHNlcnZpY2UuY3JlYXRlQ2FsbChQT1JUX1FOQU1FLCAiaGVsbG9PbmVXYXkiKTsKICAgICAgICAgaWYoIHRhcmdldEVuZHBvaW50QWRkcmVzcyAhPSBudWxsICkgewotICAgICAgICAgICAgb25ld2F5LnNldFRhcmdldEVuZHBvaW50QWRkcmVzcyh0YXJnZXRFbmRwb2ludEFkZHJlc3MpOyAgICAgICAgICAgIAotICAgICAgICB9IAorICAgICAgICAgICAgb25ld2F5LnNldFRhcmdldEVuZHBvaW50QWRkcmVzcyh0YXJnZXRFbmRwb2ludEFkZHJlc3MpOworICAgICAgICB9CiAKICAgICAgICAgbG9uZyBvbmVXYXlNZXRob2RXYWl0VGltZUluTWlsbGlzID0gNDAwMDsKIAotICAgICAgICBEYXRlIGJlZm9yZSA9IG5ldyBEYXRlKCk7ICAgICAgICAKLSAgICAgICAgb25ld2F5Lmludm9rZU9uZVdheShuZXcgT2JqZWN0W10gCisgICAgICAgIERhdGUgYmVmb3JlID0gbmV3IERhdGUoKTsKKyAgICAgICAgb25ld2F5Lmludm9rZU9uZVdheShuZXcgT2JqZWN0W10KICAgICAgICAgICAgICAgIHsgb25lV2F5TWV0aG9kV2FpdFRpbWVJbk1pbGxpcyArICIiIH0pOwogICAgICAgICBEYXRlIGFmdGVyID0gbmV3IERhdGUoKTsKICAgICAgICAgbG9uZyBlbGFwc2VkVGltZSA9IGFmdGVyLmdldFRpbWUoKSAtIGJlZm9yZS5nZXRUaW1lKCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib25lIHdheSBvcGVyYXRpb24gYmVnYW4gYXQgIiArIGJlZm9yZSArIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBhbmQgcmV0dXJuZWQgYXQgIiArIGFmdGVyICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib25lIHdheSBvcGVyYXRpb24gYmVnYW4gYXQgIiArIGJlZm9yZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGFuZCByZXR1cm5lZCBhdCAiICsgYWZ0ZXIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBhbmQgdG9vayAiICsgIGVsYXBzZWRUaW1lICsgIiBtaWxsaS1zZWNvbmRzIik7CiAgICAgICAgIGlmKCBlbGFwc2VkVGltZSA+IG9uZVdheU1ldGhvZFdhaXRUaW1lSW5NaWxsaXMgKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJvbmUgd2F5IG9wZXJhdGlvbiBibG9ja2VkIGZvciB0b28gbG9uZyAiKTsKQEAgLTIxOSw3ICsyMTksNyBAQAogICAgICAgICAvLyB0byB1bmRlcGxveSwgYnV0IHRoZSBlbmRwb2ludCBpcyBzdGlsbCBleGVjdXRpbmcgaXRzCiAgICAgICAgIC8vIG9uZXdheSBvcGVyYXRpb24uCiAgICAgICAgIGxvbmcgc2xlZXBUaW1lID0gKG9uZVdheU1ldGhvZFdhaXRUaW1lSW5NaWxsaXMgLSBlbGFwc2VkVGltZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibm93IHNsZWVwaW5nIGZvciAiICsgc2xlZXBUaW1lICsgIiBtaWxsaSBzZWNzIik7CiAgICAgICAgIFRocmVhZC5zbGVlcChzbGVlcFRpbWUpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJldHVybmluZyBmcm9tIGRvRHluYW1pY1Byb3h5VGVzdCIpOwpAQCAtMjc1LDcgKzI3NSw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgdW5zdXBwb3J0ZWQgb3BlcmF0aW9uICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3IgU2VydmljZS5nZXRQb3J0KFNFSSkiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgUmVtb3RlIHJlbW90ZSA9IHNlcnZpY2UuZ2V0UG9ydChQT1JUX1FOQU1FLCBHb29nbGVTZWFyY2hQb3J0LmNsYXNzKTsKICAgICAgICAgfSBjYXRjaChqYXZhLmxhbmcuVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gdW9lKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9jbGllbnQvQ2xpZW50SGFuZGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3NpbmsvY2xpZW50L0NsaWVudEhhbmRsZXIuamF2YQppbmRleCBhODQ3YmJlLi45YjIxY2Q0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9jbGllbnQvQ2xpZW50SGFuZGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2NsaWVudC9DbGllbnRIYW5kbGVyLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIGltcG9ydCBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQ7CiAKIHB1YmxpYyBjbGFzcyBDbGllbnRIYW5kbGVyIGV4dGVuZHMgR2VuZXJpY0hhbmRsZXIgewotICAKKwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gQ2xpZW50SGFuZGxlcjo6ZGVzdHJveSgpIik7CiAgICAgfQpAQCAtNDAsMTcgKzQwLDE3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gQ2xpZW50SGFuZGxlcjo6aGFuZGxlRmF1bHQoKSIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlUmVxdWVzdChNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gQ2xpZW50SGFuZGxlcjo6aGFuZGxlUmVxdWVzdCgpIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAgICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVSZXNwb25zZShNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gQ2xpZW50SGFuZGxlcjo6aGFuZGxlUmVzcG9uc2UoKSIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IAotICAgICAgICAKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBpbml0KEhhbmRsZXJJbmZvIGNvbmZpZykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIENsaWVudEhhbmRsZXI6OmluaXQoKSIpOwogICAgICAgICB0cnkgewpAQCAtNjAsOSArNjAsOSBAQAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGFuZGxlciBpbml0IHBhcmFtcyA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmdldEhhbmRsZXJDb25maWcoKSk7Ci0gICAgfSAKLSAgIAorICAgIH0KKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3NpbmsvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3NpbmsvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IGExYzkzOTUuLjAzMTkyYTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKQEAgLTk3LDcgKzk3LDcgQEAKICAgICAgIDwvc2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+CiAgICAgICA8cG9ydC1jb21wb25lbnQtbGluaz5rc2luay13ZWIud2FyI0dvb2dsZVNlYXJjaFBvcnQ8L3BvcnQtY29tcG9uZW50LWxpbms+CiAgICAgPC9wb3J0LWNvbXBvbmVudC1yZWY+Ci0gIDwvc2VydmljZS1yZWY+ICAKKyAgPC9zZXJ2aWNlLXJlZj4KIDwhLS0gIDxzZXJ2aWNlLXJlZj4KICAgICA8ZGVzY3JpcHRpb24+cGFydGlhbCB3c2RsIHRlc3QgZ29vZ2xlIHNlcnZpY2UgcmVmPC9kZXNjcmlwdGlvbj4KICAgICA8c2VydmljZS1yZWYtbmFtZT5zZXJ2aWNlL3BhcnRpYWxHZW5lcmF0ZWQ8L3NlcnZpY2UtcmVmLW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDMzNjhhYzUuLjNhYjJkNzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0xOSwxMCArMTksMTAgQEAKIC0tPgogCiA8c3VuLWVqYi1qYXI+Ci0gIDxlbnRlcnByaXNlLWJlYW5zPiAgCisgIDxlbnRlcnByaXNlLWJlYW5zPgogICAgIDxlamI+CiAgICAgICA8ZWpiLW5hbWU+R29vZ2xlRWpiPC9lamItbmFtZT4KLSAgICAgIDxqbmRpLW5hbWU+Y29tX3N1bl9zMWFzZGV2X2VqYl93ZWJzZXJ2aWNlX2tzaW5rX0dvb2dsZUVqYjwvam5kaS1uYW1lPiAgICAKKyAgICAgIDxqbmRpLW5hbWU+Y29tX3N1bl9zMWFzZGV2X2VqYl93ZWJzZXJ2aWNlX2tzaW5rX0dvb2dsZUVqYjwvam5kaS1uYW1lPgogICAgICAgPHdlYnNlcnZpY2UtZW5kcG9pbnQ+CiAgICAgICAgIDxwb3J0LWNvbXBvbmVudC1uYW1lPkdvb2dsZVNlYXJjaEVqYlBvcnQ8L3BvcnQtY29tcG9uZW50LW5hbWU+CiAgICAgICAgIDxlbmRwb2ludC1hZGRyZXNzLXVyaT5lamJfd2Vic2VydmljZV9rc2lua19Hb29nbGVFSkIvR29vZ2xlU2VhcmNoPC9lbmRwb2ludC1hZGRyZXNzLXVyaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2VqYi9Gb29IYW5kbGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9lamIvRm9vSGFuZGxlci5qYXZhCmluZGV4IGQxNzU0ZTEuLjAwMzkwYjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2VqYi9Gb29IYW5kbGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3NpbmsvZWpiL0Zvb0hhbmRsZXIuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogaW1wb3J0IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dDsKIAogcHVibGljIGNsYXNzIEZvb0hhbmRsZXIgZXh0ZW5kcyBHZW5lcmljSGFuZGxlciB7Ci0gIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29IYW5kbGVyOjpkZXN0cm95KCkiKTsKICAgICB9CkBAIC00MCwxNyArNDAsMTcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29IYW5kbGVyOjpoYW5kbGVGYXVsdCgpIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAgICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVSZXF1ZXN0KE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29IYW5kbGVyOjpoYW5kbGVSZXF1ZXN0KCkiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgICAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZVJlc3BvbnNlKE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29IYW5kbGVyOjpoYW5kbGVSZXNwb25zZSgpIik7CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gCi0gICAgICAgIAorICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGluaXQoSGFuZGxlckluZm8gY29uZmlnKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vSGFuZGxlcjo6aW5pdCgpIik7CiAgICAgICAgIHRyeSB7CkBAIC02MCw5ICs2MCw5IEBACiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIYW5kbGVyIGluaXQgcGFyYW1zID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuZ2V0SGFuZGxlckNvbmZpZygpKTsKLSAgICB9IAotICAgCisgICAgfQorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9lamIvR29vZ2xlRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9lamIvR29vZ2xlRUpCLmphdmEKaW5kZXggY2EyNTM3Zi4uYTY5OWYxYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3NpbmsvZWpiL0dvb2dsZUVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2VqYi9Hb29nbGVFSkIuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogaW1wb3J0IGphdmF4LnhtbC5ycGMuU2VydmljZTsKIGltcG9ydCBqYXZheC54bWwucnBjLkNhbGw7CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMzMsMjQgKzMzLDI0IEBACiBwdWJsaWMgY2xhc3MgR29vZ2xlRUpCIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2M7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBRTmFtZSBQT1JUX1FOQU1FID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUU5hbWUgUE9SVF9RTkFNRSA9CiAgICAgICAgIG5ldyBRTmFtZSgidXJuOkdvb2dsZVNlYXJjaCIsICJHb29nbGVTZWFyY2hQb3J0Iik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUU5hbWUgT1BFUkFUSU9OX1FOQU1FID0KICAgICAgICAgbmV3IFFOYW1lKCJ1cm46R29vZ2xlU2VhcmNoIiwgImRvU3BlbGxpbmdTdWdnZXN0aW9uIik7Ci0gICAgCisKICAgICBwdWJsaWMgR29vZ2xlRUpCKCl7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBHb29nbGVFSkI6OmVqYkNyZWF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gR29vZ2xlRUpCOjplamJDcmVhdGUgISEiKTsKICAgICB9CiAKLSAgICBwdWJsaWMgYnl0ZVtdIGRvR2V0Q2FjaGVkUGFnZShqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyB1cmwpIAotICAgIHsgCi0gICAgICAgIHJldHVybiBudWxsOyAKKyAgICBwdWJsaWMgYnl0ZVtdIGRvR2V0Q2FjaGVkUGFnZShqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyB1cmwpCisgICAgeworICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKLSAgICBwdWJsaWMgU3RyaW5nIGRvU3BlbGxpbmdTdWdnZXN0aW9uKGphdmEubGFuZy5TdHJpbmcga2V5LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcgcGhyYXNlKSAKKyAgICBwdWJsaWMgU3RyaW5nIGRvU3BlbGxpbmdTdWdnZXN0aW9uKGphdmEubGFuZy5TdHJpbmcga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyBwaHJhc2UpCiAgICAgICAgewogCiAgICAgICAgIHRyeSB7CkBAIC03NSwxMiArNzUsMTIgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkdvb2dsZUVKQi5kb1NwZWxsaW5nU3VnZ2VzdGlvbigpOlVuZXhwZWN0ZWQgZXhjZXB0aW9uIGNhdWdodCAtICIsIGV4KTsgICAgICAgIAorICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiR29vZ2xlRUpCLmRvU3BlbGxpbmdTdWdnZXN0aW9uKCk6VW5leHBlY3RlZCBleGNlcHRpb24gY2F1Z2h0IC0gIiwgZXgpOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAvKgogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gc2MuaXNDYWxsZXJJblJvbGUoImZvbyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKAogICAgICAgICAgICAgICAgICJHb29nbGVFSkIuZG9TcGVsbGluZ1N1Z2dlc3Rpb24oKTppc0NhbGxlckluUm9sZShmb28pIHJldHVybmVkIC0gIiArIHJlc3VsdCk7CkBAIC04OSw3ICs4OSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJHb29nbGVFSkIuZG9TcGVsbGluZ1N1Z2dlc3Rpb24oKTpVbmV4cGVjdGVkIGV4Y2VwdGlvbiBjYXVnaHQgaW4gaXNDYWxsZXJJblJvbGUoZm9vKSBjYWxsICIsIGV4KTsgICAgICAgICAgICAKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkdvb2dsZUVKQi5kb1NwZWxsaW5nU3VnZ2VzdGlvbigpOlVuZXhwZWN0ZWQgZXhjZXB0aW9uIGNhdWdodCBpbiBpc0NhbGxlckluUm9sZShmb28pIGNhbGwgIiwgZXgpOwogICAgICAgICB9CiAgICAgICAgICovCiAKQEAgLTk5LDEwICs5OSwxMCBAQAogICAgICAgICAgICAgU2VydmljZSBnZW5lcmljU2VydmljZVdpdGhXU0RMID0gbnVsbDsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgCisgICAgICAgICAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpCiAgICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL1dlYkRJSVJlZmVyZW5jZSIpOwogICAgICAgICAgICAgICAgIGRvRHluYW1pY1Byb3h5VGVzdChzZXJ2aWNlKTsKLSAgICAgICAgICAgICAgICBHb29nbGVTZWFyY2hQb3J0IHdlYlBvcnQgPSAoR29vZ2xlU2VhcmNoUG9ydCkgCisgICAgICAgICAgICAgICAgR29vZ2xlU2VhcmNoUG9ydCB3ZWJQb3J0ID0gKEdvb2dsZVNlYXJjaFBvcnQpCiAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UuZ2V0UG9ydChHb29nbGVTZWFyY2hQb3J0LmNsYXNzKTsKICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHdlYlBvcnQuZG9TcGVsbGluZ1N1Z2dlc3Rpb24oa2V5LCBwaHJhc2UpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpAQCAtMTE0LDEwICsxMTQsMTAgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb29nbGVFSkIgcmV0dXJuaW5nICIgKyByZXR1cm5WYWx1ZSk7CiAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgaGVsbG9PbmVXYXkoU3RyaW5nIHMxKSB7CiAKLSAgICAgICAgamFrYXJ0YS50cmFuc2FjdGlvbi5UcmFuc2FjdGlvbk1hbmFnZXIgdG0gPSAKKyAgICAgICAgamFrYXJ0YS50cmFuc2FjdGlvbi5UcmFuc2FjdGlvbk1hbmFnZXIgdG0gPQogICAgICAgICAgICAgY29tLnN1bi5lbnRlcnByaXNlLlN3aXRjaC5nZXRTd2l0Y2goKS5nZXRUcmFuc2FjdGlvbk1hbmFnZXIoKTsKICAgICAgICAgaW50IHR4U3RhdHVzID0gLTE7CiAgICAgICAgIHRyeSB7CkBAIC0xMjYsMzQgKzEyNiwzNCBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgdGVzdHMgbWFrZSBzdXJlIHR4IGF0dHJpYnV0ZXMgYXJlIHByb2Nlc3NlZCAKKyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyB0ZXN0cyBtYWtlIHN1cmUgdHggYXR0cmlidXRlcyBhcmUgcHJvY2Vzc2VkCiAgICAgICAgIC8vIGNvcnJlY3RseSB3aGVuIHRoZSBzYW1lIG1ldGhvZCBpcyBkZWZpbmVkIG9uIGJvdGggdGhlIHJlbW90ZQogICAgICAgICAvLyBhbmQgd2Vic2VydmljZSBpbnRlcmZhY2UuICAgRGVzY3JpcHRvciBpcyBzZXQgdXAgdG8gaGF2ZQogICAgICAgICAvLyBubyB0eCBmb3IgdGhlIHdlYnNlcnZpY2UgY2FzZSBhbmQgYSBUWF9SRVFVSVJFRCBmb3IgdGhlCiAgICAgICAgIC8vIFJlbW90ZSBjYXNlLgogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHNjLmdldE1lc3NhZ2VDb250ZXh0KCk7Ci0gICAgICAgICAgCisKICAgICAgICAgICAgIC8vIHdlIHdlcmUgaW52b2tlZCB0aHJvdWdoIGEgd2Vic2VyaXZjZSBpbnZvY2F0aW9uLiAgdGhlcmUKICAgICAgICAgICAgIC8vIHNob3VsZG4ndCBiZSBhIHRyYW5zYWN0aW9uLgogICAgICAgICAgICAgaWYoIHR4U3RhdHVzID09IGpha2FydGEudHJhbnNhY3Rpb24uU3RhdHVzLlNUQVRVU19OT19UUkFOU0FDVElPTikgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ycmVjdGx5IGZvdW5kIG5vIHR4IGZvciBoZWxsb09uZVdheSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpbnZva2VkIHRocm91Z2ggYSB3ZWJzZXJ2aWNlIik7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkdvdCB3cm9uZyB0eCBzdGF0dXMgPSAiICsgdHhTdGF0dXMgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJHb3Qgd3JvbmcgdHggc3RhdHVzID0gIiArIHR4U3RhdHVzICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgZm9yIGhlbGxvT25lV2F5IGludm9rZWQgdGhyb3VnaCBhICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndlYiBzZXJ2aWNlIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIC8vIHNpbmNlIHRoZXJlJ3Mgbm8gV0VCIHNlcnZpY2UgbWVzc2FnZSBjb250ZXh0LCB3ZSB3ZXJlCi0gICAgICAgICAgICAvLyBpbnZva2VkIHRocm91Z2ggYSByZW1vdGUgaW52b2NhdGlvbi4gIAotICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIGludm9rZWQgdGhyb3VnaCBhIHJlbW90ZSBpbnZvY2F0aW9uLgorCiAgICAgICAgICAgICBpZiggdHhTdGF0dXMgPT0gamFrYXJ0YS50cmFuc2FjdGlvbi5TdGF0dXMuU1RBVFVTX0FDVElWRSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ycmVjdGx5IGZvdW5kIGFuIGFjdGl2ZSB0eCBmb3IgIiArCiAgICAgICAgICAgICAgICAgICAgImhlbGxvT25lV2F5IGludm9rZWQgdGhyb3VnaCBhIFJlbW90ZSBpbnRlcmZhY2UiKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiR290IHdyb25nIHR4IHN0YXR1cyA9ICIgKyB0eFN0YXR1cyArIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkdvdCB3cm9uZyB0eCBzdGF0dXMgPSAiICsgdHhTdGF0dXMgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBmb3IgaGVsbG9PbmVXYXkgaW52b2tlZCB0aHJvdWdoIGEgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3RlIGludGVyZmFjZSIpOwogICAgICAgICAgICAgfQpAQCAtMTc2LDE2ICsxNzYsMTYgQEAKICAgICBwdWJsaWMgR29vZ2xlU2VhcmNoUmVzdWx0IGRvR29vZ2xlU2VhcmNoKGphdmEubGFuZy5TdHJpbmcga2V5LCBqYXZhLmxhbmcuU3RyaW5nIHEsIGludCBzdGFydCwgaW50IG1heFJlc3VsdHMsIGJvb2xlYW4gZmlsdGVyLCBqYXZhLmxhbmcuU3RyaW5nIHJlc3RyaWN0LCBib29sZWFuIHNhZmVTZWFyY2gsIGphdmEubGFuZy5TdHJpbmcgbHIsIGphdmEubGFuZy5TdHJpbmcgaWUsIGphdmEubGFuZy5TdHJpbmcgb2UpIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQkKKwogICAgICAgICB0aGlzLnNjID0gc2M7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIAogICAgIHByaXZhdGUgdm9pZCBkb0R5bmFtaWNQcm94eVRlc3QoU2VydmljZSBzZXJ2aWNlKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTE5MywxNCArMTkzLDE0IEBACiAgICAgICAgIENhbGwgYzEgPSBzZXJ2aWNlLmNyZWF0ZUNhbGwoKTsKICAgICAgICAgQ2FsbCBjMiA9IHNlcnZpY2UuY3JlYXRlQ2FsbChQT1JUX1FOQU1FKTsKICAgICAgICAgQ2FsbCBjMyA9IHNlcnZpY2UuY3JlYXRlQ2FsbChQT1JUX1FOQU1FLCBPUEVSQVRJT05fUU5BTUUpOwotICAgICAgICBDYWxsIGM0ID0gc2VydmljZS5jcmVhdGVDYWxsKFBPUlRfUU5BTUUsIAorICAgICAgICBDYWxsIGM0ID0gc2VydmljZS5jcmVhdGVDYWxsKFBPUlRfUU5BTUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BFUkFUSU9OX1FOQU1FLmdldExvY2FsUGFydCgpKTsKICAgICAgICAgQ2FsbFtdIGNhbGxzID0gc2VydmljZS5nZXRDYWxscyhQT1JUX1FOQU1FKTsKIAogICAgICAgICAvLyBjb250YWluZXItbWFuYWdlZCBwb3J0IHNlbGVjdGlvbgotICAgICAgICBHb29nbGVTZWFyY2hQb3J0IHNlaSA9IChHb29nbGVTZWFyY2hQb3J0KSAKKyAgICAgICAgR29vZ2xlU2VhcmNoUG9ydCBzZWkgPSAoR29vZ2xlU2VhcmNoUG9ydCkKICAgICAgICAgICAgIHNlcnZpY2UuZ2V0UG9ydChHb29nbGVTZWFyY2hQb3J0LmNsYXNzKTsKLSAgICAgICAgc2VpID0gKEdvb2dsZVNlYXJjaFBvcnQpIAorICAgICAgICBzZWkgPSAoR29vZ2xlU2VhcmNoUG9ydCkKICAgICAgICAgICAgIHNlcnZpY2UuZ2V0UG9ydChQT1JUX1FOQU1FLCBHb29nbGVTZWFyY2hQb3J0LmNsYXNzKTsKIAogICAgICAgICBRTmFtZSBzZXJ2aWNlTmFtZSA9IHNlcnZpY2UuZ2V0U2VydmljZU5hbWUoKTsKQEAgLTIwOSw3ICsyMDksNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ3c2RsTG9jYXRpb24gPSAiICsgd3NkbExvY2F0aW9uKTsKICAgICAgICAgfQogICAgICAgICBJdGVyYXRvciBwb3J0cyA9IHNlcnZpY2UuZ2V0UG9ydHMoKTsKLSAgICAgICAgCisKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3Npbmsvc3RhbmRhbG9uZS9TdGFuZEFsb25lQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9zdGFuZGFsb25lL1N0YW5kQWxvbmVDbGllbnQuamF2YQppbmRleCBiMzZlZGVhLi5lYmNlYWQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9zdGFuZGFsb25lL1N0YW5kQWxvbmVDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9zdGFuZGFsb25lL1N0YW5kQWxvbmVDbGllbnQuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogCiBwdWJsaWMgY2xhc3MgU3RhbmRBbG9uZUNsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBTdHJpbmcgd29yZDsKQEAgLTMyLDEyICszMiwxMiBAQAogICAgIHByaXZhdGUgU3RyaW5nIGdvb2dsZUtleTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImdvb2dsZXNlcnZlciBzdGFuZGFsb25lIik7CQorICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJnb29nbGVzZXJ2ZXIgc3RhbmRhbG9uZSIpOwogICAgICAgICBTdGFuZEFsb25lQ2xpZW50IGNsaWVudCA9IG5ldyBTdGFuZEFsb25lQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJnb29nbGVzZXJ2ZXItc3RhbmRhbG9uZUlEIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0YW5kQWxvbmVDbGllbnQoU3RyaW5nW10gYXJncykgewogICAgICAgICB3b3JkID0gKGFyZ3MubGVuZ3RoID4gMCkgPyAic3BlbGxuZyIgOiBhcmdzWzBdOwogICAgICAgICB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPSAoYXJncy5sZW5ndGggPiAxKSA/CkBAIC00NywxMSArNDcsMTEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgCXRyeSB7Ci0gICAgICAgICAgICBHb29nbGVTZWFyY2hTZXJ2aWNlIGdvb2dsZVNlYXJjaFNlcnZpY2UgPSAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIEdvb2dsZVNlYXJjaFNlcnZpY2UgZ29vZ2xlU2VhcmNoU2VydmljZSA9CiAgICAgICAgICAgICAgICAgbmV3IEdvb2dsZVNlYXJjaFNlcnZpY2VfSW1wbCgpOwogCi0gICAgICAgICAgICBHb29nbGVTZWFyY2hQb3J0IGdvb2dsZVNlYXJjaFBvcnQgPSAKKyAgICAgICAgICAgIEdvb2dsZVNlYXJjaFBvcnQgZ29vZ2xlU2VhcmNoUG9ydCA9CiAgICAgICAgICAgICAgICAgZ29vZ2xlU2VhcmNoU2VydmljZS5nZXRHb29nbGVTZWFyY2hQb3J0KCk7CiAKICAgICAgICAgICAgICgoU3R1Yilnb29nbGVTZWFyY2hQb3J0KS5fc2V0UHJvcGVydHkKQEAgLTcyLDE1ICs3MiwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWxsaW5nU3VnZ2VzdGlvbiArICInIik7CiAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJhcHBjbGllbnQgbWFpbiIsIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnb29nbGUgY2xpZW50IHRlc3QgZmFpbGVkIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJhcHBjbGllbnQgbWFpbiIgLCBzdGF0LkZBSUwpOwogCi0JfSAKKyAgICB9CiAKICAgICB9Ci0gICAgICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL3dlYi9Gb29IYW5kbGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay93ZWIvRm9vSGFuZGxlci5qYXZhCmluZGV4IDY5YzMwYWUuLmY1YzNhNmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL3dlYi9Gb29IYW5kbGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3Npbmsvd2ViL0Zvb0hhbmRsZXIuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogaW1wb3J0IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dDsKIAogcHVibGljIGNsYXNzIEZvb0hhbmRsZXIgZXh0ZW5kcyBHZW5lcmljSGFuZGxlciB7Ci0gIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29IYW5kbGVyOjpkZXN0cm95KCkiKTsKICAgICB9CkBAIC00MCwxNyArNDAsMTcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29IYW5kbGVyOjpoYW5kbGVGYXVsdCgpIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAgICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVSZXF1ZXN0KE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29IYW5kbGVyOjpoYW5kbGVSZXF1ZXN0KCkiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgICAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZVJlc3BvbnNlKE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29IYW5kbGVyOjpoYW5kbGVSZXNwb25zZSgpIik7CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gCi0gICAgICAgIAorICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGluaXQoSGFuZGxlckluZm8gY29uZmlnKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vSGFuZGxlcjo6aW5pdCgpIik7CiAgICAgICAgIHRyeSB7CkBAIC02MCw5ICs2MCw5IEBACiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIYW5kbGVyIGluaXQgcGFyYW1zID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuZ2V0SGFuZGxlckNvbmZpZygpKTsKLSAgICB9IAotICAgCisgICAgfQorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay93ZWIvR29vZ2xlU2VydmxldEltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL3dlYi9Hb29nbGVTZXJ2bGV0SW1wbC5qYXZhCmluZGV4IDBkZGUxNmQuLjZkMDRhZDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL3dlYi9Hb29nbGVTZXJ2bGV0SW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL3dlYi9Hb29nbGVTZXJ2bGV0SW1wbC5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiBpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKIGltcG9ydCBqYXZheC54bWwucnBjLkNhbGw7CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamF2YXgubmFtaW5nLio7CiBpbXBvcnQgamF2YXgueG1sLnJwYy5TZXJ2aWNlOwogaW1wb3J0IGphdmF4LnhtbC5ycGMuc2VydmVyLlNlcnZpY2VMaWZlY3ljbGU7CkBAIC0zMCwxMSArMzAsMTEgQEAKIAogcHVibGljIGNsYXNzIEdvb2dsZVNlcnZsZXRJbXBsIGltcGxlbWVudHMgamFrYXJ0YS5zZXJ2bGV0LlNpbmdsZVRocmVhZE1vZGVsLCBTZXJ2aWNlTGlmZWN5Y2xlIHsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFFOYW1lIFBPUlRfUU5BTUUgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBRTmFtZSBQT1JUX1FOQU1FID0KICAgICAgICAgbmV3IFFOYW1lKCJ1cm46R29vZ2xlU2VhcmNoIiwgIkdvb2dsZVNlYXJjaFBvcnQiKTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBRTmFtZSBPUEVSQVRJT05fUU5BTUUgPQogICAgICAgICBuZXcgUU5hbWUoInVybjpHb29nbGVTZWFyY2giLCAiZG9TcGVsbGluZ1N1Z2dlc3Rpb24iKTsKLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBnb3RJbml0ID0gZmFsc2U7CiAKICAgICBwdWJsaWMgR29vZ2xlU2VydmxldEltcGwoKSB7CkBAIC01MCw5ICs1MCw5IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IFNlcnZpY2VMaWZlY3ljbGU6OmRlc3Ryb3kgY2FsbCIpOwogICAgIH0KIAotICAgIHB1YmxpYyBieXRlW10gZG9HZXRDYWNoZWRQYWdlKGphdmEubGFuZy5TdHJpbmcga2V5LCBqYXZhLmxhbmcuU3RyaW5nIHVybCkgCi0gICAgeyAKLSAgICAgICAgcmV0dXJuIG51bGw7IAorICAgIHB1YmxpYyBieXRlW10gZG9HZXRDYWNoZWRQYWdlKGphdmEubGFuZy5TdHJpbmcga2V5LCBqYXZhLmxhbmcuU3RyaW5nIHVybCkKKyAgICB7CisgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvT25lV2F5KFN0cmluZyBzMSkgewpAQCAtNzEsOCArNzEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUoKSk7CiAgICAgfQogCi0gICAgcHVibGljIFN0cmluZyBkb1NwZWxsaW5nU3VnZ2VzdGlvbihqYXZhLmxhbmcuU3RyaW5nIGtleSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nIHBocmFzZSkgCisgICAgcHVibGljIFN0cmluZyBkb1NwZWxsaW5nU3VnZ2VzdGlvbihqYXZhLmxhbmcuU3RyaW5nIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcgcGhyYXNlKQogCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvb2dsZVNlcnZsZXRJbXBsLmRvU3BlbGxpbmdTdWdnZXN0aW9uKCkgIiArCkBAIC04OCwyMiArODgsMjIgQEAKICAgICAgICAgICAgIFNlcnZpY2UgZ2VuZXJpY1NlcnZpY2VXaXRoV1NETCA9IG51bGw7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIAorICAgICAgICAgICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKQogICAgICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9FamJESUlSZWZlcmVuY2UiKTsKICAgICAgICAgICAgICAgICBkb0R5bmFtaWNQcm94eVRlc3Qoc2VydmljZSk7Ci0gICAgICAgICAgICAgICAgR29vZ2xlU2VhcmNoUG9ydCBlamJQb3J0ID0gKEdvb2dsZVNlYXJjaFBvcnQpIAorICAgICAgICAgICAgICAgIEdvb2dsZVNlYXJjaFBvcnQgZWpiUG9ydCA9IChHb29nbGVTZWFyY2hQb3J0KQogICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLmdldFBvcnQoR29vZ2xlU2VhcmNoUG9ydC5jbGFzcyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBlamJQb3J0LmRvU3BlbGxpbmdTdWdnZXN0aW9uKGtleSwgcGhyYXNlKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZW1vdGVFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgICAgICAgICAgICAgCi0gICAgICAgIAorICAgICAgICB9CisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb29nbGVTZXJ2bGV0SW1wbCByZXR1cm5pbmcgIiArIHJldHVyblZhbHVlKTsKICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgIH0KLSAgICAgICAgCisKICAgICBwdWJsaWMgR29vZ2xlU2VhcmNoUmVzdWx0IGRvR29vZ2xlU2VhcmNoKGphdmEubGFuZy5TdHJpbmcga2V5LCBqYXZhLmxhbmcuU3RyaW5nIHEsIGludCBzdGFydCwgaW50IG1heFJlc3VsdHMsIGJvb2xlYW4gZmlsdGVyLCBqYXZhLmxhbmcuU3RyaW5nIHJlc3RyaWN0LCBib29sZWFuIHNhZmVTZWFyY2gsIGphdmEubGFuZy5TdHJpbmcgbHIsIGphdmEubGFuZy5TdHJpbmcgaWUsIGphdmEubGFuZy5TdHJpbmcgb2UpIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQpAQCAtMTEzLDE0ICsxMTMsMTQgQEAKICAgICAgICAgQ2FsbCBjMSA9IHNlcnZpY2UuY3JlYXRlQ2FsbCgpOwogICAgICAgICBDYWxsIGMyID0gc2VydmljZS5jcmVhdGVDYWxsKFBPUlRfUU5BTUUpOwogICAgICAgICBDYWxsIGMzID0gc2VydmljZS5jcmVhdGVDYWxsKFBPUlRfUU5BTUUsIE9QRVJBVElPTl9RTkFNRSk7Ci0gICAgICAgIENhbGwgYzQgPSBzZXJ2aWNlLmNyZWF0ZUNhbGwoUE9SVF9RTkFNRSwgCisgICAgICAgIENhbGwgYzQgPSBzZXJ2aWNlLmNyZWF0ZUNhbGwoUE9SVF9RTkFNRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUEVSQVRJT05fUU5BTUUuZ2V0TG9jYWxQYXJ0KCkpOwogICAgICAgICBDYWxsW10gY2FsbHMgPSBzZXJ2aWNlLmdldENhbGxzKFBPUlRfUU5BTUUpOwogCiAgICAgICAgIC8vIGNvbnRhaW5lci1tYW5hZ2VkIHBvcnQgc2VsZWN0aW9uCi0gICAgICAgIEdvb2dsZVNlYXJjaFBvcnQgc2VpID0gKEdvb2dsZVNlYXJjaFBvcnQpIAorICAgICAgICBHb29nbGVTZWFyY2hQb3J0IHNlaSA9IChHb29nbGVTZWFyY2hQb3J0KQogICAgICAgICAgICAgc2VydmljZS5nZXRQb3J0KEdvb2dsZVNlYXJjaFBvcnQuY2xhc3MpOwotICAgICAgICBzZWkgPSAoR29vZ2xlU2VhcmNoUG9ydCkgCisgICAgICAgIHNlaSA9IChHb29nbGVTZWFyY2hQb3J0KQogICAgICAgICAgICAgc2VydmljZS5nZXRQb3J0KFBPUlRfUU5BTUUsIEdvb2dsZVNlYXJjaFBvcnQuY2xhc3MpOwogCiAgICAgICAgIFFOYW1lIHNlcnZpY2VOYW1lID0gc2VydmljZS5nZXRTZXJ2aWNlTmFtZSgpOwpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIndzZGxMb2NhdGlvbiA9ICIgKyB3c2RsTG9jYXRpb24pOwogICAgICAgICB9CiAgICAgICAgIEl0ZXJhdG9yIHBvcnRzID0gc2VydmljZS5nZXRQb3J0cygpOwotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3Npbmsvd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3Npbmsvd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sCmluZGV4IDExNzg0NjcuLjM2Zjg1OGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL3dzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay93c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHdzZGwgCisgIDx3c2RsCiAgICAgICBsb2NhdGlvbj0iR29vZ2xlU2VhcmNoLndzZGwiCiAgICAgICBwYWNrYWdlTmFtZT0iY29tLnN1bi5zMWFzZGV2LmVqYi53ZWJzZXJ2aWNlLmtzaW5rLmdvb2dsZWNsaWVudCIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3Npbmsvd3Njb21waWxlX2NvbmZpZ19lamIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3Npbmsvd3Njb21waWxlX2NvbmZpZ19lamIueG1sCmluZGV4IDUwYzRlYWEuLjc2Yzk5NTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL3dzY29tcGlsZV9jb25maWdfZWpiLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay93c2NvbXBpbGVfY29uZmlnX2VqYi54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHdzZGwgCisgIDx3c2RsCiAgICAgICBsb2NhdGlvbj0iR29vZ2xlU2VhcmNoLndzZGwiCiAgICAgICBwYWNrYWdlTmFtZT0iY29tLnN1bi5zMWFzZGV2LmVqYi53ZWJzZXJ2aWNlLmtzaW5rLmdvb2dsZXNlcnZlciIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3Npbmsvd3Njb21waWxlX2NvbmZpZ19zdGFuZGFsb25lLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL3dzY29tcGlsZV9jb25maWdfc3RhbmRhbG9uZS54bWwKaW5kZXggY2Y5Y2FjYS4uMDhhMDNhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3Npbmsvd3Njb21waWxlX2NvbmZpZ19zdGFuZGFsb25lLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay93c2NvbXBpbGVfY29uZmlnX3N0YW5kYWxvbmUueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9lamJfd2Vic2VydmljZV9rc2lua19Hb29nbGVTZXJ2bGV0L0dvb2dsZVNlYXJjaD9XU0RMIgogICAgICAgcGFja2FnZU5hbWU9ImNvbS5zdW4uczFhc2Rldi5lamIud2Vic2VydmljZS5rc2luay5zdGFuZGFsb25lIi8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay93c2NvbXBpbGVfY29uZmlnX3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay93c2NvbXBpbGVfY29uZmlnX3dlYi54bWwKaW5kZXggYzQ0NmM4OS4uY2M5M2JmZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3Npbmsvd3Njb21waWxlX2NvbmZpZ193ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL3dzY29tcGlsZV9jb25maWdfd2ViLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJHb29nbGVTZWFyY2gud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJjb20uc3VuLnMxYXNkZXYuZWpiLndlYnNlcnZpY2Uua3NpbmsuZ29vZ2xlc2VydmVyd2ViIi8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL0pkYmNDb21tb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9KZGJjQ29tbW9uLnhtbAppbmRleCBjMWE3YzVkLi45YjhlODJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL0pkYmNDb21tb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvSmRiY0NvbW1vbi54bWwKQEAgLTE4LDcgKzE4LDcgQEAKIC0tPgogCiA8IS0tCi0gICAKKwogICBOb3RlOiBUaGUgdGFyZ2V0cyBoZXJlIHVzZSBwcm9wZXJ0aWVzIHRoYXQgbmVlZCB0byBiZSBtb2RpZmllZAogICAgICAgICB0byBzdWl0IHlvdXIgbG9jYWwgc2V0dGluZ3MgaW4gdGhlIEpkYmNDb21tb24ucHJvcGVydGllcwogLS0+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLW9yYWNsZS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIKLQkgIHZhbHVlPSJjcmVhdGUtamRiYy1jb25uZWN0aW9uLXBvb2wKLQkgICAgLS1kYXRhc291cmNlY2xhc3NuYW1lPSR7b3JhY2xlLmRhdGFzb3VyY2UuY2xhc3N9Ci0JICAgIC0tcmVzdHlwZT0ke29yYWNsZS5yZXNvdXJjZS50eXBlfSIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtvcmFjbGUucG9vbC5uYW1lfSIvPiAgICAKKyAgICAgIHZhbHVlPSJjcmVhdGUtamRiYy1jb25uZWN0aW9uLXBvb2wKKyAgICAgICAgLS1kYXRhc291cmNlY2xhc3NuYW1lPSR7b3JhY2xlLmRhdGFzb3VyY2UuY2xhc3N9CisgICAgICAgIC0tcmVzdHlwZT0ke29yYWNsZS5yZXNvdXJjZS50eXBlfSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtvcmFjbGUucG9vbC5uYW1lfSIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC1vcmFjbGUtcHJvcHMtY29tbW9uIi8+CkBAIC01NSwxMCArNTUsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLWRyaXZlci1jb25ucG9vbC1vcmFjbGUtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiCi0JICB2YWx1ZT0iY3JlYXRlLWpkYmMtY29ubmVjdGlvbi1wb29sCi0JICAgIC0tZHJpdmVyY2xhc3NuYW1lPSR7b3JhY2xlLmRyaXZlci5jbGFzc30KLQkgICAgLS1yZXN0eXBlPSR7b3JhY2xlLnJlc291cmNlLnR5cGV9Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke29yYWNsZS5wb29sLm5hbWV9Ii8+ICAgIAorICAgICAgdmFsdWU9ImNyZWF0ZS1qZGJjLWNvbm5lY3Rpb24tcG9vbAorICAgICAgICAtLWRyaXZlcmNsYXNzbmFtZT0ke29yYWNsZS5kcml2ZXIuY2xhc3N9CisgICAgICAgIC0tcmVzdHlwZT0ke29yYWNsZS5yZXNvdXJjZS50eXBlfSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtvcmFjbGUucG9vbC5uYW1lfSIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC1vcmFjbGUtcHJvcHMtY29tbW9uIi8+CkBAIC02OCwxOCArNjgsMTggQEAKICAgICA8dGFyZ2V0IG5hbWU9InNldC1vcmFjbGUtcHJvcHMtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKLQkgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtvcmFjbGUucG9vbC5uYW1lfS5wcm9wZXJ0eS5Vc2VyPSR7b3JhY2xlLnVzZXJ9Ii8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCisgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7b3JhY2xlLnBvb2wubmFtZX0ucHJvcGVydHkuVXNlcj0ke29yYWNsZS51c2VyfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7b3JhY2xlLnBvb2wubmFtZX0ucHJvcGVydHkuUGFzc3dvcmQ9JHtvcmFjbGUucGFzc3dvcmR9Ii8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCisgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7b3JhY2xlLnBvb2wubmFtZX0ucHJvcGVydHkuUGFzc3dvcmQ9JHtvcmFjbGUucGFzc3dvcmR9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKLQkgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtvcmFjbGUucG9vbC5uYW1lfS5wcm9wZXJ0eS5VUkw9JHtvcmFjbGUudXJsfSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgorICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke29yYWNsZS5wb29sLm5hbWV9LnByb3BlcnR5LlVSTD0ke29yYWNsZS51cmx9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTg3LDkgKzg3LDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLXJlc291cmNlLW9yYWNsZS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIKLQkgIHZhbHVlPSJjcmVhdGUtamRiYy1yZXNvdXJjZQotCSAgICAtLWNvbm5lY3Rpb25wb29saWQgJHtvcmFjbGUucG9vbC5uYW1lfSIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtvcmFjbGUucmVzb3VyY2UubmFtZX0iLz4KKyAgICAgIHZhbHVlPSJjcmVhdGUtamRiYy1yZXNvdXJjZQorICAgICAgICAtLWNvbm5lY3Rpb25wb29saWQgJHtvcmFjbGUucG9vbC5uYW1lfSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtvcmFjbGUucmVzb3VyY2UubmFtZX0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApAQCAtOTcsOCArOTcsOCBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLWpkYmMtY29ubnBvb2wtb3JhY2xlLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIgotCSAgdmFsdWU9ImRlbGV0ZS1qZGJjLWNvbm5lY3Rpb24tcG9vbCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtvcmFjbGUucG9vbC5uYW1lfSIvPiAgCisgICAgICB2YWx1ZT0iZGVsZXRlLWpkYmMtY29ubmVjdGlvbi1wb29sIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke29yYWNsZS5wb29sLm5hbWV9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTEwNiw4ICsxMDYsOCBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLWpkYmMtcmVzb3VyY2Utb3JhY2xlLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIgotCSAgdmFsdWU9ImRlbGV0ZS1qZGJjLXJlc291cmNlIi8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke29yYWNsZS5yZXNvdXJjZS5uYW1lfSIvPiAgCisgICAgICB2YWx1ZT0iZGVsZXRlLWpkYmMtcmVzb3VyY2UiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7b3JhY2xlLnJlc291cmNlLm5hbWV9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTEyNSw1MCArMTI1LDUwIEBACiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtamRiYy1jb25ucG9vbC1vcmFjbGUteGEtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiCi0JICB2YWx1ZT0iY3JlYXRlLWpkYmMtY29ubmVjdGlvbi1wb29sCi0JICAgIC0tZGF0YXNvdXJjZWNsYXNzbmFtZT0ke29yYWNsZS54YWRhdGFzb3VyY2UuY2xhc3N9Ci0JICAgIC0tcmVzdHlwZT1qYXZheC5zcWwuWEFEYXRhU291cmNlIi8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke29yYWNsZS54YXBvb2wubmFtZX0iLz4gICAgCisgICAgICB2YWx1ZT0iY3JlYXRlLWpkYmMtY29ubmVjdGlvbi1wb29sCisgICAgICAgIC0tZGF0YXNvdXJjZWNsYXNzbmFtZT0ke29yYWNsZS54YWRhdGFzb3VyY2UuY2xhc3N9CisgICAgICAgIC0tcmVzdHlwZT1qYXZheC5zcWwuWEFEYXRhU291cmNlIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke29yYWNsZS54YXBvb2wubmFtZX0iLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7b3JhY2xlLnhhcG9vbC5uYW1lfS5wcm9wZXJ0eS5Vc2VyPSR7b3JhY2xlLnVzZXJ9Ii8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCisgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7b3JhY2xlLnhhcG9vbC5uYW1lfS5wcm9wZXJ0eS5Vc2VyPSR7b3JhY2xlLnVzZXJ9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKLQkgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtvcmFjbGUueGFwb29sLm5hbWV9LnByb3BlcnR5LlBhc3N3b3JkPSR7b3JhY2xlLnBhc3N3b3JkfSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgorICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke29yYWNsZS54YXBvb2wubmFtZX0ucHJvcGVydHkuUGFzc3dvcmQ9JHtvcmFjbGUucGFzc3dvcmR9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKLQkgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtvcmFjbGUueGFwb29sLm5hbWV9LnByb3BlcnR5LlVSTD0ke29yYWNsZS51cmx9Ii8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCisgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7b3JhY2xlLnhhcG9vbC5uYW1lfS5wcm9wZXJ0eS5VUkw9JHtvcmFjbGUudXJsfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtamRiYy1yZXNvdXJjZS1vcmFjbGUteGEtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiCi0JICB2YWx1ZT0iY3JlYXRlLWpkYmMtcmVzb3VyY2UKLQkgICAgLS1jb25uZWN0aW9ucG9vbGlkICR7b3JhY2xlLnhhcG9vbC5uYW1lfSIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtvcmFjbGUueGFyZXNvdXJjZS5uYW1lfSIvPgorICAgICAgdmFsdWU9ImNyZWF0ZS1qZGJjLXJlc291cmNlCisgICAgICAgIC0tY29ubmVjdGlvbnBvb2xpZCAke29yYWNsZS54YXBvb2wubmFtZX0iLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7b3JhY2xlLnhhcmVzb3VyY2UubmFtZX0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLWpkYmMtY29ubnBvb2wtb3JhY2xlLXhhLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIgotCSAgdmFsdWU9ImRlbGV0ZS1qZGJjLWNvbm5lY3Rpb24tcG9vbCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtvcmFjbGUueGFwb29sLm5hbWV9Ii8+ICAKKyAgICAgIHZhbHVlPSJkZWxldGUtamRiYy1jb25uZWN0aW9uLXBvb2wiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7b3JhY2xlLnhhcG9vbC5uYW1lfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLWpkYmMtcmVzb3VyY2Utb3JhY2xlLXhhLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIgotCSAgdmFsdWU9ImRlbGV0ZS1qZGJjLXJlc291cmNlIi8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke29yYWNsZS54YXJlc291cmNlLm5hbWV9Ii8+ICAKKyAgICAgIHZhbHVlPSJkZWxldGUtamRiYy1yZXNvdXJjZSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtvcmFjbGUueGFyZXNvdXJjZS5uYW1lfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCkBAIC0xODQsNyArMTg0LDcgQEAKICAgICAgICAgb3V0cHV0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9zZXR1cERCVGFibGVzLm91dCIKICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvamRiYy9jbGFzc2VzMTIuemlwIgogICAgICAgLz4KLSAgICAKKwogICAgIDwvdGFyZ2V0PgogCiAKQEAgLTIxNSw2NSArMjE1LDY1IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke215c3FsLnhhLnBvb2wubmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotCQkJCQkJCSAgICAgIAorCiAKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLW15c3FsLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIgotCSAgdmFsdWU9ImNyZWF0ZS1qZGJjLWNvbm5lY3Rpb24tcG9vbAotCSAgICAtLWRhdGFzb3VyY2VjbGFzc25hbWU9JHtteXNxbC5kYXRhc291cmNlLmNsYXNzfQotCSAgICAtLXJlc3R5cGU9amF2YXguc3FsLkRhdGFTb3VyY2UiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7bXlzcWwucG9vbC5uYW1lfSIvPiAgICAKKyAgICAgIHZhbHVlPSJjcmVhdGUtamRiYy1jb25uZWN0aW9uLXBvb2wKKyAgICAgICAgLS1kYXRhc291cmNlY2xhc3NuYW1lPSR7bXlzcWwuZGF0YXNvdXJjZS5jbGFzc30KKyAgICAgICAgLS1yZXN0eXBlPWphdmF4LnNxbC5EYXRhU291cmNlIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke215c3FsLnBvb2wubmFtZX0iLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7bXlzcWwucG9vbC5uYW1lfS5wcm9wZXJ0eS5Vc2VyPSR7bXlzcWwudXNlcn0iLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKKyAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtteXNxbC5wb29sLm5hbWV9LnByb3BlcnR5LlVzZXI9JHtteXNxbC51c2VyfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7bXlzcWwucG9vbC5uYW1lfS5wcm9wZXJ0eS5QYXNzd29yZD0ke215c3FsLnBhc3N3b3JkfSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgorICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke215c3FsLnBvb2wubmFtZX0ucHJvcGVydHkuUGFzc3dvcmQ9JHtteXNxbC5wYXNzd29yZH0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCSAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke215c3FsLnBvb2wubmFtZX0ucHJvcGVydHkuc2VydmVyTmFtZT0ke215c3FsLnNlcnZlck5hbWV9Ii8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCisgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7bXlzcWwucG9vbC5uYW1lfS5wcm9wZXJ0eS5zZXJ2ZXJOYW1lPSR7bXlzcWwuc2VydmVyTmFtZX0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCSAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke215c3FsLnBvb2wubmFtZX0ucHJvcGVydHkuZGF0YWJhc2VOYW1lPSR7bXlzcWwuZGF0YWJhc2VOYW1lfSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgorICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke215c3FsLnBvb2wubmFtZX0ucHJvcGVydHkuZGF0YWJhc2VOYW1lPSR7bXlzcWwuZGF0YWJhc2VOYW1lfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7bXlzcWwucG9vbC5uYW1lfS5wcm9wZXJ0eS5wb3J0PSR7bXlzcWwucG9ydH0iLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKKyAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtteXNxbC5wb29sLm5hbWV9LnByb3BlcnR5LnBvcnQ9JHtteXNxbC5wb3J0fSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtamRiYy1yZXNvdXJjZS1teXNxbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIKLQkgIHZhbHVlPSJjcmVhdGUtamRiYy1yZXNvdXJjZQotCSAgICAtLWNvbm5lY3Rpb25wb29saWQgJHtteXNxbC5wb29sLm5hbWV9Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke215c3FsLnJlc291cmNlLm5hbWV9Ii8+CisgICAgICB2YWx1ZT0iY3JlYXRlLWpkYmMtcmVzb3VyY2UKKyAgICAgICAgLS1jb25uZWN0aW9ucG9vbGlkICR7bXlzcWwucG9vbC5uYW1lfSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtteXNxbC5yZXNvdXJjZS5uYW1lfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtamRiYy1jb25ucG9vbC1teXNxbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIKLQkgIHZhbHVlPSJkZWxldGUtamRiYy1jb25uZWN0aW9uLXBvb2wiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7bXlzcWwucG9vbC5uYW1lfSIvPiAgCisgICAgICB2YWx1ZT0iZGVsZXRlLWpkYmMtY29ubmVjdGlvbi1wb29sIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke215c3FsLnBvb2wubmFtZX0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1qZGJjLXJlc291cmNlLW15c3FsLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIgotCSAgdmFsdWU9ImRlbGV0ZS1qZGJjLXJlc291cmNlIi8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke215c3FsLnJlc291cmNlLm5hbWV9Ii8+ICAKKyAgICAgIHZhbHVlPSJkZWxldGUtamRiYy1yZXNvdXJjZSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtteXNxbC5yZXNvdXJjZS5uYW1lfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCkBAIC0yOTAsNDUgKzI5MCw0NSBAQAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWpkYmMtY29ubnBvb2wtbXlzcWwteGEtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiCi0JICB2YWx1ZT0iY3JlYXRlLWpkYmMtY29ubmVjdGlvbi1wb29sCi0JICAgIC0tZGF0YXNvdXJjZWNsYXNzbmFtZT0ke215c3FsLnhhLmRhdGFzb3VyY2UuY2xhc3N9Ci0JICAgIC0tcmVzdHlwZT1qYXZheC5zcWwuWEFEYXRhU291cmNlIi8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke215c3FsLnhhLnBvb2wubmFtZX0iLz4gICAgCisgICAgICB2YWx1ZT0iY3JlYXRlLWpkYmMtY29ubmVjdGlvbi1wb29sCisgICAgICAgIC0tZGF0YXNvdXJjZWNsYXNzbmFtZT0ke215c3FsLnhhLmRhdGFzb3VyY2UuY2xhc3N9CisgICAgICAgIC0tcmVzdHlwZT1qYXZheC5zcWwuWEFEYXRhU291cmNlIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke215c3FsLnhhLnBvb2wubmFtZX0iLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7bXlzcWwueGEucG9vbC5uYW1lfS5wcm9wZXJ0eS5Vc2VyPSR7bXlzcWwudXNlcn0iLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKKyAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtteXNxbC54YS5wb29sLm5hbWV9LnByb3BlcnR5LlVzZXI9JHtteXNxbC51c2VyfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7bXlzcWwueGEucG9vbC5uYW1lfS5wcm9wZXJ0eS5QYXNzd29yZD0ke215c3FsLnBhc3N3b3JkfSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgorICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke215c3FsLnhhLnBvb2wubmFtZX0ucHJvcGVydHkuUGFzc3dvcmQ9JHtteXNxbC5wYXNzd29yZH0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCSAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke215c3FsLnhhLnBvb2wubmFtZX0ucHJvcGVydHkuc2VydmVyTmFtZT0ke215c3FsLnNlcnZlck5hbWV9Ii8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCisgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7bXlzcWwueGEucG9vbC5uYW1lfS5wcm9wZXJ0eS5zZXJ2ZXJOYW1lPSR7bXlzcWwuc2VydmVyTmFtZX0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCSAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke215c3FsLnhhLnBvb2wubmFtZX0ucHJvcGVydHkuZGF0YWJhc2VOYW1lPSR7bXlzcWwuZGF0YWJhc2VOYW1lfSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgorICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke215c3FsLnhhLnBvb2wubmFtZX0ucHJvcGVydHkuZGF0YWJhc2VOYW1lPSR7bXlzcWwuZGF0YWJhc2VOYW1lfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7bXlzcWwueGEucG9vbC5uYW1lfS5wcm9wZXJ0eS5wb3J0PSR7bXlzcWwucG9ydH0iLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKKyAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtteXNxbC54YS5wb29sLm5hbWV9LnByb3BlcnR5LnBvcnQ9JHtteXNxbC5wb3J0fSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtamRiYy1yZXNvdXJjZS1teXNxbC14YS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIKLQkgIHZhbHVlPSJjcmVhdGUtamRiYy1yZXNvdXJjZQotCSAgICAtLWNvbm5lY3Rpb25wb29saWQgJHtteXNxbC54YS5wb29sLm5hbWV9Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke215c3FsLnhhLnJlc291cmNlLm5hbWV9Ii8+CisgICAgICB2YWx1ZT0iY3JlYXRlLWpkYmMtcmVzb3VyY2UKKyAgICAgICAgLS1jb25uZWN0aW9ucG9vbGlkICR7bXlzcWwueGEucG9vbC5uYW1lfSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtteXNxbC54YS5yZXNvdXJjZS5uYW1lfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCkBAIC0zNDIsNyArMzQyLDcgQEAKICAgICAgICAgb25lcnJvcj0iY29udGludWUiCiAgICAgICAgIHByaW50PSJ5ZXMiCiAgICAgICAgIG91dHB1dD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vc2V0dXBEQlRhYmxlcy5vdXQiCi0JY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9teXNxbC1jb25uZWN0b3ItamF2YS01LjEuNy1iaW4uamFyIgorICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvbXlzcWwtY29ubmVjdG9yLWphdmEtNS4xLjctYmluLmphciIKICAgICAgIC8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTM1OCw3ICszNTgsNyBAQAogICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0iYWl4Ij4KICAgICAgICA8b3MgbmFtZT0iQUlYIi8+CiAgICA8L2NvbmRpdGlvbj4KLQkgICAgICAgCisKICAgIDx0YXJnZXQgbmFtZT0ic3RhcnQtZGVyYnkiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0LWRlcmJ5LWFpeCIvPgogICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnQtZGVyYnktbm9uYWl4Ii8+CkBAIC0zOTgsNyArMzk4LDcgQEAKICAgICAgIDxwYXJhbGxlbD4KICAgICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJvcmcuYXBhY2hlLmRlcmJ5LmRyZGEuTmV0d29ya1NlcnZlckNvbnRyb2wiCiAgICAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtkYi5jbGFzc3BhdGh9IiBmYWlsb25lcnJvcj0idHJ1ZSIgZm9yaz0idHJ1ZSI+Ci0JCSA8YXJnIGxpbmU9Ii1oIGxvY2FsaG9zdCAtcCAxNTI3IC11c2VyICR7ZGVyYnkudXNlcn0gLXBhc3N3b3JkICR7ZGVyYnkucGFzc3dvcmR9IHNodXRkb3duIi8+CisgICAgICAgICA8YXJnIGxpbmU9Ii1oIGxvY2FsaG9zdCAtcCAxNTI3IC11c2VyICR7ZGVyYnkudXNlcn0gLXBhc3N3b3JkICR7ZGVyYnkucGFzc3dvcmR9IHNodXRkb3duIi8+CiAgICAgICAgICAgIDwvamF2YT4KICAgICAgIDwvcGFyYWxsZWw+CiAgICA8L3RhcmdldD4KQEAgLTQwOCw3ICs0MDgsNyBAQAogICAgICAgPHBhcmFsbGVsPgogICAgICAgICAgICA8amF2YSBjbGFzc25hbWU9Im9yZy5hcGFjaGUuZGVyYnkuZHJkYS5OZXR3b3JrU2VydmVyQ29udHJvbCIKICAgICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2RiLmNsYXNzcGF0aH0iIGZhaWxvbmVycm9yPSJ0cnVlIiBmb3JrPSJ0cnVlIj4KLQkJIDxhcmcgbGluZT0iLWggMC4wLjAuMCAtcCAxNTI3IC11c2VyICR7ZGVyYnkudXNlcn0gLXBhc3N3b3JkICR7ZGVyYnkucGFzc3dvcmR9IHNodXRkb3duIi8+CisgICAgICAgICA8YXJnIGxpbmU9Ii1oIDAuMC4wLjAgLXAgMTUyNyAtdXNlciAke2RlcmJ5LnVzZXJ9IC1wYXNzd29yZCAke2RlcmJ5LnBhc3N3b3JkfSBzaHV0ZG93biIvPgogICAgICAgICAgICA8L2phdmE+CiAgICAgICA8L3BhcmFsbGVsPgogICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGY4ZjZhOGQuLmU1MWU1NTcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOCArMTUsMTggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtYXBwYXV0aCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aC9idWlsZC54bWwKaW5kZXggMGZmY2VjMC4uNjczOTI5YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGgvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MiwxMyArNTIsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1NpbXBsZUJNUC5jbGFzcywgKiovU2ltcGxlQk1QSG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KQEAgLTgxLDcgKzgxLDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc2V0LWRlcmJ5LWZvci1uby1hdXRoZW50aWNhdGlvbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CkBAIC05NCw3ICs5NCw3IEBACiAgICAgICA8L2FudGNhbGw+CiAgICAgICAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGgvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCmluZGV4IDc4NzI1OWYuLmMxOGNmNmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRoL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQpAQCAtMjUsNTIgKzI1LDUyIEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIHB1YmxpYyBjbGFzcyBTaW1wbGVCTVBDbGllbnQgewotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotCVN0cmluZyB0ZXN0U3VpdGUgPSAiQXBwQXV0aCAiOworICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiQXBwQXV0aCAiOwogCiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpSZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUJNUEhvbWUiKTsKLQlTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKKyAgICBTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZUJNUEhvbWUuY2xhc3MpOwotICAgICAgICAKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJKREJDIEFwcGxpY2F0aW9uIEF1dGhlbnRpY2F0aW9uIHRlc3QiKTsKKworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkpEQkMgQXBwbGljYXRpb24gQXV0aGVudGljYXRpb24gdGVzdCIpOwogICAgICAgICBTaW1wbGVCTVAgc2ltcGxlQk1QID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoKTsKLSAgCQorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdCAzIHdpbGwgZmFpbCB3aXRoIERlcmJ5IiApOwogICAgICAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MSgpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5GQUlMKTsKLQl9Ci0JaWYgKCBzaW1wbGVCTVAudGVzdDIoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDIoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQogCi0JaWYgKCBzaW1wbGVCTVAudGVzdDMoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgInRlc3QzIDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAidGVzdDMgOiAiLCBzdGF0LkZBSUwpOwotCX0KLSAgICAgICAgCi0JaWYgKCBzaW1wbGVCTVAudGVzdDQoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgInRlc3Q0IDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAidGVzdDQgOiAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MygpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAidGVzdDMgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICJ0ZXN0MyA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQorCisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDQoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgInRlc3Q0IDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAidGVzdDQgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KIAogICAgICAgICBpZiAoIHNpbXBsZUJNUC50ZXN0NSgpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAidGVzdDUgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICJ0ZXN0NSA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAidGVzdDUgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICJ0ZXN0NSA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiamRiYyBhcHBhdXRoIHN0YXR1czogIik7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRoL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggZTFjNmU3NS4uMGYyYjRjYSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRoL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRoL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTU1LDYgKzU1LDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRoL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGgvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQppbmRleCAyM2JjNjU3Li4yYmNhN2RlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGgvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGgvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQpAQCAtODEsNyArODEsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QzKCkgewotICAgICAgICAvL2FwcGxpY2F0aW9uIGF1dGggKyB3cm9uZyB1c2VyL3B3ZCAKKyAgICAgICAgLy9hcHBsaWNhdGlvbiBhdXRoICsgd3JvbmcgdXNlci9wd2QKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKQEAgLTEzNiw3ICsxMzYsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIHRlc3Q1KCkgewogICAgICAgICAvL2FwcGxpY2F0aW9uIGF1dGggKyB1c2VyL3B3ZCAgc3BlY2lmaWVkIC0gcmlnaHQgaW5pdGlhbAogICAgICAgICAvL2Vuc3VyZSB0aGF0IGNvbm5lY3Rpb24gd2l0aCBzYW1lIHVzZXJuYW1lIGlzIHJldHVybmVkIGluIGJvdGggdGhlIGNhc2VzLgotICAgICAgICAKKwogICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwogICAgICAgICBDb25uZWN0aW9uIGNvbm4yID0gbnVsbDsKICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGU0OTE0ZjYuLmYyNTYwNzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRoL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRoL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA3MGQxZmNjLi5kODU0Yjk1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aHR4L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGh0eC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk2NTczZDQuLjk2NTE1YWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aHR4L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRodHgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLWFwcGF1dGh0eCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImpkYmMucmVzb3VyY2UudHlwZSIgdmFsdWU9ImphdmF4LnNxbC5YQURhdGFTb3VyY2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aHR4L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aHR4L2J1aWxkLnhtbAppbmRleCA5ZjAyNzdhLi4wOGMzZDAwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGh0eC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRodHgvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MiwxMiArNTIsMTIgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1NpbXBsZUJNUC5jbGFzcywgKiovU2ltcGxlQk1QSG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgpAQCAtNzEsOSArNzEsOSBAQAogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWFwcGF1dGgtcG9vbDEiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvczFxZWFwcGF1dGgxIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCiAKIApAQCAtODUsNyArODUsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzZXQtZGVyYnktZm9yLW5vLWF1dGhlbnRpY2F0aW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAKQEAgLTEwMCw3ICsxMDAsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aHR4L2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aHR4L2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQppbmRleCA1MjU3NmU3Li45OTQzMGM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGh0eC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRodHgvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCkBAIC0yOCwzOCArMjgsMzggQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAKLQlTdHJpbmcgdGVzdFN1aXRlID0gIkFwcEF1dGhUWCAiOwotCVNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworCisgICAgU3RyaW5nIHRlc3RTdWl0ZSA9ICJBcHBBdXRoVFggIjsKKyAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKIAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVCTVBIb21lIik7Ci0JU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCisgICAgU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCiAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKIAogICAgICAgICBTaW1wbGVCTVAgc2ltcGxlQk1QID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoKTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJKREJDIEFwcGxpY2F0aW9uIEF1dGhlbnRpY2F0aW9uIFRYIHRlc3QiKTsKLSAgICAgICAKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJKREJDIEFwcGxpY2F0aW9uIEF1dGhlbnRpY2F0aW9uIFRYIHRlc3QiKTsKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBbGwgdGVzdHMgd2lsbCBmYWlsIHdpdGggRGVyYnkgdGlsbCBYQSBkcml2ZXIgaXMgZml4ZWQiKTsKLQlpZiAoIHNpbXBsZUJNUC50ZXN0MSgpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5GQUlMKTsKLQl9CisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDEoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQogCi0JaWYgKCBzaW1wbGVCTVAudGVzdDIoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgIGlmICggc2ltcGxlQk1QLnRlc3QyKCkgKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KIAotCWlmICggc2ltcGxlQk1QLnRlc3QzKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDMgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDMgOiAiLCBzdGF0LkZBSUwpOwotCX0KLSAgICAgICAgCi0JU3lzdGVtLm91dC5wcmludGxuKCJqZGJjIGFwcGF1dGh0eCBzdGF0dXM6Iik7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MygpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QzIDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QzIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CisKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImpkYmMgYXBwYXV0aHR4IHN0YXR1czoiKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aHR4L2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGh0eC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDJhMDQxNjguLjM1NzBhNzkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aHR4L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRodHgvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNTUsNiArNTUsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGh0eC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRodHgvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQppbmRleCBkNDkyMzNkLi5iMjI5N2MxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGh0eC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aHR4L2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTMxLDc4ICszMSw3OCBAQAogICAgIGludCBpZDsKIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBlbnRpdHlDb250ZXh0KSB7Ci0JQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKLQl0cnkgewotCSAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2V0eCIpOwotCX0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7Ci0JfQorICAgIENvbnRleHQgY29udGV4dCA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNldHgiKTsKKyAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOworICAgIH0KICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsqKlNpbXBsZUJNUEJlYW4qKl0gRG9uZSB3aXRoIHNldEVudGl0eUNvbnRleHQuLi4uIik7CiAgICAgfQogCiAgICAgcHVibGljIEludGVnZXIgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7Ci0JcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOworICAgIHJldHVybiBuZXcgSW50ZWdlcigxKTsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSgpIHsKICAgICAgICAgLy9hcHBsaWNhdGlvbiBhdXRoICsgdXNlci9wd2Qgbm90IHNwZWNpZmllZCAtIHNob3VsZCBmYWlsCi0JQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOwotCXRyeSB7Ci0JICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gdHJ1ZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7Ci0JICAgICAgICAgICAgY29ubi5jbG9zZSgpOwotCQl9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JfQotCi0KLQlyZXR1cm4gcGFzc2VkOworICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IHRydWU7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CiAgICAgfQotICAgIAorCisKKyAgICByZXR1cm4gcGFzc2VkOworICAgIH0KKwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QyKCkgewogICAgICAgICAvL2FwcGxpY2F0aW9uIGF1dGggKyB1c2VyL3B3ZCAgc3BlY2lmaWVkIC0gc2hvdWxkIHBhc3MKLQlDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQl0cnkgewotCSAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigiREJVU0VSIiwgIkRCUEFTU1dPUkQiKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7Ci0JICAgICAgICAgICAgY29ubi5jbG9zZSgpOwotCQl9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JfQorICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIHRyeSB7CisgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCJEQlVTRVIiLCAiREJQQVNTV09SRCIpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgIH0KIAogCi0JcmV0dXJuIHBhc3NlZDsKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QzKCkgewotICAgICAgICAvL2FwcGxpY2F0aW9uIGF1dGggKyB3cm9uZyB1c2VyL3B3ZCAKLQlDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oInh5eiIsICJ4eXoiICk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gdHJ1ZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7Ci0JICAgICAgICAgICAgY29ubi5jbG9zZSgpOwotCQl9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JfQorICAgICAgICAvL2FwcGxpY2F0aW9uIGF1dGggKyB3cm9uZyB1c2VyL3B3ZAorICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigieHl6IiwgInh5eiIgKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgIH0KIAogCi0JcmV0dXJuIHBhc3NlZDsKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRodHgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRodHgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGU0OTE0ZjYuLmYyNTYwNzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aHR4L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGh0eC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aHR4L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGh0eC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDcwZDFmY2MuLmQ4NTRiOTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aHR4L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRodHgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYmFzZWRNb25pdG9yaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYmFzZWRNb25pdG9yaW5nL2J1aWxkLnhtbAppbmRleCBiOTk1YmU0Li43MTAyZTdiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGJhc2VkTW9uaXRvcmluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBiYXNlZE1vbml0b3JpbmcvYnVpbGQueG1sCkBAIC02MSw3ICs2MSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+CkBAIC03NCwyMSArNzQsMjEgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJhcHBtb25pdG9yaW5nIi8+Ci0JPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vYXBwbW9uaXRvcmluZ0FwcENsaWVudC5qYXIiLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS9hcHBtb25pdG9yaW5nQXBwQ2xpZW50LmphciIvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0idHJ1ZSI+CiAgICAgICAgIDxhcmcgbGluZT0iZGVwbG95Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICAgICAgPGFyZyBsaW5lPSItLXVwbG9hZD10cnVlIi8+Ci0gICAgICAgIDxhcmcgbGluZT0iLS1yZXRyaWV2ZSAke2Fzc2VtYmxlLmRpcn0iLz4gICAgCi0gICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgICAgIDxhcmcgbGluZT0iLS1yZXRyaWV2ZSAke2Fzc2VtYmxlLmRpcn0iLz4KKyAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXNzZW1ibGUuZGlyfS9hcHBtb25pdG9yaW5nQXBwQ2xpZW50LmphciIvPgogICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxlY2hvIG1lc3NhZ2U9ImFwcGNsaWVudCAtY2xpZW50ICR7YXNzZW1ibGUuZGlyfS9hcHBtb25pdG9yaW5nQXBwQ2xpZW50LmphciAtbmFtZSBhcHBtb25pdG9yaW5nQ2xpZW50IC10ZXh0YXV0aCAtdXNlciBqMmVlIC1wYXNzd29yZCBqMmVlIC14bWwgJHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwgJHthcHBjbGllbnQuYXBwbGljYXRpb24uYXJnc30iLz4KICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KQEAgLTExNCwxMiArMTE0LDEyIEBACiAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICA8YXJnIGxpbmU9InVuZGVwbG95Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KLSAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgICAgICA8YXJnIGxpbmU9ImFwcG1vbml0b3JpbmdBcHBDbGllbnQiLz4KICAgICAgIDwvZXhlYz4KICAgICAgIDxhbnQgZGlyPSIuLi9jb250YXV0aCIgdGFyZ2V0PSJ1bmRlcGxveSIvPgogICAgICAgPGFudCBkaXI9Ii4uL3N0YXRlbWVudHRpbWVvdXQiIHRhcmdldD0idW5kZXBsb3ktbGltaXRlZCIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGJhc2VkTW9uaXRvcmluZy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGJhc2VkTW9uaXRvcmluZy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNDg2OTNhNS4uYmExZTQwNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBiYXNlZE1vbml0b3JpbmcvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYmFzZWRNb25pdG9yaW5nL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDksMTggKzQ5LDE4IEBACiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkFwcCBiYXNlZCBtb25pdG9yaW5nIHRlc3RzIik7CiAKICAgICAgICAgaWYgKGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKGFwcDEsIE5VTV9BQ1FVSVJFRCkgPT0gMiAmJiBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbChhcHAyLCBOVU1fQUNRVUlSRUQpID09IDMgJiYgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2wobnVsbCwgTlVNX0FDUVVJUkVEKSA9PSA1KSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTW9uaXRvcmluZyA6IEFjcXVpcmVkIFN0YXRpc3RpYyB0ZXN0IHBhc3MiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNb25pdG9yaW5nIDogQWNxdWlyZWQgU3RhdGlzdGljIHRlc3QgcGFzcyIpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIk1vbml0b3JpbmcgOiBBY3F1aXJlZCBTdGF0aXN0aWMgdGVzdDogIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBlbHNlIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJNb25pdG9yaW5nIDogQWNxdWlyZWQgU3RhdGlzdGljIHRlc3QgZmFpbCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1vbml0b3JpbmcgOiBBY3F1aXJlZCBTdGF0aXN0aWMgdGVzdCBmYWlsIik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiTW9uaXRvcmluZyA6IEFjcXVpcmVkIFN0YXRpc3RpYyB0ZXN0OiAiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKGFwcDEsIE5VTV9SRUxFQVNFRCkgPT0gMiAmJiBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbChhcHAyLCBOVU1fUkVMRUFTRUQpID09IDMgJiYgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2wobnVsbCwgTlVNX1JFTEVBU0VEKSA9PSA1KSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTW9uaXRvcmluZyA6IFJlbGVhc2VkIFN0YXRpc3RpYyB0ZXN0IHBhc3MiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNb25pdG9yaW5nIDogUmVsZWFzZWQgU3RhdGlzdGljIHRlc3QgcGFzcyIpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIk1vbml0b3JpbmcgOiBSZWxlYXNlZCBTdGF0aXN0aWMgdGVzdDogIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBlbHNlIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJNb25pdG9yaW5nIDogUmVsZWFzZWQgU3RhdGlzdGljIHRlc3QgZmFpbCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1vbml0b3JpbmcgOiBSZWxlYXNlZCBTdGF0aXN0aWMgdGVzdCBmYWlsIik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiTW9uaXRvcmluZyA6IFJlbGVhc2VkIFN0YXRpc3RpYyB0ZXN0OiAiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKQEAgLTY5LDI0ICs2OSwyNCBAQAogCiAgICAgcHVibGljIGludCBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbChTdHJpbmcgYXBwTmFtZSwgU3RyaW5nIG1vbml0b3JpbmdTdGF0KSB0aHJvd3MgRXhjZXB0aW9uIHsKIAotCWZpbmFsIFN0cmluZyB1cmxTdHIgPSAic2VydmljZTpqbXg6cm1pOi8vL2puZGkvcm1pOi8vIiArIEhPU1RfTkFNRSArICI6IiArIEpNWF9QT1JUICsgIi9qbXhybWkiOyAgICAKKyAgICBmaW5hbCBTdHJpbmcgdXJsU3RyID0gInNlcnZpY2U6am14OnJtaTovLy9qbmRpL3JtaTovLyIgKyBIT1NUX05BTUUgKyAiOiIgKyBKTVhfUE9SVCArICIvam14cm1pIjsKICAgICAgICAgZmluYWwgSk1YU2VydmljZVVSTCB1cmwgPSBuZXcgSk1YU2VydmljZVVSTCh1cmxTdHIpOwogCi0JZmluYWwgSk1YQ29ubmVjdG9yIGpteENvbm4gPSBKTVhDb25uZWN0b3JGYWN0b3J5LmNvbm5lY3QodXJsKTsKLQlmaW5hbCBNQmVhblNlcnZlckNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGpteENvbm4uZ2V0TUJlYW5TZXJ2ZXJDb25uZWN0aW9uKCk7CisgICAgZmluYWwgSk1YQ29ubmVjdG9yIGpteENvbm4gPSBKTVhDb25uZWN0b3JGYWN0b3J5LmNvbm5lY3QodXJsKTsKKyAgICBmaW5hbCBNQmVhblNlcnZlckNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGpteENvbm4uZ2V0TUJlYW5TZXJ2ZXJDb25uZWN0aW9uKCk7CiAKICAgICAgICAgT2JqZWN0TmFtZSBvYmplY3ROYW1lID0gbnVsbDsKLQlpZihhcHBOYW1lID09IG51bGwpIHsKKyAgICBpZihhcHBOYW1lID09IG51bGwpIHsKICAgICAgICAgICAgIG9iamVjdE5hbWUgPSBuZXcgT2JqZWN0TmFtZSgiYW14OnBwPS9tb24vc2VydmVyLW1vbltzZXJ2ZXJdLHR5cGU9amRiYy1jb25uZWN0aW9uLXBvb2wtbW9uLG5hbWU9cmVzb3VyY2VzLyIgKyBwb29sTmFtZSk7Ci0JfSBlbHNlIHsKLQkgICAgb2JqZWN0TmFtZSA9IG5ldyBPYmplY3ROYW1lKCJhbXg6cHA9L21vbi9zZXJ2ZXItbW9uW3NlcnZlcl0sdHlwZT1qZGJjLWNvbm5lY3Rpb24tcG9vbC1hcHAtbW9uLG5hbWU9cmVzb3VyY2VzLyIgKyBwb29sTmFtZSArICIvIiArIGFwcE5hbWUpOwotCX0KKyAgICB9IGVsc2UgeworICAgICAgICBvYmplY3ROYW1lID0gbmV3IE9iamVjdE5hbWUoImFteDpwcD0vbW9uL3NlcnZlci1tb25bc2VydmVyXSx0eXBlPWpkYmMtY29ubmVjdGlvbi1wb29sLWFwcC1tb24sbmFtZT1yZXNvdXJjZXMvIiArIHBvb2xOYW1lICsgIi8iICsgYXBwTmFtZSk7CisgICAgfQogCi0JamF2YXgubWFuYWdlbWVudC5vcGVubWJlYW4uQ29tcG9zaXRlRGF0YVN1cHBvcnQgcmV0dXJuVmFsdWUgPSAKLQkJKGphdmF4Lm1hbmFnZW1lbnQub3Blbm1iZWFuLkNvbXBvc2l0ZURhdGFTdXBwb3J0KSAKLQkJY29ubmVjdGlvbi5nZXRBdHRyaWJ1dGUob2JqZWN0TmFtZSwgbW9uaXRvcmluZ1N0YXQpOworICAgIGphdmF4Lm1hbmFnZW1lbnQub3Blbm1iZWFuLkNvbXBvc2l0ZURhdGFTdXBwb3J0IHJldHVyblZhbHVlID0KKyAgICAgICAgKGphdmF4Lm1hbmFnZW1lbnQub3Blbm1iZWFuLkNvbXBvc2l0ZURhdGFTdXBwb3J0KQorICAgICAgICBjb25uZWN0aW9uLmdldEF0dHJpYnV0ZShvYmplY3ROYW1lLCBtb25pdG9yaW5nU3RhdCk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiIgKyBtb25pdG9yaW5nU3RhdCArICI9IiArIHJldHVyblZhbHVlLmdldCgiY291bnQiKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4iICsgbW9uaXRvcmluZ1N0YXQgKyAiPSIgKyByZXR1cm5WYWx1ZS5nZXQoImNvdW50IikpOwogICAgICAgICByZXR1cm4gbmV3IEludGVnZXIocmV0dXJuVmFsdWUuZ2V0KCJjb3VudCIpLnRvU3RyaW5nKCkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hdXRvY29tbWl0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2F1dG9jb21taXQvYnVpbGQucHJvcGVydGllcwppbmRleCA2ZjdiZTAxLi41ZmVhMmFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2F1dG9jb21taXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2F1dG9jb21taXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLWF1dG9jb21taXQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2F1dG9jb21taXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hdXRvY29tbWl0L2J1aWxkLnhtbAppbmRleCBkNmU0MjY2Li4wODIxZTIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2F1dG9jb21taXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXV0b2NvbW1pdC9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ3LDI5ICs0NywyOSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovU2ltcGxlQk1QLmNsYXNzLCAqKi9TaW1wbGVCTVBIb21lLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCi0gICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+IAorCisgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KQEAgLTc3LDcgKzc3LDcgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CkBAIC04NywxMiArODcsMTIgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamRiYy1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWF1dG9jb21taXQtcG9vbCIvPgotCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2F1dG9jb21taXQiLz4KKyAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9hdXRvY29tbWl0Ii8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1hdXRvY29tbWl0LXBvb2wuc3RlYWR5X3Bvb2xfc2l6ZT0yIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1hdXRvY29tbWl0LXBvb2wuc3RlYWR5X3Bvb2xfc2l6ZT0yIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgpAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtYXV0b2NvbW1pdC1wb29sLm1heF9wb29sX3NpemU9MiIvPgogICAgICAgPC9hbnRjYWxsPgogCi0gICAgICAKKwogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXV0b2NvbW1pdC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2F1dG9jb21taXQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDRkNDU2M2YuLjUyOWI5MWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXV0b2NvbW1pdC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hdXRvY29tbWl0L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjcsMzYgKzI3LDM2IEBACiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAogICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKLQljbGllbnQucnVuVGVzdCgpOworICAgIGNsaWVudC5ydW5UZXN0KCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgcnVuVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVCTVBIb21lIik7Ci0JU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCisgICAgU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCiAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKIAogICAgICAgICBTaW1wbGVCTVAgc2ltcGxlQk1QID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoKTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJBdXRvY29tbWl0IFRlc3QiKTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJBdXRvY29tbWl0IFRlc3QiKTsKIAogICAgICAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MSgpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cygiIEF1dG9Db21taXQgdGVzdDEgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCIgQXV0b0NvbW1pdCB0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBzdGF0LmFkZFN0YXR1cygiIEF1dG9Db21taXQgdGVzdDEgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgQXV0b0NvbW1pdCB0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQogCiAgICAgICAgIGlmICggc2ltcGxlQk1QLnRlc3QyKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCIgQXV0b0NvbW1pdCB0ZXN0MiA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIiBBdXRvQ29tbWl0IHRlc3QyIDogIiwgc3RhdC5GQUlMKTsKLQl9CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgQXV0b0NvbW1pdCB0ZXN0MiA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIiBBdXRvQ29tbWl0IHRlc3QyIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oImpkYmMgYXV0b2NvbW1pdCBzdGF0dXM6ICIpOwotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJqZGJjIGF1dG9jb21taXQgc3RhdHVzOiAiKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXV0b2NvbW1pdC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hdXRvY29tbWl0L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggMzI2NWY1Yi4uYjdiYzc5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hdXRvY29tbWl0L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hdXRvY29tbWl0L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgPG1ldGhvZC1uYW1lPio8L21ldGhvZC1uYW1lPgogICAgICAgPC9tZXRob2Q+CiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+Ci0gICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+ICAKKyAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgICA8Y29udGFpbmVyLXRyYW5zYWN0aW9uPgogICAgICAgPG1ldGhvZD4KICAgICAgICAgPGVqYi1uYW1lPlNpbXBsZUJNUEVKQjwvZWpiLW5hbWU+CkBAIC02Miw2ICs2Miw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPk5vdFN1cHBvcnRlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2F1dG9jb21taXQvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXV0b2NvbW1pdC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDUwZjE3NjYuLmM3ODBkNzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXV0b2NvbW1pdC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXV0b2NvbW1pdC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC0zMCw2NyArMzAsNjcgQEAKICAgICBwcm90ZWN0ZWQgRGF0YVNvdXJjZSBkczsKIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBlbnRpdHlDb250ZXh0KSB7Ci0JQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKLQl0cnkgewotCSAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQl9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOwotCX0KKyAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOworICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBJbnRlZ2VyIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewotCXJldHVybiBuZXcgSW50ZWdlcigxKTsKKyAgICByZXR1cm4gbmV3IEludGVnZXIoMSk7CiAgICAgfQogCiAgICAgLyogR2V0IGEgc2luZ2xlIGNvbm5lY3Rpb24gYW5kIGNsb3NlIGl0ICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoKSB7CiAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CiAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQl0cnkgewotCSAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBwYXNzZWQgPSAhY29ubi5nZXRBdXRvQ29tbWl0KCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLSAgICAgICAgfSAKLSAgICAgICAgCi0JcmV0dXJuIHBhc3NlZDsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBwYXNzZWQgPSAhY29ubi5nZXRBdXRvQ29tbWl0KCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICB9CisKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QyKCkgewogICAgICAgICBDb25uZWN0aW9uIGNvbm4xICA9IG51bGw7CiAgICAgICAgIENvbm5lY3Rpb24gY29ubjIgID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwogCi0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIGNvbm4yID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgIHRyeSB7CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBjb25uMiA9IGRzLmdldENvbm5lY3Rpb24oKTsKIAotCSAgICBwYXNzZWQgPSBjb25uMS5nZXRBdXRvQ29tbWl0KCkgJiBjb25uMi5nZXRBdXRvQ29tbWl0KCk7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChjb25uMSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsKLQkJICAgIGNvbm4xLmNsb3NlKCk7Ci0JCX0gY2F0Y2goIEV4Y2VwdGlvbiBlaSkge30KLQkgICAgfQotCSAgICBpZiAoY29ubjIgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7Ci0JCSAgICBjb25uMi5jbG9zZSgpOwotCQl9IGNhdGNoKCBFeGNlcHRpb24gZWkpIHt9Ci0JICAgIH0KLQl9Ci0KLQlyZXR1cm4gcGFzc2VkOworICAgICAgICBwYXNzZWQgPSBjb25uMS5nZXRBdXRvQ29tbWl0KCkgJiBjb25uMi5nZXRBdXRvQ29tbWl0KCk7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbm4xLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlaSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoY29ubjIgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb25uMi5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZWkpIHt9CisgICAgICAgIH0KICAgICB9Ci0gICAKKworICAgIHJldHVybiBwYXNzZWQ7CisgICAgfQorCiAKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkge30KICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2F1dG9jb21taXQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hdXRvY29tbWl0L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBlNDkxNGY2Li5mMjU2MDc2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2F1dG9jb21taXQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXV0b2NvbW1pdC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXV0b2NvbW1pdC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hdXRvY29tbWl0L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hdXRvY29tbWl0L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hdXRvY29tbWl0L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYnVpbGQueG1sCmluZGV4IDE2YjE4MTcuLjA3MTVjNWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYnVpbGQueG1sCkBAIC0zMCw3ICszMCw3IEBACiA8cHJvamVjdCBuYW1lPSJqZGJjIiBkZWZhdWx0PSJ1c2FnZSIgYmFzZWRpcj0iLiI+CiAgICAgJmNvbW1vblNldHVwOwogICAgICZjb21tb25CdWlsZDsKLSAgICAKKwogICAgICZqZGJjQ29tbW9uOwogICAgICZqZGJjQ29tbW9uUHJvcGVydGllczsKICAgICA8IS0tJmVlQ29tbW9uOwpAQCAtNDMsOTQgKzQzLDk0IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9InRlc3RfcmVzdWx0cyoiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxkZWxldGU+Ci0JICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiBpbmNsdWRlcz0iSkRCQ3Rlc3RfcmVzdWx0cy5odG1sIi8+CisgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiBpbmNsdWRlcz0iSkRCQ3Rlc3RfcmVzdWx0cy5odG1sIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8ZGVsZXRlPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5vdXRwdXQiLz4KICAgICAgICAgPC9kZWxldGU+Ci0JPHJlY29yZCBuYW1lPSJqZGJjLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgotCTxhbnRjYWxsIHRhcmdldD0icnVuLXRlc3RzIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJyZXBvcnQiPgotCSAgICA8cGFyYW0gbmFtZT0iaHRtbGZpbGUiIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vdGVzdF9yZXN1bHRzLmh0bWwiLz4KLQk8L2FudGNhbGw+Ci0JPHJlY29yZCBuYW1lPSJqZGJjLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+Ci0JCisgICAgPHJlY29yZCBuYW1lPSJqZGJjLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLXRlc3RzIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXBvcnQiPgorICAgICAgICA8cGFyYW0gbmFtZT0iaHRtbGZpbGUiIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vdGVzdF9yZXN1bHRzLmh0bWwiLz4KKyAgICA8L2FudGNhbGw+CisgICAgPHJlY29yZCBuYW1lPSJqZGJjLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CisKICAgICA8L3RhcmdldD4KLQkKKwogICAgIDx0YXJnZXQgbmFtZT0iamRiYy1hbGwtc2VjdXJpdHkiPgogICAgICAgICA8ZGVsZXRlPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0iIGluY2x1ZGVzPSJ0ZXN0X3Jlc3VsdHMqIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8ZGVsZXRlPgotCSAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9IkpEQkNTZWN1cml0eXRlc3RfcmVzdWx0cy5odG1sIi8+CisgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiBpbmNsdWRlcz0iSkRCQ1NlY3VyaXR5dGVzdF9yZXN1bHRzLmh0bWwiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxkZWxldGU+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLm91dHB1dCIvPgogICAgICAgICA8L2RlbGV0ZT4KLQk8cmVjb3JkIG5hbWU9ImpkYmMuc2VjbWFuLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgotCTxhbnRjYWxsIHRhcmdldD0icnVuLXRlc3RzIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJyZXBvcnQiPgotCSAgICA8cGFyYW0gbmFtZT0iaHRtbGZpbGUiIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vSkRCQ1NlY3VyaXR5dGVzdF9yZXN1bHRzLmh0bWwiLz4KLQk8L2FudGNhbGw+Ci0JPHJlY29yZCBuYW1lPSJqZGJjLnNlY21hbi5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgorICAgIDxyZWNvcmQgbmFtZT0iamRiYy5zZWNtYW4ub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tdGVzdHMiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJlcG9ydCI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJodG1sZmlsZSIgdmFsdWU9IiR7ZW52LkFQU19IT01FfS9KREJDU2VjdXJpdHl0ZXN0X3Jlc3VsdHMuaHRtbCIvPgorICAgIDwvYW50Y2FsbD4KKyAgICA8cmVjb3JkIG5hbWU9ImpkYmMuc2VjbWFuLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CiAgICAgPC90YXJnZXQ+Ci0JCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0cyI+Ci0JPGFudCBkaXI9ImFwcGF1dGgiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImFwcGF1dGh0eCIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iY29udGF1dGgiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImNvbnRhdXRodHgiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImNvbnRhdXRoMSIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iY29udGF1dGgxdHgiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InJlY29uZmlnIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJhdXRvY29tbWl0IiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJqZGJjam1zYXV0aCIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ibm9wYXNzd2Rmb3JkYiIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iYXBwYXV0aCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iYXBwYXV0aHR4IiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJjb250YXV0aCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iY29udGF1dGh0eCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iY29udGF1dGgxIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJjb250YXV0aDF0eCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0icmVjb25maWciIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImF1dG9jb21taXQiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImpkYmNqbXNhdXRoIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJub3Bhc3N3ZGZvcmRiIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0idHhwYXNzdGhyb3VnaCIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9InR4YWZ0ZXJub250eCIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9InR4YWZ0ZXJub250eGpuZGkiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9Im5vdHhvcHMiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9Im5vbmFjYyIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ibGF6eWFzc29jIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJtYXJrY29ubmVjdGlvbmFzYmFkLmxvY2FsIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJtYXJrY29ubmVjdGlvbmFzYmFkLnhhIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJzdGF0ZW1lbnR3cmFwcGVyIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJtYXhjb25uZWN0aW9udXNhZ2UiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InN3aXRjaG9mZkFDQ2Nvbm5wb29saW5nIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJtdWx0aXBsZXVzZXJjcmVkZW50aWFscyIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ibm90eG9wcyIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ibm9uYWNjIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJsYXp5YXNzb2MiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9Im1hcmtjb25uZWN0aW9uYXNiYWQubG9jYWwiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9Im1hcmtjb25uZWN0aW9uYXNiYWQueGEiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InN0YXRlbWVudHdyYXBwZXIiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9Im1heGNvbm5lY3Rpb251c2FnZSIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ic3dpdGNob2ZmQUNDY29ubnBvb2xpbmciIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9Im11bHRpcGxldXNlcmNyZWRlbnRpYWxzIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0ibXVsdGlwbGVjbG9zZWNvbm5lY3Rpb24iIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InN0YXRlbWVudHRpbWVvdXQiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImNvbnZhbCIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iY29udmFsIiB0YXJnZXQ9ImFsbC1hc3NvYy13aXRoLXRocmVhZCIvPgotCTxhbnQgZGlyPSJjb25ubGVha3RyYWNpbmciIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImNvbm5jcmVhdGlvbnJldHJ5IiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJ2YWxpZGF0ZWF0bW9zdG9uY2VwZXJpb2QiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImNvbm5zaGFyaW5nIiB0YXJnZXQ9Im5vbnhhIi8+Ci0JPGFudCBkaXI9ImNvbm5zaGFyaW5nL25vbnhhIiB0YXJnZXQ9ImFsbC1hc3NvYy13aXRoLXRocmVhZCIvPgotCTxhbnQgZGlyPSJjcGRzIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJ0eGlzb2xhdGlvbiIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ic3RtdENhY2hpbmdfaGl0X21pc3MiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InBvb2xpbmciIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImRtbWNmIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJkbW1jZi5tYXJrY29ubmVjdGlvbmFzYmFkLnhhIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJkbW1jZi5hcHBjbGllbnQiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InN0YXRlbWVudHRpbWVvdXQiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImNvbnZhbCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iY29udmFsIiB0YXJnZXQ9ImFsbC1hc3NvYy13aXRoLXRocmVhZCIvPgorICAgIDxhbnQgZGlyPSJjb25ubGVha3RyYWNpbmciIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImNvbm5jcmVhdGlvbnJldHJ5IiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJ2YWxpZGF0ZWF0bW9zdG9uY2VwZXJpb2QiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImNvbm5zaGFyaW5nIiB0YXJnZXQ9Im5vbnhhIi8+CisgICAgPGFudCBkaXI9ImNvbm5zaGFyaW5nL25vbnhhIiB0YXJnZXQ9ImFsbC1hc3NvYy13aXRoLXRocmVhZCIvPgorICAgIDxhbnQgZGlyPSJjcGRzIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJ0eGlzb2xhdGlvbiIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ic3RtdENhY2hpbmdfaGl0X21pc3MiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InBvb2xpbmciIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImRtbWNmIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJkbW1jZi5tYXJrY29ubmVjdGlvbmFzYmFkLnhhIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJkbW1jZi5hcHBjbGllbnQiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJ0cmFjaW5nc3FsIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJkYXRhc291cmNlNDAiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImN1c3RvbS12YWxpZGF0aW9uIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJjdXN0b20tdmFsaWRhdGlvbi0xIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJmbHVzaGNvbm5lY3Rpb25wb29sIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJjb25ubGVha3JlY2xhaW1ub3RpZnkiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InN0bXRDYWNoaW5nX2hpdF9taXNzLm1vbml0b3JpbmciIHRhcmdldD0iYWxsIi8+Ci0JPCEtLWFudCBkaXI9InRyYW5zcGFyZW50LXBvb2wtcmVjb25maWciIHRhcmdldD0iYWxsIi8tLT4KLQk8IS0tYW50IGRpcj0idHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy1yZXNvdXJjZXMteG1sIiB0YXJnZXQ9ImFsbCIvLS0+Ci0JPCEtLWFudCBkaXI9InNxbHRyYWNlbW9uaXRvcmluZyIgdGFyZ2V0PSJhbGwiLy0tPgotCTwhLS1hbnQgZGlyPSJzdGF0ZW1lbnRsZWFrZGV0ZWN0aW9uIiB0YXJnZXQ9ImFsbCIvLS0+Ci0JPCEtLWFudCBkaXI9ImFwcGJhc2VkTW9uaXRvcmluZyIgdGFyZ2V0PSJhbGwiLy0tPgotCTxhbnQgZGlyPSJqcGEtZHNkIiB0YXJnZXQ9ImFsbCIgLz4KLQk8YW50IGRpcj0ianBhLWRzZCIgdGFyZ2V0PSJhbGwtYXBwY2xpZW50LWV4cG9zZWQtZHNkIi8+Ci0JPGFudCBkaXI9InN0bXRDYWNoaW5nX2hpdF9taXNzLmZpeGVkIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJkYXRhc291cmNlNDAiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImN1c3RvbS12YWxpZGF0aW9uIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJjdXN0b20tdmFsaWRhdGlvbi0xIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJmbHVzaGNvbm5lY3Rpb25wb29sIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJjb25ubGVha3JlY2xhaW1ub3RpZnkiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InN0bXRDYWNoaW5nX2hpdF9taXNzLm1vbml0b3JpbmciIHRhcmdldD0iYWxsIi8+CisgICAgPCEtLWFudCBkaXI9InRyYW5zcGFyZW50LXBvb2wtcmVjb25maWciIHRhcmdldD0iYWxsIi8tLT4KKyAgICA8IS0tYW50IGRpcj0idHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy1yZXNvdXJjZXMteG1sIiB0YXJnZXQ9ImFsbCIvLS0+CisgICAgPCEtLWFudCBkaXI9InNxbHRyYWNlbW9uaXRvcmluZyIgdGFyZ2V0PSJhbGwiLy0tPgorICAgIDwhLS1hbnQgZGlyPSJzdGF0ZW1lbnRsZWFrZGV0ZWN0aW9uIiB0YXJnZXQ9ImFsbCIvLS0+CisgICAgPCEtLWFudCBkaXI9ImFwcGJhc2VkTW9uaXRvcmluZyIgdGFyZ2V0PSJhbGwiLy0tPgorICAgIDxhbnQgZGlyPSJqcGEtZHNkIiB0YXJnZXQ9ImFsbCIgLz4KKyAgICA8YW50IGRpcj0ianBhLWRzZCIgdGFyZ2V0PSJhbGwtYXBwY2xpZW50LWV4cG9zZWQtZHNkIi8+CisgICAgPGFudCBkaXI9InN0bXRDYWNoaW5nX2hpdF9taXNzLmZpeGVkIiB0YXJnZXQ9ImFsbCIvPgogCi0JPCEtLTxhbnRjYWxsIHRhcmdldD0iYWxsLW9yYWNsZSIvPi0tPgorICAgIDwhLS08YW50Y2FsbCB0YXJnZXQ9ImFsbC1vcmFjbGUiLz4tLT4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZWUtYWxsIj4KQEAgLTE3MSw0MSArMTcxLDQxIEBACiAgICAgICAgIDxhbnQgZGlyPSJ2YWxpZGF0ZWF0bW9zdG9uY2VwZXJpb2QiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJjcGRzIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0idHhpc29sYXRpb24iIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InN0bXRDYWNoaW5nX2hpdF9taXNzIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJwb29saW5nIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJ0cmFuc3BhcmVudC1wb29sLXJlY29uZmlnIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJ0cmFuc3BhcmVudC1wb29sLXJlY29uZmlnLXJlc291cmNlcy14bWwiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImpwYS1kc2QiIHRhcmdldD0iYWxsIiAvPgotCTxhbnQgZGlyPSJqcGEtZHNkIiB0YXJnZXQ9ImFsbC1hcHBjbGllbnQtZXhwb3NlZC1kc2QiLz4KKyAgICA8YW50IGRpcj0ic3RtdENhY2hpbmdfaGl0X21pc3MiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InBvb2xpbmciIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InRyYW5zcGFyZW50LXBvb2wtcmVjb25maWciIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InRyYW5zcGFyZW50LXBvb2wtcmVjb25maWctcmVzb3VyY2VzLXhtbCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ianBhLWRzZCIgdGFyZ2V0PSJhbGwiIC8+CisgICAgPGFudCBkaXI9ImpwYS1kc2QiIHRhcmdldD0iYWxsLWFwcGNsaWVudC1leHBvc2VkLWRzZCIvPgogICAgICAgICA8cmVjb3JkIG5hbWU9ImpkYmMub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KLQk8YW50Y2FsbCB0YXJnZXQ9ImpkYmMtYWxsIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJqZGJjLWFsbCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwtb3JhY2xlIj4KLQk8cmVjb3JkIG5hbWU9ImpkYmMtb3JhY2xlLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgotCTxhbnQgZGlyPSJjb25uc2hhcmluZyIgdGFyZ2V0PSJ4YSIvPgotCTxhbnQgZGlyPSJzaW1wbGVvcmFkZCIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iZG1tY2Yubm90eGNvbm4iIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9Im5vdHhjb25uIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJyZWNvbmZpZyIgdGFyZ2V0PSJ1c2VycGFzcyIvPgotCTxhbnQgZGlyPSJzaW1wbGVvcmEiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImluaXQtc3FsIiB0YXJnZXQ9ImFsbCIvPgotCTxyZWNvcmQgbmFtZT0iamRiYy1vcmFjbGUub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KKyAgICA8cmVjb3JkIG5hbWU9ImpkYmMtb3JhY2xlLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgorICAgIDxhbnQgZGlyPSJjb25uc2hhcmluZyIgdGFyZ2V0PSJ4YSIvPgorICAgIDxhbnQgZGlyPSJzaW1wbGVvcmFkZCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iZG1tY2Yubm90eGNvbm4iIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9Im5vdHhjb25uIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJyZWNvbmZpZyIgdGFyZ2V0PSJ1c2VycGFzcyIvPgorICAgIDxhbnQgZGlyPSJzaW1wbGVvcmEiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImluaXQtc3FsIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxyZWNvcmQgbmFtZT0iamRiYy1vcmFjbGUub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsLXdpdGgtc2VjdXJpdHktbWFuYWdlciI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtanZtLW9wdGlvbnMiPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWp2bS1vcHRpb25zIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcHRpb24iIHZhbHVlPSItRGphdmEuc2VjdXJpdHkubWFuYWdlciIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlciIvPgotCTxhbnRjYWxsIHRhcmdldD0iamRiYy1hbGwtc2VjdXJpdHkiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qdm0tb3B0aW9ucyI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iamRiYy1hbGwtc2VjdXJpdHkiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qdm0tb3B0aW9ucyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3B0aW9uIiB2YWx1ZT0iLURqYXZhLnNlY3VyaXR5Lm1hbmFnZXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFwcGF1dGgiPgpAQCAtMzMzLDcgKzMzMyw3IEBACiAgICAgICAgIDxhbnQgZGlyPSJtYXhjb25uZWN0aW9udXNhZ2UiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0ibWF4Y29ubmVjdGlvbnVzYWdlLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzdGF0ZW1lbnR3cmFwcGVyIj4KICAgICAgICAgPHJlY29yZCBuYW1lPSJzdGF0ZW1lbnR3cmFwcGVyLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgogICAgICAgICA8YW50IGRpcj0ic3RhdGVtZW50d3JhcHBlciIgdGFyZ2V0PSJhbGwiLz4KQEAgLTM4Myw3OSArMzgzLDc5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InN0bXRDYWNoaW5nX2hpdF9taXNzIj4KLQk8cmVjb3JkIG5hbWU9InN0bXRDYWNoaW5nX2hpdF9taXNzLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgotCTxhbnQgZGlyPSJzdG10Q2FjaGluZ19oaXRfbWlzcyIgdGFyZ2V0PSJhbGwiLz4KLQk8cmVjb3JkIG5hbWU9InN0bXRDYWNoaW5nX2hpdF9taXNzLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CisgICAgPHJlY29yZCBuYW1lPSJzdG10Q2FjaGluZ19oaXRfbWlzcy5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KKyAgICA8YW50IGRpcj0ic3RtdENhY2hpbmdfaGl0X21pc3MiIHRhcmdldD0iYWxsIi8+CisgICAgPHJlY29yZCBuYW1lPSJzdG10Q2FjaGluZ19oaXRfbWlzcy5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwb29saW5nIj4KLQk8cmVjb3JkIG5hbWU9InBvb2xpbmcub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+Ci0JPGFudCBkaXI9InBvb2xpbmciIHRhcmdldD0iYWxsIi8+CisgICAgPHJlY29yZCBuYW1lPSJwb29saW5nLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgorICAgIDxhbnQgZGlyPSJwb29saW5nIiB0YXJnZXQ9ImFsbCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkbW1jZiI+Ci0JPHJlY29yZCBuYW1lPSJkbW1jZi5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KLQk8YW50IGRpcj0iZG1tY2YiIHRhcmdldD0iYWxsIi8+Ci0JPHJlY29yZCBuYW1lPSJkbW1jZi5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgorICAgIDxyZWNvcmQgbmFtZT0iZG1tY2Yub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+CisgICAgPGFudCBkaXI9ImRtbWNmIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxyZWNvcmQgbmFtZT0iZG1tY2Yub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZG1tY2YuYXBwY2xpZW50Ij4KLQk8cmVjb3JkIG5hbWU9ImRtbWNmLmFwcGNsaWVudC5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KLQk8YW50IGRpcj0iZG1tY2YuYXBwY2xpZW50IiB0YXJnZXQ9ImFsbCIvPgotCTxyZWNvcmQgbmFtZT0iZG1tY2YuYXBwY2xpZW50Lm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CisgICAgPHJlY29yZCBuYW1lPSJkbW1jZi5hcHBjbGllbnQub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+CisgICAgPGFudCBkaXI9ImRtbWNmLmFwcGNsaWVudCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8cmVjb3JkIG5hbWU9ImRtbWNmLmFwcGNsaWVudC5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ0cmFjaW5nc3FsIj4KLQk8cmVjb3JkIG5hbWU9InRyYWNpbmdzcWwub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+Ci0JPGFudCBkaXI9InRyYWNpbmdzcWwiIHRhcmdldD0iYWxsIi8+Ci0JPHJlY29yZCBuYW1lPSJ0cmFjaW5nc3FsLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CisgICAgPHJlY29yZCBuYW1lPSJ0cmFjaW5nc3FsLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgorICAgIDxhbnQgZGlyPSJ0cmFjaW5nc3FsIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxyZWNvcmQgbmFtZT0idHJhY2luZ3NxbC5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkYXRhc291cmNlNDAiPgotCTxyZWNvcmQgbmFtZT0iZGF0YXNvdXJjZTQwLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgotCTxhbnQgZGlyPSJkYXRhc291cmNlNDAiIHRhcmdldD0iYWxsIi8+Ci0JPHJlY29yZCBuYW1lPSJkYXRhc291cmNlNDAub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KKyAgICA8cmVjb3JkIG5hbWU9ImRhdGFzb3VyY2U0MC5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KKyAgICA8YW50IGRpcj0iZGF0YXNvdXJjZTQwIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxyZWNvcmQgbmFtZT0iZGF0YXNvdXJjZTQwLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImZsdXNoY29ubmVjdGlvbnBvb2wiPgotCTxyZWNvcmQgbmFtZT0iZmx1c2hjb25uZWN0aW9ucG9vbC5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KLQk8YW50IGRpcj0iZmx1c2hjb25uZWN0aW9ucG9vbCIgdGFyZ2V0PSJhbGwiLz4KLQk8cmVjb3JkIG5hbWU9ImZsdXNoY29ubmVjdGlvbnBvb2wub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KKyAgICA8cmVjb3JkIG5hbWU9ImZsdXNoY29ubmVjdGlvbnBvb2wub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+CisgICAgPGFudCBkaXI9ImZsdXNoY29ubmVjdGlvbnBvb2wiIHRhcmdldD0iYWxsIi8+CisgICAgPHJlY29yZCBuYW1lPSJmbHVzaGNvbm5lY3Rpb25wb29sLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImluaXQtc3FsIj4KLQk8cmVjb3JkIG5hbWU9ImluaXQtc3FsLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgotCTxhbnQgZGlyPSJpbml0LXNxbCIgdGFyZ2V0PSJhbGwiLz4KLQk8cmVjb3JkIG5hbWU9ImluaXQtc3FsLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CisgICAgPHJlY29yZCBuYW1lPSJpbml0LXNxbC5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KKyAgICA8YW50IGRpcj0iaW5pdC1zcWwiIHRhcmdldD0iYWxsIi8+CisgICAgPHJlY29yZCBuYW1lPSJpbml0LXNxbC5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb25ubGVha3JlY2xhaW1ub3RpZnkiPgotCTxyZWNvcmQgbmFtZT0iY29ubmxlYWtyZWNsYWltbm90aWZ5Lm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgotCTxhbnQgZGlyPSJjb25ubGVha3JlY2xhaW1ub3RpZnkiIHRhcmdldD0iYWxsIi8+Ci0JPHJlY29yZCBuYW1lPSJjb25ubGVha3JlY2xhaW1ub3RpZnkub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KKyAgICA8cmVjb3JkIG5hbWU9ImNvbm5sZWFrcmVjbGFpbW5vdGlmeS5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KKyAgICA8YW50IGRpcj0iY29ubmxlYWtyZWNsYWltbm90aWZ5IiB0YXJnZXQ9ImFsbCIvPgorICAgIDxyZWNvcmQgbmFtZT0iY29ubmxlYWtyZWNsYWltbm90aWZ5Lm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CiAgICAgPC90YXJnZXQ+Ci0gIAorCiAgICAgPHRhcmdldCBuYW1lPSJ0cmFuc3BhcmVudC1wb29sLXJlY29uZmlnIj4KLQk8cmVjb3JkIG5hbWU9InRyYW5zcGFyZW50LXBvb2wtcmVjb25maWcub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+Ci0JPGFudCBkaXI9InRyYW5zcGFyZW50LXBvb2wtcmVjb25maWciIHRhcmdldD0iYWxsIi8+Ci0JPHJlY29yZCBuYW1lPSJ0cmFuc3BhcmVudC1wb29sLXJlY29uZmlnLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CisgICAgPHJlY29yZCBuYW1lPSJ0cmFuc3BhcmVudC1wb29sLXJlY29uZmlnLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgorICAgIDxhbnQgZGlyPSJ0cmFuc3BhcmVudC1wb29sLXJlY29uZmlnIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxyZWNvcmQgbmFtZT0idHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0idHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy1yZXNvdXJjZXMteG1sIj4KLQk8cmVjb3JkIG5hbWU9InRyYW5zcGFyZW50LXBvb2wtcmVjb25maWctcmVzb3VyY2VzLXhtbC5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KLQk8YW50IGRpcj0idHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy1yZXNvdXJjZXMteG1sIiB0YXJnZXQ9ImFsbCIvPgotCTxyZWNvcmQgbmFtZT0idHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy1yZXNvdXJjZXMteG1sLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CisgICAgPHJlY29yZCBuYW1lPSJ0cmFuc3BhcmVudC1wb29sLXJlY29uZmlnLXJlc291cmNlcy14bWwub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+CisgICAgPGFudCBkaXI9InRyYW5zcGFyZW50LXBvb2wtcmVjb25maWctcmVzb3VyY2VzLXhtbCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8cmVjb3JkIG5hbWU9InRyYW5zcGFyZW50LXBvb2wtcmVjb25maWctcmVzb3VyY2VzLXhtbC5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJqcGEtZHNkIj4KLQk8cmVjb3JkIG5hbWU9ImpwYS1kc2Qub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+Ci0JPGFudCBkaXI9ImpwYS1kc2QiIHRhcmdldD0iYWxsIi8+Ci0JPHJlY29yZCBuYW1lPSJqcGEtZHNkLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CisgICAgPHJlY29yZCBuYW1lPSJqcGEtZHNkLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgorICAgIDxhbnQgZGlyPSJqcGEtZHNkIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxyZWNvcmQgbmFtZT0ianBhLWRzZC5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJqcGEtZHNkLmFwcGNsaWVudC1leHBvc2VkLWRzZCI+Ci0JPHJlY29yZCBuYW1lPSJqcGEtZHNkLmFwcGNsaWVudC1leHBvc2VkLWRzZC5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KLQk8YW50IGRpcj0ianBhLWRzZCIgdGFyZ2V0PSJhbGwtYXBwY2xpZW50LWV4cG9zZWQtZHNkIi8+Ci0JPHJlY29yZCBuYW1lPSJqcGEtZHNkLmFwcGNsaWVudC1leHBvc2VkLWRzZC5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgorICAgIDxyZWNvcmQgbmFtZT0ianBhLWRzZC5hcHBjbGllbnQtZXhwb3NlZC1kc2Qub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+CisgICAgPGFudCBkaXI9ImpwYS1kc2QiIHRhcmdldD0iYWxsLWFwcGNsaWVudC1leHBvc2VkLWRzZCIvPgorICAgIDxyZWNvcmQgbmFtZT0ianBhLWRzZC5hcHBjbGllbnQtZXhwb3NlZC1kc2Qub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jbXBzaW1wbGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY21wc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjBjNzJkMS4uOWVhZTA3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jbXBzaW1wbGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NtcHNpbXBsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMCArMTUsMjAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtY21wc2ltcGxlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1jbXAtbWFwcGluZ3MueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tY21wLW1hcHBpbmdzLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iZGJzY2hlbWEiIHZhbHVlPSJzcWwvY21wc2ltcGxlLmRic2NoZW1hIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NtcHNpbXBsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NtcHNpbXBsZS9idWlsZC54bWwKaW5kZXggMDQ5ZmVmZi4uM2UxNTQzMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jbXBzaW1wbGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY21wc2ltcGxlL2J1aWxkLnhtbApAQCAtNDEsNyArNDEsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01NSwzOSArNTUsMzkgQEAKICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWphciIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCi0JCXZhbHVlPSIqKi9CbG9iVGVzdC5jbGFzcywgKiovQmxvYlRlc3RIb21lLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCisgICAgICAgIHZhbHVlPSIqKi9CbG9iVGVzdC5jbGFzcywgKiovQmxvYlRlc3RIb21lLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVhciIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icGFja2FnZS1qYXIiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVqYmphci1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzLCoqLypkYnNjaGVtYSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UtZWFyIj4KICAgICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+ICAgIAorICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+CiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9L2xpYiIgaW5jbHVkZXM9InJlcG9ydGVyLmphciIvPgotICAgICAgPC9lYXI+ICAgICAgICAKKyAgICAgIDwvZWFyPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZS1jb21tb24iLz4KIApAQCAtOTYsMTcgKzk2LDE3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KQEAgLTExNCwxNSArMTE0LDE1IEBACiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZS1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gCi0gICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic3FsLWNyZWF0ZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0ic3FsLWRyb3AiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4gICAKKyAgICA8dGFyZ2V0IG5hbWU9InNxbC1kcm9wIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgIDwvYW50Y2FsbD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY21wc2ltcGxlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY21wc2ltcGxlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBkZDExNjZiLi5mZGZhMDQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NtcHNpbXBsZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jbXBzaW1wbGUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCwxMSArMjQsMTEgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgCi0gCVNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotCVN0cmluZyB0ZXN0U3VpdGUgPSAiY21wc2ltcGxlIjsKKworICAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKKyAgICBTdHJpbmcgdGVzdFN1aXRlID0gImNtcHNpbXBsZSI7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvQmxvYlRlc3RCZWFuIik7CkBAIC0zOSw3ICszOSw3IEBACiAKICAgICAgICAgICAgIEJsb2JUZXN0IGJlYW4gPSBiaG9tZS5jcmVhdGUobmV3IEludGVnZXIoMTAwKSwgIkZPTyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkOiAiICtiZWFuLmdldFByaW1hcnlLZXkoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0aW5nIG5ldy4uLiIpOwogICAgICAgICAgICAgYmVhbiA9IGJob21lLmZpbmRCeVByaW1hcnlLZXkobmV3IEludGVnZXIoMTAwKSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obmV3IFN0cmluZyhiZWFuLmdldE5hbWUoKSkpOwpAQCAtNDgsMTYgKzQ4LDE2IEBACiAgICAgICAgICAgICBiZWFuID0gYmhvbWUuZmluZEJ5UHJpbWFyeUtleShuZXcgSW50ZWdlcigxKSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obmV3IFN0cmluZyhiZWFuLmdldE5hbWUoKSkpOwogCi0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdCA6ICIsIHN0YXQuUEFTUyk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdCA6ICIsIHN0YXQuUEFTUyk7CiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiBleGNlcHRpb246Iik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgICJ0ZXN0IDogIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgICJ0ZXN0IDogIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogCiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NtcHNpbXBsZS9lamIvQmxvYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY21wc2ltcGxlL2VqYi9CbG9iVGVzdC5qYXZhCmluZGV4IDNlN2UzM2IuLmQwMjM2NDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY21wc2ltcGxlL2VqYi9CbG9iVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY21wc2ltcGxlL2VqYi9CbG9iVGVzdC5qYXZhCkBAIC0yNCw4ICsyNCw4IEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBCbG9iVGVzdCBleHRlbmRzIGpha2FydGEuZWpiLkVKQk9iamVjdCB7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY21wc2ltcGxlL2VqYi9CbG9iVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY21wc2ltcGxlL2VqYi9CbG9iVGVzdEJlYW4uamF2YQppbmRleCA3ODIyYTRhLi4zN2U1YTM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NtcHNpbXBsZS9lamIvQmxvYlRlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jbXBzaW1wbGUvZWpiL0Jsb2JUZXN0QmVhbi5qYXZhCkBAIC0yNSw3NSArMjUsNzUgQEAKIAogCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmxvYlRlc3RCZWFuIGltcGxlbWVudHMgamFrYXJ0YS5lamIuRW50aXR5QmVhbiB7Ci0gICAgCisKICAgICBwcml2YXRlIGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQgY29udGV4dDsKLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI3NldEVudGl0eUNvbnRleHQoamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQgYUNvbnRleHQpIHsKICAgICAgICAgY29udGV4dD1hQ29udGV4dDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJBY3RpdmF0ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUGFzc2l2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUmVtb3ZlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVidWc6IEJsb2JUZXN0IGVqYlJlbW92ZSIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI3Vuc2V0RW50aXR5Q29udGV4dCgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgewogICAgICAgICBjb250ZXh0PW51bGw7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiTG9hZCgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJTdG9yZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IEludGVnZXIgZ2V0SWQoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRJZChJbnRlZ2VyIGlkKTsKIAogICAgIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuU3RyaW5nIGdldE5hbWUoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXROYW1lKGphdmEubGFuZy5TdHJpbmcgbmFtZSk7Ci0gICAgCisKICAgICAvKgogICAgIHB1YmxpYyBhYnN0cmFjdCBieXRlW10gZ2V0QmxiKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0QmxiKGJ5dGVbXSBiKTsKLSAgICAKKwogCiAgICAgcHVibGljIGphdmEubGFuZy5JbnRlZ2VyIGVqYkNyZWF0ZShJbnRlZ2VyIGlkLCBqYXZhLmxhbmcuU3RyaW5nIG5hbWUsIGJ5dGVbXSBiKSB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIHsKICAgICAgICAgc2V0SWQoaWQpOwpAQCAtMTAyLDIxICsxMDIsMjEgQEAKIAogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgKi8gIAotICAgIHB1YmxpYyBqYXZhLmxhbmcuSW50ZWdlciBlamJDcmVhdGUoSW50ZWdlciBpZCwgamF2YS5sYW5nLlN0cmluZyBuYW1lKSAKLSAgICAgICAgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiAKKyAgICAqLworICAgIHB1YmxpYyBqYXZhLmxhbmcuSW50ZWdlciBlamJDcmVhdGUoSW50ZWdlciBpZCwgamF2YS5sYW5nLlN0cmluZyBuYW1lKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uCiAgICAgewogICAgICAgICBzZXRJZChpZCk7CiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAKKwogICAgIC8qCiAgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZShJbnRlZ2VyIGlkLCBqYXZhLmxhbmcuU3RyaW5nIG5hbWUsIGJ5dGVbXSBiKSB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIHsKICAgICB9CiAgICAgKi8KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKEludGVnZXIgaWQsIGphdmEubGFuZy5TdHJpbmcgbmFtZSApIAorCisgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZShJbnRlZ2VyIGlkLCBqYXZhLmxhbmcuU3RyaW5nIG5hbWUgKQogICAgICAgICB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIHt9Ci19CQorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jbXBzaW1wbGUvZWpiL0Jsb2JUZXN0SG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jbXBzaW1wbGUvZWpiL0Jsb2JUZXN0SG9tZS5qYXZhCmluZGV4IDU2MmYxZjUuLjBjNmQ0NmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY21wc2ltcGxlL2VqYi9CbG9iVGVzdEhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NtcHNpbXBsZS9lamIvQmxvYlRlc3RIb21lLmphdmEKQEAgLTI0LDE0ICsyNCwxNCBAQAogICovCiAKIHB1YmxpYyBpbnRlcmZhY2UgQmxvYlRlc3RIb21lIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCSG9tZSB7Ci0gICAgLyogICAgCisgICAgLyoKICAgICBwdWJsaWMgIEJsb2JUZXN0IGNyZWF0ZShJbnRlZ2VyIGksIGphdmEubGFuZy5TdHJpbmcgbmFtZSwgYnl0ZVtdIGIpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyAgQmxvYlRlc3QgZmluZEJ5UHJpbWFyeUtleSAoSW50ZWdlciBrZXkpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sIGpha2FydGEuZWpiLkZpbmRlckV4Y2VwdGlvbjsKICAgICAqLwotICAgIHB1YmxpYyAgQmxvYlRlc3QgY3JlYXRlKEludGVnZXIgaSwgamF2YS5sYW5nLlN0cmluZyBuYW1lKSAKKyAgICBwdWJsaWMgIEJsb2JUZXN0IGNyZWF0ZShJbnRlZ2VyIGksIGphdmEubGFuZy5TdHJpbmcgbmFtZSkKICAgICAgICAgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwotICAgIAotICAgIHB1YmxpYyAgQmxvYlRlc3QgZmluZEJ5UHJpbWFyeUtleSAoSW50ZWdlciBrZXkpIAorCisgICAgcHVibGljICBCbG9iVGVzdCBmaW5kQnlQcmltYXJ5S2V5IChJbnRlZ2VyIGtleSkKICAgICAgICAgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jbXBzaW1wbGUvc3FsL2Jsb2Jfb3JhLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY21wc2ltcGxlL3NxbC9ibG9iX29yYS5zcWwKaW5kZXggNTQxMDcyMC4uNWYyMmEzMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jbXBzaW1wbGUvc3FsL2Jsb2Jfb3JhLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NtcHNpbXBsZS9zcWwvYmxvYl9vcmEuc3FsCkBAIC0xLDggKzEsOCBAQAogZHJvcCB0YWJsZSBteWJsb2I7CiAKIGNyZWF0ZSB0YWJsZSBteWJsb2IgKAotCWlkIAlpbnQgcHJpbWFyeSBrZXksCi0JbmFtZQl2YXJjaGFyMigxMDApLAorICAgIGlkICAgICBpbnQgcHJpbWFyeSBrZXksCisgICAgbmFtZSAgICB2YXJjaGFyMigxMDApLAogKTsKIAogaW5zZXJ0IGludG8gbXlibG9iIHZhbHVlcyAoMSwgJ0FBQScpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jbXBzaW1wbGUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jbXBzaW1wbGUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDdmYzE3NDEuLjY3M2MwOTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY21wc2ltcGxlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NtcHNpbXBsZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsOCArMSw4IEBACiBkcm9wIHRhYmxlIG15YmxvYjsKIAogY3JlYXRlIHRhYmxlIG15YmxvYiAoCi0JaWQgCWludGVnZXIgTk9UIE5VTEwsCi0JbmFtZQl2YXJjaGFyKDEwMCkKKyAgICBpZCAgICAgaW50ZWdlciBOT1QgTlVMTCwKKyAgICBuYW1lICAgIHZhcmNoYXIoMTAwKQogKTsKIAogaW5zZXJ0IGludG8gbXlibG9iIHZhbHVlcyAoMSwgJ0FBQScpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25maWcvZWUtY29tbW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29uZmlnL2VlLWNvbW1vbi54bWwKaW5kZXggNmU1ZDczNi4uYzg3MGJkYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25maWcvZWUtY29tbW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbmZpZy9lZS1jb21tb24ueG1sCkBAIC03MCwxMSArNzAsMTEgQEAKIAogPCEtLSBjbGVhbiAtLT4KIDx0YXJnZXQgbmFtZT0iY2xlYW4tY2xhc3Nlcy1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJjbGVhbi1qYXJzLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxkZWxldGUgZGlyPSIke2Fzc2VtYmxlLmRpcn0iIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgIDxkZWxldGUgZGlyPSIke2Fzc2VtYmxlLmRpcn0iIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iY2xlYW4tY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC04Niw3ICs4Niw3IEBACiAgICAgPGVjaG8gbWVzc2FnZT0iY2xlYW5pbmcgYWxsICoub3V0cHV0LCAqLmxvZyBhbmQgUmVwUnVuQ29uZi50eHQgZmlsZXMuLi4iLz4KICAgICA8ZGVsZXRlIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICA8ZGVsZXRlIGZhaWxvbmVycm9yPSJmYWxzZSI+Ci0gICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiAKKyAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0iCiAgICAgICAgICAgICBpbmNsdWRlcz0iKiovKnJlc3VsdHMqLiptbCwKICAgICAgICAgICAgICoqLyoub3V0cHV0LAogICAgICAgICAgICAgKiovKi5sb2csCkBAIC0xMDMsOCArMTAzLDggQEAKIAogPCEtLSAgY29tcGlsZSAgLS0+CiA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbi1hcyIvPgotCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24tYXM4MCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24tYXMiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uLWFzODAiLz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtY29tbW9uLWFzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgdW5sZXNzPSJBUzgwIj4KQEAgLTEzMiwzOCArMTMyLDM4IEBACiAKIDwhLS0gd2FyIHRhcmdldHMgLS0+CiA8dGFyZ2V0IG5hbWU9IndlYmNsaWVudC13YXItY29tbW9uIiBpZj0iaGFzV2ViY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLXdhci1jb21tb24iPgotCQk8IS0tcGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvLS0+Ci0JCTxwYXJhbSBuYW1lPSJ3YXIuZmlsZSIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KLQk8L2FudGNhbGw+CisgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLXdhci1jb21tb24iPgorICAgICAgICA8IS0tcGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvLS0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuZmlsZSIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KKyAgICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJwYWNrYWdlLXdhci13aXRob3V0LXN1bi54bWwiIHVubGVzcz0ic3VuLXdlYi54bWwiPgotCTxlY2hvIG1lc3NhZ2U9IlRoaXMgd2FyIGRvZXMgbm90IGNvbnRhaW4gc3VuLXdlYi54bWwiLz4KLQk8ZWNobyBtZXNzYWdlPSJteSBidWlsZCBjbGFzc2VzIGRpciBpczoke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotCTxkZWxldGUgZmlsZT0iJHt3YXIuZmlsZX0iLz4gIAotCTxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYiLz4KLQk8Y29weSBmaWxlPSIke3dlYi54bWx9IiAKLQkJdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9XRUItSU5GL3dlYi54bWwiLz4KLQk8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyB3YXIgZmlsZSAke3dhci5maWxlfSIvPgotCTwhLS1qYXIgamFyZmlsZT0iJHt3YXIuZmlsZX0iIGJhc2VkaXI9IiR7d2FyLmNsYXNzZXN9IiB1cGRhdGU9InRydWUiLS0+Ci0JPGphciBqYXJmaWxlPSIke3dhci5maWxlfSIgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAotCQl1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iJHt3ZWJjbGllbnQud2FyLmNsYXNzZXN9Ij4KLQkJPGZpbGVzZXQgZGlyPSIke2Jhc2VkaXJ9L3dlYiIgY2FzZXNlbnNpdGl2ZT0ieWVzIj4KLQkJCTxpbmNsdWRlIG5hbWU9IiouaHRtbCIvPgotCQkJPGluY2x1ZGUgbmFtZT0iKi5qc3AiLz4KLQkJCTxpbmNsdWRlIG5hbWU9IiouZ2lmIi8+Ci0JCQk8aW5jbHVkZSBuYW1lPSIqLmRvIi8+Ci0JCQk8ZXhjbHVkZSBuYW1lPSIqKi8qLmphdmEiLz4KLQkJPC9maWxlc2V0PgotCQk8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBjYXNlc2Vuc2l0aXZlPSJ0cnVlIj4KLQkJCTxpbmNsdWRlIG5hbWU9IldFQi1JTkYvd2ViLnhtbCIvPgotCQk8L2ZpbGVzZXQ+Ci0JPC9qYXI+ICAgICAgIAotCTxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgd2FyIGZpbGUgJHt3YXIuZmlsZX0iLz4KLQk8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vV0VCLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotCTxlY2hvIG1lc3NhZ2U9Im15IHdlYmNsaWVudCB3YXIgY2xhc3NlcyBhcmU6JHt3ZWJjbGllbnQud2FyLmNsYXNzZXN9Ii8+CisgICAgPGVjaG8gbWVzc2FnZT0iVGhpcyB3YXIgZG9lcyBub3QgY29udGFpbiBzdW4td2ViLnhtbCIvPgorICAgIDxlY2hvIG1lc3NhZ2U9Im15IGJ1aWxkIGNsYXNzZXMgZGlyIGlzOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CisgICAgPGRlbGV0ZSBmaWxlPSIke3dhci5maWxlfSIvPgorICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYiLz4KKyAgICA8Y29weSBmaWxlPSIke3dlYi54bWx9IgorICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYvd2ViLnhtbCIvPgorICAgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIHdhciBmaWxlICR7d2FyLmZpbGV9Ii8+CisgICAgPCEtLWphciBqYXJmaWxlPSIke3dhci5maWxlfSIgYmFzZWRpcj0iJHt3YXIuY2xhc3Nlc30iIHVwZGF0ZT0idHJ1ZSItLT4KKyAgICA8amFyIGphcmZpbGU9IiR7d2FyLmZpbGV9IiBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKKyAgICAgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IiR7d2ViY2xpZW50Lndhci5jbGFzc2VzfSI+CisgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfS93ZWIiIGNhc2VzZW5zaXRpdmU9InllcyI+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmh0bWwiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouanNwIi8+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmdpZiIvPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5kbyIvPgorICAgICAgICAgICAgPGV4Y2x1ZGUgbmFtZT0iKiovKi5qYXZhIi8+CisgICAgICAgIDwvZmlsZXNldD4KKyAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgY2FzZXNlbnNpdGl2ZT0idHJ1ZSI+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dlYi54bWwiLz4KKyAgICAgICAgPC9maWxlc2V0PgorICAgIDwvamFyPgorICAgIDxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgd2FyIGZpbGUgJHt3YXIuZmlsZX0iLz4KKyAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vV0VCLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgPGVjaG8gbWVzc2FnZT0ibXkgd2ViY2xpZW50IHdhciBjbGFzc2VzIGFyZToke3dlYmNsaWVudC53YXIuY2xhc3Nlc30iLz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InBhY2thZ2Utd2FyLWNvbW1vbiI+CkBAIC0xNzIsNTggKzE3Miw1OCBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0icGFja2FnZS13YXItd2l0aC1zdW4ueG1sIiBpZj0ic3VuLXdlYi54bWwiPgotCTxlY2hvIG1lc3NhZ2U9Im15IGJ1aWxkIGNsYXNzZXMgZGlyIGlzOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0JPGRlbGV0ZSBmaWxlPSIke3dhci5maWxlfSIvPgotCTxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcCIvPgotCTxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GIi8+Ci0JPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvY2xhc3NlcyIvPgotCTxjb3B5IGZpbGU9IiR7c3VuLXdlYi54bWx9IgotCQl0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3N1bi13ZWIueG1sIiAKLQkJZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0JPGNvcHkgZmlsZT0iJHt3ZWJzZXJ2aWNlcy54bWx9IgotCQl0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dlYnNlcnZpY2VzLnhtbCIKLQkJZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0JPGNvcHkgZmlsZT0iJHttYXBwaW5nZmlsZS5sb2NhdGlvbn0vJHttYXBwaW5nZmlsZS5uYW1lfSIKLQkJdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvJHttYXBwaW5nZmlsZS5uYW1lfSIKLQkJZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0JPGNvcHkgZmlsZT0iJHt3c2RsZmlsZS5sb2NhdGlvbn0vJHt3c2RsZmlsZS5uYW1lfSIKLQkJdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93c2RsLyR7d3NkbGZpbGUubmFtZX0iCi0JCWZhaWxvbmVycm9yPSJmYWxzZSIvPgotCTxjb3B5IGZpbGU9IiR7d2ViLnhtbH0iCi0JCXRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd2ViLnhtbCIvPgotCTxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9jbGFzc2VzIj4KLQkJPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+Ci0JCQk8aW5jbHVkZSBuYW1lPSIke3dhci5jbGFzc2VzfSIvPgotCQk8L2ZpbGVzZXQ+Ci0JPC9jb3B5PgotCTxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIHdhciBmaWxlICR7d2FyLmZpbGV9Ii8+Ci0JPGphciBqYXJmaWxlPSIke3dhci5maWxlfSIgdXBkYXRlPSJ0cnVlIj4KLQkJPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiIGNhc2VzZW5zaXRpdmU9InllcyI+Ci0JCQk8aW5jbHVkZSBuYW1lPSIqKi8qY2xhc3MqIi8+Ci0JCTwvZmlsZXNldD4KLQkJPGZpbGVzZXQgZGlyPSIke2Jhc2VkaXJ9L3dlYiIgY2FzZXNlbnNpdGl2ZT0ieWVzIj4KLQkJCTxpbmNsdWRlIG5hbWU9IioqLyouaHRtbCIvPgotCQkJPGluY2x1ZGUgbmFtZT0iKiovKi5qc3AiLz4KLQkJCTxpbmNsdWRlIG5hbWU9IioqLyouZ2lmIi8+Ci0JCQk8aW5jbHVkZSBuYW1lPSIqKi8qLmRvIi8+Ci0JCQk8ZXhjbHVkZSBuYW1lPSIqKi8qLmphdmEsKiovKi54bWwsKiovKi5wcm9wZXJ0aWVzIi8+Ci0JCTwvZmlsZXNldD4KLQkJPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvIiBjYXNlc2Vuc2l0aXZlPSJ0cnVlIj4KLQkJCTxpbmNsdWRlIG5hbWU9IldFQi1JTkYvd2ViLnhtbCIvPgotCQkJPGluY2x1ZGUgbmFtZT0iV0VCLUlORi9zdW4td2ViLnhtbCIvPgotCQkJPGluY2x1ZGUgbmFtZT0iV0VCLUlORi93ZWJzZXJ2aWNlcy54bWwiLz4KLQkJCTxpbmNsdWRlIG5hbWU9IldFQi1JTkYvd3NkbC8ke3dzZGxmaWxlLm5hbWV9Ii8+Ci0JCQk8aW5jbHVkZSBuYW1lPSIke21hcHBpbmdmaWxlLm5hbWV9Ii8+Ci0JCTwvZmlsZXNldD4KLQk8L2phcj4KLQk8ZWNobyBtZXNzYWdlPSJjcmVhdGVkIHdhciBmaWxlICR7d2FyLmZpbGV9Ii8+Ci0JPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLQk8ZWNobyBtZXNzYWdlPSJteSB3ZWJjbGllbnQgd2FyIGNsYXNzZXMgYXJlOiR7d2ViY2xpZW50Lndhci5jbGFzc2VzfSIvPgorICAgIDxlY2hvIG1lc3NhZ2U9Im15IGJ1aWxkIGNsYXNzZXMgZGlyIGlzOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CisgICAgPGRlbGV0ZSBmaWxlPSIke3dhci5maWxlfSIvPgorICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcCIvPgorICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GIi8+CisgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvY2xhc3NlcyIvPgorICAgIDxjb3B5IGZpbGU9IiR7c3VuLXdlYi54bWx9IgorICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3N1bi13ZWIueG1sIgorICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICA8Y29weSBmaWxlPSIke3dlYnNlcnZpY2VzLnhtbH0iCisgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd2Vic2VydmljZXMueG1sIgorICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICA8Y29weSBmaWxlPSIke21hcHBpbmdmaWxlLmxvY2F0aW9ufS8ke21hcHBpbmdmaWxlLm5hbWV9IgorICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC8ke21hcHBpbmdmaWxlLm5hbWV9IgorICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICA8Y29weSBmaWxlPSIke3dzZGxmaWxlLmxvY2F0aW9ufS8ke3dzZGxmaWxlLm5hbWV9IgorICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dzZGwvJHt3c2RsZmlsZS5uYW1lfSIKKyAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgPGNvcHkgZmlsZT0iJHt3ZWIueG1sfSIKKyAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93ZWIueG1sIi8+CisgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMiPgorICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiR7d2FyLmNsYXNzZXN9Ii8+CisgICAgICAgIDwvZmlsZXNldD4KKyAgICA8L2NvcHk+CisgICAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgd2FyIGZpbGUgJHt3YXIuZmlsZX0iLz4KKyAgICA8amFyIGphcmZpbGU9IiR7d2FyLmZpbGV9IiB1cGRhdGU9InRydWUiPgorICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcCIgY2FzZXNlbnNpdGl2ZT0ieWVzIj4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLypjbGFzcyoiLz4KKyAgICAgICAgPC9maWxlc2V0PgorICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0vd2ViIiBjYXNlc2Vuc2l0aXZlPSJ5ZXMiPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5odG1sIi8+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmpzcCIvPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5naWYiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouZG8iLz4KKyAgICAgICAgICAgIDxleGNsdWRlIG5hbWU9IioqLyouamF2YSwqKi8qLnhtbCwqKi8qLnByb3BlcnRpZXMiLz4KKyAgICAgICAgPC9maWxlc2V0PgorICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC8iIGNhc2VzZW5zaXRpdmU9InRydWUiPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iV0VCLUlORi93ZWIueG1sIi8+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3N1bi13ZWIueG1sIi8+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dlYnNlcnZpY2VzLnhtbCIvPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iV0VCLUlORi93c2RsLyR7d3NkbGZpbGUubmFtZX0iLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiR7bWFwcGluZ2ZpbGUubmFtZX0iLz4KKyAgICAgICAgPC9maWxlc2V0PgorICAgIDwvamFyPgorICAgIDxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgd2FyIGZpbGUgJHt3YXIuZmlsZX0iLz4KKyAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgIDxlY2hvIG1lc3NhZ2U9Im15IHdlYmNsaWVudCB3YXIgY2xhc3NlcyBhcmU6JHt3ZWJjbGllbnQud2FyLmNsYXNzZXN9Ii8+CiA8L3RhcmdldD4KIAogPCEtLSA9PT09PSBwYWNrYWdlIGVqYiBqYXIgPT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9InBhY2thZ2UtZWpiamFyLWNvbW1vbiI+Ci0JPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CisgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgICAgPGRlbGV0ZSBmaWxlPSIke2VqYi5qYXJ9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICA8ZWNobyBtZXNzYWdlPSJzcWUtY29tbW9uLnhtbDogR2VuZXJhdGluZyBlamItamFyIGluc2lkZSBidWlsZCBkaXJlY3RvcnkiLz4KICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgpAQCAtMjMyLDkgKzIzMiw5IEBACiAgICAgPGNvcHkgZmlsZT0iJHtzdW4tZWpiLWphci54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1lamItamFyLnhtbCIvPgogCiAgICAgPCEtLSBvcHRpb25hbCBmaWxlcyAtLT4KLSAgICA8Y29weSBmaWxlPSIke3N1bi1jbXAtbWFwcGluZ3MueG1sfSIgCisgICAgPGNvcHkgZmlsZT0iJHtzdW4tY21wLW1hcHBpbmdzLnhtbH0iCiAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWNtcC1tYXBwaW5ncy54bWwiCi0JCWZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgIDxjb3B5IGZpbGU9IiR7ZGJzY2hlbWF9IiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgPGNvcHkgZmlsZT0iJHttYXBwaW5nLnhtbH0iIHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICA8Y29weSBmaWxlPSIke3dlYnNlcnZpY2VzLnhtbH0iIHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CkBAIC0yNTAsNyArMjUwLDcgQEAKICAgIDwvamFyPgogCiAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotPC90YXJnZXQ+ICAKKzwvdGFyZ2V0PgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIAogPCEtLSBhcHBjbGllbnQgcGFja2FnZSAtLT4KQEAgLTI1OSwyMCArMjU5LDIwIEBACiAgICAgPGRlbGV0ZSBmaWxlPSIke2FwcGNsaWVudC5qYXJ9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICA8ZWNobyBtZXNzYWdlPSJzcWUtY29tbW9uLnhtbDogR2VuZXJhdGluZyBhcHBjbGllbnQtamFyIGluIGJ1aWxkIGRpciIvPgogICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+Ci0gICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgCi0JCXRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9IiAKLQkJdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotICAgIDxqYXIgamFyZmlsZT0iJHthcHBjbGllbnQuamFyfSIgYmFzZWRpcj0iJHthcHBjbGllbnRqYXIuZmlsZXN9IiAKLSAgICAgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IiR7YXBwY2xpZW50amFyLmNsYXNzZXN9IiAKLSAgICAgICAgbWFuaWZlc3Q9Ii4vY2xpZW50L01BTklGRVNULk1GIj4gICAgICAgICAKKyAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLWNsaWVudC54bWx9IgorICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKyAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSIKKyAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorICAgIDxqYXIgamFyZmlsZT0iJHthcHBjbGllbnQuamFyfSIgYmFzZWRpcj0iJHthcHBjbGllbnRqYXIuZmlsZXN9IgorICAgICAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iJHthcHBjbGllbnRqYXIuY2xhc3Nlc30iCisgICAgICAgIG1hbmlmZXN0PSIuL2NsaWVudC9NQU5JRkVTVC5NRiI+CiAgICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIj4KICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLSAgICAgIAkgICAgPC9tZXRhaW5mPgotCTwvamFyPiAgICAgICAKLQk8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotPC90YXJnZXQ+IAorICAgICAgICAgICAgICA8L21ldGFpbmY+CisgICAgPC9qYXI+CisgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKzwvdGFyZ2V0PgogCiA8IS0tICBlamIgamFyIHBhY2thZ2VyIC0tPgogPHRhcmdldCBuYW1lPSJlamItamFyLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMjgxLDI4ICsyODEsMjggQEAKICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJlamIuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIvPgogICAgIDwvYW50Y2FsbD4KLTwvdGFyZ2V0PiAgICAgCis8L3RhcmdldD4KIAogPCEtLSAgYXBwY2xpZW50IGphciBjcmVhdGUgLS0+CiA8dGFyZ2V0IG5hbWU9ImFwcGNsaWVudC1qYXItY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIKICAgICAgICAgICAgIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuamFyIgogICAgICAgICAgICAgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KICAgICA8L2FudGNhbGw+Ci08L3RhcmdldD4gCis8L3RhcmdldD4KIAogPCEtLSAgZWFyIC0tPgogPHRhcmdldCBuYW1lPSJidWlsZC1lYXItY29tbW9uIiBkZXBlbmRzPSJmaXhGaWxlcyxlamItamFyLWNvbW1vbixhcHBjbGllbnQtamFyLWNvbW1vbix3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgIAotICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIAotICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiIAotICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIAorICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CisgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIKKyAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIgorICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIKICAgICAgICAgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgpAQCAtMzEyLDE4ICszMTIsMTggQEAKICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfS9saWIiIGluY2x1ZGVzPSJyZXBvcnRlci5qYXIiLz4KLSAgICA8L2Vhcj4gICAgICAgIAorICAgIDwvZWFyPgogPC90YXJnZXQ+CiAKIDwhLS0gIGVhciAoV2l0aG91dCBkZXBlbmRlbmNpZXMpIC0tPgogPHRhcmdldCBuYW1lPSJlYXItY29tbW9uIiBkZXBlbmRzPSJmaXhGaWxlcyxpbml0LWNvbW1vbiI+CiAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgICAKLSAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiAKLSAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAKLSAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiAKKyAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgorICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iCisgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIKKyAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiCiAgICAgICAgIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KQEAgLTMzMywyMCArMzMzLDIwIEBACiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0vbGliIiBpbmNsdWRlcz0icmVwb3J0ZXIuamFyIi8+Ci0gICAgPC9lYXI+ICAgICAgICAKKyAgICA8L2Vhcj4KIDwvdGFyZ2V0PgogCiA8IS0tICBhc2FkbWluIGNvbW1vbiB0YXJnZXQgLS0+CiA8dGFyZ2V0IG5hbWU9ImFzYWRtaW4tY29tbW9uIj4KICAgPGVjaG8gbWVzc2FnZT0iRG9pbmcgYWRtaW4gdGFzayAke2FkbWluLmNvbW1hbmR9Ii8+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KLSAgICAgICAgPGFyZyBsaW5lPSIke2FkbWluLmNvbW1hbmR9ICR7YXMucHJvcHN9ICR7b3BlcmFuZC5wcm9wc30iIC8+ICAgICAgICAKKyAgICAgICAgPGFyZyBsaW5lPSIke2FkbWluLmNvbW1hbmR9ICR7YXMucHJvcHN9ICR7b3BlcmFuZC5wcm9wc30iIC8+CiAgICAgPC9leGVjPgogPC90YXJnZXQ+CiAKIDwhLS0gIHJlY29uZmlnIHRoZSBBcHBTZXJ2ICAtLT4KIDx0YXJnZXQgbmFtZT0icmVjb25maWctY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPGVjaG8gbWVzc2FnZT0iUmVjb25maWcgaGFzIGJlZW4gZGVwcmVjYXRlZC4gTm8gQWN0aW9uIHdpbGwgYmUgdGFrZW4gYnkgdGhlIEFwcHNlcnZlciAhISIvPgorICAgIDxlY2hvIG1lc3NhZ2U9IlJlY29uZmlnIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIE5vIEFjdGlvbiB3aWxsIGJlIHRha2VuIGJ5IHRoZSBBcHBzZXJ2ZXIgISEiLz4KIDwvdGFyZ2V0PgogCiAKQEAgLTM2Myw3ICszNjMsNyBAQAogICAgICAgICA8YXJnIGxpbmU9IiR7dXNlcn0iLz4KICAgICA8L2V4ZWM+CiA8L3RhcmdldD4KLSAgICAgCisKIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXVzZXItY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiA8ZWNobyBtZXNzYWdlPSJEZWxldGluZyB1c2VyICR7dXNlcn0gaW4gZmlsZSByZWFsbSIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CkBAIC0zNzQsMTYgKzM3NCwxNiBAQAogICAgICAgICA8YXJnIGxpbmU9IiR7dXNlcn0iLz4KICAgICA8L2V4ZWM+CiA8L3RhcmdldD4KLSAKKwogPCEtLSAgY3JlYXRlIEpEQkMgY29ubmVjdGlvbiBwb29sICAtLT4KLTx0YXJnZXQgbmFtZT0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+IAorPHRhcmdldCBuYW1lPSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgotICAgICAgICA8YXJnIGxpbmU9ImNyZWF0ZS1qZGJjLWNvbm5lY3Rpb24tcG9vbCIvPiAgICAgICAgCi0gICAgICAgIDxhcmcgbGluZT0iLS1kYXRhc291cmNlY2xhc3NuYW1lICR7ZGIuY2xhc3N9Ii8+ICAgICAgICAKLSAgICAgICAgPGFyZyBsaW5lPSItLXJlc3R5cGUgJHtqZGJjLnJlc291cmNlLnR5cGV9Ii8+ICAgICAgICAKKyAgICAgICAgPGFyZyBsaW5lPSJjcmVhdGUtamRiYy1jb25uZWN0aW9uLXBvb2wiLz4KKyAgICAgICAgPGFyZyBsaW5lPSItLWRhdGFzb3VyY2VjbGFzc25hbWUgJHtkYi5jbGFzc30iLz4KKyAgICAgICAgPGFyZyBsaW5lPSItLXJlc3R5cGUgJHtqZGJjLnJlc291cmNlLnR5cGV9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgotICAgICAgICA8YXJnIGxpbmU9IiR7amRiYy5jb25wb29sLm5hbWV9Ii8+ICAgICAgICAKKyAgICAgICAgPGFyZyBsaW5lPSIke2pkYmMuY29ucG9vbC5uYW1lfSIvPgogICAgIDwvZXhlYz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC1wb29sLXByb3BzIi8+CiA8L3RhcmdldD4KQEAgLTQwMyw3ICs0MDMsNyBAQAogICAgIDxhcmcgbGluZT0iZG9tYWluLnJlc291cmNlcy5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke2pkYmMuY29ucG9vbC5uYW1lfS5wcm9wZXJ0eS5QYXNzd29yZD0ke2RiLnB3ZH0iLz4KICAgPC9leGVjPgogCi0gIDxhbnRjYWxsIHRhcmdldD0ic2V0LSR7ZGIudHlwZX0tY29ubnBvb2wtcHJvcHMiLz4gCisgIDxhbnRjYWxsIHRhcmdldD0ic2V0LSR7ZGIudHlwZX0tY29ubnBvb2wtcHJvcHMiLz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InNldC1kZXJieS1jb25ucG9vbC1wcm9wcyI+CkBAIC00NzQsMTMgKzQ3NCwxMyBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0ic2V0LXN5YmFzZS1jb25ucG9vbC1wcm9wcy1jb21tb24iIHVubGVzcz0iZGF0YWRpcmVjdCI+Ci0gIDxhbnRjYWxsIHRhcmdldD0ic2V0LW5vbi1kYjItdHlwZTItY29ubnBvb2wtcHJvcHMiLz4gCisgIDxhbnRjYWxsIHRhcmdldD0ic2V0LW5vbi1kYjItdHlwZTItY29ubnBvb2wtcHJvcHMiLz4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICA8YXJnIGxpbmU9InNldCIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICA8YXJnIGxpbmU9ImRvbWFpbi5yZXNvdXJjZXMuamRiYy1jb25uZWN0aW9uLXBvb2wuJHtqZGJjLmNvbnBvb2wubmFtZX0ucHJvcGVydHkuRGF0YWJhc2VOYW1lPSR7ZGIubmFtZX0iIC8+CiAgIDwvZXhlYz4KLTwvdGFyZ2V0PiAKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InNldC1vcmFjbGUtY29ubnBvb2wtcHJvcHMiPgogICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LWRhdGFkaXJlY3QtcG9vbC1wcm9wcyIvPgpAQCAtNDg4LDcgKzQ4OCw3IEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJzZXQtb3JhY2xlLWNvbm5wb29sLXByb3BzLWNvbW1vbiIgdW5sZXNzPSJkYXRhZGlyZWN0Ij4KLSAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtbm9uLWRiMi10eXBlMi1jb25ucG9vbC1wcm9wcyIvPiAKKyAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtbm9uLWRiMi10eXBlMi1jb25ucG9vbC1wcm9wcyIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgIDxhcmcgbGluZT0ic2V0Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgpAQCAtNTAwLDcgKzUwMCw3IEBACiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgIDxhcmcgbGluZT0iZG9tYWluLnJlc291cmNlcy5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke2pkYmMuY29ucG9vbC5uYW1lfS5wcm9wZXJ0eS51cmw9JHtkYi51cmx9IiAvPgogICA8L2V4ZWM+Ci0gIDwhLS0gaW5ldCBkcml2ZXIgcHJvcGVydHkgYWRkZWQgZm9yIGVuYWJsaW5nIENMT0IncyBpbiBvcmFjbGUgRGVlcGEgCisgIDwhLS0gaW5ldCBkcml2ZXIgcHJvcGVydHkgYWRkZWQgZm9yIGVuYWJsaW5nIENMT0IncyBpbiBvcmFjbGUgRGVlcGEKIFNpbmdoIDAxLzI3LzA0IC0tPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgIDxhcmcgbGluZT0ic2V0Ii8+CkBAIC01NDcsNyArNTQ3LDcgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InNldC1wb2ludGJhc2UtY29ubnBvb2wtcHJvcHMiPgotICA8YW50Y2FsbCB0YXJnZXQ9InNldC1ub24tZGIyLXR5cGUyLWNvbm5wb29sLXByb3BzIi8+IAorICA8YW50Y2FsbCB0YXJnZXQ9InNldC1ub24tZGIyLXR5cGUyLWNvbm5wb29sLXByb3BzIi8+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgPGFyZyBsaW5lPSJzZXQiLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CkBAIC01NjksNyArNTY5LDcgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InNldC1taWNyb3NvZnQtY29ubnBvb2wtcHJvcHMtY29tbW9uIj4KLSAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtbm9uLWRiMi10eXBlMi1jb25ucG9vbC1wcm9wcyIvPiAKKyAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtbm9uLWRiMi10eXBlMi1jb25ucG9vbC1wcm9wcyIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgIDxhcmcgbGluZT0ic2V0Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgpAQCAtNTgwLDcgKzU4MCw3IEBACiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgIDxhcmcgbGluZT0iZG9tYWluLnJlc291cmNlcy5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke2pkYmMuY29ucG9vbC5uYW1lfS5wcm9wZXJ0eS5kYXRhYmFzZU5hbWU9JHtkYi5uYW1lfSIgLz4KICAgPC9leGVjPgotPC90YXJnZXQ+IAorPC90YXJnZXQ+CiAKIDwhLS0gIGNyZWF0ZSBYQSBKREJDIGNvbm5lY3Rpb24gcG9vbCAgLS0+CiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLXhhLWNvbm5wb29sLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNjAzLDcgKzYwMyw3IEBACiAgICAgICA8YXJnIGxpbmU9ImRvbWFpbi5yZXNvdXJjZXMuamRiYy1jb25uZWN0aW9uLXBvb2wuJHtqZGJjLmNvbnBvb2wubmFtZX0ucHJvcGVydHkuUGFzc3dvcmQ9JHtkYi5wd2R9Ii8+CiAgICAgPC9leGVjPgogCi0gICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtJHtkYi50eXBlfS1jb25ucG9vbC1wcm9wcyIvPiAKKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC0ke2RiLnR5cGV9LWNvbm5wb29sLXByb3BzIi8+CiA8L3RhcmdldD4KIAogPCEtLSAgZGVsZXRlIEpEQkMgY29ubmVjdGlvbi1wb29sICAtLT4KQEAgLTc1MCwxMCArNzUwLDEwIEBACiAKIDwhLS0gZHJvcCBhbGwgdGFibGVzIGFzIHBhcnQgb2YgY2xlYW51cCAtLT4KIDx0YXJnZXQgbmFtZT0iZHJvcC1zcWUtYWxsdGFibGVzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICA8ZWNobyBtZXNzYWdlPSJEcm9waW5nIGFsbCB0YWJsZXMuLi5leGVjdXRpbmcgYWxsIGRyb3BfeHh4LnNxbCAKKyAgIDxlY2hvIG1lc3NhZ2U9IkRyb3BpbmcgYWxsIHRhYmxlcy4uLmV4ZWN1dGluZyBhbGwgZHJvcF94eHguc3FsCiBmaWxlcyIvPgogICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJzcWwuZmlsZS50eXBlIiB2YWx1ZT0iZHJvcCIvPgorICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZS50eXBlIiB2YWx1ZT0iZHJvcCIvPgogICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+CiAKQEAgLTg0MCw4ICs4NDAsOCBAQAogICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtdW5peC1jbGFzc3BhdGgtc3VmZml4Ii8+CiA8L3RhcmdldD4KIAotPHRhcmdldCBuYW1lPSJzZXQtdW5peC1jbGFzc3BhdGgtc3VmZml4IiAKLQlkZXBlbmRzPSJpbml0LWNvbW1vbiIgaWY9ImlzVW5peCI+Cis8dGFyZ2V0IG5hbWU9InNldC11bml4LWNsYXNzcGF0aC1zdWZmaXgiCisgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJpc1VuaXgiPgogICAgICAgICA8IS0tIEdldCBjbGFzc3BhdGgtc3VmZml4IC0tPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiCiAgICAgICAgICAgb3V0cHV0PSIke2NsYXNzcGF0aHN1ZmZpeC5maWxlfSI+CkBAIC04NjIsOCArODYyLDggQEAKICAgICAgICAgPCEtLSA8YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPiAtLT4KIDwvdGFyZ2V0PgogCi08dGFyZ2V0IG5hbWU9InNldC13aW4tY2xhc3NwYXRoLXN1ZmZpeCIgCi0JZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJpc1dpbmRvd3MiPgorPHRhcmdldCBuYW1lPSJzZXQtd2luLWNsYXNzcGF0aC1zdWZmaXgiCisgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJpc1dpbmRvd3MiPgogCiAgICAgICAgIDwhLS0gR2V0IGNsYXNzcGF0aC1zdWZmaXggLS0+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSIKQEAgLTg4Nyw4ICs4ODcsOCBAQAogPC90YXJnZXQ+CiAKIDwhLS0gIGNyZWF0ZS9kZWxldGUgQ29ubmVjdG9yIGNvbm5lY3Rpb24gcG9vbCAgLS0+Ci08dGFyZ2V0IG5hbWU9ImNyZWF0ZS1jb25uZWN0b3ItY29ubnBvb2wtY29tbW9uIiAKLQlkZXBlbmRzPSJpbml0LWNvbW1vbiwgY3JlYXRlLWNvbm5lY3Rvci1jb25ucG9vbCIvPgorPHRhcmdldCBuYW1lPSJjcmVhdGUtY29ubmVjdG9yLWNvbm5wb29sLWNvbW1vbiIKKyAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiwgY3JlYXRlLWNvbm5lY3Rvci1jb25ucG9vbCIvPgogCiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1jb25uZWN0b3ItY29ubnBvb2wiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KQEAgLTkwNyw3ICs5MDcsNyBAQAogICAgIDxhcmcgbGluZT0iZGVsZXRlLWNvbm5lY3Rvci1jb25uZWN0aW9uLXBvb2wiLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgotICAgIDxhcmcgbGluZT0iJHtjb25uZWN0b3IuY29ucG9vbC5uYW1lfSIvPiAgCisgICAgPGFyZyBsaW5lPSIke2Nvbm5lY3Rvci5jb25wb29sLm5hbWV9Ii8+CiAgIDwvZXhlYz4KIDwvdGFyZ2V0PgogCkBAIC0xMDE0LDcgKzEwMTQsNyBAQAogCiAKIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWptcy1yZXNvdXJjZS10b3BpYy1jb21tb24iIGlmPSJ0b3BpYyI+Ci0gIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIEpNUyByZXNvdXJjZSB3aXRoIG5hbWUgCisgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIEpNUyByZXNvdXJjZSB3aXRoIG5hbWUKICR7am1zLnJlc291cmNlLm5hbWV9Ii8+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgPGFyZyBsaW5lPSJjcmVhdGUtam1zZGVzdCIvPgpAQCAtMTA2MywxMSArMTA2MywxMSBAQAogPC90YXJnZXQ+CiAKIDwhLS0gIGRlcGxveSB0aGUgYXBwbGljYXRpb25zIGluIEFwcFNlcnYgIC0tPgotPHRhcmdldCBuYW1lPSJkZXBsb3ktY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+ICAgCis8dGFyZ2V0IG5hbWU9ImRlcGxveS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24tJHtleGVjdXRpb24ubW9kZX0iLz4KIDwvdGFyZ2V0PgogCi08dGFyZ2V0IG5hbWU9ImRlcGxveS1jb21tb24tcGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4gICAgICAKKzx0YXJnZXQgbmFtZT0iZGVwbG95LWNvbW1vbi1wZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgIDxhcmcgbGluZT0iZGVwbG95Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgpAQCAtMTA3Nyw3ICsxMDc3LDcgQEAKICAgPC9leGVjPgogPC90YXJnZXQ+CiAKLTx0YXJnZXQgbmFtZT0iZGVwbG95LWNvbW1vbi1lZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPiAgICAgIAorPHRhcmdldCBuYW1lPSJkZXBsb3ktY29tbW9uLWVlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGVjaG8gbWVzc2FnZT0iU28geW91IGFyZSB1c2luZyBFbnRlcnByaXNlIFZlcnNpb24gZWggPyIvPgogPHByb3BlcnR5IG5hbWU9ImRlcGxveWVkLmFwcCIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIvPgogCkBAIC0xMDkzLDcgKzEwOTMsNyBAQAogPCEtLSBkZXBsb3llZC5hcHAgZGVmYXVsdHMgdG8gJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIGRlZmluZWQgaW4gcHJvcGVydGllcy54bWwtLT4KICAgICA8YXJnIGxpbmU9IiR7ZGVwbG95ZWQuYXBwfSIvPgogICA8L2V4ZWM+Ci0gIDxlY2hvIG1lc3NhZ2U9IkRlcGxveW1lbnQgb24gdGFyZ2V0IHNlcnZlciAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSAKKyAgPGVjaG8gbWVzc2FnZT0iRGVwbG95bWVudCBvbiB0YXJnZXQgc2VydmVyICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9CiBzdWNjZXNzZnVsIi8+CiAKIDwvdGFyZ2V0PgpAQCAtMTEwMSw4ICsxMTAxLDggQEAKIAogPCEtLSBzdGFydCBjbXAgZGVwbG95L3VuZGVwbG95IHRhcmdldHMgLS0+CiAgICAgPCEtLSAgZGVwbG95IHRoZSBhcHBsaWNhdGlvbnMgaW4gamF2YTJEQiBmb3IgY3JlYXRldGFibGUgIC0tPgotICAgICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS1jb21tb24tY3JlYXRldGFibGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4gICAgICAKLSAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJ1c2luZyBqYXZhMkRCIHRhcmdldHMiLz4gICAKKyAgICAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktY29tbW9uLWNyZWF0ZXRhYmxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgICAgPGVjaG8gbWVzc2FnZT0idXNpbmcgamF2YTJEQiB0YXJnZXRzIi8+CiAgICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgICAgIDxhcmcgbGluZT0iZGVwbG95Ii8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CkBAIC0xMTEwLDIzICsxMTEwLDIzIEBACiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tcmV0cmlldmUgJHthc3NlbWJsZS5kaXJ9Ii8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tZGJ2ZW5kb3JuYW1lICR7ZGIudHlwZX0iLz4KLSAgICAgICAgICAgIDxhcmcgbGluZT0iLS1jcmVhdGV0YWJsZXM9dHJ1ZSIvPiAgICAgCi0gICAgICAgICAgICA8YXJnIGxpbmU9Ii0tdW5pcXVldGFibGVuYW1lcz10cnVlIi8+ICAKKyAgICAgICAgICAgIDxhcmcgbGluZT0iLS1jcmVhdGV0YWJsZXM9dHJ1ZSIvPgorICAgICAgICAgICAgPGFyZyBsaW5lPSItLXVuaXF1ZXRhYmxlbmFtZXM9dHJ1ZSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiLz4KICAgICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDwvdGFyZ2V0PgogCiAgICAgPCEtLSAgZGVwbG95IHRoZSBhcHBsaWNhdGlvbnMgaW4gamF2YTJEQiBmb3IgZHJvcGFuZGNyZWF0ZXRhYmxlICAtLT4KLSAgICAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktY29tbW9uLWRyb3BjcmVhdGV0YWJsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPiAgICAgICAgIAotICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9InVzaW5nIGphdmEyREIgdGFyZ2V0cyIvPiAgIAorICAgICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS1jb21tb24tZHJvcGNyZWF0ZXRhYmxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgICAgPGVjaG8gbWVzc2FnZT0idXNpbmcgamF2YTJEQiB0YXJnZXRzIi8+CiAgICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgICAgIDxhcmcgbGluZT0iZGVwbG95Ii8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tbmFtZSAke2FwcG5hbWV9QXBwIi8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tcmV0cmlldmUgJHthc3NlbWJsZS5kaXJ9Ii8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tZGJ2ZW5kb3JuYW1lICR7ZGIudHlwZX0iLz4KLSAgICAgICAgICAgIDxhcmcgbGluZT0iLS1kcm9wYW5kY3JlYXRldGFibGVzPXRydWUiLz4gICAgICAgIAotICAgICAgICAgICAgPGFyZyBsaW5lPSItLXVuaXF1ZXRhYmxlbmFtZXM9dHJ1ZSIvPiAgCisgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tZHJvcGFuZGNyZWF0ZXRhYmxlcz10cnVlIi8+CisgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tdW5pcXVldGFibGVuYW1lcz10cnVlIi8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIvPgogICAgICAgICAgIDwvZXhlYz4KQEAgLTExMzQsNyArMTEzNCw3IEBACiAKICAgICA8IS0tICB1bmRlcGxveSB0aGUgYXBwbGljYXRpb25zIGluIGphdmEyREIgZm9yIGRyb3B0YWJsZSAgLS0+CiAgICAgICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktY29tbW9uLWRyb3B0YWJsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9InVzaW5nIGphdmEyREIgdGFyZ2V0cyIvPiAgIAorICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9InVzaW5nIGphdmEyREIgdGFyZ2V0cyIvPgogICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlVuZGVwbG95aW5nICR7YXBwbmFtZX0uIi8+CiAgICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CiAgICAgICAgICAgICA8YXJnIGxpbmU9InVuZGVwbG95Ii8+CkBAIC0xMTQyLDkgKzExNDIsOSBAQAogICAgICAgICAgICAgPGFyZyBsaW5lPSItLXBhc3N3b3JkICR7YWRtaW4ucGFzc3dvcmR9Ii8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii0taG9zdCAke2FkbWluLmhvc3R9Ii8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tcG9ydCAke2FkbWluLnBvcnR9Ii8+Ci0gICAgICAgICAgICA8YXJnIGxpbmU9Ii0tZHJvcHRhYmxlcz10cnVlIi8+CQorICAgICAgICAgICAgPGFyZyBsaW5lPSItLWRyb3B0YWJsZXM9dHJ1ZSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgotICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FwcG5hbWV9QXBwIi8+CQorICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FwcG5hbWV9QXBwIi8+CiAgICAgICAgICAgPC9leGVjPgogICAgICAgICA8L3RhcmdldD4KIDwhLS0gZW5kIGNtcCB0YXJnZXRzIC0tPgpAQCAtMTE1OSwxMSArMTE1OSwxMSBAQAogICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9Ii0tcmV0cmlldmUgJHthc3NlbWJsZS5kaXJ9Ii8+CiAgIDwvZXhlYz4KLTwvdGFyZ2V0PiAgICAKKzwvdGFyZ2V0PgogCiA8IS0tICBkZXBsb3kvdW5kZXBsb3kgbW9kdWxlIGZpbGVzIC0tPgotPCEtLSAgCi0gICAgTm90ZTogU2V0ICJtb2R1bGVmaWxlIiBwYXJhbSB0byBmb2xsb3dpbmcgdmFsdWVzOiAKKzwhLS0KKyAgICBOb3RlOiBTZXQgIm1vZHVsZWZpbGUiIHBhcmFtIHRvIGZvbGxvd2luZyB2YWx1ZXM6CiAgICAgICAgICogPGFyY2hpdmVfbmFtZT4uPGphcnx3YXJ8cmFyPiAoIGZvciBkZXBsb3ktbW9kdWxlLWNvbW1vbikKICAgICAgICAgKiA8YXJjaGl2ZV9uYW1lPiAoZm9yIHVuZGVwbG95LW1vZHVsZS1jb21tb24pCiAgICAgICAgICogPGFyY2hpdmVfbmFtZT4gKGZvciBydW5jbGllbnQtbW9kdWxlLWNvbW1vbikKQEAgLTEyMjgsOCArMTIyOCw4IEBACiAgICAgICA8cGFyYW0gbmFtZT0idGVzdC5kZXNjcmlwdGlvbiIgdmFsdWU9IiR7dGVzdC5kZXNjcmlwdGlvbn0iLz4KICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+Ci0gICAKLSAgICAgCisKKwogPCEtLSAgZGVwbG95L3VuZGVwbG95IFJBUiBmaWxlcyAtLT4KIDx0YXJnZXQgbmFtZT0iZGVwbG95LXJhci1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nICR7cmFyZmlsZX0uIi8+CkBAIC0xMjQ5LDcgKzEyNDksNyBAQAogICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7dW5kZXBsb3lyYXJ9Ii8+CiAgIDwvZXhlYz4KLTwvdGFyZ2V0PiAgICAKKzwvdGFyZ2V0PgogCiA8IS0tIHNldHVwIFJBUiBjb25maWcgdmFsdWVzIGZvciBhbGwgaW5zdGFuY2VzIGluIGEgY2x1c3RlciAtLT4KIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWNsdXN0ZXItcmFyY29uZmlnIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC0xMjk0LDcgKzEyOTQsNyBAQAogICAgICAgICA8YXJnIGxpbmU9InVuZGVwbG95Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgotICAgICAgICA8YXJnIGxpbmU9IiR7YXBwbmFtZX1BcHAiLz4JCisgICAgICAgIDxhcmcgbGluZT0iJHthcHBuYW1lfUFwcCIvPgogICAgIDwvZXhlYz4KICAgICA8ZWNobyBtZXNzYWdlPSJjbWQgZXhlY3V0ZWQgZm9yICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiA8L3RhcmdldD4KQEAgLTEzNDAsMjcgKzEzNDAsMjcgQEAKIDx0YXJnZXQgbmFtZT0ic3RhcnRQQiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8ZWNobyBtZXNzYWdlPSJTdGFydGluZyBQb2ludGJhc2Ugc2VydmVycyIvPgogICA8cHJvcGVydHkgbmFtZT0ianZtLmFyZ3MiCi0gICAgICB2YWx1ZT0iLURkYXRhYmFzZS5ob21lPSR7ZGIucm9vdH0vZGF0YWJhc2VzIAorICAgICAgdmFsdWU9Ii1EZGF0YWJhc2UuaG9tZT0ke2RiLnJvb3R9L2RhdGFiYXNlcwogICAgICAgICAgIC1EcG9pbnRiYXNlLmluaT0ke2RiLnJvb3R9L3Rvb2xzL3NlcnZlcm9wdGlvbi9wb2ludGJhc2UuaW5pIi8+CiAgIDxwYXJhbGxlbD4KLSAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5wb2ludGJhc2UubmV0Lm5ldFNlcnZlciIgCisgICAgPGphdmEgY2xhc3NuYW1lPSJjb20ucG9pbnRiYXNlLm5ldC5uZXRTZXJ2ZXIiCiAgICAgICBjbGFzc3BhdGg9IiR7ZGIuY2xhc3NwYXRofSIgZmFpbG9uZXJyb3I9InRydWUiIGZvcms9InRydWUiPgogICAgICAgPGp2bWFyZyBsaW5lPSIke2p2bS5hcmdzfSIvPgogICAgICAgPGFyZyBsaW5lPSIvcG9ydDo5MDkyIi8+CiAgICAgPC9qYXZhPgotICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnBvaW50YmFzZS5uZXQubmV0U2VydmVyIiAKKyAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5wb2ludGJhc2UubmV0Lm5ldFNlcnZlciIKICAgICAgIGNsYXNzcGF0aD0iJHtkYi5jbGFzc3BhdGh9IiBmYWlsb25lcnJvcj0idHJ1ZSIgZm9yaz0idHJ1ZSI+CiAgICAgICA8anZtYXJnIGxpbmU9IiR7anZtLmFyZ3N9Ii8+CiAgICAgICA8YXJnIGxpbmU9Ii9wb3J0OjkwOTMiLz4KLSAgICA8L2phdmE+IAorICAgIDwvamF2YT4KIAogICAgIDwhLS0gcG9ydHMgOTA5NCBhbmQgOTA5NSBhcmUgYmVpbmcgdXNlZCBieSB0aGUgVG9tY2F0IGdyb3VwIC0tPgotICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnBvaW50YmFzZS5uZXQubmV0U2VydmVyIiAKKyAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5wb2ludGJhc2UubmV0Lm5ldFNlcnZlciIKICAgICAgIGNsYXNzcGF0aD0iJHtkYi5jbGFzc3BhdGh9IiBmYWlsb25lcnJvcj0idHJ1ZSIgZm9yaz0idHJ1ZSI+CiAgICAgICA8anZtYXJnIGxpbmU9IiR7anZtLmFyZ3N9Ii8+CiAgICAgICA8YXJnIGxpbmU9Ii9wb3J0OjkwOTQiLz4KICAgICA8L2phdmE+Ci0gICAgPGphdmEgY2xhc3NuYW1lPSJjb20ucG9pbnRiYXNlLm5ldC5uZXRTZXJ2ZXIiIAorICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnBvaW50YmFzZS5uZXQubmV0U2VydmVyIgogICAgICAgY2xhc3NwYXRoPSIke2RiLmNsYXNzcGF0aH0iIGZhaWxvbmVycm9yPSJ0cnVlIiBmb3JrPSJ0cnVlIj4KICAgICAgIDxqdm1hcmcgbGluZT0iJHtqdm0uYXJnc30iLz4KICAgICAgIDxhcmcgbGluZT0iL3BvcnQ6OTA5NSIvPgpAQCAtMTM3NCwyMSArMTM3NCwyMSBAQAogICA8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBQb2ludGJhc2UgRGF0YWJhc2VzIi8+CiAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICA8cGFyYWxsZWw+Ci0gICAgPGphdmEgY2xhc3NuYW1lPSJjb20ucG9pbnRiYXNlLnRvb2xzLnRvb2xzQ29tbWFuZGVyIiAKKyAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5wb2ludGJhc2UudG9vbHMudG9vbHNDb21tYW5kZXIiCiAgICAgICBjbGFzc3BhdGg9IiR7ZGIuY2xhc3NwYXRofSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgIDxhcmcgbGluZT0iJHtkYi5kcml2ZXJ9Ii8+CiAgICAgICA8YXJnIGxpbmU9ImpkYmM6cG9pbnRiYXNlOnNlcnZlcjovLyR7ZGIuaG9zdH06OTA5My9zcWUtc2FtcGxlcyxuZXciLz4KICAgICAgIDxhcmcgbGluZT0iJHtkYi51c2VyfSIvPgogICAgICAgPGFyZyBsaW5lPSIke2RiLnB3ZH0iLz4KICAgICA8L2phdmE+Ci0gICAgPGphdmEgY2xhc3NuYW1lPSJjb20ucG9pbnRiYXNlLnRvb2xzLnRvb2xzQ29tbWFuZGVyIiAKKyAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5wb2ludGJhc2UudG9vbHMudG9vbHNDb21tYW5kZXIiCiAgICAgICBjbGFzc3BhdGg9IiR7ZGIuY2xhc3NwYXRofSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgIDxhcmcgbGluZT0iJHtkYi5kcml2ZXJ9Ii8+CiAgICAgICA8YXJnIGxpbmU9ImpkYmM6cG9pbnRiYXNlOnNlcnZlcjovLyR7ZGIuaG9zdH06OTA5NC9BY3Rpdml0eURCLG5ldyIvPgogICAgICAgPGFyZyBsaW5lPSJQQlBVQkxJQyIvPgogICAgICAgPGFyZyBsaW5lPSJQQlBVQkxJQyIvPgogICAgIDwvamF2YT4KLSAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5wb2ludGJhc2UudG9vbHMudG9vbHNDb21tYW5kZXIiIAorICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnBvaW50YmFzZS50b29scy50b29sc0NvbW1hbmRlciIKICAgICAgIGNsYXNzcGF0aD0iJHtkYi5jbGFzc3BhdGh9IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgPGFyZyBsaW5lPSIke2RiLmRyaXZlcn0iLz4KICAgICAgIDxhcmcgbGluZT0iamRiYzpwb2ludGJhc2U6c2VydmVyOi8vJHtkYi5ob3N0fTo5MDk1L2FwcF9jZW50cmljX3Rlc3Rfc2VydmxldDJfNF93b3JrZmxvdyxuZXciLz4KQEAgLTEzOTcsNyArMTM5Nyw3IEBACiAgICAgPC9qYXZhPgogICA8L3BhcmFsbGVsPgogPC90YXJnZXQ+Ci0gICAgCisKIDx0YXJnZXQgbmFtZT0iY29weURyaXZlcnMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgPGVjaG8gbWVzc2FnZT0iZGIuZHJpdmVyLmRpcj0ke2RiLmRyaXZlci5kaXJ9Ii8+CiAgIDxlY2hvIG1lc3NhZ2U9ImRiLmRyaXZlcj0ke2RiLmRyaXZlcn0iLz4KQEAgLTE0MjQsNyArMTQyNCw3IEBACiAgICAgPHByb3BlcnR5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9qZGJjL2NvbmZpZy9vcmFjbGVfZGF0YWRpcmVjdC5wcm9wZXJ0aWVzIi8+CiA8L3RhcmdldD4KIAotPCEtLSB0aGlzIHRhcmdldCBjbGVhbnMgdXAgb3JhY2xlIHNjaGVtYSwgZHJvcHMgYWxsIHRhYmxlcyB1bmRlciBhIHVzZXIgCis8IS0tIHRoaXMgdGFyZ2V0IGNsZWFucyB1cCBvcmFjbGUgc2NoZW1hLCBkcm9wcyBhbGwgdGFibGVzIHVuZGVyIGEgdXNlcgogYW5kIGNyZWF0ZXMgYSBuZXcgb25lCiBBZGRlZCA4LzIxLzIwMDMgRGVlcGErU2FpbGFqYQogLS0+CkBAIC0xNDMyLDcgKzE0MzIsNyBAQAogICA8cHJvcGVydHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2pkYmMvY29uZmlnL29yYWNsZS5wcm9wZXJ0aWVzIi8+CiAgIDxzcWwgZHJpdmVyPSIke2RiLmRyaXZlcn0iIHVybD0iJHtkYi51cmx9IgogICAgIHVzZXJpZD0ic3lzdGVtIiBwYXNzd29yZD0ic3lzZGJhIgotICAgIG9uZXJyb3I9ImNvbnRpbnVlIiAKKyAgICBvbmVycm9yPSJjb250aW51ZSIKICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2pkYmNkcml2ZXJzL3Ntb3JhY2xlLmphciI+CiAgICAgZHJvcCB1c2VyICR7ZGIudXNlcn0gY2FzY2FkZTsKICAgICBjcmVhdGUgdXNlciAke2RiLnVzZXJ9IGlkZW50aWZpZWQgYnkgJHtkYi5wd2R9OwpAQCAtMTQ0MSw4ICsxNDQxLDggQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InJlY29uZmlnIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgPGVjaG8+IAotICAgICAgICBSZWNvbmZpZyBoYXMgYmVlbiBkZXByZWNhdGVkLiAKKyAgICA8ZWNobz4KKyAgICAgICAgUmVjb25maWcgaGFzIGJlZW4gZGVwcmVjYXRlZC4KICAgICAgICAgTm8gQWN0aW9uIHdpbGwgYmUgdGFrZW4gYnkgdGhlIEFwcHNlcnZlciAhISIvPgogICAgIDwvZWNobz4KIDwvdGFyZ2V0PgpAQCAtMTQ2MCw3ICsxNDYwLDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic3RvcFBCIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgaWY9ImlzVW5peCI+Ci0gICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnBvaW50YmFzZS50b29scy50b29sc0NvbW1hbmRlciIgCisgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnBvaW50YmFzZS50b29scy50b29sc0NvbW1hbmRlciIKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtkYi5jbGFzc3BhdGh9IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2RiLmRyaXZlcn0iLz4KICAgICAgICAgICAgIDxhcmcgbGluZT0iamRiYzpwb2ludGJhc2U6c2VydmVyOi8vJHthZG1pbi5ob3N0fTo5MDkyL3NxZS1zYW1wbGVzIi8+CkBAIC0xNDczLDcgKzE0NzMsNyBAQAogCiA8IS0tID09PT09PT0gcmVzdGFydCBzZXJ2ZXIgaW5zdGFuY2UgdGFyZ2V0cyA9PT09PT09IC0tPgogICAgIDx0YXJnZXQgbmFtZT0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAJIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uLSR7ZXhlY3V0aW9uLm1vZGV9Ii8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uLSR7ZXhlY3V0aW9uLm1vZGV9Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbi1lZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTUxNSw3ICsxNTE1LDcgQEAKICAgICA8YXJnIGxpbmU9Ii0tcG9ydCAke2FkbWluLnBvcnR9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2NsdXN0ZXIubmFtZX0iLz4KICAgPC9leGVjPgotICAKKwogICA8c2xlZXAgc2Vjb25kcz0iMzAiLz4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICA8YXJnIGxpbmU9InN0YXJ0LWNsdXN0ZXIiLz4KQEAgLTE1NDksNyArMTU0OSw3IEBACiA8L3RhcmdldD4KIAogICAgPHRhcmdldCBuYW1lPSJzdGFydC1kb21haW4tZWUiIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0iaXNFRSI+Ci0JPGVjaG8gbWVzc2FnZT0ic3RhcnQtZG9tYWluIGlzIHJ1bm5pbmcgb24gU3RhbmRhcmQvRW50ZXJwcmlzZSBFZGl0aW9uLi4uIi8+CisgICAgPGVjaG8gbWVzc2FnZT0ic3RhcnQtZG9tYWluIGlzIHJ1bm5pbmcgb24gU3RhbmRhcmQvRW50ZXJwcmlzZSBFZGl0aW9uLi4uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0LWRvbWFpbi13aW4iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnQtZG9tYWluLXVuaXgiLz4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXRpbmcgZm9yIDkwIHNlY3MgdG8gbWFrZSBzdXJlIHNlcnZlciBwcm9wZXJseSBzdGFydGVkLi4uIi8+CkBAIC0xNjU1LDE1ICsxNjU1LDE1IEBACiAKIDx0YXJnZXQgbmFtZT0icnVuLWxvb3NlLXJlcG9ydGVyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDwhLS0KLSAgQ2F1dGlvbjogCisgIENhdXRpb246CiAgIHRoZSB0ZXN0IGRlc2NyaXB0aW9uIHNob3VsZCBiZSBwYXNzZWQgYXMgJ29uZScgd29yZCB3aXRoIG5vIHNwYWNlcwotICB0ZXN0bmFtZV9hbmRfc3RhdHVzIHBhcmFtZXRlciBjYW4gYmUgb3ZlcmxvYWRlZCBieSBzcGVjaWZ5aW5nIG11bHRpcGxlIAorICB0ZXN0bmFtZV9hbmRfc3RhdHVzIHBhcmFtZXRlciBjYW4gYmUgb3ZlcmxvYWRlZCBieSBzcGVjaWZ5aW5nIG11bHRpcGxlCiAgIHRlc3QgbmFtZXMgYW5kIHRoZWlyIHN0YXR1cyBpbiB0aGUgb3JkZXI6IHRlc3RuYW1lIHRlc3RzdGF0dXMKLSAgdGh1cywgcGFzc2luZyBzcGFjZSBzZXBlcmF0ZWQgYXJndW1lbnQgbWFrZXMgbW9yZSBzZW5zZSBoZXJlLiAKKyAgdGh1cywgcGFzc2luZyBzcGFjZSBzZXBlcmF0ZWQgYXJndW1lbnQgbWFrZXMgbW9yZSBzZW5zZSBoZXJlLgogICAtLT4KICAgPHByb3BlcnR5IG5hbWU9InRlc3RkZXNjIiB2YWx1ZT0iZGVmYXVsdCIvPgogICA8cHJvcGVydHkgbmFtZT0idGVzdG5hbWVfYW5kX3N0YXR1cyIgdmFsdWU9ImRlZmF1bHRuYW1lIGRpZF9ub3RfcnVuIi8+Ci0gIDxqYXZhIAorICA8amF2YQogICAgIGNsYXNzbmFtZT0iY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5Mb29zZVJlcG9ydGVyQ2xpZW50IgogICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiPgogICAgIDxhcmcgbGluZT0iJHt0ZXN0ZGVzY30iLz4KQEAgLTE2NzMsNyArMTY3Myw3IEBACiA8IS0tIEVuZCBSZXBvcnQgVGFyZ2V0cyAtLT4KIAogPHRhcmdldCBuYW1lPSJsaXN0LWNvbXBvbmVudHMtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgCisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIKICAgICAgICAgb3V0cHV0cHJvcGVydHk9ImNvbXBvbmVudHMtbGlzdCIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KIAogICAgICAgICA8YXJnIGxpbmU9Imxpc3QtY29tcG9uZW50cyIvPgpAQCAtMTY4Miw3ICsxNjgyLDcgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InNob3ctY29tcG9uZW50LXN0YXR1cy1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBvdXRwdXRwcm9wZXJ0eT0iY29tcG9uZW50LXN0YXR1cyIgCisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgb3V0cHV0cHJvcGVydHk9ImNvbXBvbmVudC1zdGF0dXMiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgIDxhcmcgbGluZT0ic2hvdy1jb21wb25lbnQtc3RhdHVzIi8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KQEAgLTE3MTgsMTMgKzE3MTgsMTMgQEAKIAogPCEtLSB1c2FnZSAgLS0+CiA8dGFyZ2V0IG5hbWU9InVzYWdlLWNvbW1vbiI+Ci0gIDxlY2hvPiAgICAgICAgIAorICA8ZWNobz4KICAgICBhbnQgY2xlYW4gICAgICAgICAgIFJlbW92ZSBhbGwgY2xhc3NlcyBmaWxlcwogICAgIGFudCBidWlsZCAgICAgICAgICAgQnVpbGQgdGhlIGFwcGxpY2F0aW9uCiAgICAgYW50IGRlcGxveSAgICAgICAgICBEZXBsb3kgdGhlIGVhciBmaWxlcyB0byBTMUFTCi0gICAgYW50IHJ1bgkgICAgICAgICAgICBSdW4gdGhlIGFwcGxpY2F0aW9uCisgICAgYW50IHJ1biAgICAgICAgICAgICAgICBSdW4gdGhlIGFwcGxpY2F0aW9uCiAgICAgYW50IHVuZGVwbG95ICAgICAgICBVbmRlcGxveSB0aGUgZWFyIGZpbGVzIGZyb20gUzFBUwotICAgIGFudCB1c2FnZSAgICAgICAgICAgRGlzcGxheSB0aGlzIG1lc3NhZ2UgICAgICAgICAgICAKKyAgICBhbnQgdXNhZ2UgICAgICAgICAgIERpc3BsYXkgdGhpcyBtZXNzYWdlCiAgIDwvZWNobz4KIDwvdGFyZ2V0PgogCkBAIC0xNzU3LDIxICsxNzU3LDIxIEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJzZXR1cFRpbWVyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgaWY9ImVlIj4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgotCTxhcmcgbGluZT0iY3JlYXRlLXJlc291cmNlLXJlZiIvPgotICAgIAk8YXJnIGxpbmU9Ii0tdXNlciAke2FkbWluLnVzZXJ9Ii8+Ci0JPGFyZyBsaW5lPSItLXBhc3N3b3JkICR7YWRtaW4ucGFzc3dvcmR9Ii8+Ci0JPGFyZyBsaW5lPSItLWhvc3QgJHthZG1pbi5ob3N0fSIvPgotCTxhcmcgbGluZT0iLS1wb3J0ICR7YWRtaW4ucG9ydH0iLz4KLQk8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+Ci0JPGFyZyBsaW5lPSIke2pkYmMucmVzb3VyY2UubmFtZX0iLz4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgorICAgIDxhcmcgbGluZT0iY3JlYXRlLXJlc291cmNlLXJlZiIvPgorICAgICAgICA8YXJnIGxpbmU9Ii0tdXNlciAke2FkbWluLnVzZXJ9Ii8+CisgICAgPGFyZyBsaW5lPSItLXBhc3N3b3JkICR7YWRtaW4ucGFzc3dvcmR9Ii8+CisgICAgPGFyZyBsaW5lPSItLWhvc3QgJHthZG1pbi5ob3N0fSIvPgorICAgIDxhcmcgbGluZT0iLS1wb3J0ICR7YWRtaW4ucG9ydH0iLz4KKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CisgICAgPGFyZyBsaW5lPSIke2pkYmMucmVzb3VyY2UubmFtZX0iLz4KIDwvZXhlYz4KIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+Ci0JPGFyZyBsaW5lPSJzZXQiLz4KLQk8YXJnIGxpbmU9Ii0tdXNlciAke2FkbWluLnVzZXJ9Ii8+Ci0JPGFyZyBsaW5lPSItLXBhc3N3b3JkICR7YWRtaW4ucGFzc3dvcmR9Ii8+Ci0JPGFyZyBsaW5lPSItLWhvc3QgJHthZG1pbi5ob3N0fSIvPgotCTxhcmcgbGluZT0iLS1wb3J0ICR7YWRtaW4ucG9ydH0iLz4KKyAgICA8YXJnIGxpbmU9InNldCIvPgorICAgIDxhcmcgbGluZT0iLS11c2VyICR7YWRtaW4udXNlcn0iLz4KKyAgICA8YXJnIGxpbmU9Ii0tcGFzc3dvcmQgJHthZG1pbi5wYXNzd29yZH0iLz4KKyAgICA8YXJnIGxpbmU9Ii0taG9zdCAke2FkbWluLmhvc3R9Ii8+CisgICAgPGFyZyBsaW5lPSItLXBvcnQgJHthZG1pbi5wb3J0fSIvPgogICAgIDxhcmcgbGluZT0iJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0tY29uZmlnLmVqYi1jb250YWluZXIuZWpiLXRpbWVyLXNlcnZpY2UudGltZXItZGF0YXNvdXJjZT0ke2pkYmMucmVzb3VyY2UubmFtZX0iLz4KIDwvZXhlYz4KIDxlY2hvIG1lc3NhZ2U9ImNyZWF0aW5nIHRpbWVyIHRhYmxlIGZyb20gJHtlbnYuUzFBU19IT01FfS9saWIvaW5zdGFsbC9lamJ0aW1lcl8ke2RiLnR5cGV9Ii8+CkBAIC0xODE0LDE3ICsxODE0LDE3IEBACiAKIAogPHRhcmdldCBuYW1lPSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+Ci0gIDxlY2hvIG1lc3NhZ2U9IkRvaW5nIGFkbWluIHRhc2sgJHthZG1pbi5jb21tYW5kfSAoaWdub3JlIGZhaWx1cmVzKSIgCisgIDxlY2hvIG1lc3NhZ2U9IkRvaW5nIGFkbWluIHRhc2sgJHthZG1pbi5jb21tYW5kfSAoaWdub3JlIGZhaWx1cmVzKSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxlY2hvIG1lc3NhZ2U9Ik9wZXJhbmQgJHtvcGVyYW5kLnByb3BzfSIgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxlY2hvIG1lc3NhZ2U9ImFzYWRtaW4gJHthZG1pbi5jb21tYW5kfSAke2FzLnByb3BzfSAke29wZXJhbmQucHJvcHN9Ii8+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KLSAgICAgICAgPGFyZyBsaW5lPSIke2FkbWluLmNvbW1hbmR9ICR7YXMucHJvcHN9ICR7b3BlcmFuZC5wcm9wc30iIC8+ICAgICAgICAKKyAgICAgICAgPGFyZyBsaW5lPSIke2FkbWluLmNvbW1hbmR9ICR7YXMucHJvcHN9ICR7b3BlcmFuZC5wcm9wc30iIC8+CiAgICAgPC9leGVjPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgotICA8ZWNobyBtZXNzYWdlPSJEb2luZyBhZG1pbiBiYXRjaCB0YXNrICR7YWRtaW4uY29tbWFuZH0gLS1maWxlIiAKKyAgPGVjaG8gbWVzc2FnZT0iRG9pbmcgYWRtaW4gYmF0Y2ggdGFzayAke2FkbWluLmNvbW1hbmR9IC0tZmlsZSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJ0cnVlIj4KICAgICAgPGVudiBrZXk9IkFTX0FETUlOX1BPUlQiIHZhbHVlPSIke2FkbWluLnBvcnR9Ii8+CkBAIC0xODMyLDggKzE4MzIsOCBAQAogICAgICA8ZW52IGtleT0iQVNfQURNSU5fUEFTU1dPUkQiIHZhbHVlPSIke2FkbWluLnBhc3N3b3JkfSIvPgogICAgICA8ZW52IGtleT0iQVNfQURNSU5fSE9TVCIgdmFsdWU9IiR7YWRtaW4uaG9zdH0iLz4KICAgICAgPGVudiBrZXk9IkFTX0FETUlOX0lOU1RBTkNFIiB2YWx1ZT0iJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KLSAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSAKLSAgICAgICAgICAgICAgICBtdWx0aW1vZGUgLS1maWxlICR7YXNhZG1pbi5maWxlfSIgLz4gICAgICAgIAorICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9CisgICAgICAgICAgICAgICAgbXVsdGltb2RlIC0tZmlsZSAke2FzYWRtaW4uZmlsZX0iIC8+CiAgIDwvZXhlYz4KIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbmZpZy9lZS1wcm9wZXJ0aWVzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29uZmlnL2VlLXByb3BlcnRpZXMueG1sCmluZGV4IDAxYTMyNDYuLjkxYWZjZWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29uZmlnL2VlLXByb3BlcnRpZXMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29uZmlnL2VlLXByb3BlcnRpZXMueG1sCkBAIC0xOCwyNiArMTgsMjYgQEAKIAogPHByb3BlcnR5IGVudmlyb25tZW50PSJlbnYiLz4KIAotPHRhcmdldCBuYW1lPSJpbml0LWNvbW1vbiIgCi0JZGVwZW5kcz0ic2V0ZGVmYXVsdG1vZGUsIHNldFRvb2xQcm9wZXJ0eSxzZXRTMUFTY2xhc3NQYXRoLHNldFMxQVM4MGNsYXNzUGF0aCxzZXRTMVdTY2xhc3NQYXRoLAotCQkJc2V0SldTRFBjbGFzc1BhdGgsc2V0VGltZVN0YW1wIj4KKzx0YXJnZXQgbmFtZT0iaW5pdC1jb21tb24iCisgICAgZGVwZW5kcz0ic2V0ZGVmYXVsdG1vZGUsIHNldFRvb2xQcm9wZXJ0eSxzZXRTMUFTY2xhc3NQYXRoLHNldFMxQVM4MGNsYXNzUGF0aCxzZXRTMVdTY2xhc3NQYXRoLAorICAgICAgICAgICAgc2V0SldTRFBjbGFzc1BhdGgsc2V0VGltZVN0YW1wIj4KIAogICAgIDxleGVjIGV4ZWN1dGFibGU9InVuYW1lIiBvdXRwdXRwcm9wZXJ0eT0iaG9zdG5hbWUiPgogICAgICAgIDxhcmcgbGluZT0iLW4iLz4KLSAgICA8L2V4ZWM+ICAgIAorICAgIDwvZXhlYz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSJ1bmFtZSIgb3V0cHV0cHJvcGVydHk9Im9zbmFtZSI+CiAgICAgICAgPGFyZyBsaW5lPSItcyIvPgogICAgIDwvZXhlYz4KLSAgICAKKwogICAgPHByb3BlcnR5IG5hbWU9InBlIiB2YWx1ZT0iUGxhdGZvcm0gRWRpdGlvbiBvZiBTMUFTIi8+CiAKIDwhLS0gQXBwc2VydiBwcm9wZXJ0aWVzIC0tPgogICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzcGF0aHN1ZmZpeC5maWxlIiB2YWx1ZT0iY2xhc3NwYXRoc3VmZml4LnR4dCIvPgogICAgPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogICAgPHByb3BlcnR5IG5hbWU9ImFwcHVzZXIiIHZhbHVlPSJqMmVlIi8+Ci0gICA8cHJvcGVydHkgbmFtZT0iYXBwcHdkIiB2YWx1ZT0iajJlZSIvPiAgIAorICAgPHByb3BlcnR5IG5hbWU9ImFwcHB3ZCIgdmFsdWU9ImoyZWUiLz4KICAgIDxwcm9wZXJ0eSBuYW1lPSJhdXRocmVhbG1uYW1lIiB2YWx1ZT0iZmlsZSIvPgotICAgPHByb3BlcnR5IG5hbWU9InNlcnZlcmluc3RhbmNlLm5hbWUiIHZhbHVlPSJ0ZXN0LXNlcnZlciIvPiAgCisgICA8cHJvcGVydHkgbmFtZT0ic2VydmVyaW5zdGFuY2UubmFtZSIgdmFsdWU9InRlc3Qtc2VydmVyIi8+CiAgICA8ZWNobyAgZmlsZT0iJHthZG1pbi5wYXNzd29yZC5maWxlfSIgIGFwcGVuZD0iZmFsc2UiLz4KICAgIDxwcm9wZXJ0eSBuYW1lPSJhcy5wcm9wcyIKICAgICAgdmFsdWU9Ii0tdXNlciAke2FkbWluLnVzZXJ9IC0tcGFzc3dvcmRmaWxlICR7YWRtaW4ucGFzc3dvcmQuZmlsZX0gLS1ob3N0ICR7YWRtaW4uaG9zdH0gLS1wb3J0ICR7YWRtaW4ucG9ydH0gLS1lY2hvPXRydWUgLS10ZXJzZT10cnVlIi8+CkBAIC01Miw3ICs1Miw3IEBACiAgICAgPHByb3BlcnR5IG5hbWU9Imptcy5mYWN0b3J5LnR5cGUiIHZhbHVlPSJqYWthcnRhLmptcy5RdWV1ZUNvbm5lY3Rpb25GYWN0b3J5Ii8+CiAgICAgPHByb3BlcnR5IG5hbWU9Imptcy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iam1zL1NhbXBsZVF1ZXVlIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9Imptcy5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamFrYXJ0YS5qbXMuUXVldWUiLz4KLSAgICA8cHJvcGVydHkgbmFtZT0iam1zLmZhY3RvcnkudHlwZSIgCisgICAgPHByb3BlcnR5IG5hbWU9Imptcy5mYWN0b3J5LnR5cGUiCiAgICAgICAgICAgICAgIHZhbHVlPSJqYWthcnRhLmptcy5RdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IiAvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJxdWV1ZS5wcm9wZXJ0eS5uYW1lIiB2YWx1ZT0iaW1xRGVzdGluYXRpb25OYW1lIiAvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJxdWV1ZS5wcm9wZXJ0eS52YWx1ZSIgdmFsdWU9IlNhbXBsZVF1ZXVlIiAvPgpAQCAtODEsNyArODEsNyBAQAogICAgIDxwcm9wZXJ0eSBuYW1lPSJtcWFkbWluLnBhc3N3b3JkIiB2YWx1ZT0iYWRtaW4iLz4KIAogICAgIDwhLS0gcG9pbnRiYXNlIHByb3BlcnRpZXMgLS0+Ci0gICAgPCEtLSBDaGFuZ2VkIHRvIGRlcmJ5IHByb3BlcnRpZXMgCisgICAgPCEtLSBDaGFuZ2VkIHRvIGRlcmJ5IHByb3BlcnRpZXMKICAgICA8cHJvcGVydHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2pkYmMvY29uZmlnL3BvaW50YmFzZS5wcm9wZXJ0aWVzIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImRiLnJvb3QiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L3BvaW50YmFzZSIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJkYi5jbGFzc3BhdGgiIHZhbHVlPSIke2RiLnJvb3R9L2xpYi9wYnRvb2xzLmphcjoke2RiLnJvb3R9L2xpYi9wYmNsaWVudC5qYXI6JHtkYi5yb290fS9saWIvcGJlbWJlZGRlZC5qYXIiLz4tLT4KQEAgLTkxLDcgKzkxLDcgQEAKIAogPCEtLSBUZXN0IEhhcm5lc3MgcHJvcGVydGllcyAtLT4KICAgICA8cHJvcGVydHkgbmFtZT0iZ2xhc3NmaXNoLWFjYy54bWwiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwiLz4KLSAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQuYmFzZS5kaXIiIAorICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZC5iYXNlLmRpciIKICAgICAgICAgdmFsdWU9IiR7ZW52LkFQU19IT01FfS9idWlsZC8ke2V4ZWN1dGlvbi5tb2RlfS8ke29zLmFyY2h9XyR7aG9zdG5hbWV9XyR7b3NuYW1lfS8ke21vZHVsZX0iLz4KICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSIke2J1aWxkLmJhc2UuZGlyfS9jbGFzc2VzIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlLmRpciIgdmFsdWU9IiR7YnVpbGQuYmFzZS5kaXJ9L2FyY2hpdmUiLz4KQEAgLTExNywxNCArMTE3LDE0IEBACiAgICAgPHByb3BlcnR5IG5hbWU9ImNvbXBvbmVudC5uYW1lIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCIvPgogCiAgICAgPHByb3BlcnR5IG5hbWU9InRlc3QuYmFzZSIgdmFsdWU9InBlIi8+Ci0gICAgPHByb3BlcnR5IG5hbWU9ImJhc2UucmVwb3J0LmRpciIgCi0JdmFsdWU9IiR7ZW52LkFQU19IT01FfS9yZXBvcnRzLyR7dGVzdC5iYXNlfS0ke2V4ZWN1dGlvbi5tb2RlfSIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJiYXNlLnJlcG9ydC5kaXIiCisgICAgdmFsdWU9IiR7ZW52LkFQU19IT01FfS9yZXBvcnRzLyR7dGVzdC5iYXNlfS0ke2V4ZWN1dGlvbi5tb2RlfSIvPgogPCEtLQotICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXN1bHRzLmdvbGRlbi5saXN0LmZpbGUiIAotCXZhbHVlPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQtY29uZmlnL3Jlc3VsdHNfYmFzZWxpbmUucHJvcGVydGllcyIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXN1bHRzLmdvbGRlbi5saXN0LmZpbGUiCisgICAgdmFsdWU9IiR7ZW52LkFQU19IT01FfS9idWlsZC1jb25maWcvcmVzdWx0c19iYXNlbGluZS5wcm9wZXJ0aWVzIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9InJlc3VsdHMuYW5hbHlzaXMuZmlsZSIgdmFsdWU9InRlc3RfYW5hbHlzaXMiLz4KLSAgICA8cHJvcGVydHkgbmFtZT0icmVzdWx0cy5saXN0LmZpbGUiIAotCXZhbHVlPSIke2Vudi5yUFNfSE9NRX0vYnVpbGQtY29uZmlnL3Jlc3VsdHMucHJvcGVydGllcyIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXN1bHRzLmxpc3QuZmlsZSIKKyAgICB2YWx1ZT0iJHtlbnYuclBTX0hPTUV9L2J1aWxkLWNvbmZpZy9yZXN1bHRzLnByb3BlcnRpZXMiLz4KICAgICA8cHJvcGVydHkgbmFtZT0icmVzdWx0cy5zdW1tYXJ5LmZpbGUiIHZhbHVlPSJzdW1tYXJ5cmVwb3J0Ii8+CiAtLT4KIDwhLS0gVGVzdCBIYXJuZXNzIHByb3BlcnRpZXMgZm9yIFdlYlRlc3QgPT09PT09PT09PT09IC0tPgpAQCAtMTUxLDggKzE1MSw4IEBACiAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0vbGliIiBpbmNsdWRlcz0iKiovKi5qYXIsKiovKi56aXAiLz4KICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFOVF9IT01FfS9saWIiIGluY2x1ZGVzPSIqLmphciIvPgogICA8L3BhdGg+Ci0gIDxwYXRoY29udmVydCBwYXRoc2VwPSI6IiAKLSAgICBwcm9wZXJ0eT0iczFhcy5jbGFzc3BhdGgiIAorICA8cGF0aGNvbnZlcnQgcGF0aHNlcD0iOiIKKyAgICBwcm9wZXJ0eT0iczFhcy5jbGFzc3BhdGgiCiAgICAgcmVmaWQ9InMxYXNfY2xhc3NwYXRoX2phcnMiLz4KIDwvdGFyZ2V0PgogCkBAIC0xNjksMTEgKzE2OSwxMSBAQAogCiA8dGFyZ2V0IG5hbWU9InNldFMxV1NjbGFzc1BhdGgiIGlmPSJpc1MxV1MiPgogICA8cGF0aCBpZD0iczF3c19jbGFzc3BhdGhfamFycyI+Ci0gICAgPGZpbGVzZXQgZGlyPSIke2Vudi5JV1NfU0VSVkVSX0hPTUV9L2Jpbi9odHRwcy9qYXIiIAorICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuSVdTX1NFUlZFUl9IT01FfS9iaW4vaHR0cHMvamFyIgogaW5jbHVkZXM9IiouamFyIi8+CiAgIDwvcGF0aD4KLSAgPHBhdGhjb252ZXJ0IHBhdGhzZXA9IjoiIAotICAgIHByb3BlcnR5PSJzMXdzLmNsYXNzcGF0aCIgCisgIDxwYXRoY29udmVydCBwYXRoc2VwPSI6IgorICAgIHByb3BlcnR5PSJzMXdzLmNsYXNzcGF0aCIKICAgICByZWZpZD0iczF3c19jbGFzc3BhdGhfamFycyIvPgogPC90YXJnZXQ+CiAKQEAgLTE4NywxMSArMTg3LDExIEBACiAgICAgcmVmaWQ9Imp3c2RwX2NsYXNzcGF0aF9qYXJzIi8+CiA8L3RhcmdldD4KIAotPHRhcmdldCBuYW1lPSJzZXRUb29sUHJvcGVydHkiIAorPHRhcmdldCBuYW1lPSJzZXRUb29sUHJvcGVydHkiCiAgIGRlcGVuZHM9InNldE9TQ29uZGl0aW9ucyxzZXRUb29sV2luLHNldFRvb2xVbml4Ij4KIDwvdGFyZ2V0PgogCi08dGFyZ2V0IG5hbWU9InNldE9TQ29uZGl0aW9ucyI+ICAKKzx0YXJnZXQgbmFtZT0ic2V0T1NDb25kaXRpb25zIj4KICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0iaXNVbml4Ij4KICAgICA8b3MgZmFtaWx5PSJ1bml4Ii8+CiAgIDwvY29uZGl0aW9uPgpAQCAtMjAwLDcgKzIwMCw3IEBACiAgIDwvY29uZGl0aW9uPgogPC90YXJnZXQ+CiAKLTx0YXJnZXQgbmFtZT0ic2V0VG9vbFdpbiIgaWY9ImlzV2luZG93cyI+ICAKKzx0YXJnZXQgbmFtZT0ic2V0VG9vbFdpbiIgaWY9ImlzV2luZG93cyI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJBUFBDTElFTlQiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hcHBjbGllbnQuYmF0Ii8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJBU0FETUlOIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXNhZG1pbi5iYXQiLz4KICAgPHByb3BlcnR5IG5hbWU9IklNUUNNRCIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vaW1xL2Jpbi9pbXFjbWQuZXhlIi8+CkBAIC0yMTgsNyArMjE4LDcgQEAKICAgPHByb3BlcnR5IG5hbWU9IldTQ09NUElMRSIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzY29tcGlsZS5iYXQiLz4KIDwvdGFyZ2V0PgogCi08dGFyZ2V0IG5hbWU9InNldFRvb2xVbml4IiBpZj0iaXNVbml4Ij4gIAorPHRhcmdldCBuYW1lPSJzZXRUb29sVW5peCIgaWY9ImlzVW5peCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJBUFBDTElFTlQiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hcHBjbGllbnQiLz4KICAgPHByb3BlcnR5IG5hbWU9IkFTQURNSU4iIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hc2FkbWluIi8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJJTVFDTUQiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2ltcS9iaW4vaW1xY21kIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbmZpZy9tYWlsLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29uZmlnL21haWwueG1sCmluZGV4IDY2YjdmZTUuLjRjYjMyZDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29uZmlnL21haWwueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29uZmlnL21haWwueG1sCkBAIC0yMiwxMSArMjIsMTEgQEAKIDxwcm9wZXJ0eSBuYW1lPSJtYWlsLmhvc3QiIHZhbHVlPSJoYTIxc2NhLW1haWwxLnNmYmF5LnN1bi5jb20iLz4KIDxwcm9wZXJ0eSBuYW1lPSJtYWNoaW5lLmNvbmZpZyIgdmFsdWU9ImRlZmF1bHRfJHtvcy5uYW1lfV8ke29zLmFyY2h9IiAvPgogPHRhcmdldCBuYW1lPSJtYWlsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPG1haWwgZnJvbT0iJHtyZXN1bHRzLm1haWxlcn0iIHRvbGlzdD0iJHtyZXN1bHRzLm1haWxlZX0iCi0JCXN1YmplY3Q9IlRlc3QgcmVzdWx0cyBmb3IgJHttYWNoaW5lLmNvbmZpZ30iCi0JCW1haWxob3N0PSIke21haWwuaG9zdH0iCi0JCW1lc3NhZ2U9IlllaCBsbyByZXN1bHRzLi4uIj4gICAgICAgICAgICAgICAgCi0JPGZpbGVzZXQgZGlyPSIke2Vudi5TUFNfSE9NRX0iICAKKyAgICA8bWFpbCBmcm9tPSIke3Jlc3VsdHMubWFpbGVyfSIgdG9saXN0PSIke3Jlc3VsdHMubWFpbGVlfSIKKyAgICAgICAgc3ViamVjdD0iVGVzdCByZXN1bHRzIGZvciAke21hY2hpbmUuY29uZmlnfSIKKyAgICAgICAgbWFpbGhvc3Q9IiR7bWFpbC5ob3N0fSIKKyAgICAgICAgbWVzc2FnZT0iWWVoIGxvIHJlc3VsdHMuLi4iPgorICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuU1BTX0hPTUV9IgogICAgICAgICBpbmNsdWRlcz0idGVzdF9yZXN1bHRzLmh0bWwiLz4KLQk8L21haWw+CisgICAgPC9tYWlsPgogPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5jcmVhdGlvbnJldHJ5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5jcmVhdGlvbnJldHJ5L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjFiMWZhZS4uODY1M2VmNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uY3JlYXRpb25yZXRyeS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmNyZWF0aW9ucmV0cnkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLWNvbm5lY3Rpb25jcmVhdGlvbnJldHJ5Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0icG9vbG5hbWUiIHZhbHVlPSJqZGJjLWNvbm5lY3Rpb25jcmVhdGlvbnJldHJ5Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5jcmVhdGlvbnJldHJ5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmNyZWF0aW9ucmV0cnkvYnVpbGQueG1sCmluZGV4IGRjMjUyMjAuLmMyZmQwODggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmNyZWF0aW9ucmV0cnkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmNyZWF0aW9ucmV0cnkvYnVpbGQueG1sCkBAIC0yMiw4ICsyMiw4IEBACiAgICAgICAgIDwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CiAgICAgICAgIDwhRU5USVRZIHRlc3Rwcm9wZXJ0aWVzIFNZU1RFTSAiLi9idWlsZC5wcm9wZXJ0aWVzIj4KICAgICAgICAgPCFFTlRJVFkgcnVuIFNZU1RFTSAiLi8uLi8uLi8uLi9jb25maWcvcnVuLnhtbCI+Ci0JPCFFTlRJVFkgamRiY3htbCBTWVNURU0gIi4vLi4vSmRiY0NvbW1vbi54bWwiPgotCTwhRU5USVRZIGpkYmNQcm9wcyBTWVNURU0gIi4vLi4vSmRiY0NvbW1vbi5wcm9wZXJ0aWVzIj4KKyAgICA8IUVOVElUWSBqZGJjeG1sIFNZU1RFTSAiLi8uLi9KZGJjQ29tbW9uLnhtbCI+CisgICAgPCFFTlRJVFkgamRiY1Byb3BzIFNZU1RFTSAiLi8uLi9KZGJjQ29tbW9uLnByb3BlcnRpZXMiPgogICAgICAgICBdPgogCiA8cHJvamVjdCBuYW1lPSJtaXgiIGRlZmF1bHQ9InVzYWdlIiBiYXNlZGlyPSIuIj4KQEAgLTcxLDEzICs3MSwxMyBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RvcC1kZXJieSIvPgogCi0JPHBhcmFsbGVsPgotICAgICAgICAJPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+Ci0JCTxzZXF1ZW50aWFsPgotCQkJPHNsZWVwIHNlY29uZHM9IjE1Ii8+Ci0JCQk8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0LWRlcmJ5Ii8+Ci0JCTwvc2VxdWVudGlhbD4KLQk8L3BhcmFsbGVsPgorICAgIDxwYXJhbGxlbD4KKyAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgorICAgICAgICA8c2VxdWVudGlhbD4KKyAgICAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxNSIvPgorICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydC1kZXJieSIvPgorICAgICAgICA8L3NlcXVlbnRpYWw+CisgICAgPC9wYXJhbGxlbD4KIAogICAgIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5jcmVhdGlvbnJldHJ5L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmNyZWF0aW9ucmV0cnkvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGRmZjA0NWEuLjdlYzM4ODAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmNyZWF0aW9ucmV0cnkvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmNyZWF0aW9ucmV0cnkvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zNiwxMiArMzYsMTIgQEAKICAgICAgICAgICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7CiAKICAgICAgICAgU2ltcGxlQk1QIGNvbnZhbEJNUCA9IGNvbnZhbEJNUEhvbWUuY3JlYXRlKCk7Ci0Jc3RhdC5hZGREZXNjcmlwdGlvbigiQ29ubmVjdGlvbiBDcmVhdGlvbiBSZXRyeSBUZXN0cyIpOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkNvbm5lY3Rpb24gQ3JlYXRpb24gUmV0cnkgVGVzdHMiKTsKIAogICAgICAgICBpZiAoY29udmFsQk1QLnRlc3QxKCkpIHsKLSAgICAgICAgCXN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICJ0ZXN0ICIsIHN0YXQuUEFTUyk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAidGVzdCAiLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAJc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgInRlc3QgIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICJ0ZXN0ICIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5jcmVhdGlvbnJldHJ5L2VqYi9TaW1wbGVCTVBCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5jcmVhdGlvbnJldHJ5L2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggY2QxZDg5OC4uNWQxYjQ2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uY3JlYXRpb25yZXRyeS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmNyZWF0aW9ucmV0cnkvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgIH0KIAogCi0gICAKKwogLyogR2V0IGEgc2luZ2xlIGNvbm5lY3Rpb24gYW5kIGNsb3NlIGl0ICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoKXsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmNyZWF0aW9ucmV0cnkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uY3JlYXRpb25yZXRyeS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZTQ5MTRmNi4uZjI1NjA3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uY3JlYXRpb25yZXRyeS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uY3JlYXRpb25yZXRyeS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmNyZWF0aW9ucmV0cnkvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmNyZWF0aW9ucmV0cnkvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA3MGQxZmNjLi5kODU0Yjk1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5jcmVhdGlvbnJldHJ5L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uY3JlYXRpb25yZXRyeS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uZWN0aW9uLXBvb2wtcGVyZi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uZWN0aW9uLXBvb2wtcGVyZi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQ5NTk4ODUuLjAyMWQ3NGMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmVjdGlvbi1wb29sLXBlcmYvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5lY3Rpb24tcG9vbC1wZXJmL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcC1zdGF0ZW1lbnR3cmFwcGVyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmVjdGlvbi1wb29sLXBlcmYvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uZWN0aW9uLXBvb2wtcGVyZi9idWlsZC54bWwKaW5kZXggMjdkNThlYy4uNjc1ZDc1OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uZWN0aW9uLXBvb2wtcGVyZi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uZWN0aW9uLXBvb2wtcGVyZi9idWlsZC54bWwKQEAgLTQyLDcgKzQyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTU0LDEzICs1NCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovU2ltcGxlQk1QLmNsYXNzLCAqKi9TaW1wbGVCTVBIb21lLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtNzYsNyArNzYsNyBAQAogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtOTAsNyArOTAsNyBAQAogCiAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0gICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIAorICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgogICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLnFsLWpkYmMtcG9vbC5zdGVhZHlfcG9vbF9zaXplPSR7c3RlYWR5LXBvb2wtc2l6ZX0iLz4KICAgICAgICAgICAgIDwvYW50Y2FsbD4KIApAQCAtMTI0LDE0ICsxMjQsMTQgQEAKIAogCiAgICAgPC90YXJnZXQ+Ci08dGFyZ2V0IG5hbWU9InN3aXRjaC1vbi1tb25pdG9yaW5nIj4gCis8dGFyZ2V0IG5hbWU9InN3aXRjaC1vbi1tb25pdG9yaW5nIj4KIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSJzZXJ2ZXIubW9uaXRvcmluZy1zZXJ2aWNlLm1vZHVsZS1tb25pdG9yaW5nLWxldmVscy5qZGJjLWNvbm5lY3Rpb24tcG9vbD1ISUdIIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLTx0YXJnZXQgbmFtZT0ic3dpdGNoLW9mZi1tb25pdG9yaW5nIj4gCis8dGFyZ2V0IG5hbWU9InN3aXRjaC1vZmYtbW9uaXRvcmluZyI+CiA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKQEAgLTE0NSw3ICsxNDUsNyBAQAogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5lY3Rpb24tcG9vbC1wZXJmL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmVjdGlvbi1wb29sLXBlcmYvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCmluZGV4IGEzYjU4NTUuLmM4YjllNmUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmVjdGlvbi1wb29sLXBlcmYvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmVjdGlvbi1wb29sLXBlcmYvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCkBAIC0zNCw3ICszNCw3IEBACiAKIAogcHVibGljIGNsYXNzIFNpbXBsZUJNUENsaWVudCB7Ci0gCisKICAgICBwcml2YXRlIHN0YXRpYyBsb25nIGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBPYmplY3QgbG9jayA9IG5ldyBJbnRlZ2VyKDEwKTsKICAgICBwcml2YXRlIGxvbmcgdG90YWxJdGVyYXRpb25zID0gMDsKQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aHJlYWRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICB0aHJlYWRzW2ldLnN0YXJ0KCk7CiAgICAgICAgIH0KLS8vICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXJ0ZWQgYXQgOiAiICsgCisvLyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGFydGVkIGF0IDogIiArCiAKICAgICAgICAgVGltZXJUYXNrIHRhc2sgPSBuZXcgVGltZXJUYXNrKCkgewogICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewpAQCAtMTAyLDcgKzEwMiw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIGdldENvbm5lY3Rpb24oKSA6ICIgKyB0b3RhbENvdW50ICsgIiwgbW9uaXRvcmluZy1jb3VudCA6ICIgKyBtb25pdG9yaW5nQ291bnQpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotICAgICAgCisKICAgICAgICAgICAgIGlmKHRvdGFsQ291bnQgPT0gbW9uaXRvcmluZ0NvdW50KXsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIFBlcmYtdGVzdCA6ICIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9ZWxzZXsKQEAgLTExMiw3ICsxMTIsNyBAQAogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwotICAgICAgICAgICAKKwogICAgICAgICAgICAgfQogICAgICAgICB9OwogICAgICAgICBUaW1lciB0aW1lciA9IG5ldyBUaW1lcigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uZWN0aW9uLXBvb2wtcGVyZi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5lY3Rpb24tcG9vbC1wZXJmL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBkZDRjNWU1Li4xMWU2MWVlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5lY3Rpb24tcG9vbC1wZXJmL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5lY3Rpb24tcG9vbC1wZXJmL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSwxMCArMSwxMCBAQAotDQotRHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlciBWQUxVRVMoMSwgJ3d4eXonKTsNCisKK0Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlciBWQUxVRVMoMSwgJ3d4eXonKTsKIElOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlciBWQUxVRVMoMiwgJ3BxcnMnKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrcmVjbGFpbW5vdGlmeS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3JlY2xhaW1ub3RpZnkvYnVpbGQucHJvcGVydGllcwppbmRleCAwNWEyOWNhLi4zN2UzY2E2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrcmVjbGFpbW5vdGlmeS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWtyZWNsYWltbm90aWZ5L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcC1zdGF0ZW1lbnR3cmFwcGVyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3JlY2xhaW1ub3RpZnkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3JlY2xhaW1ub3RpZnkvYnVpbGQueG1sCmluZGV4IDljZDYwNjEuLmI3Y2EwNmMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWtyZWNsYWltbm90aWZ5L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrcmVjbGFpbW5vdGlmeS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovU2ltcGxlQk1QLmNsYXNzLCAqKi9TaW1wbGVCTVBIb21lLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtODAsNyArODAsNyBAQAogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wucWwtamRiYy1wb29sLmNvbm5lY3Rpb25fbGVha190aW1lb3V0X2luX3NlY29uZHM9MTAiLz4KICAgICAgIDwvYW50Y2FsbD4KIApAQCAtOTEsMTEgKzkxLDExIEBACiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgpAQCAtMTAzLDcgKzEwMyw3IEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWtyZWNsYWltbm90aWZ5L2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWtyZWNsYWltbm90aWZ5L2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQppbmRleCBhOWE4N2UzLi41ZTNkNWJmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrcmVjbGFpbW5vdGlmeS9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3JlY2xhaW1ub3RpZnkvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCkBAIC0yNywyMSArMjcsMjEgQEAKIHB1YmxpYyBjbGFzcyBTaW1wbGVCTVBDbGllbnQgewogCiAKLSAgICBwdWJsaWMgc3RhdGljIGludCBOT19PRl9USFJFQURTID0gMjA7IAorICAgIHB1YmxpYyBzdGF0aWMgaW50IE5PX09GX1RIUkVBRFMgPSAyMDsKICAgICBwdWJsaWMgaW50IGZhaWxlZENvdW50ID0gMDsKIAogICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwogICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiQ29ubmVjdGlvbkxlYWtSZWNsYWltICI7CiAgICAgcHVibGljIFNpbXBsZUJNUENsaWVudCgpewotCWV4ZWN1dGUoKTsKKyAgICBleGVjdXRlKCk7CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCW5ldyBTaW1wbGVCTVBDbGllbnQoKTsKKyAgICBuZXcgU2ltcGxlQk1QQ2xpZW50KCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGV4ZWN1dGUoKSB7Ci0Jc3RhdC5hZGREZXNjcmlwdGlvbigiQ29ubmVjdGlvbiBMZWFrIFJlY2xhaW0gTm90aWZ5IFRlc3RzIik7CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiQ29ubmVjdGlvbiBMZWFrIFJlY2xhaW0gTm90aWZ5IFRlc3RzIik7CiAgICAgICAgIFdvcmtlclRocmVhZCB3b3JrZXJzW10gPSBuZXcgV29ya2VyVGhyZWFkW05PX09GX1RIUkVBRFNdOwogICAgICAgICAgICBmb3IoaW50IGk9MDsgaTwgd29ya2Vycy5sZW5ndGg7aSsrKXsKICAgICAgICAgICAgICAgIHdvcmtlcnNbaV0gPSBuZXcgV29ya2VyVGhyZWFkKCk7CkBAIC02MCwxMSArNjAsMTEgQEAKICAgICAgICAgZm9yKGludCBpPTA7IGk8d29ya2Vycy5sZW5ndGg7aSsrKXsKICAgICAgICAgICAgIHdvcmtlcnNbaV0uc2V0RXhpdCh0cnVlKTsKICAgICAgICAgfQotCWlmKGZhaWxlZENvdW50ID4gMCkgewotICAJICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICJ0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7Ci0JfSBlbHNlIHsKLSAgCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAidGVzdDEgOiAiLCBzdGF0LlBBU1MpOwotCX0gICAgCisgICAgaWYoZmFpbGVkQ291bnQgPiAwKSB7CisgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgInRlc3QxIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9IGVsc2UgeworICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICJ0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7CisgICAgfQogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIApAQCAtODgsNyArODgsNyBAQAogICAgICAgICAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKIAogICAgICAgICAgICAgICAgIFNpbXBsZUJNUCBzaW1wbGVCTVAgPSBzaW1wbGVCTVBIb21lLmNyZWF0ZSgpOwotCQl0ZXN0KHNpbXBsZUJNUCk7CisgICAgICAgIHRlc3Qoc2ltcGxlQk1QKTsKICAgICAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaHJlYWQgOiAiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkgKyAiZGlkIG5vdCBydW4gIik7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTk3LDEwICs5NywxMCBAQAogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIGJvb2xlYW4gdGVzdChTaW1wbGVCTVAgYm1wKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uewotCSAgICBpZiggISBibXAudGVzdDEoKSkgewotCQlTaW1wbGVCTVBDbGllbnQudGhpcy5mYWlsZWRDb3VudCsrOwotCSAgICB9Ci0JICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiggISBibXAudGVzdDEoKSkgeworICAgICAgICBTaW1wbGVCTVBDbGllbnQudGhpcy5mYWlsZWRDb3VudCsrOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrcmVjbGFpbW5vdGlmeS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3JlY2xhaW1ub3RpZnkvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCA5NTFlZjkyLi5hZGRkMDNhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrcmVjbGFpbW5vdGlmeS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWtyZWNsYWltbm90aWZ5L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTUyLDYgKzUyLDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3JlY2xhaW1ub3RpZnkvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWtyZWNsYWltbm90aWZ5L2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggNDg1NzI2OS4uNDAzMjg4YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3JlY2xhaW1ub3RpZnkvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrcmVjbGFpbW5vdGlmeS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQgbV9jdHggPSBudWxsOwogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgY29udGV4dCkgewotCW1fY3R4ID0gY29udGV4dDsKKyAgICBtX2N0eCA9IGNvbnRleHQ7CiAgICAgfQogCiAgICAgcHVibGljIEludGVnZXIgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CkBAIC00MiwyNiArNDIsMjYgQEAKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwogICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOwotCWxvbmcgc3RhcnRUaW1lID0gMCwgZW5kVGltZSA9IDAsIHRpbWVUYWtlbiA9MDsKKyAgICBsb25nIHN0YXJ0VGltZSA9IDAsIGVuZFRpbWUgPSAwLCB0aW1lVGFrZW4gPTA7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qZGJjL0RhdGFTb3VyY2UiKTsKICAgICAgICAgfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7CiAgICAgICAgIH0KLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIGVuZFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgZW5kVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOwotICAgICAgICB9IAotCXRpbWVUYWtlbiA9IChlbmRUaW1lLXN0YXJ0VGltZSkvMTAwMDsKKyAgICAgICAgfQorICAgIHRpbWVUYWtlbiA9IChlbmRUaW1lLXN0YXJ0VGltZSkvMTAwMDsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwcmVwYXJlZFN0bXRUZXN0IDogVGltZVRha2VuIDogIiArIHRpbWVUYWtlbik7Ci0JaWYodGltZVRha2VuID4gNTkpIHsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JfQorICAgIGlmKHRpbWVUYWtlbiA+IDU5KSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0KICAgICAgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWtyZWNsYWltbm90aWZ5L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWtyZWNsYWltbm90aWZ5L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBlNDkxNGY2Li5mMjU2MDc2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrcmVjbGFpbW5vdGlmeS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3JlY2xhaW1ub3RpZnkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrcmVjbGFpbW5vdGlmeS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3JlY2xhaW1ub3RpZnkvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA3MGQxZmNjLi5kODU0Yjk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrcmVjbGFpbW5vdGlmeS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWtyZWNsYWltbm90aWZ5L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrdHJhY2luZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3RyYWNpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCBjNGNiZWQwLi42MTk4NmQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrdHJhY2luZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWt0cmFjaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1jb25uZWN0aW9ubGVha3RyYWNpbmciLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJwb29sbmFtZSIgdmFsdWU9ImpkYmMtY29ubmVjdGlvbmxlYWt0cmFjaW5nIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrdHJhY2luZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrdHJhY2luZy9idWlsZC54bWwKaW5kZXggNTI1Nzg3ZC4uNGY2YzcyMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3RyYWNpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWt0cmFjaW5nL2J1aWxkLnhtbApAQCAtMTksOSArMTksOSBAQAogLS0+CiAKICAgICAgICAgPCFFTlRJVFkgY29tbW9uU2V0dXAgU1lTVEVNICIuLy4uLy4uLy4uL2NvbmZpZy9wcm9wZXJ0aWVzLnhtbCI+Ci0JPCFFTlRJVFkgY29tbW9uQnVpbGQgU1lTVEVNICIuLy4uLy4uLy4uL2NvbmZpZy9jb21tb24ueG1sIj4KKyAgICA8IUVOVElUWSBjb21tb25CdWlsZCBTWVNURU0gIi4vLi4vLi4vLi4vY29uZmlnL2NvbW1vbi54bWwiPgogICAgICAgICA8IUVOVElUWSB0ZXN0cHJvcGVydGllcyBTWVNURU0gIi4vYnVpbGQucHJvcGVydGllcyI+Ci0JPCFFTlRJVFkgcnVuIFNZU1RFTSAiLi8uLi9jb25maWcvcnVuLnhtbCI+CisgICAgPCFFTlRJVFkgcnVuIFNZU1RFTSAiLi8uLi9jb25maWcvcnVuLnhtbCI+CiAgICAgICAgIF0+CiAKIDxwcm9qZWN0IG5hbWU9Im1peCIgZGVmYXVsdD0idXNhZ2UiIGJhc2VkaXI9Ii4iPgpAQCAtNTEsOSArNTEsOSBAQAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgotCQkgICAgdmFsdWU9IioqL2VqYi8qLmNsYXNzIi8+CisgICAgICAgICAgICB2YWx1ZT0iKiovZWpiLyouY2xhc3MiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKLQkJICAgIHZhbHVlPSIqKi9TaW1wbGVCTVAuY2xhc3MsICoqL1NpbXBsZUJNUEhvbWUuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiLz4KKyAgICAgICAgICAgIHZhbHVlPSIqKi9TaW1wbGVCTVAuY2xhc3MsICoqL1NpbXBsZUJNUEhvbWUuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgPC90YXJnZXQ+CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCSAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAKICAgICA8L3RhcmdldD4KIApAQCAtNzcsNyArNzcsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtc3R1ZmYiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWt0cmFjaW5nL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWt0cmFjaW5nL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA2NzFjNjhjLi4wODJmNDMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrdHJhY2luZy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3RyYWNpbmcvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMiwyMCArMzIsMjAgQEAKICAgICAgICAgU3RyaW5nIHRlc3RTdWl0ZSA9ICJDb25uZWN0aW9uTGVha1RyYWNpbmciOwogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVCTVBIb21lIik7Ci0Jc3RhdC5hZGREZXNjcmlwdGlvbigiQ29ubmVjdGlvbiBMZWFrIFRyYWNpbmcgVGVzdHMiKTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJDb25uZWN0aW9uIExlYWsgVHJhY2luZyBUZXN0cyIpOwogCi0JZm9yKGludCBpPTA7IGk8MzsgaSsrKXsKKyAgICBmb3IoaW50IGk9MDsgaTwzOyBpKyspewogICAgICAgICAgICAgU2ltcGxlQk1QSG9tZSBjb252YWxCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCiAgICAgICAgICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZUJNUEhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgICBTaW1wbGVCTVAgY29udmFsQk1QID0gY29udmFsQk1QSG9tZS5jcmVhdGUoKTsKLQkgICAgaWYoIWNvbnZhbEJNUC50ZXN0MSgpKXsKLQkJc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgInRlc3QxIDogIiwgc3RhdC5GQUlMKTsKLQkJYnJlYWs7Ci0JICAgIH0KLQkgICAgVGhyZWFkLnNsZWVwKDIwMDAwKTsKLQl9Ci0Jc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgInRlc3QxIDogIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgaWYoIWNvbnZhbEJNUC50ZXN0MSgpKXsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgInRlc3QxIDogIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgVGhyZWFkLnNsZWVwKDIwMDAwKTsKKyAgICB9CisgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgInRlc3QxIDogIiwgc3RhdC5QQVNTKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrdHJhY2luZy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3RyYWNpbmcvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBiYzYyMzNlLi43ZGI3Y2IyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrdHJhY2luZy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWt0cmFjaW5nL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTMxLDE2ICszMSwxNiBAQAogICAgICAgICAgICAgPGVqYi1uYW1lPlNpbXBsZUJNUEVKQjwvZWpiLW5hbWU+CiAgICAgICAgICAgICA8aG9tZT5jb20uc3VuLnMxYXNkZXYuamRiYy5jb25uZWN0aW9ubGVha3RyYWNpbmcuZWpiLlNpbXBsZUJNUEhvbWU8L2hvbWU+CiAgICAgICAgICAgICA8cmVtb3RlPmNvbS5zdW4uczFhc2Rldi5qZGJjLmNvbm5lY3Rpb25sZWFrdHJhY2luZy5lamIuU2ltcGxlQk1QPC9yZW1vdGU+Ci0JICAgIDxlamItY2xhc3M+Y29tLnN1bi5zMWFzZGV2LmpkYmMuY29ubmVjdGlvbmxlYWt0cmFjaW5nLmVqYi5TaW1wbGVCTVBCZWFuPC9lamItY2xhc3M+Ci0JICAgIDxzZXNzaW9uLXR5cGU+U3RhdGVmdWw8L3Nlc3Npb24tdHlwZT4KLQkgICAgPHRyYW5zYWN0aW9uLXR5cGU+Q29udGFpbmVyPC90cmFuc2FjdGlvbi10eXBlPgotCSAgICA8IS0tPHBlcnNpc3RlbmNlLXR5cGU+QmVhbjwvcGVyc2lzdGVuY2UtdHlwZT4KKyAgICAgICAgPGVqYi1jbGFzcz5jb20uc3VuLnMxYXNkZXYuamRiYy5jb25uZWN0aW9ubGVha3RyYWNpbmcuZWpiLlNpbXBsZUJNUEJlYW48L2VqYi1jbGFzcz4KKyAgICAgICAgPHNlc3Npb24tdHlwZT5TdGF0ZWZ1bDwvc2Vzc2lvbi10eXBlPgorICAgICAgICA8dHJhbnNhY3Rpb24tdHlwZT5Db250YWluZXI8L3RyYW5zYWN0aW9uLXR5cGU+CisgICAgICAgIDwhLS08cGVyc2lzdGVuY2UtdHlwZT5CZWFuPC9wZXJzaXN0ZW5jZS10eXBlPgogICAgICAgICAgICAgPHByaW0ta2V5LWNsYXNzPmphdmEubGFuZy5JbnRlZ2VyPC9wcmltLWtleS1jbGFzcz4KICAgICAgICAgICAgIDxyZWVudHJhbnQ+RmFsc2U8L3JlZW50cmFudD4KICAgICAgICAgICAgIDxzZWN1cml0eS1pZGVudGl0eT4KICAgICAgICAgICAgICAgICA8ZGVzY3JpcHRpb24+PC9kZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eT48L3VzZS1jYWxsZXItaWRlbnRpdHk+Ci0JPC9zZWN1cml0eS1pZGVudGl0eT4tLT4KKyAgICA8L3NlY3VyaXR5LWlkZW50aXR5Pi0tPgogICAgICAgICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgICAgICAgICA8cmVzLXJlZi1uYW1lPkRhdGFTb3VyY2U8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgICAgICAgICA8cmVzLXR5cGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L3Jlcy10eXBlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3RyYWNpbmcvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWt0cmFjaW5nL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggOThhNjllZC4uZGQ5OGE3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3RyYWNpbmcvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrdHJhY2luZy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQgbV9jdHggPSBudWxsOwogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgY29udGV4dCkgewotCW1fY3R4ID0gY29udGV4dDsKKyAgICBtX2N0eCA9IGNvbnRleHQ7CiAgICAgfQogCiAgICAgcHVibGljIEludGVnZXIgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CkBAIC0zNiw3ICszNiw3IEBACiAgICAgfQogCiAKLSAgIAorCiAvKiBHZXQgYSBzaW5nbGUgY29ubmVjdGlvbiBhbmQgY2xvc2UgaXQgKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSgpIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWt0cmFjaW5nL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWt0cmFjaW5nL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBlNDkxNGY2Li5mMjU2MDc2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrdHJhY2luZy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3RyYWNpbmcvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrdHJhY2luZy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3RyYWNpbmcvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA3MGQxZmNjLi5kODU0Yjk1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrdHJhY2luZy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWt0cmFjaW5nL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcvYnVpbGQueG1sCmluZGV4IDkzYjIyZTUuLmJlMTM1MmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcvYnVpbGQueG1sCkBAIC0yMyw3ICsyMyw3IEBACiBdPgogCiA8cHJvamVjdCBuYW1lPSJqZGJjIiBkZWZhdWx0PSJ1c2FnZSIgYmFzZWRpcj0iLiI+Ci0JCisKICAgICAmZWVDb21tb247CiAgICAgJmVlQ29tbW9uUHJvcGVydGllczsKIApAQCAtMzIsMjQgKzMyLDI0IEBACiAgICAgPHRhcmdldCBuYW1lPSJhbGwiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSIke2V4ZWN1dGlvbi5tb2RlfS1hbGwiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icGUtYWxsIj4KICAgICAgICAgPGRlbGV0ZT4KICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5vdXRwdXQiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0iY29ubnNoYXJpbmcub3V0cHV0IiBhY3Rpb249InN0YXJ0IiAvPgotCSAgPGFudCBkaXI9Im5vbnhhIiB0YXJnZXQ9ImFsbCIvPgotCSAgPGFudCBkaXI9InhhIiB0YXJnZXQ9ImFsbCIvPgorICAgICAgPGFudCBkaXI9Im5vbnhhIiB0YXJnZXQ9ImFsbCIvPgorICAgICAgPGFudCBkaXI9InhhIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8cmVjb3JkIG5hbWU9ImNvbm5zaGFyaW5nLm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJlZS1hbGwiPgogICAgICAgICA8ZGVsZXRlPgogICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLm91dHB1dCIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPHJlY29yZCBuYW1lPSJjb25uc2hhcmluZy5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiIC8+Ci0JICA8YW50IGRpcj0ibm9ueGEiIHRhcmdldD0iYWxsIi8+Ci0JICA8YW50IGRpcj0ieGEiIHRhcmdldD0iYWxsIi8+CisgICAgICA8YW50IGRpcj0ibm9ueGEiIHRhcmdldD0iYWxsIi8+CisgICAgICA8YW50IGRpcj0ieGEiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0iY29ubnNoYXJpbmcub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTY1LDkgKzY1LDkgQEAKICAgICAgICAgPHJlY29yZCBuYW1lPSJ4YS5vdXRwdXQiIGFjdGlvbj0ic3RvcCIgLz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGpkYmMgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgamRiYyB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL25vbnhhL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL25vbnhhL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNmRiZGI4OC4uMjQ5ZmI3NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy9ub254YS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcvbm9ueGEvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTggKzE1LDE4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLWNvbm5zaGFyaW5nbm9ueGEiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcvbm9ueGEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy9ub254YS9idWlsZC54bWwKaW5kZXggZDkwYTU1OC4uN2RkMjJjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy9ub254YS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy9ub254YS9idWlsZC54bWwKQEAgLTQxLDExICs0MSwxMSBAQAogICAgICZlZVNldHVwOwogICAgICZlZVByb3BlcnRpZXM7CiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwotCS0tPgorICAgIC0tPgogCiAgICAgPHByb3BlcnR5IG5hbWU9ImV4ZWN1dGlvbi5tb2RlIiB2YWx1ZT0icGUiLz4KLSAgICAKLSAgICAKKworCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW4sdW5kZXBsb3kiLz4KICAgICA8dGFyZ2V0IG5hbWU9ImFsbC1hc3NvYy13aXRoLXRocmVhZCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHNldC1hc3NvYy13aXRoLXRocmVhZCxydW4sdW5kZXBsb3kiLz4KIApAQCAtNjQsMTMgKzY0LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtY29ubnNoYXJpbmctcG9vbCIvPgpAQCAtMTE0LDEyICsxMTQsMTIgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWNvbm5zaGFyaW5nLXBvb2wiLz4KLQkgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvY29ubnNoYXJpbmciLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvY29ubnNoYXJpbmciLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWNvbm5zaGFyaW5nLXBvb2wiLz4KLQkgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvY29ubnNoYXJpbmcyIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2Nvbm5zaGFyaW5nMiIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KQEAgLTEzMywxNCArMTMzLDE0IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgpAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2Nvbm5zaGFyaW5nIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9jb25uc2hhcmluZzIiLz4KICAgICAgIDwvYW50Y2FsbD4KQEAgLTE3NSw3ICsxNzUsNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcvbm9ueGEvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcvbm9ueGEvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBhYmM4NDM5Li4zNDExMTEzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL25vbnhhL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy9ub254YS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC00OCwxMSArNDgsMTEgQEAKICAgICAgIDx0cmFuc2FjdGlvbi10eXBlPkNvbnRhaW5lcjwvdHJhbnNhY3Rpb24tdHlwZT4KICAgICAgIDxlamItcmVmPgogICAgICAgICA8ZGVzY3JpcHRpb24+PC9kZXNjcmlwdGlvbj4KLQk8ZWpiLXJlZi1uYW1lPmVqYi9TaW1wbGVTZXNzaW9uMkVKQjwvZWpiLXJlZi1uYW1lPgotCTxlamItcmVmLXR5cGU+U2Vzc2lvbjwvZWpiLXJlZi10eXBlPgorICAgIDxlamItcmVmLW5hbWU+ZWpiL1NpbXBsZVNlc3Npb24yRUpCPC9lamItcmVmLW5hbWU+CisgICAgPGVqYi1yZWYtdHlwZT5TZXNzaW9uPC9lamItcmVmLXR5cGU+CiAgICAgICAgIDxob21lPmNvbS5zdW4uczFhc2Rldi5qZGJjLmNvbm5zaGFyaW5nLm5vbnhhLmVqYi5TaW1wbGVTZXNzaW9uMkhvbWU8L2hvbWU+CiAgICAgICAgIDxyZW1vdGU+Y29tLnN1bi5zMWFzZGV2LmpkYmMuY29ubnNoYXJpbmcubm9ueGEuZWpiLlNpbXBsZVNlc3Npb24yPC9yZW1vdGU+Ci0JPGVqYi1saW5rPlNpbXBsZVNlc3Npb24yRUpCPC9lamItbGluaz4KKyAgICA8ZWpiLWxpbms+U2ltcGxlU2Vzc2lvbjJFSkI8L2VqYi1saW5rPgogICAgICAgPC9lamItcmVmPgogICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+CkBAIC05Myw2ICs5Myw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVzTmV3PC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy9ub254YS9lamIvU2ltcGxlU2Vzc2lvbjJCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL25vbnhhL2VqYi9TaW1wbGVTZXNzaW9uMkJlYW4uamF2YQppbmRleCA4MWUxNTRhLi5lYzZkMGFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL25vbnhhL2VqYi9TaW1wbGVTZXNzaW9uMkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL25vbnhhL2VqYi9TaW1wbGVTZXNzaW9uMkJlYW4uamF2YQpAQCAtMjgsMTQgKzI4LDE0IEBACiB7CiAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGN0eHRfOwotICAgIHByaXZhdGUgSW5pdGlhbENvbnRleHQgaWNfOyAKKyAgICBwcml2YXRlIEluaXRpYWxDb250ZXh0IGljXzsKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIGN0eHRfID0gY29udGV4dDsKLQl0cnkgewotCSAgICBpY18gPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQl9IGNhdGNoKCBOYW1pbmdFeGNlcHRpb24gbmUgKSB7Ci0JICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB0cnkgeworICAgICAgICBpY18gPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICB9IGNhdGNoKCBOYW1pbmdFeGNlcHRpb24gbmUgKSB7CisgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKQEAgLTQ0LDU3ICs0NCw1NyBAQAogICAgIC8qKgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTIiKTsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOwotCVJlc3VsdFNldCByczEgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTIiKTsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOworICAgIFJlc3VsdFNldCByczEgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAKLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgc3RtdDEuZXhlY3V0ZVVwZGF0ZSggIlVQREFURSBDT05OU0hBUklORyBTRVQgY19waG9uZT0nQ09OTl9TSEFSSU5HX0JFQU5fMicgV0hFUkUgY19pZD0xMDAiKTsKKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdDEuZXhlY3V0ZVVwZGF0ZSggIlVQREFURSBDT05OU0hBUklORyBTRVQgY19waG9uZT0nQ09OTl9TSEFSSU5HX0JFQU5fMicgV0hFUkUgY19pZD0xMDAiKTsKIAotCSAgICByZXR1cm4gdHJ1ZTsKLQl9IGNhdGNoKCBTUUxFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKHN0bXQxICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JICAgIGlmIChjb25uMSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCX0KLQkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChzdG10MSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CiAgICAgfQotICAgICAKKworICAgIH0KKwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTIiKTsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOwotCVJlc3VsdFNldCByczEgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTIiKTsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOworICAgIFJlc3VsdFNldCByczEgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAKLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgc3RtdDEuZXhlY3V0ZVVwZGF0ZSggIlVQREFURSBDT05OU0hBUklORyBTRVQgY19waG9uZT0nQ09OTl9TSEFSSU5HX0JFQU5fMl8yJyBXSEVSRSBjX2lkPTIwMCIpOworICAgIHRyeSB7CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBzdG10MS5leGVjdXRlVXBkYXRlKCAiVVBEQVRFIENPTk5TSEFSSU5HIFNFVCBjX3Bob25lPSdDT05OX1NIQVJJTkdfQkVBTl8yXzInIFdIRVJFIGNfaWQ9MjAwIik7CiAKLQkgICAgcmV0dXJuIHRydWU7Ci0JfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChzdG10MSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCSAgICBpZiAoY29ubjEgIT0gbnVsbCkgeyAKLQkgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQl9Ci0JCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gY2F0Y2goIFNRTEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoc3RtdDEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoY29ubjEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgIH0KKwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL25vbnhhL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcvbm9ueGEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDhjYjMxNzQuLjcyMWQ5ZTggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcvbm9ueGEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcvbm9ueGEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDYgKzEsNiBAQAotRHJvcCB0YWJsZSBDT05OU0hBUklORzsNCi0NCi1DUkVBVEUgVEFCTEUgQ09OTlNIQVJJTkcgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBjb25zdHJhaW50IHBrX2tleSBwcmltYXJ5IGtleSwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMjUpDQotKTsNCitEcm9wIHRhYmxlIENPTk5TSEFSSU5HOworCitDUkVBVEUgVEFCTEUgQ09OTlNIQVJJTkcgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIGNvbnN0cmFpbnQgcGtfa2V5IHByaW1hcnkga2V5LAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDI1KQorKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcvbm9ueGEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcvbm9ueGEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCBjMjgxN2Y2Li43N2QxZDVhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL25vbnhhL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy9ub254YS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIENPTk5TSEFSSU5HOw0KK0Ryb3AgdGFibGUgQ09OTlNIQVJJTkc7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL3hhL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL3hhL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYmUyNDRhMy4uZTkzZDQ4NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcveGEvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTggKzE1LDE4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLWNvbm5zaGFyaW5neGEiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcveGEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9idWlsZC54bWwKaW5kZXggMjFhYjAyZS4uMTA5MDI5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUxLDEzICs1MSwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamRiYy1vcmFjbGUteGEtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9Im9yYWNsZS54YXBvb2wubmFtZSIgdmFsdWU9ImpkYmMtY29ubnNoYXJpbmcteGEtcG9vbCIvPgpAQCAtNjksNyArNjksNyBAQAogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1vcmFjbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC03OCwxNSArNzgsMTUgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tbGF6eS1lbmxpc3QiLz4KICAgICA8L3RhcmdldD4KLSAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1sYXp5LWVubGlzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1vcmFjbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKLQkgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1jb25uc2hhcmluZy14YS1wb29sLnByb3BlcnR5LkxhenlDb25uZWN0aW9uRW5saXN0bWVudD10cnVlIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCisgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtY29ubnNoYXJpbmcteGEtcG9vbC5wcm9wZXJ0eS5MYXp5Q29ubmVjdGlvbkVubGlzdG1lbnQ9dHJ1ZSIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KQEAgLTEwMCw3ICsxMDAsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9jb25uc2hhcmluZy14YSIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvY29ubnNoYXJpbmcyLXhhIi8+CiAgICAgICA8L2FudGNhbGw+CkBAIC0xMDgsOSArMTA4LDkgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1jb25uc2hhcmluZy14YS1wb29sIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL3hhL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAzMmE5NjI0Li5hNWY0YjZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL3hhL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL3hhL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjUsNDUgKzI1LDQ1IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAotCVNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotCVN0cmluZyB0ZXN0U3VpdGUgPSAiY29ubnNoYXJpbmctdGVzdDEgIjsKKworICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiY29ubnNoYXJpbmctdGVzdDEgIjsKIAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVTZXNzaW9uSG9tZSIpOwotCVNpbXBsZVNlc3Npb25Ib21lIHNpbXBsZVNlc3Npb25Ib21lID0gKFNpbXBsZVNlc3Npb25Ib21lKQorICAgIFNpbXBsZVNlc3Npb25Ib21lIHNpbXBsZVNlc3Npb25Ib21lID0gKFNpbXBsZVNlc3Npb25Ib21lKQogICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlU2Vzc2lvbkhvbWUuY2xhc3MpOwotICAgICAgICAKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJSdW5uaW5nIG5vdHhvcHMgdGVzdFN1aXRlMSAiKTsKKworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlJ1bm5pbmcgbm90eG9wcyB0ZXN0U3VpdGUxICIpOwogICAgICAgICBTaW1wbGVTZXNzaW9uIHNpbXBsZVNlc3Npb24gPSBzaW1wbGVTZXNzaW9uSG9tZS5jcmVhdGUoKTsKICAgICAgICAgaWYgKHNpbXBsZVNlc3Npb24udGVzdDEoKSAmJiBzaW1wbGVTZXNzaW9uLnF1ZXJ5KCkpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5QQVNTICk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5GQUlMICk7Ci0JfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LlBBU1MgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LkZBSUwgKTsKKyAgICB9CiAKICAgICAgICAgaWYgKHNpbXBsZVNlc3Npb24udGVzdDIoKSAmJiBzaW1wbGVTZXNzaW9uLnF1ZXJ5KCkpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDIgOiAiICwgc3RhdC5QQVNTICk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDIgOiAiICwgc3RhdC5GQUlMICk7Ci0JfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MiA6ICIgLCBzdGF0LlBBU1MgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MiA6ICIgLCBzdGF0LkZBSUwgKTsKKyAgICB9CiAKICAgICAgICAgaWYgKHNpbXBsZVNlc3Npb24udGVzdDMoKSAmJiBzaW1wbGVTZXNzaW9uLnF1ZXJ5MigpKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QzIDogIiAsIHN0YXQuUEFTUyApOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QzIDogIiAsIHN0YXQuRkFJTCApOwotCX0KKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDMgOiAiICwgc3RhdC5QQVNTICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDMgOiAiICwgc3RhdC5GQUlMICk7CisgICAgfQogCiAgICAgICAgIGlmIChzaW1wbGVTZXNzaW9uLnRlc3Q0KCkgJiYgc2ltcGxlU2Vzc2lvbi5xdWVyeTIoKSkgewotCSAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0NCA6ICIgLCBzdGF0LlBBU1MgKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0NCA6ICIgLCBzdGF0LkZBSUwgKTsKLQl9Ci0gIAotCQotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3Q0IDogIiAsIHN0YXQuUEFTUyApOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3Q0IDogIiAsIHN0YXQuRkFJTCApOworICAgIH0KKworCisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL3hhL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL3hhL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggYmI4ODdiYy4uNzExNjJjOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcveGEvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNDksMTEgKzQ5LDExIEBACiAgICAgICA8dHJhbnNhY3Rpb24tdHlwZT5Db250YWluZXI8L3RyYW5zYWN0aW9uLXR5cGU+CiAgICAgICA8ZWpiLXJlZj4KICAgICAgICAgPGRlc2NyaXB0aW9uPjwvZGVzY3JpcHRpb24+Ci0JPGVqYi1yZWYtbmFtZT5lamIvU2ltcGxlU2Vzc2lvbjJFSkI8L2VqYi1yZWYtbmFtZT4KLQk8ZWpiLXJlZi10eXBlPlNlc3Npb248L2VqYi1yZWYtdHlwZT4KKyAgICA8ZWpiLXJlZi1uYW1lPmVqYi9TaW1wbGVTZXNzaW9uMkVKQjwvZWpiLXJlZi1uYW1lPgorICAgIDxlamItcmVmLXR5cGU+U2Vzc2lvbjwvZWpiLXJlZi10eXBlPgogICAgICAgICA8aG9tZT5jb20uc3VuLnMxYXNkZXYuamRiYy5jb25uc2hhcmluZy54YS5lamIuU2ltcGxlU2Vzc2lvbjJIb21lPC9ob21lPgogICAgICAgICA8cmVtb3RlPmNvbS5zdW4uczFhc2Rldi5qZGJjLmNvbm5zaGFyaW5nLnhhLmVqYi5TaW1wbGVTZXNzaW9uMjwvcmVtb3RlPgotCTxlamItbGluaz5TaW1wbGVTZXNzaW9uMkVKQjwvZWpiLWxpbms+CisgICAgPGVqYi1saW5rPlNpbXBsZVNlc3Npb24yRUpCPC9lamItbGluaz4KICAgICAgIDwvZWpiLXJlZj4KICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgIDxyZXMtcmVmLW5hbWU+RGF0YVNvdXJjZTwvcmVzLXJlZi1uYW1lPgpAQCAtODcsNiArODcsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlc05ldzwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcveGEvZWpiL1NpbXBsZVNlc3Npb24yQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9lamIvU2ltcGxlU2Vzc2lvbjJCZWFuLmphdmEKaW5kZXggMDYyZWJlMi4uZWZhMWE0ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9lamIvU2ltcGxlU2Vzc2lvbjJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9lamIvU2ltcGxlU2Vzc2lvbjJCZWFuLmphdmEKQEAgLTI4LDE0ICsyOCwxNCBAQAogewogCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjdHh0XzsKLSAgICBwcml2YXRlIEluaXRpYWxDb250ZXh0IGljXzsgCisgICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBpY187CiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgY29udGV4dCkgewogICAgICAgICBjdHh0XyA9IGNvbnRleHQ7Ci0JdHJ5IHsKLQkgICAgaWNfID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JfSBjYXRjaCggTmFtaW5nRXhjZXB0aW9uIG5lICkgewotCSAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgaWNfID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgfSBjYXRjaCggTmFtaW5nRXhjZXB0aW9uIG5lICkgeworICAgICAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CkBAIC00NCwzNyArNDQsMzcgQEAKICAgICAvKioKICAgICAgKiBHZXQgY29ubmVjdGlvbiBhbmQgZG8gc29tZSBkYXRhYmFzZSBpbnNlcnRzLiBUaGVuIGNhbGwgYW5vdGhlcgogICAgICAqIEVKQidzIG1ldGhvZCBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiBhbmQgY2hhbmdlIHRoZSBpbnNlcnRlZCB2YWx1ZS4KLSAgICAgKiBTaW5jZSBhbGwgdGhpcyBpcyBpbiB0aGUgc2FtZSB0eCwgdGhlIG90aGVyIGJlYW4ncyBtZXRob2Qgc2hvdWxkIAorICAgICAqIFNpbmNlIGFsbCB0aGlzIGlzIGluIHRoZSBzYW1lIHR4LCB0aGUgb3RoZXIgYmVhbidzIG1ldGhvZCBzaG91bGQKICAgICAgKiBnZXQgdGhlIHNhbWUgY29ubmVjdGlvbiAocGh5c2ljYWwpIGFuZCBoZW5jZSBiZSBhYmxlIHRvIHNlZSB0aGUKICAgICAgKiBpbnNlcnRlZCB2YWx1ZSBldmVuIHRob3VnaCB0aGUgdHggaGFzIG5vdCBjb21taXR0ZWQgeWV0LgogICAgICAqIFRoZSBpZGVhIGlzIHRvIHRlc3QgY29ubmVjdGlvbiBzaGFyaW5nCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoU3RyaW5nIG5ld1ZhbCwgaW50IGtleSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTIiKTsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTIiKTsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAKLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgc3RtdDEuZXhlY3V0ZVVwZGF0ZSggIlVQREFURSBDT05OU0hBUklORyBTRVQgY19waG9uZSA9ICciKyBuZXdWYWwgKyInIFdIRVJFIiArCi0JICAgICAgICAiIGNfaWQgPSAiICsga2V5KTsKLSAgICAgICAgICAgIAorICAgIHRyeSB7CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBzdG10MS5leGVjdXRlVXBkYXRlKCAiVVBEQVRFIENPTk5TSEFSSU5HIFNFVCBjX3Bob25lID0gJyIrIG5ld1ZhbCArIicgV0hFUkUiICsKKyAgICAgICAgICAgICIgY19pZCA9ICIgKyBrZXkpOworCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQl9IGNhdGNoKCBTUUxFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKHN0bXQxICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JICAgIGlmIChjb25uMSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCX0KKyAgICB9IGNhdGNoKCBTUUxFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKHN0bXQxICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbm4xICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KICAgICB9Ci0gICAgCisgICAgfQorCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7fQogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL3hhL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQppbmRleCAxYzEyMDg4Li5jOTM1NjBmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL3hhL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcveGEvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKQEAgLTI4LDE0ICsyOCwxNCBAQAogewogCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjdHh0XzsKLSAgICBwcml2YXRlIEluaXRpYWxDb250ZXh0IGljXzsgCisgICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBpY187CiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgY29udGV4dCkgewogICAgICAgICBjdHh0XyA9IGNvbnRleHQ7Ci0JdHJ5IHsKLQkgICAgaWNfID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JfSBjYXRjaCggTmFtaW5nRXhjZXB0aW9uIG5lICkgewotCSAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgaWNfID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgfSBjYXRjaCggTmFtaW5nRXhjZXB0aW9uIG5lICkgeworICAgICAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CkBAIC00NCw0NyArNDQsNDcgQEAKICAgICAvKioKICAgICAgKiBHZXQgY29ubmVjdGlvbiBhbmQgZG8gc29tZSBkYXRhYmFzZSBpbnNlcnRzLiBUaGVuIGNhbGwgYW5vdGhlcgogICAgICAqIEVKQidzIG1ldGhvZCBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiBhbmQgY2hhbmdlIHRoZSBpbnNlcnRlZCB2YWx1ZS4KLSAgICAgKiBTaW5jZSBhbGwgdGhpcyBpcyBpbiB0aGUgc2FtZSB0eCwgdGhlIG90aGVyIGJlYW4ncyBtZXRob2Qgc2hvdWxkIAorICAgICAqIFNpbmNlIGFsbCB0aGlzIGlzIGluIHRoZSBzYW1lIHR4LCB0aGUgb3RoZXIgYmVhbidzIG1ldGhvZCBzaG91bGQKICAgICAgKiBnZXQgdGhlIHNhbWUgY29ubmVjdGlvbiAocGh5c2ljYWwpIGFuZCBoZW5jZSBiZSBhYmxlIHRvIHNlZSB0aGUKICAgICAgKiBpbnNlcnRlZCB2YWx1ZSBldmVuIHRob3VnaCB0aGUgdHggaGFzIG5vdCBjb21taXR0ZWQgeWV0LgogICAgICAqIFRoZSBpZGVhIGlzIHRvIHRlc3QgY29ubmVjdGlvbiBzaGFyaW5nCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7Ci0JQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMxID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOworICAgIFJlc3VsdFNldCByczEgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAKLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgc3RtdDEuZXhlY3V0ZVVwZGF0ZSggIklOU0VSVCBJTlRPIENPTk5TSEFSSU5HIHZhbHVlcyAoMTAwLCAnQURJVFlBJykiKTsKLSAgICAgICAgICAgIAotCSAgICBPYmplY3QgbyA9IGljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVNlc3Npb24yRUpCIik7Ci0JICAgIFNpbXBsZVNlc3Npb24ySG9tZSBob21lID0gKFNpbXBsZVNlc3Npb24ySG9tZSkgCi0JICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KCBvLCBTaW1wbGVTZXNzaW9uMkhvbWUuY2xhc3MpOwotCSAgICBTaW1wbGVTZXNzaW9uMiBiZWFuID0gaG9tZS5jcmVhdGUoKTsKKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdDEuZXhlY3V0ZVVwZGF0ZSggIklOU0VSVCBJTlRPIENPTk5TSEFSSU5HIHZhbHVlcyAoMTAwLCAnQURJVFlBJykiKTsKIAotCSAgICByZXR1cm4gYmVhbi50ZXN0MSgiQURJVFlBX0JFQU5fMiIsIDEwMCk7CisgICAgICAgIE9iamVjdCBvID0gaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU2Vzc2lvbjJFSkIiKTsKKyAgICAgICAgU2ltcGxlU2Vzc2lvbjJIb21lIGhvbWUgPSAoU2ltcGxlU2Vzc2lvbjJIb21lKQorICAgICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyggbywgU2ltcGxlU2Vzc2lvbjJIb21lLmNsYXNzKTsKKyAgICAgICAgU2ltcGxlU2Vzc2lvbjIgYmVhbiA9IGhvbWUuY3JlYXRlKCk7CiAKLQl9IGNhdGNoKCBTUUxFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKHN0bXQxICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JICAgIGlmIChjb25uMSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCX0KKyAgICAgICAgcmV0dXJuIGJlYW4udGVzdDEoIkFESVRZQV9CRUFOXzIiLCAxMDApOworCisgICAgfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChzdG10MSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CiAgICAgfQotICAgIAorICAgIH0KKwogICAgIC8qKgogICAgICAqIEdldCBjb25uZWN0aW9uIGFuZCBkbyBzb21lIGRhdGFiYXNlIGluc2VydHMuIFRoZW4gY2FsbCBhbm90aGVyCiAgICAgICogRUpCJ3MgbWV0aG9kIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIGFuZCBjaGFuZ2UgdGhlIGluc2VydGVkIHZhbHVlLgotICAgICAqIFNpbmNlIGFsbCB0aGlzIGlzIGluIHRoZSBzYW1lIHR4LCB0aGUgb3RoZXIgYmVhbidzIG1ldGhvZCBzaG91bGQgCisgICAgICogU2luY2UgYWxsIHRoaXMgaXMgaW4gdGhlIHNhbWUgdHgsIHRoZSBvdGhlciBiZWFuJ3MgbWV0aG9kIHNob3VsZAogICAgICAqIGdldCB0aGUgc2FtZSBjb25uZWN0aW9uIChwaHlzaWNhbCkgYW5kIGhlbmNlIGJlIGFibGUgdG8gc2VlIHRoZQogICAgICAqIGluc2VydGVkIHZhbHVlIGV2ZW4gdGhvdWdoIHRoZSB0eCBoYXMgbm90IGNvbW1pdHRlZCB5ZXQuCiAgICAgICogVGhpcyB0ZXN0IGRvZXMgdGhlIHNhbWUgdGhpbmcgYXMgdGVzdDEgZXhjZXB0IHRoYXQgaXQgY2xvc2VzIHRoZQpAQCAtOTIsMTE5ICs5MiwxMTkgQEAKICAgICAgKiBUaGUgaWRlYSBpcyB0byB0ZXN0IGNvbm5lY3Rpb24gc2hhcmluZwogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCUNvbm5lY3Rpb24gY29ubjEgPSBudWxsOwotCVN0YXRlbWVudCBzdG10MSA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzMSA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMxID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwogCi0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHN0bXQxLmV4ZWN1dGVVcGRhdGUoICJJTlNFUlQgSU5UTyBDT05OU0hBUklORyB2YWx1ZXMgKDEwMCwgJ0FESVRZQScpIik7Ci0gICAgICAgICAgICAKLQkgICAgc3RtdDEuY2xvc2UoKTsKLQkgICAgY29ubjEuY2xvc2UoKTsKKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdDEuZXhlY3V0ZVVwZGF0ZSggIklOU0VSVCBJTlRPIENPTk5TSEFSSU5HIHZhbHVlcyAoMTAwLCAnQURJVFlBJykiKTsKIAotCSAgICBPYmplY3QgbyA9IGljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVNlc3Npb24yRUpCIik7Ci0JICAgIFNpbXBsZVNlc3Npb24ySG9tZSBob21lID0gKFNpbXBsZVNlc3Npb24ySG9tZSkgCi0JICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KCBvLCBTaW1wbGVTZXNzaW9uMkhvbWUuY2xhc3MpOwotCSAgICBTaW1wbGVTZXNzaW9uMiBiZWFuID0gaG9tZS5jcmVhdGUoKTsKKyAgICAgICAgc3RtdDEuY2xvc2UoKTsKKyAgICAgICAgY29ubjEuY2xvc2UoKTsKIAotCSAgICByZXR1cm4gYmVhbi50ZXN0MSgiQURJVFlBX0JFQU5fMiIsIDEwMCk7CisgICAgICAgIE9iamVjdCBvID0gaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU2Vzc2lvbjJFSkIiKTsKKyAgICAgICAgU2ltcGxlU2Vzc2lvbjJIb21lIGhvbWUgPSAoU2ltcGxlU2Vzc2lvbjJIb21lKQorICAgICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyggbywgU2ltcGxlU2Vzc2lvbjJIb21lLmNsYXNzKTsKKyAgICAgICAgU2ltcGxlU2Vzc2lvbjIgYmVhbiA9IGhvbWUuY3JlYXRlKCk7CiAKLQl9IGNhdGNoKCBTUUxFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKHN0bXQxICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JICAgIGlmIChjb25uMSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCX0KKyAgICAgICAgcmV0dXJuIGJlYW4udGVzdDEoIkFESVRZQV9CRUFOXzIiLCAxMDApOworCisgICAgfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChzdG10MSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCUNvbm5lY3Rpb24gY29ubjEgPSBudWxsOwotCUNvbm5lY3Rpb24gY29ubjIgPSBudWxsOwotCVN0YXRlbWVudCBzdG10MSA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQyID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMxID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBDb25uZWN0aW9uIGNvbm4yID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10MiA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzMSA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKIAotCXRyeSB7Ci0JICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBzdG10MS5leGVjdXRlVXBkYXRlKCAiSU5TRVJUIElOVE8gQ09OTlNIQVJJTkcgdmFsdWVzICgxMDAsICdBRElUWUEnKSIpOwotICAgICAgICAgICAgCi0JICAgIGNvbm4yID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBzdG10MiA9IGNvbm4yLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBzdG10Mi5leGVjdXRlVXBkYXRlKCAiSU5TRVJUIElOVE8gQ09OTlNIQVJJTkcgdmFsdWVzICgyMDAsICdBRElUWUFfMjAwJykiKTsKKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdDEuZXhlY3V0ZVVwZGF0ZSggIklOU0VSVCBJTlRPIENPTk5TSEFSSU5HIHZhbHVlcyAoMTAwLCAnQURJVFlBJykiKTsKIAotCSAgICBPYmplY3QgbyA9IGljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVNlc3Npb24yRUpCIik7Ci0JICAgIFNpbXBsZVNlc3Npb24ySG9tZSBob21lID0gKFNpbXBsZVNlc3Npb24ySG9tZSkgCi0JICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KCBvLCBTaW1wbGVTZXNzaW9uMkhvbWUuY2xhc3MpOwotCSAgICBTaW1wbGVTZXNzaW9uMiBiZWFuID0gaG9tZS5jcmVhdGUoKTsKKyAgICAgICAgY29ubjIgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQyID0gY29ubjIuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHN0bXQyLmV4ZWN1dGVVcGRhdGUoICJJTlNFUlQgSU5UTyBDT05OU0hBUklORyB2YWx1ZXMgKDIwMCwgJ0FESVRZQV8yMDAnKSIpOwogCi0JICAgIHJldHVybiBiZWFuLnRlc3QxKCJBRElUWUFfQkVBTl8yXzIiLCAyMDApOworICAgICAgICBPYmplY3QgbyA9IGljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVNlc3Npb24yRUpCIik7CisgICAgICAgIFNpbXBsZVNlc3Npb24ySG9tZSBob21lID0gKFNpbXBsZVNlc3Npb24ySG9tZSkKKyAgICAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3coIG8sIFNpbXBsZVNlc3Npb24ySG9tZS5jbGFzcyk7CisgICAgICAgIFNpbXBsZVNlc3Npb24yIGJlYW4gPSBob21lLmNyZWF0ZSgpOwogCi0JfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChzdG10MSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCSAgICBpZiAoY29ubjEgIT0gbnVsbCkgeyAKLQkgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQl9CisgICAgICAgIHJldHVybiBiZWFuLnRlc3QxKCJBRElUWUFfQkVBTl8yXzIiLCAyMDApOworCisgICAgfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChzdG10MSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3Q0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCUNvbm5lY3Rpb24gY29ubjEgPSBudWxsOwotCUNvbm5lY3Rpb24gY29ubjIgPSBudWxsOwotCVN0YXRlbWVudCBzdG10MSA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQyID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBDb25uZWN0aW9uIGNvbm4yID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10MiA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKIAotCXRyeSB7Ci0JICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBzdG10MS5leGVjdXRlVXBkYXRlKCAiSU5TRVJUIElOVE8gQ09OTlNIQVJJTkcgdmFsdWVzICgxMDAsICdBRElUWUEnKSIpOwotICAgICAgICAgICAgCi0JICAgIHN0bXQxLmNsb3NlKCk7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHN0bXQxLmV4ZWN1dGVVcGRhdGUoICJJTlNFUlQgSU5UTyBDT05OU0hBUklORyB2YWx1ZXMgKDEwMCwgJ0FESVRZQScpIik7CisKKyAgICAgICAgc3RtdDEuY2xvc2UoKTsKICAgICAgICAgICAgIGNvbm4xLmNsb3NlKCk7CiAKLQkgICAgY29ubjIgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIHN0bXQyID0gY29ubjIuY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHN0bXQyLmV4ZWN1dGVVcGRhdGUoICJJTlNFUlQgSU5UTyBDT05OU0hBUklORyB2YWx1ZXMgKDIwMCwgJ0FESVRZQV8yMDAnKSIpOworICAgICAgICBjb25uMiA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgc3RtdDIgPSBjb25uMi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdDIuZXhlY3V0ZVVwZGF0ZSggIklOU0VSVCBJTlRPIENPTk5TSEFSSU5HIHZhbHVlcyAoMjAwLCAnQURJVFlBXzIwMCcpIik7CiAKLQkgICAgc3RtdDIuY2xvc2UoKTsKLQkgICAgY29ubjIuY2xvc2UoKTsKKyAgICAgICAgc3RtdDIuY2xvc2UoKTsKKyAgICAgICAgY29ubjIuY2xvc2UoKTsKIAotCSAgICBPYmplY3QgbyA9IGljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVNlc3Npb24yRUpCIik7Ci0JICAgIFNpbXBsZVNlc3Npb24ySG9tZSBob21lID0gKFNpbXBsZVNlc3Npb24ySG9tZSkgCi0JICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KCBvLCBTaW1wbGVTZXNzaW9uMkhvbWUuY2xhc3MpOwotCSAgICBTaW1wbGVTZXNzaW9uMiBiZWFuID0gaG9tZS5jcmVhdGUoKTsKKyAgICAgICAgT2JqZWN0IG8gPSBpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVTZXNzaW9uMkVKQiIpOworICAgICAgICBTaW1wbGVTZXNzaW9uMkhvbWUgaG9tZSA9IChTaW1wbGVTZXNzaW9uMkhvbWUpCisgICAgICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KCBvLCBTaW1wbGVTZXNzaW9uMkhvbWUuY2xhc3MpOworICAgICAgICBTaW1wbGVTZXNzaW9uMiBiZWFuID0gaG9tZS5jcmVhdGUoKTsKIAotCSAgICByZXR1cm4gYmVhbi50ZXN0MSgiQURJVFlBX0JFQU5fMl8yIiwgMjAwKTsKKyAgICAgICAgcmV0dXJuIGJlYW4udGVzdDEoIkFESVRZQV9CRUFOXzJfMiIsIDIwMCk7CiAKLQl9IGNhdGNoKCBTUUxFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKHN0bXQxICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JICAgIGlmIChjb25uMSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCX0KKyAgICB9IGNhdGNoKCBTUUxFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKHN0bXQxICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbm4xICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKyAgICB9CiAgICAgfQogCiAgICAgLyoqCkBAIC0yMTMsNTAgKzIxMyw1MCBAQAogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHF1ZXJ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7Ci0JQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdCA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzID0gbnVsbDsKKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10ID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMgPSBudWxsOwogCi0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgc3RtdCA9IGNvbm4uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gQ09OTlNIQVJJTkcgV0hFUkUgY19pZD0xMDAiKTsKLQkgICAgaWYgKCBycy5uZXh0KCkgKSB7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgc3RtdCA9IGNvbm4uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gQ09OTlNIQVJJTkcgV0hFUkUgY19pZD0xMDAiKTsKKyAgICAgICAgaWYgKCBycy5uZXh0KCkgKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHN0ciA9IHJzLmdldFN0cmluZyggMiApOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBzdHIgPT4gIiArIHN0ciApOwotCQlpZiggIkFESVRZQV9CRUFOXzIiLmVxdWFscyhzdHIudHJpbSgpKSApIHsKLQkJICAgIHJldHVybiB0cnVlOwotCQl9IAotCSAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIHN0ciA9PiAiICsgc3RyICk7CisgICAgICAgIGlmKCAiQURJVFlBX0JFQU5fMiIuZXF1YWxzKHN0ci50cmltKCkpICkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgfQogCiAKIAotCSAgICByZXR1cm4gZmFsc2U7Ci0JfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUgKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiggcnMgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IHJzLmNsb3NlKCkgOyB9Y2F0Y2goIEV4Y2VwdGlvbiBlICkge30KLQkgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUgKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiggcnMgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHJzLmNsb3NlKCkgOyB9Y2F0Y2goIEV4Y2VwdGlvbiBlICkge30KKyAgICAgICAgfQogCi0JICAgIGlmKCBzdG10ICE9IG51bGwpIHsKLQkgICAgICAgIHRyeSB7IHN0bXQuY2xvc2UoKTsgfSBjYXRjaChFeGNlcHRpb24gZSkgeyB9Ci0JICAgIH0KLSAgICAgICAgICAgIAotCSAgICAvL2NsZWFudXAgdGFibGUKLQkgICAgdHJ5IHsKLQkgICAgICAgIHN0bXQgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOwotCQlzdG10LmV4ZWN1dGVVcGRhdGUoICJERUxFVEUgRlJPTSBDT05OU0hBUklORyBXSEVSRSBjX2lkPTEwMCIgKTsKLQkgICAgICAgIHN0bXQuY2xvc2UoKTsJCi0JICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgeyAKLQkgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0KKyAgICAgICAgaWYoIHN0bXQgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdC5jbG9zZSgpOyB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7IH0KKyAgICAgICAgfQogCi0JICAgIGlmKCBjb25uICE9IG51bGwgKSB7IHRyeSB7IGNvbm4uY2xvc2UoKTsgfSBjYXRjaChFeGNlcHRpb24gZSkgeyB9Ci0JICAgIH0KLQl9Ci0JCisgICAgICAgIC8vY2xlYW51cCB0YWJsZQorICAgICAgICB0cnkgeworICAgICAgICAgICAgc3RtdCA9IGNvbm4uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSggIkRFTEVURSBGUk9NIENPTk5TSEFSSU5HIFdIRVJFIGNfaWQ9MTAwIiApOworICAgICAgICAgICAgc3RtdC5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiggY29ubiAhPSBudWxsICkgeyB0cnkgeyBjb25uLmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsgfQorICAgICAgICB9CisgICAgfQorCiAgICAgfQogCiAgICAgLyoqCkBAIC0yNjUsNzIgKzI2NSw3MiBAQAogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHF1ZXJ5MigpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCUNvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQgPSBudWxsOwotCVJlc3VsdFNldCBycyA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzMSA9IG51bGw7Ci0JU3RyaW5nIHN0cjEgPSBudWxsOwotCVN0cmluZyBzdHIyID0gbnVsbDsKLQkKKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10ID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMgPSBudWxsOworICAgIFJlc3VsdFNldCByczEgPSBudWxsOworICAgIFN0cmluZyBzdHIxID0gbnVsbDsKKyAgICBTdHJpbmcgc3RyMiA9IG51bGw7CiAKLQl0cnkgewotCSAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBDT05OU0hBUklORyBXSEVSRSBjX2lkPTEwMCIpOwotCSAgICBpZiAoIHJzLm5leHQoKSApIHsKKworICAgIHRyeSB7CisgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIENPTk5TSEFSSU5HIFdIRVJFIGNfaWQ9MTAwIik7CisgICAgICAgIGlmICggcnMubmV4dCgpICkgewogICAgICAgICAgICAgICAgIHN0cjEgPSBycy5nZXRTdHJpbmcoMik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgc3RyMSA9PiAiICsgc3RyMSApOwotCSAgICB9CisgICAgICAgIH0KIAotCSAgICByczEgPSBzdG10LmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBDT05OU0hBUklORyBXSEVSRSBjX2lkPTIwMCIpOwotCSAgICBpZiAoIHJzMS5uZXh0KCkgKSB7Ci0JICAgICAgICBzdHIyID0gcnMxLmdldFN0cmluZygyKTsKKyAgICAgICAgcnMxID0gc3RtdC5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gQ09OTlNIQVJJTkcgV0hFUkUgY19pZD0yMDAiKTsKKyAgICAgICAgaWYgKCByczEubmV4dCgpICkgeworICAgICAgICAgICAgc3RyMiA9IHJzMS5nZXRTdHJpbmcoMik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgc3RyMiA9PiAiICsgc3RyMiApOwotCSAgICB9Ci0gICAgICAgICAgICBpZiggIkFESVRZQSIuZXF1YWxzKHN0cjEudHJpbSgpKSAmJiAKLQkgICAgICAgICJBRElUWUFfQkVBTl8yXzIiLmVxdWFscyhzdHIyLnRyaW0oKSkpIHsKKyAgICAgICAgfQorICAgICAgICAgICAgaWYoICJBRElUWUEiLmVxdWFscyhzdHIxLnRyaW0oKSkgJiYKKyAgICAgICAgICAgICJBRElUWUFfQkVBTl8yXzIiLmVxdWFscyhzdHIyLnRyaW0oKSkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9CiAKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0gY2F0Y2goIFNRTEV4Y2VwdGlvbiBlICkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYoIHJzICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBycy5jbG9zZSgpIDsgfWNhdGNoKCBFeGNlcHRpb24gZSApIHt9Ci0JICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gY2F0Y2goIFNRTEV4Y2VwdGlvbiBlICkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYoIHJzICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBycy5jbG9zZSgpIDsgfWNhdGNoKCBFeGNlcHRpb24gZSApIHt9CisgICAgICAgIH0KIAogICAgICAgICAgICAgaWYoIHJzMSAhPSBudWxsKSB7Ci0JICAgICAgICB0cnkgeyByczEuY2xvc2UoKTsgfSBjYXRjaChFeGNlcHRpb24gZSkgeyB9Ci0JICAgIH0KKyAgICAgICAgICAgIHRyeSB7IHJzMS5jbG9zZSgpOyB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7IH0KKyAgICAgICAgfQogCi0JICAgIGlmKCBzdG10ICE9IG51bGwpIHsKLQkgICAgICAgIHRyeSB7IHN0bXQuY2xvc2UoKTsgfSBjYXRjaChFeGNlcHRpb24gZSkgeyB9Ci0JICAgIH0KKyAgICAgICAgaWYoIHN0bXQgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdC5jbG9zZSgpOyB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7IH0KKyAgICAgICAgfQogCi0gICAKLQkgICAgLy9jbGVhbnVwIHRhYmxlCi0JICAgIHRyeSB7Ci0JICAgICAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkJc3RtdC5leGVjdXRlVXBkYXRlKCAiREVMRVRFIEZST00gQ09OTlNIQVJJTkcgV0hFUkUgY19pZD0xMDAiICk7Ci0JICAgICAgICBzdG10LmNsb3NlKCk7CQotCSAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsgCi0JICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9CiAKLQkgICAgdHJ5IHsKLQkgICAgICAgIHN0bXQgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOwotCQlzdG10LmV4ZWN1dGVVcGRhdGUoICJERUxFVEUgRlJPTSBDT05OU0hBUklORyBXSEVSRSBjX2lkPTIwMCIgKTsKLQkgICAgICAgIHN0bXQuY2xvc2UoKTsJCi0JICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgeyAKLQkgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0KKyAgICAgICAgLy9jbGVhbnVwIHRhYmxlCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCAiREVMRVRFIEZST00gQ09OTlNIQVJJTkcgV0hFUkUgY19pZD0xMDAiICk7CisgICAgICAgICAgICBzdG10LmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQogCi0JICAgIGlmKCBjb25uICE9IG51bGwgKSB7IHRyeSB7IGNvbm4uY2xvc2UoKTsgfSBjYXRjaChFeGNlcHRpb24gZSkgeyB9Ci0JICAgIH0KLQl9Ci0JCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCAiREVMRVRFIEZST00gQ09OTlNIQVJJTkcgV0hFUkUgY19pZD0yMDAiICk7CisgICAgICAgICAgICBzdG10LmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBjb25uICE9IG51bGwgKSB7IHRyeSB7IGNvbm4uY2xvc2UoKTsgfSBjYXRjaChFeGNlcHRpb24gZSkgeyB9CisgICAgICAgIH0KKyAgICB9CisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcveGEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggNWEzMzNmZC4uY2Q1ZmY1OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNiArMSw2IEBACi1Ecm9wIHRhYmxlIENPTk5TSEFSSU5HOw0KLQ0KLUNSRUFURSBUQUJMRSBDT05OU0hBUklORyAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIGNvbnN0cmFpbnQgcGtfa2V5IHByaW1hcnkga2V5LA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KK0Ryb3AgdGFibGUgQ09OTlNIQVJJTkc7CisKK0NSRUFURSBUQUJMRSBDT05OU0hBUklORyAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgY29uc3RyYWludCBwa19rZXkgcHJpbWFyeSBrZXksCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IGMyODE3ZjYuLjc3ZDFkNWEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcveGEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL3hhL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgQ09OTlNIQVJJTkc7DQorRHJvcCB0YWJsZSBDT05OU0hBUklORzsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgvYnVpbGQucHJvcGVydGllcwppbmRleCBmNDE3ZmI0Li45N2E2MjMwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOCArMTUsMTggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtY29udGF1dGgiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aC9idWlsZC54bWwKaW5kZXggZjdlZjk2OS4uNTA5MDQ1OSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aC9idWlsZC54bWwKQEAgLTM3LDcgKzM3LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ5LDEzICs0OSwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovU2ltcGxlQk1QLmNsYXNzLCAqKi9TaW1wbGVCTVBIb21lLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtNjMsMTQgKzYzLDE0IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CkBAIC03OCw3ICs3OCw3IEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKaW5kZXggNGI3NGI2Zi4uMTg5NDI5OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKQEAgLTI5LDM0ICsyOSwzNCBAQAogICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAKLSAgICAgICAgCVNpbXBsZUJNUENsaWVudCBjbGllbnQgPSBuZXcgU2ltcGxlQk1QQ2xpZW50KCk7CisKKyAgICAgICAgICAgIFNpbXBsZUJNUENsaWVudCBjbGllbnQgPSBuZXcgU2ltcGxlQk1QQ2xpZW50KCk7CiAgICAgICAgICAgICAgY2xpZW50LnJ1blRlc3QoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBydW5UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3RyaW5nIHRlc3RTdWl0ZSA9ICJDb250QXV0aCAiOworICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiQ29udEF1dGggIjsKIAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVCTVBIb21lIik7Ci0JU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCisgICAgU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCiAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKIAogICAgICAgICBTaW1wbGVCTVAgc2ltcGxlQk1QID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoKTsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiSkRCQyBDb250YWluZXIgQXV0aGVudGljYXRpb24gdGVzdCIpOwogCiAgICAgICAgIGlmICggc2ltcGxlQk1QLnRlc3QxKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LkZBSUwpOwotCX0KLQlpZiAoIHNpbXBsZUJNUC50ZXN0MigpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5GQUlMKTsKLQl9CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KKyAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MigpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oImpkYmMgY29udGF1dGggc3RhdHVzOiAiKTsKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiamRiYyBjb250YXV0aCBzdGF0dXM6ICIpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGM2YzI1NjkuLjA1YTdiZWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTU3LDYgKzU3LDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDVjZWVjNDEuLjUyZDk5MDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTMwLDU4ICszMCw1OCBAQAogICAgIHByb3RlY3RlZCBEYXRhU291cmNlIGRzOwogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGVudGl0eUNvbnRleHQpIHsKLQlDb250ZXh0IGNvbnRleHQgPSBudWxsOwotCXRyeSB7Ci0JICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCX0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7Ci0JfQorICAgIENvbnRleHQgY29udGV4dCA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKKyAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqU2ltcGxlQk1QQmVhbioqXSBEb25lIHdpdGggc2V0RW50aXR5Q29udGV4dC4uLi4iKTsKICAgICB9CiAKICAgICBwdWJsaWMgSW50ZWdlciBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKLQlyZXR1cm4gbmV3IEludGVnZXIoMSk7CisgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgewogICAgICAgICAvL2NvbnRhaW5lciBhdXRoICsgdXNlci9wd2Qgc3BlY2lmaWVkIC0gc2hvdWxkIHBhc3MKLQlDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQl0cnkgewotCSAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigiREJVU0VSIiwgIkRCUEFTU1dPUkQiICk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkJfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KLQotCi0JcmV0dXJuIHBhc3NlZDsKKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigiREJVU0VSIiwgIkRCUEFTU1dPUkQiICk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CiAgICAgfQotICAgIAorCisKKyAgICByZXR1cm4gcGFzc2VkOworICAgIH0KKwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QyKCkgewogICAgICAgICAvL2NvbnRhaW5lciBhdXRoICsgdXNlci9wd2QgTk9UIHNwZWNpZmllZCAtIHNob3VsZCBwYXNzCi0JQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7Ci0JICAgICAgICAgICAgY29ubi5jbG9zZSgpOwotCQl9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JfQorICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIHRyeSB7CisgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgfQogCi0JCi0JcmV0dXJuIHBhc3NlZDsKKworICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGU0OTE0ZjYuLmYyNTYwNzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQzMjI3Y2MuLjlhNjg0ZDggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDEvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTggKzE1LDE4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLWNvbnRhdXRoMSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDEvYnVpbGQueG1sCmluZGV4IDQyYWY5ZTcuLjdlODE3YjQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMS9idWlsZC54bWwKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTU4LDEzICs1OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovU2ltcGxlQk1QLmNsYXNzLCAqKi9TaW1wbGVCTVBIb21lLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtODEsNyArODEsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzZXQtZGVyYnktZm9yLW5vLWF1dGhlbnRpY2F0aW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KQEAgLTg5LDcgKzg5LDcgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDEvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDEvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCmluZGV4IDllYTc0Y2IuLjg5NjBiZGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMS9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKQEAgLTI4LDMyICsyOCwzMiBAQAogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKLQlTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLQlTdHJpbmcgdGVzdFN1aXRlID0gIkNvbnRBdXRoMSAiOworCisgICAgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CisgICAgU3RyaW5nIHRlc3RTdWl0ZSA9ICJDb250QXV0aDEgIjsKIAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVCTVBIb21lIik7Ci0JU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCisgICAgU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCiAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKLSAgICAgICAgCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFRlc3QgMiB3aWxsIGZhaWwgd2l0aCBEZXJieSIpOwotCXN0YXQuYWRkRGVzY3JpcHRpb24oIkpEQkMgQ29udGFpbmVyIEF1dGhlbnRpY2F0aW9uIDEgdGVzdHMgIik7Ci0gICAgICAgIFNpbXBsZUJNUCBzaW1wbGVCTVAgPSBzaW1wbGVCTVBIb21lLmNyZWF0ZSgpOwotICAJCi0gICAgICAgIGlmICggc2ltcGxlQk1QLnRlc3QxKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LkZBSUwpOwotCX0KLQlpZiAoIHNpbXBsZUJNUC50ZXN0MigpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5GQUlMKTsKLQl9CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oImpkYmMgY29udGF1dGgxIHN0YXR1czogIik7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKLSAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgVGVzdCAyIHdpbGwgZmFpbCB3aXRoIERlcmJ5Iik7CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiSkRCQyBDb250YWluZXIgQXV0aGVudGljYXRpb24gMSB0ZXN0cyAiKTsKKyAgICAgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKCk7CisKKyAgICAgICAgaWYgKCBzaW1wbGVCTVAudGVzdDEoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQorICAgIGlmICggc2ltcGxlQk1QLnRlc3QyKCkgKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KKworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiamRiYyBjb250YXV0aDEgc3RhdHVzOiAiKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOworCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDEvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggOTk4NTZmNi4uZDg1MWM0YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDEvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC01Nyw2ICs1Nyw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDAwNGI4ZDMuLjZkZDcwNTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDEvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQpAQCAtMzEsMTMgKzMxLDEzIEBACiAgICAgaW50IGlkOwogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGVudGl0eUNvbnRleHQpIHsKLQlDb250ZXh0IGNvbnRleHQgPSBudWxsOwotCXRyeSB7Ci0JICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCX0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7Ci0JfQorICAgIENvbnRleHQgY29udGV4dCA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIEludGVnZXIgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CkBAIC00Niw0MiArNDYsNDIgQEAKIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgewogICAgICAgICAvL2NvbnRhaW5lciBhdXRoICsgdXNlci9wd2Qgc3BlY2lmaWVkIC0gc2hvdWxkIHBhc3MKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQl0cnkgewotCSAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigiREJVU0VSIiwgIkRCUEFTU1dPUkQiICk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkJfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KLQotCi0JcmV0dXJuIHBhc3NlZDsKKyAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CisgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigiREJVU0VSIiwgIkRCUEFTU1dPUkQiICk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CiAgICAgfQotICAgIAorCisKKyAgICByZXR1cm4gcGFzc2VkOworICAgIH0KKwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QyKCkgewogICAgICAgICAvL2NvbnRhaW5lciBhdXRoICsgd3JvbmcgdXNlci9wYXNzd2QgaW4gcmVzb3VyY2VyZWYgLSBzaG91bGQgZmFpbAotCUNvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKLQl0cnkgewotCSAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHBhc3NlZCA9IHRydWU7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkJfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgIH0KIAogCi0JcmV0dXJuIHBhc3NlZDsKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGU0OTE0ZjYuLmYyNTYwNzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDcwZDFmY2MuLmQ4NTRiOTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxdHgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxdHgvYnVpbGQucHJvcGVydGllcwppbmRleCBkYzE2ODk0Li5lMzJiNGM5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMXR4L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDF0eC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtY29udGF1dGgxdHgiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMXR4L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxdHgvYnVpbGQueG1sCmluZGV4IGRhZWJiODUuLjJjMDlkM2IgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxdHgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxdHgvYnVpbGQueG1sCkBAIC00Niw3ICs0Niw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01OCwxMiArNTgsMTIgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1NpbXBsZUJNUC5jbGFzcywgKiovU2ltcGxlQk1QSG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgpAQCAtNzcsOSArNzcsOSBAQAogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWFwcGF1dGgtcG9vbDEiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvczFxZWFwcGF1dGgxIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cC1kZXJieS1mb3ItYXV0aGVudGljYXRpb24iLz4KQEAgLTg5LDcgKzg5LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc2V0LWRlcmJ5LWZvci1uby1hdXRoZW50aWNhdGlvbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogCkBAIC0xMDQsNyArMTA0LDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMXR4L2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxdHgvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCmluZGV4IGU3ZmQzMGYuLjg3OTg3MDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxdHgvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxdHgvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCkBAIC0yOSwyOSArMjksMjkgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAotCVNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotCVN0cmluZyB0ZXN0U3VpdGUgPSAiQ29udEF1dGgxVFggIjsKKyAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKKyAgICBTdHJpbmcgdGVzdFN1aXRlID0gIkNvbnRBdXRoMVRYICI7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQk1QSG9tZSIpOwotCVNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQorICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQogICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7CiAKICAgICAgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKCk7Ci0Jc3RhdC5hZGREZXNjcmlwdGlvbigiSkRCQyBDb250QXV0aDFUWCB0ZXN0cyIpOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkpEQkMgQ29udEF1dGgxVFggdGVzdHMiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWxsIHRlc3RzIHNoYWxsIGZhaWwgdGlsbCBhIHN0YWJsZSBYQSBkcml2ZXIgaXMgaW50ZWdyYXRlZCBpbnRvIERlcmJ5Iik7CiAgICAgICAgIGlmICggc2ltcGxlQk1QLnRlc3QxKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LkZBSUwpOwotCX0KLQlpZiAoIHNpbXBsZUJNUC50ZXN0MigpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5GQUlMKTsKLQl9CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KKyAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MigpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oImpkYmMgY29udGF1dGgxdHggc3RhdHVzOiAiKTsKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiamRiYyBjb250YXV0aDF0eCBzdGF0dXM6ICIpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDF0eC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDF0eC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGQ5MjA5ODkuLjBiYmY4NTYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxdHgvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMXR4L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTU3LDYgKzU3LDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDF0eC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDF0eC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDZmYzZkYTguLjI1NjJiYzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxdHgvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMXR4L2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTMxLDEzICszMSwxMyBAQAogICAgIGludCBpZDsKIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBlbnRpdHlDb250ZXh0KSB7Ci0JQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKLQl0cnkgewotCSAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2V0eCIpOwotCX0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7Ci0JfQorICAgIENvbnRleHQgY29udGV4dCA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNldHgiKTsKKyAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOworICAgIH0KICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsqKlNpbXBsZUJNUEJlYW4qKl0gRG9uZSB3aXRoIHNldEVudGl0eUNvbnRleHQuLi4uIik7CiAgICAgfQogCkBAIC00Nyw0MiArNDcsNDIgQEAKIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgewogICAgICAgICAvL2NvbnRhaW5lciBhdXRoICsgdXNlci9wd2Qgc3BlY2lmaWVkIC0gc2hvdWxkIHBhc3MKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQl0cnkgewotCSAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigiREJVU0VSIiwgIkRCUEFTU1dPUkQiICk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkJfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KLQotCi0JcmV0dXJuIHBhc3NlZDsKKyAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CisgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigiREJVU0VSIiwgIkRCUEFTU1dPUkQiICk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CiAgICAgfQotICAgIAorCisKKyAgICByZXR1cm4gcGFzc2VkOworICAgIH0KKwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QyKCkgewogICAgICAgICAvL2NvbnRhaW5lciBhdXRoICsgd3JvbmcgdXNlci9wYXNzd2QgaW4gcmVzb3VyY2VyZWYgLSBzaG91bGQgZmFpbAotCUNvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKLQl0cnkgewotCSAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHBhc3NlZCA9IHRydWU7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkJfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgIH0KIAogCi0JcmV0dXJuIHBhc3NlZDsKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDF0eC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMXR4L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBlNDkxNGY2Li5mMjU2MDc2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMXR4L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMXR4L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDF0eC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDF0eC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDcwZDFmY2MuLmQ4NTRiOTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxdHgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMXR4L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRodHgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGh0eC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGVhZDk4YWMuLmIwZDM2ODcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGh0eC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGh0eC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtY29udGF1dGh0eCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImpkYmMucmVzb3VyY2UudHlwZSIgdmFsdWU9ImphdmF4LnNxbC5YQURhdGFTb3VyY2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGh0eC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRodHgvYnVpbGQueG1sCmluZGV4IGUxMjljOGUuLjc5YmExZjggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGh0eC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aHR4L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTIgKzQ2LDEyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9TaW1wbGVCTVAuY2xhc3MsICoqL1NpbXBsZUJNUEhvbWUuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KQEAgLTY1LDE5ICs2NSwxOSBAQAogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWFwcGF1dGgtcG9vbDEiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvczFxZWFwcGF1dGgxIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgIAotICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAKIAotICAgCi0gICAgCisgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KKyAgICA8L3RhcmdldD4KKworCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogCkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KIAogCi0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGh0eC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRodHgvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCmluZGV4IDU2YjY2NGEuLjFmOGQ1OGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGh0eC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aHR4L2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQpAQCAtMzEsMzQgKzMxLDM0IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLQlTaW1wbGVCTVBDbGllbnQgY2xpZW50ID0gbmV3IFNpbXBsZUJNUENsaWVudCgpOwotCWNsaWVudC5ydW5UZXN0KCk7CisgICAgU2ltcGxlQk1QQ2xpZW50IGNsaWVudCA9IG5ldyBTaW1wbGVCTVBDbGllbnQoKTsKKyAgICBjbGllbnQucnVuVGVzdCgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJ1blRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCi0JU3RyaW5nIHRlc3RTdWl0ZSA9ICJDb250QXV0aFRYICI7CisKKyAgICBTdHJpbmcgdGVzdFN1aXRlID0gIkNvbnRBdXRoVFggIjsKIAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVCTVBIb21lIik7Ci0JU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCisgICAgU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCiAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKIAogICAgICAgICBTaW1wbGVCTVAgc2ltcGxlQk1QID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgV2lsbCBGYWlsIHRpbGwgYSBiZXR0ZXIgWEEgZHJpdmVyIGlzIGludGVncmF0ZWQgaW50byBEZXJieSIpOwotCXN0YXQuYWRkRGVzY3JpcHRpb24oIkpEQkMgQ29udGFpbmVyIEF1dGhlbnRpY2F0aW9uIFRYIHRlc3QiKTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJKREJDIENvbnRhaW5lciBBdXRoZW50aWNhdGlvbiBUWCB0ZXN0Iik7CiAgICAgICAgIGlmICggc2ltcGxlQk1QLnRlc3QxKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LkZBSUwpOwotCX0KLQlpZiAoIHNpbXBsZUJNUC50ZXN0MigpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5GQUlMKTsKLQl9CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KKyAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MigpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oImpkYmMgY29udGF1dGh0eCBzdGF0dXM6ICIpOwotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJqZGJjIGNvbnRhdXRodHggc3RhdHVzOiAiKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGh0eC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aHR4L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggM2U1ODYxNi4uZmYwYzI1MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aHR4L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aHR4L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTU3LDYgKzU3LDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aHR4L2VqYi9TaW1wbGVCTVBCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRodHgvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQppbmRleCBmMTJiZTFmLi4yZjhjOTBlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRodHgvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRodHgvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQpAQCAtMzAsNTggKzMwLDU4IEBACiAgICAgcHJvdGVjdGVkIERhdGFTb3VyY2UgZHM7CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgZW50aXR5Q29udGV4dCkgewotCUNvbnRleHQgY29udGV4dCA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNldHgiKTsKLQl9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOwotCX0KKyAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZXR4Iik7CisgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKKyAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqU2ltcGxlQk1QQmVhbioqXSBEb25lIHdpdGggc2V0RW50aXR5Q29udGV4dC4uLi4iKTsKICAgICB9CiAKICAgICBwdWJsaWMgSW50ZWdlciBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKLQlyZXR1cm4gbmV3IEludGVnZXIoMSk7CisgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgewogICAgICAgICAvL2NvbnRhaW5lciBhdXRoICsgdXNlci9wd2Qgc3BlY2lmaWVkIC0gc2hvdWxkIHBhc3MKLQlDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQl0cnkgewotCSAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigiREJVU0VSIiwgIkRCUEFTU1dPUkQiICk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkJfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KLQotCi0JcmV0dXJuIHBhc3NlZDsKKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigiREJVU0VSIiwgIkRCUEFTU1dPUkQiICk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CiAgICAgfQotICAgIAorCisKKyAgICByZXR1cm4gcGFzc2VkOworICAgIH0KKwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QyKCkgewogICAgICAgICAvL2NvbnRhaW5lciBhdXRoICsgdXNlci9wd2QgTk9UIHNwZWNpZmllZCAtIHNob3VsZCBwYXNzCi0JQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7Ci0JICAgICAgICAgICAgY29ubi5jbG9zZSgpOwotCQl9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JfQorICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIHRyeSB7CisgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgfQogCi0JCi0JcmV0dXJuIHBhc3NlZDsKKworICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRodHgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aHR4L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBlNDkxNGY2Li5mMjU2MDc2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRodHgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGh0eC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGh0eC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aHR4L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aHR4L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aHR4L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnZhbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb252YWwvYnVpbGQucHJvcGVydGllcwppbmRleCA3MzEzY2EwLi5mYzgzNWZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnZhbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udmFsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1jb252YWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc2VzMTIuemlwIiB2YWx1ZT0iL3RtcC9jbGFzc2VzMTIuemlwIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnZhbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnZhbC9idWlsZC54bWwKaW5kZXggOWU4MTE2ZC4uNzY3OGY3NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb252YWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udmFsL2J1aWxkLnhtbApAQCAtODAsOCArODAsOCBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMSIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLQk8YW50Y2FsbCB0YXJnZXQ9InN0b3AtZGVyYnkiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0LWRlcmJ5Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wLWRlcmJ5Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydC1kZXJieSIvPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIyIi8+CkBAIC0xMTEsOCArMTExLDggQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjMiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JPGFudGNhbGwgdGFyZ2V0PSJzdG9wLWRlcmJ5Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzdGFydC1kZXJieSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic3RvcC1kZXJieSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnQtZGVyYnkiLz4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iNCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb252YWwvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb252YWwvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDYxNmI4NjUuLjc3ODYxNTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udmFsL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnZhbC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7CiAKICAgICAgICAgU2ltcGxlQk1QIGNvbnZhbEJNUCA9IGNvbnZhbEJNUEhvbWUuY3JlYXRlKCk7Ci0Jc3RhdC5hZGREZXNjcmlwdGlvbigiQ29ubmVjdGlvbiBWYWxpZGF0aW9uIFRlc3RzIik7CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiQ29ubmVjdGlvbiBWYWxpZGF0aW9uIFRlc3RzIik7CiAKICAgICAgICAgaWYgKGFyZ3MgIT0gbnVsbCAmJiBhcmdzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgIFN0cmluZyBwYXJhbSA9IGFyZ3NbMF07CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnZhbC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnZhbC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZTQ5MTRmNi4uZjI1NjA3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb252YWwvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udmFsL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb252YWwvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udmFsL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb252YWwvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnZhbC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHMvYnVpbGQucHJvcGVydGllcwppbmRleCA3ODFhN2E3Li4yOTI5MjZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTggKzE1LDE4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLWNwZHMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHMvYnVpbGQueG1sCmluZGV4IDM5MzRiM2UuLjE4MmZkMmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzL2J1aWxkLnhtbApAQCAtNjEsNyArNjEsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIAotCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtY29tbW9uIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamF2YXguc3FsLkNvbm5lY3Rpb25Qb29sRGF0YVNvdXJjZSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvczFxZURCLWNwZHMiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtY3BkcyIvPgpAQCAtNzAsNyArNzAsNyBAQAogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAtZGVyYnktZm9yLWF1dGhlbnRpY2F0aW9uIi8+CiAKLQk8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkcy9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHMvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCmluZGV4IGM3Y2NhY2YuLjU4MTA5N2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkcy9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQpAQCAtMjgsNDEgKzI4LDQxIEBACiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCi0gCVNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotCVN0cmluZyB0ZXN0U3VpdGUgPSAiQ29ubmVjdGlvblBvb2xEYXRhU291cmNlICI7CisKKyAgICAgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CisgICAgU3RyaW5nIHRlc3RTdWl0ZSA9ICJDb25uZWN0aW9uUG9vbERhdGFTb3VyY2UgIjsKIAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVCTVBIb21lIik7Ci0JU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCisgICAgU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCiAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKIAogICAgICAgICBTaW1wbGVCTVAgc2ltcGxlQk1QID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoKTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJDb25uZWN0aW9uIFBvb2wgRGF0YVNvdXJjZSB0ZXN0cyIpOwotCQotCWlmICggc2ltcGxlQk1QLnRlc3QxKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiLCBzdGF0LlBBU1MgKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3QxIDogIiwgc3RhdC5GQUlMICk7Ci0JfQorICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkNvbm5lY3Rpb24gUG9vbCBEYXRhU291cmNlIHRlc3RzIik7CiAKLQlpZiAoIHNpbXBsZUJNUC50ZXN0MigpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3QyIDogIiwgc3RhdC5QQVNTICk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0MiA6ICIsIHN0YXQuRkFJTCApOwotCX0KKyAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MSgpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3QxIDogIiwgc3RhdC5QQVNTICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIsIHN0YXQuRkFJTCApOworICAgIH0KIAotCWlmICggc2ltcGxlQk1QLnRlc3QzKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDMgOiAiLCBzdGF0LlBBU1MgKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3QzIDogIiwgc3RhdC5GQUlMICk7Ci0JfQotCWlmICggc2ltcGxlQk1QLnRlc3Q0KCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDQgOiAiLCBzdGF0LlBBU1MgKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3Q0IDogIiwgc3RhdC5GQUlMICk7Ci0JfQotICAgICAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIGlmICggc2ltcGxlQk1QLnRlc3QyKCkgKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDIgOiAiLCBzdGF0LlBBU1MgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3QyIDogIiwgc3RhdC5GQUlMICk7CisgICAgfQorCisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDMoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0MyA6ICIsIHN0YXQuUEFTUyApOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDMgOiAiLCBzdGF0LkZBSUwgKTsKKyAgICB9CisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDQoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0NCA6ICIsIHN0YXQuUEFTUyApOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDQgOiAiLCBzdGF0LkZBSUwgKTsKKyAgICB9CisKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkcy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggNTRjZjcyZS4uMWNjMDNjMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgIDxyZXMtcmVmLW5hbWU+RGF0YVNvdXJjZTwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8cmVzLXR5cGU+amF2YXguc3FsLkNvbm5lY3Rpb25Qb29sRGF0YVNvdXJjZTwvcmVzLXR5cGU+Ci0gICAgICAgIDxyZXMtYXV0aD5Db250YWluZXI8L3Jlcy1hdXRoPiAKKyAgICAgICAgPHJlcy1hdXRoPkNvbnRhaW5lcjwvcmVzLWF1dGg+CiAgICAgICAgIDwhLS0gPHJlcy1hdXRoPkFwcGxpY2F0aW9uPC9yZXMtYXV0aD4gLS0+CiAgICAgICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CkBAIC01OCw2ICs1OCw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkcy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggOTllMTI2OS4uMGMzMjQ3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTg0LDcgKzg0LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MygpIHsKLSAgICAgICAgLy9hcHBsaWNhdGlvbiBhdXRoICsgd3JvbmcgdXNlci9wd2QgCisgICAgICAgIC8vYXBwbGljYXRpb24gYXV0aCArIHdyb25nIHVzZXIvcHdkCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS1TdGFydCB0ZXN0My0tLS0tLS0tLS0tLS0tIik7CiAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CiAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHMvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBlNDkxNGY2Li5mMjU2MDc2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHMvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkcy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHNwZXJmL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHNwZXJmL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDgwNDNlZi4uYjU4MmUwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzcGVyZi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkc3BlcmYvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLWNwZHNwZXJmIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIyMDAwMDAiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkc3BlcmYvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzcGVyZi9idWlsZC54bWwKaW5kZXggNjc2ZmM3Yy4uZTIyOTAyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzcGVyZi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzcGVyZi9idWlsZC54bWwKQEAgLTQyLDcgKzQyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTU0LDIyICs1NCwyMiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovU2ltcGxlQk1QLmNsYXNzLCAqKi9TaW1wbGVCTVBIb21lLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPCEtLSBDcmVhdGUgdGhlIE9SQUNMRSBjb25uZWN0aW9uIHBvb2wgY29ubmVjdGlvbiBwb29sIGFuZCBkYXRhc291cmNlIC0tPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamF2YXguc3FsLkNvbm5lY3Rpb25Qb29sRGF0YVNvdXJjZSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWNwZHNwZXJmLTEiLz4KLQk8cGFyYW0gbmFtZT0iZGIuY2xhc3MiIHZhbHVlPSJvcmFjbGUuamRiYy5wb29sLk9yYWNsZUNvbm5lY3Rpb25Qb29sRGF0YVNvdXJjZSIvPgotCTxwYXJhbSBuYW1lPSJkYi51c2VyIiB2YWx1ZT0ic3lzdGVtIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLnB3ZCIgdmFsdWU9Im1hbmFnZXIiLz4KLQk8cGFyYW0gbmFtZT0iZGIudXJsIiB2YWx1ZT0iT1JBIi8+CisgICAgPHBhcmFtIG5hbWU9ImRiLmNsYXNzIiB2YWx1ZT0ib3JhY2xlLmpkYmMucG9vbC5PcmFjbGVDb25uZWN0aW9uUG9vbERhdGFTb3VyY2UiLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIudXNlciIgdmFsdWU9InN5c3RlbSIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi5wd2QiIHZhbHVlPSJtYW5hZ2VyIi8+CisgICAgPHBhcmFtIG5hbWU9ImRiLnVybCIgdmFsdWU9Ik9SQSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CkBAIC03OSw3ICs3OSw3IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtY3Bkc3BlcmYtMS5wcm9wZXJ0eS5VUkw9amRiYzpvcmFjbGU6dGhpbjpAMTI5LjE1OC4yMjkuMjM5OjE1MjE6T1JBIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtY3Bkc3BlcmYtMS5wcm9wZXJ0eS5TZXJ2ZXJOYW1lPTEyOS4xNTguMjI5LjIzOSIvPgpAQCAtOTAsMTAgKzkwLDEwIEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuRGF0YVNvdXJjZSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWNwZHNwZXJmLTIiLz4KLQk8cGFyYW0gbmFtZT0iZGIuY2xhc3MiIHZhbHVlPSJvcmFjbGUuamRiYy5wb29sLk9yYWNsZURhdGFTb3VyY2UiLz4KLQk8cGFyYW0gbmFtZT0iZGIudXNlciIgdmFsdWU9InN5c3RlbSIvPgotCTxwYXJhbSBuYW1lPSJkYi5wd2QiIHZhbHVlPSJtYW5hZ2VyIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLnVybCIgdmFsdWU9Ik9SQSIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi5jbGFzcyIgdmFsdWU9Im9yYWNsZS5qZGJjLnBvb2wuT3JhY2xlRGF0YVNvdXJjZSIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi51c2VyIiB2YWx1ZT0ic3lzdGVtIi8+CisgICAgPHBhcmFtIG5hbWU9ImRiLnB3ZCIgdmFsdWU9Im1hbmFnZXIiLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIudXJsIiB2YWx1ZT0iT1JBIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KQEAgLTEwMyw3ICsxMDMsNyBAQAogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLWNwZHNwZXJmLTIucHJvcGVydHkuVVJMPWpkYmM6b3JhY2xlOnRoaW46QDEyOS4xNTguMjI5LjIzOToxNTIxOk9SQSIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLWNwZHNwZXJmLTIucHJvcGVydHkuU2VydmVyTmFtZT0xMjkuMTU4LjIyOS4yMzkiLz4KQEAgLTEyMCwyMyArMTIwLDIzIEBACiAgICAgICA8L2FudGNhbGw+CiAKIAotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgICAgPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIHNxbCBmcm9tICR7c3FsLmZpbGV9Ii8+CiAgICAgICA8c3FsCiAgICAgICAgIHNyYz0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIgotCWRyaXZlcj0ib3JhY2xlLmpkYmMuZHJpdmVyLk9yYWNsZURyaXZlciIKLQl1c2VyaWQ9InN5c3RlbSIKLQlwYXNzd29yZD0ibWFuYWdlciIKLQl1cmw9ImpkYmM6b3JhY2xlOnRoaW46QDEyOS4xNTguMjI5LjIzOToxNTIxOk9SQSIKLQljbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9qZGJjL2NsYXNzZXMxMi56aXAiCi0Jb25lcnJvcj0iY29udGludWUiCi0JcHJpbnQ9InllcyIKKyAgICBkcml2ZXI9Im9yYWNsZS5qZGJjLmRyaXZlci5PcmFjbGVEcml2ZXIiCisgICAgdXNlcmlkPSJzeXN0ZW0iCisgICAgcGFzc3dvcmQ9Im1hbmFnZXIiCisgICAgdXJsPSJqZGJjOm9yYWNsZTp0aGluOkAxMjkuMTU4LjIyOS4yMzk6MTUyMTpPUkEiCisgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvamRiYy9jbGFzc2VzMTIuemlwIgorICAgIG9uZXJyb3I9ImNvbnRpbnVlIgorICAgIHByaW50PSJ5ZXMiCiAgICAgICAvPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC0xNDUsMzEgKzE0NSwzMSBAQAogICAgICAgPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIHNxbCBmcm9tICR7c3FsLmZpbGV9Ii8+CiAgICAgICA8c3FsCiAgICAgICAgIHNyYz0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIKLQlkcml2ZXI9Im9yYWNsZS5qZGJjLmRyaXZlci5PcmFjbGVEcml2ZXIiCi0JdXNlcmlkPSJzeXN0ZW0iCi0JcGFzc3dvcmQ9Im1hbmFnZXIiCi0JdXJsPSJqZGJjOm9yYWNsZTp0aGluOkAxMjkuMTU4LjIyOS4yMzk6MTUyMTpPUkEiCi0JY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvamRiYy9jbGFzc2VzMTIuemlwIgotCW9uZXJyb3I9ImNvbnRpbnVlIgotCXByaW50PSJ5ZXMiCisgICAgZHJpdmVyPSJvcmFjbGUuamRiYy5kcml2ZXIuT3JhY2xlRHJpdmVyIgorICAgIHVzZXJpZD0ic3lzdGVtIgorICAgIHBhc3N3b3JkPSJtYW5hZ2VyIgorICAgIHVybD0iamRiYzpvcmFjbGU6dGhpbjpAMTI5LjE1OC4yMjkuMjM5OjE1MjE6T1JBIgorICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2pkYmMvY2xhc3NlczEyLnppcCIKKyAgICBvbmVycm9yPSJjb250aW51ZSIKKyAgICBwcmludD0ieWVzIgogICAgICAgLz4KIAotICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4gCisgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogCi0gICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+IAorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9zMXFlREItY3Bkc3BlcmYtMSIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPiAKKyAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvczFxZURCLWNwZHNwZXJmLTIiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4gCisgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtY3Bkc3BlcmYtMSIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1jb25ucG9vbC1jb21tb24iPiAKKyAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1jcGRzcGVyZi0yIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzcGVyZi9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHNwZXJmL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQppbmRleCBiYWZlYTIzLi44YWM5ZmMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHNwZXJmL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHNwZXJmL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQpAQCAtMjQsNDEgKzI0LDQxIEBACiBpbXBvcnQgY29tLnN1bi5zMWFzZGV2LmpkYmMuY3Bkc3BlcmYuZWpiLlNpbXBsZUJNUDsKIAogcHVibGljIGNsYXNzIFNpbXBsZUJNUENsaWVudCB7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgaW50IG51bVRpbWVzID0gMTAwOyAKLQlpZiAoYXJncy5sZW5ndGggPT0gMSkgeworICAgICAgICBpbnQgbnVtVGltZXMgPSAxMDA7CisgICAgaWYgKGFyZ3MubGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgIG51bVRpbWVzID0gSW50ZWdlci5wYXJzZUludCggYXJnc1swXSApOwotCX0KLQkKKyAgICB9CisKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQk1QSG9tZSIpOwotCVNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQorICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQogICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7CiAKICAgICAgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKCBudW1UaW1lcyApOwotCQotCWxvbmcgdGltZVRha2VuID0gMDsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIiB0ZXN0MTogVXNpbmcgQ29ubmVjdGlvblBvb2xEYXRhU291cmNlIik7Ci0JaWYgKCAodGltZVRha2VuID0gc2ltcGxlQk1QLnRlc3QxKCkpICE9IC0xICkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBhc3NlZDogTnVtIENvbm5lY3Rpb25zOiAiICsgbnVtVGltZXMrCi0JICAgICAgICAiICBUaW1lIHRha2VuIDoiICsgdGltZVRha2VuKTsgCi0JfSBlbHNlIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJGYWlsZWQiKTsgCi0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIiB0ZXN0MjogVXNpbmcgRGF0YVNvdXJjZSIpOwotCWlmICggKHRpbWVUYWtlbiA9IHNpbXBsZUJNUC50ZXN0MigpKSAhPSAtMSApIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJQYXNzZWQ6IE51bSBDb25uZWN0aW9uczogIiArIG51bVRpbWVzKwotCSAgICAgICAgIiAgVGltZSB0YWtlbiA6IiArIHRpbWVUYWtlbik7IAotCX0gZWxzZSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmFpbGVkIik7IAotCX0KIAotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotICAgIH0JCisgICAgbG9uZyB0aW1lVGFrZW4gPSAwOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIHRlc3QxOiBVc2luZyBDb25uZWN0aW9uUG9vbERhdGFTb3VyY2UiKTsKKyAgICBpZiAoICh0aW1lVGFrZW4gPSBzaW1wbGVCTVAudGVzdDEoKSkgIT0gLTEgKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUGFzc2VkOiBOdW0gQ29ubmVjdGlvbnM6ICIgKyBudW1UaW1lcysKKyAgICAgICAgICAgICIgIFRpbWUgdGFrZW4gOiIgKyB0aW1lVGFrZW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmFpbGVkIik7CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiB0ZXN0MjogVXNpbmcgRGF0YVNvdXJjZSIpOworICAgIGlmICggKHRpbWVUYWtlbiA9IHNpbXBsZUJNUC50ZXN0MigpKSAhPSAtMSApIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQYXNzZWQ6IE51bSBDb25uZWN0aW9uczogIiArIG51bVRpbWVzKworICAgICAgICAgICAgIiAgVGltZSB0YWtlbiA6IiArIHRpbWVUYWtlbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGYWlsZWQiKTsKKyAgICB9CisKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHNwZXJmL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHNwZXJmL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggNGQ1OTRlMS4uZGExN2YyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzcGVyZi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkc3BlcmYvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNjMsNiArNjMsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHNwZXJmL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHNwZXJmL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggYTA4OTY0ZC4uZTRjMGI4YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzcGVyZi9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkc3BlcmYvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQpAQCAtMzIsMTU0ICszMiwxNTQgQEAKICAgICBwcm90ZWN0ZWQgaW50IG51bVJ1bnM7CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgZW50aXR5Q29udGV4dCkgewotCUNvbnRleHQgY29udGV4dCA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBkc0NQID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UtY3AiKTsKLQkgICAgZHNOb3JtYWwgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZS1ub3JtYWwiKTsKLQl9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOwotCX0KKyAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZHNDUCA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlLWNwIik7CisgICAgICAgIGRzTm9ybWFsID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2Utbm9ybWFsIik7CisgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKKyAgICB9CiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbKipTaW1wbGVCTVBCZWFuKipdIERvbmUgd2l0aCBzZXRFbnRpdHlDb250ZXh0Li4uLiIpOwogICAgIH0KIAogICAgIHB1YmxpYyBJbnRlZ2VyIGVqYkNyZWF0ZShpbnQgX251bVJ1bnMpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgICAgICBudW1SdW5zID0gX251bVJ1bnM7Ci0JcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOworICAgIHJldHVybiBuZXcgSW50ZWdlcigxKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBEbyBhbiBTUUwgaW5zZXJ0IGludG8gdGhlIGRhdGFiYXNlIGFuZCB0aW1lIHRoaXMKICAgICAgKiBAcmV0dXJuIHRpbWUgdGFrZW4uIC0xIElmIHRlc3QgZmFpbHMKICAgICAgKi8KICAgICBwdWJsaWMgbG9uZyB0ZXN0MSgpIHsKICAgICAgICAgLy9Db25uZWN0aW9uUG9vbERhdGFTb3VyY2UKLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tU3RhcnQgdGVzdDEtLS0tLS0tLS0tLS0tLSIpOwotCUNvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCWxvbmcgc3RhcnRUaW1lID0gMCA7Ci0JbG9uZyBlbmRUaW1lID0gMDsKLQl0cnkgewotCSAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkgICAgZm9yICggaW50IGkgPSAwOyBpIDwgbnVtUnVuczsgaSsrICkgewotCSAgICAgICAgY29ubiA9IGRzQ1AuZ2V0Q29ubmVjdGlvbigic3lzdGVtIiwgIm1hbmFnZXIiKTsKLQkJaW5zZXJ0RW50cnkoIGksICIxMjM0NTY3ODkwIiwgY29ubik7Ci0JCWlmIChpIC8gMTAgPT0gMCApIHsKLQkJICAgIHF1ZXJ5VGFibGUoIGNvbm4gKTsKLQkJfQotCQljb25uLmNsb3NlKCk7Ci0JICAgIH0gICAgCi0JICAgIGVuZFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsgCi0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBjb25uLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLUVuZCB0ZXN0MS0tLS0tLS0tLS0tLS0tIik7Ci0JCi0JdHJ5IHsgCi0JICAgIGVtcHR5VGFibGUoIGNvbm4gKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChjb25uICE9IG51bGwpIHsKLQkgICAgICAgIHRyeSB7IGNvbm4uY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCX0KLSAgICAgICAgaWYgKHBhc3NlZCkgewotCSAgICByZXR1cm4gKGVuZFRpbWUgLSBzdGFydFRpbWUpLzEwMDA7Ci0JfQotCXJldHVybiAtMTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tU3RhcnQgdGVzdDEtLS0tLS0tLS0tLS0tLSIpOworICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIGxvbmcgc3RhcnRUaW1lID0gMCA7CisgICAgbG9uZyBlbmRUaW1lID0gMDsKKyAgICB0cnkgeworICAgICAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgZm9yICggaW50IGkgPSAwOyBpIDwgbnVtUnVuczsgaSsrICkgeworICAgICAgICAgICAgY29ubiA9IGRzQ1AuZ2V0Q29ubmVjdGlvbigic3lzdGVtIiwgIm1hbmFnZXIiKTsKKyAgICAgICAgaW5zZXJ0RW50cnkoIGksICIxMjM0NTY3ODkwIiwgY29ubik7CisgICAgICAgIGlmIChpIC8gMTAgPT0gMCApIHsKKyAgICAgICAgICAgIHF1ZXJ5VGFibGUoIGNvbm4gKTsKKyAgICAgICAgfQorICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgZW5kVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgY29ubi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KICAgICB9Ci0gICAgCisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLUVuZCB0ZXN0MS0tLS0tLS0tLS0tLS0tIik7CisKKyAgICB0cnkgeworICAgICAgICBlbXB0eVRhYmxlKCBjb25uICk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoY29ubiAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIGlmIChwYXNzZWQpIHsKKyAgICAgICAgcmV0dXJuIChlbmRUaW1lIC0gc3RhcnRUaW1lKS8xMDAwOworICAgIH0KKyAgICByZXR1cm4gLTE7CisgICAgfQorCiAgICAgcHVibGljIGxvbmcgdGVzdDIoKSB7CiAgICAgICAgIC8vTm9ybWFsIERhdGFTb3VyY2UKLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tU3RhcnQgdGVzdDItLS0tLS0tLS0tLS0tLSIpOwotCUNvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCWxvbmcgc3RhcnRUaW1lID0gMCA7Ci0JbG9uZyBlbmRUaW1lID0gMDsKLQl0cnkgewotCSAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkgICAgZm9yICggaW50IGkgPSAwOyBpIDwgbnVtUnVuczsgaSsrICkgewotCSAgICAgICAgY29ubiA9IGRzTm9ybWFsLmdldENvbm5lY3Rpb24oInN5c3RlbSIsICJtYW5hZ2VyIik7Ci0JCWluc2VydEVudHJ5KCBpLCAiMTIzNDU2Nzg5MCIsIGNvbm4pOwotCQlpZiAoaSAvIDEwID09IDAgKSB7Ci0JCSAgICBxdWVyeVRhYmxlKCBjb25uICk7Ci0JCX0KLQkJY29ubi5jbG9zZSgpOwotCSAgICB9ICAgIAotCSAgICBlbmRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7IAotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmICggY29ubiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsKLQkgICAgICAgICAgICBjb25uLmNsb3NlKCk7Ci0JCX0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLUVuZCB0ZXN0Mi0tLS0tLS0tLS0tLS0tIik7Ci0JCi0JdHJ5IHsKLQkgICAgY29ubiA9IGRzTm9ybWFsLmdldENvbm5lY3Rpb24oInN5c3RlbSIsIm1hbmFnZXIiKTsKLQkgICAgZW1wdHlUYWJsZShjb25uKTsKLQkgICAgY29ubi5jbG9zZSgpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKGNvbm4gIT0gbnVsbCkgewotCSAgICAgICAgdHJ5IHsgY29ubi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9Ci0JICAgIH0KLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLVN0YXJ0IHRlc3QyLS0tLS0tLS0tLS0tLS0iKTsKKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICBsb25nIHN0YXJ0VGltZSA9IDAgOworICAgIGxvbmcgZW5kVGltZSA9IDA7CisgICAgdHJ5IHsKKyAgICAgICAgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgIGZvciAoIGludCBpID0gMDsgaSA8IG51bVJ1bnM7IGkrKyApIHsKKyAgICAgICAgICAgIGNvbm4gPSBkc05vcm1hbC5nZXRDb25uZWN0aW9uKCJzeXN0ZW0iLCAibWFuYWdlciIpOworICAgICAgICBpbnNlcnRFbnRyeSggaSwgIjEyMzQ1Njc4OTAiLCBjb25uKTsKKyAgICAgICAgaWYgKGkgLyAxMCA9PSAwICkgeworICAgICAgICAgICAgcXVlcnlUYWJsZSggY29ubiApOworICAgICAgICB9CisgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgfQorICAgICAgICBlbmRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS1FbmQgdGVzdDItLS0tLS0tLS0tLS0tLSIpOworCisgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGRzTm9ybWFsLmdldENvbm5lY3Rpb24oInN5c3RlbSIsIm1hbmFnZXIiKTsKKyAgICAgICAgZW1wdHlUYWJsZShjb25uKTsKKyAgICAgICAgY29ubi5jbG9zZSgpOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKGNvbm4gIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICB9CiAgICAgICAgIGlmIChwYXNzZWQpIHsKLQkgICAgcmV0dXJuIChlbmRUaW1lIC0gc3RhcnRUaW1lKS8xMDAwOwotCX0KLQlyZXR1cm4gLTE7CisgICAgICAgIHJldHVybiAoZW5kVGltZSAtIHN0YXJ0VGltZSkvMTAwMDsKKyAgICB9CisgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnNlcnRFbnRyeSggaW50IGlkLCBTdHJpbmcgcGhvbmUsIENvbm5lY3Rpb24gY29uICkKICAgICAgICAgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JCi0gICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHN0bXQgPSBjb24ucHJlcGFyZVN0YXRlbWVudCgKLQkgICAgImluc2VydCBpbnRvIE9fQ3VzdG9tZXIgdmFsdWVzICg/LCA/KSIgKTsKIAotCXN0bXQuc2V0SW50KDEsIGlkKTsKLQlzdG10LnNldFN0cmluZygyLCBwaG9uZSk7Ci0KLQlzdG10LmV4ZWN1dGVVcGRhdGUoKTsKLQlzdG10LmNsb3NlKCk7Ci0gICAgICAgIC8qCQogICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBzdG10ID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoCi0JICAgICJzZWxlY3QgKiBmcm9tIE9fQ3VzdG9tZXIiICk7Ci0Jc3RtdC5leGVjdXRlVXBkYXRlKCk7ICAgIAotCXN0bXQuY2xvc2UoKTsKLQkqLworICAgICAgICAiaW5zZXJ0IGludG8gT19DdXN0b21lciB2YWx1ZXMgKD8sID8pIiApOworCisgICAgc3RtdC5zZXRJbnQoMSwgaWQpOworICAgIHN0bXQuc2V0U3RyaW5nKDIsIHBob25lKTsKKworICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworICAgIHN0bXQuY2xvc2UoKTsKKyAgICAgICAgLyoKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAic2VsZWN0ICogZnJvbSBPX0N1c3RvbWVyIiApOworICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworICAgIHN0bXQuY2xvc2UoKTsKKyAgICAqLwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBlbXB0eVRhYmxlKCBDb25uZWN0aW9uIGNvbiApIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgCi0JICAgIHN0bXQuZXhlY3V0ZSgiZGVsZXRlICogZnJvbSBPX0N1c3RvbWVyIik7Ci0JICAgIHN0bXQuY2xvc2UoKTsKKworICAgICAgICBzdG10LmV4ZWN1dGUoImRlbGV0ZSAqIGZyb20gT19DdXN0b21lciIpOworICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JfQotCSAgICAKKyAgICB9CisKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcXVlcnlUYWJsZSggQ29ubmVjdGlvbiBjb24gKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIFN0YXRlbWVudCBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBSZXN1bHRTZXQgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgic2VsZWN0ICogZnJvbSBPX0N1c3RvbWVyIik7Ci0JICAgIHdoaWxlKCBycy5uZXh0KCkgKSA7Ci0JICAgIHJzLmNsb3NlKCk7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKLQl9CisgICAgICAgIFN0YXRlbWVudCBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBSZXN1bHRTZXQgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgic2VsZWN0ICogZnJvbSBPX0N1c3RvbWVyIik7CisgICAgICAgIHdoaWxlKCBycy5uZXh0KCkgKSA7CisgICAgICAgIHJzLmNsb3NlKCk7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHNwZXJmL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkc3BlcmYvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGU0OTE0ZjYuLmYyNTYwNzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkc3BlcmYvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkc3BlcmYvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHNwZXJmL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHNwZXJmL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzcGVyZi9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkc3BlcmYvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24tMS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi0xL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWEwYWY2Zi4uMjUyYTM5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi0xL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi0xL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1jdXN0b212YWwtMSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImNsYXNzZXMxMi56aXAiIHZhbHVlPSIvdG1wL2NsYXNzZXMxMi56aXAiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24tMS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uLTEvYnVpbGQueG1sCmluZGV4IDkyZWQwM2QuLjM0ZDA5ZmQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24tMS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi0xL2J1aWxkLnhtbApAQCAtMjEsOSArMjEsOSBAQAogICAgICAgICA8IUVOVElUWSBjb21tb25TZXR1cCBTWVNURU0gIi4vLi4vLi4vLi4vY29uZmlnL3Byb3BlcnRpZXMueG1sIj4KICAgICAgICAgPCFFTlRJVFkgY29tbW9uQnVpbGQgU1lTVEVNICIuLy4uLy4uLy4uL2NvbmZpZy9jb21tb24ueG1sIj4KICAgICAgICAgPCFFTlRJVFkgdGVzdHByb3BlcnRpZXMgU1lTVEVNICIuL2J1aWxkLnByb3BlcnRpZXMiPgotCTwhRU5USVRZIHJ1biBTWVNURU0gIi4vLi4vLi4vLi4vY29uZmlnL3J1bi54bWwiPgotCTwhRU5USVRZIGpkYmN4bWwgU1lTVEVNICIuLy4uL0pkYmNDb21tb24ueG1sIj4KLQk8IUVOVElUWSBqZGJjUHJvcHMgU1lTVEVNICIuLy4uL0pkYmNDb21tb24ucHJvcGVydGllcyI+CisgICAgPCFFTlRJVFkgcnVuIFNZU1RFTSAiLi8uLi8uLi8uLi9jb25maWcvcnVuLnhtbCI+CisgICAgPCFFTlRJVFkgamRiY3htbCBTWVNURU0gIi4vLi4vSmRiY0NvbW1vbi54bWwiPgorICAgIDwhRU5USVRZIGpkYmNQcm9wcyBTWVNURU0gIi4vLi4vSmRiY0NvbW1vbi5wcm9wZXJ0aWVzIj4KICAgICAgICAgXT4KIAogPHByb2plY3QgbmFtZT0ibWl4IiBkZWZhdWx0PSJ1c2FnZSIgYmFzZWRpcj0iLiI+CkBAIC02MSw4ICs2MSw4IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IioqL1NpbXBsZUJNUC5jbGFzcywgKiovU2ltcGxlQk1QSG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGphciBqYXJmaWxlPSIke2N1c3RvbS12YWxpZGF0b3ItamFyfSIgdXBkYXRlPSJ0cnVlIj4KLQkJPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgY2FzZXNlbnNpdGl2ZT0ieWVzIj4KKyAgICA8amFyIGphcmZpbGU9IiR7Y3VzdG9tLXZhbGlkYXRvci1qYXJ9IiB1cGRhdGU9InRydWUiPgorICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBjYXNlc2Vuc2l0aXZlPSJ5ZXMiPgogICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi9NeVZhbGlkYXRvci5jbGFzcyIvPgogICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgIDwvamFyPgpAQCAtODUsOCArODUsOCBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMSIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLQk8YW50Y2FsbCB0YXJnZXQ9InN0b3AtZGVyYnkiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0LWRlcmJ5Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wLWRlcmJ5Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydC1kZXJieSIvPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIyIi8+CkBAIC0xMDMsNyArMTAzLDcgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JCSAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7cG9vbG5hbWV9LnZhbGlkYXRpb25fY2xhc3NuYW1lPWNvbS5zdW4uczFhc2Rldi5qZGJjLmN1c3RvbXZhbC52YWxpZGF0b3IuTXlWYWxpZGF0b3IiLz4KKyAgICAgICAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtwb29sbmFtZX0udmFsaWRhdGlvbl9jbGFzc25hbWU9Y29tLnN1bi5zMWFzZGV2LmpkYmMuY3VzdG9tdmFsLnZhbGlkYXRvci5NeVZhbGlkYXRvciIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CkBAIC0xMTYsOCArMTE2LDggQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjMiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JPGFudGNhbGwgdGFyZ2V0PSJzdG9wLWRlcmJ5Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzdGFydC1kZXJieSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic3RvcC1kZXJieSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnQtZGVyYnkiLz4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iNCIvPgpAQCAtMTMxLDkgKzEzMSw5IEBACiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXN0dWZmIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0JPGRlbGV0ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9teXZhbGlkYXRvci5qYXIiLz4KLQk8ZGVsZXRlIGZpbGU9IiR7Y3VzdG9tLXZhbGlkYXRvci1qYXJ9Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlciIvPgorICAgIDxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvbXl2YWxpZGF0b3IuamFyIi8+CisgICAgPGRlbGV0ZSBmaWxlPSIke2N1c3RvbS12YWxpZGF0b3ItamFyfSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXIiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi0xL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24tMS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMzQwOTBkNy4uZDgyMGQ0NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi0xL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uLTEvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZUJNUEhvbWUuY2xhc3MpOwogCiAgICAgICAgIFNpbXBsZUJNUCBjb252YWxCTVAgPSBjb252YWxCTVBIb21lLmNyZWF0ZSgpOwotCXN0YXQuYWRkRGVzY3JpcHRpb24oIkN1c3RvbSBWYWxpZGF0aW9uIFRlc3QgdXNpbmcgYSBjdXN0b20gdmFsaWRhdG9yICIpOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkN1c3RvbSBWYWxpZGF0aW9uIFRlc3QgdXNpbmcgYSBjdXN0b20gdmFsaWRhdG9yICIpOwogCiAgICAgICAgIGlmIChhcmdzICE9IG51bGwgJiYgYXJncy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICBTdHJpbmcgcGFyYW0gPSBhcmdzWzBdOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi0xL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24tMS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggMzJkY2E4YS4uN2FhNGI2MCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi0xL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uLTEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDE1ICsxLDE1IEBACi1Ecm9wIHRhYmxlIE9fQ1VTVE9NRVI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ1VTVE9NRVIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1Ecm9wIHRhYmxlIERVTU1ZOw0KLQ0KLUNSRUFURSBUQUJMRSBEVU1NWSAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIERVTU1ZIFZBTFVFUygxLCAnd3h5eicpOw0KK0Ryb3AgdGFibGUgT19DVVNUT01FUjsKKworQ1JFQVRFIFRBQkxFIE9fQ1VTVE9NRVIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworRHJvcCB0YWJsZSBEVU1NWTsKKworQ1JFQVRFIFRBQkxFIERVTU1ZICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0lOU0VSVCBJTlRPIERVTU1ZIFZBTFVFUygxLCAnd3h5eicpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi0xL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uLTEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA3MGQxZmNjLi5kODU0Yjk1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uLTEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uLTEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24tMS92YWxpZGF0b3IvY29tL3N1bi9zMWFzZGV2L2pkYmMvY3VzdG9tdmFsL3ZhbGlkYXRvci9NeVZhbGlkYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi0xL3ZhbGlkYXRvci9jb20vc3VuL3MxYXNkZXYvamRiYy9jdXN0b212YWwvdmFsaWRhdG9yL015VmFsaWRhdG9yLmphdmEKaW5kZXggN2YxNWMxYy4uNjRlZmEyMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi0xL3ZhbGlkYXRvci9jb20vc3VuL3MxYXNkZXYvamRiYy9jdXN0b212YWwvdmFsaWRhdG9yL015VmFsaWRhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi0xL3ZhbGlkYXRvci9jb20vc3VuL3MxYXNkZXYvamRiYy9jdXN0b212YWwvdmFsaWRhdG9yL015VmFsaWRhdG9yLmphdmEKQEAgLTIyLDEzICsyMiwxMyBAQAogcHVibGljIGNsYXNzIE15VmFsaWRhdG9yIGltcGxlbWVudHMgQ29ubmVjdGlvblZhbGlkYXRpb24gewogCiAgICAgcHVibGljIGJvb2xlYW4gaXNDb25uZWN0aW9uVmFsaWQoQ29ubmVjdGlvbiBjb24pIHsKLQlib29sZWFuIHZhbGlkID0gZmFsc2U7Ci0JdHJ5IHsKKyAgICBib29sZWFuIHZhbGlkID0gZmFsc2U7CisgICAgdHJ5IHsKICAgICAgICAgICAgIHZhbGlkID0gaXNWYWxpZChjb24sICJzZWxlY3QgY291bnQoKikgYXMgQ09VTlQgZnJvbSBEVU1NWSIpOwotCX0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KLQlyZXR1cm4gdmFsaWQ7CisgICAgfQorICAgIHJldHVybiB2YWxpZDsKICAgICB9CiAKICAgIC8qKgpAQCAtNDAsMzIgKzQwLDMyIEBACiAgICAgKiBAdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICovCiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNWYWxpZChqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5KSB0aHJvd3MgRXhjZXB0aW9uewotCWludCBjb3VudCA9IDE7Ci0JYm9vbGVhbiB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkpIHRocm93cyBFeGNlcHRpb257CisgICAgaW50IGNvdW50ID0gMTsKKyAgICBib29sZWFuIHZhbGlkID0gZmFsc2U7CiAgICAgICAgIGlmIChjb24gPT0gbnVsbCkgewotCSAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgotCQkJICAgICAgICAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwotCX0KKyAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKKyAgICB9CiAKICAgICAgICAgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCA9IG51bGw7CiAgICAgICAgIGphdmEuc3FsLlJlc3VsdFNldCBycyA9IG51bGw7CiAgICAgICAgIHRyeSB7Ci0JICAgc3RtdCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKLQkgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCk7CisgICAgICAgc3RtdCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCk7CiAgICAgICAgICAgIHdoaWxlKHJzLm5leHQoKSkgewotCSAgICAgICBpbnQgcmVzdWx0Q291bnQgPSBycy5nZXRJbnQoIkNPVU5UIik7Ci0JICAgICAgIGlmKGNvdW50ID09IHJlc3VsdENvdW50KSB7Ci0JCSAgIHZhbGlkID0gdHJ1ZTsKKyAgICAgICAgICAgaW50IHJlc3VsdENvdW50ID0gcnMuZ2V0SW50KCJDT1VOVCIpOworICAgICAgICAgICBpZihjb3VudCA9PSByZXN1bHRDb3VudCkgeworICAgICAgICAgICB2YWxpZCA9IHRydWU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhwZWN0ZWQgY291bnQgWyIgKyBjb3VudCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgIl0gZG9lcyBub3QgbWF0Y2ggcmVzdWx0WyIgKyByZXN1bHRDb3VudCArICJdIik7Ci0JCSAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KIAotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIHRocm93IG5ldyBFeGNlcHRpb24oc3FsZSk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIHNxbGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihzcWxlKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYgKHJzICE9IG51bGwpIHsKQEAgLTc5LDYgKzc5LDYgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZTIpIHt9CiAgICAgICAgIH0KLQlyZXR1cm4gdmFsaWQ7CisgICAgcmV0dXJuIHZhbGlkOwogICAgIH0KLX0gICAgCit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMTQyY2VlZi4uMDU5OWViZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLWN1c3RvbXZhbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImNsYXNzZXMxMi56aXAiIHZhbHVlPSIvdG1wL2NsYXNzZXMxMi56aXAiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi9idWlsZC54bWwKaW5kZXggYjQzOTY5MC4uZGJiOTkyZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi9idWlsZC54bWwKQEAgLTIyLDggKzIyLDggQEAKICAgICAgICAgPCFFTlRJVFkgY29tbW9uQnVpbGQgU1lTVEVNICIuLy4uLy4uLy4uL2NvbmZpZy9jb21tb24ueG1sIj4KICAgICAgICAgPCFFTlRJVFkgdGVzdHByb3BlcnRpZXMgU1lTVEVNICIuL2J1aWxkLnByb3BlcnRpZXMiPgogICAgICAgICA8IUVOVElUWSBydW4gU1lTVEVNICIuLy4uLy4uLy4uL2NvbmZpZy9ydW4ueG1sIj4KLQk8IUVOVElUWSBqZGJjeG1sIFNZU1RFTSAiLi8uLi9KZGJjQ29tbW9uLnhtbCI+Ci0JPCFFTlRJVFkgamRiY1Byb3BzIFNZU1RFTSAiLi8uLi9KZGJjQ29tbW9uLnByb3BlcnRpZXMiPgorICAgIDwhRU5USVRZIGpkYmN4bWwgU1lTVEVNICIuLy4uL0pkYmNDb21tb24ueG1sIj4KKyAgICA8IUVOVElUWSBqZGJjUHJvcHMgU1lTVEVNICIuLy4uL0pkYmNDb21tb24ucHJvcGVydGllcyI+CiAgICAgICAgIF0+CiAKIDxwcm9qZWN0IG5hbWU9Im1peCIgZGVmYXVsdD0idXNhZ2UiIGJhc2VkaXI9Ii4iPgpAQCAtNzQsOCArNzQsOCBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMSIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLQk8YW50Y2FsbCB0YXJnZXQ9InN0b3AtZGVyYnkiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0LWRlcmJ5Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wLWRlcmJ5Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydC1kZXJieSIvPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIyIi8+CkBAIC0xMDUsOCArMTA1LDggQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjMiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JPGFudGNhbGwgdGFyZ2V0PSJzdG9wLWRlcmJ5Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzdGFydC1kZXJieSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic3RvcC1kZXJieSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnQtZGVyYnkiLz4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iNCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAyOWNlNGJmLi45MDg3M2Y1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKIAogICAgICAgICBTaW1wbGVCTVAgY29udmFsQk1QID0gY29udmFsQk1QSG9tZS5jcmVhdGUoKTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJDdXN0b20gVmFsaWRhdGlvbiBUZXN0cyIpOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkN1c3RvbSBWYWxpZGF0aW9uIFRlc3RzIik7CiAKICAgICAgICAgaWYgKGFyZ3MgIT0gbnVsbCAmJiBhcmdzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgIFN0cmluZyBwYXJhbSA9IGFyZ3NbMF07CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24vc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGU0OTE0ZjYuLmYyNTYwNzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24vc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24vc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24vc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZGF0YXNvdXJjZTQwL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RhdGFzb3VyY2U0MC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDc2ZWY3NDkuLjM3Nzk3MTEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZGF0YXNvdXJjZTQwL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kYXRhc291cmNlNDAvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLWRhdGFzb3VyY2U0MCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZGF0YXNvdXJjZTQwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZGF0YXNvdXJjZTQwL2J1aWxkLnhtbAppbmRleCBkZjY0ODIyLi5mNWU0YzkyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RhdGFzb3VyY2U0MC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kYXRhc291cmNlNDAvYnVpbGQueG1sCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImRzLXBvb2wiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2RzLXJlc291cmNlIi8+Ci0gCSAgICA8cGFyYW0gbmFtZT0iZGIuY2xhc3MiIHZhbHVlPSJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RGF0YVNvdXJjZTQwIi8+CisgICAgICAgICA8cGFyYW0gbmFtZT0iZGIuY2xhc3MiIHZhbHVlPSJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RGF0YVNvdXJjZTQwIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamF2YXguc3FsLkRhdGFTb3VyY2UiLz4KIAogICAgICAgICA8L2FudGNhbGw+CkBAIC0xMjAsNyArMTIwLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9InhhLXBvb2wiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3hhLXJlc291cmNlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQkKKwogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RhdGFzb3VyY2U0MC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kYXRhc291cmNlNDAvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQppbmRleCBjNmRiZTZkLi4wODM5NDVkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RhdGFzb3VyY2U0MC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZGF0YXNvdXJjZTQwL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTEwOCwxNiArMTA4LDE2IEBACiAgICAgICAgICAgICBTdHJpbmcgcGh5c2ljYWxDb25uZWN0aW9uMiA9ICgoKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpIGRzKS5nZXRDb25uZWN0aW9uKGNvbm4pKS50b1N0cmluZygpOwogCiAgICAgICAgICAgICAvL0Vuc3VyZSB0aGF0IGJvdGggdGhlIGNvbm5lY3Rpb25zIGFyZSB0aGUgc2FtZS4KLSAJCVN5c3RlbS5vdXQucHJpbnRsbigiUGh5c2ljYWxDb25uIDEgOiAiICsgcGh5c2ljYWxDb25uZWN0aW9uMSk7CisgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBoeXNpY2FsQ29ubiAxIDogIiArIHBoeXNpY2FsQ29ubmVjdGlvbjEpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUGh5c2ljYWxDb25uIDIgOiAiICsgcGh5c2ljYWxDb25uZWN0aW9uMSk7CiAKICAgICAgICAgICAgIGlmIChwaHlzaWNhbENvbm5lY3Rpb24yLmVxdWFscyhwaHlzaWNhbENvbm5lY3Rpb24xKSkgewogICAgICAgICAgICAgICAgIHBhc3NlZCA9IHRydWU7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiUGh5c2ljYWwgQ29ubmVjdGlvbnMgYXJlIGVxdWFsIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUGh5c2ljYWwgQ29ubmVjdGlvbnMgYXJlIGVxdWFsIik7CiAgICAgICAgICAgICB9ZWxzZXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJQaHlzaWNhbCBDb25uZWN0aW9ucyBhcmUgbm90IGVxdWFsIik7Ci0JICAgIH0KLQkgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUGh5c2ljYWwgQ29ubmVjdGlvbnMgYXJlIG5vdCBlcXVhbCIpOworICAgICAgICB9CisKIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTE3OCw3ICsxNzgsNyBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGF0YVNvdXJjZSB1bndyYXAoKSBkaWQgbm90IHJldHVybiBhcHByb3ByaWF0ZSBkYi1kYXRhc291cmNlcyIpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZGF0YXNvdXJjZTQwL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZGF0YXNvdXJjZTQwL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBkM2Y1YTEyLi44YjEzNzg5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RhdGFzb3VyY2U0MC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kYXRhc291cmNlNDAvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi0NCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YuYXBwY2xpZW50L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLmFwcGNsaWVudC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGFmMjRkYWYuLjIwYmM4NWQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YuYXBwY2xpZW50L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5hcHBjbGllbnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLW1hcmtjb25uZWN0aW9uYXNiYWQueGEiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLmFwcGNsaWVudC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLmFwcGNsaWVudC9idWlsZC54bWwKaW5kZXggN2Q3NjZmMC4uNWU3NzcxZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5hcHBjbGllbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YuYXBwY2xpZW50L2J1aWxkLnhtbApAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtbG9jYWwtcG9vbC5pZGxlX3RpbWVvdXRfaW5fc2Vjb25kcz0zNjAwIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8IS0tPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CisgICAgPCEtLTxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1sb2NhbC1wb29sLnByb3BlcnR5LlVSTD1qZGJjOmRlcmJ5Oi8vbG9jYWxob3N0OjE1MjcvdGVzdGRiO3VzZXI9ZGJ1c2VyO3Bhc3N3b3JkPWRicGFzc3dvcmQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YuYXBwY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YuYXBwY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQppbmRleCBmZjBmYjUzLi5jY2YzNGI2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLmFwcGNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5hcHBjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zOCwyNyArMzgsMjcgQEAKICAgICBwdWJsaWMgdm9pZCBydW5UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKIAotCVNldDxJbnRlZ2VyPiBsb2NhbGRzU2V0ID0gbmV3IEhhc2hTZXQoKTsKLQlTZXQ8SW50ZWdlcj4gbG9jYWxkc0FmdGVyU2V0ID0gbmV3IEhhc2hTZXQoKTsKLQlpbnQgY291bnRMb2NhbGRzID0gMDsKKyAgICBTZXQ8SW50ZWdlcj4gbG9jYWxkc1NldCA9IG5ldyBIYXNoU2V0KCk7CisgICAgU2V0PEludGVnZXI+IGxvY2FsZHNBZnRlclNldCA9IG5ldyBIYXNoU2V0KCk7CisgICAgaW50IGNvdW50TG9jYWxkcyA9IDA7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQljb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlIGRzID0gKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpIGljLmxvb2t1cCgiamRiYy9sb2NhbGRhdGFzb3VyY2UiKTsKLSAgICAgICAgCi0Jc3RhdC5hZGREZXNjcmlwdGlvbigiRE1NQ0YgTWFyay1Db25uZWN0aW9uLUFzLUJhZCBBcHBjbGllbnQgIik7CisgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSBkcyA9IChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKSBpYy5sb29rdXAoImpkYmMvbG9jYWxkYXRhc291cmNlIik7CisKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJETU1DRiBNYXJrLUNvbm5lY3Rpb24tQXMtQmFkIEFwcGNsaWVudCAiKTsKIAogCi0JbG9jYWxkc1NldCA9IGdldEZyb21Mb2NhbERTKE1BWF9QT09MX1NJWkUsIGRzKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImxvY2FsZHMgPSAiICsgbG9jYWxkc1NldCk7Ci0JCi0JLy9qZGJjLWxvY2FsLXBvb2wKKyAgICBsb2NhbGRzU2V0ID0gZ2V0RnJvbUxvY2FsRFMoTUFYX1BPT0xfU0laRSwgZHMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigibG9jYWxkcyA9ICIgKyBsb2NhbGRzU2V0KTsKKworICAgIC8vamRiYy1sb2NhbC1wb29sCiAgICAgICAgIHRlc3QxKGRzKTsKIAotCWxvY2FsZHNBZnRlclNldCA9IGdldEZyb21Mb2NhbERTKE1BWF9QT09MX1NJWkUsIGRzKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImxvY2FsZHNBZnRlciA9ICIgKyBsb2NhbGRzQWZ0ZXJTZXQpOworICAgIGxvY2FsZHNBZnRlclNldCA9IGdldEZyb21Mb2NhbERTKE1BWF9QT09MX1NJWkUsIGRzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxvY2FsZHNBZnRlciA9ICIgKyBsb2NhbGRzQWZ0ZXJTZXQpOwogCi0JY291bnRMb2NhbGRzID0gY29tcGFyZUFuZEdldENvdW50KGxvY2FsZHNTZXQsIGxvY2FsZHNBZnRlclNldCk7Ci0JaWYoTUFYX1BPT0xfU0laRS1jb3VudExvY2FsZHMgPT0gNSkgeworICAgIGNvdW50TG9jYWxkcyA9IGNvbXBhcmVBbmRHZXRDb3VudChsb2NhbGRzU2V0LCBsb2NhbGRzQWZ0ZXJTZXQpOworICAgIGlmKE1BWF9QT09MX1NJWkUtY291bnRMb2NhbGRzID09IDUpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgTWFyay1Db25uZWN0aW9uLUFzLUJhZCBkZXN0cm95ZWRDb3VudCBsb2NhbGRzOiAiLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIiBNYXJrLUNvbm5lY3Rpb24tQXMtQmFkIGRlc3Ryb3llZENvdW50IGxvY2FsZHM6ICIsIHN0YXQuRkFJTCk7CkBAIC02OSwyNyArNjksMjcgQEAKIAogICAgIHB1YmxpYyBpbnQgY29tcGFyZUFuZEdldENvdW50KFNldDxJbnRlZ2VyPiBiZWZvcmVTZXQsIFNldDxJbnRlZ2VyPiBhZnRlclNldCkgewogICAgICAgICAvL2Rlbm90ZXMgdGhlIGNvdW50IG9mIGhhc2hjb2RlcyB0aGF0IG1hdGNoZWQgaW4gYm90aCBzZXRzLgotICAgICAgICBpbnQgY29udGFpbnMgPSAwOwkgICAgCi0JaWYoIWJlZm9yZVNldC5jb250YWluc0FsbChhZnRlclNldCkpIHsKKyAgICAgICAgaW50IGNvbnRhaW5zID0gMDsKKyAgICBpZighYmVmb3JlU2V0LmNvbnRhaW5zQWxsKGFmdGVyU2V0KSkgewogICAgICAgICAgICAgLy9pZiBpdCBkb2VzIG5vdCBjb250YWluIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhlIGFmdGVyIHNldAotCSAgICAvL2ZpbmQgaG93IG1hbnkgYXJlIGFic2VudCBmcm9tIHRoZSBiZWZvcmVTZXQKKyAgICAgICAgLy9maW5kIGhvdyBtYW55IGFyZSBhYnNlbnQgZnJvbSB0aGUgYmVmb3JlU2V0CiAgICAgICAgICAgICBmb3IoaW50IGFmdGVySW50IDogYWZ0ZXJTZXQpIHsKICAgICAgICAgICAgICAgICAgICAgaWYoYmVmb3JlU2V0LmNvbnRhaW5zKGFmdGVySW50KSkgewotCSAgICAgICAgICAgICAgICAgICAgY29udGFpbnMrKzsKLQkgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQkJICAgIAotCX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICB9CiAgICAgICAgIHJldHVybiBjb250YWluczsKICAgICB9CiAKICAgICBwdWJsaWMgU2V0PEludGVnZXI+IGdldEZyb21Mb2NhbERTKGludCBjb3VudCwgY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSBsb2NhbGRzMSkgewotICAgICAgICBpbnQgY29ubkhhc2hDb2RlID0gMDsJCisgICAgICAgIGludCBjb25uSGFzaENvZGUgPSAwOwogICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCVNldDxJbnRlZ2VyPiBoYXNoQ29kZVNldCA9IG5ldyBIYXNoU2V0KCk7CisgICAgU2V0PEludGVnZXI+IGhhc2hDb2RlU2V0ID0gbmV3IEhhc2hTZXQoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JICAgIHRyeSB7Ci0JCWNvbm4gPSBsb2NhbGRzMS5nZXROb25UeENvbm5lY3Rpb24oKTsKLQkJY29ubkhhc2hDb2RlID0gKGxvY2FsZHMxLmdldENvbm5lY3Rpb24oY29ubikpLmhhc2hDb2RlKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgIGNvbm4gPSBsb2NhbGRzMS5nZXROb25UeENvbm5lY3Rpb24oKTsKKyAgICAgICAgY29ubkhhc2hDb2RlID0gKGxvY2FsZHMxLmdldENvbm5lY3Rpb24oY29ubikpLmhhc2hDb2RlKCk7CiAgICAgICAgICAgICAgICAgaGFzaENvZGVTZXQuYWRkKGNvbm5IYXNoQ29kZSk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogCkBAIC0xMDEsOCArMTAxLDggQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLQl9Ci0JcmV0dXJuIGhhc2hDb2RlU2V0OworICAgIH0KKyAgICByZXR1cm4gaGFzaENvZGVTZXQ7CiAgICAgfQogCiAgICAgLyogUmVhZCBPcGVyYXRpb24gLSBEcml2ZXIgIC0gc2hhcmVhYmxlICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLmFwcGNsaWVudC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLmFwcGNsaWVudC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZGNjMzIxYy4uZmE4NDE2MSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5hcHBjbGllbnQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YuYXBwY2xpZW50L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSwyOSArMSwyOSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyIChpZCBpbnRlZ2VyICwgZGVzY3JpcHRpb24gY2hhcig1MCkpOw0KLQ0KLURyb3AgdGFibGUgREVTVFJPWUVEX0lORk87DQotDQotQ1JFQVRFIFRBQkxFIERFU1RST1lFRF9JTkZPICh0ZXN0X25hbWUgdmFyY2hhcigyMCksIHBvb2xfbmFtZSB2YXJjaGFyKDMwKSwgbnVtX2Rlc19jb3VudCBpbnRlZ2VyKTsNCi0NCi1pbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MScsICdqZGJjLXVuc2hhcmVhYmxlLXBvb2wnLCA1KTsNCi1pbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MicsICdqZGJjLXVuc2hhcmVhYmxlLXBvb2wnLCA1KTsNCi1pbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MycsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgNSk7DQotaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDQnLCAnamRiYy1zaGFyZWFibGUtcG9vbCcsIDUpOw0KLWluc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3Q1JywgJ2pkYmMtdW5zaGFyZWFibGUtcG9vbCcsIDUpOw0KLWluc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3Q2JywgJ2pkYmMtdW5zaGFyZWFibGUtcG9vbCcsIDUpOw0KLWluc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3Q3JywgJ2pkYmMtc2hhcmVhYmxlLXBvb2wnLCAxKTsNCi1pbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0OCcsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgMSk7DQotaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDknLCAnamRiYy1zaGFyZWFibGUtcG9vbCcsIDEpOw0KLWluc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3Q5JywgJ2pkYmMtbG9jYWwtcG9vbCcsIDEpOw0KLWluc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QxMCcsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgMSk7DQotaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDEwJywgJ2pkYmMtbG9jYWwtcG9vbCcsIDEpOw0KLWluc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QxMScsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgMSk7DQotaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDExJywgJ2pkYmMtbG9jYWwtcG9vbCcsIDEpOw0KLWluc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QxMicsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgMSk7DQotaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDEyJywgJ2pkYmMtbG9jYWwtcG9vbCcsIDEpOw0KLQ0KLWRyb3AgdGFibGUgb3duZXI7DQotDQotY3JlYXRlIHRhYmxlIG93bmVyICggaWQgaW50ZWdlciwgZGVzY3JpcHRpb24gY2hhcig1MCkpOw0KLQ0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKGlkIGludGVnZXIgLCBkZXNjcmlwdGlvbiBjaGFyKDUwKSk7CisKK0Ryb3AgdGFibGUgREVTVFJPWUVEX0lORk87CisKK0NSRUFURSBUQUJMRSBERVNUUk9ZRURfSU5GTyAodGVzdF9uYW1lIHZhcmNoYXIoMjApLCBwb29sX25hbWUgdmFyY2hhcigzMCksIG51bV9kZXNfY291bnQgaW50ZWdlcik7CisKK2luc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QxJywgJ2pkYmMtdW5zaGFyZWFibGUtcG9vbCcsIDUpOworaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDInLCAnamRiYy11bnNoYXJlYWJsZS1wb29sJywgNSk7CitpbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MycsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgNSk7CitpbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0NCcsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgNSk7CitpbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0NScsICdqZGJjLXVuc2hhcmVhYmxlLXBvb2wnLCA1KTsKK2luc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3Q2JywgJ2pkYmMtdW5zaGFyZWFibGUtcG9vbCcsIDUpOworaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDcnLCAnamRiYy1zaGFyZWFibGUtcG9vbCcsIDEpOworaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDgnLCAnamRiYy1zaGFyZWFibGUtcG9vbCcsIDEpOworaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDknLCAnamRiYy1zaGFyZWFibGUtcG9vbCcsIDEpOworaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDknLCAnamRiYy1sb2NhbC1wb29sJywgMSk7CitpbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MTAnLCAnamRiYy1zaGFyZWFibGUtcG9vbCcsIDEpOworaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDEwJywgJ2pkYmMtbG9jYWwtcG9vbCcsIDEpOworaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDExJywgJ2pkYmMtc2hhcmVhYmxlLXBvb2wnLCAxKTsKK2luc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QxMScsICdqZGJjLWxvY2FsLXBvb2wnLCAxKTsKK2luc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QxMicsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgMSk7CitpbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MTInLCAnamRiYy1sb2NhbC1wb29sJywgMSk7CisKK2Ryb3AgdGFibGUgb3duZXI7CisKK2NyZWF0ZSB0YWJsZSBvd25lciAoIGlkIGludGVnZXIsIGRlc2NyaXB0aW9uIGNoYXIoNTApKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5hcHBjbGllbnQvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YuYXBwY2xpZW50L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggYTVlYTJmOC4uZDg3ZDVkZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5hcHBjbGllbnQvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLmFwcGNsaWVudC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xLDIgKzEsMiBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLWRyb3AgdGFibGUgb3duZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworZHJvcCB0YWJsZSBvd25lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YubWFya2Nvbm5lY3Rpb25hc2JhZC54YS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5tYXJrY29ubmVjdGlvbmFzYmFkLnhhL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYWYyNGRhZi4uMjBiYzg1ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5tYXJrY29ubmVjdGlvbmFzYmFkLnhhL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5tYXJrY29ubmVjdGlvbmFzYmFkLnhhL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1tYXJrY29ubmVjdGlvbmFzYmFkLnhhIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5tYXJrY29ubmVjdGlvbmFzYmFkLnhhL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YubWFya2Nvbm5lY3Rpb25hc2JhZC54YS9idWlsZC54bWwKaW5kZXggOTNlNjBjOC4uNDk4YWQ1NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5tYXJrY29ubmVjdGlvbmFzYmFkLnhhL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm1hcmtjb25uZWN0aW9uYXNiYWQueGEvYnVpbGQueG1sCkBAIC0xODQsNyArMTg0LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1sb2NhbC1wb29sLmlkbGVfdGltZW91dF9pbl9zZWNvbmRzPTM2MDAiLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTwhLS08YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KKyAgICA8IS0tPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLWxvY2FsLXBvb2wucHJvcGVydHkuVVJMPWpkYmM6ZGVyYnk6Ly9sb2NhbGhvc3Q6MTUyNy90ZXN0ZGI7dXNlcj1kYnVzZXI7cGFzc3dvcmQ9ZGJwYXNzd29yZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5tYXJrY29ubmVjdGlvbmFzYmFkLnhhL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YubWFya2Nvbm5lY3Rpb25hc2JhZC54YS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMjhhY2JlOS4uN2M4NzIyZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5tYXJrY29ubmVjdGlvbmFzYmFkLnhhL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm1hcmtjb25uZWN0aW9uYXNiYWQueGEvY2xpZW50L0NsaWVudC5qYXZhCkBAIC00OCwyMSArNDgsMjEgQEAKIAogICAgICAgICAgICAgc3dpdGNoIChJbnRlZ2VyLnBhcnNlSW50KHBhcmFtKSkgewogICAgICAgICAgICAgICAgIGNhc2UgMTogey8vb2xkIG1ldGhvZAotCQkgICAgY2xpZW50LnJ1bk5vbkFNWFRlc3QoKTsKLQkJICAgIGJyZWFrOwotCQl9Ci0JCWNhc2UgMjogeyAvL3VzaW5nIGFteAorICAgICAgICAgICAgY2xpZW50LnJ1bk5vbkFNWFRlc3QoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgMjogeyAvL3VzaW5nIGFteAogICAgICAgICAgICAgICAgICAgICBjbGllbnQucnVuVGVzdCgpOwotCQkgICAgYnJlYWs7Ci0JCX0KLQkgICAgfQotCX0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuTm9uQU1YVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotCVNldDxJbnRlZ2VyPiBsb2NhbGRzU2V0ID0gbmV3IEhhc2hTZXQoKTsKLQlTZXQ8SW50ZWdlcj4gbG9jYWxkc0FmdGVyU2V0ID0gbmV3IEhhc2hTZXQoKTsKLQlpbnQgY291bnRMb2NhbGRzID0gMDsKKyAgICBTZXQ8SW50ZWdlcj4gbG9jYWxkc1NldCA9IG5ldyBIYXNoU2V0KCk7CisgICAgU2V0PEludGVnZXI+IGxvY2FsZHNBZnRlclNldCA9IG5ldyBIYXNoU2V0KCk7CisgICAgaW50IGNvdW50TG9jYWxkcyA9IDA7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQk1QSG9tZSIpOwpAQCAtNzMsMTcgKzczLDE3IEBACiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkRNTUNGIE1hcmstQ29ubmVjdGlvbi1Bcy1CYWQgTm9uQU1YICIpOwogCiAKLQlsb2NhbGRzU2V0ID0gc2ltcGxlQk1QLmdldEZyb21Mb2NhbERTKE1BWF9QT09MX1NJWkUpOwotCVN5c3RlbS5vdXQucHJpbnRsbigibG9jYWxkcyA9ICIgKyBsb2NhbGRzU2V0KTsKLQkKLQkvL2pkYmMtbG9jYWwtcG9vbAorICAgIGxvY2FsZHNTZXQgPSBzaW1wbGVCTVAuZ2V0RnJvbUxvY2FsRFMoTUFYX1BPT0xfU0laRSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJsb2NhbGRzID0gIiArIGxvY2FsZHNTZXQpOworCisgICAgLy9qZGJjLWxvY2FsLXBvb2wKICAgICAgICAgc2ltcGxlQk1QLnRlc3QwKCk7CiAKLQlsb2NhbGRzQWZ0ZXJTZXQgPSBzaW1wbGVCTVAuZ2V0RnJvbUxvY2FsRFMoTUFYX1BPT0xfU0laRSk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJsb2NhbGRzQWZ0ZXIgPSAiICsgbG9jYWxkc0FmdGVyU2V0KTsKKyAgICBsb2NhbGRzQWZ0ZXJTZXQgPSBzaW1wbGVCTVAuZ2V0RnJvbUxvY2FsRFMoTUFYX1BPT0xfU0laRSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJsb2NhbGRzQWZ0ZXIgPSAiICsgbG9jYWxkc0FmdGVyU2V0KTsKIAotCWNvdW50TG9jYWxkcyA9IGNvbXBhcmVBbmRHZXRDb3VudChsb2NhbGRzU2V0LCBsb2NhbGRzQWZ0ZXJTZXQpOwotCWlmKE1BWF9QT09MX1NJWkUtY291bnRMb2NhbGRzID09IDUpIHsKKyAgICBjb3VudExvY2FsZHMgPSBjb21wYXJlQW5kR2V0Q291bnQobG9jYWxkc1NldCwgbG9jYWxkc0FmdGVyU2V0KTsKKyAgICBpZihNQVhfUE9PTF9TSVpFLWNvdW50TG9jYWxkcyA9PSA1KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIERNTUNGIE1hcmstQ29ubmVjdGlvbi1Bcy1CYWQgZGVzdHJveWVkQ291bnQgbG9jYWxkczogIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgRE1NQ0YgTWFyay1Db25uZWN0aW9uLUFzLUJhZCBkZXN0cm95ZWRDb3VudCBsb2NhbGRzOiAiLCBzdGF0LkZBSUwpOwpAQCAtMTY1LDE0ICsxNjUsMTQgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgRE1NQ0YgTWFyay1Db25uZWN0aW9uLUFzLUJhZCBbTG9jYWwtWEEgLVNoYXJlYWJsZS1TaGFyZWFibGUgLSBSZWFkLVdyaXRlXSA6ICIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotICAgICAgICAgaWYgKHNpbXBsZUJNUC50ZXN0MTEoKSAmJiBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgiamRiYy1zaGFyZWFibGUtcG9vbCIpID09IDE1ICYmIAorICAgICAgICAgaWYgKHNpbXBsZUJNUC50ZXN0MTEoKSAmJiBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgiamRiYy1zaGFyZWFibGUtcG9vbCIpID09IDE1ICYmCiAgICAgICAgICAgICAgICAgIGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCJqZGJjLWxvY2FsLXBvb2wiKSA9PSAzKSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIERNTUNGIE1hcmstQ29ubmVjdGlvbi1Bcy1CYWQgW0xvY2FsLVhBIC1TaGFyZWFibGUtU2hhcmVhYmxlIC0gUmVhZC1SZWFkXSA6ICIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIERNTUNGIE1hcmstQ29ubmVjdGlvbi1Bcy1CYWQgW0xvY2FsLVhBIC1TaGFyZWFibGUtU2hhcmVhYmxlIC0gUmVhZC1SZWFkXSA6ICIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotICAgICAgICAgaWYgKHNpbXBsZUJNUC50ZXN0MTIoKSAmJiBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgiamRiYy1zaGFyZWFibGUtcG9vbCIpID09IDE2ICYmIAorICAgICAgICAgaWYgKHNpbXBsZUJNUC50ZXN0MTIoKSAmJiBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgiamRiYy1zaGFyZWFibGUtcG9vbCIpID09IDE2ICYmCiAgICAgICAgICAgICAgICAgIGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCJqZGJjLWxvY2FsLXBvb2wiKSA9PSA0KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIERNTUNGIE1hcmstQ29ubmVjdGlvbi1Bcy1CYWQgW0xvY2FsLVhBIC1TaGFyZWFibGUtU2hhcmVhYmxlIC0gV3JpdGUtUmVhZF0gOiAiLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTg2LDMzICsxODYsMzMgQEAKIAogICAgIHB1YmxpYyBpbnQgY29tcGFyZUFuZEdldENvdW50KFNldDxJbnRlZ2VyPiBiZWZvcmVTZXQsIFNldDxJbnRlZ2VyPiBhZnRlclNldCkgewogICAgICAgICAvL2Rlbm90ZXMgdGhlIGNvdW50IG9mIGhhc2hjb2RlcyB0aGF0IG1hdGNoZWQgaW4gYm90aCBzZXRzLgotICAgICAgICBpbnQgY29udGFpbnMgPSAwOwkgICAgCi0JaWYoIWJlZm9yZVNldC5jb250YWluc0FsbChhZnRlclNldCkpIHsKKyAgICAgICAgaW50IGNvbnRhaW5zID0gMDsKKyAgICBpZighYmVmb3JlU2V0LmNvbnRhaW5zQWxsKGFmdGVyU2V0KSkgewogICAgICAgICAgICAgLy9pZiBpdCBkb2VzIG5vdCBjb250YWluIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhlIGFmdGVyIHNldAotCSAgICAvL2ZpbmQgaG93IG1hbnkgYXJlIGFic2VudCBmcm9tIHRoZSBiZWZvcmVTZXQKKyAgICAgICAgLy9maW5kIGhvdyBtYW55IGFyZSBhYnNlbnQgZnJvbSB0aGUgYmVmb3JlU2V0CiAgICAgICAgICAgICBmb3IoaW50IGFmdGVySW50IDogYWZ0ZXJTZXQpIHsKICAgICAgICAgICAgICAgICAgICAgaWYoYmVmb3JlU2V0LmNvbnRhaW5zKGFmdGVySW50KSkgewotCSAgICAgICAgICAgICAgICAgICAgY29udGFpbnMrKzsKLQkgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQkJICAgIAotCX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICB9CiAgICAgICAgIHJldHVybiBjb250YWluczsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKFN0cmluZyBwb29sTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLQlmaW5hbCBTdHJpbmcgdXJsU3RyID0gInNlcnZpY2U6am14OnJtaTovLy9qbmRpL3JtaTovLyIgKyBIT1NUX05BTUUgKyAiOiIgKyBKTVhfUE9SVCArICIvam14cm1pIjsgICAgCisgICAgZmluYWwgU3RyaW5nIHVybFN0ciA9ICJzZXJ2aWNlOmpteDpybWk6Ly8vam5kaS9ybWk6Ly8iICsgSE9TVF9OQU1FICsgIjoiICsgSk1YX1BPUlQgKyAiL2pteHJtaSI7CiAgICAgICAgIGZpbmFsIEpNWFNlcnZpY2VVUkwgdXJsID0gbmV3IEpNWFNlcnZpY2VVUkwodXJsU3RyKTsKIAotCWZpbmFsIEpNWENvbm5lY3RvciBqbXhDb25uID0gSk1YQ29ubmVjdG9yRmFjdG9yeS5jb25uZWN0KHVybCk7Ci0JZmluYWwgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBqbXhDb25uLmdldE1CZWFuU2VydmVyQ29ubmVjdGlvbigpOworICAgIGZpbmFsIEpNWENvbm5lY3RvciBqbXhDb25uID0gSk1YQ29ubmVjdG9yRmFjdG9yeS5jb25uZWN0KHVybCk7CisgICAgZmluYWwgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBqbXhDb25uLmdldE1CZWFuU2VydmVyQ29ubmVjdGlvbigpOwogCiAgICAgICAgIE9iamVjdE5hbWUgb2JqZWN0TmFtZSA9CiAgICAgICAgICAgICAgICAgbmV3IE9iamVjdE5hbWUoImFteDpwcD0vbW9uL3NlcnZlci1tb25bc2VydmVyXSx0eXBlPWpkYmMtY29ubmVjdGlvbi1wb29sLW1vbixuYW1lPXJlc291cmNlcy8iICsgcG9vbE5hbWUpOwogCi0JamF2YXgubWFuYWdlbWVudC5vcGVubWJlYW4uQ29tcG9zaXRlRGF0YVN1cHBvcnQgcmV0dXJuVmFsdWUgPSAKLQkJKGphdmF4Lm1hbmFnZW1lbnQub3Blbm1iZWFuLkNvbXBvc2l0ZURhdGFTdXBwb3J0KSAKLQkJY29ubmVjdGlvbi5nZXRBdHRyaWJ1dGUob2JqZWN0TmFtZSwgTlVNX0NPTl9ERVNUUk9ZRURfQ09VTlQpOworICAgIGphdmF4Lm1hbmFnZW1lbnQub3Blbm1iZWFuLkNvbXBvc2l0ZURhdGFTdXBwb3J0IHJldHVyblZhbHVlID0KKyAgICAgICAgKGphdmF4Lm1hbmFnZW1lbnQub3Blbm1iZWFuLkNvbXBvc2l0ZURhdGFTdXBwb3J0KQorICAgICAgICBjb25uZWN0aW9uLmdldEF0dHJpYnV0ZShvYmplY3ROYW1lLCBOVU1fQ09OX0RFU1RST1lFRF9DT1VOVCk7CiAKICAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKHJldHVyblZhbHVlLmdldCgiY291bnQiKS50b1N0cmluZygpKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm1hcmtjb25uZWN0aW9uYXNiYWQueGEvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YubWFya2Nvbm5lY3Rpb25hc2JhZC54YS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDBlNmY1MDEuLjZmMGU4YTggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YubWFya2Nvbm5lY3Rpb25hc2JhZC54YS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YubWFya2Nvbm5lY3Rpb25hc2JhZC54YS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC01MSwxMyArNTEsMTMgQEAKIAogCiAgICAgcHVibGljIFNldDxJbnRlZ2VyPiBnZXRGcm9tTG9jYWxEUyhpbnQgY291bnQpIHsKLSAgICAgICAgaW50IGNvbm5IYXNoQ29kZSA9IDA7CQorICAgICAgICBpbnQgY29ubkhhc2hDb2RlID0gMDsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlTZXQ8SW50ZWdlcj4gaGFzaENvZGVTZXQgPSBuZXcgSGFzaFNldCgpOworICAgIFNldDxJbnRlZ2VyPiBoYXNoQ29kZVNldCA9IG5ldyBIYXNoU2V0KCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCSAgICB0cnkgewotCQljb25uID0gbG9jYWxkcy5nZXROb25UeENvbm5lY3Rpb24oKTsKLQkJY29ubkhhc2hDb2RlID0gKGxvY2FsZHMuZ2V0Q29ubmVjdGlvbihjb25uKSkuaGFzaENvZGUoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGxvY2FsZHMuZ2V0Tm9uVHhDb25uZWN0aW9uKCk7CisgICAgICAgIGNvbm5IYXNoQ29kZSA9IChsb2NhbGRzLmdldENvbm5lY3Rpb24oY29ubikpLmhhc2hDb2RlKCk7CiAgICAgICAgICAgICAgICAgaGFzaENvZGVTZXQuYWRkKGNvbm5IYXNoQ29kZSk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogCkBAIC02OSw4ICs2OSw4IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0JfQotCXJldHVybiBoYXNoQ29kZVNldDsKKyAgICB9CisgICAgcmV0dXJuIGhhc2hDb2RlU2V0OwogICAgIH0KIAogICAgIC8qIFJlYWQgT3BlcmF0aW9uIC0gRHJpdmVyICAtIHNoYXJlYWJsZSAqLwpAQCAtMzMyLDcgKzMzMiw3IEBACiAgICAgICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoImluc2VydCBpbnRvIG93bmVyIHZhbHVlcyAoOSwnbG9jYWxkcycpIik7CiAKICAgICAgICAgICAgIGNvbm4xID0gZHMxLmdldENvbm5lY3Rpb24oKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uMSBnb3QgIiArIGNvbm4xKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uMSBnb3QgIiArIGNvbm4xKTsKICAgICAgICAgICAgIFN0YXRlbWVudCBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgc3RtdDEuZXhlY3V0ZVVwZGF0ZSgiaW5zZXJ0IGludG8gb19jdXN0b21lciB2YWx1ZXMgKDksJ3hhZHMnKSIpOwogCkBAIC0zNTEsNyArMzUxLDcgQEAKICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICBkczEubWFya0Nvbm5lY3Rpb25Bc0JhZChjb25uMSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbm4xLmNsb3NlKCk7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm4xIGNsb3NlZCAiKyBjb25uMSk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm4xIGNsb3NlZCAiKyBjb25uMSk7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5tYXJrY29ubmVjdGlvbmFzYmFkLnhhL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YubWFya2Nvbm5lY3Rpb25hc2JhZC54YS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggMGMxODE4YS4uNzY5NGYwNyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5tYXJrY29ubmVjdGlvbmFzYmFkLnhhL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm1hcmtjb25uZWN0aW9uYXNiYWQueGEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDI5ICsxLDI5IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKGlkIGludGVnZXIgLCBkZXNjcmlwdGlvbiBjaGFyKDUwKSk7DQotDQotRHJvcCB0YWJsZSBERVNUUk9ZRURfSU5GTzsNCi0NCi1DUkVBVEUgVEFCTEUgREVTVFJPWUVEX0lORk8gKHRlc3RfbmFtZSB2YXJjaGFyKDIwKSwgcG9vbF9uYW1lIHZhcmNoYXIoMzApLCBudW1fZGVzX2NvdW50IGludGVnZXIpOw0KLQ0KLWluc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QwJywgJ2pkYmMtdW5zaGFyZWFibGUtcG9vbCcsIDUpOw0KLWluc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QyJywgJ2pkYmMtdW5zaGFyZWFibGUtcG9vbCcsIDUpOw0KLWluc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QzJywgJ2pkYmMtc2hhcmVhYmxlLXBvb2wnLCA1KTsNCi1pbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0NCcsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgNSk7DQotaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDUnLCAnamRiYy11bnNoYXJlYWJsZS1wb29sJywgNSk7DQotaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDYnLCAnamRiYy11bnNoYXJlYWJsZS1wb29sJywgNSk7DQotaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDcnLCAnamRiYy1zaGFyZWFibGUtcG9vbCcsIDEpOw0KLWluc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3Q4JywgJ2pkYmMtc2hhcmVhYmxlLXBvb2wnLCAxKTsNCi1pbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0OScsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgMSk7DQotaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDknLCAnamRiYy1sb2NhbC1wb29sJywgMSk7DQotaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDEwJywgJ2pkYmMtc2hhcmVhYmxlLXBvb2wnLCAxKTsNCi1pbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MTAnLCAnamRiYy1sb2NhbC1wb29sJywgMSk7DQotaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDExJywgJ2pkYmMtc2hhcmVhYmxlLXBvb2wnLCAxKTsNCi1pbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MTEnLCAnamRiYy1sb2NhbC1wb29sJywgMSk7DQotaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDEyJywgJ2pkYmMtc2hhcmVhYmxlLXBvb2wnLCAxKTsNCi1pbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MTInLCAnamRiYy1sb2NhbC1wb29sJywgMSk7DQotDQotZHJvcCB0YWJsZSBvd25lcjsNCi0NCi1jcmVhdGUgdGFibGUgb3duZXIgKCBpZCBpbnRlZ2VyLCBkZXNjcmlwdGlvbiBjaGFyKDUwKSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoaWQgaW50ZWdlciAsIGRlc2NyaXB0aW9uIGNoYXIoNTApKTsKKworRHJvcCB0YWJsZSBERVNUUk9ZRURfSU5GTzsKKworQ1JFQVRFIFRBQkxFIERFU1RST1lFRF9JTkZPICh0ZXN0X25hbWUgdmFyY2hhcigyMCksIHBvb2xfbmFtZSB2YXJjaGFyKDMwKSwgbnVtX2Rlc19jb3VudCBpbnRlZ2VyKTsKKworaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDAnLCAnamRiYy11bnNoYXJlYWJsZS1wb29sJywgNSk7CitpbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MicsICdqZGJjLXVuc2hhcmVhYmxlLXBvb2wnLCA1KTsKK2luc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QzJywgJ2pkYmMtc2hhcmVhYmxlLXBvb2wnLCA1KTsKK2luc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3Q0JywgJ2pkYmMtc2hhcmVhYmxlLXBvb2wnLCA1KTsKK2luc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3Q1JywgJ2pkYmMtdW5zaGFyZWFibGUtcG9vbCcsIDUpOworaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDYnLCAnamRiYy11bnNoYXJlYWJsZS1wb29sJywgNSk7CitpbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0NycsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgMSk7CitpbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0OCcsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgMSk7CitpbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0OScsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgMSk7CitpbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0OScsICdqZGJjLWxvY2FsLXBvb2wnLCAxKTsKK2luc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QxMCcsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgMSk7CitpbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MTAnLCAnamRiYy1sb2NhbC1wb29sJywgMSk7CitpbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MTEnLCAnamRiYy1zaGFyZWFibGUtcG9vbCcsIDEpOworaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDExJywgJ2pkYmMtbG9jYWwtcG9vbCcsIDEpOworaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDEyJywgJ2pkYmMtc2hhcmVhYmxlLXBvb2wnLCAxKTsKK2luc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QxMicsICdqZGJjLWxvY2FsLXBvb2wnLCAxKTsKKworZHJvcCB0YWJsZSBvd25lcjsKKworY3JlYXRlIHRhYmxlIG93bmVyICggaWQgaW50ZWdlciwgZGVzY3JpcHRpb24gY2hhcig1MCkpOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm1hcmtjb25uZWN0aW9uYXNiYWQueGEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YubWFya2Nvbm5lY3Rpb25hc2JhZC54YS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IGE1ZWEyZjguLmQ4N2Q1ZGUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YubWFya2Nvbm5lY3Rpb25hc2JhZC54YS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YubWFya2Nvbm5lY3Rpb25hc2JhZC54YS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xLDIgKzEsMiBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLWRyb3AgdGFibGUgb3duZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworZHJvcCB0YWJsZSBvd25lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi9idWlsZC54bWwKaW5kZXggY2VmNDM2ZC4uYzEyZmE0MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi9idWlsZC54bWwKQEAgLTMyLDggKzMyLDggQEAKICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5vdXRwdXQiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0ibm90eGNvbm4ub3V0cHV0IiBhY3Rpb249InN0YXJ0IiAvPgotCSAgICA8YW50IGRpcj0idGVzdDEiIHRhcmdldD0iYWxsIi8+Ci0JICAgIDxhbnQgZGlyPSJ0ZXN0MiIgdGFyZ2V0PSJhbGwiLz4KKyAgICAgICAgPGFudCBkaXI9InRlc3QxIiB0YXJnZXQ9ImFsbCIvPgorICAgICAgICA8YW50IGRpcj0idGVzdDIiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0ibm90eGNvbm4ub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTQ5LDkgKzQ5LDkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgcmVjb25maWcgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgcmVjb25maWcgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0MS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0MS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGNmNDYyNWMuLmRmZDFjYTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QxL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1kbW1jZm5vdHhjb25uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0ib3JhY2xlLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZhLnNxbC5Ecml2ZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0MS9idWlsZC54bWwKaW5kZXggMjY5YzIzYi4uMThjZWU4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0MS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0MS9idWlsZC54bWwKQEAgLTMyLDE0ICszMiwxNCBAQAogICAmdGVzdHByb3BlcnRpZXM7CiAgICZqZGJjQ29tbW9uOwogICAmamRiY0NvbW1vblByb3BzOwotICAgIAotICAgIAorCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sYnVpbGQsZGVwbG95LHJ1bix1bmRlcGxveSIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MSwyOCArNTEsMjggQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtZHJpdmVyLW9yYWNsZS1jb21tb24iPgotCSAgPHBhcmFtIG5hbWU9Im9yYWNsZS5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iJHtvcmFjbGUucmVzb3VyY2UudHlwZX0iLz4KKyAgICAgIDxwYXJhbSBuYW1lPSJvcmFjbGUucmVzb3VyY2UudHlwZSIgdmFsdWU9IiR7b3JhY2xlLnJlc291cmNlLnR5cGV9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtb3JhY2xlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLW9yYWNsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CkBAIC04MCw3ICs4MCw3IEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1vcmFjbGUtY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QxL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QxL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggY2M5YjBlOC4uYTFhYTcyOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0MS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDEvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNDksNiArNDksNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDEvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QxL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IGFmYTAyMDcuLmIwZDYzMWEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDEvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0MS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjgsMTAgKzI4LDEwIEBACiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPkRhdGFTb3VyY2U8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qZGJjL29yYWNsZXJlczwvam5kaS1uYW1lPgotCTxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KLQkgIDxuYW1lPnNjb3R0PC9uYW1lPgotCSAgPHBhc3N3b3JkPnRpZ2VyPC9wYXNzd29yZD4KLQk8L2RlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgorICAgIDxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KKyAgICAgIDxuYW1lPnNjb3R0PC9uYW1lPgorICAgICAgPHBhc3N3b3JkPnRpZ2VyPC9wYXNzd29yZD4KKyAgICA8L2RlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgPC9lamI+CiAgPC9lbnRlcnByaXNlLWJlYW5zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0MS9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDEvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKaW5kZXggNjE5ZmY4Yy4uNzY3ZDUyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0MS9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QxL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCkBAIC01NiwyNyArNTYsMjcgQEAKICAgICAgICAgICAgIGRzID0gKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpIGljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwogCiAgICAgICAgICAgICBVc2VyVHJhbnNhY3Rpb24gdHggPShVc2VyVHJhbnNhY3Rpb24pY3R4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCk7Ci0JICAgICAgdHguYmVnaW4oKTsKKyAgICAgICAgICB0eC5iZWdpbigpOwogICAgICAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgICBub1R4Q29ubiA9IGRzLmdldE5vblR4Q29ubmVjdGlvbigpOworICAgICAgICAgIG5vVHhDb25uID0gZHMuZ2V0Tm9uVHhDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIklOU0VSVCBJTlRPIE5PVFhDT05OVEFCTEUgVkFMVUVTKCdtZXRob2QxJywzKSIpOworICAgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiSU5TRVJUIElOVE8gTk9UWENPTk5UQUJMRSBWQUxVRVMoJ21ldGhvZDEnLDMpIik7CiAgICAgICAgICAgICBTdHJpbmcgcXVlcnkxID0gIlNFTEVDVCAqIEZST00gTk9UWENPTk5UQUJMRSI7CiAgICAgICAgICAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5MSk7Ci0JICAgICAgc3RtdDIgPSBub1R4Q29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICBzdG10MiA9IG5vVHhDb25uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgcnMyID0gc3RtdDIuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIE5PVFhDT05OVEFCTEUiKTsKLQkgICAKKwogICAgICAgICAgICAgaWYgKCByczIubmV4dCgpICkgewotCSAgICAgICAgcmV0dXJuIGZhbHNlOwotCSAgICAgIH0KLSAgICAgICAgICAgIAotCSAgICAgIHR4LmNvbW1pdCgpOwotCSAgICAgIHJldHVybiB0cnVlOwotCSAgICAKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICB0eC5jb21taXQoKTsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBFeGNlcHRpb24tLS0iKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBFeGNlcHRpb24tLS0iKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgaWYgKHJzICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsgcnMuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQpAQCAtODcsNzIgKzg3LDcyIEBACiAgICAgICAgICAgICBpZiAoY29ubiAhPSBudWxsICkgewogICAgICAgICAgICAgICAgIHRyeSB7Y29ubi5jbG9zZSgpO30gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAkKKwogICAgICAgICAgICAgaWYgKHJzMiAhPSBudWxsICkgewogICAgICAgICAgICAgICAgIHRyeSB7cnMyLmNsb3NlKCk7fSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChzdG10MiAhPSBudWxsICkgewogICAgICAgICAgICAgICAgIHRyeSB7c3RtdDIuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCQkKKwogICAgICAgICAgICAgaWYgKG5vVHhDb25uICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsgbm9UeENvbm4uY2xvc2UoKTsgfWNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CiAgICAgICAgICAgICB9Ci0JfQorICAgIH0KIAotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlDb25uZWN0aW9uIG5vVHhDb25uID0gbnVsbDsKKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIENvbm5lY3Rpb24gbm9UeENvbm4gPSBudWxsOwogCiAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgIGRzID0gKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CiAKICAgICAgICAgICAgIFVzZXJUcmFuc2FjdGlvbiB0eCA9KFVzZXJUcmFuc2FjdGlvbiljdHh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKLQkgICAgICB0eC5iZWdpbigpOworICAgICAgICAgIHR4LmJlZ2luKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdldHRpbmcgVFJBTlNBQ1RJT05BTCBjb25uZWN0aW9uIik7CiAgICAgICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdXRvY29tbWl0ID0+ICIgKyBjb25uLmdldEF1dG9Db21taXQoKSk7CiAKLQkgICAgICBpZiAoY29ubi5nZXRBdXRvQ29tbWl0KCkgPT0gdHJ1ZSApIHsKLQkgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCSAgICAgIH0KKyAgICAgICAgICBpZiAoY29ubi5nZXRBdXRvQ29tbWl0KCkgPT0gdHJ1ZSApIHsKKyAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0KIAotCSAgICAgIGNvbm4uY2xvc2UoKTsKLQkgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDIwOyBpKysgKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdldHRpbmcgTm9uVHggY29ubmVjdGlvbiIpOwotCSAgICAgICAgICBub1R4Q29ubiA9ICgoY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSlkcykuZ2V0Tm9uVHhDb25uZWN0aW9uKCk7Ci0gIAkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXV0b2NvbW1pdCA9PiAiICsgbm9UeENvbm4uZ2V0QXV0b0NvbW1pdCgpKTsKLQkJICAgIGlmIChub1R4Q29ubi5nZXRBdXRvQ29tbWl0KCkgPT0gZmFsc2UgKSB7Ci0JICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CQotCQkgICAgfQotCQkgICAgbm9UeENvbm4uY2xvc2UoKTsKLQkgICAgICB9CisgICAgICAgICAgY29ubi5jbG9zZSgpOworICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjA7IGkrKyApIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR2V0dGluZyBOb25UeCBjb25uZWN0aW9uIik7CisgICAgICAgICAgICAgIG5vVHhDb25uID0gKChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKWRzKS5nZXROb25UeENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdXRvY29tbWl0ID0+ICIgKyBub1R4Q29ubi5nZXRBdXRvQ29tbWl0KCkpOworICAgICAgICAgICAgaWYgKG5vVHhDb25uLmdldEF1dG9Db21taXQoKSA9PSBmYWxzZSApIHsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vVHhDb25uLmNsb3NlKCk7CisgICAgICAgICAgfQogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHZXR0aW5nIFRSQU5TQUNUSU9OQUwgY29ubmVjdGlvbiIpOwogICAgICAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXV0b2NvbW1pdCA9PiAiICsgY29ubi5nZXRBdXRvQ29tbWl0KCkpOwotCSAgICAgIGlmIChjb25uLmdldEF1dG9Db21taXQoKSA9PSB0cnVlICkgewotCSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0JICAgICAgfQotCSAgICAgIGNvbm4uY2xvc2UoKTsKLQkgICAgICB0eC5jb21taXQoKTsKKyAgICAgICAgICBpZiAoY29ubi5nZXRBdXRvQ29tbWl0KCkgPT0gdHJ1ZSApIHsKKyAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0KKyAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgICAgdHguY29tbWl0KCk7CiAKLQkgICAgICByZXR1cm4gdHJ1ZTsKLQkgICAgCisgICAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgRXhjZXB0aW9uLS0tIik7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgRXhjZXB0aW9uLS0tIik7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBmaW5hbGx5IHsKLQkgICAgdHJ5IHsKLQkJaWYgKG5vVHhDb25uICE9IG51bGwgKSB7Ci0JCSAgICBub1R4Q29ubi5jbG9zZSgpOwotCQl9Ci0JICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JfQorICAgICAgICB0cnkgeworICAgICAgICBpZiAobm9UeENvbm4gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIG5vVHhDb25uLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICB9CiAKIAogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0MS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggMDBlYjk2Yy4uMmQzZDFhMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0MS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0MS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNSArMSw1IEBACi1EUk9QIFRBQkxFIE5PVFhDT05OVEFCTEU7DQotQ1JFQVRFIFRBQkxFIE5PVFhDT05OVEFCTEUoDQotICAgIG5hbWUgY2hhcigyMCksIA0KLSAgICBudW0gaW50ZWdlcg0KLSk7DQorRFJPUCBUQUJMRSBOT1RYQ09OTlRBQkxFOworQ1JFQVRFIFRBQkxFIE5PVFhDT05OVEFCTEUoCisgICAgbmFtZSBjaGFyKDIwKSwKKyAgICBudW0gaW50ZWdlcgorKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCAwMzQ5MGQwLi43NjJhMGY2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QxL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0MS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE5PVFhDT05OVEFCTEU7DQorRHJvcCB0YWJsZSBOT1RYQ09OTlRBQkxFOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0Mi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0Mi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGNmNDYyNWMuLmRmZDFjYTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1kbW1jZm5vdHhjb25uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0ib3JhY2xlLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZhLnNxbC5Ecml2ZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0Mi9idWlsZC54bWwKaW5kZXggMjY5YzIzYi4uMThjZWU4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0Mi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0Mi9idWlsZC54bWwKQEAgLTMyLDE0ICszMiwxNCBAQAogICAmdGVzdHByb3BlcnRpZXM7CiAgICZqZGJjQ29tbW9uOwogICAmamRiY0NvbW1vblByb3BzOwotICAgIAotICAgIAorCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sYnVpbGQsZGVwbG95LHJ1bix1bmRlcGxveSIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MSwyOCArNTEsMjggQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtZHJpdmVyLW9yYWNsZS1jb21tb24iPgotCSAgPHBhcmFtIG5hbWU9Im9yYWNsZS5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iJHtvcmFjbGUucmVzb3VyY2UudHlwZX0iLz4KKyAgICAgIDxwYXJhbSBuYW1lPSJvcmFjbGUucmVzb3VyY2UudHlwZSIgdmFsdWU9IiR7b3JhY2xlLnJlc291cmNlLnR5cGV9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtb3JhY2xlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLW9yYWNsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CkBAIC04MCw3ICs4MCw3IEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1vcmFjbGUtY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggMmUwOTU2Ny4uZmZiOTgxNyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0Mi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDIvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNDksNiArNDksNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4tLT4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDIvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QyL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCmluZGV4IDNlNmM4YjkuLjIxNWZiOGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDIvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0Mi9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQpAQCAtNTYsMjggKzU2LDI4IEBACiAgICAgICAgICAgICBkcyA9IChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKSBpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKIAogICAgICAgICAgICAgVXNlclRyYW5zYWN0aW9uIHR4ID0oVXNlclRyYW5zYWN0aW9uKWN0eHRfLmdldFVzZXJUcmFuc2FjdGlvbigpOwotCSAgICAgIHR4LmJlZ2luKCk7CisgICAgICAgICAgdHguYmVnaW4oKTsKICAgICAgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCJzY290dCIsICJ0aWdlciIpOwogICAgICAgICAgICAgc3RtdCA9IGNvbm4uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJJTlNFUlQgSU5UTyBOT1RYQ09OTlRBQkxFIFZBTFVFUygnbWV0aG9kMScsMykiKTsKKyAgICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIklOU0VSVCBJTlRPIE5PVFhDT05OVEFCTEUgVkFMVUVTKCdtZXRob2QxJywzKSIpOwogICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5MSA9ICJTRUxFQ1QgKiBGUk9NIE5PVFhDT05OVEFCTEUiOwogICAgICAgICAgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeShxdWVyeTEpOwotCSAgICAgIG5vVHhDb25uID0gKChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKWRzKS5nZXROb25UeENvbm5lY3Rpb24oInNjb3R0IiwgInRpZ2VyIik7CisgICAgICAgICAgbm9UeENvbm4gPSAoKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpZHMpLmdldE5vblR4Q29ubmVjdGlvbigic2NvdHQiLCAidGlnZXIiKTsKIAotCSAgICAgIHN0bXQyID0gbm9UeENvbm4uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgc3RtdDIgPSBub1R4Q29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIHJzMiA9IHN0bXQyLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBOT1RYQ09OTlRBQkxFIik7Ci0JICAgICAgdHguY29tbWl0KCk7CisgICAgICAgICAgdHguY29tbWl0KCk7CiAgICAgICAgICAgICBpZiAoIHJzMi5uZXh0KCkgKSB7Ci0JICAgICAgICByZXR1cm4gZmFsc2U7Ci0JICAgICAgfQotICAgICAgICAgICAgCi0JICAgICAgCi0JICAgICAgcmV0dXJuIHRydWU7Ci0JICAgIAorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0KKworCisgICAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgRXhjZXB0aW9uLS0tIik7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgRXhjZXB0aW9uLS0tIik7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGlmIChycyAhPSBudWxsICkgewogICAgICAgICAgICAgICAgIHRyeSB7IHJzLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KQEAgLTg4LDIwICs4OCwyMCBAQAogICAgICAgICAgICAgaWYgKGNvbm4gIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICB0cnkge2Nvbm4uY2xvc2UoKTt9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAJCisKICAgICAgICAgICAgIGlmIChyczIgIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICB0cnkge3JzMi5jbG9zZSgpO30gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoc3RtdDIgIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICB0cnkge3N0bXQyLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAkJCisKICAgICAgICAgICAgIGlmIChub1R4Q29ubiAhPSBudWxsICkgewogICAgICAgICAgICAgICAgIHRyeSB7IG5vVHhDb25uLmNsb3NlKCk7IH1jYXRjaCggRXhjZXB0aW9uIGUxKSB7fQogICAgICAgICAgICAgfQotCX0KKyAgICB9CiAKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0Mi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCAwMGViOTZjLi4yZDNkMWEyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw1ICsxLDUgQEAKLURST1AgVEFCTEUgTk9UWENPTk5UQUJMRTsNCi1DUkVBVEUgVEFCTEUgTk9UWENPTk5UQUJMRSgNCi0gICAgbmFtZSBjaGFyKDIwKSwgDQotICAgIG51bSBpbnRlZ2VyDQotKTsNCitEUk9QIFRBQkxFIE5PVFhDT05OVEFCTEU7CitDUkVBVEUgVEFCTEUgTk9UWENPTk5UQUJMRSgKKyAgICBuYW1lIGNoYXIoMjApLAorICAgIG51bSBpbnRlZ2VyCispOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0Mi9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0Mi9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDAzNDkwZDAuLjc2MmEwZjYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDIvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QyL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgTk9UWENPTk5UQUJMRTsNCitEcm9wIHRhYmxlIE5PVFhDT05OVEFCTEU7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDQ5Mjc3Zi4uOTJhZDk1NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTggKzE1LDE4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLWRtbWNmIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YvYnVpbGQueG1sCmluZGV4IDZiOGM0MTUuLjZmZjU4OWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YvYnVpbGQueG1sCkBAIC0zMiwxNCArMzIsMTQgQEAKICAgICAmcnVuOwogCiAgICAgPHByb3BlcnR5IG5hbWU9ImV4ZWN1dGlvbi5tb2RlIiB2YWx1ZT0icGUiLz4KLSAgICAKLSAgICAKKworCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW4sdW5kZXBsb3kiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTEsMTMgKzUxLDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWRyaXZlci1jb25ucG9vbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRyaXZlci1wb29sIi8+CkBAIC02NywyOSArNjcsMjkgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRyaXZlci1wb29sIi8+Ci0JPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvZHJpdmVyUmVzIi8+CisgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvZHJpdmVyUmVzIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZHJpdmVyLXBvb2wiLz4KLQk8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9kcml2ZXJSZXMxIi8+CisgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvZHJpdmVyUmVzMSIvPgogICAgICAgPC9hbnRjYWxsPgogCi0JPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JCSAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtZHJpdmVyLXBvb2wucHJvcGVydHkuVVJMPWpkYmM6ZGVyYnk6Ly9sb2NhbGhvc3Q6MTUyNy90ZXN0ZGI7dXNlcj1kYnVzZXI7cGFzc3dvcmQ9ZGJwYXNzd29yZCIvPgorICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLWRyaXZlci1wb29sLnByb3BlcnR5LlVSTD1qZGJjOmRlcmJ5Oi8vbG9jYWxob3N0OjE1MjcvdGVzdGRiO3VzZXI9ZGJ1c2VyO3Bhc3N3b3JkPWRicGFzc3dvcmQiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KQEAgLTk4LDcgKzk4LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvZHJpdmVyUmVzIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9kcml2ZXJSZXMxIi8+CiAgICAgICA8L2FudGNhbGw+CkBAIC0xMDYsOSArMTA2LDkgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kcml2ZXItcG9vbCIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNGRiMWU2OS4uNTcwZmE2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDYgOiAiLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgIAorCiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDUzMTQ2M2IuLjVkNDE0M2IgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTQ5LDExICs0OSwxMSBAQAogICAgICAgPHRyYW5zYWN0aW9uLXR5cGU+Q29udGFpbmVyPC90cmFuc2FjdGlvbi10eXBlPgogICAgICAgPGVqYi1yZWY+CiAgICAgICAgIDxkZXNjcmlwdGlvbj48L2Rlc2NyaXB0aW9uPgotCTxlamItcmVmLW5hbWU+ZWpiL1NpbXBsZVNlc3Npb24yRUpCPC9lamItcmVmLW5hbWU+Ci0JPGVqYi1yZWYtdHlwZT5TZXNzaW9uPC9lamItcmVmLXR5cGU+CisgICAgPGVqYi1yZWYtbmFtZT5lamIvU2ltcGxlU2Vzc2lvbjJFSkI8L2VqYi1yZWYtbmFtZT4KKyAgICA8ZWpiLXJlZi10eXBlPlNlc3Npb248L2VqYi1yZWYtdHlwZT4KICAgICAgICAgPGhvbWU+Y29tLnN1bi5zMWFzZGV2LmpkYmMuZG1tY2YuZWpiLlNpbXBsZVNlc3Npb24ySG9tZTwvaG9tZT4KICAgICAgICAgPHJlbW90ZT5jb20uc3VuLnMxYXNkZXYuamRiYy5kbW1jZi5lamIuU2ltcGxlU2Vzc2lvbjI8L3JlbW90ZT4KLQk8ZWpiLWxpbms+U2ltcGxlU2Vzc2lvbjJFSkI8L2VqYi1saW5rPgorICAgIDxlamItbGluaz5TaW1wbGVTZXNzaW9uMkVKQjwvZWpiLWxpbms+CiAgICAgICA8L2VqYi1yZWY+CiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPkRhdGFTb3VyY2U8L3Jlcy1yZWYtbmFtZT4KQEAgLTk0LDYgKzk0LDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZXNOZXc8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmL2VqYi9TaW1wbGVTZXNzaW9uMkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YvZWpiL1NpbXBsZVNlc3Npb24yQmVhbi5qYXZhCmluZGV4IGE1MTBkZTQuLjIzNTkzZTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YvZWpiL1NpbXBsZVNlc3Npb24yQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YvZWpiL1NpbXBsZVNlc3Npb24yQmVhbi5qYXZhCkBAIC0yOCwxNCArMjgsMTQgQEAKIHsKIAogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY3R4dF87Ci0gICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBpY187IAorICAgIHByaXZhdGUgSW5pdGlhbENvbnRleHQgaWNfOwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgY3R4dF8gPSBjb250ZXh0OwotCXRyeSB7Ci0JICAgIGljXyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCX0gY2F0Y2goIE5hbWluZ0V4Y2VwdGlvbiBuZSApIHsKLQkgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIHRyeSB7CisgICAgICAgIGljXyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIH0gY2F0Y2goIE5hbWluZ0V4Y2VwdGlvbiBuZSApIHsKKyAgICAgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewpAQCAtNDQsNTcgKzQ0LDU3IEBACiAgICAgLyoqCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlMiIpOwotCUNvbm5lY3Rpb24gY29ubjEgPSBudWxsOwotCVN0YXRlbWVudCBzdG10MSA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzMSA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlMiIpOworICAgIENvbm5lY3Rpb24gY29ubjEgPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10MSA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzMSA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKIAotCXRyeSB7Ci0JICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBzdG10MS5leGVjdXRlVXBkYXRlKCAiVVBEQVRFIENPTk5TSEFSSU5HIFNFVCBjX3Bob25lPSdDT05OX1NIQVJJTkdfQkVBTl8yJyBXSEVSRSBjX2lkPTEwMCIpOworICAgIHRyeSB7CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBzdG10MS5leGVjdXRlVXBkYXRlKCAiVVBEQVRFIENPTk5TSEFSSU5HIFNFVCBjX3Bob25lPSdDT05OX1NIQVJJTkdfQkVBTl8yJyBXSEVSRSBjX2lkPTEwMCIpOwogCi0JICAgIHJldHVybiB0cnVlOwotCX0gY2F0Y2goIFNRTEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoc3RtdDEgIT0gbnVsbCkgeyAKLQkgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQkgICAgaWYgKGNvbm4xICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JfQotCQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGNhdGNoKCBTUUxFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKHN0bXQxICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbm4xICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KICAgICB9Ci0gICAgIAorCisgICAgfQorCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlMiIpOwotCUNvbm5lY3Rpb24gY29ubjEgPSBudWxsOwotCVN0YXRlbWVudCBzdG10MSA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzMSA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlMiIpOworICAgIENvbm5lY3Rpb24gY29ubjEgPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10MSA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzMSA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKIAotCXRyeSB7Ci0JICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBzdG10MS5leGVjdXRlVXBkYXRlKCAiVVBEQVRFIENPTk5TSEFSSU5HIFNFVCBjX3Bob25lPSdDT05OX1NIQVJJTkdfQkVBTl8yXzInIFdIRVJFIGNfaWQ9MjAwIik7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHN0bXQxLmV4ZWN1dGVVcGRhdGUoICJVUERBVEUgQ09OTlNIQVJJTkcgU0VUIGNfcGhvbmU9J0NPTk5fU0hBUklOR19CRUFOXzJfMicgV0hFUkUgY19pZD0yMDAiKTsKIAotCSAgICByZXR1cm4gdHJ1ZTsKLQl9IGNhdGNoKCBTUUxFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKHN0bXQxICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JICAgIGlmIChjb25uMSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCX0KLQkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChzdG10MSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgfQorCiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggOGNiMzE3NC4uNzIxZDllOCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNiArMSw2IEBACi1Ecm9wIHRhYmxlIENPTk5TSEFSSU5HOw0KLQ0KLUNSRUFURSBUQUJMRSBDT05OU0hBUklORyAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIGNvbnN0cmFpbnQgcGtfa2V5IHByaW1hcnkga2V5LA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigyNSkNCi0pOw0KK0Ryb3AgdGFibGUgQ09OTlNIQVJJTkc7CisKK0NSRUFURSBUQUJMRSBDT05OU0hBUklORyAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgY29uc3RyYWludCBwa19rZXkgcHJpbWFyeSBrZXksCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMjUpCispOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IGMyODE3ZjYuLjc3ZDFkNWEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgQ09OTlNIQVJJTkc7DQorRHJvcCB0YWJsZSBDT05OU0hBUklORzsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmV0Y2hvdXRvZnNlcS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNWJiYTFlYy4uZTg3ZWYwOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1mZXRjaG91dG9mc2VxIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmV0Y2hvdXRvZnNlcS9idWlsZC54bWwKaW5kZXggNjdiMmI0ZS4uYWE5OWMyZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZldGNob3V0b2ZzZXEvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MiwxMyArNTIsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1NpbXBsZUJNUC5jbGFzcywgKiovU2ltcGxlQk1QSG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1vcmFjbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC02NiwxNCArNjYsMTQgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtb3JhY2xlLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1vcmFjbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtb3JhY2xlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KQEAgLTgxLDcgKzgxLDcgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLW9yYWNsZS1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmV0Y2hvdXRvZnNlcS9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZldGNob3V0b2ZzZXEvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCmluZGV4IDI4YTdjNDAuLmY3ODVlZmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmV0Y2hvdXRvZnNlcS9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQpAQCAtMjksMzEgKzI5LDMxIEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLSAJU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7Ci0JU3RyaW5nIHRlc3RTdWl0ZSA9ICJqZGJjZmV0Y2hvdXRvZnNlcSAiOworICAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKKyAgICBTdHJpbmcgdGVzdFN1aXRlID0gImpkYmNmZXRjaG91dG9mc2VxICI7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQk1QSG9tZSIpOwotCVNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQorICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQogICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7CiAKICAgICAgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKCk7CiAKICAgICAgICAgaWYgKCBzaW1wbGVCTVAudGVzdDEoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQlpZiAoIHNpbXBsZUJNUC50ZXN0MigpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5GQUlMKTsKLQl9CisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDIoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCJqZGJjIGZldGNob3V0b2ZzZXEgc3RhdHVzOiAiKTsKLQlzdGF0LnByaW50U3VtbWFyeSgpOwotICAgIAotICAgICAgICAKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImpkYmMgZmV0Y2hvdXRvZnNlcSBzdGF0dXM6ICIpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CisKKwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmV0Y2hvdXRvZnNlcS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggODViMDc5NS4uY2QyM2QyZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTU3LDYgKzU3LDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZldGNob3V0b2ZzZXEvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQppbmRleCBjN2Y5N2RlLi42NDA4ODNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZldGNob3V0b2ZzZXEvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZldGNob3V0b2ZzZXEvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQpAQCAtMzAsMTcgKzMwLDE3IEBACiAgICAgcHJvdGVjdGVkIERhdGFTb3VyY2UgZHM7CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgZW50aXR5Q29udGV4dCkgewotCUNvbnRleHQgY29udGV4dCA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7Ci0JfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKLQl9CisgICAgQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKKyAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgSW50ZWdlciBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKLQlyZXR1cm4gbmV3IEludGVnZXIoMSk7CisgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgewpAQCAtNjAsNDAgKzYwLDQwIEBACiAgICAgICogdXBkYXRlIiBxdWVyeS4gU2luY2UgYSBjb25uZWN0aW9uIG9idGFpbmVkIHVzaW5nIGdldE5vblR4Q29ubmVjdGlvbgogICAgICAqIGlzIG5vdCBtYW5hZ2VkICh0cmFuc2FjdGlvbi13aXNlKSwgaXRzIGF1dG9jb21taXQgaXMgc2V0IHRvIHRydWUgYnkKICAgICAgKiBkZWZhdWx0LiBTbyB0aGlzIGZhaWxzLgotICAgICAqIDIuIGdldHMgYSBjb25uZWN0aW9uIGFzIGFib3ZlIGJ1dCBzZXRzIGl0cyBhdXRvY29tbWl0IHRvIHRydWUuIFRoZSAKKyAgICAgKiAyLiBnZXRzIGEgY29ubmVjdGlvbiBhcyBhYm92ZSBidXQgc2V0cyBpdHMgYXV0b2NvbW1pdCB0byB0cnVlLiBUaGUKICAgICAgKiBxdWVyeSB3aWxsIHRoZW4gcGFzcy4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc3N1ZVF1ZXJ5KGJvb2xlYW4gYXV0b0NvbW1pdCkgewogICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCVByZXBhcmVkU3RhdGVtZW50IHN0bXQgPSBudWxsOworICAgIFByZXBhcmVkU3RhdGVtZW50IHN0bXQgPSBudWxsOwogICAgICAgICBib29sZWFuIHBhc3NlZCAgPSAoYXV0b0NvbW1pdCA/IGZhbHNlIDogdHJ1ZSk7Ci0JdHJ5IHsKLQkgICAgLy9jb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBjb25uID0gKChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKWRzKS5nZXROb25UeENvbm5lY3Rpb24oKTsKLQkgICAgaWYgKCAhYXV0b0NvbW1pdCApIHsKLQkgICAgICAgIGNvbm4uc2V0QXV0b0NvbW1pdCggZmFsc2UgKTsKLQkgICAgfQotCSAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgY19pZCwgY19waG9uZSBGUk9NIE9fQ1VTVE9NRVIgRk9SIFVQREFURSBPRiBjX2lkIik7Ci0JICAgIHN0bXQuZXhlY3V0ZVF1ZXJ5KCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgaWYgKGF1dG9Db21taXQpIHsKLQkgICAgICAgIHBhc3NlZCA9IHRydWU7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBwYXNzZWQgPSBmYWxzZTsKLQkgICAgfQotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChzdG10ICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkge3N0bXQuY2xvc2UoKTt9IGNhdGNoKEV4Y2VwdGlvbiBlMSkge30KLQkgICAgfQotCSAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IGNvbm4uY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotICAgICAgICB9IAotICAgICAgICAKLQlyZXR1cm4gcGFzc2VkOworICAgIHRyeSB7CisgICAgICAgIC8vY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgY29ubiA9ICgoY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSlkcykuZ2V0Tm9uVHhDb25uZWN0aW9uKCk7CisgICAgICAgIGlmICggIWF1dG9Db21taXQgKSB7CisgICAgICAgICAgICBjb25uLnNldEF1dG9Db21taXQoIGZhbHNlICk7CisgICAgICAgIH0KKyAgICAgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGNfaWQsIGNfcGhvbmUgRlJPTSBPX0NVU1RPTUVSIEZPUiBVUERBVEUgT0YgY19pZCIpOworICAgICAgICBzdG10LmV4ZWN1dGVRdWVyeSgpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGlmIChhdXRvQ29tbWl0KSB7CisgICAgICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoc3RtdCAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHtzdG10LmNsb3NlKCk7fSBjYXRjaChFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICB9CisKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KLSAgIAorCiAKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkge30KICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZldGNob3V0b2ZzZXEvc3FsL2NyZWF0ZV9teXNxbC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZldGNob3V0b2ZzZXEvc3FsL2NyZWF0ZV9teXNxbC5zcWwKaW5kZXggZTQ5MTRmNi4uZjI1NjA3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL3NxbC9jcmVhdGVfbXlzcWwuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmV0Y2hvdXRvZnNlcS9zcWwvY3JlYXRlX215c3FsLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmV0Y2hvdXRvZnNlcS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggNjM3YTdjNS4uYzNiMGQ1YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZldGNob3V0b2ZzZXEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDkgKzEsOSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gT19DVVNUT01FUiBWQUxVRVMgKDAsICdhYmNkJyk7DQotSU5TRVJUIElOVE8gT19DVVNUT01FUiBWQUxVRVMgKDEsICdwcXJzJyk7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBPX0NVU1RPTUVSIFZBTFVFUyAoMCwgJ2FiY2QnKTsKK0lOU0VSVCBJTlRPIE9fQ1VTVE9NRVIgVkFMVUVTICgxLCAncHFycycpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZldGNob3V0b2ZzZXEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA3MGQxZmNjLi5kODU0Yjk1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZldGNob3V0b2ZzZXEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZldGNob3V0b2ZzZXEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmx1c2hjb25uZWN0aW9ucG9vbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mbHVzaGNvbm5lY3Rpb25wb29sL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzUxYjM0OC4uNWM0YTAwYSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mbHVzaGNvbm5lY3Rpb25wb29sL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mbHVzaGNvbm5lY3Rpb25wb29sL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1mbHVzaGNvbm5lY3Rpb25wb29sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mbHVzaGNvbm5lY3Rpb25wb29sL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmx1c2hjb25uZWN0aW9ucG9vbC9idWlsZC54bWwKaW5kZXggNGI0OTRjOC4uZmUyYmUzYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mbHVzaGNvbm5lY3Rpb25wb29sL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZsdXNoY29ubmVjdGlvbnBvb2wvYnVpbGQueG1sCkBAIC03NSw3ICs3NSw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iamRiYy1mbHVzaGNvbm5lY3Rpb25wb29sLXBvb2wiLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTA4LDE0ICsxMDgsMTQgQEAKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtZmx1c2hjb25uZWN0aW9ucG9vbC1wb29sLnN0ZWFkeV9wb29sX3NpemU9MSIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLQk8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtZmx1c2hjb25uZWN0aW9ucG9vbC1wb29sLm1heF9wb29sX3NpemU9MSIvPgogICAgICAgICA8L2FudGNhbGw+CiAKIAotCTwhLS0JPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CisgICAgPCEtLSAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtZmx1c2hjb25uZWN0aW9ucG9vbC1wb29sLm1heF9jb25uZWN0aW9uX3VzYWdlX2NvdW50PTUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmx1c2hjb25uZWN0aW9ucG9vbC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mbHVzaGNvbm5lY3Rpb25wb29sL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggMDBiNjQ3MC4uMGMwYzRmNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mbHVzaGNvbm5lY3Rpb25wb29sL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mbHVzaGNvbm5lY3Rpb25wb29sL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTUyLDggKzUyLDggQEAKIAogICAgIC8qKgogICAgICAqIEFjcXVpcmUgNCBjb25uZWN0aW9ucywgY2xvc2luZyB0aGVtIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AuCi0gICAgICogQ2FjaGUgdGhlIGZpcnN0IGNvbm5lY3Rpb24sIGFuZCBiZWZvcmUgYWNxdWlyaW5nIHRoZSBsYXN0IGNvbm5lY3Rpb24sIAotICAgICAqIGRvIGEgZmx1c2ggY29ubmVjdGlvbiBwb29sLiBUaGUgNXRoIGNvbm5lY3Rpb24gZ290IGFmdGVyIHRoZSAKKyAgICAgKiBDYWNoZSB0aGUgZmlyc3QgY29ubmVjdGlvbiwgYW5kIGJlZm9yZSBhY3F1aXJpbmcgdGhlIGxhc3QgY29ubmVjdGlvbiwKKyAgICAgKiBkbyBhIGZsdXNoIGNvbm5lY3Rpb24gcG9vbC4gVGhlIDV0aCBjb25uZWN0aW9uIGdvdCBhZnRlciB0aGUKICAgICAgKiBmbHVzaCBzaG91bGQgYmUgZGlmZmVyZW50IGZyb20gdGhlIGZpcnN0IGNvbm5lY3Rpb24gZ290LgogICAgICAqCiAgICAgICogQHJldHVybiBib29sZWFuCkBAIC02OSwxMiArNjksMTIgQEAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspIHsKICAgICAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CiAgICAgICAgICAgICB0cnkgewotCQkvL0RvIGEgZmx1c2ggYW5kIHRoZW4gZ2V0IGEgY29ubmVjdGlvbiBmb3IgdGhlIGxhc3QgaXRlcmF0aW9uCi0JCWlmKGkgPT00KSB7Ci0JCSAgICBpZighZmx1c2hDb25uZWN0aW9uUG9vbCgpKSB7Ci0JCSAgICAgICAgYnJlYWs7Ci0JCSAgICB9Ci0JCX0JICAgIAorICAgICAgICAvL0RvIGEgZmx1c2ggYW5kIHRoZW4gZ2V0IGEgY29ubmVjdGlvbiBmb3IgdGhlIGxhc3QgaXRlcmF0aW9uCisgICAgICAgIGlmKGkgPT00KSB7CisgICAgICAgICAgICBpZighZmx1c2hDb25uZWN0aW9uUG9vbCgpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKippPSIgKyBpICsgImNvbm49IiArIGRzLmdldENvbm5lY3Rpb24oY29ubikpOwogCkBAIC0xMTIsNDQgKzExMiw0NCBAQAogICAgICAgICBkcyA9IHRoaXMuZHM7CiAKICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCUNvbm5lY3Rpb24gY29uID0gbnVsbDsKLQl0cnkgeworICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKKyAgICB0cnkgewogICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCX0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCX0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICB9CiAgICAgICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIGZsdXNoQ29ubmVjdGlvblBvb2woKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU2VydmljZUxvY2F0b3IgaGFiaXRhdCA9IEdsb2JhbHMuZ2V0RGVmYXVsdEhhYml0YXQoKTsKLQlHbGFzc0Zpc2ggZ2YgPSBoYWJpdGF0LmdldFNlcnZpY2UoR2xhc3NGaXNoLmNsYXNzKTsKLQlDb21tYW5kUnVubmVyIHJ1bm5lciA9IGdmLmdldENvbW1hbmRSdW5uZXIoKTsKLQlDb21tYW5kUmVzdWx0IHJlcyA9IHJ1bm5lci5ydW4oImZsdXNoLWNvbm5lY3Rpb24tcG9vbCIsIHBvb2xOYW1lKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oInJlcz0gIiArIHJlcy5nZXRPdXRwdXQoKSk7Ci0JaWYocmVzLmdldEV4aXRTdGF0dXMoKSA9PSBDb21tYW5kUmVzdWx0LkV4aXRTdGF0dXMuU1VDQ0VTUykgeworICAgIEdsYXNzRmlzaCBnZiA9IGhhYml0YXQuZ2V0U2VydmljZShHbGFzc0Zpc2guY2xhc3MpOworICAgIENvbW1hbmRSdW5uZXIgcnVubmVyID0gZ2YuZ2V0Q29tbWFuZFJ1bm5lcigpOworICAgIENvbW1hbmRSZXN1bHQgcmVzID0gcnVubmVyLnJ1bigiZmx1c2gtY29ubmVjdGlvbi1wb29sIiwgcG9vbE5hbWUpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmVzPSAiICsgcmVzLmdldE91dHB1dCgpKTsKKyAgICBpZihyZXMuZ2V0RXhpdFN0YXR1cygpID09IENvbW1hbmRSZXN1bHQuRXhpdFN0YXR1cy5TVUNDRVNTKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQl9Ci0JcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIGFteEZsdXNoQ29ubmVjdGlvblBvb2woKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgU3RyaW5nIHVybFN0ciA9ICJzZXJ2aWNlOmpteDpybWk6Ly8vam5kaS9ybWk6Ly8iICsgSE9TVF9OQU1FICsgIjoiICsgSk1YX1BPUlQgKyAiL2pteHJtaSI7CiAgICAgICAgIGZpbmFsIEpNWFNlcnZpY2VVUkwgdXJsID0gbmV3IEpNWFNlcnZpY2VVUkwodXJsU3RyKTsKLQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOworICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CiAKICAgICAgICAgZmluYWwgSk1YQ29ubmVjdG9yIGpteENvbm4gPSBKTVhDb25uZWN0b3JGYWN0b3J5LmNvbm5lY3QodXJsKTsKICAgICAgICAgZmluYWwgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBqbXhDb25uLmdldE1CZWFuU2VydmVyQ29ubmVjdGlvbigpOwogCiAgICAgICAgIE9iamVjdE5hbWUgb2JqZWN0TmFtZSA9Ci0JICAgICAgICAgICAgICAgIG5ldyBPYmplY3ROYW1lKCJhbXg6cHA9L2V4dCx0eXBlPWNvbm5lY3Rvci1ydW50aW1lLWFwaS1wcm92aWRlciIpOworICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0TmFtZSgiYW14OnBwPS9leHQsdHlwZT1jb25uZWN0b3ItcnVudGltZS1hcGktcHJvdmlkZXIiKTsKIAotCVN0cmluZ1tdIHBhcmFtcyA9IHtwb29sTmFtZX07Ci0JU3RyaW5nW10gc2lnbmF0dXJlID0ge1N0cmluZy5jbGFzcy5nZXROYW1lKCl9OworICAgIFN0cmluZ1tdIHBhcmFtcyA9IHtwb29sTmFtZX07CisgICAgU3RyaW5nW10gc2lnbmF0dXJlID0ge1N0cmluZy5jbGFzcy5nZXROYW1lKCl9OwogICAgICAgICBNYXA8U3RyaW5nLE9iamVjdD4gZmx1c2hTdGF0dXMgPSAoTWFwPFN0cmluZyxPYmplY3Q+KSBjb25uZWN0aW9uLmludm9rZShvYmplY3ROYW1lLCAiZmx1c2hDb25uZWN0aW9uUG9vbCIsIHBhcmFtcywgc2lnbmF0dXJlKTsKLQlpZihmbHVzaFN0YXR1cyAhPSBudWxsKSB7Ci0JICAgIHJlc3VsdCA9IChCb29sZWFuKSBmbHVzaFN0YXR1cy5nZXQoIkZsdXNoQ29ubmVjdGlvblBvb2xLZXkiKTsKLQl9CisgICAgaWYoZmx1c2hTdGF0dXMgIT0gbnVsbCkgeworICAgICAgICByZXN1bHQgPSAoQm9vbGVhbikgZmx1c2hTdGF0dXMuZ2V0KCJGbHVzaENvbm5lY3Rpb25Qb29sS2V5Iik7CisgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mbHVzaGNvbm5lY3Rpb25wb29sL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmx1c2hjb25uZWN0aW9ucG9vbC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggODQ2NTRhMS4uZmE1MDg2YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mbHVzaGNvbm5lY3Rpb25wb29sL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZsdXNoY29ubmVjdGlvbnBvb2wvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBmbHVzaF9jb25uZWN0aW9uX3Bvb2w7DQotDQotQ1JFQVRFIFRBQkxFIGZsdXNoX2Nvbm5lY3Rpb25fcG9vbCAoDQotICAgIGlkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgdmFsdWUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBmbHVzaF9jb25uZWN0aW9uX3Bvb2w7CisKK0NSRUFURSBUQUJMRSBmbHVzaF9jb25uZWN0aW9uX3Bvb2wgKAorICAgIGlkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICB2YWx1ZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZsdXNoY29ubmVjdGlvbnBvb2wvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmx1c2hjb25uZWN0aW9ucG9vbC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDlkNTA2ODcuLmMyNjQ5YjQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmx1c2hjb25uZWN0aW9ucG9vbC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmx1c2hjb25uZWN0aW9ucG9vbC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIGZsdXNoX2Nvbm5lY3Rpb25fcG9vbDsNCitEcm9wIHRhYmxlIGZsdXNoX2Nvbm5lY3Rpb25fcG9vbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvaW5pdC1zcWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvaW5pdC1zcWwvYnVpbGQucHJvcGVydGllcwppbmRleCAwMzM4Yzk3Li5jYmYwOWM2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2luaXQtc3FsL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9pbml0LXNxbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtaW5pdHNxbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvaW5pdC1zcWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9pbml0LXNxbC9idWlsZC54bWwKaW5kZXggMjJmYTBlNC4uYTRjYTlhZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9pbml0LXNxbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9pbml0LXNxbC9idWlsZC54bWwKQEAgLTMyLDE0ICszMiwxNCBAQAogICAmdGVzdHByb3BlcnRpZXM7CiAgICZqZGJjQ29tbW9uOwogICAmamRiY0NvbW1vblByb3BzOwotICAgIAorCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbixidWlsZCxkZXBsb3kscnVuLHVuZGVwbG95Ii8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICA8ZGVsZXRlIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTYxLDMxICs2MSwzMSBAQAogCiAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamRiYy1vcmFjbGUtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0ib3JhY2xlLnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtb3JhY2xlLXBvb2wtaW5pdHNxbCIvPgotCTxwYXJhbSBuYW1lPSJvcmFjbGUucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvb3JhY2xlcmVzLWluaXRzcWwiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3JhY2xlLnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtb3JhY2xlLXBvb2wtaW5pdHNxbCIvPgorICAgIDxwYXJhbSBuYW1lPSJvcmFjbGUucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvb3JhY2xlcmVzLWluaXRzcWwiLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JCSAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtb3JhY2xlLXBvb2wtaW5pdHNxbC5pbml0LXNxbD0nQUxURVIgU0VTU0lPTiBTRVQgTkxTX0NPTVA9TElOR1VJU1RJQyBOTFNfU09SVD1CSU5BUllfQ0knIi8+CisgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtb3JhY2xlLXBvb2wtaW5pdHNxbC5pbml0LXNxbD0nQUxURVIgU0VTU0lPTiBTRVQgTkxTX0NPTVA9TElOR1VJU1RJQyBOTFNfU09SVD1CSU5BUllfQ0knIi8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtb3JhY2xlLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZS5zcWwiLz4KKyAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlLnNxbCIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1vcmFjbGUtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0ib3JhY2xlLnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtb3JhY2xlLXBvb2wtaW5pdHNxbCIvPgotCTxwYXJhbSBuYW1lPSJvcmFjbGUucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvb3JhY2xlcmVzLWluaXRzcWwiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3JhY2xlLnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtb3JhY2xlLXBvb2wtaW5pdHNxbCIvPgorICAgIDxwYXJhbSBuYW1lPSJvcmFjbGUucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvb3JhY2xlcmVzLWluaXRzcWwiLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLW9yYWNsZS1jb21tb24iPgogICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3Auc3FsIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJydW4iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxIi8+CkBAIC0xMDAsOSArMTAwLDkgQEAKICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjIiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICA8L3RhcmdldD4KLSAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvaW5pdC1zcWwvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9pbml0LXNxbC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMjNiN2FmZS4uOWY2ZDllMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9pbml0LXNxbC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9pbml0LXNxbC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI1LDI0ICsyNSwyNCBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RTdWl0ZSA9ICJpbml0c3FsLXRlc3QiOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgSW5pdGlhbENvbnRleHQgaWM7CiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7Ci0JICAgIGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gZXgpIHsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgICAgICBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KIAogICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVTZXNzaW9uSG9tZSIpOwotCVNpbXBsZVNlc3Npb25Ib21lIHNpbXBsZVNlc3Npb25Ib21lID0gKFNpbXBsZVNlc3Npb25Ib21lKQorICAgIFNpbXBsZVNlc3Npb25Ib21lIHNpbXBsZVNlc3Npb25Ib21lID0gKFNpbXBsZVNlc3Npb25Ib21lKQogICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlU2Vzc2lvbkhvbWUuY2xhc3MpOwotCXN0YXQuYWRkRGVzY3JpcHRpb24oIlJ1bm5pbmcgaW5pdHNxbCB0ZXN0U3VpdGUgIik7CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiUnVubmluZyBpbml0c3FsIHRlc3RTdWl0ZSAiKTsKICAgICAgICAgU2ltcGxlU2Vzc2lvbiBzaW1wbGVTZXNzaW9uID0gc2ltcGxlU2Vzc2lvbkhvbWUuY3JlYXRlKCk7CiAKICAgICAgICAgaWYgKGFyZ3MgIT0gbnVsbCAmJiBhcmdzLmxlbmd0aCA+IDApIHsKQEAgLTY1LDkgKzY1LDkgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0JICAgIH0KLQl9Ci0gICAgICAgIAorICAgICAgICB9CisgICAgfQorCiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9pbml0LXNxbC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9pbml0LXNxbC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGZjNmU5ZmIuLjgwNzM1NmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvaW5pdC1zcWwvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2luaXQtc3FsL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTUxLDYgKzUxLDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9pbml0LXNxbC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvaW5pdC1zcWwvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggZmQwNDQxMi4uYTE5YWJhMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9pbml0LXNxbC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2luaXQtc3FsL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgICA8am5kaS1uYW1lPmNvbS5zdW4uczFhc2Rldi5qZGJjLmluaXRzcWwuZWpiLlNpbXBsZVNlc3Npb25Ib21lPC9qbmRpLW5hbWU+CiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPkRhdGFTb3VyY2UxPC9yZXMtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5qZGJjL29yYWNsZXJlcy1pbml0c3FsPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5qZGJjL29yYWNsZXJlcy1pbml0c3FsPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICA8L2VqYj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9pbml0LXNxbC9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvaW5pdC1zcWwvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKaW5kZXggMWUwZGI5MC4uMTdjMDJiZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9pbml0LXNxbC9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2luaXQtc3FsL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCkBAIC0zMCw3MSArMzAsNzEgQEAKIAogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY29udGV4dDsKICAgICBwcml2YXRlIEluaXRpYWxDb250ZXh0IGljOwotICAgIHByaXZhdGUgRGF0YVNvdXJjZSBkczE7IAorICAgIHByaXZhdGUgRGF0YVNvdXJjZSBkczE7CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBjdHh0KSB7CiAgICAgICAgIHRoaXMuY29udGV4dCA9IGN0eHQ7Ci0JdHJ5IHsKLQkgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZHMxID0gKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UxIik7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIG5lICkgewotCSAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZHMxID0gKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UxIik7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIG5lICkgeworICAgICAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogVGVzdCB0byBzZWxlY3QgdGhlIG5hbWVzIGZyb20gYSB0YWJsZS4gCisgICAgICogVGVzdCB0byBzZWxlY3QgdGhlIG5hbWVzIGZyb20gYSB0YWJsZS4KICAgICAgKgotICAgICAqIFRoZSByZXN1bHQgc2V0IHdvdWxkIGNvbnRhaW4gZGlmZmVyZW50IG51bWJlciBvZiByb3dzIGJhc2VkIG9uIAotICAgICAqIGEgc2Vzc2lvbiBwcm9wZXJ0eSBzZXQgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBzcWwgcGhhc2UuIAotICAgICAqIEJhc2VkIG9uIHRoZSBwcm9wZXJ0eSBzZXQsIHRoZSBudW1iZXIgb2Ygcm93cyBhcmUgY29tcGFyZWQgdG8gCisgICAgICogVGhlIHJlc3VsdCBzZXQgd291bGQgY29udGFpbiBkaWZmZXJlbnQgbnVtYmVyIG9mIHJvd3MgYmFzZWQgb24KKyAgICAgKiBhIHNlc3Npb24gcHJvcGVydHkgc2V0IGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gc3FsIHBoYXNlLgorICAgICAqIEJhc2VkIG9uIHRoZSBwcm9wZXJ0eSBzZXQsIHRoZSBudW1iZXIgb2Ygcm93cyBhcmUgY29tcGFyZWQgdG8KICAgICAgKiB0ZXN0IHRoZSBmZWF0dXJlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKGJvb2xlYW4gY2FzZVNlbnNpdGl2ZSkgewogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQgPSBudWxsOwotCVJlc3VsdFNldCBycyA9IG51bGw7Ci0JU3RyaW5nIHF1ZXJ5ID0gIlNlbGVjdCBuYW1lIGZyb20gV09SS0VSUyB3aGVyZSBuYW1lPSdKb3kgSm95JyI7Ci0JYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQlpbnQgc2l6ZSA9IDA7Ci0JdHJ5IHsKLQkgICAgY29uID0gZHMxLmdldENvbm5lY3Rpb24oKTsKLQkgICAgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeShxdWVyeSk7Ci0JICAgIGlmKHJzICE9IG51bGwpIHsKLQkJd2hpbGUocnMubmV4dCgpKSB7Ci0JCSAgICBzaXplKys7Ci0JCX0KLQkgICAgfQotCSAgICBpZihjYXNlU2Vuc2l0aXZlKSB7Ci0JICAgICAgICByZXN1bHQgPSBzaXplID09IDE7Ci0JICAgIH0gZWxzZSB7Ci0JCXJlc3VsdCA9IHNpemUgPT0gMzsKLQkgICAgfQotCX0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBleCkgewotCSAgICByZXN1bHQgPSBmYWxzZTsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSBmaW5hbGx5IHsKKyAgICBTdGF0ZW1lbnQgc3RtdCA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzID0gbnVsbDsKKyAgICBTdHJpbmcgcXVlcnkgPSAiU2VsZWN0IG5hbWUgZnJvbSBXT1JLRVJTIHdoZXJlIG5hbWU9J0pveSBKb3knIjsKKyAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOworICAgIGludCBzaXplID0gMDsKKyAgICB0cnkgeworICAgICAgICBjb24gPSBkczEuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KTsKKyAgICAgICAgaWYocnMgIT0gbnVsbCkgeworICAgICAgICB3aGlsZShycy5uZXh0KCkpIHsKKyAgICAgICAgICAgIHNpemUrKzsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmKGNhc2VTZW5zaXRpdmUpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHNpemUgPT0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0ID0gc2l6ZSA9PSAzOworICAgICAgICB9CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgaWYocnMgIT0gbnVsbCkgewotCQl0cnkgewotCQkgICAgcnMuY2xvc2UoKTsKLQkJfSBjYXRjaChFeGNlcHRpb24gZXgpIHt9Ci0JICAgIH0KLQkgICAgaWYoc3RtdCAhPSBudWxsKSB7Ci0JCXRyeSB7Ci0JCSAgICBzdG10LmNsb3NlKCk7Ci0JCX0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQotCSAgICB9Ci0JICAgIGlmKGNvbiAhPSBudWxsKSB7Ci0JCXRyeSB7Ci0JCSAgICBzdG10LmNsb3NlKCk7Ci0JCX0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQotCSAgICB9Ci0JfQotCXJldHVybiByZXN1bHQ7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBycy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkge30KKyAgICAgICAgfQorICAgICAgICBpZihzdG10ICE9IG51bGwpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN0bXQuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYoY29uICE9IG51bGwpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN0bXQuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHt9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2luaXQtc3FsL3NxbC9jcmVhdGUuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9pbml0LXNxbC9zcWwvY3JlYXRlLnNxbAppbmRleCAzNGM4ZGMxLi5mMWFhMGQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2luaXQtc3FsL3NxbC9jcmVhdGUuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvaW5pdC1zcWwvc3FsL2NyZWF0ZS5zcWwKQEAgLTEsNiArMSw2IEBACiBEUk9QIFRBQkxFIFdPUktFUlM7CiBDUkVBVEUgVEFCTEUgV09SS0VSUygKLSAgICBuYW1lIGNoYXIoMjApIAorICAgIG5hbWUgY2hhcigyMCkKICk7CiBJTlNFUlQgSU5UTyBXT1JLRVJTIFZBTFVFUygnSm95IEpveScpOwogSU5TRVJUIElOVE8gV09SS0VSUyBWQUxVRVMoJ2pveSBqb3knKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Jhc2ljL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9iYXNpYy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDZhZWU5MWYuLmM2YmQ0MWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Jhc2ljL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvYmFzaWMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTggKzE1LDE4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjNDEtZGV2dGVzdHMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Jhc2ljL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Jhc2ljL2J1aWxkLnhtbAppbmRleCA3NGJjZGYyLi4zNGNiYWNlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9iYXNpYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvYmFzaWMvYnVpbGQueG1sCkBAIC01MCwyMyArNTAsMjMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy00MS1wb29sIi8+Ci0JPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UudHlwZSIgdmFsdWU9ImphdmF4LnNxbC5YQURhdGFTb3VyY2UiLz4KLQk8cGFyYW0gbmFtZT0iZGIuY2xhc3MiIHZhbHVlPSJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50WEFEYXRhU291cmNlIi8+CisgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UudHlwZSIgdmFsdWU9ImphdmF4LnNxbC5YQURhdGFTb3VyY2UiLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIuY2xhc3MiIHZhbHVlPSJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50WEFEYXRhU291cmNlIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy00MS1wb29sIi8+Ci0JPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvNDFyZXNvdXJjZSIvPgorICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjLzQxcmVzb3VyY2UiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CkBAIC03NCwxMSArNzQsMTEgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgpAQCAtODgsMTMgKzg4LDEzIEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjLzQxcmVzb3VyY2UiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtNDEtcG9vbCIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Jhc2ljL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Jhc2ljL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA5MGNhMzczLi4xNzQzNWJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9iYXNpYy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvYmFzaWMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNSw0MyArMjUsNDMgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCi0JU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7Ci0JU3RyaW5nIHRlc3RTdWl0ZSA9ICIgSkRCQzQxIHRlc3RzIG9uIEpESzcgIjsKKworICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiIEpEQkM0MSB0ZXN0cyBvbiBKREs3ICI7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU2Vzc2lvbkhvbWUiKTsKLQlTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKKyAgICBTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZVNlc3Npb25Ib21lLmNsYXNzKTsKLSAgICAgICAgCi0Jc3RhdC5hZGREZXNjcmlwdGlvbigiUnVubmluZyBKREJDNDEgdGVzdFN1aXRlICIpOworCisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiUnVubmluZyBKREJDNDEgdGVzdFN1aXRlICIpOwogICAgICAgICBTaW1wbGVTZXNzaW9uIHNpbXBsZVNlc3Npb24gPSBzaW1wbGVTZXNzaW9uSG9tZS5jcmVhdGUoKTsKICAgICAgICAgaWYgKHNpbXBsZVNlc3Npb24udGVzdDEoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiBDb25uZWN0aW9uIEFQSS9hYm9ydCBUZXN0IDogIiAsIHN0YXQuUEFTUyApOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIDogQ29ubmVjdGlvbiBBUEkvYWJvcnQgVGVzdCA6ICIgLCBzdGF0LkZBSUwgKTsKLQl9Ci0gICAgCisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIDogQ29ubmVjdGlvbiBBUEkvYWJvcnQgVGVzdCA6ICIgLCBzdGF0LlBBU1MgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6IENvbm5lY3Rpb24gQVBJL2Fib3J0IFRlc3QgOiAiICwgc3RhdC5GQUlMICk7CisgICAgfQorCiAgICAgICAgIGlmIChzaW1wbGVTZXNzaW9uLnRlc3QyKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QyIDogQ29ubmVjdGlvbiBBUEkvYWJvcnQgdXNlcnR4IFRlc3QgOiAiICwgc3RhdC5QQVNTICk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDIgOiBDb25uZWN0aW9uIEFQSS9hYm9ydCB1c2VydHggVGVzdCA6ICIgLCBzdGF0LkZBSUwgKTsKLQl9Ci0JCisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QyIDogQ29ubmVjdGlvbiBBUEkvYWJvcnQgdXNlcnR4IFRlc3QgOiAiICwgc3RhdC5QQVNTICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDIgOiBDb25uZWN0aW9uIEFQSS9hYm9ydCB1c2VydHggVGVzdCA6ICIgLCBzdGF0LkZBSUwgKTsKKyAgICB9CisKICAgICAgICAgaWYgKHNpbXBsZVNlc3Npb24udGVzdDMoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDMgOiBEYXRhYmFzZU1ldGFEYXRhIFRlc3QgOiAiICwgc3RhdC5QQVNTICk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDMgOiBEYXRhYmFzZU1ldGFEYXRhIFRlc3QgOiAiICwgc3RhdC5GQUlMICk7Ci0JfQotICAgIAorICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MyA6IERhdGFiYXNlTWV0YURhdGEgVGVzdCA6ICIgLCBzdGF0LlBBU1MgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MyA6IERhdGFiYXNlTWV0YURhdGEgVGVzdCA6ICIgLCBzdGF0LkZBSUwgKTsKKyAgICB9CisKICAgICAgICAgaWYgKHNpbXBsZVNlc3Npb24udGVzdDQoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDQgOiBTdGF0ZW1lbnQgQVBJL0Nvbm5lY3Rpb24gYWJvcnQgdXNlcnR4IFRlc3QgOiAiICwgc3RhdC5QQVNTICk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDQgOiBTdGF0ZW1lbnQgQVBJL0Nvbm5lY3Rpb24gYWJvcnQgdXNlcnR4IFRlc3QgOiAiICwgc3RhdC5GQUlMICk7Ci0JfQotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3Q0IDogU3RhdGVtZW50IEFQSS9Db25uZWN0aW9uIGFib3J0IHVzZXJ0eCBUZXN0IDogIiAsIHN0YXQuUEFTUyApOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3Q0IDogU3RhdGVtZW50IEFQSS9Db25uZWN0aW9uIGFib3J0IHVzZXJ0eCBUZXN0IDogIiAsIHN0YXQuRkFJTCApOworICAgIH0KKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Jhc2ljL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9iYXNpYy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGRiODlkM2UuLmM0NDRhYWQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Jhc2ljL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvYmFzaWMvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNDQsOCArNDQsOCBAQAogICA8L2VudGVycHJpc2UtYmVhbnM+CiAKICAgPGFzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgCisKICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvYmFzaWMvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9iYXNpYy9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQppbmRleCAyZTBmM2YyLi42MTRkNmZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9iYXNpYy9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9iYXNpYy9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQpAQCAtMzAsMTYgKzMwLDE2IEBACiB7CiAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGN0eHRfOwotICAgIHByaXZhdGUgSW5pdGlhbENvbnRleHQgaWNfOyAKKyAgICBwcml2YXRlIEluaXRpYWxDb250ZXh0IGljXzsKICAgICBwcml2YXRlIERhdGFTb3VyY2UgZHM7CiAgICAgUHJpbnRUYXNrIHRhc2sxID0gbmV3IFByaW50VGFzaygidGhyZWFkMSIpOwogICAgIFByaW50VGFzayB0YXNrMiA9IG5ldyBQcmludFRhc2soInRocmVhZDIiKTsKICAgICBFeGVjdXRvclNlcnZpY2UgdGhyZWFkRXhlY3V0b3IgPSBFeGVjdXRvcnMubmV3Q2FjaGVkVGhyZWFkUG9vbChuZXcgVGhyZWFkRmFjdG9yeSgpIHsKLQlwdWJsaWMgVGhyZWFkIG5ld1RocmVhZChSdW5uYWJsZSByKSB7Ci0JICAgIFRocmVhZCB0aCA9IG5ldyBUaHJlYWQocik7Ci0JICAgIHRoLnNldERhZW1vbih0cnVlKTsKLQkgICAgcmV0dXJuIHRoOwotCX0KKyAgICBwdWJsaWMgVGhyZWFkIG5ld1RocmVhZChSdW5uYWJsZSByKSB7CisgICAgICAgIFRocmVhZCB0aCA9IG5ldyBUaHJlYWQocik7CisgICAgICAgIHRoLnNldERhZW1vbih0cnVlKTsKKyAgICAgICAgcmV0dXJuIHRoOworICAgIH0KICAgICB9KTsKIAogICAgIGNsYXNzIFByaW50VGFzayBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKQEAgLTU2LDI0NyArNTYsMjQ3IEBACiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIGN0eHRfID0gY29udGV4dDsKLQl0cnkgewotCSAgICBpY18gPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZHMgPSAoRGF0YVNvdXJjZSkgaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIG5lICkgewotCSAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgaWNfID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGRzID0gKERhdGFTb3VyY2UpIGljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBuZSApIHsKKyAgICAgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgIH0KIAogICAgIC8qKgotICAgICAqIFRlc3RpbmcgY29ubmVjdGlvbiBvYmplY3QgCisgICAgICogVGVzdGluZyBjb25uZWN0aW9uIG9iamVjdAogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JQ29ubmVjdGlvbiBjb24gPSBudWxsOwotCUNvbm5lY3Rpb25bXSBjb25ucyA9IG5ldyBDb25uZWN0aW9uWzMyXTsKLQlTdGF0ZW1lbnQgc3RtdCA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCXRyeSB7Ci0JICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oInNjb3R0IiwgInRpZ2VyIik7Ci0JICAgIHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOworICAgIENvbm5lY3Rpb25bXSBjb25ucyA9IG5ldyBDb25uZWN0aW9uWzMyXTsKKyAgICBTdGF0ZW1lbnQgc3RtdCA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIHRyeSB7CisgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oInNjb3R0IiwgInRpZ2VyIik7CisgICAgICAgIHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CiAKLQkgICAgLy9UcnkgZ2V0dGluZyBzY2hlbWEgZnJvbSBjb24gb2JqZWN0Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IGNvbi5nZXRTY2hlbWEoKT0iICsgY29uLmdldFNjaGVtYSgpKTsKKyAgICAgICAgLy9UcnkgZ2V0dGluZyBzY2hlbWEgZnJvbSBjb24gb2JqZWN0CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IGNvbi5nZXRTY2hlbWEoKT0iICsgY29uLmdldFNjaGVtYSgpKTsKIAotCSAgICAvL3RyeSBnZXR0aW5nIG5ldHdvcmsgdGltZW91dCBmcm9tIGNvbiBvYmplY3QKLQkgICAgdHJ5IHsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IGNvbi5nZXROZXR3b3JrVGltZW91dD0iICsgY29uLmdldE5ldHdvcmtUaW1lb3V0KCkpOwotCSAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewotCQlwYXNzZWQgPSB0cnVlOwotCQkvL0V4cGVjdGVkIGFzIHRoaXMgaXMgbm90IGltcGxlbWVudGVkIGluIGRlcmJ5IDEwLjggamRiYzQxIGRyaXZlcgotCSAgICB9CisgICAgICAgIC8vdHJ5IGdldHRpbmcgbmV0d29yayB0aW1lb3V0IGZyb20gY29uIG9iamVjdAorICAgICAgICB0cnkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gY29uLmdldE5ldHdvcmtUaW1lb3V0PSIgKyBjb24uZ2V0TmV0d29ya1RpbWVvdXQoKSk7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHBhc3NlZCA9IHRydWU7CisgICAgICAgIC8vRXhwZWN0ZWQgYXMgdGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgaW4gZGVyYnkgMTAuOCBqZGJjNDEgZHJpdmVyCisgICAgICAgIH0KIAotCSAgICAvL0ludm9rZSBhYm9ydCBvbiBjb24gb2JqZWN0Ci0JICAgIHRocmVhZEV4ZWN1dG9yLnN1Ym1pdCh0YXNrMSk7Ci0JICAgIHRocmVhZEV4ZWN1dG9yLnN1Ym1pdCh0YXNrMik7Ci0JICAgIGNvbi5hYm9ydCh0aHJlYWRFeGVjdXRvcik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWFya2VkIGNvbm5lY3Rpb24gZm9yIGFib3J0aW5nLi4uIik7Ci0JICAgIAotCSAgICAvL1RyeSB0byB1c2UgdGhlIGFib3J0ZWQgY29ubmVjdGlvbiB0byBjcmVhdGUgYSBzdGF0ZW1lbnQuIHNob3VsZCBmYWlsCi0JICAgIHRyeSB7Ci0JICAgICAgICBjb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIGV4KSB7Ci0JCXBhc3NlZCA9IHRydWU7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgc3RhdGVtZW50IGZyb20gY29uIGFmdGVyIHR4IGFib3J0IDogRmFpbGVkIDogRXhwZWN0ZWQiKTsKLQkgICAgfQotCX0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmICggc3RtdCAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgc3RtdC5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JICAgIGlmICggY29uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBjb24uY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCSAgICBmb3IoaW50IGk9MDsgaTwzMjsgaSsrKSB7Ci0JCWlmKGNvbm5zW2ldICE9IG51bGwpIHsKLQkJICAgIHRyeSB7IGNvbm5zW2ldLmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQotCQl9Ci0JICAgIH0KLQl9Ci0JcmV0dXJuIHBhc3NlZDsKKyAgICAgICAgLy9JbnZva2UgYWJvcnQgb24gY29uIG9iamVjdAorICAgICAgICB0aHJlYWRFeGVjdXRvci5zdWJtaXQodGFzazEpOworICAgICAgICB0aHJlYWRFeGVjdXRvci5zdWJtaXQodGFzazIpOworICAgICAgICBjb24uYWJvcnQodGhyZWFkRXhlY3V0b3IpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1hcmtlZCBjb25uZWN0aW9uIGZvciBhYm9ydGluZy4uLiIpOworCisgICAgICAgIC8vVHJ5IHRvIHVzZSB0aGUgYWJvcnRlZCBjb25uZWN0aW9uIHRvIGNyZWF0ZSBhIHN0YXRlbWVudC4gc2hvdWxkIGZhaWwKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBzdGF0ZW1lbnQgZnJvbSBjb24gYWZ0ZXIgdHggYWJvcnQgOiBGYWlsZWQgOiBFeHBlY3RlZCIpOworICAgICAgICB9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCBzdG10ICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10LmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoIGNvbiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgY29uLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICBmb3IoaW50IGk9MDsgaTwzMjsgaSsrKSB7CisgICAgICAgIGlmKGNvbm5zW2ldICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm5zW2ldLmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQorICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBUZXN0aW5nIGNvbm5lY3Rpb24gb2JqZWN0IGluIGEgVXNlciB0cmFuc2FjdGlvbiAKKyAgICAgKiBUZXN0aW5nIGNvbm5lY3Rpb24gb2JqZWN0IGluIGEgVXNlciB0cmFuc2FjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JQ29ubmVjdGlvbiBjb24gPSBudWxsOwotCUNvbm5lY3Rpb25bXSBjb25ucyA9IG5ldyBDb25uZWN0aW9uWzMyXTsKLQlDb25uZWN0aW9uW10gY29ubnMxID0gbmV3IENvbm5lY3Rpb25bMzJdOwotCVN0YXRlbWVudFtdIHN0bXRzMSA9IG5ldyBTdGF0ZW1lbnRbMzJdOwotCVN0YXRlbWVudCBzdG10ID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JdHJ5IHsKLQkgICAgVXNlclRyYW5zYWN0aW9uIHVzZXJ0eCA9IChVc2VyVHJhbnNhY3Rpb24pIGN0eHRfLmdldFVzZXJUcmFuc2FjdGlvbigpOworICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKKyAgICBDb25uZWN0aW9uW10gY29ubnMgPSBuZXcgQ29ubmVjdGlvblszMl07CisgICAgQ29ubmVjdGlvbltdIGNvbm5zMSA9IG5ldyBDb25uZWN0aW9uWzMyXTsKKyAgICBTdGF0ZW1lbnRbXSBzdG10czEgPSBuZXcgU3RhdGVtZW50WzMyXTsKKyAgICBTdGF0ZW1lbnQgc3RtdCA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIHRyeSB7CisgICAgICAgIFVzZXJUcmFuc2FjdGlvbiB1c2VydHggPSAoVXNlclRyYW5zYWN0aW9uKSBjdHh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKICAgICAgICAgICAgIHVzZXJ0eC5iZWdpbigpOwotCSAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCJzY290dCIsICJ0aWdlciIpOwotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiISEhISBURVNUMiBDb25IYXNoY29kZT0iICsgKCgoY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSlkcykuZ2V0Q29ubmVjdGlvbihjb24pKS5oYXNoQ29kZSgpKTsKLQkgICAgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigic2NvdHQiLCAidGlnZXIiKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIiEhISEgVEVTVDIgQ29uSGFzaGNvZGU9IiArICgoKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpZHMpLmdldENvbm5lY3Rpb24oY29uKSkuaGFzaENvZGUoKSk7CisgICAgICAgIHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CiAKLQkgICAgLy9JbnZva2UgYWJvcnQgb24gY29uIG9iamVjdAotCSAgICB0aHJlYWRFeGVjdXRvci5zdWJtaXQodGFzazEpOwotCSAgICB0aHJlYWRFeGVjdXRvci5zdWJtaXQodGFzazIpOwotCSAgICBjb24uYWJvcnQodGhyZWFkRXhlY3V0b3IpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1hcmtlZCBjb25uZWN0aW9uIGZvciBhYm9ydGluZy4uLiIpOwotCSAgICAKLQkgICAgLy9PcGVyYXRpb25zIG9uIGNvbiBvYmplY3QgYWZ0ZXIgbWFya2luZyBmb3IgYWJvcnQgaW4gYSB0eAotCSAgICAvL2JlZm9yZSB0eCBjb21taXQsIGFsbCBvcGVyYXRpb25zIG9uIGNvbiBwYXNzCisgICAgICAgIC8vSW52b2tlIGFib3J0IG9uIGNvbiBvYmplY3QKKyAgICAgICAgdGhyZWFkRXhlY3V0b3Iuc3VibWl0KHRhc2sxKTsKKyAgICAgICAgdGhyZWFkRXhlY3V0b3Iuc3VibWl0KHRhc2syKTsKKyAgICAgICAgY29uLmFib3J0KHRocmVhZEV4ZWN1dG9yKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNYXJrZWQgY29ubmVjdGlvbiBmb3IgYWJvcnRpbmcuLi4iKTsKKworICAgICAgICAvL09wZXJhdGlvbnMgb24gY29uIG9iamVjdCBhZnRlciBtYXJraW5nIGZvciBhYm9ydCBpbiBhIHR4CisgICAgICAgIC8vYmVmb3JlIHR4IGNvbW1pdCwgYWxsIG9wZXJhdGlvbnMgb24gY29uIHBhc3MKICAgICAgICAgICAgIC8vVHJ5IGdldHRpbmcgc2NoZW1hIGZyb20gY29uIG9iamVjdAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBjb24uZ2V0U2NoZW1hKCk9IiArIGNvbi5nZXRTY2hlbWEoKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IGNvbi5nZXRTY2hlbWEoKT0iICsgY29uLmdldFNjaGVtYSgpKTsKIAotCSAgICAvL3RyeSBnZXR0aW5nIG5ldHdvcmsgdGltZW91dCBmcm9tIGNvbiBvYmplY3QKLQkgICAgdHJ5IHsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IGNvbi5nZXROZXR3b3JrVGltZW91dD0iICsgY29uLmdldE5ldHdvcmtUaW1lb3V0KCkpOwotCSAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewotCQlwYXNzZWQgPSB0cnVlOwotCQkvL0V4cGVjdGVkIGFzIHRoaXMgaXMgbm90IGltcGxlbWVudGVkIGluIGRlcmJ5IDEwLjggamRiYzQxIGRyaXZlcgotCSAgICB9CisgICAgICAgIC8vdHJ5IGdldHRpbmcgbmV0d29yayB0aW1lb3V0IGZyb20gY29uIG9iamVjdAorICAgICAgICB0cnkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gY29uLmdldE5ldHdvcmtUaW1lb3V0PSIgKyBjb24uZ2V0TmV0d29ya1RpbWVvdXQoKSk7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHBhc3NlZCA9IHRydWU7CisgICAgICAgIC8vRXhwZWN0ZWQgYXMgdGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgaW4gZGVyYnkgMTAuOCBqZGJjNDEgZHJpdmVyCisgICAgICAgIH0KIAotCSAgICB1c2VydHguY29tbWl0KCk7CisgICAgICAgIHVzZXJ0eC5jb21taXQoKTsKIAotCSAgICAvL1RyeSB0byB1c2UgdGhlIGFib3J0ZWQgY29ubmVjdGlvbiB0byBjcmVhdGUgYSBzdGF0ZW1lbnQuIHNob3VsZCBmYWlsCi0JICAgIHRyeSB7Ci0JICAgICAgICBjb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIGV4KSB7Ci0JCXBhc3NlZCA9IHRydWU7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgc3RhdGVtZW50IGZyb20gY29uIGFmdGVyIHR4IGFib3J0IDogRmFpbGVkIDogRXhwZWN0ZWQiKTsKLQkgICAgfQotCX0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmICggc3RtdCAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgc3RtdC5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JICAgIGlmICggY29uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBjb24uY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCSAgICAvL1Rlc3QgdG8gZ2V0IChtYXggcG9vbCBzaXplLTEpIG5vLiBvZiBjb25uZWN0aW9ucyBhZnRlciBhIHByZXZpb3VzIGFib3J0LgotCSAgICAvL3Nob3VsZCBwYXNzIGFzIHRoZSBhYm9ydGVkIGNvbm5lY3Rpb24gaXMgZGVzdHJveWVkCi0JICAgIGZvcihpbnQgaT0wOyBpPDMyOyBpKyspIHsKLQkJaWYoaSA9PSAzMSkgewotCQkgICAgLy9MYXN0IGNvbm5lY3Rpb24gc2hvdWxkIG5vdCBiZSBnb3QKLQkJICAgIHRyeSB7Ci0JCQljb25uczFbaV0gPSBkcy5nZXRDb25uZWN0aW9uKCJzY290dCIsICJ0aWdlciIpOwotCQkgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKLQkJCXBhc3NlZCA9IHRydWU7Ci0JCSAgICB9Ci0JCX0gZWxzZSB7CisgICAgICAgIC8vVHJ5IHRvIHVzZSB0aGUgYWJvcnRlZCBjb25uZWN0aW9uIHRvIGNyZWF0ZSBhIHN0YXRlbWVudC4gc2hvdWxkIGZhaWwKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBzdGF0ZW1lbnQgZnJvbSBjb24gYWZ0ZXIgdHggYWJvcnQgOiBGYWlsZWQgOiBFeHBlY3RlZCIpOworICAgICAgICB9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCBzdG10ICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10LmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoIGNvbiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgY29uLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICAvL1Rlc3QgdG8gZ2V0IChtYXggcG9vbCBzaXplLTEpIG5vLiBvZiBjb25uZWN0aW9ucyBhZnRlciBhIHByZXZpb3VzIGFib3J0LgorICAgICAgICAvL3Nob3VsZCBwYXNzIGFzIHRoZSBhYm9ydGVkIGNvbm5lY3Rpb24gaXMgZGVzdHJveWVkCisgICAgICAgIGZvcihpbnQgaT0wOyBpPDMyOyBpKyspIHsKKyAgICAgICAgaWYoaSA9PSAzMSkgeworICAgICAgICAgICAgLy9MYXN0IGNvbm5lY3Rpb24gc2hvdWxkIG5vdCBiZSBnb3QKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb25uczFbaV0gPSBkcy5nZXRDb25uZWN0aW9uKCJzY290dCIsICJ0aWdlciIpOworICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIHBhc3NlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbm5zMVtpXSA9IGRzLmdldENvbm5lY3Rpb24oInNjb3R0IiwgInRpZ2VyIik7Ci0JCSAgICBzdG10czFbaV0gPSBjb25uczFbaV0uY3JlYXRlU3RhdGVtZW50KCk7Ci0JCX0KLQkgICAgfQotCSAgICBmb3IoaW50IGk9MDsgaTwzMjsgaSsrKSB7Ci0JCWlmKHN0bXRzMVtpXSAhPSBudWxsKSB7Ci0JCSAgICB0cnkgeyBzdG10czFbaV0uY2xvc2UoKTsgfSBjYXRjaChFeGNlcHRpb24gZXgpIHt9Ci0JCX0KLQkgICAgfQotCSAgICBmb3IoaW50IGk9MDsgaTwzMjsgaSsrKSB7Ci0JCWlmKGNvbm5zMVtpXSAhPSBudWxsKSB7Ci0JCSAgICB0cnkgeyBjb25uczFbaV0uY2xvc2UoKTsgfSBjYXRjaChFeGNlcHRpb24gZXgpIHt9Ci0JCX0KLQkgICAgfQotCX0KLQlyZXR1cm4gcGFzc2VkOworICAgICAgICAgICAgc3RtdHMxW2ldID0gY29ubnMxW2ldLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yKGludCBpPTA7IGk8MzI7IGkrKykgeworICAgICAgICBpZihzdG10czFbaV0gIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdHMxW2ldLmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQorICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yKGludCBpPTA7IGk8MzI7IGkrKykgeworICAgICAgICBpZihjb25uczFbaV0gIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubnMxW2ldLmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQorICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKICAgICAvL1Rlc3RzIERhdGFiYXNlTWV0YURhdGEKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MygpIHRocm93cyBFeGNlcHRpb24gewotCUNvbm5lY3Rpb24gY29uID0gbnVsbDsKLQlEYXRhYmFzZU1ldGFEYXRhIGRtZCA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCXRyeSB7Ci0JICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oInNjb3R0IiwgInRpZ2VyIik7Ci0JICAgIGRtZCA9IGNvbi5nZXRNZXRhRGF0YSgpOwotCSAgICAvL1Rlc3RpbmcgRGF0YWJhc2VNZXRhRGF0YQotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBkbWQuZ2VuZXJhdGVkS2V5QWx3YXlzUmV0dXJuZWQoKT0iICsgZG1kLmdlbmVyYXRlZEtleUFsd2F5c1JldHVybmVkKCkpOwotCX0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmKGNvbiE9IG51bGwpIHsKLQkJdHJ5IHsgY29uLmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQotCSAgICB9Ci0JfQotCXJldHVybiBwYXNzZWQ7CisgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOworICAgIERhdGFiYXNlTWV0YURhdGEgZG1kID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CisgICAgdHJ5IHsKKyAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigic2NvdHQiLCAidGlnZXIiKTsKKyAgICAgICAgZG1kID0gY29uLmdldE1ldGFEYXRhKCk7CisgICAgICAgIC8vVGVzdGluZyBEYXRhYmFzZU1ldGFEYXRhCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IGRtZC5nZW5lcmF0ZWRLZXlBbHdheXNSZXR1cm5lZCgpPSIgKyBkbWQuZ2VuZXJhdGVkS2V5QWx3YXlzUmV0dXJuZWQoKSk7CisgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYoY29uIT0gbnVsbCkgeworICAgICAgICB0cnkgeyBjb24uY2xvc2UoKTsgfSBjYXRjaChFeGNlcHRpb24gZXgpIHt9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBUZXN0aW5nIFN0YXRlbWVudCBvYmplY3Qgd2l0aGluIGEgdHJhbnNhY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0NCgpIHRocm93cyBFeGNlcHRpb24gewotCUNvbm5lY3Rpb24gY29ubjEgPSBudWxsOwotCVN0YXRlbWVudCBzdG10MSA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzMSA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIENvbm5lY3Rpb24gY29ubjEgPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10MSA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzMSA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwogCi0JLy9Ob3cgdHJ5IGdldHRpbmcgYSBjb25uZWN0aW9uIGFnYWluLCBidXQgd2l0aGluIGEgdHJhbnNhY3Rpb24KLQlpbnQgc2l6ZSA9IDA7Ci0JdHJ5IHsKLQkgICAgY3JlYXRlVGFibGUoKTsKLQkgICAgVXNlclRyYW5zYWN0aW9uIHR4ID0gKFVzZXJUcmFuc2FjdGlvbikgY3R4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCk7Ci0JICAgIHR4LmJlZ2luKCk7Ci0JICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigic2NvdHQiLCAidGlnZXIiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIhISEhIFRFU1Q0IENvbkhhc2hjb2RlPSIgKyAoKChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKWRzKS5nZXRDb25uZWN0aW9uKGNvbm4xKSkuaGFzaENvZGUoKSk7Ci0JICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIGluc2VydFJvdyhzdG10MSk7Ci0gICAgICAgICAgICAKLQkgICAgdGhyZWFkRXhlY3V0b3Iuc3VibWl0KHRhc2sxKTsKKyAgICAvL05vdyB0cnkgZ2V0dGluZyBhIGNvbm5lY3Rpb24gYWdhaW4sIGJ1dCB3aXRoaW4gYSB0cmFuc2FjdGlvbgorICAgIGludCBzaXplID0gMDsKKyAgICB0cnkgeworICAgICAgICBjcmVhdGVUYWJsZSgpOworICAgICAgICBVc2VyVHJhbnNhY3Rpb24gdHggPSAoVXNlclRyYW5zYWN0aW9uKSBjdHh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKKyAgICAgICAgdHguYmVnaW4oKTsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCJzY290dCIsICJ0aWdlciIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiEhISEgVEVTVDQgQ29uSGFzaGNvZGU9IiArICgoKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpZHMpLmdldENvbm5lY3Rpb24oY29ubjEpKS5oYXNoQ29kZSgpKTsKKyAgICAgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgaW5zZXJ0Um93KHN0bXQxKTsKKworICAgICAgICB0aHJlYWRFeGVjdXRvci5zdWJtaXQodGFzazEpOwogICAgICAgICAgICAgdGhyZWFkRXhlY3V0b3Iuc3VibWl0KHRhc2syKTsKIAotCSAgICAvL1Rlc3RpbmcgU3RhdGVtZW50IG9iamVjdAotCSAgICBzdG10MS5jbG9zZU9uQ29tcGxldGlvbigpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBzdG10MS5pc0Nsb3NlT25Db21wbGV0aW9uKCk9IiArIHN0bXQxLmlzQ2xvc2VPbkNvbXBsZXRpb24oKSk7Ci0JICAgIAorICAgICAgICAvL1Rlc3RpbmcgU3RhdGVtZW50IG9iamVjdAorICAgICAgICBzdG10MS5jbG9zZU9uQ29tcGxldGlvbigpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBzdG10MS5pc0Nsb3NlT25Db21wbGV0aW9uKCk9IiArIHN0bXQxLmlzQ2xvc2VPbkNvbXBsZXRpb24oKSk7CisKICAgICAgICAgICAgIGNvbm4xLmFib3J0KHRocmVhZEV4ZWN1dG9yKTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1hcmtlZCBjb25uZWN0aW9uIGZvciBhYm9ydGluZy4uLiIpOwotCSAgICBpbnNlcnRSb3coc3RtdDEpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1hcmtlZCBjb25uZWN0aW9uIGZvciBhYm9ydGluZy4uLiIpOworICAgICAgICBpbnNlcnRSb3coc3RtdDEpOwogCi0JICAgIC8vQWZ0ZXIgY29uIGFib3J0ICh3aXRoaW4gdGhlIHR4KSAKLQkgICAgc2l6ZSA9IGdldENvdW50KHN0bXQxKTsKKyAgICAgICAgLy9BZnRlciBjb24gYWJvcnQgKHdpdGhpbiB0aGUgdHgpCisgICAgICAgIHNpemUgPSBnZXRDb3VudChzdG10MSk7CiAKLQkgICAgaWYoc2l6ZSAhPSAyKSB7Ci0JCXBhc3NlZCA9IGZhbHNlOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUxFRCBhcyBzaXplIT0gMiIpOwotCSAgICB9CisgICAgICAgIGlmKHNpemUgIT0gMikgeworICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGQUlMRUQgYXMgc2l6ZSE9IDIiKTsKKyAgICAgICAgfQogCi0JICAgIHR4LmNvbW1pdCgpOworICAgICAgICB0eC5jb21taXQoKTsKIAotCSAgICB0cnkgewotCSAgICAgICAgLy9BZnRlciB0eCBjb21taXQsIGluc2VydCBkYXRhLiBTaG91bGQgZmFpbCBiZWNhdXNlIG9mIG5vIGN1cnJlbnQgY29ubmVjdGlvbgotCQlpbnNlcnRSb3coc3RtdDEpOwotCSAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBleCkgewotCQlwYXNzZWQgPSB0cnVlOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRyeWluZyB0byBpbnNlcnQgZGF0YSBhZnRlciBhIHR4IGNvbW1pdCAocHJldi4gY29ubiBhYm9ydCk6IEZhaWxlZCB3aXRoIDogIiArIGV4ICsgIiBFeHBlY3RlZC4iKTsKLQkgICAgfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgcGFzc2VkID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKHJzMSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgcnMxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQkgICAgaWYgKCBzdG10MSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCSAgICBpZiAoIGNvbm4xICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JfQotCXJldHVybiBwYXNzZWQ7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvL0FmdGVyIHR4IGNvbW1pdCwgaW5zZXJ0IGRhdGEuIFNob3VsZCBmYWlsIGJlY2F1c2Ugb2Ygbm8gY3VycmVudCBjb25uZWN0aW9uCisgICAgICAgIGluc2VydFJvdyhzdG10MSk7CisgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHBhc3NlZCA9IHRydWU7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVHJ5aW5nIHRvIGluc2VydCBkYXRhIGFmdGVyIGEgdHggY29tbWl0IChwcmV2LiBjb25uIGFib3J0KTogRmFpbGVkIHdpdGggOiAiICsgZXggKyAiIEV4cGVjdGVkLiIpOworICAgICAgICB9CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAocnMxICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyByczEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoIHN0bXQxICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBjb25uMSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVRhYmxlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUgPSAiSkRCQzQxIjsKLSAgICAgICAgCisKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwogICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IG51bGw7CiAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oInNjb3R0IiwgInRpZ2VyIik7CiAgICAgICAgIHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiZHJvcCB0YWJsZSAiICsgdGFibGVOYW1lKTsKICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBleCl7CkBAIC0zMDUsMTIgKzMwNSwxMiBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgICAgIGNvbi5jbG9zZSgpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBpbnNlcnRSb3coU3RhdGVtZW50IHN0bXQpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgdGFibGVOYW1lID0gIkpEQkM0MSI7CiAgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiSU5TRVJUIElOVE8gIiArIHRhYmxlTmFtZSArICIgdmFsdWVzICgxMDAsICdDT0ZGRUUnKSIpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgaW50IGdldENvdW50KFN0YXRlbWVudCBzdG10KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSA9ICJKREJDNDEiOwogICAgICAgICBSZXN1bHRTZXQgcnMgPSBudWxsOwpAQCAtMzIwLDcgKzMyMCw3IEBACiAgICAgICAgIHJzLmNsb3NlKCk7CiAgICAgICAgIHJldHVybiBjb3VudDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkge30KICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHt9CiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2J1aWxkLnhtbAppbmRleCAwMjU4MGEyLi5hNmIxMzc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvYnVpbGQueG1sCkBAIC0zNCwxNSArMzQsMTUgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiBpbmNsdWRlcz0idGVzdF9yZXN1bHRzKiIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPGRlbGV0ZT4KLQkgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0iIGluY2x1ZGVzPSJKREJDNDF0ZXN0X3Jlc3VsdHMuaHRtbCIvPgorICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9IkpEQkM0MXRlc3RfcmVzdWx0cy5odG1sIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi10ZXN0cyIvPgotCTxhbnRjYWxsIHRhcmdldD0icmVwb3J0LTQxIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXBvcnQtNDEiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3RzIj4KICAgICAgICAgPGFudCBkaXI9ImJhc2ljIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJjbG9zZW9uY29tcGxldGlvbi5zdG10Y2FjaGluZyIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iY2xvc2VvbmNvbXBsZXRpb24uc3RtdGNhY2hpbmciIHRhcmdldD0iYWxsIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlcG9ydC00MSI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9jbG9zZW9uY29tcGxldGlvbi5zdG10Y2FjaGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvY2xvc2VvbmNvbXBsZXRpb24uc3RtdGNhY2hpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCAyMjEzNTIxLi4zZGZlZWJkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9jbG9zZW9uY29tcGxldGlvbi5zdG10Y2FjaGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Nsb3Nlb25jb21wbGV0aW9uLnN0bXRjYWNoaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYzQxLWNsb3NlLW9uLWNvbXBsZXRpb24iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9jbG9zZW9uY29tcGxldGlvbi5zdG10Y2FjaGluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9jbG9zZW9uY29tcGxldGlvbi5zdG10Y2FjaGluZy9idWlsZC54bWwKaW5kZXggMTdhYjgzNi4uOGUyMWJlZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvY2xvc2VvbmNvbXBsZXRpb24uc3RtdGNhY2hpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Nsb3Nlb25jb21wbGV0aW9uLnN0bXRjYWNoaW5nL2J1aWxkLnhtbApAQCAtMTksOSArMTksOSBAQAogLS0+CiAKIDwhRU5USVRZIGNvbW1vblNldHVwIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvcHJvcGVydGllcy54bWwiPgotCTwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CisgICAgPCFFTlRJVFkgY29tbW9uQnVpbGQgU1lTVEVNICIuLy4uLy4uLy4uLy4uL2NvbmZpZy9jb21tb24ueG1sIj4KICAgICAgICAgPCFFTlRJVFkgdGVzdHByb3BlcnRpZXMgU1lTVEVNICIuL2J1aWxkLnByb3BlcnRpZXMiPgotCTwhRU5USVRZIHJ1biBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL3J1bi54bWwiPgorICAgIDwhRU5USVRZIHJ1biBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL3J1bi54bWwiPgogICAgICAgICBdPgogCiA8cHJvamVjdCBuYW1lPSJqZGJjNDEtY2xvc2Utb24tY29tcGxldGlvbiIgZGVmYXVsdD0idXNhZ2UiIGJhc2VkaXI9Ii4iPgpAQCAtNjksNyArNjksNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIApAQCAtOTIsMTMgKzkyLDEzIEBACiAKIAogCi0JPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXN0bXRjYWNoaW5nLXBvb2wuc3RhdGVtZW50X2NhY2hlX3NpemU9NSIvPgotCTwvYW50Y2FsbD4KKyAgICA8L2FudGNhbGw+CiAKLQk8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtc3RtdGNhY2hpbmctcG9vbC53cmFwX2pkYmNfb2JqZWN0cz10cnVlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9jbG9zZW9uY29tcGxldGlvbi5zdG10Y2FjaGluZy9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Nsb3Nlb25jb21wbGV0aW9uLnN0bXRjYWNoaW5nL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCmluZGV4IGEzMGRlN2YuLmE2MWRmMTcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Nsb3Nlb25jb21wbGV0aW9uLnN0bXRjYWNoaW5nL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Nsb3Nlb25jb21wbGV0aW9uLnN0bXRjYWNoaW5nL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgICAgIDxlamI+amRiYzQxLWNsb3NlLW9uLWNvbXBsZXRpb24tZWpiLmphcjwvZWpiPgogICAgIDwvbW9kdWxlPgogICAgIDxtb2R1bGU+Ci0JPGphdmE+amRiYzQxLWNsb3NlLW9uLWNvbXBsZXRpb24tY2xpZW50LmphcjwvamF2YT4KKyAgICA8amF2YT5qZGJjNDEtY2xvc2Utb24tY29tcGxldGlvbi1jbGllbnQuamFyPC9qYXZhPgogICAgIDwvbW9kdWxlPgogPC9hcHBsaWNhdGlvbj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvY2xvc2VvbmNvbXBsZXRpb24uc3RtdGNhY2hpbmcvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9jbG9zZW9uY29tcGxldGlvbi5zdG10Y2FjaGluZy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCA4MGNjMjZjLi4zMmE3NTQwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9jbG9zZW9uY29tcGxldGlvbi5zdG10Y2FjaGluZy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9jbG9zZW9uY29tcGxldGlvbi5zdG10Y2FjaGluZy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjcsNyArMjcsNyBAQAogICAgICAgICAgICAgPGpuZGktbmFtZT5jb20uc3VuLnMxYXNkZXYuamRiYy5zdG10Y2FjaGluZy5lamIuU2ltcGxlQk1QSG9tZTwvam5kaS1uYW1lPgogICAgICAgICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgICAgICAgICA8cmVzLXJlZi1uYW1lPkRhdGFTb3VyY2U8L3Jlcy1yZWYtbmFtZT4KLQkJPGpuZGktbmFtZT5qZGJjL2pkYmMtc3RtdGNhY2hpbmctcmVzPC9qbmRpLW5hbWU+CisgICAgICAgIDxqbmRpLW5hbWU+amRiYy9qZGJjLXN0bXRjYWNoaW5nLXJlczwvam5kaS1uYW1lPgogICAgICAgICAgICAgICAgIDxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KICAgICAgICAgICAgICAgICAgICAgPG5hbWU+REJVU0VSPC9uYW1lPgogICAgICAgICAgICAgICAgICAgICA8cGFzc3dvcmQ+REJQQVNTV09SRDwvcGFzc3dvcmQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9jbG9zZW9uY29tcGxldGlvbi5zdG10Y2FjaGluZy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvY2xvc2VvbmNvbXBsZXRpb24uc3RtdGNhY2hpbmcvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQppbmRleCA3NDQ1MjcyLi43NDZlNDFjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9jbG9zZW9uY29tcGxldGlvbi5zdG10Y2FjaGluZy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Nsb3Nlb25jb21wbGV0aW9uLnN0bXRjYWNoaW5nL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTM5LDQzICszOSw0MyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3RDbG9zZU9uQ29tcGxldGlvbigpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImNsb3NlT25Db21wbGV0aW9uIEpEQkMgNDEgdGVzdCBTdGFydCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY2xvc2VPbkNvbXBsZXRpb24gSkRCQyA0MSB0ZXN0IFN0YXJ0Iik7CiAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CiAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHN0bXQgPSBudWxsOwogICAgICAgICBTdHJpbmcgdGFibGVOYW1lID0gImN1c3RvbWVyX3N0bXRfd3JhcHBlciI7Ci0JUmVzdWx0U2V0IHJzID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMxID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMgPSBudWxsOworICAgIFJlc3VsdFNldCByczEgPSBudWxsOwogICAgICAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lICsiIHdoZXJlIGNfcGhvbmU9ID8iKTsKLQkgICAgc3RtdC5zZXRTdHJpbmcoMSwgInNoYWwiKTsKLQkgICAgc3RtdC5jbG9zZU9uQ29tcGxldGlvbigpOwotCSAgICBpZighc3RtdC5pc0Nsb3NlT25Db21wbGV0aW9uKCkpIHsKLQkJcGFzc2VkID0gZmFsc2U7Ci0JICAgIH0KLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gc3RtdC5pc0Nsb3NlT25Db21wbGV0aW9uKCk9IiArIHN0bXQuaXNDbG9zZU9uQ29tcGxldGlvbigpKTsKLQkgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgpOwotCSAgICByczEgPSBzdG10LmV4ZWN1dGVRdWVyeSgpOyAvL0dvdCBhIHNlY29uZCBycyBidXQgbm90IGNsb3NpbmcgaXQuCi0JICAgIHJzLmNsb3NlKCk7Ci0JICAgIC8vQWZ0ZXIgdGhpcyB0aGUgaXNDbG9zZWQgc2hvdWxkIG5vdCBiZSB0cnVlIGFzIGFub3RoZXIgcmVzdWx0U2V0IGlzIHN0aWxsIG9wZW4uCi0JICAgIGlmKHN0bXQuaXNDbG9zZWQoKSl7Ci0JCXBhc3NlZCA9IGZhbHNlOwotCSAgICB9Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNsb3NlZD0iICsgc3RtdC5pc0Nsb3NlZCgpKTsKLQkgICAgcnMxLmNsb3NlKCk7Ci0JICAgIC8vQm90aCB0aGUgcmVzdWx0U2V0cyBhcmUgY2xvc2VkLiBBdCB0aGlzIHN0YWdlIGlzQ2xvc2VkIHNob3VsZCBiZSB0cnVlLgotCSAgICBpZighc3RtdC5pc0Nsb3NlZCgpKXsKLQkgICAgICAgIHBhc3NlZCA9IGZhbHNlOwotCSAgICB9Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNsb3NlZD0iICsgc3RtdC5pc0Nsb3NlZCgpKTsKLQkgICAgdHJ5IHsKLQkgICAgICAgIFJlc3VsdFNldCByczIgPSBzdG10LmV4ZWN1dGVRdWVyeSgpOwotCQlyczIuY2xvc2UoKTsKLQkgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gZXgpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgb2JqZWN0IHVzZWQgYWZ0ZXIgY2xvc2VvbmNvbXBsZXRpb24gOiBleGNlcHRpb246IGV4cGVjdGVkIik7Ci0JCXBhc3NlZCA9IHRydWU7Ci0JICAgIH0KKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoMSwgInNoYWwiKTsKKyAgICAgICAgc3RtdC5jbG9zZU9uQ29tcGxldGlvbigpOworICAgICAgICBpZighc3RtdC5pc0Nsb3NlT25Db21wbGV0aW9uKCkpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gc3RtdC5pc0Nsb3NlT25Db21wbGV0aW9uKCk9IiArIHN0bXQuaXNDbG9zZU9uQ29tcGxldGlvbigpKTsKKyAgICAgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgpOworICAgICAgICByczEgPSBzdG10LmV4ZWN1dGVRdWVyeSgpOyAvL0dvdCBhIHNlY29uZCBycyBidXQgbm90IGNsb3NpbmcgaXQuCisgICAgICAgIHJzLmNsb3NlKCk7CisgICAgICAgIC8vQWZ0ZXIgdGhpcyB0aGUgaXNDbG9zZWQgc2hvdWxkIG5vdCBiZSB0cnVlIGFzIGFub3RoZXIgcmVzdWx0U2V0IGlzIHN0aWxsIG9wZW4uCisgICAgICAgIGlmKHN0bXQuaXNDbG9zZWQoKSl7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNsb3NlZD0iICsgc3RtdC5pc0Nsb3NlZCgpKTsKKyAgICAgICAgcnMxLmNsb3NlKCk7CisgICAgICAgIC8vQm90aCB0aGUgcmVzdWx0U2V0cyBhcmUgY2xvc2VkLiBBdCB0aGlzIHN0YWdlIGlzQ2xvc2VkIHNob3VsZCBiZSB0cnVlLgorICAgICAgICBpZighc3RtdC5pc0Nsb3NlZCgpKXsKKyAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNsb3NlZD0iICsgc3RtdC5pc0Nsb3NlZCgpKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFJlc3VsdFNldCByczIgPSBzdG10LmV4ZWN1dGVRdWVyeSgpOworICAgICAgICByczIuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgb2JqZWN0IHVzZWQgYWZ0ZXIgY2xvc2VvbmNvbXBsZXRpb24gOiBleGNlcHRpb246IGV4cGVjdGVkIik7CisgICAgICAgIHBhc3NlZCA9IHRydWU7CisgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKQEAgLTg0LDEyICs4NCwxMiBAQAogICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZTEpIHt9Ci0gICAgICAgICAgICB9IAotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oImNsb3NlT25Db21wbGV0aW9uIEpEQkMgNDEgdGVzdCBFbmQiKTsKLQlyZXR1cm4gcGFzc2VkOworICAgICAgICAgICAgfQogICAgIH0KLSAgICAKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNsb3NlT25Db21wbGV0aW9uIEpEQkMgNDEgdGVzdCBFbmQiKTsKKyAgICByZXR1cm4gcGFzc2VkOworICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9jbG9zZW9uY29tcGxldGlvbi5zdG10Y2FjaGluZy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9jbG9zZW9uY29tcGxldGlvbi5zdG10Y2FjaGluZy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggNDlkYjRjMS4uMWQ0Y2NmZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvY2xvc2VvbmNvbXBsZXRpb24uc3RtdGNhY2hpbmcvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Nsb3Nlb25jb21wbGV0aW9uLnN0bXRjYWNoaW5nL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOw0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIgVkFMVUVTKDIsICdzaGFsJyk7DQorZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI7CitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlciBWQUxVRVMoMiwgJ3NoYWwnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Nsb3Nlb25jb21wbGV0aW9uLnN0bXRjYWNoaW5nL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9jbG9zZW9uY29tcGxldGlvbi5zdG10Y2FjaGluZy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IGYyY2U2ZTkuLmFiZmUxNDkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Nsb3Nlb25jb21wbGV0aW9uLnN0bXRjYWNoaW5nL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvY2xvc2VvbmNvbXBsZXRpb24uc3RtdGNhY2hpbmcvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI7DQorZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9yZXBvcnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvcmVwb3J0LnhtbAppbmRleCBkOTYyYzUwLi5iMTgzMTc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9yZXBvcnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL3JlcG9ydC54bWwKQEAgLTIyLDcgKzIyLDcgQEAKIDx0YXJnZXQgbmFtZT0icmVwb3J0Ij4KIDxlY2hvIG1lc3NhZ2U9IkNvbXBhcmluZyByZXN1bHRzIHdpdGggZXhwZWN0ZWQgcmVzdWx0cyIvPgogCi0gCisKICAgICA8eHNsdCBzdHlsZT0iJHtzdHlsZXNoZWV0fSIKICAgICAgICAgICAgIGluPSIke3htbGZpbGV9IiBvdXQ9IiR7aHRtbGZpbGV9IgogICAgICAgICAgICAgYmFzZWRpcj0iLiIgZGVzdGRpcj0iLiIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvYnVpbGQucHJvcGVydGllcwppbmRleCA4NGY2OWYzLi40MjIxMWU5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOCArMTUsMTggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtamRiY2ptc2F1dGgiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9idWlsZC54bWwKaW5kZXggNjg1MzU2OS4uZGZkNzE4MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUyLDEzICs1MiwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCi0gIAkgIHZhbHVlPSIqKi9TaW1wbGVCTVAuY2xhc3MsICoqL1NpbXBsZUJNUEhvbWUuY2xhc3MsKiovKkNsaWVudCouY2xhc3MsKiovSm1zQXV0aEhvbWUuY2xhc3MsKiovSm1zQXV0aC5jbGFzcyIgLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgorICAgICAgICB2YWx1ZT0iKiovU2ltcGxlQk1QLmNsYXNzLCAqKi9TaW1wbGVCTVBIb21lLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzLCoqL0ptc0F1dGhIb21lLmNsYXNzLCoqL0ptc0F1dGguY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC02Niw3ICs2Niw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJxbC1qZGJjLXBvb2wiLz4KLQk8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9zMXFlREJfQ00iLz4KKyAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9zMXFlREJfQ00iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWptcy1zdHVmZiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CkBAIC04MCw3ICs4MCw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXNldC1kZXJieS1mb3Itbm8tYXV0aGVudGljYXRpb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgpAQCAtOTIsNyArOTIsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qbXMtc3R1ZmYiLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KQEAgLTEwNiwxMiArMTA2LDEyIEBACiAgICAgICAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWptcy1jb25uZWN0aW9uLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqbXMuZmFjdG9yeS50eXBlIiB2YWx1ZT0iamFrYXJ0YS5qbXMuUXVldWVDb25uZWN0aW9uRmFjdG9yeSIvPgotCTxwYXJhbSBuYW1lPSJqbXMuZmFjdG9yeS5uYW1lIiB2YWx1ZT0iam1zL2pkYmNqbXNhdXRoX1FDRjEiLz4KKyAgICA8cGFyYW0gbmFtZT0iam1zLmZhY3RvcnkubmFtZSIgdmFsdWU9Imptcy9qZGJjam1zYXV0aF9RQ0YxIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtam1zLWNvbm5lY3Rpb24tY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9Imptcy5mYWN0b3J5LnR5cGUiIHZhbHVlPSJqYWthcnRhLmptcy5RdWV1ZUNvbm5lY3Rpb25GYWN0b3J5Ii8+Ci0JPHBhcmFtIG5hbWU9Imptcy5mYWN0b3J5Lm5hbWUiIHZhbHVlPSJqbXMvamRiY2ptc2F1dGhfUUNGMiIvPgorICAgIDxwYXJhbSBuYW1lPSJqbXMuZmFjdG9yeS5uYW1lIiB2YWx1ZT0iam1zL2pkYmNqbXNhdXRoX1FDRjIiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApAQCAtMTIyLDEwICsxMjIsMTAgQEAKICAgICAgIDwvYW50Y2FsbD4KICAgICAgIC0tPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtam1zLWNvbm5lY3Rpb24tY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iam1zLmZhY3RvcnkubmFtZSIgdmFsdWU9Imptcy9qZGJjam1zYXV0aF9RQ0YxIi8+CisgICAgPHBhcmFtIG5hbWU9Imptcy5mYWN0b3J5Lm5hbWUiIHZhbHVlPSJqbXMvamRiY2ptc2F1dGhfUUNGMSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtam1zLWNvbm5lY3Rpb24tY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iam1zLmZhY3RvcnkubmFtZSIgdmFsdWU9Imptcy9qZGJjam1zYXV0aF9RQ0YyIi8+CisgICAgPHBhcmFtIG5hbWU9Imptcy5mYWN0b3J5Lm5hbWUiIHZhbHVlPSJqbXMvamRiY2ptc2F1dGhfUUNGMiIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGQ3NDUzYTMuLjEwYTg1YTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNSwxOTkgKzI1LDE5OSBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiSkRCQyBKTVMgQXV0aGVudGljYXRpb24gdGVzdHMiKTsKICAgICAgICAgQ2xpZW50IGMgPSBuZXcgQ2xpZW50KCk7Ci0JYy5kb0pkYmNUZXN0cygpOwotCWMuZG9KbXNUZXN0cygpOworICAgIGMuZG9KZGJjVGVzdHMoKTsKKyAgICBjLmRvSm1zVGVzdHMoKTsKIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZG9KZGJjVGVzdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVCTVBIb21lIik7Ci0JU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCisgICAgU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKLSAgICAgICAgCisKICAgICAgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKCk7Ci0gICAgICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiSkRCQ0ptc0F1dGgtSkRCQyAiOwkKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgamRiYyB0ZXN0cyAzICYgNyB3aWxsIGZhaWwgd2l0aCBEZXJieSIpOyAJCi0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICAgIEpEQkMgVGVzdHMgIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiYXBwIGF1dGggOiBnZXR0aW5nIGNvbm5lY3Rpb24gdy9vIHVzZXIvcGFzcyIpOwotCVN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBOT1QgZ2V0IGEgY29ubmVjdGlvbiA6ICIgKTsKKyAgICAgICAgU3RyaW5nIHRlc3RTdWl0ZSA9ICJKREJDSm1zQXV0aC1KREJDICI7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIGpkYmMgdGVzdHMgMyAmIDcgd2lsbCBmYWlsIHdpdGggRGVyYnkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgICAgICAgSkRCQyBUZXN0cyAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJhcHAgYXV0aCA6IGdldHRpbmcgY29ubmVjdGlvbiB3L28gdXNlci9wYXNzIik7CisgICAgU3lzdGVtLm91dC5wcmludCgiU2hvdWxkIE5PVCBnZXQgYSBjb25uZWN0aW9uIDogIiApOwogICAgICAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MSgpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MSAiLCBzdGF0LlBBU1MpOwotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiUEFTUyIpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QxICIsIHN0YXQuRkFJTCk7Ci0JICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJGQUlMIik7Ci0JfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MSAiLCBzdGF0LlBBU1MpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiUEFTUyIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QxICIsIHN0YXQuRkFJTCk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJGQUlMIik7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiYXBwIGF1dGggOiBnZXR0aW5nIGNvbm5lY3Rpb24gdy8gdXNlci9wYXNzIik7Ci0JU3lzdGVtLm91dC5wcmludCgiU2hvdWxkIGdldCBhIGNvbm5lY3Rpb24gOiAiICk7Ci0JaWYgKCBzaW1wbGVCTVAudGVzdDIoKSApIHsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MiKTsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDIgIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MiAiLCBzdGF0LkZBSUwpOwotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJhcHAgYXV0aCA6IGdldHRpbmcgY29ubmVjdGlvbiB3LyB1c2VyL3Bhc3MiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50KCJTaG91bGQgZ2V0IGEgY29ubmVjdGlvbiA6ICIgKTsKKyAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MigpICkgeworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiUEFTUyIpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QyICIsIHN0YXQuRkFJTCk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJGQUlMIik7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiYXBwIGF1dGggOiBnZXR0aW5nIGNvbm5lY3Rpb24gdy8gIHdyb25nIHVzZXIvcGFzcyIpOwotCVN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBOT1QgZ2V0IGEgY29ubmVjdGlvbiA6ICIgKTsKLQlpZiAoIHNpbXBsZUJNUC50ZXN0MygpICkgewotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiUEFTUyIpOwotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3QzICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0MyAiLCBzdGF0LkZBSUwpOwotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJhcHAgYXV0aCA6IGdldHRpbmcgY29ubmVjdGlvbiB3LyAgd3JvbmcgdXNlci9wYXNzIik7CisgICAgU3lzdGVtLm91dC5wcmludCgiU2hvdWxkIE5PVCBnZXQgYSBjb25uZWN0aW9uIDogIiApOworICAgIGlmICggc2ltcGxlQk1QLnRlc3QzKCkgKSB7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJQQVNTIik7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDMgIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3QzICIsIHN0YXQuRkFJTCk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJGQUlMIik7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiYXBwIGF1dGggOiBnZXR0aW5nIGNvbm5lY3Rpb24gdy8gY29ycmVjdCB0aGVuIHdyb25nIHVzZXIvcGFzcyIpOwotCVN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBnZXQgYSBjb25uZWN0aW9uIHRoZW4gTk9UIGdldCBhIGNvbm5lY3Rpb24gOiAiICk7Ci0JaWYgKCBzaW1wbGVCTVAudGVzdDQoKSApIHsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MiKTsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0NCAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDQgIiwgc3RhdC5GQUlMKTsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkZBSUwiKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXBwIGF1dGggOiBnZXR0aW5nIGNvbm5lY3Rpb24gdy8gY29ycmVjdCB0aGVuIHdyb25nIHVzZXIvcGFzcyIpOworICAgIFN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBnZXQgYSBjb25uZWN0aW9uIHRoZW4gTk9UIGdldCBhIGNvbm5lY3Rpb24gOiAiICk7CisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDQoKSApIHsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MiKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0NCAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDQgIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkZBSUwiKTsKKyAgICB9CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJjb250YWluZXIgYXV0aCA6IGdldHRpbmcgY29ubmVjdGlvbiB3L28gdXNlci9wYXNzIik7Ci0JU3lzdGVtLm91dC5wcmludCgiU2hvdWxkIGdldCBhIGNvbm5lY3Rpb24gOiAiICk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29udGFpbmVyIGF1dGggOiBnZXR0aW5nIGNvbm5lY3Rpb24gdy9vIHVzZXIvcGFzcyIpOworICAgIFN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBnZXQgYSBjb25uZWN0aW9uIDogIiApOwogICAgICAgICBpZiAoIHNpbXBsZUJNUC50ZXN0NSgpICkgewotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiUEFTUyIpOwotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0NSAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3Q1ICIsIHN0YXQuRkFJTCk7Ci0JICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJGQUlMIik7Ci0JfQorICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiUEFTUyIpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0NSAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3Q1ICIsIHN0YXQuRkFJTCk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJGQUlMIik7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiY29udGFpbmVyIGF1dGggOiBnZXR0aW5nIGNvbm5lY3Rpb24gdy8gdXNlci9wYXNzIik7Ci0JU3lzdGVtLm91dC5wcmludCgiU2hvdWxkIGdldCBhIGNvbm5lY3Rpb24gOiAiICk7Ci0JaWYgKCBzaW1wbGVCTVAudGVzdDYoKSApIHsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MiKTsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDYgIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0NiAiLCBzdGF0LkZBSUwpOwotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb250YWluZXIgYXV0aCA6IGdldHRpbmcgY29ubmVjdGlvbiB3LyB1c2VyL3Bhc3MiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50KCJTaG91bGQgZ2V0IGEgY29ubmVjdGlvbiA6ICIgKTsKKyAgICBpZiAoIHNpbXBsZUJNUC50ZXN0NigpICkgeworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiUEFTUyIpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0NiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3Q2ICIsIHN0YXQuRkFJTCk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJGQUlMIik7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiY29udGFpbmVyIGF1dGggOiBnZXR0aW5nIGNvbm5lY3Rpb24gdy8gd3JvbmcgdXNlci9wYXNzIik7Ci0JU3lzdGVtLm91dC5wcmludCgiU2hvdWxkIE5PVCBnZXQgYSBjb25uZWN0aW9uIDogIiApOwotCWlmICggc2ltcGxlQk1QLnRlc3Q3KCkgKSB7Ci0JICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJQQVNTIik7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDcgIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3Q3ICIsIHN0YXQuRkFJTCk7Ci0JICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJGQUlMIik7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbnRhaW5lciBhdXRoIDogZ2V0dGluZyBjb25uZWN0aW9uIHcvIHdyb25nIHVzZXIvcGFzcyIpOworICAgIFN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBOT1QgZ2V0IGEgY29ubmVjdGlvbiA6ICIgKTsKKyAgICBpZiAoIHNpbXBsZUJNUC50ZXN0NygpICkgeworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiUEFTUyIpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3Q3ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0NyAiLCBzdGF0LkZBSUwpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOworICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZG9KbXNUZXN0cygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCi0JT2JqZWN0IG9iaiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvSm1zQXV0aEhvbWUiKTsKLQlKbXNBdXRoSG9tZSBqbXNBdXRoSG9tZSA9IChKbXNBdXRoSG9tZSkKLQkgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KCBvYmosIEptc0F1dGhIb21lLmNsYXNzICk7Ci0JSm1zQXV0aCBqbXNBdXRoID0gam1zQXV0aEhvbWUuY3JlYXRlKCk7CisgICAgT2JqZWN0IG9iaiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvSm1zQXV0aEhvbWUiKTsKKyAgICBKbXNBdXRoSG9tZSBqbXNBdXRoSG9tZSA9IChKbXNBdXRoSG9tZSkKKyAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KCBvYmosIEptc0F1dGhIb21lLmNsYXNzICk7CisgICAgSm1zQXV0aCBqbXNBdXRoID0gam1zQXV0aEhvbWUuY3JlYXRlKCk7CiAKLQlTdHJpbmcgdGVzdFN1aXRlID0gIkpEQkNKbXNBdXRoLUpNUyI7Ci0gICAgICAgIAotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAgICBKTVMgdGVzdHMgIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiYXBwIGF1dGggOiBnZXR0aW5nIGNvbm5lY3Rpb24gdy8gdXNlci9wYXNzIik7Ci0JU3lzdGVtLm91dC5wcmludCgiU2hvdWxkIGdldCBhIGNvbm5lY3Rpb24gOiAiICk7Ci0JaWYgKCBqbXNBdXRoLnRlc3QxKCkgKSB7Ci0JICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJQQVNTIik7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDEgIiwgc3RhdC5QQVNTICk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0MSAiLCBzdGF0LkZBSUwgKTsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkZBSUwiKTsKLQl9CisgICAgU3RyaW5nIHRlc3RTdWl0ZSA9ICJKREJDSm1zQXV0aC1KTVMiOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiYXBwIGF1dGggOiBnZXR0aW5nIGNvbm5lY3Rpb24gdy9vIHVzZXIvcGFzcyIpOwotCVN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBnZXQgYSBjb25uZWN0aW9uIDogIiApOwotICAgICAgIAlpZiAoIGptc0F1dGgudGVzdDIoKSApIHsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MiKTsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0MiAiLCBzdGF0LlBBU1MgKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3QyICIsIHN0YXQuRkFJTCApOwotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgICAgICAgSk1TIHRlc3RzICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFwcCBhdXRoIDogZ2V0dGluZyBjb25uZWN0aW9uIHcvIHVzZXIvcGFzcyIpOworICAgIFN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBnZXQgYSBjb25uZWN0aW9uIDogIiApOworICAgIGlmICggam1zQXV0aC50ZXN0MSgpICkgeworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiUEFTUyIpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3QxICIsIHN0YXQuUEFTUyApOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDEgIiwgc3RhdC5GQUlMICk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJGQUlMIik7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiYXBwIGF1dGggOiBnZXR0aW5nIGNvbm5lY3Rpb24gdy8gIHdyb25nIHVzZXIvcGFzcyIpOwotCVN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBOT1QgZ2V0IGEgY29ubmVjdGlvbiA6ICIgKTsKLQlpZiAoIGptc0F1dGgudGVzdDMoKSApIHsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MiKTsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0MyAiLCBzdGF0LlBBU1MgKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3QzICIsIHN0YXQuRkFJTCApOwotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJhcHAgYXV0aCA6IGdldHRpbmcgY29ubmVjdGlvbiB3L28gdXNlci9wYXNzIik7CisgICAgU3lzdGVtLm91dC5wcmludCgiU2hvdWxkIGdldCBhIGNvbm5lY3Rpb24gOiAiICk7CisgICAgICAgICAgIGlmICggam1zQXV0aC50ZXN0MigpICkgeworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiUEFTUyIpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3QyICIsIHN0YXQuUEFTUyApOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDIgIiwgc3RhdC5GQUlMICk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJGQUlMIik7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiYXBwIGF1dGggOiBnZXR0aW5nIGNvbm5lY3Rpb24gdy8gY29ycmVjdCB0aGVuIHdyb25nIHVzZXIvcGFzcyIpOwotCVN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBnZXQgYSBjb25uZWN0aW9uIHRoZW4gTk9UIGdldCBhIGNvbm5lY3Rpb24gOiAiICk7Ci0gICAgICAgCWlmICggam1zQXV0aC50ZXN0NCgpICkgewotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiUEFTUyIpOwotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3Q0ICIsIHN0YXQuUEFTUyApOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDQgIiwgc3RhdC5GQUlMICk7Ci0JICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJGQUlMIik7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFwcCBhdXRoIDogZ2V0dGluZyBjb25uZWN0aW9uIHcvICB3cm9uZyB1c2VyL3Bhc3MiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50KCJTaG91bGQgTk9UIGdldCBhIGNvbm5lY3Rpb24gOiAiICk7CisgICAgaWYgKCBqbXNBdXRoLnRlc3QzKCkgKSB7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJQQVNTIik7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDMgIiwgc3RhdC5QQVNTICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0MyAiLCBzdGF0LkZBSUwgKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkZBSUwiKTsKKyAgICB9CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJjb250YWluZXIgYXV0aCA6IGdldHRpbmcgY29ubmVjdGlvbiB3L28gdXNlci9wYXNzIik7Ci0JU3lzdGVtLm91dC5wcmludCgiU2hvdWxkIGdldCBhIGNvbm5lY3Rpb24gOiAiICk7Ci0gICAgICAgCWlmICggam1zQXV0aC50ZXN0NSgpICkgewotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiUEFTUyIpOwotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3Q1ICIsIHN0YXQuUEFTUyApOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDUgIiwgc3RhdC5GQUlMICk7Ci0JICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJGQUlMIik7Ci0JfQotCQotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImNvbnRhaW5lciBhdXRoIDogZ2V0dGluZyBjb25uZWN0aW9uIHcvIHVzZXIvcGFzcyIpOwotCVN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBnZXQgYSBjb25uZWN0aW9uIDogIiApOwotICAgICAgIAlpZiAoIGptc0F1dGgudGVzdDYoKSApIHsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MiKTsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0NiAiLCBzdGF0LlBBU1MgKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3Q2ICIsIHN0YXQuRkFJTCApOwotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOwotCX0KLS8qCQotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImNvbnRhaW5lciBhdXRoIDogZ2V0dGluZyBjb25uZWN0aW9uIHcvIHdyb25nIHVzZXIvcGFzcyIpOwotCVN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBOT1QgZ2V0IGEgY29ubmVjdGlvbiA6ICIgKTsKLSAgICAgICAJaWYgKCBqbXNBdXRoLnRlc3Q3KCkgKSB7Ci0JICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJQQVNTIik7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgam1zLXRlc3Q3ICIsIHN0YXQuUEFTUyApOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgam1zLXRlc3Q3ICIsIHN0YXQuRkFJTCApOwotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOwotCX0KLSovICAgICAgICAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXBwIGF1dGggOiBnZXR0aW5nIGNvbm5lY3Rpb24gdy8gY29ycmVjdCB0aGVuIHdyb25nIHVzZXIvcGFzcyIpOworICAgIFN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBnZXQgYSBjb25uZWN0aW9uIHRoZW4gTk9UIGdldCBhIGNvbm5lY3Rpb24gOiAiICk7CisgICAgICAgICAgIGlmICggam1zQXV0aC50ZXN0NCgpICkgeworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiUEFTUyIpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3Q0ICIsIHN0YXQuUEFTUyApOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDQgIiwgc3RhdC5GQUlMICk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJGQUlMIik7CisgICAgfQorCisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29udGFpbmVyIGF1dGggOiBnZXR0aW5nIGNvbm5lY3Rpb24gdy9vIHVzZXIvcGFzcyIpOworICAgIFN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBnZXQgYSBjb25uZWN0aW9uIDogIiApOworICAgICAgICAgICBpZiAoIGptc0F1dGgudGVzdDUoKSApIHsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MiKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0NSAiLCBzdGF0LlBBU1MgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3Q1ICIsIHN0YXQuRkFJTCApOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOworICAgIH0KKworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbnRhaW5lciBhdXRoIDogZ2V0dGluZyBjb25uZWN0aW9uIHcvIHVzZXIvcGFzcyIpOworICAgIFN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBnZXQgYSBjb25uZWN0aW9uIDogIiApOworICAgICAgICAgICBpZiAoIGptc0F1dGgudGVzdDYoKSApIHsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MiKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0NiAiLCBzdGF0LlBBU1MgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3Q2ICIsIHN0YXQuRkFJTCApOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOworICAgIH0KKy8qCisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29udGFpbmVyIGF1dGggOiBnZXR0aW5nIGNvbm5lY3Rpb24gdy8gd3JvbmcgdXNlci9wYXNzIik7CisgICAgU3lzdGVtLm91dC5wcmludCgiU2hvdWxkIE5PVCBnZXQgYSBjb25uZWN0aW9uIDogIiApOworICAgICAgICAgICBpZiAoIGptc0F1dGgudGVzdDcoKSApIHsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MiKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBqbXMtdGVzdDcgIiwgc3RhdC5QQVNTICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBqbXMtdGVzdDcgIiwgc3RhdC5GQUlMICk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJGQUlMIik7CisgICAgfQorKi8KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDhkMGRmYmMuLjA2NmIxMmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTM1LDE2ICszNSwxNiBAQAogICAgICAgPHRyYW5zYWN0aW9uLXR5cGU+Q29udGFpbmVyPC90cmFuc2FjdGlvbi10eXBlPgogICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgPHJlcy1yZWYtbmFtZT5qbXMvTXlRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5PC9yZXMtcmVmLW5hbWU+Ci0JPHJlcy10eXBlPmpha2FydGEuam1zLlF1ZXVlQ29ubmVjdGlvbkZhY3Rvcnk8L3Jlcy10eXBlPgotCTxyZXMtYXV0aD5BcHBsaWNhdGlvbjwvcmVzLWF1dGg+Ci0gICAgICA8L3Jlc291cmNlLXJlZj4JCisgICAgPHJlcy10eXBlPmpha2FydGEuam1zLlF1ZXVlQ29ubmVjdGlvbkZhY3Rvcnk8L3Jlcy10eXBlPgorICAgIDxyZXMtYXV0aD5BcHBsaWNhdGlvbjwvcmVzLWF1dGg+CisgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgIDxyZXMtcmVmLW5hbWU+am1zL015UXVldWVDb25uZWN0aW9uRmFjdG9yeV9DTTwvcmVzLXJlZi1uYW1lPgotCTxyZXMtdHlwZT5qYWthcnRhLmptcy5RdWV1ZUNvbm5lY3Rpb25GYWN0b3J5PC9yZXMtdHlwZT4KLQk8cmVzLWF1dGg+Q29udGFpbmVyPC9yZXMtYXV0aD4KLSAgICAgIDwvcmVzb3VyY2UtcmVmPgkKKyAgICA8cmVzLXR5cGU+amFrYXJ0YS5qbXMuUXVldWVDb25uZWN0aW9uRmFjdG9yeTwvcmVzLXR5cGU+CisgICAgPHJlcy1hdXRoPkNvbnRhaW5lcjwvcmVzLWF1dGg+CisgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICA8L3Nlc3Npb24+Ci0gICAgCisKICAgICA8ZW50aXR5PgogICAgICAgPGRpc3BsYXktbmFtZT5TaW1wbGVCTVBFSkI8L2Rpc3BsYXktbmFtZT4KICAgICAgIDxlamItbmFtZT5TaW1wbGVCTVBFSkI8L2VqYi1uYW1lPgpAQCAtNzEsNyArNzEsNyBAQAogICAgICAgICA8cmVzLXNoYXJpbmctc2NvcGU+U2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgIDwvZW50aXR5PgotICAgIAorCiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KIAogICA8YXNzZW1ibHktZGVzY3JpcHRvcj4KQEAgLTc5LDcgKzc5LDcgQEAKICAgICA8Y29udGFpbmVyLXRyYW5zYWN0aW9uPgogICAgICAgPG1ldGhvZD4KICAgICAgICAgPGVqYi1uYW1lPkptc0F1dGhFSkI8L2VqYi1uYW1lPgotCTxtZXRob2QtbmFtZT4qPC9tZXRob2QtbmFtZT4KKyAgICA8bWV0aG9kLW5hbWU+KjwvbWV0aG9kLW5hbWU+CiAgICAgICA8L21ldGhvZD4KICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KQEAgLTkxLDYgKzkxLDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggMDYzMzY3ZS4uYzdiNmVhZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0zNSwxMCArMzUsMTAgQEAKICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgIDxyZXMtcmVmLW5hbWU+am1zL015UXVldWVDb25uZWN0aW9uRmFjdG9yeV9DTTwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmptcy9qZGJjam1zYXV0aF9RQ0YyPC9qbmRpLW5hbWU+Ci0JPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgotCSAgPG5hbWU+Z3Vlc3Q8L25hbWU+Ci0JICA8cGFzc3dvcmQ+Z3Vlc3Q8L3Bhc3N3b3JkPgotCTwvZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CisgICAgPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgorICAgICAgPG5hbWU+Z3Vlc3Q8L25hbWU+CisgICAgICA8cGFzc3dvcmQ+Z3Vlc3Q8L3Bhc3N3b3JkPgorICAgIDwvZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICA8L2VqYj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9lamIvSm1zQXV0aC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9lamIvSm1zQXV0aC5qYXZhCmluZGV4IDVlMWRlN2MuLjJiNmUxZDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvZWpiL0ptc0F1dGguamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL2VqYi9KbXNBdXRoLmphdmEKQEAgLTI3LDUgKzI3LDUgQEAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0NSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDYoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHB1YmxpYyBib29sZWFuIHRlc3Q3KCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9lamIvSm1zQXV0aEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvZWpiL0ptc0F1dGhCZWFuLmphdmEKaW5kZXggMDNjZDhmNC4uOTFiOGQ1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9lamIvSm1zQXV0aEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL2VqYi9KbXNBdXRoQmVhbi5qYXZhCkBAIC0yNiwyNSArMjYsMjUgQEAKIGltcG9ydCBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQ7CiAKIHB1YmxpYyBjbGFzcyBKbXNBdXRoQmVhbiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKLSAgICAKKwogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY3R4dF87CiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjZl87CiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjZjFfOwogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7Ci0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICBxY2ZfID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpIAotCSAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9NeVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkiKTsKLSAgICAgICAgICAgIHFjZjFfID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpIAotCSAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9NeVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnlfQ00iKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgQ3JlYXRlRXhjZXB0aW9uIGNlID0gbmV3IENyZWF0ZUV4Y2VwdGlvbiggZS5nZXRNZXNzYWdlKCkgKTsKLQkgICAgY2UuaW5pdENhdXNlKCBlICk7Ci0JICAgIHRocm93IGNlOwotCX0KLQkKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgICAgIHFjZl8gPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKKyAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvTXlRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5Iik7CisgICAgICAgICAgICBxY2YxXyA9IChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KQorICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9NeVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnlfQ00iKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgQ3JlYXRlRXhjZXB0aW9uIGNlID0gbmV3IENyZWF0ZUV4Y2VwdGlvbiggZS5nZXRNZXNzYWdlKCkgKTsKKyAgICAgICAgY2UuaW5pdENhdXNlKCBlICk7CisgICAgICAgIHRocm93IGNlOworICAgIH0KKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKQEAgLTYyLDE4OSArNjIsMTg5IEBACiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSgpIHsKICAgICAgICAgLy9hcHBsaWNhdGlvbiBhdXRoIC0gZ2V0Q29ubmVjdGlvbiB3LyB1c2VyL3Bhc3MgLSBtdXN0IHBhc3MKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gY29uID0gbnVsbDsKLQlRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9IG51bGw7CisgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPSBudWxsOwogCi0JdHJ5IHsKLSAgICAgICAgICAgIGNvbiA9IHFjZl8uY3JlYXRlUXVldWVDb25uZWN0aW9uKCJndWVzdCIsICJndWVzdCIpOwkKLQkgICAgc2Vzc2lvbiA9IGNvbi5jcmVhdGVRdWV1ZVNlc3Npb24odHJ1ZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS1qbXMgdGVzdCAxLS0tLS0tLS0tLS0tLS0iKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKKyAgICB0cnkgeworICAgICAgICAgICAgY29uID0gcWNmXy5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oImd1ZXN0IiwgImd1ZXN0Iik7CisgICAgICAgIHNlc3Npb24gPSBjb24uY3JlYXRlUXVldWVTZXNzaW9uKHRydWUsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tam1zIHRlc3QgMS0tLS0tLS0tLS0tLS0tIik7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewotCSAgICAgICAgc2Vzc2lvbi5jbG9zZSgpOworICAgICAgICAgICAgc2Vzc2lvbi5jbG9zZSgpOwogICAgICAgICAgICAgICAgIGNvbi5jbG9zZSgpOwotICAgICAgICAgICAgICAgIAkKLSAgICAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkge30KLQl9CiAKLQlyZXR1cm4gcGFzc2VkOworICAgICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7fQorICAgIH0KKworICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDIoKSB7CiAgICAgICAgIC8vYXBwbGljYXRpb24gYXV0aCAtIGdldENvbm5lY3Rpb24gdy9vIHVzZXIvcGFzcyAtIG11c3QgZmFpbAotCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9IG51bGw7CiAKLQl0cnkgewotICAgICAgICAgICAgY29uID0gcWNmXy5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsJCi0JICAgIHNlc3Npb24gPSBjb24uY3JlYXRlUXVldWVTZXNzaW9uKHRydWUsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tam1zIHRlc3QgMi0tLS0tLS0tLS0tLS0tIik7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCX0gZmluYWxseSB7CisgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbiA9IHFjZl8uY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7CisgICAgICAgIHNlc3Npb24gPSBjb24uY3JlYXRlUXVldWVTZXNzaW9uKHRydWUsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tam1zIHRlc3QgMi0tLS0tLS0tLS0tLS0tIik7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewotCSAgICAgICAgc2Vzc2lvbi5jbG9zZSgpOworICAgICAgICAgICAgc2Vzc2lvbi5jbG9zZSgpOwogICAgICAgICAgICAgICAgIGNvbi5jbG9zZSgpOwogICAgICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7fQotCX0KLQotCXJldHVybiBwYXNzZWQ7CiAgICAgfQotICAgIAorCisgICAgcmV0dXJuIHBhc3NlZDsKKyAgICB9CisKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MygpIHsKICAgICAgICAgLy9hcHBsaWNhdGlvbiBhdXRoIC0gZ2V0Q29ubmVjdGlvbiB3LyB3cm9uZyB1c2VyL3Bhc3MgLSBtdXN0IGZhaWwKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9IG51bGw7CiAKLQl0cnkgewotICAgICAgICAgICAgY29uID0gcWNmXy5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oInh5eiIsICJ4eXoiKTsJCi0JICAgIHNlc3Npb24gPSBjb24uY3JlYXRlUXVldWVTZXNzaW9uKHRydWUsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tam1zIHRlc3QgMy0tLS0tLS0tLS0tLS0tIik7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0JICAgIHBhc3NlZCA9IHRydWU7Ci0JfSBmaW5hbGx5IHsKKyAgICB0cnkgeworICAgICAgICAgICAgY29uID0gcWNmXy5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oInh5eiIsICJ4eXoiKTsKKyAgICAgICAgc2Vzc2lvbiA9IGNvbi5jcmVhdGVRdWV1ZVNlc3Npb24odHJ1ZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS1qbXMgdGVzdCAzLS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKLQkgICAgICAgIHNlc3Npb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHNlc3Npb24uY2xvc2UoKTsKICAgICAgICAgICAgICAgICBjb24uY2xvc2UoKTsKICAgICAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkge30KLQl9CisgICAgfQogCi0JcmV0dXJuIHBhc3NlZDsKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3Q0KCkgewotICAgICAgICAvL2FwcGxpY2F0aW9uIGF1dGggLSBnZXRDb25uZWN0aW9uIHcvIGNvcnJlY3QgdXNlci9wYXNzIAotCS8vYW5kIHRoZW4gd3JvbmcgLSBtdXN0IHBhc3MKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgICAgICAvL2FwcGxpY2F0aW9uIGF1dGggLSBnZXRDb25uZWN0aW9uIHcvIGNvcnJlY3QgdXNlci9wYXNzCisgICAgLy9hbmQgdGhlbiB3cm9uZyAtIG11c3QgcGFzcworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9IG51bGw7CiAKLQl0cnkgewotICAgICAgICAgICAgY29uID0gcWNmXy5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oImd1ZXN0IiwgImd1ZXN0Iik7CQotCSAgICBzZXNzaW9uID0gY29uLmNyZWF0ZVF1ZXVlU2Vzc2lvbih0cnVlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLWptcyB0ZXN0IDQtLS0tLS0tLS0tLS0tLSIpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCSAgICByZXR1cm4gcGFzc2VkOwotCX0gZmluYWxseSB7CisgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbiA9IHFjZl8uY3JlYXRlUXVldWVDb25uZWN0aW9uKCJndWVzdCIsICJndWVzdCIpOworICAgICAgICBzZXNzaW9uID0gY29uLmNyZWF0ZVF1ZXVlU2Vzc2lvbih0cnVlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLWptcyB0ZXN0IDQtLS0tLS0tLS0tLS0tLSIpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgICAgICByZXR1cm4gcGFzc2VkOworICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewotCSAgICAgICAgc2Vzc2lvbi5jbG9zZSgpOworICAgICAgICAgICAgc2Vzc2lvbi5jbG9zZSgpOwogICAgICAgICAgICAgICAgIGNvbi5jbG9zZSgpOwogICAgICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7fQotCX0KLSAgICAgICAgCi0JdHJ5IHsKLQkgICAgY29uID0gcWNmXy5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oInh5eiIsICJ4eXoiICk7Ci0JICAgIHNlc3Npb24gPSBjb24uY3JlYXRlUXVldWVTZXNzaW9uKCB0cnVlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UgKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS1qbXMgdGVzdCA0LS0tLS0tLS0tLS0tLS0iKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQkgICAgcGFzc2VkID0gdHJ1ZTsKLQl9IGZpbmFsbHkgewotCSAgICB0cnkgewotCSAgICAgICAgc2Vzc2lvbi5jbG9zZSgpOwotCQljb24uY2xvc2UoKTsKLQkgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7fQkKLQl9Ci0JCi0JcmV0dXJuIHBhc3NlZDsKKyAgICB9CisKKyAgICB0cnkgeworICAgICAgICBjb24gPSBxY2ZfLmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigieHl6IiwgInh5eiIgKTsKKyAgICAgICAgc2Vzc2lvbiA9IGNvbi5jcmVhdGVRdWV1ZVNlc3Npb24oIHRydWUsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSApOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLWptcyB0ZXN0IDQtLS0tLS0tLS0tLS0tLSIpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzZXNzaW9uLmNsb3NlKCk7CisgICAgICAgIGNvbi5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHt9CisgICAgfQorCisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0NSgpIHsKICAgICAgICAgLy9jb250YWluZXIgYXV0aCAtIGdldENvbm5lY3Rpb24gdy9vIHVzZXIvcGFzcyAtIG11c3QgcGFzcwotCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBjb24gPSBudWxsOwotCVF1ZXVlU2Vzc2lvbiBzZXNzaW9uID0gbnVsbDsKKyAgICBRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9IG51bGw7CiAKLQl0cnkgewotICAgICAgICAgICAgY29uID0gcWNmMV8uY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7CQotCSAgICBzZXNzaW9uID0gY29uLmNyZWF0ZVF1ZXVlU2Vzc2lvbih0cnVlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLWptcyB0ZXN0IDUtLS0tLS0tLS0tLS0tLSIpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQl9IGZpbmFsbHkgeworICAgIHRyeSB7CisgICAgICAgICAgICBjb24gPSBxY2YxXy5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKKyAgICAgICAgc2Vzc2lvbiA9IGNvbi5jcmVhdGVRdWV1ZVNlc3Npb24odHJ1ZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS1qbXMgdGVzdCA1LS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7Ci0JICAgICAgICBzZXNzaW9uLmNsb3NlKCk7CisgICAgICAgICAgICBzZXNzaW9uLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgY29uLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgCQotICAgICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7fQotCX0KIAotCXJldHVybiBwYXNzZWQ7CisgICAgICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHt9CiAgICAgfQotICAgIAorCisgICAgcmV0dXJuIHBhc3NlZDsKKyAgICB9CisKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0NigpIHsKICAgICAgICAgLy9jb250YWluZXIgYXV0aCAtIGdldENvbm5lY3Rpb24gdy8gdXNlci9wYXNzIC0gbXVzdCBwYXNzCi0JYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIGNvbiA9IG51bGw7Ci0JUXVldWVTZXNzaW9uIHNlc3Npb24gPSBudWxsOworICAgIFF1ZXVlU2Vzc2lvbiBzZXNzaW9uID0gbnVsbDsKIAotCXRyeSB7Ci0gICAgICAgICAgICBjb24gPSBxY2YxXy5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oImd1ZXN0IiwiZ3Vlc3QiKTsJCi0JICAgIHNlc3Npb24gPSBjb24uY3JlYXRlUXVldWVTZXNzaW9uKHRydWUsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tam1zIHRlc3QgNi0tLS0tLS0tLS0tLS0tIik7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCX0gZmluYWxseSB7CisgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbiA9IHFjZjFfLmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigiZ3Vlc3QiLCJndWVzdCIpOworICAgICAgICBzZXNzaW9uID0gY29uLmNyZWF0ZVF1ZXVlU2Vzc2lvbih0cnVlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLWptcyB0ZXN0IDYtLS0tLS0tLS0tLS0tLSIpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKLQkgICAgICAgIHNlc3Npb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHNlc3Npb24uY2xvc2UoKTsKICAgICAgICAgICAgICAgICBjb24uY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAJCi0gICAgICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHt9Ci0JfQogCi0JcmV0dXJuIHBhc3NlZDsKKyAgICAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkge30KKyAgICB9CisKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3Q3KCkgewogICAgICAgICAvL2NvbnRhaW5lciBhdXRoIC0gZ2V0Q29ubmVjdGlvbiB3LyB3cm9uZyB1c2VyL3Bhc3MgLSBtdXN0IGZhaWwKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBjb24gPSBudWxsOwotCVF1ZXVlU2Vzc2lvbiBzZXNzaW9uID0gbnVsbDsKKyAgICBRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9IG51bGw7CiAKLQl0cnkgewotICAgICAgICAgICAgY29uID0gcWNmMV8uY3JlYXRlUXVldWVDb25uZWN0aW9uKCJ4eXoiLCAieHl6Iik7CQotCSAgICBzZXNzaW9uID0gY29uLmNyZWF0ZVF1ZXVlU2Vzc2lvbih0cnVlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLWptcyB0ZXN0IDctLS0tLS0tLS0tLS0tLSIpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCSAgICBwYXNzZWQgPSB0cnVlOwotCX0gZmluYWxseSB7CisgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbiA9IHFjZjFfLmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigieHl6IiwgInh5eiIpOworICAgICAgICBzZXNzaW9uID0gY29uLmNyZWF0ZVF1ZXVlU2Vzc2lvbih0cnVlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLWptcyB0ZXN0IDctLS0tLS0tLS0tLS0tLSIpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewotCSAgICAgICAgc2Vzc2lvbi5jbG9zZSgpOworICAgICAgICAgICAgc2Vzc2lvbi5jbG9zZSgpOwogICAgICAgICAgICAgICAgIGNvbi5jbG9zZSgpOwotICAgICAgICAgICAgICAgIAkKLSAgICAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkge30KLQl9CiAKLQlyZXR1cm4gcGFzc2VkOworICAgICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7fQorICAgIH0KKworICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9lamIvU2ltcGxlQk1QLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL2VqYi9TaW1wbGVCTVAuamF2YQppbmRleCA4MmU0YWMxLi5jYjM4Y2Y4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL2VqYi9TaW1wbGVCTVAuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL2VqYi9TaW1wbGVCTVAuamF2YQpAQCAtMjksNSArMjksNSBAQAogICAgIHB1YmxpYyBib29sZWFuIHRlc3Q1KCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0NigpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDcoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggZDFjZjU1Yy4uOGZmZmE5OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQpAQCAtMzIsMTk2ICszMiwxOTYgQEAKICAgICBpbnQgaWQ7CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgZW50aXR5Q29udGV4dCkgewotCUNvbnRleHQgY29udGV4dCA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7Ci0JICAgIGRzMSA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlX0NNIik7Ci0JfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKLQl9CisgICAgQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKKyAgICAgICAgZHMxID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2VfQ00iKTsKKyAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgSW50ZWdlciBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKLQlyZXR1cm4gbmV3IEludGVnZXIoMSk7CisgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgewogICAgICAgICAvL2FwcGxpY2F0aW9uIGF1dGggKyB1c2VyL3B3ZCBub3Qgc3BlY2lmaWVkIC0gc2hvdWxkIGZhaWwKLQlDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBwYXNzZWQgPSB0cnVlOworICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IHRydWU7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS10ZXN0MS0tLS0tLS0tLS0tLSIpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCX0gZmluYWxseSB7Ci0JICAgIGlmICggY29ubiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsKLQkgICAgICAgICAgICBjb25uLmNsb3NlKCk7Ci0JCX0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkgewotCQl9ICAgIAotCSAgICB9Ci0JfQotCi0JcmV0dXJuIHBhc3NlZDsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHsKKyAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIAorCisgICAgcmV0dXJuIHBhc3NlZDsKKyAgICB9CisKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MigpIHsKICAgICAgICAgLy9hcHBsaWNhdGlvbiBhdXRoICsgdXNlci9wd2QgIHNwZWNpZmllZCAtIHNob3VsZCBwYXNzCi0JQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oIkRCVVNFUiIsICJEQlBBU1NXT1JEIik7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gZmFsc2U7CisgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oIkRCVVNFUiIsICJEQlBBU1NXT1JEIik7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS10ZXN0Mi0tLS0tLS0tLS0tLSIpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCX0gZmluYWxseSB7Ci0JICAgIGlmICggY29ubiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsKLQkgICAgICAgICAgICBjb25uLmNsb3NlKCk7Ci0JCX0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQl9CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgfQogCiAKLQlyZXR1cm4gcGFzc2VkOworICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDMoKSB7Ci0gICAgICAgIC8vYXBwbGljYXRpb24gYXV0aCArIHdyb25nIHVzZXIvcHdkIAotCUNvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKLQl0cnkgewotCSAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigieHl6IiwgInh5eiIgKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBwYXNzZWQgPSB0cnVlOworICAgICAgICAvL2FwcGxpY2F0aW9uIGF1dGggKyB3cm9uZyB1c2VyL3B3ZAorICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigieHl6IiwgInh5eiIgKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBwYXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tdGVzdDMtLS0tLS0tLS0tLS0iKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7Ci0JICAgICAgICAgICAgY29ubi5jbG9zZSgpOwotCQl9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JfQorICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgIH0KIAogCi0JcmV0dXJuIHBhc3NlZDsKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0NCgpIHsKICAgICAgICAgLy9hcHBsaWNhdGlvbiBhdXRoICsgdXNlci9wd2QgIHNwZWNpZmllZCAtIHJpZ2h0IGluaXRpYWxsCi0JLy93cm9uZyB0aGUgc2Vjb25kIHRpbWUKLQlDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgLy93cm9uZyB0aGUgc2Vjb25kIHRpbWUKKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAKLQl0cnkgewotCSAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigiREJVU0VSIiwgIkRCUEFTU1dPUkQiKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIHRyeSB7CisgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCJEQlVTRVIiLCAiREJQQVNTV09SRCIpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS10ZXN0NC0tLS0tLS0tLS0tLSIpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCSAgICByZXR1cm4gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkJfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgIH0KIAogCi0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oInh5eiIsICJ4eXoiICk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigieHl6IiwgInh5eiIgKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tdGVzdDQtLS0tLS0tLS0tLS0iKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQkgICAgcGFzc2VkID0gdHJ1ZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7Ci0JICAgICAgICAgICAgY29ubi5jbG9zZSgpOwotCQl9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JfQorICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgIH0KIAogCi0JcmV0dXJuIHBhc3NlZDsKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDUoKSB7CiAgICAgICAgIC8vY29udGFpbmVyIGF1dGggKyB1c2VyL3B3ZCBub3Qgc3BlY2lmaWVkIC0gc2hvdWxkIHBhc3MKLQlDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQl0cnkgewotCSAgICBjb25uID0gZHMxLmdldENvbm5lY3Rpb24oKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIHRyeSB7CisgICAgICAgIGNvbm4gPSBkczEuZ2V0Q29ubmVjdGlvbigpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS10ZXN0NS0tLS0tLS0tLS0tLSIpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7Ci0JICAgICAgICAgICAgY29ubi5jbG9zZSgpOwotCQl9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JfQotCi0JcmV0dXJuIHBhc3NlZDsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CiAgICAgfQotICAgIAorCisgICAgcmV0dXJuIHBhc3NlZDsKKyAgICB9CisKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0NigpIHsKICAgICAgICAgLy9jb250YWluZXIgYXV0aCArIHVzZXIvcHdkICBzcGVjaWZpZWQgLSBzaG91bGQgc3RpbGwgcGFzcwotCUNvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCXRyeSB7Ci0JICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCJEQlVTRVIiLCAiREJQQVNTV09SRCIpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oIkRCVVNFUiIsICJEQlBBU1NXT1JEIik7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLXRlc3Q2LS0tLS0tLS0tLS0tIik7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmICggY29ubiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsKLQkgICAgICAgICAgICBjb25uLmNsb3NlKCk7Ci0JCX0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQl9CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgIH0KIAogCi0JcmV0dXJuIHBhc3NlZDsKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3Q3KCkgewogICAgICAgICAvL2NvbnRhaW5lciBhdXRoICsgd3JvbmcgdXNlci9wd2Qgc2hvdWxkIGZhaWwKLQlDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oInh5eiIsICJ4eXoiICk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oInh5eiIsICJ4eXoiICk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLXRlc3Q3LS0tLS0tLS0tLS0tIik7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0JICAgIHBhc3NlZCA9IHRydWU7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkJfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICB9CiAKIAotCXJldHVybiBwYXNzZWQ7CisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZTQ5MTRmNi4uZjI1NjA3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA3MGQxZmNjLi5kODU0Yjk1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2QvYnVpbGQucHJvcGVydGllcwppbmRleCA1ZDc4MjMzLi4yOTk1NTliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzAtcGVyc2lzdGVuY2UtdHhfcHJvcGFnYXRpb24iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2ltcGxlLmNsaWVudCIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAucGVyc2lzdGVuY2UudHhfcHJvcGFnYXRpb24uY2xpZW50LkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CkBAIC0yNiwxMCArMjYsMTAgQEAKIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvanBhLWRzZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2QvYnVpbGQueG1sCmluZGV4IDJmNTMwNGEuLjQwNmM0MmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvanBhLWRzZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL2J1aWxkLnhtbApAQCAtNDUsNyArNDUsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UudHlwZSIgdmFsdWU9ImphdmF4LnNxbC5YQURhdGFTb3VyY2UiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3hhIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4gCisgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXhhLXBvb2wucHJvcGVydHkuY29ubmVjdGlvbkF0dHJpYnV0ZXM9O2NyZWF0ZT10cnVlIi8+CkBAIC05MiwxNyArOTIsMTcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0vbGliIi8+Ci0gICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1saWIuamFyIiAKKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LWxpYi5qYXIiCiAgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgaW5jbHVkZXM9IioqL1BlcnNvbi5jbGFzcyI+Ci0gICAgICAgIDwvamFyPiAgICAgICAgCisgICAgICAgIDwvamFyPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tcGFyMS5qYXIiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGZpbGU9ImRlc2NyaXB0b3IvcGVyc2lzdGVuY2UueG1sIi8+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1NmdWwqLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NmdWwuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIHVwZGF0ZT0ieWVzIgpAQCAtMTEwLDkgKzExMCw5IEBACiAgICAgICAgICAgICAgaW5jbHVkZXM9ImxpYi8ke2FwcG5hbWV9LWxpYi5qYXIsIGxpYi8ke2FwcG5hbWV9LXBhcjEuamFyIj4KICAgICAgICAgPC9qYXI+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTIxLDEwICsxMjEsMTAgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiA8IS0tICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1zdGFuZGFsb25lIi8+LS0+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvanBhLWRzZC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2QvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGQ0OTRmZGMuLjk0MGIxOWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvanBhLWRzZC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNjUsNyArNjUsNyBAQAogICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBzID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiSSBhbSBpbiBjbGllbnQiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBVc2VyVHJhbnNhY3Rpb24gdXR4ID0gKFVzZXJUcmFuc2FjdGlvbikobmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpKS5sb29rdXAoImphdmE6Y29tcC9Vc2VyVHJhbnNhY3Rpb24iKTsKICAgICAgICAgICAgIGRzID0gKERhdGFTb3VyY2UpKG5ldyBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJqYXZhOmFwcC9qZGJjL3hhIik7CiAKQEAgLTc5LDcgKzc5LDcgQEAKIAogICAgICAgICAgICAgdXR4LmJlZ2luKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oInV0eC5iZWdpbiBjYWxsZWQgIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgY29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIHMgPSBjb25uZWN0aW9uLnByZXBhcmVTdGF0ZW1lbnQoImluc2VydCBpbnRvIEVKQjMwX1BFUlNJU1RFTkNFX0VFTV9JTkpFQ1RJT05fUEVSU09OIHZhbHVlcygnMScsICcxJykiKTsKICAgICAgICAgICAgIHMuZXhlY3V0ZSgpOwpAQCAtOTUsNyArOTUsNyBAQAogICAgICAgICAgICAgICAgIHV0eC5yb2xsYmFjaygpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigidXR4LnJvbGxiYWNrIGNhbGxlZCAiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSBtYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9IGl0ZXIubmV4dCgpOwpAQCAtMTI2LDcgKzEyNiw3IEBACiAKICAgICAgICAgfQogCi0gICAgCXJldHVybjsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2QvZWpiL1BlcnNvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL2VqYi9QZXJzb24uamF2YQppbmRleCAxNDM1OGZmLi45NTJjYmVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2QvZWpiL1BlcnNvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvanBhLWRzZC9lamIvUGVyc29uLmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTsKICAgICB9CiAKLSAgICBAT3ZlcnJpZGUgCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgcmV0dXJuICJQZXJzb246IChuYW1lPSIgKyBuYW1lICsgIjsgZGF0YT0gIiArIGRhdGEgKyAiKSI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL2VqYi9TZnVsQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL2VqYi9TZnVsQmVhbi5qYXZhCmluZGV4IGE4YjY4YTMuLmI0MTVjM2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvanBhLWRzZC9lamIvU2Z1bEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2QvZWpiL1NmdWxCZWFuLmphdmEKQEAgLTQ1LDI1ICs0NSwyNSBAQAogCiAgICAgICAgICAgICAgICAgKQogQFN0YXRlZnVsCi1ARUpCKG5hbWU9ImVqYi9TZnVsQmVhbiIsIAorQEVKQihuYW1lPSJlamIvU2Z1bEJlYW4iLAogICAgICAgICBiZWFuSW50ZXJmYWNlPWNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAucGVyc2lzdGVuY2UudHhfcHJvcGFnYXRpb24uU2Z1bERlbGVnYXRlLmNsYXNzKQogCiBwdWJsaWMgY2xhc3MgU2Z1bEJlYW4KICAgICBpbXBsZW1lbnRzIFNmdWwgewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLSAgICAKKwogICAgIHByaXZhdGUgQEVKQiBTZnVsRGVsZWdhdGUgZGVsZWdhdGU7Ci0gICAgCisKICAgICBwcml2YXRlIEBQZXJzaXN0ZW5jZUNvbnRleHQodW5pdE5hbWU9ImxpYi9lamItZWpiMzAtcGVyc2lzdGVuY2UtdHhfcHJvcGFnYXRpb24tcGFyMS5qYXIjZW0iLAotICAgICAgICAgICAgICAgIHR5cGU9UGVyc2lzdGVuY2VDb250ZXh0VHlwZS5FWFRFTkRFRCkgCisgICAgICAgICAgICAgICAgdHlwZT1QZXJzaXN0ZW5jZUNvbnRleHRUeXBlLkVYVEVOREVEKQogICAgICAgICAgICAgRW50aXR5TWFuYWdlciBleHRlbmRlZEVNOwotIAorCiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3RyaW5nIGxvb2t1cE5hbWUgPSAiamF2YTpjb21wL2Vudi9lamIvU2Z1bEJlYW4iOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGluaXRDdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIGRlbGVnYXRlID0gKFNmdWxEZWxlZ2F0ZSkgaW5pdEN0eC5sb29rdXAobG9va3VwTmFtZSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNzMsNyArNzMsNyBAQAogCiAgICAgcHVibGljIE1hcDxTdHJpbmcsIEJvb2xlYW4+IGRvVGVzdHMoKSB7CiAgICAgICAgIFBlcnNvbiBwZXJzb24gPSBuZXcgUGVyc29uKG5hbWUpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgZGVsZWdhdGVOYW1lID0gImRlbGduYW1lXyIgKyBuYW1lOwogICAgICAgICBTdHJpbmcgZGVsZWdhdGVEYXRhPSAiZGVsZ2RhdGE6ICIgKyBuYW1lOwogICAgICAgICBkZWxlZ2F0ZS5jcmVhdGUoZGVsZWdhdGVOYW1lLCBkZWxlZ2F0ZURhdGEpOwpAQCAtODIsOCArODIsOCBAQAogCiAgICAgICAgIGV4dGVuZGVkRU0ucGVyc2lzdChwZXJzb24pOwogICAgICAgICBQZXJzb24gZm91bmRQZXJzb24gPSBkZWxlZ2F0ZS5maW5kKG5hbWUpOwotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiBtYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+KCk7CiAgICAgICAgIG1hcC5wdXQoImZpbmREZWxlZ2F0ZUNyZWF0ZWRQZXJzb24iLCAoZFBlcnNvbiAhPSBudWxsKSk7CiAgICAgICAgIG1hcC5wdXQoImRlbGVnYXRlRm91bmRNZSIsIChmb3VuZFBlcnNvbiAhPSBudWxsKSk7CkBAIC0xMTEsNSArMTExLDUgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVtb3ZlZDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvanBhLWRzZC9lamIvU2Z1bERlbGVnYXRlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2QvZWpiL1NmdWxEZWxlZ2F0ZS5qYXZhCmluZGV4IDYyZDIwOTcuLjMzN2E0M2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvanBhLWRzZC9lamIvU2Z1bERlbGVnYXRlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL2VqYi9TZnVsRGVsZWdhdGUuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgIFBlcnNvbiBmaW5kKFN0cmluZyBuYW1lKTsKIAogICAgIGJvb2xlYW4gcmVtb3ZlKFN0cmluZyBuYW1lKTsKLSAgICAKKwogICAgIEVudGl0eU1hbmFnZXIgZ2V0RU0oKTsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL2VqYi9TZnVsRGVsZWdhdGVCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2QvZWpiL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YQppbmRleCA4YTk2ZTIwLi5mN2E3YWFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2QvZWpiL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2QvZWpiL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YQpAQCAtMzcsMTIgKzM3LDEyIEBACiAgICAgcHVibGljIEVudGl0eU1hbmFnZXIgZ2V0RU0oKSB7CiAgICAgICAgIHJldHVybiBleHRlbmRlZEVNOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBQZXJzb24gY3JlYXRlKFN0cmluZyBuYW1lLCBTdHJpbmcgZGF0YSkgewogCiAgICAgICAgIFBlcnNvbiBwID0gbmV3IFBlcnNvbihuYW1lKTsKICAgICAgICAgcC5zZXREYXRhKGRhdGEpOwotICAgICAgICAKKwogICAgICAgICBleHRlbmRlZEVNLnBlcnNpc3QocCk7CiAgICAgICAgIHJldHVybiBwOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvanBhLWRzZC9zcWwvY3JlYXRlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvanBhLWRzZC9zcWwvY3JlYXRlLnNxbAppbmRleCBmYTYwNzQyLi5jMGFiNDNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2Qvc3FsL2NyZWF0ZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL3NxbC9jcmVhdGUuc3FsCkBAIC0xLDQgKzEsNCBAQAotQ1JFQVRFIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTV9JTkpFQ1RJT05fUEVSU09OICgNCi0gICAgTkFNRSBWQVJDSEFSKDI1NikgTk9UIE5VTEwgUFJJTUFSWSBLRVksDQotICAgIERBVEEgVkFSQ0hBUigyNTYpDQotKTsNCitDUkVBVEUgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNX0lOSkVDVElPTl9QRVJTT04gKAorICAgIE5BTUUgVkFSQ0hBUigyNTYpIE5PVCBOVUxMIFBSSU1BUlkgS0VZLAorICAgIERBVEEgVkFSQ0hBUigyNTYpCispOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL3NxbC9kcm9wLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvanBhLWRzZC9zcWwvZHJvcC5zcWwKaW5kZXggNWViMTM2Zi4uZDAxMmM2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL3NxbC9kcm9wLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2Qvc3FsL2Ryb3Auc3FsCkBAIC0xICsxIEBACi1EUk9QIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTV9JTkpFQ1RJT05fUEVSU09OOw0KK0RST1AgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNX0lOSkVDVElPTl9QRVJTT047CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2xhenlhc3NvYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9sYXp5YXNzb2MvYnVpbGQucHJvcGVydGllcwppbmRleCBmNGViZmI5Li5mNWI0YzBiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2xhenlhc3NvYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbGF6eWFzc29jL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE4ICsxNSwxOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1sYXp5YXNzb2MiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbGF6eWFzc29jL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbGF6eWFzc29jL2J1aWxkLnhtbAppbmRleCAxNmMzYWJjLi5iMzExNDU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2xhenlhc3NvYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9sYXp5YXNzb2MvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwyMCArNDgsMjAgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWNvbW1vbiIvPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke2pkYmMuY29ucG9vbC5uYW1lfS5sYXp5LWNvbm5lY3Rpb24tZW5saXN0bWVudD10cnVlIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtqZGJjLmNvbnBvb2wubmFtZX0ubGF6eS1jb25uZWN0aW9uLWVubGlzdG1lbnQ9dHJ1ZSIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KQEAgLTcxLDI0ICs3MSwyNCBAQAogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KIAotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtY29tbW9uIi8+CiAKLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9sYXp5YXNzb2MvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9sYXp5YXNzb2MvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDZjNzM3YTQuLjAzYmQ3ZjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbGF6eWFzc29jL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2xhenlhc3NvYy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI1LDI3ICsyNSwyNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKLQlTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLQlTdHJpbmcgdGVzdFN1aXRlID0gIkxhenlBc3NvYyAiOworCisgICAgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CisgICAgU3RyaW5nIHRlc3RTdWl0ZSA9ICJMYXp5QXNzb2MgIjsKIAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVTZXNzaW9uSG9tZSIpOwotCVNpbXBsZVNlc3Npb25Ib21lIHNpbXBsZVNlc3Npb25Ib21lID0gKFNpbXBsZVNlc3Npb25Ib21lKQorICAgIFNpbXBsZVNlc3Npb25Ib21lIHNpbXBsZVNlc3Npb25Ib21lID0gKFNpbXBsZVNlc3Npb25Ib21lKQogICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlU2Vzc2lvbkhvbWUuY2xhc3MpOwotCXN0YXQuYWRkRGVzY3JpcHRpb24oIlJ1bm5pbmcgbGF6eWFzc29jIHRlc3RTdWl0ZTEgIik7CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiUnVubmluZyBsYXp5YXNzb2MgdGVzdFN1aXRlMSAiKTsKICAgICAgICAgU2ltcGxlU2Vzc2lvbiBzaW1wbGVTZXNzaW9uID0gc2ltcGxlU2Vzc2lvbkhvbWUuY3JlYXRlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKICAgICAgICAgZm9yKCBpbnQgaSA9IDA7IGkgPCA1MDtpKysgKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmICggc2ltcGxlU2Vzc2lvbi50ZXN0MSgpID09IGZhbHNlICkgewogICAgICAgICAgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKICAgICAgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICAgICAgICBpZiAoIHNpbXBsZVNlc3Npb24udGVzdDIoKSA9PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7CiAgICAgICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC03NCw2ICs3NCw2IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MiA6ICIsIHN0YXQuRkFJTCApOwogICAgICAgICB9Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbGF6eWFzc29jL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2xhenlhc3NvYy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGEwZmI3NDAuLjgwOGQzYTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbGF6eWFzc29jL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9sYXp5YXNzb2MvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNTIsNiArNTIsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2xhenlhc3NvYy9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbGF6eWFzc29jL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCmluZGV4IDU4YWMzNTUuLmNjMDU0YjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbGF6eWFzc29jL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbGF6eWFzc29jL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCkBAIC0yNyw1NCArMjcsNTQgQEAKIHsKIAogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY3R4dF87Ci0gICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBpY187IAorICAgIHByaXZhdGUgSW5pdGlhbENvbnRleHQgaWNfOwogICAgIHByaXZhdGUgRGF0YVNvdXJjZSBkczsKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIGN0eHRfID0gY29udGV4dDsKLQl0cnkgewotCSAgICBpY18gPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQl9IGNhdGNoKCBOYW1pbmdFeGNlcHRpb24gbmUgKSB7Ci0JICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB0cnkgeworICAgICAgICBpY18gPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKKyAgICB9IGNhdGNoKCBOYW1pbmdFeGNlcHRpb24gbmUgKSB7CisgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSgpIHRocm93cyBFeGNlcHRpb24gewotCUNvbm5lY3Rpb24gY29ubjEgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JLy9jbGVhbiB0aGUgZGF0YWJhc2UKLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7CisgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICAvL2NsZWFuIHRoZSBkYXRhYmFzZQorICAgIHRyeSB7CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotCQotCXJldHVybiB0cnVlOworCisgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JLy9jbGVhbiB0aGUgZGF0YWJhc2UKLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIC8vY2xlYW4gdGhlIGRhdGFiYXNlCisgICAgdHJ5IHsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBzdG10ID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICBzdG10LmV4ZWN1dGVRdWVyeSggIlNFTEVDVCAqIEZST00gVFhMRVZFTFNXSVRDSCIpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKLQl9IGZpbmFsbHkgeworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgaWYgKHN0bXQgIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICB0cnkgeyBzdG10LmNsb3NlKCk7IH1jYXRjaCggRXhjZXB0aW9uIGUgKSB7fQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0JCi0JcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9sYXp5YXNzb2Mvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9sYXp5YXNzb2Mvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGIyMjdjYWMuLjQyZDVhMTYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbGF6eWFzc29jL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2xhenlhc3NvYy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsOSArMSw5IEBACi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7DQotDQotQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0ggKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxLCAnd3h5eicpOw0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDIsICdwcXJzJyk7DQorRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOworCitDUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSCAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxLCAnd3h5eicpOworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMiwgJ3BxcnMnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbGF6eWFzc29jL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2xhenlhc3NvYy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDBjMTI0MmYuLmQxMWExMTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbGF6eWFzc29jL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9sYXp5YXNzb2Mvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSwyICsxLDIgQEAKLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsNCi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOw0KK0Ryb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsKK0Ryb3AgdGFibGUgVFhMRVZFTFNXSVRDSDI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQubG9jYWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC5sb2NhbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQyNmIxYjQuLjg4OTJjNDQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC5sb2NhbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC5sb2NhbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtbWFya2Nvbm5lY3Rpb25hc2JhZC5sb2NhbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC5sb2NhbC9lamIvU2ltcGxlQk1QLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQubG9jYWwvZWpiL1NpbXBsZUJNUC5qYXZhCmluZGV4IDVmNzI4NzEuLjI3NGNmMWYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC5sb2NhbC9lamIvU2ltcGxlQk1QLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXJrY29ubmVjdGlvbmFzYmFkLmxvY2FsL2VqYi9TaW1wbGVCTVAuamF2YQpAQCAtMjksNiArMjksNiBAQAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QzKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3Q0KCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIHRlc3Q1KGludCBjb3VudCwgYm9vbGVhbiBleHBlY3RTdWNjZXNzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXJrY29ubmVjdGlvbmFzYmFkLmxvY2FsL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQubG9jYWwvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQppbmRleCA4NjE5Y2UzLi5jZWI3ZTQ1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQubG9jYWwvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQubG9jYWwvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQpAQCAtMjA3LDcgKzIwNyw3IEBACiAgICAgICAgICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBjb25uc1tpXS5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoImluc2VydCBpbnRvIG9fY3VzdG9tZXIgdmFsdWVzICgiICsgaSArICIsJ2EnKSIpOwogICAgICAgICB9Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGlmKGV4cGVjdFN1Y2Nlc3MpewogICAgICAgICAgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQubG9jYWwvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXJrY29ubmVjdGlvbmFzYmFkLmxvY2FsL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBlNDkxNGY2Li5mMjU2MDc2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQubG9jYWwvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC5sb2NhbC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC5sb2NhbC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXJrY29ubmVjdGlvbmFzYmFkLmxvY2FsL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXJrY29ubmVjdGlvbmFzYmFkLmxvY2FsL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXJrY29ubmVjdGlvbmFzYmFkLmxvY2FsL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQueGEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGFmMjRkYWYuLjIwYmM4NWQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtbWFya2Nvbm5lY3Rpb25hc2JhZC54YSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQueGEvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDVkZGY1NDkuLjhiZThhMmUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXJrY29ubmVjdGlvbmFzYmFkLnhhL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMTE3LDE0ICsxMTcsMTQgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgTWFyay1Db25uZWN0aW9uLUFzLUJhZCBbTG9jYWwtWEEgLVNoYXJlYWJsZS1TaGFyZWFibGUgLSBSZWFkLVdyaXRlXSA6ICIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotICAgICAgICAgaWYgKHNpbXBsZUJNUC50ZXN0MTEoKSAmJiBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgiamRiYy1zaGFyZWFibGUtcG9vbCIpID09IDE1ICYmIAorICAgICAgICAgaWYgKHNpbXBsZUJNUC50ZXN0MTEoKSAmJiBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgiamRiYy1zaGFyZWFibGUtcG9vbCIpID09IDE1ICYmCiAgICAgICAgICAgICAgICAgIGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCJqZGJjLWxvY2FsLXBvb2wiKSA9PSAzKSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIE1hcmstQ29ubmVjdGlvbi1Bcy1CYWQgW0xvY2FsLVhBIC1TaGFyZWFibGUtU2hhcmVhYmxlIC0gUmVhZC1SZWFkXSA6ICIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIE1hcmstQ29ubmVjdGlvbi1Bcy1CYWQgW0xvY2FsLVhBIC1TaGFyZWFibGUtU2hhcmVhYmxlIC0gUmVhZC1SZWFkXSA6ICIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotICAgICAgICAgaWYgKHNpbXBsZUJNUC50ZXN0MTIoKSAmJiBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgiamRiYy1zaGFyZWFibGUtcG9vbCIpID09IDE2ICYmIAorICAgICAgICAgaWYgKHNpbXBsZUJNUC50ZXN0MTIoKSAmJiBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgiamRiYy1zaGFyZWFibGUtcG9vbCIpID09IDE2ICYmCiAgICAgICAgICAgICAgICAgIGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCJqZGJjLWxvY2FsLXBvb2wiKSA9PSA0KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIE1hcmstQ29ubmVjdGlvbi1Bcy1CYWQgW0xvY2FsLVhBIC1TaGFyZWFibGUtU2hhcmVhYmxlIC0gV3JpdGUtUmVhZF0gOiAiLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTM5LDE4ICsxMzksMTggQEAKIAogICAgIHB1YmxpYyBpbnQgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woU3RyaW5nIHBvb2xOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAotCWZpbmFsIFN0cmluZyB1cmxTdHIgPSAic2VydmljZTpqbXg6cm1pOi8vL2puZGkvcm1pOi8vIiArIEhPU1RfTkFNRSArICI6IiArIEpNWF9QT1JUICsgIi9qbXhybWkiOyAgICAKKyAgICBmaW5hbCBTdHJpbmcgdXJsU3RyID0gInNlcnZpY2U6am14OnJtaTovLy9qbmRpL3JtaTovLyIgKyBIT1NUX05BTUUgKyAiOiIgKyBKTVhfUE9SVCArICIvam14cm1pIjsKICAgICAgICAgZmluYWwgSk1YU2VydmljZVVSTCB1cmwgPSBuZXcgSk1YU2VydmljZVVSTCh1cmxTdHIpOwogCi0JZmluYWwgSk1YQ29ubmVjdG9yIGpteENvbm4gPSBKTVhDb25uZWN0b3JGYWN0b3J5LmNvbm5lY3QodXJsKTsKLQlmaW5hbCBNQmVhblNlcnZlckNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGpteENvbm4uZ2V0TUJlYW5TZXJ2ZXJDb25uZWN0aW9uKCk7CisgICAgZmluYWwgSk1YQ29ubmVjdG9yIGpteENvbm4gPSBKTVhDb25uZWN0b3JGYWN0b3J5LmNvbm5lY3QodXJsKTsKKyAgICBmaW5hbCBNQmVhblNlcnZlckNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGpteENvbm4uZ2V0TUJlYW5TZXJ2ZXJDb25uZWN0aW9uKCk7CiAKICAgICAgICAgT2JqZWN0TmFtZSBvYmplY3ROYW1lID0KICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0TmFtZSgiYW14OnBwPS9tb24vc2VydmVyLW1vbltzZXJ2ZXJdLHR5cGU9amRiYy1jb25uZWN0aW9uLXBvb2wtbW9uLG5hbWU9cmVzb3VyY2VzLyIgKyBwb29sTmFtZSk7CiAKLQlqYXZheC5tYW5hZ2VtZW50Lm9wZW5tYmVhbi5Db21wb3NpdGVEYXRhU3VwcG9ydCByZXR1cm5WYWx1ZSA9IAotCQkoamF2YXgubWFuYWdlbWVudC5vcGVubWJlYW4uQ29tcG9zaXRlRGF0YVN1cHBvcnQpIAotCQljb25uZWN0aW9uLmdldEF0dHJpYnV0ZShvYmplY3ROYW1lLCBOVU1fQ09OX0RFU1RST1lFRF9DT1VOVCk7CisgICAgamF2YXgubWFuYWdlbWVudC5vcGVubWJlYW4uQ29tcG9zaXRlRGF0YVN1cHBvcnQgcmV0dXJuVmFsdWUgPQorICAgICAgICAoamF2YXgubWFuYWdlbWVudC5vcGVubWJlYW4uQ29tcG9zaXRlRGF0YVN1cHBvcnQpCisgICAgICAgIGNvbm5lY3Rpb24uZ2V0QXR0cmlidXRlKG9iamVjdE5hbWUsIE5VTV9DT05fREVTVFJPWUVEX0NPVU5UKTsKIAogICAgICAgICByZXR1cm4gbmV3IEludGVnZXIocmV0dXJuVmFsdWUuZ2V0KCJjb3VudCIpLnRvU3RyaW5nKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQueGEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDQ2YmUzOWYuLjZkOWE3YzQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXJrY29ubmVjdGlvbmFzYmFkLnhhL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw4ICsxLDggQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoaWQgaW50ZWdlciAsIGRlc2NyaXB0aW9uIGNoYXIoNTApKTsNCi0NCi1kcm9wIHRhYmxlIG93bmVyOw0KLQ0KLWNyZWF0ZSB0YWJsZSBvd25lciAoIGlkIGludGVnZXIsIGRlc2NyaXB0aW9uIGNoYXIoNTApKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyIChpZCBpbnRlZ2VyICwgZGVzY3JpcHRpb24gY2hhcig1MCkpOworCitkcm9wIHRhYmxlIG93bmVyOworCitjcmVhdGUgdGFibGUgb3duZXIgKCBpZCBpbnRlZ2VyLCBkZXNjcmlwdGlvbiBjaGFyKDUwKSk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXJrY29ubmVjdGlvbmFzYmFkLnhhL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggYTVlYTJmOC4uZDg3ZDVkZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXJrY29ubmVjdGlvbmFzYmFkLnhhL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXJrY29ubmVjdGlvbmFzYmFkLnhhL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEsMiArMSwyIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotZHJvcCB0YWJsZSBvd25lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7Citkcm9wIHRhYmxlIG93bmVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXhjb25uZWN0aW9udXNhZ2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWF4Y29ubmVjdGlvbnVzYWdlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjNkZjdmZC4uZGRhODBkYyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXhjb25uZWN0aW9udXNhZ2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21heGNvbm5lY3Rpb251c2FnZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtbWF4Y29ubmVjdGlvbnVzYWdlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXhjb25uZWN0aW9udXNhZ2UvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXhjb25uZWN0aW9udXNhZ2UvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGY4NWJiMTkuLmI2MjZhZjQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWF4Y29ubmVjdGlvbnVzYWdlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21heGNvbm5lY3Rpb251c2FnZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTY3LDcgKzY3LDcgQEAKIAogICAgICAgICAvL0NvbW1lbnRlZCBhcyB0aGlzIHRlc3QgaXMgbm90IHZhbGlkLgogICAgICAgICAvL3BoeXNpY2FsIGNvbm5lY3Rpb24gKGRzLmdldENvbm5lY3Rpb24oY29ubikpIHdpbGwgYmUgZGlmZmVyZW50IGVhY2ggdGltZS4KLSAgICAgICAgCisKICAgICAgICAgLyp1c2VYQSA9IHRydWU7CiAgICAgICAgIHN0YXR1cyA9IGNvbm5lY3Rpb25TaGFyaW5nVGVzdChzaW1wbGVCTVAsIHVzZVhBLCAxMjIyMSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWF4Y29ubmVjdGlvbnVzYWdlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWF4Y29ubmVjdGlvbnVzYWdlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCA1MWIwNzM1Li4zOTZjNTY2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21heGNvbm5lY3Rpb251c2FnZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXhjb25uZWN0aW9udXNhZ2Uvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBtYXhfY29ubmVjdGlvbl91c2FnZTsNCi0NCi1DUkVBVEUgVEFCTEUgbWF4X2Nvbm5lY3Rpb25fdXNhZ2UgKA0KLSAgICBpZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIHZhbHVlICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgbWF4X2Nvbm5lY3Rpb25fdXNhZ2U7CisKK0NSRUFURSBUQUJMRSBtYXhfY29ubmVjdGlvbl91c2FnZSAoCisgICAgaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIHZhbHVlICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWF4Y29ubmVjdGlvbnVzYWdlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21heGNvbm5lY3Rpb251c2FnZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDRlNTc3YTMuLmIzYzhiOTcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWF4Y29ubmVjdGlvbnVzYWdlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXhjb25uZWN0aW9udXNhZ2Uvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBtYXhfY29ubmVjdGlvbl91c2FnZTsNCitEcm9wIHRhYmxlIG1heF9jb25uZWN0aW9uX3VzYWdlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tdWx0aXBsZWNsb3NlY29ubmVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tdWx0aXBsZWNsb3NlY29ubmVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDZiYWUzMWIuLmYwYzI4YmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbXVsdGlwbGVjbG9zZWNvbm5lY3Rpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL211bHRpcGxlY2xvc2Vjb25uZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE4ICsxNSwxOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1tdWx0aXBsZWNsb3NlY29ubmVjdGlvbiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tdWx0aXBsZWNsb3NlY29ubmVjdGlvbi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL211bHRpcGxlY2xvc2Vjb25uZWN0aW9uL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBiMjI3Y2FjLi40MmQ1YTE2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL211bHRpcGxlY2xvc2Vjb25uZWN0aW9uL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL211bHRpcGxlY2xvc2Vjb25uZWN0aW9uL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw5ICsxLDkgQEAKLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsNCi0NCi1DUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSCAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDEsICd3eHl6Jyk7DQotSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMiwgJ3BxcnMnKTsNCitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7CisKK0NSRUFURSBUQUJMRSBUWExFVkVMU1dJVENIICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0lOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDEsICd3eHl6Jyk7CitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygyLCAncHFycycpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tdWx0aXBsZWNsb3NlY29ubmVjdGlvbi9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tdWx0aXBsZWNsb3NlY29ubmVjdGlvbi9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDBjMTI0MmYuLmQxMWExMTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbXVsdGlwbGVjbG9zZWNvbm5lY3Rpb24vc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL211bHRpcGxlY2xvc2Vjb25uZWN0aW9uL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEsMiArMSwyIEBACi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7DQotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsNCitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7CitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tdWx0aXBsZXVzZXJjcmVkZW50aWFscy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tdWx0aXBsZXVzZXJjcmVkZW50aWFscy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGZjNDhhYzkuLjE2MTM2ZGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL211bHRpcGxldXNlcmNyZWRlbnRpYWxzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE4ICsxNSwxOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1tdWx0aXBsZXVzZXJjcmVkZW50aWFscyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tdWx0aXBsZXVzZXJjcmVkZW50aWFscy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL211bHRpcGxldXNlcmNyZWRlbnRpYWxzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCA4NzA3M2NhLi5hNzFkZDhhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL211bHRpcGxldXNlcmNyZWRlbnRpYWxzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL211bHRpcGxldXNlcmNyZWRlbnRpYWxzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw4ICsxLDggQEAKLUNBTEwgU1lTQ1NfVVRJTC5TWVNDU19TRVRfREFUQUJBU0VfUFJPUEVSVFkoDQotICAgICdkZXJieS51c2VyLmRlcmJ5JywNCi0gICAgJ2RlcmJ5JykgICAgICA7DQotDQotQ0FMTCBTWVNDU19VVElMLlNZU0NTX1NFVF9EQVRBQkFTRV9QUk9QRVJUWSgNCi0gICAgICAgICdkZXJieS51c2VyLmphdmFkYicsDQotICAgICAgICAnamF2YWRiJykgICAgIDsNCi0NCitDQUxMIFNZU0NTX1VUSUwuU1lTQ1NfU0VUX0RBVEFCQVNFX1BST1BFUlRZKAorICAgICdkZXJieS51c2VyLmRlcmJ5JywKKyAgICAnZGVyYnknKSAgICAgIDsKKworQ0FMTCBTWVNDU19VVElMLlNZU0NTX1NFVF9EQVRBQkFTRV9QUk9QRVJUWSgKKyAgICAgICAgJ2RlcmJ5LnVzZXIuamF2YWRiJywKKyAgICAgICAgJ2phdmFkYicpICAgICA7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9uYWNjL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9uYWNjL2J1aWxkLnhtbAppbmRleCA1MjM0NzdkLi4xYTQwZTA3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vbmFjYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub25hY2MvYnVpbGQueG1sCkBAIC0yNCw3ICsyNCw3IEBACiBdPgogCiA8cHJvamVjdCBuYW1lPSJub25hY2MiIGJhc2VkaXI9Ii4iIGRlZmF1bHQ9InVzYWdlIj4KLSAgICAKKwogICAgICZjb21tb25TZXR1cDsKICAgICAmY29tbW9uQnVpbGQ7CiAgICAgJnRlc3RQcm9wZXJ0aWVzOwpAQCAtNjAsMjQgKzYwLDI0IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwLXNxbCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjb20uc3VuLnMxYXNkZXYuamRiYy5ub25hY2MuU2ltcGxlSmRiY0NsaWVudCIgZm9yaz0idHJ1ZSI+CiAgICAgICAgIDxhcmcgdmFsdWU9ImpkYmMvbm9uYWNjIi8+Ci0gICAgICAKKwogICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxIb3N0IiB2YWx1ZT0ibG9jYWxob3N0Ii8+CiAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIzNzAwIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDxjbGFzc3BhdGg+CiAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogPCEtLSAgICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9Ii8+LS0+Ci08IS0tCSAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9pbnN0YWxsL2FwcGxpY2F0aW9ucy9qbXNyYS9pbXFqbXNyYS5qYXIiLz4tLT4KLQkgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50LmphciIvPgorPCEtLSAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuUzFBU19IT01FfS9saWIvaW5zdGFsbC9hcHBsaWNhdGlvbnMvam1zcmEvaW1xam1zcmEuamFyIi8+LS0+CisgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXIiLz4KICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7YXNzZW1ibGUuZGlyfSIvPgogICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAtc3FsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGUuc3FsIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vbmFjYy9jbGllbnQvU2ltcGxlSmRiY0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub25hY2MvY2xpZW50L1NpbXBsZUpkYmNDbGllbnQuamF2YQppbmRleCAwOGY1YmUwLi5hYWE4MDQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vbmFjYy9jbGllbnQvU2ltcGxlSmRiY0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9uYWNjL2NsaWVudC9TaW1wbGVKZGJjQ2xpZW50LmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogcHVibGljIGNsYXNzIFNpbXBsZUpkYmNDbGllbnQgewotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oIFN0cmluZyBhcmd2W10gKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nIHRlc3RTdWl0ZSA9ICJOb25BQ0MgIjsKICAgICAgICAgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CkBAIC0zOSw3ICszOSw3IEBACiAKICAgICAgICAgICAgIHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICBzdG10LmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBOT05BQ0MiKTsKLSAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICJ0ZXN0MSAiLCBzdGF0LlBBU1MgKTsgCisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAidGVzdDEgIiwgc3RhdC5QQVNTICk7CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgInRlc3QxICIsICBzdGF0LkZBSUwgKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9uYWNjL3NxbC9jcmVhdGUuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub25hY2Mvc3FsL2NyZWF0ZS5zcWwKaW5kZXggOTdkNDcyMS4uNWMzMzg2MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub25hY2Mvc3FsL2NyZWF0ZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub25hY2Mvc3FsL2NyZWF0ZS5zcWwKQEAgLTEsNSArMSw1IEBACiBEUk9QIFRBQkxFIE5PTkFDQzsKIENSRUFURSBUQUJMRSBOT05BQ0MoCi0gICAgbmFtZSBjaGFyKDIwKSwgCisgICAgbmFtZSBjaGFyKDIwKSwKICAgICBudW0gaW50ZWdlcgogKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9wYXNzd2Rmb3JkYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWJiMDBmNS4uZjQ4OWI5NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE4ICsxNSwxOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1ub3Bhc3N3ZGZvcmRiIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vcGFzc3dkZm9yZGIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL2J1aWxkLnhtbAppbmRleCA4NWZhMmRiLi43NmY1YWRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vcGFzc3dkZm9yZGIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9wYXNzd2Rmb3JkYi9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDQ3ICs0OCw0NyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgCisKICAgICAgIDwhLS0gc2V0IHVwIG5vbiB4YSBwb29scyAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtY29tbW9uIi8+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9zMXFlREIxIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLW5vcGFzc3dkZm9yZGItcG9vbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtbm9wYXNzd2Rmb3JkYi1wb29sLnByb3BlcnR5LlBhc3N3b3JkPSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgorICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLW5vcGFzc3dkZm9yZGItcG9vbC5wcm9wZXJ0eS5QYXNzd29yZD0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLW5vcGFzc3dkZm9yZGItcG9vbCIvPgorICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtbm9wYXNzd2Rmb3JkYi1wb29sIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3MxcWVEQjIiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIAorCiAgICAgICA8IS0tIFNldCB1cCBYQSBwb29scyAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1ub3Bhc3N3ZGZvcmRiLXhhLXBvb2wtMSIvPgotCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLmNsYXNzIiB2YWx1ZT0ib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudFhBRGF0YVNvdXJjZSIvPgorICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+CisgICAgPHBhcmFtIG5hbWU9ImRiLmNsYXNzIiB2YWx1ZT0ib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudFhBRGF0YVNvdXJjZSIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvczFxZURCLXhhIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtbm9wYXNzd2Rmb3JkYi14YS1wb29sLTEiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3MxcWVEQjEteGEiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1ub3Bhc3N3ZGZvcmRiLXhhLXBvb2wtMSIvPgpAQCAtOTYsMzAgKzk2LDMwIEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1ub3Bhc3N3ZGZvcmRiLXhhLXBvb2wtMiIvPgotCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLmNsYXNzIiB2YWx1ZT0ib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudFhBRGF0YVNvdXJjZSIvPgorICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+CisgICAgPHBhcmFtIG5hbWU9ImRiLmNsYXNzIiB2YWx1ZT0ib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudFhBRGF0YVNvdXJjZSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtbm9wYXNzd2Rmb3JkYi14YS1wb29sLTIucHJvcGVydHkuUGFzc3dvcmQ9Ii8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCisgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtbm9wYXNzd2Rmb3JkYi14YS1wb29sLTIucHJvcGVydHkuUGFzc3dvcmQ9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1ub3Bhc3N3ZGZvcmRiLXhhLXBvb2wtMiIvPgorICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtbm9wYXNzd2Rmb3JkYi14YS1wb29sLTIiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvczFxZURCMi14YSIvPgogICAgICAgPC9hbnRjYWxsPgogCi0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CkBAIC0xMjgsMjcgKzEyOCwyNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9zMXFlREIxIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1ub3Bhc3N3ZGZvcmRiLXBvb2wiLz4KKyAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLW5vcGFzc3dkZm9yZGItcG9vbCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9zMXFlREIyIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLWNvbW1vbiIvPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3MxcWVEQjEteGEiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtbm9wYXNzd2Rmb3JkYi14YS1wb29sLTEiLz4KKyAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLW5vcGFzc3dkZm9yZGIteGEtcG9vbC0xIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3MxcWVEQi14YSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1ub3Bhc3N3ZGZvcmRiLXhhLXBvb2wtMiIvPgorICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtbm9wYXNzd2Rmb3JkYi14YS1wb29sLTIiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvczFxZURCMi14YSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9wYXNzd2Rmb3JkYi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOWEwMDkyOS4uNDNlYjliYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vcGFzc3dkZm9yZGIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNSw1OCArMjUsNTggQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCi0JU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7Ci0JU3RyaW5nIHRlc3RTdWl0ZSA9ICJOb1Bhc3N3b3JkZm9yREIgIjsKKworICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiTm9QYXNzd29yZGZvckRCICI7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU2Vzc2lvbkhvbWUiKTsKLQlTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKKyAgICBTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZVNlc3Npb25Ib21lLmNsYXNzKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgV2lsbCBmYWlsIHRpbGwgRGVyYnkgZ2V0cyBhIGJldHRlciBYQSBkcml2ZXIiKTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJObyBQYXNzd29yZCBmb3IgREIgdGVzdHMiKTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJObyBQYXNzd29yZCBmb3IgREIgdGVzdHMiKTsKICAgICAgICAgU2ltcGxlU2Vzc2lvbiBzaW1wbGVTZXNzaW9uID0gc2ltcGxlU2Vzc2lvbkhvbWUuY3JlYXRlKCk7Ci0gICAgICAgIAkKLQlpZiAoc2ltcGxlU2Vzc2lvbi50ZXN0MSgpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LlBBU1MgKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LkZBSUwgKTsKLQl9CisKKyAgICBpZiAoc2ltcGxlU2Vzc2lvbi50ZXN0MSgpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LlBBU1MgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LkZBSUwgKTsKKyAgICB9CiAKICAgICAgICAgaWYgKHNpbXBsZVNlc3Npb24udGVzdDIoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDIgOiAiICwgc3RhdC5QQVNTICk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDIgOiAiICwgc3RhdC5GQUlMICk7Ci0JfQotICAgICAgICAKLSAgICAgICAgaWYgKHNpbXBsZVNlc3Npb24udGVzdDMoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDMgOiAiICwgc3RhdC5QQVNTICk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDMgOiAiICwgc3RhdC5GQUlMICk7Ci0JfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MiA6ICIgLCBzdGF0LlBBU1MgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MiA6ICIgLCBzdGF0LkZBSUwgKTsKKyAgICB9CiAKLSAgCWlmIChzaW1wbGVTZXNzaW9uLnRlc3Q0KCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3Q0IDogIiAsIHN0YXQuUEFTUyApOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3Q0IDogIiAsIHN0YXQuRkFJTCApOwotCX0KKyAgICAgICAgaWYgKHNpbXBsZVNlc3Npb24udGVzdDMoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDMgOiAiICwgc3RhdC5QQVNTICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDMgOiAiICwgc3RhdC5GQUlMICk7CisgICAgfQorCisgICAgICBpZiAoc2ltcGxlU2Vzc2lvbi50ZXN0NCgpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0NCA6ICIgLCBzdGF0LlBBU1MgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0NCA6ICIgLCBzdGF0LkZBSUwgKTsKKyAgICB9CiAKICAgICAgICAgaWYgKHNpbXBsZVNlc3Npb24udGVzdDUoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDUgOiAiICwgc3RhdC5QQVNTICk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDUgOiAiICwgc3RhdC5GQUlMICk7Ci0JfQotICAgICAgICAKLSAgICAgICAgaWYgKHNpbXBsZVNlc3Npb24udGVzdDYoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDYgOiAiICwgc3RhdC5QQVNTICk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDYgOiAiICwgc3RhdC5GQUlMICk7Ci0JfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0NSA6ICIgLCBzdGF0LlBBU1MgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0NSA6ICIgLCBzdGF0LkZBSUwgKTsKKyAgICB9CiAKLQkKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgICAgICBpZiAoc2ltcGxlU2Vzc2lvbi50ZXN0NigpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0NiA6ICIgLCBzdGF0LlBBU1MgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0NiA6ICIgLCBzdGF0LkZBSUwgKTsKKyAgICB9CisKKworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vcGFzc3dkZm9yZGIvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCA0NzY4ODFlLi45ZWY0ZGVkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vcGFzc3dkZm9yZGIvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vcGFzc3dkZm9yZGIvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtODIsNiArODIsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vcGFzc3dkZm9yZGIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vcGFzc3dkZm9yZGIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggNTBjZjM5Ni4uMWE4ZWVhNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9wYXNzd2Rmb3JkYi9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjgsNDggKzI4LDQ4IEBACiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPkRhdGFTb3VyY2U8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qZGJjL3MxcWVEQjwvam5kaS1uYW1lPgotCTxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KLQkgIDxuYW1lPkRCVVNFUjwvbmFtZT4KLQkgIDxwYXNzd29yZD48L3Bhc3N3b3JkPgotCTwvZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CisgICAgPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgorICAgICAgPG5hbWU+REJVU0VSPC9uYW1lPgorICAgICAgPHBhc3N3b3JkPjwvcGFzc3dvcmQ+CisgICAgPC9kZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlMTwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmpkYmMvczFxZURCMTwvam5kaS1uYW1lPgotCTxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KLQkgIDxuYW1lPkRCVVNFUjwvbmFtZT4KLQk8L2RlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgorICAgIDxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KKyAgICAgIDxuYW1lPkRCVVNFUjwvbmFtZT4KKyAgICA8L2RlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPkRhdGFTb3VyY2UyPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9zMXFlREIyPC9qbmRpLW5hbWU+Ci0JPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgotCSAgPG5hbWU+REJVU0VSPC9uYW1lPgotCSAgPHBhc3N3b3JkPkRCUEFTU1dPUkQ8L3Bhc3N3b3JkPgotCTwvZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CisgICAgPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgorICAgICAgPG5hbWU+REJVU0VSPC9uYW1lPgorICAgICAgPHBhc3N3b3JkPkRCUEFTU1dPUkQ8L3Bhc3N3b3JkPgorICAgIDwvZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgIDxyZXMtcmVmLW5hbWU+WEFEYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9zMXFlREIteGE8L2puZGktbmFtZT4KLQk8ZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+Ci0JICA8bmFtZT5EQlVTRVI8L25hbWU+Ci0JICA8cGFzc3dvcmQ+PC9wYXNzd29yZD4KLQk8L2RlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgorICAgIDxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KKyAgICAgIDxuYW1lPkRCVVNFUjwvbmFtZT4KKyAgICAgIDxwYXNzd29yZD48L3Bhc3N3b3JkPgorICAgIDwvZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgIDxyZXMtcmVmLW5hbWU+WEFEYXRhU291cmNlMTwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmpkYmMvczFxZURCMS14YTwvam5kaS1uYW1lPgotCTxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KLQkgIDxuYW1lPkRCVVNFUjwvbmFtZT4KLQk8L2RlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgorICAgIDxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KKyAgICAgIDxuYW1lPkRCVVNFUjwvbmFtZT4KKyAgICA8L2RlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPlhBRGF0YVNvdXJjZTI8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qZGJjL3MxcWVEQjIteGE8L2puZGktbmFtZT4KLQk8ZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+Ci0JICA8bmFtZT5EQlVTRVI8L25hbWU+Ci0JICA8cGFzc3dvcmQ+REJQQVNTV09SRDwvcGFzc3dvcmQ+Ci0JPC9kZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KKyAgICA8ZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CisgICAgICA8bmFtZT5EQlVTRVI8L25hbWU+CisgICAgICA8cGFzc3dvcmQ+REJQQVNTV09SRDwvcGFzc3dvcmQ+CisgICAgPC9kZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgPC9lamI+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9wYXNzd2Rmb3JkYi9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9wYXNzd2Rmb3JkYi9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQppbmRleCBjNzMzNjdlLi41N2JjZGY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vcGFzc3dkZm9yZGIvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCkBAIC0yNywxNCArMjcsMTQgQEAKIHsKIAogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY3R4dF87Ci0gICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBpY187IAorICAgIHByaXZhdGUgSW5pdGlhbENvbnRleHQgaWNfOwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgY3R4dF8gPSBjb250ZXh0OwotCXRyeSB7Ci0JICAgIGljXyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCX0gY2F0Y2goIE5hbWluZ0V4Y2VwdGlvbiBuZSApIHsKLQkgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIHRyeSB7CisgICAgICAgIGljXyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIH0gY2F0Y2goIE5hbWluZ0V4Y2VwdGlvbiBuZSApIHsKKyAgICAgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewpAQCAtNDksNjEgKzQ5LDYxIEBACiAgICAgICogICAgIDxwYXNzd29yZD48L3Bhc3N3b3JkPgogICAgICAqICAgPC9kZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KICAgICAgKiA8L3Jlc291cmNlLXJlZj4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIE5vdGUgdGhhdCB0aGUgcG9vbCBzdGlsbCBoYXMgYSB2YWxpZCBwYXNzd29yZCBzZXQgaW4gaXQKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSgpIHRocm93cyBFeGNlcHRpb24gewotCURhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOwotCS8vY2xlYW4gdGhlIGRhdGFiYXNlCi0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKGNvbm4xICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JfQotCQotCXJldHVybiBmYWxzZTsKKyAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICAvL2NsZWFuIHRoZSBkYXRhYmFzZQorICAgIHRyeSB7CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIExvb2t1cCBhIGRhdGFzb3VyY2Ugd2l0aG91dCByZXNvdXJjZS1yZWYgc3BlY2lmeWluZyAKKyAgICAgKiBMb29rdXAgYSBkYXRhc291cmNlIHdpdGhvdXQgcmVzb3VyY2UtcmVmIHNwZWNpZnlpbmcKICAgICAgKiBwYXNzd29yZCBpbiBkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbAogICAgICAqIDxyZXNvdXJjZS1yZWY+CiAgICAgICogICA8ZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CiAgICAgICogICAgIDxuYW1lPkRCVVNFUjwvbmFtZT4KICAgICAgKiAgIDwvZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CiAgICAgICogPC9yZXNvdXJjZS1yZWY+Ci0gICAgICogCisgICAgICoKICAgICAgKiBOb3RlIHRoYXQgdGhlIHBvb2wgc3RpbGwgaGFzIGEgdmFsaWQgcGFzc3dvcmQgc2V0IGluIGl0CiAgICAgICovCiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MigpIHRocm93cyBFeGNlcHRpb24gewotICAgIAlEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlMSIpOwotCUNvbm5lY3Rpb24gY29ubjEgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JLy9jbGVhbiB0aGUgZGF0YWJhc2UKLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gdHJ1ZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoY29ubjEgIT0gbnVsbCkgeyAKLQkgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQl9Ci0JCi0JcmV0dXJuIGZhbHNlOworICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlMSIpOworICAgIENvbm5lY3Rpb24gY29ubjEgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgLy9jbGVhbiB0aGUgZGF0YWJhc2UKKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoY29ubjEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBMb29rdXAgYSBkYXRhc291cmNlIHdpdGggcmVzb3VyY2UtcmVmIHNwZWNpZnlpbmcgCisgICAgICogTG9va3VwIGEgZGF0YXNvdXJjZSB3aXRoIHJlc291cmNlLXJlZiBzcGVjaWZ5aW5nCiAgICAgICogcGFzc3dvcmQgaW4gZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWwgYnV0IG5vIHBhc3N3b3JkCiAgICAgICogaW4gdGhlIHBvb2wKICAgICAgKiA8cmVzb3VyY2UtcmVmPgpAQCAtMTEyLDI3ICsxMTIsMjcgQEAKICAgICAgKiAgICAgPHBhc3N3b3JkPkRCUEFTU1dPUkQ8L3Bhc3N3b3JkPgogICAgICAqICAgPC9kZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KICAgICAgKiA8L3Jlc291cmNlLXJlZj4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIE5vdGUgdGhhdCB0aGUgcG9vbCBoYXMgbm8gcGFzc3dvcmQgc2V0IGluIGl0CiAgICAgICovCiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MygpIHRocm93cyBFeGNlcHRpb24gewotICAgIAlEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlMiIpOwotCUNvbm5lY3Rpb24gY29ubjEgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JLy9jbGVhbiB0aGUgZGF0YWJhc2UKLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKGNvbm4xICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JfQotCQotCXJldHVybiB0cnVlOworICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlMiIpOworICAgIENvbm5lY3Rpb24gY29ubjEgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgLy9jbGVhbiB0aGUgZGF0YWJhc2UKKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKGNvbm4xICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICAvKioKQEAgLTE0NCw2MSArMTQ0LDYxIEBACiAgICAgICogICAgIDxwYXNzd29yZD48L3Bhc3N3b3JkPgogICAgICAqICAgPC9kZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KICAgICAgKiA8L3Jlc291cmNlLXJlZj4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIE5vdGUgdGhhdCB0aGUgcG9vbCBzdGlsbCBoYXMgYSB2YWxpZCBwYXNzd29yZCBzZXQgaW4gaXQKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0NCgpIHRocm93cyBFeGNlcHRpb24gewotCURhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L1hBRGF0YVNvdXJjZSIpOwotCUNvbm5lY3Rpb24gY29ubjEgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JLy9jbGVhbiB0aGUgZGF0YWJhc2UKLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gdHJ1ZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoY29ubjEgIT0gbnVsbCkgeyAKLQkgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQl9Ci0JCi0JcmV0dXJuIGZhbHNlOworICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L1hBRGF0YVNvdXJjZSIpOworICAgIENvbm5lY3Rpb24gY29ubjEgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgLy9jbGVhbiB0aGUgZGF0YWJhc2UKKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoY29ubjEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBMb29rdXAgYSBkYXRhc291cmNlIHdpdGhvdXQgcmVzb3VyY2UtcmVmIHNwZWNpZnlpbmcgCisgICAgICogTG9va3VwIGEgZGF0YXNvdXJjZSB3aXRob3V0IHJlc291cmNlLXJlZiBzcGVjaWZ5aW5nCiAgICAgICogcGFzc3dvcmQgaW4gZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWwKICAgICAgKiA8cmVzb3VyY2UtcmVmPgogICAgICAqICAgPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgogICAgICAqICAgICA8bmFtZT5EQlVTRVI8L25hbWU+CiAgICAgICogICA8L2RlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgogICAgICAqIDwvcmVzb3VyY2UtcmVmPgotICAgICAqIAorICAgICAqCiAgICAgICogTm90ZSB0aGF0IHRoZSBwb29sIHN0aWxsIGhhcyBhIHZhbGlkIHBhc3N3b3JkIHNldCBpbiBpdAogICAgICAqLwogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAJRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvWEFEYXRhU291cmNlMSIpOwotCUNvbm5lY3Rpb24gY29ubjEgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JLy9jbGVhbiB0aGUgZGF0YWJhc2UKLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gdHJ1ZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoY29ubjEgIT0gbnVsbCkgeyAKLQkgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQl9Ci0JCi0JcmV0dXJuIGZhbHNlOworICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9YQURhdGFTb3VyY2UxIik7CisgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICAvL2NsZWFuIHRoZSBkYXRhYmFzZQorICAgIHRyeSB7CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIExvb2t1cCBhIGRhdGFzb3VyY2Ugd2l0aCByZXNvdXJjZS1yZWYgc3BlY2lmeWluZyAKKyAgICAgKiBMb29rdXAgYSBkYXRhc291cmNlIHdpdGggcmVzb3VyY2UtcmVmIHNwZWNpZnlpbmcKICAgICAgKiBwYXNzd29yZCBpbiBkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbCBidXQgbm8gcGFzc3dvcmQKICAgICAgKiBpbiB0aGUgcG9vbAogICAgICAqIDxyZXNvdXJjZS1yZWY+CkBAIC0yMDcsMjcgKzIwNywyNyBAQAogICAgICAqICAgICA8cGFzc3dvcmQ+REJQQVNTV09SRDwvcGFzc3dvcmQ+CiAgICAgICogICA8L2RlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgogICAgICAqIDwvcmVzb3VyY2UtcmVmPgotICAgICAqIAorICAgICAqCiAgICAgICogTm90ZSB0aGF0IHRoZSBwb29sIGhhcyBubyBwYXNzd29yZCBzZXQgaW4gaXQKICAgICAgKi8KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3Q2KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgCURhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L1hBRGF0YVNvdXJjZTIiKTsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOwotCS8vY2xlYW4gdGhlIGRhdGFiYXNlCi0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChjb25uMSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCX0KLQkKLQlyZXR1cm4gdHJ1ZTsKKyAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvWEFEYXRhU291cmNlMiIpOworICAgIENvbm5lY3Rpb24gY29ubjEgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgLy9jbGVhbiB0aGUgZGF0YWJhc2UKKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKGNvbm4xICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9wYXNzd2Rmb3JkYi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vcGFzc3dkZm9yZGIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGIyMjdjYWMuLjQyZDVhMTYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9wYXNzd2Rmb3JkYi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw5ICsxLDkgQEAKLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsNCi0NCi1DUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSCAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDEsICd3eHl6Jyk7DQotSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMiwgJ3BxcnMnKTsNCitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7CisKK0NSRUFURSBUQUJMRSBUWExFVkVMU1dJVENIICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0lOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDEsICd3eHl6Jyk7CitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygyLCAncHFycycpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vcGFzc3dkZm9yZGIvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCAwYzEyNDJmLi5kMTFhMTE1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vcGFzc3dkZm9yZGIvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vcGFzc3dkZm9yZGIvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSwyICsxLDIgQEAKLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsNCi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOw0KK0Ryb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsKK0Ryb3AgdGFibGUgVFhMRVZFTFNXSVRDSDI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vYnVpbGQueG1sCmluZGV4IGNlZjQzNmQuLmMxMmZhNDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vYnVpbGQueG1sCkBAIC0zMiw4ICszMiw4IEBACiAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9Iioub3V0cHV0Ii8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8cmVjb3JkIG5hbWU9Im5vdHhjb25uLm91dHB1dCIgYWN0aW9uPSJzdGFydCIgLz4KLQkgICAgPGFudCBkaXI9InRlc3QxIiB0YXJnZXQ9ImFsbCIvPgotCSAgICA8YW50IGRpcj0idGVzdDIiIHRhcmdldD0iYWxsIi8+CisgICAgICAgIDxhbnQgZGlyPSJ0ZXN0MSIgdGFyZ2V0PSJhbGwiLz4KKyAgICAgICAgPGFudCBkaXI9InRlc3QyIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8cmVjb3JkIG5hbWU9Im5vdHhjb25uLm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgogICAgIDwvdGFyZ2V0PgogCkBAIC00OSw5ICs0OSw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIHJlY29uZmlnIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIHJlY29uZmlnIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDEvYnVpbGQucHJvcGVydGllcwppbmRleCA5YWExNDQ1Li4yNGQwNzkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QxL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0MS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOCArMTUsMTggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtbm90eGNvbm4iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0MS9idWlsZC54bWwKaW5kZXggYzQ2ZTM4OC4uNmVmZWUxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0MS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0MS9idWlsZC54bWwKQEAgLTMyLDE0ICszMiwxNCBAQAogICAmdGVzdHByb3BlcnRpZXM7CiAgICZqZGJjQ29tbW9uOwogICAmamRiY0NvbW1vblByb3BzOwotICAgIAotICAgIAorCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sYnVpbGQsZGVwbG95LHJ1bix1bmRlcGxveSIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MSwyNiArNTEsMjYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtb3JhY2xlLWNvbW1vbiIvPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLW9yYWNsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1vcmFjbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgpAQCAtNzgsNyArNzgsNyBAQAogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtb3JhY2xlLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0MS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0MS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGI4OTE2NDIuLmM5OTkzN2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDEvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QxL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTQ5LDYgKzQ5LDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QxL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0MS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCA1NGM2Nzg0Li4wNjIxY2ZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QxL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDEvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI4LDEwICsyOCwxMCBAQAogICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9vcmFjbGVyZXM8L2puZGktbmFtZT4KLQk8ZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+Ci0JICA8bmFtZT5zY290dDwvbmFtZT4KLQkgIDxwYXNzd29yZD50aWdlcjwvcGFzc3dvcmQ+Ci0JPC9kZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KKyAgICA8ZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CisgICAgICA8bmFtZT5zY290dDwvbmFtZT4KKyAgICAgIDxwYXNzd29yZD50aWdlcjwvcGFzc3dvcmQ+CisgICAgPC9kZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgIDwvZWpiPgogIDwvZW50ZXJwcmlzZS1iZWFucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDEvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QxL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCmluZGV4IDZkNmE3ZDEuLmFjY2JkYzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDEvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0MS9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQpAQCAtNTYsMjcgKzU2LDI3IEBACiAgICAgICAgICAgICBkcyA9IChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKSBpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKIAogICAgICAgICAgICAgVXNlclRyYW5zYWN0aW9uIHR4ID0oVXNlclRyYW5zYWN0aW9uKWN0eHRfLmdldFVzZXJUcmFuc2FjdGlvbigpOwotCSAgICAgIHR4LmJlZ2luKCk7CisgICAgICAgICAgdHguYmVnaW4oKTsKICAgICAgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgICAgbm9UeENvbm4gPSBkcy5nZXROb25UeENvbm5lY3Rpb24oKTsKKyAgICAgICAgICBub1R4Q29ubiA9IGRzLmdldE5vblR4Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgc3RtdCA9IGNvbm4uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJJTlNFUlQgSU5UTyBOT1RYQ09OTlRBQkxFIFZBTFVFUygnbWV0aG9kMScsMykiKTsKKyAgICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIklOU0VSVCBJTlRPIE5PVFhDT05OVEFCTEUgVkFMVUVTKCdtZXRob2QxJywzKSIpOwogICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5MSA9ICJTRUxFQ1QgKiBGUk9NIE5PVFhDT05OVEFCTEUiOwogICAgICAgICAgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeShxdWVyeTEpOwotCSAgICAgIHN0bXQyID0gbm9UeENvbm4uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgc3RtdDIgPSBub1R4Q29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIHJzMiA9IHN0bXQyLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBOT1RYQ09OTlRBQkxFIik7Ci0JICAgCisKICAgICAgICAgICAgIGlmICggcnMyLm5leHQoKSApIHsKLQkgICAgICAgIHJldHVybiBmYWxzZTsKLQkgICAgICB9Ci0gICAgICAgICAgICAKLQkgICAgICB0eC5jb21taXQoKTsKLQkgICAgICByZXR1cm4gdHJ1ZTsKLQkgICAgCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorCisgICAgICAgICAgdHguY29tbWl0KCk7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgRXhjZXB0aW9uLS0tIik7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgRXhjZXB0aW9uLS0tIik7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGlmIChycyAhPSBudWxsICkgewogICAgICAgICAgICAgICAgIHRyeSB7IHJzLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KQEAgLTg3LDcyICs4Nyw3MiBAQAogICAgICAgICAgICAgaWYgKGNvbm4gIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICB0cnkge2Nvbm4uY2xvc2UoKTt9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAJCisKICAgICAgICAgICAgIGlmIChyczIgIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICB0cnkge3JzMi5jbG9zZSgpO30gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoc3RtdDIgIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICB0cnkge3N0bXQyLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAkJCisKICAgICAgICAgICAgIGlmIChub1R4Q29ubiAhPSBudWxsICkgewogICAgICAgICAgICAgICAgIHRyeSB7IG5vVHhDb25uLmNsb3NlKCk7IH1jYXRjaCggRXhjZXB0aW9uIGUxKSB7fQogICAgICAgICAgICAgfQotCX0KKyAgICB9CiAKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MigpIHRocm93cyBFeGNlcHRpb24gewotCUNvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JQ29ubmVjdGlvbiBub1R4Q29ubiA9IG51bGw7CisgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKKyAgICBDb25uZWN0aW9uIG5vVHhDb25uID0gbnVsbDsKIAogICAgICAgICB0cnkgewogCiAgICAgICAgICAgICBkcyA9IChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwogCiAgICAgICAgICAgICBVc2VyVHJhbnNhY3Rpb24gdHggPShVc2VyVHJhbnNhY3Rpb24pY3R4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCk7Ci0JICAgICAgdHguYmVnaW4oKTsKKyAgICAgICAgICB0eC5iZWdpbigpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHZXR0aW5nIFRSQU5TQUNUSU9OQUwgY29ubmVjdGlvbiIpOwogICAgICAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXV0b2NvbW1pdCA9PiAiICsgY29ubi5nZXRBdXRvQ29tbWl0KCkpOwogCi0JICAgICAgaWYgKGNvbm4uZ2V0QXV0b0NvbW1pdCgpID09IHRydWUgKSB7Ci0JICAgICAgICAgIHJldHVybiBmYWxzZTsKLQkgICAgICB9CisgICAgICAgICAgaWYgKGNvbm4uZ2V0QXV0b0NvbW1pdCgpID09IHRydWUgKSB7CisgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CiAKLQkgICAgICBjb25uLmNsb3NlKCk7Ci0JICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyMDsgaSsrICkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJHZXR0aW5nIE5vblR4IGNvbm5lY3Rpb24iKTsKLQkgICAgICAgICAgbm9UeENvbm4gPSAoKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpZHMpLmdldE5vblR4Q29ubmVjdGlvbigpOwotICAJCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF1dG9jb21taXQgPT4gIiArIG5vVHhDb25uLmdldEF1dG9Db21taXQoKSk7Ci0JCSAgICBpZiAobm9UeENvbm4uZ2V0QXV0b0NvbW1pdCgpID09IGZhbHNlICkgewotCSAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwkKLQkJICAgIH0KLQkJICAgIG5vVHhDb25uLmNsb3NlKCk7Ci0JICAgICAgfQorICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDIwOyBpKysgKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdldHRpbmcgTm9uVHggY29ubmVjdGlvbiIpOworICAgICAgICAgICAgICBub1R4Q29ubiA9ICgoY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSlkcykuZ2V0Tm9uVHhDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXV0b2NvbW1pdCA9PiAiICsgbm9UeENvbm4uZ2V0QXV0b0NvbW1pdCgpKTsKKyAgICAgICAgICAgIGlmIChub1R4Q29ubi5nZXRBdXRvQ29tbWl0KCkgPT0gZmFsc2UgKSB7CisgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBub1R4Q29ubi5jbG9zZSgpOworICAgICAgICAgIH0KICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR2V0dGluZyBUUkFOU0FDVElPTkFMIGNvbm5lY3Rpb24iKTsKICAgICAgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF1dG9jb21taXQgPT4gIiArIGNvbm4uZ2V0QXV0b0NvbW1pdCgpKTsKLQkgICAgICBpZiAoY29ubi5nZXRBdXRvQ29tbWl0KCkgPT0gdHJ1ZSApIHsKLQkgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCSAgICAgIH0KLQkgICAgICBjb25uLmNsb3NlKCk7Ci0JICAgICAgdHguY29tbWl0KCk7CisgICAgICAgICAgaWYgKGNvbm4uZ2V0QXV0b0NvbW1pdCgpID09IHRydWUgKSB7CisgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgICAgY29ubi5jbG9zZSgpOworICAgICAgICAgIHR4LmNvbW1pdCgpOwogCi0JICAgICAgcmV0dXJuIHRydWU7Ci0JICAgIAorICAgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IEV4Y2VwdGlvbi0tLSIpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IEV4Y2VwdGlvbi0tLSIpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZmluYWxseSB7Ci0JICAgIHRyeSB7Ci0JCWlmIChub1R4Q29ubiAhPSBudWxsICkgewotCQkgICAgbm9UeENvbm4uY2xvc2UoKTsKLQkJfQotCSAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCX0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKG5vVHhDb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICBub1R4Q29ubi5jbG9zZSgpOworICAgICAgICB9CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgfQogCiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QxL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDAwZWI5NmMuLjJkM2QxYTIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDUgKzEsNSBAQAotRFJPUCBUQUJMRSBOT1RYQ09OTlRBQkxFOw0KLUNSRUFURSBUQUJMRSBOT1RYQ09OTlRBQkxFKA0KLSAgICBuYW1lIGNoYXIoMjApLCANCi0gICAgbnVtIGludGVnZXINCi0pOw0KK0RST1AgVEFCTEUgTk9UWENPTk5UQUJMRTsKK0NSRUFURSBUQUJMRSBOT1RYQ09OTlRBQkxFKAorICAgIG5hbWUgY2hhcigyMCksCisgICAgbnVtIGludGVnZXIKKyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QxL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QxL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggMDM0OTBkMC4uNzYyYTBmNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0MS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBOT1RYQ09OTlRBQkxFOw0KK0Ryb3AgdGFibGUgTk9UWENPTk5UQUJMRTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDIvYnVpbGQucHJvcGVydGllcwppbmRleCA5YWExNDQ1Li4yNGQwNzkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0Mi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOCArMTUsMTggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtbm90eGNvbm4iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0Mi9idWlsZC54bWwKaW5kZXggYzQ2ZTM4OC4uNmVmZWUxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0Mi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0Mi9idWlsZC54bWwKQEAgLTMyLDE0ICszMiwxNCBAQAogICAmdGVzdHByb3BlcnRpZXM7CiAgICZqZGJjQ29tbW9uOwogICAmamRiY0NvbW1vblByb3BzOwotICAgIAotICAgIAorCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sYnVpbGQsZGVwbG95LHJ1bix1bmRlcGxveSIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MSwyNiArNTEsMjYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtb3JhY2xlLWNvbW1vbiIvPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLW9yYWNsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1vcmFjbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgpAQCAtNzgsNyArNzgsNyBAQAogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtb3JhY2xlLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0Mi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0Mi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDdkNzA5Y2QuLjM3MmE0Y2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDIvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTQ5LDYgKzQ5LDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+LS0+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QyL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0Mi9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQppbmRleCA2MWMzYjBmLi4yZDI5ODJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QyL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDIvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKQEAgLTU2LDI4ICs1NiwyOCBAQAogICAgICAgICAgICAgZHMgPSAoY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSkgaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CiAKICAgICAgICAgICAgIFVzZXJUcmFuc2FjdGlvbiB0eCA9KFVzZXJUcmFuc2FjdGlvbiljdHh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKLQkgICAgICB0eC5iZWdpbigpOworICAgICAgICAgIHR4LmJlZ2luKCk7CiAgICAgICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigic2NvdHQiLCAidGlnZXIiKTsKICAgICAgICAgICAgIHN0bXQgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiSU5TRVJUIElOVE8gTk9UWENPTk5UQUJMRSBWQUxVRVMoJ21ldGhvZDEnLDMpIik7CisgICAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJJTlNFUlQgSU5UTyBOT1RYQ09OTlRBQkxFIFZBTFVFUygnbWV0aG9kMScsMykiKTsKICAgICAgICAgICAgIFN0cmluZyBxdWVyeTEgPSAiU0VMRUNUICogRlJPTSBOT1RYQ09OTlRBQkxFIjsKICAgICAgICAgICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkxKTsKLQkgICAgICBub1R4Q29ubiA9ICgoY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSlkcykuZ2V0Tm9uVHhDb25uZWN0aW9uKCJzY290dCIsICJ0aWdlciIpOworICAgICAgICAgIG5vVHhDb25uID0gKChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKWRzKS5nZXROb25UeENvbm5lY3Rpb24oInNjb3R0IiwgInRpZ2VyIik7CiAKLQkgICAgICBzdG10MiA9IG5vVHhDb25uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgIHN0bXQyID0gbm9UeENvbm4uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICByczIgPSBzdG10Mi5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gTk9UWENPTk5UQUJMRSIpOwotCSAgICAgIHR4LmNvbW1pdCgpOworICAgICAgICAgIHR4LmNvbW1pdCgpOwogICAgICAgICAgICAgaWYgKCByczIubmV4dCgpICkgewotCSAgICAgICAgcmV0dXJuIGZhbHNlOwotCSAgICAgIH0KLSAgICAgICAgICAgIAotCSAgICAgIAotCSAgICAgIHJldHVybiB0cnVlOwotCSAgICAKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisKKworICAgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IEV4Y2VwdGlvbi0tLSIpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IEV4Y2VwdGlvbi0tLSIpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBpZiAocnMgIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICB0cnkgeyBycy5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CkBAIC04OCwyMCArODgsMjAgQEAKICAgICAgICAgICAgIGlmIChjb25uICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHtjb25uLmNsb3NlKCk7fSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCQorCiAgICAgICAgICAgICBpZiAocnMyICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHtyczIuY2xvc2UoKTt9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHN0bXQyICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHtzdG10Mi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAJCQorCiAgICAgICAgICAgICBpZiAobm9UeENvbm4gIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICB0cnkgeyBub1R4Q29ubi5jbG9zZSgpOyB9Y2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KICAgICAgICAgICAgIH0KLQl9CisgICAgfQogCi0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0Mi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggMDBlYjk2Yy4uMmQzZDFhMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0Mi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0Mi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNSArMSw1IEBACi1EUk9QIFRBQkxFIE5PVFhDT05OVEFCTEU7DQotQ1JFQVRFIFRBQkxFIE5PVFhDT05OVEFCTEUoDQotICAgIG5hbWUgY2hhcigyMCksIA0KLSAgICBudW0gaW50ZWdlcg0KLSk7DQorRFJPUCBUQUJMRSBOT1RYQ09OTlRBQkxFOworQ1JFQVRFIFRBQkxFIE5PVFhDT05OVEFCTEUoCisgICAgbmFtZSBjaGFyKDIwKSwKKyAgICBudW0gaW50ZWdlcgorKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDIvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDIvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCAwMzQ5MGQwLi43NjJhMGY2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QyL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0Mi9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE5PVFhDT05OVEFCTEU7DQorRHJvcCB0YWJsZSBOT1RYQ09OTlRBQkxFOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4b3BzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhvcHMvYnVpbGQucHJvcGVydGllcwppbmRleCA0MDA1NmY2Li44YjgwNzk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhvcHMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhvcHMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTggKzE1LDE4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLW5vdHhvcHMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eG9wcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhvcHMvYnVpbGQueG1sCmluZGV4IGY1NDlmMGUuLjMzOTkyZjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eG9wcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4b3BzL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsNDQgKzQ4LDQ0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtbm90eG9wcy1wb29sIi8+Ci0JPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UudHlwZSIgdmFsdWU9ImphdmF4LnNxbC5YQURhdGFTb3VyY2UiLz4KLQk8cGFyYW0gbmFtZT0iZGIuY2xhc3MiIHZhbHVlPSJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50WEFEYXRhU291cmNlIi8+CisgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UudHlwZSIgdmFsdWU9ImphdmF4LnNxbC5YQURhdGFTb3VyY2UiLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIuY2xhc3MiIHZhbHVlPSJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50WEFEYXRhU291cmNlIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtbm90eG9wcy1wb29sLnN0ZWFkeV9wb29sX3NpemU9MSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtbm90eG9wcy1wb29sLnN0ZWFkeV9wb29sX3NpemU9MSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1ub3R4b3BzLXBvb2wubWF4X3Bvb2xfc2l6ZT0xIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1ub3R4b3BzLXBvb2wubWF4X3Bvb2xfc2l6ZT0xIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1ub3R4b3BzLXBvb2wiLz4KLQk8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9ub3R4b3BzIi8+CisgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvbm90eG9wcyIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KQEAgLTk0LDEzICs5NCwxMyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9ub3R4b3BzIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1jb25ucG9vbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLW5vdHhvcHMtcG9vbCIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eG9wcy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhvcHMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDM5ODYxYzUuLmRhY2JmYTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eG9wcy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4b3BzL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjUsMjggKzI1LDI4IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAotCVNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotCVN0cmluZyB0ZXN0U3VpdGUgPSAiTm9UeE9wcyAiOworCisgICAgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CisgICAgU3RyaW5nIHRlc3RTdWl0ZSA9ICJOb1R4T3BzICI7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU2Vzc2lvbkhvbWUiKTsKLQlTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKKyAgICBTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZVNlc3Npb25Ib21lLmNsYXNzKTsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgV2lsbCBmYWlsIHRpbGwgYSBiZXR0ZXIgWEEgZHJpdmVyIGlzIGludGVncmF0ZWQgd2l0aCBEZXJieSIpOwotCXN0YXQuYWRkRGVzY3JpcHRpb24oIlJ1bm5pbmcgbm90eG9wcyB0ZXN0U3VpdGUxICIpOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlJ1bm5pbmcgbm90eG9wcyB0ZXN0U3VpdGUxICIpOwogICAgICAgICBTaW1wbGVTZXNzaW9uIHNpbXBsZVNlc3Npb24gPSBzaW1wbGVTZXNzaW9uSG9tZS5jcmVhdGUoKTsKICAgICAgICAgaWYgKHNpbXBsZVNlc3Npb24udGVzdDEoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5QQVNTICk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5GQUlMICk7Ci0JfQotICAgIAotCQotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIDogIiAsIHN0YXQuUEFTUyApOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIDogIiAsIHN0YXQuRkFJTCApOworICAgIH0KKworCisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhvcHMvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eG9wcy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGYyMDdhODIuLmU0MTlhZmQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eG9wcy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eG9wcy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC02MiwxMiArNjIsMTIgQEAKICAgICA8Y29udGFpbmVyLXRyYW5zYWN0aW9uPgogICAgICAgPG1ldGhvZD4KICAgICAgICAgPGVqYi1uYW1lPlNpbXBsZVNlc3Npb25FSkI8L2VqYi1uYW1lPgotCTxtZXRob2QtbmFtZT51cGRhdGVEYjwvbWV0aG9kLW5hbWU+CisgICAgPG1ldGhvZC1uYW1lPnVwZGF0ZURiPC9tZXRob2QtbmFtZT4KICAgICAgIDwvbWV0aG9kPgogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlc05ldzwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICAgIC0tPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhvcHMvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhvcHMvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKaW5kZXggZDIzZDZmNS4uNzFkYjQ3OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4b3BzL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eG9wcy9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQpAQCAtMjgsMTQgKzI4LDE0IEBACiB7CiAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGN0eHRfOwotICAgIHByaXZhdGUgSW5pdGlhbENvbnRleHQgaWNfOyAKKyAgICBwcml2YXRlIEluaXRpYWxDb250ZXh0IGljXzsKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIGN0eHRfID0gY29udGV4dDsKLQl0cnkgewotCSAgICBpY18gPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQl9IGNhdGNoKCBOYW1pbmdFeGNlcHRpb24gbmUgKSB7Ci0JICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB0cnkgeworICAgICAgICBpY18gPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICB9IGNhdGNoKCBOYW1pbmdFeGNlcHRpb24gbmUgKSB7CisgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKQEAgLTQ3LDU1ICs0Nyw1NSBAQAogICAgICAqIGRpZCBub3QgaGFwcGVuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7Ci0JQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMxID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOworICAgIFJlc3VsdFNldCByczEgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAKLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgc3RtdDEuZXhlY3V0ZVF1ZXJ5KCAiU0VMRUNUICogRlJPTSBOT1RYT1BTIik7Ci0JfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChzdG10MSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCSAgICBpZiAoY29ubjEgIT0gbnVsbCkgeyAKLQkgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQl9Ci0JCi0JCi0JLy9Ob3cgdHJ5IGdldHRpbmcgYSBjb25uZWN0aW9uIGFnYWluLCBidXQgd2l0aGluIGEgdHJhbnNhY3Rpb24KLQlVc2VyVHJhbnNhY3Rpb24gdHggPSAoVXNlclRyYW5zYWN0aW9uKSBpY18ubG9va3VwKCJqYXZhOmNvbXAvVXNlclRyYW5zYWN0aW9uIik7Ci0JdHJ5IHsKLQkgICAgdHguYmVnaW4oKTsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHJzMSA9IHN0bXQxLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBOT1RYT1BTIik7IAotCSAgICB0eC5jb21taXQoKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgIGUucHJpbnRTdGFja1RyYWNlKCk7IAotCSAgIHJldHVybiBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAocnMxICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyByczEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCSAgICBpZiAoIHN0bXQxICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JICAgIGlmICggY29ubjEgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdDEuZXhlY3V0ZVF1ZXJ5KCAiU0VMRUNUICogRlJPTSBOT1RYT1BTIik7CisgICAgfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChzdG10MSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CiAgICAgfQotICAgIAorCisKKyAgICAvL05vdyB0cnkgZ2V0dGluZyBhIGNvbm5lY3Rpb24gYWdhaW4sIGJ1dCB3aXRoaW4gYSB0cmFuc2FjdGlvbgorICAgIFVzZXJUcmFuc2FjdGlvbiB0eCA9IChVc2VyVHJhbnNhY3Rpb24pIGljXy5sb29rdXAoImphdmE6Y29tcC9Vc2VyVHJhbnNhY3Rpb24iKTsKKyAgICB0cnkgeworICAgICAgICB0eC5iZWdpbigpOworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgcnMxID0gc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIE5PVFhPUFMiKTsKKyAgICAgICAgdHguY29tbWl0KCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAocnMxICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyByczEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoIHN0bXQxICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBjb25uMSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7fQogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhvcHMvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4b3BzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBiMWYwMzM3Li41ZDg4ZGZmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhvcHMvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eG9wcy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsOSArMSw5IEBACi1Ecm9wIHRhYmxlIE5PVFhPUFM7DQotDQotQ1JFQVRFIFRBQkxFIE5PVFhPUFMgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBOT1RYT1BTIFZBTFVFUygxLCAnd3h5eicpOw0KLUlOU0VSVCBJTlRPIE5PVFhPUFMgVkFMVUVTKDIsICdwcXJzJyk7DQorRHJvcCB0YWJsZSBOT1RYT1BTOworCitDUkVBVEUgVEFCTEUgTk9UWE9QUyAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBOT1RYT1BTIFZBTFVFUygxLCAnd3h5eicpOworSU5TRVJUIElOVE8gTk9UWE9QUyBWQUxVRVMoMiwgJ3BxcnMnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eG9wcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4b3BzL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggMjIzZmExZC4uNzYyYzAxMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4b3BzL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4b3BzL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEsMiArMSwyIEBACi1Ecm9wIHRhYmxlIE5PVFhPUFM7DQotRHJvcCB0YWJsZSBOT1RYT1BTOw0KK0Ryb3AgdGFibGUgTk9UWE9QUzsKK0Ryb3AgdGFibGUgTk9UWE9QUzsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb24vYnVpbGQucHJvcGVydGllcwppbmRleCA4NWFkMWVlLi40MDYyZjVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtb25seWdldGNvbm5lY3Rpb24iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjIwMDAiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbi9idWlsZC54bWwKaW5kZXggOWRhZWRjNy4uMWY3NzlmMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbi9idWlsZC54bWwKQEAgLTMyLDE0ICszMiwxNCBAQAogICAmdGVzdHByb3BlcnRpZXM7CiAgICZqZGJjQ29tbW9uOwogICAmamRiY0NvbW1vblByb3BzOwotICAgIAorCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbixidWlsZCxkZXBsb3kscnVuLHVuZGVwbG95Ii8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICA8ZGVsZXRlIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTY2LDI4ICs2NiwyOCBAQAogICAgIDwhLS0KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXBvaW50YmFzZS1wb29sLnByb3BlcnR5LmFzc29jaWF0ZXdpdGh0aHJlYWQ9dHJ1ZSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtcG9pbnRiYXNlLXBvb2wucHJvcGVydHkuYXNzb2NpYXRld2l0aHRocmVhZD10cnVlIi8+CiAgICAgPC9hbnRjYWxsPgogICAgIC0tPgogCiAgIDwvdGFyZ2V0PgotICAKLSAgCisKKwogICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLWNvbW1vbiIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgIDwvdGFyZ2V0PgotICAKLSAgCisKKwogICA8dGFyZ2V0IG5hbWU9InJ1biI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZS5zcWwiLz4KLSAgICA8L2FudGNhbGw+ICAKKyAgICA8L2FudGNhbGw+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICA8L3RhcmdldD4KLSAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMjRhMTA4NC4uY2UxY2UzMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgCisKICAgICBwcml2YXRlIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwogICAgIHByaXZhdGUgU3RyaW5nIHRlc3RTdWl0ZSA9ICJqZGJjLW9ubHlnZXRjb25uZWN0aW9uICI7CiAgICAgcHJpdmF0ZSBOb1R4Q29ublRlc3QgYmVhbjsKQEAgLTMzLDIyICszMywyMiBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCi0vLyAJU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CisvLyAgICAgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CiAvLwogLy8gICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAvLyAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvTm9UeENvbm5UZXN0RUpCIik7Ci0vLwlOb1R4Q29ublRlc3RIb21lIGhvbWUgPSAoTm9UeENvbm5UZXN0SG9tZSkKKy8vICAgIE5vVHhDb25uVGVzdEhvbWUgaG9tZSA9IChOb1R4Q29ublRlc3RIb21lKQogLy8gICAgICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgTm9UeENvbm5UZXN0SG9tZS5jbGFzcyk7CiAvLwogLy8gICAgICAgIE5vVHhDb25uVGVzdCBiZWFuID0gaG9tZS5jcmVhdGUoKTsKIAogLy8gICAgICBpZiAoIGJlYW4udGVzdDEoKSApIHsKLS8vCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7Ci0vLwl9IGVsc2UgewotLy8JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QxIDogIiwgc3RhdC5GQUlMKTsKLS8vCX0KLS8vCXN0YXQucHJpbnRTdW1tYXJ5KCk7Ci0gICAgICAgIAorLy8gICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QxIDogIiwgc3RhdC5QQVNTKTsKKy8vICAgIH0gZWxzZSB7CisvLyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDEgOiAiLCBzdGF0LkZBSUwpOworLy8gICAgfQorLy8gICAgc3RhdC5wcmludFN1bW1hcnkoKTsKKwogICAgICAgICBpZiAoIGFyZ3MubGVuZ3RoID09IDAgKSB7CiAgICAgICAgICAgICAobmV3IENsaWVudCgpKS5ydW5TaW5nbGVUaHJlYWRlZCgpOwogICAgICAgICB9IGVsc2UgewpAQCAtNjAsMzUgKzYwLDM1IEBACiAgICAgICAgICAgICAgICAgKG5ldyBDbGllbnQoKSkucnVuTXVsdGlUaHJlYWRlZCggbnVtUnVucyApOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIENsaWVudCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9Ob1R4Q29ublRlc3RFSkIiKTsKLQlOb1R4Q29ublRlc3RIb21lIGhvbWUgPSAoTm9UeENvbm5UZXN0SG9tZSkKKyAgICBOb1R4Q29ublRlc3RIb21lIGhvbWUgPSAoTm9UeENvbm5UZXN0SG9tZSkKICAgICAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBOb1R4Q29ublRlc3RIb21lLmNsYXNzKTsKIAogICAgICAgICBiZWFuID0gaG9tZS5jcmVhdGUoKTsKICAgICB9Ci0gICAKKwogICAgIHB1YmxpYyB2b2lkIHJ1blNpbmdsZVRocmVhZGVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmICggYmVhbi50ZXN0MSgpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDEgOiAiLCBzdGF0LkZBSUwpOwotCX0KLQlzdGF0LnByaW50U3VtbWFyeSgpOwotIAorICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDEgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOworCiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBydW5NdWx0aVRocmVhZGVkKCBpbnQgbnVtVGhyZWFkcyApIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBNVENsaWVudFtdIG10YyA9IG5ldyBNVENsaWVudFsgbnVtVGhyZWFkcyBdOwogICAgICAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7CiAgICAgICAgIGludCBmYWlsQ291bnQgPSAwOwogCi0gICAgICAgIGZvciAoIGludCBpID0gMDsgaSA8IG51bVRocmVhZHM7IGkrKykgeyAKKyAgICAgICAgZm9yICggaW50IGkgPSAwOyBpIDwgbnVtVGhyZWFkczsgaSsrKSB7CiAgICAgICAgICAgICBtdGNbaV0gPSBuZXcgTVRDbGllbnQoIGkgKTsKICAgICAgICAgICAgIG10Y1tpXS5zdGFydCgpOwogICAgICAgICB9CkBAIC05NywxNSArOTcsMTUgQEAKICAgICAgICAgZm9yICggaW50IGkgPSAwOyBpIDwgbnVtVGhyZWFkczsgaSsrICkgewogICAgICAgICAgICAgbXRjW2ldLmpvaW4oKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBudW1UaHJlYWRzOyBpKysgKSB7CiAgICAgICAgICAgICByZXN1bHQgJj0gbXRjW2ldLnJlc3VsdDsKICAgICAgICAgICAgIGlmICggIW10Y1tpXS5yZXN1bHQgKSB7CiAgICAgICAgICAgICAgICAgZmFpbENvdW50Kys7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVG90YWwgVGhyZWFkczogIiArIG51bVRocmVhZHMgKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUb3RhbCBQYXNzZWQgOiAiICsgKG51bVRocmVhZHMgLSBmYWlsQ291bnQgKSApOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIEZhaWxlZCA6ICIgKyBmYWlsQ291bnQgKTsKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgbXVsdGl0aHJlYWRlZC10ZXN0IDogIiAsIHN0YXQuRkFJTCApOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgTVRDbGllbnQoIGludCBpZCApIHsKICAgICAgICAgICAgIGlkXyA9IGlkOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYmVhbi50ZXN0MSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbi9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb24vZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggNDYwZjY3ZC4uY2VhNTllZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbi9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yNSwxMSArMjUsMTEgQEAKICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgIDxyZXMtcmVmLW5hbWU+amRiYy9vbmx5Z2V0Y29ubmVjdGlvbjwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmpkYmMvczFxZURCPC9qbmRpLW5hbWU+Ci0JPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgotCSAgPG5hbWU+ZGJ1c2VyPC9uYW1lPgotCSAgPHBhc3N3b3JkPmRicGFzc3dvcmQ8L3Bhc3N3b3JkPgotCTwvZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CisgICAgPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgorICAgICAgPG5hbWU+ZGJ1c2VyPC9uYW1lPgorICAgICAgPHBhc3N3b3JkPmRicGFzc3dvcmQ8L3Bhc3N3b3JkPgorICAgIDwvZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICA8L2VqYj4gIAorICAgIDwvZWpiPgogICA8L2VudGVycHJpc2UtYmVhbnM+CiA8L3N1bi1lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbi9lamIvTm9UeENvbm5UZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbi9lamIvTm9UeENvbm5UZXN0QmVhbi5qYXZhCmluZGV4IGE1YjdjMjAuLjBlZWZhN2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb24vZWpiL05vVHhDb25uVGVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uL2VqYi9Ob1R4Q29ublRlc3RCZWFuLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKICAgICBwcml2YXRlIEVKQkNvbnRleHQgZWpiY29udGV4dDsKICAgICBwcml2YXRlIHRyYW5zaWVudCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dCBtX2N0eCA9IG51bGw7CiAgICAgdHJhbnNpZW50IGphdmF4LnNxbC5EYXRhU291cmNlIGRzOwotCQorCiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dCBjdHgpIHsKICAgICAgICAgbV9jdHggPSBjdHg7CkBAIC00NSwxMyArNDUsMTMgQEAKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoKSB7Ci0JQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdCA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzID0gbnVsbDsKKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10ID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMgPSBudWxsOwogCi0JQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQxID0gbnVsbDsgCi0JUmVzdWx0U2V0IHJzMSA9IG51bGw7CisgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMxID0gbnVsbDsKIAogICAgICAgICB0cnkgewogCkBAIC02MSwyNSArNjEsMjUgQEAKICAgICAgICAgICAgIHN0bXQgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5MSA9ICJTRUxFQ1QgKiBGUk9NIE9OTFlHRVRDT05ORUNUSU9OIjsKICAgICAgICAgICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkxKTsKLQkgICAgCisKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICBycy5jbG9zZSgpOwotCSAgICBzdG10LmNsb3NlKCk7Ci0JICAgIGNvbm4uY2xvc2UoKTsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQuY2xvc2UoKTsKKyAgICAgICAgY29ubi5jbG9zZSgpOworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICByczEgPSBzdG10MS5leGVjdXRlUXVlcnkocXVlcnkxKTsKIAogICAgICAgICAgICAgcnMxLmNsb3NlKCk7Ci0JICAgIHN0bXQxLmNsb3NlKCk7Ci0JICAgIGNvbm4xLmNsb3NlKCk7CisgICAgICAgIHN0bXQxLmNsb3NlKCk7CisgICAgICAgIGNvbm4xLmNsb3NlKCk7CiAgICAgICAgICAgICAqLwogCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsJICAgCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgRXhjZXB0aW9uLS0tIik7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgRXhjZXB0aW9uLS0tIik7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGlmIChycyAhPSBudWxsICkgewogICAgICAgICAgICAgICAgIHRyeSB7IHJzLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KQEAgLTkwLDggKzkwLDggQEAKICAgICAgICAgICAgIGlmIChjb25uICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHtjb25uLmNsb3NlKCk7fSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCQotICAgICAgIAl9CisKKyAgICAgICAgICAgfQogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uL3NxbC9jcmVhdGUuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbi9zcWwvY3JlYXRlLnNxbAppbmRleCBjNThhNmUzLi5hZTlmNTY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uL3NxbC9jcmVhdGUuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb24vc3FsL2NyZWF0ZS5zcWwKQEAgLTEsNSArMSw1IEBACiBEUk9QIFRBQkxFIE9OTFlHRVRDT05ORUNUSU9OOwogQ1JFQVRFIFRBQkxFIE9OTFlHRVRDT05ORUNUSU9OKAotICAgIG5hbWUgY2hhcigyMCksIAorICAgIG5hbWUgY2hhcigyMCksCiAgICAgbnVtIGludGVnZXIKICk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uL3Rlc3QtdmFsaWRhdGlvbi1yZWNvbmZpZy5zaCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb24vdGVzdC12YWxpZGF0aW9uLXJlY29uZmlnLnNoCmluZGV4IDA2YmRmZDMuLjU4NTZkMDcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb24vdGVzdC12YWxpZGF0aW9uLXJlY29uZmlnLnNoCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb24vdGVzdC12YWxpZGF0aW9uLXJlY29uZmlnLnNoCkBAIC0xOCwxMCArMTgsMTAgQEAKIGVjaG8gIlMxQVNfSE9NRSBpcyA9PiAiICRTMUFTX0hPTUUKIGVjaG8gIiBBUFNfSE9NRSBpcyA9PyAiICRBUFNfSE9NRQogCi0kUzFBU19IT01FL2xpYi9hbnQvYmluL2FudCBydW4gCiskUzFBU19IT01FL2xpYi9hbnQvYmluL2FudCBydW4KIGNkICRBUFNfSE9NRQotZ21ha2Ugc3RvcFBCIAotZ21ha2Ugc3RhcnRQQiAKLWNkIC0gCi0jJFMxQVNfSE9NRS9iaW4vYXNhZG1pbiBzZXQgZG9tYWluLnJlc291cmNlcy5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXBvaW50YmFzZS1wb29sLmlzX2Nvbm5lY3Rpb25fdmFsaWRhdGlvbl9yZXF1aXJlZD10cnVlIAorZ21ha2Ugc3RvcFBCCitnbWFrZSBzdGFydFBCCitjZCAtCisjJFMxQVNfSE9NRS9iaW4vYXNhZG1pbiBzZXQgZG9tYWluLnJlc291cmNlcy5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXBvaW50YmFzZS1wb29sLmlzX2Nvbm5lY3Rpb25fdmFsaWRhdGlvbl9yZXF1aXJlZD10cnVlCiAkUzFBU19IT01FL2xpYi9hbnQvYmluL2FudCBydW4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uc2VydmxldC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGM1YzZhYzEuLjA2NWVkODggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTYgKzE1LDE2IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1vbmx5Z2V0Y29ubmVjdGlvbi1zZXJ2bGV0Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1vbmx5Z2V0Y29ubmVjdGlvbi1zZXJ2bGV0Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Im9ubHlnZXRjb25uZWN0aW9uc2VydmxldCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvYnVpbGQueG1sCmluZGV4IGE3NmE1NzIuLmU2NmMyOGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uc2VydmxldC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovc2VydmxldC8qLmNsYXNzIi8+IAorICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi9zZXJ2bGV0LyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFwcGNsaWVudC1qYXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIvPgotICAgIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKworICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0Ii8+CkBAIC02MiwxNSArNjIsMTUgQEAKICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0LXBvb2wucHJvcGVydHkuYXNzb2NpYXRld2l0aHRocmVhZD10cnVlIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQtcG9vbC5wcm9wZXJ0eS5hc3NvY2lhdGV3aXRodGhyZWFkPXRydWUiLz4KICAgICAgIDwvYW50Y2FsbD4KIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZS5zcWwiLz4KLSAgICAgIDwvYW50Y2FsbD4gIAorICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5zdW4uczFhc2Rldi5qZGJjLm9ubHlnZXRjb25uZWN0aW9uc2VydmxldC5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgPGNsYXNzcGF0aD4KQEAgLTc4LDE3ICs3OCwxNyBAQAogICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3Auc3FsIi8+Ci0gICAgICA8L2FudGNhbGw+ICAKKyAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0LXBvb2wiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDM1ZDU2YmQuLjgxNTEzNjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uc2VydmxldC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI5LDE5ICsyOSwxOSBAQAogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAotIAkvL1NpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotCVN0cmluZyB0ZXN0U3VpdGUgPSAiamRiYy1vbmx5Z2V0Y29ubmVjdGlvbiAiOwotICAgICAgICAKKworICAgICAvL1NpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiamRiYy1vbmx5Z2V0Y29ubmVjdGlvbiAiOworCiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPShIdHRwVVJMQ29ubmVjdGlvbikgbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdDo4MDgwLyIgKwogICAgICAgICAgICAgIm9ubHlnZXRjb25uZWN0aW9uc2VydmxldC9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQiKS5vcGVuQ29ubmVjdGlvbigpOwogCiAgICAgICAgIC8qCi0gICAgICAgIElucHV0U3RyZWFtIHNpcyA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsgCisgICAgICAgIElucHV0U3RyZWFtIHNpcyA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBJbnB1dFN0cmVhbVJlYWRlcihzaXMpICk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggY29ubi5nZXRSZXNwb25zZU1lc3NhZ2UoKSApOwogICAgICAgICBTdHJpbmcgb3AgPSBudWxsOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBSZWFkaW5nIHJlc3BvbnNlIik7IAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBSZWFkaW5nIHJlc3BvbnNlIik7CiAgICAgICAgIHdoaWxlKCAob3AgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG9wKTsKICAgICAgICAgfQpAQCAtNDksMTcgKzQ5LDE3IEBACiAKICAgICAgICAgQ2xpZW50IGMgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgIGMubXVsdGlUaHJlYWRlZFRlc3QoIDQwICk7Ci0gICAgICAgCisKICAgICAgICAgLyoKICAgICAgICAgaWYgKCBiZWFuLnRlc3QxKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QxIDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7Ci0JfQotICAgICAgICAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDEgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KKworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgICAgICovCi0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgbXVsdGlUaHJlYWRlZFRlc3QoIGludCBudW1UaHJlYWRzICkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC03MiwxMSArNzIsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgY29ubiA9KEh0dHBVUkxDb25uZWN0aW9uKSBuZXcgVVJMKCJodHRwOi8vbG9jYWxob3N0OjgwODAvIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgIm9ubHlnZXRjb25uZWN0aW9uc2VydmxldC9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQiKS5vcGVuQ29ubmVjdGlvbigpOwogCi0gICAgICAgICAgICAgICAgICAgIElucHV0U3RyZWFtIHNpcyA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsgCisgICAgICAgICAgICAgICAgICAgIElucHV0U3RyZWFtIHNpcyA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBJbnB1dFN0cmVhbVJlYWRlcihzaXMpICk7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggY29ubi5nZXRSZXNwb25zZU1lc3NhZ2UoKSApOwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgb3AgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBSZWFkaW5nIHJlc3BvbnNlIik7IAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBSZWFkaW5nIHJlc3BvbnNlIik7CiAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCAob3AgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4ob3ApOwogICAgICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uc2VydmxldC9zZXJ2bGV0L09ubHlHZXRDb25uZWN0aW9uU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvc2VydmxldC9Pbmx5R2V0Q29ubmVjdGlvblNlcnZsZXQuamF2YQppbmRleCA1ZmM5MmQ5Li4wMmZhMDgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uc2VydmxldC9zZXJ2bGV0L09ubHlHZXRDb25uZWN0aW9uU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L3NlcnZsZXQvT25seUdldENvbm5lY3Rpb25TZXJ2bGV0LmphdmEKQEAgLTI2LDkgKzI2LDkgQEAKIAogLyoqCiAgKiBDb2xsZWN0aW9uIG9mIGdldENvbm5lY3Rpb24gdGVzdHMgdXNpbmcgYSBzZXJ2bGV0Ci0gKiAKKyAqCiAgKiBAYXV0aG9yIGFkaXR5YS5nb3JlQHN1bi5jb20KLSAqLyAKKyAqLwogCiBwdWJsaWMgY2xhc3MgT25seUdldENvbm5lY3Rpb25TZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCkBAIC0zNiwxMCArMzYsMTAgQEAKICAgICBwcml2YXRlIFByaW50V3JpdGVyIG91dDsKICAgICBwcml2YXRlIFVzZXJUcmFuc2FjdGlvbiB1dHg7CiAKLSAgICBwdWJsaWMgdm9pZCBkb0dldCggSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwICkgCisgICAgcHVibGljIHZvaWQgZG9HZXQoIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCApCiAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24KICAgICB7Ci1TeXN0ZW0ub3V0LnByaW50bG4oIiBAQEBAIGluIGRvR2V0Iik7ICAgIAorU3lzdGVtLm91dC5wcmludGxuKCIgQEBAQCBpbiBkb0dldCIpOwogICAgICAgICBvdXQgPSByZXNwLmdldFdyaXRlcigpOwogICAgICAgICB3cml0ZUhlYWRlcigpOwogCkBAIC03Miw5ICs3Miw5IEBACiAgICAgICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBPTkxZR0VUQ09OTkVDVElPTiIpOwotICAgICAgICAgICAgb3V0LnByaW50bG4oInRlc3QxIDo6IFBBU1NFRCIpOyAKKyAgICAgICAgICAgIG91dC5wcmludGxuKCJ0ZXN0MSA6OiBQQVNTRUQiKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoIG91dCApOyAKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCBvdXQgKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGlmICggcnMgIT0gbnVsbCApIHsgdHJ5IHsgcnMuY2xvc2UoKTsgfWNhdGNoKCBFeGNlcHRpb24gZSkge30gfQpAQCAtOTIsMTUgKzkyLDE1IEBACiAgICAgICAgICAgICB1dHguYmVnaW4oKTsKICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgVGhyZWFkLnNsZWVwKCA1MDAwICk7ICAgIAorICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcCggNTAwMCApOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gT05MWUdFVENPTk5FQ1RJT04iKTsKICAgICAgICAgICAgIHV0eC5jb21taXQoKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCJ0ZXN0MiA6OiBQQVNTRUQiKTsgCisgICAgICAgICAgICBvdXQucHJpbnRsbigidGVzdDIgOjogUEFTU0VEIik7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCBvdXQgKTsgCisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSggb3V0ICk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBpZiAoIHJzICE9IG51bGwgKSB7IHRyeSB7IHJzLmNsb3NlKCk7IH1jYXRjaCggRXhjZXB0aW9uIGUpIHt9IH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L3NxbC9jcmVhdGUuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvc3FsL2NyZWF0ZS5zcWwKaW5kZXggZWI5NTE2ZS4uNTVjZmMwMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvc3FsL2NyZWF0ZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvc3FsL2NyZWF0ZS5zcWwKQEAgLTEsNiArMSw2IEBACiBEUk9QIFRBQkxFIE9OTFlHRVRDT05ORUNUSU9OOwogQ1JFQVRFIFRBQkxFIE9OTFlHRVRDT05ORUNUSU9OKAotICAgIG5hbWUgY2hhcigyMCksIAorICAgIG5hbWUgY2hhcigyMCksCiAgICAgbnVtIGludGVnZXIKICk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9wb29saW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDBiMjdhMi4uODM3ZmFhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9wb29saW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9wb29saW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE4ICsxNSwxOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1wb29saW5nIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3Bvb2xpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9wb29saW5nL2J1aWxkLnhtbAppbmRleCA0YWNjNjdiLi45OWM1ZTliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3Bvb2xpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDE1ICs0OCwxNSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamRiYy1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXJieS1wb29sIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9ub254YXJlc291cmNlIi8+CkBAIC05MiwxNyArOTIsMTcgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1kZXJieS1wb29sLnBvb2xpbmc9ZmFsc2UiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLWRlcmJ5LXBvb2wucG9vbGluZz1mYWxzZSIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLWRlcmJ5LXBvb2wtY29udGFpbmVyLnBvb2xpbmc9ZmFsc2UiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLWRlcmJ5LXBvb2wtY29udGFpbmVyLnBvb2xpbmc9ZmFsc2UiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1kZXJieS14YS1wb29sLnBvb2xpbmc9ZmFsc2UiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLWRlcmJ5LXhhLXBvb2wucG9vbGluZz1mYWxzZSIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KQEAgLTExMCwxOSArMTEwLDE5IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAKLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotCSA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CisgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL25vbnhhcmVzb3VyY2UiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCkBAIC0xMzAsNyArMTMwLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGVyYnktcG9vbCIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLQkgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgorICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9ub254YXJlc291cmNlLWNvbnRhaW5lciIvPgogICAgICAgICA8L2FudGNhbGw+CiAKQEAgLTEzOCw3ICsxMzgsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXJieS1wb29sLWNvbnRhaW5lciIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLQkgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgorICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy94YXJlc291cmNlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIApAQCAtMTQ2LDcgKzE0Niw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRlcmJ5LXhhLXBvb2wiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3Bvb2xpbmcvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGQyM2FkN2IuLjEwZTZiNmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9wb29saW5nL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiByb2xsYmFjazsKICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzWEE7CkBAIC0zNCwzMiArMzQsMzIgQEAKICAgICBwcml2YXRlIHN0YXRpYyBJbml0aWFsQ29udGV4dCBpYzsKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKLQkgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQl9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBleCkgewotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgICAgIGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogCiAgICAgICAgIE9iamVjdCBvYmpSZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVNlc3Npb25Ib21lIik7Ci0JU2ltcGxlU2Vzc2lvbkhvbWUgc2ltcGxlU2Vzc2lvbkhvbWUgPSAoU2ltcGxlU2Vzc2lvbkhvbWUpCisgICAgU2ltcGxlU2Vzc2lvbkhvbWUgc2ltcGxlU2Vzc2lvbkhvbWUgPSAoU2ltcGxlU2Vzc2lvbkhvbWUpCiAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVTZXNzaW9uSG9tZS5jbGFzcyk7Ci0Jc3RhdC5hZGREZXNjcmlwdGlvbigiUnVubmluZyBwb29saW5nIHRlc3RTdWl0ZSAiKTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJSdW5uaW5nIHBvb2xpbmcgdGVzdFN1aXRlICIpOwogICAgICAgICBTaW1wbGVTZXNzaW9uIHNpbXBsZVNlc3Npb24gPSBzaW1wbGVTZXNzaW9uSG9tZS5jcmVhdGUoKTsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ2ZXJpZnlpbmcgdW5pcXVlbmVzcyBvZiBhbGwgY29ubmVjdGlvbiIpOwogICAgICAgICBpZihzaW1wbGVTZXNzaW9uLm9wZW5BbmRDbG9zZUNvbm5lY3Rpb24oNDApKSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiBvcGVuQW5kQ2xvc2VDb25uZWN0aW9uIChub24teGEpIDogIiwgc3RhdC5QQVNTICk7Ci0JfSBlbHNlIHsKKyAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgb3BlbkFuZENsb3NlQ29ubmVjdGlvbiAobm9uLXhhKSA6ICIsIHN0YXQuUEFTUyApOwotCX0KKyAgICB9CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjcmVhdGluZyBjb25uZWN0aW9uIHVwdG8gbWF4LXBvb2wtc2l6ZSBvZiAzMiIpOwogICAgICAgICBpZihzaW1wbGVTZXNzaW9uLm9wZW5NYXhDb25uZWN0aW9ucygzMikpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIG9wZW5NYXhDb25uZWN0aW9ucyAobm9uLXhhKSA6ICIsIHN0YXQuUEFTUyApOwotCX0gZWxzZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIG9wZW5NYXhDb25uZWN0aW9ucyAobm9uLXhhKSA6ICIsIHN0YXQuUEFTUyApOwotCX0KKyAgICB9CiAKIAogICAgICAgICByb2xsYmFjayA9IGZhbHNlOwpAQCAtNzIsOSArNzIsOSBAQAogCiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBydW5UZXN0KFNpbXBsZVNlc3Npb24gc2ltcGxlU2Vzc2lvbiwgYm9vbGVhbiByb2xsYmFjaykgewotICAgICAgICB0cnkgeyAgICAgICAgCisgICAgICAgIHRyeSB7CiAgICAgICAgIC8vQ29ubmVjdGlvbiBvcGVuZWQgYW5kIGNsb3NlZCB3aXRoaW4gdHJhbnNhY3Rpb24KICAgICAgICAgLy9ub24teGEgcmVzb3VyY2UKICAgICAgICAgaXNYQSA9IGZhbHNlOwpAQCAtOTEsOCArOTEsOCBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgcm9sbGJhY2s9IiArIHJvbGxiYWNrICsgIiAoeGEuIGNvbiBvcGVuZWQgY2xvc2VkIHdpdGhpbiB0eCkgOiAiLCBzdGF0LkZBSUwgKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy9Db25uZWN0aW9uIG9wZW5lZCB3aXRoaW4gdHJhbnNhY3Rpb24gCisKKyAgICAgICAgLy9Db25uZWN0aW9uIG9wZW5lZCB3aXRoaW4gdHJhbnNhY3Rpb24KICAgICAgICAgLy9idXQgY2xvc2VkIGFmdGVyIHRyYW5zYWN0aW9uCiAgICAgICAgIGlzWEEgPSBmYWxzZTsKICAgICAgICAgLy9ub24teGEgcmVzb3VyY2UKQEAgLTEwOSwxNiArMTA5LDE2IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MiByb2xsYmFjaz0iICsgcm9sbGJhY2sgKyAiICh4YS4gY29uIG9wZW5lZCBjbG9zZWQgYWZ0ZXIgdHgpIDogIiwgc3RhdC5GQUlMICk7CiAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAvL1hBIGFuZCBOb24tWEEgcmVzb3VyY2Ugd2l0aGluIHNhbWUgdHJhbnNhY3Rpb24KICAgICAgICAgLy9ub24teGEgcmVzb3VyY2UgYW5kIHhhICByZXNvdXJjZSB0b2dldGhlcgogICAgICAgICBpZiAoIHNpbXBsZVNlc3Npb24udGVzdDMocm9sbGJhY2spICkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDMgcm9sbGJhY2s9IiArIHJvbGxiYWNrICsgIiAoeGEgIG5vbi14YSB3aXRoaW4gc2FtZSB0eCkgOiAiLCBzdGF0LlBBU1MgKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QzIHJvbGxiYWNrPSIgKyByb2xsYmFjayArICIgKHhhICBub24teGEgd2l0aGluIHNhbWUgdHgpIDogIiwgc3RhdC5GQUlMICk7Ci0gICAgICAgIH0gCi0JfWNhdGNoKEV4Y2VwdGlvbiBleCkgewotCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgICAgIH0KKyAgICB9Y2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3Bvb2xpbmcvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDQ3OTQ5NzAuLjk2NjY0ZWEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC02NCw2ICs2NCw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCBjZGIwMjI4Li5hNGNhNGI3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3Bvb2xpbmcvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9wb29saW5nL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yNywxNSArMjcsMTUgQEAKICAgICAgIDxqbmRpLW5hbWU+Y29tLnN1bi5zMWFzZGV2LmpkYmMucG9vbGluZy5lamIuU2ltcGxlU2Vzc2lvbkhvbWU8L2puZGktbmFtZT4KICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgIDxyZXMtcmVmLW5hbWU+RGF0YVNvdXJjZTwvcmVzLXJlZi1uYW1lPgotCTxqbmRpLW5hbWU+amRiYy9ub254YXJlc291cmNlPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5qZGJjL25vbnhhcmVzb3VyY2U8L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgPHJlcy1yZWYtbmFtZT5Db250YWluZXJEYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5qZGJjL25vbnhhcmVzb3VyY2UtY29udGFpbmVyPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5qZGJjL25vbnhhcmVzb3VyY2UtY29udGFpbmVyPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgIDxyZXMtcmVmLW5hbWU+WEFEYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5qZGJjL3hhcmVzb3VyY2U8L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmpkYmMveGFyZXNvdXJjZTwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgPC9lamI+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQppbmRleCA4Njg4OTc1Li5kMjBkZDZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3Bvb2xpbmcvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9wb29saW5nL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCkBAIC0zNCw2MiArMzQsNjIgQEAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGFibGVOYW1lID0gIkNPRkZFRSI7CiAgICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBpYzsKICAgICBwcml2YXRlIERhdGFTb3VyY2UgZHM7Ci0gICAgcHJpdmF0ZSBEYXRhU291cmNlIHhhZHM7IAorICAgIHByaXZhdGUgRGF0YVNvdXJjZSB4YWRzOwogICAgIHByaXZhdGUgRGF0YVNvdXJjZSBjb250ZHM7CiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1hBPWZhbHNlOwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IGN0eHQpIHsKICAgICAgICAgdGhpcy5jb250ZXh0ID0gY3R4dDsKLQl0cnkgewotCSAgICBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBkcyA9IChEYXRhU291cmNlKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7Ci0JICAgIHhhZHMgPSAoRGF0YVNvdXJjZSlpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvWEFEYXRhU291cmNlIik7Ci0JICAgIGNvbnRkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvQ29udGFpbmVyRGF0YVNvdXJjZSIpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBuZSApIHsKLQkgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIHRyeSB7CisgICAgICAgIGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGRzID0gKERhdGFTb3VyY2UpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKKyAgICAgICAgeGFkcyA9IChEYXRhU291cmNlKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9YQURhdGFTb3VyY2UiKTsKKyAgICAgICAgY29udGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9Db250YWluZXJEYXRhU291cmNlIik7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIG5lICkgeworICAgICAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoYm9vbGVhbiBpc1hhLCBib29sZWFuIHJvbGxiYWNrKSB7Ci0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKLQl0aGlzLmlzWEEgPSBpc1hhOwotCXRoaXMucm9sbGJhY2sgPSByb2xsYmFjazsKLQlEYXRhU291cmNlIGRzID0gbnVsbDsKLQlpZihpc1hBKSB7Ci0JICAgIGRzID0gdGhpcy54YWRzOwotCX0gZWxzZSB7Ci0JICAgIGRzID0gdGhpcy5kczsKLQl9CisgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICB0aGlzLmlzWEEgPSBpc1hhOworICAgIHRoaXMucm9sbGJhY2sgPSByb2xsYmFjazsKKyAgICBEYXRhU291cmNlIGRzID0gbnVsbDsKKyAgICBpZihpc1hBKSB7CisgICAgICAgIGRzID0gdGhpcy54YWRzOworICAgIH0gZWxzZSB7CisgICAgICAgIGRzID0gdGhpcy5kczsKKyAgICB9CiAgICAgICAgIFVzZXJUcmFuc2FjdGlvbiB1dCA9IG51bGw7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgY3JlYXRlVGFibGUoZHMpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGludCBjb3VudDEgPSBnZXRDb3VudChkcyk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvdW50MSA6ICIgKyBjb3VudDEpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHV0ID0gKFVzZXJUcmFuc2FjdGlvbikgY29udGV4dC5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKICAgICAgICAgICAgIHV0LmJlZ2luKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZm9yKGludCBpPTA7IGk8IGNvdW50OyBpKyspCiAgICAgICAgICAgICAgICAgaW5zZXJ0Um93KGRzKTsKICAgICAgICAgICAgIGlmKHJvbGxiYWNrKQogICAgICAgICAgICAgICAgIHV0LnJvbGxiYWNrKCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgdXQuY29tbWl0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaW50IGNvdW50Mj1nZXRDb3VudChkcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb3VudDIgOiAiICsgY291bnQyKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpbnQgZGlmZiA9IGNvdW50MiAtIGNvdW50MTsKICAgICAgICAgICAgIGlmKCggZGlmZiA9PSBjb3VudCAmJiAhcm9sbGJhY2spIHx8IChkaWZmID09IDAgJiYgcm9sbGJhY2spKQogICAgICAgICAgICAgICAgIHBhc3NlZCA9IHRydWU7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTEwNSw1MSArMTA1LDUxIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9OwotCXJldHVybiBwYXNzZWQ7Ci0gICAgICAgIAorICAgIHJldHVybiBwYXNzZWQ7CisKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0Mihib29sZWFuIGlzWGEsIGJvb2xlYW4gcm9sbGJhY2spIHsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOwotCXRoaXMuaXNYQSA9IGlzWGE7Ci0JdGhpcy5yb2xsYmFjayA9IHJvbGxiYWNrOwotCURhdGFTb3VyY2UgZHMgPSBudWxsOwotCWlmKGlzWEEpIHsKLQkgICAgZHMgPSB0aGlzLnhhZHM7Ci0JfSBlbHNlIHsKLQkgICAgZHMgPSB0aGlzLmRzOwotCX0KKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIHRoaXMuaXNYQSA9IGlzWGE7CisgICAgdGhpcy5yb2xsYmFjayA9IHJvbGxiYWNrOworICAgIERhdGFTb3VyY2UgZHMgPSBudWxsOworICAgIGlmKGlzWEEpIHsKKyAgICAgICAgZHMgPSB0aGlzLnhhZHM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZHMgPSB0aGlzLmRzOworICAgIH0KICAgICAgICAgVXNlclRyYW5zYWN0aW9uIHV0ID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbm5lY3Rpb25bXSBjb247CiAKICAgICAgICAgICAgIGNyZWF0ZVRhYmxlKGRzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpbnQgY291bnQxID0gZ2V0Q291bnQoZHMpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb3VudDEgOiAiICsgY291bnQxKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB1dCA9IChVc2VyVHJhbnNhY3Rpb24pIGNvbnRleHQuZ2V0VXNlclRyYW5zYWN0aW9uKCk7CiAgICAgICAgICAgICB1dC5iZWdpbigpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGNvbiA9IG9wZW5Db25uZWN0aW9ucyhkcywgY291bnQpOwogICAgICAgICAgICAgaW5zZXJ0Um93KGNvbik7CiAgICAgICAgICAgICBjbG9zZUNvbm5lY3Rpb25zKGNvbik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYocm9sbGJhY2spCiAgICAgICAgICAgICAgICAgdXQucm9sbGJhY2soKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB1dC5jb21taXQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpbnQgY291bnQyPWdldENvdW50KGRzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvdW50MiA6ICIgKyBjb3VudDIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGludCBkaWZmID0gY291bnQyIC0gY291bnQxOwogICAgICAgICAgICAgaWYoKCBkaWZmID09IGNvdW50ICYmICFyb2xsYmFjaykgfHwgKGRpZmYgPT0gMCAmJiByb2xsYmFjaykpCiAgICAgICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTY1LDUyICsxNjUsNTIgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQlyZXR1cm4gcGFzc2VkOworICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDMoYm9vbGVhbiByb2xsYmFjaykgewotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JdGhpcy5yb2xsYmFjayA9IHJvbGxiYWNrOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgdGhpcy5yb2xsYmFjayA9IHJvbGxiYWNrOwogICAgICAgICBVc2VyVHJhbnNhY3Rpb24gdXQgPSBudWxsOwotCURhdGFTb3VyY2UgZHMxID0gdGhpcy5kczsKLQlEYXRhU291cmNlIGRzMiA9IHRoaXMueGFkczsKKyAgICBEYXRhU291cmNlIGRzMSA9IHRoaXMuZHM7CisgICAgRGF0YVNvdXJjZSBkczIgPSB0aGlzLnhhZHM7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaXNYQSA9IGZhbHNlOwogICAgICAgICAgICAgY3JlYXRlVGFibGUoZHMxKTsKICAgICAgICAgICAgIGlzWEEgPSB0cnVlOwogICAgICAgICAgICAgY3JlYXRlVGFibGUoZHMyKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpc1hBID0gZmFsc2U7CiAgICAgICAgICAgICBpbnQgY291bnQxID0gZ2V0Q291bnQoZHMxKTsKICAgICAgICAgICAgIGlzWEEgPSB0cnVlOwogICAgICAgICAgICAgaW50IGNvdW50MyA9IGdldENvdW50KGRzMik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvdW50MSA6ICIgKyBjb3VudDEpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb3VudDMgOiAiICsgY291bnQzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB1dCA9IChVc2VyVHJhbnNhY3Rpb24pIGNvbnRleHQuZ2V0VXNlclRyYW5zYWN0aW9uKCk7CiAgICAgICAgICAgICB1dC5iZWdpbigpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlzWEEgPSBmYWxzZTsKICAgICAgICAgICAgIGZvcihpbnQgaT0wOyBpPCBjb3VudDsgaSsrKQogICAgICAgICAgICAgICAgIGluc2VydFJvdyhkczEpOwogICAgICAgICAgICAgaXNYQSA9IHRydWU7CiAgICAgICAgICAgICBmb3IoaW50IGk9MDsgaTwgY291bnQ7IGkrKykKICAgICAgICAgICAgICAgICBpbnNlcnRSb3coZHMyKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZihyb2xsYmFjaykKICAgICAgICAgICAgICAgICB1dC5yb2xsYmFjaygpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHV0LmNvbW1pdCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlzWEEgPSBmYWxzZTsKICAgICAgICAgICAgIGludCBjb3VudDI9Z2V0Q291bnQoZHMxKTsKICAgICAgICAgICAgIGlzWEEgPSB0cnVlOwogICAgICAgICAgICAgaW50IGNvdW50ND1nZXRDb3VudChkczIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY291bnQyIDogIiArIGNvdW50Mik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvdW50NCA6ICIgKyBjb3VudDQpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGludCBkaWZmMSA9IGNvdW50MiAtIGNvdW50MTsKICAgICAgICAgICAgIGludCBkaWZmMiA9IGNvdW50NCAtIGNvdW50MzsKICAgICAgICAgICAgIGlmKCgoIGRpZmYxID09IGNvdW50ICYmICFyb2xsYmFjaykgfHwgKGRpZmYxID09IDAgJiYgcm9sbGJhY2spKQpAQCAtMjE4LDcgKzIxOCw3IEBACiAgICAgICAgICAgICAgICAgcGFzc2VkPXRydWU7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcGFzc2VkPWZhbHNlOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBwYXNzZWQ9ZmFsc2U7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMjM0LDIxICsyMzQsMjEgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH07Ci0gICAgICAgcmV0dXJuIHBhc3NlZDsgCisgICAgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgY3JlYXRlVGFibGUoZmluYWwgRGF0YVNvdXJjZSBkcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWU7CiAgICAgICAgIGlmKGlzWEEpCiAgICAgICAgICAgICB0YWJsZU5hbWUgPSAiQ09GRkVFX1hBIjsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdGFibGVOYW1lID0gIkNPRkZFRSI7Ci0gICAgICAgIAorCiAgICAgICAgIENvbm5lY3Rpb24gY29uOwogICAgICAgICBTdGF0ZW1lbnQgc3RtdDsKICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigic2NvdHQiLCAidGlnZXIiKTsKICAgICAgICAgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5ewogICAgICAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJkcm9wIHRhYmxlICIgKyB0YWJsZU5hbWUpOwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGV4KXsKQEAgLTI1OCw3ICsyNTgsNyBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgICAgIGNvbi5jbG9zZSgpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgaW50IGdldENvdW50KGZpbmFsIERhdGFTb3VyY2UgZHMpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgdGFibGVOYW1lOwogICAgICAgICBpZihpc1hBKQpAQCAtMjc4LDcgKzI3OCw3IEBACiAgICAgICAgIGNvbi5jbG9zZSgpOwogICAgICAgICByZXR1cm4gY291bnQ7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGluc2VydFJvdyhmaW5hbCBEYXRhU291cmNlIGRzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZTsKICAgICAgICAgaWYoaXNYQSkKQEAgLTI5Myw3ICsyOTMsNyBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgICAgIGNvbi5jbG9zZSgpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBpbnNlcnRSb3coZmluYWwgQ29ubmVjdGlvbltdIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWU7CiAgICAgICAgIGlmKGlzWEEpCkBAIC0zMDQsOTggKzMwNCw5OCBAQAogICAgICAgICBmb3IoaW50IGk9MDsgaSA8IGNvbi5sZW5ndGg7IGkrKyl7CiAgICAgICAgICAgICBzdG10ID0gY29uW2ldLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJJTlNFUlQgSU5UTyAiICsgdGFibGVOYW1lICsgIiB2YWx1ZXMgKCdDT0ZGRUUnLCAxMDApIik7Ci0JICAgIHN0bXQuY2xvc2UoKTsKKyAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgCisKKwogICAgIHByaXZhdGUgdm9pZCBwcmludENvbm5lY3Rpb24oZmluYWwgRGF0YVNvdXJjZSBkcykgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSBkc1R5cGVkID0gKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpIGRzOwogICAgICAgICBDb25uZWN0aW9uIHdyYXBwZXIgPSBkc1R5cGVkLmdldENvbm5lY3Rpb24oInNjb3R0IiwgInRpZ2VyIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGlvbiB0eXBlIDogIiArIGRzVHlwZWQuZ2V0Q29ubmVjdGlvbih3cmFwcGVyKSk7CiAgICAgICAgIHdyYXBwZXIuY2xvc2UoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBvcGVuQW5kQ2xvc2VDb25uZWN0aW9uKGludCBjb3VudCkgewotCWJvb2xlYW4gc3RhdHVzID0gdHJ1ZTsKLQlEYXRhU291cmNlIGRzID0gY29udGRzOworICAgIGJvb2xlYW4gc3RhdHVzID0gdHJ1ZTsKKyAgICBEYXRhU291cmNlIGRzID0gY29udGRzOwogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlIGRzVHlwZWQgPSAoY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSkgZHM7Ci0JICAgIEhhc2hTZXQ8U3RyaW5nPiBjb25uZWN0aW9ucyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICAgICAgSGFzaFNldDxTdHJpbmc+IGNvbm5lY3Rpb25zID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwogICAgICAgICAgICAgQ29ubmVjdGlvbiBjb247Ci0JICAgIFN0cmluZyBjb25UeXBlOwotCSAgICBpbnQgaSA9IDA7CisgICAgICAgIFN0cmluZyBjb25UeXBlOworICAgICAgICBpbnQgaSA9IDA7CiAgICAgICAgICAgICBmb3IoOyBpIDwgY291bnQ7IGkrKyl7CiAgICAgICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCQljb25UeXBlID0gZHNUeXBlZC5nZXRDb25uZWN0aW9uKGNvbikudG9TdHJpbmcoKTsKLSAgICAgICAgCVN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGlvbiB0eXBlIDogIiArIGNvblR5cGUpOworICAgICAgICBjb25UeXBlID0gZHNUeXBlZC5nZXRDb25uZWN0aW9uKGNvbikudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGlvbiB0eXBlIDogIiArIGNvblR5cGUpOwogICAgICAgICAgICAgICAgIGNvbi5jbG9zZSgpOwotCQlpZighY29ubmVjdGlvbnMuYWRkKGNvblR5cGUpKXsKLQkJCXN0YXR1cyA9IGZhbHNlOwotCQkJYnJlYWs7Ci0JCX0KKyAgICAgICAgaWYoIWNvbm5lY3Rpb25zLmFkZChjb25UeXBlKSl7CisgICAgICAgICAgICBzdGF0dXMgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIGNvbm5lY3Rpb24gcmVxdWVzdGVkIDogICIgKyBjb3VudCk7Ci0gICAgICAgCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIGNvbm5lY3Rpb24gY3JlYXRlZCA6ICAiICsgaSk7Ci0gICAgICAgCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIG51bWJlciBvZiB1bmlxdWUgY29ubmVjdGlvbiA6ICAiICsgY29ubmVjdGlvbnMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVG90YWwgY29ubmVjdGlvbiByZXF1ZXN0ZWQgOiAgIiArIGNvdW50KTsKKyAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVG90YWwgY29ubmVjdGlvbiBjcmVhdGVkIDogICIgKyBpKTsKKyAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVG90YWwgbnVtYmVyIG9mIHVuaXF1ZSBjb25uZWN0aW9uIDogICIgKyBjb25uZWN0aW9ucy5zaXplKCkpOwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGV4KXsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0JcmV0dXJuIHN0YXR1czsKKyAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBvcGVuTWF4Q29ubmVjdGlvbnMoaW50IGNvdW50KSB7Ci0JYm9vbGVhbiBzdGF0dXMgPSBmYWxzZTsKLQlEYXRhU291cmNlIGRzID0gY29udGRzOwotICAgICAgICBDb25uZWN0aW9uW10gY29uID0gbmV3IENvbm5lY3Rpb25bY291bnRdOwotCWludCBpID0gMDsKLSAgICAgICAgZm9yKDsgaSA8IGNvdW50OyBpKyspewotCSAgIHRyeXsKLSAgICAgICAgICAgCWNvbltpXSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICB9Y2F0Y2goU1FMRXhjZXB0aW9uIGV4KXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJVbmFibGUgdG8gY3JlYXRlIG1heCBjb25uZWN0aW9ucyIpOwotCQlzdGF0dXMgPSBmYWxzZTsKLQkgICB9Ci0JfQogCi0JaWYoaSA9PSAgY291bnQpewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkFibGUgdG8gY3JlYXRlIG1heCBjb25uZWN0aW9ucyIpOwotCQlzdGF0dXM9dHJ1ZTsKLQkJdHJ5ewotCQkJZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oIkFibGUgdG8gY3JlYXRlIGJleW9uZCBtYXggY29ubmVjdGlvbnMiKTsKLSAgICAgICAgICAgICAgICAJc3RhdHVzPWZhbHNlOwotCQl9Y2F0Y2goU1FMRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgICAgICAJU3lzdGVtLm91dC5wcmludGxuKCJVbmFibGUgdG8gY3JlYXRlIGJleW9uZCBtYXggY29ubmVjdGlvbnMiKTsKLQkJICAgICAgICBzdGF0dXM9dHJ1ZTsKLSAgICAgICAgICAgCX0KLQl9Ci0gICAgICAgIAorICAgIHB1YmxpYyBib29sZWFuIG9wZW5NYXhDb25uZWN0aW9ucyhpbnQgY291bnQpIHsKKyAgICBib29sZWFuIHN0YXR1cyA9IGZhbHNlOworICAgIERhdGFTb3VyY2UgZHMgPSBjb250ZHM7CisgICAgICAgIENvbm5lY3Rpb25bXSBjb24gPSBuZXcgQ29ubmVjdGlvbltjb3VudF07CisgICAgaW50IGkgPSAwOworICAgICAgICBmb3IoOyBpIDwgY291bnQ7IGkrKyl7CisgICAgICAgdHJ5eworICAgICAgICAgICAgICAgY29uW2ldID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgIH1jYXRjaChTUUxFeGNlcHRpb24gZXgpeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuYWJsZSB0byBjcmVhdGUgbWF4IGNvbm5lY3Rpb25zIik7CisgICAgICAgIHN0YXR1cyA9IGZhbHNlOworICAgICAgIH0KKyAgICB9CisKKyAgICBpZihpID09ICBjb3VudCl7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWJsZSB0byBjcmVhdGUgbWF4IGNvbm5lY3Rpb25zIik7CisgICAgICAgIHN0YXR1cz10cnVlOworICAgICAgICB0cnl7CisgICAgICAgICAgICBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWJsZSB0byBjcmVhdGUgYmV5b25kIG1heCBjb25uZWN0aW9ucyIpOworICAgICAgICAgICAgICAgICAgICBzdGF0dXM9ZmFsc2U7CisgICAgICAgIH1jYXRjaChTUUxFeGNlcHRpb24gZXgpeworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuYWJsZSB0byBjcmVhdGUgYmV5b25kIG1heCBjb25uZWN0aW9ucyIpOworICAgICAgICAgICAgICAgIHN0YXR1cz10cnVlOworICAgICAgICAgICAgICAgfQorICAgIH0KKwogICAgICAgICBmb3IoOyBpID4gMDsgaS0tKXsKLQkgICB0cnl7Ci0gICAgICAgICAgICAJY29uW2kgLSAxXS5jbG9zZSgpOwotCSAgIH1jYXRjaChTUUxFeGNlcHRpb24gZXgpewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlVuYWJsZSB0byBjbG9zZSBjb25uZWN0aW9uIik7Ci0JICAgfQotCX0KLQlyZXR1cm4gc3RhdHVzOworICAgICAgIHRyeXsKKyAgICAgICAgICAgICAgICBjb25baSAtIDFdLmNsb3NlKCk7CisgICAgICAgfWNhdGNoKFNRTEV4Y2VwdGlvbiBleCl7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5hYmxlIHRvIGNsb3NlIGNvbm5lY3Rpb24iKTsKKyAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uW10gb3BlbkNvbm5lY3Rpb25zKERhdGFTb3VyY2UgZHMsIGludCBjb3VudCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiwgU1FMRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgQ29ubmVjdGlvbltdIGNvbiA9IG5ldyBDb25uZWN0aW9uW2NvdW50XTsKICAgICAgICAgZm9yKGludCBpPTA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICAgICAgY29uW2ldID0gZHMuZ2V0Q29ubmVjdGlvbigic2NvdHQiLCAidGlnZXIiKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNvbjsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgY2xvc2VDb25uZWN0aW9ucyhDb25uZWN0aW9uW10gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgZm9yKGludCBpPTA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICAgICAgY29uW2ldLmNsb3NlKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7fQogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3Bvb2xpbmcvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9wb29saW5nL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBiMjI3Y2FjLi40MmQ1YTE2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3Bvb2xpbmcvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsOSArMSw5IEBACi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7DQotDQotQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0ggKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxLCAnd3h5eicpOw0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDIsICdwcXJzJyk7DQorRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOworCitDUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSCAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxLCAnd3h5eicpOworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMiwgJ3BxcnMnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9wb29saW5nL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggMGMxMjQyZi4uZDExYTExNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9wb29saW5nL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9wb29saW5nL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEsMiArMSwyIEBACi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7DQotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsNCitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7CitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL2J1aWxkLnhtbAppbmRleCBhZmY0ZWRkLi5lMTNhNmQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL2J1aWxkLnhtbApAQCAtMjksOSArMjksOSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiPgogICAgICAgICA8cmVjb3JkIG5hbWU9InJlY29uZmlnLm91dHB1dCIgYWN0aW9uPSJzdGFydCIgLz4KLQk8YW50IGRpcj0ibWF4cG9vbHNpemUiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InBvb2xhdXRoIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJwb29sYXV0aC0yIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJtYXhwb29sc2l6ZSIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0icG9vbGF1dGgiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InBvb2xhdXRoLTIiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0icmVjb25maWcub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTYwLDkgKzYwLDkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgcmVjb25maWcgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgcmVjb25maWcgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9tYXhwb29sc2l6ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9tYXhwb29sc2l6ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGIwOTZkOGMuLjE1ZjIyM2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvbWF4cG9vbHNpemUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL21heHBvb2xzaXplL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1yZWNvbmZpZy1tYXhwb29sc2l6ZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9Im1heHBvb2xzaXplLXBvb2xOYW1lIiB2YWx1ZT0iamRiYy1tYXhwb29sc2l6ZS1wb29sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL21heHBvb2xzaXplL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvbWF4cG9vbHNpemUvYnVpbGQueG1sCmluZGV4IGU4YjJhMjcuLjdjNzY1YTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvbWF4cG9vbHNpemUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvbWF4cG9vbHNpemUvYnVpbGQueG1sCkBAIC0yNyw3ICsyNyw3IEBACiBdPgogCiA8cHJvamVjdCBuYW1lPSJtaXgiIGRlZmF1bHQ9InVzYWdlIiBiYXNlZGlyPSIuIj4KLSAgICAKKwogICAgICZjb21tb25TZXR1cDsKICAgICAmY29tbW9uQnVpbGQ7CiAgICAgJnJ1bjsKQEAgLTQyLDcgKzQyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTU0LDEzICs1NCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovU2ltcGxlQk1QLmNsYXNzLCAqKi9TaW1wbGVCTVBIb21lLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9IiR7bWF4cG9vbHNpemUtcG9vbE5hbWV9Ii8+CkBAIC02OCwzMiArNjgsMzIgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSIke21heHBvb2xzaXplLXBvb2xOYW1lfSIvPgotCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL21heHBvb2xzaXplIi8+CisgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvbWF4cG9vbHNpemUiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSIke21heHBvb2xzaXplLXBvb2xOYW1lfS14YSIvPgotCTxwYXJhbSBuYW1lPSJkYi5jbGFzcyIgdmFsdWU9Im9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnRYQURhdGFTb3VyY2UiLz4KLQk8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamF2YXguc3FsLlhBRGF0YVNvdXJjZSIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi5jbGFzcyIgdmFsdWU9Im9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnRYQURhdGFTb3VyY2UiLz4KKyAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamF2YXguc3FsLlhBRGF0YVNvdXJjZSIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9IiR7bWF4cG9vbHNpemUtcG9vbE5hbWV9LXhhIi8+Ci0JPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvbWF4cG9vbHNpemUteGEiLz4KKyAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9tYXhwb29sc2l6ZS14YSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPCEtLSBzZXQgdGhlIG1heHBvb2xzaXplIHRvIDEwIGJlZm9yZSBydW5uaW5nIC0tPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHttYXhwb29sc2l6ZS1wb29sTmFtZX0ubWF4X3Bvb2xfc2l6ZT0xMCIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7bWF4cG9vbHNpemUtcG9vbE5hbWV9Lm1heF9wb29sX3NpemU9MTAiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDwhLS0gYWxzbyBzZXQgdGhlIG1heC13YWl0LXRpbWUgdG8gYSBzbWFsbGVyIHZhbHVlIHNvIHRoZSB0ZXN0cyBleGVjdXRlcyBmYXN0ZXIgLS0+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke21heHBvb2xzaXplLXBvb2xOYW1lfS5tYXhfd2FpdF90aW1lX2luX21pbGxpcz0xMDAwIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHttYXhwb29sc2l6ZS1wb29sTmFtZX0ubWF4X3dhaXRfdGltZV9pbl9taWxsaXM9MTAwMCIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgpAQCAtMTAzLDIzICsxMDMsMjMgQEAKICAgICAgIDwhLS0gc2V0IHRoZSBtYXhwb29sc2l6ZSB0byAxNSAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7bWF4cG9vbHNpemUtcG9vbE5hbWV9Lm1heF9wb29sX3NpemU9MjAiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke21heHBvb2xzaXplLXBvb2xOYW1lfS5tYXhfcG9vbF9zaXplPTIwIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMiIvPgogICAgICAgPC9hbnRjYWxsPgotICAKKwogICA8IS0tLSBYQSAtLT4KICAgICAgIDwhLS0gc2V0IHRoZSBtYXhwb29sc2l6ZSB0byAxMCBiZWZvcmUgcnVubmluZyAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7bWF4cG9vbHNpemUtcG9vbE5hbWV9LXhhLm1heF9wb29sX3NpemU9MTAiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke21heHBvb2xzaXplLXBvb2xOYW1lfS14YS5tYXhfcG9vbF9zaXplPTEwIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8IS0tIGFsc28gc2V0IHRoZSBtYXgtd2FpdC10aW1lIHRvIGEgc21hbGxlciB2YWx1ZSBzbyB0aGUgdGVzdHMgZXhlY3V0ZXMgZmFzdGVyIC0tPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHttYXhwb29sc2l6ZS1wb29sTmFtZX0teGEubWF4X3dhaXRfdGltZV9pbl9taWxsaXM9MTAwMCIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7bWF4cG9vbHNpemUtcG9vbE5hbWV9LXhhLm1heF93YWl0X3RpbWVfaW5fbWlsbGlzPTEwMDAiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KQEAgLTEyOCw3ICsxMjgsNyBAQAogICAgICAgPCEtLSBzZXQgdGhlIG1heHBvb2xzaXplIHRvIDE1IC0tPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHttYXhwb29sc2l6ZS1wb29sTmFtZX0teGEubWF4X3Bvb2xfc2l6ZT0yMCIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7bWF4cG9vbHNpemUtcG9vbE5hbWV9LXhhLm1heF9wb29sX3NpemU9MjAiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KQEAgLTEzNiw3ICsxMzYsNyBAQAogICAgICAgPC9hbnRjYWxsPgogCiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogCkBAIC0xNDcsOSArMTQ3LDkgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL21heHBvb2xzaXplLXhhIi8+Ci0JPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iJHttYXhwb29sc2l6ZS1wb29sTmFtZX0teGEiLz4KKyAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSIke21heHBvb2xzaXplLXBvb2xOYW1lfS14YSIvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9tYXhwb29sc2l6ZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL21heHBvb2xzaXplL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA2NDVjYzE4Li5jZmVjMjg4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL21heHBvb2xzaXplL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL21heHBvb2xzaXplL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjcsNTEgKzI3LDUxIEBACiBpbXBvcnQgamF2YS5pby4qOwogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3YpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotCVNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotCVN0cmluZyB0ZXN0U3VpdGUgPSAiUmVjb25maWdNYXhQb29sU2l6ZSAiOworICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiUmVjb25maWdNYXhQb29sU2l6ZSAiOwogCiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpSZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUJNUEhvbWUiKTsKLQlTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKKyAgICBTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZUJNUEhvbWUuY2xhc3MpOwogCiAgICAgICAgIFNpbXBsZUJNUCBzaW1wbGVCTVAgPSBzaW1wbGVCTVBIb21lLmNyZWF0ZSgpOwotCXN0YXQuYWRkRGVzY3JpcHRpb24oIlJlY29uZmlnIE1heFBvb2xTaXplIHRlc3RzIik7CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiUmVjb25maWcgTWF4UG9vbFNpemUgdGVzdHMiKTsKICAgICAgICAgLyoKLQkgKiBUZXN0cyAxLDIgdXNlIG5vbi14YSBwb29sIC0gc28gdGhlIDNyZCBwYXJhbSAidXNlWEEiIGlzIGZhbHNlIAotCSAqIFRlc3RzIDMsNCB1c2UgeGEgcG9vbCAtIHNvIHRoZSAzcmQgcGFyYW0gInVzZVhBIiBpcyB0cnVlCi0JICovCisgICAgICogVGVzdHMgMSwyIHVzZSBub24teGEgcG9vbCAtIHNvIHRoZSAzcmQgcGFyYW0gInVzZVhBIiBpcyBmYWxzZQorICAgICAqIFRlc3RzIDMsNCB1c2UgeGEgcG9vbCAtIHNvIHRoZSAzcmQgcGFyYW0gInVzZVhBIiBpcyB0cnVlCisgICAgICovCiAgICAgICAgIGlmICgiMSIuZXF1YWxzKGFyZ3ZbMF0pICkgewogICAgICAgICAgICAgaWYgKHNpbXBsZUJNUC50ZXN0MSgxMCwgdHJ1ZSwgZmFsc2UgKSApIHsKLQkgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QxIDogIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QxIDogIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0JICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoIjIiLmVxdWFscyhhcmd2WzBdKSkgewotCSAgICBpZiAoc2ltcGxlQk1QLnRlc3QxKDE5LCBmYWxzZSwgZmFsc2UpICkgewotCSAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDIgOiAiLCBzdGF0LlBBU1MpOworICAgICAgICBpZiAoc2ltcGxlQk1QLnRlc3QxKDE5LCBmYWxzZSwgZmFsc2UpICkgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDIgOiAiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLQkgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QyIDogIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QyIDogIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmICgiMyIuZXF1YWxzKGFyZ3ZbMF0pKSB7Ci0JICAgIGlmIChzaW1wbGVCTVAudGVzdDEoMTAsIGZhbHNlLCB0cnVlKSApIHsKLQkgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QzIDogIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgaWYgKHNpbXBsZUJNUC50ZXN0MSgxMCwgZmFsc2UsIHRydWUpICkgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDMgOiAiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLQkgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QzIDogIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QzIDogIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmICgiNCIuZXF1YWxzKGFyZ3ZbMF0pKSB7Ci0JICAgIGlmIChzaW1wbGVCTVAudGVzdDEoMTksIGZhbHNlLCB0cnVlKSApIHsKLQkgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3Q0IDogIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgaWYgKHNpbXBsZUJNUC50ZXN0MSgxOSwgZmFsc2UsIHRydWUpICkgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDQgOiAiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLQkgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3Q0IDogIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3Q0IDogIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oImpkYmMgcmVjb25maWctbWF4cG9vbHNpemUgc3RhdHVzOiAiKTsKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiamRiYyByZWNvbmZpZy1tYXhwb29sc2l6ZSBzdGF0dXM6ICIpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9tYXhwb29sc2l6ZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9tYXhwb29sc2l6ZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGU3ZDZlODguLjlkOTIyN2UgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvbWF4cG9vbHNpemUvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL21heHBvb2xzaXplL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTYzLDYgKzYzLDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9tYXhwb29sc2l6ZS9lamIvU2ltcGxlQk1QLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL21heHBvb2xzaXplL2VqYi9TaW1wbGVCTVAuamF2YQppbmRleCBlMmE3NjhkLi5kNWU5ZmFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL21heHBvb2xzaXplL2VqYi9TaW1wbGVCTVAuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL21heHBvb2xzaXplL2VqYi9TaW1wbGVCTVAuamF2YQpAQCAtMjAsNiArMjAsNiBAQAogaW1wb3J0IGphdmEucm1pLio7CiAKIHB1YmxpYyBpbnRlcmZhY2UgU2ltcGxlQk1QIGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MShpbnQgbWF4UG9vbFNpemUsIGJvb2xlYW4gZXhwZWN0VG9QYXNzLCBib29sZWFuIHVzZVhBICkgCisgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoaW50IG1heFBvb2xTaXplLCBib29sZWFuIGV4cGVjdFRvUGFzcywgYm9vbGVhbiB1c2VYQSApCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL21heHBvb2xzaXplL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL21heHBvb2xzaXplL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggMjA0OTMxNS4uNWM5YzI4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9tYXhwb29sc2l6ZS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvbWF4cG9vbHNpemUvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQpAQCAtMzIsMTAgKzMyLDEwIEBACiAgICAgfQogCiAgICAgcHVibGljIEludGVnZXIgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7Ci0JcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOworICAgIHJldHVybiBuZXcgSW50ZWdlcigxKTsKICAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogVGhlIGJhc2ljIHN0cmF0ZWd5IGhlcmUgaXMgdGhhdCB3ZSB0cnkgdG8gZ2V0IDEgbW9yZSBjb25uZWN0aW9uCiAgICAgICogdGhhbiB0aGUgbWF4cG9vbHNpemUuIFRoaXMgc2luZ2xlIGV4dHJhIGdldENvbm5lY3Rpb24gc2hvdWxkIG5vdAogICAgICAqIHBhc3MuIElmIHRoaXMgaGFwcGVucywgdGhlIHRlc3QgaGFzIHBhc3NlZC4KQEAgLTQzLDU2ICs0Myw1NiBAQAogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoIGludCBtYXhQb29sU2l6ZSwgYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbiwgYm9vbGVhbiB1c2VYQSApIHsKICAgICAgICAgdHJ5IHsKLQkgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgaWYgKCB1c2VYQSApIHsKLQkgICAgICAgIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlX3hhIik7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCSAgICB9Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKLQl9Ci0JYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCUNvbm5lY3Rpb25bXSBjb25ucyA9IG5ldyBDb25uZWN0aW9uW21heFBvb2xTaXplXTsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgaWYgKCB1c2VYQSApIHsKKyAgICAgICAgICAgIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlX3hhIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOworICAgICAgICB9CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIENvbm5lY3Rpb25bXSBjb25ucyA9IG5ldyBDb25uZWN0aW9uW21heFBvb2xTaXplXTsKICAgICAgICAgZm9yKCBpbnQgaSA9IDA7IGkgPCBtYXhQb29sU2l6ZTsgaSsrICkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRocm93RXhjZXB0aW9uIGlzIDogIiArIHRocm93RXhjZXB0aW9uICk7Ci0JICAgIHRyeSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIyMjIyMjIyNHZXR0aW5nIGNvbm5lY3Rpb24gOiAiICsgaSApOwotCSAgICAgICAgY29ubnNbaV0gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgICAgICByZXR1cm4gZmFsc2U7Ci0JICAgIH0gCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGhyb3dFeGNlcHRpb24gaXMgOiAiICsgdGhyb3dFeGNlcHRpb24gKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIjIyMjIyMjI0dldHRpbmcgY29ubmVjdGlvbiA6ICIgKyBpICk7CisgICAgICAgICAgICBjb25uc1tpXSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogCi0JfSAgICAKLQkvL3RyeSBnZXR0aW5nIGFuIGV4dHJhIGNvbm5lY3Rpb24KLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLVRyeSBnZXR0aW5nIGV4dHJhIGNvbm5lY3Rpb24iKTsKLQlDb25uZWN0aW9uIGNvbiA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnQoIkNhdWdodCBleGNlcHRpb24gOiAiICkgOwotCSAgICBpZiAoIHRocm93RXhjZXB0aW9uICkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNldHRpbmcgcGFzc2VkIHRvIHRydWUiKTsKLQkJcGFzc2VkID0gdHJ1ZTsKKyAgICB9CisgICAgLy90cnkgZ2V0dGluZyBhbiBleHRyYSBjb25uZWN0aW9uCisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS1UcnkgZ2V0dGluZyBleHRyYSBjb25uZWN0aW9uIik7CisgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJDYXVnaHQgZXhjZXB0aW9uIDogIiApIDsKKyAgICAgICAgaWYgKCB0aHJvd0V4Y2VwdGlvbiApIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXR0aW5nIHBhc3NlZCB0byB0cnVlIik7CisgICAgICAgIHBhc3NlZCA9IHRydWU7CiAgICAgICAgICAgICB9IGVsc2UgewotCSAgICAgICAgcGFzc2VkID0gZmFsc2U7Ci0gICAgICAgICAgICB9ICAgIAorICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgICAgICB9CiAKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7IGNvbi5jbG9zZSgpOyB9IGNhdGNoICggRXhjZXB0aW9uIGUgKSB7fQogICAgICAgICB9Ci0gICAgICAgIAotCWZvciAoaW50IGkgPSAwIDsgaSA8IG1heFBvb2xTaXplO2krKyApIHsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGNvbm5zW2ldLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JICAgICAgICAvL3Bhc3NlZCA9IGZhbHNlOwotCSAgICB9Ci0JfQotCQotCXJldHVybiBwYXNzZWQ7CisKKyAgICBmb3IgKGludCBpID0gMCA7IGkgPCBtYXhQb29sU2l6ZTtpKysgKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb25uc1tpXS5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgLy9wYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDdkODUxMWYuLjQ3MjQ2NTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOCArMTUsMTggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtcG9vbGF1dGgiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvYnVpbGQueG1sCmluZGV4IDhkZTdiOTQuLjQ4YjM5ZDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC0yL2J1aWxkLnhtbApAQCAtMjUsNyArMjUsNyBAQAogCiA8cHJvamVjdCBuYW1lPSJtaXgiIGRlZmF1bHQ9InVzYWdlIiBiYXNlZGlyPSIuIj4KIAotICAgIAorCiAgICAgJmNvbW1vblNldHVwOwogICAgICZjb21tb25CdWlsZDsKICAgICAmdGVzdHByb3BlcnRpZXM7CkBAIC0zNSw3ICszNSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00Nyw1NCArNDcsNTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1NpbXBsZVNlc3Npb24qLmNsYXNzLCAqKi8qQ2xpZW50LmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAKKwogICAgICAgPCEtLSBzZXQgdXAgbm9uIHhhIHBvb2xzIC0tPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1wb29sYXV0aC1wb29sIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1wb29sYXV0aC1wb29sIi8+CisgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1wb29sYXV0aC1wb29sIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3Bvb2xhdXRoIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKIAotICAgICAgCisKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtc3FsIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXBvb2xhdXRoLXBvb2wucHJvcGVydHkuVXNlcj1kYnVzZXIiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXBvb2xhdXRoLXBvb2wucHJvcGVydHkuVXNlcj1kYnVzZXIiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1wb29sYXV0aC1wb29sLnByb3BlcnR5LlBhc3N3b3JkPWRicGFzc3dvcmQiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXBvb2xhdXRoLXBvb2wucHJvcGVydHkuUGFzc3dvcmQ9ZGJwYXNzd29yZCIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1wb29sYXV0aC1wb29sLnByb3BlcnR5LlVzZXI9cGJwdWJsaWMiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXBvb2xhdXRoLXBvb2wucHJvcGVydHkuVXNlcj1wYnB1YmxpYyIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXBvb2xhdXRoLXBvb2wucHJvcGVydHkuUGFzc3dvcmQ9cGJwdWJsaWMiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXBvb2xhdXRoLXBvb2wucHJvcGVydHkuUGFzc3dvcmQ9cGJwdWJsaWMiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgpAQCAtMTEyLDQzICsxMTIsNDMgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMiIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZHJvcC1zcWwiLz4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1wb29sYXV0aC1wb29sIi8+CisgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1wb29sYXV0aC1wb29sIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3Bvb2xhdXRoIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXNxbCI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfZGJ1c2VyX3RhYmxlcy5zcWwiLz4KLQk8cGFyYW0gbmFtZT0iZGIudXNlciIgdmFsdWU9ImRidXNlciIvPgotCTxwYXJhbSBuYW1lPSJkYi5wd2QiIHZhbHVlPSJkYnBhc3N3b3JkIi8+CisgICAgPHBhcmFtIG5hbWU9ImRiLnVzZXIiIHZhbHVlPSJkYnVzZXIiLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIucHdkIiB2YWx1ZT0iZGJwYXNzd29yZCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BicHVibGljX3RhYmxlcy5zcWwiLz4KLQk8cGFyYW0gbmFtZT0iZGIudXNlciIgdmFsdWU9InBicHVibGljIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLnB3ZCIgdmFsdWU9InBicHVibGljIi8+CisgICAgPHBhcmFtIG5hbWU9ImRiLnVzZXIiIHZhbHVlPSJwYnB1YmxpYyIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi5wd2QiIHZhbHVlPSJwYnB1YmxpYyIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZHJvcC1zcWwiPiAKKworICAgIDx0YXJnZXQgbmFtZT0iZHJvcC1zcWwiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9kYnVzZXJfdGFibGVzLnNxbCIvPgotCTxwYXJhbSBuYW1lPSJkYi51c2VyIiB2YWx1ZT0iZGJ1c2VyIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLnB3ZCIgdmFsdWU9ImRicGFzc3dvcmQiLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIudXNlciIgdmFsdWU9ImRidXNlciIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi5wd2QiIHZhbHVlPSJkYnBhc3N3b3JkIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcGJwdWJsaWNfdGFibGVzLnNxbCIvPgotCTxwYXJhbSBuYW1lPSJkYi51c2VyIiB2YWx1ZT0icGJwdWJsaWMiLz4KLQk8cGFyYW0gbmFtZT0iZGIucHdkIiB2YWx1ZT0icGJwdWJsaWMiLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIudXNlciIgdmFsdWU9InBicHVibGljIi8+CisgICAgPHBhcmFtIG5hbWU9ImRiLnB3ZCIgdmFsdWU9InBicHVibGljIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDdjNGY3YTcuLmVhOGViYTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC0yL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjUsMzUgKzI1LDM1IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAotCVNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotCVN0cmluZyB0ZXN0U3VpdGUgPSAicmVjb25maWcucG9vbGF1dGgtdGVzdDEgIjsKKworICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAicmVjb25maWcucG9vbGF1dGgtdGVzdDEgIjsKIAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVTZXNzaW9uSG9tZSIpOwotCVNpbXBsZVNlc3Npb25Ib21lIHNpbXBsZVNlc3Npb25Ib21lID0gKFNpbXBsZVNlc3Npb25Ib21lKQorICAgIFNpbXBsZVNlc3Npb25Ib21lIHNpbXBsZVNlc3Npb25Ib21lID0gKFNpbXBsZVNlc3Npb25Ib21lKQogICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlU2Vzc2lvbkhvbWUuY2xhc3MpOwotICAgICAgICAKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJSdW5uaW5nIHJlY29uZmlnLnBvb2xhdXRoIHRlc3RTdWl0ZTEgIik7CisKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJSdW5uaW5nIHJlY29uZmlnLnBvb2xhdXRoIHRlc3RTdWl0ZTEgIik7CiAgICAgICAgIFNpbXBsZVNlc3Npb24gc2ltcGxlU2Vzc2lvbiA9IHNpbXBsZVNlc3Npb25Ib21lLmNyZWF0ZSgpOwogCiAgICAgICAgIGlmICggIjEiLmVxdWFscyhhcmdzWzBdKSApICB7Ci0JICAgIGlmIChzaW1wbGVTZXNzaW9uLnRlc3QxKCkgKSB7Ci0JICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LlBBU1MgKTsKLQkgICAgfSBlbHNlIHsKLQkgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIDogIiAsIHN0YXQuRkFJTCApOwotCSAgICB9CisgICAgICAgIGlmIChzaW1wbGVTZXNzaW9uLnRlc3QxKCkgKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LlBBU1MgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIDogIiAsIHN0YXQuRkFJTCApOworICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoc2ltcGxlU2Vzc2lvbi50ZXN0MigpICkgewotCSAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDIgOiAiICwgc3RhdC5QQVNTICk7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MiA6ICIgLCBzdGF0LkZBSUwgKTsKLQkgICAgfQotICAgICAgICB9IAotICAgICAgICAJCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QyIDogIiAsIHN0YXQuUEFTUyApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDIgOiAiICwgc3RhdC5GQUlMICk7CisgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGVlY2RkMTIuLjIwYTQ0NjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC01Miw2ICs1Miw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQppbmRleCA2N2NkNjU0Li5jNjNhMjk5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC0yL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCkBAIC0zMSwxMDUgKzMxLDEwNSBAQAogICAgIHByaXZhdGUgRGF0YVNvdXJjZSBkczsKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIGN0eHRfID0gY29udGV4dDsKLQl0cnkgewotCSAgICBpY18gPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICB0cnkgeworICAgICAgICBpY18gPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQl9IGNhdGNoKCBOYW1pbmdFeGNlcHRpb24gbmUgKSB7Ci0JICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB9IGNhdGNoKCBOYW1pbmdFeGNlcHRpb24gbmUgKSB7CisgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSgpIHRocm93cyBFeGNlcHRpb24gewotCS8vRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCUNvbm5lY3Rpb24gY29ubjEgPSBudWxsOwotCVN0YXRlbWVudCBzdG10MSA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKLQkvL0dldCBhIGNvbm5lY3Rpb24gd2l0aCB1c2VyLHBhc3N3b3JkID0gZGJ1c2VyLGRicGFzc3dvcmQKLQkvL2FuZCBhY2Nlc3MgYSB0YWJsZSB0aGF0IG9ubHkgdGhpcyBwcmluY2lwYWwgY2FuCi0JLy9hY2Nlc3MKLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIERCVVNFUlRBQkxFIik7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChzdG10MSAhPSBudWxsICkgeyAKLQkgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGUpIHt9Ci0JICAgIH0KLQkgICAgaWYgKGNvbm4xICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JfQorICAgIC8vRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOworICAgIENvbm5lY3Rpb24gY29ubjEgPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10MSA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICAvL0dldCBhIGNvbm5lY3Rpb24gd2l0aCB1c2VyLHBhc3N3b3JkID0gZGJ1c2VyLGRicGFzc3dvcmQKKyAgICAvL2FuZCBhY2Nlc3MgYSB0YWJsZSB0aGF0IG9ubHkgdGhpcyBwcmluY2lwYWwgY2FuCisgICAgLy9hY2Nlc3MKKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIERCVVNFUlRBQkxFIik7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChzdG10MSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaChFeGNlcHRpb24gZSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoY29ubjEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgIH0KIAotCS8vTm93IHRyeSBxdWVyeWluZyBhIHRhYmxlIG93bmVkIGJ5IGFub3RoZXIgcHJpbmNpcGFsIGFuZAotCS8vZXhwZWN0IGFuIGV4Y2VwdGlvbgotCXRyeSB7Ci0JICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gUEJQVUJMSUNUQUJMRSIpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiB0cnVlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChzdG10MSAhPSBudWxsICkgeyAKLQkgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGUpIHt9Ci0JICAgIH0KLQkgICAgaWYgKGNvbm4xICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JfQorICAgIC8vTm93IHRyeSBxdWVyeWluZyBhIHRhYmxlIG93bmVkIGJ5IGFub3RoZXIgcHJpbmNpcGFsIGFuZAorICAgIC8vZXhwZWN0IGFuIGV4Y2VwdGlvbgorICAgIHRyeSB7CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gUEJQVUJMSUNUQUJMRSIpOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChzdG10MSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaChFeGNlcHRpb24gZSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoY29ubjEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgIH0KIAotCXJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkvL0RhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JLy9HZXQgYSBjb25uZWN0aW9uIHdpdGggdXNlcixwYXNzd29yZCA9IHBicHVibGljLHBicHVibGljCi0JLy9hbmQgYWNjZXNzIGEgdGFibGUgdGhhdCBvbmx5IHRoaXMgcHJpbmNpcGFsIGNhbgotCS8vYWNjZXNzCi0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHN0bXQxLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBQQlBVQkxJQ1RBQkxFIik7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChzdG10MSAhPSBudWxsICkgeyAKLQkgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGUpIHt9Ci0JICAgIH0KLQkgICAgaWYgKGNvbm4xICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JfQorICAgIC8vRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOworICAgIENvbm5lY3Rpb24gY29ubjEgPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10MSA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICAvL0dldCBhIGNvbm5lY3Rpb24gd2l0aCB1c2VyLHBhc3N3b3JkID0gcGJwdWJsaWMscGJwdWJsaWMKKyAgICAvL2FuZCBhY2Nlc3MgYSB0YWJsZSB0aGF0IG9ubHkgdGhpcyBwcmluY2lwYWwgY2FuCisgICAgLy9hY2Nlc3MKKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIFBCUFVCTElDVEFCTEUiKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKHN0bXQxICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7fQorICAgICAgICB9CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgfQogCi0JLy9Ob3cgdHJ5IHF1ZXJ5aW5nIGEgdGFibGUgb3duZWQgYnkgYW5vdGhlciBwcmluY2lwYWwgYW5kCi0JLy9leHBlY3QgYW4gZXhjZXB0aW9uCi0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHN0bXQxLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBEQlVTRVJUQUJMRSIpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiB0cnVlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChzdG10MSAhPSBudWxsICkgeyAKLQkgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGUpIHt9Ci0JICAgIH0KLQkgICAgaWYgKGNvbm4xICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JfQorICAgIC8vTm93IHRyeSBxdWVyeWluZyBhIHRhYmxlIG93bmVkIGJ5IGFub3RoZXIgcHJpbmNpcGFsIGFuZAorICAgIC8vZXhwZWN0IGFuIGV4Y2VwdGlvbgorICAgIHRyeSB7CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gREJVU0VSVEFCTEUiKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoc3RtdDEgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGUpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbm4xICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKyAgICB9CiAKLQlyZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC0yL3NxbC9jcmVhdGVfZGJ1c2VyX3RhYmxlcy5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvc3FsL2NyZWF0ZV9kYnVzZXJfdGFibGVzLnNxbAppbmRleCBmOTFhYTE3Li5lNjQwNjVlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvc3FsL2NyZWF0ZV9kYnVzZXJfdGFibGVzLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvc3FsL2NyZWF0ZV9kYnVzZXJfdGFibGVzLnNxbApAQCAtMSw5ICsxLDkgQEAKLURyb3AgdGFibGUgREJVU0VSVEFCTEU7DQotDQotQ1JFQVRFIFRBQkxFIERCVVNFUlRBQkxFICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gREJVU0VSVEFCTEUgVkFMVUVTKDEsICd3eHl6Jyk7DQotSU5TRVJUIElOVE8gREJVU0VSVEFCTEUgVkFMVUVTKDIsICdwcXJzJyk7DQorRHJvcCB0YWJsZSBEQlVTRVJUQUJMRTsKKworQ1JFQVRFIFRBQkxFIERCVVNFUlRBQkxFICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0lOU0VSVCBJTlRPIERCVVNFUlRBQkxFIFZBTFVFUygxLCAnd3h5eicpOworSU5TRVJUIElOVE8gREJVU0VSVEFCTEUgVkFMVUVTKDIsICdwcXJzJyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvc3FsL2NyZWF0ZV9wYnB1YmxpY190YWJsZXMuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC0yL3NxbC9jcmVhdGVfcGJwdWJsaWNfdGFibGVzLnNxbAppbmRleCA3OWVhNzJhLi4zNzllMDQ3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvc3FsL2NyZWF0ZV9wYnB1YmxpY190YWJsZXMuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9zcWwvY3JlYXRlX3BicHVibGljX3RhYmxlcy5zcWwKQEAgLTEsOSArMSw5IEBACi1Ecm9wIHRhYmxlIFBCUFVCTElDVEFCTEU7DQotDQotQ1JFQVRFIFRBQkxFIFBCUFVCTElDVEFCTEUgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBQQlBVQkxJQ1RBQkxFIFZBTFVFUygxLCAnd3h5eicpOw0KLUlOU0VSVCBJTlRPIFBCUFVCTElDVEFCTEUgVkFMVUVTKDIsICdwcXJzJyk7DQorRHJvcCB0YWJsZSBQQlBVQkxJQ1RBQkxFOworCitDUkVBVEUgVEFCTEUgUEJQVUJMSUNUQUJMRSAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBQQlBVQkxJQ1RBQkxFIFZBTFVFUygxLCAnd3h5eicpOworSU5TRVJUIElOVE8gUEJQVUJMSUNUQUJMRSBWQUxVRVMoMiwgJ3BxcnMnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9zcWwvZHJvcF9kYnVzZXJfdGFibGVzLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9zcWwvZHJvcF9kYnVzZXJfdGFibGVzLnNxbAppbmRleCAyNTU3MDBkLi4xOTMzMDY0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvc3FsL2Ryb3BfZGJ1c2VyX3RhYmxlcy5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC0yL3NxbC9kcm9wX2RidXNlcl90YWJsZXMuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIERCVVNFUlRBQkxFOw0KK0Ryb3AgdGFibGUgREJVU0VSVEFCTEU7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvc3FsL2Ryb3BfcGJwdWJsaWNfdGFibGVzLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9zcWwvZHJvcF9wYnB1YmxpY190YWJsZXMuc3FsCmluZGV4IGZmNDBhMTkuLmIwMjM5OTMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9zcWwvZHJvcF9wYnB1YmxpY190YWJsZXMuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9zcWwvZHJvcF9wYnB1YmxpY190YWJsZXMuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIFBCUFVCTElDVEFCTEU7DQorRHJvcCB0YWJsZSBQQlBVQkxJQ1RBQkxFOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDdkODUxMWYuLjQ3MjQ2NTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE4ICsxNSwxOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1wb29sYXV0aCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoL2J1aWxkLnhtbAppbmRleCA1MzFjMzI5Li4yYTc2NzJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoL2J1aWxkLnhtbApAQCAtMjUsNyArMjUsNyBAQAogCiA8cHJvamVjdCBuYW1lPSJtaXgiIGRlZmF1bHQ9InVzYWdlIiBiYXNlZGlyPSIuIj4KIAotICAgIAorCiAgICAgJmNvbW1vblNldHVwOwogICAgICZjb21tb25CdWlsZDsKICAgICAmdGVzdHByb3BlcnRpZXM7CkBAIC0zNSw3ICszNSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00Nyw5NyArNDcsOTcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1NpbXBsZVNlc3Npb24qLmNsYXNzLCAqKi8qQ2xpZW50LmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAKKwogICAgICAgPCEtLSBzZXQgdXAgbm9uIHhhIHBvb2xzIC0tPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1wb29sYXV0aC1wb29sIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1wb29sYXV0aC1wb29sIi8+CisgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1wb29sYXV0aC1wb29sIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3Bvb2xhdXRoIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKIAotICAgICAgCisKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtc3FsIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXBvb2xhdXRoLXBvb2wucHJvcGVydHkuVXNlcj1kYnVzZXIiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXBvb2xhdXRoLXBvb2wucHJvcGVydHkuVXNlcj1kYnVzZXIiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1wb29sYXV0aC1wb29sLnByb3BlcnR5LlBhc3N3b3JkPWRicGFzc3dvcmQiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXBvb2xhdXRoLXBvb2wucHJvcGVydHkuUGFzc3dvcmQ9ZGJwYXNzd29yZCIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1wb29sYXV0aC1wb29sLnByb3BlcnR5LlVzZXI9cGJwdWJsaWMiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXBvb2xhdXRoLXBvb2wucHJvcGVydHkuVXNlcj1wYnB1YmxpYyIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXBvb2xhdXRoLXBvb2wucHJvcGVydHkuUGFzc3dvcmQ9cGJwdWJsaWMiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXBvb2xhdXRoLXBvb2wucHJvcGVydHkuUGFzc3dvcmQ9cGJwdWJsaWMiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIyIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkcm9wLXNxbCIvPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLXBvb2xhdXRoLXBvb2wiLz4KKyAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLXBvb2xhdXRoLXBvb2wiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvcG9vbGF1dGgiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtc3FsIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9kYnVzZXJfdGFibGVzLnNxbCIvPgotCTxwYXJhbSBuYW1lPSJkYi51c2VyIiB2YWx1ZT0iZGJ1c2VyIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLnB3ZCIgdmFsdWU9ImRicGFzc3dvcmQiLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIudXNlciIgdmFsdWU9ImRidXNlciIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi5wd2QiIHZhbHVlPSJkYnBhc3N3b3JkIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcGJwdWJsaWNfdGFibGVzLnNxbCIvPgotCTxwYXJhbSBuYW1lPSJkYi51c2VyIiB2YWx1ZT0icGJwdWJsaWMiLz4KLQk8cGFyYW0gbmFtZT0iZGIucHdkIiB2YWx1ZT0icGJwdWJsaWMiLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIudXNlciIgdmFsdWU9InBicHVibGljIi8+CisgICAgPHBhcmFtIG5hbWU9ImRiLnB3ZCIgdmFsdWU9InBicHVibGljIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkcm9wLXNxbCI+IAorCisgICAgPHRhcmdldCBuYW1lPSJkcm9wLXNxbCI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX2RidXNlcl90YWJsZXMuc3FsIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLnVzZXIiIHZhbHVlPSJkYnVzZXIiLz4KLQk8cGFyYW0gbmFtZT0iZGIucHdkIiB2YWx1ZT0iZGJwYXNzd29yZCIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi51c2VyIiB2YWx1ZT0iZGJ1c2VyIi8+CisgICAgPHBhcmFtIG5hbWU9ImRiLnB3ZCIgdmFsdWU9ImRicGFzc3dvcmQiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wYnB1YmxpY190YWJsZXMuc3FsIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLnVzZXIiIHZhbHVlPSJwYnB1YmxpYyIvPgotCTxwYXJhbSBuYW1lPSJkYi5wd2QiIHZhbHVlPSJwYnB1YmxpYyIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi51c2VyIiB2YWx1ZT0icGJwdWJsaWMiLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIucHdkIiB2YWx1ZT0icGJwdWJsaWMiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA3YzRmN2E3Li5lYThlYmEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjUsMzUgKzI1LDM1IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAotCVNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotCVN0cmluZyB0ZXN0U3VpdGUgPSAicmVjb25maWcucG9vbGF1dGgtdGVzdDEgIjsKKworICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAicmVjb25maWcucG9vbGF1dGgtdGVzdDEgIjsKIAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVTZXNzaW9uSG9tZSIpOwotCVNpbXBsZVNlc3Npb25Ib21lIHNpbXBsZVNlc3Npb25Ib21lID0gKFNpbXBsZVNlc3Npb25Ib21lKQorICAgIFNpbXBsZVNlc3Npb25Ib21lIHNpbXBsZVNlc3Npb25Ib21lID0gKFNpbXBsZVNlc3Npb25Ib21lKQogICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlU2Vzc2lvbkhvbWUuY2xhc3MpOwotICAgICAgICAKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJSdW5uaW5nIHJlY29uZmlnLnBvb2xhdXRoIHRlc3RTdWl0ZTEgIik7CisKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJSdW5uaW5nIHJlY29uZmlnLnBvb2xhdXRoIHRlc3RTdWl0ZTEgIik7CiAgICAgICAgIFNpbXBsZVNlc3Npb24gc2ltcGxlU2Vzc2lvbiA9IHNpbXBsZVNlc3Npb25Ib21lLmNyZWF0ZSgpOwogCiAgICAgICAgIGlmICggIjEiLmVxdWFscyhhcmdzWzBdKSApICB7Ci0JICAgIGlmIChzaW1wbGVTZXNzaW9uLnRlc3QxKCkgKSB7Ci0JICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LlBBU1MgKTsKLQkgICAgfSBlbHNlIHsKLQkgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIDogIiAsIHN0YXQuRkFJTCApOwotCSAgICB9CisgICAgICAgIGlmIChzaW1wbGVTZXNzaW9uLnRlc3QxKCkgKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LlBBU1MgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIDogIiAsIHN0YXQuRkFJTCApOworICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoc2ltcGxlU2Vzc2lvbi50ZXN0MigpICkgewotCSAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDIgOiAiICwgc3RhdC5QQVNTICk7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MiA6ICIgLCBzdGF0LkZBSUwgKTsKLQkgICAgfQotICAgICAgICB9IAotICAgICAgICAJCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QyIDogIiAsIHN0YXQuUEFTUyApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDIgOiAiICwgc3RhdC5GQUlMICk7CisgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggZWVjZGQxMi4uMjBhNDQ2MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNTIsNiArNTIsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQppbmRleCA3ODJiZGM0Li44ZDE2NTI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKQEAgLTI3LDEwNyArMjcsMTA3IEBACiB7CiAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGN0eHRfOwotICAgIHByaXZhdGUgSW5pdGlhbENvbnRleHQgaWNfOyAKKyAgICBwcml2YXRlIEluaXRpYWxDb250ZXh0IGljXzsKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIGN0eHRfID0gY29udGV4dDsKLQl0cnkgewotCSAgICBpY18gPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQl9IGNhdGNoKCBOYW1pbmdFeGNlcHRpb24gbmUgKSB7Ci0JICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB0cnkgeworICAgICAgICBpY18gPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICB9IGNhdGNoKCBOYW1pbmdFeGNlcHRpb24gbmUgKSB7CisgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSgpIHRocm93cyBFeGNlcHRpb24gewotCURhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JLy9HZXQgYSBjb25uZWN0aW9uIHdpdGggdXNlcixwYXNzd29yZCA9IGRidXNlcixkYnBhc3N3b3JkCi0JLy9hbmQgYWNjZXNzIGEgdGFibGUgdGhhdCBvbmx5IHRoaXMgcHJpbmNpcGFsIGNhbgotCS8vYWNjZXNzCi0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHN0bXQxLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBEQlVTRVJUQUJMRSIpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoc3RtdDEgIT0gbnVsbCApIHsgCi0JICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7fQotCSAgICB9Ci0JICAgIGlmIChjb25uMSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCX0KKyAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIC8vR2V0IGEgY29ubmVjdGlvbiB3aXRoIHVzZXIscGFzc3dvcmQgPSBkYnVzZXIsZGJwYXNzd29yZAorICAgIC8vYW5kIGFjY2VzcyBhIHRhYmxlIHRoYXQgb25seSB0aGlzIHByaW5jaXBhbCBjYW4KKyAgICAvL2FjY2VzcworICAgIHRyeSB7CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gREJVU0VSVEFCTEUiKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKHN0bXQxICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7fQorICAgICAgICB9CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgfQogCi0JLy9Ob3cgdHJ5IHF1ZXJ5aW5nIGEgdGFibGUgb3duZWQgYnkgYW5vdGhlciBwcmluY2lwYWwgYW5kCi0JLy9leHBlY3QgYW4gZXhjZXB0aW9uCi0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHN0bXQxLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBQQlBVQkxJQ1RBQkxFIik7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKHN0bXQxICE9IG51bGwgKSB7IAotCSAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaChFeGNlcHRpb24gZSkge30KLQkgICAgfQotCSAgICBpZiAoY29ubjEgIT0gbnVsbCkgeyAKLQkgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQl9CisgICAgLy9Ob3cgdHJ5IHF1ZXJ5aW5nIGEgdGFibGUgb3duZWQgYnkgYW5vdGhlciBwcmluY2lwYWwgYW5kCisgICAgLy9leHBlY3QgYW4gZXhjZXB0aW9uCisgICAgdHJ5IHsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHN0bXQxLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBQQlBVQkxJQ1RBQkxFIik7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKHN0bXQxICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7fQorICAgICAgICB9CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgfQogCi0JcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MigpIHRocm93cyBFeGNlcHRpb24gewotCURhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JLy9HZXQgYSBjb25uZWN0aW9uIHdpdGggdXNlcixwYXNzd29yZCA9IHBicHVibGljLHBicHVibGljCi0JLy9hbmQgYWNjZXNzIGEgdGFibGUgdGhhdCBvbmx5IHRoaXMgcHJpbmNpcGFsIGNhbgotCS8vYWNjZXNzCi0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHN0bXQxLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBQQlBVQkxJQ1RBQkxFIik7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChzdG10MSAhPSBudWxsICkgeyAKLQkgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGUpIHt9Ci0JICAgIH0KLQkgICAgaWYgKGNvbm4xICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JfQorICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgLy9HZXQgYSBjb25uZWN0aW9uIHdpdGggdXNlcixwYXNzd29yZCA9IHBicHVibGljLHBicHVibGljCisgICAgLy9hbmQgYWNjZXNzIGEgdGFibGUgdGhhdCBvbmx5IHRoaXMgcHJpbmNpcGFsIGNhbgorICAgIC8vYWNjZXNzCisgICAgdHJ5IHsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHN0bXQxLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBQQlBVQkxJQ1RBQkxFIik7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChzdG10MSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaChFeGNlcHRpb24gZSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoY29ubjEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgIH0KIAotCS8vTm93IHRyeSBxdWVyeWluZyBhIHRhYmxlIG93bmVkIGJ5IGFub3RoZXIgcHJpbmNpcGFsIGFuZAotCS8vZXhwZWN0IGFuIGV4Y2VwdGlvbgotCXRyeSB7Ci0JICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gREJVU0VSVEFCTEUiKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gdHJ1ZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoc3RtdDEgIT0gbnVsbCApIHsgCi0JICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7fQotCSAgICB9Ci0JICAgIGlmIChjb25uMSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCX0KKyAgICAvL05vdyB0cnkgcXVlcnlpbmcgYSB0YWJsZSBvd25lZCBieSBhbm90aGVyIHByaW5jaXBhbCBhbmQKKyAgICAvL2V4cGVjdCBhbiBleGNlcHRpb24KKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIERCVVNFUlRBQkxFIik7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKHN0bXQxICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7fQorICAgICAgICB9CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgfQogCi0JcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgvc3FsL2NyZWF0ZV9kYnVzZXJfdGFibGVzLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgvc3FsL2NyZWF0ZV9kYnVzZXJfdGFibGVzLnNxbAppbmRleCBmOTFhYTE3Li5lNjQwNjVlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoL3NxbC9jcmVhdGVfZGJ1c2VyX3RhYmxlcy5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9zcWwvY3JlYXRlX2RidXNlcl90YWJsZXMuc3FsCkBAIC0xLDkgKzEsOSBAQAotRHJvcCB0YWJsZSBEQlVTRVJUQUJMRTsNCi0NCi1DUkVBVEUgVEFCTEUgREJVU0VSVEFCTEUgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBEQlVTRVJUQUJMRSBWQUxVRVMoMSwgJ3d4eXonKTsNCi1JTlNFUlQgSU5UTyBEQlVTRVJUQUJMRSBWQUxVRVMoMiwgJ3BxcnMnKTsNCitEcm9wIHRhYmxlIERCVVNFUlRBQkxFOworCitDUkVBVEUgVEFCTEUgREJVU0VSVEFCTEUgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gREJVU0VSVEFCTEUgVkFMVUVTKDEsICd3eHl6Jyk7CitJTlNFUlQgSU5UTyBEQlVTRVJUQUJMRSBWQUxVRVMoMiwgJ3BxcnMnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgvc3FsL2NyZWF0ZV9wYnB1YmxpY190YWJsZXMuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9zcWwvY3JlYXRlX3BicHVibGljX3RhYmxlcy5zcWwKaW5kZXggNzllYTcyYS4uMzc5ZTA0NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9zcWwvY3JlYXRlX3BicHVibGljX3RhYmxlcy5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9zcWwvY3JlYXRlX3BicHVibGljX3RhYmxlcy5zcWwKQEAgLTEsOSArMSw5IEBACi1Ecm9wIHRhYmxlIFBCUFVCTElDVEFCTEU7DQotDQotQ1JFQVRFIFRBQkxFIFBCUFVCTElDVEFCTEUgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBQQlBVQkxJQ1RBQkxFIFZBTFVFUygxLCAnd3h5eicpOw0KLUlOU0VSVCBJTlRPIFBCUFVCTElDVEFCTEUgVkFMVUVTKDIsICdwcXJzJyk7DQorRHJvcCB0YWJsZSBQQlBVQkxJQ1RBQkxFOworCitDUkVBVEUgVEFCTEUgUEJQVUJMSUNUQUJMRSAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBQQlBVQkxJQ1RBQkxFIFZBTFVFUygxLCAnd3h5eicpOworSU5TRVJUIElOVE8gUEJQVUJMSUNUQUJMRSBWQUxVRVMoMiwgJ3BxcnMnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgvc3FsL2Ryb3BfZGJ1c2VyX3RhYmxlcy5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoL3NxbC9kcm9wX2RidXNlcl90YWJsZXMuc3FsCmluZGV4IDI1NTcwMGQuLjE5MzMwNjQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgvc3FsL2Ryb3BfZGJ1c2VyX3RhYmxlcy5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9zcWwvZHJvcF9kYnVzZXJfdGFibGVzLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBEQlVTRVJUQUJMRTsNCitEcm9wIHRhYmxlIERCVVNFUlRBQkxFOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9zcWwvZHJvcF9wYnB1YmxpY190YWJsZXMuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9zcWwvZHJvcF9wYnB1YmxpY190YWJsZXMuc3FsCmluZGV4IGZmNDBhMTkuLmIwMjM5OTMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgvc3FsL2Ryb3BfcGJwdWJsaWNfdGFibGVzLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoL3NxbC9kcm9wX3BicHVibGljX3RhYmxlcy5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgUEJQVUJMSUNUQUJMRTsNCitEcm9wIHRhYmxlIFBCUFVCTElDVEFCTEU7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODM1ZmVlNS4uZmQxNmFhMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvdXNlcnBhc3MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLWFwcGF1dGgiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJvcmFjbGUudXNlci4xIiB2YWx1ZT0ic2NvdHQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvdXNlcnBhc3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9idWlsZC54bWwKaW5kZXggZDMwYTM5OC4uNDI4Mzk1YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUyLDIzICs1MiwyMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovU2ltcGxlQk1QLmNsYXNzLCAqKi9TaW1wbGVCTVBIb21lLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLW9yYWNsZS1jb21tb24iPgotCSAgICAgIDxwYXJhbSBuYW1lPSJvcmFjbGUudXNlciIgdmFsdWU9IiR7b3JhY2xlLnVzZXIuMX0iLz4KLQkgICAgICA8cGFyYW0gbmFtZT0ib3JhY2xlLnBhc3N3b3JkIiB2YWx1ZT0iJHtvcmFjbGUucGFzc3dvcmQuMX0iLz4KLQkgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KKyAgICAgICAgICA8cGFyYW0gbmFtZT0ib3JhY2xlLnVzZXIiIHZhbHVlPSIke29yYWNsZS51c2VyLjF9Ii8+CisgICAgICAgICAgPHBhcmFtIG5hbWU9Im9yYWNsZS5wYXNzd29yZCIgdmFsdWU9IiR7b3JhY2xlLnBhc3N3b3JkLjF9Ii8+CisgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLW9yYWNsZS1jb21tb24iPgotCSAgICAgIDxwYXJhbSBuYW1lPSJvcmFjbGUudXNlciIgdmFsdWU9IiR7b3JhY2xlLnVzZXIuMn0iLz4KLQkgICAgICA8cGFyYW0gbmFtZT0ib3JhY2xlLnBhc3N3b3JkIiB2YWx1ZT0iJHtvcmFjbGUucGFzc3dvcmQuMn0iLz4KLQkgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZTEuc3FsIi8+CisgICAgICAgICAgPHBhcmFtIG5hbWU9Im9yYWNsZS51c2VyIiB2YWx1ZT0iJHtvcmFjbGUudXNlci4yfSIvPgorICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcmFjbGUucGFzc3dvcmQiIHZhbHVlPSIke29yYWNsZS5wYXNzd29yZC4yfSIvPgorICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlMS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtb3JhY2xlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJvcmFjbGUuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1vcmFjbGUtcG9vbCIvPgpAQCAtNzYsMTEgKzc2LDExIEBACiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtb3JhY2xlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KQEAgLTg4LDEyICs4OCwxMiBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1vcmFjbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlMS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1vcmFjbGUtY29tbW9uIj4gCisgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtb3JhY2xlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJvcmFjbGUucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1vcmFjbGUtcG9vbCIvPgotCTxwYXJhbSBuYW1lPSJvcmFjbGUucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvczFxZURCLW9yYWNsZSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcmFjbGUucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvczFxZURCLW9yYWNsZSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQppbmRleCA2NWIyNjMwLi44ZWNmNzlkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQpAQCAtMzAsMzUgKzMwLDM1IEBACiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CiAgICAgICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiUmVjb25maWcgVXNlci9QYXNzIjsKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQk1QSG9tZSIpOwotCVNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQorICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQogICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiUmVjb25maWcgdXNlci9wYXNzIHRlc3RzIik7CiAgICAgICAgIFNpbXBsZUJNUCBzaW1wbGVCTVAgPSBzaW1wbGVCTVBIb21lLmNyZWF0ZSgpOwotCQotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCVN5c3RlbS5vdXQucHJpbnQoIiB0ZXN0MTogIik7Ci0JaWYgKCBzaW1wbGVCTVAudGVzdDEoInNjb3R0IiwidGlnZXIiLCAiQV9DdXN0b21lciIpICkgeworCisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgU3lzdGVtLm91dC5wcmludCgiIHRlc3QxOiAiKTsKKyAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MSgic2NvdHQiLCJ0aWdlciIsICJBX0N1c3RvbWVyIikgKSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHVzZXIxVGVzdCA6ICIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgdGVzdCBhZ2FpbiIpOwotCSAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MSgic2hhbCIsICJzaGFsIiwgIkJfQ3VzdG9tZXIiKSApIHsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUGFzc2VkIik7Ci0gICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB1c2VyMlRlc3QgOiAiLCBzdGF0LlBBU1MpOyAKLQkgICAgfSBlbHNlIHsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmFpbGVkIik7IAorICAgICAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MSgic2hhbCIsICJzaGFsIiwgIkJfQ3VzdG9tZXIiKSApIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUGFzc2VkIik7CisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB1c2VyMlRlc3QgOiAiLCBzdGF0LlBBU1MpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGYWlsZWQiKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHVzZXIyVGVzdCA6ICIsIHN0YXQuRkFJTCk7Ci0JICAgIH0KLQkgICAgCi0JfSBlbHNlIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJGYWlsZWQiKTsKLSAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdXNlcjFUZXN0IDogIiwgc3RhdC5GQUlMKTsgCi0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgICAgICB9CisKKyAgICB9IGVsc2UgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWxlZCIpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB1c2VyMVRlc3QgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggMzFmZjZkNi4uY2IwZmY3YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvdXNlcnBhc3MvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNTcsNiArNTcsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggM2E2NGJlYS4uYzMxZGIwZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvdXNlcnBhc3MvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQpAQCAtMzIsNDYgKzMyLDQ2IEBACiAgICAgaW50IGlkOwogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGVudGl0eUNvbnRleHQpIHsKLQlDb250ZXh0IGNvbnRleHQgPSBudWxsOwotCXRyeSB7Ci0JICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTEiKTsKLQl9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOwotCX0KKyAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTEiKTsKKyAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgSW50ZWdlciBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKLQlyZXR1cm4gbmV3IEludGVnZXIoMSk7CisgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKFN0cmluZyB1c2VyLCBTdHJpbmcgcGFzc3dvcmQsIFN0cmluZyB0YWJsZU5hbWUpIHsKICAgICAgICAgLy9hY2Nlc3MgVXNlcjEncyB0YWJsZSBhbmQgcHVzaCBzb21lIGRhdGEgdGhlbiByZWFkIGl0IG91dAotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQl0cnkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxlZCB3aXRoICIgKyB1c2VyICsgIjoiK3Bhc3N3b3JkKTsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpOwotCSAgICAvL2Nvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIGluc2VydERhdGEoIGNvbm4sIHRhYmxlTmFtZSApOwotCSAgICBxdWVyeVRhYmxlKCBjb25uLCB0YWJsZU5hbWUgKTsKLQkgICAgLy9lbXB0eVRhYmxlKCBjb25uLCB0YWJsZU5hbWUgKTsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsZWQgd2l0aCAiICsgdXNlciArICI6IitwYXNzd29yZCk7CisgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTsKKyAgICAgICAgLy9jb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBpbnNlcnREYXRhKCBjb25uLCB0YWJsZU5hbWUgKTsKKyAgICAgICAgcXVlcnlUYWJsZSggY29ubiwgdGFibGVOYW1lICk7CisgICAgICAgIC8vZW1wdHlUYWJsZSggY29ubiwgdGFibGVOYW1lICk7CiAgICAgICAgICAgICBjb25uLmNsb3NlKCk7Ci0JICAgIHBhc3NlZCA9IHRydWU7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAvL2UucHJpbnRTdGFja1RyYWNlKCk7IAotCX0gZmluYWxseSB7Ci0JICAgIGlmICggY29ubiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsKLQkgICAgICAgICAgICBjb25uLmNsb3NlKCk7Ci0JCX0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQl9Ci0KLQlyZXR1cm4gcGFzc2VkOworICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgLy9lLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQogICAgIH0KLSAgICAKKworICAgIHJldHVybiBwYXNzZWQ7CisgICAgfQorCiAKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkge30KICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHt9CkBAIC04Miw0NiArODIsNDYgQEAKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKCkge30KIAogICAgIC8vSW5zZXJ0IHNvbWUgYXJiaXRyYXJ5IGRhdGEgaW50byB0aGUgdGFibGUKLSAgICBwcml2YXRlIHZvaWQgaW5zZXJ0RGF0YSggQ29ubmVjdGlvbiBjb24sIFN0cmluZyB0YWJsZU5hbWUgKSAKKyAgICBwcml2YXRlIHZvaWQgaW5zZXJ0RGF0YSggQ29ubmVjdGlvbiBjb24sIFN0cmluZyB0YWJsZU5hbWUgKQogICAgICAgICAgICAgdGhyb3dzIFNRTEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KAotCSAgICAiaW5zZXJ0IGludG8gIiArIHRhYmxlTmFtZSArICIgdmFsdWVzICg/LCA/KSIgKTsKKyAgICAgICAgImluc2VydCBpbnRvICIgKyB0YWJsZU5hbWUgKyAiIHZhbHVlcyAoPywgPykiICk7CiAKLQlmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKyApIHsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKyApIHsKICAgICAgICAgICAgIHN0bXQuc2V0SW50KDEsIGkpOwotCSAgICBzdG10LnNldFN0cmluZygyLCAiYWJjZC0iK2kpOwotCSAgICBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKLQl9Ci0KLQlzdG10LmNsb3NlKCk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKDIsICJhYmNkLSIraSk7CisgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBlbXB0eVRhYmxlKCBDb25uZWN0aW9uIGNvbiwgU3RyaW5nIHRhYmxlTmFtZSApIAorICAgIHN0bXQuY2xvc2UoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZW1wdHlUYWJsZSggQ29ubmVjdGlvbiBjb24sIFN0cmluZyB0YWJsZU5hbWUgKQogICAgICAgICAgICAgdGhyb3dzIFNRTEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgCi0JICAgIHN0bXQuZXhlY3V0ZSgiZGVsZXRlICogZnJvbSAiKyB0YWJsZU5hbWUpOwotCSAgICBzdG10LmNsb3NlKCk7CisKKyAgICAgICAgc3RtdC5leGVjdXRlKCJkZWxldGUgKiBmcm9tICIrIHRhYmxlTmFtZSk7CisgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKLQl9Ci0JICAgIAogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBxdWVyeVRhYmxlKCBDb25uZWN0aW9uIGNvbiwgU3RyaW5nIHRhYmxlTmFtZSApIAorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBxdWVyeVRhYmxlKCBDb25uZWN0aW9uIGNvbiwgU3RyaW5nIHRhYmxlTmFtZSApCiAgICAgICAgICAgICB0aHJvd3MgU1FMRXhjZXB0aW9uCiAgICAgewogICAgICAgICB0cnkgewotCSAgICBTdGF0ZW1lbnQgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgUmVzdWx0U2V0IHJzID0gc3RtdC5leGVjdXRlUXVlcnkoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lKTsKLQkgICAgd2hpbGUoIHJzLm5leHQoKSApIHsgCi0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIHJzICk7Ci0JICAgIH0JCi0JICAgIHJzLmNsb3NlKCk7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKLQl9CisgICAgICAgIFN0YXRlbWVudCBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBSZXN1bHRTZXQgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUpOworICAgICAgICB3aGlsZSggcnMubmV4dCgpICkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCBycyApOworICAgICAgICB9CisgICAgICAgIHJzLmNsb3NlKCk7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKKyAgICB9CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvdXNlcnBhc3Mvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGJlNjY3NDQuLmU5NDA2ZmMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvdXNlcnBhc3Mvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvdXNlcnBhc3Mvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBBX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBBX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBBX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgQV9DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL3NxbC9jcmVhdGVfcG9pbnRiYXNlMS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL3NxbC9jcmVhdGVfcG9pbnRiYXNlMS5zcWwKaW5kZXggY2I3NGNiNC4uNDI1MzYzMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9zcWwvY3JlYXRlX3BvaW50YmFzZTEuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvdXNlcnBhc3Mvc3FsL2NyZWF0ZV9wb2ludGJhc2UxLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgQl9DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgQl9DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgQl9DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIEJfQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDBjODE3MWQuLjZkZDY4OGEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvdXNlcnBhc3Mvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgQV9DdXN0b21lcjsNCitEcm9wIHRhYmxlIEFfQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL3NxbC9kcm9wX3BvaW50YmFzZTEuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9zcWwvZHJvcF9wb2ludGJhc2UxLnNxbAppbmRleCBmZDM1ZmE3Li5hYmNhYWNjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL3NxbC9kcm9wX3BvaW50YmFzZTEuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvdXNlcnBhc3Mvc3FsL2Ryb3BfcG9pbnRiYXNlMS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgQl9DdXN0b21lcjsNCitEcm9wIHRhYmxlIEJfQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlcG9ydC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlcG9ydC54bWwKaW5kZXggZjU2NzY1Zi4uOGY3NWFlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZXBvcnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVwb3J0LnhtbApAQCAtMjMsNyArMjMsNyBAQAogPHRhcmdldCBuYW1lPSJyZXBvcnQiPgogPGVjaG8gbWVzc2FnZT0iQ29tcGFyaW5nIHJlc3VsdHMgd2l0aCBleHBlY3RlZCByZXN1bHRzIi8+CiAKLSAKKwogICAgIDx4c2x0IHN0eWxlPSIke3N0eWxlc2hlZXR9IgogICAgICAgICAgICAgaW49IiR7eG1sZmlsZX0iIG91dD0iJHtodG1sZmlsZX0iCiAgICAgICAgICAgICBiYXNlZGlyPSIuIiBkZXN0ZGlyPSIuIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ydW5fdGVzdC5zaCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcnVuX3Rlc3Quc2gKaW5kZXggYzdhM2ZhMC4uY2I0YWUwOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ydW5fdGVzdC5zaAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3J1bl90ZXN0LnNoCkBAIC0xOCw3ICsxOCw3IEBACiBsaXN0X3Rlc3RfaWRzKCl7CiAgIGVjaG8gamRiY19hbGwKIH0KLSAKKwogdGVzdF9ydW4oKXsKICAgJHtTMUFTX0hPTUV9L2Jpbi9hc2FkbWluIHN0YXJ0LWRvbWFpbiBkb21haW4xCiAgICR7UzFBU19IT01FfS9iaW4vYXNhZG1pbiBzdGFydC1kYXRhYmFzZQpAQCAtMzgsMTMgKzM4LDEzIEBACiAgIGdlbmVyYXRlX2p1bml0X3JlcG9ydCAkezF9CiAgIGNoYW5nZV9qdW5pdF9yZXBvcnRfY2xhc3NfbmFtZXMKIH0KLSAKKwogZ2V0X3Rlc3RfdGFyZ2V0KCl7Ci0JY2FzZSAkezF9IGluCi0JCWpkYmNfYWxsICkKLQkJCVRBUkdFVD1hbGwKLQkJCWV4cG9ydCBUQVJHRVQ7OwotCWVzYWMKKyAgICBjYXNlICR7MX0gaW4KKyAgICAgICAgamRiY19hbGwgKQorICAgICAgICAgICAgVEFSR0VUPWFsbAorICAgICAgICAgICAgZXhwb3J0IFRBUkdFVDs7CisgICAgZXNhYwogfQogCiBPUFQ9JHsxfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTc4Y2FlYS4uZmRkNGUzNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtc2ltcGxlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGUvYnVpbGQueG1sCmluZGV4IDk4MWIzNDcuLmEzMmExODMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZS9idWlsZC54bWwKQEAgLTQyLDcgKzQyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTU0LDEzICs1NCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovU2ltcGxlQk1QLmNsYXNzLCAqKi9TaW1wbGVCTVBIb21lLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtNjksMTQgKzY5LDE0IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZS1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgpAQCAtODUsNyArODUsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UtY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZS9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZS9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKaW5kZXggNDEzZmU2NS4uNDY0OGY5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGUvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQpAQCAtMjksNjYgKzI5LDY2IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLSAJU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7Ci0JU3RyaW5nIHRlc3RTdWl0ZSA9ICJqZGJjc2ltcGxlICI7CisgICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiamRiY3NpbXBsZSAiOwogCiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpSZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUJNUEhvbWUiKTsKLQlTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKKyAgICBTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZUJNUEhvbWUuY2xhc3MpOwogCiAgICAgICAgIFNpbXBsZUJNUCBzaW1wbGVCTVAgPSBzaW1wbGVCTVBIb21lLmNyZWF0ZSgpOwotICAgICAgICAKKwogICAgICAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MSgxMCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQogCi0JaWYgKCBzaW1wbGVCTVAudGVzdDIoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuRkFJTCk7Ci0JfQotICAgICAgICAKLQlpZiAoIHNpbXBsZUJNUC50ZXN0MygpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QzIDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QzIDogIiwgc3RhdC5GQUlMKTsKLQl9CisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDIoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQogCi0JaWYgKCBzaW1wbGVCTVAudGVzdDQoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0NCA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0NCA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgIGlmICggc2ltcGxlQk1QLnRlc3QzKCkgKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDMgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDMgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KIAotCWlmICggc2ltcGxlQk1QLnRlc3Q1KCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDUgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDUgOiAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICBpZiAoIHNpbXBsZUJNUC50ZXN0NCgpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3Q0IDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3Q0IDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQlpZiAoIHNpbXBsZUJNUC50ZXN0NigpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3Q2IDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3Q2IDogIiwgc3RhdC5GQUlMKTsKLQl9CisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDUoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0NSA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0NSA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQogCi0JaWYgKCBzaW1wbGVCTVAudGVzdDcoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0NyA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0NyA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgIGlmICggc2ltcGxlQk1QLnRlc3Q2KCkgKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDYgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDYgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KIAotCWlmICggc2ltcGxlQk1QLnRlc3Q4KCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDggOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDggOiAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICBpZiAoIHNpbXBsZUJNUC50ZXN0NygpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3Q3IDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3Q3IDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOwotICAgIAotICAgICAgICAKKyAgICBpZiAoIHNpbXBsZUJNUC50ZXN0OCgpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3Q4IDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3Q4IDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CisKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOworCisKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGUvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBlMDljMjc2Li5mZmUwNTA5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTU3LDYgKzU3LDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGUvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggMDIyMmNkNy4uNWNiOTQ0OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGUvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC0zMSwxNzUgKzMxLDE3NSBAQAogICAgIHByb3RlY3RlZCBEYXRhU291cmNlIGRzOwogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGVudGl0eUNvbnRleHQpIHsKLQlDb250ZXh0IGNvbnRleHQgPSBudWxsOwotCXRyeSB7Ci0JICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCX0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7Ci0JfQorICAgIENvbnRleHQgY29udGV4dCA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKKyAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqU2ltcGxlQk1QQmVhbioqXSBEb25lIHdpdGggc2V0RW50aXR5Q29udGV4dC4uLi4iKTsKICAgICB9CiAKICAgICBwdWJsaWMgSW50ZWdlciBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKLQlyZXR1cm4gbmV3IEludGVnZXIoMSk7CisgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOwogICAgIH0KIAogICAgIC8qIEdldCAxMCBjb25uZWN0aW9ucyBpbiBhIGJ1bmNoIGFuZCB0aGVuIGNsb3NlIHRoZW0qLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCBpbnQgbnVtUnVucyApIHsKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JQ29ubmVjdGlvbltdIGNvbm5zID0gbmV3IENvbm5lY3Rpb25bMTBdOworICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICBDb25uZWN0aW9uW10gY29ubnMgPSBuZXcgQ29ubmVjdGlvblsxMF07CiAgICAgICAgIGZvciggaW50IGkgPSAwOyBpIDwgbnVtUnVuczsgaSsrICkgewotCSAgICB0cnkgewotCSAgICAgICAgY29ubnNbaV0gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgICAgICBwYXNzZWQgPSBmYWxzZTsKLQkgICAgfSAvKmZpbmFsbHkgewotCSAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICAgICAgdHJ5IHsKLQkgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOwotCSAgICAJICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgICAgICB9Ci0JICAgIH0gKi8KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbm5zW2ldID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgIH0gLypmaW5hbGx5IHsKKyAgICAgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgICAgICB9CisgICAgICAgIH0gKi8KICAgICAgICAgfQotICAgICAgICAKLQlmb3IgKGludCBpID0gMCA7IGkgPCBudW1SdW5zO2krKyApIHsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGNvbm5zW2ldLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JICAgICAgICBwYXNzZWQgPSBmYWxzZTsKLQkgICAgfQotCX0KLQlyZXR1cm4gcGFzc2VkOworCisgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgbnVtUnVucztpKysgKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb25uc1tpXS5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKICAgICAvKiBHZXQgYSBzaW5nbGUgY29ubmVjdGlvbiBhbmQgY2xvc2UgaXQgKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MigpIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCXRyeSB7Ci0JICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLSAgICAgICAgfSAKLSAgICAgICAgCi0JcmV0dXJuIHBhc3NlZDsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9Ci0gICAKLSAgICAvKiBVc2UgdGhlIGdldENvbm5lY3Rpb24gQVBJIGluIHRoZSBDb25uZWN0b3JSdW50aW1lIAorCisgICAgLyogVXNlIHRoZSBnZXRDb25uZWN0aW9uIEFQSSBpbiB0aGUgQ29ubmVjdG9yUnVudGltZQogICAgICAqIFVzZSBhIGpkYmMgcmVzb3VyY2Ugam5kaSBuYW1lCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDMoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS1SdW5uaW5nIHRlc3QzLS0tLS0tLS0tLS0tLS0tIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS1SdW5uaW5nIHRlc3QzLS0tLS0tLS0tLS0tLS0tIik7CiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKLQlDb25uZWN0b3JSdW50aW1lIHJ1bnRpbWUgPSBDb25uZWN0b3JSdW50aW1lLmdldFJ1bnRpbWUoKTsKLQkKLQl0cnkgewotCSAgICBjb24gPSBydW50aW1lLmdldENvbm5lY3Rpb24oICJqZGJjL3MxcWVEQiIgKTsKLQl9IGNhdGNoKCBTUUxFeGNlcHRpb24gc3FsZSApIHsKLQkgICAgc3FsZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0KKyAgICBDb25uZWN0b3JSdW50aW1lIHJ1bnRpbWUgPSBDb25uZWN0b3JSdW50aW1lLmdldFJ1bnRpbWUoKTsKIAotCXJldHVybiB0cnVlOworICAgIHRyeSB7CisgICAgICAgIGNvbiA9IHJ1bnRpbWUuZ2V0Q29ubmVjdGlvbiggImpkYmMvczFxZURCIiApOworICAgIH0gY2F0Y2goIFNRTEV4Y2VwdGlvbiBzcWxlICkgeworICAgICAgICBzcWxlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgLyogVXNlIHRoZSBnZXRDb25uZWN0aW9uIEFQSSBpbiB0aGUgQ29ubmVjdG9yUnVudGltZSAKKyAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKiBVc2UgdGhlIGdldENvbm5lY3Rpb24gQVBJIGluIHRoZSBDb25uZWN0b3JSdW50aW1lCiAgICAgICogVXNlIGEgUE1GIHJlc291cmNlCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS1SdW5uaW5nIHRlc3Q0LS0tLS0tLS0tLS0tLSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tUnVubmluZyB0ZXN0NC0tLS0tLS0tLS0tLS0iKTsKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwotCUNvbm5lY3RvclJ1bnRpbWUgcnVudGltZSA9IENvbm5lY3RvclJ1bnRpbWUuZ2V0UnVudGltZSgpOwotCQotCXRyeSB7Ci0JICAgIGNvbiA9IHJ1bnRpbWUuZ2V0Q29ubmVjdGlvbiggImpkby9zMXFlUE0iICk7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIHNxbGUgKSB7Ci0JICAgIHNxbGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgQ29ubmVjdG9yUnVudGltZSBydW50aW1lID0gQ29ubmVjdG9yUnVudGltZS5nZXRSdW50aW1lKCk7CiAKLQlyZXR1cm4gdHJ1ZTsKKyAgICB0cnkgeworICAgICAgICBjb24gPSBydW50aW1lLmdldENvbm5lY3Rpb24oICJqZG8vczFxZVBNIiApOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBzcWxlICkgeworICAgICAgICBzcWxlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgLyogVXNlIHRoZSBnZXRDb25uZWN0aW9uIEFQSSBpbiB0aGUgQ29ubmVjdG9yUnVudGltZSAKKyAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKiBVc2UgdGhlIGdldENvbm5lY3Rpb24gQVBJIGluIHRoZSBDb25uZWN0b3JSdW50aW1lCiAgICAgICogVXNlIGEgamRiYyByZXNvdXJjZSBqbmRpIG5hbWUKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0NSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLVJ1bm5pbmcgdGVzdDUtLS0tLS0tLS0tLS0tLS0iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLVJ1bm5pbmcgdGVzdDUtLS0tLS0tLS0tLS0tLS0iKTsKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwotCUNvbm5lY3RvclJ1bnRpbWUgcnVudGltZSA9IENvbm5lY3RvclJ1bnRpbWUuZ2V0UnVudGltZSgpOwotCQotCXRyeSB7Ci0JICAgIGNvbiA9IHJ1bnRpbWUuZ2V0Q29ubmVjdGlvbiggImpkYmMvczFxZURCIiwgInBicHVibGljIiwgInBicHVibGljIiApOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBzcWxlICkgewotCSAgICBzcWxlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7Ci0JfQorICAgIENvbm5lY3RvclJ1bnRpbWUgcnVudGltZSA9IENvbm5lY3RvclJ1bnRpbWUuZ2V0UnVudGltZSgpOwogCi0JcmV0dXJuIHRydWU7CisgICAgdHJ5IHsKKyAgICAgICAgY29uID0gcnVudGltZS5nZXRDb25uZWN0aW9uKCAiamRiYy9zMXFlREIiLCAicGJwdWJsaWMiLCAicGJwdWJsaWMiICk7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIHNxbGUgKSB7CisgICAgICAgIHNxbGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICAvKiBVc2UgdGhlIGdldENvbm5lY3Rpb24gQVBJIGluIHRoZSBDb25uZWN0b3JSdW50aW1lIAorICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8qIFVzZSB0aGUgZ2V0Q29ubmVjdGlvbiBBUEkgaW4gdGhlIENvbm5lY3RvclJ1bnRpbWUKICAgICAgKiBVc2UgYSBQTUYgcmVzb3VyY2UKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0NigpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLVJ1bm5pbmcgdGVzdDYtLS0tLS0tLS0tLS0tIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS1SdW5uaW5nIHRlc3Q2LS0tLS0tLS0tLS0tLSIpOwogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IG51bGw7Ci0JQ29ubmVjdG9yUnVudGltZSBydW50aW1lID0gQ29ubmVjdG9yUnVudGltZS5nZXRSdW50aW1lKCk7Ci0JCi0JdHJ5IHsKLQkgICAgY29uID0gcnVudGltZS5nZXRDb25uZWN0aW9uKCAiamRvL3MxcWVQTSIsICJwYnB1YmxpYyIsICJwYnB1YmxpYyIgKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gc3FsZSApIHsKLQkgICAgc3FsZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0KKyAgICBDb25uZWN0b3JSdW50aW1lIHJ1bnRpbWUgPSBDb25uZWN0b3JSdW50aW1lLmdldFJ1bnRpbWUoKTsKIAotCXJldHVybiB0cnVlOworICAgIHRyeSB7CisgICAgICAgIGNvbiA9IHJ1bnRpbWUuZ2V0Q29ubmVjdGlvbiggImpkby9zMXFlUE0iLCAicGJwdWJsaWMiLCAicGJwdWJsaWMiICk7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIHNxbGUgKSB7CisgICAgICAgIHNxbGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICAvKiBVc2UgdGhlIGdldENvbm5lY3Rpb24gQVBJIGluIHRoZSBDb25uZWN0b3JSdW50aW1lIAorICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8qIFVzZSB0aGUgZ2V0Q29ubmVjdGlvbiBBUEkgaW4gdGhlIENvbm5lY3RvclJ1bnRpbWUKICAgICAgKiBVc2UgYSBqZGJjIHJlc291cmNlIGpuZGkgbmFtZQogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3Q3KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tUnVubmluZyB0ZXN0Ny0tLS0tLS0tLS0tLS0tLSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tUnVubmluZyB0ZXN0Ny0tLS0tLS0tLS0tLS0tLSIpOwogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IG51bGw7Ci0JQ29ubmVjdG9yUnVudGltZSBydW50aW1lID0gQ29ubmVjdG9yUnVudGltZS5nZXRSdW50aW1lKCk7Ci0JCi0JdHJ5IHsKLQkgICAgY29uID0gcnVudGltZS5nZXRDb25uZWN0aW9uKCAiamRiYy9ub3RwcmVzZW50IiApOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBzcWxlICkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBleHBlY3RlZCBleGNlcHRpb24iKTsKLQkgICAgc3FsZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfQorICAgIENvbm5lY3RvclJ1bnRpbWUgcnVudGltZSA9IENvbm5lY3RvclJ1bnRpbWUuZ2V0UnVudGltZSgpOwogCi0JcmV0dXJuIGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIGNvbiA9IHJ1bnRpbWUuZ2V0Q29ubmVjdGlvbiggImpkYmMvbm90cHJlc2VudCIgKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gc3FsZSApIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgZXhwZWN0ZWQgZXhjZXB0aW9uIik7CisgICAgICAgIHNxbGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIC8qIFVzZSB0aGUgZ2V0Q29ubmVjdGlvbiBBUEkgaW4gdGhlIENvbm5lY3RvclJ1bnRpbWUgCisgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qIFVzZSB0aGUgZ2V0Q29ubmVjdGlvbiBBUEkgaW4gdGhlIENvbm5lY3RvclJ1bnRpbWUKICAgICAgKiBVc2UgYSBQTUYgcmVzb3VyY2UKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0OCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLVJ1bm5pbmcgdGVzdDgtLS0tLS0tLS0tLS0tIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS1SdW5uaW5nIHRlc3Q4LS0tLS0tLS0tLS0tLSIpOwogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IG51bGw7Ci0JQ29ubmVjdG9yUnVudGltZSBydW50aW1lID0gQ29ubmVjdG9yUnVudGltZS5nZXRSdW50aW1lKCk7Ci0JCi0JdHJ5IHsKLQkgICAgY29uID0gcnVudGltZS5nZXRDb25uZWN0aW9uKCAiamRvL25vdHByZXNlbnQiICk7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIHNxbGUgKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IGV4cGVjdGVkIGV4Y2VwdGlvbiIpOwotCSAgICBzcWxlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gdHJ1ZTsKLQl9CisgICAgQ29ubmVjdG9yUnVudGltZSBydW50aW1lID0gQ29ubmVjdG9yUnVudGltZS5nZXRSdW50aW1lKCk7CiAKLQlyZXR1cm4gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgY29uID0gcnVudGltZS5nZXRDb25uZWN0aW9uKCAiamRvL25vdHByZXNlbnQiICk7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIHNxbGUgKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IGV4cGVjdGVkIGV4Y2VwdGlvbiIpOworICAgICAgICBzcWxlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZTQ5MTRmNi4uZjI1NjA3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGUvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGUvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVteXNxbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVteXNxbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGYxMjRlZWIuLmI2ODQxYmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlbXlzcWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW15c3FsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcC1zaW1wbGVteXNxbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlbXlzcWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVteXNxbC9idWlsZC54bWwKaW5kZXggNWJkYWZhNi4uNGQyNGM4OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVteXNxbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVteXNxbC9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUyLDEzICs1MiwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovU2ltcGxlQk1QLmNsYXNzLCAqKi9TaW1wbGVCTVBIb21lLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLW15c3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfbXlzcWwuc3FsIi8+CkBAIC02NiwxNCArNjYsMTQgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtbXlzcWwtY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLW15c3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfbXlzcWwuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtbXlzcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfbXlzcWwuc3FsIi8+CkBAIC04MSw3ICs4MSw3IEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1teXNxbC1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlbXlzcWwvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVteXNxbC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKaW5kZXggYjJhMmExYS4uNmViMjU0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVteXNxbC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVteXNxbC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKQEAgLTI5LDM3ICsyOSwzNyBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCi0gCVNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotCVN0cmluZyB0ZXN0U3VpdGUgPSAiamRiY3NpbXBsZW15c3FsICI7CisgICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiamRiY3NpbXBsZW15c3FsICI7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQk1QSG9tZSIpOwotCVNpbXBsZUJNUEhvbWUgc2ltcGxlbXlzcWxCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCisgICAgU2ltcGxlQk1QSG9tZSBzaW1wbGVteXNxbEJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZUJNUEhvbWUuY2xhc3MpOwogCiAgICAgICAgIFNpbXBsZUJNUCBzaW1wbGVteXNxbEJNUCA9IHNpbXBsZW15c3FsQk1QSG9tZS5jcmVhdGUoKTsKIAogICAgICAgICBpZiAoIHNpbXBsZW15c3FsQk1QLnRlc3QxKDEwKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQlpZiAoIHNpbXBsZW15c3FsQk1QLnRlc3QyKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICBpZiAoIHNpbXBsZW15c3FsQk1QLnRlc3QyKCkgKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KIAotCWlmICggc2ltcGxlbXlzcWxCTVAudGVzdDMoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MyA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MyA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgIGlmICggc2ltcGxlbXlzcWxCTVAudGVzdDMoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MyA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MyA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCJqZGJjIHNpbXBsZW15c3FsIHN0YXR1czogIik7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKLSAgICAKLSAgICAgICAgCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJqZGJjIHNpbXBsZW15c3FsIHN0YXR1czogIik7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKKworCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVteXNxbC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVteXNxbC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDM2NjIzYTUuLmFmMTZjOGIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlbXlzcWwvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW15c3FsL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTU3LDYgKzU3LDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVteXNxbC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVteXNxbC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDI1NTZiZjcuLjEyNzBmYWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlbXlzcWwvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW15c3FsL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTMwLDEwMiArMzAsMTAyIEBACiAgICAgcHJvdGVjdGVkIERhdGFTb3VyY2UgZHM7CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgZW50aXR5Q29udGV4dCkgewotCUNvbnRleHQgY29udGV4dCA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7Ci0JfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKLQl9CisgICAgQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKKyAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOworICAgIH0KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbKipTaW1wbGVCTVBCZWFuKipdIERvbmUgd2l0aCBzZXRFbnRpdHlDb250ZXh0Li4uLiIpOwogICAgIH0KIAogICAgIHB1YmxpYyBJbnRlZ2VyIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewotCXJldHVybiBuZXcgSW50ZWdlcigxKTsKKyAgICByZXR1cm4gbmV3IEludGVnZXIoMSk7CiAgICAgfQogCiAgICAgLyogR2V0IDEwIGNvbm5lY3Rpb25zIGluIGEgYnVuY2ggYW5kIHRoZW4gY2xvc2UgdGhlbSovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoIGludCBudW1SdW5zICkgewotCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQlDb25uZWN0aW9uW10gY29ubnMgPSBuZXcgQ29ubmVjdGlvblsxMF07CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIENvbm5lY3Rpb25bXSBjb25ucyA9IG5ldyBDb25uZWN0aW9uWzEwXTsKICAgICAgICAgZm9yKCBpbnQgaSA9IDA7IGkgPCBudW1SdW5zOyBpKysgKSB7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBjb25uc1tpXSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgICAgIHBhc3NlZCA9IGZhbHNlOwotCSAgICB9IC8qZmluYWxseSB7Ci0JICAgICAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKLQkgICAgICAgICAgICB0cnkgewotCSAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7Ci0JICAgIAkgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgICAgIH0KLQkgICAgfSAqLworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29ubnNbaV0gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgfSAvKmZpbmFsbHkgeworICAgICAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOworICAgICAgICAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAqLwogICAgICAgICB9Ci0gICAgICAgIAotCWZvciAoaW50IGkgPSAwIDsgaSA8IG51bVJ1bnM7aSsrICkgewotCSAgICB0cnkgewotCSAgICAgICAgY29ubnNbaV0uY2xvc2UoKTsKLQkgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKLQkgICAgICAgIHBhc3NlZCA9IGZhbHNlOwotCSAgICB9Ci0JfQotCXJldHVybiBwYXNzZWQ7CisKKyAgICBmb3IgKGludCBpID0gMCA7IGkgPCBudW1SdW5zO2krKyApIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbm5zW2ldLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIC8qIEdldCBhIHNpbmdsZSBjb25uZWN0aW9uIGFuZCBjbG9zZSBpdCAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QyKCkgewogICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwogICAgICAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7Ci0JICAgICAgICAgICAgY29ubi5jbG9zZSgpOwotCSAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotICAgICAgICB9IAotICAgICAgICAKLQlyZXR1cm4gcGFzc2VkOworICAgIHRyeSB7CisgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICB9CisKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KLSAgIAorCiAgICAgLyogR2V0IGEgc2luZ2xlIGNvbm5lY3Rpb24gYW5kIGRvIHNvbWUgREIgb3BlcmF0aW9ucyAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QzKCkgewogICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCVN0YXRlbWVudCBzdG10ID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMgPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10ID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMgPSBudWxsOwogCiAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQl0cnkgewotCSAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJJTlNFUlQgSU5UTyBPX0NVU1RPTUVSIFZBTFVFUyAoMCwnYWJjZCcpIik7Ci0JICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiSU5TRVJUIElOVE8gT19DVVNUT01FUiBWQUxVRVMgKDEsJ3BxcnMnKSIpOworICAgIHRyeSB7CisgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIklOU0VSVCBJTlRPIE9fQ1VTVE9NRVIgVkFMVUVTICgwLCdhYmNkJykiKTsKKyAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJJTlNFUlQgSU5UTyBPX0NVU1RPTUVSIFZBTFVFUyAoMSwncHFycycpIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluc2VydGVkIHZhbHVlcyBPSyIpOwotCSAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIE9fQ1VTVE9NRVIiKTsKLQkgICAgd2hpbGUoIHJzLm5leHQoKSApIHsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihycy5nZXRJbnQoImNfaWQiKSk7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocnMuZ2V0U3RyaW5nKCJjX3Bob25lIikpOwotCSAgICB9Ci0JICAgIAotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChycyAhPSBudWxsKSB7Ci0JICAgICAgICB0cnkgeyBycy5jbG9zZSgpOyB9Y2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KLQkgICAgfQotCSAgICBpZiAoc3RtdCAhPSBudWxsKSB7Ci0JICAgICAgICB0cnkgeyBzdG10LmNsb3NlKCk7IH1jYXRjaChFeGNlcHRpb24gZTEpIHt9Ci0JICAgIH0KLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBjb25uLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLSAgICAgICAgfSAKLSAgICAgICAgCi0JcmV0dXJuIHBhc3NlZDsKKyAgICAgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBPX0NVU1RPTUVSIik7CisgICAgICAgIHdoaWxlKCBycy5uZXh0KCkgKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocnMuZ2V0SW50KCJjX2lkIikpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJzLmdldFN0cmluZygiY19waG9uZSIpKTsKKyAgICAgICAgfQorCisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKHJzICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IHJzLmNsb3NlKCk7IH1jYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgICAgIGlmIChzdG10ICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IHN0bXQuY2xvc2UoKTsgfWNhdGNoKEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4uY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgICAgIH0KKworICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW15c3FsL3NxbC9jcmVhdGVfbXlzcWwuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVteXNxbC9zcWwvY3JlYXRlX215c3FsLnNxbAppbmRleCBkZDMxNTk5Li5mMTNmZjhiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW15c3FsL3NxbC9jcmVhdGVfbXlzcWwuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlbXlzcWwvc3FsL2NyZWF0ZV9teXNxbC5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ1VTVE9NRVI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ1VTVE9NRVIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ1VTVE9NRVI7CisKK0NSRUFURSBUQUJMRSBPX0NVU1RPTUVSICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlbXlzcWwvc3FsL2Ryb3BfbXlzcWwuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVteXNxbC9zcWwvZHJvcF9teXNxbC5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVteXNxbC9zcWwvZHJvcF9teXNxbC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVteXNxbC9zcWwvZHJvcF9teXNxbC5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmEvYnVpbGQucHJvcGVydGllcwppbmRleCA4Y2RkNWFjLi41MGFjNTAwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcC1zaW1wbGVvcmEiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYS9idWlsZC54bWwKaW5kZXggYjMwMmRjZi4uZWNkZmRhYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTIsMTMgKzUyLDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9TaW1wbGVCTVAuY2xhc3MsICoqL1NpbXBsZUJNUEhvbWUuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamRiYy1vcmFjbGUtY29tbW9uIi8+CiAKQEAgLTcxLDE0ICs3MSwxNCBAQAogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLW9yYWNsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtb3JhY2xlLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmEvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmEvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCmluZGV4IDFkNTRlY2YuLjczMDkwNjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYS9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKQEAgLTI5LDM5ICsyOSwzOSBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCi0gCVNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotCVN0cmluZyB0ZXN0U3VpdGUgPSAiamRiY3NpbXBsZW9yYSAiOworICAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKKyAgICBTdHJpbmcgdGVzdFN1aXRlID0gImpkYmNzaW1wbGVvcmEgIjsKIAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVCTVBIb21lIik7Ci0JU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCisgICAgU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCiAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKIAogICAgICAgICBTaW1wbGVCTVAgc2ltcGxlQk1QID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoKTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJTaW1wbGUgT3JhY2xlIHRlc3QgIik7CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiU2ltcGxlIE9yYWNsZSB0ZXN0ICIpOwogCi0JCisKICAgICAgICAgaWYgKCBzaW1wbGVCTVAudGVzdDEoMTApICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5GQUlMKTsKLQl9Ci0gICAgICAKLQlpZiAoIHNpbXBsZUJNUC50ZXN0MigpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5GQUlMKTsKLQl9CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KIAotCWlmICggc2ltcGxlQk1QLnRlc3QzKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDMgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDMgOiAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MigpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oImpkYmMgc2ltcGxlb3JhIHN0YXR1czogIik7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKLSAgICAKLSAgICAgICAgCisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDMoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MyA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MyA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQorCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJqZGJjIHNpbXBsZW9yYSBzdGF0dXM6ICIpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CisKKwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDIwZDcxNmUuLjVhYzlhNGIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmEvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNjMsNiArNjMsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDZmNGE0MDQuLmYzYTQzNzUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgICA8am5kaS1uYW1lPmNvbS5zdW4uczFhc2Rldi5qZGJjLnNpbXBsZW9yYS5lamIuU2ltcGxlQk1QSG9tZTwvam5kaS1uYW1lPgogICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5qZGJjL29yYWNsZXJlczwvam5kaS1uYW1lPgorICAgIDxqbmRpLW5hbWU+amRiYy9vcmFjbGVyZXM8L2puZGktbmFtZT4KICAgICAgICAgPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgogICAgICAgICAgICAgPG5hbWU+c2NvdHQ8L25hbWU+CiAgICAgICAgICAgICA8cGFzc3dvcmQ+dGlnZXI8L3Bhc3N3b3JkPgpAQCAtMzUsNyArMzUsNyBAQAogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPkRhdGFTb3VyY2UxPC9yZXMtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5qZGJjL29yYWNsZXJlczwvam5kaS1uYW1lPgorICAgIDxqbmRpLW5hbWU+amRiYy9vcmFjbGVyZXM8L2puZGktbmFtZT4KICAgICAgICAgPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgogICAgICAgICAgICAgPG5hbWU+c2NvdHQ8L25hbWU+CiAgICAgICAgICAgICA8cGFzc3dvcmQ+dGlnZXI8L3Bhc3N3b3JkPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmEvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggZmQyZGQ0NC4uN2Q0ZjE2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmEvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC0zMSwxMjEgKzMxLDEyMSBAQAogICAgIHByb3RlY3RlZCBEYXRhU291cmNlIGRzMTsKIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBlbnRpdHlDb250ZXh0KSB7Ci0JQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKLQl0cnkgewotCSAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQkgICAgZHMxID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UxIik7Ci0JfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKLQl9CisgICAgQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKKyAgICAgICAgZHMxID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UxIik7CisgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIEludGVnZXIgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7Ci0JcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOworICAgIHJldHVybiBuZXcgSW50ZWdlcigxKTsKICAgICB9CiAKICAgICAvKiBHZXQgMTAgY29ubmVjdGlvbnMgaW4gYSBidW5jaCBhbmQgdGhlbiBjbG9zZSB0aGVtKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSggaW50IG51bVJ1bnMgKSB7Ci0JYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCUNvbm5lY3Rpb25bXSBjb25ucyA9IG5ldyBDb25uZWN0aW9uWzEwXTsKKyAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CisgICAgQ29ubmVjdGlvbltdIGNvbm5zID0gbmV3IENvbm5lY3Rpb25bMTBdOwogICAgICAgICBmb3IoIGludCBpID0gMDsgaSA8IG51bVJ1bnM7IGkrKyApIHsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGNvbm5zW2ldID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICAgICAgcGFzc2VkID0gZmFsc2U7Ci0JICAgIH0gCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb25uc1tpXSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAotCWZvciAoaW50IGkgPSAwIDsgaSA8IG51bVJ1bnM7aSsrICkgewotCSAgICB0cnkgewotCSAgICAgICAgY29ubnNbaV0uY2xvc2UoKTsKLQkgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKLQkgICAgICAgIHBhc3NlZCA9IGZhbHNlOwotCSAgICB9Ci0JfQotCXJldHVybiBwYXNzZWQ7CisgICAgICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IG51bVJ1bnM7aSsrICkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29ubnNbaV0uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgLyogR2V0IGEgc2luZ2xlIGNvbm5lY3Rpb24gYW5kIGNsb3NlIGl0ICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDIoKSB7CiAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQgPSBudWxsOwotCVJlc3VsdFNldCBycyA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQgPSBudWxsOworICAgIFJlc3VsdFNldCBycyA9IG51bGw7CiAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQl0cnkgewotCSAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBjb25uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCBjb25uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkgKTsKLQkgICAgc3RtdCA9IGNvbm4uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkoICJTRUxFQ1QgKiBGUk9NIE9fQ1VTVE9NRVIiKTsKLQkgICAgd2hpbGUoIHJzLm5leHQoKSApIHsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihycy5nZXRTdHJpbmcoMSkpOwotCSAgICB9Ci0JICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiSU5TRVJUIElOVE8gT19DVVNUT01FUiB2YWx1ZXMgKDEwMCwgJ25ldyBwaG9uZScpIik7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgY29ubi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbiggY29ubi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpICk7CisgICAgICAgIHN0bXQgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCAiU0VMRUNUICogRlJPTSBPX0NVU1RPTUVSIik7CisgICAgICAgIHdoaWxlKCBycy5uZXh0KCkgKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocnMuZ2V0U3RyaW5nKDEpKTsKKyAgICAgICAgfQorICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIklOU0VSVCBJTlRPIE9fQ1VTVE9NRVIgdmFsdWVzICgxMDAsICduZXcgcGhvbmUnKSIpOwogICAgICAgICAgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSggIlNFTEVDVCAqIEZST00gT19DVVNUT01FUiIpOwotCSAgICB3aGlsZSggcnMubmV4dCgpICkgewotCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJzLmdldFN0cmluZygxKSk7Ci0JICAgIH0KKyAgICAgICAgd2hpbGUoIHJzLm5leHQoKSApIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihycy5nZXRTdHJpbmcoMSkpOworICAgICAgICB9CiAgICAgICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIkRFTEVURSBGUk9NIE9fQ1VTVE9NRVIgV0hFUkUgY19pZD0xMDAiKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAocnMgIT0gbnVsbCApIHsgCi0JICAgICAgICB0cnkgeyBycy5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9CQotCSAgICBpZiAoc3RtdCAhPSBudWxsICkgeyAKLQkgICAgICAgIHRyeSB7IHN0bXQuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQkKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQkgICAgCi0gICAgICAgIH0gCi0gICAgICAgIAotCXJldHVybiBwYXNzZWQ7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKHJzICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBycy5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgICAgIGlmIChzdG10ICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10LmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorCisgICAgICAgIH0KKworICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgLyoqIEFwcGxpY2F0aW9uIGF1dGggKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MygpIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdCA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdCA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzID0gbnVsbDsKIAogICAgICAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JdHJ5IHsKLQkgICAgY29ubiA9IGRzMS5nZXRDb25uZWN0aW9uKCJzY290dCIsICJ0aWdlciIpOwotCSAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJJTlNFUlQgSU5UTyBPX0NVU1RPTUVSIHZhbHVlcyAoMTAwLCAnbmV3IHBob25lJykiKTsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMxLmdldENvbm5lY3Rpb24oInNjb3R0IiwgInRpZ2VyIik7CisgICAgICAgIHN0bXQgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIklOU0VSVCBJTlRPIE9fQ1VTVE9NRVIgdmFsdWVzICgxMDAsICduZXcgcGhvbmUnKSIpOwogICAgICAgICAgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSggIlNFTEVDVCAqIEZST00gT19DVVNUT01FUiIpOwotCSAgICB3aGlsZSggcnMubmV4dCgpICkgewotCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJzLmdldFN0cmluZygxKSk7Ci0JICAgIH0KKyAgICAgICAgd2hpbGUoIHJzLm5leHQoKSApIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihycy5nZXRTdHJpbmcoMSkpOworICAgICAgICB9CiAgICAgICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIkRFTEVURSBGUk9NIE9fQ1VTVE9NRVIgV0hFUkUgY19pZD0xMDAiKTsKICAgICAgICAgICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkoICJTRUxFQ1QgKiBGUk9NIE9fQ1VTVE9NRVIiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCBycyApOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChycyAhPSBudWxsICkgeyAKLQkgICAgICAgIHRyeSB7IHJzLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0JCi0JICAgIGlmIChzdG10ICE9IG51bGwgKSB7IAotCSAgICAgICAgdHJ5IHsgc3RtdC5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9CQotCSAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7Ci0JICAgICAgICAgICAgY29ubi5jbG9zZSgpOwotCSAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotICAgICAgICB9IAotICAgICAgICAKLQlyZXR1cm4gcGFzc2VkOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIHJzICk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKHJzICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBycy5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgICAgIGlmIChzdG10ICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10LmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICB9CisKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KLSAgCisKIAogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7fQogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBkZDMxNTk5Li5mMTNmZjhiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0NVU1RPTUVSOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0NVU1RPTUVSICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0NVU1RPTUVSOworCitDUkVBVEUgVEFCTEUgT19DVVNUT01FUiAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA3MGQxZmNjLi5kODU0Yjk1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYWRkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYWRkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGNkZDVhYy4uNTBhYzUwMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmFkZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLXNpbXBsZW9yYSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmFkZC9idWlsZC54bWwKaW5kZXggYjMwMmRjZi4uZWNkZmRhYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmFkZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmFkZC9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUyLDEzICs1MiwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovU2ltcGxlQk1QLmNsYXNzLCAqKi9TaW1wbGVCTVBIb21lLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtb3JhY2xlLWNvbW1vbiIvPgogCkBAIC03MSwxNCArNzEsMTQgQEAKICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1vcmFjbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLW9yYWNsZS1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmFkZC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKaW5kZXggOTNhNTAzZi4uODVhMjQ0MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmFkZC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmFkZC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKQEAgLTI5LDM5ICsyOSwzOSBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCi0gCVNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotCVN0cmluZyB0ZXN0U3VpdGUgPSAiamRiY3NpbXBsZW9yYSAiOworICAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKKyAgICBTdHJpbmcgdGVzdFN1aXRlID0gImpkYmNzaW1wbGVvcmEgIjsKIAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVCTVBIb21lIik7Ci0JU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCisgICAgU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCiAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKIAogICAgICAgICBTaW1wbGVCTVAgc2ltcGxlQk1QID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoKTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJTaW1wbGUgT3JhY2xlREQgdGVzdCAiKTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJTaW1wbGUgT3JhY2xlREQgdGVzdCAiKTsKIAotCQorCiAgICAgICAgIGlmICggc2ltcGxlQk1QLnRlc3QxKDEwKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7Ci0JfQotICAgICAgIAotCWlmICggc2ltcGxlQk1QLnRlc3QyKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQogCi0JaWYgKCBzaW1wbGVCTVAudGVzdDMoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MyA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MyA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgIGlmICggc2ltcGxlQk1QLnRlc3QyKCkgKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KIAotCVN5c3RlbS5vdXQucHJpbnRsbigiamRiYyBzaW1wbGVvcmEgc3RhdHVzOiAiKTsKLQlzdGF0LnByaW50U3VtbWFyeSgpOwotICAgIAotICAgICAgICAKKyAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MygpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QzIDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QzIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CisKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImpkYmMgc2ltcGxlb3JhIHN0YXR1czogIik7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKKworCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmFkZC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmFkZC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDIwZDcxNmUuLjVhYzlhNGIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYWRkL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTYzLDYgKzYzLDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmFkZC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggNmY0YTQwNC4uZjNhNDM3NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmFkZC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYWRkL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgICA8am5kaS1uYW1lPmNvbS5zdW4uczFhc2Rldi5qZGJjLnNpbXBsZW9yYS5lamIuU2ltcGxlQk1QSG9tZTwvam5kaS1uYW1lPgogICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5qZGJjL29yYWNsZXJlczwvam5kaS1uYW1lPgorICAgIDxqbmRpLW5hbWU+amRiYy9vcmFjbGVyZXM8L2puZGktbmFtZT4KICAgICAgICAgPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgogICAgICAgICAgICAgPG5hbWU+c2NvdHQ8L25hbWU+CiAgICAgICAgICAgICA8cGFzc3dvcmQ+dGlnZXI8L3Bhc3N3b3JkPgpAQCAtMzUsNyArMzUsNyBAQAogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPkRhdGFTb3VyY2UxPC9yZXMtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5qZGJjL29yYWNsZXJlczwvam5kaS1uYW1lPgorICAgIDxqbmRpLW5hbWU+amRiYy9vcmFjbGVyZXM8L2puZGktbmFtZT4KICAgICAgICAgPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgogICAgICAgICAgICAgPG5hbWU+c2NvdHQ8L25hbWU+CiAgICAgICAgICAgICA8cGFzc3dvcmQ+dGlnZXI8L3Bhc3N3b3JkPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmFkZC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmFkZC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IGYyMGNjMGYuLmYyZTZkNTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYWRkL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTMxLDEyMCArMzEsMTIwIEBACiAgICAgcHJvdGVjdGVkIERhdGFTb3VyY2UgZHMxOwogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGVudGl0eUNvbnRleHQpIHsKLQlDb250ZXh0IGNvbnRleHQgPSBudWxsOwotCXRyeSB7Ci0JICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCSAgICBkczEgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTEiKTsKLQl9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOwotCX0KKyAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOworICAgICAgICBkczEgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTEiKTsKKyAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgSW50ZWdlciBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKLQlyZXR1cm4gbmV3IEludGVnZXIoMSk7CisgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOwogICAgIH0KIAogICAgIC8qIEdldCAxMCBjb25uZWN0aW9ucyBpbiBhIGJ1bmNoIGFuZCB0aGVuIGNsb3NlIHRoZW0qLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCBpbnQgbnVtUnVucyApIHsKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JQ29ubmVjdGlvbltdIGNvbm5zID0gbmV3IENvbm5lY3Rpb25bMTBdOworICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICBDb25uZWN0aW9uW10gY29ubnMgPSBuZXcgQ29ubmVjdGlvblsxMF07CiAgICAgICAgIGZvciggaW50IGkgPSAwOyBpIDwgbnVtUnVuczsgaSsrICkgewotCSAgICB0cnkgewotCSAgICAgICAgY29ubnNbaV0gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgICAgICBwYXNzZWQgPSBmYWxzZTsKLQkgICAgfSAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbm5zW2ldID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCi0JZm9yIChpbnQgaSA9IDAgOyBpIDwgbnVtUnVucztpKysgKSB7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBjb25uc1tpXS5jbG9zZSgpOwotCSAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgewotCSAgICAgICAgcGFzc2VkID0gZmFsc2U7Ci0JICAgIH0KLQl9Ci0JcmV0dXJuIHBhc3NlZDsKKyAgICAgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgbnVtUnVucztpKysgKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb25uc1tpXS5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKICAgICAvKiBHZXQgYSBzaW5nbGUgY29ubmVjdGlvbiBhbmQgY2xvc2UgaXQgKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MigpIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdCA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdCA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzID0gbnVsbDsKICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCXRyeSB7Ci0JICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIHN0bXQgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCAiU0VMRUNUICogRlJPTSBPX0NVU1RPTUVSIik7Ci0JICAgIHdoaWxlKCBycy5uZXh0KCkgKSB7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocnMuZ2V0U3RyaW5nKDEpKTsKLQkgICAgfQotCSAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIklOU0VSVCBJTlRPIE9fQ1VTVE9NRVIgdmFsdWVzICgxMDAsICduZXcgcGhvbmUnKSIpOworICAgIHRyeSB7CisgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCAiU0VMRUNUICogRlJPTSBPX0NVU1RPTUVSIik7CisgICAgICAgIHdoaWxlKCBycy5uZXh0KCkgKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocnMuZ2V0U3RyaW5nKDEpKTsKKyAgICAgICAgfQorICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIklOU0VSVCBJTlRPIE9fQ1VTVE9NRVIgdmFsdWVzICgxMDAsICduZXcgcGhvbmUnKSIpOwogICAgICAgICAgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSggIlNFTEVDVCAqIEZST00gT19DVVNUT01FUiIpOwotCSAgICB3aGlsZSggcnMubmV4dCgpICkgewotCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJzLmdldFN0cmluZygxKSk7Ci0JICAgIH0KKyAgICAgICAgd2hpbGUoIHJzLm5leHQoKSApIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihycy5nZXRTdHJpbmcoMSkpOworICAgICAgICB9CiAgICAgICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIkRFTEVURSBGUk9NIE9fQ1VTVE9NRVIgV0hFUkUgY19pZD0xMDAiKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAocnMgIT0gbnVsbCApIHsgCi0JICAgICAgICB0cnkgeyBycy5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9CQotCSAgICBpZiAoc3RtdCAhPSBudWxsICkgeyAKLQkgICAgICAgIHRyeSB7IHN0bXQuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQkKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQkgICAgCi0gICAgICAgIH0gCi0gICAgICAgIAotCXJldHVybiBwYXNzZWQ7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKHJzICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBycy5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgICAgIGlmIChzdG10ICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10LmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorCisgICAgICAgIH0KKworICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgLyoqIEFwcGxpY2F0aW9uIGF1dGggKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MygpIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdCA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdCA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzID0gbnVsbDsKIAogICAgICAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JdHJ5IHsKLQkgICAgY29ubiA9IGRzMS5nZXRDb25uZWN0aW9uKCJzY290dCIsICJ0aWdlciIpOwotCSAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJJTlNFUlQgSU5UTyBPX0NVU1RPTUVSIHZhbHVlcyAoMTAwLCAnbmV3IHBob25lJykiKTsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMxLmdldENvbm5lY3Rpb24oInNjb3R0IiwgInRpZ2VyIik7CisgICAgICAgIHN0bXQgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIklOU0VSVCBJTlRPIE9fQ1VTVE9NRVIgdmFsdWVzICgxMDAsICduZXcgcGhvbmUnKSIpOwogICAgICAgICAgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSggIlNFTEVDVCAqIEZST00gT19DVVNUT01FUiIpOwotCSAgICB3aGlsZSggcnMubmV4dCgpICkgewotCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJzLmdldFN0cmluZygxKSk7Ci0JICAgIH0KKyAgICAgICAgd2hpbGUoIHJzLm5leHQoKSApIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihycy5nZXRTdHJpbmcoMSkpOworICAgICAgICB9CiAgICAgICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIkRFTEVURSBGUk9NIE9fQ1VTVE9NRVIgV0hFUkUgY19pZD0xMDAiKTsKICAgICAgICAgICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkoICJTRUxFQ1QgKiBGUk9NIE9fQ1VTVE9NRVIiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCBycyApOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChycyAhPSBudWxsICkgeyAKLQkgICAgICAgIHRyeSB7IHJzLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0JCi0JICAgIGlmIChzdG10ICE9IG51bGwgKSB7IAotCSAgICAgICAgdHJ5IHsgc3RtdC5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9CQotCSAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7Ci0JICAgICAgICAgICAgY29ubi5jbG9zZSgpOwotCSAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotICAgICAgICB9IAotICAgICAgICAKLQlyZXR1cm4gcGFzc2VkOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIHJzICk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKHJzICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBycy5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgICAgIGlmIChzdG10ICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10LmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICB9CisKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KLSAgCisKIAogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7fQogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmFkZC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZGQzMTU5OS4uZjEzZmY4YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmFkZC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmFkZC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ1VTVE9NRVI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ1VTVE9NRVIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ1VTVE9NRVI7CisKK0NSRUFURSBUQUJMRSBPX0NVU1RPTUVSICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA3MGQxZmNjLi5kODU0Yjk1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYWRkL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmFkZC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zcWx0cmFjZW1vbml0b3JpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3FsdHJhY2Vtb25pdG9yaW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDVhMjljYS4uMzdlM2NhNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zcWx0cmFjZW1vbml0b3JpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NxbHRyYWNlbW9uaXRvcmluZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtc3RhdGVtZW50d3JhcHBlciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3FsdHJhY2Vtb25pdG9yaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3FsdHJhY2Vtb25pdG9yaW5nL2J1aWxkLnhtbAppbmRleCAyNmUzMWE3Li44ZTI2NTg5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NxbHRyYWNlbW9uaXRvcmluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zcWx0cmFjZW1vbml0b3JpbmcvYnVpbGQueG1sCkBAIC00Miw3ICs0Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01NCwxMyArNTQsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1NpbXBsZUJNUC5jbGFzcywgKiovU2ltcGxlQk1QSG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KQEAgLTg5LDkgKzg5LDkgQEAKICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ic2VydmVyLm1vbml0b3Jpbmctc2VydmljZS5tb2R1bGUtbW9uaXRvcmluZy1sZXZlbHMuamRiYy1jb25uZWN0aW9uLXBvb2w9T0ZGIi8+CkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjIiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgpAQCAtMTIxLDcgKzEyMSw3IEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3FsdHJhY2Vtb25pdG9yaW5nL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3FsdHJhY2Vtb25pdG9yaW5nL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQppbmRleCBiN2JiOWNhLi45MTBkNmIyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NxbHRyYWNlbW9uaXRvcmluZy9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zcWx0cmFjZW1vbml0b3JpbmcvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCkBAIC0zMywyMiArMzMsMjIgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBPYmplY3QgbG9jayA9IG5ldyBPYmplY3QoKTsKLSAgICBwdWJsaWMgc3RhdGljIGludCBOT19PRl9USFJFQURTID0gNTsgCisgICAgcHVibGljIHN0YXRpYyBpbnQgTk9fT0ZfVEhSRUFEUyA9IDU7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSk1YX1BPUlQgPSA4Njg2OwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhPU1RfTkFNRSA9ICJsb2NhbGhvc3QiOwogICAgIHB1YmxpYyBsb25nIHN1bVRvdGFsID0gMDsKICAgICBwdWJsaWMgYm9vbGVhbiBzdWNjZXNzRXhlY3V0aW5nID0gdHJ1ZTsKIAogICAgIHB1YmxpYyBTaW1wbGVCTVBDbGllbnQoaW50IG9wdGlvbil7Ci0JaWYob3B0aW9uID09IDEpIHsKKyAgICBpZihvcHRpb24gPT0gMSkgewogICAgICAgICAgICAgZXhlY3V0ZSgpOwotCX0gZWxzZSBpZihvcHRpb24gPT0gMikgewotCSAgICB0cnkgewotCSAgICAgICAgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woInFsLWpkYmMtcG9vbCIsICJmcmVxdXNlZHNxbHF1ZXJpZXMiKTsKLQkgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICB9IGVsc2UgaWYob3B0aW9uID09IDIpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCJxbC1qZGJjLXBvb2wiLCAiZnJlcXVzZWRzcWxxdWVyaWVzIik7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0KLQl9CisgICAgICAgIH0KKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGV4ZWN1dGUoKSB7CkBAIC02NSw0MCArNjUsNDAgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmKHN1Y2Nlc3NFeGVjdXRpbmcpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIlNRTCBUcmFjZSBtb25pdG9yaW5nIFRlc3QxICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIlNRTCBUcmFjZSBtb25pdG9yaW5nIFRlc3QxICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBzdGF0LmFkZFN0YXR1cygiU1FMIFRyYWNlIG1vbml0b3JpbmcgVGVzdDEgIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygiU1FMIFRyYWNlIG1vbml0b3JpbmcgVGVzdDEgIiwgc3RhdC5GQUlMKTsKKyAgICB9CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJTUUwgVHJhY2luZyB0ZXN0cyIpOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlNRTCBUcmFjaW5nIHRlc3RzIik7CiAgICAgICAgIGlmIChhcmdzICE9IG51bGwgJiYgYXJncy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICBTdHJpbmcgcGFyYW0gPSBhcmdzWzBdOwogCiAgICAgICAgICAgICBzd2l0Y2ggKEludGVnZXIucGFyc2VJbnQocGFyYW0pKSB7CiAgICAgICAgICAgICAgICAgY2FzZSAxOiB7Ly9ydW4gdGhlIHRocmVhZHMKLQkJICAgIG5ldyBTaW1wbGVCTVBDbGllbnQoMSk7Ci0JCSAgICBicmVhazsKLQkJfQotCQljYXNlIDI6IHsgLy9jb21wYXJlIG1vbml0b3Jpbmcgc3RhdHMKKyAgICAgICAgICAgIG5ldyBTaW1wbGVCTVBDbGllbnQoMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIDI6IHsgLy9jb21wYXJlIG1vbml0b3Jpbmcgc3RhdHMKICAgICAgICAgICAgICAgICAgICAgbmV3IFNpbXBsZUJNUENsaWVudCgyKTsKLQkJICAgIGJyZWFrOwotCQl9Ci0JICAgIH0KLQl9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgfQogICAgIH0KIAogICAgIGNsYXNzIFdvcmtlclRocmVhZCBleHRlbmRzIFRocmVhZHsKIAotCXByaXZhdGUgaW50IHRpbWVzVG9FeGVjdXRlUXVlcnkgPSAwOworICAgIHByaXZhdGUgaW50IHRpbWVzVG9FeGVjdXRlUXVlcnkgPSAwOwogCiAgICAgICAgIHB1YmxpYyBXb3JrZXJUaHJlYWQoaW50IG5vRXhlY3MsIFN0cmluZyBuYW1lKXsKLQkgICAgc3VwZXIobmFtZSk7Ci0JICAgIHRpbWVzVG9FeGVjdXRlUXVlcnkgPSBub0V4ZWNzOworICAgICAgICBzdXBlcihuYW1lKTsKKyAgICAgICAgdGltZXNUb0V4ZWN1dGVRdWVyeSA9IG5vRXhlY3M7CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CkBAIC0xMDksNjIgKzEwOSw2MiBAQAogICAgICAgICAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKIAogICAgICAgICAgICAgICAgIFNpbXBsZUJNUCBzaW1wbGVCTVAgPSBzaW1wbGVCTVBIb21lLmNyZWF0ZSgpOwotCQlTdHJpbmcgdGFibGVOYW1lID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCk7Ci0JCVN0cmluZyB0YWJsZVZhbHVlID0gImlpb3AiOwotCQlmb3IoaW50IGk9MDsgaTx0aW1lc1RvRXhlY3V0ZVF1ZXJ5OyBpKyspIHsKKyAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpOworICAgICAgICBTdHJpbmcgdGFibGVWYWx1ZSA9ICJpaW9wIjsKKyAgICAgICAgZm9yKGludCBpPTA7IGk8dGltZXNUb0V4ZWN1dGVRdWVyeTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIHNpbXBsZUJNUC5wcmVwYXJlZFN0YXRlbWVudFRlc3QxKHRhYmxlTmFtZSwgdGFibGVWYWx1ZSk7Ci0JCX0KKyAgICAgICAgfQogICAgICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRocmVhZCA6ICIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldE5hbWUoKSArICJkaWQgbm90IHJ1biAiKTsKICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCQlTaW1wbGVCTVBDbGllbnQudGhpcy5zdWNjZXNzRXhlY3V0aW5nID0gZmFsc2U7CisgICAgICAgIFNpbXBsZUJNUENsaWVudC50aGlzLnN1Y2Nlc3NFeGVjdXRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKFN0cmluZyBwb29sTmFtZSwgU3RyaW5nIG1vbml0b3JpbmdTdGF0KSB0aHJvd3MgRXhjZXB0aW9uIHsKIAotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JZmluYWwgU3RyaW5nIHVybFN0ciA9ICJzZXJ2aWNlOmpteDpybWk6Ly8vam5kaS9ybWk6Ly8iICsgSE9TVF9OQU1FICsgIjoiICsgSk1YX1BPUlQgKyAiL2pteHJtaSI7ICAgIAorICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgZmluYWwgU3RyaW5nIHVybFN0ciA9ICJzZXJ2aWNlOmpteDpybWk6Ly8vam5kaS9ybWk6Ly8iICsgSE9TVF9OQU1FICsgIjoiICsgSk1YX1BPUlQgKyAiL2pteHJtaSI7CiAgICAgICAgIGZpbmFsIEpNWFNlcnZpY2VVUkwgdXJsID0gbmV3IEpNWFNlcnZpY2VVUkwodXJsU3RyKTsKIAotCWZpbmFsIEpNWENvbm5lY3RvciBqbXhDb25uID0gSk1YQ29ubmVjdG9yRmFjdG9yeS5jb25uZWN0KHVybCk7Ci0JZmluYWwgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBqbXhDb25uLmdldE1CZWFuU2VydmVyQ29ubmVjdGlvbigpOworICAgIGZpbmFsIEpNWENvbm5lY3RvciBqbXhDb25uID0gSk1YQ29ubmVjdG9yRmFjdG9yeS5jb25uZWN0KHVybCk7CisgICAgZmluYWwgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBqbXhDb25uLmdldE1CZWFuU2VydmVyQ29ubmVjdGlvbigpOwogCiAgICAgICAgIE9iamVjdE5hbWUgb2JqZWN0TmFtZSA9CiAgICAgICAgICAgICAgICAgbmV3IE9iamVjdE5hbWUoImFteDpwcD0vbW9uL3NlcnZlci1tb25bc2VydmVyXSx0eXBlPWpkYmNyYS1tb24sbmFtZT1yZXNvdXJjZXMvIiArIHBvb2xOYW1lKTsKIAotCWphdmF4Lm1hbmFnZW1lbnQub3Blbm1iZWFuLkNvbXBvc2l0ZURhdGFTdXBwb3J0IHJldHVyblZhbHVlID0gCi0JCShqYXZheC5tYW5hZ2VtZW50Lm9wZW5tYmVhbi5Db21wb3NpdGVEYXRhU3VwcG9ydCkgCi0JCWNvbm5lY3Rpb24uZ2V0QXR0cmlidXRlKG9iamVjdE5hbWUsIG1vbml0b3JpbmdTdGF0KTsKKyAgICBqYXZheC5tYW5hZ2VtZW50Lm9wZW5tYmVhbi5Db21wb3NpdGVEYXRhU3VwcG9ydCByZXR1cm5WYWx1ZSA9CisgICAgICAgIChqYXZheC5tYW5hZ2VtZW50Lm9wZW5tYmVhbi5Db21wb3NpdGVEYXRhU3VwcG9ydCkKKyAgICAgICAgY29ubmVjdGlvbi5nZXRBdHRyaWJ1dGUob2JqZWN0TmFtZSwgbW9uaXRvcmluZ1N0YXQpOwogCi0JU3RyaW5nIGZyZXFVc2VkUXVlcmllcyA9IChTdHJpbmcpIHJldHVyblZhbHVlLmdldCgiY3VycmVudCIpOwotCVN0cmluZyBkZWxpbWl0ZXIgPSAiJSUlRU9MJSUlIjsKLQlTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGZyZXFVc2VkUXVlcmllcywgZGVsaW1pdGVyKTsKKyAgICBTdHJpbmcgZnJlcVVzZWRRdWVyaWVzID0gKFN0cmluZykgcmV0dXJuVmFsdWUuZ2V0KCJjdXJyZW50Iik7CisgICAgU3RyaW5nIGRlbGltaXRlciA9ICIlJSVFT0wlJSUiOworICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoZnJlcVVzZWRRdWVyaWVzLCBkZWxpbWl0ZXIpOwogCi0JTGlzdDxTdHJpbmc+IHF1ZXJ5TGlzdCA9IG5ldyBMaW5rZWRMaXN0PFN0cmluZz4oKTsKLQlMaXN0PFN0cmluZz4gZXhwZWN0ZWRRdWVyeUxpc3QgPSBuZXcgTGlua2VkTGlzdDxTdHJpbmc+KCk7Ci0JZXhwZWN0ZWRRdWVyeUxpc3QuYWRkKCJzZWxlY3QgKiBmcm9tIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjUgd2hlcmUgY19waG9uZT0gPyIpOwotCWV4cGVjdGVkUXVlcnlMaXN0LmFkZCgic2VsZWN0ICogZnJvbSBjdXN0b21lcl9zdG10X3dyYXBwZXI0IHdoZXJlIGNfcGhvbmU9ID8iKTsKLQlleHBlY3RlZFF1ZXJ5TGlzdC5hZGQoInNlbGVjdCAqIGZyb20gY3VzdG9tZXJfc3RtdF93cmFwcGVyMyB3aGVyZSBjX3Bob25lPSA/Iik7CisgICAgTGlzdDxTdHJpbmc+IHF1ZXJ5TGlzdCA9IG5ldyBMaW5rZWRMaXN0PFN0cmluZz4oKTsKKyAgICBMaXN0PFN0cmluZz4gZXhwZWN0ZWRRdWVyeUxpc3QgPSBuZXcgTGlua2VkTGlzdDxTdHJpbmc+KCk7CisgICAgZXhwZWN0ZWRRdWVyeUxpc3QuYWRkKCJzZWxlY3QgKiBmcm9tIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjUgd2hlcmUgY19waG9uZT0gPyIpOworICAgIGV4cGVjdGVkUXVlcnlMaXN0LmFkZCgic2VsZWN0ICogZnJvbSBjdXN0b21lcl9zdG10X3dyYXBwZXI0IHdoZXJlIGNfcGhvbmU9ID8iKTsKKyAgICBleHBlY3RlZFF1ZXJ5TGlzdC5hZGQoInNlbGVjdCAqIGZyb20gY3VzdG9tZXJfc3RtdF93cmFwcGVyMyB3aGVyZSBjX3Bob25lPSA/Iik7CiAKLQl3aGlsZShzdC5oYXNNb3JlVG9rZW5zKCkpIHsKLQkgICAgU3RyaW5nIHF1ZXJ5ID0gc3QubmV4dFRva2VuKCkudHJpbSgpOwotCSAgICBpZighcXVlcnkuZXF1YWxzKCIiKSkgewotCQlxdWVyeUxpc3QuYWRkKHF1ZXJ5KTsKLQkgICAgfQotCX0KLQkvKmZvcihpbnQgaz0wOyBrPHF1ZXJ5TGlzdC5zaXplKCk7IGsrKykgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+Pj4+IHF1ZXJ5PSIgKyBxdWVyeUxpc3QuZ2V0KGspKTsKLQl9Ki8KKyAgICB3aGlsZShzdC5oYXNNb3JlVG9rZW5zKCkpIHsKKyAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gc3QubmV4dFRva2VuKCkudHJpbSgpOworICAgICAgICBpZighcXVlcnkuZXF1YWxzKCIiKSkgeworICAgICAgICBxdWVyeUxpc3QuYWRkKHF1ZXJ5KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKmZvcihpbnQgaz0wOyBrPHF1ZXJ5TGlzdC5zaXplKCk7IGsrKykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+Pj4+IHF1ZXJ5PSIgKyBxdWVyeUxpc3QuZ2V0KGspKTsKKyAgICB9Ki8KIAotCXBhc3NlZCA9IGV4cGVjdGVkUXVlcnlMaXN0LmVxdWFscyhxdWVyeUxpc3QpOwotCQkgICAgICAgICAgICAKLQlpZihwYXNzZWQpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIlNRTCBUcmFjZSBtb25pdG9yaW5nIFRlc3QyICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIlNRTCBUcmFjZSBtb25pdG9yaW5nIFRlc3QyICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgIHBhc3NlZCA9IGV4cGVjdGVkUXVlcnlMaXN0LmVxdWFscyhxdWVyeUxpc3QpOworCisgICAgaWYocGFzc2VkKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJTUUwgVHJhY2UgbW9uaXRvcmluZyBUZXN0MiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJTUUwgVHJhY2UgbW9uaXRvcmluZyBUZXN0MiAiLCBzdGF0LkZBSUwpOworICAgIH0KICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3FsdHJhY2Vtb25pdG9yaW5nL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NxbHRyYWNlbW9uaXRvcmluZy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDM3NTk5M2UuLjdiMjRiMzggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3FsdHJhY2Vtb25pdG9yaW5nL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zcWx0cmFjZW1vbml0b3JpbmcvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNTcsNiArNTcsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NxbHRyYWNlbW9uaXRvcmluZy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zcWx0cmFjZW1vbml0b3JpbmcvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQppbmRleCAyZDBjZjhiLi5hZmZkNTMwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NxbHRyYWNlbW9uaXRvcmluZy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3FsdHJhY2Vtb25pdG9yaW5nL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTI3LDE3ICsyNywxNyBAQAogICAgIHByb3RlY3RlZCBEYXRhU291cmNlIGRzOwogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGVudGl0eUNvbnRleHQpIHsKLQlDb250ZXh0IGNvbnRleHQgPSBudWxsOwotCXRyeSB7Ci0JICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvamRiYy9EYXRhU291cmNlIik7Ci0JfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKLQl9CisgICAgQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L2pkYmMvRGF0YVNvdXJjZSIpOworICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBJbnRlZ2VyIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewotCSAgICByZXR1cm4gbmV3IEludGVnZXIoMSk7CisgICAgICAgIHJldHVybiBuZXcgSW50ZWdlcigxKTsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBwcmVwYXJlZFN0YXRlbWVudFRlc3QxKFN0cmluZyB0YWJsZU5hbWUsIFN0cmluZyB2YWx1ZSl7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NxbHRyYWNlbW9uaXRvcmluZy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NxbHRyYWNlbW9uaXRvcmluZy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggY2I3NGUyNi4uNjg0ZTI3YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zcWx0cmFjZW1vbml0b3Jpbmcvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3FsdHJhY2Vtb25pdG9yaW5nL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw0NiArMSw0NiBAQAotRHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIxOw0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIxICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyMSBWQUxVRVMoMiwgJ2lpb3AnKTsNCi0NCi1Ecm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjI7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIyIFZBTFVFUygyLCAnaWlvcCcpOw0KLQ0KLURyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMzsNCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMyAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjMgVkFMVUVTKDIsICdpaW9wJyk7DQotDQotRHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI0Ow0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI0ICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyNCBWQUxVRVMoMiwgJ2lpb3AnKTsNCi0NCi1Ecm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjU7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjUgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI1IFZBTFVFUygyLCAnaWlvcCcpOw0KLQ0KK0Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyMSBWQUxVRVMoMiwgJ2lpb3AnKTsKKworRHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIyOworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMiAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIyIFZBTFVFUygyLCAnaWlvcCcpOworCitEcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjM7CisKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIzICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjMgVkFMVUVTKDIsICdpaW9wJyk7CisKK0Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNDsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjQgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyNCBWQUxVRVMoMiwgJ2lpb3AnKTsKKworRHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI1OworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNSAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI1IFZBTFVFUygyLCAnaWlvcCcpOworCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50bGVha2RldGVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnRsZWFrZGV0ZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDVhMjljYS4uMzdlM2NhNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnRsZWFrZGV0ZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnRsZWFrZGV0ZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcC1zdGF0ZW1lbnR3cmFwcGVyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnRsZWFrZGV0ZWN0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50bGVha2RldGVjdGlvbi9idWlsZC54bWwKaW5kZXggMmUwY2JlNS4uNDUxOGM4YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnRsZWFrZGV0ZWN0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudGxlYWtkZXRlY3Rpb24vYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1NpbXBsZUJNUC5jbGFzcywgKiovU2ltcGxlQk1QSG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KQEAgLTc5LDkgKzc5LDkgQEAKICAgIDwhLS0gQ3JlYXRpbmcgYW5vdGhlciBkcyBmb3IgY29tcGFyaXNvbiBvZiByZWNvcmRzIC0tPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0ic2Vjb25kLXBvb2wiLz4KLQk8cGFyYW0gbmFtZT0iZGIuY2xhc3MiIHZhbHVlPSJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RGF0YVNvdXJjZSIvPgotCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuRGF0YVNvdXJjZSIvPgotCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2NvbXBhcmVEUyIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi5jbGFzcyIgdmFsdWU9Im9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREYXRhU291cmNlIi8+CisgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UudHlwZSIgdmFsdWU9ImphdmF4LnNxbC5EYXRhU291cmNlIi8+CisgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvY29tcGFyZURTIi8+CiAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CkBAIC05MSw5ICs5MSw5IEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkgICAgPCEtLTxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KKyAgICAgICAgPCEtLTxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiA8L2FudGNhbGw+LS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgpAQCAtMTA4LDcgKzEwOCw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CkBAIC0xMjEsNyArMTIxLDcgQEAKICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KLQkgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2NvbXBhcmVEUyIvPgorICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvY29tcGFyZURTIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KQEAgLTEyOSw3ICsxMjksNyBAQAogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudGxlYWtkZXRlY3Rpb24vY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnRsZWFrZGV0ZWN0aW9uL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQppbmRleCA2NGQyZTFmLi5lMjEyNGExIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudGxlYWtkZXRlY3Rpb24vY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50bGVha2RldGVjdGlvbi9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKQEAgLTY0LDExICs2NCwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBzdGF0ZW1lbnRUZXN0IDogIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0JaWYoZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woKSA9PSAyKSB7CisgICAgaWYoZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woKSA9PSAyKSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIE1vbml0b3JpbmcgYWZ0ZXIgc3RhdGVtZW50VGVzdCA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKKyAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBNb25pdG9yaW5nIGFmdGVyIHN0YXRlbWVudFRlc3QgOiAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICB9CiAgICAgICAgIC8vVGVzdGluZyBQcmVwYXJlZFN0YXRlbWVudCBvYmplY3QKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKICAgICAgICAgICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKSBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7CkBAIC05MCwxMSArOTAsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgcHJlcGFyZWRTdGF0ZW1lbnRUZXN0IDogIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0JaWYoZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woKSA9PSA0KSB7CisgICAgaWYoZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woKSA9PSA0KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIE1vbml0b3JpbmcgYWZ0ZXIgcHJlcGFyZWRTdGF0ZW1lbnRUZXN0IDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgeworICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIE1vbml0b3JpbmcgYWZ0ZXIgcHJlcGFyZWRTdGF0ZW1lbnRUZXN0IDogIiwgc3RhdC5GQUlMKTsKLQl9CisgICAgfQogICAgICAgICAvL1Rlc3RpbmcgQ2FsbGFibGVTdGF0ZW1lbnQgb2JqZWN0cwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgewogICAgICAgICAgICAgU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKQEAgLTExNiwzMCArMTE2LDMwIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIGNhbGxhYmxlU3RhdGVtZW50VGVzdCA6ICIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCWlmKGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCkgPT0gNikgeworICAgIGlmKGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCkgPT0gNikgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBNb25pdG9yaW5nIGFmdGVyIGNhbGxhYmxlU3RhdGVtZW50VGVzdCA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKKyAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBNb25pdG9yaW5nIGFmdGVyIGNhbGxhYmxlU3RhdGVtZW50VGVzdCA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgIH0KICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIGludCBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgpIHRocm93cyBFeGNlcHRpb24gewotCWZpbmFsIFN0cmluZyBtb25pdG9yaW5nU3RhdCA9ICJudW1wb3RlbnRpYWxzdGF0ZW1lbnRsZWFrIjsKLQlmaW5hbCBTdHJpbmcgdXJsU3RyID0gInNlcnZpY2U6am14OnJtaTovLy9qbmRpL3JtaTovLyIgKyBIT1NUX05BTUUgKyAiOiIgKyBKTVhfUE9SVCArICIvam14cm1pIjsgICAgCisgICAgZmluYWwgU3RyaW5nIG1vbml0b3JpbmdTdGF0ID0gIm51bXBvdGVudGlhbHN0YXRlbWVudGxlYWsiOworICAgIGZpbmFsIFN0cmluZyB1cmxTdHIgPSAic2VydmljZTpqbXg6cm1pOi8vL2puZGkvcm1pOi8vIiArIEhPU1RfTkFNRSArICI6IiArIEpNWF9QT1JUICsgIi9qbXhybWkiOwogICAgICAgICBmaW5hbCBKTVhTZXJ2aWNlVVJMIHVybCA9IG5ldyBKTVhTZXJ2aWNlVVJMKHVybFN0cik7CiAKLQlmaW5hbCBKTVhDb25uZWN0b3Igam14Q29ubiA9IEpNWENvbm5lY3RvckZhY3RvcnkuY29ubmVjdCh1cmwpOwotCWZpbmFsIE1CZWFuU2VydmVyQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gam14Q29ubi5nZXRNQmVhblNlcnZlckNvbm5lY3Rpb24oKTsKKyAgICBmaW5hbCBKTVhDb25uZWN0b3Igam14Q29ubiA9IEpNWENvbm5lY3RvckZhY3RvcnkuY29ubmVjdCh1cmwpOworICAgIGZpbmFsIE1CZWFuU2VydmVyQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gam14Q29ubi5nZXRNQmVhblNlcnZlckNvbm5lY3Rpb24oKTsKIAogICAgICAgICBPYmplY3ROYW1lIG9iamVjdE5hbWUgPQogICAgICAgICAgICAgbmV3IE9iamVjdE5hbWUoImFteDpwcD0vbW9uL3NlcnZlci1tb25bc2VydmVyXSx0eXBlPWpkYmNyYS1tb24sbmFtZT1yZXNvdXJjZXMvIiArIHBvb2xOYW1lKTsKIAotCWphdmF4Lm1hbmFnZW1lbnQub3Blbm1iZWFuLkNvbXBvc2l0ZURhdGFTdXBwb3J0IHJldHVyblZhbHVlID0gCi0JCShqYXZheC5tYW5hZ2VtZW50Lm9wZW5tYmVhbi5Db21wb3NpdGVEYXRhU3VwcG9ydCkgCi0JCWNvbm5lY3Rpb24uZ2V0QXR0cmlidXRlKG9iamVjdE5hbWUsIG1vbml0b3JpbmdTdGF0KTsKKyAgICBqYXZheC5tYW5hZ2VtZW50Lm9wZW5tYmVhbi5Db21wb3NpdGVEYXRhU3VwcG9ydCByZXR1cm5WYWx1ZSA9CisgICAgICAgIChqYXZheC5tYW5hZ2VtZW50Lm9wZW5tYmVhbi5Db21wb3NpdGVEYXRhU3VwcG9ydCkKKyAgICAgICAgY29ubmVjdGlvbi5nZXRBdHRyaWJ1dGUob2JqZWN0TmFtZSwgbW9uaXRvcmluZ1N0YXQpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCI+Pj4iICsgbW9uaXRvcmluZ1N0YXQgKyAiPSIgKyByZXR1cm5WYWx1ZS5nZXQoImNvdW50IikpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IiArIG1vbml0b3JpbmdTdGF0ICsgIj0iICsgcmV0dXJuVmFsdWUuZ2V0KCJjb3VudCIpKTsKICAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKHJldHVyblZhbHVlLmdldCgiY291bnQiKS50b1N0cmluZygpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudGxlYWtkZXRlY3Rpb24vZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50bGVha2RldGVjdGlvbi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDI5Y2YyYWUuLjZjMWEzN2IgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50bGVha2RldGVjdGlvbi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50bGVha2RldGVjdGlvbi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC02Myw2ICs2Myw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50bGVha2RldGVjdGlvbi9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnRsZWFrZGV0ZWN0aW9uL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggNzRhYTgxMC4uNTMxMDRjNyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnRsZWFrZGV0ZWN0aW9uL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnRsZWFrZGV0ZWN0aW9uL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTEzNyw3ICsxMzcsNyBAQAogICAgICAgICBDb25uZWN0aW9uIGNvbkZyb21EUyA9IG51bGw7CiAgICAgICAgIENvbm5lY3Rpb24gY29uRnJvbUNvbXBhcmVEUyA9IG51bGw7CiAgICAgICAgIENhbGxhYmxlU3RhdGVtZW50IHN0bXQgPSBudWxsOwotCVByZXBhcmVkU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKKyAgICBQcmVwYXJlZFN0YXRlbWVudCBzdG10MSA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBjb25Gcm9tRFMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBjb25Gcm9tQ29tcGFyZURTID0gY29tcGFyZURzLmdldENvbm5lY3Rpb24oKTsKQEAgLTE1MCw3ICsxNTAsNyBAQAogICAgICAgICAgICAgc3RtdDEuZXhlY3V0ZVVwZGF0ZSgpOwogCiAgICAgICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzcWUpIHsKLQkgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZiAoc3RtdDEgIT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnRsZWFrZGV0ZWN0aW9uL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50bGVha2RldGVjdGlvbi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggYjUwZGRlYy4uYzE5OTc4MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnRsZWFrZGV0ZWN0aW9uL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudGxlYWtkZXRlY3Rpb24vc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDE3ICsxLDE3IEBACi0NCi1Ecm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjsNCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyIFZBTFVFUygxLCAnd3h5eicpOw0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlciBWQUxVRVMoMiwgJ3BxcnMnKTsNCi0NCi1Ecm9wIHRhYmxlIENPTVBBUkVfUkVDT1JEUzsNCi0NCi1DUkVBVEUgVEFCTEUgQ09NUEFSRV9SRUNPUkRTKA0KLSAgICBSRUNfU1RNVF9UWVBFCWNoYXIoNSksDQotICAgIFJFQ19TVE1UCQlpbnRlZ2VyDQotKTsNCisKK0Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlciBWQUxVRVMoMSwgJ3d4eXonKTsKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlciBWQUxVRVMoMiwgJ3BxcnMnKTsKKworRHJvcCB0YWJsZSBDT01QQVJFX1JFQ09SRFM7CisKK0NSRUFURSBUQUJMRSBDT01QQVJFX1JFQ09SRFMoCisgICAgUkVDX1NUTVRfVFlQRSAgICBjaGFyKDUpLAorICAgIFJFQ19TVE1UICAgICAgICBpbnRlZ2VyCispOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnR0aW1lb3V0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHRpbWVvdXQvYnVpbGQucHJvcGVydGllcwppbmRleCA0NTA3M2Q1Li4xNWY3ZjUxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHRpbWVvdXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHRpbWVvdXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLXN0YXRlbWVudHRpbWVvdXQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHRpbWVvdXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnR0aW1lb3V0L2J1aWxkLnhtbAppbmRleCAzNWNlN2EwLi43ZDczMTM0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHRpbWVvdXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50dGltZW91dC9idWlsZC54bWwKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWNvbW1vbiIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtY29tbW9uIi8+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnR0aW1lb3V0L2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50dGltZW91dC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKaW5kZXggYzdkNDhmYS4uNDkxYmZjNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnR0aW1lb3V0L2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHRpbWVvdXQvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZUJNUEhvbWUuY2xhc3MpOwogCiAgICAgICAgIFNpbXBsZUJNUCBzaW1wbGVCTVAgPSBzaW1wbGVCTVBIb21lLmNyZWF0ZSgpOwotCXN0YXQuYWRkRGVzY3JpcHRpb24oIkpEQkMgU3RhdGVtZW50IFRpbWVvdXQgVGVzdHMiKTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJKREJDIFN0YXRlbWVudCBUaW1lb3V0IFRlc3RzIik7CiAKICAgICAgICAgaWYgKHNpbXBsZUJNUC5zdGF0ZW1lbnRUZXN0KCkpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgc3RhdGVtZW50VGVzdCA6ICIsIFNpbXBsZVJlcG9ydGVyQWRhcHRlci5QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50dGltZW91dC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHRpbWVvdXQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGRkNGM1ZTUuLjExZTYxZWUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50dGltZW91dC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnR0aW1lb3V0L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSwxMCArMSwxMCBAQAotDQotRHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlciBWQUxVRVMoMSwgJ3d4eXonKTsNCisKK0Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlciBWQUxVRVMoMSwgJ3d4eXonKTsKIElOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlciBWQUxVRVMoMiwgJ3BxcnMnKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHdyYXBwZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50d3JhcHBlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA1YTI5Y2EuLjM3ZTNjYTYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50d3JhcHBlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50d3JhcHBlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtc3RhdGVtZW50d3JhcHBlciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50d3JhcHBlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHdyYXBwZXIvYnVpbGQueG1sCmluZGV4IGYxY2FlYjguLmFjNDRmYWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50d3JhcHBlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnR3cmFwcGVyL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9TaW1wbGVCTVAuY2xhc3MsICoqL1NpbXBsZUJNUEhvbWUuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC02MywxNCArNjMsMTQgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CkBAIC03OCw3ICs3OCw3IEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50d3JhcHBlci9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHdyYXBwZXIvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCmluZGV4IGRjYmUwNGUuLjg2ZDdhN2EgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50d3JhcHBlci9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnR3cmFwcGVyL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQpAQCAtMjksMjggKzI5LDI4IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLSAJU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7Ci0JU3RyaW5nIHRlc3RTdWl0ZSA9ICJTdGF0ZW1lbnRXcmFwcGVyICI7CisgICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiU3RhdGVtZW50V3JhcHBlciAiOwogCiAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVCTVBIb21lIik7Ci0JU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCisgICAgU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCiAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZUJNUEhvbWUuY2xhc3MpOwogCiAgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKCk7CiAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiSkRCQyBTdGF0ZW1lbnQgV3JhcHBlciBUZXN0cyIpOwogCiAgICAgaWYgKCBzaW1wbGVCTVAuc3RhdGVtZW50VGVzdCgpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiBzdGF0ZW1lbnRUZXN0IDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiBzdGF0ZW1lbnRUZXN0IDogIiwgc3RhdC5GQUlMKTsKLQl9CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHN0YXRlbWVudFRlc3QgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHN0YXRlbWVudFRlc3QgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KIAotCWlmICggc2ltcGxlQk1QLnByZXBhcmVkU3RhdGVtZW50VGVzdCgpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiBwcmVwYXJlZFN0YXRlbWVudFRlc3QgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHByZXBhcmVkU3RhdGVtZW50VGVzdCA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgIGlmICggc2ltcGxlQk1QLnByZXBhcmVkU3RhdGVtZW50VGVzdCgpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiBwcmVwYXJlZFN0YXRlbWVudFRlc3QgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHByZXBhcmVkU3RhdGVtZW50VGVzdCA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQogCiAgICAgaWYgKCBzaW1wbGVCTVAuY2FsbGFibGVTdGF0ZW1lbnRUZXN0KCkgKSB7CiAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIGNhbGxhYmxlU3RhdGVtZW50VGVzdCA6ICIsIHN0YXQuUEFTUyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHdyYXBwZXIvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50d3JhcHBlci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGM5MGU5YmUuLmE1NjhiODIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50d3JhcHBlci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50d3JhcHBlci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC01Nyw2ICs1Nyw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50d3JhcHBlci9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnR3cmFwcGVyL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggOTdhZWFkMC4uMzhhOGM3NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnR3cmFwcGVyL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnR3cmFwcGVyL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTI4LDE4ICsyOCwxOCBAQAogICAgIHByb3RlY3RlZCBEYXRhU291cmNlIGRzOwogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGVudGl0eUNvbnRleHQpIHsKLQlDb250ZXh0IGNvbnRleHQgPSBudWxsOwotCXRyeSB7Ci0JICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCX0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7Ci0JfQorICAgIENvbnRleHQgY29udGV4dCA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKKyAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqU2ltcGxlQk1QQmVhbioqXSBEb25lIHdpdGggc2V0RW50aXR5Q29udGV4dC4uLi4iKTsKICAgICB9CiAKICAgICBwdWJsaWMgSW50ZWdlciBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKLQkgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOworICAgICAgICByZXR1cm4gbmV3IEludGVnZXIoMSk7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gc3RhdGVtZW50VGVzdCgpIHsKQEAgLTUyLDggKzUyLDggQEAKICAgICAgICAgICAgIHN0bXQgPSBjb25Gcm9tRFMuY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICBjb25Gcm9tU3RhdGVtZW50ID0gc3RtdC5nZXRDb25uZWN0aW9uKCk7CiAKLQkJU3lzdGVtLm91dC5wcmludGxuKCJzdGF0ZW1lbnQgVGVzdCA6IGNvbkZyb21EUyA6ICIgKyBjb25Gcm9tRFMpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oInN0YXRlbWVudCBUZXN0IDogY29uRnJvbVN0YXRlbWVudCA6ICIgKyBjb25Gcm9tU3RhdGVtZW50KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzdGF0ZW1lbnQgVGVzdCA6IGNvbkZyb21EUyA6ICIgKyBjb25Gcm9tRFMpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN0YXRlbWVudCBUZXN0IDogY29uRnJvbVN0YXRlbWVudCA6ICIgKyBjb25Gcm9tU3RhdGVtZW50KTsKIAogICAgICAgICAgICAgaWYoIGNvbkZyb21EUz09Y29uRnJvbVN0YXRlbWVudCB8fCBjb25Gcm9tRFMuZXF1YWxzKGNvbkZyb21TdGF0ZW1lbnQpICl7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKQEAgLTg0LDggKzg0LDggQEAKICAgICAgICAgICAgIHN0bXQgPSBjb25Gcm9tRFMucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSBjdXN0b21lcl9zdG10X3dyYXBwZXIiKTsKICAgICAgICAgICAgIGNvbkZyb21TdGF0ZW1lbnQgPSBzdG10LmdldENvbm5lY3Rpb24oKTsKIAotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlByZXBhcmVkIHN0YXRlbWVudCBUZXN0IDogY29uRnJvbURTIDogIiArIGNvbkZyb21EUyk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiUHJlcGFyZWQgc3RhdGVtZW50IFRlc3QgOiBjb25Gcm9tU3RhdGVtZW50IDogIiArIGNvbkZyb21TdGF0ZW1lbnQpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlByZXBhcmVkIHN0YXRlbWVudCBUZXN0IDogY29uRnJvbURTIDogIiArIGNvbkZyb21EUyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHJlcGFyZWQgc3RhdGVtZW50IFRlc3QgOiBjb25Gcm9tU3RhdGVtZW50IDogIiArIGNvbkZyb21TdGF0ZW1lbnQpOwogICAgICAgICAgICAgaWYoIGNvbkZyb21EUz09Y29uRnJvbVN0YXRlbWVudCB8fCBjb25Gcm9tRFMuZXF1YWxzKGNvbkZyb21TdGF0ZW1lbnQpICl7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTExNSw4ICsxMTUsOCBAQAogICAgICAgICAgICAgc3RtdCA9IGNvbkZyb21EUy5wcmVwYXJlQ2FsbCgic2VsZWN0ICogZnJvbSBjdXN0b21lcl9zdG10X3dyYXBwZXIiKTsKICAgICAgICAgICAgIGNvbkZyb21TdGF0ZW1lbnQgPSBzdG10LmdldENvbm5lY3Rpb24oKTsKIAotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxhYmxlIHN0YXRlbWVudCBUZXN0IDogY29uRnJvbURTIDogIiArIGNvbkZyb21EUyk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGFibGUgc3RhdGVtZW50IFRlc3QgOiBjb25Gcm9tU3RhdGVtZW50IDogIiArIGNvbkZyb21TdGF0ZW1lbnQpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxhYmxlIHN0YXRlbWVudCBUZXN0IDogY29uRnJvbURTIDogIiArIGNvbkZyb21EUyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGFibGUgc3RhdGVtZW50IFRlc3QgOiBjb25Gcm9tU3RhdGVtZW50IDogIiArIGNvbkZyb21TdGF0ZW1lbnQpOwogICAgICAgICAgICAgaWYoIGNvbkZyb21EUz09Y29uRnJvbVN0YXRlbWVudCB8fCBjb25Gcm9tRFMuZXF1YWxzKGNvbkZyb21TdGF0ZW1lbnQpICl7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTE0Niw4ICsxNDYsOCBAQAogICAgICAgICAgICAgZGJtZCA9IGNvbkZyb21EUy5nZXRNZXRhRGF0YSgpOwogICAgICAgICAgICAgY29uRnJvbU1ldGFEYXRhID0gZGJtZC5nZXRDb25uZWN0aW9uKCk7CiAKLQkJU3lzdGVtLm91dC5wcmludGxuKCJzdGF0ZW1lbnRUZXN0IDogY29uRnJvbURTIDogIiArIGNvbkZyb21EUyk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigic3RhdGVtZW50VGVzdCA6IGNvbkZyb21EYk1ldGFkYXRhIDogIiArIGNvbkZyb21NZXRhRGF0YSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic3RhdGVtZW50VGVzdCA6IGNvbkZyb21EUyA6ICIgKyBjb25Gcm9tRFMpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN0YXRlbWVudFRlc3QgOiBjb25Gcm9tRGJNZXRhZGF0YSA6ICIgKyBjb25Gcm9tTWV0YURhdGEpOwogICAgICAgICAgICAgaWYoIGNvbkZyb21EUz09Y29uRnJvbU1ldGFEYXRhIHx8IGNvbkZyb21EUy5lcXVhbHMoY29uRnJvbU1ldGFEYXRhKSApewogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICB9CkBAIC0xNzMsOCArMTczLDggQEAKICAgICAgICAgICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkoInNlbGVjdCAqIGZyb20gY3VzdG9tZXJfc3RtdF93cmFwcGVyIik7CiAgICAgICAgICAgICBjb25Gcm9tUmVzdWx0U2V0ID0gcnMuZ2V0U3RhdGVtZW50KCkuZ2V0Q29ubmVjdGlvbigpOwogCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiUmVzdWx0U2V0IHRlc3QgOiBjb25Gcm9tRFMgOiAiICsgY29uRnJvbURTKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJSZXN1bHRTZXQgdGVzdCA6IGNvbkZyb21SZXN1bHRTZXQ6ICIgKyBjb25Gcm9tUmVzdWx0U2V0KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXN1bHRTZXQgdGVzdCA6IGNvbkZyb21EUyA6ICIgKyBjb25Gcm9tRFMpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3VsdFNldCB0ZXN0IDogY29uRnJvbVJlc3VsdFNldDogIiArIGNvbkZyb21SZXN1bHRTZXQpOwogICAgICAgICAgICAgaWYoIGNvbkZyb21EUz09Y29uRnJvbVJlc3VsdFNldCB8fCBjb25Gcm9tRFMuZXF1YWxzKGNvbkZyb21SZXN1bHRTZXQpICl7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50d3JhcHBlci9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHdyYXBwZXIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGRkNGM1ZTUuLjExZTYxZWUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50d3JhcHBlci9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnR3cmFwcGVyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSwxMCArMSwxMCBAQAotDQotRHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlciBWQUxVRVMoMSwgJ3d4eXonKTsNCisKK0Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlciBWQUxVRVMoMSwgJ3d4eXonKTsKIElOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlciBWQUxVRVMoMiwgJ3BxcnMnKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLmZpeGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLmZpeGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzRhMjk3OS4uMTAyZjE1YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5maXhlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MuZml4ZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLXN0bXRjYWNoaW5nX2hpdF9taXNzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5maXhlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLmZpeGVkL2J1aWxkLnhtbAppbmRleCBlOTZmNDllLi5lNDJiNzc5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLmZpeGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLmZpeGVkL2J1aWxkLnhtbApAQCAtNjksNyArNjksNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIApAQCAtOTIsMTggKzkyLDE4IEBACiAKIAogCi0JPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXN0bXRjYWNoaW5nX2hpdF9taXNzLXBvb2wuc3RhdGVtZW50X2NhY2hlX3NpemU9NSIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLQk8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtc3RtdGNhY2hpbmdfaGl0X21pc3MtcG9vbC5zdGF0ZW1lbnRfY2FjaGVfdHlwZT1GSVhFRCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXN0bXRjYWNoaW5nX2hpdF9taXNzLXBvb2wud3JhcF9qZGJjX29iamVjdHM9dHJ1ZSIvPgpAQCAtMTE1LDEwICsxMTUsMTAgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1zdG10Y2FjaGluZ19oaXRfbWlzcy1wb29sLmlkbGVfdGltZW91dF9pbl9zZWNvbmRzPTMwMDAiLz4KICAgIDwvYW50Y2FsbD4KLQk8IS0tPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CisgICAgPCEtLTxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCQkgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXN0bXRjYWNoaW5nX2hpdF9taXNzLXBvb2wucHJvcGVydHkuU3RhdGVtZW50Q2FjaGVUeXBlPSIvPgorICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXN0bXRjYWNoaW5nX2hpdF9taXNzLXBvb2wucHJvcGVydHkuU3RhdGVtZW50Q2FjaGVUeXBlPSIvPgogICAgIDwvYW50Y2FsbD4tLT4KICAgICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5maXhlZC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5maXhlZC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDkyNDdlOWUuLjhlY2RiMzIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MuZml4ZWQvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLmZpeGVkL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTQzLDggKzQzLDggQEAKICAgICAgICAgICAgICAgICA8cmVzLXJlZi1uYW1lPkRhdGFTb3VyY2U8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgICAgICAgICA8cmVzLXR5cGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L3Jlcy10eXBlPgogICAgICAgICAgICAgICAgIDxyZXMtYXV0aD5Db250YWluZXI8L3Jlcy1hdXRoPgotCQk8cmVzLXNoYXJpbmctc2NvcGU+VW5zaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgotCQkgICAgIDwvcmVzb3VyY2UtcmVmPgorICAgICAgICA8cmVzLXNoYXJpbmctc2NvcGU+VW5zaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgorICAgICAgICAgICAgIDwvcmVzb3VyY2UtcmVmPgogCiAgICAgICAgIDwvZW50aXR5PgogICAgIDwvZW50ZXJwcmlzZS1iZWFucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MuZml4ZWQvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLmZpeGVkL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IGYzM2Y2NDEuLjI1YzllZjUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MuZml4ZWQvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5maXhlZC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjcsNyArMjcsNyBAQAogICAgICAgICAgICAgPGpuZGktbmFtZT5jb20uc3VuLnMxYXNkZXYuamRiYy5zdG10Y2FjaGluZy5lamIuU2ltcGxlQk1QSG9tZTwvam5kaS1uYW1lPgogICAgICAgICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgICAgICAgICA8cmVzLXJlZi1uYW1lPkRhdGFTb3VyY2U8L3Jlcy1yZWYtbmFtZT4KLQkJPGpuZGktbmFtZT5qZGJjL2pkYmMtc3RtdGNhY2hpbmdfaGl0X21pc3M8L2puZGktbmFtZT4KKyAgICAgICAgPGpuZGktbmFtZT5qZGJjL2pkYmMtc3RtdGNhY2hpbmdfaGl0X21pc3M8L2puZGktbmFtZT4KICAgICAgICAgICAgICAgICA8ZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CiAgICAgICAgICAgICAgICAgICAgIDxuYW1lPkRCVVNFUjwvbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPHBhc3N3b3JkPkRCUEFTU1dPUkQ8L3Bhc3N3b3JkPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5maXhlZC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5maXhlZC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IGJjZjM2NzYuLmE1MzU0MTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MuZml4ZWQvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLmZpeGVkL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTQxLDEwMCArNDEsMTAwIEBACiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdEhpdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCB0ZXN0IFN0YXJ0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgdGVzdCBTdGFydCIpOwogICAgICAgICBjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlIGRzID0gbnVsbDsKICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCA9IG51bGw7Ci0JUHJlcGFyZWRTdGF0ZW1lbnQgZmlyc3RTdGF0ZW1lbnQgPSBudWxsOwotCVByZXBhcmVkU3RhdGVtZW50IGxhc3RTdGF0ZW1lbnQgPSBudWxsOworICAgIFByZXBhcmVkU3RhdGVtZW50IGZpcnN0U3RhdGVtZW50ID0gbnVsbDsKKyAgICBQcmVwYXJlZFN0YXRlbWVudCBsYXN0U3RhdGVtZW50ID0gbnVsbDsKICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSA9ICJjdXN0b21lcl9zdG10X3dyYXBwZXIiOwogICAgICAgICBkcyA9IHRoaXMuZHM7Ci0JaW50IHRhYmxlSW5kZXggPSAxOworICAgIGludCB0YWJsZUluZGV4ID0gMTsKICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICAgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiPj4+PiBjb25uID0gIiArIGNvbm4uaGFzaENvZGUoKSk7Ci0JfWNhdGNoKEV4Y2VwdGlvbiBleCkgewotCX0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4+IGNvbm4gPSAiICsgY29ubi5oYXNoQ29kZSgpKTsKKyAgICB9Y2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgfQogICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IDc7IGkrKykgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluZGV4ID0gIiArIGkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluZGV4ID0gIiArIGkpOwogICAgICAgICAgICAgdHJ5IHsKIAotCSAgICAgICAgaWYoaSA9PSA2KSB7Ci0JCSAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZSArIHRhYmxlSW5kZXggKyAiIHdoZXJlIGNfcGhvbmU9ID8iKTsKLQkJICAgIGxhc3RTdGF0ZW1lbnQgPSBzdG10OwotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJsYXN0U3RhdGVtZW50IDogIiAgKyBsYXN0U3RhdGVtZW50KTsKLQkJfSBlbHNlIHsgICAKLQkJICAgIGludFtdIGNvbHVtbkluZGV4ZXMgPSB7aSsxLCBpKzJ9OworICAgICAgICAgICAgaWYoaSA9PSA2KSB7CisgICAgICAgICAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZSArIHRhYmxlSW5kZXggKyAiIHdoZXJlIGNfcGhvbmU9ID8iKTsKKyAgICAgICAgICAgIGxhc3RTdGF0ZW1lbnQgPSBzdG10OworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsYXN0U3RhdGVtZW50IDogIiAgKyBsYXN0U3RhdGVtZW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludFtdIGNvbHVtbkluZGV4ZXMgPSB7aSsxLCBpKzJ9OwogICAgICAgICAgICAgICAgICAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZStpICsiIHdoZXJlIGNfcGhvbmU9ID8iKTsKLQkJfQotCQlpZihpID09IDEpIHsKLQkJICAgIGZpcnN0U3RhdGVtZW50ID0gc3RtdDsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmlyc3RTdGF0ZW1lbnQgOiAiICsgZmlyc3RTdGF0ZW1lbnQpOwotCQl9IAorICAgICAgICB9CisgICAgICAgIGlmKGkgPT0gMSkgeworICAgICAgICAgICAgZmlyc3RTdGF0ZW1lbnQgPSBzdG10OworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaXJzdFN0YXRlbWVudCA6ICIgKyBmaXJzdFN0YXRlbWVudCk7CisgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0JCWlmKHN0bXQgIT0gbnVsbCkgewotCSAgICAgICAgICAgIHRyeSB7Ci0JCQlzdG10LmNsb3NlKCk7Ci0JCSAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkge30KLQkJfQorICAgICAgICBpZihzdG10ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgc3RtdC5jbG9zZSgpOworICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHt9CisgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotCXBhc3NlZCA9IChmaXJzdFN0YXRlbWVudCA9PSBsYXN0U3RhdGVtZW50KTsKLQl0cnkgewotCSAgICBpZihmaXJzdFN0YXRlbWVudCAhPSBudWxsKSB7Ci0JCWZpcnN0U3RhdGVtZW50LmNsb3NlKCk7Ci0JICAgIH0KLQkgICAgaWYobGFzdFN0YXRlbWVudCAhPSBudWxsKSB7Ci0JCWxhc3RTdGF0ZW1lbnQuY2xvc2UoKTsKLQkgICAgfQorICAgIHBhc3NlZCA9IChmaXJzdFN0YXRlbWVudCA9PSBsYXN0U3RhdGVtZW50KTsKKyAgICB0cnkgeworICAgICAgICBpZihmaXJzdFN0YXRlbWVudCAhPSBudWxsKSB7CisgICAgICAgIGZpcnN0U3RhdGVtZW50LmNsb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYobGFzdFN0YXRlbWVudCAhPSBudWxsKSB7CisgICAgICAgIGxhc3RTdGF0ZW1lbnQuY2xvc2UoKTsKKyAgICAgICAgfQogICAgICAgICAvKiAgICAgICAgaWYgKGNvbm4gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0qLyAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgdGVzdCBFbmQiKTsKLQlyZXR1cm4gcGFzc2VkOworICAgICAgICAgICAgICAgIH0qLworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgIH0KLSAgICAKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCB0ZXN0IEVuZCIpOworICAgIHJldHVybiBwYXNzZWQ7CisgICAgfQorCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdE1pc3MoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgYWZ0ZXIgTWlzcyB0ZXN0IFN0YXJ0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgYWZ0ZXIgTWlzcyB0ZXN0IFN0YXJ0Iik7CiAgICAgICAgIGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UgZHMgPSBudWxsOwogICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBzdG10ID0gbnVsbDsKLQlQcmVwYXJlZFN0YXRlbWVudCBmaXJzdFN0YXRlbWVudCA9IG51bGw7Ci0JUHJlcGFyZWRTdGF0ZW1lbnQgbGFzdFN0YXRlbWVudCA9IG51bGw7CisgICAgUHJlcGFyZWRTdGF0ZW1lbnQgZmlyc3RTdGF0ZW1lbnQgPSBudWxsOworICAgIFByZXBhcmVkU3RhdGVtZW50IGxhc3RTdGF0ZW1lbnQgPSBudWxsOwogICAgICAgICBTdHJpbmcgdGFibGVOYW1lID0gImN1c3RvbWVyX3N0bXRfd3JhcHBlciI7CiAgICAgICAgIGRzID0gdGhpcy5kczsKLQlpbnQgdGFibGVJbmRleCA9IDE7CisgICAgaW50IHRhYmxlSW5kZXggPSAxOwogCiAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIj4+Pj4gY29ubiA9ICIgKyBjb25uLmhhc2hDb2RlKCkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+Pj4gY29ubiA9ICIgKyBjb25uLmhhc2hDb2RlKCkpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkge30KICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCA4OyBpKyspIHsKICAgICAgICAgICAgIHRyeSB7CiAKLQkJaWYoaSA9PSA2KSB7Ci0JCQkvL3N0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIiArIHRhYmxlTmFtZSArIHRhYmxlSW5kZXggKyAiIHdoZXJlIGNfcGhvbmU9PyIpOworICAgICAgICBpZihpID09IDYpIHsKKyAgICAgICAgICAgIC8vc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiICsgdGFibGVOYW1lICsgdGFibGVJbmRleCArICIgd2hlcmUgY19waG9uZT0/Iik7CiAgICAgICAgICAgICAgICAgICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lK2kgKyIgd2hlcmUgY19waG9uZT0gPyIpOwotCQkgICAgbGFzdFN0YXRlbWVudCA9IHN0bXQ7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxhc3RTdGF0ZW1lbnQgOiAiICArIGxhc3RTdGF0ZW1lbnQpOwotCQl9IGVsc2UgeworICAgICAgICAgICAgbGFzdFN0YXRlbWVudCA9IHN0bXQ7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxhc3RTdGF0ZW1lbnQgOiAiICArIGxhc3RTdGF0ZW1lbnQpOworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZStpICsiIHdoZXJlIGNfcGhvbmU9ID8iKTsKLQkJfQotCQlpZihpID09IDEpIHsKLQkJICAgIGZpcnN0U3RhdGVtZW50ID0gc3RtdDsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmlyc3RTdGF0ZW1lbnQgOiAiICsgZmlyc3RTdGF0ZW1lbnQpOwotCQl9CisgICAgICAgIH0KKyAgICAgICAgaWYoaSA9PSAxKSB7CisgICAgICAgICAgICBmaXJzdFN0YXRlbWVudCA9IHN0bXQ7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpcnN0U3RhdGVtZW50IDogIiArIGZpcnN0U3RhdGVtZW50KTsKKyAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOwpAQCAtMTQyLDE1NSArMTQyLDE1NSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHBhc3NlZCA9IGZpcnN0U3RhdGVtZW50ICE9IGxhc3RTdGF0ZW1lbnQ7Ci0JdHJ5IHsKLQkgICAgaWYoZmlyc3RTdGF0ZW1lbnQgIT0gbnVsbCkgewotCQlmaXJzdFN0YXRlbWVudC5jbG9zZSgpOwotCSAgICB9Ci0JICAgIGlmKGxhc3RTdGF0ZW1lbnQgIT0gbnVsbCkgewotCQlsYXN0U3RhdGVtZW50LmNsb3NlKCk7Ci0JICAgIH0KLS8qCSAgICBpZihjb25uICE9IG51bGwpIHsKLQkgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkgICAgfSovCi0JfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IGFmdGVyIE1pc3MgdGVzdCBFbmQiKTsKKyAgICB0cnkgeworICAgICAgICBpZihmaXJzdFN0YXRlbWVudCAhPSBudWxsKSB7CisgICAgICAgIGZpcnN0U3RhdGVtZW50LmNsb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYobGFzdFN0YXRlbWVudCAhPSBudWxsKSB7CisgICAgICAgIGxhc3RTdGF0ZW1lbnQuY2xvc2UoKTsKKyAgICAgICAgfQorLyogICAgICAgIGlmKGNvbm4gIT0gbnVsbCkgeworICAgICAgICAgICAgY29ubi5jbG9zZSgpOworICAgICAgICB9Ki8KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgYWZ0ZXIgTWlzcyB0ZXN0IEVuZCIpOwogICAgICAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdEhpdENvbHVtbk5hbWVzKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IChDb2x1bW4gTmFtZXMpIHRlc3QgU3RhcnQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCAoQ29sdW1uIE5hbWVzKSB0ZXN0IFN0YXJ0Iik7CiAgICAgICAgIGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UgZHMgPSBudWxsOwogICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBzdG10ID0gbnVsbDsKLQlQcmVwYXJlZFN0YXRlbWVudCBmaXJzdFN0YXRlbWVudCA9IG51bGw7Ci0JUHJlcGFyZWRTdGF0ZW1lbnQgbGFzdFN0YXRlbWVudCA9IG51bGw7CisgICAgUHJlcGFyZWRTdGF0ZW1lbnQgZmlyc3RTdGF0ZW1lbnQgPSBudWxsOworICAgIFByZXBhcmVkU3RhdGVtZW50IGxhc3RTdGF0ZW1lbnQgPSBudWxsOwogICAgICAgICBTdHJpbmcgdGFibGVOYW1lID0gImN1c3RvbWVyX3N0bXRfd3JhcHBlciI7CiAgICAgICAgIGRzID0gdGhpcy5kczsKLQlpbnQgdGFibGVJbmRleCA9IDE7CisgICAgaW50IHRhYmxlSW5kZXggPSAxOwogICAgICAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIj4+Pj4gY29ubiA9ICIgKyBjb25uLmhhc2hDb2RlKCkpOwotCX1jYXRjaChFeGNlcHRpb24gZXgpIHsKLQl9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+PiBjb25uID0gIiArIGNvbm4uaGFzaENvZGUoKSk7CisgICAgfWNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgIH0KICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCA3OyBpKyspIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmRleCA9ICIgKyBpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmRleCA9ICIgKyBpKTsKICAgICAgICAgICAgIHRyeSB7CiAKLQkgICAgICAgIGlmKGkgPT0gNikgewotCQkgICAgU3RyaW5nW10gY29sdW1uTmFtZXMgPSB7ImNfaWQiLCAiY19waG9uZSJ9OwotCQkgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUgKyB0YWJsZUluZGV4ICsgIiB3aGVyZSBjX3Bob25lPSA/IiwgY29sdW1uTmFtZXMpOwotCQkgICAgbGFzdFN0YXRlbWVudCA9IHN0bXQ7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxhc3RTdGF0ZW1lbnQgOiAiICArIGxhc3RTdGF0ZW1lbnQpOwotCQl9IGVsc2UgaWYoaSA9PTEpIHsgICAKLQkJICAgIFN0cmluZ1tdIGNvbHVtbk5hbWVzID0geyJjX2lkIiwgImNfcGhvbmUifTsKLQkJICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lICsgdGFibGVJbmRleCArICIgd2hlcmUgY19waG9uZT0gPyIsIGNvbHVtbk5hbWVzKTsKLQkJICAgIGZpcnN0U3RhdGVtZW50ID0gc3RtdDsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmlyc3RTdGF0ZW1lbnQgOiAiICsgZmlyc3RTdGF0ZW1lbnQpOwotCQl9IGVsc2UgewotCQkgICAgaW50IGogPSBpICsgMjsKKyAgICAgICAgICAgIGlmKGkgPT0gNikgeworICAgICAgICAgICAgU3RyaW5nW10gY29sdW1uTmFtZXMgPSB7ImNfaWQiLCAiY19waG9uZSJ9OworICAgICAgICAgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUgKyB0YWJsZUluZGV4ICsgIiB3aGVyZSBjX3Bob25lPSA/IiwgY29sdW1uTmFtZXMpOworICAgICAgICAgICAgbGFzdFN0YXRlbWVudCA9IHN0bXQ7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxhc3RTdGF0ZW1lbnQgOiAiICArIGxhc3RTdGF0ZW1lbnQpOworICAgICAgICB9IGVsc2UgaWYoaSA9PTEpIHsKKyAgICAgICAgICAgIFN0cmluZ1tdIGNvbHVtbk5hbWVzID0geyJjX2lkIiwgImNfcGhvbmUifTsKKyAgICAgICAgICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lICsgdGFibGVJbmRleCArICIgd2hlcmUgY19waG9uZT0gPyIsIGNvbHVtbk5hbWVzKTsKKyAgICAgICAgICAgIGZpcnN0U3RhdGVtZW50ID0gc3RtdDsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmlyc3RTdGF0ZW1lbnQgOiAiICsgZmlyc3RTdGF0ZW1lbnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50IGogPSBpICsgMjsKICAgICAgICAgICAgICAgICAgICAgaW50IGsgPSBqICsgMTsKLQkJICAgIFN0cmluZ1tdIGNvbHVtbk5hbWVzID0geyJjX2lkIitqLCAiY19pZCIra307CisgICAgICAgICAgICBTdHJpbmdbXSBjb2x1bW5OYW1lcyA9IHsiY19pZCIraiwgImNfaWQiK2t9OwogICAgICAgICAgICAgICAgICAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZStpICsiIHdoZXJlIGNfcGhvbmU9ID8iLCBjb2x1bW5OYW1lcyk7Ci0JCX0KKyAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICAgICAgfSBmaW5hbGx5IHsKLQkJaWYoc3RtdCAhPSBudWxsKSB7Ci0JICAgICAgICAgICAgdHJ5IHsKLQkJCXN0bXQuY2xvc2UoKTsKLQkJICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQotCQl9CisgICAgICAgIGlmKHN0bXQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzdG10LmNsb3NlKCk7CisgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkge30KKyAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0JcGFzc2VkID0gKGZpcnN0U3RhdGVtZW50ID09IGxhc3RTdGF0ZW1lbnQpOwotCXRyeSB7Ci0JICAgIGlmKGZpcnN0U3RhdGVtZW50ICE9IG51bGwpIHsKLQkJZmlyc3RTdGF0ZW1lbnQuY2xvc2UoKTsKLQkgICAgfQotCSAgICBpZihsYXN0U3RhdGVtZW50ICE9IG51bGwpIHsKLQkJbGFzdFN0YXRlbWVudC5jbG9zZSgpOwotCSAgICB9CisgICAgcGFzc2VkID0gKGZpcnN0U3RhdGVtZW50ID09IGxhc3RTdGF0ZW1lbnQpOworICAgIHRyeSB7CisgICAgICAgIGlmKGZpcnN0U3RhdGVtZW50ICE9IG51bGwpIHsKKyAgICAgICAgZmlyc3RTdGF0ZW1lbnQuY2xvc2UoKTsKKyAgICAgICAgfQorICAgICAgICBpZihsYXN0U3RhdGVtZW50ICE9IG51bGwpIHsKKyAgICAgICAgbGFzdFN0YXRlbWVudC5jbG9zZSgpOworICAgICAgICB9CiAgICAgICAgICAgICAgICAvKiBpZiAoY29ubiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgewogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSovIAotCX0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCAoQ29sdW1uIG5hbWVzKSB0ZXN0IEVuZCIpOwotCXJldHVybiBwYXNzZWQ7CisgICAgICAgICAgICAgICAgfSovCisgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IChDb2x1bW4gbmFtZXMpIHRlc3QgRW5kIik7CisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0SGl0Q29sdW1uSW5kZXhlcygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCAoQ29sdW1uIGluZGV4ZXMpIHRlc3QgU3RhcnQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCAoQ29sdW1uIGluZGV4ZXMpIHRlc3QgU3RhcnQiKTsKICAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSBkcyA9IG51bGw7CiAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHN0bXQgPSBudWxsOwotCVByZXBhcmVkU3RhdGVtZW50IGZpcnN0U3RhdGVtZW50ID0gbnVsbDsKLQlQcmVwYXJlZFN0YXRlbWVudCBsYXN0U3RhdGVtZW50ID0gbnVsbDsKKyAgICBQcmVwYXJlZFN0YXRlbWVudCBmaXJzdFN0YXRlbWVudCA9IG51bGw7CisgICAgUHJlcGFyZWRTdGF0ZW1lbnQgbGFzdFN0YXRlbWVudCA9IG51bGw7CiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUgPSAiY3VzdG9tZXJfc3RtdF93cmFwcGVyIjsKICAgICAgICAgZHMgPSB0aGlzLmRzOwotCWludCB0YWJsZUluZGV4ID0gMTsKKyAgICBpbnQgdGFibGVJbmRleCA9IDE7CiAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIj4+Pj4gY29ubiA9ICIgKyBjb25uLmhhc2hDb2RlKCkpOwotCX1jYXRjaChFeGNlcHRpb24gZXgpIHsKLQl9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+PiBjb25uID0gIiArIGNvbm4uaGFzaENvZGUoKSk7CisgICAgfWNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgIH0KICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCA3OyBpKyspIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmRleCA9ICIgKyBpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmRleCA9ICIgKyBpKTsKICAgICAgICAgICAgIHRyeSB7CiAKLQkgICAgICAgIGlmKGkgPT0gNikgewotCQkgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUgKyB0YWJsZUluZGV4ICsgIiB3aGVyZSBjX3Bob25lPSA/IiwgY29sdW1uSW5kZXhlczYpOwotCQkgICAgbGFzdFN0YXRlbWVudCA9IHN0bXQ7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxhc3RTdGF0ZW1lbnQgOiAiICArIGxhc3RTdGF0ZW1lbnQpOwotCQl9IGVsc2UgeyAgIAotCQkJLy9GaXJzdCBzdG10IGV4ZWN1dGVkIHdvdWxkIGhhdmUgezIsM30gc2FtZSBhcyBjb2x1bW5JbmRleGVzNgotCQkgICAgaW50W10gY29sdW1uSW5kZXhlcyA9IHtpKzEsIGkrMn07CisgICAgICAgICAgICBpZihpID09IDYpIHsKKyAgICAgICAgICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lICsgdGFibGVJbmRleCArICIgd2hlcmUgY19waG9uZT0gPyIsIGNvbHVtbkluZGV4ZXM2KTsKKyAgICAgICAgICAgIGxhc3RTdGF0ZW1lbnQgPSBzdG10OworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsYXN0U3RhdGVtZW50IDogIiAgKyBsYXN0U3RhdGVtZW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vRmlyc3Qgc3RtdCBleGVjdXRlZCB3b3VsZCBoYXZlIHsyLDN9IHNhbWUgYXMgY29sdW1uSW5kZXhlczYKKyAgICAgICAgICAgIGludFtdIGNvbHVtbkluZGV4ZXMgPSB7aSsxLCBpKzJ9OwogICAgICAgICAgICAgICAgICAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZStpICsiIHdoZXJlIGNfcGhvbmU9ID8iLCBjb2x1bW5JbmRleGVzKTsKLQkJfQotCQlpZihpID09IDEpIHsKLQkJICAgIGZpcnN0U3RhdGVtZW50ID0gc3RtdDsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmlyc3RTdGF0ZW1lbnQgOiAiICsgZmlyc3RTdGF0ZW1lbnQpOwotCQl9IAorICAgICAgICB9CisgICAgICAgIGlmKGkgPT0gMSkgeworICAgICAgICAgICAgZmlyc3RTdGF0ZW1lbnQgPSBzdG10OworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaXJzdFN0YXRlbWVudCA6ICIgKyBmaXJzdFN0YXRlbWVudCk7CisgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0JCWlmKHN0bXQgIT0gbnVsbCkgewotCSAgICAgICAgICAgIHRyeSB7Ci0JCQlzdG10LmNsb3NlKCk7Ci0JCSAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkge30KLQkJfQorICAgICAgICBpZihzdG10ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgc3RtdC5jbG9zZSgpOworICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHt9CisgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotCXBhc3NlZCA9IChmaXJzdFN0YXRlbWVudCA9PSBsYXN0U3RhdGVtZW50KTsKLQl0cnkgewotCSAgICBpZihmaXJzdFN0YXRlbWVudCAhPSBudWxsKSB7Ci0JCWZpcnN0U3RhdGVtZW50LmNsb3NlKCk7Ci0JICAgIH0KLQkgICAgaWYobGFzdFN0YXRlbWVudCAhPSBudWxsKSB7Ci0JCWxhc3RTdGF0ZW1lbnQuY2xvc2UoKTsKLQkgICAgfQorICAgIHBhc3NlZCA9IChmaXJzdFN0YXRlbWVudCA9PSBsYXN0U3RhdGVtZW50KTsKKyAgICB0cnkgeworICAgICAgICBpZihmaXJzdFN0YXRlbWVudCAhPSBudWxsKSB7CisgICAgICAgIGZpcnN0U3RhdGVtZW50LmNsb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYobGFzdFN0YXRlbWVudCAhPSBudWxsKSB7CisgICAgICAgIGxhc3RTdGF0ZW1lbnQuY2xvc2UoKTsKKyAgICAgICAgfQogICAgICAgICAgICAgICAgIC8qaWYgKGNvbm4gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gKi8KLQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgKENvbHVtbiBpbmRleGVzKSB0ZXN0IEVuZCIpOwotCXJldHVybiBwYXNzZWQ7CisgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IChDb2x1bW4gaW5kZXhlcykgdGVzdCBFbmQiKTsKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MuZml4ZWQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5maXhlZC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggODJmMzRhNi4uOTg4ZDJlOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5maXhlZC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5maXhlZC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsMTYxICsxLDE2MSBAQAotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIxOw0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMjsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjM7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI0Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNTsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjY7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI3Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyODsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjk7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIxMDsNCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMSAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksDQotICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbA0KLQ0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyMSBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLA0KLSAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjIgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOw0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIzICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwNCi0gICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIzIFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsNCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNCAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksDQotICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbA0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyNCBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjUgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLA0KLSAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjUgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOw0KLQ0KLQ0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI2ICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwNCi0gICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI2IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsNCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNyAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksDQotICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbA0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyNyBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjggKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLA0KLSAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjggVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOw0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI5ICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwNCi0gICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI5IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsNCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTAgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLA0KLSAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEwIFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsNCitkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjE7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjI7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjM7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjQ7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjU7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjY7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjc7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjg7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjk7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEwOworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwKKyAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbAorCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIxIFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwKKyAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbAorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyMiBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7CisKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIzICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksCisgICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjMgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjQgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwKKyAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbAorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyNCBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7CisKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI1ICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksCisgICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjUgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOworCisKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjYgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwKKyAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbAorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyNiBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7CisKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI3ICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksCisgICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjcgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOCAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLAorICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI4IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjkgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwKKyAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbAorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyOSBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7CisKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIxMCAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLAorICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIxMCBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLmZpeGVkL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLmZpeGVkL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggY2I5ODM3OC4uZjY0YzZlNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5maXhlZC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MuZml4ZWQvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSwxMCArMSwxMCBAQAotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIxOw0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMjsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjM7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI0Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNTsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjY7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI3Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyODsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjk7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIxMDsNCitkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjE7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjI7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjM7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjQ7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjU7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjY7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjc7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjg7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjk7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEwOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5tb25pdG9yaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLm1vbml0b3JpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCA3NGEyOTc5Li4xMDJmMTVjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLm1vbml0b3JpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLm1vbml0b3JpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLXN0bXRjYWNoaW5nX2hpdF9taXNzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5tb25pdG9yaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MubW9uaXRvcmluZy9idWlsZC54bWwKaW5kZXggZDIzNWJkZS4uNDg5MjgxMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5tb25pdG9yaW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLm1vbml0b3JpbmcvYnVpbGQueG1sCkBAIC03OSw3ICs3OSw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCkBAIC0xMDAsMTMgKzEwMCwxMyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1zdG10Y2FjaGluZ19oaXRfbWlzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLQk8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMvamRiYy1zdG10Y2FjaGluZ19oaXRfbWlzcy1wb29sLnN0YXRlbWVudF9jYWNoZV9zaXplPTUiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjL2pkYmMtc3RtdGNhY2hpbmdfaGl0X21pc3MtcG9vbC53cmFwX2pkYmNfb2JqZWN0cz10cnVlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLm1vbml0b3JpbmcvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5tb25pdG9yaW5nL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA0OWY1MjA1Li5kZjJjOGYxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLm1vbml0b3JpbmcvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MubW9uaXRvcmluZy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTU0LDM0ICs1NCwzNCBAQAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJTdGF0ZW1lbnQgQ2FjaGluZyBIaXQgbWlzcyB0ZXN0cyIpOwogCiAgICAgICAgIGlmIChzaW1wbGVCTVAudGVzdEhpdCgpICYmIGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCJqZGJjL2pkYmMtc3RtdGNhY2hpbmdfaGl0X21pc3MtcG9vbCIsTlVNX0hJVFMpID09IDEgJiYgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woImpkYmMvamRiYy1zdG10Y2FjaGluZ19oaXRfbWlzcy1wb29sIixOVU1fTUlTU0VTKSA9PSA1KSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSElUIHBhc3MiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJISVQgcGFzcyIpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIiBTdGF0ZW1lbnQgQ2FjaGluZyAgLSAgKEhpdCk6ICIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gZWxzZSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSElUIGZhaWwiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJISVQgZmFpbCIpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIiBTdGF0ZW1lbnQgQ2FjaGluZyAgLSAgKEhpdCk6ICIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoc2ltcGxlQk1QLnRlc3RNaXNzKCkgJiYgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woImpkYmMvamRiYy1zdG10Y2FjaGluZ19oaXRfbWlzcy1wb29sIixOVU1fSElUUykgPT0gNiAmJiBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgiamRiYy9qZGJjLXN0bXRjYWNoaW5nX2hpdF9taXNzLXBvb2wiLE5VTV9NSVNTRVMpID09IDcpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJNSVNTIHBhc3MiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNSVNTIHBhc3MiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgU3RhdGVtZW50IENhY2hpbmcgIC0gIChNaXNzKTogIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBlbHNlIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJNSVNTIGZhaWwiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNSVNTIGZhaWwiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgU3RhdGVtZW50IENhY2hpbmcgIC0gIChNaXNzKTogIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChzaW1wbGVCTVAudGVzdEhpdENvbHVtbkluZGV4ZXMoKSAmJiBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgiamRiYy9qZGJjLXN0bXRjYWNoaW5nX2hpdF9taXNzLXBvb2wiLE5VTV9ISVRTKSA9PSA3ICYmIGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCJqZGJjL2pkYmMtc3RtdGNhY2hpbmdfaGl0X21pc3MtcG9vbCIsTlVNX01JU1NFUykgPT0gMTIpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb2x1bW5JbmRleGVzIHBhc3MiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb2x1bW5JbmRleGVzIHBhc3MiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgU3RhdGVtZW50IENhY2hpbmcgIC0gIChoaXQgY29sdW1uSW5kZXhlcykgOiAiLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGVsc2UgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbHVtbkluZGV4ZXMgZmFpbCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbHVtbkluZGV4ZXMgZmFpbCIpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIiBTdGF0ZW1lbnQgQ2FjaGluZyAgLSAgKGhpdCBjb2x1bW5JbmRleGVzKSA6ICIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoc2ltcGxlQk1QLnRlc3RIaXRDb2x1bW5OYW1lcygpICYmIGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCJqZGJjL2pkYmMtc3RtdGNhY2hpbmdfaGl0X21pc3MtcG9vbCIsTlVNX0hJVFMpID09IDggJiYgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woImpkYmMvamRiYy1zdG10Y2FjaGluZ19oaXRfbWlzcy1wb29sIixOVU1fTUlTU0VTKSA9PSAxNykgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbHVtbk5hbWVzIHBhc3MiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb2x1bW5OYW1lcyBwYXNzIik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIFN0YXRlbWVudCBDYWNoaW5nICAtICAoaGl0IGNvbHVtbk5hbWVzKSA6ICIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gZWxzZSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29sdW1uTmFtZXMgZmFpbCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbHVtbk5hbWVzIGZhaWwiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgU3RhdGVtZW50IENhY2hpbmcgIC0gIChoaXQgY29sdW1uTmFtZXMpIDogIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwpAQCAtODksMjAgKzg5LDIwIEBACiAKICAgICBwdWJsaWMgaW50IGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKFN0cmluZyBwb29sTmFtZSwgU3RyaW5nIG1vbml0b3JpbmdTdGF0KSB0aHJvd3MgRXhjZXB0aW9uIHsKIAotCWZpbmFsIFN0cmluZyB1cmxTdHIgPSAic2VydmljZTpqbXg6cm1pOi8vL2puZGkvcm1pOi8vIiArIEhPU1RfTkFNRSArICI6IiArIEpNWF9QT1JUICsgIi9qbXhybWkiOyAgICAKKyAgICBmaW5hbCBTdHJpbmcgdXJsU3RyID0gInNlcnZpY2U6am14OnJtaTovLy9qbmRpL3JtaTovLyIgKyBIT1NUX05BTUUgKyAiOiIgKyBKTVhfUE9SVCArICIvam14cm1pIjsKICAgICAgICAgZmluYWwgSk1YU2VydmljZVVSTCB1cmwgPSBuZXcgSk1YU2VydmljZVVSTCh1cmxTdHIpOwogCi0JZmluYWwgSk1YQ29ubmVjdG9yIGpteENvbm4gPSBKTVhDb25uZWN0b3JGYWN0b3J5LmNvbm5lY3QodXJsKTsKLQlmaW5hbCBNQmVhblNlcnZlckNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGpteENvbm4uZ2V0TUJlYW5TZXJ2ZXJDb25uZWN0aW9uKCk7CisgICAgZmluYWwgSk1YQ29ubmVjdG9yIGpteENvbm4gPSBKTVhDb25uZWN0b3JGYWN0b3J5LmNvbm5lY3QodXJsKTsKKyAgICBmaW5hbCBNQmVhblNlcnZlckNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGpteENvbm4uZ2V0TUJlYW5TZXJ2ZXJDb25uZWN0aW9uKCk7CiAKICAgICAgICAgT2JqZWN0TmFtZSBvYmplY3ROYW1lID0KICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0TmFtZSgiYW14OnBwPS9tb24vc2VydmVyLW1vbltzZXJ2ZXJdLHR5cGU9amRiY3JhLW1vbixuYW1lPXJlc291cmNlcy8iICsgcG9vbE5hbWUpOwogCi0JamF2YXgubWFuYWdlbWVudC5vcGVubWJlYW4uQ29tcG9zaXRlRGF0YVN1cHBvcnQgcmV0dXJuVmFsdWUgPSAKLQkJKGphdmF4Lm1hbmFnZW1lbnQub3Blbm1iZWFuLkNvbXBvc2l0ZURhdGFTdXBwb3J0KSAKLQkJY29ubmVjdGlvbi5nZXRBdHRyaWJ1dGUob2JqZWN0TmFtZSwgbW9uaXRvcmluZ1N0YXQpOworICAgIGphdmF4Lm1hbmFnZW1lbnQub3Blbm1iZWFuLkNvbXBvc2l0ZURhdGFTdXBwb3J0IHJldHVyblZhbHVlID0KKyAgICAgICAgKGphdmF4Lm1hbmFnZW1lbnQub3Blbm1iZWFuLkNvbXBvc2l0ZURhdGFTdXBwb3J0KQorICAgICAgICBjb25uZWN0aW9uLmdldEF0dHJpYnV0ZShvYmplY3ROYW1lLCBtb25pdG9yaW5nU3RhdCk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiIgKyBtb25pdG9yaW5nU3RhdCArICI9IiArIHJldHVyblZhbHVlLmdldCgiY291bnQiKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4iICsgbW9uaXRvcmluZ1N0YXQgKyAiPSIgKyByZXR1cm5WYWx1ZS5nZXQoImNvdW50IikpOwogICAgICAgICByZXR1cm4gbmV3IEludGVnZXIocmV0dXJuVmFsdWUuZ2V0KCJjb3VudCIpLnRvU3RyaW5nKCkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5tb25pdG9yaW5nL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5tb25pdG9yaW5nL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IGYzM2Y2NDEuLjI1YzllZjUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MubW9uaXRvcmluZy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLm1vbml0b3JpbmcvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI3LDcgKzI3LDcgQEAKICAgICAgICAgICAgIDxqbmRpLW5hbWU+Y29tLnN1bi5zMWFzZGV2LmpkYmMuc3RtdGNhY2hpbmcuZWpiLlNpbXBsZUJNUEhvbWU8L2puZGktbmFtZT4KICAgICAgICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgICAgICAgICAgPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+Ci0JCTxqbmRpLW5hbWU+amRiYy9qZGJjLXN0bXRjYWNoaW5nX2hpdF9taXNzPC9qbmRpLW5hbWU+CisgICAgICAgIDxqbmRpLW5hbWU+amRiYy9qZGJjLXN0bXRjYWNoaW5nX2hpdF9taXNzPC9qbmRpLW5hbWU+CiAgICAgICAgICAgICAgICAgPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgogICAgICAgICAgICAgICAgICAgICA8bmFtZT5EQlVTRVI8L25hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxwYXNzd29yZD5EQlBBU1NXT1JEPC9wYXNzd29yZD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MubW9uaXRvcmluZy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5tb25pdG9yaW5nL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggZjgxYmRlOC4uNDE4MDk5ZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5tb25pdG9yaW5nL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5tb25pdG9yaW5nL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTQxLDgzICs0MSw4MyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3RIaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgdGVzdCBTdGFydCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IHRlc3QgU3RhcnQiKTsKICAgICAgICAgQ29ubmVjdGlvbiBmaXJzdENvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBDb25uZWN0aW9uIGxhc3RDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSBkcyA9IG51bGw7CiAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHN0bXQgPSBudWxsOwotCVByZXBhcmVkU3RhdGVtZW50IGZpcnN0U3RhdGVtZW50ID0gbnVsbDsKLQlQcmVwYXJlZFN0YXRlbWVudCBsYXN0U3RhdGVtZW50ID0gbnVsbDsKKyAgICBQcmVwYXJlZFN0YXRlbWVudCBmaXJzdFN0YXRlbWVudCA9IG51bGw7CisgICAgUHJlcGFyZWRTdGF0ZW1lbnQgbGFzdFN0YXRlbWVudCA9IG51bGw7CiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUgPSAiY3VzdG9tZXJfc3RtdF93cmFwcGVyIjsKICAgICAgICAgZHMgPSB0aGlzLmRzOwotCWludCB0YWJsZUluZGV4ID0gMTsKKyAgICBpbnQgdGFibGVJbmRleCA9IDE7CiAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCX1jYXRjaChFeGNlcHRpb24gZXgpIHsKLQl9CisgICAgfWNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgIH0KICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCA3OyBpKyspIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmRleCA9ICIgKyBpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmRleCA9ICIgKyBpKTsKICAgICAgICAgICAgIHRyeSB7CiAKLQkgICAgICAgIGlmKGkgPT0gNikgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gTGFzdCIpOwotCQkgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUgKyB0YWJsZUluZGV4ICsgIiB3aGVyZSBjX3Bob25lPSA/Iik7Ci0JCSAgICBsYXN0U3RhdGVtZW50ID0gc3RtdDsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigibGFzdFN0YXRlbWVudCA6ICIgICsgbGFzdFN0YXRlbWVudCk7Ci0JCX0gZWxzZSB7ICAgCi0JCSAgICBpbnRbXSBjb2x1bW5JbmRleGVzID0ge2krMSwgaSsyfTsKKyAgICAgICAgICAgIGlmKGkgPT0gNikgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gTGFzdCIpOworICAgICAgICAgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUgKyB0YWJsZUluZGV4ICsgIiB3aGVyZSBjX3Bob25lPSA/Iik7CisgICAgICAgICAgICBsYXN0U3RhdGVtZW50ID0gc3RtdDsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibGFzdFN0YXRlbWVudCA6ICIgICsgbGFzdFN0YXRlbWVudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnRbXSBjb2x1bW5JbmRleGVzID0ge2krMSwgaSsyfTsKICAgICAgICAgICAgICAgICAgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUraSArIiB3aGVyZSBjX3Bob25lPSA/Iik7Ci0JCX0KLQkJaWYoaSA9PSAxKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBGaXJzdCIpOwotCQkgICAgZmlyc3RTdGF0ZW1lbnQgPSBzdG10OwotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaXJzdFN0YXRlbWVudCA6ICIgKyBmaXJzdFN0YXRlbWVudCk7Ci0JCX0gCisgICAgICAgIH0KKyAgICAgICAgaWYoaSA9PSAxKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBGaXJzdCIpOworICAgICAgICAgICAgZmlyc3RTdGF0ZW1lbnQgPSBzdG10OworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaXJzdFN0YXRlbWVudCA6ICIgKyBmaXJzdFN0YXRlbWVudCk7CisgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0JCWlmKHN0bXQgIT0gbnVsbCkgewotCSAgICAgICAgICAgIHRyeSB7Ci0JCQlzdG10LmNsb3NlKCk7Ci0JCSAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkge30KLQkJfQorICAgICAgICBpZihzdG10ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgc3RtdC5jbG9zZSgpOworICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHt9CisgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotCXBhc3NlZCA9IChmaXJzdFN0YXRlbWVudCA9PSBsYXN0U3RhdGVtZW50KTsKLQl0cnkgewotCSAgICBpZihmaXJzdFN0YXRlbWVudCAhPSBudWxsKSB7Ci0JCWZpcnN0U3RhdGVtZW50LmNsb3NlKCk7Ci0JICAgIH0KLQkgICAgaWYobGFzdFN0YXRlbWVudCAhPSBudWxsKSB7Ci0JCWxhc3RTdGF0ZW1lbnQuY2xvc2UoKTsKLQkgICAgfQorICAgIHBhc3NlZCA9IChmaXJzdFN0YXRlbWVudCA9PSBsYXN0U3RhdGVtZW50KTsKKyAgICB0cnkgeworICAgICAgICBpZihmaXJzdFN0YXRlbWVudCAhPSBudWxsKSB7CisgICAgICAgIGZpcnN0U3RhdGVtZW50LmNsb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYobGFzdFN0YXRlbWVudCAhPSBudWxsKSB7CisgICAgICAgIGxhc3RTdGF0ZW1lbnQuY2xvc2UoKTsKKyAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChjb25uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IAotCX0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCB0ZXN0IEVuZCIpOwotCXJldHVybiBwYXNzZWQ7CisgICAgICAgICAgICAgICAgfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgIH0KLSAgICAKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCB0ZXN0IEVuZCIpOworICAgIHJldHVybiBwYXNzZWQ7CisgICAgfQorCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdE1pc3MoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBNaXNzIHRlc3QgU3RhcnQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIE1pc3MgdGVzdCBTdGFydCIpOwogICAgICAgICBDb25uZWN0aW9uIGZpcnN0Q29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIENvbm5lY3Rpb24gbGFzdENvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlIGRzID0gbnVsbDsKICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCA9IG51bGw7Ci0JUHJlcGFyZWRTdGF0ZW1lbnQgZmlyc3RTdGF0ZW1lbnQgPSBudWxsOwotCVByZXBhcmVkU3RhdGVtZW50IGxhc3RTdGF0ZW1lbnQgPSBudWxsOworICAgIFByZXBhcmVkU3RhdGVtZW50IGZpcnN0U3RhdGVtZW50ID0gbnVsbDsKKyAgICBQcmVwYXJlZFN0YXRlbWVudCBsYXN0U3RhdGVtZW50ID0gbnVsbDsKICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSA9ICJjdXN0b21lcl9zdG10X3dyYXBwZXIiOwogICAgICAgICBkcyA9IHRoaXMuZHM7Ci0JaW50IHRhYmxlSW5kZXggPSAxOworICAgIGludCB0YWJsZUluZGV4ID0gMTsKIAogICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwogICAgICAgICB0cnkgewpAQCAtMTI3LDE3ICsxMjcsMTcgQEAKICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCA4OyBpKyspIHsKICAgICAgICAgICAgIHRyeSB7CiAKLQkJaWYoaSA9PTcpIHsKLQkJCXN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIiArIHRhYmxlTmFtZSArIHRhYmxlSW5kZXggKyAiIHdoZXJlIGNfcGhvbmU9PyIpOwotCQkJbGFzdFN0YXRlbWVudCA9IHN0bXQ7Ci0JCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsYXN0U3RhdGVtZW50IDogIiAgKyBsYXN0U3RhdGVtZW50KTsKLQkJfSBlbHNlIHsKKyAgICAgICAgaWYoaSA9PTcpIHsKKyAgICAgICAgICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIiArIHRhYmxlTmFtZSArIHRhYmxlSW5kZXggKyAiIHdoZXJlIGNfcGhvbmU9PyIpOworICAgICAgICAgICAgbGFzdFN0YXRlbWVudCA9IHN0bXQ7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsYXN0U3RhdGVtZW50IDogIiAgKyBsYXN0U3RhdGVtZW50KTsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUraSArIiB3aGVyZSBjX3Bob25lPSA/Iik7Ci0JCX0KLQkJaWYoaSA9PSAxKSB7Ci0JCSAgICBmaXJzdFN0YXRlbWVudCA9IHN0bXQ7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpcnN0U3RhdGVtZW50IDogIiArIGZpcnN0U3RhdGVtZW50KTsKLQkJfQorICAgICAgICB9CisgICAgICAgIGlmKGkgPT0gMSkgeworICAgICAgICAgICAgZmlyc3RTdGF0ZW1lbnQgPSBzdG10OworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaXJzdFN0YXRlbWVudCA6ICIgKyBmaXJzdFN0YXRlbWVudCk7CisgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKQEAgLTE0NSwxNTcgKzE0NSwxNTcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBwYXNzZWQgPSBmaXJzdFN0YXRlbWVudCAhPSBsYXN0U3RhdGVtZW50OwotCXRyeSB7Ci0JICAgIGlmKGZpcnN0U3RhdGVtZW50ICE9IG51bGwpIHsKLQkJZmlyc3RTdGF0ZW1lbnQuY2xvc2UoKTsKLQkgICAgfQotCSAgICBpZihsYXN0U3RhdGVtZW50ICE9IG51bGwpIHsKLQkJbGFzdFN0YXRlbWVudC5jbG9zZSgpOwotCSAgICB9Ci0JICAgIGlmKGNvbm4gIT0gbnVsbCkgewotCSAgICAgICAgY29ubi5jbG9zZSgpOwotCSAgICB9Ci0JfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgTWlzcyB0ZXN0IEVuZCIpOworICAgIHRyeSB7CisgICAgICAgIGlmKGZpcnN0U3RhdGVtZW50ICE9IG51bGwpIHsKKyAgICAgICAgZmlyc3RTdGF0ZW1lbnQuY2xvc2UoKTsKKyAgICAgICAgfQorICAgICAgICBpZihsYXN0U3RhdGVtZW50ICE9IG51bGwpIHsKKyAgICAgICAgbGFzdFN0YXRlbWVudC5jbG9zZSgpOworICAgICAgICB9CisgICAgICAgIGlmKGNvbm4gIT0gbnVsbCkgeworICAgICAgICAgICAgY29ubi5jbG9zZSgpOworICAgICAgICB9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgTWlzcyB0ZXN0IEVuZCIpOwogICAgICAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdEhpdENvbHVtbk5hbWVzKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IChDb2x1bW4gTmFtZXMpIHRlc3QgU3RhcnQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCAoQ29sdW1uIE5hbWVzKSB0ZXN0IFN0YXJ0Iik7CiAgICAgICAgIENvbm5lY3Rpb24gZmlyc3RDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgQ29ubmVjdGlvbiBsYXN0Q29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UgZHMgPSBudWxsOwogICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBzdG10ID0gbnVsbDsKLQlQcmVwYXJlZFN0YXRlbWVudCBmaXJzdFN0YXRlbWVudCA9IG51bGw7Ci0JUHJlcGFyZWRTdGF0ZW1lbnQgbGFzdFN0YXRlbWVudCA9IG51bGw7CisgICAgUHJlcGFyZWRTdGF0ZW1lbnQgZmlyc3RTdGF0ZW1lbnQgPSBudWxsOworICAgIFByZXBhcmVkU3RhdGVtZW50IGxhc3RTdGF0ZW1lbnQgPSBudWxsOwogICAgICAgICBTdHJpbmcgdGFibGVOYW1lID0gImN1c3RvbWVyX3N0bXRfd3JhcHBlciI7CiAgICAgICAgIGRzID0gdGhpcy5kczsKLQlpbnQgdGFibGVJbmRleCA9IDE7CisgICAgaW50IHRhYmxlSW5kZXggPSAxOwogICAgICAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCX1jYXRjaChFeGNlcHRpb24gZXgpIHsKLQl9CisgICAgfWNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgIH0KICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCA3OyBpKyspIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmRleCA9ICIgKyBpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmRleCA9ICIgKyBpKTsKICAgICAgICAgICAgIHRyeSB7CiAKLQkgICAgICAgIGlmKGkgPT0gNikgewotCQkgICAgU3RyaW5nW10gY29sdW1uTmFtZXMgPSB7ImNfaWQiLCAiY19waG9uZSJ9OwotCQkgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUgKyB0YWJsZUluZGV4ICsgIiB3aGVyZSBjX3Bob25lPSA/IiwgY29sdW1uTmFtZXMpOwotCQkgICAgbGFzdFN0YXRlbWVudCA9IHN0bXQ7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxhc3RTdGF0ZW1lbnQgOiAiICArIGxhc3RTdGF0ZW1lbnQpOwotCQl9IGVsc2UgaWYoaSA9PTEpIHsgICAKLQkJICAgIFN0cmluZ1tdIGNvbHVtbk5hbWVzID0geyJjX2lkIiwgImNfcGhvbmUifTsKLQkJICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lICsgdGFibGVJbmRleCArICIgd2hlcmUgY19waG9uZT0gPyIsIGNvbHVtbk5hbWVzKTsKLQkJICAgIGZpcnN0U3RhdGVtZW50ID0gc3RtdDsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmlyc3RTdGF0ZW1lbnQgOiAiICsgZmlyc3RTdGF0ZW1lbnQpOwotCQl9IGVsc2UgewotCQkgICAgaW50IGogPSBpICsgMjsKKyAgICAgICAgICAgIGlmKGkgPT0gNikgeworICAgICAgICAgICAgU3RyaW5nW10gY29sdW1uTmFtZXMgPSB7ImNfaWQiLCAiY19waG9uZSJ9OworICAgICAgICAgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUgKyB0YWJsZUluZGV4ICsgIiB3aGVyZSBjX3Bob25lPSA/IiwgY29sdW1uTmFtZXMpOworICAgICAgICAgICAgbGFzdFN0YXRlbWVudCA9IHN0bXQ7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxhc3RTdGF0ZW1lbnQgOiAiICArIGxhc3RTdGF0ZW1lbnQpOworICAgICAgICB9IGVsc2UgaWYoaSA9PTEpIHsKKyAgICAgICAgICAgIFN0cmluZ1tdIGNvbHVtbk5hbWVzID0geyJjX2lkIiwgImNfcGhvbmUifTsKKyAgICAgICAgICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lICsgdGFibGVJbmRleCArICIgd2hlcmUgY19waG9uZT0gPyIsIGNvbHVtbk5hbWVzKTsKKyAgICAgICAgICAgIGZpcnN0U3RhdGVtZW50ID0gc3RtdDsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmlyc3RTdGF0ZW1lbnQgOiAiICsgZmlyc3RTdGF0ZW1lbnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50IGogPSBpICsgMjsKICAgICAgICAgICAgICAgICAgICAgaW50IGsgPSBqICsgMTsKLQkJICAgIFN0cmluZ1tdIGNvbHVtbk5hbWVzID0geyJjX2lkIitqLCAiY19pZCIra307CisgICAgICAgICAgICBTdHJpbmdbXSBjb2x1bW5OYW1lcyA9IHsiY19pZCIraiwgImNfaWQiK2t9OwogICAgICAgICAgICAgICAgICAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZStpICsiIHdoZXJlIGNfcGhvbmU9ID8iLCBjb2x1bW5OYW1lcyk7Ci0JCX0KKyAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICAgICAgfSBmaW5hbGx5IHsKLQkJaWYoc3RtdCAhPSBudWxsKSB7Ci0JICAgICAgICAgICAgdHJ5IHsKLQkJCXN0bXQuY2xvc2UoKTsKLQkJICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQotCQl9CisgICAgICAgIGlmKHN0bXQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzdG10LmNsb3NlKCk7CisgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkge30KKyAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0JcGFzc2VkID0gKGZpcnN0U3RhdGVtZW50ID09IGxhc3RTdGF0ZW1lbnQpOwotCXRyeSB7Ci0JICAgIGlmKGZpcnN0U3RhdGVtZW50ICE9IG51bGwpIHsKLQkJZmlyc3RTdGF0ZW1lbnQuY2xvc2UoKTsKLQkgICAgfQotCSAgICBpZihsYXN0U3RhdGVtZW50ICE9IG51bGwpIHsKLQkJbGFzdFN0YXRlbWVudC5jbG9zZSgpOwotCSAgICB9CisgICAgcGFzc2VkID0gKGZpcnN0U3RhdGVtZW50ID09IGxhc3RTdGF0ZW1lbnQpOworICAgIHRyeSB7CisgICAgICAgIGlmKGZpcnN0U3RhdGVtZW50ICE9IG51bGwpIHsKKyAgICAgICAgZmlyc3RTdGF0ZW1lbnQuY2xvc2UoKTsKKyAgICAgICAgfQorICAgICAgICBpZihsYXN0U3RhdGVtZW50ICE9IG51bGwpIHsKKyAgICAgICAgbGFzdFN0YXRlbWVudC5jbG9zZSgpOworICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGNvbm4gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gCi0JfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IChDb2x1bW4gbmFtZXMpIHRlc3QgRW5kIik7Ci0JcmV0dXJuIHBhc3NlZDsKKyAgICAgICAgICAgICAgICB9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IChDb2x1bW4gbmFtZXMpIHRlc3QgRW5kIik7CisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0SGl0Q29sdW1uSW5kZXhlcygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCAoQ29sdW1uIGluZGV4ZXMpIHRlc3QgU3RhcnQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCAoQ29sdW1uIGluZGV4ZXMpIHRlc3QgU3RhcnQiKTsKICAgICAgICAgQ29ubmVjdGlvbiBmaXJzdENvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBDb25uZWN0aW9uIGxhc3RDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSBkcyA9IG51bGw7CiAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHN0bXQgPSBudWxsOwotCVByZXBhcmVkU3RhdGVtZW50IGZpcnN0U3RhdGVtZW50ID0gbnVsbDsKLQlQcmVwYXJlZFN0YXRlbWVudCBsYXN0U3RhdGVtZW50ID0gbnVsbDsKKyAgICBQcmVwYXJlZFN0YXRlbWVudCBmaXJzdFN0YXRlbWVudCA9IG51bGw7CisgICAgUHJlcGFyZWRTdGF0ZW1lbnQgbGFzdFN0YXRlbWVudCA9IG51bGw7CiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUgPSAiY3VzdG9tZXJfc3RtdF93cmFwcGVyIjsKICAgICAgICAgZHMgPSB0aGlzLmRzOwotCWludCB0YWJsZUluZGV4ID0gMTsKKyAgICBpbnQgdGFibGVJbmRleCA9IDE7CiAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCX1jYXRjaChFeGNlcHRpb24gZXgpIHsKLQl9CisgICAgfWNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgIH0KICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCA3OyBpKyspIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmRleCA9ICIgKyBpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmRleCA9ICIgKyBpKTsKICAgICAgICAgICAgIHRyeSB7CiAKLQkgICAgICAgIGlmKGkgPT0gNikgewotCQkgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUgKyB0YWJsZUluZGV4ICsgIiB3aGVyZSBjX3Bob25lPSA/IiwgY29sdW1uSW5kZXhlczYpOwotCQkgICAgbGFzdFN0YXRlbWVudCA9IHN0bXQ7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxhc3RTdGF0ZW1lbnQgOiAiICArIGxhc3RTdGF0ZW1lbnQpOwotCQl9IGVsc2UgeyAgIAotCQkJLy9GaXJzdCBzdG10IGV4ZWN1dGVkIHdvdWxkIGhhdmUgezIsM30gc2FtZSBhcyBjb2x1bW5JbmRleGVzNgotCQkgICAgaW50W10gY29sdW1uSW5kZXhlcyA9IHtpKzEsIGkrMn07CisgICAgICAgICAgICBpZihpID09IDYpIHsKKyAgICAgICAgICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lICsgdGFibGVJbmRleCArICIgd2hlcmUgY19waG9uZT0gPyIsIGNvbHVtbkluZGV4ZXM2KTsKKyAgICAgICAgICAgIGxhc3RTdGF0ZW1lbnQgPSBzdG10OworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsYXN0U3RhdGVtZW50IDogIiAgKyBsYXN0U3RhdGVtZW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vRmlyc3Qgc3RtdCBleGVjdXRlZCB3b3VsZCBoYXZlIHsyLDN9IHNhbWUgYXMgY29sdW1uSW5kZXhlczYKKyAgICAgICAgICAgIGludFtdIGNvbHVtbkluZGV4ZXMgPSB7aSsxLCBpKzJ9OwogICAgICAgICAgICAgICAgICAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZStpICsiIHdoZXJlIGNfcGhvbmU9ID8iLCBjb2x1bW5JbmRleGVzKTsKLQkJfQotCQlpZihpID09IDEpIHsKLQkJICAgIGZpcnN0U3RhdGVtZW50ID0gc3RtdDsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmlyc3RTdGF0ZW1lbnQgOiAiICsgZmlyc3RTdGF0ZW1lbnQpOwotCQl9IAorICAgICAgICB9CisgICAgICAgIGlmKGkgPT0gMSkgeworICAgICAgICAgICAgZmlyc3RTdGF0ZW1lbnQgPSBzdG10OworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaXJzdFN0YXRlbWVudCA6ICIgKyBmaXJzdFN0YXRlbWVudCk7CisgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0JCWlmKHN0bXQgIT0gbnVsbCkgewotCSAgICAgICAgICAgIHRyeSB7Ci0JCQlzdG10LmNsb3NlKCk7Ci0JCSAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkge30KLQkJfQorICAgICAgICBpZihzdG10ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgc3RtdC5jbG9zZSgpOworICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHt9CisgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotCXBhc3NlZCA9IChmaXJzdFN0YXRlbWVudCA9PSBsYXN0U3RhdGVtZW50KTsKLQl0cnkgewotCSAgICBpZihmaXJzdFN0YXRlbWVudCAhPSBudWxsKSB7Ci0JCWZpcnN0U3RhdGVtZW50LmNsb3NlKCk7Ci0JICAgIH0KLQkgICAgaWYobGFzdFN0YXRlbWVudCAhPSBudWxsKSB7Ci0JCWxhc3RTdGF0ZW1lbnQuY2xvc2UoKTsKLQkgICAgfQorICAgIHBhc3NlZCA9IChmaXJzdFN0YXRlbWVudCA9PSBsYXN0U3RhdGVtZW50KTsKKyAgICB0cnkgeworICAgICAgICBpZihmaXJzdFN0YXRlbWVudCAhPSBudWxsKSB7CisgICAgICAgIGZpcnN0U3RhdGVtZW50LmNsb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYobGFzdFN0YXRlbWVudCAhPSBudWxsKSB7CisgICAgICAgIGxhc3RTdGF0ZW1lbnQuY2xvc2UoKTsKKyAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChjb25uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IAotCX0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCAoQ29sdW1uIGluZGV4ZXMpIHRlc3QgRW5kIik7Ci0JcmV0dXJuIHBhc3NlZDsKKyAgICAgICAgICAgICAgICB9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IChDb2x1bW4gaW5kZXhlcykgdGVzdCBFbmQiKTsKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MubW9uaXRvcmluZy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLm1vbml0b3Jpbmcvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDgyZjM0YTYuLjk4OGQyZTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MubW9uaXRvcmluZy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5tb25pdG9yaW5nL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSwxNjEgKzEsMTYxIEBACi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjE7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIyOw0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMzsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjQ7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI1Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNjsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjc7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI4Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOTsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEwOw0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIxICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwNCi0gICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsDQotDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIxIFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsNCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMiAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksDQotICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbA0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyMiBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjMgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLA0KLSAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjMgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOw0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI0ICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwNCi0gICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI0IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsNCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNSAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksDQotICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbA0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyNSBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7DQotDQotDQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjYgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLA0KLSAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjYgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOw0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI3ICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwNCi0gICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI3IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsNCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOCAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksDQotICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbA0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyOCBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjkgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLA0KLSAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjkgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOw0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIxMCAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksDQotICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbA0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyMTAgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOw0KK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMjsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMzsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNDsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNTsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNjsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNzsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyODsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOTsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTA7CitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMSAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLAorICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsCisKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMiAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLAorICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIyIFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjMgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwKKyAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbAorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyMyBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7CitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNCAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLAorICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI0IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjUgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwKKyAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbAorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyNSBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7CisKKworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNiAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLAorICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI2IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjcgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwKKyAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbAorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyNyBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7CisKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI4ICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksCisgICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjggVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOSAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLAorICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI5IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEwICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksCisgICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEwIFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MubW9uaXRvcmluZy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5tb25pdG9yaW5nL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggY2I5ODM3OC4uZjY0YzZlNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5tb25pdG9yaW5nL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5tb25pdG9yaW5nL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEsMTAgKzEsMTAgQEAKLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjI7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIzOw0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNDsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjU7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI2Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNzsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjg7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI5Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTA7DQorZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIxOworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIyOworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIzOworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI0OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI1OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI2OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI3OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI4OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI5OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIxMDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MvYnVpbGQucHJvcGVydGllcwppbmRleCA3NGEyOTc5Li4xMDJmMTVjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtc3RtdGNhY2hpbmdfaGl0X21pc3MiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MvYnVpbGQueG1sCmluZGV4IGQ1Y2NjMDEuLjkxMGYzOTcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MvYnVpbGQueG1sCkBAIC02OSw3ICs2OSw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCkBAIC05MiwxMyArOTIsMTMgQEAKIAogCiAKLQk8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtc3RtdGNhY2hpbmdfaGl0X21pc3MtcG9vbC5zdGF0ZW1lbnRfY2FjaGVfc2l6ZT01Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotCTxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1zdG10Y2FjaGluZ19oaXRfbWlzcy1wb29sLndyYXBfamRiY19vYmplY3RzPXRydWUiLz4KQEAgLTExMCwxMCArMTEwLDEwIEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtc3RtdGNhY2hpbmdfaGl0X21pc3MtcG9vbC5pZGxlX3RpbWVvdXRfaW5fc2Vjb25kcz0zMDAwIi8+CiAgICA8L2FudGNhbGw+Ci0JPCEtLTxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgorICAgIDwhLS08YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKLQkJICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1zdG10Y2FjaGluZ19oaXRfbWlzcy1wb29sLnByb3BlcnR5LlN0YXRlbWVudENhY2hlVHlwZT0iLz4KKyAgICAgICAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1zdG10Y2FjaGluZ19oaXRfbWlzcy1wb29sLnByb3BlcnR5LlN0YXRlbWVudENhY2hlVHlwZT0iLz4KICAgICA8L2FudGNhbGw+LS0+CiAgICAgPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IGYzM2Y2NDEuLjI1YzllZjUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjcsNyArMjcsNyBAQAogICAgICAgICAgICAgPGpuZGktbmFtZT5jb20uc3VuLnMxYXNkZXYuamRiYy5zdG10Y2FjaGluZy5lamIuU2ltcGxlQk1QSG9tZTwvam5kaS1uYW1lPgogICAgICAgICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgICAgICAgICA8cmVzLXJlZi1uYW1lPkRhdGFTb3VyY2U8L3Jlcy1yZWYtbmFtZT4KLQkJPGpuZGktbmFtZT5qZGJjL2pkYmMtc3RtdGNhY2hpbmdfaGl0X21pc3M8L2puZGktbmFtZT4KKyAgICAgICAgPGpuZGktbmFtZT5qZGJjL2pkYmMtc3RtdGNhY2hpbmdfaGl0X21pc3M8L2puZGktbmFtZT4KICAgICAgICAgICAgICAgICA8ZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CiAgICAgICAgICAgICAgICAgICAgIDxuYW1lPkRCVVNFUjwvbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPHBhc3N3b3JkPkRCUEFTU1dPUkQ8L3Bhc3N3b3JkPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDQ5YTc5OGYuLmY4ZDI0YjggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTQxLDgxICs0MSw4MSBAQAogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3RIaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgdGVzdCBTdGFydCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IHRlc3QgU3RhcnQiKTsKICAgICAgICAgQ29ubmVjdGlvbiBmaXJzdENvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBDb25uZWN0aW9uIGxhc3RDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSBkcyA9IG51bGw7CiAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHN0bXQgPSBudWxsOwotCVByZXBhcmVkU3RhdGVtZW50IGZpcnN0U3RhdGVtZW50ID0gbnVsbDsKLQlQcmVwYXJlZFN0YXRlbWVudCBsYXN0U3RhdGVtZW50ID0gbnVsbDsKKyAgICBQcmVwYXJlZFN0YXRlbWVudCBmaXJzdFN0YXRlbWVudCA9IG51bGw7CisgICAgUHJlcGFyZWRTdGF0ZW1lbnQgbGFzdFN0YXRlbWVudCA9IG51bGw7CiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUgPSAiY3VzdG9tZXJfc3RtdF93cmFwcGVyIjsKICAgICAgICAgZHMgPSB0aGlzLmRzOwotCWludCB0YWJsZUluZGV4ID0gMTsKKyAgICBpbnQgdGFibGVJbmRleCA9IDE7CiAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCX1jYXRjaChFeGNlcHRpb24gZXgpIHsKLQl9CisgICAgfWNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgIH0KICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCA3OyBpKyspIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmRleCA9ICIgKyBpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmRleCA9ICIgKyBpKTsKICAgICAgICAgICAgIHRyeSB7CiAKLQkgICAgICAgIGlmKGkgPT0gNikgewotCQkgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUgKyB0YWJsZUluZGV4ICsgIiB3aGVyZSBjX3Bob25lPSA/Iik7Ci0JCSAgICBsYXN0U3RhdGVtZW50ID0gc3RtdDsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigibGFzdFN0YXRlbWVudCA6ICIgICsgbGFzdFN0YXRlbWVudCk7Ci0JCX0gZWxzZSB7ICAgCi0JCSAgICBpbnRbXSBjb2x1bW5JbmRleGVzID0ge2krMSwgaSsyfTsKKyAgICAgICAgICAgIGlmKGkgPT0gNikgeworICAgICAgICAgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUgKyB0YWJsZUluZGV4ICsgIiB3aGVyZSBjX3Bob25lPSA/Iik7CisgICAgICAgICAgICBsYXN0U3RhdGVtZW50ID0gc3RtdDsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibGFzdFN0YXRlbWVudCA6ICIgICsgbGFzdFN0YXRlbWVudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnRbXSBjb2x1bW5JbmRleGVzID0ge2krMSwgaSsyfTsKICAgICAgICAgICAgICAgICAgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUraSArIiB3aGVyZSBjX3Bob25lPSA/Iik7Ci0JCX0KLQkJaWYoaSA9PSAxKSB7Ci0JCSAgICBmaXJzdFN0YXRlbWVudCA9IHN0bXQ7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpcnN0U3RhdGVtZW50IDogIiArIGZpcnN0U3RhdGVtZW50KTsKLQkJfSAKKyAgICAgICAgfQorICAgICAgICBpZihpID09IDEpIHsKKyAgICAgICAgICAgIGZpcnN0U3RhdGVtZW50ID0gc3RtdDsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmlyc3RTdGF0ZW1lbnQgOiAiICsgZmlyc3RTdGF0ZW1lbnQpOworICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewotCQlpZihzdG10ICE9IG51bGwpIHsKLQkgICAgICAgICAgICB0cnkgewotCQkJc3RtdC5jbG9zZSgpOwotCQkgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHt9Ci0JCX0KKyAgICAgICAgaWYoc3RtdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN0bXQuY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQorICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQlwYXNzZWQgPSAoZmlyc3RTdGF0ZW1lbnQgPT0gbGFzdFN0YXRlbWVudCk7Ci0JdHJ5IHsKLQkgICAgaWYoZmlyc3RTdGF0ZW1lbnQgIT0gbnVsbCkgewotCQlmaXJzdFN0YXRlbWVudC5jbG9zZSgpOwotCSAgICB9Ci0JICAgIGlmKGxhc3RTdGF0ZW1lbnQgIT0gbnVsbCkgewotCQlsYXN0U3RhdGVtZW50LmNsb3NlKCk7Ci0JICAgIH0KKyAgICBwYXNzZWQgPSAoZmlyc3RTdGF0ZW1lbnQgPT0gbGFzdFN0YXRlbWVudCk7CisgICAgdHJ5IHsKKyAgICAgICAgaWYoZmlyc3RTdGF0ZW1lbnQgIT0gbnVsbCkgeworICAgICAgICBmaXJzdFN0YXRlbWVudC5jbG9zZSgpOworICAgICAgICB9CisgICAgICAgIGlmKGxhc3RTdGF0ZW1lbnQgIT0gbnVsbCkgeworICAgICAgICBsYXN0U3RhdGVtZW50LmNsb3NlKCk7CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoY29ubiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgewogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgdGVzdCBFbmQiKTsKLQlyZXR1cm4gcGFzc2VkOworICAgICAgICAgICAgICAgIH0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICB9Ci0gICAgCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgdGVzdCBFbmQiKTsKKyAgICByZXR1cm4gcGFzc2VkOworICAgIH0KKwogICAgIHB1YmxpYyBib29sZWFuIHRlc3RNaXNzKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgTWlzcyB0ZXN0IFN0YXJ0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBNaXNzIHRlc3QgU3RhcnQiKTsKICAgICAgICAgQ29ubmVjdGlvbiBmaXJzdENvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBDb25uZWN0aW9uIGxhc3RDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSBkcyA9IG51bGw7CiAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHN0bXQgPSBudWxsOwotCVByZXBhcmVkU3RhdGVtZW50IGZpcnN0U3RhdGVtZW50ID0gbnVsbDsKLQlQcmVwYXJlZFN0YXRlbWVudCBsYXN0U3RhdGVtZW50ID0gbnVsbDsKKyAgICBQcmVwYXJlZFN0YXRlbWVudCBmaXJzdFN0YXRlbWVudCA9IG51bGw7CisgICAgUHJlcGFyZWRTdGF0ZW1lbnQgbGFzdFN0YXRlbWVudCA9IG51bGw7CiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUgPSAiY3VzdG9tZXJfc3RtdF93cmFwcGVyIjsKICAgICAgICAgZHMgPSB0aGlzLmRzOwotCWludCB0YWJsZUluZGV4ID0gMTsKKyAgICBpbnQgdGFibGVJbmRleCA9IDE7CiAKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICAgICAgdHJ5IHsKQEAgLTEyNSwxNyArMTI1LDE3IEBACiAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgODsgaSsrKSB7CiAgICAgICAgICAgICB0cnkgewogCi0JCWlmKGkgPT03KSB7Ci0JCQlzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIgKyB0YWJsZU5hbWUgKyB0YWJsZUluZGV4ICsgIiB3aGVyZSBjX3Bob25lPT8iKTsKLQkJCWxhc3RTdGF0ZW1lbnQgPSBzdG10OwotCQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibGFzdFN0YXRlbWVudCA6ICIgICsgbGFzdFN0YXRlbWVudCk7Ci0JCX0gZWxzZSB7CisgICAgICAgIGlmKGkgPT03KSB7CisgICAgICAgICAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIgKyB0YWJsZU5hbWUgKyB0YWJsZUluZGV4ICsgIiB3aGVyZSBjX3Bob25lPT8iKTsKKyAgICAgICAgICAgIGxhc3RTdGF0ZW1lbnQgPSBzdG10OworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibGFzdFN0YXRlbWVudCA6ICIgICsgbGFzdFN0YXRlbWVudCk7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lK2kgKyIgd2hlcmUgY19waG9uZT0gPyIpOwotCQl9Ci0JCWlmKGkgPT0gMSkgewotCQkgICAgZmlyc3RTdGF0ZW1lbnQgPSBzdG10OwotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaXJzdFN0YXRlbWVudCA6ICIgKyBmaXJzdFN0YXRlbWVudCk7Ci0JCX0KKyAgICAgICAgfQorICAgICAgICBpZihpID09IDEpIHsKKyAgICAgICAgICAgIGZpcnN0U3RhdGVtZW50ID0gc3RtdDsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmlyc3RTdGF0ZW1lbnQgOiAiICsgZmlyc3RTdGF0ZW1lbnQpOworICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CkBAIC0xNDMsMTU3ICsxNDMsMTU3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcGFzc2VkID0gZmlyc3RTdGF0ZW1lbnQgIT0gbGFzdFN0YXRlbWVudDsKLQl0cnkgewotCSAgICBpZihmaXJzdFN0YXRlbWVudCAhPSBudWxsKSB7Ci0JCWZpcnN0U3RhdGVtZW50LmNsb3NlKCk7Ci0JICAgIH0KLQkgICAgaWYobGFzdFN0YXRlbWVudCAhPSBudWxsKSB7Ci0JCWxhc3RTdGF0ZW1lbnQuY2xvc2UoKTsKLQkgICAgfQotCSAgICBpZihjb25uICE9IG51bGwpIHsKLQkgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkgICAgfQotCX0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIE1pc3MgdGVzdCBFbmQiKTsKKyAgICB0cnkgeworICAgICAgICBpZihmaXJzdFN0YXRlbWVudCAhPSBudWxsKSB7CisgICAgICAgIGZpcnN0U3RhdGVtZW50LmNsb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYobGFzdFN0YXRlbWVudCAhPSBudWxsKSB7CisgICAgICAgIGxhc3RTdGF0ZW1lbnQuY2xvc2UoKTsKKyAgICAgICAgfQorICAgICAgICBpZihjb25uICE9IG51bGwpIHsKKyAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIE1pc3MgdGVzdCBFbmQiKTsKICAgICAgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3RIaXRDb2x1bW5OYW1lcygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCAoQ29sdW1uIE5hbWVzKSB0ZXN0IFN0YXJ0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgKENvbHVtbiBOYW1lcykgdGVzdCBTdGFydCIpOwogICAgICAgICBDb25uZWN0aW9uIGZpcnN0Q29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIENvbm5lY3Rpb24gbGFzdENvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlIGRzID0gbnVsbDsKICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCA9IG51bGw7Ci0JUHJlcGFyZWRTdGF0ZW1lbnQgZmlyc3RTdGF0ZW1lbnQgPSBudWxsOwotCVByZXBhcmVkU3RhdGVtZW50IGxhc3RTdGF0ZW1lbnQgPSBudWxsOworICAgIFByZXBhcmVkU3RhdGVtZW50IGZpcnN0U3RhdGVtZW50ID0gbnVsbDsKKyAgICBQcmVwYXJlZFN0YXRlbWVudCBsYXN0U3RhdGVtZW50ID0gbnVsbDsKICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSA9ICJjdXN0b21lcl9zdG10X3dyYXBwZXIiOwogICAgICAgICBkcyA9IHRoaXMuZHM7Ci0JaW50IHRhYmxlSW5kZXggPSAxOworICAgIGludCB0YWJsZUluZGV4ID0gMTsKICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQl9Y2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JfQorICAgIH1jYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICB9CiAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgNzsgaSsrKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5kZXggPSAiICsgaSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5kZXggPSAiICsgaSk7CiAgICAgICAgICAgICB0cnkgewogCi0JICAgICAgICBpZihpID09IDYpIHsKLQkJICAgIFN0cmluZ1tdIGNvbHVtbk5hbWVzID0geyJjX2lkIiwgImNfcGhvbmUifTsKLQkJICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lICsgdGFibGVJbmRleCArICIgd2hlcmUgY19waG9uZT0gPyIsIGNvbHVtbk5hbWVzKTsKLQkJICAgIGxhc3RTdGF0ZW1lbnQgPSBzdG10OwotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJsYXN0U3RhdGVtZW50IDogIiAgKyBsYXN0U3RhdGVtZW50KTsKLQkJfSBlbHNlIGlmKGkgPT0xKSB7ICAgCi0JCSAgICBTdHJpbmdbXSBjb2x1bW5OYW1lcyA9IHsiY19pZCIsICJjX3Bob25lIn07Ci0JCSAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZSArIHRhYmxlSW5kZXggKyAiIHdoZXJlIGNfcGhvbmU9ID8iLCBjb2x1bW5OYW1lcyk7Ci0JCSAgICBmaXJzdFN0YXRlbWVudCA9IHN0bXQ7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpcnN0U3RhdGVtZW50IDogIiArIGZpcnN0U3RhdGVtZW50KTsKLQkJfSBlbHNlIHsKLQkJICAgIGludCBqID0gaSArIDI7CisgICAgICAgICAgICBpZihpID09IDYpIHsKKyAgICAgICAgICAgIFN0cmluZ1tdIGNvbHVtbk5hbWVzID0geyJjX2lkIiwgImNfcGhvbmUifTsKKyAgICAgICAgICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lICsgdGFibGVJbmRleCArICIgd2hlcmUgY19waG9uZT0gPyIsIGNvbHVtbk5hbWVzKTsKKyAgICAgICAgICAgIGxhc3RTdGF0ZW1lbnQgPSBzdG10OworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsYXN0U3RhdGVtZW50IDogIiAgKyBsYXN0U3RhdGVtZW50KTsKKyAgICAgICAgfSBlbHNlIGlmKGkgPT0xKSB7CisgICAgICAgICAgICBTdHJpbmdbXSBjb2x1bW5OYW1lcyA9IHsiY19pZCIsICJjX3Bob25lIn07CisgICAgICAgICAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZSArIHRhYmxlSW5kZXggKyAiIHdoZXJlIGNfcGhvbmU9ID8iLCBjb2x1bW5OYW1lcyk7CisgICAgICAgICAgICBmaXJzdFN0YXRlbWVudCA9IHN0bXQ7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpcnN0U3RhdGVtZW50IDogIiArIGZpcnN0U3RhdGVtZW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludCBqID0gaSArIDI7CiAgICAgICAgICAgICAgICAgICAgIGludCBrID0gaiArIDE7Ci0JCSAgICBTdHJpbmdbXSBjb2x1bW5OYW1lcyA9IHsiY19pZCIraiwgImNfaWQiK2t9OworICAgICAgICAgICAgU3RyaW5nW10gY29sdW1uTmFtZXMgPSB7ImNfaWQiK2osICJjX2lkIitrfTsKICAgICAgICAgICAgICAgICAgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUraSArIiB3aGVyZSBjX3Bob25lPSA/IiwgY29sdW1uTmFtZXMpOwotCQl9CisgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0JCWlmKHN0bXQgIT0gbnVsbCkgewotCSAgICAgICAgICAgIHRyeSB7Ci0JCQlzdG10LmNsb3NlKCk7Ci0JCSAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkge30KLQkJfQorICAgICAgICBpZihzdG10ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgc3RtdC5jbG9zZSgpOworICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHt9CisgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotCXBhc3NlZCA9IChmaXJzdFN0YXRlbWVudCA9PSBsYXN0U3RhdGVtZW50KTsKLQl0cnkgewotCSAgICBpZihmaXJzdFN0YXRlbWVudCAhPSBudWxsKSB7Ci0JCWZpcnN0U3RhdGVtZW50LmNsb3NlKCk7Ci0JICAgIH0KLQkgICAgaWYobGFzdFN0YXRlbWVudCAhPSBudWxsKSB7Ci0JCWxhc3RTdGF0ZW1lbnQuY2xvc2UoKTsKLQkgICAgfQorICAgIHBhc3NlZCA9IChmaXJzdFN0YXRlbWVudCA9PSBsYXN0U3RhdGVtZW50KTsKKyAgICB0cnkgeworICAgICAgICBpZihmaXJzdFN0YXRlbWVudCAhPSBudWxsKSB7CisgICAgICAgIGZpcnN0U3RhdGVtZW50LmNsb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYobGFzdFN0YXRlbWVudCAhPSBudWxsKSB7CisgICAgICAgIGxhc3RTdGF0ZW1lbnQuY2xvc2UoKTsKKyAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChjb25uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IAotCX0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCAoQ29sdW1uIG5hbWVzKSB0ZXN0IEVuZCIpOwotCXJldHVybiBwYXNzZWQ7CisgICAgICAgICAgICAgICAgfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCAoQ29sdW1uIG5hbWVzKSB0ZXN0IEVuZCIpOworICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdEhpdENvbHVtbkluZGV4ZXMoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgKENvbHVtbiBpbmRleGVzKSB0ZXN0IFN0YXJ0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgKENvbHVtbiBpbmRleGVzKSB0ZXN0IFN0YXJ0Iik7CiAgICAgICAgIENvbm5lY3Rpb24gZmlyc3RDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgQ29ubmVjdGlvbiBsYXN0Q29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UgZHMgPSBudWxsOwogICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBzdG10ID0gbnVsbDsKLQlQcmVwYXJlZFN0YXRlbWVudCBmaXJzdFN0YXRlbWVudCA9IG51bGw7Ci0JUHJlcGFyZWRTdGF0ZW1lbnQgbGFzdFN0YXRlbWVudCA9IG51bGw7CisgICAgUHJlcGFyZWRTdGF0ZW1lbnQgZmlyc3RTdGF0ZW1lbnQgPSBudWxsOworICAgIFByZXBhcmVkU3RhdGVtZW50IGxhc3RTdGF0ZW1lbnQgPSBudWxsOwogICAgICAgICBTdHJpbmcgdGFibGVOYW1lID0gImN1c3RvbWVyX3N0bXRfd3JhcHBlciI7CiAgICAgICAgIGRzID0gdGhpcy5kczsKLQlpbnQgdGFibGVJbmRleCA9IDE7CisgICAgaW50IHRhYmxlSW5kZXggPSAxOwogICAgICAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQl9Y2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JfQorICAgIH1jYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICB9CiAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgNzsgaSsrKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5kZXggPSAiICsgaSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5kZXggPSAiICsgaSk7CiAgICAgICAgICAgICB0cnkgewogCi0JICAgICAgICBpZihpID09IDYpIHsKLQkJICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lICsgdGFibGVJbmRleCArICIgd2hlcmUgY19waG9uZT0gPyIsIGNvbHVtbkluZGV4ZXM2KTsKLQkJICAgIGxhc3RTdGF0ZW1lbnQgPSBzdG10OwotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJsYXN0U3RhdGVtZW50IDogIiAgKyBsYXN0U3RhdGVtZW50KTsKLQkJfSBlbHNlIHsgICAKLQkJCS8vRmlyc3Qgc3RtdCBleGVjdXRlZCB3b3VsZCBoYXZlIHsyLDN9IHNhbWUgYXMgY29sdW1uSW5kZXhlczYKLQkJICAgIGludFtdIGNvbHVtbkluZGV4ZXMgPSB7aSsxLCBpKzJ9OworICAgICAgICAgICAgaWYoaSA9PSA2KSB7CisgICAgICAgICAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZSArIHRhYmxlSW5kZXggKyAiIHdoZXJlIGNfcGhvbmU9ID8iLCBjb2x1bW5JbmRleGVzNik7CisgICAgICAgICAgICBsYXN0U3RhdGVtZW50ID0gc3RtdDsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibGFzdFN0YXRlbWVudCA6ICIgICsgbGFzdFN0YXRlbWVudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvL0ZpcnN0IHN0bXQgZXhlY3V0ZWQgd291bGQgaGF2ZSB7MiwzfSBzYW1lIGFzIGNvbHVtbkluZGV4ZXM2CisgICAgICAgICAgICBpbnRbXSBjb2x1bW5JbmRleGVzID0ge2krMSwgaSsyfTsKICAgICAgICAgICAgICAgICAgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUraSArIiB3aGVyZSBjX3Bob25lPSA/IiwgY29sdW1uSW5kZXhlcyk7Ci0JCX0KLQkJaWYoaSA9PSAxKSB7Ci0JCSAgICBmaXJzdFN0YXRlbWVudCA9IHN0bXQ7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpcnN0U3RhdGVtZW50IDogIiArIGZpcnN0U3RhdGVtZW50KTsKLQkJfSAKKyAgICAgICAgfQorICAgICAgICBpZihpID09IDEpIHsKKyAgICAgICAgICAgIGZpcnN0U3RhdGVtZW50ID0gc3RtdDsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmlyc3RTdGF0ZW1lbnQgOiAiICsgZmlyc3RTdGF0ZW1lbnQpOworICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewotCQlpZihzdG10ICE9IG51bGwpIHsKLQkgICAgICAgICAgICB0cnkgewotCQkJc3RtdC5jbG9zZSgpOwotCQkgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHt9Ci0JCX0KKyAgICAgICAgaWYoc3RtdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN0bXQuY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQorICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQlwYXNzZWQgPSAoZmlyc3RTdGF0ZW1lbnQgPT0gbGFzdFN0YXRlbWVudCk7Ci0JdHJ5IHsKLQkgICAgaWYoZmlyc3RTdGF0ZW1lbnQgIT0gbnVsbCkgewotCQlmaXJzdFN0YXRlbWVudC5jbG9zZSgpOwotCSAgICB9Ci0JICAgIGlmKGxhc3RTdGF0ZW1lbnQgIT0gbnVsbCkgewotCQlsYXN0U3RhdGVtZW50LmNsb3NlKCk7Ci0JICAgIH0KKyAgICBwYXNzZWQgPSAoZmlyc3RTdGF0ZW1lbnQgPT0gbGFzdFN0YXRlbWVudCk7CisgICAgdHJ5IHsKKyAgICAgICAgaWYoZmlyc3RTdGF0ZW1lbnQgIT0gbnVsbCkgeworICAgICAgICBmaXJzdFN0YXRlbWVudC5jbG9zZSgpOworICAgICAgICB9CisgICAgICAgIGlmKGxhc3RTdGF0ZW1lbnQgIT0gbnVsbCkgeworICAgICAgICBsYXN0U3RhdGVtZW50LmNsb3NlKCk7CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoY29ubiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgewogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgKENvbHVtbiBpbmRleGVzKSB0ZXN0IEVuZCIpOwotCXJldHVybiBwYXNzZWQ7CisgICAgICAgICAgICAgICAgfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCAoQ29sdW1uIGluZGV4ZXMpIHRlc3QgRW5kIik7CisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3Mvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDgyZjM0YTYuLjk4OGQyZTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3Mvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3Mvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDE2MSArMSwxNjEgQEAKLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjI7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIzOw0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNDsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjU7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI2Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNzsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjg7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI5Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTA7DQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLA0KLSAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwNCi0NCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOw0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwNCi0gICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIyIFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsNCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMyAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksDQotICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbA0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyMyBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7DQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjQgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLA0KLSAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjQgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOw0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI1ICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwNCi0gICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI1IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsNCi0NCi0NCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNiAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksDQotICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbA0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyNiBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjcgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLA0KLSAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjcgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOw0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI4ICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwNCi0gICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI4IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsNCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOSAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksDQotICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbA0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyOSBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEwICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwNCi0gICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIxMCBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7DQorZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIxOworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIyOworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIzOworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI0OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI1OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI2OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI3OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI4OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI5OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIxMDsKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIxICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksCisgICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwKKworKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyMSBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7CisKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksCisgICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjIgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMyAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLAorICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIzIFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI0ICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksCisgICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjQgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNSAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLAorICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI1IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsKKworCisKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI2ICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksCisgICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjYgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNyAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLAorICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI3IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjggKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwKKyAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbAorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyOCBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7CisKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI5ICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksCisgICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjkgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTAgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwKKyAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbAorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyMTAgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IGNiOTgzNzguLmY2NGM2ZTQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3Mvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEsMTAgKzEsMTAgQEAKLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjI7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIzOw0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNDsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjU7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI2Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNzsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjg7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI5Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTA7DQorZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIxOworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIyOworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIzOworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI0OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI1OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI2OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI3OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI4OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI5OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIxMDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGUyZWE3NDAuLjM3MTRmZWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLXN0cmVzcyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImNsYXNzZXMxMi56aXAiIHZhbHVlPSIvdG1wL2NsYXNzZXMxMi56aXAiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzL2J1aWxkLnhtbAppbmRleCAzMzBmMTFiLi43YzVkNWQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwyMiArNDgsMjIgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1NpbXBsZUJNUC5jbGFzcywgKiovU2ltcGxlQk1QSG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwhLS0gQ3JlYXRlIHRoZSBPUkFDTEUgY29ubmVjdGlvbiBwb29sIGNvbm5lY3Rpb24gcG9vbCBhbmQgZGF0YXNvdXJjZSAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UudHlwZSIgdmFsdWU9ImphdmF4LnNxbC5EYXRhU291cmNlIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtc3RyZXNzIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLmNsYXNzIiB2YWx1ZT0ib3JhY2xlLmpkYmMucG9vbC5PcmFjbGVEYXRhU291cmNlIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLnVzZXIiIHZhbHVlPSIke29yYS51c2VyfSIvPgotCTxwYXJhbSBuYW1lPSJkYi5wd2QiIHZhbHVlPSIke29yYS5wYXNzd2R9Ii8+Ci0JPHBhcmFtIG5hbWU9ImRiLnVybCIgdmFsdWU9IiR7b3JhLnNpZH0iLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIuY2xhc3MiIHZhbHVlPSJvcmFjbGUuamRiYy5wb29sLk9yYWNsZURhdGFTb3VyY2UiLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIudXNlciIgdmFsdWU9IiR7b3JhLnVzZXJ9Ii8+CisgICAgPHBhcmFtIG5hbWU9ImRiLnB3ZCIgdmFsdWU9IiR7b3JhLnBhc3N3ZH0iLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIudXJsIiB2YWx1ZT0iJHtvcmEuc2lkfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtc3RyZXNzLnByb3BlcnR5LlVSTD0ke29yYS51cmx9Ii8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtc3RyZXNzLnByb3BlcnR5LlNlcnZlck5hbWU9MTI5LjE1OC4yMjkuMjM5Ii8+CkBAIC04NiwyMiArODYsMjIgQEAKICAgICAgIDwvYW50Y2FsbD4KIAogCi0gICAgICAKLSAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPiAKKworICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgc3FsIGZyb20gJHtzcWwuZmlsZX0iLz4KICAgICAgIDxzcWwKICAgICAgICAgc3JjPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiCi0JZHJpdmVyPSJvcmFjbGUuamRiYy5kcml2ZXIuT3JhY2xlRHJpdmVyIgotCXVzZXJpZD0iJHtvcmEudXNlcn0iCi0JcGFzc3dvcmQ9IiR7b3JhLnBhc3N3ZH0iCi0JdXJsPSIke29yYS51cmx9IgotCWNsYXNzcGF0aD0iJHtjbGFzc2VzMTIuemlwfSIKLQlvbmVycm9yPSJjb250aW51ZSIKLQlwcmludD0ieWVzIgorICAgIGRyaXZlcj0ib3JhY2xlLmpkYmMuZHJpdmVyLk9yYWNsZURyaXZlciIKKyAgICB1c2VyaWQ9IiR7b3JhLnVzZXJ9IgorICAgIHBhc3N3b3JkPSIke29yYS5wYXNzd2R9IgorICAgIHVybD0iJHtvcmEudXJsfSIKKyAgICBjbGFzc3BhdGg9IiR7Y2xhc3NlczEyLnppcH0iCisgICAgb25lcnJvcj0iY29udGludWUiCisgICAgcHJpbnQ9InllcyIKICAgICAgIC8+Ci0gICAgICAKKwogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTEwLDI0ICsxMTAsMjQgQEAKICAgICAgIDxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBzcWwgZnJvbSAke3NxbC5maWxlfSIvPgogICAgICAgPHNxbAogICAgICAgICBzcmM9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiCi0JZHJpdmVyPSJvcmFjbGUuamRiYy5kcml2ZXIuT3JhY2xlRHJpdmVyIgotCXVzZXJpZD0iJHtvcmEudXNlcn0iCi0JcGFzc3dvcmQ9IiR7b3JhLnBhc3N3ZH0iCi0JdXJsPSIke29yYS51cmx9IgotCWNsYXNzcGF0aD0iJHtjbGFzc2VzMTIuemlwfSIKLQlvbmVycm9yPSJjb250aW51ZSIKLQlwcmludD0ieWVzIgorICAgIGRyaXZlcj0ib3JhY2xlLmpkYmMuZHJpdmVyLk9yYWNsZURyaXZlciIKKyAgICB1c2VyaWQ9IiR7b3JhLnVzZXJ9IgorICAgIHBhc3N3b3JkPSIke29yYS5wYXNzd2R9IgorICAgIHVybD0iJHtvcmEudXJsfSIKKyAgICBjbGFzc3BhdGg9IiR7Y2xhc3NlczEyLnppcH0iCisgICAgb25lcnJvcj0iY29udGludWUiCisgICAgcHJpbnQ9InllcyIKICAgICAgIC8+CiAKLSAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+IAorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KIAotICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPiAKKyAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvczFxZURCLXN0cmVzcyIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1jb25ucG9vbC1jb21tb24iPiAKKyAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1zdHJlc3MiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQppbmRleCBmMjgxN2U3Li40ZmEzNWY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzcy9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCkBAIC0yNCw0OCArMjQsNDggQEAKIGltcG9ydCBjb20uc3VuLnMxYXNkZXYuamRiYy5zdHJlc3MuZWpiLlNpbXBsZUJNUDsKIAogcHVibGljIGNsYXNzIFNpbXBsZUJNUENsaWVudCB7Ci0gICAgCisKICAgICAvLyBJbnZva2Ugd2l0aCBhcmdzOiAjY2xpZW50cywgI21pbnV0ZXMKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAotICAgICAgICBpbnQgbnVtQ2xpZW50cyA9IDEwOyAvLzEwIGNsaWVudHMgCi0JaW50IG51bU1pbnV0ZXMgPSAxMDsgLy8gMTAgbWludXRlcwotCWlmIChhcmdzLmxlbmd0aCA9PSAyKSB7CisgICAgICAgIGludCBudW1DbGllbnRzID0gMTA7IC8vMTAgY2xpZW50cworICAgIGludCBudW1NaW51dGVzID0gMTA7IC8vIDEwIG1pbnV0ZXMKKyAgICBpZiAoYXJncy5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgbnVtQ2xpZW50cyA9IEludGVnZXIucGFyc2VJbnQoIGFyZ3NbMF0gKTsKLQkgICAgbnVtTWludXRlcyA9IEludGVnZXIucGFyc2VJbnQoIGFyZ3NbMV0gKTsKLQl9Ci0gICAgICAgIAorICAgICAgICBudW1NaW51dGVzID0gSW50ZWdlci5wYXJzZUludCggYXJnc1sxXSApOworICAgIH0KKwogICAgICAgICBTaW1wbGVCTVBDbGllbnQgY2xpZW50ID0gbmV3IFNpbXBsZUJNUENsaWVudCgpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiLT0tPS09LT0tPS09LSBSdW5uaW5nIGZvciAiKyBudW1NaW51dGVzCi0JICAgICsiIG1pbnV0ZXMgLT0tPS09LT0tPS09LT0tIik7Ci0JY2xpZW50LnJ1blRlc3QoIG51bUNsaWVudHMsIG51bU1pbnV0ZXMgKTsKLSAgICB9CQotICAgIAorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLT0tPS09LT0tPS09LSBSdW5uaW5nIGZvciAiKyBudW1NaW51dGVzCisgICAgICAgICsiIG1pbnV0ZXMgLT0tPS09LT0tPS09LT0tIik7CisgICAgY2xpZW50LnJ1blRlc3QoIG51bUNsaWVudHMsIG51bU1pbnV0ZXMgKTsKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBydW5UZXN0KGludCBudW1DbGllbnRzLCBpbnQgbnVtTWludXRlcyApIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIFNpbXBsZUJNUENsaWVudFRocmVhZFtdIHRocmVhZHMgPSBuZXcgU2ltcGxlQk1QQ2xpZW50VGhyZWFkWyBudW1DbGllbnRzIF07Ci0JZm9yIChpbnQgaSA9IDAgOyBpIDwgbnVtQ2xpZW50czsgaSsrICkgewotCSAgICB0cnkgewotCSAgICAgICAgdGhyZWFkc1tpXSA9IG5ldyBTaW1wbGVCTVBDbGllbnRUaHJlYWQoaSk7Ci0JICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBjcmVhdGUgdGhyZWFkIDogIiArIGkpOwotCQllLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9Ci0JICAgIHRocmVhZHNbaV0uc3RhcnQoKTsKLQl9Ci0gICAgICAgIAotCS8vTGV0IGl0IGFsbCBydW4gZm9yIGZldyBob3VycyBhbmQgdGhlbiBraWxsIGFsbCB0aHJlYWRzCi0JU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciB0aHJlYWRzIHRvIGRvIHdvcmsgbm93Li4uIik7Ci0JdHJ5IHsKLQkgICAgLy9udW1NaW51dGVzIG1pbiAqIDYwIHNlYyAqIDEwMDAgPSBtaWxsaXMKLQkgICAgVGhyZWFkLnNsZWVwKCBudW1NaW51dGVzICogNjAgKiAxMDAwICk7Ci0JfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgewotCSAgICBpZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgbnVtQ2xpZW50czsgaSsrICkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgdGhyZWFkc1tpXSA9IG5ldyBTaW1wbGVCTVBDbGllbnRUaHJlYWQoaSk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBjcmVhdGUgdGhyZWFkIDogIiArIGkpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgICAgIHRocmVhZHNbaV0uc3RhcnQoKTsKKyAgICB9CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkludGVycnVwdGluZyB0aHJlYWRzIG5vdy4uLiIpOwotCWZvciAoaW50IGkgPSAwIDsgaSA8IG51bUNsaWVudHM7IGkrKyApIHsKLQkgICAgdGhyZWFkc1tpXS5ydW5GbGFnID0gZmFsc2U7Ci0JfQotICAgIH0JCisgICAgLy9MZXQgaXQgYWxsIHJ1biBmb3IgZmV3IGhvdXJzIGFuZCB0aGVuIGtpbGwgYWxsIHRocmVhZHMKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIHRocmVhZHMgdG8gZG8gd29yayBub3cuLi4iKTsKKyAgICB0cnkgeworICAgICAgICAvL251bU1pbnV0ZXMgbWluICogNjAgc2VjICogMTAwMCA9IG1pbGxpcworICAgICAgICBUaHJlYWQuc2xlZXAoIG51bU1pbnV0ZXMgKiA2MCAqIDEwMDAgKTsKKyAgICB9IGNhdGNoKEludGVycnVwdGVkRXhjZXB0aW9uIGllKSB7CisgICAgICAgIGllLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KKworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW50ZXJydXB0aW5nIHRocmVhZHMgbm93Li4uIik7CisgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgbnVtQ2xpZW50czsgaSsrICkgeworICAgICAgICB0aHJlYWRzW2ldLnJ1bkZsYWcgPSBmYWxzZTsKKyAgICB9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MvY2xpZW50L1NpbXBsZUJNUENsaWVudFRocmVhZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MvY2xpZW50L1NpbXBsZUJNUENsaWVudFRocmVhZC5qYXZhCmluZGV4IDlkMTNiODEuLjQxYWEyOTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzL2NsaWVudC9TaW1wbGVCTVBDbGllbnRUaHJlYWQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzcy9jbGllbnQvU2ltcGxlQk1QQ2xpZW50VGhyZWFkLmphdmEKQEAgLTM3LDI0ICszNywyNCBAQAogICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7CiAgICAgICAgIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogICAgICAgICBpbnQgbnVtUmFuID0gMDsKLQlpbnQgbnVtUGFzc2VkID0gMDsKKyAgICBpbnQgbnVtUGFzc2VkID0gMDsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaHJlYWQgOiAiICtpZF8gKyAiIHJ1bm5pbmciKTsKICAgICAgICAgd2hpbGUoIHJ1bkZsYWcgPT0gdHJ1ZSApIHsKLQkgICAgbnVtUmFuKys7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MSggaWRfKSApIHsKKyAgICAgICAgbnVtUmFuKys7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MSggaWRfKSApIHsKICAgICAgICAgICAgICAgICAgICAgbnVtUGFzc2VkKys7Ci0JICAgICAgICB9IAotCSAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgewotCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiRmFpbGVkIHRvIHJ1biBhZnRlciA6ICIgKyBudW1QYXNzZWQgKTsKLQkJYnJlYWs7Ci0JICAgIH0KLQl9CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJGYWlsZWQgdG8gcnVuIGFmdGVyIDogIiArIG51bVBhc3NlZCApOworICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KIAotCVN5c3RlbS5vdXQucHJpbnRsbigiVGhyZWFkIDogIitpZF8gKyAiIHJhbiA6ICIgKyBudW1SYW4gKyAKLQkgICAgIiBwYXNzZWQ6ICIgKyBudW1QYXNzZWQgKTsKLSAgICB9CQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhyZWFkIDogIitpZF8gKyAiIHJhbiA6ICIgKyBudW1SYW4gKworICAgICAgICAiIHBhc3NlZDogIiArIG51bVBhc3NlZCApOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzcy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDBmMmU1MTEuLjQxYzJjZTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNTcsNiArNTcsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzcy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQppbmRleCBhOGQ1NzBjLi42MDFjYWQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzcy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTMwLDc0ICszMCw3NCBAQAogICAgIGludCBpZDsKIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBlbnRpdHlDb250ZXh0KSB7Ci0JQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKLQl0cnkgewotCSAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQl9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOwotCX0KKyAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOworICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBJbnRlZ2VyIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewotCXJldHVybiBuZXcgSW50ZWdlcigxKTsKKyAgICByZXR1cm4gbmV3IEludGVnZXIoMSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoaW50IHRlc3RJZCkgewotCUNvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCXRyeSB7Ci0JICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGluc2VydEVudHJ5KCB0ZXN0SWQsICIxMjM0NTY3ODkwIiwgY29ubik7CiAgICAgICAgICAgICAvL3F1ZXJ5VGFibGUoIGNvbm4gKTsKLQkgICAgZW1wdHlUYWJsZSggY29ubiwgdGVzdElkICk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBjb25uLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQl9Ci0KLQlyZXR1cm4gcGFzc2VkOwotCQorICAgICAgICBlbXB0eVRhYmxlKCBjb25uLCB0ZXN0SWQgKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4uY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CiAgICAgfQotICAgIAorCisgICAgcmV0dXJuIHBhc3NlZDsKKworICAgIH0KKwogCiAgICAgcHJpdmF0ZSB2b2lkIGluc2VydEVudHJ5KCBpbnQgaWQsIFN0cmluZyBwaG9uZSwgQ29ubmVjdGlvbiBjb24gKQogICAgICAgICB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQkKKwogICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBzdG10ID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoCi0JICAgICJpbnNlcnQgaW50byBPX0N1c3RvbWVyIHZhbHVlcyAoPywgPykiICk7CisgICAgICAgICJpbnNlcnQgaW50byBPX0N1c3RvbWVyIHZhbHVlcyAoPywgPykiICk7CiAKLQlzdG10LnNldEludCgxLCBpZCk7Ci0Jc3RtdC5zZXRTdHJpbmcoMiwgcGhvbmUpOworICAgIHN0bXQuc2V0SW50KDEsIGlkKTsKKyAgICBzdG10LnNldFN0cmluZygyLCBwaG9uZSk7CiAKLQlzdG10LmV4ZWN1dGVVcGRhdGUoKTsKLQlzdG10LmNsb3NlKCk7CisgICAgc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBlbXB0eVRhYmxlKCBDb25uZWN0aW9uIGNvbiwgaW50IHRlc3RJZCApIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgCi0JICAgIHN0bXQuZXhlY3V0ZSgiZGVsZXRlICogZnJvbSBPX0N1c3RvbWVyIFdIRVJFIGNfaWQ9Iit0ZXN0SWQpOwotCSAgICBzdG10LmNsb3NlKCk7CisKKyAgICAgICAgc3RtdC5leGVjdXRlKCJkZWxldGUgKiBmcm9tIE9fQ3VzdG9tZXIgV0hFUkUgY19pZD0iK3Rlc3RJZCk7CisgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKLQl9Ci0JICAgIAorICAgIH0KKwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBxdWVyeVRhYmxlKCBDb25uZWN0aW9uIGNvbiApIHsKICAgICAgICAgdHJ5IHsKLQkgICAgU3RhdGVtZW50IHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIFJlc3VsdFNldCBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJzZWxlY3QgKiBmcm9tIE9fQ3VzdG9tZXIiKTsKLQkgICAgd2hpbGUoIHJzLm5leHQoKSApIDsKLQkgICAgcnMuY2xvc2UoKTsKLQkgICAgc3RtdC5jbG9zZSgpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JfQorICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgUmVzdWx0U2V0IHJzID0gc3RtdC5leGVjdXRlUXVlcnkoInNlbGVjdCAqIGZyb20gT19DdXN0b21lciIpOworICAgICAgICB3aGlsZSggcnMubmV4dCgpICkgOworICAgICAgICBycy5jbG9zZSgpOworICAgICAgICBzdG10LmNsb3NlKCk7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzcy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzcy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZTQ5MTRmNi4uZjI1NjA3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3Mvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3Mvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3Mvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvYnVpbGQucHJvcGVydGllcwppbmRleCBhNDEzYTc5Li5hOGRkYjM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLXN0cmVzc2NtcCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLXRlYW0ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLXRlYW0ueG1sIi8+CkBAIC0yNiwxMSArMjYsMTEgQEAKIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci10ZWFtLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXItdGVhbS54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci1yb3N0ZXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci1yb3N0ZXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWNtcC1tYXBwaW5ncy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1jbXAtbWFwcGluZ3MueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iZGJzY2hlbWEiIHZhbHVlPSJzcWwvUm9zdGVyU2NoZW1hLmRic2NoZW1hIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2J1aWxkLnhtbAppbmRleCA4NGMzODQ2Li4zYjQ5YTdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJ1dGlsIi8+CkBAIC01NSw0MyArNTUsNDMgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS10ZWFtLWphciIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVhciIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9InBhY2thZ2Utcm9zdGVyLWphciI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWpiamFyLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9IiR7ZWpiLWphci1yb3N0ZXIueG1sfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iJHtzdW4tZWpiLWphci1yb3N0ZXIueG1sfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9MZWFndWVEZXRhaWxzLmNsYXNzLCoqL1BsYXllckRldGFpbHMuY2xhc3MsCiAgICAgICAgICAgICAqKi9UZWFtRGV0YWlscy5jbGFzcywqKi8qUm9zdGVyKi5jbGFzcywqKi9EZWJ1Zy5jbGFzcyIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UtdGVhbS1qYXIiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVqYmphci1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSIke2VqYi1qYXItdGVhbS54bWx9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSIke3N1bi1lamItamFyLXRlYW0ueG1sfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qTGVhZ3VlKi5jbGFzcywqKi8qUGxheWVyKi5jbGFzcywqKi8qVGVhbSouY2xhc3MsKiovRGVidWcuY2xhc3MsKiovKmRic2NoZW1hKiIgLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS10ZWFtLWVqYi5qYXIiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UtZWFyIj4KICAgICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+ICAgIAorICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+CiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9L2xpYiIgaW5jbHVkZXM9InJlcG9ydGVyLmphciIvPgotICAgICAgPC9lYXI+ICAgICAgICAKKyAgICAgIDwvZWFyPgogICAgIDwvdGFyZ2V0PgogCi0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC0xMDEsMTAgKzEwMSwxMCBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamF2YXguc3FsLkRhdGFTb3VyY2UiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iJHtwb29sbmFtZX0iLz4KLQk8cGFyYW0gbmFtZT0iZGIuY2xhc3MiIHZhbHVlPSJvcmFjbGUuamRiYy5wb29sLk9yYWNsZURhdGFTb3VyY2UiLz4KLQk8cGFyYW0gbmFtZT0iZGIudXNlciIgdmFsdWU9IiR7b3JhLnVzZXJ9Ii8+Ci0JPHBhcmFtIG5hbWU9ImRiLnB3ZCIgdmFsdWU9IiR7b3JhLnBhc3N3ZH0iLz4KLQk8cGFyYW0gbmFtZT0iZGIudXJsIiB2YWx1ZT0iJHtvcmEuc2lkfSIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi5jbGFzcyIgdmFsdWU9Im9yYWNsZS5qZGJjLnBvb2wuT3JhY2xlRGF0YVNvdXJjZSIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi51c2VyIiB2YWx1ZT0iJHtvcmEudXNlcn0iLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIucHdkIiB2YWx1ZT0iJHtvcmEucGFzc3dkfSIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi51cmwiIHZhbHVlPSIke29yYS5zaWR9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KQEAgLTExNCw3ICsxMTQsNyBAQAogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke3Bvb2xuYW1lfS5wcm9wZXJ0eS5VUkw9JHtvcmEudXJsfSIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke3Bvb2xuYW1lfS5wcm9wZXJ0eS5TZXJ2ZXJOYW1lPTEyOS4xNTguMjI5LjIzOSIvPgpAQCAtMTI4LDcgKzEyOCw3IEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXBlcnNpc3RlbmNlLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJwbS5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRvL3MxcWVQTS1zdHJlc3MtY21wIi8+Ci0JPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvczFxZURCLXN0cmVzcy1jbXAiLz4KKyAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9zMXFlREItc3RyZXNzLWNtcCIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS10YWJsZXMiLz4KQEAgLTEzOCwxNyArMTM4LDE3IEBACiAgICAgICA8ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgc3FsIGZyb20gJHtzcWwuZmlsZX0iLz4KICAgICAgIDxzcWwKICAgICAgICAgc3JjPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiCi0JZHJpdmVyPSJvcmFjbGUuamRiYy5kcml2ZXIuT3JhY2xlRHJpdmVyIgotCXVzZXJpZD0iJHtvcmEudXNlcn0iCi0JcGFzc3dvcmQ9IiR7b3JhLnBhc3N3ZH0iCi0JdXJsPSIke29yYS51cmx9IgotCWNsYXNzcGF0aD0iJHtjbGFzc2VzMTIuemlwfSIKLQlvbmVycm9yPSJjb250aW51ZSIKLQlwcmludD0ieWVzIgorICAgIGRyaXZlcj0ib3JhY2xlLmpkYmMuZHJpdmVyLk9yYWNsZURyaXZlciIKKyAgICB1c2VyaWQ9IiR7b3JhLnVzZXJ9IgorICAgIHBhc3N3b3JkPSIke29yYS5wYXNzd2R9IgorICAgIHVybD0iJHtvcmEudXJsfSIKKyAgICBjbGFzc3BhdGg9IiR7Y2xhc3NlczEyLnppcH0iCisgICAgb25lcnJvcj0iY29udGludWUiCisgICAgcHJpbnQ9InllcyIKICAgICAgIC8+Ci0gICAgICAKKwogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXRhYmxlcyIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CkBAIC0xNTcsMTggKzE1NywxOCBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRyb3AtdGFibGVzIj4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBzcWwgZnJvbSAke3NxbC5maWxlfSIvPgogICAgICAgPHNxbAogICAgICAgICBzcmM9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiCi0JZHJpdmVyPSJvcmFjbGUuamRiYy5kcml2ZXIuT3JhY2xlRHJpdmVyIgotCXVzZXJpZD0iJHtvcmEudXNlcn0iCi0JcGFzc3dvcmQ9IiR7b3JhLnBhc3N3ZH0iCi0JdXJsPSIke29yYS51cmx9IgotCWNsYXNzcGF0aD0iJHtjbGFzc2VzMTIuemlwfSIKLQlvbmVycm9yPSJjb250aW51ZSIKLQlwcmludD0ieWVzIgorICAgIGRyaXZlcj0ib3JhY2xlLmpkYmMuZHJpdmVyLk9yYWNsZURyaXZlciIKKyAgICB1c2VyaWQ9IiR7b3JhLnVzZXJ9IgorICAgIHBhc3N3b3JkPSIke29yYS5wYXNzd2R9IgorICAgIHVybD0iJHtvcmEudXJsfSIKKyAgICBjbGFzc3BhdGg9IiR7Y2xhc3NlczEyLnppcH0iCisgICAgb25lcnJvcj0iY29udGludWUiCisgICAgcHJpbnQ9InllcyIKICAgICAgIC8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTE3NiwxNCArMTc2LDE0IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0icG0ucmVzb3VyY2UubmFtZSIgdmFsdWU9Impkby9zMXFlUE0tc3RyZXNzLWNtcCIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPiAKKyAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvczFxZURCLXN0cmVzcy1jbXAiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4gCisgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9IiR7cG9vbG5hbWV9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRyb3AtdGFibGVzIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvY2xpZW50L1Jvc3RlckNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2NsaWVudC9Sb3N0ZXJDbGllbnQuamF2YQppbmRleCA0MDNiY2Q4Li44ZGNjMjMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvY2xpZW50L1Jvc3RlckNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9jbGllbnQvUm9zdGVyQ2xpZW50LmphdmEKQEAgLTIzLDQ4ICsyMyw0OCBAQAogaW1wb3J0IGNvbS5zdW4uczFhc2Rldi5qZGJjLnN0cmVzczEuZWpiLio7CiAKIHB1YmxpYyBjbGFzcyBSb3N0ZXJDbGllbnQgewotICAgIAorCiAgICAgLy8gSW52b2tlIHdpdGggYXJnczogI2NsaWVudHMsICNtaW51dGVzCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLSAgICAgICAgaW50IG51bUNsaWVudHMgPSAxMDsgLy8xMCBjbGllbnRzIAotCWludCBudW1NaW51dGVzID0gMTA7IC8vIDEwIG1pbnV0ZXMKLQlpZiAoYXJncy5sZW5ndGggPT0gMikgeworICAgICAgICBpbnQgbnVtQ2xpZW50cyA9IDEwOyAvLzEwIGNsaWVudHMKKyAgICBpbnQgbnVtTWludXRlcyA9IDEwOyAvLyAxMCBtaW51dGVzCisgICAgaWYgKGFyZ3MubGVuZ3RoID09IDIpIHsKICAgICAgICAgICAgIG51bUNsaWVudHMgPSBJbnRlZ2VyLnBhcnNlSW50KCBhcmdzWzBdICk7Ci0JICAgIG51bU1pbnV0ZXMgPSBJbnRlZ2VyLnBhcnNlSW50KCBhcmdzWzFdICk7Ci0JfQotICAgICAgICAKKyAgICAgICAgbnVtTWludXRlcyA9IEludGVnZXIucGFyc2VJbnQoIGFyZ3NbMV0gKTsKKyAgICB9CisKICAgICAgICAgUm9zdGVyQ2xpZW50IGNsaWVudCA9IG5ldyBSb3N0ZXJDbGllbnQoKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIi09LT0tPS09LT0tPS0gUnVubmluZyBmb3IgIisgbnVtTWludXRlcwotCSAgICArIiBtaW51dGVzIC09LT0tPS09LT0tPS09LSIpOwotCWNsaWVudC5ydW5UZXN0KCBudW1DbGllbnRzLCBudW1NaW51dGVzICk7Ci0gICAgfQkKLSAgICAKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi09LT0tPS09LT0tPS0gUnVubmluZyBmb3IgIisgbnVtTWludXRlcworICAgICAgICArIiBtaW51dGVzIC09LT0tPS09LT0tPS09LSIpOworICAgIGNsaWVudC5ydW5UZXN0KCBudW1DbGllbnRzLCBudW1NaW51dGVzICk7CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgcnVuVGVzdChpbnQgbnVtQ2xpZW50cywgaW50IG51bU1pbnV0ZXMgKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBSb3N0ZXJDbGllbnRUaHJlYWRbXSB0aHJlYWRzID0gbmV3IFJvc3RlckNsaWVudFRocmVhZFsgbnVtQ2xpZW50cyBdOwotCWZvciAoaW50IGkgPSAwIDsgaSA8IG51bUNsaWVudHM7IGkrKyApIHsKLQkgICAgdHJ5IHsKLQkgICAgICAgIHRocmVhZHNbaV0gPSBuZXcgUm9zdGVyQ2xpZW50VGhyZWFkKGkpOwotCSAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgewotCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgY3JlYXRlIHRocmVhZCA6ICIgKyBpKTsKLQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgfQotCSAgICB0aHJlYWRzW2ldLnN0YXJ0KCk7Ci0JfQotICAgICAgICAKLQkvL0xldCBpdCBhbGwgcnVuIGZvciBmZXcgaG91cnMgYW5kIHRoZW4ga2lsbCBhbGwgdGhyZWFkcwotCVN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgdGhyZWFkcyB0byBkbyB3b3JrIG5vdy4uLiIpOwotCXRyeSB7Ci0JICAgIC8vbnVtTWludXRlcyBtaW4gKiA2MCBzZWMgKiAxMDAwID0gbWlsbGlzCi0JICAgIFRocmVhZC5zbGVlcCggbnVtTWludXRlcyAqIDYwICogMTAwMCApOwotCX0gY2F0Y2goSW50ZXJydXB0ZWRFeGNlcHRpb24gaWUpIHsKLQkgICAgaWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IG51bUNsaWVudHM7IGkrKyApIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHRocmVhZHNbaV0gPSBuZXcgUm9zdGVyQ2xpZW50VGhyZWFkKGkpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgY3JlYXRlIHRocmVhZCA6ICIgKyBpKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgICAgICB0aHJlYWRzW2ldLnN0YXJ0KCk7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbnRlcnJ1cHRpbmcgdGhyZWFkcyBub3cuLi4iKTsKLQlmb3IgKGludCBpID0gMCA7IGkgPCBudW1DbGllbnRzOyBpKysgKSB7Ci0JICAgIHRocmVhZHNbaV0ucnVuRmxhZyA9IGZhbHNlOwotCX0KLSAgICB9CQorICAgIC8vTGV0IGl0IGFsbCBydW4gZm9yIGZldyBob3VycyBhbmQgdGhlbiBraWxsIGFsbCB0aHJlYWRzCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciB0aHJlYWRzIHRvIGRvIHdvcmsgbm93Li4uIik7CisgICAgdHJ5IHsKKyAgICAgICAgLy9udW1NaW51dGVzIG1pbiAqIDYwIHNlYyAqIDEwMDAgPSBtaWxsaXMKKyAgICAgICAgVGhyZWFkLnNsZWVwKCBudW1NaW51dGVzICogNjAgKiAxMDAwICk7CisgICAgfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgeworICAgICAgICBpZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CisKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludGVycnVwdGluZyB0aHJlYWRzIG5vdy4uLiIpOworICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IG51bUNsaWVudHM7IGkrKyApIHsKKyAgICAgICAgdGhyZWFkc1tpXS5ydW5GbGFnID0gZmFsc2U7CisgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9jbGllbnQvUm9zdGVyQ2xpZW50VGhyZWFkLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvY2xpZW50L1Jvc3RlckNsaWVudFRocmVhZC5qYXZhCmluZGV4IGFmYjI5ZDguLjBhNWJkZmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9jbGllbnQvUm9zdGVyQ2xpZW50VGhyZWFkLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2NsaWVudC9Sb3N0ZXJDbGllbnRUaHJlYWQuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXR1cyA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBSb3N0ZXJDbGllbnRUaHJlYWQoIGludCBjbGllbnRJRCApIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBjbGllbnRJRF8gPSBjbGllbnRJRDsKICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CkBAIC00NCwyMiArNDQsMjIgQEAKICAgICB9CiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogICAgICAgICBpbnQgbnVtUmFuID0gMDsKLQlpbnQgbnVtUGFzc2VkID0gMDsKKyAgICBpbnQgbnVtUGFzc2VkID0gMDsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaHJlYWQgOiAiICtjbGllbnRJRF8gKyAiIHJ1bm5pbmciKTsKICAgICAgICAgd2hpbGUoIHJ1bkZsYWcgPT0gdHJ1ZSApIHsKLQkgICAgbnVtUmFuKys7CisgICAgICAgIG51bVJhbisrOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpbnNlcnRJbmZvKG15Um9zdGVyKTsKICAgICAgICAgICAgICAgICBnZXRTb21lSW5mbyhteVJvc3Rlcik7CiAgICAgICAgICAgICAgICAgZ2V0TW9yZUluZm8obXlSb3N0ZXIpOwotCQludW1QYXNzZWQrKzsKKyAgICAgICAgbnVtUGFzc2VkKys7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkZhaWxlZCB0byBydW4gYWZ0ZXIgOiAiICsgbnVtUGFzc2VkICk7Ci0JCWJyZWFrOwotCSAgICB9CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJGYWlsZWQgdG8gcnVuIGFmdGVyIDogIiArIG51bVBhc3NlZCApOworICAgICAgICBicmVhazsKICAgICAgICAgfQotCVN5c3RlbS5vdXQucHJpbnRsbigiVGhyZWFkOiAiICsgY2xpZW50SURfICsgIiByYW46ICIgKyBudW1SYW4gKyAKLQkgICAgIiBwYXNzZWQ6ICIgKyBudW1QYXNzZWQgKTsKKyAgICAgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhyZWFkOiAiICsgY2xpZW50SURfICsgIiByYW46ICIgKyBudW1SYW4gKworICAgICAgICAiIHBhc3NlZDogIiArIG51bVBhc3NlZCApOwogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZ2V0U29tZUluZm8oUm9zdGVyIG15Um9zdGVyKSB7CkBAIC0xMTgsNyArMTE4LDcgQEAKICAgICAgICAgICAgIHBsYXllckxpc3QgPSBteVJvc3Rlci5nZXRQbGF5ZXJzQnlQb3NpdGlvbigiZGVmZW5kZXIiKTsKICAgICAgICAgICAgIHBsYXllckxpc3QgPSBteVJvc3Rlci5nZXRBbGxQbGF5ZXJzKCk7CiAgICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0UGxheWVyc05vdE9uVGVhbSgpOwotICAgICAgICAgICAgcGxheWVyTGlzdCA9IG15Um9zdGVyLmdldFBsYXllcnNCeVBvc2l0aW9uQW5kTmFtZSgicG93ZXIgZm9yd2FyZCIsIAorICAgICAgICAgICAgcGxheWVyTGlzdCA9IG15Um9zdGVyLmdldFBsYXllcnNCeVBvc2l0aW9uQW5kTmFtZSgicG93ZXIgZm9yd2FyZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJKYWNrIFBhdHRlcnNvbiIpOwogICAgICAgICAgICAgcGxheWVyTGlzdCA9IG15Um9zdGVyLmdldFBsYXllcnNCeUNpdHkoIlRydWNrZWUiKTsKICAgICAgICAgICAgIHBsYXllckxpc3QgPSBteVJvc3Rlci5nZXRQbGF5ZXJzQnlTcG9ydCgiU29jY2VyIik7CkBAIC0xNjUsNyArMTY1LDcgQEAKIAogICAgICAgICAgICAgbXlSb3N0ZXIuY3JlYXRlVGVhbUluTGVhZ3VlKG5ldyBUZWFtRGV0YWlscygKICAgICAgICAgICAgICAgICAiVDIiLCAiR29waGVycyIsICJNYW50ZWNhIiksICJMMSIpOwotICAgICAgICAgICAKKwogICAgICAgICAgICAgbXlSb3N0ZXIuY3JlYXRlVGVhbUluTGVhZ3VlKG5ldyBUZWFtRGV0YWlscygKICAgICAgICAgICAgICAgICAiVDMiLCAiRGVlciIsICJCb2RpZSIpLCAiTDIiKTsKIApAQCAtMjgzLDcgKzI4Myw3IEBACiAgICAgICAgICAgICAvLyBQbGF5ZXJzLCBubyB0ZWFtCiAgICAgICAgICAgICBteVJvc3Rlci5jcmVhdGVQbGF5ZXIobmV3IFBsYXllckRldGFpbHMoCiAgICAgICAgICAgICAgICAgIlAyNiIsICJIb2JpZSBKYWNrc29uIiwgInBpdGNoZXIiLCA1ODIuMDApKTsKLSAgICAgICAgICAKKwogICAgICAgICAgICAgbXlSb3N0ZXIuY3JlYXRlUGxheWVyKG5ldyBQbGF5ZXJEZXRhaWxzKAogICAgICAgICAgICAgICAgICJQMjciLCAiTWVsaW5kYSBLZW5kYWxsIiwgImNhdGNoZXIiLCA2NzcuMDApKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2VqYi9MZWFndWVCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL0xlYWd1ZUJlYW4uamF2YQppbmRleCA0MTk1YjY0Li5mNmVkODRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL0xlYWd1ZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL0xlYWd1ZUJlYW4uamF2YQpAQCAtMjksNyArMjksNyBAQAogCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRMZWFndWVJZCgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldExlYWd1ZUlkKFN0cmluZyBpZCk7Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldE5hbWUoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKIApAQCAtNzMsMzEgKzczLDMxIEBACiAgICAgICAgIHNldFNwb3J0KHNwb3J0KTsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgc3BvcnQpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24geyB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgY3R4KSB7CiAgICAgICAgIGNvbnRleHQgPSBjdHg7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgewogICAgICAgICBjb250ZXh0ID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIC8vRGVidWcucHJpbnQoIkxlYWd1ZUJlYW4gZWpiUmVtb3ZlIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiTGVhZ3VlQmVhbiBlamJMb2FkIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7CiAgICAgICAgIC8vRGVidWcucHJpbnQoIkxlYWd1ZUJlYW4gZWpiU3RvcmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7IH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgeyB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL0xvY2FsTGVhZ3VlSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2VqYi9Mb2NhbExlYWd1ZUhvbWUuamF2YQppbmRleCA2ZGM5OWNhLi4yNzA0ODQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL0xvY2FsTGVhZ3VlSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9lamIvTG9jYWxMZWFndWVIb21lLmphdmEKQEAgLTIwLDEwICsyMCwxMCBAQAogaW1wb3J0IGpha2FydGEuZWpiLio7CiAKIHB1YmxpYyBpbnRlcmZhY2UgTG9jYWxMZWFndWVIb21lIGV4dGVuZHMgRUpCTG9jYWxIb21lIHsKLSAgICAKKwogICAgIHB1YmxpYyBMb2NhbExlYWd1ZSBjcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBzcG9ydCkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBMb2NhbExlYWd1ZSBmaW5kQnlQcmltYXJ5S2V5IChTdHJpbmcgaWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL0xvY2FsUGxheWVySG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2VqYi9Mb2NhbFBsYXllckhvbWUuamF2YQppbmRleCAyYjNhZTc2Li5kYTQ2NTAwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL0xvY2FsUGxheWVySG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9lamIvTG9jYWxQbGF5ZXJIb21lLmphdmEKQEAgLTIwLDM5ICsyMCwzOSBAQAogaW1wb3J0IGpha2FydGEuZWpiLio7CiAKIHB1YmxpYyBpbnRlcmZhY2UgTG9jYWxQbGF5ZXJIb21lIGV4dGVuZHMgRUpCTG9jYWxIb21lIHsKLSAgICAKKwogICAgIHB1YmxpYyBMb2NhbFBsYXllciBjcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBwb3NpdGlvbiwKICAgICAgICAgZG91YmxlIHNhbGFyeSkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBMb2NhbFBsYXllciBmaW5kQnlQcmltYXJ5S2V5IChTdHJpbmcgaWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247Ci0gICAgCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UG9zaXRpb24oU3RyaW5nIHBvc2l0aW9uKSAKKworICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBvc2l0aW9uKFN0cmluZyBwb3NpdGlvbikKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5SGlnaGVyU2FsYXJ5KFN0cmluZyBuYW1lKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U2FsYXJ5UmFuZ2UoZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVNhbGFyeVJhbmdlKGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5TGVhZ3VlKExvY2FsTGVhZ3VlIGxlYWd1ZSkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5TGVhZ3VlKExvY2FsTGVhZ3VlIGxlYWd1ZSkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVNwb3J0KFN0cmluZyBzcG9ydCkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U3BvcnQoU3RyaW5nIHNwb3J0KQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5Q2l0eShTdHJpbmcgY2l0eSkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5Q2l0eShTdHJpbmcgY2l0eSkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmROb3RPblRlYW0oKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kTm90T25UZWFtKCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBvc2l0aW9uQW5kTmFtZShTdHJpbmcgcG9zaXRpb24sIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBvc2l0aW9uQW5kTmFtZShTdHJpbmcgcG9zaXRpb24sCiAgICAgICAgIFN0cmluZyBuYW1lKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5VGVzdCAoU3RyaW5nIHBhcm0xLCBTdHJpbmcgcGFybTIsIFN0cmluZyBwYXJtMykKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9lamIvTG9jYWxUZWFtSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2VqYi9Mb2NhbFRlYW1Ib21lLmphdmEKaW5kZXggZDBmMmZhOC4uOWY5MTU1MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2VqYi9Mb2NhbFRlYW1Ib21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2VqYi9Mb2NhbFRlYW1Ib21lLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIHB1YmxpYyBpbnRlcmZhY2UgTG9jYWxUZWFtSG9tZSBleHRlbmRzIEVKQkxvY2FsSG9tZSB7CiAgICAgcHVibGljIExvY2FsVGVhbSBjcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBjaXR5KQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIExvY2FsVGVhbSBmaW5kQnlQcmltYXJ5S2V5IChTdHJpbmcgaWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL1BsYXllckJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9lamIvUGxheWVyQmVhbi5qYXZhCmluZGV4IDY5NGJkNjAuLjFlNTU1ZTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9lamIvUGxheWVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9lamIvUGxheWVyQmVhbi5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgLy8gQWNjZXNzIG1ldGhvZHMgZm9yIHBlcnNpc3RlbnQgZmllbGRzCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQbGF5ZXJJZCgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFBsYXllcklkKFN0cmluZyBpZCk7Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldE5hbWUoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKIApAQCAtNTEsMTMgKzUxLDEzIEBACiAKICAgICAvLyBCdXNpbmVzcyBtZXRob2RzCiAgICAgcHVibGljIENvbGxlY3Rpb24gZ2V0TGVhZ3VlcygpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewotICAgICAgICAgTG9jYWxQbGF5ZXIgcGxheWVyID0gCisgICAgICAgICBMb2NhbFBsYXllciBwbGF5ZXIgPQogICAgICAgICAgICAgIChMb2NhbFBsYXllciljb250ZXh0LmdldEVKQkxvY2FsT2JqZWN0KCk7CiAgICAgICAgICByZXR1cm4gZWpiU2VsZWN0TGVhZ3VlcyhwbGF5ZXIpOwogICAgIH0KIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGdldFNwb3J0cygpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewotICAgICAgICAgTG9jYWxQbGF5ZXIgcGxheWVyID0gCisgICAgICAgICBMb2NhbFBsYXllciBwbGF5ZXIgPQogICAgICAgICAgICAgIChMb2NhbFBsYXllciljb250ZXh0LmdldEVKQkxvY2FsT2JqZWN0KCk7CiAgICAgICAgICByZXR1cm4gZWpiU2VsZWN0U3BvcnRzKHBsYXllcik7CiAgICAgfQpAQCAtNzMsMzEgKzczLDMxIEBACiAgICAgICAgIHNldFNhbGFyeShzYWxhcnkpOwogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBwb3NpdGlvbiwKICAgICAgICAgZG91YmxlIHNhbGFyeSkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7IH0KIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBjdHgpIHsKICAgICAgICAgY29udGV4dCA9IGN0eDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKSB7CiAgICAgICAgIGNvbnRleHQgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiUGxheWVyQmVhbiBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewogICAgICAgICAvL0RlYnVnLnByaW50KCJQbGF5ZXJCZWFuIGVqYkxvYWQiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiUGxheWVyQmVhbiBlamJTdG9yZSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7IH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9lamIvUm9zdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL1Jvc3Rlci5qYXZhCmluZGV4IDI3NDA0N2YuLmY2MDc0ZGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9lamIvUm9zdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2VqYi9Sb3N0ZXIuamF2YQpAQCAtMjIsNTUgKzIyLDU1IEBACiBpbXBvcnQgY29tLnN1bi5zMWFzZGV2LmpkYmMuc3RyZXNzMS51dGlsLio7CiAKIHB1YmxpYyBpbnRlcmZhY2UgUm9zdGVyIGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAKKwogICAgIC8vIFBsYXllcnMKIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVBsYXllcihQbGF5ZXJEZXRhaWxzIGRldGFpbHMpIAorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVBsYXllcihQbGF5ZXJEZXRhaWxzIGRldGFpbHMpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgdm9pZCBhZGRQbGF5ZXIoU3RyaW5nIHBsYXllcklkLCBTdHJpbmcgdGVhbUlkKSAKKyAgICBwdWJsaWMgdm9pZCBhZGRQbGF5ZXIoU3RyaW5nIHBsYXllcklkLCBTdHJpbmcgdGVhbUlkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyB2b2lkIGRyb3BQbGF5ZXIoU3RyaW5nIHBsYXllcklkLCBTdHJpbmcgdGVhbUlkKSAKKyAgICBwdWJsaWMgdm9pZCBkcm9wUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBQbGF5ZXJEZXRhaWxzIGdldFBsYXllcihTdHJpbmcgcGxheWVySWQpIAorICAgIHB1YmxpYyBQbGF5ZXJEZXRhaWxzIGdldFBsYXllcihTdHJpbmcgcGxheWVySWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNPZlRlYW0oU3RyaW5nIHRlYW1JZCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtKFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNPZlRlYW1Db3B5KFN0cmluZyB0ZWFtSWQpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbUNvcHkoU3RyaW5nIHRlYW1JZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5UG9zaXRpb24oU3RyaW5nIHBvc2l0aW9uKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVBvc2l0aW9uKFN0cmluZyBwb3NpdGlvbikKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5SGlnaGVyU2FsYXJ5KFN0cmluZyBuYW1lKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U2FsYXJ5UmFuZ2UoZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U2FsYXJ5UmFuZ2UoZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUxlYWd1ZUlkKFN0cmluZyBsZWFndWVJZCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlMZWFndWVJZChTdHJpbmcgbGVhZ3VlSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVNwb3J0KFN0cmluZyBzcG9ydCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTcG9ydChTdHJpbmcgc3BvcnQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUNpdHkoU3RyaW5nIGNpdHkpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5Q2l0eShTdHJpbmcgY2l0eSkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0QWxsUGxheWVycygpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0QWxsUGxheWVycygpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNOb3RPblRlYW0oKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNOb3RPblRlYW0oKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUoU3RyaW5nIHBvc2l0aW9uLCAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVBvc2l0aW9uQW5kTmFtZShTdHJpbmcgcG9zaXRpb24sCiAgICAgICAgIFN0cmluZyBuYW1lKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRMZWFndWVzT2ZQbGF5ZXIoU3RyaW5nIHBsYXllcklkKQpAQCAtODEsMjcgKzgxLDI3IEBACiAKICAgICAvLyBUZWFtcwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRUZWFtc09mTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRUZWFtc09mTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRlYW1JbkxlYWd1ZShUZWFtRGV0YWlscyBkZXRhaWxzLCBTdHJpbmcgbGVhZ3VlSWQpIAorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRlYW1JbkxlYWd1ZShUZWFtRGV0YWlscyBkZXRhaWxzLCBTdHJpbmcgbGVhZ3VlSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVUZWFtKFN0cmluZyB0ZWFtSWQpIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVRlYW0oU3RyaW5nIHRlYW1JZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBUZWFtRGV0YWlscyBnZXRUZWFtKFN0cmluZyB0ZWFtSWQpIAorICAgIHB1YmxpYyBUZWFtRGV0YWlscyBnZXRUZWFtKFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICAvLyBMZWFndWVzCiAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVMZWFndWUoTGVhZ3VlRGV0YWlscyBkZXRhaWxzKSAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVMZWFndWUoTGVhZ3VlRGV0YWlscyBkZXRhaWxzKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBMZWFndWVEZXRhaWxzIGdldExlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIAorICAgIHB1YmxpYyBMZWFndWVEZXRhaWxzIGdldExlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICAvLyBUZXN0CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL1Jvc3RlckJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9lamIvUm9zdGVyQmVhbi5qYXZhCmluZGV4IDU5MmE2YjUuLmVjOWIzZDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9lamIvUm9zdGVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9lamIvUm9zdGVyQmVhbi5qYXZhCkBAIC00MywxNyArNDMsMTcgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVBsYXllcihQbGF5ZXJEZXRhaWxzIGRldGFpbHMpIHsgCisgICAgcHVibGljIHZvaWQgY3JlYXRlUGxheWVyKFBsYXllckRldGFpbHMgZGV0YWlscykgewogICAgICAgICAvL0RlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGNyZWF0ZVBsYXllciIpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgTG9jYWxQbGF5ZXIgcGxheWVyID0gcGxheWVySG9tZS5jcmVhdGUoZGV0YWlscy5nZXRJZCgpLCAKKyAgICAgICAgICAgIExvY2FsUGxheWVyIHBsYXllciA9IHBsYXllckhvbWUuY3JlYXRlKGRldGFpbHMuZ2V0SWQoKSwKICAgICAgICAgICAgICAgICBkZXRhaWxzLmdldE5hbWUoKSwgZGV0YWlscy5nZXRQb3NpdGlvbigpLCBkZXRhaWxzLmdldFNhbGFyeSgpKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gCi0gICAgcHVibGljIHZvaWQgYWRkUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkgeyAKKworICAgIHB1YmxpYyB2b2lkIGFkZFBsYXllcihTdHJpbmcgcGxheWVySWQsIFN0cmluZyB0ZWFtSWQpIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBhZGRQbGF5ZXIiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIExvY2FsVGVhbSB0ZWFtID0gdGVhbUhvbWUuZmluZEJ5UHJpbWFyeUtleSh0ZWFtSWQpOwpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgeyAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVQbGF5ZXIoU3RyaW5nIHBsYXllcklkKSB7CiAgICAgICAgIC8vRGVidWcucHJpbnQoIlJvc3RlckJlYW4gcmVtb3ZlUGxheWVyIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBMb2NhbFBsYXllciBwbGF5ZXIgPSBwbGF5ZXJIb21lLmZpbmRCeVByaW1hcnlLZXkocGxheWVySWQpOwpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotIAorCiAgICAgcHVibGljIHZvaWQgZHJvcFBsYXllcihTdHJpbmcgcGxheWVySWQsIFN0cmluZyB0ZWFtSWQpIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBkcm9wUGxheWVyIik7CiAgICAgICAgIHRyeSB7CkBAIC05OCw3ICs5OCw3IEBACiAgICAgICAgIHJldHVybiBwbGF5ZXJEZXRhaWxzOwogICAgIH0KIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbShTdHJpbmcgdGVhbUlkKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbShTdHJpbmcgdGVhbUlkKSB7CiAgICAgICAgIC8vRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc09mVGVhbSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwogCkBAIC0xMTMsNyArMTEzLDcgQEAKICAgICB9CiAKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbUNvcHkoU3RyaW5nIHRlYW1JZCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNPZlRlYW1Db3B5KFN0cmluZyB0ZWFtSWQpIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzT2ZUZWFtQ29weSIpOwogICAgICAgICBBcnJheUxpc3QgcGxheWVyc0xpc3QgPSBudWxsOwogCkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICB9CiAKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0VGVhbXNPZkxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRUZWFtc09mTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgewogICAgICAgICAvL0RlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFRlYW1zT2ZMZWFndWUiKTsKIAogICAgICAgICBBcnJheUxpc3QgZGV0YWlsc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CkBAIC0xNjQsNyArMTY0LDcgQEAKICAgICB9CiAKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5SGlnaGVyU2FsYXJ5KFN0cmluZyBuYW1lKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5SGlnaGVyU2FsYXJ5KFN0cmluZyBuYW1lKSB7CiAgICAgICAgIC8vRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc0J5QnlIaWdoZXJTYWxhcnkiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKIApAQCAtMTc2LDcgKzE3Niw3IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldFBsYXllcnNCeUhpZ2hlclNhbGFyeQogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTYWxhcnlSYW5nZShkb3VibGUgbG93LCBkb3VibGUgaGlnaCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVNhbGFyeVJhbmdlKGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKSB7CiAgICAgICAgIC8vRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc0J5U2FsYXJ5UmFuZ2UiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKIApAQCAtMTg5LDcgKzE4OSw3IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldFBsYXllcnNCeVNhbGFyeVJhbmdlCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUxlYWd1ZUlkKFN0cmluZyBsZWFndWVJZCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUxlYWd1ZUlkKFN0cmluZyBsZWFndWVJZCkgewogICAgICAgICAvL0RlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNCeUxlYWd1ZUlkIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CiAKQEAgLTIwMiw3ICsyMDIsNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlMZWFndWVJZAogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTcG9ydChTdHJpbmcgc3BvcnQpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTcG9ydChTdHJpbmcgc3BvcnQpIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzQnlTcG9ydCIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwogCkBAIC0yMTQsNyArMjE0LDcgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0UGxheWVyc0J5U3BvcnQKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5Q2l0eShTdHJpbmcgY2l0eSkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUNpdHkoU3RyaW5nIGNpdHkpIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzQnlDaXR5Iik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CiAKQEAgLTIyNiw3ICsyMjYsNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlDaXR5CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldEFsbFBsYXllcnMoKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0QWxsUGxheWVycygpIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRBbGxQbGF5ZXJzIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CiAKQEAgLTIzOSw3ICsyMzksNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRBbGxQbGF5ZXJzCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNOb3RPblRlYW0oKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc05vdE9uVGVhbSgpIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzTm90T25UZWFtIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CiAKQEAgLTI1MSw4ICsyNTEsOCBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzTm90T25UZWFtCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVBvc2l0aW9uQW5kTmFtZShTdHJpbmcgcG9zaXRpb24sIAotICAgICAgICBTdHJpbmcgbmFtZSkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVBvc2l0aW9uQW5kTmFtZShTdHJpbmcgcG9zaXRpb24sCisgICAgICAgIFN0cmluZyBuYW1lKSB7CiAgICAgICAgIC8vRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CiAKQEAgLTI2NCw3ICsyNjQsNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0TGVhZ3Vlc09mUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldExlYWd1ZXNPZlBsYXllcihTdHJpbmcgcGxheWVySWQpIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRMZWFndWVzT2ZQbGF5ZXIiKTsKICAgICAgICAgQXJyYXlMaXN0IGRldGFpbHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwogICAgICAgICBDb2xsZWN0aW9uIGxlYWd1ZXMgPSBudWxsOwpAQCAtMjc1LDcgKzI3NSw3IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAKKwogICAgICAgICBJdGVyYXRvciBpID0gbGVhZ3Vlcy5pdGVyYXRvcigpOwogICAgICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9IChMb2NhbExlYWd1ZSkgaS5uZXh0KCk7CkBAIC0yODcsNyArMjg3LDcgQEAKICAgICAgICAgcmV0dXJuIGRldGFpbHNMaXN0OwogICAgIH0gLy8gZ2V0TGVhZ3Vlc09mUGxheWVyCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFNwb3J0c09mUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFNwb3J0c09mUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgewogICAgICAgICAvL0RlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFNwb3J0c09mUGxheWVyIik7CiAgICAgICAgIEFycmF5TGlzdCBzcG9ydHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwogICAgICAgICBDb2xsZWN0aW9uIHNwb3J0cyA9IG51bGw7CkBAIC0yOTgsNyArMjk4LDcgQEAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgIAorCiAgICAgICAgIEl0ZXJhdG9yIGkgPSBzcG9ydHMuaXRlcmF0b3IoKTsKICAgICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICBTdHJpbmcgc3BvcnQgPSAoU3RyaW5nKSBpLm5leHQoKTsKQEAgLTMwOCw3ICszMDgsNyBAQAogICAgIH0gLy8gZ2V0U3BvcnRzT2ZQbGF5ZXIKIAogICAgIC8vIFRlYW0gYnVzaW5lc3MgbWV0aG9kcwotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRlYW1JbkxlYWd1ZShUZWFtRGV0YWlscyBkZXRhaWxzLCBTdHJpbmcgbGVhZ3VlSWQpIHsgCisgICAgcHVibGljIHZvaWQgY3JlYXRlVGVhbUluTGVhZ3VlKFRlYW1EZXRhaWxzIGRldGFpbHMsIFN0cmluZyBsZWFndWVJZCkgewogICAgICAgICAvL0RlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGNyZWF0ZVRlYW1JbkxlYWd1ZSIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gbGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUlkKTsKQEAgLTMyMCw4ICszMjAsOCBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVRlYW0oU3RyaW5nIHRlYW1JZCkgeyAKKworICAgIHB1YmxpYyB2b2lkIHJlbW92ZVRlYW0oU3RyaW5nIHRlYW1JZCkgewogICAgICAgICAvL0RlYnVnLnByaW50KCJSb3N0ZXJCZWFuIHJlbW92ZVRlYW0iKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIExvY2FsVGVhbSB0ZWFtID0gdGVhbUhvbWUuZmluZEJ5UHJpbWFyeUtleSh0ZWFtSWQpOwpAQCAtMzMwLDcgKzMzMCw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gCisKICAgICBwdWJsaWMgVGVhbURldGFpbHMgZ2V0VGVhbShTdHJpbmcgdGVhbUlkKSB7CiAgICAgICAgIC8vRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0VGVhbSIpOwogICAgICAgICBUZWFtRGV0YWlscyB0ZWFtRGV0YWlscyA9IG51bGw7CkBAIC0zNDUsMTggKzM0NSwxOCBAQAogICAgIH0KIAogICAgIC8vIExlYWd1ZSBidXNpbmVzcyBtZXRob2RzCi0gICAgcHVibGljIHZvaWQgY3JlYXRlTGVhZ3VlKExlYWd1ZURldGFpbHMgZGV0YWlscykgeyAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVMZWFndWUoTGVhZ3VlRGV0YWlscyBkZXRhaWxzKSB7CiAgICAgICAgIC8vRGVidWcucHJpbnQoIlJvc3RlckJlYW4gY3JlYXRlTGVhZ3VlIik7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWUgPSBsZWFndWVIb21lLmNyZWF0ZShkZXRhaWxzLmdldElkKCksIAorICAgICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gbGVhZ3VlSG9tZS5jcmVhdGUoZGV0YWlscy5nZXRJZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscy5nZXROYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzLmdldFNwb3J0KCkpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKSB7IAorCisgICAgcHVibGljIHZvaWQgcmVtb3ZlTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgewogICAgICAgICAvL0RlYnVnLnByaW50KCJSb3N0ZXJCZWFuIHJlbW92ZUxlYWd1ZSIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gbGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUlkKTsKQEAgLTM2NSw3ICszNjUsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotIAorCiAgICAgcHVibGljIExlYWd1ZURldGFpbHMgZ2V0TGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgewogICAgICAgICAvL0RlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldExlYWd1ZSIpOwogICAgICAgICBMZWFndWVEZXRhaWxzIGxlYWd1ZURldGFpbHMgPSBudWxsOwpAQCAtMzc5LDcgKzM3OSw3IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGxlYWd1ZURldGFpbHM7CiAgICAgfQotIAorCiAgICAgLy8gU2Vzc2lvbkJlYW4gbWV0aG9kcwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgICAgICAvL0RlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGVqYkNyZWF0ZSIpOwpAQCAtNDEyLDcgKzQxMiw3IEBACiAgICAgcHVibGljIFJvc3RlckJlYW4oKSB7fQogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHt9Ci0gCisKICAgICAvLyBQcml2YXRlIG1ldGhvZHMKICAgICBwcml2YXRlIExvY2FsUGxheWVySG9tZSBsb29rdXBQbGF5ZXIoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL1RlYW1CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL1RlYW1CZWFuLmphdmEKaW5kZXggZTQ1NjJiMy4uNTVjMjBmZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2VqYi9UZWFtQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9lamIvVGVhbUJlYW4uamF2YQpAQCAtMzAsNyArMzAsNyBAQAogCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRUZWFtSWQoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRUZWFtSWQoU3RyaW5nIGlkKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0TmFtZSgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOwogCkBAIC05NSwzMCArOTUsMzAgQEAKICAgICAgICAgc2V0Q2l0eShjaXR5KTsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgY2l0eSkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7IH0KIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBjdHgpIHsKICAgICAgICAgY29udGV4dCA9IGN0eDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKSB7CiAgICAgICAgIGNvbnRleHQgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiVGVhbUJlYW4gZWpiUmVtb3ZlIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiVGVhbUJlYW4gZWpiTG9hZCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewogICAgICAgICAvL0RlYnVnLnByaW50KCJUZWFtQmVhbiBlamJTdG9yZSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsgfQogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgeyB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCA4NDE0NzcwLi5iZjBhODRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTMsMzUgKzMsMzUgQEAKIERST1AgVEFCTEUgVGVhbTsKIERST1AgVEFCTEUgTGVhZ3VlOwogCi1DUkVBVEUgVEFCTEUgUGxheWVyIAorQ1JFQVRFIFRBQkxFIFBsYXllcgogKAotCXBsYXllcl9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksIAotCW5hbWUgVkFSQ0hBUigyNTUpICwgCi0JcG9zaXRpb24gVkFSQ0hBUigyNTUpICwgCi0Jc2FsYXJ5IERPVUJMRSBQUkVDSVNJT04gTk9UIE5VTEwKKyAgICBwbGF5ZXJfSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLAorICAgIG5hbWUgVkFSQ0hBUigyNTUpICwKKyAgICBwb3NpdGlvbiBWQVJDSEFSKDI1NSkgLAorICAgIHNhbGFyeSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMCiApOwogCi1DUkVBVEUgVEFCTEUgTGVhZ3VlIAorQ1JFQVRFIFRBQkxFIExlYWd1ZQogKAotCWxlYWd1ZV9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksIAotCW5hbWUgVkFSQ0hBUigyNTUpICwgCi0Jc3BvcnQgVkFSQ0hBUigyNTUpCisgICAgbGVhZ3VlX0lkIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwKKyAgICBuYW1lIFZBUkNIQVIoMjU1KSAsCisgICAgc3BvcnQgVkFSQ0hBUigyNTUpCiApOwogCi1DUkVBVEUgVEFCTEUgVGVhbSAKK0NSRUFURSBUQUJMRSBUZWFtCiAoCi0JdGVhbV9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksIAotCWNpdHkgVkFSQ0hBUigyNTUpICwgCi0JbmFtZSBWQVJDSEFSKDI1NSkgLAotCWxlYWd1ZV9JZCBWQVJDSEFSKDI1NSkgLAotCUZPUkVJR04gS0VZIChsZWFndWVfSWQpICAgUkVGRVJFTkNFUyBMZWFndWUgKGxlYWd1ZV9JZCkKKyAgICB0ZWFtX0lkIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwKKyAgICBjaXR5IFZBUkNIQVIoMjU1KSAsCisgICAgbmFtZSBWQVJDSEFSKDI1NSkgLAorICAgIGxlYWd1ZV9JZCBWQVJDSEFSKDI1NSkgLAorICAgIEZPUkVJR04gS0VZIChsZWFndWVfSWQpICAgUkVGRVJFTkNFUyBMZWFndWUgKGxlYWd1ZV9JZCkKICk7CiAKLUNSRUFURSBUQUJMRSBUZWFtUGxheWVyIAorQ1JFQVRFIFRBQkxFIFRlYW1QbGF5ZXIKICgKLQlwbGF5ZXJfSWQgVkFSQ0hBUigyNTUpICwgCi0gICAgICAgIHRlYW1fSWQgVkFSQ0hBUigyNTUpLCAKKyAgICBwbGF5ZXJfSWQgVkFSQ0hBUigyNTUpICwKKyAgICAgICAgdGVhbV9JZCBWQVJDSEFSKDI1NSksCiAgICAgICAgIENPTlNUUkFJTlQgcGtfVGVhbVBsYXllciBQUklNQVJZIEtFWSAocGxheWVyX0lkICwgdGVhbV9JZCkgLAotCUZPUkVJR04gS0VZICh0ZWFtX0lkKSAgIFJFRkVSRU5DRVMgVGVhbSAodGVhbV9JZCksCi0JRk9SRUlHTiBLRVkgKHBsYXllcl9JZCkgICBSRUZFUkVOQ0VTIFBsYXllciAocGxheWVyX0lkKQorICAgIEZPUkVJR04gS0VZICh0ZWFtX0lkKSAgIFJFRkVSRU5DRVMgVGVhbSAodGVhbV9JZCksCisgICAgRk9SRUlHTiBLRVkgKHBsYXllcl9JZCkgICBSRUZFUkVOQ0VTIFBsYXllciAocGxheWVyX0lkKQogKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3dpdGNob2ZmQUNDY29ubnBvb2xpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3dpdGNob2ZmQUNDY29ubnBvb2xpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCBhM2JhYjFmLi4xYzA5OTc3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N3aXRjaG9mZkFDQ2Nvbm5wb29saW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zd2l0Y2hvZmZBQ0Njb25ucG9vbGluZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN3aXRjaG9mZkFDQ2Nvbm5wb29saW5nIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9Im9yYWNsZWRiLnBvcnQiIHZhbHVlPSIxNTIxIi8+CiA8cHJvcGVydHkgbmFtZT0ib3JhY2xlZGIuaG9zdCIgdmFsdWU9Im5hdHJhai5zZmJheS5zdW4uY29tIi8+CiA8cHJvcGVydHkgbmFtZT0ib3JhY2xlZGIuc2lkIiB2YWx1ZT0iZGJzbXBsMSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zd2l0Y2hvZmZBQ0Njb25ucG9vbGluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N3aXRjaG9mZkFDQ2Nvbm5wb29saW5nL2J1aWxkLnhtbAppbmRleCA3ZjZhNTQwLi5jOGNiYjFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N3aXRjaG9mZkFDQ2Nvbm5wb29saW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N3aXRjaG9mZkFDQ2Nvbm5wb29saW5nL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgpAQCAtNDQsMTcgKzQ0LDE3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLQk8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KKyAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIKICAgICAgICAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIC8+Ci0JPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiIAotCXZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIKKyAgICB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiA8IS0tIHJ1biBhcHBjbGllbnQgaW4gQXBwU2VydiAgLS0+CiA8dGFyZ2V0IG5hbWU9Im15cnVuY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxlY2hvIG1lc3NhZ2U9ImFwcGNsaWVudCAtY2xpZW50ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciAtbmFtZSAke2FwcG5hbWV9Q2xpZW50IC10ZXh0YXV0aCAtdXNlciBqMmVlIC1wYXNzd29yZCBqMmVlIC14bWwgJHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwgJHthcHBjbGllbnQuYXBwbGljYXRpb24uYXJnc30iLz4KQEAgLTgxLDkgKzgxLDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJteXJ1bmNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KKyAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvbm9ueGFyZXNvdXJjZSIvPgogICAgICAgICA8L2FudGNhbGw+CiAKQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGVyYnktcG9vbCIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLQkgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgorICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy94YXJlc291cmNlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIApAQCAtOTksNyArOTksNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXJieS14YS1wb29sIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N3aXRjaG9mZkFDQ2Nvbm5wb29saW5nL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3dpdGNob2ZmQUNDY29ubnBvb2xpbmcvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDk2MDc3MWUuLjRiYjZhZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3dpdGNob2ZmQUNDY29ubnBvb2xpbmcvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3dpdGNob2ZmQUNDY29ubnBvb2xpbmcvY2xpZW50L0NsaWVudC5qYXZhCkBAIC00MywyMyArNDMsMjMgQEAKICAqIEBhdXRob3Iga3NoaXRpegogICovCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDEwOwogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gcm9sbGJhY2s7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRhYmxlTmFtZSA9ICJDT0ZGRUUiOwotICAgIAorCiAgICAgLy9zdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHRlc3RTdWl0ZSA9ICJzd2l0Y2hvZmZBQ0Njb25ucG9vbGluZyI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IHRlc3RDb3VudCA9IDA7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzWEE9ZmFsc2U7CiAKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBVbnBvb2xlZFRlc3QgKi8KICAgICBwdWJsaWMgQ2xpZW50KCkgewogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHBhcmFtIGFyZ3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKICAgICAgKi8KQEAgLTc3LDkgKzc3LDkgQEAKICAgICAgICAgcnVuVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcnVuVGVzdCgpIHsKLSAgICAgICAgCisKICAgICAgICAgLy9Db25uZWN0aW9uIG9wZW5lZCBhbmQgY2xvc2VkIHdpdGhpbiB0cmFuc2FjdGlvbgogICAgICAgICAvL25vbi14YSByZXNvdXJjZQogICAgICAgICBpc1hBID0gZmFsc2U7CkBAIC04Nyw4ICs4Nyw4IEBACiAgICAgICAgIC8veGEgcmVzb3VyY2UKICAgICAgICAgaXNYQSA9IHRydWU7CiAgICAgICAgIHRlc3QxKCJqZGJjL3hhcmVzb3VyY2UiKTsKLSAgICAgICAgCi0gICAgICAgIC8vQ29ubmVjdGlvbiBvcGVuZWQgd2l0aGluIHRyYW5zYWN0aW9uIAorCisgICAgICAgIC8vQ29ubmVjdGlvbiBvcGVuZWQgd2l0aGluIHRyYW5zYWN0aW9uCiAgICAgICAgIC8vYnV0IGNsb3NlZCBhZnRlciB0cmFuc2FjdGlvbgogICAgICAgICBpc1hBID0gZmFsc2U7CiAgICAgICAgIC8vbm9uLXhhIHJlc291cmNlCkBAIC05Niw0NyArOTYsNDcgQEAKICAgICAgICAgLy94YSByZXNvdXJjZQogICAgICAgICBpc1hBID0gdHJ1ZTsKICAgICAgICAgdGVzdDIoImpkYmMveGFyZXNvdXJjZSIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgIC8vWEEgYW5kIE5vbi1YQSByZXNvdXJjZSB3aXRoaW4gc2FtZSB0cmFuc2FjdGlvbgogICAgICAgICAvL25vbi14YSByZXNvdXJjZSBhbmQgeGEgIHJlc291cmNlIHRvZ2V0aGVyCiAgICAgICAgIHRlc3QzKCJqZGJjL25vbnhhcmVzb3VyY2UiLCAiamRiYy94YXJlc291cmNlIik7Ci0gICAgICAgCi0gICAgICAgIHRlc3Q0KCJqZGJjL25vbnhhcmVzb3VyY2UiLCAiamRiYy94YXJlc291cmNlIik7CQorCisgICAgICAgIHRlc3Q0KCJqZGJjL25vbnhhcmVzb3VyY2UiLCAiamRiYy94YXJlc291cmNlIik7CiAgICAgICAgIC8vb3BlbkFuZENsb3NlQ29ubmVjdGlvbigiamRiYy9vcmFjbGV4YSIsIDQwKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdDEoU3RyaW5nIGRzTmFtZSkgewogICAgICAgICBVc2VyVHJhbnNhY3Rpb24gdXQgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKGRzTmFtZSk7CiAgICAgICAgICAgICBwcmludENvbm5lY3Rpb24oZHMpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGNyZWF0ZVRhYmxlKGRzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpbnQgY291bnQxID0gZ2V0Q291bnQoZHMpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb3VudDEgOiAiICsgY291bnQxKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB1dCA9IChVc2VyVHJhbnNhY3Rpb24pIGljLmxvb2t1cCgiamF2YTpjb21wL1VzZXJUcmFuc2FjdGlvbiIpOwogICAgICAgICAgICAgdXQuYmVnaW4oKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBmb3IoaW50IGk9MDsgaTwgY291bnQ7IGkrKykKICAgICAgICAgICAgICAgICBpbnNlcnRSb3coZHMpOwogICAgICAgICAgICAgaWYocm9sbGJhY2spCiAgICAgICAgICAgICAgICAgdXQucm9sbGJhY2soKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB1dC5jb21taXQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpbnQgY291bnQyPWdldENvdW50KGRzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvdW50MiA6ICIgKyBjb3VudDIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGludCBkaWZmID0gY291bnQyIC0gY291bnQxOwogICAgICAgICAgICAgaWYoKCBkaWZmID09IGNvdW50ICYmICFyb2xsYmFjaykgfHwgKGRpZmYgPT0gMCAmJiByb2xsYmFjaykpCiAgICAgICAgICAgICAgICAgcHJpbnRTdGF0dXModHJ1ZSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcHJpbnRTdGF0dXMoZmFsc2UpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBwcmludFN0YXR1cyhmYWxzZSk7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTUyLDkgKzE1Miw5IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9OwotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0MihTdHJpbmcgZHNOYW1lKSB7CiAgICAgICAgIFVzZXJUcmFuc2FjdGlvbiB1dCA9IG51bGw7CiAgICAgICAgIHRyeSB7CkBAIC0xNjQsMzIgKzE2NCwzMiBAQAogICAgICAgICAgICAgQ29ubmVjdGlvbltdIGNvbjsKIAogICAgICAgICAgICAgY3JlYXRlVGFibGUoZHMpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGludCBjb3VudDEgPSBnZXRDb3VudChkcyk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvdW50MSA6ICIgKyBjb3VudDEpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHV0ID0gKFVzZXJUcmFuc2FjdGlvbikgaWMubG9va3VwKCJqYXZhOmNvbXAvVXNlclRyYW5zYWN0aW9uIik7CiAgICAgICAgICAgICB1dC5iZWdpbigpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGNvbiA9IG9wZW5Db25uZWN0aW9ucyhkc05hbWUsIGNvdW50KTsKICAgICAgICAgICAgIGluc2VydFJvdyhjb24pOwogICAgICAgICAgICAgY2xvc2VDb25uZWN0aW9ucyhjb24sIGNvdW50KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZihyb2xsYmFjaykKICAgICAgICAgICAgICAgICB1dC5yb2xsYmFjaygpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHV0LmNvbW1pdCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGludCBjb3VudDI9Z2V0Q291bnQoZHMpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY291bnQyIDogIiArIGNvdW50Mik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaW50IGRpZmYgPSBjb3VudDIgLSBjb3VudDE7CiAgICAgICAgICAgICBpZigoIGRpZmYgPT0gY291bnQgJiYgIXJvbGxiYWNrKSB8fCAoZGlmZiA9PSAwICYmIHJvbGxiYWNrKSkKICAgICAgICAgICAgICAgICBwcmludFN0YXR1cyh0cnVlKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBwcmludFN0YXR1cyhmYWxzZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIHByaW50U3RhdHVzKGZhbHNlKTsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0yMDUsNjkgKzIwNSw2OSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfTsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0NChTdHJpbmcgZHNOYW1lLCBTdHJpbmcgeGFEc05hbWUpIHsKICAgICAgICAgVXNlclRyYW5zYWN0aW9uIHV0ID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cChkc05hbWUpOwotCSAgICBEYXRhU291cmNlIHhhZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKHhhRHNOYW1lKTsKKyAgICAgICAgRGF0YVNvdXJjZSB4YWRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCh4YURzTmFtZSk7CiAgICAgICAgICAgICBwcmludENvbm5lY3Rpb24oZHMpOwogICAgICAgICAgICAgQ29ubmVjdGlvbltdIGNvbjsKLQkgICAgQ29ubmVjdGlvbltdIHhhQ29uOworICAgICAgICBDb25uZWN0aW9uW10geGFDb247CiAKLQkgICAgaXNYQSA9IGZhbHNlOworICAgICAgICBpc1hBID0gZmFsc2U7CiAgICAgICAgICAgICBjcmVhdGVUYWJsZShkcyk7CiAgICAgICAgICAgICBpc1hBID0gdHJ1ZTsKLQkgICAgY3JlYXRlVGFibGUoeGFkcyk7CisgICAgICAgIGNyZWF0ZVRhYmxlKHhhZHMpOwogCi0JICAgIGlzWEEgPSBmYWxzZTsKKyAgICAgICAgaXNYQSA9IGZhbHNlOwogICAgICAgICAgICAgaW50IGNvdW50MSA9IGdldENvdW50KGRzKTsKLQkgICAgaXNYQSA9IHRydWU7Ci0JICAgIGludCB4YWNvdW50MSA9IGdldENvdW50KHhhZHMpOworICAgICAgICBpc1hBID0gdHJ1ZTsKKyAgICAgICAgaW50IHhhY291bnQxID0gZ2V0Q291bnQoeGFkcyk7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY291bnQxIDogIiArIGNvdW50MSArICIgeGFjb3VudDEgOiAiICsgeGFjb3VudDEpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHV0ID0gKFVzZXJUcmFuc2FjdGlvbikgaWMubG9va3VwKCJqYXZhOmNvbXAvVXNlclRyYW5zYWN0aW9uIik7CiAgICAgICAgICAgICB1dC5iZWdpbigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjb24gPSBvcGVuQ29ubmVjdGlvbnMoZHNOYW1lLCBjb3VudCk7Ci0JICAgIHhhQ29uID0gb3BlbkNvbm5lY3Rpb25zKHhhRHNOYW1lLCAxKTsKLQkgICAgaXNYQSA9IGZhbHNlOwotICAgICAgICAgICAgaW5zZXJ0Um93KGNvbik7Ci0JICAgIGlzWEEgPSB0cnVlOwotCSAgICBpbnNlcnRSb3coeGFDb24pOwogCi0JICAgIGlzWEEgPSBmYWxzZTsKKyAgICAgICAgICAgIGNvbiA9IG9wZW5Db25uZWN0aW9ucyhkc05hbWUsIGNvdW50KTsKKyAgICAgICAgeGFDb24gPSBvcGVuQ29ubmVjdGlvbnMoeGFEc05hbWUsIDEpOworICAgICAgICBpc1hBID0gZmFsc2U7CisgICAgICAgICAgICBpbnNlcnRSb3coY29uKTsKKyAgICAgICAgaXNYQSA9IHRydWU7CisgICAgICAgIGluc2VydFJvdyh4YUNvbik7CisKKyAgICAgICAgaXNYQSA9IGZhbHNlOwogICAgICAgICAgICAgY2xvc2VDb25uZWN0aW9ucyhjb24sIGNvdW50KTsKIAotCSAgICBpc1hBID0gdHJ1ZTsKLQkgICAgY2xvc2VDb25uZWN0aW9ucyh4YUNvbiwgMSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgaXNYQSA9IHRydWU7CisgICAgICAgIGNsb3NlQ29ubmVjdGlvbnMoeGFDb24sIDEpOworCiAgICAgICAgICAgICBpZihyb2xsYmFjaykKICAgICAgICAgICAgICAgICB1dC5yb2xsYmFjaygpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHV0LmNvbW1pdCgpOwotICAgICAgICAgICAgCi0JICAgIGlzWEEgPSBmYWxzZTsKLSAgICAgICAgICAgIGludCBjb3VudDI9Z2V0Q291bnQoZHMpOwotCSAgICBpc1hBID0gdHJ1ZTsKLQkgICAgaW50IHhhY291bnQyID0gZ2V0Q291bnQoeGFkcyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY291bnQyIDogIiArIGNvdW50MiArICIgeGFjb3VudDIgOiAiICsgeGFjb3VudDIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnQgZGlmZiA9IGNvdW50MiAtIGNvdW50MTsKLQkgICAgaW50IHhhZGlmZiA9IHhhY291bnQyIC0geGFjb3VudDE7CiAKLSAgICAgICAgICAgIGlmKCgoIGRpZmYgPT0gY291bnQgJiYgIXJvbGxiYWNrKSB8fCAoZGlmZiA9PSAwICYmIHJvbGxiYWNrKSkgJiYgCi0JCQkoKHhhZGlmZiA9PSAxICYmICFyb2xsYmFjaykgfHwgKHhhZGlmZiA9PSAwICYmIHJvbGxiYWNrKSkpCisgICAgICAgIGlzWEEgPSBmYWxzZTsKKyAgICAgICAgICAgIGludCBjb3VudDI9Z2V0Q291bnQoZHMpOworICAgICAgICBpc1hBID0gdHJ1ZTsKKyAgICAgICAgaW50IHhhY291bnQyID0gZ2V0Q291bnQoeGFkcyk7CisKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY291bnQyIDogIiArIGNvdW50MiArICIgeGFjb3VudDIgOiAiICsgeGFjb3VudDIpOworCisgICAgICAgICAgICBpbnQgZGlmZiA9IGNvdW50MiAtIGNvdW50MTsKKyAgICAgICAgaW50IHhhZGlmZiA9IHhhY291bnQyIC0geGFjb3VudDE7CisKKyAgICAgICAgICAgIGlmKCgoIGRpZmYgPT0gY291bnQgJiYgIXJvbGxiYWNrKSB8fCAoZGlmZiA9PSAwICYmIHJvbGxiYWNrKSkgJiYKKyAgICAgICAgICAgICgoeGFkaWZmID09IDEgJiYgIXJvbGxiYWNrKSB8fCAoeGFkaWZmID09IDAgJiYgcm9sbGJhY2spKSkKICAgICAgICAgICAgICAgICBwcmludFN0YXR1cyh0cnVlKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBwcmludFN0YXR1cyhmYWxzZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIHByaW50U3RhdHVzKGZhbHNlKTsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0yODMsMTAgKzI4MywxMCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfTsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0MyhTdHJpbmcgZHMxTmFtZSwgU3RyaW5nIGRzMk5hbWUpIHsKICAgICAgICAgVXNlclRyYW5zYWN0aW9uIHV0ID0gbnVsbDsKICAgICAgICAgdHJ5IHsKQEAgLTI5NSw0MiArMjk1LDQyIEBACiAgICAgICAgICAgICBwcmludENvbm5lY3Rpb24oZHMxKTsKICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMyID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cChkczJOYW1lKTsKICAgICAgICAgICAgIHByaW50Q29ubmVjdGlvbihkczIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlzWEEgPSBmYWxzZTsKICAgICAgICAgICAgIGNyZWF0ZVRhYmxlKGRzMSk7CiAgICAgICAgICAgICBpc1hBID0gdHJ1ZTsKICAgICAgICAgICAgIGNyZWF0ZVRhYmxlKGRzMik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaXNYQSA9IGZhbHNlOwogICAgICAgICAgICAgaW50IGNvdW50MSA9IGdldENvdW50KGRzMSk7CiAgICAgICAgICAgICBpc1hBID0gdHJ1ZTsKICAgICAgICAgICAgIGludCBjb3VudDMgPSBnZXRDb3VudChkczIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb3VudDEgOiAiICsgY291bnQxKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY291bnQzIDogIiArIGNvdW50Myk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdXQgPSAoVXNlclRyYW5zYWN0aW9uKSBpYy5sb29rdXAoImphdmE6Y29tcC9Vc2VyVHJhbnNhY3Rpb24iKTsKICAgICAgICAgICAgIHV0LmJlZ2luKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaXNYQSA9IGZhbHNlOwogICAgICAgICAgICAgZm9yKGludCBpPTA7IGk8IGNvdW50OyBpKyspCiAgICAgICAgICAgICAgICAgaW5zZXJ0Um93KGRzMSk7CiAgICAgICAgICAgICBpc1hBID0gdHJ1ZTsKICAgICAgICAgICAgIGZvcihpbnQgaT0wOyBpPCBjb3VudDsgaSsrKQogICAgICAgICAgICAgICAgIGluc2VydFJvdyhkczIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKHJvbGxiYWNrKQogICAgICAgICAgICAgICAgIHV0LnJvbGxiYWNrKCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgdXQuY29tbWl0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaXNYQSA9IGZhbHNlOwogICAgICAgICAgICAgaW50IGNvdW50Mj1nZXRDb3VudChkczEpOwogICAgICAgICAgICAgaXNYQSA9IHRydWU7CiAgICAgICAgICAgICBpbnQgY291bnQ0PWdldENvdW50KGRzMik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb3VudDIgOiAiICsgY291bnQyKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY291bnQ0IDogIiArIGNvdW50NCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaW50IGRpZmYxID0gY291bnQyIC0gY291bnQxOwogICAgICAgICAgICAgaW50IGRpZmYyID0gY291bnQ0IC0gY291bnQzOwogICAgICAgICAgICAgaWYoKCggZGlmZjEgPT0gY291bnQgJiYgIXJvbGxiYWNrKSB8fCAoZGlmZjEgPT0gMCAmJiByb2xsYmFjaykpCkBAIC0zMzgsNyArMzM4LDcgQEAKICAgICAgICAgICAgICAgICBwcmludFN0YXR1cyh0cnVlKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBwcmludFN0YXR1cyhmYWxzZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIHByaW50U3RhdHVzKGZhbHNlKTsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0zNTQsMjEgKzM1NCwyMSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfTsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGNyZWF0ZVRhYmxlKGZpbmFsIERhdGFTb3VyY2UgZHMpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgdGFibGVOYW1lOwogICAgICAgICBpZihpc1hBKQogICAgICAgICAgICAgdGFibGVOYW1lID0gIkNPRkZFRV9YQSI7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRhYmxlTmFtZSA9ICJDT0ZGRUUiOwotICAgICAgICAKKwogICAgICAgICBDb25uZWN0aW9uIGNvbjsKICAgICAgICAgU3RhdGVtZW50IHN0bXQ7CiAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5ewogICAgICAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJkcm9wIHRhYmxlICIgKyB0YWJsZU5hbWUpOwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGV4KXsKQEAgLTM3OCw3ICszNzgsNyBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgICAgIGNvbi5jbG9zZSgpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBnZXRDb3VudChmaW5hbCBEYXRhU291cmNlIGRzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZTsKICAgICAgICAgaWYoaXNYQSkKQEAgLTM5OCw3ICszOTgsNyBAQAogICAgICAgICBjb24uY2xvc2UoKTsKICAgICAgICAgcmV0dXJuIGNvdW50OwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgaW5zZXJ0Um93KGZpbmFsIERhdGFTb3VyY2UgZHMpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgdGFibGVOYW1lOwogICAgICAgICBpZihpc1hBKQpAQCAtNDEzLDcgKzQxMyw3IEBACiAgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICAgICAgY29uLmNsb3NlKCk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBpbnNlcnRSb3coZmluYWwgQ29ubmVjdGlvbltdIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWU7CiAgICAgICAgIGlmKGlzWEEpCkBAIC00MjQsMTA4ICs0MjQsMTA4IEBACiAgICAgICAgIGZvcihpbnQgaT0wOyBpIDwgY29uLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgIHN0bXQgPSBjb25baV0uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIklOU0VSVCBJTlRPICIgKyB0YWJsZU5hbWUgKyAiIHZhbHVlcyAoJ0NPRkZFRScsIDEwMCkiKTsKLQkgICAgc3RtdC5jbG9zZSgpOworICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAKKworCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcmludENvbm5lY3Rpb24oZmluYWwgRGF0YVNvdXJjZSBkcykgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSBkc1R5cGVkID0gKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpIGRzOwogICAgICAgICBDb25uZWN0aW9uIHdyYXBwZXIgPSBkc1R5cGVkLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW9uIHR5cGUgOiAiICsgZHNUeXBlZC5nZXRDb25uZWN0aW9uKHdyYXBwZXIpKTsKICAgICAgICAgd3JhcHBlci5jbG9zZSgpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgb3BlbkFuZENsb3NlQ29ubmVjdGlvbihTdHJpbmcgZHNOYW1lLCBpbnQgY291bnQpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cChkc05hbWUpOwogICAgICAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSBkc1R5cGVkID0gKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpIGRzOwotCSAgICBIYXNoU2V0PFN0cmluZz4gY29ubmVjdGlvbnMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBjb25uZWN0aW9ucyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKICAgICAgICAgICAgIENvbm5lY3Rpb24gY29uOwotCSAgICBTdHJpbmcgY29uVHlwZTsKLQkgICAgYm9vbGVhbiBzdGF0dXMgPSB0cnVlOwotCSAgICBpbnQgaSA9IDA7CisgICAgICAgIFN0cmluZyBjb25UeXBlOworICAgICAgICBib29sZWFuIHN0YXR1cyA9IHRydWU7CisgICAgICAgIGludCBpID0gMDsKICAgICAgICAgICAgIGZvcig7IGkgPCBjb3VudDsgaSsrKXsKICAgICAgICAgICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JCWNvblR5cGUgPSBkc1R5cGVkLmdldENvbm5lY3Rpb24oY29uKS50b1N0cmluZygpOwotICAgICAgICAJU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW9uIHR5cGUgOiAiICsgY29uVHlwZSk7CisgICAgICAgIGNvblR5cGUgPSBkc1R5cGVkLmdldENvbm5lY3Rpb24oY29uKS50b1N0cmluZygpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW9uIHR5cGUgOiAiICsgY29uVHlwZSk7CiAgICAgICAgICAgICAgICAgY29uLmNsb3NlKCk7Ci0JCWlmKCFjb25uZWN0aW9ucy5hZGQoY29uVHlwZSkpewotCQkJc3RhdHVzID0gZmFsc2U7Ci0JCQlicmVhazsKLQkJfQorICAgICAgICBpZighY29ubmVjdGlvbnMuYWRkKGNvblR5cGUpKXsKKyAgICAgICAgICAgIHN0YXR1cyA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVG90YWwgY29ubmVjdGlvbiByZXF1ZXN0ZWQgOiAgIiArIGNvdW50KTsKLSAgICAgICAJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVG90YWwgY29ubmVjdGlvbiBjcmVhdGVkIDogICIgKyBpKTsKLSAgICAgICAJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVG90YWwgbnVtYmVyIG9mIHVuaXF1ZSBjb25uZWN0aW9uIDogICIgKyBjb25uZWN0aW9ucy5zaXplKCkpOwotCSAgICBwcmludFN0YXR1cyhzdGF0dXMpOworICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUb3RhbCBjb25uZWN0aW9uIHJlcXVlc3RlZCA6ICAiICsgY291bnQpOworICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUb3RhbCBjb25uZWN0aW9uIGNyZWF0ZWQgOiAgIiArIGkpOworICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUb3RhbCBudW1iZXIgb2YgdW5pcXVlIGNvbm5lY3Rpb24gOiAgIiArIGNvbm5lY3Rpb25zLnNpemUoKSk7CisgICAgICAgIHByaW50U3RhdHVzKHN0YXR1cyk7CiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZXgpewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIG9wZW5NYXhDb25uZWN0aW9ucyhTdHJpbmcgZHNOYW1lLCBpbnQgY291bnQpIHsKICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IG51bGw7Ci0JdHJ5ewotICAgICAgICAJSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkJZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKGRzTmFtZSk7Ci0JfWNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBleCl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVW5hYmxlIHRvIGxvb2t1cCBkYXRhc291cmNlIik7Ci0JCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQlyZXR1cm47Ci0JfQotICAgICAgICAKLSAgICAgICAgQ29ubmVjdGlvbltdIGNvbiA9IG5ldyBDb25uZWN0aW9uW2NvdW50XTsKLQlpbnQgaSA9IDA7Ci0gICAgICAgIGZvcig7IGkgPCBjb3VudDsgaSsrKXsKLQkgICB0cnl7Ci0gICAgICAgICAgIAljb25baV0gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgfWNhdGNoKFNRTEV4Y2VwdGlvbiBleCl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVW5hYmxlIHRvIGNyZWF0ZSBtYXggY29ubmVjdGlvbnMiKTsKLQkJcHJpbnRTdGF0dXMoZmFsc2UpOwkKLQkgICB9Ci0JfQorICAgIHRyeXsKKyAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cChkc05hbWUpOworICAgIH1jYXRjaChOYW1pbmdFeGNlcHRpb24gZXgpeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuYWJsZSB0byBsb29rdXAgZGF0YXNvdXJjZSIpOworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotCWlmKGkgPT0gIGNvdW50KXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJBYmxlIHRvIGNyZWF0ZSBtYXggY29ubmVjdGlvbnMiKTsKLQkJcHJpbnRTdGF0dXModHJ1ZSk7CQotCQl0cnl7Ci0JCQlkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCVN5c3RlbS5vdXQucHJpbnRsbigiQWJsZSB0byBjcmVhdGUgYmV5b25kIG1heCBjb25uZWN0aW9ucyIpOwotICAgICAgICAgICAgICAgIAlwcmludFN0YXR1cyhmYWxzZSk7Ci0JCX1jYXRjaChTUUxFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oIlVuYWJsZSB0byBjcmVhdGUgYmV5b25kIG1heCBjb25uZWN0aW9ucyIpOwotICAgICAgICAgICAgICAgIAlwcmludFN0YXR1cyh0cnVlKTsKLSAgICAgICAgICAgCX0KLQl9Ci0gICAgICAgIAorICAgICAgICBDb25uZWN0aW9uW10gY29uID0gbmV3IENvbm5lY3Rpb25bY291bnRdOworICAgIGludCBpID0gMDsKKyAgICAgICAgZm9yKDsgaSA8IGNvdW50OyBpKyspeworICAgICAgIHRyeXsKKyAgICAgICAgICAgICAgIGNvbltpXSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICB9Y2F0Y2goU1FMRXhjZXB0aW9uIGV4KXsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmFibGUgdG8gY3JlYXRlIG1heCBjb25uZWN0aW9ucyIpOworICAgICAgICBwcmludFN0YXR1cyhmYWxzZSk7CisgICAgICAgfQorICAgIH0KKworICAgIGlmKGkgPT0gIGNvdW50KXsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBYmxlIHRvIGNyZWF0ZSBtYXggY29ubmVjdGlvbnMiKTsKKyAgICAgICAgcHJpbnRTdGF0dXModHJ1ZSk7CisgICAgICAgIHRyeXsKKyAgICAgICAgICAgIGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBYmxlIHRvIGNyZWF0ZSBiZXlvbmQgbWF4IGNvbm5lY3Rpb25zIik7CisgICAgICAgICAgICAgICAgICAgIHByaW50U3RhdHVzKGZhbHNlKTsKKyAgICAgICAgfWNhdGNoKFNRTEV4Y2VwdGlvbiBleCl7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5hYmxlIHRvIGNyZWF0ZSBiZXlvbmQgbWF4IGNvbm5lY3Rpb25zIik7CisgICAgICAgICAgICAgICAgICAgIHByaW50U3RhdHVzKHRydWUpOworICAgICAgICAgICAgICAgfQorICAgIH0KKwogICAgICAgICBmb3IoOyBpID4gMDsgaS0tKXsKLQkgICB0cnl7Ci0gICAgICAgICAgICAJY29uW2kgLSAxXS5jbG9zZSgpOwotCSAgIH1jYXRjaChTUUxFeGNlcHRpb24gZXgpewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlVuYWJsZSB0byBjbG9zZSBjb25uZWN0aW9uIik7Ci0JICAgfQotCX0KKyAgICAgICB0cnl7CisgICAgICAgICAgICAgICAgY29uW2kgLSAxXS5jbG9zZSgpOworICAgICAgIH1jYXRjaChTUUxFeGNlcHRpb24gZXgpeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuYWJsZSB0byBjbG9zZSBjb25uZWN0aW9uIik7CisgICAgICAgfQorICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyBDb25uZWN0aW9uW10gb3BlbkNvbm5lY3Rpb25zKFN0cmluZyBkc05hbWUsIGludCBjb3VudCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiwgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoZHNOYW1lKTsKLSAgICAgICAgCisKICAgICAgICAgQ29ubmVjdGlvbltdIGNvbiA9IG5ldyBDb25uZWN0aW9uW2NvdW50XTsKICAgICAgICAgZm9yKGludCBpPTA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgICAgICBjb25baV0gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29uWyIgKyBpKyAiXT0iICsgY29uW2ldKTsKLQl9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29uWyIgKyBpKyAiXT0iICsgY29uW2ldKTsKKyAgICB9CiAgICAgICAgIHJldHVybiBjb247CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjbG9zZUNvbm5lY3Rpb25zKENvbm5lY3Rpb25bXSBjb24sIGludCBjb3VudCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGZvcihpbnQgaT0wOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgICAgIGNvbltpXS5jbG9zZSgpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRTdGF0dXMoYm9vbGVhbiBzdGF0dXMpewogICAgICAgICBTdHJpbmcgdGVzdGNhc2VJRCA9IHRlc3RTdWl0ZSArICItdGVzdCIgKyAoKyt0ZXN0Q291bnQpIDsKICAgICAgICAgaWYoc3RhdHVzKXsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTVmYzQ3ZS4uOGFmNzQ0MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcC10cmFjaW5nc3FsIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9idWlsZC54bWwKaW5kZXggMGRjMmQ3My4uZjZmOTZiOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYWNpbmdzcWwvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NSwxNSArNDUsMTUgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImxvZ2dlciIvPgorICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJsb2dnZXIiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1NpbXBsZUJNUC5jbGFzcywgKiovU2ltcGxlQk1QSG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxqYXIgamFyZmlsZT0iJHtzcWwtdHJhY2UtbGlzdGVuZXItamFyfSIgdXBkYXRlPSJ0cnVlIj4KQEAgLTY0LDggKzY0LDggQEAKICAgICAgIDxjb3B5ZmlsZSBzcmM9IiR7c3FsLXRyYWNlLWxpc3RlbmVyLWphcn0iCiAgICAgICAgICAgICBkZXN0PSIke2Vudi5TMUFTX0hPTUV9L2xpYi9zcWwtdHJhY2UtbGlzdGVuZXIuamFyIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC05MywxMCArOTMsMTAgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+Ci0gICAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKQEAgLTExMSw3ICsxMTEsNyBAQAogICAgICAgPCEtLSBUbyBjaGVjayByZWNvbmZpZ3VyYXRpb24gb2YgU1FMIFRyYWNlIGxpc3RlbmVycyAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CkBAIC0xMjUsMTEgKzEyNSwxMSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSIke3RyYWNpbmdzcWwtcG9vbG5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotCTxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvc3FsLXRyYWNlLWxpc3RlbmVyLmphciIvPgotCTxkZWxldGUgZmlsZT0iJHtzcWwtdHJhY2UtbGlzdGVuZXItamFyfSIvPgotCTxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXIiLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgorICAgIDxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvc3FsLXRyYWNlLWxpc3RlbmVyLmphciIvPgorICAgIDxkZWxldGUgZmlsZT0iJHtzcWwtdHJhY2UtbGlzdGVuZXItamFyfSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXIiLz4KKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKaW5kZXggY2ViYzA0ZC4uMTk4NTAyZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYWNpbmdzcWwvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCkBAIC0yOSwzNCArMjksMzQgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAotIAlTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLQlTdHJpbmcgdGVzdFN1aXRlID0gIlNxbFRyYWNpbmcgIjsKKyAgICAgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CisgICAgU3RyaW5nIHRlc3RTdWl0ZSA9ICJTcWxUcmFjaW5nICI7CiAKICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgIE9iamVjdCBvYmpSZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUJNUEhvbWUiKTsKLQlTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKKyAgICBTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7CiAKICAgICBTaW1wbGVCTVAgc2ltcGxlQk1QID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoKTsKICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJKREJDIFNxbCBUcmFjaW5nIFRlc3RzIik7CiAKICAgICAvKmlmICggc2ltcGxlQk1QLnN0YXRlbWVudFRlc3QoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgc3RhdGVtZW50VGVzdCA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgc3RhdGVtZW50VGVzdCA6ICIsIHN0YXQuRkFJTCk7Ci0JfSovCisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHN0YXRlbWVudFRlc3QgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHN0YXRlbWVudFRlc3QgOiAiLCBzdGF0LkZBSUwpOworICAgIH0qLwogCi0JaWYgKCBzaW1wbGVCTVAucHJlcGFyZWRTdGF0ZW1lbnRUZXN0KCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHByZXBhcmVkU3RhdGVtZW50VGVzdCA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgcHJlcGFyZWRTdGF0ZW1lbnRUZXN0IDogIiwgc3RhdC5GQUlMKTsKLQl9CisgICAgaWYgKCBzaW1wbGVCTVAucHJlcGFyZWRTdGF0ZW1lbnRUZXN0KCkgKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHByZXBhcmVkU3RhdGVtZW50VGVzdCA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgcHJlcGFyZWRTdGF0ZW1lbnRUZXN0IDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQlpZiggc2ltcGxlQk1QLmNvbXBhcmVSZWNvcmRzKCkpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgU3FsIFRyYWNpbmcgVGVzdCA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgU3FsIFRyYWNpbmcgVGVzdCA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgIGlmKCBzaW1wbGVCTVAuY29tcGFyZVJlY29yZHMoKSkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiBTcWwgVHJhY2luZyBUZXN0IDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiBTcWwgVHJhY2luZyBUZXN0IDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CiAgICAgLyppZiAoIHNpbXBsZUJNUC5jYWxsYWJsZVN0YXRlbWVudFRlc3QoKSApIHsKICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgY2FsbGFibGVTdGF0ZW1lbnRUZXN0IDogIiwgc3RhdC5QQVNTKTsKICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYWNpbmdzcWwvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCAyNjBlZWI3Li4wYThiMDkyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYWNpbmdzcWwvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYWNpbmdzcWwvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNjMsNiArNjMsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYWNpbmdzcWwvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYWNpbmdzcWwvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggNjkzZmQ4Yi4uNjQyNTMyNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPlRyYWNpbmdEYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5qZGJjL3RyYWNpbmdzcWwtcmVzPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5qZGJjL3RyYWNpbmdzcWwtcmVzPC9qbmRpLW5hbWU+CiAgICAgICAgIDxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KICAgICAgICAgICAgIDxuYW1lPkRCVVNFUjwvbmFtZT4KICAgICAgICAgICAgIDxwYXNzd29yZD5EQlBBU1NXT1JEPC9wYXNzd29yZD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggMDQwODgxZi4uYWI0Y2I2OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTI5LDE5ICsyOSwxOSBAQAogICAgIHByb3RlY3RlZCBEYXRhU291cmNlIHRyYWNpbmdkczsKIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBlbnRpdHlDb250ZXh0KSB7Ci0JQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKLQl0cnkgewotCSAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQkgICAgdHJhY2luZ2RzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L1RyYWNpbmdEYXRhU291cmNlIik7Ci0JfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKLQl9CisgICAgQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKKyAgICAgICAgdHJhY2luZ2RzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L1RyYWNpbmdEYXRhU291cmNlIik7CisgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKKyAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqU2ltcGxlQk1QQmVhbioqXSBEb25lIHdpdGggc2V0RW50aXR5Q29udGV4dC4uLi4iKTsKICAgICB9CiAKICAgICBwdWJsaWMgSW50ZWdlciBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKLQkgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOworICAgICAgICByZXR1cm4gbmV3IEludGVnZXIoMSk7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gc3RhdGVtZW50VGVzdCgpIHsKQEAgLTU0LDggKzU0LDggQEAKICAgICAgICAgICAgIHN0bXQgPSBjb25Gcm9tRFMuY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICBjb25Gcm9tU3RhdGVtZW50ID0gc3RtdC5nZXRDb25uZWN0aW9uKCk7CiAKLQkJU3lzdGVtLm91dC5wcmludGxuKCJzdGF0ZW1lbnQgVGVzdCA6IGNvbkZyb21EUyA6ICIgKyBjb25Gcm9tRFMpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oInN0YXRlbWVudCBUZXN0IDogY29uRnJvbVN0YXRlbWVudCA6ICIgKyBjb25Gcm9tU3RhdGVtZW50KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzdGF0ZW1lbnQgVGVzdCA6IGNvbkZyb21EUyA6ICIgKyBjb25Gcm9tRFMpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN0YXRlbWVudCBUZXN0IDogY29uRnJvbVN0YXRlbWVudCA6ICIgKyBjb25Gcm9tU3RhdGVtZW50KTsKIAogICAgICAgICAgICAgaWYoIGNvbkZyb21EUz09Y29uRnJvbVN0YXRlbWVudCB8fCBjb25Gcm9tRFMuZXF1YWxzKGNvbkZyb21TdGF0ZW1lbnQpICl7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKQEAgLTE0Niw4ICsxNDYsOCBAQAogICAgICAgICAgICAgc3RtdCA9IGNvbkZyb21EUy5wcmVwYXJlQ2FsbCgic2VsZWN0ICogZnJvbSBjdXN0b21lcl9zdG10X3dyYXBwZXIiKTsKICAgICAgICAgICAgIGNvbkZyb21TdGF0ZW1lbnQgPSBzdG10LmdldENvbm5lY3Rpb24oKTsKIAotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxhYmxlIHN0YXRlbWVudCBUZXN0IDogY29uRnJvbURTIDogIiArIGNvbkZyb21EUyk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGFibGUgc3RhdGVtZW50IFRlc3QgOiBjb25Gcm9tU3RhdGVtZW50IDogIiArIGNvbkZyb21TdGF0ZW1lbnQpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxhYmxlIHN0YXRlbWVudCBUZXN0IDogY29uRnJvbURTIDogIiArIGNvbkZyb21EUyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGFibGUgc3RhdGVtZW50IFRlc3QgOiBjb25Gcm9tU3RhdGVtZW50IDogIiArIGNvbkZyb21TdGF0ZW1lbnQpOwogICAgICAgICAgICAgaWYoIGNvbkZyb21EUz09Y29uRnJvbVN0YXRlbWVudCB8fCBjb25Gcm9tRFMuZXF1YWxzKGNvbkZyb21TdGF0ZW1lbnQpICl7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTE3Nyw4ICsxNzcsOCBAQAogICAgICAgICAgICAgZGJtZCA9IGNvbkZyb21EUy5nZXRNZXRhRGF0YSgpOwogICAgICAgICAgICAgY29uRnJvbU1ldGFEYXRhID0gZGJtZC5nZXRDb25uZWN0aW9uKCk7CiAKLQkJU3lzdGVtLm91dC5wcmludGxuKCJzdGF0ZW1lbnRUZXN0IDogY29uRnJvbURTIDogIiArIGNvbkZyb21EUyk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigic3RhdGVtZW50VGVzdCA6IGNvbkZyb21EYk1ldGFkYXRhIDogIiArIGNvbkZyb21NZXRhRGF0YSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic3RhdGVtZW50VGVzdCA6IGNvbkZyb21EUyA6ICIgKyBjb25Gcm9tRFMpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN0YXRlbWVudFRlc3QgOiBjb25Gcm9tRGJNZXRhZGF0YSA6ICIgKyBjb25Gcm9tTWV0YURhdGEpOwogICAgICAgICAgICAgaWYoIGNvbkZyb21EUz09Y29uRnJvbU1ldGFEYXRhIHx8IGNvbkZyb21EUy5lcXVhbHMoY29uRnJvbU1ldGFEYXRhKSApewogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICB9CkBAIC0yMDQsOCArMjA0LDggQEAKICAgICAgICAgICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkoInNlbGVjdCAqIGZyb20gY3VzdG9tZXJfc3RtdF93cmFwcGVyIik7CiAgICAgICAgICAgICBjb25Gcm9tUmVzdWx0U2V0ID0gcnMuZ2V0U3RhdGVtZW50KCkuZ2V0Q29ubmVjdGlvbigpOwogCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiUmVzdWx0U2V0IHRlc3QgOiBjb25Gcm9tRFMgOiAiICsgY29uRnJvbURTKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJSZXN1bHRTZXQgdGVzdCA6IGNvbkZyb21SZXN1bHRTZXQ6ICIgKyBjb25Gcm9tUmVzdWx0U2V0KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXN1bHRTZXQgdGVzdCA6IGNvbkZyb21EUyA6ICIgKyBjb25Gcm9tRFMpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3VsdFNldCB0ZXN0IDogY29uRnJvbVJlc3VsdFNldDogIiArIGNvbkZyb21SZXN1bHRTZXQpOwogICAgICAgICAgICAgaWYoIGNvbkZyb21EUz09Y29uRnJvbVJlc3VsdFNldCB8fCBjb25Gcm9tRFMuZXF1YWxzKGNvbkZyb21SZXN1bHRTZXQpICl7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTIzMyw3MSArMjMzLDcxIEBACiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gY29tcGFyZVJlY29yZHMoKSB7Ci0JYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKyAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICBDb25uZWN0aW9uIGNvbkZyb21EUyA9IG51bGw7Ci0JQ29ubmVjdGlvbiBjb24xID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOwotCVN0YXRlbWVudCBzdG10ID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMgPSBudWxsOwotCVJlc3VsdFNldCByczEgPSBudWxsOworICAgIENvbm5lY3Rpb24gY29uMSA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdCA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMxID0gbnVsbDsKICAgICAgICAgdHJ5ewogICAgICAgICAgICAgY29uRnJvbURTID0gdHJhY2luZ2RzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgY29uMSA9IHRyYWNpbmdkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIGNvbjEgPSB0cmFjaW5nZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgc3RtdCA9IGNvbkZyb21EUy5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgc3RtdDEgPSBjb24xLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBzdG10MSA9IGNvbjEuY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJzZWxlY3QgKiBmcm9tIGV4cGVjdGVkX3NxbF90cmFjZSIpOwotCSAgICByczEgPSBzdG10MS5leGVjdXRlUXVlcnkoInNlbGVjdCAqIGZyb20gc3FsX3RyYWNlIik7CisgICAgICAgIHJzMSA9IHN0bXQxLmV4ZWN1dGVRdWVyeSgic2VsZWN0ICogZnJvbSBzcWxfdHJhY2UiKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJAQEBAIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCSAgICBmb3IoaW50IGk9MDsgaTw1OyBpKyspIHsKKyAgICAgICAgZm9yKGludCBpPTA7IGk8NTsgaSsrKSB7CiAKLQkgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSIiOwotCSAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWU9IiI7CisgICAgICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0iIjsKKyAgICAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lPSIiOwogICAgICAgICAgICAgICAgIFN0cmluZyBhcmdzPSIiOwogICAgICAgICAgICAgICAgIFN0cmluZyBleHBlY3RlZENsYXNzTmFtZT0iIjsKICAgICAgICAgICAgICAgICBTdHJpbmcgZXhwZWN0ZWRNZXRob2ROYW1lPSIiOwogICAgICAgICAgICAgICAgIFN0cmluZyBleHBlY3RlZEFyZ3M9IiI7Ci0JICAgICAgICBpZihyczEubmV4dCgpKSB7CQorICAgICAgICAgICAgaWYocnMxLm5leHQoKSkgewogICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9IHJzMS5nZXRTdHJpbmcoMSkudHJpbSgpOwotCQltZXRob2ROYW1lID0gcnMxLmdldFN0cmluZygyKS50cmltKCk7Ci0JCWFyZ3MgPSByczEuZ2V0U3RyaW5nKDMpLnRyaW0oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJAQEBAQCBjbGFzcz0iICsgY2xhc3NOYW1lICsgIi0tLSIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkBAQEBAIG1ldGhvZD0iICsgbWV0aG9kTmFtZSArICItLS0iKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJAQEBAQCBhcmdzPSIgKyBhcmdzICsgIi0tLSIpOwotCQl9Ci0JCQotCQlpZihycy5uZXh0KCkpIHsKLQkgICAgCWV4cGVjdGVkQ2xhc3NOYW1lID0gcnMuZ2V0U3RyaW5nKDEpLnRyaW0oKTsKLQkgICAgICAgIGV4cGVjdGVkTWV0aG9kTmFtZSA9IHJzLmdldFN0cmluZygyKS50cmltKCk7Ci0JCWV4cGVjdGVkQXJncyA9IHJzLmdldFN0cmluZygzKS50cmltKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQEBAQEAgZXhwZWN0ZWRDbGFzcyA9ICIgKyBleHBlY3RlZENsYXNzTmFtZSArICItLS0iKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJAQEBAQCBleHBlY3RlZE1ldGhvZCA9ICIgKyBleHBlY3RlZE1ldGhvZE5hbWUgKyAiLS0tIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQEBAQEAgZXhwZWN0ZWRBcmdzID0gIiArIGV4cGVjdGVkQXJncyArICItLS0iKTsKLQkJfQotICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQEBAQCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQkJCi0JICAgIAlpZihjbGFzc05hbWUuZXF1YWxzKGV4cGVjdGVkQ2xhc3NOYW1lKSAmJiBtZXRob2ROYW1lLmVxdWFscyhleHBlY3RlZE1ldGhvZE5hbWUpICYmIGFyZ3MuZXF1YWxzKGV4cGVjdGVkQXJncykpIHsKLQkJICAgICAgICByZXN1bHQgPSB0cnVlOwotCQkgICAgfSBlbHNlIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJICAgIH0KKyAgICAgICAgbWV0aG9kTmFtZSA9IHJzMS5nZXRTdHJpbmcoMikudHJpbSgpOworICAgICAgICBhcmdzID0gcnMxLmdldFN0cmluZygzKS50cmltKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQEBAQEAgY2xhc3M9IiArIGNsYXNzTmFtZSArICItLS0iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJAQEBAQCBtZXRob2Q9IiArIG1ldGhvZE5hbWUgKyAiLS0tIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQEBAQEAgYXJncz0iICsgYXJncyArICItLS0iKTsKKyAgICAgICAgfQogCi0JCSAgICAvKmlmKGNsYXNzTmFtZSAhPSBudWxsICYmIGV4cGVjdGVkQ2xhc3NOYW1lICE9IG51bGwpIHsKLQkJCWlmKGNsYXNzTmFtZS5lcXVhbHMoZXhwZWN0ZWRDbGFzc05hbWUpKQotICAJCSAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7Ci0JCSAgICB9Ci0JCSAgICBpZihtZXRob2ROYW1lICE9IG51bGwgJiYgZXhwZWN0ZWRNZXRob2ROYW1lICE9IG51bGwpIHsKLQkJCWlmKG1ldGhvZE5hbWUuZXF1YWxzKGV4cGVjdGVkTWV0aG9kTmFtZSkpIAotCQkJICAgIHJlc3VsdCA9IHRydWU7Ci0JCSAgICB9Ci0JCSAgICBpZihhcmdzICE9IG51bGwgJiYgZXhwZWN0ZWRBcmdzICE9IG51bGwpIHsKLQkJCWlmKGFyZ3MuZXF1YWxzKGV4cGVjdGVkQXJncykpCi0JCQkgICAgcmVzdWx0ID0gdHJ1ZTsKLQkJICAgIH0qLwotCSAgICB9CisgICAgICAgIGlmKHJzLm5leHQoKSkgeworICAgICAgICAgICAgZXhwZWN0ZWRDbGFzc05hbWUgPSBycy5nZXRTdHJpbmcoMSkudHJpbSgpOworICAgICAgICAgICAgZXhwZWN0ZWRNZXRob2ROYW1lID0gcnMuZ2V0U3RyaW5nKDIpLnRyaW0oKTsKKyAgICAgICAgZXhwZWN0ZWRBcmdzID0gcnMuZ2V0U3RyaW5nKDMpLnRyaW0oKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJAQEBAQCBleHBlY3RlZENsYXNzID0gIiArIGV4cGVjdGVkQ2xhc3NOYW1lICsgIi0tLSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkBAQEBAIGV4cGVjdGVkTWV0aG9kID0gIiArIGV4cGVjdGVkTWV0aG9kTmFtZSArICItLS0iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJAQEBAQCBleHBlY3RlZEFyZ3MgPSAiICsgZXhwZWN0ZWRBcmdzICsgIi0tLSIpOworICAgICAgICB9CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJAQEBAIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworCisgICAgICAgICAgICBpZihjbGFzc05hbWUuZXF1YWxzKGV4cGVjdGVkQ2xhc3NOYW1lKSAmJiBtZXRob2ROYW1lLmVxdWFscyhleHBlY3RlZE1ldGhvZE5hbWUpICYmIGFyZ3MuZXF1YWxzKGV4cGVjdGVkQXJncykpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyppZihjbGFzc05hbWUgIT0gbnVsbCAmJiBleHBlY3RlZENsYXNzTmFtZSAhPSBudWxsKSB7CisgICAgICAgICAgICBpZihjbGFzc05hbWUuZXF1YWxzKGV4cGVjdGVkQ2xhc3NOYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYobWV0aG9kTmFtZSAhPSBudWxsICYmIGV4cGVjdGVkTWV0aG9kTmFtZSAhPSBudWxsKSB7CisgICAgICAgICAgICBpZihtZXRob2ROYW1lLmVxdWFscyhleHBlY3RlZE1ldGhvZE5hbWUpKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihhcmdzICE9IG51bGwgJiYgZXhwZWN0ZWRBcmdzICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmKGFyZ3MuZXF1YWxzKGV4cGVjdGVkQXJncykpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0qLworICAgICAgICB9CiAKICAgICAgICAgfWNhdGNoKFNRTEV4Y2VwdGlvbiBzcWUpewotCX1maW5hbGx5eworICAgIH1maW5hbGx5ewogCiAgICAgICAgICAgICB0cnl7CiAgICAgICAgICAgICAgICAgaWYoc3RtdCAhPSBudWxsKXsKQEAgLTMzMiw3ICszMzIsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH1jYXRjaChTUUxFeGNlcHRpb24gc3FlKXt9CiAgICAgICAgIH0KLQlyZXR1cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYWNpbmdzcWwvbG9nZ2VyL2NvbS9zdW4vczFhc2Rldi9qZGJjL3RyYWNpbmdzcWwvbG9nZ2VyL1RyYWNlTG9nZ2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYWNpbmdzcWwvbG9nZ2VyL2NvbS9zdW4vczFhc2Rldi9qZGJjL3RyYWNpbmdzcWwvbG9nZ2VyL1RyYWNlTG9nZ2VyLmphdmEKaW5kZXggOTljNzM4NC4uYWU1OWI2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL2xvZ2dlci9jb20vc3VuL3MxYXNkZXYvamRiYy90cmFjaW5nc3FsL2xvZ2dlci9UcmFjZUxvZ2dlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9sb2dnZXIvY29tL3N1bi9zMWFzZGV2L2pkYmMvdHJhY2luZ3NxbC9sb2dnZXIvVHJhY2VMb2dnZXIuamF2YQpAQCAtMjcsMTMgKzI3LDEzIEBACiBpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOwogCiBwdWJsaWMgY2xhc3MgVHJhY2VMb2dnZXIgaW1wbGVtZW50cyBTUUxUcmFjZUxpc3RlbmVyIHsKLSAgIAotICAgIERhdGFTb3VyY2UgZHM7CQotICAgIHB1YmxpYyBUcmFjZUxvZ2dlcigpIHsgCi0JdHJ5IHsKKworICAgIERhdGFTb3VyY2UgZHM7CisgICAgcHVibGljIFRyYWNlTG9nZ2VyKCkgeworICAgIHRyeSB7CiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqZGJjL3RyYWNpbmdzcWwtcmVzIik7Ci0JfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gZXgpIHt9CisgICAgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqZGJjL3RyYWNpbmdzcWwtcmVzIik7CisgICAgfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gZXgpIHt9CiAgICAgfQogCiAgICAgLyoqCkBAIC02NiwyMyArNjYsMjMgQEAKIAogICAgIHB1YmxpYyB2b2lkIHdyaXRlUmVjb3JkKERhdGFTb3VyY2UgZHMsIFN0cmluZyBjbGFzc25hbWUsIFN0cmluZyBtZXRob2RuYW1lLCBTdHJpbmcgYXJncykgewogICAgICAgICBDb25uZWN0aW9uIGNvbkZyb21EUyA9IG51bGw7Ci0JUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCA9IG51bGw7CisgICAgUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCA9IG51bGw7CiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIGNvbkZyb21EUyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIiMjI2Nvbj0iICsgY29uRnJvbURTKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIiMjI2Nvbj0iICsgY29uRnJvbURTKTsKICAgICAgICAgICAgIHN0bXQgPSBjb25Gcm9tRFMucHJlcGFyZVN0YXRlbWVudCgKLQkgICAgICAgICJpbnNlcnQgaW50byBzcWxfdHJhY2UgdmFsdWVzICg/LCA/LCA/KSIgKTsKKyAgICAgICAgICAgICJpbnNlcnQgaW50byBzcWxfdHJhY2UgdmFsdWVzICg/LCA/LCA/KSIgKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIjIyMgc3RtdD0iICsgc3RtdCk7Ci0JICAgIHN0bXQuc2V0U3RyaW5nKDEsIGNsYXNzbmFtZSk7Ci0JICAgIHN0bXQuc2V0U3RyaW5nKDIsIG1ldGhvZG5hbWUpOwotCSAgICBzdG10LnNldFN0cmluZygzLCBhcmdzKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoMSwgY2xhc3NuYW1lKTsKKyAgICAgICAgc3RtdC5zZXRTdHJpbmcoMiwgbWV0aG9kbmFtZSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKDMsIGFyZ3MpOwogCi0JICAgIGludCBjb3VudCA9IHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOwotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiIyMjIGluc2VydGVkICIgKyBjb3VudCArICIgcm93cyIpOworICAgICAgICBpbnQgY291bnQgPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIiMjIyBpbnNlcnRlZCAiICsgY291bnQgKyAiIHJvd3MiKTsKIAogICAgICAgICB9Y2F0Y2goU1FMRXhjZXB0aW9uIHNxZSl7Ci0JfWZpbmFsbHl7CisgICAgfWZpbmFsbHl7CiAKICAgICAgICAgICAgIHRyeXsKICAgICAgICAgICAgICAgICBpZihzdG10ICE9IG51bGwpewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggMDM5N2E3NS4uMGYwNDQ3OSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYWNpbmdzcWwvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDQ2ICsxLDQ2IEBACi0NCi1Ecm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjsNCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyIFZBTFVFUygxLCAnd3h5eicpOw0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlciBWQUxVRVMoMiwgJ3BxcnMnKTsNCi0NCi1Ecm9wIHRhYmxlIHNxbF90cmFjZTsNCi0NCi1DUkVBVEUgVEFCTEUgc3FsX3RyYWNlICgNCi0gICAgY2xhc3NuYW1lICAgICAgICBjaGFyKDEwMCksDQotICAgIG1ldGhvZG5hbWUJICAgICBjaGFyKDEwMCksDQotICAgIGFyZ3MJICAgICBjaGFyKDIwMCkNCi0pOw0KLQ0KLURyb3AgdGFibGUgbnVsbF9lbnRyeV90YWJsZTsNCi0NCi1DUkVBVEUgVEFCTEUgbnVsbF9lbnRyeV90YWJsZSAoDQotICAgIGZpZWxkMSAgICAgICAgY2hhcigxMDApDQotKTsNCi0NCi0NCi1Ecm9wIHRhYmxlIGV4cGVjdGVkX3NxbF90cmFjZTsNCi0NCi1DUkVBVEUgVEFCTEUgZXhwZWN0ZWRfc3FsX3RyYWNlICgNCi0gICAgY2xhc3NuYW1lICAgICAgICBjaGFyKDEwMCksDQotICAgIG1ldGhvZG5hbWUgICAgICAgY2hhcigxMDApLA0KLSAgICBhcmdzCSAgICAgY2hhcigyMDApDQotKTsNCi0NCi0NCi1JTlNFUlQgSU5UTyBleHBlY3RlZF9zcWxfdHJhY2UgVkFMVUVTKCdvcmcuYXBhY2hlLmRlcmJ5LmNsaWVudC5uZXQuTmV0Q29ubmVjdGlvbicsICdwcmVwYXJlU3RhdGVtZW50JywgJ3NlbGVjdCAqIGZyb20gY3VzdG9tZXJfc3RtdF93cmFwcGVyOzEwMDM7MTAwNzsnKTsNCi0NCi1JTlNFUlQgSU5UTyBleHBlY3RlZF9zcWxfdHJhY2UgVkFMVUVTKCdjb20uc3VuLmdqYy5zcGkuamRiYzQwLlByZXBhcmVkU3RhdGVtZW50V3JhcHBlcjQwJywgJ2dldENvbm5lY3Rpb24nLCAnJyk7DQotDQotSU5TRVJUIElOVE8gZXhwZWN0ZWRfc3FsX3RyYWNlIFZBTFVFUygnb3JnLmFwYWNoZS5kZXJieS5jbGllbnQubmV0Lk5ldENvbm5lY3Rpb24nLCAncHJlcGFyZVN0YXRlbWVudCcsICdJTlNFUlQgSU5UTyBudWxsX2VudHJ5X3RhYmxlIFZBTFVFUyg/KTsxMDAzOzEwMDc7Jyk7DQotDQotSU5TRVJUIElOVE8gZXhwZWN0ZWRfc3FsX3RyYWNlIFZBTFVFUygnY29tLnN1bi5namMuc3BpLmpkYmM0MC5QcmVwYXJlZFN0YXRlbWVudFdyYXBwZXI0MCcsICdzZXRTdHJpbmcnLCAnMTsnKTsNCi0NCi1JTlNFUlQgSU5UTyBleHBlY3RlZF9zcWxfdHJhY2UgVkFMVUVTKCdjb20uc3VuLmdqYy5zcGkuamRiYzQwLlByZXBhcmVkU3RhdGVtZW50V3JhcHBlcjQwJywgJ2V4ZWN1dGVVcGRhdGUnLCAnJyk7DQotDQotSU5TRVJUIElOVE8gZXhwZWN0ZWRfc3FsX3RyYWNlIFZBTFVFUygnY29tLnN1bi5namMuc3BpLmpkYmM0MC5QcmVwYXJlZFN0YXRlbWVudFdyYXBwZXI0MCcsICdjbG9zZScsICcnKTsNCisKK0Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlciBWQUxVRVMoMSwgJ3d4eXonKTsKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlciBWQUxVRVMoMiwgJ3BxcnMnKTsKKworRHJvcCB0YWJsZSBzcWxfdHJhY2U7CisKK0NSRUFURSBUQUJMRSBzcWxfdHJhY2UgKAorICAgIGNsYXNzbmFtZSAgICAgICAgY2hhcigxMDApLAorICAgIG1ldGhvZG5hbWUgICAgICAgICBjaGFyKDEwMCksCisgICAgYXJncyAgICAgICAgIGNoYXIoMjAwKQorKTsKKworRHJvcCB0YWJsZSBudWxsX2VudHJ5X3RhYmxlOworCitDUkVBVEUgVEFCTEUgbnVsbF9lbnRyeV90YWJsZSAoCisgICAgZmllbGQxICAgICAgICBjaGFyKDEwMCkKKyk7CisKKworRHJvcCB0YWJsZSBleHBlY3RlZF9zcWxfdHJhY2U7CisKK0NSRUFURSBUQUJMRSBleHBlY3RlZF9zcWxfdHJhY2UgKAorICAgIGNsYXNzbmFtZSAgICAgICAgY2hhcigxMDApLAorICAgIG1ldGhvZG5hbWUgICAgICAgY2hhcigxMDApLAorICAgIGFyZ3MgICAgICAgICBjaGFyKDIwMCkKKyk7CisKKworSU5TRVJUIElOVE8gZXhwZWN0ZWRfc3FsX3RyYWNlIFZBTFVFUygnb3JnLmFwYWNoZS5kZXJieS5jbGllbnQubmV0Lk5ldENvbm5lY3Rpb24nLCAncHJlcGFyZVN0YXRlbWVudCcsICdzZWxlY3QgKiBmcm9tIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjsxMDAzOzEwMDc7Jyk7CisKK0lOU0VSVCBJTlRPIGV4cGVjdGVkX3NxbF90cmFjZSBWQUxVRVMoJ2NvbS5zdW4uZ2pjLnNwaS5qZGJjNDAuUHJlcGFyZWRTdGF0ZW1lbnRXcmFwcGVyNDAnLCAnZ2V0Q29ubmVjdGlvbicsICcnKTsKKworSU5TRVJUIElOVE8gZXhwZWN0ZWRfc3FsX3RyYWNlIFZBTFVFUygnb3JnLmFwYWNoZS5kZXJieS5jbGllbnQubmV0Lk5ldENvbm5lY3Rpb24nLCAncHJlcGFyZVN0YXRlbWVudCcsICdJTlNFUlQgSU5UTyBudWxsX2VudHJ5X3RhYmxlIFZBTFVFUyg/KTsxMDAzOzEwMDc7Jyk7CisKK0lOU0VSVCBJTlRPIGV4cGVjdGVkX3NxbF90cmFjZSBWQUxVRVMoJ2NvbS5zdW4uZ2pjLnNwaS5qZGJjNDAuUHJlcGFyZWRTdGF0ZW1lbnRXcmFwcGVyNDAnLCAnc2V0U3RyaW5nJywgJzE7Jyk7CisKK0lOU0VSVCBJTlRPIGV4cGVjdGVkX3NxbF90cmFjZSBWQUxVRVMoJ2NvbS5zdW4uZ2pjLnNwaS5qZGJjNDAuUHJlcGFyZWRTdGF0ZW1lbnRXcmFwcGVyNDAnLCAnZXhlY3V0ZVVwZGF0ZScsICcnKTsKKworSU5TRVJUIElOVE8gZXhwZWN0ZWRfc3FsX3RyYWNlIFZBTFVFUygnY29tLnN1bi5namMuc3BpLmpkYmM0MC5QcmVwYXJlZFN0YXRlbWVudFdyYXBwZXI0MCcsICdjbG9zZScsICcnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9zcWwvcmVjcmVhdGVfc3FsX3RyYWNlX3RhYmxlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9zcWwvcmVjcmVhdGVfc3FsX3RyYWNlX3RhYmxlLnNxbAppbmRleCA3NTRmOWJkLi5lYWE0NTc3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYWNpbmdzcWwvc3FsL3JlY3JlYXRlX3NxbF90cmFjZV90YWJsZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL3NxbC9yZWNyZWF0ZV9zcWxfdHJhY2VfdGFibGUuc3FsCkBAIC0xLDYgKzEsNiBAQAogRHJvcCB0YWJsZSBzcWxfdHJhY2U7CiBDUkVBVEUgVEFCTEUgc3FsX3RyYWNlICgKICAgICBjbGFzc25hbWUgICAgICAgIGNoYXIoMTAwKSwKLSAgICBtZXRob2RuYW1lCSAgICAgY2hhcigxMDApLAotICAgIGFyZ3MJICAgICBjaGFyKDIwMCkKKyAgICBtZXRob2RuYW1lICAgICAgICAgY2hhcigxMDApLAorICAgIGFyZ3MgICAgICAgICBjaGFyKDIwMCkKICk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy9idWlsZC54bWwKaW5kZXggN2M4MmFhYS4uODdkZGY2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLm91dHB1dCIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPHJlY29yZCBuYW1lPSJ0cmFuc2FjdGlvbnMub3V0cHV0IiBhY3Rpb249InN0YXJ0IiAvPgotCTxhbnQgZGlyPSJ0ZXN0MSIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0idGVzdDEiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0idHJhbnNhY3Rpb25zLm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgogICAgIDwvdGFyZ2V0PgogCkBAIC01Miw5ICs1Miw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIHJlY29uZmlnIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIHJlY29uZmlnIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QxL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0MS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGYxYTc2ZjMuLjJmMDA3OGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QxL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDEvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iYXM3LWp0cyIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KQEAgLTI1LDcgKzI1LDcgQEAKIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJ0eG5zdGF0dXMtdGVzdDEiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0idHhuc3RhdHVzLXRlc3QxIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NvbSIvPgogPCEtLSBwb29sMSAtLT4KIDxwcm9wZXJ0eSBuYW1lPSJvcmEudXNlcjEiIHZhbHVlPSJhZGl0eWEiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QxL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QxL2J1aWxkLnhtbAppbmRleCBmZWU3N2M3Li45ZTJjMTliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0MS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDEvYnVpbGQueG1sCkBAIC0zMCwxNCArMzAsMTQgQEAKICAgJmNvbW1vbkJ1aWxkOwogICAmdGVzdHByb3BlcnRpZXM7CiAKLSAgICAKKwogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsc2V0dXAtamRiYyxzZXR1cC1zcWwsZGVwbG95LHJ1bndlYix1bmRlcGxveSxjbGVhbnVwLWpkYmMsY2xlYW51cC1zcWwiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgPGRlbGV0ZSBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTUsMTggKzU1LDE4IEBACiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2Utd2FyLWxvY2FsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLQk8cGFyYW0gbmFtZT0id2FyLmZpbGUiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CisgICAgPHBhcmFtIG5hbWU9Indhci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIi8+CiAgICAgICA8IS0tCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ0cnVlIi8+Ci0JPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KLSAgICAgIDwvYW50Y2FsbD4JCisgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KKyAgICAgIDwvYW50Y2FsbD4KICAgICAgIC0tPgogICAgIDwvdGFyZ2V0PgogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2Utd2FyLWxvY2FsIiA+Ci0gICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gCisgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtc2VydmxldCIvPi0tPgogCkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiIgPgogICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0ianRzLXhhLXBvb2wyIi8+CiAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9vcmFjbGVkczIiLz4KLSAgICA8L2FudGNhbGw+IAorICAgIDwvYW50Y2FsbD4KIAogICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtb3JhY2xlLXhhLXBvb2wiID4KICAgICAgIDxwYXJhbSBuYW1lPSJwb29sbmFtZSIgdmFsdWU9Imp0cy14YS1wb29sMSIvPgpAQCAtMTM0LDcgKzEzNCw3IEBACiAgICAgICA8cGFyYW0gbmFtZT0ib3JhLnNpZCIgdmFsdWU9IiR7b3JhLnNpZDF9Ii8+CiAgICAgICA8cGFyYW0gbmFtZT0ib3JhLnVybCIgdmFsdWU9IiR7b3JhLnVybDF9Ii8+CiAgICAgPC9hbnRjYWxsPgotICAgIAorCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iID4KICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9Imp0cy14YS1wb29sMSIvPgogICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvb3JhY2xldGhpcmQiLz4KQEAgLTE2Nyw3ICsxNjcsNyBAQAogICAgICAgb25lcnJvcj0iY29udGludWUiCiAgICAgICBwcmludD0ieWVzIgogICAgICAgY2xhc3NwYXRoPSIke2RiZHJpdmVyLmNsYXNzcGF0aH0iLz4KLSAgICAKKwogICAgIDxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBzcWwgc3RhdGVtZW50IGF0IGZyb20gJHtjcmVhdGUuc3FsLmZpbGUyfSIvPgogICAgIDxzcWwKICAgICAgIGRyaXZlcj0iJHtkYi5kcml2ZXJ9IgpAQCAtMTkxLDcgKzE5MSw3IEBACiAgICAgICBvbmVycm9yPSJjb250aW51ZSIKICAgICAgIHByaW50PSJ5ZXMiCiAgICAgICBjbGFzc3BhdGg9IiR7ZGJkcml2ZXIuY2xhc3NwYXRofSIvPgotICAgIAorCiAgICAgPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIHNxbCBzdGF0ZW1lbnQgYXQgZnJvbSAke2Ryb3Auc3FsLmZpbGUyfSIvPgogICAgIDxzcWwKICAgICAgIGRyaXZlcj0iJHtkYi5kcml2ZXJ9IgpAQCAtMjE3LDE0ICsyMTcsMTQgQEAKICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICA8L3RhcmdldD4KIAotICA8IS0tIAorICA8IS0tCiAgICAgVG9tY2F0J3MgR1Rlc3QgdG9vbCBmb3Igd2VidGVzdHMKICAgLS0+CiAgIDx0YXJnZXQgbmFtZT0icnVud2ViIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgPHRhc2tkZWYgbmFtZT0iZ3Rlc3QiIGNsYXNzbmFtZT0ib3JnLmFwYWNoZS50b21jYXQudGFzay5HVGVzdCIgCisgICAgPHRhc2tkZWYgbmFtZT0iZ3Rlc3QiIGNsYXNzbmFtZT0ib3JnLmFwYWNoZS50b21jYXQudGFzay5HVGVzdCIKICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvdGVzdGRyaXZlcnNlY3VyaXR5Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL2NvbW1vbnMtbG9nZ2luZy5qYXIiIC8+CiAgICAgPHByb3BlcnR5IG5hbWU9IndnZGlyIiB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zIi8+Ci0gICAgPGd0ZXN0IHJlcXVlc3Q9IkdFVCAvdHhuc3RhdHVzL2Jtc2VydmxldDQgSFRUUC8xLjAiIAorICAgIDxndGVzdCByZXF1ZXN0PSJHRVQgL3R4bnN0YXR1cy9ibXNlcnZsZXQ0IEhUVFAvMS4wIgogICAgICAgZGVidWc9IjkiCiAgICAgICBmaXJzdFRhc2s9InRydWUiCiAgICAgICBsYXN0VGVzdD0idHJ1ZSIKQEAgLTI0Niw3ICsyNDYsNyBAQAogICAgICAgdGVzdENhc2VEZXNjcmlwdGlvbj0idHhuc3RhdHVzLXRlc3QxIgogICAgICAgdGVzdFN0cmF0ZWd5PSJ0eG5zdGF0dXMtdGVzdDEiCiAgICAgLz4KLSAgPC90YXJnZXQ+ICAKKyAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtamRiYy1vcmFjbGUteGEtcG9vbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIiA+CkBAIC0yNjIsNyArMjYyLDcgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtwb29sbmFtZX0ucHJvcGVydHkuVVJMPSR7b3JhLnVybH0iLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIAorCiAgIDwvdGFyZ2V0PgotICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDEvZWpiL2Jtc2FtcGxlYmVhbjMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QxL2VqYi9ibXNhbXBsZWJlYW4zLmphdmEKaW5kZXggNGU0MjhiNi4uY2YyOGM3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDEvZWpiL2Jtc2FtcGxlYmVhbjMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0MS9lamIvYm1zYW1wbGViZWFuMy5qYXZhCkBAIC0yNiwxMCArMjYsMTAgQEAKIGltcG9ydCBqYXZhLnNxbC4qOwogaW1wb3J0IGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdDsKIAotcHVibGljIGNsYXNzIGJtc2FtcGxlYmVhbjMgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiAKK3B1YmxpYyBjbGFzcyBibXNhbXBsZWJlYW4zIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4KIHsKICAgICAgICAgcHJpdmF0ZSB0cmFuc2llbnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQgbV9jdHggPSBudWxsOwotCUVKQkNvbnRleHQgZWpiY29udGV4dDsKKyAgICBFSkJDb250ZXh0IGVqYmNvbnRleHQ7CiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQgY3R4KQogICAgIHsKICAgICAgICAgbV9jdHggPSBjdHg7CkBAIC00MCwxNSArNDAsMTUgQEAKICAgICB7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgCisgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkKICAgICB7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpCiAgICAgewogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpCiAgICAgewogICAgIH0KIApAQCAtNjUsMzkgKzY1LDM5IEBACiAgICAgICAgIGJtc2FtcGxlNCByZW1vdGUgPSBudWxsOwogICAgICAgICBpbnQgcmVzdWx0RnJvbUJlYW40PTE7CiAgICAgICAgIHRyeSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gYmVhbjEuLi4uIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gYmVhbjEuLi4uIik7CiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgY3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qZGJjL29yYWNsZXRoaXJkIik7Ci0gICAgICAJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZHMgbG9va3VwIHN1Y2NlZWRlZCIpOworICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRzIGxvb2t1cCBzdWNjZWVkZWQiKTsKICAgICAgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3Rpb24gc3VjY2VlZGVkIitjb25uKTsKICAgICAgICAgICAgIHN0bXQgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICAvL3N0bXQuZXhlY3V0ZVF1ZXJ5KCJkZWxldGUgZnJvbSBzdGF0dXMxIik7CisgICAgICAgIC8vc3RtdC5leGVjdXRlUXVlcnkoImRlbGV0ZSBmcm9tIHN0YXR1czEiKTsKICAgICAgICAgICAgIFN0cmluZyBxdWVyeTEgPSAic2VsZWN0ICogZnJvbSBzdGF0dXMxIjsKLQkgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJpbnNlcnQgaW50byBzdGF0dXMxIHZhbHVlcygnYmVhbjMnLDMpIik7CisgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiaW5zZXJ0IGludG8gc3RhdHVzMSB2YWx1ZXMoJ2JlYW4zJywzKSIpOwogICAgICAgICAgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeShxdWVyeTEpOwogICAgICAgICAgICAgd2hpbGUocnMubmV4dCgpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTGFzdCBOYW1lOiAiICsgcnMuZ2V0U3RyaW5nKCJOQU1FIikpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmlyc3QgTmFtZTogIiArIHJzLmdldEludCgibnVtIikpOwogICAgICAgICAgICAgfQotICAgICAgICAgIAorCiAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBjdHgubG9va3VwKCJlamIvYm1zYW1wbGViZWFuNCIpOwotICAgICAgICAgICBob21lID0gKGJtc2FtcGxlNGhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgYm1zYW1wbGU0aG9tZS5jbGFzcyk7IAorICAgICAgICAgICBob21lID0gKGJtc2FtcGxlNGhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgYm1zYW1wbGU0aG9tZS5jbGFzcyk7CiAgICAgICAgICAgIHJlbW90ZSA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgICAgIHJlc3VsdEZyb21CZWFuNCA9IHJlbW90ZS5wZXJmb3JtREJPcHMoKTsKLSAgICAgICAgICBycy5jbG9zZSgpOyAKKyAgICAgICAgICBycy5jbG9zZSgpOwogICAgICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLSAgICAgICAgICAgfSAKKyAgICAgICAgICAgfQogICAgICAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1FMRXhjZXB0aW9uIGlzIDogIiArIGUpOyAgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNRTEV4Y2VwdGlvbiBpcyA6ICIgKyBlKTsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKICAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gaXMgOiAiICsgZSk7ICAgIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gaXMgOiAiICsgZSk7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0MS9lamIvYm1zYW1wbGViZWFuNC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDEvZWpiL2Jtc2FtcGxlYmVhbjQuamF2YQppbmRleCA5NTQyNzAwLi5kZDU5YjdkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0MS9lamIvYm1zYW1wbGViZWFuNC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QxL2VqYi9ibXNhbXBsZWJlYW40LmphdmEKQEAgLTI1LDkgKzI1LDkgQEAKIGltcG9ydCBqYXZheC5zcWwuKjsKIGltcG9ydCBqYXZhLnNxbC4qOwogCi1wdWJsaWMgY2xhc3MgYm1zYW1wbGViZWFuNCBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIAorcHVibGljIGNsYXNzIGJtc2FtcGxlYmVhbjQgaW1wbGVtZW50cyBTZXNzaW9uQmVhbgogewotCUVKQkNvbnRleHQgZWpiY29udGV4dDsKKyAgICBFSkJDb250ZXh0IGVqYmNvbnRleHQ7CiAgICAgICAgIHByaXZhdGUgdHJhbnNpZW50IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0IG1fY3R4ID0gbnVsbDsKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dCBjdHgpCiAgICAgewpAQCAtMzgsMTUgKzM4LDE1IEBACiAgICAgewogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpCiAgICAgewogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKQogICAgIHsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKQogICAgIHsKICAgICB9CiAKQEAgLTYwLDE1ICs2MCwxNSBAQAogICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IG51bGwsc3RtdDI9bnVsbDsKICAgICAgICAgUmVzdWx0U2V0IHJzID0gbnVsbCxyczI9bnVsbDsKICAgIHRyeSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gYmVhbjIgLi4uLiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIGJlYW4yIC4uLi4iKTsKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBjdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L2pkYmMvb3JhY2xlZHMyIik7Ci0gICAgICAJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZHMgbG9va3VwIHN1Y2NlZWRlZCIpOworICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRzIGxvb2t1cCBzdWNjZWVkZWQiKTsKICAgICAgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3Rpb24gc3VjY2VlZGVkIitjb25uKTsKICAgICAgICAgICAgIHN0bXQgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5MSA9ICJzZWxlY3QgKiBmcm9tIHN0YXR1czEiOwotCSAgICBzdG10LmV4ZWN1dGVVcGRhdGUoImluc2VydCBpbnRvIHN0YXR1czEgdmFsdWVzKCdiZWFuNCcsMykiKTsKKyAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJpbnNlcnQgaW50byBzdGF0dXMxIHZhbHVlcygnYmVhbjQnLDMpIik7CiAgICAgICAgICAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5MSk7CiAgICAgICAgICAgICB3aGlsZShycy5uZXh0KCkpCiAgICAgICAgICAgICB7CkBAIC03OCwxNCArNzgsMTQgQEAKICAgICAgICAgICAgIHJzLmNsb3NlKCk7CiAgICAgICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgICAgICAgICBjb25uLmNsb3NlKCk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7IAorICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QxL3NlcnZsZXQvYm1zZXJ2bGV0NC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDEvc2VydmxldC9ibXNlcnZsZXQ0LmphdmEKaW5kZXggYTcwMjNiZS4uMzY5ODQxMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDEvc2VydmxldC9ibXNlcnZsZXQ0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDEvc2VydmxldC9ibXNlcnZsZXQ0LmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKIGltcG9ydCBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3Q7CiBpbXBvcnQgamF2YXguc3FsLio7CiBpbXBvcnQgY29tLnN1bi5zMWFzZGV2LmpkYmMudHJhbnNhY3Rpb25zLnRlc3QxLmVqYi4qOwotIAorCiBwdWJsaWMgY2xhc3MgYm1zZXJ2bGV0NCBleHRlbmRzIEh0dHBTZXJ2bGV0CiB7CiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCkBAIC0zMyw3ICszMyw3IEBACiAgICAgewogICAgICAgICAgZGVmYXVsdEFjdGlvbihyZXEsIHJlcyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KICAgICB7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9wbGFpbiIpOwogICAgICBQcmludFdyaXRlciBvdXQgPSByZXMuZ2V0V3JpdGVyKCk7CiAgICAgIENvbnRleHQgY3R4OwotCSAgICAgICAKKwogICAgICB0cnkKICAgICAgIHsKICAgICAgIEhhc2h0YWJsZSBlbnYgPSBuZXcgSGFzaHRhYmxlKDEpOwpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICByZW1vdGUgPSBob21lLmNyZWF0ZSgpOwogICAgICAgb3V0LnByaW50bG4oImNhbGxpbmcgIGJlYW4xICIpOwogICAgICAgb3V0LnByaW50bG4oIiB0aGUgcmVzdWx0IG9mIGludm9raW5nIHRoZSBlamIgbWV0aG9kIGlzICIgKyByZW1vdGUucGVyZm9ybURCT3BzKCkpOwotCSAgIH0KKyAgICAgICB9CiAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQogICAgICAgIHsKLQkgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBFUlJPUjogIiArIGUpOworICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEVSUk9SOiAiICsgZSk7CiAgICAgICAgfQogICAgICAgICB0cnkKICAgICAgICAgewpAQCAtODIsMTcgKzgyLDE3IEBACiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29ubiA9IG51bGwsY29ubjIgPSBudWxsOwogICAgICAgICBqYXZhLnNxbC5TdGF0ZW1lbnQgc3RtdCA9IG51bGwsc3RtdDIgPSBudWxsOwogICAgICAgICBqYXZhLnNxbC5SZXN1bHRTZXQgcnMgPSBudWxsLHJzMiA9IG51bGw7Ci0JY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JZHMgPSAoRGF0YVNvdXJjZSljdHgubG9va3VwKCJqZGJjL29yYTEiKTsKLQlkczIgPSAoRGF0YVNvdXJjZSljdHgubG9va3VwKCJqZGJjL29yYTIiKTsKLSAgICAgICAgCisgICAgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgZHMgPSAoRGF0YVNvdXJjZSljdHgubG9va3VwKCJqZGJjL29yYTEiKTsKKyAgICBkczIgPSAoRGF0YVNvdXJjZSljdHgubG9va3VwKCJqZGJjL29yYTIiKTsKKwogICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCWNvbm4yID0gZHMyLmdldENvbm5lY3Rpb24oKTsKLQlzdG10PWNvbm4uY3JlYXRlU3RhdGVtZW50KCk7Ci0Jc3RtdDI9Y29ubjIuY3JlYXRlU3RhdGVtZW50KCk7Ci0Jb3V0LnByaW50bG4oIlZlcmlmeWluZyB0YWJsZSBjb250ZW50cyAuLi4uIik7Ci0JcnM9c3RtdC5leGVjdXRlUXVlcnkoInNlbGVjdCAqIGZyb20gc3RhdHVzMSIpOwotCWludCBjb3VudD0wOworICAgIGNvbm4yID0gZHMyLmdldENvbm5lY3Rpb24oKTsKKyAgICBzdG10PWNvbm4uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgc3RtdDI9Y29ubjIuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgb3V0LnByaW50bG4oIlZlcmlmeWluZyB0YWJsZSBjb250ZW50cyAuLi4uIik7CisgICAgcnM9c3RtdC5leGVjdXRlUXVlcnkoInNlbGVjdCAqIGZyb20gc3RhdHVzMSIpOworICAgIGludCBjb3VudD0wOwogICAgICAgICAgd2hpbGUgKHJzLm5leHQoKSkKICAgICAgICAge2NvdW50Kys7CiAgICAgICAgICBvdXQucHJpbnRsbigicmVjb3JkID0gIitycy5nZXRTdHJpbmcoMSkpOwpAQCAtMTA1LDI1ICsxMDUsMjUgQEAKICAgICAgICAgIH0KICAgICAgICAgIG91dC5wcmludGxuKCJUb3RhbCBSZWNvcmRzIGluIHRhYmxlMSA9ICIrY291bnQpOwogICAgICAgICBvdXQucHJpbnRsbigiVG90YWwgUmVjb3JkcyBpbiB0YWJsZTIgPSAiK2NvdW50Mik7Ci0JaWYgKChjb3VudD09MSkmJihjb3VudDI9PTEpKQorICAgIGlmICgoY291bnQ9PTEpJiYoY291bnQyPT0xKSkKICAgICAgICAgIG91dC5wcmludGxuKCJSZXN1bHQ6UEFTUyIpOwogICAgICAgICAgZWxzZQogICAgICAgICAgb3V0LnByaW50bG4oIlJlc3VsdDpGQUlMIik7CiAgICAvLyAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiZGVsZXRlIGZyb20gc3RhdHVzMSIpOwogICAgICAgIC8vICBzdG10Mi5leGVjdXRlVXBkYXRlKCJkZWxldGUgZnJvbSBzdGF0dXMyIik7CiAgICAgICAgIC8vIGNvbm4uY29tbWl0KCk7Ci0gICAgICAgLy8gIGNvbm4yLmNvbW1pdCgpOyAgCisgICAgICAgLy8gIGNvbm4yLmNvbW1pdCgpOwogICAgICAgICAgcnMuY2xvc2UoKTsKICAgICAgICAgIG91dC5wcmludGxuKCJkZWxldGVkIGluIDEiKTsKICAgICAgICAgIG91dC5wcmludGxuKCJkZWxldGVkIGluIDIiKTsKLQkgcnMyLmNsb3NlKCk7CisgICAgIHJzMi5jbG9zZSgpOwogICAgICAgICAgc3RtdC5jbG9zZSgpOwotCSBzdG10Mi5jbG9zZSgpOwotCSBjb25uLmNsb3NlKCk7Ci0JIGNvbm4yLmNsb3NlKCk7Ki8KLSAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXt9CQkJICAgICAgCi0JCQkJCQkJCSAgICAgIAotCSAgCisgICAgIHN0bXQyLmNsb3NlKCk7CisgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgY29ubjIuY2xvc2UoKTsqLworICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpe30KKworCiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0Mi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQzMTI1ZGMuLjFiOWE5ZTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iYXM3LWp0cyIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KQEAgLTI1LDcgKzI1LDcgQEAKIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJ0eG5zdGF0dXMtdGVzdDIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0idHhuc3RhdHVzLXRlc3QyIi8+ICAgICAgICBcdTAwMjAKIDwhLS0gcG9vbDEgLS0+CiA8cHJvcGVydHkgbmFtZT0ib3JhLnVzZXIxIiB2YWx1ZT0iYWRpdHlhIi8+CiA8cHJvcGVydHkgbmFtZT0ib3JhLnB3ZDEiIHZhbHVlPSJhZGl0eWEiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QyL2J1aWxkLnhtbAppbmRleCBiYWIzYWU4Li44NDkwYjhjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0Mi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDIvYnVpbGQueG1sCkBAIC0yOSwxNCArMjksMTQgQEAKICAgJmNvbW1vbkJ1aWxkOwogICAmdGVzdHByb3BlcnRpZXM7CiAKLSAgICAKKwogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsc2V0dXAtamRiYyxzZXR1cC1zcWwsZGVwbG95LHJ1bndlYix1bmRlcGxveSxjbGVhbnVwLWpkYmMsY2xlYW51cC1zcWwiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgIDxkZWxldGUgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgotLS0+ICAKKy0tPgogICA8IS0tCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLXdhciIvPgpAQCAtNzgsNyArNzgsNyBAQAogICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLXNlcnZsZXQiLz4KLSAgLS0+ICAKKyAgLS0+CiAgICAgPGVjaG8gbWVzc2FnZT0ibXkgYnVpbGQgY2xhc3NlcyBkaXIgaXM6JHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICA8ZGVsZXRlIGZpbGU9IiR7d2FyLmZpbGV9Ii8+CiAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIi8+CkBAIC0xMDQsNyArMTA0LDcgQEAKICAgICA8ZWNobyBtZXNzYWdlPSJjcmVhdGVkIHdhciBmaWxlICR7d2FyLmZpbGV9Ii8+CiAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtZWFyLXdhciIgZGVwZW5kcz0iZWpiLWphci1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS13YXItbG9jYWwiPgogICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KQEAgLTExOCw3ICsxMTgsNyBAQAogICAgICAgdG9maWxlPSIke2Fzc2VtYmxlLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIKICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+Ci0gICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSIgCisgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSIKICAgICAgICAgaW5jbHVkZXM9IiouamFyLCoud2FyLE1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwsbGliL3JlcG9ydGVyLmphciIvPgogICAgIDwvZWFyPgogICA8L3RhcmdldD4KQEAgLTE0Nyw4ICsxNDcsOCBAQAogICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIiA+CiAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqdHMteGEtcG9vbDIiLz4KICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL29yYWNsZWRzMiIvPgotICAgIDwvYW50Y2FsbD4gCi0gICAgCisgICAgPC9hbnRjYWxsPgorCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1vcmFjbGUteGEtcG9vbCIgPgogICAgICAgPHBhcmFtIG5hbWU9InBvb2xuYW1lIiB2YWx1ZT0ianRzLXhhLXBvb2wxIi8+CiAgICAgICA8cGFyYW0gbmFtZT0ib3JhLnVzZXIiIHZhbHVlPSIke29yYS51c2VyMX0iLz4KQEAgLTE1NiwxMyArMTU2LDEzIEBACiAgICAgICA8cGFyYW0gbmFtZT0ib3JhLnNpZCIgdmFsdWU9IiR7b3JhLnNpZDF9Ii8+CiAgICAgICA8cGFyYW0gbmFtZT0ib3JhLnVybCIgdmFsdWU9IiR7b3JhLnVybDF9Ii8+CiAgICAgPC9hbnRjYWxsPgotICAgIAorCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iID4KICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9Imp0cy14YS1wb29sMSIvPgogICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvb3JhY2xldGhpcmQiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAtamRiYyIgPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIiA+CiAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9vcmFjbGVkczIiLz4KQEAgLTE3MSwxNiArMTcxLDE2IEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iID4KICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL29yYWNsZXRoaXJkIi8+CiAgICAgPC9hbnRjYWxsPgotICAgIAorCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1jb25ucG9vbC1jb21tb24iID4KICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9Imp0cy14YS1wb29sMiIvPgogICAgIDwvYW50Y2FsbD4KLSAgICAKKwogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIiA+CiAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqdHMteGEtcG9vbDEiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InNldHVwLXNxbCIgPgogICAgIDxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBzcWwgc3RhdGVtZW50IGF0IGZyb20gJHtjcmVhdGUuc3FsLmZpbGUxfSIvPgogICAgIDxzcWwKQEAgLTE5Miw3ICsxOTIsNyBAQAogICAgICAgb25lcnJvcj0iY29udGludWUiCiAgICAgICBwcmludD0ieWVzIgogICAgICAgY2xhc3NwYXRoPSIke2RiZHJpdmVyLmNsYXNzcGF0aH0iLz4KLSAgICAKKwogICAgIDxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBzcWwgc3RhdGVtZW50IGF0IGZyb20gJHtjcmVhdGUuc3FsLmZpbGUyfSIvPgogICAgIDxzcWwKICAgICAgIGRyaXZlcj0iJHtkYi5kcml2ZXJ9IgpAQCAtMjE3LDcgKzIxNyw3IEBACiAgICAgICBvbmVycm9yPSJjb250aW51ZSIKICAgICAgIHByaW50PSJ5ZXMiCiAgICAgICBjbGFzc3BhdGg9IiR7ZGJkcml2ZXIuY2xhc3NwYXRofSIvPgotICAgIAorCiAgICAgPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIHNxbCBzdGF0ZW1lbnQgYXQgZnJvbSAke2Ryb3Auc3FsLmZpbGUyfSIvPgogICAgIDxzcWwKICAgICAgIGRyaXZlcj0iJHtkYi5kcml2ZXJ9IgpAQCAtMjMwLDI4ICsyMzAsMjggQEAKICAgICAgIGNsYXNzcGF0aD0iJHtkYmRyaXZlci5jbGFzc3BhdGh9Ii8+CiAKICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgIDwvdGFyZ2V0PgotICAKLSAgCisKKwogICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgIDwvdGFyZ2V0PgotICAKLSAgPCEtLSAKKworICA8IS0tCiAgIFRvbWNhdCdzIEdUZXN0IHRvb2wgZm9yIHdlYnRlc3RzCiAgIC0tPgogICA8dGFyZ2V0IG5hbWU9InJ1bndlYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgIDx0YXNrZGVmIG5hbWU9Imd0ZXN0IiBjbGFzc25hbWU9Im9yZy5hcGFjaGUudG9tY2F0LnRhc2suR1Rlc3QiIAorICAgIDx0YXNrZGVmIG5hbWU9Imd0ZXN0IiBjbGFzc25hbWU9Im9yZy5hcGFjaGUudG9tY2F0LnRhc2suR1Rlc3QiCiAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi90ZXN0ZHJpdmVyc2VjdXJpdHkuamFyOiR7ZW52LkFQU19IT01FfS9saWIvY29tbW9ucy1sb2dnaW5nLmphciIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJ3Z2RpciIgdmFsdWU9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0MiIvPgotICAgIDxndGVzdCByZXF1ZXN0PSJHRVQgL3R4bnN0YXR1cy10ZXN0Mi9ibXNlcnZsZXQgSFRUUC8xLjAiIAorICAgIDxndGVzdCByZXF1ZXN0PSJHRVQgL3R4bnN0YXR1cy10ZXN0Mi9ibXNlcnZsZXQgSFRUUC8xLjAiCiAgICAgICBkZWJ1Zz0iOSIKICAgICAgIGZpcnN0VGFzaz0idHJ1ZSIKICAgICAgIGxhc3RUZXN0PSJ0cnVlIgpAQCAtMjcyLDcgKzI3Miw3IEBACiAgICAgICB0ZXN0Q2FzZU5hbWU9InR4bnN0YXR1cy10ZXN0MiIKICAgICAgIHRlc3RDYXNlRGVzY3JpcHRpb249InR4bnN0YXR1cy10ZXN0MiIKICAgICAgIHRlc3RTdHJhdGVneT0idHhuc3RhdHVzLXRlc3QyIi8+Ci0gIDwvdGFyZ2V0PiAgCisgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWpkYmMtb3JhY2xlLXhhLXBvb2wiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiIgPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDIvZWpiL2Jtc2FtcGxlMS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDIvZWpiL2Jtc2FtcGxlMS5qYXZhCmluZGV4IDc4ODM1YWMuLjY5Zjk1MjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QyL2VqYi9ibXNhbXBsZTEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0Mi9lamIvYm1zYW1wbGUxLmphdmEKQEAgLTI4LDYgKzI4LDYgQEAKIHB1YmxpYyBpbnRlcmZhY2UgYm1zYW1wbGUxIGV4dGVuZHMgRUpCT2JqZWN0CiB7CiAgICAgcHVibGljIGludCBwZXJmb3JtREJPcHMoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotCXB1YmxpYyBpbnQgcGVyZm9ybURCT3BzMigpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgcHVibGljIGludCBwZXJmb3JtREJPcHMyKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDIvZWpiL2Jtc2FtcGxlYmVhbjEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QyL2VqYi9ibXNhbXBsZWJlYW4xLmphdmEKaW5kZXggOTBiZmVlYi4uMDU2NWQ3MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDIvZWpiL2Jtc2FtcGxlYmVhbjEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0Mi9lamIvYm1zYW1wbGViZWFuMS5qYXZhCkBAIC0yNSwxNCArMjUsMTQgQEAKIGltcG9ydCBqYXZheC5zcWwuKjsKIGltcG9ydCBqYXZhLnNxbC4qOwogCi1wdWJsaWMgY2xhc3MgYm1zYW1wbGViZWFuMSBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIAorcHVibGljIGNsYXNzIGJtc2FtcGxlYmVhbjEgaW1wbGVtZW50cyBTZXNzaW9uQmVhbgogewotCUVKQkNvbnRleHQgZWpiY29udGV4dDsKLXRyYW5zaWVudAlqYXZheC5zcWwuRGF0YVNvdXJjZSBkcyxkczI7Ci10cmFuc2llbnQJamF2YS5zcWwuQ29ubmVjdGlvbiBjb25uID0gbnVsbCxjb25uMj1udWxsOworICAgIEVKQkNvbnRleHQgZWpiY29udGV4dDsKK3RyYW5zaWVudCAgICBqYXZheC5zcWwuRGF0YVNvdXJjZSBkcyxkczI7Cit0cmFuc2llbnQgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb25uID0gbnVsbCxjb25uMj1udWxsOwogdHJhbnNpZW50ICAgIFN0YXRlbWVudCBzdG10ID0gbnVsbCxzdG10Mj1udWxsOwogdHJhbnNpZW50ICAgIFJlc3VsdFNldCBycyA9IG51bGwscnMyPW51bGw7Ci0JCisKIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0IGN0eCkKICAgICB7CkBAIC00MywxNSArNDMsMTUgQEAKICAgICB7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgCisgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkKICAgICB7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpCiAgICAgewogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpCiAgICAgewogICAgIH0KIApAQCAtNjMsMjEgKzYzLDIxIEBACiAgICAgewogICAgICAgICB0cnkgewogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gbWV0aG9kMSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIG1ldGhvZDEiKTsKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBjdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L2pkYmMvb3JhY2xldGhpcmQiKTsKLSAgICAgIAkgICAgU3lzdGVtLm91dC5wcmludGxuKCJkcyBsb29rdXAgc3VjY2VlZGVkIik7CisgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZHMgbG9va3VwIHN1Y2NlZWRlZCIpOwogICAgICAgICAgICAgVXNlclRyYW5zYWN0aW9uIHR4ID0oVXNlclRyYW5zYWN0aW9uKW1fY3R4LmdldFVzZXJUcmFuc2FjdGlvbigpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ1dHggc3VjY2VlZGVkIit0eCk7IAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ1dHggc3VjY2VlZGVkIit0eCk7CiAgICAgICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW9uIHN1Y2NlZWRlZCIrY29ubik7Ci0JICAgIHR4LmJlZ2luKCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInR4biBzdGF0dXMgOiIgK3R4LmdldFN0YXR1cygpKTsgCisgICAgICAgIHR4LmJlZ2luKCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInR4biBzdGF0dXMgOiIgK3R4LmdldFN0YXR1cygpKTsKICAgICAgICAgICAgIC8vY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW9uIHN1Y2NlZWRlZCIrY29ubik7CiAgICAgICAgICAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgLy9zdG10LmV4ZWN1dGVRdWVyeSgiZGVsZXRlIGZyb20gc3RhdHVzMjEiKTsKLQkgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJpbnNlcnQgaW50byBzdGF0dXMyMSB2YWx1ZXMoJ21ldGhvZDEnLDMpIik7CisgICAgICAgIC8vc3RtdC5leGVjdXRlUXVlcnkoImRlbGV0ZSBmcm9tIHN0YXR1czIxIik7CisgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiaW5zZXJ0IGludG8gc3RhdHVzMjEgdmFsdWVzKCdtZXRob2QxJywzKSIpOwogICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5MSA9ICJzZWxlY3QgKiBmcm9tIHN0YXR1czIxIjsKICAgICAgICAgICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkxKTsKICAgICAgICAgICAgIHdoaWxlKHJzLm5leHQoKSkKQEAgLTg1LDE1ICs4NSwxNSBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTGFzdCBOYW1lOiAiICsgcnMuZ2V0U3RyaW5nKCJOQU1FIikpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmlyc3QgTmFtZTogIiArIHJzLmdldEludCgibnVtIikpOwogICAgICAgICAgICAgfQotICAgICAgICB9IAorICAgICAgICB9CiAgICAgICAgIGNhdGNoIChTUUxFeGNlcHRpb24gZSkKICAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTUUxFeGNlcHRpb24gaXMgOiAiICsgZSk7ICAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1FMRXhjZXB0aW9uIGlzIDogIiArIGUpOwogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIGlzIDogIiArIGUpOyAgICAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIGlzIDogIiArIGUpOwogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQogCkBAIC0xMDEsNDIgKzEwMSw0MiBAQAogICAgIH0KIAogCi0JIHB1YmxpYyBpbnQgcGVyZm9ybURCT3BzMigpCi0JICAgICB7Ci0JICAgdHJ5ewotCQkgIEluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gbWV0aG9kMiIpOwotCQkgIGRzMiA9IChEYXRhU291cmNlKSBjdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L2pkYmMvb3JhY2xlZHMyIik7Ci0JCSAgU3lzdGVtLm91dC5wcmludGxuKCJzZWNvbmQgZHMgbG9va3VwIik7Ci0JCSAgVXNlclRyYW5zYWN0aW9uIHR4ID0oVXNlclRyYW5zYWN0aW9uKW1fY3R4LmdldFVzZXJUcmFuc2FjdGlvbigpOwotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiZ290IHNlY29uZCB0eCIrdHgpOwotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigidHhuIHN0YXR1cyA6IiArdHguZ2V0U3RhdHVzKCkpOworICAgICBwdWJsaWMgaW50IHBlcmZvcm1EQk9wczIoKQorICAgICAgICAgeworICAgICAgIHRyeXsKKyAgICAgICAgICBJbml0aWFsQ29udGV4dCBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIG1ldGhvZDIiKTsKKyAgICAgICAgICBkczIgPSAoRGF0YVNvdXJjZSkgY3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qZGJjL29yYWNsZWRzMiIpOworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic2Vjb25kIGRzIGxvb2t1cCIpOworICAgICAgICAgIFVzZXJUcmFuc2FjdGlvbiB0eCA9KFVzZXJUcmFuc2FjdGlvbiltX2N0eC5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdvdCBzZWNvbmQgdHgiK3R4KTsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInR4biBzdGF0dXMgOiIgK3R4LmdldFN0YXR1cygpKTsKIAotCSAgICAgICAgICBjb25uMiA9IGRzMi5nZXRDb25uZWN0aW9uKCk7Ci0JICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGlvbiBzdWNjZWVkZWQiICtjb25uMik7Ci0JCSAgc3RtdDIgPSBjb25uMi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgICAgY29ubjIgPSBkczIuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3Rpb24gc3VjY2VlZGVkIiArY29ubjIpOworICAgICAgICAgIHN0bXQyID0gY29ubjIuY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICAgIC8vICAgIHN0bXQyLmV4ZWN1dGVRdWVyeSgiZGVsZXRlIGZyb20gc3RhdHVzMiIpOwotCQkgIHN0bXQyLmV4ZWN1dGVVcGRhdGUoImluc2VydCBpbnRvIHN0YXR1czIgdmFsdWVzKCdtZXRob2QyJykiKTsKLQkJICBTdHJpbmcgcXVlcnkxID0gInNlbGVjdCAqIGZyb20gc3RhdHVzMiI7Ci0JCSAgcnMyID0gc3RtdDIuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5MSk7Ci0JCSAgU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciByczIiKTsKLQkJICAgd2hpbGUocnMyLm5leHQoKSkKLQkJICAgewotCQkgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxhc3QgTmFtZTogIiArIHJzMi5nZXRTdHJpbmcoIk5BTUUiKSk7Ci0JCSAgIH0KKyAgICAgICAgICBzdG10Mi5leGVjdXRlVXBkYXRlKCJpbnNlcnQgaW50byBzdGF0dXMyIHZhbHVlcygnbWV0aG9kMicpIik7CisgICAgICAgICAgU3RyaW5nIHF1ZXJ5MSA9ICJzZWxlY3QgKiBmcm9tIHN0YXR1czIiOworICAgICAgICAgIHJzMiA9IHN0bXQyLmV4ZWN1dGVRdWVyeShxdWVyeTEpOworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgcnMyIik7CisgICAgICAgICAgIHdoaWxlKHJzMi5uZXh0KCkpCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMYXN0IE5hbWU6ICIgKyByczIuZ2V0U3RyaW5nKCJOQU1FIikpOworICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInR4biBzdGF0dXMgOiIgK3R4LmdldFN0YXR1cygpKTsKLQkvLyAgICAgICAgVGhyZWFkLnNsZWVwKDEwMDAwMCk7CQkJCi0JCSAgU3lzdGVtLm91dC5wcmludGxuKCJ0eG4gc3RhdHVzIDoiICt0eC5nZXRTdGF0dXMoKSk7Ci0JICAJICBycy5jbG9zZSgpOyAKLQkgICAgICAgICAgcnMyLmNsb3NlKCk7Ci0JCSAgc3RtdC5jbG9zZSgpOwotCSAgICAgICAgICBjb25uLmNsb3NlKCk7Ci0JCSAgc3RtdDIuY2xvc2UoKTsKLQkJICBjb25uMi5jbG9zZSgpOwotCQkgIHR4LmNvbW1pdCgpOwotCQl9Ci0JCWNhdGNoIChTUUxFeGNlcHRpb24gZSkKLQkJIHsKKyAgICAvLyAgICAgICAgVGhyZWFkLnNsZWVwKDEwMDAwMCk7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0eG4gc3RhdHVzIDoiICt0eC5nZXRTdGF0dXMoKSk7CisgICAgICAgICAgICBycy5jbG9zZSgpOworICAgICAgICAgICAgICByczIuY2xvc2UoKTsKKyAgICAgICAgICBzdG10LmNsb3NlKCk7CisgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgICBzdG10Mi5jbG9zZSgpOworICAgICAgICAgIGNvbm4yLmNsb3NlKCk7CisgICAgICAgICAgdHguY29tbWl0KCk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKQorICAgICAgICAgewogICAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImV4Y2VwdGlvbiAiICsgZS5nZXRNZXNzYWdlKCkpOwpAQCAtMTQ0LDI1ICsxNDQsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlcnJvciBjb2RlIiArZS5nZXRFcnJvckNvZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicWwgc3RhdGUgIiArZS5nZXRTUUxTdGF0ZSgpKTsKIAotICAgICAgICAgICAgICAgLyogICAKLQkJCWU9ZS5nZXROZXh0RXhjZXB0aW9uKCk7CisgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgZT1lLmdldE5leHRFeGNlcHRpb24oKTsKICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJleGNlcHRpb24gIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlcnJvciBjb2RlIiArZS5nZXRFcnJvckNvZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicWwgc3RhdGUgIiArZS5nZXRTUUxTdGF0ZSgpKTsKLQkgICAgICAgICovCSAgICAKKyAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogCi0JCSAgfWNhdGNoKEV4Y2VwdGlvbiBleCkKKyAgICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGV4KQogICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJleGNlcHRpb24gIiArIGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9Ci0JCWNhdGNoIChFeGNlcHRpb24gZXgpCi0JCSB7Ci0JCSBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBpcyA6ICIgKyBleC5nZXRNZXNzYWdlKCkpOworICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KQorICAgICAgICAgeworICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gaXMgOiAiICsgZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0Mi9zZXJ2bGV0L2Jtc2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDIvc2VydmxldC9ibXNlcnZsZXQuamF2YQppbmRleCBkOTQ5YWUxLi4wYmJjNzIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0Mi9zZXJ2bGV0L2Jtc2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QyL3NlcnZsZXQvYm1zZXJ2bGV0LmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKIGltcG9ydCBqYXZheC5zcWwuKjsKIGltcG9ydCBjb20uc3VuLnMxYXNkZXYuamRiYy50cmFuc2FjdGlvbnMudGVzdDIuZWpiLio7CiAKLSAKKwogcHVibGljIGNsYXNzIGJtc2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0CiB7CiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCkBAIC0zNCw3ICszNCw3IEBACiAgICAgewogICAgICAgICAgZGVmYXVsdEFjdGlvbihyZXEsIHJlcyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KICAgICB7CkBAIC02MSwxMyArNjEsMTMgQEAKICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzLmdldFdyaXRlcigpOwogICAgICBDb250ZXh0IGN0eDsKICAgICAgUHJvcGVydGllcyBwOwotCSAgICAgICAKKwogICAgICB0cnkKICAgICAgIHsKLSAgIAkgIEhhc2h0YWJsZSBlbnYgPSBuZXcgSGFzaHRhYmxlKDEpOworICAgICAgICAgSGFzaHRhYmxlIGVudiA9IG5ldyBIYXNodGFibGUoMSk7CiAgICAgICBlbnYucHV0KCJqYXZheC5uYW1pbmcuZmFjdG9yeS5pbml0aWFsIiwgImNvbS5uZXRzY2FwZS5zZXJ2ZXIuam5kaS5Sb290Q29udGV4dEZhY3RvcnkiKTsKLSAJICBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoZW52KTsKLSAgICAgICAvL1Rlc3RVdGlsLmluaXQocCk7IAorICAgICAgIGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dChlbnYpOworICAgICAgIC8vVGVzdFV0aWwuaW5pdChwKTsKICAgICAgIE9iamVjdCBvYmpyZWYgPSBjdHgubG9va3VwKCJlamIvYm1zYW1wbGViZWFuMSIpOwogICAgICAgaG9tZSA9IChibXNhbXBsZTFob21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIGJtc2FtcGxlMWhvbWUuY2xhc3MpOwogICAgICAgcmVtb3RlID0gaG9tZS5jcmVhdGUoKTsKQEAgLTc1LDEwICs3NSwxMCBAQAogICAgICAgb3V0LnByaW50bG4oIiB0aGUgcmVzdWx0IG9mIGludm9raW5nIHRoZSBlamIgbWV0aG9kIGlzICIgKyByZW1vdGUucGVyZm9ybURCT3BzKCkpOwogICAgICAgIG91dC5wcmludGxuKCJjYWxsaW5nIE0yIC0+REIyIik7CiAgICAgICBvdXQucHJpbnRsbigiLi4uLi4uIHJlc3VsdCBvZiBpbnZva2luZyB0aGUgZWpiIG1ldGhvZCBpcyAiICsgcmVtb3RlLnBlcmZvcm1EQk9wczIoKSk7Ci0JICAgfQorICAgICAgIH0KICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCiAgICAgICAgewotCSAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEVSUk9SOiAiICsgZSk7CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgRVJST1I6ICIgKyBlKTsKICAgICAgICB9CiAgICAgICB0cnkKICAgICAgICAgewpAQCAtODYsMTcgKzg2LDE3IEBACiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29ubiA9IG51bGwsY29ubjIgPSBudWxsOwogICAgICAgICBqYXZhLnNxbC5TdGF0ZW1lbnQgc3RtdCA9IG51bGwsc3RtdDIgPSBudWxsOwogICAgICAgICBqYXZhLnNxbC5SZXN1bHRTZXQgcnMgPSBudWxsLHJzMiA9IG51bGw7Ci0JY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JZHMgPSAoRGF0YVNvdXJjZSljdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L2pkYmMvb3JhY2xldGhpcmQiKTsKLQlkczIgPSAoRGF0YVNvdXJjZSljdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L2pkYmMvb3JhY2xlZHMyIik7Ci0gICAgICAgIAorICAgIGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIGRzID0gKERhdGFTb3VyY2UpY3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qZGJjL29yYWNsZXRoaXJkIik7CisgICAgZHMyID0gKERhdGFTb3VyY2UpY3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qZGJjL29yYWNsZWRzMiIpOworCiAgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JY29ubjIgPSBkczIuZ2V0Q29ubmVjdGlvbigpOwotCXN0bXQ9Y29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQlzdG10Mj1jb25uMi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQlvdXQucHJpbnRsbigiLi4uLi4uLi4uLlZlcmlmeWluZyB0YWJsZSBjb250ZW50cyAuLi4uIik7Ci0JcnM9c3RtdC5leGVjdXRlUXVlcnkoInNlbGVjdCAqIGZyb20gc3RhdHVzMjEiKTsKLQlpbnQgY291bnQ9MDsKKyAgICBjb25uMiA9IGRzMi5nZXRDb25uZWN0aW9uKCk7CisgICAgc3RtdD1jb25uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgIHN0bXQyPWNvbm4yLmNyZWF0ZVN0YXRlbWVudCgpOworICAgIG91dC5wcmludGxuKCIuLi4uLi4uLi4uVmVyaWZ5aW5nIHRhYmxlIGNvbnRlbnRzIC4uLi4iKTsKKyAgICBycz1zdG10LmV4ZWN1dGVRdWVyeSgic2VsZWN0ICogZnJvbSBzdGF0dXMyMSIpOworICAgIGludCBjb3VudD0wOwogICAgICAgICAgd2hpbGUgKHJzLm5leHQoKSkKICAgICAgICAge2NvdW50Kys7CiAgICAgICAgICBvdXQucHJpbnRsbigicmVjb3JkID0gIitycy5nZXRTdHJpbmcoMSkpOwpAQCAtMTA5LDI2ICsxMDksMjYgQEAKICAgICAgICAgIH0KICAgICAgICAgIG91dC5wcmludGxuKCJUb3RhbCBSZWNvcmRzIGluIHRhYmxlMSA9ICIrY291bnQpOwogICAgICAgICBvdXQucHJpbnRsbigiVG90YWwgUmVjb3JkcyBpbiB0YWJsZTIgPSAiK2NvdW50Mik7Ci0JaWYgKChjb3VudD09MSkmJihjb3VudDI9PTEpKQorICAgIGlmICgoY291bnQ9PTEpJiYoY291bnQyPT0xKSkKICAgICAgICAgIG91dC5wcmludGxuKCJSZXN1bHQ6RkFJTCIpOwogICAgICAgICAgZWxzZQogICAgICAgICAgb3V0LnByaW50bG4oIlJlc3VsdDpQQVNTIik7CiAgICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoImRlbGV0ZSBmcm9tIHN0YXR1czIxIik7CiAgICAgICAgICBzdG10Mi5leGVjdXRlVXBkYXRlKCJkZWxldGUgZnJvbSBzdGF0dXMyIik7CiAgICAgICAgICBjb25uLmNvbW1pdCgpOwotICAgICAgICAgY29ubjIuY29tbWl0KCk7ICAKKyAgICAgICAgIGNvbm4yLmNvbW1pdCgpOwogICAgICAgICAgcnMuY2xvc2UoKTsKICAgICAgICAgIG91dC5wcmludGxuKCJkZWxldGVkIGluIDEiKTsKICAgICAgICAgIG91dC5wcmludGxuKCJkZWxldGVkIGluIDIiKTsKLQkgcnMyLmNsb3NlKCk7CisgICAgIHJzMi5jbG9zZSgpOwogICAgICAgICAgc3RtdC5jbG9zZSgpOwotCXN0bXQyLmNsb3NlKCk7CisgICAgc3RtdDIuY2xvc2UoKTsKIAotCSBjb25uLmNsb3NlKCk7Ci0JIGNvbm4yLmNsb3NlKCk7Ci0gICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7fQkJCSAgICAgIAotCQkJCQkJCQkgICAgICAKLQkgIAorICAgICBjb25uLmNsb3NlKCk7CisgICAgIGNvbm4yLmNsb3NlKCk7CisgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7fQorCisKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc3BhcmVudC1wb29sLXJlY29uZmlnLXJlc291cmNlcy14bWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy1yZXNvdXJjZXMteG1sL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzM0MmVhNC4uOTc4MDU0NCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc3BhcmVudC1wb29sLXJlY29uZmlnLXJlc291cmNlcy14bWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zcGFyZW50LXBvb2wtcmVjb25maWctcmVzb3VyY2VzLXhtbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtdHJhbnNwYXJlbnRfcG9vbF9yZWNvbmZpZyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy1yZXNvdXJjZXMteG1sL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy1yZXNvdXJjZXMteG1sL2J1aWxkLnhtbAppbmRleCBjMzUxOTNiLi40OWQ2M2E2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zcGFyZW50LXBvb2wtcmVjb25maWctcmVzb3VyY2VzLXhtbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc3BhcmVudC1wb29sLXJlY29uZmlnLXJlc291cmNlcy14bWwvYnVpbGQueG1sCkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPCEtLTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtY29tbW9uIi8+LS0+CiAKLQk8IS0tIFdvcmthcm91bmQgZm9yIGlzc3VlIDE4NzgzIC0tPgorICAgIDwhLS0gV29ya2Fyb3VuZCBmb3IgaXNzdWUgMTg3ODMgLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJjcmVhdGUtbW9kdWxlLWNvbmZpZyIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCkBAIC0xMjMsNyArMTIzLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamF2YTphcHAvcWwtamRiYy1wb29sLnByb3BlcnR5LmR5bmFtaWMtcmVjb25maWd1cmF0aW9uLXdhaXQtdGltZW91dC1pbi1zZWNvbmRzPTEyMCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgIAorCiAKICAgICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc3BhcmVudC1wb29sLXJlY29uZmlnLXJlc291cmNlcy14bWwvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc3BhcmVudC1wb29sLXJlY29uZmlnLXJlc291cmNlcy14bWwvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGRkNGM1ZTUuLjExZTYxZWUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy1yZXNvdXJjZXMteG1sL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zcGFyZW50LXBvb2wtcmVjb25maWctcmVzb3VyY2VzLXhtbC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsMTAgKzEsMTAgQEAKLQ0KLURyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOw0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIgVkFMVUVTKDEsICd3eHl6Jyk7DQorCitEcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIgVkFMVUVTKDEsICd3eHl6Jyk7CiBJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIgVkFMVUVTKDIsICdwcXJzJyk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc3BhcmVudC1wb29sLXJlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zcGFyZW50LXBvb2wtcmVjb25maWcvYnVpbGQucHJvcGVydGllcwppbmRleCBjMzQyZWE0Li45NzgwNTQ0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zcGFyZW50LXBvb2wtcmVjb25maWcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zcGFyZW50LXBvb2wtcmVjb25maWcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLXRyYW5zcGFyZW50X3Bvb2xfcmVjb25maWciLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zcGFyZW50LXBvb2wtcmVjb25maWcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc3BhcmVudC1wb29sLXJlY29uZmlnL2J1aWxkLnhtbAppbmRleCA4NGM1Y2VmLi45MjZiMmU1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zcGFyZW50LXBvb2wtcmVjb25maWcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy9idWlsZC54bWwKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWNvbW1vbiIvPgogCi0JPCEtLSBXb3JrYXJvdW5kIGZvciBpc3N1ZSAxODc4MyAtLT4KKyAgICA8IS0tIFdvcmthcm91bmQgZm9yIGlzc3VlIDE4NzgzIC0tPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iY3JlYXRlLW1vZHVsZS1jb25maWciLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgpAQCAtMTE5LDcgKzExOSw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLnFsLWpkYmMtcG9vbC5wcm9wZXJ0eS5keW5hbWljLXJlY29uZmlndXJhdGlvbi13YWl0LXRpbWVvdXQtaW4tc2Vjb25kcz0xMjAiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgICAgICAKKwogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc3BhcmVudC1wb29sLXJlY29uZmlnL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZGQ0YzVlNS4uMTFlNjFlZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc3BhcmVudC1wb29sLXJlY29uZmlnL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zcGFyZW50LXBvb2wtcmVjb25maWcvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDEwICsxLDEwIEBACi0NCi1Ecm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjsNCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyIFZBTFVFUygxLCAnd3h5eicpOw0KKworRHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI7CisKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyIFZBTFVFUygxLCAnd3h5eicpOwogSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyIFZBTFVFUygyLCAncHFycycpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhTdHJlc3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhTdHJlc3MvYnVpbGQucHJvcGVydGllcwppbmRleCA2YmM1NTM1Li40NjMwYWE0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4U3RyZXNzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eFN0cmVzcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWVucm9sbGVyIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1lbnJvbGxlciIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJkZWZhdWx0LWluc3RhbmNlIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhTdHJlc3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eFN0cmVzcy9idWlsZC54bWwKaW5kZXggMzIzY2E3ZS4uYWI4OGQzOCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eFN0cmVzcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eFN0cmVzcy9idWlsZC54bWwKQEAgLTMyLDE3ICszMiwxNyBAQAogICAgICZydW47CiAKICAgPCEtLSAgPHRhcmdldCBuYW1lPSJhbGwiPgotCTxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJhdXRvZGVwbG95Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJydW4iLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgotCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJydW4iLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImF1dG9kZXBsb3kiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1biIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3kiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3kiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1biIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3kiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CiAgICAgPC90YXJnZXQ+IC0tPgogCkBAIC01Niw3ICs1Niw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC02OCwxMyArNjgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qU3R1ZGVudCouY2xhc3MsKiovKkVucm9sbGVyKi5jbGFzcywqKi8qQ291cnNlKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9Db3Vyc2UuY2xhc3MsKiovRW5yb2xsZXIuY2xhc3MsKiovU3R1ZGVudC5jbGFzcywqKi8qSG9tZSouY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtb3JhY2xlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX29yYWNsZS5zcWwiLz4KQEAgLTg3LDE1ICs4NywxNSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJibXBFbnJvbGxlclBvb2wiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2JtcC1lbnJvbGxlckRCLWNvbnRhaW5lciIvPgotCTwvYW50Y2FsbD4KKyAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImJtcEVucm9sbGVyUG9vbCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvYm1wLWVucm9sbGVyREItYXBwbGljYXRpb24iLz4KLQk8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4KKyAgICA8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZXhlY3V0ZS1vcmFjbGUtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgY2hlY2stZGIiIGlmPSJvcmFjbGUiPiAKKyAgICA8dGFyZ2V0IG5hbWU9ImV4ZWN1dGUtb3JhY2xlLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNoZWNrLWRiIiBpZj0ib3JhY2xlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRiLmRyaXZlciIgdmFsdWU9IiR7b3JhY2xlLmRyaXZlcn0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkYi51cmwiIHZhbHVlPSIke29yYWNsZS51cmx9Ii8+CkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktb3JhY2xlLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNoZWNrLWRiIiBpZj0ib3JhY2xlIj4gCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktb3JhY2xlLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNoZWNrLWRiIiBpZj0ib3JhY2xlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIKICAgICAgICAgICAgICB2YWx1ZT0iY3JlYXRlLWpkYmMtY29ubmVjdGlvbi1wb29sCkBAIC0xMjksMjUgKzEyOSwyNSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJibXBFbnJvbGxlclBvb2wiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2JtcC1lbnJvbGxlckRCIi8+Ci0JPC9hbnRjYWxsPgorICAgIDwvYW50Y2FsbD4KIAogICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktcG9pbnRiYXNlLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNoZWNrLWRiIiB1bmxlc3M9Im9yYWNsZSI+IAorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LXBvaW50YmFzZS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjaGVjay1kYiIgdW5sZXNzPSJvcmFjbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJibXBFbnJvbGxlclBvb2wiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2JtcC1lbnJvbGxlckRCIi8+Ci0JPC9hbnRjYWxsPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZXhlY3V0ZS1wb2ludGJhc2UtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgY2hlY2stZGIiIHVubGVzcz0ib3JhY2xlIj4gCisgICAgPHRhcmdldCBuYW1lPSJleGVjdXRlLXBvaW50YmFzZS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjaGVjay1kYiIgdW5sZXNzPSJvcmFjbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyB2aWEgYXNhZG1pbi4uLiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgpAQCAtMTcyLDcgKzE3Miw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICA8IS0tICAgIDxlY2hvIG1lc3NhZ2U9IlNIRUVUQUwgOiBidWcgZHVyaW5nIHVuZGVwbG95bWVudC4gVGhlIGdlbmVyYXRlZCBkaXIgZG9lcyBub3QgZ2V0IGRlbGV0ZWQuIEhlbmNlIGZvcmNpbmcgZGVsZXRpb24gYXMgYSB0ZW1wb3Jhcnkgc29sdXRpb24uIi8+CiAgICAgICA8ZGVsZXRlIGRpcj0iJHtkZXBsb3llZC1hcHBzfS8ke2FwcG5hbWV9QXBwXzEiLz4gLS0+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1wb2ludGJhc2UtY29tbW9uIj4KQEAgLTE5MSw3ICsxOTEsNyBAQAogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJibXBFbnJvbGxlclBvb2wiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvYm1wLWVucm9sbGVyREIiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpAQCAtMjA4LDcgKzIwOCw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImF1dG9kZXBsb3ktZWFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRyb3BwaW5nIHRoZSBhcHAgdW5kZXIgdGhlIGF1dG9kZXBsb3kgZGlyLi4uIi8+Ci0JPGRlbGV0ZSBmaWxlPSIke2F1dG9kZXBsb3kuZGlyfS8ke2FwcG5hbWV9QXBwLmVhcl9kZXBsb3llZCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgPGRlbGV0ZSBmaWxlPSIke2F1dG9kZXBsb3kuZGlyfS8ke2FwcG5hbWV9QXBwLmVhcl9kZXBsb3llZCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIKICAgICAgICAgICAgIHRvZGlyPSIke2F1dG9kZXBsb3kuZGlyfSIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eFN0cmVzcy9jbGllbnQvRW5yb2xsZXJDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhTdHJlc3MvY2xpZW50L0Vucm9sbGVyQ2xpZW50LmphdmEKaW5kZXggZjViMjNiMC4uODcxY2Q0ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eFN0cmVzcy9jbGllbnQvRW5yb2xsZXJDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4U3RyZXNzL2NsaWVudC9FbnJvbGxlckNsaWVudC5qYXZhCkBAIC0yNiw4MCArMjYsODAgQEAKIAogLy9TdHJlc3MgQ2xpZW50CiBwdWJsaWMgY2xhc3MgRW5yb2xsZXJDbGllbnQgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhUSFJFQURTPSAxOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhDWUNMRVNQRVJUSFJFQUQ9MTsKLQlwcml2YXRlIHN0YXRpYyBBcnJheUxpc3QgdGhyZWFkc0FMID0gbmV3IEFycmF5TGlzdCgpOwotCXByaXZhdGUgc3RhdGljIE9iamVjdCBsb2NrID0gbmV3IE9iamVjdCgpOwotCQotCXByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0dXMgPQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhUSFJFQURTPSAxOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhDWUNMRVNQRVJUSFJFQUQ9MTsKKyAgICBwcml2YXRlIHN0YXRpYyBBcnJheUxpc3QgdGhyZWFkc0FMID0gbmV3IEFycmF5TGlzdCgpOworICAgIHByaXZhdGUgc3RhdGljIE9iamVjdCBsb2NrID0gbmV3IE9iamVjdCgpOworCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXR1cyA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGxvbmcgdGltZVN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXJ0aW5nIHRoZSB0ZXN0Iik7Ci0JICAgIHN0YXR1cy5hZGREZXNjcmlwdGlvbigiVGVzdGluZyBzdHJlc3MgY21wIHJvc3RlciBhcHAuIik7Ci0JICAgIGZvcihpbnQgaSA9IDAgOyBpIDwgTUFYVEhSRUFEUzsgaSsrKXsKLQkJICAgIGZpbmFsIGludCBjbnQgPSBpOwotCQkgICAgLy9jcmVhdGUgVGhycmVhZCB0byBleGVjdXRlIGRvVGVzdAotCQkgICAgVGhyZWFkIHQgPSBuZXcgVGhyZWFkKG5ldyBSdW5uYWJsZSgpewotCQkJICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkgICAgdHJ5IHsgCi0JCQkJCSAgICAKLQkJCQkJICAgIFN0cmluZyB0aHJlYWRJZCA9ICJUaHItIiArIGNudDsKKyAgICAgICAgc3RhdHVzLmFkZERlc2NyaXB0aW9uKCJUZXN0aW5nIHN0cmVzcyBjbXAgcm9zdGVyIGFwcC4iKTsKKyAgICAgICAgZm9yKGludCBpID0gMCA7IGkgPCBNQVhUSFJFQURTOyBpKyspeworICAgICAgICAgICAgZmluYWwgaW50IGNudCA9IGk7CisgICAgICAgICAgICAvL2NyZWF0ZSBUaHJyZWFkIHRvIGV4ZWN1dGUgZG9UZXN0CisgICAgICAgICAgICBUaHJlYWQgdCA9IG5ldyBUaHJlYWQobmV3IFJ1bm5hYmxlKCl7CisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworCisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdGhyZWFkSWQgPSAiVGhyLSIgKyBjbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiIrY250KTsKLQkJCQkJICAgIGZvcihpbnQgaj0wOyBqIDwgTUFYQ1lDTEVTUEVSVEhSRUFEOyBqKysgKXsKLQkJCQkJCSAgICBTeXN0ZW0ub3V0LnByaW50KCIuIik7Ci0JCQkJCQkgICAgZG9UZXN0KHRocmVhZElkKTsKLQkJCQkJICAgIH0KLQkJCQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkJICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIGV4Y2VwdGlvbiBpbiBUaHJlYWQ6ICIgKyBlLnRvU3RyaW5nKCkpOwotCQkJCQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkgICAgfQotCQkJICAgIH0KLQkJICAgIH0pOwotCQkgICAgdGhyZWFkc0FMLmFkZCh0KTsKLQkJICAgIHQuc3RhcnQoKTsKLQkgICAgfQotCSAgICAKLQkgICAgLy9maW5hbGx5IGpvaW4gYWxsIHRocmVhZHMKLQkgICAgZm9yKGludCBpPTA7IGkgPCB0aHJlYWRzQUwuc2l6ZSgpOyBpKyspewotCQkgICAgKChUaHJlYWQpKHRocmVhZHNBTC5nZXQoaSkpKS5qb2luKCk7Ci0JICAgIH0KLQkgICAgbG9uZyB0aW1lU3RvcCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCSAgICAvL0FwcHJveGltYXRlbHkgNjUgdHJhbnNhY3Rpb25zIHRvIG15Um9zdGVyIHBlciBjeWNsZSBwZXIgdGhyZWFkCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICIgKyAoZG91YmxlKShNQVhUSFJFQURTKk1BWENZQ0xFU1BFUlRIUkVBRCo2NSkgKyAiIHRyYW5zYWN0aW9ucyBDT01QTEVURUQgaW4gIiArIChsb25nKSh0aW1lU3RvcCAtIHRpbWVTdGFydCkgKyAibXMiICk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IGo9MDsgaiA8IE1BWENZQ0xFU1BFUlRIUkVBRDsgaisrICl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvVGVzdCh0aHJlYWRJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiBleGNlcHRpb24gaW4gVGhyZWFkOiAiICsgZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRocmVhZHNBTC5hZGQodCk7CisgICAgICAgICAgICB0LnN0YXJ0KCk7CisgICAgICAgIH0KKworICAgICAgICAvL2ZpbmFsbHkgam9pbiBhbGwgdGhyZWFkcworICAgICAgICBmb3IoaW50IGk9MDsgaSA8IHRocmVhZHNBTC5zaXplKCk7IGkrKyl7CisgICAgICAgICAgICAoKFRocmVhZCkodGhyZWFkc0FMLmdldChpKSkpLmpvaW4oKTsKKyAgICAgICAgfQorICAgICAgICBsb25nIHRpbWVTdG9wID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgIC8vQXBwcm94aW1hdGVseSA2NSB0cmFuc2FjdGlvbnMgdG8gbXlSb3N0ZXIgcGVyIGN5Y2xlIHBlciB0aHJlYWQKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIiArIChkb3VibGUpKE1BWFRIUkVBRFMqTUFYQ1lDTEVTUEVSVEhSRUFEKjY1KSArICIgdHJhbnNhY3Rpb25zIENPTVBMRVRFRCBpbiAiICsgKGxvbmcpKHRpbWVTdG9wIC0gdGltZVN0YXJ0KSArICJtcyIgKTsKIAogICAgICAgICAgICAgaWYgKCBjaGVja0lmUGFzc2VkKCkpIHsKLQkgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoIkxvb2tzIGl0IGlzIHBhc3NlZCAiICwgc3RhdHVzLlBBU1MpOworICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cygiTG9va3MgaXQgaXMgcGFzc2VkICIgLCBzdGF0dXMuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotCSAgICAgICAgc3RhdHVzLmFkZFN0YXR1cygiTG9va3MgaXQgaXMgcGFzc2VkICIgLCBzdGF0dXMuRkFJTCk7CisgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKCJMb29rcyBpdCBpcyBwYXNzZWQgIiAsIHN0YXR1cy5GQUlMKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3RhdHVzLnByaW50U3VtbWFyeSgicm9zdGVyQXBwSUQiKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KDApOwotCSAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIGV4Y2VwdGlvbiBpbiBtYWluOiAiICsgZXgudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZG9UZXN0KFN0cmluZyB0aHJlYWRJZCkgdGhyb3dzIEV4Y2VwdGlvbnsKICAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVFbnJvbGxlciIpOwogCi0gICAgICAgICAgICBFbnJvbGxlckhvbWUgaG9tZSA9IAotICAgICAgICAgICAgICAgIChFbnJvbGxlckhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgICBFbnJvbGxlckhvbWUgaG9tZSA9CisgICAgICAgICAgICAgICAgKEVucm9sbGVySG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnJvbGxlckhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgICBFbnJvbGxlciBlID0gaG9tZS5jcmVhdGUoKTsKIAogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDxNQVhDWUNMRVNQRVJUSFJFQUQ7IGkrKykgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzdWx0OiAiICsgZS5kb1Rlc3QodGhyZWFkSWQpKTsKLSAgICAgICAgICAgIH0gICAgICAgCisgICAgICAgICAgICB9CiAKLQkgICAgZS5yZW1vdmUoKTsKKyAgICAgICAgZS5yZW1vdmUoKTsKIAogICAgIH0KIApAQCAtMTA3LDggKzEwNyw4IEBACiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlRW5yb2xsZXIiKTsKIAotICAgICAgICAgICAgRW5yb2xsZXJIb21lIGhvbWUgPSAKLSAgICAgICAgICAgICAgICAoRW5yb2xsZXJIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgRW5yb2xsZXJIb21lIGhvbWUgPQorICAgICAgICAgICAgICAgIChFbnJvbGxlckhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5yb2xsZXJIb21lLmNsYXNzKTsKIAogICAgICAgICAgICAgRW5yb2xsZXIgZSA9IGhvbWUuY3JlYXRlKCk7CkBAIC0xMTcsNyArMTE3LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhwZWN0ZWQgUmVzdWx0IDogMCIgICk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFjdHVhbCBSZXN1bHQgOiAiICsgcmVzdWx0KTsKIAotCSAgICBlLnJlbW92ZSgpOworICAgICAgICBlLnJlbW92ZSgpOwogCiAgICAgICAgICAgICBpZiAocmVzdWx0ID09IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eFN0cmVzcy9lamIvRW5yb2xsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhTdHJlc3MvZWpiL0Vucm9sbGVyLmphdmEKaW5kZXggZDM5Y2Q3NS4uOWY3MWNkYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eFN0cmVzcy9lamIvRW5yb2xsZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4U3RyZXNzL2VqYi9FbnJvbGxlci5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCiBwdWJsaWMgaW50ZXJmYWNlIEVucm9sbGVyIGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAKKwogICAgcHVibGljIFN0cmluZyBkb1Rlc3QoU3RyaW5nIHRocmVhZElkKQogICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eFN0cmVzcy9lamIvRW5yb2xsZXJCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4U3RyZXNzL2VqYi9FbnJvbGxlckJlYW4uamF2YQppbmRleCAzYzk4ZTAzLi40MDk2YjVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4U3RyZXNzL2VqYi9FbnJvbGxlckJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4U3RyZXNzL2VqYi9FbnJvbGxlckJlYW4uamF2YQpAQCAtMTYsNyArMTYsNyBAQAogCiBwYWNrYWdlIGNvbS5zdW4uczFwZXFlLmVqYi5ibXAuZW5yb2xsZXIuZWpiOwogCi1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuKjsKIGltcG9ydCBqYXZhLnNxbC4qOwogaW1wb3J0IGphdmF4LnNxbC4qOwpAQCAtMjUsNyArMjUsNyBAQAogaW1wb3J0IGphdmF4Lm5hbWluZy4qOwogCiBwdWJsaWMgY2xhc3MgRW5yb2xsZXJCZWFuIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewotIAorCiAgICAgcHJpdmF0ZSBEYXRhU291cmNlIGRzOwogICAgIHByaXZhdGUgRGF0YVNvdXJjZSBkc19jb250YWluZXI7CiAgICAgcHJpdmF0ZSBEYXRhU291cmNlIGRzX2FwcDsKQEAgLTU3LDEwICs1NywxMCBAQAogICAgICAgICB0ZXN0MShpZCk7CiAgICAgICAgIHRlc3QyKGlkKTsKICAgICAgICAgdGVzdDMoaWQpOwotICAgICAgICB0ZXN0NChpZCk7IAorICAgICAgICB0ZXN0NChpZCk7CiAgICAgICAgIHRlc3Q1KGlkKTsKLSAgICAgICAgdGVzdDYoaWQpOyAKLSAgICAgICAgLy90ZXN0NyhpZCk7IAorICAgICAgICB0ZXN0NihpZCk7CisgICAgICAgIC8vdGVzdDcoaWQpOwogICAgIH0KIAogICAgIC8vIFRlc3RzIGEgdHggYW5kIHZlcmlmaWVzIHRoYXQgd29yayBpcyBhY3R1YWxseSBjb21taXR0ZWQuCkBAIC03Miw3ICs3Miw3IEBACiAKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IDU7IGkrKykgewotICAgICAgICAgICAgaW5zZXJ0RW50cnkoY29uLCBpZCArIGksIGksIGlkICsgIjoiICsgaSk7ICAgCisgICAgICAgICAgICBpbnNlcnRFbnRyeShjb24sIGlkICsgaSwgaSwgaWQgKyAiOiIgKyBpKTsKICAgICAgICAgfQogICAgICAgICBjb24uY2xvc2UoKTsKIApAQCAtMTEzLDcgKzExMyw3IEBACiAKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IDU7IGkrKykgewotICAgICAgICAgICAgaW5zZXJ0RW50cnkoY29uLCBpZCArIGksIGksIGlkICsgIjoiICsgaSk7ICAgCisgICAgICAgICAgICBpbnNlcnRFbnRyeShjb24sIGlkICsgaSwgaSwgaWQgKyAiOiIgKyBpKTsKICAgICAgICAgfQogICAgICAgICBjb24uY2xvc2UoKTsKIApAQCAtMTUyLDcgKzE1Miw3IEBACiAKICAgICAgICAgdC5iZWdpbigpOwogICAgICAgICBmb3IgKGludCBpPTA7IGkgPCA1OyBpKyspIHsKLSAgICAgICAgICAgIGluc2VydEVudHJ5KGNvbiwgaWQgKyBpLCBpLCBpZCArICI6IiArIGkpOyAgIAorICAgICAgICAgICAgaW5zZXJ0RW50cnkoY29uLCBpZCArIGksIGksIGlkICsgIjoiICsgaSk7CiAgICAgICAgIH0KICAgICAgICAgY29uLmNsb3NlKCk7CiAKQEAgLTE5MSw3ICsxOTEsNyBAQAogICAgICAgICB0LmJlZ2luKCk7CiAKICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgNTsgaSsrKSB7Ci0gICAgICAgICAgICBpbnNlcnRFbnRyeShjb24sIGlkICsgaSwgaSwgaWQgKyAiOiIgKyBpKTsgICAKKyAgICAgICAgICAgIGluc2VydEVudHJ5KGNvbiwgaWQgKyBpLCBpLCBpZCArICI6IiArIGkpOwogICAgICAgICB9CiAKICAgICAgICAgQ29ubmVjdGlvbiBjb24xID0gZHMuZ2V0Q29ubmVjdGlvbigpOwpAQCAtMjI1LDcgKzIyNSw3IEBACiAKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IDU7IGkrKykgewotICAgICAgICAgICAgaW5zZXJ0RW50cnkoY29uLCBpZCArIGksIGksIGlkICsgIjoiICsgaSk7ICAgCisgICAgICAgICAgICBpbnNlcnRFbnRyeShjb24sIGlkICsgaSwgaSwgaWQgKyAiOiIgKyBpKTsKICAgICAgICAgfQogCiAgICAgICAgIENvbm5lY3Rpb24gY29uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKQEAgLTI2OCw3ICsyNjgsNyBAQAogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgY29ubiIpOwogICAgICAgICBmb3IgKGludCBpPTA7IGkgPCA1OyBpKyspIHsKLSAgICAgICAgICAgIGluc2VydEVudHJ5KGNvbiwgaWQgKyBpLCBpLCBpZCArICI6IiArIGkpOyAgIAorICAgICAgICAgICAgaW5zZXJ0RW50cnkoY29uLCBpZCArIGksIGksIGlkICsgIjoiICsgaSk7CiAgICAgICAgIH0KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjbG9zZSBjb25uIik7CiAgICAgICAgIGNvbi5jbG9zZSgpOwpAQCAtMzMwLDEyICszMzAsMTIgQEAKIAogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgNTsgaSsrKSB7Ci0gICAgICAgICAgICBpbnNlcnRFbnRyeShjb24sIGlkICsgaSwgaSwgaWQgKyAiOiIgKyBpKTsgICAKKyAgICAgICAgICAgIGluc2VydEVudHJ5KGNvbiwgaWQgKyBpLCBpLCBpZCArICI6IiArIGkpOwogICAgICAgICB9CiAgICAgICAgIGNvbi5jbG9zZSgpOwogCiAgICAgICAgIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwotICAgICAgICBDb25uZWN0aW9uIGNvbjQgPSBudWxsOyAKKyAgICAgICAgQ29ubmVjdGlvbiBjb240ID0gbnVsbDsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb240LmdldENvbm5lY3Rpb24iKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGNvbjQgPSBkc19jb250YWluZXIuZ2V0Q29ubmVjdGlvbigpOwpAQCAtMzc3LDcgKzM3Nyw3IEBACiAgICAgICAgICAgICBTdHJpbmcgc2VsZWN0U3RhdGVtZW50ID0KICAgICAgICAgICAgICAgICAic2VsZWN0IGNvdW50KCopICIgKwogICAgICAgICAgICAgICAgICJmcm9tIHRlc3RUeCAiOwotICAgICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPSAKKyAgICAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0KICAgICAgICAgICAgICAgICBjb24ucHJlcGFyZVN0YXRlbWVudChzZWxlY3RTdGF0ZW1lbnQpOwogCiAgICAgICAgICAgICBSZXN1bHRTZXQgcnMgPSBwcmVwU3RtdC5leGVjdXRlUXVlcnkoKTsKQEAgLTQyNiw3ICs0MjYsNyBAQAogCiAgICAgICAgIFN0cmluZyBpbnNlcnRTdGF0ZW1lbnQgPQogICAgICAgICAgICAgImluc2VydCBpbnRvIHRlc3RUeCB2YWx1ZXMgKCA/ICwgPyAsID8pIjsKLSAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPSAKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPQogICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0U3RhdGVtZW50KTsKIAogICAgICAgICBwcmVwU3RtdC5zZXRTdHJpbmcoMSwga2V5KTsKQEAgLTQzNyw3ICs0MzcsNyBAQAogICAgICAgICBwcmVwU3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVFbnRyeShDb25uZWN0aW9uIGNvbiwgU3RyaW5nIGtleSwgaW50IGl0ZXJrZXkpIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVFbnRyeShDb25uZWN0aW9uIGNvbiwgU3RyaW5nIGtleSwgaW50IGl0ZXJrZXkpCiAgICAgICAgIHRocm93cyBTUUxFeGNlcHRpb24gewogCiAgICAgICAgIFN0cmluZyBkZWxldGVTdGF0ZW1lbnQgPQpAQCAtNDUyLDcgKzQ1Miw3IEBACiAgICAgICAgIHByZXBTdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUVudHJ5KENvbm5lY3Rpb24gY29uLCBTdHJpbmcga2V5LCBpbnQgaXRlcmtleSwgU3RyaW5nIHZhbHVlKSAKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlRW50cnkoQ29ubmVjdGlvbiBjb24sIFN0cmluZyBrZXksIGludCBpdGVya2V5LCBTdHJpbmcgdmFsdWUpCiAgICAgICAgIHRocm93cyBTUUxFeGNlcHRpb24gewogCiAgICAgICAgIFN0cmluZyBkZWxldGVTdGF0ZW1lbnQgPQpAQCAtNDY5LDEzICs0NjksMTMgQEAKICAgICAgICAgcHJlcFN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIFN0cmluZyBzZWxlY3RWYWx1ZShDb25uZWN0aW9uIGNvbiwgU3RyaW5nIGtleSwgaW50IGl0ZXJrZXkpIAorICAgIHByaXZhdGUgU3RyaW5nIHNlbGVjdFZhbHVlKENvbm5lY3Rpb24gY29uLCBTdHJpbmcga2V5LCBpbnQgaXRlcmtleSkKICAgICAgICAgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAKICAgICAgICAgU3RyaW5nIHNlbGVjdFN0YXRlbWVudCA9CiAgICAgICAgICAgICAic2VsZWN0IHZhbHVlICIgKwogICAgICAgICAgICAgImZyb20gdGVzdFR4IHdoZXJlIGtleSA9ID8gYW5kIGl0ZXJrZXkgPSA/IjsKLSAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPSAKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPQogICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoc2VsZWN0U3RhdGVtZW50KTsKIAogICAgICAgICBwcmVwU3RtdC5zZXRTdHJpbmcoMSwga2V5KTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhTdHJlc3Mvc3FsL2NyZWF0ZV9vcmFjbGUuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eFN0cmVzcy9zcWwvY3JlYXRlX29yYWNsZS5zcWwKaW5kZXggOTE3ZDg2MC4uZjczY2E1OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eFN0cmVzcy9zcWwvY3JlYXRlX29yYWNsZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eFN0cmVzcy9zcWwvY3JlYXRlX29yYWNsZS5zcWwKQEAgLTEsOSArMSw5IEBACiBEUk9QIFRBQkxFIHRlc3RUeDsKIAotQ1JFQVRFIFRBQkxFIHRlc3RUeCAKK0NSRUFURSBUQUJMRSB0ZXN0VHgKICgKLQlrZXkgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLCAKLQlpdGVya2V5IElOVEVHRVIgLCAKLQl2YWx1ZSBWQVJDSEFSKDI1NSkgIAorICAgIGtleSBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksCisgICAgaXRlcmtleSBJTlRFR0VSICwKKyAgICB2YWx1ZSBWQVJDSEFSKDI1NSkKICk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhTdHJlc3Mvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eFN0cmVzcy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZjNmODQ5NC4uNDQyMDFiMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eFN0cmVzcy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eFN0cmVzcy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsOSArMSw5IEBACiBEUk9QIFRBQkxFIHRlc3RUeDsKIAotQ1JFQVRFIFRBQkxFIHRlc3RUeCAKK0NSRUFURSBUQUJMRSB0ZXN0VHgKICgKLQlrZXkgdmFyY2hhcigyNTUpIGNvbnN0cmFpbnQgcGtfa2V5IHByaW1hcnkga2V5LCAKLQlpdGVya2V5IGludGVnZXIgLCAKLQl2YWx1ZSB2YXJjaGFyKDI1NSkgIAorICAgIGtleSB2YXJjaGFyKDI1NSkgY29uc3RyYWludCBwa19rZXkgcHJpbWFyeSBrZXksCisgICAgaXRlcmtleSBpbnRlZ2VyICwKKyAgICB2YWx1ZSB2YXJjaGFyKDI1NSkKICk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDhlNjRiYzcuLjRjMmZhMzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTggKzE1LDE4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLXR4YWZ0ZXJub250eCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHgvYnVpbGQueG1sCmluZGV4IDMyZGY4NGQuLjUzMmMwYjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDMyICs0OCwzMiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLXR4YWZ0ZXJub250eC1wb29sIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtdHhhZnRlcm5vbnR4LXBvb2wiLz4KLQk8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy90eGFmdGVybm9udHgiLz4KKyAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy90eGFmdGVybm9udHgiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CkBAIC04MiwxMyArODIsMTMgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvdHhhZnRlcm5vbnR4Ii8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1jb25ucG9vbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLXR4YWZ0ZXJub250eC1wb29sIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHgvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHgvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDI3ZGVjNzMuLmRkYjkzYTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI1LDI3ICsyNSwyNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKLQlTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLQlTdHJpbmcgdGVzdFN1aXRlID0gIlR4QWZ0ZXJOb25UeCAiOworCisgICAgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CisgICAgU3RyaW5nIHRlc3RTdWl0ZSA9ICJUeEFmdGVyTm9uVHggIjsKIAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVTZXNzaW9uSG9tZSIpOwotCVNpbXBsZVNlc3Npb25Ib21lIHNpbXBsZVNlc3Npb25Ib21lID0gKFNpbXBsZVNlc3Npb25Ib21lKQorICAgIFNpbXBsZVNlc3Npb25Ib21lIHNpbXBsZVNlc3Npb25Ib21lID0gKFNpbXBsZVNlc3Npb25Ib21lKQogICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlU2Vzc2lvbkhvbWUuY2xhc3MpOwotICAgICAgICAKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJSdW5uaW5nIHR4YWZ0ZXJub250eCB0ZXN0U3VpdGUxICIpOworCisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiUnVubmluZyB0eGFmdGVybm9udHggdGVzdFN1aXRlMSAiKTsKICAgICAgICAgU2ltcGxlU2Vzc2lvbiBzaW1wbGVTZXNzaW9uID0gc2ltcGxlU2Vzc2lvbkhvbWUuY3JlYXRlKCk7CiAgICAgICAgIGlmIChzaW1wbGVTZXNzaW9uLnRlc3QxKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIDogIiAsIHN0YXQuUEFTUyApOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIDogIiAsIHN0YXQuRkFJTCApOwotCX0KLSAgICAKLQkKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LlBBU1MgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LkZBSUwgKTsKKyAgICB9CisKKworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHgvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggNTVlMTQ3Ni4uOTAzMGI5NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHgvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC02MiwxMiArNjIsMTIgQEAKICAgICA8Y29udGFpbmVyLXRyYW5zYWN0aW9uPgogICAgICAgPG1ldGhvZD4KICAgICAgICAgPGVqYi1uYW1lPlNpbXBsZVNlc3Npb25FSkI8L2VqYi1uYW1lPgotCTxtZXRob2QtbmFtZT51cGRhdGVEYjwvbWV0aG9kLW5hbWU+CisgICAgPG1ldGhvZC1uYW1lPnVwZGF0ZURiPC9tZXRob2QtbmFtZT4KICAgICAgIDwvbWV0aG9kPgogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlc05ldzwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICAgIC0tPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eC9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4L2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCmluZGV4IDgwZDIwMjguLjRjZThjY2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4L2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4L2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCkBAIC0yOCwxNCArMjgsMTQgQEAKIHsKIAogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY3R4dF87Ci0gICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBpY187IAorICAgIHByaXZhdGUgSW5pdGlhbENvbnRleHQgaWNfOwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgY3R4dF8gPSBjb250ZXh0OwotCXRyeSB7Ci0JICAgIGljXyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCX0gY2F0Y2goIE5hbWluZ0V4Y2VwdGlvbiBuZSApIHsKLQkgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIHRyeSB7CisgICAgICAgIGljXyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIH0gY2F0Y2goIE5hbWluZ0V4Y2VwdGlvbiBuZSApIHsKKyAgICAgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewpAQCAtNDQsNTggKzQ0LDU4IEBACiAgICAgLyoqCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQljb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlIGRzID0gCi0JICAgIChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCUNvbm5lY3Rpb24gY29ubjEgPSBudWxsOwotCVN0YXRlbWVudCBzdG10MSA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzMSA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICBjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlIGRzID0KKyAgICAgICAgKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMxID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdldHRpbmcgZmlyc3QgdHggY29ubmVjdGlvbiIpOwotCXRyeSB7Ci0JICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBpZiAoY29ubjEuZ2V0QXV0b0NvbW1pdCgpID09IHRydWUgKSB7Ci0JICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJCZWZvcmUgbm9udHg6IENvbm5lY3Rpb24gd2l0aCB3cm9uZyBhdXRvY29tbWl0IHZhbHVlIik7Ci0JICAgIH0KLQl9IGNhdGNoKCBTUUxFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKGNvbm4xICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JfQotCQorICAgIHRyeSB7CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBpZiAoY29ubjEuZ2V0QXV0b0NvbW1pdCgpID09IHRydWUgKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJCZWZvcmUgbm9udHg6IENvbm5lY3Rpb24gd2l0aCB3cm9uZyBhdXRvY29tbWl0IHZhbHVlIik7CisgICAgICAgIH0KKyAgICB9IGNhdGNoKCBTUUxFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKGNvbm4xICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKyAgICB9CisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXR0aW5nIG5vbnR4IGNvbm5lY3Rpb24iKTsKICAgICAgICAgdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXROb25UeENvbm5lY3Rpb24oKTsKLQkgICAgaWYgKGNvbm4xLmdldEF1dG9Db21taXQoKSA9PSBmYWxzZSApIHsKLQkgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIk5vblRYIENvbm5lY3Rpb24gd2l0aCB3cm9uZyBhdXRvY29tbWl0IHZhbHVlIik7Ci0JICAgIH0KLQl9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIHRyeSB7Y29ubjEuY2xvc2UoKTt9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7fQotCX0KKyAgICAgICAgY29ubjEgPSBkcy5nZXROb25UeENvbm5lY3Rpb24oKTsKKyAgICAgICAgaWYgKGNvbm4xLmdldEF1dG9Db21taXQoKSA9PSBmYWxzZSApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIk5vblRYIENvbm5lY3Rpb24gd2l0aCB3cm9uZyBhdXRvY29tbWl0IHZhbHVlIik7CisgICAgICAgIH0KKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7Y29ubjEuY2xvc2UoKTt9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdldHRpbmcgc2Vjb25kIHR4IGNvbm5lY3Rpb24iKTsKLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgaWYgKGNvbm4xLmdldEF1dG9Db21taXQoKSA9PSB0cnVlICkgewotCSAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbigiQWZ0ZXIgbm9udHg6IENvbm5lY3Rpb24gd2l0aCB3cm9uZyBhdXRvY29tbWl0IHZhbHVlIik7Ci0JICAgIH0KLQl9IGNhdGNoKCBTUUxFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKGNvbm4xICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JfQotCi0JcmV0dXJuIHRydWU7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIGlmIChjb25uMS5nZXRBdXRvQ29tbWl0KCkgPT0gdHJ1ZSApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIkFmdGVyIG5vbnR4OiBDb25uZWN0aW9uIHdpdGggd3JvbmcgYXV0b2NvbW1pdCB2YWx1ZSIpOworICAgICAgICB9CisgICAgfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CiAgICAgfQotICAgIAorCisgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7fQogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eC9zcWwvY3JlYXRlX215c3FsLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4L3NxbC9jcmVhdGVfbXlzcWwuc3FsCmluZGV4IGU0OTE0ZjYuLmYyNTYwNzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4L3NxbC9jcmVhdGVfbXlzcWwuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4L3NxbC9jcmVhdGVfbXlzcWwuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggNjM3YTdjNS4uYzNiMGQ1YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw5ICsxLDkgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIE9fQ1VTVE9NRVIgVkFMVUVTICgwLCAnYWJjZCcpOw0KLUlOU0VSVCBJTlRPIE9fQ1VTVE9NRVIgVkFMVUVTICgxLCAncHFycycpOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gT19DVVNUT01FUiBWQUxVRVMgKDAsICdhYmNkJyk7CitJTlNFUlQgSU5UTyBPX0NVU1RPTUVSIFZBTFVFUyAoMSwgJ3BxcnMnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDcwZDFmY2MuLmQ4NTRiOTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4am5kaS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHhqbmRpL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGU2NGJjNy4uNGMyZmEzNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHhqbmRpL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHhqbmRpL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE4ICsxNSwxOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy10eGFmdGVybm9udHgiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4am5kaS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eGpuZGkvYnVpbGQueG1sCmluZGV4IDMyZGY4NGQuLjUzMmMwYjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4am5kaS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHhqbmRpL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMzIgKzQ4LDMyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtdHhhZnRlcm5vbnR4LXBvb2wiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy10eGFmdGVybm9udHgtcG9vbCIvPgotCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3R4YWZ0ZXJub250eCIvPgorICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3R4YWZ0ZXJub250eCIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KQEAgLTgyLDEzICs4MiwxMyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy90eGFmdGVybm9udHgiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtdHhhZnRlcm5vbnR4LXBvb2wiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eGpuZGkvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHhqbmRpL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBiNzk4OGEyLi40NmNmMjEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eGpuZGkvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4am5kaS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI1LDI3ICsyNSwyNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKLQlTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLQlTdHJpbmcgdGVzdFN1aXRlID0gIlR4QWZ0ZXJOb25UeC1KbmRpICI7CisKKyAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKKyAgICBTdHJpbmcgdGVzdFN1aXRlID0gIlR4QWZ0ZXJOb25UeC1KbmRpICI7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU2Vzc2lvbkhvbWUiKTsKLQlTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKKyAgICBTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZVNlc3Npb25Ib21lLmNsYXNzKTsKLSAgICAgICAgCi0Jc3RhdC5hZGREZXNjcmlwdGlvbigiUnVubmluZyB0eGFmdGVybm9udHggdGVzdFN1aXRlMSAiKTsKKworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlJ1bm5pbmcgdHhhZnRlcm5vbnR4IHRlc3RTdWl0ZTEgIik7CiAgICAgICAgIFNpbXBsZVNlc3Npb24gc2ltcGxlU2Vzc2lvbiA9IHNpbXBsZVNlc3Npb25Ib21lLmNyZWF0ZSgpOwogICAgICAgICBpZiAoc2ltcGxlU2Vzc2lvbi50ZXN0MSgpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LlBBU1MgKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LkZBSUwgKTsKLQl9Ci0gICAgCi0JCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5QQVNTICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5GQUlMICk7CisgICAgfQorCisKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4am5kaS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHhqbmRpL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggNTVlMTQ3Ni4uOTAzMGI5NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHhqbmRpL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHhqbmRpL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTYyLDEyICs2MiwxMiBAQAogICAgIDxjb250YWluZXItdHJhbnNhY3Rpb24+CiAgICAgICA8bWV0aG9kPgogICAgICAgICA8ZWpiLW5hbWU+U2ltcGxlU2Vzc2lvbkVKQjwvZWpiLW5hbWU+Ci0JPG1ldGhvZC1uYW1lPnVwZGF0ZURiPC9tZXRob2QtbmFtZT4KKyAgICA8bWV0aG9kLW5hbWU+dXBkYXRlRGI8L21ldGhvZC1uYW1lPgogICAgICAgPC9tZXRob2Q+CiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVzTmV3PC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgICAgLS0+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4am5kaS9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4am5kaS9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQppbmRleCAyYWI2N2JjLi5jNzE3YTU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eGpuZGkvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHhqbmRpL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCkBAIC0yOCwxOCArMjgsMTggQEAKIHsKIAogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY3R4dF87Ci0gICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBpY187IAotICAgIHByaXZhdGUgSW5pdGlhbENvbnRleHQgaWMxXzsgCisgICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBpY187CisgICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBpYzFfOwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgY3R4dF8gPSBjb250ZXh0OwotCXRyeSB7Ci0JICAgIGljXyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIHRyeSB7CisgICAgICAgIGljXyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgSGFzaHRhYmxlIGh0ID0gbmV3IEhhc2h0YWJsZSgpOwogICAgICAgICAgICAgaHQucHV0KCJjb20uc3VuLmVudGVycHJpc2UuY29ubmVjdG9ycy5qbmRpc3VmZml4IiwgIl9fbm9udHgiKTsKLQkgICAgaWMxXyA9IG5ldyBJbml0aWFsQ29udGV4dChodCk7Ci0JfSBjYXRjaCggTmFtaW5nRXhjZXB0aW9uIG5lICkgewotCSAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgICAgIGljMV8gPSBuZXcgSW5pdGlhbENvbnRleHQoaHQpOworICAgIH0gY2F0Y2goIE5hbWluZ0V4Y2VwdGlvbiBuZSApIHsKKyAgICAgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewpAQCAtNDgsNjAgKzQ4LDYwIEBACiAgICAgLyoqCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQljb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlIGRzID0gCi0JICAgIChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCWNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UgZHMxID0gCi0JICAgIChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKWljMV8ubG9va3VwKCJqZGJjL3R4YWZ0ZXJub250eCIpOwotCUNvbm5lY3Rpb24gY29ubjEgPSBudWxsOwotCVN0YXRlbWVudCBzdG10MSA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzMSA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICBjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlIGRzID0KKyAgICAgICAgKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSBkczEgPQorICAgICAgICAoY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSlpYzFfLmxvb2t1cCgiamRiYy90eGFmdGVybm9udHgiKTsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOworICAgIFJlc3VsdFNldCByczEgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0dGluZyBmaXJzdCB0eCBjb25uZWN0aW9uIik7Ci0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIGlmIChjb25uMS5nZXRBdXRvQ29tbWl0KCkgPT0gdHJ1ZSApIHsKLQkgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIkJlZm9yZSBub250eDogQ29ubmVjdGlvbiB3aXRoIHdyb25nIGF1dG9jb21taXQgdmFsdWUiKTsKLQkgICAgfQotCX0gY2F0Y2goIFNRTEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoY29ubjEgIT0gbnVsbCkgeyAKLQkgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQl9Ci0JCisgICAgdHJ5IHsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIGlmIChjb25uMS5nZXRBdXRvQ29tbWl0KCkgPT0gdHJ1ZSApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIkJlZm9yZSBub250eDogQ29ubmVjdGlvbiB3aXRoIHdyb25nIGF1dG9jb21taXQgdmFsdWUiKTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2goIFNRTEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoY29ubjEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgIH0KKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdldHRpbmcgbm9udHggY29ubmVjdGlvbiIpOwogICAgICAgICB0cnkgewotCSAgICBjb25uMSA9IGRzMS5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIGlmIChjb25uMS5nZXRBdXRvQ29tbWl0KCkgPT0gZmFsc2UgKSB7Ci0JICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJOb25UWCBDb25uZWN0aW9uIHdpdGggd3JvbmcgYXV0b2NvbW1pdCB2YWx1ZSIpOwotCSAgICB9Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICB0cnkge2Nvbm4xLmNsb3NlKCk7fSBjYXRjaChFeGNlcHRpb24gZSkge30KLQl9CisgICAgICAgIGNvbm4xID0gZHMxLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgaWYgKGNvbm4xLmdldEF1dG9Db21taXQoKSA9PSBmYWxzZSApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIk5vblRYIENvbm5lY3Rpb24gd2l0aCB3cm9uZyBhdXRvY29tbWl0IHZhbHVlIik7CisgICAgICAgIH0KKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7Y29ubjEuY2xvc2UoKTt9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdldHRpbmcgc2Vjb25kIHR4IGNvbm5lY3Rpb24iKTsKLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgaWYgKGNvbm4xLmdldEF1dG9Db21taXQoKSA9PSB0cnVlICkgewotCSAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbigiQWZ0ZXIgbm9udHg6IENvbm5lY3Rpb24gd2l0aCB3cm9uZyBhdXRvY29tbWl0IHZhbHVlIik7Ci0JICAgIH0KLQl9IGNhdGNoKCBTUUxFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKGNvbm4xICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JfQotCi0JcmV0dXJuIHRydWU7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIGlmIChjb25uMS5nZXRBdXRvQ29tbWl0KCkgPT0gdHJ1ZSApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIkFmdGVyIG5vbnR4OiBDb25uZWN0aW9uIHdpdGggd3JvbmcgYXV0b2NvbW1pdCB2YWx1ZSIpOworICAgICAgICB9CisgICAgfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CiAgICAgfQotICAgIAorCisgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7fQogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eGpuZGkvc3FsL2NyZWF0ZV9teXNxbC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eGpuZGkvc3FsL2NyZWF0ZV9teXNxbC5zcWwKaW5kZXggZTQ5MTRmNi4uZjI1NjA3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHhqbmRpL3NxbC9jcmVhdGVfbXlzcWwuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4am5kaS9zcWwvY3JlYXRlX215c3FsLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHhqbmRpL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4am5kaS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggNjM3YTdjNS4uYzNiMGQ1YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHhqbmRpL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eGpuZGkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDkgKzEsOSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gT19DVVNUT01FUiBWQUxVRVMgKDAsICdhYmNkJyk7DQotSU5TRVJUIElOVE8gT19DVVNUT01FUiBWQUxVRVMgKDEsICdwcXJzJyk7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBPX0NVU1RPTUVSIFZBTFVFUyAoMCwgJ2FiY2QnKTsKK0lOU0VSVCBJTlRPIE9fQ1VTVE9NRVIgVkFMVUVTICgxLCAncHFycycpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHhqbmRpL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eGpuZGkvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA3MGQxZmNjLi5kODU0Yjk1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eGpuZGkvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eGpuZGkvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhpc29sYXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhpc29sYXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCBhYWQyMjJlLi5mMDAxZDVhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4aXNvbGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGlzb2xhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtdHhpc29sYXRpb24iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4aXNvbGF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhpc29sYXRpb24vYnVpbGQueG1sCmluZGV4IDA3ZDlkNmYuLmQzZTI1YTMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhpc29sYXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhpc29sYXRpb24vYnVpbGQueG1sCkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7cG9vbC5uYW1lfS5tYXhfY29ubmVjdGlvbl91c2FnZV9jb3VudD0xIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAKKwogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKQEAgLTE3Nyw3ICsxNzcsNyBAQAogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjYiLz4KICAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAgCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGlzb2xhdGlvbi9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4aXNvbGF0aW9uL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQppbmRleCAwNzc5N2Q5Li4yNDY3NGQwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4aXNvbGF0aW9uL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4aXNvbGF0aW9uL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKIAogICAgICAgICBTaW1wbGVCTVAgc2ltcGxlQk1QID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoKTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJKREJDIFRYIElzb2xhdGlvbiB0ZXN0cyIpOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkpEQkMgVFggSXNvbGF0aW9uIHRlc3RzIik7CiAgICAgICAgICAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gbnVsbDsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGlzb2xhdGlvbi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGlzb2xhdGlvbi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGMwZjY1ODguLjk0YjlmZGQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhpc29sYXRpb24vZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4aXNvbGF0aW9uL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgICAgICAgICA8ZGVzY3JpcHRpb24+PC9kZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eT48L3VzZS1jYWxsZXItaWRlbnRpdHk+CiAgICAgICAgICAgICA8L3NlY3VyaXR5LWlkZW50aXR5PgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgICAgICAgICAgPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgICAgICAgICAgPHJlcy10eXBlPmphdmF4LnNxbC5EYXRhU291cmNlPC9yZXMtdHlwZT4KQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgICAgICAgICA8cmVzLXNoYXJpbmctc2NvcGU+U2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KICAgICAgICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgICA8L3Nlc3Npb24+Ci0gICAgICAgIAorCiAgICAgPC9lbnRlcnByaXNlLWJlYW5zPgogCiAgICAgPGFzc2VtYmx5LWRlc2NyaXB0b3I+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4aXNvbGF0aW9uL2VqYi9TaW1wbGVCTVAuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhpc29sYXRpb24vZWpiL1NpbXBsZUJNUC5qYXZhCmluZGV4IDZhM2RmZWQuLjg5NzMzYjkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhpc29sYXRpb24vZWpiL1NpbXBsZUJNUC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhpc29sYXRpb24vZWpiL1NpbXBsZUJNUC5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiBpbXBvcnQgamF2YS5ybWkuKjsKIAogcHVibGljIGludGVyZmFjZSBTaW1wbGVCTVAgIGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKGludCBpKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIHZvaWQgbW9kaWZ5SXNvbGF0aW9uKGludCBpKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGlzb2xhdGlvbi9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGlzb2xhdGlvbi9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDY5OTFlMmEuLmFhYjdjNzkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhpc29sYXRpb24vZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4aXNvbGF0aW9uL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpe2UucHJpbnRTdGFja1RyYWNlKCk7fQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsgICAgICAgIAorICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gbW9kaWZ5SXNvbGF0aW9uKGludCBpc29sYXRpb25MZXZlbCl7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4bGV2ZWxzd2l0Y2gvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhsZXZlbHN3aXRjaC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGY3MzU0YWUuLjQ3YzdjZjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhsZXZlbHN3aXRjaC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhsZXZlbHN3aXRjaC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOCArMTUsMTggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtdHhsZXZlbHN3aXRjaCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGxldmVsc3dpdGNoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhsZXZlbHN3aXRjaC9idWlsZC54bWwKaW5kZXggY2QyMDUyMy4uNjk2NmIxNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGxldmVsc3dpdGNoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4bGV2ZWxzd2l0Y2gvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MiwyNSArNTIsMjUgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KQEAgLTc4LDcgKzc4LDcgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGxldmVsc3dpdGNoL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhsZXZlbHN3aXRjaC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMzYyY2JmNC4uZjc2MDllMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGxldmVsc3dpdGNoL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4bGV2ZWxzd2l0Y2gvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNSwyNyArMjUsMjcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCi0JU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7Ci0JU3RyaW5nIHRlc3RTdWl0ZSA9ICJ0eGxldmVsc3dpdGNoLXRlc3QxICI7CisKKyAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKKyAgICBTdHJpbmcgdGVzdFN1aXRlID0gInR4bGV2ZWxzd2l0Y2gtdGVzdDEgIjsKIAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVTZXNzaW9uSG9tZSIpOwotCVNpbXBsZVNlc3Npb25Ib21lIHNpbXBsZVNlc3Npb25Ib21lID0gKFNpbXBsZVNlc3Npb25Ib21lKQorICAgIFNpbXBsZVNlc3Npb25Ib21lIHNpbXBsZVNlc3Npb25Ib21lID0gKFNpbXBsZVNlc3Npb25Ib21lKQogICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlU2Vzc2lvbkhvbWUuY2xhc3MpOwotICAgICAgICAKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJSdW5uaW5nIHR4bGV2ZWxzd2l0Y2ggdGVzdFN1aXRlMSAiKTsKKworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlJ1bm5pbmcgdHhsZXZlbHN3aXRjaCB0ZXN0U3VpdGUxICIpOwogICAgICAgICBTaW1wbGVTZXNzaW9uIHNpbXBsZVNlc3Npb24gPSBzaW1wbGVTZXNzaW9uSG9tZS5jcmVhdGUoKTsKICAgICAgICAgaWYgKHNpbXBsZVNlc3Npb24udGVzdDEoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5QQVNTICk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5GQUlMICk7Ci0JfQotICAgIAotCQotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIDogIiAsIHN0YXQuUEFTUyApOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIDogIiAsIHN0YXQuRkFJTCApOworICAgIH0KKworCisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4bGV2ZWxzd2l0Y2gvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhsZXZlbHN3aXRjaC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDg5YjdkZDkuLjE0ZDUwNTQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhsZXZlbHN3aXRjaC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhsZXZlbHN3aXRjaC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC02MSwxMSArNjEsMTEgQEAKICAgICA8Y29udGFpbmVyLXRyYW5zYWN0aW9uPgogICAgICAgPG1ldGhvZD4KICAgICAgICAgPGVqYi1uYW1lPlNpbXBsZVNlc3Npb25FSkI8L2VqYi1uYW1lPgotCTxtZXRob2QtbmFtZT51cGRhdGVEYjwvbWV0aG9kLW5hbWU+CisgICAgPG1ldGhvZC1uYW1lPnVwZGF0ZURiPC9tZXRob2QtbmFtZT4KICAgICAgIDwvbWV0aG9kPgogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlc05ldzwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4bGV2ZWxzd2l0Y2gvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4bGV2ZWxzd2l0Y2gvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKaW5kZXggYzQyYzA4NS4uY2RmNjdmNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGxldmVsc3dpdGNoL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhsZXZlbHN3aXRjaC9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQpAQCAtMjcsMTQgKzI3LDE0IEBACiB7CiAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGN0eHRfOwotICAgIHByaXZhdGUgSW5pdGlhbENvbnRleHQgaWNfOyAKKyAgICBwcml2YXRlIEluaXRpYWxDb250ZXh0IGljXzsKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIGN0eHRfID0gY29udGV4dDsKLQl0cnkgewotCSAgICBpY18gPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQl9IGNhdGNoKCBOYW1pbmdFeGNlcHRpb24gbmUgKSB7Ci0JICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB0cnkgeworICAgICAgICBpY18gPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICB9IGNhdGNoKCBOYW1pbmdFeGNlcHRpb24gbmUgKSB7CisgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKQEAgLTQ2LDk5ICs0Niw5OSBAQAogICAgICAqIGRpZCBub3QgaGFwcGVuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7Ci0JQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMxID0gbnVsbDsKLQlpbnQga2V5VG9Db21wYXJlID0gMTA7Ci0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKLQkvL2NsZWFuIHRoZSBkYXRhYmFzZQotCXRyeSB7Ci0JICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBzdG10MS5leGVjdXRlVXBkYXRlKCAiREVMRVRFIEZST00gVFhMRVZFTFNXSVRDSCIpOwotCX0gY2F0Y2goIFNRTEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoc3RtdDEgIT0gbnVsbCkgeyAKLQkgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQkgICAgaWYgKGNvbm4xICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JfQotCQotCXRyeSB7Ci0JICAgIC8vQ2FsbCBhIG1ldGhvZCB3aXRoIHR4PVJlcXVpcmVzTmV3IGFuZCBoYXZlIGl0IHRocm93Ci0JICAgIC8vYW4gZXhjZXB0aW9uCi0JICAgIHVwZGF0ZURiKCAiVFhMRVZFTFNXSVRDSCIsIGtleVRvQ29tcGFyZSApOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgewotCSAgICBpZiAoISggZSBpbnN0YW5jZW9mIEVKQkV4Y2VwdGlvbiApKSB7Ci0JICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCQlyZXR1cm4gZmFsc2U7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBleHBlY3RlZCBFSkJFeGNlcHRpb24iKTsKLQkgICAgfQotCX0KLQl0cnkgewotCSAgICAvL3NpbmNlIG91ciB1cGRhdGVEYiB0aHJldyBhbiBleGNlcHRpb24sIHdlIHNob3VsZCBub3QKLQkgICAgLy9maW5kIHRoZSBpbnNlcnRlZCB2YWx1ZSBoZXJlCi0JICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICByczEgPSBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gVFhMRVZFTFNXSVRDSCIpOyAKLQkgICAgd2hpbGUoIHJzMS5uZXh0KCkgKSB7Ci0JICAgICAgICBpbnQga2V5ID0gcnMxLmdldEludCgiY19pZCIpOwotCQlpZiAoIGtleSA9PSAxMCApIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigidXBkYXRlIGhhcHBlbmVkIHN1Y2Nlc3NmdWxseS4gSXQgc2hvdWxkIGhhdmUgZmFpbGVkIik7Ci0JCSAgICByZXR1cm4gZmFsc2U7Ci0JCX0KLQkgICAgfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgZS5wcmludFN0YWNrVHJhY2UoKTsgCi0JICAgcmV0dXJuIGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChyczEgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IHJzMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JICAgIGlmICggc3RtdDEgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQkgICAgaWYgKCBjb25uMSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KLQotCXJldHVybiB0cnVlOworICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOworICAgIFJlc3VsdFNldCByczEgPSBudWxsOworICAgIGludCBrZXlUb0NvbXBhcmUgPSAxMDsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIC8vY2xlYW4gdGhlIGRhdGFiYXNlCisgICAgdHJ5IHsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHN0bXQxLmV4ZWN1dGVVcGRhdGUoICJERUxFVEUgRlJPTSBUWExFVkVMU1dJVENIIik7CisgICAgfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChzdG10MSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CiAgICAgfQotICAgIAorCisgICAgdHJ5IHsKKyAgICAgICAgLy9DYWxsIGEgbWV0aG9kIHdpdGggdHg9UmVxdWlyZXNOZXcgYW5kIGhhdmUgaXQgdGhyb3cKKyAgICAgICAgLy9hbiBleGNlcHRpb24KKyAgICAgICAgdXBkYXRlRGIoICJUWExFVkVMU1dJVENIIiwga2V5VG9Db21wYXJlICk7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7CisgICAgICAgIGlmICghKCBlIGluc3RhbmNlb2YgRUpCRXhjZXB0aW9uICkpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IGV4cGVjdGVkIEVKQkV4Y2VwdGlvbiIpOworICAgICAgICB9CisgICAgfQorICAgIHRyeSB7CisgICAgICAgIC8vc2luY2Ugb3VyIHVwZGF0ZURiIHRocmV3IGFuIGV4Y2VwdGlvbiwgd2Ugc2hvdWxkIG5vdAorICAgICAgICAvL2ZpbmQgdGhlIGluc2VydGVkIHZhbHVlIGhlcmUKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHJzMSA9IHN0bXQxLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBUWExFVkVMU1dJVENIIik7CisgICAgICAgIHdoaWxlKCByczEubmV4dCgpICkgeworICAgICAgICAgICAgaW50IGtleSA9IHJzMS5nZXRJbnQoImNfaWQiKTsKKyAgICAgICAgaWYgKCBrZXkgPT0gMTAgKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInVwZGF0ZSBoYXBwZW5lZCBzdWNjZXNzZnVsbHkuIEl0IHNob3VsZCBoYXZlIGZhaWxlZCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChyczEgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHJzMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgICAgIGlmICggc3RtdDEgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoIGNvbm4xICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBwcml2YXRlIHZvaWQgdXBkYXRlRGIoIFN0cmluZyB0YWJsZSwgaW50IGtleVRvSW5zZXJ0ICkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOwotCVJlc3VsdFNldCByczEgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgc3RtdDEuZXhlY3V0ZVVwZGF0ZSgiSU5TRVJUIElOVE8gIiArdGFibGUrIiBWQUxVRVMgKCIKLQkgICAgICAgICsga2V5VG9JbnNlcnQrIiwgJ0FCQ0QnKSIpOworICAgIENvbm5lY3Rpb24gY29ubjEgPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10MSA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzMSA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIHRyeSB7CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBzdG10MS5leGVjdXRlVXBkYXRlKCJJTlNFUlQgSU5UTyAiICt0YWJsZSsiIFZBTFVFUyAoIgorICAgICAgICAgICAgKyBrZXlUb0luc2VydCsiLCAnQUJDRCcpIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJSb2xsYmFjayB0aGUgdHgiKTsKLQl9IGNhdGNoKCBTUUxFeGNlcHRpb24gc3FsZSApIHsKLQkgICAgdGhyb3cgc3FsZTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIGUgKTsgCi0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKHJzMSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgcnMxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQkgICAgaWYgKCBzdG10MSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCSAgICBpZiAoIGNvbm4xICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JfQorICAgIH0gY2F0Y2goIFNRTEV4Y2VwdGlvbiBzcWxlICkgeworICAgICAgICB0aHJvdyBzcWxlOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbiggZSApOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChyczEgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHJzMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgICAgIGlmICggc3RtdDEgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoIGNvbm4xICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICB9CiAKIAogICAgIH0KQEAgLTE1Miw4MCArMTUyLDgwIEBACiAgICAgICogY2hhbmdlb3ZlciBpcyBpbmRlZWQgc3VjY2Vzc2Z1bAogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqSU4gVEVTVCAyKioqKioqKioqKioqKiIpOyAgICAKLQlJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCURhdGFTb3VyY2UgZHMxID0gKERhdGFTb3VyY2UpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UxIik7Ci0JRGF0YVNvdXJjZSBkczIgPSAoRGF0YVNvdXJjZSlpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTIiKTsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlDb25uZWN0aW9uIGNvbm4yID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOwotCVN0YXRlbWVudCBzdG10MiA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzMSA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzMiA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCXRyeSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBnZXRDb25uZWN0aW9uIDEiKTsJCi0JICAgIGNvbm4xID0gZHMxLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgZ2V0Q29ubmVjdGlvbiAxIik7CQotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgZ2V0Q29ubmVjdGlvbiAyIik7CQotCSAgICBjb25uMiA9IGRzMi5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGdldENvbm5lY3Rpb24gMiIpOwkKLQkgICAgCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBjcmVhdGVTdGF0ZW1lbnQgMSIpOwkKLQkgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgY3JlYXRlU3RhdGVtZW50IDEiKTsJCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBjcmVhdGVTdGF0ZW1lbnQgMiIpOwkKLQkgICAgc3RtdDIgPSBjb25uMi5jcmVhdGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgY3JlYXRlU3RhdGVtZW50IDIiKTsJCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXhlY3V0aW5nIHN0YXRlbWVudCAxIik7IAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKklOIFRFU1QgMioqKioqKioqKioqKioiKTsKKyAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIERhdGFTb3VyY2UgZHMxID0gKERhdGFTb3VyY2UpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UxIik7CisgICAgRGF0YVNvdXJjZSBkczIgPSAoRGF0YVNvdXJjZSlpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTIiKTsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBDb25uZWN0aW9uIGNvbm4yID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10MiA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzMSA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzMiA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIHRyeSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBnZXRDb25uZWN0aW9uIDEiKTsKKyAgICAgICAgY29ubjEgPSBkczEuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBnZXRDb25uZWN0aW9uIDEiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGdldENvbm5lY3Rpb24gMiIpOworICAgICAgICBjb25uMiA9IGRzMi5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGdldENvbm5lY3Rpb24gMiIpOwogCi0JICAgIHRyeSB7Ci0JICAgICAgICByczEgPSBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gVFhMRVZFTFNXSVRDSCIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgY3JlYXRlU3RhdGVtZW50IDEiKTsKKyAgICAgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgY3JlYXRlU3RhdGVtZW50IDEiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGNyZWF0ZVN0YXRlbWVudCAyIik7CisgICAgICAgIHN0bXQyID0gY29ubjIuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGNyZWF0ZVN0YXRlbWVudCAyIik7CisKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXhlY3V0aW5nIHN0YXRlbWVudCAxIik7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJzMSA9IHN0bXQxLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBUWExFVkVMU1dJVENIIik7CiAgICAgICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTIgKSB7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBmb3IgZmlyc3QgcXVlcnkgOiIgKyBlMi5nZXRNZXNzYWdlKCkgKTsKLQkgICAgfSBmaW5hbGx5IHsKLQkgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gZm9yIGZpcnN0IHF1ZXJ5IDoiICsgZTIuZ2V0TWVzc2FnZSgpICk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImV4ZWN1dGluZyBzdGF0ZW1lbnQgMiIpOyAKLQkgICAgdHJ5IHsKLQkgICAgICAgIHJzMiA9IHN0bXQyLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBUWExFVkVMU1dJVENIMiIpOwotCSAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTIpIHsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIGZvciBzZWNvbmQgcXVlcnkgOiIgKyBlMi5nZXRNZXNzYWdlKCkgKTsKLQkgICAgfSBmaW5hbGx5IHsKLQkgICAgICAgIHBhc3NlZCA9IGZhbHNlOwotCSAgICB9IAogCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbmlzaGVkIGV4ZWN1dGluZyBzdGF0ZW1lbnRzIik7IAotCSAgICBwYXNzZWQgPSAhKHJzMS5uZXh0KCkgJiByczIubmV4dCgpKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBwYXNzZWQgPSB0cnVlOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbmFsIGV4Y2VwdGlvbiA6ICIgKyBlLmdldE1lc3NhZ2UoKSApOwotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChyczEgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IHJzMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImV4ZWN1dGluZyBzdGF0ZW1lbnQgMiIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgcnMyID0gc3RtdDIuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIFRYTEVWRUxTV0lUQ0gyIik7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMikgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gZm9yIHNlY29uZCBxdWVyeSA6IiArIGUyLmdldE1lc3NhZ2UoKSApOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgIH0KIAotCSAgICBpZiAocnMyICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyByczIuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaW5pc2hlZCBleGVjdXRpbmcgc3RhdGVtZW50cyIpOworICAgICAgICBwYXNzZWQgPSAhKHJzMS5uZXh0KCkgJiByczIubmV4dCgpKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbmFsIGV4Y2VwdGlvbiA6ICIgKyBlLmdldE1lc3NhZ2UoKSApOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChyczEgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHJzMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CiAKLQkgICAgaWYgKCBzdG10MSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCSAgICBpZiAoIHN0bXQyICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBzdG10Mi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JICAgIGlmICggY29ubjEgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQkgICAgaWYgKCBjb25uMiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgY29ubjIuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KLQlyZXR1cm4gcGFzc2VkOworICAgICAgICBpZiAocnMyICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyByczIuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorCisgICAgICAgIGlmICggc3RtdDEgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoIHN0bXQyICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10Mi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBjb25uMSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgICAgIGlmICggY29ubjIgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4yLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkge30KICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4bGV2ZWxzd2l0Y2gvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGxldmVsc3dpdGNoL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBiMjI3Y2FjLi40MmQ1YTE2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4bGV2ZWxzd2l0Y2gvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhsZXZlbHN3aXRjaC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsOSArMSw5IEBACi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7DQotDQotQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0ggKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxLCAnd3h5eicpOw0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDIsICdwcXJzJyk7DQorRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOworCitDUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSCAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxLCAnd3h5eicpOworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMiwgJ3BxcnMnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhsZXZlbHN3aXRjaC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGxldmVsc3dpdGNoL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggMGMxMjQyZi4uZDExYTExNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGxldmVsc3dpdGNoL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGxldmVsc3dpdGNoL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEsMiArMSwyIEBACi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7DQotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsNCitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7CitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eHBhc3N0aHJvdWdoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvYnVpbGQucHJvcGVydGllcwppbmRleCBhOGRkNjQxLi4wMDBiNzJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTggKzE1LDE4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLXR4cGFzc3Rocm91Z2giLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhwYXNzdGhyb3VnaC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvYnVpbGQueG1sCmluZGV4IDk5MjU0NDkuLjMxMzE3N2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhwYXNzdGhyb3VnaC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eHBhc3N0aHJvdWdoL2J1aWxkLnhtbApAQCAtMzIsMTQgKzMyLDE0IEBACiAgICZ0ZXN0cHJvcGVydGllczsKICAgJmpkYmNDb21tb247CiAgICZqZGJjQ29tbW9uUHJvcHM7Ci0gICAgCisKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLGJ1aWxkLGRlcGxveSxydW4sdW5kZXBsb3kiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgIDxkZWxldGUgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNjMsMjMgKzYzLDIzIEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamRiYy1jb21tb24iLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgPC90YXJnZXQ+Ci0gIAotICAKKworCiAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtY29tbW9uIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgPC90YXJnZXQ+Ci0gIAotICAKKworCiAgIDx0YXJnZXQgbmFtZT0icnVuIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlLnNxbCIvPgotICAgIDwvYW50Y2FsbD4gIAorICAgIDwvYW50Y2FsbD4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eHBhc3N0aHJvdWdoL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhwYXNzdGhyb3VnaC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNGYwNmI3Yy4uMjhmYzhlNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eHBhc3N0aHJvdWdoL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCwyNCArMjgsMjQgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAotIAlTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLQlTdHJpbmcgdGVzdFN1aXRlID0gIlR4UGFzc1Rocm91Z2ggIjsKKyAgICAgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CisgICAgU3RyaW5nIHRlc3RTdWl0ZSA9ICJUeFBhc3NUaHJvdWdoICI7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvTm9UeENvbm5UZXN0RUpCIik7Ci0JTm9UeENvbm5UZXN0SG9tZSBob21lID0gKE5vVHhDb25uVGVzdEhvbWUpCisgICAgTm9UeENvbm5UZXN0SG9tZSBob21lID0gKE5vVHhDb25uVGVzdEhvbWUpCiAgICAgICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgTm9UeENvbm5UZXN0SG9tZS5jbGFzcyk7CiAKICAgICAgICAgTm9UeENvbm5UZXN0IGJlYW4gPSBob21lLmNyZWF0ZSgpOwotCXN0YXQuYWRkRGVzY3JpcHRpb24oIlRYIFBhc3MgVGhyb3VnaCB0ZXN0cyAiKTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUWCBQYXNzIFRocm91Z2ggdGVzdHMgIik7CiAKICAgICAgICAgaWYgKCBiZWFuLnRlc3QxKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QxIDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7Ci0JfQotCXN0YXQucHJpbnRTdW1tYXJ5KCk7Ci0gICAgCi0gICAgICAgIAorICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDEgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOworCisKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggNmM2YzYzYS4uNzg2ZGZiOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eHBhc3N0aHJvdWdoL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhwYXNzdGhyb3VnaC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjQsNDQgKzI0LDQ0IEBACiAgICAgICA8am5kaS1uYW1lPmVqYi9Ob1R4Q29ublRlc3RFSkI8L2puZGktbmFtZT4KICAgICAgIDxlamItcmVmPgogICAgICAgICA8ZWpiLXJlZi1uYW1lPmVqYi9TZWNvbmRFSkI8L2VqYi1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmVqYi9TZWNvbmRFSkI8L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmVqYi9TZWNvbmRFSkI8L2puZGktbmFtZT4KICAgICAgIDwvZWpiLXJlZj4KICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgIDxyZXMtcmVmLW5hbWU+amRiYy90eHBhc3N0aHJvdWdoPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9zMXFlREI8L2puZGktbmFtZT4KLQk8ZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+Ci0JICA8bmFtZT5wYnB1YmxpYzwvbmFtZT4KLQkgIDxwYXNzd29yZD5wYnB1YmxpYzwvcGFzc3dvcmQ+Ci0JPC9kZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KKyAgICA8ZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CisgICAgICA8bmFtZT5wYnB1YmxpYzwvbmFtZT4KKyAgICAgIDxwYXNzd29yZD5wYnB1YmxpYzwvcGFzc3dvcmQ+CisgICAgPC9kZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgIDwvZWpiPiAgCisgICAgPC9lamI+CiAgICAgPGVqYj4KICAgICAgIDxlamItbmFtZT5TZWNvbmRFSkI8L2VqYi1uYW1lPgogICAgICAgPGpuZGktbmFtZT5lamIvU2Vjb25kRUpCPC9qbmRpLW5hbWU+CiAgICAgICA8ZWpiLXJlZj4KICAgICAgICAgPGVqYi1yZWYtbmFtZT5lamIvVGhpcmRFSkI8L2VqYi1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmVqYi9UaGlyZEVKQjwvam5kaS1uYW1lPgorICAgIDxqbmRpLW5hbWU+ZWpiL1RoaXJkRUpCPC9qbmRpLW5hbWU+CiAgICAgICA8L2VqYi1yZWY+CiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPmpkYmMvdHhwYXNzdGhyb3VnaDwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmpkYmMvczFxZURCPC9qbmRpLW5hbWU+Ci0JPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgotCSAgPG5hbWU+cGJwdWJsaWM8L25hbWU+Ci0JICA8cGFzc3dvcmQ+cGJwdWJsaWM8L3Bhc3N3b3JkPgotCTwvZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CisgICAgPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgorICAgICAgPG5hbWU+cGJwdWJsaWM8L25hbWU+CisgICAgICA8cGFzc3dvcmQ+cGJwdWJsaWM8L3Bhc3N3b3JkPgorICAgIDwvZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICA8L2VqYj4gIAorICAgIDwvZWpiPgogICAgIDxlamI+CiAgICAgICA8ZWpiLW5hbWU+VGhpcmRFSkI8L2VqYi1uYW1lPgogICAgICAgPGpuZGktbmFtZT5lamIvVGhpcmRFSkI8L2puZGktbmFtZT4KICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgIDxyZXMtcmVmLW5hbWU+amRiYy90eHBhc3N0aHJvdWdoPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9zMXFlREI8L2puZGktbmFtZT4KLQk8ZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+Ci0JICA8bmFtZT5wYnB1YmxpYzwvbmFtZT4KLQkgIDxwYXNzd29yZD5wYnB1YmxpYzwvcGFzc3dvcmQ+Ci0JPC9kZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KKyAgICA8ZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CisgICAgICA8bmFtZT5wYnB1YmxpYzwvbmFtZT4KKyAgICAgIDxwYXNzd29yZD5wYnB1YmxpYzwvcGFzc3dvcmQ+CisgICAgPC9kZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgIDwvZWpiPiAgCisgICAgPC9lamI+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KIDwvc3VuLWVqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvZWpiL05vVHhDb25uVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhwYXNzdGhyb3VnaC9lamIvTm9UeENvbm5UZXN0QmVhbi5qYXZhCmluZGV4IDc0MDU1MTIuLmMyODRjNzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhwYXNzdGhyb3VnaC9lamIvTm9UeENvbm5UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhwYXNzdGhyb3VnaC9lamIvTm9UeENvbm5UZXN0QmVhbi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAgICAgcHJpdmF0ZSBFSkJDb250ZXh0IGVqYmNvbnRleHQ7CiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQgbV9jdHggPSBudWxsOwogICAgIHRyYW5zaWVudCBqYXZheC5zcWwuRGF0YVNvdXJjZSBkczsKLQkKKwogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQgY3R4KSB7CiAgICAgICAgIG1fY3R4ID0gY3R4OwpAQCAtNDUsMTAgKzQ1LDEwIEBACiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiIEBAQEAgRW50ZXJpbmcgQmVhbiAxIEBAQEAgIik7Ci0JQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdCA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzID0gbnVsbDsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBAQEBAIEVudGVyaW5nIEJlYW4gMSBAQEBAICIpOworICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQgPSBudWxsOworICAgIFJlc3VsdFNldCBycyA9IG51bGw7CiAKICAgICAgICAgdHJ5IHsKIApAQCAtNjAsMTQgKzYwLDE0IEBACiAgICAgICAgICAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5MSk7CiAKICAgICAgICAgICAgIE9iamVjdCBvID0gY3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2Vjb25kRUpCIik7Ci0JICAgIFNlY29uZEhvbWUgaG9tZSA9IChTZWNvbmRIb21lKQotCSAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBTZWNvbmRIb21lLmNsYXNzICk7Ci0JICAgIFNlY29uZCBiZWFuID0gaG9tZS5jcmVhdGUoKTsKLQkgICAgcmV0dXJuIGJlYW4udGVzdDEoKTsKKyAgICAgICAgU2Vjb25kSG9tZSBob21lID0gKFNlY29uZEhvbWUpCisgICAgICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIFNlY29uZEhvbWUuY2xhc3MgKTsKKyAgICAgICAgU2Vjb25kIGJlYW4gPSBob21lLmNyZWF0ZSgpOworICAgICAgICByZXR1cm4gYmVhbi50ZXN0MSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBFeGNlcHRpb24gaW4gMXN0IEJlYW4tLS0iKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBFeGNlcHRpb24gaW4gMXN0IEJlYW4tLS0iKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgaWYgKHJzICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsgcnMuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQpAQCAtNzgsOSArNzgsOSBAQAogICAgICAgICAgICAgaWYgKGNvbm4gIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICB0cnkge2Nvbm4uY2xvc2UoKTt9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CiAgICAgICAgICAgICB9Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEBAQEAgRXhpdGluZyBCZWFuIDEgQEBAQCAiKTsKLSAgICAgICAgICAgIAkKLSAgICAgICAJfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBAQEBAIEV4aXRpbmcgQmVhbiAxIEBAQEAgIik7CisKKyAgICAgICAgICAgfQogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvZWpiL1NlY29uZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhwYXNzdGhyb3VnaC9lamIvU2Vjb25kQmVhbi5qYXZhCmluZGV4IDU1ZWQwNjEuLjEyNzcwOWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhwYXNzdGhyb3VnaC9lamIvU2Vjb25kQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhwYXNzdGhyb3VnaC9lamIvU2Vjb25kQmVhbi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAgICAgcHJpdmF0ZSBFSkJDb250ZXh0IGVqYmNvbnRleHQ7CiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQgbV9jdHggPSBudWxsOwogICAgIHRyYW5zaWVudCBqYXZheC5zcWwuRGF0YVNvdXJjZSBkczsKLQkKKwogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQgY3R4KSB7CiAgICAgICAgIG1fY3R4ID0gY3R4OwpAQCAtNDUsMzAgKzQ1LDMwIEBACiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiIEBAQEAgRW50ZXJpbmcgQmVhbjIgQEBAQCAiKTsKLQlDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCVN0YXRlbWVudCBzdG10ID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMgPSBudWxsOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEBAQEAgRW50ZXJpbmcgQmVhbjIgQEBAQCAiKTsKKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10ID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMgPSBudWxsOwogCiAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICAvKgorICAgICAgICAvKgogICAgICAgICAgICAgZHMgPSAoamF2YXguc3FsLkRhdGFTb3VyY2UpIGN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvamRiYy90eHBhc3N0aHJvdWdoIik7CiAgICAgICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigiZGJ1c2VyIiwgImRicGFzc3dvcmQiKTsKICAgICAgICAgICAgIHN0bXQgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5MSA9ICJTRUxFQ1QgKiBGUk9NIE9OTFlHRVRDT05ORUNUSU9OIjsKICAgICAgICAgICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkxKTsKLQkgICAgKi8KKyAgICAgICAgKi8KICAgICAgICAgICAgIE9iamVjdCBvID0gY3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvVGhpcmRFSkIiKTsKLQkgICAgVGhpcmRIb21lIHQgPSAoVGhpcmRIb21lKQotCSAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyggbywgVGhpcmRIb21lLmNsYXNzICk7Ci0JICAgIFRoaXJkIGJlYW4gPSB0LmNyZWF0ZSgpOwotICAgICAgICAgICAgcmV0dXJuIGJlYW4udGVzdDEoKTsJICAgCisgICAgICAgIFRoaXJkSG9tZSB0ID0gKFRoaXJkSG9tZSkKKyAgICAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3coIG8sIFRoaXJkSG9tZS5jbGFzcyApOworICAgICAgICBUaGlyZCBiZWFuID0gdC5jcmVhdGUoKTsKKyAgICAgICAgICAgIHJldHVybiBiZWFuLnRlc3QxKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IEV4Y2VwdGlvbiBpbiAybmQgQmVhbi0tLSIpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IEV4Y2VwdGlvbiBpbiAybmQgQmVhbi0tLSIpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBpZiAocnMgIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICB0cnkgeyBycy5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CkBAIC03OSw5ICs3OSw5IEBACiAgICAgICAgICAgICBpZiAoY29ubiAhPSBudWxsICkgewogICAgICAgICAgICAgICAgIHRyeSB7Y29ubi5jbG9zZSgpO30gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KICAgICAgICAgICAgIH0KLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQEBAQCBFeGl0aW5nIEJlYW4gMiBAQEBAIik7Ci0gICAgICAgICAgICAJCi0gICAgICAgCX0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQEBAQCBFeGl0aW5nIEJlYW4gMiBAQEBAIik7CisKKyAgICAgICAgICAgfQogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvZWpiL1RoaXJkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eHBhc3N0aHJvdWdoL2VqYi9UaGlyZEJlYW4uamF2YQppbmRleCAyY2JkMmIyLi4yN2ViMzg2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvZWpiL1RoaXJkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhwYXNzdGhyb3VnaC9lamIvVGhpcmRCZWFuLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKICAgICBwcml2YXRlIEVKQkNvbnRleHQgZWpiY29udGV4dDsKICAgICBwcml2YXRlIHRyYW5zaWVudCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dCBtX2N0eCA9IG51bGw7CiAgICAgdHJhbnNpZW50IGphdmF4LnNxbC5EYXRhU291cmNlIGRzOwotCQorCiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dCBjdHgpIHsKICAgICAgICAgbV9jdHggPSBjdHg7CkBAIC00NSwxMCArNDUsMTAgQEAKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIgQEBAQCBFbnRlcmluZyBCZWFuIDMgQEBAQCIpOwotCUNvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQgPSBudWxsOwotCVJlc3VsdFNldCBycyA9IG51bGw7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQEBAQCBFbnRlcmluZyBCZWFuIDMgQEBAQCIpOworICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQgPSBudWxsOworICAgIFJlc3VsdFNldCBycyA9IG51bGw7CiAKICAgICAgICAgdHJ5IHsKIApAQCAtNTYsMTMgKzU2LDEzIEBACiAgICAgICAgICAgICBkcyA9IChqYXZheC5zcWwuRGF0YVNvdXJjZSkgY3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qZGJjL3R4cGFzc3Rocm91Z2giKTsKICAgICAgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCJkYnVzZXIiLCAiZGJwYXNzd29yZCIpOwogICAgICAgICAgICAgc3RtdCA9IGNvbm4uY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAJU3RyaW5nIHF1ZXJ5MSA9ICJTRUxFQ1QgKiBGUk9NIE9OTFlHRVRDT05ORUNUSU9OIjsKKyAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkxID0gIlNFTEVDVCAqIEZST00gT05MWUdFVENPTk5FQ1RJT04iOwogICAgICAgICAgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeShxdWVyeTEpOwotCSAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IEV4Y2VwdGlvbiBpbiAzcmQgQmVhbi0tLSIpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IEV4Y2VwdGlvbiBpbiAzcmQgQmVhbi0tLSIpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBpZiAocnMgIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICB0cnkgeyBycy5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CkBAIC03Myw4ICs3Myw4IEBACiAgICAgICAgICAgICBpZiAoY29ubiAhPSBudWxsICkgewogICAgICAgICAgICAgICAgIHRyeSB7Y29ubi5jbG9zZSgpO30gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEBAQEAgRXhpdGluZyBCZWFuIDMgQEBAQCIpOwkKLSAgICAgICAJfQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQEBAQCBFeGl0aW5nIEJlYW4gMyBAQEBAIik7CisgICAgICAgICAgIH0KICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eHBhc3N0aHJvdWdoL3NxbC9jcmVhdGUuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eHBhc3N0aHJvdWdoL3NxbC9jcmVhdGUuc3FsCmluZGV4IGM1OGE2ZTMuLmFlOWY1NjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhwYXNzdGhyb3VnaC9zcWwvY3JlYXRlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvc3FsL2NyZWF0ZS5zcWwKQEAgLTEsNSArMSw1IEBACiBEUk9QIFRBQkxFIE9OTFlHRVRDT05ORUNUSU9OOwogQ1JFQVRFIFRBQkxFIE9OTFlHRVRDT05ORUNUSU9OKAotICAgIG5hbWUgY2hhcigyMCksIAorICAgIG5hbWUgY2hhcigyMCksCiAgICAgbnVtIGludGVnZXIKICk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL1NldERlcmJ5QXV0aGVudGljYXRpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvU2V0RGVyYnlBdXRoZW50aWNhdGlvbi5qYXZhCmluZGV4IGQxMzE4MmIuLjkzZjk0ZmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvU2V0RGVyYnlBdXRoZW50aWNhdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvU2V0RGVyYnlBdXRoZW50aWNhdGlvbi5qYXZhCkBAIC0yOCwxMiArMjgsMTIgQEAKICAqIEBhdXRob3Igc2hhbGluaQogICovCiBwdWJsaWMgY2xhc3MgU2V0RGVyYnlBdXRoZW50aWNhdGlvbiB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgREFUQUJBU0VTX0hPTUUgPSAiL3RtcC9qZGJjX2RldnRlc3RzL2RhdGFiYXNlcyI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFJFQ09ORklHX0RCX05BTUUgPSBEQVRBQkFTRVNfSE9NRSArICIvcmVjb25maWctZGIiOwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBTQU1QTEVfREJfTkFNRSA9IERBVEFCQVNFU19IT01FICsgIi9zYW1wbGUtZGIiOwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBTVU5fQVBQU0VSVl9TQU1QTEVTX0RCID0gREFUQUJBU0VTX0hPTUUgKyAiL3N1bi1hcHBzZXJ2LXNhbXBsZXMiOwotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzZXRDb21tb25EQkF1dGhlbnRpY2F0aW9uKCk7CiAgICAgICAgIHNldFJlY29uZmlnREJBdXRoZW50aWNhdGlvbigpOwpAQCAtNDUsMzAgKzQ1LDMwIEBACiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKICAgICAgICAgUmVzdWx0U2V0IHJzID0gbnVsbDsKICAgICAgICAgdHJ5IHsKLQkgICAgRGF0YVNvdXJjZSBkcyA9IGluaXRpYWxpemVEYXRhU291cmNlKCk7Ci0JICAgIGNvbiA9IChDb25uZWN0aW9uKSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIC8vRXhlY3V0ZSBDYWxsYWJsZVN0YXRlbWVudCB0byBlbmFibGUgYXV0aGVudGljYXRpb24KLQkgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJDQUxMIFNZU0NTX1VUSUwuU1lTQ1NfU0VUX0RBVEFCQVNFX1BST1BFUlRZKCIgKyAKLQkJCSAgICAJCQkiJ2RlcmJ5LmNvbm5lY3Rpb24ucmVxdWlyZUF1dGhlbnRpY2F0aW9uJywgJ3RydWUnKSIpOwotICAgCSAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCAKLQkgICAgICAgICAgICAiVkFMVUVTIFNZU0NTX1VUSUwuU1lTQ1NfR0VUX0RBVEFCQVNFX1BST1BFUlRZKCIgKyAKLQkJICAgICInZGVyYnkuY29ubmVjdGlvbi5yZXF1aXJlQXV0aGVudGljYXRpb24nKSIpOyAKLQkgICAgcnMubmV4dCgpOyAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdXRoZW50aWNhdGlvbiBzZXQgdG8gIiArIHJzLmdldFN0cmluZygxKSk7IAkJCisgICAgICAgIERhdGFTb3VyY2UgZHMgPSBpbml0aWFsaXplRGF0YVNvdXJjZSgpOworICAgICAgICBjb24gPSAoQ29ubmVjdGlvbikgZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAvL0V4ZWN1dGUgQ2FsbGFibGVTdGF0ZW1lbnQgdG8gZW5hYmxlIGF1dGhlbnRpY2F0aW9uCisgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiQ0FMTCBTWVNDU19VVElMLlNZU0NTX1NFVF9EQVRBQkFTRV9QUk9QRVJUWSgiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ2RlcmJ5LmNvbm5lY3Rpb24ucmVxdWlyZUF1dGhlbnRpY2F0aW9uJywgJ3RydWUnKSIpOworICAgICAgICAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KAorICAgICAgICAgICAgICAgICJWQUxVRVMgU1lTQ1NfVVRJTC5TWVNDU19HRVRfREFUQUJBU0VfUFJPUEVSVFkoIiArCisgICAgICAgICAgICAiJ2RlcmJ5LmNvbm5lY3Rpb24ucmVxdWlyZUF1dGhlbnRpY2F0aW9uJykiKTsKKyAgICAgICAgcnMubmV4dCgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF1dGhlbnRpY2F0aW9uIHNldCB0byAiICsgcnMuZ2V0U3RyaW5nKDEpKTsKIAotCSAgICAvL1NldHRpbmcgVXNlcm5hbWVzIGFuZCBwYXNzd29yZHMKLQkgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJDQUxMIFNZU0NTX1VUSUwuU1lTQ1NfU0VUX0RBVEFCQVNFX1BST1BFUlRZKCIgKyAKLQkJCSAgICAJCQkiJ2RlcmJ5LnVzZXIuZGJ1c2VyJywgJ2RicGFzc3dvcmQnKSIpOwotCSAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIkNBTEwgU1lTQ1NfVVRJTC5TWVNDU19TRVRfREFUQUJBU0VfUFJPUEVSVFkoIiArIAotCQkJICAgIAkJCSInZGVyYnkudXNlci5EQlVTRVInLCAnREJQQVNTV09SRCcpIik7Ci0JICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiQ0FMTCBTWVNDU19VVElMLlNZU0NTX1NFVF9EQVRBQkFTRV9QUk9QRVJUWSgiICsgCi0JCQkgICAgCQkJIidkZXJieS51c2VyLkFQUCcsICdBUFAnKSIpOwotCSAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIkNBTEwgU1lTQ1NfVVRJTC5TWVNDU19TRVRfREFUQUJBU0VfUFJPUEVSVFkoIiArIAotCQkJICAgIAkJCSInZGVyYnkudXNlci5ERVJCWVVTRVInLCAnREVSQllQQVNTV09SRCcpIik7CisgICAgICAgIC8vU2V0dGluZyBVc2VybmFtZXMgYW5kIHBhc3N3b3JkcworICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIkNBTEwgU1lTQ1NfVVRJTC5TWVNDU19TRVRfREFUQUJBU0VfUFJPUEVSVFkoIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIidkZXJieS51c2VyLmRidXNlcicsICdkYnBhc3N3b3JkJykiKTsKKyAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJDQUxMIFNZU0NTX1VUSUwuU1lTQ1NfU0VUX0RBVEFCQVNFX1BST1BFUlRZKCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICInZGVyYnkudXNlci5EQlVTRVInLCAnREJQQVNTV09SRCcpIik7CisgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiQ0FMTCBTWVNDU19VVElMLlNZU0NTX1NFVF9EQVRBQkFTRV9QUk9QRVJUWSgiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ2RlcmJ5LnVzZXIuQVBQJywgJ0FQUCcpIik7CisgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiQ0FMTCBTWVNDU19VVElMLlNZU0NTX1NFVF9EQVRBQkFTRV9QUk9QRVJUWSgiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ2RlcmJ5LnVzZXIuREVSQllVU0VSJywgJ0RFUkJZUEFTU1dPUkQnKSIpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSBmaW5hbGx5IHsKKyAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZihycyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIHJzLmNsb3NlKCk7CkBAIC05MCwzNSArOTAsMzUgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICAgIH0gICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHNldFJlY29uZmlnREJBdXRoZW50aWNhdGlvbigpIHsKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBudWxsOwogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IG51bGw7Ci0gICAgICAgIFJlc3VsdFNldCBycyA9IG51bGw7ICAgICAgICAgICAgICAKKyAgICAgICAgUmVzdWx0U2V0IHJzID0gbnVsbDsKICAgICAgICAgdHJ5IHsKLQkgICAgRGF0YVNvdXJjZSBkcyA9IGluaXRpYWxpemVSZWNvbmZpZ0RhdGFTb3VyY2UoKTsKLQkgICAgY29uID0gKENvbm5lY3Rpb24pIGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgLy9FeGVjdXRlIENhbGxhYmxlU3RhdGVtZW50IHRvIGVuYWJsZSBhdXRoZW50aWNhdGlvbgotCSAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIkNBTEwgU1lTQ1NfVVRJTC5TWVNDU19TRVRfREFUQUJBU0VfUFJPUEVSVFkoIiArIAotCQkJICAgIAkJCSInZGVyYnkuY29ubmVjdGlvbi5yZXF1aXJlQXV0aGVudGljYXRpb24nLCAndHJ1ZScpIik7Ci0gICAJICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkoIAotCSAgICAgICAgICAgICJWQUxVRVMgU1lTQ1NfVVRJTC5TWVNDU19HRVRfREFUQUJBU0VfUFJPUEVSVFkoIiArIAotCQkgICAgIidkZXJieS5jb25uZWN0aW9uLnJlcXVpcmVBdXRoZW50aWNhdGlvbicpIik7IAotCSAgICBycy5uZXh0KCk7IAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF1dGhlbnRpY2F0aW9uIHNldCB0byAiICsgcnMuZ2V0U3RyaW5nKDEpKTsgCQkKKyAgICAgICAgRGF0YVNvdXJjZSBkcyA9IGluaXRpYWxpemVSZWNvbmZpZ0RhdGFTb3VyY2UoKTsKKyAgICAgICAgY29uID0gKENvbm5lY3Rpb24pIGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgLy9FeGVjdXRlIENhbGxhYmxlU3RhdGVtZW50IHRvIGVuYWJsZSBhdXRoZW50aWNhdGlvbgorICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIkNBTEwgU1lTQ1NfVVRJTC5TWVNDU19TRVRfREFUQUJBU0VfUFJPUEVSVFkoIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIidkZXJieS5jb25uZWN0aW9uLnJlcXVpcmVBdXRoZW50aWNhdGlvbicsICd0cnVlJykiKTsKKyAgICAgICAgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgKKyAgICAgICAgICAgICAgICAiVkFMVUVTIFNZU0NTX1VUSUwuU1lTQ1NfR0VUX0RBVEFCQVNFX1BST1BFUlRZKCIgKworICAgICAgICAgICAgIidkZXJieS5jb25uZWN0aW9uLnJlcXVpcmVBdXRoZW50aWNhdGlvbicpIik7CisgICAgICAgIHJzLm5leHQoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdXRoZW50aWNhdGlvbiBzZXQgdG8gIiArIHJzLmdldFN0cmluZygxKSk7CiAKLQkgICAgLy9TZXR0aW5nIFVzZXJuYW1lcyBhbmQgcGFzc3dvcmRzCi0JICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiQ0FMTCBTWVNDU19VVElMLlNZU0NTX1NFVF9EQVRBQkFTRV9QUk9QRVJUWSgiICsgCi0JCQkgICAgCQkJIidkZXJieS51c2VyLnJ1c2VyJywgJ3JwYXNzd29yZCcpIik7Ci0JICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiQ0FMTCBTWVNDU19VVElMLlNZU0NTX1NFVF9EQVRBQkFTRV9QUk9QRVJUWSgiICsgCi0JCQkgICAgCQkJIidkZXJieS51c2VyLlJVU0VSJywgJ1JQQVNTV09SRCcpIik7CisgICAgICAgIC8vU2V0dGluZyBVc2VybmFtZXMgYW5kIHBhc3N3b3JkcworICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIkNBTEwgU1lTQ1NfVVRJTC5TWVNDU19TRVRfREFUQUJBU0VfUFJPUEVSVFkoIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIidkZXJieS51c2VyLnJ1c2VyJywgJ3JwYXNzd29yZCcpIik7CisgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiQ0FMTCBTWVNDU19VVElMLlNZU0NTX1NFVF9EQVRBQkFTRV9QUk9QRVJUWSgiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ2RlcmJ5LnVzZXIuUlVTRVInLCAnUlBBU1NXT1JEJykiKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0gZmluYWxseSB7CisgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYocnMgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBycy5jbG9zZSgpOwpAQCAtMTQwLDM2ICsxNDAsMzYgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRTYW1wbGVEQkF1dGhlbnRpY2F0aW9uKCkgewogICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IG51bGw7CiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKLSAgICAgICAgUmVzdWx0U2V0IHJzID0gbnVsbDsgICAgICAgICAgICAgIAorICAgICAgICBSZXN1bHRTZXQgcnMgPSBudWxsOwogICAgICAgICB0cnkgewotCSAgICBEYXRhU291cmNlIGRzID0gaW5pdGlhbGl6ZVNhbXBsZURhdGFTb3VyY2UoKTsKLQkgICAgY29uID0gKENvbm5lY3Rpb24pIGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgLy9FeGVjdXRlIENhbGxhYmxlU3RhdGVtZW50IHRvIGVuYWJsZSBhdXRoZW50aWNhdGlvbgotCSAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIkNBTEwgU1lTQ1NfVVRJTC5TWVNDU19TRVRfREFUQUJBU0VfUFJPUEVSVFkoIiArIAotCQkJICAgIAkJCSInZGVyYnkuY29ubmVjdGlvbi5yZXF1aXJlQXV0aGVudGljYXRpb24nLCAndHJ1ZScpIik7Ci0gICAJICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkoIAotCSAgICAgICAgICAgICJWQUxVRVMgU1lTQ1NfVVRJTC5TWVNDU19HRVRfREFUQUJBU0VfUFJPUEVSVFkoIiArIAotCQkgICAgIidkZXJieS5jb25uZWN0aW9uLnJlcXVpcmVBdXRoZW50aWNhdGlvbicpIik7IAotCSAgICBycy5uZXh0KCk7IAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF1dGhlbnRpY2F0aW9uIHNldCB0byAiICsgcnMuZ2V0U3RyaW5nKDEpKTsgCQkKKyAgICAgICAgRGF0YVNvdXJjZSBkcyA9IGluaXRpYWxpemVTYW1wbGVEYXRhU291cmNlKCk7CisgICAgICAgIGNvbiA9IChDb25uZWN0aW9uKSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIC8vRXhlY3V0ZSBDYWxsYWJsZVN0YXRlbWVudCB0byBlbmFibGUgYXV0aGVudGljYXRpb24KKyAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJDQUxMIFNZU0NTX1VUSUwuU1lTQ1NfU0VUX0RBVEFCQVNFX1BST1BFUlRZKCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICInZGVyYnkuY29ubmVjdGlvbi5yZXF1aXJlQXV0aGVudGljYXRpb24nLCAndHJ1ZScpIik7CisgICAgICAgICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkoCisgICAgICAgICAgICAgICAgIlZBTFVFUyBTWVNDU19VVElMLlNZU0NTX0dFVF9EQVRBQkFTRV9QUk9QRVJUWSgiICsKKyAgICAgICAgICAgICInZGVyYnkuY29ubmVjdGlvbi5yZXF1aXJlQXV0aGVudGljYXRpb24nKSIpOworICAgICAgICBycy5uZXh0KCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXV0aGVudGljYXRpb24gc2V0IHRvICIgKyBycy5nZXRTdHJpbmcoMSkpOwogCi0JICAgIC8vU2V0dGluZyBVc2VybmFtZXMgYW5kIHBhc3N3b3JkcwotCSAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIkNBTEwgU1lTQ1NfVVRJTC5TWVNDU19TRVRfREFUQUJBU0VfUFJPUEVSVFkoIiArIAotCQkJICAgIAkJCSInZGVyYnkudXNlci5BUFAnLCAnQVBQJykiKTsKLQkgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJDQUxMIFNZU0NTX1VUSUwuU1lTQ1NfU0VUX0RBVEFCQVNFX1BST1BFUlRZKCIgKyAKLQkJCSAgICAJCQkiJ2RlcmJ5LnVzZXIuYXBwJywgJ2FwcCcpIik7CisgICAgICAgIC8vU2V0dGluZyBVc2VybmFtZXMgYW5kIHBhc3N3b3JkcworICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIkNBTEwgU1lTQ1NfVVRJTC5TWVNDU19TRVRfREFUQUJBU0VfUFJPUEVSVFkoIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIidkZXJieS51c2VyLkFQUCcsICdBUFAnKSIpOworICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIkNBTEwgU1lTQ1NfVVRJTC5TWVNDU19TRVRfREFUQUJBU0VfUFJPUEVSVFkoIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIidkZXJieS51c2VyLmFwcCcsICdhcHAnKSIpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSBmaW5hbGx5IHsKKyAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZihycyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIHJzLmNsb3NlKCk7CkBAIC0xOTEsOCArMTkxLDggQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMDUsMTEgKzIwNSwxMSBAQAogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IG51bGw7CiAgICAgICAgIENvbm5lY3Rpb24gY29uMSA9IG51bGw7CiAgICAgICAgIHRyeSB7Ci0JICAgIERhdGFTb3VyY2UgZHMgPSBpbml0aWFsaXplUmVjb25maWdEYXRhU291cmNlKCk7CisgICAgICAgIERhdGFTb3VyY2UgZHMgPSBpbml0aWFsaXplUmVjb25maWdEYXRhU291cmNlKCk7CiAgICAgICAgICAgICBEYXRhU291cmNlIGRzMSA9IGluaXRpYWxpemVTYW1wbGVEYXRhU291cmNlKCk7Ci0JICAgIGNvbiA9IChDb25uZWN0aW9uKSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIGNvbiA9IChDb25uZWN0aW9uKSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBjb24xID0gKENvbm5lY3Rpb24pIGRzMS5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICBzdG10MSA9IGNvbjEuY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPSAiY3JlYXRlIHRhYmxlICIgKyByZWNvbmZpZ1RhYmxlICsgIigiICsgY29sdW1uTmFtZSArICIgY2hhcig1MCkpIjsKICAgICAgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZShxdWVyeSk7CkBAIC0yMTgsNyArMjE4LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCB0YWJsZXMgOiByZWNvbmZpZ1Rlc3RUYWJsZSBhbmQgc2FtcGxlVGFibGUiKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0gZmluYWxseSB7CisgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0bXQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBzdG10LmNsb3NlKCk7CkBAIC0yMzksMjIgKzIzOSwyMiBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgIH0gICAgICAgICAgICAKLSAgICAgICAgfSAgICAgICAKLSAgICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIEVtYmVkZGVkRGF0YVNvdXJjZSBwcm9wZXJ0aWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBvb2wgY29uZmlndXJhdGlvbgogICAgICAqIGNyZWF0ZWQgZm9yIHJ1bm5pbmcgdGhlIEpEQkMgcmVjb25maWcgZGV2dGVzdHMuCiAgICAgICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgb3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRGF0YVNvdXJjZSBpbml0aWFsaXplUmVjb25maWdEYXRhU291cmNlKCkgewotICAgICAgICBFbWJlZGRlZERhdGFTb3VyY2UgZHMgPSBuZXcgRW1iZWRkZWREYXRhU291cmNlKCk7CSAgICAKLQlkcy5zZXRVc2VyKCJydXNlciIpOwotCWRzLnNldFBhc3N3b3JkKCJycGFzc3dvcmQiKTsKLQlkcy5zZXREYXRhYmFzZU5hbWUoUkVDT05GSUdfREJfTkFNRSk7Ci0JZHMuc2V0Q29ubmVjdGlvbkF0dHJpYnV0ZXMoImNyZWF0ZT10cnVlIik7Ci0JcmV0dXJuIGRzOworICAgICAgICBFbWJlZGRlZERhdGFTb3VyY2UgZHMgPSBuZXcgRW1iZWRkZWREYXRhU291cmNlKCk7CisgICAgZHMuc2V0VXNlcigicnVzZXIiKTsKKyAgICBkcy5zZXRQYXNzd29yZCgicnBhc3N3b3JkIik7CisgICAgZHMuc2V0RGF0YWJhc2VOYW1lKFJFQ09ORklHX0RCX05BTUUpOworICAgIGRzLnNldENvbm5lY3Rpb25BdHRyaWJ1dGVzKCJjcmVhdGU9dHJ1ZSIpOworICAgIHJldHVybiBkczsKICAgICB9CiAKICAgICAvKioKQEAgLTI2MiwyNCArMjYyLDI0IEBACiAgICAgICogY3JlYXRlZCBmb3IgcnVubmluZyB0aGUgSkRCQyByZWNvbmZpZyBkZXZ0ZXN0cy4KICAgICAgKi8KICAgICBwcml2YXRlIHN0YXRpYyBvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREYXRhU291cmNlIGluaXRpYWxpemVTYW1wbGVEYXRhU291cmNlKCkgewotICAgICAgICBFbWJlZGRlZERhdGFTb3VyY2UgZHMgPSBuZXcgRW1iZWRkZWREYXRhU291cmNlKCk7CSAgICAKLQlkcy5zZXRVc2VyKCJBUFAiKTsKLQlkcy5zZXRQYXNzd29yZCgiQVBQIik7Ci0JZHMuc2V0RGF0YWJhc2VOYW1lKFNBTVBMRV9EQl9OQU1FKTsKLQlkcy5zZXRDb25uZWN0aW9uQXR0cmlidXRlcygiY3JlYXRlPXRydWUiKTsKLQlyZXR1cm4gZHM7CisgICAgICAgIEVtYmVkZGVkRGF0YVNvdXJjZSBkcyA9IG5ldyBFbWJlZGRlZERhdGFTb3VyY2UoKTsKKyAgICBkcy5zZXRVc2VyKCJBUFAiKTsKKyAgICBkcy5zZXRQYXNzd29yZCgiQVBQIik7CisgICAgZHMuc2V0RGF0YWJhc2VOYW1lKFNBTVBMRV9EQl9OQU1FKTsKKyAgICBkcy5zZXRDb25uZWN0aW9uQXR0cmlidXRlcygiY3JlYXRlPXRydWUiKTsKKyAgICByZXR1cm4gZHM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgRW1iZWRkZWREYXRhU291cmNlIHByb3BlcnRpZXMgY29ycmVzcG9uZGluZyB0byB0aGUgcG9vbCBjb25maWd1cmF0aW9uCiAgICAgICogY3JlYXRlZCBmb3IgcnVubmluZyB0aGUgSkRCQyBkZXZ0ZXN0cy4KICAgICAgKi8KICAgICBwcml2YXRlIHN0YXRpYyBvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREYXRhU291cmNlIGluaXRpYWxpemVEYXRhU291cmNlKCkgewotICAgICAgICBFbWJlZGRlZERhdGFTb3VyY2UgZHMgPSBuZXcgRW1iZWRkZWREYXRhU291cmNlKCk7CSAgICAKLQlkcy5zZXRVc2VyKCJBUFAiKTsKLQlkcy5zZXRQYXNzd29yZCgiQVBQIik7Ci0JZHMuc2V0RGF0YWJhc2VOYW1lKFNVTl9BUFBTRVJWX1NBTVBMRVNfREIpOwotCWRzLnNldENvbm5lY3Rpb25BdHRyaWJ1dGVzKCJjcmVhdGU9dHJ1ZSIpOwotCXJldHVybiBkczsKKyAgICAgICAgRW1iZWRkZWREYXRhU291cmNlIGRzID0gbmV3IEVtYmVkZGVkRGF0YVNvdXJjZSgpOworICAgIGRzLnNldFVzZXIoIkFQUCIpOworICAgIGRzLnNldFBhc3N3b3JkKCJBUFAiKTsKKyAgICBkcy5zZXREYXRhYmFzZU5hbWUoU1VOX0FQUFNFUlZfU0FNUExFU19EQik7CisgICAgZHMuc2V0Q29ubmVjdGlvbkF0dHJpYnV0ZXMoImNyZWF0ZT10cnVlIik7CisgICAgcmV0dXJuIGRzOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvYXV0b2NvbW1pdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9hdXRvY29tbWl0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODVmNGQxNC4uNWMwZTc0ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9hdXRvY29tbWl0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9hdXRvY29tbWl0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE3ICsxNSwxNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iYXV0b2NvbW1pdCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2F1dG9jb21taXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9hdXRvY29tbWl0L2J1aWxkLnhtbAppbmRleCA4MzFkZjhmLi44MDVmYmEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2F1dG9jb21taXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvYXV0b2NvbW1pdC9idWlsZC54bWwKQEAgLTQxLDcgKzQxLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTU1LDUwICs1NSw1MCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InRydWUiLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0idHJ1ZSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgotCTwvYW50Y2FsbD4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgorICAgIDwvYW50Y2FsbD4KIAotCTxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CisgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAKICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KIAotICAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgCi0JICAgICBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+Ci0JICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+Ci0JICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgotCSAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KLQkgICAgIDwvZmlsZXNldD4KLQk8L2Vhcj4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIgorICAgICAgICAgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgorICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CisgICAgICAgICA8L2ZpbGVzZXQ+CisgICAgPC9lYXI+CisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIAotICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPiAKKworICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLXRlc3QtMSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdC0xIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViY2xpZW50LWNvbW1vbiI+Ci0gIAkgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9IndlYi10by1lamIgKGVhciBiYXNlZCkiLz4KLQk8L2FudGNhbGw+CisgICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9IndlYi10by1lamIgKGVhciBiYXNlZCkiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC0xMDgsNyArMTA4LDcgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CkBAIC0xMTgsMTIgKzExOCwxMiBAQAogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtYXV0b2NvbW1pdC1wb29sIi8+Ci0JPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvYXV0b2NvbW1pdCIvPgorICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2F1dG9jb21taXQiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLWF1dG9jb21taXQtcG9vbC5zdGVhZHlfcG9vbF9zaXplPTIiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLWF1dG9jb21taXQtcG9vbC5zdGVhZHlfcG9vbF9zaXplPTIiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1hdXRvY29tbWl0LXBvb2wubWF4X3Bvb2xfc2l6ZT0yIi8+CiAgICAgICA8L2FudGNhbGw+CiAKLSAgICAgIAorCiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9hdXRvY29tbWl0L2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2F1dG9jb21taXQvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBiNWJjZWQ0Li5hMWExNTBhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2F1dG9jb21taXQvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2F1dG9jb21taXQvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICA8bWV0aG9kLW5hbWU+KjwvbWV0aG9kLW5hbWU+CiAgICAgICA8L21ldGhvZD4KICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KLSAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4gIAorICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICAgIDxjb250YWluZXItdHJhbnNhY3Rpb24+CiAgICAgICA8bWV0aG9kPgogICAgICAgICA8ZWpiLW5hbWU+U2ltcGxlQk1QRUpCPC9lamItbmFtZT4KQEAgLTY0LDYgKzY0LDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+Tm90U3VwcG9ydGVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvYXV0b2NvbW1pdC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9hdXRvY29tbWl0L2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggNTBmMTc2Ni4uYzc4MGQ3OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9hdXRvY29tbWl0L2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9hdXRvY29tbWl0L2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTMwLDY3ICszMCw2NyBAQAogICAgIHByb3RlY3RlZCBEYXRhU291cmNlIGRzOwogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGVudGl0eUNvbnRleHQpIHsKLQlDb250ZXh0IGNvbnRleHQgPSBudWxsOwotCXRyeSB7Ci0JICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCX0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7Ci0JfQorICAgIENvbnRleHQgY29udGV4dCA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIEludGVnZXIgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7Ci0JcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOworICAgIHJldHVybiBuZXcgSW50ZWdlcigxKTsKICAgICB9CiAKICAgICAvKiBHZXQgYSBzaW5nbGUgY29ubmVjdGlvbiBhbmQgY2xvc2UgaXQgKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSgpIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCXRyeSB7Ci0JICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIHBhc3NlZCA9ICFjb25uLmdldEF1dG9Db21taXQoKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7Ci0JICAgICAgICAgICAgY29ubi5jbG9zZSgpOwotCSAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotICAgICAgICB9IAotICAgICAgICAKLQlyZXR1cm4gcGFzc2VkOworICAgIHRyeSB7CisgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHBhc3NlZCA9ICFjb25uLmdldEF1dG9Db21taXQoKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOworICAgICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgICAgIH0KKworICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDIoKSB7CiAgICAgICAgIENvbm5lY3Rpb24gY29ubjEgID0gbnVsbDsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uMiAgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CiAKLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgY29ubjIgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIGNvbm4yID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogCi0JICAgIHBhc3NlZCA9IGNvbm4xLmdldEF1dG9Db21taXQoKSAmIGNvbm4yLmdldEF1dG9Db21taXQoKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKGNvbm4xICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCQkgICAgY29ubjEuY2xvc2UoKTsKLQkJfSBjYXRjaCggRXhjZXB0aW9uIGVpKSB7fQotCSAgICB9Ci0JICAgIGlmIChjb25uMiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsKLQkJICAgIGNvbm4yLmNsb3NlKCk7Ci0JCX0gY2F0Y2goIEV4Y2VwdGlvbiBlaSkge30KLQkgICAgfQotCX0KLQotCXJldHVybiBwYXNzZWQ7CisgICAgICAgIHBhc3NlZCA9IGNvbm4xLmdldEF1dG9Db21taXQoKSAmIGNvbm4yLmdldEF1dG9Db21taXQoKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKGNvbm4xICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgY29ubjEuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGVpKSB7fQorICAgICAgICB9CisgICAgICAgIGlmIChjb25uMiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbm4yLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlaSkge30KKyAgICAgICAgfQogICAgIH0KLSAgIAorCisgICAgcmV0dXJuIHBhc3NlZDsKKyAgICB9CisKIAogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7fQogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvYXV0b2NvbW1pdC9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvYXV0b2NvbW1pdC9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQppbmRleCA5MjUzZGU2Li40MzZmZjY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2F1dG9jb21taXQvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9hdXRvY29tbWl0L3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCkBAIC01NiwyNyArNTYsMjcgQEAKICAgICAgICAgU2ltcGxlQk1QIGJlYW4gPSBzaW1wbGVCTVBIb21lLmNyZWF0ZSgpOwogCiAgICAgICAgIGlmICggYmVhbi50ZXN0MSgpICkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF1dG9jb21taXQgOiB0ZXN0MSA6IFBBU1MiKTsKLQkgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOwotCX0gZWxzZSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXV0b2NvbW1pdCA6IHRlc3QxIDogRkFJTCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF1dG9jb21taXQgOiB0ZXN0MSA6IFBBU1MiKTsKKyAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOworICAgIH0gZWxzZSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXV0b2NvbW1pdCA6IHRlc3QxIDogRkFJTCIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6RkFJTCIpOwotCX0KLQlpZiAoIGJlYW4udGVzdDIoKSApIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdXRvY29tbWl0IDogdGVzdDIgOiBQQVNTIik7Ci0JICAgIG91dC5wcmludGxuKCJURVNUOlBBU1MiKTsKLQl9IGVsc2UgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF1dG9jb21taXQgOiB0ZXN0MiA6IEZBSUwiKTsKKyAgICB9CisgICAgaWYgKCBiZWFuLnRlc3QyKCkgKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXV0b2NvbW1pdCA6IHRlc3QyIDogUEFTUyIpOworICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdXRvY29tbWl0IDogdGVzdDIgOiBGQUlMIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpGQUlMIik7Ci0JfQorICAgIH0KIAotCX0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKSB7Ci0JICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOwotCX0gY2F0Y2goQ3JlYXRlRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBuZSkgeworICAgICAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9IGNhdGNoKENyZWF0ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0gZmluYWxseSB7Ci0JICAgIG91dC5wcmludGxuKCJFTkRfT0ZfVEVTVCIpOwotCSAgICBvdXQuZmx1c2goKTsKLQl9CisgICAgICAgIG91dC5wcmludGxuKCJFTkRfT0ZfVEVTVCIpOworICAgICAgICBvdXQuZmx1c2goKTsKKyAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9hdXRvY29tbWl0L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvYXV0b2NvbW1pdC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZTQ5MTRmNi4uZjI1NjA3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9hdXRvY29tbWl0L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2F1dG9jb21taXQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2F1dG9jb21taXQvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvYXV0b2NvbW1pdC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDcwZDFmY2MuLmQ4NTRiOTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvYXV0b2NvbW1pdC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvYXV0b2NvbW1pdC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2J1aWxkLnhtbAppbmRleCA1OWE5YTVlLi5iYzI0OWJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2J1aWxkLnhtbApAQCAtMTksMTIgKzE5LDEyIEBACiAtLT4KIAogPCFFTlRJVFkgY29tbW9uU2V0dXAgU1lTVEVNICIuLy4uLy4uLy4uL2NvbmZpZy9wcm9wZXJ0aWVzLnhtbCI+Ci0JPCFFTlRJVFkgY29tbW9uQnVpbGQgU1lTVEVNICIuLy4uLy4uLy4uL2NvbmZpZy9jb21tb24ueG1sIj4KLQk8IUVOVElUWSBqZGJjQ29tbW9uIFNZU1RFTSAiLi8uLi9KZGJjQ29tbW9uLnhtbCI+Ci0JPCFFTlRJVFkgamRiY0NvbW1vblByb3BlcnRpZXMgU1lTVEVNICIuLy4uL0pkYmNDb21tb24ucHJvcGVydGllcyI+Ci0JPCFFTlRJVFkgcmVwb3J0aW5nICAgU1lTVEVNICIuLy4uL3JlcG9ydC54bWwiPgotCTwhRU5USVRZIGVlQ29tbW9uIFNZU1RFTSAiLi8uLi9jb25maWcvZWUtY29tbW9uLnhtbCI+Ci0JPCFFTlRJVFkgZWVDb21tb25Qcm9wZXJ0aWVzIFNZU1RFTSAiLi8uLi9jb25maWcvZWUtcHJvcGVydGllcy54bWwiPgorICAgIDwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CisgICAgPCFFTlRJVFkgamRiY0NvbW1vbiBTWVNURU0gIi4vLi4vSmRiY0NvbW1vbi54bWwiPgorICAgIDwhRU5USVRZIGpkYmNDb21tb25Qcm9wZXJ0aWVzIFNZU1RFTSAiLi8uLi9KZGJjQ29tbW9uLnByb3BlcnRpZXMiPgorICAgIDwhRU5USVRZIHJlcG9ydGluZyAgIFNZU1RFTSAiLi8uLi9yZXBvcnQueG1sIj4KKyAgICA8IUVOVElUWSBlZUNvbW1vbiBTWVNURU0gIi4vLi4vY29uZmlnL2VlLWNvbW1vbi54bWwiPgorICAgIDwhRU5USVRZIGVlQ29tbW9uUHJvcGVydGllcyBTWVNURU0gIi4vLi4vY29uZmlnL2VlLXByb3BlcnRpZXMueG1sIj4KICAgICAgICAgXT4KIAogPHByb2plY3QgbmFtZT0iamRiYyIgZGVmYXVsdD0idXNhZ2UiIGJhc2VkaXI9Ii4iPgpAQCAtNDksMTUgKzQ5LDE1IEBACiAgICAgICAgIDxkZWxldGU+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLm91dHB1dCIvPgogICAgICAgICA8L2RlbGV0ZT4KLQk8cmVjb3JkIG5hbWU9ImpkYmMub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjb250YXV0aCIvPgotCTxhbnRjYWxsIHRhcmdldD0iYXV0b2NvbW1pdCIvPgotCTxhbnRjYWxsIHRhcmdldD0ibWF4Y29ubmVjdGlvbnVzYWdlIi8+CisgICAgPHJlY29yZCBuYW1lPSJqZGJjLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY29udGF1dGgiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImF1dG9jb21taXQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9Im1heGNvbm5lY3Rpb251c2FnZSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9Im11bHRpcGxldXNlcmNyZWRlbnRpYWxzIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzdGF0ZW1lbnR0aW1lb3V0Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjb25ubGVha3RyYWNpbmciLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNvbm5jcmVhdGlvbnJldHJ5Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJyZXNFbmFibGVEaXNhYmxlIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGF0ZW1lbnR0aW1lb3V0Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjb25ubGVha3RyYWNpbmciLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbm5jcmVhdGlvbnJldHJ5Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXNFbmFibGVEaXNhYmxlIi8+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0iamRiYy5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgogICAgIDwvdGFyZ2V0PgogCkBAIC02OSw2MyArNjksNjMgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9Iioub3V0cHV0Ii8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8cmVjb3JkIG5hbWU9ImpkYmMub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjb250YXV0aCIvPgotCTxhbnRjYWxsIHRhcmdldD0iYXV0b2NvbW1pdCIvPgotCTxhbnRjYWxsIHRhcmdldD0ibWF4Y29ubmVjdGlvbnVzYWdlIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjb250YXV0aCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYXV0b2NvbW1pdCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ibWF4Y29ubmVjdGlvbnVzYWdlIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibXVsdGlwbGV1c2VyY3JlZGVudGlhbHMiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InN0YXRlbWVudHRpbWVvdXQiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNvbm5sZWFrdHJhY2luZyIvPgotCTxhbnRjYWxsIHRhcmdldD0iY29ubmNyZWF0aW9ucmV0cnkiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJlc0VuYWJsZURpc2FibGUiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXRlbWVudHRpbWVvdXQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbm5sZWFrdHJhY2luZyIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY29ubmNyZWF0aW9ucmV0cnkiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc0VuYWJsZURpc2FibGUiLz4KICAgICAgICAgPHJlY29yZCBuYW1lPSJqZGJjLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbnRhdXRoIj4KICAgICAgICAgPHJlY29yZCBuYW1lPSJjb250YXV0aC9jb250YXV0aC5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KICAgICAgICAgPGFudCBkaXI9ImNvbnRhdXRoIiB0YXJnZXQ9ImFsbCIvPgotCTxyZWNvcmQgbmFtZT0iY29udGF1dGgvY29udGF1dGgub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KKyAgICA8cmVjb3JkIG5hbWU9ImNvbnRhdXRoL2NvbnRhdXRoLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImF1dG9jb21taXQiPgotCTxyZWNvcmQgbmFtZT0iYXV0b2NvbW1pdC9hdXRvY29tbWl0Lm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgotCTxhbnQgZGlyPSJhdXRvY29tbWl0IiB0YXJnZXQ9ImFsbCIvPgotCTxyZWNvcmQgbmFtZT0iYXV0b2NvbW1pdC9hdXRvY29tbWl0Lm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CisgICAgPHJlY29yZCBuYW1lPSJhdXRvY29tbWl0L2F1dG9jb21taXQub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+CisgICAgPGFudCBkaXI9ImF1dG9jb21taXQiIHRhcmdldD0iYWxsIi8+CisgICAgPHJlY29yZCBuYW1lPSJhdXRvY29tbWl0L2F1dG9jb21taXQub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ibWF4Y29ubmVjdGlvbnVzYWdlIj4KICAgICAgICAgPHJlY29yZCBuYW1lPSJtYXhjb25uZWN0aW9udXNhZ2UvbWF4Y29ubmVjdGlvbnVzYWdlLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgogICAgICAgICA8YW50IGRpcj0ibWF4Y29ubmVjdGlvbnVzYWdlIiB0YXJnZXQ9ImFsbCIvPgotCTxyZWNvcmQgbmFtZT0ibWF4Y29ubmVjdGlvbnVzYWdlL21heGNvbm5lY3Rpb251c2FnZS5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgorICAgIDxyZWNvcmQgbmFtZT0ibWF4Y29ubmVjdGlvbnVzYWdlL21heGNvbm5lY3Rpb251c2FnZS5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ibXVsdGlwbGV1c2VyY3JlZGVudGlhbHMiPgotCTxyZWNvcmQgbmFtZT0ibXVsdGlwbGV1c2VyY3JlZGVudGlhbHMvbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+Ci0JPGFudCBkaXI9Im11bHRpcGxldXNlcmNyZWRlbnRpYWxzIiB0YXJnZXQ9ImFsbCIvPgotCTxyZWNvcmQgbmFtZT0ibXVsdGlwbGV1c2VyY3JlZGVudGlhbHMvbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KKyAgICA8cmVjb3JkIG5hbWU9Im11bHRpcGxldXNlcmNyZWRlbnRpYWxzL211bHRpcGxldXNlcmNyZWRlbnRpYWxzLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgorICAgIDxhbnQgZGlyPSJtdWx0aXBsZXVzZXJjcmVkZW50aWFscyIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8cmVjb3JkIG5hbWU9Im11bHRpcGxldXNlcmNyZWRlbnRpYWxzL211bHRpcGxldXNlcmNyZWRlbnRpYWxzLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InN0YXRlbWVudHRpbWVvdXQiPgotCTxyZWNvcmQgbmFtZT0ic3RhdGVtZW50dGltZW91dC9zdGF0ZW1lbnR0aW1lb3V0Lm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgotCTxhbnQgZGlyPSJzdGF0ZW1lbnR0aW1lb3V0IiB0YXJnZXQ9ImFsbCIvPgotCTxyZWNvcmQgbmFtZT0ic3RhdGVtZW50dGltZW91dC9zdGF0ZW1lbnR0aW1lb3V0Lm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CisgICAgPHJlY29yZCBuYW1lPSJzdGF0ZW1lbnR0aW1lb3V0L3N0YXRlbWVudHRpbWVvdXQub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+CisgICAgPGFudCBkaXI9InN0YXRlbWVudHRpbWVvdXQiIHRhcmdldD0iYWxsIi8+CisgICAgPHJlY29yZCBuYW1lPSJzdGF0ZW1lbnR0aW1lb3V0L3N0YXRlbWVudHRpbWVvdXQub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29ubmxlYWt0cmFjaW5nIj4KICAgICAgICAgPHJlY29yZCBuYW1lPSJjb25ubGVha3RyYWNpbmcvY29ubmxlYWt0cmFjaW5nLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgogICAgICAgICA8YW50IGRpcj0iY29ubmxlYWt0cmFjaW5nIiB0YXJnZXQ9ImFsbCIvPgotCTxyZWNvcmQgbmFtZT0iY29ubmxlYWt0cmFjaW5nL2Nvbm5sZWFrdHJhY2luZy5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgorICAgIDxyZWNvcmQgbmFtZT0iY29ubmxlYWt0cmFjaW5nL2Nvbm5sZWFrdHJhY2luZy5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb25uY3JlYXRpb25yZXRyeSI+Ci0JPHJlY29yZCBuYW1lPSJjb25uY3JlYXRpb25yZXRyeS9jb25uY3JlYXRpb25yZXRyeS5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KLQk8YW50IGRpcj0iY29ubmNyZWF0aW9ucmV0cnkiIHRhcmdldD0iYWxsIi8+Ci0JPHJlY29yZCBuYW1lPSJjb25uY3JlYXRpb25yZXRyeS9jb25uY3JlYXRpb25yZXRyeS5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgorICAgIDxyZWNvcmQgbmFtZT0iY29ubmNyZWF0aW9ucmV0cnkvY29ubmNyZWF0aW9ucmV0cnkub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+CisgICAgPGFudCBkaXI9ImNvbm5jcmVhdGlvbnJldHJ5IiB0YXJnZXQ9ImFsbCIvPgorICAgIDxyZWNvcmQgbmFtZT0iY29ubmNyZWF0aW9ucmV0cnkvY29ubmNyZWF0aW9ucmV0cnkub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzRW5hYmxlRGlzYWJsZSI+CiAgICAgICAgPHJlY29yZCBuYW1lPSJyZXNFbmFibGVEaXNhYmxlL3Jlc2VuYWJsZWRpc2FibGUub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+CiAgICAgICAgIDxhbnQgZGlyPSJyZXNFbmFibGVEaXNhYmxlIiB0YXJnZXQ9ImFsbCIvPgotCTxyZWNvcmQgbmFtZT0icmVzRW5hYmxlRGlzYWJsZS9yZXNlbmFibGVkaXNhYmxlLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CisgICAgPHJlY29yZCBuYW1lPSJyZXNFbmFibGVEaXNhYmxlL3Jlc2VuYWJsZWRpc2FibGUub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGVjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5jcmVhdGlvbnJldHJ5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5jcmVhdGlvbnJldHJ5L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWY0ZWFlOS4uMjIzMTJiNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25uY3JlYXRpb25yZXRyeS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmNyZWF0aW9ucmV0cnkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTcgKzE1LDE3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLWNvbm5lY3Rpb25jcmVhdGlvbnJldHJ5Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9InBvb2xuYW1lIiB2YWx1ZT0iamRiYy1jb25uZWN0aW9uY3JlYXRpb25yZXRyeSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25uY3JlYXRpb25yZXRyeS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5jcmVhdGlvbnJldHJ5L2J1aWxkLnhtbAppbmRleCBkMGFiODcyLi4wMTMzOWE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5jcmVhdGlvbnJldHJ5L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5jcmVhdGlvbnJldHJ5L2J1aWxkLnhtbApAQCAtMTksMTEgKzE5LDExIEBACiAtLT4KIAogPCFFTlRJVFkgY29tbW9uU2V0dXAgU1lTVEVNICIuLy4uLy4uLy4uLy4uL2NvbmZpZy9wcm9wZXJ0aWVzLnhtbCI+Ci0JPCFFTlRJVFkgY29tbW9uQnVpbGQgU1lTVEVNICIuLy4uLy4uLy4uLy4uL2NvbmZpZy9jb21tb24ueG1sIj4KKyAgICA8IUVOVElUWSBjb21tb25CdWlsZCBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL2NvbW1vbi54bWwiPgogICAgICAgICA8IUVOVElUWSB0ZXN0cHJvcGVydGllcyBTWVNURU0gIi4vYnVpbGQucHJvcGVydGllcyI+Ci0JPCFFTlRJVFkgcnVuIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvcnVuLnhtbCI+Ci0JPCFFTlRJVFkgZWVTZXR1cCBTWVNURU0gIi4vLi4vLi4vY29uZmlnL2VlLWNvbW1vbi54bWwiPgotCTwhRU5USVRZIGVlUHJvcGVydGllcyBTWVNURU0gIi4vLi4vLi4vY29uZmlnL2VlLXByb3BlcnRpZXMueG1sIj4KKyAgICA8IUVOVElUWSBydW4gU1lTVEVNICIuLy4uLy4uLy4uLy4uL2NvbmZpZy9ydW4ueG1sIj4KKyAgICA8IUVOVElUWSBlZVNldHVwIFNZU1RFTSAiLi8uLi8uLi9jb25maWcvZWUtY29tbW9uLnhtbCI+CisgICAgPCFFTlRJVFkgZWVQcm9wZXJ0aWVzIFNZU1RFTSAiLi8uLi8uLi9jb25maWcvZWUtcHJvcGVydGllcy54bWwiPgogICAgICAgICBdPgogCiA8cHJvamVjdCBuYW1lPSJtaXgiIGRlZmF1bHQ9InVzYWdlIiBiYXNlZGlyPSIuIj4KQEAgLTU3LDI4ICs1NywyOCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InRydWUiLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0idHJ1ZSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgotCTwvYW50Y2FsbD4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgorICAgIDwvYW50Y2FsbD4KIAotCTxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CisgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAKICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KIAotICAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgCi0JICAgICBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+Ci0JICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+Ci0JICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgotCSAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KLQkgICAgIDwvZmlsZXNldD4KLQk8L2Vhcj4KKyAgICAgICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiCisgICAgICAgICBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+CisgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KKyAgICAgICAgIDwvZmlsZXNldD4KKyAgICA8L2Vhcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC05MiwyMCArOTIsMjAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0b3AtZGVyYnkiLz4KIAotCTxwYXJhbGxlbD4KLSAgICAgICAgCTxhbnRjYWxsIHRhcmdldD0icnVuLXRlc3QtMSIvPgotCQk8c2VxdWVudGlhbD4KLQkJCTxzbGVlcCBzZWNvbmRzPSIxNSIvPgotCQkJPGFudGNhbGwgdGFyZ2V0PSJzdGFydC1kZXJieSIvPgotCQk8L3NlcXVlbnRpYWw+Ci0JPC9wYXJhbGxlbD4KKyAgICA8cGFyYWxsZWw+CisgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi10ZXN0LTEiLz4KKyAgICAgICAgPHNlcXVlbnRpYWw+CisgICAgICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTUiLz4KKyAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnQtZGVyYnkiLz4KKyAgICAgICAgPC9zZXF1ZW50aWFsPgorICAgIDwvcGFyYWxsZWw+CiAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QtMSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotICAJICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tZWpiIChlYXIgYmFzZWQpIi8+Ci0JPC9hbnRjYWxsPgorICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tZWpiIChlYXIgYmFzZWQpIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25uY3JlYXRpb25yZXRyeS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25uY3JlYXRpb25yZXRyeS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IGNkMWQ4OTguLjVkMWI0NjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmNyZWF0aW9ucmV0cnkvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5jcmVhdGlvbnJldHJ5L2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICB9CiAKIAotICAgCisKIC8qIEdldCBhIHNpbmdsZSBjb25uZWN0aW9uIGFuZCBjbG9zZSBpdCAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCl7CiAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5jcmVhdGlvbnJldHJ5L3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25uY3JlYXRpb25yZXRyeS9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQppbmRleCBkNzIyNjA5Li4zYzA1ZTVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5jcmVhdGlvbnJldHJ5L3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmNyZWF0aW9ucmV0cnkvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKQEAgLTU2LDIwICs1NiwyMCBAQAogICAgICAgICBTaW1wbGVCTVAgY29udmFsQk1QID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoKTsKIAogICAgICAgICBpZiAoY29udmFsQk1QLnRlc3QxKCkpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW9uIENyZWF0aW9uIFJldHJ5IDogdGVzdDEgOiBQQVNTIik7Ci0JICAgIG91dC5wcmludGxuKCJURVNUOlBBU1MiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW9uIENyZWF0aW9uIFJldHJ5IDogdGVzdDEgOiBQQVNTIik7CisgICAgICAgIG91dC5wcmludGxuKCJURVNUOlBBU1MiKTsKICAgICAgICAgfSBlbHNlIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW9uIENyZWF0aW9uIFJldHJ5IDogdGVzdDEgOiBGQUlMIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGlvbiBDcmVhdGlvbiBSZXRyeSA6IHRlc3QxIDogRkFJTCIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6RkFJTCIpOwogICAgICAgICB9CiAKLQl9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBuZSkgewotCSAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9IGNhdGNoKENyZWF0ZUV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpIHsKKyAgICAgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBjYXRjaChDcmVhdGVFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9IGZpbmFsbHkgewotCSAgICBvdXQucHJpbnRsbigiRU5EX09GX1RFU1QiKTsKLQkgICAgb3V0LmZsdXNoKCk7Ci0JfQorICAgICAgICBvdXQucHJpbnRsbigiRU5EX09GX1RFU1QiKTsKKyAgICAgICAgb3V0LmZsdXNoKCk7CisgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmNyZWF0aW9ucmV0cnkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25uY3JlYXRpb25yZXRyeS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZTQ5MTRmNi4uZjI1NjA3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25uY3JlYXRpb25yZXRyeS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25uY3JlYXRpb25yZXRyeS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmNyZWF0aW9ucmV0cnkvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmNyZWF0aW9ucmV0cnkvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA3MGQxZmNjLi5kODU0Yjk1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5jcmVhdGlvbnJldHJ5L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25uY3JlYXRpb25yZXRyeS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25ubGVha3RyYWNpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmxlYWt0cmFjaW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjVhMzc5Ny4uMDJjMGNjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25ubGVha3RyYWNpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5sZWFrdHJhY2luZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtY29ubmVjdGlvbmxlYWt0cmFjaW5nIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9InBvb2xuYW1lIiB2YWx1ZT0iamRiYy1jb25uZWN0aW9ubGVha3RyYWNpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmxlYWt0cmFjaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmxlYWt0cmFjaW5nL2J1aWxkLnhtbAppbmRleCAyZGU3MTI0Li43NWNkMTNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5sZWFrdHJhY2luZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25ubGVha3RyYWNpbmcvYnVpbGQueG1sCkBAIC0xOSw5ICsxOSw5IEBACiAtLT4KIAogICAgICAgICA8IUVOVElUWSBjb21tb25TZXR1cCBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL3Byb3BlcnRpZXMueG1sIj4KLQk8IUVOVElUWSBjb21tb25CdWlsZCBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL2NvbW1vbi54bWwiPgorICAgIDwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CiAgICAgICAgIDwhRU5USVRZIHRlc3Rwcm9wZXJ0aWVzIFNZU1RFTSAiLi9idWlsZC5wcm9wZXJ0aWVzIj4KLQk8IUVOVElUWSBydW4gU1lTVEVNICIuLy4uLy4uL2NvbmZpZy9ydW4ueG1sIj4KKyAgICA8IUVOVElUWSBydW4gU1lTVEVNICIuLy4uLy4uL2NvbmZpZy9ydW4ueG1sIj4KICAgICAgICAgXT4KIAogPHByb2plY3QgbmFtZT0ibWl4IiBkZWZhdWx0PSJ1c2FnZSIgYmFzZWRpcj0iLiI+CkBAIC01NCwxMiArNTQsMTIgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKLQkJICAgIHZhbHVlPSIqKi9lamIvKi5jbGFzcyIvPgorICAgICAgICAgICAgdmFsdWU9IioqL2VqYi8qLmNsYXNzIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCi0JCSAgICB2YWx1ZT0iKiovY2xpZW50LyouY2xhc3MiLz4KLQkgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIgotCQkgICAgdmFsdWU9IioqL3NlcnZsZXQvKi5jbGFzcyIvPgotCSAgICA8cGFyYW0gIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InRydWUiLz4KKyAgICAgICAgICAgIHZhbHVlPSIqKi9jbGllbnQvKi5jbGFzcyIvPgorICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiCisgICAgICAgICAgICB2YWx1ZT0iKiovc2VydmxldC8qLmNsYXNzIi8+CisgICAgICAgIDxwYXJhbSAgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0idHJ1ZSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXZhYwogICAgICAgICAgIHNyY2Rpcj0iLiIKQEAgLTg4LDggKzg4LDggQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXN0dWZmIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLQk8ZGVsZXRlIGZpbGU9ImNsaWVudC9XZWJUZXN0LmNsYXNzIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KKyAgICA8ZGVsZXRlIGZpbGU9ImNsaWVudC9XZWJUZXN0LmNsYXNzIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KQEAgLTEyOSw3ICsxMjksNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke3Bvb2xuYW1lfS5jb25uZWN0aW9uX2xlYWtfcmVjbGFpbT10cnVlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7cG9vbG5hbWV9Lm5vbl90cmFuc2FjdGlvbmFsX2Nvbm5lY3Rpb25zPXRydWUiLz4KQEAgLTE2MCw2ICsxNjAsNiBAQAogICAgIDwvdGFyZ2V0PgogCiAKLSAgICAKKwogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5sZWFrdHJhY2luZy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25ubGVha3RyYWNpbmcvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCAxYjQ2MjkzLi45YTY0YjQyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5sZWFrdHJhY2luZy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmxlYWt0cmFjaW5nL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTMxLDE2ICszMSwxNiBAQAogICAgICAgICAgICAgPGVqYi1uYW1lPlNpbXBsZUJNUEVKQjwvZWpiLW5hbWU+CiAgICAgICAgICAgICA8bG9jYWwtaG9tZT5jb20uc3VuLnMxYXNkZXYuamRiYy5jb25uZWN0aW9ubGVha3RyYWNpbmcuZWpiLlNpbXBsZUJNUEhvbWU8L2xvY2FsLWhvbWU+CiAgICAgICAgICAgICA8bG9jYWw+Y29tLnN1bi5zMWFzZGV2LmpkYmMuY29ubmVjdGlvbmxlYWt0cmFjaW5nLmVqYi5TaW1wbGVCTVA8L2xvY2FsPgotCSAgICA8ZWpiLWNsYXNzPmNvbS5zdW4uczFhc2Rldi5qZGJjLmNvbm5lY3Rpb25sZWFrdHJhY2luZy5lamIuU2ltcGxlQk1QQmVhbjwvZWpiLWNsYXNzPgotCSAgICA8c2Vzc2lvbi10eXBlPlN0YXRlbGVzczwvc2Vzc2lvbi10eXBlPgotCSAgICA8dHJhbnNhY3Rpb24tdHlwZT5Db250YWluZXI8L3RyYW5zYWN0aW9uLXR5cGU+Ci0JICAgIDwhLS08cGVyc2lzdGVuY2UtdHlwZT5CZWFuPC9wZXJzaXN0ZW5jZS10eXBlPgorICAgICAgICA8ZWpiLWNsYXNzPmNvbS5zdW4uczFhc2Rldi5qZGJjLmNvbm5lY3Rpb25sZWFrdHJhY2luZy5lamIuU2ltcGxlQk1QQmVhbjwvZWpiLWNsYXNzPgorICAgICAgICA8c2Vzc2lvbi10eXBlPlN0YXRlbGVzczwvc2Vzc2lvbi10eXBlPgorICAgICAgICA8dHJhbnNhY3Rpb24tdHlwZT5Db250YWluZXI8L3RyYW5zYWN0aW9uLXR5cGU+CisgICAgICAgIDwhLS08cGVyc2lzdGVuY2UtdHlwZT5CZWFuPC9wZXJzaXN0ZW5jZS10eXBlPgogICAgICAgICAgICAgPHByaW0ta2V5LWNsYXNzPmphdmEubGFuZy5JbnRlZ2VyPC9wcmltLWtleS1jbGFzcz4KICAgICAgICAgICAgIDxyZWVudHJhbnQ+RmFsc2U8L3JlZW50cmFudD4KICAgICAgICAgICAgIDxzZWN1cml0eS1pZGVudGl0eT4KICAgICAgICAgICAgICAgICA8ZGVzY3JpcHRpb24+PC9kZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eT48L3VzZS1jYWxsZXItaWRlbnRpdHk+Ci0JPC9zZWN1cml0eS1pZGVudGl0eT4tLT4KKyAgICA8L3NlY3VyaXR5LWlkZW50aXR5Pi0tPgogICAgICAgICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgICAgICAgICA8cmVzLXJlZi1uYW1lPkRhdGFTb3VyY2U8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgICAgICAgICA8cmVzLXR5cGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L3Jlcy10eXBlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25ubGVha3RyYWNpbmcvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmxlYWt0cmFjaW5nL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggOThhNjllZC4uZGQ5OGE3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25ubGVha3RyYWNpbmcvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5sZWFrdHJhY2luZy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQgbV9jdHggPSBudWxsOwogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgY29udGV4dCkgewotCW1fY3R4ID0gY29udGV4dDsKKyAgICBtX2N0eCA9IGNvbnRleHQ7CiAgICAgfQogCiAgICAgcHVibGljIEludGVnZXIgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CkBAIC0zNiw3ICszNiw3IEBACiAgICAgfQogCiAKLSAgIAorCiAvKiBHZXQgYSBzaW5nbGUgY29ubmVjdGlvbiBhbmQgY2xvc2UgaXQgKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSgpIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmxlYWt0cmFjaW5nL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25ubGVha3RyYWNpbmcvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKaW5kZXggODg0OTZhNi4uOWE0OWFlMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25ubGVha3RyYWNpbmcvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25ubGVha3RyYWNpbmcvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKQEAgLTU2LDI0ICs1NiwyNCBAQAogICAgICAgICAvL3N0YXQuYWRkRGVzY3JpcHRpb24oIlJ1bm5pbmcgc2VyaWFsaXphYmxlIGNvbm5lY3RvciB0ZXN0ICIpOwogICAgICAgICBTaW1wbGVCTVAgYmVhbiA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKCk7CiAKLQkgICAgZm9yKGludCBpPTA7IGk8MzsgaSsrKXsKKyAgICAgICAgZm9yKGludCBpPTA7IGk8MzsgaSsrKXsKICAgICAgICAgICAgICAgICBpZighYmVhbi50ZXN0MSgpKXsKLQkJICAgIC8vc3RhdC5hZGRTdGF0dXMoImpkYmMtY29ubmVjdGlvbmxlYWt0dHJhY2luZyA6IHRlc3QgIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIC8vc3RhdC5hZGRTdGF0dXMoImpkYmMtY29ubmVjdGlvbmxlYWt0dHJhY2luZyA6IHRlc3QgIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6RkFJTCIpOwotCSAgICAgICAgICAgIGJyZWFrOwotCSAgICAgICAgfQotCSAgICAgICAgVGhyZWFkLnNsZWVwKDIwMDAwKTsKLQkgICAgfQotCSAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7Ci0JfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpIHsKLQkgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSBjYXRjaChDcmVhdGVFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0gY2F0Y2goamF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uIGllKSB7Ci0JCWllLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDIwMDAwKTsKKyAgICAgICAgfQorICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7CisgICAgfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpIHsKKyAgICAgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBjYXRjaChDcmVhdGVFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gY2F0Y2goamF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uIGllKSB7CisgICAgICAgIGllLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9IGZpbmFsbHkgewotCSAgICBvdXQucHJpbnRsbigiRU5EX09GX1RFU1QiKTsKLQkgICAgb3V0LmZsdXNoKCk7Ci0JfQorICAgICAgICBvdXQucHJpbnRsbigiRU5EX09GX1RFU1QiKTsKKyAgICAgICAgb3V0LmZsdXNoKCk7CisgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmxlYWt0cmFjaW5nL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmxlYWt0cmFjaW5nL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBlNDkxNGY2Li5mMjU2MDc2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5sZWFrdHJhY2luZy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25ubGVha3RyYWNpbmcvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5sZWFrdHJhY2luZy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25ubGVha3RyYWNpbmcvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA3MGQxZmNjLi5kODU0Yjk1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5sZWFrdHJhY2luZy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmxlYWt0cmFjaW5nL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2NvbnRhdXRoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2NvbnRhdXRoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMTU3NWM2Yy4uYWY3ZTNiNyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb250YXV0aC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29udGF1dGgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTcgKzE1LDE3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjb250YXV0aCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii9jb250YXV0aC9zZXJ2bGV0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2NvbnRhdXRoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29udGF1dGgvYnVpbGQueG1sCmluZGV4IDFjZmUxMGIuLmFmYjhhYjggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29udGF1dGgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29udGF1dGgvYnVpbGQueG1sCkBAIC00MSw3ICs0MSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01NiwzMCArNTYsMzAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotCTxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ0cnVlIi8+CisgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InRydWUiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KLQk8L2FudGNhbGw+CisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KKyAgICA8L2FudGNhbGw+CiAKLQk8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgorICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogCiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAKLSAgICAgICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIAotCSAgICAgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgotCSAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgotCSAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KLQkgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+Ci0JICAgICA8L2ZpbGVzZXQ+Ci0JPC9lYXI+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIKKyAgICAgICAgIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KKyAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgorICAgICAgICAgPC9maWxlc2V0PgorICAgIDwvZWFyPgorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC04NywxNyArODcsMTcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tdGVzdC0xIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0LTEiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWJjbGllbnQtY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9IndlYi10by1lamIgKGVhciBiYXNlZCkiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9IndlYi10by1lamIgKGVhciBiYXNlZCkiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCkBAIC0xMDgsNyArMTA4LDcgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb250YXV0aC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb250YXV0aC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDdlNmJjMzAuLjU3NjUxMmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29udGF1dGgvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2NvbnRhdXRoL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTUwLDEzICs1MCwxMyBAQAogCiAgIDxhc3NlbWJseS1kZXNjcmlwdG9yPgogICAgIDxjb250YWluZXItdHJhbnNhY3Rpb24+Ci0JICAgIDxtZXRob2Q+CisgICAgICAgIDxtZXRob2Q+CiAgICAgICAgIDxlamItbmFtZT5TaW1wbGVCTVBFSkI8L2VqYi1uYW1lPgogICAgICAgICA8bWV0aG9kLW5hbWU+KjwvbWV0aG9kLW5hbWU+CiAgICAgICA8L21ldGhvZD4KICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb250YXV0aC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb250YXV0aC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDVjZWVjNDEuLjUyZDk5MDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29udGF1dGgvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2NvbnRhdXRoL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTMwLDU4ICszMCw1OCBAQAogICAgIHByb3RlY3RlZCBEYXRhU291cmNlIGRzOwogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGVudGl0eUNvbnRleHQpIHsKLQlDb250ZXh0IGNvbnRleHQgPSBudWxsOwotCXRyeSB7Ci0JICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCX0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7Ci0JfQorICAgIENvbnRleHQgY29udGV4dCA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKKyAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqU2ltcGxlQk1QQmVhbioqXSBEb25lIHdpdGggc2V0RW50aXR5Q29udGV4dC4uLi4iKTsKICAgICB9CiAKICAgICBwdWJsaWMgSW50ZWdlciBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKLQlyZXR1cm4gbmV3IEludGVnZXIoMSk7CisgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgewogICAgICAgICAvL2NvbnRhaW5lciBhdXRoICsgdXNlci9wd2Qgc3BlY2lmaWVkIC0gc2hvdWxkIHBhc3MKLQlDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQl0cnkgewotCSAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigiREJVU0VSIiwgIkRCUEFTU1dPUkQiICk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkJfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KLQotCi0JcmV0dXJuIHBhc3NlZDsKKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigiREJVU0VSIiwgIkRCUEFTU1dPUkQiICk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CiAgICAgfQotICAgIAorCisKKyAgICByZXR1cm4gcGFzc2VkOworICAgIH0KKwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QyKCkgewogICAgICAgICAvL2NvbnRhaW5lciBhdXRoICsgdXNlci9wd2QgTk9UIHNwZWNpZmllZCAtIHNob3VsZCBwYXNzCi0JQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7Ci0JICAgICAgICAgICAgY29ubi5jbG9zZSgpOwotCQl9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JfQorICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIHRyeSB7CisgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgfQogCi0JCi0JcmV0dXJuIHBhc3NlZDsKKworICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2NvbnRhdXRoL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb250YXV0aC9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQppbmRleCA1ODIwOGMyLi5lNWI2MmFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2NvbnRhdXRoL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29udGF1dGgvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKQEAgLTU2LDI5ICs1NiwyOSBAQAogICAgICAgICBTaW1wbGVCTVAgYmVhbiA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKCk7CiAKICAgICAgICAgaWYgKCBiZWFuLnRlc3QxKCkgKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29udGF1dGggOiB0ZXN0MSA6IFBBU1MiKTsKLQkgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOwotCX0gZWxzZSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29udGF1dGggOiB0ZXN0MSA6IEZBSUwiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb250YXV0aCA6IHRlc3QxIDogUEFTUyIpOworICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb250YXV0aCA6IHRlc3QxIDogRkFJTCIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6RkFJTCIpOwotCX0KLQlpZiAoIGJlYW4udGVzdDIoKSApIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb250YXV0aCA6IHRlc3QyIDogUEFTUyIpOwotCSAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7Ci0JfSBlbHNlIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb250YXV0aCA6IHRlc3QyIDogRkFJTCIpOworICAgIH0KKyAgICBpZiAoIGJlYW4udGVzdDIoKSApIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb250YXV0aCA6IHRlc3QyIDogUEFTUyIpOworICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb250YXV0aCA6IHRlc3QyIDogRkFJTCIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6RkFJTCIpOwotCX0KKyAgICB9CiAKLQl9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBuZSkgewotCSAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9IGNhdGNoKENyZWF0ZUV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSAvKmNhdGNoKGphdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgewotCQlpZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBuZSkgeworICAgICAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9IGNhdGNoKENyZWF0ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSAvKmNhdGNoKGphdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgeworICAgICAgICBpZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfSAqL2ZpbmFsbHkgewotCSAgICBvdXQucHJpbnRsbigiRU5EX09GX1RFU1QiKTsKLQkgICAgb3V0LmZsdXNoKCk7Ci0JfQorICAgICAgICBvdXQucHJpbnRsbigiRU5EX09GX1RFU1QiKTsKKyAgICAgICAgb3V0LmZsdXNoKCk7CisgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29udGF1dGgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb250YXV0aC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZTQ5MTRmNi4uZjI1NjA3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb250YXV0aC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb250YXV0aC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29udGF1dGgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29udGF1dGgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA3MGQxZmNjLi5kODU0Yjk1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2NvbnRhdXRoL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb250YXV0aC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9lbWJlZGRlZC9zZXR1cC1qZGJjLWRldi10ZXN0cy1lbWJlZGRlZC5zaCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvZW1iZWRkZWQvc2V0dXAtamRiYy1kZXYtdGVzdHMtZW1iZWRkZWQuc2gKaW5kZXggYTAzOTBlMC4uOTk3NWJlYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9lbWJlZGRlZC9zZXR1cC1qZGJjLWRldi10ZXN0cy1lbWJlZGRlZC5zaAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2VtYmVkZGVkL3NldHVwLWpkYmMtZGV2LXRlc3RzLWVtYmVkZGVkLnNoCkBAIC04OSw3ICs4OSw3IEBACiAKICNDcmVhdGUgUG9vbC9SZXNvdXJjZSBmb3IgbGF6eS1jb25uZWN0aW9uLWFzc29jaWF0aW9udGVzdAogZWNobyBDcmVhdGluZyBQb29sL1Jlc291cmNlIExhenkgY29ubmVjdGlvbiBhc3NvY2lhdGlvbiB0ZXN0Ci0uL2Jpbi9hc2FkbWluIGNyZWF0ZS1qZGJjLWNvbm5lY3Rpb24tcG9vbCAtLW1heHdhaXQ9MTAgLS1kYXRhc291cmNlY2xhc3NuYW1lPW9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZENvbm5lY3Rpb25Qb29sRGF0YVNvdXJjZSAtLXJlc3R5cGU9amF2YXguc3FsLkNvbm5lY3Rpb25Qb29sRGF0YVNvdXJjZSAgLS1sYXp5Y29ubmVjdGlvbmVubGlzdG1lbnQ9dHJ1ZSAtLWxhenljb25uZWN0aW9uYXNzb2NpYXRpb249dHJ1ZSAtLXByb3BlcnR5PSJwYXNzd29yZD1BUFA6dXNlcj1BUFA6ZGF0YWJhc2VOYW1lPXN1bi1hcHBzZXJ2LXNhbXBsZXM6Y29ubmVjdGlvbkF0dHJpYnV0ZXM9XDtjcmVhdGVcXD10cnVlIiBqZGJjLWxhenktYXNzb2MtdGVzdC1wb29sIAorLi9iaW4vYXNhZG1pbiBjcmVhdGUtamRiYy1jb25uZWN0aW9uLXBvb2wgLS1tYXh3YWl0PTEwIC0tZGF0YXNvdXJjZWNsYXNzbmFtZT1vcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWRDb25uZWN0aW9uUG9vbERhdGFTb3VyY2UgLS1yZXN0eXBlPWphdmF4LnNxbC5Db25uZWN0aW9uUG9vbERhdGFTb3VyY2UgIC0tbGF6eWNvbm5lY3Rpb25lbmxpc3RtZW50PXRydWUgLS1sYXp5Y29ubmVjdGlvbmFzc29jaWF0aW9uPXRydWUgLS1wcm9wZXJ0eT0icGFzc3dvcmQ9QVBQOnVzZXI9QVBQOmRhdGFiYXNlTmFtZT1zdW4tYXBwc2Vydi1zYW1wbGVzOmNvbm5lY3Rpb25BdHRyaWJ1dGVzPVw7Y3JlYXRlXFw9dHJ1ZSIgamRiYy1sYXp5LWFzc29jLXRlc3QtcG9vbAogLi9iaW4vYXNhZG1pbiBjcmVhdGUtamRiYy1yZXNvdXJjZSAtLWNvbm5lY3Rpb25wb29saWQ9amRiYy1sYXp5LWFzc29jLXRlc3QtcG9vbCBqZGJjL2pkYmMtbGF6eS1hc3NvYy10ZXN0LXJlc291cmNlCiBlY2hvICJcbiIKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9lbWJlZGRlZC9zZXR1cC1qZGJjLXJlY29uZmlnLWRldi10ZXN0c19lbWJlZGRlZC5zaCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvZW1iZWRkZWQvc2V0dXAtamRiYy1yZWNvbmZpZy1kZXYtdGVzdHNfZW1iZWRkZWQuc2gKaW5kZXggZmQwOGIyZi4uODNlN2FiZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9lbWJlZGRlZC9zZXR1cC1qZGJjLXJlY29uZmlnLWRldi10ZXN0c19lbWJlZGRlZC5zaAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2VtYmVkZGVkL3NldHVwLWpkYmMtcmVjb25maWctZGV2LXRlc3RzX2VtYmVkZGVkLnNoCkBAIC01MCw3ICs1MCw3IEBACiBlY2hvIGNyZWF0ZSByZXNvdXJjZSBqZGJjL2pkYmMtcmVjb25maWctdGVzdC1yZXNvdXJjZS0xCiAuL2Jpbi9hc2FkbWluIGNyZWF0ZS1qZGJjLXJlc291cmNlIC0tY29ubmVjdGlvbnBvb2xpZD1qZGJjLXJlY29uZmlnLXRlc3QtcG9vbC0xIGpkYmMvamRiYy1yZWNvbmZpZy10ZXN0LXJlc291cmNlLTEKIAotZWNobyBjcmVhdGUgcG9vbCBqZGJjLXJlY29uZmlnLXRlc3QtcG9vbC0yIAorZWNobyBjcmVhdGUgcG9vbCBqZGJjLXJlY29uZmlnLXRlc3QtcG9vbC0yCiAuL2Jpbi9hc2FkbWluIGNyZWF0ZS1qZGJjLWNvbm5lY3Rpb24tcG9vbCAtLWRhdGFzb3VyY2VjbGFzc25hbWU9b3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkQ29ubmVjdGlvblBvb2xEYXRhU291cmNlIC0tcmVzdHlwZT1qYXZheC5zcWwuQ29ubmVjdGlvblBvb2xEYXRhU291cmNlIC0tcHJvcGVydHk9IlBhc3N3b3JkPXJwYXNzd29yZDpVc2VyPXJ1c2VyOkRhdGFiYXNlTmFtZT0kZGF0YWJhc2VzaG9tZS9yZWNvbmZpZy1kYjpzZXJ2ZXJOYW1lPWxvY2FsaG9zdCIgamRiYy1yZWNvbmZpZy10ZXN0LXBvb2wtMgogCiBlY2hvIGNyZWF0ZSByZXNvdXJjZSBqZGJjL2pkYmMtcmVjb25maWctdGVzdC1yZXNvdXJjZS0yCkBAIC03OSw3ICs3OSw3IEBACiAuL2Jpbi9hc2FkbWluIHNldCByZXNvdXJjZXMuamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1kZXYtdGVzdC1wb29sLm1heC13YWl0LXRpbWUtaW4tbWlsbGlzPTEwMDAKIAogZWNobyAiXG5HRVQgaHR0cDovL2xvY2FsaG9zdDo4MDgwL3YzX2pkYmNfZGV2X3Rlc3RzL1JlY29uZmlnVGVzdFNlcnZsZXQ/bWF4UG9vbFNpemU9NDBcJnRocm93RXhjZXB0aW9uPXRydWVcJnRlc3RJZD0xIFxuIgotR0VUIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC92M19qZGJjX2Rldl90ZXN0cy9SZWNvbmZpZ1Rlc3RTZXJ2bGV0P21heFBvb2xTaXplPTQwXCZ0aHJvd0V4Y2VwdGlvbj10cnVlXCZ0ZXN0SWQ9MSA+ICRyZWNvbmZpZ1Jlc3VsdCAKK0dFVCBodHRwOi8vbG9jYWxob3N0OjgwODAvdjNfamRiY19kZXZfdGVzdHMvUmVjb25maWdUZXN0U2VydmxldD9tYXhQb29sU2l6ZT00MFwmdGhyb3dFeGNlcHRpb249dHJ1ZVwmdGVzdElkPTEgPiAkcmVjb25maWdSZXN1bHQKIGVjaG8gIlxuIgogCiAjYXNhZG1pbiBzZXQgbWF4LXBvb2wtc2l6ZSB0byAxMCBiZWZvcmUgcnVubmluZyB0ZXN0IGZvciB0aGUgc2Vjb25kIHRpbWUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbWF4Y29ubmVjdGlvbnVzYWdlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL21heGNvbm5lY3Rpb251c2FnZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGJkNDk4NjcuLjY4MDAxMDggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbWF4Y29ubmVjdGlvbnVzYWdlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tYXhjb25uZWN0aW9udXNhZ2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTcgKzE1LDE3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJtYXhjb25uZWN0aW9udXNhZ2UiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tYXhjb25uZWN0aW9udXNhZ2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tYXhjb25uZWN0aW9udXNhZ2UvYnVpbGQueG1sCmluZGV4IGJlYTUyNmQuLjYyZDBlOTEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbWF4Y29ubmVjdGlvbnVzYWdlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL21heGNvbm5lY3Rpb251c2FnZS9idWlsZC54bWwKQEAgLTE5LDExICsxOSwxMSBAQAogLS0+CiAKIDwhRU5USVRZIGNvbW1vblNldHVwIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvcHJvcGVydGllcy54bWwiPgotCTwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CisgICAgPCFFTlRJVFkgY29tbW9uQnVpbGQgU1lTVEVNICIuLy4uLy4uLy4uLy4uL2NvbmZpZy9jb21tb24ueG1sIj4KICAgICAgICAgPCFFTlRJVFkgdGVzdHByb3BlcnRpZXMgU1lTVEVNICIuL2J1aWxkLnByb3BlcnRpZXMiPgotCTwhRU5USVRZIHJ1biBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL3J1bi54bWwiPgotCTwhRU5USVRZIGVlU2V0dXAgU1lTVEVNICIuLy4uLy4uL2NvbmZpZy9lZS1jb21tb24ueG1sIj4KLQk8IUVOVElUWSBlZVByb3BlcnRpZXMgU1lTVEVNICIuLy4uLy4uL2NvbmZpZy9lZS1wcm9wZXJ0aWVzLnhtbCI+CisgICAgPCFFTlRJVFkgcnVuIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvcnVuLnhtbCI+CisgICAgPCFFTlRJVFkgZWVTZXR1cCBTWVNURU0gIi4vLi4vLi4vY29uZmlnL2VlLWNvbW1vbi54bWwiPgorICAgIDwhRU5USVRZIGVlUHJvcGVydGllcyBTWVNURU0gIi4vLi4vLi4vY29uZmlnL2VlLXByb3BlcnRpZXMueG1sIj4KICAgICAgICAgXT4KIAogPHByb2plY3QgbmFtZT0ibWl4IiBkZWZhdWx0PSJ1c2FnZSIgYmFzZWRpcj0iLiI+CkBAIC01MSwyOCArNTEsMjggQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotCTxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ0cnVlIi8+CisgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InRydWUiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KLQk8L2FudGNhbGw+CisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KKyAgICA8L2FudGNhbGw+CiAKLQk8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgorICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogCiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAKLSAgICAgICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIAotCSAgICAgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgotCSAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgotCSAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KLQkgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+Ci0JICAgICA8L2ZpbGVzZXQ+Ci0JPC9lYXI+CisgICAgICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIgorICAgICAgICAgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgorICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CisgICAgICAgICA8L2ZpbGVzZXQ+CisgICAgPC9lYXI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtOTMsNyArOTMsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdC0xIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViY2xpZW50LWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tZWpiIChlYXIgYmFzZWQpIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tZWpiIChlYXIgYmFzZWQpIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tYXhjb25uZWN0aW9udXNhZ2UvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL21heGNvbm5lY3Rpb251c2FnZS9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAppbmRleCA4ZDViYWU2Li43ZjI5NzMzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL21heGNvbm5lY3Rpb251c2FnZS9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL21heGNvbm5lY3Rpb251c2FnZS9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbApAQCAtMjgsMTAgKzI4LDEwIEBACiAgICAgICAgIDxlamI+bWF4Y29ubmVjdGlvbnVzYWdlLWVqYi5qYXI8L2VqYj4KICAgICA8L21vZHVsZT4KICAgICA8bW9kdWxlPgotCTx3ZWI+Ci0JICAgIDx3ZWItdXJpPm1heGNvbm5lY3Rpb251c2FnZS13ZWIud2FyPC93ZWItdXJpPgotCSAgICA8Y29udGV4dC1yb290Pm1heGNvbm5lY3Rpb251c2FnZTwvY29udGV4dC1yb290PgotCTwvd2ViPgorICAgIDx3ZWI+CisgICAgICAgIDx3ZWItdXJpPm1heGNvbm5lY3Rpb251c2FnZS13ZWIud2FyPC93ZWItdXJpPgorICAgICAgICA8Y29udGV4dC1yb290Pm1heGNvbm5lY3Rpb251c2FnZTwvY29udGV4dC1yb290PgorICAgIDwvd2ViPgogICAgIDwvbW9kdWxlPgogPC9hcHBsaWNhdGlvbj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tYXhjb25uZWN0aW9udXNhZ2Uvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL21heGNvbm5lY3Rpb251c2FnZS9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQppbmRleCBlMTlmNjRlLi41MDU4OWMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL21heGNvbm5lY3Rpb251c2FnZS9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL21heGNvbm5lY3Rpb251c2FnZS9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQpAQCAtNTcsNyArNTcsNyBAQAogCiAgICAgICAgIGlmIChzaW1wbGVCTVAudGVzdDEoZmFsc2UpKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBNYXggQ29ubmVjdGlvbiBVc2FnZSAtICAobG9jYWwtVHhOb3RTdXBwb3J0ZWQpOiBQQVNTIik7Ci0JICAgIG91dC5wcmludGxuKCJURVNUOlBBU1MiKTsKKyAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgTWF4IENvbm5lY3Rpb24gVXNhZ2UgLSAgKGxvY2FsLVR4Tm90U3VwcG9ydGVkKTogRkFJTCIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6RkFJTCIpOwpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICBib29sZWFuIHN0YXR1cyA9IGNvbm5lY3Rpb25TaGFyaW5nVGVzdChzaW1wbGVCTVAsIHVzZVhBLCAyMTExMik7CiAgICAgICAgIGlmIChzdGF0dXMpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIE1heCBDb25uZWN0aW9uIFVzYWdlIC0gKGxvY2FsLVR4LVNoYXJpbmcpIDogUEFTUyIpOwotCSAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7CisgICAgICAgIG91dC5wcmludGxuKCJURVNUOlBBU1MiKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIE1heCBDb25uZWN0aW9uIFVzYWdlIC0gKGxvY2FsLVR4LVNoYXJpbmcpIDogRkFJTCIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6RkFJTCIpOwpAQCAtNzYsMjAgKzc2LDIwIEBACiAKICAgICAgICAgaWYgKHNpbXBsZUJNUC50ZXN0MSh0cnVlKSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgTWF4IENvbm5lY3Rpb24gVXNhZ2UgLSAgKFhBLVR4Tm90U3VwcG9ydGVkKSA6IFBBU1MiKTsKLQkgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOworICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBNYXggQ29ubmVjdGlvbiBVc2FnZSAtICAoWEEtVHhOb3RTdXBwb3J0ZWQpIDogRkFJTCIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6RkFJTCIpOwogICAgICAgICB9CiAKLQl9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBuZSkgewotCSAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9IGNhdGNoKENyZWF0ZUV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpIHsKKyAgICAgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBjYXRjaChDcmVhdGVFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9IGZpbmFsbHkgewotCSAgICBvdXQucHJpbnRsbigiRU5EX09GX1RFU1QiKTsKLQkgICAgb3V0LmZsdXNoKCk7Ci0JfQorICAgICAgICBvdXQucHJpbnRsbigiRU5EX09GX1RFU1QiKTsKKyAgICAgICAgb3V0LmZsdXNoKCk7CisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiBjb25uZWN0aW9uU2hhcmluZ1Rlc3QoU2ltcGxlQk1QIHNpbXBsZUJNUCwgYm9vbGVhbiB1c2VYQSwgaW50IHZhbHVlKSB7Ly90aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbWF4Y29ubmVjdGlvbnVzYWdlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbWF4Y29ubmVjdGlvbnVzYWdlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCA1MWIwNzM1Li4zOTZjNTY2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL21heGNvbm5lY3Rpb251c2FnZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tYXhjb25uZWN0aW9udXNhZ2Uvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBtYXhfY29ubmVjdGlvbl91c2FnZTsNCi0NCi1DUkVBVEUgVEFCTEUgbWF4X2Nvbm5lY3Rpb25fdXNhZ2UgKA0KLSAgICBpZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIHZhbHVlICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgbWF4X2Nvbm5lY3Rpb25fdXNhZ2U7CisKK0NSRUFURSBUQUJMRSBtYXhfY29ubmVjdGlvbl91c2FnZSAoCisgICAgaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIHZhbHVlICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbWF4Y29ubmVjdGlvbnVzYWdlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL21heGNvbm5lY3Rpb251c2FnZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDRlNTc3YTMuLmIzYzhiOTcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbWF4Y29ubmVjdGlvbnVzYWdlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tYXhjb25uZWN0aW9udXNhZ2Uvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBtYXhfY29ubmVjdGlvbl91c2FnZTsNCitEcm9wIHRhYmxlIG1heF9jb25uZWN0aW9uX3VzYWdlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tdWx0aXBsZXVzZXJjcmVkZW50aWFscy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tdWx0aXBsZXVzZXJjcmVkZW50aWFscy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDAzZTAwOTQuLjEzMmMyYzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL211bHRpcGxldXNlcmNyZWRlbnRpYWxzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1tdWx0aXBsZXVzZXJjcmVkZW50aWFscyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii9qZGJjLW11bHRpcGxldXNlcmNyZWRlbnRpYWxzL3NlcnZsZXQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tdWx0aXBsZXVzZXJjcmVkZW50aWFscy9idWlsZC54bWwKaW5kZXggMzQ0ZGQ5OC4uY2NlYjQyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tdWx0aXBsZXVzZXJjcmVkZW50aWFscy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tdWx0aXBsZXVzZXJjcmVkZW50aWFscy9idWlsZC54bWwKQEAgLTE5LDEzICsxOSwxMyBAQAogLS0+CiAKIDwhRU5USVRZIGNvbW1vblNldHVwIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvcHJvcGVydGllcy54bWwiPgotCTwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CisgICAgPCFFTlRJVFkgY29tbW9uQnVpbGQgU1lTVEVNICIuLy4uLy4uLy4uLy4uL2NvbmZpZy9jb21tb24ueG1sIj4KICAgICAgICAgPCFFTlRJVFkgdGVzdHByb3BlcnRpZXMgU1lTVEVNICIuL2J1aWxkLnByb3BlcnRpZXMiPgotCTwhRU5USVRZIHJ1biBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL3J1bi54bWwiPgotCTwhRU5USVRZIGpkYmNDb21tb24gU1lTVEVNICIuLy4uLy4uL0pkYmNDb21tb24ueG1sIj4KLQk8IUVOVElUWSBqZGJjQ29tbW9uUHJvcHMgU1lTVEVNICAiLi8uLi8uLi9KZGJjQ29tbW9uLnByb3BlcnRpZXMiPgotCTwhRU5USVRZIGVlU2V0dXAgU1lTVEVNICIuLy4uLy4uL2NvbmZpZy9lZS1jb21tb24ueG1sIj4KLQk8IUVOVElUWSBlZVByb3BlcnRpZXMgU1lTVEVNICIuLy4uLy4uL2NvbmZpZy9lZS1wcm9wZXJ0aWVzLnhtbCI+CisgICAgPCFFTlRJVFkgcnVuIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvcnVuLnhtbCI+CisgICAgPCFFTlRJVFkgamRiY0NvbW1vbiBTWVNURU0gIi4vLi4vLi4vSmRiY0NvbW1vbi54bWwiPgorICAgIDwhRU5USVRZIGpkYmNDb21tb25Qcm9wcyBTWVNURU0gICIuLy4uLy4uL0pkYmNDb21tb24ucHJvcGVydGllcyI+CisgICAgPCFFTlRJVFkgZWVTZXR1cCBTWVNURU0gIi4vLi4vLi4vY29uZmlnL2VlLWNvbW1vbi54bWwiPgorICAgIDwhRU5USVRZIGVlUHJvcGVydGllcyBTWVNURU0gIi4vLi4vLi4vY29uZmlnL2VlLXByb3BlcnRpZXMueG1sIj4KICAgICAgICAgXT4KIAogPHByb2plY3QgbmFtZT0ibWl4IiBkZWZhdWx0PSJ1c2FnZSIgYmFzZWRpcj0iLiI+CkBAIC01NywxMiArNTcsMTIgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKLQkJICAgIHZhbHVlPSIqKi9lamIvKi5jbGFzcyIvPgorICAgICAgICAgICAgdmFsdWU9IioqL2VqYi8qLmNsYXNzIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCi0JCSAgICB2YWx1ZT0iKiovY2xpZW50LyouY2xhc3MiLz4KLQkgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIgotCQkgICAgdmFsdWU9IioqL3NlcnZsZXQvKi5jbGFzcyIvPgotCSAgICA8cGFyYW0gIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InRydWUiLz4KKyAgICAgICAgICAgIHZhbHVlPSIqKi9jbGllbnQvKi5jbGFzcyIvPgorICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiCisgICAgICAgICAgICB2YWx1ZT0iKiovc2VydmxldC8qLmNsYXNzIi8+CisgICAgICAgIDxwYXJhbSAgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0idHJ1ZSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXZhYwogICAgICAgICAgIHNyY2Rpcj0iLiIKQEAgLTEyMSw3ICsxMjEsNyBAQAogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iLz4KLQk8ZGVsZXRlIGZpbGU9ImNsaWVudC9XZWJUZXN0LmNsYXNzIi8+CisgICAgPGRlbGV0ZSBmaWxlPSJjbGllbnQvV2ViVGVzdC5jbGFzcyIvPgogCiAgICAgPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL211bHRpcGxldXNlcmNyZWRlbnRpYWxzL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCmluZGV4IDg0ZTkyMDMuLmFiMzI3Y2IgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tdWx0aXBsZXVzZXJjcmVkZW50aWFscy9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbApAQCAtMjgsOSArMjgsOSBAQAogICAgICAgICA8ZWpiPmpkYmMtbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMtZWpiLmphcjwvZWpiPgogICAgIDwvbW9kdWxlPgogICAgIDxtb2R1bGU+Ci0JPHdlYj4KLQkgICAgPHdlYi11cmk+amRiYy1tdWx0aXBsZXVzZXJjcmVkZW50aWFscy13ZWIud2FyPC93ZWItdXJpPgotCSAgICA8Y29udGV4dC1yb290PmpkYmMtbXVsdGlwbGV1c2VyY3JlZGVudGlhbHM8L2NvbnRleHQtcm9vdD4KKyAgICA8d2ViPgorICAgICAgICA8d2ViLXVyaT5qZGJjLW11bHRpcGxldXNlcmNyZWRlbnRpYWxzLXdlYi53YXI8L3dlYi11cmk+CisgICAgICAgIDxjb250ZXh0LXJvb3Q+amRiYy1tdWx0aXBsZXVzZXJjcmVkZW50aWFsczwvY29udGV4dC1yb290PgogICAgICAgICA8L3dlYj4KICAgICA8L21vZHVsZT4KIDwvYXBwbGljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL211bHRpcGxldXNlcmNyZWRlbnRpYWxzL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tdWx0aXBsZXVzZXJjcmVkZW50aWFscy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQppbmRleCA2NDEyMGJhLi45OTgzNzljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL211bHRpcGxldXNlcmNyZWRlbnRpYWxzL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKQEAgLTY5LDIwICs2OSwyMCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmKHBhc3NlZCl7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXVsdGlwbGUgVXNlciBjcmVkZW50aWFscyB0ZXN0IDogdGVzdDEgOiBQQVNTIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXVsdGlwbGUgVXNlciBjcmVkZW50aWFscyB0ZXN0IDogdGVzdDEgOiBQQVNTIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7Ci0JfSBlbHNlIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJNdWx0aXBsZSBVc2VyIGNyZWRlbnRpYWxzIHRlc3QgOiB0ZXN0MSA6IEZBSUwiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk11bHRpcGxlIFVzZXIgY3JlZGVudGlhbHMgdGVzdCA6IHRlc3QxIDogRkFJTCIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6RkFJTCIpOwotCX0KKyAgICB9CiAKLQl9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBuZSkgewotCSAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9IGNhdGNoKENyZWF0ZUV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpIHsKKyAgICAgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBjYXRjaChDcmVhdGVFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9IGZpbmFsbHkgewotCSAgICBvdXQucHJpbnRsbigiRU5EX09GX1RFU1QiKTsKLQkgICAgb3V0LmZsdXNoKCk7Ci0JfQorICAgICAgICBvdXQucHJpbnRsbigiRU5EX09GX1RFU1QiKTsKKyAgICAgICAgb3V0LmZsdXNoKCk7CisgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tdWx0aXBsZXVzZXJjcmVkZW50aWFscy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggODcwNzNjYS4uYTcxZGQ4YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tdWx0aXBsZXVzZXJjcmVkZW50aWFscy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tdWx0aXBsZXVzZXJjcmVkZW50aWFscy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsOCArMSw4IEBACi1DQUxMIFNZU0NTX1VUSUwuU1lTQ1NfU0VUX0RBVEFCQVNFX1BST1BFUlRZKA0KLSAgICAnZGVyYnkudXNlci5kZXJieScsDQotICAgICdkZXJieScpICAgICAgOw0KLQ0KLUNBTEwgU1lTQ1NfVVRJTC5TWVNDU19TRVRfREFUQUJBU0VfUFJPUEVSVFkoDQotICAgICAgICAnZGVyYnkudXNlci5qYXZhZGInLA0KLSAgICAgICAgJ2phdmFkYicpICAgICA7DQotDQorQ0FMTCBTWVNDU19VVElMLlNZU0NTX1NFVF9EQVRBQkFTRV9QUk9QRVJUWSgKKyAgICAnZGVyYnkudXNlci5kZXJieScsCisgICAgJ2RlcmJ5JykgICAgICA7CisKK0NBTEwgU1lTQ1NfVVRJTC5TWVNDU19TRVRfREFUQUJBU0VfUFJPUEVSVFkoCisgICAgICAgICdkZXJieS51c2VyLmphdmFkYicsCisgICAgICAgICdqYXZhZGInKSAgICAgOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL29zZ2ktamRiYy10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9vc2dpamRiY190ZXN0L0pEQkNBY3RpdmF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvb3NnaS1qZGJjLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL29zZ2lqZGJjX3Rlc3QvSkRCQ0FjdGl2YXRvci5qYXZhCmluZGV4IDA0M2ZiY2IuLjI0NTk0MGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvb3NnaS1qZGJjLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL29zZ2lqZGJjX3Rlc3QvSkRCQ0FjdGl2YXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvb3NnaS1qZGJjLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL29zZ2lqZGJjX3Rlc3QvSkRCQ0FjdGl2YXRvci5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgcHJpdmF0ZSB2b2lkIHRlc3QoKXsKIAogICAgICAgICB0ZXN0SmRiY1Jlc291cmNlcyhudWxsKTsKLSAgICAgICAgCisKICAgICAgICAgdGVzdEpkYmNSZXNvdXJjZXMoIihvc2dpLmpkYmMuZHJpdmVyLmNsYXNzPW9yYWNsZS5qZGJjLnBvb2wuT3JhY2xlRGF0YVNvdXJjZSkiKTsKICAgICAgICAgdGVzdEpkYmNSZXNvdXJjZXMoIihvc2dpLmpkYmMuZHJpdmVyLmNsYXNzPW9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZFhBRGF0YVNvdXJjZSkiKTsKICAgICAgICAgdGVzdEpkYmNSZXNvdXJjZXMoIihvc2dpLmpkYmMuZHJpdmVyLmNsYXNzPW9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREYXRhU291cmNlKSIpOwpAQCAtNTksNyArNTksNyBAQAogCiAgICAgICAgIHRlc3RKZGJjUmVzb3VyY2VzKCIoJihqbmRpLW5hbWU9amRiYy9vcmFjbGVfdHlwZTRfcmVzb3VyY2UpKG9zZ2kuamRiYy5kcml2ZXIuY2xhc3M9b3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERhdGFTb3VyY2UpKSIpOwogCi0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3RKZGJjUmVzb3VyY2VzKFN0cmluZyBmaWx0ZXIpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMTIwZGEzNS4uZjliMjA5ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0icmVzRW5hYmxlRGlzYWJsZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJwb29sbmFtZSIgdmFsdWU9ImpkYmMtcmVzRW5hYmxlRGlzYWJsZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9idWlsZC54bWwKaW5kZXggYTFmZDk2Yy4uNGYwNjU1MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3Jlc0VuYWJsZURpc2FibGUvYnVpbGQueG1sCkBAIC01MSwxMiArNTEsMTIgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKLQkJICAgIHZhbHVlPSIqKi9lamIvKi5jbGFzcyIvPgorICAgICAgICAgICAgdmFsdWU9IioqL2VqYi8qLmNsYXNzIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCi0JCSAgICB2YWx1ZT0iKiovY2xpZW50LyouY2xhc3MiLz4KLQkgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIgotCQkgICAgdmFsdWU9IioqL3NlcnZsZXQvKi5jbGFzcyIvPgotCSAgICA8cGFyYW0gIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InRydWUiLz4KKyAgICAgICAgICAgIHZhbHVlPSIqKi9jbGllbnQvKi5jbGFzcyIvPgorICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiCisgICAgICAgICAgICB2YWx1ZT0iKiovc2VydmxldC8qLmNsYXNzIi8+CisgICAgICAgIDxwYXJhbSAgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0idHJ1ZSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXZhYwogICAgICAgICAgIHNyY2Rpcj0iLiIKQEAgLTg1LDggKzg1LDggQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXN0dWZmIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLQk8ZGVsZXRlIGZpbGU9ImNsaWVudC9XZWJUZXN0LmNsYXNzIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KKyAgICA8ZGVsZXRlIGZpbGU9ImNsaWVudC9XZWJUZXN0LmNsYXNzIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KQEAgLTEyNCw4ICsxMjQsOCBAQAogICAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9Ii8+Ci0JICAgIDxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9Ii8+Ci0JICAgIDxhcmcgdmFsdWU9IiR7VEVTVC5GQUlMfSIvPgorICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIvPgorICAgICAgICA8YXJnIHZhbHVlPSIke1RFU1QuRkFJTH0iLz4KICAgICAgICAgICAgIDxjbGFzc3BhdGg+CiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIvPgogICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iLiIvPgpAQCAtMTM5LDggKzEzOSw4IEBACiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LldlYlRlc3QiPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iLz4KLQkgICAgPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iLz4KLQkgICAgPGFyZyB2YWx1ZT0iJHtURVNULlBBU1N9Ii8+CisgICAgICAgIDxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9Ii8+CisgICAgICAgIDxhcmcgdmFsdWU9IiR7VEVTVC5QQVNTfSIvPgogICAgICAgICAgICAgPGNsYXNzcGF0aD4KICAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIi8+CiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIuIi8+CkBAIC0xNDksMTMgKzE0OSwxMyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKLQkJICAgIHZhbHVlPSJzZXJ2ZXJzLnNlcnZlci5zZXJ2ZXIucmVzb3VyY2UtcmVmLiR7cmVzb3VyY2VuYW1lfS5lbmFibGVkPWZhbHNlIi8+CisgICAgICAgICAgICB2YWx1ZT0ic2VydmVycy5zZXJ2ZXIuc2VydmVyLnJlc291cmNlLXJlZi4ke3Jlc291cmNlbmFtZX0uZW5hYmxlZD1mYWxzZSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LldlYlRlc3QiPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iLz4KLQkgICAgPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iLz4KLQkgICAgPGFyZyB2YWx1ZT0iJHtURVNULkZBSUx9Ii8+CisgICAgICAgIDxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9Ii8+CisgICAgICAgIDxhcmcgdmFsdWU9IiR7VEVTVC5GQUlMfSIvPgogICAgICAgICAgICAgPGNsYXNzcGF0aD4KICAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIi8+CiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIuIi8+CkBAIC0xNjQsMTMgKzE2NCwxMyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKLQkJICAgIHZhbHVlPSJzZXJ2ZXJzLnNlcnZlci5zZXJ2ZXIucmVzb3VyY2UtcmVmLiR7cmVzb3VyY2VuYW1lfS5lbmFibGVkPXRydWUiLz4KKyAgICAgICAgICAgIHZhbHVlPSJzZXJ2ZXJzLnNlcnZlci5zZXJ2ZXIucmVzb3VyY2UtcmVmLiR7cmVzb3VyY2VuYW1lfS5lbmFibGVkPXRydWUiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9Ii8+Ci0JICAgIDxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9Ii8+Ci0JICAgIDxhcmcgdmFsdWU9IiR7VEVTVC5QQVNTfSIvPgorICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIvPgorICAgICAgICA8YXJnIHZhbHVlPSIke1RFU1QuUEFTU30iLz4KICAgICAgICAgICAgIDxjbGFzc3BhdGg+CiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIvPgogICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iLiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL2NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3Jlc0VuYWJsZURpc2FibGUvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCBmZGZkZjNmLi42MmZlYzVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3Jlc0VuYWJsZURpc2FibGUvY2xpZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3Jlc0VuYWJsZURpc2FibGUvY2xpZW50L1dlYlRlc3QuamF2YQpAQCAtNDMsOCArNDMsOCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZ29HZXQoU3RyaW5nIGhvc3QsIGludCBwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCwgU3RyaW5nIGNvbnRleHRQYXRoLCAKLQkJCSAgICAgIFN0cmluZyB0ZXN0U3RhdHVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0LCBTdHJpbmcgY29udGV4dFBhdGgsCisgICAgICAgICAgICAgICAgICBTdHJpbmcgdGVzdFN0YXR1cykgewogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBsb25nIHRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKQEAgLTc1LDEyICs3NSwxMiBAQAogICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmVxdWFsc0lnbm9yZUNhc2UoIlBBU1MiKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotCQkJaWYoIkZBSUwiLmVxdWFsc0lnbm9yZUNhc2UodGVzdFN0YXR1cykpIHsKLQkJICAgICAgICAgICAgLy9UZXN0IGlzIHN1cHBvc2VkIHRvIGZhaWwgaGVuY2UgcGFzc2VkCi0JCSAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKLQkJCX0gZWxzZSB7CisgICAgICAgICAgICBpZigiRkFJTCIuZXF1YWxzSWdub3JlQ2FzZSh0ZXN0U3RhdHVzKSkgeworICAgICAgICAgICAgICAgICAgICAvL1Rlc3QgaXMgc3VwcG9zZWQgdG8gZmFpbCBoZW5jZSBwYXNzZWQKKyAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOworICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7Ci0JCQl9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggMjdiYmJiZi4uNzhkZTFhMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTMxLDE2ICszMSwxNiBAQAogICAgICAgICAgICAgPGVqYi1uYW1lPlNpbXBsZUJNUEVKQjwvZWpiLW5hbWU+CiAgICAgICAgICAgICA8bG9jYWwtaG9tZT5jb20uc3VuLnMxYXNkZXYuamRiYy5yZXNlbmFibGVkaXNhYmxlLmVqYi5TaW1wbGVCTVBIb21lPC9sb2NhbC1ob21lPgogICAgICAgICAgICAgPGxvY2FsPmNvbS5zdW4uczFhc2Rldi5qZGJjLnJlc2VuYWJsZWRpc2FibGUuZWpiLlNpbXBsZUJNUDwvbG9jYWw+Ci0JICAgIDxlamItY2xhc3M+Y29tLnN1bi5zMWFzZGV2LmpkYmMucmVzZW5hYmxlZGlzYWJsZS5lamIuU2ltcGxlQk1QQmVhbjwvZWpiLWNsYXNzPgotCSAgICA8c2Vzc2lvbi10eXBlPlN0YXRlbGVzczwvc2Vzc2lvbi10eXBlPgotCSAgICA8dHJhbnNhY3Rpb24tdHlwZT5Db250YWluZXI8L3RyYW5zYWN0aW9uLXR5cGU+Ci0JICAgIDwhLS08cGVyc2lzdGVuY2UtdHlwZT5CZWFuPC9wZXJzaXN0ZW5jZS10eXBlPgorICAgICAgICA8ZWpiLWNsYXNzPmNvbS5zdW4uczFhc2Rldi5qZGJjLnJlc2VuYWJsZWRpc2FibGUuZWpiLlNpbXBsZUJNUEJlYW48L2VqYi1jbGFzcz4KKyAgICAgICAgPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT4KKyAgICAgICAgPHRyYW5zYWN0aW9uLXR5cGU+Q29udGFpbmVyPC90cmFuc2FjdGlvbi10eXBlPgorICAgICAgICA8IS0tPHBlcnNpc3RlbmNlLXR5cGU+QmVhbjwvcGVyc2lzdGVuY2UtdHlwZT4KICAgICAgICAgICAgIDxwcmltLWtleS1jbGFzcz5qYXZhLmxhbmcuSW50ZWdlcjwvcHJpbS1rZXktY2xhc3M+CiAgICAgICAgICAgICA8cmVlbnRyYW50PkZhbHNlPC9yZWVudHJhbnQ+CiAgICAgICAgICAgICA8c2VjdXJpdHktaWRlbnRpdHk+CiAgICAgICAgICAgICAgICAgPGRlc2NyaXB0aW9uPjwvZGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgPHVzZS1jYWxsZXItaWRlbnRpdHk+PC91c2UtY2FsbGVyLWlkZW50aXR5PgotCTwvc2VjdXJpdHktaWRlbnRpdHk+LS0+CisgICAgPC9zZWN1cml0eS1pZGVudGl0eT4tLT4KICAgICAgICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgICAgICAgICAgPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgICAgICAgICAgPHJlcy10eXBlPmphdmF4LnNxbC5EYXRhU291cmNlPC9yZXMtdHlwZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggOTBhODZhMS4uMGI4MzFjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKICAgICBwcml2YXRlIHRyYW5zaWVudCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dCBtX2N0eCA9IG51bGw7CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBjb250ZXh0KSB7Ci0JbV9jdHggPSBjb250ZXh0OworICAgIG1fY3R4ID0gY29udGV4dDsKICAgICB9CiAKICAgICBwdWJsaWMgSW50ZWdlciBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKQEAgLTM2LDcgKzM2LDcgQEAKICAgICB9CiAKIAotICAgCisKIC8qIEdldCBhIHNpbmdsZSBjb25uZWN0aW9uIGFuZCBjbG9zZSBpdCAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgewogICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwpAQCAtNTcsMTQgKzU3LDE0IEBACiAgICAgICAgICAgICAvL2UucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgfSBmaW5hbGx5IHsKLQkgICAgaWYoY29ubiAhPSBudWxsKSB7CisgICAgICAgIGlmKGNvbm4gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHRyeSB7Ci0JCSAgICBjb25uLmNsb3NlKCk7Ci0JCX0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBpbiBjbG9zaW5nIGNvbm5lY3Rpb24iKTsKLQkJfQorICAgICAgICAgICAgY29ubi5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gaW4gY2xvc2luZyBjb25uZWN0aW9uIik7CisgICAgICAgIH0KICAgICAgICAgICAgIH0KLQl9CisgICAgfQogICAgICAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCmluZGV4IGY2N2RlNWIuLjczODIyMWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3Jlc0VuYWJsZURpc2FibGUvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKQEAgLTU2LDIwICs1NiwyMCBAQAogICAgICAgICAvL3N0YXQuYWRkRGVzY3JpcHRpb24oIlJ1bm5pbmcgc2VyaWFsaXphYmxlIGNvbm5lY3RvciB0ZXN0ICIpOwogICAgICAgICBTaW1wbGVCTVAgYmVhbiA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKCk7CiAKLQkgICAgZm9yKGludCBpPTA7IGk8MzsgaSsrKXsKKyAgICAgICAgZm9yKGludCBpPTA7IGk8MzsgaSsrKXsKICAgICAgICAgICAgICAgICBpZighYmVhbi50ZXN0MSgpKXsKICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6RkFJTCIpOwotCSAgICAgICAgICAgIGJyZWFrOwotCSAgICAgICAgfQotCSAgICB9Ci0JICAgIG91dC5wcmludGxuKCJURVNUOlBBU1MiKTsKLQl9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBuZSkgewotCSAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9IGNhdGNoKENyZWF0ZUV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOworICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKSB7CisgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gY2F0Y2goQ3JlYXRlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfSBmaW5hbGx5IHsKLQkgICAgb3V0LnByaW50bG4oIkVORF9PRl9URVNUIik7Ci0JICAgIG91dC5mbHVzaCgpOwotCX0KKyAgICAgICAgb3V0LnByaW50bG4oIkVORF9PRl9URVNUIik7CisgICAgICAgIG91dC5mbHVzaCgpOworICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3Jlc0VuYWJsZURpc2FibGUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBlNDkxNGY2Li5mMjU2MDc2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3Jlc0VuYWJsZURpc2FibGUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggZTQ5MTRmNi4uZjI1NjA3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvc2V0dXAtamRiYy1kZXYtdGVzdHMuc2ggYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3NldHVwLWpkYmMtZGV2LXRlc3RzLnNoCmluZGV4IDU3MjYyNDEuLmJhOWQ1MjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvc2V0dXAtamRiYy1kZXYtdGVzdHMuc2gKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9zZXR1cC1qZGJjLWRldi10ZXN0cy5zaApAQCAtOTIsNyArOTIsNyBAQAogCiAjQ3JlYXRlIFBvb2wvUmVzb3VyY2UgZm9yIGxhenktY29ubmVjdGlvbi1hc3NvY2lhdGlvbnRlc3QKIGVjaG8gQ3JlYXRpbmcgUG9vbC9SZXNvdXJjZSBMYXp5IGNvbm5lY3Rpb24gYXNzb2NpYXRpb24gdGVzdAotLi9iaW4vYXNhZG1pbiBjcmVhdGUtamRiYy1jb25uZWN0aW9uLXBvb2wgLS1tYXh3YWl0PTEwIC0tZGF0YXNvdXJjZWNsYXNzbmFtZT1vcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWRDb25uZWN0aW9uUG9vbERhdGFTb3VyY2UgLS1yZXN0eXBlPWphdmF4LnNxbC5Db25uZWN0aW9uUG9vbERhdGFTb3VyY2UgIC0tbGF6eWNvbm5lY3Rpb25lbmxpc3RtZW50PXRydWUgLS1sYXp5Y29ubmVjdGlvbmFzc29jaWF0aW9uPXRydWUgLS1wcm9wZXJ0eT0icGFzc3dvcmQ9QVBQOnVzZXI9QVBQOmRhdGFiYXNlTmFtZT1zdW4tYXBwc2Vydi1zYW1wbGVzOmNvbm5lY3Rpb25BdHRyaWJ1dGVzPVw7Y3JlYXRlXFw9dHJ1ZSIgamRiYy1sYXp5LWFzc29jLXRlc3QtcG9vbCAKKy4vYmluL2FzYWRtaW4gY3JlYXRlLWpkYmMtY29ubmVjdGlvbi1wb29sIC0tbWF4d2FpdD0xMCAtLWRhdGFzb3VyY2VjbGFzc25hbWU9b3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkQ29ubmVjdGlvblBvb2xEYXRhU291cmNlIC0tcmVzdHlwZT1qYXZheC5zcWwuQ29ubmVjdGlvblBvb2xEYXRhU291cmNlICAtLWxhenljb25uZWN0aW9uZW5saXN0bWVudD10cnVlIC0tbGF6eWNvbm5lY3Rpb25hc3NvY2lhdGlvbj10cnVlIC0tcHJvcGVydHk9InBhc3N3b3JkPUFQUDp1c2VyPUFQUDpkYXRhYmFzZU5hbWU9c3VuLWFwcHNlcnYtc2FtcGxlczpjb25uZWN0aW9uQXR0cmlidXRlcz1cO2NyZWF0ZVxcPXRydWUiIGpkYmMtbGF6eS1hc3NvYy10ZXN0LXBvb2wKIC4vYmluL2FzYWRtaW4gY3JlYXRlLWpkYmMtcmVzb3VyY2UgLS1jb25uZWN0aW9ucG9vbGlkPWpkYmMtbGF6eS1hc3NvYy10ZXN0LXBvb2wgamRiYy9qZGJjLWxhenktYXNzb2MtdGVzdC1yZXNvdXJjZQogZWNobyAiXG4iCiAKQEAgLTE1MCw3ICsxNTAsNyBAQAogLi9iaW4vYXNhZG1pbiBzdGFydC1kb21haW4KIGVjaG8gIlxuIgogCi1zbGVlcCA1IAorc2xlZXAgNQogd2dldCBodHRwOi8vbG9jYWxob3N0OjgwODAvdjNfamRiY19kZXZfdGVzdHMvVGVzdFJlc3VsdFNlcnZsZXQgLU8gJHRlc3RSZXN1bHQxCiB3Z2V0IGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC92M19qZGJjX2Rldl90ZXN0cy9UZXN0UmVzdWx0U2VydmxldD90ZXN0TmFtZT1sYXp5LWFzc29jIC1PICR0ZXN0UmVzdWx0MgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3NldHVwLWpkYmMtcmVjb25maWctZGV2LXRlc3RzLnNoIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9zZXR1cC1qZGJjLXJlY29uZmlnLWRldi10ZXN0cy5zaAppbmRleCA4OWY0NzRmLi4zZDJjZDQ3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3NldHVwLWpkYmMtcmVjb25maWctZGV2LXRlc3RzLnNoCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvc2V0dXAtamRiYy1yZWNvbmZpZy1kZXYtdGVzdHMuc2gKQEAgLTMzLDcgKzMzLDcgQEAKIGNkICR2M2hvbWUKIGVjaG8gIlN0YXJ0aW5nIGRvbWFpbi4uLiIKIC4vYmluL2FzYWRtaW4gc3RhcnQtZG9tYWluCi1zbGVlcCAxMCAKK3NsZWVwIDEwCiBlY2hvICJcbiIKIAogZWNobyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIgpAQCAtNTIsNyArNTIsNyBAQAogZWNobyBjcmVhdGUgcmVzb3VyY2UgamRiYy9qZGJjLXJlY29uZmlnLXRlc3QtcmVzb3VyY2UtMQogLi9iaW4vYXNhZG1pbiBjcmVhdGUtamRiYy1yZXNvdXJjZSAtLWNvbm5lY3Rpb25wb29saWQ9amRiYy1yZWNvbmZpZy10ZXN0LXBvb2wtMSBqZGJjL2pkYmMtcmVjb25maWctdGVzdC1yZXNvdXJjZS0xCiAKLWVjaG8gY3JlYXRlIHBvb2wgamRiYy1yZWNvbmZpZy10ZXN0LXBvb2wtMiAKK2VjaG8gY3JlYXRlIHBvb2wgamRiYy1yZWNvbmZpZy10ZXN0LXBvb2wtMgogLi9iaW4vYXNhZG1pbiBjcmVhdGUtamRiYy1jb25uZWN0aW9uLXBvb2wgLS1kYXRhc291cmNlY2xhc3NuYW1lPW9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZENvbm5lY3Rpb25Qb29sRGF0YVNvdXJjZSAtLXJlc3R5cGU9amF2YXguc3FsLkNvbm5lY3Rpb25Qb29sRGF0YVNvdXJjZSAtLXByb3BlcnR5PSJQYXNzd29yZD1ycGFzc3dvcmQ6VXNlcj1ydXNlcjpEYXRhYmFzZU5hbWU9JGRhdGFiYXNlc2hvbWUvcmVjb25maWctZGI6c2VydmVyTmFtZT1sb2NhbGhvc3QiIGpkYmMtcmVjb25maWctdGVzdC1wb29sLTIKIAogZWNobyBjcmVhdGUgcmVzb3VyY2UgamRiYy9qZGJjLXJlY29uZmlnLXRlc3QtcmVzb3VyY2UtMgpAQCAtODEsNyArODEsNyBAQAogLi9iaW4vYXNhZG1pbiBzZXQgcmVzb3VyY2VzLmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtZGV2LXRlc3QtcG9vbC5tYXgtd2FpdC10aW1lLWluLW1pbGxpcz0xMDAwCiAKIGVjaG8gIlxuR0VUIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC92M19qZGJjX2Rldl90ZXN0cy9SZWNvbmZpZ1Rlc3RTZXJ2bGV0P21heFBvb2xTaXplPTQwXCZ0aHJvd0V4Y2VwdGlvbj10cnVlXCZ0ZXN0SWQ9MSBcbiIKLUdFVCBodHRwOi8vbG9jYWxob3N0OjgwODAvdjNfamRiY19kZXZfdGVzdHMvUmVjb25maWdUZXN0U2VydmxldD9tYXhQb29sU2l6ZT00MFwmdGhyb3dFeGNlcHRpb249dHJ1ZVwmdGVzdElkPTEgPiAkcmVjb25maWdSZXN1bHQgCitHRVQgaHR0cDovL2xvY2FsaG9zdDo4MDgwL3YzX2pkYmNfZGV2X3Rlc3RzL1JlY29uZmlnVGVzdFNlcnZsZXQ/bWF4UG9vbFNpemU9NDBcJnRocm93RXhjZXB0aW9uPXRydWVcJnRlc3RJZD0xID4gJHJlY29uZmlnUmVzdWx0CiBlY2hvICJcbiIKIAogI2FzYWRtaW4gc2V0IG1heC1wb29sLXNpemUgdG8gMTAgYmVmb3JlIHJ1bm5pbmcgdGVzdCBmb3IgdGhlIHNlY29uZCB0aW1lCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3N0YXRlbWVudHRpbWVvdXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvc3RhdGVtZW50dGltZW91dC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDM0ZWI5NjYuLjRhNmEyN2EgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvc3RhdGVtZW50dGltZW91dC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvc3RhdGVtZW50dGltZW91dC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNyArMTUsMTcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtc3RhdGVtZW50dGltZW91dCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3N0YXRlbWVudHRpbWVvdXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9zdGF0ZW1lbnR0aW1lb3V0L2J1aWxkLnhtbAppbmRleCBmY2M1OGU4Li5lOWNkZjZjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3N0YXRlbWVudHRpbWVvdXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvc3RhdGVtZW50dGltZW91dC9idWlsZC54bWwKQEAgLTE5LDExICsxOSwxMSBAQAogLS0+CiAKIDwhRU5USVRZIGNvbW1vblNldHVwIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvcHJvcGVydGllcy54bWwiPgotCTwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CisgICAgPCFFTlRJVFkgY29tbW9uQnVpbGQgU1lTVEVNICIuLy4uLy4uLy4uLy4uL2NvbmZpZy9jb21tb24ueG1sIj4KICAgICAgICAgPCFFTlRJVFkgdGVzdHByb3BlcnRpZXMgU1lTVEVNICIuL2J1aWxkLnByb3BlcnRpZXMiPgotCTwhRU5USVRZIHJ1biBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL3J1bi54bWwiPgotCTwhRU5USVRZIGVlU2V0dXAgU1lTVEVNICIuLy4uLy4uL2NvbmZpZy9lZS1jb21tb24ueG1sIj4KLQk8IUVOVElUWSBlZVByb3BlcnRpZXMgU1lTVEVNICIuLy4uLy4uL2NvbmZpZy9lZS1wcm9wZXJ0aWVzLnhtbCI+CisgICAgPCFFTlRJVFkgcnVuIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvcnVuLnhtbCI+CisgICAgPCFFTlRJVFkgZWVTZXR1cCBTWVNURU0gIi4vLi4vLi4vY29uZmlnL2VlLWNvbW1vbi54bWwiPgorICAgIDwhRU5USVRZIGVlUHJvcGVydGllcyBTWVNURU0gIi4vLi4vLi4vY29uZmlnL2VlLXByb3BlcnRpZXMueG1sIj4KICAgICAgICAgXT4KIAogPHByb2plY3QgbmFtZT0ibWl4IiBkZWZhdWx0PSJ1c2FnZSIgYmFzZWRpcj0iLiI+CkBAIC01NiwyOCArNTYsMjggQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotCTxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ0cnVlIi8+CisgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InRydWUiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KLQk8L2FudGNhbGw+CisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KKyAgICA8L2FudGNhbGw+CiAKLQk8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgorICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogCiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAKLSAgICAgICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIAotCSAgICAgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgotCSAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgotCSAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KLQkgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+Ci0JICAgICA8L2ZpbGVzZXQ+Ci0JPC9lYXI+CisgICAgICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIgorICAgICAgICAgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgorICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CisgICAgICAgICA8L2ZpbGVzZXQ+CisgICAgPC9lYXI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtOTIsNyArOTIsNyBAQAogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wucWwtamRiYy1wb29sLnN0YXRlbWVudF90aW1lb3V0X2luX3NlY29uZHM9MzAiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JPCEtLTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXBlcnNpc3RlbmNlLXJlc291cmNlLWNvbW1vbiIvPi0tPgorICAgIDwhLS08YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZS1jb21tb24iLz4tLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTEwNSw4ICsxMDUsOCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdC0xIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViY2xpZW50LWNvbW1vbiI+Ci0gIAkgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9IndlYi10by1lamIgKGVhciBiYXNlZCkiLz4KLQk8L2FudGNhbGw+CisgICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9IndlYi10by1lamIgKGVhciBiYXNlZCkiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JPCEtLTxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXBlcnNpc3RlbmNlLXJlc291cmNlLWNvbW1vbiIvPi0tPgorICAgIDwhLS08YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZS1jb21tb24iLz4tLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9zdGF0ZW1lbnR0aW1lb3V0L3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9zdGF0ZW1lbnR0aW1lb3V0L3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCmluZGV4IDY5ZjExNzEuLmQ4MDdlNDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvc3RhdGVtZW50dGltZW91dC9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3N0YXRlbWVudHRpbWVvdXQvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKQEAgLTU2LDM2ICs1NiwzNiBAQAogICAgICAgICBTaW1wbGVCTVAgc2ltcGxlQk1QID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoKTsKIAogICAgICAgICBpZiAoc2ltcGxlQk1QLnN0YXRlbWVudFRlc3QoKSkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBUaW1lb3V0IHRlc3QgOiBzdGF0ZW1lbnRUZXN0IDogUEFTUyIpOwotCSAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IFRpbWVvdXQgdGVzdCA6IHN0YXRlbWVudFRlc3QgOiBQQVNTIik7CisgICAgICAgIG91dC5wcmludGxuKCJURVNUOlBBU1MiKTsKICAgICAgICAgfSBlbHNlIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgVGltZW91dCB0ZXN0IDogc3RhdGVtZW50VGVzdCA6IEZBSUwiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgVGltZW91dCB0ZXN0IDogc3RhdGVtZW50VGVzdCA6IEZBSUwiKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOkZBSUwiKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChzaW1wbGVCTVAucHJlcGFyZWRTdGF0ZW1lbnRUZXN0KCkpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgVGltZW91dCB0ZXN0IDogcHJlcGFyZWRTdGF0ZW1lbnRUZXN0IDogUEFTUyIpOwotCSAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IFRpbWVvdXQgdGVzdCA6IHByZXBhcmVkU3RhdGVtZW50VGVzdCA6IFBBU1MiKTsKKyAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOwogICAgICAgICB9IGVsc2UgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBUaW1lb3V0IHRlc3QgOiBwcmVwYXJlZFN0YXRlbWVudFRlc3QgOiBGQUlMIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IFRpbWVvdXQgdGVzdCA6IHByZXBhcmVkU3RhdGVtZW50VGVzdCA6IEZBSUwiKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOkZBSUwiKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChzaW1wbGVCTVAuY2FsbGFibGVTdGF0ZW1lbnRUZXN0KCkpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgVGltZW91dCB0ZXN0IDogY2FsbGFibGVTdGF0ZW1lbnRUZXN0IDogUEFTUyIpOwotCSAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IFRpbWVvdXQgdGVzdCA6IGNhbGxhYmxlU3RhdGVtZW50VGVzdCA6IFBBU1MiKTsKKyAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOwogICAgICAgICB9IGVsc2UgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBUaW1lb3V0IHRlc3QgOiBjYWxsYWJsZVN0YXRlbWVudFRlc3QgOiBGQUlMIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IFRpbWVvdXQgdGVzdCA6IGNhbGxhYmxlU3RhdGVtZW50VGVzdCA6IEZBSUwiKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOkZBSUwiKTsKICAgICAgICAgfQogCi0JfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpIHsKLQkgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSBjYXRjaChDcmVhdGVFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKSB7CisgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gY2F0Y2goQ3JlYXRlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfSBmaW5hbGx5IHsKLQkgICAgb3V0LnByaW50bG4oIkVORF9PRl9URVNUIik7Ci0JICAgIG91dC5mbHVzaCgpOwotCX0KKyAgICAgICAgb3V0LnByaW50bG4oIkVORF9PRl9URVNUIik7CisgICAgICAgIG91dC5mbHVzaCgpOworICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3N0YXRlbWVudHRpbWVvdXQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9zdGF0ZW1lbnR0aW1lb3V0L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBkZDRjNWU1Li4xMWU2MWVlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3N0YXRlbWVudHRpbWVvdXQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvc3RhdGVtZW50dGltZW91dC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsMTAgKzEsMTAgQEAKLQ0KLURyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOw0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIgVkFMVUVTKDEsICd3eHl6Jyk7DQorCitEcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIgVkFMVUVTKDEsICd3eHl6Jyk7CiBJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIgVkFMVUVTKDIsICdwcXJzJyk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My91bnNldHVwLWpkYmMtZGV2LXRlc3RzLnNoIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My91bnNldHVwLWpkYmMtZGV2LXRlc3RzLnNoCmluZGV4IDM2NTljMjYuLjQ3MjdiMGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdW5zZXR1cC1qZGJjLWRldi10ZXN0cy5zaAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3Vuc2V0dXAtamRiYy1kZXYtdGVzdHMuc2gKQEAgLTIwLDcgKzIwLDcgQEAKIGNkICR2M2hvbWUKIAogZWNobyBTdGFydGluZyB0aGUgZG9tYWluIC4uLgotLi9iaW4vYXNhZG1pbiBzdGFydC1kb21haW4gCisuL2Jpbi9hc2FkbWluIHN0YXJ0LWRvbWFpbgogCiBlY2hvIHVuZGVwbG95aW5nIGFwcGxpY2F0aW9uIC4uLi4uCiAuL2Jpbi9hc2FkbWluIHVuZGVwbG95IHYzX2pkYmNfZGV2X3Rlc3RzCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvYnVpbGQueG1sCmluZGV4IGQ2MWRkNGEuLjNiNDMwOTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvYnVpbGQueG1sCkBAIC0yNSwyNyArMjUsMjcgQEAKICAgICA8aW1wb3J0IGZpbGU9Im5icHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDwhLS0KIAotICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlIAotICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkIAotICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOiAKKyAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZQorICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkCisgICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6CiAKLSAgICAgIC1wcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgLXBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIC1wcmUtY29tcGlsZTogICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gCi0gICAgICAtcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gCisgICAgICAtcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgLXBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgLXByZS1jb21waWxlOiAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbgorICAgICAgLXBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICAtcHJlLWNvbXBpbGUtc2luZ2xlOiAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBmaWxlCiAgICAgICAtcG9zdC1jb21waWxlLXNpbmdsZTogICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIGZpbGUKICAgICAgIC1wcmUtY29tcGlsZS10ZXN0OiAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2YgSlVuaXQgdGVzdHMKICAgICAgIC1wb3N0LWNvbXBpbGUtdGVzdDogICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBKVW5pdCB0ZXN0cwogICAgICAgLXByZS1jb21waWxlLXRlc3Qtc2luZ2xlOiAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgSlVuaXQgdGVzdAogICAgICAgLXBvc3QtY29tcGlsZS10ZXN0LXNpbmdsZTogY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBKVXVuaXQgdGVzdAotICAgICAgLXByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBhcmNoaXZlIGJ1aWxkaW5nIAotICAgICAgLXBvc3QtZGlzdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGFyY2hpdmUgYnVpbGRpbmcgCi0gICAgICAtcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMgCisgICAgICAtcHJlLWRpc3Q6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGFyY2hpdmUgYnVpbGRpbmcKKyAgICAgIC1wb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBhcmNoaXZlIGJ1aWxkaW5nCisgICAgICAtcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMKICAgICAgIC1wcmUtcnVuLWRlcGxveTogICAgICAgICAgIGNhbGxlZCBiZWZvcmUgZGVwbG95aW5nCiAgICAgICAtcG9zdC1ydW4tZGVwbG95OiAgICAgICAgICBjYWxsZWQgYWZ0ZXIgZGVwbG95aW5nCiAKLSAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlIAorICAgIEV4YW1wbGUgb2YgcGx1Z2luZyBhbiBvYmZ1c2NhdG9yIGFmdGVyIHRoZSBjb21waWxhdGlvbiBjb3VsZCBsb29rIGxpa2UKIAogICAgICAgICA8dGFyZ2V0IG5hbWU9Ii1wb3N0LWNvbXBpbGUiPgogICAgICAgICAgICAgPG9iZnVzY2F0ZT4KQEAgLTUzLDIxICs1MywyMSBAQAogICAgICAgICAgICAgPC9vYmZ1c2NhdGU+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQKKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogCiAgICAgT3RoZXIgd2F5IGhvdyB0byBjdXN0b21pemUgdGhlIGJ1aWxkIGlzIGJ5IG92ZXJyaWRpbmcgZXhpc3RpbmcgbWFpbiB0YXJnZXRzLgotICAgIFRoZSB0YXJnZXQgb2YgaW50ZXJlc3QgYXJlOiAKKyAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZToKIAogICAgICAgaW5pdC1tYWNyb2RlZi1qYXZhYzogICAgZGVmaW5lcyBtYWNybyBmb3IgamF2YWMgY29tcGlsYXRpb24KICAgICAgIGluaXQtbWFjcm9kZWYtanVuaXQ6ICAgZGVmaW5lcyBtYWNybyBmb3IganVuaXQgZXhlY3V0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWRlYnVnOiAgICBkZWZpbmVzIG1hY3JvIGZvciBjbGFzcyBkZWJ1Z2dpbmcKICAgICAgIGRvLWRpc3Q6ICAgICAgICAgICAgICAgIGFyY2hpdmUgYnVpbGRpbmcKLSAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0IAotICAgICAgamF2YWRvYy1idWlsZDogICAgICAgICAgamF2YWRvYyBnZW5lcmF0aW9uIAorICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHByb2plY3QKKyAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbgogCi0gICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgdGhlIHRhcmdldCBmb3IgcHJvamVjdCBleGVjdXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9IjxQUk9KTkFNRT4taW1wbC5qYXIiPgogICAgICAgICAgICAgPGV4ZWMgZGlyPSJiaW4iIGV4ZWN1dGFibGU9ImxhdW5jaGVyLmV4ZSI+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgICAgIDwvZXhlYz4KICAgICAgICAgPC90YXJnZXQ+CiAKLSAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uIAotICAgIGNvbXBpbGUgdGFyZ2V0IGFzIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGxpc3Qgb2YgYXZhaWxhYmxlIAotICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4gCi0gICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuIAorICAgIE5vdGljZSB0aGF0IG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gamFyIHRhcmdldCBhbmQgbm90IG9ubHkgb24KKyAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZQorICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4KKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogICAgIC0tPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9uYnByb2plY3QvYW50LWRlcGxveS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL25icHJvamVjdC9hbnQtZGVwbG95LnhtbAppbmRleCBhYmM1ZDNjLi43MGM4YTc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL25icHJvamVjdC9hbnQtZGVwbG95LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL25icHJvamVjdC9hbnQtZGVwbG95LnhtbApAQCAtMjUsNyArMjUsNyBAQAogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJzanNhcyIgcHJvcGVydHk9InNqc2FzLnBhc3N3b3JkLmZpbGUiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+ICA8IS0tIGRvIG5vdCBmb3JnZXQgdG8gZGVsZXRlIHRoaXMhIC0tPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJBU19BRE1JTl9QQVNTV09SRD0ke3Nqc2FzLnBhc3N3b3JkfSIgZmlsZT0iJHtzanNhcy5wYXNzd29yZC5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSItcGFyc2Utc3VuLXdlYiIgZGVwZW5kcz0iLWluaXQtY2wtZGVwbG95bWVudC1lbnYiIGlmPSJzdW4ud2ViLnByZXNlbnQiPgogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJzanNhcyIgcHJvcGVydHk9InRlbXAuc3VuLndlYiIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHtkZXBsb3kuYW50LmRvY2Jhc2UuZGlyfS9XRUItSU5GL3N1bi13ZWIueG1sIiB0b2ZpbGU9IiR7dGVtcC5zdW4ud2VifSIvPgpAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPHJlcGxhY2V2YWx1ZT48IVtDREFUQVstLT4gPHN1bi13ZWItYXBwXV0+PC9yZXBsYWNldmFsdWU+CiAgICAgICAgIDwvcmVwbGFjZT4KICAgICAgICAgPHhtbHByb3BlcnR5IGZpbGU9IiR7dGVtcC5zdW4ud2VifSIgdmFsaWRhdGU9ImZhbHNlIj4KLSAgICAgICAgPC94bWxwcm9wZXJ0eT4gICAgCisgICAgICAgIDwveG1scHJvcGVydHk+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3kuYW50LmNsaWVudC51cmwiIHZhbHVlPSIke3Nqc2FzLnVybH0ke3N1bi13ZWItYXBwLmNvbnRleHQtcm9vdH0iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKaW5kZXggZWJjMGRlNS4uMzFlMGU5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKQEAgLTY4Niw3ICs2ODYsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxqYXZhZG9jLWJ1aWxkLGphdmFkb2MtYnJvd3NlIiBkZXNjcmlwdGlvbj0iQnVpbGQgSmF2YWRvYy4iIG5hbWU9ImphdmFkb2MiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBDT01QSUxBVElPTiBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZSIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1wcmUtcHJlLWNvbXBpbGUtdGVzdCI+CkBAIC03MjgsNyArNzI4LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZSwtcHJlLXByZS1jb21waWxlLXRlc3QsLXByZS1jb21waWxlLXRlc3Qtc2luZ2xlLC1kby1jb21waWxlLXRlc3Qtc2luZ2xlLC1wb3N0LWNvbXBpbGUtdGVzdC1zaW5nbGUiIG5hbWU9ImNvbXBpbGUtdGVzdC1zaW5nbGUiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBFWEVDVVRJT04gU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0IiBpZj0iaGF2ZS50ZXN0cyIgbmFtZT0iLXByZS10ZXN0LXJ1biI+CkBAIC03NTUsNyArNzU1LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZS10ZXN0LXNpbmdsZSwtcHJlLXRlc3QtcnVuLXNpbmdsZSwtZG8tdGVzdC1ydW4tc2luZ2xlLC1wb3N0LXRlc3QtcnVuLXNpbmdsZSIgZGVzY3JpcHRpb249IlJ1biBzaW5nbGUgdW5pdCB0ZXN0LiIgbmFtZT0idGVzdC1zaW5nbGUiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBERUJVR0dJTkcgU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUtdGVzdCIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1kZWJ1Zy1zdGFydC1kZWJ1Z2dlZS10ZXN0Ij4KQEAgLTc4MSw3ICs3ODEsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCwtcHJlLWRlYnVnLWZpeCwtZG8tZGVidWctZml4LXRlc3QiIGlmPSJuZXRiZWFucy5ob21lIiBuYW1lPSJkZWJ1Zy1maXgtdGVzdCIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIENMRUFOVVAgU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0IiBpZj0ibm8uZGlzdC5lYXIuZGlyIiBuYW1lPSJkZXBzLWNsZWFuIiB1bmxlc3M9Im5vLmRlcHMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL1Rlc3RSZXN1bHRTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My9UZXN0UmVzdWx0U2VydmxldC5qYXZhCmluZGV4IDllOTI0MDYuLjlmODdmZTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL1Rlc3RSZXN1bHRTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvVGVzdFJlc3VsdFNlcnZsZXQuamF2YQpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIjx0ZD4iKTsKICAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChlbnRyeS5nZXRWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZCgiPC90ZD48L3RyPiIpOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy9SdW4gQXBwbGljYXRpb24gQXV0aGVudGljYXRpb24gVGVzdAogICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IG1hcEFwcEF1dGggPQpAQCAtMTcyLDcgKzE3Miw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIjx0ZD4iKTsKICAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChlbnRyeS5nZXRWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZCgiPC90ZD48L3RyPiIpOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogCiAKICAgICAgICAgICAgICAgICAvL1J1biBTaW1wbGVYQURTIHRlc3QKQEAgLTE5OCw3ICsxOTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChlbnRyeS5nZXRWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIjwvdGQ+PC90cj4iKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgIC8vT3JkZXIgb2YgdGVzdCBpcyBpbXBvcnRhbnQgOiBsYXp5IGVubGlzdCBoYXMgdG8gYmUgYmVmb3JlIGNvbm5lY3Rpb24gbGVhayB0cmFjaW5nCiAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgQm9vbGVhbj4gbWFwRG91YmxlUmVzb3VyY2VSZWZlcmVuY2UgPQpAQCAtMzYzLDcgKzM2Myw3IEBACiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTM3Myw3ICszNzMsNyBAQAogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIFJldHVybnMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgc2VydmxldC4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNlcnZsZXRJbmZvKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9BcHBsaWNhdGlvbkF1dGhUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L0FwcGxpY2F0aW9uQXV0aFRlc3QuamF2YQppbmRleCAxN2I3MmFlLi41ZDc0NWJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L0FwcGxpY2F0aW9uQXV0aFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L0FwcGxpY2F0aW9uQXV0aFRlc3QuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogCiAvKioKICAqIFRlc3RzIEFwcGxpY2F0aW9uIEF1dGhlbnRpY2F0aW9uCi0gKiAKKyAqCiAgKiBAYXV0aG9yIHNoYWxpbmkKICAqLwogcHVibGljIGNsYXNzIEFwcGxpY2F0aW9uQXV0aFRlc3QgaW1wbGVtZW50cyBTaW1wbGVUZXN0IHsKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHJlc3VsdHNNYXAucHV0KCJhcHAtYXV0aC13cm9uZy1jcmVkZW50aWFscyIsIGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKHRlc3RUd2ljZVdpdGhDcmVkZW50aWFscyhkcywgb3V0KSkgewogICAgICAgICAgICAgICAgIHJlc3VsdHNNYXAucHV0KCJhcHAtYXV0aC10d2ljZS13aXRoLWNyZWRlbnRpYWxzIiwgdHJ1ZSk7CkBAIC05MCwxMiArOTAsMTIgQEAKICAgICAgICAgfQogCiAgICAgICAgIEh0bWxVdGlsLnByaW50SFIob3V0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdHNNYXA7ICAgICAgICAgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0c01hcDsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBUZXN0cyBhcHBsaWNhdGlvbiBhdXRoZW50aWNhdGlvbiBieSBlbnN1cmluZyB0aGF0IGNvbm5lY3Rpb24gd2l0aCAKLSAgICAgKiB0aGUgc2FtZSB1c2VybmFtZSBpcyByZXR1cm5lZCB3aGVuIGdvdCBmcm9tIDIgZGlmZmVyZW50IGNyZWRlbnRpYWxzIC0gCisgICAgICogVGVzdHMgYXBwbGljYXRpb24gYXV0aGVudGljYXRpb24gYnkgZW5zdXJpbmcgdGhhdCBjb25uZWN0aW9uIHdpdGgKKyAgICAgKiB0aGUgc2FtZSB1c2VybmFtZSBpcyByZXR1cm5lZCB3aGVuIGdvdCBmcm9tIDIgZGlmZmVyZW50IGNyZWRlbnRpYWxzIC0KICAgICAgKiBmaXJzdCBvbmUgYmVpbmcgdGhlIHJpZ2h0IG9uZS4KICAgICAgKiBAcGFyYW0gZHMKICAgICAgKiBAcGFyYW0gb3V0CkBAIC0xMjIsNyArMTIyLDcgQEAKICAgICAgICAgICAgICAgICBIdG1sVXRpbC5wcmludEV4Y2VwdGlvbihleCwgb3V0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj4gR2V0dGluZyB0aGUgTm9uVHggQ29ubmVjdGlvbiBmb3IgXCJBUFBcIiAuLi4iKTsKICAgICAgICAgICAgICAgICBjb25uMiA9ICgoY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSlkcykuZ2V0Tm9uVHhDb25uZWN0aW9uKApAQCAtMTMxLDcgKzEzMSw3IEBACiAgICAgICAgICAgICAgICAgaWYgKGNvbm4yLmdldE1ldGFEYXRhKCkuZ2V0VXNlck5hbWUoKS5lcXVhbHMoIkFQUCIpKSB7CiAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+IFVzZXJOYW1lIG1hdGNoZXMgdGhlIHJpZ2h0IGNyZWRlbnRpYWxzIik7CiAgICAgICAgICAgICAgICAgICAgIHBhc3NlZDIgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4MikgewogICAgICAgICAgICAgICAgIEh0bWxVdGlsLnByaW50RXhjZXB0aW9uKGV4Miwgb3V0KTsKICAgICAgICAgICAgIH0KQEAgLTE1MCwxMSArMTUwLDExIEBACiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CiAgICAgICAgICAgICAgICAgICAgIEh0bWxVdGlsLnByaW50RXhjZXB0aW9uKGUxLCBvdXQpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXN1bHQgPSBwYXNzZWQxICYmIHBhc3NlZDI7CiAgICAgICAgIG91dC5wcmludGxuKCI8YnI+IFRlc3QgcmVzdWx0IDogIiArIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7ICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICAvKioKQEAgLTIzNCw3ICsyMzQsNyBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIFRlc3RzIGFwcGxpY2F0aW9uIGF1dGhlbnRpY2F0aW9uIHdoZW4gcmlnaHQgdXNlcm5hbWUvcGFzc3dvcmQgYXJlIAorICAgICAqIFRlc3RzIGFwcGxpY2F0aW9uIGF1dGhlbnRpY2F0aW9uIHdoZW4gcmlnaHQgdXNlcm5hbWUvcGFzc3dvcmQgYXJlCiAgICAgICogc3BlY2lmaWVkLgogICAgICAqIEBwYXJhbSBkcwogICAgICAqIEBwYXJhbSBvdXQKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvQXNzb2NXaXRoVGhyZWFkVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9Bc3NvY1dpdGhUaHJlYWRUZXN0LmphdmEKaW5kZXggYTMwMjU2ZS4uZTBmNjdiZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9Bc3NvY1dpdGhUaHJlYWRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9Bc3NvY1dpdGhUaHJlYWRUZXN0LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAqLwogcHVibGljIGNsYXNzIEFzc29jV2l0aFRocmVhZFRlc3QgaW1wbGVtZW50cyBTaW1wbGVUZXN0ewogCi0gICAgCisKICAgICAgICAgTWFwPFN0cmluZywgQm9vbGVhbj4gcmVzdWx0c01hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgQm9vbGVhbj4oKTsKIAogICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBCb29sZWFuPiBydW5UZXN0KERhdGFTb3VyY2UgZHMxLCBQcmludFdyaXRlciBvdXQpIHsKQEAgLTUzLDEwICs1MywxMCBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHRzTWFwOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiB0ZXN0QXNzb2NXaXRoVGhyZWFkKERhdGFTb3VyY2UgZHMxLCBQcmludFdyaXRlciBvdXQpIHRocm93cyBTeXN0ZW1FeGNlcHRpb24gewogCi0gICAgICAgIAorCiAgICAgICAgIEh0bWxVdGlsLnByaW50SFIob3V0KTsKICAgICAgICAgb3V0LnByaW50bG4oIjxoND4gQXNzb2Mtd2l0aC10aHJlYWQgdGVzdCA8L2g0PiIpOwogCkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICB9CiAKLSAgICAKKwogICAgICBwcml2YXRlIFN0cmluZyB0ZXN0MShEYXRhU291cmNlIGRzMSwgUHJpbnRXcml0ZXIgb3V0KSB0aHJvd3MgU3lzdGVtRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7CiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvQ29ubmVjdGlvbkxlYWtUcmFjaW5nVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9Db25uZWN0aW9uTGVha1RyYWNpbmdUZXN0LmphdmEKaW5kZXggM2Y2ZjI5NC4uMDc5YThkYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9Db25uZWN0aW9uTGVha1RyYWNpbmdUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9Db25uZWN0aW9uTGVha1RyYWNpbmdUZXN0LmphdmEKQEAgLTI4LDIzICsyOCwyMyBAQAogCiAvKioKICAqIFRlc3RzIENvbm5lY3Rpb24gTGVhayB0cmFjaW5nLyBMZWFrIHJlY2xhaW0uCi0gKiAKLSAqIEFzc3VtZXMgdGhhdCBzdGVhZHktcG9vbC1zaXplPTEsIG1heC1wb29sLXNpemU9MSwgCisgKgorICogQXNzdW1lcyB0aGF0IHN0ZWFkeS1wb29sLXNpemU9MSwgbWF4LXBvb2wtc2l6ZT0xLAogICogY29ubmVjdGlvbi1sZWFrLXRpbWVvdXQtaW4tc2Vjb25kcyA9IDEwLCBjb25uZWN0aW9uLWxlYWstcmVjbGFpbSA9IHRydWUKICAqIGF0dHJpYnV0ZXMgYXJlIHNldCBpbiB0aGUgcG9vbCBjb25maWd1cmF0aW9uLgogICogQGF1dGhvciBzaGFsaW5pCiAgKi8KIHB1YmxpYyBjbGFzcyBDb25uZWN0aW9uTGVha1RyYWNpbmdUZXN0IGltcGxlbWVudHMgU2ltcGxlVGVzdCB7CiAKLSAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiByZXN1bHRzTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBCb29sZWFuPigpOyAgICAKLSAgICAKKyAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiByZXN1bHRzTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBCb29sZWFuPigpOworCiAgICAgcHVibGljIE1hcDxTdHJpbmcsIEJvb2xlYW4+IHJ1blRlc3QoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0KSB7CiAgICAgICAgIC8vY3JlYXRlIENVU1RPTUVSIHRhYmxlIG5lZWRlZCBmb3IgdGhpcyB0ZXN0CiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUgPSAiQ1VTVE9NRVIiOwogICAgICAgICBjcmVhdGVUYWJsZXMoZHMsIG91dCwgdGFibGVOYW1lKTsKLSAgICAgICAgCisKICAgICAgICAgb3V0LnByaW50bG4oIjxoND4gQ29ubmVjdGlvbiBMZWFrIFRyYWNpbmcgVGVzdCA8L2g0PiIpOwotICAgICAgICAKKwogICAgICAgICBmb3IoaW50IGk9MDsgaTwzOyBpKyspIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj4gVHJpYWwgIiArIGkpOwpAQCAtNjMsMTUgKzYzLDE1IEBACiAgICAgICAgIH0KICAgICAgICAgb3V0LnByaW50bG4oIjxicj4gVGVzdCByZXN1bHQgOiB0cnVlIik7CiAgICAgICAgIHJlc3VsdHNNYXAucHV0KCJjb25uLWxlYWstdHJhY2luZy10ZXN0MSIsIHRydWUpOwotICAgICAgICAKKwogICAgICAgICAvL0RlbGV0ZSB0aGUgQ1VTVE9NRVIgdGFibGUgY3JlYXRlZC4KICAgICAgICAgVGFibGVzVXRpbC5kZWxldGVUYWJsZXMoZHMsIG91dCwgdGFibGVOYW1lKTsKLSAgICAgICAgCisKICAgICAgICAgSHRtbFV0aWwucHJpbnRIUihvdXQpOwogICAgICAgICByZXR1cm4gcmVzdWx0c01hcDsKICAgICB9CiAKLSAgICBwcml2YXRlIGJvb2xlYW4gY29ubkxlYWtUcmFjaW5nVGVzdDEoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0LCAKKyAgICBwcml2YXRlIGJvb2xlYW4gY29ubkxlYWtUcmFjaW5nVGVzdDEoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0LAogICAgICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSkgewogICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwogICAgICAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CkBAIC0xMTYsNyArMTE2LDcgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgSHRtbFV0aWwucHJpbnRFeGNlcHRpb24oZSwgb3V0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAgICAgCisgICAgICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZW1wdHlUYWJsZShDb25uZWN0aW9uIGNvbm4sIFN0cmluZyB0YWJsZU5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJJTlNFUlQgaW50byAiICsgdGFibGVOYW1lICsKICAgICAgICAgICAgICAgICAiICB2YWx1ZXMgKDEsICdhYmNkJykiKTsKLSAgICAgICAgc3RtdC5jbG9zZSgpOyAgICAgICAgCisgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvQ29ubmVjdGlvblNoYXJpbmdUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L0Nvbm5lY3Rpb25TaGFyaW5nVGVzdC5qYXZhCmluZGV4IGNhZjNmOWQuLmMzZDU0MjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvQ29ubmVjdGlvblNoYXJpbmdUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9Db25uZWN0aW9uU2hhcmluZ1Rlc3QuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogICovCiBwdWJsaWMgY2xhc3MgQ29ubmVjdGlvblNoYXJpbmdUZXN0IGltcGxlbWVudHMgU2ltcGxlVGVzdHsKIAotICAgIAorCiAgICAgTWFwPFN0cmluZywgQm9vbGVhbj4gcmVzdWx0c01hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgQm9vbGVhbj4oKTsKIAogICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBCb29sZWFuPiBydW5UZXN0KERhdGFTb3VyY2UgZHMxLCBQcmludFdyaXRlciBvdXQpIHsKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgcmV0dXJuIHJlc3VsdHNNYXA7CiAgICAgfQogCi0gICAgCisKICAgICAgcHJpdmF0ZSBib29sZWFuIHRlc3RDb25uZWN0aW9uU2hhcmluZyhEYXRhU291cmNlIGRzMSwgUHJpbnRXcml0ZXIgb3V0KSB0aHJvd3MgU3lzdGVtRXhjZXB0aW9uIHsKICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIEh0bWxVdGlsLnByaW50RXhjZXB0aW9uKGUsIG91dCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj4gVGVzdCByZXN1bHQgOiAiICsgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvQ29udGFpbmVyQXV0aFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvQ29udGFpbmVyQXV0aFRlc3QuamF2YQppbmRleCA0MWYwMGUwLi5lOTJkMDhkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L0NvbnRhaW5lckF1dGhUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9Db250YWluZXJBdXRoVGVzdC5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiBwdWJsaWMgY2xhc3MgQ29udGFpbmVyQXV0aFRlc3QgaW1wbGVtZW50cyBTaW1wbGVUZXN0IHsKIAogICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IHJlc3VsdHNNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+KCk7Ci0gICAgCisKICAgICBwdWJsaWMgTWFwPFN0cmluZywgQm9vbGVhbj4gcnVuVGVzdChEYXRhU291cmNlIGRzLCBQcmludFdyaXRlciBvdXQpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmICh0ZXN0Q29udEF1dGhVc2VyUGFzcyhkcywgb3V0KSkgewpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgSHRtbFV0aWwucHJpbnRIUihvdXQpOwotICAgICAgICByZXR1cm4gcmVzdWx0c01hcDsgICAgICAgICAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1bHRzTWFwOwogICAgIH0KIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9MYXp5Q29ubmVjdGlvbkFzc29jaWF0aW9uVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9MYXp5Q29ubmVjdGlvbkFzc29jaWF0aW9uVGVzdC5qYXZhCmluZGV4IDI5Zjc4NDcuLjE0Y2NjMTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvTGF6eUNvbm5lY3Rpb25Bc3NvY2lhdGlvblRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L0xhenlDb25uZWN0aW9uQXNzb2NpYXRpb25UZXN0LmphdmEKQEAgLTU0LDkgKzU0LDkgQEAKICAgICAgKiBAcGFyYW0gaQogICAgICAqIEBwYXJhbSBkcwogICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBhY3F1aXJlQ29ubmVjdGlvbnMoaW50IGNvdW50LCBEYXRhU291cmNlIGRzLCBQcmludFdyaXRlciBvdXQpIAorICAgIHByaXZhdGUgdm9pZCBhY3F1aXJlQ29ubmVjdGlvbnMoaW50IGNvdW50LCBEYXRhU291cmNlIGRzLCBQcmludFdyaXRlciBvdXQpCiAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICAgICAgZm9yKGludCBpPTA7IGk8Y291bnQgOyBpKyspewogICAgICAgICAgICAgICAgIGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvTGVha1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvTGVha1Rlc3QuamF2YQppbmRleCBjZDQ2MWZiLi44ZTJhYzJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L0xlYWtUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9MZWFrVGVzdC5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBMZWFrVGVzdCBpbXBsZW1lbnRzIFNpbXBsZVRlc3R7CiAKLSAgICAKKwogICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IHJlc3VsdHNNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+KCk7CiAKICAgICBwdWJsaWMgTWFwPFN0cmluZywgQm9vbGVhbj4gcnVuVGVzdChEYXRhU291cmNlIGRzMSwgUHJpbnRXcml0ZXIgb3V0KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L01hcmtDb25uZWN0aW9uQXNCYWRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L01hcmtDb25uZWN0aW9uQXNCYWRUZXN0LmphdmEKaW5kZXggYTFhNmE2Yy4uNWRmNTFlMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9NYXJrQ29ubmVjdGlvbkFzQmFkVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvTWFya0Nvbm5lY3Rpb25Bc0JhZFRlc3QuamF2YQpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBjb25uW2ldID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgICAgIHBoeXNpY2FsQ29ubmVjdGlvbnMuYWRkKGRzMS5nZXRDb25uZWN0aW9uKGNvbm5baV0pKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBIdG1sVXRpbC5wcmludEV4Y2VwdGlvbihlLCBvdXQpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwpAQCAtMTM2LDcgKzEzNiw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGNvbm5baV0gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICAgICAgcGh5c2ljYWxDb25uZWN0aW9ucy5hZGQoZHMxLmdldENvbm5lY3Rpb24oY29ubltpXSkpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIEh0bWxVdGlsLnByaW50RXhjZXB0aW9uKGUsIG91dCk7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L01heENvbm5lY3Rpb25Vc2FnZVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvTWF4Q29ubmVjdGlvblVzYWdlVGVzdC5qYXZhCmluZGV4IDIyYmQyZDcuLjczOTJhY2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvTWF4Q29ubmVjdGlvblVzYWdlVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvTWF4Q29ubmVjdGlvblVzYWdlVGVzdC5qYXZhCkBAIC0yNywxOSArMjcsMTkgQEAKIGltcG9ydCBvcmcuZ2xhc3NmaXNoLmpkYmMuZGV2dGVzdHMudjMudXRpbC5UYWJsZXNVdGlsOwogCiAvKioKLSAqIERldnRlc3QgdG8gdGVzdCBpZiBhcHBsaWNhdGlvbiBzZXJ2ZXIgcmVtb3ZlcyBhIGNvbm5lY3Rpb24gZnJvbSBwb29sIAorICogRGV2dGVzdCB0byB0ZXN0IGlmIGFwcGxpY2F0aW9uIHNlcnZlciByZW1vdmVzIGEgY29ubmVjdGlvbiBmcm9tIHBvb2wKICAqIGFmdGVyIHVzaW5nIGl0IGZvciAibWF4Y29ubmVjdGlvbnVzYWdlIiB0aW1lcy4KLSAqIAotICogQXNzdW1lcyB0aGF0IHN0ZWFkeS1wb29sLXNpemUgPSAxLCBtYXgtcG9vbC1zaXplID0gMSwgCisgKgorICogQXNzdW1lcyB0aGF0IHN0ZWFkeS1wb29sLXNpemUgPSAxLCBtYXgtcG9vbC1zaXplID0gMSwKICAqIG1heC1jb25uZWN0aW9uLXVzYWdlLWNvdW50ID0gMTAgYXR0cmlidXRlcyBhcmUgc2V0IG9uIHRoZSBwb29sLgotICogCisgKgogICogQGF1dGhvciBzaGFsaW5pCiAgKi8KIHB1YmxpYyBjbGFzcyBNYXhDb25uZWN0aW9uVXNhZ2VUZXN0IGltcGxlbWVudHMgU2ltcGxlVGVzdCB7CiAgICAgTWFwPFN0cmluZywgQm9vbGVhbj4gcmVzdWx0c01hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgQm9vbGVhbj4oKTsKLSAgICAKKwogICAgIC8qKgotICAgICAqIFRlc3RzIG1heC1jb25uZWN0aW9uLXVzYWdlIGFzc3VtaW5nIHBvb2wgc2l6ZSA9IDEgYW5kIAorICAgICAqIFRlc3RzIG1heC1jb25uZWN0aW9uLXVzYWdlIGFzc3VtaW5nIHBvb2wgc2l6ZSA9IDEgYW5kCiAgICAgICogRGF0YVNvdXJjZSBpcyBvZiB0eXBlIDogamF2YXguc3FsLkRhdGFTb3VyY2UKICAgICAgKiBAcGFyYW0gZHMKICAgICAgKiBAcGFyYW0gb3V0CkBAIC02NywyNyArNjcsMjcgQEAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHJlc3VsdHNNYXAucHV0KCJtYXgtY29ubi11c2FnZS1jb25uZWN0aW9uLXNoYXJpbmctdGVzdCIsIGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBUYWJsZXNVdGlsLmRlbGV0ZVRhYmxlcyhkcywgb3V0LCB0YWJsZU5hbWUpOwogICAgICAgICBIdG1sVXRpbC5wcmludEhSKG91dCk7Ci0gICAgICAgIHJldHVybiByZXN1bHRzTWFwOyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0c01hcDsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBBc3N1bWluZyBwb29sIGhhcyBvbmx5IG9uZSBjb25uZWN0aW9uLCBjYWxsaW5nIG1heENvbm5Vc2FnZVRlc3QyKC4uLikgYW5kCiAgICAgICogbWF4Q29ublVzYWdlVGVzdDMoLi4uKSA1IHRpbWVzIGVhY2ggd2lsbCBlbnN1cmUgdGhhdCAibWF4Y29ubmVjdGlvbnN1c2FnZT0xMCIKLSAgICAgKiBpcyBtZXQuICAKKyAgICAgKiBpcyBtZXQuCiAgICAgICogRnVydGhlciBjYWxsIHRvIG1heENvbm5Vc2FnZVRlc3QyKC4uLikgd2lsbCByZXR1cm4gYSBkaWZmZXJlbnQgY29ubmVjdGlvbgotICAgICAqIAorICAgICAqCiAgICAgICogSWYgdGhleSBhcmUgZGlmZmVyZW50LCBjb25uZWN0aW9uIHdhcyBkcm9wcGVkIGFuZCBjcmVhdGVkIGFuZCB0ZXN0IHBhc3Nlcy4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBkcwogICAgICAqIEBwYXJhbSBvdXQKICAgICAgKiBAcGFyYW0gdmFsdWUKICAgICAgKiBAcGFyYW0gdGFibGVOYW1lCiAgICAgICogQHJldHVybiBib29sZWFuIHN0YXR1cwogICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBjb25uZWN0aW9uU2hhcmluZ1Rlc3QoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0LCAKKyAgICBwcml2YXRlIGJvb2xlYW4gY29ubmVjdGlvblNoYXJpbmdUZXN0KERhdGFTb3VyY2UgZHMsIFByaW50V3JpdGVyIG91dCwKICAgICAgICAgICAgIGludCB2YWx1ZSwgU3RyaW5nIHRhYmxlTmFtZSkgewogICAgICAgICBTdHJpbmdbXSByZXN1bHRzID0gbmV3IFN0cmluZ1sxMF07CiAgICAgICAgIG91dC5wcmludGxuKCI8aDQ+IE1heCBDb25uZWN0aW9uIFVzYWdlIC0gQ29ubmVjdGlvbiBTaGFyaW5nIFRlc3QgPC9oND4iKTsKQEAgLTk2LDcgKzk2LDcgQEAKICAgICAgICAgICAgIGlmKGkgJSAyID09IDApIHsKICAgICAgICAgICAgICAgICByZXN1bHRzW2ldID0gbWF4Q29ublVzYWdlVGVzdDIoZHMsIG91dCwgdmFsdWUsIHRhYmxlTmFtZSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJlc3VsdHNbaV0gPSBtYXhDb25uVXNhZ2VUZXN0Myhkcywgb3V0LCAoaS8yKSsxLCB2YWx1ZSwgCisgICAgICAgICAgICAgICAgcmVzdWx0c1tpXSA9IG1heENvbm5Vc2FnZVRlc3QzKGRzLCBvdXQsIChpLzIpKzEsIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVOYW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTEwLDEwICsxMTAsMTAgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBvdXQucHJpbnRsbigiPGJyPiBGdXJ0aGVyIGNhbGwgdG8gbWF4Q29ublVzYWdlVGVzdDIiKTsKICAgICAgICAgU3RyaW5nIHRtcFJlc3VsdDIgPSBtYXhDb25uVXNhZ2VUZXN0Mihkcywgb3V0LCB2YWx1ZSwgdGFibGVOYW1lKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoIXRtcFJlc3VsdDIuZXF1YWxzSWdub3JlQ2FzZSh0bXBSZXN1bHQxKSAmJiBzdGF0dXMpIHsKICAgICAgICAgICAgIHN0YXR1cyA9IHRydWU7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMjksNyArMTI5LDcgQEAKIAogICAgIC8qKgogICAgICAqIENyZWF0ZXMgdGFibGUgbmVlZGVkIGZvciB0aGUgTWF4IENvbm5lY3Rpb24gVXNhZ2UgZGV2dGVzdC4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBkcwogICAgICAqIEBwYXJhbSBvdXQKICAgICAgKiBAcGFyYW0gdGFibGVOYW1lCkBAIC0xNjcsNyArMTY3LDcgQEAKICAgICAvKioKICAgICAgKiBUZXN0cyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcGh5c2ljYWwgY29ubmVjdGlvbnMgYXJlIGRpZmZlcmVudC4KICAgICAgKiBBc3N1bWluZyBtYXhjb25uZWN0aW9udXNhZ2UgcHJvcGVydHkgaXMgMTAgYW5kIGNvbm5lY3Rpb25TaGFyaW5nIE9OLCB0aGUKLSAgICAgKiBwaHlzaWNhbCBjb25uZWN0aW9ucyBjb24tMSBhbmQgY29uLTExIG11c3QgYmUgZGlmZmVyZW50LiAgICAgCisgICAgICogcGh5c2ljYWwgY29ubmVjdGlvbnMgY29uLTEgYW5kIGNvbi0xMSBtdXN0IGJlIGRpZmZlcmVudC4KICAgICAgKiBAcGFyYW0gZHMKICAgICAgKiBAcGFyYW0gb3V0CiAgICAgICogQHJldHVybiBib29sZWFuIHJlc3VsdApAQCAtMjE4LDcgKzIxOCw3IEBACiAgICAgICogQHBhcmFtIHRhYmxlTmFtZQogICAgICAqIEByZXR1cm4gcGh5c2ljYWxDb25uZWN0aW9uU3RyaW5nCiAgICAgICovCi0gICAgcHJpdmF0ZSBTdHJpbmcgbWF4Q29ublVzYWdlVGVzdDIoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0LCBpbnQgdmFsdWUsIAorICAgIHByaXZhdGUgU3RyaW5nIG1heENvbm5Vc2FnZVRlc3QyKERhdGFTb3VyY2UgZHMsIFByaW50V3JpdGVyIG91dCwgaW50IHZhbHVlLAogICAgICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSkgewogICAgICAgICBDb25uZWN0aW9uIHBoeXNpY2FsQ29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CkBAIC0yMjgsNyArMjI4LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGNvbm4gPSBkczEuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgc3RtdCA9IGNvbm4uY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoImluc2VydCBpbnRvICIgKyB0YWJsZU5hbWUgKyAiIHZhbHVlcyAoIiArIAorICAgICAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJpbnNlcnQgaW50byAiICsgdGFibGVOYW1lICsgIiB2YWx1ZXMgKCIgKwogICAgICAgICAgICAgICAgICAgICB2YWx1ZSArICIsJyIgKyB2YWx1ZSArICInKSIpOwogICAgICAgICAgICAgcGh5c2ljYWxDb25uZWN0aW9uID0gZHMxLmdldENvbm5lY3Rpb24oY29ubik7CiAgICAgICAgICAgICBwaHlzaWNhbENvbm5lY3Rpb25TdHJpbmcgPSBwaHlzaWNhbENvbm5lY3Rpb24udG9TdHJpbmcoKTsKQEAgLTI0Myw3ICsyNDMsNyBAQAogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBIdG1sVXRpbC5wcmludEV4Y2VwdGlvbihlLCBvdXQpOwogICAgICAgICAgICAgfQotICAgICAgICAgIAorCiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmKGNvbm4gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CkBAIC0yNTYsNyArMjU2LDcgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uJ3MgSUQgYWZ0ZXIgdGVzdGluZyBpZiB0aGUgZW50cmllcyBpbnNlcnRlZCAKKyAgICAgKiBSZXR1cm5zIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uJ3MgSUQgYWZ0ZXIgdGVzdGluZyBpZiB0aGUgZW50cmllcyBpbnNlcnRlZAogICAgICAqIHVzaW5nIG1heENvbm5Vc2FnZVRlc3QyKC4uLi4pIG1ldGhvZCBhcmUgcGVyc2lzdGVkLgogICAgICAqIEBwYXJhbSBkcwogICAgICAqIEBwYXJhbSBvdXQKQEAgLTI2NSw3ICsyNjUsNyBAQAogICAgICAqIEBwYXJhbSB0YWJsZU5hbWUKICAgICAgKiBAcmV0dXJuIHBoeXNpY2FsQ29ubmVjdGlvblN0cmluZwogICAgICAqLwotICAgIHByaXZhdGUgU3RyaW5nIG1heENvbm5Vc2FnZVRlc3QzKERhdGFTb3VyY2UgZHMsIFByaW50V3JpdGVyIG91dCwgaW50IGNvdW50LCAKKyAgICBwcml2YXRlIFN0cmluZyBtYXhDb25uVXNhZ2VUZXN0MyhEYXRhU291cmNlIGRzLCBQcmludFdyaXRlciBvdXQsIGludCBjb3VudCwKICAgICAgICAgICAgIGludCB2YWx1ZSwgU3RyaW5nIHRhYmxlTmFtZSkgewogICAgICAgICBDb25uZWN0aW9uIHBoeXNpY2FsQ29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CkBAIC0yODEsNyArMjgxLDcgQEAKICAgICAgICAgICAgICAgICBpZihjb3VudCA9PSByZXN1bHRDb3VudCkgewogICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbENvbm5lY3Rpb24gPSBkczEuZ2V0Q29ubmVjdGlvbihjb25uKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiRXhwZWN0ZWQgY291bnQgWyIgKyBjb3VudCArIAorICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiRXhwZWN0ZWQgY291bnQgWyIgKyBjb3VudCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl0gZG9lcyBub3QgbWF0Y2ggWyIgKyByZXN1bHRDb3VudCArICJdIik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTI5NywxNSArMjk3LDE1IEBACiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIEh0bWxVdGlsLnByaW50RXhjZXB0aW9uKGV4LCBvdXQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYoc3RtdCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0bXQuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgICAgICBIdG1sVXRpbC5wcmludEV4Y2VwdGlvbihleCwgb3V0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmKGNvbm4gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CkBAIC0zMTYsNSArMzE2LDUgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcGh5c2ljYWxDb25uZWN0aW9uLnRvU3RyaW5nKCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L011bHRpcGxlQ29ubmVjdGlvbkNsb3NlVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9NdWx0aXBsZUNvbm5lY3Rpb25DbG9zZVRlc3QuamF2YQppbmRleCA2YzRiZDc0Li43OTc2YWM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L011bHRpcGxlQ29ubmVjdGlvbkNsb3NlVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvTXVsdGlwbGVDb25uZWN0aW9uQ2xvc2VUZXN0LmphdmEKQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CiAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKICAgICAgICAgLy9jbGVhbiB0aGUgZGF0YWJhc2UKLSAgICAgICAgb3V0LnByaW50bG4oIjxoND4gTXVsdGlwbGUgY2xvc2UgY29ubmVjdGlvbiAtIFRlc3QxIDwvaDQ+Iik7ICAgIAorICAgICAgICBvdXQucHJpbnRsbigiPGg0PiBNdWx0aXBsZSBjbG9zZSBjb25uZWN0aW9uIC0gVGVzdDEgPC9oND4iKTsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgY29ubjEgPSBkczEuZ2V0Q29ubmVjdGlvbigpOwpAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICBTdHJpbmcgY29sdW1uTmFtZSA9ICJuYW1lIjsKICAgICAgICAgVGFibGVzVXRpbC5jcmVhdGVUYWJsZXMoZHMxLCBvdXQsIHRhYmxlTmFtZSwgY29sdW1uTmFtZSk7CiAKLSAgICAgICAgb3V0LnByaW50bG4oIjxoND4gTXVsdGlwbGUgY2xvc2UgY29ubmVjdGlvbiAtIFRlc3QyIDwvaDQ+Iik7ICAgIAorICAgICAgICBvdXQucHJpbnRsbigiPGg0PiBNdWx0aXBsZSBjbG9zZSBjb25uZWN0aW9uIC0gVGVzdDIgPC9oND4iKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGNvbm4xID0gZHMxLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIHN0bXQgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvTXVsdGlwbGVVc2VyQ3JlZGVudGlhbHNUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L011bHRpcGxlVXNlckNyZWRlbnRpYWxzVGVzdC5qYXZhCmluZGV4IGY4OTMxMTkuLjc0ZWE2NTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvTXVsdGlwbGVVc2VyQ3JlZGVudGlhbHNUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9NdWx0aXBsZVVzZXJDcmVkZW50aWFsc1Rlc3QuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogCiAvKioKICAqIFRlc3RzIGlmIENvbm5lY3Rpb24gcG9vbCB0cmllcyB0byBldmljdCAoZXhwZWwpIHNvbWUgZnJlZSBjb25uZWN0aW9ucwotICogaWYgYSBuZXcgY29ubmVjdGlvbiBjYW5ub3QgZml0IGluIHRoZSBwb29sLiBBc3N1bWVzIG1heC1wb29sLXNpemUgPSAzMiwgCisgKiBpZiBhIG5ldyBjb25uZWN0aW9uIGNhbm5vdCBmaXQgaW4gdGhlIHBvb2wuIEFzc3VtZXMgbWF4LXBvb2wtc2l6ZSA9IDMyLAogICogc3RlYWR5LXBvb2wtc2l6ZSA9IDgsIHBvb2wtcmVzaXplLXF1YW50aXR5ID0gMiwgbWF0Y2gtY29ubmVjdGlvbnMgPSB0cnVlLgogCiAgKiBAYXV0aG9yIHNoYWxpbmkKQEAgLTM0LDcgKzM0LDcgQEAKIHB1YmxpYyBjbGFzcyBNdWx0aXBsZVVzZXJDcmVkZW50aWFsc1Rlc3QgaW1wbGVtZW50cyBTaW1wbGVUZXN0IHsKIAogICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IHJlc3VsdHNNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+KCk7Ci0gICAgCisKICAgICBwdWJsaWMgTWFwPFN0cmluZywgQm9vbGVhbj4gcnVuVGVzdChEYXRhU291cmNlIGRzLCBQcmludFdyaXRlciBvdXQpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmICh0ZXN0TXVsdGlwbGVVc2VyQ3JlZGVudGlhbHMoZHMsIG91dCkpIHsKQEAgLTQ2LDEyICs0NiwxMiBAQAogICAgICAgICAgICAgcmVzdWx0c01hcC5wdXQoImpkYmMtbXVsdGlwbGUtdXNlci1jcmVkZW50aWFscyIsIGZhbHNlKTsKICAgICAgICAgfQogCi0gICAgICAgIEh0bWxVdGlsLnByaW50SFIob3V0KTsgICAgICAgIAotICAgICAgICByZXR1cm4gcmVzdWx0c01hcDsgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgSHRtbFV0aWwucHJpbnRIUihvdXQpOworICAgICAgICByZXR1cm4gcmVzdWx0c01hcDsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBUZXN0cyBpZiB1bm1hdGNoZWQgZnJlZSBjb25uZWN0aW9ucyBhcmUgcHVyZ2VkIGFuZCBuZXcgY29ubmVjdGlvbnMgYXJlIAorICAgICAqIFRlc3RzIGlmIHVubWF0Y2hlZCBmcmVlIGNvbm5lY3Rpb25zIGFyZSBwdXJnZWQgYW5kIG5ldyBjb25uZWN0aW9ucyBhcmUKICAgICAgKiBwcm92aWRlZCBldmVuIGlmIHRoZSB1c2VyIGNyZWRlbnRpYWxzIGRvbid0IG1hdGNoLgogICAgICAqIEBwYXJhbSBkcwogICAgICAqIEBwYXJhbSBvdXQKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgQ29ubmVjdGlvbiBjb25uczJbXSA9IG5ldyBDb25uZWN0aW9uWzE2XTsKICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwogICAgICAgICBvdXQucHJpbnRsbigiPGg0PiBNdWx0aXBsZSBVc2VyIENyZWRlbnRpYWxzIFRlc3Q8L2g0PiIpOwotICAgICAgICAKKwogICAgICAgICAvL0ZpcnN0IHVzZXIgYWNxdWlyZXMgMTYgY29ubmVjdGlvbnMKICAgICAgICAgb3V0LnByaW50bG4oIjxicj4gR2V0dGluZyAxNiBjb25uZWN0aW9ucyBhcyBEQlVTRVIuLi4iKTsKICAgICAgICAgZm9yKGludCBpPTA7IGk8Y29ubnMxLmxlbmd0aDsgaSsrKSB7CkBAIC04NCw3ICs4NCw3IEBACiAgICAgICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy9BbGwgY29ubmVjdGlvbnMgYXJlIHJldHVybmVkIHRvIHRoZSBwb29sCiAgICAgICAgIG91dC5wcmludGxuKCI8YnI+IENsb3NpbmcgYWxsIHRoZSBjb25uZWN0aW9ucyBhY3F1aXJlZCBieSBEQlVTRVIiKTsKICAgICAgICAgZm9yKGludCBpPTA7IGk8Y29ubnMxLmxlbmd0aDsgaSsrKSB7CkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIC8vUmVxdWVzdCBmcm9tIHRoaXJkIGFuZCBmb3VydGggdXNlciAKKyAgICAgICAgLy9SZXF1ZXN0IGZyb20gdGhpcmQgYW5kIGZvdXJ0aCB1c2VyCiAgICAgICAgIG91dC5wcmludGxuKCI8YnI+IEdldHRpbmcgc3Vic2VxdWVudCBjb25uZWN0aW9ucyBmb3IgQVBQIGFuZCBERVJCWVVTRVIiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbm5lY3Rpb24gY29ubjMgPSBkcy5nZXRDb25uZWN0aW9uKCJBUFAiLCAiQVBQIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L05vVHhDb25uVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9Ob1R4Q29ublRlc3QuamF2YQppbmRleCBjNjA2YWIzLi5mMDE4ODEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L05vVHhDb25uVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvTm9UeENvbm5UZXN0LmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKIHB1YmxpYyBjbGFzcyBOb1R4Q29ublRlc3QgaW1wbGVtZW50cyBTaW1wbGVUZXN0IHsKIAogICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IHJlc3VsdHNNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+KCk7Ci0gICAgCisKICAgICBwdWJsaWMgTWFwPFN0cmluZywgQm9vbGVhbj4gcnVuVGVzdChEYXRhU291cmNlIGRzLCBQcmludFdyaXRlciBvdXQpIHsKICAgICAgICAgLyp0cnkgewogICAgICAgICAgICAgaWYgKHRlc3ROb1R4Q29ublRlc3QxKGRzLCBvdXQpKSB7CkBAIC01OCw3ICs1OCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBIdG1sVXRpbC5wcmludEhSKG91dCk7Ci0gICAgICAgIHJldHVybiByZXN1bHRzTWFwOyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1bHRzTWFwOwogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiB0ZXN0Tm9UeENvbm5UZXN0MShEYXRhU291cmNlIGRzLCBQcmludFdyaXRlciBvdXQpIHsKQEAgLTc0LDggKzc0LDggQEAKICAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSAibWV0aG9kMSI7CiAgICAgICAgIFN0cmluZyBjb2x1bW5OYW1lID0gIm5hbWUiOwogICAgICAgICBUYWJsZXNVdGlsLmNyZWF0ZVRhYmxlcyhkcywgb3V0LCB0YWJsZU5hbWUsIGNvbHVtbk5hbWUpOwotICAgICAgICAKLSAgICAgICAgb3V0LnByaW50bG4oIjxoND4gTm9UeENvbm4gVGVzdDEgPC9oND4iKTsgICAgCisKKyAgICAgICAgb3V0LnByaW50bG4oIjxoND4gTm9UeENvbm4gVGVzdDEgPC9oND4iKTsKICAgICAgICAgVXNlclRyYW5zYWN0aW9uIHR4ID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+Iik7CkBAIC05NSw3ICs5NSw3IEBACiAgICAgICAgICAgICBub1R4Q29ubiA9ICgoY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSlkcykuZ2V0Tm9uVHhDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPkdvdCBub1R4IGNvbm5lY3Rpb24gLSBub1R4Q29ubiA6ICIgKyBub1R4Q29ubik7CiAgICAgICAgICAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiSU5TRVJUIElOVE8gIiArIHRhYmxlTmFtZSArICIgVkFMVUVTKCciICsgCisgICAgICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIklOU0VSVCBJTlRPICIgKyB0YWJsZU5hbWUgKyAiIFZBTFVFUygnIiArCiAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgKyAiJykiKTsKIAogICAgICAgICAgICAgc3RtdDIgPSBub1R4Q29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKQEAgLTE0NiwxMCArMTQ2LDEwIEBACiAgICAgICAgICAgICAgICAgICAgSHRtbFV0aWwucHJpbnRFeGNlcHRpb24oZTEsIG91dCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFRhYmxlc1V0aWwuZGVsZXRlVGFibGVzKGRzLCBvdXQsIHRhYmxlTmFtZSk7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPiBUZXN0IHJlc3VsdCA6ICIgKyByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE2Miw3ICsxNjIsNyBAQAogICAgICAgICBqYWthcnRhLnRyYW5zYWN0aW9uLlVzZXJUcmFuc2FjdGlvbiB0eCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPlN0YXJ0aW5nIHRlc3QgLi4uIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKICAgICAgICAgICAgIHR4ID0oVXNlclRyYW5zYWN0aW9uKWN0eC5sb29rdXAoImphdmE6Y29tcC9Vc2VyVHJhbnNhY3Rpb24iKTsKQEAgLTE4Myw3ICsxODMsNyBAQAogICAgICAgICAgICAgICAgIG5vVHhDb25uID0gKChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKWRzKS5nZXROb25UeENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPkF1dG9jb21taXQgb2Ygbm9UeENvbm4gPT4gIiArIG5vVHhDb25uLmdldEF1dG9Db21taXQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG5vVHhDb25uLmdldEF1dG9Db21taXQoKSA9PSBmYWxzZSApIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7ICAgICAgIAorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbm9UeENvbm4uY2xvc2UoKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvU3RhdGVtZW50VGltZW91dFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvU3RhdGVtZW50VGltZW91dFRlc3QuamF2YQppbmRleCBlMGJmZmM3Li5mOGJjY2ZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L1N0YXRlbWVudFRpbWVvdXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9TdGF0ZW1lbnRUaW1lb3V0VGVzdC5qYXZhCkBAIC0zMCwyMiArMzAsMjIgQEAKIAogLyoqCiAgKiBUZXN0cyBpZiBzdGF0ZW1lbnQtdGltZW91dCAocXVlcnktdGltZW91dCkgaXMgYmVpbmcgc2V0IG9uIGFsbCB0eXBlcyBvZgotICogc3RhdGVtZW50cyBjcmVhdGVkIGluIGFuIGFwcGxpY2F0aW9uIDogU3RhdGVtZW50LCBQcmVwYXJlZFN0YXRlbWVudCwgCisgKiBzdGF0ZW1lbnRzIGNyZWF0ZWQgaW4gYW4gYXBwbGljYXRpb24gOiBTdGF0ZW1lbnQsIFByZXBhcmVkU3RhdGVtZW50LAogICogQ2FsbGFibGVTdGF0ZW1lbnQuCi0gKiAKKyAqCiAgKiBBc3N1bWVzIHRoYXQgc3RhdGVtZW50LXRpbWVvdXQgYXR0cmlidXRlIGlzIHNldCBvbiB0aGUgcG9vbCB0byAzMC4KLSAqIAorICoKICAqIEBhdXRob3Igc2hhbGluaQogICovCiBwdWJsaWMgY2xhc3MgU3RhdGVtZW50VGltZW91dFRlc3QgaW1wbGVtZW50cyBTaW1wbGVUZXN0IHsKICAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiByZXN1bHRzTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBCb29sZWFuPigpOwogCiAgICAgcHVibGljIE1hcDxTdHJpbmcsIEJvb2xlYW4+IHJ1blRlc3QoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0KSB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vQ3JlYXRlIHJlcXVpcmVkIHRhYmxlcyBhbmQgaW5zZXJ0IGVudHJ5IGludG8gdGhlbQogICAgICAgICBTdHJpbmcgdGFibGVOYW1lID0gIkNVU1RPTUVSIjsKICAgICAgICAgU3RyaW5nIGNvbHVtbk5hbWUgPSAibmFtZSI7Ci0gICAgICAgIFRhYmxlc1V0aWwuY3JlYXRlVGFibGVzKGRzLCBvdXQsIHRhYmxlTmFtZSwgY29sdW1uTmFtZSk7ICAgICAgICAKKyAgICAgICAgVGFibGVzVXRpbC5jcmVhdGVUYWJsZXMoZHMsIG91dCwgdGFibGVOYW1lLCBjb2x1bW5OYW1lKTsKICAgICAgICAgVGFibGVzVXRpbC5pbnNlcnRFbnRyeShkcywgb3V0LCB0YWJsZU5hbWUsICJhYmNkIik7CiAgICAgICAgIFRhYmxlc1V0aWwuaW5zZXJ0RW50cnkoZHMsIG91dCwgdGFibGVOYW1lLCAicHFycyIpOwogCkBAIC01OCw3ICs1OCw3IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICByZXN1bHRzTWFwLnB1dCgic3RhdGVtZW50LXRlc3QiLCBmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmIChwcmVwYXJlZFN0YXRlbWVudFRlc3QoZHMsIG91dCwgdGFibGVOYW1lKSkgewogICAgICAgICAgICAgICAgIHJlc3VsdHNNYXAucHV0KCJwcmVwYXJlZC1zdGF0ZW1lbnQtdGVzdCIsIHRydWUpOwpAQCAtODUsMTQgKzg1LDE0IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogVGVzdHMgaWYgc3RhdGVtZW50LXRpbWVvdXQgaXMgYmVpbmcgc2V0IG9uIGEgQ2FsbGFibGVTdGF0ZW1lbnQgY3JlYXRlZCAKKyAgICAgKiBUZXN0cyBpZiBzdGF0ZW1lbnQtdGltZW91dCBpcyBiZWluZyBzZXQgb24gYSBDYWxsYWJsZVN0YXRlbWVudCBjcmVhdGVkCiAgICAgICogaW4gdGhlIGFwcGxpY2F0aW9uLgogICAgICAqIEBwYXJhbSBkcwogICAgICAqIEBwYXJhbSBvdXQKICAgICAgKiBAcGFyYW0gdGFibGVOYW1lCiAgICAgICogQHJldHVybiBib29sZWFuIHJlc3VsdAogICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBjYWxsYWJsZVN0YXRlbWVudFRlc3QoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0LCAKKyAgICBwcml2YXRlIGJvb2xlYW4gY2FsbGFibGVTdGF0ZW1lbnRUZXN0KERhdGFTb3VyY2UgZHMsIFByaW50V3JpdGVyIG91dCwKICAgICAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUpIHsKICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgQ29ubmVjdGlvbiBjb25Gcm9tRFMgPSBudWxsOwpAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgICAgICAgICBjb25Gcm9tRFMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBvdXQucHJpbnQoIjxicj4gUHJlcGFyaW5nIGEgQ2FsbGFibGVTdGF0ZW1lbnQiKTsKICAgICAgICAgICAgIHN0bXQgPSBjb25Gcm9tRFMucHJlcGFyZUNhbGwoInNlbGVjdCAqIGZyb20gIiArIHRhYmxlTmFtZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj4gZ2V0UXVlcnlUaW1lb3V0KCkgb24gdGhlIHN0YXRlbWVudCIpOwogICAgICAgICAgICAgaWYoc3RtdC5nZXRRdWVyeVRpbWVvdXQoKSA9PSAzMCkgewogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+IFRpbWVvdXQgPSAzMCIpOwpAQCAtMTI4LDcgKzEyOCw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPiBUZXN0IHJlc3VsdCA6ICIgKyByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfSAgICAgICAgICAgICAgICAKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgpAQCAtMTM5LDE5ICsxMzksMTkgQEAKICAgICAgKiBAcGFyYW0gdGFibGVOYW1lCiAgICAgICogQHJldHVybiBib29sZWFuIHJlc3VsdAogICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBwcmVwYXJlZFN0YXRlbWVudFRlc3QoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0LCAKKyAgICBwcml2YXRlIGJvb2xlYW4gcHJlcGFyZWRTdGF0ZW1lbnRUZXN0KERhdGFTb3VyY2UgZHMsIFByaW50V3JpdGVyIG91dCwKICAgICAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUpIHsKICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgQ29ubmVjdGlvbiBjb25Gcm9tRFMgPSBudWxsOwogICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBzdG10ID0gbnVsbDsKICAgICAgICAgb3V0LnByaW50bG4oIjxoND4gUHJlcGFyZWQgU3RhdGVtZW50IFRlc3QgPC9oND4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+IEdldHRpbmcgYSBjb25uZWN0aW9uLi4uIik7CiAgICAgICAgICAgICBjb25Gcm9tRFMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPkNyZWF0aW5nIGEgUHJlcGFyZWRTdGF0ZW1lbnQgcXVlcnkiKTsKICAgICAgICAgICAgIHN0bXQgPSBjb25Gcm9tRFMucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiICsgdGFibGVOYW1lKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPmdldFF1ZXJ5VGltZW91dCgpIG9uIHRoZSBzdGF0ZW1lbnQiKTsKICAgICAgICAgICAgIGlmKHN0bXQuZ2V0UXVlcnlUaW1lb3V0KCkgPT0gMzApIHsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPlRpbWVvdXQgPSAzMCIpOwpAQCAtMTc2LDcgKzE3Niw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPiBUZXN0IHJlc3VsdCA6ICIgKyByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfSAgICAgICAgCisgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKQEAgLTE5Niw3ICsxOTYsNyBAQAogICAgICAgICAgICAgY29uRnJvbURTID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgb3V0LnByaW50KCI8YnI+Q3JlYXRpbmcgYSBTdGF0ZW1lbnQiKTsKICAgICAgICAgICAgIHN0bXQgPSBjb25Gcm9tRFMuY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj4gR2V0dGluZyB0aGUgcXVlcnlUaW1lb3V0IG9uIHRoZSBzdGF0ZW1lbnQiKTsKICAgICAgICAgICAgIGlmKHN0bXQuZ2V0UXVlcnlUaW1lb3V0KCkgPT0gMzApIHsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPlRpbWVvdXQgPSAzMCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9yZWNvbmZpZy9SZWNvbmZpZ1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L3JlY29uZmlnL1JlY29uZmlnVGVzdFNlcnZsZXQuamF2YQppbmRleCAxZmM3NDhhLi5hYzdhMzNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L3JlY29uZmlnL1JlY29uZmlnVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L3JlY29uZmlnL1JlY29uZmlnVGVzdFNlcnZsZXQuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogcHVibGljIGNsYXNzIFJlY29uZmlnVGVzdFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAgICAgQFJlc291cmNlKG5hbWUgPSAiamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiwgbWFwcGVkTmFtZSA9ICJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiKQogICAgIERhdGFTb3VyY2UgZHM7Ci0gICAgCisKICAgICBAUmVzb3VyY2UobmFtZSA9ICJqZGJjL2pkYmMtcmVjb25maWctdGVzdC1yZXNvdXJjZS0xIiwgbWFwcGVkTmFtZSA9ICJqZGJjL2pkYmMtcmVjb25maWctdGVzdC1yZXNvdXJjZS0xIikKICAgICBEYXRhU291cmNlIGRzUmVjb25maWcxOwogCkBAIC00NiwxMyArNDYsMTMgQEAKIAogICAgIEBSZXNvdXJjZShuYW1lID0gImpkYmMvcmVzMSIsIG1hcHBlZE5hbWUgPSAiamRiYy9yZXMxIikKICAgICBEYXRhU291cmNlIGRzUmVzMTsKLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCBhcmcwLCBIdHRwU2VydmxldFJlc3BvbnNlIGFyZzEpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KGFyZzAsIGFyZzEpOwogICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBQcm9jZXNzZXMgcmVxdWVzdHMgZm9yIGJvdGggSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IGFuZCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2RzLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgICAgICAgICAgICAgIG1hcFJlY29uZmlnID0gcmVjb25maWdUZXN0LnJlc291cmNlQXR0cmlidXRlQ2hhbmdlVGVzdChkc1JlY29uZmlnMiwgb3V0LCB0aHJvd0V4Y2VwdGlvbik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgNDogLy9SZXNvdXJjZSBhdHRyaWJ1dGUgY2hhbmdlIHRlc3Qgd2l0aCBhbm90aGVyIGRhdGFzb3VyY2UKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5SZWNvbmZpZyBSZXNvdXJjZSBBdHRyaWJ1dGUgVGVzdCB3aXRoIERTIDogZHNSZXMxPC9oMT4iKTsKICAgICAgICAgICAgICAgICAgICAgbWFwUmVjb25maWcgPSByZWNvbmZpZ1Rlc3QucmVzb3VyY2VBdHRyaWJ1dGVDaGFuZ2VUZXN0KGRzUmVzMSwgb3V0LCB0aHJvd0V4Y2VwdGlvbik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTE4LDcgKzExOCw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogUmV0dXJucyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2bGV0LgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmxldEluZm8oKSB7CkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgICAgICAgICAiSkRCQyBSZXNvdXJjZSI7CiAgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2QuCiAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L3JlY29uZmlnL1JlY29uZmlnVGVzdFV0aWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvcmVjb25maWcvUmVjb25maWdUZXN0VXRpbC5qYXZhCmluZGV4IDMzMzI4MWYuLmM2Mzc2N2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvcmVjb25maWcvUmVjb25maWdUZXN0VXRpbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvcmVjb25maWcvUmVjb25maWdUZXN0VXRpbC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiBwdWJsaWMgY2xhc3MgUmVjb25maWdUZXN0VXRpbCB7CiAgICAgTWFwPFN0cmluZywgQm9vbGVhbj4gcmVzdWx0c01hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgQm9vbGVhbj4oKTsKIAotICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IHBvb2xQcm9wZXJ0eUNoYW5nZVRlc3QoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0LCAKKyAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiBwb29sUHJvcGVydHlDaGFuZ2VUZXN0KERhdGFTb3VyY2UgZHMsIFByaW50V3JpdGVyIG91dCwKICAgICAgICAgICAgIGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIHsKICAgICAgICAgLy9UZXN0cyB0aGUgcHJvcGVydHkgY2hhbmdlIG9mIGpkYmMgY29ubmVjdGlvbiBwb29sIGJ5IGFzYWRtaW4gc2V0IGNvbW1hbmQuCiAgICAgICAgIHRyeSB7CkBAIC00OSwxMSArNDksMTEgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHJlc3VsdHNNYXAucHV0KCJwb29sLXByb3BlcnR5LWNoYW5nZS10ZXN0IiwgZmFsc2UpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHRzTWFwOwogICAgIH0KIAotICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IHJlc291cmNlQXR0cmlidXRlQ2hhbmdlVGVzdChEYXRhU291cmNlIGRzLCBQcmludFdyaXRlciBvdXQsIAorICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IHJlc291cmNlQXR0cmlidXRlQ2hhbmdlVGVzdChEYXRhU291cmNlIGRzLCBQcmludFdyaXRlciBvdXQsCiAgICAgICAgICAgICBib29sZWFuIHRocm93RXhjZXB0aW9uKSB7CiAgICAgICAgIC8vVGVzdHMgdGhlIGF0dHJpYnV0ZSBzZXQgb2YgamRiYyByZXNvdXJjZSBieSBhc2FkbWluIHNldCBjb21tYW5kLgogICAgICAgICB0cnkgewpAQCAtNjQsOCArNjQsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgcmVzdWx0c01hcC5wdXQoInJlc291cmNlLWNoYW5nZS13cm9uZy10YWJsZS10ZXN0IiwgZmFsc2UpOwotICAgICAgICB9IAotICAgICAgICAKKyAgICAgICAgfQorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZih0ZXN0SkRCQ1Jlc291cmNlQ2hhbmdlQ29ycmVjdFRhYmxlKGRzLCBvdXQsICF0aHJvd0V4Y2VwdGlvbikpIHsKICAgICAgICAgICAgICAgICByZXN1bHRzTWFwLnB1dCgicmVzb3VyY2UtY2hhbmdlLWNvcnJlY3QtdGFibGUtdGVzdCIsIHRydWUpOwpAQCAtNzcsOCArNzcsOCBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHRzTWFwOwogICAgIH0KLSAgICAKLSAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiBwb29sQXR0cmlidXRlQ2hhbmdlVGVzdChEYXRhU291cmNlIGRzLCBQcmludFdyaXRlciBvdXQsIAorCisgICAgTWFwPFN0cmluZywgQm9vbGVhbj4gcG9vbEF0dHJpYnV0ZUNoYW5nZVRlc3QoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0LAogICAgICAgICAgICAgaW50IG1heFBvb2xTaXplLCBib29sZWFuIHRocm93RXhjZXB0aW9uKSB7CiAgICAgICAgIC8vVGVzdHMgdGhlIGF0dHJpYnV0ZSBzZXQgYnkgYXNhZG1pbiBzZXQgY29tbWFuZC4KICAgICAgICAgdHJ5IHsKQEAgLTkzLDcgKzkzLDcgQEAKICAgICAgICAgcmV0dXJuIHJlc3VsdHNNYXA7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBib29sZWFuIHRlc3RKREJDUmVzb3VyY2VDaGFuZ2UoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0LCAKKyAgICBwcml2YXRlIGJvb2xlYW4gdGVzdEpEQkNSZXNvdXJjZUNoYW5nZShEYXRhU291cmNlIGRzLCBQcmludFdyaXRlciBvdXQsCiAgICAgICAgICAgICBib29sZWFuIHRocm93RXhjZXB0aW9uKSB0aHJvd3MgU3lzdGVtRXhjZXB0aW9uIHsKICAgICAgICAgSHRtbFV0aWwucHJpbnRIUihvdXQpOwogICAgICAgICBvdXQucHJpbnRsbigiPGg0PiBSZWNvbmZpZyB0ZXN0IDogdGFibGVuYW1lIDogcmVjb25maWdUZXN0VGFibGUgKHJlY29uZmlnLWRiKTwvaDQ+Iik7CkBAIC0xMjAsMTIgKzEyMCwxMiBAQAogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsgY29uLmNsb3NlKCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZSApIHt9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgSHRtbFV0aWwucHJpbnRIUihvdXQpOwogICAgICAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAotICAgIHByaXZhdGUgYm9vbGVhbiB0ZXN0SkRCQ1Jlc291cmNlQ2hhbmdlQ29ycmVjdFRhYmxlKERhdGFTb3VyY2UgZHMsIFByaW50V3JpdGVyIG91dCwgCisgICAgcHJpdmF0ZSBib29sZWFuIHRlc3RKREJDUmVzb3VyY2VDaGFuZ2VDb3JyZWN0VGFibGUoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0LAogICAgICAgICAgICAgYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikgdGhyb3dzIFN5c3RlbUV4Y2VwdGlvbiB7CiAgICAgICAgIEh0bWxVdGlsLnByaW50SFIob3V0KTsKICAgICAgICAgb3V0LnByaW50bG4oIjxoND4gUmVjb25maWcgdGVzdCA6IHRhYmxlTmFtZSA6IHNhbXBsZVRhYmxlIChzYW1wbGUtZGIpIDwvaDQ+Iik7CkBAIC0xNTIsMTMgKzE1MiwxMyBAQAogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsgY29uLmNsb3NlKCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZSApIHt9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgSHRtbFV0aWwucHJpbnRIUihvdXQpOwotICAgICAgICByZXR1cm4gcGFzc2VkOyAgICAgICAgCisgICAgICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyBib29sZWFuIHRlc3RNYXhQb29sU2l6ZShEYXRhU291cmNlIGRzLCBQcmludFdyaXRlciBvdXQsIAotICAgICAgICAgICAgaW50IG1heFBvb2xTaXplLCBib29sZWFuIHRocm93RXhjZXB0aW9uKSAgCisKKyAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0TWF4UG9vbFNpemUoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0LAorICAgICAgICAgICAgaW50IG1heFBvb2xTaXplLCBib29sZWFuIHRocm93RXhjZXB0aW9uKQogICAgICAgICAgICAgdGhyb3dzIFN5c3RlbUV4Y2VwdGlvbiB7CiAgICAgICAgIEh0bWxVdGlsLnByaW50SFIob3V0KTsKICAgICAgICAgb3V0LnByaW50bG4oIlxuPGg0PiBSZWNvbmZpZyAtIEF0dHJpYnV0ZSBtYXgtcG9vbC1zaXplIHRlc3QgPC9oND4iKTsKQEAgLTIwNSw3ICsyMDUsNyBAQAogICAgICAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAotICAgIHByaXZhdGUgYm9vbGVhbiB0ZXN0UHJvcGVydHlDaGFuZ2UoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0LCAKKyAgICBwcml2YXRlIGJvb2xlYW4gdGVzdFByb3BlcnR5Q2hhbmdlKERhdGFTb3VyY2UgZHMsIFByaW50V3JpdGVyIG91dCwKICAgICAgICAgICAgIGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIHRocm93cyBTeXN0ZW1FeGNlcHRpb24gewogICAgICAgICBIdG1sVXRpbC5wcmludEhSKG91dCk7CiAgICAgICAgIG91dC5wcmludGxuKCJcbjxoND4gUmVjb25maWcgLSBQb29sIHByb3BlcnR5IGNoYW5nZSB0ZXN0IDwvaDQ+Iik7CkBAIC0yMjUsOSArMjI1LDkgQEAKICAgICAgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIHRyeSB7IGNvbi5jbG9zZSgpOyB9IGNhdGNoICggRXhjZXB0aW9uIGUgKSB7fSAgICAgICAgICAgIAorICAgICAgICAgICAgdHJ5IHsgY29uLmNsb3NlKCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZSApIHt9CiAgICAgICAgIH0KICAgICAgICAgSHRtbFV0aWwucHJpbnRIUihvdXQpOwotICAgICAgICByZXR1cm4gcGFzc2VkOyAgICAgICAgCisgICAgICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdXRpbC9IdG1sVXRpbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdXRpbC9IdG1sVXRpbC5qYXZhCmluZGV4IDRhNTBlNTAuLjZiNTZmNDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3V0aWwvSHRtbFV0aWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My91dGlsL0h0bWxVdGlsLmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgICAgIG91dC5wcmludGxuKGVsZW1lbnQudG9TdHJpbmcoKSArICI8YnI+Iik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBQcmludHMgYSBob3Jpem9udGFsIHJ1bGVyLgogICAgICAqIEBwYXJhbSBvdXQKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3V0aWwvVGFibGVzVXRpbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdXRpbC9UYWJsZXNVdGlsLmphdmEKaW5kZXggYzhkOTIyMS4uOWVmYjkxNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdXRpbC9UYWJsZXNVdGlsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdXRpbC9UYWJsZXNVdGlsLmphdmEKQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBEZWxldGVzIHRhYmxlcyB1c2VkIGJ5IEpEQkMgZGV2dGVzdHMuCiAgICAgICogQHBhcmFtIGRzMQpAQCAtMTE0LDcgKzExNCw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJJTlNFUlQgSU5UTyAiICsgdGFibGVOYW1lICsgIiBWQUxVRVMoJyIgKyAKKyAgICAgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiSU5TRVJUIElOVE8gIiArIHRhYmxlTmFtZSArICIgVkFMVUVTKCciICsKICAgICAgICAgICAgICAgICBjb250ZW50ICsgIicpIik7CiAgICAgICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgSHRtbFV0aWwucHJpbnRFeGNlcHRpb24oZXgsIG91dCk7CkBAIC0xMzcsNyArMTM3LDcgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBWZXJpZmllcyB0YWJsZSBjb250ZW50IGJ5IGdldHRpbmcgdGhlIG51bWJlciBvZiByb3dzIGluIGl0LCB1c2VkIGJ5IHRoZSAKKyAgICAgKiBWZXJpZmllcyB0YWJsZSBjb250ZW50IGJ5IGdldHRpbmcgdGhlIG51bWJlciBvZiByb3dzIGluIGl0LCB1c2VkIGJ5IHRoZQogICAgICAqIEpEQkMgZGV2dGVzdHMuIFJldHVybnMgYSB0cnVlIGlmIHRoZXJlIGFyZSBhbnkgcm93cyBpbiB0aGUgdGFibGUuCiAgICAgICogQHBhcmFtIGRzMQogICAgICAqIEBwYXJhbSBvdXQKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvd2ViL1dFQi1JTkYvc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3dlYi9XRUItSU5GL3N1bi13ZWIueG1sCmluZGV4IDNmOTQwZDYuLjlkM2IzYWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvd2ViL1dFQi1JTkYvc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy93ZWIvV0VCLUlORi9zdW4td2ViLnhtbApAQCAtMzAsNiArMzAsNiBAQAogICA8L3Jlc291cmNlLXJlZj4KICAgPHJlc291cmNlLXJlZj4KICAgICAgIDxyZXMtcmVmLW5hbWU+amRiYy9qZGJjLW11bHRpcGxlLXVzZXItdGVzdC1yZXNvdXJjZTwvcmVzLXJlZi1uYW1lPgotICAgICAgPGpuZGktbmFtZT5qZGJjL2pkYmMtbXVsdGlwbGUtdXNlci10ZXN0LXJlc291cmNlPC9qbmRpLW5hbWU+ICAgICAgCisgICAgICA8am5kaS1uYW1lPmpkYmMvamRiYy1tdWx0aXBsZS11c2VyLXRlc3QtcmVzb3VyY2U8L2puZGktbmFtZT4KICAgICA8L3Jlc291cmNlLXJlZj4KIDwvc3VuLXdlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3ZhbGlkYXRlYXRtb3N0b25jZXBlcmlvZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92YWxpZGF0ZWF0bW9zdG9uY2VwZXJpb2QvYnVpbGQucHJvcGVydGllcwppbmRleCAyNDQwOTdmLi5kNzc0ZTM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3ZhbGlkYXRlYXRtb3N0b25jZXBlcmlvZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdmFsaWRhdGVhdG1vc3RvbmNlcGVyaW9kL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy12YWxpZGF0ZWF0bW9zdG9uY2VwZXJpb2QiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJwb29sbmFtZSIgdmFsdWU9ImpkYmMtdmFsaWRhdGVhdG1vc3RvbmNlcGVyaW9kIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3ZhbGlkYXRlYXRtb3N0b25jZXBlcmlvZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3ZhbGlkYXRlYXRtb3N0b25jZXBlcmlvZC9idWlsZC54bWwKaW5kZXggN2M3ZWU3YS4uZDZmNGFmNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92YWxpZGF0ZWF0bW9zdG9uY2VwZXJpb2QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdmFsaWRhdGVhdG1vc3RvbmNlcGVyaW9kL2J1aWxkLnhtbApAQCAtOTgsOCArOTgsOCBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMSIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLQk8YW50Y2FsbCB0YXJnZXQ9InN0b3AtZGVyYnkiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0LWRlcmJ5Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wLWRlcmJ5Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydC1kZXJieSIvPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIyIi8+CkBAIC0xMTEsOCArMTExLDggQEAKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7cG9vbG5hbWV9LnZhbGlkYXRlX2F0bW9zdF9vbmNlX3BlcmlvZF9pbl9zZWNvbmRzPTYwIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotCTxhbnRjYWxsIHRhcmdldD0ic3RvcC1kZXJieSIvPgotCTxhbnRjYWxsIHRhcmdldD0ic3RhcnQtZGVyYnkiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InN0b3AtZGVyYnkiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0LWRlcmJ5Ii8+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdmFsaWRhdGVhdG1vc3RvbmNlcGVyaW9kL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdmFsaWRhdGVhdG1vc3RvbmNlcGVyaW9kL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAwMzI3MTMzLi44Mjc2NmE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3ZhbGlkYXRlYXRtb3N0b25jZXBlcmlvZC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92YWxpZGF0ZWF0bW9zdG9uY2VwZXJpb2QvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZUJNUEhvbWUuY2xhc3MpOwogCiAgICAgICAgIFNpbXBsZUJNUCBjb252YWxCTVAgPSBjb252YWxCTVBIb21lLmNyZWF0ZSgpOwotCXN0YXQuYWRkRGVzY3JpcHRpb24oIkpEQkMgVmFsaWRhdGUgQXRtb3N0IE9uY2UgUGVyaW9kIFRlc3RzIik7CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiSkRCQyBWYWxpZGF0ZSBBdG1vc3QgT25jZSBQZXJpb2QgVGVzdHMiKTsKIAogICAgICAgICBpZiAoYXJncyAhPSBudWxsICYmIGFyZ3MubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgU3RyaW5nIHBhcmFtID0gYXJnc1swXTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdmFsaWRhdGVhdG1vc3RvbmNlcGVyaW9kL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3ZhbGlkYXRlYXRtb3N0b25jZXBlcmlvZC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDYxYmVhMjMuLmUwZGY3MzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdmFsaWRhdGVhdG1vc3RvbmNlcGVyaW9kL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92YWxpZGF0ZWF0bW9zdG9uY2VwZXJpb2QvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgIH0KIAogCi0gICAKKwogLyogR2V0IGEgc2luZ2xlIGNvbm5lY3Rpb24gYW5kIGNsb3NlIGl0ICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoKSB7CiAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3ZhbGlkYXRlYXRtb3N0b25jZXBlcmlvZC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3ZhbGlkYXRlYXRtb3N0b25jZXBlcmlvZC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZTQ5MTRmNi4uZjI1NjA3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92YWxpZGF0ZWF0bW9zdG9uY2VwZXJpb2Qvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdmFsaWRhdGVhdG1vc3RvbmNlcGVyaW9kL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92YWxpZGF0ZWF0bW9zdG9uY2VwZXJpb2Qvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdmFsaWRhdGVhdG1vc3RvbmNlcGVyaW9kL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92YWxpZGF0ZWF0bW9zdG9uY2VwZXJpb2Qvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3ZhbGlkYXRlYXRtb3N0b25jZXBlcmlvZC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L0FDQzEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9BQ0MxL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTk4Nzg5ZC4uN2RhNjUzNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L0FDQzEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvQUNDMS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJKTVNYRGVsaXZlcnlDb3VudC1hY2MxIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L0FDQzEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L0FDQzEvYnVpbGQueG1sCmluZGV4IDE3MzRiOGQuLjhlODY4N2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9BQ0MxL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvQUNDMS9idWlsZC54bWwKQEAgLTM0LDEyICszNCwxMiBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiAgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1jbGllbnQiLz4KQEAgLTQ4LDE0ICs0OCwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLWNsaWVudCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXBwY2xpZW50Lmphcn0iLz4KLSAgICAgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IEdlbmVyYXRpbmcgYXBwY2xpZW50LWphciBpbnNpZGUgYnVpbGQgZGlyZWN0b3J5IiAKKyAgICAgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IEdlbmVyYXRpbmcgYXBwY2xpZW50LWphciBpbnNpZGUgYnVpbGQgZGlyZWN0b3J5IgogICAgICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLWNsaWVudC54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci0gICAgICA8amFyIGphcmZpbGU9IiR7YnVpbGQuYmFzZS5kaXJ9L2FyY2hpdmUvJHthcHBuYW1lfUFwcENsaWVudC5qYXIiIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKLSAgICAgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IioqLypDbGllbnQuY2xhc3MiPiAgICAgICAgIAorICAgICAgPGphciBqYXJmaWxlPSIke2J1aWxkLmJhc2UuZGlyfS9hcmNoaXZlLyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIiBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKKyAgICAgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IioqLypDbGllbnQuY2xhc3MiPgogICAgICAgICA8bWFuaWZlc3Q+CiAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iTWFpbi1DbGFzcyIgdmFsdWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuam1zeGRlbGl2ZXJ5Y291bnQuY2xpZW50LkNsaWVudCIvPgogICAgICAgICA8L21hbmlmZXN0PgpAQCAtNjgsMTQgKzY4LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UtY2xpZW50MiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGRlbGV0ZSBmaWxlPSIke2FwcGNsaWVudC5qYXJ9Ii8+Ci0gICAgICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBHZW5lcmF0aW5nIGFwcGNsaWVudC1qYXIgaW5zaWRlIGJ1aWxkIGRpcmVjdG9yeSIgCisgICAgICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBHZW5lcmF0aW5nIGFwcGNsaWVudC1qYXIgaW5zaWRlIGJ1aWxkIGRpcmVjdG9yeSIKICAgICAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotICAgICAgPGphciBqYXJmaWxlPSIke2J1aWxkLmJhc2UuZGlyfS9hcmNoaXZlLyR7YXBwbmFtZX1BcHBDbGllbnQyLmphciIgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAotICAgICAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iKiovKkNsaWVudDIuY2xhc3MiPiAgICAgICAgIAorICAgICAgPGphciBqYXJmaWxlPSIke2J1aWxkLmJhc2UuZGlyfS9hcmNoaXZlLyR7YXBwbmFtZX1BcHBDbGllbnQyLmphciIgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCisgICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIqKi8qQ2xpZW50Mi5jbGFzcyI+CiAgICAgICAgIDxtYW5pZmVzdD4KICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJNYWluLUNsYXNzIiB2YWx1ZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5qbXN4ZGVsaXZlcnljb3VudC5jbGllbnQuQ2xpZW50MiIvPgogICAgICAgICA8L21hbmlmZXN0PgpAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTEwOCwxNCArMTA4LDE0IEBACiAgICAgICAgICAgICA8ZW52IGtleT0iQVBQQ1BBVEgiIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIvPgogICAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvQUNDMi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L0FDQzIvYnVpbGQucHJvcGVydGllcwppbmRleCA1Njc4OWIzLi5jZDYyNzAzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvQUNDMi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9BQ0MyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IkpNU1hEZWxpdmVyeUNvdW50LWFjYzIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvQUNDMi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvQUNDMi9idWlsZC54bWwKaW5kZXggNzRhNThhMy4uMWU4YzJkZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L0FDQzIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9BQ0MyL2J1aWxkLnhtbApAQCAtMzQsMTIgKzM0LDEyIEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiICBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWNsaWVudCIvPgpAQCAtNDcsMTQgKzQ3LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UtY2xpZW50IiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxkZWxldGUgZmlsZT0iJHthcHBjbGllbnQuamFyfSIvPgotICAgICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogR2VuZXJhdGluZyBhcHBjbGllbnQtamFyIGluc2lkZSBidWlsZCBkaXJlY3RvcnkiIAorICAgICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogR2VuZXJhdGluZyBhcHBjbGllbnQtamFyIGluc2lkZSBidWlsZCBkaXJlY3RvcnkiCiAgICAgICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24tY2xpZW50LnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLSAgICAgIDxqYXIgamFyZmlsZT0iJHtidWlsZC5iYXNlLmRpcn0vYXJjaGl2ZS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAotICAgICAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iKiovKkNsaWVudC5jbGFzcyI+ICAgICAgICAgCisgICAgICA8amFyIGphcmZpbGU9IiR7YnVpbGQuYmFzZS5kaXJ9L2FyY2hpdmUvJHthcHBuYW1lfUFwcENsaWVudC5qYXIiIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgorICAgICAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iKiovKkNsaWVudC5jbGFzcyI+CiAgICAgICAgIDxtYW5pZmVzdD4KICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJNYWluLUNsYXNzIiB2YWx1ZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5qbXN4ZGVsaXZlcnljb3VudC5jbGllbnQuQ2xpZW50Ii8+CiAgICAgICAgIDwvbWFuaWZlc3Q+CkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtODMsMTQgKzgzLDE0IEBACiAgICAgICAgICAgICA8ZW52IGtleT0iQVBQQ1BBVEgiIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIvPgogICAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjEvYnVpbGQucHJvcGVydGllcwppbmRleCAxZTIwZWY1Li43NzM0NWZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIxL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iSk1TWERlbGl2ZXJ5Q291bnQtbWRiMSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjEvYnVpbGQueG1sCmluZGV4IDhmN2UwYjEuLjMxMGI0OGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIxL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovTXlTZXNzaW9uQmVhbiouY2xhc3MsICoqLypNZXNzYWdlQmVhbi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03MSwyMSArNzEsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuam1zeGRlbGl2ZXJ5Y291bnQuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjEvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIxL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggMTU3NDk1Ni4uZDI1ZmU1NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjEvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIxL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjEvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggYWMwOTBmZS4uNjAzY2YwNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjEvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjEvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTI5LDkgKzI5LDkgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQ7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDUsMTAgKzQ1LDEwIEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgICAgIExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKS5sb2coTGV2ZWwuU0VWRVJFLCBudWxsLCBleCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhib29sZWFuIHN1Y2Nlc3MsIFN0cmluZyBtc2cpIHsKICAgICAgICAgSk1TUHJvZHVjZXIgcHJvZHVjZXIgPSBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCk7CiAgICAgICAgIFRleHRNZXNzYWdlIHRtc2cgPSBqbXNDb250ZXh0LmNyZWF0ZVRleHRNZXNzYWdlKHN1Y2Nlc3MgKyAiOiIgKyBtc2cpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDJhNjVlNy4uNmQ2Zjg3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IkpNU1hEZWxpdmVyeUNvdW50LW1kYjIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIyL2J1aWxkLnhtbAppbmRleCA3NjY4YzZlLi42YmRiNmRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4uY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzEsMjEgKzcxLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmptc3hkZWxpdmVyeWNvdW50LmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIyL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMi9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IDE1NzQ5NTYuLmQyNWZlNTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIyL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjIvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMi9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIyL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IDJjMTI0YmQuLjc1YzYzY2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIyL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIyL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0yOSw5ICsyOSw5IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50OwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQ1LDEwICs0NSwxMCBAQAogICAgIEBKTVNDb25uZWN0aW9uRmFjdG9yeSgiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBASk1TU2Vzc2lvbk1vZGUoSk1TQ29udGV4dC5BVVRPX0FDS05PV0xFREdFKQogICAgIHByaXZhdGUgSk1TQ29udGV4dCBqbXNDb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSkubG9nKExldmVsLlNFVkVSRSwgbnVsbCwgZXgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coYm9vbGVhbiBzdWNjZXNzLCBTdHJpbmcgbXNnKSB7CiAgICAgICAgIEpNU1Byb2R1Y2VyIHByb2R1Y2VyID0gam1zQ29udGV4dC5jcmVhdGVQcm9kdWNlcigpOwogICAgICAgICBUZXh0TWVzc2FnZSB0bXNnID0gam1zQ29udGV4dC5jcmVhdGVUZXh0TWVzc2FnZShzdWNjZXNzICsgIjoiICsgbXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDBjNTdiMTIuLjRlOGE4MWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJKTVNYRGVsaXZlcnlDb3VudC1tZGIzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMy9idWlsZC54bWwKaW5kZXggNGIxNzk1MS4uMDhlZjI0OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIzL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTcxLDIxICs3MSwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5qbXN4ZGVsaXZlcnljb3VudC5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMy9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjMvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCAxNTc0OTU2Li5kMjVmZTU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMy9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIzL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjMvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMy9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCA0ODdmYmVlLi44Yjg5YTIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMy9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMy9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMjksOSArMjksOSBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudDsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00NSwxMCArNDUsMTAgQEAKICAgICBASk1TQ29ubmVjdGlvbkZhY3RvcnkoImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgQEpNU1Nlc3Npb25Nb2RlKEpNU0NvbnRleHQuQVVUT19BQ0tOT1dMRURHRSkKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLlJFUVVJUkVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgICAgIExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKS5sb2coTGV2ZWwuU0VWRVJFLCBudWxsLCBleCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhib29sZWFuIHN1Y2Nlc3MsIFN0cmluZyBtc2cpIHsKICAgICAgICAgSk1TUHJvZHVjZXIgcHJvZHVjZXIgPSBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCk7CiAgICAgICAgIFRleHRNZXNzYWdlIHRtc2cgPSBqbXNDb250ZXh0LmNyZWF0ZVRleHRNZXNzYWdlKHN1Y2Nlc3MgKyAiOiIgKyBtc2cpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREI0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDEyYTE2NC4uNWM3ODg1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCNC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IkpNU1hEZWxpdmVyeUNvdW50LW1kYjQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREI0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREI0L2J1aWxkLnhtbAppbmRleCBkOWQxMWY3Li43MmJjMDUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCNC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4uY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzEsMjEgKzcxLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmptc3hkZWxpdmVyeWNvdW50LmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREI0L2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCNC9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IDE1NzQ5NTYuLmQyNWZlNTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREI0L2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjQvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCNC9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREI0L2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGE0MGM0YjYuLjYyOGNiOTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREI0L2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREI0L2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0yOSw5ICsyOSw5IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50OwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQ1LDEwICs0NSwxMCBAQAogICAgIEBKTVNDb25uZWN0aW9uRmFjdG9yeSgiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBASk1TU2Vzc2lvbk1vZGUoSk1TQ29udGV4dC5BVVRPX0FDS05PV0xFREdFKQogICAgIHByaXZhdGUgSk1TQ29udGV4dCBqbXNDb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuUkVRVUlSRUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpLmxvZyhMZXZlbC5TRVZFUkUsIG51bGwsIGV4KTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKGJvb2xlYW4gc3VjY2VzcywgU3RyaW5nIG1zZykgewogICAgICAgICBKTVNQcm9kdWNlciBwcm9kdWNlciA9IGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKTsKICAgICAgICAgVGV4dE1lc3NhZ2UgdG1zZyA9IGptc0NvbnRleHQuY3JlYXRlVGV4dE1lc3NhZ2Uoc3VjY2VzcyArICI6IiArIG1zZyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L2J1aWxkLnhtbAppbmRleCBjZjc0MzQzLi4zMWU3MDhhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9idWlsZC54bWwKQEAgLTg4LDkgKzg4LDkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgam1zIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGptcyB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvc2Vzc2lvbkJlYW4xL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvc2Vzc2lvbkJlYW4xL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOWY2MTJkNC4uMjY1ZjQ2MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L3Nlc3Npb25CZWFuMS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9zZXNzaW9uQmVhbjEvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJKTVNYRGVsaXZlcnlDb3VudC1zdGF0ZWxlc3MtZWpiMSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L3Nlc3Npb25CZWFuMS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvc2Vzc2lvbkJlYW4xL2J1aWxkLnhtbAppbmRleCA3NzBlMGQyLi4xMDE3ODliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvc2Vzc2lvbkJlYW4xL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvc2Vzc2lvbkJlYW4xL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03MSwyMSArNzEsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuam1zeGRlbGl2ZXJ5Y291bnQuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L3Nlc3Npb25CZWFuMS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L3Nlc3Npb25CZWFuMS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGYxYjllNGIuLjhiYmI1MzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9zZXNzaW9uQmVhbjEvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvc2Vzc2lvbkJlYW4xL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDkgKzI1LDkgQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja01lc3NhZ2UxKFN0cmluZyB0ZXh0KTsKIAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrTWVzc2FnZTIoU3RyaW5nIHRleHQpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L3Nlc3Npb25CZWFuMi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L3Nlc3Npb25CZWFuMi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDgyOWY2MjEuLmJhZTA5MTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9zZXNzaW9uQmVhbjIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvc2Vzc2lvbkJlYW4yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iSk1TWERlbGl2ZXJ5Q291bnQtc3RhdGVsZXNzLWVqYjIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9zZXNzaW9uQmVhbjIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L3Nlc3Npb25CZWFuMi9idWlsZC54bWwKaW5kZXggZTQ4ODM5Ni4uODY0ZTFjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L3Nlc3Npb25CZWFuMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L3Nlc3Npb25CZWFuMi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzEsMjEgKzcxLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmptc3hkZWxpdmVyeWNvdW50LmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9zZXNzaW9uQmVhbjIvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9zZXNzaW9uQmVhbjIvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBmMWI5ZTRiLi44YmJiNTM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvc2Vzc2lvbkJlYW4yL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L3Nlc3Npb25CZWFuMi9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw5ICsyNSw5IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tNZXNzYWdlMShTdHJpbmcgdGV4dCk7CiAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja01lc3NhZ2UyKFN0cmluZyB0ZXh0KTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCA4NjgwMTU4Li4zYjM1MmVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnNjcmlwdGlvblNjb3BlLWNsdXN0ZXItY2x1c3RlclNjb3BlRHVyYWJsZVdpdGhOYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCmluZGV4IDMxYjhhYTguLjY0Yjc4M2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24tY2x1c3RlciIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGVuZHBvaW50IGFjdGl2YXRpb24iLz4KQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBjbHVzdGVyIHByb3BhZ2F0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgc2V0T1NQcm9wcyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTkwLDIxICs5MCwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke2RlcGxveS5jbHVzdGVyaW5zdGFuY2UxLm9yYnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24tY2x1c3RlciIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCA1YzcyZWZiLi42MjYzNzg0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDIsMTYgKzQyLDE2IEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBKTVNQcm9kdWNlciBwcm9kdWNlciA9IGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKTsKICAgICAgICAgcHJvZHVjZXIuc2VuZChyZXN1bHRRdWV1ZSwgbXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKaW5kZXggODVkNzgyOC4uM2QxZTEzOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4yIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MiwxNiArNDIsMTYgQEAKICAgICBASk1TQ29ubmVjdGlvbkZhY3RvcnkoImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgQEpNU1Nlc3Npb25Nb2RlKEpNU0NvbnRleHQuQVVUT19BQ0tOT1dMRURHRSkKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbjIoKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBKTVNQcm9kdWNlciBwcm9kdWNlciA9IGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKTsKICAgICAgICAgcHJvZHVjZXIuc2VuZChyZXN1bHRRdWV1ZSwgbXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCBjMjhlYmNkLi4yNTljNjE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnNjcmlwdGlvblNjb3BlLWNsdXN0ZXItY2x1c3RlclNjb3BlRHVyYWJsZVdpdGhvdXROYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCmluZGV4IDI2YzhkNzIuLjI2NmQyYjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24tY2x1c3RlciIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGVuZHBvaW50IGFjdGl2YXRpb24iLz4KQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBjbHVzdGVyIHByb3BhZ2F0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgc2V0T1NQcm9wcyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTkwLDIxICs5MCwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke2RlcGxveS5jbHVzdGVyaW5zdGFuY2UxLm9yYnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24tY2x1c3RlciIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCA5NzMxYjllLi5lMjAyMDdkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDEsMTYgKzQxLDE2IEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBKTVNQcm9kdWNlciBwcm9kdWNlciA9IGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKTsKICAgICAgICAgcHJvZHVjZXIuc2VuZChyZXN1bHRRdWV1ZSwgbXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKaW5kZXggMjNhODkzNi4uYWI1NTc2NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4yIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MSwxNiArNDEsMTYgQEAKICAgICBASk1TQ29ubmVjdGlvbkZhY3RvcnkoImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgQEpNU1Nlc3Npb25Nb2RlKEpNU0NvbnRleHQuQVVUT19BQ0tOT1dMRURHRSkKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbjIoKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBKTVNQcm9kdWNlciBwcm9kdWNlciA9IGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKTsKICAgICAgICAgcHJvZHVjZXIuc2VuZChyZXN1bHRRdWV1ZSwgbXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCA3N2RlOGE1Li4zOGVmYmFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnNjcmlwdGlvblNjb3BlLWNsdXN0ZXItY2x1c3RlclNjb3BlTm9uRHVyYWJsZVdpdGhOYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCmluZGV4IGFhYzY5NTAuLmNjNTc0NzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24tY2x1c3RlciIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGNsdXN0ZXIgcHJvcGFnYXRpb24iLz4KQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBjbHVzdGVyIHByb3BhZ2F0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgc2V0T1NQcm9wcyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTkwLDIxICs5MCwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke2RlcGxveS5jbHVzdGVyaW5zdGFuY2UxLm9yYnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24tY2x1c3RlciIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCA2MGFkYmMwLi4zYTQwMjMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDIsMTYgKzQyLDE2IEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBKTVNQcm9kdWNlciBwcm9kdWNlciA9IGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKTsKICAgICAgICAgcHJvZHVjZXIuc2VuZChyZXN1bHRRdWV1ZSwgbXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKaW5kZXggOWM0MzE0Mi4uMDgzZmQ2YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4yIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MiwxNiArNDIsMTYgQEAKICAgICBASk1TQ29ubmVjdGlvbkZhY3RvcnkoImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgQEpNU1Nlc3Npb25Nb2RlKEpNU0NvbnRleHQuQVVUT19BQ0tOT1dMRURHRSkKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbjIoKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBKTVNQcm9kdWNlciBwcm9kdWNlciA9IGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKTsKICAgICAgICAgcHJvZHVjZXIuc2VuZChyZXN1bHRRdWV1ZSwgbXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCBjNWNmNTRjLi45NzdlMWQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnNjcmlwdGlvblNjb3BlLWNsdXN0ZXItY2x1c3RlclNjb3BlTm9uRHVyYWJsZVdpdGhvdXROYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCmluZGV4IDQ0YzAzM2EuLjU5ODUyZTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24tY2x1c3RlciIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGNsdXN0ZXIgcHJvcGFnYXRpb24iLz4KQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBjbHVzdGVyIHByb3BhZ2F0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgc2V0T1NQcm9wcyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTkwLDIxICs5MCwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke2RlcGxveS5jbHVzdGVyaW5zdGFuY2UxLm9yYnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24tY2x1c3RlciIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCA1NTc2OWUzLi4xZGY1NDU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDEsMTYgKzQxLDE2IEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBKTVNQcm9kdWNlciBwcm9kdWNlciA9IGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKTsKICAgICAgICAgcHJvZHVjZXIuc2VuZChyZXN1bHRRdWV1ZSwgbXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKaW5kZXggOTYxZDBjOS4uMTBhNWVjMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4yIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MSwxNiArNDEsMTYgQEAKICAgICBASk1TQ29ubmVjdGlvbkZhY3RvcnkoImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgQEpNU1Nlc3Npb25Nb2RlKEpNU0NvbnRleHQuQVVUT19BQ0tOT1dMRURHRSkKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbjIoKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBKTVNQcm9kdWNlciBwcm9kdWNlciA9IGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKTsKICAgICAgICAgcHJvZHVjZXIuc2VuZChyZXN1bHRRdWV1ZSwgbXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI1NTM4ZTEuLmUxMWM2NjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1jbHVzdGVyLWluc3RhbmNlU2NvcGVEdXJhYmxlV2l0aE5hbWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbAppbmRleCBmMDBlMzJkLi5lMjRhODY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24tY2x1c3RlciIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGVuZHBvaW50IGFjdGl2YXRpb24iLz4KQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBjbHVzdGVyIHByb3BhZ2F0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgc2V0T1NQcm9wcyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTkwLDIxICs5MCwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke2RlcGxveS5jbHVzdGVyaW5zdGFuY2UxLm9yYnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24tY2x1c3RlciIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggY2ZhZDM4YS4uNDdiMjVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCA2YmM5MjBiLi42ZmFmYTNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMzEsNyArMzEsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MiwxNiArNDIsMTYgQEAKICAgICBASk1TQ29ubmVjdGlvbkZhY3RvcnkoImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgQEpNU1Nlc3Npb25Nb2RlKEpNU0NvbnRleHQuQVVUT19BQ0tOT1dMRURHRSkKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIEpNU1Byb2R1Y2VyIHByb2R1Y2VyID0gam1zQ29udGV4dC5jcmVhdGVQcm9kdWNlcigpOwogICAgICAgICBwcm9kdWNlci5zZW5kKHJlc3VsdFF1ZXVlLCBtc2cpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCmluZGV4IGZjNTkwMzUuLjJmOWZhZmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4yIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MiwxNiArNDIsMTYgQEAKICAgICBASk1TQ29ubmVjdGlvbkZhY3RvcnkoImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgQEpNU1Nlc3Npb25Nb2RlKEpNU0NvbnRleHQuQVVUT19BQ0tOT1dMRURHRSkKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbjIoKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBKTVNQcm9kdWNlciBwcm9kdWNlciA9IGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKTsKICAgICAgICAgcHJvZHVjZXIuc2VuZChyZXN1bHRRdWV1ZSwgbXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGRkY2U5MTQuLjNmY2RiOTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1jbHVzdGVyLWluc3RhbmNlU2NvcGVEdXJhYmxlV2l0aG91dE5hbWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbAppbmRleCBiZjBkMjg3Li5hYzIwNDEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24tY2x1c3RlciIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGVuZHBvaW50IGFjdGl2YXRpb24iLz4KQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBjbHVzdGVyIHByb3BhZ2F0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgc2V0T1NQcm9wcyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTkwLDIxICs5MCwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke2RlcGxveS5jbHVzdGVyaW5zdGFuY2UxLm9yYnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24tY2x1c3RlciIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggY2ZhZDM4YS4uNDdiMjVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCAwMjdiNDA5Li4wNjY1NzE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMzAsNyArMzAsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MSwxNiArNDEsMTYgQEAKICAgICBASk1TQ29ubmVjdGlvbkZhY3RvcnkoImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgQEpNU1Nlc3Npb25Nb2RlKEpNU0NvbnRleHQuQVVUT19BQ0tOT1dMRURHRSkKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIEpNU1Byb2R1Y2VyIHByb2R1Y2VyID0gam1zQ29udGV4dC5jcmVhdGVQcm9kdWNlcigpOwogICAgICAgICBwcm9kdWNlci5zZW5kKHJlc3VsdFF1ZXVlLCBtc2cpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCmluZGV4IDk1NjE5ZjQuLjdhNmM2ZGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4yIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MSwxNiArNDEsMTYgQEAKICAgICBASk1TQ29ubmVjdGlvbkZhY3RvcnkoImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgQEpNU1Nlc3Npb25Nb2RlKEpNU0NvbnRleHQuQVVUT19BQ0tOT1dMRURHRSkKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbjIoKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBKTVNQcm9kdWNlciBwcm9kdWNlciA9IGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKTsKICAgICAgICAgcHJvZHVjZXIuc2VuZChyZXN1bHRRdWV1ZSwgbXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGJmYTk4MmUuLjg3MWJkMGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1jbHVzdGVyLWluc3RhbmNlU2NvcGVOb25EdXJhYmxlV2l0aE5hbWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbAppbmRleCBhN2Y3MDU3Li4zODNkNmI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24tY2x1c3RlciIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGNsdXN0ZXIgcHJvcGFnYXRpb24iLz4KQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBjbHVzdGVyIHByb3BhZ2F0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgc2V0T1NQcm9wcyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTkwLDIxICs5MCwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke2RlcGxveS5jbHVzdGVyaW5zdGFuY2UxLm9yYnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24tY2x1c3RlciIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggY2ZhZDM4YS4uNDdiMjVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCA0Y2UxZTI4Li4zMWRjMDJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMzEsNyArMzEsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MiwxNiArNDIsMTYgQEAKICAgICBASk1TQ29ubmVjdGlvbkZhY3RvcnkoImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgQEpNU1Nlc3Npb25Nb2RlKEpNU0NvbnRleHQuQVVUT19BQ0tOT1dMRURHRSkKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIEpNU1Byb2R1Y2VyIHByb2R1Y2VyID0gam1zQ29udGV4dC5jcmVhdGVQcm9kdWNlcigpOwogICAgICAgICBwcm9kdWNlci5zZW5kKHJlc3VsdFF1ZXVlLCBtc2cpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCmluZGV4IDAxOTRjNjYuLjZlZjNlNmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4yIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MiwxNiArNDIsMTYgQEAKICAgICBASk1TQ29ubmVjdGlvbkZhY3RvcnkoImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgQEpNU1Nlc3Npb25Nb2RlKEpNU0NvbnRleHQuQVVUT19BQ0tOT1dMRURHRSkKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbjIoKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBKTVNQcm9kdWNlciBwcm9kdWNlciA9IGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKTsKICAgICAgICAgcHJvZHVjZXIuc2VuZChyZXN1bHRRdWV1ZSwgbXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDUxN2FkOWUuLmI4Yzg4OWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1jbHVzdGVyLWluc3RhbmNlU2NvcGVOb25EdXJhYmxlV2l0aG91dE5hbWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbAppbmRleCA2MmY1ZWZjLi5kOWNhOTY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24tY2x1c3RlciIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGNsdXN0ZXIgcHJvcGFnYXRpb24iLz4KQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBjbHVzdGVyIHByb3BhZ2F0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgc2V0T1NQcm9wcyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTkwLDIxICs5MCwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke2RlcGxveS5jbHVzdGVyaW5zdGFuY2UxLm9yYnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24tY2x1c3RlciIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggY2ZhZDM4YS4uNDdiMjVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCA5ZTIwM2MzLi45ZmM4OTE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMzAsNyArMzAsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MSwxNiArNDEsMTYgQEAKICAgICBASk1TQ29ubmVjdGlvbkZhY3RvcnkoImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgQEpNU1Nlc3Npb25Nb2RlKEpNU0NvbnRleHQuQVVUT19BQ0tOT1dMRURHRSkKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIEpNU1Byb2R1Y2VyIHByb2R1Y2VyID0gam1zQ29udGV4dC5jcmVhdGVQcm9kdWNlcigpOwogICAgICAgICBwcm9kdWNlci5zZW5kKHJlc3VsdFF1ZXVlLCBtc2cpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCmluZGV4IDhhYmVjODUuLjgzMGIxZDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4yIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MSwxNiArNDEsMTYgQEAKICAgICBASk1TQ29ubmVjdGlvbkZhY3RvcnkoImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgQEpNU1Nlc3Npb25Nb2RlKEpNU0NvbnRleHQuQVVUT19BQ0tOT1dMRURHRSkKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbjIoKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBKTVNQcm9kdWNlciBwcm9kdWNlciA9IGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKTsKICAgICAgICAgcHJvZHVjZXIuc2VuZChyZXN1bHRRdWV1ZSwgbXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOWUyMWFjMS4uYzYzNjRhMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtY2x1c3Rlci1ub1Njb3BlRHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9idWlsZC54bWwKaW5kZXggYzkxODA4My4uZDUyMGQ5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24tY2x1c3RlciIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGVuZHBvaW50IGFjdGl2YXRpb24iLz4KQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBjbHVzdGVyIHByb3BhZ2F0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgc2V0T1NQcm9wcyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTkwLDIxICs5MCwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke2RlcGxveS5jbHVzdGVyaW5zdGFuY2UxLm9yYnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24tY2x1c3RlciIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCA5M2E1ZDM3Li4zOGYwZGU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQxLDE2ICs0MSwxNiBAQAogICAgIEBKTVNDb25uZWN0aW9uRmFjdG9yeSgiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBASk1TU2Vzc2lvbk1vZGUoSk1TQ29udGV4dC5BVVRPX0FDS05PV0xFREdFKQogICAgIHByaXZhdGUgSk1TQ29udGV4dCBqbXNDb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgSk1TUHJvZHVjZXIgcHJvZHVjZXIgPSBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCk7CiAgICAgICAgIHByb2R1Y2VyLnNlbmQocmVzdWx0UXVldWUsIG1zZyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCBkODlhODgzLi4xOTUwZTgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtY2x1c3Rlci1ub1Njb3BlRHVyYWJsZVdpdGhOYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKaW5kZXggYzAxZmQ4MS4uNjhiZGNiYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBlbmRwb2ludCBhY3RpdmF0aW9uIi8+CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgY2x1c3RlciBwcm9wYWdhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24sIHNldE9TUHJvcHMiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC05MCwyMSArOTAsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtkZXBsb3kuY2x1c3Rlcmluc3RhbmNlMS5vcmJwb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggMWE4MTRhZC4uN2ZlMmJjOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDIsMTYgKzQyLDE2IEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBKTVNQcm9kdWNlciBwcm9kdWNlciA9IGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKTsKICAgICAgICAgcHJvZHVjZXIuc2VuZChyZXN1bHRRdWV1ZSwgbXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZU5vdFNoYXJlZFdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVOb3RTaGFyZWRXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDIxOWEwYmMuLjk3OTA3Y2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZU5vdFNoYXJlZFdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlTm90U2hhcmVkV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1jbHVzdGVyLW5vU2NvcGVOb25EdXJhYmxlV2l0aE5hbWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZU5vdFNoYXJlZFdpdGhOYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZU5vdFNoYXJlZFdpdGhOYW1lL2J1aWxkLnhtbAppbmRleCBmOTUyMjMxLi4wMTllNDI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVOb3RTaGFyZWRXaXRoTmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlTm90U2hhcmVkV2l0aE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24tY2x1c3RlciIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGNsdXN0ZXIgcHJvcGFnYXRpb24iLz4KQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBjbHVzdGVyIHByb3BhZ2F0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgc2V0T1NQcm9wcyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTkwLDIxICs5MCwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke2RlcGxveS5jbHVzdGVyaW5zdGFuY2UxLm9yYnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24tY2x1c3RlciIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlTm90U2hhcmVkV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZU5vdFNoYXJlZFdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggY2ZhZDM4YS4uNDdiMjVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlTm90U2hhcmVkV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVOb3RTaGFyZWRXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlTm90U2hhcmVkV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVOb3RTaGFyZWRXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCAyYmE1MDAxLi4xOTVkZmYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVOb3RTaGFyZWRXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVOb3RTaGFyZWRXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMzEsNyArMzEsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MiwxNiArNDIsMTYgQEAKICAgICBASk1TQ29ubmVjdGlvbkZhY3RvcnkoImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgQEpNU1Nlc3Npb25Nb2RlKEpNU0NvbnRleHQuQVVUT19BQ0tOT1dMRURHRSkKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIEpNU1Byb2R1Y2VyIHByb2R1Y2VyID0gam1zQ29udGV4dC5jcmVhdGVQcm9kdWNlcigpOwogICAgICAgICBwcm9kdWNlci5zZW5kKHJlc3VsdFF1ZXVlLCBtc2cpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlTm90U2hhcmVkV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZU5vdFNoYXJlZFdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDI3MjUyMS4uOTdiZmUzZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlTm90U2hhcmVkV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVOb3RTaGFyZWRXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnNjcmlwdGlvblNjb3BlLWNsdXN0ZXItbm9TY29wZU5vbkR1cmFibGVXaXRob3V0TmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlTm90U2hhcmVkV2l0aG91dE5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlTm90U2hhcmVkV2l0aG91dE5hbWUvYnVpbGQueG1sCmluZGV4IDIzZGEzZmUuLjQ2MWRkMWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZU5vdFNoYXJlZFdpdGhvdXROYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVOb3RTaGFyZWRXaXRob3V0TmFtZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovTXlTZXNzaW9uQmVhbiouY2xhc3MsICoqLypNZXNzYWdlQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbi1jbHVzdGVyIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgY2x1c3RlciBwcm9wYWdhdGlvbiIvPgpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGNsdXN0ZXIgcHJvcGFnYXRpb24iLz4KICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjEwIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBzZXRPU1Byb3BzIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtOTAsMjEgKzkwLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmFjdGl2YXRpb25wcm9wZXJ0aWVzLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7ZGVwbG95LmNsdXN0ZXJpbnN0YW5jZTEub3JicG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbi1jbHVzdGVyIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVOb3RTaGFyZWRXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlTm90U2hhcmVkV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVOb3RTaGFyZWRXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZU5vdFNoYXJlZFdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVOb3RTaGFyZWRXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZU5vdFNoYXJlZFdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IDE3YWE4MDMuLmIyNWE1NzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZU5vdFNoYXJlZFdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZU5vdFNoYXJlZFdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQxLDE2ICs0MSwxNiBAQAogICAgIEBKTVNDb25uZWN0aW9uRmFjdG9yeSgiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBASk1TU2Vzc2lvbk1vZGUoSk1TQ29udGV4dC5BVVRPX0FDS05PV0xFREdFKQogICAgIHByaXZhdGUgSk1TQ29udGV4dCBqbXNDb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgSk1TUHJvZHVjZXIgcHJvZHVjZXIgPSBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCk7CiAgICAgICAgIHByb2R1Y2VyLnNlbmQocmVzdWx0UXVldWUsIG1zZyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCAyMTlhMGJjLi45NzkwN2NiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtY2x1c3Rlci1ub1Njb3BlTm9uRHVyYWJsZVdpdGhOYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKaW5kZXggZjk1MjIzMS4uMDE5ZTQyOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBjbHVzdGVyIHByb3BhZ2F0aW9uIi8+CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgY2x1c3RlciBwcm9wYWdhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24sIHNldE9TUHJvcHMiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC05MCwyMSArOTAsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtkZXBsb3kuY2x1c3Rlcmluc3RhbmNlMS5vcmJwb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggYWI0ZTFhNy4uOTE2N2I4NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDIsMTYgKzQyLDE2IEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBKTVNQcm9kdWNlciBwcm9kdWNlciA9IGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKTsKICAgICAgICAgcHJvZHVjZXIuc2VuZChyZXN1bHRRdWV1ZSwgbXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDAyNzI1MjEuLjk3YmZlM2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1jbHVzdGVyLW5vU2NvcGVOb25EdXJhYmxlV2l0aG91dE5hbWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbAppbmRleCAyM2RhM2ZlLi40NjFkZDFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24tY2x1c3RlciIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGNsdXN0ZXIgcHJvcGFnYXRpb24iLz4KQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBjbHVzdGVyIHByb3BhZ2F0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgc2V0T1NQcm9wcyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTkwLDIxICs5MCwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke2RlcGxveS5jbHVzdGVyaW5zdGFuY2UxLm9yYnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24tY2x1c3RlciIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggY2ZhZDM4YS4uNDdiMjVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCAwMzU3N2M0Li40MDIyNjUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMzAsNyArMzAsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MSwxNiArNDEsMTYgQEAKICAgICBASk1TQ29ubmVjdGlvbkZhY3RvcnkoImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgQEpNU1Nlc3Npb25Nb2RlKEpNU0NvbnRleHQuQVVUT19BQ0tOT1dMRURHRSkKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIEpNU1Byb2R1Y2VyIHByb2R1Y2VyID0gam1zQ29udGV4dC5jcmVhdGVQcm9kdWNlcigpOwogICAgICAgICBwcm9kdWNlci5zZW5kKHJlc3VsdFF1ZXVlLCBtc2cpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQwOWYwYjMuLmNhYWFkOWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtc3RhbmRhbG9uZS1lbWJlZGRlZC1jbHVzdGVyU2NvcGVEdXJhYmxlV2l0aE5hbWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKaW5kZXggZGJkNjczYy4uOTkxN2Q3OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovTXlTZXNzaW9uQmVhbiouY2xhc3MsICoqLypNZXNzYWdlQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGVuZHBvaW50IGFjdGl2YXRpb24iLz4KQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciByZXNvdXJjZSBjcmVhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NiwyMSArNzYsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCAwZGJmMTgxLi41MGEyNzk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDAsMTYgKzQwLDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKaW5kZXggOWFkZTc0Yi4uYjZjNjgyNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4yIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MCwxNiArNDAsMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuMigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCBmNzkzN2U5Li4zMTYwNjFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnNjcmlwdGlvblNjb3BlLXN0YW5kYWxvbmUtZW1iZWRkZWQtY2x1c3RlclNjb3BlRHVyYWJsZVdpdGhvdXROYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCmluZGV4IGVmMDEzYWYuLjMyODg1NjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBlbmRwb2ludCBhY3RpdmF0aW9uIi8+CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgcmVzb3VyY2UgY3JlYXRpb24iLz4KICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjEwIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzYsMjEgKzc2LDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmFjdGl2YXRpb25wcm9wZXJ0aWVzLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggNDFjZmQwYi4uMjFlOTVlMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTM5LDE2ICszOSwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCmluZGV4IDllNmQ3NjkuLmVhYzZkZGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuMiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4yLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtMzgsMTYgKzM4LDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbjIoKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGY0ZDM0Zi4uNGYzMGM0NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1zdGFuZGFsb25lLWVtYmVkZGVkLWNsdXN0ZXJTY29wZU5vbkR1cmFibGVXaXRoTmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbAppbmRleCA3YTFjYzVkLi5mYzM3ZmM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgZW5kcG9pbnQgYWN0aXZhdGlvbiIvPgpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIHJlc291cmNlIGNyZWF0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc2LDIxICs3NiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggY2ZhZDM4YS4uNDdiMjVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGExYmVhMGQuLjA4MjFjMjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMzEsNyArMzEsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MCwxNiArNDAsMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQppbmRleCA0ZTE2NTFmLi4wOTc0YTljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbjIgaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuMi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQwLDE2ICs0MCwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4yKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDc0MzEyNjMuLmJmNDFkNTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtc3RhbmRhbG9uZS1lbWJlZGRlZC1jbHVzdGVyU2NvcGVOb25EdXJhYmxlV2l0aG91dE5hbWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKaW5kZXggMDI5MDg0NS4uN2I1Yzc5NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovTXlTZXNzaW9uQmVhbiouY2xhc3MsICoqLypNZXNzYWdlQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGVuZHBvaW50IGFjdGl2YXRpb24iLz4KQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciByZXNvdXJjZSBjcmVhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NiwyMSArNzYsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCAxOGY1YWM4Li44NWM1MmUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtMzksMTYgKzM5LDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKaW5kZXggNmJkODkzNC4uMzI4ZTM2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4yIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC0zOSwxNiArMzksMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuMigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGZlOTU0ZDguLjM5OWI1NzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1zdGFuZGFsb25lLWVtYmVkZGVkLWluc3RhbmNlU2NvcGVEdXJhYmxlV2l0aE5hbWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbAppbmRleCA1YzRjYjE4Li4xMjZlN2U1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBlbmRwb2ludCBhY3RpdmF0aW9uIi8+CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgcmVzb3VyY2UgY3JlYXRpb24iLz4KICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjEwIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzYsMjEgKzc2LDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmFjdGl2YXRpb25wcm9wZXJ0aWVzLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggZDFjODIyNy4uYzYyN2FmYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDAsMTYgKzQwLDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQppbmRleCBjNDBmMTdmLi5iYjRmYjdmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuMiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4yLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDAsMTYgKzQwLDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbjIoKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCA0ZDIzM2ExLi40YWZiYzg2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtc3RhbmRhbG9uZS1lbWJlZGRlZC1pbnN0YW5jZVNjb3BlRHVyYWJsZVdpdGhvdXROYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKaW5kZXggMTNlMWRlNC4uNjUyNDhjMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgZW5kcG9pbnQgYWN0aXZhdGlvbiIvPgpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIHJlc291cmNlIGNyZWF0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc2LDIxICs3NiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGZmNmExNzAuLjcxNTQ0NmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTM5LDE2ICszOSwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKaW5kZXggODk5ODc2ZC4uZDg1Y2Y0MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbjIgaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuMi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTM5LDE2ICszOSwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4yKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjE5Mjk0NC4uMDdmMTc2ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnNjcmlwdGlvblNjb3BlLXN0YW5kYWxvbmUtZW1iZWRkZWQtaW5zdGFuY2VTY29wZU5vbkR1cmFibGVXaXRoTmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCmluZGV4IGZjNWEzYmIuLjljZjE2MWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovTXlTZXNzaW9uQmVhbiouY2xhc3MsICoqLypNZXNzYWdlQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGVuZHBvaW50IGFjdGl2YXRpb24iLz4KQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciByZXNvdXJjZSBjcmVhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NiwyMSArNzYsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggY2ZhZDM4YS4uNDdiMjVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCA3YjVkYjk1Li4yNmVlMzgyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMzEsNyArMzEsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MCwxNiArNDAsMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCmluZGV4IGUwNTFmNDguLjM4OWJlODcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4yIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MCwxNiArNDAsMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuMigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGU0YmE3YzUuLjY0NGE4Y2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1zdGFuZGFsb25lLWVtYmVkZGVkLWluc3RhbmNlU2NvcGVOb25EdXJhYmxlV2l0aG91dE5hbWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbAppbmRleCBkMWM4YjQ0Li4zNDkyOWVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBlbmRwb2ludCBhY3RpdmF0aW9uIi8+CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgcmVzb3VyY2UgY3JlYXRpb24iLz4KICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjEwIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzYsMjEgKzc2LDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmFjdGl2YXRpb25wcm9wZXJ0aWVzLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggYTY4ZDgwMy4uMDc5NmIzYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtMzksMTYgKzM5LDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQppbmRleCA1MmUyNzNiLi43NDdmZTAxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuMiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4yLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtMzksMTYgKzM5LDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbjIoKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDkzNmY5YTguLjJiZjNlN2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnNjcmlwdGlvblNjb3BlLXN0YW5kYWxvbmUtZW1iZWRkZWQtaW5zdGFuY2VTY29wZUR1cmFibGVOb0NsaWVudElkV2l0aE5hbWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvYnVpbGQueG1sCmluZGV4IDdmNTMzNmEuLjNkNzg5MTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgZW5kcG9pbnQgYWN0aXZhdGlvbiIvPgpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIHJlc291cmNlIGNyZWF0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc2LDIxICs3NiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGY5ZWNlOGIuLjdmZmFlZDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtMzksMTYgKzM5LDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGZlOTU0ZDguLjM5OWI1NzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1zdGFuZGFsb25lLWVtYmVkZGVkLWluc3RhbmNlU2NvcGVEdXJhYmxlV2l0aE5hbWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbAppbmRleCA1YzRjYjE4Li4xMjZlN2U1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBlbmRwb2ludCBhY3RpdmF0aW9uIi8+CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgcmVzb3VyY2UgY3JlYXRpb24iLz4KICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjEwIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzYsMjEgKzc2LDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmFjdGl2YXRpb25wcm9wZXJ0aWVzLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggYTM2YzdhMS4uOTc3Y2I2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDAsMTYgKzQwLDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDYxOTI5NDQuLjA3ZjE3NmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1zdGFuZGFsb25lLWVtYmVkZGVkLWluc3RhbmNlU2NvcGVOb25EdXJhYmxlV2l0aE5hbWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbAppbmRleCBmYzVhM2JiLi45Y2YxNjFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBlbmRwb2ludCBhY3RpdmF0aW9uIi8+CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgcmVzb3VyY2UgY3JlYXRpb24iLz4KICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjEwIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzYsMjEgKzc2LDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmFjdGl2YXRpb25wcm9wZXJ0aWVzLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggNWM5MTJkMi4uNTE4NjE2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDAsMTYgKzQwLDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGU0YmE3YzUuLjY0NGE4Y2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1zdGFuZGFsb25lLWVtYmVkZGVkLWluc3RhbmNlU2NvcGVOb25EdXJhYmxlV2l0aG91dE5hbWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbAppbmRleCBkMWM4YjQ0Li4zNDkyOWVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBlbmRwb2ludCBhY3RpdmF0aW9uIi8+CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgcmVzb3VyY2UgY3JlYXRpb24iLz4KICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjEwIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzYsMjEgKzc2LDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmFjdGl2YXRpb25wcm9wZXJ0aWVzLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggODkxNmNiMi4uMDYwOGQ4NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtMzksMTYgKzM5LDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCBlNGFmNmQwLi5iMzIzN2M3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnNjcmlwdGlvblNjb3BlLXN0YW5kYWxvbmUtbG9jYWwtY2x1c3RlclNjb3BlRHVyYWJsZVdpdGhOYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCmluZGV4IDAxNjYyMmYuLjU0NzNkMDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBlbmRwb2ludCBhY3RpdmF0aW9uIi8+CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgcmVzb3VyY2UgY3JlYXRpb24iLz4KICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjEwIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzYsMjEgKzc2LDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmFjdGl2YXRpb25wcm9wZXJ0aWVzLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggMGRiZjE4MS4uNTBhMjc5NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQwLDE2ICs0MCwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCmluZGV4IDlhZGU3NGIuLmI2YzY4MjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuMiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4yLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDAsMTYgKzQwLDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbjIoKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMTc3MWMzMi4uZTBiNDNlMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1zdGFuZGFsb25lLWxvY2FsLWNsdXN0ZXJTY29wZUR1cmFibGVXaXRob3V0TmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbAppbmRleCBhYTg1ZjU3Li45ZDMwZDA3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgZW5kcG9pbnQgYWN0aXZhdGlvbiIvPgpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIHJlc291cmNlIGNyZWF0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc2LDIxICs3NiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggY2ZhZDM4YS4uNDdiMjVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IDQxY2ZkMGIuLjIxZTk1ZTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMzAsNyArMzAsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC0zOSwxNiArMzksMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQppbmRleCAwMjEzNGI3Li4xMzJlMjQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbjIgaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuMi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTM5LDE2ICszOSwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4yKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGY5MzhhZTYuLmMxMDIxZjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtc3RhbmRhbG9uZS1sb2NhbC1jbHVzdGVyU2NvcGVOb25EdXJhYmxlV2l0aE5hbWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKaW5kZXggOWQ5MmUwYi4uOTk1MTdhZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovTXlTZXNzaW9uQmVhbiouY2xhc3MsICoqLypNZXNzYWdlQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGVuZHBvaW50IGFjdGl2YXRpb24iLz4KQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciByZXNvdXJjZSBjcmVhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NiwyMSArNzYsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCBhMWJlYTBkLi4wODIxYzIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDAsMTYgKzQwLDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKaW5kZXggNGUxNjUxZi4uMDk3NGE5YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4yIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MCwxNiArNDAsMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuMigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCAzY2NlOGU4Li43OGJmNDY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnNjcmlwdGlvblNjb3BlLXN0YW5kYWxvbmUtbG9jYWwtY2x1c3RlclNjb3BlTm9uRHVyYWJsZVdpdGhvdXROYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCmluZGV4IDFiMWQ0Y2UuLmJkMTIyZTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBlbmRwb2ludCBhY3RpdmF0aW9uIi8+CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgcmVzb3VyY2UgY3JlYXRpb24iLz4KICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjEwIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzYsMjEgKzc2LDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmFjdGl2YXRpb25wcm9wZXJ0aWVzLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggYmY3N2U2MC4uMDFmZGZkMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTM4LDE2ICszOCwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCmluZGV4IDZiZDg5MzQuLjMyOGUzNjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuMiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4yLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtMzksMTYgKzM5LDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbjIoKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCBlMzU1NTIyLi44NWQyZjIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtc3RhbmRhbG9uZS1sb2NhbC1pbnN0YW5jZVNjb3BlRHVyYWJsZVdpdGhOYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKaW5kZXggMjhjZDI0MS4uNTlkZWQxNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgZW5kcG9pbnQgYWN0aXZhdGlvbiIvPgpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIHJlc291cmNlIGNyZWF0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc2LDIxICs3NiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGQxYzgyMjcuLmM2MjdhZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQwLDE2ICs0MCwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKaW5kZXggYzQwZjE3Zi4uYmI0ZmI3ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbjIgaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuMi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQwLDE2ICs0MCwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4yKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODEzZmE0Zi4uY2NmZGUxZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnNjcmlwdGlvblNjb3BlLXN0YW5kYWxvbmUtbG9jYWwtaW5zdGFuY2VTY29wZUR1cmFibGVXaXRob3V0TmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCmluZGV4IGU3Mjc5MzAuLmQ4YjM5Y2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovTXlTZXNzaW9uQmVhbiouY2xhc3MsICoqLypNZXNzYWdlQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGVuZHBvaW50IGFjdGl2YXRpb24iLz4KQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciByZXNvdXJjZSBjcmVhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NiwyMSArNzYsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggY2ZhZDM4YS4uNDdiMjVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCBmZjZhMTcwLi43MTU0NDZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMzAsNyArMzAsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC0zOSwxNiArMzksMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCmluZGV4IDg5OTg3NmQuLmQ4NWNmNDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4yIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC0zOSwxNiArMzksMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuMigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQ0Njg2NDMuLjM1MGQxMzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1zdGFuZGFsb25lLWxvY2FsLWluc3RhbmNlU2NvcGVOb25EdXJhYmxlV2l0aE5hbWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbAppbmRleCA4YzkzNjk4Li4zZTNkOTkwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBlbmRwb2ludCBhY3RpdmF0aW9uIi8+CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgcmVzb3VyY2UgY3JlYXRpb24iLz4KICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjEwIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzYsMjEgKzc2LDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmFjdGl2YXRpb25wcm9wZXJ0aWVzLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggN2I1ZGI5NS4uMjZlZTM4MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDAsMTYgKzQwLDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQppbmRleCAzNTMwYTg2Li4wMGE3YjIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuMiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4yLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDAsMTYgKzQwLDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbjIoKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCBkOTJjNjMyLi4wNWUyMDc4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtc3RhbmRhbG9uZS1sb2NhbC1pbnN0YW5jZVNjb3BlTm9uRHVyYWJsZVdpdGhvdXROYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKaW5kZXggOTA5MTE0Yy4uNGZkYWQ2ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgZW5kcG9pbnQgYWN0aXZhdGlvbiIvPgpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIHJlc291cmNlIGNyZWF0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc2LDIxICs3NiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGE2OGQ4MDMuLjA3OTZiM2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTM5LDE2ICszOSwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKaW5kZXggNTJlMjczYi4uNzQ3ZmUwMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbjIgaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuMi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTM5LDE2ICszOSwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4yKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCAyYmY0M2RlLi41ZDBhMDkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1zdGFuZGFsb25lLWxvY2FsLW5vU2NvcGVEdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2J1aWxkLnhtbAppbmRleCAzMjQ5MDIxLi5jNzQ3ZGViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovTXlTZXNzaW9uQmVhbiouY2xhc3MsICoqLypNZXNzYWdlQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGVuZHBvaW50IGFjdGl2YXRpb24iLz4KQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciByZXNvdXJjZSBjcmVhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NiwyMSArNzYsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCBmOWVjZThiLi43ZmZhZWQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTM5LDE2ICszOSwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCA3OTlhOTRmLi5kMDcxNGIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtc3RhbmRhbG9uZS1sb2NhbC1ub1Njb3BlRHVyYWJsZVdpdGhOYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKaW5kZXggYTAyYTM1Yy4uMDk2OGZhNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgZW5kcG9pbnQgYWN0aXZhdGlvbiIvPgpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIHJlc291cmNlIGNyZWF0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc2LDIxICs3NiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGEzNmM3YTEuLjk3N2NiNjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQwLDE2ICs0MCwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCAyZDE3YzI2Li41NzYzZTE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtc3RhbmRhbG9uZS1sb2NhbC1ub1Njb3BlTm9uRHVyYWJsZVdpdGhOYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKaW5kZXggMjk2YzU3My4uYjE3MWQ3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgZW5kcG9pbnQgYWN0aXZhdGlvbiIvPgpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIHJlc291cmNlIGNyZWF0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc2LDIxICs3NiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IDVjOTEyZDIuLjUxODYxNjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQwLDE2ICs0MCwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCA4OWEyMmI4Li5mMDU2MTZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtc3RhbmRhbG9uZS1sb2NhbC1ub1Njb3BlTm9uRHVyYWJsZVdpdGhvdXROYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKaW5kZXggZjQ3ZDY5ZS4uY2FlOTE1ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgZW5kcG9pbnQgYWN0aXZhdGlvbiIvPgpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIHJlc291cmNlIGNyZWF0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc2LDIxICs3NiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IDg5MTZjYjIuLjA2MDhkODQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTM5LDE2ICszOSwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYW5ub3RhdGlvbi9NREIxL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYW5ub3RhdGlvbi9NREIxL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTg2OTFkMS4uZWNmZmZmOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2Fubm90YXRpb24vTURCMS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hbm5vdGF0aW9uL01EQjEvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iYW5ub3RhdGlvbnQtbWRiMSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hbm5vdGF0aW9uL01EQjIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hbm5vdGF0aW9uL01EQjIvYnVpbGQucHJvcGVydGllcwppbmRleCBiMmZjODcwLi40ZGMxZWUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYW5ub3RhdGlvbi9NREIyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2Fubm90YXRpb24vTURCMi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJhbm5vdGF0aW9udC1tZGIyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2Fubm90YXRpb24vTURCMy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2Fubm90YXRpb24vTURCMy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDNkZjhiOTcuLjAxMDQyYTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hbm5vdGF0aW9uL01EQjMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYW5ub3RhdGlvbi9NREIzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImFubm90YXRpb250LW1kYjMiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYW5ub3RhdGlvbi9zZXNzaW9uQmVhbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2Fubm90YXRpb24vc2Vzc2lvbkJlYW4vYnVpbGQucHJvcGVydGllcwppbmRleCBmOTc5M2YyLi40ODg1NTI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYW5ub3RhdGlvbi9zZXNzaW9uQmVhbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hbm5vdGF0aW9uL3Nlc3Npb25CZWFuL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImFubm90YXRpb24tc3RhdGVsZXNzLWVqYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYnVpbGQueG1sCmluZGV4IDlmY2FhOGYuLmIwOGE2ZWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2J1aWxkLnhtbApAQCAtMTAzLDkgKzEwMyw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGptcyB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBqbXMgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2NvbmZpZy9jb21tb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2NvbmZpZy9jb21tb24ueG1sCmluZGV4IGVhZTZiZjguLmIxNzZhM2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9jb25maWcvY29tbW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvY29uZmlnL2NvbW1vbi54bWwKQEAgLTEyMCw3ICsxMjAsNyBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iZGVsZXRlQ2x1c3RlciI+Ci0gICAgPCEtLSBzdG9wLWNsdXN0ZXIgZG9lcyBub3Qgd29yayBzbyB1c2Ugc3RvcC1pbnN0YW5jZSB0byBtYWtlIHN1cmUgCisgICAgPCEtLSBzdG9wLWNsdXN0ZXIgZG9lcyBub3Qgd29yayBzbyB1c2Ugc3RvcC1pbnN0YW5jZSB0byBtYWtlIHN1cmUKICAgICAgICAgIGluc3RhbmNlIGlzIHN0b3BwZWQgYmVmb3JlIGRlbGV0aW5nIGl0IC0tPgogICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcuLi4gYXNhZG1pbiBzdG9wLWluc3RhbmNlIi8+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CkBAIC0xNjMsOCArMTYzLDggQEAKIDwhLS0KICAgT24gV2luZG93cywgYW50IGhhbmdzIHdoZW4gaXQgcnVucyBhbiBhc2FkbWluIGNvbW1hbmQgdGhhdCBzdGFydHMgYSBwcm9jZXNzLgogICBUbyB3b3JrIGFyb3VuZCB0aGF0LCB0aGlzIHRhc2sgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIFdpbmRvd3MgYW5kIG5vbi1XaW5kb3dzCi0gIHN5c3RlbXMgYW5kIHVzZXMgYSBjdXN0b20gYW50IHRhc2sgZm9yIFdpbmRvd3MuIAotICAKKyAgc3lzdGVtcyBhbmQgdXNlcyBhIGN1c3RvbSBhbnQgdGFzayBmb3IgV2luZG93cy4KKwogICBBbnkgdGVzdCB0aGF0IG5lZWRzIHRvIHN0YXJ0IGEgcHJvY2VzcyBzaG91bGQgTk9UIHVzZSAke0FTQURNSU59IGRpcmVjdGx5CiAgIGJ1dCBzaG91bGQgY2FsbCB0aGlzIHN0YXJ0LXByb2Nlc3MgdGFyZ2V0IGluc3RlYWQuICBQYXNzIHRoZSBjb21tYW5kIGxpbmUKICAgdG8gYmUgcnVuIGFzIDxwYXJhbSBuYW1lPSJsaW5lIiB2YWx1ZT0iLi4uIi8+LgpAQCAtMTgyLDcgKzE4Miw3IEBACiAgICAgICA8aXNzZXQgcHJvcGVydHk9InN0YXJ0LXRhcmdldCIvPgogICAgIDwvbm90PgogICA8L2NvbmRpdGlvbj4KLSAgCisKICAgPCEtLQogICAgIEludm9rZSB0aGUgdGFyZ2V0IGp1c3QgY2hvc2VuLgogICAtLT4KQEAgLTIwOSw3ICsyMDksNyBAQAogPC90YXJnZXQ+CiAKIDwhLS0KLSAgRm9yIG5vbi1XaW5kb3dzIHN5c3RlbXMsIGFudCB3b3JrcyBmaW5lIHdoZW4gaW52b2tpbmcgYXNhZG1pbiB0byBzdGFydCBhIAorICBGb3Igbm9uLVdpbmRvd3Mgc3lzdGVtcywgYW50IHdvcmtzIGZpbmUgd2hlbiBpbnZva2luZyBhc2FkbWluIHRvIHN0YXJ0IGEKICAgcHJvY2Vzcywgc28gZG8gaXQgdGhhdCB3YXkgZm9yIHRob3NlIHN5c3RlbXMuCiAtLT4KIDx0YXJnZXQgbmFtZT0ic3RhcnQtcHJvY2Vzcy1ub24td2luZG93cyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2RlZmF1bHRDRi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2RlZmF1bHRDRi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDJiYTM2MzguLmJiZjhlMWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9kZWZhdWx0Q0YvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvZGVmYXVsdENGL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Imptcy1kZWZhdWx0LWNvbm5lY3Rpb24tZmFjdG9yeS1lamIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvZGVmYXVsdENGL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9kZWZhdWx0Q0YvYnVpbGQueG1sCmluZGV4IDE3NjE1YzguLmNkYjFjMGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9kZWZhdWx0Q0YvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9kZWZhdWx0Q0YvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogQ29tcGlsaW5nIHRlc3Qgc291cmNlIGZpbGVzIiBsZXZlbD0idmVyYm9zZSIvPgpAQCAtNTIsMTQgKzUyLDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TZXNzaW9uQmVhbkRlZmF1bHQqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovU2Vzc2lvbkJlYW5EZWZhdWx0Ki5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzcsMjEgKzc3LDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmRlZmF1bHRjZi5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBhbGwgdG8gdGVzdCBqbXMgZGVmYXVsdCBjb25uZWN0aW9uIGZhY3RvcnkKICAgICAgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2RlZmF1bHRDRi9lamIvU2Vzc2lvbkJlYW5EZWZhdWx0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvZGVmYXVsdENGL2VqYi9TZXNzaW9uQmVhbkRlZmF1bHQuamF2YQppbmRleCBlY2Q3NmRhLi45N2ZiZmY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvZGVmYXVsdENGL2VqYi9TZXNzaW9uQmVhbkRlZmF1bHQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvZGVmYXVsdENGL2VqYi9TZXNzaW9uQmVhbkRlZmF1bHQuamF2YQpAQCAtMzIsMTAgKzMyLDEwIEBACiAKICAgICBAUmVzb3VyY2UobmFtZT0ibXlDRjAiLCBsb29rdXA9Imptcy9fX2RlZmF1bHRDb25uZWN0aW9uRmFjdG9yeSIpCiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uRmFjdG9yeSBjZjA7Ci0gICAgCisKICAgICBAUmVzb3VyY2UobmFtZT0ibXlDRjEiLCBsb29rdXA9ImphdmE6Y29tcC9EZWZhdWx0Sk1TQ29ubmVjdGlvbkZhY3RvcnkiKQogICAgIHByaXZhdGUgQ29ubmVjdGlvbkZhY3RvcnkgY2YxOwotICAgIAorCiAgICAgQFJlc291cmNlKG5hbWU9Im15Q0YyIikKICAgICBwcml2YXRlIENvbm5lY3Rpb25GYWN0b3J5IGNmMjsKIApAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGNvbm4gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2RlZmF1bHRDRi9lamIvU2Vzc2lvbkJlYW5EZWZhdWx0UmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvZGVmYXVsdENGL2VqYi9TZXNzaW9uQmVhbkRlZmF1bHRSZW1vdGUuamF2YQppbmRleCBlMGFmNWJkLi5iNzY4NDcyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvZGVmYXVsdENGL2VqYi9TZXNzaW9uQmVhbkRlZmF1bHRSZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvZGVmYXVsdENGL2VqYi9TZXNzaW9uQmVhbkRlZmF1bHRSZW1vdGUuamF2YQpAQCAtMjcsNiArMjcsNiBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIFNlc3Npb25CZWFuRGVmYXVsdC5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7CiAKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9idWlsZC54bWwKaW5kZXggNDE0NjM5OS4uNGU2Y2Y1OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvYnVpbGQueG1sCkBAIC0xMTYsOSArMTE2LDkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgam1zIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGptcyB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JSZXF1ZXN0U2NvcGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JSZXF1ZXN0U2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDY4MzEzOC4uMmZmYjE3NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2VqYkludGVyY2VwdG9yUmVxdWVzdFNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9lamJJbnRlcmNlcHRvclJlcXVlc3RTY29wZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam1zLWluamVjdGlvbi1qc2YiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JSZXF1ZXN0U2NvcGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9lamJJbnRlcmNlcHRvclJlcXVlc3RTY29wZWQvYnVpbGQueG1sCmluZGV4IGRmZWY4MDAuLjczOWVjYmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9lamJJbnRlcmNlcHRvclJlcXVlc3RTY29wZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9lamJJbnRlcmNlcHRvclJlcXVlc3RTY29wZWQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0ludGVyY2VwdG9ySW5qZWN0aW9uKi5jbGFzcywqKi9NeUludGVyY2VwdG9yLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovSW50ZXJjZXB0b3JJbmplY3Rpb24qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03MSwyMSArNzEsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuaW5qZWN0aW9uLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9lamJJbnRlcmNlcHRvclJlcXVlc3RTY29wZWQvZWpiL0ludGVyY2VwdG9ySW5qZWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JSZXF1ZXN0U2NvcGVkL2VqYi9JbnRlcmNlcHRvckluamVjdGlvbi5qYXZhCmluZGV4IGJhNDFhMmMuLjA0MmQ2OTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9lamJJbnRlcmNlcHRvclJlcXVlc3RTY29wZWQvZWpiL0ludGVyY2VwdG9ySW5qZWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2VqYkludGVyY2VwdG9yUmVxdWVzdFNjb3BlZC9lamIvSW50ZXJjZXB0b3JJbmplY3Rpb24uamF2YQpAQCAtMjksNyArMjksNyBAQAogQFN0YXRlbGVzcyhtYXBwZWROYW1lPSJJbnRlcmNlcHRvckluamVjdGlvbi9yZW1vdGUiKQogcHVibGljIGNsYXNzIEludGVyY2VwdG9ySW5qZWN0aW9uIGltcGxlbWVudHMgSW50ZXJjZXB0b3JJbmplY3Rpb25SZW1vdGUgewogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyByZXF1ZXN0U2NvcGUgPSAiYXJvdW5kIFJlcXVlc3RTY29wZWQiOwotCQorCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUXVldWUiKQogICAgIHByaXZhdGUgUXVldWUgcXVldWU7CiAKQEAgLTQwLDcgKzQwLDcgQEAKIAogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBAT3ZlcnJpZGUKLSAgICBASW50ZXJjZXB0b3JzKE15SW50ZXJjZXB0b3IuY2xhc3MpIAorICAgIEBJbnRlcmNlcHRvcnMoTXlJbnRlcmNlcHRvci5jbGFzcykKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCkgewogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2VqYkludGVyY2VwdG9yUmVxdWVzdFNjb3BlZC9lamIvSW50ZXJjZXB0b3JJbmplY3Rpb25SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9lamJJbnRlcmNlcHRvclJlcXVlc3RTY29wZWQvZWpiL0ludGVyY2VwdG9ySW5qZWN0aW9uUmVtb3RlLmphdmEKaW5kZXggZjkxY2U3ZS4uMmViZDBkOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2VqYkludGVyY2VwdG9yUmVxdWVzdFNjb3BlZC9lamIvSW50ZXJjZXB0b3JJbmplY3Rpb25SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JSZXF1ZXN0U2NvcGVkL2VqYi9JbnRlcmNlcHRvckluamVjdGlvblJlbW90ZS5qYXZhCkBAIC0yNyw2ICsyNyw2IEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgSW50ZXJjZXB0b3JJbmplY3Rpb24uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwogCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tNZXNzYWdlQW5kU2NvcGVkKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9lamJJbnRlcmNlcHRvclRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JUcmFuc2FjdGlvblNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQ2ODMxMzguLjJmZmIxNzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9lamJJbnRlcmNlcHRvclRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2VqYkludGVyY2VwdG9yVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam1zLWluamVjdGlvbi1qc2YiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JUcmFuc2FjdGlvblNjb3BlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JUcmFuc2FjdGlvblNjb3BlZC9idWlsZC54bWwKaW5kZXggNWQxNWI3Mi4uNzVmZTAwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2VqYkludGVyY2VwdG9yVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9lamJJbnRlcmNlcHRvclRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9JbnRlcmNlcHRvckluamVjdGlvbiouY2xhc3MsKiovTXlJbnRlcmNlcHRvci5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL0ludGVyY2VwdG9ySW5qZWN0aW9uKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzEsMjEgKzcxLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmluamVjdGlvbi5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JUcmFuc2FjdGlvblNjb3BlZC9lamIvSW50ZXJjZXB0b3JJbmplY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9lamJJbnRlcmNlcHRvclRyYW5zYWN0aW9uU2NvcGVkL2VqYi9JbnRlcmNlcHRvckluamVjdGlvbi5qYXZhCmluZGV4IDEyY2QyMGEuLmUzNGFjMGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9lamJJbnRlcmNlcHRvclRyYW5zYWN0aW9uU2NvcGVkL2VqYi9JbnRlcmNlcHRvckluamVjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9lamJJbnRlcmNlcHRvclRyYW5zYWN0aW9uU2NvcGVkL2VqYi9JbnRlcmNlcHRvckluamVjdGlvbi5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7CiAKICAgICBAT3ZlcnJpZGUKLSAgICBASW50ZXJjZXB0b3JzKE15SW50ZXJjZXB0b3IuY2xhc3MpIAorICAgIEBJbnRlcmNlcHRvcnMoTXlJbnRlcmNlcHRvci5jbGFzcykKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCkgewogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2VqYkludGVyY2VwdG9yVHJhbnNhY3Rpb25TY29wZWQvZWpiL0ludGVyY2VwdG9ySW5qZWN0aW9uUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JUcmFuc2FjdGlvblNjb3BlZC9lamIvSW50ZXJjZXB0b3JJbmplY3Rpb25SZW1vdGUuamF2YQppbmRleCBmOTFjZTdlLi4yZWJkMGQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JUcmFuc2FjdGlvblNjb3BlZC9lamIvSW50ZXJjZXB0b3JJbmplY3Rpb25SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JUcmFuc2FjdGlvblNjb3BlZC9lamIvSW50ZXJjZXB0b3JJbmplY3Rpb25SZW1vdGUuamF2YQpAQCAtMjcsNiArMjcsNiBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIEludGVyY2VwdG9ySW5qZWN0aW9uLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKIAogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrTWVzc2FnZUFuZFNjb3BlZChTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JUcmFuc2FjdGlvblNjb3BlZC9lamIvTXlJbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2VqYkludGVyY2VwdG9yVHJhbnNhY3Rpb25TY29wZWQvZWpiL015SW50ZXJjZXB0b3IuamF2YQppbmRleCA4MWMwN2NkLi42OThmYmNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JUcmFuc2FjdGlvblNjb3BlZC9lamIvTXlJbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9lamJJbnRlcmNlcHRvclRyYW5zYWN0aW9uU2NvcGVkL2VqYi9NeUludGVyY2VwdG9yLmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICBwdWJsaWMgT2JqZWN0IHNlbmRNc2coSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBPYmplY3RbXSBwYXJhbXMgPSBjdHguZ2V0UGFyYW1ldGVycygpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgbG9va3VwUXVldWUoKTsKICAgICAgICAgICAgIEpNU1Byb2R1Y2VyIHByb2R1Y2VyID0gam1zQ29udGV4dC5jcmVhdGVQcm9kdWNlcigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlJlcXVlc3RTY29wZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZSZXF1ZXN0U2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDY4MzEzOC4uMmZmYjE3NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlJlcXVlc3RTY29wZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmUmVxdWVzdFNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqbXMtaW5qZWN0aW9uLWpzZiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZSZXF1ZXN0U2NvcGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZSZXF1ZXN0U2NvcGVkL2J1aWxkLnhtbAppbmRleCAxMzdmNjQ2Li4zYzIwMDE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmUmVxdWVzdFNjb3BlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlJlcXVlc3RTY29wZWQvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuLWNsYXNzZXMtZGlyIj4KLSAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgIAorICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1lamIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1lamIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXdlYiIgZGVwZW5kcz0iY29tcGlsZS13ZWIiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIApAQCAtNzIsNDIgKzcyLDQyIEBACiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHthcHBjbGllbnQuamFyfSIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLWNsaWVudC54bWx9IgotICAgICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiIAorICAgICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9nbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbCIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIgCi0gICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IioqLyouY2xhc3MiIAotICAgICAgICAgICAgIG1hbmlmZXN0PSIuL2NsaWVudC9NQU5JRkVTVC5NRiI+ICAgICAgICAgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthcHBjbGllbnQuamFyfSIgYmFzZWRpcj0iJHthcHBjbGllbnRqYXIuZmlsZXN9IgorICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIqKi8qLmNsYXNzIgorICAgICAgICAgICAgIG1hbmlmZXN0PSIuL2NsaWVudC9NQU5JRkVTVC5NRiI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiI+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJnbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgICAgICAgICA8L21ldGFpbmY+Ci0gICAgICAgIDwvamFyPiAgIAorICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtZWFyIj4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgIAotICAgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgIAlmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gICAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgIAlmYWlsb25lcnJvcj0iZmFsc2UiLz4gCisgICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMtZWFyLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIgIGZpbHRlcmluZz0idHJ1ZSIvPgotICAgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4gCisgICAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+Ci0gICAgICAgIAk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci0gICAgICAgIAk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIi8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9ImxpYi9yZXBvcnRlci5qYXIiLz4KLSAgICAgICAgICA8L2phcj4gICAgICAgIAorICAgICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQtZWpiLCBidWlsZC13ZWIsIGJ1aWxkLWNsaWVudCwgYnVpbGQtZWFyIi8+CkBAIC0xMTcsNyArMTE3LDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC0xMjksNyArMTI5LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KQEAgLTEzOSwxMCArMTM5LDEwIEBACiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZSZXF1ZXN0U2NvcGVkL2NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmUmVxdWVzdFNjb3BlZC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IDkxZDA1YTcuLmQ4Y2RhNjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZSZXF1ZXN0U2NvcGVkL2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlJlcXVlc3RTY29wZWQvY2xpZW50L1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHJlc291cmNlIGluamVjdGlvbiBpbnRvIHNlcnZsZXQgIgpAQCAtNTcsMTQgKzU3LDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9mYWNlcy9uZXdqc2YueGh0bWwiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiICsKICAgICAgICAgICAgICAgICAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZSZXF1ZXN0U2NvcGVkL2VqYi9NZXNzYWdlUmVjZWl2ZXJSZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZSZXF1ZXN0U2NvcGVkL2VqYi9NZXNzYWdlUmVjZWl2ZXJSZW1vdGUuamF2YQppbmRleCAyMjMwMjEzLi42NTUxYWI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmUmVxdWVzdFNjb3BlZC9lamIvTWVzc2FnZVJlY2VpdmVyUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlJlcXVlc3RTY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhCkBAIC0yNSw2ICsyNSw2IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE1lc3NhZ2VSZWNlaXZlclJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTWVzc2FnZVJlY2VpdmVyQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlJlcXVlc3RTY29wZWQvc2VydmxldC9jb20vb3JhY2xlL2ptcy90ZXN0L05ld0pTRk1hbmFnZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmUmVxdWVzdFNjb3BlZC9zZXJ2bGV0L2NvbS9vcmFjbGUvam1zL3Rlc3QvTmV3SlNGTWFuYWdlZEJlYW4uamF2YQppbmRleCA5ZWZiNTE4Li45YzlhMGYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmUmVxdWVzdFNjb3BlZC9zZXJ2bGV0L2NvbS9vcmFjbGUvam1zL3Rlc3QvTmV3SlNGTWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmUmVxdWVzdFNjb3BlZC9zZXJ2bGV0L2NvbS9vcmFjbGUvam1zL3Rlc3QvTmV3SlNGTWFuYWdlZEJlYW4uamF2YQpAQCAtNDgsMTQgKzQ4LDE0IEBACiAgICAgICovCiAgICAgcHVibGljIE5ld0pTRk1hbmFnZWRCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN0cmluZyB0ZXh0ID0gIkpTRiBIZWxsbyBXb3JsZCEiOwogICAgICAgICAgICAgSk1TUHJvZHVjZXIgcHJvZHVjZXIgPSBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCk7CiAgICAgICAgICAgICBUZXh0TWVzc2FnZSBtc2cgPSBqbXNDb250ZXh0LmNyZWF0ZVRleHRNZXNzYWdlKHRleHQpOwogICAgICAgICAgICAgcHJvZHVjZXIuc2VuZChxdWV1ZSwgbXNnKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZihqbXNDb250ZXh0LnRvU3RyaW5nKCkuaW5kZXhPZihyZXF1ZXN0U2NvcGUpID09IC0xKXsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTk9UIGluIHJlcXVlc3RTY29wZSBzY29wZSEiKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZUcmFuc2FjdGlvblNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDY4MzEzOC4uMmZmYjE3NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Imptcy1pbmplY3Rpb24tanNmIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZUcmFuc2FjdGlvblNjb3BlZC9idWlsZC54bWwKaW5kZXggMTM3ZjY0Ni4uM2MyMDAxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuLWNsYXNzZXMtZGlyIj4KLSAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgIAorICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1lamIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1lamIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXdlYiIgZGVwZW5kcz0iY29tcGlsZS13ZWIiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIApAQCAtNzIsNDIgKzcyLDQyIEBACiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHthcHBjbGllbnQuamFyfSIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLWNsaWVudC54bWx9IgotICAgICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiIAorICAgICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9nbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbCIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIgCi0gICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IioqLyouY2xhc3MiIAotICAgICAgICAgICAgIG1hbmlmZXN0PSIuL2NsaWVudC9NQU5JRkVTVC5NRiI+ICAgICAgICAgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthcHBjbGllbnQuamFyfSIgYmFzZWRpcj0iJHthcHBjbGllbnRqYXIuZmlsZXN9IgorICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIqKi8qLmNsYXNzIgorICAgICAgICAgICAgIG1hbmlmZXN0PSIuL2NsaWVudC9NQU5JRkVTVC5NRiI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiI+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJnbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgICAgICAgICA8L21ldGFpbmY+Ci0gICAgICAgIDwvamFyPiAgIAorICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtZWFyIj4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgIAotICAgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgIAlmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gICAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgIAlmYWlsb25lcnJvcj0iZmFsc2UiLz4gCisgICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMtZWFyLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIgIGZpbHRlcmluZz0idHJ1ZSIvPgotICAgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4gCisgICAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+Ci0gICAgICAgIAk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci0gICAgICAgIAk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIi8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9ImxpYi9yZXBvcnRlci5qYXIiLz4KLSAgICAgICAgICA8L2phcj4gICAgICAgIAorICAgICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQtZWpiLCBidWlsZC13ZWIsIGJ1aWxkLWNsaWVudCwgYnVpbGQtZWFyIi8+CkBAIC0xMTcsNyArMTE3LDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC0xMjksNyArMTI5LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KQEAgLTEzOSwxMCArMTM5LDEwIEBACiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZUcmFuc2FjdGlvblNjb3BlZC9jbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlRyYW5zYWN0aW9uU2NvcGVkL2NsaWVudC9XZWJUZXN0LmphdmEKaW5kZXggOGQ4MmU1ZC4uZWM4ZDNiZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlRyYW5zYWN0aW9uU2NvcGVkL2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlRyYW5zYWN0aW9uU2NvcGVkL2NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciByZXNvdXJjZSBpbmplY3Rpb24gaW50byBzZXJ2bGV0ICIKQEAgLTU3LDE0ICs1NywxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvZmFjZXMvbmV3anNmLnhodG1sIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIiArCiAgICAgICAgICAgICAgICAgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmVHJhbnNhY3Rpb25TY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlRyYW5zYWN0aW9uU2NvcGVkL2VqYi9NZXNzYWdlUmVjZWl2ZXJSZW1vdGUuamF2YQppbmRleCAyMjMwMjEzLi42NTUxYWI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmVHJhbnNhY3Rpb25TY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZUcmFuc2FjdGlvblNjb3BlZC9lamIvTWVzc2FnZVJlY2VpdmVyUmVtb3RlLmphdmEKQEAgLTI1LDYgKzI1LDYgQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTWVzc2FnZVJlY2VpdmVyUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNZXNzYWdlUmVjZWl2ZXJCZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmVHJhbnNhY3Rpb25TY29wZWQvc2VydmxldC9jb20vb3JhY2xlL2ptcy90ZXN0L05ld0pTRk1hbmFnZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmVHJhbnNhY3Rpb25TY29wZWQvc2VydmxldC9jb20vb3JhY2xlL2ptcy90ZXN0L05ld0pTRk1hbmFnZWRCZWFuLmphdmEKaW5kZXggOWFjNjU2OS4uOGUwMDdlMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlRyYW5zYWN0aW9uU2NvcGVkL3NlcnZsZXQvY29tL29yYWNsZS9qbXMvdGVzdC9OZXdKU0ZNYW5hZ2VkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZUcmFuc2FjdGlvblNjb3BlZC9zZXJ2bGV0L2NvbS9vcmFjbGUvam1zL3Rlc3QvTmV3SlNGTWFuYWdlZEJlYW4uamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7CiAKLSAgICBASW5qZWN0IAorICAgIEBJbmplY3QKICAgICBVc2VyVHJhbnNhY3Rpb24gdXQ7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdHJhbnNhY3Rpb25TY29wZSA9ICJhcm91bmQgVHJhbnNhY3Rpb25TY29wZWQiOwpAQCAtNTQsNyArNTQsNyBAQAogICAgICAqLwogICAgIHB1YmxpYyBOZXdKU0ZNYW5hZ2VkQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7CiAgICAgICAgIFN0cmluZyBjb250ZXh0ID0gIiI7CiAgICAgICAgIHRyeSB7CkBAIC03MCwxMSArNzAsMTEgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0ZXh0OwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdHJ5IHsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHV0LnJvbGxiYWNrKCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFJlcXVlc3RTY29wZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc3BSZXF1ZXN0U2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjYwOWRhYi4uNjI2OTk3YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFJlcXVlc3RTY29wZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwUmVxdWVzdFNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqbXMtaW5qZWN0aW9uLWpzcCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc3BSZXF1ZXN0U2NvcGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc3BSZXF1ZXN0U2NvcGVkL2J1aWxkLnhtbAppbmRleCBhZTYwMDFlLi5lMWJlNzZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwUmVxdWVzdFNjb3BlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFJlcXVlc3RTY29wZWQvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuLWNsYXNzZXMtZGlyIj4KLSAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgIAorICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1lamIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1lamIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXdlYiIgZGVwZW5kcz0iY29tcGlsZS13ZWIiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIApAQCAtNzIsNDIgKzcyLDQyIEBACiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHthcHBjbGllbnQuamFyfSIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLWNsaWVudC54bWx9IgotICAgICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiIAorICAgICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9nbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbCIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIgCi0gICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IioqLyouY2xhc3MiIAotICAgICAgICAgICAgIG1hbmlmZXN0PSIuL2NsaWVudC9NQU5JRkVTVC5NRiI+ICAgICAgICAgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthcHBjbGllbnQuamFyfSIgYmFzZWRpcj0iJHthcHBjbGllbnRqYXIuZmlsZXN9IgorICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIqKi8qLmNsYXNzIgorICAgICAgICAgICAgIG1hbmlmZXN0PSIuL2NsaWVudC9NQU5JRkVTVC5NRiI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiI+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJnbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgICAgICAgICA8L21ldGFpbmY+Ci0gICAgICAgIDwvamFyPiAgIAorICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtZWFyIj4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgIAotICAgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgIAlmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gICAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgIAlmYWlsb25lcnJvcj0iZmFsc2UiLz4gCisgICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMtZWFyLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIgIGZpbHRlcmluZz0idHJ1ZSIvPgotICAgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4gCisgICAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+Ci0gICAgICAgIAk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci0gICAgICAgIAk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIi8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9ImxpYi9yZXBvcnRlci5qYXIiLz4KLSAgICAgICAgICA8L2phcj4gICAgICAgIAorICAgICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQtZWpiLCBidWlsZC13ZWIsIGJ1aWxkLWNsaWVudCwgYnVpbGQtZWFyIi8+CkBAIC0xMTcsNyArMTE3LDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC0xMjksNyArMTI5LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KQEAgLTEzOSwxMCArMTM5LDEwIEBACiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc3BSZXF1ZXN0U2NvcGVkL2NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwUmVxdWVzdFNjb3BlZC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IGE2MzYyNDYuLjVkYWY5YjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc3BSZXF1ZXN0U2NvcGVkL2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFJlcXVlc3RTY29wZWQvY2xpZW50L1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHJlc291cmNlIGluamVjdGlvbiBpbnRvIHNlcnZsZXQgIgpAQCAtNTcsMTQgKzU3LDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9uZXdKU1AuanNwIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIiArCiAgICAgICAgICAgICAgICAgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwUmVxdWVzdFNjb3BlZC9lamIvTWVzc2FnZVJlY2VpdmVyUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwUmVxdWVzdFNjb3BlZC9lamIvTWVzc2FnZVJlY2VpdmVyUmVtb3RlLmphdmEKaW5kZXggMjIzMDIxMy4uNjU1MWFiNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFJlcXVlc3RTY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc3BSZXF1ZXN0U2NvcGVkL2VqYi9NZXNzYWdlUmVjZWl2ZXJSZW1vdGUuamF2YQpAQCAtMjUsNiArMjUsNiBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNZXNzYWdlUmVjZWl2ZXJSZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE1lc3NhZ2VSZWNlaXZlckJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc3BSZXF1ZXN0U2NvcGVkL3NlcnZsZXQvdGVzdC9KbXNUYWdIYW5kbGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwUmVxdWVzdFNjb3BlZC9zZXJ2bGV0L3Rlc3QvSm1zVGFnSGFuZGxlci5qYXZhCmluZGV4IDEwNDZiOGEuLjk5YjdmZWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc3BSZXF1ZXN0U2NvcGVkL3NlcnZsZXQvdGVzdC9KbXNUYWdIYW5kbGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFJlcXVlc3RTY29wZWQvc2VydmxldC90ZXN0L0ptc1RhZ0hhbmRsZXIuamF2YQpAQCAtNTksMTAgKzU5LDEwIEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvL0dldCB0aGUgd3JpdGVyIG9iamVjdCBmb3Igb3V0cHV0LgogICAgICAgICAgICAgSnNwV3JpdGVyIG91dCA9IHBhZ2VDb250ZXh0LmdldE91dCgpOwotIAorCiAgICAgICAgICAgICAvL1BlcmZvcm0gc3Vic3RyIG9wZXJhdGlvbiBvbiBzdHJpbmcuCiAgICAgICAgICAgICBvdXQucHJpbnRsbih0ZXh0KTsKLSAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEpzcEV4Y2VwdGlvbihlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQucHJvcGVydGllcwppbmRleCBmNjA5ZGFiLi42MjY5OTdiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam1zLWluamVjdGlvbi1qc3AiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnhtbAppbmRleCBhZTYwMDFlLi5lMWJlNzZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc3BUcmFuc2FjdGlvblNjb3BlZC9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4tY2xhc3Nlcy1kaXIiPgotICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgCisgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLWVqYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWVqYiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtd2ViIiBkZXBlbmRzPSJjb21waWxlLXdlYiI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCkBAIC03Miw0MiArNzIsNDIgQEAKICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2FwcGNsaWVudC5qYXJ9Ii8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24tY2xpZW50LnhtbH0iCi0gICAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCisgICAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24tY2xpZW50LnhtbCIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1hcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiCiAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthcHBjbGllbnQuamFyfSIgYmFzZWRpcj0iJHthcHBjbGllbnRqYXIuZmlsZXN9IiAKLSAgICAgICAgICAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iKiovKi5jbGFzcyIgCi0gICAgICAgICAgICAgbWFuaWZlc3Q9Ii4vY2xpZW50L01BTklGRVNULk1GIj4gICAgICAgICAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2FwcGNsaWVudC5qYXJ9IiBiYXNlZGlyPSIke2FwcGNsaWVudGphci5maWxlc30iCisgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IioqLyouY2xhc3MiCisgICAgICAgICAgICAgbWFuaWZlc3Q9Ii4vY2xpZW50L01BTklGRVNULk1GIj4KICAgICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIj4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImdsYXNzZmlzaC1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgICAgICAgICAgIDwvbWV0YWluZj4KLSAgICAgICAgPC9qYXI+ICAgCisgICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1lYXIiPgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+ICAgCi0gICAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAgCWZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgICAgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiAgCWZhaWxvbmVycm9yPSJmYWxzZSIvPiAKKyAgICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgorICAgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXJlc291cmNlcy1lYXIueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIiAgZmlsdGVyaW5nPSJ0cnVlIi8+Ci0gICAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPiAKKyAgICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KLSAgICAgICAgCTxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLSAgICAgICAgCTxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiBpbmNsdWRlcz0ibGliL3JlcG9ydGVyLmphciIvPgotICAgICAgICAgIDwvamFyPiAgICAgICAgCisgICAgICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZC1lamIsIGJ1aWxkLXdlYiwgYnVpbGQtY2xpZW50LCBidWlsZC1lYXIiLz4KQEAgLTExNyw3ICsxMTcsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTEyOSw3ICsxMjksNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IldlYlRlc3QiPgpAQCAtMTM5LDEwICsxMzksMTAgQEAKICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFRyYW5zYWN0aW9uU2NvcGVkL2NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwVHJhbnNhY3Rpb25TY29wZWQvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCBjOGMzMjU3Li5lZWNjMzMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwVHJhbnNhY3Rpb25TY29wZWQvY2xpZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwVHJhbnNhY3Rpb25TY29wZWQvY2xpZW50L1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHJlc291cmNlIGluamVjdGlvbiBpbnRvIHNlcnZsZXQgIgpAQCAtNTcsMTQgKzU3LDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9uZXdKU1AuanNwIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIiArCiAgICAgICAgICAgICAgICAgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwVHJhbnNhY3Rpb25TY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFRyYW5zYWN0aW9uU2NvcGVkL2VqYi9NZXNzYWdlUmVjZWl2ZXJSZW1vdGUuamF2YQppbmRleCAyMjMwMjEzLi42NTUxYWI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwVHJhbnNhY3Rpb25TY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc3BUcmFuc2FjdGlvblNjb3BlZC9lamIvTWVzc2FnZVJlY2VpdmVyUmVtb3RlLmphdmEKQEAgLTI1LDYgKzI1LDYgQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTWVzc2FnZVJlY2VpdmVyUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNZXNzYWdlUmVjZWl2ZXJCZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwVHJhbnNhY3Rpb25TY29wZWQvc2VydmxldC90ZXN0L0ptc1RhZ0hhbmRsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc3BUcmFuc2FjdGlvblNjb3BlZC9zZXJ2bGV0L3Rlc3QvSm1zVGFnSGFuZGxlci5qYXZhCmluZGV4IDBlNjE1ZDEuLmNjN2MwMWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc3BUcmFuc2FjdGlvblNjb3BlZC9zZXJ2bGV0L3Rlc3QvSm1zVGFnSGFuZGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc3BUcmFuc2FjdGlvblNjb3BlZC9zZXJ2bGV0L3Rlc3QvSm1zVGFnSGFuZGxlci5qYXZhCkBAIC02MCwxNiArNjAsMTYgQEAKICAgICAgICAgICAgIHByb2R1Y2VyLnNlbmQocXVldWUsIG1zZyk7CiAgICAgICAgICAgICBjb250ZXh0ID0gam1zQ29udGV4dC50b1N0cmluZygpOwogICAgICAgICAgICAgdXQuY29tbWl0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYoY29udGV4dC5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpID09IC0xKXsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSnNwRXhjZXB0aW9uKCJOT1QgaW4gdHJhbnNhY3Rpb24gc2NvcGUhIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvL0dldCB0aGUgd3JpdGVyIG9iamVjdCBmb3Igb3V0cHV0LgogICAgICAgICAgICAgSnNwV3JpdGVyIG91dCA9IHBhZ2VDb250ZXh0LmdldE91dCgpOwotIAorCiAgICAgICAgICAgICAvL1BlcmZvcm0gc3Vic3RyIG9wZXJhdGlvbiBvbiBzdHJpbmcuCiAgICAgICAgICAgICBvdXQucHJpbnRsbih0ZXh0KTsKLSAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEpzcEV4Y2VwdGlvbihlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRSZXF1ZXN0U2NvcGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFJlcXVlc3RTY29wZWQvYnVpbGQucHJvcGVydGllcwppbmRleCBmZWJlZTNiLi5iZTQ0ZjFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFJlcXVlc3RTY29wZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFJlcXVlc3RTY29wZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam1zLWluamVjdGlvbi1zZXJ2bGV0Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRSZXF1ZXN0U2NvcGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0UmVxdWVzdFNjb3BlZC9idWlsZC54bWwKaW5kZXggZGY1Yjk3Yy4uYmIwMzMwNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRSZXF1ZXN0U2NvcGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFJlcXVlc3RTY29wZWQvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuLWNsYXNzZXMtZGlyIj4KLSAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgIAorICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1lamIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1lamIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXdlYiIgZGVwZW5kcz0iY29tcGlsZS13ZWIiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIApAQCAtNzIsNDIgKzcyLDQyIEBACiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHthcHBjbGllbnQuamFyfSIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLWNsaWVudC54bWx9IgotICAgICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiIAorICAgICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9nbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbCIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIgCi0gICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IioqLyouY2xhc3MiIAotICAgICAgICAgICAgIG1hbmlmZXN0PSIuL2NsaWVudC9NQU5JRkVTVC5NRiI+ICAgICAgICAgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthcHBjbGllbnQuamFyfSIgYmFzZWRpcj0iJHthcHBjbGllbnRqYXIuZmlsZXN9IgorICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIqKi8qLmNsYXNzIgorICAgICAgICAgICAgIG1hbmlmZXN0PSIuL2NsaWVudC9NQU5JRkVTVC5NRiI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiI+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJnbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgICAgICAgICA8L21ldGFpbmY+Ci0gICAgICAgIDwvamFyPiAgIAorICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtZWFyIj4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgIAotICAgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgIAlmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gICAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgIAlmYWlsb25lcnJvcj0iZmFsc2UiLz4gCisgICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMtZWFyLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIgIGZpbHRlcmluZz0idHJ1ZSIvPgotICAgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4gCisgICAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+Ci0gICAgICAgIAk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci0gICAgICAgIAk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIi8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9ImxpYi9yZXBvcnRlci5qYXIiLz4KLSAgICAgICAgICA8L2phcj4gICAgICAgIAorICAgICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQtZWpiLCBidWlsZC13ZWIsIGJ1aWxkLWNsaWVudCwgYnVpbGQtZWFyIi8+CkBAIC0xMTcsNyArMTE3LDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC0xMjksNyArMTI5LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KQEAgLTEzOSwxMCArMTM5LDEwIEBACiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0UmVxdWVzdFNjb3BlZC9jbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRSZXF1ZXN0U2NvcGVkL2NsaWVudC9XZWJUZXN0LmphdmEKaW5kZXggYzg0ODE5OC4uZWQ1YjQyNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRSZXF1ZXN0U2NvcGVkL2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRSZXF1ZXN0U2NvcGVkL2NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciByZXNvdXJjZSBpbmplY3Rpb24gaW50byBzZXJ2bGV0ICIKQEAgLTU3LDE0ICs1NywxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiICsKICAgICAgICAgICAgICAgICAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgIH0KQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZiAoaXMgIT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRSZXF1ZXN0U2NvcGVkL2VqYi9NZXNzYWdlUmVjZWl2ZXJSZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0UmVxdWVzdFNjb3BlZC9lamIvTWVzc2FnZVJlY2VpdmVyUmVtb3RlLmphdmEKaW5kZXggMzc3MjJmNS4uYzJiZWE2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRSZXF1ZXN0U2NvcGVkL2VqYi9NZXNzYWdlUmVjZWl2ZXJSZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFJlcXVlc3RTY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhCkBAIC0yNSw2ICsyNSw2IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE1lc3NhZ2VSZWNlaXZlclJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTWVzc2FnZVJlY2VpdmVyQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja01lc3NhZ2UoU3RyaW5nW10gdGV4dHMpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRSZXF1ZXN0U2NvcGVkL3NlcnZsZXQvbXlmaWx0ZXIvTXlGaWx0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0UmVxdWVzdFNjb3BlZC9zZXJ2bGV0L215ZmlsdGVyL015RmlsdGVyLmphdmEKaW5kZXggOTYwZGMwOC4uZDM4MTk5NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRSZXF1ZXN0U2NvcGVkL3NlcnZsZXQvbXlmaWx0ZXIvTXlGaWx0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFJlcXVlc3RTY29wZWQvc2VydmxldC9teWZpbHRlci9NeUZpbHRlci5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0VHJhbnNhY3Rpb25TY29wZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0VHJhbnNhY3Rpb25TY29wZWQvYnVpbGQucHJvcGVydGllcwppbmRleCBmZWJlZTNiLi5iZTQ0ZjFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRUcmFuc2FjdGlvblNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqbXMtaW5qZWN0aW9uLXNlcnZsZXQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0VHJhbnNhY3Rpb25TY29wZWQvYnVpbGQueG1sCmluZGV4IGRmNWI5N2MuLmJiMDMzMDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0VHJhbnNhY3Rpb25TY29wZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0VHJhbnNhY3Rpb25TY29wZWQvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuLWNsYXNzZXMtZGlyIj4KLSAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgIAorICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1lamIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1lamIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXdlYiIgZGVwZW5kcz0iY29tcGlsZS13ZWIiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIApAQCAtNzIsNDIgKzcyLDQyIEBACiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHthcHBjbGllbnQuamFyfSIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLWNsaWVudC54bWx9IgotICAgICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiIAorICAgICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9nbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbCIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIgCi0gICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IioqLyouY2xhc3MiIAotICAgICAgICAgICAgIG1hbmlmZXN0PSIuL2NsaWVudC9NQU5JRkVTVC5NRiI+ICAgICAgICAgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthcHBjbGllbnQuamFyfSIgYmFzZWRpcj0iJHthcHBjbGllbnRqYXIuZmlsZXN9IgorICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIqKi8qLmNsYXNzIgorICAgICAgICAgICAgIG1hbmlmZXN0PSIuL2NsaWVudC9NQU5JRkVTVC5NRiI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiI+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJnbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgICAgICAgICA8L21ldGFpbmY+Ci0gICAgICAgIDwvamFyPiAgIAorICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtZWFyIj4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgIAotICAgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgIAlmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gICAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgIAlmYWlsb25lcnJvcj0iZmFsc2UiLz4gCisgICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMtZWFyLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIgIGZpbHRlcmluZz0idHJ1ZSIvPgotICAgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4gCisgICAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+Ci0gICAgICAgIAk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci0gICAgICAgIAk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIi8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9ImxpYi9yZXBvcnRlci5qYXIiLz4KLSAgICAgICAgICA8L2phcj4gICAgICAgIAorICAgICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQtZWpiLCBidWlsZC13ZWIsIGJ1aWxkLWNsaWVudCwgYnVpbGQtZWFyIi8+CkBAIC0xMTcsNyArMTE3LDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC0xMjksNyArMTI5LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KQEAgLTEzOSwxMCArMTM5LDEwIEBACiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0VHJhbnNhY3Rpb25TY29wZWQvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0VHJhbnNhY3Rpb25TY29wZWQvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCBhMzc2ZDUwLi40OGY5YTYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFRyYW5zYWN0aW9uU2NvcGVkL2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRUcmFuc2FjdGlvblNjb3BlZC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcmVzb3VyY2UgaW5qZWN0aW9uIGludG8gc2VydmxldCAiCkBAIC01NywxNCArNTcsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIiArCiAgICAgICAgICAgICAgICAgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9CkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzICE9IG51bGwpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0VHJhbnNhY3Rpb25TY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRUcmFuc2FjdGlvblNjb3BlZC9lamIvTWVzc2FnZVJlY2VpdmVyUmVtb3RlLmphdmEKaW5kZXggMzc3MjJmNS4uYzJiZWE2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRUcmFuc2FjdGlvblNjb3BlZC9lamIvTWVzc2FnZVJlY2VpdmVyUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRUcmFuc2FjdGlvblNjb3BlZC9lamIvTWVzc2FnZVJlY2VpdmVyUmVtb3RlLmphdmEKQEAgLTI1LDYgKzI1LDYgQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTWVzc2FnZVJlY2VpdmVyUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNZXNzYWdlUmVjZWl2ZXJCZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrTWVzc2FnZShTdHJpbmdbXSB0ZXh0cyk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFRyYW5zYWN0aW9uU2NvcGVkL3NlcnZsZXQvbXlmaWx0ZXIvTXlGaWx0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0VHJhbnNhY3Rpb25TY29wZWQvc2VydmxldC9teWZpbHRlci9NeUZpbHRlci5qYXZhCmluZGV4IDk2MGRjMDguLmQzODE5OTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0VHJhbnNhY3Rpb25TY29wZWQvc2VydmxldC9teWZpbHRlci9NeUZpbHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0VHJhbnNhY3Rpb25TY29wZWQvc2VydmxldC9teWZpbHRlci9NeUZpbHRlci5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXNzaW9uQmVhblJlcXVlc3RTY29wZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXNzaW9uQmVhblJlcXVlc3RTY29wZWQvYnVpbGQucHJvcGVydGllcwppbmRleCA5NGM1NTY5Li43MGU3NjcwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2Vzc2lvbkJlYW5SZXF1ZXN0U2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3Nlc3Npb25CZWFuUmVxdWVzdFNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Imptcy1pbmplY3Rpb24tc3RhdGVsZXNzLWVqYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3Nlc3Npb25CZWFuUmVxdWVzdFNjb3BlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2Vzc2lvbkJlYW5SZXF1ZXN0U2NvcGVkL2J1aWxkLnhtbAppbmRleCAyMTk2Y2UxLi4xZTYxMjE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2Vzc2lvbkJlYW5SZXF1ZXN0U2NvcGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2Vzc2lvbkJlYW5SZXF1ZXN0U2NvcGVkL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TZXNzaW9uQmVhbkluamVjdGlvbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9TZXNzaW9uQmVhbkluamVjdGlvbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTcxLDIxICs3MSwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5pbmplY3Rpb24uY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3Nlc3Npb25CZWFuUmVxdWVzdFNjb3BlZC9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXNzaW9uQmVhblJlcXVlc3RTY29wZWQvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uLmphdmEKaW5kZXggNjdhYWJmYy4uYjA5MzM2OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3Nlc3Npb25CZWFuUmVxdWVzdFNjb3BlZC9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2Vzc2lvbkJlYW5SZXF1ZXN0U2NvcGVkL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbi5qYXZhCkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgY2FsbCBhcmUgTk9UIGluIHJlcXVlc3RTY29wZSBzY29wZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgIAkJCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEpNU0NvbnN1bWVyIGNvbnN1bWVyID0gam1zQ29udGV4dC5jcmVhdGVDb25zdW1lcihxdWV1ZSk7CiAgICAgICAgICAgICBNZXNzYWdlIG1zZyA9IGNvbnN1bWVyLnJlY2VpdmUoMzAwMDBMKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXNzaW9uQmVhblJlcXVlc3RTY29wZWQvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2Vzc2lvbkJlYW5SZXF1ZXN0U2NvcGVkL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZS5qYXZhCmluZGV4IGQ3ZWY0NWIuLjQzNWRiYjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXNzaW9uQmVhblJlcXVlc3RTY29wZWQvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3Nlc3Npb25CZWFuUmVxdWVzdFNjb3BlZC9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUuamF2YQpAQCAtMjcsNiArMjcsNiBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIFNlc3Npb25CZWFuSW5qZWN0aW9uLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKIAogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrTWVzc2FnZUFuZFNjb3BlZChTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2Vzc2lvbkJlYW5UcmFuc2FjdGlvblNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3Nlc3Npb25CZWFuVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQucHJvcGVydGllcwppbmRleCA5NGM1NTY5Li43MGU3NjcwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2Vzc2lvbkJlYW5UcmFuc2FjdGlvblNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXNzaW9uQmVhblRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam1zLWluamVjdGlvbi1zdGF0ZWxlc3MtZWpiIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2Vzc2lvbkJlYW5UcmFuc2FjdGlvblNjb3BlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2Vzc2lvbkJlYW5UcmFuc2FjdGlvblNjb3BlZC9idWlsZC54bWwKaW5kZXggMjE5NmNlMS4uMWU2MTIxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3Nlc3Npb25CZWFuVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXNzaW9uQmVhblRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TZXNzaW9uQmVhbkluamVjdGlvbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9TZXNzaW9uQmVhbkluamVjdGlvbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTcxLDIxICs3MSwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5pbmplY3Rpb24uY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3Nlc3Npb25CZWFuVHJhbnNhY3Rpb25TY29wZWQvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2Vzc2lvbkJlYW5UcmFuc2FjdGlvblNjb3BlZC9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUuamF2YQppbmRleCBkN2VmNDViLi40MzVkYmI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2Vzc2lvbkJlYW5UcmFuc2FjdGlvblNjb3BlZC9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2Vzc2lvbkJlYW5UcmFuc2FjdGlvblNjb3BlZC9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUuamF2YQpAQCAtMjcsNiArMjcsNiBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIFNlc3Npb25CZWFuSW5qZWN0aW9uLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKIAogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrTWVzc2FnZUFuZFNjb3BlZChTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NSZXF1ZXN0U2NvcGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NSZXF1ZXN0U2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZmYzNDY0ZC4uZDNjZWY3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzUmVxdWVzdFNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1JlcXVlc3RTY29wZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam1zLWluamVjdGlvbi13cyIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1JlcXVlc3RTY29wZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzUmVxdWVzdFNjb3BlZC9idWlsZC54bWwKaW5kZXggMGY1NDQyOC4uNDBmNzZmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzUmVxdWVzdFNjb3BlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzUmVxdWVzdFNjb3BlZC9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4tY2xhc3Nlcy1kaXIiPgotICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgCisgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLWVqYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+CkBAIC02MywyOSArNjMsMjkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtd2ViIiBkZXBlbmRzPSJjb21waWxlLXdlYiI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1lYXIiPgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+ICAgCi0gICAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAgCWZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgICAgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiAgCWZhaWxvbmVycm9yPSJmYWxzZSIvPiAKKyAgICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgorICAgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXJlc291cmNlcy1lYXIueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIiAgZmlsdGVyaW5nPSJ0cnVlIi8+Ci0gICAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPiAKKyAgICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KLSAgICAgICAgCTxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLSAgICAgICAgCTxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiBpbmNsdWRlcz0ibGliL3JlcG9ydGVyLmphciIvPgotICAgICAgICAgIDwvamFyPiAgICAgICAgCisgICAgICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZC1lamIsIGJ1aWxkLXdlYiwgYnVpbGQtZWFyIi8+CkBAIC0xMDIsOSArMTAyLDkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLndzY29tcGlsZSIgZGVwZW5kcz0ic2V0LXdzY29tcGlsZSI+Ci0gICAgCTxleGVjIGV4ZWN1dGFibGU9IiR7d3Njb21waWxlfSIgZmFpbG9uZXJyb3I9InRydWUiID4KLSAgICAgICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4gICAgICAgIAotICAgIAk8L2V4ZWM+CisgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7d3Njb21waWxlfSIgZmFpbG9uZXJyb3I9InRydWUiID4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4KKyAgICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1jbGllbnQiIGRlcGVuZHM9ImNsZWFuIj4KQEAgLTExMywyNSArMTEzLDI1IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZ2VuZXJhdGVXU0NvbmZpZyIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLWNsaWVudC54bWx9IgotICAgICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiIAorICAgICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9nbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbCIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiB2YWx1ZT0iLWdlbiAtY3AgJHtidWlsZC5jbGFzc2VzLmRpcn0gLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0gY29uZmlnLnhtbCIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgdmFsdWU9Ii1nZW4gLWNwICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IC1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IGNvbmZpZy54bWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY2xpZW50Ii8+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthcHBjbGllbnQuamFyfSIgYmFzZWRpcj0iJHthcHBjbGllbnRqYXIuZmlsZXN9IiAKLSAgICAgICAgICAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iKiovKi5jbGFzcyIgCi0gICAgICAgICAgICAgbWFuaWZlc3Q9Ii4vY2xpZW50L01BTklGRVNULk1GIj4gICAgICAgICAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2FwcGNsaWVudC5qYXJ9IiBiYXNlZGlyPSIke2FwcGNsaWVudGphci5maWxlc30iCisgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IioqLyouY2xhc3MiCisgICAgICAgICAgICAgbWFuaWZlc3Q9Ii4vY2xpZW50L01BTklGRVNULk1GIj4KICAgICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIj4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImdsYXNzZmlzaC1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgICAgICAgICAgIDwvbWV0YWluZj4KLSAgICAgICAgPC9qYXI+ICAgCisgICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC0xMzksNyArMTM5LDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC0xNTEsNyArMTUxLDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZ2VuZXJhdGVXU0NvbmZpZyIgZGVwZW5kcz0iY29tcGlsZS1lamIiPgotICAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmluamVjdGlvbi5lamIuR2VuZXJhdGVXU0NvbmZpZyI+CkBAIC0xNjMsNyArMTYzLDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJXc1Rlc3QiPgpAQCAtMTczLDEwICsxNzMsMTAgQEAKICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzUmVxdWVzdFNjb3BlZC9jbGllbnQvV3NUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NSZXF1ZXN0U2NvcGVkL2NsaWVudC9Xc1Rlc3QuamF2YQppbmRleCBlMTdmZDY2Li40MjQ3MWJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NSZXF1ZXN0U2NvcGVkL2NsaWVudC9Xc1Rlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NSZXF1ZXN0U2NvcGVkL2NsaWVudC9Xc1Rlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHJlc291cmNlIGluamVjdGlvbiBpbnRvIHdlYnNlcnZpY2UgIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzUmVxdWVzdFNjb3BlZC9lamIvR2VuZXJhdGVXU0NvbmZpZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzUmVxdWVzdFNjb3BlZC9lamIvR2VuZXJhdGVXU0NvbmZpZy5qYXZhCmluZGV4IGRjMzJkMmUuLjhkOGYyZDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1JlcXVlc3RTY29wZWQvZWpiL0dlbmVyYXRlV1NDb25maWcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NSZXF1ZXN0U2NvcGVkL2VqYi9HZW5lcmF0ZVdTQ29uZmlnLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gYXJnc1swXTsKICAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzFdOwogICAgICAgICBTdHJpbmcgcG9ydCA9IGFyZ3NbMl07Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZ0J1ZmZlciBjb25maWcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgIGNvbmZpZy5hcHBlbmQoIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PiIpLmFwcGVuZCgiXHJcbiIpOwogICAgICAgICBjb25maWcuYXBwZW5kKCI8Y29uZmlndXJhdGlvbiB4bWxucz1cImh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnXCI+Iik7CkBAIC0zMSwxMSArMzEsMTEgQEAKICAgICAgICAgY29uZmlnLmFwcGVuZCgiPHdzZGwgbG9jYXRpb249XCJodHRwOi8vIikuYXBwZW5kKGhvc3QpLmFwcGVuZCgiOiIpLmFwcGVuZChwb3J0KTsKICAgICAgICAgY29uZmlnLmFwcGVuZCgiL2ptcy1pbmplY3Rpb24td3Mtd2ViL05ld1dlYlNlcnZpY2U/d3NkbFwiIHBhY2thZ2VOYW1lPVwidGVzdFwiLz4iKTsKICAgICAgICAgY29uZmlnLmFwcGVuZCgiXHJcbiIpLmFwcGVuZCgiPC9jb25maWd1cmF0aW9uPiIpOwotICAgIAorCiAgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbGVuYW1lKTsKICAgICAgICAgaWYgKGZpbGUuZXhpc3RzKCkpCiAgICAgICAgICAgICBmaWxlLmRlbGV0ZSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgYnl0ZVtdIG91dHB1dCA9IGNvbmZpZy50b1N0cmluZygpLmdldEJ5dGVzKCk7CiAgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZW5hbWUpOwogICAgICAgICBmb3Mud3JpdGUob3V0cHV0LCAwLCBvdXRwdXQubGVuZ3RoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1JlcXVlc3RTY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzUmVxdWVzdFNjb3BlZC9lamIvTWVzc2FnZVJlY2VpdmVyUmVtb3RlLmphdmEKaW5kZXggMjIzMDIxMy4uNjU1MWFiNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzUmVxdWVzdFNjb3BlZC9lamIvTWVzc2FnZVJlY2VpdmVyUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzUmVxdWVzdFNjb3BlZC9lamIvTWVzc2FnZVJlY2VpdmVyUmVtb3RlLmphdmEKQEAgLTI1LDYgKzI1LDYgQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTWVzc2FnZVJlY2VpdmVyUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNZXNzYWdlUmVjZWl2ZXJCZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NUcmFuc2FjdGlvblNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQucHJvcGVydGllcwppbmRleCBmZjM0NjRkLi5kM2NlZjc2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NUcmFuc2FjdGlvblNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1RyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Imptcy1pbmplY3Rpb24td3MiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NUcmFuc2FjdGlvblNjb3BlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NUcmFuc2FjdGlvblNjb3BlZC9idWlsZC54bWwKaW5kZXggMGY1NDQyOC4uNDBmNzZmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1RyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbi1jbGFzc2VzLWRpciI+Ci0gICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAKKyAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtZWpiIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KQEAgLTYzLDI5ICs2MywyOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC13ZWIiIGRlcGVuZHM9ImNvbXBpbGUtd2ViIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWVhciI+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gICAKLSAgICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAJZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiICAJZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAorICAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CisgICAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLWVhci54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiICBmaWx0ZXJpbmc9InRydWUiLz4KLSAgICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+IAorICAgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotICAgICAgICAJPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotICAgICAgICAJPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0iIGluY2x1ZGVzPSJsaWIvcmVwb3J0ZXIuamFyIi8+Ci0gICAgICAgICAgPC9qYXI+ICAgICAgICAKKyAgICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkLWVqYiwgYnVpbGQtd2ViLCBidWlsZC1lYXIiLz4KQEAgLTEwMiw5ICsxMDIsOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4ud3Njb21waWxlIiBkZXBlbmRzPSJzZXQtd3Njb21waWxlIj4KLSAgICAJPGV4ZWMgZXhlY3V0YWJsZT0iJHt3c2NvbXBpbGV9IiBmYWlsb25lcnJvcj0idHJ1ZSIgPgotICAgICAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPiAgICAgICAgCi0gICAgCTwvZXhlYz4KKyAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHt3c2NvbXBpbGV9IiBmYWlsb25lcnJvcj0idHJ1ZSIgPgorICAgICAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPgorICAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWNsaWVudCIgZGVwZW5kcz0iY2xlYW4iPgpAQCAtMTEzLDI1ICsxMTMsMjUgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJnZW5lcmF0ZVdTQ29uZmlnIi8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24tY2xpZW50LnhtbH0iCi0gICAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCisgICAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24tY2xpZW50LnhtbCIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1hcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiCiAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIHZhbHVlPSItZ2VuIC1jcCAke2J1aWxkLmNsYXNzZXMuZGlyfSAta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfSBjb25maWcueG1sIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiB2YWx1ZT0iLWdlbiAtY3AgJHtidWlsZC5jbGFzc2VzLmRpcn0gLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0gY29uZmlnLnhtbCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jbGllbnQiLz4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2FwcGNsaWVudC5qYXJ9IiBiYXNlZGlyPSIke2FwcGNsaWVudGphci5maWxlc30iIAotICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIqKi8qLmNsYXNzIiAKLSAgICAgICAgICAgICBtYW5pZmVzdD0iLi9jbGllbnQvTUFOSUZFU1QuTUYiPiAgICAgICAgIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIKKyAgICAgICAgICAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iKiovKi5jbGFzcyIKKyAgICAgICAgICAgICBtYW5pZmVzdD0iLi9jbGllbnQvTUFOSUZFU1QuTUYiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgICAgICAgICAgPC9tZXRhaW5mPgotICAgICAgICA8L2phcj4gICAKKyAgICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTEzOSw3ICsxMzksNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJnZW5lcmF0ZVdTQ29uZmlnIiBkZXBlbmRzPSJjb21waWxlLWVqYiI+Ci0gICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuaW5qZWN0aW9uLmVqYi5HZW5lcmF0ZVdTQ29uZmlnIj4KQEAgLTE2Myw3ICsxNjMsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IldzVGVzdCI+CkBAIC0xNzMsMTAgKzE3MywxMCBAQAogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NUcmFuc2FjdGlvblNjb3BlZC9jbGllbnQvV3NUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NUcmFuc2FjdGlvblNjb3BlZC9jbGllbnQvV3NUZXN0LmphdmEKaW5kZXggNDZiMTBhNC4uNjk3YzQ1MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzVHJhbnNhY3Rpb25TY29wZWQvY2xpZW50L1dzVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1RyYW5zYWN0aW9uU2NvcGVkL2NsaWVudC9Xc1Rlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHJlc291cmNlIGluamVjdGlvbiBpbnRvIHdlYnNlcnZpY2UgIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzVHJhbnNhY3Rpb25TY29wZWQvZWpiL0dlbmVyYXRlV1NDb25maWcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1RyYW5zYWN0aW9uU2NvcGVkL2VqYi9HZW5lcmF0ZVdTQ29uZmlnLmphdmEKaW5kZXggZGMzMmQyZS4uOGQ4ZjJkOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzVHJhbnNhY3Rpb25TY29wZWQvZWpiL0dlbmVyYXRlV1NDb25maWcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NUcmFuc2FjdGlvblNjb3BlZC9lamIvR2VuZXJhdGVXU0NvbmZpZy5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IGFyZ3NbMF07CiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1sxXTsKICAgICAgICAgU3RyaW5nIHBvcnQgPSBhcmdzWzJdOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmdCdWZmZXIgY29uZmlnID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICAgICBjb25maWcuYXBwZW5kKCI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz4iKS5hcHBlbmQoIlxyXG4iKTsKICAgICAgICAgY29uZmlnLmFwcGVuZCgiPGNvbmZpZ3VyYXRpb24geG1sbnM9XCJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZ1wiPiIpOwpAQCAtMzEsMTEgKzMxLDExIEBACiAgICAgICAgIGNvbmZpZy5hcHBlbmQoIjx3c2RsIGxvY2F0aW9uPVwiaHR0cDovLyIpLmFwcGVuZChob3N0KS5hcHBlbmQoIjoiKS5hcHBlbmQocG9ydCk7CiAgICAgICAgIGNvbmZpZy5hcHBlbmQoIi9qbXMtaW5qZWN0aW9uLXdzLXdlYi9OZXdXZWJTZXJ2aWNlP3dzZGxcIiBwYWNrYWdlTmFtZT1cInRlc3RcIi8+Iik7CiAgICAgICAgIGNvbmZpZy5hcHBlbmQoIlxyXG4iKS5hcHBlbmQoIjwvY29uZmlndXJhdGlvbj4iKTsKLSAgICAKKwogICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShmaWxlbmFtZSk7CiAgICAgICAgIGlmIChmaWxlLmV4aXN0cygpKQogICAgICAgICAgICAgZmlsZS5kZWxldGUoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIGJ5dGVbXSBvdXRwdXQgPSBjb25maWcudG9TdHJpbmcoKS5nZXRCeXRlcygpOwogICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGVuYW1lKTsKICAgICAgICAgZm9zLndyaXRlKG91dHB1dCwgMCwgb3V0cHV0Lmxlbmd0aCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NUcmFuc2FjdGlvblNjb3BlZC9lamIvTWVzc2FnZVJlY2VpdmVyUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NUcmFuc2FjdGlvblNjb3BlZC9lamIvTWVzc2FnZVJlY2VpdmVyUmVtb3RlLmphdmEKaW5kZXggMjIzMDIxMy4uNjU1MWFiNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzVHJhbnNhY3Rpb25TY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1RyYW5zYWN0aW9uU2NvcGVkL2VqYi9NZXNzYWdlUmVjZWl2ZXJSZW1vdGUuamF2YQpAQCAtMjUsNiArMjUsNiBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNZXNzYWdlUmVjZWl2ZXJSZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE1lc3NhZ2VSZWNlaXZlckJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYnVpbGQueG1sCmluZGV4IGMyNDNhMDcuLmFhODdiNmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2J1aWxkLnhtbApAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICA8YW50IGRpcj0iYmFzaWMiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0iYmFzaWMub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9Im1peGVkU2NvcGVkIj4KICAgICAgICAgPHJlY29yZCBuYW1lPSJtaXhlZFNjb3BlZC5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiIC8+CiAgICAgICAgIDxhbnQgZGlyPSJtaXhlZFNjb3BlZCIgdGFyZ2V0PSJhbGwiLz4KQEAgLTQ2LDExICs0NiwxMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAgICAJCShFeGVjdXRlcyBhbGwgdGhlIGptc0NvbnRleHQgaW5qZWN0aW9uIHRlc3RzKQotCQkJYW50IGJhc2ljICAJCShFeGVjdXRlcyBhbGwgdGhlIGJhc2ljIGptc0NvbnRleHQgaW5qZWN0aW9uIHRlc3RzKQotCQkJYW50IG1peGVkU2NvcGVkICAJKEV4ZWN1dGVzIGFsbCB0aGUgbWl4ZWQgam1zQ29udGV4dCBpbmplY3Rpb24gdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgICAgICAgICAgICAoRXhlY3V0ZXMgYWxsIHRoZSBqbXNDb250ZXh0IGluamVjdGlvbiB0ZXN0cykKKyAgICAgICAgICAgIGFudCBiYXNpYyAgICAgICAgICAoRXhlY3V0ZXMgYWxsIHRoZSBiYXNpYyBqbXNDb250ZXh0IGluamVjdGlvbiB0ZXN0cykKKyAgICAgICAgICAgIGFudCBtaXhlZFNjb3BlZCAgICAgIChFeGVjdXRlcyBhbGwgdGhlIG1peGVkIGptc0NvbnRleHQgaW5qZWN0aW9uIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvYnVpbGQueG1sCmluZGV4IDUyYWVmOTMuLjVmYjc1MGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2J1aWxkLnhtbApAQCAtMjksNyArMjksNyBAQAogICAgICZyZXBvcnRpbmc7CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCI+Ci0gICAgCSA8YW50Y2FsbCB0YXJnZXQ9Imptc0NvbnRleHREZWZhdWx0SW5qZWN0aW9uIi8+CisgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9Imptc0NvbnRleHREZWZhdWx0SW5qZWN0aW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iam1zQ29udGV4dEluamVjdGlvbkEiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJqbXNDb250ZXh0SW5qZWN0aW9uQiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9Imptc0NvbnRleHRJbmplY3Rpb25DIi8+CkBAIC01OSw0OSArNTksNDkgQEAKICAgICAgICAgPGFudCBkaXI9Imptc0NvbnRleHRJbmplY3Rpb25CIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8cmVjb3JkIG5hbWU9Imptc0NvbnRleHRJbmplY3Rpb25CLm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJqbXNDb250ZXh0SW5qZWN0aW9uQyI+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0iam1zQ29udGV4dEluamVjdGlvbkMub3V0cHV0IiBhY3Rpb249InN0YXJ0IiAvPgogICAgICAgICA8YW50IGRpcj0iam1zQ29udGV4dEluamVjdGlvbkMiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0iam1zQ29udGV4dEluamVjdGlvbkMub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9Imptc0NvbnRleHRJbmplY3Rpb25EIj4KICAgICAgICAgPHJlY29yZCBuYW1lPSJqbXNDb250ZXh0SW5qZWN0aW9uRC5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiIC8+CiAgICAgICAgIDxhbnQgZGlyPSJqbXNDb250ZXh0SW5qZWN0aW9uRCIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPHJlY29yZCBuYW1lPSJqbXNDb250ZXh0SW5qZWN0aW9uRC5vdXRwdXQiIGFjdGlvbj0ic3RvcCIgLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iam1zQ29udGV4dEluamVjdGlvbkUiPgogICAgICAgICA8cmVjb3JkIG5hbWU9Imptc0NvbnRleHRJbmplY3Rpb25FLm91dHB1dCIgYWN0aW9uPSJzdGFydCIgLz4KICAgICAgICAgPGFudCBkaXI9Imptc0NvbnRleHRJbmplY3Rpb25FIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8cmVjb3JkIG5hbWU9Imptc0NvbnRleHRJbmplY3Rpb25FLm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJqbXNDb250ZXh0SW5qZWN0aW9uRiI+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0iam1zQ29udGV4dEluamVjdGlvbkYub3V0cHV0IiBhY3Rpb249InN0YXJ0IiAvPgogICAgICAgICA8YW50IGRpcj0iam1zQ29udGV4dEluamVjdGlvbkYiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0iam1zQ29udGV4dEluamVjdGlvbkYub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9Imptc0NvbnRleHRJbmplY3Rpb25HIj4KICAgICAgICAgPHJlY29yZCBuYW1lPSJqbXNDb250ZXh0SW5qZWN0aW9uRy5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiIC8+CiAgICAgICAgIDxhbnQgZGlyPSJqbXNDb250ZXh0SW5qZWN0aW9uRyIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPHJlY29yZCBuYW1lPSJqbXNDb250ZXh0SW5qZWN0aW9uRy5vdXRwdXQiIGFjdGlvbj0ic3RvcCIgLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iam1zQ29udGV4dEluamVjdGlvbkgiPgogICAgICAgICA8cmVjb3JkIG5hbWU9Imptc0NvbnRleHRJbmplY3Rpb25ILm91dHB1dCIgYWN0aW9uPSJzdGFydCIgLz4KICAgICAgICAgPGFudCBkaXI9Imptc0NvbnRleHRJbmplY3Rpb25IIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8cmVjb3JkIG5hbWU9Imptc0NvbnRleHRJbmplY3Rpb25ILm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJqbXNDb250ZXh0SW5qZWN0aW9uSiI+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0iam1zQ29udGV4dEluamVjdGlvbkoub3V0cHV0IiBhY3Rpb249InN0YXJ0IiAvPgogICAgICAgICA8YW50IGRpcj0iam1zQ29udGV4dEluamVjdGlvbkoiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0iam1zQ29udGV4dEluamVjdGlvbkoub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9Imptc0NvbnRleHRJbmplY3Rpb25LIj4KICAgICAgICAgPHJlY29yZCBuYW1lPSJqbXNDb250ZXh0SW5qZWN0aW9uSy5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiIC8+CiAgICAgICAgIDxhbnQgZGlyPSJqbXNDb250ZXh0SW5qZWN0aW9uSyIgdGFyZ2V0PSJhbGwiLz4KQEAgLTEwOSw5ICsxMDksOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBqbXMgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgam1zIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0RGVmYXVsdEluamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHREZWZhdWx0SW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTRjNTU2OS4uNzBlNzY3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHREZWZhdWx0SW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHREZWZhdWx0SW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam1zLWluamVjdGlvbi1zdGF0ZWxlc3MtZWpiIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dERlZmF1bHRJbmplY3Rpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHREZWZhdWx0SW5qZWN0aW9uL2J1aWxkLnhtbAppbmRleCBiMGIzNmQ2Li42YjVkYjE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dERlZmF1bHRJbmplY3Rpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0RGVmYXVsdEluamVjdGlvbi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03MSwyMSArNzEsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuaW5qZWN0aW9uLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0RGVmYXVsdEluamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dERlZmF1bHRJbmplY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDYwNGJiOTUuLmMxYWQ3MzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0RGVmYXVsdEluamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHREZWZhdWx0SW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDcsMTEgKzQ3LDExIEBACiAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICBTVEFULmFkZFN0YXR1cyhlamJOYW1lLCBTVEFULkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFNUQVQuYWRkU3RhdHVzKGVqYk5hbWUsIFNUQVQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0RGVmYXVsdEluamVjdGlvbi9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24xLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dERlZmF1bHRJbmplY3Rpb24vZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uMS5qYXZhCmluZGV4IDJiNDMwYTMuLmZhMmJiYWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0RGVmYXVsdEluamVjdGlvbi9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24xLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHREZWZhdWx0SW5qZWN0aW9uL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbjEuamF2YQpAQCAtMzQsMTIgKzM0LDEyIEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNjb3BlID0gImFyb3VuZCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHByZUlkZW50aWNhbCA9ICJmaW5nZXJQcmludCI7CiAKLSAgICBARUpCIAorICAgIEBFSkIKICAgICBTZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZTIgYmVhbjI7CiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RdWV1ZSIpCiAgICAgcHJpdmF0ZSBRdWV1ZSBxdWV1ZTsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKIApAQCAtNjMsMjAgKzYzLDIwIEBACiAKICAgICAgICAgcmV0dXJuIGNoZWNrUmVzdWx0KGNvbnRleHQxLCBjb250ZXh0Mik7CiAgICAgfQotICAgIAorCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyBCb29sZWFuIGNoZWNrUmVzdWx0KFN0cmluZyBjb250ZXh0MSwgU3RyaW5nIGNvbnRleHQyKXsKIAogICAgICAgICBpZiAoY29udGV4dDEuaW5kZXhPZihwcmVJZGVudGljYWwpID09IC0xIHx8IGNvbnRleHQxLmluZGV4T2Yoc2NvcGUpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgaWYgKGNvbnRleHQyLmluZGV4T2YocHJlSWRlbnRpY2FsKSA9PSAtMSB8fCBjb250ZXh0Mi5pbmRleE9mKHNjb3BlKSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGNvbnRleHQxQW5ub3RhdGlvbiA9IGNvbnRleHQxLnN1YnN0cmluZyhjb250ZXh0MS5pbmRleE9mKHByZUlkZW50aWNhbCksY29udGV4dDEuaW5kZXhPZihzY29wZSkpOwogICAgICAgICBTdHJpbmcgY29udGV4dDJBbm5vdGF0aW9uID0gY29udGV4dDIuc3Vic3RyaW5nKGNvbnRleHQyLmluZGV4T2YocHJlSWRlbnRpY2FsKSxjb250ZXh0Mi5pbmRleE9mKHNjb3BlKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbnRleHQxQW5ub3RhdGlvbi5lcXVhbHMoY29udGV4dDJBbm5vdGF0aW9uKSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmplY3RlZCB1c2luZyBpZGVudGljYWwgYW5ub3RhdGlvbnMuIik7CiAgICAgICAgIH1lbHNlewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHREZWZhdWx0SW5qZWN0aW9uL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZTEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0RGVmYXVsdEluamVjdGlvbi9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUxLmphdmEKaW5kZXggMWNiNGE0Yy4uOWNmY2FlMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHREZWZhdWx0SW5qZWN0aW9uL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZTEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dERlZmF1bHRJbmplY3Rpb24vZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlMS5qYXZhCkBAIC0yNyw1ICsyNyw1IEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgU2Vzc2lvbkJlYW5JbmplY3Rpb24xLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlMSI7CiAKICAgICBwdWJsaWMgQm9vbGVhbiBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25BL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTRjNTU2OS4uNzBlNzY3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25BL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25BL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam1zLWluamVjdGlvbi1zdGF0ZWxlc3MtZWpiIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25BL2J1aWxkLnhtbAppbmRleCAyMTk2Y2UxLi4xZTYxMjE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03MSwyMSArNzEsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuaW5qZWN0aW9uLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkEvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGZlZDU4MWEuLjJjYmM5ZGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25BL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICAgICAgU3RyaW5nIGNvbnRleHQyID0gYmVhblJlbW90ZS5zZW5kTWVzc2FnZTIodGV4dCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbnRleHQxOiIrY29udGV4dDEpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb250ZXh0MToiK2NvbnRleHQyKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoY29udGV4dDEuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSAhPSAtMSl7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZmlyc3QgY2FsbCBhcmUgaW4gdHJhbnNhY3Rpb24gc2NvcGUuIik7CiAgICAgICAgICAgICB9ZWxzZXsKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgICAgICBTVEFULmFkZFN0YXR1cyhlamJOYW1lLCBTVEFULkZBSUwpOwogICAgICAgICAgICAgICAgIHJldHVybiA7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGNvbnRleHQyLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkgIT0gLTEpewogICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBzZWNvbmQgY2FsbCBhcmUgaW4gdHJhbnNhY3Rpb24gc2NvcGUuIik7CiAgICAgICAgICAgICB9ZWxzZXsKQEAgLTYyLDEwICs2MiwxMCBAQAogICAgICAgICAgICAgICAgIFNUQVQuYWRkU3RhdHVzKGVqYk5hbWUsIFNUQVQuRkFJTCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTdHJpbmcgY29udGV4dDFBbm5vdGF0aW9uID0gY29udGV4dDEuc3Vic3RyaW5nKGNvbnRleHQxLmluZGV4T2YocHJlSWRlbnRpY2FsKSxjb250ZXh0MS5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKTsKICAgICAgICAgICAgIFN0cmluZyBjb250ZXh0MkFubm90YXRpb24gPSBjb250ZXh0Mi5zdWJzdHJpbmcoY29udGV4dDIuaW5kZXhPZihwcmVJZGVudGljYWwpLGNvbnRleHQyLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKGNvbnRleHQxQW5ub3RhdGlvbi5lcXVhbHMoY29udGV4dDJBbm5vdGF0aW9uKSl7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgaW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2FsbHMgdG8gY29udGV4dC5zZW5kKCkgaW5qZWN0ZWQgYXJlIHVzaW5nIGlkZW50aWNhbCBhbm5vdGF0aW9ucy4iKTsKICAgICAgICAgICAgIH1lbHNlewpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICAgICAgICAgIFNUQVQuYWRkU3RhdHVzKGVqYk5hbWUsIFNUQVQuRkFJTCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoY29udGV4dDEuc3Vic3RyaW5nKGNvbnRleHQxLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkpLmVxdWFscyhjb250ZXh0Mi5zdWJzdHJpbmcoY29udGV4dDIuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSkpKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxscyB0byBjb250ZXh0LnNlbmQoKSB0YWtlIHBsYWNlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uLiIpOwogICAgICAgICAgICAgICAgIFNUQVQuYWRkU3RhdHVzKGVqYk5hbWUsIFNUQVQuRkFJTCk7CkBAIC04MiwxMiArODIsMTIgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGxzIHRvIGNvbnRleHQuc2VuZCgpIHRha2UgcGxhY2UgaW4gdGhlIGRpZmZlcmVudCB0cmFuc2FjdGlvbi4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNUQVQuYWRkU3RhdHVzKGVqYk5hbWUsIFNUQVQuUEFTUyk7Ci0gICAgICAgICAgICAKKwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBTVEFULmFkZFN0YXR1cyhlamJOYW1lLCBTVEFULkZBSUwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkEvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkEvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlLmphdmEKaW5kZXggMjg1ZGU0Yy4uYjljZDcwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25BL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQS9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUuamF2YQpAQCAtMjcsNiArMjcsNiBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIFNlc3Npb25CZWFuSW5qZWN0aW9uLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKIAogICAgIHB1YmxpYyBTdHJpbmcgc2VuZE1lc3NhZ2UxKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgc2VuZE1lc3NhZ2UyKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25CL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTRjNTU2OS4uNzBlNzY3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25CL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25CL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam1zLWluamVjdGlvbi1zdGF0ZWxlc3MtZWpiIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25CL2J1aWxkLnhtbAppbmRleCAyMTk2Y2UxLi4xZTYxMjE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03MSwyMSArNzEsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuaW5qZWN0aW9uLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDNhNTdiZGIuLmI3NzQzMDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25CL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDksMTEgKzQ5LDExIEBACiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgU1RBVC5hZGRTdGF0dXMoZWpiTmFtZSwgU1RBVC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBTVEFULmFkZFN0YXR1cyhlamJOYW1lLCBTVEFULkZBSUwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkIvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uMS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25CL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbjEuamF2YQppbmRleCAxY2QxMTI1Li41ZTdkZmRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkIvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQi9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24xLmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdHJhbnNhY3Rpb25TY29wZSA9ICJhcm91bmQgVHJhbnNhY3Rpb25TY29wZWQiOwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBwcmVJZGVudGljYWwgPSAiZmluZ2VyUHJpbnQiOwogCi0gICAgQEVKQiAKKyAgICBARUpCCiAgICAgU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUyIGJlYW4yOwogCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5SRVFVSVJFRCkKQEAgLTUwLDMxICs1MCwzMSBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZmlyc3QgY2FsbCBhcmUgTk9UIGluIHRyYW5zYWN0aW9uIHNjb3BlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChjb250ZXh0Mi5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpICE9IC0xKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIHNlY29uZCBjYWxsIGFyZSBpbiB0cmFuc2FjdGlvbiBzY29wZS4iKTsKICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBzZWNvbmQgY2FsbCBhcmUgTk9UIGluIHRyYW5zYWN0aW9uIHNjb3BlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBjb250ZXh0MUFubm90YXRpb24gPSBjb250ZXh0MS5zdWJzdHJpbmcoY29udGV4dDEuaW5kZXhPZihwcmVJZGVudGljYWwpLGNvbnRleHQxLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkpOwogICAgICAgICBTdHJpbmcgY29udGV4dDJBbm5vdGF0aW9uID0gY29udGV4dDIuc3Vic3RyaW5nKGNvbnRleHQyLmluZGV4T2YocHJlSWRlbnRpY2FsKSxjb250ZXh0Mi5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoY29udGV4dDFBbm5vdGF0aW9uLmVxdWFscyhjb250ZXh0MkFubm90YXRpb24pKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyBpbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxscyB0byBjb250ZXh0LnNlbmQoKSBpbmplY3RlZCBhcmUgdXNpbmcgaWRlbnRpY2FsIGFubm90YXRpb25zLiIpOwogICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIGluIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGxzIHRvIGNvbnRleHQuc2VuZCgpIGluamVjdGVkIGFyZSBub3QgdXNpbmcgaWRlbnRpY2FsIGFubm90YXRpb25zLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChjb250ZXh0MS5zdWJzdHJpbmcoY29udGV4dDEuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSkuZXF1YWxzKGNvbnRleHQyLnN1YnN0cmluZyhjb250ZXh0Mi5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKSkpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxscyB0byBjb250ZXh0LnNlbmQoKSB0YWtlIHBsYWNlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uLiIpOwogICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2FsbHMgdG8gY29udGV4dC5zZW5kKCkgdGFrZSBwbGFjZSBpbiB0aGUgZGlmZmVyZW50IHRyYW5zYWN0aW9uLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgCQkKKwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQi9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkIvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlMi5qYXZhCmluZGV4IDAyZGMxMzQuLjA5YTlmOGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQi9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25CL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZTIuamF2YQpAQCAtMjcsNiArMjcsNiBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIFNlc3Npb25CZWFuSW5qZWN0aW9uMi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZTIiOwogCiAgICAgcHVibGljIFN0cmluZyBzZW5kTWVzc2FnZTEoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBzZW5kTWVzc2FnZTIoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25DL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkMvYnVpbGQucHJvcGVydGllcwppbmRleCA5NGM1NTY5Li43MGU3NjcwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqbXMtaW5qZWN0aW9uLXN0YXRlbGVzcy1lamIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkMvYnVpbGQueG1sCmluZGV4IDIxOTZjZTEuLjFlNjEyMTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25DL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TZXNzaW9uQmVhbkluamVjdGlvbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9TZXNzaW9uQmVhbkluamVjdGlvbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTcxLDIxICs3MSwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5pbmplY3Rpb24uY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25DL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMWJlNGIzYy4uYmFiMzIxYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25DL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC00NywxMSArNDcsMTEgQEAKICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgIFNUQVQuYWRkU3RhdHVzKGVqYk5hbWUsIFNUQVQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgU1RBVC5hZGRTdGF0dXMoZWpiTmFtZSwgU1RBVC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25DL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbjEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQy9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24xLmphdmEKaW5kZXggODEwZTk4ZC4uNzM2MGVhNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25DL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbjEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkMvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uMS5qYXZhCkBAIC0zNCw3ICszNCw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRyYW5zYWN0aW9uU2NvcGUgPSAiYXJvdW5kIFRyYW5zYWN0aW9uU2NvcGVkIjsKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcHJlSWRlbnRpY2FsID0gImZpbmdlclByaW50IjsKIAotICAgIEBFSkIgCisgICAgQEVKQgogICAgIFNlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlMiBiZWFuMjsKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1F1ZXVlIikKQEAgLTY2LDI0ICs2NiwyNCBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZmlyc3QgY2FsbCBhcmUgTk9UIGluIHRyYW5zYWN0aW9uIHNjb3BlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZiAoY29udGV4dDIuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSAhPSAtMSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBzZWNvbmQgY2FsbCBhcmUgaW4gdHJhbnNhY3Rpb24gc2NvcGUuIik7CiAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgc2Vjb25kIGNhbGwgYXJlIE5PVCBpbiB0cmFuc2FjdGlvbiBzY29wZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgY29udGV4dDFBbm5vdGF0aW9uID0gY29udGV4dDEuc3Vic3RyaW5nKGNvbnRleHQxLmluZGV4T2YocHJlSWRlbnRpY2FsKSxjb250ZXh0MS5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKTsKICAgICAgICAgU3RyaW5nIGNvbnRleHQyQW5ub3RhdGlvbiA9IGNvbnRleHQyLnN1YnN0cmluZyhjb250ZXh0Mi5pbmRleE9mKHByZUlkZW50aWNhbCksY29udGV4dDIuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbnRleHQxQW5ub3RhdGlvbi5lcXVhbHMoY29udGV4dDJBbm5vdGF0aW9uKSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgaW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2FsbHMgdG8gY29udGV4dC5zZW5kKCkgaW5qZWN0ZWQgYXJlIHVzaW5nIGlkZW50aWNhbCBhbm5vdGF0aW9ucy4iKTsKICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyBpbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxscyB0byBjb250ZXh0LnNlbmQoKSBpbmplY3RlZCBhcmUgbm90IHVzaW5nIGlkZW50aWNhbCBhbm5vdGF0aW9ucy4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgIAkKKwogICAgICAgICBpZiAoY29udGV4dDEuc3Vic3RyaW5nKGNvbnRleHQxLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkpLmVxdWFscyhjb250ZXh0Mi5zdWJzdHJpbmcoY29udGV4dDIuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSkpKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGxzIHRvIGNvbnRleHQuc2VuZCgpIHRha2UgcGxhY2UgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24uIik7CiAgICAgICAgIH1lbHNlewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25EL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkQvYnVpbGQucHJvcGVydGllcwppbmRleCA5NGM1NTY5Li43MGU3NjcwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqbXMtaW5qZWN0aW9uLXN0YXRlbGVzcy1lamIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkQvYnVpbGQueG1sCmluZGV4IDIxOTZjZTEuLjFlNjEyMTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25EL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TZXNzaW9uQmVhbkluamVjdGlvbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9TZXNzaW9uQmVhbkluamVjdGlvbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTcxLDIxICs3MSwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5pbmplY3Rpb24uY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25EL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMDc5Yjg5Yi4uNDFjNmUzOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25EL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC00OCwxMSArNDgsMTEgQEAKICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgIFNUQVQuYWRkU3RhdHVzKGVqYk5hbWUsIFNUQVQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgU1RBVC5hZGRTdGF0dXMoZWpiTmFtZSwgU1RBVC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25EL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25EL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbi5qYXZhCmluZGV4IGVjZmY3NjcuLjQ1N2Y3MTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRC9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkQvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uLmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKICAgICBASk1TQ29ubmVjdGlvbkZhY3RvcnkoImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgQEpNU1Nlc3Npb25Nb2RlKEpNU0NvbnRleHQuQVVUT19BQ0tOT1dMRURHRSkKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0cmFuc2FjdGlvblNjb3BlID0gImFyb3VuZCBUcmFuc2FjdGlvblNjb3BlZCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHByZUlkZW50aWNhbCA9ICJmaW5nZXJQcmludCI7CiAKQEAgLTY2LDI0ICs2NiwyNCBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZmlyc3QgY2FsbCBhcmUgTk9UIGluIHRyYW5zYWN0aW9uIHNjb3BlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZiAoY29udGV4dDIuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSAhPSAtMSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBzZWNvbmQgY2FsbCBhcmUgaW4gdHJhbnNhY3Rpb24gc2NvcGUuIik7CiAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgc2Vjb25kIGNhbGwgYXJlIE5PVCBpbiB0cmFuc2FjdGlvbiBzY29wZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgY29udGV4dDFBbm5vdGF0aW9uID0gY29udGV4dDEuc3Vic3RyaW5nKGNvbnRleHQxLmluZGV4T2YocHJlSWRlbnRpY2FsKSxjb250ZXh0MS5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKTsKICAgICAgICAgU3RyaW5nIGNvbnRleHQyQW5ub3RhdGlvbiA9IGNvbnRleHQyLnN1YnN0cmluZyhjb250ZXh0Mi5pbmRleE9mKHByZUlkZW50aWNhbCksY29udGV4dDIuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbnRleHQxQW5ub3RhdGlvbi5lcXVhbHMoY29udGV4dDJBbm5vdGF0aW9uKSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgaW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2FsbHMgdG8gY29udGV4dC5zZW5kKCkgaW5qZWN0ZWQgYXJlIHVzaW5nIGlkZW50aWNhbCBhbm5vdGF0aW9ucy4iKTsKICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyBpbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxscyB0byBjb250ZXh0LnNlbmQoKSBpbmplY3RlZCBhcmUgbm90IHVzaW5nIGlkZW50aWNhbCBhbm5vdGF0aW9ucy4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgIAkKKwogICAgICAgICBpZiAoY29udGV4dDEuc3Vic3RyaW5nKGNvbnRleHQxLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkpLmVxdWFscyhjb250ZXh0Mi5zdWJzdHJpbmcoY29udGV4dDIuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSkpKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2FsbHMgdG8gY29udGV4dC5zZW5kKCkgdGFrZSBwbGFjZSBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbi4iKTsKICAgICAgICAgfWVsc2V7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkQvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkQvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlLmphdmEKaW5kZXggYWNjZjYzNS4uOTcwMTlmMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25EL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRC9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUuamF2YQpAQCAtMjcsNSArMjcsNSBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIFNlc3Npb25CZWFuSW5qZWN0aW9uLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKIAogICAgIHB1YmxpYyBCb29sZWFuIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25FL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkUvYnVpbGQucHJvcGVydGllcwppbmRleCA5NGM1NTY5Li43MGU3NjcwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqbXMtaW5qZWN0aW9uLXN0YXRlbGVzcy1lamIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkUvYnVpbGQueG1sCmluZGV4IDIxOTZjZTEuLjFlNjEyMTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25FL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TZXNzaW9uQmVhbkluamVjdGlvbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9TZXNzaW9uQmVhbkluamVjdGlvbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTcxLDIxICs3MSwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5pbmplY3Rpb24uY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25FL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMzNkM2U1Yy4uOGIwMGNhMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25FL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC00OCwxMSArNDgsMTEgQEAKICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgIFNUQVQuYWRkU3RhdHVzKGVqYk5hbWUsIFNUQVQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgU1RBVC5hZGRTdGF0dXMoZWpiTmFtZSwgU1RBVC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25FL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25FL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbi5qYXZhCmluZGV4IDZjZDQ3OGYuLjljYzJmN2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRS9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkUvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uLmphdmEKQEAgLTY2LDI0ICs2NiwyNCBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZmlyc3QgY2FsbCBhcmUgTk9UIGluIHJlcXVlc3Qgc2NvcGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIGlmIChjb250ZXh0Mi5pbmRleE9mKHJlcXVlc3RTY29wZSkgIT0gLTEpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgc2Vjb25kIGNhbGwgYXJlIGluIHJlcXVlc3Qgc2NvcGUuIik7CiAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgc2Vjb25kIGNhbGwgYXJlIE5PVCBpbiByZXF1ZXN0IHNjb3BlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBjb250ZXh0MUFubm90YXRpb24gPSBjb250ZXh0MS5zdWJzdHJpbmcoY29udGV4dDEuaW5kZXhPZihwcmVJZGVudGljYWwpLGNvbnRleHQxLmluZGV4T2YocmVxdWVzdFNjb3BlKSk7CiAgICAgICAgIFN0cmluZyBjb250ZXh0MkFubm90YXRpb24gPSBjb250ZXh0Mi5zdWJzdHJpbmcoY29udGV4dDIuaW5kZXhPZihwcmVJZGVudGljYWwpLGNvbnRleHQyLmluZGV4T2YocmVxdWVzdFNjb3BlKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbnRleHQxQW5ub3RhdGlvbi5lcXVhbHMoY29udGV4dDJBbm5vdGF0aW9uKSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyBpbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxscyB0byBjb250ZXh0LnNlbmQoKSBpbmplY3RlZCBhcmUgdXNpbmcgaWRlbnRpY2FsIGFubm90YXRpb25zLiIpOwogICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIGluIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGxzIHRvIGNvbnRleHQuc2VuZCgpIGluamVjdGVkIGFyZSBub3QgdXNpbmcgaWRlbnRpY2FsIGFubm90YXRpb25zLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgCQorCiAgICAgICAgIGlmIChjb250ZXh0MS5zdWJzdHJpbmcoY29udGV4dDEuaW5kZXhPZihyZXF1ZXN0U2NvcGUpKS5lcXVhbHMoY29udGV4dDIuc3Vic3RyaW5nKGNvbnRleHQyLmluZGV4T2YocmVxdWVzdFNjb3BlKSkpKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2FsbHMgdG8gY29udGV4dC5zZW5kKCkgdGFrZSBwbGFjZSBpbiB0aGUgc2FtZSByZXF1ZXN0LiIpOwogICAgICAgICB9ZWxzZXsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRS9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRS9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUuamF2YQppbmRleCAwODA1ZTlkLi5mYzE3M2EwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkUvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25FL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZS5qYXZhCkBAIC0yNyw1ICsyNyw1IEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgU2Vzc2lvbkJlYW5JbmplY3Rpb24uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwogCiAgICAgcHVibGljIEJvb2xlYW4gc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkYvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk0YzU1NjkuLjcwZTc2NzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Imptcy1pbmplY3Rpb24tc3RhdGVsZXNzLWVqYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25GL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRi9idWlsZC54bWwKaW5kZXggMjE5NmNlMS4uMWU2MTIxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25GL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkYvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1Nlc3Npb25CZWFuSW5qZWN0aW9uKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL1Nlc3Npb25CZWFuSW5qZWN0aW9uKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzEsMjEgKzcxLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmluamVjdGlvbi5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkYvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25GL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBkNjcyNDM2Li5iNDc4OTY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkYvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTQ3LDExICs0NywxMSBAQAogICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgU1RBVC5hZGRTdGF0dXMoZWpiTmFtZSwgU1RBVC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBTVEFULmFkZFN0YXR1cyhlamJOYW1lLCBTVEFULkZBSUwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkYvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uMS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25GL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbjEuamF2YQppbmRleCA5ZTc3NjQwLi5hZjUxN2IzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkYvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRi9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24xLmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcHJlSWRlbnRpY2FsID0gImZpbmdlclByaW50IjsKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcmVxdWVzdFNjb3BlID0gImFyb3VuZCBSZXF1ZXN0U2NvcGVkIjsKIAotICAgIEBFSkIgCisgICAgQEVKQgogICAgIFNlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlMiBiZWFuMjsKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1F1ZXVlIikKQEAgLTYzLDE3ICs2MywxNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZmlyc3QgY2FsbCBhcmUgTk9UIGluIHJlcXVlc3Qgc2NvcGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIGlmIChjb250ZXh0Mi5pbmRleE9mKHJlcXVlc3RTY29wZSkgIT0gLTEpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgc2Vjb25kIGNhbGwgYXJlIGluIHJlcXVlc3Qgc2NvcGUuIik7CiAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgc2Vjb25kIGNhbGwgYXJlIE5PVCBpbiByZXF1ZXN0IHNjb3BlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBjb250ZXh0MUFubm90YXRpb24gPSBjb250ZXh0MS5zdWJzdHJpbmcoY29udGV4dDEuaW5kZXhPZihwcmVJZGVudGljYWwpLGNvbnRleHQxLmluZGV4T2YocmVxdWVzdFNjb3BlKSk7CiAgICAgICAgIFN0cmluZyBjb250ZXh0MkFubm90YXRpb24gPSBjb250ZXh0Mi5zdWJzdHJpbmcoY29udGV4dDIuaW5kZXhPZihwcmVJZGVudGljYWwpLGNvbnRleHQyLmluZGV4T2YocmVxdWVzdFNjb3BlKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbnRleHQxQW5ub3RhdGlvbi5lcXVhbHMoY29udGV4dDJBbm5vdGF0aW9uKSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyBpbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxscyB0byBjb250ZXh0LnNlbmQoKSBpbmplY3RlZCBhcmUgdXNpbmcgaWRlbnRpY2FsIGFubm90YXRpb25zLiIpOwogICAgICAgICB9ZWxzZXsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25HL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTRjNTU2OS4uNzBlNzY3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25HL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25HL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam1zLWluamVjdGlvbi1zdGF0ZWxlc3MtZWpiIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25HL2J1aWxkLnhtbAppbmRleCAyMTk2Y2UxLi4xZTYxMjE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03MSwyMSArNzEsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuaW5qZWN0aW9uLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkcvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGU3YWU5MTAuLjE3ZDEyYTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25HL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDgsMTEgKzQ4LDExIEBACiAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICBTVEFULmFkZFN0YXR1cyhlamJOYW1lLCBTVEFULkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFNUQVQuYWRkU3RhdHVzKGVqYk5hbWUsIFNUQVQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRy9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRy9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24uamF2YQppbmRleCA1ODUyMDg2Li4wMTY0ZTM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkcvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25HL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbi5qYXZhCkBAIC0zOCw5ICszOCw5IEBACiAgICAgQEpNU1Nlc3Npb25Nb2RlKEpNU0NvbnRleHQuQVVUT19BQ0tOT1dMRURHRSkKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKIAotICAgIEBJbmplY3QgCisgICAgQEluamVjdAogICAgIFVzZXJUcmFuc2FjdGlvbiB1dDsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0cmFuc2FjdGlvblNjb3BlID0gImFyb3VuZCBUcmFuc2FjdGlvblNjb3BlZCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHByZUlkZW50aWNhbCA9ICJmaW5nZXJQcmludCI7CiAKQEAgLTUzLDExICs1MywxMSBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgdXQuYmVnaW4oKTsKICAgICAgICAgICAgIFRleHRNZXNzYWdlIG1zZyA9IGptc0NvbnRleHQuY3JlYXRlVGV4dE1lc3NhZ2UodGV4dCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgam1zQ29udGV4dC5jcmVhdGVQcm9kdWNlcigpLnNlbmQocXVldWUsIG1zZyk7CiAgICAgICAgICAgICBjb250ZXh0MSA9IGptc0NvbnRleHQudG9TdHJpbmcoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSk1TQ29udGV4dDE6IitqbXNDb250ZXh0LnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKS5zZW5kKHF1ZXVlLCBtc2cpOwogICAgICAgICAgICAgY29udGV4dDIgPSBqbXNDb250ZXh0LnRvU3RyaW5nKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpNU0NvbnRleHQyOiIram1zQ29udGV4dC50b1N0cmluZygpKTsKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgICAgIGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKS5zZW5kKHF1ZXVlLCBtc2cpOwogICAgICAgICAgICAgY29udGV4dDMgPSBqbXNDb250ZXh0LnRvU3RyaW5nKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpNU0NvbnRleHQzOiIram1zQ29udGV4dC50b1N0cmluZygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCkuc2VuZChxdWV1ZSwgbXNnKTsKICAgICAgICAgICAgIGNvbnRleHQ0ID0gam1zQ29udGV4dC50b1N0cmluZygpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKTVNDb250ZXh0NDoiK2ptc0NvbnRleHQudG9TdHJpbmcoKSk7CkBAIC04Miw0MCArODIsNDAgQEAKICAgICB9CiAKICAgICBwdWJsaWMgQm9vbGVhbiBjaGVja1Njb3BlKFN0cmluZyBjb250ZXh0MSwgU3RyaW5nIGNvbnRleHQyLCBTdHJpbmcgY29udGV4dDMsIFN0cmluZyBjb250ZXh0NCl7Ci0JCQkJCisKICAgICAgICAgaWYgKGNvbnRleHQxLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkgIT0gLTEpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZmlyc3QgY2FsbCBhcmUgaW4gdHJhbnNhY3Rpb24gc2NvcGUuIik7CiAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZmlyc3QgY2FsbCBhcmUgTk9UIGluIHRyYW5zYWN0aW9uIHNjb3BlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZiAoY29udGV4dDIuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSAhPSAtMSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBzZWNvbmQgY2FsbCBhcmUgaW4gdHJhbnNhY3Rpb24gc2NvcGUuIik7CiAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgc2Vjb25kIGNhbGwgYXJlIE5PVCBpbiB0cmFuc2FjdGlvbiBzY29wZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoY29udGV4dDMuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSAhPSAtMSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSB0aGlyZCBjYWxsIGFyZSBpbiB0cmFuc2FjdGlvbiBzY29wZS4iKTsKICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSB0aGlyZCBjYWxsIGFyZSBOT1QgaW4gdHJhbnNhY3Rpb24gc2NvcGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKGNvbnRleHQ0LmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkgIT0gLTEpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZm91cnRoIGNhbGwgYXJlIGluIHRyYW5zYWN0aW9uIHNjb3BlLiIpOwogICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGZvdXJ0aCBjYWxsIGFyZSBOT1QgaW4gdHJhbnNhY3Rpb24gc2NvcGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGNvbnRleHQxQW5ub3RhdGlvbiA9IGNvbnRleHQxLnN1YnN0cmluZyhjb250ZXh0MS5pbmRleE9mKHByZUlkZW50aWNhbCksY29udGV4dDEuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSk7CiAgICAgICAgIFN0cmluZyBjb250ZXh0MkFubm90YXRpb24gPSBjb250ZXh0Mi5zdWJzdHJpbmcoY29udGV4dDIuaW5kZXhPZihwcmVJZGVudGljYWwpLGNvbnRleHQyLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkpOwogICAgICAgICBTdHJpbmcgY29udGV4dDNBbm5vdGF0aW9uID0gY29udGV4dDMuc3Vic3RyaW5nKGNvbnRleHQzLmluZGV4T2YocHJlSWRlbnRpY2FsKSxjb250ZXh0My5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKTsKICAgICAgICAgU3RyaW5nIGNvbnRleHQ0QW5ub3RhdGlvbiA9IGNvbnRleHQ0LnN1YnN0cmluZyhjb250ZXh0NC5pbmRleE9mKHByZUlkZW50aWNhbCksY29udGV4dDMuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbnRleHQxQW5ub3RhdGlvbi5lcXVhbHMoY29udGV4dDJBbm5vdGF0aW9uKSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyBpbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxscyB0byBjb250ZXh0LnNlbmQoKSBpbmplY3RlZCBhcmUgdXNpbmcgaWRlbnRpY2FsIGFubm90YXRpb25zLiIpOwogICAgICAgICAgICAgICAgIGlmKGNvbnRleHQxQW5ub3RhdGlvbi5lcXVhbHMoY29udGV4dDNBbm5vdGF0aW9uKSl7CkBAIC0xMzQsMjEgKzEzNCwyMSBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgaW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2FsbHMgdG8gY29udGV4dC5zZW5kKCkgaW5qZWN0ZWQgYXJlIG5vdCB1c2luZyBpZGVudGljYWwgYW5ub3RhdGlvbnMuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAJCisKICAgICAgICAgaWYgKGNvbnRleHQxLnN1YnN0cmluZyhjb250ZXh0MS5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKS5lcXVhbHMoY29udGV4dDIuc3Vic3RyaW5nKGNvbnRleHQyLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkpKSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGxzIHRvIGNvbnRleHQuc2VuZCgpIHRha2UgcGxhY2UgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24uIik7CiAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxscyB0byBjb250ZXh0LnNlbmQoKSB0YWtlIHBsYWNlIGluIHRoZSBkaWZmZXJlbnQgdHJhbnNhY3Rpb24uIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKGNvbnRleHQzLnN1YnN0cmluZyhjb250ZXh0My5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKS5lcXVhbHMoY29udGV4dDQuc3Vic3RyaW5nKGNvbnRleHQ0LmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkpKSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSB0aGlyZCBhbmQgZm91cnRoIGNhbGxzIHRvIGNvbnRleHQuc2VuZCgpIHRha2UgcGxhY2UgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24uIik7CiAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgdGhpcmQgYW5kIGZvdXJ0aCBjYWxscyB0byBjb250ZXh0LnNlbmQoKSB0YWtlIHBsYWNlIGluIHRoZSBkaWZmZXJlbnQgdHJhbnNhY3Rpb24uIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKGNvbnRleHQxLnN1YnN0cmluZyhjb250ZXh0MS5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKS5lcXVhbHMoY29udGV4dDMuc3Vic3RyaW5nKGNvbnRleHQzLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkpKSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBmaXJzdCBhbmQgdGhpcmQgY2FsbHMgdG8gY29udGV4dC5zZW5kKCkgdGFrZSBwbGFjZSBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbi4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25IL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTRjNTU2OS4uNzBlNzY3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25IL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25IL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam1zLWluamVjdGlvbi1zdGF0ZWxlc3MtZWpiIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25IL2J1aWxkLnhtbAppbmRleCAyMTk2Y2UxLi4xZTYxMjE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03MSwyMSArNzEsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuaW5qZWN0aW9uLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkgvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGNkNzgyMDMuLjkwODczOGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25IL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDgsMTEgKzQ4LDExIEBACiAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICBTVEFULmFkZFN0YXR1cyhlamJOYW1lLCBTVEFULkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFNUQVQuYWRkU3RhdHVzKGVqYk5hbWUsIFNUQVQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSC9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSC9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24uamF2YQppbmRleCA1ODRlNTZjLi5kNGJmYmQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkgvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25IL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbi5qYXZhCkBAIC0zOCw5ICszOCw5IEBACiAgICAgQEpNU1Nlc3Npb25Nb2RlKEpNU0NvbnRleHQuQVVUT19BQ0tOT1dMRURHRSkKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKIAotICAgIEBJbmplY3QgCisgICAgQEluamVjdAogICAgIFVzZXJUcmFuc2FjdGlvbiB1dDsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyByZXF1ZXN0U2NvcGUgPSAiYXJvdW5kIFJlcXVlc3RTY29wZWQiOwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0cmFuc2FjdGlvblNjb3BlID0gImFyb3VuZCBUcmFuc2FjdGlvblNjb3BlZCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHByZUlkZW50aWNhbCA9ICJmaW5nZXJQcmludCI7CkBAIC01NCwxMSArNTQsMTEgQEAKICAgICAgICAgU3RyaW5nIGNvbnRleHQ1ID0gIiI7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBUZXh0TWVzc2FnZSBtc2cgPSBqbXNDb250ZXh0LmNyZWF0ZVRleHRNZXNzYWdlKHRleHQpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKS5zZW5kKHF1ZXVlLCBtc2cpOwogICAgICAgICAgICAgY29udGV4dDEgPSBqbXNDb250ZXh0LnRvU3RyaW5nKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpNU0NvbnRleHQxOiIrY29udGV4dDEpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKS5zZW5kKHF1ZXVlLCBtc2cpOwogICAgICAgICAgICAgY29udGV4dDIgPSBqbXNDb250ZXh0LnRvU3RyaW5nKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpNU0NvbnRleHQyOiIrY29udGV4dDIpOwpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICAgICAgY29udGV4dDMgPSBqbXNDb250ZXh0LnRvU3RyaW5nKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpNU0NvbnRleHQzOiIrY29udGV4dDMpOwogICAgICAgICAgICAgdXQuY29tbWl0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgam1zQ29udGV4dC5jcmVhdGVQcm9kdWNlcigpLnNlbmQocXVldWUsIG1zZyk7CiAgICAgICAgICAgICBjb250ZXh0NCA9IGptc0NvbnRleHQudG9TdHJpbmcoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSk1TQ29udGV4dDQ6Iitjb250ZXh0NCk7CkBAIC05Nyw0MSArOTcsNDEgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGZpcnN0IGNhbGwgYXJlIE5PVCBpbiByZXF1ZXN0IHNjb3BlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZiAoY29udGV4dDIuaW5kZXhPZihyZXF1ZXN0U2NvcGUpICE9IC0xKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIHNlY29uZCBjYWxsIGFyZSBpbiByZXF1ZXN0IHNjb3BlLiIpOwogICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIHNlY29uZCBjYWxsIGFyZSBOT1QgaW4gcmVxdWVzdCBzY29wZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoY29udGV4dDMuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSAhPSAtMSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSB0aGlyZCBjYWxsIGFyZSBpbiB0cmFuc2FjdGlvbiBzY29wZS4iKTsKICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSB0aGlyZCBjYWxsIGFyZSBOT1QgaW4gdHJhbnNhY3Rpb24gc2NvcGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKGNvbnRleHQ0LmluZGV4T2YocmVxdWVzdFNjb3BlKSAhPSAtMSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBmb3VydGggY2FsbCBhcmUgaW4gcmVxdWVzdCBzY29wZS4iKTsKICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBmb3VydGggY2FsbCBhcmUgTk9UIGluIHJlcXVlc3Qgc2NvcGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIGlmIChjb250ZXh0NS5pbmRleE9mKHJlcXVlc3RTY29wZSkgIT0gLTEpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZmlmdGggY2FsbCBhcmUgaW4gcmVxdWVzdCBzY29wZS4iKTsKICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBmaWZ0aCBjYWxsIGFyZSBOT1QgaW4gcmVxdWVzdCBzY29wZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgY29udGV4dDFBbm5vdGF0aW9uID0gY29udGV4dDEuc3Vic3RyaW5nKGNvbnRleHQxLmluZGV4T2YocHJlSWRlbnRpY2FsKSxjb250ZXh0MS5pbmRleE9mKHJlcXVlc3RTY29wZSkpOwogICAgICAgICBTdHJpbmcgY29udGV4dDJBbm5vdGF0aW9uID0gY29udGV4dDIuc3Vic3RyaW5nKGNvbnRleHQyLmluZGV4T2YocHJlSWRlbnRpY2FsKSxjb250ZXh0Mi5pbmRleE9mKHJlcXVlc3RTY29wZSkpOwogICAgICAgICBTdHJpbmcgY29udGV4dDNBbm5vdGF0aW9uID0gY29udGV4dDMuc3Vic3RyaW5nKGNvbnRleHQzLmluZGV4T2YocHJlSWRlbnRpY2FsKSxjb250ZXh0My5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKTsKICAgICAgICAgU3RyaW5nIGNvbnRleHQ0QW5ub3RhdGlvbiA9IGNvbnRleHQ0LnN1YnN0cmluZyhjb250ZXh0NC5pbmRleE9mKHByZUlkZW50aWNhbCksY29udGV4dDQuaW5kZXhPZihyZXF1ZXN0U2NvcGUpKTsKICAgICAgICAgU3RyaW5nIGNvbnRleHQ1QW5ub3RhdGlvbiA9IGNvbnRleHQ1LnN1YnN0cmluZyhjb250ZXh0NS5pbmRleE9mKHByZUlkZW50aWNhbCksY29udGV4dDUuaW5kZXhPZihyZXF1ZXN0U2NvcGUpKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoY29udGV4dDFBbm5vdGF0aW9uLmVxdWFscyhjb250ZXh0MkFubm90YXRpb24pKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIGluIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGxzIHRvIGNvbnRleHQuc2VuZCgpIGluamVjdGVkIGFyZSB1c2luZyBpZGVudGljYWwgYW5ub3RhdGlvbnMuIik7CiAgICAgICAgICAgICBpZihjb250ZXh0MUFubm90YXRpb24uZXF1YWxzKGNvbnRleHQzQW5ub3RhdGlvbikpewpAQCAtMTYzLDcgKzE2Myw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGxzIHRvIGNvbnRleHQuc2VuZCgpIHRha2UgcGxhY2UgaW4gdGhlIGRpZmZlcmVudCByZXF1ZXN0LiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChjb250ZXh0NC5zdWJzdHJpbmcoY29udGV4dDQuaW5kZXhPZihyZXF1ZXN0U2NvcGUpKS5lcXVhbHMoY29udGV4dDUuc3Vic3RyaW5nKGNvbnRleHQ1LmluZGV4T2YocmVxdWVzdFNjb3BlKSkpKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGZvdXJ0aCBhbmQgZmlmdGggY2FsbHMgdG8gY29udGV4dC5zZW5kKCkgdGFrZSBwbGFjZSBpbiB0aGUgc2FtZSByZXF1ZXN0LiIpOwogICAgICAgICB9ZWxzZXsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25KL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTRjNTU2OS4uNzBlNzY3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25KL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25KL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam1zLWluamVjdGlvbi1zdGF0ZWxlc3MtZWpiIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkovYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25KL2J1aWxkLnhtbAppbmRleCAzZDRmMTkxLi41MWMxZjQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkovYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03MSwyMSArNzEsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuaW5qZWN0aW9uLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkovY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDdhYTk3YWYuLjc4MzhhOGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25KL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDcsMTEgKzQ3LDExIEBACiAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICBTVEFULmFkZFN0YXR1cyhlamJOYW1lLCBTVEFULkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFNUQVQuYWRkU3RhdHVzKGVqYk5hbWUsIFNUQVQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSi9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24xLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkovZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uMS5qYXZhCmluZGV4IGNhYmM4ODguLjdmNTJjZjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSi9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24xLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25KL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbjEuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7CiAKLSAgICBARUpCIAorICAgIEBFSkIKICAgICBTZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZTIgYmVhbjI7CiAKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLlJFUVVJUkVEKQpAQCAtNzQsMjUgKzc0LDI1IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBmaXJzdCBjYWxsIGFyZSBOT1QgaW4gdHJhbnNhY3Rpb24gc2NvcGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIGlmIChjb250ZXh0Mi5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpICE9IC0xKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIHNlY29uZCBjYWxsIGFyZSBpbiB0cmFuc2FjdGlvbiBzY29wZS4iKTsKICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBzZWNvbmQgY2FsbCBhcmUgTk9UIGluIHRyYW5zYWN0aW9uIHNjb3BlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChjb250ZXh0My5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpICE9IC0xKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIHRoaXJkIGNhbGwgYXJlIGluIHRyYW5zYWN0aW9uIHNjb3BlLiIpOwogICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIHRoaXJkIGNhbGwgYXJlIE5PVCBpbiB0cmFuc2FjdGlvbiBzY29wZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgY29udGV4dDFBbm5vdGF0aW9uID0gY29udGV4dDEuc3Vic3RyaW5nKGNvbnRleHQxLmluZGV4T2YocHJlSWRlbnRpY2FsKSxjb250ZXh0MS5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKTsKICAgICAgICAgU3RyaW5nIGNvbnRleHQyQW5ub3RhdGlvbiA9IGNvbnRleHQyLnN1YnN0cmluZyhjb250ZXh0Mi5pbmRleE9mKHByZUlkZW50aWNhbCksY29udGV4dDIuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSk7CiAgICAgICAgIFN0cmluZyBjb250ZXh0M0Fubm90YXRpb24gPSBjb250ZXh0My5zdWJzdHJpbmcoY29udGV4dDMuaW5kZXhPZihwcmVJZGVudGljYWwpLGNvbnRleHQzLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkpOwotICAgICAgICAKKwogICAgICAgICBpZihjb250ZXh0MUFubm90YXRpb24uZXF1YWxzKGNvbnRleHQyQW5ub3RhdGlvbikpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgaW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2FsbHMgdG8gY29udGV4dC5zZW5kKCkgaW5qZWN0ZWQgYXJlIHVzaW5nIGlkZW50aWNhbCBhbm5vdGF0aW9ucy4iKTsKICAgICAgICAgICAgIGlmKGNvbnRleHQxQW5ub3RhdGlvbi5lcXVhbHMoY29udGV4dDNBbm5vdGF0aW9uKSl7CkBAIC0xMTIsNyArMTEyLDcgQEAKICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGxzIHRvIGNvbnRleHQuc2VuZCgpIHRha2UgcGxhY2UgaW4gdGhlIGRpZmZlcmVudCB0cmFuc2FjdGlvbi4iKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoY29udGV4dDEuc3Vic3RyaW5nKGNvbnRleHQxLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkpLmVxdWFscyhjb250ZXh0My5zdWJzdHJpbmcoY29udGV4dDMuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSkpKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGZpcnN0IGFuZCB0aGlyZCBjYWxscyB0byBjb250ZXh0LnNlbmQoKSB0YWtlIHBsYWNlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uLiIpOwogICAgICAgICB9ZWxzZXsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSi9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkovZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlMi5qYXZhCmluZGV4IDNkZTZlOWYuLjdkYTJkNjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSi9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25KL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZTIuamF2YQpAQCAtMjcsNSArMjcsNSBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIFNlc3Npb25CZWFuSW5qZWN0aW9uMi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZTIiOwogCiAgICAgcHVibGljIFN0cmluZyBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25LL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTRjNTU2OS4uNzBlNzY3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25LL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25LL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam1zLWluamVjdGlvbi1zdGF0ZWxlc3MtZWpiIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbksvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25LL2J1aWxkLnhtbAppbmRleCBiMGIzNmQ2Li42YjVkYjE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbksvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03MSwyMSArNzEsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuaW5qZWN0aW9uLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbksvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDBmODM4MmEuLmFiOTY1ZjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25LL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDcsMTEgKzQ3LDExIEBACiAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICBTVEFULmFkZFN0YXR1cyhlamJOYW1lLCBTVEFULkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFNUQVQuYWRkU3RhdHVzKGVqYk5hbWUsIFNUQVQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSy9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24xLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbksvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uMS5qYXZhCmluZGV4IDA2ZjFkMWEuLmI3MjI0Y2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSy9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24xLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25LL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbjEuamF2YQpAQCAtMjksMTYgKzI5LDE2IEBACiBAU3RhdGVsZXNzKG1hcHBlZE5hbWU9IlNlc3Npb25CZWFuSW5qZWN0aW9uMS9yZW1vdGUxIikKIEBUcmFuc2FjdGlvbk1hbmFnZW1lbnQoVHJhbnNhY3Rpb25NYW5hZ2VtZW50VHlwZS5DT05UQUlORVIpCiBwdWJsaWMgY2xhc3MgU2Vzc2lvbkJlYW5JbmplY3Rpb24xIGltcGxlbWVudHMgU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUxIHsKLQkJCisKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdHJhbnNhY3Rpb25TY29wZSA9ICJhcm91bmQgVHJhbnNhY3Rpb25TY29wZWQiOwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBwcmVJZGVudGljYWwgPSAiZmluZ2VyUHJpbnQiOwogCi0gICAgQEVKQiAKKyAgICBARUpCCiAgICAgU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUyIGJlYW4yOwogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUXVldWUiKQogICAgIHByaXZhdGUgUXVldWUgcXVldWU7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgIFN0cmluZyBjb250ZXh0MiA9IGJlYW4yLnNlbmRNZXNzYWdlKHRleHQrIjIiKTsKICAgICAgICAgcmV0dXJuIGNoZWNrUmVzdWx0KGNvbnRleHQxLCBjb250ZXh0Mik7CiAgICAgfQotICAgIAorCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyBCb29sZWFuIGNoZWNrUmVzdWx0KFN0cmluZyBjb250ZXh0MSwgU3RyaW5nIGNvbnRleHQyKXsKIApAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZmlyc3QgY2FsbCBhcmUgTk9UIGluIHRyYW5zYWN0aW9uIHNjb3BlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZiAoY29udGV4dDIuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSAhPSAtMSkKICAgICAgICAgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgc2Vjb25kIGNhbGwgYXJlIGluIHRyYW5zYWN0aW9uIHNjb3BlLiIpOwpAQCAtODIsMTAgKzgyLDEwIEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBzZWNvbmQgY2FsbCBhcmUgTk9UIGluIHRyYW5zYWN0aW9uIHNjb3BlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBjb250ZXh0MUFubm90YXRpb24gPSBjb250ZXh0MS5zdWJzdHJpbmcoY29udGV4dDEuaW5kZXhPZihwcmVJZGVudGljYWwpLGNvbnRleHQxLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkpOwogICAgICAgICBTdHJpbmcgY29udGV4dDJBbm5vdGF0aW9uID0gY29udGV4dDIuc3Vic3RyaW5nKGNvbnRleHQyLmluZGV4T2YocHJlSWRlbnRpY2FsKSxjb250ZXh0Mi5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoY29udGV4dDFBbm5vdGF0aW9uLmVxdWFscyhjb250ZXh0MkFubm90YXRpb24pKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIGluIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGxzIHRvIGNvbnRleHQuc2VuZCgpIGluamVjdGVkIGFyZSB1c2luZyBpZGVudGljYWwgYW5ub3RhdGlvbnMuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbksvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlMS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25LL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZTEuamF2YQppbmRleCAxY2I0YTRjLi45Y2ZjYWUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbksvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSy9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUxLmphdmEKQEAgLTI3LDUgKzI3LDUgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBTZXNzaW9uQmVhbkluamVjdGlvbjEuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUxIjsKIAogICAgIHB1YmxpYyBCb29sZWFuIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21kYkRlc3QvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tZGJEZXN0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjI2YmQ1Ny4uMzVkYTE2NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21kYkRlc3QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Im1kYkRlc3QiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tZGJEZXN0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tZGJEZXN0L2J1aWxkLnhtbAppbmRleCA5NjAxZTQ3Li44N2Q1OTgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21kYkRlc3QvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTcxLDIxICs3MSwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5tZGJkZXN0LmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tZGJEZXN0L2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGJjOGFmMjQuLjQzOGFkMjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tZGJEZXN0L2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21kYkRlc3QvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBpbnQgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0LCBpbnQgZXhwZWN0ZWRDb3VudCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tZGJEZXN0L2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IDFiMTk0ZWYuLjMzMDk4NTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tZGJEZXN0L2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tZGJEZXN0L2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0yOSw5ICsyOSw5IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50OwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIEBKTVNDb25uZWN0aW9uRmFjdG9yeSgiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBASk1TU2Vzc2lvbk1vZGUoSk1TQ29udGV4dC5BVVRPX0FDS05PV0xFREdFKQogICAgIHByaXZhdGUgSk1TQ29udGV4dCBqbXNDb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9lamIvTmV3TWVzc2FnZUJlYW4xLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9lamIvTmV3TWVzc2FnZUJlYW4xLmphdmEKaW5kZXggMGZjYTAzMS4uNzhjYzIxNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21kYkRlc3QvZWpiL05ld01lc3NhZ2VCZWFuMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tZGJEZXN0L2VqYi9OZXdNZXNzYWdlQmVhbjEuamF2YQpAQCAtMjksOSArMjksOSBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbjEgaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQ7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4xKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKaW5kZXggOGQ1NTUwYy4uNjlkYjk5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21kYkRlc3QvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tZGJEZXN0L2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQpAQCAtMjksOSArMjksOSBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbjIgaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQ7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4yKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9lamIvTmV3TWVzc2FnZUJlYW4zLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9lamIvTmV3TWVzc2FnZUJlYW4zLmphdmEKaW5kZXggNzcwNDVlNy4uNDBmYWQ5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21kYkRlc3QvZWpiL05ld01lc3NhZ2VCZWFuMy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tZGJEZXN0L2VqYi9OZXdNZXNzYWdlQmVhbjMuamF2YQpAQCAtMjksOSArMjksOSBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbjMgaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQ7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4zKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9lamIvTmV3TWVzc2FnZUJlYW40LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9lamIvTmV3TWVzc2FnZUJlYW40LmphdmEKaW5kZXggZjAyMWMzNS4uMmE1ZGQwYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21kYkRlc3QvZWpiL05ld01lc3NhZ2VCZWFuNC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tZGJEZXN0L2VqYi9OZXdNZXNzYWdlQmVhbjQuamF2YQpAQCAtMjksOSArMjksOSBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbjQgaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQ7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW40KCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9lamIvTmV3TWVzc2FnZUJlYW41LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9lamIvTmV3TWVzc2FnZUJlYW41LmphdmEKaW5kZXggOTAxNTNjZS4uY2Y3ZDA5ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21kYkRlc3QvZWpiL05ld01lc3NhZ2VCZWFuNS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tZGJEZXN0L2VqYi9OZXdNZXNzYWdlQmVhbjUuamF2YQpAQCAtMzAsOSArMzAsOSBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbjUgaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQ7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDMsMTAgKzQzLDEwIEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW41KCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbXNnZGVzdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbXNnZGVzdC9idWlsZC54bWwKaW5kZXggOGUwZTVjNi4uOTljY2YzYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21zZ2Rlc3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tc2dkZXN0L2J1aWxkLnhtbApAQCAtMzAsMTAgKzMwLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgam1zd2ViIChFeGVjdXRlcyB0aGUgam1zLW1zZ2Rlc3Qgam1zd2ViIHRlc3QpCi0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGptcy1tc2dkZXN0IHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgam1zd2ViIChFeGVjdXRlcyB0aGUgam1zLW1zZ2Rlc3Qgam1zd2ViIHRlc3QpCisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGptcy1tc2dkZXN0IHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tc2dkZXN0L2ptc3dlYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21zZ2Rlc3Qvam1zd2ViL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjgwYmU0Yy4uNzA2NTVjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21zZ2Rlc3Qvam1zd2ViL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21zZ2Rlc3Qvam1zd2ViL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIzICsxNSwyMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam1zLW1zZ2Rlc3Qtam1zd2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21zZ2Rlc3Qvam1zd2ViL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tc2dkZXN0L2ptc3dlYi9idWlsZC54bWwKaW5kZXggMGUzMjBiZi4uOGYxOTJlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21zZ2Rlc3Qvam1zd2ViL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbXNnZGVzdC9qbXN3ZWIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMzAgKzQ4LDMwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXdhciI+Ci0JIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS9hL2IiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0icGFja2FnZS13YXItY29tbW9uIj4KLSAgICAJCTxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgCQk8cGFyYW0gbmFtZT0id2FyLmZpbGUiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vYS9iLyR7YXBwbmFtZX0td2ViLndhciIvPgotICAJPC9hbnRjYWxsPgorICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0vYS9iIi8+CisgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2Utd2FyLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9L2EvYi8ke2FwcG5hbWV9LXdlYi53YXIiLz4KKyAgICAgIDwvYW50Y2FsbD4KICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSwgYnVpbGQtd2FyIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKlNlcnZsZXQqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIHVwZGF0ZT0idHJ1ZSI+Ci0gICAgCQk8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+Ci0gICAgICAJCQk8aW5jbHVkZSBuYW1lPSJhL2IvKi53YXIiLz4KLSAgICAJCTwvZmlsZXNldD4KLQk8L2Vhcj4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiB1cGRhdGU9InRydWUiPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgorICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iYS9iLyoud2FyIi8+CisgICAgICAgICAgICA8L2ZpbGVzZXQ+CisgICAgPC9lYXI+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC04MSw3ICs4MSw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtOTMsMTQgKzkzLDE0IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iJHtodHRwLmhvc3R9ICR7aHR0cC5wb3J0fSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbXNnZGVzdC9qbXN3ZWIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21zZ2Rlc3Qvam1zd2ViL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBjNTJkNjg5Li41NzI0ZjMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbXNnZGVzdC9qbXN3ZWIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tc2dkZXN0L2ptc3dlYi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBob3N0OwogICAgIHByaXZhdGUgU3RyaW5nIHBvcnQ7CiAKQEAgLTM1LDIzICszNSwyMyBAQAogICAgICAgICBob3N0ID0gKCBhcmdzLmxlbmd0aCA+IDApID8gYXJnc1swXSA6ICJsb2NhbGhvc3QiOwogICAgICAgICBwb3J0ID0gKCBhcmdzLmxlbmd0aCA+IDEpID8gYXJnc1sxXSA6ICI0ODQ4IjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImptcy1tc2dkZXN0LWptc3dlYiIpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiam1zLW1zZ2Rlc3Qtam1zd2ViSUQiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBlbnYgPSBudWxsOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgCisgICAgICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKwogICAgICAgICAgICAgICAgICIvam1zLW1zZ2Rlc3Qtam1zd2ViL2ptc3NlcnZsZXQiOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBqbXN3ZWIgc2VydmxldCBhdCAiICsgdXJsKTsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKGNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmNvcnJlY3QgcmV0dXJuIGNvZGU6ICIgKyBjb2RlKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiam1zd2ViIG1haW4iLCBzdGF0LkZBSUwpOwpAQCAtNjMsMTUgKzYzLDE1IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiam1zd2ViIG1haW4iLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHByaXZhdGUgaW50IGludm9rZVNlcnZsZXQoU3RyaW5nIHVybCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAKKwogICAgICAgICBVUkwgdSA9IG5ldyBVUkwodXJsKTsKLSAgICAgICAgCisKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gYzEgPSAoSHR0cFVSTENvbm5lY3Rpb24pdS5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBpbnQgY29kZSA9IGMxLmdldFJlc3BvbnNlQ29kZSgpOwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7CkBAIC04NCw2ICs4NCw2IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tc2dkZXN0L2ptc3dlYi9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbXNnZGVzdC9qbXN3ZWIvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGFjODVkNzcuLjA3YzUyNDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tc2dkZXN0L2ptc3dlYi9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21zZ2Rlc3Qvam1zd2ViL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgICA8cmVzLXJlZi1uYW1lPmptcy9NeVF1ZXVlQ29ubmVjdGlvbkZhY3Rvcnk8L3Jlcy1yZWYtbmFtZT4KICAgICAgPHJlcy10eXBlPmpha2FydGEuam1zLlF1ZXVlQ29ubmVjdGlvbkZhY3Rvcnk8L3Jlcy10eXBlPgogICAgICA8cmVzLWF1dGg+Q29udGFpbmVyPC9yZXMtYXV0aD4KLSAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+IAorICAgICA8cmVzLXNoYXJpbmctc2NvcGU+U2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KICAgPC9yZXNvdXJjZS1yZWY+CiAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4KICAgICAgPGRlc2NyaXB0aW9uPmludHJhLXdhciBkZXN0aW5hdGlvbjwvZGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbXNnZGVzdC9qbXN3ZWIvZWpiL01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbXNnZGVzdC9qbXN3ZWIvZWpiL01lc3NhZ2VCZWFuLmphdmEKaW5kZXggYTI0NzNiZS4uOWNlNDMwNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21zZ2Rlc3Qvam1zd2ViL2VqYi9NZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tc2dkZXN0L2ptc3dlYi9lamIvTWVzc2FnZUJlYW4uamF2YQpAQCAtMjIsNyArMjIsNyBAQAogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwogaW1wb3J0IGphdmF4Lm5hbWluZy4qOwogCi1wdWJsaWMgY2xhc3MgTWVzc2FnZUJlYW4gIAorcHVibGljIGNsYXNzIE1lc3NhZ2VCZWFuCiAgICAgaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtMzQsMTYgKzM0LDE2IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjKSB7Ci0JdGhpcy5tZGMgPSBtZGM7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBNZXNzYWdlRHJpdmVuRUpCOjpzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCAhISIpOworICAgIHRoaXMubWRjID0gbWRjOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWVzc2FnZURyaXZlbkVKQjo6c2V0TWVzc2FnZURyaXZlbkNvbnRleHQgISEiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VEcml2ZW5FSkI6OmVqYkNyZWF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWVzc2FnZURyaXZlbkVKQjo6ZWpiQ3JlYXRlICEhIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWVzc2FnZURyaXZlbkVKQjo6ZWpiUmVtb3ZlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBNZXNzYWdlRHJpdmVuRUpCOjplamJSZW1vdmUgISEiKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tc2dkZXN0L2ptc3dlYi9zZXJ2bGV0L0ptc1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tc2dkZXN0L2ptc3dlYi9zZXJ2bGV0L0ptc1NlcnZsZXQuamF2YQppbmRleCA1YWZkYmQzLi4xZWZhMDQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbXNnZGVzdC9qbXN3ZWIvc2VydmxldC9KbXNTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21zZ2Rlc3Qvam1zd2ViL3NlcnZsZXQvSm1zU2VydmxldC5qYXZhCkBAIC0zMiwyMSArMzIsMjEgQEAKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNGYWN0b3J5OwogCiAgICAgcHVibGljIHZvaWQgIGluaXQoIFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBqbXNzZXJ2bGV0Li4uIGluaXQoKSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlcnZpY2UgKCBIdHRwU2VydmxldFJlcXVlc3QgcmVxICwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwICkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICAgICAgICAgICAgICAgCisKICAgICAgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIAotICAgICAgICAgICAgVXNlclRyYW5zYWN0aW9uIHVzZXJUeCA9IChVc2VyVHJhbnNhY3Rpb24pIAorICAgICAgICAgICAgVXNlclRyYW5zYWN0aW9uIHVzZXJUeCA9IChVc2VyVHJhbnNhY3Rpb24pCiAgICAgICAgICAgICAgICAgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9Vc2VyVHJhbnNhY3Rpb24iKTsKIAogICAgICAgICAgICAgcWNGYWN0b3J5ID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9NeVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkiKTsKQEAgLTY2LDIwICs2NiwyMCBAQAogCiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPEhUTUw+IDxIRUFEPiA8VElUTEU+IEpNUyBTZXJ2bGV0IE91dHB1dCA8L1RJVExFPiA8L0hFQUQ+IDxCT0RZIEJHQ09MT1I9d2hpdGU+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPENFTlRFUj4gPEZPTlQgc2l6ZT0rMSBDT0xPUj1ibHVlPkRhdGFiYXNlU2VydmVsdCA6OiBBbGwgaW5mb3JtYXRpb24gSSBjYW4gZ2l2ZSA8L0ZPTlQ+IDwvQ0VOVEVSPiA8cD4gIiApOwotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBDb250ZXh0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldENvbnRleHRQYXRoKCkgKyAiPGJyPiIgKTsgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFNlcnZsZXQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0U2VydmxldFBhdGgoKSArICI8YnI+IiApOyAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gUGF0aCBJbmZvIDogIDwvRk9OVD4gIiArIHJlcS5nZXRQYXRoSW5mbygpICsgIjxicj4iICk7IAorICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBDb250ZXh0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldENvbnRleHRQYXRoKCkgKyAiPGJyPiIgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gU2VydmxldCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRTZXJ2bGV0UGF0aCgpICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBhdGggSW5mbyA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0UGF0aEluZm8oKSArICI8YnI+IiApOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvQk9EWT4gPC9IVE1MPiAiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH1jYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiam1zc2VydmxldCB0ZXN0IGZhaWxlZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZXgpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogU2VuZCBhIG1lc3NhZ2UuIAorICAgICAqIFNlbmQgYSBtZXNzYWdlLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgc2VuZE1lc3NhZ2UoU3RyaW5nIG1zZykgdGhyb3dzIEpNU0V4Y2VwdGlvbiB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gbnVsbDsKQEAgLTEyOSw5ICsxMjksOSBAQAogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkge30KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkICBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIGptc3NlcnZsZXQgZGVzdHJveSIpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL3J1bl90ZXN0LnNoIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL3J1bl90ZXN0LnNoCmluZGV4IDFjOGE2NDMuLmFkMjI5NjIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9ydW5fdGVzdC5zaAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvcnVuX3Rlc3Quc2gKQEAgLTE4LDcgKzE4LDcgQEAKIGxpc3RfdGVzdF9pZHMoKXsKICAgZWNobyBqbXNfYWxsCiB9Ci0gCisKIHRlc3RfcnVuKCl7CiAgIGNkICR7QVBTX0hPTUV9L2RldnRlc3RzL2ptcwogICBhbnQgJHtUQVJHRVR9IHwgdGVlICR7VEVTVF9SVU5fTE9HfQpAQCAtMzQsMTMgKzM0LDEzIEBACiAgIGdlbmVyYXRlX2p1bml0X3JlcG9ydCAkezF9CiAgIGNoYW5nZV9qdW5pdF9yZXBvcnRfY2xhc3NfbmFtZXMKIH0KLSAKKwogZ2V0X3Rlc3RfdGFyZ2V0KCl7Ci0JY2FzZSAkezF9IGluCi0JCWptc19hbGwgKQotCQkJVEFSR0VUPWFsbAotCQkJZXhwb3J0IFRBUkdFVDs7Ci0JZXNhYworICAgIGNhc2UgJHsxfSBpbgorICAgICAgICBqbXNfYWxsICkKKyAgICAgICAgICAgIFRBUkdFVD1hbGwKKyAgICAgICAgICAgIGV4cG9ydCBUQVJHRVQ7OworICAgIGVzYWMKIH0KIAogT1BUPSR7MX0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvYnVpbGQueG1sCmluZGV4IDRlNDk4NDQuLjA2YmU4MGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2J1aWxkLnhtbApAQCAtMzMsMjUgKzMzLDI1IEBACiA8cHJvcGVydHkgZmlsZT0iYnVpbGQucHJvcGVydGllcyIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KLQk8ZGVsZXRlPgorICAgIDxkZWxldGU+CiAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiBpbmNsdWRlcz0idGVzdF9yZXN1bHRzKiIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPGRlbGV0ZT4KICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5vdXRwdXQiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0ibmFtaW5nLm91dHB1dCIgYWN0aW9uPSJzdGFydCIgLz4KLQk8YW50IGRpcj0iZXh0ZXJuYWxuYW1lc2VydmljZWxvb2t1cCIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iaW5qZWN0aW9uIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJsaXN0am5kaSIgdGFyZ2V0PSJhbGwiLz4KLTwhLS0JPGFudCBkaXI9ImxvYWRiYWxhbmNpbmciIHRhcmdldD0iYWxsIi8+IC0tPgotCTxhbnQgZGlyPSJsb29rdXAiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9Im5hbWluZzIiIHRhcmdldD0iYWxsIi8+ICAKLTwhLS0JPGFudCBkaXI9Im5vbmZhaWxvdmVyIiB0YXJnZXQ9ImFsbCIvPiAtLT4KLQk8YW50IGRpcj0ib3JiX2Fubm90YXRpb24iIHRhcmdldD0iYWxsIi8+Ci08IS0tCTxhbnQgZGlyPSJ2aXNpYnJva2VyL2xvb2t1cCIgdGFyZ2V0PSJhbGwiPgotCTxhbnQgZGlyPSJ2aXNpYnJva2VyL3JtaWlpb3AiIHRhcmdldD0iYWxsIj4gLS0+Ci0JPHJlY29yZCBuYW1lPSJuYW1pbmcub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+Ci0JCisgICAgPGFudCBkaXI9ImV4dGVybmFsbmFtZXNlcnZpY2Vsb29rdXAiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImluamVjdGlvbiIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ibGlzdGpuZGkiIHRhcmdldD0iYWxsIi8+Cis8IS0tICAgIDxhbnQgZGlyPSJsb2FkYmFsYW5jaW5nIiB0YXJnZXQ9ImFsbCIvPiAtLT4KKyAgICA8YW50IGRpcj0ibG9va3VwIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJuYW1pbmcyIiB0YXJnZXQ9ImFsbCIvPgorPCEtLSAgICA8YW50IGRpcj0ibm9uZmFpbG92ZXIiIHRhcmdldD0iYWxsIi8+IC0tPgorICAgIDxhbnQgZGlyPSJvcmJfYW5ub3RhdGlvbiIgdGFyZ2V0PSJhbGwiLz4KKzwhLS0gICAgPGFudCBkaXI9InZpc2licm9rZXIvbG9va3VwIiB0YXJnZXQ9ImFsbCI+CisgICAgPGFudCBkaXI9InZpc2licm9rZXIvcm1paWlvcCIgdGFyZ2V0PSJhbGwiPiAtLT4KKyAgICA8cmVjb3JkIG5hbWU9Im5hbWluZy5vdXRwdXQiIGFjdGlvbj0ic3RvcCIgLz4KKwogICAgIDwvdGFyZ2V0PgotPC9wcm9qZWN0PiAgICAKKzwvcHJvamVjdD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2V4dGVybmFsbmFtZXNlcnZpY2Vsb29rdXAvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9leHRlcm5hbG5hbWVzZXJ2aWNlbG9va3VwL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjI3OGZkMS4uZWZmYThjZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2V4dGVybmFsbmFtZXNlcnZpY2Vsb29rdXAvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvZXh0ZXJuYWxuYW1lc2VydmljZWxvb2t1cC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImV4dGVybmFsbmFtZXNlcnZpY2Vsb29rdXAiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LUFwcCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tQXBwIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJ3YXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9leHRlcm5hbG5hbWVzZXJ2aWNlbG9va3VwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9leHRlcm5hbG5hbWVzZXJ2aWNlbG9va3VwL2J1aWxkLnhtbAppbmRleCA2OGU1ZjJiLi5kOTMxYmNiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvZXh0ZXJuYWxuYW1lc2VydmljZWxvb2t1cC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2V4dGVybmFsbmFtZXNlcnZpY2Vsb29rdXAvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuSkFWQV9IT01FfS9iaW4vaWRsaiIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgICAgIDxhcmcgbGluZT0iLWZhbGwgc3JjL0hlbGxvLmlkbCIvPgpAQCAtNTIsNDAgKzUyLDQwIEBACiAgICAgICAgICAgICBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9IgogICAgICAgICAgICAgZGVidWc9Im9uIgotICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiLz4gICAgIAorICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiLz4KICAgICA8L3RhcmdldD4KIAogCiA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIAogICAgIDwhLS10YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLXdhci1jb21tb24iPiAgICAgIAorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLXdhci1jb21tb24iPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0LS0+IAotICAgIAotICAgCisgICAgPC90YXJnZXQtLT4KKworCiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nIHZpYSBhc2FkbWluLi4uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAKIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViY2xpZW50LWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9ImV4dGVybmFsbmFtZXNlcnZpY2Vsb29rdXAiLz4KLQk8L2FudGNhbGw+CisgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9ImV4dGVybmFsbmFtZXNlcnZpY2Vsb29rdXAiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKLSAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9leHRlcm5hbG5hbWVzZXJ2aWNlbG9va3VwL3NyYy9IZWxsb0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2V4dGVybmFsbmFtZXNlcnZpY2Vsb29rdXAvc3JjL0hlbGxvQ2xpZW50LmphdmEKaW5kZXggMTgwMjlkOC4uMWFjNzVhMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2V4dGVybmFsbmFtZXNlcnZpY2Vsb29rdXAvc3JjL0hlbGxvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2V4dGVybmFsbmFtZXNlcnZpY2Vsb29rdXAvc3JjL0hlbGxvQ2xpZW50LmphdmEKQEAgLTI3LDIyICsyNywyMiBAQAogICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKQogICAgIHsKICAgICAgIHRyeXsKLQkgIFByb3BlcnRpZXMgcDIgPSBuZXcgUHJvcGVydGllcygpOworICAgICAgUHJvcGVydGllcyBwMiA9IG5ldyBQcm9wZXJ0aWVzKCk7CiAgcDIucHV0KCAib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsSG9zdCIsICJsb2NhbGhvc3QiICk7CiAgICAgICAgIHAyLnB1dCggIm9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiLCAiMzcwMCIgKTsKLQkvL3AyLnB1dCggImNvbS5zdW4uQ09SQkEuT1JCU2VydmVyUG9ydCIsIjMzNzAwIik7Ci0JLy9wMi5wdXQoICJjb20uc3VuLkNPUkJBLlBPQS5PUkJQZXJzaXN0ZW50U2VydmVyUG9ydCIsIjMzNzAwIik7CisgICAgLy9wMi5wdXQoICJjb20uc3VuLkNPUkJBLk9SQlNlcnZlclBvcnQiLCIzMzcwMCIpOworICAgIC8vcDIucHV0KCAiY29tLnN1bi5DT1JCQS5QT0EuT1JCUGVyc2lzdGVudFNlcnZlclBvcnQiLCIzMzcwMCIpOwogICAgICAgICBvcmcub21nLkNPUkJBLk9SQiBvcmIgPSBvcmcub21nLkNPUkJBLk9SQi5pbml0KCBuZXcgU3RyaW5nW117IiIsIiJ9LCBwMiApOwogICAgICAgICAvLyBjcmVhdGUgYW5kIGluaXRpYWxpemUgdGhlIE9SQgotCS8vT1JCIG9yYiA9IE9SQi5pbml0KGFyZ3MsIG51bGwpOworICAgIC8vT1JCIG9yYiA9IE9SQi5pbml0KGFyZ3MsIG51bGwpOwogCiAgICAgICAgIC8vIGdldCB0aGUgcm9vdCBuYW1pbmcgY29udGV4dAotICAgICAgICBvcmcub21nLkNPUkJBLk9iamVjdCBvYmpSZWYgPSAKLQkgICAgb3JiLnJlc29sdmVfaW5pdGlhbF9yZWZlcmVuY2VzKCJOYW1lU2VydmljZSIpOwotICAgICAgICAvLyBVc2UgTmFtaW5nQ29udGV4dEV4dCBpbnN0ZWFkIG9mIE5hbWluZ0NvbnRleHQuIFRoaXMgaXMgCi0gICAgICAgIC8vIHBhcnQgb2YgdGhlIEludGVyb3BlcmFibGUgbmFtaW5nIFNlcnZpY2UuICAKKyAgICAgICAgb3JnLm9tZy5DT1JCQS5PYmplY3Qgb2JqUmVmID0KKyAgICAgICAgb3JiLnJlc29sdmVfaW5pdGlhbF9yZWZlcmVuY2VzKCJOYW1lU2VydmljZSIpOworICAgICAgICAvLyBVc2UgTmFtaW5nQ29udGV4dEV4dCBpbnN0ZWFkIG9mIE5hbWluZ0NvbnRleHQuIFRoaXMgaXMKKyAgICAgICAgLy8gcGFydCBvZiB0aGUgSW50ZXJvcGVyYWJsZSBuYW1pbmcgU2VydmljZS4KICAgICAgICAgTmFtaW5nQ29udGV4dEV4dCBuY1JlZiA9IE5hbWluZ0NvbnRleHRFeHRIZWxwZXIubmFycm93KG9ialJlZik7Ci0gCisKICAgICAgICAgLy8gcmVzb2x2ZSB0aGUgT2JqZWN0IFJlZmVyZW5jZSBpbiBOYW1pbmcKICAgICAgICAgU3RyaW5nIG5hbWUgPSAiSGVsbG8iOwogICAgICAgICBoZWxsb0ltcGwgPSBIZWxsb0hlbHBlci5uYXJyb3cobmNSZWYucmVzb2x2ZV9zdHIobmFtZSkpOwpAQCAtNTEsMTAgKzUxLDEwIEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihoZWxsb0ltcGwuc2F5SGVsbG8oKSk7CiAgICAgICAgIGhlbGxvSW1wbC5zaHV0ZG93bigpOwogCi0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRVJST1IgOiAiICsgZSkgOwotCSAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLm91dCk7Ci0JICB9CisgICAgICBlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0ub3V0KTsKKyAgICAgIH0KICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9leHRlcm5hbG5hbWVzZXJ2aWNlbG9va3VwL3NyYy9IZWxsb1NlcnZlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2V4dGVybmFsbmFtZXNlcnZpY2Vsb29rdXAvc3JjL0hlbGxvU2VydmVyLmphdmEKaW5kZXggODgwZTZlZC4uNzhiYTRiOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2V4dGVybmFsbmFtZXNlcnZpY2Vsb29rdXAvc3JjL0hlbGxvU2VydmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2V4dGVybmFsbmFtZXNlcnZpY2Vsb29rdXAvc3JjL0hlbGxvU2VydmVyLmphdmEKQEAgLTI5LDE0ICsyOSwxNCBAQAogICBwcml2YXRlIE9SQiBvcmI7CiAKICAgcHVibGljIHZvaWQgc2V0T1JCKE9SQiBvcmJfdmFsKSB7Ci0gICAgb3JiID0gb3JiX3ZhbDsgCisgICAgb3JiID0gb3JiX3ZhbDsKICAgfQotICAgIAorCiAgIC8vIGltcGxlbWVudCBzYXlIZWxsbygpIG1ldGhvZAogICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKCkgewogICAgIHJldHVybiAiXG5IZWxsbyB3b3JsZCAhIVxuIjsKICAgfQotICAgIAorCiAgIC8vIGltcGxlbWVudCBzaHV0ZG93bigpIG1ldGhvZAogICBwdWJsaWMgdm9pZCBzaHV0ZG93bigpIHsKICAgICBvcmIuc2h1dGRvd24oZmFsc2UpOwpAQCAtNTcsMTIgKzU3LDEyIEBACiAKICAgICAgIC8vIGNyZWF0ZSBzZXJ2YW50IGFuZCByZWdpc3RlciBpdCB3aXRoIHRoZSBPUkIKICAgICAgIEhlbGxvSW1wbCBoZWxsb0ltcGwgPSBuZXcgSGVsbG9JbXBsKCk7Ci0gICAgICBoZWxsb0ltcGwuc2V0T1JCKG9yYik7IAorICAgICAgaGVsbG9JbXBsLnNldE9SQihvcmIpOwogCiAgICAgICAvLyBnZXQgb2JqZWN0IHJlZmVyZW5jZSBmcm9tIHRoZSBzZXJ2YW50CiAgICAgICBvcmcub21nLkNPUkJBLk9iamVjdCByZWYgPSByb290cG9hLnNlcnZhbnRfdG9fcmVmZXJlbmNlKGhlbGxvSW1wbCk7CiAgICAgICBIZWxsbyBocmVmID0gSGVsbG9IZWxwZXIubmFycm93KHJlZik7Ci0JICAKKwogICAgICAgLy8gZ2V0IHRoZSByb290IG5hbWluZyBjb250ZXh0CiAgICAgICAvLyBOYW1lU2VydmljZSBpbnZva2VzIHRoZSBuYW1lIHNlcnZpY2UKICAgICAgIG9yZy5vbWcuQ09SQkEuT2JqZWN0IG9ialJlZiA9CkBAIC04MCwxNiArODAsMTYgQEAKIAogICAgICAgLy8gd2FpdCBmb3IgaW52b2NhdGlvbnMgZnJvbSBjbGllbnRzCiAgICAgICBvcmIucnVuKCk7Ci0gICAgfSAKLQkKKyAgICB9CisKICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOiAiICsgZSk7CiAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5vdXQpOwogICAgICAgfQotCSAgCisKICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TZXJ2ZXIgRXhpdGluZyAuLi4iKTsKLQkKKwogICB9CiB9Ci0gCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2luamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2luamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGE4NDI5NjguLjM4NjI0ZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9pbmplY3Rpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvaW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDExICsxNSwxMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ibmFtaW5nLWluamVjdGlvbiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9InRlc3QuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZ2xhc3NmaXNoLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9nbGFzc2Zpc2gtZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9pbmplY3Rpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2luamVjdGlvbi9idWlsZC54bWwKaW5kZXggNDZlNWVmNi4uN2U0NjM2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2luamVjdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2luamVjdGlvbi9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uLXdpdGgtZW5kb3JzZWQtZGlyIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTU4LDEyICs1OCwxMiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0hlbGxvKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC03MSw5ICs3MSw5IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtODQsNyArODQsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2luamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvaW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBkNjc2N2Y4Li4yNzMyNmM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvaW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvaW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjMsMzAgKzIzLDMwIEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewotCWFwcE5hbWUgPSBhcmdzWzBdOyAKLQlzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwotCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOyAgICAgICAKLSAgICAgICAgY2xpZW50LmRvVGVzdCgpOwkKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOworICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOworICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKICAgICB9CiAKICAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHt9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIEhlbGxvIGhlbGxvQmVhbiA9IChIZWxsbykgaWMubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvSGVsbG9CZWFuIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludm9raW5nICIgKyBoZWxsb0JlYW4gKyAiLCAiICsgaGVsbG9CZWFuLmluamVjdGVkVVJMKCkpOwotCSAgICBzdGF0LmFkZFN0YXR1cyhhcHBOYW1lLCBzdGF0LlBBU1MpOwotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgc3RhdC5hZGRTdGF0dXMoYXBwTmFtZSwgc3RhdC5GQUlMKTsKLQl9CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFwcE5hbWUsIHN0YXQuUEFTUyk7CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcHBOYW1lLCBzdGF0LkZBSUwpOworICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvaW5qZWN0aW9uL2VqYi9IZWxsb0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9pbmplY3Rpb24vZWpiL0hlbGxvQmVhbi5qYXZhCmluZGV4IGE3OGRmOTQuLmViODAxYTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9pbmplY3Rpb24vZWpiL0hlbGxvQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9pbmplY3Rpb24vZWpiL0hlbGxvQmVhbi5qYXZhCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgIGlmKEFycmF5cy5lcXVhbHMoZXhwZWN0ZWRVUkxzLCBhY3R1YWxVUkxzKSkgewogICAgICAgICAgICAgcmV0dXJuICgiR290IGV4cGVjdGVkICIgKyBBcnJheXMudG9TdHJpbmcoYWN0dWFsVVJMcykpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRXhwZWN0aW5nICIgKyBBcnJheXMudG9TdHJpbmcoZXhwZWN0ZWRVUkxzKSArIAorICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRXhwZWN0aW5nICIgKyBBcnJheXMudG9TdHJpbmcoZXhwZWN0ZWRVUkxzKSArCiAgICAgICAgICAgICAgICAgIiwgYWN0dWFsICIgKyBBcnJheXMudG9TdHJpbmcoYWN0dWFsVVJMcykpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xpc3RqbmRpL0xpc3RKbmRpRW50cmllc1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9saXN0am5kaS9MaXN0Sm5kaUVudHJpZXNUZXN0LmphdmEKaW5kZXggNGRkNmE0OC4uOTJmYzM5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xpc3RqbmRpL0xpc3RKbmRpRW50cmllc1Rlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbGlzdGpuZGkvTGlzdEpuZGlFbnRyaWVzVGVzdC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBMaXN0Sm5kaUVudHJpZXNUZXN0IGV4dGVuZHMgQWRtaW5CYXNlRGV2VGVzdCB7CiAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEVYUEVDVEVEX1RPS0VOUyA9IAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nW10gRVhQRUNURURfVE9LRU5TID0KICAgICB7IlVzZXJUcmFuc2FjdGlvbjoiLCAiamF2YTpnbG9iYWw6IiwgImVqYjoiLCAiY29tLnN1bi5lbnRlcnByaXNlLm5hbWluZy5pbXBsLlRyYW5zaWVudENvbnRleHQifTsKIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOU1RBTkNFX1JFU09VUkNFX05BTUUgPSAiSU5TVEFOQ0VfUkVTT1VSQ0VfTkFNRSI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbGlzdGpuZGkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xpc3RqbmRpL2J1aWxkLnhtbAppbmRleCBkMTY3NjViLi4xOTdmODAxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbGlzdGpuZGkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9saXN0am5kaS9idWlsZC54bWwKQEAgLTU2LDEyICs1NiwxMiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCI+CiAgICAgICAgIDxta2RpciBkaXI9ImJ1aWxkIi8+Ci0gICAgICAgIDxqYXZhYyAgaW5jbHVkZUFudFJ1bnRpbWU9ImZhbHNlIiBkZXN0ZGlyPSJidWlsZCIgZGVidWc9InRydWUiIAorICAgICAgICA8amF2YWMgIGluY2x1ZGVBbnRSdW50aW1lPSJmYWxzZSIgZGVzdGRpcj0iYnVpbGQiIGRlYnVnPSJ0cnVlIgogICAgICAgICAgICAgICAgc3JjZGlyPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvYWRtaW4vY2xpL3NyYyIgaW5jbHVkZXM9IioqL0FkbWluQmFzZURldlRlc3QuamF2YSI+CiAKICAgICAgICAgICAgIDxjbGFzc3BhdGggcGF0aD0iJHtjbGFzc3BhdGh9Ii8+CiAgICAgICAgIDwvamF2YWM+Ci0gICAgICAgIDxqYXZhYyAgaW5jbHVkZUFudFJ1bnRpbWU9ImZhbHNlIiAKKyAgICAgICAgPGphdmFjICBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiCiAgICAgICAgICAgICAgICBkZXN0ZGlyPSJidWlsZCIgZGVidWc9InRydWUiIHNyY2Rpcj0iLiIgaW5jbHVkZXM9IioqLyouamF2YSI+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoIHBhdGg9IiR7Y2xhc3NwYXRofSIvPgogICAgICAgICA8L2phdmFjPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvYnVpbGQueG1sCmluZGV4IGUyYWY3YWMuLmFmZDBhNjc3YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2J1aWxkLnhtbApAQCAtNzcsMTUgKzc3LDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4gVXNhZ2U6Ci0JCWFudCBlbnJvbGxlciAoRXhlY3V0ZXMgdGhlIGVucm9sbGVyIHRlc3RzKQotCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYiBibXAgdGVzdHMpCi0JCWFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgZWpiIGJtcCB0ZXN0cykKLQkJYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBlamIgYm1wIHRlc3RzKQotCQlhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgYm1wIHRlc3RzKQotCQlhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgZWpiIGJtcCBhcHBzKQotCQlhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlIGJtcCBhcHBzKQotCQlhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIGJtcCB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+IFVzYWdlOgorICAgICAgICBhbnQgZW5yb2xsZXIgKEV4ZWN1dGVzIHRoZSBlbnJvbGxlciB0ZXN0cykKKyAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamIgYm1wIHRlc3RzKQorICAgICAgICBhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIGVqYiBibXAgdGVzdHMpCisgICAgICAgIGFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgZWpiIGJtcCB0ZXN0cykKKyAgICAgICAgYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIGJtcCB0ZXN0cykKKyAgICAgICAgYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIGVqYiBibXAgYXBwcykKKyAgICAgICAgYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSBibXAgYXBwcykKKyAgICAgICAgYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBibXAgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzdlZmIxZS4uNzc2ZDU1ZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImxvYWRiYWxhbmNpbmciLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LUFwcCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tQXBwIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImRlZmF1bHQtaW5zdGFuY2UiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvYnVpbGQueG1sCmluZGV4IDI1MzE0YjAuLmZkMTQ1MTAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9idWlsZC54bWwKQEAgLTMyLDExICszMiwxMSBAQAogICAgICZydW47CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2x1c3Rlci1zZXR1cCxidWlsZCxzZXR1cCxkZXBsb3kscnVuLWFwcGNsaWVudDEscnVuLWFwcGNsaWVudDIscnVuLWFwcGNsaWVudDMscnVuLWFwcGNsaWVudDQsdW5kZXBsb3ksdW5zZXR1cCxjbHVzdGVyLXVuc2V0dXAiLz4KLSAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InNxbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPCEtLQogICAgICAgQ2xlYW4gdGhlIGRhdGFiYXNlIGFmdGVyIHRoZSBydW4gc2luY2UgaXQgcHJvaGliaXRzIHJlLXJ1bm5pbmcKQEAgLTQ5LDM0ICs0OSwzNCBAQAogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0icnVuLWFwcGNsaWVudDEiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8ZWNobyBtZXNzYWdlPSJydW5uaW5nIGluIEFDQyB3aXRoIFMxQVNDdHhGYWN0b3J5Li4uIi8+Ci0gICAJPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KLQkgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIteG1sIC4vZGVzY3JpcHRvci9zdW4tYWNjLWxiLnhtbCAxMjkuMTQ1LjEzMy42NCAzMzcwMCIvPgotCTwvYW50Y2FsbD4KKyAgICA8ZWNobyBtZXNzYWdlPSJydW5uaW5nIGluIEFDQyB3aXRoIFMxQVNDdHhGYWN0b3J5Li4uIi8+CisgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KKyAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIteG1sIC4vZGVzY3JpcHRvci9zdW4tYWNjLWxiLnhtbCAxMjkuMTQ1LjEzMy42NCAzMzcwMCIvPgorICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzcWwiLz4KIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4tYXBwY2xpZW50MiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxlY2hvIG1lc3NhZ2U9InJ1bm5pbmcgaW4gQUNDIHdpdGggUzFBU0N0eEZhY3RvcnkuLi4iLz4KLSAgIAk8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgotCSAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9Ii14bWwgLi9kZXNjcmlwdG9yL3N1bi1hY2MtbGIxLnhtbCAxMjkuMTQ1LjEzMy42NCAzMzcwMCIvPgotCTwvYW50Y2FsbD4KKyAgICA8ZWNobyBtZXNzYWdlPSJydW5uaW5nIGluIEFDQyB3aXRoIFMxQVNDdHhGYWN0b3J5Li4uIi8+CisgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KKyAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIteG1sIC4vZGVzY3JpcHRvci9zdW4tYWNjLWxiMS54bWwgMTI5LjE0NS4xMzMuNjQgMzM3MDAiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3FsIi8+CiA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLWFwcGNsaWVudDMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8ZWNobyBtZXNzYWdlPSJydW5uaW5nIGluIEFDQyB3aXRoIFMxQVNDdHhGYWN0b3J5Li4uIi8+Ci0gICAJPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KLQkgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIteG1sIC4vZGVzY3JpcHRvci9zdW4tYWNjLWxiMi54bWwgMTI5LjE0NS4xMzMuNjQgMzM3MDAiLz4KLQk8L2FudGNhbGw+CisgICAgPGVjaG8gbWVzc2FnZT0icnVubmluZyBpbiBBQ0Mgd2l0aCBTMUFTQ3R4RmFjdG9yeS4uLiIvPgorICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CisgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iLXhtbCAuL2Rlc2NyaXB0b3Ivc3VuLWFjYy1sYjIueG1sIDEyOS4xNDUuMTMzLjY0IDMzNzAwIi8+CisgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNxbCIvPgogPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1hcHBjbGllbnQ0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPGVjaG8gbWVzc2FnZT0icnVubmluZyBpbiBBQ0Mgd2l0aCBTMUFTQ3R4RmFjdG9yeS4uLiIvPgotICAgCTxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+Ci0JICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iLXhtbCAuL2Rlc2NyaXB0b3Ivc3VuLWFjYy1sYjMueG1sIDEyOS4xNDUuMTMzLjY0IDMzNzAwIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxlY2hvIG1lc3NhZ2U9InJ1bm5pbmcgaW4gQUNDIHdpdGggUzFBU0N0eEZhY3RvcnkuLi4iLz4KKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgorICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9Ii14bWwgLi9kZXNjcmlwdG9yL3N1bi1hY2MtbGIzLnhtbCAxMjkuMTQ1LjEzMy42NCAzMzcwMCIvPgorICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzcWwiLz4KIDwvdGFyZ2V0PgogCkBAIC05MSwxMyArOTEsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qU3R1ZGVudCouY2xhc3MsKiovKkVucm9sbGVyKi5jbGFzcywqKi8qQ291cnNlKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9Db3Vyc2UuY2xhc3MsKiovRW5yb2xsZXIuY2xhc3MsKiovU3R1ZGVudC5jbGFzcywqKi8qSG9tZSouY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX2RlcmJ5LnNxbCIvPgpAQCAtMTA2LDQ2ICsxMDYsNDYgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImJtcEVucm9sbGVyUG9vbCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvYm1wLWVucm9sbGVyREIiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZSIgdmFsdWU9IkMxIi8+Ci0JPC9hbnRjYWxsPgotCTwhLS1hbnRjYWxsIHRhcmdldD0iZGVwbG95LWptcy1jb21tb24iLz4JCi0JPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLy0tPgorICAgIDwvYW50Y2FsbD4KKyAgICA8IS0tYW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qbXMtY29tbW9uIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLy0tPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyB2aWEgYXNhZG1pbi4uLiIvPiAgICAgCisgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgdmlhIGFzYWRtaW4uLi4iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbi1lZSI+CiAgICAgPHBhcmFtIG5hbWU9ImVlIiB2YWx1ZT0iZW50ZXJwcmlzZSBlZGl0aW9uIi8+CiA8cGFyYW0gbmFtZT0iYXBwc2VydmVyLmluc3RhbmNlLm5hbWUiIHZhbHVlPSJDMSIvPgogPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgICAgPCEtLSBUYXJnZXQgdG8gcnVuIHRoZSBzdGFuZGFsb25lIGNsaWVudCB3aXRob3V0IEFDQyAtLT4KIDwhLS0tLT4KICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogICAgIDx0YXJnZXQgbmFtZT0icnVuLXN0YW5kYWxvbmUtY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPHByb3BlcnR5IG5hbWU9ImNsaWVudC50eXBlIgotCSAgICAgICAgICB2YWx1ZT0ic3RhbmRhbG9uZSIvPgotCTxqYXZhIGNsYXNzbmFtZT0iY29tLnN1bi5zMXBlcWUubG9hZGJhbGFuY2luZy5jbGllbnQuRW5yb2xsZXJDbGllbnQiCisgICAgPHByb3BlcnR5IG5hbWU9ImNsaWVudC50eXBlIgorICAgICAgICAgICAgICB2YWx1ZT0ic3RhbmRhbG9uZSIvPgorICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnN1bi5zMXBlcWUubG9hZGJhbGFuY2luZy5jbGllbnQuRW5yb2xsZXJDbGllbnQiCiAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9pbXEvbGliL2ltcS5qYXI6JHtlbnYuUzFBU19IT01FfS9pbXEvbGliL2ltcWptc3JhLmphcjoke2Vudi5TMUFTX0hPTUV9L2ltcS9saWIvam1zLmphcjoke3MxYXN0ZXN0LmNsYXNzcGF0aH06JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIiBmYWlsb25lcnJvcj0idHJ1ZSIgZm9yaz0idHJ1ZSI+Ci0JPCEtLWp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxIb3N0PSR7YWRtaW4uaG9zdH0iLz4KLQk8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iLy0tPgorICAgIDwhLS1qdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsSG9zdD0ke2FkbWluLmhvc3R9Ii8+CisgICAgPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0PSR7b3JiLnBvcnR9Ii8tLT4KICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURqYXZhLm5hbWluZy5wcm92aWRlci51cmw9aWlvcDovLzEyOS4xNDUuMTMzLjY0OjMzNzAwIi8+CiAKLQk8IS0tanZtYXJnIHZhbHVlPSItRGNvbS5zdW4uYXBwc2Vydi5paW9wLmVuZHBvaW50cz1wYXRoZmluZGVyLnNmYmF5LnN1bi5jb206MzY5MCxwYXRoZmluZGVyLnNmYmF5LnN1bi5jb206Mzg4MCIvLS0+Ci0JPGp2bWFyZyB2YWx1ZT0iLURjb20uc3VuLmFwcHNlcnYuaWlvcC5sb2FkYmFsYW5jaW5ncG9saWN5PWljLWJhc2VkIi8+Ci0JPGFyZyB2YWx1ZT0iMTI5LjE0NS4xMzMuNjQiLz4KLQk8YXJnIHZhbHVlPSIzMzcwMCIvPgotCTxhcmcgdmFsdWU9IiR7Y2xpZW50LnR5cGV9Ii8+CisgICAgPCEtLWp2bWFyZyB2YWx1ZT0iLURjb20uc3VuLmFwcHNlcnYuaWlvcC5lbmRwb2ludHM9cGF0aGZpbmRlci5zZmJheS5zdW4uY29tOjM2OTAscGF0aGZpbmRlci5zZmJheS5zdW4uY29tOjM4ODAiLy0tPgorICAgIDxqdm1hcmcgdmFsdWU9Ii1EY29tLnN1bi5hcHBzZXJ2Lmlpb3AubG9hZGJhbGFuY2luZ3BvbGljeT1pYy1iYXNlZCIvPgorICAgIDxhcmcgdmFsdWU9IjEyOS4xNDUuMTMzLjY0Ii8+CisgICAgPGFyZyB2YWx1ZT0iMzM3MDAiLz4KKyAgICA8YXJnIHZhbHVlPSIke2NsaWVudC50eXBlfSIvPgogICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgogCi0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiI+ICAgICAgCisgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiI+CiAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwc2VydmVyLmluc3RhbmNlLm5hbWUiIHZhbHVlPSJDMSIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICA8L3RhcmdldD4gICAKKyAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDwhLS1hbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktam1zLWNvbW1vbiIvLS0+CkBAIC0xNTcsNyArMTU3LDcgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvYm1wLWVucm9sbGVyREIiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcHNlcnZlci5pbnN0YW5jZS5uYW1lIiB2YWx1ZT0iQzEiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvY2xpZW50L0Vucm9sbGVyQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9jbGllbnQvRW5yb2xsZXJDbGllbnQuamF2YQppbmRleCA3MDhiNTQ1Li43ZmE1MzNjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9jbGllbnQvRW5yb2xsZXJDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9jbGllbnQvRW5yb2xsZXJDbGllbnQuamF2YQpAQCAtMzYsMjAgKzM2LDIwIEBACiAgICAgcHJpdmF0ZSBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsgCi0gICAgICAgIEVucm9sbGVyQ2xpZW50IGNsaWVudCA9IG5ldyBFbnJvbGxlckNsaWVudCgpOyAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIEVucm9sbGVyQ2xpZW50IGNsaWVudCA9IG5ldyBFbnJvbGxlckNsaWVudCgpOwogCiAgICAgICAgIC8vIHJ1biB0aGUgdGVzdHMKLSAgICAgICAgY2xpZW50LnJ1blRlc3RDbGllbnQoYXJncyk7ICAgCisgICAgICAgIGNsaWVudC5ydW5UZXN0Q2xpZW50KGFyZ3MpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJ1blRlc3RDbGllbnQoU3RyaW5nW10gYXJncykgewogICAgICAgICB0cnl7Ci0JICAgIEhhc2h0YWJsZSBlbnYgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgIEhhc2h0YWJsZSBlbnYgPSBuZXcgSGFzaHRhYmxlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUZXN0aW5nIGxvYWRiYWxhbmNpbmcgYXBwIC4uLiIpOwogCiAgICAgICAgICAgICB0ZXN0MDEoZW52LCBhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoImxvYWRiYWxhbmNpbmdBcHBJRCIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgibG9hZGJhbGFuY2luZ0FwcElEIik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gaW4gcnVuVGVzdENsaWVudDogIiArIGV4LnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC01OCwxMzEgKzU4LDEzMSBAQAogCiAKICAgICBwcml2YXRlIHZvaWQgdGVzdDAxKEhhc2h0YWJsZSBlbnYsIFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgCi0gICAgICAgIHRyeSB7Ci0gIAkgICAgZW52LnB1dCgiamF2YS5uYW1pbmcuZmFjdG9yeS5pbml0aWFsIiwKLQkJICAiY29tLnN1bi5hcHBzZXJ2Lm5hbWluZy5TMUFTQ3R4RmFjdG9yeSIpOwotCSAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoZW52KTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIE1FSkIuLi4iKTsKLQkgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJlamIvbWdtdC9NRUpCIik7IAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBlamIvbWdtdC9NRUpCIHdpdGggY29udGV4dCAwIik7CiAKLQkgICAgU3RyaW5nIGpuZGkgPSAiIjsJIAotCSAgICBpZiAoYXJncy5sZW5ndGggPT0gMyAmJiBhcmdzWzJdLmVxdWFscygic3RhbmRhbG9uZSIpKSB7Ci0JICAgICAgICBqbmRpID0gImVqYi9NeVN0dWRlbnQiOwotCSAgICB9IGVsc2Ugam5kaSA9ICJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVTdHVkZW50IjsKLQkgICAgQ29udGV4dCBpbml0aWFsMSA9IG5ldyBJbml0aWFsQ29udGV4dChlbnYpOwotCSAgICBvYmpyZWYgPSBpbml0aWFsMS5sb29rdXAoam5kaSk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwICIgKyBqbmRpICsgIiB3aXRoIGNvbnRleHQgMSIpOwotCSAgICBTdHVkZW50SG9tZSBzSG9tZSA9IAotCSAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCi0JCQkJCQkJU3R1ZGVudEhvbWUuY2xhc3MpOworICAgICAgICB0cnkgeworICAgICAgICAgIGVudi5wdXQoImphdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbCIsCisgICAgICAgICAgImNvbS5zdW4uYXBwc2Vydi5uYW1pbmcuUzFBU0N0eEZhY3RvcnkiKTsKKyAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KGVudik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBNRUpCLi4uIik7CisgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiZWpiL21nbXQvTUVKQiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBlamIvbWdtdC9NRUpCIHdpdGggY29udGV4dCAwIik7CisKKyAgICAgICAgU3RyaW5nIGpuZGkgPSAiIjsKKyAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09IDMgJiYgYXJnc1syXS5lcXVhbHMoInN0YW5kYWxvbmUiKSkgeworICAgICAgICAgICAgam5kaSA9ICJlamIvTXlTdHVkZW50IjsKKyAgICAgICAgfSBlbHNlIGpuZGkgPSAiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU3R1ZGVudCI7CisgICAgICAgIENvbnRleHQgaW5pdGlhbDEgPSBuZXcgSW5pdGlhbENvbnRleHQoZW52KTsKKyAgICAgICAgb2JqcmVmID0gaW5pdGlhbDEubG9va3VwKGpuZGkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCAiICsgam5kaSArICIgd2l0aCBjb250ZXh0IDEiKTsKKyAgICAgICAgU3R1ZGVudEhvbWUgc0hvbWUgPQorICAgICAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHVkZW50SG9tZS5jbGFzcyk7CiAgICAgICAgICAgICBTdHVkZW50IGRlbmlzZSA9IHNIb21lLmNyZWF0ZSgiODIzIiwgIkRlbmlzZSBTbWl0aCIpOwogCi0JICAgIENvbnRleHQgaW5pdGlhbDIgPSBuZXcgSW5pdGlhbENvbnRleHQoZW52KTsKLQkgICAgb2JqcmVmPSBpbml0aWFsMi5sb29rdXAoam5kaSk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwICIgKyBqbmRpICsgIiB3aXRoIGNvbnRleHQgMiIpOyAgICAgICAgICAgIAotICAgICAgICAgICAgc0hvbWUgPSAKLSAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICBDb250ZXh0IGluaXRpYWwyID0gbmV3IEluaXRpYWxDb250ZXh0KGVudik7CisgICAgICAgIG9ianJlZj0gaW5pdGlhbDIubG9va3VwKGpuZGkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCAiICsgam5kaSArICIgd2l0aCBjb250ZXh0IDIiKTsKKyAgICAgICAgICAgIHNIb21lID0KKyAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R1ZGVudEhvbWUuY2xhc3MpOwogICAgICAgICAgICAgU3R1ZGVudCBqaW0gPSBzSG9tZS5jcmVhdGUoIjgyOCIsICJKaW0gR29vZHllYXIiKTsKIAogCi0JICAgIENvbnRleHQgaW5pdGlhbDMgPSBuZXcgSW5pdGlhbENvbnRleHQoZW52KTsKLQkgICAgb2JqcmVmPSBpbml0aWFsMy5sb29rdXAoImVqYi9NeVN0dWRlbnQiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgZWpiL015U3R1ZGVudCB3aXRoIGNvbnRleHQgMyIpOwotCSAgICBzSG9tZSA9IAotCSAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCi0JCQkJCQkJU3R1ZGVudEhvbWUuY2xhc3MpOworICAgICAgICBDb250ZXh0IGluaXRpYWwzID0gbmV3IEluaXRpYWxDb250ZXh0KGVudik7CisgICAgICAgIG9ianJlZj0gaW5pdGlhbDMubG9va3VwKCJlamIvTXlTdHVkZW50Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGVqYi9NeVN0dWRlbnQgd2l0aCBjb250ZXh0IDMiKTsKKyAgICAgICAgc0hvbWUgPQorICAgICAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHVkZW50SG9tZS5jbGFzcyk7CiAgICAgICAgICAgICBTdHVkZW50IHNjb3R0ID0gc0hvbWUuY3JlYXRlKCI4MjYiLCAiU2NvdHQgV2hpdGUiKTsKIAotCSAgICBDb250ZXh0IGluaXRpYWw0ID0gbmV3IEluaXRpYWxDb250ZXh0KGVudik7Ci0JICAgIG9ianJlZj0gaW5pdGlhbDQubG9va3VwKCJlamIvTXlTdHVkZW50Iik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGVqYi9NeVN0dWRlbnQgd2l0aCBjb250ZXh0IDQiKTsKLQkgICAgc0hvbWUgPSAKLQkgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAotCQkJCQkJCVN0dWRlbnRIb21lLmNsYXNzKTsKKyAgICAgICAgQ29udGV4dCBpbml0aWFsNCA9IG5ldyBJbml0aWFsQ29udGV4dChlbnYpOworICAgICAgICBvYmpyZWY9IGluaXRpYWw0Lmxvb2t1cCgiZWpiL015U3R1ZGVudCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBlamIvTXlTdHVkZW50IHdpdGggY29udGV4dCA0Iik7CisgICAgICAgIHNIb21lID0KKyAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R1ZGVudEhvbWUuY2xhc3MpOwogICAgICAgICAgICAgU3R1ZGVudCBqb2huID0gc0hvbWUuY3JlYXRlKCI4NDQiLCAiSm9obiBXYXluZSIpOwogCi0JICAgIENvbnRleHQgaW5pdGlhbDUgPSBuZXcgSW5pdGlhbENvbnRleHQoZW52KTsKLQkgICAgb2JqcmVmID0gaW5pdGlhbDUubG9va3VwKCJjb3JiYW5hbWU6aWlvcDoiICsgYXJnc1swXSArICI6IiArIGFyZ3NbMV0gKyAiI2VqYi9NeVN0dWRlbnQiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgY29yYmFuYW1lOmlpb3A6IiArIGFyZ3NbMF0gKyAiOiIgKyBhcmdzWzFdICsgIiNlamIvTXlTdHVkZW50Iik7Ci0JICAgIHNIb21lID0gCi0JICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKLQkJCQkJCQlTdHVkZW50SG9tZS5jbGFzcyk7CisgICAgICAgIENvbnRleHQgaW5pdGlhbDUgPSBuZXcgSW5pdGlhbENvbnRleHQoZW52KTsKKyAgICAgICAgb2JqcmVmID0gaW5pdGlhbDUubG9va3VwKCJjb3JiYW5hbWU6aWlvcDoiICsgYXJnc1swXSArICI6IiArIGFyZ3NbMV0gKyAiI2VqYi9NeVN0dWRlbnQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgY29yYmFuYW1lOmlpb3A6IiArIGFyZ3NbMF0gKyAiOiIgKyBhcmdzWzFdICsgIiNlamIvTXlTdHVkZW50Iik7CisgICAgICAgIHNIb21lID0KKyAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R1ZGVudEhvbWUuY2xhc3MpOwogICAgICAgICAgICAgU3R1ZGVudCB0aW0gPSBzSG9tZS5jcmVhdGUoIjU1NSIsICJUaW0gRHVuY2FuIik7Ci0JICAgIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9hZGJhbGFuY2luZyBmb3IgamF2YTpjb21wIG5hbWVzIDoiKTsJICAgIAotCSAgICBTdHJpbmdbXSBkZW5pc2VFbmRwb2ludCA9IGRlbmlzZS5nZXRTZXJ2ZXJIb3N0UG9ydCgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlbmlzZSBTbWl0aCBjcmVhdGVkIG9uICIgKyAKLQkJCSAgICAgICBkZW5pc2VFbmRwb2ludFswXSArICI6IiArIGRlbmlzZUVuZHBvaW50WzFdKTsKLQkgICAgU3RyaW5nW10gamltRW5kcG9pbnQgPSBqaW0uZ2V0U2VydmVySG9zdFBvcnQoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJKaW0gR29vZHllYXIgY3JlYXRlZCBvbiAiICsgCi0JCQkgICAgICAgamltRW5kcG9pbnRbMF0gKyAiOiIgKyBqaW1FbmRwb2ludFsxXSk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9hZGJhbGFuY2luZyBmb3IgZ2xvYmFsIGpuZGkgbmFtZXMgOiIpOyAKLQkgICAgU3RyaW5nW10gc2NvdHRFbmRwb2ludCA9IHNjb3R0LmdldFNlcnZlckhvc3RQb3J0KCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2NvdHQgV2hpdGUgY3JlYXRlZCBvbiAiICsgCi0JCQkgICAgICAgc2NvdHRFbmRwb2ludFswXSArICI6IiArIHNjb3R0RW5kcG9pbnRbMV0pOwotCSAgICBTdHJpbmdbXSBqb2huRW5kcG9pbnQgPSBqb2huLmdldFNlcnZlckhvc3RQb3J0KCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSm9obiBXYXluZSBjcmVhdGVkIG9uICIgKyAKLQkJCSAgICAgICBqb2huRW5kcG9pbnRbMF0gKyAiOiIgKyBqb2huRW5kcG9pbnRbMV0pOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb2FkYmFsYW5jaW5nIGZvciBqYXZhOmNvbXAgbmFtZXMgOiIpOworICAgICAgICBTdHJpbmdbXSBkZW5pc2VFbmRwb2ludCA9IGRlbmlzZS5nZXRTZXJ2ZXJIb3N0UG9ydCgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlbmlzZSBTbWl0aCBjcmVhdGVkIG9uICIgKworICAgICAgICAgICAgICAgICAgIGRlbmlzZUVuZHBvaW50WzBdICsgIjoiICsgZGVuaXNlRW5kcG9pbnRbMV0pOworICAgICAgICBTdHJpbmdbXSBqaW1FbmRwb2ludCA9IGppbS5nZXRTZXJ2ZXJIb3N0UG9ydCgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkppbSBHb29keWVhciBjcmVhdGVkIG9uICIgKworICAgICAgICAgICAgICAgICAgIGppbUVuZHBvaW50WzBdICsgIjoiICsgamltRW5kcG9pbnRbMV0pOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CisKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvYWRiYWxhbmNpbmcgZm9yIGdsb2JhbCBqbmRpIG5hbWVzIDoiKTsKKyAgICAgICAgU3RyaW5nW10gc2NvdHRFbmRwb2ludCA9IHNjb3R0LmdldFNlcnZlckhvc3RQb3J0KCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2NvdHQgV2hpdGUgY3JlYXRlZCBvbiAiICsKKyAgICAgICAgICAgICAgICAgICBzY290dEVuZHBvaW50WzBdICsgIjoiICsgc2NvdHRFbmRwb2ludFsxXSk7CisgICAgICAgIFN0cmluZ1tdIGpvaG5FbmRwb2ludCA9IGpvaG4uZ2V0U2VydmVySG9zdFBvcnQoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKb2huIFdheW5lIGNyZWF0ZWQgb24gIiArCisgICAgICAgICAgICAgICAgICAgam9obkVuZHBvaW50WzBdICsgIjoiICsgam9obkVuZHBvaW50WzFdKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwogCiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwotCSAgICBTdHJpbmdbXSB0aW1FbmRwb2ludCA9IHRpbS5nZXRTZXJ2ZXJIb3N0UG9ydCgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRpbSBEdW5jYW4gY3JlYXRlZCBvbiAiICsgCi0JCQkgICAgICAgdGltRW5kcG9pbnRbMF0gKyAiOiIgKyB0aW1FbmRwb2ludFsxXSk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKLQkgICAgYm9vbGVhbiBwYXNzID0gZmFsc2U7Ci0JICAgIFN0cmluZ1tdIGFkZHIgPSBnZXRBZGRyZXNzUG9ydExpc3QoYXJnc1swXSArICI6IiArIGFyZ3NbMV0pOwotCSAgICBmb3IgKGludCBqID0gMDsgaiA8IGFkZHIubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworICAgICAgICBTdHJpbmdbXSB0aW1FbmRwb2ludCA9IHRpbS5nZXRTZXJ2ZXJIb3N0UG9ydCgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRpbSBEdW5jYW4gY3JlYXRlZCBvbiAiICsKKyAgICAgICAgICAgICAgICAgICB0aW1FbmRwb2ludFswXSArICI6IiArIHRpbUVuZHBvaW50WzFdKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworICAgICAgICBib29sZWFuIHBhc3MgPSBmYWxzZTsKKyAgICAgICAgU3RyaW5nW10gYWRkciA9IGdldEFkZHJlc3NQb3J0TGlzdChhcmdzWzBdICsgIjoiICsgYXJnc1sxXSk7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYWRkci5sZW5ndGg7IGorKykgewogU3lzdGVtLm91dC5wcmludGxuKCJhZGRyW2pdLi4uIiArIGFkZHJbal0pOwotCSAgICAgIGlmICgoYWRkcltqXS50cmltKCkpLmVxdWFscygodGltRW5kcG9pbnRbMF0gKyAiOiIgKyB0aW1FbmRwb2ludFsxXSkudHJpbSgpKSkgewotCSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZm91bmQgcmlnaHQgYWRkcmVzcy4uLiIgKyBhZGRyW2pdKTsKLQkgICAgICBwYXNzID0gdHJ1ZTsKLQkgICAgICBicmVhazsKLQkgICAgICB9Ci0JICAgIH0KLQkgICAgaWYgKCFkZW5pc2VFbmRwb2ludFswXS5lcXVhbHMoamltRW5kcG9pbnRbMF0pICYmCQkKLQkJIWpvaG5FbmRwb2ludFswXS5lcXVhbHMoc2NvdHRFbmRwb2ludFswXSkgJiYgcGFzcyA9PSB0cnVlKSB7Ci0JICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0aW1FbmRwb2ludFswXSA9IiArIHRpbUVuZHBvaW50WzBdKTsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTE9BREJBTEFOQ0lORyBTVUNDRVNTRlVMISEiKTsKLQkJc3RhdC5hZGRTdGF0dXMoImxvYWQgYmFsYW5jaW5nIiwgc3RhdC5QQVNTKTsKLQkgICAgfSBlbHNlIGlmICghZGVuaXNlRW5kcG9pbnRbMV0uZXF1YWxzKGppbUVuZHBvaW50WzFdKSAmJgkgICAgICAgCi0JCSAgICAgICAham9obkVuZHBvaW50WzFdLmVxdWFscyhzY290dEVuZHBvaW50WzFdKSAmJiBwYXNzID09IHRydWUpIHsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTE9BREJBTEFOQ0lORyBTVUNDRVNTRlVMISEiKTsKLQkJc3RhdC5hZGRTdGF0dXMoImxvYWQgYmFsYW5jaW5nIiwgc3RhdC5QQVNTKTsKLQkgICAgfQotCSAgICAKKyAgICAgICAgICBpZiAoKGFkZHJbal0udHJpbSgpKS5lcXVhbHMoKHRpbUVuZHBvaW50WzBdICsgIjoiICsgdGltRW5kcG9pbnRbMV0pLnRyaW0oKSkpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZvdW5kIHJpZ2h0IGFkZHJlc3MuLi4iICsgYWRkcltqXSk7CisgICAgICAgICAgcGFzcyA9IHRydWU7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghZGVuaXNlRW5kcG9pbnRbMF0uZXF1YWxzKGppbUVuZHBvaW50WzBdKSAmJgorICAgICAgICAham9obkVuZHBvaW50WzBdLmVxdWFscyhzY290dEVuZHBvaW50WzBdKSAmJiBwYXNzID09IHRydWUpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRpbUVuZHBvaW50WzBdID0iICsgdGltRW5kcG9pbnRbMF0pOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMT0FEQkFMQU5DSU5HIFNVQ0NFU1NGVUwhISIpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9hZCBiYWxhbmNpbmciLCBzdGF0LlBBU1MpOworICAgICAgICB9IGVsc2UgaWYgKCFkZW5pc2VFbmRwb2ludFsxXS5lcXVhbHMoamltRW5kcG9pbnRbMV0pICYmCisgICAgICAgICAgICAgICAham9obkVuZHBvaW50WzFdLmVxdWFscyhzY290dEVuZHBvaW50WzFdKSAmJiBwYXNzID09IHRydWUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTE9BREJBTEFOQ0lORyBTVUNDRVNTRlVMISEiKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvYWQgYmFsYW5jaW5nIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgfQorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvYWQgYmFsYW5jaW5nIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uISIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICB9IAorICAgIH0KIAogICAvKioKICAgICogZm9sbG93aW5nIG1ldGhvZHMgKG92ZXItbG9hZGVkKSBmb3IgZ2V0dGluZyBhbGwgSVAgYWRkcmVzc2VzIGNvcnJlc3BvbmRpbmcKICAgICogdG8gYSBwYXJ0aWN1bGFyIGhvc3QuCi0gICAqIChtdWx0aS1ob21lZCBob3N0cykuIAorICAgKiAobXVsdGktaG9tZWQgaG9zdHMpLgogICAgKi8KICAgICBwcml2YXRlIFN0cmluZyBbXSBnZXRBZGRyZXNzUG9ydExpc3QoU3RyaW5nIGhvc3QpIHsKICAgICAgICAgVmVjdG9yIGFkZHJlc3NQb3J0VmVjdG9yID0gbmV3IFZlY3RvcigpOwogICAgICAgICB0cnkgewotCSAgICBJaW9wVXJsIHVybCA9IG5ldyBJaW9wVXJsKCJpaW9wOi8vIitob3N0KTsKLQkgICAgU3RyaW5nIFtdIGFwTGlzdCA9IGdldEFkZHJlc3NQb3J0TGlzdCh1cmwpOwotCSAgICBmb3IgKGludCBqPTA7IGo8YXBMaXN0Lmxlbmd0aDsgaisrKSB7Ci0JICAgICAgYWRkcmVzc1BvcnRWZWN0b3IuYWRkRWxlbWVudChhcExpc3Rbal0pOwotCSAgICB9Ci0JfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG1lKSB7Ci0JICBtZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0gICAKKyAgICAgICAgSWlvcFVybCB1cmwgPSBuZXcgSWlvcFVybCgiaWlvcDovLyIraG9zdCk7CisgICAgICAgIFN0cmluZyBbXSBhcExpc3QgPSBnZXRBZGRyZXNzUG9ydExpc3QodXJsKTsKKyAgICAgICAgZm9yIChpbnQgaj0wOyBqPGFwTGlzdC5sZW5ndGg7IGorKykgeworICAgICAgICAgIGFkZHJlc3NQb3J0VmVjdG9yLmFkZEVsZW1lbnQoYXBMaXN0W2pdKTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtZSkgeworICAgICAgbWUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQorCiAgICAgICAgIFN0cmluZyBbXSByZXQgPSBuZXcgU3RyaW5nW2FkZHJlc3NQb3J0VmVjdG9yLnNpemUoKV07CiAgICAgICAgIGZvciAoaW50IGk9MDsgaTxyZXQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIHJldFtpXSA9IChTdHJpbmcpYWRkcmVzc1BvcnRWZWN0b3IuZWxlbWVudEF0KGkpOwpAQCAtMTkwLDE4ICsxOTAsMTggQEAKICAgICAgICAgLy8gV2UgcmV0dXJuIGEgbGlzdCBvZiA8SVAgQUREUkVTUz46PFBPUlQ+IHZhbHVlcwogICAgICAgICByZXR1cm4gcmV0OwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIFtdIGdldEFkZHJlc3NQb3J0TGlzdChJaW9wVXJsIGlpb3BVcmwpIHsKICAgICAgICAgLy8gUHVsbCBvdXQgdGhlIGhvc3QgbmFtZSBhbmQgcG9ydAotICAgICAgICBJaW9wVXJsLkFkZHJlc3MgaWlvcFVybEFkZHJlc3MgPSAKKyAgICAgICAgSWlvcFVybC5BZGRyZXNzIGlpb3BVcmxBZGRyZXNzID0KICAgICAgICAgICAgICAgICAoSWlvcFVybC5BZGRyZXNzKShpaW9wVXJsLmdldEFkZHJlc3NlcygpLmVsZW1lbnRBdCgwKSk7CiAgICAgICAgIFN0cmluZyBob3N0ID0gaWlvcFVybEFkZHJlc3MuaG9zdDsKICAgICAgICAgaW50IHBvcnROdW1iZXIgPSBpaW9wVXJsQWRkcmVzcy5wb3J0OwogICAgICAgICBTdHJpbmcgcG9ydCA9IEludGVnZXIudG9TdHJpbmcocG9ydE51bWJlcik7CiAgICAgICAgIC8vIFdlIHJldHVybiBhIGxpc3Qgb2YgPElQIEFERFJFU1M+OjxQT1JUPiB2YWx1ZXMKLSAgICAgICAgcmV0dXJuIGdldEFkZHJlc3NQb3J0TGlzdChob3N0LCBwb3J0KTsgICAgICAgIAorICAgICAgICByZXR1cm4gZ2V0QWRkcmVzc1BvcnRMaXN0KGhvc3QsIHBvcnQpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIFtdIGdldEFkZHJlc3NQb3J0TGlzdChTdHJpbmcgaG9zdCwgU3RyaW5nIHBvcnQpIHsKICAgICAgICAgLy8gR2V0IHRoZSBpcCBhZGRyZXNzZXMgY29ycmVzcG9uZGluZyB0byB0aGUgaG9zdAogICAgICAgICB0cnkgewpAQCAtMjEzLDggKzIxMyw4IEBACiAgICAgICAgICAgICAvLyBXZSByZXR1cm4gYSBsaXN0IG9mIDxJUCBBRERSRVNTPjo8UE9SVD4gdmFsdWVzCiAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICB9IGNhdGNoIChVbmtub3duSG9zdEV4Y2VwdGlvbiB1a2hlKSB7Ci0JICB1a2hlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgdWtoZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CiAgICAgfQotfSAKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGRkZjBmNmQuLjFlNjU4NzcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtMjgsNyArMjgsNyBAQAogICAgICAgPHBlcnNpc3RlbmNlLXR5cGU+QmVhbjwvcGVyc2lzdGVuY2UtdHlwZT4KICAgICAgIDxwcmltLWtleS1jbGFzcz5qYXZhLmxhbmcuU3RyaW5nPC9wcmltLWtleS1jbGFzcz4KICAgICAgIDxyZWVudHJhbnQ+ZmFsc2U8L3JlZW50cmFudD4KLQk8cmVzb3VyY2UtcmVmPgorICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgIDxyZXMtcmVmLW5hbWU+amRiYy9ibXAtZW5yb2xsZXJEQjwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8cmVzLXR5cGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L3Jlcy10eXBlPgogICAgICAgICA8cmVzLWF1dGg+Q29udGFpbmVyPC9yZXMtYXV0aD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL2Rlc2NyaXB0b3Ivc3VuLWFjYy1sYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9kZXNjcmlwdG9yL3N1bi1hY2MtbGIueG1sCmluZGV4IDRhNjZlOTUuLmU2YTI1YzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL2Rlc2NyaXB0b3Ivc3VuLWFjYy1sYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvZGVzY3JpcHRvci9zdW4tYWNjLWxiLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8IURPQ1RZUEUgY2xpZW50LWNvbnRhaW5lciBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMgSW5jLi8vRFREIEFwcGxpY2F0aW9uIFNlcnZlciA4LjAgQXBwbGljYXRpb24gQ2xpZW50IENvbnRhaW5lci8vRU4iICJodHRwOi8vd3d3LnN1bi5jb20vc29mdHdhcmUvYXBwc2VydmVyL2R0ZHMvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC1jb250YWluZXJfMV8wLmR0ZCI+CiAKLTxjbGllbnQtY29udGFpbmVyPiAgCis8Y2xpZW50LWNvbnRhaW5lcj4KICAgPGxvZy1zZXJ2aWNlIGZpbGU9Ii4uL2FjYy5sb2ciIGxldmVsPSJGSU5FIi8+CiA8cHJvcGVydHkgbmFtZT0iY29tLnN1bi5hcHBzZXJ2Lmlpb3AubG9hZGJhbGFuY2luZ3BvbGljeSIgdmFsdWU9ImljLWJhc2VkIi8+CiA8cHJvcGVydHkgbmFtZT0iY29tLnN1bi5hcHBzZXJ2Lmlpb3AuZW5kcG9pbnRzIiB2YWx1ZT0ibG9jYWxob3N0OjMzNzAyLGxvY2FsaG9zdDozMzcwMSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvZGVzY3JpcHRvci9zdW4tYWNjLWxiMy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9kZXNjcmlwdG9yL3N1bi1hY2MtbGIzLnhtbAppbmRleCA3YWRlMTUwLi5hZmIzM2FmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9kZXNjcmlwdG9yL3N1bi1hY2MtbGIzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9kZXNjcmlwdG9yL3N1bi1hY2MtbGIzLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8IURPQ1RZUEUgY2xpZW50LWNvbnRhaW5lciBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMgSW5jLi8vRFREIEFwcGxpY2F0aW9uIFNlcnZlciA4LjAgQXBwbGljYXRpb24gQ2xpZW50IENvbnRhaW5lci8vRU4iICJodHRwOi8vd3d3LnN1bi5jb20vc29mdHdhcmUvYXBwc2VydmVyL2R0ZHMvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC1jb250YWluZXJfMV8wLmR0ZCI+CiAKLTxjbGllbnQtY29udGFpbmVyPiAgCis8Y2xpZW50LWNvbnRhaW5lcj4KICAgPHRhcmdldC1zZXJ2ZXIgbmFtZT0ibG9jYWxob3N0IiBhZGRyZXNzPSJsb2NhbGhvc3QiIHBvcnQ9IjMzNzAwIi8+CiAgIDxsb2ctc2VydmljZSBmaWxlPSIuLi9hY2MubG9nIiBsZXZlbD0iRklORSIvPgogPHByb3BlcnR5IG5hbWU9ImNvbS5zdW4uYXBwc2Vydi5paW9wLmxvYWRiYWxhbmNpbmdwb2xpY3kiIHZhbHVlPSJpYy1iYXNlZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvZWpiL1N0dWRlbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL2VqYi9TdHVkZW50LmphdmEKaW5kZXggOTdkZTUyMy4uYWM0YjMzZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvZWpiL1N0dWRlbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9lamIvU3R1ZGVudC5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiAKIAogcHVibGljIGludGVyZmFjZSBTdHVkZW50IGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAKKwogICAvKioKICAgICogUmV0dXJucyB0aGUgTmFtZSBvZiBhIHN0dWRlbnQuCiAgICAqIGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL2VqYi9TdHVkZW50QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvZWpiL1N0dWRlbnRCZWFuLmphdmEKaW5kZXggODAyM2JiNi4uOWI0ZTY3OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvZWpiL1N0dWRlbnRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvZWpiL1N0dWRlbnRCZWFuLmphdmEKQEAgLTU5LDcgKzU5LDcgQEAKIAogICAgICAgICB0aGlzLnN0dWRlbnRJZCA9IHN0dWRlbnRJZDsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgU3R1ZGVudCB3aXRoIElEICIgKyBzdHVkZW50SWQgKyAiIGFuZCBOYW1lICIgKyBuYW1lKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgU3R1ZGVudCB3aXRoIElEICIgKyBzdHVkZW50SWQgKyAiIGFuZCBOYW1lICIgKyBuYW1lKTsKICAgICAgICAgcmV0dXJuIHN0dWRlbnRJZDsKICAgICB9CiAKQEAgLTkwLDEzICs5MCwxMyBAQAogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsKLQl0cnkgewotCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBkYXRhU291cmNlID0gCi0JICAgICAgKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qZGJjL2JtcC1lbnJvbGxlckRCIik7Ci0gICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsgICAgICAgICAgICAKLQkgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCSB9CisgICAgdHJ5IHsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZGF0YVNvdXJjZSA9CisgICAgICAgICAgKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qZGJjL2JtcC1lbnJvbGxlckRCIik7CisgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgewpAQCAtMjI3LDI0ICsyMjcsMjQgQEAKIAogICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRTZXJ2ZXJIb3N0UG9ydCgpIHsKICAgICAgICAgU3RyaW5nIG9yYkhvc3QgPSBudWxsLCBvcmJQb3J0ID0gbnVsbDsKLQl0cnkgewotCSAgICBTZXJ2ZXJDb250ZXh0IHNlcnZlckNvbnRleHQgPSBBcHBsaWNhdGlvblNlcnZlci5nZXRTZXJ2ZXJDb250ZXh0KCk7Ci0JICAgIAotCSAgICBDb25maWdDb250ZXh0IGNvbmZpZ0NvbnRleHQgPSBzZXJ2ZXJDb250ZXh0LmdldENvbmZpZ0NvbnRleHQoKTsKLSAgICAgICAgIAkgICAgCisgICAgdHJ5IHsKKyAgICAgICAgU2VydmVyQ29udGV4dCBzZXJ2ZXJDb250ZXh0ID0gQXBwbGljYXRpb25TZXJ2ZXIuZ2V0U2VydmVyQ29udGV4dCgpOworCisgICAgICAgIENvbmZpZ0NvbnRleHQgY29uZmlnQ29udGV4dCA9IHNlcnZlckNvbnRleHQuZ2V0Q29uZmlnQ29udGV4dCgpOworCiAgICAgICAgICAgICBTZXJ2ZXIgc2VydmVyQmVhbiA9IFNlcnZlckJlYW5zRmFjdG9yeS5nZXRTZXJ2ZXJCZWFuKGNvbmZpZ0NvbnRleHQpOwotICAgICAgICAJICAgIAorCiAgICAgICAgICAgICBJaW9wU2VydmljZSBpaW9wU2VydmljZUJlYW4gPSBTZXJ2ZXJCZWFuc0ZhY3RvcnkuZ2V0SWlvcFNlcnZpY2VCZWFuKGNvbmZpZ0NvbnRleHQpOwogCi0JICAgIElpb3BMaXN0ZW5lcltdIGlpb3BMaXN0ZW5lckJlYW5zID0gaWlvcFNlcnZpY2VCZWFuLmdldElpb3BMaXN0ZW5lcigpOwotCSAgICBPcmIgb3JiQmVhbiA9IGlpb3BTZXJ2aWNlQmVhbi5nZXRPcmIoKTsKLSAgICAgICAKLQkgICAgb3JiSG9zdCA9IGlpb3BMaXN0ZW5lckJlYW5zWzBdLmdldEFkZHJlc3MoKTsKLQkgICAgb3JiUG9ydCA9IGlpb3BMaXN0ZW5lckJlYW5zWzBdLmdldFBvcnQoKTsKKyAgICAgICAgSWlvcExpc3RlbmVyW10gaWlvcExpc3RlbmVyQmVhbnMgPSBpaW9wU2VydmljZUJlYW4uZ2V0SWlvcExpc3RlbmVyKCk7CisgICAgICAgIE9yYiBvcmJCZWFuID0gaWlvcFNlcnZpY2VCZWFuLmdldE9yYigpOworCisgICAgICAgIG9yYkhvc3QgPSBpaW9wTGlzdGVuZXJCZWFuc1swXS5nZXRBZGRyZXNzKCk7CisgICAgICAgIG9yYlBvcnQgPSBpaW9wTGlzdGVuZXJCZWFuc1swXS5nZXRQb3J0KCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBjZmUpIHsKICAgICAgICAgICAgIGNmZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfSAKLQlyZXR1cm4gbmV3IFN0cmluZ1tdIHtvcmJIb3N0LCBvcmJQb3J0fTsKKyAgICAgICAgfQorICAgIHJldHVybiBuZXcgU3RyaW5nW10ge29yYkhvc3QsIG9yYlBvcnR9OwogCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvZWpiL1N0dWRlbnRIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9lamIvU3R1ZGVudEhvbWUuamF2YQppbmRleCAyYWUzZGU1Li5mY2E1NDQ2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9lamIvU3R1ZGVudEhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9lamIvU3R1ZGVudEhvbWUuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAqIEBleGNlcHRpb24gdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiBhbmQgUmVtb3RlRXhjZXB0aW9uLgogICAgICAqCiAgICAgICovCi0gCi0gICAgcHVibGljIFN0dWRlbnQgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgc3R1ZGVudElkKSAKKworICAgIHB1YmxpYyBTdHVkZW50IGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHN0dWRlbnRJZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvc3FsL2NyZWF0ZV9kZXJieS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9zcWwvY3JlYXRlX2RlcmJ5LnNxbAppbmRleCBmMzMzY2QzLi43NzI4NDk2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9zcWwvY3JlYXRlX2RlcmJ5LnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9zcWwvY3JlYXRlX2RlcmJ5LnNxbApAQCAtMSw1ICsxLDUgQEAKLWNyZWF0ZSB0YWJsZSBzdHVkZW50IAotKHN0dWRlbnRpZCB2YXJjaGFyKDMpIE5PVCBOVUxMICBQUklNQVJZIEtFWSwgIAorY3JlYXRlIHRhYmxlIHN0dWRlbnQKKyhzdHVkZW50aWQgdmFyY2hhcigzKSBOT1QgTlVMTCAgUFJJTUFSWSBLRVksCiBuYW1lIHZhcmNoYXIoMzYpKTsKIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggMWUwNTM2ZS4uN2U5MDg2OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw1ICsxLDUgQEAKLWNyZWF0ZSB0YWJsZSBzdHVkZW50IAotKHN0dWRlbnRpZCB2YXJjaGFyKDMpIGNvbnN0cmFpbnQgcGtfc3R1ZGVudCBwcmltYXJ5IGtleSwgIAorY3JlYXRlIHRhYmxlIHN0dWRlbnQKKyhzdHVkZW50aWQgdmFyY2hhcigzKSBjb25zdHJhaW50IHBrX3N0dWRlbnQgcHJpbWFyeSBrZXksCiBuYW1lIHZhcmNoYXIoMzYpKTsKIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvYnVpbGQueG1sCmluZGV4IGI3ZmFkNzUuLmU3NWViZjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvYnVpbGQueG1sCkBAIC04MiwxNiArODIsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPiBVc2FnZToKLQkJYW50IGVucm9sbGVyIChFeGVjdXRlcyB0aGUgZW5yb2xsZXIgdGVzdHMpCi0JCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiIGJtcCB0ZXN0cykKLQkJYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBlamIgYm1wIHRlc3RzKQotCQlhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGVqYiBibXAgdGVzdHMpCi0JCWFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBibXAgdGVzdHMpCi0JCWFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBlamIgYm1wIGFwcHMpCi0JCWFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgZWpiIGJtcCB0ZXN0cykKLQkJYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSBibXAgYXBwcykKLQkJYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBibXAgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPiBVc2FnZToKKyAgICAgICAgYW50IGVucm9sbGVyIChFeGVjdXRlcyB0aGUgZW5yb2xsZXIgdGVzdHMpCisgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiIGJtcCB0ZXN0cykKKyAgICAgICAgYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBlamIgYm1wIHRlc3RzKQorICAgICAgICBhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGVqYiBibXAgdGVzdHMpCisgICAgICAgIGFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBibXAgdGVzdHMpCisgICAgICAgIGFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBlamIgYm1wIGFwcHMpCisgICAgICAgIGFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgZWpiIGJtcCB0ZXN0cykKKyAgICAgICAgYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSBibXAgYXBwcykKKyAgICAgICAgYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBibXAgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDM3ZWZiMWUuLjc3NmQ1NWYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ibG9hZGJhbGFuY2luZyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tQXBwIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1BcHAiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iZGVmYXVsdC1pbnN0YW5jZSIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvYnVpbGQueG1sCmluZGV4IGM3NzQ0ODIuLmU5Y2NiMzMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OSwxMyArNDksMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qU3R1ZGVudCouY2xhc3MsKiovKkVucm9sbGVyKi5jbGFzcywqKi8qQ291cnNlKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9Db3Vyc2UuY2xhc3MsKiovRW5yb2xsZXIuY2xhc3MsKiovU3R1ZGVudC5jbGFzcywqKi8qSG9tZSouY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KQEAgLTYzLDIwICs2MywyMCBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJibXBFbnJvbGxlclBvb2wiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2JtcC1lbnJvbGxlckRCIi8+Ci0JPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWptcy1jb21tb24iLz4JCi0JPCEtLTxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+LS0+CisgICAgPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWptcy1jb21tb24iLz4KKyAgICA8IS0tPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4tLT4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgdmlhIGFzYWRtaW4uLi4iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAJPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogCi0JPC9hbnRjYWxsPgorICAgIDwvYW50Y2FsbD4KICAgICAgIDwhLS0KICAgICAgIENsZWFuIHRoZSBkYXRhYmFzZSBhZnRlciB0aGUgcnVuIHNpbmNlIGl0IHByb2hpYml0cyByZS1ydW5uaW5nCiAgICAgICAtLT4KQEAgLTg2LDEyICs4NiwxMiBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTwhLS1hbnRjYWxsIHRhcmdldD0icnVuLXN0YW5kYWxvbmUtY2xpZW50LXRocmVhZGluZyI+Ci0JICAgIDxwYXJhbSBuYW1lPSJjdHhGYWN0b3J5IiB2YWx1ZT0iY29tLnN1bi5hcHBzZXJ2Lm5hbWluZy5TMUFTQ3R4RmFjdG9yeSIvPgotCTwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1bi1zdGFuZGFsb25lLWNsaWVudC10aHJlYWRpbmciPgotCSAgICA8cGFyYW0gbmFtZT0iY3R4RmFjdG9yeSIgdmFsdWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5uYW1pbmcuU2VyaWFsSW5pdENvbnRleHRGYWN0b3J5Ii8+Ci0JPC9hbnRjYWxsLS0+CisgICAgPCEtLWFudGNhbGwgdGFyZ2V0PSJydW4tc3RhbmRhbG9uZS1jbGllbnQtdGhyZWFkaW5nIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImN0eEZhY3RvcnkiIHZhbHVlPSJjb20uc3VuLmFwcHNlcnYubmFtaW5nLlMxQVNDdHhGYWN0b3J5Ii8+CisgICAgPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLXN0YW5kYWxvbmUtY2xpZW50LXRocmVhZGluZyI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJjdHhGYWN0b3J5IiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLm5hbWluZy5TZXJpYWxJbml0Q29udGV4dEZhY3RvcnkiLz4KKyAgICA8L2FudGNhbGwtLT4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic3FsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC0xMDYsMjUgKzEwNiwyNSBAQAogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0icnVuLWFwcGNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxlY2hvIG1lc3NhZ2U9InJ1bm5pbmcgaW4gQUNDIHdpdGggU2VyaWFsSW5pdENvbnRleHRGYWN0b3J5Li4uIi8+Ci0gICAJPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KLQkgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIteG1sIC4vZGVzY3JpcHRvci9zdW4tYWNjLWxiLnhtbCIvPgotCTwvYW50Y2FsbD4KKyAgICA8ZWNobyBtZXNzYWdlPSJydW5uaW5nIGluIEFDQyB3aXRoIFNlcmlhbEluaXRDb250ZXh0RmFjdG9yeS4uLiIvPgorICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CisgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iLXhtbCAuL2Rlc2NyaXB0b3Ivc3VuLWFjYy1sYi54bWwiLz4KKyAgICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIAogICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgICAgPCEtLSBUYXJnZXQgdG8gcnVuIHRoZSBzdGFuZGFsb25lIGNsaWVudCB3aXRob3V0IEFDQyAtLT4KICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogICAgIDx0YXJnZXQgbmFtZT0icnVuLXN0YW5kYWxvbmUtY2xpZW50LXRocmVhZGluZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxqYXZhIGNsYXNzbmFtZT0iY29tLnN1bi5zMXBlcWUubG9hZGJhbGFuY2luZy5jbGllbnQuRW5yb2xsZXJDbGllbnR0aHJlYWRpbmciCisgICAgPGphdmEgY2xhc3NuYW1lPSJjb20uc3VuLnMxcGVxZS5sb2FkYmFsYW5jaW5nLmNsaWVudC5FbnJvbGxlckNsaWVudHRocmVhZGluZyIKICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2ltcS9saWIvaW1xLmphcjoke2Vudi5TMUFTX0hPTUV9L2ltcS9saWIvaW1xam1zcmEuamFyOiR7ZW52LlMxQVNfSE9NRX0vaW1xL2xpYi9qbXMuamFyOiR7czFhc3Rlc3QuY2xhc3NwYXRofToke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiCiAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIiBmb3JrPSJ0cnVlIj4KLQk8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbEhvc3Q9JHthZG1pbi5ob3N0fSIvPgorICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsSG9zdD0ke2FkbWluLmhvc3R9Ii8+CiAgICAgICAgIDwhLS1qdm1hcmcgdmFsdWU9Ii1EamF2YS5uYW1pbmcucHJvdmlkZXIudXJsPWlpb3A6Ly8ke2FkbWluLmhvc3R9OiR7b3JiLnBvcnR9Ii8tLT4KLQk8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iLz4KLTwhLS0JPGp2bWFyZyB2YWx1ZT0iLURqYXZheC5ybWkuQ09SQkEuVXRpbENsYXNzPWNvbS5zdW4uY29yYmEuZWUuaW1wbC5qYXZheC5ybWkuQ09SQkEuVXRpbCIvPgotCTxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJDbGFzcz1jb20uc3VuLmNvcmJhLmVlLmltcGwub3JiLk9SQkltcGwiLz4KLQk8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCU2luZ2xldG9uQ2xhc3M9Y29tLnN1bi5jb3JiYS5lZS5pbXBsLm9yYi5PUkJTaW5nbGV0b24iLz4gLS0+CisgICAgPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0PSR7b3JiLnBvcnR9Ii8+Cis8IS0tICAgIDxqdm1hcmcgdmFsdWU9Ii1EamF2YXgucm1pLkNPUkJBLlV0aWxDbGFzcz1jb20uc3VuLmNvcmJhLmVlLmltcGwuamF2YXgucm1pLkNPUkJBLlV0aWwiLz4KKyAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCQ2xhc3M9Y29tLnN1bi5jb3JiYS5lZS5pbXBsLm9yYi5PUkJJbXBsIi8+CisgICAgPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQlNpbmdsZXRvbkNsYXNzPWNvbS5zdW4uY29yYmEuZWUuaW1wbC5vcmIuT1JCU2luZ2xldG9uIi8+IC0tPgogICAgICAgICA8YXJnIHZhbHVlPSIke2N0eEZhY3Rvcnl9Ii8+CiAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+CkBAIC0xMzMsMjMgKzEzMywyMyBAQAogICAgIDwhLS0gVGFyZ2V0IHRvIHJ1biB0aGUgc3RhbmRhbG9uZSBjbGllbnQgd2l0aG91dCBBQ0MgLS0+CiAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1zdGFuZGFsb25lLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxwcm9wZXJ0eSBuYW1lPSJjbGllbnQudHlwZSIKLQkgICAgICAgICAgdmFsdWU9InN0YW5kYWxvbmUiLz4KLQk8amF2YSBjbGFzc25hbWU9ImNvbS5zdW4uczFwZXFlLmxvYWRiYWxhbmNpbmcuY2xpZW50LkVucm9sbGVyQ2xpZW50IgorICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGllbnQudHlwZSIKKyAgICAgICAgICAgICAgdmFsdWU9InN0YW5kYWxvbmUiLz4KKyAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5zdW4uczFwZXFlLmxvYWRiYWxhbmNpbmcuY2xpZW50LkVucm9sbGVyQ2xpZW50IgogICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vaW1xL2xpYi9pbXEuamFyOiR7ZW52LlMxQVNfSE9NRX0vaW1xL2xpYi9pbXFqbXNyYS5qYXI6JHtlbnYuUzFBU19IT01FfS9pbXEvbGliL2ptcy5qYXI6JHtzMWFzdGVzdC5jbGFzc3BhdGh9OiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIKICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiIGZvcms9InRydWUiPgotCTxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsSG9zdD0ke2FkbWluLmhvc3R9Ii8+Ci0JPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0PSR7b3JiLnBvcnR9Ii8+Ci08IS0tCTxqdm1hcmcgdmFsdWU9Ii1EamF2YXgucm1pLkNPUkJBLlV0aWxDbGFzcz1jb20uc3VuLmNvcmJhLmVlLmltcGwuamF2YXgucm1pLkNPUkJBLlV0aWwiLz4KLQk8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCQ2xhc3M9Y29tLnN1bi5jb3JiYS5lZS5pbXBsLm9yYi5PUkJJbXBsIi8+Ci0JPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQlNpbmdsZXRvbkNsYXNzPWNvbS5zdW4uY29yYmEuZWUuaW1wbC5vcmIuT1JCU2luZ2xldG9uIi8+IC0tPgotCTxhcmcgdmFsdWU9IiR7Y2xpZW50LnR5cGV9Ii8+CisgICAgPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxIb3N0PSR7YWRtaW4uaG9zdH0iLz4KKyAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iLz4KKzwhLS0gICAgPGp2bWFyZyB2YWx1ZT0iLURqYXZheC5ybWkuQ09SQkEuVXRpbENsYXNzPWNvbS5zdW4uY29yYmEuZWUuaW1wbC5qYXZheC5ybWkuQ09SQkEuVXRpbCIvPgorICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJDbGFzcz1jb20uc3VuLmNvcmJhLmVlLmltcGwub3JiLk9SQkltcGwiLz4KKyAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCU2luZ2xldG9uQ2xhc3M9Y29tLnN1bi5jb3JiYS5lZS5pbXBsLm9yYi5PUkJTaW5nbGV0b24iLz4gLS0+CisgICAgPGFyZyB2YWx1ZT0iJHtjbGllbnQudHlwZX0iLz4KICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgIDwvdGFyZ2V0PiAgIAorICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qbXMtY29tbW9uIi8+CkBAIC0xNjAsNyArMTYwLDcgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iYm1wRW5yb2xsZXJQb29sIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2JtcC1lbnJvbGxlckRCIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvY2xpZW50L0Vucm9sbGVyQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2NsaWVudC9FbnJvbGxlckNsaWVudC5qYXZhCmluZGV4IDY2ODliZjMuLmIxYmUxYTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvY2xpZW50L0Vucm9sbGVyQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9jbGllbnQvRW5yb2xsZXJDbGllbnQuamF2YQpAQCAtMzEsMTEgKzMxLDExIEBACiAgICAgcHJpdmF0ZSBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsgCi0gICAgICAgIEVucm9sbGVyQ2xpZW50IGNsaWVudCA9IG5ldyBFbnJvbGxlckNsaWVudCgpOyAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIEVucm9sbGVyQ2xpZW50IGNsaWVudCA9IG5ldyBFbnJvbGxlckNsaWVudCgpOwogCiAgICAgICAgIC8vIHJ1biB0aGUgdGVzdHMKLSAgICAgICAgY2xpZW50LnJ1blRlc3RDbGllbnQoYXJncyk7ICAgCisgICAgICAgIGNsaWVudC5ydW5UZXN0Q2xpZW50KGFyZ3MpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJ1blRlc3RDbGllbnQoU3RyaW5nW10gYXJncykgewpAQCAtNTMsNjEgKzUzLDYxIEBACiAKICAgICBwcml2YXRlIHZvaWQgdGVzdDAxKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgU3RyaW5nIGVucm9sbGVyU3RyaW5nID0gIiI7Ci0JU3RyaW5nIHF1ZXVlU3RyaW5nID0gIiI7Ci0gICAgICAgIHRyeSB7ICAJICAgCi0JICAgIGlmIChhcmdzLmxlbmd0aCAhPSAwICYmIGFyZ3NbMF0uZXF1YWxzKCJzdGFuZGFsb25lIikpIHsKLQkgICAgICAgIGVucm9sbGVyU3RyaW5nID0gImVqYi9NeUVucm9sbGVyIjsKLQkJcXVldWVTdHJpbmcgPSAiam1zL1NhbXBsZVF1ZXVlIjsKLQkgICAgfSBlbHNlIHsKLQkgICAgICAgIGVucm9sbGVyU3RyaW5nID0gImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUVucm9sbGVyIjsKLQkJcXVldWVTdHJpbmcgPSAiamF2YTpjb21wL2Vudi9qbXMvU2FtcGxlUXVldWUiOwotCSAgICB9Ci0JICAgIFByb3BlcnRpZXMgZW52ID0gbmV3IFByb3BlcnRpZXMoKTsKLQkgICAgZW52LnB1dCgiamF2YS5uYW1pbmcuZmFjdG9yeS5pbml0aWFsIiwgIm9yZy5nbGFzc2Zpc2guam5kaS5jb3NuYW1pbmcuQ05DdHhGYWN0b3J5Iik7Ci0JICAgIE9SQkxvY2F0b3Igb3JiTG9jYXRvciA9IEdsb2JhbHMuZ2V0RGVmYXVsdEhhYml0YXQoKS5nZXRTZXJ2aWNlKE9SQkxvY2F0b3IuY2xhc3MpOwotCSAgICAKLQkgICAgZW52LnB1dCgiamF2YS5uYW1pbmcuY29yYmEub3JiIiwgb3JiTG9jYXRvci5nZXRPUkIoKSk7Ci0JICAgIC8vIEluaXRpYWxpemUgdGhlIENvbnRleHQgd2l0aCBKTkRJIHNwZWNpZmljIHByb3BlcnRpZXMKLQkgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KGVudik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigibG9va2luZyB1cCBlamIvTXlTdHVkZW50IHVzaW5nIG9yZy5nbGFzc2Zpc2guam5kaS5jb3NuYW1pbmcuQ05DdHhGYWN0b3J5Li4uIik7Ci0JICAgIE9iamVjdCBvYmogPSBjdHgubG9va3VwKCJlamIvTXlTdHVkZW50Iik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGVqYi9NeVN0dWRlbnQgd2l0aCBDbkN0eEZhY3RvcnkuLi4iKTsKLQkgICAgU3R1ZGVudEhvbWUgc0ggPSAKLQkgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmosIAotCQkJCQkJCVN0dWRlbnRIb21lLmNsYXNzKTsKLQkgICAgU3R1ZGVudCBkZW5pc2UxID0gc0guY3JlYXRlKCIxMTEiLCAiVGlmZmFueSBNb29yZSIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgc3R1ZGVudCBpZCAxMTEgZm9yIFRpZmZhbnkgTW9vcmUiKTsKLQkgICAgCi0JICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgTUVKQi4uLiIpOwotCSAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImVqYi9tZ210L01FSkIiKTsgCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGVqYi9tZ210L01FSkIiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIEVKQiBSRUZzIHdob3NlIGpuZGkgbmFtZSBpcyBzcGVjaWZpZWQgYXMgYSBjb3JiYW5hbWU6IHVybCA9PT4iKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBuZXcgQ29udGV4dCAxLi4iKTsKLSAgICAgICAgICAgCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVXNpbmcgQ29udGV4dCAxLCBMb29raW5nIHVwIEVKQiB1c2luZyBjb3JiYW5hbWU6IHVybCB3aXRoIGdsb2JhbCBqbmRpIG5hbWUgPT0+Iik7Ci0JICAgCi0JICAgIG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJjb3JiYW5hbWU6aWlvcDpsb2NhbGhvc3Q6MzcwMCNlamIvTXlTdHVkZW50Iik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGNvcmJhbmFtZTppaW9wOmxvY2FsaG9zdDozNzAwI2VqYi9NeVN0dWRlbnQiKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgU3R1ZGVudEhvbWUgc0hvbWUgPSAKLSAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgIFN0cmluZyBxdWV1ZVN0cmluZyA9ICIiOworICAgICAgICB0cnkgeworICAgICAgICBpZiAoYXJncy5sZW5ndGggIT0gMCAmJiBhcmdzWzBdLmVxdWFscygic3RhbmRhbG9uZSIpKSB7CisgICAgICAgICAgICBlbnJvbGxlclN0cmluZyA9ICJlamIvTXlFbnJvbGxlciI7CisgICAgICAgIHF1ZXVlU3RyaW5nID0gImptcy9TYW1wbGVRdWV1ZSI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlbnJvbGxlclN0cmluZyA9ICJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVFbnJvbGxlciI7CisgICAgICAgIHF1ZXVlU3RyaW5nID0gImphdmE6Y29tcC9lbnYvam1zL1NhbXBsZVF1ZXVlIjsKKyAgICAgICAgfQorICAgICAgICBQcm9wZXJ0aWVzIGVudiA9IG5ldyBQcm9wZXJ0aWVzKCk7CisgICAgICAgIGVudi5wdXQoImphdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbCIsICJvcmcuZ2xhc3NmaXNoLmpuZGkuY29zbmFtaW5nLkNOQ3R4RmFjdG9yeSIpOworICAgICAgICBPUkJMb2NhdG9yIG9yYkxvY2F0b3IgPSBHbG9iYWxzLmdldERlZmF1bHRIYWJpdGF0KCkuZ2V0U2VydmljZShPUkJMb2NhdG9yLmNsYXNzKTsKKworICAgICAgICBlbnYucHV0KCJqYXZhLm5hbWluZy5jb3JiYS5vcmIiLCBvcmJMb2NhdG9yLmdldE9SQigpKTsKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgQ29udGV4dCB3aXRoIEpOREkgc3BlY2lmaWMgcHJvcGVydGllcworICAgICAgICBJbml0aWFsQ29udGV4dCBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoZW52KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsb29raW5nIHVwIGVqYi9NeVN0dWRlbnQgdXNpbmcgb3JnLmdsYXNzZmlzaC5qbmRpLmNvc25hbWluZy5DTkN0eEZhY3RvcnkuLi4iKTsKKyAgICAgICAgT2JqZWN0IG9iaiA9IGN0eC5sb29rdXAoImVqYi9NeVN0dWRlbnQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgZWpiL015U3R1ZGVudCB3aXRoIENuQ3R4RmFjdG9yeS4uLiIpOworICAgICAgICBTdHVkZW50SG9tZSBzSCA9CisgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0dWRlbnRIb21lLmNsYXNzKTsKKyAgICAgICAgU3R1ZGVudCBkZW5pc2UxID0gc0guY3JlYXRlKCIxMTEiLCAiVGlmZmFueSBNb29yZSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgc3R1ZGVudCBpZCAxMTEgZm9yIFRpZmZhbnkgTW9vcmUiKTsKKworICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIE1FSkIuLi4iKTsKKyAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJlamIvbWdtdC9NRUpCIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGVqYi9tZ210L01FSkIiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIEVKQiBSRUZzIHdob3NlIGpuZGkgbmFtZSBpcyBzcGVjaWZpZWQgYXMgYSBjb3JiYW5hbWU6IHVybCA9PT4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBuZXcgQ29udGV4dCAxLi4iKTsKKworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzaW5nIENvbnRleHQgMSwgTG9va2luZyB1cCBFSkIgdXNpbmcgY29yYmFuYW1lOiB1cmwgd2l0aCBnbG9iYWwgam5kaSBuYW1lID09PiIpOworCisgICAgICAgIG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJjb3JiYW5hbWU6aWlvcDpsb2NhbGhvc3Q6MzcwMCNlamIvTXlTdHVkZW50Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGNvcmJhbmFtZTppaW9wOmxvY2FsaG9zdDozNzAwI2VqYi9NeVN0dWRlbnQiKTsKKworICAgICAgICAgICAgU3R1ZGVudEhvbWUgc0hvbWUgPQorICAgICAgICAgICAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHVkZW50SG9tZS5jbGFzcyk7CiAgICAgICAgICAgICBTdHVkZW50IGRlbmlzZSA9IHNIb21lLmNyZWF0ZSgiODIzIiwgIkRlbmlzZSBTbWl0aCIpOwogCiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJVc2luZyBDb250ZXh0IDEsIGxvb2tpbmcgdXAgZ2xvYmFsIGpuZGkgbmFtZSA9PT4iKTsJICAgIAotCSAgICBPYmplY3Qgb2JqUmVmID0gaW5pdGlhbC5sb29rdXAoImVqYi9NeUNvdXJzZSIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBlamIvTXlDb3Vyc2UiKTsKLQkgICAgQ291cnNlSG9tZSBjSG9tZSA9IChDb3Vyc2VIb21lKSAKLQkgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCAKLQkJCQkJICBDb3Vyc2VIb21lLmNsYXNzKTsJICAgIAotCSAgICBDb3Vyc2UgcG93ZXIgPSBjSG9tZS5jcmVhdGUoIjIyMCIsICJQb3dlciBKMkVFIFByb2dyYW1taW5nIik7ICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzaW5nIENvbnRleHQgMSwgbG9va2luZyB1cCBnbG9iYWwgam5kaSBuYW1lID09PiIpOworICAgICAgICBPYmplY3Qgb2JqUmVmID0gaW5pdGlhbC5sb29rdXAoImVqYi9NeUNvdXJzZSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBlamIvTXlDb3Vyc2UiKTsKKyAgICAgICAgQ291cnNlSG9tZSBjSG9tZSA9IChDb3Vyc2VIb21lKQorICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsCisgICAgICAgICAgICAgICAgICAgICAgQ291cnNlSG9tZS5jbGFzcyk7CisgICAgICAgIENvdXJzZSBwb3dlciA9IGNIb21lLmNyZWF0ZSgiMjIwIiwgIlBvd2VyIEoyRUUgUHJvZ3JhbW1pbmciKTsKIAotCSAgICBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cChlbnJvbGxlclN0cmluZyk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwICIgKyBlbnJvbGxlclN0cmluZyk7Ci0gICAgICAgICAgICBFbnJvbGxlckhvbWUgZUhvbWUgPSAKLSAgICAgICAgICAgICAgICAoRW5yb2xsZXJIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoZW5yb2xsZXJTdHJpbmcpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCAiICsgZW5yb2xsZXJTdHJpbmcpOworICAgICAgICAgICAgRW5yb2xsZXJIb21lIGVIb21lID0KKyAgICAgICAgICAgICAgICAoRW5yb2xsZXJIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnJvbGxlckhvbWUuY2xhc3MpOwogICAgICAgICAgICAgRW5yb2xsZXIgZW5yb2xsZXIgPSBlSG9tZS5jcmVhdGUoKTsKICAgICAgICAgICAgIGVucm9sbGVyLmVucm9sbCgiODIzIiwgIjIyMCIpOwpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvdXJzZUlkICsgIiAiICsgY291cnNlLmdldE5hbWUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKLSAKKwogICAgICAgICAgICAgQ291cnNlIGludHJvID0gY0hvbWUuZmluZEJ5UHJpbWFyeUtleSgiNzc3Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaW50cm8uZ2V0TmFtZSgpICsgIjoiKTsKICAgICAgICAgICAgIGNvdXJzZXMgPSBpbnRyby5nZXRTdHVkZW50SWRzKCk7CkBAIC0xMzYsNDcgKzEzNiw0NyBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzdHVkZW50SWQgKyAiICIgKyBzdHVkZW50LmdldE5hbWUoKSk7CiAgICAgICAgICAgICB9CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIEpNUyBSZXNvdXJjZSBSZWZzID09PiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIG5ldyBDb250ZXh0IDIuLiIpOwotCSAgICBDb250ZXh0IGluaXRpYWwxID0gbmV3IEluaXRpYWxDb250ZXh0KCk7ICAgICAgICAgICAgCSAgICAKLQkgICAgamFrYXJ0YS5qbXMuUXVldWUgcXVldWUgPSAoamFrYXJ0YS5qbXMuUXVldWUpIGluaXRpYWwxLmxvb2t1cChxdWV1ZVN0cmluZyk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigibG9va2VkIHVwICIgKyBxdWV1ZVN0cmluZyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBKTVMgUmVzb3VyY2UgUmVmcyA9PT4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBuZXcgQ29udGV4dCAyLi4iKTsKKyAgICAgICAgQ29udGV4dCBpbml0aWFsMSA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBqYWthcnRhLmptcy5RdWV1ZSBxdWV1ZSA9IChqYWthcnRhLmptcy5RdWV1ZSkgaW5pdGlhbDEubG9va3VwKHF1ZXVlU3RyaW5nKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsb29rZWQgdXAgIiArIHF1ZXVlU3RyaW5nKTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIG5ldyBDb250ZXh0IDMuLi4iKTsKLQkgICAgQ29udGV4dCBpbml0aWFsMiA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBqYWthcnRhLmptcy5RdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgPSAKLQkgICAgICAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKLQkgICAgICBpbml0aWFsMi5sb29rdXAoImptcy9RQ0ZhY3RvcnkiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgam1zL1FDRmFjdG9yeSIpOwotCSAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBuZXcgQ29udGV4dCAzLi4uIik7CisgICAgICAgIENvbnRleHQgaW5pdGlhbDIgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgamFrYXJ0YS5qbXMuUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5ID0KKyAgICAgICAgICAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKKyAgICAgICAgICBpbml0aWFsMi5sb29rdXAoImptcy9RQ0ZhY3RvcnkiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgam1zL1FDRmFjdG9yeSIpOworCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9hZCBiYWxhbmNpbmciLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2FkIGJhbGFuY2luZyIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiEiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgfSAKKyAgICB9CiAKLQlwcml2YXRlIHZvaWQgdGVzdEluQXBwQ2xpZW50Q29udGFpbmVyKCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIG5ldyBDb250ZXh0IC4uLiIpOwotCQl0cnkgewotCQkJSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JCQlPYmplY3Qgb2JqID0gY3R4Lmxvb2t1cCgiamF2YTpjb21wL0luQXBwQ2xpZW50Q29udGFpbmVyIik7Ci0JCQlpZiAob2JqID09IG51bGwpIHsKLQkJCQlzdGF0LmFkZFN0YXR1cygidGVzdEluQXBwQ2xpZW50Q29udGFpbmVyIiwgc3RhdC5GQUlMKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlCb29sZWFuIHJlc3VsdCA9IChCb29sZWFuKSBvYmo7Ci0JCQlpZiAoIXJlc3VsdCkgewotCQkJCXN0YXQuYWRkU3RhdHVzKCJ0ZXN0SW5BcHBDbGllbnRDb250YWluZXIiLCBzdGF0LkZBSUwpOwotCQkJfQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgamF2YTpjb21wL0luQXBwQ2xpZW50Q29udGFpbmVyIDoiCi0JCQkJCSsgcmVzdWx0KTsKLQkJCSBzdGF0LmFkZFN0YXR1cygidGVzdEluQXBwQ2xpZW50Q29udGFpbmVyIiwgc3RhdC5QQVNTKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQkgc3RhdC5hZGRTdGF0dXMoInRlc3RJbkFwcENsaWVudENvbnRhaW5lciIsIHN0YXQuRkFJTCk7Ci0JICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gdW5leHBlY3RlZCBleGNlcHRpb24hIik7Ci0JICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci19IAorICAgIHByaXZhdGUgdm9pZCB0ZXN0SW5BcHBDbGllbnRDb250YWluZXIoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgbmV3IENvbnRleHQgLi4uIik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgICAgIE9iamVjdCBvYmogPSBjdHgubG9va3VwKCJqYXZhOmNvbXAvSW5BcHBDbGllbnRDb250YWluZXIiKTsKKyAgICAgICAgICAgIGlmIChvYmogPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ0ZXN0SW5BcHBDbGllbnRDb250YWluZXIiLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEJvb2xlYW4gcmVzdWx0ID0gKEJvb2xlYW4pIG9iajsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInRlc3RJbkFwcENsaWVudENvbnRhaW5lciIsIHN0YXQuRkFJTCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBqYXZhOmNvbXAvSW5BcHBDbGllbnRDb250YWluZXIgOiIKKyAgICAgICAgICAgICAgICAgICAgKyByZXN1bHQpOworICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ0ZXN0SW5BcHBDbGllbnRDb250YWluZXIiLCBzdGF0LlBBU1MpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygidGVzdEluQXBwQ2xpZW50Q29udGFpbmVyIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiEiKTsKKyAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvY2xpZW50L0Vucm9sbGVyQ2xpZW50dGhyZWFkaW5nLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2NsaWVudC9FbnJvbGxlckNsaWVudHRocmVhZGluZy5qYXZhCmluZGV4IDUyMmFmZDguLjU3Y2Q3MDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvY2xpZW50L0Vucm9sbGVyQ2xpZW50dGhyZWFkaW5nLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9jbGllbnQvRW5yb2xsZXJDbGllbnR0aHJlYWRpbmcuamF2YQpAQCAtMzEsMzAgKzMxLDMwIEBACiAgICAgcHVibGljIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGN0eEZhY3Rvcnk7CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7IAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBjdHhGYWN0b3J5ID0gYXJnc1swXTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlVzaW5nICIgKyBjdHhGYWN0b3J5KTsKLQlmb3IgKGludCBpID0gMDsgaSA8IDMwMDsgaSsrKSB7Ci0JICAgIG5ldyBFbnJvbGxlckNsaWVudHRocmVhZGluZygpLnN0YXJ0KCk7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVXNpbmcgIiArIGN0eEZhY3RvcnkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzAwOyBpKyspIHsKKyAgICAgICAgbmV3IEVucm9sbGVyQ2xpZW50dGhyZWFkaW5nKCkuc3RhcnQoKTsKICAgICB9Ci0gIAorICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICAgdHJ5IHsKLQkgICAgUHJvcGVydGllcyBlbnYgPSBuZXcgUHJvcGVydGllcygpOwotCSAgICBlbnYucHV0KCJqYXZhLm5hbWluZy5mYWN0b3J5LmluaXRpYWwiLCBjdHhGYWN0b3J5KTsJICAKLQkgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KGVudik7Ci0JCSAgICAKLQkgICAgT2JqZWN0IG9ianJlZiA9IGN0eC5sb29rdXAoImVqYi9NeVN0dWRlbnQiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaHJlYWQgIyIgKyArK2NvdW50ICsgIiBsb29rZWQgdXAuLi5lamIvTXlTdHVkZW50Iik7Ci0JICAgIAotCSAgICBTdHVkZW50SG9tZSBzSG9tZSA9IAotCSAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCi0JCQkJCQkJU3R1ZGVudEhvbWUuY2xhc3MpOwotCSAgICAJICAgIAotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgICAgICBQcm9wZXJ0aWVzIGVudiA9IG5ldyBQcm9wZXJ0aWVzKCk7CisgICAgICAgIGVudi5wdXQoImphdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbCIsIGN0eEZhY3RvcnkpOworICAgICAgICBJbml0aWFsQ29udGV4dCBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoZW52KTsKKworICAgICAgICBPYmplY3Qgb2JqcmVmID0gY3R4Lmxvb2t1cCgiZWpiL015U3R1ZGVudCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRocmVhZCAjIiArICsrY291bnQgKyAiIGxvb2tlZCB1cC4uLmVqYi9NeVN0dWRlbnQiKTsKKworICAgICAgICBTdHVkZW50SG9tZSBzSG9tZSA9CisgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0dWRlbnRIb21lLmNsYXNzKTsKKworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL0NvdXJzZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9lamIvQ291cnNlLmphdmEKaW5kZXggZDJhNDY3NC4uMDViOWZjMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9lamIvQ291cnNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9lamIvQ291cnNlLmphdmEKQEAgLTIyLDI0ICsyMiwyNCBAQAogCiAKIHB1YmxpYyBpbnRlcmZhY2UgQ291cnNlIGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgYW4gYXJyYXlsaXN0IG9mIFN0dWRlbnRJZHMgdGFraW5nIHRoZSBjb3Vyc2UuCi0gICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24gCisgICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KICAgICAgKi8KICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFN0dWRlbnRJZHMoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY291cnNlLgotICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uIAotICAgICAqIAorICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCisgICAgICoKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbmFtZSBvZiB0aGUgY291cnNlLgotICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uIAotICAgICAqIAorICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCisgICAgICoKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2VqYi9Db3Vyc2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2VqYi9Db3Vyc2VCZWFuLmphdmEKaW5kZXggYzBmZjhjNC4uMTZiZjYzOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9lamIvQ291cnNlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL0NvdXJzZUJlYW4uamF2YQpAQCAtMTA1LDcgKzEwNSw3IEBACiAgICAgICAgICAgICAgICAgKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qZGJjL2JtcC1lbnJvbGxlckRCIik7CiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiZWpiL015RW5yb2xsZXIiKTsKLSAgICAgICAgICAgIGVucm9sbGVySG9tZSA9IAorICAgICAgICAgICAgZW5yb2xsZXJIb21lID0KICAgICAgICAgICAgICAgICAoRW5yb2xsZXJIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnJvbGxlckhvbWUuY2xhc3MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL0NvdXJzZUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL0NvdXJzZUhvbWUuamF2YQppbmRleCBhOTY5YTNiLi5kZThlNGZiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2VqYi9Db3Vyc2VIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9lamIvQ291cnNlSG9tZS5qYXZhCkBAIC0zMCwxMiArMzAsMTIgQEAKICAgICAgKi8KICAgICBwdWJsaWMgQ291cnNlIGNyZWF0ZShTdHJpbmcgY291cnNlSWQsIFN0cmluZyBuYW1lKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBDcmVhdGVFeGNlcHRpb247Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIGEgcmVmZXJlbmNlIHRvIHRoZSByZW1vdGUgaW50ZXJmYWNlIHRvIHRoZSBDb3Vyc2VCZWFuIG9iamVjdCBieSBQcmltYXJ5IEtleS4KICAgICAgKiBAZXhjZXB0aW9uIHRocm93cyBGaW5kZXJFeGNlcHRpb24gYW5kIFJlbW90ZUV4Y2VwdGlvbi4KICAgICAgKgogICAgICAqLwotICAgIHB1YmxpYyBDb3Vyc2UgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgY291cnNlSWQpIAorICAgIHB1YmxpYyBDb3Vyc2UgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgY291cnNlSWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL0Vucm9sbGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2VqYi9FbnJvbGxlci5qYXZhCmluZGV4IDFlZDg4ZmQuLjdjZGVlZTggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL0Vucm9sbGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9lamIvRW5yb2xsZXIuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIAogcHVibGljIGludGVyZmFjZSBFbnJvbGxlciBleHRlbmRzIEVKQk9iamVjdCB7Ci0gCisKICAvKioKICAgKiBFbnJvbGxzIGEgU3R1ZGVudCBpbiBhIGNvdXJzZQogICAqIEBwYXJhbSBzdHVkZW50SWQgcHJpbWFyeSBrZXkgb2YgdGhlIHN0dWRlbnQgb2JqZWN0CkBAIC00MCw3ICs0MCw3IEBACiAgICBwdWJsaWMgdm9pZCB1bkVucm9sbChTdHJpbmcgc3R1ZGVudElkLCBTdHJpbmcgY291cnNlSWQpCiAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogIC8qKgotICAqIERlbGV0ZXMgYSBTdHVkZW50IAorICAqIERlbGV0ZXMgYSBTdHVkZW50CiAgICogQHBhcmFtIHN0dWRlbnRJZCBwcmltYXJ5IGtleSBvZiB0aGUgc3R1ZGVudCBvYmplY3QKICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgogICAqLwpAQCAtNDksNyArNDksNyBAQAogICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogIC8qKgotICAqIERlbGV0ZXMgYSBDb3Vyc2UgCisgICogRGVsZXRlcyBhIENvdXJzZQogICAqIEBwYXJhbSBjb3Vyc2VJZCBwcmltYXJ5IGtleSBvZiB0aGUgY291cnNlIG9iamVjdAogICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCiAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2VqYi9FbnJvbGxlckJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL0Vucm9sbGVyQmVhbi5qYXZhCmluZGV4IGNlOTg3N2YuLmEwYjg0N2EgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL0Vucm9sbGVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL0Vucm9sbGVyQmVhbi5qYXZhCkBAIC0xNiw3ICsxNiw3IEBACiAKIHBhY2thZ2UgY29tLnN1bi5zMXBlcWUuZWpiLmJtcC5lbnJvbGxlci5lamI7CiAKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi4qOwogaW1wb3J0IGphdmEuc3FsLio7CiBpbXBvcnQgamF2YXguc3FsLio7CkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgamF2YXgubmFtaW5nLio7CiAKIHB1YmxpYyBjbGFzcyBFbnJvbGxlckJlYW4gaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7Ci0gCisKICAgICBwcml2YXRlIENvbm5lY3Rpb24gY29uOwogICAgIHByaXZhdGUgU3RyaW5nIGRiTmFtZSA9ICJqYXZhOmNvbXAvZW52L2pkYmMvYm1wLWVucm9sbGVyREIiOwogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY29udGV4dDsKQEAgLTU5LDcgKzU5LDcgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBEZWxldGVzIGEgU3R1ZGVudCAKKyAgICAgKiBEZWxldGVzIGEgU3R1ZGVudAogICAgICAqIEBwYXJhbSBzdHVkZW50SWQgcHJpbWFyeSBrZXkgb2YgdGhlIHN0dWRlbnQgb2JqZWN0CiAgICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KICAgICAgKi8KQEAgLTcyLDcgKzcyLDcgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBEZWxldGVzIGEgQ291cnNlIAorICAgICAqIERlbGV0ZXMgYSBDb3Vyc2UKICAgICAgKiBAcGFyYW0gY291cnNlSWQgcHJpbWFyeSBrZXkgb2YgdGhlIGNvdXJzZSBvYmplY3QKICAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgogICAgICAqLwpAQCAtMTYyLDcgKzE2Miw3IEBACiAKICAgICAgICAgU3RyaW5nIGluc2VydFN0YXRlbWVudCA9CiAgICAgICAgICAgICAiaW5zZXJ0IGludG8gZW5yb2xsbWVudCB2YWx1ZXMgKCA/ICwgPyApIjsKLSAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPSAKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPQogICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0U3RhdGVtZW50KTsKIAogICAgICAgICBwcmVwU3RtdC5zZXRTdHJpbmcoMSwgc3R1ZGVudElkKTsKQEAgLTE3Miw3ICsxNzIsNyBAQAogICAgICAgICBwcmVwU3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVFbnRyeShTdHJpbmcgc3R1ZGVudElkLCBTdHJpbmcgY291cnNlSWQpIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVFbnRyeShTdHJpbmcgc3R1ZGVudElkLCBTdHJpbmcgY291cnNlSWQpCiAgICAgICAgIHRocm93cyBTUUxFeGNlcHRpb24gewogCiAgICAgICAgIFN0cmluZyBkZWxldGVTdGF0ZW1lbnQgPQpAQCAtMjE1LDEzICsyMTUsMTMgQEAKICAgICAgICAgcHJlcFN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIEFycmF5TGlzdCBzZWxlY3RTdHVkZW50KFN0cmluZyBjb3Vyc2VJZCkgCisgICAgcHJpdmF0ZSBBcnJheUxpc3Qgc2VsZWN0U3R1ZGVudChTdHJpbmcgY291cnNlSWQpCiAgICAgICAgIHRocm93cyBTUUxFeGNlcHRpb24gewogCiAgICAgICAgIFN0cmluZyBzZWxlY3RTdGF0ZW1lbnQgPQogICAgICAgICAgICAgInNlbGVjdCBzdHVkZW50aWQgIiArCiAgICAgICAgICAgICAiZnJvbSBlbnJvbGxtZW50IHdoZXJlIGNvdXJzZWlkID0gPyAiOwotICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcmVwU3RtdCA9IAorICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcmVwU3RtdCA9CiAgICAgICAgICAgICBjb24ucHJlcGFyZVN0YXRlbWVudChzZWxlY3RTdGF0ZW1lbnQpOwogCiAgICAgICAgIHByZXBTdG10LnNldFN0cmluZygxLCBjb3Vyc2VJZCk7CkBAIC0yMzcsMTMgKzIzNywxMyBAQAogICAgICAgICByZXR1cm4gYTsKICAgICB9CiAKLSAgICBwcml2YXRlIEFycmF5TGlzdCBzZWxlY3RDb3Vyc2UoU3RyaW5nIHN0dWRlbnRJZCkgCisgICAgcHJpdmF0ZSBBcnJheUxpc3Qgc2VsZWN0Q291cnNlKFN0cmluZyBzdHVkZW50SWQpCiAgICAgICAgIHRocm93cyBTUUxFeGNlcHRpb24gewogCiAgICAgICAgIFN0cmluZyBzZWxlY3RTdGF0ZW1lbnQgPQogICAgICAgICAgICAgInNlbGVjdCBjb3Vyc2VpZCAiICsKICAgICAgICAgICAgICJmcm9tIGVucm9sbG1lbnQgd2hlcmUgc3R1ZGVudGlkID0gPyAiOwotICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcmVwU3RtdCA9IAorICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcmVwU3RtdCA9CiAgICAgICAgICAgICBjb24ucHJlcGFyZVN0YXRlbWVudChzZWxlY3RTdGF0ZW1lbnQpOwogCiAgICAgICAgIHByZXBTdG10LnNldFN0cmluZygxLCBzdHVkZW50SWQpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9lamIvU3R1ZGVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9lamIvU3R1ZGVudC5qYXZhCmluZGV4IDZhOGJkMjkuLmNlM2NlYzQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL1N0dWRlbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2VqYi9TdHVkZW50LmphdmEKQEAgLTIyLDkgKzIyLDkgQEAKIAogCiBwdWJsaWMgaW50ZXJmYWNlIFN0dWRlbnQgZXh0ZW5kcyBFSkJPYmplY3QgewotIAorCiAgIC8qKgotICAgKiBSZXR1cm5zIHRoZSBDb3Vyc2VJZHMgdGhhdCBhIHN0dWRlbnQgaXMgZW5yb2xsZWQgaW4uIAorICAgKiBSZXR1cm5zIHRoZSBDb3Vyc2VJZHMgdGhhdCBhIHN0dWRlbnQgaXMgZW5yb2xsZWQgaW4uCiAgICAqIEBwYXJhbSBzdHVkZW50SWQgcHJpbWFyeSBrZXkgb2YgdGhlIHN0dWRlbnQgb2JqZWN0CiAgICAqIEBwYXJhbSBjb3Vyc2VJZCBwcmltYXJ5IGtleSBvZiB0aGUgY291cnNlIG9iamVjdAogICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9lamIvU3R1ZGVudEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL1N0dWRlbnRCZWFuLmphdmEKaW5kZXggMDRkOTUxZS4uNmIzOWFhZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9lamIvU3R1ZGVudEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2VqYi9TdHVkZW50QmVhbi5qYXZhCkBAIC05OCw3ICs5OCw3IEBACiAgICAgICAgIGNvdXJzZUlkcyA9IG5ldyBBcnJheUxpc3QoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICBkYXRhU291cmNlID0gCisgICAgICAgICAgICBkYXRhU291cmNlID0KICAgICAgICAgICAgICAgICAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2pkYmMvYm1wLWVucm9sbGVyREIiKTsKICAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJlamIvTXlFbnJvbGxlciIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9lamIvU3R1ZGVudEhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL1N0dWRlbnRIb21lLmphdmEKaW5kZXggMmFlM2RlNS4uZmNhNTQ0NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9lamIvU3R1ZGVudEhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2VqYi9TdHVkZW50SG9tZS5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICogQGV4Y2VwdGlvbiB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIGFuZCBSZW1vdGVFeGNlcHRpb24uCiAgICAgICoKICAgICAgKi8KLSAKLSAgICBwdWJsaWMgU3R1ZGVudCBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBzdHVkZW50SWQpIAorCisgICAgcHVibGljIFN0dWRlbnQgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgc3R1ZGVudElkKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDIwNWQ2MGYuLjk2M2E5MjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDM3ICsxLDM3IEBACi1jcmVhdGUgdGFibGUgc3R1ZGVudCANCi0oc3R1ZGVudGlkIHZhcmNoYXIoMykgY29uc3RyYWludCBwa19zdHVkZW50IHByaW1hcnkga2V5LCAgDQotbmFtZSB2YXJjaGFyKDM2KSk7DQotDQotaW5zZXJ0IGludG8gc3R1ZGVudA0KLXZhbHVlcyAoJzEyMycsICdTYWwgSm9uZXMnKTsNCi1pbnNlcnQgaW50byBzdHVkZW50DQotdmFsdWVzICgnMjIxJywgJ0FsaWNlIFNtaXRoJyk7DQotaW5zZXJ0IGludG8gc3R1ZGVudA0KLXZhbHVlcyAoJzM4OCcsICdFbGl6YWJldGggV2lsbGlzJyk7DQotaW5zZXJ0IGludG8gc3R1ZGVudA0KLXZhbHVlcyAoJzQ1NicsICdKb2UgU21pdGgnKTsNCi0NCi0NCi1jcmVhdGUgdGFibGUgY291cnNlIA0KLShjb3Vyc2VpZCB2YXJjaGFyKDMpIGNvbnN0cmFpbnQgcGtfY291cnNlIHByaW1hcnkga2V5LCAgDQotbmFtZSB2YXJjaGFyKDM2KSk7DQotDQotaW5zZXJ0IGludG8gY291cnNlDQotdmFsdWVzICgnOTk5JywgJ0FkdmFuY2VkIEphdmEgUHJvZ3JhbW1pbmcnKTsNCi1pbnNlcnQgaW50byBjb3Vyc2UNCi12YWx1ZXMgKCcxMTEnLCAnSjJFRSBmb3IgU21hcnQgUGVvcGxlJyk7DQotaW5zZXJ0IGludG8gY291cnNlDQotdmFsdWVzICgnMzMzJywgJ1hNTCBNYWRlIEVhc3knKTsNCi1pbnNlcnQgaW50byBjb3Vyc2UNCi12YWx1ZXMgKCc3NzcnLCAnQW4gSW50cm9kdWN0aW9uIHRvIEphdmEgUHJvZ3JhbW1pbmcnKTsNCi0NCi1jcmVhdGUgdGFibGUgZW5yb2xsbWVudA0KLShzdHVkZW50aWQgdmFyY2hhcigzKSwgIA0KLWNvdXJzZWlkIHZhcmNoYXIoMyksICANCi1jb25zdHJhaW50IGZrX3N0dWRlbnRpZA0KLWZvcmVpZ24ga2V5IChzdHVkZW50aWQpDQotcmVmZXJlbmNlcyBzdHVkZW50KHN0dWRlbnRpZCksDQotY29uc3RyYWludCBma19jb3Vyc2VpZA0KLWZvcmVpZ24ga2V5IChjb3Vyc2VpZCkNCi1yZWZlcmVuY2VzIGNvdXJzZShjb3Vyc2VpZCkpOw0KLQ0KK2NyZWF0ZSB0YWJsZSBzdHVkZW50Cisoc3R1ZGVudGlkIHZhcmNoYXIoMykgY29uc3RyYWludCBwa19zdHVkZW50IHByaW1hcnkga2V5LAorbmFtZSB2YXJjaGFyKDM2KSk7CisKK2luc2VydCBpbnRvIHN0dWRlbnQKK3ZhbHVlcyAoJzEyMycsICdTYWwgSm9uZXMnKTsKK2luc2VydCBpbnRvIHN0dWRlbnQKK3ZhbHVlcyAoJzIyMScsICdBbGljZSBTbWl0aCcpOworaW5zZXJ0IGludG8gc3R1ZGVudAordmFsdWVzICgnMzg4JywgJ0VsaXphYmV0aCBXaWxsaXMnKTsKK2luc2VydCBpbnRvIHN0dWRlbnQKK3ZhbHVlcyAoJzQ1NicsICdKb2UgU21pdGgnKTsKKworCitjcmVhdGUgdGFibGUgY291cnNlCisoY291cnNlaWQgdmFyY2hhcigzKSBjb25zdHJhaW50IHBrX2NvdXJzZSBwcmltYXJ5IGtleSwKK25hbWUgdmFyY2hhcigzNikpOworCitpbnNlcnQgaW50byBjb3Vyc2UKK3ZhbHVlcyAoJzk5OScsICdBZHZhbmNlZCBKYXZhIFByb2dyYW1taW5nJyk7CitpbnNlcnQgaW50byBjb3Vyc2UKK3ZhbHVlcyAoJzExMScsICdKMkVFIGZvciBTbWFydCBQZW9wbGUnKTsKK2luc2VydCBpbnRvIGNvdXJzZQordmFsdWVzICgnMzMzJywgJ1hNTCBNYWRlIEVhc3knKTsKK2luc2VydCBpbnRvIGNvdXJzZQordmFsdWVzICgnNzc3JywgJ0FuIEludHJvZHVjdGlvbiB0byBKYXZhIFByb2dyYW1taW5nJyk7CisKK2NyZWF0ZSB0YWJsZSBlbnJvbGxtZW50Cisoc3R1ZGVudGlkIHZhcmNoYXIoMyksCitjb3Vyc2VpZCB2YXJjaGFyKDMpLAorY29uc3RyYWludCBma19zdHVkZW50aWQKK2ZvcmVpZ24ga2V5IChzdHVkZW50aWQpCityZWZlcmVuY2VzIHN0dWRlbnQoc3R1ZGVudGlkKSwKK2NvbnN0cmFpbnQgZmtfY291cnNlaWQKK2ZvcmVpZ24ga2V5IChjb3Vyc2VpZCkKK3JlZmVyZW5jZXMgY291cnNlKGNvdXJzZWlkKSk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCAyZDBlZDE1Li4wNmU1NzA1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xLDMgKzEsMyBAQAotZHJvcCB0YWJsZSBlbnJvbGxtZW50Ow0KLWRyb3AgdGFibGUgc3R1ZGVudDsNCi1kcm9wIHRhYmxlIGNvdXJzZTsNCitkcm9wIHRhYmxlIGVucm9sbG1lbnQ7Citkcm9wIHRhYmxlIHN0dWRlbnQ7Citkcm9wIHRhYmxlIGNvdXJzZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9uYW1pbmcyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9uYW1pbmcyL2J1aWxkLnhtbAppbmRleCA1OGFiYmQyLi42MzY0MDc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbmFtaW5nMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL25hbWluZzIvYnVpbGQueG1sCkBAIC00Niw0ICs0Niw0IEBACiAgICAgICA8L2FydGlmYWN0Om12bj4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KLSAgICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL25hbWluZzIvY29udGV4dC9zcmMvbWFpbi9qYXZhL3Rlc3QvVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9uYW1pbmcyL2NvbnRleHQvc3JjL21haW4vamF2YS90ZXN0L1Rlc3RCZWFuLmphdmEKaW5kZXggYzNkZjgxNy4uYmNjNjc2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL25hbWluZzIvY29udGV4dC9zcmMvbWFpbi9qYXZhL3Rlc3QvVGVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbmFtaW5nMi9jb250ZXh0L3NyYy9tYWluL2phdmEvdGVzdC9UZXN0QmVhbi5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KHByb3BzKTsKICAgICAgICAgcmV0dXJuIChUKSBpYy5sb29rdXAobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIE5hbWluZ0VudW1lcmF0aW9uPE5hbWVDbGFzc1BhaXI+IGxpc3RFbXB0eVN0cmluZygpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewogICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgcmV0dXJuIGNvbnRleHQubGlzdCgiIik7CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgIENvbnRleHQgY29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICByZXR1cm4gY29udGV4dC5saXN0QmluZGluZ3MoImphdmE6Z2xvYmFsIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIE5hbWluZ0VudW1lcmF0aW9uPE5hbWVDbGFzc1BhaXI+IGxpc3RKYXZhQ29tcCgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewogICAgICAgICBDb250ZXh0IGNvbnRleHQgPSAoQ29udGV4dCkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvIik7CiAgICAgICAgIHJldHVybiBjb250ZXh0Lmxpc3QoImVudiIpOwpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICBDb250ZXh0IGNvbnRleHQgPSAoQ29udGV4dCkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvIik7CiAgICAgICAgIHJldHVybiBjb250ZXh0Lmxpc3RCaW5kaW5ncygiZW52Iik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIE5hbWluZ0VudW1lcmF0aW9uPE5hbWVDbGFzc1BhaXI+IGxpc3RKYXZhTW9kdWxlKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIENvbnRleHQgY29udGV4dCA9IChDb250ZXh0KSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6bW9kdWxlLyIpOwogICAgICAgICByZXR1cm4gY29udGV4dC5saXN0KCIiKTsKQEAgLTc3LDcgKzc3LDcgQEAKICAgICAgICAgQ29udGV4dCBjb250ZXh0ID0gKENvbnRleHQpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTptb2R1bGUvIik7CiAgICAgICAgIHJldHVybiBjb250ZXh0Lmxpc3RCaW5kaW5ncygiIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIE5hbWluZ0VudW1lcmF0aW9uPE5hbWVDbGFzc1BhaXI+IGxpc3RKYXZhQXBwKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIENvbnRleHQgY29udGV4dCA9IChDb250ZXh0KSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6YXBwLyIpOwogICAgICAgICByZXR1cm4gY29udGV4dC5saXN0KCIiKTsKQEAgLTg3LDIyICs4NywyMiBAQAogICAgICAgICBDb250ZXh0IGNvbnRleHQgPSAoQ29udGV4dCkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmFwcC8iKTsKICAgICAgICAgcmV0dXJuIGNvbnRleHQubGlzdEJpbmRpbmdzKCIiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBjbG9zZU5hbWluZ0VudW1lcmF0aW9ucygpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewogICAgICAgICBsaXN0RW1wdHlTdHJpbmcoKS5jbG9zZSgpOwogICAgICAgICBsaXN0QmluZGluZ3NFbXB0eVN0cmluZygpLmNsb3NlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGxpc3RKYXZhQ29tcCgpLmNsb3NlKCk7CiAgICAgICAgIGxpc3RCaW5kaW5nc0phdmFDb21wKCkuY2xvc2UoKTsKLSAgICAgICAgCisKICAgICAgICAgbGlzdEphdmFNb2R1bGUoKS5jbG9zZSgpOwogICAgICAgICBsaXN0QmluZGluZ3NKYXZhTW9kdWxlKCkuY2xvc2UoKTsKLSAgICAgICAKKwogICAgICAgICBsaXN0SmF2YUFwcCgpLmNsb3NlKCk7CiAgICAgICAgIGxpc3RCaW5kaW5nc0phdmFBcHAoKS5jbG9zZSgpOwogICAgIH0KLSAgICAKLQlwdWJsaWMgQm9vbGVhbiBnZXRJc0luQXBwQ2xpZW50Q29udGFpbmVyKCkgewotCQlyZXR1cm4gaXNJbkFwcENsaWVudENvbnRhaW5lcjsKLQl9CisKKyAgICBwdWJsaWMgQm9vbGVhbiBnZXRJc0luQXBwQ2xpZW50Q29udGFpbmVyKCkgeworICAgICAgICByZXR1cm4gaXNJbkFwcENsaWVudENvbnRhaW5lcjsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbmFtaW5nMi9jb250ZXh0L3NyYy90ZXN0L2phdmEvdGVzdC9Db250ZXh0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL25hbWluZzIvY29udGV4dC9zcmMvdGVzdC9qYXZhL3Rlc3QvQ29udGV4dFRlc3QuamF2YQppbmRleCA0Yzg1NWUyLi45Y2JkOWRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbmFtaW5nMi9jb250ZXh0L3NyYy90ZXN0L2phdmEvdGVzdC9Db250ZXh0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9uYW1pbmcyL2NvbnRleHQvc3JjL3Rlc3QvamF2YS90ZXN0L0NvbnRleHRUZXN0LmphdmEKQEAgLTQ4LDkgKzQ4LDkgQEAKIAogICAgIEBSdWxlCiAgICAgcHVibGljIFRlc3RXYXRjaGVyIHJlcG9ydFdhdGNoZXI9bmV3IFJlcG9ydFdhdGNoZXIoc3RhdCwgIk5hbWluZzo6bmFtaW5nMjo6Q29udGV4dFRlc3QiKTsKLSAgICAKKwogICAgIEBSdWxlIHB1YmxpYyBUZXN0TmFtZSB0ZXN0TmFtZSA9IG5ldyBUZXN0TmFtZSgpOwotICAgIAorCiAgICAgQEJlZm9yZUNsYXNzIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRVcENsYXNzKCkgewogICAgICAgICBlamJDb250YWluZXIgPSBFSkJDb250YWluZXIuY3JlYXRlRUpCQ29udGFpbmVyKCk7CiAgICAgfQpAQCAtODAsMzQgKzgwLDM0IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdEJlYW4gZnJvbSBsb29rdXA6ICIgKyBiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEYXRhU291cmNlIGZyb20gbG9va3VwOiAiICsgZHMpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0IHB1YmxpYyB2b2lkIGxpc3RFbXB0eVN0cmluZzIoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3RCZWFuLmxpc3RFbXB0eVN0cmluZygpLnRvU3RyaW5nKCkpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0IHB1YmxpYyB2b2lkIGxpc3RFbXB0eVN0cmluZygpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewogICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBlamJDb250YWluZXIuZ2V0Q29udGV4dCgpOwogICAgICAgICBOYW1pbmdFbnVtZXJhdGlvbjxOYW1lQ2xhc3NQYWlyPiBsaXN0ID0gY29udGV4dC5saXN0KCIiKTsKICAgICAgICAgYXNzZXJ0Tm90TnVsbChsaXN0KTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgTmFtZUNsYXNzUGFpcjogIiArIHRvU3RyaW5nKGxpc3QpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdCBwdWJsaWMgdm9pZCBsaXN0QmluZGluZ3NFbXB0eVN0cmluZzIoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3RCZWFuLmxpc3RCaW5kaW5nc0VtcHR5U3RyaW5nKCkudG9TdHJpbmcoKSk7CiAgICAgfQotIAorCiAgICAgQFRlc3QgcHVibGljIHZvaWQgbGlzdEJpbmRpbmdzRW1wdHlTdHJpbmcoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKICAgICAgICAgQ29udGV4dCBjb250ZXh0ID0gZWpiQ29udGFpbmVyLmdldENvbnRleHQoKTsKICAgICAgICAgTmFtaW5nRW51bWVyYXRpb248QmluZGluZz4gbGlzdCA9IGNvbnRleHQubGlzdEJpbmRpbmdzKCIiKTsKICAgICAgICAgYXNzZXJ0Tm90TnVsbChsaXN0KTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgQmluZGluZzogIiArIHRvU3RyaW5nKGxpc3QpKTsKICAgICB9Ci0gICAgCisKICAgICBASWdub3JlCiAgICAgQFRlc3QgcHVibGljIHZvaWQgbGlzdEdsb2JhbDIoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3RCZWFuLmxpc3RHbG9iYWwoKS50b1N0cmluZygpKTsKICAgICB9Ci0gICAgCisKICAgICBASWdub3JlIC8vZ290IG51bGwgY29tcG9uZW50SWQKICAgICBAVGVzdCBwdWJsaWMgdm9pZCBsaXN0R2xvYmFsKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIENvbnRleHQgY29udGV4dCA9IGVqYkNvbnRhaW5lci5nZXRDb250ZXh0KCk7CkBAIC0xMTUsMTIgKzExNSwxMiBAQAogICAgICAgICBhc3NlcnROb3ROdWxsKGxpc3QpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBOYW1lQ2xhc3NQYWlyOiAiICsgdG9TdHJpbmcobGlzdCkpOwogICAgIH0KLSAgICAKKwogICAgIEBJZ25vcmUKICAgICBAVGVzdCBwdWJsaWMgdm9pZCBsaXN0QmluZGluZ3NHbG9iYWwyKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0QmVhbi5saXN0QmluZGluZ3NHbG9iYWwoKS50b1N0cmluZygpKTsKICAgICB9Ci0gICAgCisKICAgICBASWdub3JlCiAgICAgQFRlc3QgcHVibGljIHZvaWQgbGlzdEJpbmRpbmdzR2xvYmFsKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIENvbnRleHQgY29udGV4dCA9IGVqYkNvbnRhaW5lci5nZXRDb250ZXh0KCk7CkBAIC0xMjgsNTQgKzEyOCw1NCBAQAogICAgICAgICBhc3NlcnROb3ROdWxsKGxpc3QpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBCaW5kaW5nOiAiICsgdG9TdHJpbmcobGlzdCkpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0IHB1YmxpYyB2b2lkIGxpc3RKYXZhQ29tcCgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVzdEJlYW4ubGlzdEphdmFDb21wKCkudG9TdHJpbmcoKSk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QgcHVibGljIHZvaWQgbGlzdEJpbmRpbmdzSmF2YUNvbXAoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3RCZWFuLmxpc3RCaW5kaW5nc0phdmFDb21wKCkudG9TdHJpbmcoKSk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QgcHVibGljIHZvaWQgbGlzdEphdmFNb2R1bGUoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3RCZWFuLmxpc3RKYXZhTW9kdWxlKCkudG9TdHJpbmcoKSk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QgcHVibGljIHZvaWQgbGlzdEJpbmRpbmdzSmF2YU1vZHVsZSgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVzdEJlYW4ubGlzdEJpbmRpbmdzSmF2YU1vZHVsZSgpLnRvU3RyaW5nKCkpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0IHB1YmxpYyB2b2lkIGxpc3RKYXZhQXBwKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0QmVhbi5saXN0SmF2YUFwcCgpLnRvU3RyaW5nKCkpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0IHB1YmxpYyB2b2lkIGxpc3RCaW5kaW5nc0phdmFBcHAoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3RCZWFuLmxpc3RCaW5kaW5nc0phdmFBcHAoKS50b1N0cmluZygpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdCBwdWJsaWMgdm9pZCBjbG9zZU5hbWluZ0VudW1lcmF0aW9ucygpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewogICAgICAgICB0ZXN0QmVhbi5jbG9zZU5hbWluZ0VudW1lcmF0aW9ucygpOwogICAgIH0KLSAgICAKLQlAVGVzdAotCXB1YmxpYyB2b2lkIGdldElzSW5BcHBDbGllbnRDb250YWluZXJGcm9tRUpCKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7Ci0JCUJvb2xlYW4gaXNBQ0MgPSB0ZXN0QmVhbi5nZXRJc0luQXBwQ2xpZW50Q29udGFpbmVyKCk7Ci0JCWFzc2VydEZhbHNlKGlzQUNDKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJnZXQgamF2YTpjb21wL0luQXBwQ2xpZW50Q29udGFpbmVyIGZyb20gRUpCOiIKLQkJCQkrIGlzQUNDKTsKLQl9Ci0JCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCBnZXRJc0luQXBwQ2xpZW50Q29udGFpbmVyRnJvbVNFQ2xpZW50KCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBqbmRpbmFtZSA9ICJqYXZhOmNvbXAvSW5BcHBDbGllbnRDb250YWluZXIiOwotCQlDb250ZXh0IGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkJQm9vbGVhbiBpc0FDQyA9IChCb29sZWFuKSBjb250ZXh0Lmxvb2t1cChqbmRpbmFtZSk7Ci0JCWFzc2VydEZhbHNlKGlzQUNDKTsKLQkJU3lzdGVtLm91dAotCQkJCS5wcmludGxuKCJnZXQgIitqbmRpbmFtZSsiIGZyb20gamF2YSBTRSBjbGllbnQ6IgotCQkJCQkJKyBpc0FDQyk7Ci0JfQotCQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBnZXRJc0luQXBwQ2xpZW50Q29udGFpbmVyRnJvbUVKQigpIHRocm93cyBOYW1pbmdFeGNlcHRpb24geworICAgICAgICBCb29sZWFuIGlzQUNDID0gdGVzdEJlYW4uZ2V0SXNJbkFwcENsaWVudENvbnRhaW5lcigpOworICAgICAgICBhc3NlcnRGYWxzZShpc0FDQyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0IGphdmE6Y29tcC9JbkFwcENsaWVudENvbnRhaW5lciBmcm9tIEVKQjoiCisgICAgICAgICAgICAgICAgKyBpc0FDQyk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBnZXRJc0luQXBwQ2xpZW50Q29udGFpbmVyRnJvbVNFQ2xpZW50KCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyBqbmRpbmFtZSA9ICJqYXZhOmNvbXAvSW5BcHBDbGllbnRDb250YWluZXIiOworICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgQm9vbGVhbiBpc0FDQyA9IChCb29sZWFuKSBjb250ZXh0Lmxvb2t1cChqbmRpbmFtZSk7CisgICAgICAgIGFzc2VydEZhbHNlKGlzQUNDKTsKKyAgICAgICAgU3lzdGVtLm91dAorICAgICAgICAgICAgICAgIC5wcmludGxuKCJnZXQgIitqbmRpbmFtZSsiIGZyb20gamF2YSBTRSBjbGllbnQ6IgorICAgICAgICAgICAgICAgICAgICAgICAgKyBpc0FDQyk7CisgICAgfQorCiAgICAgcHJpdmF0ZSBTdHJpbmcgdG9TdHJpbmcoTmFtaW5nRW51bWVyYXRpb248PyBleHRlbmRzIE5hbWVDbGFzc1BhaXI+IG4pIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewogICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKICAgICAgICAgc2IuYXBwZW5kKG4udG9TdHJpbmcoKSkuYXBwZW5kKE5MKTsKQEAgLTE4NSw1ICsxODUsNSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL25vbmZhaWxvdmVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbm9uZmFpbG92ZXIvYnVpbGQucHJvcGVydGllcwppbmRleCAwMzQ0ZWQ4Li42MjFkMDA5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbm9uZmFpbG92ZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbm9uZmFpbG92ZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTcgKzE1LDE3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJuYW1pbmciLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW5vbmZhaWxvdmVyIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1ub25mYWlsb3ZlciIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJjb20uc3VuLnMxYXNwZS5uYW1pbmcubm9uZmFpbG92ZXIuY2xpZW50Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9ImNvbS5zdW4uczFhc3BlLm5hbWluZy5ub25mYWlsb3Zlci5jbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9ub25mYWlsb3Zlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbm9uZmFpbG92ZXIvYnVpbGQueG1sCmluZGV4IGZhY2ZkNjIuLjcyNzQwMzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9ub25mYWlsb3Zlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL25vbmZhaWxvdmVyL2J1aWxkLnhtbApAQCAtMzIsNyArMzIsNyBAQAogICAgICZ0ZXN0cHJvcGVydGllczsKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJzZXR1cCxidWlsZCxydW4sdW5zZXR1cCIvPgotICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWptcy1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTU2LDEwICs1NiwxMCBAQAogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgICAgPGVudiBrZXk9IkFQUENQQVRIIiB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KICAgICAgICAgICA8YXJnIGxpbmU9Ii1jbGllbnQgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgotCSAgPGFyZyBsaW5lPSItbmFtZSAke2FwcG5hbWV9Q2xpZW50Ii8+Ci0JICA8YXJnIGxpbmU9Ii10ZXh0YXV0aCIvPgotCSAgPGFyZyBsaW5lPSItdXNlciBqMmVlIi8+Ci0JICA8YXJnIGxpbmU9Ii1wYXNzd29yZCBqMmVlIi8+CisgICAgICA8YXJnIGxpbmU9Ii1uYW1lICR7YXBwbmFtZX1DbGllbnQiLz4KKyAgICAgIDxhcmcgbGluZT0iLXRleHRhdXRoIi8+CisgICAgICA8YXJnIGxpbmU9Ii11c2VyIGoyZWUiLz4KKyAgICAgIDxhcmcgbGluZT0iLXBhc3N3b3JkIGoyZWUiLz4KICAgICAgICAgPC9leGVjPgogICAgICAgICA8c2VxdWVudGlhbD4KICAgICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMzAiLz4KQEAgLTY5LDcgKzY5LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdGFydCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL25vbmZhaWxvdmVyL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9ub25mYWlsb3Zlci9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNmNmYTU5MS4uMTdlYjhlNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL25vbmZhaWxvdmVyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbm9uZmFpbG92ZXIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yMywzMCArMjMsMzAgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKLSAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGhpcyBpcyB0byB0ZXN0IG5hbWluZyBub25mYWlsb3ZlciBzY2VuYXJpby5cbiIgKyAKLQkJCSAgICAiRXhpc2l0bmcgYW5kIE5ldyBJbml0aWFsQ29udGV4dHMgbXVzdCBiZSBhYmxlIHRvICIrCi0JCQkgICAgInRhbGsgdG8gdGhlIHNlcnZlciBhZnRlciBhIHJlc3RhcnQgYXNzdW1pbmcgdGhlcmUgIisKLQkJCSAgICAid2VyZSBubyByZXF1ZXN0cyBkdXJpbmcgcmVzYXJ0LiIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgbmFtaW5nIG5vbmZhaWxvdmVyIHNjZW5hcmlvLlxuIiArCisgICAgICAgICAgICAgICAgIkV4aXNpdG5nIGFuZCBOZXcgSW5pdGlhbENvbnRleHRzIG11c3QgYmUgYWJsZSB0byAiKworICAgICAgICAgICAgICAgICJ0YWxrIHRvIHRoZSBzZXJ2ZXIgYWZ0ZXIgYSByZXN0YXJ0IGFzc3VtaW5nIHRoZXJlICIrCisgICAgICAgICAgICAgICAgIndlcmUgbm8gcmVxdWVzdHMgZHVyaW5nIHJlc2FydC4iKTsKIAogICAgICAgICBDb250ZXh0ICAgICAgICAgICAgICAgICBqbmRpQ29udGV4dCA9IG51bGw7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgIHF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgPSBudWxsOwotCVF1ZXVlICAgICAgICAgICAgICAgICAgIHF1ZXVlID0gbnVsbDsKLQlib29sZWFuICAgICAgICAgICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgIFF1ZXVlICAgICAgICAgICAgICAgICAgIHF1ZXVlID0gbnVsbDsKKyAgICBib29sZWFuICAgICAgICAgICAgICAgICBwYXNzZWQgPSB0cnVlOwogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBqbmRpQ29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbnRleHQgY3JlYXRlZCEhISIpOwotCX0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGNyZWF0ZSBKTkRJICIgKwotCQkJICAgICAiY29udGV4dDogIiArIGUudG9TdHJpbmcoKSk7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJuYW1pbmcgbm9uZmFpbG92ZXIgbWFpbiIsIHN0YXQuRkFJTCk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJub25mYWlsb3ZlcklEIik7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbnRleHQgY3JlYXRlZCEhISIpOworICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGNyZWF0ZSBKTkRJICIgKworICAgICAgICAgICAgICAgICAiY29udGV4dDogIiArIGUudG9TdHJpbmcoKSk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJuYW1pbmcgbm9uZmFpbG92ZXIgbWFpbiIsIHN0YXQuRkFJTCk7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJub25mYWlsb3ZlcklEIik7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgIH0KIApAQCAtNTQsNTMgKzU0LDUzIEBACiAgICAgICAgICAgICBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5ID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpCiAgICAgICAgICAgICAgICAgam5kaUNvbnRleHQubG9va3VwCiAgICAgICAgICAgICAgICAgKCJqYXZhOmNvbXAvZW52L2ptcy9RQ0ZhY3RvcnkiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJsb29rZWQgdXAgUXVldWVDb25uZWN0aW9uRmFjdG9yeS4uLiIpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibG9va2VkIHVwIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkuLi4iKTsKICAgICAgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSk5ESSBsb29rdXAgZmFpbGVkOiAiICsKICAgICAgICAgICAgICAgICBlLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm5hbWluZyBub25mYWlsb3ZlciBtYWluIiwgc3RhdC5GQUlMKTsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJub25mYWlsb3ZlcklEIik7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgibm9uZmFpbG92ZXJJRCIpOwogICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgIH0KIAotCXRyeSB7Ci0JICAgIFRocmVhZC5zbGVlcCgyNDAwMDApOworICAgIHRyeSB7CisgICAgICAgIFRocmVhZC5zbGVlcCgyNDAwMDApOwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gb2NjdXJyZWQ6ICIgKyBlLnRvU3RyaW5nKCkpOwotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIm5hbWluZyBub25mYWlsb3ZlciBtYWluIiwgc3RhdC5GQUlMKTsKLSAgICAgICAgfSAgCisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICBzdGF0LmFkZFN0YXR1cygibmFtaW5nIG5vbmZhaWxvdmVyIG1haW4iLCBzdGF0LkZBSUwpOworICAgICAgICB9CiAKLQl0cnkgewotCSAgICAvL3NlZSBpZiB0aGUgZXhpc3RpbmcgSW5pdGlhbENvbnRleHQgaXMgc3RpbGwgYWxpdmUKLQkgICAgaWYgKGpuZGlDb250ZXh0ICE9IG51bGwpIHsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhpc3RpbmcgSW5pdGlhbENvbnRleHQgaXMgYWxpdmUgYWZ0ZXIgc2VydmVyIHJlc3RhcnQhIik7Ci0JICAgIH0KLQkgICAgCi0JICAgIHF1ZXVlID0gKFF1ZXVlKSBqbmRpQ29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL1NhbXBsZVF1ZXVlIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigibG9va2VkIHVwIFF1ZXVlLi4uIik7Ci0JICAgIAotCSAgICAvL2NyZWF0aW5nIG5ldyBJbml0aWFsQ29udGV4dAotCSAgICBqbmRpQ29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIG5ldyBJbml0aWFsQ29udGV4dC4uLiIpOwotCSAgICBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5ID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpCi0JICAgICAgam5kaUNvbnRleHQubG9va3VwCi0JICAgICAgKCJqYXZhOmNvbXAvZW52L2ptcy9RQ0ZhY3RvcnkiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJsb29rZWQgdXAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSB3aXRoIG5ldyBJbml0aWFsQ29udGV4dC4uLiIgKyAKLQkJCSAgICAgICBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KTsgCi0JICAgIAorICAgIHRyeSB7CisgICAgICAgIC8vc2VlIGlmIHRoZSBleGlzdGluZyBJbml0aWFsQ29udGV4dCBpcyBzdGlsbCBhbGl2ZQorICAgICAgICBpZiAoam5kaUNvbnRleHQgIT0gbnVsbCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGlzdGluZyBJbml0aWFsQ29udGV4dCBpcyBhbGl2ZSBhZnRlciBzZXJ2ZXIgcmVzdGFydCEiKTsKKyAgICAgICAgfQorCisgICAgICAgIHF1ZXVlID0gKFF1ZXVlKSBqbmRpQ29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL1NhbXBsZVF1ZXVlIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibG9va2VkIHVwIFF1ZXVlLi4uIik7CisKKyAgICAgICAgLy9jcmVhdGluZyBuZXcgSW5pdGlhbENvbnRleHQKKyAgICAgICAgam5kaUNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBuZXcgSW5pdGlhbENvbnRleHQuLi4iKTsKKyAgICAgICAgcXVldWVDb25uZWN0aW9uRmFjdG9yeSA9IChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KQorICAgICAgICAgIGpuZGlDb250ZXh0Lmxvb2t1cAorICAgICAgICAgICgiamF2YTpjb21wL2Vudi9qbXMvUUNGYWN0b3J5Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibG9va2VkIHVwIFF1ZXVlQ29ubmVjdGlvbkZhY3Rvcnkgd2l0aCBuZXcgSW5pdGlhbENvbnRleHQuLi4iICsKKyAgICAgICAgICAgICAgICAgICBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KTsKKwogICAgICAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKTkRJIGxvb2t1cCBmYWlsZWQ6ICIgKwogICAgICAgICAgICAgICAgIGUudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibmFtaW5nIG5vbmZhaWxvdmVyIG1haW4iLCBzdGF0LkZBSUwpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgibm9uZmFpbG92ZXJJRCIpOwotCSAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIm5vbmZhaWxvdmVySUQiKTsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgfQotCWlmIChwYXNzZWQpIHN0YXQuYWRkU3RhdHVzKCJuYW1pbmcgbm9uZmFpbG92ZXIgbWFpbiIsIHN0YXQuUEFTUyk7Ci0Jc3RhdC5wcmludFN1bW1hcnkoIm5vbmZhaWxvdmVySUQiKTsKLQlTeXN0ZW0uZXhpdCgwKTsKKyAgICBpZiAocGFzc2VkKSBzdGF0LmFkZFN0YXR1cygibmFtaW5nIG5vbmZhaWxvdmVyIG1haW4iLCBzdGF0LlBBU1MpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJub25mYWlsb3ZlcklEIik7CisgICAgU3lzdGVtLmV4aXQoMCk7CiAgICAgfSAvLyBtYWluCiB9IC8vIGNsYXNzCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9vcmJfYW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL29yYl9hbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjhmMGU4My4uOWI2ZjU0OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL29yYl9hbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL29yYl9hbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ib3JiX2Fubm90YXRpb24iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL29yYl9hbm5vdGF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9vcmJfYW5ub3RhdGlvbi9idWlsZC54bWwKaW5kZXggYjExZDk1Ny4uMWE0NjM4ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL29yYl9hbm5vdGF0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvb3JiX2Fubm90YXRpb24vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDgsMjAgKzQ4LDIwIEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InRydWUiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0gCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFwcGNsaWVudC1qYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAKKwogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iJHtodHRwLmhvc3R9ICR7aHR0cC5wb3J0fSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9vcmJfYW5ub3RhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvb3JiX2Fubm90YXRpb24vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGYyMDg1OWMuLjliYWFiMDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9vcmJfYW5ub3RhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL29yYl9hbm5vdGF0aW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIGhvc3Q7CiAgICAgcHJpdmF0ZSBTdHJpbmcgcG9ydDsKIApAQCAtMzUsMjMgKzM1LDIzIEBACiAgICAgICAgIGhvc3QgPSAoIGFyZ3MubGVuZ3RoID4gMCkgPyBhcmdzWzBdIDogImxvY2FsaG9zdCI7CiAgICAgICAgIHBvcnQgPSAoIGFyZ3MubGVuZ3RoID4gMSkgPyBhcmdzWzFdIDogIjQ4NDgiOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigib3JiLWFubm90YXRpb24tY2xpZW50Iik7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJvcmItYW5ub3RhdGlvbklEIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgZW52ID0gbnVsbDsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIAorICAgICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICAgICAiL29yYl9hbm5vdGF0aW9uL3NlcnZsZXQiOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyB3ZWJjbGllbnQgc2VydmxldCBhdCAiICsgdXJsKTsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKGNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmNvcnJlY3QgcmV0dXJuIGNvZGU6ICIgKyBjb2RlKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViY2xpZW50IG1haW4iLCBzdGF0LkZBSUwpOwpAQCAtNjMsMTUgKzYzLDE1IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViY2xpZW50IG1haW4iLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHByaXZhdGUgaW50IGludm9rZVNlcnZsZXQoU3RyaW5nIHVybCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAKKwogICAgICAgICBVUkwgdSA9IG5ldyBVUkwodXJsKTsKLSAgICAgICAgCisKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gYzEgPSAoSHR0cFVSTENvbm5lY3Rpb24pdS5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBpbnQgY29kZSA9IGMxLmdldFJlc3BvbnNlQ29kZSgpOwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7CkBAIC04NCw2ICs4NCw2IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9vcmJfYW5ub3RhdGlvbi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9vcmJfYW5ub3RhdGlvbi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAppbmRleCA4NDM4YjRhLi45ZTZlNWQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvb3JiX2Fubm90YXRpb24vZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL29yYl9hbm5vdGF0aW9uL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCkBAIC0yNiw2ICsyNiw2IEBACiAgICAgPC93ZWI+CiA8L21vZHVsZT4KICAgPG1vZHVsZT4KLSAgICA8amF2YT5vcmJfYW5ub3RhdGlvbi1jbGllbnQuamFyPC9qYXZhPiAKKyAgICA8amF2YT5vcmJfYW5ub3RhdGlvbi1jbGllbnQuamFyPC9qYXZhPgogICA8L21vZHVsZT4KIDwvYXBwbGljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvb3JiX2Fubm90YXRpb24vc2VydmxldC9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvb3JiX2Fubm90YXRpb24vc2VydmxldC9TZXJ2bGV0LmphdmEKaW5kZXggOWQxNTY4NC4uNmQ3YTZkYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL29yYl9hbm5vdGF0aW9uL3NlcnZsZXQvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9vcmJfYW5ub3RhdGlvbi9zZXJ2bGV0L1NlcnZsZXQuamF2YQpAQCAtMzEsNTQgKzMxLDU0IEBACiAKICAgICBwcml2YXRlIEBSZXNvdXJjZShzaGFyZWFibGU9ZmFsc2UpIE9SQiB1bnNoYXJlYWJsZU9yYjsKICAgICBwcml2YXRlIEBSZXNvdXJjZSBPUkIgc2hhcmVhYmxlT3JiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgIGluaXQoIFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiB3ZWJjbGllbnQ6OnNlcnZsZXQuLi4gaW5pdCgpIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VydmljZSAoIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEgLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3AgKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAgICAgICAgICAgICAgICAKKwogICAgICAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIAotCSAgICAvL291dC5wcmludGxuKCJkb2luZyBzaGFyZWFibGUgb3JiIHRlc3QiKTsKKyAgICAgICAgLy9vdXQucHJpbnRsbigiZG9pbmcgc2hhcmVhYmxlIG9yYiB0ZXN0Iik7CiAgICAgICAgICAgICAvL291dC5wcmludGxuKCJPUkIgPSAiICsgc2hhcmVhYmxlT3JiKTsKICAgICAgICAgICAgIFBPQSBwb2EgPSAoUE9BKSBzaGFyZWFibGVPcmIucmVzb2x2ZV9pbml0aWFsX3JlZmVyZW5jZXMoIlJvb3RQT0EiKTsKICAgICAgICAgICAgIC8vb3V0LnByaW50bG4oIlBPQSA9ICIgKyBwb2EpOwogCi0JICAgIC8vb3V0LnByaW50bG4oImRvaW5nIHVuc2hhcmVhYmxlIG9yYiB0ZXN0Iik7CisgICAgICAgIC8vb3V0LnByaW50bG4oImRvaW5nIHVuc2hhcmVhYmxlIG9yYiB0ZXN0Iik7CiAgICAgICAgICAgICAvL291dC5wcmludGxuKCJPUkIgPSAiICsgdW5zaGFyZWFibGVPcmIpOwogICAgICAgICAgICAgUE9BIHBvYTEgPSAoUE9BKSB1bnNoYXJlYWJsZU9yYi5yZXNvbHZlX2luaXRpYWxfcmVmZXJlbmNlcygiUm9vdFBPQSIpOwogICAgICAgICAgICAgLy9vdXQucHJpbnRsbigiUE9BID0gIiArIHBvYTEpOwogCiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPEhUTUw+IDxIRUFEPiA8VElUTEU+IE9SQiBBbm5vdGF0aW9uIFRlc3QgIFNlcnZsZXQgT3V0cHV0IDwvVElUTEU+IDwvSEVBRD4gPEJPRFkgQkdDT0xPUj13aGl0ZT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Q0VOVEVSPiA8Rk9OVCBzaXplPSsxIENPTE9SPWJsdWU+T1JCIEFubm90YXRpb24gVGVzdCBTZXJ2bGV0IDwvRk9OVD4gPC9DRU5URVI+IDxwPiAiICk7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IGRvaW5nIHVuc2hhcmVhYmxlIG9yYiB0ZXN0IDogIDwvRk9OVD4gIiArICI8YnI+IiApOyAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gT1JCID0gIiArIHVuc2hhcmVhYmxlT3JiICsgIjwvRk9OVD4gIiAgKyAiPGJyPiIgKTsgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBPQSA9ICA8L0ZPTlQ+ICIgKyBwb2ExICsgIjxicj4iICk7IAorICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBkb2luZyB1bnNoYXJlYWJsZSBvcmIgdGVzdCA6ICA8L0ZPTlQ+ICIgKyAiPGJyPiIgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gT1JCID0gIiArIHVuc2hhcmVhYmxlT3JiICsgIjwvRk9OVD4gIiAgKyAiPGJyPiIgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gUE9BID0gIDwvRk9OVD4gIiArIHBvYTEgKyAiPGJyPiIgKTsKIAotb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBkb2luZyBzaGFyZWFibGUgb3JiIHRlc3QgOiAgPC9GT05UPiAiICsgIjxicj4iICk7IAotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBPUkIgPSAiICsgc2hhcmVhYmxlT3JiICsgIjwvRk9OVD4gIiAgKyAiPGJyPiIgKTsgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBPQSA9ICA8L0ZPTlQ+ICIgKyBwb2EgKyAiPGJyPiIgKTsgCitvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IGRvaW5nIHNoYXJlYWJsZSBvcmIgdGVzdCA6ICA8L0ZPTlQ+ICIgKyAiPGJyPiIgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gT1JCID0gIiArIHNoYXJlYWJsZU9yYiArICI8L0ZPTlQ+ICIgICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBPQSA9ICA8L0ZPTlQ+ICIgKyBwb2EgKyAiPGJyPiIgKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L0JPRFk+IDwvSFRNTD4gIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9Y2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIndlYmNsaWVudCBzZXJ2bGV0IHRlc3QgZmFpbGVkIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihleCk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICB9CiAKLSAgICAKLSAgICAKKworCiAgICAgcHVibGljIHZvaWQgIGRlc3Ryb3koKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gd2ViY2xpZW50OjpzZXJ2bGV0IGRlc3Ryb3kiKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9ydW5fdGVzdC5zaCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9ydW5fdGVzdC5zaAppbmRleCA4NzY0NDE5Li42MjU4NTk5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvcnVuX3Rlc3Quc2gKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3J1bl90ZXN0LnNoCkBAIC01MCwxMSArNTAsMTEgQEAKIH0KIAogZ2V0X3Rlc3RfdGFyZ2V0KCl7Ci0JY2FzZSAkMSBpbgotCQluYW1pbmdfYWxsICkKLQkJCVRBUkdFVD1hbGwKLQkJCWV4cG9ydCBUQVJHRVQ7OwotCWVzYWMKKyAgICBjYXNlICQxIGluCisgICAgICAgIG5hbWluZ19hbGwgKQorICAgICAgICAgICAgVEFSR0VUPWFsbAorICAgICAgICAgICAgZXhwb3J0IFRBUkdFVDs7CisgICAgZXNhYwogfQogCiBPUFQ9JHsxfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvbG9va3VwL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9sb29rdXAvYnVpbGQucHJvcGVydGllcwppbmRleCBjN2Q5MzQ5Li44Njg5YTFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9sb29rdXAvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9sb29rdXAvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJsb29rdXAiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LUFwcCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tQXBwIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJ3YXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL2xvb2t1cC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9sb29rdXAvYnVpbGQueG1sCmluZGV4IGIzYWViNWQuLjg3NzZlOWQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL2xvb2t1cC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvbG9va3VwL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LkpBVkFfSE9NRX0vYmluL2lkbGoiIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii1mYWxsIHNyYy9IZWxsby5pZGwiLz4KQEAgLTQ2LDIzICs0NiwyMyBAQAogICAgICAgICA8Y29weSB0b2Rpcj0ic3JjL0hlbGxvQXBwIj4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iSGVsbG9BcHAiLz4KICAgICAgICAgPC9jb3B5PgotCTxkZWxldGUgZGlyPSJIZWxsb0FwcCIvPgotCQorICAgIDxkZWxldGUgZGlyPSJIZWxsb0FwcCIvPgorCiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IENvbXBpbGluZyB0ZXN0IHNvdXJjZSBmaWxlcyIgbGV2ZWw9InZlcmJvc2UiLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0ic3JjIgogICAgICAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofSIKICAgICAgICAgICAgIGRlYnVnPSJvbiIKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+ICAKKyAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+CiAgICAgPC90YXJnZXQ+CiAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IiouY2xhc3MsKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqLmNsYXNzLCoqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCkBAIC03MSwxOCArNzEsMTggQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nIHZpYSBhc2FkbWluLi4uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJsb29rdXAiLz4KLQk8L2FudGNhbGw+CisgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9Imxvb2t1cCIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAotICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvbG9va3VwL3NyYy9IZWxsb0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvbG9va3VwL3NyYy9IZWxsb0NsaWVudC5qYXZhCmluZGV4IDAyZjM2YmIuLmVmOTJlNTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL2xvb2t1cC9zcmMvSGVsbG9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9sb29rdXAvc3JjL0hlbGxvQ2xpZW50LmphdmEKQEAgLTI5LDMwICsyOSwzMCBAQAogICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKQogICAgIHsKICAgICAgIHRyeXsKLQkgIFByb3BlcnRpZXMgcDEgPSBuZXcgUHJvcGVydGllcygpOwotCSAgcDEucHV0KCJvcmcub21nLkNPUkJBLk9SQkNsYXNzIiwgImNvbS5pbnByaXNlLnZicm9rZXIub3JiLk9SQiIpOwotCSAgcDEucHV0KCJvcmcub21nLkNPUkJBLk9SQlNpbmdsZXRvbkNsYXNzIiwgImNvbS5pbnByaXNlLnZicm9rZXIub3JiLk9SQlNpbmdsZXRvbiIpOwotCSAgb3JnLm9tZy5DT1JCQS5PUkIgb3JiID0gb3JnLm9tZy5DT1JCQS5PUkIuaW5pdCggbmV3IFN0cmluZ1tdeyIiLCIifSwgcDEgKTsKLQkgIAotCSAgLy8gZ2V0IHRoZSByb290IG5hbWluZyBjb250ZXh0Ci0JICBvcmcub21nLkNPUkJBLk9iamVjdCBvYmpSZWYgPSAKLQkgICAgb3JiLnJlc29sdmVfaW5pdGlhbF9yZWZlcmVuY2VzKCJOYW1lU2VydmljZSIpOwotCSAgLy8gVXNlIE5hbWluZ0NvbnRleHRFeHQgaW5zdGVhZCBvZiBOYW1pbmdDb250ZXh0LiBUaGlzIGlzIAotCSAgLy8gcGFydCBvZiB0aGUgSW50ZXJvcGVyYWJsZSBuYW1pbmcgU2VydmljZS4gIAotCSAgTmFtaW5nQ29udGV4dEV4dCBuY1JlZiA9IE5hbWluZ0NvbnRleHRFeHRIZWxwZXIubmFycm93KG9ialJlZik7Ci0JICAKLQkgIC8vIHJlc29sdmUgdGhlIE9iamVjdCBSZWZlcmVuY2UgaW4gTmFtaW5nCi0JICBTdHJpbmcgbmFtZSA9ICJIZWxsbyI7Ci0JICBoZWxsb0ltcGwgPSBIZWxsb0hlbHBlci5uYXJyb3cobmNSZWYucmVzb2x2ZV9zdHIobmFtZSkpOwotCSAgCi0JICBTeXN0ZW0ub3V0LnByaW50bG4oIk9idGFpbmVkIGEgaGFuZGxlIG9uIHNlcnZlciBvYmplY3Q6ICIgKyBoZWxsb0ltcGwpOwotCSAgU3lzdGVtLm91dC5wcmludGxuKGhlbGxvSW1wbC5zYXlIZWxsbygpKTsKLQkgIGhlbGxvSW1wbC5zaHV0ZG93bigpOworICAgICAgUHJvcGVydGllcyBwMSA9IG5ldyBQcm9wZXJ0aWVzKCk7CisgICAgICBwMS5wdXQoIm9yZy5vbWcuQ09SQkEuT1JCQ2xhc3MiLCAiY29tLmlucHJpc2UudmJyb2tlci5vcmIuT1JCIik7CisgICAgICBwMS5wdXQoIm9yZy5vbWcuQ09SQkEuT1JCU2luZ2xldG9uQ2xhc3MiLCAiY29tLmlucHJpc2UudmJyb2tlci5vcmIuT1JCU2luZ2xldG9uIik7CisgICAgICBvcmcub21nLkNPUkJBLk9SQiBvcmIgPSBvcmcub21nLkNPUkJBLk9SQi5pbml0KCBuZXcgU3RyaW5nW117IiIsIiJ9LCBwMSApOwogCi0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgIC8vIGdldCB0aGUgcm9vdCBuYW1pbmcgY29udGV4dAorICAgICAgb3JnLm9tZy5DT1JCQS5PYmplY3Qgb2JqUmVmID0KKyAgICAgICAgb3JiLnJlc29sdmVfaW5pdGlhbF9yZWZlcmVuY2VzKCJOYW1lU2VydmljZSIpOworICAgICAgLy8gVXNlIE5hbWluZ0NvbnRleHRFeHQgaW5zdGVhZCBvZiBOYW1pbmdDb250ZXh0LiBUaGlzIGlzCisgICAgICAvLyBwYXJ0IG9mIHRoZSBJbnRlcm9wZXJhYmxlIG5hbWluZyBTZXJ2aWNlLgorICAgICAgTmFtaW5nQ29udGV4dEV4dCBuY1JlZiA9IE5hbWluZ0NvbnRleHRFeHRIZWxwZXIubmFycm93KG9ialJlZik7CisKKyAgICAgIC8vIHJlc29sdmUgdGhlIE9iamVjdCBSZWZlcmVuY2UgaW4gTmFtaW5nCisgICAgICBTdHJpbmcgbmFtZSA9ICJIZWxsbyI7CisgICAgICBoZWxsb0ltcGwgPSBIZWxsb0hlbHBlci5uYXJyb3cobmNSZWYucmVzb2x2ZV9zdHIobmFtZSkpOworCisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk9idGFpbmVkIGEgaGFuZGxlIG9uIHNlcnZlciBvYmplY3Q6ICIgKyBoZWxsb0ltcGwpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGhlbGxvSW1wbC5zYXlIZWxsbygpKTsKKyAgICAgIGhlbGxvSW1wbC5zaHV0ZG93bigpOworCisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SIDogIiArIGUpIDsKLQkgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5vdXQpOwotCSAgfQorICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLm91dCk7CisgICAgICB9CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9sb29rdXAvc3JjL0hlbGxvU2VydmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9sb29rdXAvc3JjL0hlbGxvU2VydmVyLmphdmEKaW5kZXggNGYzNDU5Ny4uMjE0YTZiNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvbG9va3VwL3NyYy9IZWxsb1NlcnZlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL2xvb2t1cC9zcmMvSGVsbG9TZXJ2ZXIuamF2YQpAQCAtMzMsMTQgKzMzLDE0IEBACiAgIHByaXZhdGUgT1JCIG9yYjsKIAogICBwdWJsaWMgdm9pZCBzZXRPUkIoT1JCIG9yYl92YWwpIHsKLSAgICBvcmIgPSBvcmJfdmFsOyAKKyAgICBvcmIgPSBvcmJfdmFsOwogICB9Ci0gICAgCisKICAgLy8gaW1wbGVtZW50IHNheUhlbGxvKCkgbWV0aG9kCiAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oKSB7CiAgICAgcmV0dXJuICJcbkhlbGxvIHdvcmxkICEhXG4iOwogICB9Ci0gICAgCisKICAgLy8gaW1wbGVtZW50IHNodXRkb3duKCkgbWV0aG9kCiAgIHB1YmxpYyB2b2lkIHNodXRkb3duKCkgewogICAgIG9yYi5zaHV0ZG93bihmYWxzZSk7CkBAIC01NywyNiArNTcsMjYgQEAKICAgICAgIC8vIGFkZCBydW50aW1lIHByb3BlcnRpZXMgaGVyZQogICAgICAgcC5wdXQoIm9yZy5vbWcuQ09SQkEuT1JCQ2xhc3MiLCAiY29tLmlucHJpc2UudmJyb2tlci5vcmIuT1JCIik7CiAgICAgICBwLnB1dCgib3JnLm9tZy5DT1JCQS5PUkJTaW5nbGV0b25DbGFzcyIsICJjb20uaW5wcmlzZS52YnJva2VyLm9yYi5PUkJTaW5nbGV0b24iKTsKLSAgICAgIAotICAgICAgLy8gY3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBPUkIJCQorCisgICAgICAvLyBjcmVhdGUgYW5kIGluaXRpYWxpemUgdGhlIE9SQgogICAgICAgT1JCIG9yYiA9IE9SQi5pbml0KCBhcmdzLCBwICk7CiAgICAgICBIYXNodGFibGUgZW52ID0gbmV3IEhhc2h0YWJsZSgpOwogICAgICAgZW52LnB1dChqYXZheC5uYW1pbmcuQ29udGV4dC5JTklUSUFMX0NPTlRFWFRfRkFDVE9SWSwib3JnLmdsYXNzZmlzaC5qbmRpLmNvc25hbWluZy5DTkN0eEZhY3RvcnkiKTsKICAgICAgIGVudi5wdXQoImphdmEubmFtaW5nLmNvcmJhLm9yYiIsIG9yYik7Ci0gICAgICAKLSAgICAgIAorCisKICAgICAgIC8vIGdldCByZWZlcmVuY2UgdG8gcm9vdHBvYSAmIGFjdGl2YXRlIHRoZSBQT0FNYW5hZ2VyCiAgICAgICBQT0Egcm9vdHBvYSA9IFBPQUhlbHBlci5uYXJyb3cob3JiLnJlc29sdmVfaW5pdGlhbF9yZWZlcmVuY2VzKCJSb290UE9BIikpOwogICAgICAgcm9vdHBvYS50aGVfUE9BTWFuYWdlcigpLmFjdGl2YXRlKCk7Ci0gICAgICAKKwogICAgICAgLy8gY3JlYXRlIHNlcnZhbnQgYW5kIHJlZ2lzdGVyIGl0IHdpdGggdGhlIE9SQgogICAgICAgSGVsbG9JbXBsIGhlbGxvSW1wbCA9IG5ldyBIZWxsb0ltcGwoKTsKLSAgICAgIGhlbGxvSW1wbC5zZXRPUkIob3JiKTsgCi0gICAgICAKKyAgICAgIGhlbGxvSW1wbC5zZXRPUkIob3JiKTsKKwogICAgICAgLy8gZ2V0IG9iamVjdCByZWZlcmVuY2UgZnJvbSB0aGUgc2VydmFudAogICAgICAgb3JnLm9tZy5DT1JCQS5PYmplY3QgcmVmID0gcm9vdHBvYS5zZXJ2YW50X3RvX3JlZmVyZW5jZShoZWxsb0ltcGwpOwogICAgICAgSGVsbG8gaHJlZiA9IEhlbGxvSGVscGVyLm5hcnJvdyhyZWYpOwotICAgICAgCisKICAgICAgIC8vIGdldCB0aGUgcm9vdCBuYW1pbmcgY29udGV4dAogICAgICAgLy8gTmFtZVNlcnZpY2UgaW52b2tlcyB0aGUgbmFtZSBzZXJ2aWNlCiAgICAgICAgICAgIG9yZy5vbWcuQ09SQkEuT2JqZWN0IG9ialJlZiA9CkBAIC05MCwyNyArOTAsMjcgQEAKICAgICAgIE5hbWVDb21wb25lbnQgcGF0aFtdID0gbmNSZWYudG9fbmFtZSggbmFtZSApOwogICAgICAgbmNSZWYucmViaW5kKHBhdGgsIGhyZWYpOwogCi0gICAgIAorCiAgICAgICBqYXZheC5uYW1pbmcuQ29udGV4dCBuY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KGVudik7CiAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJpbmQgdGhlIEhlbGxvU2VydmVyIG9iamVjdCB0byAiCiAgICAgICAgICAgKyAibmFtZSAiICsgIkhlbGxvIiArICIuLi4uIik7CiAgICAgICBuY3R4LnJlYmluZCgiSGVsbG8iLCBocmVmKTsKLSAgICAgIAorCiAKICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TZXJ2ZXIgcmVhZHkgYW5kIHdhaXRpbmcgLi4uIik7CiAKICAgICAgIC8vIHdhaXQgZm9yIGludm9jYXRpb25zIGZyb20gY2xpZW50cwogICAgICAgb3JiLnJ1bigpOwotICAgIH0gCi0JCisgICAgfQorCiAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjogIiArIGUpOwogICAgICAgICBlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0ub3V0KTsKICAgICAgIH0KLQkgIAorCiAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU2VydmVyIEV4aXRpbmcgLi4uIik7Ci0JCisKICAgfQogfQotIAorCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL3JtaWlpb3AvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL3JtaWlpb3AvYnVpbGQucHJvcGVydGllcwppbmRleCA0MTQ3OWE4Li40NDJhOTkwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9ybWlpaW9wL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvcm1paWlvcC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InJtaWlpb3AiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LUFwcCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tQXBwIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJ3YXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL3JtaWlpb3AvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvcm1paWlvcC9idWlsZC54bWwKaW5kZXggZjYyMDE3ZS4uNWZkZDVjNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvcm1paWlvcC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvcm1paWlvcC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBDb21waWxpbmcgc291cmNlIGZpbGVzIHdpdGggdmJqYy4uLiIgbGV2ZWw9InZlcmJvc2UiLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iL3NwYWNlL0JvcmxhbmQvVmlzaUJyb2tlci9iaW4vdmJqYyIgZGlyPSJzcmMvQmFuayIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KQEAgLTQ3LDU0ICs0Nyw1NCBAQAogICAgICAgICA8ZXhlYyAgZGlyPSJzcmMiIGV4ZWN1dGFibGU9Ii9zcGFjZS9Cb3JsYW5kL1Zpc2lCcm9rZXIvYmluL2phdmEyaWlvcCIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgICAgIDxhcmcgbGluZT0iQmFuay5BY2NvdW50RGF0YSBCYW5rLkFjY291bnRNYW5hZ2VyIi8+CiAgICAgICAgIDwvZXhlYz4KLSAgICAgICAgICAgCisKICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgPGV4ZWMgZGlyPSJzcmMiIGV4ZWN1dGFibGU9Ii9zcGFjZS9Cb3JsYW5kL1Zpc2lCcm9rZXIvYmluL3ZiamMiICBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICAgICAgPGFyZyBsaW5lPSJCYW5rL0FjY291bnRIZWxwZXIuamF2YSAgQmFuay9BY2NvdW50SG9sZGVyLmphdmEgQmFuay9BY2NvdW50TWFuYWdlckhlbHBlci5qYXZhIEJhbmsvQWNjb3VudE1hbmFnZXJIb2xkZXIuamF2YSBCYW5rL0FjY291bnRNYW5hZ2VyUE9BLmphdmEgQmFuay9BY2NvdW50TWFuYWdlclBPQVRpZS5qYXZhIEJhbmsvQWNjb3VudE9wZXJhdGlvbnMuamF2YSBCYW5rL0FjY291bnRQT0EuamF2YSBCYW5rL19BY2NvdW50TWFuYWdlclN0dWIuamF2YSBCYW5rL19BY2NvdW50X1N0dWIuamF2YSBCYW5rL19BY2NvdW50X1RpZS5qYXZhIi8+CiAKICAgICAgICAgPC9leGVjPgogPGV4ZWMgZGlyPSJzcmMiIGV4ZWN1dGFibGU9Ii9zcGFjZS9Cb3JsYW5kL1Zpc2lCcm9rZXIvYmluL3ZiamMiICBmYWlsb25lcnJvcj0iZmFsc2UiPgotICAgICAgICAgICAgPGFyZyBsaW5lPSJBY2NvdW50SW1wbC5qYXZhCUFjY291bnRNYW5hZ2VySW1wbC5qYXZhIENsaWVudC5qYXZhIFNlcnZlci5qYXZhIi8+CisgICAgICAgICAgICA8YXJnIGxpbmU9IkFjY291bnRJbXBsLmphdmEgICAgQWNjb3VudE1hbmFnZXJJbXBsLmphdmEgQ2xpZW50LmphdmEgU2VydmVyLmphdmEiLz4KIAogICAgICAgICA8L2V4ZWM+CiAKICAgICAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KLQkgICAgPGZpbGVzZXQgZGlyPSJzcmMvQmFuayI+CisgICAgICAgIDxmaWxlc2V0IGRpcj0ic3JjL0JhbmsiPgogICAgICAgICAgICAgICA8ZXhjbHVkZSBuYW1lPSIqKi8qLmphdmEiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0ic3JjIj4KLQkgICAgICAgPGV4Y2x1ZGUgbmFtZT0iKiovKi5qYXZhIi8+CisgICAgICAgICAgIDxleGNsdWRlIG5hbWU9IioqLyouamF2YSIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgotICAgICAgICAgICAgCisKICAgICAgICAgPC9jb3B5PgotIAorCiAgICAgPC90YXJnZXQ+CiAKIAogPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqLmNsYXNzLCoqLyouY2xhc3MiLz4gCisgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IiouY2xhc3MsKiovKi5jbGFzcyIvPgogICAgIDwvYW50Y2FsbD4KIDwvdGFyZ2V0PgogCi0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nIHZpYSBhc2FkbWluLi4uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAKIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViY2xpZW50LWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9InJtaWlpb3AiLz4KLQk8L2FudGNhbGw+CisgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9InJtaWlpb3AiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKLSAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL3JtaWlpb3Avc3JjL0FjY291bnRJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9ybWlpaW9wL3NyYy9BY2NvdW50SW1wbC5qYXZhCmluZGV4IGU5ODNlNDIuLjg2ZGIwMjUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL3JtaWlpb3Avc3JjL0FjY291bnRJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvcm1paWlvcC9zcmMvQWNjb3VudEltcGwuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogLy8gQWNjb3VudEltcGwuamF2YQogCiBwdWJsaWMgY2xhc3MgQWNjb3VudEltcGwgZXh0ZW5kcyBCYW5rLkFjY291bnRQT0EgewotICAKKwogICBwdWJsaWMgQWNjb3VudEltcGwoQmFuay5BY2NvdW50RGF0YSBkYXRhKSB7CiAgICAgX25hbWUgPSBkYXRhLmdldE5hbWUoKTsKICAgICBfYmFsYW5jZSA9IGRhdGEuZ2V0QmFsYW5jZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvcm1paWlvcC9zcmMvQmFuay9BY2NvdW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9ybWlpaW9wL3NyYy9CYW5rL0FjY291bnQuamF2YQppbmRleCA4Y2ViN2E4Li4yZGE5OTg1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9ybWlpaW9wL3NyYy9CYW5rL0FjY291bnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9ybWlpaW9wL3NyYy9CYW5rL0FjY291bnQuamF2YQpAQCAtMjEsNCArMjEsNCBAQAogICBmbG9hdCBnZXRCYWxhbmNlICgpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAgIHZvaWQgc2V0QmFsYW5jZSAoZmxvYXQgYmFsKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogfQotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvcm1paWlvcC9zcmMvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9ybWlpaW9wL3NyYy9DbGllbnQuamF2YQppbmRleCAwZTkzZGE0Li4yOGU2OTE0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9ybWlpaW9wL3NyYy9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9ybWlpaW9wL3NyYy9DbGllbnQuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogICAgICAgLy8gR2V0IHRoZSBtYW5hZ2VyIElkCiAgICAgICBieXRlW10gbWFuYWdlcklkID0gIlJNSUJhbmtNYW5hZ2VyIi5nZXRCeXRlcygpOwogICAgICAgLy8gTG9jYXRlIGFuIGFjY291bnQgbWFuYWdlci4gR2l2ZSB0aGUgZnVsbCBQT0EgbmFtZSBhbmQgdGhlIHNlcnZhbnQgSUQuCi0gICAgICBCYW5rLkFjY291bnRNYW5hZ2VyIG1hbmFnZXIgPSAKLQlCYW5rLkFjY291bnRNYW5hZ2VySGVscGVyLmJpbmQob3JiLCAiL3JtaV9iYW5rX3BvYSIsIG1hbmFnZXJJZCk7CisgICAgICBCYW5rLkFjY291bnRNYW5hZ2VyIG1hbmFnZXIgPQorICAgIEJhbmsuQWNjb3VudE1hbmFnZXJIZWxwZXIuYmluZChvcmIsICIvcm1pX2JhbmtfcG9hIiwgbWFuYWdlcklkKTsKICAgICAgIC8vIFVzZSBhbnkgbnVtYmVyIG9mIGFyZ3VtZW50IHBhaXJzIHRvIGluZGljYXRlIG5hbWUsYmFsYW5jZSBvZiBhY2NvdW50cyB0byBjcmVhdGUKICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAwIHx8IGFyZ3MubGVuZ3RoICUgMiAhPSAwKSB7CiAgICAgICAgIGFyZ3MgPSBuZXcgU3RyaW5nWzJdOwpAQCAtNDcsMTAgKzQ3LDEwIEBACiAgICAgICAgIEJhbmsuQWNjb3VudCBhY2NvdW50ID0gbWFuYWdlci5jcmVhdGUoZGF0YSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbgogICAgICAgICAgICgiQ3JlYXRlZCBhY2NvdW50IGZvciAiICsgbmFtZSArICIgd2l0aCBvcGVuaW5nIGJhbGFuY2Ugb2YgJCIgKyBiYWxhbmNlKTsKLSAgICAgIH0gCi0gICAgCisgICAgICB9CisKICAgICAgIGphdmEudXRpbC5IYXNodGFibGUgYWNjb3VudHMgPSBtYW5hZ2VyLmdldEFjY291bnRzKCk7Ci0gICAgCisKICAgICAgIGZvciAoamF2YS51dGlsLkVudW1lcmF0aW9uIGUgPSBhY2NvdW50cy5lbGVtZW50cygpOyBlLmhhc01vcmVFbGVtZW50cygpOykgewogICAgICAgICBCYW5rLkFjY291bnQgYWNjb3VudCA9IEJhbmsuQWNjb3VudEhlbHBlci5uYXJyb3coKG9yZy5vbWcuQ09SQkEuT2JqZWN0KWUubmV4dEVsZW1lbnQoKSk7CiAgICAgICAgIFN0cmluZyBuYW1lID0gYWNjb3VudC5uYW1lKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9ybWlpaW9wL3NyYy9TZXJ2ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL3JtaWlpb3Avc3JjL1NlcnZlci5qYXZhCmluZGV4IGVlN2U5YjguLjBiODNlMzcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL3JtaWlpb3Avc3JjL1NlcnZlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL3JtaWlpb3Avc3JjL1NlcnZlci5qYXZhCkBAIC0yNywxMSArMjcsMTEgQEAKICAgICAgIFBPQSByb290UE9BID0gUE9BSGVscGVyLm5hcnJvdyhvcmIucmVzb2x2ZV9pbml0aWFsX3JlZmVyZW5jZXMoIlJvb3RQT0EiKSk7CiAKICAgICAgIC8vIENyZWF0ZSBwb2xpY2llcyBmb3Igb3VyIHBlcnNpc3RlbnQgUE9BCi0gICAgICBvcmcub21nLkNPUkJBLlBvbGljeVtdIHBvbGljaWVzID0geyAKLSAgICAgICAgcm9vdFBPQS5jcmVhdGVfbGlmZXNwYW5fcG9saWN5KExpZmVzcGFuUG9saWN5VmFsdWUuUEVSU0lTVEVOVCkgCisgICAgICBvcmcub21nLkNPUkJBLlBvbGljeVtdIHBvbGljaWVzID0geworICAgICAgICByb290UE9BLmNyZWF0ZV9saWZlc3Bhbl9wb2xpY3koTGlmZXNwYW5Qb2xpY3lWYWx1ZS5QRVJTSVNURU5UKQogICAgICAgfTsKICAgICAgIC8vIENyZWF0ZSBteVBPQSB3aXRoIHRoZSByaWdodCBwb2xpY2llcwotICAgICAgUE9BIG15UE9BID0gcm9vdFBPQS5jcmVhdGVfUE9BKCAicm1pX2JhbmtfcG9hIiwgcm9vdFBPQS50aGVfUE9BTWFuYWdlcigpLCAKKyAgICAgIFBPQSBteVBPQSA9IHJvb3RQT0EuY3JlYXRlX1BPQSggInJtaV9iYW5rX3BvYSIsIHJvb3RQT0EudGhlX1BPQU1hbmFnZXIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY2llcyApOwogICAgICAgLy8gQ3JlYXRlIHRoZSBzZXJ2YW50CiAgICAgICBBY2NvdW50TWFuYWdlckltcGwgbWFuYWdlclNlcnZhbnQgPSBuZXcgQWNjb3VudE1hbmFnZXJJbXBsKCk7CkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAvLyBBY3RpdmF0ZSB0aGUgUE9BIG1hbmFnZXIKICAgICAgIHJvb3RQT0EudGhlX1BPQU1hbmFnZXIoKS5hY3RpdmF0ZSgpOwogCi0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4obXlQT0Euc2VydmFudF90b19yZWZlcmVuY2UobWFuYWdlclNlcnZhbnQpICsgCisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obXlQT0Euc2VydmFudF90b19yZWZlcmVuY2UobWFuYWdlclNlcnZhbnQpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAiIGlzIHJlYWR5LiIpOwogICAgICAgLy8gV2FpdCBmb3IgaW5jb21pbmcgcmVxdWVzdHMKICAgICAgIG9yYi5ydW4oKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3BlcnNpc3RlbmNlLWNvbW1vbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS9wZXJzaXN0ZW5jZS1jb21tb24ueG1sCmluZGV4IGViZWM3NDcuLmY4MWE2M2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3BlcnNpc3RlbmNlLWNvbW1vbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvcGVyc2lzdGVuY2UtY29tbW9uLnhtbApAQCAtMjIsMTYgKzIyLDE2IEBACiAtLT4KIAogPCEtLQotICAgLURkYXRhYmFzZS5wcm9wZXJ0aWVzIG9wdGlvbiBjYW4gYmUgcGFzc2VkIHRvIHRoZSBhbnQgdGFyZ2V0IHRvIHJ1biB0aGUgcGVyc2lzdGVuY2UgCi0gICB0ZXN0cyB3aXRoIHZhcmlvdXMgZGF0YWJhc2VzLiBUZXN0IGxvYWRzIGRlcmJ5LnByb3BlcnRpZXMgYXMgZGVmYXVsdCBpZiBubyBkYXRhYmFzZSAKKyAgIC1EZGF0YWJhc2UucHJvcGVydGllcyBvcHRpb24gY2FuIGJlIHBhc3NlZCB0byB0aGUgYW50IHRhcmdldCB0byBydW4gdGhlIHBlcnNpc3RlbmNlCisgICB0ZXN0cyB3aXRoIHZhcmlvdXMgZGF0YWJhc2VzLiBUZXN0IGxvYWRzIGRlcmJ5LnByb3BlcnRpZXMgYXMgZGVmYXVsdCBpZiBubyBkYXRhYmFzZQogICAgaXMgc3BlY2lmaWVkLgogLS0+CiA8cHJvcGVydHkgbmFtZT0iZGF0YWJhc2UucHJvcGVydGllcyIgdmFsdWU9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS9jb25maWcvZGVyYnkucHJvcGVydGllcyIgLz4KIDxwcm9wZXJ0eSBmaWxlPSIke2RhdGFiYXNlLnByb3BlcnRpZXN9IiAvPgogCiA8IS0tCi0gICAtRHBlcnNpc3RlbmNlLnByb3ZpZGVyIG9wdGlvbiBjYW4gYmUgcGFzc2VkIHRvIHRoZSBhbnQgdGFyZ2V0IHRvIHJ1biB0aGUgcGVyc2lzdGVuY2UgCi0gICB0ZXN0cyB3aXRoIHZhcmlvdXMgcHJvdmlkZXJzLiBUZXN0IGxvYWRzIGVjbGlwc2VsaW5rICBhcyBkZWZhdWx0IGlmIG5vIHByb3ZpZGVyIAorICAgLURwZXJzaXN0ZW5jZS5wcm92aWRlciBvcHRpb24gY2FuIGJlIHBhc3NlZCB0byB0aGUgYW50IHRhcmdldCB0byBydW4gdGhlIHBlcnNpc3RlbmNlCisgICB0ZXN0cyB3aXRoIHZhcmlvdXMgcHJvdmlkZXJzLiBUZXN0IGxvYWRzIGVjbGlwc2VsaW5rICBhcyBkZWZhdWx0IGlmIG5vIHByb3ZpZGVyCiAgICBpcyBzcGVjaWZpZWQuCiAtLT4KIDxwcm9wZXJ0eSBuYW1lPSJwZXJzaXN0ZW5jZS5wcm92aWRlciIgdmFsdWU9Im9yZy5lY2xpcHNlLnBlcnNpc3RlbmNlLmpwYS5QZXJzaXN0ZW5jZVByb3ZpZGVyIiAvPgpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2VudGl0eS5qYXJ9IiBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9ICIke2VudGl0eS5jbGFzc30iPgogICAgICAgIDxtZXRhaW5mIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiPgotCSAgIDxpbmNsdWRlIG5hbWU9IioqLyoueG1sIi8+CisgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi54bWwiLz4KICAgICAgICA8L21ldGFpbmY+CiAgICAgPC9qYXI+CiAgICAgPGVjaG8gbWVzc2FnZT0iLS0tLUdFTkVSQVRFRC0tLS0ke2J1aWxkLmNsYXNzZXMuZGlyfS8ke2VudGl0eS5qYXJ9IiAvPgpAQCAtMTE0LDEwICsxMTQsMTAgQEAKICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9L2xpYiIvPgogICA8bW92ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vZW50aXR5LmphciIgdG9kaXI9IiR7YXNzZW1ibGUuZGlyfS9saWIiLz4KLSAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiAKLSAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiIAorICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iCisgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbH0iIAorICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sfSIKICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KQEAgLTE3NCw3ICsxNzQsNyBAQAogICAgIDwvZmlsZXNldD4KICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotCSA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CiAgICAgPC9maWxlc2V0PgogICA8L2phcj4KIDwvdGFyZ2V0PgpAQCAtMjU2LDcgKzI1Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmRvIi8+CiAgICAgICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGNhc2VzZW5zaXRpdmU9InRydWUiPgotCQkJIDxpbmNsdWRlIG5hbWU9IldFQi1JTkYvd2ViLnhtbCIvPgorICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IldFQi1JTkYvd2ViLnhtbCIvPgogICAgICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgPC9qYXI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgd2FyIGZpbGUgJHt3YXIuZmlsZX0iLz4KQEAgLTI3NCw4ICsyNzQsOCBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXM9JHt3ZWJjbGllbnQud2FyLmNsYXNzZXN9Ii8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7d2ViLnhtbH0iCiAgICAgICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9XRUItSU5GL3dlYi54bWwiLz4KLQk8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9XRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYiLz4KLQk8Y29weSBmaWxlPSIke3BlcnNpc3RlbmNlLnhtbH0iCisgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vV0VCLUlORi9jbGFzc2VzL01FVEEtSU5GIi8+CisgICAgPGNvcHkgZmlsZT0iJHtwZXJzaXN0ZW5jZS54bWx9IgogICAgICAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vV0VCLUlORi9jbGFzc2VzL01FVEEtSU5GL3BlcnNpc3RlbmNlLnhtbCIvPgogICAgICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vV0VCLUlORi9jbGFzc2VzIj4KICAgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KQEAgLTI5NCw3ICsyOTQsNyBAQAogICAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGNhc2VzZW5zaXRpdmU9InRydWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IldFQi1JTkYvd2ViLnhtbCIvPgogICAgICAgICAgICAgICAgIDwvZmlsZXNldD4KLQkJIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGNhc2VzZW5zaXRpdmU9InRydWUiPgorICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgY2FzZXNlbnNpdGl2ZT0idHJ1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iV0VCLUlORi9jbGFzc2VzL01FVEEtSU5GL3BlcnNpc3RlbmNlLnhtbCIvPgogICAgICAgICAgICAgICAgIDwvZmlsZXNldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvcnVuX3Rlc3Quc2ggYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS9ydW5fdGVzdC5zaAppbmRleCBlNWM4MmY5Li5jZWU1N2YwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS9ydW5fdGVzdC5zaAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS9ydW5fdGVzdC5zaApAQCAtNDAsMTEgKzQwLDExIEBACiB9CiAKIGdldF90ZXN0X3RhcmdldCgpewotCWNhc2UgJHsxfSBpbgotCQlwZXJzaXN0ZW5jZV9hbGwgKQotCQkJVEFSR0VUPWFsbAotCQkJZXhwb3J0IFRBUkdFVDs7Ci0JZXNhYworICAgIGNhc2UgJHsxfSBpbgorICAgICAgICBwZXJzaXN0ZW5jZV9hbGwgKQorICAgICAgICAgICAgVEFSR0VUPWFsbAorICAgICAgICAgICAgZXhwb3J0IFRBUkdFVDs7CisgICAgZXNhYwogfQogCiBPUFQ9JHsxfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9idWlsZC54bWwKaW5kZXggNjhkMWQ1NC4uYjU5ZDAyMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvYnVpbGQueG1sCkBAIC00MywxMCArNDMsMTAgQEAKICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0icGVyc2lzdGVuY2VfcGFja2FnaW5nLm91dHB1dCIgYWN0aW9uPSJzdGFydCIgLz4KIAotCTxhbnQgZGlyPSJwa2dFYXJMaWJUZXN0IiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJwa2dFamJUZXN0IiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJwa2dXYXJUZXN0IiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJwa2dXYXJUZXN0MSIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0icGtnRWFyTGliVGVzdCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0icGtnRWpiVGVzdCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0icGtnV2FyVGVzdCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0icGtnV2FyVGVzdDEiIHRhcmdldD0iYWxsIi8+CiAKIAogICAgICAgICA8cmVjb3JkIG5hbWU9InBlcnNpc3RlbmNlX3BhY2thZ2luZy5vdXRwdXQiIGFjdGlvbj0ic3RvcCIgLz4KQEAgLTY3LDEwICs2NywxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwa2dFamJUZXN0Ij4KLQk8cmVjb3JkIG5hbWU9InBrZ0VqYlRlc3Qub3V0cHV0IiBhY3Rpb249InN0YXJ0IiAvPgorICAgIDxyZWNvcmQgbmFtZT0icGtnRWpiVGVzdC5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiIC8+CiAgICAgICAgICAgICA8YW50IGRpcj0icGtnRWpiVGVzdCIgdGFyZ2V0PSJhbGwiLz4KLQk8cmVjb3JkIG5hbWU9InBrZ0VqYlRlc3Qub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJyZXBvcnQiLz4KKyAgICA8cmVjb3JkIG5hbWU9InBrZ0VqYlRlc3Qub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXBvcnQiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icGtnV2FyVGVzdCI+CkBAIC04OCw5ICs4OCw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIHBlcnNpc3RlbmNlX3BhY2thZ2luZyB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBwZXJzaXN0ZW5jZV9wYWNrYWdpbmcgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VhckxpYlRlc3QvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFYXJMaWJUZXN0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggY2IxZDQ0ZC4uZGQ3MTVkYyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VhckxpYlRlc3QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnRWFyTGliVGVzdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1jbXAiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXBrZ0VhckxpYlRlc3QiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXBrZ0VhckxpYlRlc3QiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0icGVyc2lzdGVuY2UueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnRWFyTGliVGVzdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnRWFyTGliVGVzdC9idWlsZC54bWwKaW5kZXggMmRhZTRlOC4uNGZjZGE5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VhckxpYlRlc3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFYXJMaWJUZXN0L2J1aWxkLnhtbApAQCAtNjYsMTMgKzY2LDEzIEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KICAgICA8L2FudGNhbGw+Ci08L3RhcmdldD4gCis8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJwa2ctcHUiIGRlcGVuZHM9ImluaXQtY29tbW9uLGNvbXBpbGUiPgogICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1wdS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iZW50aXR5LmphciIgdmFsdWU9ImVudGl0eS5qYXIiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVudGl0eS5jbGFzcyIgdmFsdWU9IioqLypDdXN0b21lci5jbGFzcywqKi8qT3JkZXIuY2xhc3MiLz4KLQk8cGFyYW0gbmFtZT0icGVyc2lzdGVuY2UueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KKyAgICA8cGFyYW0gbmFtZT0icGVyc2lzdGVuY2UueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KICAgICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VhckxpYlRlc3QvY2xpZW50L0FwcENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VhckxpYlRlc3QvY2xpZW50L0FwcENsaWVudC5qYXZhCmluZGV4IGZiYjIxYjMuLmU3MDliYjcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFYXJMaWJUZXN0L2NsaWVudC9BcHBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnRWFyTGliVGVzdC9jbGllbnQvQXBwQ2xpZW50LmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIAogcHVibGljIGNsYXNzIEFwcENsaWVudCB7CiAKLSAgICBARUpCKG5hbWU9ImVqYi9UZXN0IikgCisgICAgQEVKQihuYW1lPSJlamIvVGVzdCIpCiAgICAgcHJpdmF0ZSBzdGF0aWMgVGVzdCBzYjsKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdFN1aXRlSUQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXR1cyA9CkBAIC0zNyw1MyArMzcsNTMgQEAKIAogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCVN5c3RlbS5vdXQucHJpbnRsbigiYXJncyAtPiIrIGFyZ3MpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiYXJnczAgLT4iKyBhcmdzWzBdKTsKLQl0ZXN0U3VpdGVJRCA9IGFyZ3NbMF07CQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXJncyAtPiIrIGFyZ3MpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXJnczAgLT4iKyBhcmdzWzBdKTsKKyAgICB0ZXN0U3VpdGVJRCA9IGFyZ3NbMF07CiAgICAgICAgIEFwcENsaWVudCB0ZXN0ID0gbmV3IEFwcENsaWVudCgpOwotCXN0YXR1cy5hZGREZXNjcmlwdGlvbigiVGVzdGluZyAgSlBBIHBhY2thZ2luZyBzY2VuYXJpb3VzLi4iK3Rlc3RTdWl0ZUlEKTsKLQl0ZXN0LnJ1blRlc3QoKTsKLQlzdGF0dXMucHJpbnRTdW1tYXJ5KHRlc3RTdWl0ZUlEKTsKKyAgICBzdGF0dXMuYWRkRGVzY3JpcHRpb24oIlRlc3RpbmcgIEpQQSBwYWNrYWdpbmcgc2NlbmFyaW91cy4uIit0ZXN0U3VpdGVJRCk7CisgICAgdGVzdC5ydW5UZXN0KCk7CisgICAgc3RhdHVzLnByaW50U3VtbWFyeSh0ZXN0U3VpdGVJRCk7CiAgICAgfQogCiAKICAgICBwdWJsaWMgdm9pZCBydW5UZXN0KCkgewogCi0JCisKICAgICAgICAgLy8gUGVyc2lzdCBhbGwgZW50aXRpZXMKLQlTdHJpbmcgdGVzdEluc2VydCA9IHNiLnRlc3RJbnNlcnQoKTsKKyAgICBTdHJpbmcgdGVzdEluc2VydCA9IHNiLnRlc3RJbnNlcnQoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnNlcnRpbmcgQ3VzdG9tZXIgYW5kIE9yZGVycy4uLiAiICsgdGVzdEluc2VydCk7Ci0JaWYoIk9LIi5lcXVhbHModGVzdEluc2VydCkpIHsKLQkJc3RhdHVzLmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCArICItSW5zZXJ0Q3VzdG9tZXIiLCBzdGF0dXMuUEFTUyk7Ci0JfSBlbHNlIHsKLQkJc3RhdHVzLmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCArICItSW5zZXJ0Q3VzdG9tZXIiLCBzdGF0dXMuRkFJTCk7CisgICAgaWYoIk9LIi5lcXVhbHModGVzdEluc2VydCkpIHsKKyAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCArICItSW5zZXJ0Q3VzdG9tZXIiLCBzdGF0dXMuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCArICItSW5zZXJ0Q3VzdG9tZXIiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgIH0KIAotCVN0cmluZyB2ZXJJbnNlcnQgPSBzYi52ZXJpZnlJbnNlcnQoKTsKKyAgICBTdHJpbmcgdmVySW5zZXJ0ID0gc2IudmVyaWZ5SW5zZXJ0KCk7CiAgICAgICAgIC8vIFRlc3QgcXVlcnkgYW5kIG5hdmlnYXRpb24KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWZXJpZnlpbmcgdGhhdCBhbGwgYXJlIGluc2VydGVkLi4uICIgKyB2ZXJJbnNlcnQpOwotCWlmKCJPSyIuZXF1YWxzKHZlckluc2VydCkpIHsKKyAgICBpZigiT0siLmVxdWFscyh2ZXJJbnNlcnQpKSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCArICItVmVyaWZ5Q3VzdG9tZXJJbnNlcnQiLCBzdGF0dXMuUEFTUyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCArICItVmVyaWZ5Q3VzdG9tZXJJbnNlcnQiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBHZXQgYSBkZXRhY2hlZCBpbnN0YW5jZSAKKyAgICAgICAgLy8gR2V0IGEgZGV0YWNoZWQgaW5zdGFuY2UKICAgICAgICAgU3RyaW5nIGMgPSAiSm9lIFNtaXRoIjsKLQlTdHJpbmcgdGVzdERlbGV0ZSA9IHNiLnRlc3REZWxldGUoYyk7CisgICAgU3RyaW5nIHRlc3REZWxldGUgPSBzYi50ZXN0RGVsZXRlKGMpOwogCiAgICAgICAgIC8vIFJlbW92ZSBhbGwgZW50aXRpZXMKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZW1vdmluZyBhbGwuLi4gIiArIHRlc3REZWxldGUpOwotCWlmKCJPSyIuZXF1YWxzKHRlc3REZWxldGUpKSB7CisgICAgaWYoIk9LIi5lcXVhbHModGVzdERlbGV0ZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKHRlc3RTdWl0ZUlEICsgIi1EZWxldGVDdXN0b21lciIsIHN0YXR1cy5QQVNTKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKHRlc3RTdWl0ZUlEICsgIi1EZWxldGVDdXN0b21lciIsIHN0YXR1cy5GQUlMKTsKICAgICAgICAgfQogCi0JU3RyaW5nIHZlckRlbGV0ZSA9IHNiLnZlcmlmeURlbGV0ZSgpOworICAgIFN0cmluZyB2ZXJEZWxldGUgPSBzYi52ZXJpZnlEZWxldGUoKTsKICAgICAgICAgLy8gUXVlcnkgdGhlIHJlc3VsdHMKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWZXJpZnlpbmcgdGhhdCBhbGwgYXJlIHJlbW92ZWQuLi4gIiArIHZlckRlbGV0ZSk7Ci0JaWYoIk9LIi5lcXVhbHModmVyRGVsZXRlKSkgeworICAgIGlmKCJPSyIuZXF1YWxzKHZlckRlbGV0ZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKHRlc3RTdWl0ZUlEICsgIi1WZXJpZnlEZWxldGVDdXN0b21lciIsIHN0YXR1cy5QQVNTKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKHRlc3RTdWl0ZUlEICsgIi1WZXJpZnlEZWxldGVDdXN0b21lciIsIHN0YXR1cy5GQUlMKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFYXJMaWJUZXN0L2VqYi9UZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VhckxpYlRlc3QvZWpiL1Rlc3RCZWFuLmphdmEKaW5kZXggMGYyZTM1NS4uMjI4ZTYyYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VhckxpYlRlc3QvZWpiL1Rlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VhckxpYlRlc3QvZWpiL1Rlc3RCZWFuLmphdmEKQEAgLTUyLDEwICs1MiwxMCBAQAogICAgICAgICBvcmRlcjIuc2V0SWQoMjAwKTsKICAgICAgICAgb3JkZXIyLnNldEFkZHJlc3MoIjU2NyAxc3QgU3QuIFJhbmRvbSBDaXR5LCBVU0EiKTsKIAotICAgICAgICAvLyBBc3NvY2lhdGUgb3JkZXJzIHdpdGggdGhlIGN1c3RvbWVyLiBUaGUgYXNzb2NpYXRpb24gCi0gICAgICAgIC8vIG11c3QgYmUgc2V0IG9uIGJvdGggc2lkZXMgb2YgdGhlIHJlbGF0aW9uc2hpcDogb24gdGhlIAotICAgICAgICAvLyBjdXN0b21lciBzaWRlIGZvciB0aGUgb3JkZXJzIHRvIGJlIHBlcnNpc3RlZCB3aGVuIAotICAgICAgICAvLyB0cmFuc2FjdGlvbiBjb21taXRzLCBhbmQgb24gdGhlIG9yZGVyIHNpZGUgYmVjYXVzZSBpdCAKKyAgICAgICAgLy8gQXNzb2NpYXRlIG9yZGVycyB3aXRoIHRoZSBjdXN0b21lci4gVGhlIGFzc29jaWF0aW9uCisgICAgICAgIC8vIG11c3QgYmUgc2V0IG9uIGJvdGggc2lkZXMgb2YgdGhlIHJlbGF0aW9uc2hpcDogb24gdGhlCisgICAgICAgIC8vIGN1c3RvbWVyIHNpZGUgZm9yIHRoZSBvcmRlcnMgdG8gYmUgcGVyc2lzdGVkIHdoZW4KKyAgICAgICAgLy8gdHJhbnNhY3Rpb24gY29tbWl0cywgYW5kIG9uIHRoZSBvcmRlciBzaWRlIGJlY2F1c2UgaXQKICAgICAgICAgLy8gaXMgdGhlIG93bmluZyBzaWRlLgogICAgICAgICBjdXN0b21lcjAuZ2V0T3JkZXJzKCkuYWRkKG9yZGVyMSk7CiAgICAgICAgIG9yZGVyMS5zZXRDdXN0b21lcihjdXN0b21lcjApOwpAQCAtNjUsMTQgKzY1LDE0IEBACiAKICAgICAgICAgcmV0dXJuICJPSyI7CiAgICAgfQotICAgICAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgdmVyaWZ5SW5zZXJ0KCkgewogCiAgICAgICAgIEN1c3RvbWVyIGMgPSBmaW5kQ3VzdG9tZXIoIkpvZSBTbWl0aCIpOwogCiAgICAgICAgIENvbGxlY3Rpb248T3JkZXI+IG9yZGVycyA9IGMuZ2V0T3JkZXJzKCk7CiAgICAgICAgIGlmIChvcmRlcnMgPT0gbnVsbCB8fCBvcmRlcnMuc2l6ZSgpICE9IDIpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVbmV4cGVjdGVkIG51bWJlciBvZiBvcmRlcnM6ICIgCisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5leHBlY3RlZCBudW1iZXIgb2Ygb3JkZXJzOiAiCiAgICAgICAgICAgICAgICAgICAgICsgKChvcmRlcnMgPT0gbnVsbCk/ICJudWxsIiA6ICIiICsgb3JkZXJzLnNpemUoKSkpOwogICAgICAgICB9CiAKQEAgLTExMywxMCArMTEzLDEwIEBACiAgICAgfQogCiAgICAgcHVibGljIEN1c3RvbWVyIGZpbmRDdXN0b21lcihTdHJpbmcgbmFtZSkgewotCVF1ZXJ5IHEgPSBlbS5jcmVhdGVRdWVyeSgic2VsZWN0IGMgZnJvbSBDdXN0b21lciBjIHdoZXJlIGMubmFtZSA9IDpuYW1lIik7CisgICAgUXVlcnkgcSA9IGVtLmNyZWF0ZVF1ZXJ5KCJzZWxlY3QgYyBmcm9tIEN1c3RvbWVyIGMgd2hlcmUgYy5uYW1lID0gOm5hbWUiKTsKICAgICAgICAgcS5zZXRQYXJhbWV0ZXIoIm5hbWUiLCBuYW1lKTsKICAgICAgICAgQ3VzdG9tZXIgYyA9IChDdXN0b21lcilxLmdldFNpbmdsZVJlc3VsdCgpOwotCXJldHVybiBjOworICAgIHJldHVybiBjOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VqYlRlc3QvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFamJUZXN0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNGM2YTBiOC4uMmM2Y2ZhZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VqYlRlc3QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnRWpiVGVzdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1jbXAiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXBrZ0VqYlRlc3QiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXBrZ0VqYlRlc3QiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0icGVyc2lzdGVuY2UueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnRWpiVGVzdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnRWpiVGVzdC9idWlsZC54bWwKaW5kZXggZDgwODZkZS4uMTc3YWE2NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VqYlRlc3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFamJUZXN0L2J1aWxkLnhtbApAQCAtMzgsNyArMzgsNyBAQAogPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgPGNvcHkgZmlsZT0iJHtwZXJzaXN0ZW5jZS54bWx9X2VsIiB0b2ZpbGU9IiR7cGVyc2lzdGVuY2UueG1sfSIKICAgICAgICAgICAgICAgIG92ZXJ3cml0ZT0idHJ1ZSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0JICAgICAgPHJlcGxhY2UgZmlsZT0iJHtwZXJzaXN0ZW5jZS54bWx9IiB0b2tlbj0iQERCUFJPVklERVJAIiB2YWx1ZT0iJHtwZXJzaXN0ZW5jZS5wcm92aWRlcn0iLz4KKyAgICAgICAgICA8cmVwbGFjZSBmaWxlPSIke3BlcnNpc3RlbmNlLnhtbH0iIHRva2VuPSJAREJQUk9WSURFUkAiIHZhbHVlPSIke3BlcnNpc3RlbmNlLnByb3ZpZGVyfSIvPgogICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1wZXJzaXN0ZW5jZS1jb25ucG9vbC1jb21tb24iLz4KICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIi8+CiA8L3RhcmdldD4KQEAgLTY2LDcgKzY2LDcgQEAKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgogICAgIDwvYW50Y2FsbD4KLTwvdGFyZ2V0PiAKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InBrZy1wdSIgZGVwZW5kcz0iaW5pdC1jb21tb24sY29tcGlsZSI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVudGl0eS1lamIiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VqYlRlc3QvY2xpZW50L0FwcENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VqYlRlc3QvY2xpZW50L0FwcENsaWVudC5qYXZhCmluZGV4IGZiYjIxYjMuLmU3MDliYjcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFamJUZXN0L2NsaWVudC9BcHBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnRWpiVGVzdC9jbGllbnQvQXBwQ2xpZW50LmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIAogcHVibGljIGNsYXNzIEFwcENsaWVudCB7CiAKLSAgICBARUpCKG5hbWU9ImVqYi9UZXN0IikgCisgICAgQEVKQihuYW1lPSJlamIvVGVzdCIpCiAgICAgcHJpdmF0ZSBzdGF0aWMgVGVzdCBzYjsKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdFN1aXRlSUQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXR1cyA9CkBAIC0zNyw1MyArMzcsNTMgQEAKIAogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCVN5c3RlbS5vdXQucHJpbnRsbigiYXJncyAtPiIrIGFyZ3MpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiYXJnczAgLT4iKyBhcmdzWzBdKTsKLQl0ZXN0U3VpdGVJRCA9IGFyZ3NbMF07CQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXJncyAtPiIrIGFyZ3MpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXJnczAgLT4iKyBhcmdzWzBdKTsKKyAgICB0ZXN0U3VpdGVJRCA9IGFyZ3NbMF07CiAgICAgICAgIEFwcENsaWVudCB0ZXN0ID0gbmV3IEFwcENsaWVudCgpOwotCXN0YXR1cy5hZGREZXNjcmlwdGlvbigiVGVzdGluZyAgSlBBIHBhY2thZ2luZyBzY2VuYXJpb3VzLi4iK3Rlc3RTdWl0ZUlEKTsKLQl0ZXN0LnJ1blRlc3QoKTsKLQlzdGF0dXMucHJpbnRTdW1tYXJ5KHRlc3RTdWl0ZUlEKTsKKyAgICBzdGF0dXMuYWRkRGVzY3JpcHRpb24oIlRlc3RpbmcgIEpQQSBwYWNrYWdpbmcgc2NlbmFyaW91cy4uIit0ZXN0U3VpdGVJRCk7CisgICAgdGVzdC5ydW5UZXN0KCk7CisgICAgc3RhdHVzLnByaW50U3VtbWFyeSh0ZXN0U3VpdGVJRCk7CiAgICAgfQogCiAKICAgICBwdWJsaWMgdm9pZCBydW5UZXN0KCkgewogCi0JCisKICAgICAgICAgLy8gUGVyc2lzdCBhbGwgZW50aXRpZXMKLQlTdHJpbmcgdGVzdEluc2VydCA9IHNiLnRlc3RJbnNlcnQoKTsKKyAgICBTdHJpbmcgdGVzdEluc2VydCA9IHNiLnRlc3RJbnNlcnQoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnNlcnRpbmcgQ3VzdG9tZXIgYW5kIE9yZGVycy4uLiAiICsgdGVzdEluc2VydCk7Ci0JaWYoIk9LIi5lcXVhbHModGVzdEluc2VydCkpIHsKLQkJc3RhdHVzLmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCArICItSW5zZXJ0Q3VzdG9tZXIiLCBzdGF0dXMuUEFTUyk7Ci0JfSBlbHNlIHsKLQkJc3RhdHVzLmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCArICItSW5zZXJ0Q3VzdG9tZXIiLCBzdGF0dXMuRkFJTCk7CisgICAgaWYoIk9LIi5lcXVhbHModGVzdEluc2VydCkpIHsKKyAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCArICItSW5zZXJ0Q3VzdG9tZXIiLCBzdGF0dXMuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCArICItSW5zZXJ0Q3VzdG9tZXIiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgIH0KIAotCVN0cmluZyB2ZXJJbnNlcnQgPSBzYi52ZXJpZnlJbnNlcnQoKTsKKyAgICBTdHJpbmcgdmVySW5zZXJ0ID0gc2IudmVyaWZ5SW5zZXJ0KCk7CiAgICAgICAgIC8vIFRlc3QgcXVlcnkgYW5kIG5hdmlnYXRpb24KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWZXJpZnlpbmcgdGhhdCBhbGwgYXJlIGluc2VydGVkLi4uICIgKyB2ZXJJbnNlcnQpOwotCWlmKCJPSyIuZXF1YWxzKHZlckluc2VydCkpIHsKKyAgICBpZigiT0siLmVxdWFscyh2ZXJJbnNlcnQpKSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCArICItVmVyaWZ5Q3VzdG9tZXJJbnNlcnQiLCBzdGF0dXMuUEFTUyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCArICItVmVyaWZ5Q3VzdG9tZXJJbnNlcnQiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBHZXQgYSBkZXRhY2hlZCBpbnN0YW5jZSAKKyAgICAgICAgLy8gR2V0IGEgZGV0YWNoZWQgaW5zdGFuY2UKICAgICAgICAgU3RyaW5nIGMgPSAiSm9lIFNtaXRoIjsKLQlTdHJpbmcgdGVzdERlbGV0ZSA9IHNiLnRlc3REZWxldGUoYyk7CisgICAgU3RyaW5nIHRlc3REZWxldGUgPSBzYi50ZXN0RGVsZXRlKGMpOwogCiAgICAgICAgIC8vIFJlbW92ZSBhbGwgZW50aXRpZXMKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZW1vdmluZyBhbGwuLi4gIiArIHRlc3REZWxldGUpOwotCWlmKCJPSyIuZXF1YWxzKHRlc3REZWxldGUpKSB7CisgICAgaWYoIk9LIi5lcXVhbHModGVzdERlbGV0ZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKHRlc3RTdWl0ZUlEICsgIi1EZWxldGVDdXN0b21lciIsIHN0YXR1cy5QQVNTKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKHRlc3RTdWl0ZUlEICsgIi1EZWxldGVDdXN0b21lciIsIHN0YXR1cy5GQUlMKTsKICAgICAgICAgfQogCi0JU3RyaW5nIHZlckRlbGV0ZSA9IHNiLnZlcmlmeURlbGV0ZSgpOworICAgIFN0cmluZyB2ZXJEZWxldGUgPSBzYi52ZXJpZnlEZWxldGUoKTsKICAgICAgICAgLy8gUXVlcnkgdGhlIHJlc3VsdHMKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWZXJpZnlpbmcgdGhhdCBhbGwgYXJlIHJlbW92ZWQuLi4gIiArIHZlckRlbGV0ZSk7Ci0JaWYoIk9LIi5lcXVhbHModmVyRGVsZXRlKSkgeworICAgIGlmKCJPSyIuZXF1YWxzKHZlckRlbGV0ZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKHRlc3RTdWl0ZUlEICsgIi1WZXJpZnlEZWxldGVDdXN0b21lciIsIHN0YXR1cy5QQVNTKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKHRlc3RTdWl0ZUlEICsgIi1WZXJpZnlEZWxldGVDdXN0b21lciIsIHN0YXR1cy5GQUlMKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFamJUZXN0L2VqYi9UZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VqYlRlc3QvZWpiL1Rlc3RCZWFuLmphdmEKaW5kZXggMGYyZTM1NS4uMjI4ZTYyYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VqYlRlc3QvZWpiL1Rlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VqYlRlc3QvZWpiL1Rlc3RCZWFuLmphdmEKQEAgLTUyLDEwICs1MiwxMCBAQAogICAgICAgICBvcmRlcjIuc2V0SWQoMjAwKTsKICAgICAgICAgb3JkZXIyLnNldEFkZHJlc3MoIjU2NyAxc3QgU3QuIFJhbmRvbSBDaXR5LCBVU0EiKTsKIAotICAgICAgICAvLyBBc3NvY2lhdGUgb3JkZXJzIHdpdGggdGhlIGN1c3RvbWVyLiBUaGUgYXNzb2NpYXRpb24gCi0gICAgICAgIC8vIG11c3QgYmUgc2V0IG9uIGJvdGggc2lkZXMgb2YgdGhlIHJlbGF0aW9uc2hpcDogb24gdGhlIAotICAgICAgICAvLyBjdXN0b21lciBzaWRlIGZvciB0aGUgb3JkZXJzIHRvIGJlIHBlcnNpc3RlZCB3aGVuIAotICAgICAgICAvLyB0cmFuc2FjdGlvbiBjb21taXRzLCBhbmQgb24gdGhlIG9yZGVyIHNpZGUgYmVjYXVzZSBpdCAKKyAgICAgICAgLy8gQXNzb2NpYXRlIG9yZGVycyB3aXRoIHRoZSBjdXN0b21lci4gVGhlIGFzc29jaWF0aW9uCisgICAgICAgIC8vIG11c3QgYmUgc2V0IG9uIGJvdGggc2lkZXMgb2YgdGhlIHJlbGF0aW9uc2hpcDogb24gdGhlCisgICAgICAgIC8vIGN1c3RvbWVyIHNpZGUgZm9yIHRoZSBvcmRlcnMgdG8gYmUgcGVyc2lzdGVkIHdoZW4KKyAgICAgICAgLy8gdHJhbnNhY3Rpb24gY29tbWl0cywgYW5kIG9uIHRoZSBvcmRlciBzaWRlIGJlY2F1c2UgaXQKICAgICAgICAgLy8gaXMgdGhlIG93bmluZyBzaWRlLgogICAgICAgICBjdXN0b21lcjAuZ2V0T3JkZXJzKCkuYWRkKG9yZGVyMSk7CiAgICAgICAgIG9yZGVyMS5zZXRDdXN0b21lcihjdXN0b21lcjApOwpAQCAtNjUsMTQgKzY1LDE0IEBACiAKICAgICAgICAgcmV0dXJuICJPSyI7CiAgICAgfQotICAgICAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgdmVyaWZ5SW5zZXJ0KCkgewogCiAgICAgICAgIEN1c3RvbWVyIGMgPSBmaW5kQ3VzdG9tZXIoIkpvZSBTbWl0aCIpOwogCiAgICAgICAgIENvbGxlY3Rpb248T3JkZXI+IG9yZGVycyA9IGMuZ2V0T3JkZXJzKCk7CiAgICAgICAgIGlmIChvcmRlcnMgPT0gbnVsbCB8fCBvcmRlcnMuc2l6ZSgpICE9IDIpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVbmV4cGVjdGVkIG51bWJlciBvZiBvcmRlcnM6ICIgCisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5leHBlY3RlZCBudW1iZXIgb2Ygb3JkZXJzOiAiCiAgICAgICAgICAgICAgICAgICAgICsgKChvcmRlcnMgPT0gbnVsbCk/ICJudWxsIiA6ICIiICsgb3JkZXJzLnNpemUoKSkpOwogICAgICAgICB9CiAKQEAgLTExMywxMCArMTEzLDEwIEBACiAgICAgfQogCiAgICAgcHVibGljIEN1c3RvbWVyIGZpbmRDdXN0b21lcihTdHJpbmcgbmFtZSkgewotCVF1ZXJ5IHEgPSBlbS5jcmVhdGVRdWVyeSgic2VsZWN0IGMgZnJvbSBDdXN0b21lciBjIHdoZXJlIGMubmFtZSA9IDpuYW1lIik7CisgICAgUXVlcnkgcSA9IGVtLmNyZWF0ZVF1ZXJ5KCJzZWxlY3QgYyBmcm9tIEN1c3RvbWVyIGMgd2hlcmUgYy5uYW1lID0gOm5hbWUiKTsKICAgICAgICAgcS5zZXRQYXJhbWV0ZXIoIm5hbWUiLCBuYW1lKTsKICAgICAgICAgQ3VzdG9tZXIgYyA9IChDdXN0b21lcilxLmdldFNpbmdsZVJlc3VsdCgpOwotCXJldHVybiBjOworICAgIHJldHVybiBjOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ1dhclRlc3QvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dXYXJUZXN0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDgzOTkxYi4uYjI4NTFlZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ1dhclRlc3QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnV2FyVGVzdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1jbXAiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXBrZ1dhclRlc3QiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXBrZ1dhclRlc3QiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9InBlcnNpc3RlbmNlLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvcGVyc2lzdGVuY2UueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dXYXJUZXN0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dXYXJUZXN0L2J1aWxkLnhtbAppbmRleCA1ZWMyYjQ4Li4zZjc2NWRhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnV2FyVGVzdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ1dhclRlc3QvYnVpbGQueG1sCkBAIC01Niw3ICs1Niw3IEBACiAKIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24sY2xlYW4iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSIke2Jhc2VkaXJ9Ly4uLy4uLy4uL3V0aWwiLz4KKyAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iJHtiYXNlZGlyfS8uLi8uLi8uLi91dGlsIi8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic3JjL2VudGl0eSIvPgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic3JjL3dlYiIvPgogICAgIDwvYW50Y2FsbD4KLTwvdGFyZ2V0PiAKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJpbml0LWNvbW1vbixjb21waWxlIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC1wdS13YXIiLz4KQEAgLTcyLDEwICs3MiwxMCBAQAogICAgICAgICBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3RVdGlsLmphdmEiLz4KLSAgICA8amF2YWMgc3JjZGlyPSJzcmMvdGVzdCIgCi0JZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCi0JY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKLSAgICAgICAgCSAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CisgICAgPGphdmFjIHNyY2Rpcj0ic3JjL3Rlc3QiCisgICAgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCisgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKKyAgICAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTg0LDcgKzg0LDcgQEAKIAogPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LldlYlRlc3QiIGZvcms9InRydWUiPgotCSAgPGFyZyB2YWx1ZT0iJHt0ZXN0c3VpdGUuaWR9Ii8+CisgICAgICA8YXJnIHZhbHVlPSIke3Rlc3RzdWl0ZS5pZH0iLz4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iLz4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ1dhclRlc3Qvc3JjL3Rlc3QvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ1dhclRlc3Qvc3JjL3Rlc3QvV2ViVGVzdC5qYXZhCmluZGV4IDQ1YzgzNzIuLmQ3NmE5NDcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dXYXJUZXN0L3NyYy90ZXN0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnV2FyVGVzdC9zcmMvdGVzdC9XZWJUZXN0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVzYWdlOiBqYXZhIFdlYlRlc3QgPFRlc3RTdWl0ZUlEPiA8aG9zdD4gPHBvcnQ+IDxjb250ZXh0Um9vdD4gPHVybFBhdHRlcm4+ICIgKTsKICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAKKwogICAgICAgICB0ZXN0U3VpdGVJRCA9IGFyZ3NbMF07CiAgICAgICAgIGhvc3QgPSBhcmdzWzFdOwogICAgICAgICBwb3J0ID0gYXJnc1syXTsKQEAgLTUxLDI0ICs1MSwyNCBAQAogICAgICAgICB1cmxQYXR0ZXJuID0gYXJnc1s0XTsKICAgICAgICAgVEVTVF9OQU1FID0gdGVzdFN1aXRlSUQ7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKICAgICAgICAgd2ViVGVzdC5kb1Rlc3QoKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAKLSAgICAgICAgdHJ5IHsgCi0gICAgICAgICAgICBXZWJUZXN0VXRpbCB3dHUgPSBuZXcgV2ViVGVzdFV0aWwgKCBob3N0LCBwb3J0LCBjb250ZXh0Um9vdCwgdXJsUGF0dGVybiwgdGVzdFN1aXRlSUQsIHN0YXQpOyAKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiUGVyc2lzdGVuY2UgUGFja2FnZSBUZXN0ICIpOworICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgV2ViVGVzdFV0aWwgd3R1ID0gbmV3IFdlYlRlc3RVdGlsICggaG9zdCwgcG9ydCwgY29udGV4dFJvb3QsIHVybFBhdHRlcm4sIHRlc3RTdWl0ZUlELCBzdGF0KTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiUGVyc2lzdGVuY2UgUGFja2FnZSBUZXN0ICIpOwogICAgICAgICAgICAgd3R1LnRlc3QoInRlc3RJbnNlcnQiKTsKICAgICAgICAgICAgIHd0dS50ZXN0KCJ2ZXJpZnlJbnNlcnQiKTsKICAgICAgICAgICAgIHd0dS50ZXN0KCJ0ZXN0RGVsZXRlIik7CiAgICAgICAgICAgICB3dHUudGVzdCgidmVyaWZ5RGVsZXRlIik7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ1dhclRlc3Qvc3JjL3dlYi9KcGFTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnV2FyVGVzdC9zcmMvd2ViL0pwYVNlcnZsZXQuamF2YQppbmRleCBkY2ZiYmEwLi42MzlmMjBjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnV2FyVGVzdC9zcmMvd2ViL0pwYVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnV2FyVGVzdC9zcmMvd2ViL0pwYVNlcnZsZXQuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgIHByaXZhdGUgRW50aXR5TWFuYWdlckZhY3RvcnkgZW1mOwogICAgIHByaXZhdGUgRW50aXR5TWFuYWdlciBlbTsKICAgICBwcml2YXRlIEBSZXNvdXJjZSBVc2VyVHJhbnNhY3Rpb24gdXR4OwotICAgIAorCiAKICAgICBwcml2YXRlIGZpbmFsIGludCBjdXN0b21lcklkID0gMTsKICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBjdXN0b21lck5hbWUgPSAiSm9lIFNtaXRoIjsKQEAgLTUwLDMxICs1MCwzMSBAQAogCiAKICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUGFyYW1zKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KSB7Ci0gICAgICB0cnkgewkKLQlpZiAocmVxdWVzdC5nZXRQYXJhbWV0ZXIoImNhc2UiKSAhPSBudWxsKSB7Ci0JICAgdGMgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiY2FzZSIpOwotCX0gCi0JcmV0dXJuIHRydWU7CisgICAgICB0cnkgeworICAgIGlmIChyZXF1ZXN0LmdldFBhcmFtZXRlcigiY2FzZSIpICE9IG51bGwpIHsKKyAgICAgICB0YyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJjYXNlIik7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewotCVN5c3RlbS5lcnIucHJpbnRsbigiRXhjZXB0aW9uIHdoZW4gcHJvY2Vzc2luZyB0aGUgcmVxdWVzdCBwYXJhbXMiKTsKLQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQlyZXR1cm4gZmFsc2U7CisgICAgU3lzdGVtLmVyci5wcmludGxuKCJFeGNlcHRpb24gd2hlbiBwcm9jZXNzaW5nIHRoZSByZXF1ZXN0IHBhcmFtcyIpOworICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogCi0gICAgfQkKKyAgICB9CiAKICAgICBwdWJsaWMgRW50aXR5TWFuYWdlciBnZXRFbnRpdHlNYW5hZ2VyKCkKICAgICB7Ci0JcmV0dXJuICBlbWYuY3JlYXRlRW50aXR5TWFuYWdlcigpOworICAgIHJldHVybiAgZW1mLmNyZWF0ZUVudGl0eU1hbmFnZXIoKTsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0SW5zZXJ0KCkgewogICAgICAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwogCi0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICB1dHguYmVnaW4oKTsKICAgICAgICAgLy9vdXQucHJpbnRsbigiY3JlYXRlRU0gIEVudGl0eU1hbmFnZXI9IiArIGVtKTsKLQllbSA9IGdldEVudGl0eU1hbmFnZXIoKTsKKyAgICBlbSA9IGdldEVudGl0eU1hbmFnZXIoKTsKICAgICAgICAgLy8gQ3JlYXRlIG5ldyBjdXN0b21lcgogICAgICAgICBDdXN0b21lciBjdXN0b21lcjAgPSBuZXcgQ3VzdG9tZXIoKTsKICAgICAgICAgY3VzdG9tZXIwLnNldElkKGN1c3RvbWVySWQpOwpAQCAtMTAyLDMxICsxMDIsMzEgQEAKIAogICAgICAgICBjdXN0b21lcjAuZ2V0T3JkZXJzKCkuYWRkKG9yZGVyMik7CiAgICAgICAgIG9yZGVyMi5zZXRDdXN0b21lcihjdXN0b21lcjApOwotCXV0eC5jb21taXQoKTsKKyAgICB1dHguY29tbWl0KCk7CiAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgIH1jYXRjaChFeGNlcHRpb24gZXgpewogICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgIH0gZmluYWxseSB7Ci0JaWYgKGVtICE9IG51bGwpIHsKLQkgICBlbS5jbG9zZSgpOwotCX0KLSAgICAgIH0JCisgICAgaWYgKGVtICE9IG51bGwpIHsKKyAgICAgICBlbS5jbG9zZSgpOworICAgIH0KKyAgICAgIH0KICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0RGVsZXRlKCkgewogICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICAgIHRyeSB7ICAKKyAgICAgIHRyeSB7CiAgICAgICAgIHV0eC5iZWdpbigpOwotCWVtID0gZ2V0RW50aXR5TWFuYWdlcigpOworICAgIGVtID0gZ2V0RW50aXR5TWFuYWdlcigpOwogICAgICAgICBDdXN0b21lciBjID0gZmluZEN1c3RvbWVyKGN1c3RvbWVyTmFtZSk7CiAgICAgICAgIEN1c3RvbWVyIGMwID0gZW0ubWVyZ2UoYyk7Ci0gICAgICAgIGVtLnJlbW92ZShjMCk7IAorICAgICAgICBlbS5yZW1vdmUoYzApOwogICAgICAgICB1dHguY29tbWl0KCk7CiAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCl7Ci0JZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICB9IGZpbmFsbHkgewogICAgICAgICBpZiAoZW0gIT0gbnVsbCkgewogICAgICAgICAgICBlbS5jbG9zZSgpOwpAQCAtMTM0LDEzICsxMzQsMTMgQEAKICAgICAgIH0KICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgCisKICAgICAgcHVibGljIGJvb2xlYW4gdmVyaWZ5SW5zZXJ0KCkgewogICAgICAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwogCi0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICBlbSA9IGdldEVudGl0eU1hbmFnZXIoKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkN1c3RvbWVyIG5hbWUgaW4gdmVyaWZ5SW5zZXJ0OiIrY3VzdG9tZXJOYW1lKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkN1c3RvbWVyIG5hbWUgaW4gdmVyaWZ5SW5zZXJ0OiIrY3VzdG9tZXJOYW1lKTsKICAgICAgICAgQ3VzdG9tZXIgYyA9IGZpbmRDdXN0b21lcihjdXN0b21lck5hbWUpOwogCiAgICAgICAgIENvbGxlY3Rpb248T3JkZXI+IG9yZGVycyA9IGMuZ2V0T3JkZXJzKCk7CkBAIC0xNTAsOSArMTUwLDkgQEAKICAgICAgICAgfQogICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICAgICB9IGZpbmFsbHkgewotCWlmIChlbSAhPSBudWxsKSB7CisgICAgaWYgKGVtICE9IG51bGwpIHsKICAgICAgICAgICAgZW0uY2xvc2UoKTsKLQkgICB9CisgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMTY1LDE0ICsxNjUsMTQgQEAKICAgICAgIFF1ZXJ5IHEgPSBlbS5jcmVhdGVRdWVyeSgic2VsZWN0IGMgZnJvbSBDdXN0b21lciBjIik7CiAgICAgICBMaXN0IHJlc3VsdHMgPSBxLmdldFJlc3VsdExpc3QoKTsKICAgICAgIGlmIChyZXN1bHRzID09IG51bGwgfHwgcmVzdWx0cy5zaXplKCkgIT0gMCkgewotCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVbmV4cGVjdGVkIG51bWJlciBvZiBjdXN0b21lcnMgYWZ0ZXIgZGVsZXRlIik7CisgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuZXhwZWN0ZWQgbnVtYmVyIG9mIGN1c3RvbWVycyBhZnRlciBkZWxldGUiKTsKICAgICAgIH0KIAogICAgICAgcSA9IGVtLmNyZWF0ZVF1ZXJ5KCJzZWxlY3QgbyBmcm9tIE9yZGVyIG8iKTsKICAgICAgIHJlc3VsdHMgPSBxLmdldFJlc3VsdExpc3QoKTsKIAogICAgICAgaWYgKHJlc3VsdHMgPT0gbnVsbCB8fCByZXN1bHRzLnNpemUoKSAhPSAwKSB7Ci0JdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuZXhwZWN0ZWQgbnVtYmVyIG9mIG9yZGVycyBhZnRlciBkZWxldGUiKTsKKyAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5leHBlY3RlZCBudW1iZXIgb2Ygb3JkZXJzIGFmdGVyIGRlbGV0ZSIpOwogICAgICAgfQogICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgfSBmaW5hbGx5IHsKQEAgLTE4OSw1ICsxODksNSBAQAogICAgICAgQ3VzdG9tZXIgYyA9IChDdXN0b21lcilxLmdldFNpbmdsZVJlc3VsdCgpOwogICAgICAgcmV0dXJuIGM7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnV2FyVGVzdDEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dXYXJUZXN0MS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGNhMjQyNGUuLjBkODIwNzggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dXYXJUZXN0MS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dXYXJUZXN0MS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1jbXAiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXBrZ1dhclRlc3QxIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1wa2dXYXJUZXN0MSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0icGVyc2lzdGVuY2UueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ1dhclRlc3QxL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dXYXJUZXN0MS9idWlsZC54bWwKaW5kZXggZjEwODA3MC4uZmI4ODAxMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ1dhclRlc3QxL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnV2FyVGVzdDEvYnVpbGQueG1sCkBAIC02NCw3ICs2NCw3IEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzcmMvd2ViIi8+CiAgICAgPC9hbnRjYWxsPgotPC90YXJnZXQ+IAorPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0icGtnLXB1IiBkZXBlbmRzPSJpbml0LWNvbW1vbixjb21waWxlIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtcHUtY29tbW9uIj4KQEAgLTgwLDEwICs4MCwxMCBAQAogICAgICAgICBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3RVdGlsLmphdmEiLz4KLSAgICA8amF2YWMgc3JjZGlyPSJzcmMvdGVzdCIgCisgICAgPGphdmFjIHNyY2Rpcj0ic3JjL3Rlc3QiCiAgICAgICAgIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgotCWNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCi0gICAgICAgIAkgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgorICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCisgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC05MiwxMSArOTIsMTEgQEAKIAogPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LldlYlRlc3QiIGZvcms9InRydWUiPgotCSAgPGFyZyB2YWx1ZT0iJHt0ZXN0c3VpdGUuaWR9Ii8+CisgICAgICA8YXJnIHZhbHVlPSIke3Rlc3RzdWl0ZS5pZH0iLz4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iLz4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIvPgotCSAgPGFyZyB2YWx1ZT0iJHt1cmxwYXR0ZXJufSIvPgorICAgICAgPGFyZyB2YWx1ZT0iJHt1cmxwYXR0ZXJufSIvPgogICAgICAgICAgIDxjbGFzc3BhdGg+CiAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ1dhclRlc3QxL3NyYy90ZXN0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dXYXJUZXN0MS9zcmMvdGVzdC9XZWJUZXN0LmphdmEKaW5kZXggZWYyYTlkNC4uZTBmZWZkZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ1dhclRlc3QxL3NyYy90ZXN0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnV2FyVGVzdDEvc3JjL3Rlc3QvV2ViVGVzdC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVc2FnZTogamF2YSBXZWJUZXN0IDxUZXN0U3VpdGVJRD4gPGhvc3Q+IDxwb3J0PiA8Y29udGV4dFJvb3Q+IDx1cmxQYXR0ZXJuPiAiICk7CiAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gCisKICAgICAgICAgdGVzdFN1aXRlSUQgPSBhcmdzWzBdOwogICAgICAgICBob3N0ID0gYXJnc1sxXTsKICAgICAgICAgcG9ydCA9IGFyZ3NbMl07CkBAIC01MSwyNCArNTEsMjQgQEAKICAgICAgICAgdXJsUGF0dGVybiA9IGFyZ3NbNF07CiAgICAgICAgIFRFU1RfTkFNRSA9IHRlc3RTdWl0ZUlEOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAgICAgICAgIHdlYlRlc3QuZG9UZXN0KCk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgCi0gICAgICAgIHRyeSB7IAotICAgICAgICAgICAgV2ViVGVzdFV0aWwgd3R1ID0gbmV3IFdlYlRlc3RVdGlsICggaG9zdCwgcG9ydCwgY29udGV4dFJvb3QsIHVybFBhdHRlcm4sIHRlc3RTdWl0ZUlELCBzdGF0KTsgCi0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlBlcnNpc3RlbmNlIFBha2NhZ2UgVGVzdCAiKTsKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFdlYlRlc3RVdGlsIHd0dSA9IG5ldyBXZWJUZXN0VXRpbCAoIGhvc3QsIHBvcnQsIGNvbnRleHRSb290LCB1cmxQYXR0ZXJuLCB0ZXN0U3VpdGVJRCwgc3RhdCk7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlBlcnNpc3RlbmNlIFBha2NhZ2UgVGVzdCAiKTsKICAgICAgICAgICAgIHd0dS50ZXN0KCJ0ZXN0SW5zZXJ0Iik7CiAgICAgICAgICAgICB3dHUudGVzdCgidmVyaWZ5SW5zZXJ0Iik7CiAgICAgICAgICAgICB3dHUudGVzdCgidGVzdERlbGV0ZSIpOwogICAgICAgICAgICAgd3R1LnRlc3QoInZlcmlmeURlbGV0ZSIpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dXYXJUZXN0MS9zcmMvd2ViL0pwYVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dXYXJUZXN0MS9zcmMvd2ViL0pwYVNlcnZsZXQuamF2YQppbmRleCA2ZmExNGVmLi43MzU4ZTdiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnV2FyVGVzdDEvc3JjL3dlYi9KcGFTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ1dhclRlc3QxL3NyYy93ZWIvSnBhU2VydmxldC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgcHJpdmF0ZSBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBlbWY7CiAgICAgcHJpdmF0ZSBFbnRpdHlNYW5hZ2VyIGVtOwogICAgIHByaXZhdGUgQFJlc291cmNlIFVzZXJUcmFuc2FjdGlvbiB1dHg7Ci0gICAgCisKIAogICAgIHByaXZhdGUgZmluYWwgaW50IGN1c3RvbWVySWQgPSAxOwogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGN1c3RvbWVyTmFtZSA9ICJKb2UgU21pdGgiOwpAQCAtNTEsMTYgKzUxLDE2IEBACiAKICAgICBwdWJsaWMgRW50aXR5TWFuYWdlciBnZXRFbnRpdHlNYW5hZ2VyKCkKICAgICB7Ci0JcmV0dXJuICBlbWYuY3JlYXRlRW50aXR5TWFuYWdlcigpOworICAgIHJldHVybiAgZW1mLmNyZWF0ZUVudGl0eU1hbmFnZXIoKTsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0SW5zZXJ0KCkgewogICAgICAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwogCi0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICB1dHguYmVnaW4oKTsKICAgICAgICAgLy9vdXQucHJpbnRsbigiY3JlYXRlRU0gIEVudGl0eU1hbmFnZXI9IiArIGVtKTsKLQllbSA9IGdldEVudGl0eU1hbmFnZXIoKTsKKyAgICBlbSA9IGdldEVudGl0eU1hbmFnZXIoKTsKICAgICAgICAgLy8gQ3JlYXRlIG5ldyBjdXN0b21lcgogICAgICAgICBDdXN0b21lciBjdXN0b21lcjAgPSBuZXcgQ3VzdG9tZXIoKTsKICAgICAgICAgY3VzdG9tZXIwLnNldElkKGN1c3RvbWVySWQpOwpAQCAtODgsMzEgKzg4LDMxIEBACiAKICAgICAgICAgY3VzdG9tZXIwLmdldE9yZGVycygpLmFkZChvcmRlcjIpOwogICAgICAgICBvcmRlcjIuc2V0Q3VzdG9tZXIoY3VzdG9tZXIwKTsKLQl1dHguY29tbWl0KCk7CisgICAgdXR4LmNvbW1pdCgpOwogICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICB9Y2F0Y2goRXhjZXB0aW9uIGV4KXsKICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICB9IGZpbmFsbHkgewotCWlmIChlbSAhPSBudWxsKSB7Ci0JICAgZW0uY2xvc2UoKTsKLQl9Ci0gICAgICB9CQorICAgIGlmIChlbSAhPSBudWxsKSB7CisgICAgICAgZW0uY2xvc2UoKTsKKyAgICB9CisgICAgICB9CiAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdERlbGV0ZSgpIHsKICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgICB0cnkgeyAgCisgICAgICB0cnkgewogICAgICAgICB1dHguYmVnaW4oKTsKLQllbSA9IGdldEVudGl0eU1hbmFnZXIoKTsKKyAgICBlbSA9IGdldEVudGl0eU1hbmFnZXIoKTsKICAgICAgICAgQ3VzdG9tZXIgYyA9IGZpbmRDdXN0b21lcihjdXN0b21lck5hbWUpOwogICAgICAgICBDdXN0b21lciBjMCA9IGVtLm1lcmdlKGMpOwotICAgICAgICBlbS5yZW1vdmUoYzApOyAKKyAgICAgICAgZW0ucmVtb3ZlKGMwKTsKICAgICAgICAgdXR4LmNvbW1pdCgpOwogICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpewotCWV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgaWYgKGVtICE9IG51bGwpIHsKICAgICAgICAgICAgZW0uY2xvc2UoKTsKQEAgLTEyMCwxMyArMTIwLDEzIEBACiAgICAgICB9CiAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgIAorCiAgICAgIHB1YmxpYyBib29sZWFuIHZlcmlmeUluc2VydCgpIHsKICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKIAotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgZW0gPSBnZXRFbnRpdHlNYW5hZ2VyKCk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJDdXN0b21lciBuYW1lIGluIHZlcmlmeUluc2VydDoiK2N1c3RvbWVyTmFtZSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDdXN0b21lciBuYW1lIGluIHZlcmlmeUluc2VydDoiK2N1c3RvbWVyTmFtZSk7CiAgICAgICAgIEN1c3RvbWVyIGMgPSBmaW5kQ3VzdG9tZXIoY3VzdG9tZXJOYW1lKTsKIAogICAgICAgICBDb2xsZWN0aW9uPE9yZGVyPiBvcmRlcnMgPSBjLmdldE9yZGVycygpOwpAQCAtMTM2LDkgKzEzNiw5IEBACiAgICAgICAgIH0KICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgfSBmaW5hbGx5IHsKLQlpZiAoZW0gIT0gbnVsbCkgeworICAgIGlmIChlbSAhPSBudWxsKSB7CiAgICAgICAgICAgIGVtLmNsb3NlKCk7Ci0JICAgfQorICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTE1MSwxNCArMTUxLDE0IEBACiAgICAgICBRdWVyeSBxID0gZW0uY3JlYXRlUXVlcnkoInNlbGVjdCBjIGZyb20gQ3VzdG9tZXIgYyIpOwogICAgICAgTGlzdCByZXN1bHRzID0gcS5nZXRSZXN1bHRMaXN0KCk7CiAgICAgICBpZiAocmVzdWx0cyA9PSBudWxsIHx8IHJlc3VsdHMuc2l6ZSgpICE9IDApIHsKLQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5leHBlY3RlZCBudW1iZXIgb2YgY3VzdG9tZXJzIGFmdGVyIGRlbGV0ZSIpOworICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVbmV4cGVjdGVkIG51bWJlciBvZiBjdXN0b21lcnMgYWZ0ZXIgZGVsZXRlIik7CiAgICAgICB9CiAKICAgICAgIHEgPSBlbS5jcmVhdGVRdWVyeSgic2VsZWN0IG8gZnJvbSBPcmRlciBvIik7CiAgICAgICByZXN1bHRzID0gcS5nZXRSZXN1bHRMaXN0KCk7CiAKICAgICAgIGlmIChyZXN1bHRzID09IG51bGwgfHwgcmVzdWx0cy5zaXplKCkgIT0gMCkgewotCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVbmV4cGVjdGVkIG51bWJlciBvZiBvcmRlcnMgYWZ0ZXIgZGVsZXRlIik7CisgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuZXhwZWN0ZWQgbnVtYmVyIG9mIG9yZGVycyBhZnRlciBkZWxldGUiKTsKICAgICAgIH0KICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgIH0gZmluYWxseSB7CkBAIC0xNzUsNSArMTc1LDUgQEAKICAgICAgIEN1c3RvbWVyIGMgPSAoQ3VzdG9tZXIpcS5nZXRTaW5nbGVSZXN1bHQoKTsKICAgICAgIHJldHVybiBjOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3JlcG9ydC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcmVwb3J0LnhtbAppbmRleCA2NWEzMmFlLi4wOTRlMzY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcmVwb3J0LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcmVwb3J0LnhtbApAQCAtMjMsNyArMjMsNyBAQAogPHRhcmdldCBuYW1lPSJyZXBvcnQiPgogPGVjaG8gbWVzc2FnZT0iQ29tcGFyaW5nIHJlc3VsdHMgd2l0aCBleHBlY3RlZCByZXN1bHRzIi8+CiAKLSAKKwogICAgIDx4c2x0IHN0eWxlPSIke3N0eWxlc2hlZXR9IgogICAgICAgICAgICAgaW49IiR7eG1sZmlsZX0iIG91dD0iJHtodG1sZmlsZX0iCiAgICAgICAgICAgICBiYXNlZGlyPSIuIiBkZXN0ZGlyPSIuIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdXRpbC9TZXJ2bGV0VXRpbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdXRpbC9TZXJ2bGV0VXRpbC5qYXZhCmluZGV4IDBkY2FiMTguLmZlYmY0ODkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3V0aWwvU2VydmxldFV0aWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS91dGlsL1NlcnZsZXRVdGlsLmphdmEKQEAgLTMwLDggKzMwLDggQEAKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5UeXBlOwogCiAvKiogU2VydmxldFV0aWwuamF2YQotICAqIFRoaXMgcHJvZ3JhbSBpcyBnZW5lcmljIHNlcnZsZXQgd2hpY2ggcHJvY2VzcyB0aGUgCi0gICogSFRUUCByZXF1ZXN0IGFuZCBpbnZva2UgdGhlIAorICAqIFRoaXMgcHJvZ3JhbSBpcyBnZW5lcmljIHNlcnZsZXQgd2hpY2ggcHJvY2VzcyB0aGUKKyAgKiBIVFRQIHJlcXVlc3QgYW5kIGludm9rZSB0aGUKICAgKiBwcm9wZXIgbWV0aG9kcyBiYXNlZCBvbiB0aGUgcmVxdWVzdCBwYXJhbWV0ZXJzLgogICAqCiAgICogQGF1dGhvciAgICAgIFNhcmFkYSBLb21tYWxhcGF0aQpAQCAtNDIsMjcgKzQyLDI3IEBACiAKICAgICBwdWJsaWMgU3RyaW5nIHRjOwogCi0gICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIAotCQkJIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCisgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsCisgICAgICAgICAgICAgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgcHJvY2Vzc0FjdGlvbihyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQotICAgIAotICAgIHByb3RlY3RlZCB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgCi0JCQkgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCisKKyAgICBwcm90ZWN0ZWQgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsCisgICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHByb2Nlc3NBY3Rpb24ocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NQYXJhbXMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpIHsKICAgICAgIHRyeSB7CiAgICAgICAgIGlmIChyZXF1ZXN0LmdldFBhcmFtZXRlcigiY2FzZSIpICE9IG51bGwpIHsKICAgICAgICAgICAgdGMgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiY2FzZSIpOwotCX0KLQlyZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CiAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRXhjZXB0aW9uIHdoZW4gcHJvY2Vzc2luZyB0aGUgcmVxdWVzdCBwYXJhbXMiKTsKLQlleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAKQEAgLTcwLDE4ICs3MCwxOCBAQAogCiAKICAgICBwdWJsaWMgdm9pZCBwcm9jZXNzQWN0aW9uKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LAotCQkJICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIAorICAgICAgICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgICB0aHJvd3MgSU9FeGNlcHRpb257Ci0gICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwcm9jZXNzaW5nIHRlc3QgZHJpdmVyIHJlcXVlc3QgLi4uICIpOwotICAgICAgICAKLQlwcm9jZXNzUGFyYW1zKHJlcXVlc3QpOworCisgICAgcHJvY2Vzc1BhcmFtcyhyZXF1ZXN0KTsKICAgICAgICAgYm9vbGVhbiBzdGF0dXMgPSBmYWxzZTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0YzoiK3RjKTsKIAogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9wbGFpbiIpOwogICAgICAgICBTZXJ2bGV0T3V0cHV0U3RyZWFtIG91dCA9IHJlc3BvbnNlLmdldE91dHB1dFN0cmVhbSgpOwotCW91dC5wcmludGxuKCJUZXN0Q2FzZTogIit0Yyk7ICAgCisgICAgb3V0LnByaW50bG4oIlRlc3RDYXNlOiAiK3RjKTsKIAogICAgICAgICBpZiAodGMgIT0gbnVsbCkgewogCkBAIC05NSwzNCArOTUsMzQgQEAKICAgICAgICAgICAgICAgICAgICBpZiAoICFtbmFtZS5lcXVhbHModGMudHJpbSgpICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0KLSAKKwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW52b2tpbmcgOiAiICsgbW5hbWUgKTsKICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIG0uc2V0QWNjZXNzaWJsZSggdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgT2JqZWN0IG8gPSBtLmludm9rZSggdCApOwogICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuZWQgPT4gIiArIChCb29sZWFuKW8gKTsKLQkJICAgc3RhdHVzID0gbmV3IEJvb2xlYW4oKEJvb2xlYW4pbykuYm9vbGVhblZhbHVlKCk7IAorICAgICAgICAgICBzdGF0dXMgPSBuZXcgQm9vbGVhbigoQm9vbGVhbilvKS5ib29sZWFuVmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAvL0hhbmRsZSBhbnkgbWV0aG9kcyB0aHJvd24gYnkgbWV0aG9kIHRvIGJlIGludm9rZWQKICAgICAgICAgICAgICAgICB9IGNhdGNoICggSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiB4ICkgewogICAgICAgICAgICAgICAgICAgIFRocm93YWJsZSBjYXVzZSA9IHguZ2V0Q2F1c2UoKTsKLSAKKwogICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIuZm9ybWF0KCJpbnZvY2F0aW9uIG9mICVzIGZhaWxlZDogJXMlbiIsIG1uYW1lLCBjYXVzZS5nZXRNZXNzYWdlKCkgKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIHggKSB7CiAgICAgICAgICAgICAgICB4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgfQotICAKKwogICAgICAgICAgICB9Ci0JICAgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHsKLQkgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkgeworICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgfQogCi0JICBpZiAoc3RhdHVzKSB7Ci0JICAgIG91dC5wcmludGxuKHRjKyI6cGFzcyIpOwotCSAgfSBlbHNlIHsKLQkgICAgb3V0LnByaW50bG4odGMrIjpmYWlsIik7Ci0JICB9CisgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIG91dC5wcmludGxuKHRjKyI6cGFzcyIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgb3V0LnByaW50bG4odGMrIjpmYWlsIik7CisgICAgICB9CiAKICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3V0aWwvV2ViVGVzdFV0aWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3V0aWwvV2ViVGVzdFV0aWwuamF2YQppbmRleCAxMWNhNjUwLi44MzFjNGNmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS91dGlsL1dlYlRlc3RVdGlsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdXRpbC9XZWJUZXN0VXRpbC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIC8qKiBXZWJUZXN0VXRpbC5qYXZhCi0gICogVGhpcyBwcm9ncmFtIG9wZW5zIEh0dHBVUkxjb25uZWN0aW9uLHNlbmRzIHRoZSByZXF1ZXN0IHRvIHRoZSAKKyAgKiBUaGlzIHByb2dyYW0gb3BlbnMgSHR0cFVSTGNvbm5lY3Rpb24sc2VuZHMgdGhlIHJlcXVlc3QgdG8gdGhlCiAgICogc2VydmxldCAsICYgcmVjZWl2ZXMgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZsZXQuCiAgICogVXNpbmcgY29tbWFuZGxpbmUgYXJncyB0aGUgdXNlciBjYW4gc3BlY2lmeSBmb3IgV2ViVGVzdFV0aWwKICAgKiAxLiB0ZXN0IHN1aXRlIG5hbWUKQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgdGhpcy51cmxQYXR0ZXJuID0gdXJsUGF0dGVybjsKICAgICAgICAgdGhpcy5zdGF0ID0gc3RhdDsKICAgICB9Ci0gICAgCisKIAogICAgIHB1YmxpYyB2b2lkIHRlc3QoIFN0cmluZyBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgIHRoaXMudGVzdCggYywgIiIpOwpAQCAtODQsMjEgKzg0LDIxIEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwotCSAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0JICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKKyAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOworICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigibGluZT0iK2xpbmUpOwotCSAgICAgIGlmIChsaW5lLmNvbnRhaW5zKEVYUEVDVEVEX1JFU1BPTlNFKSkgewotCQlzdGF0LmFkZFN0YXR1cyhURVNUX0NBU0UsIHN0YXQuUEFTUyk7Ci0JCWJyZWFrOwotCSAgICAgIH0KLQkgICAgfQotCSAgICAKLQkgICAgaWYgKGxpbmUgPT0gbnVsbCkgewotCSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5hYmxlIHRvIGZpbmQgIiArIEVYUEVDVEVEX1JFU1BPTlNFICsKLQkJCQkgICIgaW4gdGhlIHJlc3BvbnNlIik7Ci0JICAgIH0KLQkgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9DQVNFLCBzdGF0LkZBSUwpOwotICAgICAgICB9ICAgIAorICAgICAgICAgIGlmIChsaW5lLmNvbnRhaW5zKEVYUEVDVEVEX1JFU1BPTlNFKSkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX0NBU0UsIHN0YXQuUEFTUyk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChsaW5lID09IG51bGwpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuYWJsZSB0byBmaW5kICIgKyBFWFBFQ1RFRF9SRVNQT05TRSArCisgICAgICAgICAgICAgICAgICAiIGluIHRoZSByZXNwb25zZSIpOworICAgICAgICB9CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfQ0FTRSwgc3RhdC5GQUlMKTsKKyAgICAgICAgfQogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvYW55b25lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9hbnlvbmUvYnVpbGQucHJvcGVydGllcwppbmRleCA2MTExMjAzLi4yZmQ3Mjk5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9hbnlvbmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9hbnlvbmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHktYW55b25lIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvYW55b25lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2FueW9uZS9idWlsZC54bWwKaW5kZXggZWE0ZDk1My4uYTVmM2JjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvYW55b25lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9hbnlvbmUvYnVpbGQueG1sCkBAIC04OSw3ICs4OSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+IAorICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9ub253ZWIiLz4KQEAgLTEwMywzNiArMTAzLDM2IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L25vbndlYiIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiCiAgICAgICAgICAgICAgICAgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgICAgdmFsdWU9ImNvbS9zdW4vKiovY2xpZW50LyouY2xhc3MsY29tL3N1bi8qKi9lamIvSGVsbG8uY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0gICAgICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4gCi0gICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+Ci0gICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgotICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KLSAgICAgICAgICAgIDwvZmlsZXNldD4KLSAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotCSAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KLQkgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotICAgICAgICAgICAgPC9maWxlc2V0PgotICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0iIGluY2x1ZGVzPSJsaWIvcmVwb3J0ZXIuamFyIi8+Ci0gICAgICAgIDwvamFyPiAgIAotCi0gICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAorICAgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KLQkgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgorICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgotICAgICAgICA8L2phcj4gICAKKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiBpbmNsdWRlcz0ibGliL3JlcG9ydGVyLmphciIvPgorICAgICAgICA8L2phcj4KKworICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KKyAgICAgICAgICAgIDwvZmlsZXNldD4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgorICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgICAgICA8L2ZpbGVzZXQ+CisgICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2FueW9uZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9hbnlvbmUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDk0NWE4ZDIuLmY2MTRkYWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2FueW9uZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvYW55b25lL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgZGVzY3JpcHRpb24gPSB0ZXN0U3VpdGUgKyAiIGVqYjogaGVsbG8iOwogICAgICAgICAgICAgaGVsbG8uaGVsbG8oIlN1biIpOwotICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7ICAKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAKKwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgic2VjdXJpdHktYW55b25lIik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9hdXRoQ29uZi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9hdXRoQ29uZi9idWlsZC54bWwKaW5kZXggMGUxNjg2ZS4uNDc1NzgxYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvYXV0aENvbmYvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2F1dGhDb25mL2J1aWxkLnhtbApAQCAtMjksNyArMjksNyBAQAogICAgIGNoYW5nZWQgYXQgc3RhcnR1cC4gSXNzdWU6IDMwMzMuIElmIGNoYW5nZWQgdG8gdGVzdCBhbgogICAgIGVuZCB0byBlbmQgc2NlbmFyaW8sIHBsZWFzZSBjaGFuZ2UgdGhpcyBtZXNzYWdlLiAtLT4KIDxwcm9qZWN0IG5hbWU9InNlY3VyaXR5LWF1dGhDb25mIiBiYXNlZGlyPSIuIiBkZWZhdWx0PSJ1c2FnZSI+Ci0gIAorCiAgICZjb21tb25TZXR1cDsKICAgJmNvbW1vbkJ1aWxkOwogICAmY29tbW9uUnVuOwpAQCAtNDMsMTUgKzQzLDE1IEBACiAgICAgPCEtLSBzdG9wIHNlcnZlciAtLT4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0b3BEb21haW4iLz4KICAgICA8c2xlZXAgc2Vjb25kcz0iMTUiLz4KLSAgICAKKwogICAgIDwhLS0gYWRkIGF1dGguY29uZiBmaWxlIGFuZCBwcm92aWRlciBqYXIgLS0+CiAgICAgPGNvcHkgZmlsZT0iY29uZmZpbGUvYXV0aC5jb25mIgogICAgICAgICB0b2Rpcj0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1wcm92aWRlci1qYXIiLz4KLSAgICAKKwogICAgIDwhLS0gc3RhcnQgc2VydmVyIC0tPgogICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnREb21haW4iLz4KLSAgICAKKwogICAgIDwhLS0gcXVpY2sgZGlmZiBvZiBhdXRoIGNvbmYgZmlsZSAtLT4KICAgICA8bGVuZ3RoIGZpbGU9ImNvbmZmaWxlL2F1dGguY29uZiIgcHJvcGVydHk9Imxlbmd0aC5vcmlnaW5hbCIvPgogICAgIDxsZW5ndGggZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2F1dGguY29uZiIKQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgIDwvY29uZGl0aW9uPgogICAgIDwvZmFpbD4KICAgICA8ZWNobyBtZXNzYWdlPSJmaWxlcyBhcmUgb2Ygc2FtZSBsZW5ndGguIE9LIi8+Ci0gICAgCisKICAgICA8IS0tIHN0b3Agc2VydmVyLCBjbGVhbiB1cCwgYW5kIHJlc3RhcnQgLS0+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wRG9tYWluIi8+CiAgICAgPHNsZWVwIHNlY29uZHM9IjE1Ii8+CkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgPGRlbGV0ZSBmaWxlPSIke3Byb3ZpZGVyLmphcn0iLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0RG9tYWluIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8IS0tIGJ1aWxkIGFuZCBjb3B5IHRoZSBwcm92aWRlciBqYXIgZmlsZSB0byBHRi9saWIgLS0+CiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHJvdmlkZXItamFyIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CkBAIC04NSwxMCArODUsMTAgQEAKICAgICA8L2FudGNhbGw+CiAgICAgPGphciBkZXN0ZmlsZT0iJHtwcm92aWRlci5qYXJ9IiBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgIDxkZWxldGUgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgPC90YXJnZXQ+Ci0gIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9hdXRoQ29uZi9wcm92aWRlci9jb20vc3VuL3NlY3VyaXR5L2F1dGgvbWVzc2FnZS9jb25maWcvU2VydmxldEF1dGhDb25maWdQcm92aWRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvYXV0aENvbmYvcHJvdmlkZXIvY29tL3N1bi9zZWN1cml0eS9hdXRoL21lc3NhZ2UvY29uZmlnL1NlcnZsZXRBdXRoQ29uZmlnUHJvdmlkZXIuamF2YQppbmRleCAzM2ViMjBkLi4zMjAxNGZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9hdXRoQ29uZi9wcm92aWRlci9jb20vc3VuL3NlY3VyaXR5L2F1dGgvbWVzc2FnZS9jb25maWcvU2VydmxldEF1dGhDb25maWdQcm92aWRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2F1dGhDb25mL3Byb3ZpZGVyL2NvbS9zdW4vc2VjdXJpdHkvYXV0aC9tZXNzYWdlL2NvbmZpZy9TZXJ2bGV0QXV0aENvbmZpZ1Byb3ZpZGVyLmphdmEKQEAgLTMyLDMwICszMiwzMCBAQAogCiAvKioKICAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IG9iamVjdHMgdGhhdCBjYW4gYmUgdXNlZCB0byBvYnRhaW4KLSAqIGF1dGhlbnRpY2F0aW9uIGNvbnRleHQgY29uZmlndXJhdGlvbiBvYmplY3RzLCB0aGF0IGlzLCAKKyAqIGF1dGhlbnRpY2F0aW9uIGNvbnRleHQgY29uZmlndXJhdGlvbiBvYmplY3RzLCB0aGF0IGlzLAogICogPGNvZGU+Q2xpZW50QXV0aENvbmZpZzwvY29kZT4gb3IgPGNvZGU+U2VydmVyQXV0aENvbmZpZzwvY29kZT4gb2JqZWN0cy4KICAqCi0gKiA8cD4gQXV0aGVudGljYXRpb24gY29udGV4dCBjb25maWd1cmF0aW9uIG9iamVjdHMgc2VydmUgYXMgc291cmNlcyBvZiAKKyAqIDxwPiBBdXRoZW50aWNhdGlvbiBjb250ZXh0IGNvbmZpZ3VyYXRpb24gb2JqZWN0cyBzZXJ2ZSBhcyBzb3VyY2VzIG9mCiAgKiB0aGUgYXV0aGVudGljYXRpb24gY29udGV4dCBvYmplY3RzLCB0aGF0IGlzLCA8Y29kZT5DbGllbnRBdXRoQ29udGV4dDwvY29kZT4gb3IKICAqIDxjb2RlPlNlcnZlckF1dGhDb250ZXh0PC9jb2RlPiBvYmplY3RzLCBmb3IgYSBzcGVjaWZpYyBtZXNzYWdlIGxheWVyCiAgKiBhbmQgbWVzc2FnaW5nIGNvbnRleHQuCi0gKiAKLSAqIDxwPiBBdXRoZW50aWNhdGlvbiBjb250ZXh0IG9iamVjdHMgZW5jYXBzdWxhdGUgdGhlIGluaXRpYWxpemF0aW9uLCAKKyAqCisgKiA8cD4gQXV0aGVudGljYXRpb24gY29udGV4dCBvYmplY3RzIGVuY2Fwc3VsYXRlIHRoZSBpbml0aWFsaXphdGlvbiwKICAqIGNvbmZpZ3VyYXRpb24sIGFuZCBpbnZvY2F0aW9uIG9mIGF1dGhlbnRpY2F0aW9uIG1vZHVsZXMsIHRoYXQgaXMsCiAgKiA8Y29kZT5DbGllbnRBdXRoTW9kdWxlPC9jb2RlPiBvciA8Y29kZT5TZXJ2ZXJBdXRoTW9kdWxlPC9jb2RlPiBvYmplY3RzLCBmb3IKLSAqIGEgc3BlY2lmaWMgbWVzc2FnZSBleGNoYW5nZSB3aXRoaW4gYSBzcGVjaWZpYyBtZXNzYWdlIGxheWVyIGFuZCAKKyAqIGEgc3BlY2lmaWMgbWVzc2FnZSBleGNoYW5nZSB3aXRoaW4gYSBzcGVjaWZpYyBtZXNzYWdlIGxheWVyIGFuZAogICogbWVzc2FnaW5nIGNvbnRleHQuCi0gKiAKKyAqCiAgKiA8cD4gQ2FsbGVycyBkbyBub3QgZGlyZWN0bHkgb3BlcmF0ZSBvbiBhdXRoZW50aWNhdGlvbiBtb2R1bGVzLgogICogSW5zdGVhZCwgdGhleSByZWx5IG9uIGEgQ2xpZW50QXV0aENvbnRleHQgb3IgU2VydmVyQXV0aENvbnRleHQKICAqIHRvIG1hbmFnZSB0aGUgaW52b2NhdGlvbiBvZiBtb2R1bGVzLiBBIGNhbGxlciBvYnRhaW5zIGFuIGluc3RhbmNlCiAgKiBvZiBDbGllbnRBdXRoQ29udGV4dCBvciBTZXJ2ZXJBdXRoQ29udGV4dCBieSBjYWxsaW5nIHRoZSByZXNwZWN0aXZlCiAgKiA8Y29kZT5nZXRBdXRoQ29udGV4dDwvY29kZT4gbWV0aG9kIG9uIGEgPGNvZGU+Q2xpZW50QXV0aENvbmZpZzwvY29kZT4KLSAqIG9yIDxjb2RlPlNlcnZlckF1dGhDb25maWc8L2NvZGU+IG9iamVjdCBvYnRhaW5lZCBmcm9tIGFuIAorICogb3IgPGNvZGU+U2VydmVyQXV0aENvbmZpZzwvY29kZT4gb2JqZWN0IG9idGFpbmVkIGZyb20gYW4KICAqIEF1dGhDb25maWdQcm92aWRlci4KICAqCiAgKiA8cD4gVGhlIGZvbGxvd2luZyByZXByZXNlbnRzIGEgdHlwaWNhbCBzZXF1ZW5jZSBvZiBjYWxscyBmb3Igb2J0YWluaW5nCi0gKiBhIGNsaWVudCBhdXRoZW50aWNhdGlvbiBjb250ZXh0IG9iamVjdCwgYW5kIHRoZW4gdXNpbmcgaXQgdG8gc2VjdXJlIAorICogYSBjbGllbnQgYXV0aGVudGljYXRpb24gY29udGV4dCBvYmplY3QsIGFuZCB0aGVuIHVzaW5nIGl0IHRvIHNlY3VyZQogICogYSByZXF1ZXN0LgogICogPG9sPgogICogPGxpPkF1dGhDb25maWdQcm92aWRlciBwcm92aWRlcjsKQEAgLTcyLDE1ICs3MiwxNSBAQAogICogcHVibGljIEF1dGhDb25maWdQcm92aWRlckltcGwoTWFwIHByb3BlcnRpZXMsIEF1dGhDb25maWdGYWN0b3J5IGZhY3RvcnkpOwogICogPC9jb2RlPgogICo8L3ByZT4KLSAqIHdoZXJlIHRoZSBwcm9wZXJ0aWVzIGFyZ3VtZW50IG1heSBiZSBudWxsLCBhbmQgd2hlcmUgYWxsIHZhbHVlcyBhbmQgCisgKiB3aGVyZSB0aGUgcHJvcGVydGllcyBhcmd1bWVudCBtYXkgYmUgbnVsbCwgYW5kIHdoZXJlIGFsbCB2YWx1ZXMgYW5kCiAgKiBrZXlzIG9jY3VycmluZyBpbiBhIG5vbi1udWxsIHByb3BlcnRpZXMgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIFN0cmluZy4KICAqIFdoZW4gdGhlIGZhY3RvcnkgYXJndW1lbnQgaXMgbm90IG51bGwsIGl0IGluZGljYXRlcyB0aGF0IHRoZQogICogcHJvdmlkZXIgaXMgdG8gc2VsZi1yZWdpc3RlciBhdCB0aGUgZmFjdG9yeSBieSBjYWxsaW5nIHRoZSBmb2xsb3dpbmcKICAqIG1ldGhvZCBvbiB0aGUgZmFjdG9yeToKICAqIDxwcmU+CiAgKiA8Y29kZT4KLSAqIHB1YmxpYyBTdHJpbmcgCi0gKiByZWdpc3RlckNvbmZpZ1Byb3ZpZGVyKEF1dGhDb25maWdQcm92aWRlciBwcm92aWRlciwgU3RyaW5nIGxheWVyLCAKKyAqIHB1YmxpYyBTdHJpbmcKKyAqIHJlZ2lzdGVyQ29uZmlnUHJvdmlkZXIoQXV0aENvbmZpZ1Byb3ZpZGVyIHByb3ZpZGVyLCBTdHJpbmcgbGF5ZXIsCiAgKiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBhcHBDb250ZXh0LCBTdHJpbmcgZGVzY3JpcHRpb24pOwogICogPC9jb2RlPgogICogPC9wcmU+CkBAIC05Miw3ICs5Miw3IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBTZXJ2bGV0QXV0aENvbmZpZ1Byb3ZpZGVyIGltcGxlbWVudHMgQXV0aENvbmZpZ1Byb3ZpZGVyIHsKIAotICAgIHByaXZhdGUgc3RhdGljIFJlZW50cmFudFJlYWRXcml0ZUxvY2sgcndMb2NrID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgUmVlbnRyYW50UmVhZFdyaXRlTG9jayByd0xvY2sgPQogICAgICAgICBuZXcgUmVlbnRyYW50UmVhZFdyaXRlTG9jaygpOwogICAgIHByaXZhdGUgc3RhdGljIExvY2sgckxvY2sgPSByd0xvY2sucmVhZExvY2soKTs7CiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9jayB3TG9jayA9IHJ3TG9jay53cml0ZUxvY2soKTsKQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIEhhc2hNYXAgZGVmYXVsdEF1dGhDb25maWdNYXA7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSFRUUF9TRVJWTEVUX0xBWUVSID0gIkh0dHBTZXJ2bGV0IjsKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgTUFOREFUT1JZX0tFWSA9IAorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBNQU5EQVRPUllfS0VZID0KICAgICAgICAgImpha2FydGEuc2VjdXJpdHkuYXV0aC5tZXNzYWdlLk1lc3NhZ2VQb2xpY3kuaXNNYW5kYXRvcnkiOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIE1BTkRBVE9SWV9DT05URVhUX0lEID0gIm1hbmRhdG9yeSI7CkBAIC0xMDksNyArMTA5LDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBDT05URVhUU19LRVkgPSAiQXBwQ29udGV4dElEcyI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIE1PRFVMRV9LRVkgPSAiU2VydmVyQXV0aE1vZHVsZSI7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVmYXVsdE1vZHVsZSA9IG51bGw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgTWFwIGRlZmF1bHRNb2R1bGVPcHRpb25zID0gbnVsbDsKIApAQCAtMTIzLDE0OCArMTIzLDE0OCBAQAogICAgIHB1YmxpYyBTZXJ2bGV0QXV0aENvbmZpZ1Byb3ZpZGVyCiAgICAgICAgIChNYXAgcHJvcGVydGllcywgQXV0aENvbmZpZ0ZhY3RvcnkgZmFjdG9yeSkgdGhyb3dzIEF1dGhFeGNlcHRpb24gewogCi0JaWYgKHByb3BlcnRpZXMgPT0gbnVsbCkgewotCSAgICB0aHJvdyBuZXcgQXV0aEV4Y2VwdGlvbigicHJvcGVydGllcyByZXF1aXJlZCBmb3IgY29uc3RydWN0aW9uIik7Ci0JfQorICAgIGlmIChwcm9wZXJ0aWVzID09IG51bGwpIHsKKyAgICAgICAgdGhyb3cgbmV3IEF1dGhFeGNlcHRpb24oInByb3BlcnRpZXMgcmVxdWlyZWQgZm9yIGNvbnN0cnVjdGlvbiIpOworICAgIH0KIAotCVN0cmluZyBtb2R1bGUgPSAoU3RyaW5nKSBwcm9wZXJ0aWVzLmdldChNT0RVTEVfS0VZKTsKLQlpZiAobW9kdWxlID09IG51bGwpIHsKLQkgICAgdGhyb3cgbmV3IEF1dGhFeGNlcHRpb24oIlNlcnZlckF1dGhNb2R1bGUgcHJvcGVydHkgaXMgcmVxdWlyZWQiKTsKLQl9CisgICAgU3RyaW5nIG1vZHVsZSA9IChTdHJpbmcpIHByb3BlcnRpZXMuZ2V0KE1PRFVMRV9LRVkpOworICAgIGlmIChtb2R1bGUgPT0gbnVsbCkgeworICAgICAgICB0aHJvdyBuZXcgQXV0aEV4Y2VwdGlvbigiU2VydmVyQXV0aE1vZHVsZSBwcm9wZXJ0eSBpcyByZXF1aXJlZCIpOworICAgIH0KIAotCUhhc2hNYXAgb3B0aW9ucyA9IG5ldyBIYXNoTWFwKHByb3BlcnRpZXMpOwotCW9wdGlvbnMucmVtb3ZlKE1PRFVMRV9LRVkpOworICAgIEhhc2hNYXAgb3B0aW9ucyA9IG5ldyBIYXNoTWFwKHByb3BlcnRpZXMpOworICAgIG9wdGlvbnMucmVtb3ZlKE1PRFVMRV9LRVkpOwogCi0JU3RyaW5nW10gY29udGV4dElEID0gcGFyc2VTdHJpbmdWYWx1ZQotCSAgICAoKFN0cmluZykgcHJvcGVydGllcy5nZXQoQ09OVEVYVFNfS0VZKSk7Ci0JIAotCW9wdGlvbnMucmVtb3ZlKENPTlRFWFRTX0tFWSk7CisgICAgU3RyaW5nW10gY29udGV4dElEID0gcGFyc2VTdHJpbmdWYWx1ZQorICAgICAgICAoKFN0cmluZykgcHJvcGVydGllcy5nZXQoQ09OVEVYVFNfS0VZKSk7CiAKLQlTeXN0ZW0uZXJyLnByaW50bG4oImNvbnN0cnVjdGluZyBTZXJ2bGV0QXV0aENvbmZpZ1Byb3ZpZGVyOiAiICsKLQkJCSAgIG1vZHVsZSk7CisgICAgb3B0aW9ucy5yZW1vdmUoQ09OVEVYVFNfS0VZKTsKIAotCWlmIChjb250ZXh0SUQgIT0gbnVsbCkgewotCQkKLQkgICAgZm9yIChTdHJpbmcgYXBwQ29udGV4dCA6IGNvbnRleHRJRCkgeworICAgIFN5c3RlbS5lcnIucHJpbnRsbigiY29uc3RydWN0aW5nIFNlcnZsZXRBdXRoQ29uZmlnUHJvdmlkZXI6ICIgKworICAgICAgICAgICAgICAgbW9kdWxlKTsKIAotCQlTeXN0ZW0uZXJyLnByaW50bG4oImNvbnN0cnVjdGluZyBTZXJ2bGV0U2VydmVyQXV0aENvbmZpZzogIiArCi0JCQkgICBhcHBDb250ZXh0KTsKKyAgICBpZiAoY29udGV4dElEICE9IG51bGwpIHsKIAotCQlpZiAoYXBwQ29udGV4dCAhPSBudWxsICYmIGFwcENvbnRleHQubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgIGZvciAoU3RyaW5nIGFwcENvbnRleHQgOiBjb250ZXh0SUQpIHsKIAotCQkgICAgU2VydmVyQXV0aENvbmZpZyBzQUMgPSBuZXcgU2VydmxldFNlcnZlckF1dGhDb25maWcKLQkJCShhcHBDb250ZXh0LG1vZHVsZSxvcHRpb25zKTsKLQkJICAgIAotCQkgICAgdHJ5IHsKLQkJCXdMb2NrLmxvY2soKTsKLQkJCWF1dGhDb25maWdNYXAucHV0KGFwcENvbnRleHQsc0FDKTsKLQkJICAgIH0gZmluYWxseSB7Ci0JCQl3TG9jay51bmxvY2soKTsKLQkJICAgIH0KKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJjb25zdHJ1Y3RpbmcgU2VydmxldFNlcnZlckF1dGhDb25maWc6ICIgKworICAgICAgICAgICAgICAgYXBwQ29udGV4dCk7CiAKLQkJICAgIGlmIChmYWN0b3J5ICE9IG51bGwpIHsKLQkJCWZhY3RvcnkucmVnaXN0ZXJDb25maWdQcm92aWRlcgotCQkJICAgICh0aGlzLEhUVFBfU0VSVkxFVF9MQVlFUixhcHBDb250ZXh0LG1vZHVsZSk7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQotCX0gZWxzZSB7Ci0JICAgIC8vIHJlY29yZCBkZWZhdWx0cyB0byBoYW5kbGUgcmVnaXN0cmF0aW9uIGZvciBhbGwgYXBwY29udGV4dHMKLQkgICAgdHJ5IHsKLQkJd0xvY2subG9jaygpOwotCQlkZWZhdWx0TW9kdWxlID0gbW9kdWxlOwotCQlkZWZhdWx0TW9kdWxlT3B0aW9ucyA9IG9wdGlvbnM7Ci0JCWRlZmF1bHRBdXRoQ29uZmlnTWFwID0gbmV3IEhhc2hNYXAoKTsKLQkgICAgfSBmaW5hbGx5IHsKLQkJd0xvY2sudW5sb2NrKCk7Ci0JICAgIH0KLQl9CisgICAgICAgIGlmIChhcHBDb250ZXh0ICE9IG51bGwgJiYgYXBwQ29udGV4dC5sZW5ndGgoKSA+IDApIHsKKworICAgICAgICAgICAgU2VydmVyQXV0aENvbmZpZyBzQUMgPSBuZXcgU2VydmxldFNlcnZlckF1dGhDb25maWcKKyAgICAgICAgICAgIChhcHBDb250ZXh0LG1vZHVsZSxvcHRpb25zKTsKKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHdMb2NrLmxvY2soKTsKKyAgICAgICAgICAgIGF1dGhDb25maWdNYXAucHV0KGFwcENvbnRleHQsc0FDKTsKKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICB3TG9jay51bmxvY2soKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGZhY3RvcnkgIT0gbnVsbCkgeworICAgICAgICAgICAgZmFjdG9yeS5yZWdpc3RlckNvbmZpZ1Byb3ZpZGVyCisgICAgICAgICAgICAgICAgKHRoaXMsSFRUUF9TRVJWTEVUX0xBWUVSLGFwcENvbnRleHQsbW9kdWxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gcmVjb3JkIGRlZmF1bHRzIHRvIGhhbmRsZSByZWdpc3RyYXRpb24gZm9yIGFsbCBhcHBjb250ZXh0cworICAgICAgICB0cnkgeworICAgICAgICB3TG9jay5sb2NrKCk7CisgICAgICAgIGRlZmF1bHRNb2R1bGUgPSBtb2R1bGU7CisgICAgICAgIGRlZmF1bHRNb2R1bGVPcHRpb25zID0gb3B0aW9uczsKKyAgICAgICAgZGVmYXVsdEF1dGhDb25maWdNYXAgPSBuZXcgSGFzaE1hcCgpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICB3TG9jay51bmxvY2soKTsKKyAgICAgICAgfQorICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmdbXSBwYXJzZVN0cmluZ1ZhbHVlKFN0cmluZyB2YWx1ZSkgewotCVN0cmluZ1tdIHJ2YWx1ZSA9IG51bGw7Ci0JaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgIAotCSAgICAvLyByZW1vdmVkIGJsYW5rCisgICAgU3RyaW5nW10gcnZhbHVlID0gbnVsbDsKKyAgICBpZiAodmFsdWUgIT0gbnVsbCkgeworCisgICAgICAgIC8vIHJlbW92ZWQgYmxhbmsKICAgICAgICAgICAgIFN0cmluZyBkZWxpbSA9IG5ldyBTdHJpbmcoIjosOyIpOwotCSAgICBTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSxkZWxpbSk7Ci0JICAgIGludCBjb3VudCA9IHRva2VuaXplci5jb3VudFRva2VucygpOwotCSAgICBpZiAoY291bnQgPiAwKSB7Ci0JCXJ2YWx1ZSA9IG5ldyBTdHJpbmdbY291bnRdOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJICAgIHJ2YWx1ZVtpXSA9IHRva2VuaXplci5uZXh0VG9rZW4oKTsKLQkJfQotCSAgICB9Ci0JfQotCXJldHVybiBydmFsdWU7CisgICAgICAgIFN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZhbHVlLGRlbGltKTsKKyAgICAgICAgaW50IGNvdW50ID0gdG9rZW5pemVyLmNvdW50VG9rZW5zKCk7CisgICAgICAgIGlmIChjb3VudCA+IDApIHsKKyAgICAgICAgcnZhbHVlID0gbmV3IFN0cmluZ1tjb3VudF07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgcnZhbHVlW2ldID0gdG9rZW5pemVyLm5leHRUb2tlbigpOworICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJ2YWx1ZTsKICAgICB9CiAKICAgICBwdWJsaWMgQ2xpZW50QXV0aENvbmZpZyBnZXRDbGllbnRBdXRoQ29uZmlnCi0gICAgKFN0cmluZyBsYXllciwgU3RyaW5nIGFwcENvbnRleHQsIENhbGxiYWNrSGFuZGxlciBoYW5kbGVyKSAKLQl0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7Ci0JICAgIHRocm93IG5ldyBBdXRoRXhjZXB0aW9uKCJOb3QgaW1wbGVtZW50ZWQiKTsKKyAgICAoU3RyaW5nIGxheWVyLCBTdHJpbmcgYXBwQ29udGV4dCwgQ2FsbGJhY2tIYW5kbGVyIGhhbmRsZXIpCisgICAgdGhyb3dzIEF1dGhFeGNlcHRpb24geworICAgICAgICB0aHJvdyBuZXcgQXV0aEV4Y2VwdGlvbigiTm90IGltcGxlbWVudGVkIik7CiAgICAgfQogCi0gICAgcHVibGljIFNlcnZlckF1dGhDb25maWcgZ2V0U2VydmVyQXV0aENvbmZpZwkKLQkoU3RyaW5nIGxheWVyLCBTdHJpbmcgYXBwQ29udGV4dCwgQ2FsbGJhY2tIYW5kbGVyIGhhbmRsZXIpIAotCXRocm93cyBBdXRoRXhjZXB0aW9uIHsKKyAgICBwdWJsaWMgU2VydmVyQXV0aENvbmZpZyBnZXRTZXJ2ZXJBdXRoQ29uZmlnCisgICAgKFN0cmluZyBsYXllciwgU3RyaW5nIGFwcENvbnRleHQsIENhbGxiYWNrSGFuZGxlciBoYW5kbGVyKQorICAgIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKIAotCWlmICghSFRUUF9TRVJWTEVUX0xBWUVSLmVxdWFscyhsYXllcikpIHsKLQkgICAgdGhyb3cgbmV3IEF1dGhFeGNlcHRpb24oIkxheWVyIE5vdCBpbXBsZW1lbnRlZCIpOwotCX0KLQkJCi0JaWYgKGhhbmRsZXIgPT0gbnVsbCkgewotCSAgICB0aHJvdyBuZXcgQXV0aEV4Y2VwdGlvbigiZGVmYXVsdCBoYW5kbGVyIE5vdCBpbXBsZW1lbnRlZCIpOwotCX0KKyAgICBpZiAoIUhUVFBfU0VSVkxFVF9MQVlFUi5lcXVhbHMobGF5ZXIpKSB7CisgICAgICAgIHRocm93IG5ldyBBdXRoRXhjZXB0aW9uKCJMYXllciBOb3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9CiAKLQkvLyByZXVzZSBjb25maWcgZm9yIGEgZ2l2ZW4gbGF5ZXIgYW5kIGFwcGNvbnRleHQsIGhhbmRsZXIgd2lsbCBiZSAKLQkvLyBzZXQgb24gZmlyc3QgYWNjZXNzLgorICAgIGlmIChoYW5kbGVyID09IG51bGwpIHsKKyAgICAgICAgdGhyb3cgbmV3IEF1dGhFeGNlcHRpb24oImRlZmF1bHQgaGFuZGxlciBOb3QgaW1wbGVtZW50ZWQiKTsKKyAgICB9CiAKLQlTZXJ2bGV0U2VydmVyQXV0aENvbmZpZyBzU0FDID0gbnVsbDsKKyAgICAvLyByZXVzZSBjb25maWcgZm9yIGEgZ2l2ZW4gbGF5ZXIgYW5kIGFwcGNvbnRleHQsIGhhbmRsZXIgd2lsbCBiZQorICAgIC8vIHNldCBvbiBmaXJzdCBhY2Nlc3MuCiAKLQl0cnkgewotCSAgICByTG9jay5sb2NrKCk7Ci0JICAgIHNTQUMgPSAoU2VydmxldFNlcnZlckF1dGhDb25maWcpIAotCQlhdXRoQ29uZmlnTWFwLmdldChhcHBDb250ZXh0KTsKLQkgICAgaWYgKHNTQUMgPT0gbnVsbCkgewotCQlpZiAoZGVmYXVsdEF1dGhDb25maWdNYXAgIT0gbnVsbCkgewotCQkgICAgc1NBQyA9IChTZXJ2bGV0U2VydmVyQXV0aENvbmZpZykgCi0JCQlkZWZhdWx0QXV0aENvbmZpZ01hcC5nZXQoYXBwQ29udGV4dCk7Ci0JCX0KLQkgICAgfQotCSAgICBpZiAoc1NBQyAhPSBudWxsKSB7Ci0JCXNTQUMuc2V0SGFuZGxlcklmTm90U2V0KGhhbmRsZXIpOwotCSAgICB9Ci0JfSBmaW5hbGx5IHsKLQkgICAgckxvY2sudW5sb2NrKCk7Ci0JfQorICAgIFNlcnZsZXRTZXJ2ZXJBdXRoQ29uZmlnIHNTQUMgPSBudWxsOwogCi0JaWYgKHNTQUMgPT0gbnVsbCkgewotCSAgICB0cnkgewotCQl3TG9jay5sb2NrKCk7Ci0JCWlmIChkZWZhdWx0QXV0aENvbmZpZ01hcCAhPSBudWxsKSB7Ci0JCSAgICBzU0FDID0gKFNlcnZsZXRTZXJ2ZXJBdXRoQ29uZmlnKSAKLQkJCWRlZmF1bHRBdXRoQ29uZmlnTWFwLmdldChhcHBDb250ZXh0KTsKLQkJfQotCQlpZiAoc1NBQyA9PSBudWxsKSB7Ci0JCSAgICBzU0FDID0gbmV3IFNlcnZsZXRTZXJ2ZXJBdXRoQ29uZmlnCi0JCQkoYXBwQ29udGV4dCxkZWZhdWx0TW9kdWxlLGRlZmF1bHRNb2R1bGVPcHRpb25zKTsKLQkJICAgIGRlZmF1bHRBdXRoQ29uZmlnTWFwLnB1dChhcHBDb250ZXh0LHNTQUMpOwotCQl9Ci0JICAgIH0gZmluYWxseSB7Ci0JCXJMb2NrLnVubG9jaygpOwotCSAgICB9Ci0JICAgIGlmIChzU0FDICE9IG51bGwpIHsKLQkJc1NBQy5zZXRIYW5kbGVySWZOb3RTZXQoaGFuZGxlcik7Ci0JICAgIH0KLQl9CisgICAgdHJ5IHsKKyAgICAgICAgckxvY2subG9jaygpOworICAgICAgICBzU0FDID0gKFNlcnZsZXRTZXJ2ZXJBdXRoQ29uZmlnKQorICAgICAgICBhdXRoQ29uZmlnTWFwLmdldChhcHBDb250ZXh0KTsKKyAgICAgICAgaWYgKHNTQUMgPT0gbnVsbCkgeworICAgICAgICBpZiAoZGVmYXVsdEF1dGhDb25maWdNYXAgIT0gbnVsbCkgeworICAgICAgICAgICAgc1NBQyA9IChTZXJ2bGV0U2VydmVyQXV0aENvbmZpZykKKyAgICAgICAgICAgIGRlZmF1bHRBdXRoQ29uZmlnTWFwLmdldChhcHBDb250ZXh0KTsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChzU0FDICE9IG51bGwpIHsKKyAgICAgICAgc1NBQy5zZXRIYW5kbGVySWZOb3RTZXQoaGFuZGxlcik7CisgICAgICAgIH0KKyAgICB9IGZpbmFsbHkgeworICAgICAgICByTG9jay51bmxvY2soKTsKKyAgICB9CiAKLQlpZiAoc1NBQyA9PSBudWxsKSB7Ci0JICAgIHRocm93IG5ldyBBdXRoRXhjZXB0aW9uKCJjb250ZXh0OiAiICsgYXBwQ29udGV4dCArIAotCQkJCSAgICAiIG5vdCBjb25maWd1cmVkIik7Ci0JfQorICAgIGlmIChzU0FDID09IG51bGwpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgd0xvY2subG9jaygpOworICAgICAgICBpZiAoZGVmYXVsdEF1dGhDb25maWdNYXAgIT0gbnVsbCkgeworICAgICAgICAgICAgc1NBQyA9IChTZXJ2bGV0U2VydmVyQXV0aENvbmZpZykKKyAgICAgICAgICAgIGRlZmF1bHRBdXRoQ29uZmlnTWFwLmdldChhcHBDb250ZXh0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc1NBQyA9PSBudWxsKSB7CisgICAgICAgICAgICBzU0FDID0gbmV3IFNlcnZsZXRTZXJ2ZXJBdXRoQ29uZmlnCisgICAgICAgICAgICAoYXBwQ29udGV4dCxkZWZhdWx0TW9kdWxlLGRlZmF1bHRNb2R1bGVPcHRpb25zKTsKKyAgICAgICAgICAgIGRlZmF1bHRBdXRoQ29uZmlnTWFwLnB1dChhcHBDb250ZXh0LHNTQUMpOworICAgICAgICB9CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgIHJMb2NrLnVubG9jaygpOworICAgICAgICB9CisgICAgICAgIGlmIChzU0FDICE9IG51bGwpIHsKKyAgICAgICAgc1NBQy5zZXRIYW5kbGVySWZOb3RTZXQoaGFuZGxlcik7CisgICAgICAgIH0KKyAgICB9CiAKLQlyZXR1cm4gc1NBQzsKKyAgICBpZiAoc1NBQyA9PSBudWxsKSB7CisgICAgICAgIHRocm93IG5ldyBBdXRoRXhjZXB0aW9uKCJjb250ZXh0OiAiICsgYXBwQ29udGV4dCArCisgICAgICAgICAgICAgICAgICAgICIgbm90IGNvbmZpZ3VyZWQiKTsKKyAgICB9CisKKyAgICByZXR1cm4gc1NBQzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCByZWZyZXNoKCkgewpAQCAtMjcyLDIxNCArMjcyLDIxNCBAQAogCiAgICAgc3RhdGljIGNsYXNzIFNlcnZsZXRTZXJ2ZXJBdXRoQ29uZmlnIGltcGxlbWVudHMgU2VydmVyQXV0aENvbmZpZyB7CiAKLQlzdGF0aWMgZmluYWwgQ2xhc3NbXSBQQVJBTVMgPSB7IH07Ci0Jc3RhdGljIGZpbmFsIE9iamVjdFtdIEFSR1MgPSB7IH07CisgICAgc3RhdGljIGZpbmFsIENsYXNzW10gUEFSQU1TID0geyB9OworICAgIHN0YXRpYyBmaW5hbCBPYmplY3RbXSBBUkdTID0geyB9OwogCi0JTG9jayByTG9ja0NvbmZpZzsKLQlMb2NrIHdMb2NrQ29uZmlnOworICAgIExvY2sgckxvY2tDb25maWc7CisgICAgTG9jayB3TG9ja0NvbmZpZzsKIAotCVN0cmluZyBhcHBDb250ZXh0OwotCUNhbGxiYWNrSGFuZGxlciBjYmg7CisgICAgU3RyaW5nIGFwcENvbnRleHQ7CisgICAgQ2FsbGJhY2tIYW5kbGVyIGNiaDsKIAotCVNlcnZlckF1dGhNb2R1bGUgbW9kdWxlc1tdID0gbnVsbDsKKyAgICBTZXJ2ZXJBdXRoTW9kdWxlIG1vZHVsZXNbXSA9IG51bGw7CiAKLQlTZXJ2ZXJBdXRoQ29udGV4dCBtYW5kYXRvcnlDb250ZXh0OwotCVNlcnZlckF1dGhDb250ZXh0IG9wdGlvbmFsQ29udGV4dDsKKyAgICBTZXJ2ZXJBdXRoQ29udGV4dCBtYW5kYXRvcnlDb250ZXh0OworICAgIFNlcnZlckF1dGhDb250ZXh0IG9wdGlvbmFsQ29udGV4dDsKIAotCU1hcCBvcHRpb25zOworICAgIE1hcCBvcHRpb25zOwogCi0Jc3RhdGljIE1lc3NhZ2VQb2xpY3kgbWFuZGF0b3J5UG9saWN5ID0gbmV3IE1lc3NhZ2VQb2xpY3kKLQkgKCBuZXcgTWVzc2FnZVBvbGljeS5UYXJnZXRQb2xpY3lbXSAKLQkgICB7IG5ldyBNZXNzYWdlUG9saWN5LlRhcmdldFBvbGljeQotCQkgKCAoTWVzc2FnZVBvbGljeS5UYXJnZXRbXSkgbnVsbCwgCi0JCSAgIG5ldyBTZXJ2bGV0UHJvdGVjdGlvblBvbGljeSgpKSB9ICwgdHJ1ZSk7CisgICAgc3RhdGljIE1lc3NhZ2VQb2xpY3kgbWFuZGF0b3J5UG9saWN5ID0gbmV3IE1lc3NhZ2VQb2xpY3kKKyAgICAgKCBuZXcgTWVzc2FnZVBvbGljeS5UYXJnZXRQb2xpY3lbXQorICAgICAgIHsgbmV3IE1lc3NhZ2VQb2xpY3kuVGFyZ2V0UG9saWN5CisgICAgICAgICAoIChNZXNzYWdlUG9saWN5LlRhcmdldFtdKSBudWxsLAorICAgICAgICAgICBuZXcgU2VydmxldFByb3RlY3Rpb25Qb2xpY3koKSkgfSAsIHRydWUpOwogCi0Jc3RhdGljIE1lc3NhZ2VQb2xpY3kgb3B0aW9uYWxQb2xpY3kgPSBuZXcgTWVzc2FnZVBvbGljeQotCSAoIG5ldyBNZXNzYWdlUG9saWN5LlRhcmdldFBvbGljeVtdIAotCSAgIHsgbmV3IE1lc3NhZ2VQb2xpY3kuVGFyZ2V0UG9saWN5Ci0JCSAoKE1lc3NhZ2VQb2xpY3kuVGFyZ2V0W10pIG51bGwsIAotCQkgIG5ldyBTZXJ2bGV0UHJvdGVjdGlvblBvbGljeSgpKSB9LCBmYWxzZSk7Ci0gCi0JU2VydmxldFNlcnZlckF1dGhDb25maWcgKFN0cmluZyBhcHBDb250ZXh0LAotCSAgICBmaW5hbCBTdHJpbmcgY2xhenosIE1hcCBvcHRpb25zKSB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CisgICAgc3RhdGljIE1lc3NhZ2VQb2xpY3kgb3B0aW9uYWxQb2xpY3kgPSBuZXcgTWVzc2FnZVBvbGljeQorICAgICAoIG5ldyBNZXNzYWdlUG9saWN5LlRhcmdldFBvbGljeVtdCisgICAgICAgeyBuZXcgTWVzc2FnZVBvbGljeS5UYXJnZXRQb2xpY3kKKyAgICAgICAgICgoTWVzc2FnZVBvbGljeS5UYXJnZXRbXSkgbnVsbCwKKyAgICAgICAgICBuZXcgU2VydmxldFByb3RlY3Rpb25Qb2xpY3koKSkgfSwgZmFsc2UpOwogCi0JICAgIFJlZW50cmFudFJlYWRXcml0ZUxvY2sgcndMb2NrID0gbmV3IFJlZW50cmFudFJlYWRXcml0ZUxvY2soKTsKLQkgICAgckxvY2tDb25maWcgPSByd0xvY2sucmVhZExvY2soKTs7Ci0JICAgIHdMb2NrQ29uZmlnID0gcndMb2NrLndyaXRlTG9jaygpOworICAgIFNlcnZsZXRTZXJ2ZXJBdXRoQ29uZmlnIChTdHJpbmcgYXBwQ29udGV4dCwKKyAgICAgICAgZmluYWwgU3RyaW5nIGNsYXp6LCBNYXAgb3B0aW9ucykgdGhyb3dzIEF1dGhFeGNlcHRpb24gewogCi0JICAgIHRoaXMuYXBwQ29udGV4dCA9IGFwcENvbnRleHQ7Ci0JICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CisgICAgICAgIFJlZW50cmFudFJlYWRXcml0ZUxvY2sgcndMb2NrID0gbmV3IFJlZW50cmFudFJlYWRXcml0ZUxvY2soKTsKKyAgICAgICAgckxvY2tDb25maWcgPSByd0xvY2sucmVhZExvY2soKTs7CisgICAgICAgIHdMb2NrQ29uZmlnID0gcndMb2NrLndyaXRlTG9jaygpOwogCi0JICAgIHRyeSB7CisgICAgICAgIHRoaXMuYXBwQ29udGV4dCA9IGFwcENvbnRleHQ7CisgICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CiAKLQkJbW9kdWxlcyAgPSAoU2VydmVyQXV0aE1vZHVsZVtdKSBBY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZAorICAgICAgICB0cnkgewogCi0JCShuZXcgamF2YS5zZWN1cml0eS5Qcml2aWxlZ2VkRXhjZXB0aW9uQWN0aW9uKCkgewotCQkgICAgCi0JCSAgICBwdWJsaWMgT2JqZWN0IHJ1bigpIHRocm93cyAKKyAgICAgICAgbW9kdWxlcyAgPSAoU2VydmVyQXV0aE1vZHVsZVtdKSBBY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZAogCi0JCQlqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiwKLQkJCWphdmEubGFuZy5Ob1N1Y2hNZXRob2RFeGNlcHRpb24sCi0JCQlqYXZhLmxhbmcuSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiwKLQkJCWphdmEubGFuZy5JbGxlZ2FsQWNjZXNzRXhjZXB0aW9uLAotCQkJamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiB7CisgICAgICAgIChuZXcgamF2YS5zZWN1cml0eS5Qcml2aWxlZ2VkRXhjZXB0aW9uQWN0aW9uKCkgewogCi0JCQlDbGFzc0xvYWRlciBsb2FkZXIgPSAKLQkJCSAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpOworICAgICAgICAgICAgcHVibGljIE9iamVjdCBydW4oKSB0aHJvd3MKIAotCQkJQ2xhc3MgYyA9IENsYXNzLmZvck5hbWUoY2xhenosIHRydWUsIGxvYWRlcik7CisgICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiwKKyAgICAgICAgICAgIGphdmEubGFuZy5Ob1N1Y2hNZXRob2RFeGNlcHRpb24sCisgICAgICAgICAgICBqYXZhLmxhbmcuSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiwKKyAgICAgICAgICAgIGphdmEubGFuZy5JbGxlZ2FsQWNjZXNzRXhjZXB0aW9uLAorICAgICAgICAgICAgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiB7CiAKLQkJCWphdmEubGFuZy5yZWZsZWN0LkNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yID0KLQkJCSAgICBjLmdldENvbnN0cnVjdG9yKFBBUkFNUyk7CisgICAgICAgICAgICBDbGFzc0xvYWRlciBsb2FkZXIgPQorICAgICAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7CiAKLQkJCXJldHVybiBuZXcgU2VydmVyQXV0aE1vZHVsZVtdIAotCQkJICAgIHsgKFNlcnZlckF1dGhNb2R1bGUpIGNvbnN0cnVjdG9yLm5ld0luc3RhbmNlKEFSR1MpLAotCQkJICAgICAgKFNlcnZlckF1dGhNb2R1bGUpIGNvbnN0cnVjdG9yLm5ld0luc3RhbmNlKEFSR1MpCi0JCQkgICAgfTsKLQkJICAgIH0KLQkJICAgIAotCQl9KTsKLQkJCi0JICAgIH0gY2F0Y2ggKGphdmEuc2VjdXJpdHkuUHJpdmlsZWdlZEFjdGlvbkV4Y2VwdGlvbiBwYWUpIHsKLQkJQXV0aEV4Y2VwdGlvbiBhZSA9IG5ldyBBdXRoRXhjZXB0aW9uKCk7Ci0JCWFlLmluaXRDYXVzZShwYWUuZ2V0Q2F1c2UoKSk7Ci0JCXRocm93IGFlOwotCSAgICB9IAorICAgICAgICAgICAgQ2xhc3MgYyA9IENsYXNzLmZvck5hbWUoY2xhenosIHRydWUsIGxvYWRlcik7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJjcmVhdGVkIFNlcnZsZXRTZXJ2ZXJBdXRoQ29uZmlnOiAiICsgCi0JCQkgICAgICAgYXBwQ29udGV4dCArICIgIiArIGNsYXp6KTsKKyAgICAgICAgICAgIGphdmEubGFuZy5yZWZsZWN0LkNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yID0KKyAgICAgICAgICAgICAgICBjLmdldENvbnN0cnVjdG9yKFBBUkFNUyk7CiAKLQkgICAgbWFuZGF0b3J5Q29udGV4dCA9IG51bGw7Ci0JICAgIG9wdGlvbmFsQ29udGV4dCA9IG51bGw7Ci0JfQorICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXJ2ZXJBdXRoTW9kdWxlW10KKyAgICAgICAgICAgICAgICB7IChTZXJ2ZXJBdXRoTW9kdWxlKSBjb25zdHJ1Y3Rvci5uZXdJbnN0YW5jZShBUkdTKSwKKyAgICAgICAgICAgICAgICAgIChTZXJ2ZXJBdXRoTW9kdWxlKSBjb25zdHJ1Y3Rvci5uZXdJbnN0YW5jZShBUkdTKQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CiAKLQlwdWJsaWMgU2VydmVyQXV0aENvbnRleHQgCi0JZ2V0QXV0aENvbnRleHQoU3RyaW5nIGF1dGhDb250ZXh0SUQsIFN1YmplY3Qgc2VydmljZVN1YmplY3QsIAotCQkgICAgICAgTWFwIHByb3BlcnRpZXMpIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKKyAgICAgICAgfSk7CiAKLQkgICAgYm9vbGVhbiBtYW5kYXRvcnkgPSBmYWxzZTsKLQkgICAgaWYgKE1BTkRBVE9SWV9DT05URVhUX0lELmVxdWFscyhhdXRoQ29udGV4dElEKSkgewotCQltYW5kYXRvcnkgPSB0cnVlOwotCSAgICB9IGVsc2UgaWYgKCFPUFRJT05BTF9DT05URVhUX0lELmVxdWFscyhhdXRoQ29udGV4dElEKSkgewotCQl0aHJvdyBuZXcgQXV0aEV4Y2VwdGlvbigiaW52YWxpZCBBdXRoQ29udGV4dCBJRCIpOwotCSAgICB9CisgICAgICAgIH0gY2F0Y2ggKGphdmEuc2VjdXJpdHkuUHJpdmlsZWdlZEFjdGlvbkV4Y2VwdGlvbiBwYWUpIHsKKyAgICAgICAgQXV0aEV4Y2VwdGlvbiBhZSA9IG5ldyBBdXRoRXhjZXB0aW9uKCk7CisgICAgICAgIGFlLmluaXRDYXVzZShwYWUuZ2V0Q2F1c2UoKSk7CisgICAgICAgIHRocm93IGFlOworICAgICAgICB9CiAKLQkgICAgU2VydmVyQXV0aENvbnRleHQgcnZhbHVlID0gbnVsbDsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjcmVhdGVkIFNlcnZsZXRTZXJ2ZXJBdXRoQ29uZmlnOiAiICsKKyAgICAgICAgICAgICAgICAgICBhcHBDb250ZXh0ICsgIiAiICsgY2xhenopOwogCi0JICAgIHRyeSB7Ci0JCXJMb2NrQ29uZmlnLmxvY2soKTsKLQkJaWYgKG1hbmRhdG9yeSkgewotCQkgICAgcnZhbHVlID0gbWFuZGF0b3J5Q29udGV4dDsKLQkJfSBlbHNlIHsKLQkJICAgIHJ2YWx1ZSA9IG9wdGlvbmFsQ29udGV4dDsKLQkJfQotCSAgICB9IGZpbmFsbHkgewotCQlyTG9ja0NvbmZpZy51bmxvY2soKTsKLQkgICAgfQotCSAgICBpZiAocnZhbHVlID09IG51bGwpIHsKLQkJdHJ5IHsKLQkJICAgIHdMb2NrQ29uZmlnLmxvY2soKTsKLQkJICAgIGlmIChvcHRpb25zICE9IG51bGwgJiYgcHJvcGVydGllcyAhPSBudWxsKSB7Ci0JCQlwcm9wZXJ0aWVzID0gbmV3IEhhc2hNYXAocHJvcGVydGllcyk7Ci0JCQlwcm9wZXJ0aWVzLnB1dEFsbChvcHRpb25zKTsKLQkJICAgIH0KLQkJICAgIAotCQkgICAgaWYgKG1hbmRhdG9yeSkgewotCQkJbWFuZGF0b3J5Q29udGV4dCA9IG5ldyBTZXJ2bGV0U2VydmVyQXV0aENvbnRleHQKLQkJCSAgICAobW9kdWxlc1sxXSxtYW5kYXRvcnlQb2xpY3ksY2JoLHByb3BlcnRpZXMpOwotCQkJcnZhbHVlID0gbWFuZGF0b3J5Q29udGV4dDsKLQkJICAgIH0gZWxzZSB7Ci0JCQlvcHRpb25hbENvbnRleHQgPSBuZXcgU2VydmxldFNlcnZlckF1dGhDb250ZXh0Ci0JCQkgICAgKG1vZHVsZXNbMF0sb3B0aW9uYWxQb2xpY3ksY2JoLHByb3BlcnRpZXMpOwotCQkJcnZhbHVlID0gb3B0aW9uYWxDb250ZXh0OwotCQkgICAgfQotCQl9IGZpbmFsbHkgewotCQkgICAgd0xvY2tDb25maWcudW5sb2NrKCk7Ci0JCX0KLQkgICAgfSAKLQkgICAgcmV0dXJuIHJ2YWx1ZTsKLQl9CisgICAgICAgIG1hbmRhdG9yeUNvbnRleHQgPSBudWxsOworICAgICAgICBvcHRpb25hbENvbnRleHQgPSBudWxsOworICAgIH0KIAotCXB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZUxheWVyKCkgewotCSAgICByZXR1cm4gSFRUUF9TRVJWTEVUX0xBWUVSOwotCX0KKyAgICBwdWJsaWMgU2VydmVyQXV0aENvbnRleHQKKyAgICBnZXRBdXRoQ29udGV4dChTdHJpbmcgYXV0aENvbnRleHRJRCwgU3ViamVjdCBzZXJ2aWNlU3ViamVjdCwKKyAgICAgICAgICAgICAgIE1hcCBwcm9wZXJ0aWVzKSB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CiAKLQlwdWJsaWMgU3RyaW5nIGdldEFwcENvbnRleHQoKSB7Ci0JICAgIHJldHVybiB0aGlzLmFwcENvbnRleHQ7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0QXV0aENvbnRleHRJRChNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbykgewotCSAgICBpZiAobWVzc2FnZUluZm8uZ2V0TWFwKCkuY29udGFpbnNLZXkoTUFOREFUT1JZX0tFWSkpIHsKLQkJcmV0dXJuIE1BTkRBVE9SWV9DT05URVhUX0lEOwotCSAgICB9IGVsc2UgewotCQlyZXR1cm4gT1BUSU9OQUxfQ09OVEVYVF9JRDsKLQkgICAgfQotCX0KKyAgICAgICAgYm9vbGVhbiBtYW5kYXRvcnkgPSBmYWxzZTsKKyAgICAgICAgaWYgKE1BTkRBVE9SWV9DT05URVhUX0lELmVxdWFscyhhdXRoQ29udGV4dElEKSkgeworICAgICAgICBtYW5kYXRvcnkgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKCFPUFRJT05BTF9DT05URVhUX0lELmVxdWFscyhhdXRoQ29udGV4dElEKSkgeworICAgICAgICB0aHJvdyBuZXcgQXV0aEV4Y2VwdGlvbigiaW52YWxpZCBBdXRoQ29udGV4dCBJRCIpOworICAgICAgICB9CiAKLQlwdWJsaWMgdm9pZCByZWZyZXNoKCkgewotCX0KKyAgICAgICAgU2VydmVyQXV0aENvbnRleHQgcnZhbHVlID0gbnVsbDsKIAotCXB1YmxpYyBib29sZWFuIGlzUHJvdGVjdGVkKCkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9CisgICAgICAgIHRyeSB7CisgICAgICAgIHJMb2NrQ29uZmlnLmxvY2soKTsKKyAgICAgICAgaWYgKG1hbmRhdG9yeSkgeworICAgICAgICAgICAgcnZhbHVlID0gbWFuZGF0b3J5Q29udGV4dDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJ2YWx1ZSA9IG9wdGlvbmFsQ29udGV4dDsKKyAgICAgICAgfQorICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICByTG9ja0NvbmZpZy51bmxvY2soKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocnZhbHVlID09IG51bGwpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHdMb2NrQ29uZmlnLmxvY2soKTsKKyAgICAgICAgICAgIGlmIChvcHRpb25zICE9IG51bGwgJiYgcHJvcGVydGllcyAhPSBudWxsKSB7CisgICAgICAgICAgICBwcm9wZXJ0aWVzID0gbmV3IEhhc2hNYXAocHJvcGVydGllcyk7CisgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1dEFsbChvcHRpb25zKTsKKyAgICAgICAgICAgIH0KIAotCWJvb2xlYW4gc2V0SGFuZGxlcklmTm90U2V0KENhbGxiYWNrSGFuZGxlciBoYW5kbGVyKSB7Ci0JICAgIHRyeSB7Ci0JCXdMb2NrQ29uZmlnLmxvY2soKTsKLQkJaWYgKHRoaXMuY2JoID09IG51bGwgJiYgaGFuZGxlciAhPSBudWxsKSB7Ci0JCSAgICB0aGlzLmNiaCA9IGhhbmRsZXI7Ci0JCSAgICByZXR1cm4gdHJ1ZTsKLQkJfSBlbHNlIHsKLQkJICAgIHJldHVybiBmYWxzZTsKLQkJfQotCSAgICB9IGZpbmFsbHkgewotCQl3TG9ja0NvbmZpZy51bmxvY2soKTsKLQkgICAgfQotCX0KKyAgICAgICAgICAgIGlmIChtYW5kYXRvcnkpIHsKKyAgICAgICAgICAgIG1hbmRhdG9yeUNvbnRleHQgPSBuZXcgU2VydmxldFNlcnZlckF1dGhDb250ZXh0CisgICAgICAgICAgICAgICAgKG1vZHVsZXNbMV0sbWFuZGF0b3J5UG9saWN5LGNiaCxwcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIHJ2YWx1ZSA9IG1hbmRhdG9yeUNvbnRleHQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgb3B0aW9uYWxDb250ZXh0ID0gbmV3IFNlcnZsZXRTZXJ2ZXJBdXRoQ29udGV4dAorICAgICAgICAgICAgICAgIChtb2R1bGVzWzBdLG9wdGlvbmFsUG9saWN5LGNiaCxwcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIHJ2YWx1ZSA9IG9wdGlvbmFsQ29udGV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHdMb2NrQ29uZmlnLnVubG9jaygpOworICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJ2YWx1ZTsKKyAgICB9CiAKLQlzdGF0aWMgY2xhc3MgU2VydmxldFByb3RlY3Rpb25Qb2xpY3kgaW1wbGVtZW50cyAKLQlNZXNzYWdlUG9saWN5LlByb3RlY3Rpb25Qb2xpY3kgewotCQotCSAgICBTZXJ2bGV0UHJvdGVjdGlvblBvbGljeSgpIHsKLQkgICAgfQotCQotCSAgICBwdWJsaWMgU3RyaW5nIGdldElEKCkgewotCQlyZXR1cm4gTWVzc2FnZVBvbGljeS5Qcm90ZWN0aW9uUG9saWN5LkFVVEhFTlRJQ0FURV9TRU5ERVI7Ci0JICAgIH0KLQl9CisgICAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlTGF5ZXIoKSB7CisgICAgICAgIHJldHVybiBIVFRQX1NFUlZMRVRfTEFZRVI7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRBcHBDb250ZXh0KCkgeworICAgICAgICByZXR1cm4gdGhpcy5hcHBDb250ZXh0OworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0QXV0aENvbnRleHRJRChNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbykgeworICAgICAgICBpZiAobWVzc2FnZUluZm8uZ2V0TWFwKCkuY29udGFpbnNLZXkoTUFOREFUT1JZX0tFWSkpIHsKKyAgICAgICAgcmV0dXJuIE1BTkRBVE9SWV9DT05URVhUX0lEOworICAgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gT1BUSU9OQUxfQ09OVEVYVF9JRDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHJlZnJlc2goKSB7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaXNQcm90ZWN0ZWQoKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2xlYW4gc2V0SGFuZGxlcklmTm90U2V0KENhbGxiYWNrSGFuZGxlciBoYW5kbGVyKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIHdMb2NrQ29uZmlnLmxvY2soKTsKKyAgICAgICAgaWYgKHRoaXMuY2JoID09IG51bGwgJiYgaGFuZGxlciAhPSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLmNiaCA9IGhhbmRsZXI7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICB3TG9ja0NvbmZpZy51bmxvY2soKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBTZXJ2bGV0UHJvdGVjdGlvblBvbGljeSBpbXBsZW1lbnRzCisgICAgTWVzc2FnZVBvbGljeS5Qcm90ZWN0aW9uUG9saWN5IHsKKworICAgICAgICBTZXJ2bGV0UHJvdGVjdGlvblBvbGljeSgpIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0SUQoKSB7CisgICAgICAgIHJldHVybiBNZXNzYWdlUG9saWN5LlByb3RlY3Rpb25Qb2xpY3kuQVVUSEVOVElDQVRFX1NFTkRFUjsKKyAgICAgICAgfQorICAgIH0KICAgICB9CiAKICAgICBzdGF0aWMgY2xhc3MgU2VydmxldFNlcnZlckF1dGhDb250ZXh0IGltcGxlbWVudHMgU2VydmVyQXV0aENvbnRleHQgewogCi0JU2VydmVyQXV0aE1vZHVsZSBtb2R1bGU7CisgICAgU2VydmVyQXV0aE1vZHVsZSBtb2R1bGU7CiAKLQlTZXJ2bGV0U2VydmVyQXV0aENvbnRleHQgKFNlcnZlckF1dGhNb2R1bGUgbW9kdWxlLAotCQkJCSAgTWVzc2FnZVBvbGljeSByZXF1ZXN0UG9saWN5LCAgCi0JCQkJICBDYWxsYmFja0hhbmRsZXIgY2JoLAotCQkJCSAgTWFwIG9wdGlvbnMpIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKKyAgICBTZXJ2bGV0U2VydmVyQXV0aENvbnRleHQgKFNlcnZlckF1dGhNb2R1bGUgbW9kdWxlLAorICAgICAgICAgICAgICAgICAgTWVzc2FnZVBvbGljeSByZXF1ZXN0UG9saWN5LAorICAgICAgICAgICAgICAgICAgQ2FsbGJhY2tIYW5kbGVyIGNiaCwKKyAgICAgICAgICAgICAgICAgIE1hcCBvcHRpb25zKSB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CiAKLQkgICAgbW9kdWxlLmluaXRpYWxpemUocmVxdWVzdFBvbGljeSxudWxsLGNiaCxvcHRpb25zKTsKLQkgICAgdGhpcy5tb2R1bGUgPSBtb2R1bGU7Ci0JfQorICAgICAgICBtb2R1bGUuaW5pdGlhbGl6ZShyZXF1ZXN0UG9saWN5LG51bGwsY2JoLG9wdGlvbnMpOworICAgICAgICB0aGlzLm1vZHVsZSA9IG1vZHVsZTsKKyAgICB9CiAKLQlwdWJsaWMgQXV0aFN0YXR1cyB2YWxpZGF0ZVJlcXVlc3QKLQkgICAgKE1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvLCBTdWJqZWN0IGNsaWVudFN1YmplY3QsIAotCSAgICAgU3ViamVjdCBzZXJ2aWNlU3ViamVjdCkgdGhyb3dzIEF1dGhFeGNlcHRpb24gewotCQkgcmV0dXJuIG1vZHVsZS52YWxpZGF0ZVJlcXVlc3QKLQkJICAgICAobWVzc2FnZUluZm8sY2xpZW50U3ViamVjdCxzZXJ2aWNlU3ViamVjdCk7Ci0JfQorICAgIHB1YmxpYyBBdXRoU3RhdHVzIHZhbGlkYXRlUmVxdWVzdAorICAgICAgICAoTWVzc2FnZUluZm8gbWVzc2FnZUluZm8sIFN1YmplY3QgY2xpZW50U3ViamVjdCwKKyAgICAgICAgIFN1YmplY3Qgc2VydmljZVN1YmplY3QpIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKKyAgICAgICAgIHJldHVybiBtb2R1bGUudmFsaWRhdGVSZXF1ZXN0CisgICAgICAgICAgICAgKG1lc3NhZ2VJbmZvLGNsaWVudFN1YmplY3Qsc2VydmljZVN1YmplY3QpOworICAgIH0KIAotCXB1YmxpYyBBdXRoU3RhdHVzIHNlY3VyZVJlc3BvbnNlCi0JICAgICAoTWVzc2FnZUluZm8gbWVzc2FnZUluZm8sIFN1YmplY3Qgc2VydmljZVN1YmplY3QpCi0JICAgIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKLQkJcmV0dXJuIG1vZHVsZS5zZWN1cmVSZXNwb25zZShtZXNzYWdlSW5mbyxzZXJ2aWNlU3ViamVjdCk7Ci0JfQorICAgIHB1YmxpYyBBdXRoU3RhdHVzIHNlY3VyZVJlc3BvbnNlCisgICAgICAgICAoTWVzc2FnZUluZm8gbWVzc2FnZUluZm8sIFN1YmplY3Qgc2VydmljZVN1YmplY3QpCisgICAgICAgIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIG1vZHVsZS5zZWN1cmVSZXNwb25zZShtZXNzYWdlSW5mbyxzZXJ2aWNlU3ViamVjdCk7CisgICAgfQogCi0JcHVibGljIHZvaWQgY2xlYW5TdWJqZWN0KE1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvLCBTdWJqZWN0IHN1YmplY3QpCi0JICAgIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKLQkgICAgICAgIG1vZHVsZS5jbGVhblN1YmplY3QobWVzc2FnZUluZm8sc3ViamVjdCk7Ci0JfQotCQorICAgIHB1YmxpYyB2b2lkIGNsZWFuU3ViamVjdChNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbywgU3ViamVjdCBzdWJqZWN0KQorICAgICAgICB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CisgICAgICAgICAgICBtb2R1bGUuY2xlYW5TdWJqZWN0KG1lc3NhZ2VJbmZvLHN1YmplY3QpOworICAgIH0KKwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvYXV0aENvbmYvcHJvdmlkZXIvY29tL3N1bi9zZWN1cml0eS9hdXRoL21lc3NhZ2UvbW9kdWxlL1NQTkVHT1NlcnZlckF1dGhNb2R1bGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2F1dGhDb25mL3Byb3ZpZGVyL2NvbS9zdW4vc2VjdXJpdHkvYXV0aC9tZXNzYWdlL21vZHVsZS9TUE5FR09TZXJ2ZXJBdXRoTW9kdWxlLmphdmEKaW5kZXggNmY2ZDAxOC4uZThlNDQyOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvYXV0aENvbmYvcHJvdmlkZXIvY29tL3N1bi9zZWN1cml0eS9hdXRoL21lc3NhZ2UvbW9kdWxlL1NQTkVHT1NlcnZlckF1dGhNb2R1bGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9hdXRoQ29uZi9wcm92aWRlci9jb20vc3VuL3NlY3VyaXR5L2F1dGgvbWVzc2FnZS9tb2R1bGUvU1BORUdPU2VydmVyQXV0aE1vZHVsZS5qYXZhCkBAIC01MSw3ICs1MSw3IEBACiBpbXBvcnQgY29tLnN1bi5zZWN1cml0eS5qZ3NzLkdTU1V0aWw7CiAKIC8qKgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byB2YWxpZGF0ZSByZWNlaXZlZCBzZXJ2aWNlIAorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byB2YWxpZGF0ZSByZWNlaXZlZCBzZXJ2aWNlCiAgKiByZXF1ZXN0IG1lc3NhZ2VzLCBhbmQgdG8gc2VjdXJlIHNlcnZpY2UgcmVzcG9uc2UgbWVzc2FnZXMuCiAgKgogICogQHZlcnNpb24gJUklLCAlRyUKQEAgLTY1LDE2ICs2NSwxNiBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIERFQlVHX09QVElPTlNfS0VZID0iZGVidWciOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIEFTU0lHTl9HUk9VUFNfT1BUSU9OU19LRVkgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgQVNTSUdOX0dST1VQU19PUFRJT05TX0tFWSA9CiAgICAgICAgICJhc3NpZ24uZ3JvdXBzIjsKIAotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBQT0xJQ1lfQ09OVEVYVF9PUFRJT05TX0tFWSA9IAorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBQT0xJQ1lfQ09OVEVYVF9PUFRJT05TX0tFWSA9CiAgICAgICAgICJqYWthcnRhLnNlY3VyaXR5LmphY2MuUG9saWN5Q29udGV4dCI7CiAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVVRIX1RZUEVfSU5GT19LRVkgPSAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVVRIX1RZUEVfSU5GT19LRVkgPQogICAgICAgICAiamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuYXV0aFR5cGUiOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElTX01BTkRBVE9SWV9JTkZPX0tFWSA9IAorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJU19NQU5EQVRPUllfSU5GT19LRVkgPQogICAgICAgICAiamFrYXJ0YS5zZWN1cml0eS5hdXRoLm1lc3NhZ2UuTWVzc2FnZVBvbGljeS5pc01hbmRhdG9yeSI7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgQVVUSE9SSVpBVElPTl9IRUFERVIgPSAiYXV0aG9yaXphdGlvbiI7CkBAIC04NSwxMiArODUsMTIgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBOVExNX0lOSVRJQUxfVE9LRU4gPSAiTlRMTVNTUCI7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBDbGFzc1tdIHN1cHBvcnRlZE1lc3NhZ2VUeXBlcyA9IG5ldyBDbGFzc1tdIAotICAgIHsgCi0JamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LmNsYXNzLAotCWpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UuY2xhc3MgCi0gICAgfTsgICAgICAgICAgICAKLSAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBDbGFzc1tdIHN1cHBvcnRlZE1lc3NhZ2VUeXBlcyA9IG5ldyBDbGFzc1tdCisgICAgeworICAgIGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdC5jbGFzcywKKyAgICBqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlLmNsYXNzCisgICAgfTsKKwogICAgIHByaXZhdGUgTWVzc2FnZVBvbGljeSByZXF1ZXN0UG9saWN5OwogCiAgICAgcHJpdmF0ZSBNZXNzYWdlUG9saWN5IHJlc3BvbnNlUG9saWN5OwpAQCAtMTE5LDcxICsxMTksNzEgQEAKICAgICAgKiA8cD4gVGhlIHJlcXVlc3QgcG9saWN5IGFuZCB0aGUgcmVzcG9uc2UgcG9saWN5IG11c3Qgbm90IGJvdGggYmUgbnVsbC4KICAgICAgKgogICAgICAqIEBwYXJhbSByZXF1ZXN0UG9saWN5IFRoZSByZXF1ZXN0IHBvbGljeSB0aGlzIG1vZHVsZSBtdXN0IGVuZm9yY2UsCi0gICAgICoJCW9yIG51bGwuCisgICAgICogICAgICAgIG9yIG51bGwuCiAgICAgICoKICAgICAgKiBAcGFyYW0gcmVzcG9uc2VQb2xpY3kgVGhlIHJlc3BvbnNlIHBvbGljeSB0aGlzIG1vZHVsZSBtdXN0IGVuZm9yY2UsCi0gICAgICoJCW9yIG51bGwuCisgICAgICogICAgICAgIG9yIG51bGwuCiAgICAgICoKICAgICAgKiBAcGFyYW0gaGFuZGxlciBDYWxsYmFja0hhbmRsZXIgdXNlZCB0byByZXF1ZXN0IGluZm9ybWF0aW9uLgogICAgICAqCiAgICAgICogQHBhcmFtIG9wdGlvbnMgQSBNYXAgb2YgbW9kdWxlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcy4KICAgICAgKgogICAgICAqIEBleGNlcHRpb24gQXV0aEV4Y2VwdGlvbiBJZiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gZmFpbHMsIGluY2x1ZGluZyBmb3IKLSAgICAgKiB0aGUgY2FzZSB3aGVyZSB0aGUgb3B0aW9ucyBhcmd1bWVudCBjb250YWlucyBlbGVtZW50cyB0aGF0IGFyZSBub3QgCisgICAgICogdGhlIGNhc2Ugd2hlcmUgdGhlIG9wdGlvbnMgYXJndW1lbnQgY29udGFpbnMgZWxlbWVudHMgdGhhdCBhcmUgbm90CiAgICAgICogc3VwcG9ydGVkIGJ5IHRoZSBtb2R1bGUuCiAgICAgICovCiAKICAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKE1lc3NhZ2VQb2xpY3kgcmVxdWVzdFBvbGljeSwKLQkgICAgICAgTWVzc2FnZVBvbGljeSByZXNwb25zZVBvbGljeSwKLQkgICAgICAgQ2FsbGJhY2tIYW5kbGVyIGhhbmRsZXIsCi0JICAgICAgIE1hcCBvcHRpb25zKQotCXRocm93cyBBdXRoRXhjZXB0aW9uIHsKKyAgICAgICAgICAgTWVzc2FnZVBvbGljeSByZXNwb25zZVBvbGljeSwKKyAgICAgICAgICAgQ2FsbGJhY2tIYW5kbGVyIGhhbmRsZXIsCisgICAgICAgICAgIE1hcCBvcHRpb25zKQorICAgIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKIAotCSAgICB0aGlzLnJlcXVlc3RQb2xpY3kgPSByZXF1ZXN0UG9saWN5OwotCSAgICB0aGlzLnJlc3BvbnNlUG9saWN5ID0gcmVzcG9uc2VQb2xpY3k7CisgICAgICAgIHRoaXMucmVxdWVzdFBvbGljeSA9IHJlcXVlc3RQb2xpY3k7CisgICAgICAgIHRoaXMucmVzcG9uc2VQb2xpY3kgPSByZXNwb25zZVBvbGljeTsKIAotCSAgICB0aGlzLmlzTWFuZGF0b3J5ID0gcmVxdWVzdFBvbGljeS5pc01hbmRhdG9yeSgpOworICAgICAgICB0aGlzLmlzTWFuZGF0b3J5ID0gcmVxdWVzdFBvbGljeS5pc01hbmRhdG9yeSgpOwogCi0JICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7Ci0JICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7Ci0JICAgCi0JICAgIGlmIChvcHRpb25zICE9IG51bGwpIHsKLQkJZGVidWcgPSBvcHRpb25zLmNvbnRhaW5zS2V5KERFQlVHX09QVElPTlNfS0VZKTsKLQkJcG9saWN5Q29udGV4dElEID0gKFN0cmluZykgCi0JCSAgICBvcHRpb25zLmdldChQT0xJQ1lfQ09OVEVYVF9PUFRJT05TX0tFWSk7Ci0JICAgIH0gZWxzZSB7Ci0JCWRlYnVnID0gZmFsc2U7Ci0JCXBvbGljeUNvbnRleHRJRCA9IG51bGw7Ci0JICAgIH0KKyAgICAgICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcjsKKyAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKIAotCSAgICBhc3NpZ25lZEdyb3VwcyA9IGdldEFzc2lnbmVkR3JvdXBOYW1lcygpOworICAgICAgICBpZiAob3B0aW9ucyAhPSBudWxsKSB7CisgICAgICAgIGRlYnVnID0gb3B0aW9ucy5jb250YWluc0tleShERUJVR19PUFRJT05TX0tFWSk7CisgICAgICAgIHBvbGljeUNvbnRleHRJRCA9IChTdHJpbmcpCisgICAgICAgICAgICBvcHRpb25zLmdldChQT0xJQ1lfQ09OVEVYVF9PUFRJT05TX0tFWSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVnID0gZmFsc2U7CisgICAgICAgIHBvbGljeUNvbnRleHRJRCA9IG51bGw7CisgICAgICAgIH0KIAotCSAgICBkZWJ1Z0xldmVsID0gKGxvZ2dlci5pc0xvZ2dhYmxlKExldmVsLkZJTkUpICYmICFkZWJ1ZykgPyAKLQkJTGV2ZWwuRklORSA6IExldmVsLklORk87CisgICAgICAgIGFzc2lnbmVkR3JvdXBzID0gZ2V0QXNzaWduZWRHcm91cE5hbWVzKCk7CiAKLQkgICAgZ3NzTWFuYWdlciA9IEdTU01hbmFnZXIuZ2V0SW5zdGFuY2UoKTsgCisgICAgICAgIGRlYnVnTGV2ZWwgPSAobG9nZ2VyLmlzTG9nZ2FibGUoTGV2ZWwuRklORSkgJiYgIWRlYnVnKSA/CisgICAgICAgIExldmVsLkZJTkUgOiBMZXZlbC5JTkZPOworCisgICAgICAgIGdzc01hbmFnZXIgPSBHU1NNYW5hZ2VyLmdldEluc3RhbmNlKCk7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogR2V0IHRoZSBvbmUgb3IgbW9yZSBDbGFzcyBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgbWVzc2FnZSB0eXBlcyAKKyAgICAgKiBHZXQgdGhlIG9uZSBvciBtb3JlIENsYXNzIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSBtZXNzYWdlIHR5cGVzCiAgICAgICogc3VwcG9ydGVkIGJ5IHRoZSBtb2R1bGUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuIEFuIGFycmF5IG9mIENsYXNzIG9iamVjdHMsIHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnQgCisgICAgICogQHJldHVybiBBbiBhcnJheSBvZiBDbGFzcyBvYmplY3RzLCB3aXRoIGF0IGxlYXN0IG9uZSBlbGVtZW50CiAgICAgICogZGVmaW5pbmcgYSBtZXNzYWdlIHR5cGUgc3VwcG9ydGVkIGJ5IHRoZSBtb2R1bGUuCiAgICAgICovCiAgICAgcHVibGljIENsYXNzW10gZ2V0U3VwcG9ydGVkTWVzc2FnZVR5cGVzKCkgewotCXJldHVybiBzdXBwb3J0ZWRNZXNzYWdlVHlwZXM7CisgICAgcmV0dXJuIHN1cHBvcnRlZE1lc3NhZ2VUeXBlczsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBBdXRoZW50aWNhdGUgYSByZWNlaXZlZCBzZXJ2aWNlIHJlcXVlc3QuCiAgICAgICoKLSAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gdHJhbnNmb3JtIHRoZSBtZWNoYW5pc20tc3BlY2lmaWMgcmVxdWVzdCAKLSAgICAgKiBtZXNzYWdlIGFjcXVpcmVkIGJ5IGNhbGxpbmcgZ2V0UmVxdWVzdE1lc3NhZ2UgKG9uIG1lc3NhZ2VJbmZvKSAKLSAgICAgKiBpbnRvIHRoZSB2YWxpZGF0ZWQgYXBwbGljYXRpb24gbWVzc2FnZSB0byBiZSByZXR1cm5lZCB0byB0aGUgbWVzc2FnZSAKLSAgICAgKiBwcm9jZXNzaW5nIHJ1bnRpbWUuIAotICAgICAqIElmIHRoZSByZWNlaXZlZCBtZXNzYWdlIGlzIGEgKG1lY2hhbmlzbS1zcGVjaWZpYykgbWV0YS1tZXNzYWdlLCAKLSAgICAgKiB0aGUgbWV0aG9kIGltcGxlbWVudGF0aW9uIG11c3QgYXR0ZW1wdCB0byB0cmFuc2Zvcm0gdGhlIG1ldGEtbWVzc2FnZSAKKyAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gdHJhbnNmb3JtIHRoZSBtZWNoYW5pc20tc3BlY2lmaWMgcmVxdWVzdAorICAgICAqIG1lc3NhZ2UgYWNxdWlyZWQgYnkgY2FsbGluZyBnZXRSZXF1ZXN0TWVzc2FnZSAob24gbWVzc2FnZUluZm8pCisgICAgICogaW50byB0aGUgdmFsaWRhdGVkIGFwcGxpY2F0aW9uIG1lc3NhZ2UgdG8gYmUgcmV0dXJuZWQgdG8gdGhlIG1lc3NhZ2UKKyAgICAgKiBwcm9jZXNzaW5nIHJ1bnRpbWUuCisgICAgICogSWYgdGhlIHJlY2VpdmVkIG1lc3NhZ2UgaXMgYSAobWVjaGFuaXNtLXNwZWNpZmljKSBtZXRhLW1lc3NhZ2UsCisgICAgICogdGhlIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBtdXN0IGF0dGVtcHQgdG8gdHJhbnNmb3JtIHRoZSBtZXRhLW1lc3NhZ2UKICAgICAgKiBpbnRvIGEgY29ycmVzcG9uZGluZyBtZWNoYW5pc20tc3BlY2lmaWMgcmVzcG9uc2UgbWVzc2FnZSwgb3IgdG8gdGhlCiAgICAgICogdmFsaWRhdGVkIGFwcGxpY2F0aW9uIHJlcXVlc3QgbWVzc2FnZS4KICAgICAgKiBUaGUgcnVudGltZSB3aWxsIGJpbmQgYSB2YWxpZGF0ZWQgYXBwbGljYXRpb24gbWVzc2FnZSBpbnRvIHRoZQpAQCAtMTkyLDI3ICsxOTIsMjcgQEAKICAgICAgKiBieSByZXR1cm5pbmcgYW4gQXV0aFN0YXR1cyB2YWx1ZSBvciBieSB0aHJvd2luZyBhbiBBdXRoRXhjZXB0aW9uLgogICAgICAqCiAgICAgICogQHBhcmFtIG1lc3NhZ2VJbmZvIEEgY29udGV4dHVhbCBvYmplY3QgdGhhdCBlbmNhcHN1bGF0ZXMgdGhlCi0gICAgICogICAgICAgICAgY2xpZW50IHJlcXVlc3QgYW5kIHNlcnZlciByZXNwb25zZSBvYmplY3RzLCBhbmQgdGhhdCBtYXkgYmUgCi0gICAgICogICAgICAgICAgdXNlZCB0byBzYXZlIHN0YXRlIGFjcm9zcyBhIHNlcXVlbmNlIG9mIGNhbGxzIG1hZGUgdG8gdGhlIAotICAgICAqICAgICAgICAgIG1ldGhvZHMgb2YgdGhpcyBpbnRlcmZhY2UgZm9yIHRoZSBwdXJwb3NlIG9mIGNvbXBsZXRpbmcgYSAKKyAgICAgKiAgICAgICAgICBjbGllbnQgcmVxdWVzdCBhbmQgc2VydmVyIHJlc3BvbnNlIG9iamVjdHMsIGFuZCB0aGF0IG1heSBiZQorICAgICAqICAgICAgICAgIHVzZWQgdG8gc2F2ZSBzdGF0ZSBhY3Jvc3MgYSBzZXF1ZW5jZSBvZiBjYWxscyBtYWRlIHRvIHRoZQorICAgICAqICAgICAgICAgIG1ldGhvZHMgb2YgdGhpcyBpbnRlcmZhY2UgZm9yIHRoZSBwdXJwb3NlIG9mIGNvbXBsZXRpbmcgYQogICAgICAqICAgICAgICAgIHNlY3VyZSBtZXNzYWdlIGV4Y2hhbmdlLgogICAgICAqCi0gICAgICogQHBhcmFtIGNsaWVudFN1YmplY3QgQSBTdWJqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgc291cmNlIG9mIHRoZSAKLSAgICAgKiAgICAgICAgICBzZXJ2aWNlIAorICAgICAqIEBwYXJhbSBjbGllbnRTdWJqZWN0IEEgU3ViamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIHNvdXJjZSBvZiB0aGUKKyAgICAgKiAgICAgICAgICBzZXJ2aWNlCiAgICAgICogICAgICAgICAgcmVxdWVzdC4gIEl0IGlzIHVzZWQgYnkgdGhlIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiB0byBzdG9yZQotICAgICAqCQlQcmluY2lwYWxzIGFuZCBjcmVkZW50aWFscyB2YWxpZGF0ZWQgaW4gdGhlIHJlcXVlc3QuCisgICAgICogICAgICAgIFByaW5jaXBhbHMgYW5kIGNyZWRlbnRpYWxzIHZhbGlkYXRlZCBpbiB0aGUgcmVxdWVzdC4KICAgICAgKgogICAgICAqIEBwYXJhbSBzZXJ2aWNlU3ViamVjdCBBIFN1YmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSByZWNpcGllbnQgb2YgdGhlCi0gICAgICoJCXNlcnZpY2UgcmVxdWVzdCwgb3IgbnVsbC4gIEl0IG1heSBiZSB1c2VkIGJ5IHRoZSBtZXRob2QgCisgICAgICogICAgICAgIHNlcnZpY2UgcmVxdWVzdCwgb3IgbnVsbC4gIEl0IG1heSBiZSB1c2VkIGJ5IHRoZSBtZXRob2QKICAgICAgKiAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBhcyB0aGUgc291cmNlIG9mIFByaW5jaXBhbHMgb3IgY3JlZGVudGlhbHMgdG8KLSAgICAgKiAgICAgICAgICBiZSB1c2VkIHRvIHZhbGlkYXRlIHRoZSByZXF1ZXN0LiBJZiB0aGUgU3ViamVjdCBpcyBub3QgbnVsbCwgCi0gICAgICogICAgICAgICAgdGhlIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBtYXkgYWRkIGFkZGl0aW9uYWwgUHJpbmNpcGFscyBvciAKLSAgICAgKiAgICAgICAgICBjcmVkZW50aWFscyAocGVydGFpbmluZyB0byB0aGUgcmVjaXBpZW50IG9mIHRoZSBzZXJ2aWNlIAorICAgICAqICAgICAgICAgIGJlIHVzZWQgdG8gdmFsaWRhdGUgdGhlIHJlcXVlc3QuIElmIHRoZSBTdWJqZWN0IGlzIG5vdCBudWxsLAorICAgICAqICAgICAgICAgIHRoZSBtZXRob2QgaW1wbGVtZW50YXRpb24gbWF5IGFkZCBhZGRpdGlvbmFsIFByaW5jaXBhbHMgb3IKKyAgICAgKiAgICAgICAgICBjcmVkZW50aWFscyAocGVydGFpbmluZyB0byB0aGUgcmVjaXBpZW50IG9mIHRoZSBzZXJ2aWNlCiAgICAgICogICAgICAgICAgcmVxdWVzdCkgdG8gdGhlIFN1YmplY3QuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIEFuIEF1dGhTdGF0dXMgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY29tcGxldGlvbiBzdGF0dXMgb2YKICAgICAgKiAgICAgICAgICB0aGUgcHJvY2Vzc2luZyBwZXJmb3JtZWQgYnkgdGhlIG1ldGhvZC4KLSAgICAgKiAgICAgICAgICBUaGUgQXV0aFN0YXR1cyB2YWx1ZXMgdGhhdCBtYXkgYmUgcmV0dXJuZWQgYnkgdGhpcyBtZXRob2QgCisgICAgICogICAgICAgICAgVGhlIEF1dGhTdGF0dXMgdmFsdWVzIHRoYXQgbWF5IGJlIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kCiAgICAgICogICAgICAgICAgYXJlIGRlZmluZWQgYXMgZm9sbG93czoKICAgICAgKgogICAgICAqIDx1bD4KQEAgLTIyMSwxNiArMjIxLDE2IEBACiAgICAgICogYXZhaWxhYmxlIGJ5IGNhbGxpbmcgZ2V0UmVxdWVzdE1lc3NhZ2Ugb24gbWVzc2FnZUluZm8uCiAgICAgICoKICAgICAgKiA8bGk+IEF1dGhTdGF0dXMuU0VORF9TVUNDRVNTIHRvIGluZGljYXRlIHRoYXQgdmFsaWRhdGlvbi9wcm9jZXNzaW5nCi0gICAgICogb2YgdGhlIHJlcXVlc3QgbWVzc2FnZSBzdWNjZXNzZnVsbHkgcHJvZHVjZWQgdGhlIHNlY3VyZWQgYXBwbGljYXRpb24gCi0gICAgICogcmVzcG9uc2UgbWVzc2FnZSAoaW4gbWVzc2FnZUluZm8pLiBUaGUgc2VjdXJlZCByZXNwb25zZSBtZXNzYWdlIGlzIAorICAgICAqIG9mIHRoZSByZXF1ZXN0IG1lc3NhZ2Ugc3VjY2Vzc2Z1bGx5IHByb2R1Y2VkIHRoZSBzZWN1cmVkIGFwcGxpY2F0aW9uCisgICAgICogcmVzcG9uc2UgbWVzc2FnZSAoaW4gbWVzc2FnZUluZm8pLiBUaGUgc2VjdXJlZCByZXNwb25zZSBtZXNzYWdlIGlzCiAgICAgICogYXZhaWxhYmxlIGJ5IGNhbGxpbmcgZ2V0UmVzcG9uc2VNZXNzYWdlIG9uIG1lc3NhZ2VJbmZvLgogICAgICAqCiAgICAgICogPGxpPiBBdXRoU3RhdHVzLlNFTkRfQ09OVElOVUUgdG8gaW5kaWNhdGUgdGhhdCBtZXNzYWdlIHZhbGlkYXRpb24gaXMKICAgICAgKiBpbmNvbXBsZXRlLCBhbmQgdGhhdCBhIHByZWxpbWluYXJ5IHJlc3BvbnNlIHdhcyByZXR1cm5lZCBhcyB0aGUKICAgICAgKiByZXNwb25zZSBtZXNzYWdlIGluIG1lc3NhZ2VJbmZvLgogICAgICAqCi0gICAgICogV2hlbiB0aGlzIHN0YXR1cyB2YWx1ZSBpcyByZXR1cm5lZCB0byBjaGFsbGVuZ2UgYW4gCi0gICAgICogYXBwbGljYXRpb24gcmVxdWVzdCBtZXNzYWdlLCB0aGUgY2hhbGxlbmdlZCByZXF1ZXN0IG11c3QgYmUgc2F2ZWQgCisgICAgICogV2hlbiB0aGlzIHN0YXR1cyB2YWx1ZSBpcyByZXR1cm5lZCB0byBjaGFsbGVuZ2UgYW4KKyAgICAgKiBhcHBsaWNhdGlvbiByZXF1ZXN0IG1lc3NhZ2UsIHRoZSBjaGFsbGVuZ2VkIHJlcXVlc3QgbXVzdCBiZSBzYXZlZAogICAgICAqIGJ5IHRoZSBhdXRoZW50aWNhdGlvbiBtb2R1bGUgc3VjaCB0aGF0IGl0IGNhbiBiZSByZWNvdmVyZWQKICAgICAgKiB3aGVuIHRoZSBtb2R1bGUncyB2YWxpZGF0ZVJlcXVlc3QgbWVzc2FnZSBpcyBjYWxsZWQgdG8gcHJvY2VzcwogICAgICAqIHRoZSByZXF1ZXN0IHJldHVybmVkIGZvciB0aGUgY2hhbGxlbmdlLgpAQCAtMjQ0LDE1MiArMjQ0LDE1MiBAQAogICAgICAqICAgICAgICAgIGVzdGFibGlzaGluZyBhIGZhaWx1cmUgcmVzcG9uc2UgbWVzc2FnZSAoaW4gbWVzc2FnZUluZm8pLgogICAgICAqLwogICAgIHB1YmxpYyBBdXRoU3RhdHVzIHZhbGlkYXRlUmVxdWVzdChNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbywKLQkJCSAgICAgICBTdWJqZWN0IGNsaWVudFN1YmplY3QsCi0JCQkgICAgICAgU3ViamVjdCBzZXJ2aWNlU3ViamVjdCkgdGhyb3dzIEF1dGhFeGNlcHRpb24geworICAgICAgICAgICAgICAgICAgIFN1YmplY3QgY2xpZW50U3ViamVjdCwKKyAgICAgICAgICAgICAgICAgICBTdWJqZWN0IHNlcnZpY2VTdWJqZWN0KSB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CiAKLQlhc3NlcnQgKG1lc3NhZ2VJbmZvLmdldE1hcCgpLmNvbnRhaW5zS2V5KElTX01BTkRBVE9SWV9JTkZPX0tFWSkgPT0gCi0JCXRoaXMuaXNNYW5kYXRvcnkpOworICAgIGFzc2VydCAobWVzc2FnZUluZm8uZ2V0TWFwKCkuY29udGFpbnNLZXkoSVNfTUFOREFUT1JZX0lORk9fS0VZKSA9PQorICAgICAgICB0aGlzLmlzTWFuZGF0b3J5KTsKIAotCUh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0ID0gCi0JICAgIChIdHRwU2VydmxldFJlcXVlc3QpIG1lc3NhZ2VJbmZvLmdldFJlcXVlc3RNZXNzYWdlKCk7CisgICAgSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QgPQorICAgICAgICAoSHR0cFNlcnZsZXRSZXF1ZXN0KSBtZXNzYWdlSW5mby5nZXRSZXF1ZXN0TWVzc2FnZSgpOwogCi0JSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSA9IAotCSAgICAoSHR0cFNlcnZsZXRSZXNwb25zZSkgbWVzc2FnZUluZm8uZ2V0UmVzcG9uc2VNZXNzYWdlKCk7CisgICAgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSA9CisgICAgICAgIChIdHRwU2VydmxldFJlc3BvbnNlKSBtZXNzYWdlSW5mby5nZXRSZXNwb25zZU1lc3NhZ2UoKTsKIAotCWRlYnVnUmVxdWVzdChyZXF1ZXN0KTsKKyAgICBkZWJ1Z1JlcXVlc3QocmVxdWVzdCk7CiAKLQkvLyBzaG91bGQgc3BlY2lmeSBlbmNvZGVyCi0JU3RyaW5nIGF1dGhvcml6YXRpb24gPSByZXF1ZXN0LmdldEhlYWRlcihBVVRIT1JJWkFUSU9OX0hFQURFUik7CisgICAgLy8gc2hvdWxkIHNwZWNpZnkgZW5jb2RlcgorICAgIFN0cmluZyBhdXRob3JpemF0aW9uID0gcmVxdWVzdC5nZXRIZWFkZXIoQVVUSE9SSVpBVElPTl9IRUFERVIpOwogCi0JaWYgKGF1dGhvcml6YXRpb24gIT0gbnVsbCAmJiBhdXRob3JpemF0aW9uLnN0YXJ0c1dpdGgoTkVHT1RJQVRFKSkgeworICAgIGlmIChhdXRob3JpemF0aW9uICE9IG51bGwgJiYgYXV0aG9yaXphdGlvbi5zdGFydHNXaXRoKE5FR09USUFURSkpIHsKIAotCSAgICBhdXRob3JpemF0aW9uID0gYXV0aG9yaXphdGlvbi5zdWJzdHJpbmcoTkVHT1RJQVRFLmxlbmd0aCgpKzEpOworICAgICAgICBhdXRob3JpemF0aW9uID0gYXV0aG9yaXphdGlvbi5zdWJzdHJpbmcoTkVHT1RJQVRFLmxlbmd0aCgpKzEpOwogCi0JICAgIC8vIHNob3VsZCBzcGVjaWZ5IGEgZGVjb2RlcgotCSAgICBieXRlW10gcmVxdWVzdFRva2VuID0gQmFzZTY0LmRlY29kZShhdXRob3JpemF0aW9uLmdldEJ5dGVzKCkpOworICAgICAgICAvLyBzaG91bGQgc3BlY2lmeSBhIGRlY29kZXIKKyAgICAgICAgYnl0ZVtdIHJlcXVlc3RUb2tlbiA9IEJhc2U2NC5kZWNvZGUoYXV0aG9yaXphdGlvbi5nZXRCeXRlcygpKTsKIAotCSAgICB0cnkgeworICAgICAgICB0cnkgewogCi0JCUdTU0NvbnRleHQgZ3NzQ29udGV4dCA9IAotCQkgICAgZ3NzTWFuYWdlci5jcmVhdGVDb250ZXh0KChHU1NDcmVkZW50aWFsKSBudWxsKTsKKyAgICAgICAgR1NTQ29udGV4dCBnc3NDb250ZXh0ID0KKyAgICAgICAgICAgIGdzc01hbmFnZXIuY3JlYXRlQ29udGV4dCgoR1NTQ3JlZGVudGlhbCkgbnVsbCk7CiAKLQkJYnl0ZVtdIGdzc1Rva2VuID0gZ3NzQ29udGV4dC5hY2NlcHRTZWNDb250ZXh0Ci0JCSAgICAocmVxdWVzdFRva2VuLDAscmVxdWVzdFRva2VuLmxlbmd0aCk7Ci0JCQotCQlpZiAoZ3NzVG9rZW4gIT0gbnVsbCkgeworICAgICAgICBieXRlW10gZ3NzVG9rZW4gPSBnc3NDb250ZXh0LmFjY2VwdFNlY0NvbnRleHQKKyAgICAgICAgICAgIChyZXF1ZXN0VG9rZW4sMCxyZXF1ZXN0VG9rZW4ubGVuZ3RoKTsKIAotCQkgICAgYnl0ZVtdIHJlc3BvbnNlVG9rZW4gPSBCYXNlNjQuZW5jb2RlKGdzc1Rva2VuKTsKKyAgICAgICAgaWYgKGdzc1Rva2VuICE9IG51bGwpIHsKIAotCQkgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKEFVVEhFTlRJQ0FUSU9OX0hFQURFUiwKLQkJCQkgICAgICAgIk5lZ290aWF0ZSIgKyByZXNwb25zZVRva2VuKTsKKyAgICAgICAgICAgIGJ5dGVbXSByZXNwb25zZVRva2VuID0gQmFzZTY0LmVuY29kZShnc3NUb2tlbik7CiAKLQkJICAgIGRlYnVnVG9rZW4oImptYWMuc2VydmxldC5hdXRoZW50aWNhdGlvbi50b2tlbiIsCi0JCQkJICAgcmVzcG9uc2VUb2tlbik7Ci0JCX0KKyAgICAgICAgICAgIHJlc3BvbnNlLnNldEhlYWRlcihBVVRIRU5USUNBVElPTl9IRUFERVIsCisgICAgICAgICAgICAgICAgICAgICAgICJOZWdvdGlhdGUiICsgcmVzcG9uc2VUb2tlbik7CiAKLQkJaWYgKCFnc3NDb250ZXh0LmlzRXN0YWJsaXNoZWQoKSkgeworICAgICAgICAgICAgZGVidWdUb2tlbigiam1hYy5zZXJ2bGV0LmF1dGhlbnRpY2F0aW9uLnRva2VuIiwKKyAgICAgICAgICAgICAgICAgICByZXNwb25zZVRva2VuKTsKKyAgICAgICAgfQogCi0JCSAgICBpZiAoZGVidWcgfHwgbG9nZ2VyLmlzTG9nZ2FibGUoTGV2ZWwuRklORSkpewotCQkJbG9nZ2VyLmxvZyhkZWJ1Z0xldmVsLCJqbWFjLmdzc19kaWFsb2dfY29udGludWVkIik7Ci0JCSAgICB9CisgICAgICAgIGlmICghZ3NzQ29udGV4dC5pc0VzdGFibGlzaGVkKCkpIHsKIAotCQkgICAgcmVzcG9uc2Uuc2V0U3RhdHVzKEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfVU5BVVRIT1JJWkVEKTsKLQkJICAgIHJldHVybiBBdXRoU3RhdHVzLlNFTkRfQ09OVElOVUU7CisgICAgICAgICAgICBpZiAoZGVidWcgfHwgbG9nZ2VyLmlzTG9nZ2FibGUoTGV2ZWwuRklORSkpeworICAgICAgICAgICAgbG9nZ2VyLmxvZyhkZWJ1Z0xldmVsLCJqbWFjLmdzc19kaWFsb2dfY29udGludWVkIik7CisgICAgICAgICAgICB9CiAKLQkJfSBlbHNlIHsKKyAgICAgICAgICAgIHJlc3BvbnNlLnNldFN0YXR1cyhIdHRwU2VydmxldFJlc3BvbnNlLlNDX1VOQVVUSE9SSVpFRCk7CisgICAgICAgICAgICByZXR1cm4gQXV0aFN0YXR1cy5TRU5EX0NPTlRJTlVFOwogCi0JCSAgICBTdHJpbmcgbWVjaElEOwotCQkgICAgdHJ5IHsKLQkJCU9pZCBvaWQgPSBnc3NDb250ZXh0LmdldE1lY2goKTsKLQkJCW1lY2hJRCA9IG9pZC50b1N0cmluZygpOwotCQkgICAgfSBjYXRjaCAoR1NTRXhjZXB0aW9uIGdzc2UpIHsKLQkJCW1lY2hJRCA9ICJVbmRlZmluZWQgR1NTIE1lY2hhbmlzbSI7CisgICAgICAgIH0gZWxzZSB7CiAKLQkJCWlmIChkZWJ1ZyB8fCBsb2dnZXIuaXNMb2dnYWJsZShMZXZlbC5GSU5FKSl7Ci0JCQkgICAgbG9nZ2VyLmxvZyhkZWJ1Z0xldmVsLAotCQkJCSAgICAgICAiam1hYy5nc3NfbWVjaGFuaXNtX3VuZGVmaW5lZCIsZ3NzZSk7Ci0JCQl9Ci0JCSAgICB9IAorICAgICAgICAgICAgU3RyaW5nIG1lY2hJRDsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBPaWQgb2lkID0gZ3NzQ29udGV4dC5nZXRNZWNoKCk7CisgICAgICAgICAgICBtZWNoSUQgPSBvaWQudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEdTU0V4Y2VwdGlvbiBnc3NlKSB7CisgICAgICAgICAgICBtZWNoSUQgPSAiVW5kZWZpbmVkIEdTUyBNZWNoYW5pc20iOwogCi0JCSAgICBHU1NOYW1lIG5hbWUgPSBnc3NDb250ZXh0LmdldFNyY05hbWUoKTsKKyAgICAgICAgICAgIGlmIChkZWJ1ZyB8fCBsb2dnZXIuaXNMb2dnYWJsZShMZXZlbC5GSU5FKSl7CisgICAgICAgICAgICAgICAgbG9nZ2VyLmxvZyhkZWJ1Z0xldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAiam1hYy5nc3NfbWVjaGFuaXNtX3VuZGVmaW5lZCIsZ3NzZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKLQkJICAgIGlmICghc2V0Q2FsbGVyUHJpbmNpcGFsKG5hbWUsY2xpZW50U3ViamVjdCkpIHsKKyAgICAgICAgICAgIEdTU05hbWUgbmFtZSA9IGdzc0NvbnRleHQuZ2V0U3JjTmFtZSgpOwogCi0JCQlyZXR1cm4gc2VuZEZhaWx1cmVNZXNzYWdlCi0JCQkgICAgKHJlc3BvbnNlLAotCQkJICAgICBIdHRwU2VydmxldFJlc3BvbnNlLlNDX0lOVEVSTkFMX1NFUlZFUl9FUlJPUiwKLQkJCSAgICAgIkZhaWxlZCBzZXR0aW5nIGNhbGxlciBwcmluY2lwYWwiKTsKLQkJICAgIH0KKyAgICAgICAgICAgIGlmICghc2V0Q2FsbGVyUHJpbmNpcGFsKG5hbWUsY2xpZW50U3ViamVjdCkpIHsKIAotCQkgICAgLyogd2UgbWF5IG5lZWQgdG8gYWRkIHNvbWV0aGluZyBsaWtlIGEgY29va2llIHRvIHRoZSAKLQkJICAgICAqIHJlc3BvbnNlICh0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gc3Vic2VxdWVudCByZXF1ZXN0cykuCi0JCSAgICAgKiBBdCB0aGlzIHBvaW50LCBJIGFtIHByZXN1bWluZyB0aGF0IHRoZSBicm93c2VyIHdpbGwKLQkJICAgICAqIHJlc2VuZCB0aGUgYXV0aG9yaXphdGlvbiB0b2tlbi4KLQkJICAgICAqLwotCQkgICAgbWVzc2FnZUluZm8uZ2V0TWFwKCkucHV0KEFVVEhfVFlQRV9JTkZPX0tFWSxtZWNoSUQpOworICAgICAgICAgICAgcmV0dXJuIHNlbmRGYWlsdXJlTWVzc2FnZQorICAgICAgICAgICAgICAgIChyZXNwb25zZSwKKyAgICAgICAgICAgICAgICAgSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19JTlRFUk5BTF9TRVJWRVJfRVJST1IsCisgICAgICAgICAgICAgICAgICJGYWlsZWQgc2V0dGluZyBjYWxsZXIgcHJpbmNpcGFsIik7CisgICAgICAgICAgICB9CiAKLQkJICAgIGlmIChkZWJ1ZyB8fCBsb2dnZXIuaXNMb2dnYWJsZShMZXZlbC5GSU5FKSl7Ci0JCQlsb2dnZXIubG9nKGRlYnVnTGV2ZWwsImptYWMuZ3NzX2RpYWxvZ19jb21wbGV0ZSIpOwotCQkgICAgfQorICAgICAgICAgICAgLyogd2UgbWF5IG5lZWQgdG8gYWRkIHNvbWV0aGluZyBsaWtlIGEgY29va2llIHRvIHRoZQorICAgICAgICAgICAgICogcmVzcG9uc2UgKHRoYXQgd2lsbCBiZSByZXR1cm5lZCBpbiBzdWJzZXF1ZW50IHJlcXVlc3RzKS4KKyAgICAgICAgICAgICAqIEF0IHRoaXMgcG9pbnQsIEkgYW0gcHJlc3VtaW5nIHRoYXQgdGhlIGJyb3dzZXIgd2lsbAorICAgICAgICAgICAgICogcmVzZW5kIHRoZSBhdXRob3JpemF0aW9uIHRva2VuLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBtZXNzYWdlSW5mby5nZXRNYXAoKS5wdXQoQVVUSF9UWVBFX0lORk9fS0VZLG1lY2hJRCk7CiAKLQkJfQorICAgICAgICAgICAgaWYgKGRlYnVnIHx8IGxvZ2dlci5pc0xvZ2dhYmxlKExldmVsLkZJTkUpKXsKKyAgICAgICAgICAgIGxvZ2dlci5sb2coZGVidWdMZXZlbCwiam1hYy5nc3NfZGlhbG9nX2NvbXBsZXRlIik7CisgICAgICAgICAgICB9CiAKLQkgICAgfSBjYXRjaCAoR1NTRXhjZXB0aW9uIGdzc2UpIHsKKyAgICAgICAgfQogCi0JCWlmIChyZXF1ZXN0VG9rZW4gIT0gbnVsbCkgeworICAgICAgICB9IGNhdGNoIChHU1NFeGNlcHRpb24gZ3NzZSkgewogCi0JCSAgICBkZWJ1Z1Rva2VuKCJqbWFjLnNlcnZsZXQuYXV0aG9yaXphdGlvbi50b2tlbiIsCi0JCQkgICAgICAgcmVxdWVzdFRva2VuKTsKKyAgICAgICAgaWYgKHJlcXVlc3RUb2tlbiAhPSBudWxsKSB7CiAKLQkJICAgIGlmIChpc05UTE1Ub2tlbihyZXF1ZXN0VG9rZW4pKSB7CisgICAgICAgICAgICBkZWJ1Z1Rva2VuKCJqbWFjLnNlcnZsZXQuYXV0aG9yaXphdGlvbi50b2tlbiIsCisgICAgICAgICAgICAgICAgICAgcmVxdWVzdFRva2VuKTsKIAotCQkJLy8gdW50aWwgd2UgYWRkIHN1cHBvcnQgZm9yIE5UTE0KLQkJCXJldHVybiBzZW5kRmFpbHVyZU1lc3NhZ2UKLQkJCSAgICAocmVzcG9uc2UsCi0JCQkgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfTk9UX0lNUExFTUVOVEVELAotCQkJICAgICAiTm8gc3VwcG9ydCBmb3IgTlRMTSIpOwotCQkgICAgfQotCQl9IAorICAgICAgICAgICAgaWYgKGlzTlRMTVRva2VuKHJlcXVlc3RUb2tlbikpIHsKIAotCQlpZiAoZGVidWcgfHwgbG9nZ2VyLmlzTG9nZ2FibGUoTGV2ZWwuRklORSkpewotCQkgICAgbG9nZ2VyLmxvZyhkZWJ1Z0xldmVsLCJqbWFjLmdzc19kaWFsb2dfZmFpbGVkIixnc3NlKTsKLQkJfQorICAgICAgICAgICAgLy8gdW50aWwgd2UgYWRkIHN1cHBvcnQgZm9yIE5UTE0KKyAgICAgICAgICAgIHJldHVybiBzZW5kRmFpbHVyZU1lc3NhZ2UKKyAgICAgICAgICAgICAgICAocmVzcG9uc2UsCisgICAgICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfTk9UX0lNUExFTUVOVEVELAorICAgICAgICAgICAgICAgICAiTm8gc3VwcG9ydCBmb3IgTlRMTSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAKLQkJLy8gZm9yIG90aGVyIGVycm9ycyB0aHJvdyBhbiBBdXRoRXhjZXB0aW9uCisgICAgICAgIGlmIChkZWJ1ZyB8fCBsb2dnZXIuaXNMb2dnYWJsZShMZXZlbC5GSU5FKSl7CisgICAgICAgICAgICBsb2dnZXIubG9nKGRlYnVnTGV2ZWwsImptYWMuZ3NzX2RpYWxvZ19mYWlsZWQiLGdzc2UpOworICAgICAgICB9CiAKLQkJQXV0aEV4Y2VwdGlvbiBhZSA9IG5ldyBBdXRoRXhjZXB0aW9uKCk7Ci0JCWFlLmluaXRDYXVzZShnc3NlKTsKLQkJdGhyb3cgYWU7Ci0JICAgIH0KKyAgICAgICAgLy8gZm9yIG90aGVyIGVycm9ycyB0aHJvdyBhbiBBdXRoRXhjZXB0aW9uCiAKLQl9IGVsc2UgaWYgKHRoaXMuaXNNYW5kYXRvcnkpIHsKKyAgICAgICAgQXV0aEV4Y2VwdGlvbiBhZSA9IG5ldyBBdXRoRXhjZXB0aW9uKCk7CisgICAgICAgIGFlLmluaXRDYXVzZShnc3NlKTsKKyAgICAgICAgdGhyb3cgYWU7CisgICAgICAgIH0KIAotCSAgICByZXNwb25zZS5zZXRIZWFkZXIoQVVUSEVOVElDQVRJT05fSEVBREVSLE5FR09USUFURSk7Ci0JICAgIHJlc3BvbnNlLnNldFN0YXR1cyhIdHRwU2VydmxldFJlc3BvbnNlLlNDX1VOQVVUSE9SSVpFRCk7CisgICAgfSBlbHNlIGlmICh0aGlzLmlzTWFuZGF0b3J5KSB7CiAKLQkgICAgaWYgKGRlYnVnIHx8IGxvZ2dlci5pc0xvZ2dhYmxlKExldmVsLkZJTkUpKXsKLQkJbG9nZ2VyLmxvZyhkZWJ1Z0xldmVsLCJqbWFjLnNldmxldF9oZWFkZXJfYWRkZWRfdG9fcmVzcG9uc2UiLAotCQkJICAgTkVHT1RJQVRFKTsKLQkgICAgfQorICAgICAgICByZXNwb25zZS5zZXRIZWFkZXIoQVVUSEVOVElDQVRJT05fSEVBREVSLE5FR09USUFURSk7CisgICAgICAgIHJlc3BvbnNlLnNldFN0YXR1cyhIdHRwU2VydmxldFJlc3BvbnNlLlNDX1VOQVVUSE9SSVpFRCk7CiAKLQkgICAgcmV0dXJuIEF1dGhTdGF0dXMuU0VORF9DT05USU5VRTsKKyAgICAgICAgaWYgKGRlYnVnIHx8IGxvZ2dlci5pc0xvZ2dhYmxlKExldmVsLkZJTkUpKXsKKyAgICAgICAgbG9nZ2VyLmxvZyhkZWJ1Z0xldmVsLCJqbWFjLnNldmxldF9oZWFkZXJfYWRkZWRfdG9fcmVzcG9uc2UiLAorICAgICAgICAgICAgICAgTkVHT1RJQVRFKTsKKyAgICAgICAgfQogCi0JfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIEF1dGhTdGF0dXMuU0VORF9DT05USU5VRTsKIAotCSAgICBpZiAoYXV0aG9yaXphdGlvbiAhPSBudWxsKSB7Ci0JCWxvZ2dlci53YXJuaW5nKCJqbWFjLnNlcnZsZXRfYXV0aG9yaXphdGlvbl9oZWFkZXJfaWdub3JlZCIpOwotCSAgICB9CisgICAgfSBlbHNlIHsKIAotCSAgICBpZiAoIXNldENhbGxlclByaW5jaXBhbChudWxsLGNsaWVudFN1YmplY3QpKSB7Ci0JCXJldHVybiBzZW5kRmFpbHVyZU1lc3NhZ2UKLQkJICAgIChyZXNwb25zZSwKLQkJICAgICBIdHRwU2VydmxldFJlc3BvbnNlLlNDX0lOVEVSTkFMX1NFUlZFUl9FUlJPUiwKLQkJICAgICAiRmFpbGVkIHNldHRpbmcgdW5hdXRoZW50aWNhdGVkIGNhbGxlciBwcmluY2lwYWwiKTsKLQkgICAgfQorICAgICAgICBpZiAoYXV0aG9yaXphdGlvbiAhPSBudWxsKSB7CisgICAgICAgIGxvZ2dlci53YXJuaW5nKCJqbWFjLnNlcnZsZXRfYXV0aG9yaXphdGlvbl9oZWFkZXJfaWdub3JlZCIpOworICAgICAgICB9CiAKLQl9CisgICAgICAgIGlmICghc2V0Q2FsbGVyUHJpbmNpcGFsKG51bGwsY2xpZW50U3ViamVjdCkpIHsKKyAgICAgICAgcmV0dXJuIHNlbmRGYWlsdXJlTWVzc2FnZQorICAgICAgICAgICAgKHJlc3BvbnNlLAorICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfSU5URVJOQUxfU0VSVkVSX0VSUk9SLAorICAgICAgICAgICAgICJGYWlsZWQgc2V0dGluZyB1bmF1dGhlbnRpY2F0ZWQgY2FsbGVyIHByaW5jaXBhbCIpOworICAgICAgICB9CiAKLQlyZXR1cm4gQXV0aFN0YXR1cy5TVUNDRVNTOworICAgIH0KKworICAgIHJldHVybiBBdXRoU3RhdHVzLlNVQ0NFU1M7CiAgICAgfQogCiAgICAgLyoqCkBAIC00MDIsMzMgKzQwMiwzMyBAQAogICAgICAqIGJ5IHJldHVybmluZyBhbiBBdXRoU3RhdHVzIHZhbHVlIG9yIGJ5IHRocm93aW5nIGFuIEF1dGhFeGNlcHRpb24uCiAgICAgICoKICAgICAgKiBAcGFyYW0gbWVzc2FnZUluZm8gQSBjb250ZXh0dWFsIG9iamVjdCB0aGF0IGVuY2Fwc3VsYXRlcyB0aGUKLSAgICAgKiAgICAgICAgICBjbGllbnQgcmVxdWVzdCBhbmQgc2VydmVyIHJlc3BvbnNlIG9iamVjdHMsIGFuZCB0aGF0IG1heSBiZSAKLSAgICAgKiAgICAgICAgICB1c2VkIHRvIHNhdmUgc3RhdGUgYWNyb3NzIGEgc2VxdWVuY2Ugb2YgY2FsbHMgbWFkZSB0byB0aGUgCi0gICAgICogICAgICAgICAgbWV0aG9kcyBvZiB0aGlzIGludGVyZmFjZSBmb3IgdGhlIHB1cnBvc2Ugb2YgY29tcGxldGluZyBhIAorICAgICAqICAgICAgICAgIGNsaWVudCByZXF1ZXN0IGFuZCBzZXJ2ZXIgcmVzcG9uc2Ugb2JqZWN0cywgYW5kIHRoYXQgbWF5IGJlCisgICAgICogICAgICAgICAgdXNlZCB0byBzYXZlIHN0YXRlIGFjcm9zcyBhIHNlcXVlbmNlIG9mIGNhbGxzIG1hZGUgdG8gdGhlCisgICAgICogICAgICAgICAgbWV0aG9kcyBvZiB0aGlzIGludGVyZmFjZSBmb3IgdGhlIHB1cnBvc2Ugb2YgY29tcGxldGluZyBhCiAgICAgICogICAgICAgICAgc2VjdXJlIG1lc3NhZ2UgZXhjaGFuZ2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gc2VydmljZVN1YmplY3QgQSBTdWJqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgc291cmNlIG9mIHRoZSAKKyAgICAgKiBAcGFyYW0gc2VydmljZVN1YmplY3QgQSBTdWJqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgc291cmNlIG9mIHRoZQogICAgICAqICAgICAgICAgIHNlcnZpY2UKICAgICAgKiAgICAgICAgICByZXNwb25zZSwgb3IgbnVsbC4gSXQgbWF5IGJlIHVzZWQgYnkgdGhlIG1ldGhvZCBpbXBsZW1lbnRhdGlvbgotICAgICAqICAgICAgICAgIHRvIHJldHJpZXZlIFByaW5jaXBhbHMgYW5kIGNyZWRlbnRpYWxzIG5lY2Vzc2FyeSB0byBzZWN1cmUgCi0gICAgICogICAgICAgICAgdGhlIHJlc3BvbnNlLiBJZiB0aGUgU3ViamVjdCBpcyBub3QgbnVsbCwgCi0gICAgICogICAgICAgICAgdGhlIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBtYXkgYWRkIGFkZGl0aW9uYWwgUHJpbmNpcGFscyBvciAKLSAgICAgKiAgICAgICAgICBjcmVkZW50aWFscyAocGVydGFpbmluZyB0byB0aGUgc291cmNlIG9mIHRoZSBzZXJ2aWNlIAorICAgICAqICAgICAgICAgIHRvIHJldHJpZXZlIFByaW5jaXBhbHMgYW5kIGNyZWRlbnRpYWxzIG5lY2Vzc2FyeSB0byBzZWN1cmUKKyAgICAgKiAgICAgICAgICB0aGUgcmVzcG9uc2UuIElmIHRoZSBTdWJqZWN0IGlzIG5vdCBudWxsLAorICAgICAqICAgICAgICAgIHRoZSBtZXRob2QgaW1wbGVtZW50YXRpb24gbWF5IGFkZCBhZGRpdGlvbmFsIFByaW5jaXBhbHMgb3IKKyAgICAgKiAgICAgICAgICBjcmVkZW50aWFscyAocGVydGFpbmluZyB0byB0aGUgc291cmNlIG9mIHRoZSBzZXJ2aWNlCiAgICAgICogICAgICAgICAgcmVzcG9uc2UpIHRvIHRoZSBTdWJqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiBBbiBBdXRoU3RhdHVzIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNvbXBsZXRpb24gc3RhdHVzIG9mCi0gICAgICogICAgICAgICAgdGhlIHByb2Nlc3NpbmcgcGVyZm9ybWVkIGJ5IHRoZSBtZXRob2QuIAotICAgICAqICAgICAgICAgIFRoZSBBdXRoU3RhdHVzIHZhbHVlcyB0aGF0IG1heSBiZSByZXR1cm5lZCBieSB0aGlzIG1ldGhvZCAKKyAgICAgKiAgICAgICAgICB0aGUgcHJvY2Vzc2luZyBwZXJmb3JtZWQgYnkgdGhlIG1ldGhvZC4KKyAgICAgKiAgICAgICAgICBUaGUgQXV0aFN0YXR1cyB2YWx1ZXMgdGhhdCBtYXkgYmUgcmV0dXJuZWQgYnkgdGhpcyBtZXRob2QKICAgICAgKiAgICAgICAgICBhcmUgZGVmaW5lZCBhcyBmb2xsb3dzOgogICAgICAqCiAgICAgICogPHVsPgotICAgICAqIDxsaT4gQXV0aFN0YXR1cy5TRU5EX1NVQ0NFU1Mgd2hlbiB0aGUgYXBwbGljYXRpb24gcmVzcG9uc2UgCisgICAgICogPGxpPiBBdXRoU3RhdHVzLlNFTkRfU1VDQ0VTUyB3aGVuIHRoZSBhcHBsaWNhdGlvbiByZXNwb25zZQogICAgICAqIG1lc3NhZ2Ugd2FzIHN1Y2Nlc3NmdWxseSBzZWN1cmVkLiBUaGUgc2VjdXJlZCByZXNwb25zZSBtZXNzYWdlIG1heSBiZQogICAgICAqIG9idGFpbmVkIGJ5IGNhbGxpbmcgZ2V0UmVzcG9uc2VNZXNzYWdlIG9uIG1lc3NhZ2VJbmZvLgogICAgICAqCi0gICAgICogPGxpPiBBdXRoU3RhdHVzLlNFTkRfQ09OVElOVUUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgYXBwbGljYXRpb24gcmVzcG9uc2UgCi0gICAgICogbWVzc2FnZSAod2l0aGluIG1lc3NhZ2VJbmZvKSB3YXMgcmVwbGFjZWQgd2l0aCBhIHNlY3VyaXR5IG1lc3NhZ2UgCi0gICAgICogdGhhdCBzaG91bGQgZWxpY2l0IGEgc2VjdXJpdHktc3BlY2lmaWMgcmVzcG9uc2UgKGluIHRoZSBmb3JtIG9mIGEgCisgICAgICogPGxpPiBBdXRoU3RhdHVzLlNFTkRfQ09OVElOVUUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgYXBwbGljYXRpb24gcmVzcG9uc2UKKyAgICAgKiBtZXNzYWdlICh3aXRoaW4gbWVzc2FnZUluZm8pIHdhcyByZXBsYWNlZCB3aXRoIGEgc2VjdXJpdHkgbWVzc2FnZQorICAgICAqIHRoYXQgc2hvdWxkIGVsaWNpdCBhIHNlY3VyaXR5LXNwZWNpZmljIHJlc3BvbnNlIChpbiB0aGUgZm9ybSBvZiBhCiAgICAgICogcmVxdWVzdCkgZnJvbSB0aGUgcGVlci4KICAgICAgKgogICAgICAqIFRoaXMgc3RhdHVzIHZhbHVlIHNlcnZlcyB0byBpbmZvcm0gdGhlIGNhbGxpbmcgcnVudGltZSB0aGF0CkBAIC00MzcsNyArNDM3LDcgQEAKICAgICAgKiBhdCBsZWFzdCBvbmUgYWRkaXRpb25hbCByZXF1ZXN0L3Jlc3BvbnNlIGV4Y2hhbmdlIChhZnRlciBoYXZpbmcKICAgICAgKiBzZW50IHRoZSByZXNwb25zZSBtZXNzYWdlIHJldHVybmVkIGluIG1lc3NhZ2VJbmZvKS4KICAgICAgKgotICAgICAqIFdoZW4gdGhpcyBzdGF0dXMgdmFsdWUgaXMgcmV0dXJuZWQsIHRoZSBhcHBsaWNhdGlvbiByZXNwb25zZSBtdXN0IAorICAgICAqIFdoZW4gdGhpcyBzdGF0dXMgdmFsdWUgaXMgcmV0dXJuZWQsIHRoZSBhcHBsaWNhdGlvbiByZXNwb25zZSBtdXN0CiAgICAgICogYmUgc2F2ZWQgYnkgdGhlIGF1dGhlbnRpY2F0aW9uIG1vZHVsZSBzdWNoIHRoYXQgaXQgY2FuIGJlIHJlY292ZXJlZAogICAgICAqIHdoZW4gdGhlIG1vZHVsZSdzIHZhbGlkYXRlUmVxdWVzdCBtZXNzYWdlIGlzIGNhbGxlZCB0byBwcm9jZXNzCiAgICAgICogdGhlIGVsaWNpdGVkIHJlc3BvbnNlLgpAQCAtNDUwLDE1OCArNDUwLDE1OCBAQAogICAgICAqIEBleGNlcHRpb24gQXV0aEV4Y2VwdGlvbiBXaGVuIHRoZSBtZXNzYWdlIHByb2Nlc3NpbmcgZmFpbGVkIHdpdGhvdXQKICAgICAgKiAgICAgICAgICBlc3RhYmxpc2hpbmcgYSBmYWlsdXJlIHJlc3BvbnNlIG1lc3NhZ2UgKGluIG1lc3NhZ2VJbmZvKS4KICAgICAgKi8KLSAgICBwdWJsaWMgQXV0aFN0YXR1cyBzZWN1cmVSZXNwb25zZShNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbywgCi0JU3ViamVjdCBzZXJ2aWNlU3ViamVjdCkgdGhyb3dzIEF1dGhFeGNlcHRpb24geyAKLQlyZXR1cm4gQXV0aFN0YXR1cy5TRU5EX1NVQ0NFU1M7CisgICAgcHVibGljIEF1dGhTdGF0dXMgc2VjdXJlUmVzcG9uc2UoTWVzc2FnZUluZm8gbWVzc2FnZUluZm8sCisgICAgU3ViamVjdCBzZXJ2aWNlU3ViamVjdCkgdGhyb3dzIEF1dGhFeGNlcHRpb24geworICAgIHJldHVybiBBdXRoU3RhdHVzLlNFTkRfU1VDQ0VTUzsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBSZW1vdmUgbWV0aG9kIHNwZWNpZmljIHByaW5jaXBhbHMgYW5kIGNyZWRlbnRpYWxzIGZyb20gdGhlIHN1YmplY3QuCiAgICAgICoKICAgICAgKiBAcGFyYW0gbWVzc2FnZUluZm8gYSBjb250ZXh0dWFsIG9iamVjdCB0aGF0IGVuY2Fwc3VsYXRlcyB0aGUKLSAgICAgKiAgICAgICAgICBjbGllbnQgcmVxdWVzdCBhbmQgc2VydmVyIHJlc3BvbnNlIG9iamVjdHMsIGFuZCB0aGF0IG1heSBiZSAKLSAgICAgKiAgICAgICAgICB1c2VkIHRvIHNhdmUgc3RhdGUgYWNyb3NzIGEgc2VxdWVuY2Ugb2YgY2FsbHMgbWFkZSB0byB0aGUgCi0gICAgICogICAgICAgICAgbWV0aG9kcyBvZiB0aGlzIGludGVyZmFjZSBmb3IgdGhlIHB1cnBvc2Ugb2YgY29tcGxldGluZyBhIAorICAgICAqICAgICAgICAgIGNsaWVudCByZXF1ZXN0IGFuZCBzZXJ2ZXIgcmVzcG9uc2Ugb2JqZWN0cywgYW5kIHRoYXQgbWF5IGJlCisgICAgICogICAgICAgICAgdXNlZCB0byBzYXZlIHN0YXRlIGFjcm9zcyBhIHNlcXVlbmNlIG9mIGNhbGxzIG1hZGUgdG8gdGhlCisgICAgICogICAgICAgICAgbWV0aG9kcyBvZiB0aGlzIGludGVyZmFjZSBmb3IgdGhlIHB1cnBvc2Ugb2YgY29tcGxldGluZyBhCiAgICAgICogICAgICAgICAgc2VjdXJlIG1lc3NhZ2UgZXhjaGFuZ2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gc3ViamVjdCB0aGUgU3ViamVjdCBpbnN0YW5jZSBmcm9tIHdoaWNoIHRoZSBQcmluY2lwYWxzIGFuZCAKKyAgICAgKiBAcGFyYW0gc3ViamVjdCB0aGUgU3ViamVjdCBpbnN0YW5jZSBmcm9tIHdoaWNoIHRoZSBQcmluY2lwYWxzIGFuZAogICAgICAqICAgICAgICAgIGNyZWRlbnRpYWxzIGFyZSB0byBiZSByZW1vdmVkLgogICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBBdXRoRXhjZXB0aW9uIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIFN1YmplY3QgCisgICAgICogQGV4Y2VwdGlvbiBBdXRoRXhjZXB0aW9uIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIFN1YmplY3QKICAgICAgKiAgICAgICAgICBwcm9jZXNzaW5nLgogICAgICAqLwogCiAgICAgcHVibGljIHZvaWQgY2xlYW5TdWJqZWN0KE1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvLCBTdWJqZWN0IHN1YmplY3QpCi0JdGhyb3dzIEF1dGhFeGNlcHRpb24geworICAgIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKICAgICB9CiAKICAgICBBdXRoU3RhdHVzIHNlbmRGYWlsdXJlTWVzc2FnZShIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLAotCQkJCSAgaW50IHN0YXR1cywgU3RyaW5nIG1lc3NhZ2UpewotCXRyeSB7Ci0JICAgIHJlc3BvbnNlLnNldFN0YXR1cyhzdGF0dXMpOwotCSAgICByZXNwb25zZS5zZW5kRXJyb3Ioc3RhdHVzLG1lc3NhZ2UpOwotCX0gY2F0Y2ggKFRocm93YWJsZSB0KSB7Ci0JICAgIC8vIHN0YXR1cyBjb2RlIGhhcyBiZWVuIHNldCwgYW5kIHByb3BlciBBdXRoU3RhdHVzIHdpbGwgYmUgcmV0dXJuZWQKLQkgICAgbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCJqbWFjLnNlcnZsZXRfZmFpbGVkX3NlbmRpbmdfZmFpbHVyZSIsdCk7Ci0JfSBmaW5hbGx5IHsKLQkgICAgcmV0dXJuIEF1dGhTdGF0dXMuU0VORF9GQUlMVVJFOwotCX0KKyAgICAgICAgICAgICAgICAgIGludCBzdGF0dXMsIFN0cmluZyBtZXNzYWdlKXsKKyAgICB0cnkgeworICAgICAgICByZXNwb25zZS5zZXRTdGF0dXMoc3RhdHVzKTsKKyAgICAgICAgcmVzcG9uc2Uuc2VuZEVycm9yKHN0YXR1cyxtZXNzYWdlKTsKKyAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgeworICAgICAgICAvLyBzdGF0dXMgY29kZSBoYXMgYmVlbiBzZXQsIGFuZCBwcm9wZXIgQXV0aFN0YXR1cyB3aWxsIGJlIHJldHVybmVkCisgICAgICAgIGxvZ2dlci5sb2coTGV2ZWwuV0FSTklORywiam1hYy5zZXJ2bGV0X2ZhaWxlZF9zZW5kaW5nX2ZhaWx1cmUiLHQpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHJldHVybiBBdXRoU3RhdHVzLlNFTkRfRkFJTFVSRTsKKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIHNldENhbGxlclByaW5jaXBhbChHU1NOYW1lIG5hbWUsU3ViamVjdCBjbGllbnRTdWJqZWN0KSB7Ci0JCi0JUHJpbmNpcGFsIGNhbGxlciA9IG51bGw7CiAKLQlpZiAobmFtZSAhPSBudWxsKSB7CisgICAgUHJpbmNpcGFsIGNhbGxlciA9IG51bGw7CiAKLQkgICAgLy8gY3JlYXRlIFN1YmplY3Qgd2l0aCBwcmluY2lwYWxzIGZyb20gbmFtZQotCSAgICBTdWJqZWN0IHMgPSBHU1NVdGlsLmNyZWF0ZVN1YmplY3QobmFtZSxudWxsKTsKKyAgICBpZiAobmFtZSAhPSBudWxsKSB7CiAKLQkgICAgU2V0IHByaW5jaXBhbHMgPSBzLmdldFByaW5jaXBhbHMoKTsKLSAgICAgICAKLQkgICAgaWYgKHByaW5jaXBhbHMuc2l6ZSgpID4gMCkgeworICAgICAgICAvLyBjcmVhdGUgU3ViamVjdCB3aXRoIHByaW5jaXBhbHMgZnJvbSBuYW1lCisgICAgICAgIFN1YmplY3QgcyA9IEdTU1V0aWwuY3JlYXRlU3ViamVjdChuYW1lLG51bGwpOwogCi0JCWNsaWVudFN1YmplY3QuZ2V0UHJpbmNpcGFscygpLmFkZEFsbChwcmluY2lwYWxzKTsKKyAgICAgICAgU2V0IHByaW5jaXBhbHMgPSBzLmdldFByaW5jaXBhbHMoKTsKIAotCQkvLyBpZiBtb3JlIHRoYW4gMSBwcmluLCBjYWxsZXIgc2VsZWN0aW9uIGlzIHVucHJlZGljdGFibGUKKyAgICAgICAgaWYgKHByaW5jaXBhbHMuc2l6ZSgpID4gMCkgewogCi0JCWNhbGxlciA9IChQcmluY2lwYWwpIHByaW5jaXBhbHMuaXRlcmF0b3IoKS5uZXh0KCk7Ci0JICAgIH0gZWxzZSBpZiAoZGVidWcgfHwgbG9nZ2VyLmlzTG9nZ2FibGUoTGV2ZWwuRklORSkpewotCQlsb2dnZXIubG9nKGRlYnVnTGV2ZWwsImptYWMubm9fZ3NzX2NhbGxlcl9wcmluY2lwYWwiKTsKLQkgICAgfQotCX0KKyAgICAgICAgY2xpZW50U3ViamVjdC5nZXRQcmluY2lwYWxzKCkuYWRkQWxsKHByaW5jaXBhbHMpOwogCi0JQ2FsbGVyUHJpbmNpcGFsQ2FsbGJhY2sgY1BDQiA9IAotCSAgICBuZXcgQ2FsbGVyUHJpbmNpcGFsQ2FsbGJhY2soY2xpZW50U3ViamVjdCxjYWxsZXIpOworICAgICAgICAvLyBpZiBtb3JlIHRoYW4gMSBwcmluLCBjYWxsZXIgc2VsZWN0aW9uIGlzIHVucHJlZGljdGFibGUKIAotCUdyb3VwUHJpbmNpcGFsQ2FsbGJhY2sgZ1BDQiA9IG5ldyBHcm91cFByaW5jaXBhbENhbGxiYWNrCi0JICAgIChjbGllbnRTdWJqZWN0LChjYWxsZXIgPT0gbnVsbCA/IG51bGwgOiBhc3NpZ25lZEdyb3VwcykpOworICAgICAgICBjYWxsZXIgPSAoUHJpbmNpcGFsKSBwcmluY2lwYWxzLml0ZXJhdG9yKCkubmV4dCgpOworICAgICAgICB9IGVsc2UgaWYgKGRlYnVnIHx8IGxvZ2dlci5pc0xvZ2dhYmxlKExldmVsLkZJTkUpKXsKKyAgICAgICAgbG9nZ2VyLmxvZyhkZWJ1Z0xldmVsLCJqbWFjLm5vX2dzc19jYWxsZXJfcHJpbmNpcGFsIik7CisgICAgICAgIH0KKyAgICB9CiAKLQl0cnkgewotCSAgICBoYW5kbGVyLmhhbmRsZShuZXcgQ2FsbGJhY2tbXSB7IGNQQ0IsIGdQQ0IgfSApOwotCSAgICBpZiAoZGVidWcgfHwgbG9nZ2VyLmlzTG9nZ2FibGUoTGV2ZWwuRklORSkpewotCQlsb2dnZXIubG9nKGRlYnVnTGV2ZWwsImptYWMuY2FsbGVyX3ByaW5jaXBhbCIsCi0JCQkgICBuZXcgT2JqZWN0W10geyBjYWxsZXIgfSApOwotCSAgICB9Ci0JICAgIHJldHVybiB0cnVlOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIC8vIHNob3VsZCBub3QgaGFwcGVuCi0JICAgIGxvZ2dlci5sb2coTGV2ZWwuV0FSTklORywiam1hYy5mYWlsZWRfdG9fc2V0X2NhbGxlciIsZSk7Ci0JfSAKKyAgICBDYWxsZXJQcmluY2lwYWxDYWxsYmFjayBjUENCID0KKyAgICAgICAgbmV3IENhbGxlclByaW5jaXBhbENhbGxiYWNrKGNsaWVudFN1YmplY3QsY2FsbGVyKTsKIAotCXJldHVybiBmYWxzZTsKKyAgICBHcm91cFByaW5jaXBhbENhbGxiYWNrIGdQQ0IgPSBuZXcgR3JvdXBQcmluY2lwYWxDYWxsYmFjaworICAgICAgICAoY2xpZW50U3ViamVjdCwoY2FsbGVyID09IG51bGwgPyBudWxsIDogYXNzaWduZWRHcm91cHMpKTsKKworICAgIHRyeSB7CisgICAgICAgIGhhbmRsZXIuaGFuZGxlKG5ldyBDYWxsYmFja1tdIHsgY1BDQiwgZ1BDQiB9ICk7CisgICAgICAgIGlmIChkZWJ1ZyB8fCBsb2dnZXIuaXNMb2dnYWJsZShMZXZlbC5GSU5FKSl7CisgICAgICAgIGxvZ2dlci5sb2coZGVidWdMZXZlbCwiam1hYy5jYWxsZXJfcHJpbmNpcGFsIiwKKyAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7IGNhbGxlciB9ICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgLy8gc2hvdWxkIG5vdCBoYXBwZW4KKyAgICAgICAgbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCJqbWFjLmZhaWxlZF90b19zZXRfY2FsbGVyIixlKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgYm9vbGVhbiBpc05UTE1Ub2tlbihieXRlW10gYnl0ZXMpIHsKIAotCVN0cmluZyBzID0gbmV3IFN0cmluZyhieXRlcyk7Ci0JcmV0dXJuIHMuc3RhcnRzV2l0aChOVExNX0lOSVRJQUxfVE9LRU4pOworICAgIFN0cmluZyBzID0gbmV3IFN0cmluZyhieXRlcyk7CisgICAgcmV0dXJuIHMuc3RhcnRzV2l0aChOVExNX0lOSVRJQUxfVE9LRU4pOwogICAgIH0KIAogICAgIHZvaWQgZGVidWdUb2tlbihTdHJpbmcgbWVzc2FnZSwgYnl0ZVtdIGJ5dGVzKSB7CiAKLQlpZiAoZGVidWcgfHwgbG9nZ2VyLmlzTG9nZ2FibGUoTGV2ZWwuRklORSkpIHsKKyAgICBpZiAoZGVidWcgfHwgbG9nZ2VyLmlzTG9nZ2FibGUoTGV2ZWwuRklORSkpIHsKIAotCSAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JICAgIHNiLmFwcGVuZCgiXG4iKTsKLQkgICAgc2IuYXBwZW5kKCJUb2tlbiAiICsgCi0JCSAgICAgIChCYXNlNjQuaXNBcnJheUJ5dGVCYXNlNjQoYnl0ZXMpID8gImlzIiA6ICJpcyBOb3QiKSArCi0JCSAgICAgICIgQmFzZTY0IGVuY29kZWQiICsgIlxuIik7Ci0JICAgIHNiLmFwcGVuZCgiYnl0ZXM6ICIgKTsKLQkgICAgYm9vbGVhbiBmaXJzdCA9IHRydWU7Ci0JICAgIGZvciAoYnl0ZSBiIDogYnl0ZXMpIHsKLQkJaW50IGkgPSBiOwotCQlpZiAoZmlyc3QpIHsKLQkJICAgIHNiLmFwcGVuZChpKTsKLQkJICAgIGZpcnN0ID0gZmFsc2U7Ci0JCX0gZWxzZSB7Ci0JCSAgICBzYi5hcHBlbmQoIiwgIiArIGkpOwotCQl9Ci0JICAgIH0KKyAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBzYi5hcHBlbmQoIlxuIik7CisgICAgICAgIHNiLmFwcGVuZCgiVG9rZW4gIiArCisgICAgICAgICAgICAgIChCYXNlNjQuaXNBcnJheUJ5dGVCYXNlNjQoYnl0ZXMpID8gImlzIiA6ICJpcyBOb3QiKSArCisgICAgICAgICAgICAgICIgQmFzZTY0IGVuY29kZWQiICsgIlxuIik7CisgICAgICAgIHNiLmFwcGVuZCgiYnl0ZXM6ICIgKTsKKyAgICAgICAgYm9vbGVhbiBmaXJzdCA9IHRydWU7CisgICAgICAgIGZvciAoYnl0ZSBiIDogYnl0ZXMpIHsKKyAgICAgICAgaW50IGkgPSBiOworICAgICAgICBpZiAoZmlyc3QpIHsKKyAgICAgICAgICAgIHNiLmFwcGVuZChpKTsKKyAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzYi5hcHBlbmQoIiwgIiArIGkpOworICAgICAgICB9CisgICAgICAgIH0KIAotCSAgICBsb2dnZXIubG9nKGRlYnVnTGV2ZWwsbWVzc2FnZSxzYik7Ci0JfQorICAgICAgICBsb2dnZXIubG9nKGRlYnVnTGV2ZWwsbWVzc2FnZSxzYik7CisgICAgfQogICAgIH0KIAogICAgIHZvaWQgZGVidWdSZXF1ZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KSB7CiAKLQlpZiAoZGVidWcgfHwgbG9nZ2VyLmlzTG9nZ2FibGUoTGV2ZWwuRklORSkpewotCSAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JICAgIHNiLmFwcGVuZCgiXG4iKTsKLQkgICAgdHJ5IHsKLQkJc2IuYXBwZW5kKCJSZXF1ZXN0OiAiICtyZXF1ZXN0LmdldFJlcXVlc3RVUkwoKSArICJcbiIpOwotCQlzYi5hcHBlbmQoIlVzZXJQcmluY2lwYWw6ICIgKyByZXF1ZXN0LmdldFVzZXJQcmluY2lwYWwoKSArICJcbiIpOwotCQlzYi5hcHBlbmQoIkF1dGhUeXBlOiAiICsgcmVxdWVzdC5nZXRBdXRoVHlwZSgpKyAiXG4iKTsKLQkJc2IuYXBwZW5kKCJIZWFkZXJzOiIgKyAiXG4iKTsKLQkJRW51bWVyYXRpb24gbmFtZXMgPSByZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7Ci0JCXdoaWxlIChuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSkgewotCQkgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKSBuYW1lcy5uZXh0RWxlbWVudCgpOwotCQkgICAgc2IuYXBwZW5kKCJcdCIgKyBuYW1lICsgIlx0IiArIHJlcXVlc3QuZ2V0SGVhZGVyKG5hbWUpICsgIlxuIik7Ci0JCX0KLQkJCi0JCWxvZ2dlci5sb2coZGVidWdMZXZlbCwiam1hYy5zZXJ2bGV0X3JlcXVlc3QiLHNiKTsKKyAgICBpZiAoZGVidWcgfHwgbG9nZ2VyLmlzTG9nZ2FibGUoTGV2ZWwuRklORSkpeworICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIHNiLmFwcGVuZCgiXG4iKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgc2IuYXBwZW5kKCJSZXF1ZXN0OiAiICtyZXF1ZXN0LmdldFJlcXVlc3RVUkwoKSArICJcbiIpOworICAgICAgICBzYi5hcHBlbmQoIlVzZXJQcmluY2lwYWw6ICIgKyByZXF1ZXN0LmdldFVzZXJQcmluY2lwYWwoKSArICJcbiIpOworICAgICAgICBzYi5hcHBlbmQoIkF1dGhUeXBlOiAiICsgcmVxdWVzdC5nZXRBdXRoVHlwZSgpKyAiXG4iKTsKKyAgICAgICAgc2IuYXBwZW5kKCJIZWFkZXJzOiIgKyAiXG4iKTsKKyAgICAgICAgRW51bWVyYXRpb24gbmFtZXMgPSByZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisgICAgICAgIHdoaWxlIChuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKSBuYW1lcy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgc2IuYXBwZW5kKCJcdCIgKyBuYW1lICsgIlx0IiArIHJlcXVlc3QuZ2V0SGVhZGVyKG5hbWUpICsgIlxuIik7CisgICAgICAgIH0KIAotCSAgICB9IGNhdGNoKFRocm93YWJsZSB0KSB7Ci0JCWxvZ2dlci5sb2coTGV2ZWwuV0FSTklORywiam1hYy5zZXJ2bGV0X2RlYnVnX3JlcXVlc3QiLHQpOwotCSAgICB9Ci0JfQorICAgICAgICBsb2dnZXIubG9nKGRlYnVnTGV2ZWwsImptYWMuc2VydmxldF9yZXF1ZXN0IixzYik7CisKKyAgICAgICAgfSBjYXRjaChUaHJvd2FibGUgdCkgeworICAgICAgICBsb2dnZXIubG9nKExldmVsLldBUk5JTkcsImptYWMuc2VydmxldF9kZWJ1Z19yZXF1ZXN0Iix0KTsKKyAgICAgICAgfQorICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIFN0cmluZ1tdIGdldEFzc2lnbmVkR3JvdXBOYW1lcygpIHsKLQlTdHJpbmcgZ3JvdXBMaXN0ID0gKFN0cmluZykgCi0JICAgIG9wdGlvbnMuZ2V0KEFTU0lHTl9HUk9VUFNfT1BUSU9OU19LRVkpOwotCVN0cmluZ1tdIGdyb3VwcyA9IG51bGw7Ci0JaWYgKGdyb3VwTGlzdCAhPSBudWxsKSB7Ci0JICAgIFN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSAKLQkJbmV3IFN0cmluZ1Rva2VuaXplcihncm91cExpc3QsIiAsOiw7Iik7Ci0JICAgIGludCBjb3VudCA9IHRva2VuaXplci5jb3VudFRva2VucygpOwotCSAgICBpZiAoY291bnQgPiAwKSB7Ci0JCWdyb3VwcyA9IG5ldyBTdHJpbmdbY291bnRdOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJICAgIGdyb3Vwc1tpXSA9IHRva2VuaXplci5uZXh0VG9rZW4oKTsKLQkJfQotCSAgICB9Ci0JfQotCXJldHVybiBncm91cHM7CisgICAgU3RyaW5nIGdyb3VwTGlzdCA9IChTdHJpbmcpCisgICAgICAgIG9wdGlvbnMuZ2V0KEFTU0lHTl9HUk9VUFNfT1BUSU9OU19LRVkpOworICAgIFN0cmluZ1tdIGdyb3VwcyA9IG51bGw7CisgICAgaWYgKGdyb3VwTGlzdCAhPSBudWxsKSB7CisgICAgICAgIFN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPQorICAgICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKGdyb3VwTGlzdCwiICw6LDsiKTsKKyAgICAgICAgaW50IGNvdW50ID0gdG9rZW5pemVyLmNvdW50VG9rZW5zKCk7CisgICAgICAgIGlmIChjb3VudCA+IDApIHsKKyAgICAgICAgZ3JvdXBzID0gbmV3IFN0cmluZ1tjb3VudF07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgZ3JvdXBzW2ldID0gdG9rZW5pemVyLm5leHRUb2tlbigpOworICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGdyb3VwczsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9idWlsZC54bWwKaW5kZXggOWQwYzEyYS4uYTNiMjAwYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2J1aWxkLnhtbApAQCAtODUsOCArODUsOCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJlamIiPgogICAgICAgICA8YW50IGRpcj0ibmVnYXRpdmVSZWFsbVBlckFwcCIgdGFyZ2V0PSJhbGwiLz4KLSAgICAgICAgPGFudCBkaXI9InJlYWxtUGVyQXBwIiB0YXJnZXQ9ImFsbCIvPiAgCi0gICAgICAgIDxhbnQgZGlyPSJzZnVsIiB0YXJnZXQ9ImFsbCIvPiAgCisgICAgICAgIDxhbnQgZGlyPSJyZWFsbVBlckFwcCIgdGFyZ2V0PSJhbGwiLz4KKyAgICAgICAgPGFudCBkaXI9InNmdWwiIHRhcmdldD0iYWxsIi8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJzb3RlcmlhIj4KICAgICAgIDxkZWxldGU+CkBAIC05NywxMyArOTcsMTMgQEAKICAgICAgIDxyZWNvcmQgbmFtZT0ic290ZXJpYS5vdXRwdXQiIGFjdGlvbj0ic3RvcCIgLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVwb3J0Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCBzZWN1cml0eSB0ZXN0cykKKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgc2VjdXJpdHkgdGVzdHMpCiAgICAgICAgICAgICAgICAgICAgICAgICBhbnQgZWpiIChFeGVjdXRlcyBhbGwgZWpiLXJlbGF0ZWQgc2VjdXJpdHkgdGVzdHMKLQkJCWFudCB3ZWIgKEV4ZWN1dGVzIHRoZSB3ZWIgdGVzdHMgVEJEKQotCTwvZWNobz4KKyAgICAgICAgICAgIGFudCB3ZWIgKEV4ZWN1dGVzIHRoZSB3ZWIgdGVzdHMgVEJEKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NlcnQtcmVhbG0tY3VzdG9tLWxvZ2lubW9kdWxlL1dlYlNTTENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2VydC1yZWFsbS1jdXN0b20tbG9naW5tb2R1bGUvV2ViU1NMQ2xpZW50LmphdmEKaW5kZXggNGRlZjNjNC4uNDM5MTNiNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2VydC1yZWFsbS1jdXN0b20tbG9naW5tb2R1bGUvV2ViU1NMQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2VydC1yZWFsbS1jdXN0b20tbG9naW5tb2R1bGUvV2ViU1NMQ2xpZW50LmphdmEKQEAgLTM0LDcgKzM0LDcgQEAKIHB1YmxpYyBjbGFzcyBXZWJTU0xDbGllbnQgewogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRQotICAgICAgICA9ICJzZWN1cml0eS1jZXJ0LXJlYWxtLWN1c3RvbS1sb2dpbm1vZHVsZSI7ICAgIAorICAgICAgICA9ICJzZWN1cml0eS1jZXJ0LXJlYWxtLWN1c3RvbS1sb2dpbm1vZHVsZSI7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UKICAgICAgICAgPSAiVGhpcyBpcyBDTj1TU0xUZXN0LCBPVT1TdW4gSmF2YSBTeXN0ZW0gQXBwbGljYXRpb24gU2VydmVyLCBPPVN1biBNaWNyb3N5c3RlbXMsIEw9U2FudGEgQ2xhcmEsIFNUPUNhbGlmb3JuaWEsIEM9VVMgZnJvbSBpbmRleC5qc3AiOwpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBTdHJpbmcgc3NsUGFzc3dvcmQgPSBhcmdzWzVdOwogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaG9zdC9wb3J0PSIgKyBob3N0ICsgIi8iICsgcG9ydCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKFRFU1RfTkFNRSk7CiAgICAgICAgICAgICBTU0xTb2NrZXRGYWN0b3J5IHNzZiA9IGdldFNTTFNvY2tldEZhY3Rvcnkoc3NsUGFzc3dvcmQsCkBAIC02Myw5ICs2Myw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIvaW5kZXguanNwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2YpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHBhcnNlUmVzcG9uc2UoY29ubmVjdGlvbik7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTgyLDcgKzgyLDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmdldElucHV0U3RyZWFtKCkpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CiAgICAgICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewpAQCAtMTEyLDcgKzExMiw3IEBACiAKICAgICAgICAgU1NMQ29udGV4dCBjdHggPSBTU0xDb250ZXh0LmdldEluc3RhbmNlKCJUTFMiKTsKIAotICAgICAgICAvLyBLZXlzdG9yZSAKKyAgICAgICAgLy8gS2V5c3RvcmUKICAgICAgICAgS2V5U3RvcmUga3MgPSBLZXlTdG9yZS5nZXRJbnN0YW5jZSgiSktTIik7CiAgICAgICAgIGNoYXJbXSBwYXNzcGhyYXNlID0gc3NsUGFzc3dvcmQudG9DaGFyQXJyYXkoKTsKICAgICAgICAga3MubG9hZChuZXcgRmlsZUlucHV0U3RyZWFtKGtleVN0b3JlUGF0aCksIHBhc3NwaHJhc2UpOwpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgIHRtZi5pbml0KHRydXN0U3RvcmUpOwogCiAgICAgICAgIGN0eC5pbml0KGttZi5nZXRLZXlNYW5hZ2VycygpLHRtZi5nZXRUcnVzdE1hbmFnZXJzKCksIG51bGwpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY3R4LmdldFNvY2tldEZhY3RvcnkoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NlcnQtcmVhbG0tY3VzdG9tLWxvZ2lubW9kdWxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jZXJ0LXJlYWxtLWN1c3RvbS1sb2dpbm1vZHVsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGRhYjgyNzMuLjIyOGFhMWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NlcnQtcmVhbG0tY3VzdG9tLWxvZ2lubW9kdWxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2VydC1yZWFsbS1jdXN0b20tbG9naW5tb2R1bGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2VydC1yZWFsbS1jdXN0b20tbG9naW5tb2R1bGUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9IiAvPgpAQCAtMjcsNiArMjcsNiBAQAogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzdGF0ZWZ1bExvZ2luQmVhbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzdGF0ZWZ1bExvZ2luQmVhbiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2VydC1yZWFsbS1jdXN0b20tbG9naW5tb2R1bGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2VydC1yZWFsbS1jdXN0b20tbG9naW5tb2R1bGUvYnVpbGQueG1sCmluZGV4IDM5MDAzMjkuLmJiMTRjMzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NlcnQtcmVhbG0tY3VzdG9tLWxvZ2lubW9kdWxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jZXJ0LXJlYWxtLWN1c3RvbS1sb2dpbm1vZHVsZS9idWlsZC54bWwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAmY29tbW9uUnVuOwogICAgICZjb21tb25TZWN1cml0eTsKICAgICAmdGVzdFByb3BlcnRpZXM7Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsIHNldHVwLCBkZXBsb3ksIHJ1biwgdW5kZXBsb3ksIHVuc2V0dXAiLz4KICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgpAQCAtNDcsNyArNDcsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgogICAgICAgICA8L2FudGNhbGw+CkBAIC05NywyNCArOTcsMjQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uLHByZXBhcmUtc3RvcmUtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlbnYtY2hlY2siIC8+Ci0JPGNvcHkgZmlsZT0iJHthc3NlbWJsZS5kaXJ9L3Rlc3QtJHthcHBuYW1lfS5qYXIiCisgICAgPGNvcHkgZmlsZT0iJHthc3NlbWJsZS5kaXJ9L3Rlc3QtJHthcHBuYW1lfS5qYXIiCiAgICAgICAgICAgICB0b2Rpcj0iJHtlbnYuUzFBU19IT01FfS9saWIiLz4KLQk8Y29weSBmaWxlPSIke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvbG9naW4uY29uZiIKKyAgICA8Y29weSBmaWxlPSIke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvbG9naW4uY29uZiIKICAgICAgICAgICAgIHRvZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2xvZ2luLmNvbmYuT1JJRyIvPgotCTxjb25jYXQgZGVzdGZpbGU9IiR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9sb2dpbi5jb25mIiBhcHBlbmQ9InRydWUiPjwhW0NEQVRBW2NlcnRSZWFsbSB7CisgICAgPGNvbmNhdCBkZXN0ZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2xvZ2luLmNvbmYiIGFwcGVuZD0idHJ1ZSI+PCFbQ0RBVEFbY2VydFJlYWxtIHsKICAgICAgICAgY29tLnN1bi5zMWFzZGV2LnNlY3VyaXR5LmNlcnRyZWFsbS5sbS5DZXJ0aWZpY2F0ZUxNIHJlcXVpcmVkOwogfTtdXT4KLQk8L2NvbmNhdD4KKyAgICA8L2NvbmNhdD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSJzZXQiIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXMucHJvcHMiIHZhbHVlPSIke2FzLnByb3BzfSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImNvbmZpZ3MuY29uZmlnLnNlcnZlci1jb25maWcuc2VjdXJpdHktc2VydmljZS5hdXRoLXJlYWxtLmNlcnRpZmljYXRlLnByb3BlcnR5LmphYXMtY29udGV4dD1jZXJ0UmVhbG0iIC8+Ci0JPC9hbnRjYWxsPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdG9yZSIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTMwLDcgKzEzMCw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVtb3ZlLXN0b3JlLWNvbW1vbiIvPgogICAgICAgICA8bW92ZSBmaWxlPSIke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvbG9naW4uY29uZi5PUklHIgogICAgICAgICAgICAgdG9maWxlPSIke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvbG9naW4uY29uZiIvPgotCTxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvdGVzdC0ke2FwcG5hbWV9LmphciIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgPGRlbGV0ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi90ZXN0LSR7YXBwbmFtZX0uamFyIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2VydC1yZWFsbS1jdXN0b20tbG9naW5tb2R1bGUvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2VydC1yZWFsbS1jdXN0b20tbG9naW5tb2R1bGUvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGNhNTlmNzEuLmM0OTMwNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NlcnQtcmVhbG0tY3VzdG9tLWxvZ2lubW9kdWxlL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jZXJ0LXJlYWxtLWN1c3RvbS1sb2dpbm1vZHVsZS9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDEwICsyMiwxMCBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlY3VyaXR5LWNvbnN0cmFpbnQ+CiAgICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+Ci0JICA8d2ViLXJlc291cmNlLW5hbWU+UHJvdGVjdGVkIEFyZWE8L3dlYi1yZXNvdXJjZS1uYW1lPgorICAgICAgPHdlYi1yZXNvdXJjZS1uYW1lPlByb3RlY3RlZCBBcmVhPC93ZWItcmVzb3VyY2UtbmFtZT4KICAgICAgICAgICA8dXJsLXBhdHRlcm4+L2luZGV4LmpzcDwvdXJsLXBhdHRlcm4+CiAgICAgICAgICAgPGh0dHAtbWV0aG9kPkRFTEVURTwvaHR0cC1tZXRob2Q+CiAgICAgICAgICAgPGh0dHAtbWV0aG9kPkdFVDwvaHR0cC1tZXRob2Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jZXJ0LXJlYWxtLWN1c3RvbS1sb2dpbm1vZHVsZS9zcmMvQ2VydGlmaWNhdGVMTS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2VydC1yZWFsbS1jdXN0b20tbG9naW5tb2R1bGUvc3JjL0NlcnRpZmljYXRlTE0uamF2YQppbmRleCA5ZTZkMzM0Li40YTU2YmEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jZXJ0LXJlYWxtLWN1c3RvbS1sb2dpbm1vZHVsZS9zcmMvQ2VydGlmaWNhdGVMTS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NlcnQtcmVhbG0tY3VzdG9tLWxvZ2lubW9kdWxlL3NyYy9DZXJ0aWZpY2F0ZUxNLmphdmEKQEAgLTM4LDExICszOCwxMSBAQAogICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgb25lIGhhcyB0aGUgYXBwbGljYXRpb24gbmFtZSBhbmQgdGhlIEROIG9mCiAgICAgICAgICAgICAvLyB0aGUgY2VydGlmaWNhdGUuIEEgc3VpdGFibGUgbG9naW4gZGVjaXNpb24gY2FuIGJlIG1hZGUgaGVyZS4KICAgICAgICAgICAgIGlmIChuZXh0LnN0YXJ0c1dpdGgoIkNOPSIpKSB7Ci0JCVN0cmluZyBjbmFtZSA9IG5leHQuc3Vic3RyaW5nKDMpOwotCQlpZiAoY25hbWUuZXF1YWxzKCJTU0xUZXN0IikpewotCQkJY29tbWl0VXNlckF1dGhlbnRpY2F0aW9uKG5ldyBTdHJpbmdbXXtnZXRBcHBOYW1lKCkgKyAiOmFsaWNlLWdyb3VwIn0pOwotCQkJcmV0dXJuOwotCQl9CisgICAgICAgIFN0cmluZyBjbmFtZSA9IG5leHQuc3Vic3RyaW5nKDMpOworICAgICAgICBpZiAoY25hbWUuZXF1YWxzKCJTU0xUZXN0IikpeworICAgICAgICAgICAgY29tbWl0VXNlckF1dGhlbnRpY2F0aW9uKG5ldyBTdHJpbmdbXXtnZXRBcHBOYW1lKCkgKyAiOmFsaWNlLWdyb3VwIn0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgdGhyb3cgbmV3IExvZ2luRXhjZXB0aW9uKCJObyBPVSBmb3VuZC4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NpcGhlcnRlc3QvQ2lwaGVyVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2lwaGVydGVzdC9DaXBoZXJUZXN0LmphdmEKaW5kZXggZmJiNWUwYS4uM2E0YTZjYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2lwaGVydGVzdC9DaXBoZXJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2lwaGVydGVzdC9DaXBoZXJUZXN0LmphdmEKQEAgLTc3LDcgKzc3LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHZlcmJvc2UoU3RyaW5nIG1zZykgewotICAgICAgICBpZiggVkVSQk9TRV9GTEFHKSAKKyAgICAgICAgaWYoIFZFUkJPU0VfRkxBRykKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihtc2cpOwogICAgIH0KIApAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgICAgICAgICAgICAgc2VydmVyUG9ydCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1srK2ldKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiggYXJnc1tpXS5pbnRlcm4oKSA9PSBTSE9VTERfUEFTU19PUFRJT04uaW50ZXJuKCkgKSB7CiAgICAgICAgICAgICAgICAgc2hvdWxkUGFzcyA9IGFyZ3NbKytpXTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogV29ya2Fyb3VuZCBmb3IgSmF2YVNFIGJ1ZyAoNjUxODgyNykgd2hlcmUKICAgICAgICAgICAgICAgICAgKiBhcmd1bWVudHMgb2YgbGVuZ3RoIDAgYXJlIG5vdCBwYXNzZWQgaW4gb24gV2luZG93cy4KQEAgLTE2NiwxMCArMTY2LDEwIEBACiAKICAgICB9CiAKLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGludGVyYWN0aXZlKCkgCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBpbnRlcmFjdGl2ZSgpCiAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAKLSAgICAgICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gCisgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9CiAgICAgICAgICAgICBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKFN5c3RlbS5pbikpOwogCiAgICAgICAgIHdoaWxlKHRydWUpIHsKQEAgLTE5MCw3ICsxOTAsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBub25JbnRlcmFjdGl2ZShTdHJpbmcgZW5hYmxlZENpcGhlciwgCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBub25JbnRlcmFjdGl2ZShTdHJpbmcgZW5hYmxlZENpcGhlciwKICAgICAgICAgU3RyaW5nIHNob3VsZFBhc3MsIFN0cmluZyBzaG91bGRGYWlsKSB7CiAKIC8vICAgICAgICAgaWYoIGVuYWJsZWRDaXBoZXIgPT0gbnVsbCApIHsKQEAgLTIwNywxMyArMjA3LDEzIEBACiAgICAgICAgICAgIGN0LnJ1bigpOwogICAgIH0KIAotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgbm9uSW50ZXJhY3RpdmUoU3RyaW5nW10gZW5hYmxlZENpcGhlciwgCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBub25JbnRlcmFjdGl2ZShTdHJpbmdbXSBlbmFibGVkQ2lwaGVyLAogICAgICAgICBTdHJpbmcgc2hvdWxkUGFzcywgU3RyaW5nIHNob3VsZEZhaWwpIHsKICAgICAgICAgLy8gVE9ETwogICAgIH0KIAogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIGludCBzdGFydENpcGhlciA9IC0xOwpAQCAtMjI4LDcgKzIyOCw3IEBACiAgICAgICAgIGNpcGhlcnNbMF0gPSBTVVBQT1JURURfQ0lQSEVSU1tzdGFydENpcGhlcl07CiAKICAgICAgICAgdGhpcy5zaG91bGRQYXNzID0gc2hvdWxkUGFzczsKLSAgICAgICAgdGhpcy5zaG91bGRGYWlsID0gc2hvdWxkRmFpbDsgCisgICAgICAgIHRoaXMuc2hvdWxkRmFpbCA9IHNob3VsZEZhaWw7CiAKICAgICB9CiAKQEAgLTIzNyw5ICsyMzcsOSBAQAogICAgICAgICAgICAgY2lwaGVycyA9IG5ldyBTdHJpbmdbMV07CiAgICAgICAgICAgICBjaXBoZXJzWzBdID0gY2lwaGVyTmFtZTsKICAgICAgICAgfQotIAorCiAgICAgICAgIHRoaXMuc2hvdWxkUGFzcyA9IHNob3VsZFBhc3M7Ci0gICAgICAgIHRoaXMuc2hvdWxkRmFpbCA9IHNob3VsZEZhaWw7IAorICAgICAgICB0aGlzLnNob3VsZEZhaWwgPSBzaG91bGRGYWlsOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKQEAgLTI3NCw3ICsyNzQsNyBAQAogICAgICAgICAgICAgaW50IGluZGV4ID0gc2hvdWxkUGFzcy5pbmRleE9mKHRoYXRQYXNzZWRbaV0pOwogICAgICAgICAgICAgaWYoIGluZGV4IDwgMCApIHsKICAgICAgICAgICAgICAgICAvLyBpcyBub3QgaW4gdGhlIHNob3VsZCBwYXNzLCB0ZXN0IGZhaWxlZAotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2lwaGVyIC0gIiArIHRoYXRQYXNzZWRbaV0gKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNpcGhlciAtICIgKyB0aGF0UGFzc2VkW2ldICsKICAgICAgICAgICAgICAgICAgICAgIiAtIHBhc2VkLCBidXQgc2hvdWxkIG5vdCBoYXZlLiBUZXN0IGZhaWxlZCIpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yOTIsNyArMjkyLDcgQEAKICAgICAgICAgICAgIGludCBpbmRleCA9IHNob3VsZFBhc3MuaW5kZXhPZih0aGF0RmFpbGVkW2ldKTsKICAgICAgICAgICAgIGlmKCBpbmRleCA+PSAwICkgewogICAgICAgICAgICAgICAgIC8vIGlzIGluIHRoZSBzaG91bGQgcGFzcywgYnV0IGRpZCBub3QKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNpcGhlciAtICIgKyB0aGF0RmFpbGVkW2ldICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDaXBoZXIgLSAiICsgdGhhdEZhaWxlZFtpXSArCiAgICAgICAgICAgICAgICAgICAgICIgLSBmYWlsZWQsIGJ1dCBzaG91bGQgaGF2ZSBwYXNzZWQuIFRlc3QgZmFpbGVkIik7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTMwNyw3ICszMDcsNyBAQAogCiAgICAgcHJpdmF0ZSAgdm9pZCBkb1NTTFRlc3QoU3RyaW5nW10gZW5hYmxlQ2lwaGVycykgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAotICAgICAgICBTU0xTb2NrZXRGYWN0b3J5IHNzbFNvY2tldEZhY3RvcnkgPSAgCisgICAgICAgIFNTTFNvY2tldEZhY3Rvcnkgc3NsU29ja2V0RmFjdG9yeSA9CiAgICAgICAgICAgICAoU1NMU29ja2V0RmFjdG9yeSlTU0xTb2NrZXRGYWN0b3J5LmdldERlZmF1bHQoKTsKIAogICAgICAgICBTU0xTb2NrZXQgc2VjdXJlU29ja2V0ID0gKFNTTFNvY2tldCkKQEAgLTMxOSw3ICszMTksNyBAQAogICAgICAgICBCdWZmZXJlZFdyaXRlciBidWZmV3JpdGVyID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKAogICAgICAgICAgICAgbmV3IE91dHB1dFN0cmVhbVdyaXRlcihzZWN1cmVTb2NrZXQuZ2V0T3V0cHV0U3RyZWFtKCkpKTsKICAgICAgICAgYnVmZldyaXRlci53cml0ZShIVFRQX0dFVF9SRVFVRVNUKTsKLSAgICAgICAgYnVmZldyaXRlci5uZXdMaW5lKCk7IAorICAgICAgICBidWZmV3JpdGVyLm5ld0xpbmUoKTsKICAgICAgICAgYnVmZldyaXRlci5uZXdMaW5lKCk7CiAgICAgICAgIGJ1ZmZXcml0ZXIuZmx1c2goKTsKICAgICAgICAgLy9idWZmV3JpdGVyLmNsb3NlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jaXBoZXJ0ZXN0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jaXBoZXJ0ZXN0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNWRhNGJmOS4uNmZhMTdiOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2lwaGVydGVzdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NpcGhlcnRlc3QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdWItbW9kdWxlIiB2YWx1ZT0iY2lwaGVydGVzdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2lwaGVydGVzdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jaXBoZXJ0ZXN0L2J1aWxkLnhtbAppbmRleCA4MzhjOGRhLi5kNjRkN2FiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jaXBoZXJ0ZXN0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jaXBoZXJ0ZXN0L2J1aWxkLnhtbApAQCAtMzUsMTkgKzM1LDE5IEBACiAgICAmY29tbW9uU2VjdXJpdHk7CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgY2lwaGVydGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCBjaXBoZXJ0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsIHNldHVwLCBkZXBsb3kscnVuLCB1bmRlcGxveSwgdW5zZXR1cCI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgcHJlcGFyZS1zdG9yZS1jb21tb24iPgotCTxwcm9wZXJ0eSBuYW1lPSJodHRwcy4xLnBvcnQiIHZhbHVlPSIxJHtodHRwcy5wb3J0fSIgLz4KLQk8cHJvcGVydHkgbmFtZT0iaHR0cHMuMi5wb3J0IiB2YWx1ZT0iMiR7aHR0cHMucG9ydH0iIC8+Ci0JPGNvcHkgZmlsZT0idGVzdHNldHVwLmFzYWRtaW4udGVtcGxhdGUiIHRvZmlsZT0idGVzdHNldHVwLmFzYWRtaW4iIG92ZXJ3cml0ZT0idHJ1ZSIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJodHRwcy4xLnBvcnQiIHZhbHVlPSIxJHtodHRwcy5wb3J0fSIgLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iaHR0cHMuMi5wb3J0IiB2YWx1ZT0iMiR7aHR0cHMucG9ydH0iIC8+CisgICAgPGNvcHkgZmlsZT0idGVzdHNldHVwLmFzYWRtaW4udGVtcGxhdGUiIHRvZmlsZT0idGVzdHNldHVwLmFzYWRtaW4iIG92ZXJ3cml0ZT0idHJ1ZSIvPgogICAgICAgICA8cmVwbGFjZSBmaWxlPSJ0ZXN0c2V0dXAuYXNhZG1pbiI+CiAgICAgICAgICAgICA8cmVwbGFjZWZpbHRlciB0b2tlbj0iQEhUVFBTMVBPUlRAIiB2YWx1ZT0iJHtodHRwcy4xLnBvcnR9Ii8+CiAgICAgICAgICAgICA8cmVwbGFjZWZpbHRlciB0b2tlbj0iQEhUVFBTMlBPUlRAIiB2YWx1ZT0iJHtodHRwcy4yLnBvcnR9Ii8+CkBAIC0xMDEsNyArMTAxLDcgQEAKIAogICAgICAgPGphdmEgY2xhc3NuYW1lPSJDaXBoZXJUZXN0IiBmb3JrPSJ0cnVlIj4KICAgICAgICAgPGNsYXNzcGF0aD4KLSAgCSAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtidWlsZC5jbGFzc2VzLmRpcn06JHtzMWFzdGVzdC5jbGFzc3BhdGh9Ii8+CisgICAgICAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7czFhc3Rlc3QuY2xhc3NwYXRofSIvPgogICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURqYXZheC5uZXQuc3NsLnRydXN0U3RvcmU9JHtteXRydXN0c3RvcmUuZGIuZmlsZX0iLz4KICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURqYXZheC5uZXQuc3NsLnRydXN0U3RvcmVQYXNzd29yZD0ke3NzbC5wYXNzd29yZH0iLz4KQEAgLTEyNSw3ICsxMjUsNyBAQAogCiAgICAgICA8cHJvcGVydHkgbmFtZT0iaHR0cHMuMS5wb3J0IiB2YWx1ZT0iMSR7aHR0cHMucG9ydH0iIC8+CiAgICAgICA8cHJvcGVydHkgbmFtZT0iaHR0cHMuMi5wb3J0IiB2YWx1ZT0iMiR7aHR0cHMucG9ydH0iIC8+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjaXBoZXItdGVzdCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzaG91bGQtcGFzcy1jaXBoZXIiIHZhbHVlPSIiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVuYWJsZS1jaXBoZXIiICAgICAgdmFsdWU9IlNTTF9SU0FfV0lUSF9ERVNfQ0JDX1NIQSIvPgpAQCAtMTU5LDExICsxNTksMTEgQEAKIAogCiAgICAgPHRhcmdldCBuYW1lPSJydW5jaXBoZXJ0ZXN0LTIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgCisKICAgICAgPHByb3BlcnR5IG5hbWU9Imh0dHBzLjEucG9ydCIgdmFsdWU9IjEke2h0dHBzLnBvcnR9IiAvPgogICAgICA8cHJvcGVydHkgbmFtZT0iaHR0cHMuMi5wb3J0IiB2YWx1ZT0iMiR7aHR0cHMucG9ydH0iIC8+Ci0gCi08IS0tIEpESyA4IHUxNzIgLSAzREVTIGNpcGhlciBzdWl0ZXMgZGlzYWJsZWQgCisKKzwhLS0gSkRLIDggdTE3MiAtIDNERVMgY2lwaGVyIHN1aXRlcyBkaXNhYmxlZAogICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNpcGhlci10ZXN0Ij4KICAgICAgICAgPHBhcmFtIG5hbWU9InNob3VsZC1wYXNzLWNpcGhlciIgdmFsdWU9IlNTTF9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJlbmFibGUtY2lwaGVyIiAgICAgIHZhbHVlPSJTU0xfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQSIvPgpAQCAtMTkwLDcgKzE5MCw3IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJlbmFibGUtY2lwaGVyIiAgICAgIHZhbHVlPSJTU0xfUlNBX1dJVEhfTlVMTF9NRDUiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Imh0dHBzLnBvcnQiICAgICAgICAgdmFsdWU9IiR7aHR0cHMuMi5wb3J0fSIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2lwaGVyLXRlc3QiPgogICAgICAgICA8cGFyYW0gbmFtZT0ic2hvdWxkLXBhc3MtY2lwaGVyIiB2YWx1ZT0iU1NMX1JTQV9XSVRIX05VTExfU0hBIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJlbmFibGUtY2lwaGVyIiAgICAgIHZhbHVlPSJTU0xfUlNBX1dJVEhfTlVMTF9TSEEiLz4KQEAgLTIwNCw4ICsyMDQsOCBAQAogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJydW5jaXBoZXJ0ZXN0LTMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4gICAgCi0gICAgIDxwcm9wZXJ0eSBuYW1lPSJodHRwcy4xLnBvcnQiIHZhbHVlPSIxJHtodHRwcy5wb3J0fSIgLz4gICAKKyAgICA8dGFyZ2V0IG5hbWU9InJ1bmNpcGhlcnRlc3QtMyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICA8cHJvcGVydHkgbmFtZT0iaHR0cHMuMS5wb3J0IiB2YWx1ZT0iMSR7aHR0cHMucG9ydH0iIC8+CiAgICAgIDxwcm9wZXJ0eSBuYW1lPSJodHRwcy4yLnBvcnQiIHZhbHVlPSIyJHtodHRwcy5wb3J0fSIgLz4KICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjaXBoZXItdGVzdCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzaG91bGQtcGFzcy1jaXBoZXIiIHZhbHVlPSIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbW1vbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb21tb24ueG1sCmluZGV4IDQ5ZDUyYjkuLmFiODE5MjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbW1vbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29tbW9uLnhtbApAQCAtNzEsOSArNzEsOSBAQAogCiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS11c2VyIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtdXNlci1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9ImhhcnByZWV0Ii8+Ci0JICAgIDxwYXJhbSBuYW1lPSJwYXNzd29yZCIgdmFsdWU9ImhhcnByZWV0Ii8+Ci0JICAgIDxwYXJhbSBuYW1lPSJncm91cHMiIHZhbHVlPSJlbXBsb3llZSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9ImhhcnByZWV0Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJwYXNzd29yZCIgdmFsdWU9ImhhcnByZWV0Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJncm91cHMiIHZhbHVlPSJlbXBsb3llZSIvPgogICAgICAgIDwvYW50Y2FsbD4KIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvYnVpbGQucHJvcGVydGllcwppbmRleCAzNGI0MDU1Li5mZDk5ZTI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDYgKzE1LDYgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9idWlsZC54bWwKaW5kZXggYTFmMjUzNy4uODhlNjY3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL2J1aWxkLnhtbApAQCAtMzEsNyArMzEsNyBAQAogICAgJmNvbW1vbkJ1aWxkOwogICAgJmNvbW1vblJ1bjsKICAgICZ0ZXN0UHJvcGVydGllczsKLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCwgcnVuIi8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC00MCw0MSArNDAsNDEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgotCTxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gIAk8ZWNobyBtZXNzYWdlPSJDb21waWxpbmcgdGVzdCBzb3VyY2UgZmlsZXMiIGxldmVsPSJ2ZXJib3NlIi8+CisgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KKyAgICAgIDxlY2hvIG1lc3NhZ2U9IkNvbXBpbGluZyB0ZXN0IHNvdXJjZSBmaWxlcyIgbGV2ZWw9InZlcmJvc2UiLz4KICAgICAgPGphdmFjIHNyY2Rpcj0iamF1dGgiCi0gICAgCWRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgotICAgIAljbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtcnQuamFyOiR7czFhc3Rlc3QuY2xhc3NwYXRofSIKLSAgICAJZGVidWc9Im9uIgotICAgIAlmYWlsb25lcnJvcj0idHJ1ZSIKLQkvPgorICAgICAgICBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKKyAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0Lmphcjoke3MxYXN0ZXN0LmNsYXNzcGF0aH0iCisgICAgICAgIGRlYnVnPSJvbiIKKyAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCisgICAgLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgIDwvdGFyZ2V0PgogCiAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxhbnRjYWxsIHRhcmdldD0icnVuYWNjeG1sIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5hY2N4bWwiLz4KICAgIDwvdGFyZ2V0PgotCQorCiAgICAgPHRhcmdldCBuYW1lPSJydW5hY2N4bWwiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIDwhLS1UT0RPIHVuY29tbWVudCBsYXRlci0tPgotICAgIAk8amF2YSBjbGFzc25hbWU9IkF1dGhDb25maWdUZXN0IiBmb3JrPSJ5ZXMiPgotCTxjbGFzc3BhdGg+Ci0JCTxwYXRoZWxlbWVudCBwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAKLQkJPHBhdGhlbGVtZW50IHBhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtYWRtaW4uamFyIi8+IAotCQk8cGF0aGVsZW1lbnQgcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXIiLz4gCi0JCTxwYXRoZWxlbWVudCBwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qbWFjLWFwaS5qYXIiLz4gCi0JCTxwYXRoZWxlbWVudCBwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9kdGRzIi8+IAotCQk8cGF0aGVsZW1lbnQgcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvc2NoZW1hcyIvPiAKLQkJPHBhdGhlbGVtZW50IHBhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIi8+Ci0JPC9jbGFzc3BhdGg+Ci0JPGFyZyB2YWx1ZT0ieG1sLXBhcnNlIiAvPiAKLQk8c3lzcHJvcGVydHkga2V5PSJqYXZhLnNlY3VyaXR5LmRlYnVnIiB2YWx1ZT0iY29uZmlnZmlsZSxjb25maWd4bWxwYXJzZXIiLz4KLQk8c3lzcHJvcGVydHkga2V5PSJzdW4tYWNjLnhtbC51cmwiIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvdGVzdENvbmZpZy9zdW4tYWNjLnhtbCIvPgotCTwhLS08anZtYXJnIHZhbHVlPSItWGRlYnVnIiAvPgotCTxqdm1hcmcgdmFsdWU9Ii1YcnVuamR3cDp0cmFuc3BvcnQ9ZHRfc29ja2V0LHNlcnZlcj15LHN1c3BlbmQ9eSxhZGRyZXNzPTgwMDgiLz4tLT4gCi0JPC9qYXZhPiAKKyAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJBdXRoQ29uZmlnVGVzdCIgZm9yaz0ieWVzIj4KKyAgICA8Y2xhc3NwYXRoPgorICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvYXBwc2Vydi1ydC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KKyAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtYWRtaW4uamFyIi8+CisgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphciIvPgorICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvam1hYy1hcGkuamFyIi8+CisgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9kdGRzIi8+CisgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9zY2hlbWFzIi8+CisgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIvPgorICAgIDwvY2xhc3NwYXRoPgorICAgIDxhcmcgdmFsdWU9InhtbC1wYXJzZSIgLz4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJqYXZhLnNlY3VyaXR5LmRlYnVnIiB2YWx1ZT0iY29uZmlnZmlsZSxjb25maWd4bWxwYXJzZXIiLz4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJzdW4tYWNjLnhtbC51cmwiIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvdGVzdENvbmZpZy9zdW4tYWNjLnhtbCIvPgorICAgIDwhLS08anZtYXJnIHZhbHVlPSItWGRlYnVnIiAvPgorICAgIDxqdm1hcmcgdmFsdWU9Ii1YcnVuamR3cDp0cmFuc3BvcnQ9ZHRfc29ja2V0LHNlcnZlcj15LHN1c3BlbmQ9eSxhZGRyZXNzPTgwMDgiLz4tLT4KKyAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+CiAgICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvamF1dGgvQXV0aENvbmZpZ1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL2phdXRoL0F1dGhDb25maWdUZXN0LmphdmEKaW5kZXggZjhkM2VhYy4uMjg2Mzg5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvamF1dGgvQXV0aENvbmZpZ1Rlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9qYXV0aC9BdXRoQ29uZmlnVGVzdC5qYXZhCkBAIC0yOCwyNCArMjgsMjQgQEAKICAqIDEuIGRvbWFpbi54bWwgdGVzdDoKICAqCiAgKiAgICAlamF2YSAtRGRvbWFpbi54bWwudXJsPWRvbWFpbi54bWwKLSAqCS1EamF2YS5zZWN1cml0eS5kZWJ1Zz1jb25maWdmaWxlLGNvbmZpZ3htbHBhcnNlcgotICoJLWNsYXNzcGF0aCAuOmNsYXNzZXM6Y29uZmlnLWFwaS5qYXI6YXBwc2Vydi1jb21tb25zLmphcjpzY2hlbWEyYmVhbnMuamFyCi0gKglBdXRoQ29uZmlnVGVzdCB4bWwtcGFyc2UKLSAqIAorICogICAgLURqYXZhLnNlY3VyaXR5LmRlYnVnPWNvbmZpZ2ZpbGUsY29uZmlneG1scGFyc2VyCisgKiAgICAtY2xhc3NwYXRoIC46Y2xhc3Nlczpjb25maWctYXBpLmphcjphcHBzZXJ2LWNvbW1vbnMuamFyOnNjaGVtYTJiZWFucy5qYXIKKyAqICAgIEF1dGhDb25maWdUZXN0IHhtbC1wYXJzZQorICoKICAqIDIuIHN1bi1hY2MueG1sIHRlc3Q6CiAgKgogICogICAgJWphdmEgLURzdW4tYWNjLnhtbC51cmw9c3VuLWFjYy54bWwKLSAqCS1EamF2YS5zZWN1cml0eS5kZWJ1Zz1jb25maWdmaWxlLGNvbmZpZ3htbHBhcnNlcgotICoJLWNsYXNzcGF0aCAuOmNsYXNzZXM6Y29uZmlnLWFwaS5qYXI6YXBwc2Vydi1jb21tb25zLmphcjpzY2hlbWEyYmVhbnMuamFyCi0gKglBdXRoQ29uZmlnVGVzdCB4bWwtcGFyc2UKLSAqIAorICogICAgLURqYXZhLnNlY3VyaXR5LmRlYnVnPWNvbmZpZ2ZpbGUsY29uZmlneG1scGFyc2VyCisgKiAgICAtY2xhc3NwYXRoIC46Y2xhc3Nlczpjb25maWctYXBpLmphcjphcHBzZXJ2LWNvbW1vbnMuamFyOnNjaGVtYTJiZWFucy5qYXIKKyAqICAgIEF1dGhDb25maWdUZXN0IHhtbC1wYXJzZQorICoKICAqIDMuIGN1c3RvbSBtb2R1bGUgY29uZmlnIGZpbGUgdGVzdDoKICAqCiAgKiAgICAlamF2YSAtRGphdmEuYXV0aGNvbmZpZz10ZXN0Q29uZmlnL2NvbmZpZy5tb2R1bGUKLSAqCS1EY29uZmlnZmlsZS5wYXJzZXI9ZmlsZQotICoJLURqYXZhLnNlY3VyaXR5LmRlYnVnPWNvbmZpZ2ZpbGUsY29uZmlnZmlsZXBhcnNlcgotICoJLWNsYXNzcGF0aCAuOmNsYXNzZXM6Y29uZmlnLWFwaS5qYXI6YXBwc2Vydi1jb21tb25zLmphcjpzY2hlbWEyYmVhbnMuamFyCi0gKglBdXRoQ29uZmlnVGVzdCBmaWxlLXBhcnNlCisgKiAgICAtRGNvbmZpZ2ZpbGUucGFyc2VyPWZpbGUKKyAqICAgIC1EamF2YS5zZWN1cml0eS5kZWJ1Zz1jb25maWdmaWxlLGNvbmZpZ2ZpbGVwYXJzZXIKKyAqICAgIC1jbGFzc3BhdGggLjpjbGFzc2VzOmNvbmZpZy1hcGkuamFyOmFwcHNlcnYtY29tbW9ucy5qYXI6c2NoZW1hMmJlYW5zLmphcgorICogICAgQXV0aENvbmZpZ1Rlc3QgZmlsZS1wYXJzZQogICovCiAKIHB1YmxpYyBjbGFzcyBBdXRoQ29uZmlnVGVzdCBleHRlbmRzIFRocmVhZCB7CkBAIC01Myw0NCArNTMsNDQgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUCA9ICJTT0FQIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUCA9ICJIVFRQIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUpCID0gIkVKQiI7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgdGVzdElkID0gIlNlYzo6Q29udGFpbmVyLUF1dGhfVGVzdF9OdW1fIjsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEF1dGhQb2xpY3kgY29uZmlnUmVxdWVzdCA9Ci0JCW5ldyBBdXRoUG9saWN5KEF1dGhQb2xpY3kuU09VUkNFX0FVVEhfU0VOREVSLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgbmV3IEF1dGhQb2xpY3koQXV0aFBvbGljeS5TT1VSQ0VfQVVUSF9TRU5ERVIsIHRydWUsIHRydWUpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQXV0aFBvbGljeSBjb25maWdSZXNwb25zZSA9Ci0JCW5ldyBBdXRoUG9saWN5KEF1dGhQb2xpY3kuU09VUkNFX0FVVEhfQ09OVEVOVCwgdHJ1ZSwgZmFsc2UpOworICAgICAgICBuZXcgQXV0aFBvbGljeShBdXRoUG9saWN5LlNPVVJDRV9BVVRIX0NPTlRFTlQsIHRydWUsIGZhbHNlKTsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEF1dGhQb2xpY3kgZGRSZXF1ZXN0ID0KLQkJbmV3IEF1dGhQb2xpY3koQXV0aFBvbGljeS5TT1VSQ0VfQVVUSF9DT05URU5ULCBmYWxzZSwgZmFsc2UpOworICAgICAgICBuZXcgQXV0aFBvbGljeShBdXRoUG9saWN5LlNPVVJDRV9BVVRIX0NPTlRFTlQsIGZhbHNlLCBmYWxzZSk7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBBdXRoUG9saWN5IGRkUmVzcG9uc2UgPQotCQluZXcgQXV0aFBvbGljeShBdXRoUG9saWN5LlNPVVJDRV9BVVRIX1NFTkRFUiwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgbmV3IEF1dGhQb2xpY3koQXV0aFBvbGljeS5TT1VSQ0VfQVVUSF9TRU5ERVIsIGZhbHNlLCBmYWxzZSk7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBBdXRoUG9saWN5IGRkSHR0cFJlcXVlc3QgPQotCQluZXcgQXV0aFBvbGljeShBdXRoUG9saWN5LlNPVVJDRV9BVVRIX05PTkUsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIG5ldyBBdXRoUG9saWN5KEF1dGhQb2xpY3kuU09VUkNFX0FVVEhfTk9ORSwgZmFsc2UsIGZhbHNlKTsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEF1dGhQb2xpY3kgZGRIdHRwUmVzcG9uc2UgPQotCQluZXcgQXV0aFBvbGljeShBdXRoUG9saWN5LlNPVVJDRV9BVVRIX0NPTlRFTlQsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIG5ldyBBdXRoUG9saWN5KEF1dGhQb2xpY3kuU09VUkNFX0FVVEhfQ09OVEVOVCwgZmFsc2UsIGZhbHNlKTsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEF1dGhQb2xpY3kgZGRFamJSZXNwb25zZSA9Ci0JCW5ldyBBdXRoUG9saWN5KEF1dGhQb2xpY3kuU09VUkNFX0FVVEhfTk9ORSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICBuZXcgQXV0aFBvbGljeShBdXRoUG9saWN5LlNPVVJDRV9BVVRIX05PTkUsIHRydWUsIGZhbHNlKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIGludCB0ZXN0bnVtID0gMDsKICAgICAgICAgaWYgKGFyZ3MgPT0gbnVsbCB8fCBhcmdzLmxlbmd0aCA9PSAwIHx8CiAgICAgICAgIGFyZ3NbMF0uZXF1YWxzSWdub3JlQ2FzZSgieG1sLXBhcnNlIikpIHsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB0ZXN0bnVtID0geG1sUGFyc2UodGVzdG51bSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGVsc2UgaWYgKGFyZ3NbMF0uZXF1YWxzSWdub3JlQ2FzZSgiZmlsZS1wYXJzZSIpKSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdGVzdG51bSA9IGZpbGVQYXJzZSh0ZXN0bnVtKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJ1bnJlY29nbml6ZWQgY29tbWFuZCBmb3IgQXV0aENvbmZpZ1Rlc3QiKTsKICAgICAgICAgfQpAQCAtMTAzLDExICsxMDMsMTEgQEAKICAgICAgICAgICAgIEF1dGhDb25maWcgY29uZmlnID0gQXV0aENvbmZpZy5nZXRBdXRoQ29uZmlnKCk7CiAgICAgICAgICAgICBDbGllbnRBdXRoQ29udGV4dCBjYWM7CiAgICAgICAgICAgICBTZXJ2ZXJBdXRoQ29udGV4dCBzYWM7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3ViamVjdCBzdWJqZWN0ID0gbmV3IFN1YmplY3QoKTsKICAgICAgICAgICAgIEhhc2hNYXAgb3B0aW9uczsKICAgICAgICAgICAgIFRlc3RDcmVkZW50aWFsIGNyZWQxOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICogVGVzdCBOVUxMIHJldHVybgogICAgICAgICAgICAgICovCkBAIC0xMTksMTggKzExOSwxOCBAQAogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RpZCwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIHRlc3RudW0rKzsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdGluZyBDb250YWluZXItYXV0aCB0ZXN0aWQgPSAiK3Rlc3RudW0pOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChjb25maWcuZ2V0U2VydmVyQXV0aENvbnRleHQoRUpCLCBudWxsLCBudWxsLCBudWxsLCBudWxsKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdGlkK3Rlc3RudW0sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9ZWxzZQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RpZCt0ZXN0bnVtLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgdGVzdG51bSsrOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICogU09BUCAtIENMSUVOVAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RpbmcgQ29udGFpbmVyLWF1dGggdGVzdGlkID0gIit0ZXN0bnVtKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjYWMgPSBjb25maWcuZ2V0Q2xpZW50QXV0aENvbnRleHQoU09BUCwgImZvbyIsIG51bGwsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgY2FjLnNlY3VyZVJlcXVlc3QobnVsbCwgc3ViamVjdCwgbnVsbCk7CiAgICAgICAgICAgICBvcHRpb25zID0gbmV3IEhhc2hNYXAoKTsKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICAgICAgICAgICAgY2FjLmRpc3Bvc2VTdWJqZWN0KHN1YmplY3QsIG51bGwpOwogICAgICAgICAgICAgdGVzdG51bSsrOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0aW5nIENvbnRhaW5lci1hdXRoIHRlc3RpZCA9ICIrdGVzdG51bSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgY2FjID0gY29uZmlnLmdldENsaWVudEF1dGhDb250ZXh0KFNPQVAsCiAgICAgICAgICAgICAgICAgICAgICJhcHAxIiwKICAgICAgICAgICAgICAgICAgICAgZGRSZXF1ZXN0LApAQCAtMTU4LDcgKzE1OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgSGFzaE1hcCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgZGRSZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgZGRSZXNwb25zZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKCFzdWJqZWN0LmdldFB1YmxpY0NyZWRlbnRpYWxzKCkuY29udGFpbnMoY3JlZDEpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdGlkK3Rlc3RudW0sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9ZWxzZQpAQCAtMTY2LDcgKzE2Niw3IEBACiAKICAgICAgICAgICAgIGNhYy5kaXNwb3NlU3ViamVjdChzdWJqZWN0LCBudWxsKTsKICAgICAgICAgICAgIHRlc3RudW0rKzsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RpbmcgQ29udGFpbmVyLWF1dGggdGVzdGlkID0gIit0ZXN0bnVtKTsKICAgICAgICAgICAgIGNhYyA9IGNvbmZpZy5nZXRDbGllbnRBdXRoQ29udGV4dChTT0FQLAogICAgICAgICAgICAgICAgICAgICAgICAgImFwcDQiLApAQCAtMTc3LDcgKzE3Nyw3IEBACiAgICAgICAgICAgICBjcmVkMSA9IG5ldyBUZXN0Q3JlZGVudGlhbCgiQ2xpZW50TW9kdWxlMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEhhc2hNYXAoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZFJlcXVlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCk7ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCk7CiAgICAgICAgICAgICBpZiAoIXN1YmplY3QuZ2V0UHVibGljQ3JlZGVudGlhbHMoKS5jb250YWlucyhjcmVkMSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0aWQrdGVzdG51bSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH1lbHNlCkBAIC0xODYsNyArMTg2LDcgQEAKICAgICAgICAgICAgIGNhYy5kaXNwb3NlU3ViamVjdChzdWJqZWN0LCBudWxsKTsKICAgICAgICAgICAgIHRlc3RudW0rKzsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdGluZyBDb250YWluZXItYXV0aCB0ZXN0aWQgPSAiK3Rlc3RudW0pOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGNhYyA9IGNvbmZpZy5nZXRDbGllbnRBdXRoQ29udGV4dChTT0FQLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXBwMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCkBAIC0yMDEsMTEgKzIwMSwxMSBAQAogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RpZCt0ZXN0bnVtLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfWVsc2UKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0aWQrdGVzdG51bSwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgY2FjLmRpc3Bvc2VTdWJqZWN0KHN1YmplY3QsIG51bGwpOwogICAgICAgICAgICAgdGVzdG51bSsrOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0aW5nIENvbnRhaW5lci1hdXRoIHRlc3RpZCA9ICIrdGVzdG51bSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgY2FjID0gY29uZmlnLmdldENsaWVudEF1dGhDb250ZXh0KFNPQVAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9vIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkUmVxdWVzdCwKQEAgLTIyMiwxMSArMjIyLDExIEBACiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdGlkK3Rlc3RudW0sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9ZWxzZQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RpZCt0ZXN0bnVtLCBzdGF0LlBBU1MpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjYWMuZGlzcG9zZVN1YmplY3Qoc3ViamVjdCwgbnVsbCk7CiAgICAgICAgICAgICB0ZXN0bnVtKys7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RpbmcgQ29udGFpbmVyLWF1dGggdGVzdGlkID0gIit0ZXN0bnVtKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjYWMgPSBjb25maWcuZ2V0Q2xpZW50QXV0aENvbnRleHQoU09BUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZFJlcXVlc3QsCkBAIC0yNDMsMTIgKzI0MywxMiBAQAogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RpZCt0ZXN0bnVtLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfWVsc2UKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0aWQrdGVzdG51bSwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgY2FjLmRpc3Bvc2VTdWJqZWN0KHN1YmplY3QsIG51bGwpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHRlc3RudW0rKzsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdGluZyBDb250YWluZXItYXV0aCB0ZXN0aWQgPSAiK3Rlc3RudW0pOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGNhYyA9IGNvbmZpZy5nZXRDbGllbnRBdXRoQ29udGV4dChTT0FQLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFwcDEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRSZXF1ZXN0LApAQCAtMjYzLDExICsyNjMsMTEgQEAKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0aWQrdGVzdG51bSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH1lbHNlCiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdGlkK3Rlc3RudW0sIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIGNhYy5kaXNwb3NlU3ViamVjdChzdWJqZWN0LCBudWxsKTsKICAgICAgICAgICAgIHRlc3RudW0rKzsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdGluZyBDb250YWluZXItYXV0aCB0ZXN0aWQgPSAiK3Rlc3RudW0pOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGNhYyA9IGNvbmZpZy5nZXRDbGllbnRBdXRoQ29udGV4dChTT0FQLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFwcDEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKQEAgLTI4MiwxMyArMjgyLDEzIEBACiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdGlkK3Rlc3RudW0sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9ZWxzZQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RpZCt0ZXN0bnVtLCBzdGF0LlBBU1MpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjYWMuZGlzcG9zZVN1YmplY3Qoc3ViamVjdCwgbnVsbCk7CiAgICAgICAgICAgICB0ZXN0bnVtKys7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RpbmcgQ29udGFpbmVyLWF1dGggdGVzdGlkID0gIit0ZXN0bnVtKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBTS0lQIEREIFVSSTggZW50cnkgaW4gWE1MLVBBUlNFIGNhc2UKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjYWMgPSBjb25maWcuZ2V0Q2xpZW50QXV0aENvbnRleHQoU09BUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZFJlcXVlc3QsCkBAIC0zMDksNyArMzA5LDcgQEAKICAgICAgICAgICAgIGNhYy5kaXNwb3NlU3ViamVjdChzdWJqZWN0LCBudWxsKTsKICAgICAgICAgICAgIHRlc3RudW0rKzsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdGluZyBDb250YWluZXItYXV0aCB0ZXN0aWQgPSAiK3Rlc3RudW0pOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGNhYyA9IGNvbmZpZy5nZXRDbGllbnRBdXRoQ29udGV4dChTT0FQLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCkBAIC0zMjYsMTUgKzMyNiwxNSBAQAogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RpZCt0ZXN0bnVtLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfWVsc2UKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0aWQrdGVzdG51bSwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgY2FjLmRpc3Bvc2VTdWJqZWN0KHN1YmplY3QsIG51bGwpOwogICAgICAgICAgICAgdGVzdG51bSsrOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0aW5nIENvbnRhaW5lci1hdXRoIHRlc3RpZCA9ICIrdGVzdG51bSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgKiBTT0FQIC0gU0VSVkVSCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzYWMgPSBjb25maWcuZ2V0U2VydmVyQXV0aENvbnRleHQoU09BUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZFJlcXVlc3QsCkBAIC0zNTIsNyArMzUyLDcgQEAKICAgICAgICAgICAgIGNhYy5kaXNwb3NlU3ViamVjdChzdWJqZWN0LCBudWxsKTsKICAgICAgICAgICAgIHRlc3RudW0rKzsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdGluZyBDb250YWluZXItYXV0aCB0ZXN0aWQgPSAiK3Rlc3RudW0pOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHNhYyA9IGNvbmZpZy5nZXRTZXJ2ZXJBdXRoQ29udGV4dChTT0FQLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCkBAIC0zNjcsMTUgKzM2NywxNSBAQAogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RpZCt0ZXN0bnVtLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfWVsc2UKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0aWQrdGVzdG51bSwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgY2FjLmRpc3Bvc2VTdWJqZWN0KHN1YmplY3QsIG51bGwpOwogICAgICAgICAgICAgdGVzdG51bSsrOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0aW5nIENvbnRhaW5lci1hdXRoIHRlc3RpZCA9ICIrdGVzdG51bSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgKiBTT0FQIC0gY2hlY2sgbnVsbCByZXF1ZXN0L3Jlc3BvbnNlIHBvbGljaWVzCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoY29uZmlnLmdldFNlcnZlckF1dGhDb250ZXh0KFNPQVAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcHA2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKQEAgLTM4NCwzMyArMzg0LDMzIEBACiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdGlkK3Rlc3RudW0sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9ZWxzZQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RpZCt0ZXN0bnVtLCBzdGF0LlBBU1MpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB0ZXN0bnVtKys7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RpbmcgQ29udGFpbmVyLWF1dGggdGVzdGlkID0gIit0ZXN0bnVtKTsKICAgICAgICAgfWZpbmFsbHl7CiAgICAgICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiB0ZXN0bnVtOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBmaWxlUGFyc2UoaW50IHRlc3RudW0pIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBBdXRoQ29uZmlnIGNvbmZpZyA9IEF1dGhDb25maWcuZ2V0QXV0aENvbmZpZygpOwogICAgICAgICBDbGllbnRBdXRoQ29udGV4dCBjYWM7CiAgICAgICAgIFNlcnZlckF1dGhDb250ZXh0IHNhYzsKLSAgICAgICAgCisKICAgICAgICAgU3ViamVjdCBzdWJqZWN0ID0gbmV3IFN1YmplY3QoKTsKICAgICAgICAgSGFzaE1hcCBvcHRpb25zOwogICAgICAgICBUZXN0Q3JlZGVudGlhbCBjcmVkMTsKICAgICAgICAgVGVzdENyZWRlbnRpYWwgY3JlZDI7Ci0gICAgICAgIAorCiAgICAgICAgIHRlc3RudW0gPSB4bWxQYXJzZSh0ZXN0bnVtKTsKLSAgICAgICAgCisKICAgICAgICAgLyoqCiAgICAgICAgICAqIHRlc3QgY2FzZSBmb3IgbXVsdGlwbGUgbW9kdWxlcwogICAgICAgICAgKi8KLSAgICAgICAgCisKICAgICAgICAgY2FjID0gY29uZmlnLmdldENsaWVudEF1dGhDb250ZXh0KFNPQVAsCiAgICAgICAgICJhcHA1IiwKICAgICAgICAgZGRSZXF1ZXN0LApAQCAtNDMxLDExICs0MzEsMTEgQEAKICAgICAgICAgfQogICAgICAgICBjYWMuZGlzcG9zZVN1YmplY3Qoc3ViamVjdCwgbnVsbCk7CiAgICAgICAgIHRlc3RudW0rKzsKLSAgICAgICAgCisKICAgICAgICAgLyoqCiAgICAgICAgICAqIEhUVFAgLSBTRVJWRVIKICAgICAgICAgICovCi0gICAgICAgIAorCiAgICAgICAgIHNhYyA9IGNvbmZpZy5nZXRTZXJ2ZXJBdXRoQ29udGV4dChIVFRQLAogICAgICAgICBudWxsLAogICAgICAgICBkZEh0dHBSZXF1ZXN0LApAQCAtNDUyLDcgKzQ1Miw3IEBACiAgICAgICAgIH0KICAgICAgICAgc2FjLmRpc3Bvc2VTdWJqZWN0KHN1YmplY3QsIG51bGwpOwogICAgICAgICB0ZXN0bnVtKys7Ci0gICAgICAgIAorCiAgICAgICAgIHNhYyA9IGNvbmZpZy5nZXRTZXJ2ZXJBdXRoQ29udGV4dChIVFRQLAogICAgICAgICAiYXBwOSIsCiAgICAgICAgIG51bGwsCkBAIC00NjksNyArNDY5LDcgQEAKICAgICAgICAgfQogICAgICAgICBzYWMuZGlzcG9zZVN1YmplY3Qoc3ViamVjdCwgbnVsbCk7CiAgICAgICAgIHRlc3RudW0rKzsKLSAgICAgICAgCisKICAgICAgICAgLyoqCiAgICAgICAgICAqIEVKQiAtIFNFUlZFUgogICAgICAgICAgKi8KQEAgLTQ4OSw3ICs0ODksNyBAQAogICAgICAgICB9CiAgICAgICAgIHNhYy5kaXNwb3NlU3ViamVjdChzdWJqZWN0LCBudWxsKTsKICAgICAgICAgdGVzdG51bSsrOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gdGVzdG51bTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9qYXV0aC9DbGllbnRNb2R1bGUxLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9qYXV0aC9DbGllbnRNb2R1bGUxLmphdmEKaW5kZXggMGE3ZWE2YS4uZWE5MzBlNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvamF1dGgvQ2xpZW50TW9kdWxlMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL2phdXRoL0NsaWVudE1vZHVsZTEuamF2YQpAQCAtMjYsMjYgKzI2LDI2IEBACiAKIC8qCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShBdXRoUG9saWN5IHJlcXVlc3RQb2xpY3ksCi0JCQlBdXRoUG9saWN5IHJlc3BvbnNlUG9saWN5LAotCQkJQ2FsbGJhY2tIYW5kbGVyIGhhbmRsZXIsCi0JCQlNYXAgb3B0aW9ucykgeworICAgICAgICAgICAgQXV0aFBvbGljeSByZXNwb25zZVBvbGljeSwKKyAgICAgICAgICAgIENhbGxiYWNrSGFuZGxlciBoYW5kbGVyLAorICAgICAgICAgICAgTWFwIG9wdGlvbnMpIHsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZWN1cmVSZXF1ZXN0KEF1dGhQYXJhbSBwYXJhbSwKLQkJCQlTdWJqZWN0IHN1YmplY3QsCi0JCQkJTWFwIHNoYXJlZFN0YXRlKQotCQl0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgU3ViamVjdCBzdWJqZWN0LAorICAgICAgICAgICAgICAgIE1hcCBzaGFyZWRTdGF0ZSkKKyAgICAgICAgdGhyb3dzIEF1dGhFeGNlcHRpb24gewogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHZhbGlkYXRlUmVzcG9uc2UoQXV0aFBhcmFtIHBhcmFtLAotCQkJCVN1YmplY3Qgc3ViamVjdCwKLQkJCQlNYXAgc2hhcmVkU3RhdGUpCi0JCXRocm93cyBBdXRoRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICBTdWJqZWN0IHN1YmplY3QsCisgICAgICAgICAgICAgICAgTWFwIHNoYXJlZFN0YXRlKQorICAgICAgICB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZGlzcG9zZVN1YmplY3QoU3ViamVjdCBzdWJqZWN0LAotCQkJCU1hcCBzaGFyZWRTdGF0ZSkKLQkJdGhyb3dzIEF1dGhFeGNlcHRpb24geworICAgICAgICAgICAgICAgIE1hcCBzaGFyZWRTdGF0ZSkKKyAgICAgICAgdGhyb3dzIEF1dGhFeGNlcHRpb24gewogICAgIH0KICovCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9qYXV0aC9DbGllbnRNb2R1bGUyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9qYXV0aC9DbGllbnRNb2R1bGUyLmphdmEKaW5kZXggMDFjY2FiYy4uN2VlMzQ5NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvamF1dGgvQ2xpZW50TW9kdWxlMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL2phdXRoL0NsaWVudE1vZHVsZTIuamF2YQpAQCAtMjYsMjYgKzI2LDI2IEBACiAKIC8qCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShBdXRoUG9saWN5IHJlcXVlc3RQb2xpY3ksCi0JCQlBdXRoUG9saWN5IHJlc3BvbnNlUG9saWN5LAotCQkJQ2FsbGJhY2tIYW5kbGVyIGhhbmRsZXIsCi0JCQlNYXAgb3B0aW9ucykgeworICAgICAgICAgICAgQXV0aFBvbGljeSByZXNwb25zZVBvbGljeSwKKyAgICAgICAgICAgIENhbGxiYWNrSGFuZGxlciBoYW5kbGVyLAorICAgICAgICAgICAgTWFwIG9wdGlvbnMpIHsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZWN1cmVSZXF1ZXN0KEF1dGhQYXJhbSBwYXJhbSwKLQkJCQlTdWJqZWN0IHN1YmplY3QsCi0JCQkJTWFwIHNoYXJlZFN0YXRlKQotCQl0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgU3ViamVjdCBzdWJqZWN0LAorICAgICAgICAgICAgICAgIE1hcCBzaGFyZWRTdGF0ZSkKKyAgICAgICAgdGhyb3dzIEF1dGhFeGNlcHRpb24gewogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHZhbGlkYXRlUmVzcG9uc2UoQXV0aFBhcmFtIHBhcmFtLAotCQkJCVN1YmplY3Qgc3ViamVjdCwKLQkJCQlNYXAgc2hhcmVkU3RhdGUpCi0JCXRocm93cyBBdXRoRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICBTdWJqZWN0IHN1YmplY3QsCisgICAgICAgICAgICAgICAgTWFwIHNoYXJlZFN0YXRlKQorICAgICAgICB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZGlzcG9zZVN1YmplY3QoU3ViamVjdCBzdWJqZWN0LAotCQkJCU1hcCBzaGFyZWRTdGF0ZSkKLQkJdGhyb3dzIEF1dGhFeGNlcHRpb24geworICAgICAgICAgICAgICAgIE1hcCBzaGFyZWRTdGF0ZSkKKyAgICAgICAgdGhyb3dzIEF1dGhFeGNlcHRpb24gewogICAgIH0KICovCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9qYXV0aC9Db21tb25Nb2R1bGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL2phdXRoL0NvbW1vbk1vZHVsZS5qYXZhCmluZGV4IGNiOWM1ZDguLjYxZjhlZWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL2phdXRoL0NvbW1vbk1vZHVsZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL2phdXRoL0NvbW1vbk1vZHVsZS5qYXZhCkBAIC0zMiw3MyArMzIsNzMgQEAKICAgICBwcm90ZWN0ZWQgQ29tbW9uTW9kdWxlKCkgeyB9CiAKICAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKEF1dGhQb2xpY3kgcmVxdWVzdFBvbGljeSwKLQkJCUF1dGhQb2xpY3kgcmVzcG9uc2VQb2xpY3ksCi0JCQlDYWxsYmFja0hhbmRsZXIgaGFuZGxlciwKLQkJCU1hcCBvcHRpb25zKSB7Ci0JdGhpcy5yZXF1ZXN0UG9saWN5ID0gcmVxdWVzdFBvbGljeTsKLQl0aGlzLnJlc3BvbnNlUG9saWN5ID0gcmVzcG9uc2VQb2xpY3k7Ci0JdGhpcy5oYW5kbGVyID0gaGFuZGxlcjsKLQl0aGlzLm9wdGlvbnMgPSBvcHRpb25zOworICAgICAgICAgICAgQXV0aFBvbGljeSByZXNwb25zZVBvbGljeSwKKyAgICAgICAgICAgIENhbGxiYWNrSGFuZGxlciBoYW5kbGVyLAorICAgICAgICAgICAgTWFwIG9wdGlvbnMpIHsKKyAgICB0aGlzLnJlcXVlc3RQb2xpY3kgPSByZXF1ZXN0UG9saWN5OworICAgIHRoaXMucmVzcG9uc2VQb2xpY3kgPSByZXNwb25zZVBvbGljeTsKKyAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyOworICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2VjdXJlUmVxdWVzdChBdXRoUGFyYW0gcGFyYW0sCi0JCQkJU3ViamVjdCBzdWJqZWN0LAotCQkJCU1hcCBzaGFyZWRTdGF0ZSkKLQkJdGhyb3dzIEF1dGhFeGNlcHRpb24gewotCWlmIChjcmVkID09IG51bGwpIHsKLQkgICAgY3JlZCA9IG5ldyBUZXN0Q3JlZGVudGlhbCh0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpLAotCQkJCW9wdGlvbnMsCi0JCQkJcmVxdWVzdFBvbGljeSwKLQkJCQlyZXNwb25zZVBvbGljeSk7Ci0JfQotCXN1YmplY3QuZ2V0UHVibGljQ3JlZGVudGlhbHMoKS5hZGQoY3JlZCk7CisgICAgICAgICAgICAgICAgU3ViamVjdCBzdWJqZWN0LAorICAgICAgICAgICAgICAgIE1hcCBzaGFyZWRTdGF0ZSkKKyAgICAgICAgdGhyb3dzIEF1dGhFeGNlcHRpb24geworICAgIGlmIChjcmVkID09IG51bGwpIHsKKyAgICAgICAgY3JlZCA9IG5ldyBUZXN0Q3JlZGVudGlhbCh0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpLAorICAgICAgICAgICAgICAgIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgcmVxdWVzdFBvbGljeSwKKyAgICAgICAgICAgICAgICByZXNwb25zZVBvbGljeSk7CisgICAgfQorICAgIHN1YmplY3QuZ2V0UHVibGljQ3JlZGVudGlhbHMoKS5hZGQoY3JlZCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdmFsaWRhdGVSZXNwb25zZShBdXRoUGFyYW0gcGFyYW0sCi0JCQkJU3ViamVjdCBzdWJqZWN0LAotCQkJCU1hcCBzaGFyZWRTdGF0ZSkKLQkJdGhyb3dzIEF1dGhFeGNlcHRpb24gewotCWlmIChjcmVkID09IG51bGwpIHsKLQkgICAgY3JlZCA9IG5ldyBUZXN0Q3JlZGVudGlhbCh0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpLAotCQkJCW9wdGlvbnMsCi0JCQkJcmVxdWVzdFBvbGljeSwKLQkJCQlyZXNwb25zZVBvbGljeSk7Ci0JfQotCXN1YmplY3QuZ2V0UHVibGljQ3JlZGVudGlhbHMoKS5hZGQoY3JlZCk7CisgICAgICAgICAgICAgICAgU3ViamVjdCBzdWJqZWN0LAorICAgICAgICAgICAgICAgIE1hcCBzaGFyZWRTdGF0ZSkKKyAgICAgICAgdGhyb3dzIEF1dGhFeGNlcHRpb24geworICAgIGlmIChjcmVkID09IG51bGwpIHsKKyAgICAgICAgY3JlZCA9IG5ldyBUZXN0Q3JlZGVudGlhbCh0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpLAorICAgICAgICAgICAgICAgIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgcmVxdWVzdFBvbGljeSwKKyAgICAgICAgICAgICAgICByZXNwb25zZVBvbGljeSk7CisgICAgfQorICAgIHN1YmplY3QuZ2V0UHVibGljQ3JlZGVudGlhbHMoKS5hZGQoY3JlZCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdmFsaWRhdGVSZXF1ZXN0KEF1dGhQYXJhbSBwYXJhbSwKLQkJCQlTdWJqZWN0IHN1YmplY3QsCi0JCQkJTWFwIHNoYXJlZFN0YXRlKQotCQl0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7Ci0JaWYgKGNyZWQgPT0gbnVsbCkgewotCSAgICBjcmVkID0gbmV3IFRlc3RDcmVkZW50aWFsKHRoaXMuZ2V0Q2xhc3MoKS5nZXROYW1lKCksCi0JCQkJb3B0aW9ucywKLQkJCQlyZXF1ZXN0UG9saWN5LAotCQkJCXJlc3BvbnNlUG9saWN5KTsKLQl9Ci0Jc3ViamVjdC5nZXRQdWJsaWNDcmVkZW50aWFscygpLmFkZChjcmVkKTsKKyAgICAgICAgICAgICAgICBTdWJqZWN0IHN1YmplY3QsCisgICAgICAgICAgICAgICAgTWFwIHNoYXJlZFN0YXRlKQorICAgICAgICB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CisgICAgaWYgKGNyZWQgPT0gbnVsbCkgeworICAgICAgICBjcmVkID0gbmV3IFRlc3RDcmVkZW50aWFsKHRoaXMuZ2V0Q2xhc3MoKS5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgb3B0aW9ucywKKyAgICAgICAgICAgICAgICByZXF1ZXN0UG9saWN5LAorICAgICAgICAgICAgICAgIHJlc3BvbnNlUG9saWN5KTsKKyAgICB9CisgICAgc3ViamVjdC5nZXRQdWJsaWNDcmVkZW50aWFscygpLmFkZChjcmVkKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZWN1cmVSZXNwb25zZShBdXRoUGFyYW0gcGFyYW0sCi0JCQkJU3ViamVjdCBzdWJqZWN0LAotCQkJCU1hcCBzaGFyZWRTdGF0ZSkKLQkJdGhyb3dzIEF1dGhFeGNlcHRpb24gewotCWlmIChjcmVkID09IG51bGwpIHsKLQkgICAgY3JlZCA9IG5ldyBUZXN0Q3JlZGVudGlhbCh0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpLAotCQkJCW9wdGlvbnMsCi0JCQkJcmVxdWVzdFBvbGljeSwKLQkJCQlyZXNwb25zZVBvbGljeSk7Ci0JfQotCXN1YmplY3QuZ2V0UHVibGljQ3JlZGVudGlhbHMoKS5hZGQoY3JlZCk7CisgICAgICAgICAgICAgICAgU3ViamVjdCBzdWJqZWN0LAorICAgICAgICAgICAgICAgIE1hcCBzaGFyZWRTdGF0ZSkKKyAgICAgICAgdGhyb3dzIEF1dGhFeGNlcHRpb24geworICAgIGlmIChjcmVkID09IG51bGwpIHsKKyAgICAgICAgY3JlZCA9IG5ldyBUZXN0Q3JlZGVudGlhbCh0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpLAorICAgICAgICAgICAgICAgIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgcmVxdWVzdFBvbGljeSwKKyAgICAgICAgICAgICAgICByZXNwb25zZVBvbGljeSk7CisgICAgfQorICAgIHN1YmplY3QuZ2V0UHVibGljQ3JlZGVudGlhbHMoKS5hZGQoY3JlZCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZGlzcG9zZVN1YmplY3QoU3ViamVjdCBzdWJqZWN0LAotCQkJCU1hcCBzaGFyZWRTdGF0ZSkKLQkJdGhyb3dzIEF1dGhFeGNlcHRpb24gewotCWlmIChjcmVkICE9IG51bGwpIHsKLQkgICAgc3ViamVjdC5nZXRQdWJsaWNDcmVkZW50aWFscygpLnJlbW92ZShjcmVkKTsKLQl9CisgICAgICAgICAgICAgICAgTWFwIHNoYXJlZFN0YXRlKQorICAgICAgICB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CisgICAgaWYgKGNyZWQgIT0gbnVsbCkgeworICAgICAgICBzdWJqZWN0LmdldFB1YmxpY0NyZWRlbnRpYWxzKCkucmVtb3ZlKGNyZWQpOworICAgIH0KICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL2phdXRoL1NlcnZlck1vZHVsZTEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL2phdXRoL1NlcnZlck1vZHVsZTEuamF2YQppbmRleCA1ZjU4ZGM2Li4wYjY5ZGFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9qYXV0aC9TZXJ2ZXJNb2R1bGUxLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvamF1dGgvU2VydmVyTW9kdWxlMS5qYXZhCkBAIC0yNiwyNiArMjYsMjYgQEAKIAogLyoKICAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKEF1dGhQb2xpY3kgcmVxdWVzdFBvbGljeSwKLQkJCUF1dGhQb2xpY3kgcmVzcG9uc2VQb2xpY3ksCi0JCQlDYWxsYmFja0hhbmRsZXIgaGFuZGxlciwKLQkJCU1hcCBvcHRpb25zKSB7CisgICAgICAgICAgICBBdXRoUG9saWN5IHJlc3BvbnNlUG9saWN5LAorICAgICAgICAgICAgQ2FsbGJhY2tIYW5kbGVyIGhhbmRsZXIsCisgICAgICAgICAgICBNYXAgb3B0aW9ucykgewogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHZhbGlkYXRlUmVxdWVzdChBdXRoUGFyYW0gcGFyYW0sCi0JCQkJU3ViamVjdCBzdWJqZWN0LAotCQkJCU1hcCBzaGFyZWRTdGF0ZSkKLQkJdGhyb3dzIEF1dGhFeGNlcHRpb24geworICAgICAgICAgICAgICAgIFN1YmplY3Qgc3ViamVjdCwKKyAgICAgICAgICAgICAgICBNYXAgc2hhcmVkU3RhdGUpCisgICAgICAgIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZWN1cmVSZXNwb25zZShBdXRoUGFyYW0gcGFyYW0sCi0JCQkJU3ViamVjdCBzdWJqZWN0LAotCQkJCU1hcCBzaGFyZWRTdGF0ZSkKLQkJdGhyb3dzIEF1dGhFeGNlcHRpb24geworICAgICAgICAgICAgICAgIFN1YmplY3Qgc3ViamVjdCwKKyAgICAgICAgICAgICAgICBNYXAgc2hhcmVkU3RhdGUpCisgICAgICAgIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkaXNwb3NlU3ViamVjdChTdWJqZWN0IHN1YmplY3QsCi0JCQkJTWFwIHNoYXJlZFN0YXRlKQotCQl0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgTWFwIHNoYXJlZFN0YXRlKQorICAgICAgICB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CiAgICAgfQogKi8KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL2phdXRoL1NlcnZlck1vZHVsZTIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL2phdXRoL1NlcnZlck1vZHVsZTIuamF2YQppbmRleCBlMzU3MWZjLi5iMDIxZTM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9qYXV0aC9TZXJ2ZXJNb2R1bGUyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvamF1dGgvU2VydmVyTW9kdWxlMi5qYXZhCkBAIC0yNiwyNiArMjYsMjYgQEAKIAogLyoKICAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKEF1dGhQb2xpY3kgcmVxdWVzdFBvbGljeSwKLQkJCUF1dGhQb2xpY3kgcmVzcG9uc2VQb2xpY3ksCi0JCQlDYWxsYmFja0hhbmRsZXIgaGFuZGxlciwKLQkJCU1hcCBvcHRpb25zKSB7CisgICAgICAgICAgICBBdXRoUG9saWN5IHJlc3BvbnNlUG9saWN5LAorICAgICAgICAgICAgQ2FsbGJhY2tIYW5kbGVyIGhhbmRsZXIsCisgICAgICAgICAgICBNYXAgb3B0aW9ucykgewogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHZhbGlkYXRlUmVxdWVzdChBdXRoUGFyYW0gcGFyYW0sCi0JCQkJU3ViamVjdCBzdWJqZWN0LAotCQkJCU1hcCBzaGFyZWRTdGF0ZSkKLQkJdGhyb3dzIEF1dGhFeGNlcHRpb24geworICAgICAgICAgICAgICAgIFN1YmplY3Qgc3ViamVjdCwKKyAgICAgICAgICAgICAgICBNYXAgc2hhcmVkU3RhdGUpCisgICAgICAgIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZWN1cmVSZXNwb25zZShBdXRoUGFyYW0gcGFyYW0sCi0JCQkJU3ViamVjdCBzdWJqZWN0LAotCQkJCU1hcCBzaGFyZWRTdGF0ZSkKLQkJdGhyb3dzIEF1dGhFeGNlcHRpb24geworICAgICAgICAgICAgICAgIFN1YmplY3Qgc3ViamVjdCwKKyAgICAgICAgICAgICAgICBNYXAgc2hhcmVkU3RhdGUpCisgICAgICAgIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkaXNwb3NlU3ViamVjdChTdWJqZWN0IHN1YmplY3QsCi0JCQkJTWFwIHNoYXJlZFN0YXRlKQotCQl0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgTWFwIHNoYXJlZFN0YXRlKQorICAgICAgICB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CiAgICAgfQogKi8KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL2phdXRoL1Rlc3RDcmVkZW50aWFsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9qYXV0aC9UZXN0Q3JlZGVudGlhbC5qYXZhCmluZGV4IDVjOTA4MjAuLmYwOTI4ODkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL2phdXRoL1Rlc3RDcmVkZW50aWFsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvamF1dGgvVGVzdENyZWRlbnRpYWwuamF2YQpAQCAtMjYsNDAgKzI2LDQwIEBACiAgICAgQXV0aFBvbGljeSByZXNwb25zZVBvbGljeTsKIAogICAgIHB1YmxpYyBUZXN0Q3JlZGVudGlhbChTdHJpbmcgbW9kdWxlQ2xhc3MsCi0JCQlNYXAgb3B0aW9ucywKLQkJCUF1dGhQb2xpY3kgcmVxdWVzdFBvbGljeSwKLQkJCUF1dGhQb2xpY3kgcmVzcG9uc2VQb2xpY3kpIHsKLQl0aGlzLm1vZHVsZUNsYXNzID0gbW9kdWxlQ2xhc3M7Ci0JdGhpcy5vcHRpb25zID0gb3B0aW9uczsKLQl0aGlzLnJlcXVlc3RQb2xpY3kgPSByZXF1ZXN0UG9saWN5OwotCXRoaXMucmVzcG9uc2VQb2xpY3kgPSByZXNwb25zZVBvbGljeTsKKyAgICAgICAgICAgIE1hcCBvcHRpb25zLAorICAgICAgICAgICAgQXV0aFBvbGljeSByZXF1ZXN0UG9saWN5LAorICAgICAgICAgICAgQXV0aFBvbGljeSByZXNwb25zZVBvbGljeSkgeworICAgIHRoaXMubW9kdWxlQ2xhc3MgPSBtb2R1bGVDbGFzczsKKyAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOworICAgIHRoaXMucmVxdWVzdFBvbGljeSA9IHJlcXVlc3RQb2xpY3k7CisgICAgdGhpcy5yZXNwb25zZVBvbGljeSA9IHJlc3BvbnNlUG9saWN5OwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgewotCWlmICh0aGlzID09IG8pIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfQorICAgIGlmICh0aGlzID09IG8pIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCi0JaWYgKCEobyBpbnN0YW5jZW9mIFRlc3RDcmVkZW50aWFsKSkgewotCSAgICByZXR1cm4gZmFsc2U7Ci0JfQotCVRlc3RDcmVkZW50aWFsIHRoYXQgPSAoVGVzdENyZWRlbnRpYWwpbzsKKyAgICBpZiAoIShvIGluc3RhbmNlb2YgVGVzdENyZWRlbnRpYWwpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgVGVzdENyZWRlbnRpYWwgdGhhdCA9IChUZXN0Q3JlZGVudGlhbClvOwogCi0JaWYgKHRoaXMubW9kdWxlQ2xhc3MuZXF1YWxzKHRoYXQubW9kdWxlQ2xhc3MpICYmCi0JICAgIHRoaXMub3B0aW9ucy5lcXVhbHModGhhdC5vcHRpb25zKSAmJgotCSAgICAodGhpcy5yZXF1ZXN0UG9saWN5ID09IHRoYXQucmVxdWVzdFBvbGljeSB8fAotCQkodGhpcy5yZXF1ZXN0UG9saWN5ICE9IG51bGwgJiYKLQkJCXRoaXMucmVxdWVzdFBvbGljeS5lcXVhbHModGhhdC5yZXF1ZXN0UG9saWN5KSkpICYmCi0JICAgICh0aGlzLnJlc3BvbnNlUG9saWN5ID09IHRoYXQucmVzcG9uc2VQb2xpY3kgfHwKLQkJKHRoaXMucmVzcG9uc2VQb2xpY3kgIT0gbnVsbCAmJgotCQkJdGhpcy5yZXNwb25zZVBvbGljeS5lcXVhbHModGhhdC5yZXNwb25zZVBvbGljeSkpKSkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9CisgICAgaWYgKHRoaXMubW9kdWxlQ2xhc3MuZXF1YWxzKHRoYXQubW9kdWxlQ2xhc3MpICYmCisgICAgICAgIHRoaXMub3B0aW9ucy5lcXVhbHModGhhdC5vcHRpb25zKSAmJgorICAgICAgICAodGhpcy5yZXF1ZXN0UG9saWN5ID09IHRoYXQucmVxdWVzdFBvbGljeSB8fAorICAgICAgICAodGhpcy5yZXF1ZXN0UG9saWN5ICE9IG51bGwgJiYKKyAgICAgICAgICAgIHRoaXMucmVxdWVzdFBvbGljeS5lcXVhbHModGhhdC5yZXF1ZXN0UG9saWN5KSkpICYmCisgICAgICAgICh0aGlzLnJlc3BvbnNlUG9saWN5ID09IHRoYXQucmVzcG9uc2VQb2xpY3kgfHwKKyAgICAgICAgKHRoaXMucmVzcG9uc2VQb2xpY3kgIT0gbnVsbCAmJgorICAgICAgICAgICAgdGhpcy5yZXNwb25zZVBvbGljeS5lcXVhbHModGhhdC5yZXNwb25zZVBvbGljeSkpKSkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKLQlyZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0JcmV0dXJuIG1vZHVsZUNsYXNzLmhhc2hDb2RlKCkgKyBvcHRpb25zLmhhc2hDb2RlKCk7CisgICAgcmV0dXJuIG1vZHVsZUNsYXNzLmhhc2hDb2RlKCkgKyBvcHRpb25zLmhhc2hDb2RlKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvdGVzdENvbmZpZy9kb21haW4ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvdGVzdENvbmZpZy9kb21haW4ueG1sCmluZGV4IDNiMmNkN2MuLjJlZGRhNjBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC90ZXN0Q29uZmlnL2RvbWFpbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvdGVzdENvbmZpZy9kb21haW4ueG1sCkBAIC0xNDMsNDggKzE0Myw0OCBAQAogCiAKIAotCTxtZXNzYWdlLXNlY3VyaXR5LWNvbmZpZyBhdXRoLWxheWVyPSJTT0FQIiBkZWZhdWx0LXByb3ZpZGVyPSJhcHA3IiBkZWZhdWx0LWNsaWVudC1wcm92aWRlcj0iYXBwMiI+Ci0JICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHAxIiBwcm92aWRlci10eXBlPSJjbGllbnQiIGNsYXNzLW5hbWU9IkNsaWVudE1vZHVsZTEiPgotCQk8cmVxdWVzdC1wb2xpY3kgYXV0aC1zb3VyY2U9InNlbmRlciIgYXV0aC1yZWNpcGllbnQ9ImJlZm9yZS1jb250ZW50Ij48L3JlcXVlc3QtcG9saWN5PgotCQk8cmVzcG9uc2UtcG9saWN5IGF1dGgtc291cmNlPSJjb250ZW50IiBhdXRoLXJlY2lwaWVudD0iYWZ0ZXItY29udGVudCI+PC9yZXNwb25zZS1wb2xpY3k+Ci0JICA8L3Byb3ZpZGVyLWNvbmZpZz4KLQkgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDIiIHByb3ZpZGVyLXR5cGU9ImNsaWVudCIgY2xhc3MtbmFtZT0iQ2xpZW50TW9kdWxlMSI+Ci0JCTxyZXF1ZXN0LXBvbGljeSBhdXRoLXNvdXJjZT0ic2VuZGVyIiBhdXRoLXJlY2lwaWVudD0iYmVmb3JlLWNvbnRlbnQiPjwvcmVxdWVzdC1wb2xpY3k+Ci0JCTxyZXNwb25zZS1wb2xpY3kgYXV0aC1zb3VyY2U9ImNvbnRlbnQiIGF1dGgtcmVjaXBpZW50PSJhZnRlci1jb250ZW50Ij48L3Jlc3BvbnNlLXBvbGljeT4KLQkJPHByb3BlcnR5IG5hbWU9Im9wdGlvbjEiIHZhbHVlPSJ0cnVlIi8+Ci0JICA8L3Byb3ZpZGVyLWNvbmZpZz4KLQkgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDMiIHByb3ZpZGVyLXR5cGU9ImNsaWVudCIgY2xhc3MtbmFtZT0iQ2xpZW50TW9kdWxlMSI+Ci0JCTxyZXF1ZXN0LXBvbGljeSBhdXRoLXNvdXJjZT0ic2VuZGVyIiBhdXRoLXJlY2lwaWVudD0iYmVmb3JlLWNvbnRlbnQiPjwvcmVxdWVzdC1wb2xpY3k+Ci0JICA8L3Byb3ZpZGVyLWNvbmZpZz4KLQkgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDQiIHByb3ZpZGVyLXR5cGU9ImNsaWVudCIgY2xhc3MtbmFtZT0iQ2xpZW50TW9kdWxlMSI+Ci0JCTxyZXNwb25zZS1wb2xpY3kgYXV0aC1zb3VyY2U9ImNvbnRlbnQiIGF1dGgtcmVjaXBpZW50PSJhZnRlci1jb250ZW50Ij48L3Jlc3BvbnNlLXBvbGljeT4KLQkgIDwvcHJvdmlkZXItY29uZmlnPgotCSAgPHByb3ZpZGVyLWNvbmZpZyBwcm92aWRlci1pZD0iYXBwNSIgcHJvdmlkZXItdHlwZT0iY2xpZW50IiBjbGFzcy1uYW1lPSJDbGllbnRNb2R1bGUxIj4KLQkgIDwvcHJvdmlkZXItY29uZmlnPgotCSAgPHByb3ZpZGVyLWNvbmZpZyBwcm92aWRlci1pZD0iYXBwNiIgcHJvdmlkZXItdHlwZT0ic2VydmVyIiBjbGFzcy1uYW1lPSJTZXJ2ZXJNb2R1bGUxIj4KLQkgIDwvcHJvdmlkZXItY29uZmlnPgotCSAgPHByb3ZpZGVyLWNvbmZpZyBwcm92aWRlci1pZD0iYXBwNyIgcHJvdmlkZXItdHlwZT0ic2VydmVyIiBjbGFzcy1uYW1lPSJTZXJ2ZXJNb2R1bGUxIj4KLQkJPHJlcXVlc3QtcG9saWN5IGF1dGgtc291cmNlPSJzZW5kZXIiIGF1dGgtcmVjaXBpZW50PSJiZWZvcmUtY29udGVudCI+PC9yZXF1ZXN0LXBvbGljeT4KLQkJPHJlc3BvbnNlLXBvbGljeSBhdXRoLXNvdXJjZT0iY29udGVudCIgYXV0aC1yZWNpcGllbnQ9ImFmdGVyLWNvbnRlbnQiPjwvcmVzcG9uc2UtcG9saWN5PgotCSAgPC9wcm92aWRlci1jb25maWc+Ci0JPC9tZXNzYWdlLXNlY3VyaXR5LWNvbmZpZz4KKyAgICA8bWVzc2FnZS1zZWN1cml0eS1jb25maWcgYXV0aC1sYXllcj0iU09BUCIgZGVmYXVsdC1wcm92aWRlcj0iYXBwNyIgZGVmYXVsdC1jbGllbnQtcHJvdmlkZXI9ImFwcDIiPgorICAgICAgPHByb3ZpZGVyLWNvbmZpZyBwcm92aWRlci1pZD0iYXBwMSIgcHJvdmlkZXItdHlwZT0iY2xpZW50IiBjbGFzcy1uYW1lPSJDbGllbnRNb2R1bGUxIj4KKyAgICAgICAgPHJlcXVlc3QtcG9saWN5IGF1dGgtc291cmNlPSJzZW5kZXIiIGF1dGgtcmVjaXBpZW50PSJiZWZvcmUtY29udGVudCI+PC9yZXF1ZXN0LXBvbGljeT4KKyAgICAgICAgPHJlc3BvbnNlLXBvbGljeSBhdXRoLXNvdXJjZT0iY29udGVudCIgYXV0aC1yZWNpcGllbnQ9ImFmdGVyLWNvbnRlbnQiPjwvcmVzcG9uc2UtcG9saWN5PgorICAgICAgPC9wcm92aWRlci1jb25maWc+CisgICAgICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHAyIiBwcm92aWRlci10eXBlPSJjbGllbnQiIGNsYXNzLW5hbWU9IkNsaWVudE1vZHVsZTEiPgorICAgICAgICA8cmVxdWVzdC1wb2xpY3kgYXV0aC1zb3VyY2U9InNlbmRlciIgYXV0aC1yZWNpcGllbnQ9ImJlZm9yZS1jb250ZW50Ij48L3JlcXVlc3QtcG9saWN5PgorICAgICAgICA8cmVzcG9uc2UtcG9saWN5IGF1dGgtc291cmNlPSJjb250ZW50IiBhdXRoLXJlY2lwaWVudD0iYWZ0ZXItY29udGVudCI+PC9yZXNwb25zZS1wb2xpY3k+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvcHRpb24xIiB2YWx1ZT0idHJ1ZSIvPgorICAgICAgPC9wcm92aWRlci1jb25maWc+CisgICAgICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHAzIiBwcm92aWRlci10eXBlPSJjbGllbnQiIGNsYXNzLW5hbWU9IkNsaWVudE1vZHVsZTEiPgorICAgICAgICA8cmVxdWVzdC1wb2xpY3kgYXV0aC1zb3VyY2U9InNlbmRlciIgYXV0aC1yZWNpcGllbnQ9ImJlZm9yZS1jb250ZW50Ij48L3JlcXVlc3QtcG9saWN5PgorICAgICAgPC9wcm92aWRlci1jb25maWc+CisgICAgICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHA0IiBwcm92aWRlci10eXBlPSJjbGllbnQiIGNsYXNzLW5hbWU9IkNsaWVudE1vZHVsZTEiPgorICAgICAgICA8cmVzcG9uc2UtcG9saWN5IGF1dGgtc291cmNlPSJjb250ZW50IiBhdXRoLXJlY2lwaWVudD0iYWZ0ZXItY29udGVudCI+PC9yZXNwb25zZS1wb2xpY3k+CisgICAgICA8L3Byb3ZpZGVyLWNvbmZpZz4KKyAgICAgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDUiIHByb3ZpZGVyLXR5cGU9ImNsaWVudCIgY2xhc3MtbmFtZT0iQ2xpZW50TW9kdWxlMSI+CisgICAgICA8L3Byb3ZpZGVyLWNvbmZpZz4KKyAgICAgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDYiIHByb3ZpZGVyLXR5cGU9InNlcnZlciIgY2xhc3MtbmFtZT0iU2VydmVyTW9kdWxlMSI+CisgICAgICA8L3Byb3ZpZGVyLWNvbmZpZz4KKyAgICAgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDciIHByb3ZpZGVyLXR5cGU9InNlcnZlciIgY2xhc3MtbmFtZT0iU2VydmVyTW9kdWxlMSI+CisgICAgICAgIDxyZXF1ZXN0LXBvbGljeSBhdXRoLXNvdXJjZT0ic2VuZGVyIiBhdXRoLXJlY2lwaWVudD0iYmVmb3JlLWNvbnRlbnQiPjwvcmVxdWVzdC1wb2xpY3k+CisgICAgICAgIDxyZXNwb25zZS1wb2xpY3kgYXV0aC1zb3VyY2U9ImNvbnRlbnQiIGF1dGgtcmVjaXBpZW50PSJhZnRlci1jb250ZW50Ij48L3Jlc3BvbnNlLXBvbGljeT4KKyAgICAgIDwvcHJvdmlkZXItY29uZmlnPgorICAgIDwvbWVzc2FnZS1zZWN1cml0eS1jb25maWc+CiAKIAogPCEtLSBub3Qgc3VwcG9ydGVkIHlldAogCiAKLQk8bWVzc2FnZS1zZWN1cml0eS1jb25maWcgYXV0aC1sYXllcj0iSFRUUCIgZGVmYXVsdC1wcm92aWRlcj0iYXBwOCI+Ci0JICA8L3Byb3ZpZGVyLWNvbmZpZz4KLQkgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDgiIHByb3ZpZGVyLXR5cGU9InNlcnZlciIgY2xhc3MtbmFtZT0iU2VydmVyTW9kdWxlMSI+Ci0JICA8L3Byb3ZpZGVyLWNvbmZpZz4KLQkgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDkiIHByb3ZpZGVyLXR5cGU9InNlcnZlciIgY2xhc3MtbmFtZT0iU2VydmVyTW9kdWxlMSI+Ci0JPC9tZXNzYWdlLXNlY3VyaXR5LWNvbmZpZz4KKyAgICA8bWVzc2FnZS1zZWN1cml0eS1jb25maWcgYXV0aC1sYXllcj0iSFRUUCIgZGVmYXVsdC1wcm92aWRlcj0iYXBwOCI+CisgICAgICA8L3Byb3ZpZGVyLWNvbmZpZz4KKyAgICAgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDgiIHByb3ZpZGVyLXR5cGU9InNlcnZlciIgY2xhc3MtbmFtZT0iU2VydmVyTW9kdWxlMSI+CisgICAgICA8L3Byb3ZpZGVyLWNvbmZpZz4KKyAgICAgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDkiIHByb3ZpZGVyLXR5cGU9InNlcnZlciIgY2xhc3MtbmFtZT0iU2VydmVyTW9kdWxlMSI+CisgICAgPC9tZXNzYWdlLXNlY3VyaXR5LWNvbmZpZz4KIAogCi0JPG1lc3NhZ2Utc2VjdXJpdHktY29uZmlnIGF1dGgtbGF5ZXI9IkVKQiIgZGVmYXVsdC1wcm92aWRlcj0iYXBwMTAiPgotCSAgPC9wcm92aWRlci1jb25maWc+Ci0JICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHAxMCIgcHJvdmlkZXItdHlwZT0ic2VydmVyIiBjbGFzcy1uYW1lPSJTZXJ2ZXJNb2R1bGUxIj4KLQk8L21lc3NhZ2Utc2VjdXJpdHktY29uZmlnPgorICAgIDxtZXNzYWdlLXNlY3VyaXR5LWNvbmZpZyBhdXRoLWxheWVyPSJFSkIiIGRlZmF1bHQtcHJvdmlkZXI9ImFwcDEwIj4KKyAgICAgIDwvcHJvdmlkZXItY29uZmlnPgorICAgICAgPHByb3ZpZGVyLWNvbmZpZyBwcm92aWRlci1pZD0iYXBwMTAiIHByb3ZpZGVyLXR5cGU9InNlcnZlciIgY2xhc3MtbmFtZT0iU2VydmVyTW9kdWxlMSI+CisgICAgPC9tZXNzYWdlLXNlY3VyaXR5LWNvbmZpZz4KIAogLS0+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL3Rlc3RDb25maWcvc3VuLWFjYy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC90ZXN0Q29uZmlnL3N1bi1hY2MueG1sCmluZGV4IDY5MGFjYWIuLjg1ZWYwMzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL3Rlc3RDb25maWcvc3VuLWFjYy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvdGVzdENvbmZpZy9zdW4tYWNjLnhtbApAQCAtMjMsNDggKzIzLDQ4IEBACiAgIDx0YXJnZXQtc2VydmVyIG5hbWU9ImQtdXNjYTE0LTEzMy03My5TRkJheS5TdW4uQ09NIiBhZGRyZXNzPSJkLXVzY2ExNC0xMzMtNzMuU0ZCYXkuU3VuLkNPTSIgcG9ydD0iMzcwMCIvPgogICA8bG9nLXNlcnZpY2UgZmlsZT0iIiBsZXZlbD0iV0FSTklORyIvPgogCi0JICA8bWVzc2FnZS1zZWN1cml0eS1jb25maWcgYXV0aC1sYXllcj0iU09BUCIgZGVmYXVsdC1wcm92aWRlcj0iYXBwNyIgZGVmYXVsdC1jbGllbnQtcHJvdmlkZXI9ImFwcDIiPgotCSAgPHByb3ZpZGVyLWNvbmZpZyBwcm92aWRlci1pZD0iYXBwMSIgcHJvdmlkZXItdHlwZT0iY2xpZW50IiBjbGFzcy1uYW1lPSJDbGllbnRNb2R1bGUxIj4KLQkJPHJlcXVlc3QtcG9saWN5IGF1dGgtc291cmNlPSJzZW5kZXIiIGF1dGgtcmVjaXBpZW50PSJiZWZvcmUtY29udGVudCI+PC9yZXF1ZXN0LXBvbGljeT4KLQkJPHJlc3BvbnNlLXBvbGljeSBhdXRoLXNvdXJjZT0iY29udGVudCIgYXV0aC1yZWNpcGllbnQ9ImFmdGVyLWNvbnRlbnQiPjwvcmVzcG9uc2UtcG9saWN5PgotCSAgPC9wcm92aWRlci1jb25maWc+Ci0JICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHAyIiBwcm92aWRlci10eXBlPSJjbGllbnQiIGNsYXNzLW5hbWU9IkNsaWVudE1vZHVsZTEiPgotCQk8cmVxdWVzdC1wb2xpY3kgYXV0aC1zb3VyY2U9InNlbmRlciIgYXV0aC1yZWNpcGllbnQ9ImJlZm9yZS1jb250ZW50Ij48L3JlcXVlc3QtcG9saWN5PgotCQk8cmVzcG9uc2UtcG9saWN5IGF1dGgtc291cmNlPSJjb250ZW50IiBhdXRoLXJlY2lwaWVudD0iYWZ0ZXItY29udGVudCI+PC9yZXNwb25zZS1wb2xpY3k+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJvcHRpb24xIiB2YWx1ZT0idHJ1ZSIvPgotCSAgPC9wcm92aWRlci1jb25maWc+Ci0JICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHAzIiBwcm92aWRlci10eXBlPSJjbGllbnQiIGNsYXNzLW5hbWU9IkNsaWVudE1vZHVsZTEiPgotCQk8cmVxdWVzdC1wb2xpY3kgYXV0aC1zb3VyY2U9InNlbmRlciIgYXV0aC1yZWNpcGllbnQ9ImJlZm9yZS1jb250ZW50Ij48L3JlcXVlc3QtcG9saWN5PgotCSAgPC9wcm92aWRlci1jb25maWc+Ci0JICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHA0IiBwcm92aWRlci10eXBlPSJjbGllbnQiIGNsYXNzLW5hbWU9IkNsaWVudE1vZHVsZTEiPgotCQk8cmVzcG9uc2UtcG9saWN5IGF1dGgtc291cmNlPSJjb250ZW50IiBhdXRoLXJlY2lwaWVudD0iYWZ0ZXItY29udGVudCI+PC9yZXNwb25zZS1wb2xpY3k+Ci0JICA8L3Byb3ZpZGVyLWNvbmZpZz4KLQkgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDUiIHByb3ZpZGVyLXR5cGU9ImNsaWVudCIgY2xhc3MtbmFtZT0iQ2xpZW50TW9kdWxlMSI+Ci0JICA8L3Byb3ZpZGVyLWNvbmZpZz4KLQkgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDYiIHByb3ZpZGVyLXR5cGU9InNlcnZlciIgY2xhc3MtbmFtZT0iU2VydmVyTW9kdWxlMSI+Ci0JICA8L3Byb3ZpZGVyLWNvbmZpZz4KLQkgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDciIHByb3ZpZGVyLXR5cGU9InNlcnZlciIgY2xhc3MtbmFtZT0iU2VydmVyTW9kdWxlMSI+Ci0JCTxyZXF1ZXN0LXBvbGljeSBhdXRoLXNvdXJjZT0ic2VuZGVyIiBhdXRoLXJlY2lwaWVudD0iYmVmb3JlLWNvbnRlbnQiPjwvcmVxdWVzdC1wb2xpY3k+Ci0JCTxyZXNwb25zZS1wb2xpY3kgYXV0aC1zb3VyY2U9ImNvbnRlbnQiIGF1dGgtcmVjaXBpZW50PSJhZnRlci1jb250ZW50Ij48L3Jlc3BvbnNlLXBvbGljeT4KLQkgIDwvcHJvdmlkZXItY29uZmlnPgotCTwvbWVzc2FnZS1zZWN1cml0eS1jb25maWc+CisgICAgICA8bWVzc2FnZS1zZWN1cml0eS1jb25maWcgYXV0aC1sYXllcj0iU09BUCIgZGVmYXVsdC1wcm92aWRlcj0iYXBwNyIgZGVmYXVsdC1jbGllbnQtcHJvdmlkZXI9ImFwcDIiPgorICAgICAgPHByb3ZpZGVyLWNvbmZpZyBwcm92aWRlci1pZD0iYXBwMSIgcHJvdmlkZXItdHlwZT0iY2xpZW50IiBjbGFzcy1uYW1lPSJDbGllbnRNb2R1bGUxIj4KKyAgICAgICAgPHJlcXVlc3QtcG9saWN5IGF1dGgtc291cmNlPSJzZW5kZXIiIGF1dGgtcmVjaXBpZW50PSJiZWZvcmUtY29udGVudCI+PC9yZXF1ZXN0LXBvbGljeT4KKyAgICAgICAgPHJlc3BvbnNlLXBvbGljeSBhdXRoLXNvdXJjZT0iY29udGVudCIgYXV0aC1yZWNpcGllbnQ9ImFmdGVyLWNvbnRlbnQiPjwvcmVzcG9uc2UtcG9saWN5PgorICAgICAgPC9wcm92aWRlci1jb25maWc+CisgICAgICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHAyIiBwcm92aWRlci10eXBlPSJjbGllbnQiIGNsYXNzLW5hbWU9IkNsaWVudE1vZHVsZTEiPgorICAgICAgICA8cmVxdWVzdC1wb2xpY3kgYXV0aC1zb3VyY2U9InNlbmRlciIgYXV0aC1yZWNpcGllbnQ9ImJlZm9yZS1jb250ZW50Ij48L3JlcXVlc3QtcG9saWN5PgorICAgICAgICA8cmVzcG9uc2UtcG9saWN5IGF1dGgtc291cmNlPSJjb250ZW50IiBhdXRoLXJlY2lwaWVudD0iYWZ0ZXItY29udGVudCI+PC9yZXNwb25zZS1wb2xpY3k+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvcHRpb24xIiB2YWx1ZT0idHJ1ZSIvPgorICAgICAgPC9wcm92aWRlci1jb25maWc+CisgICAgICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHAzIiBwcm92aWRlci10eXBlPSJjbGllbnQiIGNsYXNzLW5hbWU9IkNsaWVudE1vZHVsZTEiPgorICAgICAgICA8cmVxdWVzdC1wb2xpY3kgYXV0aC1zb3VyY2U9InNlbmRlciIgYXV0aC1yZWNpcGllbnQ9ImJlZm9yZS1jb250ZW50Ij48L3JlcXVlc3QtcG9saWN5PgorICAgICAgPC9wcm92aWRlci1jb25maWc+CisgICAgICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHA0IiBwcm92aWRlci10eXBlPSJjbGllbnQiIGNsYXNzLW5hbWU9IkNsaWVudE1vZHVsZTEiPgorICAgICAgICA8cmVzcG9uc2UtcG9saWN5IGF1dGgtc291cmNlPSJjb250ZW50IiBhdXRoLXJlY2lwaWVudD0iYWZ0ZXItY29udGVudCI+PC9yZXNwb25zZS1wb2xpY3k+CisgICAgICA8L3Byb3ZpZGVyLWNvbmZpZz4KKyAgICAgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDUiIHByb3ZpZGVyLXR5cGU9ImNsaWVudCIgY2xhc3MtbmFtZT0iQ2xpZW50TW9kdWxlMSI+CisgICAgICA8L3Byb3ZpZGVyLWNvbmZpZz4KKyAgICAgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDYiIHByb3ZpZGVyLXR5cGU9InNlcnZlciIgY2xhc3MtbmFtZT0iU2VydmVyTW9kdWxlMSI+CisgICAgICA8L3Byb3ZpZGVyLWNvbmZpZz4KKyAgICAgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDciIHByb3ZpZGVyLXR5cGU9InNlcnZlciIgY2xhc3MtbmFtZT0iU2VydmVyTW9kdWxlMSI+CisgICAgICAgIDxyZXF1ZXN0LXBvbGljeSBhdXRoLXNvdXJjZT0ic2VuZGVyIiBhdXRoLXJlY2lwaWVudD0iYmVmb3JlLWNvbnRlbnQiPjwvcmVxdWVzdC1wb2xpY3k+CisgICAgICAgIDxyZXNwb25zZS1wb2xpY3kgYXV0aC1zb3VyY2U9ImNvbnRlbnQiIGF1dGgtcmVjaXBpZW50PSJhZnRlci1jb250ZW50Ij48L3Jlc3BvbnNlLXBvbGljeT4KKyAgICAgIDwvcHJvdmlkZXItY29uZmlnPgorICAgIDwvbWVzc2FnZS1zZWN1cml0eS1jb25maWc+CiAKIAogPCEtLSBub3Qgc3VwcG9ydGVkIHlldAogCiAKLQk8bWVzc2FnZS1zZWN1cml0eS1jb25maWcgYXV0aC1sYXllcj0iSFRUUCIgZGVmYXVsdC1wcm92aWRlcj0iYXBwOCI+Ci0JICA8L3Byb3ZpZGVyLWNvbmZpZz4KLQkgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDgiIHByb3ZpZGVyLXR5cGU9InNlcnZlciIgY2xhc3MtbmFtZT0iU2VydmVyTW9kdWxlMSI+Ci0JICA8L3Byb3ZpZGVyLWNvbmZpZz4KLQkgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDkiIHByb3ZpZGVyLXR5cGU9InNlcnZlciIgY2xhc3MtbmFtZT0iU2VydmVyTW9kdWxlMSI+Ci0JPC9tZXNzYWdlLXNlY3VyaXR5LWNvbmZpZz4KKyAgICA8bWVzc2FnZS1zZWN1cml0eS1jb25maWcgYXV0aC1sYXllcj0iSFRUUCIgZGVmYXVsdC1wcm92aWRlcj0iYXBwOCI+CisgICAgICA8L3Byb3ZpZGVyLWNvbmZpZz4KKyAgICAgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDgiIHByb3ZpZGVyLXR5cGU9InNlcnZlciIgY2xhc3MtbmFtZT0iU2VydmVyTW9kdWxlMSI+CisgICAgICA8L3Byb3ZpZGVyLWNvbmZpZz4KKyAgICAgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDkiIHByb3ZpZGVyLXR5cGU9InNlcnZlciIgY2xhc3MtbmFtZT0iU2VydmVyTW9kdWxlMSI+CisgICAgPC9tZXNzYWdlLXNlY3VyaXR5LWNvbmZpZz4KIAogCi0JPG1lc3NhZ2Utc2VjdXJpdHktY29uZmlnIGF1dGgtbGF5ZXI9IkVKQiIgZGVmYXVsdC1wcm92aWRlcj0iYXBwMTAiPgotCSAgPC9wcm92aWRlci1jb25maWc+Ci0JICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHAxMCIgcHJvdmlkZXItdHlwZT0ic2VydmVyIiBjbGFzcy1uYW1lPSJTZXJ2ZXJNb2R1bGUxIj4KLQk8L21lc3NhZ2Utc2VjdXJpdHktY29uZmlnPgorICAgIDxtZXNzYWdlLXNlY3VyaXR5LWNvbmZpZyBhdXRoLWxheWVyPSJFSkIiIGRlZmF1bHQtcHJvdmlkZXI9ImFwcDEwIj4KKyAgICAgIDwvcHJvdmlkZXItY29uZmlnPgorICAgICAgPHByb3ZpZGVyLWNvbmZpZyBwcm92aWRlci1pZD0iYXBwMTAiIHByb3ZpZGVyLXR5cGU9InNlcnZlciIgY2xhc3MtbmFtZT0iU2VydmVyTW9kdWxlMSI+CisgICAgPC9tZXNzYWdlLXNlY3VyaXR5LWNvbmZpZz4KIAogLS0+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NwbG9naW4vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NwbG9naW4vYnVpbGQucHJvcGVydGllcwppbmRleCBlMWJiNmQ3Li40OGI1OGJkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jcGxvZ2luL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY3Bsb2dpbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyOCArMTUsMjggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlYy1wbG9naW4iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNvbnZlcnRlciIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY29udmVydGVyIi8+ICAgICAgICBcdTAwMjAKIAotPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiAKLQl2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCi08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgCi0JdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSJcdTAwMjAKKyAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIlx1MDAyMAorICAgIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+ICAgICAgICBcdTAwMjAKIAotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iY29tLnN1bi5kZXZ0ZXN0LnNlY3VyaXR5LnBsb2dpbi5jb252ZXJ0ZXIuY2xpZW50LkNvbnZlcnRlckNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJjb20uc3VuLmRldnRlc3Quc2VjdXJpdHkucGxvZ2luLmNvbnZlcnRlci5jbGllbnQuQ29udmVydGVyQ2xpZW50Ii8+CiAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogCiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogCkBAIC00NSw4ICs0NSw4IEBACiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDwhLS0KIDxwcm9wZXJ0eSBuYW1lPSJqbmRpLm5hbWUiIHZhbHVlPSJQTG9naW5Db252ZXJ0ZXIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJwcm92aWRlci51cmwiIHZhbHVlPSJpaW9wOi8vbG9jYWxob3N0OiR7b3JiLnBvcnR9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2UubmFtaW5nLlNlcmlhbEluaXRDb250ZXh0RmFjdG9yeSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IiB2YWx1ZT0iY29tLnN1bi5qbmRpLmNvc25hbWluZy5DTkN0eEZhY3RvcnkiLz4gCis8cHJvcGVydHkgbmFtZT0icHJvdmlkZXIudXJsIiB2YWx1ZT0iaWlvcDovL2xvY2FsaG9zdDoke29yYi5wb3J0fSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2UubmFtaW5nLlNlcmlhbEluaXRDb250ZXh0RmFjdG9yeSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiIHZhbHVlPSJjb20uc3VuLmpuZGkuY29zbmFtaW5nLkNOQ3R4RmFjdG9yeSIvPlx1MDAyMAogLS0+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NwbG9naW4vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY3Bsb2dpbi9idWlsZC54bWwKaW5kZXggNDE5MmRhNy4uZjUzNTA1NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY3Bsb2dpbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY3Bsb2dpbi9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTEsNyArNTEsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtYXV0aC1maWxlcmVhbG0iPgpAQCAtOTMsNyArOTMsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcGVybWlzc2lvbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgPGNvcHkgZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8uLi9saWIvYXBwY2xpZW50L2NsaWVudC5wb2xpY3kiIAorICAgICAgPGNvcHkgZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8uLi9saWIvYXBwY2xpZW50L2NsaWVudC5wb2xpY3kiCiAgICAgICAgIHRvZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8uLi9saWIvYXBwY2xpZW50L2NsaWVudC5wb2xpY3kub3JnIgogICAgICAgICBvdmVyd3JpdGU9InRydWUiLz4KICAgICAgIDwhLS0gcmVwbGFjZSAiXCIgYnkgIi8iIGluIFBDIGVudiAtLT4KQEAgLTExMCwxOCArMTEwLDE4IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUtcGVybWlzc2lvbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgPGNvcHkgZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8uLi9saWIvYXBwY2xpZW50L2NsaWVudC5wb2xpY3kub3JnIiAKKyAgICAgIDxjb3B5IGZpbGU9IiR7YWRtaW4uZG9tYWluLmRpcn0vLi4vbGliL2FwcGNsaWVudC9jbGllbnQucG9saWN5Lm9yZyIKICAgICAgICAgdG9maWxlPSIke2FkbWluLmRvbWFpbi5kaXJ9Ly4uL2xpYi9hcHBjbGllbnQvY2xpZW50LnBvbGljeSIKLSAgICAgICAgb3ZlcndyaXRlPSJ0cnVlIi8+IAorICAgICAgICBvdmVyd3JpdGU9InRydWUiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtbG9jYWwiLz4gCi0gCTxhbnRjYWxsIHRhcmdldD0icnVuLXN0YW5kYWxvbmUtY2xpZW50Ii8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWxvY2FsIi8+CisgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLXN0YW5kYWxvbmUtY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudC1sb2NhbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTI5LDEyICsxMjksMTIgQEAKICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSI+CiAgICAgICAgIDxhcmcgdmFsdWU9Ii1jbGllbnQiIC8+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIvPgotICAJPCEtLSBkdW1teSB1c2VyIGFkZGVkIGFzIGFwcGNsaWVudCB0aHJvd2luZyBsb2dpbiB3aW5kb3cgLS0+CQorICAgICAgPCEtLSBkdW1teSB1c2VyIGFkZGVkIGFzIGFwcGNsaWVudCB0aHJvd2luZyBsb2dpbiB3aW5kb3cgLS0+CiAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgICAgPCEtLSBUYXJnZXQgdG8gcnVuIHRoZSBzdGFuZGFsb25lIGNsaWVudCB3aXRob3V0IEFDQyAtLT4KQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgICAgICA8anZtYXJnIHZhbHVlPSItRGphdmEuc2VjdXJpdHkuYXV0aC5sb2dpbi5jb25maWc9JHthZG1pbi5kb21haW4uZGlyfS8uLi9saWIvYXBwY2xpZW50L2FwcGNsaWVudGxvZ2luLmNvbmYiLz4KICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxIb3N0PSR7YWRtaW4uaG9zdH0iLz4KICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0PSR7b3JiLnBvcnR9Ii8+Ci0JPGp2bWFyZyB2YWx1ZT0iLURjb20uc3VuLkNPUkJBLmNvbm5lY3Rpb24uT1JCU29ja2V0RmFjdG9yeUNsYXNzPWNvbS5zdW4uZW50ZXJwcmlzZS5paW9wLklJT1BTU0xTb2NrZXRGYWN0b3J5Ii8+CisgICAgPGp2bWFyZyB2YWx1ZT0iLURjb20uc3VuLkNPUkJBLmNvbm5lY3Rpb24uT1JCU29ja2V0RmFjdG9yeUNsYXNzPWNvbS5zdW4uZW50ZXJwcmlzZS5paW9wLklJT1BTU0xTb2NrZXRGYWN0b3J5Ii8+CiA8IS0tCiAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1EamF2YXgucm1pLkNPUkJBLlV0aWxDbGFzcz1jb20uc3VuLmNvcmJhLmVlLmltcGwuamF2YXgucm1pLkNPUkJBLlV0aWwiLz4KICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURqYXZheC5ybWkuQ09SQkEuU3R1YkNsYXNzPWNvbS5zdW4uY29yYmEuZWUuaW1wbC5qYXZheC5ybWkuQ09SQkEuU3R1YkRlbGVnYXRlSW1wbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY3Bsb2dpbi9jbGllbnQvQ29udmVydGVyQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jcGxvZ2luL2NsaWVudC9Db252ZXJ0ZXJDbGllbnQuamF2YQppbmRleCBkYTUxMjc1Li41OTQ0MWFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jcGxvZ2luL2NsaWVudC9Db252ZXJ0ZXJDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jcGxvZ2luL2NsaWVudC9Db252ZXJ0ZXJDbGllbnQuamF2YQpAQCAtMjksNyArMjksNyBAQAogCiAvKioKICAqIEEgc2ltcGxlIGphdmEgY2xpZW50LiBUaGlzIHVzZXMgdGhlIHNlcnZpY2VzIHByb3ZpZGVkIGJ5IHRoZSA8Y29kZT5Db252ZXJ0ZXJCZWFuPC9jb2RlPiBhbmQKLSAqIGNvbnZlcnRzIDEwMCBVUyBkb2xsYXJzIHRvIFllbiBhbmQgMTAwIFllbiB0byBFdXJvLiAKKyAqIGNvbnZlcnRzIDEwMCBVUyBkb2xsYXJzIHRvIFllbiBhbmQgMTAwIFllbiB0byBFdXJvLgogICogPHA+SW4gdGhpcyByZWdhcmQsIGl0IGRvZXMgdGhlIGZvbGxvd2luZyBpbiBvcmRlcgogICogPHVsPgogICogPGxpPkxvY2F0ZXMgdGhlIGhvbWUgaW50ZXJmYWNlIG9mIHRoZSBlbnRlcnByaXNlIGJlYW4KQEAgLTM5LDIxICszOSwyMSBAQAogICogPGJyPgogICogPGI+TG9jYXRpbmcgdGhlIGhvbWUgaW50ZXJmYWNlOjwvYj4KICAqIDxibG9ja3F1b3RlPjxwcmU+Ci0gKglDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAqCUNvbnRleHQgbXlFbnYgPSAoQ29udGV4dClpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2VudiIpOwotICoJT2JqZWN0IG9ianJlZiA9IG15RW52Lmxvb2t1cCgiZWpiL1NpbXBsZUNvbnZlcnRlciIpOworICogICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgKiAgICBDb250ZXh0IG15RW52ID0gKENvbnRleHQpaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYiKTsKKyAqICAgIE9iamVjdCBvYmpyZWYgPSBteUVudi5sb29rdXAoImVqYi9TaW1wbGVDb252ZXJ0ZXIiKTsKICAqICBDb252ZXJ0ZXJIb21lIGhvbWUgPSAoQ29udmVydGVySG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBDb252ZXJ0ZXJIb21lLmNsYXNzKTsKICAqIDwvcHJlPjwvYmxvY2txdW90ZT4KICAqIDxicj4KICAqIDxiPkNyZWF0aW5nIHRoZSByZW1vdGUgaW50ZXJmYWNlOjwvYj4KICAqIDxibG9ja3F1b3RlPjxwcmU+Ci0gKglDb252ZXJ0ZXIgY3VycmVuY3lDb252ZXJ0ZXIgPSBob21lLmNyZWF0ZSgpOworICogICAgQ29udmVydGVyIGN1cnJlbmN5Q29udmVydGVyID0gaG9tZS5jcmVhdGUoKTsKICAqIDwvcHJlPjwvYmxvY2txdW90ZT4KICAqIDxicj4KICAqIDxiPkludm9raW5nIGJ1c2luZXNzIG1ldGhvZHM6PC9iPgogICogPGJsb2NrcXVvdGU+PHByZT4KICAqICBCaWdEZWNpbWFsIHBhcmFtID0gbmV3IEJpZ0RlY2ltYWwgKCIxMDAuMDAiKTsKLSAqCWFtb3VudCA9IGN1cnJlbmN5Q29udmVydGVyLmRvbGxhclRvWWVuKHBhcmFtKTsKKyAqICAgIGFtb3VudCA9IGN1cnJlbmN5Q29udmVydGVyLmRvbGxhclRvWWVuKHBhcmFtKTsKICAqICBhbW91bnQgPSBjdXJyZW5jeUNvbnZlcnRlci55ZW5Ub0V1cm8ocGFyYW0pOwogICogPC9wcmU+PC9ibG9ja3F1b3RlPgogICogPGJyPgpAQCAtODIsMjUgKzgyLDI1IEBACiAgICAgKgogICAgICovCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCUNvbnZlcnRlckNsaWVudCBjbGllbnQgPSBuZXcgQ29udmVydGVyQ2xpZW50KCk7Ci0JY2xpZW50LnJ1bihhcmdzKTsKKyAgICBDb252ZXJ0ZXJDbGllbnQgY2xpZW50ID0gbmV3IENvbnZlcnRlckNsaWVudCgpOworICAgIGNsaWVudC5ydW4oYXJncyk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHJ1bihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIFN0cmluZyB1cmwgPSBudWxsOwotCVN0cmluZyB0ZXN0SWRQcmVmaXggPSBudWxsOwotCVN0cmluZyB0ZXN0SWQgPSAiIjsKKyAgICBTdHJpbmcgdGVzdElkUHJlZml4ID0gbnVsbDsKKyAgICBTdHJpbmcgdGVzdElkID0gIiI7CiAgICAgICAgIFN0cmluZyBqbmRpTmFtZSA9IG51bGw7CiAgICAgICAgIENvbnRleHQgY29udGV4dCA9IG51bGw7CiAgICAgICAgIFN0cmluZyBjdHhGYWN0b3J5ID0gbnVsbDsKLQlqYXZhLmxhbmcuT2JqZWN0IG9iaiA9IG51bGw7CisgICAgamF2YS5sYW5nLk9iamVjdCBvYmogPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiU2VjdXJpdHk6OmNsaWVudCBzaWRlIHByb2dyYW1tYXRpYyBsb2dpbiIpOwogCiAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMykgewogICAgICAgICAgICAgICAgIHVybCA9IGFyZ3NbMF07CiAgICAgICAgICAgICAgICAgY3R4RmFjdG9yeSA9IGFyZ3NbMV07Ci0JCWpuZGlOYW1lID0gYXJnc1syXTsKKyAgICAgICAgam5kaU5hbWUgPSBhcmdzWzJdOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBTdHJpbmcgdXNlciA9ICJzaGluZ3dhaSI7CkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgICAgIFByb2dyYW1tYXRpY0xvZ2luIHBsb2dpbiA9IG5ldyBQcm9ncmFtbWF0aWNMb2dpbigpOwogICAgICAgICAgICAgcGxvZ2luLmxvZ2luKHVzZXIsIHBhc3N3b3JkKTsKICAgICAgICAgICAgIGJvb2xlYW4gaXNBcHBDbGllbnRUZXN0ID0gKHVybCA9PSBudWxsKSB8fCAoY3R4RmFjdG9yeSA9PSBudWxsKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogVXNlciB0eCBpcyB0byB0ZXN0IGlzc3VlOgogICAgICAgICAgICAgICogaHR0cHM6Ly9nbGFzc2Zpc2guZGV2LmphdmEubmV0L2lzc3Vlcy9zaG93X2J1Zy5jZ2k/aWQ9MTU2OApAQCAtMTE3LDcgKzExNyw3IEBACiAgICAgICAgICAgICBVc2VyVHJhbnNhY3Rpb24gdXQgPSBudWxsOwogCiAgICAgICAgICAgICBpZiAoaXNBcHBDbGllbnRUZXN0KSB7Ci0JCXRlc3RJZFByZWZpeCA9ICJTZWM6OlBMb2dpbiBDb252ZXJ0ZXIgU2FtcGxlIEFwcENsaWVudCI7CisgICAgICAgIHRlc3RJZFByZWZpeCA9ICJTZWM6OlBMb2dpbiBDb252ZXJ0ZXIgU2FtcGxlIEFwcENsaWVudCI7CiAgICAgICAgICAgICAgICAgdGVzdElkID0gdGVzdElkUHJlZml4OwogICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIENvbnRleHQgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMKICAgICAgICAgICAgICAgICBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgICAgICAgICBvYmogPSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvUExvZ2luU2ltcGxlQ29udmVydGVyIik7CiAgICAgICAgICAgICAgICAgdXQgPSAoVXNlclRyYW5zYWN0aW9uKSBjb250ZXh0Lmxvb2t1cCgiVXNlclRyYW5zYWN0aW9uIik7CiAgICAgICAgICAgICB9IGVsc2UgewotCQl0ZXN0SWRQcmVmaXggPSAiU2VjOjpQTG9naW4gU3RhbmRhbG9uZS1DbGllbnQiOworICAgICAgICB0ZXN0SWRQcmVmaXggPSAiU2VjOjpQTG9naW4gU3RhbmRhbG9uZS1DbGllbnQiOwogICAgICAgICAgICAgICAgIHRlc3RJZCA9IHRlc3RJZFByZWZpeDsKICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzIGVudiA9IG5ldyBQcm9wZXJ0aWVzKCk7CiAgICAgICAgICAgICAgICAgZW52LnB1dCgiamF2YS5uYW1pbmcucHJvdmlkZXIudXJsIiwgdXJsKTsKQEAgLTEzNyw3ICsxMzcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVVJMOiAiICsgdXJsICsgIiwgRmFjdG9yeTogIiArIGN0eEZhY3RvcnkpOwogICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBIb21lIG9iamVjdAogICAgICAgICAgICAgICAgIG9iaiA9IGNvbnRleHQubG9va3VwKGpuZGlOYW1lKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIHV0ID0gKFVzZXJUcmFuc2FjdGlvbikgY29udGV4dC5sb29rdXAoIlVzZXJUcmFuc2FjdGlvbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgQ29udmVydGVyUmVtb3RlSG9tZSBob21lID0KQEAgLTE0NSw3ICsxNDUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0ZXJSZW1vdGVIb21lLmNsYXNzKTsKIAogICAgICAgICAgICAgQ29udmVydGVyUmVtb3RlIGN1cnJlbmN5Q29udmVydGVyID0gaG9tZS5jcmVhdGUoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuXG5cbj09PT09PT09PT09QmVnaW5uaW5nIFNpbXBsZSBUZXN0PT09PT1cblxuIik7CiAgICAgICAgICAgICB0ZXN0SWQgPSB0ZXN0SWRQcmVmaXggKyAiIFByb2dyYW1tYXRpYyBMb2dpbiI7CiAgICAgICAgICAgICBwcm9jZXNzUmVxdWVzdChob21lLCAiMTAwIik7CkBAIC0xNjYsNyArMTY2LDcgQEAKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJPSyEgR290IGFuIGV4cGVjdGVkIGphdmEucm1pLkFjY2Vzc0V4Y2VwdGlvbiIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHRlc3RJZCA9IHRlc3RJZFByZWZpeCArICIgUHJvZ3JhbW1hdGljIFJlbG9naW4gYWZ0ZXIgbG9nb3V0IjsKICAgICAgICAgICAgIHBsb2dpbi5sb2dpbih1c2VyLCBwYXNzd29yZCk7CiAgICAgICAgICAgICBwcm9jZXNzUmVxdWVzdChob21lLCAiNTAwIik7CkBAIC0xOTAsNyArMTkwLDcgQEAKICAgICAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KGhvbWUsICI4MDAiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGV4KSB7Ci0JICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVGVzdElEIiArdGVzdElkKTsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJUZXN0SUQiICt0ZXN0SWQpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gdW5leHBlY3RlZCBleGNlcHRpb24hIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTIwMiwzMyArMjAyLDMzIEBACiAgICAgLy8gZGVmYXVsdCBtZXRob2QgdGhhdCBkb2VzIG5vdCByZXF1aXJlIHRyYW5zYWN0aW9uCiAgICAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NSZXF1ZXN0KENvbnZlcnRlclJlbW90ZUhvbWUgaG9tZSwgU3RyaW5nIGFtdCkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KGhvbWUsIGFtdCwgbnVsbCk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NSZXF1ZXN0KENvbnZlcnRlclJlbW90ZUhvbWUgaG9tZSwgU3RyaW5nIGFtdCwKICAgICAgICAgVXNlclRyYW5zYWN0aW9uIHR4KSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBDb252ZXJ0ZXJSZW1vdGUgY3VycmVuY3lDb252ZXJ0ZXIgPSBob21lLmNyZWF0ZSgpOwotICAgICAgICAgICAgCi0gICAgICAgIFN0cmluZyBzID0gY3VycmVuY3lDb252ZXJ0ZXIubXlDYWxsZXJQcmluY2lwYWwoKTsgICAgICAgICAgICAKKworICAgICAgICBTdHJpbmcgcyA9IGN1cnJlbmN5Q29udmVydGVyLm15Q2FsbGVyUHJpbmNpcGFsKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFRoZSBjYWxsZXIgcHJpbmNpcGFsIHJlY2VpdmVkIGZyb20gZWpiIC0+IitzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIEJpZ0RlY2ltYWwgcGFyYW0gPSBuZXcgQmlnRGVjaW1hbCAoYW10KTsKICAgICAgICAgaWYgKHR4ICE9IG51bGwpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVnaW5uaW5nIHVzZXIgdHJhbnNhY3Rpb24iKTsKICAgICAgICAgICAgIHR4LmJlZ2luKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgQmlnRGVjaW1hbCBhbW91bnQgPSBjdXJyZW5jeUNvbnZlcnRlci5kb2xsYXJUb1llbihwYXJhbSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiJCIgKyBhbXQgKyAiIGlzIDogIithbW91bnQrIlllbiIpOwogICAgICAgICBhbW91bnQgPSBjdXJyZW5jeUNvbnZlcnRlci55ZW5Ub0V1cm8ocGFyYW0pOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlllbiBpcyA6IithbW91bnQrIkV1cm9cbiIpOwotICAgICAgICAKKwogICAgICAgICBpZiAodHggIT0gbnVsbCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb21taXR0aW5nIHVzZXIgdHJhbnNhY3Rpb24iKTsKICAgICAgICAgICAgIHR4LmNvbW1pdCgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jcGxvZ2luL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY3Bsb2dpbi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAppbmRleCBkMDJkMDljLi5kMDE0MWVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jcGxvZ2luL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NwbG9naW4vZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKQEAgLTIzLDcgKzIzLDcgQEAKICAgICA8c21hbGwtaWNvbj48L3NtYWxsLWljb24+CiAgICAgPGxhcmdlLWljb24+PC9sYXJnZS1pY29uPgogICA8L2ljb24+Ci0gIDxkaXNwbGF5LW5hbWU+UExvZ2luQ29udmVydGVyQXBwPC9kaXNwbGF5LW5hbWU+ICAKKyAgPGRpc3BsYXktbmFtZT5QTG9naW5Db252ZXJ0ZXJBcHA8L2Rpc3BsYXktbmFtZT4KICAgPG1vZHVsZT4KICAgICA8amF2YT5zZWMtcGxvZ2luLWNvbnZlcnRlci1jbGllbnQuamFyPC9qYXZhPgogICA8L21vZHVsZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NwbG9naW4vZWpiL0NvbnZlcnRlckJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NwbG9naW4vZWpiL0NvbnZlcnRlckJlYW4uamF2YQppbmRleCA2YTgyNDYwLi5lZmY2NjY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jcGxvZ2luL2VqYi9Db252ZXJ0ZXJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY3Bsb2dpbi9lamIvQ29udmVydGVyQmVhbi5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAgICAgQmlnRGVjaW1hbCB5ZW5SYXRlID0gbmV3IEJpZ0RlY2ltYWwoIjEyMS42MDAwIik7CiAgICAgQmlnRGVjaW1hbCBldXJvUmF0ZSA9IG5ldyBCaWdEZWNpbWFsKCIwLjAwNzciKTsKICAgICBTZXNzaW9uQ29udGV4dCBteXNjID0gbnVsbDsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgbXlDYWxsZXJQcmluY2lwYWwoKXsKICAgICAgICAgcmV0dXJuIG15c2MuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkudG9TdHJpbmcoKTsKICAgICB9CkBAIC00MSw3ICs0MSw3IEBACiAgICAgICogUmV0dXJucyB0aGUgeWVuIHZhbHVlIGZvciBhIGdpdmVuIGRvbGxhciBhbW91bnQuCiAgICAgICogQHBhcmFtIGRvbGxhcnMgZG9sbGFyIGFtb3VudCB0byBiZSBjb252ZXJ0ZWQgdG8geWVuLgogICAgICAqLwotICAgIHB1YmxpYyBCaWdEZWNpbWFsIGRvbGxhclRvWWVuKEJpZ0RlY2ltYWwgZG9sbGFycykgeyAgICAgICAKKyAgICBwdWJsaWMgQmlnRGVjaW1hbCBkb2xsYXJUb1llbihCaWdEZWNpbWFsIGRvbGxhcnMpIHsKICAgICAgICAgQmlnRGVjaW1hbCByZXN1bHQgPSBkb2xsYXJzLm11bHRpcGx5KHllblJhdGUpOwogICAgICAgICByZXR1cm4gcmVzdWx0LnNldFNjYWxlKDIsQmlnRGVjaW1hbC5ST1VORF9VUCk7CiAgICAgfQpAQCAtNzUsNyArNzUsNyBAQAogICAgICAqIExvYWRzIHRoZSBzdGF0ZSBvZiB0aGUgYmVhbiBmcm9tIHNlY29uZGFyeSBzdG9yYWdlLiBSZXF1aXJlZCBieSBFSkIgc3BlYy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBLZWVwcyB0aGUgc3RhdGUgb2YgdGhlIGJlYW4gdG8gc2Vjb25kYXJ5IHN0b3JhZ2UuIFJlcXVpcmVkIGJ5IEVKQiBzcGVjLgogICAgICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY3Bsb2dpbi9lamIvQ29udmVydGVyUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jcGxvZ2luL2VqYi9Db252ZXJ0ZXJSZW1vdGUuamF2YQppbmRleCBiYzMxZDc1Li4yNGNkNWY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jcGxvZ2luL2VqYi9Db252ZXJ0ZXJSZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jcGxvZ2luL2VqYi9Db252ZXJ0ZXJSZW1vdGUuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAqIEBwYXJhbSB5ZW4geWVuIGFtb3VudCB0byBiZSBjb252ZXJ0ZWQgdG8gZXVyby4KICAgICAgKi8KICAgICBwdWJsaWMgQmlnRGVjaW1hbCB5ZW5Ub0V1cm8oQmlnRGVjaW1hbCB5ZW4pIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIG15Q2FsbGVyUHJpbmNpcGFsKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZGVmYXVsdHAyci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZGVmYXVsdHAyci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI5OGUwZmYuLjZiZGI3MzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2RlZmF1bHRwMnIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9kZWZhdWx0cDJyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5LWRlZmF1bHRwMnIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9IiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZGVmYXVsdHAyci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9kZWZhdWx0cDJyL2J1aWxkLnhtbAppbmRleCA4ODljOGNkLi5hMjBmNGFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9kZWZhdWx0cDJyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9kZWZhdWx0cDJyL2J1aWxkLnhtbApAQCAtMjYsNyArMjYsNyBAQAogXT4KIAogPHByb2plY3QgbmFtZT0ic2VjdXJpdHktZGVmYXVsdHAyciIgYmFzZWRpcj0iLiIgZGVmYXVsdD0idXNhZ2UiPgotICAKKwogICAmY29tbW9uU2V0dXA7CiAgICZjb21tb25CdWlsZDsKICAgJmNvbW1vblJ1bjsKQEAgLTM4LDEwICszOCwxMCBAQAogICAgIDxhbnRjYWxsIHRhcmdldD0idGVzdC1wMnItZGlzYWJsZWQiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAiLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0idGVzdC1wMnItZW5hYmxlZCIKICAgICAgIGRlcGVuZHM9ImVuYWJsZS1wMnIsIGRlcGxveSwgcnVuLCB1bmRlcGxveSIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9InRlc3QtcDJyLWRpc2FibGVkIgogICAgICAgZGVwZW5kcz0iZGlzYWJsZS1wMnIsIGRlcGxveSwgcnVuLW5lZ2F0aXZlLCB1bmRlcGxveSIvPgogCkBAIC00OSwyNSArNDksMjUgQEAKICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICA8ZGVsZXRlIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJ3ZWIiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+IAorICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iPgogICAgICAgPHBhcmFtIG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iJHthcHBuYW1lfSIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWIiPgogICAgICAgPHBhcmFtIG5hbWU9InNlcnZsZXQiIHZhbHVlPSJUZXN0U2VydmxldCIvPgpAQCAtODYsNyArODYsNyBAQAogICAgICAgPHBhcmFtIG5hbWU9InRlc3RjYXNlaWQiIHZhbHVlPSJ1c2VyLWF1dGgtd2l0aC1nZXQiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InJ1bi1uZWdhdGl2ZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViLTQwMyI+CiAgICAgICA8cGFyYW0gbmFtZT0ic2VydmxldCIgdmFsdWU9IlRlc3RTZXJ2bGV0Ii8+CkBAIC05Niw3ICs5Niw3IEBACiAgICAgICA8cGFyYW0gbmFtZT0idGVzdGNhc2VpZCIgdmFsdWU9InVzZXItYXV0aC1zaG91bGQtZmFpbCIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0icnVud2ViIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPHRhc2tkZWYgbmFtZT0id2VidGVzdCIgY2xhc3NuYW1lPSIke3dlYnRlc3QuY2xhc3NuYW1lfSIKICAgICAgICAgY2xhc3NwYXRoPSIke3dlYnRlc3QuY2xhc3NwYXRofSIgLz4KQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICB0ZXN0Q2FzZURlc2NyaXB0aW9uPSJUZXN0aW5nIGRlZmF1bHQgcHJpbmNpcGFsIHRvIHJvbGUgbWFwcGluZyIKICAgICAgICAgdGVzdFN0cmF0ZWd5PSJUZXN0aW5nIGRlZmF1bHQgcHJpbmNpcGFsIHRvIHJvbGUgbWFwcGluZyIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJydW53ZWItNDAzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPHRhc2tkZWYgbmFtZT0id2VidGVzdCIgY2xhc3NuYW1lPSIke3dlYnRlc3QuY2xhc3NuYW1lfSIKICAgICAgICAgY2xhc3NwYXRoPSIke3dlYnRlc3QuY2xhc3NwYXRofSIgLz4KQEAgLTE1NiwxNSArMTU2LDE1IEBACiAgICAgICAgIHRlc3RDYXNlRGVzY3JpcHRpb249IlRlc3RpbmcgZGVmYXVsdCBwMnIgbWFwcGluZyBkaXNhYmxlZCIKICAgICAgICAgdGVzdFN0cmF0ZWd5PSJUZXN0aW5nIGRlZmF1bHQgcDJyIG1hcHBpbmcgZGlzYWJsZWQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJzZXR1cCI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtdXNlci1jb21tb24iPgogICAgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJib2JieSIvPgpAQCAtMTczLDE0ICsxNzMsMTQgQEAKICAgICA8L2FudGNhbGw+CiAgICA8IS0tIDxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+LS0+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiPgogICAgIDwhLS0gcmVtb3ZlIHRlc3QgdXNlcnMsIGp1c3QgY2xlYW51cC4gLS0+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtdXNlci1jb21tb24iPgogICAgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJib2JieSIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iZW5hYmxlLXAyciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KQEAgLTE4OCw3ICsxODgsNyBAQAogICAgICAgICAgIHZhbHVlPSJzZXJ2ZXItY29uZmlnLnNlY3VyaXR5LXNlcnZpY2UuYWN0aXZhdGUtZGVmYXVsdC1wcmluY2lwYWwtdG8tcm9sZS1tYXBwaW5nPXRydWUiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImRpc2FibGUtcDJyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZGVmYXVsdHAyci9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9kZWZhdWx0cDJyL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAyNTUwZDJlLi4zYjQ4OTg3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9kZWZhdWx0cDJyL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9kZWZhdWx0cDJyL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMTksNyArMTksNyBAQAogLS0+CiAKIDx3ZWItYXBwPgotICAKKwogICA8ZGlzcGxheS1uYW1lPnNlY3VyaXR5LWRlZmF1bHRwMnI8L2Rpc3BsYXktbmFtZT4KICAgPGRpc3RyaWJ1dGFibGU+PC9kaXN0cmlidXRhYmxlPgogICA8c2VydmxldD4KQEAgLTMwLDcgKzMwLDcgQEAKICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgPHVybC1wYXR0ZXJuPi9UZXN0U2VydmxldDwvdXJsLXBhdHRlcm4+CiAgIDwvc2VydmxldC1tYXBwaW5nPgotICAKKwogICA8c2VjdXJpdHktY29uc3RyYWludD4KICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CiAgICAgICA8d2ViLXJlc291cmNlLW5hbWU+c2VjdXJlPC93ZWItcmVzb3VyY2UtbmFtZT4KQEAgLTQ1LDE0ICs0NSwxNCBAQAogICAgICAgPHRyYW5zcG9ydC1ndWFyYW50ZWU+Tk9ORTwvdHJhbnNwb3J0LWd1YXJhbnRlZT4KICAgICA8L3VzZXItZGF0YS1jb25zdHJhaW50PgogICA8L3NlY3VyaXR5LWNvbnN0cmFpbnQ+Ci0gIAorCiAgIDxsb2dpbi1jb25maWc+CiAgICAgPGF1dGgtbWV0aG9kPkJBU0lDPC9hdXRoLW1ldGhvZD4KICAgICA8cmVhbG0tbmFtZT5kZWZhdWx0PC9yZWFsbS1uYW1lPgogICA8L2xvZ2luLWNvbmZpZz4KLSAgCisKICAgPHNlY3VyaXR5LXJvbGU+CiAgICAgPHJvbGUtbmFtZT5teWdyb3VwPC9yb2xlLW5hbWU+CiAgIDwvc2VjdXJpdHktcm9sZT4KLSAgCisKIDwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2RlZmF1bHRwMnIvd2ViL1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9kZWZhdWx0cDJyL3dlYi9UZXN0U2VydmxldC5qYXZhCmluZGV4IGRkNGU4ODMuLjIyMDgyZTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2RlZmF1bHRwMnIvd2ViL1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZGVmYXVsdHAyci93ZWIvVGVzdFNlcnZsZXQuamF2YQpAQCAtMjQsMTAgKzI0LDEwIEBACiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKIAogcHVibGljIGNsYXNzIFRlc3RTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCiAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBtZXRob2QgPSByZXEuZ2V0TWV0aG9kKCk7CiAgICAgICAgIGlmIChtZXRob2QuZXF1YWxzKCJGT08iKSkgewogICAgICAgICAgICAgZG9Gb28ocmVxLCByZXNwKTsKQEAgLTM1LDE4ICszNSwxOCBAQAogICAgICAgICAgICAgc3VwZXIuc2VydmljZShyZXEsIHJlc3ApOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9Gb28oSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQogICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwogICAgICAgICBvdXQucHJpbnRsbigiZG9Gb28gd2l0aCAiICsgcmVxLmdldFVzZXJQcmluY2lwYWwoKSk7CiAgICAgICAgIG91dC5jbG9zZSgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKICAgICAgICAgb3V0LnByaW50bG4oImRvR2V0IHdpdGggIiArIHJlcS5nZXRVc2VyUHJpbmNpcGFsKCkpOwogICAgICAgICBvdXQuY2xvc2UoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1hdXRoLWFzeW5jL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItYXV0aC1hc3luYy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDM0YjQwNTUuLmZkOTllMjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1hdXRoLWFzeW5jL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLWF1dGgtYXN5bmMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNiArMTUsNiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHkiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1tdXR1YWwtc3NsL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItbXV0dWFsLXNzbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDhjYjAzNGQuLjAwM2QwMDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1tdXR1YWwtc3NsL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW11dHVhbC1zc2wvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWMtc3NsIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jb252ZXJ0ZXIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNvbnZlcnRlciIvPiAgICAgICAgXHUwMDIwCiAKLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9ImNvbS5zdW4uczFwZXFlLnNlY3VyaXR5LnNzbC5jb252ZXJ0ZXIuY2xpZW50LkNvbnZlcnRlckNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJjb20uc3VuLnMxcGVxZS5zZWN1cml0eS5zc2wuY29udmVydGVyLmNsaWVudC5Db252ZXJ0ZXJDbGllbnQiLz4KIAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAKIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItbXV0dWFsLXNzbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItbXV0dWFsLXNzbC9idWlsZC54bWwKaW5kZXggYmExYjM4ZS4uY2U1NTQyMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW11dHVhbC1zc2wvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1tdXR1YWwtc3NsL2J1aWxkLnhtbApAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InByZXBhcmUtc3RvcmUtY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydCIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVtb3ZlLXN0b3JlLWNvbW1vbiIvPgogICAgICAgICA8IS0tYW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQiLy0tPgpAQCAtNjMsMTUgKzYzLDE1IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtbG9jYWwiLz4gCi0JPGFudGNhbGwgdGFyZ2V0PSJydW4tc3RhbmRhbG9uZS1jbGllbnQiLz4KKyAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWxvY2FsIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tc3RhbmRhbG9uZS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50LWxvY2FsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC04Myw3ICs4Myw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgICAgPCEtLSBUYXJnZXQgdG8gcnVuIHRoZSBzdGFuZGFsb25lIGNsaWVudCB3aXRob3V0IEFDQyAtLT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1tdXR1YWwtc3NsL2NsaWVudC9Db252ZXJ0ZXJDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1tdXR1YWwtc3NsL2NsaWVudC9Db252ZXJ0ZXJDbGllbnQuamF2YQppbmRleCBhY2VkZjhlLi5lM2Q0MDQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItbXV0dWFsLXNzbC9jbGllbnQvQ29udmVydGVyQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW11dHVhbC1zc2wvY2xpZW50L0NvbnZlcnRlckNsaWVudC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIC8qKgogICogQSBzaW1wbGUgamF2YSBjbGllbnQuIFRoaXMgdXNlcyB0aGUgc2VydmljZXMgcHJvdmlkZWQgYnkgdGhlIDxjb2RlPkNvbnZlcnRlckJlYW48L2NvZGU+IGFuZAotICogY29udmVydHMgMTAwIFVTIGRvbGxhcnMgdG8gWWVuIGFuZCAxMDAgWWVuIHRvIEV1cm8uIAorICogY29udmVydHMgMTAwIFVTIGRvbGxhcnMgdG8gWWVuIGFuZCAxMDAgWWVuIHRvIEV1cm8uCiAgKiA8cD5JbiB0aGlzIHJlZ2FyZCwgaXQgZG9lcyB0aGUgZm9sbG93aW5nIGluIG9yZGVyCiAgKiA8dWw+CiAgKiA8bGk+TG9jYXRlcyB0aGUgaG9tZSBpbnRlcmZhY2Ugb2YgdGhlIGVudGVycHJpc2UgYmVhbgpAQCAtMzcsMjEgKzM3LDIxIEBACiAgKiA8YnI+CiAgKiA8Yj5Mb2NhdGluZyB0aGUgaG9tZSBpbnRlcmZhY2U6PC9iPgogICogPGJsb2NrcXVvdGU+PHByZT4KLSAqCUNvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICoJQ29udGV4dCBteUVudiA9IChDb250ZXh0KWluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52Iik7Ci0gKglPYmplY3Qgb2JqcmVmID0gbXlFbnYubG9va3VwKCJlamIvU2ltcGxlQ29udmVydGVyIik7CisgKiAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAqICAgIENvbnRleHQgbXlFbnYgPSAoQ29udGV4dClpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2VudiIpOworICogICAgT2JqZWN0IG9ianJlZiA9IG15RW52Lmxvb2t1cCgiZWpiL1NpbXBsZUNvbnZlcnRlciIpOwogICogIENvbnZlcnRlckhvbWUgaG9tZSA9IChDb252ZXJ0ZXJIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIENvbnZlcnRlckhvbWUuY2xhc3MpOwogICogPC9wcmU+PC9ibG9ja3F1b3RlPgogICogPGJyPgogICogPGI+Q3JlYXRpbmcgdGhlIHJlbW90ZSBpbnRlcmZhY2U6PC9iPgogICogPGJsb2NrcXVvdGU+PHByZT4KLSAqCUNvbnZlcnRlciBjdXJyZW5jeUNvbnZlcnRlciA9IGhvbWUuY3JlYXRlKCk7CisgKiAgICBDb252ZXJ0ZXIgY3VycmVuY3lDb252ZXJ0ZXIgPSBob21lLmNyZWF0ZSgpOwogICogPC9wcmU+PC9ibG9ja3F1b3RlPgogICogPGJyPgogICogPGI+SW52b2tpbmcgYnVzaW5lc3MgbWV0aG9kczo8L2I+CiAgKiA8YmxvY2txdW90ZT48cHJlPgogICogIEJpZ0RlY2ltYWwgcGFyYW0gPSBuZXcgQmlnRGVjaW1hbCAoIjEwMC4wMCIpOwotICoJYW1vdW50ID0gY3VycmVuY3lDb252ZXJ0ZXIuZG9sbGFyVG9ZZW4ocGFyYW0pOworICogICAgYW1vdW50ID0gY3VycmVuY3lDb252ZXJ0ZXIuZG9sbGFyVG9ZZW4ocGFyYW0pOwogICogIGFtb3VudCA9IGN1cnJlbmN5Q29udmVydGVyLnllblRvRXVybyhwYXJhbSk7CiAgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CiAgKiA8YnI+CkBAIC02Niw3ICs2Niw3IEBACiAKIHB1YmxpYyBjbGFzcyBDb252ZXJ0ZXJDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBDb252ZXJ0ZXJDbGllbnQoKSB7CkBAIC04MCwzNSArODAsMzUgQEAKICAgICAqCiAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JQ29udmVydGVyQ2xpZW50IGNsaWVudCA9IG5ldyBDb252ZXJ0ZXJDbGllbnQoKTsKLQljbGllbnQucnVuKGFyZ3MpOworICAgIENvbnZlcnRlckNsaWVudCBjbGllbnQgPSBuZXcgQ29udmVydGVyQ2xpZW50KCk7CisgICAgY2xpZW50LnJ1bihhcmdzKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcnVuKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgU3RyaW5nIHVybCA9IG51bGw7Ci0JU3RyaW5nIHRlc3RJZCA9IG51bGw7CisgICAgU3RyaW5nIHRlc3RJZCA9IG51bGw7CiAgICAgICAgIFN0cmluZyBqbmRpTmFtZSA9IG51bGw7CiAgICAgICAgIENvbnRleHQgY29udGV4dCA9IG51bGw7CiAgICAgICAgIFN0cmluZyBjdHhGYWN0b3J5ID0gbnVsbDsKLQlqYXZhLmxhbmcuT2JqZWN0IG9iaiA9IG51bGw7CisgICAgamF2YS5sYW5nLk9iamVjdCBvYmogPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiU2VjdXJpdHk6OlNTTCB0ZXN0ZXIgLWNvbnZlcnRlciBzYW1wbGUuIik7CiAKICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAzKSB7CiAgICAgICAgICAgICAgICAgdXJsID0gYXJnc1swXTsKICAgICAgICAgICAgICAgICBjdHhGYWN0b3J5ID0gYXJnc1sxXTsKLQkJam5kaU5hbWUgPSBhcmdzWzJdOworICAgICAgICBqbmRpTmFtZSA9IGFyZ3NbMl07CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICggKHVybCA9PSBudWxsKSB8fCAoY3R4RmFjdG9yeSA9PSBudWxsKSApIHsKLQkJdGVzdElkID0gIlNlYzo6TXV0dWFsX1NTTF9zaW1wbGUgQ29udmVydGVyIFNhbXBsZSBBcHBDbGllbnQiOworICAgICAgICB0ZXN0SWQgPSAiU2VjOjpNdXR1YWxfU1NMX3NpbXBsZSBDb252ZXJ0ZXIgU2FtcGxlIEFwcENsaWVudCI7CiAgICAgICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgQ29udGV4dCB3aXRoIGRlZmF1bHQgcHJvcGVydGllcwogICAgICAgICAgICAgICAgIGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlZmF1bHQgQ29udGV4dCBJbml0aWFsaXplZC4uLiIpOwogICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBIb21lIG9iamVjdAogICAgICAgICAgICAgICAgIG9iaiA9IGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TU0xTaW1wbGVDb252ZXJ0ZXIiKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0JCXRlc3RJZCA9ICJTZWM6Ok11dHVhbF9TU0xfc2ltcGxlIFN0YW5kYWxvbmUtQ2xpZW50IjsKKyAgICAgICAgdGVzdElkID0gIlNlYzo6TXV0dWFsX1NTTF9zaW1wbGUgU3RhbmRhbG9uZS1DbGllbnQiOwogICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgZW52ID0gbmV3IFByb3BlcnRpZXMoKTsKICAgICAgICAgICAgICAgICBlbnYucHV0KCJqYXZhLm5hbWluZy5wcm92aWRlci51cmwiLCB1cmwpOwogICAgICAgICAgICAgICAgIGVudi5wdXQoImphdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbCIsIGN0eEZhY3RvcnkpOwpAQCAtMTI2LDEyICsxMjYsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydGVyUmVtb3RlSG9tZS5jbGFzcyk7CiAKICAgICAgICAgICAgIENvbnZlcnRlclJlbW90ZSBjdXJyZW5jeUNvbnZlcnRlciA9IGhvbWUuY3JlYXRlKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIAotICAgICAgICAgICAgU3RyaW5nIHMgPSBjdXJyZW5jeUNvbnZlcnRlci5teUNhbGxlclByaW5jaXBhbCgpOyAgICAgICAgICAgIAotICAgICAgICAgICAgCisKKworICAgICAgICAgICAgU3RyaW5nIHMgPSBjdXJyZW5jeUNvbnZlcnRlci5teUNhbGxlclByaW5jaXBhbCgpOworCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBUaGUgY2FsbGVyIHByaW5jaXBhbCByZWNlaXZlZCBmcm9tIGVqYiAtPiIrcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYoIW15cy5lcXVhbHNJZ25vcmVDYXNlKHMpKXsKICAgICAgICAgICAgICAgICBTdHJpbmcgZXJyb3IgPSAiVGhlIGNhbGxlciBwcmluY2lwYWxzIGRvbnQgbWF0Y2ghISAtIFRlc3QgRmFpbGVkIjsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZXJyb3IpOwpAQCAtMTUxLDcgKzE1MSw3IEBACiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiEiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9IGZpbmFsbHkgewotCSAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW11dHVhbC1zc2wvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW11dHVhbC1zc2wvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IGFiZWRlOTcuLmRjNDFmOGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1tdXR1YWwtc3NsL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItbXV0dWFsLXNzbC9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKQEAgLTI0LDcgKzI0LDcgQEAKICAgICA8ZW52LWVudHJ5LW5hbWU+Y2VydG5hbWU8L2Vudi1lbnRyeS1uYW1lPgogICAgIDxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KICAgICA8ZW52LWVudHJ5LXZhbHVlPkNOPVNTTFRlc3QsIE9VPVN1biBKYXZhIFN5c3RlbSBBcHBsaWNhdGlvbiBTZXJ2ZXIsIE89U3VuIE1pY3Jvc3lzdGVtcywgTD1TYW50YSBDbGFyYSwgU1Q9Q2FsaWZvcm5pYSwgQz1VUzwvZW52LWVudHJ5LXZhbHVlPgotICA8L2Vudi1lbnRyeT4gIAorICA8L2Vudi1lbnRyeT4KICAgPGVqYi1yZWY+CiAgICAgPGVqYi1yZWYtbmFtZT5lamIvU1NMU2ltcGxlQ29udmVydGVyPC9lamItcmVmLW5hbWU+CiAgICAgPGVqYi1yZWYtdHlwZT5TZXNzaW9uPC9lamItcmVmLXR5cGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItbXV0dWFsLXNzbC9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1tdXR1YWwtc3NsL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCmluZGV4IDI2YjIxODkuLjY2MTQ5OTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1tdXR1YWwtc3NsL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1tdXR1YWwtc3NsL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgPHNtYWxsLWljb24+PC9zbWFsbC1pY29uPgogICAgIDxsYXJnZS1pY29uPjwvbGFyZ2UtaWNvbj4KICAgPC9pY29uPgotICA8ZGlzcGxheS1uYW1lPlNTTENvbnZlcnRlckFwcDwvZGlzcGxheS1uYW1lPiAgCisgIDxkaXNwbGF5LW5hbWU+U1NMQ29udmVydGVyQXBwPC9kaXNwbGF5LW5hbWU+CiAgIDxtb2R1bGU+CiAgICAgPGphdmE+c2VjLXNzbC1jb252ZXJ0ZXItY2xpZW50LmphcjwvamF2YT4KICAgPC9tb2R1bGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItbXV0dWFsLXNzbC9lamIvQ29udmVydGVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW11dHVhbC1zc2wvZWpiL0NvbnZlcnRlckJlYW4uamF2YQppbmRleCAyNGFiMDQ0Li4zZWZjNzI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItbXV0dWFsLXNzbC9lamIvQ29udmVydGVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1tdXR1YWwtc3NsL2VqYi9Db252ZXJ0ZXJCZWFuLmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKICAgICBCaWdEZWNpbWFsIHllblJhdGUgPSBuZXcgQmlnRGVjaW1hbCgiMTIxLjYwMDAiKTsKICAgICBCaWdEZWNpbWFsIGV1cm9SYXRlID0gbmV3IEJpZ0RlY2ltYWwoIjAuMDA3NyIpOwogICAgIFNlc3Npb25Db250ZXh0IG15c2MgPSBudWxsOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBteUNhbGxlclByaW5jaXBhbCgpewogICAgICAgICByZXR1cm4gbXlzYy5nZXRDYWxsZXJQcmluY2lwYWwoKS50b1N0cmluZygpOwogICAgIH0KQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgKiBSZXR1cm5zIHRoZSB5ZW4gdmFsdWUgZm9yIGEgZ2l2ZW4gZG9sbGFyIGFtb3VudC4KICAgICAgKiBAcGFyYW0gZG9sbGFycyBkb2xsYXIgYW1vdW50IHRvIGJlIGNvbnZlcnRlZCB0byB5ZW4uCiAgICAgICovCi0gICAgcHVibGljIEJpZ0RlY2ltYWwgZG9sbGFyVG9ZZW4oQmlnRGVjaW1hbCBkb2xsYXJzKSB7ICAgICAgIAorICAgIHB1YmxpYyBCaWdEZWNpbWFsIGRvbGxhclRvWWVuKEJpZ0RlY2ltYWwgZG9sbGFycykgewogICAgICAgICBCaWdEZWNpbWFsIHJlc3VsdCA9IGRvbGxhcnMubXVsdGlwbHkoeWVuUmF0ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQuc2V0U2NhbGUoMixCaWdEZWNpbWFsLlJPVU5EX1VQKTsKICAgICB9CkBAIC03NSw3ICs3NSw3IEBACiAgICAgICogTG9hZHMgdGhlIHN0YXRlIG9mIHRoZSBiZWFuIGZyb20gc2Vjb25kYXJ5IHN0b3JhZ2UuIFJlcXVpcmVkIGJ5IEVKQiBzcGVjLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KLSAgICAKKwogICAgIC8qKgogICAgICAqIEtlZXBzIHRoZSBzdGF0ZSBvZiB0aGUgYmVhbiB0byBzZWNvbmRhcnkgc3RvcmFnZS4gUmVxdWlyZWQgYnkgRUpCIHNwZWMuCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItbXV0dWFsLXNzbC9lamIvQ29udmVydGVyUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItbXV0dWFsLXNzbC9lamIvQ29udmVydGVyUmVtb3RlLmphdmEKaW5kZXggYWExZTkxYi4uOTUxN2FhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW11dHVhbC1zc2wvZWpiL0NvbnZlcnRlclJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1tdXR1YWwtc3NsL2VqYi9Db252ZXJ0ZXJSZW1vdGUuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAqIEBwYXJhbSB5ZW4geWVuIGFtb3VudCB0byBiZSBjb252ZXJ0ZWQgdG8gZXVyby4KICAgICAgKi8KICAgICBwdWJsaWMgQmlnRGVjaW1hbCB5ZW5Ub0V1cm8oQmlnRGVjaW1hbCB5ZW4pIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIG15Q2FsbGVyUHJpbmNpcGFsKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW9uZXdheS1zc2wvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1vbmV3YXktc3NsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGZjNGUyMy4uNTE1Y2U0NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW9uZXdheS1zc2wvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItb25ld2F5LXNzbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlYy1zc2wiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNvbnZlcnRlciIvPgogCi08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJjb20uc3VuLnMxcGVxZS5zZWN1cml0eS5zc2wuY29udmVydGVyLmNsaWVudC5Db252ZXJ0ZXJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iY29tLnN1bi5zMXBlcWUuc2VjdXJpdHkuc3NsLmNvbnZlcnRlci5jbGllbnQuQ29udmVydGVyQ2xpZW50Ii8+CiAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogCiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW9uZXdheS1zc2wvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW9uZXdheS1zc2wvYnVpbGQueG1sCmluZGV4IGY4YjhiNmIuLjEyMGI0YjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1vbmV3YXktc3NsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItb25ld2F5LXNzbC9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTEsMTQgKzUxLDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtbG9jYWwiLz4gCisgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1sb2NhbCIvPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tc3RhbmRhbG9uZS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KIApAQCAtNzEsNyArNzEsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogICAgIDwhLS0gVGFyZ2V0IHRvIHJ1biB0aGUgc3RhbmRhbG9uZSBjbGllbnQgd2l0aG91dCBBQ0MgLS0+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItb25ld2F5LXNzbC9jbGllbnQvQ29udmVydGVyQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItb25ld2F5LXNzbC9jbGllbnQvQ29udmVydGVyQ2xpZW50LmphdmEKaW5kZXggZGRiYzUwNC4uNTUxYWYyMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW9uZXdheS1zc2wvY2xpZW50L0NvbnZlcnRlckNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1vbmV3YXktc3NsL2NsaWVudC9Db252ZXJ0ZXJDbGllbnQuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqIEEgc2ltcGxlIGphdmEgY2xpZW50LiBUaGlzIHVzZXMgdGhlIHNlcnZpY2VzIHByb3ZpZGVkIGJ5IHRoZSA8Y29kZT5Db252ZXJ0ZXJCZWFuPC9jb2RlPiBhbmQKLSAqIGNvbnZlcnRzIDEwMCBVUyBkb2xsYXJzIHRvIFllbiBhbmQgMTAwIFllbiB0byBFdXJvLiAKKyAqIGNvbnZlcnRzIDEwMCBVUyBkb2xsYXJzIHRvIFllbiBhbmQgMTAwIFllbiB0byBFdXJvLgogICogPHA+SW4gdGhpcyByZWdhcmQsIGl0IGRvZXMgdGhlIGZvbGxvd2luZyBpbiBvcmRlcgogICogPHVsPgogICogPGxpPkxvY2F0ZXMgdGhlIGhvbWUgaW50ZXJmYWNlIG9mIHRoZSBlbnRlcnByaXNlIGJlYW4KQEAgLTM3LDIxICszNywyMSBAQAogICogPGJyPgogICogPGI+TG9jYXRpbmcgdGhlIGhvbWUgaW50ZXJmYWNlOjwvYj4KICAqIDxibG9ja3F1b3RlPjxwcmU+Ci0gKglDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAqCUNvbnRleHQgbXlFbnYgPSAoQ29udGV4dClpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2VudiIpOwotICoJT2JqZWN0IG9ianJlZiA9IG15RW52Lmxvb2t1cCgiZWpiL1NpbXBsZUNvbnZlcnRlciIpOworICogICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgKiAgICBDb250ZXh0IG15RW52ID0gKENvbnRleHQpaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYiKTsKKyAqICAgIE9iamVjdCBvYmpyZWYgPSBteUVudi5sb29rdXAoImVqYi9TaW1wbGVDb252ZXJ0ZXIiKTsKICAqICBDb252ZXJ0ZXJIb21lIGhvbWUgPSAoQ29udmVydGVySG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBDb252ZXJ0ZXJIb21lLmNsYXNzKTsKICAqIDwvcHJlPjwvYmxvY2txdW90ZT4KICAqIDxicj4KICAqIDxiPkNyZWF0aW5nIHRoZSByZW1vdGUgaW50ZXJmYWNlOjwvYj4KICAqIDxibG9ja3F1b3RlPjxwcmU+Ci0gKglDb252ZXJ0ZXIgY3VycmVuY3lDb252ZXJ0ZXIgPSBob21lLmNyZWF0ZSgpOworICogICAgQ29udmVydGVyIGN1cnJlbmN5Q29udmVydGVyID0gaG9tZS5jcmVhdGUoKTsKICAqIDwvcHJlPjwvYmxvY2txdW90ZT4KICAqIDxicj4KICAqIDxiPkludm9raW5nIGJ1c2luZXNzIG1ldGhvZHM6PC9iPgogICogPGJsb2NrcXVvdGU+PHByZT4KICAqICBCaWdEZWNpbWFsIHBhcmFtID0gbmV3IEJpZ0RlY2ltYWwgKCIxMDAuMDAiKTsKLSAqCWFtb3VudCA9IGN1cnJlbmN5Q29udmVydGVyLmRvbGxhclRvWWVuKHBhcmFtKTsKKyAqICAgIGFtb3VudCA9IGN1cnJlbmN5Q29udmVydGVyLmRvbGxhclRvWWVuKHBhcmFtKTsKICAqICBhbW91bnQgPSBjdXJyZW5jeUNvbnZlcnRlci55ZW5Ub0V1cm8ocGFyYW0pOwogICogPC9wcmU+PC9ibG9ja3F1b3RlPgogICogPGJyPgpAQCAtNjYsNyArNjYsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ29udmVydGVyQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgQ29udmVydGVyQ2xpZW50KCkgewpAQCAtODAsMzUgKzgwLDM1IEBACiAgICAgKgogICAgICovCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCUNvbnZlcnRlckNsaWVudCBjbGllbnQgPSBuZXcgQ29udmVydGVyQ2xpZW50KCk7Ci0JY2xpZW50LnJ1bihhcmdzKTsKKyAgICBDb252ZXJ0ZXJDbGllbnQgY2xpZW50ID0gbmV3IENvbnZlcnRlckNsaWVudCgpOworICAgIGNsaWVudC5ydW4oYXJncyk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHJ1bihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIFN0cmluZyB1cmwgPSBudWxsOwotCVN0cmluZyB0ZXN0SWQgPSBudWxsOworICAgIFN0cmluZyB0ZXN0SWQgPSBudWxsOwogICAgICAgICBTdHJpbmcgam5kaU5hbWUgPSBudWxsOwogICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOwogICAgICAgICBTdHJpbmcgY3R4RmFjdG9yeSA9IG51bGw7Ci0JamF2YS5sYW5nLk9iamVjdCBvYmogPSBudWxsOworICAgIGphdmEubGFuZy5PYmplY3Qgb2JqID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlNlY3VyaXR5OjpTU0wgT25lIHdheSBzc2wuIik7CiAKICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAzKSB7CiAgICAgICAgICAgICAgICAgdXJsID0gYXJnc1swXTsKICAgICAgICAgICAgICAgICBjdHhGYWN0b3J5ID0gYXJnc1sxXTsKLQkJam5kaU5hbWUgPSBhcmdzWzJdOworICAgICAgICBqbmRpTmFtZSA9IGFyZ3NbMl07CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICggKHVybCA9PSBudWxsKSB8fCAoY3R4RmFjdG9yeSA9PSBudWxsKSApIHsKLQkJdGVzdElkID0gIlNlYzo6U1NMX3NpbXBsZSBDb252ZXJ0ZXIgU2FtcGxlIEFwcENsaWVudCI7CisgICAgICAgIHRlc3RJZCA9ICJTZWM6OlNTTF9zaW1wbGUgQ29udmVydGVyIFNhbXBsZSBBcHBDbGllbnQiOwogICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIENvbnRleHQgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMKICAgICAgICAgICAgICAgICBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJPbmUgd2F5IFNTTCBUZXN0IFxuIERlZmF1bHQgQ29udGV4dCBJbml0aWFsaXplZC4uLiIpOwogICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBIb21lIG9iamVjdAogICAgICAgICAgICAgICAgIG9iaiA9IGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TU0xTaW1wbGVDb252ZXJ0ZXIiKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0JCXRlc3RJZCA9ICJTZWM6OlNTTF9zaW1wbGUgU3RhbmRhbG9uZS1DbGllbnQiOworICAgICAgICB0ZXN0SWQgPSAiU2VjOjpTU0xfc2ltcGxlIFN0YW5kYWxvbmUtQ2xpZW50IjsKICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzIGVudiA9IG5ldyBQcm9wZXJ0aWVzKCk7CiAgICAgICAgICAgICAgICAgZW52LnB1dCgiamF2YS5uYW1pbmcucHJvdmlkZXIudXJsIiwgdXJsKTsKICAgICAgICAgICAgICAgICBlbnYucHV0KCJqYXZhLm5hbWluZy5mYWN0b3J5LmluaXRpYWwiLCBjdHhGYWN0b3J5KTsKQEAgLTEyNiwxMiArMTI2LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRlclJlbW90ZUhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgICBDb252ZXJ0ZXJSZW1vdGUgY3VycmVuY3lDb252ZXJ0ZXIgPSBob21lLmNyZWF0ZSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cmluZyBzID0gY3VycmVuY3lDb252ZXJ0ZXIubXlDYWxsZXJQcmluY2lwYWwoKTsgICAgICAgICAgICAKLSAgICAgICAgICAgIAorCisKKyAgICAgICAgICAgIFN0cmluZyBzID0gY3VycmVuY3lDb252ZXJ0ZXIubXlDYWxsZXJQcmluY2lwYWwoKTsKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgVGhlIGNhbGxlciBwcmluY2lwYWwgcmVjZWl2ZWQgZnJvbSBlamIgLT4iK3MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKCFteXMuZXF1YWxzSWdub3JlQ2FzZShzKSl7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGVycm9yID0gIlRoZSBjYWxsZXIgcHJpbmNpcGFscyBkb250IG1hdGNoISEgLSBUZXN0IEZhaWxlZCI7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGVycm9yKTsKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gdW5leHBlY3RlZCBleGNlcHRpb24hIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfSBmaW5hbGx5IHsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdElkKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdElkKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1vbmV3YXktc3NsL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW9uZXdheS1zc2wvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKaW5kZXggMjZiMjE4OS4uNjYxNDk5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW9uZXdheS1zc2wvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW9uZXdheS1zc2wvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKQEAgLTIzLDcgKzIzLDcgQEAKICAgICA8c21hbGwtaWNvbj48L3NtYWxsLWljb24+CiAgICAgPGxhcmdlLWljb24+PC9sYXJnZS1pY29uPgogICA8L2ljb24+Ci0gIDxkaXNwbGF5LW5hbWU+U1NMQ29udmVydGVyQXBwPC9kaXNwbGF5LW5hbWU+ICAKKyAgPGRpc3BsYXktbmFtZT5TU0xDb252ZXJ0ZXJBcHA8L2Rpc3BsYXktbmFtZT4KICAgPG1vZHVsZT4KICAgICA8amF2YT5zZWMtc3NsLWNvbnZlcnRlci1jbGllbnQuamFyPC9qYXZhPgogICA8L21vZHVsZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1vbmV3YXktc3NsL2VqYi9Db252ZXJ0ZXJCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItb25ld2F5LXNzbC9lamIvQ29udmVydGVyQmVhbi5qYXZhCmluZGV4IDI0YWIwNDQuLjNlZmM3MjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1vbmV3YXktc3NsL2VqYi9Db252ZXJ0ZXJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW9uZXdheS1zc2wvZWpiL0NvbnZlcnRlckJlYW4uamF2YQpAQCAtMzMsNyArMzMsNyBAQAogICAgIEJpZ0RlY2ltYWwgeWVuUmF0ZSA9IG5ldyBCaWdEZWNpbWFsKCIxMjEuNjAwMCIpOwogICAgIEJpZ0RlY2ltYWwgZXVyb1JhdGUgPSBuZXcgQmlnRGVjaW1hbCgiMC4wMDc3Iik7CiAgICAgU2Vzc2lvbkNvbnRleHQgbXlzYyA9IG51bGw7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIG15Q2FsbGVyUHJpbmNpcGFsKCl7CiAgICAgICAgIHJldHVybiBteXNjLmdldENhbGxlclByaW5jaXBhbCgpLnRvU3RyaW5nKCk7CiAgICAgfQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAqIFJldHVybnMgdGhlIHllbiB2YWx1ZSBmb3IgYSBnaXZlbiBkb2xsYXIgYW1vdW50LgogICAgICAqIEBwYXJhbSBkb2xsYXJzIGRvbGxhciBhbW91bnQgdG8gYmUgY29udmVydGVkIHRvIHllbi4KICAgICAgKi8KLSAgICBwdWJsaWMgQmlnRGVjaW1hbCBkb2xsYXJUb1llbihCaWdEZWNpbWFsIGRvbGxhcnMpIHsgICAgICAgCisgICAgcHVibGljIEJpZ0RlY2ltYWwgZG9sbGFyVG9ZZW4oQmlnRGVjaW1hbCBkb2xsYXJzKSB7CiAgICAgICAgIEJpZ0RlY2ltYWwgcmVzdWx0ID0gZG9sbGFycy5tdWx0aXBseSh5ZW5SYXRlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdC5zZXRTY2FsZSgyLEJpZ0RlY2ltYWwuUk9VTkRfVVApOwogICAgIH0KQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgKiBMb2FkcyB0aGUgc3RhdGUgb2YgdGhlIGJlYW4gZnJvbSBzZWNvbmRhcnkgc3RvcmFnZS4gUmVxdWlyZWQgYnkgRUpCIHNwZWMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotICAgIAorCiAgICAgLyoqCiAgICAgICogS2VlcHMgdGhlIHN0YXRlIG9mIHRoZSBiZWFuIHRvIHNlY29uZGFyeSBzdG9yYWdlLiBSZXF1aXJlZCBieSBFSkIgc3BlYy4KICAgICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1vbmV3YXktc3NsL2VqYi9Db252ZXJ0ZXJSZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1vbmV3YXktc3NsL2VqYi9Db252ZXJ0ZXJSZW1vdGUuamF2YQppbmRleCBhYTFlOTFiLi45NTE3YWFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItb25ld2F5LXNzbC9lamIvQ29udmVydGVyUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW9uZXdheS1zc2wvZWpiL0NvbnZlcnRlclJlbW90ZS5qYXZhCkBAIC00NCw3ICs0NCw3IEBACiAgICAgICogQHBhcmFtIHllbiB5ZW4gYW1vdW50IHRvIGJlIGNvbnZlcnRlZCB0byBldXJvLgogICAgICAqLwogICAgIHB1YmxpYyBCaWdEZWNpbWFsIHllblRvRXVybyhCaWdEZWNpbWFsIHllbikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgbXlDYWxsZXJQcmluY2lwYWwoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9odHRwTWV0aG9kL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9odHRwTWV0aG9kL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZmI2NmYyOS4uODBiYTVhNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvaHR0cE1ldGhvZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2h0dHBNZXRob2QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHktaHR0cE1ldGhvZCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9odHRwTWV0aG9kL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2h0dHBNZXRob2QvYnVpbGQueG1sCmluZGV4IDA5YTllMzEuLjgwNDI1YTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2h0dHBNZXRob2QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2h0dHBNZXRob2QvYnVpbGQueG1sCkBAIC0zMyw3ICszMyw3IEBACiAgICAgJmNvbW1vblJ1bjsKICAgICAmY29tbW9uU2VjdXJpdHk7CiAgICAgJnRlc3RQcm9wZXJ0aWVzOwotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLCBzZXR1cCwgZGVwbG95LCBydW4sIHVuZGVwbG95LCB1bnNldHVwIi8+CiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KQEAgLTQ4LDcgKzQ4LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCkBAIC0xNjksMTggKzE2OSwxOCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXVzZXItY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJzaGluZ3dhaSIvPgotCSAgICA8cGFyYW0gbmFtZT0icGFzc3dvcmQiIHZhbHVlPSJzaGluZ3dhaSIvPgotCSAgICA8cGFyYW0gbmFtZT0iZ3JvdXBzIiB2YWx1ZT0iZW1wbG95ZWUiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJzaGluZ3dhaSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icGFzc3dvcmQiIHZhbHVlPSJzaGluZ3dhaSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0iZ3JvdXBzIiB2YWx1ZT0iZW1wbG95ZWUiLz4KICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXVzZXItY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJzd2NoYW4iLz4KLQkgICAgPHBhcmFtIG5hbWU9InBhc3N3b3JkIiB2YWx1ZT0ic3djaGFuIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJncm91cHMiIHZhbHVlPSJzdGFmZiIvPgorICAgICAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9InN3Y2hhbiIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icGFzc3dvcmQiIHZhbHVlPSJzd2NoYW4iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Imdyb3VwcyIgdmFsdWU9InN0YWZmIi8+CiAgICAgICAgPC9hbnRjYWxsPgogICAgPCEtLSAgIDxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+LS0+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiPgogICAgICAgPCEtLSByZW1vdmUgdGVzdCB1c2VycywganVzdCBjbGVhbnVwLiAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXVzZXItY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2h0dHBNZXRob2QvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvaHR0cE1ldGhvZC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggODJhNzlkOS4uNjA1MmFjNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvaHR0cE1ldGhvZC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvaHR0cE1ldGhvZC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgIDx0cmFuc3BvcnQtZ3VhcmFudGVlPk5PTkU8L3RyYW5zcG9ydC1ndWFyYW50ZWU+CiAgICAgPC91c2VyLWRhdGEtY29uc3RyYWludD4KICAgPC9zZWN1cml0eS1jb25zdHJhaW50PgotICAKKwogICA8c2VjdXJpdHktY29uc3RyYWludD4KICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CiAgICAgICA8d2ViLXJlc291cmNlLW5hbWU+c2VjdXJlMjwvd2ViLXJlc291cmNlLW5hbWU+CkBAIC03MSw3ICs3MSw3IEBACiAgICAgPGF1dGgtbWV0aG9kPkJBU0lDPC9hdXRoLW1ldGhvZD4KICAgICA8cmVhbG0tbmFtZT5kZWZhdWx0PC9yZWFsbS1uYW1lPgogICA8L2xvZ2luLWNvbmZpZz4KLSAgCisKICAgPHNlY3VyaXR5LXJvbGU+CiAgICAgPHJvbGUtbmFtZT5tYW5hZ2VyPC9yb2xlLW5hbWU+CiAgIDwvc2VjdXJpdHktcm9sZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvYnVpbGQucHJvcGVydGllcwppbmRleCAzNGI0MDU1Li5mZDk5ZTI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw2ICsxNSw2IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvYnVpbGQueG1sCmluZGV4IDQ2YWY1YWQuLmVhMjg0ZGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9idWlsZC54bWwKQEAgLTI5LDcgKzI5LDcgQEAKICAgICZjb21tb25TZXR1cDsKICAgICZjb21tb25CdWlsZDsKICAgICZjb21tb25SdW47Ci0gICAmdGVzdFByb3BlcnRpZXM7ICAKKyAgICZ0ZXN0UHJvcGVydGllczsKICAgICA8cHJvcGVydHkgZW52aXJvbm1lbnQ9ImVudiIvPgogICAgIDxnZXQgc3JjPSJodHRwczovL3JlcG8xLm1hdmVuLm9yZy9tYXZlbjIvb3JnL2FwYWNoZS9tYXZlbi9tYXZlbi1hbnQtdGFza3MvMi4xLjMvbWF2ZW4tYW50LXRhc2tzLTIuMS4zLmphciIgZGVzdD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9tYXZlbi1hbnQtdGFza3MtMi4xLjMuamFyIi8+CiAgICAgPHBhdGggaWQ9Im1hdmVuLWFudC10YXNrcy5jbGFzc3BhdGgiIHBhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvbWF2ZW4tYW50LXRhc2tzLTIuMS4zLmphciIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2NvbW1vbi9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvY29tbW9uL3BvbS54bWwKaW5kZXggOGI0NGY5OS4uMWE4NWYzNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvY29tbW9uL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvY29tbW9uL3BvbS54bWwKQEAgLTI1LDkgKzI1LDkgQEAKICAgICAgICAgPGFydGlmYWN0SWQ+cHJvZy1hdXRoPC9hcnRpZmFjdElkPgogICAgICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8L3BhcmVudD4KLSAgICAKKwogICAgIDxhcnRpZmFjdElkPmphY2NBcGktY29tbW9uPC9hcnRpZmFjdElkPgotICAgIAorCiAgICAgPHBhY2thZ2luZz5qYXI8L3BhY2thZ2luZz4KICAgICA8bmFtZT5KYXZhIEVFIDcgU2FtcGxlOiBqYWNjQXBpLSBjb21tb248L25hbWU+CiAKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuanNvdXA8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qc291cDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjEuMTEuMjwvdmVyc2lvbj4gICAgICAgICAgICAKKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuMTEuMjwvdmVyc2lvbj4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogCiAgICAgICAgIDxkZXBlbmRlbmN5PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9qYWNjQXBpL2NvbW1vbi9BcnF1aWxsaWFuQmFzZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9qYWNjQXBpL2NvbW1vbi9BcnF1aWxsaWFuQmFzZS5qYXZhCmluZGV4IGQ5YjdjN2MuLjlkYTllOWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9jb21tb24vQXJxdWlsbGlhbkJhc2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9jb21tb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvY29tbW9uL0FycXVpbGxpYW5CYXNlLmphdmEKQEAgLTQ4LDM1ICs0OCwzNSBAQAogCiAvKioKICAqCi0gKiAKKyAqCiAgKi8KIHB1YmxpYyBjbGFzcyBBcnF1aWxsaWFuQmFzZSB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0VCQVBQX1NSQyA9ICJzcmMvbWFpbi93ZWJhcHAiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKEFycXVpbGxpYW5CYXNlLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBwcml2YXRlIFdlYkNsaWVudCB3ZWJDbGllbnQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgcmVzcG9uc2U7Ci0gICAgCisKICAgICBAUnVsZQogICAgIHB1YmxpYyBUZXN0V2F0Y2hlciBydWxlRXhhbXBsZSA9IG5ldyBUZXN0V2F0Y2hlcigpIHsKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHByb3RlY3RlZCB2b2lkIGZhaWxlZChUaHJvd2FibGUgZSwgRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKICAgICAgICAgICAgIHN1cGVyLmZhaWxlZChlLCBkZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGxvZ2dlci5sb2coU0VWRVJFLCAKLSAgICAgICAgICAgICAgICAiXG5cblRlc3QgZmFpbGVkOiAiICsgCisKKyAgICAgICAgICAgIGxvZ2dlci5sb2coU0VWRVJFLAorICAgICAgICAgICAgICAgICJcblxuVGVzdCBmYWlsZWQ6ICIgKwogICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLmdldENsYXNzTmFtZSgpICsgIi4iICsgZGVzY3JpcHRpb24uZ2V0TWV0aG9kTmFtZSgpICsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICJcbk1lc3NhZ2U6ICIgKyBlLmdldE1lc3NhZ2UoKSArCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAiXG5MYXN0IHJlc3BvbnNlOiAiICsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICJcblxuIiAgKyBmb3JtYXRIVE1MKHJlc3BvbnNlKSArICJcblxuIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9CiAgICAgfTsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGZvcm1hdEhUTUwoU3RyaW5nIGh0bWwpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBwYXJzZShodG1sLCAiIiwgeG1sUGFyc2VyKCkpLnRvU3RyaW5nKCk7CkBAIC04OCw5ICs4OCw5IEBACiAgICAgcHVibGljIHN0YXRpYyBBcmNoaXZlPD8+IGRlZmF1bHRBcmNoaXZlKCkgewogICAgICAgICByZXR1cm4gdHJ5V3JhcEVBUihkZWZhdWx0V2ViQXJjaGl2ZSgpKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIFdlYkFyY2hpdmUgZGVmYXVsdFdlYkFyY2hpdmUoKSB7Ci0gICAgICAgIHJldHVybiAKKyAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICBjcmVhdGUoV2ViQXJjaGl2ZS5jbGFzcywgInRlc3Qud2FyIikKICAgICAgICAgICAgICAgICAuYWRkUGFja2FnZXModHJ1ZSwgIm9yZy5qYXZhZWU3Lmphc3BpYyIpCiAgICAgICAgICAgICAgICAgLmRlbGV0ZUNsYXNzKEFycXVpbGxpYW5CYXNlLmNsYXNzKQpAQCAtMTA0LDIzICsxMDQsMjMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC5pbXBvcnRGcm9tKG5ldyBGaWxlKCJ0YXJnZXQvIiArIFN5c3RlbS5nZXRQcm9wZXJ0eSgiZmluYWxOYW1lIikgKyAiLndhciIpKQogICAgICAgICAgICAgICAgICAgICAgICAgLmFzKFdlYkFyY2hpdmUuY2xhc3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgQXJjaGl2ZTw/PiB0cnlXcmFwRUFSKFdlYkFyY2hpdmUgd2ViQXJjaGl2ZSkgewogICAgICAgICBpZiAoZ2V0Qm9vbGVhbigidXNlRWFyRm9ySmFzcGljIikpIHsKICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgIC8vIEVBUiBhcmNoaXZlCiAgICAgICAgICAgICAgICAgY3JlYXRlKEVudGVycHJpc2VBcmNoaXZlLmNsYXNzLCAidGVzdC5lYXIiKQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vIExpYmVydHkgbmVlZHMgdG8gaGF2ZSB0aGUgYmluZGluZyBmaWxlIGluIGFuIGVhci4KICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogdGhpcyBpcyBubyBsb25nZXIgdGhlIGNhc2UgYW5kIHRoaXMgY29kZSBjYW4gYmUgcmVtb3ZlZCAoLWJuZC54bWwKICAgICAgICAgICAgICAgICAgICAgLy8gbmVlZHMgdG8gYmUgbW92ZWQgdG8gY29ycmVjdCBwbGFjZSkKICAgICAgICAgICAgICAgICAgICAgLmFkZEFzTWFuaWZlc3RSZXNvdXJjZShyZXNvdXJjZSgiaWJtLWFwcGxpY2F0aW9uLWJuZC54bWwiKSkKLSAgICAKKwogICAgICAgICAgICAgICAgICAgICAvLyBXZWIgbW9kdWxlCiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgQXJxdWlsbGlhbiBnZW5lcmF0aW5nIGFuIGlsbGVnYWwgYXBwbGljYXRpb24ueG1sCiAgICAgICAgICAgICAgICAgICAgIC5hZGRBc01vZHVsZSgKICAgICAgICAgICAgICAgICAgICAgICAgIHdlYkFyY2hpdmUKLSAgICAgICAgICAgICAgICAgICAgKTsgIAorICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmV0dXJuIHdlYkFyY2hpdmU7CiAgICAgICAgIH0KQEAgLTEyOSw3ICsxMjksNyBAQAogICAgIHB1YmxpYyBzdGF0aWMgRmlsZSByZXNvdXJjZShTdHJpbmcgbmFtZSkgewogICAgICAgICByZXR1cm4gbmV3IEZpbGUoV0VCQVBQX1NSQyArICIvV0VCLUlORiIsIG5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgRmlsZSB3ZWIoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgcmV0dXJuIG5ldyBGaWxlKFdFQkFQUF9TUkMsIG5hbWUpOwogICAgIH0KQEAgLTE0OCw4ICsxNDgsOCBAQAogICAgICAgICB3ZWJDbGllbnQuZ2V0Q29va2llTWFuYWdlcigpLmNsZWFyQ29va2llcygpOwogICAgICAgICB3ZWJDbGllbnQuY2xvc2UoKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogCiAgICAgcHJvdGVjdGVkIFdlYkNsaWVudCBnZXRXZWJDbGllbnQoKSB7CiAgICAgICAgIHJldHVybiB3ZWJDbGllbnQ7CkBAIC0xNjIsNyArMTYyLDcgQEAKICAgICAvKioKICAgICAgKiBHZXRzIGNvbnRlbnQgZnJvbSB0aGUgcGF0aCB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIGJhc2UgVVJMIG9uIHdoaWNoIHRoZSBBcnF1aWxsaWFuIHRlc3QKICAgICAgKiBhcmNoaXZlIGlzIGRlcGxveWVkLgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIHBhdGggdGhlIHBhdGggcmVsYXRpdmUgdG8gdGhlIFVSTCBvbiB3aGljaCB0aGUgQXJxdWlsbGlhbiB0ZXN0IGlzIGRlcGxveWVkCiAgICAgICogQHJldHVybiB0aGUgcmF3IGNvbnRlbnQgYXMgYSBzdHJpbmcgYXMgcmV0dXJuZWQgYnkgdGhlIHNlcnZlcgogICAgICAqLwpAQCAtMTc4LDcgKzE3OCw3IEBACiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9jb21tb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvY29tbW9uL0Jhc2VTZXJ2bGV0Q29udGV4dExpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9jb21tb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvY29tbW9uL0Jhc2VTZXJ2bGV0Q29udGV4dExpc3RlbmVyLmphdmEKaW5kZXggYmQxMzg4NS4uMmQzMGQxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9qYWNjQXBpL2NvbW1vbi9CYXNlU2VydmxldENvbnRleHRMaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9jb21tb24vQmFzZVNlcnZsZXRDb250ZXh0TGlzdGVuZXIuamF2YQpAQCAtMjAsNyArMjAsNyBAQAogaW1wb3J0IGpha2FydGEuc2VydmxldC5TZXJ2bGV0Q29udGV4dExpc3RlbmVyOwogCiAvKioKLSAqIAorICoKICAqLwogcHVibGljIGNsYXNzIEJhc2VTZXJ2bGV0Q29udGV4dExpc3RlbmVyIGltcGxlbWVudHMgU2VydmxldENvbnRleHRMaXN0ZW5lciB7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9jb21tb24vSmFzcGljVXRpbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9jb21tb24vSmFzcGljVXRpbHMuamF2YQppbmRleCBjMDliYjEwLi41YjI2NTYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9jb21tb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvY29tbW9uL0phc3BpY1V0aWxzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9qYWNjQXBpL2NvbW1vbi9KYXNwaWNVdGlscy5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiAKIC8qKgogICoKLSAqIAorICoKICAqLwogcHVibGljIGZpbmFsIGNsYXNzIEphc3BpY1V0aWxzIHsKIApAQCAtMzIsNyArMzIsNyBAQAogICAgIC8qKgogICAgICAqIFJlZ2lzdGVycyB0aGUgZ2l2ZW4gU0FNIHVzaW5nIHRoZSBzdGFuZGFyZCBKQVNQSUMge0BsaW5rIEF1dGhDb25maWdGYWN0b3J5fSBidXQgdXNpbmcgYSBzbWFsbCBzZXQgb2Ygd3JhcHBlcnMgdGhhdCBqdXN0CiAgICAgICogcGFzcyB0aGUgY2FsbHMgdGhyb3VnaCB0byB0aGUgU0FNLgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIHNlcnZlckF1dGhNb2R1bGUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcmVnaXN0ZXJTQU0oU2VydmxldENvbnRleHQgY29udGV4dCwgU2VydmVyQXV0aE1vZHVsZSBzZXJ2ZXJBdXRoTW9kdWxlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9jb21tb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvY29tbW9uL1Rlc3RBdXRoQ29uZmlnUHJvdmlkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9jb21tb24vVGVzdEF1dGhDb25maWdQcm92aWRlci5qYXZhCmluZGV4IDcxN2Q5OTMuLmQxZmExODQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9jb21tb24vVGVzdEF1dGhDb25maWdQcm92aWRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9jb21tb24vVGVzdEF1dGhDb25maWdQcm92aWRlci5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAvKioKICAqIFRoaXMgY2xhc3MgZnVuY3Rpb25zIGFzIGEga2luZCBvZiBmYWN0b3J5LWZhY3RvcnkgZm9yIHtAbGluayBTZXJ2ZXJBdXRoQ29uZmlnfSBpbnN0YW5jZXMsIHdoaWNoIGFyZSBieSB0aGVtc2VsdmVzIGZhY3RvcmllcwogICogZm9yIHtAbGluayBTZXJ2ZXJBdXRoQ29udGV4dH0gaW5zdGFuY2VzLCB3aGljaCBhcmUgZGVsZWdhdGVzIGZvciB0aGUgYWN0dWFsIHtAbGluayBTZXJ2ZXJBdXRoTW9kdWxlfSAoU0FNKSB0aGF0IHdlJ3JlIGFmdGVyLgotICogCisgKgogICovCiBwdWJsaWMgY2xhc3MgVGVzdEF1dGhDb25maWdQcm92aWRlciBpbXBsZW1lbnRzIEF1dGhDb25maWdQcm92aWRlciB7CiAKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIHdpdGggc2lnbmF0dXJlIGFuZCBpbXBsZW1lbnRhdGlvbiB0aGF0J3MgcmVxdWlyZWQgYnkgQVBJLgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIHByb3BlcnRpZXMKICAgICAgKiBAcGFyYW0gZmFjdG9yeQogICAgICAqLwpAQCAtODUsNyArODUsNyBAQAogICAgICAqIENyZWF0ZXMgYSBkZWZhdWx0IGNhbGxiYWNrIGhhbmRsZXIgdmlhIHRoZSBzeXN0ZW0gcHJvcGVydHkgImF1dGhjb25maWdwcm92aWRlci5jbGllbnQuY2FsbGJhY2toYW5kbGVyIiwgYXMgc2VlbWluZ2x5CiAgICAgICogcmVxdWlyZWQgYnkgdGhlIEFQSSAoQVBJIHVzZXMgd29yZGluZyAibWF5IiBjcmVhdGUgZGVmYXVsdCBoYW5kbGVyKS4gVE9ETzogSXNuJ3QKICAgICAgKiAiYXV0aGNvbmZpZ3Byb3ZpZGVyLmNsaWVudC5jYWxsYmFja2hhbmRsZXIiIEpCb3NzIHNwZWNpZmljPwotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybgogICAgICAqIEB0aHJvd3MgQXV0aEV4Y2VwdGlvbgogICAgICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9qYWNjQXBpL2NvbW1vbi9UZXN0U2VydmVyQXV0aENvbmZpZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9qYWNjQXBpL2NvbW1vbi9UZXN0U2VydmVyQXV0aENvbmZpZy5qYXZhCmluZGV4IGQ1ZmMwNmQuLjc0ZTg4OTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9jb21tb24vVGVzdFNlcnZlckF1dGhDb25maWcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9jb21tb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvY29tbW9uL1Rlc3RTZXJ2ZXJBdXRoQ29uZmlnLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIC8qKgogICogVGhpcyBjbGFzcyBmdW5jdGlvbnMgYXMgYSBraW5kIG9mIGZhY3RvcnkgZm9yIHtAbGluayBTZXJ2ZXJBdXRoQ29udGV4dH0gaW5zdGFuY2VzLCB3aGljaCBhcmUgZGVsZWdhdGVzIGZvciB0aGUgYWN0dWFsCiAgKiB7QGxpbmsgU2VydmVyQXV0aE1vZHVsZX0gKFNBTSkgdGhhdCB3ZSdyZSBhZnRlci4KLSAqIAorICoKICAqLwogcHVibGljIGNsYXNzIFRlc3RTZXJ2ZXJBdXRoQ29uZmlnIGltcGxlbWVudHMgU2VydmVyQXV0aENvbmZpZyB7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9jb21tb24vVGVzdFNlcnZlckF1dGhDb250ZXh0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9jb21tb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvY29tbW9uL1Rlc3RTZXJ2ZXJBdXRoQ29udGV4dC5qYXZhCmluZGV4IDhmZGFjMDcuLjgxNGNlNTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9jb21tb24vVGVzdFNlcnZlckF1dGhDb250ZXh0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9qYWNjQXBpL2NvbW1vbi9UZXN0U2VydmVyQXV0aENvbnRleHQuamF2YQpAQCAtMzQsNyArMzQsNyBAQAogICogPHA+CiAgKiBTaW5jZSB0aGlzIHNpbXBsZSBleGFtcGxlIG9ubHkgaGFzIGEgc2luZ2xlIFNBTSwgd2UgZGVsZWdhdGUgZGlyZWN0bHkgdG8gdGhhdCBvbmUuIE5vdGUgdGhhdCB0aGlzIHtAbGluayBTZXJ2ZXJBdXRoQ29udGV4dH0KICAqIGFuZCB0aGUge0BsaW5rIFNlcnZlckF1dGhNb2R1bGV9IChTQU0pIHNoYXJlIGEgY29tbW9uIGJhc2UgaW50ZXJmYWNlOiB7QGxpbmsgU2VydmVyQXV0aH0uCi0gKiAKKyAqCiAgKi8KIHB1YmxpYyBjbGFzcyBUZXN0U2VydmVyQXV0aENvbnRleHQgaW1wbGVtZW50cyBTZXJ2ZXJBdXRoQ29udGV4dCB7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9wb20ueG1sCmluZGV4IDQzMGM5NWYuLjk1ODdlNjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvcG9tLnhtbApAQCAtMTksMTEgKzE5LDExIEBACiAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgogICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLmphY2NBcGkudGVzdDwvZ3JvdXBJZD4gICAgCisgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5qYWNjQXBpLnRlc3Q8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+cHJvZy1hdXRoPC9hcnRpZmFjdElkPgogICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+Ci0gICAgCisKICAgICA8bmFtZT5Qcm9ncmFtbWF0aWMgYXV0aGVudGljYXRpb24gd2l0aCBKYWthcnRhIEF1dGhvcml6YXRpb24gYXBpPC9uYW1lPgogICAgIDxwcm9wZXJ0aWVzPgogICAgICAgICA8Z2xhc3NmaXNoLnZlcnNpb24+NS4wPC9nbGFzc2Zpc2gudmVyc2lvbj4KQEAgLTMzLDcgKzMzLDcgQEAKIAogICAgIDxtb2R1bGVzPgogICAgICAgICA8bW9kdWxlPmNvbW1vbjwvbW9kdWxlPgotICAgICAgICA8bW9kdWxlPnByb2dyYW1tYXRpYy1hdXRoZW50aWNhdGlvbjwvbW9kdWxlPiAgICAgICAKKyAgICAgICAgPG1vZHVsZT5wcm9ncmFtbWF0aWMtYXV0aGVudGljYXRpb248L21vZHVsZT4KICAgICA8L21vZHVsZXM+CiAgICAgPGRlcGVuZGVuY3lNYW5hZ2VtZW50PgogICAgICAgICA8ZGVwZW5kZW5jaWVzPgpAQCAtNjAsNyArNjAsNyBAQAogICAgICAgICAgICAgPGFydGlmYWN0SWQ+YXJxdWlsbGlhbi1qdW5pdC1jb250YWluZXI8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAKKwogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm5ldC5zb3VyY2Vmb3JnZS5odG1sdW5pdDwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmh0bWx1bml0PC9hcnRpZmFjdElkPgpAQCAtNzIsNyArNzIsNyBAQAogICAgICAgICAgICAgPGFydGlmYWN0SWQ+amF2YWVlLWFwaTwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjcuMDwvdmVyc2lvbj4KICAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIAorICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmpib3NzLmFycXVpbGxpYW4uY29udGFpbmVyPC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+YXJxdWlsbGlhbi1nbGFzc2Zpc2gtcmVtb3RlLTMuMTwvYXJ0aWZhY3RJZD4KQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgICAgIDxzeXN0ZW1QYXRoPiR7QVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI8L3N5c3RlbVBhdGg+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICA8L2RlcGVuZGVuY2llcz4KLSAgICAKKwogICAgIDxidWlsZD4KICAgICAgICAgPHBsdWdpbnM+CiAgICAgICAgICAgIDxwbHVnaW4+CkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICAgICAgICAgICAgICAgIDxHTEFTU0ZJU0hfSE9NRT4ke2Vudi5TMUFTX0hPTUV9Ly4uPC9HTEFTU0ZJU0hfSE9NRT4KICAgICAgICAgICAgICAgICA8L2Vudmlyb25tZW50VmFyaWFibGVzPgogICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICA8L3BsdWdpbj4gICAgICAgCisgICAgICAgICAgICA8L3BsdWdpbj4KICAgICAgICAgPC9wbHVnaW5zPgogICAgIDwvYnVpbGQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL3Byb2dyYW1tYXRpYy1hdXRoZW50aWNhdGlvbi9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvcHJvZ3JhbW1hdGljLWF1dGhlbnRpY2F0aW9uL3BvbS54bWwKaW5kZXggNzQ5NGE2Zi4uMTEyNTFiNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvcHJvZ3JhbW1hdGljLWF1dGhlbnRpY2F0aW9uL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvcHJvZ3JhbW1hdGljLWF1dGhlbnRpY2F0aW9uL3BvbS54bWwKQEAgLTI4LDcgKzI4LDcgQEAKIAogICAgIDxhcnRpZmFjdElkPnByb2dyYW1tYXRpYy1hdXRoZW50aWNhdGlvbi1qYWNjLWFwaTwvYXJ0aWZhY3RJZD4KICAgICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgotICAgIAorCiAgICAgPG5hbWU+SmF2YSBFRSA3IFNhbXBsZTogUHJvZ3JhbW1hdGljLWF1dGhlbnRpY2F0aW9uIHdpdGggSmFjYyBhcGk8L25hbWU+CiAgICAgPGJ1aWxkPgogICAgICAgPGZpbmFsTmFtZT5wcm9nLWF1dGg8L2ZpbmFsTmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL3Byb2dyYW1tYXRpYy1hdXRoZW50aWNhdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9wcm9ncmFtbWF0aWNhdXRoZW50aWNhdGlvbi9zYW0vU2FtQXV0b1JlZ2lzdHJhdGlvbkxpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9wcm9ncmFtbWF0aWMtYXV0aGVudGljYXRpb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvcHJvZ3JhbW1hdGljYXV0aGVudGljYXRpb24vc2FtL1NhbUF1dG9SZWdpc3RyYXRpb25MaXN0ZW5lci5qYXZhCmluZGV4IDdiNjIyN2UuLjRiNGUyNmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL3Byb2dyYW1tYXRpYy1hdXRoZW50aWNhdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9wcm9ncmFtbWF0aWNhdXRoZW50aWNhdGlvbi9zYW0vU2FtQXV0b1JlZ2lzdHJhdGlvbkxpc3RlbmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvcHJvZ3JhbW1hdGljLWF1dGhlbnRpY2F0aW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9qYWNjQXBpL3Byb2dyYW1tYXRpY2F1dGhlbnRpY2F0aW9uL3NhbS9TYW1BdXRvUmVnaXN0cmF0aW9uTGlzdGVuZXIuamF2YQpAQCAtMjMsOSArMjMsOSBAQAogaW1wb3J0IG9yZy5nbGFzc2Zpc2guamFjY0FwaS5jb21tb24uSmFzcGljVXRpbHM7CiAKIC8qKgotICogCisgKgogICogQGF1dGhvciBBcmphbiBUaWptcwotICogCisgKgogICovCiBAV2ViTGlzdGVuZXIKIHB1YmxpYyBjbGFzcyBTYW1BdXRvUmVnaXN0cmF0aW9uTGlzdGVuZXIgZXh0ZW5kcyBCYXNlU2VydmxldENvbnRleHRMaXN0ZW5lciB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9wcm9ncmFtbWF0aWMtYXV0aGVudGljYXRpb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvcHJvZ3JhbW1hdGljYXV0aGVudGljYXRpb24vc2FtL1Rlc3RTZXJ2ZXJBdXRoTW9kdWxlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9wcm9ncmFtbWF0aWMtYXV0aGVudGljYXRpb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvcHJvZ3JhbW1hdGljYXV0aGVudGljYXRpb24vc2FtL1Rlc3RTZXJ2ZXJBdXRoTW9kdWxlLmphdmEKaW5kZXggNjhjM2MyMy4uMmYxZGE4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvcHJvZ3JhbW1hdGljLWF1dGhlbnRpY2F0aW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9qYWNjQXBpL3Byb2dyYW1tYXRpY2F1dGhlbnRpY2F0aW9uL3NhbS9UZXN0U2VydmVyQXV0aE1vZHVsZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL3Byb2dyYW1tYXRpYy1hdXRoZW50aWNhdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9wcm9ncmFtbWF0aWNhdXRoZW50aWNhdGlvbi9zYW0vVGVzdFNlcnZlckF1dGhNb2R1bGUuamF2YQpAQCAtNDAsOSArNDAsOSBAQAogLyoqCiAgKiBWZXJ5IGJhc2ljIFNBTSB0aGF0IHJldHVybnMgYSBzaW5nbGUgaGFyZGNvZGVkIHVzZXIgbmFtZWQgInRlc3QiIHdpdGggcm9sZSAiYXJjaGl0ZWN0IiB3aGVuIHRoZSByZXF1ZXN0ICphdHRyaWJ1dGUqCiAgKiA8Y29kZT5kb0xvZ2luPC9jb2RlPiBpcyBwcmVzZW50LgotICogCisgKgogICogQGF1dGhvciBBcmphbiBUaWptcwotICogCisgKgogICovCiBwdWJsaWMgY2xhc3MgVGVzdFNlcnZlckF1dGhNb2R1bGUgaW1wbGVtZW50cyBTZXJ2ZXJBdXRoTW9kdWxlIHsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvcHJvZ3JhbW1hdGljLWF1dGhlbnRpY2F0aW9uL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9qYWNjQXBpL3Byb2dyYW1tYXRpY2F1dGhlbnRpY2F0aW9uL1Byb2dyYW1tYXRpY0F1dGhlbnRpY2F0aW9uSVQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL3Byb2dyYW1tYXRpYy1hdXRoZW50aWNhdGlvbi9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9wcm9ncmFtbWF0aWNhdXRoZW50aWNhdGlvbi9Qcm9ncmFtbWF0aWNBdXRoZW50aWNhdGlvbklULmphdmEKaW5kZXggMDdmMzBhYS4uYjM4ZjNiOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvcHJvZ3JhbW1hdGljLWF1dGhlbnRpY2F0aW9uL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9qYWNjQXBpL3Byb2dyYW1tYXRpY2F1dGhlbnRpY2F0aW9uL1Byb2dyYW1tYXRpY0F1dGhlbnRpY2F0aW9uSVQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9wcm9ncmFtbWF0aWMtYXV0aGVudGljYXRpb24vc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvcHJvZ3JhbW1hdGljYXV0aGVudGljYXRpb24vUHJvZ3JhbW1hdGljQXV0aGVudGljYXRpb25JVC5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAgKiBUaGlzIHRlc3RzIHRoYXQgYSBjYWxsIGZyb20gYSBTZXJ2bGV0IHRvIEh0dHBTZXJ2bGV0UmVxdWVzdCNhdXRoZW50aWNhdGUgY2FuIHJlc3VsdAogICogaW4gYSBzdWNjZXNzZnVsIGF1dGhlbnRpY2F0aW9uLgogICoKLSAqIAorICoKICAqLwogQFJ1bldpdGgoQXJxdWlsbGlhbi5jbGFzcykKIHB1YmxpYyBjbGFzcyBQcm9ncmFtbWF0aWNBdXRoZW50aWNhdGlvbklUIGV4dGVuZHMgQXJxdWlsbGlhbkJhc2UgewpAQCAtNDksNiArNDksNiBAQAogICAgICAgICBTdHJpbmcgcmVzcG9uc2UgPSBnZXRGcm9tU2VydmVyUGF0aCgicHVibGljL2F1dGhlbnRpY2F0ZSIpOwogICAgICAgICBhc3NlcnRUcnVlKCJTaG91bGQgY29udGFpbiB3ZWIgdXNlciB0ZXN0IGFuZCBhcmNoaXRlY3QgaW4gc3ViamVjdCBwcmluY2lwYWxzIiwgcmVzcG9uc2UuY29udGFpbnMoIlByaW5jaXBhbHM6IHRlc3QsIGFyY2hpdGVjdCIpKTsKICAgICB9Ci0gICAKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3NyYy9EdW1teVBvbGljeUNvbmZpZ3VyYXRpb25GYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3NyYy9EdW1teVBvbGljeUNvbmZpZ3VyYXRpb25GYWN0b3J5LmphdmEKaW5kZXggOWRhNGU2OC4uZjVkNzI0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9zcmMvRHVtbXlQb2xpY3lDb25maWd1cmF0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvc3JjL0R1bW15UG9saWN5Q29uZmlndXJhdGlvbkZhY3RvcnkuamF2YQpAQCAtMjEsOSArMjEsOSBAQAogaW1wb3J0IGpha2FydGEuc2VjdXJpdHkuamFjYy5Qb2xpY3lDb250ZXh0RXhjZXB0aW9uOwogCiBwdWJsaWMgY2xhc3MgRHVtbXlQb2xpY3lDb25maWd1cmF0aW9uRmFjdG9yeSBleHRlbmRzIFBvbGljeUNvbmZpZ3VyYXRpb25GYWN0b3J5IHsKLSAgICBwdWJsaWMgUG9saWN5Q29uZmlndXJhdGlvbiAKKyAgICBwdWJsaWMgUG9saWN5Q29uZmlndXJhdGlvbgogICAgICAgICAgICAgZ2V0UG9saWN5Q29uZmlndXJhdGlvbihTdHJpbmcgY29udGV4dElELCBib29sZWFuIHJlbW92ZSkKLSAgICAJICAgIHRocm93cyBqYWthcnRhLnNlY3VyaXR5LmphY2MuUG9saWN5Q29udGV4dEV4Y2VwdGlvbiB7CisgICAgICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZWN1cml0eS5qYWNjLlBvbGljeUNvbnRleHRFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvc3JjL1Rlc3RFSkJQZXJtcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9zcmMvVGVzdEVKQlBlcm1zLmphdmEKaW5kZXggODJhNzA4Ny4uZjczYjdlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9zcmMvVGVzdEVKQlBlcm1zLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9zcmMvVGVzdEVKQlBlcm1zLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lio7CiBpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEuc2VjdXJpdHkuKjsgCitpbXBvcnQgamF2YS5zZWN1cml0eS4qOwogaW1wb3J0IGpha2FydGEuc2VjdXJpdHkuamFjYy5FSkJNZXRob2RQZXJtaXNzaW9uOwogaW1wb3J0IGpha2FydGEuc2VjdXJpdHkuamFjYy5FSkJSb2xlUmVmUGVybWlzc2lvbjsKIApAQCAtNTAsMTQgKzUwLDE0IEBACiAKICAgICAgICAgUGVybWlzc2lvbiBwMiA9IHAxOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgRmlsZU91dHB1dFN0cmVhbSBmb3V0ID0gbmV3IAorICAgICAgICAgICAgRmlsZU91dHB1dFN0cmVhbSBmb3V0ID0gbmV3CiAgICAgICAgICAgICAgICAgRmlsZU91dHB1dFN0cmVhbSgic2VyaWFsLXRlc3QtZmlsZS50bXAiKTsKICAgICAgICAgICAgIE9iamVjdE91dHB1dFN0cmVhbSBzb3V0ID0gbmV3IE9iamVjdE91dHB1dFN0cmVhbShmb3V0KTsKICAgICAgICAgICAgIHNvdXQud3JpdGVPYmplY3QocDEpOwogICAgICAgICAgICAgc291dC5mbHVzaCgpOwogICAgICAgICAgICAgc291dC5jbG9zZSgpOwogICAgICAgICAgICAgZm91dC5jbG9zZSgpOwotICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsgCisgICAgICAgIH0gY2F0Y2goIFRocm93YWJsZSB0ICkgewogICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGRlYnVnKCAiLS0gU2VyaWFsaXphdGlvbiBUZXN0IEZhaWxlZCh3cml0ZSktIiArIHAxLmdldE5hbWUoKSArICIsIiArIHAxLmdldEFjdGlvbnMoKSk7CiAgICAgICAgIH0KQEAgLTY3LDE4ICs2NywxOCBAQAogICAgICAgICAgICAgT2JqZWN0SW5wdXRTdHJlYW0gc2luID0gbmV3IE9iamVjdElucHV0U3RyZWFtKGZpbik7CiAgICAgICAgICAgICBwMiA9IChQZXJtaXNzaW9uKSBzaW4ucmVhZE9iamVjdCgpOwogICAgICAgICAgICAgc2luLmNsb3NlKCk7Ci0gICAgICAgICAgICBmaW4uY2xvc2UoKTsgCi0gICAgICAgIH0gY2F0Y2goIFRocm93YWJsZSB0ICkgeyAKKyAgICAgICAgICAgIGZpbi5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsKICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBkZWJ1ZyggIi0tIFNlcmlhbGl6YXRpb24gVGVzdCBGYWlsZWQocmVhZCktIiArIHAxLmdldE5hbWUoKSArICIsIiArIHAxLmdldEFjdGlvbnMoKSk7CiAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgPT0gdHJ1ZSkgewotICAgICAgICAgICAgaWYgKHAyLmVxdWFscyhwMSkpIHsgCisgICAgICAgICAgICBpZiAocDIuZXF1YWxzKHAxKSkgewogICAgICAgICAgICAgICAgIGRlYnVnKCAiLS0gU2VyaWFsaXphdGlvbiBUZXN0IFN1Y2NlZWRlZCAtLS0tLS0tLS0tLSIgKyBwMi5nZXROYW1lKCkgKyAiLCIgKyBwMi5nZXRBY3Rpb25zKCkpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOwotICAgICAgICAgICAgfSBlbHNlIHsgCisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGRlYnVnKCAiLS0gU2VyaWFsaXphdGlvbiBUZXN0IEZhaWxlZC0iICsgcDEuZ2V0TmFtZSgpICsgIiwiICsgcDEuZ2V0QWN0aW9ucygpKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KQEAgLTEwNSw3ICsxMDUsNyBAQAogCiAgICAgICAgICAgICBpZiAoZXhwZWN0ZWRUb1N1Y2NlZWQpIHsKIAotICAgICAgICAgICAgICAgIHAyID0gbmV3IEVKQk1ldGhvZFBlcm1pc3Npb24ocDEuZ2V0TmFtZSgpLHAxLmdldEFjdGlvbnMoKSk7IAorICAgICAgICAgICAgICAgIHAyID0gbmV3IEVKQk1ldGhvZFBlcm1pc3Npb24ocDEuZ2V0TmFtZSgpLHAxLmdldEFjdGlvbnMoKSk7CiAgICAgICAgICAgICAgICAgdGVzdFNlcmlhbGl6YXRpb24ocDIpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFwMS5lcXVhbHMocDIpKSB7CkBAIC0xMjMsNyArMTIzLDcgQEAKICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsgCisgICAgICAgIH0gY2F0Y2goIFRocm93YWJsZSB0ICkgewogCiAgICAgICAgICAgICBpZiAoZXhwZWN0ZWRUb1N1Y2NlZWQpIHsKICAgICAgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkb0VKQk1ldGhvZFBlcm1pc3Npb24oIGJvb2xlYW4gZXhwZWN0ZWRUb1N1Y2NlZWQsCi0gICAgICAgICAgIFN0cmluZyBlamJOYW1lLCBTdHJpbmcgbWV0aG9kTmFtZSwgU3RyaW5nIG1ldGhvZEludGVyZmFjZSwgCisgICAgICAgICAgIFN0cmluZyBlamJOYW1lLCBTdHJpbmcgbWV0aG9kTmFtZSwgU3RyaW5nIG1ldGhvZEludGVyZmFjZSwKICAgICAgICAgICAgU3RyaW5nW10gbWV0aG9kUGFyYW1zKSB7CiAgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9ICJkb0VKQk1ldGhvZFBlcm1pc3Npb25XaXRoUGFyYW1zOiIgKwogICAgICAgICAgICAgZXhwZWN0ZWRUb1N1Y2NlZWQgKyAiLSIgKyBlamJOYW1lICsgIi0iICsgbWV0aG9kTmFtZSArCkBAIC0xNjMsNyArMTYzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kUGFyYW1zKTsKIAogICAgICAgICAgICAgaWYgKGV4cGVjdGVkVG9TdWNjZWVkKSB7Ci0gICAgICAgICAgICAgICAgcDIgPSBuZXcgRUpCTWV0aG9kUGVybWlzc2lvbihwMS5nZXROYW1lKCkscDEuZ2V0QWN0aW9ucygpKTsgCisgICAgICAgICAgICAgICAgcDIgPSBuZXcgRUpCTWV0aG9kUGVybWlzc2lvbihwMS5nZXROYW1lKCkscDEuZ2V0QWN0aW9ucygpKTsKICAgICAgICAgICAgICAgICB0ZXN0U2VyaWFsaXphdGlvbihwMik7CiAKICAgICAgICAgICAgICAgICBpZiAoIXAxLmVxdWFscyhwMikpIHsKQEAgLTE4MSwxNiArMTgxLDE2IEBACiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7IAorICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsKIAogICAgICAgICAgICAgaWYgKGV4cGVjdGVkVG9TdWNjZWVkKSB7CiAgICAgICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgICAgICBpZiAocmVzdWx0ID09IGV4cGVjdGVkVG9TdWNjZWVkKSB7Ci0gICAgICAgICAgICBpZiAoZXhwZWN0ZWRUb1N1Y2NlZWQpIHsgCisgICAgICAgICAgICBpZiAoZXhwZWN0ZWRUb1N1Y2NlZWQpIHsKICAgICAgICAgICAgICAgICBkZWJ1ZyggIi0tIENvbnN0cnVjdCBUZXN0IFN1Y2NlZWRlZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGRlYnVnKCAiLS0gQ29uc3RydWN0IFRlc3QgU3VjY2VlZGVkIChuZWdhdGl2ZSktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKQEAgLTIwNiw3ICsyMDYsNyBAQAogICAgICAgICAgICAgIFN0cmluZyBlamJOYW1lLCBTdHJpbmcgbWV0aG9kSW50ZXJmYWNlLCBNZXRob2QgbWV0aG9kKSB7CiAKICAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gImRvRUpCTWV0aG9kUGVybWlzc2lvbldpdGhNZXRob2Q6IiArCi0gICAgICAgICAgICBleHBlY3RlZFRvU3VjY2VlZCArICItIiArIGVqYk5hbWUgKyAKKyAgICAgICAgICAgIGV4cGVjdGVkVG9TdWNjZWVkICsgIi0iICsgZWpiTmFtZSArCiAgICAgICAgICAgICAiLSIgKyBtZXRob2RJbnRlcmZhY2UgKyAiLSIgKyBtZXRob2Q7CiAKICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOwpAQCAtMjQxLDcgKzI0MSw3IEBACiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7IAorICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsKIAogICAgICAgICAgICAgaWYgKGV4cGVjdGVkVG9TdWNjZWVkKSB7CiAgICAgICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTI1MSw3ICsyNTEsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlc3VsdCA9PSBleHBlY3RlZFRvU3VjY2VlZCkgewotICAgICAgICAgICAgaWYgKGV4cGVjdGVkVG9TdWNjZWVkKSB7IAorICAgICAgICAgICAgaWYgKGV4cGVjdGVkVG9TdWNjZWVkKSB7CiAgICAgICAgICAgICAgICAgZGVidWcoICItLSBDb25zdHJ1Y3QgVGVzdCBTdWNjZWVkZWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBkZWJ1ZyggIi0tIENvbnN0cnVjdCBUZXN0IFN1Y2NlZWRlZCAobmVnYXRpdmUpLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CkBAIC0yODEsNyArMjgxLDcgQEAKIAogICAgICAgICAgICAgaWYgKGV4cGVjdGVkVG9TdWNjZWVkKSB7CiAKLSAgICAgICAgICAgICAgICBwMiA9IG5ldyBFSkJSb2xlUmVmUGVybWlzc2lvbihwMS5nZXROYW1lKCkscDEuZ2V0QWN0aW9ucygpKTsgCisgICAgICAgICAgICAgICAgcDIgPSBuZXcgRUpCUm9sZVJlZlBlcm1pc3Npb24ocDEuZ2V0TmFtZSgpLHAxLmdldEFjdGlvbnMoKSk7CiAgICAgICAgICAgICAgICAgdGVzdFNlcmlhbGl6YXRpb24ocDIpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFwMS5lcXVhbHMocDIpKSB7CkBAIC0zMDAsNyArMzAwLDcgQEAKICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsgCisgICAgICAgIH0gY2F0Y2goIFRocm93YWJsZSB0ICkgewogCiAgICAgICAgICAgICBpZiAoZXhwZWN0ZWRUb1N1Y2NlZWQpIHsKICAgICAgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMzEwLDcgKzMxMCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAocmVzdWx0ID09IGV4cGVjdGVkVG9TdWNjZWVkKSB7Ci0gICAgICAgICAgICBpZiAoZXhwZWN0ZWRUb1N1Y2NlZWQpIHsgCisgICAgICAgICAgICBpZiAoZXhwZWN0ZWRUb1N1Y2NlZWQpIHsKICAgICAgICAgICAgICAgICBkZWJ1ZyggIi0tIENvbnN0cnVjdCBUZXN0IFN1Y2NlZWRlZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiArIHAxLmhhc2hDb2RlKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBkZWJ1ZyggIi0tIENvbnN0cnVjdCBUZXN0IFN1Y2NlZWRlZCAobmVnYXRpdmUpLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CkBAIC0zMjQsNyArMzI0LDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZG9QZXJtaXNzaW9uSW1wbGllcyAoIGJvb2xlYW4gZXhwZWN0ZWRSZXN1bHQsCiAgICAgICAgICAgICBQZXJtaXNzaW9uIHRoaXNQLCBQZXJtaXNzaW9uIHApIHsKLSAgICAgICAgLy9TRUMgaXMgYWRkZWQgdGhlcmUgc28gdGhhdCBpdCB3aWxsIG5vdCBjdXQgb2ZmIHRoZSAKKyAgICAgICAgLy9TRUMgaXMgYWRkZWQgdGhlcmUgc28gdGhhdCBpdCB3aWxsIG5vdCBjdXQgb2ZmIHRoZQogICAgICAgICAvL2ZpcnN0IHBhcnQgd2l0aCBzcGFjZSwgYW4gaXNzdWUgaW4gcmVwb3J0aW5nIHRvb2xzCiAgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9ICJTRUMgZG9QZXJtaXNzaW9uSW1wbGllczoiICsKICAgICAgICAgICAgIGV4cGVjdGVkUmVzdWx0ICsgIi0iICsgdGhpc1AgKyAiLSIgKyBwOwpAQCAtMzM2LDE3ICszMzYsMTcgQEAKICAgICAgICAgICAgIGlmICh0aGlzUC5pbXBsaWVzKHApICE9IGV4cGVjdGVkUmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgZGVidWcoCiAgICAgICAgICAgICAgICAgICAgIChleHBlY3RlZFJlc3VsdCA/ICJ1bmV4cGVjdGVkIGZhaWx1cmU6IiA6InVuZXhwZWN0ZWQgc3VjY2VzczoiKQotICAgICAgICAgICAgICAgICAgICAgKyBwICsgKGV4cGVjdGVkUmVzdWx0ID8iIG5vdCBpbXBsaWVkIGJ5OiI6IiBpbXBsaWVkIGJ5OiIpICsgCisgICAgICAgICAgICAgICAgICAgICArIHAgKyAoZXhwZWN0ZWRSZXN1bHQgPyIgbm90IGltcGxpZWQgYnk6IjoiIGltcGxpZWQgYnk6IikgKwogICAgICAgICAgICAgICAgICAgICB0aGlzUCk7CiAgICAgICAgICAgICAgICAgZGVidWcoICItLSBQZXJtaXNzaW9uIGltcGxpZXMgVGVzdCBGYWlsZWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhwICsgCisgICAgICAgICAgICAgICAgZGVidWcocCArCiAgICAgICAgICAgICAgICAgICAgKGV4cGVjdGVkUmVzdWx0ID8gIiBpbXBsaWVkIGJ5OiI6IiBub3QgaW1wbGllZCBieToiKSArIHRoaXNQKTsKICAgICAgICAgICAgICAgICBkZWJ1ZyggIi0tIFBlcm1pc3Npb24gaW1wbGllcyBUZXN0IFN1Y2NlZWRlZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2goIFRocm93YWJsZSB0ICkgeyAKKyAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7CiAgICAgICAgICAgICBkZWJ1ZygidW5leHBlY3RlZCBleGNlcHRpb24iKTsKICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBkZWJ1ZyggIi0tIFBlcm1pc3Npb24gaW1wbGllcyBUZXN0IEZhaWxlZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CkBAIC0zNjgsNDEgKzM2OCw0MSBAQAogICAgICAgICAgICAgZG9FSkJNZXRob2RQZXJtaXNzaW9uKHRydWUsImJhbmtiZWFuIiwid2l0aGRyYXcsSG9tZSIpOwogICAgICAgICAgICAgZG9FSkJNZXRob2RQZXJtaXNzaW9uKHRydWUsImJhbmtiZWFuIiwid2l0aGRyYXcsSG9tZSxqYXZhLmxhbmcuc3RyaW5nIik7CiAgICAgICAgICAgICBkb0VKQk1ldGhvZFBlcm1pc3Npb24odHJ1ZSwiYmFua2JlYW4iLCIsSG9tZSIpOwotICAgIAorCiAgICAgICAgICAgICBkb0VKQk1ldGhvZFBlcm1pc3Npb24odHJ1ZSwiYmFua2JlYW4iLCIsSG9tZSxqYXZhLmxhbmcuc3RyaW5nIik7Ci0gICAgCisKICAgICAgICAgICAgIGRvRUpCTWV0aG9kUGVybWlzc2lvbih0cnVlLCJiYW5rYmVhbiIsIndpdGhkcmF3Iik7CiAgICAgICAgICAgICBkb0VKQk1ldGhvZFBlcm1pc3Npb24odHJ1ZSwiYmFua2JlYW4iLCJ3aXRoZHJhdyxIb21lIik7CiAgICAgICAgICAgICBkb0VKQk1ldGhvZFBlcm1pc3Npb24odHJ1ZSwiYmFua2JlYW4iLCJ3aXRoZHJhdywsamF2YS5sYW5nLnN0cmluZyIpOwogICAgICAgICAgICAgZG9FSkJNZXRob2RQZXJtaXNzaW9uKHRydWUsImJhbmtiZWFuIiwid2l0aGRyYXcsLCIpOwogICAgICAgICAgICAgZG9FSkJNZXRob2RQZXJtaXNzaW9uKGZhbHNlLCJiYW5rQmVhbiIsIndpdGhkcmF3IiwiSG9tZSIscGFyYW1zMyk7Ci0gICAgCisKICAgICAgICAgICAgIGRvRUpCTWV0aG9kUGVybWlzc2lvbih0cnVlLCJiYW5rQmVhbiIsIndpdGhkcmF3IiwiSG9tZSIscGFyYW1zMSk7CiAgICAgICAgICAgICBkb0VKQk1ldGhvZFBlcm1pc3Npb24odHJ1ZSwiYmFua0JlYW4iLCJ3aXRoZHJhdyIsIkhvbWUiLHBhcmFtczIpOwotICAgICAKKwogICAgICAgICAgICAgZG9FSkJNZXRob2RQZXJtaXNzaW9uKHRydWUsImJhbmtCZWFuIiwid2l0aGRyYXciLCJIb21lIixudWxsKTsKLSAgICAKKwogICAgICAgICAgICAgZG9FSkJNZXRob2RQZXJtaXNzaW9uKHRydWUsImJhbmtCZWFuIixudWxsLCJIb21lIixwYXJhbXMxKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIGRvRUpCTWV0aG9kUGVybWlzc2lvbih0cnVlLCJiYW5rQmVhbiIsIndpdGhkcmF3IixudWxsLHBhcmFtczIpOwotICAgIAorCiAgICAgICAgICAgICBkb0VKQk1ldGhvZFBlcm1pc3Npb24odHJ1ZSwiYmFua0JlYW4iLG51bGwsbnVsbCxudWxsKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgRUpCTWV0aG9kUGVybWlzc2lvbiBhID0gCisKKyAgICAgICAgICAgIEVKQk1ldGhvZFBlcm1pc3Npb24gYSA9CiAgICAgICAgICAgICAgICAgbmV3IEVKQk1ldGhvZFBlcm1pc3Npb24oImJhbmtCZWFuIiwid2l0aGRyYXcsSG9tZSxqYXZhLmxhbmcuc3RyaW5nIik7Ci0gICAgICAgICAgICBFSkJNZXRob2RQZXJtaXNzaW9uIGIgPSAKKyAgICAgICAgICAgIEVKQk1ldGhvZFBlcm1pc3Npb24gYiA9CiAgICAgICAgICAgICAgICAgbmV3IEVKQk1ldGhvZFBlcm1pc3Npb24oIm15QmVhbiIsIndpdGhkcmF3LEhvbWUsamF2YS5sYW5nLnN0cmluZyIpOwotICAgICAgICAgICAgRUpCTWV0aG9kUGVybWlzc2lvbiBjID0gCisgICAgICAgICAgICBFSkJNZXRob2RQZXJtaXNzaW9uIGMgPQogICAgICAgICAgICAgICAgIG5ldyBFSkJNZXRob2RQZXJtaXNzaW9uKCJteUJlYW4iLCIsSG9tZSxqYXZhLmxhbmcuc3RyaW5nIik7Ci0gICAgICAgICAgICBFSkJNZXRob2RQZXJtaXNzaW9uIGQgPSAKKyAgICAgICAgICAgIEVKQk1ldGhvZFBlcm1pc3Npb24gZCA9CiAgICAgICAgICAgICAgICAgbmV3IEVKQk1ldGhvZFBlcm1pc3Npb24oIm15QmVhbiIsIiwsamF2YS5sYW5nLnN0cmluZyIpOwotICAgICAgICAgICAgRUpCTWV0aG9kUGVybWlzc2lvbiBlID0gCisgICAgICAgICAgICBFSkJNZXRob2RQZXJtaXNzaW9uIGUgPQogICAgICAgICAgICAgICAgIG5ldyBFSkJNZXRob2RQZXJtaXNzaW9uKCJteUJlYW4iLCJ3aXRoZHJhdywsamF2YS5sYW5nLnN0cmluZyIpOwotICAgICAgICAgICAgRUpCTWV0aG9kUGVybWlzc2lvbiBmID0gCisgICAgICAgICAgICBFSkJNZXRob2RQZXJtaXNzaW9uIGYgPQogICAgICAgICAgICAgICAgIG5ldyBFSkJNZXRob2RQZXJtaXNzaW9uKCJteUJlYW4iLCJ3aXRoZHJhdywsamF2YS5sYW5nLmludCIpOwotICAgICAgICAgICAgRUpCTWV0aG9kUGVybWlzc2lvbiBnID0gCisgICAgICAgICAgICBFSkJNZXRob2RQZXJtaXNzaW9uIGcgPQogICAgICAgICAgICAgICAgIG5ldyBFSkJNZXRob2RQZXJtaXNzaW9uKCJteUJlYW4iLCJ3aXRoZHJhdyxSZW1vdGUsIik7Ci0gICAgICAgICAgICBFSkJNZXRob2RQZXJtaXNzaW9uIGggPSAKKyAgICAgICAgICAgIEVKQk1ldGhvZFBlcm1pc3Npb24gaCA9CiAgICAgICAgICAgICAgICAgbmV3IEVKQk1ldGhvZFBlcm1pc3Npb24oIm15QmVhbiIsIndpdGhkcmF3IiwiUmVtb3RlIixuZXcgU3RyaW5nWzBdKTsKICAgICAgICAgICAgIHRlc3RTZXJpYWxpemF0aW9uKGEpOwogICAgICAgICAgICAgdGVzdFNlcmlhbGl6YXRpb24oYik7CkBAIC00MTIsNyArNDEyLDcgQEAKICAgICAgICAgICAgIHRlc3RTZXJpYWxpemF0aW9uKGYpOwogICAgICAgICAgICAgdGVzdFNlcmlhbGl6YXRpb24oZyk7CiAgICAgICAgICAgICB0ZXN0U2VyaWFsaXphdGlvbihoKTsKLSAgICAKKwogICAgICAgICAgICAgZG9QZXJtaXNzaW9uSW1wbGllcyhmYWxzZSxhLGIpOwogICAgICAgICAgICAgZG9QZXJtaXNzaW9uSW1wbGllcyhmYWxzZSxiLGEpOwogICAgICAgICAgICAgZG9QZXJtaXNzaW9uSW1wbGllcyhmYWxzZSxjLGEpOwpAQCAtNDI4LDcgKzQyOCw3IEBACiAgICAgICAgICAgICBkb1Blcm1pc3Npb25JbXBsaWVzKHRydWUsZCxjKTsKICAgICAgICAgICAgIGRvUGVybWlzc2lvbkltcGxpZXModHJ1ZSxnLGgpOwogICAgICAgICAgICAgZG9QZXJtaXNzaW9uSW1wbGllcyh0cnVlLGgsZyk7Ci0gICAgCisKICAgICAgICAgICAgIGRvRUpCUm9sZVJlZlBlcm1pc3Npb24odHJ1ZSwiRUpCTmFtZSIsImN1c3RvbWVyIik7CiAKICAgICAgICAgICAgIEVKQlJvbGVSZWZQZXJtaXNzaW9uIGExLGEyLGEzLGE0OwpAQCAtNDQxLDcgKzQ0MSw3IEBACiAgICAgICAgICAgICB0ZXN0U2VyaWFsaXphdGlvbihhMik7CiAgICAgICAgICAgICB0ZXN0U2VyaWFsaXphdGlvbihhMyk7CiAgICAgICAgICAgICB0ZXN0U2VyaWFsaXphdGlvbihhNCk7Ci0gICAgCisKICAgICAgICAgICAgIGRvUGVybWlzc2lvbkltcGxpZXModHJ1ZSxhMSxhMSk7CiAgICAgICAgICAgICBkb1Blcm1pc3Npb25JbXBsaWVzKGZhbHNlLGExLGEyKTsKICAgICAgICAgICAgIGRvUGVybWlzc2lvbkltcGxpZXMoZmFsc2UsYTEsYTMpOwpAQCAtNDY4LDcgKzQ2OCw3IEBACiAKICAgICAgICAgZm9yIChpbnQgaT0wOyBpPCBtLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBmb3IgKGludCBqPTA7IGo8bS5sZW5ndGg7IGorKykgewotICAgICAgICAgICAgICAgIGlmIChpID09IGopIHsgCisgICAgICAgICAgICAgICAgaWYgKGkgPT0gaikgewogICAgICAgICAgICAgICAgICAgICBkb1Blcm1pc3Npb25JbXBsaWVzKHRydWUscFtpXSxwW2pdKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBkb1Blcm1pc3Npb25JbXBsaWVzKGZhbHNlLHBbaV0scFtqXSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3NyYy9UZXN0UENGLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3NyYy9UZXN0UENGLmphdmEKaW5kZXggYjU2ZDk1Ni4uZTUwNWUxYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9zcmMvVGVzdFBDRi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvc3JjL1Rlc3RQQ0YuamF2YQpAQCAtMzIsMTcgKzMyLDE3IEBACiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24odGVzdFN1aXRlKTsKICAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gbnVsbDsKICAgICAgICAgYm9vbGVhbiBleHBlY3RBQ0V4Y2VwdGlvbiA9Ci0gICAgICAgICAgICAoYXJncyAhPSBudWxsICYmIGFyZ3MubGVuZ3RoID4gMCkgPyAKKyAgICAgICAgICAgIChhcmdzICE9IG51bGwgJiYgYXJncy5sZW5ndGggPiAwKSA/CiAgICAgICAgICAgICBCb29sZWFuLnBhcnNlQm9vbGVhbihhcmdzWzBdKSA6IHRydWU7Ci0gICAgICAgIFN0cmluZyBleHBlY3RlZEV4Y2VwdGlvbiA9IAorICAgICAgICBTdHJpbmcgZXhwZWN0ZWRFeGNlcHRpb24gPQogICAgICAgICAgICAgKGFyZ3MgIT0gbnVsbCAmJiBhcmdzLmxlbmd0aCA+IDEpID8gYXJnc1sxXSA6IG51bGw7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXhwZWN0IEFjY2Vzc0NvbnRyb2xFeGNlcHRpb246ICIgKyBleHBlY3RBQ0V4Y2VwdGlvbik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXhwZWN0ZWQgRXhjZXB0aW9uOiAiICsgZXhwZWN0ZWRFeGNlcHRpb24pOwotICAgICAgICAKKwogICAgICAgICBkZXNjcmlwdGlvbiA9IHRlc3RTdWl0ZSArICItIiArIGV4cGVjdEFDRXhjZXB0aW9uICsgIi0iICsKICAgICAgICAgICAgIGV4cGVjdGVkRXhjZXB0aW9uICsgIiB3aXRob3V0IFNlY3VyaXR5TWFuYWdlciI7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBQb2xpY3lDb25maWd1cmF0aW9uRmFjdG9yeSBmID0gCisgICAgICAgICAgICBQb2xpY3lDb25maWd1cmF0aW9uRmFjdG9yeSBmID0KICAgICAgICAgICAgICAgICBQb2xpY3lDb25maWd1cmF0aW9uRmFjdG9yeS5nZXRQb2xpY3lDb25maWd1cmF0aW9uRmFjdG9yeSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgIGRlc2NyaXB0aW9uID0gdGVzdFN1aXRlICsgIi0iICsgZXhwZWN0QUNFeGNlcHRpb24gKyAiLSIgKwogICAgICAgICAgICAgZXhwZWN0ZWRFeGNlcHRpb24gKyAiIHdpdGggU2VjdXJpdHlNYW5hZ2VyIjsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFBvbGljeUNvbmZpZ3VyYXRpb25GYWN0b3J5IGYgPSAKKyAgICAgICAgICAgIFBvbGljeUNvbmZpZ3VyYXRpb25GYWN0b3J5IGYgPQogICAgICAgICAgICAgICAgIFBvbGljeUNvbmZpZ3VyYXRpb25GYWN0b3J5LmdldFBvbGljeUNvbmZpZ3VyYXRpb25GYWN0b3J5KCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaChBY2Nlc3NDb250cm9sRXhjZXB0aW9uIGFjZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9zcmMvVGVzdFVSTFBhdHRlcm4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvc3JjL1Rlc3RVUkxQYXR0ZXJuLmphdmEKaW5kZXggYWEyYmI5YS4uYWI2NTc2YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9zcmMvVGVzdFVSTFBhdHRlcm4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3NyYy9UZXN0VVJMUGF0dGVybi5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9ICJ0ZXN0UGF0dGVyblR5cGU6IiArIHA7CiAgICAgICAgIFVSTFBhdHRlcm4gdSA9IG5ldyBVUkxQYXR0ZXJuKHApOwogICAgICAgICBpbnQgcmVzdWx0ID0gdS5wYXR0ZXJuVHlwZSgpOwotICAgICAgICBpZiAocmVzdWx0ID09IGV4cGVjdGVkKSB7IAorICAgICAgICBpZiAocmVzdWx0ID09IGV4cGVjdGVkKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInBhdHRlcm5UeXBlOiAiICsgZXhwZWN0ZWQgKyAiICIgKwogICAgICAgICAgICAgICAgICAgICByZXN1bHQgKyAiIHN1Y2NlZGVkICIgKyB1KTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOwpAQCAtNjIsMTYgKzYyLDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKyAiIHN1Y2NlZGVkICIgKyB1MSArICJcdCIgKyB1Mik7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCAhPSAwICYmIHVua25vd24pIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbXBhcmVUbygtPik6ICEwICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbXBhcmVUbygtPik6ICEwICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICsgICIgc3VjY2VkZWQgIiArIHUxICsgIlx0IiArIHUyKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb21wYXJlVG8oLT4pOiAiICsgZXhwZWN0ZWQgKyAiICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbXBhcmVUbygtPik6ICIgKyBleHBlY3RlZCArICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKyAiIGZhaWxlZCAgICAiICsgdTEgKyAiXHQiICsgdTIpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb21wYXJlVG8oPC0pOiAiICsgZXhwZWN0ZWQgKiAtMSArICIgIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb21wYXJlVG8oPC0pOiAiICsgZXhwZWN0ZWQgKiAtMSArICIgIiArCiAgICAgICAgICAgICAgICAgICAgIGludmVyc2UgKyAiIGZhaWxlZCAgICAiICsgdTIgKyAiXHQiICsgdTEpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KQEAgLTg2LDEzICs4NiwxMyBAQAogICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVSTFBhdHRlcm4uUFRfREVGQVVMVDogICAgCisgICAgICAgIGNhc2UgVVJMUGF0dGVybi5QVF9ERUZBVUxUOgogICAgICAgICAgICAgZXhwZWN0ZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVVJMUGF0dGVybi5QVF9FWFRFTlNJT046CiAgICAgICAgICAgICBpZiAocDJUeXBlID09IFVSTFBhdHRlcm4uUFRfRVhURU5TSU9OICYmIHAxLmVxdWFscyhwMikpIHsKICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHAyVHlwZSA9PSBVUkxQYXR0ZXJuLlBUX0VYQUNUICYmIAorICAgICAgICAgICAgfSBlbHNlIGlmIChwMlR5cGUgPT0gVVJMUGF0dGVybi5QVF9FWEFDVCAmJgogICAgICAgICAgICAgICAgICAgICAgcDIuZW5kc1dpdGgocDEuc3Vic3RyaW5nKDEpKSkgewogICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgICAgICAgICAgaWYgKHAxLmVxdWFscygiLyoiKSkgewogICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAocDIuc3RhcnRzV2l0aChwMS5zdWJzdHJpbmcoMCxwMS5sZW5ndGgoKS0yKSkgJiYKLSAgICAgICAgICAgICAgICAgICAgIChwMi5sZW5ndGgoKSA9PSBwMS5sZW5ndGgoKS0yIHx8IAorICAgICAgICAgICAgICAgICAgICAgKHAyLmxlbmd0aCgpID09IHAxLmxlbmd0aCgpLTIgfHwKICAgICAgICAgICAgICAgICAgICAgICBwMi5zdWJzdHJpbmcocDEubGVuZ3RoKCktMikuc3RhcnRzV2l0aCgiLyIpKSkgewogICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTEyNCwxNiArMTI0LDE2IEBACiAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gdTEuaW1wbGllcyh1Mik7CiAgICAgICAgIGJvb2xlYW4gaW52ZXJzZSA9IHUyLmltcGxpZXModTEpOwogCi0gICAgICAgIGlmIChyZXN1bHQgPT0gZXhwZWN0ZWQpIHsgCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImltcGxpZXMoLT4pOiAiICsgZXhwZWN0ZWQgKyAiICIgKyByZXN1bHQgKyAKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBleHBlY3RlZCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbXBsaWVzKC0+KTogIiArIGV4cGVjdGVkICsgIiAiICsgcmVzdWx0ICsKICAgICAgICAgICAgICAgICAgICAgIiBzdWNjZWRlZCAiICsgdTEgKyAiXHQiICsgdTIpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gZWxzZSBpZiAoaW52ZXJzZSAhPSBleHBlY3RlZEludmVyc2UpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW1wbGllcyg8LSk6ICIgKyBleHBlY3RlZEludmVyc2UgKyAiICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW1wbGllcyg8LSk6ICIgKyBleHBlY3RlZEludmVyc2UgKyAiICIgKwogICAgICAgICAgICAgICAgICAgICBpbnZlcnNlICsgIiBmYWlsZWQgICAgIiArIHUyICsgIlx0IiArIHUxKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbXBsaWVzKC0+KTogIiArIGV4cGVjdGVkICsgIiAiICsgcmVzdWx0ICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImltcGxpZXMoLT4pOiAiICsgZXhwZWN0ZWQgKyAiICIgKyByZXN1bHQgKwogICAgICAgICAgICAgICAgICAgICAiIGZhaWxlZCAgICAiICsgdTEgKyAiXHQiICsgdTIpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KQEAgLTE0Miw3ICsxNDIsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB0ZXN0X2VxdWFscygKICAgICAgICAgICAgIFN0cmluZyBwMSwgaW50IHAxVHlwZSwgU3RyaW5nIHAyLCBpbnQgcDJUeXBlKSB7Ci0gICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9ICJ0ZXN0RXF1YWxzOiIgKyAKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gInRlc3RFcXVhbHM6IiArCiAgICAgICAgICAgICBwMSArICItIiArIHAxVHlwZSArICItIiArIHAyICsgIi0iICsgcDJUeXBlOwogICAgICAgICBVUkxQYXR0ZXJuIHUxID0gbmV3IFVSTFBhdHRlcm4ocDEpOwogICAgICAgICBVUkxQYXR0ZXJuIHUyID0gbmV3IFVSTFBhdHRlcm4ocDIpOwpAQCAtMTU0LDcgKzE1NCw3IEBACiAKICAgICAgICAgaWYgKHJlc3VsdCA9PSBpbnZlcnNlKSB7CiAgICAgICAgICAgICBpZiAocmVzdWx0ID09IHRydWUgJiYgKCF1MS5pbXBsaWVzKHUyKSB8fCAhdTIuaW1wbGllcyh1MSkpKSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlcXVhbHMoPC0+KTogIiArIGV4cGVjdGVkICsgIiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlcXVhbHMoPC0+KTogIiArIGV4cGVjdGVkICsgIiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArICIgZmFpbGVkICAgICIgKyB1MiArICJcdCIgKyB1MSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CiAKQEAgLTE2MywxMyArMTYzLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKyAiIHN1Y2NlZGVkICIgKyB1MSArICJcdCIgKyB1Mik7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7CiAKLSAgICAgICAgICAgIH0gZWxzZSB7IAotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXF1YWxzKC0tPik6ICIgKyBleHBlY3RlZCArICIgIiArIAorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVxdWFscygtLT4pOiAiICsgZXhwZWN0ZWQgKyAiICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICsgIiBmYWlsZWQgICAgIiArIHUxICsgIlx0IiArIHUyKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXF1YWxzKDwtLSk6ICIgKyByZXN1bHQgKyAiICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXF1YWxzKDwtLSk6ICIgKyByZXN1bHQgKyAiICIgKwogICAgICAgICAgICAgICAgICAgICBpbnZlcnNlICsgIiBmYWlsZWQgICAgIiArIHUyICsgIlx0IiArIHUxKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwogICAgICAgICB9CkBAIC0xODIsNyArMTgyLDcgQEAKICAgICAgICAgICAgICIvYS9iL2MuanNwIiwKICAgICAgICAgICAgICIvYS9jIiwKICAgICAgICAgICAgICIvKiIsCi0gICAgICAgICAgICAiL2EvKiIsIAorICAgICAgICAgICAgIi9hLyoiLAogICAgICAgICAgICAgIi9hL2MvKiIsCiAgICAgICAgICAgICAiLy8qIiwKICAgICAgICAgICAgICIqLmpzcCIsCkBAIC0yMDQsMTcgKzIwNCwxNyBAQAogICAgICAgICAgICAgLyogQ09NTUVOVEVEIE9VVCEgLFVSTFBhdHRlcm4uUFRfREVGQVVMVCAqLwogICAgICAgICB9OwogCi0gICAgICAgIGZvciAoaW50IGk9MDsgaTx1cEFycmF5Lmxlbmd0aDsgaSsrKSB7IAorICAgICAgICBmb3IgKGludCBpPTA7IGk8dXBBcnJheS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgdGVzdF9wYXR0ZXJuVHlwZSh1cEFycmF5W2ldLHVwVHlwZUFycmF5W2ldKTsKICAgICAgICAgfQotICAgIAorCiAgICAgICAgIGZvciAoaW50IGk9MDsgaTx1cEFycmF5Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBmb3IgKGludCBqPTA7IGo8dXBBcnJheS5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgIHRlc3RfY29tcGFyZVRvKHVwQXJyYXlbaV0sdXBUeXBlQXJyYXlbaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBBcnJheVtqXSx1cFR5cGVBcnJheVtqXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAKKwogICAgICAgICBmb3IgKGludCBpPTA7IGk8dXBBcnJheS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqPHVwQXJyYXkubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICAgICB0ZXN0X2ltcGxpZXModXBBcnJheVtpXSx1cFR5cGVBcnJheVtpXSwKQEAgLTIyMiwxMyArMjIyLDEzIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKGludCBpPTA7IGk8dXBBcnJheS5sZW5ndGg7IGkrKykgeyAKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPHVwQXJyYXkubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIGZvciAoaW50IGo9MDsgajx1cEFycmF5Lmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgICAgdGVzdF9lcXVhbHModXBBcnJheVtpXSx1cFR5cGVBcnJheVtpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBBcnJheVtqXSx1cFR5cGVBcnJheVtqXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAKKwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0U3VpdGUpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvc3JjL1Rlc3RVUkxQYXR0ZXJuU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9zcmMvVGVzdFVSTFBhdHRlcm5TcGVjLmphdmEKaW5kZXggNjM5OWRkNS4uMDc4ODFhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9zcmMvVGVzdFVSTFBhdHRlcm5TcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9zcmMvVGVzdFVSTFBhdHRlcm5TcGVjLmphdmEKQEAgLTMwLDI1ICszMCwyNSBAQAogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gdGVzdF9jb25zdHJ1Y3RvcigKICAgICAgICAgICAgIFN0cmluZyBwLCBib29sZWFuIGV4cGVjdGVkVG9TdWNjZWVkKSB7CiAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gZXhwZWN0ZWRUb1N1Y2NlZWQ7Ci0gICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFVSTFBhdHRlcm5TcGVjIHUgPSBuZXcgVVJMUGF0dGVyblNwZWMocCk7CiAKICAgICAgICAgICAgIGlmIChleHBlY3RlZFRvU3VjY2VlZCkgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29uc3RydWN0b3IoICk6ICIgKyBleHBlY3RlZFRvU3VjY2VlZCArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29uc3RydWN0b3IoICk6ICIgKyBleHBlY3RlZFRvU3VjY2VlZCArCiAgICAgICAgICAgICAgICAgICAgICIgc3VjY2VkZWQgIiArIHUudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29uc3RydWN0b3IoICk6ICIgKyBleHBlY3RlZFRvU3VjY2VlZCArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29uc3RydWN0b3IoICk6ICIgKyBleHBlY3RlZFRvU3VjY2VlZCArCiAgICAgICAgICAgICAgICAgICAgICIgZmFpbGVkICAgIiArIHUudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7Ci0gICAgICAgICAgICBpZiAoIWV4cGVjdGVkVG9TdWNjZWVkKSB7IAotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29uc3RydWN0b3IoZSk6ICIgKyBleHBlY3RlZFRvU3VjY2VlZCArIAorICAgICAgICAgICAgaWYgKCFleHBlY3RlZFRvU3VjY2VlZCkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29uc3RydWN0b3IoZSk6ICIgKyBleHBlY3RlZFRvU3VjY2VlZCArCiAgICAgICAgICAgICAgICAgICAgICAiIHN1Y2NlZGVkICIgKyBwKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb25zdHJ1Y3RvcihlKTogIiArIGV4cGVjdGVkVG9TdWNjZWVkICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb25zdHJ1Y3RvcihlKTogIiArIGV4cGVjdGVkVG9TdWNjZWVkICsKICAgICAgICAgICAgICAgICAgICAgICIgZmFpbGVkICAgIiArIHApOwogICAgICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB9CkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdldFVSTFBhdHRlcm46IHN1Y2NlZGVkICIgKyBleHBlY3RlZCArICIgIiArCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArICIgIiArIHMpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXRVUkxQYXR0ZXJuOiBmYWlsZWQgICIgKyBleHBlY3RlZCArICIgIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXRVUkxQYXR0ZXJuOiBmYWlsZWQgICIgKyBleHBlY3RlZCArICIgIiArCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArICIgIiArIHMpOwogICAgICAgICB9CiAgICAgfQpAQCAtODgsOCArODgsOCBAQAogCiAgICAgICAgIGlmIChyZXN1bHQgPT0gaW52ZXJzZSkgewogICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSB0cnVlICYmICghdTEuaW1wbGllcyh1MikgfHwgIXUyLmltcGxpZXModTEpKSkgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXF1YWxzKDwtPik6ICIgKyBleHBlY3RlZCArICIgIiArIAotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICsgIiBmYWlsZWQgICAgIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXF1YWxzKDwtPik6ICIgKyBleHBlY3RlZCArICIgIiArCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKyAiIGZhaWxlZCAgICAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICJcdCIgKyB1MS5pbXBsaWVzKHUyKSArIHUyLmltcGxpZXModTEpKyIgIisKICAgICAgICAgICAgICAgICAgICAgICAgICJcdCIgKyB1MiArICJcdCIgKyB1MSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CkBAIC05NywxMyArOTcsMTMgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVxdWFscygtLT4pOiAiICsgZXhwZWN0ZWQgKyAiICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICsgIiBzdWNjZWRlZCAiICsgdTEgKyAiXHQiICsgdTIpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOwotICAgICAgICAgICAgfSBlbHNlIHsgCi0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlcXVhbHMoLS0+KTogIiArIGV4cGVjdGVkICsgIiAiICsgCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXF1YWxzKC0tPik6ICIgKyBleHBlY3RlZCArICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKyAiIGZhaWxlZCAgICAiICsgdTEgKyAiXHQiICsgdTIpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlcXVhbHMoPC0tKTogIiArIHJlc3VsdCArICIgIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlcXVhbHMoPC0tKTogIiArIHJlc3VsdCArICIgIiArCiAgICAgICAgICAgICAgICAgICAgIGludmVyc2UgKyAiIGZhaWxlZCAgICAiICsgdTIgKyAiXHQiICsgdTEpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KQEAgLTE0OSw3ICsxNDksNyBAQAogCiAgICAgICAgIFVSTFBhdHRlcm5TcGVjIHUyID0gbmV3IFVSTFBhdHRlcm5TcGVjKHMyLnRvU3RyaW5nKCkpOwogICAgICAgICBpbnQgb3RoZXIgPSB1Mi5oYXNoQ29kZSgpOwotICAgICAgICBpZiAocmVzdWx0ID09IGFnYWluICYmIHJlc3VsdCA9PSBvdGhlcikgeyAKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBhZ2FpbiAmJiByZXN1bHQgPT0gb3RoZXIpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaGFzaENvZGU6ICIgKyByZXN1bHQgKyAiICIgKwogICAgICAgICAgICAgICAgICAgICBhZ2FpbiArICIgIiArIG90aGVyICsgIiBzdWNjZWRlZCAiICsgczEgKwogICAgICAgICAgICAgICAgICAgICAiICIgKyB1Mi50b1N0cmluZygpKTsKQEAgLTE3MywxNSArMTczLDE1IEBACiAgICAgICAgIGJvb2xlYW4gaW52ZXJzZSA9IHUyLmltcGxpZXModTEpOwogCiAgICAgICAgIGlmIChyZXN1bHQgIT0gZXhwZWN0ZWQpIHsKLSAgICAgCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImltcGxpZXMoLT4pOiAiICsgZXhwZWN0ZWQgKyAiICIgKyByZXN1bHQgKyAKKyAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImltcGxpZXMoLT4pOiAiICsgZXhwZWN0ZWQgKyAiICIgKyByZXN1bHQgKwogICAgICAgICAgICAgICAgICAgICAiIHN1Y2NlZGVkICIgKyB1MSArICJcdCIgKyB1Mik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKICAgICAgICAgfSBlbHNlIGlmIChpbnZlcnNlICE9IGV4cGVjdGVkSW52ZXJzZSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbXBsaWVzKDwtKTogIiArIGV4cGVjdGVkSW52ZXJzZSArICIgIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbXBsaWVzKDwtKTogIiArIGV4cGVjdGVkSW52ZXJzZSArICIgIiArCiAgICAgICAgICAgICAgICAgICAgIGludmVyc2UgKyAiIGZhaWxlZCAgICAiICsgdTIgKyAiXHQiICsgdTEpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImltcGxpZXMoLT4pOiAiICsgZXhwZWN0ZWQgKyAiICIgKyByZXN1bHQgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW1wbGllcygtPik6ICIgKyBleHBlY3RlZCArICIgIiArIHJlc3VsdCArCiAgICAgICAgICAgICAgICAgICAgICIgZmFpbGVkICAgICIgKyB1MSArICJcdCIgKyB1Mik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKICAgICAgICAgfQpAQCAtMTk0LDcgKzE5NCw3IEBACiAgICAgICAgICAgICAiL2EvYyIsCiAgICAgICAgICAgICAiL2EvYi9jLmpzcCIsCiAgICAgICAgICAgICAiL2EvYy8qIiwKLSAgICAgICAgICAgICIvYS8qIiwgCisgICAgICAgICAgICAiL2EvKiIsCiAgICAgICAgICAgICAiLyoiLAogICAgICAgICAgICAgLyogQ09NTUVOVEVEIE9VVCEgIi8vKiIsKi8KICAgICAgICAgICAgICIqLmpzcCIsCkBAIC0yMjgsMjEgKzIyOCwyMSBAQAogICAgICAgICAgICAgdGVzdF9nZXRVUkxQYXR0ZXJuKHMudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICB0ZXN0X2hhc2hDb2RlKHMudG9TdHJpbmcoKSk7CiAKLSAgICAgICAgICAgIFVSTFBhdHRlcm4gdWkgPSBuZXcgVVJMUGF0dGVybihwQXJyYXlbaV0pOyAKLSAKKyAgICAgICAgICAgIFVSTFBhdHRlcm4gdWkgPSBuZXcgVVJMUGF0dGVybihwQXJyYXlbaV0pOworCiAgICAgICAgICAgICBmb3IgKGludCBqPTA7IGo8cEFycmF5Lmxlbmd0aDsgaisrKSB7CiAKICAgICAgICAgICAgICAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwogCiAgICAgICAgICAgICAgICAgVVJMUGF0dGVybiB1aiA9IG5ldyBVUkxQYXR0ZXJuKHBBcnJheVtqXSk7CiAKLSAgICAgICAgICAgICAgICBpZiAoaj09aSB8fCB1ai5pbXBsaWVzKHVpKSkgeyAKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9jb25zdHJ1Y3RvcihzLnRvU3RyaW5nKCkgKyAiOiIgKyAKKyAgICAgICAgICAgICAgICBpZiAoaj09aSB8fCB1ai5pbXBsaWVzKHVpKSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZXN0X2NvbnN0cnVjdG9yKHMudG9TdHJpbmcoKSArICI6IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFycmF5W2pdLGZhbHNlKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzd2l0Y2gocFR5cGVBcnJheVtpXSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIFVSTFBhdHRlcm4uUFRfRVhBQ1Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZXN0X2NvbnN0cnVjdG9yKHMudG9TdHJpbmcoKSArICI6IiArIAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9jb25zdHJ1Y3RvcihzLnRvU3RyaW5nKCkgKyAiOiIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQXJyYXlbal0sZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgVVJMUGF0dGVybi5QVF9ERUZBVUxUOgpAQCAtMjUxLDE4ICsyNTEsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIFVSTFBhdHRlcm4uUFRfRVhURU5TSU9OOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBUeXBlQXJyYXlbal0gPT0gVVJMUGF0dGVybi5QVF9QUkVGSVgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZXN0X2NvbnN0cnVjdG9yKHMudG9TdHJpbmcoKSArICI6IiArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlc3RfY29uc3RydWN0b3Iocy50b1N0cmluZygpICsgIjoiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBcnJheVtqXSx0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocFR5cGVBcnJheVtqXSA9PSBVUkxQYXR0ZXJuLlBUX0VYQUNUKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBBcnJheVtqXS5lbmRzV2l0aChwQXJyYXlbaV0uc3Vic3RyaW5nKDEpKSkgeyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9jb25zdHJ1Y3RvcihzLnRvU3RyaW5nKCkgKyAiOiIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocEFycmF5W2pdLmVuZHNXaXRoKHBBcnJheVtpXS5zdWJzdHJpbmcoMSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlc3RfY29uc3RydWN0b3Iocy50b1N0cmluZygpICsgIjoiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQXJyYXlbal0sdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9jb25zdHJ1Y3RvcihzLnRvU3RyaW5nKCkgKyAiOiIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9jb25zdHJ1Y3RvcihzLnRvU3RyaW5nKCkgKyAiOiIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBcnJheVtqXSxmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9jb25zdHJ1Y3RvcihzLnRvU3RyaW5nKCkgKyAiOiIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9jb25zdHJ1Y3RvcihzLnRvU3RyaW5nKCkgKyAiOiIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFycmF5W2pdLGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjcxLDE0ICsyNzEsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFR5cGVBcnJheVtqXSA9PSBVUkxQYXR0ZXJuLlBUX1BSRUZJWCkgewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVpLmltcGxpZXModWopKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlc3RfY29uc3RydWN0b3Iocy50b1N0cmluZygpICsgIjoiICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFycmF5W2pdLHRydWUpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9jb25zdHJ1Y3RvcihzLnRvU3RyaW5nKCkgKyAiOiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBcnJheVtqXSx0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZXN0X2NvbnN0cnVjdG9yKHMudG9TdHJpbmcoKSArICI6IiArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZXN0X2NvbnN0cnVjdG9yKHMudG9TdHJpbmcoKSArICI6IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFycmF5W2pdLGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlc3RfY29uc3RydWN0b3Iocy50b1N0cmluZygpICsgIjoiICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9jb25zdHJ1Y3RvcihzLnRvU3RyaW5nKCkgKyAiOiIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFycmF5W2pdLGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9zcmMvVGVzdFdlYlBlcm1zLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3NyYy9UZXN0V2ViUGVybXMuamF2YQppbmRleCA1YTM4M2VmLi5mZWM1ZTY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3NyYy9UZXN0V2ViUGVybXMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3NyYy9UZXN0V2ViUGVybXMuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuKjsKIGltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS5zZWN1cml0eS4qOyAKK2ltcG9ydCBqYXZhLnNlY3VyaXR5Lio7CiBpbXBvcnQgamFrYXJ0YS5zZWN1cml0eS5qYWNjLldlYlJlc291cmNlUGVybWlzc2lvbjsKIGltcG9ydCBqYWthcnRhLnNlY3VyaXR5LmphY2MuV2ViVXNlckRhdGFQZXJtaXNzaW9uOwogaW1wb3J0IGpha2FydGEuc2VjdXJpdHkuamFjYy5XZWJSb2xlUmVmUGVybWlzc2lvbjsKQEAgLTM1LDcgKzM1LDcgQEAKIGltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CiAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKLSAKKwogcHVibGljIGNsYXNzIFRlc3RXZWJQZXJtcyB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwpAQCAtNTQsMTQgKzU0LDE0IEBACiAKICAgICAgICAgUGVybWlzc2lvbiBwMiA9IHAxOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgRmlsZU91dHB1dFN0cmVhbSBmb3V0ID0gbmV3IAorICAgICAgICAgICAgRmlsZU91dHB1dFN0cmVhbSBmb3V0ID0gbmV3CiAgICAgICAgICAgICAgICAgRmlsZU91dHB1dFN0cmVhbSgic2VyaWFsLXRlc3QtZmlsZS50bXAiKTsKICAgICAgICAgICAgIE9iamVjdE91dHB1dFN0cmVhbSBzb3V0ID0gbmV3IE9iamVjdE91dHB1dFN0cmVhbShmb3V0KTsKICAgICAgICAgICAgIHNvdXQud3JpdGVPYmplY3QocDEpOwogICAgICAgICAgICAgc291dC5mbHVzaCgpOwogICAgICAgICAgICAgc291dC5jbG9zZSgpOwogICAgICAgICAgICAgZm91dC5jbG9zZSgpOwotICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsgCisgICAgICAgIH0gY2F0Y2goIFRocm93YWJsZSB0ICkgewogICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGRlYnVnKCAiLS0gU2VyaWFsaXphdGlvbiBUZXN0IEZhaWxlZCh3cml0ZSktIiArIHAxLmdldE5hbWUoKSArICIsIiArIHAxLmdldEFjdGlvbnMoKSkKIDsKQEAgLTcyLDE3ICs3MiwxNyBAQAogICAgICAgICAgICAgT2JqZWN0SW5wdXRTdHJlYW0gc2luID0gbmV3IE9iamVjdElucHV0U3RyZWFtKGZpbik7CiAgICAgICAgICAgICBwMiA9IChQZXJtaXNzaW9uKSBzaW4ucmVhZE9iamVjdCgpOwogICAgICAgICAgICAgc2luLmNsb3NlKCk7Ci0gICAgICAgICAgICBmaW4uY2xvc2UoKTsgCi0gICAgICAgIH0gY2F0Y2goIFRocm93YWJsZSB0ICkgeyAKKyAgICAgICAgICAgIGZpbi5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsKICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBkZWJ1ZyggIi0tIFNlcmlhbGl6YXRpb24gVGVzdCBGYWlsZWQocmVhZCktIiArIHAxLmdldE5hbWUoKSArICIsIiArIHAxLmdldEFjdGlvbnMoKSk7CiAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgPT0gdHJ1ZSkgewotICAgICAgICAgICAgaWYgKHAyLmVxdWFscyhwMSkpIHsgCisgICAgICAgICAgICBpZiAocDIuZXF1YWxzKHAxKSkgewogICAgICAgICAgICAgICAgIGRlYnVnKCAiLS0gU2VyaWFsaXphdGlvbiBUZXN0IFN1Y2NlZWRlZCAtLS0tLS0tLS0tLSIgKyBwMi5nZXROYW1lKCkgKyAiLCIgKyBwMi5nZXRBY3Rpb25zKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsgCisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGRlYnVnKCAiLS0gU2VyaWFsaXphdGlvbiBUZXN0IEZhaWxlZC0iICsgcDEuZ2V0TmFtZSgpICsgIiwiICsgcDEuZ2V0QWN0aW9ucygpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKQEAgLTEyNCw3ICsxMjQsNyBAQAogCiAgICAgICAgICAgICBpZiAoZXhwZWN0ZWRUb1N1Y2NlZWQpIHsKIAotICAgICAgICAgICAgICAgIHAyID0gbmV3IFdlYlJlc291cmNlUGVybWlzc2lvbihwMS5nZXROYW1lKCkscDEuZ2V0QWN0aW9ucygpKTsgCisgICAgICAgICAgICAgICAgcDIgPSBuZXcgV2ViUmVzb3VyY2VQZXJtaXNzaW9uKHAxLmdldE5hbWUoKSxwMS5nZXRBY3Rpb25zKCkpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFwMS5lcXVhbHMocDIpKSB7CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwpAQCAtMTQyLDcgKzE0Miw3IEBACiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7IAorICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsKIAogICAgICAgICAgICAgaWYgKGV4cGVjdGVkVG9TdWNjZWVkKSB7CiAgICAgICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTE2NSw3ICsxNjUsNyBAQAogICAgICAgICAgICAgZGVidWcoICItLSBDb25zdHJ1Y3QgVGVzdCAtLSIpOwogICAgICAgICAgICAgcDEgPSBuZXcgV2ViUmVzb3VyY2VQZXJtaXNzaW9uKFVSTFBhdHRlcm4sbWV0aG9kcyk7CiAgICAgICAgICAgICBpZiAoZXhwZWN0ZWRUb1N1Y2NlZWQpIHsKLSAgICAgICAgICAgICAgICBwMiA9IG5ldyBXZWJSZXNvdXJjZVBlcm1pc3Npb24ocDEuZ2V0TmFtZSgpLHAxLmdldEFjdGlvbnMoKSk7IAorICAgICAgICAgICAgICAgIHAyID0gbmV3IFdlYlJlc291cmNlUGVybWlzc2lvbihwMS5nZXROYW1lKCkscDEuZ2V0QWN0aW9ucygpKTsKICAgICAgICAgICAgICAgICBpZiAoIXAxLmVxdWFscyhwMikpIHsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJwICE9IHBcblx0IiArIHAxICsgIlxuXHQiICsgcDIpOwpAQCAtMTc4LDcgKzE3OCw3IEBACiAgICAgICAgICAgICAgICAgZGVidWcoInVuZXhwZWN0ZWQgc3VjY2Vzc1x0IiArIHAxKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7IAorICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsKICAgICAgICAgICAgIGlmIChleHBlY3RlZFRvU3VjY2VlZCkgewogICAgICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB9CkBAIC0yMDMsNyArMjAzLDcgQEAKIAogICAgICAgICAgICAgaWYgKGV4cGVjdGVkVG9TdWNjZWVkKSB7CiAKLSAgICAgICAgICAgICAgICBwMiA9IG5ldyBXZWJSZXNvdXJjZVBlcm1pc3Npb24ocDEuZ2V0TmFtZSgpLHAxLmdldEFjdGlvbnMoKSk7IAorICAgICAgICAgICAgICAgIHAyID0gbmV3IFdlYlJlc291cmNlUGVybWlzc2lvbihwMS5nZXROYW1lKCkscDEuZ2V0QWN0aW9ucygpKTsKIAogICAgICAgICAgICAgICAgIGlmICghcDEuZXF1YWxzKHAyKSkgewogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKQEAgLTIyMSw3ICsyMjEsNyBAQAogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgfQogCi0gICAgICAgIH0gY2F0Y2goIFRocm93YWJsZSB0ICkgeyAKKyAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7CiAKICAgICAgICAgICAgIGlmIChleHBlY3RlZFRvU3VjY2VlZCkgewogICAgICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0yNTAsNyArMjUwLDcgQEAKIAogICAgICAgICAgICAgaWYgKGV4cGVjdGVkVG9TdWNjZWVkKSB7CiAKLSAgICAgICAgICAgICAgICBwMiA9IG5ldyBXZWJSb2xlUmVmUGVybWlzc2lvbihwMS5nZXROYW1lKCkscDEuZ2V0QWN0aW9ucygpKTsgCisgICAgICAgICAgICAgICAgcDIgPSBuZXcgV2ViUm9sZVJlZlBlcm1pc3Npb24ocDEuZ2V0TmFtZSgpLHAxLmdldEFjdGlvbnMoKSk7CiAKICAgICAgICAgICAgICAgICBpZiAoIXAxLmVxdWFscyhwMikpIHsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CkBAIC0yNjgsNyArMjY4LDcgQEAKICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsgCisgICAgICAgIH0gY2F0Y2goIFRocm93YWJsZSB0ICkgewogCiAgICAgICAgICAgICBpZiAoZXhwZWN0ZWRUb1N1Y2NlZWQpIHsKICAgICAgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMjk1LDcgKzI5NSw3IEBACiAKICAgICAgICAgICAgIGlmIChleHBlY3RlZFRvU3VjY2VlZCkgewogCi0gICAgICAgICAgICAgICAgcDIgPSBuZXcgV2ViVXNlckRhdGFQZXJtaXNzaW9uKHAxLmdldE5hbWUoKSxwMS5nZXRBY3Rpb25zKCkpOyAKKyAgICAgICAgICAgICAgICBwMiA9IG5ldyBXZWJVc2VyRGF0YVBlcm1pc3Npb24ocDEuZ2V0TmFtZSgpLHAxLmdldEFjdGlvbnMoKSk7CiAKICAgICAgICAgICAgICAgICBpZiAoIXAxLmVxdWFscyhwMikpIHsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CkBAIC0zMTMsNyArMzEzLDcgQEAKICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsgCisgICAgICAgIH0gY2F0Y2goIFRocm93YWJsZSB0ICkgewogCiAgICAgICAgICAgICBpZiAoZXhwZWN0ZWRUb1N1Y2NlZWQpIHsKICAgICAgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMzM4LDcgKzMzOCw3IEBACiAgICAgICAgICAgICAgICAgKFVSTFBhdHRlcm4sbWFrZVdVREFjdGlvbnMobWV0aG9kcyx0cmFuc3BvcnRUeXBlKSk7CiAKICAgICAgICAgICAgIGlmIChleHBlY3RlZFRvU3VjY2VlZCkgewotICAgICAgICAgICAgICAgIHAyID0gbmV3IFdlYlVzZXJEYXRhUGVybWlzc2lvbihwMS5nZXROYW1lKCkscDEuZ2V0QWN0aW9ucygpKTsgCisgICAgICAgICAgICAgICAgcDIgPSBuZXcgV2ViVXNlckRhdGFQZXJtaXNzaW9uKHAxLmdldE5hbWUoKSxwMS5nZXRBY3Rpb25zKCkpOwogICAgICAgICAgICAgICAgIGlmICghcDEuZXF1YWxzKHAyKSkgewogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoInAgIT0gcFxuXHQiICsgcDEgKyAiXG5cdCIgKyBwMik7CkBAIC0zNTEsNyArMzUxLDcgQEAKICAgICAgICAgICAgICAgICBkZWJ1ZygidW5leHBlY3RlZCBzdWNjZXNzXHQiICsgcDEpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsgCisgICAgICAgIH0gY2F0Y2goIFRocm93YWJsZSB0ICkgewogICAgICAgICAgICAgaWYgKGV4cGVjdGVkVG9TdWNjZWVkKSB7CiAgICAgICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KQEAgLTM2Niw3ICszNjYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZG9QZXJtaXNzaW9uSW1wbGllcyAoYm9vbGVhbiBleHBlY3RlZFJlc3VsdCwKLSAgICAgICAgICAgIFBlcm1pc3Npb24gdGhpc1AsIFBlcm1pc3Npb24gcCkgeyAKKyAgICAgICAgICAgIFBlcm1pc3Npb24gdGhpc1AsIFBlcm1pc3Npb24gcCkgewogICAgICAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7CiAgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9ICJkb1Blcm1pc3Npb25JbXBsaWVzOiIgKwogICAgICAgICAgICAgZXhwZWN0ZWRSZXN1bHQgKyAiLSIgKyB0aGlzUCArICItIiArIHA7CkBAIC0zNzcsMTggKzM3NywxOCBAQAogICAgICAgICAgICAgaWYgKHRoaXNQLmltcGxpZXMocCkgIT0gZXhwZWN0ZWRSZXN1bHQpIHsKICAgICAgICAgICAgICAgICBkZWJ1ZygKICAgICAgICAgICAgICAgICAgICAgKGV4cGVjdGVkUmVzdWx0ID8gInVuZXhwZWN0ZWQgZmFpbHVyZToiIDoidW5leHBlY3RlZCBzdWNjZXNzOiIpCi0gICAgICAgICAgICAgICAgICAgICArIHByaW50UChwKSArIChleHBlY3RlZFJlc3VsdCA/IiBub3QgaW1wbGllZCBieToiOiIgaW1wbGllZCBieToiKSArIAorICAgICAgICAgICAgICAgICAgICAgKyBwcmludFAocCkgKyAoZXhwZWN0ZWRSZXN1bHQgPyIgbm90IGltcGxpZWQgYnk6IjoiIGltcGxpZWQgYnk6IikgKwogICAgICAgICAgICAgICAgICAgICAgcHJpbnRQKHRoaXNQKSk7CiAgICAgICAgICAgICAgICAgZGVidWcoICItLSBQZXJtaXNzaW9uIGltcGxpZXMgVGVzdCBmYWlsZWQobm90IGltcGxpZWQpLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhwcmludFAocCkgKyAKLSAgICAgICAgICAgICAgICAgICAgKGV4cGVjdGVkUmVzdWx0ID8gIiBpbXBsaWVkIGJ5OiI6IiBub3QgaW1wbGllZCBieToiKSArIAorICAgICAgICAgICAgICAgIGRlYnVnKHByaW50UChwKSArCisgICAgICAgICAgICAgICAgICAgIChleHBlY3RlZFJlc3VsdCA/ICIgaW1wbGllZCBieToiOiIgbm90IGltcGxpZWQgYnk6IikgKwogICAgICAgICAgICAgICAgICAgICBwcmludFAodGhpc1ApKTsKICAgICAgICAgICAgICAgICBkZWJ1ZyggIi0tIFBlcm1pc3Npb24gaW1wbGllcyBUZXN0IFN1Y2NlZWRlZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7IAorICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsKICAgICAgICAgICAgIGRlYnVnKCJ1bmV4cGVjdGVkIGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGRlYnVnKCAiLS0gUGVybWlzc2lvbiBpbXBsaWVzIFRlc3QgZmFpbGVkKGV4Y2VwdGlvbiktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKQEAgLTQxMiwyNSArNDEyLDI1IEBACiAgICAgICAgICAgICAgICAgZGVidWcoICItLSBIdHRwTWV0aG9kU3BlYyBpbXBsaWVzIFRlc3QgZmFpbGVkKG5vdCBpbXBsaWVkKS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGVidWcodGhhdFMgKyAKKyAgICAgICAgICAgICAgICBkZWJ1Zyh0aGF0UyArCiAgICAgICAgICAgICAgICAgICAgIChleHBlY3RlZFJlc3VsdCA/ICIgaW1wbGllZCBieToiOiIgbm90IGltcGxpZWQgYnk6IikgKyB0aGlzUyk7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCF0aGlzUy5pbXBsaWVzKHRoaXNTKSkgewotICAgICAgICAgICAgICAgIGRlYnVnKCAidW5leHBlY3RlZCBmYWlsdXJlOiIgCisgICAgICAgICAgICAgICAgZGVidWcoICJ1bmV4cGVjdGVkIGZhaWx1cmU6IgogICAgICAgICAgICAgICAgICAgICArIHRoaXNTICsgIiBub3QgaW1wbGllZCBieTogIiArICB0aGlzUyk7CiAgICAgICAgICAgICAgICAgZGVidWcoICItLSBIdHRwTWV0aG9kU3BlYyBpbXBsaWVzIFRlc3QgZmFpbGVkKG5vdCBpbXBsaWVkKS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCF0aGF0Uy5pbXBsaWVzKHRoYXRTKSkgewotICAgICAgICAgICAgICAgIGRlYnVnKCAidW5leHBlY3RlZCBmYWlsdXJlOiIgCisgICAgICAgICAgICAgICAgZGVidWcoICJ1bmV4cGVjdGVkIGZhaWx1cmU6IgogICAgICAgICAgICAgICAgICAgICArIHRoYXRTICsgIiBub3QgaW1wbGllZCBieTogIiArIHRoYXRTKTsKICAgICAgICAgICAgICAgICBkZWJ1ZyggIi0tIEh0dHBNZXRob2RTcGVjIGltcGxpZXMgVGVzdCBmYWlsZWQobm90IGltcGxpZWQpLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsgCisgICAgICAgIH0gY2F0Y2goIFRocm93YWJsZSB0ICkgewogICAgICAgICAgICAgZGVidWcoInVuZXhwZWN0ZWQgZXhjZXB0aW9uIik7CiAgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZGVidWcoICItLSBIdHRwTWV0aG9kU3BlYyBpbXBsaWVzIFRlc3QgZmFpbGVkKGV4Y2VwdGlvbiktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKQEAgLTQ0MSwxMSArNDQxLDExIEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oIFN0cmluZ1tdIGFyZ3MgKSB7CiAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKIAotICAgICAgICBTdHJpbmcgdEFycmF5W10gPSB7IAotICAgICAgICAgICAgbnVsbCwgCi0gICAgICAgICAgICAiOk5PTkUiLCAKLSAgICAgICAgICAgICI6SU5URUdSQUwiLCAKLSAgICAgICAgICAgICI6Q09ORklERU5USUFMIiAKKyAgICAgICAgU3RyaW5nIHRBcnJheVtdID0geworICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICI6Tk9ORSIsCisgICAgICAgICAgICAiOklOVEVHUkFMIiwKKyAgICAgICAgICAgICI6Q09ORklERU5USUFMIgogICAgICAgICB9OwogCiAgICAgICAgIFN0cmluZyBtQXJyYXlbXSA9IHsKQEAgLTQ5MSwxMyArNDkxLDEzIEBACiAgICAgICAgICAgICAiL2EvYyIsCiAgICAgICAgICAgICAiL2EvYi9jLmpzcCIsCiAgICAgICAgICAgICAiL2EvYy8qOi9hL2MiLAotICAgICAgICAgICAgIi9hLyo6L2EvYzovYS9iL2MuanNwIiwgCisgICAgICAgICAgICAiL2EvKjovYS9jOi9hL2IvYy5qc3AiLAogICAgICAgICAgICAgIi8qOi9hL2M6L2EvYi9jLmpzcDovYS9jLyo6L2EvKiIsCiAgICAgICAgICAgICAiKi5qc3A6L2EvYy8qOi9hLyo6L2EvYi9jLmpzcCIsCiAgICAgICAgICAgICAiKi5hc3A6L2EvYy8qOi9hLyoiLAogICAgICAgICAgICAgIi86L2EvYzovYS9iL2MuanNwOi9hL2MvKjovYS8qOiouanNwOiouYXNwIgogICAgICAgICB9OwotIAorCiAgICAgICAgIGZvciAoaW50IGk9MDsgaTxtc0FycmF5Lmxlbmd0aDsgaSsrKSB7CiAKICAgICAgICAgICAgIEh0dHBNZXRob2RTcGVjIHMgPSBIdHRwTWV0aG9kU3BlYy5nZXRTcGVjKG1zQXJyYXlbaV0pOwpAQCAtNTA2LDggKzUwNiw4IEBACiAKICAgICAgICAgICAgIFN0cmluZyBhY3Rpb25zID0gcy5nZXRBY3Rpb25zKCk7CiAKLSAgICAgICAgICAgIGRlYnVnKCJpbnB1dCBhY3Rpb25zOiAiICsgbXNBcnJheVtpXSArIAotICAgICAgICAgICAgICAgICAiIGhhc2hDb2RlOiAiICsgaENvZGUgKyAKKyAgICAgICAgICAgIGRlYnVnKCJpbnB1dCBhY3Rpb25zOiAiICsgbXNBcnJheVtpXSArCisgICAgICAgICAgICAgICAgICIgaGFzaENvZGU6ICIgKyBoQ29kZSArCiAgICAgICAgICAgICAgICAgICIgYWN0aW9uczoiICsgYWN0aW9ucyk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY21yOC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY21yOC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA5ZDE2ZDYuLjI0MWFmOGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NtcjgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjbXI4L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImphY2NtcjgiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjbXI4L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NtcjgvYnVpbGQueG1sCmluZGV4IGY2MTVhMGMuLjVhZDA4OGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NtcjgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NtcjgvYnVpbGQueG1sCkBAIC0yNSwxNCArMjUsMTQgQEAKIF0+CiAKIDxwcm9qZWN0IG5hbWU9ImphY2NtcjgiIGRlZmF1bHQ9InVzYWdlIiBiYXNlZGlyPSIuIj4KLSAgCisKICAgJmNvbW1vblNldHVwOwogICAmY29tbW9uQnVpbGQ7CiAgICZ0ZXN0cHJvcGVydGllczsKICAgJmNvbW1vblNlY3VyaXR5OwotICAKKwogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sIHNldHVwLCBidWlsZCwgZGVwbG95LCBydW4sIHVuZGVwbG95LCB1bnNldHVwIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS11c2VyLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9ImphY2N1c2VyIi8+CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICA8YXJnIHZhbHVlPSJvdGhlcnVzZXIiLz4KICAgICA8L2phdmE+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9ImphY2N1c2VyIi8+CkBAIC02NiwxNCArNjYsMTQgQEAKICAgICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0ib3RoZXJ1c2VyIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9IndlYiIvPgpAQCAtODYsMTUgKzg2LDE1IEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CiAgICAgPC9hbnRjYWxsPgotICAgIAorCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi9IZWxsbyoqLmNsYXNzIi8+CiAgICAgPC9hbnRjYWxsPgogCi0gICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gCi0gICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICAgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4gCisgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KQEAgLTEwMywxMyArMTAzLDEzIEBACiAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9nbGFzc2Zpc2gtYXBwbGljYXRpb24ueG1sIi8+CiAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgPC9qYXI+ICAgCisgICAgPC9qYXI+CiAKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICA8L3RhcmdldD4KQEAgLTExNyw3ICsxMTcsNyBAQAogICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY21yOC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjbXI4L2NsaWVudC9DbGllbnQuamF2YQppbmRleCA0YzJjMjU3Li4zNWIxNzU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjbXI4L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjbXI4L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjQsNDgzICsyNCw0ODMgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0JcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RTdWl0ZSA9ICJTZWN1cml0eTo6SkFDQ01SOCI7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNvbnRleHRQYXRoID0gIi9qYWNjbXI4IjsKLQkKLQlwcml2YXRlIFN0cmluZyBob3N0OwotCXByaXZhdGUgU3RyaW5nIHBvcnQ7Ci0JcHJpdmF0ZSBTdHJpbmcgdXNlcm5hbWU7Ci0JcHJpdmF0ZSBTdHJpbmcgcGFzc3dvcmQ7Ci0JcHJpdmF0ZSBTdHJpbmcgcm9sZW5hbWU7Ci0JcHJpdmF0ZSBTdHJpbmcgb3RoZXJ1c2VyOwotCXByaXZhdGUgU3RyaW5nIGVqYm1vZGUgPSAiTm9uZSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RTdWl0ZSA9ICJTZWN1cml0eTo6SkFDQ01SOCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNvbnRleHRQYXRoID0gIi9qYWNjbXI4IjsKIAotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkJc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0U3VpdGUpOwotCQlDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKLQkJY2xpZW50LmRvVGVzdHMoKTsKLQkJc3RhdC5wcmludFN1bW1hcnkoKTsKLQl9CisgICAgcHJpdmF0ZSBTdHJpbmcgaG9zdDsKKyAgICBwcml2YXRlIFN0cmluZyBwb3J0OworICAgIHByaXZhdGUgU3RyaW5nIHVzZXJuYW1lOworICAgIHByaXZhdGUgU3RyaW5nIHBhc3N3b3JkOworICAgIHByaXZhdGUgU3RyaW5nIHJvbGVuYW1lOworICAgIHByaXZhdGUgU3RyaW5nIG90aGVydXNlcjsKKyAgICBwcml2YXRlIFN0cmluZyBlamJtb2RlID0gIk5vbmUiOwogCi0JcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7Ci0JCWhvc3QgPSBhcmdzWzBdOwotCQlwb3J0ID0gYXJnc1sxXTsKLQkJdXNlcm5hbWUgPSBhcmdzWzJdOwotCQlwYXNzd29yZCA9IGFyZ3NbM107Ci0JCXJvbGVuYW1lID0gYXJnc1s0XTsKLQkJb3RoZXJ1c2VyID0gYXJnc1s1XTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgICAgICBIb3N0OiAiICsgaG9zdCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgUG9ydDogIiArIHBvcnQpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgVXNlcm5hbWU6ICIgKyB1c2VybmFtZSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiICBSb2xlbmFtZTogIiArIHJvbGVuYW1lKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJPdGhlciBVc2VyOiAiICsgb3RoZXJ1c2VyKTsKLQl9CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RTdWl0ZSk7CisgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOworICAgICAgICBjbGllbnQuZG9UZXN0cygpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOworICAgIH0KIAotCXB1YmxpYyB2b2lkIGRvVGVzdHMoKSB7Ci0JCS8vIFVzZSB0aGUgc3RhdGVmdWwgRUpCIGluc2lkZSB0aGUgc2VydmxldAotCQkvLyBUaGUgc3RhdGVmdWwgRUpCIHVzZXMgYW5ub3RhdGlvbnMgdG8gcHJvdGVjdCB0aGUgRUpCCi0JCWVqYm1vZGUgPSAic3RhdGVmdWwiOwotCQl0ZXN0QW55QXV0aFVzZXIoKTsKLQkJdGVzdEFueUF1dGhVc2VyT3RoZXIoKTsKLQkJdGVzdEFueUF1dGhVc2VyTm9uZSgpOwotCQl0ZXN0RGVueVVuY292ZXJlZCgpOwotCQl0ZXN0RGVueVVuY292ZXJlZE90aGVyKCk7Ci0JCXRlc3REZW55VW5jb3ZlcmVkTm9uZSgpOwotCQl0ZXN0U3RhcigpOwotCQl0ZXN0U3Rhck90aGVyKCk7Ci0JCXRlc3RTdGFyTm9uZSgpOwotCQl0ZXN0U2VydmxldCgpOwotCQl0ZXN0U2VydmxldE90aGVyKCk7Ci0JCXRlc3RTZXJ2bGV0Tm9uZSgpOwotCQl0ZXN0QXV0aFVzZXIoKTsKLQkJdGVzdEF1dGhVc2VyT3RoZXIoKTsKLQkJdGVzdEF1dGhVc2VyTm9uZSgpOworICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgeworICAgICAgICBob3N0ID0gYXJnc1swXTsKKyAgICAgICAgcG9ydCA9IGFyZ3NbMV07CisgICAgICAgIHVzZXJuYW1lID0gYXJnc1syXTsKKyAgICAgICAgcGFzc3dvcmQgPSBhcmdzWzNdOworICAgICAgICByb2xlbmFtZSA9IGFyZ3NbNF07CisgICAgICAgIG90aGVydXNlciA9IGFyZ3NbNV07CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgSG9zdDogIiArIGhvc3QpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgIFBvcnQ6ICIgKyBwb3J0KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIFVzZXJuYW1lOiAiICsgdXNlcm5hbWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgUm9sZW5hbWU6ICIgKyByb2xlbmFtZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT3RoZXIgVXNlcjogIiArIG90aGVydXNlcik7CisgICAgfQogCi0JCS8vIFVzZSB0aGUgc3RhdGVsZXNzIEVKQiBpbnNpZGUgdGhlIHNlcnZsZXQKLQkJLy8gVGhlIHN0YXRlbGVzcyBFSkIgdXNlcyB0aGUgZGVwbG95bWVudCBkZXNjcmlwdG9yIHRvIHByb3RlY3QgdGhlIEVKQgotCQkvLyBPbmx5IHJlcGVhdCB0ZXN0cyB0aGF0IGFjdHVhbGx5IGNhbiBpbnZva2UgdGhlIHNlcnZsZXQKLQkJZWpibW9kZSA9ICJzdGF0ZWxlc3MiOwotCQl0ZXN0QW55QXV0aFVzZXIoKTsKLQkJdGVzdEFueUF1dGhVc2VyT3RoZXIoKTsKLQkJdGVzdFN0YXIoKTsKLQkJdGVzdEF1dGhVc2VyKCk7Ci0JCXRlc3RTZXJ2bGV0KCk7Ci0JCXRlc3RTZXJ2bGV0T3RoZXIoKTsKLQkJdGVzdFNlcnZsZXROb25lKCk7Ci0JfQorICAgIHB1YmxpYyB2b2lkIGRvVGVzdHMoKSB7CisgICAgICAgIC8vIFVzZSB0aGUgc3RhdGVmdWwgRUpCIGluc2lkZSB0aGUgc2VydmxldAorICAgICAgICAvLyBUaGUgc3RhdGVmdWwgRUpCIHVzZXMgYW5ub3RhdGlvbnMgdG8gcHJvdGVjdCB0aGUgRUpCCisgICAgICAgIGVqYm1vZGUgPSAic3RhdGVmdWwiOworICAgICAgICB0ZXN0QW55QXV0aFVzZXIoKTsKKyAgICAgICAgdGVzdEFueUF1dGhVc2VyT3RoZXIoKTsKKyAgICAgICAgdGVzdEFueUF1dGhVc2VyTm9uZSgpOworICAgICAgICB0ZXN0RGVueVVuY292ZXJlZCgpOworICAgICAgICB0ZXN0RGVueVVuY292ZXJlZE90aGVyKCk7CisgICAgICAgIHRlc3REZW55VW5jb3ZlcmVkTm9uZSgpOworICAgICAgICB0ZXN0U3RhcigpOworICAgICAgICB0ZXN0U3Rhck90aGVyKCk7CisgICAgICAgIHRlc3RTdGFyTm9uZSgpOworICAgICAgICB0ZXN0U2VydmxldCgpOworICAgICAgICB0ZXN0U2VydmxldE90aGVyKCk7CisgICAgICAgIHRlc3RTZXJ2bGV0Tm9uZSgpOworICAgICAgICB0ZXN0QXV0aFVzZXIoKTsKKyAgICAgICAgdGVzdEF1dGhVc2VyT3RoZXIoKTsKKyAgICAgICAgdGVzdEF1dGhVc2VyTm9uZSgpOwogCi0JcHVibGljIHZvaWQgdGVzdEFueUF1dGhVc2VyKCkgewotCQlTdHJpbmcgc2VydmxldCA9ICIvYW55YXV0aHVzZXIiOwotCQlTdHJpbmcgZGVzY3JpcHRpb24gPSBzZXJ2bGV0KyItIit1c2VybmFtZSsiLSIrZWpibW9kZTsKLQkJU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCAyMDAsIHVzZXJuYW1lLCBlamJtb2RlLCBvdXRwdXQpOwotCQlpZiAoIXN1Y2Nlc3MpIHsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwotCQkJcmV0dXJuOwotCQl9CisgICAgICAgIC8vIFVzZSB0aGUgc3RhdGVsZXNzIEVKQiBpbnNpZGUgdGhlIHNlcnZsZXQKKyAgICAgICAgLy8gVGhlIHN0YXRlbGVzcyBFSkIgdXNlcyB0aGUgZGVwbG95bWVudCBkZXNjcmlwdG9yIHRvIHByb3RlY3QgdGhlIEVKQgorICAgICAgICAvLyBPbmx5IHJlcGVhdCB0ZXN0cyB0aGF0IGFjdHVhbGx5IGNhbiBpbnZva2UgdGhlIHNlcnZsZXQKKyAgICAgICAgZWpibW9kZSA9ICJzdGF0ZWxlc3MiOworICAgICAgICB0ZXN0QW55QXV0aFVzZXIoKTsKKyAgICAgICAgdGVzdEFueUF1dGhVc2VyT3RoZXIoKTsKKyAgICAgICAgdGVzdFN0YXIoKTsKKyAgICAgICAgdGVzdEF1dGhVc2VyKCk7CisgICAgICAgIHRlc3RTZXJ2bGV0KCk7CisgICAgICAgIHRlc3RTZXJ2bGV0T3RoZXIoKTsKKyAgICAgICAgdGVzdFNlcnZsZXROb25lKCk7CisgICAgfQogCi0JCS8vIENoZWNrIHJlc3VsdHMgaW4gb3V0cHV0Ci0JCXN1Y2Nlc3MgPSBjaGVja1Jlc3VsdHMob3V0cHV0LHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlKTsKLQkJaWYgKCFzdWNjZXNzKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluY29ycmVjdCByZXN1bHRzOiIgKyBkZXNjcmlwdGlvbik7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKLQkJCXJldHVybjsKLQkJfQorICAgIHB1YmxpYyB2b2lkIHRlc3RBbnlBdXRoVXNlcigpIHsKKyAgICAgICAgU3RyaW5nIHNlcnZsZXQgPSAiL2FueWF1dGh1c2VyIjsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gc2VydmxldCsiLSIrdXNlcm5hbWUrIi0iK2VqYm1vZGU7CisgICAgICAgIFN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgMjAwLCB1c2VybmFtZSwgZWpibW9kZSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0JCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOwotCX0KKyAgICAgICAgLy8gQ2hlY2sgcmVzdWx0cyBpbiBvdXRwdXQKKyAgICAgICAgc3VjY2VzcyA9IGNoZWNrUmVzdWx0cyhvdXRwdXQsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5jb3JyZWN0IHJlc3VsdHM6IiArIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLQlwdWJsaWMgdm9pZCB0ZXN0QW55QXV0aFVzZXJPdGhlcigpIHsKLQkJU3RyaW5nIHNlcnZsZXQgPSAiL2FueWF1dGh1c2VyIjsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uID0gc2VydmxldCsiLSIrb3RoZXJ1c2VyKyItIitlamJtb2RlOwotCQlTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDIwMCwgb3RoZXJ1c2VyLCBlamJtb2RlLCBvdXRwdXQpOwotCQlpZiAoIXN1Y2Nlc3MpIHsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwotCQkJcmV0dXJuOwotCQl9CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOworICAgIH0KIAotCQkvLyBDaGVjayByZXN1bHRzIGluIG91dHB1dAotCQlzdWNjZXNzID0gY2hlY2tSZXN1bHRzKG91dHB1dCxmYWxzZSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSk7Ci0JCWlmICghc3VjY2VzcykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJJbmNvcnJlY3QgcmVzdWx0czoiICsgZGVzY3JpcHRpb24pOwotCQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7Ci0JCQlyZXR1cm47Ci0JCX0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0QW55QXV0aFVzZXJPdGhlcigpIHsKKyAgICAgICAgU3RyaW5nIHNlcnZsZXQgPSAiL2FueWF1dGh1c2VyIjsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gc2VydmxldCsiLSIrb3RoZXJ1c2VyKyItIitlamJtb2RlOworICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDIwMCwgb3RoZXJ1c2VyLCBlamJtb2RlLCBvdXRwdXQpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7Ci0JfQorICAgICAgICAvLyBDaGVjayByZXN1bHRzIGluIG91dHB1dAorICAgICAgICBzdWNjZXNzID0gY2hlY2tSZXN1bHRzKG91dHB1dCxmYWxzZSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSk7CisgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmNvcnJlY3QgcmVzdWx0czoiICsgZGVzY3JpcHRpb24pOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotCXB1YmxpYyB2b2lkIHRlc3RBbnlBdXRoVXNlck5vbmUoKSB7Ci0JCVN0cmluZyBzZXJ2bGV0ID0gIi9hbnlhdXRodXNlciI7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0tIitlamJtb2RlOwotCQlTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDQwMSwgbnVsbCwgZWpibW9kZSwgb3V0cHV0KTsKLQkJaWYgKCFzdWNjZXNzKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKLQkJCXJldHVybjsKLQkJfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKKyAgICB9CiAKLQkJLy8gTm8gcmVzdWx0cyB0byBjaGVjayEKLQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7Ci0JfQorICAgIHB1YmxpYyB2b2lkIHRlc3RBbnlBdXRoVXNlck5vbmUoKSB7CisgICAgICAgIFN0cmluZyBzZXJ2bGV0ID0gIi9hbnlhdXRodXNlciI7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0tIitlamJtb2RlOworICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDQwMSwgbnVsbCwgZWpibW9kZSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0JcHVibGljIHZvaWQgdGVzdEF1dGhVc2VyKCkgewotCQlTdHJpbmcgc2VydmxldCA9ICIvYXV0aHVzZXIiOwotCQlTdHJpbmcgZGVzY3JpcHRpb24gPSBzZXJ2bGV0KyItIit1c2VybmFtZSsiLSIrZWpibW9kZTsKLQkJU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCAyMDAsIHVzZXJuYW1lLCBlamJtb2RlLCBvdXRwdXQpOwotCQlpZiAoIXN1Y2Nlc3MpIHsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwotCQkJcmV0dXJuOwotCQl9CisgICAgICAgIC8vIE5vIHJlc3VsdHMgdG8gY2hlY2shCisgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOworICAgIH0KIAotCQkvLyBDaGVjayByZXN1bHRzIGluIG91dHB1dAotCQlzdWNjZXNzID0gY2hlY2tSZXN1bHRzKG91dHB1dCx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSk7Ci0JCWlmICghc3VjY2VzcykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJJbmNvcnJlY3QgcmVzdWx0czoiICsgZGVzY3JpcHRpb24pOwotCQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7Ci0JCQlyZXR1cm47Ci0JCX0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0QXV0aFVzZXIoKSB7CisgICAgICAgIFN0cmluZyBzZXJ2bGV0ID0gIi9hdXRodXNlciI7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0iK3VzZXJuYW1lKyItIitlamJtb2RlOworICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDIwMCwgdXNlcm5hbWUsIGVqYm1vZGUsIG91dHB1dCk7CisgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKLQl9CisgICAgICAgIC8vIENoZWNrIHJlc3VsdHMgaW4gb3V0cHV0CisgICAgICAgIHN1Y2Nlc3MgPSBjaGVja1Jlc3VsdHMob3V0cHV0LHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluY29ycmVjdCByZXN1bHRzOiIgKyBkZXNjcmlwdGlvbik7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0JcHVibGljIHZvaWQgdGVzdEF1dGhVc2VyT3RoZXIoKSB7Ci0JCVN0cmluZyBzZXJ2bGV0ID0gIi9hdXRodXNlciI7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0iK290aGVydXNlcisiLSIrZWpibW9kZTsKLQkJU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCA0MDMsIG90aGVydXNlciwgZWpibW9kZSwgb3V0cHV0KTsKLQkJaWYgKCFzdWNjZXNzKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKLQkJCXJldHVybjsKLQkJfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKKyAgICB9CiAKLQkJLy8gTm8gcmVzdWx0cyB0byBjaGVjayEKLQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7Ci0JfQorICAgIHB1YmxpYyB2b2lkIHRlc3RBdXRoVXNlck90aGVyKCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvYXV0aHVzZXIiOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBzZXJ2bGV0KyItIitvdGhlcnVzZXIrIi0iK2VqYm1vZGU7CisgICAgICAgIFN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgNDAzLCBvdGhlcnVzZXIsIGVqYm1vZGUsIG91dHB1dCk7CisgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotCXB1YmxpYyB2b2lkIHRlc3RBdXRoVXNlck5vbmUoKSB7Ci0JCVN0cmluZyBzZXJ2bGV0ID0gIi9hdXRodXNlciI7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0tIitlamJtb2RlOwotCQlTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDQwMSwgbnVsbCwgZWpibW9kZSwgb3V0cHV0KTsKLQkJaWYgKCFzdWNjZXNzKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKLQkJCXJldHVybjsKLQkJfQorICAgICAgICAvLyBObyByZXN1bHRzIHRvIGNoZWNrIQorICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKKyAgICB9CiAKLQkJLy8gTm8gcmVzdWx0cyB0byBjaGVjayEKLQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7Ci0JfQorICAgIHB1YmxpYyB2b2lkIHRlc3RBdXRoVXNlck5vbmUoKSB7CisgICAgICAgIFN0cmluZyBzZXJ2bGV0ID0gIi9hdXRodXNlciI7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0tIitlamJtb2RlOworICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDQwMSwgbnVsbCwgZWpibW9kZSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0JcHVibGljIHZvaWQgdGVzdFN0YXIoKSB7Ci0JCVN0cmluZyBzZXJ2bGV0ID0gIi9zdGFyIjsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uID0gc2VydmxldCsiLSIrdXNlcm5hbWUrIi0iK2VqYm1vZGU7Ci0JCVN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgMjAwLCB1c2VybmFtZSwgZWpibW9kZSwgb3V0cHV0KTsKLQkJaWYgKCFzdWNjZXNzKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKLQkJCXJldHVybjsKLQkJfQorICAgICAgICAvLyBObyByZXN1bHRzIHRvIGNoZWNrIQorICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKKyAgICB9CiAKLQkJLy8gQ2hlY2sgcmVzdWx0cyBpbiBvdXRwdXQKLQkJc3VjY2VzcyA9IGNoZWNrUmVzdWx0cyhvdXRwdXQsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUpOwotCQlpZiAoIXN1Y2Nlc3MpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiSW5jb3JyZWN0IHJlc3VsdHM6IiArIGRlc2NyaXB0aW9uKTsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwotCQkJcmV0dXJuOwotCQl9CisgICAgcHVibGljIHZvaWQgdGVzdFN0YXIoKSB7CisgICAgICAgIFN0cmluZyBzZXJ2bGV0ID0gIi9zdGFyIjsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gc2VydmxldCsiLSIrdXNlcm5hbWUrIi0iK2VqYm1vZGU7CisgICAgICAgIFN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgMjAwLCB1c2VybmFtZSwgZWpibW9kZSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0JCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOwotCX0KKyAgICAgICAgLy8gQ2hlY2sgcmVzdWx0cyBpbiBvdXRwdXQKKyAgICAgICAgc3VjY2VzcyA9IGNoZWNrUmVzdWx0cyhvdXRwdXQsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5jb3JyZWN0IHJlc3VsdHM6IiArIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLQlwdWJsaWMgdm9pZCB0ZXN0U3Rhck90aGVyKCkgewotCQlTdHJpbmcgc2VydmxldCA9ICIvc3RhciI7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0iK290aGVydXNlcisiLSIrZWpibW9kZTsKLQkJU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCA0MDMsIG90aGVydXNlciwgZWpibW9kZSwgb3V0cHV0KTsKLQkJaWYgKCFzdWNjZXNzKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKLQkJCXJldHVybjsKLQkJfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKKyAgICB9CiAKLQkJLy8gTm8gcmVzdWx0cyB0byBjaGVjayEKLQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7Ci0JfQorICAgIHB1YmxpYyB2b2lkIHRlc3RTdGFyT3RoZXIoKSB7CisgICAgICAgIFN0cmluZyBzZXJ2bGV0ID0gIi9zdGFyIjsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gc2VydmxldCsiLSIrb3RoZXJ1c2VyKyItIitlamJtb2RlOworICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDQwMywgb3RoZXJ1c2VyLCBlamJtb2RlLCBvdXRwdXQpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLQlwdWJsaWMgdm9pZCB0ZXN0U3Rhck5vbmUoKSB7Ci0JCVN0cmluZyBzZXJ2bGV0ID0gIi9zdGFyIjsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uID0gc2VydmxldCsiLS0iK2VqYm1vZGU7Ci0JCVN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgNDAxLCBudWxsLCBlamJtb2RlLCBvdXRwdXQpOwotCQlpZiAoIXN1Y2Nlc3MpIHsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwotCQkJcmV0dXJuOwotCQl9CisgICAgICAgIC8vIE5vIHJlc3VsdHMgdG8gY2hlY2shCisgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOworICAgIH0KIAotCQkvLyBObyByZXN1bHRzIHRvIGNoZWNrIQotCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKLQl9CisgICAgcHVibGljIHZvaWQgdGVzdFN0YXJOb25lKCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvc3RhciI7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0tIitlamJtb2RlOworICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDQwMSwgbnVsbCwgZWpibW9kZSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0JcHVibGljIHZvaWQgdGVzdFNlcnZsZXQoKSB7Ci0JCVN0cmluZyBzZXJ2bGV0ID0gIi9zZXJ2bGV0IjsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uID0gc2VydmxldCsiLSIrdXNlcm5hbWUrIi0iK2VqYm1vZGU7Ci0JCVN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgMjAwLCB1c2VybmFtZSwgZWpibW9kZSwgb3V0cHV0KTsKLQkJaWYgKCFzdWNjZXNzKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKLQkJCXJldHVybjsKLQkJfQorICAgICAgICAvLyBObyByZXN1bHRzIHRvIGNoZWNrIQorICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKKyAgICB9CiAKLQkJLy8gQ2hlY2sgcmVzdWx0cyBpbiBvdXRwdXQKLQkJc3VjY2VzcyA9IGNoZWNrUmVzdWx0cyhvdXRwdXQsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UpOwotCQlpZiAoIXN1Y2Nlc3MpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiSW5jb3JyZWN0IHJlc3VsdHM6IiArIGRlc2NyaXB0aW9uKTsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwotCQkJcmV0dXJuOwotCQl9CisgICAgcHVibGljIHZvaWQgdGVzdFNlcnZsZXQoKSB7CisgICAgICAgIFN0cmluZyBzZXJ2bGV0ID0gIi9zZXJ2bGV0IjsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gc2VydmxldCsiLSIrdXNlcm5hbWUrIi0iK2VqYm1vZGU7CisgICAgICAgIFN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgMjAwLCB1c2VybmFtZSwgZWpibW9kZSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrIHJlc3VsdHMgaW4gb3V0cHV0CisgICAgICAgIHN1Y2Nlc3MgPSBjaGVja1Jlc3VsdHMob3V0cHV0LGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluY29ycmVjdCByZXN1bHRzOiIgKyBkZXNjcmlwdGlvbik7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0JCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOwotCX0KKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7CisgICAgfQogCi0JcHVibGljIHZvaWQgdGVzdFNlcnZsZXRPdGhlcigpIHsKLQkJU3RyaW5nIHNlcnZsZXQgPSAiL3NlcnZsZXQiOwotCQlTdHJpbmcgZGVzY3JpcHRpb24gPSBzZXJ2bGV0KyItIitvdGhlcnVzZXIrIi0iK2VqYm1vZGU7Ci0JCVN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgMjAwLCBvdGhlcnVzZXIsIGVqYm1vZGUsIG91dHB1dCk7Ci0JCWlmICghc3VjY2VzcykgewotCQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7Ci0JCQlyZXR1cm47Ci0JCX0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0U2VydmxldE90aGVyKCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvc2VydmxldCI7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0iK290aGVydXNlcisiLSIrZWpibW9kZTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCAyMDAsIG90aGVydXNlciwgZWpibW9kZSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0JCS8vIENoZWNrIHJlc3VsdHMgaW4gb3V0cHV0Ci0JCXN1Y2Nlc3MgPSBjaGVja1Jlc3VsdHMob3V0cHV0LGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlKTsKLQkJaWYgKCFzdWNjZXNzKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluY29ycmVjdCByZXN1bHRzOiIgKyBkZXNjcmlwdGlvbik7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKLQkJCXJldHVybjsKLQkJfQorICAgICAgICAvLyBDaGVjayByZXN1bHRzIGluIG91dHB1dAorICAgICAgICBzdWNjZXNzID0gY2hlY2tSZXN1bHRzKG91dHB1dCxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSk7CisgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmNvcnJlY3QgcmVzdWx0czoiICsgZGVzY3JpcHRpb24pOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKLQl9CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOworICAgIH0KIAotCXB1YmxpYyB2b2lkIHRlc3RTZXJ2bGV0Tm9uZSgpIHsKLQkJU3RyaW5nIHNlcnZsZXQgPSAiL3NlcnZsZXQiOwotCQlTdHJpbmcgZGVzY3JpcHRpb24gPSBzZXJ2bGV0KyItLSIrZWpibW9kZTsKLQkJU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCAyMDAsIG51bGwsIGVqYm1vZGUsIG91dHB1dCk7Ci0JCWlmICghc3VjY2VzcykgewotCQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7Ci0JCQlyZXR1cm47Ci0JCX0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0U2VydmxldE5vbmUoKSB7CisgICAgICAgIFN0cmluZyBzZXJ2bGV0ID0gIi9zZXJ2bGV0IjsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gc2VydmxldCsiLS0iK2VqYm1vZGU7CisgICAgICAgIFN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgMjAwLCBudWxsLCBlamJtb2RlLCBvdXRwdXQpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLQkJLy8gQ2hlY2sgcmVzdWx0cyBpbiBvdXRwdXQKLQkJc3VjY2VzcyA9IGNoZWNrUmVzdWx0cyhvdXRwdXQsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UpOwotCQlpZiAoIXN1Y2Nlc3MpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiSW5jb3JyZWN0IHJlc3VsdHM6IiArIGRlc2NyaXB0aW9uKTsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwotCQkJcmV0dXJuOwotCQl9CisgICAgICAgIC8vIENoZWNrIHJlc3VsdHMgaW4gb3V0cHV0CisgICAgICAgIHN1Y2Nlc3MgPSBjaGVja1Jlc3VsdHMob3V0cHV0LGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluY29ycmVjdCByZXN1bHRzOiIgKyBkZXNjcmlwdGlvbik7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0JCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOwotCX0KKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7CisgICAgfQogCi0JcHVibGljIHZvaWQgdGVzdERlbnlVbmNvdmVyZWQoKSB7Ci0JCVN0cmluZyBzZXJ2bGV0ID0gIi9kZW55dW5jb3ZlcmVkcG9zdCI7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0iK3VzZXJuYW1lKyItIitlamJtb2RlOwotCQlTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDQwMywgdXNlcm5hbWUsIGVqYm1vZGUsIG91dHB1dCk7Ci0JCWlmICghc3VjY2VzcykgewotCQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7Ci0JCQlyZXR1cm47Ci0JCX0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0RGVueVVuY292ZXJlZCgpIHsKKyAgICAgICAgU3RyaW5nIHNlcnZsZXQgPSAiL2Rlbnl1bmNvdmVyZWRwb3N0IjsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gc2VydmxldCsiLSIrdXNlcm5hbWUrIi0iK2VqYm1vZGU7CisgICAgICAgIFN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgNDAzLCB1c2VybmFtZSwgZWpibW9kZSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0JCS8vIE5vIHJlc3VsdHMgdG8gY2hlY2shCi0JCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOwotCX0KKyAgICAgICAgLy8gTm8gcmVzdWx0cyB0byBjaGVjayEKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7CisgICAgfQogCi0JcHVibGljIHZvaWQgdGVzdERlbnlVbmNvdmVyZWRPdGhlcigpIHsKLQkJU3RyaW5nIHNlcnZsZXQgPSAiL2Rlbnl1bmNvdmVyZWRwb3N0IjsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uID0gc2VydmxldCsiLSIrb3RoZXJ1c2VyKyItIitlamJtb2RlOwotCQlTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDQwMywgb3RoZXJ1c2VyLCBlamJtb2RlLCBvdXRwdXQpOwotCQlpZiAoIXN1Y2Nlc3MpIHsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwotCQkJcmV0dXJuOwotCQl9CisgICAgcHVibGljIHZvaWQgdGVzdERlbnlVbmNvdmVyZWRPdGhlcigpIHsKKyAgICAgICAgU3RyaW5nIHNlcnZsZXQgPSAiL2Rlbnl1bmNvdmVyZWRwb3N0IjsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gc2VydmxldCsiLSIrb3RoZXJ1c2VyKyItIitlamJtb2RlOworICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDQwMywgb3RoZXJ1c2VyLCBlamJtb2RlLCBvdXRwdXQpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLQkJLy8gTm8gcmVzdWx0cyB0byBjaGVjayEKLQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7Ci0JfQorICAgICAgICAvLyBObyByZXN1bHRzIHRvIGNoZWNrIQorICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCB0ZXN0RGVueVVuY292ZXJlZE5vbmUoKSB7Ci0JCVN0cmluZyBzZXJ2bGV0ID0gIi9kZW55dW5jb3ZlcmVkcG9zdCI7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0tIitlamJtb2RlOwotCQlTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDQwMywgbnVsbCwgZWpibW9kZSwgb3V0cHV0KTsKLQkJaWYgKCFzdWNjZXNzKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKLQkJCXJldHVybjsKLQkJfQorICAgIHB1YmxpYyB2b2lkIHRlc3REZW55VW5jb3ZlcmVkTm9uZSgpIHsKKyAgICAgICAgU3RyaW5nIHNlcnZsZXQgPSAiL2Rlbnl1bmNvdmVyZWRwb3N0IjsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gc2VydmxldCsiLS0iK2VqYm1vZGU7CisgICAgICAgIFN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgNDAzLCBudWxsLCBlamJtb2RlLCBvdXRwdXQpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLQkJLy8gTm8gcmVzdWx0cyB0byBjaGVjayEKLQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7Ci0JfQorICAgICAgICAvLyBObyByZXN1bHRzIHRvIGNoZWNrIQorICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKKyAgICB9CiAKLQkvLyBWYWxpZGF0ZSB0aGF0IGFsbCB0aGUgcGFzc2VkIGluIHJlc3VsdHMgYXJlIGFzIGV4cGVjdGVkCi0JLy8gSWYgYW55IHZhbHVlIGlzIG5vdCBhcyBleHBlY3RlZCB0aGUgb3ZlcmFsbCByZXN1bHRzIGFyZSBmYWxzZQotCXByaXZhdGUgYm9vbGVhbiBjaGVja1Jlc3VsdHMoU3RyaW5nQnVmZmVyIHJlc3VsdHMsCi0JCQlib29sZWFuIEVKQmlzQ2FsbGVySW5Sb2xlLCBib29sZWFuIEVKQmlzVXNlckluQW55QXV0aFVzZXJSb2xlLAotCQkJYm9vbGVhbiBFSkJJbnZva2VBbnlBdXRoVXNlciwgYm9vbGVhbiBFSkJJbnZva2VBdXRoVXNlciwKLQkJCWJvb2xlYW4gV0VCaXNVc2VySW5Sb2xlLCBib29sZWFuIFdFQmlzVXNlckluQW55QXV0aFVzZXJSb2xlKSB7Ci0JCWludCBpbmRleDsKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOworICAgIC8vIFZhbGlkYXRlIHRoYXQgYWxsIHRoZSBwYXNzZWQgaW4gcmVzdWx0cyBhcmUgYXMgZXhwZWN0ZWQKKyAgICAvLyBJZiBhbnkgdmFsdWUgaXMgbm90IGFzIGV4cGVjdGVkIHRoZSBvdmVyYWxsIHJlc3VsdHMgYXJlIGZhbHNlCisgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrUmVzdWx0cyhTdHJpbmdCdWZmZXIgcmVzdWx0cywKKyAgICAgICAgICAgIGJvb2xlYW4gRUpCaXNDYWxsZXJJblJvbGUsIGJvb2xlYW4gRUpCaXNVc2VySW5BbnlBdXRoVXNlclJvbGUsCisgICAgICAgICAgICBib29sZWFuIEVKQkludm9rZUFueUF1dGhVc2VyLCBib29sZWFuIEVKQkludm9rZUF1dGhVc2VyLAorICAgICAgICAgICAgYm9vbGVhbiBXRUJpc1VzZXJJblJvbGUsIGJvb2xlYW4gV0VCaXNVc2VySW5BbnlBdXRoVXNlclJvbGUpIHsKKyAgICAgICAgaW50IGluZGV4OworICAgICAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7CiAKLQkJaWYgKEVKQmlzQ2FsbGVySW5Sb2xlKQotCQkJaW5kZXggPSByZXN1bHRzLmluZGV4T2YoIkVKQiBpc0NhbGxlckluUm9sZTogdHJ1ZSIpOwotCQllbHNlCi0JCQlpbmRleCA9IHJlc3VsdHMuaW5kZXhPZigiRUpCIGlzQ2FsbGVySW5Sb2xlOiBmYWxzZSIpOwotCQlpZiAoaW5kZXggPT0gLTEpCi0JCQlyZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgaWYgKEVKQmlzQ2FsbGVySW5Sb2xlKQorICAgICAgICAgICAgaW5kZXggPSByZXN1bHRzLmluZGV4T2YoIkVKQiBpc0NhbGxlckluUm9sZTogdHJ1ZSIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpbmRleCA9IHJlc3VsdHMuaW5kZXhPZigiRUpCIGlzQ2FsbGVySW5Sb2xlOiBmYWxzZSIpOworICAgICAgICBpZiAoaW5kZXggPT0gLTEpCisgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKIAotCQlpZiAoIXJlc3VsdCkgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgaWYgKCFyZXN1bHQpIHJldHVybiByZXN1bHQ7CiAKLQkJaWYgKEVKQmlzVXNlckluQW55QXV0aFVzZXJSb2xlKQotCQkJaW5kZXggPSByZXN1bHRzLmluZGV4T2YoIkVKQiBpc1VzZXJJbkFueUF1dGhVc2VyUm9sZTogdHJ1ZSIpOwotCQllbHNlCi0JCQlpbmRleCA9IHJlc3VsdHMuaW5kZXhPZigiRUpCIGlzVXNlckluQW55QXV0aFVzZXJSb2xlOiBmYWxzZSIpOwotCQlpZiAoaW5kZXggPT0gLTEpCi0JCQlyZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgaWYgKEVKQmlzVXNlckluQW55QXV0aFVzZXJSb2xlKQorICAgICAgICAgICAgaW5kZXggPSByZXN1bHRzLmluZGV4T2YoIkVKQiBpc1VzZXJJbkFueUF1dGhVc2VyUm9sZTogdHJ1ZSIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpbmRleCA9IHJlc3VsdHMuaW5kZXhPZigiRUpCIGlzVXNlckluQW55QXV0aFVzZXJSb2xlOiBmYWxzZSIpOworICAgICAgICBpZiAoaW5kZXggPT0gLTEpCisgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKIAotCQlpZiAoIXJlc3VsdCkgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgaWYgKCFyZXN1bHQpIHJldHVybiByZXN1bHQ7CiAKLQkJaWYgKFdFQmlzVXNlckluUm9sZSkKLQkJCWluZGV4ID0gcmVzdWx0cy5pbmRleE9mKCJXRUIgaXNVc2VySW5Sb2xlOiB0cnVlIik7Ci0JCWVsc2UKLQkJCWluZGV4ID0gcmVzdWx0cy5pbmRleE9mKCJXRUIgaXNVc2VySW5Sb2xlOiBmYWxzZSIpOwotCQlpZiAoaW5kZXggPT0gLTEpCi0JCQlyZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgaWYgKFdFQmlzVXNlckluUm9sZSkKKyAgICAgICAgICAgIGluZGV4ID0gcmVzdWx0cy5pbmRleE9mKCJXRUIgaXNVc2VySW5Sb2xlOiB0cnVlIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGluZGV4ID0gcmVzdWx0cy5pbmRleE9mKCJXRUIgaXNVc2VySW5Sb2xlOiBmYWxzZSIpOworICAgICAgICBpZiAoaW5kZXggPT0gLTEpCisgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKIAotCQlpZiAoIXJlc3VsdCkgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgaWYgKCFyZXN1bHQpIHJldHVybiByZXN1bHQ7CiAKLQkJaWYgKFdFQmlzVXNlckluQW55QXV0aFVzZXJSb2xlKQotCQkJaW5kZXggPSByZXN1bHRzLmluZGV4T2YoIldFQiBpc1VzZXJJbkFueUF1dGhVc2VyUm9sZTogdHJ1ZSIpOwotCQllbHNlCi0JCQlpbmRleCA9IHJlc3VsdHMuaW5kZXhPZigiV0VCIGlzVXNlckluQW55QXV0aFVzZXJSb2xlOiBmYWxzZSIpOwotCQlpZiAoaW5kZXggPT0gLTEpCi0JCQlyZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgaWYgKFdFQmlzVXNlckluQW55QXV0aFVzZXJSb2xlKQorICAgICAgICAgICAgaW5kZXggPSByZXN1bHRzLmluZGV4T2YoIldFQiBpc1VzZXJJbkFueUF1dGhVc2VyUm9sZTogdHJ1ZSIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpbmRleCA9IHJlc3VsdHMuaW5kZXhPZigiV0VCIGlzVXNlckluQW55QXV0aFVzZXJSb2xlOiBmYWxzZSIpOworICAgICAgICBpZiAoaW5kZXggPT0gLTEpCisgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKIAotCQlpZiAoIXJlc3VsdCkgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgaWYgKCFyZXN1bHQpIHJldHVybiByZXN1bHQ7CiAKLQkJaW5kZXggPSByZXN1bHRzLmluZGV4T2YoIkVKQiBJbnZva2UgQW55QXV0aFVzZXI6IFllcyIpOwotCQlpZiAoRUpCSW52b2tlQW55QXV0aFVzZXIpCi0JCQlyZXN1bHQgPSAoaW5kZXggIT0gLTEpOwotCQllbHNlCi0JCQlyZXN1bHQgPSAoaW5kZXggPT0gLTEpOworICAgICAgICBpbmRleCA9IHJlc3VsdHMuaW5kZXhPZigiRUpCIEludm9rZSBBbnlBdXRoVXNlcjogWWVzIik7CisgICAgICAgIGlmIChFSkJJbnZva2VBbnlBdXRoVXNlcikKKyAgICAgICAgICAgIHJlc3VsdCA9IChpbmRleCAhPSAtMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IChpbmRleCA9PSAtMSk7CiAKLQkJaWYgKCFyZXN1bHQpIHJldHVybiByZXN1bHQ7CisgICAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gcmVzdWx0OwogCi0JCWluZGV4ID0gcmVzdWx0cy5pbmRleE9mKCJFSkIgSW52b2tlIEF1dGhVc2VyOiBZZXMiKTsKLQkJaWYgKEVKQkludm9rZUF1dGhVc2VyKQotCQkJcmVzdWx0ID0gKGluZGV4ICE9IC0xKTsKLQkJZWxzZQotCQkJcmVzdWx0ID0gKGluZGV4ID09IC0xKTsKKyAgICAgICAgaW5kZXggPSByZXN1bHRzLmluZGV4T2YoIkVKQiBJbnZva2UgQXV0aFVzZXI6IFllcyIpOworICAgICAgICBpZiAoRUpCSW52b2tlQXV0aFVzZXIpCisgICAgICAgICAgICByZXN1bHQgPSAoaW5kZXggIT0gLTEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSAoaW5kZXggPT0gLTEpOwogCi0JCXJldHVybiByZXN1bHQ7Ci0JfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIAotCXByaXZhdGUgYm9vbGVhbiBkb0luZGl2aWR1YWxUZXN0KFN0cmluZyBzZXJ2bGV0LCBpbnQgY29kZSwgU3RyaW5nIHVzZXIsIFN0cmluZyBtb2RlLCBTdHJpbmdCdWZmZXIgb3V0cHV0KSB7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JCXRyeSB7Ci0JCQlpbnQgcnRuY29kZTsKLQkJCVN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRQYXRoICsgc2VydmxldDsKKyAgICBwcml2YXRlIGJvb2xlYW4gZG9JbmRpdmlkdWFsVGVzdChTdHJpbmcgc2VydmxldCwgaW50IGNvZGUsIFN0cmluZyB1c2VyLCBTdHJpbmcgbW9kZSwgU3RyaW5nQnVmZmVyIG91dHB1dCkgeworICAgICAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOworICAgICAgICB0cnkgeworICAgICAgICAgICAgaW50IHJ0bmNvZGU7CisgICAgICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0UGF0aCArIHNlcnZsZXQ7CiAKLQkJCUhhc2h0YWJsZSBodCA9IG5ldyBIYXNodGFibGUoKTsKLQkJCWh0LnB1dCgibW9kZSIsIFVSTEVuY29kZXIuZW5jb2RlKG1vZGUsIlVURi04IikpOwotCQkJaHQucHV0KCJuYW1lIiwgVVJMRW5jb2Rlci5lbmNvZGUocm9sZW5hbWUsIlVURi04IikpOworICAgICAgICAgICAgSGFzaHRhYmxlIGh0ID0gbmV3IEhhc2h0YWJsZSgpOworICAgICAgICAgICAgaHQucHV0KCJtb2RlIiwgVVJMRW5jb2Rlci5lbmNvZGUobW9kZSwiVVRGLTgiKSk7CisgICAgICAgICAgICBodC5wdXQoIm5hbWUiLCBVUkxFbmNvZGVyLmVuY29kZShyb2xlbmFtZSwiVVRGLTgiKSk7CiAKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5JbnZva2luZyBzZXJ2bGV0IGF0ICIgKyB1cmwpOwotCQkJcnRuY29kZSA9IGludm9rZVNlcnZsZXQodXJsLCBodCwgdXNlciwgb3V0cHV0KTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGhlIHNlcnZsZXQgcmV0dXJuIGNvZGU6ICIgKyBydG5jb2RlKTsKLQkJCWlmIChydG5jb2RlICE9IGNvZGUpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluY29ycmVjdCByZXR1cm4gY29kZSwgZXhwZWN0aW5nOiAiICsgY29kZSk7Ci0JCQl9Ci0JCQllbHNlIHJlc3VsdCA9IHRydWU7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb246ICIgKyBleC50b1N0cmluZygpKTsKLQkJCS8vZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuSW52b2tpbmcgc2VydmxldCBhdCAiICsgdXJsKTsKKyAgICAgICAgICAgIHJ0bmNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCwgaHQsIHVzZXIsIG91dHB1dCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBzZXJ2bGV0IHJldHVybiBjb2RlOiAiICsgcnRuY29kZSk7CisgICAgICAgICAgICBpZiAocnRuY29kZSAhPSBjb2RlKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmNvcnJlY3QgcmV0dXJuIGNvZGUsIGV4cGVjdGluZzogIiArIGNvZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSByZXN1bHQgPSB0cnVlOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uOiAiICsgZXgudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAvL2V4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogCi0JcHJpdmF0ZSBpbnQgaW52b2tlU2VydmxldChTdHJpbmcgdXJsLCBIYXNodGFibGUgY29udGVudEhhc2gsIFN0cmluZyB1c2VyLCBTdHJpbmdCdWZmZXIgb3V0cHV0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJVVJMIHUgPSBuZXcgVVJMKHVybCk7Ci0JCUh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1Lm9wZW5Db25uZWN0aW9uKCk7Ci0JCWMxLnNldEFsbG93VXNlckludGVyYWN0aW9uKHRydWUpOwotCQlpZiAoKHVzZXIgIT0gbnVsbCkgJiYgKHVzZXIubGVuZ3RoKCkgPiAwKSkgewotCQkJLy8gQWRkIEJBU0lDIGhlYWRlciBmb3IgYXV0aGVudGljYXRpb24KLQkJCVN0cmluZyBhdXRoID0gIHVzZXIgKyAiOiIgKyBwYXNzd29yZDsKLQkJCVN0cmluZyBhdXRoRW5jb2RlZCA9IG5ldyBzdW4ubWlzYy5CQVNFNjRFbmNvZGVyKCkuZW5jb2RlKGF1dGguZ2V0Qnl0ZXMoKSk7Ci0JCQljMS5zZXRSZXF1ZXN0UHJvcGVydHkoIkF1dGhvcml6YXRpb24iLCAiQmFzaWMgIiArIGF1dGhFbmNvZGVkKTsKLQkJfQotCQljMS5zZXREb091dHB1dCh0cnVlKTsKLQkJYzEuc2V0VXNlQ2FjaGVzKGZhbHNlKTsKKyAgICBwcml2YXRlIGludCBpbnZva2VTZXJ2bGV0KFN0cmluZyB1cmwsIEhhc2h0YWJsZSBjb250ZW50SGFzaCwgU3RyaW5nIHVzZXIsIFN0cmluZ0J1ZmZlciBvdXRwdXQpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBVUkwgdSA9IG5ldyBVUkwodXJsKTsKKyAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gYzEgPSAoSHR0cFVSTENvbm5lY3Rpb24pIHUub3BlbkNvbm5lY3Rpb24oKTsKKyAgICAgICAgYzEuc2V0QWxsb3dVc2VySW50ZXJhY3Rpb24odHJ1ZSk7CisgICAgICAgIGlmICgodXNlciAhPSBudWxsKSAmJiAodXNlci5sZW5ndGgoKSA+IDApKSB7CisgICAgICAgICAgICAvLyBBZGQgQkFTSUMgaGVhZGVyIGZvciBhdXRoZW50aWNhdGlvbgorICAgICAgICAgICAgU3RyaW5nIGF1dGggPSAgdXNlciArICI6IiArIHBhc3N3b3JkOworICAgICAgICAgICAgU3RyaW5nIGF1dGhFbmNvZGVkID0gbmV3IHN1bi5taXNjLkJBU0U2NEVuY29kZXIoKS5lbmNvZGUoYXV0aC5nZXRCeXRlcygpKTsKKyAgICAgICAgICAgIGMxLnNldFJlcXVlc3RQcm9wZXJ0eSgiQXV0aG9yaXphdGlvbiIsICJCYXNpYyAiICsgYXV0aEVuY29kZWQpOworICAgICAgICB9CisgICAgICAgIGMxLnNldERvT3V0cHV0KHRydWUpOworICAgICAgICBjMS5zZXRVc2VDYWNoZXMoZmFsc2UpOwogCi0JCS8vIGdldCB0aGUgb3V0cHV0IHN0cmVhbSB0byBQT1NUIHRvLgotCQlEYXRhT3V0cHV0U3RyZWFtIG91dDsKLQkJb3V0ID0gbmV3IERhdGFPdXRwdXRTdHJlYW0oYzEuZ2V0T3V0cHV0U3RyZWFtKCkpOwotCQlTdHJpbmcgY29udGVudCA9ICIiOworICAgICAgICAvLyBnZXQgdGhlIG91dHB1dCBzdHJlYW0gdG8gUE9TVCB0by4KKyAgICAgICAgRGF0YU91dHB1dFN0cmVhbSBvdXQ7CisgICAgICAgIG91dCA9IG5ldyBEYXRhT3V0cHV0U3RyZWFtKGMxLmdldE91dHB1dFN0cmVhbSgpKTsKKyAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSAiIjsKIAotCQkvLyBDcmVhdGUgYSBzaW5nbGUgU3RyaW5nIHZhbHVlIHRvIGJlIFBPU1RFRCBmcm9tIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZAotCQkvLyB0byB1cy4gVGhpcyBpcyBkb25lIGJ5IG1ha2luZyAibmFtZSI9InZhbHVlIiBwYWlycyBmb3IgYWxsIHRoZSBrZXlzCi0JCS8vIGluIHRoZSBIYXNodGFibGUgcGFzc2VkIHRvIHVzLgotCQlFbnVtZXJhdGlvbiBlID0gY29udGVudEhhc2gua2V5cygpOwotCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKLQkJd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLQkJCS8vIEZvciBlYWNoIGtleSBhbmQgdmFsdWUgcGFpciBpbiB0aGUgaGFzaHRhYmxlCi0JCQlPYmplY3Qga2V5ID0gZS5uZXh0RWxlbWVudCgpOwotCQkJT2JqZWN0IHZhbHVlID0gY29udGVudEhhc2guZ2V0KGtleSk7CisgICAgICAgIC8vIENyZWF0ZSBhIHNpbmdsZSBTdHJpbmcgdmFsdWUgdG8gYmUgUE9TVEVEIGZyb20gdGhlIHBhcmFtZXRlcnMgcGFzc2VkCisgICAgICAgIC8vIHRvIHVzLiBUaGlzIGlzIGRvbmUgYnkgbWFraW5nICJuYW1lIj0idmFsdWUiIHBhaXJzIGZvciBhbGwgdGhlIGtleXMKKyAgICAgICAgLy8gaW4gdGhlIEhhc2h0YWJsZSBwYXNzZWQgdG8gdXMuCisgICAgICAgIEVudW1lcmF0aW9uIGUgPSBjb250ZW50SGFzaC5rZXlzKCk7CisgICAgICAgIGJvb2xlYW4gZmlyc3QgPSB0cnVlOworICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgLy8gRm9yIGVhY2gga2V5IGFuZCB2YWx1ZSBwYWlyIGluIHRoZSBoYXNodGFibGUKKyAgICAgICAgICAgIE9iamVjdCBrZXkgPSBlLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICBPYmplY3QgdmFsdWUgPSBjb250ZW50SGFzaC5nZXQoa2V5KTsKIAotCQkJLy8gSWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGtleS12YWx1ZSBwYWlyIGluIHRoZSBoYXNodGFibGUsCi0JCQkvLyBjb25jYW50ZW5hdGUgYW4gIiYiIHNpZ24gdG8gdGhlIGNvbnN0cnVjdGVkIFN0cmluZwotCQkJaWYgKCFmaXJzdCkKLQkJCQljb250ZW50ICs9ICImIjsKKyAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBrZXktdmFsdWUgcGFpciBpbiB0aGUgaGFzaHRhYmxlLAorICAgICAgICAgICAgLy8gY29uY2FudGVuYXRlIGFuICImIiBzaWduIHRvIHRoZSBjb25zdHJ1Y3RlZCBTdHJpbmcKKyAgICAgICAgICAgIGlmICghZmlyc3QpCisgICAgICAgICAgICAgICAgY29udGVudCArPSAiJiI7CiAKLQkJCS8vIGFwcGVuZCB0byBhIHNpbmdsZSBzdHJpbmcuIEVuY29kZSB0aGUgdmFsdWUgcG9ydGlvbgotCQkJY29udGVudCArPSAoU3RyaW5nKSBrZXkgKyAiPSIgKyBVUkxFbmNvZGVyLmVuY29kZSgoU3RyaW5nKSB2YWx1ZSwiVVRGLTgiKTsKKyAgICAgICAgICAgIC8vIGFwcGVuZCB0byBhIHNpbmdsZSBzdHJpbmcuIEVuY29kZSB0aGUgdmFsdWUgcG9ydGlvbgorICAgICAgICAgICAgY29udGVudCArPSAoU3RyaW5nKSBrZXkgKyAiPSIgKyBVUkxFbmNvZGVyLmVuY29kZSgoU3RyaW5nKSB2YWx1ZSwiVVRGLTgiKTsKIAotCQkJZmlyc3QgPSBmYWxzZTsKLQkJfQorICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKKyAgICAgICAgfQogCi0JCS8vIFdyaXRlIG91dCB0aGUgYnl0ZXMgb2YgdGhlIGNvbnRlbnQgc3RyaW5nIHRvIHRoZSBzdHJlYW0uCi0JCW91dC53cml0ZUJ5dGVzKGNvbnRlbnQpOwotCQlvdXQuZmx1c2goKTsKLQkJb3V0LmNsb3NlKCk7CisgICAgICAgIC8vIFdyaXRlIG91dCB0aGUgYnl0ZXMgb2YgdGhlIGNvbnRlbnQgc3RyaW5nIHRvIHRoZSBzdHJlYW0uCisgICAgICAgIG91dC53cml0ZUJ5dGVzKGNvbnRlbnQpOworICAgICAgICBvdXQuZmx1c2goKTsKKyAgICAgICAgb3V0LmNsb3NlKCk7CiAKLQkJLy8gQ29ubmVjdCBhbmQgZ2V0IHRoZSByZXNwb25zZSBjb2RlIGFuZC9vciBvdXRwdXQgdG8gdmVyaWZ5Ci0JCWMxLmNvbm5lY3QoKTsKLQkJaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKLQkJaWYgKGNvZGUgPT0gSHR0cFVSTENvbm5lY3Rpb24uSFRUUF9PSykgewotCQkJSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotCQkJQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBudWxsOwotCQkJU3RyaW5nIGxpbmUgPSBudWxsOwotCQkJdHJ5IHsKLQkJCQlpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7Ci0JCQkJaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7Ci0JCQkJd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewotCQkJCQlvdXRwdXQuYXBwZW5kKGxpbmUpOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7Ci0JCQkJfQotCQkJfQotCQkJZmluYWxseSB7Ci0JCQkJdHJ5IHsgaWYgKGlzICE9IG51bGwpIGlzLmNsb3NlKCk7IH0KLQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Yykge30KLQkJCQl0cnkgeyBpZiAoaW5wdXQgIT0gbnVsbCkgaW5wdXQuY2xvc2UoKTsgfQotCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjKSB7fQotCQkJfQotCQl9Ci0JCXJldHVybiBjb2RlOwotCX0KKyAgICAgICAgLy8gQ29ubmVjdCBhbmQgZ2V0IHRoZSByZXNwb25zZSBjb2RlIGFuZC9vciBvdXRwdXQgdG8gdmVyaWZ5CisgICAgICAgIGMxLmNvbm5lY3QoKTsKKyAgICAgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKKyAgICAgICAgaWYgKGNvZGUgPT0gSHR0cFVSTENvbm5lY3Rpb24uSFRUUF9PSykgeworICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOworICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBudWxsOworICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7CisgICAgICAgICAgICAgICAgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CisgICAgICAgICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGxpbmUpOworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluYWxseSB7CisgICAgICAgICAgICAgICAgdHJ5IHsgaWYgKGlzICE9IG51bGwpIGlzLmNsb3NlKCk7IH0KKyAgICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4Yykge30KKyAgICAgICAgICAgICAgICB0cnkgeyBpZiAoaW5wdXQgIT0gbnVsbCkgaW5wdXQuY2xvc2UoKTsgfQorICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXhjKSB7fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBjb2RlOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NtcjgvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NtcjgvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBjYjYzZTUyLi4zNWNmZTY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjbXI4L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY21yOC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0yMSw0NiArMjEsNDYgQEAKICAgICAgICAgIG1ldGFkYXRhLWNvbXBsZXRlPSJmYWxzZSIgdmVyc2lvbj0iMy4xIgogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18xLnhzZCI+CiAgICAgPG1vZHVsZS1uYW1lPmphY2NtcjgtZWpiPC9tb2R1bGUtbmFtZT4KLQk8ZW50ZXJwcmlzZS1iZWFucz4KLQkJPCEtLSBTZWUgRUpCIGFubm90YXRpb25zCisgICAgPGVudGVycHJpc2UtYmVhbnM+CisgICAgICAgIDwhLS0gU2VlIEVKQiBhbm5vdGF0aW9ucwogICAgICAgICA8c2Vzc2lvbj4KICAgICAgICAgICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9TdGF0ZWZ1bEVKQjwvZGlzcGxheS1uYW1lPgogICAgICAgICAgICAgPGVqYi1uYW1lPkhlbGxvU3RhdGVmdWxFSkI8L2VqYi1uYW1lPgogICAgICAgICAgICAgPGJ1c2luZXNzLWxvY2FsPm9yZy5nbGFzc2Zpc2guamFjYy50ZXN0Lm1yOC5IZWxsb1N0YXRlZnVsPC9idXNpbmVzcy1sb2NhbD4KICAgICAgICAgICAgIDxlamItY2xhc3M+b3JnLmdsYXNzZmlzaC5qYWNjLnRlc3QubXI4LkhlbGxvU3RhdGVmdWxFSkI8L2VqYi1jbGFzcz4KICAgICAgICAgPC9zZXNzaW9uPgotCQktLT4KLQkJPHNlc3Npb24+Ci0JCQk8ZGlzcGxheS1uYW1lPkhlbGxvRUpCPC9kaXNwbGF5LW5hbWU+Ci0JCQk8ZWpiLW5hbWU+SGVsbG9FSkI8L2VqYi1uYW1lPgotCQkJPGJ1c2luZXNzLWxvY2FsPm9yZy5nbGFzc2Zpc2guamFjYy50ZXN0Lm1yOC5IZWxsbzwvYnVzaW5lc3MtbG9jYWw+Ci0JCQk8ZWpiLWNsYXNzPm9yZy5nbGFzc2Zpc2guamFjYy50ZXN0Lm1yOC5IZWxsb0VKQjwvZWpiLWNsYXNzPgotCQkJPCEtLSBHTEFTU0ZJU0gtMjAwMzYgZml4ZXMgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIHdoZW4gcm9sZS1yZWZzIGFyZSBub3QgZGVjbGFyZWQuCi0JCQkgICAgIFRoZSBARGVjbGFyZVJvbGVzIGFubm90YXRpb24gcHJvdmlkZXMgdGhlIGxpbmthZ2UgYmV0d2VlbiByb2xlcyBzaWxlbnRseS4KLQkJCTxzZWN1cml0eS1yb2xlLXJlZj4KLQkJCQk8cm9sZS1uYW1lPmphdmFVc2Vyczwvcm9sZS1uYW1lPgotCQkJCTxyb2xlLWxpbms+amF2YVVzZXJzPC9yb2xlLWxpbms+Ci0JCQk8L3NlY3VyaXR5LXJvbGUtcmVmPgotCQkJLS0+Ci0JCTwvc2Vzc2lvbj4KLQk8L2VudGVycHJpc2UtYmVhbnM+Ci0JPGFzc2VtYmx5LWRlc2NyaXB0b3I+Ci0JCTxzZWN1cml0eS1yb2xlPgotCQkJPHJvbGUtbmFtZT5qYXZhVXNlcnM8L3JvbGUtbmFtZT4KLQkJPC9zZWN1cml0eS1yb2xlPgotCQk8bWV0aG9kLXBlcm1pc3Npb24+Ci0JCQk8cm9sZS1uYW1lPmphdmFVc2Vyczwvcm9sZS1uYW1lPgotCQkJPG1ldGhvZD4KLQkJCQk8ZWpiLW5hbWU+SGVsbG9FSkI8L2VqYi1uYW1lPgotCQkJCTxtZXRob2QtbmFtZT5tZXRob2RBdXRoVXNlcjwvbWV0aG9kLW5hbWU+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2QtcGVybWlzc2lvbj4KLQkJPG1ldGhvZC1wZXJtaXNzaW9uPgotCQkJPHJvbGUtbmFtZT4qKjwvcm9sZS1uYW1lPgotCQkJPG1ldGhvZD4KLQkJCQk8ZWpiLW5hbWU+SGVsbG9FSkI8L2VqYi1uYW1lPgotCQkJCTxtZXRob2QtbmFtZT5tZXRob2RBbnlBdXRoVXNlcjwvbWV0aG9kLW5hbWU+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2QtcGVybWlzc2lvbj4KLQk8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+CisgICAgICAgIC0tPgorICAgICAgICA8c2Vzc2lvbj4KKyAgICAgICAgICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9FSkI8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgICAgIDxlamItbmFtZT5IZWxsb0VKQjwvZWpiLW5hbWU+CisgICAgICAgICAgICA8YnVzaW5lc3MtbG9jYWw+b3JnLmdsYXNzZmlzaC5qYWNjLnRlc3QubXI4LkhlbGxvPC9idXNpbmVzcy1sb2NhbD4KKyAgICAgICAgICAgIDxlamItY2xhc3M+b3JnLmdsYXNzZmlzaC5qYWNjLnRlc3QubXI4LkhlbGxvRUpCPC9lamItY2xhc3M+CisgICAgICAgICAgICA8IS0tIEdMQVNTRklTSC0yMDAzNiBmaXhlcyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gd2hlbiByb2xlLXJlZnMgYXJlIG5vdCBkZWNsYXJlZC4KKyAgICAgICAgICAgICAgICAgVGhlIEBEZWNsYXJlUm9sZXMgYW5ub3RhdGlvbiBwcm92aWRlcyB0aGUgbGlua2FnZSBiZXR3ZWVuIHJvbGVzIHNpbGVudGx5LgorICAgICAgICAgICAgPHNlY3VyaXR5LXJvbGUtcmVmPgorICAgICAgICAgICAgICAgIDxyb2xlLW5hbWU+amF2YVVzZXJzPC9yb2xlLW5hbWU+CisgICAgICAgICAgICAgICAgPHJvbGUtbGluaz5qYXZhVXNlcnM8L3JvbGUtbGluaz4KKyAgICAgICAgICAgIDwvc2VjdXJpdHktcm9sZS1yZWY+CisgICAgICAgICAgICAtLT4KKyAgICAgICAgPC9zZXNzaW9uPgorICAgIDwvZW50ZXJwcmlzZS1iZWFucz4KKyAgICA8YXNzZW1ibHktZGVzY3JpcHRvcj4KKyAgICAgICAgPHNlY3VyaXR5LXJvbGU+CisgICAgICAgICAgICA8cm9sZS1uYW1lPmphdmFVc2Vyczwvcm9sZS1uYW1lPgorICAgICAgICA8L3NlY3VyaXR5LXJvbGU+CisgICAgICAgIDxtZXRob2QtcGVybWlzc2lvbj4KKyAgICAgICAgICAgIDxyb2xlLW5hbWU+amF2YVVzZXJzPC9yb2xlLW5hbWU+CisgICAgICAgICAgICA8bWV0aG9kPgorICAgICAgICAgICAgICAgIDxlamItbmFtZT5IZWxsb0VKQjwvZWpiLW5hbWU+CisgICAgICAgICAgICAgICAgPG1ldGhvZC1uYW1lPm1ldGhvZEF1dGhVc2VyPC9tZXRob2QtbmFtZT4KKyAgICAgICAgICAgIDwvbWV0aG9kPgorICAgICAgICA8L21ldGhvZC1wZXJtaXNzaW9uPgorICAgICAgICA8bWV0aG9kLXBlcm1pc3Npb24+CisgICAgICAgICAgICA8cm9sZS1uYW1lPioqPC9yb2xlLW5hbWU+CisgICAgICAgICAgICA8bWV0aG9kPgorICAgICAgICAgICAgICAgIDxlamItbmFtZT5IZWxsb0VKQjwvZWpiLW5hbWU+CisgICAgICAgICAgICAgICAgPG1ldGhvZC1uYW1lPm1ldGhvZEFueUF1dGhVc2VyPC9tZXRob2QtbmFtZT4KKyAgICAgICAgICAgIDwvbWV0aG9kPgorICAgICAgICA8L21ldGhvZC1wZXJtaXNzaW9uPgorICAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KIDwvZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NtcjgvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY21yOC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMGQxMDkyZi4uNmFmODY3NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY21yOC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY21yOC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTQyLDUwICs0Miw1MCBAQAogICAgIDwvc2VydmxldC1tYXBwaW5nPgogICAgIC0tPgogCi0JPHNlY3VyaXR5LWNvbnN0cmFpbnQ+Ci0JCTx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KKyAgICA8c2VjdXJpdHktY29uc3RyYWludD4KKyAgICAgICAgPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgogICAgICAgICAgICAgPHdlYi1yZXNvdXJjZS1uYW1lPmF1dGh1c2VyPC93ZWItcmVzb3VyY2UtbmFtZT4KLQkJCTx1cmwtcGF0dGVybj4vYXV0aHVzZXI8L3VybC1wYXR0ZXJuPgotCQkJPGh0dHAtbWV0aG9kPkdFVDwvaHR0cC1tZXRob2Q+Ci0JCQk8aHR0cC1tZXRob2Q+UE9TVDwvaHR0cC1tZXRob2Q+Ci0JCTwvd2ViLXJlc291cmNlLWNvbGxlY3Rpb24+Ci0JCTxhdXRoLWNvbnN0cmFpbnQ+Ci0JCQk8cm9sZS1uYW1lPmphdmFVc2Vyczwvcm9sZS1uYW1lPgotCQk8L2F1dGgtY29uc3RyYWludD4KLQk8L3NlY3VyaXR5LWNvbnN0cmFpbnQ+Ci0JPHNlY3VyaXR5LWNvbnN0cmFpbnQ+Ci0JCTx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KKyAgICAgICAgICAgIDx1cmwtcGF0dGVybj4vYXV0aHVzZXI8L3VybC1wYXR0ZXJuPgorICAgICAgICAgICAgPGh0dHAtbWV0aG9kPkdFVDwvaHR0cC1tZXRob2Q+CisgICAgICAgICAgICA8aHR0cC1tZXRob2Q+UE9TVDwvaHR0cC1tZXRob2Q+CisgICAgICAgIDwvd2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CisgICAgICAgIDxhdXRoLWNvbnN0cmFpbnQ+CisgICAgICAgICAgICA8cm9sZS1uYW1lPmphdmFVc2Vyczwvcm9sZS1uYW1lPgorICAgICAgICA8L2F1dGgtY29uc3RyYWludD4KKyAgICA8L3NlY3VyaXR5LWNvbnN0cmFpbnQ+CisgICAgPHNlY3VyaXR5LWNvbnN0cmFpbnQ+CisgICAgICAgIDx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KICAgICAgICAgICAgIDx3ZWItcmVzb3VyY2UtbmFtZT5hbnlhdXRodXNlcjwvd2ViLXJlc291cmNlLW5hbWU+Ci0JCQk8dXJsLXBhdHRlcm4+L2FueWF1dGh1c2VyPC91cmwtcGF0dGVybj4KLQkJCTxodHRwLW1ldGhvZD5HRVQ8L2h0dHAtbWV0aG9kPgotCQkJPGh0dHAtbWV0aG9kPlBPU1Q8L2h0dHAtbWV0aG9kPgotCQk8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgotCQk8YXV0aC1jb25zdHJhaW50PgotCQkJPHJvbGUtbmFtZT4qKjwvcm9sZS1uYW1lPgotCQk8L2F1dGgtY29uc3RyYWludD4KLQk8L3NlY3VyaXR5LWNvbnN0cmFpbnQ+Ci0JPHNlY3VyaXR5LWNvbnN0cmFpbnQ+Ci0JCTx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KKyAgICAgICAgICAgIDx1cmwtcGF0dGVybj4vYW55YXV0aHVzZXI8L3VybC1wYXR0ZXJuPgorICAgICAgICAgICAgPGh0dHAtbWV0aG9kPkdFVDwvaHR0cC1tZXRob2Q+CisgICAgICAgICAgICA8aHR0cC1tZXRob2Q+UE9TVDwvaHR0cC1tZXRob2Q+CisgICAgICAgIDwvd2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CisgICAgICAgIDxhdXRoLWNvbnN0cmFpbnQ+CisgICAgICAgICAgICA8cm9sZS1uYW1lPioqPC9yb2xlLW5hbWU+CisgICAgICAgIDwvYXV0aC1jb25zdHJhaW50PgorICAgIDwvc2VjdXJpdHktY29uc3RyYWludD4KKyAgICA8c2VjdXJpdHktY29uc3RyYWludD4KKyAgICAgICAgPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgogICAgICAgICAgICAgPHdlYi1yZXNvdXJjZS1uYW1lPnN0YXI8L3dlYi1yZXNvdXJjZS1uYW1lPgotCQkJPHVybC1wYXR0ZXJuPi9zdGFyPC91cmwtcGF0dGVybj4KLQkJCTxodHRwLW1ldGhvZD5HRVQ8L2h0dHAtbWV0aG9kPgotCQkJPGh0dHAtbWV0aG9kPlBPU1Q8L2h0dHAtbWV0aG9kPgotCQk8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgotCQk8IS0tIFdpbGwgbm90IGluY2x1ZGUgYW55IGF1dGhlbnRpY2F0ZWQgdXNlciB1bmxlc3MgZGVjbGFyZWQgYXMgc2VjdXJpdHktcm9sZSAtLT4KLQkJPGF1dGgtY29uc3RyYWludD4KLQkJCTxyb2xlLW5hbWU+Kjwvcm9sZS1uYW1lPgotCQkJPHJvbGUtbmFtZT4qKjwvcm9sZS1uYW1lPgotCQk8L2F1dGgtY29uc3RyYWludD4KLQk8L3NlY3VyaXR5LWNvbnN0cmFpbnQ+Ci0JPHNlY3VyaXR5LWNvbnN0cmFpbnQ+Ci0JCTx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KKyAgICAgICAgICAgIDx1cmwtcGF0dGVybj4vc3RhcjwvdXJsLXBhdHRlcm4+CisgICAgICAgICAgICA8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KKyAgICAgICAgICAgIDxodHRwLW1ldGhvZD5QT1NUPC9odHRwLW1ldGhvZD4KKyAgICAgICAgPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KKyAgICAgICAgPCEtLSBXaWxsIG5vdCBpbmNsdWRlIGFueSBhdXRoZW50aWNhdGVkIHVzZXIgdW5sZXNzIGRlY2xhcmVkIGFzIHNlY3VyaXR5LXJvbGUgLS0+CisgICAgICAgIDxhdXRoLWNvbnN0cmFpbnQ+CisgICAgICAgICAgICA8cm9sZS1uYW1lPio8L3JvbGUtbmFtZT4KKyAgICAgICAgICAgIDxyb2xlLW5hbWU+Kio8L3JvbGUtbmFtZT4KKyAgICAgICAgPC9hdXRoLWNvbnN0cmFpbnQ+CisgICAgPC9zZWN1cml0eS1jb25zdHJhaW50PgorICAgIDxzZWN1cml0eS1jb25zdHJhaW50PgorICAgICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CiAgICAgICAgICAgICA8d2ViLXJlc291cmNlLW5hbWU+ZGVueXVuY292ZXJlZHBvc3Q8L3dlYi1yZXNvdXJjZS1uYW1lPgotCQkJPHVybC1wYXR0ZXJuPi9kZW55dW5jb3ZlcmVkcG9zdDwvdXJsLXBhdHRlcm4+Ci0JCQk8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KLQkJPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KLQk8L3NlY3VyaXR5LWNvbnN0cmFpbnQ+CisgICAgICAgICAgICA8dXJsLXBhdHRlcm4+L2Rlbnl1bmNvdmVyZWRwb3N0PC91cmwtcGF0dGVybj4KKyAgICAgICAgICAgIDxodHRwLW1ldGhvZD5HRVQ8L2h0dHAtbWV0aG9kPgorICAgICAgICA8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgorICAgIDwvc2VjdXJpdHktY29uc3RyYWludD4KIAotCTxzZWN1cml0eS1yb2xlPgotCQk8cm9sZS1uYW1lPmphdmFVc2Vyczwvcm9sZS1uYW1lPgotCTwvc2VjdXJpdHktcm9sZT4KKyAgICA8c2VjdXJpdHktcm9sZT4KKyAgICAgICAgPHJvbGUtbmFtZT5qYXZhVXNlcnM8L3JvbGUtbmFtZT4KKyAgICA8L3NlY3VyaXR5LXJvbGU+CiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjbXI4L2VqYi9IZWxsb0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY21yOC9lamIvSGVsbG9FSkIuamF2YQppbmRleCBjMzY1NjBiLi5jNjJjMTE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjbXI4L2VqYi9IZWxsb0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NtcjgvZWpiL0hlbGxvRUpCLmphdmEKQEAgLTI0LDQyICsyNCw0MiBAQAogCiBAU3RhdGVsZXNzCiBwdWJsaWMgY2xhc3MgSGVsbG9FSkIgaW1wbGVtZW50cyBIZWxsbyB7Ci0JQFJlc291cmNlCi0JcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjdHg7Ci0JCi0JcHVibGljIFN0cmluZyBoZWxsbyhTdHJpbmcgbmFtZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvRUpCOjpoZWxsbygnIituYW1lKyInKSIpOwotCQlTdHJpbmcgcHJpbmNpcGFsTmFtZSA9ICJOT05FIjsKLSAgICAgICAgU3RyaW5nIHByaW5jaXBhbFR5cGUgPSAiVU5LTk9XTiI7Ci0JCVByaW5jaXBhbCBwID0gY3R4LmdldENhbGxlclByaW5jaXBhbCgpOwotCQlpZiAocCAhPSBudWxsKSB7Ci0JICAgICAgICBwcmluY2lwYWxOYW1lID0gcC5nZXROYW1lKCk7Ci0JICAgICAgICBwcmluY2lwYWxUeXBlID0gcC5nZXRDbGFzcygpLmdldE5hbWUoKTsKLQkJfQotCQlTdHJpbmcgcmVzdWx0ID0gcHJpbmNpcGFsTmFtZSArICIgaXMgIiArIHByaW5jaXBhbFR5cGU7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGVyIFByaW5jaXBhbDogIiArIHJlc3VsdCk7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQorICAgIEBSZXNvdXJjZQorICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY3R4OwogCi0JcHVibGljIGJvb2xlYW4gaW5Sb2xlKFN0cmluZyByb2xlTmFtZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvRUpCOjppblJvbGUoJyIrcm9sZU5hbWUrIicpIik7Ci0JCS8vdHJ5IHsKLQkJCWJvb2xlYW4gcmVzdWx0ID0gY3R4LmlzQ2FsbGVySW5Sb2xlKHJvbGVOYW1lKTsgCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvRUpCOjppblJvbGUoJyIrcm9sZU5hbWUrIicpIC0gIiArIHJlc3VsdCk7Ci0JCQlyZXR1cm4gcmVzdWx0OwotCQkvL30KLQkJLy9jYXRjaCAoRXhjZXB0aW9uIGV4YykgewotCQkvLwlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvRUpCIC0gRXhjZXB0aW9uOiAiICsgZXhjLnRvU3RyaW5nKCkpOwotCQkvLwlleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0JCS8vCXJldHVybiBmYWxzZTsKLQkJLy99Ci0JfQorICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0VKQjo6aGVsbG8oJyIrbmFtZSsiJykiKTsKKyAgICAgICAgU3RyaW5nIHByaW5jaXBhbE5hbWUgPSAiTk9ORSI7CisgICAgICAgIFN0cmluZyBwcmluY2lwYWxUeXBlID0gIlVOS05PV04iOworICAgICAgICBQcmluY2lwYWwgcCA9IGN0eC5nZXRDYWxsZXJQcmluY2lwYWwoKTsKKyAgICAgICAgaWYgKHAgIT0gbnVsbCkgeworICAgICAgICAgICAgcHJpbmNpcGFsTmFtZSA9IHAuZ2V0TmFtZSgpOworICAgICAgICAgICAgcHJpbmNpcGFsVHlwZSA9IHAuZ2V0Q2xhc3MoKS5nZXROYW1lKCk7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHByaW5jaXBhbE5hbWUgKyAiIGlzICIgKyBwcmluY2lwYWxUeXBlOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxlciBQcmluY2lwYWw6ICIgKyByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGluUm9sZShTdHJpbmcgcm9sZU5hbWUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0VKQjo6aW5Sb2xlKCciK3JvbGVOYW1lKyInKSIpOworICAgICAgICAvL3RyeSB7CisgICAgICAgICAgICBib29sZWFuIHJlc3VsdCA9IGN0eC5pc0NhbGxlckluUm9sZShyb2xlTmFtZSk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvRUpCOjppblJvbGUoJyIrcm9sZU5hbWUrIicpIC0gIiArIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAvL30KKyAgICAgICAgLy9jYXRjaCAoRXhjZXB0aW9uIGV4YykgeworICAgICAgICAvLyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvRUpCIC0gRXhjZXB0aW9uOiAiICsgZXhjLnRvU3RyaW5nKCkpOworICAgICAgICAvLyAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIC8vICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy99CisgICAgfQogCiAgICAgcHVibGljIHZvaWQgbWV0aG9kQXV0aFVzZXIoKSB7Ci0gICAgCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9FSkI6Om1ldGhvZEF1dGhVc2VyKCkiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0VKQjo6bWV0aG9kQXV0aFVzZXIoKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIG1ldGhvZEFueUF1dGhVc2VyKCkgewotICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvRUpCOjptZXRob2RBbnlBdXRoVXNlcigpIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9FSkI6Om1ldGhvZEFueUF1dGhVc2VyKCkiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjbXI4L2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjbXI4L2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEKaW5kZXggNzk1MjRjMy4uZDBjMzRkNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY21yOC9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NtcjgvZWpiL0hlbGxvU3RhdGVmdWxFSkIuamF2YQpAQCAtMzAsNDkgKzMwLDQ5IEBACiAKIEBTdGF0ZWZ1bAogcHVibGljIGNsYXNzIEhlbGxvU3RhdGVmdWxFSkIgaW1wbGVtZW50cyBIZWxsb1N0YXRlZnVsIHsKLQlAUmVzb3VyY2UKLQlwcml2YXRlIFNlc3Npb25Db250ZXh0IGN0eDsKKyAgICBAUmVzb3VyY2UKKyAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGN0eDsKIAotCUBQb3N0Q29uc3RydWN0Ci0JcHVibGljIHZvaWQgcG9zdENvbnN0cnVjdGlvbigpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlZnVsRUpCOjpwb3N0Q29uc3RydWN0aW9uKCkiKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGhlbGxvKFN0cmluZyBuYW1lKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TdGF0ZWZ1bEVKQjo6aGVsbG8oJyIrbmFtZSsiJykiKTsKLQkJU3RyaW5nIHByaW5jaXBhbE5hbWUgPSAiTk9ORSI7Ci0gICAgICAgIFN0cmluZyBwcmluY2lwYWxUeXBlID0gIlVOS05PV04iOwotCQlQcmluY2lwYWwgcCA9IGN0eC5nZXRDYWxsZXJQcmluY2lwYWwoKTsKLQkJaWYgKHAgIT0gbnVsbCkgewotCSAgICAgICAgcHJpbmNpcGFsTmFtZSA9IHAuZ2V0TmFtZSgpOwotCSAgICAgICAgcHJpbmNpcGFsVHlwZSA9IHAuZ2V0Q2xhc3MoKS5nZXROYW1lKCk7Ci0JCX0KLQkJU3RyaW5nIHJlc3VsdCA9IHByaW5jaXBhbE5hbWUgKyAiIGlzICIgKyBwcmluY2lwYWxUeXBlOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxlciBQcmluY2lwYWw6ICIgKyByZXN1bHQpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBib29sZWFuIGluUm9sZShTdHJpbmcgcm9sZU5hbWUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlZnVsRUpCOjppblJvbGUoJyIrcm9sZU5hbWUrIicpIik7Ci0JCS8vdHJ5IHsKLQkJCWJvb2xlYW4gcmVzdWx0ID0gY3R4LmlzQ2FsbGVySW5Sb2xlKHJvbGVOYW1lKTsgCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVmdWxFSkI6OmluUm9sZSgnIityb2xlTmFtZSsiJykgLSAiICsgcmVzdWx0KTsKLQkJCXJldHVybiByZXN1bHQ7Ci0JCS8vfQotCQkvL2NhdGNoIChFeGNlcHRpb24gZXhjKSB7Ci0JCS8vCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TdGF0ZWZ1bEVKQiAtIEV4Y2VwdGlvbjogIiArIGV4Yy50b1N0cmluZygpKTsKLQkJLy8JZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCQkvLwlyZXR1cm4gZmFsc2U7Ci0JCS8vfQotCX0KLQotCUBSb2xlc0FsbG93ZWQoeyJqYXZhVXNlcnMifSkKLQlwdWJsaWMgdm9pZCBtZXRob2RBdXRoVXNlcigpIHsKLSAgICAJU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlZnVsRUpCOjptZXRob2RBdXRoVXNlcigpIik7CisgICAgQFBvc3RDb25zdHJ1Y3QKKyAgICBwdWJsaWMgdm9pZCBwb3N0Q29uc3RydWN0aW9uKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVmdWxFSkI6OnBvc3RDb25zdHJ1Y3Rpb24oKSIpOwogICAgIH0KIAotCUBSb2xlc0FsbG93ZWQoeyIqKiJ9KQotCXB1YmxpYyB2b2lkIG1ldGhvZEFueUF1dGhVc2VyKCkgewotICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVmdWxFSkI6Om1ldGhvZEFueUF1dGhVc2VyKCkiKTsKKyAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKFN0cmluZyBuYW1lKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TdGF0ZWZ1bEVKQjo6aGVsbG8oJyIrbmFtZSsiJykiKTsKKyAgICAgICAgU3RyaW5nIHByaW5jaXBhbE5hbWUgPSAiTk9ORSI7CisgICAgICAgIFN0cmluZyBwcmluY2lwYWxUeXBlID0gIlVOS05PV04iOworICAgICAgICBQcmluY2lwYWwgcCA9IGN0eC5nZXRDYWxsZXJQcmluY2lwYWwoKTsKKyAgICAgICAgaWYgKHAgIT0gbnVsbCkgeworICAgICAgICAgICAgcHJpbmNpcGFsTmFtZSA9IHAuZ2V0TmFtZSgpOworICAgICAgICAgICAgcHJpbmNpcGFsVHlwZSA9IHAuZ2V0Q2xhc3MoKS5nZXROYW1lKCk7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHByaW5jaXBhbE5hbWUgKyAiIGlzICIgKyBwcmluY2lwYWxUeXBlOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxlciBQcmluY2lwYWw6ICIgKyByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGluUm9sZShTdHJpbmcgcm9sZU5hbWUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlZnVsRUpCOjppblJvbGUoJyIrcm9sZU5hbWUrIicpIik7CisgICAgICAgIC8vdHJ5IHsKKyAgICAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gY3R4LmlzQ2FsbGVySW5Sb2xlKHJvbGVOYW1lKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TdGF0ZWZ1bEVKQjo6aW5Sb2xlKCciK3JvbGVOYW1lKyInKSAtICIgKyByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgLy99CisgICAgICAgIC8vY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHsKKyAgICAgICAgLy8gICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlZnVsRUpCIC0gRXhjZXB0aW9uOiAiICsgZXhjLnRvU3RyaW5nKCkpOworICAgICAgICAvLyAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIC8vICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy99CisgICAgfQorCisgICAgQFJvbGVzQWxsb3dlZCh7ImphdmFVc2VycyJ9KQorICAgIHB1YmxpYyB2b2lkIG1ldGhvZEF1dGhVc2VyKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVmdWxFSkI6Om1ldGhvZEF1dGhVc2VyKCkiKTsKKyAgICB9CisKKyAgICBAUm9sZXNBbGxvd2VkKHsiKioifSkKKyAgICBwdWJsaWMgdm9pZCBtZXRob2RBbnlBdXRoVXNlcigpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlZnVsRUpCOjptZXRob2RBbnlBdXRoVXNlcigpIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY21yOC93ZWIvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY21yOC93ZWIvU2VydmxldC5qYXZhCmluZGV4IDY3MjA0Y2IuLjg1ODFkZDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2Ntcjgvd2ViL1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjbXI4L3dlYi9TZXJ2bGV0LmphdmEKQEAgLTMxLDExMyArMzEsMTEzIEBACiBAV2ViU2VydmxldChuYW1lID0gIlNlcnZsZXQiLCB1cmxQYXR0ZXJucyA9IHsiL3NlcnZsZXQiLCIvYXV0aHVzZXIiLCIvYW55YXV0aHVzZXIiLCIvc3RhciIsIi9kZW55dW5jb3ZlcmVkcG9zdCJ9KQogcHVibGljIGNsYXNzIFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKLQlARUpCKGJlYW5OYW1lID0gIkhlbGxvRUpCIiwgYmVhbkludGVyZmFjZSA9IEhlbGxvLmNsYXNzKQotCXByaXZhdGUgSGVsbG8gaGVsbG9TdGF0ZWxlc3M7CisgICAgQEVKQihiZWFuTmFtZSA9ICJIZWxsb0VKQiIsIGJlYW5JbnRlcmZhY2UgPSBIZWxsby5jbGFzcykKKyAgICBwcml2YXRlIEhlbGxvIGhlbGxvU3RhdGVsZXNzOwogCi0JQEVKQihiZWFuTmFtZSA9ICJIZWxsb1N0YXRlZnVsRUpCIiwgYmVhbkludGVyZmFjZSA9IEhlbGxvU3RhdGVmdWwuY2xhc3MpCi0JcHJpdmF0ZSBIZWxsb1N0YXRlZnVsIGhlbGxvU3RhdGVmdWw7CisgICAgQEVKQihiZWFuTmFtZSA9ICJIZWxsb1N0YXRlZnVsRUpCIiwgYmVhbkludGVyZmFjZSA9IEhlbGxvU3RhdGVmdWwuY2xhc3MpCisgICAgcHJpdmF0ZSBIZWxsb1N0YXRlZnVsIGhlbGxvU3RhdGVmdWw7CiAKLQlwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLmluaXQoY29uZmlnKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJJbiBqYWNjbXI4OjpTZXJ2bGV0Li4uIGluaXQoKSIpOwotCX0KKyAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBqYWNjbXI4OjpTZXJ2bGV0Li4uIGluaXQoKSIpOworICAgIH0KIAotCXB1YmxpYyB2b2lkIHNlcnZpY2UoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKLQkJUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKKyAgICBwdWJsaWMgdm9pZCBzZXJ2aWNlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKyAgICAgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CiAKLQkJU3RyaW5nIG1vZGUgPSByZXEuZ2V0UGFyYW1ldGVyKCJtb2RlIik7Ci0JCWlmIChtb2RlID09IG51bGwpIG1vZGUgPSAic3RhdGVmdWwiOwotCQltb2RlID0gVVJMRGVjb2Rlci5kZWNvZGUobW9kZSwiVVRGLTgiKTsKLQkJU3RyaW5nIG5hbWUgPSByZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7Ci0JCWlmIChuYW1lID09IG51bGwpIG5hbWUgPSAiTm90RGVjbGFyZWQiOwotCQluYW1lID0gVVJMRGVjb2Rlci5kZWNvZGUobmFtZSwiVVRGLTgiKTsKKyAgICAgICAgU3RyaW5nIG1vZGUgPSByZXEuZ2V0UGFyYW1ldGVyKCJtb2RlIik7CisgICAgICAgIGlmIChtb2RlID09IG51bGwpIG1vZGUgPSAic3RhdGVmdWwiOworICAgICAgICBtb2RlID0gVVJMRGVjb2Rlci5kZWNvZGUobW9kZSwiVVRGLTgiKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSByZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CisgICAgICAgIGlmIChuYW1lID09IG51bGwpIG5hbWUgPSAiTm90RGVjbGFyZWQiOworICAgICAgICBuYW1lID0gVVJMRGVjb2Rlci5kZWNvZGUobmFtZSwiVVRGLTgiKTsKIAotCQkvLyBFSkIgaW5mb3JtYXRpb24KLQkJU3RyaW5nIGNhbGxlclByaW5jaXBhbCA9ICJOT05FIjsKLQkJYm9vbGVhbiBpc0luRUpCUm9sZSA9IGZhbHNlOwotCQlib29sZWFuIGlzQW55QXV0aFVzZXJFSkIgPSBmYWxzZTsKLQkJU3RyaW5nIGludm9rZUFueUF1dGhVc2VyID0gIk5vIjsKLQkJU3RyaW5nIGludm9rZUF1dGhVc2VyID0gIk5vIjsKLQkJaWYgKCJzdGF0ZWZ1bCIuZXF1YWxzKG1vZGUpKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkludm9raW5nIFN0YXRlZnVsIEVKQiIpOwotCQkJY2FsbGVyUHJpbmNpcGFsID0gaGVsbG9TdGF0ZWZ1bC5oZWxsbyhuYW1lKTsKLQkJCWlzQW55QXV0aFVzZXJFSkIgPSBoZWxsb1N0YXRlZnVsLmluUm9sZSgiKioiKTsKLQkJCWlzSW5FSkJSb2xlID0gaGVsbG9TdGF0ZWZ1bC5pblJvbGUobmFtZSk7Ci0JCQl0cnkgewotCQkJCWhlbGxvU3RhdGVmdWwubWV0aG9kQW55QXV0aFVzZXIoKTsKLQkJCQlpbnZva2VBbnlBdXRoVXNlciA9ICJZZXMiOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUxFRCBpbnZva2Ugb2YgbWV0aG9kQW55QXV0aFVzZXIoKSIpOwotCQkJCWludm9rZUFueUF1dGhVc2VyID0gZXhjLnRvU3RyaW5nKCk7Ci0JCQl9Ci0JCQl0cnkgewotCQkJCWhlbGxvU3RhdGVmdWwubWV0aG9kQXV0aFVzZXIoKTsKLQkJCQlpbnZva2VBdXRoVXNlciA9ICJZZXMiOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUxFRCBpbnZva2Ugb2YgbWV0aG9kQXV0aFVzZXIoKSIpOwotCQkJCWludm9rZUF1dGhVc2VyID0gZXhjLnRvU3RyaW5nKCk7Ci0JCQl9Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBpbnZva2VkIFN0YXRlZnVsIEVKQiIpOwotCQl9IGVsc2UgaWYgKCJzdGF0ZWxlc3MiLmVxdWFscyhtb2RlKSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJJbnZva2luZyBTdGF0ZWxlc3MgRUpCIik7Ci0JCQljYWxsZXJQcmluY2lwYWwgPSBoZWxsb1N0YXRlbGVzcy5oZWxsbyhuYW1lKTsKLQkJCWlzQW55QXV0aFVzZXJFSkIgPSBoZWxsb1N0YXRlbGVzcy5pblJvbGUoIioqIik7Ci0JCQlpc0luRUpCUm9sZSA9IGhlbGxvU3RhdGVsZXNzLmluUm9sZShuYW1lKTsKLQkJCXRyeSB7Ci0JCQkJaGVsbG9TdGF0ZWxlc3MubWV0aG9kQW55QXV0aFVzZXIoKTsKLQkJCQlpbnZva2VBbnlBdXRoVXNlciA9ICJZZXMiOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUxFRCBpbnZva2Ugb2YgbWV0aG9kQW55QXV0aFVzZXIoKSIpOwotCQkJCWludm9rZUFueUF1dGhVc2VyID0gZXhjLnRvU3RyaW5nKCk7Ci0JCQl9Ci0JCQl0cnkgewotCQkJCWhlbGxvU3RhdGVsZXNzLm1ldGhvZEF1dGhVc2VyKCk7Ci0JCQkJaW52b2tlQXV0aFVzZXIgPSAiWWVzIjsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZXhjKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJGQUlMRUQgaW52b2tlIG9mIG1ldGhvZEF1dGhVc2VyKCkiKTsKLQkJCQlpbnZva2VBdXRoVXNlciA9IGV4Yy50b1N0cmluZygpOwotCQkJfQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgaW52b2tlZCBTdGF0ZWxlc3MgRUpCIik7Ci0JCX0gZWxzZSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIk1vZGU6ICIgKyBtb2RlKTsKLQkJfQorICAgICAgICAvLyBFSkIgaW5mb3JtYXRpb24KKyAgICAgICAgU3RyaW5nIGNhbGxlclByaW5jaXBhbCA9ICJOT05FIjsKKyAgICAgICAgYm9vbGVhbiBpc0luRUpCUm9sZSA9IGZhbHNlOworICAgICAgICBib29sZWFuIGlzQW55QXV0aFVzZXJFSkIgPSBmYWxzZTsKKyAgICAgICAgU3RyaW5nIGludm9rZUFueUF1dGhVc2VyID0gIk5vIjsKKyAgICAgICAgU3RyaW5nIGludm9rZUF1dGhVc2VyID0gIk5vIjsKKyAgICAgICAgaWYgKCJzdGF0ZWZ1bCIuZXF1YWxzKG1vZGUpKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludm9raW5nIFN0YXRlZnVsIEVKQiIpOworICAgICAgICAgICAgY2FsbGVyUHJpbmNpcGFsID0gaGVsbG9TdGF0ZWZ1bC5oZWxsbyhuYW1lKTsKKyAgICAgICAgICAgIGlzQW55QXV0aFVzZXJFSkIgPSBoZWxsb1N0YXRlZnVsLmluUm9sZSgiKioiKTsKKyAgICAgICAgICAgIGlzSW5FSkJSb2xlID0gaGVsbG9TdGF0ZWZ1bC5pblJvbGUobmFtZSk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGhlbGxvU3RhdGVmdWwubWV0aG9kQW55QXV0aFVzZXIoKTsKKyAgICAgICAgICAgICAgICBpbnZva2VBbnlBdXRoVXNlciA9ICJZZXMiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUxFRCBpbnZva2Ugb2YgbWV0aG9kQW55QXV0aFVzZXIoKSIpOworICAgICAgICAgICAgICAgIGludm9rZUFueUF1dGhVc2VyID0gZXhjLnRvU3RyaW5nKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGhlbGxvU3RhdGVmdWwubWV0aG9kQXV0aFVzZXIoKTsKKyAgICAgICAgICAgICAgICBpbnZva2VBdXRoVXNlciA9ICJZZXMiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUxFRCBpbnZva2Ugb2YgbWV0aG9kQXV0aFVzZXIoKSIpOworICAgICAgICAgICAgICAgIGludm9rZUF1dGhVc2VyID0gZXhjLnRvU3RyaW5nKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBpbnZva2VkIFN0YXRlZnVsIEVKQiIpOworICAgICAgICB9IGVsc2UgaWYgKCJzdGF0ZWxlc3MiLmVxdWFscyhtb2RlKSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnZva2luZyBTdGF0ZWxlc3MgRUpCIik7CisgICAgICAgICAgICBjYWxsZXJQcmluY2lwYWwgPSBoZWxsb1N0YXRlbGVzcy5oZWxsbyhuYW1lKTsKKyAgICAgICAgICAgIGlzQW55QXV0aFVzZXJFSkIgPSBoZWxsb1N0YXRlbGVzcy5pblJvbGUoIioqIik7CisgICAgICAgICAgICBpc0luRUpCUm9sZSA9IGhlbGxvU3RhdGVsZXNzLmluUm9sZShuYW1lKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaGVsbG9TdGF0ZWxlc3MubWV0aG9kQW55QXV0aFVzZXIoKTsKKyAgICAgICAgICAgICAgICBpbnZva2VBbnlBdXRoVXNlciA9ICJZZXMiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUxFRCBpbnZva2Ugb2YgbWV0aG9kQW55QXV0aFVzZXIoKSIpOworICAgICAgICAgICAgICAgIGludm9rZUFueUF1dGhVc2VyID0gZXhjLnRvU3RyaW5nKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGhlbGxvU3RhdGVsZXNzLm1ldGhvZEF1dGhVc2VyKCk7CisgICAgICAgICAgICAgICAgaW52b2tlQXV0aFVzZXIgPSAiWWVzIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXhjKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGQUlMRUQgaW52b2tlIG9mIG1ldGhvZEF1dGhVc2VyKCkiKTsKKyAgICAgICAgICAgICAgICBpbnZva2VBdXRoVXNlciA9IGV4Yy50b1N0cmluZygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgaW52b2tlZCBTdGF0ZWxlc3MgRUpCIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1vZGU6ICIgKyBtb2RlKTsKKyAgICAgICAgfQogCi0JCS8vIFNlcnZsZXQgaW5mb3JtYXRpb24KLQkJU3RyaW5nIHByaW5jaXBhbE5hbWUgPSAiTk9ORSI7Ci0JCVN0cmluZyBwcmluY2lwYWxUeXBlID0gIlVOS05PV04iOwotCQlQcmluY2lwYWwgcCA9IHJlcS5nZXRVc2VyUHJpbmNpcGFsKCk7Ci0JCWlmIChwICE9IG51bGwpIHsKLQkJCXByaW5jaXBhbE5hbWUgPSBwLmdldE5hbWUoKTsKLQkJCXByaW5jaXBhbFR5cGUgPSBwLmdldENsYXNzKCkuZ2V0TmFtZSgpOwotCQl9Ci0JCVN0cmluZyB1c2VyUHJpbmNpcGFsID0gcHJpbmNpcGFsTmFtZSArICIgaXMgIiArIHByaW5jaXBhbFR5cGU7IAotCQlib29sZWFuIGlzQW55QXV0aFVzZXJXZWIgPSByZXEuaXNVc2VySW5Sb2xlKCIqKiIpOwotCQlib29sZWFuIGlzSW5XZWJSb2xlID0gcmVxLmlzVXNlckluUm9sZShuYW1lKTsKKyAgICAgICAgLy8gU2VydmxldCBpbmZvcm1hdGlvbgorICAgICAgICBTdHJpbmcgcHJpbmNpcGFsTmFtZSA9ICJOT05FIjsKKyAgICAgICAgU3RyaW5nIHByaW5jaXBhbFR5cGUgPSAiVU5LTk9XTiI7CisgICAgICAgIFByaW5jaXBhbCBwID0gcmVxLmdldFVzZXJQcmluY2lwYWwoKTsKKyAgICAgICAgaWYgKHAgIT0gbnVsbCkgeworICAgICAgICAgICAgcHJpbmNpcGFsTmFtZSA9IHAuZ2V0TmFtZSgpOworICAgICAgICAgICAgcHJpbmNpcGFsVHlwZSA9IHAuZ2V0Q2xhc3MoKS5nZXROYW1lKCk7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHVzZXJQcmluY2lwYWwgPSBwcmluY2lwYWxOYW1lICsgIiBpcyAiICsgcHJpbmNpcGFsVHlwZTsKKyAgICAgICAgYm9vbGVhbiBpc0FueUF1dGhVc2VyV2ViID0gcmVxLmlzVXNlckluUm9sZSgiKioiKTsKKyAgICAgICAgYm9vbGVhbiBpc0luV2ViUm9sZSA9IHJlcS5pc1VzZXJJblJvbGUobmFtZSk7CiAKLQkJb3V0LnByaW50bG4oIjxIVE1MPiA8SEVBRD4gPFRJVExFPlNlcnZsZXQgT3V0cHV0PC9USVRMRT4gPC9IRUFEPiA8Qk9EWT4iKTsKLQkJb3V0LnByaW50bG4oIjxDRU5URVI+SkFDQyBNUjggU2VydmxldDwvQ0VOVEVSPiA8cD4gIik7Ci0JCW91dC5wcmludGxuKCIgUmVxdWVzdCBVUkw6ICIgKyByZXEuZ2V0UmVxdWVzdFVSTCgpICsgIjxicj4iKTsKLQkJb3V0LnByaW50bG4oIiBIVFRQIE1ldGhvZDogIiArIHJlcS5nZXRNZXRob2QoKSArICI8YnI+Iik7Ci0JCW91dC5wcmludGxuKCJDb250ZXh0IFBhdGg6ICIgKyByZXEuZ2V0Q29udGV4dFBhdGgoKSArICI8YnI+Iik7Ci0JCW91dC5wcmludGxuKCJTZXJ2bGV0IFBhdGg6ICIgKyByZXEuZ2V0U2VydmxldFBhdGgoKSArICI8YnI+Iik7Ci0JCW91dC5wcmludGxuKCI8YnI+IDxDRU5URVI+UmVzdWx0czwvQ0VOVEVSPiA8cD4gIik7Ci0JCW91dC5wcmludGxuKCJFSkIgQ2FsbGVyIFByaW5jaXBhbDogIiArIGNhbGxlclByaW5jaXBhbCArICI8YnI+Iik7Ci0JCW91dC5wcmludGxuKCJFSkIgaXNDYWxsZXJJblJvbGU6ICIgKyBpc0luRUpCUm9sZSArICI8YnI+Iik7Ci0JCW91dC5wcmludGxuKCJFSkIgaXNVc2VySW5BbnlBdXRoVXNlclJvbGU6ICIgKyBpc0FueUF1dGhVc2VyRUpCICsgIjxicj4iKTsKLQkJb3V0LnByaW50bG4oIkVKQiBJbnZva2UgQW55QXV0aFVzZXI6ICIgKyBpbnZva2VBbnlBdXRoVXNlciArICI8YnI+Iik7Ci0JCW91dC5wcmludGxuKCJFSkIgSW52b2tlIEF1dGhVc2VyOiAiICsgaW52b2tlQXV0aFVzZXIgKyAiPGJyPiIpOwotCQlvdXQucHJpbnRsbigiV0VCIFVzZXIgUHJpbmNpcGFsOiAiICsgdXNlclByaW5jaXBhbCArICI8YnI+Iik7Ci0JCW91dC5wcmludGxuKCJXRUIgaXNVc2VySW5Sb2xlOiAiICsgaXNJbldlYlJvbGUgKyAiPGJyPiIpOwotCQlvdXQucHJpbnRsbigiV0VCIGlzVXNlckluQW55QXV0aFVzZXJSb2xlOiAiICsgaXNBbnlBdXRoVXNlcldlYiArICI8YnI+Iik7Ci0JCW91dC5wcmludGxuKCI8L0JPRFk+IDwvSFRNTD4gIik7Ci0JfQorICAgICAgICBvdXQucHJpbnRsbigiPEhUTUw+IDxIRUFEPiA8VElUTEU+U2VydmxldCBPdXRwdXQ8L1RJVExFPiA8L0hFQUQ+IDxCT0RZPiIpOworICAgICAgICBvdXQucHJpbnRsbigiPENFTlRFUj5KQUNDIE1SOCBTZXJ2bGV0PC9DRU5URVI+IDxwPiAiKTsKKyAgICAgICAgb3V0LnByaW50bG4oIiBSZXF1ZXN0IFVSTDogIiArIHJlcS5nZXRSZXF1ZXN0VVJMKCkgKyAiPGJyPiIpOworICAgICAgICBvdXQucHJpbnRsbigiIEhUVFAgTWV0aG9kOiAiICsgcmVxLmdldE1ldGhvZCgpICsgIjxicj4iKTsKKyAgICAgICAgb3V0LnByaW50bG4oIkNvbnRleHQgUGF0aDogIiArIHJlcS5nZXRDb250ZXh0UGF0aCgpICsgIjxicj4iKTsKKyAgICAgICAgb3V0LnByaW50bG4oIlNlcnZsZXQgUGF0aDogIiArIHJlcS5nZXRTZXJ2bGV0UGF0aCgpICsgIjxicj4iKTsKKyAgICAgICAgb3V0LnByaW50bG4oIjxicj4gPENFTlRFUj5SZXN1bHRzPC9DRU5URVI+IDxwPiAiKTsKKyAgICAgICAgb3V0LnByaW50bG4oIkVKQiBDYWxsZXIgUHJpbmNpcGFsOiAiICsgY2FsbGVyUHJpbmNpcGFsICsgIjxicj4iKTsKKyAgICAgICAgb3V0LnByaW50bG4oIkVKQiBpc0NhbGxlckluUm9sZTogIiArIGlzSW5FSkJSb2xlICsgIjxicj4iKTsKKyAgICAgICAgb3V0LnByaW50bG4oIkVKQiBpc1VzZXJJbkFueUF1dGhVc2VyUm9sZTogIiArIGlzQW55QXV0aFVzZXJFSkIgKyAiPGJyPiIpOworICAgICAgICBvdXQucHJpbnRsbigiRUpCIEludm9rZSBBbnlBdXRoVXNlcjogIiArIGludm9rZUFueUF1dGhVc2VyICsgIjxicj4iKTsKKyAgICAgICAgb3V0LnByaW50bG4oIkVKQiBJbnZva2UgQXV0aFVzZXI6ICIgKyBpbnZva2VBdXRoVXNlciArICI8YnI+Iik7CisgICAgICAgIG91dC5wcmludGxuKCJXRUIgVXNlciBQcmluY2lwYWw6ICIgKyB1c2VyUHJpbmNpcGFsICsgIjxicj4iKTsKKyAgICAgICAgb3V0LnByaW50bG4oIldFQiBpc1VzZXJJblJvbGU6ICIgKyBpc0luV2ViUm9sZSArICI8YnI+Iik7CisgICAgICAgIG91dC5wcmludGxuKCJXRUIgaXNVc2VySW5BbnlBdXRoVXNlclJvbGU6ICIgKyBpc0FueUF1dGhVc2VyV2ViICsgIjxicj4iKTsKKyAgICAgICAgb3V0LnByaW50bG4oIjwvQk9EWT4gPC9IVE1MPiAiKTsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBkZXN0cm95KCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIGphY2Ntcjg6OlNlcnZsZXQgZGVzdHJveSIpOwotCX0KKyAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGphY2Ntcjg6OlNlcnZsZXQgZGVzdHJveSIpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pkYmNyZWFsbS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamRiY3JlYWxtL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWJkYThkOS4uMTg3YjMyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamRiY3JlYWxtL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamRiY3JlYWxtL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5Ii8+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pkYmNyZWFsbS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qZGJjcmVhbG0vYnVpbGQueG1sCmluZGV4IDBmYTNiM2MuLjFjMWZlYjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pkYmNyZWFsbS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamRiY3JlYWxtL2J1aWxkLnhtbApAQCAtMzMsMzEgKzMzLDMxIEBACiAgICAmY29tbW9uUnVuOwogICAgJmNvbW1vblNlY3VyaXR5OwogICAgJnRlc3RQcm9wZXJ0aWVzOwotICAgIAorCiAgICA8cHJvcGVydHkgZmlsZT0iLi9jb25maWcucHJvcGVydGllcyIvPgogCiAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iZGlzcGxheS1oZWFkZXIiPgotCSAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KLQkgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkIi8+Ci0JICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3kiLz4KLQkgICA8YW50Y2FsbCB0YXJnZXQ9InJ1biIvPgotCSAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3kiLz4KLQkgICA8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAiLz4KKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+CisgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgorICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95Ii8+CisgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4iLz4KKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95Ii8+CisgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CiAgICA8L3RhcmdldD4KIAogICAgPHRhcmdldCBuYW1lPSJhbGwtb3JhY2xlIiBkZXBlbmRzPSJkaXNwbGF5LWhlYWRlciI+Ci0JICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cC1vcmFjbGUiLz4KLQkgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkIi8+Ci0JICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3kiLz4KLQkgICA8YW50Y2FsbCB0YXJnZXQ9InJ1biIvPgotCSAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3kiLz4KLQkgICA8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAtb3JhY2xlIi8+CisgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cC1vcmFjbGUiLz4KKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkIi8+CisgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3kiLz4KKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1biIvPgorICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3kiLz4KKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAtb3JhY2xlIi8+CiAgICA8L3RhcmdldD4KIAogICAgPHRhcmdldCBuYW1lPSJkaXNwbGF5LWhlYWRlciI+CiAgICAgIDxlY2hvIG1lc3NhZ2U9Ii0tPlJ1bm5pbmcgJHthbnQucHJvamVjdC5uYW1lfSB0ZXN0cyBmcm9tICR7YmFzZWRpcn0gLi4uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1kYi1zY2hlbWEiLz4KICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1kYi11c3JncnBzIi8+CkBAIC05NSw3ICs5NSw3IEBACiAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9vamRiYzE0Lmphcjoke3MxYXN0ZXN0LmNsYXNzcGF0aH0iIC8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtZGItc2NoZW1hLW9yYWNsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIHNxbCBzdGF0ZW1lbnQgYXQgJHtiYXNlZGlyfSBmcm9tICR7ZGVsZXRlLnNxbC5maWxlfSIgCisgICAgICA8ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgc3FsIHN0YXRlbWVudCBhdCAke2Jhc2VkaXJ9IGZyb20gJHtkZWxldGUuc3FsLmZpbGV9IgogICAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgICAgPHNxbAogICAgICAgICBkcml2ZXI9IiR7b3JhY2xlLmRiLmRyaXZlcn0iCkBAIC0xMjQsNyArMTI0LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLWRiLXNjaGVtYSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIHNxbCBzdGF0ZW1lbnQgYXQgJHtiYXNlZGlyfSBmcm9tICR7ZGVsZXRlLnNxbC5maWxlfSIgCisgICAgICA8ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgc3FsIHN0YXRlbWVudCBhdCAke2Jhc2VkaXJ9IGZyb20gJHtkZWxldGUuc3FsLmZpbGV9IgogICAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgICAgPHNxbAogICAgICAgICBkcml2ZXI9IiR7ZGVyYnkuZGIuZHJpdmVyfSIKQEAgLTE0NCw3ICsxNDQsNyBAQAogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjb20uc3VuLmRldnRlc3RzLnNlY3VyaXR5LmpkYmNyZWFsbS5Qb3B1bGF0ZURCIiBmb3JrPSJ0cnVlIj4KICAgICAgICAgPGNsYXNzcGF0aD4KLSAgCSAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtidWlsZC5jbGFzc2VzLmRpcn06JHtzMWFzdGVzdC5jbGFzc3BhdGh9Ii8+CisgICAgICAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7czFhc3Rlc3QuY2xhc3NwYXRofSIvPgogICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPGFyZyB2YWx1ZT0iLXVybCIvPgogICAgICAgICA8YXJnIHZhbHVlPSIke2RlcmJ5LmRiLnVybH0iLz4KQEAgLTE2MCw3ICsxNjAsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWRiLXVzcmdycHMtb3JhY2xlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5zdW4uZGV2dGVzdHMuc2VjdXJpdHkuamRiY3JlYWxtLlBvcHVsYXRlREIiIGZvcms9InRydWUiPgogICAgICAgICA8Y2xhc3NwYXRoPgotICAJICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL29qZGJjMTQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7czFhc3Rlc3QuY2xhc3NwYXRofSIvPgorICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL29qZGJjMTQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7czFhc3Rlc3QuY2xhc3NwYXRofSIvPgogICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPGFyZyB2YWx1ZT0iLXVybCIvPgogICAgICAgICA8YXJnIHZhbHVlPSIke29yYWNsZS5kYi51cmx9Ii8+CkBAIC0xNzYsNyArMTc2LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0ibW9kaWZ5LWRvbWFpbi14bWwiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjcmVhbG0tY29ubmVjdGlvbi1wb29sIj4KLSAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRiLmRhdGFzb3VyY2UuY2xhc3NuYW1lIiAKKyAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRiLmRhdGFzb3VyY2UuY2xhc3NuYW1lIgogICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7ZGVyYnkuZGIuZGF0YXNvdXJjZS5jbGFzc25hbWV9Ii8+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkYi5wb3J0IiB2YWx1ZT0iJHtkZXJieS5kYi5wb3J0fSIvPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGIuaG9zdCIgdmFsdWU9IiR7ZGVyYnkuZGIuaG9zdH0iLz4KQEAgLTIwMSw3ICsyMDEsNyBAQAogCiA8IS0tCiAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiY3JlYWxtLWNvbm5lY3Rpb24tcG9vbCI+Ci0gICAgICAgICAgIDxwYXJhbSBuYW1lPSJkYi5kYXRhc291cmNlLmNsYXNzbmFtZSIgCisgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkYi5kYXRhc291cmNlLmNsYXNzbmFtZSIKICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke29yYWNsZS5kYi5kYXRhc291cmNlLmNsYXNzbmFtZX0iLz4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRiLnBvcnQiIHZhbHVlPSIke29yYWNsZS5kYi5wb3J0fSIvPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGIuaG9zdCIgdmFsdWU9IiR7b3JhY2xlLmRiLmhvc3R9Ii8+CkBAIC0yMTgsNyArMjE4LDcgQEAKICAgICAgICAgIDxhcmcgdmFsdWU9IlBvcnROdW1iZXI9JHtvcmFjbGUuZGIucG9ydH06c2VydmVyTmFtZT0ke29yYWNsZS5kYi5ob3N0fTpTSUQ9JHtvcmFjbGUuZGIuU0lEfSIvPgogICAgICAgICAgPGFyZyBsaW5lPSIke29yYWNsZS5kYi5wb29sbmFtZX0iLz4KICAgICAgICA8L2V4ZWM+Ci0gIAorCiAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiY3JlYWxtLXJlc291cmNlIj4KICAgICAgICAgIDxwYXJhbSBuYW1lPSJkYi5wb29sbmFtZSIgdmFsdWU9IiR7b3JhY2xlLmRiLnBvb2xuYW1lfSIvPgogICAgICAgICAgPHBhcmFtIG5hbWU9ImRiLmpuZGluYW1lIiB2YWx1ZT0iJHtvcmFjbGUuZGIuam5kaW5hbWV9Ii8+CkBAIC0yNDUsNyArMjQ1LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW4tbW9kaWZ5LWRvbWFpbi14bWwtb3JhY2xlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtYXV0aC1qZGJjcmVhbG0iLz4gCisgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtYXV0aC1qZGJjcmVhbG0iLz4KICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjcmVhbG0tcmVzb3VyY2UiPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGIuam5kaW5hbWUiIHZhbHVlPSIke29yYWNsZS5kYi5qbmRpbmFtZX0iLz4KICAgICAgICA8L2FudGNhbGw+CkBAIC0yOTMsMTAwICsyOTMsMTAwIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1hdXRoLWpkYmNyZWFsbSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogCi0JICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jdXN0b20tYXV0aC1yZWFsbSI+Ci0JICAgIDxwYXJhbSBuYW1lPSJyZWFsbW5hbWUiIHZhbHVlPSJKREJDUmVhbG1fQ0xFQVIiLz4gCi0JCTxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KLQkJPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTp1c2VyLXRhYmxlPVVTRVJfVEFCTEU6ZGlnZXN0LWFsZ29yaXRobT1OT05FIi8+CisgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jdXN0b20tYXV0aC1yZWFsbSI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbW5hbWUiIHZhbHVlPSJKREJDUmVhbG1fQ0xFQVIiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOnVzZXItdGFibGU9VVNFUl9UQUJMRTpkaWdlc3QtYWxnb3JpdGhtPU5PTkUiLz4KICAgICAgIDwvYW50Y2FsbD4KIAotCSAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgotCSAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX0NMRUFSX0JBU0U2NCIvPiAKLQkJPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgotCQk8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOnVzZXItdGFibGU9VVNFUl9UQUJMRV9CQVNFNjQ6ZGlnZXN0LWFsZ29yaXRobT1OT05FOmVuY29kaW5nPUJBU0U2NCIvPgorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX0NMRUFSX0JBU0U2NCIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1jbGFzcyIgdmFsdWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5zZWN1cml0eS5hdXRoLnJlYWxtLmpkYmMuSkRCQ1JlYWxtIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbXByb3BlcnRpZXMiIHZhbHVlPSJkYXRhc291cmNlLWpuZGk9JHtkYi5qbmRpbmFtZX06amFhcy1jb250ZXh0PWpkYmNSZWFsbTpkYi11c2VyPSR7ZGIudXNlcn06ZGItcGFzc3dvcmQ9JHtkYi5wYXNzfTp1c2VyLW5hbWUtY29sdW1uPVVTRVJOQU1FOnBhc3N3b3JkLWNvbHVtbj1QQVNTV09SRDpncm91cC10YWJsZT1HUk9VUF9UQUJMRTpncm91cC1uYW1lLWNvbHVtbj1HUk9VUE5BTUU6dXNlci10YWJsZT1VU0VSX1RBQkxFX0JBU0U2NDpkaWdlc3QtYWxnb3JpdGhtPU5PTkU6ZW5jb2Rpbmc9QkFTRTY0Ii8+CiAgICAgICA8L2FudGNhbGw+CiAKLQkgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWN1c3RvbS1hdXRoLXJlYWxtIj4KLQkgICAgPHBhcmFtIG5hbWU9InJlYWxtbmFtZSIgdmFsdWU9IkpEQkNSZWFsbV9DTEVBUl9IRVgiLz4gCi0JCTxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KLQkJPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfSEVYOmRpZ2VzdC1hbGdvcml0aG09Tk9ORTplbmNvZGluZz1IRVgiLz4KKyAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWN1c3RvbS1hdXRoLXJlYWxtIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtbmFtZSIgdmFsdWU9IkpEQkNSZWFsbV9DTEVBUl9IRVgiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOnVzZXItdGFibGU9VVNFUl9UQUJMRV9IRVg6ZGlnZXN0LWFsZ29yaXRobT1OT05FOmVuY29kaW5nPUhFWCIvPgogICAgICAgPC9hbnRjYWxsPgogCiAKIAogCi0JICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jdXN0b20tYXV0aC1yZWFsbSI+Ci0JICAgIDxwYXJhbSBuYW1lPSJyZWFsbW5hbWUiIHZhbHVlPSJKREJDUmVhbG1fTUQyX0JBU0U2NCIvPiAKLQkJPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgotCQk8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOnVzZXItdGFibGU9VVNFUl9UQUJMRV9NRDJfQkFTRTY0OmRpZ2VzdC1hbGdvcml0aG09TUQyOmVuY29kaW5nPUJBU0U2NCIvPgorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX01EMl9CQVNFNjQiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOnVzZXItdGFibGU9VVNFUl9UQUJMRV9NRDJfQkFTRTY0OmRpZ2VzdC1hbGdvcml0aG09TUQyOmVuY29kaW5nPUJBU0U2NCIvPgogICAgICAgPC9hbnRjYWxsPgogCi0JICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jdXN0b20tYXV0aC1yZWFsbSI+Ci0JICAgIDxwYXJhbSBuYW1lPSJyZWFsbW5hbWUiIHZhbHVlPSJKREJDUmVhbG1fTUQ1X0JBU0U2NCIvPiAKLQkJPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgotCQk8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOnVzZXItdGFibGU9VVNFUl9UQUJMRV9NRDVfQkFTRTY0OmRpZ2VzdC1hbGdvcml0aG09TUQ1OmVuY29kaW5nPUJBU0U2NCIvPgorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX01ENV9CQVNFNjQiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOnVzZXItdGFibGU9VVNFUl9UQUJMRV9NRDVfQkFTRTY0OmRpZ2VzdC1hbGdvcml0aG09TUQ1OmVuY29kaW5nPUJBU0U2NCIvPgogICAgICAgPC9hbnRjYWxsPgogCi0JICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jdXN0b20tYXV0aC1yZWFsbSI+Ci0JICAgIDxwYXJhbSBuYW1lPSJyZWFsbW5hbWUiIHZhbHVlPSJKREJDUmVhbG1fU0hBX0JBU0U2NCIvPiAKLQkJPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgotCQk8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOnVzZXItdGFibGU9VVNFUl9UQUJMRV9TSEFfQkFTRTY0OmRpZ2VzdC1hbGdvcml0aG09U0hBOmVuY29kaW5nPUJBU0U2NCIvPgorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX1NIQV9CQVNFNjQiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOnVzZXItdGFibGU9VVNFUl9UQUJMRV9TSEFfQkFTRTY0OmRpZ2VzdC1hbGdvcml0aG09U0hBOmVuY29kaW5nPUJBU0U2NCIvPgogICAgICAgPC9hbnRjYWxsPgogCi0JICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jdXN0b20tYXV0aC1yZWFsbSI+Ci0JICAgIDxwYXJhbSBuYW1lPSJyZWFsbW5hbWUiIHZhbHVlPSJKREJDUmVhbG1fU0hBMjU2X0JBU0U2NCIvPiAKLQkJPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgotCQk8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOnVzZXItdGFibGU9VVNFUl9UQUJMRV9TSEEyNTZfQkFTRTY0OmRpZ2VzdC1hbGdvcml0aG09U0hBLTI1NjplbmNvZGluZz1CQVNFNjQiLz4KKyAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWN1c3RvbS1hdXRoLXJlYWxtIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtbmFtZSIgdmFsdWU9IkpEQkNSZWFsbV9TSEEyNTZfQkFTRTY0Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfU0hBMjU2X0JBU0U2NDpkaWdlc3QtYWxnb3JpdGhtPVNIQS0yNTY6ZW5jb2Rpbmc9QkFTRTY0Ii8+CiAgICAgICA8L2FudGNhbGw+CiAKLQkgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWN1c3RvbS1hdXRoLXJlYWxtIj4KLQkgICAgPHBhcmFtIG5hbWU9InJlYWxtbmFtZSIgdmFsdWU9IkpEQkNSZWFsbV9TSEEzODRfQkFTRTY0Ii8+IAotCQk8cGFyYW0gbmFtZT0icmVhbG1jbGFzcyIgdmFsdWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5zZWN1cml0eS5hdXRoLnJlYWxtLmpkYmMuSkRCQ1JlYWxtIi8+Ci0JCTxwYXJhbSBuYW1lPSJyZWFsbXByb3BlcnRpZXMiIHZhbHVlPSJkYXRhc291cmNlLWpuZGk9JHtkYi5qbmRpbmFtZX06amFhcy1jb250ZXh0PWpkYmNSZWFsbTpkYi11c2VyPSR7ZGIudXNlcn06ZGItcGFzc3dvcmQ9JHtkYi5wYXNzfTp1c2VyLW5hbWUtY29sdW1uPVVTRVJOQU1FOnBhc3N3b3JkLWNvbHVtbj1QQVNTV09SRDpncm91cC10YWJsZT1HUk9VUF9UQUJMRTpncm91cC1uYW1lLWNvbHVtbj1HUk9VUE5BTUU6ZW5jb2Rpbmc9QkFTRTY0OnVzZXItdGFibGU9VVNFUl9UQUJMRV9TSEEzODRfQkFTRTY0OmRpZ2VzdC1hbGdvcml0aG09U0hBLTM4NCIvPgorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX1NIQTM4NF9CQVNFNjQiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOmVuY29kaW5nPUJBU0U2NDp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfU0hBMzg0X0JBU0U2NDpkaWdlc3QtYWxnb3JpdGhtPVNIQS0zODQiLz4KICAgICAgIDwvYW50Y2FsbD4KIAotCSAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgotCSAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX1NIQTUxMl9CQVNFNjQiLz4gCi0JCTxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KLQkJPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTplbmNvZGluZz1CQVNFNjQ6dXNlci10YWJsZT1VU0VSX1RBQkxFX1NIQTUxMl9CQVNFNjQ6ZGlnZXN0LWFsZ29yaXRobT1TSEEtNTEyIi8+CisgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jdXN0b20tYXV0aC1yZWFsbSI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbW5hbWUiIHZhbHVlPSJKREJDUmVhbG1fU0hBNTEyX0JBU0U2NCIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1jbGFzcyIgdmFsdWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5zZWN1cml0eS5hdXRoLnJlYWxtLmpkYmMuSkRCQ1JlYWxtIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbXByb3BlcnRpZXMiIHZhbHVlPSJkYXRhc291cmNlLWpuZGk9JHtkYi5qbmRpbmFtZX06amFhcy1jb250ZXh0PWpkYmNSZWFsbTpkYi11c2VyPSR7ZGIudXNlcn06ZGItcGFzc3dvcmQ9JHtkYi5wYXNzfTp1c2VyLW5hbWUtY29sdW1uPVVTRVJOQU1FOnBhc3N3b3JkLWNvbHVtbj1QQVNTV09SRDpncm91cC10YWJsZT1HUk9VUF9UQUJMRTpncm91cC1uYW1lLWNvbHVtbj1HUk9VUE5BTUU6ZW5jb2Rpbmc9QkFTRTY0OnVzZXItdGFibGU9VVNFUl9UQUJMRV9TSEE1MTJfQkFTRTY0OmRpZ2VzdC1hbGdvcml0aG09U0hBLTUxMiIvPgogICAgICAgPC9hbnRjYWxsPgogCiAKIAogCi0JICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jdXN0b20tYXV0aC1yZWFsbSI+Ci0JICAgIDxwYXJhbSBuYW1lPSJyZWFsbW5hbWUiIHZhbHVlPSJKREJDUmVhbG1fTUQyX0hFWCIvPiAKLQkJPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgotCQk8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOmVuY29kaW5nPUhFWDp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfTUQyX0hFWDpkaWdlc3QtYWxnb3JpdGhtPU1EMiIvPgorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX01EMl9IRVgiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOmVuY29kaW5nPUhFWDp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfTUQyX0hFWDpkaWdlc3QtYWxnb3JpdGhtPU1EMiIvPgogICAgICAgPC9hbnRjYWxsPgogCi0JICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jdXN0b20tYXV0aC1yZWFsbSI+Ci0JICAgIDxwYXJhbSBuYW1lPSJyZWFsbW5hbWUiIHZhbHVlPSJKREJDUmVhbG1fTUQ1X0hFWCIvPiAKLQkJPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgotCQk8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOmVuY29kaW5nPUhFWDp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfTUQ1X0hFWDpkaWdlc3QtYWxnb3JpdGhtPU1ENSIvPgorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX01ENV9IRVgiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOmVuY29kaW5nPUhFWDp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfTUQ1X0hFWDpkaWdlc3QtYWxnb3JpdGhtPU1ENSIvPgogICAgICAgPC9hbnRjYWxsPgogCi0JICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jdXN0b20tYXV0aC1yZWFsbSI+Ci0JICAgIDxwYXJhbSBuYW1lPSJyZWFsbW5hbWUiIHZhbHVlPSJKREJDUmVhbG1fU0hBX0hFWCIvPiAKLQkJPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgotCQk8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOmVuY29kaW5nPUhFWDp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfU0hBX0hFWDpkaWdlc3QtYWxnb3JpdGhtPVNIQSIvPgorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX1NIQV9IRVgiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOmVuY29kaW5nPUhFWDp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfU0hBX0hFWDpkaWdlc3QtYWxnb3JpdGhtPVNIQSIvPgogICAgICAgPC9hbnRjYWxsPgogCi0JICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jdXN0b20tYXV0aC1yZWFsbSI+Ci0JICAgIDxwYXJhbSBuYW1lPSJyZWFsbW5hbWUiIHZhbHVlPSJKREJDUmVhbG1fU0hBMjU2X0hFWCIvPiAKLQkJPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgotCQk8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOmVuY29kaW5nPUhFWDp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfU0hBMjU2X0hFWDpkaWdlc3QtYWxnb3JpdGhtPVNIQS0yNTYiLz4KKyAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWN1c3RvbS1hdXRoLXJlYWxtIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtbmFtZSIgdmFsdWU9IkpEQkNSZWFsbV9TSEEyNTZfSEVYIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTplbmNvZGluZz1IRVg6dXNlci10YWJsZT1VU0VSX1RBQkxFX1NIQTI1Nl9IRVg6ZGlnZXN0LWFsZ29yaXRobT1TSEEtMjU2Ii8+CiAgICAgICA8L2FudGNhbGw+CiAKLQkgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWN1c3RvbS1hdXRoLXJlYWxtIj4KLQkgICAgPHBhcmFtIG5hbWU9InJlYWxtbmFtZSIgdmFsdWU9IkpEQkNSZWFsbV9TSEEzODRfSEVYIi8+IAotCQk8cGFyYW0gbmFtZT0icmVhbG1jbGFzcyIgdmFsdWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5zZWN1cml0eS5hdXRoLnJlYWxtLmpkYmMuSkRCQ1JlYWxtIi8+Ci0JCTxwYXJhbSBuYW1lPSJyZWFsbXByb3BlcnRpZXMiIHZhbHVlPSJkYXRhc291cmNlLWpuZGk9JHtkYi5qbmRpbmFtZX06amFhcy1jb250ZXh0PWpkYmNSZWFsbTpkYi11c2VyPSR7ZGIudXNlcn06ZGItcGFzc3dvcmQ9JHtkYi5wYXNzfTp1c2VyLW5hbWUtY29sdW1uPVVTRVJOQU1FOnBhc3N3b3JkLWNvbHVtbj1QQVNTV09SRDpncm91cC10YWJsZT1HUk9VUF9UQUJMRTpncm91cC1uYW1lLWNvbHVtbj1HUk9VUE5BTUU6ZW5jb2Rpbmc9SEVYOnVzZXItdGFibGU9VVNFUl9UQUJMRV9TSEEzODRfSEVYOmRpZ2VzdC1hbGdvcml0aG09U0hBLTM4NCIvPgorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX1NIQTM4NF9IRVgiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOmVuY29kaW5nPUhFWDp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfU0hBMzg0X0hFWDpkaWdlc3QtYWxnb3JpdGhtPVNIQS0zODQiLz4KICAgICAgIDwvYW50Y2FsbD4KIAotCSAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgotCSAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX1NIQTUxMl9IRVgiLz4gCi0JCTxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KLQkJPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTplbmNvZGluZz1IRVg6dXNlci10YWJsZT1VU0VSX1RBQkxFX1NIQTUxMl9IRVg6ZGlnZXN0LWFsZ29yaXRobT1TSEEtNTEyIi8+CisgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jdXN0b20tYXV0aC1yZWFsbSI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbW5hbWUiIHZhbHVlPSJKREJDUmVhbG1fU0hBNTEyX0hFWCIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1jbGFzcyIgdmFsdWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5zZWN1cml0eS5hdXRoLnJlYWxtLmpkYmMuSkRCQ1JlYWxtIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbXByb3BlcnRpZXMiIHZhbHVlPSJkYXRhc291cmNlLWpuZGk9JHtkYi5qbmRpbmFtZX06amFhcy1jb250ZXh0PWpkYmNSZWFsbTpkYi11c2VyPSR7ZGIudXNlcn06ZGItcGFzc3dvcmQ9JHtkYi5wYXNzfTp1c2VyLW5hbWUtY29sdW1uPVVTRVJOQU1FOnBhc3N3b3JkLWNvbHVtbj1QQVNTV09SRDpncm91cC10YWJsZT1HUk9VUF9UQUJMRTpncm91cC1uYW1lLWNvbHVtbj1HUk9VUE5BTUU6ZW5jb2Rpbmc9SEVYOnVzZXItdGFibGU9VVNFUl9UQUJMRV9TSEE1MTJfSEVYOmRpZ2VzdC1hbGdvcml0aG09U0hBLTUxMiIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgPC90YXJnZXQ+CkBAIC04NTcsNyArODU3LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8IS0tIHZhcmlhYmxlcyBuZWVkZWQgYnkgY3VzdG9tLWJ1aWxkIAorICAgIDwhLS0gdmFyaWFibGVzIG5lZWRlZCBieSBjdXN0b20tYnVpbGQKICAgICAgICAgIDEuIGpkYmMucmVhbG0ubmFtZQogICAgICAgICAgMi4gamRiYy5yZWFsbS51c2VyCiAgICAgICAgICAzLiBhcHBuYW1lCkBAIC04NjUsMjIgKzg2NSwyMiBAQAogICAgIDx0YXJnZXQgbmFtZT0iY3VzdG9tLWJ1aWxkIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0id2ViLnhtbCBpcyBkZWZpbmVkIGFzICR7d2ViLnhtbH0iLz4KIAotICAJICAgIDxjb3B5IGZpbGU9IndlYi54bWwudGVtcGxhdGUiIHRvZmlsZT0iJHt3ZWIueG1sfSIgb3ZlcndyaXRlPSJ0cnVlIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgIAkgICAgPHJlcGxhY2UgZmlsZT0iJHt3ZWIueG1sfSIgdG9rZW49IlJFQUxNX05BTUVfSEVSRSIgdmFsdWU9IiR7amRiYy5yZWFsbS5uYW1lfSIvPgotICAJICAgIDxjb3B5IGZpbGU9InN1bi13ZWIueG1sLnRlbXBsYXRlIiB0b2ZpbGU9IiR7c3VuLXdlYi54bWx9IiBvdmVyd3JpdGU9InRydWUiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICAgCSAgICA8cmVwbGFjZSBmaWxlPSIke3N1bi13ZWIueG1sfSIgdG9rZW49IlVTRVJfSURfSEVSRSIgdmFsdWU9IiR7amRiYy5yZWFsbS51c2VyfSIvPgorICAgICAgICAgIDxjb3B5IGZpbGU9IndlYi54bWwudGVtcGxhdGUiIHRvZmlsZT0iJHt3ZWIueG1sfSIgb3ZlcndyaXRlPSJ0cnVlIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAgICAgICAgPHJlcGxhY2UgZmlsZT0iJHt3ZWIueG1sfSIgdG9rZW49IlJFQUxNX05BTUVfSEVSRSIgdmFsdWU9IiR7amRiYy5yZWFsbS5uYW1lfSIvPgorICAgICAgICAgIDxjb3B5IGZpbGU9InN1bi13ZWIueG1sLnRlbXBsYXRlIiB0b2ZpbGU9IiR7c3VuLXdlYi54bWx9IiBvdmVyd3JpdGU9InRydWUiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICAgICA8cmVwbGFjZSBmaWxlPSIke3N1bi13ZWIueG1sfSIgdG9rZW49IlVTRVJfSURfSEVSRSIgdmFsdWU9IiR7amRiYy5yZWFsbS51c2VyfSIvPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ0cnVlIi8+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke2FwcG5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotCSAgICA8ZGVsZXRlIGZpbGU9IiR7d2ViLnhtbH0iLz4KLQkgICAgPGRlbGV0ZSBmaWxlPSIke3N1bi13ZWIueG1sfSIvPgorICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7d2ViLnhtbH0iLz4KKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke3N1bi13ZWIueG1sfSIvPgogCiAgICAgPC90YXJnZXQ+CiAKLSAgICA8IS0tIHZhcmlhYmxlcyBuZWVkZWQgYnkgY3VzdG9tLWJ1aWxkIAorICAgIDwhLS0gdmFyaWFibGVzIG5lZWRlZCBieSBjdXN0b20tYnVpbGQKICAgICAgICAgIDEuIGpkYmMucmVhbG0ucGFzcwogICAgICAgICAgMi4gamRiYy5yZWFsbS51c2VyCiAgICAgICAgICAzLiBhcHBuYW1lCkBAIC04OTEsNyArODkxLDcgQEAKIAogICAgICAgPGphdmEgY2xhc3NuYW1lPSJIdHRwQmFzaWNBdXRoVGVzdCIgZm9yaz0idHJ1ZSI+CiAgICAgICAgIDxjbGFzc3BhdGg+Ci0gIAkgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7czFhc3Rlc3QuY2xhc3NwYXRofSIvPgorICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2J1aWxkLmNsYXNzZXMuZGlyfToke3MxYXN0ZXN0LmNsYXNzcGF0aH0iLz4KICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDxhcmcgdmFsdWU9Ii11cmwiLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vJHthcHBuYW1lfS9UZXN0U2VydmxldCIvPgpAQCAtOTE0LDcgKzkxNCw3IEBACiAKICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iSHR0cEJhc2ljQXV0aFRlc3QiIGZvcms9InRydWUiPgogICAgICAgICA8Y2xhc3NwYXRoPgotICAJICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2J1aWxkLmNsYXNzZXMuZGlyfToke3MxYXN0ZXN0LmNsYXNzcGF0aH0iLz4KKyAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtidWlsZC5jbGFzc2VzLmRpcn06JHtzMWFzdGVzdC5jbGFzc3BhdGh9Ii8+CiAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8YXJnIHZhbHVlPSItdXJsIi8+CiAgICAgICAgIDxhcmcgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9LyR7YXBwbmFtZX0vVGVzdFNlcnZsZXQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pkYmNyZWFsbS9jbGllbnQvSHR0cEJhc2ljQXV0aFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pkYmNyZWFsbS9jbGllbnQvSHR0cEJhc2ljQXV0aFRlc3QuamF2YQppbmRleCA3NzBlZjc5Li4xM2M0M2RjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qZGJjcmVhbG0vY2xpZW50L0h0dHBCYXNpY0F1dGhUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamRiY3JlYWxtL2NsaWVudC9IdHRwQmFzaWNBdXRoVGVzdC5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiAKIHB1YmxpYyBjbGFzcyBIdHRwQmFzaWNBdXRoVGVzdCBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBib29sZWFuIHJlc3VsdCA9IHRydWU7CkBAIC02Niw3ICs2Niw3IEBACiAKICAgICAgICAgVGhyZWFkIHRhcnJheVtdID0gbmV3IFRocmVhZFt0aHJlYWRDb3VudF07CiAKLSAgICAgICAgZm9yKGludCBpPTA7IGk8dGhyZWFkQ291bnQ7IGkrKykgCisgICAgICAgIGZvcihpbnQgaT0wOyBpPHRocmVhZENvdW50OyBpKyspCiAgICAgICAgICAgICB0YXJyYXlbaV0gPSBuZXcgVGhyZWFkKHRoaXMsICJIdHRwLXJlcXVlc3QtdGhyZWFkLSIgKyBpKTsKIAogICAgICAgICBmb3IoaW50IGk9MDsgaTx0aHJlYWRDb3VudDsgaSsrKQpAQCAtOTEsMTEgKzkxLDExIEBACiAKICAgICAgICAgc3RkRGV2ID0gTWF0aC5wb3coc3RkRGV2LCAwLjUpOwogCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVG90YWwgcmVxdWVzdHM6ICIgKyAoc3V4ZXNDb3VudCtmYWlsdXJlQ291bnQpICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBzdWNjZXNzIGNvdW50OiAiICsgc3V4ZXNDb3VudCArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIHJlcXVlc3RzOiAiICsgKHN1eGVzQ291bnQrZmFpbHVyZUNvdW50KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBzdWNjZXNzIGNvdW50OiAiICsgc3V4ZXNDb3VudCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBmYWlsdXJlIGNvdW50OiAiICsgZmFpbHVyZUNvdW50KTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNaW4vTWF4L0F2Zy9TdGREZXY6IChtaWxsaXNlY29uZHMpICIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pblRpbWUgKyAiLyIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNaW4vTWF4L0F2Zy9TdGREZXY6IChtaWxsaXNlY29uZHMpICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluVGltZSArICIvIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhUaW1lICsgIi8iICsgYXZnVGltZSArICIvIiArIHN0ZERldik7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiSkRCQ1JlYWxtIHRlc3QgZm9yIFVSTCAiICsgdXJsKTsKQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7IC8vIG5lZ2F0aXZlIHRlc3QgCisgICAgICAgIH0gZWxzZSB7IC8vIG5lZ2F0aXZlIHRlc3QKICAgICAgICAgICAgIGlmKCByZXN1bHQgKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTE0Myw3ICsxNDMsNyBAQAogICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCh0aGlzKSB7CiAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmVDb3VudCsrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyB0ZXN0IGZhaWxlZCh3ZWxsIGZhaWxlZCBpZiBpdHMgYSBwb3N0aXZlIHRlc3QsIHRoaXMKICAgICAgICAgICAgICAgICAvLyBpcyBleHBlY3RlZCBpZiBpdHMgYSBuZWdhdGl2ZSB0ZXN0KQogCkBAIC0xNTYsNyArMTU2LDcgQEAKIAogICAgIHByb3RlY3RlZCB2b2lkIHJ1bjAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgLSBydW5uaW5nIC4uLiIpOwogICAgICAgICBVUkwgdSA9IG5ldyBVUkwodXJsKTsKICAgICAgICAgVVJMQ29ubmVjdGlvbiB1Y29ubiA9IHUub3BlbkNvbm5lY3Rpb24oKTsKQEAgLTIyMCw3ICsyMjAsNyBAQAogICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgIH0KIAotICAgICAgICBIdHRwQmFzaWNBdXRoVGVzdCB0ZXN0ID0gCisgICAgICAgIEh0dHBCYXNpY0F1dGhUZXN0IHRlc3QgPQogICAgICAgICAgICAgbmV3IEh0dHBCYXNpY0F1dGhUZXN0KHVybCwgdXNlciwgcGFzcywgdGMsIGxjLCBwb3NpdGl2ZVRlc3QpOwogICAgICAgICB0ZXN0LmRvVGVzdCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pkYmNyZWFsbS9jcmVhdGUtYXV0aC1zY2hlbWEtb3JhY2xlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pkYmNyZWFsbS9jcmVhdGUtYXV0aC1zY2hlbWEtb3JhY2xlLnNxbAppbmRleCAyYzNhNDJkLi5hMmZkNDFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qZGJjcmVhbG0vY3JlYXRlLWF1dGgtc2NoZW1hLW9yYWNsZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamRiY3JlYWxtL2NyZWF0ZS1hdXRoLXNjaGVtYS1vcmFjbGUuc3FsCkBAIC0xLDg0ICsxLDg0IEBACiBDUkVBVEUgVEFCTEUgVVNFUl9UQUJMRSAoCi0gICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAorICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAogICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpCiApOwogCiBDUkVBVEUgVEFCTEUgVVNFUl9UQUJMRV9CQVNFNjQgKAotICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKKyAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKICAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KQogKTsKIAogQ1JFQVRFIFRBQkxFIFVTRVJfVEFCTEVfSEVYICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCiAgICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkKICk7CiAKIAogCiBDUkVBVEUgVEFCTEUgVVNFUl9UQUJMRV9NRDJfQkFTRTY0ICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCi0gICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkKICk7CiAKIENSRUFURSBUQUJMRSBVU0VSX1RBQkxFX01ENV9CQVNFNjQgKAotICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLSAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KSAKKyAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKKyAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KQogKTsKIAogQ1JFQVRFIFRBQkxFIFVTRVJfVEFCTEVfU0hBX0JBU0U2NCAoCi0gICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAotICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpIAorICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpCiApOwogCiBDUkVBVEUgVEFCTEUgVVNFUl9UQUJMRV9TSEEyNTZfQkFTRTY0ICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCi0gICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkKICk7CiAKIENSRUFURSBUQUJMRSBVU0VSX1RBQkxFX1NIQTM4NF9CQVNFNjQgKAotICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLSAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KSAKKyAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKKyAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KQogKTsKIENSRUFURSBUQUJMRSBVU0VSX1RBQkxFX1NIQTUxMl9CQVNFNjQgKAotICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLSAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KSAKKyAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKKyAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KQogKTsKIAogCiAKIENSRUFURSBUQUJMRSBVU0VSX1RBQkxFX01EMl9IRVggKAotICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLSAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KSAKKyAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKKyAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KQogKTsKIAogQ1JFQVRFIFRBQkxFIFVTRVJfVEFCTEVfTUQ1X0hFWCAoCi0gICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAotICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpIAorICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpCiApOwogCiBDUkVBVEUgVEFCTEUgVVNFUl9UQUJMRV9TSEFfSEVYICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCi0gICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkKICk7CiAKIENSRUFURSBUQUJMRSBVU0VSX1RBQkxFX1NIQTI1Nl9IRVggKAotICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLSAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KSAKKyAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKKyAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KQogKTsKIAogQ1JFQVRFIFRBQkxFIFVTRVJfVEFCTEVfU0hBMzg0X0hFWCAoCi0gICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAotICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpIAorICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpCiApOwogCiBDUkVBVEUgVEFCTEUgVVNFUl9UQUJMRV9TSEE1MTJfSEVYICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCi0gICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkKICk7CiAKIAogCiBDUkVBVEUgVEFCTEUgR1JPVVBfVEFCTEUgKAotICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIE5PVCBOVUxMLCAKKyAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBOT1QgTlVMTCwKICAgICAgICAgR1JPVVBOQU1FIFZBUkNIQVIgKDI1NSkKICk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qZGJjcmVhbG0vY3JlYXRlLWF1dGgtc2NoZW1hLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pkYmNyZWFsbS9jcmVhdGUtYXV0aC1zY2hlbWEuc3FsCmluZGV4IDJjM2E0MmQuLmEyZmQ0MWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pkYmNyZWFsbS9jcmVhdGUtYXV0aC1zY2hlbWEuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pkYmNyZWFsbS9jcmVhdGUtYXV0aC1zY2hlbWEuc3FsCkBAIC0xLDg0ICsxLDg0IEBACiBDUkVBVEUgVEFCTEUgVVNFUl9UQUJMRSAoCi0gICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAorICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAogICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpCiApOwogCiBDUkVBVEUgVEFCTEUgVVNFUl9UQUJMRV9CQVNFNjQgKAotICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKKyAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKICAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KQogKTsKIAogQ1JFQVRFIFRBQkxFIFVTRVJfVEFCTEVfSEVYICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCiAgICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkKICk7CiAKIAogCiBDUkVBVEUgVEFCTEUgVVNFUl9UQUJMRV9NRDJfQkFTRTY0ICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCi0gICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkKICk7CiAKIENSRUFURSBUQUJMRSBVU0VSX1RBQkxFX01ENV9CQVNFNjQgKAotICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLSAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KSAKKyAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKKyAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KQogKTsKIAogQ1JFQVRFIFRBQkxFIFVTRVJfVEFCTEVfU0hBX0JBU0U2NCAoCi0gICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAotICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpIAorICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpCiApOwogCiBDUkVBVEUgVEFCTEUgVVNFUl9UQUJMRV9TSEEyNTZfQkFTRTY0ICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCi0gICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkKICk7CiAKIENSRUFURSBUQUJMRSBVU0VSX1RBQkxFX1NIQTM4NF9CQVNFNjQgKAotICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLSAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KSAKKyAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKKyAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KQogKTsKIENSRUFURSBUQUJMRSBVU0VSX1RBQkxFX1NIQTUxMl9CQVNFNjQgKAotICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLSAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KSAKKyAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKKyAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KQogKTsKIAogCiAKIENSRUFURSBUQUJMRSBVU0VSX1RBQkxFX01EMl9IRVggKAotICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLSAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KSAKKyAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKKyAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KQogKTsKIAogQ1JFQVRFIFRBQkxFIFVTRVJfVEFCTEVfTUQ1X0hFWCAoCi0gICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAotICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpIAorICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpCiApOwogCiBDUkVBVEUgVEFCTEUgVVNFUl9UQUJMRV9TSEFfSEVYICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCi0gICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkKICk7CiAKIENSRUFURSBUQUJMRSBVU0VSX1RBQkxFX1NIQTI1Nl9IRVggKAotICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLSAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KSAKKyAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKKyAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KQogKTsKIAogQ1JFQVRFIFRBQkxFIFVTRVJfVEFCTEVfU0hBMzg0X0hFWCAoCi0gICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAotICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpIAorICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpCiApOwogCiBDUkVBVEUgVEFCTEUgVVNFUl9UQUJMRV9TSEE1MTJfSEVYICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCi0gICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkKICk7CiAKIAogCiBDUkVBVEUgVEFCTEUgR1JPVVBfVEFCTEUgKAotICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIE5PVCBOVUxMLCAKKyAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBOT1QgTlVMTCwKICAgICAgICAgR1JPVVBOQU1FIFZBUkNIQVIgKDI1NSkKICk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qZGJjcmVhbG0vdXRpbC9Qb3B1bGF0ZURCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qZGJjcmVhbG0vdXRpbC9Qb3B1bGF0ZURCLmphdmEKaW5kZXggZjliODA5OC4uNzhjMTZiNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamRiY3JlYWxtL3V0aWwvUG9wdWxhdGVEQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pkYmNyZWFsbS91dGlsL1BvcHVsYXRlREIuamF2YQpAQCAtMjQsNDEgKzI0LDQxIEBACiBwdWJsaWMgY2xhc3MgUG9wdWxhdGVEQiB7CiAKICAgICAvLyB1c2VybmFtZS9wYXNzd29yZHMKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzPSB7IHsieHl6IiwgInh5eiJ9LCAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzPSB7IHsieHl6IiwgInh5eiJ9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJhYmMiLCAiYWJjIn0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7InF3ZXJ0IiwgInF3ZXJ0In0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7InRlc3R5IiwgInRlc3R5In0gfTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7InRlc3R5IiwgInRlc3R5In0gfTsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdW10gdXNlcnNfQkFTRTY0PSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgeyJxd2VydEJBU0U2NCIsICJxd2VydEJBU0U2NCJ9IH07IAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdW10gdXNlcnNfSEVYPSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgeyJxd2VydEhFWCIsICJxd2VydEhFWCJ9IH07IAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdW10gdXNlcnNfQkFTRTY0PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB7InF3ZXJ0QkFTRTY0IiwgInF3ZXJ0QkFTRTY0In0gfTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX0hFWD0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgeyJxd2VydEhFWCIsICJxd2VydEhFWCJ9IH07CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX01EMl9CQVNFNjQ9IAotICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsicXdlcnRNRDJCQVNFNjQiLCAicXdlcnRNRDJCQVNFNjQifSB9OyAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX01ENV9CQVNFNjQ9IAotICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsicXdlcnRNRDVCQVNFNjQiLCAicXdlcnRNRDVCQVNFNjQifSB9OyAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX1NIQV9CQVNFNjQ9IAotICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsicXdlcnRTSEFCQVNFNjQiLCAicXdlcnRTSEFCQVNFNjQifSB9OyAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX1NIQTI1Nl9CQVNFNjQ9IAotICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsicXdlcnRTSEEyNTZCQVNFNjQiLCAicXdlcnRTSEEyNTZCQVNFNjQifSB9OyAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX1NIQTM4NF9CQVNFNjQ9IAotICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsicXdlcnRTSEEzODRCQVNFNjQiLCAicXdlcnRTSEEzODRCQVNFNjQifSB9OyAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX1NIQTUxMl9CQVNFNjQ9IAotICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsicXdlcnRTSEE1MTJCQVNFNjQiLCAicXdlcnRTSEE1MTJCQVNFNjQifSB9OyAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX01EMl9CQVNFNjQ9CisgICAgICAgICAgICAgICAgICAgICAgICAgIHsgeyJxd2VydE1EMkJBU0U2NCIsICJxd2VydE1EMkJBU0U2NCJ9IH07CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW11bXSB1c2Vyc19NRDVfQkFTRTY0PQorICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsicXdlcnRNRDVCQVNFNjQiLCAicXdlcnRNRDVCQVNFNjQifSB9OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdW10gdXNlcnNfU0hBX0JBU0U2ND0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgeyB7InF3ZXJ0U0hBQkFTRTY0IiwgInF3ZXJ0U0hBQkFTRTY0In0gfTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX1NIQTI1Nl9CQVNFNjQ9CisgICAgICAgICAgICAgICAgICAgICAgICAgIHsgeyJxd2VydFNIQTI1NkJBU0U2NCIsICJxd2VydFNIQTI1NkJBU0U2NCJ9IH07CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW11bXSB1c2Vyc19TSEEzODRfQkFTRTY0PQorICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsicXdlcnRTSEEzODRCQVNFNjQiLCAicXdlcnRTSEEzODRCQVNFNjQifSB9OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdW10gdXNlcnNfU0hBNTEyX0JBU0U2ND0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgeyB7InF3ZXJ0U0hBNTEyQkFTRTY0IiwgInF3ZXJ0U0hBNTEyQkFTRTY0In0gfTsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdW10gdXNlcnNfTUQyX0hFWD0gCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsgeyJxd2VydE1EMkhFWCIsICJxd2VydE1EMkhFWCJ9IH07IAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdW10gdXNlcnNfTUQ1X0hFWD0gCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsgeyJxd2VydE1ENUhFWCIsICJxd2VydE1ENUhFWCJ9IH07IAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdW10gdXNlcnNfU0hBX0hFWD0gCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsgeyJxd2VydFNIQUhFWCIsICJxd2VydFNIQUhFWCJ9IH07IAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdW10gdXNlcnNfU0hBMjU2X0hFWD0gCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsgeyJxd2VydFNIQTI1NkhFWCIsICJxd2VydFNIQTI1NkhFWCJ9IH07IAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdW10gdXNlcnNfU0hBMzg0X0hFWD0gCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsgeyJxd2VydFNIQTM4NEhFWCIsICJxd2VydFNIQTM4NEhFWCJ9IH07IAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdW10gdXNlcnNfU0hBNTEyX0hFWD0gCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsgeyJxd2VydFNIQTUxMkhFWCIsICJxd2VydFNIQTUxMkhFWCJ9IH07IAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdW10gdXNlcnNfTUQyX0hFWD0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgeyB7InF3ZXJ0TUQySEVYIiwgInF3ZXJ0TUQySEVYIn0gfTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX01ENV9IRVg9CisgICAgICAgICAgICAgICAgICAgICAgICAgIHsgeyJxd2VydE1ENUhFWCIsICJxd2VydE1ENUhFWCJ9IH07CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW11bXSB1c2Vyc19TSEFfSEVYPQorICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsicXdlcnRTSEFIRVgiLCAicXdlcnRTSEFIRVgifSB9OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdW10gdXNlcnNfU0hBMjU2X0hFWD0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgeyB7InF3ZXJ0U0hBMjU2SEVYIiwgInF3ZXJ0U0hBMjU2SEVYIn0gfTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX1NIQTM4NF9IRVg9CisgICAgICAgICAgICAgICAgICAgICAgICAgIHsgeyJxd2VydFNIQTM4NEhFWCIsICJxd2VydFNIQTM4NEhFWCJ9IH07CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW11bXSB1c2Vyc19TSEE1MTJfSEVYPQorICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsicXdlcnRTSEE1MTJIRVgiLCAicXdlcnRTSEE1MTJIRVgifSB9OwogCiAgICAgLy8gdXNlcm5hbWUvZ3JvdXBuYW1lCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW11bXSBncm91cHM9IHsgeyJ4eXoiLCAic3RhZmYifSwKQEAgLTgzLDcgKzgzLDcgQEAKIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7InF3ZXJ0U0hBMzg0SEVYIiwgInN0YWZmIn0sCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJxd2VydFNIQTUxMkhFWCIsICJzdGFmZiJ9LAogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJ0ZXN0eSIsICJzdGFmZiJ9IH07IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsidGVzdHkiLCAic3RhZmYifSB9OwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVSTF9PUFRJT04gICAgICAgPSAiLXVybCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZFUkJPU0VfT1BUSU9OICAgPSAiLXZlcmJvc2UiOwpAQCAtOTMsNDAgKzkzLDQwIEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHZlcmJvc2UgPSBmYWxzZTsKIAotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJTlNFUlRfVVNFUl9TVE1UX0NMRUFSID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElOU0VSVF9VU0VSX1NUTVRfQ0xFQVIgPQogICAgICAgICAiaW5zZXJ0IGludG8gVVNFUl9UQUJMRSB2YWx1ZXMgKD8sID8pIjsKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSU5TRVJUX1VTRVJfU1RNVF9CQVNFNjQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSU5TRVJUX1VTRVJfU1RNVF9CQVNFNjQgPQogICAgICAgICAiaW5zZXJ0IGludG8gVVNFUl9UQUJMRV9CQVNFNjQgdmFsdWVzICg/LCA/KSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElOU0VSVF9VU0VSX1NUTVRfSEVYID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElOU0VSVF9VU0VSX1NUTVRfSEVYID0KICAgICAgICAgImluc2VydCBpbnRvIFVTRVJfVEFCTEVfSEVYIHZhbHVlcyAoPywgPykiOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElOU0VSVF9VU0VSX1NUTVRfTUQyX0JBU0U2NCA9IAorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJTlNFUlRfVVNFUl9TVE1UX01EMl9CQVNFNjQgPQogICAgICAgICAiaW5zZXJ0IGludG8gVVNFUl9UQUJMRV9NRDJfQkFTRTY0IHZhbHVlcyAoPywgPykiOwotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJTlNFUlRfVVNFUl9TVE1UX01ENV9CQVNFNjQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSU5TRVJUX1VTRVJfU1RNVF9NRDVfQkFTRTY0ID0KICAgICAgICAgImluc2VydCBpbnRvIFVTRVJfVEFCTEVfTUQ1X0JBU0U2NCB2YWx1ZXMgKD8sID8pIjsKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSU5TRVJUX1VTRVJfU1RNVF9TSEFfQkFTRTY0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElOU0VSVF9VU0VSX1NUTVRfU0hBX0JBU0U2NCA9CiAgICAgICAgICJpbnNlcnQgaW50byBVU0VSX1RBQkxFX1NIQV9CQVNFNjQgdmFsdWVzICg/LCA/KSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElOU0VSVF9VU0VSX1NUTVRfU0hBMjU2X0JBU0U2NCA9IAorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJTlNFUlRfVVNFUl9TVE1UX1NIQTI1Nl9CQVNFNjQgPQogICAgICAgICAiaW5zZXJ0IGludG8gVVNFUl9UQUJMRV9TSEEyNTZfQkFTRTY0IHZhbHVlcyAoPywgPykiOwotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJTlNFUlRfVVNFUl9TVE1UX1NIQTM4NF9CQVNFNjQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSU5TRVJUX1VTRVJfU1RNVF9TSEEzODRfQkFTRTY0ID0KICAgICAgICAgImluc2VydCBpbnRvIFVTRVJfVEFCTEVfU0hBMzg0X0JBU0U2NCB2YWx1ZXMgKD8sID8pIjsKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSU5TRVJUX1VTRVJfU1RNVF9TSEE1MTJfQkFTRTY0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElOU0VSVF9VU0VSX1NUTVRfU0hBNTEyX0JBU0U2NCA9CiAgICAgICAgICJpbnNlcnQgaW50byBVU0VSX1RBQkxFX1NIQTUxMl9CQVNFNjQgdmFsdWVzICg/LCA/KSI7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSU5TRVJUX1VTRVJfU1RNVF9NRDJfSEVYID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElOU0VSVF9VU0VSX1NUTVRfTUQyX0hFWCA9CiAgICAgICAgICJpbnNlcnQgaW50byBVU0VSX1RBQkxFX01EMl9IRVggdmFsdWVzICg/LCA/KSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElOU0VSVF9VU0VSX1NUTVRfTUQ1X0hFWCA9IAorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJTlNFUlRfVVNFUl9TVE1UX01ENV9IRVggPQogICAgICAgICAiaW5zZXJ0IGludG8gVVNFUl9UQUJMRV9NRDVfSEVYIHZhbHVlcyAoPywgPykiOwotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJTlNFUlRfVVNFUl9TVE1UX1NIQV9IRVggPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSU5TRVJUX1VTRVJfU1RNVF9TSEFfSEVYID0KICAgICAgICAgImluc2VydCBpbnRvIFVTRVJfVEFCTEVfU0hBX0hFWCB2YWx1ZXMgKD8sID8pIjsKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSU5TRVJUX1VTRVJfU1RNVF9TSEEyNTZfSEVYID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElOU0VSVF9VU0VSX1NUTVRfU0hBMjU2X0hFWCA9CiAgICAgICAgICJpbnNlcnQgaW50byBVU0VSX1RBQkxFX1NIQTI1Nl9IRVggdmFsdWVzICg/LCA/KSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElOU0VSVF9VU0VSX1NUTVRfU0hBMzg0X0hFWCA9IAorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJTlNFUlRfVVNFUl9TVE1UX1NIQTM4NF9IRVggPQogICAgICAgICAiaW5zZXJ0IGludG8gVVNFUl9UQUJMRV9TSEEzODRfSEVYIHZhbHVlcyAoPywgPykiOwotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJTlNFUlRfVVNFUl9TVE1UX1NIQTUxMl9IRVggPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSU5TRVJUX1VTRVJfU1RNVF9TSEE1MTJfSEVYID0KICAgICAgICAgImluc2VydCBpbnRvIFVTRVJfVEFCTEVfU0hBNTEyX0hFWCB2YWx1ZXMgKD8sID8pIjsKIAotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJTlNFUlRfR1JPVVBfU1RNVCA9IAorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJTlNFUlRfR1JPVVBfU1RNVCA9CiAgICAgICAgICJpbnNlcnQgaW50byBHUk9VUF9UQUJMRSB2YWx1ZXMgKD8sID8pIjsKIAogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgdmVyYm9zZShTdHJpbmcgbXNnKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qZGJjcmVhbG0vd2ViL1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qZGJjcmVhbG0vd2ViL1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggNmI3MTRiZS4uODQzNWQ5NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamRiY3JlYWxtL3dlYi9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pkYmNyZWFsbS93ZWIvVGVzdFNlcnZsZXQuamF2YQpAQCAtMjgsMzIgKzI4LDMyIEBACiAKIHB1YmxpYyBjbGFzcyBUZXN0U2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAotCS8vIFNlY3VyaXR5IHJvbGUgcmVmZXJlbmNlcy4KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZW1wX3NlY3JvbGVfcmVmICAgPSAic3RhZmYiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBhZG1pbl9zZWNyb2xlX3JlZiA9ICJBRE1JTiI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIG1ncl9zZWNyb2xlX3JlZiAgID0gIk1hbmFnZXIiOworICAgIC8vIFNlY3VyaXR5IHJvbGUgcmVmZXJlbmNlcy4KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZW1wX3NlY3JvbGVfcmVmICAgPSAic3RhZmYiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBhZG1pbl9zZWNyb2xlX3JlZiA9ICJBRE1JTiI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIG1ncl9zZWNyb2xlX3JlZiAgID0gIk1hbmFnZXIiOwogCiAgICAgICAgIFN0cmluZyB1c2VyPSJxd2VydCI7Ci0gICAgCVByb3BlcnRpZXMgcHJvcHM9bnVsbDsKKyAgICAgICAgUHJvcGVydGllcyBwcm9wcz1udWxsOwogCiAKLSAgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIAotCXsKKyAgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uCisgICAgewogICAgICAgICAgICAgUHJpbnRXcml0ZXIgb3V0PSByZXNwb25zZS5nZXRXcml0ZXIoKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+QmFzaWMgQXV0aGVudGljYXRpb24gdGVzdHMgZnJvbSBTZXJ2bGV0OiBUZXN0MSxUZXN0MixUZXN0MyAiKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+QXV0aG9yaXphdGlvbiB0ZXN0IGZyb20gU2VydmxldDogVGVzdDQsVGVzdDUtPiBIdHRwU2VydmxldFJlcXVlc3QuaXNVc2VySW5Sb2xlKCkgYXV0aG9yaXphdGlvbiBmcm9tIFNlcnZsZXQuIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdGVzdDEocmVxdWVzdCwgcmVzcG9uc2UsIG91dCk7CiAgICAgICAgICAgICB0ZXN0MihyZXF1ZXN0LCByZXNwb25zZSwgb3V0KTsKICAgICAgICAgICAgIHRlc3QzKHJlcXVlc3QsIHJlc3BvbnNlLCBvdXQpOwogICAgICAgICAgICAgdGVzdDQocmVxdWVzdCwgcmVzcG9uc2UsIG91dCk7CiAgICAgICAgICAgICB0ZXN0NShyZXF1ZXN0LCByZXNwb25zZSwgb3V0KTsKLQl9CisgICAgfQogCiAKICAgICAgICAgLy9UZXN0cyBiZWdpbgotCXB1YmxpYyB2b2lkIHRlc3QxKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBQcmludFdyaXRlciBvdXQpCi0JeworICAgIHB1YmxpYyB2b2lkIHRlc3QxKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBQcmludFdyaXRlciBvdXQpCisgICAgewogICAgICAgICAgICAgICAgIC8vQ2hlY2sgdGhlIGF1dGggdHlwZSAtIHJlcXVlc3QuZ2V0QXV0aFR5cGUoKQogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+PGJyPlRlc3QxLiBQb3N0aXZlIGNoZWNrIGZvciB0aGUgY29ycmVjdCBhdXRoZW50aWNhdGlvbiB0eXBlIik7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGF1dGh0eXBlPXJlcXVlc3QuZ2V0QXV0aFR5cGUoKTsKQEAgLTk4LDcgKzk4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+SHR0cFNlcnZsZXRSZXF1ZXN0LmlzVXNlckluUm9sZSgpIHRlc3QgRmFpbGVkISIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPkluZm86cmVxdWVzdC5pc1VzZXJJblJvbGUoXCIiK2VtcF9zZWNyb2xlX3JlZisiXCIpIGlzPSAiK2lzSW5Qcm9wZXJSb2xlKTsKLQl9CisgICAgfQogCiAgICAgICAgIC8vVGVzdDUgLSBOZWdhdGl2ZSB0ZXN0IGZvciBjaGVja2luZyB0aGUgdXNlcidzIHByb3BlciByb2xlCiAgICAgICAgIHB1YmxpYyB2b2lkIHRlc3Q1KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBQcmludFdyaXRlciBvdXQpewpAQCAtMTEwLDYgKzExMCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPkh0dHBTZXJ2bGV0UmVxdWVzdC5pc1VzZXJJblJvbGUoKSB0ZXN0IEZhaWxlZCEiKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj5JbmZvOnJlcXVlc3QuaXNVc2VySW5Sb2xlKFwiIittZ3Jfc2Vjcm9sZV9yZWYrIlwiKSBpcz0gIitpc05vdEluT3RoZXJSb2xlKTsKLQl9CisgICAgfQogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBTZXJ2bGV0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBTZXJ2bGV0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTFlYzAxOC4uODQwOWY2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwU2VydmxldC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cFNlcnZsZXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHktam1hYy1odHRwc2VydmxldCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cFNlcnZsZXQvc3JjL0h0dHBTZXJ2bGV0VGVzdEF1dGhNb2R1bGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cFNlcnZsZXQvc3JjL0h0dHBTZXJ2bGV0VGVzdEF1dGhNb2R1bGUuamF2YQppbmRleCAzMjVjMjUwLi4wMDJlMThlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBTZXJ2bGV0L3NyYy9IdHRwU2VydmxldFRlc3RBdXRoTW9kdWxlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwU2VydmxldC9zcmMvSHR0cFNlcnZsZXRUZXN0QXV0aE1vZHVsZS5qYXZhCkBAIC03Miw3ICs3Miw3IEBACiAgICAgICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlID0KICAgICAgICAgICAgICAgICAoSHR0cFNlcnZsZXRSZXNwb25zZSltZXNzYWdlSW5mby5nZXRSZXNwb25zZU1lc3NhZ2UoKTsKICAgICAgICAgICAgIFN0cmluZyBhdXRob3JpemF0aW9uID0gcmVxdWVzdC5nZXRIZWFkZXIoImF1dGhvcml6YXRpb24iKTsKLSAgICAgICAgICAgIGlmIChhdXRob3JpemF0aW9uICE9IG51bGwgJiYgCisgICAgICAgICAgICBpZiAoYXV0aG9yaXphdGlvbiAhPSBudWxsICYmCiAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml6YXRpb24udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJiYXNpYyAiKSkgewogICAgICAgICAgICAgICAgIGF1dGhvcml6YXRpb24gPSBhdXRob3JpemF0aW9uLnN1YnN0cmluZyg2KS50cmltKCk7CiAgICAgICAgICAgICAgICAgQkFTRTY0RGVjb2RlciBkZWNvZGVyID0gbmV3IEJBU0U2NERlY29kZXIoKTsKQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHVzZXJuYW1lID09IG51bGwgfHwgcGFzc3dvcmQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldEhlYWRlcigiV1dXLUF1dGhlbnRpY2F0ZSIsICJCYXNpYyByZWFsbT1cImRlZmF1bHRcIiIpOyAgCisgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKCJXV1ctQXV0aGVudGljYXRlIiwgIkJhc2ljIHJlYWxtPVwiZGVmYXVsdFwiIik7CiAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2VuZEVycm9yKEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfVU5BVVRIT1JJWkVEKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxvZ2luIHByb21wdCBmb3IgdXNlcm5hbWUvcGFzc3dvcmQiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gQXV0aFN0YXR1cy5TRU5EX0NPTlRJTlVFOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwU2VydmxldC9zcmMvTXlIdHRwU2VydmxldFJlc3BvbnNlV3JhcHBlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwU2VydmxldC9zcmMvTXlIdHRwU2VydmxldFJlc3BvbnNlV3JhcHBlci5qYXZhCmluZGV4IGRlZTVkYWIuLjI0NmNiOTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cFNlcnZsZXQvc3JjL015SHR0cFNlcnZsZXRSZXNwb25zZVdyYXBwZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBTZXJ2bGV0L3NyYy9NeUh0dHBTZXJ2bGV0UmVzcG9uc2VXcmFwcGVyLmphdmEKQEAgLTUzLDcgKzUzLDcgQEAKICAgICB9CiAKICAgICAvLyBvdXIganNwIHdyaXRlciBvbmx5IHVzZSB3cml0ZSBjaGFyW10gb2ZmIGxlbgotICAgIHB1YmxpYyB2b2lkIHdyaXRlKGNoYXJbXSBjYnVmLCBpbnQgb2ZmLCBpbnQgbGVuKSB7IAorICAgIHB1YmxpYyB2b2lkIHdyaXRlKGNoYXJbXSBjYnVmLCBpbnQgb2ZmLCBpbnQgbGVuKSB7CiAgICAgICAgIGNvdW50ICs9IGxlbiAtIG51bU9mQ1IoY2J1Ziwgb2ZmLCBsZW4pOwogICAgICAgICBzdXBlci53cml0ZShjYnVmLCBvZmYsIGxlbik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwU2VydmxldENoYWxsZW5nZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwU2VydmxldENoYWxsZW5nZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGMzYmQ3MmEuLjIyN2E4NTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cFNlcnZsZXRDaGFsbGVuZ2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBTZXJ2bGV0Q2hhbGxlbmdlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5LWptYWMtaHR0cHNlcnZsZXRjaGFsbGVuZ2UiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBTZXJ2bGV0Q2hhbGxlbmdlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cFNlcnZsZXRDaGFsbGVuZ2UvYnVpbGQueG1sCmluZGV4IGUxNWExYTkuLmJlMzlhYWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cFNlcnZsZXRDaGFsbGVuZ2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cFNlcnZsZXRDaGFsbGVuZ2UvYnVpbGQueG1sCkBAIC0xMTEsNyArMTExLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItbGlicmFyaWVzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcy5wcm9wcyIgdmFsdWU9IiR7YXMucHJvcHN9Ii8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0ibGlicmFyaWVzIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9saWIvdGVzdC0ke2FwcG5hbWV9LXByb3ZpZGVyLmphciIvPiAgICAgICAgICAgIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxpYnJhcmllcyIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL3Rlc3QtJHthcHBuYW1lfS1wcm92aWRlci5qYXIiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwU2VydmxldENoYWxsZW5nZS9zcmMvSHR0cFNlcnZsZXRDaGFsbGVuZ2VUZXN0QXV0aE1vZHVsZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwU2VydmxldENoYWxsZW5nZS9zcmMvSHR0cFNlcnZsZXRDaGFsbGVuZ2VUZXN0QXV0aE1vZHVsZS5qYXZhCmluZGV4IDZmMmJkMWMuLjQzYWFmNGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cFNlcnZsZXRDaGFsbGVuZ2Uvc3JjL0h0dHBTZXJ2bGV0Q2hhbGxlbmdlVGVzdEF1dGhNb2R1bGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBTZXJ2bGV0Q2hhbGxlbmdlL3NyYy9IdHRwU2VydmxldENoYWxsZW5nZVRlc3RBdXRoTW9kdWxlLmphdmEKQEAgLTYzLDExICs2MywxMSBAQAogICAgICAgICBTdHJpbmcgdXNlcm5hbWUgPSBudWxsOwogICAgICAgICBTdHJpbmcgcGFzc3dvcmQgPSBudWxsOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0ID0KICAgICAgICAgICAgICAgICAoSHR0cFNlcnZsZXRSZXF1ZXN0KW1lc3NhZ2VJbmZvLmdldFJlcXVlc3RNZXNzYWdlKCk7CiAgICAgICAgICAgICBTdHJpbmcgYXV0aG9yaXphdGlvbiA9IHJlcXVlc3QuZ2V0SGVhZGVyKCJhdXRob3JpemF0aW9uIik7Ci0gICAgICAgICAgICBpZiAoYXV0aG9yaXphdGlvbiAhPSBudWxsICYmIAorICAgICAgICAgICAgaWYgKGF1dGhvcml6YXRpb24gIT0gbnVsbCAmJgogICAgICAgICAgICAgICAgICAgICBhdXRob3JpemF0aW9uLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiYmFzaWMgIikpIHsKICAgICAgICAgICAgICAgICBhdXRob3JpemF0aW9uID0gYXV0aG9yaXphdGlvbi5zdWJzdHJpbmcoNikudHJpbSgpOwogICAgICAgICAgICAgICAgIEJBU0U2NERlY29kZXIgZGVjb2RlciA9IG5ldyBCQVNFNjREZWNvZGVyKCk7CkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlID0KICAgICAgICAgICAgICAgICAgICAgIChIdHRwU2VydmxldFJlc3BvbnNlKW1lc3NhZ2VJbmZvLmdldFJlc3BvbnNlTWVzc2FnZSgpOwogICAgICAgICAgICAgaWYgKHVzZXJuYW1lID09IG51bGwgfHwgcGFzc3dvcmQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldEhlYWRlcigiV1dXLUF1dGhlbnRpY2F0ZSIsICJCYXNpYyByZWFsbT1cImRlZmF1bHRcIiIpOyAgCisgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKCJXV1ctQXV0aGVudGljYXRlIiwgIkJhc2ljIHJlYWxtPVwiZGVmYXVsdFwiIik7CiAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2VuZEVycm9yKEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfVU5BVVRIT1JJWkVEKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxvZ2luIHByb21wdCBmb3IgdXNlcm5hbWUvcGFzc3dvcmQiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gQXV0aFN0YXR1cy5TRU5EX0NPTlRJTlVFOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwU2VydmxldEZvcm0vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cFNlcnZsZXRGb3JtL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWM4Y2YzMC4uZjE0OWY5ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwU2VydmxldEZvcm0vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBTZXJ2bGV0Rm9ybS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eS1qbWFjLWh0dHBzZXJ2bGV0Zm9ybSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cHMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cHMvYnVpbGQucHJvcGVydGllcwppbmRleCAxYWNiYjUzLi44Y2I0YzBhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eS1qbWFjLWh0dHBzIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBzL2J1aWxkLnhtbAppbmRleCA1MDc3NWM2Li5lM2U5YTA2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBzL2J1aWxkLnhtbApAQCAtNTgsNyArNTgsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzLnByb3BzIiB2YWx1ZT0iJHthcy5wcm9wc30gLS1sYXllciBIdHRwU2VydmxldCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSJodHRwc1Rlc3RBdXRoTW9kdWxlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9InJlbW92ZS1zdG9yZS1jb21tb24iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJlbW92ZS1zdG9yZS1jb21tb24iLz4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQiLz4KICAgICAgICAgPCEtLSBtYXkgbm90IGJlIGFibGUgdG8gZGVsZXRlIHRoaXMgZmlsZSBpbiBQQyBlbnZpcm9ubWVudCAtLT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvc29hcC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9zb2FwL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOWY5NjM2Yi4uZjFiNDZiZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9zb2FwL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9zb2FwL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5LWptYWMtc29hcCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvc29hcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL3NvYXAvYnVpbGQueG1sCmluZGV4IGQ2YzRkYWMuLmE3NWRhYzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvc29hcC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9zb2FwL2J1aWxkLnhtbApAQCAtMTIwLDcgKzEyMCw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtY2xpZW50Ij4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+IAorICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3c2ltcG9ydCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3NpbXBvcnQuYXJncyIKICAgICAgICAgICAgICAgICB2YWx1ZT0iLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IGh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L0ptYWNTb2FwRWpiU2VydmljZS9IZWxsb0VqYj9XU0RMIi8+CkBAIC0xNDIsNyArMTQyLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtc2VydmVyIiBkZXBlbmRzPSJjb21waWxlLXNlcnZlciI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWpiamFyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vZWpid3MiLz4KQEAgLTE1NiwxNiArMTU2LDE2IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3NlcnZsZXR3cyIvPgogICAgICAgICA8L2phcj4KIAotICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPiAKKyAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KLQkgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgorICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgICAgIDwvamFyPiAgIAorICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtY2xpZW50IiBkZXBlbmRzPSJjb21waWxlLWNsaWVudCI+CkBAIC0xNzQsMTEgKzE3NCwxMSBAQAogICAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7Y2xpZW50LWhhbmRsZXIueG1sfSIgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudC9jb20vc3VuL3MxYXNkZXYvc2VjdXJpdHkvam1hYy9zb2FwL2NsaWVudCIgZmFpbG9uZXJyb3I9InRydWUiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIgogICAgICAgICAgICAgICAgIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuamFyIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuamFyIgogICAgICAgICAgICAgICAgIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICAgIHZhbHVlPSJjb20vc3VuLyoqLyouY2xhc3MsIGNvbS9zdW4vKiovKi54bWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9zb2FwL2NsaWVudC9UZXN0SGFuZGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9zb2FwL2NsaWVudC9UZXN0SGFuZGxlci5qYXZhCmluZGV4IGJlYjBhMDcuLjJiMGM1MDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvc29hcC9jbGllbnQvVGVzdEhhbmRsZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL3NvYXAvY2xpZW50L1Rlc3RIYW5kbGVyLmphdmEKQEAgLTI2LDExICsyNiwxMSBAQAogaW1wb3J0IGpha2FydGEueG1sLnNvYXAuKjsKIAogcHVibGljIGNsYXNzIFRlc3RIYW5kbGVyIGltcGxlbWVudHMgU09BUEhhbmRsZXI8U09BUE1lc3NhZ2VDb250ZXh0PiB7Ci0gICAgCisKICAgICBwdWJsaWMgU2V0PFFOYW1lPiBnZXRIZWFkZXJzKCkgewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewogICAgIH0KIApAQCAtNTYsMTQgKzU2LDE0IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlRmF1bHQoU09BUE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBjbG9zZShNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9zb2FwRGVmYXVsdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9zb2FwRGVmYXVsdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI5MTQ1MDYuLjYyODMyOGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvc29hcERlZmF1bHQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL3NvYXBEZWZhdWx0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5LWptYWMtc29hcGRlZmF1bHQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL3NvYXBEZWZhdWx0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvc29hcERlZmF1bHQvYnVpbGQueG1sCmluZGV4IDE5NGRmYjAuLjQwY2YzZmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvc29hcERlZmF1bHQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvc29hcERlZmF1bHQvYnVpbGQueG1sCkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IlNPQVBEZWZhdWx0VGVzdENsaWVudEF1dGhNb2R1bGUiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JPGFudGNhbGwgdGFyZ2V0PSJlbmFibGUtd3NzLW1lc3NhZ2Utc2VjdXJpdHktcHJvdmlkZXIiPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZW5hYmxlLXdzcy1tZXNzYWdlLXNlY3VyaXR5LXByb3ZpZGVyIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c3Muc2VydmVyLnByb3ZpZGVyLm5hbWUiIHZhbHVlPSJTT0FQRGVmYXVsdFRlc3RTZXJ2ZXJBdXRoTW9kdWxlIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3NzLmNsaWVudC5wcm92aWRlci5uYW1lIiB2YWx1ZT0iU09BUERlZmF1bHRUZXN0Q2xpZW50QXV0aE1vZHVsZSIvPgogICAgICAgICA8L2FudGNhbGw+CkBAIC0xMTcsNyArMTE3LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iU09BUERlZmF1bHRUZXN0Q2xpZW50QXV0aE1vZHVsZSIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLQk8YW50Y2FsbCB0YXJnZXQ9ImRpc2FibGUtd3NzLW1lc3NhZ2Utc2VjdXJpdHktcHJvdmlkZXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRpc2FibGUtd3NzLW1lc3NhZ2Utc2VjdXJpdHktcHJvdmlkZXIiLz4KIAogICAgICAgICA8IS0tIG1heSBub3QgYmUgYWJsZSB0byBkZWxldGUgdGhpcyBmaWxlIGluIFBDIGVudmlyb25tZW50IC0tPgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL3Rlc3QtJHthcHBuYW1lfS1wcm92aWRlci5qYXIiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgpAQCAtMTM1LDcgKzEzNSw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtY2xpZW50Ij4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+IAorICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3c2ltcG9ydCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3NpbXBvcnQuYXJncyIKICAgICAgICAgICAgICAgICB2YWx1ZT0iLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IGh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L0ptYWNTb2FwRGVmYXVsdEVqYlNlcnZpY2UvSGVsbG9FamI/V1NETCIvPgpAQCAtMTU3LDcgKzE1Nyw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXNlcnZlciIgZGVwZW5kcz0iY29tcGlsZS1zZXJ2ZXIiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gCisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVqYmphci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2VqYndzIi8+CkBAIC0xNzAsMTYgKzE3MCwxNiBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9zZXJ2bGV0d3MiLz4KICAgICAgICAgPC9qYXI+CiAKLSAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4gCisgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+Ci0JICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgotICAgICAgICA8L2phcj4gICAKKyAgICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWNsaWVudCIgZGVwZW5kcz0iY29tcGlsZS1jbGllbnQiPgpAQCAtMTg3LDExICsxODcsMTEgQEAKIAogICAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIKICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIKICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgICB2YWx1ZT0iY29tL3N1bi8qKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvc29hcEVtYmVkZGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL3NvYXBFbWJlZGRlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGM4ZjA3NGYuLmY4YTUwNmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvc29hcEVtYmVkZGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9zb2FwRW1iZWRkZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHktam1hYy1zb2FwZW1iZWRkZWQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL3NvYXBFbWJlZGRlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL3NvYXBFbWJlZGRlZC9idWlsZC54bWwKaW5kZXggYmYzMTFhNC4uODE2MWVmNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9zb2FwRW1iZWRkZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvc29hcEVtYmVkZGVkL2J1aWxkLnhtbApAQCAtOTksNyArOTksNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLXdlYmNsaWVudCI+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudCIvPiAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id3NpbXBvcnQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzaW1wb3J0LmFyZ3MiCiAgICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudCBodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS9KbWFjU29hcEVtYmVkZGVkRWpiU2VydmljZS9IZWxsb0VqYj9XU0RMIi8+CkBAIC0xMjEsNyArMTIxLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtc2VydmVyIiBkZXBlbmRzPSJjb21waWxlLXNlcnZlciI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWpiamFyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vZWpid3MiLz4KQEAgLTEzNSwxNiArMTM1LDE2IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3NlcnZsZXR3cyIvPgogICAgICAgICA8L2phcj4KIAotICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPiAKKyAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KLQkgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgorICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgICAgIDwvamFyPiAgIAorICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtd2ViY2xpZW50IiBkZXBlbmRzPSJjb21waWxlLXdlYmNsaWVudCI+CkBAIC0xNTMsOSArMTUzLDkgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYi54bWwiIHZhbHVlPSIke3dlYjIueG1sfSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iJHtzdW4td2ViMi54bWx9Ii8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIgogICAgICAgICAgICAgICAgIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuZmlsZSIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmZpbGUiCiAgICAgICAgICAgICAgICAgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC13ZWIud2FyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KQEAgLTIwNiw3ICsyMDYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBuYW1lIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBuYW1lIgogICAgICAgICAgICAgICAgIHZhbHVlPSIke2FwcG5hbWV9LWNsaWVudCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qc3Ayc2Z1bC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvanNwMnNmdWwvYnVpbGQucHJvcGVydGllcwppbmRleCBlZWNhNDgwLi4zZmY2M2Y1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qc3Ayc2Z1bC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pzcDJzZnVsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpzcDJzZnVsIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIgLz4KQEAgLTI1LDYgKzI1LDYgQEAKIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0ic3RhdGVmdWxMb2dpbkJlYW4iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0ic3RhdGVmdWxMb2dpbkJlYW4iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pzcDJzZnVsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pzcDJzZnVsL2J1aWxkLnhtbAppbmRleCA5OTQ3MGNhLi5mMDE1MWFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qc3Ayc2Z1bC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvanNwMnNmdWwvYnVpbGQueG1sCkBAIC0zMyw3ICszMyw3IEBACiAgICAgJmNvbW1vblJ1bjsKICAgICAmY29tbW9uU2VjdXJpdHk7CiAgICAgJnRlc3RQcm9wZXJ0aWVzOwotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLCBzZXR1cCwgZGVwbG95LCBydW4sIHVuZGVwbG95LCB1bnNldHVwIi8+CiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KQEAgLTQ4LDcgKzQ4LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iIC8+CkBAIC0xNjEsMjggKzE2MSwyOCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXVzZXItY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJzaGluZ3dhaSIvPgotCSAgICA8cGFyYW0gbmFtZT0icGFzc3dvcmQiIHZhbHVlPSJzaGluZ3dhaSIvPgotCSAgICA8cGFyYW0gbmFtZT0iZ3JvdXBzIiB2YWx1ZT0iZW1wbG95ZWUiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJzaGluZ3dhaSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icGFzc3dvcmQiIHZhbHVlPSJzaGluZ3dhaSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0iZ3JvdXBzIiB2YWx1ZT0iZW1wbG95ZWUiLz4KICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXVzZXItY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJzd2NoYW4iLz4KLQkgICAgPHBhcmFtIG5hbWU9InBhc3N3b3JkIiB2YWx1ZT0ic3djaGFuIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJncm91cHMiIHZhbHVlPSJzdGFmZiIvPgorICAgICAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9InN3Y2hhbiIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icGFzc3dvcmQiIHZhbHVlPSJzd2NoYW4iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Imdyb3VwcyIgdmFsdWU9InN0YWZmIi8+CiAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS11c2VyLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0id2VidXNlciIvPgotCSAgICA8cGFyYW0gbmFtZT0icGFzc3dvcmQiIHZhbHVlPSJ3ZWJ1c2VyIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJncm91cHMiIHZhbHVlPSJlbXBsb3llZSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9IndlYnVzZXIiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InBhc3N3b3JkIiB2YWx1ZT0id2VidXNlciIvPgorICAgICAgICA8cGFyYW0gbmFtZT0iZ3JvdXBzIiB2YWx1ZT0iZW1wbG95ZWUiLz4KICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXVzZXItY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJub2F1dGh1c2VyIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJwYXNzd29yZCIgdmFsdWU9Im5vYXV0aHVzZXIiLz4KLQkgICAgPHBhcmFtIG5hbWU9Imdyb3VwcyIgdmFsdWU9ImVtcGxveWVlIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0ibm9hdXRodXNlciIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icGFzc3dvcmQiIHZhbHVlPSJub2F1dGh1c2VyIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJncm91cHMiIHZhbHVlPSJlbXBsb3llZSIvPgogICAgICAgIDwvYW50Y2FsbD4KICAgICA8IS0tICA8YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPi0tPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIj4KICAgICAgIDwhLS0gcmVtb3ZlIHRlc3QgdXNlcnMsIGp1c3QgY2xlYW51cC4gLS0+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qc3Ayc2Z1bC9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pzcDJzZnVsL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCmluZGV4IDIyYjk1YjAuLjI1NzJlMGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pzcDJzZnVsL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pzcDJzZnVsL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCkBAIC0yNSw4ICsyNSw4IEBACiAgIDwvbW9kdWxlPgogICA8bW9kdWxlPgogICAgIDx3ZWI+Ci0gICAgCTx3ZWItdXJpPmpzcDJzZnVsLXdlYi53YXI8L3dlYi11cmk+Ci0gICAgCTxjb250ZXh0LXJvb3Q+anNwMnNmdWw8L2NvbnRleHQtcm9vdD4KKyAgICAgICAgPHdlYi11cmk+anNwMnNmdWwtd2ViLndhcjwvd2ViLXVyaT4KKyAgICAgICAgPGNvbnRleHQtcm9vdD5qc3Ayc2Z1bDwvY29udGV4dC1yb290PgogICAgIDwvd2ViPgogICA8L21vZHVsZT4KIDwvYXBwbGljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qc3Ayc2Z1bC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pzcDJzZnVsL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDcxYTE0ZmYuLjBhZTExMjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pzcDJzZnVsL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pzcDJzZnVsL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0xOSwzMCArMTksMzAgQEAKIC0tPgogCiA8c3VuLWVqYi1qYXI+Ci0JPGVudGVycHJpc2UtYmVhbnM+Ci0JPHVuaXF1ZS1pZD4wPC91bmlxdWUtaWQ+Ci0JPGVqYj4KLQkJPGVqYi1uYW1lPmpzcDJzZnVsPC9lamItbmFtZT4KLQkJPGpuZGktbmFtZT5qc3Ayc2Z1bDwvam5kaS1uYW1lPgorICAgIDxlbnRlcnByaXNlLWJlYW5zPgorICAgIDx1bmlxdWUtaWQ+MDwvdW5pcXVlLWlkPgorICAgIDxlamI+CisgICAgICAgIDxlamItbmFtZT5qc3Ayc2Z1bDwvZWpiLW5hbWU+CisgICAgICAgIDxqbmRpLW5hbWU+anNwMnNmdWw8L2puZGktbmFtZT4KIAotCQk8aW9yLXNlY3VyaXR5LWNvbmZpZz4KLQkJCTx0cmFuc3BvcnQtY29uZmlnPgotCQkJCTxpbnRlZ3JpdHk+c3VwcG9ydGVkPC9pbnRlZ3JpdHk+Ci0JCQkJPGNvbmZpZGVudGlhbGl0eT5zdXBwb3J0ZWQ8L2NvbmZpZGVudGlhbGl0eT4KLQkJCQk8ZXN0YWJsaXNoLXRydXN0LWluLXRhcmdldD5zdXBwb3J0ZWQ8L2VzdGFibGlzaC10cnVzdC1pbi10YXJnZXQ+Ci0JCQkJPGVzdGFibGlzaC10cnVzdC1pbi1jbGllbnQ+c3VwcG9ydGVkPC9lc3RhYmxpc2gtdHJ1c3QtaW4tY2xpZW50PgotCQkJPC90cmFuc3BvcnQtY29uZmlnPgotCQkJPGFzLWNvbnRleHQ+Ci0JCQkJPGF1dGgtbWV0aG9kPnVzZXJuYW1lX3Bhc3N3b3JkPC9hdXRoLW1ldGhvZD4KLQkJCQk8cmVhbG0+ZGVmYXVsdDwvcmVhbG0+Ci0JCQkJPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLQkJCTwvYXMtY29udGV4dD4KLQkJCTxzYXMtY29udGV4dD4KLQkJCQk8Y2FsbGVyLXByb3BhZ2F0aW9uPnN1cHBvcnRlZDwvY2FsbGVyLXByb3BhZ2F0aW9uPgotCQkJPC9zYXMtY29udGV4dD4KLQkJPC9pb3Itc2VjdXJpdHktY29uZmlnPgotCQk8Z2VuLWNsYXNzZXMvPgotCTwvZWpiPgotCTwvZW50ZXJwcmlzZS1iZWFucz4KKyAgICAgICAgPGlvci1zZWN1cml0eS1jb25maWc+CisgICAgICAgICAgICA8dHJhbnNwb3J0LWNvbmZpZz4KKyAgICAgICAgICAgICAgICA8aW50ZWdyaXR5PnN1cHBvcnRlZDwvaW50ZWdyaXR5PgorICAgICAgICAgICAgICAgIDxjb25maWRlbnRpYWxpdHk+c3VwcG9ydGVkPC9jb25maWRlbnRpYWxpdHk+CisgICAgICAgICAgICAgICAgPGVzdGFibGlzaC10cnVzdC1pbi10YXJnZXQ+c3VwcG9ydGVkPC9lc3RhYmxpc2gtdHJ1c3QtaW4tdGFyZ2V0PgorICAgICAgICAgICAgICAgIDxlc3RhYmxpc2gtdHJ1c3QtaW4tY2xpZW50PnN1cHBvcnRlZDwvZXN0YWJsaXNoLXRydXN0LWluLWNsaWVudD4KKyAgICAgICAgICAgIDwvdHJhbnNwb3J0LWNvbmZpZz4KKyAgICAgICAgICAgIDxhcy1jb250ZXh0PgorICAgICAgICAgICAgICAgIDxhdXRoLW1ldGhvZD51c2VybmFtZV9wYXNzd29yZDwvYXV0aC1tZXRob2Q+CisgICAgICAgICAgICAgICAgPHJlYWxtPmRlZmF1bHQ8L3JlYWxtPgorICAgICAgICAgICAgICAgIDxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+CisgICAgICAgICAgICA8L2FzLWNvbnRleHQ+CisgICAgICAgICAgICA8c2FzLWNvbnRleHQ+CisgICAgICAgICAgICAgICAgPGNhbGxlci1wcm9wYWdhdGlvbj5zdXBwb3J0ZWQ8L2NhbGxlci1wcm9wYWdhdGlvbj4KKyAgICAgICAgICAgIDwvc2FzLWNvbnRleHQ+CisgICAgICAgIDwvaW9yLXNlY3VyaXR5LWNvbmZpZz4KKyAgICAgICAgPGdlbi1jbGFzc2VzLz4KKyAgICA8L2VqYj4KKyAgICA8L2VudGVycHJpc2UtYmVhbnM+CiA8L3N1bi1lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qc3Ayc2Z1bC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qc3Ayc2Z1bC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMzBlMjEwMS4uNzExZWIzZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvanNwMnNmdWwvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pzcDJzZnVsL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtNDksNyArNDksNyBAQAogICAgICAgICA8dHJhbnNwb3J0LWd1YXJhbnRlZT5OT05FPC90cmFuc3BvcnQtZ3VhcmFudGVlPgogICAgIDwvdXNlci1kYXRhLWNvbnN0cmFpbnQ+CiAgIDwvc2VjdXJpdHktY29uc3RyYWludD4KLSAgCisKICAgPGxvZ2luLWNvbmZpZz4KICAgICA8YXV0aC1tZXRob2Q+Rk9STTwvYXV0aC1tZXRob2Q+CiAgICAgPHJlYWxtLW5hbWU+ZGVmYXVsdDwvcmVhbG0tbmFtZT4KQEAgLTU4LDExICs1OCwxMSBAQAogICAgICAgPGZvcm0tZXJyb3ItcGFnZT4vZXJyb3IuaHRtbDwvZm9ybS1lcnJvci1wYWdlPgogICAgIDwvZm9ybS1sb2dpbi1jb25maWc+CiAgIDwvbG9naW4tY29uZmlnPgotICAKKwogICA8c2VjdXJpdHktcm9sZT4KICAgICA8cm9sZS1uYW1lPmVtcGxveWVlPC9yb2xlLW5hbWU+CiAgIDwvc2VjdXJpdHktcm9sZT4KLSAgCisKICAgPGVqYi1yZWY+CiAgICAgPGVqYi1yZWYtbmFtZT5qc3Ayc2Z1bDwvZWpiLXJlZi1uYW1lPgogICAgIDxlamItcmVmLXR5cGU+U2Vzc2lvbjwvZWpiLXJlZi10eXBlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvanNwMnNmdWwvcHJvZmlsZS9Qcm9maWxlSW5mb0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pzcDJzZnVsL3Byb2ZpbGUvUHJvZmlsZUluZm9CZWFuLmphdmEKaW5kZXggYjJiM2UwYS4uNGUyOTQyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvanNwMnNmdWwvcHJvZmlsZS9Qcm9maWxlSW5mb0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qc3Ayc2Z1bC9wcm9maWxlL1Byb2ZpbGVJbmZvQmVhbi5qYXZhCkBAIC0yOSwxMSArMjksMTEgQEAKICAqLwogCiBwdWJsaWMgY2xhc3MgUHJvZmlsZUluZm9CZWFuIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLSAgICAKKwogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2MgPSBudWxsOwotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgUHJvZmllSW5mbyAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwpAQCAtNDYsMjQgKzQ2LDI0IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRTZWNyZXRJbmZvKCkgewogICAgICAgICByZXR1cm4gIktlZXAgSXQgU2VjcmV0ISI7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2hvcHBpbmdDYXJ0IGVqYkFjdGl2YXRlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2hvcHBpbmdDYXJ0IGVqYlBhc3NpdmF0ZSIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaG9wcGluZ0NhcnQgZWpiUmVtb3ZlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dCBzZXNzaW9uQ29udGV4dCkgewogICAgICAgICBzYyA9IHNlc3Npb25Db250ZXh0OwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvanNwMnNmdWwvcHJvZmlsZS9Qcm9maWxlSW5mb0hvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pzcDJzZnVsL3Byb2ZpbGUvUHJvZmlsZUluZm9Ib21lLmphdmEKaW5kZXggZjQ3YWQyYS4uM2QzNDE3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvanNwMnNmdWwvcHJvZmlsZS9Qcm9maWxlSW5mb0hvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qc3Ayc2Z1bC9wcm9maWxlL1Byb2ZpbGVJbmZvSG9tZS5qYXZhCkBAIC0yMiw4ICsyMiw4IEBACiAgKiBAYXV0aG9yICBzd2NoYW4yCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgUHJvZmlsZUluZm9Ib21lIGV4dGVuZHMgRUpCSG9tZXsKLSAgICAKLSAgICBwdWJsaWMgUHJvZmlsZUluZm9SZW1vdGUgY3JlYXRlKFN0cmluZyBuYW1lKSAKKworICAgIHB1YmxpYyBQcm9maWxlSW5mb1JlbW90ZSBjcmVhdGUoU3RyaW5nIG5hbWUpCiAgICAgICAgIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDMzNzk3NjUuLjhmNzBhMWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXAvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5Ii8+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXAvc2ltcGxld2ViL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwL3NpbXBsZXdlYi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDkxZGYwOTYuLjQyZmE0NWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXAvc2ltcGxld2ViL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcC9zaW1wbGV3ZWIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9InNpbXBsZS13ZWJhcHAiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwL3NpbXBsZXdlYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwL3NpbXBsZXdlYi9idWlsZC54bWwKaW5kZXggZjEwN2I2YS4uNWFmOWQ2ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcC9zaW1wbGV3ZWIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXAvc2ltcGxld2ViL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgJmNvbW1vblNlY3VyaXR5OwogICAgJnRlc3RQcm9wZXJ0aWVzOwogICAgJnRlc3RQcm9wZXJ0aWVzMjsKLSAgICAKKwogICAgPHByb3BlcnR5IGZpbGU9Ii4uL2NvbmZpZy5wcm9wZXJ0aWVzIi8+CiAKIDwhLS0KQEAgLTUwLDI3ICs1MCwyNyBAQAogICAgPC90YXJnZXQ+CiAKICAgIDx0YXJnZXQgbmFtZT0iYWxsLXJlZyIgZGVwZW5kcz0iaW5pdC1jb21tb24sZW52LWNoZWNrIj4KLQkgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+Ci0JICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgotCSAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95Ii8+Ci0JICAgPGFudGNhbGwgdGFyZ2V0PSJydW4iLz4KLQkgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95Ii8+Ci0JICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CisgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgorICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveSIvPgorICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuIi8+CisgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveSIvPgorICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgogICAgPC90YXJnZXQ+CiAKICAgIDx0YXJnZXQgbmFtZT0iYWxsLXNzbCIgZGVwZW5kcz0iaW5pdC1jb21tb24sZW52LWNoZWNrIj4KLQkgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwLXNzbCIvPgotCSAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KLQkgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveSIvPgotCSAgIDxhbnRjYWxsIHRhcmdldD0icnVuIi8+Ci0JICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveSIvPgotCSAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cC1zc2wiLz4KKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwLXNzbCIvPgorICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveSIvPgorICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuIi8+CisgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveSIvPgorICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cC1zc2wiLz4KICAgIDwvdGFyZ2V0PgogCiAgICA8dGFyZ2V0IG5hbWU9ImRpc3BsYXktaGVhZGVyIj4KICAgICAgPGVjaG8gbWVzc2FnZT0iLS0+UnVubmluZyAke2FudC5wcm9qZWN0Lm5hbWV9IHRlc3RzIGZyb20gJHtiYXNlZGlyfSAuLi4iLz4KICAgIDwvdGFyZ2V0PgotICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8IS0tIGNyZWF0ZSBhdXRoIHJlYWxtcyAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWF1dGgtbGRhcHJlYWxtIi8+CkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJIdHRwQmFzaWNBdXRoVGVzdCIgZm9yaz0idHJ1ZSI+CiAgICAgICAgIDxjbGFzc3BhdGg+Ci0gIAkgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7czFhc3Rlc3QuY2xhc3NwYXRofSIvPgorICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2J1aWxkLmNsYXNzZXMuZGlyfToke3MxYXN0ZXN0LmNsYXNzcGF0aH0iLz4KICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDxhcmcgdmFsdWU9Ii11cmwiLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vJHthcHBuYW1lfS9UZXN0U2VydmxldCIvPgpAQCAtMTMzLDI2ICsxMzMsMjYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWxkYXAtdXNyZ3JwcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogCi0gIAkgIDxjb3B5IGZpbGU9IiR7Y3JlYXRlLmxkaWYuZmlsZX0iIHRvZmlsZT0idGVtcC5sZGlmIiBvdmVyd3JpdGU9InRydWUiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICAJICA8cmVwbGFjZSBmaWxlPSJ0ZW1wLmxkaWYiIHRva2VuPSJVTklRVUVfU1VCX0NPTlRFWFQiIHZhbHVlPSIke3VuaXF1ZS1sZGFwLXN1Yi1jb250ZXh0LWlkfSIvPgotCSAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgbGRhcCB0ZXN0IHVzZXJzIGFuZCBncm91cHMgYXQgbGRhcDovLyR7ZGlyZWN0b3J5LnNlcnZlci5ob3N0fToke2RpcmVjdG9yeS5zZXJ2ZXIucG9ydH0vP2RjPSR7dW5pcXVlLWxkYXAtc3ViLWNvbnRleHQtaWR9LCR7ZGlyZWN0b3J5LnNlcnZlci5iYXNlZG59Ii8+Ci0JICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtbGRhcC1sZGlmIj4KLQkJPHBhcmFtIG5hbWU9ImxkaWYuZmlsZS5wYXRoIiB2YWx1ZT0idGVtcC5sZGlmIi8+Ci0JICA8L2FudGNhbGw+Ci0JICA8ZWNobyBtZXNzYWdlPSJkZWxldGluZyB0ZW1wIGZpbGUuLi4iLz4KLQkgIDxkZWxldGUgZmlsZT0idGVtcC5sZGlmIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7Y3JlYXRlLmxkaWYuZmlsZX0iIHRvZmlsZT0idGVtcC5sZGlmIiBvdmVyd3JpdGU9InRydWUiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICA8cmVwbGFjZSBmaWxlPSJ0ZW1wLmxkaWYiIHRva2VuPSJVTklRVUVfU1VCX0NPTlRFWFQiIHZhbHVlPSIke3VuaXF1ZS1sZGFwLXN1Yi1jb250ZXh0LWlkfSIvPgorICAgICAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgbGRhcCB0ZXN0IHVzZXJzIGFuZCBncm91cHMgYXQgbGRhcDovLyR7ZGlyZWN0b3J5LnNlcnZlci5ob3N0fToke2RpcmVjdG9yeS5zZXJ2ZXIucG9ydH0vP2RjPSR7dW5pcXVlLWxkYXAtc3ViLWNvbnRleHQtaWR9LCR7ZGlyZWN0b3J5LnNlcnZlci5iYXNlZG59Ii8+CisgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtbGRhcC1sZGlmIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImxkaWYuZmlsZS5wYXRoIiB2YWx1ZT0idGVtcC5sZGlmIi8+CisgICAgICA8L2FudGNhbGw+CisgICAgICA8ZWNobyBtZXNzYWdlPSJkZWxldGluZyB0ZW1wIGZpbGUuLi4iLz4KKyAgICAgIDxkZWxldGUgZmlsZT0idGVtcC5sZGlmIi8+CiAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLWxkYXAtdXNyZ3JwcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAJICA8Y29weSBmaWxlPSIke2RlbGV0ZS5sZGlmLmZpbGV9IiB0b2ZpbGU9InRlbXAubGRpZiIgb3ZlcndyaXRlPSJ0cnVlIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgCSAgPHJlcGxhY2UgZmlsZT0idGVtcC5sZGlmIiB0b2tlbj0iVU5JUVVFX1NVQl9DT05URVhUIiB2YWx1ZT0iJHt1bmlxdWUtbGRhcC1zdWItY29udGV4dC1pZH0iLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtkZWxldGUubGRpZi5maWxlfSIgdG9maWxlPSJ0ZW1wLmxkaWYiIG92ZXJ3cml0ZT0idHJ1ZSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgIDxyZXBsYWNlIGZpbGU9InRlbXAubGRpZiIgdG9rZW49IlVOSVFVRV9TVUJfQ09OVEVYVCIgdmFsdWU9IiR7dW5pcXVlLWxkYXAtc3ViLWNvbnRleHQtaWR9Ii8+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJEZWxldGluZyBsZGFwIHRlc3QgdXNlcnMgYW5kIGdyb3VwcyBhdCBsZGFwOi8vJHtkaXJlY3Rvcnkuc2VydmVyLmhvc3R9OiR7ZGlyZWN0b3J5LnNlcnZlci5wb3J0fS8/ZGM9JHt1bmlxdWUtbGRhcC1zdWItY29udGV4dC1pZH0sJHtkaXJlY3Rvcnkuc2VydmVyLmJhc2Vkbn0iLz4KLQkgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1sZGFwLWxkaWYiPgotCQk8cGFyYW0gbmFtZT0ibGRpZi5maWxlLnBhdGgiIHZhbHVlPSJ0ZW1wLmxkaWYiLz4KLQkgIDwvYW50Y2FsbD4KLQkgIDxlY2hvIG1lc3NhZ2U9ImRlbGV0aW5nIHRlbXAgZmlsZS4uLiIvPgotCSAgPGRlbGV0ZSBmaWxlPSJ0ZW1wLmxkaWYiLz4KKyAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1sZGFwLWxkaWYiPgorICAgICAgICA8cGFyYW0gbmFtZT0ibGRpZi5maWxlLnBhdGgiIHZhbHVlPSJ0ZW1wLmxkaWYiLz4KKyAgICAgIDwvYW50Y2FsbD4KKyAgICAgIDxlY2hvIG1lc3NhZ2U9ImRlbGV0aW5nIHRlbXAgZmlsZS4uLiIvPgorICAgICAgPGRlbGV0ZSBmaWxlPSJ0ZW1wLmxkaWYiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdGFydCI+CkBAIC0xNjEsMzUgKzE2MSwzNSBAQAogCiAKIDx0YXJnZXQgbmFtZT0iZXhlY3V0ZS1sZGFwLWxkaWYiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8amF2YSBjbGFzc25hbWU9IkxEQVBNb2RpZnkiIGZvcms9InRydWUiIGZhaWxvbmVycm9yPSJmYWxzZSI+Ci0JCTxhcmcgbGluZT0iLWggJHtkaXJlY3Rvcnkuc2VydmVyLmhvc3R9Ii8+Ci0JCTxhcmcgbGluZT0iLXAgJHtkaXJlY3Rvcnkuc2VydmVyLnBvcnR9Ii8+Ci0JCTxhcmcgbGluZT0iLUQgJnF1b3Q7JHtkaXJlY3RvcnkubWFuYWdlci5kbn0mcXVvdDsiLz4KLQkJPGFyZyBsaW5lPSItdyAke2RpcmVjdG9yeS5tYW5hZ2VyLnBhc3N3ZH0iLz4KLQkJPGFyZyBsaW5lPSItZiAke2xkaWYuZmlsZS5wYXRofSIvPgotCQk8Y2xhc3NwYXRoPgotCQkJPHBhdGhlbGVtZW50IHBhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvbGRhcGpkay5qYXIiLz4KLQkJPC9jbGFzc3BhdGg+Ci0JPC9qYXZhPgorICAgIDxqYXZhIGNsYXNzbmFtZT0iTERBUE1vZGlmeSIgZm9yaz0idHJ1ZSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KKyAgICAgICAgPGFyZyBsaW5lPSItaCAke2RpcmVjdG9yeS5zZXJ2ZXIuaG9zdH0iLz4KKyAgICAgICAgPGFyZyBsaW5lPSItcCAke2RpcmVjdG9yeS5zZXJ2ZXIucG9ydH0iLz4KKyAgICAgICAgPGFyZyBsaW5lPSItRCAmcXVvdDske2RpcmVjdG9yeS5tYW5hZ2VyLmRufSZxdW90OyIvPgorICAgICAgICA8YXJnIGxpbmU9Ii13ICR7ZGlyZWN0b3J5Lm1hbmFnZXIucGFzc3dkfSIvPgorICAgICAgICA8YXJnIGxpbmU9Ii1mICR7bGRpZi5maWxlLnBhdGh9Ii8+CisgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9sZGFwamRrLmphciIvPgorICAgICAgICA8L2NsYXNzcGF0aD4KKyAgICA8L2phdmE+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJjcmVhdGUtYXV0aC1sZGFwcmVhbG0iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8IS0tIHdvcmthcm91bmQgZm9yIGhhbmRsaW5nIHRoZSBzcGVjaWFsIGNoYXJhY3RlciA6IGluIHRoZSBhZG1pbiBjb21tYW5kIC0tPgotCTxlY2hvIG1lc3NhZ2U9ImRpcmVjdG9yeT0ke2RpcmVjdG9yeS5zZXJ2ZXIudXJsfSIgZmlsZT0idGVtcC50eHQiLz4KLQk8cmVwbGFjZSBmaWxlPSJ0ZW1wLnR4dCIgdG9rZW49IjoiIHZhbHVlPSJcXDoiLz4KLQk8bG9hZHByb3BlcnRpZXMgc3JjRmlsZT0idGVtcC50eHQiLz4KLQk8ZGVsZXRlIGZpbGU9InRlbXAudHh0Ii8+Ci0JPGVjaG8gbWVzc2FnZT0iYmFzZS1kbj0ke2RpcmVjdG9yeS5zZXJ2ZXIuYmFzZWRufSIgZmlsZT0idGVtcC50eHQiLz4KLQk8cmVwbGFjZSBmaWxlPSJ0ZW1wLnR4dCIgdG9rZW49ImRjPSIgdmFsdWU9ImRjXFw9Ii8+Ci0JPGxvYWRwcm9wZXJ0aWVzIHNyY0ZpbGU9InRlbXAudHh0Ii8+Ci0JPGRlbGV0ZSBmaWxlPSJ0ZW1wLnR4dCIvPgorICAgIDwhLS0gd29ya2Fyb3VuZCBmb3IgaGFuZGxpbmcgdGhlIHNwZWNpYWwgY2hhcmFjdGVyIDogaW4gdGhlIGFkbWluIGNvbW1hbmQgLS0+CisgICAgPGVjaG8gbWVzc2FnZT0iZGlyZWN0b3J5PSR7ZGlyZWN0b3J5LnNlcnZlci51cmx9IiBmaWxlPSJ0ZW1wLnR4dCIvPgorICAgIDxyZXBsYWNlIGZpbGU9InRlbXAudHh0IiB0b2tlbj0iOiIgdmFsdWU9IlxcOiIvPgorICAgIDxsb2FkcHJvcGVydGllcyBzcmNGaWxlPSJ0ZW1wLnR4dCIvPgorICAgIDxkZWxldGUgZmlsZT0idGVtcC50eHQiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJiYXNlLWRuPSR7ZGlyZWN0b3J5LnNlcnZlci5iYXNlZG59IiBmaWxlPSJ0ZW1wLnR4dCIvPgorICAgIDxyZXBsYWNlIGZpbGU9InRlbXAudHh0IiB0b2tlbj0iZGM9IiB2YWx1ZT0iZGNcXD0iLz4KKyAgICA8bG9hZHByb3BlcnRpZXMgc3JjRmlsZT0idGVtcC50eHQiLz4KKyAgICA8ZGVsZXRlIGZpbGU9InRlbXAudHh0Ii8+CiAgICAgPGVjaG8gbWVzc2FnZT0idXJsPSR7ZGlyZWN0b3J5fSIvPgogICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2UtZG49JHtiYXNlLWRufSIvPgotCQotCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWF1dGgtcmVhbG0iPgotCSAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iJHtsZGFwLnJlYWxtLm5hbWV9Ii8+IAotCQk8cGFyYW0gbmFtZT0icmVhbG1jbGFzcyIgdmFsdWU9IiR7bGRhcC5yZWFsbS5jbGFzc30iLz4KLQkJPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9Ii0tcHJvcGVydHkgZGlyZWN0b3J5PSR7ZGlyZWN0b3J5fTpiYXNlLWRuPWRjXD0ke3VuaXF1ZS1sZGFwLXN1Yi1jb250ZXh0LWlkfSwke2Jhc2UtZG59OmphYXMtY29udGV4dD1sZGFwUmVhbG06Y29tLnN1bi5qbmRpLmxkYXAuY29ubmVjdC5wb29sPXRydWU6Y29tLnN1bi5qbmRpLmxkYXAuY29ubmVjdC5wb29sLm1heHNpemU9MiIvPgorCisgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtYXV0aC1yZWFsbSI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbW5hbWUiIHZhbHVlPSIke2xkYXAucmVhbG0ubmFtZX0iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSIke2xkYXAucmVhbG0uY2xhc3N9Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbXByb3BlcnRpZXMiIHZhbHVlPSItLXByb3BlcnR5IGRpcmVjdG9yeT0ke2RpcmVjdG9yeX06YmFzZS1kbj1kY1w9JHt1bmlxdWUtbGRhcC1zdWItY29udGV4dC1pZH0sJHtiYXNlLWRufTpqYWFzLWNvbnRleHQ9bGRhcFJlYWxtOmNvbS5zdW4uam5kaS5sZGFwLmNvbm5lY3QucG9vbD10cnVlOmNvbS5zdW4uam5kaS5sZGFwLmNvbm5lY3QucG9vbC5tYXhzaXplPTIiLz4KICAgICAgIDwvYW50Y2FsbD4KIDwvdGFyZ2V0PgogCkBAIC0yNTQsMjEgKzI1NCwyMSBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWF1dGgtbGRhcHJlYWxtLXNzbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxlY2hvIG1lc3NhZ2U9ImRpcmVjdG9yeT0ke2RpcmVjdG9yeS5zZXJ2ZXIudXJsLnNzbH0iIGZpbGU9InRlbXAudHh0Ii8+Ci0JPHJlcGxhY2UgZmlsZT0idGVtcC50eHQiIHRva2VuPSI6IiB2YWx1ZT0iXFw6Ii8+Ci0JPGxvYWRwcm9wZXJ0aWVzIHNyY0ZpbGU9InRlbXAudHh0Ii8+Ci0JPGRlbGV0ZSBmaWxlPSJ0ZW1wLnR4dCIvPgotCTxlY2hvIG1lc3NhZ2U9ImJhc2UtZG49JHtkaXJlY3Rvcnkuc2VydmVyLmJhc2Vkbn0iIGZpbGU9InRlbXAudHh0Ii8+Ci0JPHJlcGxhY2UgZmlsZT0idGVtcC50eHQiIHRva2VuPSJkYz0iIHZhbHVlPSJkY1xcPSIvPgotCTxsb2FkcHJvcGVydGllcyBzcmNGaWxlPSJ0ZW1wLnR4dCIvPgotCTxkZWxldGUgZmlsZT0idGVtcC50eHQiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJkaXJlY3Rvcnk9JHtkaXJlY3Rvcnkuc2VydmVyLnVybC5zc2x9IiBmaWxlPSJ0ZW1wLnR4dCIvPgorICAgIDxyZXBsYWNlIGZpbGU9InRlbXAudHh0IiB0b2tlbj0iOiIgdmFsdWU9IlxcOiIvPgorICAgIDxsb2FkcHJvcGVydGllcyBzcmNGaWxlPSJ0ZW1wLnR4dCIvPgorICAgIDxkZWxldGUgZmlsZT0idGVtcC50eHQiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJiYXNlLWRuPSR7ZGlyZWN0b3J5LnNlcnZlci5iYXNlZG59IiBmaWxlPSJ0ZW1wLnR4dCIvPgorICAgIDxyZXBsYWNlIGZpbGU9InRlbXAudHh0IiB0b2tlbj0iZGM9IiB2YWx1ZT0iZGNcXD0iLz4KKyAgICA8bG9hZHByb3BlcnRpZXMgc3JjRmlsZT0idGVtcC50eHQiLz4KKyAgICA8ZGVsZXRlIGZpbGU9InRlbXAudHh0Ii8+CiAgICAgPGVjaG8gbWVzc2FnZT0idXJsPSR7ZGlyZWN0b3J5fSIvPgogICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2UtZG49JHtiYXNlLWRufSIvPgotCQotCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWF1dGgtcmVhbG0iPgotCSAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iJHtsZGFwLnJlYWxtLm5hbWV9Ii8+IAotCQk8cGFyYW0gbmFtZT0icmVhbG1jbGFzcyIgdmFsdWU9IiR7bGRhcC5yZWFsbS5jbGFzc30iLz4KLQkJPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9Ii0tcHJvcGVydHkgZGlyZWN0b3J5PSR7ZGlyZWN0b3J5fTpiYXNlLWRuPWRjXD0ke3VuaXF1ZS1sZGFwLXN1Yi1jb250ZXh0LWlkfSwke2Jhc2UtZG59OmphYXMtY29udGV4dD1sZGFwUmVhbG06Y29tLnN1bi5qbmRpLmxkYXAuY29ubmVjdC5wb29sPXRydWU6Y29tLnN1bi5qbmRpLmxkYXAuY29ubmVjdC5wb29sLm1heHNpemU9MiIvPgorCisgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtYXV0aC1yZWFsbSI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbW5hbWUiIHZhbHVlPSIke2xkYXAucmVhbG0ubmFtZX0iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSIke2xkYXAucmVhbG0uY2xhc3N9Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbXByb3BlcnRpZXMiIHZhbHVlPSItLXByb3BlcnR5IGRpcmVjdG9yeT0ke2RpcmVjdG9yeX06YmFzZS1kbj1kY1w9JHt1bmlxdWUtbGRhcC1zdWItY29udGV4dC1pZH0sJHtiYXNlLWRufTpqYWFzLWNvbnRleHQ9bGRhcFJlYWxtOmNvbS5zdW4uam5kaS5sZGFwLmNvbm5lY3QucG9vbD10cnVlOmNvbS5zdW4uam5kaS5sZGFwLmNvbm5lY3QucG9vbC5tYXhzaXplPTIiLz4KICAgICAgIDwvYW50Y2FsbD4KIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwL3NpbXBsZXdlYi9jbGllbnQvSHR0cEJhc2ljQXV0aFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXAvc2ltcGxld2ViL2NsaWVudC9IdHRwQmFzaWNBdXRoVGVzdC5qYXZhCmluZGV4IDlkNTlkYmIuLjkxOTM2OWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXAvc2ltcGxld2ViL2NsaWVudC9IdHRwQmFzaWNBdXRoVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXAvc2ltcGxld2ViL2NsaWVudC9IdHRwQmFzaWNBdXRoVGVzdC5qYXZhCkBAIC01OSw3ICs1OSw3IEBACiAKICAgICAgICAgVGhyZWFkIHRhcnJheVtdID0gbmV3IFRocmVhZFt0aHJlYWRDb3VudF07CiAKLSAgICAgICAgZm9yKGludCBpPTA7IGk8dGhyZWFkQ291bnQ7IGkrKykgCisgICAgICAgIGZvcihpbnQgaT0wOyBpPHRocmVhZENvdW50OyBpKyspCiAgICAgICAgICAgICB0YXJyYXlbaV0gPSBuZXcgVGhyZWFkKHRoaXMsICJIdHRwLXJlcXVlc3QtdGhyZWFkLSIgKyBpKTsKIAogICAgICAgICBmb3IoaW50IGk9MDsgaTx0aHJlYWRDb3VudDsgaSsrKQpAQCAtODMsMTEgKzgzLDExIEBACiAKICAgICAgICAgc3RkRGV2ID0gTWF0aC5wb3coc3RkRGV2LCAwLjUpOwogCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVG90YWwgcmVxdWVzdHM6ICIgKyAoc3V4ZXNDb3VudCtmYWlsdXJlQ291bnQpICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBzdWNjZXNzIGNvdW50OiAiICsgc3V4ZXNDb3VudCArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIHJlcXVlc3RzOiAiICsgKHN1eGVzQ291bnQrZmFpbHVyZUNvdW50KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBzdWNjZXNzIGNvdW50OiAiICsgc3V4ZXNDb3VudCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBmYWlsdXJlIGNvdW50OiAiICsgZmFpbHVyZUNvdW50KTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNaW4vTWF4L0F2Zy9TdGREZXY6IChtaWxsaXNlY29uZHMpICIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pblRpbWUgKyAiLyIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNaW4vTWF4L0F2Zy9TdGREZXY6IChtaWxsaXNlY29uZHMpICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluVGltZSArICIvIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhUaW1lICsgIi8iICsgYXZnVGltZSArICIvIiArIHN0ZERldik7CiAKICAgICAgICAgU3RyaW5nIHRlc3RJZCA9ICJTZWM6OkxEQVAgQmFzaWNBdXRoIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXAvc2ltcGxld2ViL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXAvc2ltcGxld2ViL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA2N2NhODQ5Li4wMTI1MDM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwL3NpbXBsZXdlYi9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcC9zaW1wbGV3ZWIvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMSwxMiArMjEsMTIgQEAKIAogCiA8d2ViLWFwcD4KLSAgCisKICAgPHNlcnZsZXQ+CiAgICAgPHNlcnZsZXQtbmFtZT5UZXN0SlNQPC9zZXJ2bGV0LW5hbWU+CiAgICAgPGpzcC1maWxlPi9UZXN0SlNQLmpzcDwvanNwLWZpbGU+CiAgIDwvc2VydmxldD4KLSAKKwogICA8c2VydmxldD4KICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgPHNlcnZsZXQtY2xhc3M+Y29tLnN1bi5zZWN1cml0eS5kZXZ0ZXN0cy5sZGFwLnNpbXBsZS5UZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KQEAgLTQwLDcgKzQwLDcgQEAKICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgPHVybC1wYXR0ZXJuPi9UZXN0U2VydmxldDwvdXJsLXBhdHRlcm4+CiAgIDwvc2VydmxldC1tYXBwaW5nPgotICAKKwogICA8c2Vzc2lvbi1jb25maWc+CiAgICAgPHNlc3Npb24tdGltZW91dD4KICAgICAgICAgICAgIDMwCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwL3NpbXBsZXdlYi93ZWIvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXAvc2ltcGxld2ViL3dlYi9UZXN0U2VydmxldC5qYXZhCmluZGV4IGZlOTRjNjYuLmM5NGRkMTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXAvc2ltcGxld2ViL3dlYi9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXAvc2ltcGxld2ViL3dlYi9UZXN0U2VydmxldC5qYXZhCkBAIC0yNiwzNSArMjYsMzUgQEAKIGltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKIAogCi1wdWJsaWMgY2xhc3MgVGVzdFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCAKK3B1YmxpYyBjbGFzcyBUZXN0U2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0CiB7Ci0JLy8gU2VjdXJpdHkgcm9sZSByZWZlcmVuY2VzLgotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBlbXBfc2Vjcm9sZV9yZWYgICA9ICJFbXBsb3llZSI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGFkbWluX3NlY3JvbGVfcmVmID0gIkFETUlOIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgbWdyX3NlY3JvbGVfcmVmICAgPSAiTWFuYWdlciI7CisgICAgLy8gU2VjdXJpdHkgcm9sZSByZWZlcmVuY2VzLgorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBlbXBfc2Vjcm9sZV9yZWYgICA9ICJFbXBsb3llZSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGFkbWluX3NlY3JvbGVfcmVmID0gIkFETUlOIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgbWdyX3NlY3JvbGVfcmVmICAgPSAiTWFuYWdlciI7CiAKICAgICAgICAgU3RyaW5nIHVzZXI9Im11bnRhIjsKICAgICAgICAgUHJvcGVydGllcyBwcm9wcz1udWxsOwogCiAKIAotICAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gCi0JeworICAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KKyAgICB7CiAgICAgICAgICAgICBQcmludFdyaXRlciBvdXQ9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj5CYXNpYyBBdXRoZW50aWNhdGlvbiB0ZXN0cyBmcm9tIFNlcnZsZXQ6IFRlc3QxLFRlc3QyLFRlc3QzICIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj5BdXRob3JpemF0aW9uIHRlc3QgZnJvbSBTZXJ2bGV0OiBUZXN0NCxUZXN0NS0+IEh0dHBTZXJ2bGV0UmVxdWVzdC5pc1VzZXJJblJvbGUoKSBhdXRob3JpemF0aW9uIGZyb20gU2VydmxldC4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB0ZXN0MShyZXF1ZXN0LCByZXNwb25zZSwgb3V0KTsKICAgICAgICAgICAgIHRlc3QyKHJlcXVlc3QsIHJlc3BvbnNlLCBvdXQpOwogICAgICAgICAgICAgdGVzdDMocmVxdWVzdCwgcmVzcG9uc2UsIG91dCk7CiAgICAgICAgICAgICB0ZXN0NChyZXF1ZXN0LCByZXNwb25zZSwgb3V0KTsKICAgICAgICAgICAgIHRlc3Q1KHJlcXVlc3QsIHJlc3BvbnNlLCBvdXQpOwotCX0KKyAgICB9CiAKIAogICAgICAgICAvL1Rlc3RzIGJlZ2luCi0JcHVibGljIHZvaWQgdGVzdDEoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIFByaW50V3JpdGVyIG91dCkKLQl7CisgICAgcHVibGljIHZvaWQgdGVzdDEoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIFByaW50V3JpdGVyIG91dCkKKyAgICB7CiAgICAgICAgICAgICAgICAgLy9DaGVjayB0aGUgYXV0aCB0eXBlIC0gcmVxdWVzdC5nZXRBdXRoVHlwZSgpCiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj48YnI+VGVzdDEuIFBvc3RpdmUgY2hlY2sgZm9yIHRoZSBjb3JyZWN0IGF1dGhlbnRpY2F0aW9uIHR5cGUiKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgYXV0aHR5cGU9cmVxdWVzdC5nZXRBdXRoVHlwZSgpOwpAQCAtOTksNyArOTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj5IdHRwU2VydmxldFJlcXVlc3QuaXNVc2VySW5Sb2xlKCkgdGVzdCBGYWlsZWQhIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+SW5mbzpyZXF1ZXN0LmlzVXNlckluUm9sZShcIiIrZW1wX3NlY3JvbGVfcmVmKyJcIikgaXM9ICIraXNJblByb3BlclJvbGUpOwotCX0KKyAgICB9CiAKICAgICAgICAgLy9UZXN0NSAtIE5lZ2F0aXZlIHRlc3QgZm9yIGNoZWNraW5nIHRoZSB1c2VyJ3MgcHJvcGVyIHJvbGUKICAgICAgICAgcHVibGljIHZvaWQgdGVzdDUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIFByaW50V3JpdGVyIG91dCl7CkBAIC0xMTEsNiArMTExLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+SHR0cFNlcnZsZXRSZXF1ZXN0LmlzVXNlckluUm9sZSgpIHRlc3QgRmFpbGVkISIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPkluZm86cmVxdWVzdC5pc1VzZXJJblJvbGUoXCIiK21ncl9zZWNyb2xlX3JlZisiXCIpIGlzPSAiK2lzTm90SW5PdGhlclJvbGUpOwotCX0KKyAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXBSZWFsbVBlckFwcC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcFJlYWxtUGVyQXBwL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWI1YmU0NS4uNDU0YWZlMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcFJlYWxtUGVyQXBwL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcFJlYWxtUGVyQXBwL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcFJlYWxtUGVyQXBwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXBSZWFsbVBlckFwcC9idWlsZC54bWwKaW5kZXggNzJjZThkZC4uYTdjZTYwNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcFJlYWxtUGVyQXBwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwUmVhbG1QZXJBcHAvYnVpbGQueG1sCkBAIC0zMSw3ICszMSw3IEBACiAgICAmY29tbW9uQnVpbGQ7CiAgICAmY29tbW9uUnVuOwogICAgJnRlc3RQcm9wZXJ0aWVzOwotICAgIAorCiAgICA8dGFyZ2V0IG5hbWU9ImFsbCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtbGRhcC11c3JncnBzIiAvPgpAQCAtMTQzLDM3ICsxNDMsMzcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWxkYXAtdXNyZ3JwcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogCi0gIAkgIDxjb3B5IGZpbGU9IiR7Y3JlYXRlLmxkaWYuZmlsZX0iIHRvZmlsZT0idGVtcC5sZGlmIiBvdmVyd3JpdGU9InRydWUiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICAJICA8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBsZGFwIHRlc3QgdXNlcnMgYW5kIGdyb3VwcyBhdCBsZGFwOi8vJHtkaXJlY3Rvcnkuc2VydmVyLmhvc3R9OiR7ZGlyZWN0b3J5LnNlcnZlci5wb3J0fS8/JHtkaXJlY3Rvcnkuc2VydmVyLmJhc2Vkbn0iLz4KLQkgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1sZGFwLWxkaWYiPgotCQk8cGFyYW0gbmFtZT0ibGRpZi5maWxlLnBhdGgiIHZhbHVlPSJ0ZW1wLmxkaWYiLz4KLQkgIDwvYW50Y2FsbD4KLQkgIDxlY2hvIG1lc3NhZ2U9ImRlbGV0aW5nIHRlbXAgZmlsZS4uLiIvPgotCSAgPGRlbGV0ZSBmaWxlPSJ0ZW1wLmxkaWYiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtjcmVhdGUubGRpZi5maWxlfSIgdG9maWxlPSJ0ZW1wLmxkaWYiIG92ZXJ3cml0ZT0idHJ1ZSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIGxkYXAgdGVzdCB1c2VycyBhbmQgZ3JvdXBzIGF0IGxkYXA6Ly8ke2RpcmVjdG9yeS5zZXJ2ZXIuaG9zdH06JHtkaXJlY3Rvcnkuc2VydmVyLnBvcnR9Lz8ke2RpcmVjdG9yeS5zZXJ2ZXIuYmFzZWRufSIvPgorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWxkYXAtbGRpZiI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJsZGlmLmZpbGUucGF0aCIgdmFsdWU9InRlbXAubGRpZiIvPgorICAgICAgPC9hbnRjYWxsPgorICAgICAgPGVjaG8gbWVzc2FnZT0iZGVsZXRpbmcgdGVtcCBmaWxlLi4uIi8+CisgICAgICA8ZGVsZXRlIGZpbGU9InRlbXAubGRpZiIvPgogCiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1sZGFwLXVzcmdycHMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgCSAgPGNvcHkgZmlsZT0iJHtkZWxldGUubGRpZi5maWxlfSIgdG9maWxlPSJ0ZW1wLmxkaWYiIG92ZXJ3cml0ZT0idHJ1ZSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIAkgIDxlY2hvIG1lc3NhZ2U9IkRlbGV0aW5nIGxkYXAgdGVzdCB1c2VycyBhbmQgZ3JvdXBzIGF0IGxkYXA6Ly8ke2RpcmVjdG9yeS5zZXJ2ZXIuaG9zdH06JHtkaXJlY3Rvcnkuc2VydmVyLnBvcnR9Lz8ke2RpcmVjdG9yeS5zZXJ2ZXIuYmFzZWRufSIvPgotCSAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWxkYXAtbGRpZiI+Ci0JCTxwYXJhbSBuYW1lPSJsZGlmLmZpbGUucGF0aCIgdmFsdWU9InRlbXAubGRpZiIvPgotCSAgPC9hbnRjYWxsPgotCSAgPGVjaG8gbWVzc2FnZT0iZGVsZXRpbmcgdGVtcCBmaWxlLi4uIi8+Ci0JICA8ZGVsZXRlIGZpbGU9InRlbXAubGRpZiIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2RlbGV0ZS5sZGlmLmZpbGV9IiB0b2ZpbGU9InRlbXAubGRpZiIgb3ZlcndyaXRlPSJ0cnVlIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iRGVsZXRpbmcgbGRhcCB0ZXN0IHVzZXJzIGFuZCBncm91cHMgYXQgbGRhcDovLyR7ZGlyZWN0b3J5LnNlcnZlci5ob3N0fToke2RpcmVjdG9yeS5zZXJ2ZXIucG9ydH0vPyR7ZGlyZWN0b3J5LnNlcnZlci5iYXNlZG59Ii8+CisgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtbGRhcC1sZGlmIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImxkaWYuZmlsZS5wYXRoIiB2YWx1ZT0idGVtcC5sZGlmIi8+CisgICAgICA8L2FudGNhbGw+CisgICAgICA8ZWNobyBtZXNzYWdlPSJkZWxldGluZyB0ZW1wIGZpbGUuLi4iLz4KKyAgICAgIDxkZWxldGUgZmlsZT0idGVtcC5sZGlmIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImV4ZWN1dGUtbGRhcC1sZGlmIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPGphdmEgY2xhc3NuYW1lPSJMREFQTW9kaWZ5IiBmb3JrPSJ0cnVlIiBmYWlsb25lcnJvcj0iZmFsc2UiPgotCQk8YXJnIGxpbmU9Ii1oICR7ZGlyZWN0b3J5LnNlcnZlci5ob3N0fSIvPgotCQk8YXJnIGxpbmU9Ii1wICR7ZGlyZWN0b3J5LnNlcnZlci5wb3J0fSIvPgotCQk8YXJnIGxpbmU9Ii1EICZxdW90OyR7ZGlyZWN0b3J5Lm1hbmFnZXIuZG59JnF1b3Q7Ii8+Ci0JCTxhcmcgbGluZT0iLXcgJHtkaXJlY3RvcnkubWFuYWdlci5wYXNzd2R9Ii8+Ci0JCTxhcmcgbGluZT0iLWYgJHtsZGlmLmZpbGUucGF0aH0iLz4KLQkJPGNsYXNzcGF0aD4KLQkJCTxwYXRoZWxlbWVudCBwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL2xkYXBqZGsuamFyIi8+Ci0JCTwvY2xhc3NwYXRoPgotCTwvamF2YT4KKyAgICA8amF2YSBjbGFzc25hbWU9IkxEQVBNb2RpZnkiIGZvcms9InRydWUiIGZhaWxvbmVycm9yPSJmYWxzZSI+CisgICAgICAgIDxhcmcgbGluZT0iLWggJHtkaXJlY3Rvcnkuc2VydmVyLmhvc3R9Ii8+CisgICAgICAgIDxhcmcgbGluZT0iLXAgJHtkaXJlY3Rvcnkuc2VydmVyLnBvcnR9Ii8+CisgICAgICAgIDxhcmcgbGluZT0iLUQgJnF1b3Q7JHtkaXJlY3RvcnkubWFuYWdlci5kbn0mcXVvdDsiLz4KKyAgICAgICAgPGFyZyBsaW5lPSItdyAke2RpcmVjdG9yeS5tYW5hZ2VyLnBhc3N3ZH0iLz4KKyAgICAgICAgPGFyZyBsaW5lPSItZiAke2xkaWYuZmlsZS5wYXRofSIvPgorICAgICAgICA8Y2xhc3NwYXRoPgorICAgICAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvbGRhcGpkay5qYXIiLz4KKyAgICAgICAgPC9jbGFzc3BhdGg+CisgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwUmVhbG1QZXJBcHAvY2xpZW50L1JwYUNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcFJlYWxtUGVyQXBwL2NsaWVudC9ScGFDbGllbnQuamF2YQppbmRleCA3ZTYwMDJlLi43MjZkY2QyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwUmVhbG1QZXJBcHAvY2xpZW50L1JwYUNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXBSZWFsbVBlckFwcC9jbGllbnQvUnBhQ2xpZW50LmphdmEKQEAgLTMxLDMxICszMSwzMSBAQAogICAgICAgICBScGFDbGllbnQgY2xpZW50ID0gbmV3IFJwYUNsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBScGFDbGllbnQoU3RyaW5nW10gYXJncykgewogICAgICAgICAvL3N1cGVyKGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KCkgewotICAgICAgICAKLQlScGFSZW1vdGUgaHI9bnVsbDsKKworICAgIFJwYVJlbW90ZSBocj1udWxsOwogICAgICAgICBTdHJpbmcgcmVzPW51bGw7CiAgICAgICAgIENvbnRleHQgaWMgPSBudWxsOwogICAgICAgICBMb2dpbkNvbnRleHQgbGM9bnVsbDsKICAgICAgICAgUnBhSG9tZSBob21lPW51bGw7CiAgICAgICAgIFN0cmluZyB0ZXN0SWQgPSAiU2VjOjogTERBUCByZWFsbSI7Ci0gICAgCXRyeXsKKyAgICAgICAgdHJ5ewogICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiU2VjdXJpdHk6OiBMREFQIHJlYWxtIik7Ci0JICAgIGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCisgICAgICAgIGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKICAgICAgICAgICAgIGphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJycGFMb2dpbkJlYW4iKTsKLQkJCi0JICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotCQkKLQkgICAgaG9tZSA9IChScGFIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdygKLQkJCQkJICAgb2JqcmVmLCBScGFIb21lLmNsYXNzKTsKLQkgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKLQkJCQkKKworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKKworICAgICAgICBob21lID0gKFJwYUhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KAorICAgICAgICAgICAgICAgICAgICAgICBvYmpyZWYsIFJwYUhvbWUuY2xhc3MpOworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOworCiAgICAgICAgICAgICBociA9IGhvbWUuY3JlYXRlKCJMaXpIdXJsZXkiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwogCkBAIC04MSwxMSArODEsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTERBUCBSZWFsbTpScGFMb2dpbkJlYW4gVGVzdCBGYWlsZWQiKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKLQl9IGZpbmFsbHkgeworICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXM7Ci0gICAgICAgIAorCiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwUmVhbG1QZXJBcHAvc2hvcHBpbmcvUnBhQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcFJlYWxtUGVyQXBwL3Nob3BwaW5nL1JwYUJlYW4uamF2YQppbmRleCBkNjQ2MmRlLi40ZjFlYzkwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwUmVhbG1QZXJBcHAvc2hvcHBpbmcvUnBhQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXBSZWFsbVBlckFwcC9zaG9wcGluZy9ScGFCZWFuLmphdmEKQEAgLTM1LDI2ICszNSwyNiBAQAogICovCiAKIHB1YmxpYyBjbGFzcyBScGFCZWFuIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgc2hvcHBlciA9ICJhbm9ueW1vdXMiOwogICAgIHByaXZhdGUgU3RyaW5nIHByaW5jaXBhbCA9ICJqMmVlL3NoaW5nd2FpIjsKICAgICBwcml2YXRlIGludCB0b3RhbFByaWNlID0gMDsKLSAgICAKKwogICAgIHByaXZhdGUgaW50IHRvdGFsSXRlbXMgPSAwOwotICAgIAorCiAgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gaXRlbXM7Ci0gICAgCisKICAgICBwcml2YXRlIExpc3Q8SW50ZWdlcj4gaXRlbVByaWNlOwotICAgIAorCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYyA9IG51bGw7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBTaG9wcGluZ0VKQiAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZShTdHJpbmcgc2hvcHBlck5hbWUpIHsKICAgICAgICAgc2hvcHBlciA9IHNob3BwZXJOYW1lOwogICAgICAgICBpdGVtcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwogICAgICAgICBpdGVtUHJpY2UgPSBuZXcgQXJyYXlMaXN0PEludGVnZXI+KCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWRkSXRlbShTdHJpbmcgaXRlbSwgaW50IHByaWNlKSB0aHJvd3MgRUpCRXhjZXB0aW9uLAogICAgICAgICBSZW1vdGVFeGNlcHRpb257CiAgICAgICAgIGNoZWNrQ2FsbGVyUHJpbmNpcGFsKCk7CkBAIC02Niw0NyArNjYsNDcgQEAKICAgICAgICAgICAgICsgaXRlbSArIiBmb3IgcHJpY2UgPSIrIHByaWNlICsiIC5Ub3RhbCBJdGVtcyA9ICIrdG90YWxJdGVtcyArCiAgICAgICAgICAgICAiIC5Ub3RhbFByaWNlID0gIiArIHRvdGFsUHJpY2UpOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBkZWxldGVJdGVtKFN0cmluZyBpdGVtKSB0aHJvd3MgRUpCRXhjZXB0aW9uLCAKKworICAgIHB1YmxpYyB2b2lkIGRlbGV0ZUl0ZW0oU3RyaW5nIGl0ZW0pIHRocm93cyBFSkJFeGNlcHRpb24sCiAgICAgICAgIFJlbW90ZUV4Y2VwdGlvbnsKICAgICAgICAgY2hlY2tDYWxsZXJQcmluY2lwYWwoKTsKICAgICAgICAgaW50IGluZGV4ID0gaXRlbXMuaW5kZXhPZihpdGVtKTsKICAgICAgICAgaXRlbXMucmVtb3ZlKGl0ZW0pOwogICAgICAgICBJbnRlZ2VyIHByaWNlID0gaXRlbVByaWNlLmdldChpbmRleCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2hvcHBpbmcgQ2FydDogUmVtb3ZpbmcgaXRlbSAiKyBpdGVtICsiIEBwcmljZSAiKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTaG9wcGluZyBDYXJ0OiBSZW1vdmluZyBpdGVtICIrIGl0ZW0gKyIgQHByaWNlICIrCiAgICAgICAgICAgICBwcmljZS5pbnRWYWx1ZSgpKTsKICAgICAgICAgdG90YWxQcmljZSAtPSBwcmljZS5zaG9ydFZhbHVlKCk7Ci0gICAgICAgIGl0ZW1QcmljZS5yZW1vdmUoaW5kZXgpOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGl0ZW1QcmljZS5yZW1vdmUoaW5kZXgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBTaG9wcGluZyBDYXJ0OiBTaG9wcGVyICIrIHNob3BwZXIgKyIgIC5Ub3RhbCBJdGVtcyA9ICIrdG90YWxJdGVtcyArCiAgICAgICAgICAgICAiIC5Ub3RhbFByaWNlID0gIiArIHRvdGFsUHJpY2UpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBkb3VibGUgZ2V0VG90YWxDb3N0KCkgdGhyb3dzIEVKQkV4Y2VwdGlvbnsKICAgICAgICAgY2hlY2tDYWxsZXJQcmluY2lwYWwoKTsKICAgICAgICAgcmV0dXJuIHRvdGFsUHJpY2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZ1tdIGdldEl0ZW1zKCkgdGhyb3dzIEVKQkV4Y2VwdGlvbnsKICAgICAgICAgY2hlY2tDYWxsZXJQcmluY2lwYWwoKTsKICAgICAgICAgU3RyaW5nW10gaXRlbU5hbWVzID0gaXRlbXMudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKICAgICAgICAgcmV0dXJuIGl0ZW1OYW1lczsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBScGEgZWpiQWN0aXZhdGUiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBScGEgZWpiUGFzc2l2YXRlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSAgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFJwYSBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0IHNlc3Npb25Db250ZXh0KSB7CiAgICAgICAgIHNjID0gc2Vzc2lvbkNvbnRleHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcFJlYWxtUGVyQXBwL3Nob3BwaW5nL1JwYUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXBSZWFsbVBlckFwcC9zaG9wcGluZy9ScGFIb21lLmphdmEKaW5kZXggM2RhNWQ2Ny4uYTY2MDY1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcFJlYWxtUGVyQXBwL3Nob3BwaW5nL1JwYUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwUmVhbG1QZXJBcHAvc2hvcHBpbmcvUnBhSG9tZS5qYXZhCkBAIC0yNyw4ICsyNyw4IEBACiAgKiBAYXV0aG9yICBIYXJwcmVldCBTaW5naAogICovCiBwdWJsaWMgaW50ZXJmYWNlIFJwYUhvbWUgZXh0ZW5kcyBFSkJIb21lewotICAgIAotICAgIHB1YmxpYyBScGFSZW1vdGUgY3JlYXRlKGphdmEubGFuZy5TdHJpbmcgc2hvcHBlck5hbWUpIAorCisgICAgcHVibGljIFJwYVJlbW90ZSBjcmVhdGUoamF2YS5sYW5nLlN0cmluZyBzaG9wcGVyTmFtZSkKICAgICAgICAgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwUmVhbG1QZXJBcHAvc2hvcHBpbmcvUnBhUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwUmVhbG1QZXJBcHAvc2hvcHBpbmcvUnBhUmVtb3RlLmphdmEKaW5kZXggZmI4YTc3My4uNDNhMzk5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcFJlYWxtUGVyQXBwL3Nob3BwaW5nL1JwYVJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXBSZWFsbVBlckFwcC9zaG9wcGluZy9ScGFSZW1vdGUuamF2YQpAQCAtMjMsMTcgKzIzLDE3IEBACiBwYWNrYWdlIHNob3BwaW5nOwogaW1wb3J0IGpha2FydGEuZWpiLkVKQk9iamVjdDsKIC8qKgotICogU2hvcHBpbmcgQ2FydCBTdGF0ZWZ1bCBTZXNzaW9uIEJlYW4uIEp1c3QgdGVzdHMgLURqMmVlbG9naW4ubmFtZSAKKyAqIFNob3BwaW5nIENhcnQgU3RhdGVmdWwgU2Vzc2lvbiBCZWFuLiBKdXN0IHRlc3RzIC1EajJlZWxvZ2luLm5hbWUKICAqICAtRGoyZWVsb2dpbi5wYXNzd29yZCBzeXN0ZW0gcHJvcGVydGllcy4KICAqIEBhdXRob3IgIGhzaW5naAogICovCiBwdWJsaWMgaW50ZXJmYWNlIFJwYVJlbW90ZSBleHRlbmRzIEVKQk9iamVjdCB7Ci0gICAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFkZEl0ZW0oamF2YS5sYW5nLlN0cmluZyBpdGVtLCBpbnQgcHJpY2UpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkZWxldGVJdGVtKGphdmEubGFuZy5TdHJpbmcgaXRlbSkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAgICAKKwogICAgIHB1YmxpYyBkb3VibGUgZ2V0VG90YWxDb3N0KCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gZ2V0SXRlbXMoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbWRiL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tZGIvYnVpbGQucHJvcGVydGllcwppbmRleCBmMjI2NDJmLi5mOTYxMTI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tZGIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tZGIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eS1tZGIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L21kYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tZGIvYnVpbGQueG1sCmluZGV4IDk3YmVlNzEuLjY5OWU0N2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L21kYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbWRiL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQmVhbiouY2xhc3MsKiovKkhlbGxvKiIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzUsMTQgKzc1LDE0IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tZGIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbWRiL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBiZDkwYzMzLi5kZWFmOWU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tZGIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L21kYi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICB9CiAKIAotICAgIEBSZXNvdXJjZShuYW1lPSJGb29DRiIsIG1hcHBlZE5hbWU9Imptcy9zZWN1cml0eV9tZGJfUUNGIikgCisgICAgQFJlc291cmNlKG5hbWU9IkZvb0NGIiwgbWFwcGVkTmFtZT0iam1zL3NlY3VyaXR5X21kYl9RQ0YiKQogICAgIHByaXZhdGUgc3RhdGljIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcXVldWVDb25GYWN0b3J5OwogCiAgICAgQFJlc291cmNlKG5hbWU9Ik1zZ0JlYW5RdWV1ZSIsIG1hcHBlZE5hbWU9Imptcy9zZWN1cml0eV9tZGJfSW5RdWV1ZSIpCkBAIC01MCw3ICs1MCw3IEBACiAKIC8vICAgIEBSZXNvdXJjZShuYW1lPSJDbGllbnRRdWV1ZSIsIG1hcHBlZE5hbWU9ImZvbyIpCiAvLyAgICBwcml2YXRlIHN0YXRpYyBqYWthcnRhLmptcy5RdWV1ZSBjbGllbnRRdWV1ZTsKLUBSZXNvdXJjZShuYW1lPSJDbGllbnRRdWV1ZSIsIG1hcHBlZE5hbWU9Imptcy9zZWN1cml0eV9tZGJfT3V0UXVldWUiKSAKK0BSZXNvdXJjZShuYW1lPSJDbGllbnRRdWV1ZSIsIG1hcHBlZE5hbWU9Imptcy9zZWN1cml0eV9tZGJfT3V0UXVldWUiKQogcHJpdmF0ZSBzdGF0aWMgamFrYXJ0YS5qbXMuUXVldWUgY2xpZW50UXVldWU7CiAKIApAQCAtNjIsNyArNjIsNyBAQAogCiAgICAgcHJpdmF0ZSBpbnQgbnVtTWVzc2FnZXMgPSAyOwogICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewotICAgICAgICAKKwogICAgICAgICBpZiggYXJncy5sZW5ndGggPT0gMSApIHsKICAgICAgICAgICAgIG51bU1lc3NhZ2VzID0gbmV3IEludGVnZXIoYXJnc1swXSkuaW50VmFsdWUoKTsKICAgICAgICAgfQpAQCAtODIsMTQgKzgyLDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgcXVldWVDb24gPSBxdWV1ZUNvbkZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7CiAKICAgICAgICAgcXVldWVTZXNzaW9uID0gcXVldWVDb24uY3JlYXRlUXVldWVTZXNzaW9uCi0gICAgICAgICAgICAoZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7IAorICAgICAgICAgICAgKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwogCiAgICAgICAgIC8vIFByb2R1Y2VyIHdpbGwgYmUgc3BlY2lmaWVkIHdoZW4gYWN0dWFsIG1zZyBpcyBzZW50LgotICAgICAgICBxdWV1ZVNlbmRlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVTZW5kZXIobnVsbCk7ICAgICAgICAKKyAgICAgICAgcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKG51bGwpOwogCiAgICAgICAgIHF1ZXVlUmVjZWl2ZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlUmVjZWl2ZXIoY2xpZW50UXVldWUpOwogCkBAIC0xMDcsMTggKzEwNywxOCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgc2VuZE1zZ3MoamFrYXJ0YS5qbXMuUXVldWUgcXVldWUsIE1lc3NhZ2UgbXNnLCBpbnQgbnVtKSAKKyAgICBwdWJsaWMgdm9pZCBzZW5kTXNncyhqYWthcnRhLmptcy5RdWV1ZSBxdWV1ZSwgTWVzc2FnZSBtc2csIGludCBudW0pCiAgICAgICAgIHRocm93cyBKTVNFeGNlcHRpb24gewogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYXQgdGltZSAiICsgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwogICAgICAgICAgICAgcXVldWVTZW5kZXIuc2VuZChxdWV1ZSwgbXNnKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYXQgdGltZSAiICsgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KGludCBudW0pIAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdChpbnQgbnVtKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBEZXN0aW5hdGlvbiBkZXN0ID0gbXNnQmVhblF1ZXVlOwpAQCAtMTMyLDcgKzEzMiw3IEBACiAvKiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciBxdWV1ZSBtZXNzYWdlIik7CiAgICAgICAgIE1lc3NhZ2UgcmVjdmRtZXNzYWdlID0gcXVldWVSZWNlaXZlci5yZWNlaXZlKFRJTUVPVVQpOwogICAgICAgICBpZiggcmVjdmRtZXNzYWdlICE9IG51bGwgKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VpdmVkIG1lc3NhZ2UgOiAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VpdmVkIG1lc3NhZ2UgOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUZXh0TWVzc2FnZSlyZWN2ZG1lc3NhZ2UpLmdldFRleHQoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRpbWVvdXQgYWZ0ZXIgIiArIFRJTUVPVVQgKyAiIHNlY29uZHMiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L21kYi9lamIvSGVsbG8xLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tZGIvZWpiL0hlbGxvMS5qYXZhCmluZGV4IDg3NmYwYWIuLmMwNGQ2YmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L21kYi9lamIvSGVsbG8xLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbWRiL2VqYi9IZWxsbzEuamF2YQpAQCAtMTksNSArMTksNSBAQAogcHVibGljIGludGVyZmFjZSBIZWxsbzEgewogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oU3RyaW5nIHMpOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tZGIvZWpiL0hlbGxvU3RhdGVmdWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L21kYi9lamIvSGVsbG9TdGF0ZWZ1bC5qYXZhCmluZGV4IDU4YWUzOTguLmVkYzIzYzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L21kYi9lamIvSGVsbG9TdGF0ZWZ1bC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L21kYi9lamIvSGVsbG9TdGF0ZWZ1bC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cpOwogICAgIH0KICAgICBAUHJlRGVzdHJveSBwdWJsaWMgdm9pZCBteVByZURlc3Ryb3lNZXRob2QoKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUFJFLURFU1RST1kgY2FsbGJhY2sgcmVjZWl2ZWQgaW4gIiArIG1zZyk7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQUkUtREVTVFJPWSBjYWxsYmFjayByZWNlaXZlZCBpbiAiICsgbXNnKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L21kYi9lamIvSGVsbG9TdGF0ZWxlc3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L21kYi9lamIvSGVsbG9TdGF0ZWxlc3MuamF2YQppbmRleCA3NzQwZTM3Li42YzAyNzcyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tZGIvZWpiL0hlbGxvU3RhdGVsZXNzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbWRiL2VqYi9IZWxsb1N0YXRlbGVzcy5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiAvLyBIZWxsbzEgaW50ZXJmYWNlIGlzIG5vdCBhbm5vdGF0ZWQgd2l0aCBATG9jYWwuIElmIHRoZQogLy8gYmVhbiBvbmx5IGltcGxlbWVudHMgb25lIGludGVyZmFjZSBpdCBpcyBhc3N1bWVkIHRvIGJlCiAvLyBhIGxvY2FsIGJ1c2luZXNzIGludGVyZmFjZS4KLUBTdGF0ZWxlc3MoZGVzY3JpcHRpb249Im15IHN0YXRlbGVzcyBiZWFuIGRlc2NyaXB0aW9uIikgCitAU3RhdGVsZXNzKGRlc2NyaXB0aW9uPSJteSBzdGF0ZWxlc3MgYmVhbiBkZXNjcmlwdGlvbiIpCiBwdWJsaWMgY2xhc3MgSGVsbG9TdGF0ZWxlc3MgaW1wbGVtZW50cyBIZWxsbzEgewogCiAgICAgQFJvbGVzQWxsb3dlZCgiamF2YWVlIikKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L21kYi9lamIvTWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L21kYi9lamIvTWVzc2FnZUJlYW4uamF2YQppbmRleCA2N2ViOTE5Li41YjgyNTAxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tZGIvZWpiL01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbWRiL2VqYi9NZXNzYWdlQmVhbi5qYXZhCkBAIC00Nyw4ICs0Nyw4IEBACiAgICAgQEVKQiBwcml2YXRlIEhlbGxvMSBoZWxsbzE7CiAgICAgQEVKQiBwcml2YXRlIEhlbGxvMiBoZWxsbzI7CiAKLSAgICBAUmVzb3VyY2UobmFtZT0iam1zL015UXVldWVDb25uZWN0aW9uRmFjdG9yeSIsIAotICAgICAgICAgICAgICBtYXBwZWROYW1lPSJqbXMvc2VjdXJpdHlfbWRiX1FDRiIpIAorICAgIEBSZXNvdXJjZShuYW1lPSJqbXMvTXlRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IiwKKyAgICAgICAgICAgICAgbWFwcGVkTmFtZT0iam1zL3NlY3VyaXR5X21kYl9RQ0YiKQogICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNGYWN0b3J5OwogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWU9Imptcy9zZWN1cml0eV9tZGJfT3V0UXVldWUiKSBRdWV1ZSBjbGllbnRRdWV1ZTsKQEAgLTU4LDcgKzU4LDcgQEAKIAogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIGhlbGxvMSBzdGF0ZWxlc3MgYmVhbiIpOwogICAgICAgICAgICAgaGVsbG8xLmhlbGxvKCJsb2NhbCBlamIzLjAgc3RhdGVsZXNzIik7CiAKQEAgLTc2LDE0ICs3NiwxNCBAQAogICAgICAgICAgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLmNyZWF0ZVF1ZXVlU2Vzc2lvbihmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKICAgICAgICAgICAgIFF1ZXVlU2VuZGVyIHNlbmRlciA9IHNlc3Npb24uY3JlYXRlU2VuZGVyKGNsaWVudFF1ZXVlKTsKLQkJY29ubmVjdGlvbi5zdGFydCgpOwotIAorICAgICAgICBjb25uZWN0aW9uLnN0YXJ0KCk7CisKICAgICAgICAgICAgIFRleHRNZXNzYWdlIHRtZXNzYWdlID0gc2Vzc2lvbi5jcmVhdGVUZXh0TWVzc2FnZSgpOwogICAgICAgICAgICAgdG1lc3NhZ2Uuc2V0VGV4dCgibWRiKCkgaW52b2tlZCIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIG1lc3NhZ2UiKTsKICAgICAgICAgICAgIHNlbmRlci5zZW5kKHRtZXNzYWdlKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWVzc2FnZSBzZW50Iik7Ci0JCWNvbm5lY3Rpb24uY2xvc2UoKTsKKyAgICAgICAgY29ubmVjdGlvbi5jbG9zZSgpOwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzVmNDZhNC4uMmM2MmY2ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHktbXVsdGlyb2xlbWFwcGluZyIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9idWlsZC54bWwKaW5kZXggZGViZjZjZi4uNWU2NGQ5ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9idWlsZC54bWwKQEAgLTI1LDE4ICsyNSwxOCBAQAogXT4KIAogPHByb2plY3QgbmFtZT0ic2VjdXJpdHktbXVsdGlyb2xlbWFwcGluZyIgZGVmYXVsdD0idXNhZ2UiIGJhc2VkaXI9Ii4iPgotICAKKwogICAmY29tbW9uU2V0dXA7CiAgICZjb21tb25CdWlsZDsKICAgJnRlc3Rwcm9wZXJ0aWVzOwogICAmY29tbW9uU2VjdXJpdHk7Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbiwgc2V0dXAsIGJ1aWxkLCBkZXBsb3ksIHJ1biwgdW5kZXBsb3ksIHVuc2V0dXAiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPCEtLSBzZWUgcmVhZG1lIGZvciBsaXN0IG9mIGhvdyBhbGwgdGhlIHVzZXJzIGFyZSB1c2VkIC0tPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXVzZXItY29tbW9uIj4KQEAgLTE0OSwxMCArMTQ5LDEwIEBACiAgICAgICA8cGFyYW0gbmFtZT0icGFzc3dvcmQiIHZhbHVlPSJqYXZhZWUiLz4KICAgICAgIDxwYXJhbSBuYW1lPSJncm91cHMiIHZhbHVlPSJhYmMiLz4KICAgICA8L2FudGNhbGw+Ci0gICAgCisKICAgPCEtLSAgPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4tLT4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXVzZXItY29tbW9uIj4KICAgICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0icjFwMSIvPgpAQCAtMjIxLDcgKzIyMSw3IEBACiAgICAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9InI3cDIiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIxIi8+CkBAIC0yNDcsMTEgKzI0NywxMSBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIC0tPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gCi0gICAgCisgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKwogICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4KICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9ub253ZWIxIi8+CiAgICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9MS1lamIuamFyIi8+CkBAIC0yNjksMjAgKzI2OSwyMCBAQAogICAgICAgPHBhcmFtIG5hbWU9Indhci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICAgICAgPHBhcmFtIG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogICAgIDwvYW50Y2FsbD4KLSAgICAKKwogICAgIDwhLS0KICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vbm9ud2ViIi8+Ci0gICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIgCisgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIKICAgICAgICAgICAgICB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgotICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICB2YWx1ZT0iY29tL3N1bi8qKi9jbGllbnQvKi5jbGFzcyxjb20vc3VuLyoqL2VqYi9IZWxsby5jbGFzcyIvPgogICAgIDwvYW50Y2FsbD4KICAgICAtLT4KLSAgICAKLSAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPiAKKworICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgogICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgpAQCAtMjkyLDkgKzI5Miw5IEBACiAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgIDwvZmlsZXNldD4KICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9L2xpYiIgaW5jbHVkZXM9InJlcG9ydGVyLmphciIvPgotICAgIDwvamFyPiAgIAotICAgIAotICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAorICAgIDwvamFyPgorCisgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+CiAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CkBAIC0zMDMsOSArMzAzLDkgQEAKICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgogICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgPC9qYXI+ICAgCisgICAgPC9qYXI+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICA8L3RhcmdldD4KQEAgLTMyNCw3ICszMjQsNyBAQAogICAgICAgPGFyZyBsaW5lPSIke2h0dHAuaG9zdH0gJHtodHRwLnBvcnR9Ii8+CiAgICAgPC9leGVjPgogICAgIC0tPgotICAgIAorCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWIiPgogICAgICAgPHBhcmFtIG5hbWU9InNlcnZsZXQiIHZhbHVlPSJyb2xlMSIvPgogICAgICAgPHBhcmFtIG5hbWU9IndlYnVzZXIiIHZhbHVlPSJyMXAxIi8+CkBAIC01MDUsNyArNTA1LDcgQEAKICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0Y2FzZWlkIiB2YWx1ZT0idXNlci1hdXRoLXI3cDIiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InJ1bndlYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDx0YXNrZGVmIG5hbWU9IndlYnRlc3QiIGNsYXNzbmFtZT0iJHt3ZWJ0ZXN0LmNsYXNzbmFtZX0iCiAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke3dlYnRlc3QuY2xhc3NwYXRofSIgLz4KQEAgLTUzNSw3ICs1MzUsNyBAQAogICAgICAgICAgICAgIHRlc3RDYXNlRGVzY3JpcHRpb249IlRlc3Rpbmcgcm9sZSBtYXBwaW5nIgogICAgICAgICAgICAgIHRlc3RTdHJhdGVneT0iVGVzdGluZyByb2xlIG1hcHBpbmciLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0icnVud2ViLTQwMyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDx0YXNrZGVmIG5hbWU9IndlYnRlc3QiIGNsYXNzbmFtZT0iJHt3ZWJ0ZXN0LmNsYXNzbmFtZX0iCiAgICAgICAgIGNsYXNzcGF0aD0iJHt3ZWJ0ZXN0LmNsYXNzcGF0aH0iIC8+CkBAIC01NjksNyArNTY5LDcgQEAKICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9kZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwKaW5kZXggZDYzYmI5My4uNzMxMjFhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9kZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9kZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIC0tPgogCiA8c3VuLWFwcGxpY2F0aW9uPgotICAKKwogICA8IS0tIFNlZSByZWFkbWUgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIGFsbCB0aGUKICAgICAgIHNlY3VyaXR5IHJvbGUgbWFwcGluZ3MgaW4gdGhpcyBmaWxlIGFuZAogICAgICAgdGhlIGVqYiBhbmQgd2ViIG1vZHVsZSBmaWxlcy4gLS0+CkBAIC0zMSw3ICszMSw3IEBACiAgICAgPHJvbGUtbmFtZT5yb2xlMTwvcm9sZS1uYW1lPgogICAgIDxwcmluY2lwYWwtbmFtZT5yMXAyPC9wcmluY2lwYWwtbmFtZT4KICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gIAorCiAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgPHJvbGUtbmFtZT5yb2xlMjwvcm9sZS1uYW1lPgogICAgIDxwcmluY2lwYWwtbmFtZT5yMnAxPC9wcmluY2lwYWwtbmFtZT4KQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICA8cm9sZS1uYW1lPnJvbGUyPC9yb2xlLW5hbWU+CiAgICAgPGdyb3VwLW5hbWU+cjJnMjwvZ3JvdXAtbmFtZT4KICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gIAorCiAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgPHJvbGUtbmFtZT5yb2xlMzwvcm9sZS1uYW1lPgogICAgIDxwcmluY2lwYWwtbmFtZT5yM3AxPC9wcmluY2lwYWwtbmFtZT4KQEAgLTUzLDUgKzUzLDUgQEAKICAgICA8cm9sZS1uYW1lPnJvbGUzPC9yb2xlLW5hbWU+CiAgICAgPGdyb3VwLW5hbWU+cjNnMTwvZ3JvdXAtbmFtZT4KICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gIAorCiA8L3N1bi1hcHBsaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZGVzY3JpcHRvci9zdW4tZWpiLWphcjEueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9kZXNjcmlwdG9yL3N1bi1lamItamFyMS54bWwKaW5kZXggODRkYmVlOC4uYzg2YmUzYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9kZXNjcmlwdG9yL3N1bi1lamItamFyMS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9kZXNjcmlwdG9yL3N1bi1lamItamFyMS54bWwKQEAgLTI0LDEyICsyNCwxMiBAQAogICAgICAgPGVqYi1uYW1lPk1lc3NhZ2VCZWFuMTwvZWpiLW5hbWU+CiAgICAgPC9lamI+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KLSAgCisKICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICA8cm9sZS1uYW1lPnJvbGUxPC9yb2xlLW5hbWU+CiAgICAgPHByaW5jaXBhbC1uYW1lPnIxcDE8L3ByaW5jaXBhbC1uYW1lPgogICA8L3NlY3VyaXR5LXJvbGUtbWFwcGluZz4KLSAgCisKICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICA8cm9sZS1uYW1lPnJvbGUyPC9yb2xlLW5hbWU+CiAgICAgPHByaW5jaXBhbC1uYW1lPnIycDI8L3ByaW5jaXBhbC1uYW1lPgpAQCAtMzgsOSArMzgsOSBAQAogICAgIDxyb2xlLW5hbWU+cm9sZTI8L3JvbGUtbmFtZT4KICAgICA8Z3JvdXAtbmFtZT5yMmczPC9ncm91cC1uYW1lPgogICA8L3NlY3VyaXR5LXJvbGUtbWFwcGluZz4KLSAgCisKICAgPCEtLSBubyBtYXBwaW5nIGZvciByb2xlIDMgLS0+Ci0gIAorCiAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgPHJvbGUtbmFtZT5yb2xlNDwvcm9sZS1uYW1lPgogICAgIDxwcmluY2lwYWwtbmFtZT5yNHAxPC9wcmluY2lwYWwtbmFtZT4KQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICA8cm9sZS1uYW1lPnJvbGU0PC9yb2xlLW5hbWU+CiAgICAgPGdyb3VwLW5hbWU+cjRnMTwvZ3JvdXAtbmFtZT4KICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gIAorCiAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgPHJvbGUtbmFtZT5yb2xlNTwvcm9sZS1uYW1lPgogICAgIDxwcmluY2lwYWwtbmFtZT5yNXAxPC9wcmluY2lwYWwtbmFtZT4KQEAgLTU4LDcgKzU4LDcgQEAKICAgICA8cm9sZS1uYW1lPnJvbGU1PC9yb2xlLW5hbWU+CiAgICAgPGdyb3VwLW5hbWU+cjVnMTwvZ3JvdXAtbmFtZT4KICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gIAorCiAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgPHJvbGUtbmFtZT5yb2xlNjwvcm9sZS1uYW1lPgogICAgIDxwcmluY2lwYWwtbmFtZT5yNnAxPC9wcmluY2lwYWwtbmFtZT4KQEAgLTY3LDcgKzY3LDcgQEAKICAgICA8cm9sZS1uYW1lPnJvbGU2PC9yb2xlLW5hbWU+CiAgICAgPHByaW5jaXBhbC1uYW1lPnI2cDI8L3ByaW5jaXBhbC1uYW1lPgogICA8L3NlY3VyaXR5LXJvbGUtbWFwcGluZz4KLSAgCisKICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICA8cm9sZS1uYW1lPnJvbGU3PC9yb2xlLW5hbWU+CiAgICAgPHByaW5jaXBhbC1uYW1lPnI3cDE8L3ByaW5jaXBhbC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9kZXNjcmlwdG9yL3N1bi1lamItamFyMi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIyLnhtbAppbmRleCA2OWRjMzJhLi4zNWJmODgwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIyLnhtbApAQCAtMjQsNyArMjQsNyBAQAogICAgICAgPGVqYi1uYW1lPk1lc3NhZ2VCZWFuMjwvZWpiLW5hbWU+CiAgICAgPC9lamI+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KLSAgCisKICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICA8cm9sZS1uYW1lPnJvbGUxPC9yb2xlLW5hbWU+CiAgICAgPHByaW5jaXBhbC1uYW1lPnIxcDE8L3ByaW5jaXBhbC1uYW1lPgpAQCAtMzMsNyArMzMsNyBAQAogICAgIDxyb2xlLW5hbWU+cm9sZTE8L3JvbGUtbmFtZT4KICAgICA8cHJpbmNpcGFsLW5hbWU+cjFwMjwvcHJpbmNpcGFsLW5hbWU+CiAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAKKwogICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgIDxyb2xlLW5hbWU+cm9sZTI8L3JvbGUtbmFtZT4KICAgICA8Z3JvdXAtbmFtZT5yMmcxPC9ncm91cC1uYW1lPgpAQCAtNDIsOSArNDIsOSBAQAogICAgIDxyb2xlLW5hbWU+cm9sZTI8L3JvbGUtbmFtZT4KICAgICA8Z3JvdXAtbmFtZT5yMmcyPC9ncm91cC1uYW1lPgogICA8L3NlY3VyaXR5LXJvbGUtbWFwcGluZz4KLSAgCisKICAgPCEtLSBubyBtYXBwaW5nIGZvciByb2xlIDMgLS0+Ci0gIAorCiAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgPHJvbGUtbmFtZT5yb2xlNDwvcm9sZS1uYW1lPgogICAgIDxwcmluY2lwYWwtbmFtZT5yNHAxPC9wcmluY2lwYWwtbmFtZT4KQEAgLTUzLDcgKzUzLDcgQEAKICAgICA8cm9sZS1uYW1lPnJvbGU0PC9yb2xlLW5hbWU+CiAgICAgPGdyb3VwLW5hbWU+cjRnMTwvZ3JvdXAtbmFtZT4KICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gIAorCiAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgPHJvbGUtbmFtZT5yb2xlNTwvcm9sZS1uYW1lPgogICAgIDxwcmluY2lwYWwtbmFtZT5yNXAxPC9wcmluY2lwYWwtbmFtZT4KQEAgLTY2LDcgKzY2LDcgQEAKICAgICA8cm9sZS1uYW1lPnJvbGU1PC9yb2xlLW5hbWU+CiAgICAgPGdyb3VwLW5hbWU+cjVnMTwvZ3JvdXAtbmFtZT4KICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gIAorCiAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgPHJvbGUtbmFtZT5yb2xlNjwvcm9sZS1uYW1lPgogICAgIDxwcmluY2lwYWwtbmFtZT5yNnAxPC9wcmluY2lwYWwtbmFtZT4KQEAgLTc1LDcgKzc1LDcgQEAKICAgICA8cm9sZS1uYW1lPnJvbGU2PC9yb2xlLW5hbWU+CiAgICAgPGdyb3VwLW5hbWU+cjZnMTwvZ3JvdXAtbmFtZT4KICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gIAorCiAgIDwhLS0gbm8gbWFwcGluZyBmb3Igcm9sZSA3IC0tPgogCiA8L3N1bi1lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9kZXNjcmlwdG9yL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCmluZGV4IDYyOWFjMjguLjA2ZGM1NmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZGVzY3JpcHRvci9zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgIDxkZXNjcmlwdGlvbj5NYWludGFpbiBhIG9uZS10by1vbmUgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBzdGF0aWMgY29udGVudCBhbmQgdGhlIGdlbmVyYXRlZCBzZXJ2bGV0IGNsYXNzJyBqYXZhIGNvZGU8L2Rlc2NyaXB0aW9uPgogICAgIDwvcHJvcGVydHk+CiAgIDwvanNwLWNvbmZpZz4KLSAgICAKKwogICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgIDxyb2xlLW5hbWU+cm9sZTE8L3JvbGUtbmFtZT4KICAgICA8cHJpbmNpcGFsLW5hbWU+cjFwMTwvcHJpbmNpcGFsLW5hbWU+CkBAIC00Miw3ICs0Miw3IEBACiAgICAgPHJvbGUtbmFtZT5yb2xlMTwvcm9sZS1uYW1lPgogICAgIDxwcmluY2lwYWwtbmFtZT5yMXAzPC9wcmluY2lwYWwtbmFtZT4KICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gIAorCiAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgPHJvbGUtbmFtZT5yb2xlMjwvcm9sZS1uYW1lPgogICAgIDxwcmluY2lwYWwtbmFtZT5yMnAyPC9wcmluY2lwYWwtbmFtZT4KQEAgLTUxLDkgKzUxLDkgQEAKICAgICA8cm9sZS1uYW1lPnJvbGUyPC9yb2xlLW5hbWU+CiAgICAgPGdyb3VwLW5hbWU+cjJnMTwvZ3JvdXAtbmFtZT4KICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gIAorCiAgIDwhLS0gbm8gbWFwcGluZyBmb3Igcm9sZSAzIC0tPgotICAKKwogICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgIDxyb2xlLW5hbWU+cm9sZTQ8L3JvbGUtbmFtZT4KICAgICA8cHJpbmNpcGFsLW5hbWU+cjRwMTwvcHJpbmNpcGFsLW5hbWU+CkBAIC02MiwxMiArNjIsMTIgQEAKICAgICA8cm9sZS1uYW1lPnJvbGU0PC9yb2xlLW5hbWU+CiAgICAgPGdyb3VwLW5hbWU+cjRnMTwvZ3JvdXAtbmFtZT4KICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gIAorCiAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgPHJvbGUtbmFtZT5yb2xlNTwvcm9sZS1uYW1lPgogICAgIDxwcmluY2lwYWwtbmFtZT5yNXAxPC9wcmluY2lwYWwtbmFtZT4KICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gIAorCiAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgPHJvbGUtbmFtZT5yb2xlNjwvcm9sZS1uYW1lPgogICAgIDxwcmluY2lwYWwtbmFtZT5yNnAxPC9wcmluY2lwYWwtbmFtZT4KQEAgLTc2LDcgKzc2LDcgQEAKICAgICA8cm9sZS1uYW1lPnJvbGU2PC9yb2xlLW5hbWU+CiAgICAgPGdyb3VwLW5hbWU+cjZnMTwvZ3JvdXAtbmFtZT4KICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gIAorCiAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgPHJvbGUtbmFtZT5yb2xlNzwvcm9sZS1uYW1lPgogICAgIDxwcmluY2lwYWwtbmFtZT5yN3AxPC9wcmluY2lwYWwtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNGE3MmVlMi4uMzRlZDczZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDE4ICsyMiwxOCBAQAogICAgICAgICA8c2VydmxldC1uYW1lPldlYlRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+Y29tLnN1bi5zMWFzZGV2LnNlY3VyaXR5Lm11bHRpUm9sZU1hcHBpbmcud2ViLldlYlRlc3Q8L3NlcnZsZXQtY2xhc3M+CiAgICAgPC9zZXJ2bGV0PgotICAgIAorCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5XZWJUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAgICAgPHNlc3Npb24tY29uZmlnPgotICAgICAgCisKICAgICAgICAgPHNlc3Npb24tdGltZW91dD4KICAgICAgICAgICAgIDMwCiAgICAgICAgIDwvc2Vzc2lvbi10aW1lb3V0PgogICAgIDwvc2Vzc2lvbi1jb25maWc+Ci0gICAgCisKICAgICA8c2VjdXJpdHktY29uc3RyYWludD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5jb25zdHJhaW50LXJvbGUxPC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZWpiMS9NZXNzYWdlQmVhbjEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZWpiMS9NZXNzYWdlQmVhbjEuamF2YQppbmRleCBiNGM1NmQ2Li4xMGE2ZGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL2VqYjEvTWVzc2FnZUJlYW4xLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9lamIxL01lc3NhZ2VCZWFuMS5qYXZhCkBAIC0yMywxMCArMjMsMTAgQEAKIEBTdGF0ZWxlc3MKIEBMb2NhbCh7TWVzc2FnZUxvY2FsMS5jbGFzc30pCiBwdWJsaWMgY2xhc3MgTWVzc2FnZUJlYW4xIGltcGxlbWVudHMgTWVzc2FnZUxvY2FsMSB7Ci0gICAgCisKICAgICAvL0BSb2xlc0FsbG93ZWQoImVqYnJvbGUiKQogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpIHsKICAgICAgICAgcmV0dXJuICJIZWxsbyBmcm9tIGVqYiI7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL2VqYjEvTWVzc2FnZUxvY2FsMS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9lamIxL01lc3NhZ2VMb2NhbDEuamF2YQppbmRleCAxZDZjZWZmLi5lNzJhY2EyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL2VqYjEvTWVzc2FnZUxvY2FsMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZWpiMS9NZXNzYWdlTG9jYWwxLmphdmEKQEAgLTI0LDUgKzI0LDUgQEAKIEBMb2NhbAogcHVibGljIGludGVyZmFjZSBNZXNzYWdlTG9jYWwxIHsKICAgICBTdHJpbmcgZ2V0TWVzc2FnZSgpOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL2VqYjIvTWVzc2FnZUJlYW4yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL2VqYjIvTWVzc2FnZUJlYW4yLmphdmEKaW5kZXggYTQzNTJhOC4uOTYwYTMzMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9lamIyL01lc3NhZ2VCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZWpiMi9NZXNzYWdlQmVhbjIuamF2YQpAQCAtMjMsMTAgKzIzLDEwIEBACiBAU3RhdGVsZXNzCiBATG9jYWwoe01lc3NhZ2VMb2NhbDIuY2xhc3N9KQogcHVibGljIGNsYXNzIE1lc3NhZ2VCZWFuMiBpbXBsZW1lbnRzIE1lc3NhZ2VMb2NhbDIgewotICAgIAorCiAgICAgLy9AUm9sZXNBbGxvd2VkKCJlamJyb2xlIikKICAgICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7CiAgICAgICAgIHJldHVybiAiSGVsbG8gZnJvbSBlamIiOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9lamIyL01lc3NhZ2VMb2NhbDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZWpiMi9NZXNzYWdlTG9jYWwyLmphdmEKaW5kZXggMDIwMjM5NS4uY2Y4ODhiOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9lamIyL01lc3NhZ2VMb2NhbDIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL2VqYjIvTWVzc2FnZUxvY2FsMi5qYXZhCkBAIC0yNCw1ICsyNCw1IEBACiBATG9jYWwKIHB1YmxpYyBpbnRlcmZhY2UgTWVzc2FnZUxvY2FsMiB7CiAgICAgU3RyaW5nIGdldE1lc3NhZ2UoKTsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy93ZWIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy93ZWIvV2ViVGVzdC5qYXZhCmluZGV4IDBhOWE1MzUuLjYxNDFlZWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvd2ViL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL3dlYi9XZWJUZXN0LmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICAKKwogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LAogICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCkBAIC00NCw1ICs0NCw1IEBACiAgICAgICAgIH0KICAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9uZWdhdGl2ZVJlYWxtUGVyQXBwL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9uZWdhdGl2ZVJlYWxtUGVyQXBwL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTYzOGM0ZC4uM2Q1N2MwZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbmVnYXRpdmVSZWFsbVBlckFwcC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L25lZ2F0aXZlUmVhbG1QZXJBcHAvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CkBAIC0yNiw0ICsyNiw0IEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9Im5lZ2F0aXZlUlBBTG9naW5CZWFuIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9Im5lZ2F0aXZlUlBBTG9naW5CZWFuIi8+ICAgICAgICBcdTAwMjAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L25lZ2F0aXZlUmVhbG1QZXJBcHAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbmVnYXRpdmVSZWFsbVBlckFwcC9idWlsZC54bWwKaW5kZXggMzk4Yjg4OS4uN2I1YmNmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbmVnYXRpdmVSZWFsbVBlckFwcC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbmVnYXRpdmVSZWFsbVBlckFwcC9idWlsZC54bWwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICZjb21tb25SdW47CiAgICAmdGVzdFByb3BlcnRpZXM7CiAgICAmY29tbW9uU2VjdXJpdHk7Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsIGRlcGxveSxydW4sIHVuZGVwbG95Ii8+CiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KQEAgLTUwLDcgKzUwLDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotPCEtLQk8cHJvcGVydHkgbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi8qSG9tZSouY2xhc3MsKiovKkJlYW4qLmNsYXNzLCoqLypEYXRhKi5jbGFzcywqLmRic2NoZW1hIi8+Cis8IS0tICAgIDxwcm9wZXJ0eSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLypIb21lKi5jbGFzcywqKi8qQmVhbiouY2xhc3MsKiovKkRhdGEqLmNsYXNzLCouZGJzY2hlbWEiLz4KIC0tPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L25lZ2F0aXZlUmVhbG1QZXJBcHAvY2xpZW50L05lZ2F0aXZlUlBBQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9uZWdhdGl2ZVJlYWxtUGVyQXBwL2NsaWVudC9OZWdhdGl2ZVJQQUNsaWVudC5qYXZhCmluZGV4IGE1ZDY3OTYuLjRjOGY3YmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L25lZ2F0aXZlUmVhbG1QZXJBcHAvY2xpZW50L05lZ2F0aXZlUlBBQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbmVnYXRpdmVSZWFsbVBlckFwcC9jbGllbnQvTmVnYXRpdmVSUEFDbGllbnQuamF2YQpAQCAtMzksMzEgKzM5LDMxIEBACiAgICAgICAgIE5lZ2F0aXZlUlBBQ2xpZW50IGNsaWVudCA9IG5ldyBOZWdhdGl2ZVJQQUNsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBOZWdhdGl2ZVJQQUNsaWVudChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIC8vc3VwZXIoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBkb1Rlc3QoKSB7Ci0gICAgICAgIAotCU5lZ2F0aXZlUlBBUmVtb3RlIGhyPW51bGw7CisKKyAgICBOZWdhdGl2ZVJQQVJlbW90ZSBocj1udWxsOwogICAgICAgICBTdHJpbmcgcmVzPW51bGw7CiAgICAgICAgIENvbnRleHQgaWMgPSBudWxsOwogICAgICAgICBMb2dpbkNvbnRleHQgbGM9bnVsbDsKICAgICAgICAgTmVnYXRpdmVSUEFIb21lIGhvbWU9bnVsbDsKICAgICAgICAgU3RyaW5nIHRlc3RJZCA9ICJTZWM6Ok5lZ2F0aXZlVGVzdC1SZWFsbSBwZXIgYXBwIjsKLSAgICAJdHJ5eworICAgICAgICB0cnl7CiAgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJTZWN1cml0eTo6TmVnYXRpdmVUZXN0IC0gUmVhbG0gcGVyIGFwcCIpOwotCSAgICBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgICAgICBqYXZhLmxhbmcuT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgibmVnYXRpdmVSUEFMb2dpbkJlYW4iKTsKLQkJCi0JICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotCQkKKworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKKwogICAgICAgICAgICAgaG9tZSA9IChOZWdhdGl2ZVJQQUhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KAotCQkJCQkgICBvYmpyZWYsIE5lZ2F0aXZlUlBBSG9tZS5jbGFzcyk7Ci0JICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7Ci0JCQkJCisgICAgICAgICAgICAgICAgICAgICAgIG9ianJlZiwgTmVnYXRpdmVSUEFIb21lLmNsYXNzKTsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKKwogICAgICAgICAgICAgaHIgPSBob21lLmNyZWF0ZSgiTGl6SHVybGV5Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkNhbGxpbmcgYXV0aG9yaXplZCBtZXRob2QgLSBhZGRJdGVtIik7CkBAIC03NSwxMyArNzUsMTMgQEAKICAgICAgICAgICAgIC8vZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBpZihleCBpbnN0YW5jZW9mIGphdmEucm1pLkFjY2Vzc0V4Y2VwdGlvbil7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgR290IGphdmEucm1pLkFjY2Vzc0V4Y2VwdGlvbiAhISAiKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5lZ2F0aXZlUlBBOlN0YXRlZnVsTG9naW5CZWFuIFRlc3QgUGFzc2VkOiBFeGNlcHRpb24gZXhwZWN0ZWQiKTsgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5lZ2F0aXZlUlBBOlN0YXRlZnVsTG9naW5CZWFuIFRlc3QgUGFzc2VkOiBFeGNlcHRpb24gZXhwZWN0ZWQiKTsKICAgICAgICAgICAgICAgICByZXM9IlBBU1MiOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5QQVNTKTsKIAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5lZ2F0aXZlUlBBOlN0YXRlZnVsTG9naW5CZWFuIFRlc3QgRmFpbGVkIik7Ci0gICAgICAgICAgICAgICAgcmVzID0gIkZBSUwiOyAgCisgICAgICAgICAgICAgICAgcmVzID0gIkZBSUwiOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKQEAgLTg5LDEwICs4OSwxMCBAQAogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgCisKICAgICB9CiAKLSAgICAKKwogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIGhlbGxvU3RyID0gIkhlbGxvIE5lZ2F0aXZlUlBBISEhIjsKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbmVnYXRpdmVSZWFsbVBlckFwcC9zaG9wcGluZy9OZWdhdGl2ZVJQQUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L25lZ2F0aXZlUmVhbG1QZXJBcHAvc2hvcHBpbmcvTmVnYXRpdmVSUEFCZWFuLmphdmEKaW5kZXggODA0Y2EzNS4uZDcwZmRlZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbmVnYXRpdmVSZWFsbVBlckFwcC9zaG9wcGluZy9OZWdhdGl2ZVJQQUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9uZWdhdGl2ZVJlYWxtUGVyQXBwL3Nob3BwaW5nL05lZ2F0aXZlUlBBQmVhbi5qYXZhCkBAIC0zNSw2NiArMzUsNjYgQEAKICAqLwogCiBwdWJsaWMgY2xhc3MgTmVnYXRpdmVSUEFCZWFuIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgc2hvcHBlciA9ICJhbm9ueW1vdXMiOwogICAgIHByaXZhdGUgU3RyaW5nIHByaW5jaXBhbCA9ICJqMmVlIjsKICAgICBwcml2YXRlIGludCB0b3RhbFByaWNlID0gMDsKLSAgICAKKwogICAgIHByaXZhdGUgaW50IHRvdGFsSXRlbXMgPSAwOwotICAgIAorCiAgICAgcHJpdmF0ZSBWZWN0b3IgaXRlbXM7Ci0gICAgCisKICAgICBwcml2YXRlIFZlY3RvciBpdGVtUHJpY2U7Ci0gICAgCisKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjID0gbnVsbDsKLSAgICAKKwogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFNob3BwaW5nRUpCICovCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKFN0cmluZyBzaG9wcGVyTmFtZSkgewogICAgICAgICBzaG9wcGVyID0gc2hvcHBlck5hbWU7CiAgICAgICAgIGl0ZW1zID0gbmV3IFZlY3RvcigpOwogICAgICAgICBpdGVtUHJpY2UgPSBuZXcgVmVjdG9yKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWRkSXRlbShqYXZhLmxhbmcuU3RyaW5nIGl0ZW0sIGludCBwcmljZSkgdGhyb3dzIEVKQkV4Y2VwdGlvbiwKICAgICAgICAgUmVtb3RlRXhjZXB0aW9uewogICAgICAgICAvLyB0aGlzIG1ldGhvZCBzaG91bGQgYmUgdW5jYWxsYWJsZS4KICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJNZXRob2Qgc2hvdWxkIGJlIHVuY2FsbGFibGUgIik7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGRlbGV0ZUl0ZW0oamF2YS5sYW5nLlN0cmluZyBpdGVtKSB0aHJvd3MgRUpCRXhjZXB0aW9uLCAKKworICAgIHB1YmxpYyB2b2lkIGRlbGV0ZUl0ZW0oamF2YS5sYW5nLlN0cmluZyBpdGVtKSB0aHJvd3MgRUpCRXhjZXB0aW9uLAogICAgICAgICBSZW1vdGVFeGNlcHRpb257CiAgICAgICAgIC8vIHRoaXMgbWV0aG9kIHNob3VsZCBiZSB1bmNhbGxhYmxlLgogICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIk1ldGhvZCBzaG91bGQgYmUgdW5jYWxsYWJsZSAiKTsKIAogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBkb3VibGUgZ2V0VG90YWxDb3N0KCkgdGhyb3dzIEVKQkV4Y2VwdGlvbnsKICAgICAgICAgLy8gdGhpcyBtZXRob2Qgc2hvdWxkIGJlIHVuY2FsbGFibGUuCiAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiTWV0aG9kIHNob3VsZCBiZSB1bmNhbGxhYmxlICIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRJdGVtcygpIHRocm93cyBFSkJFeGNlcHRpb257CiAgICAgICAgLy8gdGhpcyBtZXRob2Qgc2hvdWxkIGJlIHVuY2FsbGFibGUuCiAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiTWV0aG9kIHNob3VsZCBiZSB1bmNhbGxhYmxlICIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNob3BwaW5nQ2FydCBlamJBY3RpdmF0ZSIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNob3BwaW5nQ2FydCBlamJQYXNzaXZhdGUiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpICB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2hvcHBpbmdDYXJ0IGVqYlJlbW92ZSIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2Vzc2lvbkNvbnRleHQpIHsKICAgICAgICAgc2MgPSBzZXNzaW9uQ29udGV4dDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L25lZ2F0aXZlUmVhbG1QZXJBcHAvc2hvcHBpbmcvTmVnYXRpdmVSUEFIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9uZWdhdGl2ZVJlYWxtUGVyQXBwL3Nob3BwaW5nL05lZ2F0aXZlUlBBSG9tZS5qYXZhCmluZGV4IDMwM2Y4OWIuLjhhNGEzNzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L25lZ2F0aXZlUmVhbG1QZXJBcHAvc2hvcHBpbmcvTmVnYXRpdmVSUEFIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbmVnYXRpdmVSZWFsbVBlckFwcC9zaG9wcGluZy9OZWdhdGl2ZVJQQUhvbWUuamF2YQpAQCAtMjgsOCArMjgsOCBAQAogICogQHZlcnNpb24KICAqLwogcHVibGljIGludGVyZmFjZSBOZWdhdGl2ZVJQQUhvbWUgZXh0ZW5kcyBFSkJIb21lewotICAgIAotICAgIHB1YmxpYyBOZWdhdGl2ZVJQQVJlbW90ZSBjcmVhdGUoamF2YS5sYW5nLlN0cmluZyBzaG9wcGVyTmFtZSkgCisKKyAgICBwdWJsaWMgTmVnYXRpdmVSUEFSZW1vdGUgY3JlYXRlKGphdmEubGFuZy5TdHJpbmcgc2hvcHBlck5hbWUpCiAgICAgICAgIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbmVnYXRpdmVSZWFsbVBlckFwcC9zaG9wcGluZy9OZWdhdGl2ZVJQQVJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbmVnYXRpdmVSZWFsbVBlckFwcC9zaG9wcGluZy9OZWdhdGl2ZVJQQVJlbW90ZS5qYXZhCmluZGV4IDdhZmQxZDcuLjdiZGJjODAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L25lZ2F0aXZlUmVhbG1QZXJBcHAvc2hvcHBpbmcvTmVnYXRpdmVSUEFSZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9uZWdhdGl2ZVJlYWxtUGVyQXBwL3Nob3BwaW5nL05lZ2F0aXZlUlBBUmVtb3RlLmphdmEKQEAgLTIzLDE4ICsyMywxOCBAQAogcGFja2FnZSBzaG9wcGluZzsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJPYmplY3Q7CiAvKioKLSAqIE5lZ2F0aXZlIFJlYWxtUGVyQVBQIFN0YXRlZnVsIFNlc3Npb24gQmVhbi4gCisgKiBOZWdhdGl2ZSBSZWFsbVBlckFQUCBTdGF0ZWZ1bCBTZXNzaW9uIEJlYW4uCiAgKiBUcmllcyB0byBsb2cgaW50byBhIG5vbiBleGlzdGVudCByZWFsbQogICogQWxsIG1ldGhvZHMgc2hvdWxkIGJlIHVuY2FsbGFibGVOCiAgKiBAYXV0aG9yICBIYXJwcmVldCBTaW5naAogICovCiBwdWJsaWMgaW50ZXJmYWNlIE5lZ2F0aXZlUlBBUmVtb3RlIGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAgICAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgYWRkSXRlbShqYXZhLmxhbmcuU3RyaW5nIGl0ZW0sIGludCBwcmljZSkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRlbGV0ZUl0ZW0oamF2YS5sYW5nLlN0cmluZyBpdGVtKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgICAgIAorCiAgICAgcHVibGljIGRvdWJsZSBnZXRUb3RhbENvc3QoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmdbXSBnZXRJdGVtcygpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wYW1yZWFsbS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGFtcmVhbG0vYnVpbGQucHJvcGVydGllcwppbmRleCAxOWE5YjFkLi43OWI5NGVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wYW1yZWFsbS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3BhbXJlYWxtL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlYyIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0id2ViIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wYW1yZWFsbS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wYW1yZWFsbS9idWlsZC54bWwKaW5kZXggOGUyNmU3ZS4uMDIwMTNmNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGFtcmVhbG0vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3BhbXJlYWxtL2J1aWxkLnhtbApAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke3NyY30iLz4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iJHtzcmN9IgotICAgICAgICAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgICAgZGVidWc9Im9uIgogICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9InBhbWNsaWVudC5jbGFzcy5wYXRoIi8+CkBAIC05OCw3ICs5OCw3IEBACiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke3Bhc3N3b3JkfSIvPgogCiAgICAgPC9qYXZhPgotICAgICAgICAKKwogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTE3LDcgKzExNyw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RhcnQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGFtcmVhbG0vZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGFtcmVhbG0vZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDM4NzgwYmYuLjcxY2QyYjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3BhbXJlYWxtL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wYW1yZWFsbS9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTE4LDcgKzE4LDcgQEAKIC0tPgogCiA8d2ViLWFwcCB2ZXJzaW9uPSIzLjAiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiPgotICAgIAorCiAgICAgPHdlbGNvbWUtZmlsZS1saXN0PgogICAgICAgICA8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgogICAgIDwvd2VsY29tZS1maWxlLWxpc3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDJkMjgwYzkuLmExNGU5NDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eSIvPgogPHByb3BlcnR5IG5hbWU9InN1Yi1tb2R1bGUiIHZhbHVlPSIke21vZHVsZX0tcGxvZ2luIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL2J1aWxkLnhtbAppbmRleCBlOWRkNGE3Li4xNTNiZGY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9idWlsZC54bWwKQEAgLTMyLDcgKzMyLDcgQEAKICAgICAmcnVuOwogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiPgotCTxhbnQgZGlyPSJzdGFuZGFsb25lIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJzdGFuZGFsb25lIiB0YXJnZXQ9ImFsbCIvPgogICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vc3RhbmRhbG9uZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvYnVpbGQucHJvcGVydGllcwppbmRleCBkNGRhNTI4Li43Y2M2ZjNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vc3RhbmRhbG9uZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9zdGFuZGFsb25lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5Ii8+CiA8cHJvcGVydHkgbmFtZT0ic3ViLW1vZHVsZSIgdmFsdWU9IiR7bW9kdWxlfS1wbG9naW4tc3RhbmRhbG9uZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvYnVpbGQueG1sCmluZGV4IGYxYzJmOTIuLmQxM2ZhNGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9zdGFuZGFsb25lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vc3RhbmRhbG9uZS9idWlsZC54bWwKQEAgLTM1LDEyICszNSwxMiBAQAogICAgJmNvbW1vblNlY3VyaXR5OwogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHN0YW5kYWxvbmUgcHJvZ3JhbW1hdGljIGxvZ2luIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgc3RhbmRhbG9uZSBwcm9ncmFtbWF0aWMgbG9naW4gdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLCBzZXR1cCwgZGVwbG95LHJ1biwgdW5kZXBsb3ksIHVuc2V0dXAiPgogICAgIDwvdGFyZ2V0PgogCkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1zdGFuZGFsb25lLWNsaWVudC1wZXItdGhyZWFkIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAKICAgICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgc3RhbmRhbG9uZSBjbGllbnQgcGVyLXRocmVhZCAuLi4iLz4KLSAgIAorCiAgICAgICA8amF2YSBjbGFzc25hbWU9IlBMb2dpblRlc3QiCiAgICAgICAgIGNsYXNzcGF0aD0iJHthZG1pbi5kb21haW4uZGlyfS8uLi9saWIvYXBwc2Vydi1ydC5qYXI6JHtzMWFzdGVzdC5jbGFzc3BhdGh9OiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIgZm9yaz0idHJ1ZSI+CiAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1EamF2YS5zZWN1cml0eS5hdXRoLmxvZ2luLmNvbmZpZz0ke2FkbWluLmRvbWFpbi5kaXJ9Ly4uL2xpYi9hcHBjbGllbnQvYXBwY2xpZW50bG9naW4uY29uZiIvPgpAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4tc3RhbmRhbG9uZS1jbGllbnQtcGVyLXByb2Nlc3MiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIAogICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyBzdGFuZGFsb25lIGNsaWVudCBwZXItcHJvY2VzcyAuLi4iLz4KLSAgIAorCiAgICAgICA8amF2YSBjbGFzc25hbWU9IlBMb2dpblRlc3QiCiAgICAgICAgIGNsYXNzcGF0aD0iJHthZG1pbi5kb21haW4uZGlyfS8uLi9saWIvYXBwc2Vydi1ydC5qYXI6JHtzMWFzdGVzdC5jbGFzc3BhdGh9OiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIgZm9yaz0idHJ1ZSI+CiAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1EamF2YS5zZWN1cml0eS5hdXRoLmxvZ2luLmNvbmZpZz0ke2FkbWluLmRvbWFpbi5kaXJ9Ly4uL2xpYi9hcHBjbGllbnQvYXBwY2xpZW50bG9naW4uY29uZiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvY2xpZW50L1BMb2dpblRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9zdGFuZGFsb25lL2NsaWVudC9QTG9naW5UZXN0LmphdmEKaW5kZXggOGY0Yjc5Mi4uMGZkNzY5ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvY2xpZW50L1BMb2dpblRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vc3RhbmRhbG9uZS9jbGllbnQvUExvZ2luVGVzdC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAKICAgICBwcm90ZWN0ZWQgTXlTZXNzaW9uMVJlbW90ZSBteTFyID0gbnVsbDsKIAotICAgIHB1YmxpYyBNeVRocmVhZEJhc2UoU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQsIAorICAgIHB1YmxpYyBNeVRocmVhZEJhc2UoU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQsCiAgICAgICAgIFN0cmluZyBlamJMb29rdXBOYW1lLCBTdHJpbmcgdGhyZWFkTmFtZSkgewogCiAgICAgICAgIHN1cGVyKHRocmVhZE5hbWUpOwpAQCAtODgsNyArODgsNyBAQAogICAgICAgICAgIE15U2Vzc2lvbjFSZW1vdGVIb21lIG15MXJoID0gKE15U2Vzc2lvbjFSZW1vdGVIb21lKQogICAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTXlTZXNzaW9uMVJlbW90ZUhvbWUuY2xhc3MpOwogCi0gICAgICAgICAgbXkxciA9IG15MXJoLmNyZWF0ZSgpOyAKKyAgICAgICAgICBteTFyID0gbXkxcmguY3JlYXRlKCk7CiAgICAgICAgICAgU3RyaW5nIHJldHZhbCA9IGRvQnVzaW5lc3MoKTsKIAogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldE5hbWUoKSArICIgLSAiICsgcmV0dmFsKTsKQEAgLTk3LDExICs5NywxMSBAQAogICAgICAgICAgIGRvTG9nb3V0KCk7CiAKICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAvLyBHaXZlIHRpbWUgZm9yIG90aGVyIHRocmVhZCB0byAKKyAgICAgICAgICAgICAgLy8gR2l2ZSB0aW1lIGZvciBvdGhlciB0aHJlYWQgdG8KICAgICAgICAgICAgICAgVGhyZWFkLnNsZWVwKHJhbmRvbS5uZXh0SW50KDEwMCkpOwogICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICB9Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGRvQnVzaW5lc3MoKSB0aHJvd3MgRXhjZXB0aW9uIDsKQEAgLTExNCw3ICsxMTQsNyBAQAogCiAgICAgUHJvZ3JhbW1hdGljTG9naW4gbG9naW4gPSBudWxsOwogCi0gICAgcHVibGljIExvZ2luQnVzaW5lc3NDYWxsZXJCYXNlKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkLCAKKyAgICBwdWJsaWMgTG9naW5CdXNpbmVzc0NhbGxlckJhc2UoU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBlamJMb29rdXBOYW1lLCBTdHJpbmcgdGhyZWFkTmFtZSkgewogICAgICAgICBzdXBlcih1c2VybmFtZSwgcGFzc3dvcmQsIGVqYkxvb2t1cE5hbWUsIHRocmVhZE5hbWUpOwogICAgIH0KQEAgLTEzMSw3ICsxMzEsNyBAQAogCiBhYnN0cmFjdCBjbGFzcyBOb0xvZ2luQnVzaW5lc3NDYWxsZXJCYXNlIGV4dGVuZHMgTXlUaHJlYWRCYXNlIHsKIAotICAgIHB1YmxpYyBOb0xvZ2luQnVzaW5lc3NDYWxsZXJCYXNlKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkLCAKKyAgICBwdWJsaWMgTm9Mb2dpbkJ1c2luZXNzQ2FsbGVyQmFzZShTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZWpiTG9va3VwTmFtZSwgU3RyaW5nIHRocmVhZE5hbWUpIHsKICAgICAgICAgc3VwZXIodXNlcm5hbWUsIHBhc3N3b3JkLCBlamJMb29rdXBOYW1lLCB0aHJlYWROYW1lKTsKICAgICB9CkBAIC0xNDcsNyArMTQ3LDcgQEAKIAogY2xhc3MgTG9naW5CdXNpbmVzc0NhbGxlciBleHRlbmRzIExvZ2luQnVzaW5lc3NDYWxsZXJCYXNlIHsKIAotICAgIHB1YmxpYyBMb2dpbkJ1c2luZXNzQ2FsbGVyKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkLCAKKyAgICBwdWJsaWMgTG9naW5CdXNpbmVzc0NhbGxlcihTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCwKICAgICAgICAgU3RyaW5nIGVqYkxvb2t1cE5hbWUsIFN0cmluZyB0aHJlYWROYW1lKSB7CiAgICAgICAgIHN1cGVyKHVzZXJuYW1lLCBwYXNzd29yZCwgZWpiTG9va3VwTmFtZSwgdGhyZWFkTmFtZSk7CiAgICAgfQpAQCAtMTU5LDcgKzE1OSw3IEBACiAKIGNsYXNzIExvZ2luQnVzaW5lc3NDYWxsZXIyIGV4dGVuZHMgTG9naW5CdXNpbmVzc0NhbGxlckJhc2UgewogCi0gICAgcHVibGljIExvZ2luQnVzaW5lc3NDYWxsZXIyKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkLCAKKyAgICBwdWJsaWMgTG9naW5CdXNpbmVzc0NhbGxlcjIoU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQsCiAgICAgICAgIFN0cmluZyBlamJMb29rdXBOYW1lLCBTdHJpbmcgdGhyZWFkTmFtZSkgewogICAgICAgICBzdXBlcih1c2VybmFtZSwgcGFzc3dvcmQsIGVqYkxvb2t1cE5hbWUsIHRocmVhZE5hbWUpOwogICAgIH0KQEAgLTE3MSw3ICsxNzEsNyBAQAogCiBjbGFzcyBMb2dpbkJ1c2luZXNzQ2FsbGVyMyBleHRlbmRzIExvZ2luQnVzaW5lc3NDYWxsZXJCYXNlIHsKIAotICAgIHB1YmxpYyBMb2dpbkJ1c2luZXNzQ2FsbGVyMyhTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCwgCisgICAgcHVibGljIExvZ2luQnVzaW5lc3NDYWxsZXIzKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkLAogICAgICAgICBTdHJpbmcgZWpiTG9va3VwTmFtZSwgU3RyaW5nIHRocmVhZE5hbWUpIHsKICAgICAgICAgc3VwZXIodXNlcm5hbWUsIHBhc3N3b3JkLCBlamJMb29rdXBOYW1lLCB0aHJlYWROYW1lKTsKICAgICB9CkBAIC0xODMsNyArMTgzLDcgQEAKIAogY2xhc3MgTm9Mb2dpbkJ1c2luZXNzQ2FsbGVyIGV4dGVuZHMgTm9Mb2dpbkJ1c2luZXNzQ2FsbGVyQmFzZSB7CiAKLSAgICBwdWJsaWMgTm9Mb2dpbkJ1c2luZXNzQ2FsbGVyKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkLCAKKyAgICBwdWJsaWMgTm9Mb2dpbkJ1c2luZXNzQ2FsbGVyKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkLAogICAgICAgICBTdHJpbmcgZWpiTG9va3VwTmFtZSwgU3RyaW5nIHRocmVhZE5hbWUpIHsKICAgICAgICAgc3VwZXIodXNlcm5hbWUsIHBhc3N3b3JkLCBlamJMb29rdXBOYW1lLCB0aHJlYWROYW1lKTsKICAgICB9CkBAIC0xOTUsNyArMTk1LDcgQEAKIAogY2xhc3MgTm9Mb2dpbkJ1c2luZXNzQ2FsbGVyMiBleHRlbmRzIE5vTG9naW5CdXNpbmVzc0NhbGxlckJhc2UgewogCi0gICAgcHVibGljIE5vTG9naW5CdXNpbmVzc0NhbGxlcjIoU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQsIAorICAgIHB1YmxpYyBOb0xvZ2luQnVzaW5lc3NDYWxsZXIyKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkLAogICAgICAgICBTdHJpbmcgZWpiTG9va3VwTmFtZSwgU3RyaW5nIHRocmVhZE5hbWUpIHsKICAgICAgICAgc3VwZXIodXNlcm5hbWUsIHBhc3N3b3JkLCBlamJMb29rdXBOYW1lLCB0aHJlYWROYW1lKTsKICAgICB9CkBAIC0yMDcsNyArMjA3LDcgQEAKIAogY2xhc3MgTm9Mb2dpbkJ1c2luZXNzQ2FsbGVyMyBleHRlbmRzIE5vTG9naW5CdXNpbmVzc0NhbGxlckJhc2UgewogCi0gICAgcHVibGljIE5vTG9naW5CdXNpbmVzc0NhbGxlcjMoU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQsIAorICAgIHB1YmxpYyBOb0xvZ2luQnVzaW5lc3NDYWxsZXIzKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkLAogICAgICAgICBTdHJpbmcgZWpiTG9va3VwTmFtZSwgU3RyaW5nIHRocmVhZE5hbWUpIHsKICAgICAgICAgc3VwZXIodXNlcm5hbWUsIHBhc3N3b3JkLCBlamJMb29rdXBOYW1lLCB0aHJlYWROYW1lKTsKICAgICB9CkBAIC0yMTgsOCArMjE4LDggQEAKIH0KIAogcHVibGljIGNsYXNzIFBMb2dpblRlc3QgewotICAgIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTIzMCwzMiArMjMwLDMyIEBACiAKICAgICAgICAgaWYoIGIgKQogICAgICAgICAgICAgcGVyVGhyZWFkVGVzdChudW1UaHJlYWRzKTsKLSAgICAgICAgZWxzZSAKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgcGVyUHJvY2Vzc1Rlc3QobnVtVGhyZWFkcyk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwZXJUaHJlYWRUZXN0KGludCBudW1UaHJlYWRzKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU2V0PE15VGhyZWFkQmFzZT4gdGhyZWFkU2V0ID0gbmV3IEhhc2hTZXQ8TXlUaHJlYWRCYXNlPigpOwogCiAgICAgICAgIGZvcihpbnQgaT0wOyBpPG51bVRocmVhZHM7IGkrKykgewogCi0gICAgICAgICAgICBMb2dpbkJ1c2luZXNzQ2FsbGVyIHQxID0gCi0gICAgICAgICAgICAgICAgbmV3IExvZ2luQnVzaW5lc3NDYWxsZXIoInRlc3R5IiwgInRlc3R5IiwgImVqYi9NeVNlc3Npb24xQmVhbiIsIAorICAgICAgICAgICAgTG9naW5CdXNpbmVzc0NhbGxlciB0MSA9CisgICAgICAgICAgICAgICAgbmV3IExvZ2luQnVzaW5lc3NDYWxsZXIoInRlc3R5IiwgInRlc3R5IiwgImVqYi9NeVNlc3Npb24xQmVhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIlRIUkVBRC0iKyIxLSIraSk7CiAgICAgICAgICAgICBMb2dpbkJ1c2luZXNzQ2FsbGVyMiB0MiA9Ci0gICAgICAgICAgICAgICAgbmV3IExvZ2luQnVzaW5lc3NDYWxsZXIyKCJ0ZXN0eTIiLCAidGVzdHkyIiwgImVqYi9NeVNlc3Npb24xQmVhbiIsIAorICAgICAgICAgICAgICAgIG5ldyBMb2dpbkJ1c2luZXNzQ2FsbGVyMigidGVzdHkyIiwgInRlc3R5MiIsICJlamIvTXlTZXNzaW9uMUJlYW4iLAogICAgICAgICAgICAgICAgICAgICAgICJUSFJFQUQtIisiMi0iK2kpOwotICAgICAgICAgICAgTG9naW5CdXNpbmVzc0NhbGxlcjMgdDMgPSAKLSAgICAgICAgICAgICAgICBuZXcgTG9naW5CdXNpbmVzc0NhbGxlcjMoInRlc3R5MyIsICJ0ZXN0eTMiLCAiZWpiL015U2Vzc2lvbjFCZWFuIiwgCisgICAgICAgICAgICBMb2dpbkJ1c2luZXNzQ2FsbGVyMyB0MyA9CisgICAgICAgICAgICAgICAgbmV3IExvZ2luQnVzaW5lc3NDYWxsZXIzKCJ0ZXN0eTMiLCAidGVzdHkzIiwgImVqYi9NeVNlc3Npb24xQmVhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIlRIUkVBRC0iKyIzLSIraSk7CiAKICAgICAgICAgICAgIHRocmVhZFNldC5hZGQodDEpOwogICAgICAgICAgICAgdGhyZWFkU2V0LmFkZCh0Mik7CiAgICAgICAgICAgICB0aHJlYWRTZXQuYWRkKHQzKTsKIAotICAgICAgICAgICAgdDIuc3RhcnQoKTsgICAKLSAgICAgICAgICAgIHQxLnN0YXJ0KCk7ICAgCisgICAgICAgICAgICB0Mi5zdGFydCgpOworICAgICAgICAgICAgdDEuc3RhcnQoKTsKICAgICAgICAgICAgIHQzLnN0YXJ0KCk7CiAKICAgICAgICAgfQpAQCAtMjg1LDcgKzI4NSw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwZXJQcm9jZXNzVGVzdChpbnQgbnVtVGhyZWFkcykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFNldDxNeVRocmVhZEJhc2U+IHRocmVhZFNldCA9IG5ldyBIYXNoU2V0PE15VGhyZWFkQmFzZT4oKTsKIAogICAgICAgICBQcm9ncmFtbWF0aWNMb2dpbiBsb2dpbiA9IG5ldyBQcm9ncmFtbWF0aWNMb2dpbigpOwpAQCAtMjkzLDIyICsyOTMsMjIgQEAKIAogICAgICAgICBmb3IoaW50IGk9MDsgaTxudW1UaHJlYWRzOyBpKyspIHsKIAotICAgICAgICAgICAgTm9Mb2dpbkJ1c2luZXNzQ2FsbGVyIHQxID0gCi0gICAgICAgICAgICAgICAgbmV3IE5vTG9naW5CdXNpbmVzc0NhbGxlcigidGVzdHkiLCAidGVzdHkiLCAiZWpiL015U2Vzc2lvbjFCZWFuIiwgCisgICAgICAgICAgICBOb0xvZ2luQnVzaW5lc3NDYWxsZXIgdDEgPQorICAgICAgICAgICAgICAgIG5ldyBOb0xvZ2luQnVzaW5lc3NDYWxsZXIoInRlc3R5IiwgInRlc3R5IiwgImVqYi9NeVNlc3Npb24xQmVhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIlRIUkVBRC0iKyIxLSIraSk7CiAgICAgICAgICAgICBOb0xvZ2luQnVzaW5lc3NDYWxsZXIyIHQyID0KLSAgICAgICAgICAgICAgICBuZXcgTm9Mb2dpbkJ1c2luZXNzQ2FsbGVyMigidGVzdHkyIiwgInRlc3R5MiIsICJlamIvTXlTZXNzaW9uMUJlYW4iLCAKKyAgICAgICAgICAgICAgICBuZXcgTm9Mb2dpbkJ1c2luZXNzQ2FsbGVyMigidGVzdHkyIiwgInRlc3R5MiIsICJlamIvTXlTZXNzaW9uMUJlYW4iLAogICAgICAgICAgICAgICAgICAgICAgICJUSFJFQUQtIisiMi0iK2kpOwotICAgICAgICAgICAgTm9Mb2dpbkJ1c2luZXNzQ2FsbGVyMyB0MyA9IAotICAgICAgICAgICAgICAgIG5ldyBOb0xvZ2luQnVzaW5lc3NDYWxsZXIzKCJ0ZXN0eTMiLCAidGVzdHkzIiwgImVqYi9NeVNlc3Npb24xQmVhbiIsIAorICAgICAgICAgICAgTm9Mb2dpbkJ1c2luZXNzQ2FsbGVyMyB0MyA9CisgICAgICAgICAgICAgICAgbmV3IE5vTG9naW5CdXNpbmVzc0NhbGxlcjMoInRlc3R5MyIsICJ0ZXN0eTMiLCAiZWpiL015U2Vzc2lvbjFCZWFuIiwKICAgICAgICAgICAgICAgICAgICAgICAiVEhSRUFELSIrIjMtIitpKTsKIAogICAgICAgICAgICAgdGhyZWFkU2V0LmFkZCh0MSk7CiAgICAgICAgICAgICB0aHJlYWRTZXQuYWRkKHQyKTsKICAgICAgICAgICAgIHRocmVhZFNldC5hZGQodDMpOwogCi0gICAgICAgICAgICB0Mi5zdGFydCgpOyAgIAotICAgICAgICAgICAgdDEuc3RhcnQoKTsgICAKKyAgICAgICAgICAgIHQyLnN0YXJ0KCk7CisgICAgICAgICAgICB0MS5zdGFydCgpOwogICAgICAgICAgICAgdDMuc3RhcnQoKTsKIAogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vc3RhbmRhbG9uZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCA5ZDZmOWExLi4yNmNlYmY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vc3RhbmRhbG9uZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9zdGFuZGFsb25lL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTM0LDQxICszNCw0MSBAQAogCiAKICAgICAgICAgPHNlY3VyaXR5LXJvbGU+Ci0gICAgICAgCSAgICA8cm9sZS1uYW1lPnN0YWZmPC9yb2xlLW5hbWU+CisgICAgICAgICAgICAgICA8cm9sZS1uYW1lPnN0YWZmPC9yb2xlLW5hbWU+CiAgICAgICAgIDwvc2VjdXJpdHktcm9sZT4KICAgICAgICAgPHNlY3VyaXR5LXJvbGU+Ci0gICAgICAgCSAgICA8cm9sZS1uYW1lPnN0YWZmMjwvcm9sZS1uYW1lPgorICAgICAgICAgICAgICAgPHJvbGUtbmFtZT5zdGFmZjI8L3JvbGUtbmFtZT4KICAgICAgICAgPC9zZWN1cml0eS1yb2xlPgogICAgICAgICA8c2VjdXJpdHktcm9sZT4KLSAgICAgICAJICAgIDxyb2xlLW5hbWU+c3RhZmYzPC9yb2xlLW5hbWU+CisgICAgICAgICAgICAgICA8cm9sZS1uYW1lPnN0YWZmMzwvcm9sZS1uYW1lPgogICAgICAgICA8L3NlY3VyaXR5LXJvbGU+CiAKICAgICAgICAgPG1ldGhvZC1wZXJtaXNzaW9uPgotCSAgICAgPGRlc2NyaXB0aW9uPm1ldGhvZCBhdXRob3JpemVkIHRvIG9ubHkgc3RhZmYgcm9sZTwvZGVzY3JpcHRpb24+CisgICAgICAgICA8ZGVzY3JpcHRpb24+bWV0aG9kIGF1dGhvcml6ZWQgdG8gb25seSBzdGFmZiByb2xlPC9kZXNjcmlwdGlvbj4KICAgICAgICAgICAgICA8cm9sZS1uYW1lPnN0YWZmPC9yb2xlLW5hbWU+CiAgICAgICAgICAgICAgPG1ldGhvZD4KLQkgICAgICAgICA8ZWpiLW5hbWU+TXlTZXNzaW9uMUJlYW48L2VqYi1uYW1lPgotCSAgICAgICAgIDxtZXRob2QtbmFtZT5idXNpbmVzc01ldGhvZDwvbWV0aG9kLW5hbWU+Ci0JICAgICA8L21ldGhvZD4KKyAgICAgICAgICAgICA8ZWpiLW5hbWU+TXlTZXNzaW9uMUJlYW48L2VqYi1uYW1lPgorICAgICAgICAgICAgIDxtZXRob2QtbmFtZT5idXNpbmVzc01ldGhvZDwvbWV0aG9kLW5hbWU+CisgICAgICAgICA8L21ldGhvZD4KICAgICAgICAgPC9tZXRob2QtcGVybWlzc2lvbj4KIAogCiAgICAgICAgIDxtZXRob2QtcGVybWlzc2lvbj4KLQkgICAgIDxkZXNjcmlwdGlvbj5tZXRob2QgYXV0aG9yaXplZCB0byBvbmx5IHN0YWZmMiByb2xlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgIDxkZXNjcmlwdGlvbj5tZXRob2QgYXV0aG9yaXplZCB0byBvbmx5IHN0YWZmMiByb2xlPC9kZXNjcmlwdGlvbj4KICAgICAgICAgICAgICA8cm9sZS1uYW1lPnN0YWZmMjwvcm9sZS1uYW1lPgogICAgICAgICAgICAgIDxtZXRob2Q+Ci0JICAgICAgICAgPGVqYi1uYW1lPk15U2Vzc2lvbjFCZWFuPC9lamItbmFtZT4KLQkgICAgICAgICA8bWV0aG9kLW5hbWU+YnVzaW5lc3NNZXRob2QyPC9tZXRob2QtbmFtZT4KLQkgICAgIDwvbWV0aG9kPgorICAgICAgICAgICAgIDxlamItbmFtZT5NeVNlc3Npb24xQmVhbjwvZWpiLW5hbWU+CisgICAgICAgICAgICAgPG1ldGhvZC1uYW1lPmJ1c2luZXNzTWV0aG9kMjwvbWV0aG9kLW5hbWU+CisgICAgICAgICA8L21ldGhvZD4KICAgICAgICAgPC9tZXRob2QtcGVybWlzc2lvbj4KIAogICAgICAgICA8bWV0aG9kLXBlcm1pc3Npb24+Ci0JICAgICA8ZGVzY3JpcHRpb24+bWV0aG9kIGF1dGhvcml6ZWQgdG8gb25seSBzdGFmZjMgcm9sZTwvZGVzY3JpcHRpb24+CisgICAgICAgICA8ZGVzY3JpcHRpb24+bWV0aG9kIGF1dGhvcml6ZWQgdG8gb25seSBzdGFmZjMgcm9sZTwvZGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgPHJvbGUtbmFtZT5zdGFmZjM8L3JvbGUtbmFtZT4KICAgICAgICAgICAgICA8bWV0aG9kPgotCSAgICAgICAgIDxlamItbmFtZT5NeVNlc3Npb24xQmVhbjwvZWpiLW5hbWU+Ci0JICAgICAgICAgPG1ldGhvZC1uYW1lPmJ1c2luZXNzTWV0aG9kMzwvbWV0aG9kLW5hbWU+Ci0JICAgICA8L21ldGhvZD4KKyAgICAgICAgICAgICA8ZWpiLW5hbWU+TXlTZXNzaW9uMUJlYW48L2VqYi1uYW1lPgorICAgICAgICAgICAgIDxtZXRob2QtbmFtZT5idXNpbmVzc01ldGhvZDM8L21ldGhvZC1uYW1lPgorICAgICAgICAgPC9tZXRob2Q+CiAgICAgICAgIDwvbWV0aG9kLXBlcm1pc3Npb24+CiAKICAgICAgICAgPGNvbnRhaW5lci10cmFuc2FjdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9zdGFuZGFsb25lL2Rlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9zdGFuZGFsb25lL2Rlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbAppbmRleCAzYzczMDZiLi42MWE2MzlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vc3RhbmRhbG9uZS9kZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sCkBAIC0zMiw3ICszMiw3IEBACiAgICAgPHJvbGUtbmFtZT5zdGFmZjM8L3JvbGUtbmFtZT4KICAgICA8cHJpbmNpcGFsLW5hbWU+Y2hpZWY8L3ByaW5jaXBhbC1uYW1lPgogICA8L3NlY3VyaXR5LXJvbGUtbWFwcGluZz4KLSAKKwogICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgIDxyb2xlLW5hbWU+c3RhZmY8L3JvbGUtbmFtZT4KICAgICA8cHJpbmNpcGFsLW5hbWU+dGVzdHk8L3ByaW5jaXBhbC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvZWpiL015U2Vzc2lvbjFCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vc3RhbmRhbG9uZS9lamIvTXlTZXNzaW9uMUJlYW4uamF2YQppbmRleCA1NTZjYWNkLi44ODljYWVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vc3RhbmRhbG9uZS9lamIvTXlTZXNzaW9uMUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vc3RhbmRhbG9uZS9lamIvTXlTZXNzaW9uMUJlYW4uamF2YQpAQCAtMjEsMzYgKzIxLDM2IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBNeVNlc3Npb24xQmVhbiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuLCBNeVNlc3Npb24xUmVtb3RlQnVzaW5lc3MgewogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW4jc2V0U2Vzc2lvbkNvbnRleHQoamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgYUNvbnRleHQpIHsKICAgICAgICAgY29udGV4dCA9IGFDb250ZXh0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW4jZWpiQWN0aXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW4jZWpiUGFzc2l2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbiNlamJSZW1vdmUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKLSAgICAgICAgCisKICAgICB9CiAgICAgLy8gPC9lZGl0b3ItZm9sZD4KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNlZSBzZWN0aW9uIDcuMTAuMyBvZiB0aGUgRUpCIDIuMCBzcGVjaWZpY2F0aW9uCiAgICAgICogU2VlIHNlY3Rpb24gNy4xMS4zIG9mIHRoZSBFSkIgMi4xIHNwZWNpZmljYXRpb24KQEAgLTYxLDkgKzYxLDkgQEAKICAgICAgICAgLy8gc3Bhbm5pbmcgYWxsIG1ldGhvZHMgY2FuIGJlIHBlcmZvcm1lZCBoZXJlIHN1Y2ggYXMgaG9tZSBpbnRlcmZhY2VzCiAgICAgICAgIC8vIGFuZCBkYXRhIHNvdXJjZXMuCiAgICAgfQotICAgIAotICAgIAotICAgIAorCisKKwogICAgIHB1YmxpYyBTdHJpbmcgYnVzaW5lc3NNZXRob2QoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgcmV0dXJuICJoZWxsbyAiICsgbmFtZTsKICAgICB9CkBAIC03NSw3ICs3NSw3IEBACiAgICAgcHVibGljIFN0cmluZyBidXNpbmVzc01ldGhvZDMoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgcmV0dXJuICJob3dkeSAiK25hbWU7CiAgICAgfQotICAgIAotICAgIAotICAgIAorCisKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvZWpiL015U2Vzc2lvbjFSZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9zdGFuZGFsb25lL2VqYi9NeVNlc3Npb24xUmVtb3RlLmphdmEKaW5kZXggNzk4ZDQwNi4uMGU5MWU1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvZWpiL015U2Vzc2lvbjFSZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vc3RhbmRhbG9uZS9lamIvTXlTZXNzaW9uMVJlbW90ZS5qYXZhCkBAIC0yMSw2ICsyMSw2IEBACiAgKiBUaGlzIGlzIHRoZSByZW1vdGUgaW50ZXJmYWNlIGZvciBNeVNlc3Npb24xIGVudGVycHJpc2UgYmVhbi4KICAqLwogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb24xUmVtb3RlIGV4dGVuZHMgRUpCT2JqZWN0LCBNeVNlc3Npb24xUmVtb3RlQnVzaW5lc3MgewotICAgIAotICAgIAorCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9zdGFuZGFsb25lL2VqYi9NeVNlc3Npb24xUmVtb3RlSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvZWpiL015U2Vzc2lvbjFSZW1vdGVIb21lLmphdmEKaW5kZXggN2ViYzhmMC4uN2MzMzAzZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvZWpiL015U2Vzc2lvbjFSZW1vdGVIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvZWpiL015U2Vzc2lvbjFSZW1vdGVIb21lLmphdmEKQEAgLTIzLDggKzIzLDggQEAKICAqIFRoaXMgaXMgdGhlIGhvbWUgaW50ZXJmYWNlIGZvciBNeVNlc3Npb24xIGVudGVycHJpc2UgYmVhbi4KICAqLwogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb24xUmVtb3RlSG9tZSBleHRlbmRzIEVKQkhvbWUgewotICAgIAorCiAgICAgTXlTZXNzaW9uMVJlbW90ZSBjcmVhdGUoKSAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwotICAgIAotICAgIAorCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3JlYWxtUGVyQXBwL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9yZWFsbVBlckFwcC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGExODM1ZDQuLmYwZjg5MWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3JlYWxtUGVyQXBwL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcmVhbG1QZXJBcHAvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CkBAIC0yNiw0ICsyNiw0IEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9InJwYUxvZ2luQmVhbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJycGFMb2dpbkJlYW4iLz4gICAgICAgIFx1MDAyMApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcmVhbG1QZXJBcHAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcmVhbG1QZXJBcHAvYnVpbGQueG1sCmluZGV4IDY2ZDYxNWEuLjI4NjgzMTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3JlYWxtUGVyQXBwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9yZWFsbVBlckFwcC9idWlsZC54bWwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICZjb21tb25SdW47CiAgICAmdGVzdFByb3BlcnRpZXM7CiAgICAmY29tbW9uU2VjdXJpdHk7Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsIHNldHVwLCBkZXBsb3kscnVuLCB1bmRlcGxveSwgdW5zZXR1cCIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtODEsNyArODEsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci08IS0tCTxwcm9wZXJ0eSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLypIb21lKi5jbGFzcywqKi8qQmVhbiouY2xhc3MsKiovKkRhdGEqLmNsYXNzLCouZGJzY2hlbWEiLz4KKzwhLS0gICAgPHByb3BlcnR5IG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovKkhvbWUqLmNsYXNzLCoqLypCZWFuKi5jbGFzcywqKi8qRGF0YSouY2xhc3MsKi5kYnNjaGVtYSIvPgogLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcmVhbG1QZXJBcHAvY2xpZW50L1JwYUNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcmVhbG1QZXJBcHAvY2xpZW50L1JwYUNsaWVudC5qYXZhCmluZGV4IDQzZDA3NzIuLjI1MmRiZDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3JlYWxtUGVyQXBwL2NsaWVudC9ScGFDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9yZWFsbVBlckFwcC9jbGllbnQvUnBhQ2xpZW50LmphdmEKQEAgLTM4LDMxICszOCwzMSBAQAogICAgICAgICBScGFDbGllbnQgY2xpZW50ID0gbmV3IFJwYUNsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBScGFDbGllbnQoU3RyaW5nW10gYXJncykgewogICAgICAgICAvL3N1cGVyKGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KCkgewotICAgICAgICAKLQlScGFSZW1vdGUgaHI9bnVsbDsKKworICAgIFJwYVJlbW90ZSBocj1udWxsOwogICAgICAgICBTdHJpbmcgcmVzPW51bGw7CiAgICAgICAgIENvbnRleHQgaWMgPSBudWxsOwogICAgICAgICBMb2dpbkNvbnRleHQgbGM9bnVsbDsKICAgICAgICAgUnBhSG9tZSBob21lPW51bGw7CiAgICAgICAgIFN0cmluZyB0ZXN0SWQgPSAiU2VjOjpSZWFsbSBwZXIgYXBwIjsKLSAgICAJdHJ5eworICAgICAgICB0cnl7CiAgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJTZWN1cml0eTo6UmVhbG0gcGVyIGFwcCIpOwotCSAgICBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgICAgICBqYXZhLmxhbmcuT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgicnBhTG9naW5CZWFuIik7Ci0JCQotCSAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKLQkJCi0JICAgIGhvbWUgPSAoUnBhSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3coCi0JCQkJCSAgIG9ianJlZiwgUnBhSG9tZS5jbGFzcyk7Ci0JICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7Ci0JCQkJCisKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7CisKKyAgICAgICAgaG9tZSA9IChScGFIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdygKKyAgICAgICAgICAgICAgICAgICAgICAgb2JqcmVmLCBScGFIb21lLmNsYXNzKTsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKKwogICAgICAgICAgICAgaHIgPSBob21lLmNyZWF0ZSgiTGl6SHVybGV5Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKIApAQCAtODgsMTEgKzg4LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlYWxtUGVyQXBwOlJwYUxvZ2luQmVhbiBUZXN0IEZhaWxlZCIpOwogICAgICAgICAgICAgU3lzdGVtLmV4aXQoLTEpOwotCX0gZmluYWxseSB7CisgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgCisKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3JlYWxtUGVyQXBwL3Nob3BwaW5nL1JwYUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3JlYWxtUGVyQXBwL3Nob3BwaW5nL1JwYUJlYW4uamF2YQppbmRleCBjNzM5NDZkLi4yNjNhOWJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9yZWFsbVBlckFwcC9zaG9wcGluZy9ScGFCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcmVhbG1QZXJBcHAvc2hvcHBpbmcvUnBhQmVhbi5qYXZhCkBAIC0zNiwyNiArMzYsMjYgQEAKICAqLwogCiBwdWJsaWMgY2xhc3MgUnBhQmVhbiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIHNob3BwZXIgPSAiYW5vbnltb3VzIjsKICAgICBwcml2YXRlIFN0cmluZyBwcmluY2lwYWwgPSAiaGFycHJlZXQiOwogICAgIHByaXZhdGUgaW50IHRvdGFsUHJpY2UgPSAwOwotICAgIAorCiAgICAgcHJpdmF0ZSBpbnQgdG90YWxJdGVtcyA9IDA7Ci0gICAgCisKICAgICBwcml2YXRlIFZlY3RvciBpdGVtczsKLSAgICAKKwogICAgIHByaXZhdGUgVmVjdG9yIGl0ZW1QcmljZTsKLSAgICAKKwogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2MgPSBudWxsOwotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgU2hvcHBpbmdFSkIgKi8KICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoU3RyaW5nIHNob3BwZXJOYW1lKSB7CiAgICAgICAgIHNob3BwZXIgPSBzaG9wcGVyTmFtZTsKICAgICAgICAgaXRlbXMgPSBuZXcgVmVjdG9yKCk7CiAgICAgICAgIGl0ZW1QcmljZSA9IG5ldyBWZWN0b3IoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhZGRJdGVtKGphdmEubGFuZy5TdHJpbmcgaXRlbSwgaW50IHByaWNlKSB0aHJvd3MgRUpCRXhjZXB0aW9uLAogICAgICAgICBSZW1vdGVFeGNlcHRpb257CiAgICAgICAgIGNoZWNrQ2FsbGVyUHJpbmNpcGFsKCk7CkBAIC02NywyNiArNjcsMjYgQEAKICAgICAgICAgICAgICsgaXRlbSArIiBmb3IgcHJpY2UgPSIrIHByaWNlICsiIC5Ub3RhbCBJdGVtcyA9ICIrdG90YWxJdGVtcyArCiAgICAgICAgICAgICAiIC5Ub3RhbFByaWNlID0gIiArIHRvdGFsUHJpY2UpOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBkZWxldGVJdGVtKGphdmEubGFuZy5TdHJpbmcgaXRlbSkgdGhyb3dzIEVKQkV4Y2VwdGlvbiwgCisKKyAgICBwdWJsaWMgdm9pZCBkZWxldGVJdGVtKGphdmEubGFuZy5TdHJpbmcgaXRlbSkgdGhyb3dzIEVKQkV4Y2VwdGlvbiwKICAgICAgICAgUmVtb3RlRXhjZXB0aW9uewogICAgICAgICBjaGVja0NhbGxlclByaW5jaXBhbCgpOwogICAgICAgICBpbnQgaW5kZXggPSBpdGVtcy5pbmRleE9mKGl0ZW0pOwogICAgICAgICBpdGVtcy5yZW1vdmUoaXRlbSk7CiAgICAgICAgIEludGVnZXIgcHJpY2UgPSAoSW50ZWdlcikgaXRlbVByaWNlLmdldChpbmRleCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2hvcHBpbmcgQ2FydDogUmVtb3ZpbmcgaXRlbSAiKyBpdGVtICsiIEBwcmljZSAiKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTaG9wcGluZyBDYXJ0OiBSZW1vdmluZyBpdGVtICIrIGl0ZW0gKyIgQHByaWNlICIrCiAgICAgICAgICAgICBwcmljZS5pbnRWYWx1ZSgpKTsKICAgICAgICAgdG90YWxQcmljZSAtPSBwcmljZS5zaG9ydFZhbHVlKCk7Ci0gICAgICAgIGl0ZW1QcmljZS5yZW1vdmUoaW5kZXgpOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGl0ZW1QcmljZS5yZW1vdmUoaW5kZXgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBTaG9wcGluZyBDYXJ0OiBTaG9wcGVyICIrIHNob3BwZXIgKyIgIC5Ub3RhbCBJdGVtcyA9ICIrdG90YWxJdGVtcyArCiAgICAgICAgICAgICAiIC5Ub3RhbFByaWNlID0gIiArIHRvdGFsUHJpY2UpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBkb3VibGUgZ2V0VG90YWxDb3N0KCkgdGhyb3dzIEVKQkV4Y2VwdGlvbnsKICAgICAgICAgY2hlY2tDYWxsZXJQcmluY2lwYWwoKTsKICAgICAgICAgcmV0dXJuIHRvdGFsUHJpY2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZ1tdIGdldEl0ZW1zKCkgdGhyb3dzIEVKQkV4Y2VwdGlvbnsKICAgICAgICAgY2hlY2tDYWxsZXJQcmluY2lwYWwoKTsKIApAQCAtOTgsMjYgKzk4LDI2IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGl0ZW1OYW1lczsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBScGEgZWpiQWN0aXZhdGUiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBScGEgZWpiUGFzc2l2YXRlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSAgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFJwYSBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0IHNlc3Npb25Db250ZXh0KSB7CiAgICAgICAgIHNjID0gc2Vzc2lvbkNvbnRleHQ7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGNoZWNrQ2FsbGVyUHJpbmNpcGFsKCkgdGhyb3dzIEVKQkV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGVyIFByaW5jaWFsID0gIiArIHNjLmdldENhbGxlclByaW5jaXBhbCgpICsKICAgICAgICAgICAgICAgICAiIGNvbXBhcmluZyBhZ2FpbnN0ICIgKyBwcmluY2lwYWwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcmVhbG1QZXJBcHAvc2hvcHBpbmcvUnBhSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcmVhbG1QZXJBcHAvc2hvcHBpbmcvUnBhSG9tZS5qYXZhCmluZGV4IGQ0MjYyZDAuLmM5OTMwOTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3JlYWxtUGVyQXBwL3Nob3BwaW5nL1JwYUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9yZWFsbVBlckFwcC9zaG9wcGluZy9ScGFIb21lLmphdmEKQEAgLTI4LDggKzI4LDggQEAKICAqIEBhdXRob3IgIEhhcnByZWV0IFNpbmdoCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgUnBhSG9tZSBleHRlbmRzIEVKQkhvbWV7Ci0gICAgCi0gICAgcHVibGljIFJwYVJlbW90ZSBjcmVhdGUoamF2YS5sYW5nLlN0cmluZyBzaG9wcGVyTmFtZSkgCisKKyAgICBwdWJsaWMgUnBhUmVtb3RlIGNyZWF0ZShqYXZhLmxhbmcuU3RyaW5nIHNob3BwZXJOYW1lKQogICAgICAgICB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3JlYWxtUGVyQXBwL3Nob3BwaW5nL1JwYVJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcmVhbG1QZXJBcHAvc2hvcHBpbmcvUnBhUmVtb3RlLmphdmEKaW5kZXggZmI4YTc3My4uNDNhMzk5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcmVhbG1QZXJBcHAvc2hvcHBpbmcvUnBhUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcmVhbG1QZXJBcHAvc2hvcHBpbmcvUnBhUmVtb3RlLmphdmEKQEAgLTIzLDE3ICsyMywxNyBAQAogcGFja2FnZSBzaG9wcGluZzsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJPYmplY3Q7CiAvKioKLSAqIFNob3BwaW5nIENhcnQgU3RhdGVmdWwgU2Vzc2lvbiBCZWFuLiBKdXN0IHRlc3RzIC1EajJlZWxvZ2luLm5hbWUgCisgKiBTaG9wcGluZyBDYXJ0IFN0YXRlZnVsIFNlc3Npb24gQmVhbi4gSnVzdCB0ZXN0cyAtRGoyZWVsb2dpbi5uYW1lCiAgKiAgLURqMmVlbG9naW4ucGFzc3dvcmQgc3lzdGVtIHByb3BlcnRpZXMuCiAgKiBAYXV0aG9yICBoc2luZ2gKICAqLwogcHVibGljIGludGVyZmFjZSBScGFSZW1vdGUgZXh0ZW5kcyBFSkJPYmplY3QgewotICAgICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBhZGRJdGVtKGphdmEubGFuZy5TdHJpbmcgaXRlbSwgaW50IHByaWNlKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVsZXRlSXRlbShqYXZhLmxhbmcuU3RyaW5nIGl0ZW0pIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgICAgCisKICAgICBwdWJsaWMgZG91YmxlIGdldFRvdGFsQ29zdCgpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIGdldEl0ZW1zKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3JlcG9ydC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9yZXBvcnQueG1sCmluZGV4IDY1YTMyYWUuLjA5NGUzNjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3JlcG9ydC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcmVwb3J0LnhtbApAQCAtMjMsNyArMjMsNyBAQAogPHRhcmdldCBuYW1lPSJyZXBvcnQiPgogPGVjaG8gbWVzc2FnZT0iQ29tcGFyaW5nIHJlc3VsdHMgd2l0aCBleHBlY3RlZCByZXN1bHRzIi8+CiAKLSAKKwogICAgIDx4c2x0IHN0eWxlPSIke3N0eWxlc2hlZXR9IgogICAgICAgICAgICAgaW49IiR7eG1sZmlsZX0iIG91dD0iJHtodG1sZmlsZX0iCiAgICAgICAgICAgICBiYXNlZGlyPSIuIiBkZXN0ZGlyPSIuIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcmVzdWx0Q291bnQuc2ggYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9yZXN1bHRDb3VudC5zaAppbmRleCBmYWQyZDNjLi5hNTUwYzUxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9yZXN1bHRDb3VudC5zaAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9yZXN1bHRDb3VudC5zaApAQCAtMjQsMTEgKzI0LDExIEBACiBGQUlMRUQ9MAogZm9yIGkgaW4gJEZJTEVTCiBkbwotCWVjaG8gImlucHV0IGZpbGU9JGkiCi0JUD1gZ3JlcCAiXCJwYXNzXCIiICRpIHwgIHdjIC1sYAotCUY9YGdyZXAgIlwiZmFpbFwiIiAkaSB8ICB3YyAtbGAKLQlQQVNTRUQ9YGV4cHIgJFBBU1NFRCArICRQYAotCUZBSUxFRD1gZXhwciAkRkFJTEVEICsgJEZgCisgICAgZWNobyAiaW5wdXQgZmlsZT0kaSIKKyAgICBQPWBncmVwICJcInBhc3NcIiIgJGkgfCAgd2MgLWxgCisgICAgRj1gZ3JlcCAiXCJmYWlsXCIiICRpIHwgIHdjIC1sYAorICAgIFBBU1NFRD1gZXhwciAkUEFTU0VEICsgJFBgCisgICAgRkFJTEVEPWBleHByICRGQUlMRUQgKyAkRmAKIGRvbmUKIFRPVEFMX1JVTj1gZXhwciAkUEFTU0VEICsgJEZBSUxFRCBgCiBETlI9YGV4cHIgJFRPVEFMIC0gJFRPVEFMX1JVTiBgCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9ydW5fdGVzdC5zaCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3J1bl90ZXN0LnNoCmluZGV4IGVjMWQzOTguLmUwOWZmYmQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3J1bl90ZXN0LnNoCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3J1bl90ZXN0LnNoCkBAIC0xNywxMCArMTcsMTAgQEAKIAogdGVzdF9ydW4oKXsKIAotCSNjcCAtZiAke0FQU19IT01FfS9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwL29wZW5kcy9YNTAwU2lnbmVyLmphciAke09QRU5EU19IT01FfS9saWIKKyAgICAjY3AgLWYgJHtBUFNfSE9NRX0vZGV2dGVzdHMvc2VjdXJpdHkvbGRhcC9vcGVuZHMvWDUwMFNpZ25lci5qYXIgJHtPUEVORFNfSE9NRX0vbGliCiAKLQkjIENvbmZpZ3VyZSBhbmQgc3RhcnQgT3BlbkRTIHVzaW5nIHRoZSBkZWZhdWx0IHBvcnRzCi0JJHtPUEVORFNfSE9NRX0vc2V0dXAgXAorICAgICMgQ29uZmlndXJlIGFuZCBzdGFydCBPcGVuRFMgdXNpbmcgdGhlIGRlZmF1bHQgcG9ydHMKKyAgICAke09QRU5EU19IT01FfS9zZXR1cCBcCiAgICAgLWkgXAogICAgIC12IFwKICAgICAtbiBcCkBAIC0zNCwzNyArMzQsMzcgQEAKICAgICAtVyBjaGFuZ2VpdCBcCiAgICAgLU4gczFhcwogCi0JJHtTMUFTX0hPTUV9L2Jpbi9hc2FkbWluIHN0YXJ0LWRhdGFiYXNlCi0JJHtTMUFTX0hPTUV9L2Jpbi9hc2FkbWluIHN0YXJ0LWRvbWFpbgotCWNkICR7QVBTX0hPTUV9L2RldnRlc3RzL3NlY3VyaXR5CisgICAgJHtTMUFTX0hPTUV9L2Jpbi9hc2FkbWluIHN0YXJ0LWRhdGFiYXNlCisgICAgJHtTMUFTX0hPTUV9L2Jpbi9hc2FkbWluIHN0YXJ0LWRvbWFpbgorICAgIGNkICR7QVBTX0hPTUV9L2RldnRlc3RzL3NlY3VyaXR5CiAKLQlhbnQgJHtUQVJHRVR9IHwgdGVlICR7VEVTVF9SVU5fTE9HfQorICAgIGFudCAke1RBUkdFVH0gfCB0ZWUgJHtURVNUX1JVTl9MT0d9CiAKLQkke1MxQVNfSE9NRX0vYmluL2FzYWRtaW4gc3RvcC1kb21haW4KLQkke1MxQVNfSE9NRX0vYmluL2FzYWRtaW4gc3RvcC1kYXRhYmFzZQotCSR7T1BFTkRTX0hPTUV9L2Jpbi9zdG9wLWRzIFwKKyAgICAke1MxQVNfSE9NRX0vYmluL2FzYWRtaW4gc3RvcC1kb21haW4KKyAgICAke1MxQVNfSE9NRX0vYmluL2FzYWRtaW4gc3RvcC1kYXRhYmFzZQorICAgICR7T1BFTkRTX0hPTUV9L2Jpbi9zdG9wLWRzIFwKICAgICAtcCA0NDQ0IFwKICAgICAtRCAiY249RGlyZWN0b3J5IE1hbmFnZXIiIFwKICAgICAtdyBkbWFuYWdlciBcCiAgICAgLVAgJHtPUEVORFNfSE9NRX0vY29uZmlnL2FkbWluLXRydXN0c3RvcmUgXAogICAgIC1VICR7T1BFTkRTX0hPTUV9L2NvbmZpZy9hZG1pbi1rZXlzdG9yZS5waW4KIAotCSNlZ3JlcCAnRkFJTEVEPSAqMCcgJHtURVNUX1JVTl9MT0d9Ci0JI2VncmVwICdESUQgTk9UIFJVTj0gKjAnICR7VEVTVF9SVU5fTE9HfQotCWNkIC0KKyAgICAjZWdyZXAgJ0ZBSUxFRD0gKjAnICR7VEVTVF9SVU5fTE9HfQorICAgICNlZ3JlcCAnRElEIE5PVCBSVU49ICowJyAke1RFU1RfUlVOX0xPR30KKyAgICBjZCAtCiB9CiAKIGdldF90ZXN0X3RhcmdldCgpewotCWNhc2UgJDEgaW4KLQkJc2VjdXJpdHlfYWxsICkKLQkJCVRBUkdFVD1hbGwKLQkJCWV4cG9ydCBUQVJHRVQ7OwotCWVzYWMKKyAgICBjYXNlICQxIGluCisgICAgICAgIHNlY3VyaXR5X2FsbCApCisgICAgICAgICAgICBUQVJHRVQ9YWxsCisgICAgICAgICAgICBleHBvcnQgVEFSR0VUOzsKKyAgICBlc2FjCiB9CiAKIG1lcmdlX3Jlc3VsdF9maWxlcygpewotCWNhdCAke0FQU19IT01FfS90ZXN0X3Jlc3VsdHNWYWxpZC54bWwgJHtBUFNfSE9NRX0vc2VjdXJpdHktZ3Rlc3QtcmVzdWx0cy54bWwgPiAke0FQU19IT01FfS90ZW1wLnhtbAotCW12ICR7QVBTX0hPTUV9L3RlbXAueG1sICR7QVBTX0hPTUV9L3Rlc3RfcmVzdWx0c1ZhbGlkLnhtbAorICAgIGNhdCAke0FQU19IT01FfS90ZXN0X3Jlc3VsdHNWYWxpZC54bWwgJHtBUFNfSE9NRX0vc2VjdXJpdHktZ3Rlc3QtcmVzdWx0cy54bWwgPiAke0FQU19IT01FfS90ZW1wLnhtbAorICAgIG12ICR7QVBTX0hPTUV9L3RlbXAueG1sICR7QVBTX0hPTUV9L3Rlc3RfcmVzdWx0c1ZhbGlkLnhtbAogfQogCiBydW5fdGVzdF9pZCgpewpAQCAtNzMsMTkgKzczLDE5IEBACiAgIHVuemlwIC1vIG9wZW5kai00LjEuMTAuemlwCiAgIGV4cG9ydCBPUEVORFNfSE9NRT0ke1BXRH0vb3BlbmRqCiAKLQl1bnppcF90ZXN0X3Jlc291cmNlcyAke1dPUktTUEFDRX0vYnVuZGxlcy9nbGFzc2Zpc2guemlwCi0JY2QgYGRpcm5hbWUgJHswfWAKLQl0ZXN0X2luaXQKLQlnZXRfdGVzdF90YXJnZXQgJHsxfQotCXRlc3RfcnVuCi0JbWVyZ2VfcmVzdWx0X2ZpbGVzCi0JY2hlY2tfc3VjY2Vzc2Z1bF9ydW4KKyAgICB1bnppcF90ZXN0X3Jlc291cmNlcyAke1dPUktTUEFDRX0vYnVuZGxlcy9nbGFzc2Zpc2guemlwCisgICAgY2QgYGRpcm5hbWUgJHswfWAKKyAgICB0ZXN0X2luaXQKKyAgICBnZXRfdGVzdF90YXJnZXQgJHsxfQorICAgIHRlc3RfcnVuCisgICAgbWVyZ2VfcmVzdWx0X2ZpbGVzCisgICAgY2hlY2tfc3VjY2Vzc2Z1bF9ydW4KICAgZ2VuZXJhdGVfanVuaXRfcmVwb3J0ICR7MX0KICAgY2hhbmdlX2p1bml0X3JlcG9ydF9jbGFzc19uYW1lcwogfQogCiBsaXN0X3Rlc3RfaWRzKCl7Ci0JZWNobyBzZWN1cml0eV9hbGwKKyAgICBlY2hvIHNlY3VyaXR5X2FsbAogfQogCiBPUFQ9JHsxfQpAQCAtOTMsOSArOTMsOSBAQAogc291cmNlIGBkaXJuYW1lICR7MH1gLy4uLy4uLy4uL2NvbW1vbl90ZXN0LnNoCiAKIGNhc2UgJHtPUFR9IGluCi0JbGlzdF90ZXN0X2lkcyApCi0JCWxpc3RfdGVzdF9pZHM7OwotCXJ1bl90ZXN0X2lkICkKLQkJdHJhcCAiY29weV90ZXN0X2FydGlmYWN0cyAke1RFU1RfSUR9IiBFWElUCi0JCXJ1bl90ZXN0X2lkICR7VEVTVF9JRH0gOzsKKyAgICBsaXN0X3Rlc3RfaWRzICkKKyAgICAgICAgbGlzdF90ZXN0X2lkczs7CisgICAgcnVuX3Rlc3RfaWQgKQorICAgICAgICB0cmFwICJjb3B5X3Rlc3RfYXJ0aWZhY3RzICR7VEVTVF9JRH0iIEVYSVQKKyAgICAgICAgcnVuX3Rlc3RfaWQgJHtURVNUX0lEfSA7OwogZXNhYwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2FtZUVqYk5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NhbWVFamJOYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOWNjZmMzMi4uMjdhYjJmZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2FtZUVqYk5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zYW1lRWpiTmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eS1zYW1lRWpiTmFtZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NhbWVFamJOYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NhbWVFamJOYW1lL2J1aWxkLnhtbAppbmRleCBkYTY0NjczLi4zMTY1ZTFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zYW1lRWpiTmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2FtZUVqYk5hbWUvYnVpbGQueG1sCkBAIC02NSw3ICs2NSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+IAorICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgpAQCAtODIsMjMgKzgyLDIzIEBACiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIKICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgICB2YWx1ZT0iY29tL3N1bi8qKi9jbGllbnQvKi5jbGFzcyxjb20vc3VuLyoqL2VqYi9IZWxsby5jbGFzcyxjb20vc3VuLyoqL2VqYjIvSGVsbG8uY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0gICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAorICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotCSAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiBpbmNsdWRlcz0ibGliL3JlcG9ydGVyLmphciIvPgotICAgICAgICA8L2phcj4gICAKKyAgICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2FtZUVqYk5hbWUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2FtZUVqYk5hbWUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGEwYzJlNDMuLjJkYzI1NDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NhbWVFamJOYW1lL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zYW1lRWpiTmFtZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMzLDI5ICszMywyOSBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgZGVzY3JpcHRpb24gPSB0ZXN0U3VpdGUgKyAiIGVqYjE6IHJvbGVzQWxsb3dlZDEiOwogICAgICAgICAgICAgaGVsbG8xLnJvbGVzQWxsb3dlZDEoIlN1biIpOwotICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7ICAKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOwogCiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGVzdFN1aXRlICsgIiBlamIxOiByb2xlc0FsbG93ZWQyIjsKICAgICAgICAgICAgICAgICBoZWxsbzEucm9sZXNBbGxvd2VkMigiU3VuIik7Ci0gICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7ICAKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4cGVjdGVkIGZhaWx1cmU6ICIgKyBlKTsKLSAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsgIAorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGVzdFN1aXRlICsgIiBlamIyOiByb2xlc0FsbG93ZWQxIjsKICAgICAgICAgICAgICAgICBoZWxsbzIucm9sZXNBbGxvd2VkMSgiSmF2YSIpOwotICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOyAgCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeHBlY3RlZCBmYWlsdXJlOiAiICsgZSk7Ci0gICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7ICAKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZGVzY3JpcHRpb24gPSB0ZXN0U3VpdGUgKyAiIGVqYjI6IHJvbGVzQWxsb3dlZDIiOwogICAgICAgICAgICAgaGVsbG8yLnJvbGVzQWxsb3dlZDIoIkphdmEiKTsKLSAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOyAgCisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zYW1lRWpiTmFtZS9lamIvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NhbWVFamJOYW1lL2VqYi9IZWxsby5qYXZhCmluZGV4IDFlYmFlMzYuLmIzYzliNjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NhbWVFamJOYW1lL2VqYi9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NhbWVFamJOYW1lL2VqYi9IZWxsby5qYXZhCkBAIC0xOCw2ICsxOCw2IEBACiAKIHB1YmxpYyBpbnRlcmZhY2UgSGVsbG8gewogICAgIHB1YmxpYyBTdHJpbmcgcm9sZXNBbGxvd2VkMShTdHJpbmcgd2hvKTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgcm9sZXNBbGxvd2VkMihTdHJpbmcgd2hvKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NhbWVFamJOYW1lL2VqYi9IZWxsb0VqYi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2FtZUVqYk5hbWUvZWpiL0hlbGxvRWpiLmphdmEKaW5kZXggYTQ3ZTRmYy4uM2QwMzQ3ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2FtZUVqYk5hbWUvZWpiL0hlbGxvRWpiLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2FtZUVqYk5hbWUvZWpiL0hlbGxvRWpiLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIHJvbGVzQWxsb3dlZDEoU3RyaW5nIHdobykgewogICAgICAgICByZXR1cm4gIkhlbGxvIHJvbGVzQWxsb3dlZDEsICIgKyB3aG87CiAgICAgfQotICAgIAorCiAgICAgQFJvbGVzQWxsb3dlZCh2YWx1ZT17ImVqYnVzZXIifSkKICAgICBwdWJsaWMgU3RyaW5nIHJvbGVzQWxsb3dlZDIoU3RyaW5nIHdobykgewogICAgICAgICByZXR1cm4gIkhlbGxvIHJvbGVzQWxsb3dlZDIsICIgKyB3aG87CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zYW1lRWpiTmFtZS9lamIyL0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zYW1lRWpiTmFtZS9lamIyL0hlbGxvLmphdmEKaW5kZXggMjAyODRmZS4uMzRjODBmYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2FtZUVqYk5hbWUvZWpiMi9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NhbWVFamJOYW1lL2VqYjIvSGVsbG8uamF2YQpAQCAtMTgsNiArMTgsNiBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEhlbGxvIHsKICAgICBwdWJsaWMgU3RyaW5nIHJvbGVzQWxsb3dlZDEoU3RyaW5nIHdobyk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHJvbGVzQWxsb3dlZDIoU3RyaW5nIHdobyk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zYW1lRWpiTmFtZS9lamIyL0hlbGxvRWpiLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zYW1lRWpiTmFtZS9lamIyL0hlbGxvRWpiLmphdmEKaW5kZXggNWE1YzQyZS4uMjk0OTM1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2FtZUVqYk5hbWUvZWpiMi9IZWxsb0VqYi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NhbWVFamJOYW1lL2VqYjIvSGVsbG9FamIuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgcm9sZXNBbGxvd2VkMShTdHJpbmcgd2hvKSB7CiAgICAgICAgIHJldHVybiAiSGVsbG8yIHJvbGVzQWxsb3dlZDEsICIgKyB3aG87CiAgICAgfQotICAgIAorCiAgICAgQFJvbGVzQWxsb3dlZCh2YWx1ZT17ImphdmFlZSJ9KQogICAgIHB1YmxpYyBTdHJpbmcgcm9sZXNBbGxvd2VkMihTdHJpbmcgd2hvKSB7CiAgICAgICAgIHJldHVybiAiSGVsbG8yIHJvbGVzQWxsb3dlZDIsICIgKyB3aG87CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zZnVsL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zZnVsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDhkMTAzNC4uYzhmOTU4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2Z1bC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NmdWwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CkBAIC0yNiw0ICsyNiw0IEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9InN0YXRlZnVsTG9naW5CZWFuIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9InN0YXRlZnVsTG9naW5CZWFuIi8+ICAgICAgICBcdTAwMjAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NmdWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2Z1bC9idWlsZC54bWwKaW5kZXggMjk5ZGI2NS4uYTdkZDliMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2Z1bC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2Z1bC9idWlsZC54bWwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICZjb21tb25SdW47CiAgICAmdGVzdFByb3BlcnRpZXM7CiAgICAmY29tbW9uU2VjdXJpdHk7Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsIGNyZWF0ZS11c2VyLCBkZXBsb3ksIHJ1biwgdW5kZXBsb3ksIGRlbGV0ZS11c2VyIi8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC01MSw3ICs1MSw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLTwhLS0JPHByb3BlcnR5IG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovKkhvbWUqLmNsYXNzLCoqLypCZWFuKi5jbGFzcywqKi8qRGF0YSouY2xhc3MsKi5kYnNjaGVtYSIvPgorPCEtLSAgICA8cHJvcGVydHkgbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi8qSG9tZSouY2xhc3MsKiovKkJlYW4qLmNsYXNzLCoqLypEYXRhKi5jbGFzcywqLmRic2NoZW1hIi8+CiAtLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zZnVsL2NsaWVudC9TaG9wcGluZ0NhcnRDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NmdWwvY2xpZW50L1Nob3BwaW5nQ2FydENsaWVudC5qYXZhCmluZGV4IDhhYjE4ZDQuLjkwNWU5ZmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NmdWwvY2xpZW50L1Nob3BwaW5nQ2FydENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NmdWwvY2xpZW50L1Nob3BwaW5nQ2FydENsaWVudC5qYXZhCkBAIC0zOCwzMSArMzgsMzEgQEAKICAgICAgICAgU2hvcHBpbmdDYXJ0Q2xpZW50IGNsaWVudCA9IG5ldyBTaG9wcGluZ0NhcnRDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2hvcHBpbmdDYXJ0Q2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgLy9zdXBlcihhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdCgpIHsKLSAgICAgICAgCi0JU2hvcHBpbmdDYXJ0UmVtb3RlIGhyPW51bGw7CisKKyAgICBTaG9wcGluZ0NhcnRSZW1vdGUgaHI9bnVsbDsKICAgICAgICAgU3RyaW5nIHJlcz1udWxsOwogICAgICAgICBDb250ZXh0IGljID0gbnVsbDsKICAgICAgICAgTG9naW5Db250ZXh0IGxjPW51bGw7CiAgICAgICAgIFNob3BwaW5nQ2FydEhvbWUgaG9tZT1udWxsOwogICAgICAgICBTdHJpbmcgdGVzdElkID0gIlNlYzo6U3RhdGVmdWwgTG9naW4gQmVhbiI7Ci0gICAgCXRyeSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJTZWN1cml0eTo6U3RhdGVmdWxlIExvZ2luIEJlYW4iKTsKLQkgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lciAKKyAgICAgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lcgogICAgICAgICAgICAgamF2YS5sYW5nLk9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoInN0YXRlZnVsTG9naW5CZWFuIik7Ci0JCQotCSAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKLQkJCi0JICAgIGhvbWUgPSAoU2hvcHBpbmdDYXJ0SG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3coCi0JCQkJCSAgIG9ianJlZiwgU2hvcHBpbmdDYXJ0SG9tZS5jbGFzcyk7Ci0JICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7Ci0JCQkJCisKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7CisKKyAgICAgICAgaG9tZSA9IChTaG9wcGluZ0NhcnRIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdygKKyAgICAgICAgICAgICAgICAgICAgICAgb2JqcmVmLCBTaG9wcGluZ0NhcnRIb21lLmNsYXNzKTsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKKwogICAgICAgICAgICAgaHIgPSBob21lLmNyZWF0ZSgiTGl6SHVybGV5Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKIApAQCAtMTAyLDE1ICsxMDIsMTUgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2hvcHBpbmcgQ2FydDpTdGF0ZWZ1bExvZ2luQmVhbiBUZXN0IEZhaWxlZCIpOwogICAgICAgICAgICAgU3lzdGVtLmV4aXQoLTEpOwotCX0gZmluYWxseSB7CisgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgICAgIH0KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTaG9wcGluZ0NhcnQ6U3RhdGVmdWxMb2dpbkJlYW4gVGVzdCBQYXNzZWQiKTsKICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgCisKICAgICB9CiAKLSAgICAKKwogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIGhlbGxvU3RyID0gIkhlbGxvIFNob3BwaW5nQ2FydCEhISI7CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NmdWwvc2hvcHBpbmcvU2hvcHBpbmdDYXJ0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2Z1bC9zaG9wcGluZy9TaG9wcGluZ0NhcnRCZWFuLmphdmEKaW5kZXggMjE1ZDMyNC4uYzdiOWI5NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2Z1bC9zaG9wcGluZy9TaG9wcGluZ0NhcnRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2Z1bC9zaG9wcGluZy9TaG9wcGluZ0NhcnRCZWFuLmphdmEKQEAgLTM1LDI2ICszNSwyNiBAQAogICovCiAKIHB1YmxpYyBjbGFzcyBTaG9wcGluZ0NhcnRCZWFuIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgc2hvcHBlciA9ICJhbm9ueW1vdXMiOwogICAgIHByaXZhdGUgU3RyaW5nIHByaW5jaXBhbCA9ICJoYXJwcmVldCI7CiAgICAgcHJpdmF0ZSBpbnQgdG90YWxQcmljZSA9IDA7Ci0gICAgCisKICAgICBwcml2YXRlIGludCB0b3RhbEl0ZW1zID0gMDsKLSAgICAKKwogICAgIHByaXZhdGUgVmVjdG9yIGl0ZW1zOwotICAgIAorCiAgICAgcHJpdmF0ZSBWZWN0b3IgaXRlbVByaWNlOwogCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYyA9IG51bGw7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBTaG9wcGluZ0VKQiAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZShTdHJpbmcgc2hvcHBlck5hbWUpIHsKICAgICAgICAgc2hvcHBlciA9IHNob3BwZXJOYW1lOwogICAgICAgICBpdGVtcyA9IG5ldyBWZWN0b3IoKTsKICAgICAgICAgaXRlbVByaWNlID0gbmV3IFZlY3RvcigpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFkZEl0ZW0oamF2YS5sYW5nLlN0cmluZyBpdGVtLCBpbnQgcHJpY2UpIHRocm93cyBFSkJFeGNlcHRpb24sCiAgICAgICAgIFJlbW90ZUV4Y2VwdGlvbnsKICAgICAgICAgaXRlbXMuYWRkKGl0ZW0pOwpAQCAtNjQsMzAgKzY0LDMwIEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFNob3BwaW5nIENhcnQ6IFNob3BwZXIgIisgc2hvcHBlciArIiBoYXMgYm91Z2h0ICIKICAgICAgICAgICAgICsgaXRlbSArIiBmb3IgcHJpY2UgPSIrIHByaWNlICsiIC5Ub3RhbCBJdGVtcyA9ICIrdG90YWxJdGVtcyArCiAgICAgICAgICAgICAiIC5Ub3RhbFByaWNlID0gIiArIHRvdGFsUHJpY2UpOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxlciBQcmluY2lwYWwgPSAiK3NjLmdldENhbGxlclByaW5jaXBhbCgpKTsKICAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgZGVsZXRlSXRlbShqYXZhLmxhbmcuU3RyaW5nIGl0ZW0pIHRocm93cyBFSkJFeGNlcHRpb24sIAorCisgICAgcHVibGljIHZvaWQgZGVsZXRlSXRlbShqYXZhLmxhbmcuU3RyaW5nIGl0ZW0pIHRocm93cyBFSkJFeGNlcHRpb24sCiAgICAgICAgIFJlbW90ZUV4Y2VwdGlvbnsKICAgICAgICAgaW50IGluZGV4ID0gaXRlbXMuaW5kZXhPZihpdGVtKTsKICAgICAgICAgaXRlbXMucmVtb3ZlKGl0ZW0pOwogICAgICAgICBJbnRlZ2VyIHByaWNlID0gKEludGVnZXIpIGl0ZW1QcmljZS5nZXQoaW5kZXgpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNob3BwaW5nIENhcnQ6IFJlbW92aW5nIGl0ZW0gIisgaXRlbSArIiBAcHJpY2UgIisgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2hvcHBpbmcgQ2FydDogUmVtb3ZpbmcgaXRlbSAiKyBpdGVtICsiIEBwcmljZSAiKwogICAgICAgICAgICAgcHJpY2UuaW50VmFsdWUoKSk7CiAgICAgICAgIHRvdGFsUHJpY2UgLT0gcHJpY2Uuc2hvcnRWYWx1ZSgpOwotICAgICAgICBpdGVtUHJpY2UucmVtb3ZlKGluZGV4KTsgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBpdGVtUHJpY2UucmVtb3ZlKGluZGV4KTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgU2hvcHBpbmcgQ2FydDogU2hvcHBlciAiKyBzaG9wcGVyICsiICAuVG90YWwgSXRlbXMgPSAiK3RvdGFsSXRlbXMgKwogICAgICAgICAgICAgIiAuVG90YWxQcmljZSA9ICIgKyB0b3RhbFByaWNlKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsZXIgUHJpbmNpcGFsID0gIitzYy5nZXRDYWxsZXJQcmluY2lwYWwoKSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGRvdWJsZSBnZXRUb3RhbENvc3QoKSB0aHJvd3MgRUpCRXhjZXB0aW9uewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxlciBQcmluY2lhbCA9ICIrc2MuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkpOwogCiAgICAgICAgIHJldHVybiB0b3RhbFByaWNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRJdGVtcygpIHRocm93cyBFSkJFeGNlcHRpb257CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGVyIFByaW5jaXBhbCA9ICIrc2MuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkpOwogCkBAIC0xMDAsMjcgKzEwMCwyNyBAQAogICAgICAgICByZXR1cm4gaXRlbU5hbWVzOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHNhdmVBc1F1b3RlKCkgeyAKKyAgICBwdWJsaWMgdm9pZCBzYXZlQXNRdW90ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsZXIgUHJpbmNpcGFsID0gIitzYy5nZXRDYWxsZXJQcmluY2lwYWwoKSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2hvcHBpbmdDYXJ0IGVqYkFjdGl2YXRlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2hvcHBpbmdDYXJ0IGVqYlBhc3NpdmF0ZSIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaG9wcGluZ0NhcnQgZWpiUmVtb3ZlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dCBzZXNzaW9uQ29udGV4dCkgewogICAgICAgICBzYyA9IHNlc3Npb25Db250ZXh0OwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2Z1bC9zaG9wcGluZy9TaG9wcGluZ0NhcnRIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zZnVsL3Nob3BwaW5nL1Nob3BwaW5nQ2FydEhvbWUuamF2YQppbmRleCA5ZDQ0YzgyLi5hZmJlNDllIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zZnVsL3Nob3BwaW5nL1Nob3BwaW5nQ2FydEhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zZnVsL3Nob3BwaW5nL1Nob3BwaW5nQ2FydEhvbWUuamF2YQpAQCAtMjgsOCArMjgsOCBAQAogICogQGF1dGhvciAgaHNpbmdoCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgU2hvcHBpbmdDYXJ0SG9tZSBleHRlbmRzIEVKQkhvbWV7Ci0gICAgCi0gICAgcHVibGljIFNob3BwaW5nQ2FydFJlbW90ZSBjcmVhdGUoamF2YS5sYW5nLlN0cmluZyBzaG9wcGVyTmFtZSkgCisKKyAgICBwdWJsaWMgU2hvcHBpbmdDYXJ0UmVtb3RlIGNyZWF0ZShqYXZhLmxhbmcuU3RyaW5nIHNob3BwZXJOYW1lKQogICAgICAgICB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NmdWwvc2hvcHBpbmcvU2hvcHBpbmdDYXJ0UmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zZnVsL3Nob3BwaW5nL1Nob3BwaW5nQ2FydFJlbW90ZS5qYXZhCmluZGV4IGJiMzI0ZDEuLmQ3ZDVlMzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NmdWwvc2hvcHBpbmcvU2hvcHBpbmdDYXJ0UmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2Z1bC9zaG9wcGluZy9TaG9wcGluZ0NhcnRSZW1vdGUuamF2YQpAQCAtMjMsMTggKzIzLDE4IEBACiBwYWNrYWdlIHNob3BwaW5nOwogaW1wb3J0IGpha2FydGEuZWpiLkVKQk9iamVjdDsKIC8qKgotICogU2hvcHBpbmcgQ2FydCBTdGF0ZWZ1bCBTZXNzaW9uIEJlYW4uIEp1c3QgdGVzdHMgLURqMmVlbG9naW4ubmFtZSAKKyAqIFNob3BwaW5nIENhcnQgU3RhdGVmdWwgU2Vzc2lvbiBCZWFuLiBKdXN0IHRlc3RzIC1EajJlZWxvZ2luLm5hbWUKICAqICAtRGoyZWVsb2dpbi5wYXNzd29yZCBzeXN0ZW0gcHJvcGVydGllcy4KICAqIEBhdXRob3IgIGhzaW5naAogICovCiBwdWJsaWMgaW50ZXJmYWNlIFNob3BwaW5nQ2FydFJlbW90ZSBleHRlbmRzIEVKQk9iamVjdCB7Ci0gICAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFkZEl0ZW0oamF2YS5sYW5nLlN0cmluZyBpdGVtLCBpbnQgcHJpY2UpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkZWxldGVJdGVtKGphdmEubGFuZy5TdHJpbmcgaXRlbSkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAgICAKKwogICAgIHB1YmxpYyBkb3VibGUgZ2V0VG90YWxDb3N0KCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gZ2V0SXRlbXMoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogICAgIHB1YmxpYyB2b2lkIHNhdmVBc1F1b3RlKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZS1wZXJmL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGUtcGVyZi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGFmYmVlNDkuLmY1MzVhOTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZS1wZXJmL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlLXBlcmYvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjggKzE1LDI4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWMtc3NsIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jb252ZXJ0ZXIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNvbnZlcnRlciIvPiAgICAgICAgXHUwMDIwCiAKLTxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgCi0JdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIAotCXZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiXHUwMDIwCisgICAgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciJcdTAwMjAKKyAgICB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPiAgICAgICAgXHUwMDIwCiAKLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9ImNvbS5zdW4uczFwZXFlLnNlY3VyaXR5LnNzbC5jb252ZXJ0ZXIuY2xpZW50LkNvbnZlcnRlckNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJjb20uc3VuLnMxcGVxZS5zZWN1cml0eS5zc2wuY29udmVydGVyLmNsaWVudC5Db252ZXJ0ZXJDbGllbnQiLz4KIAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAKIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiAKQEAgLTQ1LDggKzQ1LDggQEAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLQogPHByb3BlcnR5IG5hbWU9ImpuZGkubmFtZSIgdmFsdWU9IlNTTGNvbnZlcnRlciIvPgotPHByb3BlcnR5IG5hbWU9InByb3ZpZGVyLnVybCIgdmFsdWU9Imlpb3A6Ly9sb2NhbGhvc3Q6JHtvcmIucG9ydH0iLz4gCi08cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIgdmFsdWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5uYW1pbmcuU2VyaWFsSW5pdENvbnRleHRGYWN0b3J5Ii8+IAotPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiIHZhbHVlPSJjb20uc3VuLmpuZGkuY29zbmFtaW5nLkNOQ3R4RmFjdG9yeSIvPiAKKzxwcm9wZXJ0eSBuYW1lPSJwcm92aWRlci51cmwiIHZhbHVlPSJpaW9wOi8vbG9jYWxob3N0OiR7b3JiLnBvcnR9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIgdmFsdWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5uYW1pbmcuU2VyaWFsSW5pdENvbnRleHRGYWN0b3J5Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIgdmFsdWU9ImNvbS5zdW4uam5kaS5jb3NuYW1pbmcuQ05DdHhGYWN0b3J5Ii8+XHUwMDIwCiAtLT4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlLXBlcmYvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlLXBlcmYvYnVpbGQueG1sCmluZGV4IGUzNmFhZmYuLjY3MTEwNTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZS1wZXJmL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGUtcGVyZi9idWlsZC54bWwKQEAgLTM3LDcgKzM3LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDksMTUgKzQ5LDE1IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtbG9jYWwiLz4gCi0JPGFudGNhbGwgdGFyZ2V0PSJydW4tc3RhbmRhbG9uZS1jbGllbnQiLz4KKyAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWxvY2FsIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tc3RhbmRhbG9uZS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50LWxvY2FsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02NSw4ICs2NSw4IEBACiAgICAgICAgIDxlbnYga2V5PSJWTUFSR1MiIHZhbHVlPSIgLURqYXZheC5uZXQuc3NsLmtleVN0b3JlPSR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9rZXlzdG9yZS5qa3MgLURqYXZheC5uZXQuc3NsLnRydXN0U3RvcmU9JHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2NhY2VydHMuamtzIiAvPgogICAgICAgICA8YXJnIHZhbHVlPSItY2xpZW50IiAvPgogICAgICAgICA8YXJnIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KLSAgCTwhLS0gZHVtbXkgdXNlciBhZGRlZCBhcyBhcHBjbGllbnQgdGhyb3dpbmcgbG9naW4gd2luZG93IC0tPgkKLQk8YXJnIHZhbHVlPSItdGV4dGF1dGgiLz4KKyAgICAgIDwhLS0gZHVtbXkgdXNlciBhZGRlZCBhcyBhcHBjbGllbnQgdGhyb3dpbmcgbG9naW4gd2luZG93IC0tPgorICAgIDxhcmcgdmFsdWU9Ii10ZXh0YXV0aCIvPgogICAgICAgICA8YXJnIHZhbHVlPSItdXNlciIvPgogICAgICAgICA8YXJnIHZhbHVlPSJ0ZW1wIi8+CiAgICAgICAgIDxhcmcgdmFsdWU9Ii1wYXNzd29yZCIvPgpAQCAtNzUsNyArNzUsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogICAgIDwhLS0gVGFyZ2V0IHRvIHJ1biB0aGUgc3RhbmRhbG9uZSBjbGllbnQgd2l0aG91dCBBQ0MgLS0+CkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydD0ke29yYi5wb3J0fSIvPgogICAgICAgICA8anZtYXJnIHZhbHVlPSItRGphdmF4Lm5ldC5zc2wua2V5U3RvcmU9JHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2tleXN0b3JlLmprcyIvPgogICAgICAgICA8anZtYXJnIHZhbHVlPSItRGphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZT0ke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvY2FjZXJ0cy5qa3MiLz4KLQk8anZtYXJnIHZhbHVlPSItRGNvbS5zdW4uQ09SQkEuY29ubmVjdGlvbi5PUkJTb2NrZXRGYWN0b3J5Q2xhc3M9Y29tLnN1bi5lbnRlcnByaXNlLmlpb3AuSUlPUFNTTFNvY2tldEZhY3RvcnkiLz4KKyAgICA8anZtYXJnIHZhbHVlPSItRGNvbS5zdW4uQ09SQkEuY29ubmVjdGlvbi5PUkJTb2NrZXRGYWN0b3J5Q2xhc3M9Y29tLnN1bi5lbnRlcnByaXNlLmlpb3AuSUlPUFNTTFNvY2tldEZhY3RvcnkiLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtwcm92aWRlci51cmx9Ii8+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y3R4ZmFjdG9yeX0iLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtqbmRpLm5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGUtcGVyZi9jbGllbnQvQ29udmVydGVyQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGUtcGVyZi9jbGllbnQvQ29udmVydGVyQ2xpZW50LmphdmEKaW5kZXggMjA4NjRlOS4uZTdkNGNjMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlLXBlcmYvY2xpZW50L0NvbnZlcnRlckNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZS1wZXJmL2NsaWVudC9Db252ZXJ0ZXJDbGllbnQuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqIEEgc2ltcGxlIGphdmEgY2xpZW50LiBUaGlzIHVzZXMgdGhlIHNlcnZpY2VzIHByb3ZpZGVkIGJ5IHRoZSA8Y29kZT5Db252ZXJ0ZXJCZWFuPC9jb2RlPiBhbmQKLSAqIGNvbnZlcnRzIDEwMCBVUyBkb2xsYXJzIHRvIFllbiBhbmQgMTAwIFllbiB0byBFdXJvLiAKKyAqIGNvbnZlcnRzIDEwMCBVUyBkb2xsYXJzIHRvIFllbiBhbmQgMTAwIFllbiB0byBFdXJvLgogICogPHA+SW4gdGhpcyByZWdhcmQsIGl0IGRvZXMgdGhlIGZvbGxvd2luZyBpbiBvcmRlcgogICogPHVsPgogICogPGxpPkxvY2F0ZXMgdGhlIGhvbWUgaW50ZXJmYWNlIG9mIHRoZSBlbnRlcnByaXNlIGJlYW4KQEAgLTM3LDIxICszNywyMSBAQAogICogPGJyPgogICogPGI+TG9jYXRpbmcgdGhlIGhvbWUgaW50ZXJmYWNlOjwvYj4KICAqIDxibG9ja3F1b3RlPjxwcmU+Ci0gKglDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAqCUNvbnRleHQgbXlFbnYgPSAoQ29udGV4dClpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2VudiIpOwotICoJT2JqZWN0IG9ianJlZiA9IG15RW52Lmxvb2t1cCgiZWpiL1NpbXBsZUNvbnZlcnRlciIpOworICogICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgKiAgICBDb250ZXh0IG15RW52ID0gKENvbnRleHQpaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYiKTsKKyAqICAgIE9iamVjdCBvYmpyZWYgPSBteUVudi5sb29rdXAoImVqYi9TaW1wbGVDb252ZXJ0ZXIiKTsKICAqICBDb252ZXJ0ZXJIb21lIGhvbWUgPSAoQ29udmVydGVySG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBDb252ZXJ0ZXJIb21lLmNsYXNzKTsKICAqIDwvcHJlPjwvYmxvY2txdW90ZT4KICAqIDxicj4KICAqIDxiPkNyZWF0aW5nIHRoZSByZW1vdGUgaW50ZXJmYWNlOjwvYj4KICAqIDxibG9ja3F1b3RlPjxwcmU+Ci0gKglDb252ZXJ0ZXIgY3VycmVuY3lDb252ZXJ0ZXIgPSBob21lLmNyZWF0ZSgpOworICogICAgQ29udmVydGVyIGN1cnJlbmN5Q29udmVydGVyID0gaG9tZS5jcmVhdGUoKTsKICAqIDwvcHJlPjwvYmxvY2txdW90ZT4KICAqIDxicj4KICAqIDxiPkludm9raW5nIGJ1c2luZXNzIG1ldGhvZHM6PC9iPgogICogPGJsb2NrcXVvdGU+PHByZT4KICAqICBCaWdEZWNpbWFsIHBhcmFtID0gbmV3IEJpZ0RlY2ltYWwgKCIxMDAuMDAiKTsKLSAqCWFtb3VudCA9IGN1cnJlbmN5Q29udmVydGVyLmRvbGxhclRvWWVuKHBhcmFtKTsKKyAqICAgIGFtb3VudCA9IGN1cnJlbmN5Q29udmVydGVyLmRvbGxhclRvWWVuKHBhcmFtKTsKICAqICBhbW91bnQgPSBjdXJyZW5jeUNvbnZlcnRlci55ZW5Ub0V1cm8ocGFyYW0pOwogICogPC9wcmU+PC9ibG9ja3F1b3RlPgogICogPGJyPgpAQCAtNjYsNyArNjYsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ29udmVydGVyQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgQ29udmVydGVyQ2xpZW50KCkgewpAQCAtODAsMzUgKzgwLDM1IEBACiAgICAgKgogICAgICovCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCUNvbnZlcnRlckNsaWVudCBjbGllbnQgPSBuZXcgQ29udmVydGVyQ2xpZW50KCk7Ci0JY2xpZW50LnJ1bihhcmdzKTsKKyAgICBDb252ZXJ0ZXJDbGllbnQgY2xpZW50ID0gbmV3IENvbnZlcnRlckNsaWVudCgpOworICAgIGNsaWVudC5ydW4oYXJncyk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHJ1bihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIFN0cmluZyB1cmwgPSBudWxsOwotCVN0cmluZyB0ZXN0SWQgPSBudWxsOworICAgIFN0cmluZyB0ZXN0SWQgPSBudWxsOwogICAgICAgICBTdHJpbmcgam5kaU5hbWUgPSBudWxsOwogICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOwogICAgICAgICBTdHJpbmcgY3R4RmFjdG9yeSA9IG51bGw7Ci0JamF2YS5sYW5nLk9iamVjdCBvYmogPSBudWxsOworICAgIGphdmEubGFuZy5PYmplY3Qgb2JqID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlNlY3VyaXR5OjpTU0wgT25lIHdheSBzc2wuIik7CiAKICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAzKSB7CiAgICAgICAgICAgICAgICAgdXJsID0gYXJnc1swXTsKICAgICAgICAgICAgICAgICBjdHhGYWN0b3J5ID0gYXJnc1sxXTsKLQkJam5kaU5hbWUgPSBhcmdzWzJdOworICAgICAgICBqbmRpTmFtZSA9IGFyZ3NbMl07CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICggKHVybCA9PSBudWxsKSB8fCAoY3R4RmFjdG9yeSA9PSBudWxsKSApIHsKLQkJdGVzdElkID0gIlNlYzo6U2ltcGxlIFBlcmYgQ29udmVydGVyIFNhbXBsZSBBcHBDbGllbnQiOworICAgICAgICB0ZXN0SWQgPSAiU2VjOjpTaW1wbGUgUGVyZiBDb252ZXJ0ZXIgU2FtcGxlIEFwcENsaWVudCI7CiAgICAgICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgQ29udGV4dCB3aXRoIGRlZmF1bHQgcHJvcGVydGllcwogICAgICAgICAgICAgICAgIGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNpbXBsZSBQZXJmICBUZXN0IFxuIERlZmF1bHQgQ29udGV4dCBJbml0aWFsaXplZC4uLiIpOwogICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBIb21lIG9iamVjdAogICAgICAgICAgICAgICAgIG9iaiA9IGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TU0xTaW1wbGVDb252ZXJ0ZXIiKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0JCXRlc3RJZCA9ICJTZWM6OlBlcmYgU3RhbmRhbG9uZS1DbGllbnQiOworICAgICAgICB0ZXN0SWQgPSAiU2VjOjpQZXJmIFN0YW5kYWxvbmUtQ2xpZW50IjsKICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzIGVudiA9IG5ldyBQcm9wZXJ0aWVzKCk7CiAgICAgICAgICAgICAgICAgZW52LnB1dCgiamF2YS5uYW1pbmcucHJvdmlkZXIudXJsIiwgdXJsKTsKICAgICAgICAgICAgICAgICBlbnYucHV0KCJqYXZhLm5hbWluZy5mYWN0b3J5LmluaXRpYWwiLCBjdHhGYWN0b3J5KTsKQEAgLTEyNiwyMCArMTI2LDIwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRlclJlbW90ZUhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgICBDb252ZXJ0ZXJSZW1vdGUgY3VycmVuY3lDb252ZXJ0ZXIgPSBob21lLmNyZWF0ZSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5cblxuPT09PT09PT09PT1CZWdpbm5pbmcgU2ltcGxlIFRlc3Q9PT09PVxuXG4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBCaWdEZWNpbWFsIHBhcmFtID0gbmV3IEJpZ0RlY2ltYWwgKCIxMDAuMDAiKTsKLSAgICAgICAgICAgIGludCB0aW1lcyA9IDE7IAorICAgICAgICAgICAgaW50IHRpbWVzID0gMTsKICAgICAgICAgICAgIHRyeXsKLSAgICAgICAgICAgICAgICB0aW1lcyA9IEludGVnZXIucGFyc2VJbnQobXl0aW1lcyk7IAorICAgICAgICAgICAgICAgIHRpbWVzID0gSW50ZWdlci5wYXJzZUludChteXRpbWVzKTsKICAgICAgICAgICAgIH0gY2F0Y2goamF2YS5sYW5nLk51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZSl7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaW1lcyBpbiBkZXNjcmlwdG9yIGRlY2xhcmVkIGluY29ycmVjdGx5Iik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBCaWdEZWNpbWFsIGFtb3VudCA9IG5ldyBCaWdEZWNpbWFsKDEpOyAKKyAgICAgICAgICAgIEJpZ0RlY2ltYWwgYW1vdW50ID0gbmV3IEJpZ0RlY2ltYWwoMSk7CiAgICAgICAgICAgICBCaWdEZWNpbWFsIGFtb3VudDIgPSBuZXcgQmlnRGVjaW1hbCgxKTsKICAgICAgICAgICAgIGxvbmcgc3RhcnR0aW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaTx0aW1lczsgaSsrKXsKICAgICAgICAgICAgICAgICBhbW91bnQgPSBjdXJyZW5jeUNvbnZlcnRlci5kb2xsYXJUb1llbihwYXJhbSk7CiAgICAgICAgICAgICAgICAgYW1vdW50MiA9IGN1cnJlbmN5Q29udmVydGVyLnllblRvRXVybyhwYXJhbSk7CkBAIC0xNTUsNyArMTU1LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uISIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0gZmluYWxseSB7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGUtcGVyZi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGUtcGVyZi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKaW5kZXggYzA3Njg1ZS4uZWUzZWZhNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlLXBlcmYvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZS1wZXJmL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbApAQCAtMjQsNyArMjQsNyBAQAogICAgIDxlbnYtZW50cnktbmFtZT50aW1lczwvZW52LWVudHJ5LW5hbWU+CiAgICAgPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2Vudi1lbnRyeS10eXBlPgogICAgIDxlbnYtZW50cnktdmFsdWU+NTAwMDwvZW52LWVudHJ5LXZhbHVlPgotICA8L2Vudi1lbnRyeT4gIAorICA8L2Vudi1lbnRyeT4KICAgPGVqYi1yZWY+CiAgICAgPGVqYi1yZWYtbmFtZT5lamIvU1NMU2ltcGxlQ29udmVydGVyPC9lamItcmVmLW5hbWU+CiAgICAgPGVqYi1yZWYtdHlwZT5TZXNzaW9uPC9lamItcmVmLXR5cGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGUtcGVyZi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZS1wZXJmL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCmluZGV4IDI2YjIxODkuLjY2MTQ5OTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZS1wZXJmL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZS1wZXJmL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgPHNtYWxsLWljb24+PC9zbWFsbC1pY29uPgogICAgIDxsYXJnZS1pY29uPjwvbGFyZ2UtaWNvbj4KICAgPC9pY29uPgotICA8ZGlzcGxheS1uYW1lPlNTTENvbnZlcnRlckFwcDwvZGlzcGxheS1uYW1lPiAgCisgIDxkaXNwbGF5LW5hbWU+U1NMQ29udmVydGVyQXBwPC9kaXNwbGF5LW5hbWU+CiAgIDxtb2R1bGU+CiAgICAgPGphdmE+c2VjLXNzbC1jb252ZXJ0ZXItY2xpZW50LmphcjwvamF2YT4KICAgPC9tb2R1bGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGUtcGVyZi9lamIvQ29udmVydGVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlLXBlcmYvZWpiL0NvbnZlcnRlckJlYW4uamF2YQppbmRleCAwMjc4M2U0Li4yN2U1Mjk3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGUtcGVyZi9lamIvQ29udmVydGVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZS1wZXJmL2VqYi9Db252ZXJ0ZXJCZWFuLmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKICAgICBCaWdEZWNpbWFsIHllblJhdGUgPSBuZXcgQmlnRGVjaW1hbCgiMTIxLjYwMDAiKTsKICAgICBCaWdEZWNpbWFsIGV1cm9SYXRlID0gbmV3IEJpZ0RlY2ltYWwoIjAuMDA3NyIpOwogICAgIFNlc3Npb25Db250ZXh0IG15c2MgPSBudWxsOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBteUNhbGxlclByaW5jaXBhbCgpewogICAgICAgICByZXR1cm4gbXlzYy5nZXRDYWxsZXJQcmluY2lwYWwoKS50b1N0cmluZygpOwogICAgIH0KQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgKiBSZXR1cm5zIHRoZSB5ZW4gdmFsdWUgZm9yIGEgZ2l2ZW4gZG9sbGFyIGFtb3VudC4KICAgICAgKiBAcGFyYW0gZG9sbGFycyBkb2xsYXIgYW1vdW50IHRvIGJlIGNvbnZlcnRlZCB0byB5ZW4uCiAgICAgICovCi0gICAgcHVibGljIEJpZ0RlY2ltYWwgZG9sbGFyVG9ZZW4oQmlnRGVjaW1hbCBkb2xsYXJzKSB7ICAgICAgIAorICAgIHB1YmxpYyBCaWdEZWNpbWFsIGRvbGxhclRvWWVuKEJpZ0RlY2ltYWwgZG9sbGFycykgewogICAgICAgICBCaWdEZWNpbWFsIHJlc3VsdCA9IGRvbGxhcnMubXVsdGlwbHkoeWVuUmF0ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQuc2V0U2NhbGUoMixCaWdEZWNpbWFsLlJPVU5EX1VQKTsKICAgICB9CkBAIC03NSw3ICs3NSw3IEBACiAgICAgICogTG9hZHMgdGhlIHN0YXRlIG9mIHRoZSBiZWFuIGZyb20gc2Vjb25kYXJ5IHN0b3JhZ2UuIFJlcXVpcmVkIGJ5IEVKQiBzcGVjLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KLSAgICAKKwogICAgIC8qKgogICAgICAqIEtlZXBzIHRoZSBzdGF0ZSBvZiB0aGUgYmVhbiB0byBzZWNvbmRhcnkgc3RvcmFnZS4gUmVxdWlyZWQgYnkgRUpCIHNwZWMuCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGUtcGVyZi9lamIvQ29udmVydGVyUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGUtcGVyZi9lamIvQ29udmVydGVyUmVtb3RlLmphdmEKaW5kZXggMzBiZTk5NS4uYTg2ZmNkNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlLXBlcmYvZWpiL0NvbnZlcnRlclJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZS1wZXJmL2VqYi9Db252ZXJ0ZXJSZW1vdGUuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAqIEBwYXJhbSB5ZW4geWVuIGFtb3VudCB0byBiZSBjb252ZXJ0ZWQgdG8gZXVyby4KICAgICAgKi8KICAgICBwdWJsaWMgQmlnRGVjaW1hbCB5ZW5Ub0V1cm8oQmlnRGVjaW1hbCB5ZW4pIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIG15Q2FsbGVyUHJpbmNpcGFsKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlTXVsdGlSb2xlTWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlTXVsdGlSb2xlTWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk2MWQ5M2EuLjYxMDEwODcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZU11bHRpUm9sZU1hcHBpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGVNdWx0aVJvbGVNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5LW11bHRpbWFwcGluZyIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZU11bHRpUm9sZU1hcHBpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlTXVsdGlSb2xlTWFwcGluZy9idWlsZC54bWwKaW5kZXggNjBlYjIyYi4uMzU5NWU1YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlTXVsdGlSb2xlTWFwcGluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlTXVsdGlSb2xlTWFwcGluZy9idWlsZC54bWwKQEAgLTI1LDE4ICsyNSwxOCBAQAogXT4KIAogPHByb2plY3QgbmFtZT0ic2VjdXJpdHktbXVsdGltYXBwaW5nIiBkZWZhdWx0PSJ1c2FnZSIgYmFzZWRpcj0iLiI+Ci0gIAorCiAgICZjb21tb25TZXR1cDsKICAgJmNvbW1vbkJ1aWxkOwogICAmdGVzdHByb3BlcnRpZXM7CiAgICZjb21tb25TZWN1cml0eTsKLSAgCisKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLCBzZXR1cCwgYnVpbGQsIGRlcGxveSwgcnVuLCB1bmRlcGxveSwgdW5zZXR1cCIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS11c2VyLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9IndlYnVzZXIiLz4KQEAgLTUwLDcgKzUwLDcgQEAKICAgICA8L2FudGNhbGw+CiAgIDwhLS0gIDxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+LS0+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9IndlYnVzZXIiLz4KQEAgLTU5LDcgKzU5LDcgQEAKICAgICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0iYm9iYnkiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTgxLDExICs4MSwxMSBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIC0tPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gCi0gICAgCisgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKwogICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4KICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9ub253ZWIiLz4KICAgICAgIDxwYXJhbSBuYW1lPSJlamIuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIvPgpAQCAtOTcsMjAgKzk3LDIwIEBACiAgICAgICA8cGFyYW0gbmFtZT0id2FyLmZpbGUiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CiAgICAgICA8cGFyYW0gbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiAgICAgPC9hbnRjYWxsPgotICAgIAorCiAgICAgPCEtLQogICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9ub253ZWIiLz4KLSAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuamFyIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuamFyIgogICAgICAgICAgICAgIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+Ci0gICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgIHZhbHVlPSJjb20vc3VuLyoqL2NsaWVudC8qLmNsYXNzLGNvbS9zdW4vKiovZWpiL0hlbGxvLmNsYXNzIi8+CiAgICAgPC9hbnRjYWxsPgogICAgIC0tPgotICAgIAotICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+IAorCisgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+CiAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CkBAIC0xMjAsOSArMTIwLDkgQEAKICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgPC9maWxlc2V0PgogICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0vbGliIiBpbmNsdWRlcz0icmVwb3J0ZXIuamFyIi8+Ci0gICAgPC9qYXI+ICAgCi0gICAgCi0gICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4gCisgICAgPC9qYXI+CisKKyAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KQEAgLTEzMSwxMyArMTMxLDEzIEBACiAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgPC9maWxlc2V0PgotICAgIDwvamFyPiAgIAorICAgIDwvamFyPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPCEtLQogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSI+CkBAIC0xNjgsNyArMTY4LDcgQEAKICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0Y2FzZWlkIiB2YWx1ZT0idXNlci1hdXRoLWVqYnJvbGUiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InJ1bndlYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDx0YXNrZGVmIG5hbWU9IndlYnRlc3QiIGNsYXNzbmFtZT0iJHt3ZWJ0ZXN0LmNsYXNzbmFtZX0iCiAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke3dlYnRlc3QuY2xhc3NwYXRofSIgLz4KQEAgLTE5OCwxMSArMTk4LDExIEBACiAgICAgICAgICAgICAgdGVzdENhc2VEZXNjcmlwdGlvbj0iVGVzdGluZyByb2xlIG1hcHBpbmciCiAgICAgICAgICAgICAgdGVzdFN0cmF0ZWd5PSJUZXN0aW5nIHJvbGUgbWFwcGluZyIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZU11bHRpUm9sZU1hcHBpbmcvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGVNdWx0aVJvbGVNYXBwaW5nL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDQwZTNkZWMuLjMxNTU1OTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZU11bHRpUm9sZU1hcHBpbmcvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlTXVsdGlSb2xlTWFwcGluZy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjQsNyArMjQsNyBAQAogICAgICAgPGVqYi1uYW1lPk1lc3NhZ2VCZWFuPC9lamItbmFtZT4KICAgICA8L2VqYj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgotICAKKwogICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgIDxyb2xlLW5hbWU+ZWpicm9sZTwvcm9sZS1uYW1lPgogICAgIDxwcmluY2lwYWwtbmFtZT5ib2JieTwvcHJpbmNpcGFsLW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGVNdWx0aVJvbGVNYXBwaW5nL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGVNdWx0aVJvbGVNYXBwaW5nL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKaW5kZXggODNhYzMxYi4uNTYzZWFmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlTXVsdGlSb2xlTWFwcGluZy9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZU11bHRpUm9sZU1hcHBpbmcvZGVzY3JpcHRvci9zdW4td2ViLnhtbApAQCAtMjksMTAgKzI5LDEwIEBACiAgICAgICA8ZGVzY3JpcHRpb24+TWFpbnRhaW4gYSBvbmUtdG8tb25lIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gc3RhdGljIGNvbnRlbnQgYW5kIHRoZSBnZW5lcmF0ZWQgc2VydmxldCBjbGFzcycgamF2YSBjb2RlPC9kZXNjcmlwdGlvbj4KICAgICA8L3Byb3BlcnR5PgogICA8L2pzcC1jb25maWc+Ci0gICAgCisKICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICA8cm9sZS1uYW1lPndlYnJvbGU8L3JvbGUtbmFtZT4KICAgICA8Z3JvdXAtbmFtZT53ZWJ1c2VyczwvZ3JvdXAtbmFtZT4KICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gICAgCisKIDwvc3VuLXdlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGVNdWx0aVJvbGVNYXBwaW5nL2VqYi9NZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlTXVsdGlSb2xlTWFwcGluZy9lamIvTWVzc2FnZUJlYW4uamF2YQppbmRleCAyY2I5NzY2Li43YjMzZDZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGVNdWx0aVJvbGVNYXBwaW5nL2VqYi9NZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZU11bHRpUm9sZU1hcHBpbmcvZWpiL01lc3NhZ2VCZWFuLmphdmEKQEAgLTIzLDEwICsyMywxMCBAQAogQFN0YXRlbGVzcwogQExvY2FsKHtNZXNzYWdlTG9jYWwuY2xhc3N9KQogcHVibGljIGNsYXNzIE1lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxvY2FsIHsKLSAgICAKKwogICAgIEBSb2xlc0FsbG93ZWQoImVqYnJvbGUiKQogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpIHsKICAgICAgICAgcmV0dXJuICJIZWxsbyBmcm9tIGVqYiI7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGVNdWx0aVJvbGVNYXBwaW5nL2VqYi9NZXNzYWdlTG9jYWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZU11bHRpUm9sZU1hcHBpbmcvZWpiL01lc3NhZ2VMb2NhbC5qYXZhCmluZGV4IGI4NTQ2YTEuLmU3ODA3M2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZU11bHRpUm9sZU1hcHBpbmcvZWpiL01lc3NhZ2VMb2NhbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZU11bHRpUm9sZU1hcHBpbmcvZWpiL01lc3NhZ2VMb2NhbC5qYXZhCkBAIC0yNCw1ICsyNCw1IEBACiBATG9jYWwKIHB1YmxpYyBpbnRlcmZhY2UgTWVzc2FnZUxvY2FsIHsKICAgICBTdHJpbmcgZ2V0TWVzc2FnZSgpOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGVNdWx0aVJvbGVNYXBwaW5nL3dlYi9FamJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGVNdWx0aVJvbGVNYXBwaW5nL3dlYi9FamJUZXN0LmphdmEKaW5kZXggZjNiMjA2NS4uZGFjMzQ4NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlTXVsdGlSb2xlTWFwcGluZy93ZWIvRWpiVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZU11bHRpUm9sZU1hcHBpbmcvd2ViL0VqYlRlc3QuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogCiAgICAgQEVKQgogICAgIHByaXZhdGUgTWVzc2FnZUxvY2FsIG1lc3NhZ2VCZWFuOwotICAgIAorCiAgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsCiAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKQEAgLTQ0LDUgKzQ0LDUgQEAKICAgICAgICAgb3V0LnByaW50bG4oIjwvaHRtbD4iKTsKICAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGVNdWx0aVJvbGVNYXBwaW5nL3dlYi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGVNdWx0aVJvbGVNYXBwaW5nL3dlYi9XZWJUZXN0LmphdmEKaW5kZXggOWVjMzk2NS4uZjhmZmQ2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlTXVsdGlSb2xlTWFwcGluZy93ZWIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZU11bHRpUm9sZU1hcHBpbmcvd2ViL1dlYlRlc3QuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7CiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewotICAgIAorCiAgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsCiAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKQEAgLTM5LDUgKzM5LDUgQEAKICAgICAgICAgb3V0LnByaW50bG4oIjwvaHRtbD4iKTsKICAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb2xhcmlzUmVhbG0vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvbGFyaXNSZWFsbS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGExODM1ZDQuLmYwZjg5MWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvbGFyaXNSZWFsbS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvbGFyaXNSZWFsbS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KQEAgLTI2LDQgKzI2LDQgQEAKIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0icnBhTG9naW5CZWFuIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9InJwYUxvZ2luQmVhbiIvPiAgICAgICAgXHUwMDIwCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb2xhcmlzUmVhbG0vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc29sYXJpc1JlYWxtL2J1aWxkLnhtbAppbmRleCA3MWYwN2I0Li42OTM5MWZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb2xhcmlzUmVhbG0vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvbGFyaXNSZWFsbS9idWlsZC54bWwKQEAgLTMxLDcgKzMxLDcgQEAKICAgICZjb21tb25CdWlsZDsKICAgICZjb21tb25SdW47CiAgICAmdGVzdFByb3BlcnRpZXM7Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsIHNldHVwLCBkZXBsb3ksIHJ1biwgdW5kZXBsb3ksIHVuc2V0dXAiLz4KICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgpAQCAtNDgsNyArNDgsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci08IS0tCTxwcm9wZXJ0eSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLypIb21lKi5jbGFzcywqKi8qQmVhbiouY2xhc3MsKiovKkRhdGEqLmNsYXNzLCouZGJzY2hlbWEiLz4KKzwhLS0gICAgPHByb3BlcnR5IG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovKkhvbWUqLmNsYXNzLCoqLypCZWFuKi5jbGFzcywqKi8qRGF0YSouY2xhc3MsKi5kYnNjaGVtYSIvPgogLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc29sYXJpc1JlYWxtL2NsaWVudC9ScGFDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvbGFyaXNSZWFsbS9jbGllbnQvUnBhQ2xpZW50LmphdmEKaW5kZXggNDJiYzUwZC4uNzNlODA3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc29sYXJpc1JlYWxtL2NsaWVudC9ScGFDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb2xhcmlzUmVhbG0vY2xpZW50L1JwYUNsaWVudC5qYXZhCkBAIC0zOCwzMSArMzgsMzEgQEAKICAgICAgICAgUnBhQ2xpZW50IGNsaWVudCA9IG5ldyBScGFDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgUnBhQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgLy9zdXBlcihhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdCgpIHsKLSAgICAgICAgCi0JUnBhUmVtb3RlIGhyPW51bGw7CisKKyAgICBScGFSZW1vdGUgaHI9bnVsbDsKICAgICAgICAgU3RyaW5nIHJlcz1udWxsOwogICAgICAgICBDb250ZXh0IGljID0gbnVsbDsKICAgICAgICAgTG9naW5Db250ZXh0IGxjPW51bGw7CiAgICAgICAgIFJwYUhvbWUgaG9tZT1udWxsOwogICAgICAgICBTdHJpbmcgdGVzdElkID0gIlNlYzo6U29sYXJpcyBSZWFsbSI7Ci0gICAgCXRyeXsKKyAgICAgICAgdHJ5ewogICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiU2VjdXJpdHk6OlNvbGFyaXMgUmVhbG0iKTsKLQkgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lciAKKyAgICAgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lcgogICAgICAgICAgICAgamF2YS5sYW5nLk9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoInJwYUxvZ2luQmVhbiIpOwotCQkKLQkgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7Ci0JCQotCSAgICBob21lID0gKFJwYUhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KAotCQkJCQkgICBvYmpyZWYsIFJwYUhvbWUuY2xhc3MpOwotCSAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwotCQkJCQorCisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOworCisgICAgICAgIGhvbWUgPSAoUnBhSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3coCisgICAgICAgICAgICAgICAgICAgICAgIG9ianJlZiwgUnBhSG9tZS5jbGFzcyk7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7CisKICAgICAgICAgICAgIGhyID0gaG9tZS5jcmVhdGUoIkxpekh1cmxleSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7CiAKQEAgLTg4LDExICs4OCwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTb2xhcmlzUmVhbG06UnBhTG9naW5CZWFuIFRlc3QgRmFpbGVkIik7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgtMSk7Ci0JfSBmaW5hbGx5IHsKKyAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICAKKwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc29sYXJpc1JlYWxtL3Nob3BwaW5nL1JwYUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvbGFyaXNSZWFsbS9zaG9wcGluZy9ScGFCZWFuLmphdmEKaW5kZXggNDA1ZjM2OS4uNjhjMTg3MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc29sYXJpc1JlYWxtL3Nob3BwaW5nL1JwYUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb2xhcmlzUmVhbG0vc2hvcHBpbmcvUnBhQmVhbi5qYXZhCkBAIC0zNiwyNSArMzYsMjUgQEAKICAqLwogCiBwdWJsaWMgY2xhc3MgUnBhQmVhbiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIHNob3BwZXIgPSAiYW5vbnltb3VzIjsKICAgICBwcml2YXRlIGludCB0b3RhbFByaWNlID0gMDsKLSAgICAKKwogICAgIHByaXZhdGUgaW50IHRvdGFsSXRlbXMgPSAwOwotICAgIAorCiAgICAgcHJpdmF0ZSBWZWN0b3IgaXRlbXM7Ci0gICAgCisKICAgICBwcml2YXRlIFZlY3RvciBpdGVtUHJpY2U7Ci0gICAgCisKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjID0gbnVsbDsKLSAgICAKKwogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFNob3BwaW5nRUpCICovCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKFN0cmluZyBzaG9wcGVyTmFtZSkgewogICAgICAgICBzaG9wcGVyID0gc2hvcHBlck5hbWU7CiAgICAgICAgIGl0ZW1zID0gbmV3IFZlY3RvcigpOwogICAgICAgICBpdGVtUHJpY2UgPSBuZXcgVmVjdG9yKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWRkSXRlbShqYXZhLmxhbmcuU3RyaW5nIGl0ZW0sIGludCBwcmljZSkgdGhyb3dzIEVKQkV4Y2VwdGlvbiwKICAgICAgICAgUmVtb3RlRXhjZXB0aW9uewogICAgICAgICBpdGVtcy5hZGQoaXRlbSk7CkBAIC02NCwzMCArNjQsMzAgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgU2hvcHBpbmcgQ2FydDogU2hvcHBlciAiKyBzaG9wcGVyICsiIGhhcyBib3VnaHQgIgogICAgICAgICAgICAgKyBpdGVtICsiIGZvciBwcmljZSA9IisgcHJpY2UgKyIgLlRvdGFsIEl0ZW1zID0gIit0b3RhbEl0ZW1zICsKICAgICAgICAgICAgICIgLlRvdGFsUHJpY2UgPSAiICsgdG90YWxQcmljZSk7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGVyIFByaW5jaWFsID0gIitzYy5nZXRDYWxsZXJQcmluY2lwYWwoKSk7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGRlbGV0ZUl0ZW0oamF2YS5sYW5nLlN0cmluZyBpdGVtKSB0aHJvd3MgRUpCRXhjZXB0aW9uLCAKKworICAgIHB1YmxpYyB2b2lkIGRlbGV0ZUl0ZW0oamF2YS5sYW5nLlN0cmluZyBpdGVtKSB0aHJvd3MgRUpCRXhjZXB0aW9uLAogICAgICAgICBSZW1vdGVFeGNlcHRpb257CiAgICAgICAgIGludCBpbmRleCA9IGl0ZW1zLmluZGV4T2YoaXRlbSk7CiAgICAgICAgIGl0ZW1zLnJlbW92ZShpdGVtKTsKICAgICAgICAgSW50ZWdlciBwcmljZSA9IChJbnRlZ2VyKSBpdGVtUHJpY2UuZ2V0KGluZGV4KTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTaG9wcGluZyBDYXJ0OiBSZW1vdmluZyBpdGVtICIrIGl0ZW0gKyIgQHByaWNlICIrIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNob3BwaW5nIENhcnQ6IFJlbW92aW5nIGl0ZW0gIisgaXRlbSArIiBAcHJpY2UgIisKICAgICAgICAgICAgIHByaWNlLmludFZhbHVlKCkpOwogICAgICAgICB0b3RhbFByaWNlIC09IHByaWNlLnNob3J0VmFsdWUoKTsKLSAgICAgICAgaXRlbVByaWNlLnJlbW92ZShpbmRleCk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgaXRlbVByaWNlLnJlbW92ZShpbmRleCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFNob3BwaW5nIENhcnQ6IFNob3BwZXIgIisgc2hvcHBlciArIiAgLlRvdGFsIEl0ZW1zID0gIit0b3RhbEl0ZW1zICsKICAgICAgICAgICAgICIgLlRvdGFsUHJpY2UgPSAiICsgdG90YWxQcmljZSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGVyIFByaW5jaWFsID0gIitzYy5nZXRDYWxsZXJQcmluY2lwYWwoKSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGRvdWJsZSBnZXRUb3RhbENvc3QoKSB0aHJvd3MgRUpCRXhjZXB0aW9uewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxlciBQcmluY2lhbCA9ICIrc2MuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkpOwogCiAgICAgICAgIHJldHVybiB0b3RhbFByaWNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRJdGVtcygpIHRocm93cyBFSkJFeGNlcHRpb257CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGVyIFByaW5jaWFsID0gIitzYy5nZXRDYWxsZXJQcmluY2lwYWwoKSk7CiAKQEAgLTk5LDI0ICs5OSwyNCBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBpdGVtTmFtZXM7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gUnBhIGVqYkFjdGl2YXRlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gUnBhIGVqYlBhc3NpdmF0ZSIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBScGEgZWpiUmVtb3ZlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dCBzZXNzaW9uQ29udGV4dCkgewogICAgICAgICBzYyA9IHNlc3Npb25Db250ZXh0OwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc29sYXJpc1JlYWxtL3Nob3BwaW5nL1JwYUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvbGFyaXNSZWFsbS9zaG9wcGluZy9ScGFIb21lLmphdmEKaW5kZXggZDQyNjJkMC4uYzk5MzA5MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc29sYXJpc1JlYWxtL3Nob3BwaW5nL1JwYUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb2xhcmlzUmVhbG0vc2hvcHBpbmcvUnBhSG9tZS5qYXZhCkBAIC0yOCw4ICsyOCw4IEBACiAgKiBAYXV0aG9yICBIYXJwcmVldCBTaW5naAogICovCiBwdWJsaWMgaW50ZXJmYWNlIFJwYUhvbWUgZXh0ZW5kcyBFSkJIb21lewotICAgIAotICAgIHB1YmxpYyBScGFSZW1vdGUgY3JlYXRlKGphdmEubGFuZy5TdHJpbmcgc2hvcHBlck5hbWUpIAorCisgICAgcHVibGljIFJwYVJlbW90ZSBjcmVhdGUoamF2YS5sYW5nLlN0cmluZyBzaG9wcGVyTmFtZSkKICAgICAgICAgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb2xhcmlzUmVhbG0vc2hvcHBpbmcvUnBhUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb2xhcmlzUmVhbG0vc2hvcHBpbmcvUnBhUmVtb3RlLmphdmEKaW5kZXggZmI4YTc3My4uNDNhMzk5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc29sYXJpc1JlYWxtL3Nob3BwaW5nL1JwYVJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvbGFyaXNSZWFsbS9zaG9wcGluZy9ScGFSZW1vdGUuamF2YQpAQCAtMjMsMTcgKzIzLDE3IEBACiBwYWNrYWdlIHNob3BwaW5nOwogaW1wb3J0IGpha2FydGEuZWpiLkVKQk9iamVjdDsKIC8qKgotICogU2hvcHBpbmcgQ2FydCBTdGF0ZWZ1bCBTZXNzaW9uIEJlYW4uIEp1c3QgdGVzdHMgLURqMmVlbG9naW4ubmFtZSAKKyAqIFNob3BwaW5nIENhcnQgU3RhdGVmdWwgU2Vzc2lvbiBCZWFuLiBKdXN0IHRlc3RzIC1EajJlZWxvZ2luLm5hbWUKICAqICAtRGoyZWVsb2dpbi5wYXNzd29yZCBzeXN0ZW0gcHJvcGVydGllcy4KICAqIEBhdXRob3IgIGhzaW5naAogICovCiBwdWJsaWMgaW50ZXJmYWNlIFJwYVJlbW90ZSBleHRlbmRzIEVKQk9iamVjdCB7Ci0gICAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFkZEl0ZW0oamF2YS5sYW5nLlN0cmluZyBpdGVtLCBpbnQgcHJpY2UpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkZWxldGVJdGVtKGphdmEubGFuZy5TdHJpbmcgaXRlbSkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAgICAKKwogICAgIHB1YmxpYyBkb3VibGUgZ2V0VG90YWxDb3N0KCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gZ2V0SXRlbXMoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtYnVuZGxlZC1oYW0tYmFzaWMtbG9naW4tY29uZmlnLWZvcm0vcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWJ1bmRsZWQtaGFtLWJhc2ljLWxvZ2luLWNvbmZpZy1mb3JtL3BvbS54bWwKaW5kZXggZThhNzJjZS4uNGM4NDZjZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtYnVuZGxlZC1oYW0tYmFzaWMtbG9naW4tY29uZmlnLWZvcm0vcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1idW5kbGVkLWhhbS1iYXNpYy1sb2dpbi1jb25maWctZm9ybS9wb20ueG1sCkBAIC0xNywyMSArMTcsMjEgQEAKIC0tPgogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgotCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5zb3RlcmlhLnRlc3Q8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+c290ZXJpYTwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKLQk8YXJ0aWZhY3RJZD5hcHAtYnVuZGxlZC1oYW0tYmFzaWMtbG9naW4tY29uZmlnLWZvcm08L2FydGlmYWN0SWQ+Ci0JPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KLQkKLQk8YnVpbGQ+CisgICAgPGFydGlmYWN0SWQ+YXBwLWJ1bmRsZWQtaGFtLWJhc2ljLWxvZ2luLWNvbmZpZy1mb3JtPC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+CisKKyAgICA8YnVpbGQ+CiAgICAgICAgIDxmaW5hbE5hbWU+YXBwLWJ1bmRsZWQtaGFtLWJhc2ljLWxvZ2luLWNvbmZpZy1mb3JtPC9maW5hbE5hbWU+Ci0JPC9idWlsZD4KLSAgICAKKyAgICA8L2J1aWxkPgorCiAgICAgPHByb3BlcnRpZXM+CiAgICAgICAgIDxmYWlsT25NaXNzaW5nV2ViWG1sPmZhbHNlPC9mYWlsT25NaXNzaW5nV2ViWG1sPgogICAgIDwvcHJvcGVydGllcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWJ1bmRsZWQtaGFtLWJhc2ljLWxvZ2luLWNvbmZpZy1mb3JtL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1idW5kbGVkLWhhbS1iYXNpYy1sb2dpbi1jb25maWctZm9ybS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCmluZGV4IGFlNmFjZWMuLmIyM2E4ZTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWJ1bmRsZWQtaGFtLWJhc2ljLWxvZ2luLWNvbmZpZy1mb3JtL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtYnVuZGxlZC1oYW0tYmFzaWMtbG9naW4tY29uZmlnLWZvcm0vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YQpAQCAtMzIsMjAgKzMyLDIwIEBACiAKIEBSZXF1ZXN0U2NvcGVkCiBwdWJsaWMgY2xhc3MgVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtIGltcGxlbWVudHMgSHR0cEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtIHsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwcml2YXRlIElkZW50aXR5U3RvcmVIYW5kbGVyIGlkZW50aXR5U3RvcmVIYW5kbGVyOwogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIEF1dGhlbnRpY2F0aW9uU3RhdHVzIHZhbGlkYXRlUmVxdWVzdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwgSHR0cE1lc3NhZ2VDb250ZXh0IGh0dHBNZXNzYWdlQ29udGV4dCkgdGhyb3dzIEF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uIHsKIAotICAgIAkvLyBHZXQgdGhlIChjYWxsZXIpIG5hbWUgYW5kIHBhc3N3b3JkIGZyb20gdGhlIHJlcXVlc3QKKyAgICAgICAgLy8gR2V0IHRoZSAoY2FsbGVyKSBuYW1lIGFuZCBwYXNzd29yZCBmcm9tIHRoZSByZXF1ZXN0CiAgICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgZm9yIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBleGFtcGxlIG9ubHkuIEluIHByYWN0aWNlCiAgICAgICAgIC8vIHB1dHRpbmcgdGhlIHBhc3N3b3JkIGluIGEgcmVxdWVzdCBxdWVyeSBwYXJhbWV0ZXIgaXMgaGlnaGx5CiAgICAgICAgIC8vIGluc2VjdXJlCiAgICAgICAgIFN0cmluZyBuYW1lID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKICAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInBhc3N3b3JkIik7Ci0gICAgCQorCiAgICAgICAgIGlmIChuYW1lICE9IG51bGwgJiYgcGFzc3dvcmQgIT0gbnVsbCkgewogCiAgICAgICAgICAgICAvLyBEZWxlZ2F0ZSB0aGUge2NyZWRlbnRpYWxzIGluIC0+IGlkZW50aXR5IGRhdGEgb3V0fSBmdW5jdGlvbiB0bwpAQCAtNTUsOCArNTUsOCBAQAogCiAgICAgICAgICAgICBpZiAocmVzdWx0LmdldFN0YXR1cygpID09IFZBTElEKSB7CiAgICAgICAgICAgICAgICAgLy8gQ29tbXVuaWNhdGUgdGhlIGRldGFpbHMgb2YgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlciB0byB0aGUKLSAgICAgICAgICAgICAgICAvLyBjb250YWluZXIuIEluIG1hbnkgY2FzZXMgdGhlIHVuZGVybHlpbmcgaGFuZGxlciB3aWxsIGp1c3Qgc3RvcmUgdGhlIGRldGFpbHMgCi0gICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBjb250YWluZXIgd2lsbCBhY3R1YWxseSBoYW5kbGUgdGhlIGxvZ2luIGFmdGVyIHdlIHJldHVybiBmcm9tIAorICAgICAgICAgICAgICAgIC8vIGNvbnRhaW5lci4gSW4gbWFueSBjYXNlcyB0aGUgdW5kZXJseWluZyBoYW5kbGVyIHdpbGwganVzdCBzdG9yZSB0aGUgZGV0YWlscworICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgY29udGFpbmVyIHdpbGwgYWN0dWFsbHkgaGFuZGxlIHRoZSBsb2dpbiBhZnRlciB3ZSByZXR1cm4gZnJvbQogICAgICAgICAgICAgICAgIC8vIHRoaXMgbWV0aG9kLgogICAgICAgICAgICAgICAgIHJlc3BvbnNlLmFkZEhlYWRlcigiQXV0aGVudGljYXRpb24gTWVjaGFuaXNtIiwgIlRlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbSIpOwogICAgICAgICAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQubm90aWZ5Q29udGFpbmVyQWJvdXRMb2dpbigKQEAgLTY0LDkgKzY0LDkgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGh0dHBNZXNzYWdlQ29udGV4dC5yZXNwb25zZVVuYXV0aG9yaXplZCgpOwogICAgICAgICAgICAgfQotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGh0dHBNZXNzYWdlQ29udGV4dC5kb05vdGhpbmcoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWJ1bmRsZWQtaGFtLWJhc2ljLWxvZ2luLWNvbmZpZy1mb3JtL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1idW5kbGVkLWhhbS1iYXNpYy1sb2dpbi1jb25maWctZm9ybS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmluZGV4IDJkZWUwOGQuLjI4ODliZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWJ1bmRsZWQtaGFtLWJhc2ljLWxvZ2luLWNvbmZpZy1mb3JtL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtYnVuZGxlZC1oYW0tYmFzaWMtbG9naW4tY29uZmlnLWZvcm0vc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPHRyYW5zcG9ydC1ndWFyYW50ZWU+Tk9ORTwvdHJhbnNwb3J0LWd1YXJhbnRlZT4KICAgICAgICAgPC91c2VyLWRhdGEtY29uc3RyYWludD4KICAgICA8L3NlY3VyaXR5LWNvbnN0cmFpbnQ+Ci0gICAgCisKICAgICA8bG9naW4tY29uZmlnPgogICAgICAgICA8YXV0aC1tZXRob2Q+Rk9STTwvYXV0aC1tZXRob2Q+CiAgICAgICAgIDxyZWFsbS1uYW1lPmZpbGU8L3JlYWxtLW5hbWU+CkBAIC00Nyw2ICs0Nyw2IEBACiAgICAgICAgICAgICA8Zm9ybS1sb2dpbi1wYWdlPi9sb2dpbmZvcm0uanNwPC9mb3JtLWxvZ2luLXBhZ2U+CiAgICAgICAgICAgICA8Zm9ybS1lcnJvci1wYWdlPi9sb2dpbmVycm9yLmpzcDwvZm9ybS1lcnJvci1wYWdlPgogICAgICAgICA8L2Zvcm0tbG9naW4tY29uZmlnPgotICAgIDwvbG9naW4tY29uZmlnPiAgCisgICAgPC9sb2dpbi1jb25maWc+CiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWNhbGxlci1wcmluY2lwYWwvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWNhbGxlci1wcmluY2lwYWwvcG9tLnhtbAppbmRleCA1MzBlNzg5Li41NmM3ODY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jYWxsZXItcHJpbmNpcGFsL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY2FsbGVyLXByaW5jaXBhbC9wb20ueG1sCkBAIC0xNywyMSArMTcsMjEgQEAKIC0tPgogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgotCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5zb3RlcmlhLnRlc3Q8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+c290ZXJpYTwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKLQk8YXJ0aWZhY3RJZD5hcHAtY2FsbGVyLXByaW5jaXBhbDwvYXJ0aWZhY3RJZD4KLQk8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgotCQotCTxidWlsZD4KKyAgICA8YXJ0aWZhY3RJZD5hcHAtY2FsbGVyLXByaW5jaXBhbDwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgorCisgICAgPGJ1aWxkPgogICAgICAgICA8ZmluYWxOYW1lPmFwcC1jYWxsZXItcHJpbmNpcGFsPC9maW5hbE5hbWU+Ci0JPC9idWlsZD4KLSAgICAKKyAgICA8L2J1aWxkPgorCiAgICAgPHByb3BlcnRpZXM+CiAgICAgICAgIDxmYWlsT25NaXNzaW5nV2ViWG1sPmZhbHNlPC9mYWlsT25NaXNzaW5nV2ViWG1sPgogICAgIDwvcHJvcGVydGllcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWNhbGxlci1wcmluY2lwYWwvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9DYWxsZXJTdWJqZWN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY2FsbGVyLXByaW5jaXBhbC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0NhbGxlclN1YmplY3RTZXJ2bGV0LmphdmEKaW5kZXggYmEzYTlmMy4uZmRjNzczOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY2FsbGVyLXByaW5jaXBhbC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0NhbGxlclN1YmplY3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY2FsbGVyLXByaW5jaXBhbC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0NhbGxlclN1YmplY3RTZXJ2bGV0LmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKIHB1YmxpYyBjbGFzcyBDYWxsZXJTdWJqZWN0U2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotICAgIAorCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgU2VjdXJpdHlDb250ZXh0IHNlY3VyaXR5Q29udGV4dDsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY2FsbGVyLXByaW5jaXBhbC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY2FsbGVyLXByaW5jaXBhbC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCmluZGV4IGY2NzdkM2EuLmMwM2I4Y2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWNhbGxlci1wcmluY2lwYWwvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jYWxsZXItcHJpbmNpcGFsL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKQEAgLTM1LDIwICszNSwyMCBAQAogCiBAUmVxdWVzdFNjb3BlZAogcHVibGljIGNsYXNzIFRlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbSBpbXBsZW1lbnRzIEh0dHBBdXRoZW50aWNhdGlvbk1lY2hhbmlzbSB7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSBJZGVudGl0eVN0b3JlSGFuZGxlciBpZGVudGl0eVN0b3JlSGFuZGxlcjsKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBBdXRoZW50aWNhdGlvblN0YXR1cyB2YWxpZGF0ZVJlcXVlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIEh0dHBNZXNzYWdlQ29udGV4dCBodHRwTWVzc2FnZUNvbnRleHQpIHRocm93cyBBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiB7CiAKLSAgICAJLy8gR2V0IHRoZSAoY2FsbGVyKSBuYW1lIGFuZCBwYXNzd29yZCBmcm9tIHRoZSByZXF1ZXN0CisgICAgICAgIC8vIEdldCB0aGUgKGNhbGxlcikgbmFtZSBhbmQgcGFzc3dvcmQgZnJvbSB0aGUgcmVxdWVzdAogICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGZvciB0aGUgc21hbGxlc3QgcG9zc2libGUgZXhhbXBsZSBvbmx5LiBJbiBwcmFjdGljZQogICAgICAgICAvLyBwdXR0aW5nIHRoZSBwYXNzd29yZCBpbiBhIHJlcXVlc3QgcXVlcnkgcGFyYW1ldGVyIGlzIGhpZ2hseQogICAgICAgICAvLyBpbnNlY3VyZQogICAgICAgICBTdHJpbmcgbmFtZSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CiAgICAgICAgIFN0cmluZyBwYXNzd29yZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJwYXNzd29yZCIpOwotICAgIAkKKwogICAgICAgICBpZiAobmFtZSAhPSBudWxsICYmIHBhc3N3b3JkICE9IG51bGwpIHsKIAogICAgICAgICAgICAgLy8gRGVsZWdhdGUgdGhlIHtjcmVkZW50aWFscyBpbiAtPiBpZGVudGl0eSBkYXRhIG91dH0gZnVuY3Rpb24gdG8KQEAgLTY0LDkgKzY0LDkgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGh0dHBNZXNzYWdlQ29udGV4dC5yZXNwb25zZVVuYXV0aG9yaXplZCgpOwogICAgICAgICAgICAgfQotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGh0dHBNZXNzYWdlQ29udGV4dC5kb05vdGhpbmcoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWNhbGxlci1wcmluY2lwYWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWNhbGxlci1wcmluY2lwYWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAppbmRleCAwOWZmZmI0Li42Y2EzNTQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jYWxsZXItcHJpbmNpcGFsL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY2FsbGVyLXByaW5jaXBhbC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCkBAIC0xOCwyNyArMTgsMjcgQEAKIC0tPgogCiA8d2ViLWFwcAotCXhtbG5zPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIGh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8zXzEueHNkIgotCXZlcnNpb249IjMuMSIKKyAgICB4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSBodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18xLnhzZCIKKyAgICB2ZXJzaW9uPSIzLjEiCiA+CiAKLQk8IS0tIFNlY3VyaXR5IGNvbnN0cmFpbnRzIGFuZCByb2xlcy4gLS0+CisgICAgPCEtLSBTZWN1cml0eSBjb25zdHJhaW50cyBhbmQgcm9sZXMuIC0tPgogCi0JPHNlY3VyaXR5LWNvbnN0cmFpbnQ+Ci0JCTx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KLQkJCTx3ZWItcmVzb3VyY2UtbmFtZT5Vc2VyIHBhZ2VzPC93ZWItcmVzb3VyY2UtbmFtZT4KLQkJCTx1cmwtcGF0dGVybj4vcHJvdGVjdGVkU2VydmxldDwvdXJsLXBhdHRlcm4+Ci0JCTwvd2ViLXJlc291cmNlLWNvbGxlY3Rpb24+Ci0JCTxhdXRoLWNvbnN0cmFpbnQ+Ci0JCQk8cm9sZS1uYW1lPmZvbzwvcm9sZS1uYW1lPgotCQk8L2F1dGgtY29uc3RyYWludD4KLQk8L3NlY3VyaXR5LWNvbnN0cmFpbnQ+CisgICAgPHNlY3VyaXR5LWNvbnN0cmFpbnQ+CisgICAgICAgIDx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KKyAgICAgICAgICAgIDx3ZWItcmVzb3VyY2UtbmFtZT5Vc2VyIHBhZ2VzPC93ZWItcmVzb3VyY2UtbmFtZT4KKyAgICAgICAgICAgIDx1cmwtcGF0dGVybj4vcHJvdGVjdGVkU2VydmxldDwvdXJsLXBhdHRlcm4+CisgICAgICAgIDwvd2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CisgICAgICAgIDxhdXRoLWNvbnN0cmFpbnQ+CisgICAgICAgICAgICA8cm9sZS1uYW1lPmZvbzwvcm9sZS1uYW1lPgorICAgICAgICA8L2F1dGgtY29uc3RyYWludD4KKyAgICA8L3NlY3VyaXR5LWNvbnN0cmFpbnQ+CiAKIAotCTxzZWN1cml0eS1yb2xlPgotCQk8cm9sZS1uYW1lPmZvbzwvcm9sZS1uYW1lPgotCTwvc2VjdXJpdHktcm9sZT4KKyAgICA8c2VjdXJpdHktcm9sZT4KKyAgICAgICAgPHJvbGUtbmFtZT5mb288L3JvbGUtbmFtZT4KKyAgICA8L3NlY3VyaXR5LXJvbGU+CiAKIDwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWNhbGxlci1wcmluY2lwYWwvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBDYWxsZXJQcmluY2lwYWxJVC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY2FsbGVyLXByaW5jaXBhbC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcENhbGxlclByaW5jaXBhbElULmphdmEKaW5kZXggMmZmN2YwNS4uYTI3MjczMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY2FsbGVyLXByaW5jaXBhbC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcENhbGxlclByaW5jaXBhbElULmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY2FsbGVyLXByaW5jaXBhbC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcENhbGxlclByaW5jaXBhbElULmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRTdW1tYXJ5KCl7CiAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KLSAgIAorCiAgICAgQERlcGxveW1lbnQodGVzdGFibGUgPSBmYWxzZSkKICAgICBwdWJsaWMgc3RhdGljIEFyY2hpdmU8Pz4gY3JlYXRlRGVwbG95bWVudCgpIHsKICAgICAgICAgcmV0dXJuIG1hdmVuV2FyKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20taWRlbnRpdHktc3RvcmUtaGFuZGxlci9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLWlkZW50aXR5LXN0b3JlLWhhbmRsZXIvcG9tLnhtbAppbmRleCBhYTc2MzNmLi44MDBkMmM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20taWRlbnRpdHktc3RvcmUtaGFuZGxlci9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1pZGVudGl0eS1zdG9yZS1oYW5kbGVyL3BvbS54bWwKQEAgLTE3LDIwICsxNywyMCBAQAogLS0+CiAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+Ci0JPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLnNvdGVyaWEudGVzdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5zb3RlcmlhPC9hcnRpZmFjdElkPgogICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAotCTxhcnRpZmFjdElkPmFwcC1jdXN0b20taWRlbnRpdHktc3RvcmUtaGFuZGxlcjwvYXJ0aWZhY3RJZD4KLQk8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgorICAgIDxhcnRpZmFjdElkPmFwcC1jdXN0b20taWRlbnRpdHktc3RvcmUtaGFuZGxlcjwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgogCi0JPGJ1aWxkPgorICAgIDxidWlsZD4KICAgICAgICAgPGZpbmFsTmFtZT5hcHAtY3VzdG9tLWlkZW50aXR5LXN0b3JlLWhhbmRsZXI8L2ZpbmFsTmFtZT4KLQk8L2J1aWxkPgorICAgIDwvYnVpbGQ+CiAKICAgICA8cHJvcGVydGllcz4KICAgICAgICAgPGZhaWxPbk1pc3NpbmdXZWJYbWw+ZmFsc2U8L2ZhaWxPbk1pc3NpbmdXZWJYbWw+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20taWRlbnRpdHktc3RvcmUtaGFuZGxlci9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0xkYXBTZXR1cC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLWlkZW50aXR5LXN0b3JlLWhhbmRsZXIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9MZGFwU2V0dXAuamF2YQppbmRleCA0ODY4YWUyLi4yZTVlNjRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20taWRlbnRpdHktc3RvcmUtaGFuZGxlci9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0xkYXBTZXR1cC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1pZGVudGl0eS1zdG9yZS1oYW5kbGVyL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvTGRhcFNldHVwLmphdmEKQEAgLTMxLDE0ICszMSwxNCBAQAogICogU3RhcnRzIHVwIHRoZSBlbWJlZGRlZCBVbmJvdW5kaWQgTERBUCBzZXJ2ZXIgb24gcG9ydCAzMzM4OSBhbmQgbG9hZHMgYSB0ZXN0IGRpcmVjdG9yeQogICogaW50byBpdCBjb250YWluaW5nIHRoZSBzYW1lIGNhbGxlci0gYW5kIHJvbGVzIG5hbWVzIGFzIHRoZSBEYXRhYmFzZSBhbmQgRW1iZWRkZWQgaWRlbml0eQogICogc3RvcmVzIGFyZSB1c2luZy4KLSAqIAorICoKICAqIEBhdXRob3IgQXJqYW4gVGlqbXMKICAqCiAgKi8KIEBTdGFydHVwCiBAU2luZ2xldG9uCiBwdWJsaWMgY2xhc3MgTGRhcFNldHVwIHsKLSAgICAKKwogICAgIHByaXZhdGUgSW5NZW1vcnlEaXJlY3RvcnlTZXJ2ZXIgZGlyZWN0b3J5U2VydmVyOwogCiAgICAgQFBvc3RDb25zdHJ1Y3QKQEAgLTQ5LDggKzQ5LDggQEAKICAgICAgICAgICAgICAgICBuZXcgSW5NZW1vcnlMaXN0ZW5lckNvbmZpZygibXlMaXN0ZW5lciIsIG51bGwsIDMzMzg5LCBudWxsLCBudWxsLCBudWxsKSk7CiAKICAgICAgICAgICAgIGRpcmVjdG9yeVNlcnZlciA9IG5ldyBJbk1lbW9yeURpcmVjdG9yeVNlcnZlcihjb25maWcpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkaXJlY3RvcnlTZXJ2ZXIuaW1wb3J0RnJvbUxESUYodHJ1ZSwgCisKKyAgICAgICAgICAgIGRpcmVjdG9yeVNlcnZlci5pbXBvcnRGcm9tTERJRih0cnVlLAogICAgICAgICAgICAgICAgIG5ldyBMRElGUmVhZGVyKHRoaXMuZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCIvdGVzdC5sZGlmIikpKTsKIAogICAgICAgICAgICAgZGlyZWN0b3J5U2VydmVyLnN0YXJ0TGlzdGVuaW5nKCk7CkBAIC01OCwxMCArNTgsMTAgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBAUHJlRGVzdHJveQogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7CiAgICAgICAgIGRpcmVjdG9yeVNlcnZlci5zaHV0RG93bih0cnVlKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1pZGVudGl0eS1zdG9yZS1oYW5kbGVyL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20taWRlbnRpdHktc3RvcmUtaGFuZGxlci9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCmluZGV4IDY2NWU3MGYuLjg5ZDU3MjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1pZGVudGl0eS1zdG9yZS1oYW5kbGVyL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLWlkZW50aXR5LXN0b3JlLWhhbmRsZXIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YQpAQCAtMzMsNyArMzMsNyBAQAogCiBAQXBwbGljYXRpb25TY29wZWQKIHB1YmxpYyBjbGFzcyBUZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20gaW1wbGVtZW50cyBIdHRwQXV0aGVudGljYXRpb25NZWNoYW5pc20gewotICAgIAorCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgSWRlbnRpdHlTdG9yZUhhbmRsZXIgaWRlbnRpdHlTdG9yZUhhbmRsZXI7CiAKQEAgLTU2LDE3ICs1NiwxNyBAQAogCiAgICAgICAgICAgICBpZiAocmVzdWx0LmdldFN0YXR1cygpID09IFZBTElEKSB7CiAgICAgICAgICAgICAgICAgLy8gQ29tbXVuaWNhdGUgdGhlIGRldGFpbHMgb2YgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlciB0byB0aGUKLSAgICAgICAgICAgICAgICAvLyBjb250YWluZXIuIEluIG1hbnkgY2FzZXMgdGhlIHVuZGVybHlpbmcgaGFuZGxlciB3aWxsIGp1c3Qgc3RvcmUgdGhlIGRldGFpbHMgCi0gICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBjb250YWluZXIgd2lsbCBhY3R1YWxseSBoYW5kbGUgdGhlIGxvZ2luIGFmdGVyIHdlIHJldHVybiBmcm9tIAorICAgICAgICAgICAgICAgIC8vIGNvbnRhaW5lci4gSW4gbWFueSBjYXNlcyB0aGUgdW5kZXJseWluZyBoYW5kbGVyIHdpbGwganVzdCBzdG9yZSB0aGUgZGV0YWlscworICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgY29udGFpbmVyIHdpbGwgYWN0dWFsbHkgaGFuZGxlIHRoZSBsb2dpbiBhZnRlciB3ZSByZXR1cm4gZnJvbQogICAgICAgICAgICAgICAgIC8vIHRoaXMgbWV0aG9kLgogICAgICAgICAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQubm90aWZ5Q29udGFpbmVyQWJvdXRMb2dpbigKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdldENhbGxlclByaW5jaXBhbCgpLCByZXN1bHQuZ2V0Q2FsbGVyR3JvdXBzKCkpOwotICAgICAgICAgICAgfSAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgcmV0dXJuIGh0dHBNZXNzYWdlQ29udGV4dC5yZXNwb25zZVVuYXV0aG9yaXplZCgpOwotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGh0dHBNZXNzYWdlQ29udGV4dC5kb05vdGhpbmcoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1pZGVudGl0eS1zdG9yZS1oYW5kbGVyL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dsYXNzZmlzaC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLWlkZW50aXR5LXN0b3JlLWhhbmRsZXIvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvZ2xhc3NmaXNoLXdlYi54bWwKaW5kZXggY2RhZjk0OS4uNmNlZmE3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLWlkZW50aXR5LXN0b3JlLWhhbmRsZXIvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvZ2xhc3NmaXNoLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLWlkZW50aXR5LXN0b3JlLWhhbmRsZXIvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvZ2xhc3NmaXNoLXdlYi54bWwKQEAgLTI0LDMyICsyNCwzMiBAQAogICAgICAgICA8cm9sZS1uYW1lPmZvbzwvcm9sZS1uYW1lPgogICAgICAgICA8Z3JvdXAtbmFtZT5mb288L2dyb3VwLW5hbWU+CiAgICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgICAgICA8cm9sZS1uYW1lPmJhcjwvcm9sZS1uYW1lPgogICAgICAgICA8Z3JvdXAtbmFtZT5iYXI8L2dyb3VwLW5hbWU+CiAgICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgICAgICA8cm9sZS1uYW1lPmthejwvcm9sZS1uYW1lPgogICAgICAgICA8Z3JvdXAtbmFtZT5rYXo8L2dyb3VwLW5hbWU+CiAgICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgICAgICA8cm9sZS1uYW1lPmJhejwvcm9sZS1uYW1lPgogICAgICAgICA8Z3JvdXAtbmFtZT5iYXo8L2dyb3VwLW5hbWU+CiAgICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgICAgICA8cm9sZS1uYW1lPmdyb3VwMTwvcm9sZS1uYW1lPgogICAgICAgICA8Z3JvdXAtbmFtZT5ncm91cDE8L2dyb3VwLW5hbWU+CiAgICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gICAgCisKICAgICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICAgICAgPHJvbGUtbmFtZT5ncm91cDI8L3JvbGUtbmFtZT4KICAgICAgICAgPGdyb3VwLW5hbWU+Z3JvdXAyPC9ncm91cC1uYW1lPgogICAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAgIAorCiAgICAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgICAgIDxyb2xlLW5hbWU+Z3JvdXAzPC9yb2xlLW5hbWU+CiAgICAgICAgIDxncm91cC1uYW1lPmdyb3VwMzwvZ3JvdXAtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1pZGVudGl0eS1zdG9yZS1oYW5kbGVyL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwQ3VzdG9tSWRlbnRpdHlTdG9yZUhhbmRsZXJJVC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLWlkZW50aXR5LXN0b3JlLWhhbmRsZXIvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBDdXN0b21JZGVudGl0eVN0b3JlSGFuZGxlcklULmphdmEKaW5kZXggOWM5ODdkYy4uNDk4MjU0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLWlkZW50aXR5LXN0b3JlLWhhbmRsZXIvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBDdXN0b21JZGVudGl0eVN0b3JlSGFuZGxlcklULmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLWlkZW50aXR5LXN0b3JlLWhhbmRsZXIvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBDdXN0b21JZGVudGl0eVN0b3JlSGFuZGxlcklULmphdmEKQEAgLTUyLDE2ICs1MiwxNiBAQAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEF1dGhlbnRpY2F0ZWQoKSB7CiAgICAgICAgIGFzc2VydEF1dGhlbnRpY2F0ZWQoCi0gICAgICAgICAgICAid2ViIiwgInJlemEiLCAKKyAgICAgICAgICAgICJ3ZWIiLCAicmV6YSIsCiAgICAgICAgICAgICByZWFkRnJvbVNlcnZlcigiL3NlcnZsZXQ/bmFtZT1yZXphJnBhc3N3b3JkPXNlY3JldDEiKSwKLSAgICAgICAgICAgIC8vIE9ubHkgZ3JvdXBzIGZyb20gdGhlIAorICAgICAgICAgICAgLy8gT25seSBncm91cHMgZnJvbSB0aGUKICAgICAgICAgICAgICJiYXoiKTsKICAgICB9CiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RCbGFja2xpc3RlZCgpIHsKICAgICAgICAgYXNzZXJ0Tm90QXV0aGVudGljYXRlZCgKLSAgICAgICAgICAgICJ3ZWIiLCAicnVkeSIsIAorICAgICAgICAgICAgIndlYiIsICJydWR5IiwKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJ1ZHkmcGFzc3dvcmQ9cHciKSwKICAgICAgICAgICAgICJmb28iLCAiYmFyIik7CiAgICAgfQpAQCAtNzUsNyArNzUsNyBAQAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdE5vdEF1dGhlbnRpY2F0ZWRXcm9uZ05hbWUoKSB7CiAgICAgICAgIGFzc2VydE5vdEF1dGhlbnRpY2F0ZWQoCi0gICAgICAgICAgICAid2ViIiwgInJlemEiLCAKKyAgICAgICAgICAgICJ3ZWIiLCAicmV6YSIsCiAgICAgICAgICAgICByZWFkRnJvbVNlcnZlcigiL3NlcnZsZXQ/bmFtZT1yb21vJnBhc3N3b3JkPXNlY3JldDEiKSwKICAgICAgICAgICAgICJmb28iLCAiYmFyIiwgImJheiIpOwogICAgIH0KQEAgLTgzLDcgKzgzLDcgQEAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkV3JvbmdQYXNzd29yZCgpIHsKICAgICAgICAgYXNzZXJ0Tm90QXV0aGVudGljYXRlZCgKLSAgICAgICAgICAgICJ3ZWIiLCAicmV6YSIsIAorICAgICAgICAgICAgIndlYiIsICJyZXphIiwKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJlemEmcGFzc3dvcmQ9d3JvbmdwYXNzd29yZCIpLAogICAgICAgICAgICAgImZvbyIsICJiYXIiLCAiYmF6Iik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXJlbWVtYmVybWUvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1yZW1lbWJlcm1lL3BvbS54bWwKaW5kZXggNmZkNDFjMi4uZjdjYTAwYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXJlbWVtYmVybWUvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tcmVtZW1iZXJtZS9wb20ueG1sCkBAIC0xNywyMSArMTcsMjEgQEAKIC0tPgogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgotCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5zb3RlcmlhLnRlc3Q8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+c290ZXJpYTwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKLQk8YXJ0aWZhY3RJZD5hcHAtY3VzdG9tLXJlbWVtYmVybWU8L2FydGlmYWN0SWQ+Ci0JPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KLQkKLQk8YnVpbGQ+CisgICAgPGFydGlmYWN0SWQ+YXBwLWN1c3RvbS1yZW1lbWJlcm1lPC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+CisKKyAgICA8YnVpbGQ+CiAgICAgICAgIDxmaW5hbE5hbWU+YXBwLWN1c3RvbS1yZW1lbWJlcm1lPC9maW5hbE5hbWU+Ci0JPC9idWlsZD4KLSAgICAKKyAgICA8L2J1aWxkPgorCiAgICAgPHByb3BlcnRpZXM+CiAgICAgICAgIDxmYWlsT25NaXNzaW5nV2ViWG1sPmZhbHNlPC9mYWlsT25NaXNzaW5nV2ViWG1sPgogICAgIDwvcHJvcGVydGllcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1yZW1lbWJlcm1lL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXJlbWVtYmVybWUvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TZXJ2bGV0LmphdmEKaW5kZXggNmNmYWI1Ny4uZGRiZGRlMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXJlbWVtYmVybWUvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXJlbWVtYmVybWUvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TZXJ2bGV0LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIC8qKgogICogVGVzdCBTZXJ2bGV0IHRoYXQgcHJpbnRzIG91dCB0aGUgbmFtZSBvZiB0aGUgYXV0aGVudGljYXRlZCBjYWxsZXIgYW5kIHdoZXRoZXIKICAqIHRoaXMgY2FsbGVyIGlzIGluIGFueSBvZiB0aGUgcm9sZXMge2ZvbywgYmFyLCBrYXp9Ci0gKiAKKyAqCiAgKgogICovCiBARGVjbGFyZVJvbGVzKHsgImZvbyIsICJiYXIiLCAia2F6IiB9KQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICAgICAgcmVxdWVzdC5sb2dvdXQoKTsgLy8gc2xpZ2h0bHkgaWxsLWRlZmluZWQsIGJ1dCBvbmx5IGZvciBjdXJyZW50IHJlcXVlc3QKICAgICAgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmludmFsaWRhdGUoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgiVGhpcyBpcyBhIHNlcnZsZXQgXG4iKTsKIAogICAgICAgICBTdHJpbmcgd2ViTmFtZSA9IG51bGw7CkBAIC01Nyw5ICs1Nyw5IEBACiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJ3ZWIgdXNlciBoYXMgcm9sZSBcImZvb1wiOiAiICsgcmVxdWVzdC5pc1VzZXJJblJvbGUoImZvbyIpICsgIlxuIik7CiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJ3ZWIgdXNlciBoYXMgcm9sZSBcImJhclwiOiAiICsgcmVxdWVzdC5pc1VzZXJJblJvbGUoImJhciIpICsgIlxuIik7CiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJ3ZWIgdXNlciBoYXMgcm9sZSBcImthelwiOiAiICsgcmVxdWVzdC5pc1VzZXJJblJvbGUoImtheiIpICsgIlxuIik7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBtZWNoYW5pc21DYWxsZWQgPSAoU3RyaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZSgiYXV0aGVudGljYXRpb24tbWVjaGFuaXNtLWNhbGxlZCIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgiXG5hdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gY2FsbGVkOiAiICsgKG1lY2hhbmlzbUNhbGxlZCAhPSBudWxsPyBtZWNoYW5pc21DYWxsZWQgOiBmYWxzZSkgKyAiXG4iKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1yZW1lbWJlcm1lL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tcmVtZW1iZXJtZS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCmluZGV4IDgzZjMwYTQuLjE4YWQwYjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1yZW1lbWJlcm1lL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXJlbWVtYmVybWUvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YQpAQCAtNDksNyArNDksNyBAQAogCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgUmVtZW1iZXJNZUNvbmZpZ0JlYW4gcmVtZW1iZXJNZUNvbmZpZ0JlYW47Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSBJZGVudGl0eVN0b3JlSGFuZGxlciBpZGVudGl0eVN0b3JlSGFuZGxlcjsKIApAQCAtNTcsNyArNTcsNyBAQAogICAgIHB1YmxpYyBBdXRoZW50aWNhdGlvblN0YXR1cyB2YWxpZGF0ZVJlcXVlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIEh0dHBNZXNzYWdlQ29udGV4dCBodHRwTWVzc2FnZUNvbnRleHQpIHRocm93cyBBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiB7CiAKICAgICAgICAgcmVxdWVzdC5zZXRBdHRyaWJ1dGUoImF1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbS1jYWxsZWQiLCAidHJ1ZSIpOwotICAgICAgICAKKwogICAgICAgICBpZiAocmVxdWVzdC5nZXRQYXJhbWV0ZXIoIm5hbWUiKSAhPSBudWxsICYmIHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJwYXNzd29yZCIpICE9IG51bGwpIHsKIAogICAgICAgICAgICAgLy8gR2V0IHRoZSAoY2FsbGVyKSBuYW1lIGFuZCBwYXNzd29yZCBmcm9tIHRoZSByZXF1ZXN0CkBAIC03NCwyNyArNzQsMjcgQEAKIAogICAgICAgICAgICAgaWYgKHJlc3VsdC5nZXRTdGF0dXMoKSA9PSBWQUxJRCkgewogICAgICAgICAgICAgICAgIC8vIENvbW11bmljYXRlIHRoZSBkZXRhaWxzIG9mIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIgdG8gdGhlCi0gICAgICAgICAgICAgICAgLy8gY29udGFpbmVyLiBJbiBtYW55IGNhc2VzIHRoZSB1bmRlcmx5aW5nIGhhbmRsZXIgd2lsbCBqdXN0IHN0b3JlIHRoZSBkZXRhaWxzIAotICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgY29udGFpbmVyIHdpbGwgYWN0dWFsbHkgaGFuZGxlIHRoZSBsb2dpbiBhZnRlciB3ZSByZXR1cm4gZnJvbSAKKyAgICAgICAgICAgICAgICAvLyBjb250YWluZXIuIEluIG1hbnkgY2FzZXMgdGhlIHVuZGVybHlpbmcgaGFuZGxlciB3aWxsIGp1c3Qgc3RvcmUgdGhlIGRldGFpbHMKKyAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIGNvbnRhaW5lciB3aWxsIGFjdHVhbGx5IGhhbmRsZSB0aGUgbG9naW4gYWZ0ZXIgd2UgcmV0dXJuIGZyb20KICAgICAgICAgICAgICAgICAvLyB0aGlzIG1ldGhvZC4KICAgICAgICAgICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0Lm5vdGlmeUNvbnRhaW5lckFib3V0TG9naW4oCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5nZXRDYWxsZXJQcmluY2lwYWwoKSwgcmVzdWx0LmdldENhbGxlckdyb3VwcygpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGh0dHBNZXNzYWdlQ29udGV4dC5yZXNwb25zZVVuYXV0aG9yaXplZCgpOwogICAgICAgICAgICAgfQotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGh0dHBNZXNzYWdlQ29udGV4dC5kb05vdGhpbmcoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgQm9vbGVhbiBpc1JlbWVtYmVyTWUoSHR0cE1lc3NhZ2VDb250ZXh0IGh0dHBNZXNzYWdlQ29udGV4dCkgewogICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRQYXJhbWV0ZXIoInJlbWVtYmVybWUiKSAhPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIC8vIFdvcmthcm91bmQgZm9yIHBvc3NpYmxlIENESSBidWc7IGF0IGxlYXN0IGluIFdlbGQgMi4zLjIgZGVmYXVsdCBtZXRob2RzIGRvbid0IHNlZW0gdG8gYmUgaW50ZXJjZXB0ZWQKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBjbGVhblN1YmplY3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIEh0dHBNZXNzYWdlQ29udGV4dCBodHRwTWVzc2FnZUNvbnRleHQpIHsKLSAgICAJSHR0cEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLnN1cGVyLmNsZWFuU3ViamVjdChyZXF1ZXN0LCByZXNwb25zZSwgaHR0cE1lc3NhZ2VDb250ZXh0KTsKKyAgICAgICAgSHR0cEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLnN1cGVyLmNsZWFuU3ViamVjdChyZXF1ZXN0LCByZXNwb25zZSwgaHR0cE1lc3NhZ2VDb250ZXh0KTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1yZW1lbWJlcm1lL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dsYXNzZmlzaC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXJlbWVtYmVybWUvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvZ2xhc3NmaXNoLXdlYi54bWwKaW5kZXggNjkzNzI0NC4uMTFkMGVlNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXJlbWVtYmVybWUvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvZ2xhc3NmaXNoLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXJlbWVtYmVybWUvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvZ2xhc3NmaXNoLXdlYi54bWwKQEAgLTI0LDEyICsyNCwxMiBAQAogICAgICAgICA8cm9sZS1uYW1lPmZvbzwvcm9sZS1uYW1lPgogICAgICAgICA8Z3JvdXAtbmFtZT5mb288L2dyb3VwLW5hbWU+CiAgICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgICAgICA8cm9sZS1uYW1lPmJhcjwvcm9sZS1uYW1lPgogICAgICAgICA8Z3JvdXAtbmFtZT5iYXI8L2dyb3VwLW5hbWU+CiAgICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgICAgICA8cm9sZS1uYW1lPmthejwvcm9sZS1uYW1lPgogICAgICAgICA8Z3JvdXAtbmFtZT5rYXo8L2dyb3VwLW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tcmVtZW1iZXJtZS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcEN1c3RvbVJlbWVtYmVyTWVJVC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXJlbWVtYmVybWUvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBDdXN0b21SZW1lbWJlck1lSVQuamF2YQppbmRleCBhMzg3NDdlLi5iNzk3M2U0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tcmVtZW1iZXJtZS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcEN1c3RvbVJlbWVtYmVyTWVJVC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1yZW1lbWJlcm1lL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwQ3VzdG9tUmVtZW1iZXJNZUlULmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRTdW1tYXJ5KCl7CiAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KLSAgIAorCiAgICAgQERlcGxveW1lbnQodGVzdGFibGUgPSBmYWxzZSkKICAgICBwdWJsaWMgc3RhdGljIEFyY2hpdmU8Pz4gY3JlYXRlRGVwbG95bWVudCgpIHsKICAgICAgICAgcmV0dXJuIG1hdmVuV2FyKCk7CkBAIC03MiwxMjQgKzcyLDEyNCBAQAogICAgICAgICBhc3NlcnREZWZhdWx0QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJlemEmcGFzc3dvcmQ9c2VjcmV0MSIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkKCkgewogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldCIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkV3JvbmdOYW1lKCkgewogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJvbW8mcGFzc3dvcmQ9c2VjcmV0MSIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkV3JvbmdQYXNzd29yZCgpIHsKICAgICAgICAgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICByZWFkRnJvbVNlcnZlcigiL3NlcnZsZXQ/bmFtZT1yZXphJnBhc3N3b3JkPXdyb25ncGFzc3dvcmQiKSk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0QXV0aGVudGljYXRlZFJlbWVtYmVyTWUoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIDEuIEluaXRpYWxseSByZXF1ZXN0IHBhZ2Ugd2hlbiB3ZSdyZSBub3QgYXV0aGVudGljYXRlZAotICAgICAgICAKKwogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldCIpKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy8gMi4gQXV0aGVudGljYXRlIHdpdGhvdXQgcmVtZW1iZXIgbWUKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHJlc3BvbnNlID0gcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0P25hbWU9cmV6YSZwYXNzd29yZD1zZWNyZXQxIik7Ci0gICAgICAgIAorCiAgICAgICAgIGFzc2VydERlZmF1bHRBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVzcG9uc2UpOwotICAgICAgICAKKwogICAgICAgICAvLyBGb3IgdGhlIGluaXRpYWwgYXV0aGVudGljYXRpb24sIHRoZSBtZWNoYW5pc20gc2hvdWxkIGJlIGNhbGxlZAotICAgICAgICAKKwogICAgICAgICBhc3NlcnRUcnVlKAotICAgICAgICAgICAgIkF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCwgYnV0IHdhc24ndCIsIAorICAgICAgICAgICAgIkF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCwgYnV0IHdhc24ndCIsCiAgICAgICAgICAgICByZXNwb25zZS5jb250YWlucygiYXV0aGVudGljYXRpb24gbWVjaGFuaXNtIGNhbGxlZDogdHJ1ZSIpKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy8gMy4gUmVxdWVzdCBzYW1lIHBhZ2UgYWdhaW4gd2l0aGluIHNhbWUgaHR0cCBzZXNzaW9uLCB3aXRob3V0IHJlbWVtYmVyIG1lCiAgICAgICAgIC8vICAgIHNwZWNpZmllZCBzaG91bGQgTk9UIGJlIGF1dGhlbnRpY2F0ZWQKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2UgPSByZWFkRnJvbVNlcnZlcigiL3NlcnZsZXQiKTsKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICByZXNwb25zZSk7Ci0gICAgICAgIAotICAgCisKKwogICAgICAgICAvLyA0LiBBdXRoZW50aWNhdGUgd2l0aCByZW1lbWJlciBtZQotICAgICAgICAKKwogICAgICAgICByZXNwb25zZSA9IHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJlemEmcGFzc3dvcmQ9c2VjcmV0MSZyZW1lbWJlcm1lPXRydWUiKTsKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0RGVmYXVsdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICByZXNwb25zZSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIEZvciB0aGUgaW5pdGlhbCBhdXRoZW50aWNhdGlvbiwgdGhlIG1lY2hhbmlzbSBzaG91bGQgYmUgY2FsbGVkIGFnYWluCi0gICAgICAgIAorCiAgICAgICAgIGFzc2VydFRydWUoCi0gICAgICAgICAgICAiQXV0aGVudGljYXRpb24gbWVjaGFuaXNtIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkLCBidXQgd2Fzbid0IiwgCisgICAgICAgICAgICAiQXV0aGVudGljYXRpb24gbWVjaGFuaXNtIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkLCBidXQgd2Fzbid0IiwKICAgICAgICAgICAgIHJlc3BvbnNlLmNvbnRhaW5zKCJhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gY2FsbGVkOiB0cnVlIikpOwotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICAvLyA1LiBSZXF1ZXN0IHNhbWUgcGFnZSBhZ2FpbiB3aXRoaW4gc2FtZSBodHRwIHNlc3Npb24sIHdpdGggcmVtZW1iZXIgbWUKICAgICAgICAgLy8gICAgc3BlY2lmaWVkIHNob3VsZCBiZSBhdXRoZW50aWNhdGVkCi0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlID0gcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0Iik7Ci0gICAgICAgIAorCiAgICAgICAgIGFzc2VydERlZmF1bHRBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVzcG9uc2UpOwotICAgICAgICAKKwogICAgICAgICAvLyBGb3IgdGhlIHN1YnNlcXVlbnQgYXV0aGVudGljYXRpb24sIHRoZSBtZWNoYW5pc20gc2hvdWxkIG5vdCBiZSBjYWxsZWQgYWdhaW4KICAgICAgICAgLy8gKHRoZSByZW1lbWJlciBtZSBpbnRlcmNlcHRvciB0YWtlcyBjYXJlIG9mIHRoaXMpCi0gICAgICAgIAorCiAgICAgICAgIGFzc2VydFRydWUoCi0gICAgICAgICAgICAiQXV0aGVudGljYXRpb24gbWVjaGFuaXNtIHNob3VsZCBub3QgaGF2ZSBiZWVuIGNhbGxlZCwgYnV0IHdhcyIsIAorICAgICAgICAgICAgIkF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSBzaG91bGQgbm90IGhhdmUgYmVlbiBjYWxsZWQsIGJ1dCB3YXMiLAogICAgICAgICAgICAgcmVzcG9uc2UuY29udGFpbnMoImF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSBjYWxsZWQ6IGZhbHNlIikpOwotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICAvLyA2LiAiRXhwaXJlIiB0aGUgc2Vzc2lvbiBieSByZW1vdmluZyBhbGwgY29va2llcyBleGNlcHQgdGhlCiAgICAgICAgIC8vICAgIHJlbWVtYmVyIG1lIGNvb2tpZQotICAgICAgICAKKwogICAgICAgICBmb3IgKENvb2tpZSBjb29raWUgOiBnZXRXZWJDbGllbnQoKS5nZXRDb29raWVNYW5hZ2VyKCkuZ2V0Q29va2llcygpKSB7CiAgICAgICAgICAgICBpZiAoISJHTEFTU0ZJU0hDT09LSUUiLmVxdWFscyhjb29raWUuZ2V0TmFtZSgpKSkgewogICAgICAgICAgICAgICAgIGdldFdlYkNsaWVudCgpLmdldENvb2tpZU1hbmFnZXIoKS5yZW1vdmVDb29raWUoY29va2llKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBSZXF1ZXN0IHNhbWUgcGFnZSBhZ2FpbgotICAgICAgICAKKwogICAgICAgICByZXNwb25zZSA9IHJlYWRGcm9tU2VydmVyKCIvc2VydmxldCIpOwotICAgICAgICAKKwogICAgICAgICAvLyBTaG91bGQgc3RpbGwgYmUgYXV0aGVudGljYXRlZAotICAgICAgICAKKwogICAgICAgICBhc3NlcnREZWZhdWx0QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlc3BvbnNlKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gRm9yIHRoZSBzdWJzZXF1ZW50IGF1dGhlbnRpY2F0aW9uLCB0aGUgbWVjaGFuaXNtIHNob3VsZCBub3QgYmUgY2FsbGVkIGFnYWluCiAgICAgICAgIC8vICh0aGUgcmVtZW1iZXIgbWUgaW50ZXJjZXB0b3IgdGFrZXMgY2FyZSBvZiB0aGlzKQotICAgICAgICAKKwogICAgICAgICBhc3NlcnRUcnVlKAotICAgICAgICAgICAgIkF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSBzaG91bGQgbm90IGhhdmUgYmVlbiBjYWxsZWQsIGJ1dCB3YXMiLCAKKyAgICAgICAgICAgICJBdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gc2hvdWxkIG5vdCBoYXZlIGJlZW4gY2FsbGVkLCBidXQgd2FzIiwKICAgICAgICAgICAgIHJlc3BvbnNlLmNvbnRhaW5zKCJhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gY2FsbGVkOiBmYWxzZSIpKTsKIAotICAgICAgICAKKwogICAgICAgICAvLyA3LiBMb2dvdXQuIFNob3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCBhbnltb3JlCi0gICAgICAgIAorCiAgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0P2xvZ291dD10cnVlIikpOwotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICAvLyA4LiBSZXF1ZXN0IHNhbWUgcGFnZSBhZ2Fpbiwgc2hvdWxkIHN0aWxsIG5vdCBiZSBhdXRoZW50aWNhdGVkCi0gICAgICAgIAorCiAgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0IikpOwotICAgICAgIAorCiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tc2Vzc2lvbi9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXNlc3Npb24vcG9tLnhtbAppbmRleCBlZDQ3Y2QzLi42ZmU5YmNlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tc2Vzc2lvbi9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1zZXNzaW9uL3BvbS54bWwKQEAgLTE3LDIxICsxNywyMSBAQAogLS0+CiAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+Ci0JPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLnNvdGVyaWEudGVzdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5zb3RlcmlhPC9hcnRpZmFjdElkPgogICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAotCTxhcnRpZmFjdElkPmFwcC1jdXN0b20tc2Vzc2lvbjwvYXJ0aWZhY3RJZD4KLQk8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgotCQotCTxidWlsZD4KKyAgICA8YXJ0aWZhY3RJZD5hcHAtY3VzdG9tLXNlc3Npb248L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KKworICAgIDxidWlsZD4KICAgICAgICAgPGZpbmFsTmFtZT5hcHAtY3VzdG9tLXNlc3Npb248L2ZpbmFsTmFtZT4KLQk8L2J1aWxkPgotICAgIAorICAgIDwvYnVpbGQ+CisKICAgICA8cHJvcGVydGllcz4KICAgICAgICAgPGZhaWxPbk1pc3NpbmdXZWJYbWw+ZmFsc2U8L2ZhaWxPbk1pc3NpbmdXZWJYbWw+CiAgICAgPC9wcm9wZXJ0aWVzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXNlc3Npb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tc2Vzc2lvbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1NlcnZsZXQuamF2YQppbmRleCA2Y2ZhYjU3Li5kZGJkZGUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tc2Vzc2lvbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tc2Vzc2lvbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1NlcnZsZXQuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogLyoqCiAgKiBUZXN0IFNlcnZsZXQgdGhhdCBwcmludHMgb3V0IHRoZSBuYW1lIG9mIHRoZSBhdXRoZW50aWNhdGVkIGNhbGxlciBhbmQgd2hldGhlcgogICogdGhpcyBjYWxsZXIgaXMgaW4gYW55IG9mIHRoZSByb2xlcyB7Zm9vLCBiYXIsIGthen0KLSAqIAorICoKICAqCiAgKi8KIEBEZWNsYXJlUm9sZXMoeyAiZm9vIiwgImJhciIsICJrYXoiIH0pCkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgICAgICByZXF1ZXN0LmxvZ291dCgpOyAvLyBzbGlnaHRseSBpbGwtZGVmaW5lZCwgYnV0IG9ubHkgZm9yIGN1cnJlbnQgcmVxdWVzdAogICAgICAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuaW52YWxpZGF0ZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJUaGlzIGlzIGEgc2VydmxldCBcbiIpOwogCiAgICAgICAgIFN0cmluZyB3ZWJOYW1lID0gbnVsbDsKQEAgLTU3LDkgKzU3LDkgQEAKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoIndlYiB1c2VyIGhhcyByb2xlIFwiZm9vXCI6ICIgKyByZXF1ZXN0LmlzVXNlckluUm9sZSgiZm9vIikgKyAiXG4iKTsKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoIndlYiB1c2VyIGhhcyByb2xlIFwiYmFyXCI6ICIgKyByZXF1ZXN0LmlzVXNlckluUm9sZSgiYmFyIikgKyAiXG4iKTsKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoIndlYiB1c2VyIGhhcyByb2xlIFwia2F6XCI6ICIgKyByZXF1ZXN0LmlzVXNlckluUm9sZSgia2F6IikgKyAiXG4iKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIG1lY2hhbmlzbUNhbGxlZCA9IChTdHJpbmcpIHJlcXVlc3QuZ2V0QXR0cmlidXRlKCJhdXRoZW50aWNhdGlvbi1tZWNoYW5pc20tY2FsbGVkIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJcbmF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSBjYWxsZWQ6ICIgKyAobWVjaGFuaXNtQ2FsbGVkICE9IG51bGw/IG1lY2hhbmlzbUNhbGxlZCA6IGZhbHNlKSArICJcbiIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXNlc3Npb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1zZXNzaW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKaW5kZXggOGRmMTAyMS4uMjI3YWU0YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXNlc3Npb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tc2Vzc2lvbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiBAUmVxdWVzdFNjb3BlZAogQEF1dG9BcHBseVNlc3Npb24KIHB1YmxpYyBjbGFzcyBUZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20gaW1wbGVtZW50cyBIdHRwQXV0aGVudGljYXRpb25NZWNoYW5pc20gewotICAgIAorCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgSWRlbnRpdHlTdG9yZUhhbmRsZXIgaWRlbnRpdHlTdG9yZUhhbmRsZXI7CiAKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICBwdWJsaWMgQXV0aGVudGljYXRpb25TdGF0dXMgdmFsaWRhdGVSZXF1ZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBIdHRwTWVzc2FnZUNvbnRleHQgaHR0cE1lc3NhZ2VDb250ZXh0KSB0aHJvd3MgQXV0aGVudGljYXRpb25FeGNlcHRpb24gewogCiAgICAgICAgIHJlcXVlc3Quc2V0QXR0cmlidXRlKCJhdXRoZW50aWNhdGlvbi1tZWNoYW5pc20tY2FsbGVkIiwgInRydWUiKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJuYW1lIikgIT0gbnVsbCAmJiByZXF1ZXN0LmdldFBhcmFtZXRlcigicGFzc3dvcmQiKSAhPSBudWxsKSB7CiAKICAgICAgICAgICAgIC8vIEdldCB0aGUgKGNhbGxlcikgbmFtZSBhbmQgcGFzc3dvcmQgZnJvbSB0aGUgcmVxdWVzdApAQCAtNjEsMTcgKzYxLDE3IEBACiAKICAgICAgICAgICAgIGlmIChyZXN1bHQuZ2V0U3RhdHVzKCkgPT0gVkFMSUQpIHsKICAgICAgICAgICAgICAgICAvLyBDb21tdW5pY2F0ZSB0aGUgZGV0YWlscyBvZiB0aGUgYXV0aGVudGljYXRlZCB1c2VyIHRvIHRoZQotICAgICAgICAgICAgICAgIC8vIGNvbnRhaW5lci4gSW4gbWFueSBjYXNlcyB0aGUgdW5kZXJseWluZyBoYW5kbGVyIHdpbGwganVzdCBzdG9yZSB0aGUgZGV0YWlscyAKLSAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIGNvbnRhaW5lciB3aWxsIGFjdHVhbGx5IGhhbmRsZSB0aGUgbG9naW4gYWZ0ZXIgd2UgcmV0dXJuIGZyb20gCisgICAgICAgICAgICAgICAgLy8gY29udGFpbmVyLiBJbiBtYW55IGNhc2VzIHRoZSB1bmRlcmx5aW5nIGhhbmRsZXIgd2lsbCBqdXN0IHN0b3JlIHRoZSBkZXRhaWxzCisgICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBjb250YWluZXIgd2lsbCBhY3R1YWxseSBoYW5kbGUgdGhlIGxvZ2luIGFmdGVyIHdlIHJldHVybiBmcm9tCiAgICAgICAgICAgICAgICAgLy8gdGhpcyBtZXRob2QuCiAgICAgICAgICAgICAgICAgcmV0dXJuIGh0dHBNZXNzYWdlQ29udGV4dC5ub3RpZnlDb250YWluZXJBYm91dExvZ2luKAogICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ2V0Q2FsbGVyUHJpbmNpcGFsKCksIHJlc3VsdC5nZXRDYWxsZXJHcm91cHMoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQucmVzcG9uc2VVbmF1dGhvcml6ZWQoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAKKyAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQuZG9Ob3RoaW5nKCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tc2Vzc2lvbi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1zZXNzaW9uL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dsYXNzZmlzaC13ZWIueG1sCmluZGV4IDY5MzcyNDQuLjExZDBlZTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1zZXNzaW9uL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dsYXNzZmlzaC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1zZXNzaW9uL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dsYXNzZmlzaC13ZWIueG1sCkBAIC0yNCwxMiArMjQsMTIgQEAKICAgICAgICAgPHJvbGUtbmFtZT5mb288L3JvbGUtbmFtZT4KICAgICAgICAgPGdyb3VwLW5hbWU+Zm9vPC9ncm91cC1uYW1lPgogICAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICAgICAgPHJvbGUtbmFtZT5iYXI8L3JvbGUtbmFtZT4KICAgICAgICAgPGdyb3VwLW5hbWU+YmFyPC9ncm91cC1uYW1lPgogICAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICAgICAgPHJvbGUtbmFtZT5rYXo8L3JvbGUtbmFtZT4KICAgICAgICAgPGdyb3VwLW5hbWU+a2F6PC9ncm91cC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXNlc3Npb24vc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBDdXN0b21TZXNzaW9uSVQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1zZXNzaW9uL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwQ3VzdG9tU2Vzc2lvbklULmphdmEKaW5kZXggNTY4ZGUzMC4uNjdjMjZiYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXNlc3Npb24vc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBDdXN0b21TZXNzaW9uSVQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tc2Vzc2lvbi9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcEN1c3RvbVNlc3Npb25JVC5qYXZhCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50U3VtbWFyeSgpewogICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9Ci0gICAKKwogICAgIEBEZXBsb3ltZW50KHRlc3RhYmxlID0gZmFsc2UpCiAgICAgcHVibGljIHN0YXRpYyBBcmNoaXZlPD8+IGNyZWF0ZURlcGxveW1lbnQoKSB7CiAgICAgICAgIHJldHVybiBtYXZlbldhcigpOwpAQCAtNTgsNzUgKzU4LDc1IEBACiAgICAgICAgIGFzc2VydERlZmF1bHRBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0P25hbWU9cmV6YSZwYXNzd29yZD1zZWNyZXQxIikpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdE5vdEF1dGhlbnRpY2F0ZWQoKSB7CiAgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0IikpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdE5vdEF1dGhlbnRpY2F0ZWRXcm9uZ05hbWUoKSB7CiAgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0P25hbWU9cm9tbyZwYXNzd29yZD1zZWNyZXQxIikpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdE5vdEF1dGhlbnRpY2F0ZWRXcm9uZ1Bhc3N3b3JkKCkgewogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJlemEmcGFzc3dvcmQ9d3JvbmdwYXNzd29yZCIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RBdXRoZW50aWNhdGVkU2Vzc2lvbigpIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gMS4gSW5pdGlhbGx5IHJlcXVlc3QgcGFnZSB3aGVuIHdlJ3JlIG5vdCBhdXRoZW50aWNhdGVkCi0gICAgICAgIAorCiAgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0IikpOwotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICAvLyAyLiBBdXRoZW50aWNhdGUKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHJlc3BvbnNlID0gcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0P25hbWU9cmV6YSZwYXNzd29yZD1zZWNyZXQxIik7Ci0gICAgICAgIAorCiAgICAgICAgIGFzc2VydERlZmF1bHRBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVzcG9uc2UpOwotICAgICAgICAKKwogICAgICAgICAvLyBGb3IgdGhlIGluaXRpYWwgYXV0aGVudGljYXRpb24sIHRoZSBtZWNoYW5pc20gc2hvdWxkIGJlIGNhbGxlZAotICAgICAgICAKKwogICAgICAgICBhc3NlcnRUcnVlKAotICAgICAgICAgICAgIkF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCwgYnV0IHdhc24ndCIsIAorICAgICAgICAgICAgIkF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCwgYnV0IHdhc24ndCIsCiAgICAgICAgICAgICByZXNwb25zZS5jb250YWlucygiYXV0aGVudGljYXRpb24gbWVjaGFuaXNtIGNhbGxlZDogdHJ1ZSIpKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy8gMy4gUmVxdWVzdCBzYW1lIHBhZ2UgYWdhaW4gd2l0aGluIHNhbWUgaHR0cCBzZXNzaW9uLCBzaG91bGQgc3RpbGwKICAgICAgICAgLy8gICAgYmUgYXV0aGVudGljYXRlZAotICAgICAgICAKKwogICAgICAgICByZXNwb25zZSA9IHJlYWRGcm9tU2VydmVyKCIvc2VydmxldCIpOwotICAgICAgICAKKwogICAgICAgICBhc3NlcnREZWZhdWx0QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlc3BvbnNlKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gRm9yIHRoZSBzdWJzZXF1ZW50IGF1dGhlbnRpY2F0aW9uLCB0aGUgbWVjaGFuaXNtIHNob3VsZCBOT1QgYmUgY2FsbGVkCiAgICAgICAgIC8vICh0aGUgc2Vzc2lvbiBpbnRlcmNlcHRvciB0YWtlcyBjYXJlIG9mIGF1dGhlbnRpY2F0aW9uIG5vdykKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICAgICJBdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQsIGJ1dCB3YXNuJ3QiLCAKKyAgICAgICAgICAgICJBdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQsIGJ1dCB3YXNuJ3QiLAogICAgICAgICAgICAgcmVzcG9uc2UuY29udGFpbnMoImF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSBjYWxsZWQ6IGZhbHNlIikpOwotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICAvLyA0LiBMb2dvdXQuIFNob3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCBhbnltb3JlCi0gICAgICAgIAorCiAgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0P2xvZ291dD10cnVlIikpOwotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICAvLyA1LiBSZXF1ZXN0IHNhbWUgcGFnZSBhZ2Fpbiwgc2hvdWxkIHN0aWxsIG5vdCBiZSBhdXRoZW50aWNhdGVkCi0gICAgICAgIAorCiAgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0IikpOwotICAgICAgIAorCiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20vcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS9wb20ueG1sCmluZGV4IDY5YzljOWUuLmUyZDQ5YzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS9wb20ueG1sCkBAIC0xNywyMSArMTcsMjEgQEAKIC0tPgogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgotCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5zb3RlcmlhLnRlc3Q8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+c290ZXJpYTwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKLQk8YXJ0aWZhY3RJZD5hcHAtY3VzdG9tPC9hcnRpZmFjdElkPgotCTxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0JCi0JPGJ1aWxkPgorICAgIDxhcnRpZmFjdElkPmFwcC1jdXN0b208L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KKworICAgIDxidWlsZD4KICAgICAgICAgPGZpbmFsTmFtZT5hcHAtY3VzdG9tPC9maW5hbE5hbWU+Ci0JPC9idWlsZD4KLSAgICAKKyAgICA8L2J1aWxkPgorCiAgICAgPHByb3BlcnRpZXM+CiAgICAgICAgIDxmYWlsT25NaXNzaW5nV2ViWG1sPmZhbHNlPC9mYWlsT25NaXNzaW5nV2ViWG1sPgogICAgIDwvcHJvcGVydGllcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Byb3RlY3RlZFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Byb3RlY3RlZFNlcnZsZXQuamF2YQppbmRleCA5ODJiOGU5Li4xMDYzMjRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9Qcm90ZWN0ZWRTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvUHJvdGVjdGVkU2VydmxldC5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiAvKioKICAqIFRlc3QgU2VydmxldCB0aGF0IHByaW50cyBvdXQgdGhlIG5hbWUgb2YgdGhlIGF1dGhlbnRpY2F0ZWQgY2FsbGVyIGFuZCB3aGV0aGVyCiAgKiB0aGlzIGNhbGxlciBpcyBpbiBhbnkgb2YgdGhlIHJvbGVzIHtmb28sIGJhciwga2F6fQotICogCisgKgogICoKICAqLwogQFdlYlNlcnZsZXQoIi9wcm90ZWN0ZWRTZXJ2bGV0IikKQEAgLTM5LDcgKzM5LDcgQEAKIHB1YmxpYyBjbGFzcyBQcm90ZWN0ZWRTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSBTZWN1cml0eUNvbnRleHQgc2VjdXJpdHlDb250ZXh0OwogCkBAIC01OCwyMSArNTgsMjEgQEAKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoIndlYiB1c2VyIGhhcyByb2xlIFwiZm9vXCI6ICIgKyByZXF1ZXN0LmlzVXNlckluUm9sZSgiZm9vIikgKyAiXG4iKTsKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoIndlYiB1c2VyIGhhcyByb2xlIFwiYmFyXCI6ICIgKyByZXF1ZXN0LmlzVXNlckluUm9sZSgiYmFyIikgKyAiXG4iKTsKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoIndlYiB1c2VyIGhhcyByb2xlIFwia2F6XCI6ICIgKyByZXF1ZXN0LmlzVXNlckluUm9sZSgia2F6IikgKyAiXG4iKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGNvbnRleHROYW1lID0gbnVsbDsKICAgICAgICAgaWYgKHNlY3VyaXR5Q29udGV4dC5nZXRDYWxsZXJQcmluY2lwYWwoKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBjb250ZXh0TmFtZSA9IHNlY3VyaXR5Q29udGV4dC5nZXRDYWxsZXJQcmluY2lwYWwoKS5nZXROYW1lKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoImNvbnRleHQgdXNlcm5hbWU6ICIgKyBjb250ZXh0TmFtZSArICJcbiIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgiY29udGV4dCB1c2VyIGhhcyByb2xlIFwiZm9vXCI6ICIgKyBzZWN1cml0eUNvbnRleHQuaXNDYWxsZXJJblJvbGUoImZvbyIpICsgIlxuIik7CiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJjb250ZXh0IHVzZXIgaGFzIHJvbGUgXCJiYXJcIjogIiArIHNlY3VyaXR5Q29udGV4dC5pc0NhbGxlckluUm9sZSgiYmFyIikgKyAiXG4iKTsKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoImNvbnRleHQgdXNlciBoYXMgcm9sZSBcImthelwiOiAiICsgc2VjdXJpdHlDb250ZXh0LmlzQ2FsbGVySW5Sb2xlKCJrYXoiKSArICJcbiIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgiaGFzIGFjY2VzcyAiICsgc2VjdXJpdHlDb250ZXh0Lmhhc0FjY2Vzc1RvV2ViUmVzb3VyY2UoIi9zZXJ2bGV0cyIpKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1NlcnZsZXQuamF2YQppbmRleCBhMjgxOTBkLi41MWExN2U5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvU2VydmxldC5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAvKioKICAqIFRlc3QgU2VydmxldCB0aGF0IHByaW50cyBvdXQgdGhlIG5hbWUgb2YgdGhlIGF1dGhlbnRpY2F0ZWQgY2FsbGVyIGFuZCB3aGV0aGVyCiAgKiB0aGlzIGNhbGxlciBpcyBpbiBhbnkgb2YgdGhlIHJvbGVzIHtmb28sIGJhciwga2F6fQotICogCisgKgogICoKICAqLwogQERlY2xhcmVSb2xlcyh7ICJmb28iLCAiYmFyIiwgImtheiIgfSkKQEAgLTQwLDcgKzQwLDcgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSBTZWN1cml0eUNvbnRleHQgc2VjdXJpdHlDb250ZXh0OwogCkBAIC01OSwyMCArNTksMjAgQEAKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoIndlYiB1c2VyIGhhcyByb2xlIFwiZm9vXCI6ICIgKyByZXF1ZXN0LmlzVXNlckluUm9sZSgiZm9vIikgKyAiXG4iKTsKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoIndlYiB1c2VyIGhhcyByb2xlIFwiYmFyXCI6ICIgKyByZXF1ZXN0LmlzVXNlckluUm9sZSgiYmFyIikgKyAiXG4iKTsKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoIndlYiB1c2VyIGhhcyByb2xlIFwia2F6XCI6ICIgKyByZXF1ZXN0LmlzVXNlckluUm9sZSgia2F6IikgKyAiXG4iKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGNvbnRleHROYW1lID0gbnVsbDsKICAgICAgICAgaWYgKHNlY3VyaXR5Q29udGV4dC5nZXRDYWxsZXJQcmluY2lwYWwoKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBjb250ZXh0TmFtZSA9IHNlY3VyaXR5Q29udGV4dC5nZXRDYWxsZXJQcmluY2lwYWwoKS5nZXROYW1lKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoImNvbnRleHQgdXNlcm5hbWU6ICIgKyBjb250ZXh0TmFtZSArICJcbiIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgiY29udGV4dCB1c2VyIGhhcyByb2xlIFwiZm9vXCI6ICIgKyBzZWN1cml0eUNvbnRleHQuaXNDYWxsZXJJblJvbGUoImZvbyIpICsgIlxuIik7CiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJjb250ZXh0IHVzZXIgaGFzIHJvbGUgXCJiYXJcIjogIiArIHNlY3VyaXR5Q29udGV4dC5pc0NhbGxlckluUm9sZSgiYmFyIikgKyAiXG4iKTsKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoImNvbnRleHQgdXNlciBoYXMgcm9sZSBcImthelwiOiAiICsgc2VjdXJpdHlDb250ZXh0LmlzQ2FsbGVySW5Sb2xlKCJrYXoiKSArICJcbiIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgiaGFzIGFjY2VzcyAiICsgc2VjdXJpdHlDb250ZXh0Lmhhc0FjY2Vzc1RvV2ViUmVzb3VyY2UoIi9wcm90ZWN0ZWRTZXJ2bGV0IikgKyAiXG4iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoIkFsbCBkZWNsYXJlZCByb2xlcyBvZiB1c2VyICIgKyAoKFNlY3VyaXR5Q29udGV4dEltcGwpc2VjdXJpdHlDb250ZXh0KS5nZXRBbGxEZWNsYXJlZENhbGxlclJvbGVzKCkgKyAiXG4iKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKaW5kZXggZjVhOGRmNC4uOTJmMGYzMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKQEAgLTMzLDIwICszMywyMCBAQAogCiBAUmVxdWVzdFNjb3BlZAogcHVibGljIGNsYXNzIFRlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbSBpbXBsZW1lbnRzIEh0dHBBdXRoZW50aWNhdGlvbk1lY2hhbmlzbSB7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSBJZGVudGl0eVN0b3JlSGFuZGxlciBpZGVudGl0eVN0b3JlSGFuZGxlcjsKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBBdXRoZW50aWNhdGlvblN0YXR1cyB2YWxpZGF0ZVJlcXVlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIEh0dHBNZXNzYWdlQ29udGV4dCBodHRwTWVzc2FnZUNvbnRleHQpIHRocm93cyBBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiB7CiAKLSAgICAJLy8gR2V0IHRoZSAoY2FsbGVyKSBuYW1lIGFuZCBwYXNzd29yZCBmcm9tIHRoZSByZXF1ZXN0CisgICAgICAgIC8vIEdldCB0aGUgKGNhbGxlcikgbmFtZSBhbmQgcGFzc3dvcmQgZnJvbSB0aGUgcmVxdWVzdAogICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGZvciB0aGUgc21hbGxlc3QgcG9zc2libGUgZXhhbXBsZSBvbmx5LiBJbiBwcmFjdGljZQogICAgICAgICAvLyBwdXR0aW5nIHRoZSBwYXNzd29yZCBpbiBhIHJlcXVlc3QgcXVlcnkgcGFyYW1ldGVyIGlzIGhpZ2hseQogICAgICAgICAvLyBpbnNlY3VyZQogICAgICAgICBTdHJpbmcgbmFtZSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CiAgICAgICAgIFN0cmluZyBwYXNzd29yZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJwYXNzd29yZCIpOwotICAgIAkKKwogICAgICAgICBpZiAobmFtZSAhPSBudWxsICYmIHBhc3N3b3JkICE9IG51bGwpIHsKIAogICAgICAgICAgICAgLy8gRGVsZWdhdGUgdGhlIHtjcmVkZW50aWFscyBpbiAtPiBpZGVudGl0eSBkYXRhIG91dH0gZnVuY3Rpb24gdG8KQEAgLTU2LDE3ICs1NiwxNyBAQAogCiAgICAgICAgICAgICBpZiAocmVzdWx0LmdldFN0YXR1cygpID09IFZBTElEKSB7CiAgICAgICAgICAgICAgICAgLy8gQ29tbXVuaWNhdGUgdGhlIGRldGFpbHMgb2YgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlciB0byB0aGUKLSAgICAgICAgICAgICAgICAvLyBjb250YWluZXIuIEluIG1hbnkgY2FzZXMgdGhlIHVuZGVybHlpbmcgaGFuZGxlciB3aWxsIGp1c3Qgc3RvcmUgdGhlIGRldGFpbHMgCi0gICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBjb250YWluZXIgd2lsbCBhY3R1YWxseSBoYW5kbGUgdGhlIGxvZ2luIGFmdGVyIHdlIHJldHVybiBmcm9tIAorICAgICAgICAgICAgICAgIC8vIGNvbnRhaW5lci4gSW4gbWFueSBjYXNlcyB0aGUgdW5kZXJseWluZyBoYW5kbGVyIHdpbGwganVzdCBzdG9yZSB0aGUgZGV0YWlscworICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgY29udGFpbmVyIHdpbGwgYWN0dWFsbHkgaGFuZGxlIHRoZSBsb2dpbiBhZnRlciB3ZSByZXR1cm4gZnJvbQogICAgICAgICAgICAgICAgIC8vIHRoaXMgbWV0aG9kLgogICAgICAgICAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQubm90aWZ5Q29udGFpbmVyQWJvdXRMb2dpbigKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdldENhbGxlclByaW5jaXBhbCgpLCByZXN1bHQuZ2V0Q2FsbGVyR3JvdXBzKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0LnJlc3BvbnNlVW5hdXRob3JpemVkKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gCisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0LmRvTm90aGluZygpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20vc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAppbmRleCAwOWZmZmI0Li42Y2EzNTQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20vc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20vc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApAQCAtMTgsMjcgKzE4LDI3IEBACiAtLT4KIAogPHdlYi1hcHAKLQl4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSBodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18xLnhzZCIKLQl2ZXJzaW9uPSIzLjEiCisgICAgeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItYXBwXzNfMS54c2QiCisgICAgdmVyc2lvbj0iMy4xIgogPgogCi0JPCEtLSBTZWN1cml0eSBjb25zdHJhaW50cyBhbmQgcm9sZXMuIC0tPgorICAgIDwhLS0gU2VjdXJpdHkgY29uc3RyYWludHMgYW5kIHJvbGVzLiAtLT4KIAotCTxzZWN1cml0eS1jb25zdHJhaW50PgotCQk8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+Ci0JCQk8d2ViLXJlc291cmNlLW5hbWU+VXNlciBwYWdlczwvd2ViLXJlc291cmNlLW5hbWU+Ci0JCQk8dXJsLXBhdHRlcm4+L3Byb3RlY3RlZFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgotCQk8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgotCQk8YXV0aC1jb25zdHJhaW50PgotCQkJPHJvbGUtbmFtZT5mb288L3JvbGUtbmFtZT4KLQkJPC9hdXRoLWNvbnN0cmFpbnQ+Ci0JPC9zZWN1cml0eS1jb25zdHJhaW50PgorICAgIDxzZWN1cml0eS1jb25zdHJhaW50PgorICAgICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CisgICAgICAgICAgICA8d2ViLXJlc291cmNlLW5hbWU+VXNlciBwYWdlczwvd2ViLXJlc291cmNlLW5hbWU+CisgICAgICAgICAgICA8dXJsLXBhdHRlcm4+L3Byb3RlY3RlZFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgorICAgICAgICA8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgorICAgICAgICA8YXV0aC1jb25zdHJhaW50PgorICAgICAgICAgICAgPHJvbGUtbmFtZT5mb288L3JvbGUtbmFtZT4KKyAgICAgICAgPC9hdXRoLWNvbnN0cmFpbnQ+CisgICAgPC9zZWN1cml0eS1jb25zdHJhaW50PgogCiAKLQk8c2VjdXJpdHktcm9sZT4KLQkJPHJvbGUtbmFtZT5mb288L3JvbGUtbmFtZT4KLQk8L3NlY3VyaXR5LXJvbGU+CisgICAgPHNlY3VyaXR5LXJvbGU+CisgICAgICAgIDxyb2xlLW5hbWU+Zm9vPC9yb2xlLW5hbWU+CisgICAgPC9zZWN1cml0eS1yb2xlPgogCiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20vc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBDdXN0b21JVC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwQ3VzdG9tSVQuamF2YQppbmRleCBmNDhmMWI4Li4yYTg5YjgwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20vc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBDdXN0b21JVC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcEN1c3RvbUlULmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRTdW1tYXJ5KCl7CiAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KLSAgIAorCiAgICAgQERlcGxveW1lbnQodGVzdGFibGUgPSBmYWxzZSkKICAgICBwdWJsaWMgc3RhdGljIEFyY2hpdmU8Pz4gY3JlYXRlRGVwbG95bWVudCgpIHsKICAgICAgICAgcmV0dXJuIG1hdmVuV2FyKCk7CkBAIC01NiwxOSArNTYsMTkgQEAKICAgICAgICAgYXNzZXJ0RGVmYXVsdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICAgICAgcmVzcG9uc2VGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJlemEmcGFzc3dvcmQ9c2VjcmV0MSIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkKCkgewogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZFVucHJvdGVjdGVkKAogICAgICAgICAgICAgICAgIHJlc3BvbnNlRnJvbVNlcnZlcigiL3NlcnZsZXQiKSk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Tm90QXV0aGVudGljYXRlZFdyb25nTmFtZSgpIHsKICAgICAgICAgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICAgICAgcmVzcG9uc2VGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJvbW8mcGFzc3dvcmQ9c2VjcmV0MSIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkV3JvbmdQYXNzd29yZCgpIHsKICAgICAgICAgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kYi9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZGIvcG9tLnhtbAppbmRleCAxYWE0MDFiLi5mY2YxMmNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kYi9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRiL3BvbS54bWwKQEAgLTE3LDIxICsxNywyMSBAQAogLS0+CiAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+Ci0JPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLnNvdGVyaWEudGVzdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5zb3RlcmlhPC9hcnRpZmFjdElkPgogICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAotCTxhcnRpZmFjdElkPmFwcC1kYjwvYXJ0aWZhY3RJZD4KLQk8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgotCQotCTxidWlsZD4KKyAgICA8YXJ0aWZhY3RJZD5hcHAtZGI8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KKworICAgIDxidWlsZD4KICAgICAgICAgPGZpbmFsTmFtZT5hcHAtZGI8L2ZpbmFsTmFtZT4KLQk8L2J1aWxkPgotICAgIAorICAgIDwvYnVpbGQ+CisKICAgICA8cHJvcGVydGllcz4KICAgICAgICAgPGZhaWxPbk1pc3NpbmdXZWJYbWw+ZmFsc2U8L2ZhaWxPbk1pc3NpbmdXZWJYbWw+CiAgICAgPC9wcm9wZXJ0aWVzPgpAQCAtNDQsNSArNDQsNSBAQAogICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgogICAgIDwvZGVwZW5kZW5jeT4KICAgPC9kZXBlbmRlbmNpZXM+Ci0gICAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwbGljYXRpb25Db25maWcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwbGljYXRpb25Db25maWcuamF2YQppbmRleCBmZDQ5ZTI5Li4wMDgzMjExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcGxpY2F0aW9uQ29uZmlnLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZGIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBsaWNhdGlvbkNvbmZpZy5qYXZhCkBAIC0yMSwyNCArMjEsMjQgQEAKIGltcG9ydCBqYXZheC5zZWN1cml0eS5lbnRlcnByaXNlLmlkZW50aXR5c3RvcmUuRGF0YWJhc2VJZGVudGl0eVN0b3JlRGVmaW5pdGlvbjsKIAogQERhdGFiYXNlSWRlbnRpdHlTdG9yZURlZmluaXRpb24oCi0gICAgZGF0YVNvdXJjZUxvb2t1cD0iJHsnamRiYy9fX2RlZmF1bHQnfSIsIAorICAgIGRhdGFTb3VyY2VMb29rdXA9IiR7J2pkYmMvX19kZWZhdWx0J30iLAogICAgIGNhbGxlclF1ZXJ5PSIjeydzZWxlY3QgcGFzc3dvcmQgZnJvbSBjYWxsZXIgd2hlcmUgbmFtZSA9ID8nfSIsCiAgICAgZ3JvdXBzUXVlcnk9InNlbGVjdCBncm91cF9uYW1lIGZyb20gY2FsbGVyX2dyb3VwcyB3aGVyZSBjYWxsZXJfbmFtZSA9ID8iLAogICAgIGhhc2hBbGdvcml0aG0gPSBQbGFpbnRleHRQYXNzd29yZEhhc2guY2xhc3MsCiAgICAgaGFzaEFsZ29yaXRobVBhcmFtZXRlcnMgPSB7Ci0gICAgICAgICJmb289YmFyIiwgCi0gICAgICAgICJrYXg9emFrIiwgCisgICAgICAgICJmb289YmFyIiwKKyAgICAgICAgImtheD16YWsiLAogICAgICAgICAiZm9veD0keydpb3AnfSIsCiAgICAgICAgICIke2FwcGxpY2F0aW9uQ29uZmlnLmR5bmF9IgotICAgICAgICAKKwogICAgIH0gLy8ganVzdCBmb3IgdGVzdCAvIGV4YW1wbGUKICkKIEBBcHBsaWNhdGlvblNjb3BlZAogQE5hbWVkCiBwdWJsaWMgY2xhc3MgQXBwbGljYXRpb25Db25maWcgewotICAgIAorCiAgICAgcHVibGljIFN0cmluZ1tdIGdldER5bmEoKSB7CiAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nW10geyJkeW49MSIsImR5bmE9MiIsImR5bmFtPTMifTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvRGF0YWJhc2VTZXR1cC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZGIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9EYXRhYmFzZVNldHVwLmphdmEKaW5kZXggZDViNzE1My4uMjgxMDI2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZGIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9EYXRhYmFzZVNldHVwLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZGIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9EYXRhYmFzZVNldHVwLmphdmEKQEAgLTMxLDQxICszMSw0MSBAQAogQFNpbmdsZXRvbgogQFN0YXJ0dXAKIHB1YmxpYyBjbGFzcyBEYXRhYmFzZVNldHVwIHsKLSAgICAKLSAgICBAUmVzb3VyY2UobG9va3VwPSJqYXZhOmNvbXAvRGVmYXVsdERhdGFTb3VyY2UiKQkKKworICAgIEBSZXNvdXJjZShsb29rdXA9ImphdmE6Y29tcC9EZWZhdWx0RGF0YVNvdXJjZSIpCiAgICAgcHJpdmF0ZSBEYXRhU291cmNlIGRhdGFTb3VyY2U7CiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIGV4ZWN1dGVVcGRhdGUoZGF0YVNvdXJjZSwgIkNSRUFURSBUQUJMRSBjYWxsZXIobmFtZSBWQVJDSEFSKDY0KSBQUklNQVJZIEtFWSwgcGFzc3dvcmQgVkFSQ0hBUig2NCkpIik7CiAgICAgICAgIGV4ZWN1dGVVcGRhdGUoZGF0YVNvdXJjZSwgIkNSRUFURSBUQUJMRSBjYWxsZXJfZ3JvdXBzKGNhbGxlcl9uYW1lIFZBUkNIQVIoNjQpLCBncm91cF9uYW1lIFZBUkNIQVIoNjQpKSIpOwotICAgICAgICAKKwogICAgICAgICBleGVjdXRlVXBkYXRlKGRhdGFTb3VyY2UsICJJTlNFUlQgSU5UTyBjYWxsZXIgVkFMVUVTKCdyZXphJywgJ3NlY3JldDEnKSIpOwogICAgICAgICBleGVjdXRlVXBkYXRlKGRhdGFTb3VyY2UsICJJTlNFUlQgSU5UTyBjYWxsZXIgVkFMVUVTKCdhbGV4JywgJ3NlY3JldDInKSIpOwogICAgICAgICBleGVjdXRlVXBkYXRlKGRhdGFTb3VyY2UsICJJTlNFUlQgSU5UTyBjYWxsZXIgVkFMVUVTKCdhcmphbicsICdzZWNyZXQyJykiKTsKICAgICAgICAgZXhlY3V0ZVVwZGF0ZShkYXRhU291cmNlLCAiSU5TRVJUIElOVE8gY2FsbGVyIFZBTFVFUygnd2VybmVyJywgJ3NlY3JldDInKSIpOwotICAgICAgICAKKwogICAgICAgICBleGVjdXRlVXBkYXRlKGRhdGFTb3VyY2UsICJJTlNFUlQgSU5UTyBjYWxsZXJfZ3JvdXBzIFZBTFVFUygncmV6YScsICdmb28nKSIpOwogICAgICAgICBleGVjdXRlVXBkYXRlKGRhdGFTb3VyY2UsICJJTlNFUlQgSU5UTyBjYWxsZXJfZ3JvdXBzIFZBTFVFUygncmV6YScsICdiYXInKSIpOwotICAgICAgICAKKwogICAgICAgICBleGVjdXRlVXBkYXRlKGRhdGFTb3VyY2UsICJJTlNFUlQgSU5UTyBjYWxsZXJfZ3JvdXBzIFZBTFVFUygnYWxleCcsICdmb28nKSIpOwogICAgICAgICBleGVjdXRlVXBkYXRlKGRhdGFTb3VyY2UsICJJTlNFUlQgSU5UTyBjYWxsZXJfZ3JvdXBzIFZBTFVFUygnYWxleCcsICdiYXInKSIpOwotICAgICAgICAKKwogICAgICAgICBleGVjdXRlVXBkYXRlKGRhdGFTb3VyY2UsICJJTlNFUlQgSU5UTyBjYWxsZXJfZ3JvdXBzIFZBTFVFUygnYXJqYW4nLCAnZm9vJykiKTsKICAgICAgICAgZXhlY3V0ZVVwZGF0ZShkYXRhU291cmNlLCAiSU5TRVJUIElOVE8gY2FsbGVyX2dyb3VwcyBWQUxVRVMoJ3dlcm5lcicsICdmb28nKSIpOwogICAgIH0KLSAgICAKKwogICAgIEBQcmVEZXN0cm95CiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKLSAgICAJdHJ5IHsKLSAgICAJCWV4ZWN1dGVVcGRhdGUoZGF0YVNvdXJjZSwgIkRST1AgVEFCTEUgY2FsbGVyIik7Ci0gICAgCQlleGVjdXRlVXBkYXRlKGRhdGFTb3VyY2UsICJEUk9QIFRBQkxFIGNhbGxlcl9ncm91cHMiKTsKLSAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAJCS8vIHNpbGVudGx5IGlnbm9yZSwgY29uY2VybnMgaW4tbWVtb3J5IGRhdGFiYXNlCi0gICAgCX0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGV4ZWN1dGVVcGRhdGUoZGF0YVNvdXJjZSwgIkRST1AgVEFCTEUgY2FsbGVyIik7CisgICAgICAgICAgICBleGVjdXRlVXBkYXRlKGRhdGFTb3VyY2UsICJEUk9QIFRBQkxFIGNhbGxlcl9ncm91cHMiKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIC8vIHNpbGVudGx5IGlnbm9yZSwgY29uY2VybnMgaW4tbWVtb3J5IGRhdGFiYXNlCisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgZXhlY3V0ZVVwZGF0ZShEYXRhU291cmNlIGRhdGFTb3VyY2UsIFN0cmluZyBxdWVyeSkgewogICAgICAgICB0cnkgKENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGRhdGFTb3VyY2UuZ2V0Q29ubmVjdGlvbigpKSB7CiAgICAgICAgICAgICB0cnkgKFByZXBhcmVkU3RhdGVtZW50IHN0YXRlbWVudCA9IGNvbm5lY3Rpb24ucHJlcGFyZVN0YXRlbWVudChxdWVyeSkpIHsKQEAgLTc1LDUgKzc1LDUgQEAKICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihlKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZGIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1NlcnZsZXQuamF2YQppbmRleCBmNWFiZGUwLi5lMjNhMWY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1NlcnZsZXQuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogLyoqCiAgKiBUZXN0IFNlcnZsZXQgdGhhdCBwcmludHMgb3V0IHRoZSBuYW1lIG9mIHRoZSBhdXRoZW50aWNhdGVkIGNhbGxlciBhbmQgd2hldGhlcgogICogdGhpcyBjYWxsZXIgaXMgaW4gYW55IG9mIHRoZSByb2xlcyB7Zm9vLCBiYXIsIGthen0KLSAqIAorICoKICAqCiAgKi8KIEBEZWNsYXJlUm9sZXMoeyAiZm9vIiwgImJhciIsICJrYXoiIH0pCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZGIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YQppbmRleCBiN2NiNjdlLi40NWIyMjA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKQEAgLTM0LDcgKzM0LDcgQEAKIAogQFJlcXVlc3RTY29wZWQKIHB1YmxpYyBjbGFzcyBUZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20gaW1wbGVtZW50cyBIdHRwQXV0aGVudGljYXRpb25NZWNoYW5pc20gewotICAgIAorCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgSWRlbnRpdHlTdG9yZUhhbmRsZXIgaWRlbnRpdHlTdG9yZUhhbmRsZXI7CiAKQEAgLTU3LDE3ICs1NywxNyBAQAogCiAgICAgICAgICAgICBpZiAocmVzdWx0LmdldFN0YXR1cygpID09IFZBTElEKSB7CiAgICAgICAgICAgICAgICAgLy8gQ29tbXVuaWNhdGUgdGhlIGRldGFpbHMgb2YgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlciB0byB0aGUKLSAgICAgICAgICAgICAgICAvLyBjb250YWluZXIuIEluIG1hbnkgY2FzZXMgdGhlIHVuZGVybHlpbmcgaGFuZGxlciB3aWxsIGp1c3Qgc3RvcmUgdGhlIGRldGFpbHMgCi0gICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBjb250YWluZXIgd2lsbCBhY3R1YWxseSBoYW5kbGUgdGhlIGxvZ2luIGFmdGVyIHdlIHJldHVybiBmcm9tIAorICAgICAgICAgICAgICAgIC8vIGNvbnRhaW5lci4gSW4gbWFueSBjYXNlcyB0aGUgdW5kZXJseWluZyBoYW5kbGVyIHdpbGwganVzdCBzdG9yZSB0aGUgZGV0YWlscworICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgY29udGFpbmVyIHdpbGwgYWN0dWFsbHkgaGFuZGxlIHRoZSBsb2dpbiBhZnRlciB3ZSByZXR1cm4gZnJvbQogICAgICAgICAgICAgICAgIC8vIHRoaXMgbWV0aG9kLgogICAgICAgICAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQubm90aWZ5Q29udGFpbmVyQWJvdXRMb2dpbigKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdldENhbGxlclByaW5jaXBhbCgpLCByZXN1bHQuZ2V0Q2FsbGVyR3JvdXBzKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0LnJlc3BvbnNlVW5hdXRob3JpemVkKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gCisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0LmRvTm90aGluZygpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZGIvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvZ2xhc3NmaXNoLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kYi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbAppbmRleCA2OTM3MjQ0Li4xMWQwZWU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kYi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kYi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbApAQCAtMjQsMTIgKzI0LDEyIEBACiAgICAgICAgIDxyb2xlLW5hbWU+Zm9vPC9yb2xlLW5hbWU+CiAgICAgICAgIDxncm91cC1uYW1lPmZvbzwvZ3JvdXAtbmFtZT4KICAgICA8L3NlY3VyaXR5LXJvbGUtbWFwcGluZz4KLSAgICAKKwogICAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgICAgIDxyb2xlLW5hbWU+YmFyPC9yb2xlLW5hbWU+CiAgICAgICAgIDxncm91cC1uYW1lPmJhcjwvZ3JvdXAtbmFtZT4KICAgICA8L3NlY3VyaXR5LXJvbGUtbWFwcGluZz4KLSAgICAKKwogICAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgICAgIDxyb2xlLW5hbWU+a2F6PC9yb2xlLW5hbWU+CiAgICAgICAgIDxncm91cC1uYW1lPmthejwvZ3JvdXAtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRiL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwREJJVC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZGIvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBEQklULmphdmEKaW5kZXggNmYwYjY1Ny4uOWJmNmEyMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZGIvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBEQklULmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZGIvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBEQklULmphdmEKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRTdW1tYXJ5KCl7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQotICAgIAorCiAKICAgICBARGVwbG95bWVudCh0ZXN0YWJsZSA9IGZhbHNlKQogICAgIHB1YmxpYyBzdGF0aWMgQXJjaGl2ZTw/PiBjcmVhdGVEZXBsb3ltZW50KCkgewpAQCAtNjAsMTkgKzYwLDE5IEBACiAgICAgICAgIGFzc2VydERlZmF1bHRBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0P25hbWU9cmV6YSZwYXNzd29yZD1zZWNyZXQxIikpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdE5vdEF1dGhlbnRpY2F0ZWQoKSB7CiAgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0IikpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdE5vdEF1dGhlbnRpY2F0ZWRXcm9uZ05hbWUoKSB7CiAgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0P25hbWU9cm9tbyZwYXNzd29yZD1zZWNyZXQxIikpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdE5vdEF1dGhlbnRpY2F0ZWRXcm9uZ1Bhc3N3b3JkKCkgewogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRvdWJsZS1oYW0vcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRvdWJsZS1oYW0vcG9tLnhtbAppbmRleCBkMThlYTgzLi4zN2M3MGMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kb3VibGUtaGFtL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZG91YmxlLWhhbS9wb20ueG1sCkBAIC0xNywyNSArMTcsMjUgQEAKIC0tPgogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgotCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5zb3RlcmlhLnRlc3Q8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+c290ZXJpYTwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKLQk8YXJ0aWZhY3RJZD5hcHAtZG91YmxlLWhhbTwvYXJ0aWZhY3RJZD4KLQk8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgotCQotCTxidWlsZD4KKyAgICA8YXJ0aWZhY3RJZD5hcHAtZG91YmxlLWhhbTwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgorCisgICAgPGJ1aWxkPgogICAgICAgICA8ZmluYWxOYW1lPmFwcC1kb3VibGUtaGFtPC9maW5hbE5hbWU+Ci0JPC9idWlsZD4KLSAgICAKKyAgICA8L2J1aWxkPgorCiAgICAgPHByb3BlcnRpZXM+CiAgICAgICAgIDxmYWlsT25NaXNzaW5nV2ViWG1sPmZhbHNlPC9mYWlsT25NaXNzaW5nV2ViWG1sPgogICAgIDwvcHJvcGVydGllcz4KLSAgICAKKwogICAgIDxkZXBlbmRlbmNpZXM+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5zb3RlcmlhLnRlc3Q8L2dyb3VwSWQ+CkBAIC00NCw1ICs0NCw1IEBACiAgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICA8L2RlcGVuZGVuY2llcz4KLSAgICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZG91YmxlLWhhbS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Byb3RlY3RlZFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRvdWJsZS1oYW0vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9Qcm90ZWN0ZWRTZXJ2bGV0LmphdmEKaW5kZXggNzk5M2Y3Mi4uYTRiZGNkZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZG91YmxlLWhhbS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Byb3RlY3RlZFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kb3VibGUtaGFtL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvUHJvdGVjdGVkU2VydmxldC5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAvKioKICAqIFRlc3QgU2VydmxldCB0aGF0IHByaW50cyBvdXQgdGhlIG5hbWUgb2YgdGhlIGF1dGhlbnRpY2F0ZWQgY2FsbGVyIGFuZCB3aGV0aGVyCiAgKiB0aGlzIGNhbGxlciBpcyBpbiBhbnkgb2YgdGhlIHJvbGVzIHtmb28sIGJhciwga2F6fQotICogCisgKgogICoKICAqLwogCkBAIC00NSw3ICs0NSw3IEBACiBwdWJsaWMgY2xhc3MgUHJvdGVjdGVkU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotICAgIAorCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgU2VjdXJpdHlDb250ZXh0IHNlY3VyaXR5Q29udGV4dDsKIApAQCAtNjQsMjEgKzY0LDIxIEBACiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJ3ZWIgdXNlciBoYXMgcm9sZSBcImZvb1wiOiAiICsgcmVxdWVzdC5pc1VzZXJJblJvbGUoImZvbyIpICsgIlxuIik7CiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJ3ZWIgdXNlciBoYXMgcm9sZSBcImJhclwiOiAiICsgcmVxdWVzdC5pc1VzZXJJblJvbGUoImJhciIpICsgIlxuIik7CiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJ3ZWIgdXNlciBoYXMgcm9sZSBcImthelwiOiAiICsgcmVxdWVzdC5pc1VzZXJJblJvbGUoImtheiIpICsgIlxuIik7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBjb250ZXh0TmFtZSA9IG51bGw7CiAgICAgICAgIGlmIChzZWN1cml0eUNvbnRleHQuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkgIT0gbnVsbCkgewogICAgICAgICAgICAgY29udGV4dE5hbWUgPSBzZWN1cml0eUNvbnRleHQuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkuZ2V0TmFtZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJjb250ZXh0IHVzZXJuYW1lOiAiICsgY29udGV4dE5hbWUgKyAiXG4iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoImNvbnRleHQgdXNlciBoYXMgcm9sZSBcImZvb1wiOiAiICsgc2VjdXJpdHlDb250ZXh0LmlzQ2FsbGVySW5Sb2xlKCJmb28iKSArICJcbiIpOwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgiY29udGV4dCB1c2VyIGhhcyByb2xlIFwiYmFyXCI6ICIgKyBzZWN1cml0eUNvbnRleHQuaXNDYWxsZXJJblJvbGUoImJhciIpICsgIlxuIik7CiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJjb250ZXh0IHVzZXIgaGFzIHJvbGUgXCJrYXpcIjogIiArIHNlY3VyaXR5Q29udGV4dC5pc0NhbGxlckluUm9sZSgia2F6IikgKyAiXG4iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoImhhcyBhY2Nlc3MgIiArIHNlY3VyaXR5Q29udGV4dC5oYXNBY2Nlc3NUb1dlYlJlc291cmNlKCIvc2VydmxldHMiKSk7Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kb3VibGUtaGFtL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZG91YmxlLWhhbS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1NlcnZsZXQuamF2YQppbmRleCAxZGFiOWYzLi5kMzZlYTM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kb3VibGUtaGFtL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRvdWJsZS1oYW0vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TZXJ2bGV0LmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKIC8qKgogICogVGVzdCBTZXJ2bGV0IHRoYXQgcHJpbnRzIG91dCB0aGUgbmFtZSBvZiB0aGUgYXV0aGVudGljYXRlZCBjYWxsZXIgYW5kIHdoZXRoZXIKICAqIHRoaXMgY2FsbGVyIGlzIGluIGFueSBvZiB0aGUgcm9sZXMge2ZvbywgYmFyLCBrYXp9Ci0gKiAKKyAqCiAgKgogICovCiBAQmFzaWNBdXRoZW50aWNhdGlvbk1lY2hhbmlzbURlZmluaXRpb24oCkBAIC00Myw3ICs0Myw3IEBACiBwdWJsaWMgY2xhc3MgU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotICAgIAorCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgU2VjdXJpdHlDb250ZXh0IHNlY3VyaXR5Q29udGV4dDsKIApAQCAtNjIsMjAgKzYyLDIwIEBACiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJ3ZWIgdXNlciBoYXMgcm9sZSBcImZvb1wiOiAiICsgcmVxdWVzdC5pc1VzZXJJblJvbGUoImZvbyIpICsgIlxuIik7CiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJ3ZWIgdXNlciBoYXMgcm9sZSBcImJhclwiOiAiICsgcmVxdWVzdC5pc1VzZXJJblJvbGUoImJhciIpICsgIlxuIik7CiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJ3ZWIgdXNlciBoYXMgcm9sZSBcImthelwiOiAiICsgcmVxdWVzdC5pc1VzZXJJblJvbGUoImtheiIpICsgIlxuIik7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBjb250ZXh0TmFtZSA9IG51bGw7CiAgICAgICAgIGlmIChzZWN1cml0eUNvbnRleHQuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkgIT0gbnVsbCkgewogICAgICAgICAgICAgY29udGV4dE5hbWUgPSBzZWN1cml0eUNvbnRleHQuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkuZ2V0TmFtZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJjb250ZXh0IHVzZXJuYW1lOiAiICsgY29udGV4dE5hbWUgKyAiXG4iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoImNvbnRleHQgdXNlciBoYXMgcm9sZSBcImZvb1wiOiAiICsgc2VjdXJpdHlDb250ZXh0LmlzQ2FsbGVySW5Sb2xlKCJmb28iKSArICJcbiIpOwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgiY29udGV4dCB1c2VyIGhhcyByb2xlIFwiYmFyXCI6ICIgKyBzZWN1cml0eUNvbnRleHQuaXNDYWxsZXJJblJvbGUoImJhciIpICsgIlxuIik7CiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJjb250ZXh0IHVzZXIgaGFzIHJvbGUgXCJrYXpcIjogIiArIHNlY3VyaXR5Q29udGV4dC5pc0NhbGxlckluUm9sZSgia2F6IikgKyAiXG4iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoImhhcyBhY2Nlc3MgIiArIHNlY3VyaXR5Q29udGV4dC5oYXNBY2Nlc3NUb1dlYlJlc291cmNlKCIvcHJvdGVjdGVkU2VydmxldCIpICsgIlxuIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJBbGwgZGVjbGFyZWQgcm9sZXMgb2YgdXNlciAiICsgKChTZWN1cml0eUNvbnRleHRJbXBsKXNlY3VyaXR5Q29udGV4dCkuZ2V0QWxsRGVjbGFyZWRDYWxsZXJSb2xlcygpICsgIlxuIik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kb3VibGUtaGFtL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kb3VibGUtaGFtL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKaW5kZXggZGVmZGE4Mi4uYTEyMjBhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZG91YmxlLWhhbS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRvdWJsZS1oYW0vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YQpAQCAtMzIsMjAgKzMyLDIwIEBACiAKIEBSZXF1ZXN0U2NvcGVkCiBwdWJsaWMgY2xhc3MgVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtIGltcGxlbWVudHMgSHR0cEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtIHsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwcml2YXRlIElkZW50aXR5U3RvcmVIYW5kbGVyIGlkZW50aXR5U3RvcmVIYW5kbGVyOwogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIEF1dGhlbnRpY2F0aW9uU3RhdHVzIHZhbGlkYXRlUmVxdWVzdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwgSHR0cE1lc3NhZ2VDb250ZXh0IGh0dHBNZXNzYWdlQ29udGV4dCkgdGhyb3dzIEF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uIHsKIAotICAgIAkvLyBHZXQgdGhlIChjYWxsZXIpIG5hbWUgYW5kIHBhc3N3b3JkIGZyb20gdGhlIHJlcXVlc3QKKyAgICAgICAgLy8gR2V0IHRoZSAoY2FsbGVyKSBuYW1lIGFuZCBwYXNzd29yZCBmcm9tIHRoZSByZXF1ZXN0CiAgICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgZm9yIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBleGFtcGxlIG9ubHkuIEluIHByYWN0aWNlCiAgICAgICAgIC8vIHB1dHRpbmcgdGhlIHBhc3N3b3JkIGluIGEgcmVxdWVzdCBxdWVyeSBwYXJhbWV0ZXIgaXMgaGlnaGx5CiAgICAgICAgIC8vIGluc2VjdXJlCiAgICAgICAgIFN0cmluZyBuYW1lID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKICAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInBhc3N3b3JkIik7Ci0gICAgCQorCiAgICAgICAgIGlmIChuYW1lICE9IG51bGwgJiYgcGFzc3dvcmQgIT0gbnVsbCkgewogCiAgICAgICAgICAgICAvLyBEZWxlZ2F0ZSB0aGUge2NyZWRlbnRpYWxzIGluIC0+IGlkZW50aXR5IGRhdGEgb3V0fSBmdW5jdGlvbiB0bwpAQCAtNTUsMTcgKzU1LDE3IEBACiAKICAgICAgICAgICAgIGlmIChyZXN1bHQuZ2V0U3RhdHVzKCkgPT0gVkFMSUQpIHsKICAgICAgICAgICAgICAgICAvLyBDb21tdW5pY2F0ZSB0aGUgZGV0YWlscyBvZiB0aGUgYXV0aGVudGljYXRlZCB1c2VyIHRvIHRoZQotICAgICAgICAgICAgICAgIC8vIGNvbnRhaW5lci4gSW4gbWFueSBjYXNlcyB0aGUgdW5kZXJseWluZyBoYW5kbGVyIHdpbGwganVzdCBzdG9yZSB0aGUgZGV0YWlscyAKLSAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIGNvbnRhaW5lciB3aWxsIGFjdHVhbGx5IGhhbmRsZSB0aGUgbG9naW4gYWZ0ZXIgd2UgcmV0dXJuIGZyb20gCisgICAgICAgICAgICAgICAgLy8gY29udGFpbmVyLiBJbiBtYW55IGNhc2VzIHRoZSB1bmRlcmx5aW5nIGhhbmRsZXIgd2lsbCBqdXN0IHN0b3JlIHRoZSBkZXRhaWxzCisgICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBjb250YWluZXIgd2lsbCBhY3R1YWxseSBoYW5kbGUgdGhlIGxvZ2luIGFmdGVyIHdlIHJldHVybiBmcm9tCiAgICAgICAgICAgICAgICAgLy8gdGhpcyBtZXRob2QuCiAgICAgICAgICAgICAgICAgcmV0dXJuIGh0dHBNZXNzYWdlQ29udGV4dC5ub3RpZnlDb250YWluZXJBYm91dExvZ2luKAogICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ2V0Q2FsbGVyUHJpbmNpcGFsKCksIHJlc3VsdC5nZXRDYWxsZXJHcm91cHMoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQucmVzcG9uc2VVbmF1dGhvcml6ZWQoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAKKyAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQuZG9Ob3RoaW5nKCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kb3VibGUtaGFtL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kb3VibGUtaGFtL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKaW5kZXggMDlmZmZiNC4uNmNhMzU0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZG91YmxlLWhhbS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRvdWJsZS1oYW0vc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApAQCAtMTgsMjcgKzE4LDI3IEBACiAtLT4KIAogPHdlYi1hcHAKLQl4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSBodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18xLnhzZCIKLQl2ZXJzaW9uPSIzLjEiCisgICAgeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItYXBwXzNfMS54c2QiCisgICAgdmVyc2lvbj0iMy4xIgogPgogCi0JPCEtLSBTZWN1cml0eSBjb25zdHJhaW50cyBhbmQgcm9sZXMuIC0tPgorICAgIDwhLS0gU2VjdXJpdHkgY29uc3RyYWludHMgYW5kIHJvbGVzLiAtLT4KIAotCTxzZWN1cml0eS1jb25zdHJhaW50PgotCQk8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+Ci0JCQk8d2ViLXJlc291cmNlLW5hbWU+VXNlciBwYWdlczwvd2ViLXJlc291cmNlLW5hbWU+Ci0JCQk8dXJsLXBhdHRlcm4+L3Byb3RlY3RlZFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgotCQk8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgotCQk8YXV0aC1jb25zdHJhaW50PgotCQkJPHJvbGUtbmFtZT5mb288L3JvbGUtbmFtZT4KLQkJPC9hdXRoLWNvbnN0cmFpbnQ+Ci0JPC9zZWN1cml0eS1jb25zdHJhaW50PgorICAgIDxzZWN1cml0eS1jb25zdHJhaW50PgorICAgICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CisgICAgICAgICAgICA8d2ViLXJlc291cmNlLW5hbWU+VXNlciBwYWdlczwvd2ViLXJlc291cmNlLW5hbWU+CisgICAgICAgICAgICA8dXJsLXBhdHRlcm4+L3Byb3RlY3RlZFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgorICAgICAgICA8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgorICAgICAgICA8YXV0aC1jb25zdHJhaW50PgorICAgICAgICAgICAgPHJvbGUtbmFtZT5mb288L3JvbGUtbmFtZT4KKyAgICAgICAgPC9hdXRoLWNvbnN0cmFpbnQ+CisgICAgPC9zZWN1cml0eS1jb25zdHJhaW50PgogCiAKLQk8c2VjdXJpdHktcm9sZT4KLQkJPHJvbGUtbmFtZT5mb288L3JvbGUtbmFtZT4KLQk8L3NlY3VyaXR5LXJvbGU+CisgICAgPHNlY3VyaXR5LXJvbGU+CisgICAgICAgIDxyb2xlLW5hbWU+Zm9vPC9yb2xlLW5hbWU+CisgICAgPC9zZWN1cml0eS1yb2xlPgogCiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kb3VibGUtaGFtL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwRG91YmxlSEFNSVQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRvdWJsZS1oYW0vc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBEb3VibGVIQU1JVC5qYXZhCmluZGV4IDcwMWQ0MDcuLjFiNWViNmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRvdWJsZS1oYW0vc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBEb3VibGVIQU1JVC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRvdWJsZS1oYW0vc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBEb3VibGVIQU1JVC5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50U3VtbWFyeSgpewogICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9Ci0gICAKKwogICAgIEBEZXBsb3ltZW50KHRlc3RhYmxlID0gZmFsc2UpCiAgICAgcHVibGljIHN0YXRpYyBBcmNoaXZlPD8+IGNyZWF0ZURlcGxveW1lbnQoKSB7CiAgICAgICAgIHJldHVybiBtYXZlbldhcigpOwpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICBhc3NlcnROb3RBdXRoZW50aWNhdGVkRXJyb3IoCiAgICAgICAgICAgICAgICAgcmVzcG9uc2VGcm9tU2VydmVyKCIvc2VydmxldCIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RDdXN0b21IYW0oKSB7CiAgICAgICAgIGFzc2VydE5vdEF1dGhlbnRpY2F0ZWRFcnJvcigKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWhhbS1vcmRlcmluZy9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtaGFtLW9yZGVyaW5nL3BvbS54bWwKaW5kZXggNmJkZDVmOC4uNmM4ZjYyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtaGFtLW9yZGVyaW5nL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtaGFtLW9yZGVyaW5nL3BvbS54bWwKQEAgLTE3LDI0ICsxNywyNCBAQAogLS0+CiAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+Ci0JPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLnNvdGVyaWEudGVzdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5zb3RlcmlhPC9hcnRpZmFjdElkPgogICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAotCTxhcnRpZmFjdElkPmFwcC1oYW0tb3JkZXJpbmc8L2FydGlmYWN0SWQ+Ci0JPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KLQkKLQk8YnVpbGQ+CisgICAgPGFydGlmYWN0SWQ+YXBwLWhhbS1vcmRlcmluZzwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgorCisgICAgPGJ1aWxkPgogICAgICAgICA8ZmluYWxOYW1lPmFwcC1oYW0tb3JkZXJpbmc8L2ZpbmFsTmFtZT4KLQk8L2J1aWxkPgotICAgIAorICAgIDwvYnVpbGQ+CisKICAgICA8cHJvcGVydGllcz4KICAgICAgICAgPGZhaWxPbk1pc3NpbmdXZWJYbWw+ZmFsc2U8L2ZhaWxPbk1pc3NpbmdXZWJYbWw+Ci0gICAgPC9wcm9wZXJ0aWVzPiAgCisgICAgPC9wcm9wZXJ0aWVzPgogCiAgIDxkZXBlbmRlbmNpZXM+CiAgICAgPGRlcGVuZGVuY3k+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1oYW0tb3JkZXJpbmcvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1oYW0tb3JkZXJpbmcvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TZXJ2bGV0LmphdmEKaW5kZXggMmU5MzQ5My4uZjllNWJlNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtaGFtLW9yZGVyaW5nL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWhhbS1vcmRlcmluZy9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1NlcnZsZXQuamF2YQpAQCAtMzUsNyArMzUsNyBAQAogLyoqCiAgKiBUZXN0IFNlcnZsZXQgdGhhdCBwcmludHMgb3V0IHRoZSBuYW1lIG9mIHRoZSBhdXRoZW50aWNhdGVkIGNhbGxlciBhbmQgd2hldGhlcgogICogdGhpcyBjYWxsZXIgaXMgaW4gYW55IG9mIHRoZSByb2xlcyB7Zm9vLCBiYXIsIGthen0KLSAqIAorICoKICAqCiAgKi8KIEBEZWNsYXJlUm9sZXMoeyAiZm9vIiwgImJhciIsICJrYXoiIH0pCkBAIC00Myw3ICs0Myw3IEBACiBwdWJsaWMgY2xhc3MgU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotICAgIAorCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgU2VjdXJpdHlDb250ZXh0IHNlY3VyaXR5Q29udGV4dDsKIApAQCAtNzgsMjEgKzc4LDIxIEBACiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJ3ZWIgdXNlciBoYXMgcm9sZSBcImZvb1wiOiAiICsgcmVxdWVzdC5pc1VzZXJJblJvbGUoImZvbyIpICsgIlxuIik7CiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJ3ZWIgdXNlciBoYXMgcm9sZSBcImJhclwiOiAiICsgcmVxdWVzdC5pc1VzZXJJblJvbGUoImJhciIpICsgIlxuIik7CiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJ3ZWIgdXNlciBoYXMgcm9sZSBcImthelwiOiAiICsgcmVxdWVzdC5pc1VzZXJJblJvbGUoImtheiIpICsgIlxuIik7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBjb250ZXh0TmFtZSA9IG51bGw7CiAgICAgICAgIGlmIChzZWN1cml0eUNvbnRleHQuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkgIT0gbnVsbCkgewogICAgICAgICAgICAgY29udGV4dE5hbWUgPSBzZWN1cml0eUNvbnRleHQuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkuZ2V0TmFtZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJjb250ZXh0IHVzZXJuYW1lOiAiICsgY29udGV4dE5hbWUgKyAiXG4iKTsKIAotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgiY29udGV4dCB1c2VyIGhhcyByb2xlIFwiZm9vXCI6ICIgKyBzZWN1cml0eUNvbnRleHQuaXNDYWxsZXJJblJvbGUoImZvbyIpICsgIlxuIik7CiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJjb250ZXh0IHVzZXIgaGFzIHJvbGUgXCJiYXJcIjogIiArIHNlY3VyaXR5Q29udGV4dC5pc0NhbGxlckluUm9sZSgiYmFyIikgKyAiXG4iKTsKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoImNvbnRleHQgdXNlciBoYXMgcm9sZSBcImthelwiOiAiICsgc2VjdXJpdHlDb250ZXh0LmlzQ2FsbGVySW5Sb2xlKCJrYXoiKSArICJcbiIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgiaGFzIGFjY2VzcyAiICsgc2VjdXJpdHlDb250ZXh0Lmhhc0FjY2Vzc1RvV2ViUmVzb3VyY2UoIi9wcm90ZWN0ZWRTZXJ2bGV0IikgKyAiXG4iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoIkFsbCBkZWNsYXJlZCByb2xlcyBvZiB1c2VyICIgKyAoKFNlY3VyaXR5Q29udGV4dEltcGwpc2VjdXJpdHlDb250ZXh0KS5nZXRBbGxEZWNsYXJlZENhbGxlclJvbGVzKCkgKyAiXG4iKTsKICAgICAgICAgU3RyaW5nIGludkxpc3RTdHIgPSAoU3RyaW5nKXJlcXVlc3QuZ2V0QXR0cmlidXRlKCJtZXRob2RJbnZMaXN0Iik7CiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJPcmRlcmluZ0xpc3Q6ICIgKyBpbnZMaXN0U3RyKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWhhbS1vcmRlcmluZy9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtaGFtLW9yZGVyaW5nL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKaW5kZXggZjI1MGQ5ZS4uYmQ0YzEzOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtaGFtLW9yZGVyaW5nL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtaGFtLW9yZGVyaW5nL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKIAogQFJlcXVlc3RTY29wZWQKIHB1YmxpYyBjbGFzcyBUZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20gaW1wbGVtZW50cyBIdHRwQXV0aGVudGljYXRpb25NZWNoYW5pc20gewotICAgIAorCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgSWRlbnRpdHlTdG9yZUhhbmRsZXIgaWRlbnRpdHlTdG9yZUhhbmRsZXI7CiAKQEAgLTYwLDE1ICs2MCwxNSBAQAogCiAgICAgICAgICAgICBpZiAocmVzdWx0LmdldFN0YXR1cygpID09IFZBTElEKSB7CiAgICAgICAgICAgICAgICAgLy8gQ29tbXVuaWNhdGUgdGhlIGRldGFpbHMgb2YgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlciB0byB0aGUKLSAgICAgICAgICAgICAgICAvLyBjb250YWluZXIuIEluIG1hbnkgY2FzZXMgdGhlIHVuZGVybHlpbmcgaGFuZGxlciB3aWxsIGp1c3Qgc3RvcmUgdGhlIGRldGFpbHMgCi0gICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBjb250YWluZXIgd2lsbCBhY3R1YWxseSBoYW5kbGUgdGhlIGxvZ2luIGFmdGVyIHdlIHJldHVybiBmcm9tIAorICAgICAgICAgICAgICAgIC8vIGNvbnRhaW5lci4gSW4gbWFueSBjYXNlcyB0aGUgdW5kZXJseWluZyBoYW5kbGVyIHdpbGwganVzdCBzdG9yZSB0aGUgZGV0YWlscworICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgY29udGFpbmVyIHdpbGwgYWN0dWFsbHkgaGFuZGxlIHRoZSBsb2dpbiBhZnRlciB3ZSByZXR1cm4gZnJvbQogICAgICAgICAgICAgICAgIC8vIHRoaXMgbWV0aG9kLgogICAgICAgICAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQubm90aWZ5Q29udGFpbmVyQWJvdXRMb2dpbigKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdldENhbGxlclByaW5jaXBhbCgpLCByZXN1bHQuZ2V0Q2FsbGVyR3JvdXBzKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0LnJlc3BvbnNlVW5hdXRob3JpemVkKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gCisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0LmRvTm90aGluZygpOwogICAgIH0KQEAgLTEwNyw1ICsxMDcsNSBAQAogICAgICAgICAgICAgcmVxdWVzdC5zZXRBdHRyaWJ1dGUoIm1ldGhvZEludkxpc3QiLCBpbnZMaXN0LnN0cmVhbSgpLmNvbGxlY3QoQ29sbGVjdG9ycy5qb2luaW5nKCIsIikpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtaGFtLW9yZGVyaW5nL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1oYW0tb3JkZXJpbmcvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAppbmRleCAwOWZmZmI0Li42Y2EzNTQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1oYW0tb3JkZXJpbmcvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1oYW0tb3JkZXJpbmcvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApAQCAtMTgsMjcgKzE4LDI3IEBACiAtLT4KIAogPHdlYi1hcHAKLQl4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSBodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18xLnhzZCIKLQl2ZXJzaW9uPSIzLjEiCisgICAgeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItYXBwXzNfMS54c2QiCisgICAgdmVyc2lvbj0iMy4xIgogPgogCi0JPCEtLSBTZWN1cml0eSBjb25zdHJhaW50cyBhbmQgcm9sZXMuIC0tPgorICAgIDwhLS0gU2VjdXJpdHkgY29uc3RyYWludHMgYW5kIHJvbGVzLiAtLT4KIAotCTxzZWN1cml0eS1jb25zdHJhaW50PgotCQk8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+Ci0JCQk8d2ViLXJlc291cmNlLW5hbWU+VXNlciBwYWdlczwvd2ViLXJlc291cmNlLW5hbWU+Ci0JCQk8dXJsLXBhdHRlcm4+L3Byb3RlY3RlZFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgotCQk8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgotCQk8YXV0aC1jb25zdHJhaW50PgotCQkJPHJvbGUtbmFtZT5mb288L3JvbGUtbmFtZT4KLQkJPC9hdXRoLWNvbnN0cmFpbnQ+Ci0JPC9zZWN1cml0eS1jb25zdHJhaW50PgorICAgIDxzZWN1cml0eS1jb25zdHJhaW50PgorICAgICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CisgICAgICAgICAgICA8d2ViLXJlc291cmNlLW5hbWU+VXNlciBwYWdlczwvd2ViLXJlc291cmNlLW5hbWU+CisgICAgICAgICAgICA8dXJsLXBhdHRlcm4+L3Byb3RlY3RlZFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgorICAgICAgICA8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgorICAgICAgICA8YXV0aC1jb25zdHJhaW50PgorICAgICAgICAgICAgPHJvbGUtbmFtZT5mb288L3JvbGUtbmFtZT4KKyAgICAgICAgPC9hdXRoLWNvbnN0cmFpbnQ+CisgICAgPC9zZWN1cml0eS1jb25zdHJhaW50PgogCiAKLQk8c2VjdXJpdHktcm9sZT4KLQkJPHJvbGUtbmFtZT5mb288L3JvbGUtbmFtZT4KLQk8L3NlY3VyaXR5LXJvbGU+CisgICAgPHNlY3VyaXR5LXJvbGU+CisgICAgICAgIDxyb2xlLW5hbWU+Zm9vPC9yb2xlLW5hbWU+CisgICAgPC9zZWN1cml0eS1yb2xlPgogCiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1oYW0tb3JkZXJpbmcvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBIQU1PcmRlcmluZ0lULmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1oYW0tb3JkZXJpbmcvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBIQU1PcmRlcmluZ0lULmphdmEKaW5kZXggNTY2ZjZjOC4uY2FhYzcyZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtaGFtLW9yZGVyaW5nL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwSEFNT3JkZXJpbmdJVC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWhhbS1vcmRlcmluZy9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcEhBTU9yZGVyaW5nSVQuamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludFN1bW1hcnkoKXsKICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQotICAgCisKICAgICBARGVwbG95bWVudCh0ZXN0YWJsZSA9IGZhbHNlKQogICAgIHB1YmxpYyBzdGF0aWMgQXJjaGl2ZTw/PiBjcmVhdGVEZXBsb3ltZW50KCkgewogICAgICAgICByZXR1cm4gbWF2ZW5XYXIoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW1lbS1iYXNpYy9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbWVtLWJhc2ljL3BvbS54bWwKaW5kZXggNDU3ZGExNS4uN2FiNGFiMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbWVtLWJhc2ljL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbWVtLWJhc2ljL3BvbS54bWwKQEAgLTE5LDI0ICsxOSwyNCBAQAogPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgogICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLQkKKwogICAgIDxwYXJlbnQ+CiAgICAgICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guc290ZXJpYS50ZXN0PC9ncm91cElkPgogICAgICAgICA8YXJ0aWZhY3RJZD5zb3RlcmlhPC9hcnRpZmFjdElkPgogICAgICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8L3BhcmVudD4KLQkKKwogICAgIDxhcnRpZmFjdElkPmFwcC1tZW0tYmFzaWM8L2FydGlmYWN0SWQ+CiAgICAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KLQkKKwogICAgIDxidWlsZD4KICAgICAgICAgPGZpbmFsTmFtZT5hcHAtbWVtLWJhc2ljPC9maW5hbE5hbWU+CiAgICAgPC9idWlsZD4KLSAgICAgIAorCiAgICAgPHByb3BlcnRpZXM+CiAgICAgICAgIDxmYWlsT25NaXNzaW5nV2ViWG1sPmZhbHNlPC9mYWlsT25NaXNzaW5nV2ViWG1sPgogICAgIDwvcHJvcGVydGllcz4KLSAgICAKKwogICAgIDxkZXBlbmRlbmNpZXM+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5zb3RlcmlhLnRlc3Q8L2dyb3VwSWQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tZW0tYmFzaWMvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW1lbS1iYXNpYy9zcmMvbWFpbi9qYXZhL3Rlc3QvU2VydmxldC5qYXZhCmluZGV4IGIzYWNlNTguLjQ3NjIzMjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW1lbS1iYXNpYy9zcmMvbWFpbi9qYXZhL3Rlc3QvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW1lbS1iYXNpYy9zcmMvbWFpbi9qYXZhL3Rlc3QvU2VydmxldC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgcmVhbG1OYW1lPSJ0ZXN0IHJlYWxtIgogKQogCi1ARW1iZWRkZWRJZGVudGl0eVN0b3JlRGVmaW5pdGlvbih7IAorQEVtYmVkZGVkSWRlbnRpdHlTdG9yZURlZmluaXRpb24oewogICAgIEBDcmVkZW50aWFscyhjYWxsZXJOYW1lID0gInJlemEiLCBwYXNzd29yZCA9ICJzZWNyZXQxIiwgZ3JvdXBzID0geyAiZm9vIiwgImJhciIgfSksCiAgICAgQENyZWRlbnRpYWxzKGNhbGxlck5hbWUgPSAiYWxleCIsIHBhc3N3b3JkID0gInNlY3JldDIiLCBncm91cHMgPSB7ICJmb28iLCAia2F6IiB9KSwKICAgICBAQ3JlZGVudGlhbHMoY2FsbGVyTmFtZSA9ICJhcmphbiIsIHBhc3N3b3JkID0gInNlY3JldDMiLCBncm91cHMgPSB7ICJmb28iIH0pIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW1lbS1iYXNpYy9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcE1lbUJhc2ljSVQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW1lbS1iYXNpYy9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcE1lbUJhc2ljSVQuamF2YQppbmRleCA2YjA3OTcxLi4xMDJhMmMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tZW0tYmFzaWMvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBNZW1CYXNpY0lULmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbWVtLWJhc2ljL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwTWVtQmFzaWNJVC5qYXZhCkBAIC00Nyw3NSArNDcsNzUgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRTdW1tYXJ5KCl7CiAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KLSAgICAKKwogICAgIEBEZXBsb3ltZW50KHRlc3RhYmxlID0gZmFsc2UpCi0gICAgcHVibGljIHN0YXRpYyBBcmNoaXZlPD8+IGNyZWF0ZURlcGxveW1lbnQoKSB7ICAgICAgICAKKyAgICBwdWJsaWMgc3RhdGljIEFyY2hpdmU8Pz4gY3JlYXRlRGVwbG95bWVudCgpIHsKICAgICAgICAgcmV0dXJuIG1hdmVuV2FyKCk7CiAgICAgfQogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0QXV0aGVudGljYXRlZCgpIHsKLSAgICAJCi0gICAgCURlZmF1bHRDcmVkZW50aWFsc1Byb3ZpZGVyIGNyZWRlbnRpYWxzUHJvdmlkZXIgPSBuZXcgRGVmYXVsdENyZWRlbnRpYWxzUHJvdmlkZXIoKTsKLSAgICAJY3JlZGVudGlhbHNQcm92aWRlci5hZGRDcmVkZW50aWFscygicmV6YSIsICJzZWNyZXQxIik7Ci0gICAgCQotICAgIAlnZXRXZWJDbGllbnQoKS5zZXRDcmVkZW50aWFsc1Byb3ZpZGVyKGNyZWRlbnRpYWxzUHJvdmlkZXIpOwotICAgIAkKKworICAgICAgICBEZWZhdWx0Q3JlZGVudGlhbHNQcm92aWRlciBjcmVkZW50aWFsc1Byb3ZpZGVyID0gbmV3IERlZmF1bHRDcmVkZW50aWFsc1Byb3ZpZGVyKCk7CisgICAgICAgIGNyZWRlbnRpYWxzUHJvdmlkZXIuYWRkQ3JlZGVudGlhbHMoInJlemEiLCAic2VjcmV0MSIpOworCisgICAgICAgIGdldFdlYkNsaWVudCgpLnNldENyZWRlbnRpYWxzUHJvdmlkZXIoY3JlZGVudGlhbHNQcm92aWRlcik7CisKICAgICAgICAgYXNzZXJ0RGVmYXVsdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICByZWFkRnJvbVNlcnZlcigiL3NlcnZsZXQiKSk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Tm90QXV0aGVudGljYXRlZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgV2ViUmVzcG9uc2UgcmVzcG9uc2UgPSByZXNwb25zZUZyb21TZXJ2ZXIoIi9zZXJ2bGV0Iik7Ci0gICAgICAgIAorCiAgICAgICAgIGFzc2VydEVxdWFscyg0MDEsIHJlc3BvbnNlLmdldFN0YXR1c0NvZGUoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGFzc2VydFRydWUoCi0gICAgICAgICAgICAiUmVzcG9uc2UgZGlkIG5vdCBjb250YWluIHRoZSBcIldXVy1BdXRoZW50aWNhdGVcIiBoZWFkZXIsIGJ1dCBzaG91bGQgaGF2ZSIsIAorICAgICAgICAgICAgIlJlc3BvbnNlIGRpZCBub3QgY29udGFpbiB0aGUgXCJXV1ctQXV0aGVudGljYXRlXCIgaGVhZGVyLCBidXQgc2hvdWxkIGhhdmUiLAogICAgICAgICAgICAgcmVzcG9uc2UuZ2V0UmVzcG9uc2VIZWFkZXJWYWx1ZSgiV1dXLUF1dGhlbnRpY2F0ZSIpICE9IG51bGwpOwotICAgICAgICAKKwogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlc3BvbnNlLmdldENvbnRlbnRBc1N0cmluZygpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkV3JvbmdOYW1lKCkgewotICAgIAkKLSAgICAJRGVmYXVsdENyZWRlbnRpYWxzUHJvdmlkZXIgY3JlZGVudGlhbHNQcm92aWRlciA9IG5ldyBEZWZhdWx0Q3JlZGVudGlhbHNQcm92aWRlcigpOwotICAgIAljcmVkZW50aWFsc1Byb3ZpZGVyLmFkZENyZWRlbnRpYWxzKCJyb21vIiwgInNlY3JldDEiKTsKLSAgICAJCi0gICAgCWdldFdlYkNsaWVudCgpLnNldENyZWRlbnRpYWxzUHJvdmlkZXIoY3JlZGVudGlhbHNQcm92aWRlcik7Ci0gICAgCQotICAgIAlXZWJSZXNwb25zZSByZXNwb25zZSA9IHJlc3BvbnNlRnJvbVNlcnZlcigiL3NlcnZsZXQiKTsKLSAgICAgICAgICAKLSAgICAJYXNzZXJ0RXF1YWxzKDQwMSwgcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZSgpKTsKLSAgICAgICAgICAKLSAgICAJYXNzZXJ0VHJ1ZSgKLQkgICAgICAgICJSZXNwb25zZSBkaWQgbm90IGNvbnRhaW4gdGhlIFwiV1dXLUF1dGhlbnRpY2F0ZVwiIGhlYWRlciwgYnV0IHNob3VsZCBoYXZlIiwgCi0JICAgICAgICByZXNwb25zZS5nZXRSZXNwb25zZUhlYWRlclZhbHVlKCJXV1ctQXV0aGVudGljYXRlIikgIT0gbnVsbCk7Ci0gICAgICAgICAgCi0gICAgCWFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAotCSAgICAgICAgcmVzcG9uc2UuZ2V0Q29udGVudEFzU3RyaW5nKCkpOworCisgICAgICAgIERlZmF1bHRDcmVkZW50aWFsc1Byb3ZpZGVyIGNyZWRlbnRpYWxzUHJvdmlkZXIgPSBuZXcgRGVmYXVsdENyZWRlbnRpYWxzUHJvdmlkZXIoKTsKKyAgICAgICAgY3JlZGVudGlhbHNQcm92aWRlci5hZGRDcmVkZW50aWFscygicm9tbyIsICJzZWNyZXQxIik7CisKKyAgICAgICAgZ2V0V2ViQ2xpZW50KCkuc2V0Q3JlZGVudGlhbHNQcm92aWRlcihjcmVkZW50aWFsc1Byb3ZpZGVyKTsKKworICAgICAgICBXZWJSZXNwb25zZSByZXNwb25zZSA9IHJlc3BvbnNlRnJvbVNlcnZlcigiL3NlcnZsZXQiKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoNDAxLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlKCkpOworCisgICAgICAgIGFzc2VydFRydWUoCisgICAgICAgICAgICAiUmVzcG9uc2UgZGlkIG5vdCBjb250YWluIHRoZSBcIldXVy1BdXRoZW50aWNhdGVcIiBoZWFkZXIsIGJ1dCBzaG91bGQgaGF2ZSIsCisgICAgICAgICAgICByZXNwb25zZS5nZXRSZXNwb25zZUhlYWRlclZhbHVlKCJXV1ctQXV0aGVudGljYXRlIikgIT0gbnVsbCk7CisKKyAgICAgICAgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoCisgICAgICAgICAgICByZXNwb25zZS5nZXRDb250ZW50QXNTdHJpbmcoKSk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Tm90QXV0aGVudGljYXRlZFdyb25nUGFzc3dvcmQoKSB7Ci0gICAgCQotICAgICAgCURlZmF1bHRDcmVkZW50aWFsc1Byb3ZpZGVyIGNyZWRlbnRpYWxzUHJvdmlkZXIgPSBuZXcgRGVmYXVsdENyZWRlbnRpYWxzUHJvdmlkZXIoKTsKLSAgICAJY3JlZGVudGlhbHNQcm92aWRlci5hZGRDcmVkZW50aWFscygicmV6YSIsICJ3cm9uZ3Bhc3N3b3JkIik7Ci0gICAgCQotICAgIAlnZXRXZWJDbGllbnQoKS5zZXRDcmVkZW50aWFsc1Byb3ZpZGVyKGNyZWRlbnRpYWxzUHJvdmlkZXIpOwotICAgIAkKKworICAgICAgICAgIERlZmF1bHRDcmVkZW50aWFsc1Byb3ZpZGVyIGNyZWRlbnRpYWxzUHJvdmlkZXIgPSBuZXcgRGVmYXVsdENyZWRlbnRpYWxzUHJvdmlkZXIoKTsKKyAgICAgICAgY3JlZGVudGlhbHNQcm92aWRlci5hZGRDcmVkZW50aWFscygicmV6YSIsICJ3cm9uZ3Bhc3N3b3JkIik7CisKKyAgICAgICAgZ2V0V2ViQ2xpZW50KCkuc2V0Q3JlZGVudGlhbHNQcm92aWRlcihjcmVkZW50aWFsc1Byb3ZpZGVyKTsKKwogICAgICAgICBXZWJSZXNwb25zZSByZXNwb25zZSA9IHJlc3BvbnNlRnJvbVNlcnZlcigiL3NlcnZsZXQiKTsKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0RXF1YWxzKDQwMSwgcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZSgpKTsKLSAgICAgICAgICAKKwogICAgICAgICBhc3NlcnRUcnVlKAotICAgICAgICAgICAgIlJlc3BvbnNlIGRpZCBub3QgY29udGFpbiB0aGUgXCJXV1ctQXV0aGVudGljYXRlXCIgaGVhZGVyLCBidXQgc2hvdWxkIGhhdmUiLCAKKyAgICAgICAgICAgICJSZXNwb25zZSBkaWQgbm90IGNvbnRhaW4gdGhlIFwiV1dXLUF1dGhlbnRpY2F0ZVwiIGhlYWRlciwgYnV0IHNob3VsZCBoYXZlIiwKICAgICAgICAgICAgIHJlc3BvbnNlLmdldFJlc3BvbnNlSGVhZGVyVmFsdWUoIldXVy1BdXRoZW50aWNhdGUiKSAhPSBudWxsKTsKLSAgICAgICAgICAKKwogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlc3BvbnNlLmdldENvbnRlbnRBc1N0cmluZygpKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tZW0tZm9ybS9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbWVtLWZvcm0vcG9tLnhtbAppbmRleCBlZWRhZTM0Li4zMmYwYzNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tZW0tZm9ybS9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW1lbS1mb3JtL3BvbS54bWwKQEAgLTE3LDI1ICsxNywyNSBAQAogLS0+CiAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+Ci0JPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLnNvdGVyaWEudGVzdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5zb3RlcmlhPC9hcnRpZmFjdElkPgogICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAotCTxhcnRpZmFjdElkPmFwcC1tZW0tZm9ybTwvYXJ0aWZhY3RJZD4KLQk8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgotCQotCTxidWlsZD4KKyAgICA8YXJ0aWZhY3RJZD5hcHAtbWVtLWZvcm08L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KKworICAgIDxidWlsZD4KICAgICAgICAgPGZpbmFsTmFtZT5hcHAtbWVtLWZvcm08L2ZpbmFsTmFtZT4KLQk8L2J1aWxkPgorICAgIDwvYnVpbGQ+CiAKICAgICA8cHJvcGVydGllcz4KICAgICAgICAgPGZhaWxPbk1pc3NpbmdXZWJYbWw+ZmFsc2U8L2ZhaWxPbk1pc3NpbmdXZWJYbWw+CiAgICAgPC9wcm9wZXJ0aWVzPgotICAgIAorCiAgICAgPGRlcGVuZGVuY2llcz4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLnNvdGVyaWEudGVzdDwvZ3JvdXBJZD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW1lbS1mb3JtL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvTG9naW5FcnJvclNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW1lbS1mb3JtL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvTG9naW5FcnJvclNlcnZsZXQuamF2YQppbmRleCA4NjkzOTU3Li5mN2RhMmRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tZW0tZm9ybS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0xvZ2luRXJyb3JTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbWVtLWZvcm0vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9Mb2dpbkVycm9yU2VydmxldC5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiAKIC8qKgogICogU2VydmxldCB0aGF0IGlzIGludm9rZWQgd2hlbiB0aGUgY2FsbGVyIGRpZCBub3QgYXV0aGVudGljYXRlIGNvcnJlY3RseQotICogCisgKgogICoKICAqLwogQFdlYlNlcnZsZXQoeyIvbG9naW4tZXJyb3Itc2VydmxldCJ9KQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbWVtLWZvcm0vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9Mb2dpblNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW1lbS1mb3JtL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvTG9naW5TZXJ2bGV0LmphdmEKaW5kZXggNmM2Y2NlNi4uYzcwM2Q5MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbWVtLWZvcm0vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9Mb2dpblNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tZW0tZm9ybS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0xvZ2luU2VydmxldC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgICAgICAgICAgIjxmb3JtIG1ldGhvZD1cIlBPU1RcIiBhY3Rpb249XCJqX3NlY3VyaXR5X2NoZWNrXCI+IiArCiAgICAgICAgICAgICAgICAgICAgICI8cD48c3Ryb25nPlVzZXJuYW1lIDwvc3Ryb25nPiIgKwogICAgICAgICAgICAgICAgICAgICAiPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImpfdXNlcm5hbWVcIj4iICsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgIjxwPjxzdHJvbmc+UGFzc3dvcmQgPC9zdHJvbmc+IiArCiAgICAgICAgICAgICAgICAgICAgICI8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgbmFtZT1cImpfcGFzc3dvcmRcIj4iICsKICAgICAgICAgICAgICAgICAgICAgIjxwPiIgKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbWVtLWZvcm0vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tZW0tZm9ybS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1NlcnZsZXQuamF2YQppbmRleCA1YzkwMGI4Li44OGVhNGYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tZW0tZm9ybS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tZW0tZm9ybS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1NlcnZsZXQuamF2YQpAQCAtNTMsMzEgKzUzLDMxIEBACiAgICAgICAgIGlmIChyZXF1ZXN0LmdldFVzZXJQcmluY2lwYWwoKSAhPSBudWxsKSB7CiAgICAgICAgICAgICB3ZWJOYW1lID0gcmVxdWVzdC5nZXRVc2VyUHJpbmNpcGFsKCkuZ2V0TmFtZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKAogICAgICAgICAgICAgICAgICI8aHRtbD48Ym9keT4gVGhpcyBpcyBhIHNlcnZsZXQgPGJyPjxicj5cbiIgKwotICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAid2ViIHVzZXJuYW1lOiAiICsgd2ViTmFtZSArICI8YnI+PGJyPlxuIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgIndlYiB1c2VyIGhhcyByb2xlIFwiZm9vXCI6ICIgKyByZXF1ZXN0LmlzVXNlckluUm9sZSgiZm9vIikgKyAiPGJyPlxuIiArCiAgICAgICAgICAgICAgICAgICAgICJ3ZWIgdXNlciBoYXMgcm9sZSBcImJhclwiOiAiICsgcmVxdWVzdC5pc1VzZXJJblJvbGUoImJhciIpICsgIjxicj5cbiIgKwotICAgICAgICAgICAgICAgICAgICAid2ViIHVzZXIgaGFzIHJvbGUgXCJrYXpcIjogIiArIHJlcXVlc3QuaXNVc2VySW5Sb2xlKCJrYXoiKSArICI8YnI+PGJyPlxuIiArIAorICAgICAgICAgICAgICAgICAgICAid2ViIHVzZXIgaGFzIHJvbGUgXCJrYXpcIjogIiArIHJlcXVlc3QuaXNVc2VySW5Sb2xlKCJrYXoiKSArICI8YnI+PGJyPlxuIiArCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICI8Zm9ybSBtZXRob2Q9XCJQT1NUXCI+IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwibG9nb3V0XCIgdmFsdWU9XCJ0cnVlXCIgID4iICsKICAgICAgICAgICAgICAgICAgICAgICAgICI8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiTG9nb3V0XCI+IiArCiAgICAgICAgICAgICAgICAgICAgICI8L2Zvcm0+IiArCiAgICAgICAgICAgICAgICAgIjwvYm9keT48L2h0bWw+Iik7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBpZiAoInRydWUiLmVxdWFscyhyZXF1ZXN0LmdldFBhcmFtZXRlcigibG9nb3V0IikpKSB7CiAgICAgICAgICAgICByZXF1ZXN0LmxvZ291dCgpOwogICAgICAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuaW52YWxpZGF0ZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRvR2V0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW1lbS1mb3JtL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwTWVtRm9ybUlULmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tZW0tZm9ybS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcE1lbUZvcm1JVC5qYXZhCmluZGV4IDM2NDE2NzEuLjFhYzNhODAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW1lbS1mb3JtL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwTWVtRm9ybUlULmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbWVtLWZvcm0vc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBNZW1Gb3JtSVQuamF2YQpAQCAtMzUsNyArMzUsNyBAQAogCiBAUnVuV2l0aChBcnF1aWxsaWFuLmNsYXNzKQogcHVibGljIGNsYXNzIEFwcE1lbUZvcm1JVCBleHRlbmRzIEFycXVpbGxpYW5CYXNlIHsKLSAgICAKKwogICAgIEBEZXBsb3ltZW50KHRlc3RhYmxlID0gZmFsc2UpCiAgICAgcHVibGljIHN0YXRpYyBBcmNoaXZlPD8+IGNyZWF0ZURlcGxveW1lbnQoKSB7CiAgICAgICAgIHJldHVybiBtYXZlbldhcigpOwpAQCAtNDMsMjEyICs0MywyMTIgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEF1dGhlbnRpY2F0ZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICAvLyAxLiBJbml0aWFsbHkgcmVxdWVzdCBwcm90ZWN0ZWQgcGFnZSB3aGVuIHdlJ3JlIG5vdCBhdXRoZW50aWNhdGVkCi0gICAgICAgIAorCiAgICAgICAgIEh0bWxQYWdlIGxvZ2luUGFnZSA9IHBhZ2VGcm9tU2VydmVyKCIvc2VydmxldCIpOwotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICAvLyAyLiBTZXJ2ZXIgc2hvdWxkIGZvcndhcmQgdG8gbG9naW4gcGFnZQotICAgICAgICAKKwogICAgICAgICBhc3NlcnRUcnVlKAogICAgICAgICAgICAgIlRoZSBsb2dpbiBwYWdlIHNob3VsZCBoYXZlIGJlZW4gZGlzcGxheWVkLCBidXQgd2FzIG5vdCIsCiAgICAgICAgICAgICBsb2dpblBhZ2UuZ2V0V2ViUmVzcG9uc2UoKS5nZXRDb250ZW50QXNTdHJpbmcoKS5jb250YWlucygiTG9naW4gdG8gY29udGludWUiKQogICAgICAgICApOwotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICAvLyAzLiBTdWJtaXQgdGhlIGZvcm0gb24gdGhlIGxvZ2luIHBhZ2Ugd2l0aCB0aGUgY29ycmVjdCBjcmVkZW50aWFscwotICAgICAgICAKKwogICAgICAgICBIdG1sRm9ybSBmb3JtID0gbG9naW5QYWdlLmdldEZvcm1zKCkuZ2V0KDApOwotICAgICAgICAKKwogICAgICAgICBmb3JtLmdldElucHV0QnlOYW1lKCJqX3VzZXJuYW1lIikKICAgICAgICAgICAgIC5zZXRWYWx1ZUF0dHJpYnV0ZSgicmV6YSIpOwotICAgICAgICAKKwogICAgICAgICBmb3JtLmdldElucHV0QnlOYW1lKCJqX3Bhc3N3b3JkIikKICAgICAgICAgICAgIC5zZXRWYWx1ZUF0dHJpYnV0ZSgic2VjcmV0MSIpOwotICAgICAgICAKKwogICAgICAgICBIdG1sUGFnZSBwYWdlID0gZm9ybS5nZXRJbnB1dEJ5VmFsdWUoIlN1Ym1pdCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNsaWNrKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIEhhcyB0byBiZSBhdXRoZW50aWN0ZWQgbm93CiAgICAgICAgIGFzc2VydERlZmF1bHRBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcGFnZS5nZXRXZWJSZXNwb25zZSgpCiAgICAgICAgICAgICAgICAgLmdldENvbnRlbnRBc1N0cmluZygpKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy8gNC4gUmVxdWVzdCBwYWdlIGFnYWluLiBGT1JNIGlzIHN0YXRlZnVsIChodHRwIHNlc3Npb24gYm91bmQpIHNvCiAgICAgICAgIC8vIHN0aWxsIGhhcyB0byBiZSBhdXRoZW50aWNhdGVkLgotICAgICAgICAKKwogICAgICAgICBwYWdlID0gcGFnZUZyb21TZXJ2ZXIoIi9zZXJ2bGV0Iik7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKysrKysrKysrKytTVEVQIDQgKysrKysrKysrKysrKyAoYmVmb3JlIGFzc2VydERlZmF1bHRBdXRoZW50aWNhdGVkKSBcblxuXG5cbiIgKyBwYWdlLmdldFdlYlJlc3BvbnNlKCkKICAgICAgICAgLmdldENvbnRlbnRBc1N0cmluZygpKTsKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0RGVmYXVsdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICBwYWdlLmdldFdlYlJlc3BvbnNlKCkKICAgICAgICAgICAgICAgICAuZ2V0Q29udGVudEFzU3RyaW5nKCkpOwotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICAvLyA1LiBMb2dvdXQKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKiogU1RFUCA1ICoqKioqIChiZWZvcmUgZ2V0IGxvZ291dCkgIiArIHBhZ2UuYXNYbWwoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIHBhZ2UgPSBwYWdlLmdldEZvcm1zKCkKICAgICAgICAgICAgICAgICAgICAuZ2V0KDApCiAgICAgICAgICAgICAgICAgICAgLmdldElucHV0QnlWYWx1ZSgiTG9nb3V0IikKICAgICAgICAgICAgICAgICAgICAuY2xpY2soKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEhhcyB0byBiZSBsb2dnZWQgb3V0IG5vdyAocGFnZSB3aWxsIHN0aWxsIGJlIHJlbmRlcmVkLCBidXQgd2l0aCAKKworICAgICAgICAvLyBIYXMgdG8gYmUgbG9nZ2VkIG91dCBub3cgKHBhZ2Ugd2lsbCBzdGlsbCBiZSByZW5kZXJlZCwgYnV0IHdpdGgKICAgICAgICAgLy8gd2ViIHVzZXJuYW1lIG51bGwgYW5kIG5vIHJvbGVzLgotICAgICAgICAKKwogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHBhZ2UuZ2V0V2ViUmVzcG9uc2UoKQogICAgICAgICAgICAgICAgIC5nZXRDb250ZW50QXNTdHJpbmcoKSk7Ci0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCisKKworCiAgICAgICAgIC8vIDYuIFJlcXVlc3QgcGFnZSBhZ2Fpbi4gU2hvdWxkIHN0aWxsIGJlIGxvZ2dlZCBvdXQKICAgICAgICAgLy8gKGFuZCB3aWxsIGRpc3BsYXkgbG9naW4gdG8gY29udGludWUgYWdhaW4gbm93KQotICAgICAgICAKKwogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldCIpKTsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkV3JvbmdOYW1lKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gMS4gSW5pdGlhbGx5IHJlcXVlc3QgcHJvdGVjdGVkIHBhZ2Ugd2hlbiB3ZSdyZSBub3QgYXV0aGVudGljYXRlZAotICAgICAgICAKKwogICAgICAgICBIdG1sUGFnZSBsb2dpblBhZ2UgPSBwYWdlRnJvbVNlcnZlcigiL3NlcnZsZXQiKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy8gMi4gU2VydmVyIHNob3VsZCBmb3J3YXJkIHRvIGxvZ2luIHBhZ2UKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgICJUaGUgbG9naW4gcGFnZSBzaG91bGQgaGF2ZSBiZWVuIGRpc3BsYXllZCwgYnV0IHdhcyBub3QiLAogICAgICAgICAgICAgbG9naW5QYWdlLmdldFdlYlJlc3BvbnNlKCkuZ2V0Q29udGVudEFzU3RyaW5nKCkuY29udGFpbnMoIkxvZ2luIHRvIGNvbnRpbnVlIikKICAgICAgICAgKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy8gMy4gU3VibWl0IHRoZSBmb3JtIG9uIHRoZSBsb2dpbiBwYWdlIHdpdGggdGhlIGNvcnJlY3QgY3JlZGVudGlhbHMKLSAgICAgICAgCisKICAgICAgICAgSHRtbEZvcm0gZm9ybSA9IGxvZ2luUGFnZS5nZXRGb3JtcygpLmdldCgwKTsKLSAgICAgICAgCisKICAgICAgICAgZm9ybS5nZXRJbnB1dEJ5TmFtZSgial91c2VybmFtZSIpCiAgICAgICAgICAgICAuc2V0VmFsdWVBdHRyaWJ1dGUoInJvbW8iKTsKLSAgICAgICAgCisKICAgICAgICAgZm9ybS5nZXRJbnB1dEJ5TmFtZSgial9wYXNzd29yZCIpCiAgICAgICAgICAgICAuc2V0VmFsdWVBdHRyaWJ1dGUoInNlY3JldDEiKTsKLSAgICAgICAgCisKICAgICAgICAgSHRtbFBhZ2UgcGFnZSA9IGZvcm0uZ2V0SW5wdXRCeVZhbHVlKCJTdWJtaXQiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jbGljaygpOwotICAgICAgICAKKwogICAgICAgICBhc3NlcnRUcnVlKAogICAgICAgICAgICAgIlRoZSBlcnJvciBwYWdlIHNob3VsZCBoYXZlIGJlZW4gZGlzcGxheWVkLCBidXQgd2FzIG5vdCIsCiAgICAgICAgICAgICBwYWdlLmdldFdlYlJlc3BvbnNlKCkuZ2V0Q29udGVudEFzU3RyaW5nKCkuY29udGFpbnMoIkxvZ2luIGZhaWxlZCEiKQogICAgICAgICApOwotICAgICAgICAKKwogICAgICAgICAvLyBTaG91bGQgbm90IGJlIGF1dGhlbnRpY3RlZCBub3cKICAgICAgICAgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICBwYWdlLmdldFdlYlJlc3BvbnNlKCkKICAgICAgICAgICAgICAgICAuZ2V0Q29udGVudEFzU3RyaW5nKCkpOwotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdE5vdEF1dGhlbnRpY2F0ZWRXcm9uZ1Bhc3N3b3JkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gMS4gSW5pdGlhbGx5IHJlcXVlc3QgcHJvdGVjdGVkIHBhZ2Ugd2hlbiB3ZSdyZSBub3QgYXV0aGVudGljYXRlZAotICAgICAgICAKKwogICAgICAgICBIdG1sUGFnZSBsb2dpblBhZ2UgPSBwYWdlRnJvbVNlcnZlcigiL3NlcnZsZXQiKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy8gMi4gU2VydmVyIHNob3VsZCBmb3J3YXJkIHRvIGxvZ2luIHBhZ2UKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgICJUaGUgbG9naW4gcGFnZSBzaG91bGQgaGF2ZSBiZWVuIGRpc3BsYXllZCwgYnV0IHdhcyBub3QiLAogICAgICAgICAgICAgbG9naW5QYWdlLmdldFdlYlJlc3BvbnNlKCkuZ2V0Q29udGVudEFzU3RyaW5nKCkuY29udGFpbnMoIkxvZ2luIHRvIGNvbnRpbnVlIikKICAgICAgICAgKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy8gMy4gU3VibWl0IHRoZSBmb3JtIG9uIHRoZSBsb2dpbiBwYWdlIHdpdGggdGhlICp3cm9uZyogY3JlZGVudGlhbHMKLSAgICAgICAgCisKICAgICAgICAgSHRtbEZvcm0gZm9ybSA9IGxvZ2luUGFnZS5nZXRGb3JtcygpLmdldCgwKTsKLSAgICAgICAgCisKICAgICAgICAgZm9ybS5nZXRJbnB1dEJ5TmFtZSgial91c2VybmFtZSIpCiAgICAgICAgICAgICAuc2V0VmFsdWVBdHRyaWJ1dGUoInJlemEiKTsKLSAgICAgICAgCisKICAgICAgICAgZm9ybS5nZXRJbnB1dEJ5TmFtZSgial9wYXNzd29yZCIpCiAgICAgICAgICAgICAuc2V0VmFsdWVBdHRyaWJ1dGUoIndyb25ncGFzc3dvcmQiKTsKLSAgICAgICAgCisKICAgICAgICAgSHRtbFBhZ2UgcGFnZSA9IGZvcm0uZ2V0SW5wdXRCeVZhbHVlKCJTdWJtaXQiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jbGljaygpOwotICAgICAgICAKKwogICAgICAgICBhc3NlcnRUcnVlKAogICAgICAgICAgICAgIlRoZSBlcnJvciBwYWdlIHNob3VsZCBoYXZlIGJlZW4gZGlzcGxheWVkLCBidXQgd2FzIG5vdCIsCiAgICAgICAgICAgICBwYWdlLmdldFdlYlJlc3BvbnNlKCkuZ2V0Q29udGVudEFzU3RyaW5nKCkuY29udGFpbnMoIkxvZ2luIGZhaWxlZCEiKQogICAgICAgICApOwotICAgICAgICAKKwogICAgICAgICAvLyBTaG91bGQgbm90IGJlIGF1dGhlbnRpY3RlZCBub3cKICAgICAgICAgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICBwYWdlLmdldFdlYlJlc3BvbnNlKCkKICAgICAgICAgICAgICAgICAuZ2V0Q29udGVudEFzU3RyaW5nKCkpOwotICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Tm90QXV0aGVudGljYXRlZEluaXRpYWxseVdyb25nTmFtZVRoZW5Db3JyZWN0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gMS4gSW5pdGlhbGx5IHJlcXVlc3QgcHJvdGVjdGVkIHBhZ2Ugd2hlbiB3ZSdyZSBub3QgYXV0aGVudGljYXRlZAotICAgICAgICAKKwogICAgICAgICBIdG1sUGFnZSBsb2dpblBhZ2UgPSBwYWdlRnJvbVNlcnZlcigiL3NlcnZsZXQiKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy8gMi4gU2VydmVyIHNob3VsZCBmb3J3YXJkIHRvIGxvZ2luIHBhZ2UKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgICJUaGUgbG9naW4gcGFnZSBzaG91bGQgaGF2ZSBiZWVuIGRpc3BsYXllZCwgYnV0IHdhcyBub3QiLAogICAgICAgICAgICAgbG9naW5QYWdlLmdldFdlYlJlc3BvbnNlKCkuZ2V0Q29udGVudEFzU3RyaW5nKCkuY29udGFpbnMoIkxvZ2luIHRvIGNvbnRpbnVlIikKICAgICAgICAgKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy8gMy4gU3VibWl0IHRoZSBmb3JtIG9uIHRoZSBsb2dpbiBwYWdlIHdpdGggdGhlIGNvcnJlY3QgY3JlZGVudGlhbHMKLSAgICAgICAgCisKICAgICAgICAgSHRtbEZvcm0gZm9ybSA9IGxvZ2luUGFnZS5nZXRGb3JtcygpLmdldCgwKTsKLSAgICAgICAgCisKICAgICAgICAgZm9ybS5nZXRJbnB1dEJ5TmFtZSgial91c2VybmFtZSIpCiAgICAgICAgICAgICAuc2V0VmFsdWVBdHRyaWJ1dGUoInJvbW8iKTsKLSAgICAgICAgCisKICAgICAgICAgZm9ybS5nZXRJbnB1dEJ5TmFtZSgial9wYXNzd29yZCIpCiAgICAgICAgICAgICAuc2V0VmFsdWVBdHRyaWJ1dGUoInNlY3JldDEiKTsKLSAgICAgICAgCisKICAgICAgICAgSHRtbFBhZ2UgZXJyb3JQYWdlID0gZm9ybS5nZXRJbnB1dEJ5VmFsdWUoIlN1Ym1pdCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNsaWNrKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIFNob3VsZCBub3QgYmUgYXV0aGVudGljdGVkIG5vdwogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIGVycm9yUGFnZS5nZXRXZWJSZXNwb25zZSgpCiAgICAgICAgICAgICAgICAgICAgICAuZ2V0Q29udGVudEFzU3RyaW5nKCkpOwotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICAvLyA0LiBSZXF1ZXN0IGxvZ2luIHBhZ2UgZGlyZWN0bHksIGFuZCBub3cgc3VibWl0IHdpdGggdGhlIGNvcnJlY3QgY3JlZGVudGlhbHMKICAgICAgICAgLy8gKG5vdGUgdGhhdCB0aGUgaW5pdGlhbCB0YXJnZXQgVVJMIG9mIC9zZXJ2bGV0IHNob3VsZCBzdGlsbCBiZSByZW1lbWJlcmVkKQotICAgICAgICAKKwogICAgICAgICBsb2dpblBhZ2UgPSBwYWdlRnJvbVNlcnZlcigiL2xvZ2luLXNlcnZsZXQiKTsKLSAgICAgICAgCisKICAgICAgICAgZm9ybSA9IGxvZ2luUGFnZS5nZXRGb3JtcygpLmdldCgwKTsKLSAgICAgICAgCisKICAgICAgICAgZm9ybS5nZXRJbnB1dEJ5TmFtZSgial91c2VybmFtZSIpCiAgICAgICAgICAgICAuc2V0VmFsdWVBdHRyaWJ1dGUoInJlemEiKTsKLSAgICAgICAgCisKICAgICAgICAgZm9ybS5nZXRJbnB1dEJ5TmFtZSgial9wYXNzd29yZCIpCiAgICAgICAgICAgICAuc2V0VmFsdWVBdHRyaWJ1dGUoInNlY3JldDEiKTsKLSAgICAgICAgCisKICAgICAgICAgSHRtbFBhZ2UgcGFnZSA9IGZvcm0uZ2V0SW5wdXRCeVZhbHVlKCJTdWJtaXQiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jbGljaygpOwotICAgICAgICAKKwogICAgICAgICAvLyBIYXMgdG8gYmUgYXV0aGVudGljdGVkIG5vdwogICAgICAgICBhc3NlcnREZWZhdWx0QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHBhZ2UuZ2V0V2ViUmVzcG9uc2UoKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbXVsdGlwbGUtc3RvcmUtYmFja3VwL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS1iYWNrdXAvcG9tLnhtbAppbmRleCBkNTJjMzdmLi4xZWMwNDMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS1iYWNrdXAvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS1iYWNrdXAvcG9tLnhtbApAQCAtMTcsMjUgKzE3LDI1IEBACiAtLT4KIAogPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KLQk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guc290ZXJpYS50ZXN0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPnNvdGVyaWE8L2FydGlmYWN0SWQ+CiAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCi0JPGFydGlmYWN0SWQ+YXBwLW11bHRpcGxlLXN0b3JlLWJhY2t1cDwvYXJ0aWZhY3RJZD4KLQk8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgotCQotCTxidWlsZD4KKyAgICA8YXJ0aWZhY3RJZD5hcHAtbXVsdGlwbGUtc3RvcmUtYmFja3VwPC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+CisKKyAgICA8YnVpbGQ+CiAgICAgICAgIDxmaW5hbE5hbWU+YXBwLW11bHRpcGxlLXN0b3JlLWJhY2t1cDwvZmluYWxOYW1lPgotCTwvYnVpbGQ+Ci0gICAgCisgICAgPC9idWlsZD4KKwogICAgIDxwcm9wZXJ0aWVzPgogICAgICAgICA8ZmFpbE9uTWlzc2luZ1dlYlhtbD5mYWxzZTwvZmFpbE9uTWlzc2luZ1dlYlhtbD4KICAgICA8L3Byb3BlcnRpZXM+Ci0gICAgCisKICAgICA8ZGVwZW5kZW5jaWVzPgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guc290ZXJpYS50ZXN0PC9ncm91cElkPgpAQCAtNDQsNSArNDQsNSBAQAogICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPC9kZXBlbmRlbmNpZXM+Ci0gICAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlLWJhY2t1cC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbXVsdGlwbGUtc3RvcmUtYmFja3VwL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKaW5kZXggMmRjNjFkZi4uY2U2ZjMyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbXVsdGlwbGUtc3RvcmUtYmFja3VwL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbXVsdGlwbGUtc3RvcmUtYmFja3VwL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKQEAgLTM0LDcgKzM0LDcgQEAKIAogQFJlcXVlc3RTY29wZWQKIHB1YmxpYyBjbGFzcyBUZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20gaW1wbGVtZW50cyBIdHRwQXV0aGVudGljYXRpb25NZWNoYW5pc20gewotICAgIAorCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgSWRlbnRpdHlTdG9yZUhhbmRsZXIgaWRlbnRpdHlTdG9yZUhhbmRsZXI7CiAKQEAgLTU3LDE3ICs1NywxNyBAQAogCiAgICAgICAgICAgICBpZiAocmVzdWx0LmdldFN0YXR1cygpID09IFZBTElEKSB7CiAgICAgICAgICAgICAgICAgLy8gQ29tbXVuaWNhdGUgdGhlIGRldGFpbHMgb2YgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlciB0byB0aGUKLSAgICAgICAgICAgICAgICAvLyBjb250YWluZXIuIEluIG1hbnkgY2FzZXMgdGhlIHVuZGVybHlpbmcgaGFuZGxlciB3aWxsIGp1c3Qgc3RvcmUgdGhlIGRldGFpbHMgCi0gICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBjb250YWluZXIgd2lsbCBhY3R1YWxseSBoYW5kbGUgdGhlIGxvZ2luIGFmdGVyIHdlIHJldHVybiBmcm9tIAorICAgICAgICAgICAgICAgIC8vIGNvbnRhaW5lci4gSW4gbWFueSBjYXNlcyB0aGUgdW5kZXJseWluZyBoYW5kbGVyIHdpbGwganVzdCBzdG9yZSB0aGUgZGV0YWlscworICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgY29udGFpbmVyIHdpbGwgYWN0dWFsbHkgaGFuZGxlIHRoZSBsb2dpbiBhZnRlciB3ZSByZXR1cm4gZnJvbQogICAgICAgICAgICAgICAgIC8vIHRoaXMgbWV0aG9kLgogICAgICAgICAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQubm90aWZ5Q29udGFpbmVyQWJvdXRMb2dpbigKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdldENhbGxlclByaW5jaXBhbCgpLCByZXN1bHQuZ2V0Q2FsbGVyR3JvdXBzKCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0LnJlc3BvbnNlVW5hdXRob3JpemVkKCk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0LmRvTm90aGluZygpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbXVsdGlwbGUtc3RvcmUtYmFja3VwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dsYXNzZmlzaC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbXVsdGlwbGUtc3RvcmUtYmFja3VwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dsYXNzZmlzaC13ZWIueG1sCmluZGV4IDY5MzcyNDQuLjExZDBlZTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlLWJhY2t1cC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS1iYWNrdXAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvZ2xhc3NmaXNoLXdlYi54bWwKQEAgLTI0LDEyICsyNCwxMiBAQAogICAgICAgICA8cm9sZS1uYW1lPmZvbzwvcm9sZS1uYW1lPgogICAgICAgICA8Z3JvdXAtbmFtZT5mb288L2dyb3VwLW5hbWU+CiAgICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgICAgICA8cm9sZS1uYW1lPmJhcjwvcm9sZS1uYW1lPgogICAgICAgICA8Z3JvdXAtbmFtZT5iYXI8L2dyb3VwLW5hbWU+CiAgICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgICAgICA8cm9sZS1uYW1lPmthejwvcm9sZS1uYW1lPgogICAgICAgICA8Z3JvdXAtbmFtZT5rYXo8L2dyb3VwLW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS1iYWNrdXAvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBNdWx0aXBsZVN0b3JlQmFja3VwSVQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlLWJhY2t1cC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcE11bHRpcGxlU3RvcmVCYWNrdXBJVC5qYXZhCmluZGV4IGQ5YzQ4ZDcuLjQ2YjBlY2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlLWJhY2t1cC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcE11bHRpcGxlU3RvcmVCYWNrdXBJVC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlLWJhY2t1cC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcE11bHRpcGxlU3RvcmVCYWNrdXBJVC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50U3VtbWFyeSgpewogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KLSAgICAKKwogICAgIEBEZXBsb3ltZW50KHRlc3RhYmxlID0gZmFsc2UpCiAgICAgcHVibGljIHN0YXRpYyBBcmNoaXZlPD8+IGNyZWF0ZURlcGxveW1lbnQoKSB7CiAgICAgICAgIHJldHVybiBtYXZlbldhcigpOwpAQCAtNTIsMzggKzUyLDM4IEBACiAgICAgICAgIGFzc2VydERlZmF1bHRBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0P25hbWU9cmV6YSZwYXNzd29yZD1zZWNyZXQxIikpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEF1dGhlbnRpY2F0ZWRCYWNrdXBQYXNzd29yZCgpIHsKICAgICAgICAgLy8gVGhpcyB3aWxsIGZpcnN0IHRyeSB0aGUgaW5pdGlhbCBzdG9yZSB3aGljaCB3aWxsIGZhaWwsIHRoZW4KLSAgICAgICAgLy8gdHJpZXMgdGhlIHNlY29uZCBzdG9yZSwgd2hpY2ggc2hvdWxkIHN1Y2NlZWRlZC4gVGhlIHVzZXIgCisgICAgICAgIC8vIHRyaWVzIHRoZSBzZWNvbmQgc3RvcmUsIHdoaWNoIHNob3VsZCBzdWNjZWVkZWQuIFRoZSB1c2VyCiAgICAgICAgIC8vIGlzIHByZXNlbnQgaW4gYm90aCBzdG9yZXMgYnV0IHdpdGggZGlmZmVyZW50IHBhc3N3b3Jkcy4KICAgICAgICAgYXNzZXJ0RGVmYXVsdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICByZWFkRnJvbVNlcnZlcigiL3NlcnZsZXQ/bmFtZT1yZXphJnBhc3N3b3JkPXNlY3JldDIiKSk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0QXV0aGVudGljYXRlZEJhY2t1cFVzZXIoKSB7CiAgICAgICAgIC8vIFRoaXMgd2lsbCBmaXJzdCB0cnkgdGhlIGluaXRpYWwgc3RvcmUgd2hpY2ggd2lsbCBmYWlsLCB0aGVuCi0gICAgICAgIC8vIHRyaWVzIHRoZSBzZWNvbmQgc3RvcmUsIHdoaWNoIHNob3VsZCBzdWNjZWVkZWQuIFRoZSB1c2VyIAorICAgICAgICAvLyB0cmllcyB0aGUgc2Vjb25kIHN0b3JlLCB3aGljaCBzaG91bGQgc3VjY2VlZGVkLiBUaGUgdXNlcgogICAgICAgICAvLyBpcyBvbmx5IHByZXNlbnQgaW4gdGhlIHNlY29uZCBzdG9yZS4KICAgICAgICAgQXNzZXJ0LmFzc2VydEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICAid2ViIiwgImFsZXgiLAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0P25hbWU9YWxleCZwYXNzd29yZD12ZXJ5c2VjcmV0IikpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdE5vdEF1dGhlbnRpY2F0ZWQoKSB7CiAgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0IikpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdE5vdEF1dGhlbnRpY2F0ZWRXcm9uZ05hbWUoKSB7CiAgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0P25hbWU9cm9tbyZwYXNzd29yZD1zZWNyZXQxIikpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdE5vdEF1dGhlbnRpY2F0ZWRXcm9uZ1Bhc3N3b3JkKCkgewogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS9wb20ueG1sCmluZGV4IDlkZDVkNzguLmNkMmVhNzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbXVsdGlwbGUtc3RvcmUvcG9tLnhtbApAQCAtMTcsMjEgKzE3LDIxIEBACiAtLT4KIAogPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KLQk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guc290ZXJpYS50ZXN0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPnNvdGVyaWE8L2FydGlmYWN0SWQ+CiAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCi0JPGFydGlmYWN0SWQ+YXBwLW11bHRpcGxlLXN0b3JlPC9hcnRpZmFjdElkPgotCTxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0JCi0JPGJ1aWxkPgorICAgIDxhcnRpZmFjdElkPmFwcC1tdWx0aXBsZS1zdG9yZTwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgorCisgICAgPGJ1aWxkPgogICAgICAgICA8ZmluYWxOYW1lPmFwcC1tdWx0aXBsZS1zdG9yZTwvZmluYWxOYW1lPgotCTwvYnVpbGQ+Ci0gICAgCisgICAgPC9idWlsZD4KKwogICAgIDxwcm9wZXJ0aWVzPgogICAgICAgICA8ZmFpbE9uTWlzc2luZ1dlYlhtbD5mYWxzZTwvZmFpbE9uTWlzc2luZ1dlYlhtbD4KICAgICA8L3Byb3BlcnRpZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0F1dGhlbnRpY2F0aW9uSWRlbnRpdHlTdG9yZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbXVsdGlwbGUtc3RvcmUvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BdXRoZW50aWNhdGlvbklkZW50aXR5U3RvcmUuamF2YQppbmRleCA0ZjcxMjI2Li5hNDM0YWU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0F1dGhlbnRpY2F0aW9uSWRlbnRpdHlTdG9yZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXV0aGVudGljYXRpb25JZGVudGl0eVN0b3JlLmphdmEKQEAgLTY4LDEwICs2OCwxMCBAQAogCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFNldDxWYWxpZGF0aW9uVHlwZT4gdmFsaWRhdGlvblR5cGVzKCkgewogICAgICAgICByZXR1cm4gbmV3IEhhc2hTZXQ8Pihhc0xpc3QoVkFMSURBVEUpKTsKICAgICB9Ci0gICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbXVsdGlwbGUtc3RvcmUvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKaW5kZXggYmQzMDVhMi4uNGNkMDczNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbXVsdGlwbGUtc3RvcmUvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCkBAIC0zNCw3ICszNCw3IEBACiAKIEBSZXF1ZXN0U2NvcGVkCiBwdWJsaWMgY2xhc3MgVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtIGltcGxlbWVudHMgSHR0cEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtIHsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwcml2YXRlIElkZW50aXR5U3RvcmVIYW5kbGVyIGlkZW50aXR5U3RvcmVIYW5kbGVyOwogCkBAIC01NywxOCArNTcsMTggQEAKIAogICAgICAgICAgICAgaWYgKHJlc3VsdC5nZXRTdGF0dXMoKSA9PSBWQUxJRCkgewogICAgICAgICAgICAgICAgIC8vIENvbW11bmljYXRlIHRoZSBkZXRhaWxzIG9mIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIgdG8gdGhlCi0gICAgICAgICAgICAgICAgLy8gY29udGFpbmVyLiBJbiBtYW55IGNhc2VzIHRoZSB1bmRlcmx5aW5nIGhhbmRsZXIgd2lsbCBqdXN0IHN0b3JlIHRoZSBkZXRhaWxzIAotICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgY29udGFpbmVyIHdpbGwgYWN0dWFsbHkgaGFuZGxlIHRoZSBsb2dpbiBhZnRlciB3ZSByZXR1cm4gZnJvbSAKKyAgICAgICAgICAgICAgICAvLyBjb250YWluZXIuIEluIG1hbnkgY2FzZXMgdGhlIHVuZGVybHlpbmcgaGFuZGxlciB3aWxsIGp1c3Qgc3RvcmUgdGhlIGRldGFpbHMKKyAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIGNvbnRhaW5lciB3aWxsIGFjdHVhbGx5IGhhbmRsZSB0aGUgbG9naW4gYWZ0ZXIgd2UgcmV0dXJuIGZyb20KICAgICAgICAgICAgICAgICAvLyB0aGlzIG1ldGhvZC4KICAgICAgICAgICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0Lm5vdGlmeUNvbnRhaW5lckFib3V0TG9naW4oCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5nZXRDYWxsZXJQcmluY2lwYWwoKSwgcmVzdWx0LmdldENhbGxlckdyb3VwcygpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgcmV0dXJuIGh0dHBNZXNzYWdlQ29udGV4dC5yZXNwb25zZVVuYXV0aG9yaXplZCgpOwotICAgICAgICAgICAgCi0gICAgICAgIH0gCisKKyAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQuZG9Ob3RoaW5nKCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dsYXNzZmlzaC13ZWIueG1sCmluZGV4IDY5MzcyNDQuLjExZDBlZTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dsYXNzZmlzaC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dsYXNzZmlzaC13ZWIueG1sCkBAIC0yNCwxMiArMjQsMTIgQEAKICAgICAgICAgPHJvbGUtbmFtZT5mb288L3JvbGUtbmFtZT4KICAgICAgICAgPGdyb3VwLW5hbWU+Zm9vPC9ncm91cC1uYW1lPgogICAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICAgICAgPHJvbGUtbmFtZT5iYXI8L3JvbGUtbmFtZT4KICAgICAgICAgPGdyb3VwLW5hbWU+YmFyPC9ncm91cC1uYW1lPgogICAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICAgICAgPHJvbGUtbmFtZT5rYXo8L3JvbGUtbmFtZT4KICAgICAgICAgPGdyb3VwLW5hbWU+a2F6PC9ncm91cC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbXVsdGlwbGUtc3RvcmUvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBNdWx0aXBsZVN0b3JlSVQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwTXVsdGlwbGVTdG9yZUlULmphdmEKaW5kZXggMTIwNjMzYy4uN2NiYmE2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbXVsdGlwbGUtc3RvcmUvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBNdWx0aXBsZVN0b3JlSVQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcE11bHRpcGxlU3RvcmVJVC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50U3VtbWFyeSgpewogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KLSAgICAKKwogICAgIEBEZXBsb3ltZW50KHRlc3RhYmxlID0gZmFsc2UpCiAgICAgcHVibGljIHN0YXRpYyBBcmNoaXZlPD8+IGNyZWF0ZURlcGxveW1lbnQoKSB7CiAgICAgICAgIHJldHVybiBtYXZlbldhcigpOwpAQCAtNTIsMTkgKzUyLDE5IEBACiAgICAgICAgIGFzc2VydERlZmF1bHRBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0P25hbWU9cmV6YSZwYXNzd29yZD1zZWNyZXQxIikpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdE5vdEF1dGhlbnRpY2F0ZWQoKSB7CiAgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0IikpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdE5vdEF1dGhlbnRpY2F0ZWRXcm9uZ05hbWUoKSB7CiAgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0P25hbWU9cm9tbyZwYXNzd29yZD1zZWNyZXQxIikpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdE5vdEF1dGhlbnRpY2F0ZWRXcm9uZ1Bhc3N3b3JkKCkgewogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW5vLWFwcGxpY2F0aW9uLWNhbGxlci1wcmluY2lwYWwvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW5vLWFwcGxpY2F0aW9uLWNhbGxlci1wcmluY2lwYWwvcG9tLnhtbAppbmRleCAxZTlkNjY2Li42NGRlZmM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1hcHBsaWNhdGlvbi1jYWxsZXItcHJpbmNpcGFsL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbm8tYXBwbGljYXRpb24tY2FsbGVyLXByaW5jaXBhbC9wb20ueG1sCkBAIC0xNywyMSArMTcsMjEgQEAKIC0tPgogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgotCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5zb3RlcmlhLnRlc3Q8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+c290ZXJpYTwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKLQk8YXJ0aWZhY3RJZD5hcHAtbm8tYXBwbGljYXRpb24tY2FsbGVyLXByaW5jaXBhbDwvYXJ0aWZhY3RJZD4KLQk8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgotCQotCTxidWlsZD4KKyAgICA8YXJ0aWZhY3RJZD5hcHAtbm8tYXBwbGljYXRpb24tY2FsbGVyLXByaW5jaXBhbDwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgorCisgICAgPGJ1aWxkPgogICAgICAgICA8ZmluYWxOYW1lPmFwcC1uby1hcHBsaWNhdGlvbi1jYWxsZXItcHJpbmNpcGFsPC9maW5hbE5hbWU+Ci0JPC9idWlsZD4KLSAgICAKKyAgICA8L2J1aWxkPgorCiAgICAgPHByb3BlcnRpZXM+CiAgICAgICAgIDxmYWlsT25NaXNzaW5nV2ViWG1sPmZhbHNlPC9mYWlsT25NaXNzaW5nV2ViWG1sPgogICAgIDwvcHJvcGVydGllcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW5vLWFwcGxpY2F0aW9uLWNhbGxlci1wcmluY2lwYWwvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW5vLWFwcGxpY2F0aW9uLWNhbGxlci1wcmluY2lwYWwvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YQppbmRleCBmODQ1YzE2Li40MGRiMDFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1hcHBsaWNhdGlvbi1jYWxsZXItcHJpbmNpcGFsL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbm8tYXBwbGljYXRpb24tY2FsbGVyLXByaW5jaXBhbC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCkBAIC0zMiwyMCArMzIsMjAgQEAKIAogQFJlcXVlc3RTY29wZWQKIHB1YmxpYyBjbGFzcyBUZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20gaW1wbGVtZW50cyBIdHRwQXV0aGVudGljYXRpb25NZWNoYW5pc20gewotICAgIAorCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgSWRlbnRpdHlTdG9yZUhhbmRsZXIgaWRlbnRpdHlTdG9yZUhhbmRsZXI7CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgQXV0aGVudGljYXRpb25TdGF0dXMgdmFsaWRhdGVSZXF1ZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBIdHRwTWVzc2FnZUNvbnRleHQgaHR0cE1lc3NhZ2VDb250ZXh0KSB0aHJvd3MgQXV0aGVudGljYXRpb25FeGNlcHRpb24gewogCi0gICAgCS8vIEdldCB0aGUgKGNhbGxlcikgbmFtZSBhbmQgcGFzc3dvcmQgZnJvbSB0aGUgcmVxdWVzdAorICAgICAgICAvLyBHZXQgdGhlIChjYWxsZXIpIG5hbWUgYW5kIHBhc3N3b3JkIGZyb20gdGhlIHJlcXVlc3QKICAgICAgICAgLy8gTk9URTogVGhpcyBpcyBmb3IgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGV4YW1wbGUgb25seS4gSW4gcHJhY3RpY2UKICAgICAgICAgLy8gcHV0dGluZyB0aGUgcGFzc3dvcmQgaW4gYSByZXF1ZXN0IHF1ZXJ5IHBhcmFtZXRlciBpcyBoaWdobHkKICAgICAgICAgLy8gaW5zZWN1cmUKICAgICAgICAgU3RyaW5nIG5hbWUgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigibmFtZSIpOwogICAgICAgICBTdHJpbmcgcGFzc3dvcmQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigicGFzc3dvcmQiKTsKLSAgICAJCisKICAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCAmJiBwYXNzd29yZCAhPSBudWxsKSB7CiAKICAgICAgICAgICAgIC8vIERlbGVnYXRlIHRoZSB7Y3JlZGVudGlhbHMgaW4gLT4gaWRlbnRpdHkgZGF0YSBvdXR9IGZ1bmN0aW9uIHRvCkBAIC01OSw5ICs1OSw5IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQucmVzcG9uc2VVbmF1dGhvcml6ZWQoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAKKyAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQuZG9Ob3RoaW5nKCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1hcHBsaWNhdGlvbi1jYWxsZXItcHJpbmNpcGFsL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVmFsaWRhdGVBdmFpbGFibGVQcmluY2lwYWxTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1hcHBsaWNhdGlvbi1jYWxsZXItcHJpbmNpcGFsL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVmFsaWRhdGVBdmFpbGFibGVQcmluY2lwYWxTZXJ2bGV0LmphdmEKaW5kZXggN2E5ODhiYy4uZDhmNjVlOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbm8tYXBwbGljYXRpb24tY2FsbGVyLXByaW5jaXBhbC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1ZhbGlkYXRlQXZhaWxhYmxlUHJpbmNpcGFsU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW5vLWFwcGxpY2F0aW9uLWNhbGxlci1wcmluY2lwYWwvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9WYWxpZGF0ZUF2YWlsYWJsZVByaW5jaXBhbFNlcnZsZXQuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogcHVibGljIGNsYXNzIFZhbGlkYXRlQXZhaWxhYmxlUHJpbmNpcGFsU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotICAgIAorCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgU2VjdXJpdHlDb250ZXh0IHNlY3VyaXR5Q29udGV4dDsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbm8tYXBwbGljYXRpb24tY2FsbGVyLXByaW5jaXBhbC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbm8tYXBwbGljYXRpb24tY2FsbGVyLXByaW5jaXBhbC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmluZGV4IGEwZDk2ZDAuLjdiNzI3ZGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW5vLWFwcGxpY2F0aW9uLWNhbGxlci1wcmluY2lwYWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1hcHBsaWNhdGlvbi1jYWxsZXItcHJpbmNpcGFsL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTE4LDI2ICsxOCwyNiBAQAogLS0+CiAKIDx3ZWItYXBwCi0JeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItYXBwXzNfMS54c2QiCi0JdmVyc2lvbj0iMy4xIj4KKyAgICB4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSBodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18xLnhzZCIKKyAgICB2ZXJzaW9uPSIzLjEiPgogCi0JPCEtLSBTZWN1cml0eSBjb25zdHJhaW50cyBhbmQgcm9sZXMuIC0tPgorICAgIDwhLS0gU2VjdXJpdHkgY29uc3RyYWludHMgYW5kIHJvbGVzLiAtLT4KIAotCTxzZWN1cml0eS1jb25zdHJhaW50PgotCQk8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+Ci0JCQk8d2ViLXJlc291cmNlLW5hbWU+VXNlciBwYWdlczwvd2ViLXJlc291cmNlLW5hbWU+Ci0JCQk8dXJsLXBhdHRlcm4+L3Byb3RlY3RlZFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgotCQk8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgotCQk8YXV0aC1jb25zdHJhaW50PgotCQkJPHJvbGUtbmFtZT5mb288L3JvbGUtbmFtZT4KLQkJPC9hdXRoLWNvbnN0cmFpbnQ+Ci0JPC9zZWN1cml0eS1jb25zdHJhaW50PgorICAgIDxzZWN1cml0eS1jb25zdHJhaW50PgorICAgICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CisgICAgICAgICAgICA8d2ViLXJlc291cmNlLW5hbWU+VXNlciBwYWdlczwvd2ViLXJlc291cmNlLW5hbWU+CisgICAgICAgICAgICA8dXJsLXBhdHRlcm4+L3Byb3RlY3RlZFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgorICAgICAgICA8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgorICAgICAgICA8YXV0aC1jb25zdHJhaW50PgorICAgICAgICAgICAgPHJvbGUtbmFtZT5mb288L3JvbGUtbmFtZT4KKyAgICAgICAgPC9hdXRoLWNvbnN0cmFpbnQ+CisgICAgPC9zZWN1cml0eS1jb25zdHJhaW50PgogCiAKLQk8c2VjdXJpdHktcm9sZT4KLQkJPHJvbGUtbmFtZT5mb288L3JvbGUtbmFtZT4KLQk8L3NlY3VyaXR5LXJvbGU+CisgICAgPHNlY3VyaXR5LXJvbGU+CisgICAgICAgIDxyb2xlLW5hbWU+Zm9vPC9yb2xlLW5hbWU+CisgICAgPC9zZWN1cml0eS1yb2xlPgogCiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1hcHBsaWNhdGlvbi1jYWxsZXItcHJpbmNpcGFsL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVmFsaWRhdGVBdmFpbGFibGVQcmluY2lwYWxJVC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbm8tYXBwbGljYXRpb24tY2FsbGVyLXByaW5jaXBhbC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1ZhbGlkYXRlQXZhaWxhYmxlUHJpbmNpcGFsSVQuamF2YQppbmRleCBkN2ZmMDgxLi5hZjljZDM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1hcHBsaWNhdGlvbi1jYWxsZXItcHJpbmNpcGFsL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVmFsaWRhdGVBdmFpbGFibGVQcmluY2lwYWxJVC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW5vLWFwcGxpY2F0aW9uLWNhbGxlci1wcmluY2lwYWwvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9WYWxpZGF0ZUF2YWlsYWJsZVByaW5jaXBhbElULmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRTdW1tYXJ5KCl7CiAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KLSAgIAorCiAgICAgQERlcGxveW1lbnQodGVzdGFibGUgPSBmYWxzZSkKICAgICBwdWJsaWMgc3RhdGljIEFyY2hpdmU8Pz4gY3JlYXRlRGVwbG95bWVudCgpIHsKICAgICAgICAgcmV0dXJuIG1hdmVuV2FyKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1yb2xlLW1hcHBpbmcvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW5vLXJvbGUtbWFwcGluZy9wb20ueG1sCmluZGV4IDM3Yjg1YzAuLmIwMWZhN2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW5vLXJvbGUtbWFwcGluZy9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW5vLXJvbGUtbWFwcGluZy9wb20ueG1sCkBAIC0yMCwyNCArMjAsMjQgQEAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KICAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0JCisKICAgICA8cGFyZW50PgogICAgICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLnNvdGVyaWEudGVzdDwvZ3JvdXBJZD4KICAgICAgICAgPGFydGlmYWN0SWQ+c290ZXJpYTwvYXJ0aWZhY3RJZD4KICAgICAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9wYXJlbnQ+Ci0JCisKICAgICA8YXJ0aWZhY3RJZD5hcHAtbm8tcm9sZS1tYXBwaW5nPC9hcnRpZmFjdElkPgogICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0JCisKICAgICA8YnVpbGQ+CiAgICAgICAgIDxmaW5hbE5hbWU+YXBwLW5vLXJvbGUtbWFwcGluZzwvZmluYWxOYW1lPgogICAgIDwvYnVpbGQ+Ci0gICAgICAKKwogICAgIDxwcm9wZXJ0aWVzPgogICAgICAgICA8ZmFpbE9uTWlzc2luZ1dlYlhtbD5mYWxzZTwvZmFpbE9uTWlzc2luZ1dlYlhtbD4KICAgICA8L3Byb3BlcnRpZXM+Ci0gICAgCisKICAgICA8ZGVwZW5kZW5jaWVzPgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guc290ZXJpYS50ZXN0PC9ncm91cElkPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbm8tcm9sZS1tYXBwaW5nL3NyYy9tYWluL2phdmEvdGVzdC9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1yb2xlLW1hcHBpbmcvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXQuamF2YQppbmRleCAyOTZmMzAxLi42N2QzODFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1yb2xlLW1hcHBpbmcvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1yb2xlLW1hcHBpbmcvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXQuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgIHJlYWxtTmFtZT0idGVzdCByZWFsbSIKICkKIAotQEVtYmVkZGVkSWRlbnRpdHlTdG9yZURlZmluaXRpb24oeyAKK0BFbWJlZGRlZElkZW50aXR5U3RvcmVEZWZpbml0aW9uKHsKICAgICBAQ3JlZGVudGlhbHMoY2FsbGVyTmFtZSA9ICJyZXphIiwgcGFzc3dvcmQgPSAic2VjcmV0MSIsIGdyb3VwcyA9IHsgImZvbyIsICJiYXIiIH0pLAogICAgIEBDcmVkZW50aWFscyhjYWxsZXJOYW1lID0gImFsZXgiLCBwYXNzd29yZCA9ICJzZWNyZXQyIiwgZ3JvdXBzID0geyAiZm9vIiwgImtheiIgfSksCiAgICAgQENyZWRlbnRpYWxzKGNhbGxlck5hbWUgPSAiYXJqYW4iLCBwYXNzd29yZCA9ICJzZWNyZXQzIiwgZ3JvdXBzID0geyAiZm9vIiB9KSAsCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1yb2xlLW1hcHBpbmcvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBNZW1CYXNpY0lULmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1yb2xlLW1hcHBpbmcvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBNZW1CYXNpY0lULmphdmEKaW5kZXggYTMzMmMxMS4uYmU2YWJhMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbm8tcm9sZS1tYXBwaW5nL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwTWVtQmFzaWNJVC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW5vLXJvbGUtbWFwcGluZy9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcE1lbUJhc2ljSVQuamF2YQpAQCAtNDcsNzUgKzQ3LDc1IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50U3VtbWFyeSgpewogICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9Ci0gICAgCisKICAgICBARGVwbG95bWVudCh0ZXN0YWJsZSA9IGZhbHNlKQotICAgIHB1YmxpYyBzdGF0aWMgQXJjaGl2ZTw/PiBjcmVhdGVEZXBsb3ltZW50KCkgeyAgICAgICAgCisgICAgcHVibGljIHN0YXRpYyBBcmNoaXZlPD8+IGNyZWF0ZURlcGxveW1lbnQoKSB7CiAgICAgICAgIHJldHVybiBtYXZlbldhcigpOwogICAgIH0KIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEF1dGhlbnRpY2F0ZWQoKSB7Ci0gICAgCQotICAgIAlEZWZhdWx0Q3JlZGVudGlhbHNQcm92aWRlciBjcmVkZW50aWFsc1Byb3ZpZGVyID0gbmV3IERlZmF1bHRDcmVkZW50aWFsc1Byb3ZpZGVyKCk7Ci0gICAgCWNyZWRlbnRpYWxzUHJvdmlkZXIuYWRkQ3JlZGVudGlhbHMoInJlemEiLCAic2VjcmV0MSIpOwotICAgIAkKLSAgICAJZ2V0V2ViQ2xpZW50KCkuc2V0Q3JlZGVudGlhbHNQcm92aWRlcihjcmVkZW50aWFsc1Byb3ZpZGVyKTsKLSAgICAJCisKKyAgICAgICAgRGVmYXVsdENyZWRlbnRpYWxzUHJvdmlkZXIgY3JlZGVudGlhbHNQcm92aWRlciA9IG5ldyBEZWZhdWx0Q3JlZGVudGlhbHNQcm92aWRlcigpOworICAgICAgICBjcmVkZW50aWFsc1Byb3ZpZGVyLmFkZENyZWRlbnRpYWxzKCJyZXphIiwgInNlY3JldDEiKTsKKworICAgICAgICBnZXRXZWJDbGllbnQoKS5zZXRDcmVkZW50aWFsc1Byb3ZpZGVyKGNyZWRlbnRpYWxzUHJvdmlkZXIpOworCiAgICAgICAgIGFzc2VydERlZmF1bHRBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0IikpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdE5vdEF1dGhlbnRpY2F0ZWQoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIFdlYlJlc3BvbnNlIHJlc3BvbnNlID0gcmVzcG9uc2VGcm9tU2VydmVyKCIvc2VydmxldCIpOwotICAgICAgICAKKwogICAgICAgICBhc3NlcnRFcXVhbHMoNDAxLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlKCkpOwotICAgICAgICAKKwogICAgICAgICBhc3NlcnRUcnVlKAotICAgICAgICAgICAgIlJlc3BvbnNlIGRpZCBub3QgY29udGFpbiB0aGUgXCJXV1ctQXV0aGVudGljYXRlXCIgaGVhZGVyLCBidXQgc2hvdWxkIGhhdmUiLCAKKyAgICAgICAgICAgICJSZXNwb25zZSBkaWQgbm90IGNvbnRhaW4gdGhlIFwiV1dXLUF1dGhlbnRpY2F0ZVwiIGhlYWRlciwgYnV0IHNob3VsZCBoYXZlIiwKICAgICAgICAgICAgIHJlc3BvbnNlLmdldFJlc3BvbnNlSGVhZGVyVmFsdWUoIldXVy1BdXRoZW50aWNhdGUiKSAhPSBudWxsKTsKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICByZXNwb25zZS5nZXRDb250ZW50QXNTdHJpbmcoKSk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Tm90QXV0aGVudGljYXRlZFdyb25nTmFtZSgpIHsKLSAgICAJCi0gICAgCURlZmF1bHRDcmVkZW50aWFsc1Byb3ZpZGVyIGNyZWRlbnRpYWxzUHJvdmlkZXIgPSBuZXcgRGVmYXVsdENyZWRlbnRpYWxzUHJvdmlkZXIoKTsKLSAgICAJY3JlZGVudGlhbHNQcm92aWRlci5hZGRDcmVkZW50aWFscygicm9tbyIsICJzZWNyZXQxIik7Ci0gICAgCQotICAgIAlnZXRXZWJDbGllbnQoKS5zZXRDcmVkZW50aWFsc1Byb3ZpZGVyKGNyZWRlbnRpYWxzUHJvdmlkZXIpOwotICAgIAkKLSAgICAJV2ViUmVzcG9uc2UgcmVzcG9uc2UgPSByZXNwb25zZUZyb21TZXJ2ZXIoIi9zZXJ2bGV0Iik7Ci0gICAgICAgICAgCi0gICAgCWFzc2VydEVxdWFscyg0MDEsIHJlc3BvbnNlLmdldFN0YXR1c0NvZGUoKSk7Ci0gICAgICAgICAgCi0gICAgCWFzc2VydFRydWUoCi0JICAgICAgICAiUmVzcG9uc2UgZGlkIG5vdCBjb250YWluIHRoZSBcIldXVy1BdXRoZW50aWNhdGVcIiBoZWFkZXIsIGJ1dCBzaG91bGQgaGF2ZSIsIAotCSAgICAgICAgcmVzcG9uc2UuZ2V0UmVzcG9uc2VIZWFkZXJWYWx1ZSgiV1dXLUF1dGhlbnRpY2F0ZSIpICE9IG51bGwpOwotICAgICAgICAgIAotICAgIAlhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKLQkgICAgICAgIHJlc3BvbnNlLmdldENvbnRlbnRBc1N0cmluZygpKTsKKworICAgICAgICBEZWZhdWx0Q3JlZGVudGlhbHNQcm92aWRlciBjcmVkZW50aWFsc1Byb3ZpZGVyID0gbmV3IERlZmF1bHRDcmVkZW50aWFsc1Byb3ZpZGVyKCk7CisgICAgICAgIGNyZWRlbnRpYWxzUHJvdmlkZXIuYWRkQ3JlZGVudGlhbHMoInJvbW8iLCAic2VjcmV0MSIpOworCisgICAgICAgIGdldFdlYkNsaWVudCgpLnNldENyZWRlbnRpYWxzUHJvdmlkZXIoY3JlZGVudGlhbHNQcm92aWRlcik7CisKKyAgICAgICAgV2ViUmVzcG9uc2UgcmVzcG9uc2UgPSByZXNwb25zZUZyb21TZXJ2ZXIoIi9zZXJ2bGV0Iik7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDQwMSwgcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZSgpKTsKKworICAgICAgICBhc3NlcnRUcnVlKAorICAgICAgICAgICAgIlJlc3BvbnNlIGRpZCBub3QgY29udGFpbiB0aGUgXCJXV1ctQXV0aGVudGljYXRlXCIgaGVhZGVyLCBidXQgc2hvdWxkIGhhdmUiLAorICAgICAgICAgICAgcmVzcG9uc2UuZ2V0UmVzcG9uc2VIZWFkZXJWYWx1ZSgiV1dXLUF1dGhlbnRpY2F0ZSIpICE9IG51bGwpOworCisgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAorICAgICAgICAgICAgcmVzcG9uc2UuZ2V0Q29udGVudEFzU3RyaW5nKCkpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdE5vdEF1dGhlbnRpY2F0ZWRXcm9uZ1Bhc3N3b3JkKCkgewotICAgIAkKLSAgICAgIAlEZWZhdWx0Q3JlZGVudGlhbHNQcm92aWRlciBjcmVkZW50aWFsc1Byb3ZpZGVyID0gbmV3IERlZmF1bHRDcmVkZW50aWFsc1Byb3ZpZGVyKCk7Ci0gICAgCWNyZWRlbnRpYWxzUHJvdmlkZXIuYWRkQ3JlZGVudGlhbHMoInJlemEiLCAid3JvbmdwYXNzd29yZCIpOwotICAgIAkKLSAgICAJZ2V0V2ViQ2xpZW50KCkuc2V0Q3JlZGVudGlhbHNQcm92aWRlcihjcmVkZW50aWFsc1Byb3ZpZGVyKTsKLSAgICAJCisKKyAgICAgICAgICBEZWZhdWx0Q3JlZGVudGlhbHNQcm92aWRlciBjcmVkZW50aWFsc1Byb3ZpZGVyID0gbmV3IERlZmF1bHRDcmVkZW50aWFsc1Byb3ZpZGVyKCk7CisgICAgICAgIGNyZWRlbnRpYWxzUHJvdmlkZXIuYWRkQ3JlZGVudGlhbHMoInJlemEiLCAid3JvbmdwYXNzd29yZCIpOworCisgICAgICAgIGdldFdlYkNsaWVudCgpLnNldENyZWRlbnRpYWxzUHJvdmlkZXIoY3JlZGVudGlhbHNQcm92aWRlcik7CisKICAgICAgICAgV2ViUmVzcG9uc2UgcmVzcG9uc2UgPSByZXNwb25zZUZyb21TZXJ2ZXIoIi9zZXJ2bGV0Iik7Ci0gICAgICAgIAorCiAgICAgICAgIGFzc2VydEVxdWFscyg0MDEsIHJlc3BvbnNlLmdldFN0YXR1c0NvZGUoKSk7Ci0gICAgICAgICAgCisKICAgICAgICAgYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICAgICJSZXNwb25zZSBkaWQgbm90IGNvbnRhaW4gdGhlIFwiV1dXLUF1dGhlbnRpY2F0ZVwiIGhlYWRlciwgYnV0IHNob3VsZCBoYXZlIiwgCisgICAgICAgICAgICAiUmVzcG9uc2UgZGlkIG5vdCBjb250YWluIHRoZSBcIldXVy1BdXRoZW50aWNhdGVcIiBoZWFkZXIsIGJ1dCBzaG91bGQgaGF2ZSIsCiAgICAgICAgICAgICByZXNwb25zZS5nZXRSZXNwb25zZUhlYWRlclZhbHVlKCJXV1ctQXV0aGVudGljYXRlIikgIT0gbnVsbCk7Ci0gICAgICAgICAgCisKICAgICAgICAgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICByZXNwb25zZS5nZXRDb250ZW50QXNTdHJpbmcoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtc2VjdXJpdHljb250ZXh0LWF1dGgtZWpiL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1zZWN1cml0eWNvbnRleHQtYXV0aC1lamIvcG9tLnhtbAppbmRleCAxYmQ3M2VmLi40Y2U2YTFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1zZWN1cml0eWNvbnRleHQtYXV0aC1lamIvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1zZWN1cml0eWNvbnRleHQtYXV0aC1lamIvcG9tLnhtbApAQCAtMTcsMjYgKzE3LDI2IEBACiAtLT4KIAogPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KLQk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgogCiAgICAgPHBhcmVudD4KICAgICAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5zb3RlcmlhLnRlc3Q8L2dyb3VwSWQ+CiAgICAgICAgIDxhcnRpZmFjdElkPnNvdGVyaWE8L2FydGlmYWN0SWQ+CiAgICAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvcGFyZW50PgotCQotCTxhcnRpZmFjdElkPmFwcC1zZWN1cml0eWNvbnRleHQtYXV0aC1lamI8L2FydGlmYWN0SWQ+Ci0JPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KLQkKLQk8YnVpbGQ+CisKKyAgICA8YXJ0aWZhY3RJZD5hcHAtc2VjdXJpdHljb250ZXh0LWF1dGgtZWpiPC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+CisKKyAgICA8YnVpbGQ+CiAgICAgICAgIDxmaW5hbE5hbWU+YXBwLXNlY3VyaXR5Y29udGV4dC1hdXRoLWVqYjwvZmluYWxOYW1lPgotCTwvYnVpbGQ+Ci0gICAgCisgICAgPC9idWlsZD4KKwogICAgIDxwcm9wZXJ0aWVzPgogICAgICAgICA8ZmFpbE9uTWlzc2luZ1dlYlhtbD5mYWxzZTwvZmFpbE9uTWlzc2luZ1dlYlhtbD4KICAgICA8L3Byb3BlcnRpZXM+Ci0gICAgCisKICAgICA8ZGVwZW5kZW5jaWVzPgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guc290ZXJpYS50ZXN0PC9ncm91cElkPgpAQCAtNDUsNSArNDUsNSBAQAogICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPC9kZXBlbmRlbmNpZXM+Ci0gICAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLXNlY3VyaXR5Y29udGV4dC1hdXRoLWVqYi9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcFNlY3VyaXR5Q29udGV4dEF1dGhJVC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtc2VjdXJpdHljb250ZXh0LWF1dGgtZWpiL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwU2VjdXJpdHlDb250ZXh0QXV0aElULmphdmEKaW5kZXggNDZjY2EyYS4uOGMzZGNkMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtc2VjdXJpdHljb250ZXh0LWF1dGgtZWpiL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwU2VjdXJpdHlDb250ZXh0QXV0aElULmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtc2VjdXJpdHljb250ZXh0LWF1dGgtZWpiL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwU2VjdXJpdHlDb250ZXh0QXV0aElULmphdmEKQEAgLTQzLDE5ICs0MywxOSBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludFN1bW1hcnkoKXsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9Ci0gICAgCisKICAgICBARGVwbG95bWVudCh0ZXN0YWJsZSA9IGZhbHNlKQogICAgIHB1YmxpYyBzdGF0aWMgQXJjaGl2ZTw/PiBjcmVhdGVEZXBsb3ltZW50KCkgewogICAgICAgICByZXR1cm4gbWF2ZW5XYXIoKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RBdXRoZW50aWNhdGVkU3RhdHVzKCkgewogICAgICAgICBhc3NlcnRUcnVlKAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0P25hbWU9cmV6YSIpCiAgICAgICAgICAgICAgICAgLmNvbnRhaW5zKCJBdXRoZW50aWNhdGVkIHdpdGggc3RhdHVzOiBTVUNDRVNTIikpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoZSBuYW1lICJyZXpheCIgd2lsbCBjYXVzZSB0aGUgY3VzdG9tIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyCiAgICAgICogdG8gdGhyb3cgYW4gYXV0aCBleGNlcHRpb24sIHdoaWNoIHNob3VsZCB1bHRpbWF0ZWx5IHJlc3VsdCBpbgpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0P25hbWU9cmV6YXgiKQogICAgICAgICAgICAgICAgIC5jb250YWlucygiQXV0aGVudGljYXRlZCB3aXRoIHN0YXR1czogU0VORF9GQUlMVVJFIikpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoZSBuYW1lICJ1bmtub3duIiB3aWxsIGNhdXNlIHRoZSBjdXN0b20gYXV0aGVudGljYXRpb24gcHJvdmlkZXIKICAgICAgKiB0byByZXR1cm4gU0VORF9GQUlMVVJFLCB3aGljaCBzaG91bGQgdWx0aW1hdGVseSByZXN1bHQgaW4KQEAgLTExOSwxNCArMTE5LDE0IEBACiAgICAgICAgICAgICAgICAgIi9wcm90ZWN0ZWRTZXJ2bGV0IiwKICAgICAgICAgICAgICAgICByZWFkRnJvbVNlcnZlcigiL3NlcnZsZXQ/bmFtZT1yZXphIikpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdE5vdEF1dGhlbnRpY2F0ZWQoKSB7CiAgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0IikpOwogICAgIH0KLSAgICAKLSAgCi0gICAgCisKKworCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLXNlY3VyaXR5Y29udGV4dC1hdXRoL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1zZWN1cml0eWNvbnRleHQtYXV0aC9wb20ueG1sCmluZGV4IDExNjUzYzQuLjE2YzFmYmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLXNlY3VyaXR5Y29udGV4dC1hdXRoL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtc2VjdXJpdHljb250ZXh0LWF1dGgvcG9tLnhtbApAQCAtMTcsMjYgKzE3LDI2IEBACiAtLT4KIAogPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KLQk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgogCiAgICAgPHBhcmVudD4KICAgICAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5zb3RlcmlhLnRlc3Q8L2dyb3VwSWQ+CiAgICAgICAgIDxhcnRpZmFjdElkPnNvdGVyaWE8L2FydGlmYWN0SWQ+CiAgICAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvcGFyZW50PgotCQotCTxhcnRpZmFjdElkPmFwcC1zZWN1cml0eWNvbnRleHQtYXV0aDwvYXJ0aWZhY3RJZD4KLQk8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgotCQotCTxidWlsZD4KKworICAgIDxhcnRpZmFjdElkPmFwcC1zZWN1cml0eWNvbnRleHQtYXV0aDwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgorCisgICAgPGJ1aWxkPgogICAgICAgICA8ZmluYWxOYW1lPmFwcC1zZWN1cml0eWNvbnRleHQtYXV0aDwvZmluYWxOYW1lPgotCTwvYnVpbGQ+Ci0gICAgCisgICAgPC9idWlsZD4KKwogICAgIDxwcm9wZXJ0aWVzPgogICAgICAgICA8ZmFpbE9uTWlzc2luZ1dlYlhtbD5mYWxzZTwvZmFpbE9uTWlzc2luZ1dlYlhtbD4KICAgICA8L3Byb3BlcnRpZXM+Ci0gICAgCisKICAgICA8ZGVwZW5kZW5jaWVzPgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guc290ZXJpYS50ZXN0PC9ncm91cElkPgpAQCAtNDUsNSArNDUsNSBAQAogICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPC9kZXBlbmRlbmNpZXM+Ci0gICAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLXNlY3VyaXR5Y29udGV4dC1hdXRoL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwU2VjdXJpdHlDb250ZXh0QXV0aElULmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1zZWN1cml0eWNvbnRleHQtYXV0aC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcFNlY3VyaXR5Q29udGV4dEF1dGhJVC5qYXZhCmluZGV4IDIyYWJlY2EuLmNmZGRmODggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLXNlY3VyaXR5Y29udGV4dC1hdXRoL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwU2VjdXJpdHlDb250ZXh0QXV0aElULmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtc2VjdXJpdHljb250ZXh0LWF1dGgvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBTZWN1cml0eUNvbnRleHRBdXRoSVQuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludFN1bW1hcnkoKXsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9Ci0gICAgCisKICAgICBARGVwbG95bWVudCh0ZXN0YWJsZSA9IGZhbHNlKQogICAgIHB1YmxpYyBzdGF0aWMgQXJjaGl2ZTw/PiBjcmVhdGVEZXBsb3ltZW50KCkgewogICAgICAgICByZXR1cm4gbWF2ZW5XYXIoKTsKQEAgLTU1LDE0ICs1NSwxNCBAQAogICAgICAgICBhc3NlcnREZWZhdWx0QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJlemEiKSk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0QXV0aGVudGljYXRlZFN0YXR1cygpIHsKICAgICAgICAgYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJlemEiKQogICAgICAgICAgICAgICAgIC5jb250YWlucygiQXV0aGVudGljYXRlZCB3aXRoIHN0YXR1czogU1VDQ0VTUyIpKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGUgbmFtZSAicmV6YXgiIHdpbGwgY2F1c2UgdGhlIGN1c3RvbSBhdXRoZW50aWNhdGlvbiBwcm92aWRlcgogICAgICAqIHRvIHRocm93IGFuIGF1dGggZXhjZXB0aW9uLCB3aGljaCBzaG91bGQgdWx0aW1hdGVseSByZXN1bHQgaW4KQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJlemF4IikKICAgICAgICAgICAgICAgICAuY29udGFpbnMoIkF1dGhlbnRpY2F0ZWQgd2l0aCBzdGF0dXM6IFNFTkRfRkFJTFVSRSIpKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGUgbmFtZSAidW5rbm93biIgd2lsbCBjYXVzZSB0aGUgY3VzdG9tIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyCiAgICAgICogdG8gcmV0dXJuIFNFTkRfRkFJTFVSRSwgd2hpY2ggc2hvdWxkIHVsdGltYXRlbHkgcmVzdWx0IGluCkBAIC0xMTgsMTQgKzExOCwxNCBAQAogICAgICAgICAgICAgICAgICIvcHJvdGVjdGVkU2VydmxldCIsCiAgICAgICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0P25hbWU9cmV6YSIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkKCkgewogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldCIpKTsKICAgICB9Ci0gICAgCi0gIAotICAgIAorCisKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNGM1ZWNhNS4uZmFiZjFkMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdWItbW9kdWxlIiB2YWx1ZT0iJHttb2R1bGV9LXNvdGVyaWEiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvY29tbW9uL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2NvbW1vbi9wb20ueG1sCmluZGV4IDc1OTE2ZWQuLmE5NjRkMGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvY29tbW9uL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9jb21tb24vcG9tLnhtbApAQCAtMTcsMTcgKzE3LDE3IEBACiAtLT4KIAogPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KLQk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgogCiAgICAgPHBhcmVudD4KICAgICAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5zb3RlcmlhLnRlc3Q8L2dyb3VwSWQ+CiAgICAgICAgIDxhcnRpZmFjdElkPnNvdGVyaWE8L2FydGlmYWN0SWQ+CiAgICAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvcGFyZW50PgotICAgIAorCiAgICAgPGFydGlmYWN0SWQ+Y29tbW9uPC9hcnRpZmFjdElkPgotICAgIAorCiAgICAgPHBhY2thZ2luZz5qYXI8L3BhY2thZ2luZz4KIAogICAgIDxkZXBlbmRlbmNpZXM+CkBAIC0zOCwxMyArMzgsMTMgQEAKICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5qYm9zcy5hcnF1aWxsaWFuLmp1bml0PC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+YXJxdWlsbGlhbi1qdW5pdC1jb250YWluZXI8L2FydGlmYWN0SWQ+ICAgICAgICAgICAgCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hcnF1aWxsaWFuLWp1bml0LWNvbnRhaW5lcjwvYXJ0aWZhY3RJZD4KICAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAKKwogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm5ldC5zb3VyY2Vmb3JnZS5odG1sdW5pdDwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmh0bWx1bml0PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4yOTwvdmVyc2lvbj4gICAgICAgICAgICAKKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMjk8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICA8L2RlcGVuZGVuY2llcz4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXJxdWlsbGlhbkJhc2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXJxdWlsbGlhbkJhc2UuamF2YQppbmRleCA2YzAyYmI2Li5hYzdlMTgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FycXVpbGxpYW5CYXNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9jb21tb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcnF1aWxsaWFuQmFzZS5qYXZhCkBAIC0zNywzMSArMzcsMzEgQEAKIGltcG9ydCBjb20uZ2FyZ295bGVzb2Z0d2FyZS5odG1sdW5pdC5XZWJSZXNwb25zZTsKIAogcHVibGljIGNsYXNzIEFycXVpbGxpYW5CYXNlIHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKEFycXVpbGxpYW5CYXNlLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBwcml2YXRlIFdlYkNsaWVudCB3ZWJDbGllbnQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgcmVzcG9uc2U7CiAKLQlAQXJxdWlsbGlhblJlc291cmNlCisgICAgQEFycXVpbGxpYW5SZXNvdXJjZQogICAgIHByaXZhdGUgVVJMIGJhc2U7Ci0JCisKICAgICBAUnVsZQogICAgIHB1YmxpYyBUZXN0V2F0Y2hlciBydWxlRXhhbXBsZSA9IG5ldyBUZXN0V2F0Y2hlcigpIHsKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHByb3RlY3RlZCB2b2lkIGZhaWxlZChUaHJvd2FibGUgZSwgRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKICAgICAgICAgICAgIHN1cGVyLmZhaWxlZChlLCBkZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGxvZ2dlci5sb2coU0VWRVJFLCAKLSAgICAgICAgICAgICAgICAiXG5cblRlc3QgZmFpbGVkOiAiICsgCisKKyAgICAgICAgICAgIGxvZ2dlci5sb2coU0VWRVJFLAorICAgICAgICAgICAgICAgICJcblxuVGVzdCBmYWlsZWQ6ICIgKwogICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLmdldENsYXNzTmFtZSgpICsgIi4iICsgZGVzY3JpcHRpb24uZ2V0TWV0aG9kTmFtZSgpICsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICJcbk1lc3NhZ2U6ICIgKyBlLmdldE1lc3NhZ2UoKSArCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAiXG5MYXN0IHJlc3BvbnNlOiAiICsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICJcblxuIiAgKyByZXNwb25zZSArICJcblxuIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9CiAgICAgfTsKIApAQCAtNjksNyArNjksNyBAQAogICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgewogICAgICAgICByZXNwb25zZSA9IG51bGw7CiAgICAgICAgIHdlYkNsaWVudCA9IG5ldyBXZWJDbGllbnQoKSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CiAKICAgICAgICAgICAgIEBPdmVycmlkZQpAQCAtODksMjEgKzg5LDIxIEBACiAgICAgICAgIHdlYkNsaWVudC5nZXRDb29raWVNYW5hZ2VyKCkuY2xlYXJDb29raWVzKCk7CiAgICAgICAgIHdlYkNsaWVudC5jbG9zZSgpOwogICAgIH0KLSAgICAKKwogICAgIHByb3RlY3RlZCBTdHJpbmcgcmVhZEZyb21TZXJ2ZXIoU3RyaW5nIHBhdGgpIHsKICAgICAgICAgcmVzcG9uc2UgPSAiIjsKICAgICAgICAgV2ViUmVzcG9uc2UgbG9jYWxSZXNwb25zZSA9IHJlc3BvbnNlRnJvbVNlcnZlcihwYXRoKTsKICAgICAgICAgaWYgKGxvY2FsUmVzcG9uc2UgIT0gbnVsbCkgewogICAgICAgICAgICAgcmVzcG9uc2UgPSBsb2NhbFJlc3BvbnNlLmdldENvbnRlbnRBc1N0cmluZygpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm4gcmVzcG9uc2U7CisKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgIH0KLSAgICAKKwogICAgIHByb3RlY3RlZCBXZWJSZXNwb25zZSByZXNwb25zZUZyb21TZXJ2ZXIoU3RyaW5nIHBhdGgpIHsKLSAgICAgICAgCisKICAgICAgICAgV2ViUmVzcG9uc2Ugd2ViUmVzcG9uc2UgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICBQYWdlIHBhZ2UgPSBwYWdlRnJvbVNlcnZlcihwYXRoKTsKICAgICAgICAgaWYgKHBhZ2UgIT0gbnVsbCkgewogICAgICAgICAgICAgd2ViUmVzcG9uc2UgPSBwYWdlLmdldFdlYlJlc3BvbnNlKCk7CkBAIC0xMTEsMzcgKzExMSwzNyBAQAogICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gd2ViUmVzcG9uc2UuZ2V0Q29udGVudEFzU3RyaW5nKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHdlYlJlc3BvbnNlOwogICAgIH0KLSAgICAKKwogICAgIHByb3RlY3RlZCA8UCBleHRlbmRzIFBhZ2U+IFAgcGFnZUZyb21TZXJ2ZXIoU3RyaW5nIHBhdGgpIHsKLSAgICAJCi0gICAgCWlmIChiYXNlLnRvU3RyaW5nKCkuZW5kc1dpdGgoIi8iKSAmJiBwYXRoLnN0YXJ0c1dpdGgoIi8iKSkgewotICAgIAkJcGF0aCA9IHBhdGguc3Vic3RyaW5nKDEpOwotICAgIAl9Ci0gICAgCQorCisgICAgICAgIGlmIChiYXNlLnRvU3RyaW5nKCkuZW5kc1dpdGgoIi8iKSAmJiBwYXRoLnN0YXJ0c1dpdGgoIi8iKSkgeworICAgICAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDEpOworICAgICAgICB9CisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJlc3BvbnNlID0gIiI7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgUCBwYWdlID0gd2ViQ2xpZW50LmdldFBhZ2UoYmFzZSArIHBhdGgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChwYWdlICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBXZWJSZXNwb25zZSBsb2NhbFJlc3BvbnNlID0gcGFnZS5nZXRXZWJSZXNwb25zZSgpOwogICAgICAgICAgICAgICAgIGlmIChsb2NhbFJlc3BvbnNlICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBsb2NhbFJlc3BvbnNlLmdldENvbnRlbnRBc1N0cmluZygpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICByZXR1cm4gcGFnZTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEZhaWxpbmdIdHRwU3RhdHVzQ29kZUV4Y2VwdGlvbiB8IElPRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgV2ViQ2xpZW50IGdldFdlYkNsaWVudCgpIHsKLSAJCXJldHVybiB3ZWJDbGllbnQ7Ci0gCX0KLSAgICAKKyAgICAgICAgIHJldHVybiB3ZWJDbGllbnQ7CisgICAgIH0KKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9jb21tb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9Bc3NlcnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXNzZXJ0LmphdmEKaW5kZXggMTJlNmViNC4uMGNkYWQ2ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9jb21tb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9Bc3NlcnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0Fzc2VydC5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiBpbXBvcnQgY29tLmdhcmdveWxlc29mdHdhcmUuaHRtbHVuaXQuV2ViUmVzcG9uc2U7CiAKIHB1YmxpYyBmaW5hbCBjbGFzcyBBc3NlcnQgewotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIGFzc2VydERlZmF1bHRBdXRoZW50aWNhdGVkKFN0cmluZyByZXNwb25zZSkgewogICAgICAgICBhc3NlcnRBdXRoZW50aWNhdGVkKCJ3ZWIiLCAicmV6YSIsIHJlc3BvbnNlLCAiZm9vIiwgImJhciIpOwogICAgIH0KQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZSgpKTsKICAgICAgICAgYXNzZXJ0QXV0aGVudGljYXRlZCgid2ViIiwgInJlemEiLCByZXNwb25zZS5nZXRDb250ZW50QXNTdHJpbmcoKSwgImZvbyIsICJiYXIiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoU3RyaW5nIHJlc3BvbnNlKSB7CiAgICAgICAgIGFzc2VydE5vdEF1dGhlbnRpY2F0ZWQoIndlYiIsICJyZXphIiwgcmVzcG9uc2UsICJmb28iLCAiYmFyIik7CiAgICAgfQpAQCAtNzcsMzAgKzc3LDMwIEBACiAgICAgICAgIGFzc2VydEJvdGhDb250YWluZXJBbmRBcHBsaWNhdGlvblByaW5jaXBhbHNBcmVTYW1lKCJyZXphIiwgImZvbyIsIHJlc3BvbnNlCiAgICAgICAgICAgICAgICAgLmdldENvbnRlbnRBc1N0cmluZygpKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0QXV0aGVudGljYXRlZChTdHJpbmcgdXNlclR5cGUsIFN0cmluZyBuYW1lLCBTdHJpbmcgcmVzcG9uc2UsIFN0cmluZy4uLiByb2xlcykgewogICAgICAgICBhc3NlcnRUcnVlKAotICAgICAgICAgICAgIlNob3VsZCBiZSBhdXRoZW50aWNhdGVkIGFzIHVzZXIgIiArIG5hbWUgKyAiIGJ1dCB3YXMgbm90IFxuIFJlc3BvbnNlOiBcbiIgKyAKKyAgICAgICAgICAgICJTaG91bGQgYmUgYXV0aGVudGljYXRlZCBhcyB1c2VyICIgKyBuYW1lICsgIiBidXQgd2FzIG5vdCBcbiBSZXNwb25zZTogXG4iICsKICAgICAgICAgICAgIHJlc3BvbnNlICsgIlxuIHNlYXJjaDogIiArIHVzZXJUeXBlICsgIiB1c2VybmFtZTogIiArIG5hbWUsCiAgICAgICAgICAgICByZXNwb25zZS5jb250YWlucyh1c2VyVHlwZSArICIgdXNlcm5hbWU6ICIgKyBuYW1lKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAoU3RyaW5nIHJvbGUgOiByb2xlcykgewogICAgICAgICAgICAgYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICAgICAgICAiQXV0aGVudGljYXRlZCB1c2VyIHNob3VsZCBoYXZlIHJvbGUgXCIiICsgcm9sZSArICJcIiwgYnV0IGRpZCBub3QgXG4gUmVzcG9uc2U6IFxuIiArIAorICAgICAgICAgICAgICAgICJBdXRoZW50aWNhdGVkIHVzZXIgc2hvdWxkIGhhdmUgcm9sZSBcIiIgKyByb2xlICsgIlwiLCBidXQgZGlkIG5vdCBcbiBSZXNwb25zZTogXG4iICsKICAgICAgICAgICAgICAgICByZXNwb25zZSwKICAgICAgICAgICAgICAgICByZXNwb25zZS5jb250YWlucyh1c2VyVHlwZSArICIgdXNlciBoYXMgcm9sZSBcIiIgKyByb2xlICsgIlwiOiB0cnVlIikpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIGFzc2VydE5vdEF1dGhlbnRpY2F0ZWQoU3RyaW5nIHVzZXJUeXBlLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHJlc3BvbnNlLCBTdHJpbmcuLi4gcm9sZXMpIHsKICAgICAgICAgYXNzZXJ0RmFsc2UoCi0gICAgICAgICAgICAiU2hvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIGFzIHVzZXIgIiArIG5hbWUgKyAiIGJ1dCB3YXMgXG4gUmVzcG9uc2U6IFxuIiArIAorICAgICAgICAgICAgIlNob3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCBhcyB1c2VyICIgKyBuYW1lICsgIiBidXQgd2FzIFxuIFJlc3BvbnNlOiBcbiIgKwogICAgICAgICAgICAgcmVzcG9uc2UgKyAiXG4gc2VhcmNoOiAiICsgdXNlclR5cGUgKyAiIHVzZXJuYW1lOiAiICsgbmFtZSwKICAgICAgICAgICAgIHJlc3BvbnNlLmNvbnRhaW5zKHVzZXJUeXBlICsgIiB1c2VybmFtZTogIiArIG5hbWUpKTsKLSAgICAgICAgCisKICAgICAgICAgZm9yIChTdHJpbmcgcm9sZSA6IHJvbGVzKSB7CiAgICAgICAgICAgICBhc3NlcnRGYWxzZSgKLSAgICAgICAgICAgICAgICAiQXV0aGVudGljYXRlZCB1c2VyIHNob3VsZCBub3QgaGF2ZSByb2xlIFwiIiArIHJvbGUgKyAiXCIsIGJ1dCBkaWQgXG4gUmVzcG9uc2U6IFxuIiArIAorICAgICAgICAgICAgICAgICJBdXRoZW50aWNhdGVkIHVzZXIgc2hvdWxkIG5vdCBoYXZlIHJvbGUgXCIiICsgcm9sZSArICJcIiwgYnV0IGRpZCBcbiBSZXNwb25zZTogXG4iICsKICAgICAgICAgICAgICAgICByZXNwb25zZSwKICAgICAgICAgICAgICAgICByZXNwb25zZS5jb250YWlucyh1c2VyVHlwZSArICIgdXNlciBoYXMgcm9sZSBcIiIgKyByb2xlICsgIlwiOiB0cnVlIikpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Nocmlua1dyYXAuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvU2hyaW5rV3JhcC5qYXZhCmluZGV4IDU5MDI5ZWIuLjAxNzU3ZjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvU2hyaW5rV3JhcC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvU2hyaW5rV3JhcC5qYXZhCkBAIC0yNiwxMSArMjYsMTEgQEAKIAogcHVibGljIGNsYXNzIFNocmlua1dyYXAgewogCi0gICAgcHVibGljIHN0YXRpYyBXZWJBcmNoaXZlIG1hdmVuV2FyKCkgeyAgICAgICAgCi0gICAgICAgIHJldHVybiAKKyAgICBwdWJsaWMgc3RhdGljIFdlYkFyY2hpdmUgbWF2ZW5XYXIoKSB7CisgICAgICAgIHJldHVybgogICAgICAgICAgICAgY3JlYXRlKFppcEltcG9ydGVyLmNsYXNzLCBnZXRQcm9wZXJ0eSgiZmluYWxOYW1lIikgKyAiLndhciIpCiAgICAgICAgICAgICAgICAgLmltcG9ydEZyb20obmV3IEZpbGUoInRhcmdldC8iICsgZ2V0UHJvcGVydHkoImZpbmFsTmFtZSIpICsgIi53YXIiKSkKICAgICAgICAgICAgICAgICAuYXMoV2ViQXJjaGl2ZS5jbGFzcyk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2NvbW1vbi9zcmMvbWFpbi9yZXNvdXJjZXMvc2VydmVyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvY29tbW9uL3NyYy9tYWluL3Jlc291cmNlcy9zZXJ2ZXIueG1sCmluZGV4IDMxY2EyYjguLmRhZDJiY2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvY29tbW9uL3NyYy9tYWluL3Jlc291cmNlcy9zZXJ2ZXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvY29tbW9uL3NyYy9tYWluL3Jlc291cmNlcy9zZXJ2ZXIueG1sCkBAIC0yMyw5ICsyMyw5IEBACiAgICAgICAgIDxmZWF0dXJlPmphdmFlZS03LjA8L2ZlYXR1cmU+CiAgICAgICAgIDxmZWF0dXJlPmxvY2FsQ29ubmVjdG9yLTEuMDwvZmVhdHVyZT4KICAgICA8L2ZlYXR1cmVNYW5hZ2VyPgotICAgIAorCiAgICAgPGh0dHBFbmRwb2ludCBodHRwUG9ydD0iOTA4MCIgaHR0cHNQb3J0PSI5NDQzIiBpZD0iZGVmYXVsdEh0dHBFbmRwb2ludCIvPgotICAgICAgICAgICAgICAgICAgCisKICAgICA8YXBwbGljYXRpb25NYW5hZ2VyIGF1dG9FeHBhbmQ9InRydWUiLz4KIAogPC9zZXJ2ZXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL3BvbS54bWwKaW5kZXggODZmMmZlNy4uNTMyYzdkOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvcG9tLnhtbApAQCAtMjMsOSArMjMsOSBAQAogICAgIDxhcnRpZmFjdElkPnNvdGVyaWE8L2FydGlmYWN0SWQ+CiAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KLSAgICAKKwogICAgIDxuYW1lPlNvdGVyaWEgJHtwcm9qZWN0LnZlcnNpb259IEludGVncmF0aW9uIHRlc3RzIGFuZCBleGFtcGxlczwvbmFtZT4KLSAgICAKKwogICAgIDxwcm9wZXJ0aWVzPgogICAgICAgICA8Z2xhc3NmaXNoLnZlcnNpb24+NS4wPC9nbGFzc2Zpc2gudmVyc2lvbj4KICAgICAgICAgPG1hdmVuLmNvbXBpbGVyLnNvdXJjZT4xLjg8L21hdmVuLmNvbXBpbGVyLnNvdXJjZT4KQEAgLTQ4LDEwICs0OCwxMCBAQAogICAgICAgICA8bW9kdWxlPmFwcC1tdWx0aXBsZS1zdG9yZS1iYWNrdXA8L21vZHVsZT4KICAgICAgICAgPG1vZHVsZT5hcHAtbm8tcm9sZS1tYXBwaW5nPC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+YXBwLWJ1bmRsZWQtaGFtLWJhc2ljLWxvZ2luLWNvbmZpZy1mb3JtPC9tb2R1bGU+Ci0gICAgICAgIDxtb2R1bGU+YXBwLWNhbGxlci1wcmluY2lwYWw8L21vZHVsZT4gCisgICAgICAgIDxtb2R1bGU+YXBwLWNhbGxlci1wcmluY2lwYWw8L21vZHVsZT4KICAgICAgICAgPG1vZHVsZT5hcHAtbm8tYXBwbGljYXRpb24tY2FsbGVyLXByaW5jaXBhbDwvbW9kdWxlPgogICAgIDwvbW9kdWxlcz4KLSAgICAKKwogICAgIDxkZXBlbmRlbmN5TWFuYWdlbWVudD4KICAgICAgICAgPGRlcGVuZGVuY2llcz4KICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgpAQCAtNjgsMjAgKzY4LDIwIEBACiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgPC9kZXBlbmRlbmNpZXM+CiAgICAgPC9kZXBlbmRlbmN5TWFuYWdlbWVudD4KLSAgICAKKwogICAgIDxkZXBlbmRlbmNpZXM+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjQuMTMuMjwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4gICAgICAgICAgICAKLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgIAorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXg8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYXZhZWUtYXBpPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+Ny4wPC92ZXJzaW9uPgogICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgCisgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC5zZWN1cml0eS5lbnRlcnByaXNlPC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+amF2YXguc2VjdXJpdHkuZW50ZXJwcmlzZS1hcGk8L2FydGlmYWN0SWQ+CkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICAgICAgICAgIDxzeXN0ZW1QYXRoPiR7QVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI8L3N5c3RlbVBhdGg+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICA8L2RlcGVuZGVuY2llcz4KLSAgICAKKwogICAgIDxidWlsZD4KICAgICAgICAgPHBsdWdpbnM+CiAgICAgICAgICAgIDxwbHVnaW4+CkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICAgICAgICAgICAgICAgIDxHTEFTU0ZJU0hfSE9NRT4ke2Vudi5TMUFTX0hPTUV9Ly4uPC9HTEFTU0ZJU0hfSE9NRT4KICAgICAgICAgICAgICAgICA8L2Vudmlyb25tZW50VmFyaWFibGVzPgogICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICA8L3BsdWdpbj4gICAgICAgCisgICAgICAgICAgICA8L3BsdWdpbj4KICAgICAgICAgPC9wbHVnaW5zPgogICAgIDwvYnVpbGQ+CiAgICA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOWY3YmZiNS4uOWYwOTY5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdWItbW9kdWxlIiB2YWx1ZT0iJHttb2R1bGV9LXN0YW5kYWxvbmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9idWlsZC54bWwKaW5kZXggZGVlN2NmYS4uMGVmMDlhNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9idWlsZC54bWwKQEAgLTMyLDcgKzMyLDcgQEAKICAgICAmcnVuOwogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiPgotCTxhbnQgZGlyPSJsb2dpbmN0eGRyaXZlciIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ibG9naW5jdHhkcml2ZXIiIHRhcmdldD0iYWxsIi8+CiAgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvbG9naW5jdHhkcml2ZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvbG9naW5jdHhkcml2ZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBlZGIxMzE5Li43MzY1ZjI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2xvZ2luY3R4ZHJpdmVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9sb2dpbmN0eGRyaXZlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eSIvPgogPHByb3BlcnR5IG5hbWU9InN1Yi1tb2R1bGUiIHZhbHVlPSIke21vZHVsZX0tc3RhbmRhbG9uZS1sb2dpbmN0eGRyaXZlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9sb2dpbmN0eGRyaXZlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2xvZ2luY3R4ZHJpdmVyL2J1aWxkLnhtbAppbmRleCBkZDA1OTVlLi44ZDc5Zjc3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2xvZ2luY3R4ZHJpdmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2xvZ2luY3R4ZHJpdmVyL2J1aWxkLnhtbApAQCAtMzUsMTIgKzM1LDEyIEBACiAgICAmY29tbW9uU2VjdXJpdHk7CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBzdGFuZGFsb25lIGxvZ2luIGNvbnRleHQgZHJpdmVyIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBzdGFuZGFsb25lIGxvZ2luIGNvbnRleHQgZHJpdmVyIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCwgc2V0dXAsIGRlcGxveSxydW4sIHVuZGVwbG95LCB1bnNldHVwIj4KICAgICA8L3RhcmdldD4KIApAQCAtMTAxLDcgKzEwMSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1zdGFuZGFsb25lLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyBzdGFuZGFsb25lIGNsaWVudCAuLi4iLz4KLSAgIAorCiAgICAgICA8amF2YSBjbGFzc25hbWU9IkxvZ2luQ29udGV4dERyaXZlclRlc3QiCiAgICAgICAgIGNsYXNzcGF0aD0iJHthZG1pbi5kb21haW4uZGlyfS8uLi9saWIvYXBwc2Vydi1ydC5qYXI6JHtzMWFzdGVzdC5jbGFzc3BhdGh9OiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIgZm9yaz0idHJ1ZSI+CiAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1EamF2YS5zZWN1cml0eS5hdXRoLmxvZ2luLmNvbmZpZz0ke2FkbWluLmRvbWFpbi5kaXJ9Ly4uL2xpYi9hcHBjbGllbnQvYXBwY2xpZW50bG9naW4uY29uZiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9sb2dpbmN0eGRyaXZlci9jbGllbnQvTG9naW5Db250ZXh0RHJpdmVyVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9sb2dpbmN0eGRyaXZlci9jbGllbnQvTG9naW5Db250ZXh0RHJpdmVyVGVzdC5qYXZhCmluZGV4IDczODFiZGYuLjE0ZjdkNDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvbG9naW5jdHhkcml2ZXIvY2xpZW50L0xvZ2luQ29udGV4dERyaXZlclRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2xvZ2luY3R4ZHJpdmVyL2NsaWVudC9Mb2dpbkNvbnRleHREcml2ZXJUZXN0LmphdmEKQEAgLTM0LDIwICszNCwyMCBAQAogICovCiBwdWJsaWMgY2xhc3MgTG9naW5Db250ZXh0RHJpdmVyVGVzdCB7CiAKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkPSJTdGFuZGFsb25lLWNsaWVudC1sb2dpbi1jb250ZXh0LWRyaXZlciI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZD0iU3RhbmRhbG9uZS1jbGllbnQtbG9naW4tY29udGV4dC1kcml2ZXIiOwogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gdGVzdFN0YXR1cz1mYWxzZTsKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9ICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CiAKICAgICBwcml2YXRlIHN0YXRpYyBJbml0aWFsQ29udGV4dCBpYyA9IG51bGw7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBNeVNlc3Npb24xUmVtb3RlIG15MXIgPSBudWxsOwotICAgICAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJTZWN1cml0eTo6RUpCIE1ldGhvZCBwZXJtaXNzaW9ucyB0ZXN0IHVzaW5nICIgKwogICAgICAgICAgICAgICAgICJMb2dpbiBDb250ZXh0IERyaXZlciBTdGFuZGFsb25lIENsaWVudCIpOwotICAgIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiBFSkJNZXRob2QgUGVybWlzc2lvbiBUZXN0IHVzaW5nIExvZ2luIENvbnRleHQgRHJpdmVyIFN0YW5kYWxvbmUgY2xpZW50ICoqKiIpOyAgCisKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKiogRUpCTWV0aG9kIFBlcm1pc3Npb24gVGVzdCB1c2luZyBMb2dpbiBDb250ZXh0IERyaXZlciBTdGFuZGFsb25lIGNsaWVudCAqKioiKTsKIAogCiAgICAgICAgIHRyeXsKQEAgLTU4LDE2ICs1OCwxNiBAQAogCiAgICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBDb250ZXh0CiAgICAgICAgICAgICBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRUpCIGxvb2t1cCBzdGFydC4uLiIpOwotICAgICAgICAgICAgamF2YS5sYW5nLk9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImVqYi9NeVNlc3Npb24xQmVhbiIpOwkJCi0gICAgICAgICAgICAKKyAgICAgICAgICAgIGphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJlamIvTXlTZXNzaW9uMUJlYW4iKTsKKwogICAgICAgICAgICAgTXlTZXNzaW9uMVJlbW90ZUhvbWUgbXkxcmggPSAoTXlTZXNzaW9uMVJlbW90ZUhvbWUpCiAgICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIE15U2Vzc2lvbjFSZW1vdGVIb21lLmNsYXNzKTsKIAotICAgICAgICAgICAgbXkxciA9IG15MXJoLmNyZWF0ZSgpOyAKLSAgICAgICAgICAgIAotCSAgICAgCVN0cmluZyByZXRWYWx1ZSA9IG15MXIuYnVzaW5lc3NNZXRob2QoImJsYWgiKTsKKyAgICAgICAgICAgIG15MXIgPSBteTFyaC5jcmVhdGUoKTsKKworICAgICAgICAgICAgIFN0cmluZyByZXRWYWx1ZSA9IG15MXIuYnVzaW5lc3NNZXRob2QoImJsYWgiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmV0VmFsdWU9IityZXRWYWx1ZSk7CiAKICAgICAgICAgICAgIHRlc3RTdGF0dXMgPSB0cnVlOwpAQCAtNzUsNyArNzUsNyBAQAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgaWYoIHRlc3RTdGF0dXMpIAorICAgICAgICAgICAgaWYoIHRlc3RTdGF0dXMpCiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKQEAgLTgzLDUgKzgzLDUgQEAKICAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvbG9naW5jdHhkcml2ZXIvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvbG9naW5jdHhkcml2ZXIvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBkZmIyMGEyLi44MzUwODdjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2xvZ2luY3R4ZHJpdmVyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9sb2dpbmN0eGRyaXZlci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0zNCwxNiArMzQsMTYgQEAKIAogCiAgICAgICAgIDxzZWN1cml0eS1yb2xlPgotICAgICAgIAkgICAgPHJvbGUtbmFtZT5zdGFmZjwvcm9sZS1uYW1lPgorICAgICAgICAgICAgICAgPHJvbGUtbmFtZT5zdGFmZjwvcm9sZS1uYW1lPgogICAgICAgICA8L3NlY3VyaXR5LXJvbGU+CiAKICAgICAgICAgPG1ldGhvZC1wZXJtaXNzaW9uPgotCSAgICAgPGRlc2NyaXB0aW9uPm1ldGhvZCBhdXRob3JpemVkIHRvIG9ubHkgc3RhZmYgcm9sZTwvZGVzY3JpcHRpb24+CisgICAgICAgICA8ZGVzY3JpcHRpb24+bWV0aG9kIGF1dGhvcml6ZWQgdG8gb25seSBzdGFmZiByb2xlPC9kZXNjcmlwdGlvbj4KICAgICAgICAgICAgICA8cm9sZS1uYW1lPnN0YWZmPC9yb2xlLW5hbWU+CiAgICAgICAgICAgICAgPG1ldGhvZD4KLQkgICAgICAgICA8ZWpiLW5hbWU+TXlTZXNzaW9uMUJlYW48L2VqYi1uYW1lPgotCSAgICAgICAgIDxtZXRob2QtbmFtZT5idXNpbmVzc01ldGhvZDwvbWV0aG9kLW5hbWU+Ci0JICAgICA8L21ldGhvZD4KKyAgICAgICAgICAgICA8ZWpiLW5hbWU+TXlTZXNzaW9uMUJlYW48L2VqYi1uYW1lPgorICAgICAgICAgICAgIDxtZXRob2QtbmFtZT5idXNpbmVzc01ldGhvZDwvbWV0aG9kLW5hbWU+CisgICAgICAgICA8L21ldGhvZD4KICAgICAgICAgPC9tZXRob2QtcGVybWlzc2lvbj4KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2xvZ2luY3R4ZHJpdmVyL2VqYi9NeVNlc3Npb24xQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9sb2dpbmN0eGRyaXZlci9lamIvTXlTZXNzaW9uMUJlYW4uamF2YQppbmRleCA1NTZjYWNkLi44ODljYWVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2xvZ2luY3R4ZHJpdmVyL2VqYi9NeVNlc3Npb24xQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvbG9naW5jdHhkcml2ZXIvZWpiL015U2Vzc2lvbjFCZWFuLmphdmEKQEAgLTIxLDM2ICsyMSwzNiBAQAogICovCiBwdWJsaWMgY2xhc3MgTXlTZXNzaW9uMUJlYW4gaW1wbGVtZW50cyBTZXNzaW9uQmVhbiwgTXlTZXNzaW9uMVJlbW90ZUJ1c2luZXNzIHsKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLlNlc3Npb25CZWFuI3NldFNlc3Npb25Db250ZXh0KGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0KQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IGFDb250ZXh0KSB7CiAgICAgICAgIGNvbnRleHQgPSBhQ29udGV4dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLlNlc3Npb25CZWFuI2VqYkFjdGl2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLlNlc3Npb25CZWFuI2VqYlBhc3NpdmF0ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW4jZWpiUmVtb3ZlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7Ci0gICAgICAgIAorCiAgICAgfQogICAgIC8vIDwvZWRpdG9yLWZvbGQ+Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZWUgc2VjdGlvbiA3LjEwLjMgb2YgdGhlIEVKQiAyLjAgc3BlY2lmaWNhdGlvbgogICAgICAqIFNlZSBzZWN0aW9uIDcuMTEuMyBvZiB0aGUgRUpCIDIuMSBzcGVjaWZpY2F0aW9uCkBAIC02MSw5ICs2MSw5IEBACiAgICAgICAgIC8vIHNwYW5uaW5nIGFsbCBtZXRob2RzIGNhbiBiZSBwZXJmb3JtZWQgaGVyZSBzdWNoIGFzIGhvbWUgaW50ZXJmYWNlcwogICAgICAgICAvLyBhbmQgZGF0YSBzb3VyY2VzLgogICAgIH0KLSAgICAKLSAgICAKLSAgICAKKworCisKICAgICBwdWJsaWMgU3RyaW5nIGJ1c2luZXNzTWV0aG9kKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHJldHVybiAiaGVsbG8gIiArIG5hbWU7CiAgICAgfQpAQCAtNzUsNyArNzUsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgYnVzaW5lc3NNZXRob2QzKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHJldHVybiAiaG93ZHkgIituYW1lOwogICAgIH0KLSAgICAKLSAgICAKLSAgICAKKworCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvbG9naW5jdHhkcml2ZXIvZWpiL015U2Vzc2lvbjFSZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvbG9naW5jdHhkcml2ZXIvZWpiL015U2Vzc2lvbjFSZW1vdGUuamF2YQppbmRleCA3OThkNDA2Li4wZTkxZTViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2xvZ2luY3R4ZHJpdmVyL2VqYi9NeVNlc3Npb24xUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9sb2dpbmN0eGRyaXZlci9lamIvTXlTZXNzaW9uMVJlbW90ZS5qYXZhCkBAIC0yMSw2ICsyMSw2IEBACiAgKiBUaGlzIGlzIHRoZSByZW1vdGUgaW50ZXJmYWNlIGZvciBNeVNlc3Npb24xIGVudGVycHJpc2UgYmVhbi4KICAqLwogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb24xUmVtb3RlIGV4dGVuZHMgRUpCT2JqZWN0LCBNeVNlc3Npb24xUmVtb3RlQnVzaW5lc3MgewotICAgIAotICAgIAorCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvbG9naW5jdHhkcml2ZXIvZWpiL015U2Vzc2lvbjFSZW1vdGVIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2xvZ2luY3R4ZHJpdmVyL2VqYi9NeVNlc3Npb24xUmVtb3RlSG9tZS5qYXZhCmluZGV4IDdlYmM4ZjAuLjdjMzMwM2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvbG9naW5jdHhkcml2ZXIvZWpiL015U2Vzc2lvbjFSZW1vdGVIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9sb2dpbmN0eGRyaXZlci9lamIvTXlTZXNzaW9uMVJlbW90ZUhvbWUuamF2YQpAQCAtMjMsOCArMjMsOCBAQAogICogVGhpcyBpcyB0aGUgaG9tZSBpbnRlcmZhY2UgZm9yIE15U2Vzc2lvbjEgZW50ZXJwcmlzZSBiZWFuLgogICovCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbjFSZW1vdGVIb21lIGV4dGVuZHMgRUpCSG9tZSB7Ci0gICAgCisKICAgICBNeVNlc3Npb24xUmVtb3RlIGNyZWF0ZSgpICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247Ci0gICAgCi0gICAgCisKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdGltZXJTdGFuZGFsb25lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS90aW1lclN0YW5kYWxvbmUvYnVpbGQucHJvcGVydGllcwppbmRleCAwMTBiNzYxLi5iMzJmNDU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS90aW1lclN0YW5kYWxvbmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS90aW1lclN0YW5kYWxvbmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHktdGltZXJTdGFuZGFsb25lIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdGltZXJTdGFuZGFsb25lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3RpbWVyU3RhbmRhbG9uZS9idWlsZC54bWwKaW5kZXggNjVjYWE1OC4uZjk2ZjdlOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdGltZXJTdGFuZGFsb25lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS90aW1lclN0YW5kYWxvbmUvYnVpbGQueG1sCkBAIC02MiwxNiArNjIsMTYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TZnVsKi5jbGFzcywqKi9TbGVzcyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFwcGNsaWVudC1qYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovU2Z1bC5jbGFzcywqKi9TbGVzcy5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImFwcGNsaWVudC5qYXI9JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiIHVwZGF0ZT0ieWVzIj4KLSAgICAgICAgICAgIDx6aXBmaWxlc2V0IHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgICAgICAgPHppcGZpbGVzZXQgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVzPSJNRVRBLUlORi8qKiIvPgogICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3RpbWVyU3RhbmRhbG9uZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS90aW1lclN0YW5kYWxvbmUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGIwYzM3MjcuLjVkN2QwMTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3RpbWVyU3RhbmRhbG9uZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdGltZXJTdGFuZGFsb25lL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzEsOCArMzEsOCBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgic2VjdXJpdHktdGltZXJTdGFuZGFsb25lIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KIApAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdGltZXJTdGFuZGFsb25lL2VqYi9TbGVzc0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdGltZXJTdGFuZGFsb25lL2VqYi9TbGVzc0VKQi5qYXZhCmluZGV4IGU2YjA4MDEuLjg1ODg1YzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3RpbWVyU3RhbmRhbG9uZS9lamIvU2xlc3NFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS90aW1lclN0YW5kYWxvbmUvZWpiL1NsZXNzRUpCLmphdmEKQEAgLTQ5LDExICs0OSwxMSBAQAogICAgICAgICByZXR1cm4gdGltZW91dFdhc0NhbGxlZDsKICAgICB9CiAKLSAgICBAVGltZW91dCAKKyAgICBAVGltZW91dAogICAgIHByaXZhdGUgdm9pZCB0aW1lb3V0KFRpbWVyIHQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjp0aW1lb3V0Iik7CiAgICAgICAgIHNjLmlzQ2FsbGVySW5Sb2xlKCJkdW1teSIpOwogICAgICAgICB0aW1lb3V0V2FzQ2FsbGVkID0gdHJ1ZTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VuY292ZXJlZC1odHRwLW1ldGhvZHMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VuY292ZXJlZC1odHRwLW1ldGhvZHMvYnVpbGQucHJvcGVydGllcwppbmRleCBiZmY5M2IwLi5mNDIzOGFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91bmNvdmVyZWQtaHR0cC1tZXRob2RzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdW5jb3ZlcmVkLWh0dHAtbWV0aG9kcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJVbmNvdmVyZWRIVFRQTWV0aG9kcyIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VuY292ZXJlZC1odHRwLW1ldGhvZHMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdW5jb3ZlcmVkLWh0dHAtbWV0aG9kcy9idWlsZC54bWwKaW5kZXggNDhlZjM1MC4uNjAxZTE1NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdW5jb3ZlcmVkLWh0dHAtbWV0aG9kcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdW5jb3ZlcmVkLWh0dHAtbWV0aG9kcy9idWlsZC54bWwKQEAgLTI1LDE0ICsyNSwxNCBAQAogXT4KIAogPHByb2plY3QgbmFtZT0idW5jb3ZlcmVkLWh0dHAtbWV0aG9kcyIgZGVmYXVsdD0idXNhZ2UiIGJhc2VkaXI9Ii4iPgotICAKKwogICAmY29tbW9uU2V0dXA7CiAgICZjb21tb25CdWlsZDsKICAgJnRlc3Rwcm9wZXJ0aWVzOwogICAmY29tbW9uU2VjdXJpdHk7Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbiwgc2V0dXAsIGJ1aWxkLCBkZXBsb3ksIHJ1biwgdW5kZXBsb3ksIHVuc2V0dXAiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXVzZXItY29tbW9uIj4KICAgICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0idGVzdHVzZXIiLz4KQEAgLTUwLDIwICs1MCwyMCBAQAogICAgICAgICA8YXJnIHZhbHVlPSJqYXZhZWUiLz4KICAgICA8L2phdmE+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9InRlc3R1c2VyIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9IndlYiIvPgpAQCAtODAsMTAgKzgwLDEwIEBACiAgICAgICA8cGFyYW0gbmFtZT0id2FyLmZpbGUiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vZGVueVVuY292ZXJlZFNlcnZsZXRUZXN0LXdlYi53YXIiLz4KICAgICA8L2FudGNhbGw+CiAKLSAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAKLSAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9nbGFzc2Zpc2gtYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPiAKKyAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgorICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgogICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgogICAgICAgPC9maWxlc2V0PgpAQCAtOTEsMTMgKzkxLDEzIEBACiAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9nbGFzc2Zpc2gtYXBwbGljYXRpb24ueG1sIi8+CiAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgPC9qYXI+ICAgCisgICAgPC9qYXI+CiAKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICA8L3RhcmdldD4KQEAgLTEwNSw3ICsxMDUsNyBAQAogICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdW5jb3ZlcmVkLWh0dHAtbWV0aG9kcy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91bmNvdmVyZWQtaHR0cC1tZXRob2RzL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA5MjIzOTA2Li43ODdlNmI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91bmNvdmVyZWQtaHR0cC1tZXRob2RzL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91bmNvdmVyZWQtaHR0cC1tZXRob2RzL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjQsNDE5ICsyNCw0MTkgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0JcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RTdWl0ZSA9ICJTZWN1cml0eTo6VW5jb3ZlcmVkSFRUUE1ldGhvZHMiOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyBjb250ZXh0UGF0aE9wZW4gPSAiL29wZW4iOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyBjb250ZXh0UGF0aERlbnkgPSAiL2RlbnkiOwotCQotCXByaXZhdGUgU3RyaW5nIGhvc3Q7Ci0JcHJpdmF0ZSBTdHJpbmcgcG9ydDsKLQlwcml2YXRlIFN0cmluZyB1c2VybmFtZTsKLQlwcml2YXRlIFN0cmluZyBwYXNzd29yZDsKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdFN1aXRlID0gIlNlY3VyaXR5OjpVbmNvdmVyZWRIVFRQTWV0aG9kcyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNvbnRleHRQYXRoT3BlbiA9ICIvb3BlbiI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNvbnRleHRQYXRoRGVueSA9ICIvZGVueSI7CiAKLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JCXN0YXQuYWRkRGVzY3JpcHRpb24odGVzdFN1aXRlKTsKLQkJQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7Ci0JCWNsaWVudC5kb1Rlc3RzKCk7Ci0JCXN0YXQucHJpbnRTdW1tYXJ5KCk7Ci0JfQorICAgIHByaXZhdGUgU3RyaW5nIGhvc3Q7CisgICAgcHJpdmF0ZSBTdHJpbmcgcG9ydDsKKyAgICBwcml2YXRlIFN0cmluZyB1c2VybmFtZTsKKyAgICBwcml2YXRlIFN0cmluZyBwYXNzd29yZDsKIAotCXB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewotCQlob3N0ID0gYXJnc1swXTsKLQkJcG9ydCA9IGFyZ3NbMV07Ci0JCXVzZXJuYW1lID0gYXJnc1syXTsKLQkJcGFzc3dvcmQgPSBhcmdzWzNdOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgIEhvc3Q6ICIgKyBob3N0KTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgICAgICBQb3J0OiAiICsgcG9ydCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiICBVc2VybmFtZTogIiArIHVzZXJuYW1lKTsKLQl9CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RTdWl0ZSk7CisgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOworICAgICAgICBjbGllbnQuZG9UZXN0cygpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOworICAgIH0KIAotCXB1YmxpYyB2b2lkIGRvVGVzdHMoKSB7Ci0JCXRlc3RFeGFtcGxlMSgpOwotCQl0ZXN0RXhhbXBsZTFQdXQoKTsKLQkJdGVzdEV4YW1wbGUyKCk7Ci0JCXRlc3RFeGFtcGxlMkRlbGV0ZSgpOwotCQl0ZXN0RXhhbXBsZTNhKCk7Ci0JCXRlc3RFeGFtcGxlM2FQdXQoKTsKLQkJdGVzdEV4YW1wbGUzYlBvc3QoKTsKLQkJdGVzdEV4YW1wbGUzYkRlbGV0ZSgpOwotCQl0ZXN0Q292ZXJlZDFQb3N0KCk7Ci0JCXRlc3RDb3ZlcmVkMVB1dCgpOwotCQl0ZXN0Q292ZXJlZDIoKTsKLQkJdGVzdENvdmVyZWQyUHV0KCk7Ci0JCXRlc3RDb3ZlcmVkM2FQb3N0KCk7Ci0JCXRlc3RDb3ZlcmVkM2FEZWxldGUoKTsKLQkJdGVzdENvdmVyZWQzYigpOwotCQl0ZXN0Q292ZXJlZDNiUHV0KCk7Ci0JfQorICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgeworICAgICAgICBob3N0ID0gYXJnc1swXTsKKyAgICAgICAgcG9ydCA9IGFyZ3NbMV07CisgICAgICAgIHVzZXJuYW1lID0gYXJnc1syXTsKKyAgICAgICAgcGFzc3dvcmQgPSBhcmdzWzNdOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgIEhvc3Q6ICIgKyBob3N0KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgICBQb3J0OiAiICsgcG9ydCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICBVc2VybmFtZTogIiArIHVzZXJuYW1lKTsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCB0ZXN0RXhhbXBsZTEoKSB7Ci0JCVN0cmluZyBzZXJ2bGV0ID0gIi9FeGFtcGxlMSI7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbk9wZW4gPSBjb250ZXh0UGF0aE9wZW4rc2VydmxldDsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uRGVueSA9IGNvbnRleHRQYXRoRGVueStzZXJ2bGV0OworICAgIHB1YmxpYyB2b2lkIGRvVGVzdHMoKSB7CisgICAgICAgIHRlc3RFeGFtcGxlMSgpOworICAgICAgICB0ZXN0RXhhbXBsZTFQdXQoKTsKKyAgICAgICAgdGVzdEV4YW1wbGUyKCk7CisgICAgICAgIHRlc3RFeGFtcGxlMkRlbGV0ZSgpOworICAgICAgICB0ZXN0RXhhbXBsZTNhKCk7CisgICAgICAgIHRlc3RFeGFtcGxlM2FQdXQoKTsKKyAgICAgICAgdGVzdEV4YW1wbGUzYlBvc3QoKTsKKyAgICAgICAgdGVzdEV4YW1wbGUzYkRlbGV0ZSgpOworICAgICAgICB0ZXN0Q292ZXJlZDFQb3N0KCk7CisgICAgICAgIHRlc3RDb3ZlcmVkMVB1dCgpOworICAgICAgICB0ZXN0Q292ZXJlZDIoKTsKKyAgICAgICAgdGVzdENvdmVyZWQyUHV0KCk7CisgICAgICAgIHRlc3RDb3ZlcmVkM2FQb3N0KCk7CisgICAgICAgIHRlc3RDb3ZlcmVkM2FEZWxldGUoKTsKKyAgICAgICAgdGVzdENvdmVyZWQzYigpOworICAgICAgICB0ZXN0Q292ZXJlZDNiUHV0KCk7CisgICAgfQogCi0JCVN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbnVsbCwgMzAyLCB1c2VybmFtZSwgY29udGV4dFBhdGhPcGVuLCBvdXRwdXQpOwotCQlpbnQgaW5kZXggPSBvdXRwdXQuaW5kZXhPZigiaHR0cHM6Ly8iKTsKLQkJaWYgKHN1Y2Nlc3MgJiYgKGluZGV4ICE9IC0xKSkgewotCQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LlBBU1MpOwotCQl9Ci0JCWVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LkZBSUwpOworICAgIHB1YmxpYyB2b2lkIHRlc3RFeGFtcGxlMSgpIHsKKyAgICAgICAgU3RyaW5nIHNlcnZsZXQgPSAiL0V4YW1wbGUxIjsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uT3BlbiA9IGNvbnRleHRQYXRoT3BlbitzZXJ2bGV0OworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25EZW55ID0gY29udGV4dFBhdGhEZW55K3NlcnZsZXQ7CiAKLQkJb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBudWxsLCAzMDIsIHVzZXJuYW1lLCBjb250ZXh0UGF0aERlbnksIG91dHB1dCk7Ci0JCWlmIChzdWNjZXNzKSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuUEFTUyk7Ci0JCWVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LkZBSUwpOwotCX0KKyAgICAgICAgU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBudWxsLCAzMDIsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7CisgICAgICAgIGludCBpbmRleCA9IG91dHB1dC5pbmRleE9mKCJodHRwczovLyIpOworICAgICAgICBpZiAoc3VjY2VzcyAmJiAoaW5kZXggIT0gLTEpKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CiAKLQlwdWJsaWMgdm9pZCB0ZXN0RXhhbXBsZTFQdXQoKSB7Ci0JCVN0cmluZyBzZXJ2bGV0ID0gIi9FeGFtcGxlMSI7Ci0JCVN0cmluZyBtZXRob2QgPSAiUFVUIjsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uT3BlbiA9IGNvbnRleHRQYXRoT3BlbitzZXJ2bGV0KyItIittZXRob2Q7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbkRlbnkgPSBjb250ZXh0UGF0aERlbnkrc2VydmxldCsiLSIrbWV0aG9kOworICAgICAgICBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG51bGwsIDMwMiwgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7CisgICAgfQogCi0JCVN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCAyMDAsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7Ci0JCWlmIChzdWNjZXNzKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7Ci0JCX0KLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CisgICAgcHVibGljIHZvaWQgdGVzdEV4YW1wbGUxUHV0KCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvRXhhbXBsZTEiOworICAgICAgICBTdHJpbmcgbWV0aG9kID0gIlBVVCI7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbk9wZW4gPSBjb250ZXh0UGF0aE9wZW4rc2VydmxldCsiLSIrbWV0aG9kOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25EZW55ID0gY29udGV4dFBhdGhEZW55K3NlcnZsZXQrIi0iK21ldGhvZDsKIAotCQlvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgNDAzLCB1c2VybmFtZSwgY29udGV4dFBhdGhEZW55LCBvdXRwdXQpOwotCQlpZiAoc3VjY2Vzcykgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LlBBU1MpOwotCQllbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5GQUlMKTsKLQl9CisgICAgICAgIFN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCAyMDAsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7CisgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CiAKLQlwdWJsaWMgdm9pZCB0ZXN0RXhhbXBsZTIoKSB7Ci0JCVN0cmluZyBzZXJ2bGV0ID0gIi9FeGFtcGxlMiI7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbk9wZW4gPSBjb250ZXh0UGF0aE9wZW4rc2VydmxldDsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uRGVueSA9IGNvbnRleHRQYXRoRGVueStzZXJ2bGV0OworICAgICAgICBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgNDAzLCB1c2VybmFtZSwgY29udGV4dFBhdGhEZW55LCBvdXRwdXQpOworICAgICAgICBpZiAoc3VjY2Vzcykgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LlBBU1MpOworICAgICAgICBlbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQkJU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBudWxsLCAyMDAsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7Ci0JCWlmIChzdWNjZXNzKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7Ci0JCX0KLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CisgICAgcHVibGljIHZvaWQgdGVzdEV4YW1wbGUyKCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvRXhhbXBsZTIiOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25PcGVuID0gY29udGV4dFBhdGhPcGVuK3NlcnZsZXQ7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbkRlbnkgPSBjb250ZXh0UGF0aERlbnkrc2VydmxldDsKIAotCQlvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG51bGwsIDQwMywgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKLQkJaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG51bGwsIDIwMCwgdXNlcm5hbWUsIGNvbnRleHRQYXRoT3Blbiwgb3V0cHV0KTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5QQVNTKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5GQUlMKTsKIAotCXB1YmxpYyB2b2lkIHRlc3RFeGFtcGxlMkRlbGV0ZSgpIHsKLQkJU3RyaW5nIHNlcnZsZXQgPSAiL0V4YW1wbGUyIjsKLQkJU3RyaW5nIG1ldGhvZCA9ICJERUxFVEUiOwotCQlTdHJpbmcgZGVzY3JpcHRpb25PcGVuID0gY29udGV4dFBhdGhPcGVuK3NlcnZsZXQrIi0iK21ldGhvZDsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uRGVueSA9IGNvbnRleHRQYXRoRGVueStzZXJ2bGV0KyItIittZXRob2Q7CisgICAgICAgIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbnVsbCwgNDAzLCB1c2VybmFtZSwgY29udGV4dFBhdGhEZW55LCBvdXRwdXQpOworICAgICAgICBpZiAoc3VjY2Vzcykgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LlBBU1MpOworICAgICAgICBlbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQkJU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDQwMywgdXNlcm5hbWUsIGNvbnRleHRQYXRoT3Blbiwgb3V0cHV0KTsKLQkJaWYgKHN1Y2Nlc3MpIHsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5QQVNTKTsKLQkJfQotCQllbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5GQUlMKTsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RXhhbXBsZTJEZWxldGUoKSB7CisgICAgICAgIFN0cmluZyBzZXJ2bGV0ID0gIi9FeGFtcGxlMiI7CisgICAgICAgIFN0cmluZyBtZXRob2QgPSAiREVMRVRFIjsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uT3BlbiA9IGNvbnRleHRQYXRoT3BlbitzZXJ2bGV0KyItIittZXRob2Q7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbkRlbnkgPSBjb250ZXh0UGF0aERlbnkrc2VydmxldCsiLSIrbWV0aG9kOwogCi0JCW91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCA0MDMsIHVzZXJuYW1lLCBjb250ZXh0UGF0aERlbnksIG91dHB1dCk7Ci0JCWlmIChzdWNjZXNzKSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuUEFTUyk7Ci0JCWVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LkZBSUwpOwotCX0KKyAgICAgICAgU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDQwMywgdXNlcm5hbWUsIGNvbnRleHRQYXRoT3Blbiwgb3V0cHV0KTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5QQVNTKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5GQUlMKTsKIAotCXB1YmxpYyB2b2lkIHRlc3RFeGFtcGxlM2EoKSB7Ci0JCVN0cmluZyBzZXJ2bGV0ID0gIi9FeGFtcGxlM2EiOwotCQlTdHJpbmcgZGVzY3JpcHRpb25PcGVuID0gY29udGV4dFBhdGhPcGVuK3NlcnZsZXQ7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbkRlbnkgPSBjb250ZXh0UGF0aERlbnkrc2VydmxldDsKKyAgICAgICAgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDQwMywgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7CisgICAgfQogCi0JCVN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbnVsbCwgMjAwLCB1c2VybmFtZSwgY29udGV4dFBhdGhPcGVuLCBvdXRwdXQpOwotCQlpZiAoc3VjY2VzcykgewotCQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LlBBU1MpOwotCQl9Ci0JCWVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LkZBSUwpOworICAgIHB1YmxpYyB2b2lkIHRlc3RFeGFtcGxlM2EoKSB7CisgICAgICAgIFN0cmluZyBzZXJ2bGV0ID0gIi9FeGFtcGxlM2EiOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25PcGVuID0gY29udGV4dFBhdGhPcGVuK3NlcnZsZXQ7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbkRlbnkgPSBjb250ZXh0UGF0aERlbnkrc2VydmxldDsKIAotCQlvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG51bGwsIDIwMCwgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKLQkJaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG51bGwsIDIwMCwgdXNlcm5hbWUsIGNvbnRleHRQYXRoT3Blbiwgb3V0cHV0KTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5QQVNTKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5GQUlMKTsKIAotCXB1YmxpYyB2b2lkIHRlc3RFeGFtcGxlM2FQdXQoKSB7Ci0JCVN0cmluZyBzZXJ2bGV0ID0gIi9FeGFtcGxlM2EiOwotCQlTdHJpbmcgbWV0aG9kID0gIlBVVCI7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbk9wZW4gPSBjb250ZXh0UGF0aE9wZW4rc2VydmxldCsiLSIrbWV0aG9kOwotCQlTdHJpbmcgZGVzY3JpcHRpb25EZW55ID0gY29udGV4dFBhdGhEZW55K3NlcnZsZXQrIi0iK21ldGhvZDsKKyAgICAgICAgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBudWxsLCAyMDAsIHVzZXJuYW1lLCBjb250ZXh0UGF0aERlbnksIG91dHB1dCk7CisgICAgICAgIGlmIChzdWNjZXNzKSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuUEFTUyk7CisgICAgICAgIGVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LkZBSUwpOworICAgIH0KIAotCQlTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgMjAwLCB1c2VybmFtZSwgY29udGV4dFBhdGhPcGVuLCBvdXRwdXQpOwotCQlpZiAoc3VjY2VzcykgewotCQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LlBBU1MpOwotCQl9Ci0JCWVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LkZBSUwpOworICAgIHB1YmxpYyB2b2lkIHRlc3RFeGFtcGxlM2FQdXQoKSB7CisgICAgICAgIFN0cmluZyBzZXJ2bGV0ID0gIi9FeGFtcGxlM2EiOworICAgICAgICBTdHJpbmcgbWV0aG9kID0gIlBVVCI7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbk9wZW4gPSBjb250ZXh0UGF0aE9wZW4rc2VydmxldCsiLSIrbWV0aG9kOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25EZW55ID0gY29udGV4dFBhdGhEZW55K3NlcnZsZXQrIi0iK21ldGhvZDsKIAotCQlvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgNDAzLCB1c2VybmFtZSwgY29udGV4dFBhdGhEZW55LCBvdXRwdXQpOwotCQlpZiAoc3VjY2Vzcykgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LlBBU1MpOwotCQllbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5GQUlMKTsKLQl9CisgICAgICAgIFN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCAyMDAsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7CisgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CiAKLQlwdWJsaWMgdm9pZCB0ZXN0RXhhbXBsZTNiUG9zdCgpIHsKLQkJU3RyaW5nIHNlcnZsZXQgPSAiL0V4YW1wbGUzYiI7Ci0JCVN0cmluZyBtZXRob2QgPSAiUE9TVCI7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbk9wZW4gPSBjb250ZXh0UGF0aE9wZW4rc2VydmxldCsiLSIrbWV0aG9kOwotCQlTdHJpbmcgZGVzY3JpcHRpb25EZW55ID0gY29udGV4dFBhdGhEZW55K3NlcnZsZXQrIi0iK21ldGhvZDsKKyAgICAgICAgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDQwMywgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7CisgICAgfQogCi0JCVN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCAyMDAsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7Ci0JCWlmIChzdWNjZXNzKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7Ci0JCX0KLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CisgICAgcHVibGljIHZvaWQgdGVzdEV4YW1wbGUzYlBvc3QoKSB7CisgICAgICAgIFN0cmluZyBzZXJ2bGV0ID0gIi9FeGFtcGxlM2IiOworICAgICAgICBTdHJpbmcgbWV0aG9kID0gIlBPU1QiOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25PcGVuID0gY29udGV4dFBhdGhPcGVuK3NlcnZsZXQrIi0iK21ldGhvZDsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uRGVueSA9IGNvbnRleHRQYXRoRGVueStzZXJ2bGV0KyItIittZXRob2Q7CiAKLQkJb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDIwMCwgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKLQkJaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgMjAwLCB1c2VybmFtZSwgY29udGV4dFBhdGhPcGVuLCBvdXRwdXQpOworICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LlBBU1MpOworICAgICAgICB9CisgICAgICAgIGVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LkZBSUwpOwogCi0JcHVibGljIHZvaWQgdGVzdEV4YW1wbGUzYkRlbGV0ZSgpIHsKLQkJU3RyaW5nIHNlcnZsZXQgPSAiL0V4YW1wbGUzYiI7Ci0JCVN0cmluZyBtZXRob2QgPSAiREVMRVRFIjsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uT3BlbiA9IGNvbnRleHRQYXRoT3BlbitzZXJ2bGV0KyItIittZXRob2Q7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbkRlbnkgPSBjb250ZXh0UGF0aERlbnkrc2VydmxldCsiLSIrbWV0aG9kOworICAgICAgICBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgMjAwLCB1c2VybmFtZSwgY29udGV4dFBhdGhEZW55LCBvdXRwdXQpOworICAgICAgICBpZiAoc3VjY2Vzcykgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LlBBU1MpOworICAgICAgICBlbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQkJU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDIwMCwgdXNlcm5hbWUsIGNvbnRleHRQYXRoT3Blbiwgb3V0cHV0KTsKLQkJaWYgKHN1Y2Nlc3MpIHsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5QQVNTKTsKLQkJfQotCQllbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5GQUlMKTsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RXhhbXBsZTNiRGVsZXRlKCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvRXhhbXBsZTNiIjsKKyAgICAgICAgU3RyaW5nIG1ldGhvZCA9ICJERUxFVEUiOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25PcGVuID0gY29udGV4dFBhdGhPcGVuK3NlcnZsZXQrIi0iK21ldGhvZDsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uRGVueSA9IGNvbnRleHRQYXRoRGVueStzZXJ2bGV0KyItIittZXRob2Q7CiAKLQkJb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDQwMywgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKLQkJaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgMjAwLCB1c2VybmFtZSwgY29udGV4dFBhdGhPcGVuLCBvdXRwdXQpOworICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LlBBU1MpOworICAgICAgICB9CisgICAgICAgIGVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LkZBSUwpOwogCi0JcHVibGljIHZvaWQgdGVzdENvdmVyZWQxUG9zdCgpIHsKLQkJU3RyaW5nIHNlcnZsZXQgPSAiL0NvdmVyZWQxIjsKLQkJU3RyaW5nIG1ldGhvZCA9ICJQT1NUIjsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uT3BlbiA9IGNvbnRleHRQYXRoT3BlbitzZXJ2bGV0KyItIittZXRob2Q7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbkRlbnkgPSBjb250ZXh0UGF0aERlbnkrc2VydmxldCsiLSIrbWV0aG9kOworICAgICAgICBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgNDAzLCB1c2VybmFtZSwgY29udGV4dFBhdGhEZW55LCBvdXRwdXQpOworICAgICAgICBpZiAoc3VjY2Vzcykgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LlBBU1MpOworICAgICAgICBlbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQkJU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDMwMiwgdXNlcm5hbWUsIGNvbnRleHRQYXRoT3Blbiwgb3V0cHV0KTsKLQkJaW50IGluZGV4ID0gb3V0cHV0LmluZGV4T2YoImh0dHBzOi8vIik7Ci0JCWlmIChzdWNjZXNzICYmIChpbmRleCAhPSAtMSkpIHsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5QQVNTKTsKLQkJfQotCQllbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5GQUlMKTsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q292ZXJlZDFQb3N0KCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvQ292ZXJlZDEiOworICAgICAgICBTdHJpbmcgbWV0aG9kID0gIlBPU1QiOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25PcGVuID0gY29udGV4dFBhdGhPcGVuK3NlcnZsZXQrIi0iK21ldGhvZDsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uRGVueSA9IGNvbnRleHRQYXRoRGVueStzZXJ2bGV0KyItIittZXRob2Q7CiAKLQkJb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDMwMiwgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKLQkJaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgMzAyLCB1c2VybmFtZSwgY29udGV4dFBhdGhPcGVuLCBvdXRwdXQpOworICAgICAgICBpbnQgaW5kZXggPSBvdXRwdXQuaW5kZXhPZigiaHR0cHM6Ly8iKTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGluZGV4ICE9IC0xKSkgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LlBBU1MpOworICAgICAgICB9CisgICAgICAgIGVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LkZBSUwpOwogCi0JcHVibGljIHZvaWQgdGVzdENvdmVyZWQxUHV0KCkgewotCQlTdHJpbmcgc2VydmxldCA9ICIvQ292ZXJlZDEiOwotCQlTdHJpbmcgbWV0aG9kID0gIlBVVCI7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbk9wZW4gPSBjb250ZXh0UGF0aE9wZW4rc2VydmxldCsiLSIrbWV0aG9kOwotCQlTdHJpbmcgZGVzY3JpcHRpb25EZW55ID0gY29udGV4dFBhdGhEZW55K3NlcnZsZXQrIi0iK21ldGhvZDsKKyAgICAgICAgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDMwMiwgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7CisgICAgfQogCi0JCVN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCAzMDIsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7Ci0JCWludCBpbmRleCA9IG91dHB1dC5pbmRleE9mKCJodHRwczovLyIpOwotCQlpZiAoc3VjY2VzcyAmJiAoaW5kZXggIT0gLTEpKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7Ci0JCX0KLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CisgICAgcHVibGljIHZvaWQgdGVzdENvdmVyZWQxUHV0KCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvQ292ZXJlZDEiOworICAgICAgICBTdHJpbmcgbWV0aG9kID0gIlBVVCI7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbk9wZW4gPSBjb250ZXh0UGF0aE9wZW4rc2VydmxldCsiLSIrbWV0aG9kOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25EZW55ID0gY29udGV4dFBhdGhEZW55K3NlcnZsZXQrIi0iK21ldGhvZDsKIAotCQlvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgMzAyLCB1c2VybmFtZSwgY29udGV4dFBhdGhEZW55LCBvdXRwdXQpOwotCQlpZiAoc3VjY2Vzcykgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LlBBU1MpOwotCQllbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5GQUlMKTsKLQl9CisgICAgICAgIFN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCAzMDIsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7CisgICAgICAgIGludCBpbmRleCA9IG91dHB1dC5pbmRleE9mKCJodHRwczovLyIpOworICAgICAgICBpZiAoc3VjY2VzcyAmJiAoaW5kZXggIT0gLTEpKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CiAKLQlwdWJsaWMgdm9pZCB0ZXN0Q292ZXJlZDIoKSB7Ci0JCVN0cmluZyBzZXJ2bGV0ID0gIi9Db3ZlcmVkMiI7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbk9wZW4gPSBjb250ZXh0UGF0aE9wZW4rc2VydmxldDsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uRGVueSA9IGNvbnRleHRQYXRoRGVueStzZXJ2bGV0OworICAgICAgICBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgMzAyLCB1c2VybmFtZSwgY29udGV4dFBhdGhEZW55LCBvdXRwdXQpOworICAgICAgICBpZiAoc3VjY2Vzcykgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LlBBU1MpOworICAgICAgICBlbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQkJU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBudWxsLCAzMDIsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7Ci0JCWludCBpbmRleCA9IG91dHB1dC5pbmRleE9mKCJodHRwczovLyIpOwotCQlpZiAoc3VjY2VzcyAmJiAoaW5kZXggIT0gLTEpKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7Ci0JCX0KLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CisgICAgcHVibGljIHZvaWQgdGVzdENvdmVyZWQyKCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvQ292ZXJlZDIiOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25PcGVuID0gY29udGV4dFBhdGhPcGVuK3NlcnZsZXQ7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbkRlbnkgPSBjb250ZXh0UGF0aERlbnkrc2VydmxldDsKIAotCQlvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG51bGwsIDMwMiwgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKLQkJaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG51bGwsIDMwMiwgdXNlcm5hbWUsIGNvbnRleHRQYXRoT3Blbiwgb3V0cHV0KTsKKyAgICAgICAgaW50IGluZGV4ID0gb3V0cHV0LmluZGV4T2YoImh0dHBzOi8vIik7CisgICAgICAgIGlmIChzdWNjZXNzICYmIChpbmRleCAhPSAtMSkpIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5QQVNTKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5GQUlMKTsKIAotCXB1YmxpYyB2b2lkIHRlc3RDb3ZlcmVkMlB1dCgpIHsKLQkJU3RyaW5nIHNlcnZsZXQgPSAiL0NvdmVyZWQyIjsKLQkJU3RyaW5nIG1ldGhvZCA9ICJQVVQiOwotCQlTdHJpbmcgZGVzY3JpcHRpb25PcGVuID0gY29udGV4dFBhdGhPcGVuK3NlcnZsZXQrIi0iK21ldGhvZDsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uRGVueSA9IGNvbnRleHRQYXRoRGVueStzZXJ2bGV0KyItIittZXRob2Q7CisgICAgICAgIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbnVsbCwgMzAyLCB1c2VybmFtZSwgY29udGV4dFBhdGhEZW55LCBvdXRwdXQpOworICAgICAgICBpZiAoc3VjY2Vzcykgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LlBBU1MpOworICAgICAgICBlbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQkJU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDQwMywgdXNlcm5hbWUsIGNvbnRleHRQYXRoT3Blbiwgb3V0cHV0KTsKLQkJaWYgKHN1Y2Nlc3MpIHsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5QQVNTKTsKLQkJfQotCQllbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5GQUlMKTsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q292ZXJlZDJQdXQoKSB7CisgICAgICAgIFN0cmluZyBzZXJ2bGV0ID0gIi9Db3ZlcmVkMiI7CisgICAgICAgIFN0cmluZyBtZXRob2QgPSAiUFVUIjsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uT3BlbiA9IGNvbnRleHRQYXRoT3BlbitzZXJ2bGV0KyItIittZXRob2Q7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbkRlbnkgPSBjb250ZXh0UGF0aERlbnkrc2VydmxldCsiLSIrbWV0aG9kOwogCi0JCW91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCA0MDMsIHVzZXJuYW1lLCBjb250ZXh0UGF0aERlbnksIG91dHB1dCk7Ci0JCWlmIChzdWNjZXNzKSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuUEFTUyk7Ci0JCWVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LkZBSUwpOwotCX0KKyAgICAgICAgU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDQwMywgdXNlcm5hbWUsIGNvbnRleHRQYXRoT3Blbiwgb3V0cHV0KTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5QQVNTKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5GQUlMKTsKIAotCXB1YmxpYyB2b2lkIHRlc3RDb3ZlcmVkM2FQb3N0KCkgewotCQlTdHJpbmcgc2VydmxldCA9ICIvQ292ZXJlZDNhIjsKLQkJU3RyaW5nIG1ldGhvZCA9ICJQT1NUIjsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uT3BlbiA9IGNvbnRleHRQYXRoT3BlbitzZXJ2bGV0KyItIittZXRob2Q7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbkRlbnkgPSBjb250ZXh0UGF0aERlbnkrc2VydmxldCsiLSIrbWV0aG9kOworICAgICAgICBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgNDAzLCB1c2VybmFtZSwgY29udGV4dFBhdGhEZW55LCBvdXRwdXQpOworICAgICAgICBpZiAoc3VjY2Vzcykgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LlBBU1MpOworICAgICAgICBlbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQkJU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDIwMCwgdXNlcm5hbWUsIGNvbnRleHRQYXRoT3Blbiwgb3V0cHV0KTsKLQkJaWYgKHN1Y2Nlc3MpIHsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5QQVNTKTsKLQkJfQotCQllbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5GQUlMKTsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q292ZXJlZDNhUG9zdCgpIHsKKyAgICAgICAgU3RyaW5nIHNlcnZsZXQgPSAiL0NvdmVyZWQzYSI7CisgICAgICAgIFN0cmluZyBtZXRob2QgPSAiUE9TVCI7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbk9wZW4gPSBjb250ZXh0UGF0aE9wZW4rc2VydmxldCsiLSIrbWV0aG9kOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25EZW55ID0gY29udGV4dFBhdGhEZW55K3NlcnZsZXQrIi0iK21ldGhvZDsKIAotCQlvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgMjAwLCB1c2VybmFtZSwgY29udGV4dFBhdGhEZW55LCBvdXRwdXQpOwotCQlpZiAoc3VjY2Vzcykgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LlBBU1MpOwotCQllbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5GQUlMKTsKLQl9CisgICAgICAgIFN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCAyMDAsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7CisgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CiAKLQlwdWJsaWMgdm9pZCB0ZXN0Q292ZXJlZDNhRGVsZXRlKCkgewotCQlTdHJpbmcgc2VydmxldCA9ICIvQ292ZXJlZDNhIjsKLQkJU3RyaW5nIG1ldGhvZCA9ICJERUxFVEUiOwotCQlTdHJpbmcgZGVzY3JpcHRpb25PcGVuID0gY29udGV4dFBhdGhPcGVuK3NlcnZsZXQrIi0iK21ldGhvZDsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uRGVueSA9IGNvbnRleHRQYXRoRGVueStzZXJ2bGV0KyItIittZXRob2Q7CisgICAgICAgIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCAyMDAsIHVzZXJuYW1lLCBjb250ZXh0UGF0aERlbnksIG91dHB1dCk7CisgICAgICAgIGlmIChzdWNjZXNzKSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuUEFTUyk7CisgICAgICAgIGVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LkZBSUwpOworICAgIH0KIAotCQlTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgMjAwLCB1c2VybmFtZSwgY29udGV4dFBhdGhPcGVuLCBvdXRwdXQpOwotCQlpZiAoc3VjY2VzcykgewotCQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LlBBU1MpOwotCQl9Ci0JCWVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LkZBSUwpOworICAgIHB1YmxpYyB2b2lkIHRlc3RDb3ZlcmVkM2FEZWxldGUoKSB7CisgICAgICAgIFN0cmluZyBzZXJ2bGV0ID0gIi9Db3ZlcmVkM2EiOworICAgICAgICBTdHJpbmcgbWV0aG9kID0gIkRFTEVURSI7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbk9wZW4gPSBjb250ZXh0UGF0aE9wZW4rc2VydmxldCsiLSIrbWV0aG9kOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25EZW55ID0gY29udGV4dFBhdGhEZW55K3NlcnZsZXQrIi0iK21ldGhvZDsKIAotCQlvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgMjAwLCB1c2VybmFtZSwgY29udGV4dFBhdGhEZW55LCBvdXRwdXQpOwotCQlpZiAoc3VjY2Vzcykgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LlBBU1MpOwotCQllbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5GQUlMKTsKLQl9CisgICAgICAgIFN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCAyMDAsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7CisgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CiAKLQlwdWJsaWMgdm9pZCB0ZXN0Q292ZXJlZDNiKCkgewotCQlTdHJpbmcgc2VydmxldCA9ICIvQ292ZXJlZDNiIjsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uT3BlbiA9IGNvbnRleHRQYXRoT3BlbitzZXJ2bGV0OwotCQlTdHJpbmcgZGVzY3JpcHRpb25EZW55ID0gY29udGV4dFBhdGhEZW55K3NlcnZsZXQ7CisgICAgICAgIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCAyMDAsIHVzZXJuYW1lLCBjb250ZXh0UGF0aERlbnksIG91dHB1dCk7CisgICAgICAgIGlmIChzdWNjZXNzKSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuUEFTUyk7CisgICAgICAgIGVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LkZBSUwpOworICAgIH0KIAotCQlTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG51bGwsIDMwMiwgdXNlcm5hbWUsIGNvbnRleHRQYXRoT3Blbiwgb3V0cHV0KTsKLQkJaW50IGluZGV4ID0gb3V0cHV0LmluZGV4T2YoImh0dHBzOi8vIik7Ci0JCWlmIChzdWNjZXNzICYmIChpbmRleCAhPSAtMSkpIHsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5QQVNTKTsKLQkJfQotCQllbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5GQUlMKTsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q292ZXJlZDNiKCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvQ292ZXJlZDNiIjsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uT3BlbiA9IGNvbnRleHRQYXRoT3BlbitzZXJ2bGV0OworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25EZW55ID0gY29udGV4dFBhdGhEZW55K3NlcnZsZXQ7CiAKLQkJb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBudWxsLCAzMDIsIHVzZXJuYW1lLCBjb250ZXh0UGF0aERlbnksIG91dHB1dCk7Ci0JCWlmIChzdWNjZXNzKSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuUEFTUyk7Ci0JCWVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LkZBSUwpOwotCX0KKyAgICAgICAgU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBudWxsLCAzMDIsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7CisgICAgICAgIGludCBpbmRleCA9IG91dHB1dC5pbmRleE9mKCJodHRwczovLyIpOworICAgICAgICBpZiAoc3VjY2VzcyAmJiAoaW5kZXggIT0gLTEpKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CiAKLQlwdWJsaWMgdm9pZCB0ZXN0Q292ZXJlZDNiUHV0KCkgewotCQlTdHJpbmcgc2VydmxldCA9ICIvQ292ZXJlZDNiIjsKLQkJU3RyaW5nIG1ldGhvZCA9ICJQVVQiOwotCQlTdHJpbmcgZGVzY3JpcHRpb25PcGVuID0gY29udGV4dFBhdGhPcGVuK3NlcnZsZXQrIi0iK21ldGhvZDsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uRGVueSA9IGNvbnRleHRQYXRoRGVueStzZXJ2bGV0KyItIittZXRob2Q7CisgICAgICAgIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbnVsbCwgMzAyLCB1c2VybmFtZSwgY29udGV4dFBhdGhEZW55LCBvdXRwdXQpOworICAgICAgICBpZiAoc3VjY2Vzcykgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LlBBU1MpOworICAgICAgICBlbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQkJU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDMwMiwgdXNlcm5hbWUsIGNvbnRleHRQYXRoT3Blbiwgb3V0cHV0KTsKLQkJaW50IGluZGV4ID0gb3V0cHV0LmluZGV4T2YoImh0dHBzOi8vIik7Ci0JCWlmIChzdWNjZXNzICYmIChpbmRleCAhPSAtMSkpIHsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5QQVNTKTsKLQkJfQotCQllbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5GQUlMKTsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q292ZXJlZDNiUHV0KCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvQ292ZXJlZDNiIjsKKyAgICAgICAgU3RyaW5nIG1ldGhvZCA9ICJQVVQiOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25PcGVuID0gY29udGV4dFBhdGhPcGVuK3NlcnZsZXQrIi0iK21ldGhvZDsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uRGVueSA9IGNvbnRleHRQYXRoRGVueStzZXJ2bGV0KyItIittZXRob2Q7CiAKLQkJb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDMwMiwgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKLQkJaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgMzAyLCB1c2VybmFtZSwgY29udGV4dFBhdGhPcGVuLCBvdXRwdXQpOworICAgICAgICBpbnQgaW5kZXggPSBvdXRwdXQuaW5kZXhPZigiaHR0cHM6Ly8iKTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGluZGV4ICE9IC0xKSkgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LlBBU1MpOworICAgICAgICB9CisgICAgICAgIGVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LkZBSUwpOwogCi0JcHJpdmF0ZSBib29sZWFuIGRvSW5kaXZpZHVhbFRlc3QoU3RyaW5nIHNlcnZsZXQsIFN0cmluZyBtZXRob2QsIGludCBjb2RlLCBTdHJpbmcgdXNlciwgU3RyaW5nIGNvbnRleHQsIFN0cmluZ0J1ZmZlciBvdXRwdXQpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkJdHJ5IHsKLQkJCWludCBydG5jb2RlOwotCQkJU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dCArIHNlcnZsZXQ7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuSW52b2tpbmcgc2VydmxldCBhdCAiICsgdXJsKTsKLQkJCXJ0bmNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCwgbWV0aG9kLCB1c2VyLCBvdXRwdXQpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJUaGUgc2VydmxldCByZXR1cm4gY29kZTogIiArIHJ0bmNvZGUpOwotCQkJaWYgKHJ0bmNvZGUgIT0gY29kZSkgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiSW5jb3JyZWN0IHJldHVybiBjb2RlLCBleHBlY3Rpbmc6ICIgKyBjb2RlKTsKLQkJCX0KLQkJCWVsc2UgcmVzdWx0ID0gdHJ1ZTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbjogIiArIGV4LnRvU3RyaW5nKCkpOwotCQkJLy9leC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KKyAgICAgICAgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDMwMiwgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7CisgICAgfQogCi0JcHJpdmF0ZSBpbnQgaW52b2tlU2VydmxldChTdHJpbmcgdXJsLCBTdHJpbmcgbWV0aG9kLCBTdHJpbmcgdXNlciwgU3RyaW5nQnVmZmVyIG91dHB1dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBodHRwTWV0aG9kID0gIkdFVCI7Ci0JCWlmICgobWV0aG9kICE9IG51bGwpICYmIChtZXRob2QubGVuZ3RoKCkgPiAwKSkgaHR0cE1ldGhvZCA9IG1ldGhvZDsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJJbnZva2luZyBzZXJ2bGV0IHdpdGggSFRUUCBtZXRob2Q6ICIgKyBodHRwTWV0aG9kKTsKLQkJVVJMIHUgPSBuZXcgVVJMKHVybCk7Ci0JCUh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1Lm9wZW5Db25uZWN0aW9uKCk7Ci0JCWMxLnNldFJlcXVlc3RNZXRob2QoaHR0cE1ldGhvZCk7Ci0JCWlmICgodXNlciAhPSBudWxsKSAmJiAodXNlci5sZW5ndGgoKSA+IDApKSB7Ci0JCQkvLyBBZGQgQkFTSUMgaGVhZGVyIGZvciBhdXRoZW50aWNhdGlvbgotCQkJU3RyaW5nIGF1dGggPSAgdXNlciArICI6IiArIHBhc3N3b3JkOwotCQkJU3RyaW5nIGF1dGhFbmNvZGVkID0gbmV3IHN1bi5taXNjLkJBU0U2NEVuY29kZXIoKS5lbmNvZGUoYXV0aC5nZXRCeXRlcygpKTsKLQkJCWMxLnNldFJlcXVlc3RQcm9wZXJ0eSgiQXV0aG9yaXphdGlvbiIsICJCYXNpYyAiICsgYXV0aEVuY29kZWQpOwotCQl9Ci0JCWMxLnNldFVzZUNhY2hlcyhmYWxzZSk7CisgICAgcHJpdmF0ZSBib29sZWFuIGRvSW5kaXZpZHVhbFRlc3QoU3RyaW5nIHNlcnZsZXQsIFN0cmluZyBtZXRob2QsIGludCBjb2RlLCBTdHJpbmcgdXNlciwgU3RyaW5nIGNvbnRleHQsIFN0cmluZ0J1ZmZlciBvdXRwdXQpIHsKKyAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGludCBydG5jb2RlOworICAgICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dCArIHNlcnZsZXQ7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuSW52b2tpbmcgc2VydmxldCBhdCAiICsgdXJsKTsKKyAgICAgICAgICAgIHJ0bmNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCwgbWV0aG9kLCB1c2VyLCBvdXRwdXQpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgc2VydmxldCByZXR1cm4gY29kZTogIiArIHJ0bmNvZGUpOworICAgICAgICAgICAgaWYgKHJ0bmNvZGUgIT0gY29kZSkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5jb3JyZWN0IHJldHVybiBjb2RlLCBleHBlY3Rpbmc6ICIgKyBjb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbjogIiArIGV4LnRvU3RyaW5nKCkpOworICAgICAgICAgICAgLy9leC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIAotCQkvLyBDb25uZWN0IGFuZCBnZXQgdGhlIHJlc3BvbnNlIGNvZGUgYW5kL29yIG91dHB1dCB0byB2ZXJpZnkKLQkJYzEuY29ubmVjdCgpOwotCQlpbnQgY29kZSA9IGMxLmdldFJlc3BvbnNlQ29kZSgpOwotCQlpZiAoY29kZSA9PSBIdHRwVVJMQ29ubmVjdGlvbi5IVFRQX09LKSB7Ci0JCQlJbnB1dFN0cmVhbSBpcyA9IG51bGw7Ci0JCQlCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG51bGw7Ci0JCQlTdHJpbmcgbGluZSA9IG51bGw7Ci0JCQl0cnkgewotCQkJCWlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKLQkJCQlpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKLQkJCQl3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0JCQkJCW91dHB1dC5hcHBlbmQobGluZSk7Ci0JCQkJCS8vU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOwotCQkJCX0KLQkJCX0KLQkJCWZpbmFsbHkgewotCQkJCXRyeSB7IGlmIChpcyAhPSBudWxsKSBpcy5jbG9zZSgpOyB9Ci0JCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHt9Ci0JCQkJdHJ5IHsgaWYgKGlucHV0ICE9IG51bGwpIGlucHV0LmNsb3NlKCk7IH0KLQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Yykge30KLQkJCX0KLQkJfQotCQllbHNlIGlmIChjb2RlID09IEh0dHBVUkxDb25uZWN0aW9uLkhUVFBfTU9WRURfVEVNUCkgewotCQkJVVJMIHJlZGlyID0gbmV3IFVSTChjMS5nZXRIZWFkZXJGaWVsZCgiTG9jYXRpb24iKSk7Ci0JCQlTdHJpbmcgbGluZSA9ICJTZXJ2bGV0IHJlZGlyZWN0ZWQgdG86ICIgKyByZWRpci50b1N0cmluZygpOwotCQkJb3V0cHV0LmFwcGVuZChsaW5lKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKLQkJfQotCQlyZXR1cm4gY29kZTsKLQl9CisgICAgcHJpdmF0ZSBpbnQgaW52b2tlU2VydmxldChTdHJpbmcgdXJsLCBTdHJpbmcgbWV0aG9kLCBTdHJpbmcgdXNlciwgU3RyaW5nQnVmZmVyIG91dHB1dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyBodHRwTWV0aG9kID0gIkdFVCI7CisgICAgICAgIGlmICgobWV0aG9kICE9IG51bGwpICYmIChtZXRob2QubGVuZ3RoKCkgPiAwKSkgaHR0cE1ldGhvZCA9IG1ldGhvZDsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnZva2luZyBzZXJ2bGV0IHdpdGggSFRUUCBtZXRob2Q6ICIgKyBodHRwTWV0aG9kKTsKKyAgICAgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7CisgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1Lm9wZW5Db25uZWN0aW9uKCk7CisgICAgICAgIGMxLnNldFJlcXVlc3RNZXRob2QoaHR0cE1ldGhvZCk7CisgICAgICAgIGlmICgodXNlciAhPSBudWxsKSAmJiAodXNlci5sZW5ndGgoKSA+IDApKSB7CisgICAgICAgICAgICAvLyBBZGQgQkFTSUMgaGVhZGVyIGZvciBhdXRoZW50aWNhdGlvbgorICAgICAgICAgICAgU3RyaW5nIGF1dGggPSAgdXNlciArICI6IiArIHBhc3N3b3JkOworICAgICAgICAgICAgU3RyaW5nIGF1dGhFbmNvZGVkID0gbmV3IHN1bi5taXNjLkJBU0U2NEVuY29kZXIoKS5lbmNvZGUoYXV0aC5nZXRCeXRlcygpKTsKKyAgICAgICAgICAgIGMxLnNldFJlcXVlc3RQcm9wZXJ0eSgiQXV0aG9yaXphdGlvbiIsICJCYXNpYyAiICsgYXV0aEVuY29kZWQpOworICAgICAgICB9CisgICAgICAgIGMxLnNldFVzZUNhY2hlcyhmYWxzZSk7CisKKyAgICAgICAgLy8gQ29ubmVjdCBhbmQgZ2V0IHRoZSByZXNwb25zZSBjb2RlIGFuZC9vciBvdXRwdXQgdG8gdmVyaWZ5CisgICAgICAgIGMxLmNvbm5lY3QoKTsKKyAgICAgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKKyAgICAgICAgaWYgKGNvZGUgPT0gSHR0cFVSTENvbm5lY3Rpb24uSFRUUF9PSykgeworICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOworICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBudWxsOworICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7CisgICAgICAgICAgICAgICAgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CisgICAgICAgICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGxpbmUpOworICAgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICB0cnkgeyBpZiAoaXMgIT0gbnVsbCkgaXMuY2xvc2UoKTsgfQorICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXhjKSB7fQorICAgICAgICAgICAgICAgIHRyeSB7IGlmIChpbnB1dCAhPSBudWxsKSBpbnB1dC5jbG9zZSgpOyB9CisgICAgICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHt9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29kZSA9PSBIdHRwVVJMQ29ubmVjdGlvbi5IVFRQX01PVkVEX1RFTVApIHsKKyAgICAgICAgICAgIFVSTCByZWRpciA9IG5ldyBVUkwoYzEuZ2V0SGVhZGVyRmllbGQoIkxvY2F0aW9uIikpOworICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSAiU2VydmxldCByZWRpcmVjdGVkIHRvOiAiICsgcmVkaXIudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQobGluZSk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvZGU7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdW5jb3ZlcmVkLWh0dHAtbWV0aG9kcy9kZXNjcmlwdG9yL2Rlbnktd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VuY292ZXJlZC1odHRwLW1ldGhvZHMvZGVzY3JpcHRvci9kZW55LXdlYi54bWwKaW5kZXggZTliNDY2YS4uZGVkODJjZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdW5jb3ZlcmVkLWh0dHAtbWV0aG9kcy9kZXNjcmlwdG9yL2Rlbnktd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91bmNvdmVyZWQtaHR0cC1tZXRob2RzL2Rlc2NyaXB0b3IvZGVueS13ZWIueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgICAgICAgICA8dHJhbnNwb3J0LWd1YXJhbnRlZT5DT05GSURFTlRJQUw8L3RyYW5zcG9ydC1ndWFyYW50ZWU+CiAgICAgICAgIDwvdXNlci1kYXRhLWNvbnN0cmFpbnQ+CiAgICAgPC9zZWN1cml0eS1jb25zdHJhaW50PgotICAgIAorCiAgICAgPHNlY3VyaXR5LWNvbnN0cmFpbnQ+CiAgICAgICAgIDx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KICAgICAgICAgICAgIDx3ZWItcmVzb3VyY2UtbmFtZT5FeGFtcGxlMjwvd2ViLXJlc291cmNlLW5hbWU+CkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIDwvd2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CiAgICAgICAgIDxhdXRoLWNvbnN0cmFpbnQvPgogICAgIDwvc2VjdXJpdHktY29uc3RyYWludD4KLSAgICAKKwogICAgIDxzZWN1cml0eS1jb25zdHJhaW50PgogICAgICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CiAgICAgICAgICAgICA8d2ViLXJlc291cmNlLW5hbWU+Q292ZXJlZDE8L3dlYi1yZXNvdXJjZS1uYW1lPgpAQCAtNzQsNSArNzQsNSBAQAogICAgICAgICAgICAgPHRyYW5zcG9ydC1ndWFyYW50ZWU+Q09ORklERU5USUFMPC90cmFuc3BvcnQtZ3VhcmFudGVlPgogICAgICAgICA8L3VzZXItZGF0YS1jb25zdHJhaW50PgogICAgIDwvc2VjdXJpdHktY29uc3RyYWludD4KLSAgICAKKwogPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdW5jb3ZlcmVkLWh0dHAtbWV0aG9kcy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91bmNvdmVyZWQtaHR0cC1tZXRob2RzL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAzZGQzZDgwLi42Yjc3ZDU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91bmNvdmVyZWQtaHR0cC1tZXRob2RzL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91bmNvdmVyZWQtaHR0cC1tZXRob2RzL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMzMsNyArMzMsNyBAQAogICAgICAgICAgICAgPHRyYW5zcG9ydC1ndWFyYW50ZWU+Q09ORklERU5USUFMPC90cmFuc3BvcnQtZ3VhcmFudGVlPgogICAgICAgICA8L3VzZXItZGF0YS1jb25zdHJhaW50PgogICAgIDwvc2VjdXJpdHktY29uc3RyYWludD4KLSAgICAKKwogICAgIDxzZWN1cml0eS1jb25zdHJhaW50PgogICAgICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CiAgICAgICAgICAgICA8d2ViLXJlc291cmNlLW5hbWU+RXhhbXBsZTI8L3dlYi1yZXNvdXJjZS1uYW1lPgpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICA8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgogICAgICAgICA8YXV0aC1jb25zdHJhaW50Lz4KICAgICA8L3NlY3VyaXR5LWNvbnN0cmFpbnQ+Ci0gICAgCisKICAgICA8c2VjdXJpdHktY29uc3RyYWludD4KICAgICAgICAgPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgogICAgICAgICAgICAgPHdlYi1yZXNvdXJjZS1uYW1lPkNvdmVyZWQxPC93ZWItcmVzb3VyY2UtbmFtZT4KQEAgLTcyLDUgKzcyLDUgQEAKICAgICAgICAgICAgIDx0cmFuc3BvcnQtZ3VhcmFudGVlPkNPTkZJREVOVElBTDwvdHJhbnNwb3J0LWd1YXJhbnRlZT4KICAgICAgICAgPC91c2VyLWRhdGEtY29uc3RyYWludD4KICAgICA8L3NlY3VyaXR5LWNvbnN0cmFpbnQ+Ci0gICAgCisKIDwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VzZXJXaXRoQXRTeW1ib2wvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VzZXJXaXRoQXRTeW1ib2wvYnVpbGQucHJvcGVydGllcwppbmRleCBhMTgzNWQ0Li5mMGY4OTFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91c2VyV2l0aEF0U3ltYm9sL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdXNlcldpdGhBdFN5bWJvbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KQEAgLTI2LDQgKzI2LDQgQEAKIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0icnBhTG9naW5CZWFuIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9InJwYUxvZ2luQmVhbiIvPiAgICAgICAgXHUwMDIwCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91c2VyV2l0aEF0U3ltYm9sL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VzZXJXaXRoQXRTeW1ib2wvYnVpbGQueG1sCmluZGV4IGNiZjhiNmMuLjU0OWE0NzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VzZXJXaXRoQXRTeW1ib2wvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VzZXJXaXRoQXRTeW1ib2wvYnVpbGQueG1sCkBAIC0zMywyNSArMzMsMjUgQEAKICAgICZjb21tb25SdW47CiAgICAmdGVzdFByb3BlcnRpZXM7CiAgICAmY29tbW9uU2VjdXJpdHk7Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsIHNldHVwLCBkZXBsb3kscnVuLCB1bmRlcGxveSwgdW5zZXR1cCIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8cHJvcGVydHkgZW52aXJvbm1lbnQ9ImVudiIvPgotCTxlY2hvIG1lc3NhZ2U9ImZpbGU9JHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvY29uZmlnL2tleWZpbGUyIiBmaWxlPSJ0ZW1wLnR4dCIvPgotCTxyZXBsYWNlIGZpbGU9InRlbXAudHh0IiB0b2tlbj0iOiIgdmFsdWU9Ilw6Ii8+Ci0JPHJlcGxhY2UgZmlsZT0idGVtcC50eHQiIHRva2VuPSJcIiB2YWx1ZT0iXFwiLz4KLQk8bG9hZHByb3BlcnRpZXMgc3JjRmlsZT0idGVtcC50eHQiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJmaWxlPSR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2NvbmZpZy9rZXlmaWxlMiIgZmlsZT0idGVtcC50eHQiLz4KKyAgICA8cmVwbGFjZSBmaWxlPSJ0ZW1wLnR4dCIgdG9rZW49IjoiIHZhbHVlPSJcOiIvPgorICAgIDxyZXBsYWNlIGZpbGU9InRlbXAudHh0IiB0b2tlbj0iXCIgdmFsdWU9IlxcIi8+CisgICAgPGxvYWRwcm9wZXJ0aWVzIHNyY0ZpbGU9InRlbXAudHh0Ii8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IiR7ZmlsZX0iLz4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSJ0ZW1wLnR4dCIvPgotCQorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJjcmVhdGUtYXV0aC1yZWFsbSIgLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iLS1jbGFzc25hbWUgY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uZmlsZS5GaWxlUmVhbG0gLS1wcm9wZXJ0eSBmaWxlPSR7ZmlsZX06amFhcy1jb250ZXh0PWZpbGVSZWFsbSBmaWxlMiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICA8IS0tICA8YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPi0tPgogCi0JPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgdXNlciB3aXRoIGFuIEAgc3ltYm9sOiBoYXJwcmVldEBmb29iYXIuY29tIi8+CisgICAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgdXNlciB3aXRoIGFuIEAgc3ltYm9sOiBoYXJwcmVldEBmb29iYXIuY29tIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXVzZXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0iaGFycHJlZXRAZm9vYmFyLmNvbSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InBhc3N3b3JkIiB2YWx1ZT0iaGFycHJlZXQiLz4KQEAgLTg5LDcgKzg5LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotPCEtLQk8cHJvcGVydHkgbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi8qSG9tZSouY2xhc3MsKiovKkJlYW4qLmNsYXNzLCoqLypEYXRhKi5jbGFzcywqLmRic2NoZW1hIi8+Cis8IS0tICAgIDxwcm9wZXJ0eSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLypIb21lKi5jbGFzcywqKi8qQmVhbiouY2xhc3MsKiovKkRhdGEqLmNsYXNzLCouZGJzY2hlbWEiLz4KIC0tPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VzZXJXaXRoQXRTeW1ib2wvY2xpZW50L1JwYUNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdXNlcldpdGhBdFN5bWJvbC9jbGllbnQvUnBhQ2xpZW50LmphdmEKaW5kZXggMmZmYzQyYS4uMjM1NmQyNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdXNlcldpdGhBdFN5bWJvbC9jbGllbnQvUnBhQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdXNlcldpdGhBdFN5bWJvbC9jbGllbnQvUnBhQ2xpZW50LmphdmEKQEAgLTM4LDMxICszOCwzMSBAQAogICAgICAgICBScGFDbGllbnQgY2xpZW50ID0gbmV3IFJwYUNsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBScGFDbGllbnQoU3RyaW5nW10gYXJncykgewogICAgICAgICAvL3N1cGVyKGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KCkgewotICAgICAgICAKLQlScGFSZW1vdGUgaHI9bnVsbDsKKworICAgIFJwYVJlbW90ZSBocj1udWxsOwogICAgICAgICBTdHJpbmcgcmVzPW51bGw7CiAgICAgICAgIENvbnRleHQgaWMgPSBudWxsOwogICAgICAgICBMb2dpbkNvbnRleHQgbGM9bnVsbDsKICAgICAgICAgUnBhSG9tZSBob21lPW51bGw7CiAgICAgICAgIFN0cmluZyB0ZXN0SWQgPSAiU2VjOjpVc2VybmFtZSB3aXRoIEAiOwotICAgIAl0cnl7CisgICAgICAgIHRyeXsKICAgICAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlNlY3VyaXR5OjpVc2VybmFtZSB3aXRoIEAiKTsKLQkgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lciAKKyAgICAgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lcgogICAgICAgICAgICAgamF2YS5sYW5nLk9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoInJwYUxvZ2luQmVhbiIpOwotCQkKLQkgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7Ci0JCQotCSAgICBob21lID0gKFJwYUhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KAotCQkJCQkgICBvYmpyZWYsIFJwYUhvbWUuY2xhc3MpOwotCSAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwotCQkJCQorCisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOworCisgICAgICAgIGhvbWUgPSAoUnBhSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3coCisgICAgICAgICAgICAgICAgICAgICAgIG9ianJlZiwgUnBhSG9tZS5jbGFzcyk7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7CisKICAgICAgICAgICAgIGhyID0gaG9tZS5jcmVhdGUoIkxpekh1cmxleSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7CiAKQEAgLTg4LDExICs4OCwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVc2VybmFtZSB3aXRoIEA6UnBhTG9naW5CZWFuIFRlc3QgRmFpbGVkIik7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgtMSk7Ci0JfSBmaW5hbGx5IHsKKyAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICAKKwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdXNlcldpdGhBdFN5bWJvbC9zaG9wcGluZy9ScGFCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91c2VyV2l0aEF0U3ltYm9sL3Nob3BwaW5nL1JwYUJlYW4uamF2YQppbmRleCA0YjUzYmQ0Li42NjBiN2MzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91c2VyV2l0aEF0U3ltYm9sL3Nob3BwaW5nL1JwYUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91c2VyV2l0aEF0U3ltYm9sL3Nob3BwaW5nL1JwYUJlYW4uamF2YQpAQCAtMzYsMjYgKzM2LDI2IEBACiAgKi8KIAogcHVibGljIGNsYXNzIFJwYUJlYW4gaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBzaG9wcGVyID0gImFub255bW91cyI7CiAgICAgcHJpdmF0ZSBTdHJpbmcgcHJpbmNpcGFsID0gImhhcnByZWV0QGZvb2Jhci5jb20iOwogICAgIHByaXZhdGUgaW50IHRvdGFsUHJpY2UgPSAwOwotICAgIAorCiAgICAgcHJpdmF0ZSBpbnQgdG90YWxJdGVtcyA9IDA7Ci0gICAgCisKICAgICBwcml2YXRlIFZlY3RvciBpdGVtczsKLSAgICAKKwogICAgIHByaXZhdGUgVmVjdG9yIGl0ZW1QcmljZTsKLSAgICAKKwogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2MgPSBudWxsOwotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgU2hvcHBpbmdFSkIgKi8KICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoU3RyaW5nIHNob3BwZXJOYW1lKSB7CiAgICAgICAgIHNob3BwZXIgPSBzaG9wcGVyTmFtZTsKICAgICAgICAgaXRlbXMgPSBuZXcgVmVjdG9yKCk7CiAgICAgICAgIGl0ZW1QcmljZSA9IG5ldyBWZWN0b3IoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhZGRJdGVtKGphdmEubGFuZy5TdHJpbmcgaXRlbSwgaW50IHByaWNlKSB0aHJvd3MgRUpCRXhjZXB0aW9uLAogICAgICAgICBSZW1vdGVFeGNlcHRpb257CiAgICAgICAgIGNoZWNrQ2FsbGVyUHJpbmNpcGFsKCk7CkBAIC02NywyNiArNjcsMjYgQEAKICAgICAgICAgICAgICsgaXRlbSArIiBmb3IgcHJpY2UgPSIrIHByaWNlICsiIC5Ub3RhbCBJdGVtcyA9ICIrdG90YWxJdGVtcyArCiAgICAgICAgICAgICAiIC5Ub3RhbFByaWNlID0gIiArIHRvdGFsUHJpY2UpOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBkZWxldGVJdGVtKGphdmEubGFuZy5TdHJpbmcgaXRlbSkgdGhyb3dzIEVKQkV4Y2VwdGlvbiwgCisKKyAgICBwdWJsaWMgdm9pZCBkZWxldGVJdGVtKGphdmEubGFuZy5TdHJpbmcgaXRlbSkgdGhyb3dzIEVKQkV4Y2VwdGlvbiwKICAgICAgICAgUmVtb3RlRXhjZXB0aW9uewogICAgICAgICBjaGVja0NhbGxlclByaW5jaXBhbCgpOwogICAgICAgICBpbnQgaW5kZXggPSBpdGVtcy5pbmRleE9mKGl0ZW0pOwogICAgICAgICBpdGVtcy5yZW1vdmUoaXRlbSk7CiAgICAgICAgIEludGVnZXIgcHJpY2UgPSAoSW50ZWdlcikgaXRlbVByaWNlLmdldChpbmRleCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2hvcHBpbmcgQ2FydDogUmVtb3ZpbmcgaXRlbSAiKyBpdGVtICsiIEBwcmljZSAiKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTaG9wcGluZyBDYXJ0OiBSZW1vdmluZyBpdGVtICIrIGl0ZW0gKyIgQHByaWNlICIrCiAgICAgICAgICAgICBwcmljZS5pbnRWYWx1ZSgpKTsKICAgICAgICAgdG90YWxQcmljZSAtPSBwcmljZS5zaG9ydFZhbHVlKCk7Ci0gICAgICAgIGl0ZW1QcmljZS5yZW1vdmUoaW5kZXgpOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGl0ZW1QcmljZS5yZW1vdmUoaW5kZXgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBTaG9wcGluZyBDYXJ0OiBTaG9wcGVyICIrIHNob3BwZXIgKyIgIC5Ub3RhbCBJdGVtcyA9ICIrdG90YWxJdGVtcyArCiAgICAgICAgICAgICAiIC5Ub3RhbFByaWNlID0gIiArIHRvdGFsUHJpY2UpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBkb3VibGUgZ2V0VG90YWxDb3N0KCkgdGhyb3dzIEVKQkV4Y2VwdGlvbnsKICAgICAgICAgY2hlY2tDYWxsZXJQcmluY2lwYWwoKTsKICAgICAgICAgcmV0dXJuIHRvdGFsUHJpY2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZ1tdIGdldEl0ZW1zKCkgdGhyb3dzIEVKQkV4Y2VwdGlvbnsKICAgICAgICAgY2hlY2tDYWxsZXJQcmluY2lwYWwoKTsKIApAQCAtOTgsMjYgKzk4LDI2IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGl0ZW1OYW1lczsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBScGEgZWpiQWN0aXZhdGUiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBScGEgZWpiUGFzc2l2YXRlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSAgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFJwYSBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0IHNlc3Npb25Db250ZXh0KSB7CiAgICAgICAgIHNjID0gc2Vzc2lvbkNvbnRleHQ7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGNoZWNrQ2FsbGVyUHJpbmNpcGFsKCkgdGhyb3dzIEVKQkV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGVyIFByaW5jaWFsID0gIiArIHNjLmdldENhbGxlclByaW5jaXBhbCgpICsKICAgICAgICAgICAgICAgICAiIGNvbXBhcmluZyBhZ2FpbnN0ICIgKyBwcmluY2lwYWwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdXNlcldpdGhBdFN5bWJvbC9zaG9wcGluZy9ScGFIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91c2VyV2l0aEF0U3ltYm9sL3Nob3BwaW5nL1JwYUhvbWUuamF2YQppbmRleCBkNDI2MmQwLi5jOTkzMDkwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91c2VyV2l0aEF0U3ltYm9sL3Nob3BwaW5nL1JwYUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91c2VyV2l0aEF0U3ltYm9sL3Nob3BwaW5nL1JwYUhvbWUuamF2YQpAQCAtMjgsOCArMjgsOCBAQAogICogQGF1dGhvciAgSGFycHJlZXQgU2luZ2gKICAqLwogcHVibGljIGludGVyZmFjZSBScGFIb21lIGV4dGVuZHMgRUpCSG9tZXsKLSAgICAKLSAgICBwdWJsaWMgUnBhUmVtb3RlIGNyZWF0ZShqYXZhLmxhbmcuU3RyaW5nIHNob3BwZXJOYW1lKSAKKworICAgIHB1YmxpYyBScGFSZW1vdGUgY3JlYXRlKGphdmEubGFuZy5TdHJpbmcgc2hvcHBlck5hbWUpCiAgICAgICAgIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdXNlcldpdGhBdFN5bWJvbC9zaG9wcGluZy9ScGFSZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VzZXJXaXRoQXRTeW1ib2wvc2hvcHBpbmcvUnBhUmVtb3RlLmphdmEKaW5kZXggZmI4YTc3My4uNDNhMzk5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdXNlcldpdGhBdFN5bWJvbC9zaG9wcGluZy9ScGFSZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91c2VyV2l0aEF0U3ltYm9sL3Nob3BwaW5nL1JwYVJlbW90ZS5qYXZhCkBAIC0yMywxNyArMjMsMTcgQEAKIHBhY2thZ2Ugc2hvcHBpbmc7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCT2JqZWN0OwogLyoqCi0gKiBTaG9wcGluZyBDYXJ0IFN0YXRlZnVsIFNlc3Npb24gQmVhbi4gSnVzdCB0ZXN0cyAtRGoyZWVsb2dpbi5uYW1lIAorICogU2hvcHBpbmcgQ2FydCBTdGF0ZWZ1bCBTZXNzaW9uIEJlYW4uIEp1c3QgdGVzdHMgLURqMmVlbG9naW4ubmFtZQogICogIC1EajJlZWxvZ2luLnBhc3N3b3JkIHN5c3RlbSBwcm9wZXJ0aWVzLgogICogQGF1dGhvciAgaHNpbmdoCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgUnBhUmVtb3RlIGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAgICAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgYWRkSXRlbShqYXZhLmxhbmcuU3RyaW5nIGl0ZW0sIGludCBwcmljZSkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRlbGV0ZUl0ZW0oamF2YS5sYW5nLlN0cmluZyBpdGVtKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgICAgIAorCiAgICAgcHVibGljIGRvdWJsZSBnZXRUb3RhbENvc3QoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmdbXSBnZXRJdGVtcygpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93ZWItbXV0dWFsLXNzbC9XZWJTU0xDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dlYi1tdXR1YWwtc3NsL1dlYlNTTENsaWVudC5qYXZhCmluZGV4IGJiNGY1NjUuLmU5OWRlNmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dlYi1tdXR1YWwtc3NsL1dlYlNTTENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dlYi1tdXR1YWwtc3NsL1dlYlNTTENsaWVudC5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiBwdWJsaWMgY2xhc3MgV2ViU1NMQ2xpZW50IHsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUKLSAgICAgICAgPSAic2VjdXJpdHktd2ViLW11dHVhbC1zc2wiOyAgICAKKyAgICAgICAgPSAic2VjdXJpdHktd2ViLW11dHVhbC1zc2wiOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFCiAgICAgICAgID0gIltMamF2YS5zZWN1cml0eS5jZXJ0Llg1MDlDZXJ0aWZpY2F0ZTsiOwpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICBTdHJpbmcgc3NsUGFzc3dvcmQgPSBhcmdzWzVdOwogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaG9zdC9wb3J0PSIgKyBob3N0ICsgIi8iICsgcG9ydCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKFRFU1RfTkFNRSk7CiAgICAgICAgICAgICBTU0xTb2NrZXRGYWN0b3J5IHNzZiA9IGdldFNTTFNvY2tldEZhY3Rvcnkoc3NsUGFzc3dvcmQsCkBAIC02Miw5ICs2Miw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIvVGVzdENsaWVudENlcnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzZik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcGFyc2VSZXNwb25zZShjb25uZWN0aW9uKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtODEsNyArODEsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uZ2V0SW5wdXRTdHJlYW0oKSkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKICAgICAgICAgICAgIHdoaWxlICgobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CkBAIC0xMTEsNyArMTExLDcgQEAKIAogICAgICAgICBTU0xDb250ZXh0IGN0eCA9IFNTTENvbnRleHQuZ2V0SW5zdGFuY2UoIlRMUyIpOwogCi0gICAgICAgIC8vIEtleXN0b3JlIAorICAgICAgICAvLyBLZXlzdG9yZQogICAgICAgICBLZXlTdG9yZSBrcyA9IEtleVN0b3JlLmdldEluc3RhbmNlKCJKS1MiKTsKICAgICAgICAgY2hhcltdIHBhc3NwaHJhc2UgPSBzc2xQYXNzd29yZC50b0NoYXJBcnJheSgpOwogICAgICAgICBrcy5sb2FkKG5ldyBGaWxlSW5wdXRTdHJlYW0oa2V5U3RvcmVQYXRoKSwgcGFzc3BocmFzZSk7CkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICAgICAgdG1mLmluaXQodHJ1c3RTdG9yZSk7CiAKICAgICAgICAgY3R4LmluaXQoa21mLmdldEtleU1hbmFnZXJzKCksdG1mLmdldFRydXN0TWFuYWdlcnMoKSwgbnVsbCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBjdHguZ2V0U29ja2V0RmFjdG9yeSgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd2ViLW11dHVhbC1zc2wvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dlYi1tdXR1YWwtc3NsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzc4YzA2ZC4uNzYyNmM0OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd2ViLW11dHVhbC1zc2wvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93ZWItbXV0dWFsLXNzbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWItbXV0dWFsLXNzbCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iIC8+CkBAIC0yNyw2ICsyNyw2IEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9InN0YXRlZnVsTG9naW5CZWFuIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9InN0YXRlZnVsTG9naW5CZWFuIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93ZWItbXV0dWFsLXNzbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93ZWItbXV0dWFsLXNzbC9idWlsZC54bWwKaW5kZXggMjRiYTE3Ni4uMDk1MDJiZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd2ViLW11dHVhbC1zc2wvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dlYi1tdXR1YWwtc3NsL2J1aWxkLnhtbApAQCAtMzMsNyArMzMsNyBAQAogICAgICZjb21tb25SdW47CiAgICAgJmNvbW1vblNlY3VyaXR5OwogICAgICZ0ZXN0UHJvcGVydGllczsKLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCwgc2V0dXAsIGRlcGxveSwgcnVuLCB1bmRlcGxveSwgdW5zZXR1cCIvPgogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CkBAIC01MCwxMCArNTAsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+ICAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZ2VuZXJhdGUtY2EtY2xpZW50LWNlcnRzLWVlIiAvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0b3JlIi8+CiAgICAgPC90YXJnZXQ+CkBAIC0xNDgsMTEgKzE0OCwxMSBAQAogICAgIDwvZXhlYz4KIDwvdGFyZ2V0PgogCi08IS0tIAorPCEtLQogICAgZ2VuZXJhdGUgc2VsZnNpZ25lZCBDQSBjZXJ0IHRlc3RjYSwgYW5kIHRlc3RjZXJ0MShpc3N1ZWQgYnkvc2lnbmVkIGJ5IHRlc3RjYSkgaW4gJHtuc3MuZGIuZGlyfTsKICAgIGV4cG9ydCB0ZXN0Y2EgICAgdG8gdGVzdGNhLnJmYyBhbmQgdGhlbiBpbXBvcnQgdG8gJHtteXRydXN0c3RvcmUuZGIuZmlsZX07CiAgICBleHBvcnQgdGVzdGNlcnQxIHRvIHRlc3RjZXJ0LnAxMiBhbmQgdGhlbiBpbXBvcnQgaXQgdG8gJHtteWtleXN0b3JlLmRiLmZpbGV9LgotLS0+ICAgCistLT4KIDx0YXJnZXQgbmFtZT0iZ2VuZXJhdGUtY2EtY2xpZW50LWNlcnRzLWVlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgaWY9ImlzTlNTIj4KICAgICA8bWtkaXIgZGlyPSJidWlsZCIvPgogICAgIDxlY2hvIG1lc3NhZ2U9IiR7c3NsLnBhc3N3b3JkfSIgICBmaWxlPSJidWlsZC9wYXNzZmlsZSIvPgpAQCAtMjA0LDcgKzIwNCw3IEBACiAgICAgICAgIDxlbnYga2V5PSJMRF9MSUJSQVJZX1BBVEgiIHBhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliIi8+CiAgICAgICAgIDxhcmcgbGluZT0iLUQgLW4gdGVzdGNlcnQxICAtZCAke25zcy5kYi5kaXJ9Ii8+CiAgICAgPC9leGVjPgotICAgIAorCiA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd2ViLW11dHVhbC1zc2wvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd2ViLW11dHVhbC1zc2wvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDNjNmE2ZWIuLmQ2Mjc1MzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dlYi1tdXR1YWwtc3NsL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93ZWItbXV0dWFsLXNzbC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDEzICsyMiwxMyBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICA8ZGlzcGxheS1uYW1lPlRlc3RDbGllbnRDZXJ0PC9kaXNwbGF5LW5hbWU+CiAgICAgICA8c2VydmxldC1uYW1lPlRlc3RDbGllbnRDZXJ0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICA8c2VydmxldC1jbGFzcz5kZXZ0ZXN0cy5zZWN1cml0eS5UZXN0Q2xpZW50Q2VydDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0Q2xpZW50Q2VydDwvc2VydmxldC1uYW1lPgogICAgICAgPHVybC1wYXR0ZXJuPi9UZXN0Q2xpZW50Q2VydDwvdXJsLXBhdHRlcm4+CkBAIC0zNiw3ICszNiw3IEBACiAKICAgICA8c2VjdXJpdHktY29uc3RyYWludD4KICAgICAgIDx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KLQkgIDx3ZWItcmVzb3VyY2UtbmFtZT5Qcm90ZWN0ZWQgQXJlYTwvd2ViLXJlc291cmNlLW5hbWU+CisgICAgICA8d2ViLXJlc291cmNlLW5hbWU+UHJvdGVjdGVkIEFyZWE8L3dlYi1yZXNvdXJjZS1uYW1lPgogICAgICAgICAgIDx1cmwtcGF0dGVybj4vVGVzdENsaWVudENlcnQ8L3VybC1wYXR0ZXJuPgogICAgICAgICAgIDxodHRwLW1ldGhvZD5ERUxFVEU8L2h0dHAtbWV0aG9kPgogICAgICAgICAgIDxodHRwLW1ldGhvZD5HRVQ8L2h0dHAtbWV0aG9kPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd2ViLW11dHVhbC1zc2wvc2VydmxldC9UZXN0Q2xpZW50Q2VydC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd2ViLW11dHVhbC1zc2wvc2VydmxldC9UZXN0Q2xpZW50Q2VydC5qYXZhCmluZGV4IDAwMTgzZDIuLmE3OWIwM2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dlYi1tdXR1YWwtc3NsL3NlcnZsZXQvVGVzdENsaWVudENlcnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93ZWItbXV0dWFsLXNzbC9zZXJ2bGV0L1Rlc3RDbGllbnRDZXJ0LmphdmEKQEAgLTM0LDkgKzM0LDkgQEAKICAgICAgICAgaWYgKGNlcnRzICE9IG51bGwpIHsKICAgICAgICAgICAgIGZvciAoWDUwOUNlcnRpZmljYXRlIGNlcnQgOiBjZXJ0cykgewogICAgICAgICAgICAgICAgZ2V0U2VydmxldENvbnRleHQoKS5sb2coY2VydC50b1N0cmluZygpKTsKLSAgICAgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNsTmFtZSA9IGNlcnRzLmdldENsYXNzKCkuZ2V0TmFtZSgpOwotCX0gZWxzZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGNsTmFtZSA9ICJjZXJ0IGlzIG51bGwiOwogICAgICAgICB9CiAgICAgICAgIHJlcy5nZXRXcml0ZXIoKS5wcmludChjbE5hbWUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd2VibG9naWMtZGQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dlYmxvZ2ljLWRkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjk0ZjIzNS4uNWY4YmEzYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd2VibG9naWMtZGQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93ZWJsb2dpYy1kZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWJsb2dpYy1kZCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93ZWJsb2dpYy1kZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93ZWJsb2dpYy1kZC9idWlsZC54bWwKaW5kZXggMTE1MjU2My4uNmZiNzk1NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd2VibG9naWMtZGQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dlYmxvZ2ljLWRkL2J1aWxkLnhtbApAQCAtNDYsNyArNDYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGlzcGxheS1oZWFkZXIiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSItLT5SdW5uaW5nICR7YW50LnByb2plY3QubmFtZX0gdGVzdHMgZnJvbSAke2Jhc2VkaXJ9IC4uLiIvPgogICAgIDwvdGFyZ2V0PgotICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXVzZXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0id2xVc2VyIi8+CkBAIC03Niw3ICs3Niw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTE0LDcgKzExNCw3IEBACiAgICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgogCi0gICAgPCEtLSB2YXJpYWJsZXMgbmVlZGVkIGJ5IGN1c3RvbS1idWlsZCAKKyAgICA8IS0tIHZhcmlhYmxlcyBuZWVkZWQgYnkgY3VzdG9tLWJ1aWxkCiAgICAgICAgICAxLiB3bHBhc3MKICAgICAgICAgIDIuIHdsdXNlcgogICAgICAgICAgMy4gd2xyb2xlCkBAIC0xNzgsNyArMTc4LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3bHJvbGUiIHZhbHVlPSJ3ZWJsb2dpYy1hcHAteG1sIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLW5lZ2F0aXZlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3VzdG9tLW5lZy1ydW4iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndsdXNlciIgdmFsdWU9IndsVXNlciIvPgpAQCAtMTkzLDcgKzE5Myw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2xyb2xlIiB2YWx1ZT0id2VibG9naWMtYXBwLXhtbCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvYnVpbGQueG1sCmluZGV4IDc2Zjk4MDQuLjhhY2IyNTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KICAgICAgICAgPHJlY29yZCBuYW1lPSJzZWN1cml0eS13c3Mub3V0cHV0IiBhY3Rpb249InN0YXJ0IiAvPgogCi0JPGFudCBkaXI9ImVuY1RoZW5TaWduLWRlZmF1bHQtY29uZiIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0icGVybWV0aG9kIiB0YXJnZXQ9ImFsbCIvPgogCiAgICAgICAgIDwhLS0gSldTIDIuMCAtLT4KQEAgLTQ0LDYgKzQ0LDYgQEAKIDwhLS0gICAgICAgIDxhbnQgZGlyPSJzc2wiIHRhcmdldD0iYWxsIi8+LS0+CiA8IS0tICAgICAgICA8YW50IGRpcj0ic3NsY2xpZW50Y2VydCIgdGFyZ2V0PSJhbGwiLz4tLT4KIAotICAgICAgICA8cmVjb3JkIG5hbWU9InNlY3VyaXR5LXdzcy5vdXRwdXQiIGFjdGlvbj0ic3RvcCIgLz4gICAgCisgICAgICAgIDxyZWNvcmQgbmFtZT0ic2VjdXJpdHktd3NzLm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL2J1aWxkLnhtbAppbmRleCBmYzdhZjAzLi4yMWQzZGFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL2J1aWxkLnhtbApAQCAtMzUsMTE0ICszNSwxMTQgQEAKIAogPCEtLSA9PT09PT09PSBUYXJnZXRzIGJ5IGV4ZWN1dGlvbiBncmFudWxhcml0eSA9PT09PT09PT09IC0tPgogICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndzdGFyZ2V0cyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3MtdGFyZ2V0IiB2YWx1ZT0iYWxsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud3N0YXJnZXRzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3cy10YXJnZXQiIHZhbHVlPSJydW4tdGVzdCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndzdGFyZ2V0cyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3MtdGFyZ2V0IiB2YWx1ZT0iY2xlYW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53c3RhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzLXRhcmdldCIgdmFsdWU9ImJ1aWxkIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndzdGFyZ2V0cyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3MtdGFyZ2V0IiB2YWx1ZT0iZGVwbG95Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud3N0YXJnZXRzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3cy10YXJnZXQiIHZhbHVlPSJ1bmRlcGxveSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53c3RhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzLXRhcmdldCIgdmFsdWU9InJ1biIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8IS0tIGV4cG9ydHMgY2VydGRiIHN0dWZmIGFuZCBpbXBvcnRzIGludG8ga2V5c3RvcmUgLS0+Ci0JPGFudGNhbGwgdGFyZ2V0PSJwcmVwYXJlLXN0b3JlLW5pY2tuYW1lLWNvbW1vbiI+CisgICAgPCEtLSBleHBvcnRzIGNlcnRkYiBzdHVmZiBhbmQgaW1wb3J0cyBpbnRvIGtleXN0b3JlIC0tPgorICAgIDxhbnRjYWxsIHRhcmdldD0icHJlcGFyZS1zdG9yZS1uaWNrbmFtZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNlcnQubmlja25hbWUiIHZhbHVlPSJzMWFzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9ImVuYWJsZS13c3MtbWVzc2FnZS1zZWN1cml0eS1wcm92aWRlciI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJlbmFibGUtd3NzLW1lc3NhZ2Utc2VjdXJpdHktcHJvdmlkZXIiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indzcy5zZXJ2ZXIucHJvdmlkZXIubmFtZSIgdmFsdWU9IlNlcnZlclByb3ZpZGVyIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3NzLmNsaWVudC5wcm92aWRlci5uYW1lIiB2YWx1ZT0iQ2xpZW50UHJvdmlkZXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JPGFudGNhbGwgdGFyZ2V0PSJzZXQtd3NzLXByb3ZpZGVyLXJlcXVlc3QtYXV0aC1yZWNpcGllbnQiPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LXdzcy1wcm92aWRlci1yZXF1ZXN0LWF1dGgtcmVjaXBpZW50Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c3MucHJvdmlkZXIubmFtZSIgdmFsdWU9IlNlcnZlclByb3ZpZGVyIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVxdWVzdC5hdXRoLnJlY2lwaWVudCIgdmFsdWU9ImJlZm9yZS1jb250ZW50Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldC13c3MtcHJvdmlkZXItcmVzcG9uc2UtYXV0aC1yZWNpcGllbnQiPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LXdzcy1wcm92aWRlci1yZXNwb25zZS1hdXRoLXJlY2lwaWVudCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3NzLnByb3ZpZGVyLm5hbWUiIHZhbHVlPSJTZXJ2ZXJQcm92aWRlciIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3BvbnNlLmF1dGgucmVjaXBpZW50IiB2YWx1ZT0iYWZ0ZXItY29udGVudCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzZXQtd3NzLXByb3ZpZGVyLXJlcXVlc3QtYXV0aC1yZWNpcGllbnQiPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LXdzcy1wcm92aWRlci1yZXF1ZXN0LWF1dGgtcmVjaXBpZW50Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c3MucHJvdmlkZXIubmFtZSIgdmFsdWU9IkNsaWVudFByb3ZpZGVyIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVxdWVzdC5hdXRoLnJlY2lwaWVudCIgdmFsdWU9ImJlZm9yZS1jb250ZW50Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldC13c3MtcHJvdmlkZXItcmVzcG9uc2UtYXV0aC1yZWNpcGllbnQiPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LXdzcy1wcm92aWRlci1yZXNwb25zZS1hdXRoLXJlY2lwaWVudCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3NzLnByb3ZpZGVyLm5hbWUiIHZhbHVlPSJDbGllbnRQcm92aWRlciIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3BvbnNlLmF1dGgucmVjaXBpZW50IiB2YWx1ZT0iYWZ0ZXItY29udGVudCIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLQk8YW50Y2FsbCB0YXJnZXQ9ImJhY2t1cC1nbGFzc2Zpc2gtYWNjLnhtbCIvPgotCTxhbnRjYWxsIHRhcmdldD0iZW5hYmxlLXdzcy1hcHBjbGllbnQtbWVzc2FnZS1zZWN1cml0eS1wcm92aWRlciI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJiYWNrdXAtZ2xhc3NmaXNoLWFjYy54bWwiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImVuYWJsZS13c3MtYXBwY2xpZW50LW1lc3NhZ2Utc2VjdXJpdHktcHJvdmlkZXIiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indzcy5jbGllbnQucHJvdmlkZXIubmFtZSIgdmFsdWU9IkNsaWVudFByb3ZpZGVyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldC13c3MtYXBwY2xpZW50LXJlcXVlc3QtcmVjaXBpZW50Ij4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC13c3MtYXBwY2xpZW50LXJlcXVlc3QtcmVjaXBpZW50Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXF1ZXN0LmF1dGgucmVjaXBpZW50IiB2YWx1ZT0iYmVmb3JlLWNvbnRlbnQiLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0ic2V0LXdzcy1hcHBjbGllbnQtcmVzcG9uc2UtcmVjaXBpZW50Ij4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC13c3MtYXBwY2xpZW50LXJlc3BvbnNlLXJlY2lwaWVudCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzcG9uc2UuYXV0aC5yZWNpcGllbnQiIHZhbHVlPSJhZnRlci1jb250ZW50Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iIC8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iID4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldC13c3MtcHJvdmlkZXItcmVxdWVzdC1hdXRoLXJlY2lwaWVudCI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtd3NzLXByb3ZpZGVyLXJlcXVlc3QtYXV0aC1yZWNpcGllbnQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indzcy5wcm92aWRlci5uYW1lIiB2YWx1ZT0iU2VydmVyUHJvdmlkZXIiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXF1ZXN0LmF1dGgucmVjaXBpZW50IiB2YWx1ZT0iIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldC13c3MtcHJvdmlkZXItcmVzcG9uc2UtYXV0aC1yZWNpcGllbnQiPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LXdzcy1wcm92aWRlci1yZXNwb25zZS1hdXRoLXJlY2lwaWVudCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3NzLnByb3ZpZGVyLm5hbWUiIHZhbHVlPSJTZXJ2ZXJQcm92aWRlciIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3BvbnNlLmF1dGgucmVjaXBpZW50IiB2YWx1ZT0iIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldC13c3MtcHJvdmlkZXItcmVxdWVzdC1hdXRoLXJlY2lwaWVudCI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtd3NzLXByb3ZpZGVyLXJlcXVlc3QtYXV0aC1yZWNpcGllbnQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indzcy5wcm92aWRlci5uYW1lIiB2YWx1ZT0iQ2xpZW50UHJvdmlkZXIiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXF1ZXN0LmF1dGgucmVjaXBpZW50IiB2YWx1ZT0iIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldC13c3MtcHJvdmlkZXItcmVzcG9uc2UtYXV0aC1yZWNpcGllbnQiPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LXdzcy1wcm92aWRlci1yZXNwb25zZS1hdXRoLXJlY2lwaWVudCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3NzLnByb3ZpZGVyLm5hbWUiIHZhbHVlPSJDbGllbnRQcm92aWRlciIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3BvbnNlLmF1dGgucmVjaXBpZW50IiB2YWx1ZT0iIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRpc2FibGUtd3NzLW1lc3NhZ2Utc2VjdXJpdHktcHJvdmlkZXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRpc2FibGUtd3NzLWFwcGNsaWVudC1tZXNzYWdlLXNlY3VyaXR5LXByb3ZpZGVyIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRpc2FibGUtd3NzLW1lc3NhZ2Utc2VjdXJpdHktcHJvdmlkZXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRpc2FibGUtd3NzLWFwcGNsaWVudC1tZXNzYWdlLXNlY3VyaXR5LXByb3ZpZGVyIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c3MuY2xpZW50LnByb3ZpZGVyLm5hbWUiIHZhbHVlPSJDbGllbnRQcm92aWRlciIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bnNldC13c3MtYXBwY2xpZW50LXJlcXVlc3QtcmVjaXBpZW50Ij4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuc2V0LXdzcy1hcHBjbGllbnQtcmVxdWVzdC1yZWNpcGllbnQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlcXVlc3QuYXV0aC5yZWNpcGllbnQiIHZhbHVlPSJiZWZvcmUtY29udGVudCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bnNldC13c3MtYXBwY2xpZW50LXJlc3BvbnNlLXJlY2lwaWVudCI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldC13c3MtYXBwY2xpZW50LXJlc3BvbnNlLXJlY2lwaWVudCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzcG9uc2UuYXV0aC5yZWNpcGllbnQiIHZhbHVlPSJhZnRlci1jb250ZW50Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iIC8+CkBAIC0xNjEsNyArMTYxLDcgQEAKICAgICAgICAgPHJlY29yZCBuYW1lPSJzZWN1cml0eS13c3Mub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+IFVzYWdlOgorICAgIDxlY2hvPiBVc2FnZToKICAgICA9PT09PT09PSBUYXJnZXRzIGJ5IGV4ZWN1dGlvbiBncmFudWxhcml0eSA9PT09PT09PT0KIAogICAgIGFudCBjbGVhbiAoQ2xlYW5zIGFsbCB3cyB0ZXN0cykKQEAgLTE3OCwxMSArMTc4LDExIEBACiAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSB3cyB0ZXN0cykKIAogICAgID09PT09IFRhcmdldHMgYnkgdGVjaG5vbG95IGFuZCBleGVjdXRpb24gZ3JhbnVsYXJpdHkgPT09PT09Ci0gICAgTm90ZTogUnVuIHRoZSBjb21tYW5kIG9mIHRoZSBmb2xsb3dpbmcgdHlwZTogCisgICAgTm90ZTogUnVuIHRoZSBjb21tYW5kIG9mIHRoZSBmb2xsb3dpbmcgdHlwZToKIAogICAgICAgICAgICAgJSBhbnQgc2VydmxldHdzIC1Ed3MtdGFyZ2V0PWNsZWFuCiAKICAgICB0byBydW4gdGhlICdjbGVhbicgdGFyZ2V0IGZvciAnc2VydmxldHdzJyB0ZXN0cwotCTwvZWNobz4KKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3MvYnVpbGQucHJvcGVydGllcwppbmRleCA2MTdiNGZhLi43YWM0ODc4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id3MiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXRheGNhbCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdGF4Y2FsIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5zZWN1cml0eS53c3MuZGVmcHJvdmlkZXIuc2VydmxldC50YXhjYWwuY2xpZW50LlRheENhbENsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuc2VjdXJpdHkud3NzLmRlZnByb3ZpZGVyLnNlcnZsZXQudGF4Y2FsLmNsaWVudC5UYXhDYWxDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9IndzZGwtZmlsZSIgdmFsdWU9IndzZGwvVGF4Q2FsU2VydmxldFNlcnZpY2Uud3NkbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3MvYnVpbGQueG1sCmluZGV4IDhlYTExYzEuLjg0ZWNiMmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy9idWlsZC54bWwKQEAgLTMxLDEwICszMSwxMCBAQAogICAgICZ0ZXN0cHJvcGVydGllczsKICAgICAmY29tbW9uU2VjdXJpdHk7CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgCisgICAgPHRhcmdldCBuYW1lPSJhbGwiCiAgICAgZGVwZW5kcz0iY2xlYW4sIGJ1aWxkLCBzZXR1cCwgZGVwbG95LCBydW4sIHVuZGVwbG95LCB1bnNldHVwIi8+Ci0gICAgIAotICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QiIAorCisgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdCIKICAgICBkZXBlbmRzPSJjbGVhbiwgYnVpbGQsIGRlcGxveSwgcnVuLCB1bmRlcGxveSIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNTUsMTQgKzU1LDE0IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImdlbmVyYXRlLWFydGlmYWN0cyI+Ci0JPGVjaG8gbWVzc2FnZT0iIENsaWVudCBNYXBwaW5nIGZpbGUgOiAke2NsaWVudC1tYXBwaW5nLnhtbH0iLz4KKyAgICA8ZWNobyBtZXNzYWdlPSIgQ2xpZW50IE1hcHBpbmcgZmlsZSA6ICR7Y2xpZW50LW1hcHBpbmcueG1sfSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImltcG9ydC13c2RsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJtYXBwaW5nLmZpbGUiCiAgICAgICAgICAgICB2YWx1ZT0iJHtjbGllbnQtbWFwcGluZy54bWx9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29uZmlnLXdzZGwuZmlsZSIKICAgICAgICAgICAgIHZhbHVlPSJjb25maWcvY29uZmlnLWNsaWVudC54bWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxlY2hvIG1lc3NhZ2U9IldlYiBNYXBwaW5nIEZpbGUgOiAke3dlYi1tYXBwaW5nLnhtbH0iLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJXZWIgTWFwcGluZyBGaWxlIDogJHt3ZWItbWFwcGluZy54bWx9Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iaW1wb3J0LXdzZGwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmcuZmlsZSIKICAgICAgICAgICAgIHZhbHVlPSIke3dlYi1tYXBwaW5nLnhtbH0iLz4KQEAgLTEzNyw2NyArMTM3LDY3IEBACiAgICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iaW5pdC1jb21tb24sY29tcGlsZSI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ3cy1wYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICA8YW50Y2FsbCB0YXJnZXQ9IndzLXBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSJjb20vc3VuL3MxYXNkZXYvc2VjdXJpdHkvd3NzL2RlZnByb3ZpZGVyL3NlcnZsZXQvdGF4Y2FsL2NsaWVudC8qLmNsYXNzIiAvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIKICAgICAgICAgICAgICAgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIKICAgICAgICAgICAgICAgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KLQk8L2FudGNhbGw+Ci0JPCEtLWFudGNhbGwgdGFyZ2V0PSJ3cy13YXItY29tbW9uIi0tPgotCTxhbnRjYWxsIHRhcmdldD0id3MtcGFja2FnZS13YXItY29tbW9uIj4KKyAgICA8L2FudGNhbGw+CisgICAgPCEtLWFudGNhbGwgdGFyZ2V0PSJ3cy13YXItY29tbW9uIi0tPgorICAgIDxhbnRjYWxsIHRhcmdldD0id3MtcGFja2FnZS13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuZmlsZSIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSJjb20vc3VuL3MxYXNkZXYvc2VjdXJpdHkvd3NzL2RlZnByb3ZpZGVyL3NlcnZsZXQvdGF4Y2FsLyouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0ibWFwcGluZ2ZpbGUubmFtZSIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibWFwcGluZ2ZpbGUubmFtZSIKICAgICAgICAgICAgICAgdmFsdWU9IiR7d2ViLW1hcHBpbmcueG1sfSIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJtYXBwaW5nZmlsZS5sb2NhdGlvbiIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibWFwcGluZ2ZpbGUubG9jYXRpb24iCiAgICAgICAgICAgICAgIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYnNlcnZpY2VzLnhtbCIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2Vic2VydmljZXMueG1sIgogICAgICAgICAgICAgICB2YWx1ZT0iJHt3ZWItd2Vic2VydmljZXMueG1sfSIgLz4KLQk8L2FudGNhbGw+CisgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0JIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8cHJvcGVydHkgbmFtZT0iVk1BUkdTIiB2YWx1ZT0iLURqYXZheC5uZXQuc3NsLmtleVN0b3JlPSR7bXlrZXlzdG9yZS5kYi5maWxlfSAtRGphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZT0ke215dHJ1c3RzdG9yZS5kYi5maWxlfSAtRGphdmF4Lm5ldC5zc2wua2V5U3RvcmVQYXNzd29yZD0ke3NzbC5wYXNzd29yZH0gLURqYXZheC5uZXQuc3NsLnRydXN0U3RvcmVQYXNzd29yZD0ke3NzbC5wYXNzd29yZH0iLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9InN0YXRldGF4LWVuZHBvaW50LXVybCIgCisgICAgPHByb3BlcnR5IG5hbWU9IlZNQVJHUyIgdmFsdWU9Ii1EamF2YXgubmV0LnNzbC5rZXlTdG9yZT0ke215a2V5c3RvcmUuZGIuZmlsZX0gLURqYXZheC5uZXQuc3NsLnRydXN0U3RvcmU9JHtteXRydXN0c3RvcmUuZGIuZmlsZX0gLURqYXZheC5uZXQuc3NsLmtleVN0b3JlUGFzc3dvcmQ9JHtzc2wucGFzc3dvcmR9IC1EamF2YXgubmV0LnNzbC50cnVzdFN0b3JlUGFzc3dvcmQ9JHtzc2wucGFzc3dvcmR9Ii8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzdGF0ZXRheC1lbmRwb2ludC11cmwiCiAgICAgICAgICAgICB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vVGF4Q2FsV1NTZXJ2bGV0L3N0YXRldGF4c2VydmxldCIvPgotCTxlY2hvIG1lc3NhZ2U9IlN0YXRlIFRheCBFbmRwb2ludCBVUkwgPSAke3N0YXRldGF4LWVuZHBvaW50LXVybH0iLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9ImZlZHRheC1lbmRwb2ludC11cmwiIAorICAgIDxlY2hvIG1lc3NhZ2U9IlN0YXRlIFRheCBFbmRwb2ludCBVUkwgPSAke3N0YXRldGF4LWVuZHBvaW50LXVybH0iLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImZlZHRheC1lbmRwb2ludC11cmwiCiAgICAgICAgICAgICB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vVGF4Q2FsV1NTZXJ2bGV0L2ZlZHRheHNlcnZsZXQiLz4KLQk8ZWNobyBtZXNzYWdlPSJGZWQgVGF4IEVuZHBvaW50IFVSTCA9ICR7ZmVkdGF4LWVuZHBvaW50LXVybH0iLz4KLQk8ZWNobyBtZXNzYWdlPSJWTUFSR1M9ICR7Vk1BUkdTfSIvPgotICAgCTxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSI+Ci0gICAgICAJCTxlbnYga2V5PSJWTUFSR1MiIHZhbHVlPSIke1ZNQVJHU30iLz4KLSAgICAgICAgCTxhcmcgdmFsdWU9Ii1jbGllbnQiIC8+Ci0gICAgICAgIAk8YXJnIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KLSAgICAgICAgCTxhcmcgdmFsdWU9Ii10ZXh0YXV0aCIvPgotICAgICAgICAJPGFyZyB2YWx1ZT0iLXVzZXIiLz4KLSAgICAgICAgCTxhcmcgdmFsdWU9ImoyZWUiLz4KLSAgICAgICAJCTxhcmcgdmFsdWU9Ii1wYXNzd29yZCIvPgotICAgICAgICAJPGFyZyB2YWx1ZT0iajJlZSIvPgotICAgICAgICAJPGFyZyBsaW5lPSIteG1sICR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9nbGFzc2Zpc2gtYWNjLnhtbCIvPgotICAgICAgICAJPGFyZyBsaW5lPSIke3N0YXRldGF4LWVuZHBvaW50LXVybH0gJHtmZWR0YXgtZW5kcG9pbnQtdXJsfSIvPgorICAgIDxlY2hvIG1lc3NhZ2U9IkZlZCBUYXggRW5kcG9pbnQgVVJMID0gJHtmZWR0YXgtZW5kcG9pbnQtdXJsfSIvPgorICAgIDxlY2hvIG1lc3NhZ2U9IlZNQVJHUz0gJHtWTUFSR1N9Ii8+CisgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9Ij4KKyAgICAgICAgICAgICAgPGVudiBrZXk9IlZNQVJHUyIgdmFsdWU9IiR7Vk1BUkdTfSIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLWNsaWVudCIgLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLXRleHRhdXRoIi8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSItdXNlciIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iajJlZSIvPgorICAgICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLXBhc3N3b3JkIi8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSJqMmVlIi8+CisgICAgICAgICAgICA8YXJnIGxpbmU9Ii14bWwgJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sIi8+CisgICAgICAgICAgICA8YXJnIGxpbmU9IiR7c3RhdGV0YXgtZW5kcG9pbnQtdXJsfSAke2ZlZHRheC1lbmRwb2ludC11cmx9Ii8+CiAgICAgICA8L2V4ZWM+CiAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCi0gIDwhLS0gCi0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCisgIDwhLS0KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBVc2VyIERlZmluZWQgc3BlY2lmaWMgdGFyZ2V0cwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIC0tPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3MvY2xpZW50L1RheENhbENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3MvY2xpZW50L1RheENhbENsaWVudC5qYXZhCmluZGV4IGI3N2RkZTMuLmI1NWEwMzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL2NsaWVudC9UYXhDYWxDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy9jbGllbnQvVGF4Q2FsQ2xpZW50LmphdmEKQEAgLTI0LDk1ICsyNCw5NSBAQAogCiBwdWJsaWMgY2xhc3MgVGF4Q2FsQ2xpZW50IHsKIAotCXByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyBzdGF0ZVRheEVuZHBvaW50ID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZmVkVGF4RW5kcG9pbnQgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3VpdGUgPSAiU2VjOjpTZXJ2bGV0X0Jhc2VkX1dTU190ZXN0IEVuY3J5cHQgdGhlbiBTaWduIjsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdENhc2UgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIFRheENhbFNlcnZsZXRTZXJ2aWNlIHRheENhbFNlcnZpY2UgPSBudWxsOworICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBzdGF0ZVRheEVuZHBvaW50ID0gbnVsbDsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZmVkVGF4RW5kcG9pbnQgPSBudWxsOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3VpdGUgPSAiU2VjOjpTZXJ2bGV0X0Jhc2VkX1dTU190ZXN0IEVuY3J5cHQgdGhlbiBTaWduIjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdENhc2UgPSBudWxsOworICAgIHByaXZhdGUgc3RhdGljIFRheENhbFNlcnZsZXRTZXJ2aWNlIHRheENhbFNlcnZpY2UgPSBudWxsOwogCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogCi0JCWlmKGFyZ3NbMF0gPT0gbnVsbCB8fCBhcmdzWzFdID09IG51bGwpewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJUYXhDYWwgY2xpZW50OiBBcmd1bWVudCBtaXNzaW5nLiBQbGVhc2UgcHJvdmlkZSB0YXJnZXQiICsKLQkJCQkgImVuZHBvaW50IGFkZHJlc3MgYXMgYXJndW1lbnQiKTsKLQkJCVN5c3RlbS5leGl0KDEpOwotCQl9IGVsc2UgewotCQkJc3RhdGVUYXhFbmRwb2ludCA9IGFyZ3NbMF07Ci0JCQlmZWRUYXhFbmRwb2ludCA9IGFyZ3NbMV07Ci0JCX0KKyAgICAgICAgaWYoYXJnc1swXSA9PSBudWxsIHx8IGFyZ3NbMV0gPT0gbnVsbCl7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRheENhbCBjbGllbnQ6IEFyZ3VtZW50IG1pc3NpbmcuIFBsZWFzZSBwcm92aWRlIHRhcmdldCIgKworICAgICAgICAgICAgICAgICAiZW5kcG9pbnQgYWRkcmVzcyBhcyBhcmd1bWVudCIpOworICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdGF0ZVRheEVuZHBvaW50ID0gYXJnc1swXTsKKyAgICAgICAgICAgIGZlZFRheEVuZHBvaW50ID0gYXJnc1sxXTsKKyAgICAgICAgfQogCi0JCXN0YXQuYWRkRGVzY3JpcHRpb24odGVzdFN1aXRlKTsKLQkJdHJ5IHsgCi0JCQlUYXhDYWxDbGllbnQgY2xpZW50ID0gbmV3IFRheENhbENsaWVudCgpOwotCQkJQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCQkJdGF4Q2FsU2VydmljZSA9IChUYXhDYWxTZXJ2bGV0U2VydmljZSkKLQkJCQlpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9UYXhDYWxTZXJ2bGV0U2VydmljZSIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RTdWl0ZSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBUYXhDYWxDbGllbnQgY2xpZW50ID0gbmV3IFRheENhbENsaWVudCgpOworICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICAgICAgdGF4Q2FsU2VydmljZSA9IChUYXhDYWxTZXJ2bGV0U2VydmljZSkKKyAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9UYXhDYWxTZXJ2bGV0U2VydmljZSIpOwogCi0JCQljbGllbnQuY2FsbFN0YXRlVGF4U2VydmljZSgpOwotCQkJY2xpZW50LmNhbGxGZWRUYXhTZXJ2aWNlKCk7Ci0JCQlzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUsIHN0YXQuUEFTUyk7Ci0JCX1jYXRjaChFeGNlcHRpb24gZSl7Ci0JCQlzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUsIHN0YXQuRkFJTCk7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9CisgICAgICAgICAgICBjbGllbnQuY2FsbFN0YXRlVGF4U2VydmljZSgpOworICAgICAgICAgICAgY2xpZW50LmNhbGxGZWRUYXhTZXJ2aWNlKCk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUsIHN0YXQuUEFTUyk7CisgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUsIHN0YXQuRkFJTCk7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CiAKLQkJc3RhdC5wcmludFN1bW1hcnkodGVzdFN1aXRlKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdFN1aXRlKTsKICAgICB9Ci0gICAgCi0JcHVibGljIHZvaWQgY2FsbFN0YXRlVGF4U2VydmljZSgpIHsKLQkJZG91YmxlIGluY29tZSA9IDg1MDAwLjAwOwotCQlkb3VibGUgZGVkdWN0aW9ucyA9IDUwMDAuMDA7CiAKLQkJLy9TdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0KLQkJLy8JImh0dHA6Ly9sb2NhbGhvc3Q6MTAyNC90YXhjYWxjdWxhdG9yIjsKKyAgICBwdWJsaWMgdm9pZCBjYWxsU3RhdGVUYXhTZXJ2aWNlKCkgeworICAgICAgICBkb3VibGUgaW5jb21lID0gODUwMDAuMDA7CisgICAgICAgIGRvdWJsZSBkZWR1Y3Rpb25zID0gNTAwMC4wMDsKIAotCQl0cnkgeworICAgICAgICAvL1N0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQorICAgICAgICAvLyAgICAiaHR0cDovL2xvY2FsaG9zdDoxMDI0L3RheGNhbGN1bGF0b3IiOwogCi0JCQlTdGF0ZVRheElGIHRheENhbElGUG9ydCA9IHRheENhbFNlcnZpY2UuZ2V0U3RhdGVUYXhJRlBvcnQoKTsKKyAgICAgICAgdHJ5IHsKIAotCQkJKChTdHViKXRheENhbElGUG9ydCkuX3NldFByb3BlcnR5IChTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCi0JCQkJc3RhdGVUYXhFbmRwb2ludCk7CisgICAgICAgICAgICBTdGF0ZVRheElGIHRheENhbElGUG9ydCA9IHRheENhbFNlcnZpY2UuZ2V0U3RhdGVUYXhJRlBvcnQoKTsKIAotCQkJZG91YmxlIHN0YXRlVGF4ID0gdGF4Q2FsSUZQb3J0LmdldFN0YXRlVGF4KGluY29tZSwgZGVkdWN0aW9ucyk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlIHRheCBmcm9tIHNlcnZsZXQgYmFzZWQgVGF4Q2FsU2VydmljZSA6IiArIHN0YXRlVGF4KTsKKyAgICAgICAgICAgICgoU3R1Yil0YXhDYWxJRlBvcnQpLl9zZXRQcm9wZXJ0eSAoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAorICAgICAgICAgICAgICAgIHN0YXRlVGF4RW5kcG9pbnQpOwogCi0JCQlpZihzdGF0ZVRheCA9PSAyNDAwMC4wMCkKLQkJCQlzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIFN0YXRlVGF4UG9ydCIsIHN0YXQuUEFTUyk7Ci0JCQllbHNlCi0JCQkJc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBTdGF0ZVRheFBvcnQiLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgZG91YmxlIHN0YXRlVGF4ID0gdGF4Q2FsSUZQb3J0LmdldFN0YXRlVGF4KGluY29tZSwgZGVkdWN0aW9ucyk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlIHRheCBmcm9tIHNlcnZsZXQgYmFzZWQgVGF4Q2FsU2VydmljZSA6IiArIHN0YXRlVGF4KTsKIAotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGF4Q2FsRWpiV2Vic2VydmljZSBjbGllbnQgZmFpbGVkIik7Ci0JCQlzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIFN0YXRlVGF4UG9ydCIsIHN0YXQuRkFJTCk7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfSAKLQl9CisgICAgICAgICAgICBpZihzdGF0ZVRheCA9PSAyNDAwMC4wMCkKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIFN0YXRlVGF4UG9ydCIsIHN0YXQuUEFTUyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBTdGF0ZVRheFBvcnQiLCBzdGF0LkZBSUwpOwogCi0JcHVibGljIHZvaWQgY2FsbEZlZFRheFNlcnZpY2UoKSB7Ci0JCWRvdWJsZSBpbmNvbWUgPSA5NzAwMC4wMDsKLQkJZG91YmxlIGRlZHVjdGlvbnMgPSA3MDAwLjAwOwotCQl0cnkgewotCQkJLy9TdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0KLQkJCS8vImh0dHA6Ly9sb2NhbGhvc3Q6MTAyNC9GaW5kSW50ZXJlc3RTZXJ2bGV0L0ZpbmRJbnRlcmVzdCI7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUYXhDYWxFamJXZWJzZXJ2aWNlIGNsaWVudCBmYWlsZWQiKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgU3RhdGVUYXhQb3J0Iiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgfQogCi0JCQlGZWRUYXhJRiB0YXhDYWxJRlBvcnQgPSB0YXhDYWxTZXJ2aWNlLmdldEZlZFRheElGUG9ydCgpOwotCQkJKChTdHViKXRheENhbElGUG9ydCkuX3NldFByb3BlcnR5IChTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCi0JCQkJZmVkVGF4RW5kcG9pbnQpOworICAgIHB1YmxpYyB2b2lkIGNhbGxGZWRUYXhTZXJ2aWNlKCkgeworICAgICAgICBkb3VibGUgaW5jb21lID0gOTcwMDAuMDA7CisgICAgICAgIGRvdWJsZSBkZWR1Y3Rpb25zID0gNzAwMC4wMDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIC8vU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9CisgICAgICAgICAgICAvLyJodHRwOi8vbG9jYWxob3N0OjEwMjQvRmluZEludGVyZXN0U2VydmxldC9GaW5kSW50ZXJlc3QiOwogCi0JCQlkb3VibGUgZmVkVGF4ID0gdGF4Q2FsSUZQb3J0LmdldEZlZFRheChpbmNvbWUsIGRlZHVjdGlvbnMpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJGZWQgdGF4IGZyb20gU2VydmxldCBiYXNlZCBUYXhDYWxTZXJ2aWNlIDoiICsgZmVkVGF4KTsKKyAgICAgICAgICAgIEZlZFRheElGIHRheENhbElGUG9ydCA9IHRheENhbFNlcnZpY2UuZ2V0RmVkVGF4SUZQb3J0KCk7CisgICAgICAgICAgICAoKFN0dWIpdGF4Q2FsSUZQb3J0KS5fc2V0UHJvcGVydHkgKFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKKyAgICAgICAgICAgICAgICBmZWRUYXhFbmRwb2ludCk7CiAKLQkJCWlmKGZlZFRheCA9PSAxODAwMC4wMCkKLQkJCQlzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIEZlZFRheFBvcnQiLCBzdGF0LlBBU1MpOwotCQkJZWxzZQotCQkJCXN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgRmVkVGF4UG9ydCIsIHN0YXQuRkFJTCk7Ci0gICAgICAgICAgICAgICAgCi0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJUYXhDYWxTZXJ2bGV0V2ViU2VydmljZSBjbGllbnQgZmFpbGVkIik7Ci0JCQlzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIEZlZFRheFBvcnQiLCBzdGF0LkZBSUwpOwotCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0gCi0JfQorICAgICAgICAgICAgZG91YmxlIGZlZFRheCA9IHRheENhbElGUG9ydC5nZXRGZWRUYXgoaW5jb21lLCBkZWR1Y3Rpb25zKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmVkIHRheCBmcm9tIFNlcnZsZXQgYmFzZWQgVGF4Q2FsU2VydmljZSA6IiArIGZlZFRheCk7CisKKyAgICAgICAgICAgIGlmKGZlZFRheCA9PSAxODAwMC4wMCkKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIEZlZFRheFBvcnQiLCBzdGF0LlBBU1MpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgRmVkVGF4UG9ydCIsIHN0YXQuRkFJTCk7CisKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRheENhbFNlcnZsZXRXZWJTZXJ2aWNlIGNsaWVudCBmYWlsZWQiKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgRmVkVGF4UG9ydCIsIHN0YXQuRkFJTCk7CisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3MvY29uZmlnL2NvbmZpZy1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3MvY29uZmlnL2NvbmZpZy1jbGllbnQueG1sCmluZGV4IGQ1MmYwMmMuLmU5OTg1MDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL2NvbmZpZy9jb25maWctY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLWNsaWVudC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHdzZGwgCisgIDx3c2RsCiAgICAgICBsb2NhdGlvbj0id3NkbC9UYXhDYWxTZXJ2bGV0U2VydmljZS53c2RsIgogICAgICAgcGFja2FnZU5hbWU9ImNvbS5zdW4uczFhc2Rldi5zZWN1cml0eS53c3MuZGVmcHJvdmlkZXIuc2VydmxldC50YXhjYWwuY2xpZW50Ii8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLXNlaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLXNlaS54bWwKaW5kZXggM2UzOWI2Ny4uY2Y4MGUwZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3MvY29uZmlnL2NvbmZpZy1zZWkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL2NvbmZpZy9jb25maWctc2VpLnhtbApAQCAtMTgsMTYgKzE4LDE2IEBACiAtLT4KIAogPGNvbmZpZ3VyYXRpb24KLQl4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotCTxzZXJ2aWNlIG5hbWU9IlRheENhbFNlcnZsZXRTZXJ2aWNlIgotCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90YXgub3JnL3dzZGwiCi0JCXR5cGVOYW1lc3BhY2U9Imh0dHA6Ly90YXgub3JnL3R5cGVzIgotCQlwYWNrYWdlTmFtZT0iY29tLnN1bi5zMWFzZGV2LnNlY3VyaXR5Lndzcy5kZWZwcm92aWRlci5zZXJ2bGV0LnRheGNhbCI+Ci0JCTxpbnRlcmZhY2UgbmFtZT0iY29tLnN1bi5zMWFzZGV2LnNlY3VyaXR5Lndzcy5kZWZwcm92aWRlci5zZXJ2bGV0LnRheGNhbC5GZWRUYXhJRiIKLQkJCXNlcnZhbnROYW1lPSJjb20uc3VuLnMxYXNkZXYuc2VjdXJpdHkud3NzLmRlZnByb3ZpZGVyLnNlcnZsZXQudGF4Y2FsLkZlZFRheFNlcnZsZXQiLz4KLQkJPGludGVyZmFjZSBuYW1lPSJjb20uc3VuLnMxYXNkZXYuc2VjdXJpdHkud3NzLmRlZnByb3ZpZGVyLnNlcnZsZXQudGF4Y2FsLlN0YXRlVGF4SUYiCi0JCQlzZXJ2YW50TmFtZT0iY29tLnN1bi5zMWFzZGV2LnNlY3VyaXR5Lndzcy5kZWZwcm92aWRlci5zZXJ2bGV0LnRheGNhbC5TdGF0ZVRheFNlcnZsZXQiPgotCQk8L2ludGVyZmFjZT4KLQk8L3NlcnZpY2U+CisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KKyAgICA8c2VydmljZSBuYW1lPSJUYXhDYWxTZXJ2bGV0U2VydmljZSIKKyAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGF4Lm9yZy93c2RsIgorICAgICAgICB0eXBlTmFtZXNwYWNlPSJodHRwOi8vdGF4Lm9yZy90eXBlcyIKKyAgICAgICAgcGFja2FnZU5hbWU9ImNvbS5zdW4uczFhc2Rldi5zZWN1cml0eS53c3MuZGVmcHJvdmlkZXIuc2VydmxldC50YXhjYWwiPgorICAgICAgICA8aW50ZXJmYWNlIG5hbWU9ImNvbS5zdW4uczFhc2Rldi5zZWN1cml0eS53c3MuZGVmcHJvdmlkZXIuc2VydmxldC50YXhjYWwuRmVkVGF4SUYiCisgICAgICAgICAgICBzZXJ2YW50TmFtZT0iY29tLnN1bi5zMWFzZGV2LnNlY3VyaXR5Lndzcy5kZWZwcm92aWRlci5zZXJ2bGV0LnRheGNhbC5GZWRUYXhTZXJ2bGV0Ii8+CisgICAgICAgIDxpbnRlcmZhY2UgbmFtZT0iY29tLnN1bi5zMWFzZGV2LnNlY3VyaXR5Lndzcy5kZWZwcm92aWRlci5zZXJ2bGV0LnRheGNhbC5TdGF0ZVRheElGIgorICAgICAgICAgICAgc2VydmFudE5hbWU9ImNvbS5zdW4uczFhc2Rldi5zZWN1cml0eS53c3MuZGVmcHJvdmlkZXIuc2VydmxldC50YXhjYWwuU3RhdGVUYXhTZXJ2bGV0Ij4KKyAgICAgICAgPC9pbnRlcmZhY2U+CisgICAgPC9zZXJ2aWNlPgogPC9jb25maWd1cmF0aW9uPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLXdlYi54bWwKaW5kZXggOWUwNjcwNi4uNGIwMWU4YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3MvY29uZmlnL2NvbmZpZy13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL2NvbmZpZy9jb25maWctd2ViLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJ3c2RsL1RheENhbFNlcnZsZXRTZXJ2aWNlLndzZGwiCiAgICAgICBwYWNrYWdlTmFtZT0iY29tLnN1bi5zMWFzZGV2LnNlY3VyaXR5Lndzcy5kZWZwcm92aWRlci5zZXJ2bGV0LnRheGNhbCIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3Mvd2ViL0ZlZFRheElGLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy93ZWIvRmVkVGF4SUYuamF2YQppbmRleCBiYjhiNDhhLi4wMWU2ODIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy93ZWIvRmVkVGF4SUYuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy93ZWIvRmVkVGF4SUYuamF2YQpAQCAtMjIsNiArMjIsNiBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEZlZFRheElGIGV4dGVuZHMgUmVtb3RlewogCi0JcHVibGljIGRvdWJsZSBnZXRGZWRUYXgoZG91YmxlIGluY29tZSwgZG91YmxlIGRlZHVjdGlvbnMpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgcHVibGljIGRvdWJsZSBnZXRGZWRUYXgoZG91YmxlIGluY29tZSwgZG91YmxlIGRlZHVjdGlvbnMpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL3dlYi9GZWRUYXhTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy93ZWIvRmVkVGF4U2VydmxldC5qYXZhCmluZGV4IDYzMTk0NTguLjAyOWQwZWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL3dlYi9GZWRUYXhTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3Mvd2ViL0ZlZFRheFNlcnZsZXQuamF2YQpAQCAtMjEsMTUgKzIxLDE1IEBACiBpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKIGltcG9ydCBqYXZheC54bWwucnBjLkNhbGw7CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamF2YXgubmFtaW5nLio7CiBpbXBvcnQgamF2YXgueG1sLnJwYy5TZXJ2aWNlOwogaW1wb3J0IGphdmF4LnhtbC5ycGMuc2VydmVyLlNlcnZpY2VMaWZlY3ljbGU7CiBpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuU2luZ2xlVGhyZWFkTW9kZWw7CiAKLXB1YmxpYyBjbGFzcyBGZWRUYXhTZXJ2bGV0IGltcGxlbWVudHMgCi0JCQlTaW5nbGVUaHJlYWRNb2RlbCwgU2VydmljZUxpZmVjeWNsZSB7CitwdWJsaWMgY2xhc3MgRmVkVGF4U2VydmxldCBpbXBsZW1lbnRzCisgICAgICAgICAgICBTaW5nbGVUaHJlYWRNb2RlbCwgU2VydmljZUxpZmVjeWNsZSB7CiAKICAgICBwdWJsaWMgRmVkVGF4U2VydmxldCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGZWRUYXhTZXJ2bGV0KCkgaW5zdGFudGlhdGVkIik7CkBAIC00NCw3ICs0NCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIGRvdWJsZSBnZXRGZWRUYXgoZG91YmxlIGluY29tZSwgZG91YmxlIGRlZHVjdGlvbnMpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImdldFN0YXRlVGF4IGludm9rZWQgZnJvbSBzZXJ2bGV0IGVuZHBvaW50Iik7Ci0JIHJldHVybiAoKGluY29tZSAtICBkZWR1Y3Rpb25zKSAqIDAuMik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXRTdGF0ZVRheCBpbnZva2VkIGZyb20gc2VydmxldCBlbmRwb2ludCIpOworICAgICByZXR1cm4gKChpbmNvbWUgLSAgZGVkdWN0aW9ucykgKiAwLjIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL3dlYi9TdGF0ZVRheElGLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy93ZWIvU3RhdGVUYXhJRi5qYXZhCmluZGV4IDNhNzVkMjcuLmNjNGYwN2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL3dlYi9TdGF0ZVRheElGLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3Mvd2ViL1N0YXRlVGF4SUYuamF2YQpAQCAtMjIsNiArMjIsNiBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIFN0YXRlVGF4SUYgZXh0ZW5kcyBSZW1vdGV7CiAKLQlwdWJsaWMgZG91YmxlIGdldFN0YXRlVGF4KGRvdWJsZSBpbmNvbWUsIGRvdWJsZSBkZWR1Y3Rpb25zKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHB1YmxpYyBkb3VibGUgZ2V0U3RhdGVUYXgoZG91YmxlIGluY29tZSwgZG91YmxlIGRlZHVjdGlvbnMpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL3dlYi9TdGF0ZVRheFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL3dlYi9TdGF0ZVRheFNlcnZsZXQuamF2YQppbmRleCA3YTUxYjJiLi45MzhiN2U3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy93ZWIvU3RhdGVUYXhTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3Mvd2ViL1N0YXRlVGF4U2VydmxldC5qYXZhCkBAIC0yMSwxNSArMjEsMTUgQEAKIGltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwogaW1wb3J0IGphdmF4LnhtbC5ycGMuQ2FsbDsKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYXZheC5uYW1pbmcuKjsKIGltcG9ydCBqYXZheC54bWwucnBjLlNlcnZpY2U7CiBpbXBvcnQgamF2YXgueG1sLnJwYy5zZXJ2ZXIuU2VydmljZUxpZmVjeWNsZTsKIGltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwogaW1wb3J0IGpha2FydGEuc2VydmxldC5TaW5nbGVUaHJlYWRNb2RlbDsKIAotcHVibGljIGNsYXNzIFN0YXRlVGF4U2VydmxldCBpbXBsZW1lbnRzIAotCQkJU2luZ2xlVGhyZWFkTW9kZWwsIFNlcnZpY2VMaWZlY3ljbGUgeworcHVibGljIGNsYXNzIFN0YXRlVGF4U2VydmxldCBpbXBsZW1lbnRzCisgICAgICAgICAgICBTaW5nbGVUaHJlYWRNb2RlbCwgU2VydmljZUxpZmVjeWNsZSB7CiAKICAgICBwdWJsaWMgU3RhdGVUYXhTZXJ2bGV0KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlVGF4U2VydmxldCgpIGluc3RhbnRpYXRlZCIpOwpAQCAtNDQsNyArNDQsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBkb3VibGUgZ2V0U3RhdGVUYXgoZG91YmxlIGluY29tZSwgZG91YmxlIGRlZHVjdGlvbnMpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImdldFN0YXRlVGF4IGludm9rZWQgZnJvbSBzZXJ2bGV0IGVuZHBvaW50Iik7Ci0JIHJldHVybiAoKGluY29tZSAtICBkZWR1Y3Rpb25zKSAqIDAuMyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXRTdGF0ZVRheCBpbnZva2VkIGZyb20gc2VydmxldCBlbmRwb2ludCIpOworICAgICByZXR1cm4gKChpbmNvbWUgLSAgZGVkdWN0aW9ucykgKiAwLjMpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9nYXJ0bmVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZ2FydG5lci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGJjMTc2MGMuLjlkODAyOTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9nYXJ0bmVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2dhcnRuZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHktd3NzLWdhcnRuZXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZ2FydG5lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZ2FydG5lci9idWlsZC54bWwKaW5kZXggMzhhODk2ZC4uMWRkOGViMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2dhcnRuZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9nYXJ0bmVyL2J1aWxkLnhtbApAQCAtOTUsNyArOTUsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gCisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVqYmphci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2VqYndzIi8+CkBAIC0xMDMsNyArMTAzLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9ImNvbS9zdW4vKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLSAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4td2ViLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vc2VydmxldHdzL1dFQi1JTkYvc3VuLXdlYi54bWwiIGZhaWxvbmVycm9yPSJ0cnVlIi8+IAorICAgICAgICA8Y29weSBmaWxlPSIke3N1bi13ZWIueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9zZXJ2bGV0d3MvV0VCLUlORi9zdW4td2ViLnhtbCIgZmFpbG9uZXJyb3I9InRydWUiLz4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3NlcnZsZXR3cyIvPgogICAgICAgICA8L2phcj4KQEAgLTEyMywxOSArMTIzLDE5IEBACiAgICAgICAgICAgICA8L21ldGFpbmY+CiAgICAgICAgIDwvamFyPgogCi0gICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICAgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4gCisgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotCSAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci0JICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgorICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0iIGluY2x1ZGVzPSJsaWIvcmVwb3J0ZXIuamFyIi8+Ci0gICAgICAgIDwvamFyPiAgICAgICAKKyAgICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTQ5LDggKzE0OSw4IEBACiAgICAgICAgICAgICA8ZW52IGtleT0iVk1BUkdTIiB2YWx1ZT0iJHtWTUFSR1N9Ii8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii1jbGllbnQiIC8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIvPgotICAgICAgICAgICAgPGFyZyBsaW5lPSIke2h0dHAuaG9zdH0iLz4gICAKLSAgICAgICAgICAgIDxhcmcgbGluZT0iJHtodHRwLnBvcnR9Ii8+ICAgCisgICAgICAgICAgICA8YXJnIGxpbmU9IiR7aHR0cC5ob3N0fSIvPgorICAgICAgICAgICAgPGFyZyBsaW5lPSIke2h0dHAucG9ydH0iLz4KICAgICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZ2FydG5lci9jbGllbnQvUGluZ0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2dhcnRuZXIvY2xpZW50L1BpbmdDbGllbnQuamF2YQppbmRleCBhOGJiNGUxLi5iMzMxZTg1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZ2FydG5lci9jbGllbnQvUGluZ0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9nYXJ0bmVyL2NsaWVudC9QaW5nQ2xpZW50LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKIAogICAgICAgICAgICAgKChCaW5kaW5nUHJvdmlkZXIpcGluZ0VqYlBvcnQpLmdldFJlcXVlc3RDb250ZXh0KCkucHV0KAogICAgICAgICAgICAgICAgIEJpbmRpbmdQcm92aWRlci5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAotICAgICAgICAgICAgICAgICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgCisgICAgICAgICAgICAgICAgImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKwogICAgICAgICAgICAgICAgICIvUGluZ0VqYlNlcnZpY2UvUGluZ0VqYj9XU0RMIik7CiAKICAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBwaW5nRWpiUG9ydC5waW5nKCJIZWxsbyIpOwpAQCAtNjAsNyArNjAsNyBAQAogCiAgICAgICAgICAgICAoKEJpbmRpbmdQcm92aWRlcilwaW5nU2VydmxldFBvcnQpLmdldFJlcXVlc3RDb250ZXh0KCkucHV0KAogICAgICAgICAgICAgICAgIEJpbmRpbmdQcm92aWRlci5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAotICAgICAgICAgICAgICAgICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgCisgICAgICAgICAgICAgICAgImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKwogICAgICAgICAgICAgICAgICIvc2VjdXJpdHktd3NzLWdhcnRuZXItd2ViL1BpbmdTZXJ2bGV0U2VydmljZT9XU0RMIik7CiAKICAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBwaW5nU2VydmxldFBvcnQucGluZygiSGVsbG8iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9nYXJ0bmVyL2N1c3RvbS1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2dhcnRuZXIvY3VzdG9tLWNsaWVudC54bWwKaW5kZXggNjkzZTdmYy4uNGYwNzUxMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2dhcnRuZXIvY3VzdG9tLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2dhcnRuZXIvY3VzdG9tLWNsaWVudC54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIAogLS0+CiAKLTxiaW5kaW5ncyAKKzxiaW5kaW5ncwogICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgICAgeG1sbnM6amF4Yj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4YiIKICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9nYXJ0bmVyL2N1c3RvbS1jbGllbnQyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9nYXJ0bmVyL2N1c3RvbS1jbGllbnQyLnhtbAppbmRleCBhNWZjZGU5Li5jNGQzZDA5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZ2FydG5lci9jdXN0b20tY2xpZW50Mi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2dhcnRuZXIvY3VzdG9tLWNsaWVudDIueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAKIC0tPgogCi08YmluZGluZ3MgCis8YmluZGluZ3MKICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogICAgIHhtbG5zOmpheGI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIiCiAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZ2FydG5lci9kZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2dhcnRuZXIvZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbAppbmRleCAxNGM3MGMzLi43ZDE2ZThlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZ2FydG5lci9kZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9nYXJ0bmVyL2Rlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgICAgICAgIDxtZXNzYWdlLz4KICAgICAgICAgICAgIDxyZXF1ZXN0LXByb3RlY3Rpb24KICAgICAgICAgICAgICAgYXV0aC1zb3VyY2U9ImNvbnRlbnQiIGF1dGgtcmVjaXBpZW50PSJhZnRlci1jb250ZW50Ii8+Ci0gICAgICAgICAgICA8cmVzcG9uc2UtcHJvdGVjdGlvbiAKKyAgICAgICAgICAgIDxyZXNwb25zZS1wcm90ZWN0aW9uCiAgICAgICAgICAgICAgIGF1dGgtc291cmNlPSJjb250ZW50IiBhdXRoLXJlY2lwaWVudD0iYWZ0ZXItY29udGVudCIvPgogICAgICAgICAgIDwvbWVzc2FnZS1zZWN1cml0eT4KICAgICAgICAgPC9tZXNzYWdlLXNlY3VyaXR5LWJpbmRpbmc+CkBAIC01NSw3ICs1NSw3IEBACiAgICAgICAgICAgICA8bWVzc2FnZS8+CiAgICAgICAgICAgICA8cmVxdWVzdC1wcm90ZWN0aW9uCiAgICAgICAgICAgICAgIGF1dGgtc291cmNlPSJjb250ZW50IiBhdXRoLXJlY2lwaWVudD0iYWZ0ZXItY29udGVudCIvPgotICAgICAgICAgICAgPHJlc3BvbnNlLXByb3RlY3Rpb24gCisgICAgICAgICAgICA8cmVzcG9uc2UtcHJvdGVjdGlvbgogICAgICAgICAgICAgICBhdXRoLXNvdXJjZT0iY29udGVudCIgYXV0aC1yZWNpcGllbnQ9ImFmdGVyLWNvbnRlbnQiLz4KICAgICAgICAgICA8L21lc3NhZ2Utc2VjdXJpdHk+CiAgICAgICAgIDwvbWVzc2FnZS1zZWN1cml0eS1iaW5kaW5nPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvcGVybWV0aG9kL2J1aWxkLnhtbAppbmRleCA2OGRiMDBkLi42MmI1MTgyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvcGVybWV0aG9kL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvcGVybWV0aG9kL2J1aWxkLnhtbApAQCAtMzUsNTYgKzM1LDU2IEBACiAKIDwhLS0gPT09PT09PT0gVGFyZ2V0cyBieSBleGVjdXRpb24gZ3JhbnVsYXJpdHkgPT09PT09PT09PSAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImFsbCI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53c3RhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzLXRhcmdldCIgdmFsdWU9ImFsbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndzdGFyZ2V0cyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3MtdGFyZ2V0IiB2YWx1ZT0icnVuLXRlc3QiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53c3RhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzLXRhcmdldCIgdmFsdWU9ImNsZWFuIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud3N0YXJnZXRzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3cy10YXJnZXQiIHZhbHVlPSJidWlsZCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53c3RhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzLXRhcmdldCIgdmFsdWU9ImRlcGxveSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndzdGFyZ2V0cyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3MtdGFyZ2V0IiB2YWx1ZT0idW5kZXBsb3kiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud3N0YXJnZXRzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3cy10YXJnZXQiIHZhbHVlPSJydW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPCEtLSBleHBvcnRzIGNlcnRkYiBzdHVmZiBhbmQgaW1wb3J0cyBpbnRvIGtleXN0b3JlIC0tPgotCTxhbnRjYWxsIHRhcmdldD0icHJlcGFyZS1zdG9yZS1uaWNrbmFtZS1jb21tb24iPgorICAgIDwhLS0gZXhwb3J0cyBjZXJ0ZGIgc3R1ZmYgYW5kIGltcG9ydHMgaW50byBrZXlzdG9yZSAtLT4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InByZXBhcmUtc3RvcmUtbmlja25hbWUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjZXJ0Lm5pY2tuYW1lIiB2YWx1ZT0iczFhcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iID4KICAgICA8L3RhcmdldD4KIApAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgIDxyZWNvcmQgbmFtZT0ic2VjdXJpdHktd3NzLm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPiBVc2FnZToKKyAgICA8ZWNobz4gVXNhZ2U6CiAgICAgPT09PT09PT0gVGFyZ2V0cyBieSBleGVjdXRpb24gZ3JhbnVsYXJpdHkgPT09PT09PT09CiAKICAgICBhbnQgY2xlYW4gKENsZWFucyBhbGwgd3MgdGVzdHMpCkBAIC0xMTgsMTEgKzExOCwxMSBAQAogICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgd3MgdGVzdHMpCiAKICAgICA9PT09PSBUYXJnZXRzIGJ5IHRlY2hub2xveSBhbmQgZXhlY3V0aW9uIGdyYW51bGFyaXR5ID09PT09PQotICAgIE5vdGU6IFJ1biB0aGUgY29tbWFuZCBvZiB0aGUgZm9sbG93aW5nIHR5cGU6IAorICAgIE5vdGU6IFJ1biB0aGUgY29tbWFuZCBvZiB0aGUgZm9sbG93aW5nIHR5cGU6CiAKICAgICAgICAgICAgICUgYW50IHNlcnZsZXR3cyAtRHdzLXRhcmdldD1jbGVhbgogCiAgICAgdG8gcnVuIHRoZSAnY2xlYW4nIHRhcmdldCBmb3IgJ3NlcnZsZXR3cycgdGVzdHMKLQk8L2VjaG8+CisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9zZXJ2bGV0d3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldHdzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDc5YjM2Yi4uZTA3ODNhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9zZXJ2bGV0d3MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvcGVybWV0aG9kL3NlcnZsZXR3cy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5LXdzcy1wZXJtZXRob2Qtc2VydmxldCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5zZWN1cml0eS53c3MucGVybWV0aG9kLnNlcnZsZXQuY2xpZW50LkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuc2VjdXJpdHkud3NzLnBlcm1ldGhvZC5zZXJ2bGV0LmNsaWVudC5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9IndzZGwtZmlsZSIgdmFsdWU9IndzZGwvSGVsbG9TZXJ2bGV0U2VydmljZS53c2RsIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvcGVybWV0aG9kL3NlcnZsZXR3cy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvcGVybWV0aG9kL3NlcnZsZXR3cy9idWlsZC54bWwKaW5kZXggMWE5YmU4OS4uNmZkMDE5MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9zZXJ2bGV0d3MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldHdzL2J1aWxkLnhtbApAQCAtMzEsMTAgKzMxLDEwIEBACiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwogICAgICZjb21tb25TZWN1cml0eTsKIAotICAgIDx0YXJnZXQgbmFtZT0iYWxsIiAKKyAgICA8dGFyZ2V0IG5hbWU9ImFsbCIKICAgICBkZXBlbmRzPSJjbGVhbiwgYnVpbGQsIHNldHVwLCBkZXBsb3ksIHJ1biwgdW5kZXBsb3ksIHVuc2V0dXAiLz4KIAotICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QiIAorICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QiCiAgICAgZGVwZW5kcz0iY2xlYW4sIGJ1aWxkLCBkZXBsb3ksIHJ1biwgdW5kZXBsb3kiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTY1LDE0ICs2NSwxNCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJnZW5lcmF0ZS1hcnRpZmFjdHMiPgotCTxlY2hvIG1lc3NhZ2U9IiBDbGllbnQgTWFwcGluZyBmaWxlIDogJHtjbGllbnQtbWFwcGluZy54bWx9Ii8+CisgICAgPGVjaG8gbWVzc2FnZT0iIENsaWVudCBNYXBwaW5nIGZpbGUgOiAke2NsaWVudC1tYXBwaW5nLnhtbH0iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJpbXBvcnQtd3NkbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibWFwcGluZy5maWxlIgogICAgICAgICAgICAgdmFsdWU9IiR7Y2xpZW50LW1hcHBpbmcueG1sfSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbmZpZy13c2RsLmZpbGUiCiAgICAgICAgICAgICB2YWx1ZT0iY29uZmlnL2NvbmZpZy1jbGllbnQueG1sIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8ZWNobyBtZXNzYWdlPSJXZWIgTWFwcGluZyBGaWxlIDogJHt3ZWItbWFwcGluZy54bWx9Ii8+CisgICAgPGVjaG8gbWVzc2FnZT0iV2ViIE1hcHBpbmcgRmlsZSA6ICR7d2ViLW1hcHBpbmcueG1sfSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImltcG9ydC13c2RsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJtYXBwaW5nLmZpbGUiCiAgICAgICAgICAgICB2YWx1ZT0iJHt3ZWItbWFwcGluZy54bWx9Ii8+CkBAIC0xNTMsNjMgKzE1Myw2MyBAQAogICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImluaXQtY29tbW9uLGNvbXBpbGUiPgotCTxhbnRjYWxsIHRhcmdldD0id3MtcGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgPGFudGNhbGwgdGFyZ2V0PSJ3cy1wYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iY29tL3N1bi9zMWFzZGV2L3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldC9jbGllbnQvKi5jbGFzcyIgLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiCiAgICAgICAgICAgICAgIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+Ci0JPC9hbnRjYWxsPgotCTwhLS1hbnRjYWxsIHRhcmdldD0id3Mtd2FyLWNvbW1vbiItLT4KLQk8YW50Y2FsbCB0YXJnZXQ9IndzLXBhY2thZ2Utd2FyLWNvbW1vbiI+CisgICAgPC9hbnRjYWxsPgorICAgIDwhLS1hbnRjYWxsIHRhcmdldD0id3Mtd2FyLWNvbW1vbiItLT4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9IndzLXBhY2thZ2Utd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmZpbGUiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iY29tL3N1bi9zMWFzZGV2L3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldC8qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmdmaWxlLm5hbWUiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmdmaWxlLm5hbWUiCiAgICAgICAgICAgICAgIHZhbHVlPSIke3dlYi1tYXBwaW5nLnhtbH0iIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0ibWFwcGluZ2ZpbGUubG9jYXRpb24iIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmdmaWxlLmxvY2F0aW9uIgogICAgICAgICAgICAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJzZXJ2aWNlcy54bWwiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYnNlcnZpY2VzLnhtbCIKICAgICAgICAgICAgICAgdmFsdWU9IiR7d2ViLXdlYnNlcnZpY2VzLnhtbH0iIC8+Ci0JPC9hbnRjYWxsPgorICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotCSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPHByb3BlcnR5IG5hbWU9IlZNQVJHUyIgdmFsdWU9Ii1EamF2YXgubmV0LnNzbC5rZXlTdG9yZT0ke215a2V5c3RvcmUuZGIuZmlsZX0gLURqYXZheC5uZXQuc3NsLnRydXN0U3RvcmU9JHtteXRydXN0c3RvcmUuZGIuZmlsZX0gLURqYXZheC5uZXQuc3NsLmtleVN0b3JlUGFzc3dvcmQ9JHtzc2wucGFzc3dvcmR9IC1EamF2YXgubmV0LnNzbC50cnVzdFN0b3JlUGFzc3dvcmQ9JHtzc2wucGFzc3dvcmR9Ii8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoZWxsby1lbmRwb2ludC11cmwiIAorICAgIDxwcm9wZXJ0eSBuYW1lPSJWTUFSR1MiIHZhbHVlPSItRGphdmF4Lm5ldC5zc2wua2V5U3RvcmU9JHtteWtleXN0b3JlLmRiLmZpbGV9IC1EamF2YXgubmV0LnNzbC50cnVzdFN0b3JlPSR7bXl0cnVzdHN0b3JlLmRiLmZpbGV9IC1EamF2YXgubmV0LnNzbC5rZXlTdG9yZVBhc3N3b3JkPSR7c3NsLnBhc3N3b3JkfSAtRGphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZVBhc3N3b3JkPSR7c3NsLnBhc3N3b3JkfSIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGVsbG8tZW5kcG9pbnQtdXJsIgogICAgICAgICAgICAgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9LyR7YXBwbmFtZX0vaGVsbG9zZXJ2bGV0Ii8+Ci0JPGVjaG8gbWVzc2FnZT0iVk1BUkdTPSAke1ZNQVJHU30iLz4KLSAgIAk8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iPgotICAgICAgCQk8ZW52IGtleT0iVk1BUkdTIiB2YWx1ZT0iJHtWTUFSR1N9Ii8+Ci0gICAgICAgIAk8YXJnIHZhbHVlPSItY2xpZW50IiAvPgotICAgICAgICAJPGFyZyB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+Ci0gICAgICAgIAk8YXJnIHZhbHVlPSItdGV4dGF1dGgiLz4KLSAgICAgICAgCTxhcmcgdmFsdWU9Ii11c2VyIi8+Ci0gICAgICAgIAk8YXJnIHZhbHVlPSJqMmVlIi8+Ci0gICAgICAgCQk8YXJnIHZhbHVlPSItcGFzc3dvcmQiLz4KLSAgICAgICAgCTxhcmcgdmFsdWU9ImoyZWUiLz4KLSAgICAgICAgCTxhcmcgbGluZT0iLXhtbCAke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwiLz4KLSAgICAgICAgCTxhcmcgbGluZT0iJHtoZWxsby1lbmRwb2ludC11cmx9Ii8+CisgICAgPGVjaG8gbWVzc2FnZT0iVk1BUkdTPSAke1ZNQVJHU30iLz4KKyAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iPgorICAgICAgICAgICAgICA8ZW52IGtleT0iVk1BUkdTIiB2YWx1ZT0iJHtWTUFSR1N9Ii8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSItY2xpZW50IiAvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSItdGV4dGF1dGgiLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii11c2VyIi8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSJqMmVlIi8+CisgICAgICAgICAgICAgICA8YXJnIHZhbHVlPSItcGFzc3dvcmQiLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9ImoyZWUiLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iLXhtbCAke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwiLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iJHtoZWxsby1lbmRwb2ludC11cmx9Ii8+CiAgICAgICA8L2V4ZWM+CiAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCi0gIDwhLS0gCi0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCisgIDwhLS0KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBVc2VyIERlZmluZWQgc3BlY2lmaWMgdGFyZ2V0cwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIC0tPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9zZXJ2bGV0d3MvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9zZXJ2bGV0d3MvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDU4ZDVjY2IuLjQ1OTIyNzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldHdzL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvcGVybWV0aG9kL3NlcnZsZXR3cy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTM3LDkgKzM3LDkgQEAKICAgICAgICAgfQogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24odGVzdFN1aXRlKTsKLSAgICAgICAgCisKICAgICAgICAgSGVsbG9JRiBoZWxsb0lGUG9ydCA9IG51bGw7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgSGVsbG9TZXJ2bGV0U2VydmljZSBoZWxsb1NlcnZpY2UgPSAoSGVsbG9TZXJ2bGV0U2VydmljZSkKICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9IZWxsb1NlcnZsZXRTZXJ2aWNlIik7CkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHNheUhlbGxvIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIHNlbmRTZWNyZXQiKTsKICAgICAgICAgICAgIGludCBjb2RlID0gaGVsbG9JRlBvcnQuc2VuZFNlY3JldCgiSXQgaXMgYSBzZWNyZXQiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldHdzL2NvbmZpZy9jb25maWctY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldHdzL2NvbmZpZy9jb25maWctY2xpZW50LnhtbAppbmRleCAyZjA1MWQ4Li43MTE4Y2VlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvcGVybWV0aG9kL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9zZXJ2bGV0d3MvY29uZmlnL2NvbmZpZy1jbGllbnQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249IndzZGwvSGVsbG9TZXJ2bGV0U2VydmljZS53c2RsIgogICAgICAgcGFja2FnZU5hbWU9ImNvbS5zdW4uczFhc2Rldi5zZWN1cml0eS53c3MucGVybWV0aG9kLnNlcnZsZXQuY2xpZW50Ii8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvcGVybWV0aG9kL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLXNlaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvcGVybWV0aG9kL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLXNlaS54bWwKaW5kZXggZWI2OWI3ZC4uZDhjYWM0NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9zZXJ2bGV0d3MvY29uZmlnL2NvbmZpZy1zZWkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldHdzL2NvbmZpZy9jb25maWctc2VpLnhtbApAQCAtMTgsMTQgKzE4LDE0IEBACiAtLT4KIAogPGNvbmZpZ3VyYXRpb24KLQl4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotCTxzZXJ2aWNlIG5hbWU9IkhlbGxvU2VydmxldFNlcnZpY2UiCi0JCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2hlbGxvLm9yZy93c2RsIgotCQl0eXBlTmFtZXNwYWNlPSJodHRwOi8vaGVsbG8ub3JnL3R5cGVzIgotCQlwYWNrYWdlTmFtZT0iY29tLnN1bi5zMWFzZGV2LnNlY3VyaXR5Lndzcy5wZXJtZXRob2Quc2VydmxldCI+Ci0JCTxpbnRlcmZhY2UgbmFtZT0iY29tLnN1bi5zMWFzZGV2LnNlY3VyaXR5Lndzcy5wZXJtZXRob2Quc2VydmxldC5IZWxsb0lGIgotCQkJc2VydmFudE5hbWU9ImNvbS5zdW4uczFhc2Rldi5zZWN1cml0eS53c3MucGVybWV0aG9kLnNlcnZsZXQuSGVsbG9TZXJ2bGV0Ii8+Ci0JCTwvaW50ZXJmYWNlPgotCTwvc2VydmljZT4KKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgorICAgIDxzZXJ2aWNlIG5hbWU9IkhlbGxvU2VydmxldFNlcnZpY2UiCisgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2hlbGxvLm9yZy93c2RsIgorICAgICAgICB0eXBlTmFtZXNwYWNlPSJodHRwOi8vaGVsbG8ub3JnL3R5cGVzIgorICAgICAgICBwYWNrYWdlTmFtZT0iY29tLnN1bi5zMWFzZGV2LnNlY3VyaXR5Lndzcy5wZXJtZXRob2Quc2VydmxldCI+CisgICAgICAgIDxpbnRlcmZhY2UgbmFtZT0iY29tLnN1bi5zMWFzZGV2LnNlY3VyaXR5Lndzcy5wZXJtZXRob2Quc2VydmxldC5IZWxsb0lGIgorICAgICAgICAgICAgc2VydmFudE5hbWU9ImNvbS5zdW4uczFhc2Rldi5zZWN1cml0eS53c3MucGVybWV0aG9kLnNlcnZsZXQuSGVsbG9TZXJ2bGV0Ii8+CisgICAgICAgIDwvaW50ZXJmYWNlPgorICAgIDwvc2VydmljZT4KIDwvY29uZmlndXJhdGlvbj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9zZXJ2bGV0d3MvY29uZmlnL2NvbmZpZy13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9zZXJ2bGV0d3MvY29uZmlnL2NvbmZpZy13ZWIueG1sCmluZGV4IDRlYjUyMGYuLmQ4YTc1MWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldHdzL2NvbmZpZy9jb25maWctd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvcGVybWV0aG9kL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLXdlYi54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHdzZGwgCisgIDx3c2RsCiAgICAgICBsb2NhdGlvbj0id3NkbC9IZWxsb1NlcnZsZXRTZXJ2aWNlLndzZGwiCiAgICAgICBwYWNrYWdlTmFtZT0iY29tLnN1bi5zMWFzZGV2LnNlY3VyaXR5Lndzcy5wZXJtZXRob2Quc2VydmxldCIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9zZXJ2bGV0d3MvZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldHdzL2Rlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwKaW5kZXggZTViNDljMi4uNjMwZTRlNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9zZXJ2bGV0d3MvZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvcGVybWV0aG9kL3NlcnZsZXR3cy9kZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC0zNSwyNCArMzUsMjQgQEAKICAgICAgICAgICAgIDxyZXF1ZXN0LXByb3RlY3Rpb24vPgogICAgICAgICAgICAgPHJlc3BvbnNlLXByb3RlY3Rpb24vPgogICAgICAgICAgIDwvbWVzc2FnZS1zZWN1cml0eT4KLQkgIDxtZXNzYWdlLXNlY3VyaXR5PgorICAgICAgPG1lc3NhZ2Utc2VjdXJpdHk+CiAgICAgICAgICAgICA8bWVzc2FnZT4KICAgICAgICAgICAgICAgPG9wZXJhdGlvbi1uYW1lPnNlbmRTZWNyZXQ8L29wZXJhdGlvbi1uYW1lPgogICAgICAgICAgICAgPC9tZXNzYWdlPgotCSAgICA8cmVxdWVzdC1wcm90ZWN0aW9uCisgICAgICAgIDxyZXF1ZXN0LXByb3RlY3Rpb24KICAgICAgICAgICAgICAgYXV0aC1zb3VyY2U9ImNvbnRlbnQiLz4KLQkgICAgPHJlc3BvbnNlLXByb3RlY3Rpb24KKyAgICAgICAgPHJlc3BvbnNlLXByb3RlY3Rpb24KICAgICAgICAgICAgICAgYXV0aC1zb3VyY2U9ImNvbnRlbnQiLz4KLQkgIDwvbWVzc2FnZS1zZWN1cml0eT4KLQkgIDxtZXNzYWdlLXNlY3VyaXR5PgorICAgICAgPC9tZXNzYWdlLXNlY3VyaXR5PgorICAgICAgPG1lc3NhZ2Utc2VjdXJpdHk+CiAgICAgICAgICAgICA8bWVzc2FnZT4KICAgICAgICAgICAgICAgPG9wZXJhdGlvbi1uYW1lPmdldFNlY3JldDwvb3BlcmF0aW9uLW5hbWU+CiAgICAgICAgICAgICA8L21lc3NhZ2U+Ci0JICAgIDxyZXF1ZXN0LXByb3RlY3Rpb24KKyAgICAgICAgPHJlcXVlc3QtcHJvdGVjdGlvbgogICAgICAgICAgICAgICBhdXRoLXNvdXJjZT0ic2VuZGVyIi8+Ci0JICAgIDxyZXNwb25zZS1wcm90ZWN0aW9uCisgICAgICAgIDxyZXNwb25zZS1wcm90ZWN0aW9uCiAgICAgICAgICAgICAgIGF1dGgtc291cmNlPSJjb250ZW50Ii8+Ci0JICA8L21lc3NhZ2Utc2VjdXJpdHk+CisgICAgICA8L21lc3NhZ2Utc2VjdXJpdHk+CiAgICAgICAgIDwvbWVzc2FnZS1zZWN1cml0eS1iaW5kaW5nPgogICAgICAgPC9wb3J0LWluZm8+CiAgICAgPC9zZXJ2aWNlLXJlZj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldHdzL3dlYi9IZWxsb1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldHdzL3dlYi9IZWxsb1NlcnZsZXQuamF2YQppbmRleCBmNjYwY2RmLi41NjBiZmYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvcGVybWV0aG9kL3NlcnZsZXR3cy93ZWIvSGVsbG9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9zZXJ2bGV0d3Mvd2ViL0hlbGxvU2VydmxldC5qYXZhCkBAIC0xOSw4ICsxOSw4IEBACiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0LlNpbmdsZVRocmVhZE1vZGVsOwogaW1wb3J0IGphdmF4LnhtbC5ycGMuc2VydmVyLlNlcnZpY2VMaWZlY3ljbGU7CiAKLXB1YmxpYyBjbGFzcyBIZWxsb1NlcnZsZXQgaW1wbGVtZW50cyAKLQkJCVNpbmdsZVRocmVhZE1vZGVsLCBTZXJ2aWNlTGlmZWN5Y2xlIHsKK3B1YmxpYyBjbGFzcyBIZWxsb1NlcnZsZXQgaW1wbGVtZW50cworICAgICAgICAgICAgU2luZ2xlVGhyZWFkTW9kZWwsIFNlcnZpY2VMaWZlY3ljbGUgewogCiAgICAgcHVibGljIEhlbGxvU2VydmxldCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1NlcnZsZXQoKSBpbnN0YW50aWF0ZWQiKTsKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzZW5kU2VjcmV0IGludm9rZWQgZnJvbSBzZXJ2bGV0IGVuZHBvaW50Iik7CiAgICAgICAgIHJldHVybiBtZXNzYWdlLmhhc2hDb2RlKCk7CiAgICAgfQotICAgICAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VjcmV0KGRvdWJsZSBrZXkpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXRTZWNyZXQgaW52b2tlZCBmcm9tIHNlcnZsZXQgZW5kcG9pbnQiKTsKICAgICAgICAgcmV0dXJuICJTZWNyZXQtIiArIGtleTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9yb2xlcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3JvbGVzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNWU4MmY4NC4uMzMxMzEwYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3JvbGVzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3JvbGVzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5LXdzcy1yb2xlcyIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9yb2xlcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvcm9sZXMvYnVpbGQueG1sCmluZGV4IGNlN2YzYTEuLmVlNzQ0NDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9yb2xlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3JvbGVzL2J1aWxkLnhtbApAQCAtNzksNyArNzksNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLWNsaWVudCI+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPiAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id3NpbXBvcnQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzaW1wb3J0LmFyZ3MiCiAgICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCBodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS9Xc3NSb2xlc0VqYlNlcnZpY2UvSGVsbG9FamI/V1NETCIvPgpAQCAtMTA1LDcgKzEwNSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXNlcnZlciIgZGVwZW5kcz0iY29tcGlsZS1zZXJ2ZXIiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gCisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVqYmphci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2VqYndzIi8+CkBAIC0xMjIsMTYgKzEyMiwxNiBAQAogICAgICAgICAgICAgPGNsYXNzZXMgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9zZXJ2bGV0d3MiLz4KICAgICAgICAgPC93YXI+CiAKLSAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4gCisgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+Ci0JICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgotICAgICAgICA8L2phcj4gICAKKyAgICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWNsaWVudCIgZGVwZW5kcz0iY29tcGlsZS1jbGllbnQiPgpAQCAtMTM5LDExICsxMzksMTEgQEAKIAogICAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIKICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIKICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgICB2YWx1ZT0iY29tL3N1bi8qKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9yb2xlcy9lamJ3cy9IZWxsb0VqYi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3JvbGVzL2VqYndzL0hlbGxvRWpiLmphdmEKaW5kZXggOTljZTU5My4uNTU2NGE2YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3JvbGVzL2VqYndzL0hlbGxvRWpiLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3JvbGVzL2VqYndzL0hlbGxvRWpiLmphdmEKQEAgLTU1LDcgKzU1LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIHJvbGVzQWxsb3dlZDEoU3RyaW5nIHdobykgewogICAgICAgICByZXR1cm4gIkhlbGxvLCAiICsgd2hvOwogICAgIH0KLSAgICAKKwogICAgIEBSb2xlc0FsbG93ZWQodmFsdWU9eyJ3ZWJ1c2VyIn0pCiAgICAgcHVibGljIFN0cmluZyByb2xlc0FsbG93ZWQyKFN0cmluZyB3aG8pIHsKICAgICAgICAgcmV0dXJuICJIZWxsbywgIiArIHdobzsKQEAgLTY5LDcgKzY5LDcgQEAKICAgICBAUGVybWl0QWxsCiAgICAgcHVibGljIFN0cmluZyBwZXJtaXRBbGwoU3RyaW5nIHdobykgewogICAgICAgICByZXR1cm4gIkhlbGxvLCAiICsgd2hvOwotICAgIH0gICAgCisgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBydW5BczEoKSB7CiAgICAgICAgIHJldHVybiBzZnVsLmhlbGxvKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvcm9sZXMvZWpid3MyL0hlbGxvRWpiMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3JvbGVzL2VqYndzMi9IZWxsb0VqYjIuamF2YQppbmRleCBiYTA2MjMxLi5kNzIyZDdkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvcm9sZXMvZWpid3MyL0hlbGxvRWpiMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9yb2xlcy9lamJ3czIvSGVsbG9FamIyLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIHJvbGVzQWxsb3dlZDEoU3RyaW5nIHdobykgewogICAgICAgICByZXR1cm4gIkhlbGxvLCAiICsgd2hvOwogICAgIH0KLSAgICAKKwogICAgIEBSb2xlc0FsbG93ZWQodmFsdWU9eyJ3ZWJ1c2VyIn0pCiAgICAgcHVibGljIFN0cmluZyByb2xlc0FsbG93ZWQyKFN0cmluZyB3aG8pIHsKICAgICAgICAgcmV0dXJuICJIZWxsbywgIiArIHdobzsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9yb2xlczIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9yb2xlczIvYnVpbGQucHJvcGVydGllcwppbmRleCA3ZjM2NDJmLi43MDk3YzBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvcm9sZXMyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3JvbGVzMi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eS13c3Mtcm9sZXMyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3JvbGVzMi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvcm9sZXMyL2J1aWxkLnhtbAppbmRleCA0NzE5NmE2Li4wNGE3MGNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvcm9sZXMyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvcm9sZXMyL2J1aWxkLnhtbApAQCAtNjMsNyArNjMsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLWNsaWVudCI+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPiAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id3NpbXBvcnQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzaW1wb3J0LmFyZ3MiCiAgICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCBodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS9Xc3NSb2xlczJFamJTZXJ2aWNlL0hlbGxvRWpiP1dTREwiLz4KQEAgLTgxLDcgKzgxLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtc2VydmVyIiBkZXBlbmRzPSJjb21waWxlLXNlcnZlciI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWpiamFyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vZWpid3MiLz4KQEAgLTk1LDExICs5NSwxMSBAQAogCiAgICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIgogICAgICAgICAgICAgICAgIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuamFyIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuamFyIgogICAgICAgICAgICAgICAgIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICAgIHZhbHVlPSJjb20vc3VuLyoqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3JvbGVzMi9lamJ3cy9IZWxsb0VqYi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3JvbGVzMi9lamJ3cy9IZWxsb0VqYi5qYXZhCmluZGV4IGM2N2NjMTguLjQ2N2YwZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9yb2xlczIvZWpid3MvSGVsbG9FamIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvcm9sZXMyL2VqYndzL0hlbGxvRWpiLmphdmEKQEAgLTUxLDcgKzUxLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIHJvbGVzQWxsb3dlZDEoU3RyaW5nIHdobykgewogICAgICAgICByZXR1cm4gIkhlbGxvLCAiICsgd2hvOwogICAgIH0KLSAgICAKKwogICAgIEBSb2xlc0FsbG93ZWQodmFsdWU9eyJ3ZWJ1c2VyIn0pCiAgICAgcHVibGljIFN0cmluZyByb2xlc0FsbG93ZWQyKFN0cmluZyB3aG8pIHsKICAgICAgICAgcmV0dXJuICJIZWxsbywgIiArIHdobzsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICBAUGVybWl0QWxsCiAgICAgcHVibGljIFN0cmluZyBwZXJtaXRBbGwoU3RyaW5nIHdobykgewogICAgICAgICByZXR1cm4gIkhlbGxvLCAiICsgd2hvOwotICAgIH0gICAgCisgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBydW5BczEoKSB7CiAgICAgICAgIHJldHVybiBzZnVsLmhlbGxvKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvcm9sZXMyL2VqYndzL1NmdWxFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9yb2xlczIvZWpid3MvU2Z1bEVKQi5qYXZhCmluZGV4IGMxM2Y5MGIuLjRmMWZhZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9yb2xlczIvZWpid3MvU2Z1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9yb2xlczIvZWpid3MvU2Z1bEVKQi5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiBAUnVuQXMoImoyZWUiKQogcHVibGljIGNsYXNzIFNmdWxFSkIgaW1wbGVtZW50cyBTZnVsTG9jYWwgewogICAgIEBFSkIgcHJpdmF0ZSBTbGVzc0xvY2FsIHNsZXNzOwotIAorCiAgICAgQFJvbGVzQWxsb3dlZCh2YWx1ZT17ImphdmFlZSJ9KQogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7CiAgICAgICAgIHJldHVybiAiaGVsbG8gZnJvbSBTZnVsIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9zc2wvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9zc2wvYnVpbGQucHJvcGVydGllcwppbmRleCA0NGM2M2Y5Li5lOTFhMjQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvc3NsL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3NzbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eS13c3Mtc3NsIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3NzbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvc3NsL2J1aWxkLnhtbAppbmRleCBmNGMxYjUwLi4yMTRjMTEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvc3NsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvc3NsL2J1aWxkLnhtbApAQCAtNTUsNyArNTUsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLWNsaWVudCIgZGVwZW5kcz0icHJlcGFyZS10cnVzdHN0b3JlLWNvbW1vbiwgaW5pdC1zZWN1cml0eS11dGlsIj4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+IAorICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3c2ltcG9ydCI+CiAgICAgICAgICAgICAgICAgPCEtLXZhbHVlPSIta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQgaHR0cHM6Ly8ke3MxYXNDTn06JHtodHRwcy5wb3J0fS9Xc3NTc2xFamJTZXJ2aWNlL0hlbGxvRWpiP1dTREwiLz4tLT4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2ltcG9ydC5WTUFSR1MiIHZhbHVlPSIgLURqYXZheC5uZXQuc3NsLnRydXN0U3RvcmU9JHtidWlsZC5iYXNlLmRpcn0vY2FjZXJ0cy5qa3MgLURqYXZheC5uZXQuc3NsLnRydXN0U3RvcmVQYXNzd29yZD0ke3NzbC5wYXNzd29yZH0iLz4KQEAgLTgwLDcgKzgwLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtc2VydmVyIiBkZXBlbmRzPSJjb21waWxlLXNlcnZlciI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWpiamFyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vZWpid3MiLz4KQEAgLTkzLDE2ICs5MywxNiBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLSAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+IAorICAgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KLQkgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgotICAgICAgICA8L2phcj4gICAKKyAgICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWNsaWVudCIgZGVwZW5kcz0iY29tcGlsZS1jbGllbnQiPgpAQCAtMTEwLDExICsxMTAsMTEgQEAKIAogICAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIKICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIKICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgICB2YWx1ZT0iY29tL3N1bi8qKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9zc2xjbGllbnRjZXJ0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvc3NsY2xpZW50Y2VydC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDIwMThhNjUuLjA1MGM4YjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9zc2xjbGllbnRjZXJ0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3NzbGNsaWVudGNlcnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHktd3NzLXNzbGNsaWVudGNlcnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvc3NsY2xpZW50Y2VydC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvc3NsY2xpZW50Y2VydC9idWlsZC54bWwKaW5kZXggNGE1ZWQzYy4uZjIwM2E3MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3NzbGNsaWVudGNlcnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9zc2xjbGllbnRjZXJ0L2J1aWxkLnhtbApAQCAtMzgsOCArMzgsOCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTwhLS0gZXhwb3J0cyBjZXJ0ZGIgc3R1ZmYgYW5kIGltcG9ydHMgaW50byBrZXlzdG9yZSAtLT4KLQk8YW50Y2FsbCB0YXJnZXQ9InByZXBhcmUtc3RvcmUtbmlja25hbWUtY29tbW9uIj4KKyAgICA8IS0tIGV4cG9ydHMgY2VydGRiIHN0dWZmIGFuZCBpbXBvcnRzIGludG8ga2V5c3RvcmUgLS0+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJwcmVwYXJlLXN0b3JlLW5pY2tuYW1lLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY2VydC5uaWNrbmFtZSIgdmFsdWU9InMxYXMiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgpAQCAtNTksNyArNTksNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGluaXQtc2VjdXJpdHktdXRpbCI+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPiAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id3NpbXBvcnQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzaW1wb3J0LlZNQVJHUyIgdmFsdWU9IiAtRGphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZT0ke215dHJ1c3RzdG9yZS5kYi5maWxlfSAtRGphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZVBhc3N3b3JkPSR7c3NsLnBhc3N3b3JkfSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzaW1wb3J0LmFyZ3MiCkBAIC04Myw3ICs4Myw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXNlcnZlciIgZGVwZW5kcz0iY29tcGlsZS1zZXJ2ZXIsIGluaXQtc2VjdXJpdHktdXRpbCI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWpiamFyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vZWpid3MiLz4KQEAgLTEwMCwxNyArMTAwLDE3IEBACiAgICAgICAgIDxyZXBsYWNlIGZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiPgogICAgICAgICAgICAgPHJlcGxhY2VmaWx0ZXIgdG9rZW49IkBIT1NUQCIgdmFsdWU9IiR7czFhc0NOfSIvPgogICAgICAgICA8L3JlcGxhY2U+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPiAKKyAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+Ci0JICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgotCSAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgorICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgICAgIDwvamFyPiAgIAorICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtY2xpZW50IiBkZXBlbmRzPSJjb21waWxlLWNsaWVudCI+CkBAIC0xMTgsMTEgKzExOCwxMSBAQAogCiAgICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIgogICAgICAgICAgICAgICAgIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuamFyIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuamFyIgogICAgICAgICAgICAgICAgIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICAgIHZhbHVlPSJjb20vc3VuLyoqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvYXV0b3JlY292ZXJ5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9hdXRvcmVjb3ZlcnkvYnVpbGQucHJvcGVydGllcwppbmRleCAwM2M4MmI5Li5mZWRmYTY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9hdXRvcmVjb3ZlcnkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9hdXRvcmVjb3ZlcnkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0idHgtZWUtYXV0b3JlY292ZXJ5Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvYXV0b3JlY292ZXJ5L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2F1dG9yZWNvdmVyeS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZjRlYjhiYi4uZWMyYTU3YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvYXV0b3JlY292ZXJ5L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9hdXRvcmVjb3ZlcnkvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgamF2YS51dGlsLio7CiAKIC8qCi0gKiBDTEkgRGV2IHRlc3QgCisgKiBDTEkgRGV2IHRlc3QKICAqIEBhdXRob3IgbXZhdGtpbmEKICAqLwogcHVibGljIGNsYXNzIENsaWVudCBleHRlbmRzIENsaWVudEJhc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvYXV0b3JlY292ZXJ5L3dhci9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvYXV0b3JlY292ZXJ5L3dhci9UZXN0U2VydmxldC5qYXZhCmluZGV4IDc4M2VhNGYuLjU4NWJkYjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2F1dG9yZWNvdmVyeS93YXIvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9hdXRvcmVjb3Zlcnkvd2FyL1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7Ci0JcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAKICAgICAgICAgU3RyaW5nIHR5cGUgPSByZXEuZ2V0UXVlcnlTdHJpbmcoKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKICAgICAgICAgdHJ5IHsKLQkgICAgb3V0LnByaW50bG4oIiIgKyAoKHR5cGUgPT0gbnVsbCk/IGJlYW4udGVzdG9uZShyZXEuZ2V0TG9jYWxQb3J0KCkpIDogYmVhbi50ZXN0dHdvKHJlcS5nZXRMb2NhbFBvcnQoKSkpKTsKKyAgICAgICAgb3V0LnByaW50bG4oIiIgKyAoKHR5cGUgPT0gbnVsbCk/IGJlYW4udGVzdG9uZShyZXEuZ2V0TG9jYWxQb3J0KCkpIDogYmVhbi50ZXN0dHdvKHJlcS5nZXRMb2NhbFBvcnQoKSkpKTsKICAgICAgICAgfWNhdGNoKFRocm93YWJsZSBlKXsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJnb3QgZXhjZXB0aW9uIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbihlKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2F1dG9yZWNvdmVyeS93YXIvVmVyaWZ5U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvYXV0b3JlY292ZXJ5L3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKaW5kZXggYzAzYWY3OC4uMmE0MTM1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvYXV0b3JlY292ZXJ5L3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvYXV0b3JlY292ZXJ5L3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7Ci0JcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAKICAgICAgICAgU3RyaW5nIHR5cGUgPSByZXEuZ2V0UXVlcnlTdHJpbmcoKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKICAgICAgICAgdHJ5IHsKLQkgICAgb3V0LnByaW50bG4oIlJFU1VMVDoiICsgKCh0eXBlID09IG51bGwpPyBiZWFuLnZlcmlmeWRlZmF1bHQoKSA6IGJlYW4udmVyaWZ5eGEoKSkpOworICAgICAgICBvdXQucHJpbnRsbigiUkVTVUxUOiIgKyAoKHR5cGUgPT0gbnVsbCk/IGJlYW4udmVyaWZ5ZGVmYXVsdCgpIDogYmVhbi52ZXJpZnl4YSgpKSk7CiAgICAgICAgIH1jYXRjaChUaHJvd2FibGUgZSl7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiZ290IGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9jbGkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2NsaS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGRmMjIyOGYuLmNjNDRlMjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2NsaS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2NsaS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ0eC1lZS1jbGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9jbGkvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvY2xpL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAzMjBkNzllLi5jZDkxYjViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9jbGkvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2NsaS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuKjsKIAogLyoKLSAqIENMSSBEZXYgdGVzdCAKKyAqIENMSSBEZXYgdGVzdAogICogQGF1dGhvciBtdmF0a2luYQogICovCiBwdWJsaWMgY2xhc3MgQ2xpZW50IGV4dGVuZHMgQ2xpZW50QmFzZSB7CkBAIC0xNDAsMTAgKzE0MCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZChGaWxlLnNlcGFyYXRvcikuYXBwZW5kKElOU1RBTkNFMV9OQU1FKS5hcHBlbmQoRmlsZS5zZXBhcmF0b3IpCiAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKCJsb2dzIikuYXBwZW5kKEZpbGUuc2VwYXJhdG9yKS5hcHBlbmQoSU5TVEFOQ0UxX05BTUUpCiAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKEZpbGUuc2VwYXJhdG9yKS5hcHBlbmQoInR4IikudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBhc2FkbWluV2l0aE91dHB1dCgicmVjb3Zlci10cmFuc2FjdGlvbnMiLCAiLS10YXJnZXQiLCBJTlNUQU5DRTJfTkFNRSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAiLS10cmFuc2FjdGlvbmxvZ2RpciIsIHR4TG9nLCBJTlNUQU5DRTFfTkFNRSk7IAorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFzYWRtaW5XaXRoT3V0cHV0KCJyZWNvdmVyLXRyYW5zYWN0aW9ucyIsICItLXRhcmdldCIsIElOU1RBTkNFMl9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgIi0tdHJhbnNhY3Rpb25sb2dkaXIiLCB0eExvZywgSU5TVEFOQ0UxX05BTUUpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBhc2FkbWluV2l0aE91dHB1dCgicmVjb3Zlci10cmFuc2FjdGlvbnMiLCBJTlNUQU5DRTFfTkFNRSk7IAorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFzYWRtaW5XaXRoT3V0cHV0KCJyZWNvdmVyLXRyYW5zYWN0aW9ucyIsIElOU1RBTkNFMV9OQU1FKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0ZWQgY29tbWFuZDogIiArIHJlc3VsdC5vdXQpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQucmV0dXJuVmFsdWUpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2NsaS93YXIvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2NsaS93YXIvVGVzdFNlcnZsZXQuamF2YQppbmRleCA3ODNlYTRmLi41ODViZGIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9jbGkvd2FyL1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvY2xpL3dhci9UZXN0U2VydmxldC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwotCXJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogCiAgICAgICAgIFN0cmluZyB0eXBlID0gcmVxLmdldFF1ZXJ5U3RyaW5nKCk7CiAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgIHRyeSB7Ci0JICAgIG91dC5wcmludGxuKCIiICsgKCh0eXBlID09IG51bGwpPyBiZWFuLnRlc3RvbmUocmVxLmdldExvY2FsUG9ydCgpKSA6IGJlYW4udGVzdHR3byhyZXEuZ2V0TG9jYWxQb3J0KCkpKSk7CisgICAgICAgIG91dC5wcmludGxuKCIiICsgKCh0eXBlID09IG51bGwpPyBiZWFuLnRlc3RvbmUocmVxLmdldExvY2FsUG9ydCgpKSA6IGJlYW4udGVzdHR3byhyZXEuZ2V0TG9jYWxQb3J0KCkpKSk7CiAgICAgICAgIH1jYXRjaChUaHJvd2FibGUgZSl7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiZ290IGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9jbGkvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2NsaS93YXIvVmVyaWZ5U2VydmxldC5qYXZhCmluZGV4IGMwM2FmNzguLjJhNDEzNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2NsaS93YXIvVmVyaWZ5U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2NsaS93YXIvVmVyaWZ5U2VydmxldC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwotCXJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogCiAgICAgICAgIFN0cmluZyB0eXBlID0gcmVxLmdldFF1ZXJ5U3RyaW5nKCk7CiAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgIHRyeSB7Ci0JICAgIG91dC5wcmludGxuKCJSRVNVTFQ6IiArICgodHlwZSA9PSBudWxsKT8gYmVhbi52ZXJpZnlkZWZhdWx0KCkgOiBiZWFuLnZlcmlmeXhhKCkpKTsKKyAgICAgICAgb3V0LnByaW50bG4oIlJFU1VMVDoiICsgKCh0eXBlID09IG51bGwpPyBiZWFuLnZlcmlmeWRlZmF1bHQoKSA6IGJlYW4udmVyaWZ5eGEoKSkpOwogICAgICAgICB9Y2F0Y2goVGhyb3dhYmxlIGUpewogICAgICAgICAgICAgb3V0LnByaW50bG4oImdvdCBleGNlcHRpb24iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKGUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvY29tbW9uL0NsaWVudEJhc2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2NvbW1vbi9DbGllbnRCYXNlLmphdmEKaW5kZXggZTM3MzI3ZS4uZWJmMzk2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvY29tbW9uL0NsaWVudEJhc2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9jb21tb24vQ2xpZW50QmFzZS5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgamF2YS51dGlsLio7CiAKIC8qCi0gKiBDTEkgRGV2IHRlc3QgCisgKiBDTEkgRGV2IHRlc3QKICAqIEBhdXRob3IgbXZhdGtpbmEKICAqLwogcHVibGljIGFic3RyYWN0IGNsYXNzIENsaWVudEJhc2UgZXh0ZW5kcyBBZG1pbkJhc2VEZXZUZXN0IHsKQEAgLTExOSw3ICsxMTksNyBAQAogCiAgICAgICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwotICAKKwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwogICAgICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHJvY2Vzc2luZyBsaW5lOiAiICsgbGluZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9kYmxvZ3MvYmFzZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvZGJsb2dzL2Jhc2UvYnVpbGQucHJvcGVydGllcwppbmRleCA0NzhjNmNhLi5kZGRhMWMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9kYmxvZ3MvYmFzZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2RibG9ncy9iYXNlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InR4LWVlLWRibG9ncy1iYXNlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvZGJsb2dzL2Jhc2UvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvZGJsb2dzL2Jhc2UvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDkyNmI4ZGUuLmJkYmNmZGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2RibG9ncy9iYXNlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9kYmxvZ3MvYmFzZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuKjsKIAogLyoKLSAqIENMSSBEZXYgdGVzdCAKKyAqIENMSSBEZXYgdGVzdAogICogQGF1dGhvciBtdmF0a2luYQogICovCiBwdWJsaWMgY2xhc3MgQ2xpZW50IGV4dGVuZHMgQ2xpZW50QmFzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9kYmxvZ3MvYmFzZS93YXIvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2RibG9ncy9iYXNlL3dhci9UZXN0U2VydmxldC5qYXZhCmluZGV4IDc4M2VhNGYuLjU4NWJkYjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2RibG9ncy9iYXNlL3dhci9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2RibG9ncy9iYXNlL3dhci9UZXN0U2VydmxldC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwotCXJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogCiAgICAgICAgIFN0cmluZyB0eXBlID0gcmVxLmdldFF1ZXJ5U3RyaW5nKCk7CiAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgIHRyeSB7Ci0JICAgIG91dC5wcmludGxuKCIiICsgKCh0eXBlID09IG51bGwpPyBiZWFuLnRlc3RvbmUocmVxLmdldExvY2FsUG9ydCgpKSA6IGJlYW4udGVzdHR3byhyZXEuZ2V0TG9jYWxQb3J0KCkpKSk7CisgICAgICAgIG91dC5wcmludGxuKCIiICsgKCh0eXBlID09IG51bGwpPyBiZWFuLnRlc3RvbmUocmVxLmdldExvY2FsUG9ydCgpKSA6IGJlYW4udGVzdHR3byhyZXEuZ2V0TG9jYWxQb3J0KCkpKSk7CiAgICAgICAgIH1jYXRjaChUaHJvd2FibGUgZSl7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiZ290IGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9kYmxvZ3MvYmFzZS93YXIvVmVyaWZ5U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvZGJsb2dzL2Jhc2Uvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQppbmRleCBjMDNhZjc4Li4yYTQxMzUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9kYmxvZ3MvYmFzZS93YXIvVmVyaWZ5U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2RibG9ncy9iYXNlL3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7Ci0JcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAKICAgICAgICAgU3RyaW5nIHR5cGUgPSByZXEuZ2V0UXVlcnlTdHJpbmcoKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKICAgICAgICAgdHJ5IHsKLQkgICAgb3V0LnByaW50bG4oIlJFU1VMVDoiICsgKCh0eXBlID09IG51bGwpPyBiZWFuLnZlcmlmeWRlZmF1bHQoKSA6IGJlYW4udmVyaWZ5eGEoKSkpOworICAgICAgICBvdXQucHJpbnRsbigiUkVTVUxUOiIgKyAoKHR5cGUgPT0gbnVsbCk/IGJlYW4udmVyaWZ5ZGVmYXVsdCgpIDogYmVhbi52ZXJpZnl4YSgpKSk7CiAgICAgICAgIH1jYXRjaChUaHJvd2FibGUgZSl7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiZ290IGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9kYmxvZ3MvbWRiL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9kYmxvZ3MvbWRiL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjExYmIzNS4uMGFlYTJjOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvZGJsb2dzL21kYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2RibG9ncy9tZGIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0idHgtZWUtZGJsb2dzLW1kYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2RibG9ncy9tZGIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvZGJsb2dzL21kYi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOGEyMzE3Ni4uNWVkMWFhYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvZGJsb2dzL21kYi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvZGJsb2dzL21kYi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuKjsKIAogLyoKLSAqIENMSSBEZXYgdGVzdCAKKyAqIENMSSBEZXYgdGVzdAogICogQGF1dGhvciBtdmF0a2luYQogICovCiBwdWJsaWMgY2xhc3MgQ2xpZW50IGV4dGVuZHMgQ2xpZW50QmFzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9kYmxvZ3MvbWRiL3dhci9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvZGJsb2dzL21kYi93YXIvVGVzdFNlcnZsZXQuamF2YQppbmRleCAzZTMxMGEzLi43MjExZTM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9kYmxvZ3MvbWRiL3dhci9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2RibG9ncy9tZGIvd2FyL1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7Ci0JcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAKICAgICAgICAgU3RyaW5nIHR5cGUgPSByZXEuZ2V0UXVlcnlTdHJpbmcoKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKICAgICAgICAgdHJ5IHsKLQkgICAgIG91dC5wcmludGxuKCIiICsgKCh0eXBlID09IG51bGwpPyBiZWFuLnRlc3R0d28ocmVxLmdldExvY2FsUG9ydCgpLCBmYWxzZSkgOiBiZWFuLnRlc3R0d28ocmVxLmdldExvY2FsUG9ydCgpLCB0cnVlKSkpOworICAgICAgICAgb3V0LnByaW50bG4oIiIgKyAoKHR5cGUgPT0gbnVsbCk/IGJlYW4udGVzdHR3byhyZXEuZ2V0TG9jYWxQb3J0KCksIGZhbHNlKSA6IGJlYW4udGVzdHR3byhyZXEuZ2V0TG9jYWxQb3J0KCksIHRydWUpKSk7CiAgICAgICAgIH1jYXRjaChUaHJvd2FibGUgZSl7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiZ290IGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9kYmxvZ3MvbWRiL3dhci9WZXJpZnlTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9kYmxvZ3MvbWRiL3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKaW5kZXggZDUwMTQ4My4uYmMzZWZlNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvZGJsb2dzL21kYi93YXIvVmVyaWZ5U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2RibG9ncy9tZGIvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLQlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKIAogICAgICAgICBTdHJpbmcgdHlwZSA9IHJlcS5nZXRRdWVyeVN0cmluZygpOwogICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CkBAIC00Niw4ICs0Niw4IEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICB0cnkgewotCSAgICBvdXQucHJpbnRsbigiUkVTVUxUOiIgKyBiZWFuLnZlcmlmeXhhKCkpOwotCSAgICAvL291dC5wcmludGxuKCJSRVNVTFQ6IiArICgodHlwZSA9PSBudWxsKT8gYmVhbi52ZXJpZnlkZWZhdWx0KCkgOiBiZWFuLnZlcmlmeXhhKCkpKTsKKyAgICAgICAgb3V0LnByaW50bG4oIlJFU1VMVDoiICsgYmVhbi52ZXJpZnl4YSgpKTsKKyAgICAgICAgLy9vdXQucHJpbnRsbigiUkVTVUxUOiIgKyAoKHR5cGUgPT0gbnVsbCk/IGJlYW4udmVyaWZ5ZGVmYXVsdCgpIDogYmVhbi52ZXJpZnl4YSgpKSk7CiAgICAgICAgIH1jYXRjaChUaHJvd2FibGUgZSl7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiZ290IGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9tZGIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL21kYi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDliY2JhYWEuLmE0YzRjODAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL21kYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL21kYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ0eC1lZS1tZGIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9tZGIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvbWRiL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA0YmY0ZjBlLi43NWRlNzg5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9tZGIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL21kYi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuKjsKIAogLyoKLSAqIENMSSBEZXYgdGVzdCAKKyAqIENMSSBEZXYgdGVzdAogICogQGF1dGhvciBtdmF0a2luYQogICovCiBwdWJsaWMgY2xhc3MgQ2xpZW50IGV4dGVuZHMgQ2xpZW50QmFzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9tZGIvd2FyL1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9tZGIvd2FyL1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggYmY1Y2RmMy4uYWMwODE5NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvbWRiL3dhci9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL21kYi93YXIvVGVzdFNlcnZsZXQuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLQlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKIAogICAgICAgICBTdHJpbmcgdHlwZSA9IHJlcS5nZXRRdWVyeVN0cmluZygpOwogICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CkBAIC00Niw4ICs0Niw4IEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICB0cnkgewotCSAgICAvL291dC5wcmludGxuKCIiICsgKCh0eXBlID09IG51bGwpPyBiZWFuLnRlc3RvbmUocmVxLmdldExvY2FsUG9ydCgpKSA6IGJlYW4udGVzdHR3byhyZXEuZ2V0TG9jYWxQb3J0KCkpKSk7Ci0JICAgIG91dC5wcmludGxuKCIiICsgYmVhbi50ZXN0dHdvKHJlcS5nZXRMb2NhbFBvcnQoKSkpOworICAgICAgICAvL291dC5wcmludGxuKCIiICsgKCh0eXBlID09IG51bGwpPyBiZWFuLnRlc3RvbmUocmVxLmdldExvY2FsUG9ydCgpKSA6IGJlYW4udGVzdHR3byhyZXEuZ2V0TG9jYWxQb3J0KCkpKSk7CisgICAgICAgIG91dC5wcmludGxuKCIiICsgYmVhbi50ZXN0dHdvKHJlcS5nZXRMb2NhbFBvcnQoKSkpOwogICAgICAgICB9Y2F0Y2goVGhyb3dhYmxlIGUpewogICAgICAgICAgICAgb3V0LnByaW50bG4oImdvdCBleGNlcHRpb24iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKGUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvbWRiL3dhci9WZXJpZnlTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9tZGIvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQppbmRleCBkNTAxNDgzLi5iYzNlZmU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9tZGIvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9tZGIvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLQlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKIAogICAgICAgICBTdHJpbmcgdHlwZSA9IHJlcS5nZXRRdWVyeVN0cmluZygpOwogICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CkBAIC00Niw4ICs0Niw4IEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICB0cnkgewotCSAgICBvdXQucHJpbnRsbigiUkVTVUxUOiIgKyBiZWFuLnZlcmlmeXhhKCkpOwotCSAgICAvL291dC5wcmludGxuKCJSRVNVTFQ6IiArICgodHlwZSA9PSBudWxsKT8gYmVhbi52ZXJpZnlkZWZhdWx0KCkgOiBiZWFuLnZlcmlmeXhhKCkpKTsKKyAgICAgICAgb3V0LnByaW50bG4oIlJFU1VMVDoiICsgYmVhbi52ZXJpZnl4YSgpKTsKKyAgICAgICAgLy9vdXQucHJpbnRsbigiUkVTVUxUOiIgKyAoKHR5cGUgPT0gbnVsbCk/IGJlYW4udmVyaWZ5ZGVmYXVsdCgpIDogYmVhbi52ZXJpZnl4YSgpKSk7CiAgICAgICAgIH1jYXRjaChUaHJvd2FibGUgZSl7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiZ290IGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9yZXNlbmRhdXRvcmVjb3ZlcnkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3Jlc2VuZGF1dG9yZWNvdmVyeS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGYwYjFkYmYuLjA4NDAyYjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3Jlc2VuZGF1dG9yZWNvdmVyeS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3Jlc2VuZGF1dG9yZWNvdmVyeS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ0eC1lZS1yZXNlbmRhdXRvcmVjb3ZlcnkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9yZXNlbmRhdXRvcmVjb3ZlcnkvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvcmVzZW5kYXV0b3JlY292ZXJ5L2NsaWVudC9DbGllbnQuamF2YQppbmRleCAzODU3ZTUyLi5iMGRjZThiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9yZXNlbmRhdXRvcmVjb3ZlcnkvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3Jlc2VuZGF1dG9yZWNvdmVyeS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuKjsKIAogLyoKLSAqIENMSSBEZXYgdGVzdCAKKyAqIENMSSBEZXYgdGVzdAogICogQGF1dGhvciBtdmF0a2luYQogICovCiBwdWJsaWMgY2xhc3MgQ2xpZW50IGV4dGVuZHMgQ2xpZW50QmFzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9yZXNlbmRhdXRvcmVjb3Zlcnkvd2FyL1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9yZXNlbmRhdXRvcmVjb3Zlcnkvd2FyL1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggYzU4M2NlOC4uMzIzODlmZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvcmVzZW5kYXV0b3JlY292ZXJ5L3dhci9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3Jlc2VuZGF1dG9yZWNvdmVyeS93YXIvVGVzdFNlcnZsZXQuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLQlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKIAogICAgICAgICBTdHJpbmcgdHlwZSA9IHJlcS5nZXRRdWVyeVN0cmluZygpOwogICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlJUOiAiICsgdHlwZSk7CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICB0cnkgewotCSAgICBvdXQucHJpbnRsbigiIiArICgodHlwZSA9PSBudWxsKT8gYmVhbi50ZXN0b25lKHJlcS5nZXRMb2NhbFBvcnQoKSkgOiBiZWFuLnRlc3R0d28ocmVxLmdldExvY2FsUG9ydCgpKSkpOworICAgICAgICBvdXQucHJpbnRsbigiIiArICgodHlwZSA9PSBudWxsKT8gYmVhbi50ZXN0b25lKHJlcS5nZXRMb2NhbFBvcnQoKSkgOiBiZWFuLnRlc3R0d28ocmVxLmdldExvY2FsUG9ydCgpKSkpOwogICAgICAgICB9Y2F0Y2goVGhyb3dhYmxlIGUpewogICAgICAgICAgICAgb3V0LnByaW50bG4oImdvdCBleGNlcHRpb24iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKGUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvcmVzZW5kYXV0b3JlY292ZXJ5L3dhci9WZXJpZnlTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9yZXNlbmRhdXRvcmVjb3Zlcnkvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQppbmRleCBjMDNhZjc4Li4yYTQxMzUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9yZXNlbmRhdXRvcmVjb3Zlcnkvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9yZXNlbmRhdXRvcmVjb3Zlcnkvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLQlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKIAogICAgICAgICBTdHJpbmcgdHlwZSA9IHJlcS5nZXRRdWVyeVN0cmluZygpOwogICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICB0cnkgewotCSAgICBvdXQucHJpbnRsbigiUkVTVUxUOiIgKyAoKHR5cGUgPT0gbnVsbCk/IGJlYW4udmVyaWZ5ZGVmYXVsdCgpIDogYmVhbi52ZXJpZnl4YSgpKSk7CisgICAgICAgIG91dC5wcmludGxuKCJSRVNVTFQ6IiArICgodHlwZSA9PSBudWxsKT8gYmVhbi52ZXJpZnlkZWZhdWx0KCkgOiBiZWFuLnZlcmlmeXhhKCkpKTsKICAgICAgICAgfWNhdGNoKFRocm93YWJsZSBlKXsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJnb3QgZXhjZXB0aW9uIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbihlKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3NlbGZyZWNvdmVyeS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvc2VsZnJlY292ZXJ5L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjAwMmEyZS4uNmVkNTQ5YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvc2VsZnJlY292ZXJ5L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvc2VsZnJlY292ZXJ5L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InR4LWVlLXNlbGZyZWNvdmVyeSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3NlbGZyZWNvdmVyeS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9zZWxmcmVjb3ZlcnkvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGY4ZTI4YWIuLjdiYWJhYjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3NlbGZyZWNvdmVyeS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvc2VsZnJlY292ZXJ5L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogaW1wb3J0IGphdmEudXRpbC4qOwogCiAvKgotICogQ0xJIERldiB0ZXN0IAorICogQ0xJIERldiB0ZXN0CiAgKiBAYXV0aG9yIG12YXRraW5hCiAgKi8KIHB1YmxpYyBjbGFzcyBDbGllbnQgZXh0ZW5kcyBDbGllbnRCYXNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3NlbGZyZWNvdmVyeS93YXIvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3NlbGZyZWNvdmVyeS93YXIvVGVzdFNlcnZsZXQuamF2YQppbmRleCA3ODNlYTRmLi41ODViZGIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9zZWxmcmVjb3Zlcnkvd2FyL1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvc2VsZnJlY292ZXJ5L3dhci9UZXN0U2VydmxldC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwotCXJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogCiAgICAgICAgIFN0cmluZyB0eXBlID0gcmVxLmdldFF1ZXJ5U3RyaW5nKCk7CiAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgIHRyeSB7Ci0JICAgIG91dC5wcmludGxuKCIiICsgKCh0eXBlID09IG51bGwpPyBiZWFuLnRlc3RvbmUocmVxLmdldExvY2FsUG9ydCgpKSA6IGJlYW4udGVzdHR3byhyZXEuZ2V0TG9jYWxQb3J0KCkpKSk7CisgICAgICAgIG91dC5wcmludGxuKCIiICsgKCh0eXBlID09IG51bGwpPyBiZWFuLnRlc3RvbmUocmVxLmdldExvY2FsUG9ydCgpKSA6IGJlYW4udGVzdHR3byhyZXEuZ2V0TG9jYWxQb3J0KCkpKSk7CiAgICAgICAgIH1jYXRjaChUaHJvd2FibGUgZSl7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiZ290IGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9zZWxmcmVjb3Zlcnkvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3NlbGZyZWNvdmVyeS93YXIvVmVyaWZ5U2VydmxldC5qYXZhCmluZGV4IGMwM2FmNzguLjJhNDEzNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3NlbGZyZWNvdmVyeS93YXIvVmVyaWZ5U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3NlbGZyZWNvdmVyeS93YXIvVmVyaWZ5U2VydmxldC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwotCXJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogCiAgICAgICAgIFN0cmluZyB0eXBlID0gcmVxLmdldFF1ZXJ5U3RyaW5nKCk7CiAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgIHRyeSB7Ci0JICAgIG91dC5wcmludGxuKCJSRVNVTFQ6IiArICgodHlwZSA9PSBudWxsKT8gYmVhbi52ZXJpZnlkZWZhdWx0KCkgOiBiZWFuLnZlcmlmeXhhKCkpKTsKKyAgICAgICAgb3V0LnByaW50bG4oIlJFU1VMVDoiICsgKCh0eXBlID09IG51bGwpPyBiZWFuLnZlcmlmeWRlZmF1bHQoKSA6IGJlYW4udmVyaWZ5eGEoKSkpOwogICAgICAgICB9Y2F0Y2goVGhyb3dhYmxlIGUpewogICAgICAgICAgICAgb3V0LnByaW50bG4oImdvdCBleGNlcHRpb24iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKGUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvdGltZXJfd2l0aF9hdXRvcmVjb3ZlcnkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3RpbWVyX3dpdGhfYXV0b3JlY292ZXJ5L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzZmNDQzNC4uZDU2NDZhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvdGltZXJfd2l0aF9hdXRvcmVjb3ZlcnkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS90aW1lcl93aXRoX2F1dG9yZWNvdmVyeS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ0eC1lZS10aW1lci13aXRoLWF1dG9yZWNvdmVyeSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3RpbWVyX3dpdGhfYXV0b3JlY292ZXJ5L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3RpbWVyX3dpdGhfYXV0b3JlY292ZXJ5L2NsaWVudC9DbGllbnQuamF2YQppbmRleCAzY2MzZDVmLi40OWFhYTllIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS90aW1lcl93aXRoX2F1dG9yZWNvdmVyeS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvdGltZXJfd2l0aF9hdXRvcmVjb3ZlcnkvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgamF2YS51dGlsLio7CiAKIC8qCi0gKiBDTEkgRGV2IHRlc3QgCisgKiBDTEkgRGV2IHRlc3QKICAqIEBhdXRob3IgbXZhdGtpbmEKICAqLwogcHVibGljIGNsYXNzIENsaWVudCBleHRlbmRzIENsaWVudEJhc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvdGltZXJfd2l0aF9hdXRvcmVjb3Zlcnkvd2FyL1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS90aW1lcl93aXRoX2F1dG9yZWNvdmVyeS93YXIvVGVzdFNlcnZsZXQuamF2YQppbmRleCBkNzE4NTIxLi44ZjFjYzMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS90aW1lcl93aXRoX2F1dG9yZWNvdmVyeS93YXIvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS90aW1lcl93aXRoX2F1dG9yZWNvdmVyeS93YXIvVGVzdFNlcnZsZXQuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLQlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKIAogICAgICAgICBTdHJpbmcgdHlwZSA9IHJlcS5nZXRRdWVyeVN0cmluZygpOwogICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICB0cnkgewotCSAgICBvdXQucHJpbnRsbigiIiArICgodHlwZSA9PSBudWxsKT8gYmVhbi5jcmVhdGVfdGltZXIocmVxLmdldExvY2FsUG9ydCgpKSA6IGJlYW4udGVzdHR3byhyZXEuZ2V0TG9jYWxQb3J0KCkpKSk7CisgICAgICAgIG91dC5wcmludGxuKCIiICsgKCh0eXBlID09IG51bGwpPyBiZWFuLmNyZWF0ZV90aW1lcihyZXEuZ2V0TG9jYWxQb3J0KCkpIDogYmVhbi50ZXN0dHdvKHJlcS5nZXRMb2NhbFBvcnQoKSkpKTsKICAgICAgICAgfWNhdGNoKFRocm93YWJsZSBlKXsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJnb3QgZXhjZXB0aW9uIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbihlKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3RpbWVyX3dpdGhfYXV0b3JlY292ZXJ5L3dhci9WZXJpZnlTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS90aW1lcl93aXRoX2F1dG9yZWNvdmVyeS93YXIvVmVyaWZ5U2VydmxldC5qYXZhCmluZGV4IGMwM2FmNzguLjJhNDEzNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3RpbWVyX3dpdGhfYXV0b3JlY292ZXJ5L3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvdGltZXJfd2l0aF9hdXRvcmVjb3Zlcnkvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLQlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKIAogICAgICAgICBTdHJpbmcgdHlwZSA9IHJlcS5nZXRRdWVyeVN0cmluZygpOwogICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICB0cnkgewotCSAgICBvdXQucHJpbnRsbigiUkVTVUxUOiIgKyAoKHR5cGUgPT0gbnVsbCk/IGJlYW4udmVyaWZ5ZGVmYXVsdCgpIDogYmVhbi52ZXJpZnl4YSgpKSk7CisgICAgICAgIG91dC5wcmludGxuKCJSRVNVTFQ6IiArICgodHlwZSA9PSBudWxsKT8gYmVhbi52ZXJpZnlkZWZhdWx0KCkgOiBiZWFuLnZlcmlmeXhhKCkpKTsKICAgICAgICAgfWNhdGNoKFRocm93YWJsZSBlKXsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJnb3QgZXhjZXB0aW9uIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbihlKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R3b3BjcmVhZG9ubHkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R3b3BjcmVhZG9ubHkvYnVpbGQucHJvcGVydGllcwppbmRleCA5MTliMDlhLi4zZTgwZjY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90d29wY3JlYWRvbmx5L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHdvcGNyZWFkb25seS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ0cmFuc2FjdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CkBAIC0yMyw5ICsyMyw5IEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9InR4Z2xvYmFsIi8+ICAgICAgICAgCi08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9L3R4Z2xvYmFsLWNsaWVudC5qYXIiLz4gCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9InR4Z2xvYmFsIi8+ICAgICAgICBcdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS90eGdsb2JhbC1jbGllbnQuamFyIi8+XHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iamRiYy5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamF2YXguc3FsLlhBRGF0YVNvdXJjZSIvPgogPHByb3BlcnR5IG5hbWU9ImRiLnVybDEiIHZhbHVlPSJqZGJjOm9yYWNsZTp0aGluOkBtaWc6MTUyMTptaWciLz4KIDxwcm9wZXJ0eSBuYW1lPSJkYi51cmwyIiB2YWx1ZT0iamRiYzpvcmFjbGU6dGhpbjpAMTI5LjE1OC4yMjkuNTk6MTUyMTpPUkNMOSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHdvcGNyZWFkb25seS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90d29wY3JlYWRvbmx5L2J1aWxkLnhtbAppbmRleCBlOWQ1ZWFhLi4zNDc3NDBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90d29wY3JlYWRvbmx5L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90d29wY3JlYWRvbmx5L2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iIC8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiL2JlYW5CIi8+CkBAIC00OCw4ICs0OCw4IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cC1wb2ludGJhc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC0xMDcsMTEgKzEwNywxMSBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwLXBvaW50YmFzZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvczFxZURCMSIvPgpAQCAtMTMwLDcgKzEzMCw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KLSAgICAgICAgICA8cGFyYW0gbmFtZT0iZGIudXJsIiAKKyAgICAgICAgICA8cGFyYW0gbmFtZT0iZGIudXJsIgogICAgICAgICAgIHZhbHVlPSJqZGJjOnBvaW50YmFzZTpzZXJ2ZXI6Ly8ke2RiLmhvc3R9OjkwOTMvc3VuLWFwcHNlcnYtc2FtcGxlcyIvPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHdvcGNyZWFkb25seS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90d29wY3JlYWRvbmx5L2NsaWVudC9DbGllbnQuamF2YQppbmRleCA1MzI3ZDI0Li4wODE5OThmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90d29wY3JlYWRvbmx5L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90d29wY3JlYWRvbmx5L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzIsMTUgKzMyLDE1IEBACiAgICAgcHVibGljIENsaWVudCgpIHsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7IAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuU3RhcnRpbmcgVHhnbG9iYWwgVGVzdCBTdWl0ZSIpOyAgCi0gICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7IAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblN0YXJ0aW5nIFR4Z2xvYmFsIFRlc3QgU3VpdGUiKTsKKyAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKIAogICAgICAgICAvLyBpbml0aWFsaXplIHRoZSBjb250ZXh0IGFuZCBob21lIG9iamVjdAogICAgICAgICBjbGllbnQuc2V0dXAoKTsKIAogICAgICAgICAvLyBydW4gdGhlIHRlc3RzCi0gICAgICAgIGNsaWVudC5ydW5UZXN0Q2xpZW50KCk7ICAgCisgICAgICAgIGNsaWVudC5ydW5UZXN0Q2xpZW50KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0dXAoKSB7CkBAIC03Myw3ICs3Myw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdDEoKSB7Ci0gICAgICAgIHRyeSB7ICAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0ZSBCZWFuQjo6dGVzdDEiKTsKIAogICAgICAgICAgICAgVHhSZW1vdGVCIGJlYW5CID0gaG9tZS5jcmVhdGUoKTsKQEAgLTgyLDcgKzgyLDcgQEAKIAogICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cygidHhnbG9iYWwgdGVzdDE6ICIsIHN0YXR1cy5QQVNTKTsKLSAgICAgICAgICAgIH0gZWxzZSB7CSAKKyAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cygidHhnbG9iYWwgdGVzdDE6ICIsIHN0YXR1cy5GQUlMKTsKICAgICAgICAgICAgIH0KIApAQCAtOTYsNyArOTYsNyBAQAogCiAgICAgcHVibGljIHZvaWQgdGVzdDIoKSB7CiAgICAgICAgIFR4UmVtb3RlQiBiZWFuQiA9IG51bGw7Ci0gICAgICAgIHRyeSB7ICAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0ZSBCZWFuQjo6dGVzdDIiKTsKIAogICAgICAgICAgICAgYmVhbkIgPSBob21lLmNyZWF0ZSgpOwpAQCAtMTA1LDcgKzEwNSw3IEBACiAKICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gMSkgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoInR4Z2xvYmFsIHRlc3QyOiAiLCBzdGF0dXMuUEFTUyk7Ci0gICAgICAgICAgICB9IGVsc2UgewkgCisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoInR4Z2xvYmFsIHRlc3QyOiAiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBiZWFuQi5yZW1vdmUoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R3b3BjcmVhZG9ubHkvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R3b3BjcmVhZG9ubHkvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCA0ZTFkYTU5Li5kODA1OTY1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90d29wY3JlYWRvbmx5L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHdvcGNyZWFkb25seS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICAgICAgIDxtZXRob2QtbmFtZT50ZXN0MTwvbWV0aG9kLW5hbWU+CiAgICAgICAgICAgPC9tZXRob2Q+CiAgICAgICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgotICAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+IAorICAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgICAgICA8Y29udGFpbmVyLXRyYW5zYWN0aW9uPgogICAgICAgICAgIDxtZXRob2Q+CiAgICAgICAgICAgICAgIDxlamItbmFtZT5UeEJlYW5CPC9lamItbmFtZT4KQEAgLTgxLDcgKzgxLDcgQEAKICAgICAgICAgICAgICAgPG1ldGhvZC1uYW1lPnRlc3QyPC9tZXRob2QtbmFtZT4KICAgICAgICAgICA8L21ldGhvZD4KICAgICAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4gCisgICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgICAgIDxjb250YWluZXItdHJhbnNhY3Rpb24+CiAgICAgICAgICAgPG1ldGhvZD4KICAgICAgICAgICAgICAgPGVqYi1uYW1lPlR4QmVhbkI8L2VqYi1uYW1lPgpAQCAtODksNiArODksNiBAQAogICAgICAgICAgICAgICA8bWV0aG9kLW5hbWU+Z2V0Q29tbWl0U3RhdHVzPC9tZXRob2QtbmFtZT4KICAgICAgICAgICA8L21ldGhvZD4KICAgICAgICAgICA8dHJhbnMtYXR0cmlidXRlPk5vdFN1cHBvcnRlZDwvdHJhbnMtYXR0cmlidXRlPgotICAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+IAorICAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KIDwvZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R3b3BjcmVhZG9ubHkvZWpiL2JlYW5CL1R4QmVhbkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R3b3BjcmVhZG9ubHkvZWpiL2JlYW5CL1R4QmVhbkIuamF2YQppbmRleCA1ODI3M2MyLi5iNDJhNTFjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90d29wY3JlYWRvbmx5L2VqYi9iZWFuQi9UeEJlYW5CLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHdvcGNyZWFkb25seS9lamIvYmVhbkIvVHhCZWFuQi5qYXZhCkBAIC0zNiwxNCArMzYsMTQgQEAKICAgICBwcml2YXRlIFN0cmluZyBkYlVSTDEgPSBudWxsOwogICAgIHByaXZhdGUgU3RyaW5nIGRiVVJMMiA9IG51bGw7CiAgICAgcHJpdmF0ZSBTdHJpbmcgcGFzc3dvcmQgPSBudWxsOwotICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY3R4ID0gbnVsbDsgICAKKyAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGN0eCA9IG51bGw7CiAgICAgcHJpdmF0ZSBpbnQgY29tbWl0U3RhdHVzID0gMjsgLy8gMCAtIGNvbW1pdCwgMSAtIHJvbGxiYWNrLCAyIC0gZG9uJ3Qga25vdwogCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgLy8gQ29udGFpbmVyIFJlcXVpcmVkIE1ldGhvZHMKICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNldFNlc3Npb25Db250ZXh0IGluIEJlYW5CIik7ICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzZXRTZXNzaW9uQ29udGV4dCBpbiBCZWFuQiIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgY3R4ID0gc2M7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CkBAIC01OSwyMyArNTksMjMgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiQ3JlYXRlIGluIEJlYW5CIik7ICAKLSAgICB9IAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYkNyZWF0ZSBpbiBCZWFuQiIpOworICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkRlc3Ryb3koKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiRGVzdHJveSBpbiBCZWFuQiIpOyAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiRGVzdHJveSBpbiBCZWFuQiIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYkFjdGl2YXRlIGluIEJlYW5CIik7ICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlamJBY3RpdmF0ZSBpbiBCZWFuQiIpOwogICAgIH0KLSAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiUGFzc2l2YXRlIGluIEJlYW5CIik7ICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlamJQYXNzaXZhdGUgaW4gQmVhbkIiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiUmVtb3ZlIGluIEJlYW5CIik7ICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlamJSZW1vdmUgaW4gQmVhbkIiKTsKICAgICB9CiAKICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTg4LDcgKzg4LDcgQEAKICAgICAgICAgU3RhdGVtZW50IHN0bXQyID0gbnVsbDsKICAgICAgICAgUmVzdWx0U2V0IHJzMSA9IG51bGw7CiAgICAgICAgIFJlc3VsdFNldCByczIgPSBudWxsOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3QxIGluIEJlYW5CIik7ICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0MSBpbiBCZWFuQiIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgY29uMSA9IGdldENvbm5lY3Rpb24oZGJVUkwxKTsKICAgICAgICAgICAgIHN0bXQxID0gY29uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKQEAgLTEzMSw3ICsxMzEsNyBAQAogICAgICAgICBTdGF0ZW1lbnQgc3RtdDIgPSBudWxsOwogICAgICAgICBSZXN1bHRTZXQgcnMxID0gbnVsbDsKICAgICAgICAgUmVzdWx0U2V0IHJzMiA9IG51bGw7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdDIgaW4gQmVhbkIiKTsgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3QyIGluIEJlYW5CIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBjb24xID0gZ2V0Q29ubmVjdGlvbihkYlVSTDEpOwogICAgICAgICAgICAgc3RtdDEgPSBjb24xLmNyZWF0ZVN0YXRlbWVudCgpOwpAQCAtMTk0LDcgKzE5NCw3IEBACiAKICAgICBwcml2YXRlIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbihTdHJpbmcgZGJVUkwpIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdldENvbm5lY3Rpb24gaW4gQmVhbkIiKTsgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdldENvbm5lY3Rpb24gaW4gQmVhbkIiKTsKICAgICAgICAgdHJ5ewogICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKGRiVVJMKTsKQEAgLTIwMyw3ICsyMDMsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgREIgQ29ubmVjdGlvbiBTdWNjZXNzZnVsbHkuLi4iKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBpbiBnZXRDb25uZWN0aW9uOiAiICsgZXgudG9TdHJpbmcoKSk7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29uOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4aHVuZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhodW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjE0MDgxZS4uY2QyZmI4MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhodW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhodW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InRyYW5zYWN0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KQEAgLTI0LDYgKzI0LDYgQEAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9InR4aHVuZyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vdHhodW5nLWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eGh1bmcvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhodW5nL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBhOWYzOGIyLi42ZWVlODk0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eGh1bmcvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4aHVuZy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMzLDkgKzMzLDkgQEAKICAgICBzdGF0dXMgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJcblN0YXJ0aW5nIFR4Z2xvYmFsIFRlc3QgU3VpdGUiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuU3RhcnRpbmcgVHhnbG9iYWwgVGVzdCBTdWl0ZSIpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogCiAgICAgICAgIC8vIHJ1biB0aGUgdGVzdHMKQEAgLTQzLDcgKzQzLDcgQEAKIAogICAgIH0KICAgICBwdWJsaWMgdm9pZCBydW5UZXN0Q2xpZW50KCkgewotCXN0YXR1cy5hZGREZXNjcmlwdGlvbigiVGhpcyBpcyB0byB0ZXN0IHRoZSBodW5nIHRyYW5zYWN0aW9uISIpOworICAgIHN0YXR1cy5hZGREZXNjcmlwdGlvbigiVGhpcyBpcyB0byB0ZXN0IHRoZSBodW5nIHRyYW5zYWN0aW9uISIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTVEFSVCIpOwogCkBAIC01OSwxMiArNTksMTIgQEAKIAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXN1bHQgPSB0LnRlc3RBMSh4YSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBGQUlMRUQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEZBSUxFRCIpOwogICAgICAgICAgICAgfSBjYXRjaCAoamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZUV4Y2VwdGlvbiIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgRkFJTEVEIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBGQUlMRUQiKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBQQVNTRUQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIFBBU1NFRCIpOwogICAgICAgICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCIiK2UuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CkBAIC03MiwxNiArNzIsMTYgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cygidHhodW5nIHRlc3RBMSAiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgICAgICB9Ci0JICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICByZXN1bHQgPSBmYWxzZTsKIAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXN1bHQgPSB0LnRlc3RBMShub254YSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBGQUlMRUQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEZBSUxFRCIpOwogICAgICAgICAgICAgfSBjYXRjaCAoamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZUV4Y2VwdGlvbiIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgRkFJTEVEIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBGQUlMRUQiKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBQQVNTRUQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIFBBU1NFRCIpOwogICAgICAgICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCIiK2UuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CkBAIC05OSw2ICs5OSw2IEBACiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoInR4aHVuZyB0ZXN0QTEgIiwgc3RhdHVzLkZBSUwpOwogICAgICAgICB9Ci0JfQotICAgIAorICAgIH0KKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhodW5nL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eGh1bmcvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCAwNDM0MjNkLi5hMGM1MjQ2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eGh1bmcvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eGh1bmcvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNjQsNyArNjQsNyBAQAogICAgIDwvc2Vzc2lvbj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgogICA8YXNzZW1ibHktZGVzY3JpcHRvcj4KLQk8Y29udGFpbmVyLXRyYW5zYWN0aW9uPgorICAgIDxjb250YWluZXItdHJhbnNhY3Rpb24+CiAgICAgICAgICAgICAgPG1ldGhvZD4KICAgICAgICAgICAgICAgICA8ZWpiLW5hbWU+VGVzdEh1bmc8L2VqYi1uYW1lPgogICAgICAgICAgICAgICAgIDxtZXRob2QtbmFtZT4qPC9tZXRob2QtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4aHVuZy9lamIvdGVzdC9UZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhodW5nL2VqYi90ZXN0L1Rlc3RCZWFuLmphdmEKaW5kZXggOWZjMDI3My4uNTM1MDU2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhodW5nL2VqYi90ZXN0L1Rlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhodW5nL2VqYi90ZXN0L1Rlc3RCZWFuLmphdmEKQEAgLTQyLDE1ICs0MiwxNSBAQAogCiAKICAgICAvLyBTZXNzaW9uQmVhbiBtZXRob2RzCi0gCi0gICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJUZXN0QmVhbiBlamJDcmVhdGUiKTsKIAotICAgIH0gICAgCi0gCisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0QmVhbiBlamJDcmVhdGUiKTsKKworICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RCZWFuIGVqYkFjdGl2YXRlIik7Ci0gICAgfSAgICAKKyAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7CiAgICAgfQpAQCAtNTgsNyArNTgsNyBAQAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKIAogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic2V0U2Vzc2lvbkNvbnRleHQgaW4gQmVhbkIiKTsKICAgICAgICAgdHJ5IHsKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgICAgIHVzZXIgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvdXNlciIpOwogICAgICAgICAgICAgcGFzc3dvcmQgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvcGFzc3dvcmQiKTsKICAgICAgICAgICAgIGRiVVJMMVhBID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2RiVVJMMS1YQSIpOwotCSAgICBkYlVSTDFOb25YQSA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9kYlVSTDEtTm9uWEEiKTsKKyAgICAgICAgZGJVUkwxTm9uWEEgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZGJVUkwxLU5vblhBIik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gaW4gc2V0U2Vzc2lvbkNvbnRleHQ6ICIgK2V4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTc4LDM1ICs3OCwzNSBAQAogCiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0QTEoYm9vbGVhbiB4YSkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7Ci0JaWYoeGEpCi0JcmVzb3VyY2UgPSBkYlVSTDFYQTsKKyAgICBpZih4YSkKKyAgICByZXNvdXJjZSA9IGRiVVJMMVhBOwogICAgICAgICBlbHNlCi0JcmVzb3VyY2UgPSBkYlVSTDFOb25YQTsKKyAgICByZXNvdXJjZSA9IGRiVVJMMU5vblhBOwogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0aW5nIHRoZSBidXNpbmVzcyBtZXRob2QgdGVzdEExIik7Ci0JcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHRydWU7CiAKICAgICB9CiAKIAogICAgIHB1YmxpYyB2b2lkIGJlZm9yZUNvbXBsZXRpb24oKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gYmVmb3JlQ29tcGxldGlvbiIpOwotICAgIAlDb25uZWN0aW9uIGNvbjEgPSBudWxsOworICAgICAgICBDb25uZWN0aW9uIGNvbjEgPSBudWxsOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluc2VydCBpbiBCZWFuQiIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgY29uMSA9IGdldENvbm5lY3Rpb24ocmVzb3VyY2UpOwogICAgICAgICAgICAgU3RhdGVtZW50IHN0bXQxID0gY29uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgU3RyaW5nIGFjYyA9ICIxMDAiOworICAgICAgICBTdHJpbmcgYWNjID0gIjEwMCI7CiAgICAgICAgICAgICBmbG9hdCBiYWwgPSA1MDAwOwogICAgICAgICAgICAgc3RtdDEuZXhlY3V0ZVVwZGF0ZSgiSU5TRVJUIElOVE8gdHhBY2NvdW50IFZBTFVFUyAoJyIgKyBhY2MgKyAiJywgIiArIGJhbCArICIpIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFjY291bnQgYWRkZWQgU3VjY2Vzc2Z1bGx5IGluICIrcmVzb3VyY2UrIi4uLiIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSb2xsaW5nIGJhY2sgdGhlIHRyYW5zYWN0aW9uIik7Ci0JICAgIGN0eC5zZXRSb2xsYmFja09ubHkoKTsKKyAgICAgICAgY3R4LnNldFJvbGxiYWNrT25seSgpOwogICAgICAgICAgICAgLy9yZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBpbiBpbnNlcnQ6ICIgKyBleC50b1N0cmluZygpKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCSAgICAvL3JldHVybiBmYWxzZTsKKyAgICAgICAgLy9yZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGNvbjEuY2xvc2UoKTsKQEAgLTE0MCw0ICsxNDAsNCBAQAogCiAKIAotfSAKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4aHVuZy9lamIvdGVzdC9UZXN0SG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhodW5nL2VqYi90ZXN0L1Rlc3RIb21lLmphdmEKaW5kZXggYTZhMmRjYi4uOWFhZDg5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhodW5nL2VqYi90ZXN0L1Rlc3RIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhodW5nL2VqYi90ZXN0L1Rlc3RIb21lLmphdmEKQEAgLTIwLDYgKzIwLDYgQEAKIGltcG9ydCBqYXZhLnJtaS4qOwogCiBwdWJsaWMgaW50ZXJmYWNlIFRlc3RIb21lIGV4dGVuZHMgRUpCSG9tZSB7Ci0gCisKICAgICBUZXN0UmVtb3RlIGNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIENyZWF0ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4aHVuZy9lamIvdGVzdC9UZXN0UmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eGh1bmcvZWpiL3Rlc3QvVGVzdFJlbW90ZS5qYXZhCmluZGV4IDIyOGMxZjQuLmNhNWQ2NzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4aHVuZy9lamIvdGVzdC9UZXN0UmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhodW5nL2VqYi90ZXN0L1Rlc3RSZW1vdGUuamF2YQpAQCAtMjAsNyArMjAsNyBAQAogaW1wb3J0IGphdmEucm1pLio7CiAKIHB1YmxpYyBpbnRlcmZhY2UgVGVzdFJlbW90ZSBleHRlbmRzIEVKQk9iamVjdCB7Ci0gCisKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0QTEoYm9vbGVhbiB4YSkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwotICAgICAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhsYW8vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4bGFvL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDg5YTNiNC4uZGE5N2EyZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhsYW8vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eGxhby9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ0cmFuc2FjdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CkBAIC0yNCw2ICsyNCw2IEBACiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJ0eGxhbyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vdHhsYW8tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImpkYmMucmVzb3VyY2UudHlwZSIgdmFsdWU9ImphdmF4LnNxbC5YQURhdGFTb3VyY2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4bGFvL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4bGFvL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA2ODgxZjkwLi5iZWJiNWJlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eGxhby9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhsYW8vY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zNCwxNSArMzQsMTUgQEAKICAgICBwdWJsaWMgQ2xpZW50KCkgewogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsgCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5TdGFydGluZyBUeGdsb2JhbCBUZXN0IFN1aXRlIik7ICAKLSAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuU3RhcnRpbmcgVHhnbG9iYWwgVGVzdCBTdWl0ZSIpOworICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogCiAgICAgICAgIC8vIGluaXRpYWxpemUgdGhlIGNvbnRleHQgYW5kIGhvbWUgb2JqZWN0CiAgICAgICAgIGNsaWVudC5zZXR1cCgpOwogCiAgICAgICAgIC8vIHJ1biB0aGUgdGVzdHMKLSAgICAgICAgY2xpZW50LnJ1blRlc3RDbGllbnQoKTsgICAKKyAgICAgICAgY2xpZW50LnJ1blRlc3RDbGllbnQoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXR1cCgpIHsKQEAgLTI1NSw3ICsyNTUsNyBAQAogICAgICAgICB9CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHRlc3RUeENvbW1pdCgpIHsKLSAgICAgICAgdHJ5IHsgIAorICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRlIEJlYW5BOjp0ZXN0VHhDb21taXQiKTsKIAogICAgICAgICAgICAgVHhSZW1vdGVBIGJlYW5BID0gaG9tZS5jcmVhdGUoKTsKQEAgLTI2Myw3ICsyNjMsNyBAQAogCiAgICAgICAgICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cygidHhsYW8gdGVzdFR4Q29tbWl0OiAiLCBzdGF0dXMuUEFTUyk7Ci0gICAgICAgICAgICB9IGVsc2UgewkgCisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoInR4bGFvIHRlc3RUeENvbW1pdDogIiwgc3RhdHVzLkZBSUwpOwogICAgICAgICAgICAgfQogCkBAIC0yNzYsNyArMjc2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0VHhSb2xsYmFjaygpIHsKLSAgICAgICAgdHJ5IHsgIAorICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRlIEJlYW5BOjp0ZXN0VHhSb2xsYmFjayIpOwogCiAgICAgICAgICAgICBUeFJlbW90ZUEgYmVhbkEgPSBob21lLmNyZWF0ZSgpOwpAQCAtMjg0LDcgKzI4NCw3IEBACiAKICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKCJ0eGxhbyB0ZXN0VHhSb2xsYmFjazogIiwgc3RhdHVzLlBBU1MpOwotICAgICAgICAgICAgfSBlbHNlIHsJIAorICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKCJ0eGxhbyB0ZXN0VHhSb2xsYmFjazogIiwgc3RhdHVzLkZBSUwpOwogICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eGxhby9lamIvYmVhbkEvVHhCZWFuQS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhsYW8vZWpiL2JlYW5BL1R4QmVhbkEuamF2YQppbmRleCBhZWNhMDMzLi41OTNiYzYyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eGxhby9lamIvYmVhbkEvVHhCZWFuQS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4bGFvL2VqYi9iZWFuQS9UeEJlYW5BLmphdmEKQEAgLTU1LDcgKzU1LDcgQEAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiUmVtb3ZlIGluIEJlYW5BIik7CiAgICAgfQotICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkRlc3Ryb3koKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiRGVzdHJveSBpbiBCZWFuQSIpOwogICAgIH0KQEAgLTQyMCw3ICs0MjAsNyBAQAogICAgICAgICAgICAgaWYgKCAoYmVhbkIgPT0gbnVsbCkgfHwgKHR4ID09IG51bGwpICkgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgfQotICAgICAKKwogICAgICAgICAgICAgdHguYmVnaW4oKTsKICAgICAgICAgICAgIGJlYW5CLmRlbGV0ZSgiQTEwMDEiKTsKICAgICAgICAgICAgIGJlYW5CLmluc2VydCgiQTEwMDMiLCA4MDAwKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4bGFvL2VqYi9iZWFuQi9UeEJlYW5CLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eGxhby9lamIvYmVhbkIvVHhCZWFuQi5qYXZhCmluZGV4IDE0NDQ0N2YuLjE3ODkyMGYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4bGFvL2VqYi9iZWFuQi9UeEJlYW5CLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhsYW8vZWpiL2JlYW5CL1R4QmVhbkIuamF2YQpAQCAtNTA4LDcgKzUwOCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBEQiBDb25uZWN0aW9uIFN1Y2Nlc3NmdWxseS4uLiIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIGluIGdldENvbm5lY3Rpb246ICIgKyBleC50b1N0cmluZygpKTsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb247CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhuZWdhdGl2ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhuZWdhdGl2ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGMzZmZkMmEuLmVkYTQzYmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4bmVnYXRpdmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eG5lZ2F0aXZlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InRyYW5zYWN0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KQEAgLTI0LDYgKzI0LDYgQEAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9InR4bmVnYXRpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9L3R4bmVnYXRpdmUtY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImpkYmMucmVzb3VyY2UudHlwZSIgdmFsdWU9ImphdmF4LnNxbC5YQURhdGFTb3VyY2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4bmVnYXRpdmUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhuZWdhdGl2ZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOTAwOWQ0Ny4uN2NhNThhNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhuZWdhdGl2ZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhuZWdhdGl2ZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTM2LDEzICszNiwxMyBAQAogICAgIHRyeXsKICAgICB1c2VyVHJhbnNhY3Rpb24gPSAoVXNlclRyYW5zYWN0aW9uKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Y29tcC9Vc2VyVHJhbnNhY3Rpb24iKTsKICAgICB9Y2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0gICAgCWV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICB9CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJcblN0YXJ0aW5nIFR4Z2xvYmFsIFRlc3QgU3VpdGUiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuU3RhcnRpbmcgVHhnbG9iYWwgVGVzdCBTdWl0ZSIpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogCiAgICAgICAgIC8vIHJ1biB0aGUgdGVzdHMKQEAgLTUwLDcgKzUwLDcgQEAKIAogICAgIH0KICAgICBwdWJsaWMgdm9pZCBydW5UZXN0Q2xpZW50KCkgewotCXN0YXR1cy5hZGREZXNjcmlwdGlvbigiVGhpcyBpcyB0byB0ZXN0IHRoZSB2YWxpZCB0cmFuc2FjdGlvbiBleGNlcHRpb24hIik7CisgICAgc3RhdHVzLmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgdGhlIHZhbGlkIHRyYW5zYWN0aW9uIGV4Y2VwdGlvbiEiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1RBUlQiKTsKIApAQCAtNjYsMjggKzY2LDI4IEBACiAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdC50ZXN0QTEoeGEpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgRkFJTEVEIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBGQUlMRUQiKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVFeGNlcHRpb24iKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEZBSUxFRCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgRkFJTEVEIik7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgUEFTU0VEIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBQQVNTRUQiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cygidHhuZWdhdGl2ZSB0ZXN0QTEgIiwgc3RhdHVzLlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKCJ0eG5lZ2F0aXZlIHRlc3RBMSAiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgICAgICB9Ci0JICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICByZXN1bHQgPSBmYWxzZTsKIAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXN1bHQgPSB0LnRlc3RBMShub254YSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBGQUlMRUQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEZBSUxFRCIpOwogICAgICAgICAgICAgfSBjYXRjaCAoamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZUV4Y2VwdGlvbiIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgRkFJTEVEIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBGQUlMRUQiKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBQQVNTRUQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIFBBU1NFRCIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKCJ0eG5lZ2F0aXZlIHRlc3RBMiAiLCBzdGF0dXMuUEFTUyk7CkBAIC05Nyw4MyArOTcsODMgQEAKICAgICAgICAgICAgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOwogCiAgICAgICAgICAgICB0cnkgewotCQl1c2VyVHJhbnNhY3Rpb24uYmVnaW4oKTsKLQkJdXNlclRyYW5zYWN0aW9uLmJlZ2luKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBGQUlMRUQiKTsKKyAgICAgICAgdXNlclRyYW5zYWN0aW9uLmJlZ2luKCk7CisgICAgICAgIHVzZXJUcmFuc2FjdGlvbi5iZWdpbigpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgRkFJTEVEIik7CiAgICAgICAgICAgICB9IGNhdGNoIChOb3RTdXBwb3J0ZWRFeGNlcHRpb24gbmUpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vdFN1cHBvcnRlZEV4Y2VwdGlvbiIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgUEFTU0VEIik7Ci0JCXJlc3VsdCA9IHRydWU7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBQQVNTRUQiKTsKKyAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFN5c3RlbUV4Y2VwdGlvbiBuZSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3lzdGVtRXhjZXB0aW9uIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBQQVNTRUQiKTsKLQkJcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIFBBU1NFRCIpOworICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEZBSUxFRCIpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgRkFJTEVEIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cygidHhuZWdhdGl2ZSB0MSAiLCBzdGF0dXMuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoInR4bmVnYXRpdmUgdDEgIiwgc3RhdHVzLkZBSUwpOwogICAgICAgICAgICAgfQotCSAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICB0cnkgewotCQl1c2VyVHJhbnNhY3Rpb24uY29tbWl0KCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBGQUlMRUQiKTsKKyAgICAgICAgdXNlclRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgRkFJTEVEIik7CiAgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gbmUpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIklsbGVnYWxTdGF0ZUV4Y2VwdGlvbiIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgUEFTU0VEIik7Ci0JCXJlc3VsdCA9IHRydWU7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBQQVNTRUQiKTsKKyAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFN5c3RlbUV4Y2VwdGlvbiBuZSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3lzdGVtRXhjZXB0aW9uIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBQQVNTRUQiKTsKLQkJcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIFBBU1NFRCIpOworICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEZBSUxFRCIpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgRkFJTEVEIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cygidHhuZWdhdGl2ZSB0MiAiLCBzdGF0dXMuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoInR4bmVnYXRpdmUgdDIgIiwgc3RhdHVzLkZBSUwpOwogICAgICAgICAgICAgfQotCSAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICB0cnkgewotCQl1c2VyVHJhbnNhY3Rpb24ucm9sbGJhY2soKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEZBSUxFRCIpOworICAgICAgICB1c2VyVHJhbnNhY3Rpb24ucm9sbGJhY2soKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEZBSUxFRCIpOwogICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIG5lKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbGxlZ2FsU3RhdGVFeGNlcHRpb24iKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJURVNUIFBBU1NFRCIpOwotCQlyZXN1bHQgPSB0cnVlOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgUEFTU0VEIik7CisgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICB9IGNhdGNoIChTeXN0ZW1FeGNlcHRpb24gbmUpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN5c3RlbUV4Y2VwdGlvbiIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgUEFTU0VEIik7Ci0JCXJlc3VsdCA9IHRydWU7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBQQVNTRUQiKTsKKyAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBGQUlMRUQiKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEZBSUxFRCIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoInR4bmVnYXRpdmUgdDMgIiwgc3RhdHVzLlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKCJ0eG5lZ2F0aXZlIHQzICIsIHN0YXR1cy5GQUlMKTsKICAgICAgICAgICAgIH0KLQkgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgdHJ5IHsKLQkJdXNlclRyYW5zYWN0aW9uLnNldFJvbGxiYWNrT25seSgpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgRkFJTEVEIik7CisgICAgICAgIHVzZXJUcmFuc2FjdGlvbi5zZXRSb2xsYmFja09ubHkoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEZBSUxFRCIpOwogICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIG5lKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbGxlZ2FsU3RhdGVFeGNlcHRpb24iKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJURVNUIFBBU1NFRCIpOwotCQlyZXN1bHQgPSB0cnVlOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgUEFTU0VEIik7CisgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICB9IGNhdGNoIChTeXN0ZW1FeGNlcHRpb24gbmUpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN5c3RlbUV4Y2VwdGlvbiIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgUEFTU0VEIik7Ci0JCXJlc3VsdCA9IHRydWU7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBQQVNTRUQiKTsKKyAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBGQUlMRUQiKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEZBSUxFRCIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoInR4bmVnYXRpdmUgdDQgIiwgc3RhdHVzLlBBU1MpOwpAQCAtMTkxLDYgKzE5MSw2IEBACiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoInR4bmVnYXRpdmUgdGVzdEExICIsIHN0YXR1cy5GQUlMKTsKICAgICAgICAgfQotCX0KLSAgICAKKyAgICB9CisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4bmVnYXRpdmUvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4bmVnYXRpdmUvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCAwNDM0MjNkLi5hMGM1MjQ2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eG5lZ2F0aXZlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhuZWdhdGl2ZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC02NCw3ICs2NCw3IEBACiAgICAgPC9zZXNzaW9uPgogICA8L2VudGVycHJpc2UtYmVhbnM+CiAgIDxhc3NlbWJseS1kZXNjcmlwdG9yPgotCTxjb250YWluZXItdHJhbnNhY3Rpb24+CisgICAgPGNvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgICAgICAgICAgICA8bWV0aG9kPgogICAgICAgICAgICAgICAgIDxlamItbmFtZT5UZXN0SHVuZzwvZWpiLW5hbWU+CiAgICAgICAgICAgICAgICAgPG1ldGhvZC1uYW1lPio8L21ldGhvZC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhzdHJlc3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4c3RyZXNzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjI2ZWUyMi4uY2U1ZGQxMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhzdHJlc3MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eHN0cmVzcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ0cmFuc2FjdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eHN0cmVzcy9lamIvYmVhbkIvVHhCZWFuQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhzdHJlc3MvZWpiL2JlYW5CL1R4QmVhbkIuamF2YQppbmRleCBkZWJlMmY2Li4wZTZkNmVkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eHN0cmVzcy9lamIvYmVhbkIvVHhCZWFuQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4c3RyZXNzL2VqYi9iZWFuQi9UeEJlYW5CLmphdmEKQEAgLTEyMSw3ICsxMjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJywgIiArIGJhbCArICIpIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWNjb3VudCBhZGRlZCBTdWNjZXNzZnVsbHkgaW4gREIyLi4uIik7CiAgICAgICAgIHN0bXQxLmNsb3NlKCk7Ci0JICAgIGNvbjEuY2xvc2UoKTsKKyAgICAgICAgY29uMS5jbG9zZSgpOwogICAgICAgICBzdG10Mi5jbG9zZSgpOwogICAgICAgICBjb24yLmNsb3NlKCk7CiAgICAgICAgIHR4LmNvbW1pdCgpOwpAQCAtMTMzLDcgKzEzMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIicsICIgKyBiYWwgKyAiKSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFjY291bnQgYWRkZWQgU3VjY2Vzc2Z1bGx5IGluIERCMS4uLiIpOwogICAgICAgICBzdG10Mi5jbG9zZSgpOwotCSAgICBjb24yLmNsb3NlKCk7CisgICAgICAgIGNvbjIuY2xvc2UoKTsKICAgICAgICAgdHguY29tbWl0KCk7CiAgICAgICAgIHR4LmJlZ2luKCk7CiAgICAgICAgIGNvbjEgPSBnZXRDb25uZWN0aW9uKGRiVVJMMSx1c2VyMSxwYXNzd29yZDEpOwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBEQiBDb25uZWN0aW9uIFN1Y2Nlc3NmdWxseS4uLiIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIGluIGdldENvbm5lY3Rpb246ICIgKyBleC50b1N0cmluZygpKTsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb247CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhzdHJlc3Mvc2VydmxldC9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhzdHJlc3Mvc2VydmxldC9IZWxsby5qYXZhCmluZGV4IDZlY2VkMGUuLjI5YTA1OTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4c3RyZXNzL3NlcnZsZXQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eHN0cmVzcy9zZXJ2bGV0L0hlbGxvLmphdmEKQEAgLTg2LDQ1ICs4Niw0NSBAQAogICAgICAgICB9CiAKIAotCXJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKLQlQcmludFdyaXRlciB3cml0ZXIgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKKyAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisgICAgUHJpbnRXcml0ZXIgd3JpdGVyID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CiAKLQl3cml0ZXIucHJpbnRsbigiPGh0bWw+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjxoZWFkPiIpOwotCXdyaXRlci5wcmludGxuKCI8dGl0bGU+U2FtcGxlIFRyYW5zYWN0aW9uIFN0cmVzcyBUZXN0IEFwcGxpY2F0aW9uPC90aXRsZT4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC9oZWFkPiIpOwotCXdyaXRlci5wcmludGxuKCI8Ym9keSBiZ2NvbG9yPXdoaXRlPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8aHRtbD4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPGhlYWQ+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjx0aXRsZT5TYW1wbGUgVHJhbnNhY3Rpb24gU3RyZXNzIFRlc3QgQXBwbGljYXRpb248L3RpdGxlPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L2hlYWQ+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjxib2R5IGJnY29sb3I9d2hpdGU+Iik7CiAKLQl3cml0ZXIucHJpbnRsbigiPHRhYmxlIGJvcmRlcj1cIjBcIj4iKTsKLQl3cml0ZXIucHJpbnRsbigiPHRyPiIpOwotCXdyaXRlci5wcmludGxuKCI8dGQ+Iik7Ci0JLy93cml0ZXIucHJpbnRsbigiPGltZyBzcmM9XCJpbWFnZXMvdG9tY2F0LmdpZlwiPiIpOwotCXdyaXRlci5wcmludGxuKCI8L3RkPiIpOwotCXdyaXRlci5wcmludGxuKCI8dGQ+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjxoMT5TYW1wbGUgVHJhbnNhY3Rpb24gU3RyZXNzIFRlc3QgQXBwbGljYXRpb248L2gxPiIpOwotCXdyaXRlci5wcmludGxuKCJUaGlzIGlzIHRoZSBvdXRwdXQgb2YgYSBzZXJ2bGV0IHRoYXQgaXMgcGFydCBvZiIpOwotCXdyaXRlci5wcmludGxuKCJ0aGUgSGVsbG8sIFdvcmxkIGFwcGxpY2F0aW9uLiAgSXQgZGlzcGxheXMgdGhlIik7Ci0Jd3JpdGVyLnByaW50bG4oIk51bWJlciB0aGF0IHlvdSBpbnB1dC4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC90ZD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC90cj4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC90YWJsZT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPHRhYmxlIGJvcmRlcj1cIjBcIj4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPHRyPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8dGQ+Iik7CisgICAgLy93cml0ZXIucHJpbnRsbigiPGltZyBzcmM9XCJpbWFnZXMvdG9tY2F0LmdpZlwiPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L3RkPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8dGQ+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjxoMT5TYW1wbGUgVHJhbnNhY3Rpb24gU3RyZXNzIFRlc3QgQXBwbGljYXRpb248L2gxPiIpOworICAgIHdyaXRlci5wcmludGxuKCJUaGlzIGlzIHRoZSBvdXRwdXQgb2YgYSBzZXJ2bGV0IHRoYXQgaXMgcGFydCBvZiIpOworICAgIHdyaXRlci5wcmludGxuKCJ0aGUgSGVsbG8sIFdvcmxkIGFwcGxpY2F0aW9uLiAgSXQgZGlzcGxheXMgdGhlIik7CisgICAgd3JpdGVyLnByaW50bG4oIk51bWJlciB0aGF0IHlvdSBpbnB1dC4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPC90ZD4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPC90cj4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPC90YWJsZT4iKTsKIAotCXdyaXRlci5wcmludGxuKCI8dGFibGUgYm9yZGVyPVwiMFwiIHdpZHRoPVwiMTAwJVwiPiIpOwotCS8qRW51bWVyYXRpb24gbmFtZXMgPSByZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7Ci0Jd2hpbGUgKG5hbWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JICAgIFN0cmluZyBuYW1lID0gKFN0cmluZykgbmFtZXMubmV4dEVsZW1lbnQoKTsKLQkgICAgd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKLQkgICAgd3JpdGVyLnByaW50bG4oIiAgPHRoIGFsaWduPVwicmlnaHRcIj4iICsgbmFtZSArICI6PC90aD4iKTsKLQkgICAgd3JpdGVyLnByaW50bG4oIiAgPHRkPiIgKyByZXF1ZXN0LmdldEhlYWRlcihuYW1lKSArICI8L3RkPiIpOwotCSAgICB3cml0ZXIucHJpbnRsbigiPC90cj4iKTsKLQl9Ki8KLQkgICAgd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKLQkgICAgd3JpdGVyLnByaW50bG4oIiAgPHRkPiIgKyAiVmFsdWUgc3VwcGxpZWQgYXMgSW5wdXQgcGFyYW0gaXMgIiArIGlkZW50aXR5KyI8L3RkPiIpOwotCSAgICB3cml0ZXIucHJpbnRsbigiPC90cj4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC90YWJsZT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPHRhYmxlIGJvcmRlcj1cIjBcIiB3aWR0aD1cIjEwMCVcIj4iKTsKKyAgICAvKkVudW1lcmF0aW9uIG5hbWVzID0gcmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworICAgIHdoaWxlIChuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpIG5hbWVzLm5leHRFbGVtZW50KCk7CisgICAgICAgIHdyaXRlci5wcmludGxuKCI8dHI+Iik7CisgICAgICAgIHdyaXRlci5wcmludGxuKCIgIDx0aCBhbGlnbj1cInJpZ2h0XCI+IiArIG5hbWUgKyAiOjwvdGg+Iik7CisgICAgICAgIHdyaXRlci5wcmludGxuKCIgIDx0ZD4iICsgcmVxdWVzdC5nZXRIZWFkZXIobmFtZSkgKyAiPC90ZD4iKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIjwvdHI+Iik7CisgICAgfSovCisgICAgICAgIHdyaXRlci5wcmludGxuKCI8dHI+Iik7CisgICAgICAgIHdyaXRlci5wcmludGxuKCIgIDx0ZD4iICsgIlZhbHVlIHN1cHBsaWVkIGFzIElucHV0IHBhcmFtIGlzICIgKyBpZGVudGl0eSsiPC90ZD4iKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIjwvdHI+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjwvdGFibGU+Iik7CiAKLQl3cml0ZXIucHJpbnRsbigiPC9ib2R5PiIpOwotCXdyaXRlci5wcmludGxuKCI8L2h0bWw+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjwvYm9keT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPC9odG1sPiIpOwogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eHN0cmVzc3JlYWRvbmx5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eHN0cmVzc3JlYWRvbmx5L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNmY4MmFiNC4uYmJjOTFkOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhzdHJlc3NyZWFkb25seS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4c3RyZXNzcmVhZG9ubHkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0idHJhbnNhY3Rpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhzdHJlc3NyZWFkb25seS9lamIvYmVhbkIvVHhCZWFuQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhzdHJlc3NyZWFkb25seS9lamIvYmVhbkIvVHhCZWFuQi5qYXZhCmluZGV4IDg1MzI0YjcuLjhkMjk1NTEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4c3RyZXNzcmVhZG9ubHkvZWpiL2JlYW5CL1R4QmVhbkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eHN0cmVzc3JlYWRvbmx5L2VqYi9iZWFuQi9UeEJlYW5CLmphdmEKQEAgLTExOSw3ICsxMTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJywgIiArIGJhbCArICIpIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWNjb3VudCBhZGRlZCBTdWNjZXNzZnVsbHkgaW4gREIyLi4uIik7CiAgICAgICAgIHN0bXQxLmNsb3NlKCk7Ci0JICAgIGNvbjEuY2xvc2UoKTsKKyAgICAgICAgY29uMS5jbG9zZSgpOwogICAgICAgICBzdG10Mi5jbG9zZSgpOwogICAgICAgICBjb24yLmNsb3NlKCk7CiAgICAgICAgIHR4LmNvbW1pdCgpOwpAQCAtMTU2LDcgKzE1Niw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBEQiBDb25uZWN0aW9uIFN1Y2Nlc3NmdWxseS4uLiIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIGluIGdldENvbm5lY3Rpb246ICIgKyBleC50b1N0cmluZygpKTsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb247CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhzdHJlc3NyZWFkb25seS9lamIvYmVhbkIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4c3RyZXNzcmVhZG9ubHkvZWpiL2JlYW5CL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNmY4MmFiNC4uYmJjOTFkOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhzdHJlc3NyZWFkb25seS9lamIvYmVhbkIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eHN0cmVzc3JlYWRvbmx5L2VqYi9iZWFuQi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ0cmFuc2FjdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eHN0cmVzc3JlYWRvbmx5L3NlcnZsZXQvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4c3RyZXNzcmVhZG9ubHkvc2VydmxldC9IZWxsby5qYXZhCmluZGV4IDY1ZmY5YmMuLjM3NTFmZDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4c3RyZXNzcmVhZG9ubHkvc2VydmxldC9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4c3RyZXNzcmVhZG9ubHkvc2VydmxldC9IZWxsby5qYXZhCkBAIC04Miw0NSArODIsNDUgQEAKICAgICAgICAgfQogCiAKLQlyZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7Ci0JUHJpbnRXcml0ZXIgd3JpdGVyID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CisgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgIFByaW50V3JpdGVyIHdyaXRlciA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogCi0Jd3JpdGVyLnByaW50bG4oIjxodG1sPiIpOwotCXdyaXRlci5wcmludGxuKCI8aGVhZD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPHRpdGxlPlNhbXBsZSBUcmFuc2FjdGlvbiBTdHJlc3MgVGVzdCBBcHBsaWNhdGlvbjwvdGl0bGU+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjwvaGVhZD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPGJvZHkgYmdjb2xvcj13aGl0ZT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPGh0bWw+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjxoZWFkPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8dGl0bGU+U2FtcGxlIFRyYW5zYWN0aW9uIFN0cmVzcyBUZXN0IEFwcGxpY2F0aW9uPC90aXRsZT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPC9oZWFkPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8Ym9keSBiZ2NvbG9yPXdoaXRlPiIpOwogCi0Jd3JpdGVyLnByaW50bG4oIjx0YWJsZSBib3JkZXI9XCIwXCI+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKLQl3cml0ZXIucHJpbnRsbigiPHRkPiIpOwotCS8vd3JpdGVyLnByaW50bG4oIjxpbWcgc3JjPVwiaW1hZ2VzL3RvbWNhdC5naWZcIj4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC90ZD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPHRkPiIpOwotCXdyaXRlci5wcmludGxuKCI8aDE+U2FtcGxlIFRyYW5zYWN0aW9uIFN0cmVzcyBUZXN0IEFwcGxpY2F0aW9uPC9oMT4iKTsKLQl3cml0ZXIucHJpbnRsbigiVGhpcyBpcyB0aGUgb3V0cHV0IG9mIGEgc2VydmxldCB0aGF0IGlzIHBhcnQgb2YiKTsKLQl3cml0ZXIucHJpbnRsbigidGhlIEhlbGxvLCBXb3JsZCBhcHBsaWNhdGlvbi4gIEl0IGRpc3BsYXlzIHRoZSIpOwotCXdyaXRlci5wcmludGxuKCJOdW1iZXIgdGhhdCB5b3UgaW5wdXQuIik7Ci0Jd3JpdGVyLnByaW50bG4oIjwvdGQ+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjwvdHI+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjwvdGFibGU+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjx0YWJsZSBib3JkZXI9XCIwXCI+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPHRkPiIpOworICAgIC8vd3JpdGVyLnByaW50bG4oIjxpbWcgc3JjPVwiaW1hZ2VzL3RvbWNhdC5naWZcIj4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPC90ZD4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPHRkPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8aDE+U2FtcGxlIFRyYW5zYWN0aW9uIFN0cmVzcyBUZXN0IEFwcGxpY2F0aW9uPC9oMT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiVGhpcyBpcyB0aGUgb3V0cHV0IG9mIGEgc2VydmxldCB0aGF0IGlzIHBhcnQgb2YiKTsKKyAgICB3cml0ZXIucHJpbnRsbigidGhlIEhlbGxvLCBXb3JsZCBhcHBsaWNhdGlvbi4gIEl0IGRpc3BsYXlzIHRoZSIpOworICAgIHdyaXRlci5wcmludGxuKCJOdW1iZXIgdGhhdCB5b3UgaW5wdXQuIik7CisgICAgd3JpdGVyLnByaW50bG4oIjwvdGQ+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjwvdHI+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjwvdGFibGU+Iik7CiAKLQl3cml0ZXIucHJpbnRsbigiPHRhYmxlIGJvcmRlcj1cIjBcIiB3aWR0aD1cIjEwMCVcIj4iKTsKLQkvKkVudW1lcmF0aW9uIG5hbWVzID0gcmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOwotCXdoaWxlIChuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSkgewotCSAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpIG5hbWVzLm5leHRFbGVtZW50KCk7Ci0JICAgIHdyaXRlci5wcmludGxuKCI8dHI+Iik7Ci0JICAgIHdyaXRlci5wcmludGxuKCIgIDx0aCBhbGlnbj1cInJpZ2h0XCI+IiArIG5hbWUgKyAiOjwvdGg+Iik7Ci0JICAgIHdyaXRlci5wcmludGxuKCIgIDx0ZD4iICsgcmVxdWVzdC5nZXRIZWFkZXIobmFtZSkgKyAiPC90ZD4iKTsKLQkgICAgd3JpdGVyLnByaW50bG4oIjwvdHI+Iik7Ci0JfSovCi0JICAgIHdyaXRlci5wcmludGxuKCI8dHI+Iik7Ci0JICAgIHdyaXRlci5wcmludGxuKCIgIDx0ZD4iICsgIlZhbHVlIHN1cHBsaWVkIGFzIElucHV0IHBhcmFtIGlzICIgKyBpZGVudGl0eSsiPC90ZD4iKTsKLQkgICAgd3JpdGVyLnByaW50bG4oIjwvdHI+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjwvdGFibGU+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjx0YWJsZSBib3JkZXI9XCIwXCIgd2lkdGg9XCIxMDAlXCI+Iik7CisgICAgLypFbnVtZXJhdGlvbiBuYW1lcyA9IHJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKyAgICB3aGlsZSAobmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKSBuYW1lcy5uZXh0RWxlbWVudCgpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiPHRyPiIpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiICA8dGggYWxpZ249XCJyaWdodFwiPiIgKyBuYW1lICsgIjo8L3RoPiIpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiICA8dGQ+IiArIHJlcXVlc3QuZ2V0SGVhZGVyKG5hbWUpICsgIjwvdGQ+Iik7CisgICAgICAgIHdyaXRlci5wcmludGxuKCI8L3RyPiIpOworICAgIH0qLworICAgICAgICB3cml0ZXIucHJpbnRsbigiPHRyPiIpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiICA8dGQ+IiArICJWYWx1ZSBzdXBwbGllZCBhcyBJbnB1dCBwYXJhbSBpcyAiICsgaWRlbnRpdHkrIjwvdGQ+Iik7CisgICAgICAgIHdyaXRlci5wcmludGxuKCI8L3RyPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L3RhYmxlPiIpOwogCi0Jd3JpdGVyLnByaW50bG4oIjwvYm9keT4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC9odG1sPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L2JvZHk+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjwvaHRtbD4iKTsKIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdCYWRSZXF1ZXN0cy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0JhZFJlcXVlc3RzL1dlYlRlc3QuamF2YQppbmRleCA2MTQ1OWE2Li4yNDY2MWM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0JhZFJlcXVlc3RzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0JhZFJlcXVlc3RzL1dlYlRlc3QuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogLyoqCiAgKiBVbml0IHRlc3QgZm9yOgogICoKLSAqICAgaHR0cHM6Ly9idWcub3JhY2xlY29ycC5jb20vcGxzL2J1Zy93ZWJidWdfcHJpbnQuc2hvdz9jX3JwdG5vPTEyMzAzMjMyIAorICogICBodHRwczovL2J1Zy5vcmFjbGVjb3JwLmNvbS9wbHMvYnVnL3dlYmJ1Z19wcmludC5zaG93P2NfcnB0bm89MTIzMDMyMzIKICAqICAgKCJBQ0NFU1MgTE9HIERPRVMgTk9UIFJFQ09SRCBSRVFVRVNUUyBUSEFUIEZBSUwgV0lUSCBBTiBIVFRQIDQwMCBFUlJPUiIpCiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKQEAgLTM3LDE0ICszNywxNCBAQAogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIGxvY2F0aW9uID0gYXJnc1szXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogICAgICAgICB3ZWJUZXN0LmRvVGVzdCgpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTg1LDYgKzg1LDYgQEAKICAgICAgICAgICAgICAgICAvLyBpZ25vcmUKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nQmFkUmVxdWVzdHMvV2ViVGVzdDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nQmFkUmVxdWVzdHMvV2ViVGVzdDIuamF2YQppbmRleCAzMzlkYjNhLi42MTdhYTAwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0JhZFJlcXVlc3RzL1dlYlRlc3QyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdCYWRSZXF1ZXN0cy9XZWJUZXN0Mi5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAvKioKICAqIFVuaXQgdGVzdCBmb3I6CiAgKgotICogICBodHRwczovL2J1Zy5vcmFjbGVjb3JwLmNvbS9wbHMvYnVnL3dlYmJ1Z19wcmludC5zaG93P2NfcnB0bm89MTIzMDMyMzIgCisgKiAgIGh0dHBzOi8vYnVnLm9yYWNsZWNvcnAuY29tL3Bscy9idWcvd2ViYnVnX3ByaW50LnNob3c/Y19ycHRubz0xMjMwMzIzMgogICogICAoIkFDQ0VTUyBMT0cgRE9FUyBOT1QgUkVDT1JEIFJFUVVFU1RTIFRIQVQgRkFJTCBXSVRIIEFOIEhUVFAgNDAwIEVSUk9SIikKICAqLwogCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICAgICAgbG9jYXRpb24gPSBhcmdzWzNdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgMTIzMDMyMzIiKTsKICAgICAgICAgV2ViVGVzdDIgd2ViVGVzdCA9IG5ldyBXZWJUZXN0MihhcmdzKTsKQEAgLTUzLDggKzUzLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNjQsNyArNjQsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiL0NoZWNrQWNjZXNzTG9nP2xvY2F0aW9uPSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBVUkxFbmNvZGVyLmVuY29kZShsb2NhdGlvbikpOwpAQCAtNzIsNyArNzIsNyBAQAogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdCYWRSZXF1ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdCYWRSZXF1ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGE5YTgwNTcuLmU0NmRiNjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nQmFkUmVxdWVzdHMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0JhZFJlcXVlc3RzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tYWNjZXNzLWxvZ2dpbmctYmFkLXJlcXVlc3RzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0JhZFJlcXVlc3RzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nQmFkUmVxdWVzdHMvYnVpbGQueG1sCmluZGV4IGZiNjU1M2IuLmI2ZDJjZmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nQmFkUmVxdWVzdHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nQmFkUmVxdWVzdHMvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwxNiArNDgsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QqIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJlbmFibGUtYWNjZXNzLWxvZ2dpbmciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxkZWxldGUgZGlyPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9sb2dzL2FjY2VzcyIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTEwMSwxMCArMTAxLDEwIEBACiAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGlzYWJsZS1hY2Nlc3MtbG9nZ2luZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0JhZFJlcXVlc3RzL3NlcnZsZXQvQ2hlY2tBY2Nlc3NMb2cuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nQmFkUmVxdWVzdHMvc2VydmxldC9DaGVja0FjY2Vzc0xvZy5qYXZhCmluZGV4IDVkOTAxM2IuLmYyZWM5YWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nQmFkUmVxdWVzdHMvc2VydmxldC9DaGVja0FjY2Vzc0xvZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nQmFkUmVxdWVzdHMvc2VydmxldC9DaGVja0FjY2Vzc0xvZy5qYXZhCkBAIC00Miw2ICs0Miw2IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0R5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0R5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEKaW5kZXggNWFjMWI2YS4uOTI3ZTdlYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdEeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nRHluYW1pY1JlY29uZmlnL1dlYlRlc3QuamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIGxvY2F0aW9uID0gYXJnc1szXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDMzOTgiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01Myw4ICs1Myw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTY0LDcgKzY0LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIi9DaGVja0FjY2Vzc0xvZz9sb2NhdGlvbj0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgVVJMRW5jb2Rlci5lbmNvZGUobG9jYXRpb24pKTsKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nRHluYW1pY1JlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0R5bmFtaWNSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQyYWE1ZTIuLmZiNWUwMmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nRHluYW1pY1JlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdEeW5hbWljUmVjb25maWcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1hY2Nlc3MtbG9nZ2luZy1keW5hbWljLXJlY29uZmlnIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0R5bmFtaWNSZWNvbmZpZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0R5bmFtaWNSZWNvbmZpZy9idWlsZC54bWwKaW5kZXggNDIwMTdjMy4uNDJjMWZkZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdEeW5hbWljUmVjb25maWcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nRHluYW1pY1JlY29uZmlnL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImVuYWJsZS1hY2Nlc3MtbG9nZ2luZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGRlbGV0ZSBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2xvZ3MvYWNjZXNzIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KQEAgLTY4LDcgKzY4LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODEsMTAgKzgxLDEwIEBACiAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGlzYWJsZS1hY2Nlc3MtbG9nZ2luZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0R5bmFtaWNSZWNvbmZpZy9zZXJ2bGV0L0NoZWNrQWNjZXNzTG9nLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0R5bmFtaWNSZWNvbmZpZy9zZXJ2bGV0L0NoZWNrQWNjZXNzTG9nLmphdmEKaW5kZXggYTg1OTIxMi4uNjQ0MjIxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdEeW5hbWljUmVjb25maWcvc2VydmxldC9DaGVja0FjY2Vzc0xvZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nRHluYW1pY1JlY29uZmlnL3NlcnZsZXQvQ2hlY2tBY2Nlc3NMb2cuamF2YQpAQCAtMjcsNiArMjcsNiBAQAogICAgICAgICBTdHJpbmdbXSBmaWxlcyA9IG5ldyBGaWxlKGxvY2F0aW9uICsgIi9kb21haW5zL2RvbWFpbjEvbG9ncy9hY2Nlc3MiKS5saXN0KCk7CiAgICAgICAgIGlmIChmaWxlcyAhPSBudWxsICYmIGZpbGVzLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgICAgICByZXNwLmdldFdyaXRlcigpLnByaW50bG4oIlNVQ0NFU1MhIik7Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ1dyaXRlSW50ZXJ2YWxTZWNvbmRzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nV3JpdGVJbnRlcnZhbFNlY29uZHMvV2ViVGVzdC5qYXZhCmluZGV4IDJmNGQyZmQuLjUwMWEyZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nV3JpdGVJbnRlcnZhbFNlY29uZHMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nV3JpdGVJbnRlcnZhbFNlY29uZHMvV2ViVGVzdC5qYXZhCkBAIC0zNywxNCArMzcsMTQgQEAKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgICAgICBsb2NhdGlvbiA9IGFyZ3NbM107CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKICAgICAgICAgd2ViVGVzdC5kb1Rlc3QoKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC01MiwxNCArNTIsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIi9pbmRleC5qc3AiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdXcml0ZUludGVydmFsU2Vjb25kcy9XZWJUZXN0Mi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdXcml0ZUludGVydmFsU2Vjb25kcy9XZWJUZXN0Mi5qYXZhCmluZGV4IDVkYjk5OTUuLjNjMjU1NDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nV3JpdGVJbnRlcnZhbFNlY29uZHMvV2ViVGVzdDIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ1dyaXRlSW50ZXJ2YWxTZWNvbmRzL1dlYlRlc3QyLmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgICAgICBsb2NhdGlvbiA9IGFyZ3NbM107CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSAxMzQ1MCIpOwogICAgICAgICBXZWJUZXN0MiB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QyKGFyZ3MpOwpAQCAtNTMsOCArNTMsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC02NCw3ICs2NCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgICAgICArICIvQ2hlY2tBY2Nlc3NMb2c/bG9jYXRpb249IgogICAgICAgICAgICAgICAgICAgICAgICAgICArIFVSTEVuY29kZXIuZW5jb2RlKGxvY2F0aW9uKSk7CkBAIC03Miw3ICs3Miw3IEBACiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ1dyaXRlSW50ZXJ2YWxTZWNvbmRzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ1dyaXRlSW50ZXJ2YWxTZWNvbmRzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDQyNjM3Ny4uNmQ3MzNkOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdXcml0ZUludGVydmFsU2Vjb25kcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nV3JpdGVJbnRlcnZhbFNlY29uZHMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1hY2Nlc3MtbG9nZ2luZy13cml0ZS1pbnRlcnZhbC1zZWNvbmRzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ1dyaXRlSW50ZXJ2YWxTZWNvbmRzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nV3JpdGVJbnRlcnZhbFNlY29uZHMvYnVpbGQueG1sCmluZGV4IGM2YWJlNmUuLmYzNTg1YWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nV3JpdGVJbnRlcnZhbFNlY29uZHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nV3JpdGVJbnRlcnZhbFNlY29uZHMvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwxNiArNDgsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QqIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJlbmFibGUtYWNjZXNzLWxvZ2dpbmciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxkZWxldGUgZGlyPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9sb2dzL2FjY2VzcyIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTEwMSwxMCArMTAxLDEwIEBACiAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGlzYWJsZS1hY2Nlc3MtbG9nZ2luZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ1dyaXRlSW50ZXJ2YWxTZWNvbmRzL3NlcnZsZXQvQ2hlY2tBY2Nlc3NMb2cuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nV3JpdGVJbnRlcnZhbFNlY29uZHMvc2VydmxldC9DaGVja0FjY2Vzc0xvZy5qYXZhCmluZGV4IDM0YTAwYzEuLmY3NjMzOGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nV3JpdGVJbnRlcnZhbFNlY29uZHMvc2VydmxldC9DaGVja0FjY2Vzc0xvZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nV3JpdGVJbnRlcnZhbFNlY29uZHMvc2VydmxldC9DaGVja0FjY2Vzc0xvZy5qYXZhCkBAIC0zNiw2ICszNiw2IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWxsb3dFbmNvZGVkU2xhc2gvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FsbG93RW5jb2RlZFNsYXNoL2J1aWxkLnhtbAppbmRleCBjYzU2NGNiLi5kMGZiNGQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWxsb3dFbmNvZGVkU2xhc2gvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hbGxvd0VuY29kZWRTbGFzaC9idWlsZC54bWwKQEAgLTMwLDcgKzMwLDcgQEAKICAgICAmcnVuOwogCiAgICAgPGltcG9ydCBmaWxlPSJidWlsZC1wcm9wZXJ0aWVzLnhtbCIvPgotICAgIAorCiAgICAgPHBhdGggaWQ9ImNsYXNzLnBhdGgiPgogICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiLz4KICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FsbG93RW5jb2RlZFNsYXNoL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0cy93ZWIvYWxsb3dlbmNvZGVkc2xhc2gvQWxsb3dFbmNvZGVkU2xhc2guamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hbGxvd0VuY29kZWRTbGFzaC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdHMvd2ViL2FsbG93ZW5jb2RlZHNsYXNoL0FsbG93RW5jb2RlZFNsYXNoLmphdmEKaW5kZXggZDVjMzRiYi4uMjFkNjdjMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FsbG93RW5jb2RlZFNsYXNoL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0cy93ZWIvYWxsb3dlbmNvZGVkc2xhc2gvQWxsb3dFbmNvZGVkU2xhc2guamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWxsb3dFbmNvZGVkU2xhc2gvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3RzL3dlYi9hbGxvd2VuY29kZWRzbGFzaC9BbGxvd0VuY29kZWRTbGFzaC5qYXZhCkBAIC02MSw3ICs2MSw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBjb25uZWN0aW9uID0gKEh0dHBVUkxDb25uZWN0aW9uKSBuZXcgVVJMKCJodHRwOi8vbG9jYWxob3N0OiIgKyBhZG1pblBvcnQgKyAiL21hbmFnZW1lbnQvZG9tYWluL3Jlc291cmNlcy9qZGJjLXJlc291cmNlL2pkYmMlMkZfX1RpbWVyUG9vbC54bWwiKS5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgY29ubmVjdGlvbi5zZXRSZXF1ZXN0UHJvcGVydHkoIlgtR2xhc3NGaXNoLTMiLCAidHJ1ZSIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW9uIHJlc3BvbnNlIGNvZGUgcmV0dXJuZWQgIitjb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpKTsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3Rpb24gcmVzcG9uc2UgY29kZSByZXR1cm5lZCAiK2Nvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCkpOwogICAgICAgICAgICAgcmVwb3J0KCJyZXNwb25zZS0iICsgZXhwZWN0ZWRDb2RlICsgIi10cnktIiArIGNvdW50LCBleHBlY3RlZENvZGUgPT0gY29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKSk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBpZihjb25uZWN0aW9uICE9IG51bGwpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hbm9ueW1vdXNBY2Nlc3NGb3JiaWRkZW4vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Fub255bW91c0FjY2Vzc0ZvcmJpZGRlbi9XZWJUZXN0LmphdmEKaW5kZXggMzViOWM3Ni4uZThhNjMxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Fub255bW91c0FjY2Vzc0ZvcmJpZGRlbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Fub255bW91c0FjY2Vzc0ZvcmJpZGRlbi9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNDkzMjU0NyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDggKzQ2LDggQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgIAotICAgICAgICB0cnkgeyAKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYW5vbnltb3VzQWNjZXNzRm9yYmlkZGVuL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYW5vbnltb3VzQWNjZXNzRm9yYmlkZGVuL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDY0YmEyMS4uZTA3NWUzYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Fub255bW91c0FjY2Vzc0ZvcmJpZGRlbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hbm9ueW1vdXNBY2Nlc3NGb3JiaWRkZW4vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1hbm9ueW1vdXMtYWNjZXNzLWZvcmJpZGRlbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Fub255bW91c0FjY2Vzc0ZvcmJpZGRlbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYW5vbnltb3VzQWNjZXNzRm9yYmlkZGVuL2J1aWxkLnhtbAppbmRleCA4NTQyZTkxLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYW5vbnltb3VzQWNjZXNzRm9yYmlkZGVuL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYW5vbnltb3VzQWNjZXNzRm9yYmlkZGVuL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTcgKzQyLDE3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYW5vbnltb3VzQWNjZXNzRm9yYmlkZGVuL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hbm9ueW1vdXNBY2Nlc3NGb3JiaWRkZW4vZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDVlMDcxNTQuLjU0ZWM1ODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hbm9ueW1vdXNBY2Nlc3NGb3JiaWRkZW4vZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hbm9ueW1vdXNBY2Nlc3NGb3JiaWRkZW4vZGVzY3JpcHRvci93ZWIueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgIDxzZWN1cml0eS1yb2xlPgogICAgIDxkZXNjcmlwdGlvbj50ZXN0IHJvbGU8L2Rlc2NyaXB0aW9uPgogICAgIDxyb2xlLW5hbWU+dGVzdHJvbGU8L3JvbGUtbmFtZT4KLSAgPC9zZWN1cml0eS1yb2xlPiAKKyAgPC9zZWN1cml0eS1yb2xlPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hcHBsaWNhdGlvbkRpc3BhdGNoZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FwcGxpY2F0aW9uRGlzcGF0Y2hlci9XZWJUZXN0LmphdmEKaW5kZXggODE0YjhkZi4uYmM0MWFkYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FwcGxpY2F0aW9uRGlzcGF0Y2hlci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FwcGxpY2F0aW9uRGlzcGF0Y2hlci9XZWJUZXN0LmphdmEKQEAgLTIxLDEwICsyMSwxMCBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAxOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTMyLDcgKzMyLDcgQEAKIAogICAgICAgICAvLyBUaGUgc3RhdCByZXBvcnRlciB3cml0ZXMgb3V0IHRoZSB0ZXN0IGluZm8gYW5kIHJlc3VsdHMKICAgICAgICAgLy8gaW50byB0aGUgdG9wLWxldmVsIHF1aWNrbG9vayBkaXJlY3RvcnkgZHVyaW5nIGEgcnVuLgotICAgICAgCisKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiUmVxdWVzdCBEaXNwYXRjaGVyIGluIFNlcnZsZXQuaW5pdCgpIik7CiAKICAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwpAQCAtNDEsMTYgKzQxLDE2IEBACiAKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0UykuaW50VmFsdWUoKTsKICAgICAgICAgU3RyaW5nIG5hbWU7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBnb0dldChob3N0LCBwb3J0LCAiQXBwbGljYXRpb25EaXNwYXRjaGVyIiwgY29udGV4dFJvb3QgKyAiL1NlcnZsZXRUZXN0IiApOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjb3VudCAhPSBFWFBFQ1RFRF9DT1VOVCl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXBwbGljYXRpb25EaXNwYXRjaGVyIiwgc3RhdC5GQUlMKTsKLSAgICAgICAgfSAgICAgICAgICAgCisgICAgICAgIH0KIAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2ViL2FwcGxpY2F0aW9uRGlzcGF0Y2hlci0tLT4gZXhwZWN0IDIgUEFTUyIpOwogICAgIH0KQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjBcbiIpKTsKICAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMFxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gcy5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKQEAgLTc3LDIwICs3NywyMCBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lTnVtICsgIjogICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0YXR1cyA9IGxpbmUuc3Vic3RyaW5nKGluZGV4KzIpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmVxdWFsc0lnbm9yZUNhc2UoIlBBU1MiKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXBwbGljYXRpb25EaXNwYXRjaGVyOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXBwbGljYXRpb25EaXNwYXRjaGVyOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuRkFJTCk7ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJhcHBsaWNhdGlvbkRpc3BhdGNoZXI6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGxpbmVOdW0rKzsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgIH0KICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hcHBsaWNhdGlvbkRpc3BhdGNoZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hcHBsaWNhdGlvbkRpc3BhdGNoZXIvYnVpbGQucHJvcGVydGllcwppbmRleCA1ODgzNTZhLi5mZmMzYjJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXBwbGljYXRpb25EaXNwYXRjaGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FwcGxpY2F0aW9uRGlzcGF0Y2hlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tYXBwbGljYXRpb25EaXNwYXRjaGVyIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1hcHBsaWNhdGlvbkRpc3BhdGNoZXIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLWFwcGxpY2F0aW9uRGlzcGF0Y2hlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FwcGxpY2F0aW9uRGlzcGF0Y2hlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXBwbGljYXRpb25EaXNwYXRjaGVyL2J1aWxkLnhtbAppbmRleCBjZjkzZmE0Li4yODI3NWE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXBwbGljYXRpb25EaXNwYXRjaGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXBwbGljYXRpb25EaXNwYXRjaGVyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01MywxMCArNTMsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hcHBsaWNhdGlvbkRpc3BhdGNoZXIvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FwcGxpY2F0aW9uRGlzcGF0Y2hlci9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNjU1YzBjYS4uMTI1NTRmMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FwcGxpY2F0aW9uRGlzcGF0Y2hlci9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FwcGxpY2F0aW9uRGlzcGF0Y2hlci9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTI4LDEyICsyOCwxMiBAQAogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+CiAgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MTAwMDwvbG9hZC1vbi1zdGFydHVwPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgotICAgIDwvc2VydmxldC1tYXBwaW5nPiAgICAKKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXBwbGljYXRpb25EaXNwYXRjaGVyL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hcHBsaWNhdGlvbkRpc3BhdGNoZXIvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDVkZWMxNDcuLmRhZTg4NjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hcHBsaWNhdGlvbkRpc3BhdGNoZXIvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hcHBsaWNhdGlvbkRpc3BhdGNoZXIvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0zNCwyMyArMzQsMjMgQEAKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgc3RhdHVzID0gIkFwcGxpY2F0aW9uRGlzcGF0Y2hlcjo6UEFTUyI7Ci0gICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7CiAKICAgICAgICAgdHJ5ewotICAgICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmVxdWVzdEQgPSAKKyAgICAgICAgICAgIFJlcXVlc3REaXNwYXRjaGVyIHJlcXVlc3REID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldFJlcXVlc3REaXNwYXRjaGVyKCIvdGVzdC5qc3AiKTsKIAogICAgICAgICAgICAgaWYgKCByZXF1ZXN0RCA9PSBudWxsKXsKLSAgICAgICAgICAgICAgICBzdGF0dXMgPSAiQXBwbGljYXRpb25EaXNwYXRjaGVyOjpGQUlMIjsgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3RhdHVzID0gIkFwcGxpY2F0aW9uRGlzcGF0Y2hlcjo6RkFJTCI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LlJlcXVlc3REaXNwYXRjaGVyOiAiICsgcmVxdWVzdEQgKyAiXSIpOwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCl7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gIkFwcGxpY2F0aW9uRGlzcGF0Y2hlcjo6RkFJTCI7ICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0YXR1cyA9ICJBcHBsaWNhdGlvbkRpc3BhdGNoZXI6OkZBSUwiOwogICAgICAgICB9Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic3RhdHVzOiAiICsgc3RhdHVzKTsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic3RhdHVzOiAiICsgc3RhdHVzKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKQEAgLTU4LDcgKzU4LDcgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwogCiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FzYWRtaW5EZWxldGVzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXNhZG1pbkRlbGV0ZXMvYnVpbGQucHJvcGVydGllcwppbmRleCA0NmIxMjBlLi42OTRjYmI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXNhZG1pbkRlbGV0ZXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXNhZG1pbkRlbGV0ZXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1hc2FkbWluLWRlbGV0ZXMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hc2FkbWluRGVsZXRlc1RhcmdldC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FzYWRtaW5EZWxldGVzVGFyZ2V0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNGRiZjc0Ny4uMTkzNTExNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FzYWRtaW5EZWxldGVzVGFyZ2V0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FzYWRtaW5EZWxldGVzVGFyZ2V0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tYXNhZG1pbi1kZWxldGVzLXRhcmdldCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaEdldFJlbW90ZUFkZHJlc3MvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaEdldFJlbW90ZUFkZHJlc3MvV2ViVGVzdC5qYXZhCmluZGV4IDQ0MTA1ZDYuLmRkZDFhNWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hHZXRSZW1vdGVBZGRyZXNzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0UmVtb3RlQWRkcmVzcy9XZWJUZXN0LmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdAogICAgICAgICA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRSA9IAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRSA9CiAgICAgICAgICJSZW1vdGVBZGRyZXNzPTEyMy40NTYuNzg5IjsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPQpAQCAtNDgsNyArNDgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MzQ3MjE1Iik7CiAgICAgICAgIFdlYlRlc3QgdGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNzIsNyArNzIsNyBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgICAgICAgICAKKyAgICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL2pzcC9yZW1vdGVBZGRyZXNzLmpzcCAiCkBAIC04MSw3ICs4MSw3IEBACiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlByb3h5LWlwOiAxMjMuNDU2Ljc4OVxuIi5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBudWxsOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0UmVtb3RlQWRkcmVzcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaEdldFJlbW90ZUFkZHJlc3MvYnVpbGQucHJvcGVydGllcwppbmRleCBlYmIwNWEyLi4zYzZmYTQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0UmVtb3RlQWRkcmVzcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hHZXRSZW1vdGVBZGRyZXNzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tYXV0aC1wYXNzdGhyb3VnaC1nZXQtcmVtb3RlLWFkZHJlc3MiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hHZXRSZW1vdGVBZGRyZXNzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hHZXRSZW1vdGVBZGRyZXNzL2J1aWxkLnhtbAppbmRleCBmZmI2NjU3Li5kZjJmODhhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0UmVtb3RlQWRkcmVzcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaEdldFJlbW90ZUFkZHJlc3MvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxOCArNDQsMTggQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CkBAIC03MSw3ICs3MSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTgzLDEwICs4MywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0UmVtb3RlSG9zdC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0UmVtb3RlSG9zdC9XZWJUZXN0LmphdmEKaW5kZXggZmU3NGRhOC4uYjdlNjNiNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaEdldFJlbW90ZUhvc3QvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hHZXRSZW1vdGVIb3N0L1dlYlRlc3QuamF2YQpAQCAtMzQsNyArMzQsNyBAQAogICAgICAgICA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRSA9IG51bGw7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFX0xPQ0FMSE9TVCA9IAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRV9MT0NBTEhPU1QgPQogICAgICAgICAiUmVtb3RlSG9zdD1sb2NhbGhvc3QiOwogCiAgICAgc3RhdGljewpAQCAtNjgsNyArNjgsNyBAQAogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCi0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgdGVzdFJlbW90ZUFkZHJlc3MoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0UmVtb3RlSG9zdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaEdldFJlbW90ZUhvc3QvYnVpbGQucHJvcGVydGllcwppbmRleCA3Y2JmYTVkLi45YmU4M2RkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0UmVtb3RlSG9zdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hHZXRSZW1vdGVIb3N0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tYXV0aC1wYXNzdGhyb3VnaC1nZXQtcmVtb3RlLWhvc3QiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hHZXRSZW1vdGVIb3N0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hHZXRSZW1vdGVIb3N0L2J1aWxkLnhtbAppbmRleCAzZDFmZDhiLi5mOGFkYmE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0UmVtb3RlSG9zdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaEdldFJlbW90ZUhvc3QvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxOCArNDQsMTggQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CkBAIC03Niw3ICs3Niw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTg4LDEwICs4OCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0U2NoZW1lL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hHZXRTY2hlbWUvV2ViVGVzdC5qYXZhCmluZGV4IGRlOTVkZTkuLjNhOTUxNmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hHZXRTY2hlbWUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hHZXRTY2hlbWUvV2ViVGVzdC5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDYxNzA0NTAiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MSw4ICs1MSw4IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAKLSAgICAgICAgdHJ5IHsgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZUpzcCgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTcxLDcgKzcxLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlSnNwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi9qc3AvdGVzdC5qc3AiICsgIiBIVFRQLzEuMFxuIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hHZXRTY2hlbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hHZXRTY2hlbWUvYnVpbGQucHJvcGVydGllcwppbmRleCBmOWZlY2U2Li4zYTNjYWJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0U2NoZW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaEdldFNjaGVtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWF1dGgtcGFzc3Rocm91Z2gtZ2V0LXNjaGVtZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaEdldFNjaGVtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0U2NoZW1lL2J1aWxkLnhtbAppbmRleCBmZmI2NjU3Li5kZjJmODhhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0U2NoZW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0U2NoZW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTggKzQ0LDE4IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgpAQCAtNzEsNyArNzEsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04MywxMCArODMsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFJlcXVlc3RJc1NlY3VyZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoUmVxdWVzdElzU2VjdXJlL1dlYlRlc3QuamF2YQppbmRleCAxNGFlYWU2Li5iNjdhZWNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoUmVxdWVzdElzU2VjdXJlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoUmVxdWVzdElzU2VjdXJlL1dlYlRlc3QuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2Mzk3MjE4Iik7CiAgICAgICAgIFdlYlRlc3QgdGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNzEsNyArNzEsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2VKc3AoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgIAorCiAgICAgICAgIHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL2pzcC90ZXN0LmpzcCIgKyAiIEhUVFAvMS4wXG4iOwpAQCAtODAsNyArODAsNyBAQAogICAgICAgICBvcy53cml0ZSgiUHJveHkta2V5c2l6ZTogNTEyXG4iLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiUHJveHktaXA6IDEyMy40NTYuNzg5XG4iLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG51bGw7CiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hSZXF1ZXN0SXNTZWN1cmUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hSZXF1ZXN0SXNTZWN1cmUvYnVpbGQucHJvcGVydGllcwppbmRleCBlNWYyYmE3Li41NDk2YTNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoUmVxdWVzdElzU2VjdXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFJlcXVlc3RJc1NlY3VyZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWF1dGgtcGFzc3Rocm91Z2gtcmVxdWVzdC1pcy1zZWN1cmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hSZXF1ZXN0SXNTZWN1cmUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFJlcXVlc3RJc1NlY3VyZS9idWlsZC54bWwKaW5kZXggZmZiNjY1Ny4uZGYyZjg4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFJlcXVlc3RJc1NlY3VyZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFJlcXVlc3RJc1NlY3VyZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE4ICs0NCwxOCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTcxLDcgKzcxLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODMsMTAgKzgzLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RGcm9tSnNwV2l0aEh0dHBzU2VydmVyTmFtZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoU2VuZFJlZGlyZWN0RnJvbUpzcFdpdGhIdHRwc1NlcnZlck5hbWUvV2ViVGVzdC5qYXZhCmluZGV4IDc3NWI1N2YuLjVjOTdkM2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RGcm9tSnNwV2l0aEh0dHBzU2VydmVyTmFtZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFNlbmRSZWRpcmVjdEZyb21Kc3BXaXRoSHR0cHNTZXJ2ZXJOYW1lL1dlYlRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0CiAgICAgICAgID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX0xPQ0FUSU9OID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX0xPQ0FUSU9OID0KICAgICAgICAgImh0dHBzOi8vbGJob3N0Ojg4ODgvanNwL3JlZGlyZWN0L3RhcmdldC5qc3AiOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9CkBAIC01NSw3ICs1NSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDYyNjkxMDIiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC02NCw4ICs2NCw4IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAKLSAgICAgICAgdHJ5IHsgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRlc3RSZW1vdGVBZGRyZXNzKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtODMsNyArODMsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB0ZXN0UmVtb3RlQWRkcmVzcygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgCisKICAgICAgICAgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvanNwL3NlbmRSZWRpcmVjdC5qc3AgIgpAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICBvcy53cml0ZSgiUHJveHkta2V5c2l6ZTogNTEyXG4iLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiUHJveHktaXA6IDEyMy40NTYuNzg5XG4iLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG51bGw7CiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RGcm9tSnNwV2l0aEh0dHBzU2VydmVyTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFNlbmRSZWRpcmVjdEZyb21Kc3BXaXRoSHR0cHNTZXJ2ZXJOYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzMzODkzMS4uMjZiZDJkOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFNlbmRSZWRpcmVjdEZyb21Kc3BXaXRoSHR0cHNTZXJ2ZXJOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFNlbmRSZWRpcmVjdEZyb21Kc3BXaXRoSHR0cHNTZXJ2ZXJOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tYXV0aC1wYXNzdGhyb3VnaC1zZW5kLXJlZGlyZWN0LWZyb20tanNwLXdpdGgtaHR0cHMtc2VydmVyLW5hbWUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RGcm9tSnNwV2l0aEh0dHBzU2VydmVyTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoU2VuZFJlZGlyZWN0RnJvbUpzcFdpdGhIdHRwc1NlcnZlck5hbWUvYnVpbGQueG1sCmluZGV4IDJiMWUyYjkuLjE4YzFkOWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RGcm9tSnNwV2l0aEh0dHBzU2VydmVyTmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFNlbmRSZWRpcmVjdEZyb21Kc3BXaXRoSHR0cHNTZXJ2ZXJOYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTggKzQ0LDE4IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgpAQCAtNzYsNyArNzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04OCwxMCArODgsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFNlbmRSZWRpcmVjdEhvc3RSZXF1ZXN0SGVhZGVyV2l0aG91dFBvcnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFNlbmRSZWRpcmVjdEhvc3RSZXF1ZXN0SGVhZGVyV2l0aG91dFBvcnQvV2ViVGVzdC5qYXZhCmluZGV4IGIyZGMzZTkuLjUyNDc5NGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RIb3N0UmVxdWVzdEhlYWRlcldpdGhvdXRQb3J0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoU2VuZFJlZGlyZWN0SG9zdFJlcXVlc3RIZWFkZXJXaXRob3V0UG9ydC9XZWJUZXN0LmphdmEKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjU5MDkyMSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU5LDggKzU5LDggQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgIAotICAgICAgICB0cnkgeyAKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgdGVzdFJlbW90ZUFkZHJlc3MoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC03OCw3ICs3OCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3RSZW1vdGVBZGRyZXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIiBIVFRQLzEuMFxuIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RIb3N0UmVxdWVzdEhlYWRlcldpdGhvdXRQb3J0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoU2VuZFJlZGlyZWN0SG9zdFJlcXVlc3RIZWFkZXJXaXRob3V0UG9ydC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA0YjgyOWUuLjMyYWRkMzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RIb3N0UmVxdWVzdEhlYWRlcldpdGhvdXRQb3J0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFNlbmRSZWRpcmVjdEhvc3RSZXF1ZXN0SGVhZGVyV2l0aG91dFBvcnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1hdXRoLXBhc3N0aHJvdWdoLXNlbmQtcmVkaXJlY3QtaG9zdC1yZXF1ZXN0LWhlYWRlci13aXRob3V0LXBvcnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RIb3N0UmVxdWVzdEhlYWRlcldpdGhvdXRQb3J0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RIb3N0UmVxdWVzdEhlYWRlcldpdGhvdXRQb3J0L2J1aWxkLnhtbAppbmRleCBmZmI2NjU3Li5kZjJmODhhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoU2VuZFJlZGlyZWN0SG9zdFJlcXVlc3RIZWFkZXJXaXRob3V0UG9ydC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFNlbmRSZWRpcmVjdEhvc3RSZXF1ZXN0SGVhZGVyV2l0aG91dFBvcnQvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxOCArNDQsMTggQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CkBAIC03MSw3ICs3MSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTgzLDEwICs4MywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoU2VuZFJlZGlyZWN0V2l0aEh0dHBzU2VydmVyTmFtZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoU2VuZFJlZGlyZWN0V2l0aEh0dHBzU2VydmVyTmFtZS9XZWJUZXN0LmphdmEKaW5kZXggODRhODhlZC4uMzhkYmE5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFNlbmRSZWRpcmVjdFdpdGhIdHRwc1NlcnZlck5hbWUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RXaXRoSHR0cHNTZXJ2ZXJOYW1lL1dlYlRlc3QuamF2YQpAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MjY5MTAyIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNjQsOCArNjQsOCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCi0gICAgICAgIHRyeSB7IAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB0ZXN0UmVtb3RlQWRkcmVzcygpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTgzLDcgKzgzLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgdGVzdFJlbW90ZUFkZHJlc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgIAorCiAgICAgICAgIHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiIEhUVFAvMS4wXG4iOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFNlbmRSZWRpcmVjdFdpdGhIdHRwc1NlcnZlck5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RXaXRoSHR0cHNTZXJ2ZXJOYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOWQwM2NhNS4uMjM0MzU2YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFNlbmRSZWRpcmVjdFdpdGhIdHRwc1NlcnZlck5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoU2VuZFJlZGlyZWN0V2l0aEh0dHBzU2VydmVyTmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWF1dGgtcGFzc3Rocm91Z2gtc2VuZC1yZWRpcmVjdC13aXRoLWh0dHBzLXNlcnZlci1uYW1lIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoU2VuZFJlZGlyZWN0V2l0aEh0dHBzU2VydmVyTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoU2VuZFJlZGlyZWN0V2l0aEh0dHBzU2VydmVyTmFtZS9idWlsZC54bWwKaW5kZXggMmIxZTJiOS4uMThjMWQ5ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFNlbmRSZWRpcmVjdFdpdGhIdHRwc1NlcnZlck5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RXaXRoSHR0cHNTZXJ2ZXJOYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTggKzQ0LDE4IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgpAQCAtNzYsNyArNzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04OCwxMCArODgsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2JvZHlUYWcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2JvZHlUYWcvV2ViVGVzdC5qYXZhCmluZGV4IDRhNzQ4M2MuLjczZmUzYTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9ib2R5VGFnL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYm9keVRhZy9XZWJUZXN0LmphdmEKQEAgLTIyLDkgKzIyLDkgQEAKIAogcHVibGljIGNsYXNzIFdlYlRlc3QKIHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTMzLDE0ICszMywxNCBAQAogCiAgICAgICAgIC8vIFRoZSBzdGF0IHJlcG9ydGVyIHdyaXRlcyBvdXQgdGhlIHRlc3QgaW5mbyBhbmQgcmVzdWx0cwogICAgICAgICAvLyBpbnRvIHRoZSB0b3AtbGV2ZWwgcXVpY2tsb29rIGRpcmVjdG9yeSBkdXJpbmcgYSBydW4uCi0gICAgICAKKwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUZXN0IEJvZHlUYWcgYmVoYXZpb3Igd2hlbiB0YWcgaXMgcmV1c2VkIik7CiAKICAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwogICAgICAgICBTdHJpbmcgcG9ydFMgPSBhcmdzWzFdOwogICAgICAgICBTdHJpbmcgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZ29HZXQoaG9zdCwgcG9ydCwgY29udGV4dFJvb3QgKyAiL3Rlc3QuanNwIiApOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkJvZHlUYWcgdGVzdCIsIHBhc3M/IHN0YXQuUEFTUzogc3RhdC5GQUlMKTsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMCIpOwogICAgICAgICBvcy53cml0ZSgoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwpAQCAtNzUsNyArNzUsNyBAQAogICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRlc3QgVU5QUkVESUNURUQtRkFJTFVSRSIpOwogICAgICAgICB9CiAgICAgICAgIGlmIChjb3VudCA9PSAxKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2JvZHlUYWcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9ib2R5VGFnL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOWVhZjVhYS4uY2MzMzU1YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2JvZHlUYWcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYm9keVRhZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWJvZHl0YWciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9ib2R5VGFnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9ib2R5VGFnL2J1aWxkLnhtbAppbmRleCAwMGZkYWQzLi5jMzk3NzZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYm9keVRhZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2JvZHlUYWcvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCwxMCArNzAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYm9keVRhZy9zZXJ2bGV0L215cGFjay9NeUJvZHkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9ib2R5VGFnL3NlcnZsZXQvbXlwYWNrL015Qm9keS5qYXZhCmluZGV4IDJkY2UzOTEuLjczN2E3YmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9ib2R5VGFnL3NlcnZsZXQvbXlwYWNrL015Qm9keS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9ib2R5VGFnL3NlcnZsZXQvbXlwYWNrL015Qm9keS5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAKIAogcHVibGljIGNsYXNzIE15Qm9keSBleHRlbmRzIEJvZHlUYWdTdXBwb3J0IHsKLQkKKwogICBwdWJsaWMgaW50IGRvRW5kVGFnKCkgewogCiAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9icm9rZW5fd2ViYXBwL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9icm9rZW5fd2ViYXBwL1dlYlRlc3QuamF2YQppbmRleCA5NjU2ZTRiLi5kZDNkNmFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYnJva2VuX3dlYmFwcC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Jyb2tlbl93ZWJhcHAvV2ViVGVzdC5qYXZhCkBAIC0zMCw4ICszMCw4IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICBwcml2YXRlIHN0YXRpYyBVUkwgdXJsOwogICAgIHByaXZhdGUgc3RhdGljIE9iamVjdE91dHB1dFN0cmVhbSBvYmplY3RXcml0ZXIgPSBudWxsOwotICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7ICAKLSAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOworCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgdGhyb3dzIEV4Y2VwdGlvbnsKICAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwogICAgICAgICBTdHJpbmcgcG9ydCA9IGFyZ3NbMV07CkBAIC00OCwxMiArNDgsMTIgQEAKICAgICAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiB1cmxDb25uZWN0aW9uID0gKEh0dHBVUkxDb25uZWN0aW9uKWNvbm47CiAgICAgICAgICAgICAgICAgdXJsQ29ubmVjdGlvbi5zZXREb091dHB1dCh0cnVlKTsKIAotICAgICAgICAgICAgICAgIERhdGFPdXRwdXRTdHJlYW0gb3V0ID0gCisgICAgICAgICAgICAgICAgRGF0YU91dHB1dFN0cmVhbSBvdXQgPQogICAgICAgICAgICAgICAgICAgIG5ldyBEYXRhT3V0cHV0U3RyZWFtKHVybENvbm5lY3Rpb24uZ2V0T3V0cHV0U3RyZWFtKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlQnl0ZSgxKTsKIAogICAgICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZT0gIHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImJyb2tlbl93ZWJhcHA6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDQwNCIpOyAKKyAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYnJva2VuX3dlYmFwcDogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogNDA0Iik7CiAgICAgICAgICAgICAgICBpZiAodXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKSAhPSA0MDQpewogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiVGVzdCBicm9rZW5fd2ViYXBwIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYnJva2VuX3dlYmFwcC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Jyb2tlbl93ZWJhcHAvYnVpbGQucHJvcGVydGllcwppbmRleCA1ZDgzZjY3Li42NGU4ZDRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYnJva2VuX3dlYmFwcC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9icm9rZW5fd2ViYXBwL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1icm9rZW5fd2ViYXBwIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1icm9rZW5fd2ViYXBwIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1icm9rZW5fd2ViYXBwIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYnJva2VuX3dlYmFwcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYnJva2VuX3dlYmFwcC9idWlsZC54bWwKaW5kZXggMGIwMTA0Ni4uNDg1MjgwZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Jyb2tlbl93ZWJhcHAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9icm9rZW5fd2ViYXBwL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjQgKzQ0LDI0IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCiAgICAgICAgICAgICBzcmNkaXI9Ii4iCiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MywxMCArNzMsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYnJva2VuX3dlYmFwcC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYnJva2VuX3dlYmFwcC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMjlhYzc4Yi4uYzdkZjlkNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Jyb2tlbl93ZWJhcHAvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9icm9rZW5fd2ViYXBwL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMTIgKzIyLDEyIEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+U2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Jyb2tlbl93ZWJhcHAvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Jyb2tlbl93ZWJhcHAvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDVmNWYzNzguLjgwNzQ4MGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9icm9rZW5fd2ViYXBwL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYnJva2VuX3dlYmFwcC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTQ2LDExICs0NiwxMSBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXR7CiAKICAgICBwcml2YXRlIFN0cmluZyBzdGF0dXMgPSAiRGVsZWdhdGVUZXN0OjpGQUlMIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7ICAgICAgICAKLSAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpAQCAtNTgsMTYgKzU4LDE2IEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CiAgICAgICAgIG91dC5wcmludGxuKHN0YXR1cyk7CiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKLSAgICAgICAgCisKICAgICAgICAgc3RhdHVzID0gImJyb2tlbl93ZWJhcHA6OkZBSUwiOwogICAgICAgICBvdXQucHJpbnRsbihzdGF0dXMpOwotICAgICAgICAKKwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9idWlsZC54bWwKaW5kZXggODg3MWE0Ny4uZDM5MWY4ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYnVpbGQueG1sCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgIDxhbnQgZGlyPSJqc3BDb25maWdJbmNsdWRlQ2hhaW4iIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJqc3BDb25maWdKYXZhY1NvdXJjZSIgdGFyZ2V0PSJidWlsZC1wdWJsaXNoLXdhciIvPgogICAgICAgICA8YW50IGRpcj0ianNwQ29uZmlnSnNwRmlsZSIgdGFyZ2V0PSJhbGwiLz4KLSAgICAgICAgPGFudCBkaXI9ImpzcENvbmZpZ01vZGlmaWNhdGlvblRlc3RJbnRlcnZhbCIgdGFyZ2V0PSJhbGwiLz4gICAgICAgIAorICAgICAgICA8YW50IGRpcj0ianNwQ29uZmlnTW9kaWZpY2F0aW9uVGVzdEludGVydmFsIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0ianNwQ29uZmlnVW5kZWNsYXJlZE5TIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0ianNwQ29uZmlnVXNlUHJlY29tcGlsZWQiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJqc3BDb25maWdVc2VQcmVjb21waWxlZDIiIHRhcmdldD0iYWxsIi8+CkBAIC04MSwxNSArODEsMTUgQEAKICAgICAgICAgPGFudCBkaXI9ImpzcE51bGxGcmFnbWVudCIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImpzcFBvdW5kU3ludGF4IiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0ianNwUHJlY29tcGlsZUNvbnNpZGVyRG9tYWluTGliSmFyRmlsZXNBbmRDbGFzc2VzIiB0YXJnZXQ9ImFsbCIvPgotICAgICAgICA8YW50IGRpcj0ianNwUHJlY29tcGlsZURlcGxveURhc2hEYXNoTGlicmFyaWVzIiB0YXJnZXQ9ImFsbCIvPiAgICAKKyAgICAgICAgPGFudCBkaXI9ImpzcFByZWNvbXBpbGVEZXBsb3lEYXNoRGFzaExpYnJhcmllcyIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImpzcFByZWNvbXBpbGVJZ25vcmVGcmFnbWVudEVycm9ycyIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImpzcFJlbG9hZEdlbmVyYXRlZFNlcnZsZXRJZlVwZGF0ZWQiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJqc3BSZXNvdXJjZUluamVjdGlvbkNvbnRleHRMaXN0ZW5lciIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImpzcFJlc291cmNlSW5qZWN0aW9uU2ltcGxlVGFnSGFuZGxlciIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImpzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlciIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImpzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlclBvb2xpbmdEaXNhYmxlZCIgdGFyZ2V0PSJhbGwiLz4KLSAgICAgICAgPGFudCBkaXI9ImpzcFJ1bnRpbWVDb21waWxlQ29uc2lkZXJEb21haW5MaWJKYXJGaWxlc0FuZENsYXNzZXMiIHRhcmdldD0iYWxsIi8+ICAKLSAgICAgICAgPGFudCBkaXI9ImpzcFJ1bnRpbWVEZXBsb3lEYXNoRGFzaExpYnJhcmllcyIgdGFyZ2V0PSJhbGwiLz4gIAorICAgICAgICA8YW50IGRpcj0ianNwUnVudGltZUNvbXBpbGVDb25zaWRlckRvbWFpbkxpYkphckZpbGVzQW5kQ2xhc3NlcyIgdGFyZ2V0PSJhbGwiLz4KKyAgICAgICAgPGFudCBkaXI9ImpzcFJ1bnRpbWVEZXBsb3lEYXNoRGFzaExpYnJhcmllcyIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImpzcFNjcmlwdGxlc3NUYWdCb2R5SnNwRG9jdW1lbnQiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJqc3BTY3JpcHRsZXRBZnRlclNjcmlwdGxlc3NUYWciIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJqc3BTY3JpcHRsZXREZWNsTmVzdGVkSW5DdXN0b21BY3Rpb24iIHRhcmdldD0iYWxsIi8+CkBAIC0xNDUsNyArMTQ1LDcgQEAKICAgICAgICAgPGFudCBkaXI9ImNhY2hlRmlsdGVyTWFwcGluZ0Rpc3BhdGNoZXIiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJjYWNoZUhlbHBlclJlZiIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImNvbnRlbnRsZW5ndGgiIHRhcmdldD0iYWxsIi8+Ci0gICAgICAgIDxhbnQgZGlyPSJjb29raWVQcm9wZXJ0aWVzU3VuV2ViWG1sIiB0YXJnZXQ9ImFsbCIvPiAgCisgICAgICAgIDxhbnQgZGlyPSJjb29raWVQcm9wZXJ0aWVzU3VuV2ViWG1sIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0iZGVmYXVsdENoYXJzZXQiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJkaXJMaXN0aW5nIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0iZGVmYXVsdFNlcnZsZXRXaXRoU3ViZGlyZWN0b3J5TWFwcGluZyIgdGFyZ2V0PSJhbGwiLz4KQEAgLTE1Myw4ICsxNTMsOCBAQAogICAgICAgICA8YW50IGRpcj0iZXJyb3JQYWdlRXhjZXB0aW9uVHlwZVdyYXBwZXIiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJlcnJvclBhZ2VIYW5kbGluZ0ZvckVycm9yIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0ic2VydmxldEluaXRCZWZvcmVHZXRTZXJ2bGV0Q29uZmlnIiB0YXJnZXQ9ImFsbCIvPgotICAgICAgICA8YW50IGRpcj0ibGlzdGVuZXJGaWx0ZXJTZXJ2bGV0SW5pdCIgdGFyZ2V0PSJhbGwiLz4gIAotICAgICAgICA8YW50IGRpcj0iZmlsdGVyTXVsdGlwbGVJbml0IiB0YXJnZXQ9ImFsbCIvPiAgCisgICAgICAgIDxhbnQgZGlyPSJsaXN0ZW5lckZpbHRlclNlcnZsZXRJbml0IiB0YXJnZXQ9ImFsbCIvPgorICAgICAgICA8YW50IGRpcj0iZmlsdGVyTXVsdGlwbGVJbml0IiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0iZmlsdGVyVVJJTWFwcGluZyIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImZvcndhcmRXaXRoUXVlcnlTdHJpbmciIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJnZXRBdHRyaWJ1dGVBZnRlckZvcndhcmQiIHRhcmdldD0iYWxsIi8+CkBAIC0yMTAsNyArMjEwLDcgQEAKICAgICAgICAgPGFudCBkaXI9InNlcnZsZXQtMy4wL2FzeW5jVGltZW91dE5vTGlzdGVuZXIiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJzZXJ2bGV0LTMuMC9hc3luY0RlbGF5RGlzcGF0Y2hBbmRDb21wbGV0ZSIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9InNlcnZsZXQtMy4wL2Rpc3BhdGNoRm9yd2FyZEFzeW5jRGlzcGF0Y2giIHRhcmdldD0iYWxsIi8+Ci0gICAgICAgIDxhbnQgZGlyPSJzZXJ2bGV0LTMuMC9jb29raWVIdHRwT25seSIgdGFyZ2V0PSJhbGwiLz4gIAorICAgICAgICA8YW50IGRpcj0ic2VydmxldC0zLjAvY29va2llSHR0cE9ubHkiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJzZXJ2bGV0LTMuMC9kZWZhdWx0RXJyb3JQYWdlIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0ic2VydmxldC0zLjAvamF2YXhTZXJ2bGV0Q29udGV4dE9yZGVyZWRMaWJzIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0ic2VydmxldC0zLjAvbXVsdGlXZWJGcmFnbWVudHMiIHRhcmdldD0iYWxsIi8+CkBAIC0zMDYsOSArMzA2LDkgQEAKICAgICAgICAgPGFudCBkaXI9InNlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsRXhwaXJlIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0ic2Vzc2lvblNldE1heEluYWN0aXZlSW50ZXJ2YWxUb1plcm9BbmRJbnZhbGlkYXRlIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0ic2V0TXVsdGlWYWx1ZWRSZXNwb25zZUhlYWRlciIgdGFyZ2V0PSJhbGwiLz4KLSAgICAgICAgPGFudCBkaXI9InN0YW5kYWxvbmV3YXIiIHRhcmdldD0iYWxsIi8+ICAKLSAgICAgICAgPGFudCBkaXI9InNlc3Npb25XaXRob3V0Q29va2llIiB0YXJnZXQ9ImFsbCIvPiAgCi0gICAgICAgIDxhbnQgZGlyPSJjcmVhdGVTZXNzaW9uSW5TZXJ2bGV0UmVxdWVzdExpc3RlbmVyIiB0YXJnZXQ9ImFsbCIvPiAgCisgICAgICAgIDxhbnQgZGlyPSJzdGFuZGFsb25ld2FyIiB0YXJnZXQ9ImFsbCIvPgorICAgICAgICA8YW50IGRpcj0ic2Vzc2lvbldpdGhvdXRDb29raWUiIHRhcmdldD0iYWxsIi8+CisgICAgICAgIDxhbnQgZGlyPSJjcmVhdGVTZXNzaW9uSW5TZXJ2bGV0UmVxdWVzdExpc3RlbmVyIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0ic2VydmxldC0zLjEvbmV0d29ya1BhdGhSZWZlcmVuY2UiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJzZXJ2bGV0LTMuMS9ub25CbG9ja2luZ091dHB1dCIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9InNlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXQiIHRhcmdldD0iYWxsIi8+CkBAIC0zNTUsMTMgKzM1NSwxMyBAQAogICAgICAgICA8YW50IGRpcj0iY29udGV4dFBhdGhYbWxDb25maWciIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJjb250ZXh0Um9vdCIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImNvbnRleHRWYWx2ZVNldFJlcXVlc3RlZFNlc3Npb25Db29raWVQYXRoIiB0YXJnZXQ9ImFsbCIvPgotICAgICAgICA8YW50IGRpcj0iY29udGV4dFhtbENvbmZpZyIgdGFyZ2V0PSJhbGwiLz4gCisgICAgICAgIDxhbnQgZGlyPSJjb250ZXh0WG1sQ29uZmlnIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0iY29udGV4dFhtbExpZmVjeWNsZUxpc3RlbmVyIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0iY29udGV4dFhtbExpZmVjeWNsZUxpc3RlbmVyR2xvYmFsIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0iY29udGV4dFhtbFJlbW90ZUhvc3RWYWx2ZSIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImNvb2tpZVZhbHVlV2l0aEVxdWFscyIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImNvb2tpZVZhbHVlV2l0aFNwYWNlcyIgdGFyZ2V0PSJhbGwiLz4KLSAgICAgICAgPGFudCBkaXI9ImNyb3NzQ29udGV4dERpc3BhdGNoTG9uZ2VzdENvbnRleHRSb290TWF0Y2giIHRhcmdldD0iYWxsIi8+IAorICAgICAgICA8YW50IGRpcj0iY3Jvc3NDb250ZXh0RGlzcGF0Y2hMb25nZXN0Q29udGV4dFJvb3RNYXRjaCIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImRlbGVnYXRlIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0iZGlzYWJsZURlZmF1bHRFcnJvclBhZ2UiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJlbXB0eUNvbnRleHRSb290IiB0YXJnZXQ9ImFsbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlQ29udHJvbFJlc3BvbnNlSGVhZGVycy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVDb250cm9sUmVzcG9uc2VIZWFkZXJzL1dlYlRlc3QuamF2YQppbmRleCBlY2E2NDFmLi43MDg4OGY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVDb250cm9sUmVzcG9uc2VIZWFkZXJzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVDb250cm9sUmVzcG9uc2VIZWFkZXJzL1dlYlRlc3QuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MTc1NjQyIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTIsOCArNTIsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VKc3AoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZC4iKTsKQEAgLTYzLDE0ICs2MywxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2VKc3AoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgIAorCiAgICAgICAgIFNvY2tldCBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi9qc3AvdGVzdC5qc3AiICsgIiBIVFRQLzEuMFxuIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlQ29udHJvbFJlc3BvbnNlSGVhZGVycy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlQ29udHJvbFJlc3BvbnNlSGVhZGVycy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk5YjBiZTEuLmVlMzZkZjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUNvbnRyb2xSZXNwb25zZUhlYWRlcnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVDb250cm9sUmVzcG9uc2VIZWFkZXJzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY2FjaGUtY29udHJvbC1yZXNwb25zZS1oZWFkZXJzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVDb250cm9sUmVzcG9uc2VIZWFkZXJzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUNvbnRyb2xSZXNwb25zZUhlYWRlcnMvYnVpbGQueG1sCmluZGV4IDQzMTQ3M2YuLmFmMjhkZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUNvbnRyb2xSZXNwb25zZUhlYWRlcnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUNvbnRyb2xSZXNwb25zZUhlYWRlcnMvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxNiArNDQsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTc1LDcgKzc1LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODcsMTAgKzg3LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlRmlsdGVyTWFwcGluZ0Rpc3BhdGNoZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlRmlsdGVyTWFwcGluZ0Rpc3BhdGNoZXIvV2ViVGVzdC5qYXZhCmluZGV4IGFhYWM5NDkuLjE4NTgwOGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUZpbHRlck1hcHBpbmdEaXNwYXRjaGVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVGaWx0ZXJNYXBwaW5nRGlzcGF0Y2hlci9XZWJUZXN0LmphdmEKQEAgLTQ5LDkgKzQ5LDkgQEAKICAgICAgICAgICogYm9keS4KICAgICAgICAgICogQ291bnRlciBpbiAvZGlzcGF0Y2hUbyBnZXRzIGluY3JlbWVudGVkLgogICAgICAgICAgKi8KLSAgICAgICAgc3VjY2VzcyA9IGRvVGVzdCgiaHR0cDovLyIgKyBob3N0UG9ydFJvb3QgKyAiL2Rpc3BhdGNoVG8iLCAKKyAgICAgICAgc3VjY2VzcyA9IGRvVGVzdCgiaHR0cDovLyIgKyBob3N0UG9ydFJvb3QgKyAiL2Rpc3BhdGNoVG8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICJSRVNQT05TRS0wIik7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChzdWNjZXNzKSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogQWNjZXNzIC9kaXNwYXRjaFRvIGRpcmVjdGx5LCBleHBlY3QgIlJFU1BPTlNFLTEiIGluIHJlc3BvbnNlCkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgc3VjY2VzcyA9IGRvVGVzdCgiaHR0cDovLyIgKyBob3N0UG9ydFJvb3QgKyAiL2Rpc3BhdGNoRnJvbT9hY3Rpb249aW5jbHVkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSRVNQT05TRS00Iik7Ci0gICAgICAgIH0gICAgICAgIAorICAgICAgICB9CiAKICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgICAgICAgIC8qCkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogCiAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUZpbHRlck1hcHBpbmdEaXNwYXRjaGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVGaWx0ZXJNYXBwaW5nRGlzcGF0Y2hlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGNhNDQ0YzUuLmNiN2I2MjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUZpbHRlck1hcHBpbmdEaXNwYXRjaGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlRmlsdGVyTWFwcGluZ0Rpc3BhdGNoZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jYWNoZS1maWx0ZXItbWFwcGluZy1kaXNwYXRjaGVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVGaWx0ZXJNYXBwaW5nRGlzcGF0Y2hlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVGaWx0ZXJNYXBwaW5nRGlzcGF0Y2hlci9idWlsZC54bWwKaW5kZXggMDBmZGFkMy4uYzM5Nzc2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlRmlsdGVyTWFwcGluZ0Rpc3BhdGNoZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUZpbHRlck1hcHBpbmdEaXNwYXRjaGVyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsMTAgKzcwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlRmlsdGVyTWFwcGluZ0Rpc3BhdGNoZXIvZGVzY3JpcHRvci9zdW4td2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUZpbHRlck1hcHBpbmdEaXNwYXRjaGVyL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKaW5kZXggNDhiYjc4Ny4uNzZlNTY2MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlRmlsdGVyTWFwcGluZ0Rpc3BhdGNoZXIvZGVzY3JpcHRvci9zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVGaWx0ZXJNYXBwaW5nRGlzcGF0Y2hlci9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCkBAIC0yNyw2ICsyNyw2IEBACiAgICAgICA8ZGlzcGF0Y2hlcj5GT1JXQVJEPC9kaXNwYXRjaGVyPgogICAgICAgPGRpc3BhdGNoZXI+SU5DTFVERTwvZGlzcGF0Y2hlcj4KICAgICA8L2NhY2hlLW1hcHBpbmc+Ci0gIDwvY2FjaGU+IAorICA8L2NhY2hlPgogCiA8L3N1bi13ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlSGFuZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVIYW5nL1dlYlRlc3QuamF2YQppbmRleCA2MzNhYTY0Li44MzRkYTUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVIYW5nL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVIYW5nL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElUIDEyODkxLCAxNzM3NyIpOwpAQCAtNjMsOCArNjMsOCBAQAogCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBudWxsOwotICAgICAgIAotICAgICAgICB0cnkgeyAgICAgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICAgICAgY29udGV4dFJvb3QgKyAiLyIgKyBwYXRoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhhbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhhbmcvYnVpbGQucHJvcGVydGllcwppbmRleCAzNDQ3OGZhLi5lNWI4YTAwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVIYW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlSGFuZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNhY2hlLWhhbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhhbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlSGFuZy9idWlsZC54bWwKaW5kZXggN2U4Y2Y4NS4uOTQ3ZDViYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlSGFuZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlSGFuZy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgIDxkZWxldGUgZmlsZT0iV2ViVGVzdC5jbGFzcyIvPgogICAgICAgPGRlbGV0ZSBmaWxlPSJSZXBSdW5Db25mLnR4dCIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE5ICs0NCwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCkBAIC03Miw5ICs3Miw5IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlSGVscGVyUmVmL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhlbHBlclJlZi9XZWJUZXN0LmphdmEKaW5kZXggNDcxMGVjMC4uYTFmMjY1OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlSGVscGVyUmVmL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVIZWxwZXJSZWYvV2ViVGVzdC5qYXZhCkBAIC0zNywyNCArMzcsMjQgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQ1IgNjI0MDUzOSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKICAgICAgICAgd2ViVGVzdC5kb1Rlc3QoKTsKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAKLSAgICAgICAgdHJ5IHsgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAsICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAicmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhlbHBlclJlZi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlSGVscGVyUmVmL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTE3YjgzNC4uNzU5OTRhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlSGVscGVyUmVmL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlSGVscGVyUmVmL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY2FjaGUtaGVscGVyLXJlZiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlSGVscGVyUmVmL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhlbHBlclJlZi9idWlsZC54bWwKaW5kZXggMDBmZGFkMy4uYzM5Nzc2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlSGVscGVyUmVmL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVIZWxwZXJSZWYvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCwxMCArNzAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVIZWxwZXJSZWYvc2VydmxldC9oZWxwZXJzL015Q2FjaGVIZWxwZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhlbHBlclJlZi9zZXJ2bGV0L2hlbHBlcnMvTXlDYWNoZUhlbHBlci5qYXZhCmluZGV4IDFjMThkYjIuLmU1N2UxN2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhlbHBlclJlZi9zZXJ2bGV0L2hlbHBlcnMvTXlDYWNoZUhlbHBlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhlbHBlclJlZi9zZXJ2bGV0L2hlbHBlcnMvTXlDYWNoZUhlbHBlci5qYXZhCkBAIC0yOSwyMSArMjksMjEgQEAKIHB1YmxpYyBjbGFzcyBNeUNhY2hlSGVscGVyIGltcGxlbWVudHMgQ2FjaGVIZWxwZXIgewogCiAgICAgLy8gVmFsdWVzIGlzIGluaXRpYWxpemVkICB0byBDYWNoZUFibGUKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY2FjaGVLZXk9Im15S2V5IjsgCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNhY2hlS2V5PSJteUtleSI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0NhY2hlQWJsZT10cnVlOwogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNSZWZyZXNoTmVlZGVkPWZhbHNlOwogICAgIHByaXZhdGUgc3RhdGljIGludCB0aW1lT3V0PTIwOwotICAKLSAgICAKKworCiAgICAgcHVibGljIHZvaWQgaW5pdCAoU2VydmxldENvbnRleHQgY29udGV4dCwgTWFwIHByb3BzKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJteUNhY2hlSGVscGVyMjppbml0Iik7CiAgICAgICAgIC8vIE5vdGhpbmcgdG8gaW5pdGlhbGl6ZQogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJteUNhY2hlSGVscGVyMjpleGl0Iik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRDYWNoZUtleShIdHRwU2VydmxldFJlcXVlc3QgcmVxKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibXlDYWNoZUhlbHBlcjI6Z2V0Q2FjaGVLZXkiKTsKICAgICAgICAgU3RyaW5nIGtleSA9IHJlcS5nZXRQYXJhbWV0ZXIoImNhY2hlS2V5Iik7CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICAvLyBJZiB1c2VyIGRvIG5vdCBlbnRlciBhIGtleSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgIm15S2V5IgogICAgICAgICByZXR1cm4gY2FjaGVLZXk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGludCBnZXRUaW1lb3V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEpIHsKICAgICAgICAgU3RyaW5nIHRpbWVPdXRTdHIgPSBudWxsOwogICAgICAgICBpbnQgdGltZSA9IDA7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOdW1iZXIgRm9ybWF0IEV4Y2VwdGlvbiBPY2N1cnM6ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBuZmUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIE5lZ2F0aXZlIHRpbWUgb3V0IHZhbHVlIHRyZWF0IGFzIDAgCisgICAgICAgICAgICAvLyBOZWdhdGl2ZSB0aW1lIG91dCB2YWx1ZSB0cmVhdCBhcyAwCiAgICAgICAgICAgICBpZiAodGltZSA+IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWU7CiAgICAgICAgICAgICBlbHNlIHJldHVybiAwOwpAQCAtNzQsMTggKzc0LDE4IEBACiAgICAgICAgIC8vIGlmIHVzZXIgZG8gbm90IGVudGVyIHRpbWUgb3V0LCB1c2UgZGVmYXVsdCB0aW1lT3V0IHZhbHVlCiAgICAgICAgIGVsc2UgcmV0dXJuIHRpbWVPdXQ7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaXNDYWNoZWFibGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSkgewogICAgICAgICBTdHJpbmcgaXNDYWNoZUFibGVTdHIgPSBudWxsOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm15Q2FjaGVIZWxwZXIyOmlzQ2FjaGVhYmxlIik7CiAgICAgICAgIGlzQ2FjaGVBYmxlU3RyID0gKFN0cmluZylyZXEuZ2V0UGFyYW1ldGVyKCJpc0NhY2hlQWJsZSIpOwotICAgICAgICAvLyBDaGVjayBpZiBpc0NhY2hlQWJsZSBudWxsIAorICAgICAgICAvLyBDaGVjayBpZiBpc0NhY2hlQWJsZSBudWxsCiAgICAgICAgIGlmICgoaXNDYWNoZUFibGVTdHIgIT0gbnVsbCkKICAgICAgICAgICAgICAgICAmJiAoaXNDYWNoZUFibGVTdHIuY29tcGFyZVRvKCJmYWxzZSIpICE9IDApKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBlbHNlIHJldHVybiBpc0NhY2hlQWJsZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBpc1JlZnJlc2hOZWVkZWQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSkgewogICAgICAgICBTdHJpbmcgaXNSZWZyZXNoTmVlZGVkU3RyID0gbnVsbDsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJteUNhY2hlSGVscGVyMjppc1JlZnJlc2hOZWVkZWQiKTsKQEAgLTk0LDYgKzk0LDYgQEAKICAgICAgICAgICAgICAgICAmJiAoaXNSZWZyZXNoTmVlZGVkU3RyLmNvbXBhcmVUbygidHJ1ZSIpICE9MCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZWxzZSByZXR1cm4gaXNSZWZyZXNoTmVlZGVkOwotICAgIH0gICAKKyAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhlbHBlclJlZi9zZXJ2bGV0L3NlcnZsZXRzL1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVIZWxwZXJSZWYvc2VydmxldC9zZXJ2bGV0cy9UZXN0U2VydmxldC5qYXZhCmluZGV4IDAyNmYwYjAuLjcwM2ZlYzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhlbHBlclJlZi9zZXJ2bGV0L3NlcnZsZXRzL1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlSGVscGVyUmVmL3NlcnZsZXQvc2VydmxldHMvVGVzdFNlcnZsZXQuamF2YQpAQCAtMjEsOSArMjEsOSBAQAogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7CiAKIHB1YmxpYyBjbGFzcyBUZXN0U2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgLy8gRG8gbm90aGluZwotICAgIH0gICAKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FzZVNlbnNpdGl2ZUhvc3RNYXBwaW5nL1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FzZVNlbnNpdGl2ZUhvc3RNYXBwaW5nL1NlcnZsZXRUZXN0LmphdmEKaW5kZXggMzViOGI2MS4uY2MzOWI3OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nhc2VTZW5zaXRpdmVIb3N0TWFwcGluZy9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYXNlU2Vuc2l0aXZlSG9zdE1hcHBpbmcvU2VydmxldFRlc3QuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXR7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICB9CkBAIC0zNCw3ICszNCw3IEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nhc2VTZW5zaXRpdmVIb3N0TWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nhc2VTZW5zaXRpdmVIb3N0TWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk5ODZhMjIuLjBjNDA1NWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYXNlU2Vuc2l0aXZlSG9zdE1hcHBpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FzZVNlbnNpdGl2ZUhvc3RNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDExICsxNSwxMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jYXNlLXNlbnNpdGl2ZS1ob3N0LW1hcHBpbmciLz4KIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYXNlU2Vuc2l0aXZlSG9zdE1hcHBpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nhc2VTZW5zaXRpdmVIb3N0TWFwcGluZy9idWlsZC54bWwKaW5kZXggNGM0ZDRkYy4uNmM5NzE0ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nhc2VTZW5zaXRpdmVIb3N0TWFwcGluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nhc2VTZW5zaXRpdmVIb3N0TWFwcGluZy9idWlsZC54bWwKQEAgLTM4LDcgKzM4LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ2LDEwICs0NiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTcsMTQgKzU3LDE0IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPiAKKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYXNlU2Vuc2l0aXZlSG9zdE1hcHBpbmcvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nhc2VTZW5zaXRpdmVIb3N0TWFwcGluZy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZmUyNGEwZi4uZmZkNjY4ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nhc2VTZW5zaXRpdmVIb3N0TWFwcGluZy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nhc2VTZW5zaXRpdmVIb3N0TWFwcGluZy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTI2LDcgKzI2LDcgQEAKICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NoYW5nZVNlc3Npb25JZE9uQXV0aGVudGljYXRpb24vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NoYW5nZVNlc3Npb25JZE9uQXV0aGVudGljYXRpb24vV2ViVGVzdC5qYXZhCmluZGV4IDY5OWNmYWEuLjk5MDk2YTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jaGFuZ2VTZXNzaW9uSWRPbkF1dGhlbnRpY2F0aW9uL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2hhbmdlU2Vzc2lvbklkT25BdXRoZW50aWNhdGlvbi9XZWJUZXN0LmphdmEKQEAgLTIzLDEwICsyMywxMCBAQAogICogRml4IGZvciBDUiA2OTQ3Mjk2CiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAiY2hhbmdlLXNlc3Npb24taWQtb24tYXV0aGVudGljYXRpb24iOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDE7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApAQCAtMzksNyArMzksNyBAQAogICAgICAgICBTdHJpbmcgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogCiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gZ29HZXQoaG9zdCwgcG9ydCwgY29udGV4dFJvb3QgKyAiL3dlbGNvbWUuanNwIiwKICAgICAgICAgICAgICAgICAgICBudWxsLCBmYWxzZSk7CkBAIC00NywxMiArNDcsMTIgQEAKICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCAmJiByZXN1bHQubGVuZ3RoKCkgPiAwKSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0MiA9IGdvR2V0KGhvc3QsIHBvcnQsIGNvbnRleHRSb290ICsgIi9zZWN1cmUuanNwIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCwgdHJ1ZSk7Ci0gICAgICAgICAgICB9IAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsCiAgICAgICAgICAgICAgICAgICAgIChyZXN1bHQgIT0gbnVsbCAmJiByZXN1bHQubGVuZ3RoKCkgPiAwICYmCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDIgIT0gbnVsbCAmJiByZXN1bHQyLmxlbmd0aCgpID4gMCAmJgotICAgICAgICAgICAgICAgICAgICAhcmVzdWx0LmVxdWFscyhyZXN1bHQyKSkgPyAKKyAgICAgICAgICAgICAgICAgICAgIXJlc3VsdC5lcXVhbHMocmVzdWx0MikpID8KICAgICAgICAgICAgICAgICAgICAgc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0LmdldE1lc3NhZ2UoKSk7CkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgICAgICAgICAgICAgbGluZU51bSsrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRlc3QgVU5QUkVESUNURUQtRkFJTFVSRSIpOwogICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CkBAIC0xMTgsNSArMTE4LDUgQEAKICAgICAgICAgfQogCiAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2hhbmdlU2Vzc2lvbklkT25BdXRoZW50aWNhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NoYW5nZVNlc3Npb25JZE9uQXV0aGVudGljYXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCA1MTY3MGYxLi45YjIxOTc2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2hhbmdlU2Vzc2lvbklkT25BdXRoZW50aWNhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jaGFuZ2VTZXNzaW9uSWRPbkF1dGhlbnRpY2F0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEyICsxNSwxMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jaGFuZ2Utc2Vzc2lvbi1pZC1vbi1hdXRoZW50aWNhdGlvbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY2hhbmdlLXNlc3Npb24taWQtb24tYXV0aGVudGljYXRpb24iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2NvbnRleHQueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2hhbmdlU2Vzc2lvbklkT25BdXRoZW50aWNhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2hhbmdlU2Vzc2lvbklkT25BdXRoZW50aWNhdGlvbi9idWlsZC54bWwKaW5kZXggNmYwNjJiMC4uMjFkODhiNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NoYW5nZVNlc3Npb25JZE9uQXV0aGVudGljYXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jaGFuZ2VTZXNzaW9uSWRPbkF1dGhlbnRpY2F0aW9uL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICAgIDxkZWxldGUgZmlsZT0iV2ViVGVzdC5jbGFzcyIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQzLDEwICs0MywxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKQEAgLTY1LDExICs2NSwxMSBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imdyb3VwcyIgdmFsdWU9ImphdmFlZSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODEsMTAgKzgxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXVzZXItY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jaHVua2luZ0Rpc2FibGVkL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jaHVua2luZ0Rpc2FibGVkL1dlYlRlc3QuamF2YQppbmRleCBmOGZjZTEzLi5mYjkyYjA5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2h1bmtpbmdEaXNhYmxlZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NodW5raW5nRGlzYWJsZWQvV2ViVGVzdC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDQ4NjE5MzMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01NCw4ICs1NCw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZVNlcnZsZXQoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZC4iKTsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlU2VydmxldCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAKQEAgLTc2LDcgKzc2LDcgQEAKICAgICAgICAgb3Mud3JpdGUoaG9zdEhlYWRlci5nZXRCeXRlcygpKTsKIAogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2h1bmtpbmdEaXNhYmxlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NodW5raW5nRGlzYWJsZWQvYnVpbGQucHJvcGVydGllcwppbmRleCA5ZDdjMWQ5Li4xYjllMGI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2h1bmtpbmdEaXNhYmxlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jaHVua2luZ0Rpc2FibGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY2h1bmtpbmctZGlzYWJsZWQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jaHVua2luZ0Rpc2FibGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jaHVua2luZ0Rpc2FibGVkL2J1aWxkLnhtbAppbmRleCBlYjNkYzY4Li44YzgyZTY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2h1bmtpbmdEaXNhYmxlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NodW5raW5nRGlzYWJsZWQvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxNiArNDQsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTY3LDcgKzY3LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzksMTAgKzc5LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jaHVua2luZ0Rpc2FibGVkL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jaHVua2luZ0Rpc2FibGVkL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA0ZDlkNGEwLi45OGQxNjg0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2h1bmtpbmdEaXNhYmxlZC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NodW5raW5nRGlzYWJsZWQvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgICAgIDxkaXNwbGF5LW5hbWU+VGVzdFNlcnZsZXQ8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz5UZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jaHVua2luZ0Rpc2FibGVkL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jaHVua2luZ0Rpc2FibGVkL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQppbmRleCA2MDEzYjY5Li4xOTkxMGYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2h1bmtpbmdEaXNhYmxlZC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NodW5raW5nRGlzYWJsZWQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewogCiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlcy5nZXRXcml0ZXIoKTsKLSAKKwogICAgICAgICAvKgogICAgICAgICAgKiBDaGVjayB0byBzZWUgaWYgd2UgYXJlIGluIFNFL0VFLCBieSB0cnlpbmcgdG8gbG9hZCBhIGNsYXNzIHRoYXQncwogICAgICAgICAgKiBhdmFpbGFibGUgb25seSBpbiBTRS9FRS4KQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgImNvbS5zdW4uZW50ZXJwcmlzZS5lZS53ZWIuYXV0aGVudGljYXRvci5IQVNpbmdsZVNpZ25PbiIpOwogICAgICAgICAgICAgLy8gRUUKICAgICAgICAgICAgIG91dC5wcmludGxuKCJUaGlzIGlzIEVFIik7Ci0JfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAvLyBQRQogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPEJVRkZFUl9TSVpFOyBpKyspIHsKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIlgiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc1BhdGhNYW5pZmVzdEF0dHJpYnV0ZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3NQYXRoTWFuaWZlc3RBdHRyaWJ1dGUvV2ViVGVzdC5qYXZhCmluZGV4IDExOTU4ODcuLmRmNzk1ZjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc1BhdGhNYW5pZmVzdEF0dHJpYnV0ZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzUGF0aE1hbmlmZXN0QXR0cmlidXRlL1dlYlRlc3QuamF2YQpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJVCAxMTQxNyBhbmQgSVQgMTE0MTkiKTsKQEAgLTY1LDExICs2NSwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyBqc3ApIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdCArIGpzcCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzUGF0aE1hbmlmZXN0QXR0cmlidXRlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3NQYXRoTWFuaWZlc3RBdHRyaWJ1dGUvYnVpbGQucHJvcGVydGllcwppbmRleCA2YThjMGIwLi5hMzE5ZjlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3NQYXRoTWFuaWZlc3RBdHRyaWJ1dGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3NQYXRoTWFuaWZlc3RBdHRyaWJ1dGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jbGFzcy1wYXRoLW1hbmlmZXN0LWF0dHJpYnV0ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzUGF0aE1hbmlmZXN0QXR0cmlidXRlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc1BhdGhNYW5pZmVzdEF0dHJpYnV0ZS9idWlsZC54bWwKaW5kZXggYjFiNTVlZi4uYmFlZDRmOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzUGF0aE1hbmlmZXN0QXR0cmlidXRlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3NQYXRoTWFuaWZlc3RBdHRyaWJ1dGUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NiwyMyArNDYsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3NQYXRoTWFuaWZlc3RBdHRyaWJ1dGVQcmVjb21waWxlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc1BhdGhNYW5pZmVzdEF0dHJpYnV0ZVByZWNvbXBpbGUvV2ViVGVzdC5qYXZhCmluZGV4IDllZDk1NGQuLjA3ODRlYmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc1BhdGhNYW5pZmVzdEF0dHJpYnV0ZVByZWNvbXBpbGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc1BhdGhNYW5pZmVzdEF0dHJpYnV0ZVByZWNvbXBpbGUvV2ViVGVzdC5qYXZhCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElUIDExNDE3IGFuZCBJVCAxMTQxOSIpOwpAQCAtNjUsMTEgKzY1LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nIGpzcCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290ICsganNwKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3NQYXRoTWFuaWZlc3RBdHRyaWJ1dGVQcmVjb21waWxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3NQYXRoTWFuaWZlc3RBdHRyaWJ1dGVQcmVjb21waWxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjI1YjU4YS4uZDM0MGIzYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzUGF0aE1hbmlmZXN0QXR0cmlidXRlUHJlY29tcGlsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc1BhdGhNYW5pZmVzdEF0dHJpYnV0ZVByZWNvbXBpbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jbGFzcy1wYXRoLW1hbmlmZXN0LWF0dHJpYnV0ZS1wcmVjb21waWxlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3NQYXRoTWFuaWZlc3RBdHRyaWJ1dGVQcmVjb21waWxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc1BhdGhNYW5pZmVzdEF0dHJpYnV0ZVByZWNvbXBpbGUvYnVpbGQueG1sCmluZGV4IGIxYjU1ZWYuLmJhZWQ0ZjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc1BhdGhNYW5pZmVzdEF0dHJpYnV0ZVByZWNvbXBpbGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc1BhdGhNYW5pZmVzdEF0dHJpYnV0ZVByZWNvbXBpbGUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NiwyMyArNDYsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZUphckZpbGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VKYXJGaWxlL1dlYlRlc3QuamF2YQppbmRleCA3ZjgxZmY1Li4wOGNkZGEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZUphckZpbGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlSmFyRmlsZS9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2NDk1OTkxIik7CkBAIC01NCwxMSArNTQsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdCArICIvdGVzdC5qc3AiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogCkBAIC03MSw2ICs3MSw2IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7Ci0gICAgICAgIH0gIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VKYXJGaWxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZUphckZpbGUvYnVpbGQucHJvcGVydGllcwppbmRleCA0ZjIzNmI2Li4xYjM0M2FkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZUphckZpbGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZUphckZpbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jbGFzc2xvYWRlci1nZXQtcmVzb3VyY2UtamFyLWZpbGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlSmFyRmlsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZUphckZpbGUvYnVpbGQueG1sCmluZGV4IDAwZmRhZDMuLmMzOTc3NmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlSmFyRmlsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VKYXJGaWxlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsMTAgKzcwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VKYXJGaWxlL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlSmFyRmlsZS9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggYjdjMTFiMC4uYzc4NGU4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VKYXJGaWxlL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZUphckZpbGUvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOCw2ICsxOCw2IEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMi41IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KLSAgICAgCisKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VKYXJGaWxlL3NlcnZsZXQvdGVzdC9EdW1teS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VKYXJGaWxlL3NlcnZsZXQvdGVzdC9EdW1teS5qYXZhCmluZGV4IGJkYjk2NWQuLmVjMWFkOTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlSmFyRmlsZS9zZXJ2bGV0L3Rlc3QvRHVtbXkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZUphckZpbGUvc2VydmxldC90ZXN0L0R1bW15LmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogLyoKICAqIER1bW15IGNsYXNzIHRvIG1ha2Ugc3VyZSB0aGUgd2FyIGhhcyBXRUItSU5GL2NsYXNzZXMgZm9sZGVyLiBUaGUgdGVzdC5qc3AKLSAqIGluIHRoaXMgd2ViIGFwcGxpY2F0aW9uIGRvZXMgZ2V0UmVzb3VyY2Ugd2l0aCBhIHJlc291cmNlIHBhdGggdGhhdCBpcyAKKyAqIGluIHRoaXMgd2ViIGFwcGxpY2F0aW9uIGRvZXMgZ2V0UmVzb3VyY2Ugd2l0aCBhIHJlc291cmNlIHBhdGggdGhhdCBpcwogICogcmVsYXRpdmUgdG8gV0VCLUlORi9jbGFzc2VzIGZvbGRlci4KICAqLwogcHVibGljIGNsYXNzIER1bW15IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlc0RlbGVnYXRlRmFsc2UvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VzRGVsZWdhdGVGYWxzZS9XZWJUZXN0LmphdmEKaW5kZXggZmJhY2M5OS4uZGRiZWZkOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VzRGVsZWdhdGVGYWxzZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VzRGVsZWdhdGVGYWxzZS9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgNjU2OCIpOwpAQCAtNTQsMTEgKzU0LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgIGNvbnRleHRSb290ICsgIi90ZXN0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTcyLDYgKzcyLDYgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKLSAgICAgICAgfSAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZXNEZWxlZ2F0ZUZhbHNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZXNEZWxlZ2F0ZUZhbHNlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzEwMjM2Zi4uYzRjMjE2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VzRGVsZWdhdGVGYWxzZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlc0RlbGVnYXRlRmFsc2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jbGFzc2xvYWRlci1nZXQtcmVzb3VyY2VzLWRlbGVnYXRlLWZhbHNlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZXNEZWxlZ2F0ZUZhbHNlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlc0RlbGVnYXRlRmFsc2UvYnVpbGQueG1sCmluZGV4IDQzNDVjMGQuLmQ4NDNkNjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlc0RlbGVnYXRlRmFsc2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlc0RlbGVnYXRlRmFsc2UvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMiArNDQsMjIgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb3B5UmVzb3VyY2VzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZXNEZWxlZ2F0ZUZhbHNlL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlc0RlbGVnYXRlRmFsc2UvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGIxYzg2YzMuLmVhNjljNDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlc0RlbGVnYXRlRmFsc2UvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlc0RlbGVnYXRlRmFsc2UvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yOCw2ICsyOCw2IEBACiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi90ZXN0PC91cmwtcGF0dGVybj4KICAgICA8L3NlcnZsZXQtbWFwcGluZz4KLSAgICAgCisKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VzRGVsZWdhdGVGYWxzZS9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZXNEZWxlZ2F0ZUZhbHNlL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQppbmRleCBjMjJlZmRhLi4wYWYzNWRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZXNEZWxlZ2F0ZUZhbHNlL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZXNEZWxlZ2F0ZUZhbHNlL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAiV3JvbmcgbnVtYmVyIG9mIHJlc291cmNlIFVSTHMsIGV4cGVjdGVkIDIiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVybHNbaSsrXSA9IGUubmV4dEVsZW1lbnQoKTsgICAgICAgICAgICAKKyAgICAgICAgICAgIHVybHNbaSsrXSA9IGUubmV4dEVsZW1lbnQoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpICE9IDIpIHsKQEAgLTUxLDE0ICs1MSwxNCBAQAogICAgICAgICAvKgogICAgICAgICAgKiBTaW5jZSBkZWxlZ2F0ZSBpcyBzZXQgdG8gZmFsc2UsIHdlIGV4cGVjdCB0aGUgZmlyc3QgVVJMIGluIHRoZQogICAgICAgICAgKiByZXR1cm5lZCBlbnVtOgotICAgICAgICAgKiAKKyAgICAgICAgICoKICAgICAgICAgICogamFyOmZpbGU6L3NwYWNlL2x1ZWhlL3dzL3YzL2Rpc3RyaWJ1dGlvbnMvd2ViL3RhcmdldC9nbGFzc2Zpc2hcCi0JICogICAgIC9kb21haW5zL2RvbWFpbjEvYXBwbGljYXRpb25zXAorICAgICAqICAgICAvZG9tYWlucy9kb21haW4xL2FwcGxpY2F0aW9uc1wKICAgICAgICAgICogICAgIC93ZWItY2xhc3Nsb2FkZXItZ2V0LXJlc291cmNlcy1kZWxlZ2F0ZS1mYWxzZS13ZWIvV0VCLUlORi9saWJcCiAgICAgICAgICAqICAgICAvbXl0ZXN0LmphciEvdGVzdC50eHQKLSAgICAgICAgICogCisgICAgICAgICAqCiAgICAgICAgICAqIHRvIGJlIGxvbmdlciB0aGFuIHRoZSBzZWNvbmQ6Ci0gICAgICAgICAqIAorICAgICAgICAgKgogICAgICAgICAgKiBqYXI6ZmlsZTovc3BhY2UvbHVlaGUvd3MvdjMvZGlzdHJpYnV0aW9ucy93ZWIvdGFyZ2V0L2dsYXNzZmlzaFwKICAgICAgICAgICogICAgIC9saWIvdGVzdC5qYXIhL3Rlc3QudHh0fCNdCiAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbWV0RWNoby9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tZXRFY2hvL1dlYlRlc3QuamF2YQppbmRleCAwZDU2ZDljLi42MDE0N2NjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tZXRFY2hvL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tZXRFY2hvL1dlYlRlc3QuamF2YQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGNvbWV0OiBlY2hvIik7CkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgICAgIGludCBzdGF0dXNDb2RlID0gdXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgICAgIGlmIChIdHRwVVJMQ29ubmVjdGlvbi5IVFRQX09LICE9IHN0YXR1c0NvZGUpIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJJbmNvcnJlY3QgcmV0dXJuIGNvZGU6ICIgKyBzdGF0dXNDb2RlKTsKLSAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmIChvcyAhPSBudWxsKSB7CkBAIC0xNzgsNyArMTc4LDcgQEAKICAgICAgICAgICAgICAgICBsaXN0ZW5NZXNzYWdlID0gYnIucmVhZExpbmUoKTsKICAgICAgICAgICAgICAgICBlbmRTaWduYWwuY291bnREb3duKCk7CiAgICAgICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlRlc3QgVU5QUkVESUNURUQtRkFJTFVSRSIpOwogICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgICB0cnkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbWV0RWNoby9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbWV0RWNoby9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDRiMWRhMTcuLmMwM2ExYzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21ldEVjaG8vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tZXRFY2hvL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY29tZXQtZWNobyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbWV0RWNoby9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tZXRFY2hvL2J1aWxkLnhtbAppbmRleCA3OTMxYTBmLi40YjM5OWUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tZXRFY2hvL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tZXRFY2hvL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfSIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ3LDIwICs0NywyMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwogICAgICAgICAgICAgc3JjZGlyPSIuIgogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtcnQuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC04MSw3ICs4MSw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTk2LDcgKzk2LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21ldEVjaG8vc2VydmxldC9Db21ldEVjaG9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tZXRFY2hvL3NlcnZsZXQvQ29tZXRFY2hvU2VydmxldC5qYXZhCmluZGV4IDk4OTZjOWQuLjQ1ODc5NDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21ldEVjaG8vc2VydmxldC9Db21ldEVjaG9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbWV0RWNoby9zZXJ2bGV0L0NvbWV0RWNob1NlcnZsZXQuamF2YQpAQCAtODMsNyArODMsNyBAQAogICAgICAgICByZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICByZXMuc2V0SGVhZGVyKCJDYWNoZS1Db250cm9sIiwgInByaXZhdGUiKTsKICAgICAgICAgcmVzLnNldEhlYWRlcigiUHJhZ21hIiwgIm5vLWNhY2hlIik7Ci0gICAgICAgIAorCiAgICAgICAgIFByaW50V3JpdGVyIHdyaXRlciA9IHJlcy5nZXRXcml0ZXIoKTsKICAgICAgICAgQ2hhdExpc3RuZXJIYW5kbGVyIGhhbmRsZXIgPSBuZXcgQ2hhdExpc3RuZXJIYW5kbGVyKCk7CiAgICAgICAgIGhhbmRsZXIuYXR0YWNoKHdyaXRlcik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0RpZ2VzdGVyQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0RpZ2VzdGVyQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbi9XZWJUZXN0LmphdmEKaW5kZXggOGZhNGViYy4uNDgwNDA4MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNEaWdlc3RlckNsYXNzTm90Rm91bmRFeGNlcHRpb24vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zRGlnZXN0ZXJDbGFzc05vdEZvdW5kRXhjZXB0aW9uL1dlYlRlc3QuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MzE0OTEyIik7CiAKQEAgLTU4LDcgKzU4LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgICAgICArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICAgICAgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7CiAgICAgICAgICAgICBpZiAoIUVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKQEAgLTk0LDYgKzk0LDYgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgewogICAgICAgICAgICAgICAgIC8vIGlnbm9yZQogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNEaWdlc3RlckNsYXNzTm90Rm91bmRFeGNlcHRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zRGlnZXN0ZXJDbGFzc05vdEZvdW5kRXhjZXB0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjgyYmY1Mi4uMGVlZmFiMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNEaWdlc3RlckNsYXNzTm90Rm91bmRFeGNlcHRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0RpZ2VzdGVyQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNvbW1vbnMtZGlnZXN0ZXItY2xhc3Mtbm90LWZvdW5kLWV4Y2VwdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNEaWdlc3RlckNsYXNzTm90Rm91bmRFeGNlcHRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNEaWdlc3RlckNsYXNzTm90Rm91bmRFeGNlcHRpb24vYnVpbGQueG1sCmluZGV4IGFiZWI2ZmUuLjYyMTA5ZDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zRGlnZXN0ZXJDbGFzc05vdEZvdW5kRXhjZXB0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0RpZ2VzdGVyQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDEwICs0NCwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTUsMTQgKzU1LDE0IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmcvV2ViVGVzdC5qYXZhCmluZGV4IGMwMDdiNTEuLjExNTg2M2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNMb2dnaW5nL1dlYlRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MjIwODE4Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDcsOCArNDcsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VTZXJ2bGV0KCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQuIik7CkBAIC01OCw3ICs1OCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZVNlcnZsZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIi9Gcm9tIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNMb2dnaW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNGQwMGY4ZC4uOTc4MjYwYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNMb2dnaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNMb2dnaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY29tbW9ucy1sb2dnaW5nIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNMb2dnaW5nL2J1aWxkLnhtbAppbmRleCAzZjFmOGY1Li45YjRlNTQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTQgKzUzLDE0IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcyLDEwICs3MiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmcvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDY2Yjk4NzUuLjQxNzY3YTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNMb2dnaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtNDIsNiArNDIsNiBAQAogICAgICAgICA8c2VydmxldC1uYW1lPlRvPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vVG88L3VybC1wYXR0ZXJuPgogICAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgICAKKwogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmdMb2NhbEFuZEdsb2JhbC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmdMb2NhbEFuZEdsb2JhbC9XZWJUZXN0LmphdmEKaW5kZXggODk2YzRjYi4uNzg1NjNjOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNMb2dnaW5nTG9jYWxBbmRHbG9iYWwvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZ0xvY2FsQW5kR2xvYmFsL1dlYlRlc3QuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSAyNjkyIik7CkBAIC01NywxMSArNTcsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpAQCAtODAsNyArODAsNyBAQAogICAgICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IGJyLnJlYWRMaW5lKCk7CiAgICAgICAgICAgICBpZiAoIUVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKQEAgLTk4LDYgKzk4LDYgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgewogICAgICAgICAgICAgICAgIC8vIGlnbm9yZQogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNMb2dnaW5nTG9jYWxBbmRHbG9iYWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZ0xvY2FsQW5kR2xvYmFsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYWQzMjVhMi4uYTk2YTk1YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNMb2dnaW5nTG9jYWxBbmRHbG9iYWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmdMb2NhbEFuZEdsb2JhbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNvbW1vbnMtbG9nZ2luZy1sb2NhbC1hbmQtZ2xvYmFsIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmdMb2NhbEFuZEdsb2JhbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmdMb2NhbEFuZEdsb2JhbC9idWlsZC54bWwKaW5kZXggNDY5YmEzMy4uN2MzNGRjMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNMb2dnaW5nTG9jYWxBbmRHbG9iYWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZ0xvY2FsQW5kR2xvYmFsL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDYsMjMgKzQ2LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb3B5UmVzb3VyY2VzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmdMb2NhbEFuZEdsb2JhbC9saWIvdGVzdC9NeVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZ0xvY2FsQW5kR2xvYmFsL2xpYi90ZXN0L015VGVzdC5qYXZhCmluZGV4IDU0Y2IyYzAuLjE3NzVlZmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZ0xvY2FsQW5kR2xvYmFsL2xpYi90ZXN0L015VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZ0xvY2FsQW5kR2xvYmFsL2xpYi90ZXN0L015VGVzdC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgICBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coTXlUZXN0LmNsYXNzKTsKLQlyZXR1cm4gIlNVQ0NFU1MiOworICAgIHJldHVybiAiU1VDQ0VTUyI7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmdMb2NhbEFuZEdsb2JhbC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmdMb2NhbEFuZEdsb2JhbC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggODk2NGMzNi4uMWU1Y2MyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNMb2dnaW5nTG9jYWxBbmRHbG9iYWwvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZ0xvY2FsQW5kR2xvYmFsL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtMjYsOCArMjYsOCBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgT2JqZWN0IG8gPSBDbGFzcy5mb3JOYW1lKCJ0ZXN0Lk15VGVzdCIpLm5ld0luc3RhbmNlKCk7CiAgICAgICAgICAgICByZXMuZ2V0V3JpdGVyKCkucHJpbnRsbihvLnRvU3RyaW5nKCkpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUpOwotCX0KKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlKTsKKyAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRlbnRsZW5ndGgvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRlbnRsZW5ndGgvV2ViVGVzdC5qYXZhCmluZGV4IGI4NWQyYTkuLjZjM2M4NjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZW50bGVuZ3RoL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGVudGxlbmd0aC9XZWJUZXN0LmphdmEKQEAgLTI2LDggKzI2LDggQEAKICAgICBwcml2YXRlIHN0YXRpYyBVUkxDb25uZWN0aW9uIGNvbm4gPSBudWxsOwogICAgIHByaXZhdGUgc3RhdGljIFVSTCB1cmw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0T3V0cHV0U3RyZWFtIG9iamVjdFdyaXRlciA9IG51bGw7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsgIAotICAgIAorICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7CisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB0aHJvd3MgRXhjZXB0aW9uewogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CiAgICAgICAgIFN0cmluZyBwb3J0ID0gYXJnc1sxXTsKQEAgLTM1LDcgKzM1LDcgQEAKIAogICAgICAgICB0cnl7CiAgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJTdGFuZGFsb25lIFNlcnZsZXQvRmlsdGVyIHdhciB0ZXN0Iik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSdW5uaW5nIHRlc3QiKTsKICAgICAgICAgICAgIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QgKyAiL1NlcnZsZXRUZXN0Iik7CiAgICAgICAgICAgICBTdHJpbmcgb3JpZ2luYWxMb2MgPSB1cmwudG9TdHJpbmcoKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gdXJsQ29ubmVjdGlvbiA9IChIdHRwVVJMQ29ubmVjdGlvbiljb25uOwogICAgICAgICAgICAgICAgICAgICB1cmxDb25uZWN0aW9uLnNldERvT3V0cHV0KHRydWUpOwogCi0gICAgICAgICAgICAgICAgICAgIERhdGFPdXRwdXRTdHJlYW0gb3V0ID0gCisgICAgICAgICAgICAgICAgICAgIERhdGFPdXRwdXRTdHJlYW0gb3V0ID0KICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERhdGFPdXRwdXRTdHJlYW0odXJsQ29ubmVjdGlvbi5nZXRPdXRwdXRTdHJlYW0oKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlQnl0ZSgxKTsKIApAQCAtNTQsMTMgKzU0LDEzIEBACiAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGVuY29kZWRVUkwgPSB1cmxDb25uZWN0aW9uLmdldEhlYWRlckZpZWxkICgiTG9jYXRpb24iKTsKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlc3BvbnNlQ29kZTogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJlbmNvZGVkVVJMIDogIiArIGVuY29kZWRVUkwpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgIGlmICh1cmxDb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpICE9IDIwMSl7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiY29udGVudExlbmd0aC1yZXNwb25zZUNvZGUiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiY29udGVudExlbmd0aC1yZXNwb25zZUNvZGUiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgIGlmIChlbmNvZGVkVVJMICE9IG51bGwgJiYgIWVuY29kZWRVUkwuc3RhcnRzV2l0aChvcmlnaW5hbExvYykpewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImNvbnRlbnRMZW5ndGgtaGVhZGVyIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRlbnRsZW5ndGgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZW50bGVuZ3RoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNTcwNjI0MS4uMDkyMzYyZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRlbnRsZW5ndGgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGVudGxlbmd0aC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY29udGVudFR5cGUiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNvbnRlbnRUeXBlIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1jb250ZW50VHlwZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRlbnRsZW5ndGgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRlbnRsZW5ndGgvYnVpbGQueG1sCmluZGV4IDNmMWY4ZjUuLjliNGU1NDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZW50bGVuZ3RoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGVudGxlbmd0aC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTQgKzUzLDE0IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcyLDEwICs3MiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZW50bGVuZ3RoL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZW50bGVuZ3RoL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAwY2ZlODEyLi44MWIxNDU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGVudGxlbmd0aC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRlbnRsZW5ndGgvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+CiAKLSAgICA8bGlzdGVuZXI+ICAgICAKKyAgICA8bGlzdGVuZXI+CiAgICAgICAgIDxsaXN0ZW5lci1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9saXN0ZW5lci1jbGFzcz4KICAgICA8L2xpc3RlbmVyPgogCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRlbnRsZW5ndGgvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRlbnRsZW5ndGgvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDc4NzUxYTcuLjk2NjA1Y2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZW50bGVuZ3RoL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGVudGxlbmd0aC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IGltcGxlbWVudHMgSHR0cFNlc3Npb25MaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOwpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5kb1Bvc3RdIik7CiAgICAgICAgIEh0dHBTZXNzaW9uIHNlc3Npb24gPSByZXF1ZXN0LmdldFNlc3Npb24odHJ1ZSk7CiAKQEAgLTYyLDcgKzYyLDcgQEAKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uQ3JlYXRlZF0iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uRGVzdHJveWVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25EZXN0cm95ZWRdIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRQYXRoWG1sQ29uZmlnL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0UGF0aFhtbENvbmZpZy9XZWJUZXN0LmphdmEKaW5kZXggYWNjYzIzMC4uNjFjNzMzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRQYXRoWG1sQ29uZmlnL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFBhdGhYbWxDb25maWcvV2ViVGVzdC5qYXZhCkBAIC0yMSw4ICsyMSw4IEBACiAvKgogICogVW5pdCB0ZXN0IGZvciBnbGFzc2Zpc2gvZG9tYWlucy9kb21haW4xL2NvbmZpZy93ZWItY29udGV4dC1wYXRoLXhtbC1jb25maWcueG1sCiAgKgotICogVGhpcyB1bml0IHRlc3QgZW5zdXJlcyB3ZWJhcHAgY29udGV4dF9wYXRoLnhtbCBwYWNrYWdlZCBvdXRzaWRlIG9mIHRoZSBhcmNoaXZlLiAgTmVlZHMgdG8gYmUgYSBzZXBhcmF0ZSB0ZXN0IGZyb20gY29udGV4dFhtbENvbmZpZyBzaW5jZSBjb250ZXh0WG1sQ29uZmlnIHRlc3RzIHdlYmFwcC9NRVRBLUlORi9jb250ZXh0LnhtbCBwYWNrYWdlZCBpbnNpZGUgdGhlIFdBUiAKLSAqIAorICogVGhpcyB1bml0IHRlc3QgZW5zdXJlcyB3ZWJhcHAgY29udGV4dF9wYXRoLnhtbCBwYWNrYWdlZCBvdXRzaWRlIG9mIHRoZSBhcmNoaXZlLiAgTmVlZHMgdG8gYmUgYSBzZXBhcmF0ZSB0ZXN0IGZyb20gY29udGV4dFhtbENvbmZpZyBzaW5jZSBjb250ZXh0WG1sQ29uZmlnIHRlc3RzIHdlYmFwcC9NRVRBLUlORi9jb250ZXh0LnhtbCBwYWNrYWdlZCBpbnNpZGUgdGhlIFdBUgorICoKICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewogCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgY29udGV4dF9wYXRoLnhtbCIpOwpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0UGF0aFhtbENvbmZpZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRQYXRoWG1sQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTQwNWY5ZS4uNTViNTEwMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRQYXRoWG1sQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRQYXRoWG1sQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY29udGV4dC1wYXRoLXhtbC1jb25maWciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0UGF0aFhtbENvbmZpZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFBhdGhYbWxDb25maWcvYnVpbGQueG1sCmluZGV4IDI5NGFkOWMuLjYzMGY2ZTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0UGF0aFhtbENvbmZpZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRQYXRoWG1sQ29uZmlnL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3Ivd2ViLWNvbnRleHQtcGF0aC14bWwtY29uZmlnLnhtbCIgdG9kaXI9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2NvbmZpZyIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNzEsNyArNzEsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04MywxMCArODMsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFJvb3QvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRSb290L1dlYlRlc3QuamF2YQppbmRleCA2NWMyYWZlLi45NWZlN2YwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFJvb3QvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0Um9vdC9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgY29udGV4dC1yb290IHNldHRpbmcgaW4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgInN1bi13ZWIueG1sIik7CkBAIC01MCw4ICs1MCw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZUpzcCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkLiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRSb290L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFJvb3QvYnVpbGQucHJvcGVydGllcwppbmRleCA1Yzc1Y2YzLi5mYTJmY2JjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFJvb3QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFJvb3QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jb250ZXh0LXJvb3QiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0Um9vdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFJvb3QvYnVpbGQueG1sCmluZGV4IDY1NDA0ZjguLjZjN2EyODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0Um9vdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRSb290L2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjMgKzQ0LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItbm8tY29udGV4dC1yb290Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzIsMTAgKzcyLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRSb290L2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFJvb3QvZGVzY3JpcHRvci9zdW4td2ViLnhtbAppbmRleCAzMjE0YzlkLi5jNzJjYjE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFJvb3QvZGVzY3JpcHRvci9zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFJvb3QvZGVzY3JpcHRvci9zdW4td2ViLnhtbApAQCAtMjAsNSArMjAsNSBAQAogPCFET0NUWVBFIHN1bi13ZWItYXBwIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEFwcGxpY2F0aW9uIFNlcnZlciA4LjEgU2VydmxldCAyLjQvL0VOIiAiaHR0cDovL3d3dy5zdW4uY29tL3NvZnR3YXJlL3N1bm9uZS9hcHBzZXJ2ZXIvZHRkcy9zdW4td2ViLWFwcF8yXzQtMS5kdGQiPgogCiA8c3VuLXdlYi1hcHA+Ci0gIDxjb250ZXh0LXJvb3Q+bXljb250ZXh0cm9vdDwvY29udGV4dC1yb290PiAKKyAgPGNvbnRleHQtcm9vdD5teWNvbnRleHRyb290PC9jb250ZXh0LXJvb3Q+CiA8L3N1bi13ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRSb290RHVwbGljYXRlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0Um9vdER1cGxpY2F0ZS9XZWJUZXN0LmphdmEKaW5kZXggOWQ1N2ZkZS4uZTFjZDhkNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRSb290RHVwbGljYXRlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFJvb3REdXBsaWNhdGUvV2ViVGVzdC5qYXZhCkBAIC0xOSw4ICsxOSw4IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiAvKgotICogVW5pdCB0ZXN0IGZvciBHTEFTU0ZJU0gtMTg4NjEgCi0gKiAKKyAqIFVuaXQgdGVzdCBmb3IgR0xBU1NGSVNILTE4ODYxCisgKgogICogQWZ0ZXIgc2V0dGluZyBjb250ZXh0IHJvb3Qgb2YgdHdvIHdhcnMgd2hpY2ggZGVwbG95ZWQgb24gdGhlIHNlcnZlciB0YXJnZXQgd2l0aCB0aGUgc2FtZSB2YWx1ZSwKICAqIGJvdGggb2YgdGhlIHR3byB3YXJzIGFjY2Vzc2VkIGZhaWxlZC4KICAqCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIGNvbnRleHRSb290MSA9IGFyZ3NbMl07CiAgICAgICAgIGNvbnRleHRSb290MiA9IGFyZ3NbM107CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdMQVNTRklTSC0xODg2MSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUwLDggKzUwLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlSnNwKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQuIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFJvb3REdXBsaWNhdGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0Um9vdER1cGxpY2F0ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGIxMWFjOWYuLmY4MDVkNmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0Um9vdER1cGxpY2F0ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0Um9vdER1cGxpY2F0ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNvbnRleHQtcm9vdC1kdXBsaWNhdGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0Um9vdER1cGxpY2F0ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFJvb3REdXBsaWNhdGUvYnVpbGQueG1sCmluZGV4IDU2N2UzZWQuLmI1NDRjNTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0Um9vdER1cGxpY2F0ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRSb290RHVwbGljYXRlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTcgKzQ0LDE3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtOTIsNyArOTIsNyBAQAogICAgICAgICAgICAgICAgIHZhbHVlPSJhcHBsaWNhdGlvbnMuYXBwbGljYXRpb24uY29udGV4dHJvb3QyLmNvbnRleHQtcm9vdD1jb250ZXh0cm9vdDEiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgICAgIDxhcmcgbGluZT0idW5kZXBsb3kiLz4KQEAgLTExOSw3ICsxMTksNyBAQAogICAgICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2NvbnRleHRyb290Mn0iLz4KICAgICAgICAgPC9leGVjPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFZhbHZlU2V0UmVxdWVzdGVkU2Vzc2lvbkNvb2tpZVBhdGgvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRWYWx2ZVNldFJlcXVlc3RlZFNlc3Npb25Db29raWVQYXRoL1dlYlRlc3QuamF2YQppbmRleCAyNmNjOGY4Li4wYjdmMDE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFZhbHZlU2V0UmVxdWVzdGVkU2Vzc2lvbkNvb2tpZVBhdGgvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0VmFsdmVTZXRSZXF1ZXN0ZWRTZXNzaW9uQ29va2llUGF0aC9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBJVCA3NDI2Iik7CkBAIC01NSwxMSArNTUsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvdGVzdCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFZhbHZlU2V0UmVxdWVzdGVkU2Vzc2lvbkNvb2tpZVBhdGgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0VmFsdmVTZXRSZXF1ZXN0ZWRTZXNzaW9uQ29va2llUGF0aC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDY0M2VlMzEuLjNkMGM5NGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0VmFsdmVTZXRSZXF1ZXN0ZWRTZXNzaW9uQ29va2llUGF0aC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0VmFsdmVTZXRSZXF1ZXN0ZWRTZXNzaW9uQ29va2llUGF0aC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNvbnRleHQtdmFsdmUtc2V0LXJlcXVlc3RlZC1zZXNzaW9uLWNvb2tpZS1wYXRoIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFZhbHZlU2V0UmVxdWVzdGVkU2Vzc2lvbkNvb2tpZVBhdGgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRWYWx2ZVNldFJlcXVlc3RlZFNlc3Npb25Db29raWVQYXRoL2J1aWxkLnhtbAppbmRleCA1ZjM2NzE1Li42MmRiOWQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFZhbHZlU2V0UmVxdWVzdGVkU2Vzc2lvbkNvb2tpZVBhdGgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0VmFsdmVTZXRSZXF1ZXN0ZWRTZXNzaW9uQ29va2llUGF0aC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIyICs0MiwyMiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC02OSwxMCArNjksMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbENvbmZpZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbENvbmZpZy9XZWJUZXN0LmphdmEKaW5kZXggZDg0ZTgyOC4uNzMyYTI5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxDb25maWcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sQ29uZmlnL1dlYlRlc3QuamF2YQpAQCAtMjMsMTggKzIzLDE4IEBACiAgKiAoIkFkZCBzdXBwb3J0IGZvciBjb250ZXh0LnhtbCIpOgogICoKICAqIFRoaXMgdW5pdCB0ZXN0IGVuc3VyZXMgdGhlIGZvbGxvd2luZyBjb250ZXh0LnhtbCBjb25maWd1cmF0aW9uLgotICogCi0gKiAxLiBkZWZhdWx0IHZpcnR1YWwtc2VydmVyIGNvbnRleHQueG1sIHVzaW5nIHZpcnR1YWwtc2VydmVyIHByb3BlcnR5IAotICogImNvbnRleHRYbWxEZWZhdWx0IiAKLSAqIAorICoKKyAqIDEuIGRlZmF1bHQgdmlydHVhbC1zZXJ2ZXIgY29udGV4dC54bWwgdXNpbmcgdmlydHVhbC1zZXJ2ZXIgcHJvcGVydHkKKyAqICJjb250ZXh0WG1sRGVmYXVsdCIKKyAqCiAgKiAyLiBkZXBsb3llZCB3ZWJhcHBzJ3MgY29udGV4dC54bWwgKE1FVEEtSU5GL2NvbnRleHQueG1sKQogICoKICAqIFRoZSBnbG9iYWwgY29udGV4dC54bWwgYW5kIHZpcnR1YWwtc2VydmVyIGNvbnRleHQueG1sIHdpbGwgYmUgY29waWVkIHRvIGNvbmZpZwogICogYW5kIHJlbW92ZWQgYWZ0ZXIgdGhpcyB1bml0IHRlc3QuCi0gKiAKKyAqCiAgKiBUaGUgImNvbnRleHRYbWwiIHByb3BlcnR5IG9mIHRoZSB2aXJ0dWFsLXNlcnZlciAic2VydmVyIiBpcyBhZGRlZCAoYmVmb3JlCiAgKiB0aGUgd2ViYXBwJ3MgZGVwbG95bWVudCkgYW5kIHJlbW92ZWQgKGFmdGVyIHRoZSB3ZWJhcHAncyB1bmRlcGxveW1lbnQpCi0gKiAKKyAqCiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKIApAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSAyNDM5Iik7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKIAogICAgIH0KIApAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbENvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDljMmExNTQuLjRmZjI1ZTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxDb25maWcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jb250ZXh0LXhtbC1jb25maWciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sQ29uZmlnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sQ29uZmlnL2J1aWxkLnhtbAppbmRleCA4MGEyMjhjLi44ZWY3Y2UxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbENvbmZpZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxDb25maWcvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxNiArNDQsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGNvcHkgZmlsZT0iZGVzY3JpcHRvci9jb250ZXh0LnhtbCIgdG9kaXI9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2NvbmZpZyIvPgogICAgICAgICA8Y29weSBmaWxlPSJkZXNjcmlwdG9yL2NvbnRleHQueG1sLmRlZmF1bHQiIHRvZGlyPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9jb25maWciLz4KQEAgLTgzLDcgKzgzLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtOTUsMTAgKzk1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbExpZmVjeWNsZUxpc3RlbmVyL1dlYlRlc3QuamF2YQppbmRleCBjMmJmNTE3Li5mMWU4ZjBmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbExpZmVjeWNsZUxpc3RlbmVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbExpZmVjeWNsZUxpc3RlbmVyL1dlYlRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIExpZmVjeWNsZUxpc3RlbmVyIGluIGNvbnRleHQueG1sIik7CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGM1Nzc5M2UuLjhjMDc5YWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sTGlmZWN5Y2xlTGlzdGVuZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbExpZmVjeWNsZUxpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY29udGV4dC14bWwtbGlmZWN5Y2xlLWxpc3RlbmVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbExpZmVjeWNsZUxpc3RlbmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sTGlmZWN5Y2xlTGlzdGVuZXIvYnVpbGQueG1sCmluZGV4IDQyZDI2NWQuLmIxYzI1OGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sTGlmZWN5Y2xlTGlzdGVuZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sTGlmZWN5Y2xlTGlzdGVuZXIvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMiArNDQsMjIgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lci9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbExpZmVjeWNsZUxpc3RlbmVyL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCBkMjE4MjdjLi5mZGVkMTc1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbExpZmVjeWNsZUxpc3RlbmVyL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbExpZmVjeWNsZUxpc3RlbmVyL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgaW1wbGVtZW50cyBIdHRwU2Vzc2lvbkxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7CkBAIC01NCw3ICs1NCw3IEBACiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkNyZWF0ZWRdIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkRlc3Ryb3llZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uRGVzdHJveWVkXSIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sTGlmZWN5Y2xlTGlzdGVuZXJHbG9iYWwvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lckdsb2JhbC9XZWJUZXN0LmphdmEKaW5kZXggNDY5ZWEwYi4uN2MwMzU3MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lckdsb2JhbC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lckdsb2JhbC9XZWJUZXN0LmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIAogLyoKICAqCi0gKiBUaGlzIHVuaXQgdGVzdCBjaGVja2VzIExpZmVjeWNsZUxpc3RlbmVyIGluIGNvbnRleHQueG1sIGNvbmZpZ3VyYXRpb24uIAorICogVGhpcyB1bml0IHRlc3QgY2hlY2tlcyBMaWZlY3ljbGVMaXN0ZW5lciBpbiBjb250ZXh0LnhtbCBjb25maWd1cmF0aW9uLgogICogVGhlIGdsb2JhbCBjb250ZXh0LnhtbCBzaG91bGQgYmUgc2hhcmVkIGFjcm9zcyBieSBhbGwgd2ViYXBwcy4KICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGdsb2JhbCBMaWZlY3ljbGVMaXN0ZW5lciBpbiBjb250ZXh0LnhtbCIpOwpAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sTGlmZWN5Y2xlTGlzdGVuZXJHbG9iYWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sTGlmZWN5Y2xlTGlzdGVuZXJHbG9iYWwvYnVpbGQucHJvcGVydGllcwppbmRleCA5ZTZiMDYwLi40YTU0MDJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbExpZmVjeWNsZUxpc3RlbmVyR2xvYmFsL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lckdsb2JhbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNvbnRleHQteG1sLWxpZmVjeWNsZS1saXN0ZW5lci1nbG9iYWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sTGlmZWN5Y2xlTGlzdGVuZXJHbG9iYWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lckdsb2JhbC9idWlsZC54bWwKaW5kZXggMTlmOGE3YS4uOGQ2NzE3OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lckdsb2JhbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lckdsb2JhbC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDEwICs0NCwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgpAQCAtNTksNyArNTksNyBAQAogICAgICAgICA8Y29weSBmaWxlPSJsaWIvdGVzdC5qYXIiIHRvZGlyPSIke2Vudi5TMUFTX0hPTUV9L2xpYiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiLz4KIC0tPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb3B5UmVzb3VyY2VzIi8+CkBAIC04NiwxMyArODYsMTMgQEAKICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvY29uZmlnL2NvbnRleHQueG1sIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTEwNCwxMCArMTA0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lckdsb2JhbC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbExpZmVjeWNsZUxpc3RlbmVyR2xvYmFsL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCBkMjE4MjdjLi5mZGVkMTc1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbExpZmVjeWNsZUxpc3RlbmVyR2xvYmFsL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbExpZmVjeWNsZUxpc3RlbmVyR2xvYmFsL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgaW1wbGVtZW50cyBIdHRwU2Vzc2lvbkxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7CkBAIC01NCw3ICs1NCw3IEBACiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkNyZWF0ZWRdIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkRlc3Ryb3llZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uRGVzdHJveWVkXSIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sUmVtb3RlSG9zdFZhbHZlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sUmVtb3RlSG9zdFZhbHZlL1dlYlRlc3QuamF2YQppbmRleCBiNmI4YmY3Li4yNjdmOTEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbFJlbW90ZUhvc3RWYWx2ZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxSZW1vdGVIb3N0VmFsdmUvV2ViVGVzdC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgVmFsdmUgaW4gY29udGV4dC54bWwiKTsKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbFJlbW90ZUhvc3RWYWx2ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxSZW1vdGVIb3N0VmFsdmUvYnVpbGQucHJvcGVydGllcwppbmRleCBiYjcwZmUyLi5mZjM3OGE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbFJlbW90ZUhvc3RWYWx2ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sUmVtb3RlSG9zdFZhbHZlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY29udGV4dC14bWwtcmVtb3RlLWhvc3QtdmFsdmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sUmVtb3RlSG9zdFZhbHZlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sUmVtb3RlSG9zdFZhbHZlL2J1aWxkLnhtbAppbmRleCA0YmY3MWNkLi4xMjdlYjMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbFJlbW90ZUhvc3RWYWx2ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxSZW1vdGVIb3N0VmFsdmUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMiArNDQsMjIgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxSZW1vdGVIb3N0VmFsdmUvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxSZW1vdGVIb3N0VmFsdmUvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDU3Zjg5YmUuLjc3YmNmNDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sUmVtb3RlSG9zdFZhbHZlL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbFJlbW90ZUhvc3RWYWx2ZS9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IGltcGxlbWVudHMgSHR0cFNlc3Npb25MaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOwpAQCAtNDQsMTQgKzQ0LDE0IEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uQ3JlYXRlZF0iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uRGVzdHJveWVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25EZXN0cm95ZWRdIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxSZW1vdGVIb3N0VmFsdmUvc2VydmxldC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxSZW1vdGVIb3N0VmFsdmUvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDMzNGFjM2MuLjdiZGE2NGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sUmVtb3RlSG9zdFZhbHZlL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbFJlbW90ZUhvc3RWYWx2ZS9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgICAgICAgICAhIlZBTFVFXzMiLmVxdWFscyhyZXEuZ2V0QXR0cmlidXRlKCJBVFRSXzMiKSkpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJNaXNzaW5nIHJlcXVlc3QgYXR0cmlidXRlcyIpOwogKi8KLSAgICAgICAgaWYgKCEiVkFMVUVfMSIuZXF1YWxzKHJlcS5nZXRBdHRyaWJ1dGUoIkFUVFJfMSIpKSkgeyAKKyAgICAgICAgaWYgKCEiVkFMVUVfMSIuZXF1YWxzKHJlcS5nZXRBdHRyaWJ1dGUoIkFUVFJfMSIpKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIk1pc3NpbmcgcmVxdWVzdCBhdHRyaWJ1dGVzIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZXMuZ2V0V3JpdGVyKCkucHJpbnQodHJ1ZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llUHJvcGVydGllc1N1bldlYlhtbC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llUHJvcGVydGllc1N1bldlYlhtbC9XZWJUZXN0LmphdmEKaW5kZXggOTUxMTIyZi4uMTA5NzkxMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nvb2tpZVByb3BlcnRpZXNTdW5XZWJYbWwvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVQcm9wZXJ0aWVzU3VuV2ViWG1sL1dlYlRlc3QuamF2YQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogLyoKLSAqIFRoaXMgdW5pdCB0ZXN0cyBleHBlY3RzIHRoZSBmb2xsb3dpbmcgU2V0LUNvb2tpZSByZXNwb25zZSBoZWFkZXIsIGJhc2VkIG9uIAorICogVGhpcyB1bml0IHRlc3RzIGV4cGVjdHMgdGhlIGZvbGxvd2luZyBTZXQtQ29va2llIHJlc3BvbnNlIGhlYWRlciwgYmFzZWQgb24KICAqIHRoZSBjb29raWUtcHJvcGVydGllcyBzcGVjaWZpZWQgaW4gc3VuLXdlYi54bWw6CiAgKgogICogICBTZXQtQ29va2llOiBKU0VTU0lPTklEPVsuLi5dOyBEb21haW49LmlwbGFuZXQuY29tOyBQYXRoPS8KQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQnVndHJhcSA0OTI0OTQ4Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNzEsOCArNzEsOCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCi0gICAgICAgIHRyeSB7IAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VKc3AoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nvb2tpZVByb3BlcnRpZXNTdW5XZWJYbWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVQcm9wZXJ0aWVzU3VuV2ViWG1sL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZmVlYTg1NC4uMmVlNTAzZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nvb2tpZVByb3BlcnRpZXNTdW5XZWJYbWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llUHJvcGVydGllc1N1bldlYlhtbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY29va2llLXByb3BlcnRpZXMiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNvb2tpZS1wcm9wZXJ0aWVzIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVQcm9wZXJ0aWVzU3VuV2ViWG1sL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVQcm9wZXJ0aWVzU3VuV2ViWG1sL2J1aWxkLnhtbAppbmRleCAwMGZkYWQzLi5jMzk3NzZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llUHJvcGVydGllc1N1bldlYlhtbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nvb2tpZVByb3BlcnRpZXNTdW5XZWJYbWwvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCwxMCArNzAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llVmFsdWVXaXRoRXF1YWxzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVWYWx1ZVdpdGhFcXVhbHMvV2ViVGVzdC5qYXZhCmluZGV4IDk0YzMwMTUuLjJlNTMyNzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVWYWx1ZVdpdGhFcXVhbHMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVWYWx1ZVdpdGhFcXVhbHMvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIENSIDY0NTY1NTMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00OSw4ICs0OSw4IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAKLSAgICAgICAgdHJ5IHsgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZUNyZWF0ZUNvb2tpZSgpOwogICAgICAgICAgICAgaW52b2tlR2V0Q29va2llKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llVmFsdWVXaXRoRXF1YWxzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llVmFsdWVXaXRoRXF1YWxzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjZjYTEyNi4uMTViYzNlOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nvb2tpZVZhbHVlV2l0aEVxdWFscy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVWYWx1ZVdpdGhFcXVhbHMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jb29raWUtdmFsdWUtd2l0aC1lcXVhbHMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVWYWx1ZVdpdGhFcXVhbHMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nvb2tpZVZhbHVlV2l0aEVxdWFscy9idWlsZC54bWwKaW5kZXggNGQ4NDVlZS4uMzkyY2U4YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nvb2tpZVZhbHVlV2l0aEVxdWFscy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nvb2tpZVZhbHVlV2l0aEVxdWFscy9idWlsZC54bWwKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDUsMjMgKzQ1LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzMsMTAgKzczLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nvb2tpZVZhbHVlV2l0aFNwYWNlcy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llVmFsdWVXaXRoU3BhY2VzL1dlYlRlc3QuamF2YQppbmRleCBhOWNhNjc2Li42ZjZhNDllIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llVmFsdWVXaXRoU3BhY2VzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llVmFsdWVXaXRoU3BhY2VzL1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBDUiA2NDU2NTUzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTAsOCArNTAsOCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCi0gICAgICAgIHRyeSB7IAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VDcmVhdGVDb29raWUoKTsKICAgICAgICAgICAgIGludm9rZUdldENvb2tpZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nvb2tpZVZhbHVlV2l0aFNwYWNlcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nvb2tpZVZhbHVlV2l0aFNwYWNlcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDBmYTNkNzAuLjYxYzAzNzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVWYWx1ZVdpdGhTcGFjZXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llVmFsdWVXaXRoU3BhY2VzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY29va2llLXZhbHVlLXdpdGgtc3BhY2VzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llVmFsdWVXaXRoU3BhY2VzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVWYWx1ZVdpdGhTcGFjZXMvYnVpbGQueG1sCmluZGV4IDAwZmRhZDMuLmMzOTc3NmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVWYWx1ZVdpdGhTcGFjZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVWYWx1ZVdpdGhTcGFjZXMvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCwxMCArNzAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlSHR0cHNMaXN0ZW5lci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlSHR0cHNMaXN0ZW5lci9XZWJUZXN0LmphdmEKaW5kZXggMzIxYTEwMy4uM2EyMDIyNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZUh0dHBzTGlzdGVuZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVIdHRwc0xpc3RlbmVyL1dlYlRlc3QuamF2YQpAQCAtMjEsMTYgKzIxLDE2IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDE7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKICAgICBwcml2YXRlIHN0YXRpYyBVUkxDb25uZWN0aW9uIGNvbm4gPSBudWxsOwogICAgIHByaXZhdGUgc3RhdGljIFVSTCB1cmw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0T3V0cHV0U3RyZWFtIG9iamVjdFdyaXRlciA9IG51bGw7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsgIAorICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIHVybENvbm5lY3Rpb24gPSAoSHR0cFVSTENvbm5lY3Rpb24pY29ubjsKICAgICAgICAgICAgICAgIHVybENvbm5lY3Rpb24uc2V0RG9PdXRwdXQodHJ1ZSk7CiAgICAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlPSAgdXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogMjAwIik7IAorICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBjb2RlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiAyMDAiKTsKICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKXsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImNyZWF0ZUh0dHBzTGlzdGVuZXIiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVIdHRwc0xpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlSHR0cHNMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGIzMDFmNDYuLjQ1OTg2N2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVIdHRwc0xpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZUh0dHBzTGlzdGVuZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNyZWF0ZUh0dHBzTGlzdGVuZXIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNyZWF0ZUh0dHBzTGlzdGVuZXIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZUh0dHBzTGlzdGVuZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZUh0dHBzTGlzdGVuZXIvYnVpbGQueG1sCmluZGV4IGNhOGJjODEuLjlkNTVlYTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVIdHRwc0xpc3RlbmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlSHR0cHNMaXN0ZW5lci9idWlsZC54bWwKQEAgLTUwLDcgKzUwLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTU4LDEwICs1OCwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgPGphdmFjCkBAIC02OSwxMCArNjksMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSIqLmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC04MCw3ICs4MCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTkyLDEwICs5MiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVIdHRwc0xpc3RlbmVyL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVIdHRwc0xpc3RlbmVyL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBmZGIwYzE3Li5jMWQ0YmI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlSHR0cHNMaXN0ZW5lci9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZUh0dHBzTGlzdGVuZXIvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwxMiArMjIsMTIgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZUh0dHBzTGlzdGVuZXIvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZUh0dHBzTGlzdGVuZXIvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDBmNzM2YTguLjU5ZGM5OGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVIdHRwc0xpc3RlbmVyL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlSHR0cHNMaXN0ZW5lci9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CkBAIC0zNCwxMiArMzQsMTIgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAJCisKICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6OlBBU1MiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlU2Vzc2lvbkluU2VydmxldFJlcXVlc3RMaXN0ZW5lci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlU2Vzc2lvbkluU2VydmxldFJlcXVlc3RMaXN0ZW5lci9XZWJUZXN0LmphdmEKaW5kZXggOGVlNzlkYi4uYTEyNjhlYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZVNlc3Npb25JblNlcnZsZXRSZXF1ZXN0TGlzdGVuZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVTZXNzaW9uSW5TZXJ2bGV0UmVxdWVzdExpc3RlbmVyL1dlYlRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiY3JlYXRlIHNlc3Npb24gaW4gSHR0cFJlcXVlc3RMaXN0ZW5lci5yZXF1ZXN0SW5pdGlhbGl6ZWQiKTsKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNjAsNyArNjAsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9jaGVja3Jlc3VsdCI7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pCkBAIC05NCw3ICs5NCw3IEBACiAgICAgICAgICAgICBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKICAgICAgICAgICAgIGlmICghRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewpAQCAtMTE0LDcgKzExNCw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBnZXRTZXNzaW9uSWQoSHR0cFVSTENvbm5lY3Rpb24gY29ubikgewogICAgICAgICBTdHJpbmcgc2Vzc2lvbklkID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IGNvbm4uZ2V0SGVhZGVyRmllbGQoIlNldC1Db29raWUiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVTZXNzaW9uSW5TZXJ2bGV0UmVxdWVzdExpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlU2Vzc2lvbkluU2VydmxldFJlcXVlc3RMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGU1YzFkNDguLjljOTE2YTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVTZXNzaW9uSW5TZXJ2bGV0UmVxdWVzdExpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZVNlc3Npb25JblNlcnZsZXRSZXF1ZXN0TGlzdGVuZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jcmVhdGUtc2Vzc2lvbi1pbi1zZXJ2bGV0LXJlcXVlc3QtbGlzdGVuZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVTZXNzaW9uSW5TZXJ2bGV0UmVxdWVzdExpc3RlbmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVTZXNzaW9uSW5TZXJ2bGV0UmVxdWVzdExpc3RlbmVyL2J1aWxkLnhtbAppbmRleCBjZjkzZmE0Li4yODI3NWE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlU2Vzc2lvbkluU2VydmxldFJlcXVlc3RMaXN0ZW5lci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZVNlc3Npb25JblNlcnZsZXRSZXF1ZXN0TGlzdGVuZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDEwICs1MywxMCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZVNlc3Npb25JblNlcnZsZXRSZXF1ZXN0TGlzdGVuZXIvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZVNlc3Npb25JblNlcnZsZXRSZXF1ZXN0TGlzdGVuZXIvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDRiMDFiNDUuLjZlNWY0YTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVTZXNzaW9uSW5TZXJ2bGV0UmVxdWVzdExpc3RlbmVyL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlU2Vzc2lvbkluU2VydmxldFJlcXVlc3RMaXN0ZW5lci9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTE4LDcgKzE4LDcgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIzLjAiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiPgotICA8bGlzdGVuZXI+ICAgICAKKyAgPGxpc3RlbmVyPgogICAgICAgPGxpc3RlbmVyLWNsYXNzPnRlc3QuTXlTZXJ2bGV0UmVxdWVzdExpc3RlbmVyPC9saXN0ZW5lci1jbGFzcz4KICAgPC9saXN0ZW5lcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZVNlc3Npb25JblNlcnZsZXRSZXF1ZXN0TGlzdGVuZXIvc2VydmxldC90ZXN0L0NoZWNrUmVzdWx0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlU2Vzc2lvbkluU2VydmxldFJlcXVlc3RMaXN0ZW5lci9zZXJ2bGV0L3Rlc3QvQ2hlY2tSZXN1bHQuamF2YQppbmRleCAzNjU3MmVmLi45N2E1MDkwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlU2Vzc2lvbkluU2VydmxldFJlcXVlc3RMaXN0ZW5lci9zZXJ2bGV0L3Rlc3QvQ2hlY2tSZXN1bHQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlU2Vzc2lvbkluU2VydmxldFJlcXVlc3RMaXN0ZW5lci9zZXJ2bGV0L3Rlc3QvQ2hlY2tSZXN1bHQuamF2YQpAQCAtMzgsNiArMzgsNiBAQAogICAgICAgICAgICAgICAgICAgICAoY3VycmVudFRpbWUgLSBsYXN0QWNjZXNzZWRUaW1lIDw9IG1heElkbGVUaW1lKSk7CiAgICAgICAgIH0KICAgICAgICAgb3V0LnByaW50bG4ocmVzdWx0KTsKLSAgICAgICAgCisKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3Jvc3NDb250ZXh0RGlzcGF0Y2hMb25nZXN0Q29udGV4dFJvb3RNYXRjaC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3Jvc3NDb250ZXh0RGlzcGF0Y2hMb25nZXN0Q29udGV4dFJvb3RNYXRjaC9XZWJUZXN0LmphdmEKaW5kZXggMTk1MzJjYS4uZTk1MWEyMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nyb3NzQ29udGV4dERpc3BhdGNoTG9uZ2VzdENvbnRleHRSb290TWF0Y2gvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcm9zc0NvbnRleHREaXNwYXRjaExvbmdlc3RDb250ZXh0Um9vdE1hdGNoL1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBob3N0ID0gYXJnc1swXTsKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSAzMjg0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTcsMTMgKzU3LDEzIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArICIvMTIzL0Zyb20iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3Jvc3NDb250ZXh0RGlzcGF0Y2hMb25nZXN0Q29udGV4dFJvb3RNYXRjaC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nyb3NzQ29udGV4dERpc3BhdGNoTG9uZ2VzdENvbnRleHRSb290TWF0Y2gvYnVpbGQucHJvcGVydGllcwppbmRleCAxYTc0N2YyLi5iMGY0NGRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3Jvc3NDb250ZXh0RGlzcGF0Y2hMb25nZXN0Q29udGV4dFJvb3RNYXRjaC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcm9zc0NvbnRleHREaXNwYXRjaExvbmdlc3RDb250ZXh0Um9vdE1hdGNoL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jcm9zcy1jb250ZXh0LWRpc3BhdGNoLWxvbmdlc3QtY29udGV4dC1yb290LW1hdGNoIi8+CiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZnJvbS53YXIiIHZhbHVlPSJmcm9tLndhciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nyb3NzQ29udGV4dERpc3BhdGNoTG9uZ2VzdENvbnRleHRSb290TWF0Y2gvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nyb3NzQ29udGV4dERpc3BhdGNoTG9uZ2VzdENvbnRleHRSb290TWF0Y2gvYnVpbGQueG1sCmluZGV4IDg1NDRmMGMuLjFjYzA3ZmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcm9zc0NvbnRleHREaXNwYXRjaExvbmdlc3RDb250ZXh0Um9vdE1hdGNoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3Jvc3NDb250ZXh0RGlzcGF0Y2hMb25nZXN0Q29udGV4dFJvb3RNYXRjaC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2Zyb20ud2FyfSIvPgpAQCAtNDgsOCArNDgsOCBAQAogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIvPgogICAgICAgICA8ZWFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9IiBpbmNsdWRlcz0iKi53YXIiLz4KLSAgICAgICAgPC9lYXI+IAotICAgIDwvdGFyZ2V0PiAKKyAgICAgICAgPC9lYXI+CisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CkBAIC02Miw4ICs2Miw4IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAgCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jc3JmRmlsdGVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jc3JmRmlsdGVyL1dlYlRlc3QuamF2YQppbmRleCBhMjM5MjUxLi4wMjRmNjYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3NyZkZpbHRlci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NzcmZGaWx0ZXIvV2ViVGVzdC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgSVQgR0xBU1NGSVNILTE2NzY4Iik7CkBAIC03OSw3ICs3OSw3IEBACiAgICAgICAgICAgICBzYi5hcHBlbmQoIj8iKS5hcHBlbmQocGFyYW0pOwogICAgICAgICB9CiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKHNiLnRvU3RyaW5nKCkpOwotICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3NyZkZpbHRlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NzcmZGaWx0ZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBjNWU0ZTc2Li43YzZlNzYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3NyZkZpbHRlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jc3JmRmlsdGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY3NyZi1maWx0ZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jc3JmRmlsdGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jc3JmRmlsdGVyL2J1aWxkLnhtbAppbmRleCAwNWM3MWQ4Li44MmFlMDA1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3NyZkZpbHRlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NzcmZGaWx0ZXIvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfSIgaW5jbHVkZXM9IldlYlRlc3QqLmNsYXNzIi8+CiAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NSwyMyArNDUsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MywxMCArNzMsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3NyZkZpbHRlci9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3NyZkZpbHRlci9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMWM1NTM3Mi4uYmY0NTE0OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NzcmZGaWx0ZXIvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jc3JmRmlsdGVyL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsNyArMjIsNyBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIzLjAiPgotICAgICAKKwogICAgIDxmaWx0ZXI+CiAgICAgICAgIDxmaWx0ZXItbmFtZT5jc3JmPC9maWx0ZXItbmFtZT4KICAgICAgICAgPGZpbHRlci1jbGFzcz5vcmcuYXBhY2hlLmNhdGFsaW5hLmZpbHRlcnMuQ3NyZlByZXZlbnRpb25GaWx0ZXI8L2ZpbHRlci1jbGFzcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0Q2hhcnNldC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdENoYXJzZXQvV2ViVGVzdC5qYXZhCmluZGV4IDYzNzE0OTQuLmQxNTcwMzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0Q2hhcnNldC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRDaGFyc2V0L1dlYlRlc3QuamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA0OTIxMzI5Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTMsOCArNTMsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZGVmYXVsdC1jaGFyc2V0Iik7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZUpzcCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZGVmYXVsdC1jaGFyc2V0IHRlc3QgZmFpbGVkLiIpOwpAQCAtNjQsNyArNjQsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2VKc3AoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgIAorCiAgICAgICAgIFNvY2tldCBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCgiR0VUICIgKyBjb250ZXh0Um9vdCArICIvanNwL2dldFJlcXVlc3RDaGFyc2V0LmpzcCIKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRSb290ICsgIi9qc3AvZ2V0UmVxdWVzdENoYXJzZXQuanNwIgogICAgICAgICAgICAgKyAiIEhUVFAvMS4wXG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRDaGFyc2V0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdENoYXJzZXQvYnVpbGQucHJvcGVydGllcwppbmRleCBhZDVhNDI2Li41YmY4NTU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdENoYXJzZXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdENoYXJzZXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWRlZmF1bHQtY2hhcnNldCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZGVmYXVsdC1jaGFyc2V0Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0Q2hhcnNldC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdENoYXJzZXQvYnVpbGQueG1sCmluZGV4IDUyNWM2MjcuLmMzOTc3NmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0Q2hhcnNldC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRDaGFyc2V0L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsMTAgKzcwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRDb250ZW50VHlwZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRDb250ZW50VHlwZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGE0NzI1ZjkuLjU3ZDM2YTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0Q29udGVudFR5cGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdENvbnRlbnRUeXBlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZGVmYXVsdC1jb250ZW50LXR5cGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0Q29udGVudFR5cGUvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRDb250ZW50VHlwZS9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNGQ5ZDRhMC4uOThkMTY4NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRDb250ZW50VHlwZS9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRDb250ZW50VHlwZS9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTI3LDcgKzI3LDcgQEAKICAgICAgICAgPGRpc3BsYXktbmFtZT5UZXN0U2VydmxldDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRLZWVwQWxpdmUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0S2VlcEFsaXZlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWNhNTFhNC4uMjcwNzdjNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRLZWVwQWxpdmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdEtlZXBBbGl2ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZGVmYXVsdEtlZXBBbGl2ZSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZGVmYXVsdEtlZXBBbGl2ZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItZGVmYXVsdEtlZXBBbGl2ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRLZWVwQWxpdmUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRLZWVwQWxpdmUvYnVpbGQueG1sCmluZGV4IGY1NDkxYjEuLjMxMDU1MjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0S2VlcEFsaXZlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdEtlZXBBbGl2ZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIAogICAgICAgICAgIDxqYXZhYwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRSZXNwb25zZVR5cGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRSZXNwb25zZVR5cGUvV2ViVGVzdC5qYXZhCmluZGV4IDNmMDIzZjUuLmNjZjAyZjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0UmVzcG9uc2VUeXBlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdFJlc3BvbnNlVHlwZS9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImRlZmF1bHRSZXNwb25zZVR5cGUiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00NSw4ICs0NSw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTU3LDcgKzU3LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyAiL3Rlc3QueHl6Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdFJlc3BvbnNlVHlwZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRSZXNwb25zZVR5cGUvYnVpbGQucHJvcGVydGllcwppbmRleCBiNGEzMTc4Li5kNTM1M2E4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdFJlc3BvbnNlVHlwZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0UmVzcG9uc2VUeXBlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZGVmYXVsdC1yZXNwb25zZS10eXBlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdFJlc3BvbnNlVHlwZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdFJlc3BvbnNlVHlwZS9idWlsZC54bWwKaW5kZXggMWZlN2EyNy4uYmZiNDM1NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRSZXNwb25zZVR5cGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0UmVzcG9uc2VUeXBlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8Y29weSBmaWxlPSJkb2Nyb290L3Rlc3QueHl6IiAKKyAgICAgICAgPGNvcHkgZmlsZT0iZG9jcm9vdC90ZXN0Lnh5eiIKICAgICAgICAgICAgICAgdG9kaXI9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2RvY3Jvb3QiLz4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KQEAgLTczLDcgKzczLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CkBAIC04NywxMCArODcsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRTZXJ2bGV0V2l0aFN1YmRpcmVjdG9yeU1hcHBpbmcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRTZXJ2bGV0V2l0aFN1YmRpcmVjdG9yeU1hcHBpbmcvV2ViVGVzdC5qYXZhCmluZGV4IDIxMzk3ZWEuLjgwYmMyMWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0U2VydmxldFdpdGhTdWJkaXJlY3RvcnlNYXBwaW5nL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdFNlcnZsZXRXaXRoU3ViZGlyZWN0b3J5TWFwcGluZy9XZWJUZXN0LmphdmEKQEAgLTI0LDkgKzI0LDkgQEAKICAqIElzc3VlOiBHTEFTU0ZJU0gtMTc0MTMKICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9ICJ3ZWItZGVmYXVsdC1zZXJ2bGV0LXdpdGgtc3ViZGlyZWN0b3J5LW1hcHBpbmciOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTM0LDcgKzM0LDcgQEAKIAogICAgICAgICAvLyBUaGUgc3RhdCByZXBvcnRlciB3cml0ZXMgb3V0IHRoZSB0ZXN0IGluZm8gYW5kIHJlc3VsdHMKICAgICAgICAgLy8gaW50byB0aGUgdG9wLWxldmVsIHF1aWNrbG9vayBkaXJlY3RvcnkgZHVyaW5nIGEgcnVuLgotICAgICAgCisKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiRGVmYXVsdFNlcnZsZXQgd2l0aCBzdWItZGlyZWN0b3J5IG1hcHBpbmcuIik7CiAKICAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwpAQCAtNDMsMTEgKzQzLDExIEBACiAKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0UykuaW50VmFsdWUoKTsKICAgICAgICAgU3RyaW5nIG5hbWU7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBib29sZWFuIG9rID0gZ29HZXQoaG9zdCwgcG9ydCwgIkZyb20gaW5kZXguanNwIiwgY29udGV4dFJvb3QgKyAiL2luZGV4LmpzcCIgKTsKICAgICAgICAgICAgIG9rID0gb2sgJiYgZ29HZXQoaG9zdCwgcG9ydCwgIkZyb20gdGVzdC50eHQiLCBjb250ZXh0Um9vdCArICIvc3RhdGljL3Rlc3QudHh0Iik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLAogICAgICAgICAgICAgICAgICAgICAoKG9rKT8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMFxuIikpOwogICAgICAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMFxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gcy5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwpAQCAtODUsMTEgKzg1LDExIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRlc3QgVU5QUkVESUNURUQtRkFJTFVSRSIpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIG9rOwogICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRTZXJ2bGV0V2l0aFN1YmRpcmVjdG9yeU1hcHBpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0U2VydmxldFdpdGhTdWJkaXJlY3RvcnlNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggY2MzNWJlNS4uNTY2MjI5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRTZXJ2bGV0V2l0aFN1YmRpcmVjdG9yeU1hcHBpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdFNlcnZsZXRXaXRoU3ViZGlyZWN0b3J5TWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZGVmYXVsdC1zZXJ2bGV0LXdpdGgtc3ViZGlyZWN0b3J5LW1hcHBpbmciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWRlZmF1bHQtc2VydmxldC13aXRoLXN1YmRpcmVjdG9yeS1tYXBwaW5nIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1kaXJlY3RvcnlMaXN0aW5nIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdFNlcnZsZXRXaXRoU3ViZGlyZWN0b3J5TWFwcGluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdFNlcnZsZXRXaXRoU3ViZGlyZWN0b3J5TWFwcGluZy9idWlsZC54bWwKaW5kZXggYTAyYzk0NS4uZTQxYmE3MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRTZXJ2bGV0V2l0aFN1YmRpcmVjdG9yeU1hcHBpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0U2VydmxldFdpdGhTdWJkaXJlY3RvcnlNYXBwaW5nL2J1aWxkLnhtbApAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ1LDIwICs0NSwyMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgPGphdmFjCiAgICAgICAgICAgICBzcmNkaXI9Ii4iCkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVsZWdhdGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlbGVnYXRlL1dlYlRlc3QuamF2YQppbmRleCA4Zjc4M2VlLi5kM2E1NmEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVsZWdhdGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWxlZ2F0ZS9XZWJUZXN0LmphdmEKQEAgLTIzLDEwICsyMywxMCBAQAogICoKICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAyOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTM0LDcgKzM0LDcgQEAKIAogICAgICAgICAvLyBUaGUgc3RhdCByZXBvcnRlciB3cml0ZXMgb3V0IHRoZSB0ZXN0IGluZm8gYW5kIHJlc3VsdHMKICAgICAgICAgLy8gaW50byB0aGUgdG9wLWxldmVsIHF1aWNrbG9vayBkaXJlY3RvcnkgZHVyaW5nIGEgcnVuLgotICAgICAgCisKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiQ2xhc3Nsb2FkZXIgZGVsZWdhdGUgZmxhZyIpOwogCiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKQEAgLTQzLDE2ICs0MywxNiBAQAogCiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7CiAgICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZ29HZXQoaG9zdCwgcG9ydCwgImRlbGVnYXRlLWZsYWciLCBjb250ZXh0Um9vdCArICIvU2VydmxldFRlc3QiICk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHQuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICBpZiAoY291bnQgIT0gRVhQRUNURURfQ09VTlQpewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImRlbGVnYXRlIiwgc3RhdC5GQUlMKTsKLSAgICAgICAgfSAgICAgICAgICAgCisgICAgICAgIH0KIAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2ViL2RlbGVnYXRlRmxhZy0tLT4gZXhwZWN0ICIgKyBFWFBFQ1RFRF9DT1VOVCArICIgUEFTUyIpOwogICAgIH0KQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjBcbiIpKTsKICAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMFxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gcy5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKQEAgLTc4LDIwICs3OCwyMCBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lTnVtICsgIjogICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0YXR1cyA9IGxpbmUuc3Vic3RyaW5nKGluZGV4KzIpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmVxdWFsc0lnbm9yZUNhc2UoIlBBU1MiKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhyZXN1bHQgKyI6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHJlc3VsdCArIjogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LkZBSUwpOyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhyZXN1bHQgKyI6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGxpbmVOdW0rKzsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgIH0KICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWxlZ2F0ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlbGVnYXRlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDgyOWRkZC4uNTZiY2RhMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlbGVnYXRlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlbGVnYXRlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1kZWxlZ2F0ZSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZGVsZWdhdGUiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZ2xhc3NmaXNoLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2dsYXNzZmlzaC13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVsZWdhdGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlbGVnYXRlL2J1aWxkLnhtbAppbmRleCA3OTc5MzFiLi5hYWMwNzc3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVsZWdhdGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWxlZ2F0ZS9idWlsZC54bWwKQEAgLTQxLDkgKzQxLDkgQEAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLi9zaGFyZWQvdGVzdCIKICAgICAgICAgICAgICAgIGRlc3RkaXI9Ii4vc2hhcmVkIiBpbmNsdWRlcz0iKi5qYXZhIi8+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9InNoYXJlZC5qYXIiIGJhc2VkaXI9InNoYXJlZCIvPgotICAgICAgICA8Y29weSBmaWxlPSJzaGFyZWQuamFyIiAKKyAgICAgICAgPGNvcHkgZmlsZT0ic2hhcmVkLmphciIKICAgICAgICAgICAgICAgdG9kaXI9IiR7ZW52LlMxQVNfSE9NRX0vbGliIi8+Ci0gICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+ICAgICAgICAKKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idGVzdC1zdW4td2ViLXhtbCI+CkBAIC02MSw3ICs2MSw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3kiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC04MSwxMCArODEsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTk0LDE0ICs5NCwxNCBAQAogCiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHtzdW4td2ViLnhtbH0iIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2xhc3NmaXNoLXdlYi54bWx9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTExMywxNCArMTEzLDE0IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZS1hcHBzZXJ2IiBkZXBlbmRzPSJzZXR1cC1hcHBzZXJ2Ij4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9zaGFyZWQuamFyIi8+Ci0gICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+ICAgICAgICAKKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlbGVnYXRlL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWxlZ2F0ZS9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMTk2YTYwNC4uODFlNjJlMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlbGVnYXRlL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVsZWdhdGUvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwxMiArMjIsMTIgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlbGVnYXRlL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWxlZ2F0ZS9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggZWNlYTk2Yi4uMGE1MWQzYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlbGVnYXRlL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVsZWdhdGUvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0yNSwxMSArMjUsMTEgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0ewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgc3RhdHVzID0gIkRlbGVnYXRlVGVzdDo6RkFJTCI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOyAgICAgICAgCi0gICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7CisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKQEAgLTM3LDExICszNywxMSBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5kb1Bvc3RdIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKLSAgICAgICAgCisKICAgICAgICAgRGVsZWdhdGVUZXN0IGRlbGVnYXRlID0gbnVsbDsKICAgICAgICAgdHJ5ewogICAgICAgICAgICAgQ2xhc3MgY2xhenogPSBDbGFzcy5mb3JOYW1lKCJ0ZXN0LkRlbGVnYXRlVGVzdCIpOwpAQCAtNTQsNyArNTQsNyBAQAogCiAgICAgICAgIGlmIChkZWxlZ2F0ZSAhPSBudWxsKXsKICAgICAgICAgICAgIHRyeXsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlbGVnYXRlOiAiICsgZGVsZWdhdGUuZ2V0Q2hpbGROYW1lKCkpOyAgICAgICAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlbGVnYXRlOiAiICsgZGVsZWdhdGUuZ2V0Q2hpbGROYW1lKCkpOwogICAgICAgICAgICAgICAgIHN0YXR1cyA9ICJEZWxlZ2F0ZVRlc3Q6OlBBU1MiOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KXsKICAgICAgICAgICAgICAgICBzdGF0dXMgPSAiRGVsZWdhdGVUZXN0OjpGQUlMIjsKQEAgLTcyLDEzICs3MiwxMyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0dXMgPSAiT3ZlcnJpZGFibGVKYXZheDo6UEFTUyI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpewogICAgICAgICAgICAgc3RhdHVzID0gIk92ZXJyaWRhYmxlSmF2YXg6OkZBSUwiOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICAgICAgb3V0LnByaW50bG4oc3RhdHVzKTsKLSAgICAgICAgCisKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXJMaXN0aW5nL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXJMaXN0aW5nL1dlYlRlc3QuamF2YQppbmRleCBkNjkzNGM4Li4yNjMxYTBmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlyTGlzdGluZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpckxpc3RpbmcvV2ViVGVzdC5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiAgKiBCdWcgNjE3MjgzOQogICovCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAxOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTM0LDcgKzM0LDcgQEAKIAogICAgICAgICAvLyBUaGUgc3RhdCByZXBvcnRlciB3cml0ZXMgb3V0IHRoZSB0ZXN0IGluZm8gYW5kIHJlc3VsdHMKICAgICAgICAgLy8gaW50byB0aGUgdG9wLWxldmVsIHF1aWNrbG9vayBkaXJlY3RvcnkgZHVyaW5nIGEgcnVuLgotICAgICAgCisKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiU3RhbmRhbG9uZSBTZXNzaW9uIEludmFsaWQgd2FyIHRlc3QiKTsKIAogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CkBAIC00MywxMCArNDMsMTAgQEAKIAogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwogICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGJvb2xlYW4gb2sgPSBnb0dldChob3N0LCBwb3J0LCAiIiwgY29udGV4dFJvb3QgKyAiLyIgKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLWRpcmVjdG9yeUxpc3RpbmciLAogICAgICAgICAgICAgICAgICAgICAoKG9rKT8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgICAgICBvcy53cml0ZSgoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCJBdXRob3JpemF0aW9uOiBCYXNpYyBhakpsWlRwcU1tVmxcbiIuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gcy5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwpAQCAtODYsMTEgKzg2LDExIEBACiAgICAgICAgICAgICAgICAgbGluZU51bSsrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRlc3QgVU5QUkVESUNURUQtRkFJTFVSRSIpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIChjb3VudCA9PSBFWFBFQ1RFRF9DT1VOVCk7CiAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlyTGlzdGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpckxpc3RpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCAyZWJjZTI5Li44NDc3ZDE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlyTGlzdGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXJMaXN0aW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1kaXJlY3RvcnlMaXN0aW5nIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1kaXJlY3RvcnlMaXN0aW5nIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1kaXJlY3RvcnlMaXN0aW5nIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlyTGlzdGluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlyTGlzdGluZy9idWlsZC54bWwKaW5kZXggZGNlNGI3NS4uM2YyOGIwYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpckxpc3RpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXJMaXN0aW5nL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjAgKzQyLDIwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8amF2YWMKICAgICAgICAgICAgIHNyY2Rpcj0iLiIKQEAgLTcyLDEwICs3MiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXJMaXN0aW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXJMaXN0aW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA2ZjQzZTA4Li45M2UyNTE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlyTGlzdGluZy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpckxpc3RpbmcvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+CiAKLSAgICA8bGlzdGVuZXI+ICAgICAKKyAgICA8bGlzdGVuZXI+CiAgICAgICAgIDxsaXN0ZW5lci1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9saXN0ZW5lci1jbGFzcz4KICAgICA8L2xpc3RlbmVyPgogCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPmRlZmF1bHQ8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXJMaXN0aW5nL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXJMaXN0aW5nL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCA4NjBiY2M0Li5lN2E3YzA5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlyTGlzdGluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpckxpc3Rpbmcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCBpbXBsZW1lbnRzIEh0dHBTZXNzaW9uTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwogICAgIH0KIApAQCAtNTIsNyArNTIsNyBAQAogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25DcmVhdGVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25DcmVhdGVkXSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25EZXN0cm95ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkRlc3Ryb3llZF0iKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlzYWJsZURlZmF1bHRFcnJvclBhZ2UvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpc2FibGVEZWZhdWx0RXJyb3JQYWdlL1dlYlRlc3QuamF2YQppbmRleCA3YTk5NTU3Li44NzcwN2I1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlzYWJsZURlZmF1bHRFcnJvclBhZ2UvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXNhYmxlRGVmYXVsdEVycm9yUGFnZS9XZWJUZXN0LmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElUIDExNDIzIik7CiAKQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7ICAgICAgICAgCisgICAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi90ZXN0IiArICIgSFRUUC8xLjBcbiI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlzYWJsZURlZmF1bHRFcnJvclBhZ2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXNhYmxlRGVmYXVsdEVycm9yUGFnZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDYzNGU4MTMuLjNmZDNkODMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXNhYmxlRGVmYXVsdEVycm9yUGFnZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXNhYmxlRGVmYXVsdEVycm9yUGFnZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWRpc2FibGUtZGVmYXVsdC1lcnJvci1wYWdlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlzYWJsZURlZmF1bHRFcnJvclBhZ2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpc2FibGVEZWZhdWx0RXJyb3JQYWdlL2J1aWxkLnhtbAppbmRleCAwMGZkYWQzLi5jMzk3NzZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlzYWJsZURlZmF1bHRFcnJvclBhZ2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXNhYmxlRGVmYXVsdEVycm9yUGFnZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDEwICs3MCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXN0cmlidXRhYmxlV2ViYXBwRW5mb3JjZVNlcmlhbGl6YWJsZVNlc3Npb25BdHRycy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlzdHJpYnV0YWJsZVdlYmFwcEVuZm9yY2VTZXJpYWxpemFibGVTZXNzaW9uQXR0cnMvV2ViVGVzdC5qYXZhCmluZGV4IGIwZDAxZTMuLjU1YmM5MTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXN0cmlidXRhYmxlV2ViYXBwRW5mb3JjZVNlcmlhbGl6YWJsZVNlc3Npb25BdHRycy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpc3RyaWJ1dGFibGVXZWJhcHBFbmZvcmNlU2VyaWFsaXphYmxlU2Vzc2lvbkF0dHJzL1dlYlRlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA0OTgxMDI4Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDcsNyArNDcsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL1Rlc3RTZXJ2bGV0IjsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXN0cmlidXRhYmxlV2ViYXBwRW5mb3JjZVNlcmlhbGl6YWJsZVNlc3Npb25BdHRycy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpc3RyaWJ1dGFibGVXZWJhcHBFbmZvcmNlU2VyaWFsaXphYmxlU2Vzc2lvbkF0dHJzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjQyYTAwNS4uNGI0Nzk3OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpc3RyaWJ1dGFibGVXZWJhcHBFbmZvcmNlU2VyaWFsaXphYmxlU2Vzc2lvbkF0dHJzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpc3RyaWJ1dGFibGVXZWJhcHBFbmZvcmNlU2VyaWFsaXphYmxlU2Vzc2lvbkF0dHJzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZGlzdHJpYnV0YWJsZS13ZWJhcHAtZW5mb3JjZS1zZXJpYWxpemFibGUtc2Vzc2lvbi1hdHRycyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpc3RyaWJ1dGFibGVXZWJhcHBFbmZvcmNlU2VyaWFsaXphYmxlU2Vzc2lvbkF0dHJzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXN0cmlidXRhYmxlV2ViYXBwRW5mb3JjZVNlcmlhbGl6YWJsZVNlc3Npb25BdHRycy9idWlsZC54bWwKaW5kZXggODU0MmU5MS4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpc3RyaWJ1dGFibGVXZWJhcHBFbmZvcmNlU2VyaWFsaXphYmxlU2Vzc2lvbkF0dHJzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlzdHJpYnV0YWJsZVdlYmFwcEVuZm9yY2VTZXJpYWxpemFibGVTZXNzaW9uQXR0cnMvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNyArNDIsMTcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3NCcm9rZW5Qb3N0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG9zQnJva2VuUG9zdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDNjYjE0YjMuLmYzNmNmMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3NCcm9rZW5Qb3N0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rvc0Jyb2tlblBvc3QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWRvc0Jyb2tlblBvc3QiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWRvc0Jyb2tlblBvc3QiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLWRvc0Jyb2tlblBvc3QiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3NCcm9rZW5Qb3N0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3NCcm9rZW5Qb3N0L2J1aWxkLnhtbAppbmRleCA2Njc4MGViLi5jN2M1YzY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG9zQnJva2VuUG9zdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rvc0Jyb2tlblBvc3QvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMyArNDIsMTMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC01OCw3ICs1OCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rvc0Jyb2tlblBvc3QvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rvc0Jyb2tlblBvc3QvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDBjZmU4MTIuLjgxYjE0NTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3NCcm9rZW5Qb3N0L2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG9zQnJva2VuUG9zdC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIzLDcgKzIzLDcgQEAKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KIAotICAgIDxsaXN0ZW5lcj4gICAgIAorICAgIDxsaXN0ZW5lcj4KICAgICAgICAgPGxpc3RlbmVyLWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L2xpc3RlbmVyLWNsYXNzPgogICAgIDwvbGlzdGVuZXI+CiAKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG9zQnJva2VuUG9zdC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG9zQnJva2VuUG9zdC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggNzg3NTFhNy4uOTY2MDVjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rvc0Jyb2tlblBvc3Qvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3NCcm9rZW5Qb3N0L3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgaW1wbGVtZW50cyBIdHRwU2Vzc2lvbkxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7CkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKICAgICAgICAgSHR0cFNlc3Npb24gc2Vzc2lvbiA9IHJlcXVlc3QuZ2V0U2Vzc2lvbih0cnVlKTsKIApAQCAtNjIsNyArNjIsNyBAQAogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25DcmVhdGVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25DcmVhdGVkXSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25EZXN0cm95ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkRlc3Ryb3llZF0iKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG9zU2xvd0NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG9zU2xvd0NsaWVudC9XZWJUZXN0LmphdmEKaW5kZXggMmIxNzc1NS4uNzA3M2JkNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rvc1Nsb3dDbGllbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3NTbG93Q2xpZW50L1dlYlRlc3QuamF2YQpAQCAtMTgsMzAgKzE4LDMwIEBACiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY0ludGVnZXI7CiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IGV4dGVuZHMgVGhyZWFkewotCXByaXZhdGUgc3RhdGljIFN0cmluZyBURVNUX05BTUUgPSAiZG9zLXNsb3ctY2xpZW50IjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgVEVTVF9OQU1FID0gImRvcy1zbG93LWNsaWVudCI7CiAKLQlwdWJsaWMgc3RhdGljIGZpbmFsIEF0b21pY0ludGVnZXIgY291bnQgPSBuZXcgQXRvbWljSW50ZWdlcigpOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQXRvbWljSW50ZWdlciBjb3VudCA9IG5ldyBBdG9taWNJbnRlZ2VyKCk7CiAKLQlzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIiwgVEVTVF9OQU1FKTsKKyAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIiwgVEVTVF9OQU1FKTsKIAotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKIAotCQkvLyBUaGUgc3RhdCByZXBvcnRlciB3cml0ZXMgb3V0IHRoZSB0ZXN0IGluZm8gYW5kIHJlc3VsdHMKLQkJLy8gaW50byB0aGUgdG9wLWxldmVsIHF1aWNrbG9vayBkaXJlY3RvcnkgZHVyaW5nIGEgcnVuLgorICAgICAgICAvLyBUaGUgc3RhdCByZXBvcnRlciB3cml0ZXMgb3V0IHRoZSB0ZXN0IGluZm8gYW5kIHJlc3VsdHMKKyAgICAgICAgLy8gaW50byB0aGUgdG9wLWxldmVsIHF1aWNrbG9vayBkaXJlY3RvcnkgZHVyaW5nIGEgcnVuLgogCi0JCXN0YXQuYWRkRGVzY3JpcHRpb24oIlNsb3cgY2xpZW50IGJ5dGVzIHdyaXRlIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlNsb3cgY2xpZW50IGJ5dGVzIHdyaXRlIik7CiAKLQkJU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwotCQlpbnQgcG9ydCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1sxXSk7Ci0JCWludCBudW0gPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMl0pOworICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CisgICAgICAgIGludCBwb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKTsKKyAgICAgICAgaW50IG51bSA9IEludGVnZXIucGFyc2VJbnQoYXJnc1syXSk7CiAKLQkJZm9yIChpbnQgaT0wOyBpIDwgbnVtOyBpKyspIHsKLQkJCW5ldyBTbG93Q2xpZW50KGhvc3QsIHBvcnQsIG5ldyBXZWJUZXN0KCkpOwotCQl9Ci0JCVRocmVhZC5zbGVlcCgzMDAwMCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG51bTsgaSsrKSB7CisgICAgICAgICAgICBuZXcgU2xvd0NsaWVudChob3N0LCBwb3J0LCBuZXcgV2ViVGVzdCgpKTsKKyAgICAgICAgfQorICAgICAgICBUaHJlYWQuc2xlZXAoMzAwMDApOwogCi0JCXN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgY291bnQuZ2V0KCkgPT0gbnVtID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKLQkJc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKLQl9CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgY291bnQuZ2V0KCkgPT0gbnVtID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKKyAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3NTbG93Q2xpZW50L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG9zU2xvd0NsaWVudC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDlhOTMzOTUuLjhlYmU0MTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3NTbG93Q2xpZW50L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rvc1Nsb3dDbGllbnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWRvc1Nsb3dDbGllbnQiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWRvc1Nsb3dDbGllbnQiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLWRvc1Nsb3dDbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3NTbG93Q2xpZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3NTbG93Q2xpZW50L2J1aWxkLnhtbAppbmRleCA5YTY2MzlhLi5kOWY4NTAyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG9zU2xvd0NsaWVudC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rvc1Nsb3dDbGllbnQvYnVpbGQueG1sCkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iY29uZmlncy5jb25maWcuc2VydmVyLWNvbmZpZy5uZXR3b3JrLWNvbmZpZy5wcm90b2NvbHMucHJvdG9jb2wuaHR0cC1saXN0ZW5lci0xLmh0dHAudGltZW91dC1zZWNvbmRzPTUiLz4KICAgICAgICAgPC9hbnRjYWxsPgotCQkgIAorCiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3VibGVDb250ZW50TGVuZ3RoL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3VibGVDb250ZW50TGVuZ3RoL1dlYlRlc3QuamF2YQppbmRleCBiMDI5OGRhLi43ZWI0YTM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG91YmxlQ29udGVudExlbmd0aC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RvdWJsZUNvbnRlbnRMZW5ndGgvV2ViVGVzdC5qYXZhCkBAIC0yMSwxMCArMjEsMTAgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMTsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC0zMiw3ICszMiw3IEBACiAKICAgICAgICAgLy8gVGhlIHN0YXQgcmVwb3J0ZXIgd3JpdGVzIG91dCB0aGUgdGVzdCBpbmZvIGFuZCByZXN1bHRzCiAgICAgICAgIC8vIGludG8gdGhlIHRvcC1sZXZlbCBxdWlja2xvb2sgZGlyZWN0b3J5IGR1cmluZyBhIHJ1bi4KLSAgICAgIAorCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkRvdWJsZSBjb250ZW50LWxlbmd0aCBoZWFkZXIiKTsKIAogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CkBAIC00MSwxNSArNDEsMTUgQEAKIAogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwogICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsICJFWFBJUkVEIiwgY29udGV4dFJvb3QgKyAiL1NlcnZsZXRUZXN0IiApOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKICAgICAgICAgfSBmaW5hbGx5ewogICAgICAgICAgICAgaWYgKGNvdW50ICE9IEVYUEVDVEVEX0NPVU5UKXsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLWRvdWJsZUNvbnRlbnRMZW5ndGgiLCBzdGF0LkZBSUwpOwotICAgICAgICAgICAgfSAgICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2ViL2RvdWJsZUNvbnRlbnRMZW5ndGgtLS0+IGV4cGVjdCAyIFBBU1MiKTsKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIC8vIFdlYiBzZXJ2ZXIgc29tZXRpbWVzIHNlbmRzIHRoZSByZXNwb25zZSB3aXRoIDQwMCBzdGF0dXMKICAgICAgICAgICAgIC8vIGNvZGUgcmlnaHQgYWZ0ZXIgdGhlIHNlY29uZCBjb250ZW50LWxlbmd0aCBoZWFkZXIgaW4gd2hpY2gKLSAgICAgICAgICAgIC8vIGNhc2UgbmV4dCBvcy53cml0ZSB3aWxsIGNhdXNlIGFuIGV4Y2VwdGlvbi4gCisgICAgICAgICAgICAvLyBjYXNlIG5leHQgb3Mud3JpdGUgd2lsbCBjYXVzZSBhbiBleGNlcHRpb24uCiAgICAgICAgIH0KIAogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHMuZ2V0SW5wdXRTdHJlYW0oKTsKQEAgLTg5LDExICs4OSwxMSBAQAogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLWRvdWJsZUNvbnRlbnRMZW5ndGgiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBsaW5lTnVtKys7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7CiAgICAgICAgICB9CiAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG91YmxlQ29udGVudExlbmd0aC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RvdWJsZUNvbnRlbnRMZW5ndGgvYnVpbGQucHJvcGVydGllcwppbmRleCA2NGQ3NDFkLi5hYzM4ZDdhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG91YmxlQ29udGVudExlbmd0aC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3VibGVDb250ZW50TGVuZ3RoL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1kb3VibGVDb250ZW50TGVuZ3RoIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1kb3VibGVDb250ZW50TGVuZ3RoIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1kb3VibGVDb250ZW50TGVuZ3RoIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG91YmxlQ29udGVudExlbmd0aC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG91YmxlQ29udGVudExlbmd0aC9idWlsZC54bWwKaW5kZXggMzJkNDlkNi4uNTFhMWNiYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RvdWJsZUNvbnRlbnRMZW5ndGgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3VibGVDb250ZW50TGVuZ3RoL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTMgKzQyLDEzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNTgsNyArNTgsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3VibGVDb250ZW50TGVuZ3RoL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3VibGVDb250ZW50TGVuZ3RoL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAwY2ZlODEyLi44MWIxNDU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG91YmxlQ29udGVudExlbmd0aC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RvdWJsZUNvbnRlbnRMZW5ndGgvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+CiAKLSAgICA8bGlzdGVuZXI+ICAgICAKKyAgICA8bGlzdGVuZXI+CiAgICAgICAgIDxsaXN0ZW5lci1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9saXN0ZW5lci1jbGFzcz4KICAgICA8L2xpc3RlbmVyPgogCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RvdWJsZUNvbnRlbnRMZW5ndGgvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RvdWJsZUNvbnRlbnRMZW5ndGgvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDc4NzUxYTcuLjk2NjA1Y2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3VibGVDb250ZW50TGVuZ3RoL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG91YmxlQ29udGVudExlbmd0aC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IGltcGxlbWVudHMgSHR0cFNlc3Npb25MaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOwpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5kb1Bvc3RdIik7CiAgICAgICAgIEh0dHBTZXNzaW9uIHNlc3Npb24gPSByZXF1ZXN0LmdldFNlc3Npb24odHJ1ZSk7CiAKQEAgLTYyLDcgKzYyLDcgQEAKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uQ3JlYXRlZF0iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uRGVzdHJveWVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25EZXN0cm95ZWRdIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsQmlnRGVjaW1hbC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxCaWdEZWNpbWFsL1dlYlRlc3QuamF2YQppbmRleCBkNzI5OThkLi45NTc4YjNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxCaWdEZWNpbWFsL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxCaWdEZWNpbWFsL1dlYlRlc3QuamF2YQpAQCAtMzcsOSArMzcsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLm1hdGguQmlnRGVjaW1hbC5jbGFzcyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzdWx0OiAiICsgbyk7CiAgICAgICAgIGlmICgiMTIzNDU2Nzg5MDEyMzQ1Njc4OSIuZXF1YWxzKG8udG9TdHJpbmcoKSkpCi0gICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0TmFtZSwgc3RhdC5QQVNTKTsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0TmFtZSwgc3RhdC5QQVNTKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdE5hbWUsIHN0YXQuRkFJTCk7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdE5hbWUsIHN0YXQuRkFJTCk7CiAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxCaWdEZWNpbWFsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbEJpZ0RlY2ltYWwvYnVpbGQueG1sCmluZGV4IDgwN2IyZDIuLjRmY2Y3MzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbEJpZ0RlY2ltYWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbEJpZ0RlY2ltYWwvYnVpbGQueG1sCkBAIC0zMiwxNCArMzIsMTQgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSJXZWJUZXN0LmNsYXNzIiAvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIj4KICAgICAgICAgPGphdmFjCiAgICAgICAgICAgICBzcmNkaXI9Ii4iCiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXI7JHtlbnYuUzFBU19IT01FfS9tb2R1bGVzL2pha2FydGEuZWwuamFyOyR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy9qYWthcnRhLmVsLWFwaS5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxGdW5jdGlvbldpdGhvdXRQYXJhbXMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsRnVuY3Rpb25XaXRob3V0UGFyYW1zL1dlYlRlc3QuamF2YQppbmRleCA5MTRhYjdhLi5mNTE4NGMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxGdW5jdGlvbldpdGhvdXRQYXJhbXMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbEZ1bmN0aW9uV2l0aG91dFBhcmFtcy9XZWJUZXN0LmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQnVnemlsbGEgMjY2MjgiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00NCw4ICs0NCw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZUpzcCgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTU2LDE0ICs1NiwxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2VKc3AoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgIAorCiAgICAgICAgIFNvY2tldCBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi9qc3AvZm9vLmpzcCBIVFRQLzEuMFxuIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsRnVuY3Rpb25XaXRob3V0UGFyYW1zL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxGdW5jdGlvbldpdGhvdXRQYXJhbXMvYnVpbGQucHJvcGVydGllcwppbmRleCAwYjZhMmYyLi44NWVlMjk2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxGdW5jdGlvbldpdGhvdXRQYXJhbXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxGdW5jdGlvbldpdGhvdXRQYXJhbXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1lbC1mdW5jdGlvbi13aXRob3V0LXBhcmFtcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsRnVuY3Rpb25XaXRob3V0UGFyYW1zL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbEZ1bmN0aW9uV2l0aG91dFBhcmFtcy9idWlsZC54bWwKaW5kZXggODU0MmU5MS4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsRnVuY3Rpb25XaXRob3V0UGFyYW1zL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxGdW5jdGlvbldpdGhvdXRQYXJhbXMvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNyArNDIsMTcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbFVuaW50ZXJwcmV0ZWRUYWcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsVW5pbnRlcnByZXRlZFRhZy9XZWJUZXN0LmphdmEKaW5kZXggNTBhMTE4Zi4uYzQ5NDA0YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsVW5pbnRlcnByZXRlZFRhZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsVW5pbnRlcnByZXRlZFRhZy9XZWJUZXN0LmphdmEKQEAgLTIyLDkgKzIyLDkgQEAKIAogcHVibGljIGNsYXNzIFdlYlRlc3QKIHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTMzLDE0ICszMywxNCBAQAogCiAgICAgICAgIC8vIFRoZSBzdGF0IHJlcG9ydGVyIHdyaXRlcyBvdXQgdGhlIHRlc3QgaW5mbyBhbmQgcmVzdWx0cwogICAgICAgICAvLyBpbnRvIHRoZSB0b3AtbGV2ZWwgcXVpY2tsb29rIGRpcmVjdG9yeSBkdXJpbmcgYSBydW4uCi0gICAgICAKKwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUZXN0IEVMIGlzIGVtcHR5IGluc3RlYWQgb2YgbnVsbCB3aGVuIGFwcGVhciBpbiB1bmludGVycHJldGVkIHRhZyBhdHRyaWJ1dGVzIik7CiAKICAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwogICAgICAgICBTdHJpbmcgcG9ydFMgPSBhcmdzWzFdOwogICAgICAgICBTdHJpbmcgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZ29HZXQoaG9zdCwgcG9ydCwgY29udGV4dFJvb3QgKyAiL3Rlc3QuanNweCIgKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJCb2R5VGFnIHRlc3QiLCBwYXNzPyBzdGF0LlBBU1M6IHN0YXQuRkFJTCk7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjAiKTsKICAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMFxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gcy5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKQEAgLTc2LDcgKzc2LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7Ci0gICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGVzdCBVTlBSRURJQ1RFRC1GQUlMVVJFIik7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxVbmludGVycHJldGVkVGFnL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxVbmludGVycHJldGVkVGFnL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDViNjZhZi4uNDAxYjIzMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsVW5pbnRlcnByZXRlZFRhZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbFVuaW50ZXJwcmV0ZWRUYWcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1lbFVuaW50ZXJwcmV0ZWRUYWciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbFVuaW50ZXJwcmV0ZWRUYWcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsVW5pbnRlcnByZXRlZFRhZy9idWlsZC54bWwKaW5kZXggODU0MmU5MS4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsVW5pbnRlcnByZXRlZFRhZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsVW5pbnRlcnByZXRlZFRhZy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE3ICs0MiwxNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsZXF1YWxzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbGVxdWFscy9XZWJUZXN0LmphdmEKaW5kZXggNTY1YTUxYy4uMjE5YWVkMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsZXF1YWxzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxlcXVhbHMvV2ViVGVzdC5qYXZhCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgICAgICB3ZWJUZXN0LnRlc3QoIi9lcXVhbHMuanNwIik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0TmFtZSwgc3RhdC5GQUlMKTsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0TmFtZSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxlcXVhbHMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbGVxdWFscy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDFmYmI2MWIuLmRiMzE2MTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbGVxdWFscy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbGVxdWFscy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZWxleHByLWVxdWFscyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZWxleHByLWVxdWFscyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0iLz4KIDxwcm9wZXJ0eSBuYW1lPSJwcmVjb21waWxlanNwIiB2YWx1ZT0iZmFsc2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbGVxdWFscy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxlcXVhbHMvYnVpbGQueG1sCmluZGV4IDg3ZGJkNGMuLjVhMWYwYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbGVxdWFscy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsZXF1YWxzL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01MywxMCArNTMsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbXB0eUNvbnRleHRSb290L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbXB0eUNvbnRleHRSb290L1dlYlRlc3QuamF2YQppbmRleCBiNjExYjdkLi44YmZkOTdjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZW1wdHlDb250ZXh0Um9vdC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VtcHR5Q29udGV4dFJvb3QvV2ViVGVzdC5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiAgKiBzdW4td2ViLnhtbCwgYXMgZm9sbG93czoKICAqCiAgKiAgPHN1bi13ZWItYXBwPgotICogICAgPGNvbnRleHQtcm9vdD4vPC9jb250ZXh0LXJvb3Q+IAorICogICAgPGNvbnRleHQtcm9vdD4vPC9jb250ZXh0LXJvb3Q+CiAgKiAgPC9zdW4td2ViLWFwcD4KICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICBob3N0ID0gYXJnc1swXTsKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGNvbnRleHQtcm9vdCBzZXR0aW5nIGluICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJzdW4td2ViLnhtbCIpOwpAQCAtNTQsOCArNTQsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VKc3AoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC0xMDgsNiArMTA4LDYgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgewogICAgICAgICAgICAgICAgIC8vIGlnbm9yZQogICAgICAgICAgICAgfQotICAgICAgICB9IAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VtcHR5Q29udGV4dFJvb3QvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbXB0eUNvbnRleHRSb290L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWQwMGMyOC4uNzk1OGUzNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VtcHR5Q29udGV4dFJvb3QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZW1wdHlDb250ZXh0Um9vdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWVtcHR5LWNvbnRleHQtcm9vdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VtcHR5Q29udGV4dFJvb3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VtcHR5Q29udGV4dFJvb3QvYnVpbGQueG1sCmluZGV4IDZjOTY4M2YuLjk2OGRlYjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbXB0eUNvbnRleHRSb290L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZW1wdHlDb250ZXh0Um9vdC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLW5vLWNvbnRleHQtcm9vdCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDEwICs3MCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbXB0eUNvbnRleHRSb290L2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZW1wdHlDb250ZXh0Um9vdC9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCmluZGV4IDY1NmM1MmMuLjEyOTIxZDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbXB0eUNvbnRleHRSb290L2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VtcHR5Q29udGV4dFJvb3QvZGVzY3JpcHRvci9zdW4td2ViLnhtbApAQCAtMjAsNSArMjAsNSBAQAogPCFET0NUWVBFIHN1bi13ZWItYXBwIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEFwcGxpY2F0aW9uIFNlcnZlciA4LjEgU2VydmxldCAyLjQvL0VOIiAiaHR0cDovL3d3dy5zdW4uY29tL3NvZnR3YXJlL3N1bm9uZS9hcHBzZXJ2ZXIvZHRkcy9zdW4td2ViLWFwcF8yXzQtMS5kdGQiPgogCiA8c3VuLXdlYi1hcHA+Ci0gIDxjb250ZXh0LXJvb3Q+LzwvY29udGV4dC1yb290PiAKKyAgPGNvbnRleHQtcm9vdD4vPC9jb250ZXh0LXJvb3Q+CiA8L3N1bi13ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VtcHR5U2VydmxldFBhdGhKc3BJbmNsdWRlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbXB0eVNlcnZsZXRQYXRoSnNwSW5jbHVkZS9XZWJUZXN0LmphdmEKaW5kZXggMzc4NzQ4Mi4uZTgyOTZlNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VtcHR5U2VydmxldFBhdGhKc3BJbmNsdWRlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZW1wdHlTZXJ2bGV0UGF0aEpzcEluY2x1ZGUvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJ1Z3ppbGxhIDI4MDU4Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDksMTUgKzQ5LDE1IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIvanNwL3Rlc3QuanNwIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZW1wdHlTZXJ2bGV0UGF0aEpzcEluY2x1ZGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbXB0eVNlcnZsZXRQYXRoSnNwSW5jbHVkZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGYwNzU2ZTcuLmFkM2E4YTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbXB0eVNlcnZsZXRQYXRoSnNwSW5jbHVkZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbXB0eVNlcnZsZXRQYXRoSnNwSW5jbHVkZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWVtcHR5LXNlcnZsZXQtcGF0aC1qc3AtaW5jbHVkZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VtcHR5U2VydmxldFBhdGhKc3BJbmNsdWRlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbXB0eVNlcnZsZXRQYXRoSnNwSW5jbHVkZS9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VtcHR5U2VydmxldFBhdGhKc3BJbmNsdWRlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZW1wdHlTZXJ2bGV0UGF0aEpzcEluY2x1ZGUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VtcHR5U2VydmxldFBhdGhKc3BJbmNsdWRlL3NlcnZsZXQvRm9vLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZW1wdHlTZXJ2bGV0UGF0aEpzcEluY2x1ZGUvc2VydmxldC9Gb28uamF2YQppbmRleCBmMmM2Yjk5Li4yODMzYWVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZW1wdHlTZXJ2bGV0UGF0aEpzcEluY2x1ZGUvc2VydmxldC9Gb28uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZW1wdHlTZXJ2bGV0UGF0aEpzcEluY2x1ZGUvc2VydmxldC9Gb28uamF2YQpAQCAtMjcsNiArMjcsNiBAQAogU3lzdGVtLm91dC5wcmludGxuKCJGT09GT086ICIgKyByZXEuZ2V0UmVxdWVzdFVSTCgpKTsKICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmQgPSBnZXRTZXJ2bGV0Q29uZmlnKCkuZ2V0U2VydmxldENvbnRleHQoKS5nZXROYW1lZERpc3BhdGNoZXIoImpzcCIpOwogICAgICAgICByZC5mb3J3YXJkKHJlcSwgcmVzKTsKLSAgICAgICAKKwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VFeGNlcHRpb25UeXBlTWFwcGluZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlRXhjZXB0aW9uVHlwZU1hcHBpbmcvV2ViVGVzdC5qYXZhCmluZGV4IGYwYWU1OTEuLmQ5OTFlMzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VFeGNlcHRpb25UeXBlTWFwcGluZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUV4Y2VwdGlvblR5cGVNYXBwaW5nL1dlYlRlc3QuamF2YQpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigKICAgICAgICAgICAgICJVbml0IHRlc3QgZm9yIGV4Y2VwdGlvbi10eXBlLXRvLWN1c3RvbS1lcnJvci1wYWdlIG1hcHBpbmciKTsKQEAgLTYwLDggKzYwLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNzksNyArNzksNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgIAorCiAgICAgICAgIHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL3NxbEV4Y2VwdGlvbi5qc3AgSFRUUC8xLjBcbiI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlRXhjZXB0aW9uVHlwZU1hcHBpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VFeGNlcHRpb25UeXBlTWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDJmODY0ODIuLjRiYjQxMTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VFeGNlcHRpb25UeXBlTWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VFeGNlcHRpb25UeXBlTWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWVycm9yLXBhZ2UtZXhjZXB0aW9uLXR5cGUtbWFwcGluZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUV4Y2VwdGlvblR5cGVNYXBwaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VFeGNlcHRpb25UeXBlTWFwcGluZy9idWlsZC54bWwKaW5kZXggMDBmZGFkMy4uYzM5Nzc2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUV4Y2VwdGlvblR5cGVNYXBwaW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlRXhjZXB0aW9uVHlwZU1hcHBpbmcvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCwxMCArNzAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlRXhjZXB0aW9uVHlwZVdyYXBwZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUV4Y2VwdGlvblR5cGVXcmFwcGVyL1dlYlRlc3QuamF2YQppbmRleCA0MzYzM2MxLi5hZjkzMWQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlRXhjZXB0aW9uVHlwZVdyYXBwZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VFeGNlcHRpb25UeXBlV3JhcHBlci9XZWJUZXN0LmphdmEKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQnVnemlsbGEgMTM5MjQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC02MCwxNSArNjAsMTUgQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvdGVzdCIgKyAiIEhUVFAvMS4wXG4iOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VFeGNlcHRpb25UeXBlV3JhcHBlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUV4Y2VwdGlvblR5cGVXcmFwcGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDg5M2FjZS4uNGNmMjg2OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUV4Y2VwdGlvblR5cGVXcmFwcGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUV4Y2VwdGlvblR5cGVXcmFwcGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZXJyb3ItcGFnZS1leGNlcHRpb24tdHlwZS13cmFwcGVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlRXhjZXB0aW9uVHlwZVdyYXBwZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUV4Y2VwdGlvblR5cGVXcmFwcGVyL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlRXhjZXB0aW9uVHlwZVdyYXBwZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VFeGNlcHRpb25UeXBlV3JhcHBlci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlSGFuZGxpbmdGb3JFcnJvci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlSGFuZGxpbmdGb3JFcnJvci9XZWJUZXN0LmphdmEKaW5kZXggMmQyY2Y4MS4uYzg0NjVjZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUhhbmRsaW5nRm9yRXJyb3IvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VIYW5kbGluZ0ZvckVycm9yL1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigKICAgICAgICAgICAgICJVbml0IHRlc3QgZm9yIGVycm9yLXBhZ2UtaGFuZGxpbmctZm9yLWVycm9yIik7CkBAIC00OSw4ICs0OSw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgiSGVsbG9TZXJ2bGV0IiwKICAgICAgICAgICAgICAgICAgICAgIkhUVFAvMS4xIDUwMCAiLAogICAgICAgICAgICAgICAgICAgICAiRXJyb3IgcGFnZSBmb3IgSGVsbG8gRXhjZXB0aW9uIik7CkBAIC04MSw3ICs4MSw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZShTdHJpbmcgcGFnZSwgU3RyaW5nIGV4cGVjdGVkU3RhdHVzLCBTdHJpbmcgZXhwZWN0ZWRSZXNwb25zZUJvZHkpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgCisKICAgICAgICAgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvIiArIHBhZ2UgKyAiIEhUVFAvMS4wXG4iOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUhhbmRsaW5nRm9yRXJyb3IvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VIYW5kbGluZ0ZvckVycm9yL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTJjODJkMC4uY2IxYWNhNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUhhbmRsaW5nRm9yRXJyb3IvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlSGFuZGxpbmdGb3JFcnJvci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWVycm9yLXBhZ2UtaGFuZGxpbmctZm9yLWVycm9yIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlSGFuZGxpbmdGb3JFcnJvci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlSGFuZGxpbmdGb3JFcnJvci9idWlsZC54bWwKaW5kZXggMDBmZGFkMy4uYzM5Nzc2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUhhbmRsaW5nRm9yRXJyb3IvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VIYW5kbGluZ0ZvckVycm9yL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsMTAgKzcwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUhhbmRsaW5nRm9yRXJyb3Ivc2VydmxldC90ZXN0L0hlbGxvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUhhbmRsaW5nRm9yRXJyb3Ivc2VydmxldC90ZXN0L0hlbGxvU2VydmxldC5qYXZhCmluZGV4IGNjYWQ5ZWYuLmY3N2NmNjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VIYW5kbGluZ0ZvckVycm9yL3NlcnZsZXQvdGVzdC9IZWxsb1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlSGFuZGxpbmdGb3JFcnJvci9zZXJ2bGV0L3Rlc3QvSGVsbG9TZXJ2bGV0LmphdmEKQEAgLTM1LDggKzM1LDggQEAKICAqLwogQFdlYlNlcnZsZXQobmFtZT0iSGVsbG9TZXJ2bGV0IiwgdXJsUGF0dGVybnM9eyIvSGVsbG9TZXJ2bGV0In0pCiBwdWJsaWMgY2xhc3MgSGVsbG9TZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewotICAgCi0gICAgLyoqIAorCisgICAgLyoqCiAgICAgICogUHJvY2Vzc2VzIHJlcXVlc3RzIGZvciBib3RoIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBhbmQgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kcy4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgIC8vIHRoZSBzZXJ2bGV0IHJldHVybnMgMjAwIGlmIFByaW50V3JpdGVyIGlzIGNsb3NlZAogICAgICAgICAvLyAgICBvdXQuY2xvc2UoKTsKICAgICAgICAgfQotICAgIH0gCisgICAgfQogCiAgICAgLy8gPGVkaXRvci1mb2xkIGRlZmF1bHRzdGF0ZT0iY29sbGFwc2VkIiBkZXNjPSJIdHRwU2VydmxldCBtZXRob2RzLiBDbGljayBvbiB0aGUgKyBzaWduIG9uIHRoZSBsZWZ0IHRvIGVkaXQgdGhlIGNvZGUuIj4KLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtNjcsOSArNjcsOSBAQAogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICB9IAorICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtODIsNyArODIsNyBAQAogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIFJldHVybnMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgc2VydmxldC4KICAgICAgKiBAcmV0dXJuIGEgU3RyaW5nIGNvbnRhaW5pbmcgc2VydmxldCBkZXNjcmlwdGlvbgogICAgICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUhhbmRsaW5nRm9yRXJyb3Ivc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlSGFuZGxpbmdGb3JFcnJvci9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQppbmRleCA4OGRkY2I1Li45NDRmNTA1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlSGFuZGxpbmdGb3JFcnJvci9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlSGFuZGxpbmdGb3JFcnJvci9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQpAQCAtMjUsNiArMjUsNiBAQAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKIAotICAgICAgICBpZiAodHJ1ZSkgdGhyb3cgbmV3IE5vQ2xhc3NEZWZGb3VuZEVycm9yKCk7IAorICAgICAgICBpZiAodHJ1ZSkgdGhyb3cgbmV3IE5vQ2xhc3NEZWZGb3VuZEVycm9yKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4cGxvZGVkV2FyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHBsb2RlZFdhci9XZWJUZXN0LmphdmEKaW5kZXggNzhmMmM4Ny4uMjJkMDRiOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4cGxvZGVkV2FyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXhwbG9kZWRXYXIvV2ViVGVzdC5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKLSAgICAgIAorCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIklUIDExODAyOiBleHBsb2RlZCB3YXIgc3VwcG9ydCIpOwogCiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKQEAgLTM1LDcgKzM1LDcgQEAKIAogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwogICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsIGNvbnRleHRSb290ICsgIi9TZXJ2bGV0VGVzdCIgKTsKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXRTdHJpbmcpOwogICAgICAgICAgICAgb3Mud3JpdGUoZ2V0U3RyaW5nLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpcyA9IHMuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKQEAgLTkwLDUgKzkwLDUgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4cGxvZGVkV2FyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXhwbG9kZWRXYXIvYnVpbGQucHJvcGVydGllcwppbmRleCBhNDUyN2EwLi5jYTI1ZjgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXhwbG9kZWRXYXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXhwbG9kZWRXYXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWV4cGxvZGVkLXdhciIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZXhwbG9kZWQtd2FyIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXhwbG9kZWRXYXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4cGxvZGVkV2FyL2J1aWxkLnhtbAppbmRleCAwMjZmODlhLi4yYjExOTkyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXhwbG9kZWRXYXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHBsb2RlZFdhci9idWlsZC54bWwKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IldlYlRlc3QuY2xhc3MiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC02MCwxNyArNjAsMTcgQEAKICAgICAgICAgPGNvcHkgZmlsZT0iJHt3ZWIueG1sfSIgdG9kaXI9IiR7YXNzZW1ibGUuZGlyfS9XRUItSU5GIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9InRlc3QuU2VydmxldENvbnRhaW5lckluaXRpYWxpemVyVGVzdCIKICAgICAgICAgICAgIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9XRUItSU5GL2xpYi9mb28uamFyL01FVEEtSU5GL3NlcnZpY2VzL2pha2FydGEuc2VydmxldC5TZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIiLz4KLSAgICAgICAgCisKICAgICAgICAgPGphdmFjCiAgICAgICAgICAgICBzcmNkaXI9Ii4iCiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktZGlyIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODIsMTAgKzgyLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4cGxvZGVkV2FyL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHBsb2RlZFdhci9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZGI4YmMzYS4uMmE1Mjg5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4cGxvZGVkV2FyL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXhwbG9kZWRXYXIvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMSwxNCArMjEsMTQgQEAKICAgICA8ZmlsdGVyPgogICAgICAgICA8ZmlsdGVyLW5hbWU+RmlsdGVyVGVzdDwvZmlsdGVyLW5hbWU+CiAgICAgICAgIDxmaWx0ZXItY2xhc3M+dGVzdC5GaWx0ZXJUZXN0PC9maWx0ZXItY2xhc3M+Ci0gICAgPC9maWx0ZXI+ICAgIAotICAgICAgICAKKyAgICA8L2ZpbHRlcj4KKwogICAgIDxmaWx0ZXItbWFwcGluZz4KICAgICAgICAgPGZpbHRlci1uYW1lPkZpbHRlclRlc3Q8L2ZpbHRlci1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgogICAgICAgICA8ZGlzcGF0Y2hlcj5SRVFVRVNUPC9kaXNwYXRjaGVyPgogICAgICAgICA8ZGlzcGF0Y2hlcj5JTkNMVURFPC9kaXNwYXRjaGVyPgotICAgICAgICA8ZGlzcGF0Y2hlcj5GT1JXQVJEPC9kaXNwYXRjaGVyPiAgCi0gICAgICAgIDxkaXNwYXRjaGVyPkVSUk9SPC9kaXNwYXRjaGVyPiAKKyAgICAgICAgPGRpc3BhdGNoZXI+Rk9SV0FSRDwvZGlzcGF0Y2hlcj4KKyAgICAgICAgPGRpc3BhdGNoZXI+RVJST1I8L2Rpc3BhdGNoZXI+CiAgICAgPC9maWx0ZXItbWFwcGluZz4KIDwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHBsb2RlZFdhci9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHBsb2RlZFdhci9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQppbmRleCBhNzFmNjM2Li5iZDdmNTc3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXhwbG9kZWRXYXIvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4cGxvZGVkV2FyL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhCkBAIC0xOSwxOSArMTksMTkgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogcHVibGljIGNsYXNzIEZpbHRlclRlc3QgaW1wbGVtZW50cyBGaWx0ZXJ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuZGVzdHJveV0iKTsKLSAgICB9ICAgIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwgRmlsdGVyQ2hhaW4gZmlsdGVyQ2hhaW4pIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLCBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW0ZpbHRlci5kb0ZpbHRlcl0iKTsKLSAgICAgICAgICAKKwogICAgICAgICAoKEh0dHBTZXJ2bGV0UmVxdWVzdClyZXF1ZXN0KS5nZXRTZXNzaW9uKHRydWUpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIlBBU1MiKTsKICAgICAgICAgZmlsdGVyQ2hhaW4uZG9GaWx0ZXIocmVxdWVzdCwgcmVzcG9uc2UpOwotICAgICAgICAKLSAgICB9ICAgIAotICAgIAorCisgICAgfQorCiAgICAgcHVibGljIHZvaWQgaW5pdChqYWthcnRhLnNlcnZsZXQuRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmluaXRdIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4cGxvZGVkV2FyL3NlcnZsZXQvRmlsdGVyVGVzdDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHBsb2RlZFdhci9zZXJ2bGV0L0ZpbHRlclRlc3QyLmphdmEKaW5kZXggYWM3MDJkNS4uY2E1MjE4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4cGxvZGVkV2FyL3NlcnZsZXQvRmlsdGVyVGVzdDIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXhwbG9kZWRXYXIvc2VydmxldC9GaWx0ZXJUZXN0Mi5qYXZhCkBAIC0yMiwxOSArMjIsMTkgQEAKIAogQFdlYkZpbHRlcigiLyoiKQogcHVibGljIGNsYXNzIEZpbHRlclRlc3QyIGltcGxlbWVudHMgRmlsdGVyewotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmRlc3Ryb3ldIik7Ci0gICAgfSAgICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIEZpbHRlckNoYWluIGZpbHRlckNoYWluKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuZG9GaWx0ZXJdIik7Ci0gICAgICAgICAgCisKICAgICAgICAgKChIdHRwU2VydmxldFJlcXVlc3QpcmVxdWVzdCkuZ2V0U2Vzc2lvbih0cnVlKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUjIiLCAiUEFTUyIpOwogICAgICAgICBmaWx0ZXJDaGFpbi5kb0ZpbHRlcihyZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgICAgIAotICAgIH0gICAgCi0gICAgCisKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBpbml0KGpha2FydGEuc2VydmxldC5GaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuaW5pdF0iKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXhwbG9kZWRXYXIvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4cGxvZGVkV2FyL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCA0MGQ4YmU0Li4yNzcxOGJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXhwbG9kZWRXYXIvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHBsb2RlZFdhci9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTI4LDEyICsyOCwxMiBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKICAgICAgICAgb3V0LnByaW50bG4ocmVxdWVzdC5nZXRTZXNzaW9uKHRydWUpLmdldEF0dHJpYnV0ZSgiRklMVEVSIikgKyAiICIgKwogICAgICAgICAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKHRydWUpLmdldEF0dHJpYnV0ZSgiRklMVEVSMiIpICsgIiAiICsKLSAgICAgICAgICAgICAgIGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0QXR0cmlidXRlKCJTQ0luaXQiKSk7ICAKKyAgICAgICAgICAgICAgIGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0QXR0cmlidXRlKCJTQ0luaXQiKSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXh0cmFDbGFzc1BhdGhKYXJVcmwvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4dHJhQ2xhc3NQYXRoSmFyVXJsL1dlYlRlc3QuamF2YQppbmRleCA2ODFhMTkzLi41OWJhZmJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXh0cmFDbGFzc1BhdGhKYXJVcmwvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHRyYUNsYXNzUGF0aEphclVybC9XZWJUZXN0LmphdmEKQEAgLTIzLDggKzIzLDggQEAKICAqIChBZGQgc3VwcG9ydCBmb3IgbmVzdGVkIEpBUiBmaWxlcyB0byA8c3VuLXdlYi1hcHA+PGNsYXNzLWxvYWRlcj4ncwogICogIGV4dHJhLWNsYXNzLXBhdGggYXR0cmlidXRlIGFuZCB0byAiYXNhZG1pbiBkZXBsb3kgLS1saWJyYXJpZXMiKToKICAqCi0gKiBUaGlzIHVuaXQgYWRkcyAiamFyOmZpbGU6L3RtcC9hYmMuamFyIS8iIHRvIHRoZSBleHRyYS1jbGFzcy1wYXRoIGluIAotICogc3VuLXdlYi54bWwsIGFuZCBleHBlY3RzIHRoZSBzZXJ2bGV0IHRvIGJlIGFibGUgdG8gaW5zdGFudGlhdGUgdGhlIAorICogVGhpcyB1bml0IGFkZHMgImphcjpmaWxlOi90bXAvYWJjLmphciEvIiB0byB0aGUgZXh0cmEtY2xhc3MtcGF0aCBpbgorICogc3VuLXdlYi54bWwsIGFuZCBleHBlY3RzIHRoZSBzZXJ2bGV0IHRvIGJlIGFibGUgdG8gaW5zdGFudGlhdGUgdGhlCiAgKiBhYWEuYmJiLmNjYy5UZXN0IGNsYXNzIGZyb20gdGhpcyBKQVIgZmlsZS4KICAqCiAgKiBOb3RpY2UgdGhhdCBiZWNhdXNlIG9mIDQ3MzU2MzkgKCJVUkxDbGFzc0xvYWRlciBkb2VzIG5vdCB3b3JrIHdpdGgKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggMjkxNyIpOwpAQCAtNjEsMTEgKzYxLDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTg0LDEwICs4NCwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXh0cmFDbGFzc1BhdGhKYXJVcmwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHRyYUNsYXNzUGF0aEphclVybC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGM5NTU0MWIuLjRhNzg1OTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHRyYUNsYXNzUGF0aEphclVybC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHRyYUNsYXNzUGF0aEphclVybC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWV4dHJhLWNsYXNzLXBhdGgtamFyLXVybCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4dHJhQ2xhc3NQYXRoSmFyVXJsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHRyYUNsYXNzUGF0aEphclVybC9idWlsZC54bWwKaW5kZXggNTAwNmU5My4uMjNmNzM3OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4dHJhQ2xhc3NQYXRoSmFyVXJsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXh0cmFDbGFzc1BhdGhKYXJVcmwvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NiwyMyArNDYsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIKICAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxjb3B5IGZpbGU9ImFiYy5qYXIiIHRvZGlyPSIvdG1wIiBmYWlsb25lcnJvcj0idHJ1ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4dHJhQ2xhc3NQYXRoUmVsYXRpdmUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4dHJhQ2xhc3NQYXRoUmVsYXRpdmUvV2ViVGVzdC5qYXZhCmluZGV4IDAzNDcyYTAuLjViNGJjYTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHRyYUNsYXNzUGF0aFJlbGF0aXZlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXh0cmFDbGFzc1BhdGhSZWxhdGl2ZS9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggOTA0Iik7CkBAIC01NCwxMSArNTQsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpAQCAtNzcsMTAgKzc3LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHRyYUNsYXNzUGF0aFJlbGF0aXZlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXh0cmFDbGFzc1BhdGhSZWxhdGl2ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDI4ZDBjYzQuLjliNzc0ZTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHRyYUNsYXNzUGF0aFJlbGF0aXZlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4dHJhQ2xhc3NQYXRoUmVsYXRpdmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1leHRyYS1jbGFzcy1wYXRoLXJlbGF0aXZlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXh0cmFDbGFzc1BhdGhSZWxhdGl2ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXh0cmFDbGFzc1BhdGhSZWxhdGl2ZS9idWlsZC54bWwKaW5kZXggM2NlYmY4Zi4uM2ZiNWYxNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4dHJhQ2xhc3NQYXRoUmVsYXRpdmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHRyYUNsYXNzUGF0aFJlbGF0aXZlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjMgKzQ0LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iCiAgICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsZURvd25sb2FkVGltZW91dC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbGVEb3dubG9hZFRpbWVvdXQvYnVpbGQucHJvcGVydGllcwppbmRleCBlMGU1ZTZiLi4yMmI0NDZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsZURvd25sb2FkVGltZW91dC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWxlRG93bmxvYWRUaW1lb3V0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZmlsZS1kb3dubG9hZC10aW1lb3V0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsZURvd25sb2FkVGltZW91dC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsZURvd25sb2FkVGltZW91dC9idWlsZC54bWwKaW5kZXggNmY0YzM4OC4uNzkzNDM4NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbGVEb3dubG9hZFRpbWVvdXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWxlRG93bmxvYWRUaW1lb3V0L2J1aWxkLnhtbApAQCAtNDUsMzEgKzQ1LDMxIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIj4KICAgICAgICAgPG1rZGlyIGRpcj0iYnVpbGQvd2ViYXBwIi8+Ci0JCSAgPGNvcHkgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzL3dlYnNlcnZpY2VzLW9zZ2kuamFyIiB0b2Rpcj0iYnVpbGQvd2ViYXBwIi8+CisgICAgICAgICAgPGNvcHkgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzL3dlYnNlcnZpY2VzLW9zZ2kuamFyIiB0b2Rpcj0iYnVpbGQvd2ViYXBwIi8+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9InNyYy9tYWluL2phdmEiIGRlc3RkaXI9ImJ1aWxkIiBkZWJ1Zz0idHJ1ZSIKICAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHt0ZXN0fSIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIqKi8qLmphdmEiLz4KIAotCQkJPHppcCBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIj4KLQkJCQk8ZmlsZXNldCBkaXI9ImJ1aWxkL3dlYmFwcCIvPgotCQkJCTxmaWxlc2V0IGRpcj0ic3JjL21haW4vd2ViYXBwIi8+Ci0JCQk8L3ppcD4KKyAgICAgICAgICAgIDx6aXAgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciI+CisgICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJidWlsZC93ZWJhcHAiLz4KKyAgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9InNyYy9tYWluL3dlYmFwcCIvPgorICAgICAgICAgICAgPC96aXA+CiAgICAgPC90YXJnZXQ+CiAKLQkgPHRhcmdldCBuYW1lPSJkZXBsb3kiPgotCQk8cHJvcGVydHkgbmFtZT0iZm9yY2UiIHZhbHVlPSJ0cnVlIi8+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KLQkgPC90YXJnZXQ+CisgICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95Ij4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImZvcmNlIiB2YWx1ZT0idHJ1ZSIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CisgICAgIDwvdGFyZ2V0PgogCi0JIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgotCQk8cHJvcGVydHkgbmFtZT0iZm9yY2UiIHZhbHVlPSJ0cnVlIi8+Ci0JCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotCSA8L3RhcmdldD4KKyAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmb3JjZSIgdmFsdWU9InRydWUiLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CisgICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBidWlsZCwgcnVuLCBkZXBsb3ksIHVuZGVwbG95Ii8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGJ1aWxkLCBkZXBsb3kiPgotCQk8amF2YSBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2guZGV2dGVzdHMud2ViLmZpbGVkb3dubG9hZC5XZWJUZXN0IiBjbGFzc3BhdGg9IiR7dGVzdH0iLz4KKyAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLmRldnRlc3RzLndlYi5maWxlZG93bmxvYWQuV2ViVGVzdCIgY2xhc3NwYXRoPSIke3Rlc3R9Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWxlRG93bmxvYWRUaW1lb3V0L3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0cy93ZWIvZmlsZWRvd25sb2FkL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWxlRG93bmxvYWRUaW1lb3V0L3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0cy93ZWIvZmlsZWRvd25sb2FkL1dlYlRlc3QuamF2YQppbmRleCBhN2RmNTM4Li5lOTY0MTI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsZURvd25sb2FkVGltZW91dC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdHMvd2ViL2ZpbGVkb3dubG9hZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbGVEb3dubG9hZFRpbWVvdXQvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3RzL3dlYi9maWxlZG93bmxvYWQvV2ViVGVzdC5qYXZhCkBAIC0zMCw2MyArMzAsNjMgQEAKICAqIEBhdXRob3IganVzdGluLmQubGVlQG9yYWNsZS5jb20KICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgZXh0ZW5kcyBCYXNlRGV2VGVzdCB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9ICJkZWZhdWx0LXJlc3BvbnNlLXR5cGUiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAiZGVmYXVsdC1yZXNwb25zZS10eXBlIjsKIAotCWJ5dGVbXSBiYSA9IG5ldyBieXRlWzEwMjRdOworICAgIGJ5dGVbXSBiYSA9IG5ldyBieXRlWzEwMjRdOwogCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiAiZmlsZSBkb3dubG9hZCB0aW1lIG91dCB0ZXN0IjsKLQl9CisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGVzY3JpcHRpb24oKSB7CisgICAgICAgIHJldHVybiAiZmlsZSBkb3dubG9hZCB0aW1lIG91dCB0ZXN0IjsKKyAgICB9CiAKLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3ROYW1lKCkgewotCQlyZXR1cm4gVEVTVF9OQU1FOwotCX0KKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3ROYW1lKCkgeworICAgICAgICByZXR1cm4gVEVTVF9OQU1FOworICAgIH0KIAogCi0JLyoqCi0JICogQHBhcmFtIGFyZ3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKLQkgKi8KLQlwdWJsaWMgdm9pZCBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYXNhZG1pbigic2V0IiwgImNvbmZpZ3MuY29uZmlnLnNlcnZlci1jb25maWcubmV0d29yay1jb25maWcucHJvdG9jb2xzLnByb3RvY29sLmh0dHAtbGlzdGVuZXItMS5odHRwLnRpbWVvdXQtc2Vjb25kcz0zMDAiKTsKLQkJLy8gVE9ETyBjb2RlIGFwcGxpY2F0aW9uIGxvZ2ljIGhlcmUKLQkJVVJMIHUgPSBuZXcgVVJMKCJodHRwOi8vbG9jYWxob3N0OiIgKyBhbnRQcm9wKCJodHRwLnBvcnQiKSArICIvd2ViLWZpbGUtZG93bmxvYWQtdGltZW91dC93ZWJzZXJ2aWNlcy1vc2dpLmphciIpOwotCQlIdHRwVVJMQ29ubmVjdGlvbiBodWMgPSAoSHR0cFVSTENvbm5lY3Rpb24pIHUub3BlbkNvbm5lY3Rpb24oKTsKLQkJaHVjLnNldFJlcXVlc3RNZXRob2QoIkdFVCIpOwotCQlodWMuc2V0UmVhZFRpbWVvdXQoMCk7CisgICAgLyoqCisgICAgICogQHBhcmFtIGFyZ3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgYXNhZG1pbigic2V0IiwgImNvbmZpZ3MuY29uZmlnLnNlcnZlci1jb25maWcubmV0d29yay1jb25maWcucHJvdG9jb2xzLnByb3RvY29sLmh0dHAtbGlzdGVuZXItMS5odHRwLnRpbWVvdXQtc2Vjb25kcz0zMDAiKTsKKyAgICAgICAgLy8gVE9ETyBjb2RlIGFwcGxpY2F0aW9uIGxvZ2ljIGhlcmUKKyAgICAgICAgVVJMIHUgPSBuZXcgVVJMKCJodHRwOi8vbG9jYWxob3N0OiIgKyBhbnRQcm9wKCJodHRwLnBvcnQiKSArICIvd2ViLWZpbGUtZG93bmxvYWQtdGltZW91dC93ZWJzZXJ2aWNlcy1vc2dpLmphciIpOworICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBodWMgPSAoSHR0cFVSTENvbm5lY3Rpb24pIHUub3BlbkNvbm5lY3Rpb24oKTsKKyAgICAgICAgaHVjLnNldFJlcXVlc3RNZXRob2QoIkdFVCIpOworICAgICAgICBodWMuc2V0UmVhZFRpbWVvdXQoMCk7CiAKLQkJSW5wdXRTdHJlYW0gaXMgPSBodWMuZ2V0SW5wdXRTdHJlYW0oKTsKKyAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBodWMuZ2V0SW5wdXRTdHJlYW0oKTsKIAotCQlGaWxlIGJhc2UgPSBuZXcgRmlsZSgic3JjL21haW4vd2ViYXBwL3dlYnNlcnZpY2VzLW9zZ2kuamFyIik7Ci0JCUZpbGUgdG1wID0gbmV3IEZpbGUoIi90bXAiKTsKLQkJaWYoIXRtcC5leGlzdHMoKSkgewotCQkJdG1wID0gbmV3IEZpbGUoU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLmlvLnRtcGRpciIpKTsKLQkJfQotCQlGaWxlIGZpbGUgPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKCJ3ZWJzZXJ2aWNlcy1vc2dpIiwgIi5qYXIiLCB0bXApOwotCQlmaWxlLmRlbGV0ZU9uRXhpdCgpOwotCQlGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGUpOworICAgICAgICBGaWxlIGJhc2UgPSBuZXcgRmlsZSgic3JjL21haW4vd2ViYXBwL3dlYnNlcnZpY2VzLW9zZ2kuamFyIik7CisgICAgICAgIEZpbGUgdG1wID0gbmV3IEZpbGUoIi90bXAiKTsKKyAgICAgICAgaWYoIXRtcC5leGlzdHMoKSkgeworICAgICAgICAgICAgdG1wID0gbmV3IEZpbGUoU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLmlvLnRtcGRpciIpKTsKKyAgICAgICAgfQorICAgICAgICBGaWxlIGZpbGUgPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKCJ3ZWJzZXJ2aWNlcy1vc2dpIiwgIi5qYXIiLCB0bXApOworICAgICAgICBmaWxlLmRlbGV0ZU9uRXhpdCgpOworICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGUpOwogCi0JCWludCBjOwotCQlMb25nIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCXRyeSB7Ci0JCQl3aGlsZSAoKGMgPSBpcy5yZWFkKGJhKSkgIT0gLTEpIHsKLQkJCQlmb3Mud3JpdGUoYmEsIDAsIGMpOwotCQkJCVRocmVhZC5zbGVlcCgxMCk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9IGZpbmFsbHkgewotCQkJaXMuY2xvc2UoKTsKLQkJCWZvcy5jbG9zZSgpOwotCQkJYXNhZG1pbigic2V0IiwgImNvbmZpZ3MuY29uZmlnLnNlcnZlci1jb25maWcubmV0d29yay1jb25maWcucHJvdG9jb2xzLnByb3RvY29sLmh0dHAtbGlzdGVuZXItMS5odHRwLnRpbWVvdXQtc2Vjb25kcz0iKTsKLQkJfQotCQlMb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICBpbnQgYzsKKyAgICAgICAgTG9uZyBzdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hpbGUgKChjID0gaXMucmVhZChiYSkpICE9IC0xKSB7CisgICAgICAgICAgICAgICAgZm9zLndyaXRlKGJhLCAwLCBjKTsKKyAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoMTApOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGlzLmNsb3NlKCk7CisgICAgICAgICAgICBmb3MuY2xvc2UoKTsKKyAgICAgICAgICAgIGFzYWRtaW4oInNldCIsICJjb25maWdzLmNvbmZpZy5zZXJ2ZXItY29uZmlnLm5ldHdvcmstY29uZmlnLnByb3RvY29scy5wcm90b2NvbC5odHRwLWxpc3RlbmVyLTEuaHR0cC50aW1lb3V0LXNlY29uZHM9Iik7CisgICAgICAgIH0KKyAgICAgICAgTG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKIAotCQlyZXBvcnQoVEVTVF9OQU1FLCAzMCA8PSAoZW5kIC0gc3RhcnQpLzEwMDApOwotCQlib29sZWFuIHNhbWUgPSBiYXNlLmxlbmd0aCgpID09IGZpbGUubGVuZ3RoKCk7Ci0JCXJlcG9ydChURVNUX05BTUUsIHNhbWUpOwotCX0KKyAgICAgICAgcmVwb3J0KFRFU1RfTkFNRSwgMzAgPD0gKGVuZCAtIHN0YXJ0KS8xMDAwKTsKKyAgICAgICAgYm9vbGVhbiBzYW1lID0gYmFzZS5sZW5ndGgoKSA9PSBmaWxlLmxlbmd0aCgpOworICAgICAgICByZXBvcnQoVEVTVF9OQU1FLCBzYW1lKTsKKyAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgbmV3IFdlYlRlc3QoKS5ydW4oKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJNdWx0aXBsZUluaXQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbHRlck11bHRpcGxlSW5pdC9XZWJUZXN0LmphdmEKaW5kZXggMzg3Yjg4Ny4uMjg4YThkNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbHRlck11bHRpcGxlSW5pdC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbHRlck11bHRpcGxlSW5pdC9XZWJUZXN0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBJVCAxMTk3OSIpOwpAQCAtNzgsNyArNzgsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIGRvVGVzdChTdHJpbmcgcGFnZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi8iICsgcGFnZSk7Ci0gICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKIAogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJNdWx0aXBsZUluaXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJNdWx0aXBsZUluaXQvYnVpbGQucHJvcGVydGllcwppbmRleCA2NTc1MGJhLi5iODA2ZjMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyTXVsdGlwbGVJbml0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbHRlck11bHRpcGxlSW5pdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWZpbHRlci1tdWx0aXBsZS1pbml0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyTXVsdGlwbGVJbml0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJNdWx0aXBsZUluaXQvYnVpbGQueG1sCmluZGV4IGJjODczOTAuLjVlNzA0MTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJNdWx0aXBsZUluaXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJNdWx0aXBsZUluaXQvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfSIgaW5jbHVkZXM9IldlYlRlc3QqLmNsYXNzIi8+CiAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NSwyMyArNDUsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MywxMCArNzMsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyVVJJTWFwcGluZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyVVJJTWFwcGluZy9XZWJUZXN0LmphdmEKaW5kZXggNjlhZTYyNC4uM2NlMjBiYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbHRlclVSSU1hcHBpbmcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJVUklNYXBwaW5nL1dlYlRlc3QuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdAogewotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTQzLDE2ICs0MywxNiBAQAogCiAgICAgICAgIC8vIFRoZSBzdGF0IHJlcG9ydGVyIHdyaXRlcyBvdXQgdGhlIHRlc3QgaW5mbyBhbmQgcmVzdWx0cwogICAgICAgICAvLyBpbnRvIHRoZSB0b3AtbGV2ZWwgcXVpY2tsb29rIGRpcmVjdG9yeSBkdXJpbmcgYSBydW4uCi0gICAgICAKKwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDQ5MDMyMDkiKTsKIAogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKIAogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHdlYlRlc3QucG9ydFMpLmludFZhbHVlKCk7CiAgICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICAKKwogICAgICAgICB0cnkgewotICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQgc3RyaXBzIG91dCB1cmkgcGFyYW1ldGVycyAoIjsuKiIpIAorICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQgc3RyaXBzIG91dCB1cmkgcGFyYW1ldGVycyAoIjsuKiIpCiAgICAgICAgICAgICAvLyBiZWZvcmUgbWFwcGluZyB0byB3ZWJhcHBzCiAgICAgICAgICAgICB3ZWJUZXN0LmdvR2V0KHdlYlRlc3QuaG9zdCwgcG9ydCwKICAgICAgICAgICAgICAgICB3ZWJUZXN0LmNvbnRleHRSb290ICsgIi9TZXJ2bGV0VGVzdDt0ZXN0PWFhYSIgKTsKQEAgLTgyLDcgKzgyLDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjBcbiIpKTsKICAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMFxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwpAQCAtMTIzLDUgKzEyMyw1IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUgKyAiIEZBSUxFRCIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJVUklNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyVVJJTWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQxYjM3ZTguLjQwNWUwY2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJVUklNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbHRlclVSSU1hcHBpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWZpbHRlclVSSU1hcHBpbmciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWZpbHRlclVSSU1hcHBpbmciLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLWZpbHRlclVSSU1hcHBpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJVUklNYXBwaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJVUklNYXBwaW5nL2J1aWxkLnhtbAppbmRleCA4NTQyZTkxLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyVVJJTWFwcGluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbHRlclVSSU1hcHBpbmcvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNyArNDIsMTcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJVUklNYXBwaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJVUklNYXBwaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBjOWI4MWZlLi4xZDcwMmI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyVVJJTWFwcGluZy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbHRlclVSSU1hcHBpbmcvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yNiwyMyArMjYsMjMgQEAKICAgICA8ZmlsdGVyPgogICAgICAgICA8ZmlsdGVyLW5hbWU+RmlsdGVyVGVzdDwvZmlsdGVyLW5hbWU+CiAgICAgICAgIDxmaWx0ZXItY2xhc3M+dGVzdC5GaWx0ZXJUZXN0PC9maWx0ZXItY2xhc3M+Ci0gICAgPC9maWx0ZXI+ICAgIAotICAgICAgICAKKyAgICA8L2ZpbHRlcj4KKwogICAgIDxmaWx0ZXItbWFwcGluZz4KICAgICAgICAgPGZpbHRlci1uYW1lPkZpbHRlclRlc3Q8L2ZpbHRlci1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KICAgICAgICAgPGRpc3BhdGNoZXI+UkVRVUVTVDwvZGlzcGF0Y2hlcj4KICAgICAgICAgPGRpc3BhdGNoZXI+SU5DTFVERTwvZGlzcGF0Y2hlcj4KLSAgICAgICAgPGRpc3BhdGNoZXI+Rk9SV0FSRDwvZGlzcGF0Y2hlcj4gIAotICAgICAgICA8ZGlzcGF0Y2hlcj5FUlJPUjwvZGlzcGF0Y2hlcj4gCisgICAgICAgIDxkaXNwYXRjaGVyPkZPUldBUkQ8L2Rpc3BhdGNoZXI+CisgICAgICAgIDxkaXNwYXRjaGVyPkVSUk9SPC9kaXNwYXRjaGVyPgogICAgIDwvZmlsdGVyLW1hcHBpbmc+CiAKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJVUklNYXBwaW5nL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbHRlclVSSU1hcHBpbmcvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEKaW5kZXggZmNmMzYyNC4uZWVjOTU3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbHRlclVSSU1hcHBpbmcvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbHRlclVSSU1hcHBpbmcvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEKQEAgLTE5LDI1ICsxOSwyNSBAQAogaW1wb3J0IGpha2FydGEuc2VydmxldC4qOwogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7CiBwdWJsaWMgY2xhc3MgRmlsdGVyVGVzdCBpbXBsZW1lbnRzIEZpbHRlcnsKLSAgICAKKwogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW0ZpbHRlci5kZXN0cm95XSIpOwotICAgIH0gICAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBGaWx0ZXJDaGFpbiBmaWx0ZXJDaGFpbikgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmRvRmlsdGVyXSIpOwotICAgICAgICAgIAorCiAgICAgICAgICgoSHR0cFNlcnZsZXRSZXF1ZXN0KXJlcXVlc3QpLmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJQQVNTIik7CiAgICAgICAgIGZpbHRlckNoYWluLmRvRmlsdGVyKHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICAgICAgCi0gICAgfSAgICAKLSAgICAKLSAgICAKKworICAgIH0KKworCiAgICAgcHVibGljIHZvaWQgaW5pdChqYWthcnRhLnNlcnZsZXQuRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmluaXRdIik7CiAgICAgICAgIGNvbnRleHQgPSBmaWx0ZXJDb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJVUklNYXBwaW5nL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJVUklNYXBwaW5nL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCBhNzZmODgyLi5mMWY2MjdjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyVVJJTWFwcGluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbHRlclVSSU1hcHBpbmcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0yNSwxMyArMjUsMTMgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0gIiArIGNvbnRleHQuZ2V0TWFqb3JWZXJzaW9uKCkpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpAQCAtMzksMTggKzM5LDE4IEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgT2JqZWN0IG9iaiA9IHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihvYmopOwogICAgICAgICBpZiAoKG9iaiAhPSBudWxsKSAmJiAob2JqLmVxdWFscygiUEFTUyIpKSkgewogICAgICAgICAgICAgb3V0LnByaW50bG4oIkZpbHRlciBpbnZva2VkIik7CiAgICAgICAgIH0KLSAgICAgICAgCQorCiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9XZWJUZXN0LmphdmEKaW5kZXggN2I2YWY2Ni4uN2FmNDYwOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm0tYmFzZWQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtLWJhc2VkL1dlYlRlc3QuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdAogewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9ICJmb3JtLWJhc2VkIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSlNFU1NJT05JRCA9ICJKU0VTU0lPTklEIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMVEVSX1JFUVVFU1QgPSAiRklMVEVSLVJFUVVFU1Q6IjsKQEAgLTUyLDcgKzUyLDcgQEAKIAogICAgICAgICAvLyBUaGUgc3RhdCByZXBvcnRlciB3cml0ZXMgb3V0IHRoZSB0ZXN0IGluZm8gYW5kIHJlc3VsdHMKICAgICAgICAgLy8gaW50byB0aGUgdG9wLWxldmVsIHF1aWNrbG9vayBkaXJlY3RvcnkgZHVyaW5nIGEgcnVuLgotICAgICAgCisKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiU3RhbmRhbG9uZSBqc3IxMTUgIHdhciB0ZXN0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogCkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KGdldCk7CiAgICAgICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXHJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAgICAgICAgIGNsb3NlKGlzKTsKICAgICAgICAgICAgIGNsb3NlKGJyKTsKICAgICAgICAgfQotIAorCiAgICAgICAgIGlmIChjb29raWUgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiTWlzc2luZyBTZXQtQ29va2llIHJlc3BvbnNlIGhlYWRlciIpOwogICAgICAgICB9CkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICAgICAgICAgIFN0cmluZyBjb29raWUgPSAiQ29va2llOiAiICsganNlc3Npb25JZCArICJcbiI7CiAgICAgICAgICAgICBvcy53cml0ZShjb29raWUuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXHJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC0xODgsNyArMTg4LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzZW5kQ29va2llKTsKICAgICAgICAgICAgIG9zLndyaXRlKHNlbmRDb29raWUuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXHJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm0tYmFzZWQvYnVpbGQucHJvcGVydGllcwppbmRleCAzZjQyYzU4Li42OTVmYzgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtLWJhc2VkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1mb3JtLWJhc2VkIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1mb3JtLWJhc2VkIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1mb3JtLWJhc2VkIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9idWlsZC54bWwKaW5kZXggNDc2NzU4Ni4uZGMzOTg0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm0tYmFzZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtLWJhc2VkL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNTIsMTEgKzUyLDExIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouanNwIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmpzcCIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTY0LDggKzY0LDggQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNzUsNyArNzUsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04OSwxMCArODksMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXVzZXItY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtLWJhc2VkL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtLWJhc2VkL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBmMTVmNGMzLi43MzkxZDc5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm0tYmFzZWQvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwzNyArMjIsMzcgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxmaWx0ZXI+CiAgICAgICAgIDxmaWx0ZXItbmFtZT5GaWx0ZXJUZXN0PC9maWx0ZXItbmFtZT4KICAgICAgICAgPGZpbHRlci1jbGFzcz50ZXN0LkZpbHRlclRlc3Q8L2ZpbHRlci1jbGFzcz4KLSAgICA8L2ZpbHRlcj4gICAgCi0gICAgICAgIAorICAgIDwvZmlsdGVyPgorCiAgICAgPGZpbHRlci1tYXBwaW5nPgogICAgICAgICA8ZmlsdGVyLW5hbWU+RmlsdGVyVGVzdDwvZmlsdGVyLW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+CiAgICAgICAgIDxkaXNwYXRjaGVyPlJFUVVFU1Q8L2Rpc3BhdGNoZXI+CiAgICAgICAgIDxkaXNwYXRjaGVyPklOQ0xVREU8L2Rpc3BhdGNoZXI+Ci0gICAgICAgIDxkaXNwYXRjaGVyPkZPUldBUkQ8L2Rpc3BhdGNoZXI+ICAKLSAgICAgICAgPGRpc3BhdGNoZXI+RVJST1I8L2Rpc3BhdGNoZXI+IAorICAgICAgICA8ZGlzcGF0Y2hlcj5GT1JXQVJEPC9kaXNwYXRjaGVyPgorICAgICAgICA8ZGlzcGF0Y2hlcj5FUlJPUjwvZGlzcGF0Y2hlcj4KICAgICA8L2ZpbHRlci1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDI8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDI8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDI8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0MzwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mzwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0Mzwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QzPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3QzPC91cmwtcGF0dGVybj4KICAgICA8L3NlcnZsZXQtbWFwcGluZz4KLSAgICAKKwogICAgIDxzZXNzaW9uLWNvbmZpZz4KICAgICAgICAgPHNlc3Npb24tdGltZW91dD4xMDwvc2Vzc2lvbi10aW1lb3V0PgogICAgIDwvc2Vzc2lvbi1jb25maWc+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtLWJhc2VkL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhCmluZGV4IGZjZjM2MjQuLmVlYzk1N2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtLWJhc2VkL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtLWJhc2VkL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhCkBAIC0xOSwyNSArMTksMjUgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogcHVibGljIGNsYXNzIEZpbHRlclRlc3QgaW1wbGVtZW50cyBGaWx0ZXJ7Ci0gICAgCisKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuZGVzdHJveV0iKTsKLSAgICB9ICAgIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwgRmlsdGVyQ2hhaW4gZmlsdGVyQ2hhaW4pIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLCBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW0ZpbHRlci5kb0ZpbHRlcl0iKTsKLSAgICAgICAgICAKKwogICAgICAgICAoKEh0dHBTZXJ2bGV0UmVxdWVzdClyZXF1ZXN0KS5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiUEFTUyIpOwogICAgICAgICBmaWx0ZXJDaGFpbi5kb0ZpbHRlcihyZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgICAgIAotICAgIH0gICAgCi0gICAgCi0gICAgCisKKyAgICB9CisKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoamFrYXJ0YS5zZXJ2bGV0LkZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW0ZpbHRlci5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gZmlsdGVyQ29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggZDRhMzE3NC4uZGFhODA1MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm0tYmFzZWQvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtLWJhc2VkL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtNDYsMTMgKzQ2LDEzIEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCBpbXBsZW1lbnRzIEh0dHBTZXNzaW9uTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7CiAgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSAiICsgY29udGV4dC5nZXRNYWpvclZlcnNpb24oKSk7Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CkBAIC02MCwyMyArNjAsMjMgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUi1SRVFVRVNUIiwgcmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVIiKSk7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIkZBSUwiKTsgICAgICAgIAotICAgICAgICAJCisgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIkZBSUwiKTsKKwogICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciByZCA9IGNvbnRleHQuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9TZXJ2bGV0VGVzdDIiKTsKLSAgICAgICAgcmQuZm9yd2FyZChyZXF1ZXN0LCByZXNwb25zZSk7ICAgICAgIAorICAgICAgICByZC5mb3J3YXJkKHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uQ3JlYXRlZF0iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uRGVzdHJveWVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25EZXN0cm95ZWRdIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXR0cmlidXRlczogIiArIGh0dHBTZXNzaW9uRXZlbnQuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgidGVzdCIpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtLWJhc2VkL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCmluZGV4IGRiMmNiNTAuLjAwNzc1YTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtLWJhc2VkL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm0tYmFzZWQvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YQpAQCAtMjUsMTAgKzI1LDEwIEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QyIGV4dGVuZHMgSHR0cFNlcnZsZXQgaW1wbGVtZW50cyBIdHRwU2Vzc2lvbkxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0Mi5pbml0XSIpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQyLmluaXRdIik7CiAgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICB9CiAKQEAgLTM3LDIzICszNywyMyBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDIuZG9Qb3N0XSIpOwotICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVItRk9SV0FSRCIscmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVIiKSk7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIkZBSUwiKTsgICAgICAgIAotICAgICAgICAKKyAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiRkFJTCIpOworCiAgICAgICAgIFJlcXVlc3REaXNwYXRjaGVyIHJkID0gcmVxdWVzdC5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL1NlcnZsZXRUZXN0MyIpOwotICAgICAgICByZC5pbmNsdWRlKHJlcXVlc3QsIHJlc3BvbnNlKTsgICAgIAorICAgICAgICByZC5pbmNsdWRlKHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9Ci0gCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uQ3JlYXRlZF0iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uRGVzdHJveWVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25EZXN0cm95ZWRdIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXR0cmlidXRlczogIiArIGh0dHBTZXNzaW9uRXZlbnQuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgidGVzdCIpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtLWJhc2VkL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhCmluZGV4IDNlOGQyNWIuLmU3OGZlYzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtLWJhc2VkL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm0tYmFzZWQvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YQpAQCAtNDYsMTEgKzQ2LDExIEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QzIGV4dGVuZHMgSHR0cFNlcnZsZXR7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDMuaW5pdF0iKTsgICAgICAgIAotICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7ICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDMuaW5pdF0iKTsKKyAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpAQCAtNTgsMTIgKzU4LDEyIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0My5kb1Bvc3RdIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIG91dC5wcmludGxuKCJGSUxURVItUkVRVUVTVDoiICsgcmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVItUkVRVUVTVCIpKTsKICAgICAgICAgb3V0LnByaW50bG4oIkZJTFRFUi1GT1JXQVJEOiIgKyByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUi1GT1JXQVJEIikpOwogICAgICAgICBvdXQucHJpbnRsbigiRklMVEVSLUlOQ0xVREU6IiArIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSIikpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGQvV2ViVGVzdC5qYXZhCmluZGV4IDA5MjU3MjkuLjY0M2ZiZjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZC9XZWJUZXN0LmphdmEKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNDkyNTQwNiIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU5LDggKzU5LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlSnNwKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzhhYWI0YS4uMjcwMTFmNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZm9ybS1oaW50LWZpZWxkIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1mb3JtLWhpbnQtZmllbGQiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGQvYnVpbGQueG1sCmluZGV4IDg1NDJlOTEuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE3ICs0MiwxNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQb3N0V2l0aFF1ZXJ5UGFyYW0vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQb3N0V2l0aFF1ZXJ5UGFyYW0vV2ViVGVzdC5qYXZhCmluZGV4IDM2ZDkzMTkuLmE2MmQ3MTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkUG9zdFdpdGhRdWVyeVBhcmFtL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFBvc3RXaXRoUXVlcnlQYXJhbS9XZWJUZXN0LmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKICAqIGZvcm0taGludC1maWVsZCBpZiBmb3JtIGFjdGlvbiBjb250YWlucyBxdWVyeSBwYXJhbWV0ZXJzLgogICovCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdAogICAgICAgICA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FCkBAIC00OSw4ICs0OSw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJ1bigpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKQEAgLTY2LDEwICs2NiwxMCBAQAogICAgICAgICAvLyBDb25zdHJ1Y3QgYm9keQogICAgICAgICBTdHJpbmcgYm9keSA9IFVSTEVuY29kZXIuZW5jb2RlKCJqX2VuY29kaW5nIiwgIlVURi04IikKICAgICAgICAgICAgICsgIj0iICsgVVJMRW5jb2Rlci5lbmNvZGUoIlNoaWZ0X0pJUyIsICJVVEYtOCIpOwotICAgIAorCiAgICAgICAgIC8vIENyZWF0ZSBhIHNvY2tldCB0byB0aGUgaG9zdAogICAgICAgICBTb2NrZXQgc29ja2V0ID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKLSAgICAKKwogICAgICAgICAvLyBTZW5kIGhlYWRlcgogICAgICAgICBCdWZmZXJlZFdyaXRlciB3ciA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKAogICAgICAgICAgICAgc29ja2V0LmdldE91dHB1dFN0cmVhbSgpLCAiVVRGOCIpKTsKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgd3Iud3JpdGUoIkNvbnRlbnQtTGVuZ3RoOiAiICsgYm9keS5sZW5ndGgoKSArICJcclxuIik7CiAgICAgICAgIHdyLndyaXRlKCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxyXG4iKTsKICAgICAgICAgd3Iud3JpdGUoIlxyXG4iKTsKLSAgICAKKwogICAgICAgICAvLyBTZW5kIGJvZHkKICAgICAgICAgd3Iud3JpdGUoYm9keSk7CiAgICAgICAgIHdyLmZsdXNoKCk7CkBAIC0xMDEsNSArMTAxLDUgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfQogICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQb3N0V2l0aFF1ZXJ5UGFyYW0vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkUG9zdFdpdGhRdWVyeVBhcmFtL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTU5MGM3Zi4uZmNiOTVjYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQb3N0V2l0aFF1ZXJ5UGFyYW0vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFBvc3RXaXRoUXVlcnlQYXJhbS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWZvcm0taGludC1maWVsZC1wb3N0LXdpdGgtcXVlcnktcGFyYW0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkUG9zdFdpdGhRdWVyeVBhcmFtL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkUG9zdFdpdGhRdWVyeVBhcmFtL2J1aWxkLnhtbAppbmRleCA4NTQyZTkxLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFBvc3RXaXRoUXVlcnlQYXJhbS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQb3N0V2l0aFF1ZXJ5UGFyYW0vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNyArNDIsMTcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkUG9zdFdpdGhRdWVyeVBhcmFtUHJlY2VkZW5jZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFBvc3RXaXRoUXVlcnlQYXJhbVByZWNlZGVuY2UvV2ViVGVzdC5qYXZhCmluZGV4IDc4YmZlOTMuLjZiMWI3ZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkUG9zdFdpdGhRdWVyeVBhcmFtUHJlY2VkZW5jZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQb3N0V2l0aFF1ZXJ5UGFyYW1QcmVjZWRlbmNlL1dlYlRlc3QuamF2YQpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MzQ2NzM4Iik7CiAgICAgICAgIFdlYlRlc3QgdGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC03Niw3ICs3Niw3IEBACiAKICAgICAgICAgLy8gQ3JlYXRlIGEgc29ja2V0IHRvIHRoZSBob3N0CiAgICAgICAgIHNvY2tldCA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7Ci0gICAgCisKICAgICAgICAgLy8gU2VuZCBoZWFkZXIKICAgICAgICAgQnVmZmVyZWRXcml0ZXIgd3IgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IE91dHB1dFN0cmVhbVdyaXRlcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LmdldE91dHB1dFN0cmVhbSgpKSk7CkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgIHdyLndyaXRlKCJDb250ZW50LUxlbmd0aDogIiArIGJvZHkubGVuZ3RoKCkgKyAiXHJcbiIpOwogICAgICAgICB3ci53cml0ZSgiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcclxuIik7CiAgICAgICAgIHdyLndyaXRlKCJcclxuIik7Ci0gICAgCisKICAgICAgICAgLy8gU2VuZCBib2R5CiAgICAgICAgIHdyLndyaXRlKGJvZHkpOwogICAgICAgICB3ci5mbHVzaCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQb3N0V2l0aFF1ZXJ5UGFyYW1QcmVjZWRlbmNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFBvc3RXaXRoUXVlcnlQYXJhbVByZWNlZGVuY2UvYnVpbGQucHJvcGVydGllcwppbmRleCBmMDAwOTViLi41ZGY2NWM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFBvc3RXaXRoUXVlcnlQYXJhbVByZWNlZGVuY2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFBvc3RXaXRoUXVlcnlQYXJhbVByZWNlZGVuY2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1mb3JtLWhpbnQtZmllbGQtcG9zdC13aXRoLXF1ZXJ5LXBhcmFtLXByZWNlZGVuY2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkUG9zdFdpdGhRdWVyeVBhcmFtUHJlY2VkZW5jZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFBvc3RXaXRoUXVlcnlQYXJhbVByZWNlZGVuY2UvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkUG9zdFdpdGhRdWVyeVBhcmFtUHJlY2VkZW5jZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQb3N0V2l0aFF1ZXJ5UGFyYW1QcmVjZWRlbmNlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkUHJlY2VkZW5jZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFByZWNlZGVuY2UvV2ViVGVzdC5qYXZhCmluZGV4IDAyNTIyMjMuLjYxOTVlNzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkUHJlY2VkZW5jZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQcmVjZWRlbmNlL1dlYlRlc3QuamF2YQpAQCAtMjQsOCArMjQsOCBAQAogICogPGxvY2FsZS1jaGFyc2V0LWluZm8+LCB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkLgogICoKICAqIEluIGl0cyBzdW4td2ViLnhtbCwgdGhpcyB3ZWIgbW9kdWxlIHNwZWNpZmllcyB0d28gcGFyYW1ldGVyLWVuY29kaW5nCi0gKiBlbGVtZW50cywgZWFjaCB3aXRoIGEgZm9ybS1oaW50LWZpZWxkIGF0dHJpYnV0ZTogdGhlIHZhbHVlIG9mIHRoZSAKLSAqIGZvcm0taGludC1maWVsZCBhdHRyaWJ1dGUgb2YgdGhlIDxwYXJhbWV0ZXItZW5jb2Rpbmc+IHN1YmVsZW1lbnQgb2YgCisgKiBlbGVtZW50cywgZWFjaCB3aXRoIGEgZm9ybS1oaW50LWZpZWxkIGF0dHJpYnV0ZTogdGhlIHZhbHVlIG9mIHRoZQorICogZm9ybS1oaW50LWZpZWxkIGF0dHJpYnV0ZSBvZiB0aGUgPHBhcmFtZXRlci1lbmNvZGluZz4gc3ViZWxlbWVudCBvZgogICogPHN1bi13ZWItYXBwPiBpcyAnc3VuV2ViQXBwRnJvbUhpbnRGaWVsZCcsIHdoZXJlYXMgdGhlIHZhbHVlIG9mIHRoZQogICogZm9ybS1oaW50LWZpZWxkIGF0dHJpYnV0ZSBvZiB0aGUgPHBhcmFtZXRlci1lbmNvZGluZz4gc3ViZWxlbWVudCBvZgogICogPGxvY2FsZS1jaGFyc2V0LWluZm8+IGlzICdsb2NhbGVDaGFyc2V0SW5mb0Zvcm1IaW50RmllbGQnLgpAQCAtNjksNyArNjksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbihURVNUX05BTUUpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTc3LDggKzc3LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlSnNwKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQcmVjZWRlbmNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFByZWNlZGVuY2UvYnVpbGQucHJvcGVydGllcwppbmRleCA0M2ExNDFmLi4xYTg5NWM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFByZWNlZGVuY2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFByZWNlZGVuY2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWZvcm0taGludC1maWVsZC1wcmVjZWRlbmNlIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1mb3JtLWhpbnQtZmllbGQtcHJlY2VkZW5jZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFByZWNlZGVuY2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQcmVjZWRlbmNlL2J1aWxkLnhtbAppbmRleCA4NTQyZTkxLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFByZWNlZGVuY2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkUHJlY2VkZW5jZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE3ICs0MiwxNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkFjY2Vzc1Nlc3Npb25PblJlc3VtZWRSZXF1ZXN0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5BY2Nlc3NTZXNzaW9uT25SZXN1bWVkUmVxdWVzdC9XZWJUZXN0LmphdmEKaW5kZXggY2NjMTllYi4uOTc4MWQ5NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkFjY2Vzc1Nlc3Npb25PblJlc3VtZWRSZXF1ZXN0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luQWNjZXNzU2Vzc2lvbk9uUmVzdW1lZFJlcXVlc3QvV2ViVGVzdC5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiAKIC8qCiAgKiBVbml0IHRlc3QgZm9yIGh0dHA6Ly9mb3J1bXMuamF2YS5uZXQvaml2ZS90aHJlYWQuanNwYT9tZXNzYWdlSUQ9Mjk5ODk5Ci0gKiAKKyAqCiAgKiBNYWtlIHN1cmUgdGhhdCBzZXNzaW9uIGVzdGFibGlzaGVkIGJ5IEZvcm1BdXRoZW50aWNhdG9yIG1heSBiZSBhY2Nlc3NlZAogICogKHJlc3VtZWQpIGJ5IHByb3RlY3RlZCByZXNvdXJjZSAoaW4gdGhpcyBjYXNlLCBBY2Nlc3NTZXNzaW9uIHNlcnZsZXQpIGV2ZW4KICAqIGlmIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHRoYXQgY2F1c2VkIGEgKHJlKWxvZ2luIGNvbnRhaW5zIGEgY29va2llIHdpdGggYW4KQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgYWRtaW5Vc2VyID0gYXJnc1szXTsKICAgICAgICAgYWRtaW5QYXNzd29yZCA9IGFyZ3NbNF07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCB0aGF0IGFjY2Vzc2VzIHNlc3Npb24gZXN0YWJsaXNoZWQgYnkgIiArCkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHNlbmRDb29raWUpOwogICAgICAgICAgICAgb3Mud3JpdGUoc2VuZENvb2tpZS5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCJcclxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKQEAgLTEyMSw3ICsxMjEsNyBAQAogICAgICAgICAgICAgY2xvc2UoaXMpOwogICAgICAgICAgICAgY2xvc2UoYnIpOwogICAgICAgICB9Ci0gCisKICAgICAgICAgaWYgKGNvb2tpZSA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJNaXNzaW5nIFNldC1Db29raWUgcmVzcG9uc2UgaGVhZGVyIik7CiAgICAgICAgIH0KQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgICAgICAgICAgU3RyaW5nIGNvb2tpZSA9ICJDb29raWU6ICIgKyBqc2Vzc2lvbklkICsgIlxuIjsKICAgICAgICAgICAgIG9zLndyaXRlKGNvb2tpZS5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCJcclxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKQEAgLTE5OCw3ICsxOTgsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHNlbmRDb29raWUpOwogICAgICAgICAgICAgb3Mud3JpdGUoc2VuZENvb2tpZS5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCJcclxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5BY2Nlc3NTZXNzaW9uT25SZXN1bWVkUmVxdWVzdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkFjY2Vzc1Nlc3Npb25PblJlc3VtZWRSZXF1ZXN0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjEyYTE5YS4uYWEyMjE0YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkFjY2Vzc1Nlc3Npb25PblJlc3VtZWRSZXF1ZXN0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkFjY2Vzc1Nlc3Npb25PblJlc3VtZWRSZXF1ZXN0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZm9ybS1sb2dpbi1hY2Nlc3Mtc2Vzc2lvbi1vbi1yZXN1bWVkLXJlcXVlc3QiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5BY2Nlc3NTZXNzaW9uT25SZXN1bWVkUmVxdWVzdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luQWNjZXNzU2Vzc2lvbk9uUmVzdW1lZFJlcXVlc3QvYnVpbGQueG1sCmluZGV4IDQxN2Y4NDUuLjUzYmRiZjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5BY2Nlc3NTZXNzaW9uT25SZXN1bWVkUmVxdWVzdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkFjY2Vzc1Nlc3Npb25PblJlc3VtZWRSZXF1ZXN0L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNTAsMTAgKzUwLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC02MSwxNCArNjEsMTQgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0LmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODUsNyArODUsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luQWNjZXNzU2Vzc2lvbk9uUmVzdW1lZFJlcXVlc3QvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkFjY2Vzc1Nlc3Npb25PblJlc3VtZWRSZXF1ZXN0L2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA5OWZkMWQ3Li41ZDhiOTkxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luQWNjZXNzU2Vzc2lvbk9uUmVzdW1lZFJlcXVlc3QvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5BY2Nlc3NTZXNzaW9uT25SZXN1bWVkUmVxdWVzdC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTM1LDEyICszNSwxMiBAQAogCiAgIDxzZWN1cml0eS1jb25zdHJhaW50PgogICAgIDx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KLQk8d2ViLXJlc291cmNlLW5hbWU+UHJvdGVjdGVkIEFyZWE8L3dlYi1yZXNvdXJjZS1uYW1lPgotCTx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+Ci0JPGh0dHAtbWV0aG9kPkRFTEVURTwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPkdFVDwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPlBPU1Q8L2h0dHAtbWV0aG9kPgotCTxodHRwLW1ldGhvZD5QVVQ8L2h0dHAtbWV0aG9kPgorICAgIDx3ZWItcmVzb3VyY2UtbmFtZT5Qcm90ZWN0ZWQgQXJlYTwvd2ViLXJlc291cmNlLW5hbWU+CisgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KKyAgICA8aHR0cC1tZXRob2Q+REVMRVRFPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+UE9TVDwvaHR0cC1tZXRob2Q+CisgICAgPGh0dHAtbWV0aG9kPlBVVDwvaHR0cC1tZXRob2Q+CiAgICAgPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KIAogICAgIDxhdXRoLWNvbnN0cmFpbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luQWNjZXNzU2Vzc2lvbk9uUmVzdW1lZFJlcXVlc3Qvc2VydmxldC9BY2Nlc3NTZXNzaW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luQWNjZXNzU2Vzc2lvbk9uUmVzdW1lZFJlcXVlc3Qvc2VydmxldC9BY2Nlc3NTZXNzaW9uLmphdmEKaW5kZXggZTg3MWFhMS4uNTQwMTY1NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkFjY2Vzc1Nlc3Npb25PblJlc3VtZWRSZXF1ZXN0L3NlcnZsZXQvQWNjZXNzU2Vzc2lvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5BY2Nlc3NTZXNzaW9uT25SZXN1bWVkUmVxdWVzdC9zZXJ2bGV0L0FjY2Vzc1Nlc3Npb24uamF2YQpAQCAtMzIsNyArMzIsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgSHR0cFNlc3Npb24gc2Vzc2lvbiA9IHJlcS5nZXRTZXNzaW9uKGZhbHNlKTsKLQlpZiAoc2Vzc2lvbiA9PSBudWxsKSB7CisgICAgaWYgKHNlc3Npb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIlVuYWJsZSB0byBhY2Nlc3MgbG9naW4gc2Vzc2lvbiIpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luSlNlY3VyaXR5Q2hlY2tEaXJlY3RBY2Nlc3MvV2ViVGVzdC5qYXZhCmluZGV4IDgwZGIzNWIuLjg2OGU3YmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkpTZWN1cml0eUNoZWNrRGlyZWN0QWNjZXNzL1dlYlRlc3QuamF2YQpAQCAtNDgsNyArNDgsNyBAQAogICAgICAgICBhZG1pblVzZXIgPSBhcmdzWzNdOwogICAgICAgICBhZG1pblBhc3N3b3JkID0gYXJnc1s0XTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgMTkzMyIpOwpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC0xMjIsNyArMTIyLDcgQEAKICAgICAgICAgU3RyaW5nIGNvb2tpZSA9ICJDb29raWU6ICIgKyBqc2Vzc2lvbklkICsgIlxuIjsKICAgICAgICAgb3Mud3JpdGUoY29va2llLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkpTZWN1cml0eUNoZWNrRGlyZWN0QWNjZXNzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDY3M2E0Ny4uMWE2NTYyZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkpTZWN1cml0eUNoZWNrRGlyZWN0QWNjZXNzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkpTZWN1cml0eUNoZWNrRGlyZWN0QWNjZXNzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZm9ybS1sb2dpbi1qc2VjdXJpdHktY2hlY2stZGlyZWN0LWFjY2VzcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkpTZWN1cml0eUNoZWNrRGlyZWN0QWNjZXNzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9idWlsZC54bWwKaW5kZXggNDE3Zjg0NS4uNTNiZGJmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkpTZWN1cml0eUNoZWNrRGlyZWN0QWNjZXNzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luSlNlY3VyaXR5Q2hlY2tEaXJlY3RBY2Nlc3MvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01MCwxMCArNTAsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTYxLDE0ICs2MSwxNCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtcnQuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04NSw3ICs4NSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXVzZXItY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luSlNlY3VyaXR5Q2hlY2tEaXJlY3RBY2Nlc3MvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDE2MmU4NDMuLmJjNmRjMjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkpTZWN1cml0eUNoZWNrRGlyZWN0QWNjZXNzL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjUsMTIgKzI1LDEyIEBACiAKICAgPHNlY3VyaXR5LWNvbnN0cmFpbnQ+CiAgICAgPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgotCTx3ZWItcmVzb3VyY2UtbmFtZT5Qcm90ZWN0ZWQgQXJlYTwvd2ViLXJlc291cmNlLW5hbWU+Ci0JPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KLQk8aHR0cC1tZXRob2Q+REVMRVRFPC9odHRwLW1ldGhvZD4KLQk8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KLQk8aHR0cC1tZXRob2Q+UE9TVDwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPlBVVDwvaHR0cC1tZXRob2Q+CisgICAgPHdlYi1yZXNvdXJjZS1uYW1lPlByb3RlY3RlZCBBcmVhPC93ZWItcmVzb3VyY2UtbmFtZT4KKyAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgorICAgIDxodHRwLW1ldGhvZD5ERUxFVEU8L2h0dHAtbWV0aG9kPgorICAgIDxodHRwLW1ldGhvZD5HRVQ8L2h0dHAtbWV0aG9kPgorICAgIDxodHRwLW1ldGhvZD5QT1NUPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+UFVUPC9odHRwLW1ldGhvZD4KICAgICA8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgogCiAgICAgPGF1dGgtY29uc3RyYWludD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5UcmFuc3BvcnRHdWFyYW50ZWVDb25maWRlbnRpYWwvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpblRyYW5zcG9ydEd1YXJhbnRlZUNvbmZpZGVudGlhbC9XZWJUZXN0LmphdmEKaW5kZXggNGIxZmQxMy4uYTQ1NjBmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpblRyYW5zcG9ydEd1YXJhbnRlZUNvbmZpZGVudGlhbC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpblRyYW5zcG9ydEd1YXJhbnRlZUNvbmZpZGVudGlhbC9XZWJUZXN0LmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKICAqCiAgKiBUaGlzIHVuaXQgdGVzdCBoYXMgYmVlbiByZXdvcmtlZCBpbiBsaWdodCBvZiB0aGUgZml4IGZvciBDUiA2NjMzMjU3OgogICogUmF0aGVyIHRoYW4gaXNzdWluZyBhIHJlZGlyZWN0IG92ZXIgaHR0cHMgdG8gdGhlIGxvZ2luLmpzcCBsb2dpbiBwYWdlCi0gKiAod2hpY2ggaXMgcHJvdGVjdGVkIGJ5IGEgdHJhbnNwb3J0LWd1YXJhbnRlZSBvZiBDT05GSURFTlRJQUwpLCB0aGUgCisgKiAod2hpY2ggaXMgcHJvdGVjdGVkIGJ5IGEgdHJhbnNwb3J0LWd1YXJhbnRlZSBvZiBDT05GSURFTlRJQUwpLCB0aGUKICAqIHJlZGlyZWN0IG92ZXIgaHR0cHMgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBvcmlnaW5hbCByZXF1ZXN0ICh0aGF0IGlzLAogICogdG8gcHJvdGVjdGVkLmpzcCksIGZvbGxvd2VkIGJ5IGEgRk9SV0FSRCBkaXNwYXRjaCB0byBsb2dpbi5qc3AuCiAgKgpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICBodHRwc1BvcnQgPSBhcmdzWzJdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbM107CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDMzNzQiKTsKQEAgLTgwLDExICs4MCwxMSBAQAogICAgICAgICB9CiAgICAgICAgIFN0cmluZyByZWRpcmVjdExvY2F0aW9uID0gY29ubi5nZXRIZWFkZXJGaWVsZCgiTG9jYXRpb24iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb2NhdGlvbjogIiArIHJlZGlyZWN0TG9jYXRpb24pOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgZXhwZWN0ZWRSZWRpcmVjdExvY2F0aW9uID0gImh0dHBzOi8vIiArIGhvc3QgKyAiOiIgKyBodHRwc1BvcnQKICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL3Byb3RlY3RlZC5qc3AiOwogICAgICAgICBpZiAoIWV4cGVjdGVkUmVkaXJlY3RMb2NhdGlvbi5lcXVhbHMocmVkaXJlY3RMb2NhdGlvbikpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlVuZXhwZWN0ZWQgcmVkaXJlY3QgbG9jYXRpb24iKTsKLSAgICAgICAgfSAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpblRyYW5zcG9ydEd1YXJhbnRlZUNvbmZpZGVudGlhbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpblRyYW5zcG9ydEd1YXJhbnRlZUNvbmZpZGVudGlhbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQxOTc1MzUuLmIzMTQ5YjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5UcmFuc3BvcnRHdWFyYW50ZWVDb25maWRlbnRpYWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luVHJhbnNwb3J0R3VhcmFudGVlQ29uZmlkZW50aWFsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZm9ybS1sb2dpbi10cmFuc3BvcnQtZ3VhcmFudGVlLWNvbmZpZGVudGlhbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpblRyYW5zcG9ydEd1YXJhbnRlZUNvbmZpZGVudGlhbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luVHJhbnNwb3J0R3VhcmFudGVlQ29uZmlkZW50aWFsL2J1aWxkLnhtbAppbmRleCA3NWQ3OGZmLi5kYTM4OTU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luVHJhbnNwb3J0R3VhcmFudGVlQ29uZmlkZW50aWFsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luVHJhbnNwb3J0R3VhcmFudGVlQ29uZmlkZW50aWFsL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjMgKzQ0LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGphdmFjIHNyY2Rpcj0iLiIKICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvYXBwc2Vydi1ydC5qYXIiCiAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsNyArNzYsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9yd2FyZFdpdGhRdWVyeVN0cmluZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9yd2FyZFdpdGhRdWVyeVN0cmluZy9XZWJUZXN0LmphdmEKaW5kZXggYTBiZTg2Mi4uNzM4ZWI0OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZvcndhcmRXaXRoUXVlcnlTdHJpbmcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nL1dlYlRlc3QuamF2YQpAQCAtMjEsMTAgKzIxLDEwIEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDE7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApAQCAtMzIsNyArMzIsNyBAQAogCiAgICAgICAgIC8vIFRoZSBzdGF0IHJlcG9ydGVyIHdyaXRlcyBvdXQgdGhlIHRlc3QgaW5mbyBhbmQgcmVzdWx0cwogICAgICAgICAvLyBpbnRvIHRoZSB0b3AtbGV2ZWwgcXVpY2tsb29rIGRpcmVjdG9yeSBkdXJpbmcgYSBydW4uCi0gICAgICAKKwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJGb3J3YXJkIFdpdGggUXVlcnkgU3RyaW5nIik7CiAKICAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwpAQCAtNDEsNyArNDEsNyBAQAogCiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7CiAgICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZ29HZXQoaG9zdCwgcG9ydCwgIkZJTFRFUiIsIGNvbnRleHRSb290ICsgIi9TZXJ2bGV0VGVzdD9xdWVyeVN0cmluZz10ZXN0IiApOwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewpAQCAtNTAsNyArNTAsNyBAQAogCiAgICAgICAgIGlmIChjb3VudCAhPSBFWFBFQ1RFRF9DT1VOVCl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZm9yd2FyZFdpdGhRdWVyeVN0cmluZyIsIHN0YXQuRkFJTCk7Ci0gICAgICAgIH0gICAgICAgICAgIAorICAgICAgICB9CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWIvZm9yd2FyZFdpdGhRdWVyeVN0cmluZy0tLT4gZXhwZWN0ICIgKyBFWFBFQ1RFRF9DT1VOVCk7CiAgICAgfQogCkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKSk7CiAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjBcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHMuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaW1lOiAiICsgKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gdGltZSkpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CkBAIC04MCwxOCArODAsMTggQEAKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBsaW5lLmluZGV4T2YoIjoiKTsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0YXR1cyA9IGxpbmUuc3Vic3RyaW5nKGluZGV4KzEpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmVxdWFsc0lnbm9yZUNhc2UoIlBBU1MiKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLWZvcndhcmRXaXRoUXVlcnlTdHJpbmc6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItZm9yd2FyZFdpdGhRdWVyeVN0cmluZzogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LkZBSUwpOyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLWZvcndhcmRXaXRoUXVlcnlTdHJpbmc6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZvcndhcmRXaXRoUXVlcnlTdHJpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjQ3MGVlNS4uOWJhZmIxNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZvcndhcmRXaXRoUXVlcnlTdHJpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9yd2FyZFdpdGhRdWVyeVN0cmluZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZm9yd2FyZFdpdGhRdWVyeVN0cmluZyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZm9yd2FyZFdpdGhRdWVyeVN0cmluZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItZm9yd2FyZFdpdGhRdWVyeVN0cmluZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZvcndhcmRXaXRoUXVlcnlTdHJpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZvcndhcmRXaXRoUXVlcnlTdHJpbmcvYnVpbGQueG1sCmluZGV4IDc0MzQ3MGQuLmE5MzdkN2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9yd2FyZFdpdGhRdWVyeVN0cmluZy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE1ICs0MiwxNSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02MCw3ICs2MCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgICA8amF2YWMKICAgICAgICAgICAgIHNyY2Rpcj0iLiIKQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBmOTg2MWRmLi4xZjg0Y2VlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9yd2FyZFdpdGhRdWVyeVN0cmluZy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZvcndhcmRXaXRoUXVlcnlTdHJpbmcvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwzNyArMjIsMzcgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxmaWx0ZXI+CiAgICAgICAgIDxmaWx0ZXItbmFtZT5GaWx0ZXJUZXN0PC9maWx0ZXItbmFtZT4KICAgICAgICAgPGZpbHRlci1jbGFzcz50ZXN0LkZpbHRlclRlc3Q8L2ZpbHRlci1jbGFzcz4KLSAgICA8L2ZpbHRlcj4gICAgCi0gICAgICAgIAorICAgIDwvZmlsdGVyPgorCiAgICAgPGZpbHRlci1tYXBwaW5nPgogICAgICAgICA8ZmlsdGVyLW5hbWU+RmlsdGVyVGVzdDwvZmlsdGVyLW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+CiAgICAgICAgIDxkaXNwYXRjaGVyPlJFUVVFU1Q8L2Rpc3BhdGNoZXI+CiAgICAgICAgIDxkaXNwYXRjaGVyPklOQ0xVREU8L2Rpc3BhdGNoZXI+Ci0gICAgICAgIDxkaXNwYXRjaGVyPkZPUldBUkQ8L2Rpc3BhdGNoZXI+ICAKLSAgICAgICAgPGRpc3BhdGNoZXI+RVJST1I8L2Rpc3BhdGNoZXI+IAorICAgICAgICA8ZGlzcGF0Y2hlcj5GT1JXQVJEPC9kaXNwYXRjaGVyPgorICAgICAgICA8ZGlzcGF0Y2hlcj5FUlJPUjwvZGlzcGF0Y2hlcj4KICAgICA8L2ZpbHRlci1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDI8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDI8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDI8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0MzwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mzwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0Mzwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QzPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3QzPC91cmwtcGF0dGVybj4KICAgICA8L3NlcnZsZXQtbWFwcGluZz4KLSAgICAKKwogICAgIDxzZXNzaW9uLWNvbmZpZz4KICAgICAgICAgPHNlc3Npb24tdGltZW91dD4xMDwvc2Vzc2lvbi10aW1lb3V0PgogICAgIDwvc2Vzc2lvbi1jb25maWc+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9yd2FyZFdpdGhRdWVyeVN0cmluZy9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhCmluZGV4IGQ0MzcxZjYuLjE0N2U4YWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhCkBAIC0xOSwxOCArMTksMTggQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogcHVibGljIGNsYXNzIEZpbHRlclRlc3QgaW1wbGVtZW50cyBGaWx0ZXJ7Ci0gICAgCisKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewotICAgIH0gICAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBGaWx0ZXJDaGFpbiBmaWx0ZXJDaGFpbikgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgZmlsdGVyQ2hhaW4uZG9GaWx0ZXIocmVxdWVzdCwgcmVzcG9uc2UpOwotICAgIH0gICAgCi0gICAgCi0gICAgCisgICAgfQorCisKICAgICBwdWJsaWMgdm9pZCBpbml0KGpha2FydGEuc2VydmxldC5GaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZvcndhcmRXaXRoUXVlcnlTdHJpbmcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZvcndhcmRXaXRoUXVlcnlTdHJpbmcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDRjZDkzM2UuLjk5NTY3MWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9yd2FyZFdpdGhRdWVyeVN0cmluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CkBAIC0zOCwxMiArMzgsMTIgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciByZCA9IGNvbnRleHQuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9TZXJ2bGV0VGVzdDIiKTsKLSAgICAgICAgcmQuZm9yd2FyZChyZXF1ZXN0LCByZXNwb25zZSk7ICAgICAgIAorICAgICAgICByZC5mb3J3YXJkKHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9yd2FyZFdpdGhRdWVyeVN0cmluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCmluZGV4IDBhNTFhZTIuLmQzMzA0OTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZvcndhcmRXaXRoUXVlcnlTdHJpbmcvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0MiBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CkBAIC0zNSwxMyArMzUsMTMgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKLSAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciByZCA9IHJlcXVlc3QuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9TZXJ2bGV0VGVzdDMiKTsKLSAgICAgICAgcmQuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7ICAgICAKKyAgICAgICAgcmQuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9yd2FyZFdpdGhRdWVyeVN0cmluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZvcndhcmRXaXRoUXVlcnlTdHJpbmcvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YQppbmRleCAyNmQ1Y2E1Li41MDhkNjdhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9yd2FyZFdpdGhRdWVyeVN0cmluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEKQEAgLTI1LDIwICsyNSwyMCBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0MyBleHRlbmRzIEh0dHBTZXJ2bGV0ewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsgICAgIAorICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInF1ZXJ5U3RyaW5nOiAiICsgcmVxdWVzdC5nZXRRdWVyeVN0cmluZygpKTsKICAgICAgICAgb3V0LnByaW50bG4oIkZJTFRFUi1RVUVSWVNUUklORzoiICsKICAgICAgICAgICAgICAgICAocmVxdWVzdC5nZXRRdWVyeVN0cmluZygpICE9IG51bGwgPyAiUEFTUyIgOiAiRkFJTCIpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRBdHRyaWJ1dGVBZnRlckZvcndhcmQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldEF0dHJpYnV0ZUFmdGVyRm9yd2FyZC9XZWJUZXN0LmphdmEKaW5kZXggMmQwNDZhYS4uNzI2YTBmZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldEF0dHJpYnV0ZUFmdGVyRm9yd2FyZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldEF0dHJpYnV0ZUFmdGVyRm9yd2FyZC9XZWJUZXN0LmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAiZ2V0LWF0dHJpYnV0ZS1hZnRlci1mb3J3YXJkIjsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiR2V0IGF0dHJpYnV0ZSBhZnRlciBmb3J3YXJkIik7CiAKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB3ZWJUZXN0LmRvVGVzdCgKICAgICAgICAgICAgICAgICAiL2ZvcndhcmQuanNwP2ZvcndhcmQ9aW5jbHVkZS5qc3AmaW5jbHVkZT1wcm9jZXNzLmpzcCIgKTsKQEAgLTYzLDUgKzYzLDUgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9Ci0gICAgfSAgCisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldEF0dHJpYnV0ZUFmdGVyRm9yd2FyZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldEF0dHJpYnV0ZUFmdGVyRm9yd2FyZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDdmZGM5ZjkuLjEzYmFlYWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRBdHRyaWJ1dGVBZnRlckZvcndhcmQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0QXR0cmlidXRlQWZ0ZXJGb3J3YXJkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDExICsxNSwxMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1nZXQtYXR0cmlidXRlLWFmdGVyLWZvcndhcmQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRBdHRyaWJ1dGVBZnRlckZvcndhcmQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldEF0dHJpYnV0ZUFmdGVyRm9yd2FyZC9idWlsZC54bWwKaW5kZXggMWEwZmMzZS4uMjgyNzVhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldEF0dHJpYnV0ZUFmdGVyRm9yd2FyZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldEF0dHJpYnV0ZUFmdGVyRm9yd2FyZC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsOCArNTMsOCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRBdHRyaWJ1dGVBZnRlckluY2x1ZGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldEF0dHJpYnV0ZUFmdGVySW5jbHVkZS9XZWJUZXN0LmphdmEKaW5kZXggYmNmMTBiNy4uNDdhY2RlZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldEF0dHJpYnV0ZUFmdGVySW5jbHVkZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldEF0dHJpYnV0ZUFmdGVySW5jbHVkZS9XZWJUZXN0LmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAiZ2V0LWF0dHJpYnV0ZS1hZnRlci1pbmNsdWRlIjsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRBdHRyaWJ1dGVBZnRlckluY2x1ZGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRBdHRyaWJ1dGVBZnRlckluY2x1ZGUvYnVpbGQucHJvcGVydGllcwppbmRleCA4NmViYTIxLi5jMjA1NjBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0QXR0cmlidXRlQWZ0ZXJJbmNsdWRlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldEF0dHJpYnV0ZUFmdGVySW5jbHVkZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMSArMTUsMTEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZ2V0LWF0dHJpYnV0ZS1hZnRlci1pbmNsdWRlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0QXR0cmlidXRlQWZ0ZXJJbmNsdWRlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRBdHRyaWJ1dGVBZnRlckluY2x1ZGUvYnVpbGQueG1sCmluZGV4IDFhMGZjM2UuLjI4Mjc1YTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRBdHRyaWJ1dGVBZnRlckluY2x1ZGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRBdHRyaWJ1dGVBZnRlckluY2x1ZGUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDggKzUzLDggQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0TG9jYWxQb3J0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRMb2NhbFBvcnQvV2ViVGVzdC5qYXZhCmluZGV4IDYyNTM3MzMuLmRiZTVlODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRMb2NhbFBvcnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRMb2NhbFBvcnQvV2ViVGVzdC5qYXZhCkBAIC0yMiwxMCArMjIsMTAgQEAKIAogcHVibGljIGNsYXNzIFdlYlRlc3QKIHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMTsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC0zNCw3ICszNCw3IEBACiAKICAgICAgICAgLy8gVGhlIHN0YXQgcmVwb3J0ZXIgd3JpdGVzIG91dCB0aGUgdGVzdCBpbmZvIGFuZCByZXN1bHRzCiAgICAgICAgIC8vIGludG8gdGhlIHRvcC1sZXZlbCBxdWlja2xvb2sgZGlyZWN0b3J5IGR1cmluZyBhIHJ1bi4KLSAgICAgIAorCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRlc3QgZm9yIGdldExvY2FsTmFtZSgpIGdldExvY2FsUG9ydCBTZXJ2bGV0IDIuNCBuZXcgRmVhdHVyZXMiKTsKIAogCkBAIC00NCwxMyArNDQsMTMgQEAKIAogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwogICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsICJnZXRMb2NhbFBvcnQiLCBjb250ZXh0Um9vdCArICIvU2VydmxldFRlc3QiICk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGNvdW50ICE9IEVYUEVDVEVEX0NPVU5UKXsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWxQb3J0IGdldExvY2FsUG9ydCBVTlBSRURJQ1RFRC1GQUlMVVJFIiwgc3RhdC5GQUlMKTsKLSAgICAgICAgICAgIH0gICAgICAgICAgIAorICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHQuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbFBvcnQgZ2V0TG9jYWxQb3J0IFVOUFJFRElDVEVELUZBSUxVUkUiLCBzdGF0LkZBSUwpOwpAQCAtNzIsNyArNzIsNyBAQAogICAgICAgICBvcy53cml0ZSgoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4xXG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIkhvc3Q6IGxvY2FsaG9zdFxuIi5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZTogIiArIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHRpbWUpKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwpAQCAtODcsMTkgKzg3LDE5IEBACiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gbGluZS5pbmRleE9mKCI6Iik7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdGF0dXMgPSBsaW5lLnN1YnN0cmluZyhpbmRleCsxKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5lcXVhbHNJZ25vcmVDYXNlKFN0cmluZy52YWx1ZU9mKHBvcnQpKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLWxvY2FsUG9ydDogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1sb2NhbFBvcnQ6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5GQUlMKTsgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1sb2NhbFBvcnQ6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oImxvY2FsUG9ydCBnZXRMb2NhbFBvcnQgVU5QUkVESUNURUQtRkFJTFVSRSIpOwogICAgICAgICAgfQogICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldExvY2FsUG9ydC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldExvY2FsUG9ydC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDZjY2FkYWYuLmFjYzg5MzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRMb2NhbFBvcnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0TG9jYWxQb3J0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1sb2NhbE5hbWUiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWxvY2FsTmFtZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItbG9jYWxOYW1lIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0TG9jYWxQb3J0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRMb2NhbFBvcnQvYnVpbGQueG1sCmluZGV4IGVlYzNiZWMuLjVhMWYwYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRMb2NhbFBvcnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRMb2NhbFBvcnQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDEwICs1MywxMCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldExvY2FsUG9ydC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0TG9jYWxQb3J0L2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA2YmU0MDczLi4zZGNmZjdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0TG9jYWxQb3J0L2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0TG9jYWxQb3J0L2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjcsMTQgKzI3LDE0IEBACiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KICAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotICAgIAorCiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldExvY2FsUG9ydC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0TG9jYWxQb3J0L3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCA2ODI5NmM5Li43ZTUyZTYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0TG9jYWxQb3J0L3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0TG9jYWxQb3J0L3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMjMsMTMgKzIzLDEzIEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdICIgKyBjb250ZXh0LmdldE1ham9yVmVyc2lvbigpKTsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKQEAgLTM3LDEyICszNywxMiBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5kb1Bvc3RdIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIG91dC5wcmludGxuKCJnZXRMb2NhbFBvcnQ6IiArIHJlcXVlc3QuZ2V0TG9jYWxQb3J0KCkpOwogICAgICAgICBvdXQuZmx1c2goKTsKICAgICAgICAgb3V0LmNsb3NlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0UmVxdWVzdFVSSS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0UmVxdWVzdFVSSS9XZWJUZXN0LmphdmEKaW5kZXggZGExZTE4Yy4uYjc0ZTJiOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldFJlcXVlc3RVUkkvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRSZXF1ZXN0VVJJL1dlYlRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBCdWd0cmFxIDQ4OTQ2NTQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00OCw4ICs0OCw4IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAKLSAgICAgICAgdHJ5IHsgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZUpTUCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC02NSwxNCArNjUsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlSlNQKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvanNwL21haW4uanNwIiArICIgSFRUUC8xLjBcbiI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXQpOwogICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKQEAgLTkzLDcgKzkzLDcgQEAKICAgICAgICAgICAgIGludCBpID0gbGluZS5pbmRleE9mKCIvanNwL2ZpcnN0LmpzcCIpOwogICAgICAgICAgICAgbGluZSA9IGxpbmUuc3Vic3RyaW5nKGkpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOwotICAgICAgICAKKwogICAgICAgICAgICAgU29ja2V0IHNvY2syID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgICAgIG9zID0gc29jazIuZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBnZXQgPSAiR0VUICIrIGNvbnRleHRSb290ICsgbGluZSArICIgSFRUUC8xLjBcbiI7CkBAIC0xMDUsNyArMTA1LDcgQEAKIAogICAgICAgICAgICAgd2hpbGUgKChsaW5lID0gYmlzLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIGkgPSBsaW5lLmluZGV4T2YoImlQbGFuZXREaXJlY3RvcnlQcm89Iik7Ci0gICAgICAgICAgICAgICBpZiAoaSA+IDApIHsgCisgICAgICAgICAgICAgICBpZiAoaSA+IDApIHsKICAgICAgICAgICAgICAgICAgICBwYXJhbTEgPSBsaW5lLnN1YnN0cmluZyhpKTsKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZpcnN0IHBhcmFtIGlzICIgKyBwYXJhbTEpOwogICAgICAgICAgICAgICAgICAgIGlmICgobGluZSA9IGJpcy5yZWFkTGluZSgpKSAhPSBudWxsKSB7CkBAIC0xMTMsNyArMTEzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbTIgPSBsaW5lLnN1YnN0cmluZyhpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2Vjb25kIHBhcmFtIGlzICIgKyBwYXJhbTIpOwotICAgICAgICAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTI4LDcgKzEyOCw3IEBACiAgICAgICAgICAgICBmYWlsID0gZmFsc2U7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJQYXJhbWV0ZXJzIGVuY29kaW5nL2RlY29kaW5nIGlzIG5vdCBjb25zaXN0ZW50IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuRkFJTCk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5GQUlMKTsKICAgICAgICAgICAgZmFpbCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0UmVxdWVzdFVSSS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldFJlcXVlc3RVUkkvYnVpbGQucHJvcGVydGllcwppbmRleCAxMGVlY2NhLi45YmM0MjBlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0UmVxdWVzdFVSSS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRSZXF1ZXN0VVJJL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1nZXRSZXF1ZXN0VVJJIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1nZXRSZXF1ZXN0VVJJIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1nZXRSZXF1ZXN0VVJJIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0UmVxdWVzdFVSSS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0UmVxdWVzdFVSSS9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldFJlcXVlc3RVUkkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRSZXF1ZXN0VVJJL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRSZXF1ZXN0VVJJL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRSZXF1ZXN0VVJJL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAzYmNiY2NkLi44ZWQ5MzRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0UmVxdWVzdFVSSS9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldFJlcXVlc3RVUkkvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwxMyArMjIsMTMgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0U2VydmVyTmFtZUFuZFBvcnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldFNlcnZlck5hbWVBbmRQb3J0L1dlYlRlc3QuamF2YQppbmRleCBmMjI5MmI4Li43NDE1ZTlkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0U2VydmVyTmFtZUFuZFBvcnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRTZXJ2ZXJOYW1lQW5kUG9ydC9XZWJUZXN0LmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjAyMTExOSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUzLDggKzUzLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlU2VydmxldCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkLiIpOwpAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICBvcy53cml0ZSgoIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0IEhUVFAvMS4xXG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoKCJIb3N0OiAiICsgU0VSVkVSX05BTUUgKyAiOiIgKyBTRVJWRVJfUE9SVCArICJcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG51bGw7CiAgICAgICAgIHRyeSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0U2VydmVyTmFtZUFuZFBvcnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRTZXJ2ZXJOYW1lQW5kUG9ydC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI0ODI5YzEuLjkwNTE3YzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRTZXJ2ZXJOYW1lQW5kUG9ydC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRTZXJ2ZXJOYW1lQW5kUG9ydC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWdldC1zZXJ2ZXItbmFtZS1hbmQtcG9ydCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldFNlcnZlck5hbWVBbmRQb3J0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRTZXJ2ZXJOYW1lQW5kUG9ydC9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldFNlcnZlck5hbWVBbmRQb3J0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0U2VydmVyTmFtZUFuZFBvcnQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL1NGU0JEcml2ZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL1NGU0JEcml2ZXIvYnVpbGQueG1sCmluZGV4IGY1Nzk1NTkuLjc3ZDY5MGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9TRlNCRHJpdmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9oYS13ZWIvU0ZTQkRyaXZlci9idWlsZC54bWwKQEAgLTMwLDI3ICszMCwyNyBAQAogICAgIDxpbXBvcnQgZmlsZT0ibmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPCEtLQogCi0gICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUgCi0gICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQgCi0gICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6IAorICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlCisgICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQKKyAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZToKIAotICAgICAgLXByZS1pbml0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMgCi0gICAgICAtcG9zdC1pbml0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgLXByZS1jb21waWxlOiAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiAKLSAgICAgIC1wb3N0LWNvbXBpbGU6ICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiAKKyAgICAgIC1wcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzCisgICAgICAtcG9zdC1pbml0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzCisgICAgICAtcHJlLWNvbXBpbGU6ICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uCisgICAgICAtcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24KICAgICAgIC1wcmUtY29tcGlsZS1zaW5nbGU6ICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIGZpbGUKICAgICAgIC1wb3N0LWNvbXBpbGUtc2luZ2xlOiAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgZmlsZQogICAgICAgLXByZS1jb21waWxlLXRlc3Q6ICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBKVW5pdCB0ZXN0cwogICAgICAgLXBvc3QtY29tcGlsZS10ZXN0OiAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIEpVbml0IHRlc3RzCiAgICAgICAtcHJlLWNvbXBpbGUtdGVzdC1zaW5nbGU6ICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBKVW5pdCB0ZXN0CiAgICAgICAtcG9zdC1jb21waWxlLXRlc3Qtc2luZ2xlOiBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIEpVdW5pdCB0ZXN0Ci0gICAgICAtcHJlLWRpc3Q6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGFyY2hpdmUgYnVpbGRpbmcgCi0gICAgICAtcG9zdC1kaXN0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgYXJjaGl2ZSBidWlsZGluZyAKLSAgICAgIC1wb3N0LWNsZWFuOiAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBjbGVhbmluZyBidWlsZCBwcm9kdWN0cyAKKyAgICAgIC1wcmUtZGlzdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgYXJjaGl2ZSBidWlsZGluZworICAgICAgLXBvc3QtZGlzdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGFyY2hpdmUgYnVpbGRpbmcKKyAgICAgIC1wb3N0LWNsZWFuOiAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBjbGVhbmluZyBidWlsZCBwcm9kdWN0cwogICAgICAgLXByZS1ydW4tZGVwbG95OiAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBkZXBsb3lpbmcKICAgICAgIC1wb3N0LXJ1bi1kZXBsb3k6ICAgICAgICAgIGNhbGxlZCBhZnRlciBkZXBsb3lpbmcKIAotICAgIEV4YW1wbGUgb2YgcGx1Z2luZyBhbiBvYmZ1c2NhdG9yIGFmdGVyIHRoZSBjb21waWxhdGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0iLXBvc3QtY29tcGlsZSI+CiAgICAgICAgICAgICA8b2JmdXNjYXRlPgpAQCAtNTgsMjEgKzU4LDIxIEBACiAgICAgICAgICAgICA8L29iZnVzY2F0ZT4KICAgICAgICAgPC90YXJnZXQ+CiAKLSAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQgCi0gICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuIAorICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZAorICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLgogCiAKICAgICBPdGhlciB3YXkgaG93IHRvIGN1c3RvbWl6ZSB0aGUgYnVpbGQgaXMgYnkgb3ZlcnJpZGluZyBleGlzdGluZyBtYWluIHRhcmdldHMuCi0gICAgVGhlIHRhcmdldCBvZiBpbnRlcmVzdCBhcmU6IAorICAgIFRoZSB0YXJnZXQgb2YgaW50ZXJlc3QgYXJlOgogCiAgICAgICBpbml0LW1hY3JvZGVmLWphdmFjOiAgICBkZWZpbmVzIG1hY3JvIGZvciBqYXZhYyBjb21waWxhdGlvbgogICAgICAgaW5pdC1tYWNyb2RlZi1qdW5pdDogICBkZWZpbmVzIG1hY3JvIGZvciBqdW5pdCBleGVjdXRpb24KICAgICAgIGluaXQtbWFjcm9kZWYtZGVidWc6ICAgIGRlZmluZXMgbWFjcm8gZm9yIGNsYXNzIGRlYnVnZ2luZwogICAgICAgZG8tZGlzdDogICAgICAgICAgICAgICAgYXJjaGl2ZSBidWlsZGluZwotICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHByb2plY3QgCi0gICAgICBqYXZhZG9jLWJ1aWxkOiAgICAgICAgICBqYXZhZG9jIGdlbmVyYXRpb24gCisgICAgICBydW46ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdAorICAgICAgamF2YWRvYy1idWlsZDogICAgICAgICAgamF2YWRvYyBnZW5lcmF0aW9uCiAKLSAgICBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgdGhlIHRhcmdldCBmb3IgcHJvamVjdCBleGVjdXRpb24gY291bGQgbG9vayBsaWtlIAorICAgIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgdGFyZ2V0IGZvciBwcm9qZWN0IGV4ZWN1dGlvbiBjb3VsZCBsb29rIGxpa2UKIAogICAgICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iPFBST0pOQU1FPi1pbXBsLmphciI+CiAgICAgICAgICAgICA8ZXhlYyBkaXI9ImJpbiIgZXhlY3V0YWJsZT0ibGF1bmNoZXIuZXhlIj4KQEAgLTgwLDEwICs4MCwxMCBAQAogICAgICAgICAgICAgPC9leGVjPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIE5vdGljZSB0aGF0IG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gamFyIHRhcmdldCBhbmQgbm90IG9ubHkgb24gCi0gICAgY29tcGlsZSB0YXJnZXQgYXMgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgbGlzdCBvZiBhdmFpbGFibGUgCi0gICAgcHJvcGVydGllcyB3aGljaCB5b3UgY2FuIHVzZSBjaGVjayB0aGUgdGFyZ2V0IHlvdSBhcmUgb3ZlcnJpZGluZyBpbiAKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgTm90aWNlIHRoYXQgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbgorICAgIGNvbXBpbGUgdGFyZ2V0IGFzIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGxpc3Qgb2YgYXZhaWxhYmxlCisgICAgcHJvcGVydGllcyB3aGljaCB5b3UgY2FuIHVzZSBjaGVjayB0aGUgdGFyZ2V0IHlvdSBhcmUgb3ZlcnJpZGluZyBpbgorICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLgogCiAgICAgLS0+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9oYS13ZWIvU0ZTQkRyaXZlci9uYnByb2plY3QvYW50LWRlcGxveS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9oYS13ZWIvU0ZTQkRyaXZlci9uYnByb2plY3QvYW50LWRlcGxveS54bWwKaW5kZXggZjdiNTUxMi4uMGQ0YmZhMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL1NGU0JEcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9TRlNCRHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbApAQCAtMjUsNyArMjUsNyBAQAogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJnZnYzIiBwcm9wZXJ0eT0iZ2Z2My5wYXNzd29yZC5maWxlIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPiAgPCEtLSBkbyBub3QgZm9yZ2V0IHRvIGRlbGV0ZSB0aGlzISAtLT4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQVNfQURNSU5fUEFTU1dPUkQ9JHtnZnYzLnBhc3N3b3JkfSIgZmlsZT0iJHtnZnYzLnBhc3N3b3JkLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9Ii1wYXJzZS1zdW4td2ViIiBkZXBlbmRzPSItaW5pdC1jbC1kZXBsb3ltZW50LWVudiIgaWY9InN1bi53ZWIucHJlc2VudCI+CiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9ImdmdjMiIHByb3BlcnR5PSJ0ZW1wLnN1bi53ZWIiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7ZGVwbG95LmFudC5kb2NiYXNlLmRpcn0vV0VCLUlORi9zdW4td2ViLnhtbCIgdG9maWxlPSIke3RlbXAuc3VuLndlYn0iLz4KQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxyZXBsYWNldmFsdWU+PCFbQ0RBVEFbLS0+IDxzdW4td2ViLWFwcF1dPjwvcmVwbGFjZXZhbHVlPgogICAgICAgICA8L3JlcGxhY2U+CiAgICAgICAgIDx4bWxwcm9wZXJ0eSBmaWxlPSIke3RlbXAuc3VuLndlYn0iIHZhbGlkYXRlPSJmYWxzZSI+Ci0gICAgICAgIDwveG1scHJvcGVydHk+ICAgIAorICAgICAgICA8L3htbHByb3BlcnR5PgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7dGVtcC5zdW4ud2VifSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95LmFudC5jbGllbnQudXJsIiB2YWx1ZT0iJHtnZnYzLnVybH0ke3N1bi13ZWItYXBwLmNvbnRleHQtcm9vdH0iLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveS5jb250ZXh0LnJvb3QuYXJndW1lbnQiIHZhbHVlPSImYW1wO2NvbnRleHRyb290PSR7c3VuLXdlYi1hcHAuY29udGV4dC1yb290fSIvPgpAQCAtNzEsNyArNzEsNyBAQAogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZnVsbC5kZXBsb3kuYW50LmFyY2hpdmUiIGxvY2F0aW9uPSIke2RlcGxveS5hbnQuYXJjaGl2ZX0iLz4KICAgICAgICAgPGdldCBzcmM9IiR7Z2Z2My5hZG1pbi51cmx9L19fYXNhZG1pbi9kZXBsb3k/cGF0aD0ke2Z1bGwuZGVwbG95LmFudC5hcmNoaXZlfSR7ZGVwbG95LmNvbnRleHQucm9vdC5hcmd1bWVudH0mYW1wO2ZvcmNlPXRydWUmYW1wO25hbWU9JHthbnQucHJvamVjdC5uYW1lfSIKICAgICAgICAgICAgIGRlc3Q9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+Ci0gICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4gICAgCisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9Ii1kZXBsb3ktd2l0aC1wdyIgaWY9ImdmdjMucGFzc3dvcmQiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHtkZXBsb3kuYW50LmFyY2hpdmV9Ii8+CkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9ImdmdjMiIHByb3BlcnR5PSJnZnYzLnJlc3VsdHMuZmlsZSIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4gIDwhLS0gZG8gbm90IGZvcmdldCB0byBkZWxldGUgdGhpcyEgLS0+CiAgICAgICAgIDxnZXQgc3JjPSIke2dmdjMuYWRtaW4udXJsfS9fX2FzYWRtaW4vdW5kZXBsb3k/bmFtZT0ke2FudC5wcm9qZWN0Lm5hbWV9IgogICAgICAgICAgICAgZGVzdD0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KLSAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPiAgICAKKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iLXVuZGVwbG95LXdpdGgtcHciIGlmPSJnZnYzLnBhc3N3b3JkIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVW5kZXBsb3lpbmcgJHtkZXBsb3kuYW50LmFyY2hpdmV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9oYS13ZWIvU0ZTQkRyaXZlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9oYS13ZWIvU0ZTQkRyaXZlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKaW5kZXggMTNiMTgwMy4uMzkwNDllYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL1NGU0JEcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9TRlNCRHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbApAQCAtNDc3LDkgKzQ3Nyw5IEBACiAgICAgPHRhcmdldCBuYW1lPSItaW5pdC10YXNrZGVmcyI+CiAgICAgICAgIDxmYWlsIHVubGVzcz0ibGlicy5Db3B5TGlicy5jbGFzc3BhdGgiPgogVGhlIGxpYnMuQ29weUxpYnMuY2xhc3NwYXRoIHByb3BlcnR5IGlzIG5vdCBzZXQgdXAuCi1UaGlzIHByb3BlcnR5IG11c3QgcG9pbnQgdG8gCitUaGlzIHByb3BlcnR5IG11c3QgcG9pbnQgdG8KIG9yZy1uZXRiZWFucy1tb2R1bGVzLWphdmEtajJzZXByb2plY3QtY29weWxpYnN0YXNrLmphciBmaWxlIHdoaWNoIGlzIHBhcnQKLW9mIE5ldEJlYW5zIElERSBpbnN0YWxsYXRpb24gYW5kIGlzIHVzdWFsbHkgbG9jYXRlZCBhdCAKK29mIE5ldEJlYW5zIElERSBpbnN0YWxsYXRpb24gYW5kIGlzIHVzdWFsbHkgbG9jYXRlZCBhdAogJmx0O25ldGJlYW5zX2luc3RhbGxhdGlvbiZndDsvamF2YSZsdDt2ZXJzaW9uJmd0Oy9hbnQvZXh0cmEgZm9sZGVyLgogRWl0aGVyIG9wZW4gdGhlIHByb2plY3QgaW4gdGhlIElERSBhbmQgbWFrZSBzdXJlIENvcHlMaWJzIGxpYnJhcnkKIGV4aXN0cyBvciBzZXR1cCB0aGUgcHJvcGVydHkgbWFudWFsbHkuIEZvciBleGFtcGxlIGxpa2UgdGhpczoKQEAgLTg1NSw3ICs4NTUsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxqYXZhZG9jLWJ1aWxkLGphdmFkb2MtYnJvd3NlIiBkZXNjcmlwdGlvbj0iQnVpbGQgSmF2YWRvYy4iIG5hbWU9ImphdmFkb2MiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBDT01QSUxBVElPTiBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZSIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1wcmUtcHJlLWNvbXBpbGUtdGVzdCI+CkBAIC04OTQsNyArODk0LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZSwtcHJlLXByZS1jb21waWxlLXRlc3QsLXByZS1jb21waWxlLXRlc3Qtc2luZ2xlLC1kby1jb21waWxlLXRlc3Qtc2luZ2xlLC1wb3N0LWNvbXBpbGUtdGVzdC1zaW5nbGUiIG5hbWU9ImNvbXBpbGUtdGVzdC1zaW5nbGUiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBFWEVDVVRJT04gU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0IiBpZj0iaGF2ZS50ZXN0cyIgbmFtZT0iLXByZS10ZXN0LXJ1biI+CkBAIC05MjEsNyArOTIxLDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZS10ZXN0LXNpbmdsZSwtcHJlLXRlc3QtcnVuLXNpbmdsZSwtZG8tdGVzdC1ydW4tc2luZ2xlLC1wb3N0LXRlc3QtcnVuLXNpbmdsZSIgZGVzY3JpcHRpb249IlJ1biBzaW5nbGUgdW5pdCB0ZXN0LiIgbmFtZT0idGVzdC1zaW5nbGUiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBERUJVR0dJTkcgU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUtdGVzdCIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1kZWJ1Zy1zdGFydC1kZWJ1Z2dlZS10ZXN0Ij4KQEAgLTk0Nyw3ICs5NDcsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCwtcHJlLWRlYnVnLWZpeCwtZG8tZGVidWctZml4LXRlc3QiIGlmPSJuZXRiZWFucy5ob21lIiBuYW1lPSJkZWJ1Zy1maXgtdGVzdCIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIENMRUFOVVAgU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0IiBpZj0ibm8uZGlzdC5lYXIuZGlyIiBuYW1lPSJkZXBzLWNsZWFuIiB1bmxlc3M9Im5vLmRlcHMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9TRlNCRHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL1NGU0JEcml2ZXIvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NGU0JEcml2ZXJTZXJ2bGV0LmphdmEKaW5kZXggMDNhZWI0Ni4uOTJkMGYyZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL1NGU0JEcml2ZXIvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NGU0JEcml2ZXJTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL1NGU0JEcml2ZXIvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NGU0JEcml2ZXJTZXJ2bGV0LmphdmEKQEAgLTMyLDggKzMyLDggQEAKIAogcHVibGljIGNsYXNzIFNGU0JEcml2ZXJTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCi0gICAKLSAgICAvKiogCisKKyAgICAvKioKICAgICAgKiBQcm9jZXNzZXMgcmVxdWVzdHMgZm9yIGJvdGggSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IGFuZCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2RzLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlNlcnZsZXQgU0ZTQkRyaXZlclNlcnZsZXQ8L3RpdGxlPiIpOyAgCisgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlNlcnZsZXQgU0ZTQkRyaXZlclNlcnZsZXQ8L3RpdGxlPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+U2VydmxldCBTRlNCRHJpdmVyU2VydmxldCBhdCAiICsgcmVxdWVzdC5nZXRDb250ZXh0UGF0aCAoKSArICI8L2gxPiIpOwpAQCAtNjMsMTMgKzYzLDEzIEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9odG1sPiIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gbm1FeCkgewogICAgICAgICAgICAgbm1FeC5wcmludFN0YWNrVHJhY2Uob3V0KTsKLSAgICAgICAgfSBmaW5hbGx5IHsgCisgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKICAgICAgICAgfQotICAgIH0gCisgICAgfQogCiAgICAgLy8gPGVkaXRvci1mb2xkIGRlZmF1bHRzdGF0ZT0iY29sbGFwc2VkIiBkZXNjPSJIdHRwU2VydmxldCBtZXRob2RzLiBDbGljayBvbiB0aGUgKyBzaWduIG9uIHRoZSBsZWZ0IHRvIGVkaXQgdGhlIGNvZGUuIj4KLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtODAsOSArODAsOSBAQAogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICB9IAorICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtOTUsNyArOTUsNyBAQAogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIFJldHVybnMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgc2VydmxldC4KICAgICAgKiBAcmV0dXJuIGEgU3RyaW5nIGNvbnRhaW5pbmcgc2VydmxldCBkZXNjcmlwdGlvbgogICAgICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9oYS13ZWIvYnVpbGQucHJvcGVydGllcwppbmRleCA3YThmMTA0Li4zMjcxYzI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9oYS13ZWIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9oYS13ZWIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1oYS13ZWIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9oYS13ZWIvYnVpbGQueG1sCmluZGV4IDUzYzc2MTIuLjM4YTU3YzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTYgKzQyLDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb3B5UmVzb3VyY2VzIi8+CkBAIC03MiwxMSArNzIsMTEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODgsMTAgKzg4LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlbW92ZVJlc291cmNlcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhCmluZGV4IDhiMTVmMzcuLmE2ZTFhNzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9oYS13ZWIvc3JjL21haW4vamF2YS9jb20vYWNtZS9IdHRwQ2xpZW50LmphdmEKQEAgLTExNiw3ICsxMTYsNyBAQAogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWxlZCAiICsgaW5mbyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTEzNCw3ICsxMzQsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKHRtcFNlc3NTdGF0ZS5nZXRKc2Vzc2lvbkNvb2tpZSgpID09IG51bGwpIHsKLSAgICAgICAgICAgIHRtcFNlc3NTdGF0ZS5zZXRKc2Vzc2lvbkNvb2tpZShjb29raWUpOyAgICAKKyAgICAgICAgICAgIHRtcFNlc3NTdGF0ZS5zZXRKc2Vzc2lvbkNvb2tpZShjb29raWUpOwogICAgICAgICB9CiAgICAgICAgIGludCBjb2RlID0gKChIdHRwVVJMQ29ubmVjdGlvbikgdWMpLmdldFJlc3BvbnNlQ29kZSgpOwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHVjLmdldElucHV0U3RyZWFtKCk7CkBAIC0xNjksNyArMTY5LDcgQEAKICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBwcmV2LmdldEpzZXNzaW9uQ29va2llKCkuZXF1YWxzKGN1cnJlbnQuZ2V0SnNlc3Npb25Db29raWUoKSk7CiAKICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBwcmV2LmdldEh0dHBDb3VudGVyKCkgPCBjdXJyZW50LmdldEh0dHBDb3VudGVyKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhCmluZGV4IGM0YjYwOGIuLjBjZjcyNTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9oYS13ZWIvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIC8qKgogICogVW5pdCB0ZXN0IGZvciBzaW1wbGUgQXBwLgogICovCi1wdWJsaWMgY2xhc3MgQXBwVGVzdCAKK3B1YmxpYyBjbGFzcyBBcHBUZXN0CiAgICAgZXh0ZW5kcyBUZXN0Q2FzZQogewogICAgIC8qKgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLWF0dHJpYnV0ZS9TRlNCTW9kaWZpZWRBdHRyaWJ1dGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLWF0dHJpYnV0ZS9TRlNCTW9kaWZpZWRBdHRyaWJ1dGUvYnVpbGQueG1sCmluZGV4IGM1MWEyYjkuLjlhODljMDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1hdHRyaWJ1dGUvU0ZTQk1vZGlmaWVkQXR0cmlidXRlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtYXR0cmlidXRlL1NGU0JNb2RpZmllZEF0dHJpYnV0ZS9idWlsZC54bWwKQEAgLTMwLDI3ICszMCwyNyBAQAogICAgIDxpbXBvcnQgZmlsZT0ibmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPCEtLQogCi0gICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUgCi0gICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQgCi0gICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6IAorICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlCisgICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQKKyAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZToKIAotICAgICAgLXByZS1pbml0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMgCi0gICAgICAtcG9zdC1pbml0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgLXByZS1jb21waWxlOiAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiAKLSAgICAgIC1wb3N0LWNvbXBpbGU6ICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiAKKyAgICAgIC1wcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzCisgICAgICAtcG9zdC1pbml0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzCisgICAgICAtcHJlLWNvbXBpbGU6ICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uCisgICAgICAtcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24KICAgICAgIC1wcmUtY29tcGlsZS1zaW5nbGU6ICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIGZpbGUKICAgICAgIC1wb3N0LWNvbXBpbGUtc2luZ2xlOiAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgZmlsZQogICAgICAgLXByZS1jb21waWxlLXRlc3Q6ICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBKVW5pdCB0ZXN0cwogICAgICAgLXBvc3QtY29tcGlsZS10ZXN0OiAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIEpVbml0IHRlc3RzCiAgICAgICAtcHJlLWNvbXBpbGUtdGVzdC1zaW5nbGU6ICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBKVW5pdCB0ZXN0CiAgICAgICAtcG9zdC1jb21waWxlLXRlc3Qtc2luZ2xlOiBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIEpVdW5pdCB0ZXN0Ci0gICAgICAtcHJlLWRpc3Q6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGFyY2hpdmUgYnVpbGRpbmcgCi0gICAgICAtcG9zdC1kaXN0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgYXJjaGl2ZSBidWlsZGluZyAKLSAgICAgIC1wb3N0LWNsZWFuOiAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBjbGVhbmluZyBidWlsZCBwcm9kdWN0cyAKKyAgICAgIC1wcmUtZGlzdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgYXJjaGl2ZSBidWlsZGluZworICAgICAgLXBvc3QtZGlzdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGFyY2hpdmUgYnVpbGRpbmcKKyAgICAgIC1wb3N0LWNsZWFuOiAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBjbGVhbmluZyBidWlsZCBwcm9kdWN0cwogICAgICAgLXByZS1ydW4tZGVwbG95OiAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBkZXBsb3lpbmcKICAgICAgIC1wb3N0LXJ1bi1kZXBsb3k6ICAgICAgICAgIGNhbGxlZCBhZnRlciBkZXBsb3lpbmcKIAotICAgIEV4YW1wbGUgb2YgcGx1Z2luZyBhbiBvYmZ1c2NhdG9yIGFmdGVyIHRoZSBjb21waWxhdGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0iLXBvc3QtY29tcGlsZSI+CiAgICAgICAgICAgICA8b2JmdXNjYXRlPgpAQCAtNTgsMjEgKzU4LDIxIEBACiAgICAgICAgICAgICA8L29iZnVzY2F0ZT4KICAgICAgICAgPC90YXJnZXQ+CiAKLSAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQgCi0gICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuIAorICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZAorICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLgogCiAKICAgICBPdGhlciB3YXkgaG93IHRvIGN1c3RvbWl6ZSB0aGUgYnVpbGQgaXMgYnkgb3ZlcnJpZGluZyBleGlzdGluZyBtYWluIHRhcmdldHMuCi0gICAgVGhlIHRhcmdldCBvZiBpbnRlcmVzdCBhcmU6IAorICAgIFRoZSB0YXJnZXQgb2YgaW50ZXJlc3QgYXJlOgogCiAgICAgICBpbml0LW1hY3JvZGVmLWphdmFjOiAgICBkZWZpbmVzIG1hY3JvIGZvciBqYXZhYyBjb21waWxhdGlvbgogICAgICAgaW5pdC1tYWNyb2RlZi1qdW5pdDogICBkZWZpbmVzIG1hY3JvIGZvciBqdW5pdCBleGVjdXRpb24KICAgICAgIGluaXQtbWFjcm9kZWYtZGVidWc6ICAgIGRlZmluZXMgbWFjcm8gZm9yIGNsYXNzIGRlYnVnZ2luZwogICAgICAgZG8tZGlzdDogICAgICAgICAgICAgICAgYXJjaGl2ZSBidWlsZGluZwotICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHByb2plY3QgCi0gICAgICBqYXZhZG9jLWJ1aWxkOiAgICAgICAgICBqYXZhZG9jIGdlbmVyYXRpb24gCisgICAgICBydW46ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdAorICAgICAgamF2YWRvYy1idWlsZDogICAgICAgICAgamF2YWRvYyBnZW5lcmF0aW9uCiAKLSAgICBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgdGhlIHRhcmdldCBmb3IgcHJvamVjdCBleGVjdXRpb24gY291bGQgbG9vayBsaWtlIAorICAgIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgdGFyZ2V0IGZvciBwcm9qZWN0IGV4ZWN1dGlvbiBjb3VsZCBsb29rIGxpa2UKIAogICAgICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iPFBST0pOQU1FPi1pbXBsLmphciI+CiAgICAgICAgICAgICA8ZXhlYyBkaXI9ImJpbiIgZXhlY3V0YWJsZT0ibGF1bmNoZXIuZXhlIj4KQEAgLTgwLDEwICs4MCwxMCBAQAogICAgICAgICAgICAgPC9leGVjPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIE5vdGljZSB0aGF0IG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gamFyIHRhcmdldCBhbmQgbm90IG9ubHkgb24gCi0gICAgY29tcGlsZSB0YXJnZXQgYXMgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgbGlzdCBvZiBhdmFpbGFibGUgCi0gICAgcHJvcGVydGllcyB3aGljaCB5b3UgY2FuIHVzZSBjaGVjayB0aGUgdGFyZ2V0IHlvdSBhcmUgb3ZlcnJpZGluZyBpbiAKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgTm90aWNlIHRoYXQgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbgorICAgIGNvbXBpbGUgdGFyZ2V0IGFzIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGxpc3Qgb2YgYXZhaWxhYmxlCisgICAgcHJvcGVydGllcyB3aGljaCB5b3UgY2FuIHVzZSBjaGVjayB0aGUgdGFyZ2V0IHlvdSBhcmUgb3ZlcnJpZGluZyBpbgorICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLgogCiAgICAgLS0+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtYXR0cmlidXRlL1NGU0JNb2RpZmllZEF0dHJpYnV0ZS9uYnByb2plY3QvYW50LWRlcGxveS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtYXR0cmlidXRlL1NGU0JNb2RpZmllZEF0dHJpYnV0ZS9uYnByb2plY3QvYW50LWRlcGxveS54bWwKaW5kZXggM2Q5M2UxMC4uYzM3ZDg2MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLWF0dHJpYnV0ZS9TRlNCTW9kaWZpZWRBdHRyaWJ1dGUvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1hdHRyaWJ1dGUvU0ZTQk1vZGlmaWVkQXR0cmlidXRlL25icHJvamVjdC9hbnQtZGVwbG95LnhtbApAQCAtMjUsNyArMjUsNyBAQAogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJnZnYzIiBwcm9wZXJ0eT0iZ2Z2My5wYXNzd29yZC5maWxlIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPiAgPCEtLSBkbyBub3QgZm9yZ2V0IHRvIGRlbGV0ZSB0aGlzISAtLT4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQVNfQURNSU5fUEFTU1dPUkQ9JHtnZnYzLnBhc3N3b3JkfSIgZmlsZT0iJHtnZnYzLnBhc3N3b3JkLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9Ii1wYXJzZS1zdW4td2ViIiBkZXBlbmRzPSItaW5pdC1jbC1kZXBsb3ltZW50LWVudiIgaWY9InN1bi53ZWIucHJlc2VudCI+CiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9ImdmdjMiIHByb3BlcnR5PSJ0ZW1wLnN1bi53ZWIiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7ZGVwbG95LmFudC5kb2NiYXNlLmRpcn0vV0VCLUlORi9zdW4td2ViLnhtbCIgdG9maWxlPSIke3RlbXAuc3VuLndlYn0iLz4KQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxyZXBsYWNldmFsdWU+PCFbQ0RBVEFbLS0+IDxzdW4td2ViLWFwcF1dPjwvcmVwbGFjZXZhbHVlPgogICAgICAgICA8L3JlcGxhY2U+CiAgICAgICAgIDx4bWxwcm9wZXJ0eSBmaWxlPSIke3RlbXAuc3VuLndlYn0iIHZhbGlkYXRlPSJmYWxzZSI+Ci0gICAgICAgIDwveG1scHJvcGVydHk+ICAgIAorICAgICAgICA8L3htbHByb3BlcnR5PgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7dGVtcC5zdW4ud2VifSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95LmFudC5jbGllbnQudXJsIiB2YWx1ZT0iJHtnZnYzLnVybH0ke3N1bi13ZWItYXBwLmNvbnRleHQtcm9vdH0iLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveS5jb250ZXh0LnJvb3QuYXJndW1lbnQiIHZhbHVlPSImYW1wO2NvbnRleHRyb290PSR7c3VuLXdlYi1hcHAuY29udGV4dC1yb290fSIvPgpAQCAtNzEsNyArNzEsNyBAQAogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZnVsbC5kZXBsb3kuYW50LmFyY2hpdmUiIGxvY2F0aW9uPSIke2RlcGxveS5hbnQuYXJjaGl2ZX0iLz4KICAgICAgICAgPGdldCBzcmM9IiR7Z2Z2My5hZG1pbi51cmx9L19fYXNhZG1pbi9kZXBsb3k/cGF0aD0ke2Z1bGwuZGVwbG95LmFudC5hcmNoaXZlfSR7ZGVwbG95LmNvbnRleHQucm9vdC5hcmd1bWVudH0mYW1wO2ZvcmNlPXRydWUmYW1wO25hbWU9JHthbnQucHJvamVjdC5uYW1lfSIKICAgICAgICAgICAgIGRlc3Q9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+Ci0gICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4gICAgCisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9Ii1kZXBsb3ktd2l0aC1wdyIgaWY9ImdmdjMucGFzc3dvcmQiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHtkZXBsb3kuYW50LmFyY2hpdmV9Ii8+CkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9ImdmdjMiIHByb3BlcnR5PSJnZnYzLnJlc3VsdHMuZmlsZSIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4gIDwhLS0gZG8gbm90IGZvcmdldCB0byBkZWxldGUgdGhpcyEgLS0+CiAgICAgICAgIDxnZXQgc3JjPSIke2dmdjMuYWRtaW4udXJsfS9fX2FzYWRtaW4vdW5kZXBsb3k/bmFtZT0ke2FudC5wcm9qZWN0Lm5hbWV9IgogICAgICAgICAgICAgZGVzdD0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KLSAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPiAgICAKKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iLXVuZGVwbG95LXdpdGgtcHciIGlmPSJnZnYzLnBhc3N3b3JkIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVW5kZXBsb3lpbmcgJHtkZXBsb3kuYW50LmFyY2hpdmV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtYXR0cmlidXRlL1NGU0JNb2RpZmllZEF0dHJpYnV0ZS9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtYXR0cmlidXRlL1NGU0JNb2RpZmllZEF0dHJpYnV0ZS9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKaW5kZXggMDAxYjFkZC4uNGM2ODJmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLWF0dHJpYnV0ZS9TRlNCTW9kaWZpZWRBdHRyaWJ1dGUvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1hdHRyaWJ1dGUvU0ZTQk1vZGlmaWVkQXR0cmlidXRlL25icHJvamVjdC9idWlsZC1pbXBsLnhtbApAQCAtNDc3LDkgKzQ3Nyw5IEBACiAgICAgPHRhcmdldCBuYW1lPSItaW5pdC10YXNrZGVmcyI+CiAgICAgICAgIDxmYWlsIHVubGVzcz0ibGlicy5Db3B5TGlicy5jbGFzc3BhdGgiPgogVGhlIGxpYnMuQ29weUxpYnMuY2xhc3NwYXRoIHByb3BlcnR5IGlzIG5vdCBzZXQgdXAuCi1UaGlzIHByb3BlcnR5IG11c3QgcG9pbnQgdG8gCitUaGlzIHByb3BlcnR5IG11c3QgcG9pbnQgdG8KIG9yZy1uZXRiZWFucy1tb2R1bGVzLWphdmEtajJzZXByb2plY3QtY29weWxpYnN0YXNrLmphciBmaWxlIHdoaWNoIGlzIHBhcnQKLW9mIE5ldEJlYW5zIElERSBpbnN0YWxsYXRpb24gYW5kIGlzIHVzdWFsbHkgbG9jYXRlZCBhdCAKK29mIE5ldEJlYW5zIElERSBpbnN0YWxsYXRpb24gYW5kIGlzIHVzdWFsbHkgbG9jYXRlZCBhdAogJmx0O25ldGJlYW5zX2luc3RhbGxhdGlvbiZndDsvamF2YSZsdDt2ZXJzaW9uJmd0Oy9hbnQvZXh0cmEgZm9sZGVyLgogRWl0aGVyIG9wZW4gdGhlIHByb2plY3QgaW4gdGhlIElERSBhbmQgbWFrZSBzdXJlIENvcHlMaWJzIGxpYnJhcnkKIGV4aXN0cyBvciBzZXR1cCB0aGUgcHJvcGVydHkgbWFudWFsbHkuIEZvciBleGFtcGxlIGxpa2UgdGhpczoKQEAgLTg1NSw3ICs4NTUsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxqYXZhZG9jLWJ1aWxkLGphdmFkb2MtYnJvd3NlIiBkZXNjcmlwdGlvbj0iQnVpbGQgSmF2YWRvYy4iIG5hbWU9ImphdmFkb2MiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBDT01QSUxBVElPTiBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZSIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1wcmUtcHJlLWNvbXBpbGUtdGVzdCI+CkBAIC04OTQsNyArODk0LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZSwtcHJlLXByZS1jb21waWxlLXRlc3QsLXByZS1jb21waWxlLXRlc3Qtc2luZ2xlLC1kby1jb21waWxlLXRlc3Qtc2luZ2xlLC1wb3N0LWNvbXBpbGUtdGVzdC1zaW5nbGUiIG5hbWU9ImNvbXBpbGUtdGVzdC1zaW5nbGUiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBFWEVDVVRJT04gU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0IiBpZj0iaGF2ZS50ZXN0cyIgbmFtZT0iLXByZS10ZXN0LXJ1biI+CkBAIC05MjEsNyArOTIxLDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZS10ZXN0LXNpbmdsZSwtcHJlLXRlc3QtcnVuLXNpbmdsZSwtZG8tdGVzdC1ydW4tc2luZ2xlLC1wb3N0LXRlc3QtcnVuLXNpbmdsZSIgZGVzY3JpcHRpb249IlJ1biBzaW5nbGUgdW5pdCB0ZXN0LiIgbmFtZT0idGVzdC1zaW5nbGUiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBERUJVR0dJTkcgU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUtdGVzdCIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1kZWJ1Zy1zdGFydC1kZWJ1Z2dlZS10ZXN0Ij4KQEAgLTk0Nyw3ICs5NDcsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCwtcHJlLWRlYnVnLWZpeCwtZG8tZGVidWctZml4LXRlc3QiIGlmPSJuZXRiZWFucy5ob21lIiBuYW1lPSJkZWJ1Zy1maXgtdGVzdCIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIENMRUFOVVAgU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0IiBpZj0ibm8uZGlzdC5lYXIuZGlyIiBuYW1lPSJkZXBzLWNsZWFuIiB1bmxlc3M9Im5vLmRlcHMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1hdHRyaWJ1dGUvU0ZTQk1vZGlmaWVkQXR0cmlidXRlL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLWF0dHJpYnV0ZS9TRlNCTW9kaWZpZWRBdHRyaWJ1dGUvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NGU0JEcml2ZXJTZXJ2bGV0LmphdmEKaW5kZXggZWQ2NGI3Mi4uMGYxMjk2NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLWF0dHJpYnV0ZS9TRlNCTW9kaWZpZWRBdHRyaWJ1dGUvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NGU0JEcml2ZXJTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLWF0dHJpYnV0ZS9TRlNCTW9kaWZpZWRBdHRyaWJ1dGUvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NGU0JEcml2ZXJTZXJ2bGV0LmphdmEKQEAgLTM4LDggKzM4LDggQEAKICAqLwogcHVibGljIGNsYXNzIFNGU0JEcml2ZXJTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCi0gICAKLSAgICAvKiogCisKKyAgICAvKioKICAgICAgKiBQcm9jZXNzZXMgcmVxdWVzdHMgZm9yIGJvdGggSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IGFuZCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2RzLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlNlcnZsZXQgU0ZTQkRyaXZlclNlcnZsZXQ8L3RpdGxlPiIpOyAgCisgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlNlcnZsZXQgU0ZTQkRyaXZlclNlcnZsZXQ8L3RpdGxlPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+U2VydmxldCBTRlNCRHJpdmVyU2VydmxldCBhdCAiICsgcmVxdWVzdC5nZXRDb250ZXh0UGF0aCAoKSArICI8L2gxPiIpOwpAQCAtNzUsNyArNzUsNyBAQAogCiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5Gcm9tIHNlc3Npb24gU0ZTQlsxXSBOT1QgTlVMTCA/OiAiICsgKCIiICsgKHNmc2IxICE9IG51bGwpKSArICIgPC9oMT4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPkZyb20gc2Vzc2lvbiBTRlNCWzJdIE5PVCBOVUxMPyA6ICIgKyAoIiIgKyAoc2ZzYjIgIT0gbnVsbCkpICsgIiA8L2gxPiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChzZnNiMSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgICAgICAgICAgICBzZXNzaW9uLnNldEF0dHJpYnV0ZShLRVlfMSwgc2ZzYjEpOwogICAgICAgICAgICAgICAgIHNlc3Npb24uc2V0QXR0cmlidXRlKEtFWV8yLCBzZnNiMik7CiAKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDM+Q3JlYXRlZCBTRlNCWzFdOiAiICsgc2ZzYjEuYXNTdHJpbmcoKSArICIgPC9oMT4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgzPkNyZWF0ZWQgU0ZTQlsyXTogIiArIHNmc2IyLmFzU3RyaW5nKCkgKyAiIDwvaDE+Iik7CiAKQEAgLTExMywxMyArMTEzLDEzIEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9odG1sPiIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gbm1FeCkgewogICAgICAgICAgICAgbm1FeC5wcmludFN0YWNrVHJhY2Uob3V0KTsKLSAgICAgICAgfSBmaW5hbGx5IHsgCisgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKICAgICAgICAgfQotICAgIH0gCisgICAgfQogCiAgICAgLy8gPGVkaXRvci1mb2xkIGRlZmF1bHRzdGF0ZT0iY29sbGFwc2VkIiBkZXNjPSJIdHRwU2VydmxldCBtZXRob2RzLiBDbGljayBvbiB0aGUgKyBzaWduIG9uIHRoZSBsZWZ0IHRvIGVkaXQgdGhlIGNvZGUuIj4KLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtMTMwLDkgKzEzMCw5IEBACiAgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwotICAgIH0gCisgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC0xNDUsNyArMTQ1LDcgQEAKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBSZXR1cm5zIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIHNlcnZsZXQuCiAgICAgICogQHJldHVybiBhIFN0cmluZyBjb250YWluaW5nIHNlcnZsZXQgZGVzY3JpcHRpb24KICAgICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1hdHRyaWJ1dGUvc3JjL21haW4vamF2YS9jb20vYWNtZS9IdHRwQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtYXR0cmlidXRlL3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhCmluZGV4IDliZTA0ZTQuLjUxYjEwYzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1hdHRyaWJ1dGUvc3JjL21haW4vamF2YS9jb20vYWNtZS9IdHRwQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLWF0dHJpYnV0ZS9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YQpAQCAtMTEzLDcgKzExMyw3IEBACiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmFpbGVkICIgKyBpbmZvKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMTMxLDcgKzEzMSw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAodG1wU2Vzc1N0YXRlLmdldEpzZXNzaW9uQ29va2llKCkgPT0gbnVsbCkgewotICAgICAgICAgICAgdG1wU2Vzc1N0YXRlLnNldEpzZXNzaW9uQ29va2llKGNvb2tpZSk7ICAgIAorICAgICAgICAgICAgdG1wU2Vzc1N0YXRlLnNldEpzZXNzaW9uQ29va2llKGNvb2tpZSk7CiAgICAgICAgIH0KICAgICAgICAgaW50IGNvZGUgPSAoKEh0dHBVUkxDb25uZWN0aW9uKSB1YykuZ2V0UmVzcG9uc2VDb2RlKCk7CiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gdWMuZ2V0SW5wdXRTdHJlYW0oKTsKQEAgLTE5OCw3ICsxOTgsNyBAQAogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHByZXYuZ2V0SHR0cENvdW50ZXIoKSA8IGN1cnJlbnQuZ2V0SHR0cENvdW50ZXIoKTsKICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBwcmV2LmdldEVqYjFDb3VudGVyKCkgPCBjdXJyZW50LmdldEVqYjFDb3VudGVyKCk7CiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcHJldi5nZXRFamIyQ291bnRlcigpIDwgY3VycmVudC5nZXRFamIyQ291bnRlcigpOwotICAgICAgICAgICAgCisKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1hdHRyaWJ1dGUvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtYXR0cmlidXRlL3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhCmluZGV4IDUwYTExODMuLmE4YWZjNjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1hdHRyaWJ1dGUvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLWF0dHJpYnV0ZS9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogLyoqCiAgKiBVbml0IHRlc3QgZm9yIHNpbXBsZSBBcHAuCiAgKi8KLXB1YmxpYyBjbGFzcyBBcHBUZXN0IAorcHVibGljIGNsYXNzIEFwcFRlc3QKICAgICBleHRlbmRzIFRlc3RDYXNlCiB7CiAgICAgLyoqCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtc2Vzc2lvbi9TRlNCTW9kaWZpZWRTZXNzaW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1zZXNzaW9uL1NGU0JNb2RpZmllZFNlc3Npb24vYnVpbGQueG1sCmluZGV4IDNkYWZlMDUuLmEwNjg3ZTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1zZXNzaW9uL1NGU0JNb2RpZmllZFNlc3Npb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1zZXNzaW9uL1NGU0JNb2RpZmllZFNlc3Npb24vYnVpbGQueG1sCkBAIC0zMCwyNyArMzAsMjcgQEAKICAgICA8aW1wb3J0IGZpbGU9Im5icHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDwhLS0KIAotICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlIAotICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkIAotICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOiAKKyAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZQorICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkCisgICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6CiAKLSAgICAgIC1wcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgLXBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIC1wcmUtY29tcGlsZTogICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gCi0gICAgICAtcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gCisgICAgICAtcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgLXBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgLXByZS1jb21waWxlOiAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbgorICAgICAgLXBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICAtcHJlLWNvbXBpbGUtc2luZ2xlOiAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBmaWxlCiAgICAgICAtcG9zdC1jb21waWxlLXNpbmdsZTogICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIGZpbGUKICAgICAgIC1wcmUtY29tcGlsZS10ZXN0OiAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2YgSlVuaXQgdGVzdHMKICAgICAgIC1wb3N0LWNvbXBpbGUtdGVzdDogICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBKVW5pdCB0ZXN0cwogICAgICAgLXByZS1jb21waWxlLXRlc3Qtc2luZ2xlOiAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgSlVuaXQgdGVzdAogICAgICAgLXBvc3QtY29tcGlsZS10ZXN0LXNpbmdsZTogY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBKVXVuaXQgdGVzdAotICAgICAgLXByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBhcmNoaXZlIGJ1aWxkaW5nIAotICAgICAgLXBvc3QtZGlzdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGFyY2hpdmUgYnVpbGRpbmcgCi0gICAgICAtcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMgCisgICAgICAtcHJlLWRpc3Q6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGFyY2hpdmUgYnVpbGRpbmcKKyAgICAgIC1wb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBhcmNoaXZlIGJ1aWxkaW5nCisgICAgICAtcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMKICAgICAgIC1wcmUtcnVuLWRlcGxveTogICAgICAgICAgIGNhbGxlZCBiZWZvcmUgZGVwbG95aW5nCiAgICAgICAtcG9zdC1ydW4tZGVwbG95OiAgICAgICAgICBjYWxsZWQgYWZ0ZXIgZGVwbG95aW5nCiAKLSAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlIAorICAgIEV4YW1wbGUgb2YgcGx1Z2luZyBhbiBvYmZ1c2NhdG9yIGFmdGVyIHRoZSBjb21waWxhdGlvbiBjb3VsZCBsb29rIGxpa2UKIAogICAgICAgICA8dGFyZ2V0IG5hbWU9Ii1wb3N0LWNvbXBpbGUiPgogICAgICAgICAgICAgPG9iZnVzY2F0ZT4KQEAgLTU4LDIxICs1OCwyMSBAQAogICAgICAgICAgICAgPC9vYmZ1c2NhdGU+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQKKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogCiAgICAgT3RoZXIgd2F5IGhvdyB0byBjdXN0b21pemUgdGhlIGJ1aWxkIGlzIGJ5IG92ZXJyaWRpbmcgZXhpc3RpbmcgbWFpbiB0YXJnZXRzLgotICAgIFRoZSB0YXJnZXQgb2YgaW50ZXJlc3QgYXJlOiAKKyAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZToKIAogICAgICAgaW5pdC1tYWNyb2RlZi1qYXZhYzogICAgZGVmaW5lcyBtYWNybyBmb3IgamF2YWMgY29tcGlsYXRpb24KICAgICAgIGluaXQtbWFjcm9kZWYtanVuaXQ6ICAgZGVmaW5lcyBtYWNybyBmb3IganVuaXQgZXhlY3V0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWRlYnVnOiAgICBkZWZpbmVzIG1hY3JvIGZvciBjbGFzcyBkZWJ1Z2dpbmcKICAgICAgIGRvLWRpc3Q6ICAgICAgICAgICAgICAgIGFyY2hpdmUgYnVpbGRpbmcKLSAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0IAotICAgICAgamF2YWRvYy1idWlsZDogICAgICAgICAgamF2YWRvYyBnZW5lcmF0aW9uIAorICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHByb2plY3QKKyAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbgogCi0gICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgdGhlIHRhcmdldCBmb3IgcHJvamVjdCBleGVjdXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9IjxQUk9KTkFNRT4taW1wbC5qYXIiPgogICAgICAgICAgICAgPGV4ZWMgZGlyPSJiaW4iIGV4ZWN1dGFibGU9ImxhdW5jaGVyLmV4ZSI+CkBAIC04MCwxMCArODAsMTAgQEAKICAgICAgICAgICAgIDwvZXhlYz4KICAgICAgICAgPC90YXJnZXQ+CiAKLSAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uIAotICAgIGNvbXBpbGUgdGFyZ2V0IGFzIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGxpc3Qgb2YgYXZhaWxhYmxlIAotICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4gCi0gICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuIAorICAgIE5vdGljZSB0aGF0IG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gamFyIHRhcmdldCBhbmQgbm90IG9ubHkgb24KKyAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZQorICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4KKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogICAgIC0tPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLXNlc3Npb24vU0ZTQk1vZGlmaWVkU2Vzc2lvbi9uYnByb2plY3QvYW50LWRlcGxveS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtc2Vzc2lvbi9TRlNCTW9kaWZpZWRTZXNzaW9uL25icHJvamVjdC9hbnQtZGVwbG95LnhtbAppbmRleCAzZDkzZTEwLi5jMzdkODYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtc2Vzc2lvbi9TRlNCTW9kaWZpZWRTZXNzaW9uL25icHJvamVjdC9hbnQtZGVwbG95LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtc2Vzc2lvbi9TRlNCTW9kaWZpZWRTZXNzaW9uL25icHJvamVjdC9hbnQtZGVwbG95LnhtbApAQCAtMjUsNyArMjUsNyBAQAogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJnZnYzIiBwcm9wZXJ0eT0iZ2Z2My5wYXNzd29yZC5maWxlIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPiAgPCEtLSBkbyBub3QgZm9yZ2V0IHRvIGRlbGV0ZSB0aGlzISAtLT4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQVNfQURNSU5fUEFTU1dPUkQ9JHtnZnYzLnBhc3N3b3JkfSIgZmlsZT0iJHtnZnYzLnBhc3N3b3JkLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9Ii1wYXJzZS1zdW4td2ViIiBkZXBlbmRzPSItaW5pdC1jbC1kZXBsb3ltZW50LWVudiIgaWY9InN1bi53ZWIucHJlc2VudCI+CiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9ImdmdjMiIHByb3BlcnR5PSJ0ZW1wLnN1bi53ZWIiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7ZGVwbG95LmFudC5kb2NiYXNlLmRpcn0vV0VCLUlORi9zdW4td2ViLnhtbCIgdG9maWxlPSIke3RlbXAuc3VuLndlYn0iLz4KQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxyZXBsYWNldmFsdWU+PCFbQ0RBVEFbLS0+IDxzdW4td2ViLWFwcF1dPjwvcmVwbGFjZXZhbHVlPgogICAgICAgICA8L3JlcGxhY2U+CiAgICAgICAgIDx4bWxwcm9wZXJ0eSBmaWxlPSIke3RlbXAuc3VuLndlYn0iIHZhbGlkYXRlPSJmYWxzZSI+Ci0gICAgICAgIDwveG1scHJvcGVydHk+ICAgIAorICAgICAgICA8L3htbHByb3BlcnR5PgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7dGVtcC5zdW4ud2VifSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95LmFudC5jbGllbnQudXJsIiB2YWx1ZT0iJHtnZnYzLnVybH0ke3N1bi13ZWItYXBwLmNvbnRleHQtcm9vdH0iLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveS5jb250ZXh0LnJvb3QuYXJndW1lbnQiIHZhbHVlPSImYW1wO2NvbnRleHRyb290PSR7c3VuLXdlYi1hcHAuY29udGV4dC1yb290fSIvPgpAQCAtNzEsNyArNzEsNyBAQAogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZnVsbC5kZXBsb3kuYW50LmFyY2hpdmUiIGxvY2F0aW9uPSIke2RlcGxveS5hbnQuYXJjaGl2ZX0iLz4KICAgICAgICAgPGdldCBzcmM9IiR7Z2Z2My5hZG1pbi51cmx9L19fYXNhZG1pbi9kZXBsb3k/cGF0aD0ke2Z1bGwuZGVwbG95LmFudC5hcmNoaXZlfSR7ZGVwbG95LmNvbnRleHQucm9vdC5hcmd1bWVudH0mYW1wO2ZvcmNlPXRydWUmYW1wO25hbWU9JHthbnQucHJvamVjdC5uYW1lfSIKICAgICAgICAgICAgIGRlc3Q9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+Ci0gICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4gICAgCisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9Ii1kZXBsb3ktd2l0aC1wdyIgaWY9ImdmdjMucGFzc3dvcmQiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHtkZXBsb3kuYW50LmFyY2hpdmV9Ii8+CkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9ImdmdjMiIHByb3BlcnR5PSJnZnYzLnJlc3VsdHMuZmlsZSIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4gIDwhLS0gZG8gbm90IGZvcmdldCB0byBkZWxldGUgdGhpcyEgLS0+CiAgICAgICAgIDxnZXQgc3JjPSIke2dmdjMuYWRtaW4udXJsfS9fX2FzYWRtaW4vdW5kZXBsb3k/bmFtZT0ke2FudC5wcm9qZWN0Lm5hbWV9IgogICAgICAgICAgICAgZGVzdD0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KLSAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPiAgICAKKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iLXVuZGVwbG95LXdpdGgtcHciIGlmPSJnZnYzLnBhc3N3b3JkIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVW5kZXBsb3lpbmcgJHtkZXBsb3kuYW50LmFyY2hpdmV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtc2Vzc2lvbi9TRlNCTW9kaWZpZWRTZXNzaW9uL25icHJvamVjdC9idWlsZC1pbXBsLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1zZXNzaW9uL1NGU0JNb2RpZmllZFNlc3Npb24vbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCmluZGV4IDU0ZGVlMGUuLmEyMDMyNDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1zZXNzaW9uL1NGU0JNb2RpZmllZFNlc3Npb24vbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1zZXNzaW9uL1NGU0JNb2RpZmllZFNlc3Npb24vbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCkBAIC00NzcsOSArNDc3LDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9Ii1pbml0LXRhc2tkZWZzIj4KICAgICAgICAgPGZhaWwgdW5sZXNzPSJsaWJzLkNvcHlMaWJzLmNsYXNzcGF0aCI+CiBUaGUgbGlicy5Db3B5TGlicy5jbGFzc3BhdGggcHJvcGVydHkgaXMgbm90IHNldCB1cC4KLVRoaXMgcHJvcGVydHkgbXVzdCBwb2ludCB0byAKK1RoaXMgcHJvcGVydHkgbXVzdCBwb2ludCB0bwogb3JnLW5ldGJlYW5zLW1vZHVsZXMtamF2YS1qMnNlcHJvamVjdC1jb3B5bGlic3Rhc2suamFyIGZpbGUgd2hpY2ggaXMgcGFydAotb2YgTmV0QmVhbnMgSURFIGluc3RhbGxhdGlvbiBhbmQgaXMgdXN1YWxseSBsb2NhdGVkIGF0IAorb2YgTmV0QmVhbnMgSURFIGluc3RhbGxhdGlvbiBhbmQgaXMgdXN1YWxseSBsb2NhdGVkIGF0CiAmbHQ7bmV0YmVhbnNfaW5zdGFsbGF0aW9uJmd0Oy9qYXZhJmx0O3ZlcnNpb24mZ3Q7L2FudC9leHRyYSBmb2xkZXIuCiBFaXRoZXIgb3BlbiB0aGUgcHJvamVjdCBpbiB0aGUgSURFIGFuZCBtYWtlIHN1cmUgQ29weUxpYnMgbGlicmFyeQogZXhpc3RzIG9yIHNldHVwIHRoZSBwcm9wZXJ0eSBtYW51YWxseS4gRm9yIGV4YW1wbGUgbGlrZSB0aGlzOgpAQCAtODU1LDcgKzg1NSw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGphdmFkb2MtYnVpbGQsamF2YWRvYy1icm93c2UiIGRlc2NyaXB0aW9uPSJCdWlsZCBKYXZhZG9jLiIgbmFtZT0iamF2YWRvYyIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEpVTklUIENPTVBJTEFUSU9OIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlIiBpZj0iaGF2ZS50ZXN0cyIgbmFtZT0iLXByZS1wcmUtY29tcGlsZS10ZXN0Ij4KQEAgLTg5NCw3ICs4OTQsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlLC1wcmUtcHJlLWNvbXBpbGUtdGVzdCwtcHJlLWNvbXBpbGUtdGVzdC1zaW5nbGUsLWRvLWNvbXBpbGUtdGVzdC1zaW5nbGUsLXBvc3QtY29tcGlsZS10ZXN0LXNpbmdsZSIgbmFtZT0iY29tcGlsZS10ZXN0LXNpbmdsZSIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEpVTklUIEVYRUNVVElPTiBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItcHJlLXRlc3QtcnVuIj4KQEAgLTkyMSw3ICs5MjEsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlLXRlc3Qtc2luZ2xlLC1wcmUtdGVzdC1ydW4tc2luZ2xlLC1kby10ZXN0LXJ1bi1zaW5nbGUsLXBvc3QtdGVzdC1ydW4tc2luZ2xlIiBkZXNjcmlwdGlvbj0iUnVuIHNpbmdsZSB1bml0IHRlc3QuIiBuYW1lPSJ0ZXN0LXNpbmdsZSIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEpVTklUIERFQlVHR0lORyBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZS10ZXN0IiBpZj0iaGF2ZS50ZXN0cyIgbmFtZT0iLWRlYnVnLXN0YXJ0LWRlYnVnZ2VlLXRlc3QiPgpAQCAtOTQ3LDcgKzk0Nyw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LC1wcmUtZGVidWctZml4LC1kby1kZWJ1Zy1maXgtdGVzdCIgaWY9Im5ldGJlYW5zLmhvbWUiIG5hbWU9ImRlYnVnLWZpeC10ZXN0Ii8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgQ0xFQU5VUCBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQiIGlmPSJuby5kaXN0LmVhci5kaXIiIG5hbWU9ImRlcHMtY2xlYW4iIHVubGVzcz0ibm8uZGVwcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLXNlc3Npb24vU0ZTQk1vZGlmaWVkU2Vzc2lvbi9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1zZXNzaW9uL1NGU0JNb2RpZmllZFNlc3Npb24vc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NGU0JEcml2ZXJTZXJ2bGV0LmphdmEKaW5kZXggYTBiNjQ5YS4uYjAzNmEyOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLXNlc3Npb24vU0ZTQk1vZGlmaWVkU2Vzc2lvbi9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtc2Vzc2lvbi9TRlNCTW9kaWZpZWRTZXNzaW9uL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCkBAIC0zOCw4ICszOCw4IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBTRlNCRHJpdmVyU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAotICAgCi0gICAgLyoqIAorCisgICAgLyoqCiAgICAgICogUHJvY2Vzc2VzIHJlcXVlc3RzIGZvciBib3RoIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBhbmQgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kcy4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwotICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0PC90aXRsZT4iKTsgIAorICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0PC90aXRsZT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPlNlcnZsZXQgU0ZTQkRyaXZlclNlcnZsZXQgYXQgIiArIHJlcXVlc3QuZ2V0Q29udGV4dFBhdGggKCkgKyAiPC9oMT4iKTsKQEAgLTc1LDEzICs3NSwxMyBAQAogCiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5Gcm9tIHNlc3Npb24gU0ZTQlsxXSBOT1QgTlVMTCA/OiAiICsgKCIiICsgKHNmc2IxICE9IG51bGwpKSArICIgPC9oMT4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPkZyb20gc2Vzc2lvbiBTRlNCWzJdIE5PVCBOVUxMPyA6ICIgKyAoIiIgKyAoc2ZzYjIgIT0gbnVsbCkpICsgIiA8L2gxPiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChzZnNiMSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKICAgICAgICAgICAgICAgICBzZnNiMSA9IChTaW1wbGVTZXNzaW9uQmVhbikgY3R4Lmxvb2t1cCgiamF2YTpnbG9iYWwvU0ZTQkRyaXZlci9TaW1wbGVTZXNzaW9uQmVhbiIpOwogICAgICAgICAgICAgICAgIHNmc2IyID0gKFNpbXBsZVNlc3Npb25CZWFuKSBjdHgubG9va3VwKCJqYXZhOmdsb2JhbC9TRlNCRHJpdmVyL1NpbXBsZVNlc3Npb25CZWFuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPkNyZWF0ZWQgU0ZTQlsxXTogIiArIHNmc2IxLmFzU3RyaW5nKCkgKyAiIDwvaDE+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5DcmVhdGVkIFNGU0JbMl06ICIgKyBzZnNiMi5hc1N0cmluZygpICsgIiA8L2gxPiIpOwogCkBAIC0xMDksMTMgKzEwOSwxMyBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaHRtbD4iKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIG5tRXgpIHsKICAgICAgICAgICAgIG5tRXgucHJpbnRTdGFja1RyYWNlKG91dCk7Ci0gICAgICAgIH0gZmluYWxseSB7IAorICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgICAgIH0KLSAgICB9IAorICAgIH0KIAogICAgIC8vIDxlZGl0b3ItZm9sZCBkZWZhdWx0c3RhdGU9ImNvbGxhcHNlZCIgZGVzYz0iSHR0cFNlcnZsZXQgbWV0aG9kcy4gQ2xpY2sgb24gdGhlICsgc2lnbiBvbiB0aGUgbGVmdCB0byBlZGl0IHRoZSBjb2RlLiI+Ci0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTEyNiw5ICsxMjYsOSBAQAogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICB9IAorICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogUmV0dXJucyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2bGV0LgogICAgICAqIEByZXR1cm4gYSBTdHJpbmcgY29udGFpbmluZyBzZXJ2bGV0IGRlc2NyaXB0aW9uCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtc2Vzc2lvbi9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1zZXNzaW9uL3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhCmluZGV4IGI2NzY4MzUuLmZlZWQ5M2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1zZXNzaW9uL3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1zZXNzaW9uL3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhCkBAIC0xMTMsNyArMTEzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGYWlsZWQgIiArIGluZm8pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmICh0bXBTZXNzU3RhdGUuZ2V0SnNlc3Npb25Db29raWUoKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0bXBTZXNzU3RhdGUuc2V0SnNlc3Npb25Db29raWUoY29va2llKTsgICAgCisgICAgICAgICAgICB0bXBTZXNzU3RhdGUuc2V0SnNlc3Npb25Db29raWUoY29va2llKTsKICAgICAgICAgfQogICAgICAgICBpbnQgY29kZSA9ICgoSHR0cFVSTENvbm5lY3Rpb24pIHVjKS5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSB1Yy5nZXRJbnB1dFN0cmVhbSgpOwpAQCAtMTk4LDcgKzE5OCw3IEBACiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcHJldi5nZXRIdHRwQ291bnRlcigpIDwgY3VycmVudC5nZXRIdHRwQ291bnRlcigpOwogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHByZXYuZ2V0RWpiMUNvdW50ZXIoKSA8IGN1cnJlbnQuZ2V0RWpiMUNvdW50ZXIoKTsKICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBwcmV2LmdldEVqYjJDb3VudGVyKCkgPCBjdXJyZW50LmdldEVqYjJDb3VudGVyKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLXNlc3Npb24vc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtc2Vzc2lvbi9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YQppbmRleCA1MGExMTgzLi5hOGFmYzY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtc2Vzc2lvbi9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtc2Vzc2lvbi9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogLyoqCiAgKiBVbml0IHRlc3QgZm9yIHNpbXBsZSBBcHAuCiAgKi8KLXB1YmxpYyBjbGFzcyBBcHBUZXN0IAorcHVibGljIGNsYXNzIEFwcFRlc3QKICAgICBleHRlbmRzIFRlc3RDYXNlCiB7CiAgICAgLyoqCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU0ZTQkRyaXZlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU0ZTQkRyaXZlci9idWlsZC54bWwKaW5kZXggZjU3OTU1OS4uNzdkNjkwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NGU0JEcml2ZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TRlNCRHJpdmVyL2J1aWxkLnhtbApAQCAtMzAsMjcgKzMwLDI3IEBACiAgICAgPGltcG9ydCBmaWxlPSJuYnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8IS0tCiAKLSAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZSAKLSAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZCAKLSAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZTogCisgICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUKKyAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZAorICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOgogCi0gICAgICAtcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIC1wb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMgCi0gICAgICAtcHJlLWNvbXBpbGU6ICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIAotICAgICAgLXBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIAorICAgICAgLXByZS1pbml0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIC1wb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIC1wcmUtY29tcGlsZTogICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24KKyAgICAgIC1wb3N0LWNvbXBpbGU6ICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbgogICAgICAgLXByZS1jb21waWxlLXNpbmdsZTogICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgZmlsZQogICAgICAgLXBvc3QtY29tcGlsZS1zaW5nbGU6ICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBmaWxlCiAgICAgICAtcHJlLWNvbXBpbGUtdGVzdDogICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIEpVbml0IHRlc3RzCiAgICAgICAtcG9zdC1jb21waWxlLXRlc3Q6ICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2YgSlVuaXQgdGVzdHMKICAgICAgIC1wcmUtY29tcGlsZS10ZXN0LXNpbmdsZTogIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIEpVbml0IHRlc3QKICAgICAgIC1wb3N0LWNvbXBpbGUtdGVzdC1zaW5nbGU6IGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgSlV1bml0IHRlc3QKLSAgICAgIC1wcmUtZGlzdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgYXJjaGl2ZSBidWlsZGluZyAKLSAgICAgIC1wb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBhcmNoaXZlIGJ1aWxkaW5nIAotICAgICAgLXBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzIAorICAgICAgLXByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBhcmNoaXZlIGJ1aWxkaW5nCisgICAgICAtcG9zdC1kaXN0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgYXJjaGl2ZSBidWlsZGluZworICAgICAgLXBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzCiAgICAgICAtcHJlLXJ1bi1kZXBsb3k6ICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGRlcGxveWluZwogICAgICAgLXBvc3QtcnVuLWRlcGxveTogICAgICAgICAgY2FsbGVkIGFmdGVyIGRlcGxveWluZwogCi0gICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSItcG9zdC1jb21waWxlIj4KICAgICAgICAgICAgIDxvYmZ1c2NhdGU+CkBAIC01OCwyMSArNTgsMjEgQEAKICAgICAgICAgICAgIDwvb2JmdXNjYXRlPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZCAKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKIAogICAgIE90aGVyIHdheSBob3cgdG8gY3VzdG9taXplIHRoZSBidWlsZCBpcyBieSBvdmVycmlkaW5nIGV4aXN0aW5nIG1haW4gdGFyZ2V0cy4KLSAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZTogCisgICAgVGhlIHRhcmdldCBvZiBpbnRlcmVzdCBhcmU6CiAKICAgICAgIGluaXQtbWFjcm9kZWYtamF2YWM6ICAgIGRlZmluZXMgbWFjcm8gZm9yIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWp1bml0OiAgIGRlZmluZXMgbWFjcm8gZm9yIGp1bml0IGV4ZWN1dGlvbgogICAgICAgaW5pdC1tYWNyb2RlZi1kZWJ1ZzogICAgZGVmaW5lcyBtYWNybyBmb3IgY2xhc3MgZGVidWdnaW5nCiAgICAgICBkby1kaXN0OiAgICAgICAgICAgICAgICBhcmNoaXZlIGJ1aWxkaW5nCi0gICAgICBydW46ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdCAKLSAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbiAKKyAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0CisgICAgICBqYXZhZG9jLWJ1aWxkOiAgICAgICAgICBqYXZhZG9jIGdlbmVyYXRpb24KIAotICAgIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgdGFyZ2V0IGZvciBwcm9qZWN0IGV4ZWN1dGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSI8UFJPSk5BTUU+LWltcGwuamFyIj4KICAgICAgICAgICAgIDxleGVjIGRpcj0iYmluIiBleGVjdXRhYmxlPSJsYXVuY2hlci5leGUiPgpAQCAtODAsMTAgKzgwLDEwIEBACiAgICAgICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgTm90aWNlIHRoYXQgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbiAKLSAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZSAKLSAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uCisgICAgY29tcGlsZSB0YXJnZXQgYXMgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgbGlzdCBvZiBhdmFpbGFibGUKKyAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKICAgICAtLT4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TRlNCRHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TRlNCRHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbAppbmRleCBmN2I1NTEyLi4wZDRiZmExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU0ZTQkRyaXZlci9uYnByb2plY3QvYW50LWRlcGxveS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NGU0JEcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9ImdmdjMiIHByb3BlcnR5PSJnZnYzLnBhc3N3b3JkLmZpbGUiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+ICA8IS0tIGRvIG5vdCBmb3JnZXQgdG8gZGVsZXRlIHRoaXMhIC0tPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJBU19BRE1JTl9QQVNTV09SRD0ke2dmdjMucGFzc3dvcmR9IiBmaWxlPSIke2dmdjMucGFzc3dvcmQuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iLXBhcnNlLXN1bi13ZWIiIGRlcGVuZHM9Ii1pbml0LWNsLWRlcGxveW1lbnQtZW52IiBpZj0ic3VuLndlYi5wcmVzZW50Ij4KICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0iZ2Z2MyIgcHJvcGVydHk9InRlbXAuc3VuLndlYiIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHtkZXBsb3kuYW50LmRvY2Jhc2UuZGlyfS9XRUItSU5GL3N1bi13ZWIueG1sIiB0b2ZpbGU9IiR7dGVtcC5zdW4ud2VifSIvPgpAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPHJlcGxhY2V2YWx1ZT48IVtDREFUQVstLT4gPHN1bi13ZWItYXBwXV0+PC9yZXBsYWNldmFsdWU+CiAgICAgICAgIDwvcmVwbGFjZT4KICAgICAgICAgPHhtbHByb3BlcnR5IGZpbGU9IiR7dGVtcC5zdW4ud2VifSIgdmFsaWRhdGU9ImZhbHNlIj4KLSAgICAgICAgPC94bWxwcm9wZXJ0eT4gICAgCisgICAgICAgIDwveG1scHJvcGVydHk+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3kuYW50LmNsaWVudC51cmwiIHZhbHVlPSIke2dmdjMudXJsfSR7c3VuLXdlYi1hcHAuY29udGV4dC1yb290fSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95LmNvbnRleHQucm9vdC5hcmd1bWVudCIgdmFsdWU9IiZhbXA7Y29udGV4dHJvb3Q9JHtzdW4td2ViLWFwcC5jb250ZXh0LXJvb3R9Ii8+CkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmdWxsLmRlcGxveS5hbnQuYXJjaGl2ZSIgbG9jYXRpb249IiR7ZGVwbG95LmFudC5hcmNoaXZlfSIvPgogICAgICAgICA8Z2V0IHNyYz0iJHtnZnYzLmFkbWluLnVybH0vX19hc2FkbWluL2RlcGxveT9wYXRoPSR7ZnVsbC5kZXBsb3kuYW50LmFyY2hpdmV9JHtkZXBsb3kuY29udGV4dC5yb290LmFyZ3VtZW50fSZhbXA7Zm9yY2U9dHJ1ZSZhbXA7bmFtZT0ke2FudC5wcm9qZWN0Lm5hbWV9IgogICAgICAgICAgICAgZGVzdD0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KLSAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPiAgICAKKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iLWRlcGxveS13aXRoLXB3IiBpZj0iZ2Z2My5wYXNzd29yZCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke2RlcGxveS5hbnQuYXJjaGl2ZX0iLz4KQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0iZ2Z2MyIgcHJvcGVydHk9ImdmdjMucmVzdWx0cy5maWxlIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPiAgPCEtLSBkbyBub3QgZm9yZ2V0IHRvIGRlbGV0ZSB0aGlzISAtLT4KICAgICAgICAgPGdldCBzcmM9IiR7Z2Z2My5hZG1pbi51cmx9L19fYXNhZG1pbi91bmRlcGxveT9uYW1lPSR7YW50LnByb2plY3QubmFtZX0iCiAgICAgICAgICAgICBkZXN0PSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgotICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+ICAgIAorICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSItdW5kZXBsb3ktd2l0aC1wdyIgaWY9ImdmdjMucGFzc3dvcmQiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJVbmRlcGxveWluZyAke2RlcGxveS5hbnQuYXJjaGl2ZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TRlNCRHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TRlNCRHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbAppbmRleCAxM2IxODAzLi4zOTA0OWVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU0ZTQkRyaXZlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NGU0JEcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCkBAIC00NzcsOSArNDc3LDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9Ii1pbml0LXRhc2tkZWZzIj4KICAgICAgICAgPGZhaWwgdW5sZXNzPSJsaWJzLkNvcHlMaWJzLmNsYXNzcGF0aCI+CiBUaGUgbGlicy5Db3B5TGlicy5jbGFzc3BhdGggcHJvcGVydHkgaXMgbm90IHNldCB1cC4KLVRoaXMgcHJvcGVydHkgbXVzdCBwb2ludCB0byAKK1RoaXMgcHJvcGVydHkgbXVzdCBwb2ludCB0bwogb3JnLW5ldGJlYW5zLW1vZHVsZXMtamF2YS1qMnNlcHJvamVjdC1jb3B5bGlic3Rhc2suamFyIGZpbGUgd2hpY2ggaXMgcGFydAotb2YgTmV0QmVhbnMgSURFIGluc3RhbGxhdGlvbiBhbmQgaXMgdXN1YWxseSBsb2NhdGVkIGF0IAorb2YgTmV0QmVhbnMgSURFIGluc3RhbGxhdGlvbiBhbmQgaXMgdXN1YWxseSBsb2NhdGVkIGF0CiAmbHQ7bmV0YmVhbnNfaW5zdGFsbGF0aW9uJmd0Oy9qYXZhJmx0O3ZlcnNpb24mZ3Q7L2FudC9leHRyYSBmb2xkZXIuCiBFaXRoZXIgb3BlbiB0aGUgcHJvamVjdCBpbiB0aGUgSURFIGFuZCBtYWtlIHN1cmUgQ29weUxpYnMgbGlicmFyeQogZXhpc3RzIG9yIHNldHVwIHRoZSBwcm9wZXJ0eSBtYW51YWxseS4gRm9yIGV4YW1wbGUgbGlrZSB0aGlzOgpAQCAtODU1LDcgKzg1NSw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGphdmFkb2MtYnVpbGQsamF2YWRvYy1icm93c2UiIGRlc2NyaXB0aW9uPSJCdWlsZCBKYXZhZG9jLiIgbmFtZT0iamF2YWRvYyIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEpVTklUIENPTVBJTEFUSU9OIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlIiBpZj0iaGF2ZS50ZXN0cyIgbmFtZT0iLXByZS1wcmUtY29tcGlsZS10ZXN0Ij4KQEAgLTg5NCw3ICs4OTQsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlLC1wcmUtcHJlLWNvbXBpbGUtdGVzdCwtcHJlLWNvbXBpbGUtdGVzdC1zaW5nbGUsLWRvLWNvbXBpbGUtdGVzdC1zaW5nbGUsLXBvc3QtY29tcGlsZS10ZXN0LXNpbmdsZSIgbmFtZT0iY29tcGlsZS10ZXN0LXNpbmdsZSIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEpVTklUIEVYRUNVVElPTiBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItcHJlLXRlc3QtcnVuIj4KQEAgLTkyMSw3ICs5MjEsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlLXRlc3Qtc2luZ2xlLC1wcmUtdGVzdC1ydW4tc2luZ2xlLC1kby10ZXN0LXJ1bi1zaW5nbGUsLXBvc3QtdGVzdC1ydW4tc2luZ2xlIiBkZXNjcmlwdGlvbj0iUnVuIHNpbmdsZSB1bml0IHRlc3QuIiBuYW1lPSJ0ZXN0LXNpbmdsZSIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEpVTklUIERFQlVHR0lORyBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZS10ZXN0IiBpZj0iaGF2ZS50ZXN0cyIgbmFtZT0iLWRlYnVnLXN0YXJ0LWRlYnVnZ2VlLXRlc3QiPgpAQCAtOTQ3LDcgKzk0Nyw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LC1wcmUtZGVidWctZml4LC1kby1kZWJ1Zy1maXgtdGVzdCIgaWY9Im5ldGJlYW5zLmhvbWUiIG5hbWU9ImRlYnVnLWZpeC10ZXN0Ii8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgQ0xFQU5VUCBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQiIGlmPSJuby5kaXN0LmVhci5kaXIiIG5hbWU9ImRlcHMtY2xlYW4iIHVubGVzcz0ibm8uZGVwcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NGU0JEcml2ZXIvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NGU0JEcml2ZXJTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU0ZTQkRyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YQppbmRleCBmODFmOTMzLi4zMWJlMDFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU0ZTQkRyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU0ZTQkRyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YQpAQCAtMzgsOCArMzgsOCBAQAogICovCiBwdWJsaWMgY2xhc3MgU0ZTQkRyaXZlclNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKLSAgIAotICAgIC8qKiAKKworICAgIC8qKgogICAgICAqIFByb2Nlc3NlcyByZXF1ZXN0cyBmb3IgYm90aCBIVFRQIDxjb2RlPkdFVDwvY29kZT4gYW5kIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZHMuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+U2VydmxldCBTRlNCRHJpdmVyU2VydmxldDwvdGl0bGU+Iik7ICAKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+U2VydmxldCBTRlNCRHJpdmVyU2VydmxldDwvdGl0bGU+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0IGF0ICIgKyByZXF1ZXN0LmdldENvbnRleHRQYXRoICgpICsgIjwvaDE+Iik7CkBAIC03NSwxMyArNzUsMTMgQEAKIAogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+RnJvbSBzZXNzaW9uIFNGU0JbMV0gTk9UIE5VTEwgPzogIiArICgiIiArIChzZnNiMSAhPSBudWxsKSkgKyAiIDwvaDE+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5Gcm9tIHNlc3Npb24gU0ZTQlsyXSBOT1QgTlVMTD8gOiAiICsgKCIiICsgKHNmc2IyICE9IG51bGwpKSArICIgPC9oMT4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoc2ZzYjEgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCiAgICAgICAgICAgICAgICAgc2ZzYjEgPSAoU2ltcGxlU2Vzc2lvbkJlYW4pIGN0eC5sb29rdXAoImphdmE6Z2xvYmFsL1NGU0JEcml2ZXIvU2ltcGxlU2Vzc2lvbkJlYW4iKTsKICAgICAgICAgICAgICAgICBzZnNiMiA9IChTaW1wbGVTZXNzaW9uQmVhbikgY3R4Lmxvb2t1cCgiamF2YTpnbG9iYWwvU0ZTQkRyaXZlci9TaW1wbGVTZXNzaW9uQmVhbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5DcmVhdGVkIFNGU0JbMV06ICIgKyBzZnNiMS5hc1N0cmluZygpICsgIiA8L2gxPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+Q3JlYXRlZCBTRlNCWzJdOiAiICsgc2ZzYjIuYXNTdHJpbmcoKSArICIgPC9oMT4iKTsKIApAQCAtMTA5LDEzICsxMDksMTMgQEAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2h0bWw+Iik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBubUV4KSB7CiAgICAgICAgICAgICBubUV4LnByaW50U3RhY2tUcmFjZShvdXQpOwotICAgICAgICB9IGZpbmFsbHkgeyAKKyAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIG91dC5jbG9zZSgpOwogICAgICAgICB9Ci0gICAgfSAKKyAgICB9CiAKICAgICAvLyA8ZWRpdG9yLWZvbGQgZGVmYXVsdHN0YXRlPSJjb2xsYXBzZWQiIGRlc2M9Ikh0dHBTZXJ2bGV0IG1ldGhvZHMuIENsaWNrIG9uIHRoZSArIHNpZ24gb24gdGhlIGxlZnQgdG8gZWRpdCB0aGUgY29kZS4iPgotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPkdFVDwvY29kZT4gbWV0aG9kLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC0xMjYsOSArMTI2LDkgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgfSAKKyAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIFJldHVybnMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgc2VydmxldC4KICAgICAgKiBAcmV0dXJuIGEgU3RyaW5nIGNvbnRhaW5pbmcgc2VydmxldCBkZXNjcmlwdGlvbgogICAgICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhCmluZGV4IDYyZjRkZmQuLjYwNDAxMzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvc3JjL21haW4vamF2YS9jb20vYWNtZS9IdHRwQ2xpZW50LmphdmEKQEAgLTExMyw3ICsxMTMsNyBAQAogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWxlZCAiICsgaW5mbyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTEzMSw3ICsxMzEsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKHRtcFNlc3NTdGF0ZS5nZXRKc2Vzc2lvbkNvb2tpZSgpID09IG51bGwpIHsKLSAgICAgICAgICAgIHRtcFNlc3NTdGF0ZS5zZXRKc2Vzc2lvbkNvb2tpZShjb29raWUpOyAgICAKKyAgICAgICAgICAgIHRtcFNlc3NTdGF0ZS5zZXRKc2Vzc2lvbkNvb2tpZShjb29raWUpOwogICAgICAgICB9CiAgICAgICAgIGludCBjb2RlID0gKChIdHRwVVJMQ29ubmVjdGlvbikgdWMpLmdldFJlc3BvbnNlQ29kZSgpOwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHVjLmdldElucHV0U3RyZWFtKCk7CkBAIC0xOTgsNyArMTk4LDcgQEAKICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBwcmV2LmdldEh0dHBDb3VudGVyKCkgPCBjdXJyZW50LmdldEh0dHBDb3VudGVyKCk7CiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcHJldi5nZXRFamIxQ291bnRlcigpIDwgY3VycmVudC5nZXRFamIxQ291bnRlcigpOwogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHByZXYuZ2V0RWpiMkNvdW50ZXIoKSA8IGN1cnJlbnQuZ2V0RWpiMkNvdW50ZXIoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEKaW5kZXggYzRiNjA4Yi4uMGNmNzI1NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogLyoqCiAgKiBVbml0IHRlc3QgZm9yIHNpbXBsZSBBcHAuCiAgKi8KLXB1YmxpYyBjbGFzcyBBcHBUZXN0IAorcHVibGljIGNsYXNzIEFwcFRlc3QKICAgICBleHRlbmRzIFRlc3RDYXNlCiB7CiAgICAgLyoqCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvc3NvRmFpbG92ZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL3Nzb0ZhaWxvdmVyL1dlYlRlc3QuamF2YQppbmRleCBiMTM2MTdkLi5kYTE1YjExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvc3NvRmFpbG92ZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9zc29GYWlsb3Zlci9XZWJUZXN0LmphdmEKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgdXNlciA9IGFyZ3NbNV07CiAgICAgICAgIHBhc3N3b3JkID0gYXJnc1s2XTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgMTkzMyIpOwpAQCAtMTUyLDcgKzE1Miw3IEBACiAgICAgICAgICAgICAvLyBmb2xsb3cgdGhlIHJlZGlyZWN0CiAgICAgICAgICAgICBpbnQgY0ExID0gZ28ocG9ydDEsIG5ldyBVUkwocmVkaXJlY3QpLmdldFBhdGgoKSwgIkEiKTsKICAgICAgICAgICAgIGludCBjQjEgPSBnbyhwb3J0MSwgY29udGV4dFJvb3RQcmVmaXggKyAiLWIvaW5kZXguanNwIiwgIkIiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBzdG9wIGluc3QxCiAgICAgICAgICAgICBhc2FkbWluKCJzdG9wLWxvY2FsLWluc3RhbmNlIiwgaW5zdGFuY2VuYW1lMSk7CiAKQEAgLTIwOCw3ICsyMDgsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHNiKTsKIAogICAgICAgICAgICAgb3Mud3JpdGUoIlxuXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICAgICAgaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtMjMxLDcgKzIzMSw3IEBACiAgICAgICAgICAgICBjbG9zZShvcyk7CiAgICAgICAgICAgICBjbG9zZShicik7CiAgICAgICAgICAgICBjbG9zZShpcyk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KIAogICAgICAgICBpZiAoY291bnQgPT0gLTEpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkZhaWxlZCB0byBhY2Nlc3MgaW5kZXguanNwIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvc3NvRmFpbG92ZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9zc29GYWlsb3Zlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGViODQ1MWIuLjQ2Njc5YTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9zc29GYWlsb3Zlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9zc29GYWlsb3Zlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWhhLXNzby1mYWlsb3ZlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL3Nzb0ZhaWxvdmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9zc29GYWlsb3Zlci9idWlsZC54bWwKaW5kZXggM2Y0M2ZlNS4uNzY5Yzk2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL3Nzb0ZhaWxvdmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvc3NvRmFpbG92ZXIvYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iV2ViVGVzdCouY2xhc3MiLz4KICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAKICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Jhc2VkaXJ9L2RvY3Jvb3QvaW5kZXguanNwIi8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vZG9jcm9vdC9pbmRleC5qc3AuYSIgdG9maWxlPSIke2Jhc2VkaXJ9L2RvY3Jvb3QvaW5kZXguanNwIi8+CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCkBAIC0xMTgsNyArMTE4LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iLS1jbHVzdGVyICR7Y2x1c3Rlci5uYW1lfSAtLXN5c3RlbXByb3BlcnRpZXMgSFRUUF9MSVNURU5FUl9QT1JUPSR7aW5zdGFuY2UuaHR0cC5wb3J0fSAke2luc3RhbmNlLm5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke2FwcG5hbWV9LWEiLz4KQEAgLTE1Nyw3ICsxNTcsNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7YXBwbmFtZX0tYSIvPgpAQCAtMTY3LDcgKzE2Nyw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7YXBwbmFtZX0tYiIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcHNlcnZlci5pbnN0YW5jZS5uYW1lIiB2YWx1ZT0iJHtjbHVzdGVyLm5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9zc29GYWlsb3Zlci9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvc3NvRmFpbG92ZXIvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGJiNWQ1MTYuLjQ4NTFjNzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9zc29GYWlsb3Zlci9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL3Nzb0ZhaWxvdmVyL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjYsMTIgKzI2LDEyIEBACiAgIDxkaXN0cmlidXRhYmxlLz4KICAgPHNlY3VyaXR5LWNvbnN0cmFpbnQ+CiAgICAgPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgotCTx3ZWItcmVzb3VyY2UtbmFtZT5Qcm90ZWN0ZWQgQXJlYTwvd2ViLXJlc291cmNlLW5hbWU+Ci0JPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KLQk8aHR0cC1tZXRob2Q+REVMRVRFPC9odHRwLW1ldGhvZD4KLQk8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KLQk8aHR0cC1tZXRob2Q+UE9TVDwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPlBVVDwvaHR0cC1tZXRob2Q+CisgICAgPHdlYi1yZXNvdXJjZS1uYW1lPlByb3RlY3RlZCBBcmVhPC93ZWItcmVzb3VyY2UtbmFtZT4KKyAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgorICAgIDxodHRwLW1ldGhvZD5ERUxFVEU8L2h0dHAtbWV0aG9kPgorICAgIDxodHRwLW1ldGhvZD5HRVQ8L2h0dHAtbWV0aG9kPgorICAgIDxodHRwLW1ldGhvZD5QT1NUPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+UFVUPC9odHRwLW1ldGhvZD4KICAgICA8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgogCiAgICAgPGF1dGgtY29uc3RyYWludD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oZWFkZXJCdWZmZXJGdWxsL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oZWFkZXJCdWZmZXJGdWxsL1dlYlRlc3QuamF2YQppbmRleCA5Y2E1MzlmLi4yMTMzMTM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGVhZGVyQnVmZmVyRnVsbC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hlYWRlckJ1ZmZlckZ1bGwvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImhlYWRlckJ1ZmZlclNpemUiKTsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiSG9zdDogbG9jYWxob3N0XG4iLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC04Niw2ICs4Niw2IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgCisKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGVhZGVyQnVmZmVyRnVsbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hlYWRlckJ1ZmZlckZ1bGwvYnVpbGQucHJvcGVydGllcwppbmRleCAzMDc4MGY1Li5jNTY1NzdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGVhZGVyQnVmZmVyRnVsbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oZWFkZXJCdWZmZXJGdWxsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0taGVhZGVyQnVmZmVyRnVsbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hlYWRlckJ1ZmZlckZ1bGwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hlYWRlckJ1ZmZlckZ1bGwvYnVpbGQueG1sCmluZGV4IDViNDNmYjAuLmQzYWJjMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oZWFkZXJCdWZmZXJGdWxsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGVhZGVyQnVmZmVyRnVsbC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE1ICs0MiwxNSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICAgICAgICAgIHZhbHVlPSJjb25maWdzLmNvbmZpZy5zZXJ2ZXItY29uZmlnLm5ldHdvcmstY29uZmlnLnByb3RvY29scy5wcm90b2NvbC5odHRwLWxpc3RlbmVyLTEuaHR0cC5tYXgtcmVzcG9uc2UtaGVhZGVycz0xMDAiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCkBAIC05MCwxMCArOTAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGVhZGVyQnVmZmVyU2l6ZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGVhZGVyQnVmZmVyU2l6ZS9XZWJUZXN0LmphdmEKaW5kZXggZWQ5YzUxOC4uZWVhOTk2YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hlYWRlckJ1ZmZlclNpemUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oZWFkZXJCdWZmZXJTaXplL1dlYlRlc3QuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0gImhlYWRlckJ1ZmZlclNpemUiOwogCi0JLy8gUmVxdWVzdCBrZXlzCisgICAgLy8gUmVxdWVzdCBrZXlzCiAgICAgLyoqIEhhc2h0YWJsZSBrZXkgZm9yIGhlYWRlcnMgcHJvcGVydHkgKHR5cGUgb2YgY29ycmVzcG9uZGluZyB2YWx1ZSA9IEhhc2h0YWJsZSkuICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSUyA9ICJoZWFkZXJzIjsKIApAQCAtNDYsNyArNDYsNyBAQAogICAgIC8qKiBIYXNodGFibGUga2V5IGZvciByZXF1ZXN0IHBhcmFtZXRlcnMgcHJvcGVydHkgKHR5cGUgb2YgY29ycmVzcG9uZGluZyB2YWx1ZSA9IEhhc2h0YWJsZSkuICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVRVUVTVF9QQVJBTVMgPSAicmVxdWVzdF9wYXJhbXMiOwogCi0JLy8gUmVzcG9uc2Uga2V5cworICAgIC8vIFJlc3BvbnNlIGtleXMKICAgICAvKiogSGFzaHRhYmxlIGtleSBmb3IgcmVzcG9uc2UgY29kZSBwcm9wZXJ0eSAodHlwZSBvZiBjb3JyZXNwb25kaW5nIHZhbHVlID0gSW50ZWdlcikuICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVTUE9OU0VfQ09ERSA9ICJyZXNwb25zZV9jb2RlIjsKIApAQCAtNTYsMTggKzU2LDE4IEBACiAgICAgLyoqIEhhc2h0YWJsZSBrZXkgZm9yIHJlc3BvbnNlIGNvbnRlbnQgcHJvcGVydHkgKHR5cGUgb2YgY29ycmVzcG9uZGluZyB2YWx1ZSA9IFN0cmluZykuICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVTUE9OU0VfQ09OVEVOVCA9ICJyZXNwb25zZV9jb250ZW50IjsKIAotCS8vIFJlcXVlc3QgYW5kIHJlc3BvbnNlIGtleXMKKyAgICAvLyBSZXF1ZXN0IGFuZCByZXNwb25zZSBrZXlzCiAgICAgLyoqIEhhc2h0YWJsZSBrZXkgZm9yIGNvb2tpZXMgcHJvcGVydHkgKHR5cGUgb2YgY29ycmVzcG9uZGluZyB2YWx1ZSA9IFN0cmluZ1tdKS4gKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT09LSUVTID0gImNvb2tpZXMiOwogCi0JLy8gVmFsdWVzCisgICAgLy8gVmFsdWVzCiAgICAgLyoqIEdFVCB2YWx1ZSBmb3IgcHJvcGVydHkgbWV0aG9kLiAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEdFVF9NRVRIT0QgPSAiR0VUIjsKIAogICAgIC8qKiBQT1NUIHZhbHVlIGZvciBwcm9wZXJ0eSBtZXRob2QuICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9TVF9NRVRIT0QgPSAiUE9TVCI7CiAKLQkvLyBEZWZhdWx0IHZhbHVlcworICAgIC8vIERlZmF1bHQgdmFsdWVzCiAgICAgLyoqIERlZmF1bHQgdmFsdWUgZm9yIHByb3BlcnR5IG1ldGhvZC4gKi8KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9NRVRIT0QgPSBHRVRfTUVUSE9EOwogCkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgLyoqIERlZmF1bHQgdmFsdWUgZm9yIHVzZXItYWdlbnQgaGVhZGVyLiAqLwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0NPTk5FQ1RJT05fSEVBREVSID0gImNsb3NlIjsKIAotCS8vIFN0YXRpYyBtZXRob2RzCisgICAgLy8gU3RhdGljIG1ldGhvZHMKIAogICAgIC8qKgogICAgICAqKiBNYWluIG1ldGhvZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KQEAgLTg5LDYyICs4OSw2MiBAQAogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CiAgICAgICAgIFN0cmluZyBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgU3RyaW5nIGNvbnRleHRSb290ID0gYXJnc1syXTsKLSAgICAgICAgCi0gICAgCXRyeSB7Ci0JICAgIAlTdHJpbmdbXSB0ZXN0VXJscyA9IG5ldyBTdHJpbmdbMV07Ci0JICAgIAl0ZXN0VXJsc1swXSA9ICJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFN0cmluZ1tdIHRlc3RVcmxzID0gbmV3IFN0cmluZ1sxXTsKKyAgICAgICAgICAgIHRlc3RVcmxzWzBdID0gImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICArICIvanNwL3Rlc3QuanNwIjsKLQkgICAgCVN0cmluZ1tdIG1ldGhvZHMgPSBuZXcgU3RyaW5nWzJdOwotCSAgICAJbWV0aG9kc1swXSA9ICJHRVQiOwotCSAgICAJbWV0aG9kc1sxXSA9ICJHRVQiOwotCSAgICAJSGFzaHRhYmxlW10gcGFyYW1zVGFibGVzID0gbmV3IEhhc2h0YWJsZVs0XTsKLQkgICAgCUhhc2h0YWJsZSBwYXJhbXMxID0gbmV3IEhhc2h0YWJsZSgpOwotCSAgICAJcGFyYW1zMS5wdXQoInRlc3QiLCAib24iKTsKLQkgICAgCXBhcmFtczEucHV0KCJudW1fdGVsIiwgIjA2NTIxNjQ2NCIpOwotCSAgICAJSGFzaHRhYmxlIHBhcmFtczIgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JICAgIAlwYXJhbXMyLnB1dCgidGVzdCIsICJvbiIpOwotCSAgICAJcGFyYW1zMi5wdXQoIm51bV90ZWwiLCAiMDU3Nzc0OTA1OSIpOwotCSAgICAJSGFzaHRhYmxlIHBhcmFtczMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JICAgIAlwYXJhbXMzLnB1dCgibnVtX3RlbCIsICIwNjUyMzYxNDU2Iik7Ci0JICAgIAlIYXNodGFibGUgcGFyYW1zNCA9IG5ldyBIYXNodGFibGUoKTsKLQkgICAgCVN0cmluZ1tdIG11bHRpcGxlUGFyYW0gPSBuZXcgU3RyaW5nWzNdOwotCSAgICAJbXVsdGlwbGVQYXJhbVswXSA9ICIxIjsKLQkgICAgCW11bHRpcGxlUGFyYW1bMV0gPSAiMiI7Ci0JICAgIAltdWx0aXBsZVBhcmFtWzJdID0gIjMiOwotCSAgICAJcGFyYW1zNC5wdXQoImEiLCBtdWx0aXBsZVBhcmFtKTsKLQkgICAgCXBhcmFtczQucHV0KCJiIiwgIjIiKTsKLQkgICAgCXBhcmFtczQucHV0KCJjIiwgIjMiKTsKLQkgICAgCXBhcmFtc1RhYmxlc1swXSA9IHBhcmFtczE7Ci0JICAgIAlwYXJhbXNUYWJsZXNbMV0gPSBwYXJhbXMyOwotCSAgICAJcGFyYW1zVGFibGVzWzJdID0gcGFyYW1zMzsKLQkgICAgCXBhcmFtc1RhYmxlc1szXSA9IHBhcmFtczQ7Ci0JICAgIAlmb3IoaW50IGkgPSAwOyBpIDwgMTsgaSsrKSB7Ci0JICAgIAkJSGFzaHRhYmxlIHJlcVByb3BlcnRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JICAgIAkJcmVxUHJvcGVydGllcy5wdXQoTUVUSE9ELCBtZXRob2RzW2ldKTsKLQkgICAgCQlyZXFQcm9wZXJ0aWVzLnB1dChSRVFVRVNUX1BBUkFNUywgcGFyYW1zVGFibGVzW2ldKTsKLQkgICAgCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgIiArIChpICsgMSkgKyAiOiAiICsgdGVzdFVybHNbaV0gKyAiICgiICsgbWV0aG9kc1tpXSArICIpIik7Ci0JICAgIAkJU3lzdGVtLm91dC5wcmludGxuKCJQYXJhbWV0ZXJzOiIpOwotCQkgICAgICAgIGZvcihFbnVtZXJhdGlvbiBrZXlzID0gKHBhcmFtc1RhYmxlc1tpXSkua2V5cygpOyBrZXlzLmhhc01vcmVFbGVtZW50cygpOyApIHsKLQkJICAgICAgICAgICAgU3RyaW5nIHBhcmFtTmFtZSA9IChTdHJpbmcpIGtleXMubmV4dEVsZW1lbnQoKTsKLQkJICAgICAgICAgICAgT2JqZWN0IHBhcmFtVmFsdWVzID0gKHBhcmFtc1RhYmxlc1tpXSkuZ2V0KHBhcmFtTmFtZSk7Ci0JCSAgICAgICAgICAgIGlmKHBhcmFtVmFsdWVzIGluc3RhbmNlb2YgU3RyaW5nW10pIHsKLQkJICAgICAgICAgICAgCS8vIE11bHRpcGxlIHBhcmFtZXRlciB2YWx1ZXMKLQkJICAgICAgICAgICAgCVN0cmluZ1tdIHBhcmFtVmFsdWVMaXN0ID0gKFN0cmluZ1tdKSBwYXJhbVZhbHVlczsKLQkJICAgICAgICAgICAgCWZvcihpbnQgaiA9IDA7IGogPCBwYXJhbVZhbHVlTGlzdC5sZW5ndGg7IGorKykgewotCQkgICAgICAgICAgICAJCVN0cmluZyBwYXJhbVZhbHVlID0gcGFyYW1WYWx1ZUxpc3Rbal07Ci0JCQkgICAgICAgICAgICAJaWYoaiA9PSAwKQotCQkJICAgICAgICAgICAgCQlTeXN0ZW0ub3V0LnByaW50KHBhcmFtTmFtZSArICIgPSAiICsgcGFyYW1WYWx1ZSk7Ci0JCQkgICAgICAgICAgICAJZWxzZQotCQkJICAgICAgICAgICAgCQlTeXN0ZW0ub3V0LnByaW50KCIsICIgKyBwYXJhbVZhbHVlKTsKLQkJCSAgICAgICAgICAgIH0KLQkJCSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkgICAgICAgICAgICB9Ci0JCSAgICAgICAgICAgIGVsc2UgewotCQkgICAgICAgICAgICAJLy8gU2luZ2xlIHBhcmFtZXRlciB2YWx1ZQotCQkgICAgICAgICAgICAJU3RyaW5nIHBhcmFtVmFsdWUgPSAoU3RyaW5nKSBwYXJhbVZhbHVlczsKLQkJCSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwYXJhbU5hbWUgKyAiID0gIiArIHBhcmFtVmFsdWUpOwotCQkgICAgICAgICAgICB9Ci0JCSAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nW10gbWV0aG9kcyA9IG5ldyBTdHJpbmdbMl07CisgICAgICAgICAgICBtZXRob2RzWzBdID0gIkdFVCI7CisgICAgICAgICAgICBtZXRob2RzWzFdID0gIkdFVCI7CisgICAgICAgICAgICBIYXNodGFibGVbXSBwYXJhbXNUYWJsZXMgPSBuZXcgSGFzaHRhYmxlWzRdOworICAgICAgICAgICAgSGFzaHRhYmxlIHBhcmFtczEgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgICAgICBwYXJhbXMxLnB1dCgidGVzdCIsICJvbiIpOworICAgICAgICAgICAgcGFyYW1zMS5wdXQoIm51bV90ZWwiLCAiMDY1MjE2NDY0Iik7CisgICAgICAgICAgICBIYXNodGFibGUgcGFyYW1zMiA9IG5ldyBIYXNodGFibGUoKTsKKyAgICAgICAgICAgIHBhcmFtczIucHV0KCJ0ZXN0IiwgIm9uIik7CisgICAgICAgICAgICBwYXJhbXMyLnB1dCgibnVtX3RlbCIsICIwNTc3NzQ5MDU5Iik7CisgICAgICAgICAgICBIYXNodGFibGUgcGFyYW1zMyA9IG5ldyBIYXNodGFibGUoKTsKKyAgICAgICAgICAgIHBhcmFtczMucHV0KCJudW1fdGVsIiwgIjA2NTIzNjE0NTYiKTsKKyAgICAgICAgICAgIEhhc2h0YWJsZSBwYXJhbXM0ID0gbmV3IEhhc2h0YWJsZSgpOworICAgICAgICAgICAgU3RyaW5nW10gbXVsdGlwbGVQYXJhbSA9IG5ldyBTdHJpbmdbM107CisgICAgICAgICAgICBtdWx0aXBsZVBhcmFtWzBdID0gIjEiOworICAgICAgICAgICAgbXVsdGlwbGVQYXJhbVsxXSA9ICIyIjsKKyAgICAgICAgICAgIG11bHRpcGxlUGFyYW1bMl0gPSAiMyI7CisgICAgICAgICAgICBwYXJhbXM0LnB1dCgiYSIsIG11bHRpcGxlUGFyYW0pOworICAgICAgICAgICAgcGFyYW1zNC5wdXQoImIiLCAiMiIpOworICAgICAgICAgICAgcGFyYW1zNC5wdXQoImMiLCAiMyIpOworICAgICAgICAgICAgcGFyYW1zVGFibGVzWzBdID0gcGFyYW1zMTsKKyAgICAgICAgICAgIHBhcmFtc1RhYmxlc1sxXSA9IHBhcmFtczI7CisgICAgICAgICAgICBwYXJhbXNUYWJsZXNbMl0gPSBwYXJhbXMzOworICAgICAgICAgICAgcGFyYW1zVGFibGVzWzNdID0gcGFyYW1zNDsKKyAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCAxOyBpKyspIHsKKyAgICAgICAgICAgICAgICBIYXNodGFibGUgcmVxUHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoKTsKKyAgICAgICAgICAgICAgICByZXFQcm9wZXJ0aWVzLnB1dChNRVRIT0QsIG1ldGhvZHNbaV0pOworICAgICAgICAgICAgICAgIHJlcVByb3BlcnRpZXMucHV0KFJFUVVFU1RfUEFSQU1TLCBwYXJhbXNUYWJsZXNbaV0pOworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCAiICsgKGkgKyAxKSArICI6ICIgKyB0ZXN0VXJsc1tpXSArICIgKCIgKyBtZXRob2RzW2ldICsgIikiKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBhcmFtZXRlcnM6Iik7CisgICAgICAgICAgICAgICAgZm9yKEVudW1lcmF0aW9uIGtleXMgPSAocGFyYW1zVGFibGVzW2ldKS5rZXlzKCk7IGtleXMuaGFzTW9yZUVsZW1lbnRzKCk7ICkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGFyYW1OYW1lID0gKFN0cmluZykga2V5cy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgICAgICAgICBPYmplY3QgcGFyYW1WYWx1ZXMgPSAocGFyYW1zVGFibGVzW2ldKS5nZXQocGFyYW1OYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYocGFyYW1WYWx1ZXMgaW5zdGFuY2VvZiBTdHJpbmdbXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgcGFyYW1ldGVyIHZhbHVlcworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nW10gcGFyYW1WYWx1ZUxpc3QgPSAoU3RyaW5nW10pIHBhcmFtVmFsdWVzOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IHBhcmFtVmFsdWVMaXN0Lmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBhcmFtVmFsdWUgPSBwYXJhbVZhbHVlTGlzdFtqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihqID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQocGFyYW1OYW1lICsgIiA9ICIgKyBwYXJhbVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiwgIiArIHBhcmFtVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaW5nbGUgcGFyYW1ldGVyIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGFyYW1WYWx1ZSA9IChTdHJpbmcpIHBhcmFtVmFsdWVzOworICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHBhcmFtTmFtZSArICIgPSAiICsgcGFyYW1WYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAKIAogICAgICAgICAgICAgICAgIFN0cmluZ1tdIGNvb2tpZUxpc3QgPSBuZXcgU3RyaW5nWzldOwpAQCAtMTgwLDM1ICsxODAsMzUgQEAKIAogICAgICAgICAgICAgICAgIHJlcVByb3BlcnRpZXMucHV0KENPT0tJRVMsIGNvb2tpZUxpc3QpOwogCi0JICAgIAkJSGFzaHRhYmxlIHJlc3VsdCA9IGNhbGwodGVzdFVybHNbaV0sIHJlcVByb3BlcnRpZXMpOwotCSAgICAJCVN5c3RlbS5vdXQucHJpbnRsbigiUmVzdWx0OiIpOwotCSAgICAJCVN5c3RlbS5vdXQucHJpbnRsbiggIlJlc3BvbnNlIENvZGUgPSAiICsgKCAoSW50ZWdlcikgcmVzdWx0LmdldChSRVNQT05TRV9DT0RFKSApLnRvU3RyaW5nKCkgKTsKLQkgICAgCQlTeXN0ZW0ub3V0LnByaW50bG4oICJSZXNwb25zZSBNZXNzYWdlID0gIiArIChTdHJpbmcpIHJlc3VsdC5nZXQoUkVTUE9OU0VfTUVTU0FHRSkgKTsKLQkgICAgCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIENvbnRlbnQ6Iik7Ci0JICAgIAkJU3lzdGVtLm91dC5wcmludGxuKCAoU3RyaW5nKSByZXN1bHQuZ2V0KFJFU1BPTlNFX0NPTlRFTlQpICk7Ci0JICAgIAkJU3RyaW5nW10gc2V0Q29va2llcyA9IChTdHJpbmdbXSkgcmVzdWx0LmdldChDT09LSUVTKTsKLQkgICAgCQlpZiggKHNldENvb2tpZXMgIT0gbnVsbCkgJiYgKHNldENvb2tpZXMubGVuZ3RoID4gMCkgKSB7Ci0JICAgIAkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ29va2llcyBzZXQgYnkgU2VydmVyOiIpOwotCSAgICAJCQlmb3IoaW50IGogPSAwOyBqIDwgc2V0Q29va2llcy5sZW5ndGg7IGorKykgewotCSAgICAJCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb29raWUgIiArIChqICsgMSkgKyAiID0gIiArIHNldENvb2tpZXNbal0pOwotCSAgICAJCQl9Ci0JICAgIAkJfQotCSAgICAJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCSAgICAJCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCSAgICAJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCSAgICAJCVN5c3RlbS5vdXQucHJpbnRsbigpOworICAgICAgICAgICAgICAgIEhhc2h0YWJsZSByZXN1bHQgPSBjYWxsKHRlc3RVcmxzW2ldLCByZXFQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3VsdDoiKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJSZXNwb25zZSBDb2RlID0gIiArICggKEludGVnZXIpIHJlc3VsdC5nZXQoUkVTUE9OU0VfQ09ERSkgKS50b1N0cmluZygpICk7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiUmVzcG9uc2UgTWVzc2FnZSA9ICIgKyAoU3RyaW5nKSByZXN1bHQuZ2V0KFJFU1BPTlNFX01FU1NBR0UpICk7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBDb250ZW50OiIpOworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggKFN0cmluZykgcmVzdWx0LmdldChSRVNQT05TRV9DT05URU5UKSApOworICAgICAgICAgICAgICAgIFN0cmluZ1tdIHNldENvb2tpZXMgPSAoU3RyaW5nW10pIHJlc3VsdC5nZXQoQ09PS0lFUyk7CisgICAgICAgICAgICAgICAgaWYoIChzZXRDb29raWVzICE9IG51bGwpICYmIChzZXRDb29raWVzLmxlbmd0aCA+IDApICkgeworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvb2tpZXMgc2V0IGJ5IFNlcnZlcjoiKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IHNldENvb2tpZXMubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29va2llICIgKyAoaiArIDEpICsgIiA9ICIgKyBzZXRDb29raWVzW2pdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKIAogICAgICAgICAgICAgICAgIGlmICggKChJbnRlZ2VyKXJlc3VsdC5nZXQoUkVTUE9OU0VfQ09ERSkpID09IDIwMCl7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgfQotCSAgICAJfQotCSAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleGMpIHsKLQkgICAgCVN5c3RlbS5lcnIucHJpbnRsbiggIkV4Y2VwdGlvbiBvY2N1cnJlZDogIiArIGV4Yy5nZXRNZXNzYWdlKCkgKTsKLQkgICAgCWV4Yy5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4YykgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiRXhjZXB0aW9uIG9jY3VycmVkOiAiICsgZXhjLmdldE1lc3NhZ2UoKSApOworICAgICAgICAgICAgZXhjLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKLQkgICAgfQorICAgICAgICB9CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCkBAIC0yNTIsMzMgKzI1MiwzMyBAQAogICAgICAqKiBAdGhyb3dzIElPRXhjZXB0aW9uIGlmIGFuIEkvTyBleGNlcHRpb24gb2NjdXJzIGR1cmluZyB0aGUgSFRUUCByZXF1ZXN0CiAgICAgICoqLwogICAgIHB1YmxpYyBzdGF0aWMgSGFzaHRhYmxlIGNhbGwoU3RyaW5nIHVybCwgSGFzaHRhYmxlIHJlcXVlc3RQcm9wZXJ0aWVzKQotICAgIAkJdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlpZih1cmwgPT0gbnVsbCkKLQkJCXRocm93IG5ldyBNYWxmb3JtZWRVUkxFeGNlcHRpb24oIlVSTCBhZGRyZXNzIGNhbm5vdCBiZSBudWxsISIpOwotCQlpZihyZXF1ZXN0UHJvcGVydGllcyA9PSBudWxsKQotCQkJdGhyb3cgbmV3IE1hbGZvcm1lZFVSTEV4Y2VwdGlvbigiVVJMIHJlcXVlc3QgcHJvcGVydGllcyBjYW5ub3QgYmUgbnVsbCEiKTsKLQkJLy8gZWxzZQotCQlIYXNodGFibGUgaGVhZGVycyA9IChIYXNodGFibGUpIHJlcXVlc3RQcm9wZXJ0aWVzLmdldChIRUFERVJTKTsKLQkJaWYoaGVhZGVycyA9PSBudWxsKQotCQkJaGVhZGVycyA9IG5ldyBIYXNodGFibGUoKTsKLQkJaWYoICggKCAoU3RyaW5nKSBoZWFkZXJzLmdldCgiVXNlci1BZ2VudCIpICkgPT0gbnVsbCApIHx8ICggKCAoU3RyaW5nKSBoZWFkZXJzLmdldCgiVXNlci1BZ2VudCIpICkuZXF1YWxzKCIiKSApICkKLQkJCWhlYWRlcnMucHV0KCJVc2VyLUFnZW50IiwgREVGQVVMVF9VU0VSX0FHRU5UX0hFQURFUik7Ci0JCWlmKCAoICggKFN0cmluZykgaGVhZGVycy5nZXQoIkNvbm5lY3Rpb24iKSApID09IG51bGwgKSB8fCAoICggKFN0cmluZykgaGVhZGVycy5nZXQoIkNvbm5lY3Rpb24iKSApLmVxdWFscygiIikgKSApCi0JCQloZWFkZXJzLnB1dCgiQ29ubmVjdGlvbiIsIERFRkFVTFRfQ09OTkVDVElPTl9IRUFERVIpOwotCQlTdHJpbmcgbWV0aG9kID0gKFN0cmluZykgcmVxdWVzdFByb3BlcnRpZXMuZ2V0KE1FVEhPRCk7Ci0JCWlmKCAobWV0aG9kID09IG51bGwpIHx8ICEoIG1ldGhvZC5lcXVhbHNJZ25vcmVDYXNlKEdFVF9NRVRIT0QpIHx8IG1ldGhvZC5lcXVhbHNJZ25vcmVDYXNlKFBPU1RfTUVUSE9EKSApICkKLQkJCW1ldGhvZCA9IERFRkFVTFRfTUVUSE9EOwotCQlIYXNodGFibGUgcmVxdWVzdFBhcmFtcyA9IChIYXNodGFibGUpIHJlcXVlc3RQcm9wZXJ0aWVzLmdldChSRVFVRVNUX1BBUkFNUyk7Ci0JCWlmKHJlcXVlc3RQYXJhbXMgPT0gbnVsbCkKLQkJCXJlcXVlc3RQYXJhbXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCVN0cmluZ1tdIGNvb2tpZXMgPSAoU3RyaW5nW10pIHJlcXVlc3RQcm9wZXJ0aWVzLmdldChDT09LSUVTKTsKLQkJaWYoY29va2llcyA9PSBudWxsKQotCQkJY29va2llcyA9IG5ldyBTdHJpbmdbMF07Ci0JCWlmKCBtZXRob2QuZXF1YWxzSWdub3JlQ2FzZShHRVRfTUVUSE9EKSApCi0JCQlyZXR1cm4oIGRvR2V0Q2FsbCh1cmwsIGhlYWRlcnMsIGNvb2tpZXMsIHJlcXVlc3RQYXJhbXMpICk7Ci0JCWVsc2UKLQkJCXJldHVybiggZG9Qb3N0Q2FsbCh1cmwsIGhlYWRlcnMsIGNvb2tpZXMsIHJlcXVlc3RQYXJhbXMpICk7Ci0JfQorICAgICAgICAgICAgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworICAgICAgICBpZih1cmwgPT0gbnVsbCkKKyAgICAgICAgICAgIHRocm93IG5ldyBNYWxmb3JtZWRVUkxFeGNlcHRpb24oIlVSTCBhZGRyZXNzIGNhbm5vdCBiZSBudWxsISIpOworICAgICAgICBpZihyZXF1ZXN0UHJvcGVydGllcyA9PSBudWxsKQorICAgICAgICAgICAgdGhyb3cgbmV3IE1hbGZvcm1lZFVSTEV4Y2VwdGlvbigiVVJMIHJlcXVlc3QgcHJvcGVydGllcyBjYW5ub3QgYmUgbnVsbCEiKTsKKyAgICAgICAgLy8gZWxzZQorICAgICAgICBIYXNodGFibGUgaGVhZGVycyA9IChIYXNodGFibGUpIHJlcXVlc3RQcm9wZXJ0aWVzLmdldChIRUFERVJTKTsKKyAgICAgICAgaWYoaGVhZGVycyA9PSBudWxsKQorICAgICAgICAgICAgaGVhZGVycyA9IG5ldyBIYXNodGFibGUoKTsKKyAgICAgICAgaWYoICggKCAoU3RyaW5nKSBoZWFkZXJzLmdldCgiVXNlci1BZ2VudCIpICkgPT0gbnVsbCApIHx8ICggKCAoU3RyaW5nKSBoZWFkZXJzLmdldCgiVXNlci1BZ2VudCIpICkuZXF1YWxzKCIiKSApICkKKyAgICAgICAgICAgIGhlYWRlcnMucHV0KCJVc2VyLUFnZW50IiwgREVGQVVMVF9VU0VSX0FHRU5UX0hFQURFUik7CisgICAgICAgIGlmKCAoICggKFN0cmluZykgaGVhZGVycy5nZXQoIkNvbm5lY3Rpb24iKSApID09IG51bGwgKSB8fCAoICggKFN0cmluZykgaGVhZGVycy5nZXQoIkNvbm5lY3Rpb24iKSApLmVxdWFscygiIikgKSApCisgICAgICAgICAgICBoZWFkZXJzLnB1dCgiQ29ubmVjdGlvbiIsIERFRkFVTFRfQ09OTkVDVElPTl9IRUFERVIpOworICAgICAgICBTdHJpbmcgbWV0aG9kID0gKFN0cmluZykgcmVxdWVzdFByb3BlcnRpZXMuZ2V0KE1FVEhPRCk7CisgICAgICAgIGlmKCAobWV0aG9kID09IG51bGwpIHx8ICEoIG1ldGhvZC5lcXVhbHNJZ25vcmVDYXNlKEdFVF9NRVRIT0QpIHx8IG1ldGhvZC5lcXVhbHNJZ25vcmVDYXNlKFBPU1RfTUVUSE9EKSApICkKKyAgICAgICAgICAgIG1ldGhvZCA9IERFRkFVTFRfTUVUSE9EOworICAgICAgICBIYXNodGFibGUgcmVxdWVzdFBhcmFtcyA9IChIYXNodGFibGUpIHJlcXVlc3RQcm9wZXJ0aWVzLmdldChSRVFVRVNUX1BBUkFNUyk7CisgICAgICAgIGlmKHJlcXVlc3RQYXJhbXMgPT0gbnVsbCkKKyAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgIFN0cmluZ1tdIGNvb2tpZXMgPSAoU3RyaW5nW10pIHJlcXVlc3RQcm9wZXJ0aWVzLmdldChDT09LSUVTKTsKKyAgICAgICAgaWYoY29va2llcyA9PSBudWxsKQorICAgICAgICAgICAgY29va2llcyA9IG5ldyBTdHJpbmdbMF07CisgICAgICAgIGlmKCBtZXRob2QuZXF1YWxzSWdub3JlQ2FzZShHRVRfTUVUSE9EKSApCisgICAgICAgICAgICByZXR1cm4oIGRvR2V0Q2FsbCh1cmwsIGhlYWRlcnMsIGNvb2tpZXMsIHJlcXVlc3RQYXJhbXMpICk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiggZG9Qb3N0Q2FsbCh1cmwsIGhlYWRlcnMsIGNvb2tpZXMsIHJlcXVlc3RQYXJhbXMpICk7CisgICAgfQogCiAgICAgLyoqCiAgICAgICoqIFN0YXRpYyBwcm90ZWN0ZWQgbWV0aG9kIGZvciBwZXJmb3JtaW5nIEdFVCBIVFRQIHJlcXVlc3QgdG8gdGhlIHNwZWNpZmllZCBVUkwuPGJyPgpAQCAtMjkzLDcgKzI5Myw3IEBACiAgICAgICoqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgYW4gSS9PIGV4Y2VwdGlvbiBvY2N1cnMgZHVyaW5nIHRoZSBIVFRQIHJlcXVlc3QKICAgICAgKiovCiAgICAgcHJvdGVjdGVkIHN0YXRpYyBIYXNodGFibGUgZG9HZXRDYWxsKFN0cmluZyB1cmwsIEhhc2h0YWJsZSBoZWFkZXJzLCBTdHJpbmdbXSBjb29raWVzLCBIYXNodGFibGUgcmVxdWVzdFBhcmFtcykKLQkJCXRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgLy8gU2V0IHBhcmFtZXRlcnMKIAogICAgICAgICBTdHJpbmdCdWZmZXIgcXVlcnlTdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CkBAIC0zMDEsMjUgKzMwMSwyNSBAQAogICAgICAgICAgICAgU3RyaW5nIHBhcmFtTmFtZSA9IChTdHJpbmcpIGtleXMubmV4dEVsZW1lbnQoKTsKICAgICAgICAgICAgIE9iamVjdCBwYXJhbVZhbHVlcyA9IHJlcXVlc3RQYXJhbXMuZ2V0KHBhcmFtTmFtZSk7CiAgICAgICAgICAgICBpZihwYXJhbVZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZ1tdKSB7Ci0gICAgICAgICAgICAJLy8gTXVsdGlwbGUgcGFyYW1ldGVyIHZhbHVlcwotICAgICAgICAgICAgCVN0cmluZ1tdIHBhcmFtVmFsdWVMaXN0ID0gKFN0cmluZ1tdKSBwYXJhbVZhbHVlczsKLSAgICAgICAgICAgIAlmb3IoaW50IGkgPSAwOyBpIDwgcGFyYW1WYWx1ZUxpc3QubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIAkJU3RyaW5nIHBhcmFtVmFsdWUgPSBwYXJhbVZhbHVlTGlzdFtpXTsKLQkgICAgICAgICAgICAJaWYocXVlcnlTdHJpbmcubGVuZ3RoKCkgPT0gMCkKLQkgICAgICAgICAgICAJCXF1ZXJ5U3RyaW5nLmFwcGVuZCgiPyIpOwotCSAgICAgICAgICAgIAllbHNlCi0JICAgICAgICAgICAgCQlxdWVyeVN0cmluZy5hcHBlbmQoIiYiKTsKLQkgICAgICAgICAgICAJcXVlcnlTdHJpbmcuYXBwZW5kKCBVUkxFbmNvZGVyLmVuY29kZShwYXJhbU5hbWUsIklTTzg4NTktMSIpICsgIj0iICsgVVJMRW5jb2Rlci5lbmNvZGUocGFyYW1WYWx1ZSwiSVNPODg1OS0xIikgKTsKLQkgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgcGFyYW1ldGVyIHZhbHVlcworICAgICAgICAgICAgICAgIFN0cmluZ1tdIHBhcmFtVmFsdWVMaXN0ID0gKFN0cmluZ1tdKSBwYXJhbVZhbHVlczsKKyAgICAgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgcGFyYW1WYWx1ZUxpc3QubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBhcmFtVmFsdWUgPSBwYXJhbVZhbHVlTGlzdFtpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYocXVlcnlTdHJpbmcubGVuZ3RoKCkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZCgiPyIpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVN0cmluZy5hcHBlbmQoIiYiKTsKKyAgICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKCBVUkxFbmNvZGVyLmVuY29kZShwYXJhbU5hbWUsIklTTzg4NTktMSIpICsgIj0iICsgVVJMRW5jb2Rlci5lbmNvZGUocGFyYW1WYWx1ZSwiSVNPODg1OS0xIikgKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIAkvLyBTaW5nbGUgcGFyYW1ldGVyIHZhbHVlCi0gICAgICAgICAgICAJU3RyaW5nIHBhcmFtVmFsdWUgPSAoU3RyaW5nKSBwYXJhbVZhbHVlczsKLSAgICAgICAgICAgIAlpZihxdWVyeVN0cmluZy5sZW5ndGgoKSA9PSAwKQotICAgICAgICAgICAgCQlxdWVyeVN0cmluZy5hcHBlbmQoIj8iKTsKLSAgICAgICAgICAgIAllbHNlCi0gICAgICAgICAgICAJCXF1ZXJ5U3RyaW5nLmFwcGVuZCgiJiIpOwotICAgICAgICAgICAgCXF1ZXJ5U3RyaW5nLmFwcGVuZCggVVJMRW5jb2Rlci5lbmNvZGUocGFyYW1OYW1lLCJJU084ODU5LTEiKSArICI9IiArIFVSTEVuY29kZXIuZW5jb2RlKHBhcmFtVmFsdWUsIklTTzg4NTktMSIpICk7CisgICAgICAgICAgICAgICAgLy8gU2luZ2xlIHBhcmFtZXRlciB2YWx1ZQorICAgICAgICAgICAgICAgIFN0cmluZyBwYXJhbVZhbHVlID0gKFN0cmluZykgcGFyYW1WYWx1ZXM7CisgICAgICAgICAgICAgICAgaWYocXVlcnlTdHJpbmcubGVuZ3RoKCkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKCI/Iik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBxdWVyeVN0cmluZy5hcHBlbmQoIiYiKTsKKyAgICAgICAgICAgICAgICBxdWVyeVN0cmluZy5hcHBlbmQoIFVSTEVuY29kZXIuZW5jb2RlKHBhcmFtTmFtZSwiSVNPODg1OS0xIikgKyAiPSIgKyBVUkxFbmNvZGVyLmVuY29kZShwYXJhbVZhbHVlLCJJU084ODU5LTEiKSApOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIFVSTCB1cmxUb0NhbGwgPSBuZXcgVVJMKCB1cmwgKyBxdWVyeVN0cmluZy50b1N0cmluZygpICk7CkBAIC0zMzIsMTYgKzMzMiwxNiBAQAogICAgICAgICAgICAgU3RyaW5nIGhlYWRlck5hbWUgPSAoU3RyaW5nKSBrZXlzLm5leHRFbGVtZW50KCk7CiAgICAgICAgICAgICBTdHJpbmcgaGVhZGVyVmFsdWUgPSAoU3RyaW5nKSBoZWFkZXJzLmdldChoZWFkZXJOYW1lKTsKICAgICAgICAgICAgIGlmKCBoZWFkZXJOYW1lLmVxdWFsc0lnbm9yZUNhc2UoIkNvb2tpZSIpICkKLSAgICAgICAgICAgIAljb29raWVzTGlzdC5hcHBlbmQoaGVhZGVyVmFsdWUpOworICAgICAgICAgICAgICAgIGNvb2tpZXNMaXN0LmFwcGVuZChoZWFkZXJWYWx1ZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgIAkJdXJsQ29ubmVjdGlvbi5zZXRSZXF1ZXN0UHJvcGVydHkoaGVhZGVyTmFtZSwgaGVhZGVyVmFsdWUpOworICAgICAgICAgICAgICAgIHVybENvbm5lY3Rpb24uc2V0UmVxdWVzdFByb3BlcnR5KGhlYWRlck5hbWUsIGhlYWRlclZhbHVlKTsKICAgICAgICAgfQogICAgICAgICAvLyBTZXQgY29va2llcwogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkrKykgewotICAgICAgICAJaWYoY29va2llc0xpc3QubGVuZ3RoKCkgPiAwKQotICAgICAgICAJCWNvb2tpZXNMaXN0LmFwcGVuZCgiLCIgKyBjb29raWVzW2ldKTsKLSAgICAgICAgCWVsc2UKLSAgICAgICAgCQljb29raWVzTGlzdC5hcHBlbmQoY29va2llc1tpXSk7CisgICAgICAgICAgICBpZihjb29raWVzTGlzdC5sZW5ndGgoKSA+IDApCisgICAgICAgICAgICAgICAgY29va2llc0xpc3QuYXBwZW5kKCIsIiArIGNvb2tpZXNbaV0pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvb2tpZXNMaXN0LmFwcGVuZChjb29raWVzW2ldKTsKICAgICAgICAgfQogICAgICAgICB1cmxDb25uZWN0aW9uLnNldFJlcXVlc3RQcm9wZXJ0eSggIkNvb2tpZSIsIGNvb2tpZXNMaXN0LnRvU3RyaW5nKCkgKTsKICAgICAgICAgLy8gU2V0dGluZyBHRVQgbWV0aG9kCkBAIC0zNjUsMjEgKzM2NSwyMSBAQAogICAgICAgICAvLyBHZXQgcmVzcG9uc2UgbWVzc2FnZQogICAgICAgICBTdHJpbmcgcmVzcG9uc2VNZXNzYWdlID0gdXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZU1lc3NhZ2UoKTsKICAgICAgICAgaWYocmVzcG9uc2VNZXNzYWdlICE9IG51bGwpCi0gICAgICAgIAlyZXN1bHQucHV0KFJFU1BPTlNFX01FU1NBR0UsIHJlc3BvbnNlTWVzc2FnZSk7CisgICAgICAgICAgICByZXN1bHQucHV0KFJFU1BPTlNFX01FU1NBR0UsIHJlc3BvbnNlTWVzc2FnZSk7CiAgICAgICAgIC8vIFJlY2VpdmUgY29va2llcwogICAgICAgICBTdHJpbmcgcmV0dXJuZWRDb29raWVzU3RyID0gdXJsQ29ubmVjdGlvbi5nZXRIZWFkZXJGaWVsZCgiU2V0LUNvb2tpZSIpOwogICAgICAgICBpZihyZXR1cm5lZENvb2tpZXNTdHIgIT0gbnVsbCkgewotICAgICAgICAJU3RyaW5nVG9rZW5pemVyIGNvbW1hVG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihyZXR1cm5lZENvb2tpZXNTdHIsICIsIiwgZmFsc2UpOwotICAgICAgICAJaW50IHRva2VucyA9IGNvbW1hVG9rZW5pemVyLmNvdW50VG9rZW5zKCk7Ci0gICAgICAgIAlpZih0b2tlbnMgPiAwKSB7Ci0JICAgICAgICAJU3RyaW5nW10gcmV0dXJuZWRDb29raWVzID0gbmV3IFN0cmluZ1t0b2tlbnNdOwotCSAgICAgICAgCWludCB6ID0gMDsKLQkgICAgICAgIAl3aGlsZSggY29tbWFUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpICkgewotCSAgICAgICAgCQlyZXR1cm5lZENvb2tpZXNbel0gPSBjb21tYVRva2VuaXplci5uZXh0VG9rZW4oKTsKLQkgICAgICAgIAkJeisrOwotCQkJCX0KLQkgICAgICAgIAlyZXN1bHQucHV0KENPT0tJRVMsIHJldHVybmVkQ29va2llcyk7Ci0JICAgICAgICB9CisgICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXIgY29tbWFUb2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHJldHVybmVkQ29va2llc1N0ciwgIiwiLCBmYWxzZSk7CisgICAgICAgICAgICBpbnQgdG9rZW5zID0gY29tbWFUb2tlbml6ZXIuY291bnRUb2tlbnMoKTsKKyAgICAgICAgICAgIGlmKHRva2VucyA+IDApIHsKKyAgICAgICAgICAgICAgICBTdHJpbmdbXSByZXR1cm5lZENvb2tpZXMgPSBuZXcgU3RyaW5nW3Rva2Vuc107CisgICAgICAgICAgICAgICAgaW50IHogPSAwOworICAgICAgICAgICAgICAgIHdoaWxlKCBjb21tYVRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybmVkQ29va2llc1t6XSA9IGNvbW1hVG9rZW5pemVyLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICB6Kys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdC5wdXQoQ09PS0lFUywgcmV0dXJuZWRDb29raWVzKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXNwb25zZVJlYWRlci5jbG9zZSgpOwogICAgICAgICByZXR1cm4ocmVzdWx0KTsKQEAgLTM5OCw3ICszOTgsNyBAQAogICAgICAqKiBAdGhyb3dzIElPRXhjZXB0aW9uIGlmIGFuIEkvTyBleGNlcHRpb24gb2NjdXJzIGR1cmluZyB0aGUgSFRUUCByZXF1ZXN0CiAgICAgICoqLwogICAgIHByb3RlY3RlZCBzdGF0aWMgSGFzaHRhYmxlIGRvUG9zdENhbGwoU3RyaW5nIHVybCwgSGFzaHRhYmxlIGhlYWRlcnMsIFN0cmluZ1tdIGNvb2tpZXMsIEhhc2h0YWJsZSByZXF1ZXN0UGFyYW1zKQotCQkJdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworICAgICAgICAgICAgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBVUkwgdXJsVG9DYWxsID0gbmV3IFVSTCh1cmwpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiB1cmxDb25uZWN0aW9uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmxUb0NhbGwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgdXJsQ29ubmVjdGlvbi5zZXRJbnN0YW5jZUZvbGxvd1JlZGlyZWN0cyh0cnVlKTsKQEAgLTQwOSwxNiArNDA5LDE2IEBACiAgICAgICAgICAgICBTdHJpbmcgaGVhZGVyTmFtZSA9IChTdHJpbmcpIGtleXMubmV4dEVsZW1lbnQoKTsKICAgICAgICAgICAgIFN0cmluZyBoZWFkZXJWYWx1ZSA9IChTdHJpbmcpIGhlYWRlcnMuZ2V0KGhlYWRlck5hbWUpOwogICAgICAgICAgICAgaWYoIGhlYWRlck5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiQ29va2llIikgKQotICAgICAgICAgICAgCWNvb2tpZXNMaXN0LmFwcGVuZChoZWFkZXJWYWx1ZSk7CisgICAgICAgICAgICAgICAgY29va2llc0xpc3QuYXBwZW5kKGhlYWRlclZhbHVlKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgCQl1cmxDb25uZWN0aW9uLnNldFJlcXVlc3RQcm9wZXJ0eShoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZSk7CisgICAgICAgICAgICAgICAgdXJsQ29ubmVjdGlvbi5zZXRSZXF1ZXN0UHJvcGVydHkoaGVhZGVyTmFtZSwgaGVhZGVyVmFsdWUpOwogICAgICAgICB9CiAgICAgICAgIC8vIFNldCBjb29raWVzCiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIAlpZihjb29raWVzTGlzdC5sZW5ndGgoKSA+IDApCi0gICAgICAgIAkJY29va2llc0xpc3QuYXBwZW5kKCIsIiArIGNvb2tpZXNbaV0pOwotICAgICAgICAJZWxzZQotICAgICAgICAJCWNvb2tpZXNMaXN0LmFwcGVuZChjb29raWVzW2ldKTsKKyAgICAgICAgICAgIGlmKGNvb2tpZXNMaXN0Lmxlbmd0aCgpID4gMCkKKyAgICAgICAgICAgICAgICBjb29raWVzTGlzdC5hcHBlbmQoIiwiICsgY29va2llc1tpXSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29va2llc0xpc3QuYXBwZW5kKGNvb2tpZXNbaV0pOwogICAgICAgICB9CiAgICAgICAgIHVybENvbm5lY3Rpb24uc2V0UmVxdWVzdFByb3BlcnR5KCAiQ29va2llIiwgY29va2llc0xpc3QudG9TdHJpbmcoKSApOwogICAgICAgICAvLyBTZXR0aW5nIFBPU1QgbWV0aG9kCkBAIC00MzMsMjkgKzQzMywyOSBAQAogICAgICAgICAgICAgU3RyaW5nIHBhcmFtTmFtZSA9IChTdHJpbmcpIGtleXMubmV4dEVsZW1lbnQoKTsKICAgICAgICAgICAgIE9iamVjdCBwYXJhbVZhbHVlcyA9IHJlcXVlc3RQYXJhbXMuZ2V0KHBhcmFtTmFtZSk7CiAgICAgICAgICAgICBpZihwYXJhbVZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZ1tdKSB7Ci0gICAgICAgICAgICAJLy8gTXVsdGlwbGUgcGFyYW1ldGVyIHZhbHVlcwotICAgICAgICAgICAgCVN0cmluZ1tdIHBhcmFtVmFsdWVMaXN0ID0gKFN0cmluZ1tdKSBwYXJhbVZhbHVlczsKLSAgICAgICAgICAgIAlmb3IoaW50IGkgPSAwOyBpIDwgcGFyYW1WYWx1ZUxpc3QubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIAkJU3RyaW5nIHBhcmFtVmFsdWUgPSBwYXJhbVZhbHVlTGlzdFtpXTsKLQkJICAgICAgICAgICAgaWYod3JpdHRlblBhcmFtcyA+IDApIHsKLQkJICAgICAgICAgICAgCW91dC5wcmludCggIiYiICsgVVJMRW5jb2Rlci5lbmNvZGUocGFyYW1OYW1lLCJJU084ODU5LTEiKSArICI9IiArIFVSTEVuY29kZXIuZW5jb2RlKHBhcmFtVmFsdWUsIklTTzg4NTktMSIpICk7Ci0JCSAgICAgICAgICAgIH0KLQkJICAgICAgICAgICAgZWxzZSB7Ci0JCSAgICAgICAgICAgIAlvdXQucHJpbnQoIFVSTEVuY29kZXIuZW5jb2RlKHBhcmFtTmFtZSwiSVNPODg1OS0xIikgKyAiPSIgKyBVUkxFbmNvZGVyLmVuY29kZShwYXJhbVZhbHVlLCJJU084ODU5LTEiKSApOwotCQkgICAgICAgICAgICB9Ci0gICAgICAgICAgICAJCXdyaXR0ZW5QYXJhbXMrKzsKLQkgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgcGFyYW1ldGVyIHZhbHVlcworICAgICAgICAgICAgICAgIFN0cmluZ1tdIHBhcmFtVmFsdWVMaXN0ID0gKFN0cmluZ1tdKSBwYXJhbVZhbHVlczsKKyAgICAgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgcGFyYW1WYWx1ZUxpc3QubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBhcmFtVmFsdWUgPSBwYXJhbVZhbHVlTGlzdFtpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYod3JpdHRlblBhcmFtcyA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCggIiYiICsgVVJMRW5jb2Rlci5lbmNvZGUocGFyYW1OYW1lLCJJU084ODU5LTEiKSArICI9IiArIFVSTEVuY29kZXIuZW5jb2RlKHBhcmFtVmFsdWUsIklTTzg4NTktMSIpICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIFVSTEVuY29kZXIuZW5jb2RlKHBhcmFtTmFtZSwiSVNPODg1OS0xIikgKyAiPSIgKyBVUkxFbmNvZGVyLmVuY29kZShwYXJhbVZhbHVlLCJJU084ODU5LTEiKSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHdyaXR0ZW5QYXJhbXMrKzsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIAkvLyBTaW5nbGUgcGFyYW1ldGVyIHZhbHVlCi0gICAgICAgICAgICAJU3RyaW5nIHBhcmFtVmFsdWUgPSAoU3RyaW5nKSBwYXJhbVZhbHVlczsKLQkgICAgICAgICAgICBpZih3cml0dGVuUGFyYW1zID4gMCkgewotCSAgICAgICAgICAgIAlvdXQucHJpbnQoICImIiArIFVSTEVuY29kZXIuZW5jb2RlKHBhcmFtTmFtZSwiSVNPODg1OS0xIikgKyAiPSIgKyBVUkxFbmNvZGVyLmVuY29kZShwYXJhbVZhbHVlLCJJU084ODU5LTEiKSApOwotCSAgICAgICAgICAgIH0KLQkgICAgICAgICAgICBlbHNlIHsKLQkgICAgICAgICAgICAJb3V0LnByaW50KCBVUkxFbmNvZGVyLmVuY29kZShwYXJhbU5hbWUsIklTTzg4NTktMSIpICsgIj0iICsgVVJMRW5jb2Rlci5lbmNvZGUocGFyYW1WYWx1ZSwiSVNPODg1OS0xIikgKTsKLQkgICAgICAgICAgICB9Ci0gICAgICAgIAkJd3JpdHRlblBhcmFtcysrOworICAgICAgICAgICAgICAgIC8vIFNpbmdsZSBwYXJhbWV0ZXIgdmFsdWUKKyAgICAgICAgICAgICAgICBTdHJpbmcgcGFyYW1WYWx1ZSA9IChTdHJpbmcpIHBhcmFtVmFsdWVzOworICAgICAgICAgICAgICAgIGlmKHdyaXR0ZW5QYXJhbXMgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCggIiYiICsgVVJMRW5jb2Rlci5lbmNvZGUocGFyYW1OYW1lLCJJU084ODU5LTEiKSArICI9IiArIFVSTEVuY29kZXIuZW5jb2RlKHBhcmFtVmFsdWUsIklTTzg4NTktMSIpICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIFVSTEVuY29kZXIuZW5jb2RlKHBhcmFtTmFtZSwiSVNPODg1OS0xIikgKyAiPSIgKyBVUkxFbmNvZGVyLmVuY29kZShwYXJhbVZhbHVlLCJJU084ODU5LTEiKSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3cml0dGVuUGFyYW1zKys7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgb3V0LmNsb3NlKCk7CkBAIC00NzUsMjEgKzQ3NSwyMSBAQAogICAgICAgICAvLyBHZXQgcmVzcG9uc2UgbWVzc2FnZQogICAgICAgICBTdHJpbmcgcmVzcG9uc2VNZXNzYWdlID0gdXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZU1lc3NhZ2UoKTsKICAgICAgICAgaWYocmVzcG9uc2VNZXNzYWdlICE9IG51bGwpCi0gICAgICAgIAlyZXN1bHQucHV0KFJFU1BPTlNFX01FU1NBR0UsIHJlc3BvbnNlTWVzc2FnZSk7CisgICAgICAgICAgICByZXN1bHQucHV0KFJFU1BPTlNFX01FU1NBR0UsIHJlc3BvbnNlTWVzc2FnZSk7CiAgICAgICAgIC8vIFJlY2VpdmUgY29va2llcwogICAgICAgICBTdHJpbmcgcmV0dXJuZWRDb29raWVzU3RyID0gdXJsQ29ubmVjdGlvbi5nZXRIZWFkZXJGaWVsZCgiU2V0LUNvb2tpZSIpOwogICAgICAgICBpZihyZXR1cm5lZENvb2tpZXNTdHIgIT0gbnVsbCkgewotICAgICAgICAJU3RyaW5nVG9rZW5pemVyIGNvbW1hVG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihyZXR1cm5lZENvb2tpZXNTdHIsICIsIiwgZmFsc2UpOwotICAgICAgICAJaW50IHRva2VucyA9IGNvbW1hVG9rZW5pemVyLmNvdW50VG9rZW5zKCk7Ci0gICAgICAgIAlpZih0b2tlbnMgPiAwKSB7Ci0JICAgICAgICAJU3RyaW5nW10gcmV0dXJuZWRDb29raWVzID0gbmV3IFN0cmluZ1t0b2tlbnNdOwotCSAgICAgICAgCWludCB6ID0gMDsKLQkgICAgICAgIAl3aGlsZSggY29tbWFUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpICkgewotCSAgICAgICAgCQlyZXR1cm5lZENvb2tpZXNbel0gPSBjb21tYVRva2VuaXplci5uZXh0VG9rZW4oKTsKLQkgICAgICAgIAkJeisrOwotCQkJCX0KLQkgICAgICAgIAlyZXN1bHQucHV0KENPT0tJRVMsIHJldHVybmVkQ29va2llcyk7Ci0JICAgICAgICB9CisgICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXIgY29tbWFUb2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHJldHVybmVkQ29va2llc1N0ciwgIiwiLCBmYWxzZSk7CisgICAgICAgICAgICBpbnQgdG9rZW5zID0gY29tbWFUb2tlbml6ZXIuY291bnRUb2tlbnMoKTsKKyAgICAgICAgICAgIGlmKHRva2VucyA+IDApIHsKKyAgICAgICAgICAgICAgICBTdHJpbmdbXSByZXR1cm5lZENvb2tpZXMgPSBuZXcgU3RyaW5nW3Rva2Vuc107CisgICAgICAgICAgICAgICAgaW50IHogPSAwOworICAgICAgICAgICAgICAgIHdoaWxlKCBjb21tYVRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybmVkQ29va2llc1t6XSA9IGNvbW1hVG9rZW5pemVyLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICB6Kys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdC5wdXQoQ09PS0lFUywgcmV0dXJuZWRDb29raWVzKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXNwb25zZVJlYWRlci5jbG9zZSgpOwogICAgICAgICByZXR1cm4ocmVzdWx0KTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oZWFkZXJCdWZmZXJTaXplL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGVhZGVyQnVmZmVyU2l6ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGJlMTM4NWIuLmQ3ODc2MzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oZWFkZXJCdWZmZXJTaXplL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hlYWRlckJ1ZmZlclNpemUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWhlYWRlckJ1ZmZlclNpemUiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWhlYWRlckJ1ZmZlclNpemUiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hlYWRlckJ1ZmZlclNpemUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hlYWRlckJ1ZmZlclNpemUvYnVpbGQueG1sCmluZGV4IDk5NzZhZTkuLjg1OWZkYWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oZWFkZXJCdWZmZXJTaXplL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGVhZGVyQnVmZmVyU2l6ZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE2ICs0NCwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImNvbmZpZ3MuY29uZmlnLnNlcnZlci1jb25maWcubmV0d29yay1jb25maWcudHJhbnNwb3J0cy50cmFuc3BvcnQudGNwLmJ1ZmZlci1zaXplLWJ5dGVzPSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CkBAIC04OCwxMCArODgsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cENvbXByZXNzaW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cENvbXByZXNzaW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDZiMTIwZS4uNjk0Y2JiOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBDb21wcmVzc2lvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwQ29tcHJlc3Npb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1hc2FkbWluLWRlbGV0ZXMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwQ29tcHJlc3Npb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3RzL3dlYi9odHRwY29tcHJlc3Npb24vSHR0cENvbXByZXNzaW9uVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBDb21wcmVzc2lvbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdHMvd2ViL2h0dHBjb21wcmVzc2lvbi9IdHRwQ29tcHJlc3Npb25UZXN0LmphdmEKaW5kZXggNmEwNmNmZi4uMzJjNzIyZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBDb21wcmVzc2lvbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdHMvd2ViL2h0dHBjb21wcmVzc2lvbi9IdHRwQ29tcHJlc3Npb25UZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBDb21wcmVzc2lvbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdHMvd2ViL2h0dHBjb21wcmVzc2lvbi9IdHRwQ29tcHJlc3Npb25UZXN0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBmaW5hbCBpbnQgcG9ydCA9IEludGVnZXIudmFsdWVPZihhbnRQcm9wKCJodHRwLnBvcnQiKSk7Ci0JCQkJZmluYWwgU3RyaW5nIHBhdGggPSAiY29uZmlncy5jb25maWcuc2VydmVyLWNvbmZpZy5uZXR3b3JrLWNvbmZpZy5wcm90b2NvbHMucHJvdG9jb2wuaHR0cC1saXN0ZW5lci0xLmh0dHAuY29tcHJlc3Npb249IjsKKyAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcGF0aCA9ICJjb25maWdzLmNvbmZpZy5zZXJ2ZXItY29uZmlnLm5ldHdvcmstY29uZmlnLnByb3RvY29scy5wcm90b2NvbC5odHRwLWxpc3RlbmVyLTEuaHR0cC5jb21wcmVzc2lvbj0iOwogICAgICAgICAgICAgZmluYWwgU3RyaW5nW10gc2NoZW1lcyA9IHsiZ3ppcCIsICJsem1hIn07CiAgICAgICAgICAgICBmb3IgKFN0cmluZyBzY2hlbWUgOiBzY2hlbWVzKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGhlYWRlciA9IHNjaGVtZSArICItIjsKQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgICAgICAgICBnZXQoImxvY2FsaG9zdCIsIHBvcnQsIGZhbHNlLCAiY29tcHJlc3NlZC1vdXRwdXQtb2ZmLTIiLCBzY2hlbWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJICByZXBvcnQoZS5nZXRNZXNzYWdlKCksIGZhbHNlKTsKKyAgICAgICAgICAgICAgcmVwb3J0KGUuZ2V0TWVzc2FnZSgpLCBmYWxzZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwpAQCAtOTQsOCArOTQsOCBAQAogICAgICAgICAgICAgICAgIGZvdW5kIHw9IGxpbmUudG9Mb3dlckNhc2UoKS5jb250YWlucygiY29udGVudC1lbmNvZGluZzogIiArIGNvbXBTY2hlbWUpOwogICAgICAgICAgICAgICAgIGlmICh6aXBwZWQpIHsKICAgICAgICAgICAgICAgICAgICBjaHVua2VkIHw9IGxpbmUudG9Mb3dlckNhc2UoKS5jb250YWlucygidHJhbnNmZXItZW5jb2Rpbmc6IGNodW5rZWQiKTsKLSAgICAgICAgICAgICAgICAgICBjb250ZW50TGVuZ3RoIHw9ICFsaW5lLnRvTG93ZXJDYXNlKCkuY29udGFpbnMoImNvbnRlbnQtbGVuZ3RoIik7IAotCQl9CisgICAgICAgICAgICAgICAgICAgY29udGVudExlbmd0aCB8PSAhbGluZS50b0xvd2VyQ2FzZSgpLmNvbnRhaW5zKCJjb250ZW50LWxlbmd0aCIpOworICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBzLmNsb3NlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cENvbm5lY3RvcktlZXBBbGl2ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBDb25uZWN0b3JLZWVwQWxpdmUvYnVpbGQucHJvcGVydGllcwppbmRleCBhNTJjNWE0Li5jODQ0NzFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cENvbm5lY3RvcktlZXBBbGl2ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwQ29ubmVjdG9yS2VlcEFsaXZlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1odHRwQ29ubmVjdG9yS2VlcEFsaXZlIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1odHRwQ29ubmVjdG9yS2VlcEFsaXZlIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1odHRwQ29ubmVjdG9yS2VlcEFsaXZlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cENvbm5lY3RvcktlZXBBbGl2ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cENvbm5lY3RvcktlZXBBbGl2ZS9idWlsZC54bWwKaW5kZXggZjYzNjY1OC4uMTI2OTkzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBDb25uZWN0b3JLZWVwQWxpdmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwQ29ubmVjdG9yS2VlcEFsaXZlL2J1aWxkLnhtbApAQCAtMzYsMTMgKzM2LDEzIEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTYwLDE2ICs2MCwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgICA8amF2YWMKICAgICAgICAgICAgIHNyY2Rpcj0iLiIKQEAgLTk0LDEwICs5NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJBZG1pblJlY29uZmlnL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJBZG1pblJlY29uZmlnL1dlYlRlc3QuamF2YQppbmRleCA1MjBjYTU2Li43YjhlN2Y5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyQWRtaW5SZWNvbmZpZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBMaXN0ZW5lckFkbWluUmVjb25maWcvV2ViVGVzdC5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJhZG1pblJlY29uZmlnIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDQsOCArNDQsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZC4iKTsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIHNvY2suc2V0U29UaW1lb3V0KDUwMDApOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJIb3N0OiBsb2NhbGhvc3RcbiIuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJBZG1pblJlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyQWRtaW5SZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDE3NmZjNjguLmFiNTE2NTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJBZG1pblJlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBMaXN0ZW5lckFkbWluUmVjb25maWcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWFkbWluUmVjb25maWciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWFkbWluUmVjb25maWciLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLWFkbWluUmVjb25maWciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJBZG1pblJlY29uZmlnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJBZG1pblJlY29uZmlnL2J1aWxkLnhtbAppbmRleCBjMWQ5ODY4Li4yNWIzNTA1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyQWRtaW5SZWNvbmZpZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBMaXN0ZW5lckFkbWluUmVjb25maWcvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImNvbmZpZ3MuY29uZmlnLnNlcnZlci1jb25maWcubmV0d29yay1jb25maWcucHJvdG9jb2xzLnByb3RvY29sLmFkbWluLWxpc3RlbmVyLnNlY3VyaXR5LWVuYWJsZWQ9ZmFsc2UiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgpAQCAtNzcsNyArNzcsNyBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9XZWJUZXN0LmphdmEKaW5kZXggMzg1OTdkYS4uMmYxMTM4MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL1dlYlRlc3QuamF2YQpAQCAtMjEsMTYgKzIxLDE2IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDE7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKICAgICBwcml2YXRlIHN0YXRpYyBVUkxDb25uZWN0aW9uIGNvbm4gPSBudWxsOwogICAgIHByaXZhdGUgc3RhdGljIFVSTCB1cmw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0T3V0cHV0U3RyZWFtIG9iamVjdFdyaXRlciA9IG51bGw7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsgIAorICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIHVybENvbm5lY3Rpb24gPSAoSHR0cFVSTENvbm5lY3Rpb24pY29ubjsKICAgICAgICAgICAgICAgIHVybENvbm5lY3Rpb24uc2V0RG9PdXRwdXQodHJ1ZSk7CiAgICAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlPSAgdXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogMjAwIik7IAorICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBjb2RlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiAyMDAiKTsKICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgPT0gMjAwKXsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImh0dHBMaXN0ZW5lckR5bmFtaWNDb25maWciLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL1dlYlRlc3QyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9XZWJUZXN0Mi5qYXZhCmluZGV4IGIxN2E5NTcuLjE4NzQzYzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL1dlYlRlc3QyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvV2ViVGVzdDIuamF2YQpAQCAtMjEsMTYgKzIxLDE2IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdDIgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAxOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICBwcml2YXRlIHN0YXRpYyBVUkwgdXJsOwogICAgIHByaXZhdGUgc3RhdGljIE9iamVjdE91dHB1dFN0cmVhbSBvYmplY3RXcml0ZXIgPSBudWxsOwotICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7ICAKKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiB1cmxDb25uZWN0aW9uID0gKEh0dHBVUkxDb25uZWN0aW9uKWNvbm47CiAgICAgICAgICAgICAgICB1cmxDb25uZWN0aW9uLnNldERvT3V0cHV0KHRydWUpOwogICAgICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZT0gIHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDIwMCIpOyAKKyAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogMjAwIik7CiAgICAgICAgICAgICAgICBpZiAodXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKSA9PSAyMDApewogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiaHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy1hZnRlclJlY29uZiIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYWQzOWFjMi4uMzk5YjdmMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0taHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0taHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItaHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvYnVpbGQueG1sCmluZGV4IGJkZjZkZjguLmVjNDE5NGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9idWlsZC54bWwKQEAgLTUwLDcgKzUwLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTU4LDEwICs1OCwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgPGphdmFjCkBAIC02OSwxMCArNjksMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSIqLmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC04MCw3ICs4MCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1hZ2FpbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QyIj4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTEwNyw3ICsxMDcsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGZkYjBjMTcuLmMxZDRiYjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDEyICsyMiwxMiBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggNzgxYmNjZi4uYzA3MzI3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKQEAgLTM0LDEyICszNCwxMiBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5kb1Bvc3RdIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAkKKwogICAgICAgICBvdXQucHJpbnRsbigiVEVTVDo6UEFTUyIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVxdWVzdElnbm9yZUludmFsaWRBY2NlcHRMYW5ndWFnZUhlYWRlci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlcXVlc3RJZ25vcmVJbnZhbGlkQWNjZXB0TGFuZ3VhZ2VIZWFkZXIvV2ViVGVzdC5qYXZhCmluZGV4IDRlMTNiYTcuLjgyYzE0ZGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVxdWVzdElnbm9yZUludmFsaWRBY2NlcHRMYW5ndWFnZUhlYWRlci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXF1ZXN0SWdub3JlSW52YWxpZEFjY2VwdExhbmd1YWdlSGVhZGVyL1dlYlRlc3QuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgMTcwMyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUxLDggKzUxLDggQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgIAotICAgICAgICB0cnkgeyAKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTYyLDE5ICs2MiwxOSBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgIAorCiAgICAgICAgIFNvY2tldCBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCIgKyAiIEhUVFAvMS4wXG4iOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiQWNjZXB0LUxhbmd1YWdlOiBkZVxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgLy8gU2VuZCBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyIHdpdGggaW52YWxpZCBsb2NhbGUgY29kZS4gTWFrZSBzdXJlIAotICAgICAgICAvLyB0aGlzIGxvY2FsZSBpcyBnZXR0aW5nIGlnbm9yZWQgCisgICAgICAgIC8vIFNlbmQgQWNjZXB0LUxhbmd1YWdlIGhlYWRlciB3aXRoIGludmFsaWQgbG9jYWxlIGNvZGUuIE1ha2Ugc3VyZQorICAgICAgICAvLyB0aGlzIGxvY2FsZSBpcyBnZXR0aW5nIGlnbm9yZWQKICAgICAgICAgb3Mud3JpdGUoIkFjY2VwdC1MYW5ndWFnZTogMTJcbiIuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJBY2NlcHQtTGFuZ3VhZ2U6IEZSXG4iLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlcXVlc3RJZ25vcmVJbnZhbGlkQWNjZXB0TGFuZ3VhZ2VIZWFkZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVxdWVzdElnbm9yZUludmFsaWRBY2NlcHRMYW5ndWFnZUhlYWRlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGM3ODgzNjAuLjEzYzg4MTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVxdWVzdElnbm9yZUludmFsaWRBY2NlcHRMYW5ndWFnZUhlYWRlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVxdWVzdElnbm9yZUludmFsaWRBY2NlcHRMYW5ndWFnZUhlYWRlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWh0dHAtcmVxdWVzdC1pZ25vcmUtaW52YWxpZC1hY2NlcHQtbGFuZ3VhZ2UtaGVhZGVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlcXVlc3RJZ25vcmVJbnZhbGlkQWNjZXB0TGFuZ3VhZ2VIZWFkZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXF1ZXN0SWdub3JlSW52YWxpZEFjY2VwdExhbmd1YWdlSGVhZGVyL2J1aWxkLnhtbAppbmRleCA0MTAzMzExLi5kZTFkY2ZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlcXVlc3RJZ25vcmVJbnZhbGlkQWNjZXB0TGFuZ3VhZ2VIZWFkZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVxdWVzdElnbm9yZUludmFsaWRBY2NlcHRMYW5ndWFnZUhlYWRlci9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIyICs0NCwyMiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MSwxMCArNzEsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlcXVlc3RJZ25vcmVJbnZhbGlkQWNjZXB0TGFuZ3VhZ2VIZWFkZXIvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlcXVlc3RJZ25vcmVJbnZhbGlkQWNjZXB0TGFuZ3VhZ2VIZWFkZXIvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggMGYyMWY1Ni4uN2NiZDRlMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXF1ZXN0SWdub3JlSW52YWxpZEFjY2VwdExhbmd1YWdlSGVhZGVyL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVxdWVzdElnbm9yZUludmFsaWRBY2NlcHRMYW5ndWFnZUhlYWRlci9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICBpZiAobnVtID09IDIgJiYgZGVMb2NhbGVTZWVuICYmIGZyTG9jYWxlU2VlbikgewogICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgICAgICByZXMuZ2V0V3JpdGVyKCkucHJpbnQocGFzc2VkKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlcXVlc3RXaGl0ZXNwYWNlVG9sZXJhbmNlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVxdWVzdFdoaXRlc3BhY2VUb2xlcmFuY2UvV2ViVGVzdC5qYXZhCmluZGV4IGU1ZWJiNDAuLjZlOWFhODkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVxdWVzdFdoaXRlc3BhY2VUb2xlcmFuY2UvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVxdWVzdFdoaXRlc3BhY2VUb2xlcmFuY2UvV2ViVGVzdC5qYXZhCkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEh0dHAgUmVxdWVzdCB3aGl0ZXNwYWNlIHRvbGVyYW5jZSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUyLDggKzUyLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpAQCAtNjMsNyArNjMsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewogCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSG9zdD0iICsgaG9zdCArICIsIHBvcnQ9IiArIHBvcnQpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSG9zdD0iICsgaG9zdCArICIsIHBvcnQ9IiArIHBvcnQpOwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICAgIiArIGNvbnRleHRSb290ICsgIi9pbmRleC5qc3AgIEhUVFAvMS4xXG4iOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXF1ZXN0V2hpdGVzcGFjZVRvbGVyYW5jZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXF1ZXN0V2hpdGVzcGFjZVRvbGVyYW5jZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDEzNWQ1N2YuLmVlOWM0MzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVxdWVzdFdoaXRlc3BhY2VUb2xlcmFuY2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlcXVlc3RXaGl0ZXNwYWNlVG9sZXJhbmNlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0taHR0cC1yZXF1ZXN0LXdoaXRlc3BhY2UtdG9sZXJhbmNlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlcXVlc3RXaGl0ZXNwYWNlVG9sZXJhbmNlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVxdWVzdFdoaXRlc3BhY2VUb2xlcmFuY2UvYnVpbGQueG1sCmluZGV4IGFkMDI1ZDkuLmRlMWRjZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVxdWVzdFdoaXRlc3BhY2VUb2xlcmFuY2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVxdWVzdFdoaXRlc3BhY2VUb2xlcmFuY2UvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMiArNDQsMjIgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXNwb25zZUVycm9yTWVzc2FnZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlc3BvbnNlRXJyb3JNZXNzYWdlL1dlYlRlc3QuamF2YQppbmRleCA3ZGZlYTdjLi5hMTQzZDJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlc3BvbnNlRXJyb3JNZXNzYWdlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlc3BvbnNlRXJyb3JNZXNzYWdlL1dlYlRlc3QuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBYU1MgSHR0cFNlcnZsZXRSZXNwb25zZS5zZW5kRXJyb3IiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01NCw4ICs1NCw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKQEAgLTczLDcgKzczLDcgQEAKIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhvc3Q9IiArIGhvc3QgKyAiLCBwb3J0PSIgKyBwb3J0KTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhvc3Q9IiArIGhvc3QgKyAiLCBwb3J0PSIgKyBwb3J0KTsKICAgICAgICAgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvaW5kZXguanNwIEhUVFAvMS4xXG4iOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXNwb25zZUVycm9yTWVzc2FnZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXNwb25zZUVycm9yTWVzc2FnZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDgwZTdjOWMuLjMxZjM1MTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVzcG9uc2VFcnJvck1lc3NhZ2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlc3BvbnNlRXJyb3JNZXNzYWdlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0taHR0cC1yZXNwb25zZS1lcnJvci1tZXNzYWdlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlc3BvbnNlRXJyb3JNZXNzYWdlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVzcG9uc2VFcnJvck1lc3NhZ2UvYnVpbGQueG1sCmluZGV4IGFkMDI1ZDkuLmRlMWRjZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVzcG9uc2VFcnJvck1lc3NhZ2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVzcG9uc2VFcnJvck1lc3NhZ2UvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMiArNDQsMjIgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXNwb25zZVNlcnZlckhlYWRlci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlc3BvbnNlU2VydmVySGVhZGVyL1dlYlRlc3QuamF2YQppbmRleCAyZDRiZGY0Li41N2I0MzMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlc3BvbnNlU2VydmVySGVhZGVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlc3BvbnNlU2VydmVySGVhZGVyL1dlYlRlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDYzMjA3NTAiKTsKQEAgLTQ5LDEyICs0OSwxMiBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAKICAgICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi8iICsgInRlc3QuanNwIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTYyLDEyICs2MiwxMiBAQAogICAgICAgICBjb25uLmNvbm5lY3QoKTsKIAogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gCisgICAgICAgIH0KIAogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIHNlcnZlckhlYWRlciA9IGNvbm4uZ2V0SGVhZGVyRmllbGQoIlNlcnZlciIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXNwb25zZVNlcnZlckhlYWRlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXNwb25zZVNlcnZlckhlYWRlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGNmZmEyM2MuLjY4NWQ2ODggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVzcG9uc2VTZXJ2ZXJIZWFkZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlc3BvbnNlU2VydmVySGVhZGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0taHR0cC1yZXNwb25zZS1zZXJ2ZXItaGVhZGVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlc3BvbnNlU2VydmVySGVhZGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVzcG9uc2VTZXJ2ZXJIZWFkZXIvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVzcG9uc2VTZXJ2ZXJIZWFkZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVzcG9uc2VTZXJ2ZXJIZWFkZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBTZXJ2bGV0RG9Qb3N0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFNlcnZsZXREb1Bvc3QvYnVpbGQucHJvcGVydGllcwppbmRleCBhNmFkYjdhLi41NDY2NjhiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFNlcnZsZXREb1Bvc3QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFNlcnZsZXREb1Bvc3QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWh0dHBTZXJ2bGV0RG9Qb3N0Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1odHRwU2VydmxldERvUG9zdCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItaHR0cFNlcnZsZXREb1Bvc3QiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwU2VydmxldERvUG9zdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFNlcnZsZXREb1Bvc3QvYnVpbGQueG1sCmluZGV4IDhlZWQ2NjEuLmM3YTA4NGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwU2VydmxldERvUG9zdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBTZXJ2bGV0RG9Qb3N0L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTYgKzQyLDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTU5LDcgKzU5LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgIDxqYXZhYwogICAgICAgICAgICAgc3JjZGlyPSIuIgpAQCAtNzcsMTAgKzc3LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBTZXJ2bGV0RG9Qb3N0L2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwU2VydmxldERvUG9zdC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMzZlNTk2NS4uYzhlMWM4YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBTZXJ2bGV0RG9Qb3N0L2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFNlcnZsZXREb1Bvc3QvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwxMiArMjIsMTIgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+c2VydmxldC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBTZXJ2bGV0RG9Qb3N0L3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwU2VydmxldERvUG9zdC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggZjMxZjg4NC4uYjcxNWZmMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBTZXJ2bGV0RG9Qb3N0L3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFNlcnZsZXREb1Bvc3Qvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICB9CkBAIC0zNiw3ICszNiw3IEBACiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFNlcnZsZXRHZXRBbGxEZWNsYXJlZE1ldGhvZHMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBTZXJ2bGV0R2V0QWxsRGVjbGFyZWRNZXRob2RzL1dlYlRlc3QuamF2YQppbmRleCA3YTY3MDY1Li45OGVlOWY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFNlcnZsZXRHZXRBbGxEZWNsYXJlZE1ldGhvZHMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwU2VydmxldEdldEFsbERlY2xhcmVkTWV0aG9kcy9XZWJUZXN0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNDk2ODg0MSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ3LDggKzQ3LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlU2VydmxldCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkLiIpOwpAQCAtNTgsNyArNTgsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2VTZXJ2bGV0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoIk9QVElPTlMgIiArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCIKQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgb3Mud3JpdGUoKCJPUFRJT05TICIgKyBjb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiCiAgICAgICAgICAgICArICIgSFRUUC8xLjBcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFNlcnZsZXRHZXRBbGxEZWNsYXJlZE1ldGhvZHMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwU2VydmxldEdldEFsbERlY2xhcmVkTWV0aG9kcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDIzNWEwYzguLmQ4MzYzNDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwU2VydmxldEdldEFsbERlY2xhcmVkTWV0aG9kcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwU2VydmxldEdldEFsbERlY2xhcmVkTWV0aG9kcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWh0dHAtc2VydmxldC1nZXQtYWxsLWRlY2xhcmVkLW1ldGhvZHMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwU2VydmxldEdldEFsbERlY2xhcmVkTWV0aG9kcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFNlcnZsZXRHZXRBbGxEZWNsYXJlZE1ldGhvZHMvYnVpbGQueG1sCmluZGV4IDM4ZDVmMWUuLjNhYTNiNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwU2VydmxldEdldEFsbERlY2xhcmVkTWV0aG9kcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBTZXJ2bGV0R2V0QWxsRGVjbGFyZWRNZXRob2RzL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTcgKzQyLDE3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luY2x1ZGVFcnJvclBhZ2VBZnRlclJlc3BvbnNlQ29tbWl0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbmNsdWRlRXJyb3JQYWdlQWZ0ZXJSZXNwb25zZUNvbW1pdC9XZWJUZXN0LmphdmEKaW5kZXggMzgyOGFhYy4uOTU4YmZjYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luY2x1ZGVFcnJvclBhZ2VBZnRlclJlc3BvbnNlQ29tbWl0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5jbHVkZUVycm9yUGFnZUFmdGVyUmVzcG9uc2VDb21taXQvV2ViVGVzdC5qYXZhCkBAIC00OCw3ICs0OCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yICIgKyBURVNUX05BTUUpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU2LDggKzU2LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNzUsNyArNzUsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgIAorCiAgICAgICAgIHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL3NxbEV4Y2VwdGlvbi5qc3AgSFRUUC8xLjBcbiI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5jbHVkZUVycm9yUGFnZUFmdGVyUmVzcG9uc2VDb21taXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbmNsdWRlRXJyb3JQYWdlQWZ0ZXJSZXNwb25zZUNvbW1pdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDg0M2UwNzIuLjAwMTNmMWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbmNsdWRlRXJyb3JQYWdlQWZ0ZXJSZXNwb25zZUNvbW1pdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbmNsdWRlRXJyb3JQYWdlQWZ0ZXJSZXNwb25zZUNvbW1pdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWVycm9yLXBhZ2UtYWZ0ZXItcmVzcG9uc2UtY29tbWl0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5jbHVkZUVycm9yUGFnZUFmdGVyUmVzcG9uc2VDb21taXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luY2x1ZGVFcnJvclBhZ2VBZnRlclJlc3BvbnNlQ29tbWl0L2J1aWxkLnhtbAppbmRleCAwMGFlNzExLi5mZDRmZmRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5jbHVkZUVycm9yUGFnZUFmdGVyUmVzcG9uc2VDb21taXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbmNsdWRlRXJyb3JQYWdlQWZ0ZXJSZXNwb25zZUNvbW1pdC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgIDxkZWxldGUgZmlsZT0iV2ViVGVzdC5jbGFzcyIvPgogICAgICAgPGRlbGV0ZSBmaWxlPSJSZXBSdW5Db25mLnR4dCIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIzICs0NCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcyLDEwICs3MiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbmRleC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5kZXgvV2ViVGVzdC5qYXZhCmluZGV4IGI3YmUzZjYuLmJiNmViMDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbmRleC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luZGV4L1dlYlRlc3QuamF2YQpAQCAtMjYsOCArMjYsOCBAQAogICAgIHByaXZhdGUgc3RhdGljIFVSTENvbm5lY3Rpb24gY29ubiA9IG51bGw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMIHVybDsKICAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RPdXRwdXRTdHJlYW0gb2JqZWN0V3JpdGVyID0gbnVsbDsKLSAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOyAgCi0gICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHRocm93cyBFeGNlcHRpb257CiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKICAgICAgICAgU3RyaW5nIHBvcnQgPSBhcmdzWzFdOwpAQCAtNDQsMTIgKzQ0LDEyIEBACiAgICAgICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gdXJsQ29ubmVjdGlvbiA9IChIdHRwVVJMQ29ubmVjdGlvbiljb25uOwogICAgICAgICAgICAgICAgIHVybENvbm5lY3Rpb24uc2V0RG9PdXRwdXQodHJ1ZSk7CiAKLSAgICAgICAgICAgICAgICBEYXRhT3V0cHV0U3RyZWFtIG91dCA9IAorICAgICAgICAgICAgICAgIERhdGFPdXRwdXRTdHJlYW0gb3V0ID0KICAgICAgICAgICAgICAgICAgICBuZXcgRGF0YU91dHB1dFN0cmVhbSh1cmxDb25uZWN0aW9uLmdldE91dHB1dFN0cmVhbSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZUJ5dGUoMSk7CiAKICAgICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGU9ICB1cmxDb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBjb2RlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiAyMDAiKTsgCisgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDIwMCIpOwogICAgICAgICAgICAgICAgaWYgKHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCkgIT0gMjAwKXsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImluZGV4Iiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5kZXgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbmRleC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDliNTYyMDQuLjBiZDgzNWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbmRleC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbmRleC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0taW5kZXgiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWluZGV4Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1pbmRleCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luZGV4L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbmRleC9idWlsZC54bWwKaW5kZXggZDllMDIzNC4uZmRhZjhmZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luZGV4L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5kZXgvYnVpbGQueG1sCkBAIC0zMyw3ICszMyw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICA8L3RhcmdldD4KIApAQCAtNDIsMTEgKzQyLDExIEBACiAgICAgICAgICAgICBzcmNkaXI9Ii4iCiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICA8L3RhcmdldD4gCisgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNTgsOSArNTgsOSBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luc3RhbGxhdGlvblBhdGhEaXNjbG9zdXJlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnN0YWxsYXRpb25QYXRoRGlzY2xvc3VyZS9XZWJUZXN0LmphdmEKaW5kZXggOWVhYWIxMy4uMDAzZWVhZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luc3RhbGxhdGlvblBhdGhEaXNjbG9zdXJlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5zdGFsbGF0aW9uUGF0aERpc2Nsb3N1cmUvV2ViVGVzdC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKICAgICBwcml2YXRlIHN0YXRpYyBVUkxDb25uZWN0aW9uIGNvbm4gPSBudWxsOwogICAgIHByaXZhdGUgc3RhdGljIFVSTCB1cmw7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB0aHJvd3MgRXhjZXB0aW9uewogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CiAgICAgICAgIFN0cmluZyBwb3J0ID0gYXJnc1sxXTsKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgICAgICAgICB3cml0ZU9uZUJ5dGUodXJsQ29ubmVjdGlvbik7CiAKICAgICAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlPSAgdXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluc3RhbGxhdGlvblBhdGhEaXNjbG9zdXJlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiA0MFgiKTsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnN0YWxsYXRpb25QYXRoRGlzY2xvc3VyZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogNDBYIik7CiAgICAgICAgICAgICAgICAgaWYgKHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCkgPj0gNDAwICYmIHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCkgPCA1MDApewogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiVGVzdCBpbnN0YWxsYXRpb25QYXRoRGlzY2xvc3VyZSIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgICAgICAgICB3cml0ZU9uZUJ5dGUodXJsQ29ubmVjdGlvbik7CiAKICAgICAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlPSAgdXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluc3RhbGxhdGlvblBhdGhEaXNjbG9zdXJlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiA0MFgiKTsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnN0YWxsYXRpb25QYXRoRGlzY2xvc3VyZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogNDBYIik7CiAgICAgICAgICAgICAgICAgaWYgKHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCkgPj0gNDAwICYmIHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCkgPCA1MDApewogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiVGVzdCBpbnN0YWxsYXRpb25QYXRoRGlzY2xvc3VyZS13cm9uZ1VybCIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnN0YWxsYXRpb25QYXRoRGlzY2xvc3VyZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luc3RhbGxhdGlvblBhdGhEaXNjbG9zdXJlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjBkYjg0NS4uMWU4MDRiZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luc3RhbGxhdGlvblBhdGhEaXNjbG9zdXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luc3RhbGxhdGlvblBhdGhEaXNjbG9zdXJlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1pbnN0YWxsYXRpb25QYXRoRGlzY2xvc3VyZSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0taW5zdGFsbGF0aW9uUGF0aERpc2Nsb3N1cmUiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLWluc3RhbGxhdGlvblBhdGhEaXNjbG9zdXJlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5zdGFsbGF0aW9uUGF0aERpc2Nsb3N1cmUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luc3RhbGxhdGlvblBhdGhEaXNjbG9zdXJlL2J1aWxkLnhtbAppbmRleCBkOWUwMjM0Li5mZGFmOGZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5zdGFsbGF0aW9uUGF0aERpc2Nsb3N1cmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnN0YWxsYXRpb25QYXRoRGlzY2xvc3VyZS9idWlsZC54bWwKQEAgLTMzLDcgKzMzLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgIDwvdGFyZ2V0PgogCkBAIC00MiwxMSArNDIsMTEgQEAKICAgICAgICAgICAgIHNyY2Rpcj0iLiIKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgIDwvdGFyZ2V0PiAKKyAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC01OCw5ICs1OCw5IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5zdGFuY2VIdHRwUG9ydER5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5zdGFuY2VIdHRwUG9ydER5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEKaW5kZXggMGNiOGJhMi4uMGU0Y2VmMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luc3RhbmNlSHR0cFBvcnREeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnN0YW5jZUh0dHBQb3J0RHluYW1pY1JlY29uZmlnL1dlYlRlc3QuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogICogVW5pdCB0ZXN0IGZvcjoKICAqCiAgKiAgIGh0dHA6Ly9qYXZhLm5ldC9qaXJhL2Jyb3dzZS9HTEFTU0ZJU0gtMTYwMTMKLSAqICAgKCJSZXN0YXJ0UmVxdWlyZWQ6IGNoYW5naW5nIGh0dHAgcG9ydCBkb2VzIG5vdCB0cmlnZ2VyIHJlc3RhcnQgcmVxdWlyZWQgbWVzc2FnZSAKKyAqICAgKCJSZXN0YXJ0UmVxdWlyZWQ6IGNoYW5naW5nIGh0dHAgcG9ydCBkb2VzIG5vdCB0cmlnZ2VyIHJlc3RhcnQgcmVxdWlyZWQgbWVzc2FnZQogICogICBmb3IgYSBzdGFuZGFsb25lIGluc3RhbmNlIikKICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICBsb2NhdGlvbiA9IGFyZ3NbM107CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1s0XTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDE2MDEzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTUsOCArNTUsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC02NiwxMyArNjYsMTMgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAotICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIG5ld1BvcnQgKyBjb250ZXh0Um9vdCk7IAorCisgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgbmV3UG9ydCArIGNvbnRleHRSb290KTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIC4uLiAiK3VybCk7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5zdGFuY2VIdHRwUG9ydER5bmFtaWNSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luc3RhbmNlSHR0cFBvcnREeW5hbWljUmVjb25maWcvYnVpbGQucHJvcGVydGllcwppbmRleCBjYjFiY2ZkLi43MGEwZTUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5zdGFuY2VIdHRwUG9ydER5bmFtaWNSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnN0YW5jZUh0dHBQb3J0RHluYW1pY1JlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0taW5zdGFuY2UtaHR0cC1wb3J0LWR5bmFtaWMtcmVjb25maWciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnN0YW5jZUh0dHBQb3J0RHluYW1pY1JlY29uZmlnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnN0YW5jZUh0dHBQb3J0RHluYW1pY1JlY29uZmlnL2J1aWxkLnhtbAppbmRleCA4MjU2OGY1Li5kZWRkNjRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5zdGFuY2VIdHRwUG9ydER5bmFtaWNSZWNvbmZpZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luc3RhbmNlSHR0cFBvcnREeW5hbWljUmVjb25maWcvYnVpbGQueG1sCkBAIC0zOCw3ICszOCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NiwxNSArNDYsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWluc3RhbmNlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWluc3RhbmNlLWNvbW1vbiIvPgpAQCAtNzksMTMgKzc5LDEzIEBACiAgICAgICAgICAgICAgICB2YWx1ZT0iLS10YXJnZXQgJHtpbnN0YW5jZS5uYW1lfSBIVFRQX0xJU1RFTkVSX1BPUlQ9JHtpbnN0YW5jZS5odHRwLnBvcnQuMn0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWluc3RhbmNlIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC05OSwxMCArOTksMTAgQEAKICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWluc3RhbmNlIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnZva2VyU2VydmxldERpc2FibGVkL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnZva2VyU2VydmxldERpc2FibGVkL1dlYlRlc3QuamF2YQppbmRleCBlZTQyYjkzLi42OGZiMDA2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW52b2tlclNlcnZsZXREaXNhYmxlZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ludm9rZXJTZXJ2bGV0RGlzYWJsZWQvV2ViVGVzdC5qYXZhCkBAIC0yNSwxMCArMjUsMTAgQEAKICAqIGRpc2FibGVkLgogICoKICAqIFRoaXMgY2xpZW50IGF0dGVtcHRzIHRvIGNvbm5lY3QgdG8gdGhpcyBVUkw6Ci0gKiAKKyAqCiAgKiAgIGh0dHA6Ly88aG9zdD46PHBvcnQ+L3dlYi1pbnZva2VyLXNlcnZsZXQtZGlzYWJsZWQvc2VydmxldC9UZXN0U2VydmxldAogICoKLSAqIHdoaWNoIG11c3QgcmVzdWx0IGluIGEgNDA0LCBiZWNhdXNlIHRoZSB0ZXN0IHNlcnZsZXQgaXMgbWFwcGVkIHRvIHRoaXMgCisgKiB3aGljaCBtdXN0IHJlc3VsdCBpbiBhIDQwNCwgYmVjYXVzZSB0aGUgdGVzdCBzZXJ2bGV0IGlzIG1hcHBlZCB0byB0aGlzCiAgKiB1cmwtcGF0dGVybiBpbiB3ZWIueG1sOiAvVGVzdFNlcnZsZXQsIGluc3RlYWQgb2YgL3NlcnZsZXQvVGVzdFNlcnZsZXQuCiAgKgogICogVGhlIGNsaWVudCB3aWxsIGJlIGFibGUgdG8gY29ubmVjdCBzdWNjZXNzZnVsbHkgdG8gdGhlIGFib3ZlIFVSTCBvbmx5IGlmIHRoZQpAQCAtNDksNyArNDksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBCdWd0cmFxIDQ5NDQxNjAiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01OCwyMCArNTgsMjAgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBudWxsOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZTsKICAgICAgICAgYm9vbGVhbiBmYWlsID0gZmFsc2U7CiAKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogQ29ubmVjdCB0byB0aGUgd3JvbmcgbWFwcGluZy4KICAgICAgICAgICAgICAqCiAgICAgICAgICAgICAgKiBUaGlzIHdpbGwgd29yayBvbmx5IGlmIHRoZSBJbnZva2VyU2VydmxldCBpbiBkZWZhdWx0LXdlYi54bWwKICAgICAgICAgICAgICAqIGhhcyBiZWVuIGVuYWJsZWQsIGFuZCB0aGVyZWZvcmUgbXVzdCBmYWlsICh3aXRoIGEgNDA0IHJlc3BvbnNlCiAgICAgICAgICAgICAgKiBjb2RlKSBzaW5jZSB0aGUgSW52b2tlclNlcnZsZXQgc2hvdWxkIG5vdCBoYXZlIGJlZW4gZW5hYmxlZC4KLSAgICAgICAgICAgICAqLyAKKyAgICAgICAgICAgICAqLwogICAgICAgICAgICAgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICArICIvc2VydmxldC9UZXN0U2VydmxldCIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ludm9rZXJTZXJ2bGV0RGlzYWJsZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnZva2VyU2VydmxldERpc2FibGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjlkZDgzYi4uZjViMjFiNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ludm9rZXJTZXJ2bGV0RGlzYWJsZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW52b2tlclNlcnZsZXREaXNhYmxlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0taW52b2tlci1zZXJ2bGV0LWRpc2FibGVkIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1pbnZva2VyLXNlcnZsZXQtZGlzYWJsZWQiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW52b2tlclNlcnZsZXREaXNhYmxlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW52b2tlclNlcnZsZXREaXNhYmxlZC9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ludm9rZXJTZXJ2bGV0RGlzYWJsZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnZva2VyU2VydmxldERpc2FibGVkL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnZva2VyU2VydmxldERpc2FibGVkL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnZva2VyU2VydmxldERpc2FibGVkL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAyOGFmNzlkLi5jOWEwNTA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW52b2tlclNlcnZsZXREaXNhYmxlZC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ludm9rZXJTZXJ2bGV0RGlzYWJsZWQvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yNiw3ICsyNiw3IEBACiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5UZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnZva2VyU2VydmxldERpc2FibGVkL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ludm9rZXJTZXJ2bGV0RGlzYWJsZWQvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggNjVjY2IxMC4uYzUzNDI4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ludm9rZXJTZXJ2bGV0RGlzYWJsZWQvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ludm9rZXJTZXJ2bGV0RGlzYWJsZWQvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTI1LDYgKzI1LDYgQEAKICAgICBwdWJsaWMgdm9pZCBzZXJ2aWNlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewogCi0JZ2V0U2VydmxldENvbnRleHQoKS5sb2coIlRoaXMgc2VydmxldCBzaG91bGQgbm90IGhhdmUgYmVlbiBpbnZva2VkIik7CisgICAgZ2V0U2VydmxldENvbnRleHQoKS5sb2coIlRoaXMgc2VydmxldCBzaG91bGQgbm90IGhhdmUgYmVlbiBpbnZva2VkIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2phdmF4U2VydmxldEVycm9yUmVxdWVzdFVyaUR5bmFtaWNSZXNvdXJjZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvamF2YXhTZXJ2bGV0RXJyb3JSZXF1ZXN0VXJpRHluYW1pY1Jlc291cmNlL1dlYlRlc3QuamF2YQppbmRleCA1MWYyYjE4Li4xYWU2NTlmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvamF2YXhTZXJ2bGV0RXJyb3JSZXF1ZXN0VXJpRHluYW1pY1Jlc291cmNlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvamF2YXhTZXJ2bGV0RXJyb3JSZXF1ZXN0VXJpRHluYW1pY1Jlc291cmNlL1dlYlRlc3QuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA0ODgyOTk2Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNjEsMTQgKzYxLDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL2p1bmsuanNwIEhUVFAvMS4wXG4iOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvamF2YXhTZXJ2bGV0RXJyb3JSZXF1ZXN0VXJpRHluYW1pY1Jlc291cmNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvamF2YXhTZXJ2bGV0RXJyb3JSZXF1ZXN0VXJpRHluYW1pY1Jlc291cmNlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjdjMTMxMS4uOTMzMGZiYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2phdmF4U2VydmxldEVycm9yUmVxdWVzdFVyaUR5bmFtaWNSZXNvdXJjZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qYXZheFNlcnZsZXRFcnJvclJlcXVlc3RVcmlEeW5hbWljUmVzb3VyY2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qYXZheC1zZXJ2bGV0LWVycm9yLXJlcXVlc3QtdXJpLWR5bmFtaWMtcmVzb3VyY2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qYXZheFNlcnZsZXRFcnJvclJlcXVlc3RVcmlEeW5hbWljUmVzb3VyY2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2phdmF4U2VydmxldEVycm9yUmVxdWVzdFVyaUR5bmFtaWNSZXNvdXJjZS9idWlsZC54bWwKaW5kZXggODU0MmU5MS4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2phdmF4U2VydmxldEVycm9yUmVxdWVzdFVyaUR5bmFtaWNSZXNvdXJjZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2phdmF4U2VydmxldEVycm9yUmVxdWVzdFVyaUR5bmFtaWNSZXNvdXJjZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE3ICs0MiwxNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2phdmF4U2VydmxldEVycm9yUmVxdWVzdFVyaVN0YXRpY1Jlc291cmNlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qYXZheFNlcnZsZXRFcnJvclJlcXVlc3RVcmlTdGF0aWNSZXNvdXJjZS9XZWJUZXN0LmphdmEKaW5kZXggOTNhNzM4NC4uYzMyZTZmNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2phdmF4U2VydmxldEVycm9yUmVxdWVzdFVyaVN0YXRpY1Jlc291cmNlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvamF2YXhTZXJ2bGV0RXJyb3JSZXF1ZXN0VXJpU3RhdGljUmVzb3VyY2UvV2ViVGVzdC5qYXZhCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDQ4ODI5OTYiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTExMSw4ICsxMTEsOCBAQAogICAgICAgICAgICAgaWYgKGxpbmUgPT0gbnVsbCB8fAogICAgICAgICAgICAgICAgICAgICAoIWxpbmUuZXF1YWxzKCJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Um9vdCArICIvNDA0aGFuZGxlci5qc3AiKSAmJgotICAgICAgICAgICAgICAgICAgICAhbGluZS5lcXVhbHMoImh0dHA6Ly8iICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkuZ2V0SG9zdE5hbWUoKSArIAorICAgICAgICAgICAgICAgICAgICAhbGluZS5lcXVhbHMoImh0dHA6Ly8iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKS5nZXRIb3N0TmFtZSgpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvNDA0aGFuZGxlci5qc3AiKSkpIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJVbmV4cGVjdGVkIHJlc3BvbnNlIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvamF2YXhTZXJ2bGV0RXJyb3JSZXF1ZXN0VXJpU3RhdGljUmVzb3VyY2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qYXZheFNlcnZsZXRFcnJvclJlcXVlc3RVcmlTdGF0aWNSZXNvdXJjZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDcyMzQwYmMuLmFjMDhiOWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qYXZheFNlcnZsZXRFcnJvclJlcXVlc3RVcmlTdGF0aWNSZXNvdXJjZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qYXZheFNlcnZsZXRFcnJvclJlcXVlc3RVcmlTdGF0aWNSZXNvdXJjZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWphdmF4LXNlcnZsZXQtZXJyb3ItcmVxdWVzdC11cmktc3RhdGljLXJlc291cmNlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvamF2YXhTZXJ2bGV0RXJyb3JSZXF1ZXN0VXJpU3RhdGljUmVzb3VyY2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2phdmF4U2VydmxldEVycm9yUmVxdWVzdFVyaVN0YXRpY1Jlc291cmNlL2J1aWxkLnhtbAppbmRleCA4NTQyZTkxLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvamF2YXhTZXJ2bGV0RXJyb3JSZXF1ZXN0VXJpU3RhdGljUmVzb3VyY2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qYXZheFNlcnZsZXRFcnJvclJlcXVlc3RVcmlTdGF0aWNSZXNvdXJjZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE3ICs0MiwxNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pteFVuZGVwbG95RXZlbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pteFVuZGVwbG95RXZlbnQvV2ViVGVzdC5qYXZhCmluZGV4IDQ2YjVhMzUuLjc3NWUzNTNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvam14VW5kZXBsb3lFdmVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pteFVuZGVwbG95RXZlbnQvV2ViVGVzdC5qYXZhCkBAIC0yNiw4ICsyNiw4IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICBwcml2YXRlIHN0YXRpYyBVUkwgdXJsOwogICAgIHByaXZhdGUgc3RhdGljIE9iamVjdE91dHB1dFN0cmVhbSBvYmplY3RXcml0ZXIgPSBudWxsOwotICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7ICAKLSAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOworCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgdGhyb3dzIEV4Y2VwdGlvbnsKICAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwogICAgICAgICBTdHJpbmcgcG9ydCA9IGFyZ3NbMV07CkBAIC0zNSw3ICszNSw3IEBACiAKICAgICAgICAgdHJ5ewogICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiSk1YIHVuZGVwbG95bWVudCBldmVudCB0ZXN0LiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QgKyAiL1NlcnZsZXRUZXN0Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuIEludm9raW5nIHVybDogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgICAgIGNvbm4gPSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKQEAgLTQzLDEzICs0MywxMyBAQAogICAgICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIHVybENvbm5lY3Rpb24gPSAoSHR0cFVSTENvbm5lY3Rpb24pY29ubjsKICAgICAgICAgICAgICAgICB1cmxDb25uZWN0aW9uLnNldERvT3V0cHV0KHRydWUpOwogCi0gICAgICAgICAgICAgICAgRGF0YU91dHB1dFN0cmVhbSBvdXQgPSAKKyAgICAgICAgICAgICAgICBEYXRhT3V0cHV0U3RyZWFtIG91dCA9CiAgICAgICAgICAgICAgICAgICAgbmV3IERhdGFPdXRwdXRTdHJlYW0odXJsQ29ubmVjdGlvbi5nZXRPdXRwdXRTdHJlYW0oKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVCeXRlKDEpOwogCiAgICAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlPSAgdXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmVzcG9uc2VDb2RlOiAiICsgcmVzcG9uc2VDb2RlKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgaWYgKHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCkgIT0gNDA0KXsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImpteFVuZGVwbG95RXZlbnQiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qbXhVbmRlcGxveUV2ZW50L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvam14VW5kZXBsb3lFdmVudC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI3OWE3NWQuLjBmYzZkOWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qbXhVbmRlcGxveUV2ZW50L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pteFVuZGVwbG95RXZlbnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpteFVuZGVwbG95RXZlbnQiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpteFVuZGVwbG95RXZlbnQiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLWpteFVuZGVwbG95RXZlbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qbXhVbmRlcGxveUV2ZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qbXhVbmRlcGxveUV2ZW50L2J1aWxkLnhtbAppbmRleCA5NWM2YmVmLi43NWQwMWFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvam14VW5kZXBsb3lFdmVudC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pteFVuZGVwbG95RXZlbnQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDggKzUzLDggQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvam14VW5kZXBsb3lFdmVudC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvam14VW5kZXBsb3lFdmVudC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNmJlNDA3My4uM2RjZmY3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pteFVuZGVwbG95RXZlbnQvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qbXhVbmRlcGxveUV2ZW50L2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjcsMTQgKzI3LDE0IEBACiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KICAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotICAgIAorCiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pteFVuZGVwbG95RXZlbnQvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pteFVuZGVwbG95RXZlbnQvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDc1MDg2MmIuLjQzYmM5MTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qbXhVbmRlcGxveUV2ZW50L3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvam14VW5kZXBsb3lFdmVudC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIGltcG9ydCBqYXZhLnNxbC4qOwogCiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldHsKLSAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsKQEAgLTQyLDkgKzQyLDkgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKICAgICAgICAgb3V0LnByaW50bG4oImpteFVuZGVwbG95RXZlbnQ6OkZBSUwiKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanJvdXRlSWRJbkNvb2tpZU9yVVJML2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanJvdXRlSWRJbkNvb2tpZU9yVVJML2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTEzNmQwMS4uMTI3M2M4NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pyb3V0ZUlkSW5Db29raWVPclVSTC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qcm91dGVJZEluQ29va2llT3JVUkwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qcm91dGUtaWQtaW4tY29va2llLW9yLXVybCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pyb3V0ZUlkSW5Db29raWVPclVSTC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanJvdXRlSWRJbkNvb2tpZU9yVVJML2J1aWxkLnhtbAppbmRleCAxMjEzNThhLi40YjA2NjBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanJvdXRlSWRJbkNvb2tpZU9yVVJML2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanJvdXRlSWRJbkNvb2tpZU9yVVJML2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjYgKzQ0LDI2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cC1wb2xpY3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPG1vdmUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcvc2VydmVyLnBvbGljeSIgCisgICAgICAgIDxtb3ZlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL3NlcnZlci5wb2xpY3kiCiAgICAgICAgICAgICAgIHRvZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcvc2VydmVyLnBvbGljeS5TQVZFIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9InNlcnZlci5wb2xpY3kiIAorICAgICAgICA8Y29weSBmaWxlPSJzZXJ2ZXIucG9saWN5IgogICAgICAgICAgICAgICB0b2ZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL3NlcnZlci5wb2xpY3kiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTcxLDcgKzcxLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODMsMTMgKzgzLDEzIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZS1wb2xpY3kiIGRlcGVuZHM9InNldHVwLXBvbGljeSI+Ci0gICAgICAgIDxtb3ZlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL3NlcnZlci5wb2xpY3kuU0FWRSIgCisgICAgICAgIDxtb3ZlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL3NlcnZlci5wb2xpY3kuU0FWRSIKICAgICAgICAgICAgICAgdG9maWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZy9zZXJ2ZXIucG9saWN5Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNlc3Npb25JZFBhcmFtZXRlci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNlc3Npb25JZFBhcmFtZXRlci9XZWJUZXN0LmphdmEKaW5kZXggOGE1YTY5Mi4uY2JhZTQ5ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzZXNzaW9uSWRQYXJhbWV0ZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc2Vzc2lvbklkUGFyYW1ldGVyL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBJVCAxMzEyOSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoZ2V0KTsKICAgICAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtODUsNyArODUsNyBAQAogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNlc3Npb24gaWQgPSAiICsgaWQpOwogICAgICAgICAgICAgcmV0dXJuIGlkOwotCSAgICB9IGZpbmFsbHkgeworICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgaWYgKGJpcyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgYmlzLmNsb3NlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNlc3Npb25JZFBhcmFtZXRlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzZXNzaW9uSWRQYXJhbWV0ZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBlMmQxNWQ1Li4wYWUzMjQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNlc3Npb25JZFBhcmFtZXRlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc2Vzc2lvbklkUGFyYW1ldGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDkgKzE1LDkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNlc3Npb25JZC1wYXJhbWV0ZXIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzZXNzaW9uSWQtcGFyYW1ldGVyIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNlc3Npb25JZFBhcmFtZXRlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNlc3Npb25JZFBhcmFtZXRlci9idWlsZC54bWwKaW5kZXggZjgwNTNjZC4uYjM5ZDE3YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzZXNzaW9uSWRQYXJhbWV0ZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc2Vzc2lvbklkUGFyYW1ldGVyL2J1aWxkLnhtbApAQCAtMzYsOSArMzYsOSBAQAogICAgICAgPGRlbGV0ZSBmaWxlPSJXZWJUZXN0LmNsYXNzIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IlJlcFJ1bkNvbmYudHh0Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTY1LDEwICs2NSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc2ZXaXRoQnVuZGxlZE9uZURvdE9uZUphckZpbGVzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc2ZXaXRoQnVuZGxlZE9uZURvdE9uZUphckZpbGVzL1dlYlRlc3QuamF2YQppbmRleCAwYThlMTI1Li5hYjA0ZDQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNmV2l0aEJ1bmRsZWRPbmVEb3RPbmVKYXJGaWxlcy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzZldpdGhCdW5kbGVkT25lRG90T25lSmFyRmlsZXMvV2ViVGVzdC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDY1MSIpOwpAQCAtNTksMTEgKzU5LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL3Rlc3QuanNwIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTgyLDEwICs4MiwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNmV2l0aEJ1bmRsZWRPbmVEb3RPbmVKYXJGaWxlcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzZldpdGhCdW5kbGVkT25lRG90T25lSmFyRmlsZXMvYnVpbGQucHJvcGVydGllcwppbmRleCBlNGIzZTFlLi5lNzE5OTdiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNmV2l0aEJ1bmRsZWRPbmVEb3RPbmVKYXJGaWxlcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc2ZXaXRoQnVuZGxlZE9uZURvdE9uZUphckZpbGVzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNmLXdpdGgtYnVuZGxlZC1vbmUtZG90LW9uZS1qYXItZmlsZXMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc2ZXaXRoQnVuZGxlZE9uZURvdE9uZUphckZpbGVzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc2ZXaXRoQnVuZGxlZE9uZURvdE9uZUphckZpbGVzL2J1aWxkLnhtbAppbmRleCA4NTQyZTkxLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNmV2l0aEJ1bmRsZWRPbmVEb3RPbmVKYXJGaWxlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzZldpdGhCdW5kbGVkT25lRG90T25lSmFyRmlsZXMvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNyArNDIsMTcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3Atc2VjdXJpdHkvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcC1zZWN1cml0eS9XZWJUZXN0LmphdmEKaW5kZXggYWJkZDYyMC4uNDkzZWI5NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcC1zZWN1cml0eS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcC1zZWN1cml0eS9XZWJUZXN0LmphdmEKQEAgLTI0LDEyICsyNCwxMiBAQAogICogaXMgbm90IGRlZmluZWQgaW4gd2ViLnhtbAogICovCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDE7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9ICJ3ZWItanNwLXNlY3VyaXR5IjsKIAotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTQzLDEzICs0MywxMyBAQAogCiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7CiAgICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZ29HZXQoaG9zdCwgcG9ydCwgY29udGV4dFJvb3QgKyAiL3Rlc3QuanNwIiApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChjb3VudCAhPSBFWFBFQ1RFRF9DT1VOVCl7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwotICAgICAgICAgICAgfSAgICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpAQCAtODQsMTggKzg0LDE4IEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmVOdW0gKyAiOiAgIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3RhdHVzID0gbGluZS5zdWJzdHJpbmcoaW5kZXgrMik7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuZXF1YWxzSWdub3JlQ2FzZSgiUEFTUyIpKXsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbGluZU51bSsrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRlc3QgVU5QUkVESUNURUQtRkFJTFVSRSIpOwogICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CkBAIC0xMTIsNSArMTEyLDUgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7fQogICAgICAgICB9CiAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwLXNlY3VyaXR5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwLXNlY3VyaXR5L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNTc5NjczNy4uYWVjZmU2MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcC1zZWN1cml0eS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3Atc2VjdXJpdHkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1zZWN1cml0eSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXNlY3VyaXR5Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1qc3Atc2VjdXJpdHkiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3Atc2VjdXJpdHkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcC1zZWN1cml0eS9idWlsZC54bWwKaW5kZXggM2E2Yzc0Zi4uZjU2MWMwOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcC1zZWN1cml0eS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcC1zZWN1cml0eS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKQEAgLTY0LDExICs2NCwxMSBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imdyb3VwcyIgdmFsdWU9IkFkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04MCwxMCArODAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtdXNlci1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEFsbG93RXJyb3JQYWdlVG9TZXRSZXNwb25zZUNoYXJzZXRJZk5vT3V0cHV0V3JpdHRlbi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQWxsb3dFcnJvclBhZ2VUb1NldFJlc3BvbnNlQ2hhcnNldElmTm9PdXRwdXRXcml0dGVuL1dlYlRlc3QuamF2YQppbmRleCBmMjZhNTM3Li5iOTEyY2E4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQWxsb3dFcnJvclBhZ2VUb1NldFJlc3BvbnNlQ2hhcnNldElmTm9PdXRwdXRXcml0dGVuL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQWxsb3dFcnJvclBhZ2VUb1NldFJlc3BvbnNlQ2hhcnNldElmTm9PdXRwdXRXcml0dGVuL1dlYlRlc3QuamF2YQpAQCAtMjksNyArMjksNyBAQAogICogVGVzdCBhY2Nlc3NlcyA0MDMuanNwLCB3aGljaCBzZXRzIHRoZSByZXNwb25zZSBjb2RlIHRvIDQwMyBhbmQgdGhlcmVmb3JlCiAgKiBjYXVzZXMgYSBmb3J3YXJkIHRvIHRoZSBlcnJvcjQwMy5qc3AgZXJyb3IgcGFnZSwgd2hpY2ggc2V0cyB0aGUgcmVzcG9uc2UKICAqIGNvbnRlbnQgdHlwZSB0byB0ZXh0L3htbDtjaGFyc2V0PVNoaWZ0X0pJUy4KLSAqIAorICoKICAqIFRlc3QgdGhlbiBhY2Nlc3NlcyB0aHJvd2FibGUuanNwLCB3aGljaCB0aHJvd3MgYSBUaHJvd2FibGUgYW5kIHRoZXJlZm9yZQogICogY2F1c2VzIGEgZm9yd2FyZCB0byB0aGUgZXJyb3JUaHJvd2FibGUuanNwIGVycm9yIHBhZ2UsIHdoaWNoIHNldHMgdGhlCiAgKiByZXNwb25zZSBjb250ZW50IHR5cGUgdG8gdGV4dC94bWw7Y2hhcnNldD1TaGlmdF9KSVMuCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSA4MTUiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC02NSw4ICs2NSw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgiLzQwMy5qc3AiLCAiSFRUUC8xLjEgNDAzIik7CiAgICAgICAgICAgICBpbnZva2UoIi90aHJvd2FibGUuanNwIiwgIkhUVFAvMS4xIDUwMCIpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEFsbG93RXJyb3JQYWdlVG9TZXRSZXNwb25zZUNoYXJzZXRJZk5vT3V0cHV0V3JpdHRlbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEFsbG93RXJyb3JQYWdlVG9TZXRSZXNwb25zZUNoYXJzZXRJZk5vT3V0cHV0V3JpdHRlbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDFhYTQ1MmUuLjcwMDFiMGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBbGxvd0Vycm9yUGFnZVRvU2V0UmVzcG9uc2VDaGFyc2V0SWZOb091dHB1dFdyaXR0ZW4vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQWxsb3dFcnJvclBhZ2VUb1NldFJlc3BvbnNlQ2hhcnNldElmTm9PdXRwdXRXcml0dGVuL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLWFsbG93LWVycm9yLXBhZ2UtdG8tc2V0LXJlc3BvbnNlLWNoYXJzZXQtaWYtbm8tb3V0cHV0LXdyaXR0ZW4iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBbGxvd0Vycm9yUGFnZVRvU2V0UmVzcG9uc2VDaGFyc2V0SWZOb091dHB1dFdyaXR0ZW4vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEFsbG93RXJyb3JQYWdlVG9TZXRSZXNwb25zZUNoYXJzZXRJZk5vT3V0cHV0V3JpdHRlbi9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEFsbG93RXJyb3JQYWdlVG9TZXRSZXNwb25zZUNoYXJzZXRJZk5vT3V0cHV0V3JpdHRlbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEFsbG93RXJyb3JQYWdlVG9TZXRSZXNwb25zZUNoYXJzZXRJZk5vT3V0cHV0V3JpdHRlbi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQW5vbnltb3VzQ2xhc3MvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEFub255bW91c0NsYXNzL1dlYlRlc3QuamF2YQppbmRleCA3MmE0YmE3Li5lZWFmYjk5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQW5vbnltb3VzQ2xhc3MvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBbm9ueW1vdXNDbGFzcy9XZWJUZXN0LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MjAyMjkwIik7CkBAIC01MSwxMSArNTEsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvanNwL3Rlc3QuanNwIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBbm9ueW1vdXNDbGFzcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEFub255bW91c0NsYXNzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWZhMGMyYS4uMWYzNmUzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEFub255bW91c0NsYXNzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEFub255bW91c0NsYXNzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLWFub255bW91cy1jbGFzcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEFub255bW91c0NsYXNzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBbm9ueW1vdXNDbGFzcy9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEFub255bW91c0NsYXNzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQW5vbnltb3VzQ2xhc3MvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEF0dHJpYnV0ZU5hbWVXaXRoQ29sb25PckRvdC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQXR0cmlidXRlTmFtZVdpdGhDb2xvbk9yRG90L1dlYlRlc3QuamF2YQppbmRleCA3NGM1ZDczLi41MzI4YWE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQXR0cmlidXRlTmFtZVdpdGhDb2xvbk9yRG90L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQXR0cmlidXRlTmFtZVdpdGhDb2xvbk9yRG90L1dlYlRlc3QuamF2YQpAQCAtNDEsMjUgKzQxLDI1IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJ1Z3ppbGxhIDI4MzgwIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogICAgICAgICB3ZWJUZXN0LmRvVGVzdCgpOwotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbnVsbDsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL2pzcC8vdGVzdC5qc3AiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgICAgICAgICB3aGlsZSAoKGxpbmUgPSBiaXMucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBsYXN0TGluZSA9IGxpbmU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgIAorCiAgICAgICAgICAgICAgICAgaWYgKEVYUEVDVEVELmVxdWFscyhsYXN0TGluZSkpIHsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQXR0cmlidXRlTmFtZVdpdGhDb2xvbk9yRG90L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQXR0cmlidXRlTmFtZVdpdGhDb2xvbk9yRG90L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTlmNTJmOS4uZjIyY2NlMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEF0dHJpYnV0ZU5hbWVXaXRoQ29sb25PckRvdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBdHRyaWJ1dGVOYW1lV2l0aENvbG9uT3JEb3QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1hdHRyaWJ1dGUtbmFtZS13aXRoLWNvbG9uLW9yLWRvdCIvPgogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CiA8cHJvcGVydHkgbmFtZT0idGxkcyIgdmFsdWU9ImRlc2NyaXB0b3IvdGxkcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEF0dHJpYnV0ZU5hbWVXaXRoQ29sb25PckRvdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQXR0cmlidXRlTmFtZVdpdGhDb2xvbk9yRG90L2J1aWxkLnhtbAppbmRleCA4N2RiZDRjLi41YTFmMGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQXR0cmlidXRlTmFtZVdpdGhDb2xvbk9yRG90L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQXR0cmlidXRlTmFtZVdpdGhDb2xvbk9yRG90L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01MywxMCArNTMsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBdHRyaWJ1dGVOYW1lV2l0aENvbG9uT3JEb3QvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEF0dHJpYnV0ZU5hbWVXaXRoQ29sb25PckRvdC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMTdiOTUyZC4uZDRjYmU4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEF0dHJpYnV0ZU5hbWVXaXRoQ29sb25PckRvdC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEF0dHJpYnV0ZU5hbWVXaXRoQ29sb25PckRvdC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTI0LDkgKzI0LDkgQEAKIAogICAgIDxqc3AtY29uZmlnPgogICAgICAgICA8dGFnbGliPgotCSAgICA8dGFnbGliLXVyaT5odHRwOi8vczFhcy9teXRhZ2xpYjwvdGFnbGliLXVyaT4KLQkgICAgPHRhZ2xpYi1sb2NhdGlvbj4vV0VCLUlORi90bGRzL215LXRhZ2xpYi50bGQ8L3RhZ2xpYi1sb2NhdGlvbj4KLQk8L3RhZ2xpYj4KKyAgICAgICAgPHRhZ2xpYi11cmk+aHR0cDovL3MxYXMvbXl0YWdsaWI8L3RhZ2xpYi11cmk+CisgICAgICAgIDx0YWdsaWItbG9jYXRpb24+L1dFQi1JTkYvdGxkcy9teS10YWdsaWIudGxkPC90YWdsaWItbG9jYXRpb24+CisgICAgPC90YWdsaWI+CiAgICAgPC9qc3AtY29uZmlnPgogCiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQXR0cmlidXRlTmFtZVdpdGhDb2xvbk9yRG90L3NlcnZsZXQvdGFnbGliL0VjaG9BdHRyaWJ1dGVzVGFnLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQXR0cmlidXRlTmFtZVdpdGhDb2xvbk9yRG90L3NlcnZsZXQvdGFnbGliL0VjaG9BdHRyaWJ1dGVzVGFnLmphdmEKaW5kZXggODJiYzNlNi4uNTU2ZjgyNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEF0dHJpYnV0ZU5hbWVXaXRoQ29sb25PckRvdC9zZXJ2bGV0L3RhZ2xpYi9FY2hvQXR0cmlidXRlc1RhZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBdHRyaWJ1dGVOYW1lV2l0aENvbG9uT3JEb3Qvc2VydmxldC90YWdsaWIvRWNob0F0dHJpYnV0ZXNUYWcuamF2YQpAQCAtMjUsOSArMjUsOSBAQAogaW1wb3J0IGpha2FydGEuc2VydmxldC5qc3AudGFnZXh0LkR5bmFtaWNBdHRyaWJ1dGVzOwogCiAvKioKLSAqIFNpbXBsZVRhZyBoYW5kbGVyIHRoYXQgZWNob2VzIGFsbCBpdHMgYXR0cmlidXRlcyAKKyAqIFNpbXBsZVRhZyBoYW5kbGVyIHRoYXQgZWNob2VzIGFsbCBpdHMgYXR0cmlidXRlcwogICovCi1wdWJsaWMgY2xhc3MgRWNob0F0dHJpYnV0ZXNUYWcgCitwdWJsaWMgY2xhc3MgRWNob0F0dHJpYnV0ZXNUYWcKICAgICBleHRlbmRzIFRhZ1N1cHBvcnQKICAgICBpbXBsZW1lbnRzIER5bmFtaWNBdHRyaWJ1dGVzCiB7CkBAIC01MCwxNiArNTAsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgewotCSAgICB0aHJvdyBuZXcgSnNwRXhjZXB0aW9uKGlvZS50b1N0cmluZygpLCBpb2UpOwotCX0KLSAgICAgIAorICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgeworICAgICAgICB0aHJvdyBuZXcgSnNwRXhjZXB0aW9uKGlvZS50b1N0cmluZygpLCBpb2UpOworICAgIH0KKwogCiAgICAgICAgIHJldHVybiBFVkFMX1BBR0U7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0RHluYW1pY0F0dHJpYnV0ZShTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0IHZhbHVlKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCB2YWx1ZSkKICAgICAgICAgICAgIHRocm93cyBKc3BFeGNlcHRpb24KICAgICB7CiAgICAgICAgIGtleXMuYWRkKGxvY2FsTmFtZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BCb21JbkNsYXNzaWNTeW50YXgvV2ViVGVzdC5qYXZhCmluZGV4IGM1Yjc0Y2UuLmVjMjI0Y2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BCb21JbkNsYXNzaWNTeW50YXgvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BCb21JbkNsYXNzaWNTeW50YXgvV2ViVGVzdC5qYXZhCkBAIC0yNCw4ICsyNCw4IEBACiAgKiBFYWNoIG9mIHRoZSBKU1AgcGFnZXMgYWNjZXNzZWQgYnkgdGhpcyB0ZXN0IGlzIHByZWNlZGVkIGJ5IGEgQk9NIGZyb20KICAqIHdoaWNoIHRoZSBKU1AgY29udGFpbmVyIGRlcml2ZXMgdGhlIHBhZ2UgZW5jb2Rpbmc6CiAgKgotICogIFBhZ2UgICAgICAgICAgIFBhZ2UgRW5jb2RpbmcgICAgICAgICAgQnl0ZXMgICAgICAgICAKLSAqICBVVEYtMTZCRS5qc3AgICBVVEYtMTYsIGJpZy1lbmRpYW4gICAgIEZFIEZGICAgICAgICAgCisgKiAgUGFnZSAgICAgICAgICAgUGFnZSBFbmNvZGluZyAgICAgICAgICBCeXRlcworICogIFVURi0xNkJFLmpzcCAgIFVURi0xNiwgYmlnLWVuZGlhbiAgICAgRkUgRkYKICAqICBVVEYtMTZMRS5qc3AgICBVVEYtMTYsIGxpdHRsZS1lbmRpYW4gIEZGIEZFCiAgKiAgVVRGLTguanNwICAgICAgVVRGLTggICAgICAgICAgICAgICAgICBFRiBCQiBCRgogICoKQEAgLTU4LDcgKzU4LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBCT00gaW4gSlNQIGNsYXNzaWMgc3ludGF4Iik7CkBAIC04NiwxNCArODYsMTQgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIC8qCiAgICAgICogQHJldHVybiB0cnVlIGlmIHBhc3NlZCwgZmFsc2UgaWYgZmFpbGVkCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZG9UZXN0KFN0cmluZyBqc3BQYWdlKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG51bGw7CiAgICAgICAgIHRyeSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BCb21JbkNsYXNzaWNTeW50YXgvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BCb21JbkNsYXNzaWNTeW50YXgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BCb21JbkNsYXNzaWNTeW50YXgvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEJvbUluQ2xhc3NpY1N5bnRheEVuY29kaW5nTWlzbWF0Y2hKc3BDb25maWcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEJvbUluQ2xhc3NpY1N5bnRheEVuY29kaW5nTWlzbWF0Y2hKc3BDb25maWcvV2ViVGVzdC5qYXZhCmluZGV4IDAzYzRkMTAuLmMzMWJlZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BCb21JbkNsYXNzaWNTeW50YXhFbmNvZGluZ01pc21hdGNoSnNwQ29uZmlnL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4RW5jb2RpbmdNaXNtYXRjaEpzcENvbmZpZy9XZWJUZXN0LmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKICAqCiAgKiBUaGlzIHRlc3QgZW5mb3JjZXMgdGhhdCBhIHRyYW5zbGF0aW9uIGVycm9yIGJlIHJlcG9ydGVkIGlmIHRoZSBwYWdlCiAgKiBlbmNvZGluZyBpZGVudGlmaWVkIGJ5IGEgQk9NIChpbiB0aGlzIGNhc2U6IFVURi0xNkJFKSBkb2VzIG5vdCBtYXRjaCB0aGUKLSAqIHBhZ2UgZW5jb2RpbmcgZGVyaXZlZCBmcm9tIGpzcCBjb25maWd1cmF0aW9uIGVsZW1lbnQgcGFnZS1lbmNvZGluZyAKKyAqIHBhZ2UgZW5jb2RpbmcgZGVyaXZlZCBmcm9tIGpzcCBjb25maWd1cmF0aW9uIGVsZW1lbnQgcGFnZS1lbmNvZGluZwogICogKGluIHRoaXMgY2FzZTogVVRGLTgpLgogICovCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7CkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQk9NIGVuY29kaW5nIG1pc21hdGNoIik7CkBAIC01NiwxMSArNTYsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvVVRGLTE2QkUuanNwIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gNTAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDUwMCkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogNTAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEJvbUluQ2xhc3NpY1N5bnRheEVuY29kaW5nTWlzbWF0Y2hKc3BDb25maWcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BCb21JbkNsYXNzaWNTeW50YXhFbmNvZGluZ01pc21hdGNoSnNwQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMTk3MTdiMC4uYjFhODg4ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEJvbUluQ2xhc3NpY1N5bnRheEVuY29kaW5nTWlzbWF0Y2hKc3BDb25maWcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4RW5jb2RpbmdNaXNtYXRjaEpzcENvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1ib20taW4tY2xhc3NpYy1zeW50YXgtZW5jb2RpbmctbWlzbWF0Y2gtanNwY29uZmlnIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4RW5jb2RpbmdNaXNtYXRjaEpzcENvbmZpZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4RW5jb2RpbmdNaXNtYXRjaEpzcENvbmZpZy9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEJvbUluQ2xhc3NpY1N5bnRheEVuY29kaW5nTWlzbWF0Y2hKc3BDb25maWcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BCb21JbkNsYXNzaWNTeW50YXhFbmNvZGluZ01pc21hdGNoSnNwQ29uZmlnL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BCb21JbkNsYXNzaWNTeW50YXhFbmNvZGluZ01pc21hdGNoUGFnZURpci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4RW5jb2RpbmdNaXNtYXRjaFBhZ2VEaXIvV2ViVGVzdC5qYXZhCmluZGV4IDk0ZGFlYTcuLmIwYTVhMGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BCb21JbkNsYXNzaWNTeW50YXhFbmNvZGluZ01pc21hdGNoUGFnZURpci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEJvbUluQ2xhc3NpY1N5bnRheEVuY29kaW5nTWlzbWF0Y2hQYWdlRGlyL1dlYlRlc3QuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJPTSBlbmNvZGluZyBtaXNtYXRjaCIpOwpAQCAtNTYsMTEgKzU2LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL2VuY29kaW5nTWlzbWF0Y2guanNwIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gNTAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDUwMCkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogNTAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEJvbUluQ2xhc3NpY1N5bnRheEVuY29kaW5nTWlzbWF0Y2hQYWdlRGlyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4RW5jb2RpbmdNaXNtYXRjaFBhZ2VEaXIvYnVpbGQucHJvcGVydGllcwppbmRleCAyNTBiNzFjLi5kMWRlYWFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4RW5jb2RpbmdNaXNtYXRjaFBhZ2VEaXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4RW5jb2RpbmdNaXNtYXRjaFBhZ2VEaXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtYm9tLWluLWNsYXNzaWMtc3ludGF4LWVuY29kaW5nLW1pc21hdGNoLXBhZ2VkaXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BCb21JbkNsYXNzaWNTeW50YXhFbmNvZGluZ01pc21hdGNoUGFnZURpci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4RW5jb2RpbmdNaXNtYXRjaFBhZ2VEaXIvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BCb21JbkNsYXNzaWNTeW50YXhFbmNvZGluZ01pc21hdGNoUGFnZURpci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEJvbUluQ2xhc3NpY1N5bnRheEVuY29kaW5nTWlzbWF0Y2hQYWdlRGlyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWNoZVRhZ2xpYlByZWNvbXBpbGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhY2hlVGFnbGliUHJlY29tcGlsZS9XZWJUZXN0LmphdmEKaW5kZXggOTUxNmQzNS4uYjcwZjQwMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhY2hlVGFnbGliUHJlY29tcGlsZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhY2hlVGFnbGliUHJlY29tcGlsZS9XZWJUZXN0LmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKICAqICAgKFNRRSBjYWNoZSB0ZXN0cyBmYWlsZWQgL3cgUFdDNjExNzogRmlsZSAiL2pzcC9jYWNoaW5nL1N1biBPTkUKICAqICAgQXBwbGljYXRpb24gU2VydmVyIFRhZ3MiIG5vdCBmb3VuZCkKICAqCi0gKiBNYWtlIHN1cmUgdGhhdCBkdXJpbmcgcHJlY29tcGlsYXRpb24sIHRoZSBKU1AgY29tcGlsZXIgd2lsbCBub3QgCisgKiBNYWtlIHN1cmUgdGhhdCBkdXJpbmcgcHJlY29tcGlsYXRpb24sIHRoZSBKU1AgY29tcGlsZXIgd2lsbCBub3QKICAqIChlcnJvbmVvdXNseSkgaWdub3JlIGFueSBsb2NhbGx5IGJ1bmRsZWQgYXBwc2Vydi10YWdzLmphciAoYW5kIGNhdXNlCiAgKiBwcmVjb21waWxhdGlvbiBhbmQgdGhlcmVmb3JlIGRlcGxveW1lbnQgdG8gZmFpbCksIGV2ZW4gdGhvdWdoIHRoaXMgSkFSCiAgKiBmaWxlIGlzIG5vdCBsaXN0ZWQgYW1vbmdzdCB0aGUgSkFSIGZpbGVzIGtub3duIHRvIGNvbnRhaW4gVExEIHJlc291cmNlcwpAQCAtNDgsNyArNDgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgMTY2OCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU2LDggKzU2LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNjcsNyArNjcsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiL2pzcC9jYWNoaW5nL2Jhc2ljQ2FjaGUuanNwIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWNoZVRhZ2xpYlByZWNvbXBpbGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWNoZVRhZ2xpYlByZWNvbXBpbGUvYnVpbGQucHJvcGVydGllcwppbmRleCBiYmY5YmZlLi5mODc3OWZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FjaGVUYWdsaWJQcmVjb21waWxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhY2hlVGFnbGliUHJlY29tcGlsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1jYWNoZS10YWdsaWItcHJlY29tcGlsZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhY2hlVGFnbGliUHJlY29tcGlsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FjaGVUYWdsaWJQcmVjb21waWxlL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FjaGVUYWdsaWJQcmVjb21waWxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FjaGVUYWdsaWJQcmVjb21waWxlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWNoaW5nSW5zdGFuY2VMZXZlbC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FjaGluZ0luc3RhbmNlTGV2ZWwvV2ViVGVzdC5qYXZhCmluZGV4IGFjYTg2MzIuLjIwMDY2MmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWNoaW5nSW5zdGFuY2VMZXZlbC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhY2hpbmdJbnN0YW5jZUxldmVsL1dlYlRlc3QuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgODM5NyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUyLDggKzUyLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNjMsNyArNjMsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiL2pzcC9jYWNoaW5nL2Jhc2ljQ2FjaGUuanNwIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWNoaW5nSW5zdGFuY2VMZXZlbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhY2hpbmdJbnN0YW5jZUxldmVsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODIzZjA0ZC4uZTQ1NDg1YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhY2hpbmdJbnN0YW5jZUxldmVsL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhY2hpbmdJbnN0YW5jZUxldmVsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLWNhY2hpbmctaW5zdGFuY2UtbGV2ZWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWNoaW5nSW5zdGFuY2VMZXZlbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FjaGluZ0luc3RhbmNlTGV2ZWwvYnVpbGQueG1sCmluZGV4IGVkMGJjNTUuLjRhOTg4YTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWNoaW5nSW5zdGFuY2VMZXZlbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhY2hpbmdJbnN0YW5jZUxldmVsL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTkgKzQ0LDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhbGxpbmdFTEZ1Y3Rpb25Gcm9tVGFnZmlsZVdpdGhpblNhbWVUYWdsaWJJbmZpbml0ZVJlY3Vyc2lvbi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FsbGluZ0VMRnVjdGlvbkZyb21UYWdmaWxlV2l0aGluU2FtZVRhZ2xpYkluZmluaXRlUmVjdXJzaW9uL1dlYlRlc3QuamF2YQppbmRleCBmN2Y1ODQ5Li5lZGRiZmUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FsbGluZ0VMRnVjdGlvbkZyb21UYWdmaWxlV2l0aGluU2FtZVRhZ2xpYkluZmluaXRlUmVjdXJzaW9uL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FsbGluZ0VMRnVjdGlvbkZyb21UYWdmaWxlV2l0aGluU2FtZVRhZ2xpYkluZmluaXRlUmVjdXJzaW9uL1dlYlRlc3QuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU5LDE0ICs1OSwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9qc3AvdGVzdC5qc3B4Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FsbGluZ0VMRnVjdGlvbkZyb21UYWdmaWxlV2l0aGluU2FtZVRhZ2xpYkluZmluaXRlUmVjdXJzaW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FsbGluZ0VMRnVjdGlvbkZyb21UYWdmaWxlV2l0aGluU2FtZVRhZ2xpYkluZmluaXRlUmVjdXJzaW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzU1OTRjZC4uYWJiZDcyOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhbGxpbmdFTEZ1Y3Rpb25Gcm9tVGFnZmlsZVdpdGhpblNhbWVUYWdsaWJJbmZpbml0ZVJlY3Vyc2lvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWxsaW5nRUxGdWN0aW9uRnJvbVRhZ2ZpbGVXaXRoaW5TYW1lVGFnbGliSW5maW5pdGVSZWN1cnNpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTIgKzE1LDEyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1jYWxsaW5nLWVsLWZ1Y3Rpb24tZnJvbS10YWdmaWxlLXdpdGhpbi1zYW1lLXRhZ2xpYi1pbmZpbml0ZS1yZWN1cnNpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0bGRzIiB2YWx1ZT0iZGVzY3JpcHRvci90bGRzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FsbGluZ0VMRnVjdGlvbkZyb21UYWdmaWxlV2l0aGluU2FtZVRhZ2xpYkluZmluaXRlUmVjdXJzaW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWxsaW5nRUxGdWN0aW9uRnJvbVRhZ2ZpbGVXaXRoaW5TYW1lVGFnbGliSW5maW5pdGVSZWN1cnNpb24vYnVpbGQueG1sCmluZGV4IDA5NzQzMWMuLjVhMWYwYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWxsaW5nRUxGdWN0aW9uRnJvbVRhZ2ZpbGVXaXRoaW5TYW1lVGFnbGliSW5maW5pdGVSZWN1cnNpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWxsaW5nRUxGdWN0aW9uRnJvbVRhZ2ZpbGVXaXRoaW5TYW1lVGFnbGliSW5maW5pdGVSZWN1cnNpb24vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDggKzUzLDggQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29tbWVudGVkT3V0UGFnZURpcmVjdGl2ZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29tbWVudGVkT3V0UGFnZURpcmVjdGl2ZS9XZWJUZXN0LmphdmEKaW5kZXggMTEyZDY3My4uYTk4Yjk3NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbW1lbnRlZE91dFBhZ2VEaXJlY3RpdmUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb21tZW50ZWRPdXRQYWdlRGlyZWN0aXZlL1dlYlRlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBCdWd6aWxsYSAyOTk3MSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDggKzQ2LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlSnNwKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGludm9rZUpzcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyAiLyIgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgKyAiL2pzcC90ZXN0LmpzcCI7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pCkBAIC03Myw2ICs3Myw2IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb21tZW50ZWRPdXRQYWdlRGlyZWN0aXZlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29tbWVudGVkT3V0UGFnZURpcmVjdGl2ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGVjNWI1MjQuLjBhODg4ZjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb21tZW50ZWRPdXRQYWdlRGlyZWN0aXZlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbW1lbnRlZE91dFBhZ2VEaXJlY3RpdmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1jb21tZW50ZWQtb3V0LXBhZ2UtZGlyZWN0aXZlIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtY29tbWVudGVkLW91dC1wYWdlLWRpcmVjdGl2ZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb21tZW50ZWRPdXRQYWdlRGlyZWN0aXZlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb21tZW50ZWRPdXRQYWdlRGlyZWN0aXZlL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29tbWVudGVkT3V0UGFnZURpcmVjdGl2ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbW1lbnRlZE91dFBhZ2VEaXJlY3RpdmUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbW1lbnRlZE91dFBhZ2VEaXJlY3RpdmUxL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb21tZW50ZWRPdXRQYWdlRGlyZWN0aXZlMS9XZWJUZXN0LmphdmEKaW5kZXggNzcxMjQyYi4uYjljYjAxMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbW1lbnRlZE91dFBhZ2VEaXJlY3RpdmUxL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29tbWVudGVkT3V0UGFnZURpcmVjdGl2ZTEvV2ViVGVzdC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJ1Z3ppbGxhIDI5OTcxIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDcsOCArNDcsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VKc3AoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW52b2tlSnNwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICArICIvanNwL3Rlc3QuanNwIjsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikKQEAgLTc0LDYgKzc0LDYgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbW1lbnRlZE91dFBhZ2VEaXJlY3RpdmUxL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29tbWVudGVkT3V0UGFnZURpcmVjdGl2ZTEvYnVpbGQucHJvcGVydGllcwppbmRleCBlYzViNTI0Li4wYTg4OGYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29tbWVudGVkT3V0UGFnZURpcmVjdGl2ZTEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29tbWVudGVkT3V0UGFnZURpcmVjdGl2ZTEvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1jb21tZW50ZWQtb3V0LXBhZ2UtZGlyZWN0aXZlIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtY29tbWVudGVkLW91dC1wYWdlLWRpcmVjdGl2ZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb21tZW50ZWRPdXRQYWdlRGlyZWN0aXZlMS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29tbWVudGVkT3V0UGFnZURpcmVjdGl2ZTEvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb21tZW50ZWRPdXRQYWdlRGlyZWN0aXZlMS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbW1lbnRlZE91dFBhZ2VEaXJlY3RpdmUxL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdCdWZmZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0J1ZmZlci9XZWJUZXN0LmphdmEKaW5kZXggOTRjYzUzNC4uMWU2ZjgzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0J1ZmZlci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0J1ZmZlci9XZWJUZXN0LmphdmEKQEAgLTQyLDI1ICs0MiwyNSBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBqc3A6YXR0cmlidXRlIHdpdGggb21pdCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKICAgICAgICAgd2ViVGVzdC5kb1Rlc3QoKTsKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG51bGw7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9qc3AvdGVzdC5qc3AiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdCdWZmZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdCdWZmZXIvYnVpbGQucHJvcGVydGllcwppbmRleCA2MzMyNDQxLi5iNmJhZGY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnQnVmZmVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0J1ZmZlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMyArMTUsMTMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLWNvbmZpZy1idWZmZXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgogPHByb3BlcnR5IG5hbWU9InRsZHMiIHZhbHVlPSJkZXNjcmlwdG9yL3RsZHMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdCdWZmZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0J1ZmZlci9idWlsZC54bWwKaW5kZXggODdkYmQ0Yy4uNWExZjBjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0J1ZmZlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0J1ZmZlci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnRGVmYXVsdENvbnRlbnRUeXBlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdEZWZhdWx0Q29udGVudFR5cGUvV2ViVGVzdC5qYXZhCmluZGV4IGRkMDAxYmIuLjA5YmY5N2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdEZWZhdWx0Q29udGVudFR5cGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdEZWZhdWx0Q29udGVudFR5cGUvV2ViVGVzdC5qYXZhCkBAIC00MiwyNSArNDIsMjUgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IganNwOmF0dHJpYnV0ZSB3aXRoIG9taXQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAgICAgICAgIHdlYlRlc3QuZG9UZXN0KCk7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBudWxsOwotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvanNwL3Rlc3QuanNwIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnRGVmYXVsdENvbnRlbnRUeXBlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnRGVmYXVsdENvbnRlbnRUeXBlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGU1YzdkZi4uY2VjMWI3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0RlZmF1bHRDb250ZW50VHlwZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdEZWZhdWx0Q29udGVudFR5cGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1jb25maWctZGVmYXVsdC1jb250ZW50LXR5cGUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgogPHByb3BlcnR5IG5hbWU9InRsZHMiIHZhbHVlPSJkZXNjcmlwdG9yL3RsZHMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdEZWZhdWx0Q29udGVudFR5cGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0RlZmF1bHRDb250ZW50VHlwZS9idWlsZC54bWwKaW5kZXggODdkYmQ0Yy4uNWExZjBjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0RlZmF1bHRDb250ZW50VHlwZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0RlZmF1bHRDb250ZW50VHlwZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnR2V0U2VydmxldFBhdGgvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0dldFNlcnZsZXRQYXRoL1dlYlRlc3QuamF2YQppbmRleCA5NmVkMmMwLi5lYWI3MmU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnR2V0U2VydmxldFBhdGgvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdHZXRTZXJ2bGV0UGF0aC9XZWJUZXN0LmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQnVnemlsbGEgMjc3MDQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MywxNCArNTMsMTQgQEAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBudWxsOwotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFNFUlZMRVRfUEFUSCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnR2V0U2VydmxldFBhdGgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdHZXRTZXJ2bGV0UGF0aC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGFkNTc4YjAuLjZiNmUxYjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdHZXRTZXJ2bGV0UGF0aC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdHZXRTZXJ2bGV0UGF0aC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1jb25maWctZ2V0LXNlcnZsZXQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdHZXRTZXJ2bGV0UGF0aC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnR2V0U2VydmxldFBhdGgvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdHZXRTZXJ2bGV0UGF0aC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0dldFNlcnZsZXRQYXRoL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdJbmNsdWRlQ2hhaW4vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0luY2x1ZGVDaGFpbi9XZWJUZXN0LmphdmEKaW5kZXggOTlkODE2ZC4uNjIwYjU4MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0luY2x1ZGVDaGFpbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0luY2x1ZGVDaGFpbi9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQnVnemlsbGEgMjc3MDQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MiwxNCArNTIsMTQgQEAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBudWxsOwotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIvc3ViZGlyL2luY2x1ZGluZy50eHQiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdJbmNsdWRlQ2hhaW4vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdJbmNsdWRlQ2hhaW4vYnVpbGQucHJvcGVydGllcwppbmRleCBmMjhkOGMxLi5jNWRjMWE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSW5jbHVkZUNoYWluL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0luY2x1ZGVDaGFpbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1jb25maWctaW5jbHVkZS1jaGFpbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0luY2x1ZGVDaGFpbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSW5jbHVkZUNoYWluL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSW5jbHVkZUNoYWluL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSW5jbHVkZUNoYWluL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdKYXZhY1NvdXJjZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSmF2YWNTb3VyY2UvV2ViVGVzdC5qYXZhCmluZGV4IGY3ZjUwNzYuLmQzMDMzMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdKYXZhY1NvdXJjZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0phdmFjU291cmNlL1dlYlRlc3QuamF2YQpAQCAtNTIsMTEgKzUyLDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL3Rlc3QuanNwIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0phdmFjU291cmNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSmF2YWNTb3VyY2UvYnVpbGQucHJvcGVydGllcwppbmRleCA4MDM5ZjNhLi5iYjU3YjQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSmF2YWNTb3VyY2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSmF2YWNTb3VyY2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtY29uZmlnLWphdmFjLXNvdXJjZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0phdmFjU291cmNlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdKYXZhY1NvdXJjZS9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0phdmFjU291cmNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSmF2YWNTb3VyY2UvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0phdmFjU291cmNlL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSmF2YWNTb3VyY2UvZGVzY3JpcHRvci9zdW4td2ViLnhtbAppbmRleCA5NGEzZjhkLi40ZGY2Y2Y3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSmF2YWNTb3VyY2UvZGVzY3JpcHRvci9zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSmF2YWNTb3VyY2UvZGVzY3JpcHRvci9zdW4td2ViLnhtbApAQCAtMjIsNSArMjIsNSBAQAogPHN1bi13ZWItYXBwPgogICA8anNwLWNvbmZpZz4KICAgICA8cHJvcGVydHkgbmFtZT0iY29tcGlsZXJTb3VyY2VWTSIgdmFsdWU9IjEuNCIgLz4KLSAgPC9qc3AtY29uZmlnPiAKKyAgPC9qc3AtY29uZmlnPgogPC9zdW4td2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdKc3BGaWxlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdKc3BGaWxlL1dlYlRlc3QuamF2YQppbmRleCBlNjI4MGU3Li40M2Q5N2Q3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSnNwRmlsZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0pzcEZpbGUvV2ViVGVzdC5qYXZhCkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdKc3BGaWxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSnNwRmlsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDg5YWVkMDguLjFiNGVhODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdKc3BGaWxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0pzcEZpbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtY29uZmlnLWpzcC1maWxlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSnNwRmlsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSnNwRmlsZS9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0pzcEZpbGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdKc3BGaWxlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdKc3BGaWxlL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSnNwRmlsZS9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCmluZGV4IGExZjliZmYuLjY5NmI1OGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdKc3BGaWxlL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0pzcEZpbGUvZGVzY3JpcHRvci9zdW4td2ViLnhtbApAQCAtMjIsNSArMjIsNSBAQAogPHN1bi13ZWItYXBwPgogICA8anNwLWNvbmZpZz4KICAgICA8cHJvcGVydHkgbmFtZT0ibXlQYXJhbSIgdmFsdWU9Im15VmFsdWUiIC8+Ci0gIDwvanNwLWNvbmZpZz4gCisgIDwvanNwLWNvbmZpZz4KIDwvc3VuLXdlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnTW9kaWZpY2F0aW9uVGVzdEludGVydmFsL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdNb2RpZmljYXRpb25UZXN0SW50ZXJ2YWwvV2ViVGVzdC5qYXZhCmluZGV4IGE5ZGIxMTUuLjA4NTEyY2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdNb2RpZmljYXRpb25UZXN0SW50ZXJ2YWwvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdNb2RpZmljYXRpb25UZXN0SW50ZXJ2YWwvV2ViVGVzdC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAgKiBpZ25vcmVkIikuCiAgKgogICogVGhpcyB0ZXN0OgotICogCisgKgogICogIC0gYWNjZXNzZXMgYSBKU1AsCiAgKgogICogIC0gdXBkYXRlcyB0aGUgSlNQICh0aHJvdWdoIGEgc2VydmxldCksCkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIG1vZGlmaWNhdGlvblRlc3RJbnRlcnZhbCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAianNwLWNvbmZpZyBwcm9wZXJ0eSIpOwpAQCAtNjEsOCArNjEsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBydW4oKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC04NiwxMCArODYsMTAgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVcGRhdGluZyBKU1AgLi4uIik7CiAgICAgICAgIGJvZHlMaW5lID0gZ2V0Qm9keUxpbmUoIlVwZGF0ZUpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYm9keUxpbmUpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgIC8qCi0gICAgICAgICAqIEFjY2VzcyBKU1AuIE11c3QgZ2V0IG9yaWdpbmFsIGNvbnRlbnRzLCBiZWNhdXNlIHRoZSAKLSAgICAgICAgICogbW9kaWZpY2F0aW9uVGVzdEludGVydmFsIHNwZWNpZmllZCBpbiBzdW4td2ViLnhtbCBoYXMgbm90IHlldCAKKyAgICAgICAgICogQWNjZXNzIEpTUC4gTXVzdCBnZXQgb3JpZ2luYWwgY29udGVudHMsIGJlY2F1c2UgdGhlCisgICAgICAgICAqIG1vZGlmaWNhdGlvblRlc3RJbnRlcnZhbCBzcGVjaWZpZWQgaW4gc3VuLXdlYi54bWwgaGFzIG5vdCB5ZXQKICAgICAgICAgICogZXhwaXJlZCwgd2hpY2ggbWVhbnMgdGhhdCB3ZSBtdXN0IG5vdCAoeWV0KSBjaGVjayBmb3IgYW55CiAgICAgICAgICAqIG1vZGlmaWNhdGlvbnMgb2YgdGhlIEpTUAogICAgICAgICAgKi8KQEAgLTE1NCw1ICsxNTQsNSBAQAogICAgICAgICAgICAgICAgIGlmIChiaXMgIT0gbnVsbCkgYmlzLmNsb3NlKCk7CiAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkge30KICAgICAgICAgfQotICAgIH0gICAKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnTW9kaWZpY2F0aW9uVGVzdEludGVydmFsL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnTW9kaWZpY2F0aW9uVGVzdEludGVydmFsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjA1ZGM4Ny4uNDkwZDRiMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ01vZGlmaWNhdGlvblRlc3RJbnRlcnZhbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdNb2RpZmljYXRpb25UZXN0SW50ZXJ2YWwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtY29uZmlnLW1vZGlmaWNhdGlvbi10ZXN0LWludGVydmFsIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnTW9kaWZpY2F0aW9uVGVzdEludGVydmFsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdNb2RpZmljYXRpb25UZXN0SW50ZXJ2YWwvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdNb2RpZmljYXRpb25UZXN0SW50ZXJ2YWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdNb2RpZmljYXRpb25UZXN0SW50ZXJ2YWwvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ01vZGlmaWNhdGlvblRlc3RJbnRlcnZhbC9kZXNjcmlwdG9yL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ01vZGlmaWNhdGlvblRlc3RJbnRlcnZhbC9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCmluZGV4IDRjOTc5NzQuLjI3MzA0NGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdNb2RpZmljYXRpb25UZXN0SW50ZXJ2YWwvZGVzY3JpcHRvci9zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnTW9kaWZpY2F0aW9uVGVzdEludGVydmFsL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKQEAgLTIyLDUgKzIyLDUgQEAKIDxzdW4td2ViLWFwcD4KICAgPGpzcC1jb25maWc+CiAgICAgPHByb3BlcnR5IG5hbWU9Im1vZGlmaWNhdGlvblRlc3RJbnRlcnZhbCIgdmFsdWU9IjYwIiAvPgotICA8L2pzcC1jb25maWc+IAorICA8L2pzcC1jb25maWc+CiA8L3N1bi13ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ01vZGlmaWNhdGlvblRlc3RJbnRlcnZhbC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnTW9kaWZpY2F0aW9uVGVzdEludGVydmFsL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA2MjExYjU5Li5lMTZlNmI1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnTW9kaWZpY2F0aW9uVGVzdEludGVydmFsL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnTW9kaWZpY2F0aW9uVGVzdEludGVydmFsL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjcsNyArMjcsNyBAQAogICAgICAgICA8ZGlzcGxheS1uYW1lPlVwZGF0ZUpzcDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlVwZGF0ZUpzcDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz5VcGRhdGVKc3A8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlVwZGF0ZUpzcDwvc2VydmxldC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ01vZGlmaWNhdGlvblRlc3RJbnRlcnZhbC9zZXJ2bGV0L1VwZGF0ZUpzcC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ01vZGlmaWNhdGlvblRlc3RJbnRlcnZhbC9zZXJ2bGV0L1VwZGF0ZUpzcC5qYXZhCmluZGV4IGNlNGE1YjAuLjUxYWE0MDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdNb2RpZmljYXRpb25UZXN0SW50ZXJ2YWwvc2VydmxldC9VcGRhdGVKc3AuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnTW9kaWZpY2F0aW9uVGVzdEludGVydmFsL3NlcnZsZXQvVXBkYXRlSnNwLmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKIAogICAgICAgICAvKgogICAgICAgICAgKiBNYW51YWxseSB1cGRhdGUgdGltZXN0YW1wIG9uIEpTUCBmaWxlIHRvIGEgdmFsdWUgZmFyIGludG8gdGhlCi0gICAgICAgICAqIGZ1dHVyZSwgc28gdGhhdCB0aGUgY29ycmVzcG9uZGluZyBzZXJ2bGV0IGNsYXNzIGZpbGUgd2lsbCBiZSAKKyAgICAgICAgICogZnV0dXJlLCBzbyB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIHNlcnZsZXQgY2xhc3MgZmlsZSB3aWxsIGJlCiAgICAgICAgICAqIGd1YXJhbnRlZWQgdG8gYmUgb3V0LW9mLWRhdGUKICAgICAgICAgICovCiAgICAgICAgIGYuc2V0TGFzdE1vZGlmaWVkKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpICsgOTAwMDAwMDAwMEwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VuZGVjbGFyZWROUy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVW5kZWNsYXJlZE5TL1dlYlRlc3QuamF2YQppbmRleCAwOTgzMDI1Li4xMWFkYmVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVW5kZWNsYXJlZE5TL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVW5kZWNsYXJlZE5TL1dlYlRlc3QuamF2YQpAQCAtNDIsMjcgKzQyLDI3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGpzcDphdHRyaWJ1dGUgd2l0aCBvbWl0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogICAgICAgICB3ZWJUZXN0LmRvVGVzdCgpOwogICAgICAgICB3ZWJUZXN0LmRvVGVzdDIoKTsKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIC8vIEFuIGVycm9yIHNob3VsZCBiZSByYWlzZWQgd2l0aCB1bmRlY2xhcmVkIHRhZwotICAgICAKLSAgICAgICAgdHJ5IHsgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvanNwL3Rlc3QuanNwIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDUwMCkgeyAKKyAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gNTAwKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVW5kZWNsYXJlZE5TL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVW5kZWNsYXJlZE5TL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYmEzZjU5NS4uMmYwNzk2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VuZGVjbGFyZWROUy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdVbmRlY2xhcmVkTlMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1jb25maWctdW5kZWNsYXJlZC1ucyIvPgogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CiA8cHJvcGVydHkgbmFtZT0idGxkcyIgdmFsdWU9ImRlc2NyaXB0b3IvdGxkcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VuZGVjbGFyZWROUy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVW5kZWNsYXJlZE5TL2J1aWxkLnhtbAppbmRleCA4N2RiZDRjLi41YTFmMGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVW5kZWNsYXJlZE5TL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVW5kZWNsYXJlZE5TL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01MywxMCArNTMsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdVc2VQcmVjb21waWxlZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVXNlUHJlY29tcGlsZWQvV2ViVGVzdC5qYXZhCmluZGV4IGNmYWY0Y2IuLjdkZTQzMTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdVc2VQcmVjb21waWxlZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkL1dlYlRlc3QuamF2YQpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MTgxOTIzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTgsOCArNTgsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBydW4oKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC0xMTcsNSArMTE3LDUgQEAKICAgICAgICAgICAgICAgICBpZiAoYmlzICE9IG51bGwpIGJpcy5jbG9zZSgpOwogICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHt9CiAgICAgICAgIH0KLSAgICB9ICAgCisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVXNlUHJlY29tcGlsZWQvYnVpbGQucHJvcGVydGllcwppbmRleCBhZTM2MjQzLi4xY2I2ODkxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVXNlUHJlY29tcGlsZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVXNlUHJlY29tcGlsZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtY29uZmlnLXVzZS1wcmVjb21waWxlZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdVc2VQcmVjb21waWxlZC9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVXNlUHJlY29tcGlsZWQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVXNlUHJlY29tcGlsZWQvZGVzY3JpcHRvci9zdW4td2ViLnhtbAppbmRleCBlOTFiOWQyLi4zYzBiMTY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVXNlUHJlY29tcGlsZWQvZGVzY3JpcHRvci9zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVXNlUHJlY29tcGlsZWQvZGVzY3JpcHRvci9zdW4td2ViLnhtbApAQCAtMjIsNSArMjIsNSBAQAogPHN1bi13ZWItYXBwPgogICA8anNwLWNvbmZpZz4KICAgICA8cHJvcGVydHkgbmFtZT0idXNlLXByZWNvbXBpbGVkIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgPC9qc3AtY29uZmlnPiAKKyAgPC9qc3AtY29uZmlnPgogPC9zdW4td2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdVc2VQcmVjb21waWxlZC9zZXJ2bGV0L29yZy9hcGFjaGUvanNwL2pzcC90ZXN0X2pzcC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkL3NlcnZsZXQvb3JnL2FwYWNoZS9qc3AvanNwL3Rlc3RfanNwLmphdmEKaW5kZXggNmQ5NDg1MC4uNmZkMjljOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkL3NlcnZsZXQvb3JnL2FwYWNoZS9qc3AvanNwL3Rlc3RfanNwLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkL3NlcnZsZXQvb3JnL2FwYWNoZS9qc3AvanNwL3Rlc3RfanNwLmphdmEKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgIF9qc3B4RmFjdG9yeSA9IEpzcEZhY3RvcnkuZ2V0RGVmYXVsdEZhY3RvcnkoKTsKICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgIHBhZ2VDb250ZXh0ID0gX2pzcHhGYWN0b3J5LmdldFBhZ2VDb250ZXh0KHRoaXMsIHJlcXVlc3QsIHJlc3BvbnNlLAotICAgICAgCQkJbnVsbCwgdHJ1ZSwgODE5MiwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICBudWxsLCB0cnVlLCA4MTkyLCB0cnVlKTsKICAgICAgIF9qc3B4X3BhZ2VfY29udGV4dCA9IHBhZ2VDb250ZXh0OwogICAgICAgYXBwbGljYXRpb24gPSBwYWdlQ29udGV4dC5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgICAgY29uZmlnID0gcGFnZUNvbnRleHQuZ2V0U2VydmxldENvbmZpZygpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkMi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVXNlUHJlY29tcGlsZWQyL1dlYlRlc3QuamF2YQppbmRleCAzOWM1NjI4Li4yNzkxNDI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVXNlUHJlY29tcGlsZWQyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVXNlUHJlY29tcGlsZWQyL1dlYlRlc3QuamF2YQpAQCAtNjksNyArNjksNyBAQAogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVbmV4cGVjdGVkIHJldHVybiBjb2RlOiAiICsgY29kZSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0cnkgKElucHV0U3RyZWFtIGlzID0gY29ubi5nZXRJbnB1dFN0cmVhbSgpOyBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKSkgeyAKKyAgICAgICAgICAgIHRyeSAoSW5wdXRTdHJlYW0gaXMgPSBjb25uLmdldElucHV0U3RyZWFtKCk7IEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpOwogICAgICAgICAgICAgICAgIGlmICghRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuICIgKyAiRXhwZWN0ZWQ6ICIgKyBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVXNlUHJlY29tcGlsZWQyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVXNlUHJlY29tcGlsZWQyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjI0YjBhZS4uODNlODA3NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkMi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdVc2VQcmVjb21waWxlZDIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtY29uZmlnLXVzZS1wcmVjb21waWxlZDIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdVc2VQcmVjb21waWxlZDIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkMi9idWlsZC54bWwKaW5kZXggODU0MmU5MS4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkMi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE3ICs0MiwxNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1dlbGNvbWVGaWxlcy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnV2VsY29tZUZpbGVzL1dlYlRlc3QuamF2YQppbmRleCA3MGNmNGM5Li4wYWYyMzNlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnV2VsY29tZUZpbGVzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnV2VsY29tZUZpbGVzL1dlYlRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBCdWd6aWxsYSAyNzY2NCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgb2sgPSBvayAmJiB3ZWJUZXN0LmRvVGVzdCgiaHR0cDovLyIgKyB3ZWJUZXN0Lmhvc3QgICsgIjoiICsgd2ViVGVzdC5wb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICsgd2ViVGVzdC5jb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCAoKG9rKT8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gZG9UZXN0KFN0cmluZyB1cmxTdHJpbmcpIHsKQEAgLTU2LDEzICs1NiwxMyBAQAogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbnVsbDsKICAgICAgICAgYm9vbGVhbiBzdGF0dXMgPSBmYWxzZTsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCh1cmxTdHJpbmcpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICAgICAgc3RhdHVzID0gZmFsc2U7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnV2VsY29tZUZpbGVzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnV2VsY29tZUZpbGVzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzA3MWRjOC4uZGE4MDJjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1dlbGNvbWVGaWxlcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdXZWxjb21lRmlsZXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1jb25maWctd2VsY29tZS1maWxlcyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLWNvbmZpZy13ZWxjb21lLWZpbGVzIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHttb2R1bGV9LWpzcC1jb25maWctd2VsY29tZS1maWxlcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1dlbGNvbWVGaWxlcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnV2VsY29tZUZpbGVzL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnV2VsY29tZUZpbGVzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnV2VsY29tZUZpbGVzL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdBdHRyaWJ1dGVPZkFycmF5VHlwZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnQXR0cmlidXRlT2ZBcnJheVR5cGUvV2ViVGVzdC5qYXZhCmluZGV4IGJlMjRlMDYuLmIzNTkxZTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdBdHRyaWJ1dGVPZkFycmF5VHlwZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ0F0dHJpYnV0ZU9mQXJyYXlUeXBlL1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAgICAgICAgIHdlYlRlc3QuZG9UZXN0KCk7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKCFFWFBFQ1RFRC5lcXVhbHMobGFzdExpbmUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgYm9keS4gRXhwZWN0ZWQ6ICIgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgYm9keS4gRXhwZWN0ZWQ6ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgRVhQRUNURUQgKyAiLCByZWNlaXZlZDogIiArIGxhc3RMaW5lKTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnQXR0cmlidXRlT2ZBcnJheVR5cGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdBdHRyaWJ1dGVPZkFycmF5VHlwZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGM5YWY3NjUuLjgxNmYyMzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdBdHRyaWJ1dGVPZkFycmF5VHlwZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdBdHRyaWJ1dGVPZkFycmF5VHlwZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLWN1c3RvbS10YWctYXR0cmlidXRlLW9mLWFycmF5LXR5cGUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdBdHRyaWJ1dGVPZkFycmF5VHlwZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnQXR0cmlidXRlT2ZBcnJheVR5cGUvYnVpbGQueG1sCmluZGV4IDA5NzQzMWMuLjVhMWYwYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdBdHRyaWJ1dGVPZkFycmF5VHlwZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ0F0dHJpYnV0ZU9mQXJyYXlUeXBlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01Myw4ICs1Myw4IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ0F0dHJpYnV0ZU9mQXJyYXlUeXBlL3NlcnZsZXQvdGFnbGliL015VGFnLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnQXR0cmlidXRlT2ZBcnJheVR5cGUvc2VydmxldC90YWdsaWIvTXlUYWcuamF2YQppbmRleCBhZTIwOWJhLi4yMzlkMmEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnQXR0cmlidXRlT2ZBcnJheVR5cGUvc2VydmxldC90YWdsaWIvTXlUYWcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnQXR0cmlidXRlT2ZBcnJheVR5cGUvc2VydmxldC90YWdsaWIvTXlUYWcuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEpzcEV4Y2VwdGlvbihpb2UudG9TdHJpbmcoKSwgaW9lKTsKICAgICAgICAgfQogCi0JcmV0dXJuIEVWQUxfUEFHRTsKKyAgICByZXR1cm4gRVZBTF9QQUdFOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldEFycmF5KFN0cmluZ1tdIGFyZ3MpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJCdW5kbGVkQXNKYXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ2xpYkJ1bmRsZWRBc0phci9XZWJUZXN0LmphdmEKaW5kZXggYzhmYzU4OC4uNDVkYjMwMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ2xpYkJ1bmRsZWRBc0phci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ2xpYkJ1bmRsZWRBc0phci9XZWJUZXN0LmphdmEKQEAgLTU5LDcgKzU5LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7Ci0gICAgICAgIAorCiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwogICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIiArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJCdW5kbGVkQXNKYXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJCdW5kbGVkQXNKYXIvYnVpbGQucHJvcGVydGllcwppbmRleCBiNDlkNDhlLi5kMzMzOTc3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliQnVuZGxlZEFzSmFyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ2xpYkJ1bmRsZWRBc0phci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1jdXN0b20tdGFnbGliLWJ1bmRsZWQtYXMtamFyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliQnVuZGxlZEFzSmFyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJCdW5kbGVkQXNKYXIvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJCdW5kbGVkQXNKYXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJCdW5kbGVkQXNKYXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ2xpYkphckluc2lkZUVhcldpdGhNYW5pZmVzdENsYXNzUGF0aC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliSmFySW5zaWRlRWFyV2l0aE1hbmlmZXN0Q2xhc3NQYXRoL1dlYlRlc3QuamF2YQppbmRleCBlNDMwYzRhLi5jNTI5ZDMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliSmFySW5zaWRlRWFyV2l0aE1hbmlmZXN0Q2xhc3NQYXRoL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliSmFySW5zaWRlRWFyV2l0aE1hbmlmZXN0Q2xhc3NQYXRoL1dlYlRlc3QuamF2YQpAQCAtMjAsNyArMjAsNyBAQAogCiAvKgogICogVW5pdCB0ZXN0IGZvcgotICogCisgKgogICogICBodHRwczovL2dsYXNzZmlzaC5kZXYuamF2YS5uZXQvaXNzdWVzL3Nob3dfYnVnLmNnaT9pZD01OTAKICAqICAgKCJUTERzIGluIEVBUi1idW5kbGVkIEpBUnMgbm90IGZvdW5kIikKICAqCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSA1OTAiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliSmFySW5zaWRlRWFyV2l0aE1hbmlmZXN0Q2xhc3NQYXRoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliSmFySW5zaWRlRWFyV2l0aE1hbmlmZXN0Q2xhc3NQYXRoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWE1ZjMwMC4uNTE3NjMzOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ2xpYkphckluc2lkZUVhcldpdGhNYW5pZmVzdENsYXNzUGF0aC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJKYXJJbnNpZGVFYXJXaXRoTWFuaWZlc3RDbGFzc1BhdGgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1jdXN0b21pLXRhZ2xpYi1qYXItaW5zaWRlLWVhci13aXRoLW1hbmlmZXN0LWNsYXNzcGF0aCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLWN1c3RvbWktdGFnbGliLWphci1pbnNpZGUtZWFyLXdpdGgtbWFuaWZlc3QtY2xhc3NwYXRoIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliSmFySW5zaWRlRWFyV2l0aE1hbmlmZXN0Q2xhc3NQYXRoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJKYXJJbnNpZGVFYXJXaXRoTWFuaWZlc3RDbGFzc1BhdGgvYnVpbGQueG1sCmluZGV4IDJlMDQ2NTguLmNjYTEyMmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJKYXJJbnNpZGVFYXJXaXRoTWFuaWZlc3RDbGFzc1BhdGgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJKYXJJbnNpZGVFYXJXaXRoTWFuaWZlc3RDbGFzc1BhdGgvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHtteXRhZ2xpYi5qYXJ9Ii8+CkBAIC01Niw4ICs1Niw4IEBACiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIi8+CiAgICAgICAgIDxlYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iIGluY2x1ZGVzPSIqLmphciwgKi53YXIiLz4KLSAgICAgICAgPC9lYXI+IAotICAgIDwvdGFyZ2V0PiAKKyAgICAgICAgPC9lYXI+CisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CkBAIC03MCw4ICs3MCw4IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAgCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODMsNyArODMsNyBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJKYXJJbnNpZGVFYXJXaXRob3V0TWFuaWZlc3RDbGFzc1BhdGgvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ2xpYkphckluc2lkZUVhcldpdGhvdXRNYW5pZmVzdENsYXNzUGF0aC9XZWJUZXN0LmphdmEKaW5kZXggMTlkNTA4Zi4uOTQwNWM5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ2xpYkphckluc2lkZUVhcldpdGhvdXRNYW5pZmVzdENsYXNzUGF0aC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ2xpYkphckluc2lkZUVhcldpdGhvdXRNYW5pZmVzdENsYXNzUGF0aC9XZWJUZXN0LmphdmEKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDU5MCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJKYXJJbnNpZGVFYXJXaXRob3V0TWFuaWZlc3RDbGFzc1BhdGgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJKYXJJbnNpZGVFYXJXaXRob3V0TWFuaWZlc3RDbGFzc1BhdGgvYnVpbGQucHJvcGVydGllcwppbmRleCA4MTc1YzE2Li45MjZhYjVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliSmFySW5zaWRlRWFyV2l0aG91dE1hbmlmZXN0Q2xhc3NQYXRoL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ2xpYkphckluc2lkZUVhcldpdGhvdXRNYW5pZmVzdENsYXNzUGF0aC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLWN1c3RvbS10YWdsaWItamFyLWluc2lkZS1lYXItd2l0aG91dC1tYW5pZmVzdC1jbGFzc3BhdGgiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliSmFySW5zaWRlRWFyV2l0aG91dE1hbmlmZXN0Q2xhc3NQYXRoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJKYXJJbnNpZGVFYXJXaXRob3V0TWFuaWZlc3RDbGFzc1BhdGgvYnVpbGQueG1sCmluZGV4IGVmZmJmNzkuLjAyNzBjYjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJKYXJJbnNpZGVFYXJXaXRob3V0TWFuaWZlc3RDbGFzc1BhdGgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJKYXJJbnNpZGVFYXJXaXRob3V0TWFuaWZlc3RDbGFzc1BhdGgvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0vbGliIi8+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke215dGFnbGliLmphcn0iLz4KQEAgLTU2LDggKzU2LDggQEAKICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiLz4KICAgICAgICAgPGVhciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSIgaW5jbHVkZXM9ImxpYi8qLmphciwqLndhciIvPgotICAgICAgICA8L2Vhcj4gCi0gICAgPC90YXJnZXQ+IAorICAgICAgICA8L2Vhcj4KKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KQEAgLTcwLDggKzcwLDggQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgICAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVMRW51bS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRUxFbnVtL1dlYlRlc3QuamF2YQppbmRleCBjNjFiOTNkLi43ZDdmOWM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRUxFbnVtL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRUxFbnVtL1dlYlRlc3QuamF2YQpAQCAtMzksMTYgKzM5LDE2IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGVudW0gc3VwcG9ydCBpbiBFTCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKICAgICAgICAgd2ViVGVzdC5kb1Rlc3QoIi9lbnVtLmpzcCIsICJqc3AtZWwtZW51bS10ZXN0Iik7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja1ZhbHVlKEJ1ZmZlcmVkUmVhZGVyIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBleHBlY3RlZFZhbHVlKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZXhwZWN0ZWRWYWx1ZSkKICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7CiAgICAgICAgIGlmIChsaW5lID09IG51bGwpCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgICAgICAgICAgKyBleHBlY3RlZFZhbHVlICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsgCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nIHBhdGgsIFN0cmluZyB0ZXN0TmFtZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVMRW51bS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVMRW51bS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDU3MWNkMWIuLjg0YTk5MzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFTEVudW0vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRUxFbnVtL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEyICsxNSwxMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1lbC1lbnVtIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1lbC1lbnVtIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iJHthcHBuYW1lfSIvPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRUxFbnVtL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFTEVudW0vYnVpbGQueG1sCmluZGV4IDg3ZGJkNGMuLjVhMWYwYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFTEVudW0vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFTEVudW0vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDEwICs1MywxMCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZUNsYXNzQ2FzdEV4Y2VwdGlvbi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlQ2xhc3NDYXN0RXhjZXB0aW9uL1dlYlRlc3QuamF2YQppbmRleCA4MTM0MzlmLi5kOTU4ZDZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlQ2xhc3NDYXN0RXhjZXB0aW9uL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlQ2xhc3NDYXN0RXhjZXB0aW9uL1dlYlRlc3QuamF2YQpAQCAtNDQsMTIgKzQ0LDEyIEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJ1Z3ppbGxhIDMxMTcxIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogICAgICAgICB3ZWJUZXN0LmRvVGVzdCgpOwotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdFVCAiICsgcmVxdWVzdFVyaSArICIgSFRUUC8xLjAiKTsKICAgICAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyByZXF1ZXN0VXJpICsgIiBIVFRQLzEuMFxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICAgICAgaXMgPSBzLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgIAorCiAgICAgICAgICAgICBpZiAobGluZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFcnJvclBhZ2VDbGFzc0Nhc3RFeGNlcHRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFcnJvclBhZ2VDbGFzc0Nhc3RFeGNlcHRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCA2NDMzMDExLi43ZGEzNjNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlQ2xhc3NDYXN0RXhjZXB0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZUNsYXNzQ2FzdEV4Y2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1lcnJvci1wYWdlLWNsYXNzLWNhc3QtZXhjZXB0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlQ2xhc3NDYXN0RXhjZXB0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFcnJvclBhZ2VDbGFzc0Nhc3RFeGNlcHRpb24vYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFcnJvclBhZ2VDbGFzc0Nhc3RFeGNlcHRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFcnJvclBhZ2VDbGFzc0Nhc3RFeGNlcHRpb24vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZVNlcnZsZXRFcnJvckV4Y2VwdGlvbi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlU2VydmxldEVycm9yRXhjZXB0aW9uL1dlYlRlc3QuamF2YQppbmRleCAyZTQxNzE3Li4wZGEyNGFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlU2VydmxldEVycm9yRXhjZXB0aW9uL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlU2VydmxldEVycm9yRXhjZXB0aW9uL1dlYlRlc3QuamF2YQpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKIAogICAgICAgICAgICAgdHJ5IChJbnB1dFN0cmVhbSBpcyA9IHMuZ2V0SW5wdXRTdHJlYW0oKTsgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CiAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMDsKICAgICAgICAgICAgICAgICB3aGlsZSAoKGxpbmUgPSBiaXMucmVhZExpbmUoKSkgIT0gbnVsbCkgewpAQCAtNjUsNyArNjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAKKwogICAgICAgICAgICAgICAgIGlmIChjb3VudCA9PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZVNlcnZsZXRFcnJvckV4Y2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZVNlcnZsZXRFcnJvckV4Y2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI3NWVhNWUuLjAyMDEwMTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFcnJvclBhZ2VTZXJ2bGV0RXJyb3JFeGNlcHRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlU2VydmxldEVycm9yRXhjZXB0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLWVycm9yLXBhZ2Utc2VydmxldC1lcnJvci1leGNlcHRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFcnJvclBhZ2VTZXJ2bGV0RXJyb3JFeGNlcHRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZVNlcnZsZXRFcnJvckV4Y2VwdGlvbi9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZVNlcnZsZXRFcnJvckV4Y2VwdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZVNlcnZsZXRFcnJvckV4Y2VwdGlvbi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlU3RhdHVzQ29kZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlU3RhdHVzQ29kZS9XZWJUZXN0LmphdmEKaW5kZXggYjAyMTAwNy4uMWZlOTBkNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZVN0YXR1c0NvZGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFcnJvclBhZ2VTdGF0dXNDb2RlL1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBCdWd0cmFxIDUwMTgyOTEiKTsKICAgICAgICAgdHJ5IHsKQEAgLTUyLDIxICs1MiwyMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290ICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9mb28uanNwIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSA1MDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gNTAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogNTAwIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZVN0YXR1c0NvZGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFcnJvclBhZ2VTdGF0dXNDb2RlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYmNkODlmZC4uODRiMjhjZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZVN0YXR1c0NvZGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlU3RhdHVzQ29kZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1lcnJvci1wYWdlLXN0YXR1cy1jb2RlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlU3RhdHVzQ29kZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlU3RhdHVzQ29kZS9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZVN0YXR1c0NvZGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFcnJvclBhZ2VTdGF0dXNDb2RlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFeGNlcHRpb25JblRhZ0JvZHlSZXN0b3JlSnNwV3JpdGVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFeGNlcHRpb25JblRhZ0JvZHlSZXN0b3JlSnNwV3JpdGVyL1dlYlRlc3QuamF2YQppbmRleCA2YmM1MTU5Li43ZjI5YWU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXhjZXB0aW9uSW5UYWdCb2R5UmVzdG9yZUpzcFdyaXRlci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEV4Y2VwdGlvbkluVGFnQm9keVJlc3RvcmVKc3BXcml0ZXIvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJ1Z3ppbGxhIDE2MTgxIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDgsOCArNDgsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VKc3AoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXhjZXB0aW9uSW5UYWdCb2R5UmVzdG9yZUpzcFdyaXRlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEV4Y2VwdGlvbkluVGFnQm9keVJlc3RvcmVKc3BXcml0ZXIvYnVpbGQucHJvcGVydGllcwppbmRleCA5YjE2NjIwLi44N2ZmNjJkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXhjZXB0aW9uSW5UYWdCb2R5UmVzdG9yZUpzcFdyaXRlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFeGNlcHRpb25JblRhZ0JvZHlSZXN0b3JlSnNwV3JpdGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtZXhjZXB0aW9uLWluLXRhZy1ib2R5LXJlc3RvcmUtanNwLXdyaXRlciIvPiAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1leGNlcHRpb24taW4tdGFnLWJvZHktcmVzdG9yZS1qc3Atd3JpdGVyIi8+XHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFeGNlcHRpb25JblRhZ0JvZHlSZXN0b3JlSnNwV3JpdGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFeGNlcHRpb25JblRhZ0JvZHlSZXN0b3JlSnNwV3JpdGVyL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXhjZXB0aW9uSW5UYWdCb2R5UmVzdG9yZUpzcFdyaXRlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEV4Y2VwdGlvbkluVGFnQm9keVJlc3RvcmVKc3BXcml0ZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmROb3JtYWxpemVQYXRoL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkTm9ybWFsaXplUGF0aC9XZWJUZXN0LmphdmEKaW5kZXggYWQzYTE0NC4uYjZkYjUzNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmROb3JtYWxpemVQYXRoL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRm9yd2FyZE5vcm1hbGl6ZVBhdGgvV2ViVGVzdC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIFRvbWNhdCBmb3J3YXJkIGFuZCBnZXRSZXF1ZXN0RGlzcGF0Y2hlciBzZWN1cml0eSBpc3N1ZSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUxLDggKzUxLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmROb3JtYWxpemVQYXRoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRm9yd2FyZE5vcm1hbGl6ZVBhdGgvYnVpbGQucHJvcGVydGllcwppbmRleCBkZTNkZjE0Li4wZWUzMjc2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRm9yd2FyZE5vcm1hbGl6ZVBhdGgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRm9yd2FyZE5vcm1hbGl6ZVBhdGgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtZm9yd2FyZC1ub3JtYWxpemUtcGF0aCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmROb3JtYWxpemVQYXRoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkTm9ybWFsaXplUGF0aC9idWlsZC54bWwKaW5kZXggYWQwMjVkOS4uZGUxZGNmYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmROb3JtYWxpemVQYXRoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRm9yd2FyZE5vcm1hbGl6ZVBhdGgvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMiArNDQsMjIgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmRQcmVzZXJ2ZUFwcGxpY2F0aW9uUmVzcG9uc2VXcmFwcGVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkUHJlc2VydmVBcHBsaWNhdGlvblJlc3BvbnNlV3JhcHBlci9XZWJUZXN0LmphdmEKaW5kZXggNmU3Y2FjMi4uYjBkZjU5YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmRQcmVzZXJ2ZUFwcGxpY2F0aW9uUmVzcG9uc2VXcmFwcGVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRm9yd2FyZFByZXNlcnZlQXBwbGljYXRpb25SZXNwb25zZVdyYXBwZXIvV2ViVGVzdC5qYXZhCkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDQ4NzU4MDgiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkUHJlc2VydmVBcHBsaWNhdGlvblJlc3BvbnNlV3JhcHBlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmRQcmVzZXJ2ZUFwcGxpY2F0aW9uUmVzcG9uc2VXcmFwcGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTZkMjEyMC4uMDYwMjRkOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmRQcmVzZXJ2ZUFwcGxpY2F0aW9uUmVzcG9uc2VXcmFwcGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmRQcmVzZXJ2ZUFwcGxpY2F0aW9uUmVzcG9uc2VXcmFwcGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLWZvcndhcmQtcHJlc2VydmUtYXBwbGljYXRpb24tcmVzcG9uc2Utd3JhcHBlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmRQcmVzZXJ2ZUFwcGxpY2F0aW9uUmVzcG9uc2VXcmFwcGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkUHJlc2VydmVBcHBsaWNhdGlvblJlc3BvbnNlV3JhcHBlci9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmRQcmVzZXJ2ZUFwcGxpY2F0aW9uUmVzcG9uc2VXcmFwcGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRm9yd2FyZFByZXNlcnZlQXBwbGljYXRpb25SZXNwb25zZVdyYXBwZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmRVbmJ1ZmZlcmVkL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkVW5idWZmZXJlZC9XZWJUZXN0LmphdmEKaW5kZXggOWYzZTI3Zi4uMDk5ZGZkNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmRVbmJ1ZmZlcmVkL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRm9yd2FyZFVuYnVmZmVyZWQvV2ViVGVzdC5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJ1Z3ppbGxhIDEzNDk5Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0MSgpIHRocm93cyBFeGNlcHRpb24gewpAQCAtNjUsMTAgKzY1LDEwIEBACiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7Ci0JfQorICAgIH0KICAgICB9CiAKICAgICAvKgpAQCAtODMsNyArODMsNyBAQAogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDUwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSA1MDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiA1MDAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRm9yd2FyZFVuYnVmZmVyZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkVW5idWZmZXJlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDZkNGZhNDYuLjQxOGE4NzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkVW5idWZmZXJlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkVW5idWZmZXJlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1mb3J3YXJkLXVuYnVmZmVyZWQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkVW5idWZmZXJlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRm9yd2FyZFVuYnVmZmVyZWQvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkVW5idWZmZXJlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmRVbmJ1ZmZlcmVkL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BHZXRUYWdMaWJyYXJ5SW5mb3MvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEdldFRhZ0xpYnJhcnlJbmZvcy9XZWJUZXN0LmphdmEKaW5kZXggMTljOTY5My4uMzIyOWM2MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEdldFRhZ0xpYnJhcnlJbmZvcy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEdldFRhZ0xpYnJhcnlJbmZvcy9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBUYWdMaWJyYXJ5SW5mby5nZXRUYWdMaWJyYXJ5SW5mb3MoKSIpOwpAQCAtNTAsMTEgKzUwLDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL2pzcC90ZXN0LmpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwR2V0VGFnTGlicmFyeUluZm9zL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwR2V0VGFnTGlicmFyeUluZm9zL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzRjYjMwOC4uMjhjZTExMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEdldFRhZ0xpYnJhcnlJbmZvcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BHZXRUYWdMaWJyYXJ5SW5mb3MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtZ2V0LXRhZy1saWJyYXJ5LWluZm9zIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwR2V0VGFnTGlicmFyeUluZm9zL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BHZXRUYWdMaWJyYXJ5SW5mb3MvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BHZXRUYWdMaWJyYXJ5SW5mb3MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BHZXRUYWdMaWJyYXJ5SW5mb3MvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEdldFRhZ0xpYnJhcnlJbmZvcy9zZXJ2bGV0L3RhZ2xpYi9NeVRhZ0V4dHJhSW5mby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEdldFRhZ0xpYnJhcnlJbmZvcy9zZXJ2bGV0L3RhZ2xpYi9NeVRhZ0V4dHJhSW5mby5qYXZhCmluZGV4IGU4MGJkYTIuLjk3ZDJmZmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BHZXRUYWdMaWJyYXJ5SW5mb3Mvc2VydmxldC90YWdsaWIvTXlUYWdFeHRyYUluZm8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwR2V0VGFnTGlicmFyeUluZm9zL3NlcnZsZXQvdGFnbGliL015VGFnRXh0cmFJbmZvLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAgICAgICAgIHZtc1swXSA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZShudWxsLCAiV3JvbmcgbnVtYmVyIG9mIHRzZ2xpYnMiKTsKICAgICAgICAgfQogCi0JcmV0dXJuIHZtczsKKyAgICByZXR1cm4gdm1zOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEluV2ViYXBwV2l0aEJ1bmRsZWRYZXJjZXNJbXBsL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwSW5XZWJhcHBXaXRoQnVuZGxlZFhlcmNlc0ltcGwvYnVpbGQucHJvcGVydGllcwppbmRleCBlZTUzZjI1Li4zMjMyMzZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwSW5XZWJhcHBXaXRoQnVuZGxlZFhlcmNlc0ltcGwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwSW5XZWJhcHBXaXRoQnVuZGxlZFhlcmNlc0ltcGwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtaW4td2ViYXBwLXdpdGgtYnVuZGxlZC14ZXJjZXNJbXBsIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwSW5XZWJhcHBXaXRoQnVuZGxlZFhlcmNlc0ltcGwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEluV2ViYXBwV2l0aEJ1bmRsZWRYZXJjZXNJbXBsL2J1aWxkLnhtbAppbmRleCA4NTQyZTkxLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwSW5XZWJhcHBXaXRoQnVuZGxlZFhlcmNlc0ltcGwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BJbldlYmFwcFdpdGhCdW5kbGVkWGVyY2VzSW1wbC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE3ICs0MiwxNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEluY2x1ZGVSZXNvdXJjZU5hbWVXaXRoUGx1c0NoYXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEluY2x1ZGVSZXNvdXJjZU5hbWVXaXRoUGx1c0NoYXIvV2ViVGVzdC5qYXZhCmluZGV4IGM1MTJiNjcuLmZmYzliZmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BJbmNsdWRlUmVzb3VyY2VOYW1lV2l0aFBsdXNDaGFyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwSW5jbHVkZVJlc291cmNlTmFtZVdpdGhQbHVzQ2hhci9XZWJUZXN0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNDg5NzAxNywgNDc4OTI3MiIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEluY2x1ZGVSZXNvdXJjZU5hbWVXaXRoUGx1c0NoYXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BJbmNsdWRlUmVzb3VyY2VOYW1lV2l0aFBsdXNDaGFyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNTllZmMwNy4uMjY5MWFjYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEluY2x1ZGVSZXNvdXJjZU5hbWVXaXRoUGx1c0NoYXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwSW5jbHVkZVJlc291cmNlTmFtZVdpdGhQbHVzQ2hhci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1pbmNsdWRlLXJlc291cmNlLW5hbWUtd2l0aC1wbHVzLWNoYXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BJbmNsdWRlUmVzb3VyY2VOYW1lV2l0aFBsdXNDaGFyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BJbmNsdWRlUmVzb3VyY2VOYW1lV2l0aFBsdXNDaGFyL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwSW5jbHVkZVJlc291cmNlTmFtZVdpdGhQbHVzQ2hhci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEluY2x1ZGVSZXNvdXJjZU5hbWVXaXRoUGx1c0NoYXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEluY2x1ZGVkV2VsY29tZVBhZ2UvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEluY2x1ZGVkV2VsY29tZVBhZ2UvV2ViVGVzdC5qYXZhCmluZGV4IDQ5ODJiZmQuLmEzYThlN2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BJbmNsdWRlZFdlbGNvbWVQYWdlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwSW5jbHVkZWRXZWxjb21lUGFnZS9XZWJUZXN0LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKICAqIHNlZSBodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTMzMjIzLgogICoKICAqIFRoaXMgdGVzdCBjYXNlIHVzZWQgdG8gdGhyb3cgYSBqYXZhLmxhbmcuU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbgotICogd2hlbiByZWNvbnN0cnVjdGluZyB0aGUgVVJJIG9mIGEgSlNQIHRoYXQgaXMgdGhlIHRhcmdldCBvZiBhIAorICogd2hlbiByZWNvbnN0cnVjdGluZyB0aGUgVVJJIG9mIGEgSlNQIHRoYXQgaXMgdGhlIHRhcmdldCBvZiBhCiAgKiBSZXF1ZXN0RGlzcGF0Y2hlci5pbmNsdWRlKCkgZnJvbSB0aGUgamFrYXJ0YS5zZXJ2bGV0LmluY2x1ZGUuWFhYCiAgKiByZXF1ZXN0IGF0dHJpYnV0ZXMuCiAgKi8KQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQnVnemlsbGEgMzMyMjMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01Myw4ICs1Myw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZUpzcCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BJbmNsdWRlZFdlbGNvbWVQYWdlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwSW5jbHVkZWRXZWxjb21lUGFnZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGEzYzNkYTEuLmM5MTI4N2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BJbmNsdWRlZFdlbGNvbWVQYWdlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEluY2x1ZGVkV2VsY29tZVBhZ2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1pbmNsdWRlZC13ZWxjb21lLXBhZ2UiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1pbmNsdWRlZC13ZWxjb21lLXBhZ2UiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwSW5jbHVkZWRXZWxjb21lUGFnZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwSW5jbHVkZWRXZWxjb21lUGFnZS9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEluY2x1ZGVkV2VsY29tZVBhZ2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BJbmNsdWRlZFdlbGNvbWVQYWdlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BOZXN0ZWRTY3JpcHRpbmdUYWdFeHRyYUluZm8vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcE5lc3RlZFNjcmlwdGluZ1RhZ0V4dHJhSW5mby9XZWJUZXN0LmphdmEKaW5kZXggY2JhOTU5Ny4uYmFkYjg5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcE5lc3RlZFNjcmlwdGluZ1RhZ0V4dHJhSW5mby9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcE5lc3RlZFNjcmlwdGluZ1RhZ0V4dHJhSW5mby9XZWJUZXN0LmphdmEKQEAgLTM4LDI1ICszOCwyNSBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBCdWd6aWxsYSAyNzY2NSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKICAgICAgICAgd2ViVGVzdC5kb1Rlc3QoKTsKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG51bGw7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL2pzcC8vdGVzdC5qc3AiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BOZXN0ZWRTY3JpcHRpbmdUYWdFeHRyYUluZm8vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BOZXN0ZWRTY3JpcHRpbmdUYWdFeHRyYUluZm8vYnVpbGQucHJvcGVydGllcwppbmRleCA0YmMyNzdkLi40NzM4YzQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwTmVzdGVkU2NyaXB0aW5nVGFnRXh0cmFJbmZvL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcE5lc3RlZFNjcmlwdGluZ1RhZ0V4dHJhSW5mby9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLW5lc3RlZC1zY3JpcHRpbmctdGFnLWV4dHJhLWluZm8iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BOZXN0ZWRTY3JpcHRpbmdUYWdFeHRyYUluZm8vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcE5lc3RlZFNjcmlwdGluZ1RhZ0V4dHJhSW5mby9idWlsZC54bWwKaW5kZXggODdkYmQ0Yy4uNWExZjBjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcE5lc3RlZFNjcmlwdGluZ1RhZ0V4dHJhSW5mby9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcE5lc3RlZFNjcmlwdGluZ1RhZ0V4dHJhSW5mby9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwTmVzdGVkU2NyaXB0aW5nVGFnRXh0cmFJbmZvL3NlcnZsZXQvdGFnbGliL015VGFnLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwTmVzdGVkU2NyaXB0aW5nVGFnRXh0cmFJbmZvL3NlcnZsZXQvdGFnbGliL015VGFnLmphdmEKaW5kZXggY2ExZDM1MS4uMzk0YTlmZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcE5lc3RlZFNjcmlwdGluZ1RhZ0V4dHJhSW5mby9zZXJ2bGV0L3RhZ2xpYi9NeVRhZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BOZXN0ZWRTY3JpcHRpbmdUYWdFeHRyYUluZm8vc2VydmxldC90YWdsaWIvTXlUYWcuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogCiBwdWJsaWMgY2xhc3MgTXlUYWcgZXh0ZW5kcyBUYWdTdXBwb3J0IHsKIAotICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudGVyID0gMTsgCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ZXIgPSAxOwogCiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcE51bGxGcmFnbWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwTnVsbEZyYWdtZW50L1dlYlRlc3QuamF2YQppbmRleCAwMjRhMTA3Li4yNDUzZWRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwTnVsbEZyYWdtZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwTnVsbEZyYWdtZW50L1dlYlRlc3QuamF2YQpAQCAtMzcsMTggKzM3LDE4IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJ1Z3ppbGxhIDI3OTQ4Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogICAgICAgICB3ZWJUZXN0LmRvVGVzdCgpOwotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbnVsbDsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvdGVzdC5qc3AiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BOdWxsRnJhZ21lbnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BOdWxsRnJhZ21lbnQvYnVpbGQucHJvcGVydGllcwppbmRleCBjNzViZWRhLi42Nzk1M2NmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwTnVsbEZyYWdtZW50L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcE51bGxGcmFnbWVudC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLW51bGwtZnJhZ21lbnQiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1udWxsLWZyYWdtZW50Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BOdWxsRnJhZ21lbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcE51bGxGcmFnbWVudC9idWlsZC54bWwKaW5kZXggODdkYmQ0Yy4uNWExZjBjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcE51bGxGcmFnbWVudC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcE51bGxGcmFnbWVudC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUG91bmRTeW50YXgvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFBvdW5kU3ludGF4L1dlYlRlc3QuamF2YQppbmRleCBiMDQwNDI4Li4wNWNmYWJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUG91bmRTeW50YXgvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQb3VuZFN5bnRheC9XZWJUZXN0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdHMgZm9yIHBvdW5kIHN5bnRheCBhcyBsaXRlcmFsIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTQsMTEgKzU0LDExIEBACiAgICAgICAgIHdlYlRlc3QuZG9UZXN0NCgiL3Rlc3Rqc3AyMXouanNwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJwb3VuZC1zeW50YXgtYWxsb3dlZC1hcy1saXRlcmFsLXRydWUtdGVzdCIpOwogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja1ZhbHVlKEJ1ZmZlcmVkUmVhZGVyIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBrZXksIFN0cmluZyBleHBlY3RlZFZhbHVlKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcga2V5LCBTdHJpbmcgZXhwZWN0ZWRWYWx1ZSkKICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7CiAgICAgICAgIHdoaWxlIChsaW5lLmVxdWFscygiIikpCkBAIC03NSw3ICs3NSw3IEBACiAgICAgICAgICAgICAgICAgKyBrZXkgKyAiOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7IAorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0MShTdHJpbmcgcGF0aCwgU3RyaW5nIHRlc3ROYW1lKSB7CkBAIC0xMzAsMTQgKzEzMCwxNCBAQAogCiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QyKFN0cmluZyBwYXRoLCBTdHJpbmcgdGVzdE5hbWUpIHsKLSAgICAgCi0gICAgICAgIHRyeSB7IAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICc6JyArIHBvcnQgKyAnLycgKyBjb250ZXh0Um9vdCArIHBhdGgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSA9PSAyMDApIHsgCisgICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlID09IDIwMCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDUwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdE5hbWUsIHN0YXQuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUG91bmRTeW50YXgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQb3VuZFN5bnRheC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGM5NDQ1YzcuLjI4ODIwOTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQb3VuZFN5bnRheC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQb3VuZFN5bnRheC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcG91bmQtbGl0ZXJhbCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcG91bmQtbGl0ZXJhbCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0iLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0bGRzIiB2YWx1ZT0iZGVzY3JpcHRvci90bGRzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUG91bmRTeW50YXgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFBvdW5kU3ludGF4L2J1aWxkLnhtbAppbmRleCA4N2RiZDRjLi41YTFmMGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUG91bmRTeW50YXgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQb3VuZFN5bnRheC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZUNvbnNpZGVyRG9tYWluTGliSmFyRmlsZXNBbmRDbGFzc2VzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlQ29uc2lkZXJEb21haW5MaWJKYXJGaWxlc0FuZENsYXNzZXMvV2ViVGVzdC5qYXZhCmluZGV4IGMzNjEwY2QuLjNjMjUyNmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlQ29uc2lkZXJEb21haW5MaWJKYXJGaWxlc0FuZENsYXNzZXMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlQ29uc2lkZXJEb21haW5MaWJKYXJGaWxlc0FuZENsYXNzZXMvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjI1MTg3MiIpOwpAQCAtNTQsMTEgKzU0LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL2pzcC90ZXN0LmpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZUNvbnNpZGVyRG9tYWluTGliSmFyRmlsZXNBbmRDbGFzc2VzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZUNvbnNpZGVyRG9tYWluTGliSmFyRmlsZXNBbmRDbGFzc2VzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggM2YzZGZmMC4uNDk1M2Q3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFByZWNvbXBpbGVDb25zaWRlckRvbWFpbkxpYkphckZpbGVzQW5kQ2xhc3Nlcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlQ29uc2lkZXJEb21haW5MaWJKYXJGaWxlc0FuZENsYXNzZXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtcHJlY29tcGlsZS1jb25zaWRlci1kb21haW4tbGliLWphcmZpbGVzLWFuZC1jbGFzc2VzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZUNvbnNpZGVyRG9tYWluTGliSmFyRmlsZXNBbmRDbGFzc2VzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlQ29uc2lkZXJEb21haW5MaWJKYXJGaWxlc0FuZENsYXNzZXMvYnVpbGQueG1sCmluZGV4IGU3N2FlZjQuLjMwNzBlZDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlQ29uc2lkZXJEb21haW5MaWJKYXJGaWxlc0FuZENsYXNzZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlQ29uc2lkZXJEb21haW5MaWJKYXJGaWxlc0FuZENsYXNzZXMvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJteWNsYXNzZXMiLz4KQEAgLTQ0LDE5ICs0NCwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZURlcGxveURhc2hEYXNoTGlicmFyaWVzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlRGVwbG95RGFzaERhc2hMaWJyYXJpZXMvV2ViVGVzdC5qYXZhCmluZGV4IGQ1NjY3ZGEuLjA1OGIyOTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlRGVwbG95RGFzaERhc2hMaWJyYXJpZXMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlRGVwbG95RGFzaERhc2hMaWJyYXJpZXMvV2ViVGVzdC5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDQ4ODMiKTsKQEAgLTU2LDExICs1NiwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290ICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIi90ZXN0LmpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZURlcGxveURhc2hEYXNoTGlicmFyaWVzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZURlcGxveURhc2hEYXNoTGlicmFyaWVzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjJlNjIwMS4uNWVjMzhiYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFByZWNvbXBpbGVEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlRGVwbG95RGFzaERhc2hMaWJyYXJpZXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtcHJlY29tcGlsZS1kZXBsb3ktZGFzaC1kYXNoLWxpYnJhcmllcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFByZWNvbXBpbGVEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZURlcGxveURhc2hEYXNoTGlicmFyaWVzL2J1aWxkLnhtbAppbmRleCA3ZThjMDI0Li4zYzI2YWEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZURlcGxveURhc2hEYXNoTGlicmFyaWVzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZURlcGxveURhc2hEYXNoTGlicmFyaWVzL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMyArNDQsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItbGlicmFyaWVzIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZUlnbm9yZUZyYWdtZW50RXJyb3JzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlSWdub3JlRnJhZ21lbnRFcnJvcnMvV2ViVGVzdC5qYXZhCmluZGV4IDAzYmUwMTMuLjFlNjlhZGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlSWdub3JlRnJhZ21lbnRFcnJvcnMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlSWdub3JlRnJhZ21lbnRFcnJvcnMvV2ViVGVzdC5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAgKiBwcmVjb21waWxhdGlvbiAoZHVyaW5nIGRlcGxveW1lbnQpIGFzIGxvbmcgYXMganNwLWNvbmZpZyBwcm9wZXJ0eQogICogJ2lnbm9yZUpzcEZyYWdtZW50RXJyb3JzJyBoYXMgYmVlbiBzZXQgdG8gVFJVRSBpbiBzdW4td2ViLnhtbC4KICAqCi0gKiBPdGhlcndpc2UsIHByZWNvbXBpbGF0aW9uIG9mIHRoaXMgd2ViYXBwJ3MgSlNQcyB3b3VsZCBoYXZlIGZhaWxlZCwgCisgKiBPdGhlcndpc2UsIHByZWNvbXBpbGF0aW9uIG9mIHRoaXMgd2ViYXBwJ3MgSlNQcyB3b3VsZCBoYXZlIGZhaWxlZCwKICAqIHNpbmNlIHRoZSAnY291bnRlcicgdmFyaWFibGUgaXMgbm90IGRlY2xhcmVkIGluIGFueSBvZiB0aGUgaW5jbHVkZWQKICAqIEpTUCBzZWdtZW50cy4KICAqLwpAQCAtNDgsNyArNDgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDYzOTM5NDAiKTsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFByZWNvbXBpbGVJZ25vcmVGcmFnbWVudEVycm9ycy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFByZWNvbXBpbGVJZ25vcmVGcmFnbWVudEVycm9ycy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI5MmM0ODkuLjc5NzE2NDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlSWdub3JlRnJhZ21lbnRFcnJvcnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZUlnbm9yZUZyYWdtZW50RXJyb3JzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXByZWNvbXBpbGUtaWdub3JlLWZyYWdtZW50LWVycm9ycyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFByZWNvbXBpbGVJZ25vcmVGcmFnbWVudEVycm9ycy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZUlnbm9yZUZyYWdtZW50RXJyb3JzL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZUlnbm9yZUZyYWdtZW50RXJyb3JzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZUlnbm9yZUZyYWdtZW50RXJyb3JzL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlSWdub3JlRnJhZ21lbnRFcnJvcnMvZGVzY3JpcHRvci9zdW4td2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlSWdub3JlRnJhZ21lbnRFcnJvcnMvZGVzY3JpcHRvci9zdW4td2ViLnhtbAppbmRleCA4OGZiZWJmLi42OWVhYmIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZUlnbm9yZUZyYWdtZW50RXJyb3JzL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFByZWNvbXBpbGVJZ25vcmVGcmFnbWVudEVycm9ycy9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCkBAIC0yMiw1ICsyMiw1IEBACiA8c3VuLXdlYi1hcHA+CiAgIDxqc3AtY29uZmlnPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJpZ25vcmVKc3BGcmFnbWVudEVycm9ycyIgdmFsdWU9InRydWUiIC8+Ci0gIDwvanNwLWNvbmZpZz4gCisgIDwvanNwLWNvbmZpZz4KIDwvc3VuLXdlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVsb2FkR2VuZXJhdGVkU2VydmxldElmVXBkYXRlZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVsb2FkR2VuZXJhdGVkU2VydmxldElmVXBkYXRlZC9XZWJUZXN0LmphdmEKaW5kZXggZDNlOWVhNy4uOTU0YTNmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlbG9hZEdlbmVyYXRlZFNlcnZsZXRJZlVwZGF0ZWQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZWxvYWRHZW5lcmF0ZWRTZXJ2bGV0SWZVcGRhdGVkL1dlYlRlc3QuamF2YQpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIHJ1biA9IGFyZ3NbM107CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCB0byBlbnN1cmUgdGhhdCBzZXJ2bGV0IHRoYXQgIgpAQCAtNzUsNyArNzUsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVsb2FkR2VuZXJhdGVkU2VydmxldElmVXBkYXRlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlbG9hZEdlbmVyYXRlZFNlcnZsZXRJZlVwZGF0ZWQvYnVpbGQucHJvcGVydGllcwppbmRleCAyNjY1NThkLi44OTljYTY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVsb2FkR2VuZXJhdGVkU2VydmxldElmVXBkYXRlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZWxvYWRHZW5lcmF0ZWRTZXJ2bGV0SWZVcGRhdGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXJlbG9hZC1nZW5lcmF0ZWQtc2VydmxldC1pZi11cGRhdGVkIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVsb2FkR2VuZXJhdGVkU2VydmxldElmVXBkYXRlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVsb2FkR2VuZXJhdGVkU2VydmxldElmVXBkYXRlZC9idWlsZC54bWwKaW5kZXggNmNlZWY2YS4uNzc0ZTMxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlbG9hZEdlbmVyYXRlZFNlcnZsZXRJZlVwZGF0ZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZWxvYWRHZW5lcmF0ZWRTZXJ2bGV0SWZVcGRhdGVkL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTkgKzQ0LDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5maXJzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtOTAsMTAgKzkwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlbG9hZEdlbmVyYXRlZFNlcnZsZXRJZlVwZGF0ZWQvdGVzdF9qc3AuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZWxvYWRHZW5lcmF0ZWRTZXJ2bGV0SWZVcGRhdGVkL3Rlc3RfanNwLmphdmEKaW5kZXggNGNjZTFhYS4uZTIyYmRkMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlbG9hZEdlbmVyYXRlZFNlcnZsZXRJZlVwZGF0ZWQvdGVzdF9qc3AuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVsb2FkR2VuZXJhdGVkU2VydmxldElmVXBkYXRlZC90ZXN0X2pzcC5qYXZhCkBAIC00OSw3ICs0OSw3IEBACiAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICByZXNwb25zZS5zZXRIZWFkZXIoIlgtUG93ZXJlZC1CeSIsICJKU1AvMi4zIik7CiAgICAgICBwYWdlQ29udGV4dCA9IF9qc3B4RmFjdG9yeS5nZXRQYWdlQ29udGV4dCh0aGlzLCByZXF1ZXN0LCByZXNwb25zZSwKLSAgICAgIAkJCW51bGwsIHRydWUsIDgxOTIsIHRydWUpOworICAgICAgICAgICAgICAgICAgbnVsbCwgdHJ1ZSwgODE5MiwgdHJ1ZSk7CiAgICAgICBfanNweF9wYWdlX2NvbnRleHQgPSBwYWdlQ29udGV4dDsKICAgICAgIGFwcGxpY2F0aW9uID0gcGFnZUNvbnRleHQuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICAgIGNvbmZpZyA9IHBhZ2VDb250ZXh0LmdldFNlcnZsZXRDb25maWcoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvbkNvbnRleHRMaXN0ZW5lci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25Db250ZXh0TGlzdGVuZXIvV2ViVGVzdC5qYXZhCmluZGV4IGJhNTg2ZmEuLmU3MTViYjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvbkNvbnRleHRMaXN0ZW5lci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uQ29udGV4dExpc3RlbmVyL1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHJlc291cmNlIGluamVjdGlvbiBpbnRvIEpTUCAiCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvbkNvbnRleHRMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uQ29udGV4dExpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzBmZDUyZC4uZDE0MGI5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uQ29udGV4dExpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uQ29udGV4dExpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXJlc291cmNlLWluamVjdGlvbi1jb250ZXh0LWxpc3RlbmVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25Db250ZXh0TGlzdGVuZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uQ29udGV4dExpc3RlbmVyL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25Db250ZXh0TGlzdGVuZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvbkNvbnRleHRMaXN0ZW5lci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25Db250ZXh0TGlzdGVuZXIvc2VydmxldC90YWdsaWIvTXlMaXN0ZW5lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uQ29udGV4dExpc3RlbmVyL3NlcnZsZXQvdGFnbGliL015TGlzdGVuZXIuamF2YQppbmRleCBlZTViMGY3Li5kZmFiOGE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25Db250ZXh0TGlzdGVuZXIvc2VydmxldC90YWdsaWIvTXlMaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvbkNvbnRleHRMaXN0ZW5lci9zZXJ2bGV0L3RhZ2xpYi9NeUxpc3RlbmVyLmphdmEKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICBwdWJsaWMgdm9pZCBjb250ZXh0SW5pdGlhbGl6ZWQoU2VydmxldENvbnRleHRFdmVudCBzY2UpIHsKIAogICAgICAgICBTZXJ2bGV0Q29udGV4dCBzYyA9IHNjZS5nZXRTZXJ2bGV0Q29udGV4dCgpOwotICAgIAorCiAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgIGludCBsb2dpblRpbWVvdXQgPSBkczEuZ2V0TG9naW5UaW1lb3V0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25TaW1wbGVUYWdIYW5kbGVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblNpbXBsZVRhZ0hhbmRsZXIvV2ViVGVzdC5qYXZhCmluZGV4IDFhMTNjM2QuLmIwOTZiZmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblNpbXBsZVRhZ0hhbmRsZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblNpbXBsZVRhZ0hhbmRsZXIvV2ViVGVzdC5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcmVzb3VyY2UgaW5qZWN0aW9uIGludG8gIgpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25TaW1wbGVUYWdIYW5kbGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25TaW1wbGVUYWdIYW5kbGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjhmZGI5NS4uY2E4OTU4OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uU2ltcGxlVGFnSGFuZGxlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblNpbXBsZVRhZ0hhbmRsZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtcmVzb3VyY2UtaW5qZWN0aW9uLXNpbXBsZS10YWctaGFuZGxlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uU2ltcGxlVGFnSGFuZGxlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25TaW1wbGVUYWdIYW5kbGVyL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25TaW1wbGVUYWdIYW5kbGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25TaW1wbGVUYWdIYW5kbGVyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblNpbXBsZVRhZ0hhbmRsZXIvc2VydmxldC90YWdsaWIvTXlTaW1wbGVUYWcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblNpbXBsZVRhZ0hhbmRsZXIvc2VydmxldC90YWdsaWIvTXlTaW1wbGVUYWcuamF2YQppbmRleCA4ZmM2NDQ0Li4yZjhkZTdkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25TaW1wbGVUYWdIYW5kbGVyL3NlcnZsZXQvdGFnbGliL015U2ltcGxlVGFnLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uU2ltcGxlVGFnSGFuZGxlci9zZXJ2bGV0L3RhZ2xpYi9NeVNpbXBsZVRhZy5qYXZhCkBAIC03NSw2ICs3NSw2IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSnNwRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci9XZWJUZXN0LmphdmEKaW5kZXggMzBiMjI0Yi4uMzRmY2IyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci9XZWJUZXN0LmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciByZXNvdXJjZSBpbmplY3Rpb24gaW50byBKU1AgdGFnIGhhbmRsZXIiKTsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci9idWlsZC1uZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyL2J1aWxkLW5nLnhtbAppbmRleCA2MzVkODljLi5mNjAzMzIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyL2J1aWxkLW5nLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyL2J1aWxkLW5nLnhtbApAQCAtNTcsOSArNTcsOSBAQAogICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICA8L3RhcmdldD4gCisgICA8L3RhcmdldD4KIAogICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CkBAIC05MSw3ICs5MSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBlZWU0ODhiLi4xMmQ2NjlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1yZXNvdXJjZS1pbmplY3Rpb24tdGFnLWhhbmRsZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyL3NlcnZsZXQvdGFnbGliL015VGFnLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyL3NlcnZsZXQvdGFnbGliL015VGFnLmphdmEKaW5kZXggY2U1YTY0Yi4uOThiMmEzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci9zZXJ2bGV0L3RhZ2xpYi9NeVRhZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIvc2VydmxldC90YWdsaWIvTXlUYWcuamF2YQpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEpzcEV4Y2VwdGlvbihleCk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gU0tJUF9CT0RZOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIvdGVzdC9XZWJUZXN0TkcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIvdGVzdC9XZWJUZXN0TkcuamF2YQppbmRleCA1NGVjMGNiLi5lMGJlOWFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyL3Rlc3QvV2ViVGVzdE5HLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci90ZXN0L1dlYlRlc3RORy5qYXZhCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgICBsYXN0TGluZSA9IGxpbmU7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhsYXN0TGluZSwgRVhQRUNURURfUkVTUE9OU0UpOwogCiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci90ZXN0L3Rlc3RuZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyL3Rlc3QvdGVzdG5nLnhtbAppbmRleCBjYTBhMjBiLi40Mzc0YmE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyL3Rlc3QvdGVzdG5nLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyL3Rlc3QvdGVzdG5nLnhtbApAQCAtMTcsNyArMTcsNyBAQAogLS0+CiAKIDwhRE9DVFlQRSBzdWl0ZSBTWVNURU0gImh0dHA6Ly90ZXN0bmcub3JnL3Rlc3RuZy0xLjAuZHRkIiA+Ci0gIAorCiA8c3VpdGUgbmFtZT0id2ViIiA+CiAgIDxwYXJhbWV0ZXIgbmFtZT0iaG9zdCIgdmFsdWU9ImxvY2FsaG9zdCIvPgogICA8cGFyYW1ldGVyIG5hbWU9InBvcnQiIHZhbHVlPSI4MDgwIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyUG9vbGluZ0Rpc2FibGVkL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXJQb29saW5nRGlzYWJsZWQvV2ViVGVzdC5qYXZhCmluZGV4IDgxYTJlNmIuLjQ2YmVmYzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXJQb29saW5nRGlzYWJsZWQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXJQb29saW5nRGlzYWJsZWQvV2ViVGVzdC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcmVzb3VyY2UgaW5qZWN0aW9uIGludG8gSlNQIHRhZyBoYW5kbGVyIik7CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXJQb29saW5nRGlzYWJsZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXJQb29saW5nRGlzYWJsZWQvYnVpbGQucHJvcGVydGllcwppbmRleCA3ZWE5YTEwLi5jMzVmMDI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyUG9vbGluZ0Rpc2FibGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlclBvb2xpbmdEaXNhYmxlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1yZXNvdXJjZS1pbmplY3Rpb24tdGFnLWhhbmRsZXItcG9vbGluZy1kaXNhYmxlZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlclBvb2xpbmdEaXNhYmxlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyUG9vbGluZ0Rpc2FibGVkL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyUG9vbGluZ0Rpc2FibGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyUG9vbGluZ0Rpc2FibGVkL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXJQb29saW5nRGlzYWJsZWQvc2VydmxldC90YWdsaWIvTXlUYWcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXJQb29saW5nRGlzYWJsZWQvc2VydmxldC90YWdsaWIvTXlUYWcuamF2YQppbmRleCBjZTVhNjRiLi45OGIyYTMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyUG9vbGluZ0Rpc2FibGVkL3NlcnZsZXQvdGFnbGliL015VGFnLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlclBvb2xpbmdEaXNhYmxlZC9zZXJ2bGV0L3RhZ2xpYi9NeVRhZy5qYXZhCkBAIC03Niw3ICs3Niw3IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSnNwRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBTS0lQX0JPRFk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJ1bnRpbWVDb21waWxlQ29uc2lkZXJEb21haW5MaWJKYXJGaWxlc0FuZENsYXNzZXMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJ1bnRpbWVDb21waWxlQ29uc2lkZXJEb21haW5MaWJKYXJGaWxlc0FuZENsYXNzZXMvV2ViVGVzdC5qYXZhCmluZGV4IGYwZmRkYjMuLjU5NTBiYTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSdW50aW1lQ29tcGlsZUNvbnNpZGVyRG9tYWluTGliSmFyRmlsZXNBbmRDbGFzc2VzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUnVudGltZUNvbXBpbGVDb25zaWRlckRvbWFpbkxpYkphckZpbGVzQW5kQ2xhc3Nlcy9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MjUxODcyIik7CkBAIC01NCwxMSArNTQsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvanNwL3Rlc3QuanNwIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSdW50aW1lQ29tcGlsZUNvbnNpZGVyRG9tYWluTGliSmFyRmlsZXNBbmRDbGFzc2VzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUnVudGltZUNvbXBpbGVDb25zaWRlckRvbWFpbkxpYkphckZpbGVzQW5kQ2xhc3Nlcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGIwYjE3NzcuLjBlMDVmNjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSdW50aW1lQ29tcGlsZUNvbnNpZGVyRG9tYWluTGliSmFyRmlsZXNBbmRDbGFzc2VzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJ1bnRpbWVDb21waWxlQ29uc2lkZXJEb21haW5MaWJKYXJGaWxlc0FuZENsYXNzZXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtcnVudGltZS1jb21waWxlLWNvbnNpZGVyLWRvbWFpbi1saWItamFyZmlsZXMtYW5kLWNsYXNzZXMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSdW50aW1lQ29tcGlsZUNvbnNpZGVyRG9tYWluTGliSmFyRmlsZXNBbmRDbGFzc2VzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSdW50aW1lQ29tcGlsZUNvbnNpZGVyRG9tYWluTGliSmFyRmlsZXNBbmRDbGFzc2VzL2J1aWxkLnhtbAppbmRleCAxYWFiNmQyLi5jODMyNDg4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUnVudGltZUNvbXBpbGVDb25zaWRlckRvbWFpbkxpYkphckZpbGVzQW5kQ2xhc3Nlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJ1bnRpbWVDb21waWxlQ29uc2lkZXJEb21haW5MaWJKYXJGaWxlc0FuZENsYXNzZXMvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJteWNsYXNzZXMiLz4KQEAgLTQ0LDE5ICs0NCwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUnVudGltZURlcGxveURhc2hEYXNoTGlicmFyaWVzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSdW50aW1lRGVwbG95RGFzaERhc2hMaWJyYXJpZXMvV2ViVGVzdC5qYXZhCmluZGV4IGUwNjA1NGMuLmRiOTBjY2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSdW50aW1lRGVwbG95RGFzaERhc2hMaWJyYXJpZXMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSdW50aW1lRGVwbG95RGFzaERhc2hMaWJyYXJpZXMvV2ViVGVzdC5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDQ4ODMiKTsKQEAgLTU2LDExICs1NiwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290ICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIi90ZXN0LmpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUnVudGltZURlcGxveURhc2hEYXNoTGlicmFyaWVzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUnVudGltZURlcGxveURhc2hEYXNoTGlicmFyaWVzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYWRjN2YxNi4uMzQ2MzM0MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJ1bnRpbWVEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSdW50aW1lRGVwbG95RGFzaERhc2hMaWJyYXJpZXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtcnVudGltZS1kZXBsb3ktZGFzaC1kYXNoLWxpYnJhcmllcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJ1bnRpbWVEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUnVudGltZURlcGxveURhc2hEYXNoTGlicmFyaWVzL2J1aWxkLnhtbAppbmRleCAxMTNiYmUxLi5jMDAxZjAyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUnVudGltZURlcGxveURhc2hEYXNoTGlicmFyaWVzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUnVudGltZURlcGxveURhc2hEYXNoTGlicmFyaWVzL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxOSArNDQsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItbGlicmFyaWVzIi8+CiAgICAgPC90YXJnZXQ+CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGVzc1RhZ0JvZHlKc3BEb2N1bWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGVzc1RhZ0JvZHlKc3BEb2N1bWVudC9XZWJUZXN0LmphdmEKaW5kZXggNzI4MzYwZi4uMjY5N2RhYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxlc3NUYWdCb2R5SnNwRG9jdW1lbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXNzVGFnQm9keUpzcERvY3VtZW50L1dlYlRlc3QuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAgICAgICAgIHdlYlRlc3QuZG9UZXN0KCk7CkBAIC01MSw3ICs1MSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAKKwogICAgICAgICB0cnkgewogCiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXNzVGFnQm9keUpzcERvY3VtZW50L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGVzc1RhZ0JvZHlKc3BEb2N1bWVudC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk2NjNkN2UuLjU2MTdjNDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXNzVGFnQm9keUpzcERvY3VtZW50L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxlc3NUYWdCb2R5SnNwRG9jdW1lbnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1zY3JpcHRsZXNzLXRhZy1ib2R5LWpzcC1kb2N1bWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxlc3NUYWdCb2R5SnNwRG9jdW1lbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxlc3NUYWdCb2R5SnNwRG9jdW1lbnQvYnVpbGQueG1sCmluZGV4IDg3ZGJkNGMuLjVhMWYwYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXNzVGFnQm9keUpzcERvY3VtZW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGVzc1RhZ0JvZHlKc3BEb2N1bWVudC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGV0QWZ0ZXJTY3JpcHRsZXNzVGFnL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXRBZnRlclNjcmlwdGxlc3NUYWcvV2ViVGVzdC5qYXZhCmluZGV4IDY4MWNkMWMuLjYxZTdhNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXRBZnRlclNjcmlwdGxlc3NUYWcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXRBZnRlclNjcmlwdGxlc3NUYWcvV2ViVGVzdC5qYXZhCkBAIC00MCwyNSArNDAsMjUgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQnVnemlsbGEgMzAwNjciKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAgICAgICAgIHdlYlRlc3QuZG9UZXN0KCk7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBudWxsOwotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9qc3AvdGVzdC5qc3B4Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGV0QWZ0ZXJTY3JpcHRsZXNzVGFnL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGV0QWZ0ZXJTY3JpcHRsZXNzVGFnL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTNmM2FiMS4uZDg3OTVjNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldEFmdGVyU2NyaXB0bGVzc1RhZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXRBZnRlclNjcmlwdGxlc3NUYWcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1zY3JpcHRsZXQtYWZ0ZXItc2NyaXB0bGVzcy10YWciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1zY3JpcHRsZXQtYWZ0ZXItc2NyaXB0bGVzcy10YWciLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldEFmdGVyU2NyaXB0bGVzc1RhZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGV0QWZ0ZXJTY3JpcHRsZXNzVGFnL2J1aWxkLnhtbAppbmRleCA4N2RiZDRjLi41YTFmMGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGV0QWZ0ZXJTY3JpcHRsZXNzVGFnL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGV0QWZ0ZXJTY3JpcHRsZXNzVGFnL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01MywxMCArNTMsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXREZWNsTmVzdGVkSW5DdXN0b21BY3Rpb24vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldERlY2xOZXN0ZWRJbkN1c3RvbUFjdGlvbi9XZWJUZXN0LmphdmEKaW5kZXggMWM4YmQ4Yy4uMDFiNDQxZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldERlY2xOZXN0ZWRJbkN1c3RvbUFjdGlvbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldERlY2xOZXN0ZWRJbkN1c3RvbUFjdGlvbi9XZWJUZXN0LmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQnVndHJhcSA0ODY5MTQ2Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNjEsNyArNjEsNyBAQAogICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmICghRVhQRUNURUQuZXF1YWxzKGxhc3RMaW5lKSkgewotICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiV3JvbmcgcmVzcG9uc2UgYm9keS4gRXhwZWN0ZWQ6ICIgCisgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJXcm9uZyByZXNwb25zZSBib2R5LiBFeHBlY3RlZDogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEVYUEVDVEVEICsgIiwgcmVjZWl2ZWQ6ICIgKyBsYXN0TGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldERlY2xOZXN0ZWRJbkN1c3RvbUFjdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldERlY2xOZXN0ZWRJbkN1c3RvbUFjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGUyNDlkYWIuLmI3Njg5OGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXREZWNsTmVzdGVkSW5DdXN0b21BY3Rpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGV0RGVjbE5lc3RlZEluQ3VzdG9tQWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3Atc2NyaXB0bGV0LWRlY2wtbmVzdGVkLWluLWN1c3RvbS1hY3Rpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXREZWNsTmVzdGVkSW5DdXN0b21BY3Rpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldERlY2xOZXN0ZWRJbkN1c3RvbUFjdGlvbi9idWlsZC54bWwKaW5kZXggODdkYmQ0Yy4uNWExZjBjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldERlY2xOZXN0ZWRJbkN1c3RvbUFjdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldERlY2xOZXN0ZWRJbkN1c3RvbUFjdGlvbi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGV0U3ludGF4RXJyb3JDb3JyZWN0RXJyb3JNZXNzYWdlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXRTeW50YXhFcnJvckNvcnJlY3RFcnJvck1lc3NhZ2UvV2ViVGVzdC5qYXZhCmluZGV4IDY2ZjIxMmMuLjJhZGQ5NWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXRTeW50YXhFcnJvckNvcnJlY3RFcnJvck1lc3NhZ2UvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXRTeW50YXhFcnJvckNvcnJlY3RFcnJvck1lc3NhZ2UvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJ1Z3RyYXEgNTA1MjIwNSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ5LDggKzQ5LDggQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgIAotICAgICAgICB0cnkgeyAKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlSnNwKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldFN5bnRheEVycm9yQ29ycmVjdEVycm9yTWVzc2FnZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldFN5bnRheEVycm9yQ29ycmVjdEVycm9yTWVzc2FnZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDFmZDljYTIuLmQwZjljNGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXRTeW50YXhFcnJvckNvcnJlY3RFcnJvck1lc3NhZ2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGV0U3ludGF4RXJyb3JDb3JyZWN0RXJyb3JNZXNzYWdlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3Atc2NyaXB0bGV0LXN5bnRheC1lcnJvci1jb3JyZWN0LWVycm9yLW1lc3NhZ2UiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1zY3JpcHRsZXQtc3ludGF4LWVycm9yLWNvcnJlY3QtZXJyb3ItbWVzc2FnZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXRTeW50YXhFcnJvckNvcnJlY3RFcnJvck1lc3NhZ2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldFN5bnRheEVycm9yQ29ycmVjdEVycm9yTWVzc2FnZS9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldFN5bnRheEVycm9yQ29ycmVjdEVycm9yTWVzc2FnZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldFN5bnRheEVycm9yQ29ycmVjdEVycm9yTWVzc2FnZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VsZlJlZmVyZW5jaW5nRXJyb3JQYWdlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZWxmUmVmZXJlbmNpbmdFcnJvclBhZ2UvV2ViVGVzdC5qYXZhCmluZGV4IDI1NTE2ZDIuLjFhNmZkMDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZWxmUmVmZXJlbmNpbmdFcnJvclBhZ2UvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZWxmUmVmZXJlbmNpbmdFcnJvclBhZ2UvV2ViVGVzdC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKAogICAgICAgICAgICAgIlVuaXQgdGVzdCBmb3IgZGV0ZWN0aW5nIHNlbGYtcmVmZXJlbmNpbmcgZXJyb3IgcGFnZSIpOwpAQCAtNDcsOCArNDcsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VKc3AoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW52b2tlSnNwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICArICIvanNwL3Rlc3QuanNwIjsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikKQEAgLTY5LDYgKzY5LDYgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZWxmUmVmZXJlbmNpbmdFcnJvclBhZ2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZWxmUmVmZXJlbmNpbmdFcnJvclBhZ2UvYnVpbGQucHJvcGVydGllcwppbmRleCBjMmNmODUxLi5hMjMzMGU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VsZlJlZmVyZW5jaW5nRXJyb3JQYWdlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlbGZSZWZlcmVuY2luZ0Vycm9yUGFnZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1zZWxmLXJlZmVyZW5jaW5nLWVycm9yLXBhZ2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZWxmUmVmZXJlbmNpbmdFcnJvclBhZ2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlbGZSZWZlcmVuY2luZ0Vycm9yUGFnZS9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlbGZSZWZlcmVuY2luZ0Vycm9yUGFnZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlbGZSZWZlcmVuY2luZ0Vycm9yUGFnZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VsZlJlZmVyZW5jaW5nRXJyb3JQYWdlV2l0aFJlbGF0aXZlUGF0aC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VsZlJlZmVyZW5jaW5nRXJyb3JQYWdlV2l0aFJlbGF0aXZlUGF0aC9XZWJUZXN0LmphdmEKaW5kZXggMjQyZjFhOC4uM2YxMzc4ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlbGZSZWZlcmVuY2luZ0Vycm9yUGFnZVdpdGhSZWxhdGl2ZVBhdGgvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZWxmUmVmZXJlbmNpbmdFcnJvclBhZ2VXaXRoUmVsYXRpdmVQYXRoL1dlYlRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigKICAgICAgICAgICAgICJVbml0IHRlc3QgZm9yIGRldGVjdGluZyBzZWxmLXJlZmVyZW5jaW5nIGVycm9yIHBhZ2UiKTsKQEAgLTQ4LDggKzQ4LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlSnNwKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpAQCAtNTgsNyArNTgsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGludm9rZUpzcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgKyAiL2pzcC90ZXN0LmpzcCI7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pCkBAIC03MCw2ICs3MCw2IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VsZlJlZmVyZW5jaW5nRXJyb3JQYWdlV2l0aFJlbGF0aXZlUGF0aC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlbGZSZWZlcmVuY2luZ0Vycm9yUGFnZVdpdGhSZWxhdGl2ZVBhdGgvYnVpbGQucHJvcGVydGllcwppbmRleCBiMjYyZmU4Li41ODY2ZjhlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VsZlJlZmVyZW5jaW5nRXJyb3JQYWdlV2l0aFJlbGF0aXZlUGF0aC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZWxmUmVmZXJlbmNpbmdFcnJvclBhZ2VXaXRoUmVsYXRpdmVQYXRoL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXNlbGYtcmVmZXJlbmNpbmctZXJyb3ItcGFnZS13aXRoLXJlbGF0aXZlLXBhdGgiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZWxmUmVmZXJlbmNpbmdFcnJvclBhZ2VXaXRoUmVsYXRpdmVQYXRoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZWxmUmVmZXJlbmNpbmdFcnJvclBhZ2VXaXRoUmVsYXRpdmVQYXRoL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VsZlJlZmVyZW5jaW5nRXJyb3JQYWdlV2l0aFJlbGF0aXZlUGF0aC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlbGZSZWZlcmVuY2luZ0Vycm9yUGFnZVdpdGhSZWxhdGl2ZVBhdGgvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlcnZsZXRPdmVycmlkZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VydmxldE92ZXJyaWRlL1dlYlRlc3QuamF2YQppbmRleCBhYzJiZDZlLi5iZmVlMDgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VydmxldE92ZXJyaWRlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VydmxldE92ZXJyaWRlL1dlYlRlc3QuamF2YQpAQCAtNjksMTMgKzY5LDEzIEBACiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIgKwogICAgICAgICAgICAgICAgICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG51bGw7Ci0gICAgICAgIHRyeSB7ICAgICAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcigKICAgICAgICAgICAgICAgICBjb25uLmdldElucHV0U3RyZWFtKCkpKTsKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAKKwogICAgICAgICAgICAgaWYgKGxpbmUgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIC8vIENoZWNrIDxPQkpFQ1Q+IGNsYXNzaWQgY29tbWVudAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiICsKICAgICAgICAgICAgICAgICAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZXJ2bGV0T3ZlcnJpZGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZXJ2bGV0T3ZlcnJpZGUvYnVpbGQucHJvcGVydGllcwppbmRleCAzMDVhYzA2Li5mNjNkZDA0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VydmxldE92ZXJyaWRlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlcnZsZXRPdmVycmlkZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMyArMTUsMTMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXNlcnZsZXQtb3ZlcnJpZGUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgogPHByb3BlcnR5IG5hbWU9InByZWNvbXBpbGVqc3AiIHZhbHVlPSJmYWxzZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlcnZsZXRPdmVycmlkZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VydmxldE92ZXJyaWRlL2J1aWxkLnhtbAppbmRleCA4N2RiZDRjLi41YTFmMGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VydmxldE92ZXJyaWRlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VydmxldE92ZXJyaWRlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01MywxMCArNTMsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZXNzaW9uSW52YWxpZGF0ZWQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlc3Npb25JbnZhbGlkYXRlZC9XZWJUZXN0LmphdmEKaW5kZXggNDAzZDVhZi4uNDNiZTg3NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlc3Npb25JbnZhbGlkYXRlZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlc3Npb25JbnZhbGlkYXRlZC9XZWJUZXN0LmphdmEKQEAgLTIzLDIzICsyMywyMyBAQAogICogIkNhbm5vdCBmaW5kIGF0dHJpYnV0ZSB3aGVuIHNlc3Npb24gaW52YWxpZGF0ZWQiCiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAianNwLXNlc3Npb24taW52YWxpZGF0ZWQiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRSA9ICJTVUNDRVNTIjsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0CiAgICAgICAgICAgICA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIGhvc3Q7CiAgICAgcHJpdmF0ZSBTdHJpbmcgcG9ydDsKICAgICBwcml2YXRlIFN0cmluZyBjb250ZXh0Um9vdDsKLSAgICAKKwogICAgIHB1YmxpYyBXZWJUZXN0KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgaG9zdCA9IGFyZ3NbMF07CiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIENSIDYzNjIyOTMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgIH0KICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9Ci0gICAgCisKICAgICAvKgogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKICAgICAgICAgdHJ5IHsKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgY29ubi5jb25uZWN0KCk7Ci0gICAgIAorCiAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgpAQCAtODUsNyArODUsNyBAQAogICAgICAgICB9CiAgICAgfQogICAgICAqLwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbnVsbDsKICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZXNzaW9uSW52YWxpZGF0ZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZXNzaW9uSW52YWxpZGF0ZWQvYnVpbGQucHJvcGVydGllcwppbmRleCAzMjMyYjQwLi4wYjVjZmFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2Vzc2lvbkludmFsaWRhdGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlc3Npb25JbnZhbGlkYXRlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1zZXNzaW9uLWludmFsaWRhdGVkIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2Vzc2lvbkludmFsaWRhdGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZXNzaW9uSW52YWxpZGF0ZWQvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZXNzaW9uSW52YWxpZGF0ZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZXNzaW9uSW52YWxpZGF0ZWQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNpbXBsZVRhZ0Fubm90YXRpb24vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNpbXBsZVRhZ0Fubm90YXRpb24vV2ViVGVzdC5qYXZhCmluZGV4IGZkMWVhNDguLmU2NTNmZjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTaW1wbGVUYWdBbm5vdGF0aW9uL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2ltcGxlVGFnQW5ub3RhdGlvbi9XZWJUZXN0LmphdmEKQEAgLTIyLDkgKzIyLDkgQEAKIAogcHVibGljIGNsYXNzIFdlYlRlc3QKIHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTMzLDE0ICszMywxNCBAQAogCiAgICAgICAgIC8vIFRoZSBzdGF0IHJlcG9ydGVyIHdyaXRlcyBvdXQgdGhlIHRlc3QgaW5mbyBhbmQgcmVzdWx0cwogICAgICAgICAvLyBpbnRvIHRoZSB0b3AtbGV2ZWwgcXVpY2tsb29rIGRpcmVjdG9yeSBkdXJpbmcgYSBydW4uCi0gICAgICAKKwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUZXN0IEJvZHlUYWcgYmVoYXZpb3Igd2hlbiB0YWcgaXMgcmV1c2VkIik7CiAKICAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwogICAgICAgICBTdHJpbmcgcG9ydFMgPSBhcmdzWzFdOwogICAgICAgICBTdHJpbmcgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZ29HZXQoaG9zdCwgcG9ydCwgY29udGV4dFJvb3QgKyAiL3Rlc3QuanNwIiApOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkJvZHlUYWcgdGVzdCIsIHBhc3M/IHN0YXQuUEFTUzogc3RhdC5GQUlMKTsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMCIpOwogICAgICAgICBvcy53cml0ZSgoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwpAQCAtODcsNyArODcsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgfQogICAgICAgICBpZiAoY291bnQgPT0gNikKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTaW1wbGVUYWdBbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2ltcGxlVGFnQW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDIxN2UyYzguLjU4YjhiYWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTaW1wbGVUYWdBbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNpbXBsZVRhZ0Fubm90YXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3Atc2ltcGxldGFnLWFubm90YXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTaW1wbGVUYWdBbm5vdGF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTaW1wbGVUYWdBbm5vdGF0aW9uL2J1aWxkLnhtbAppbmRleCAwMGZkYWQzLi5jMzk3NzZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2ltcGxlVGFnQW5ub3RhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNpbXBsZVRhZ0Fubm90YXRpb24vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCwxMCArNzAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2ltcGxlVGFnQW5ub3RhdGlvbi9zZXJ2bGV0L215cGFjay9NeVNpbXBsZVRhZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNpbXBsZVRhZ0Fubm90YXRpb24vc2VydmxldC9teXBhY2svTXlTaW1wbGVUYWcuamF2YQppbmRleCA5ZTE0YjY5Li42ZDA1ZWJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2ltcGxlVGFnQW5ub3RhdGlvbi9zZXJ2bGV0L215cGFjay9NeVNpbXBsZVRhZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTaW1wbGVUYWdBbm5vdGF0aW9uL3NlcnZsZXQvbXlwYWNrL015U2ltcGxlVGFnLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogCiBwdWJsaWMgY2xhc3MgTXlTaW1wbGVUYWcgZXh0ZW5kcyBTaW1wbGVUYWdTdXBwb3J0IHsKLQkKKwogICBwcml2YXRlIGJvb2xlYW4gcENvbnN0cnVjdGVkID0gZmFsc2U7CiAgIHByaXZhdGUgUGFnZUNvbnRleHQgcGFnZUNvbnRleHQ7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTdGF0aWNGaWxlRW5jb2RpbmcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFN0YXRpY0ZpbGVFbmNvZGluZy9XZWJUZXN0LmphdmEKaW5kZXggNzJmZjM2NS4uMmQ2NDZlZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFN0YXRpY0ZpbGVFbmNvZGluZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFN0YXRpY0ZpbGVFbmNvZGluZy9XZWJUZXN0LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImpzcFN0YXRpY0ZpbGVFbmNvZGluZyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDggKzQ2LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlSnNwKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQuIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU3RhdGljRmlsZUVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU3RhdGljRmlsZUVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzk3YTAyYi4uMTc4NWZkZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFN0YXRpY0ZpbGVFbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTdGF0aWNGaWxlRW5jb2RpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXN0YXRpY0ZpbGVFbmNvZGluZyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc3RhdGljRmlsZUVuY29kaW5nIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1zdGF0aWNGaWxlRW5jb2RpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTdGF0aWNGaWxlRW5jb2RpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFN0YXRpY0ZpbGVFbmNvZGluZy9idWlsZC54bWwKaW5kZXggYmVjOGMyYS4uZjZlY2EwZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFN0YXRpY0ZpbGVFbmNvZGluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFN0YXRpY0ZpbGVFbmNvZGluZy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE1ICs0NCwxNSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjAsNyArNjAsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICAgPGphdmFjCiAgICAgICAgICAgICBzcmNkaXI9Ii4iCkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnRmlsZUJvbUVuY29kaW5nTWlzbWF0Y2hUYWdEaXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0ZpbGVCb21FbmNvZGluZ01pc21hdGNoVGFnRGlyL1dlYlRlc3QuamF2YQppbmRleCA3NDI0Y2JhLi41YzQ4Y2RkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnRmlsZUJvbUVuY29kaW5nTWlzbWF0Y2hUYWdEaXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdGaWxlQm9tRW5jb2RpbmdNaXNtYXRjaFRhZ0Rpci9XZWJUZXN0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBCT00gZW5jb2RpbmcgbWlzbWF0Y2giKTsKQEAgLTU2LDExICs1NiwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi90ZXN0LmpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogCiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDUwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSA1MDApIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDUwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdGaWxlQm9tRW5jb2RpbmdNaXNtYXRjaFRhZ0Rpci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0ZpbGVCb21FbmNvZGluZ01pc21hdGNoVGFnRGlyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDgwYjg1YS4uMjM5YzU2MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0ZpbGVCb21FbmNvZGluZ01pc21hdGNoVGFnRGlyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0ZpbGVCb21FbmNvZGluZ01pc21hdGNoVGFnRGlyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXRhZ2ZpbGUtYm9tLWVuY29kaW5nLW1pc21hdGNoLXRhZ2RpciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0ZpbGVCb21FbmNvZGluZ01pc21hdGNoVGFnRGlyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdGaWxlQm9tRW5jb2RpbmdNaXNtYXRjaFRhZ0Rpci9idWlsZC54bWwKaW5kZXggODdkYmQ0Yy4uNWExZjBjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0ZpbGVCb21FbmNvZGluZ01pc21hdGNoVGFnRGlyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnRmlsZUJvbUVuY29kaW5nTWlzbWF0Y2hUYWdEaXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDEwICs1MywxMCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQb3N0Q29uc3RydWN0QW5ub3RhdGlvbi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RBbm5vdGF0aW9uL1dlYlRlc3QuamF2YQppbmRleCBmZjBlNDI2Li4wNmZhMjY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RBbm5vdGF0aW9uL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RBbm5vdGF0aW9uL1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHJlc291cmNlIGluamVjdGlvbiBpbnRvIEpTUCB0YWcgaGFuZGxlciIpOwpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RBbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RBbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMGI5OTA5OS4uNGIyMGFjZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQb3N0Q29uc3RydWN0QW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUG9zdENvbnN0cnVjdEFubm90YXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtcmVzb3VyY2UtaW5qZWN0aW9uLXRhZy1oYW5kbGVyLXBvc3QtY29uc3RydWN0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RBbm5vdGF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUG9zdENvbnN0cnVjdEFubm90YXRpb24vYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUG9zdENvbnN0cnVjdEFubm90YXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUG9zdENvbnN0cnVjdEFubm90YXRpb24vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQb3N0Q29uc3RydWN0QW5ub3RhdGlvbi9zZXJ2bGV0L3RhZ2xpYi9NeVRhZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQb3N0Q29uc3RydWN0QW5ub3RhdGlvbi9zZXJ2bGV0L3RhZ2xpYi9NeVRhZy5qYXZhCmluZGV4IDFmNTMwNjUuLmM0MmQyMWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUG9zdENvbnN0cnVjdEFubm90YXRpb24vc2VydmxldC90YWdsaWIvTXlUYWcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RBbm5vdGF0aW9uL3NlcnZsZXQvdGFnbGliL015VGFnLmphdmEKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgICAgIHNiLmFwcGVuZCgiLGRzMy1sb2dpbi10aW1lb3V0PSIgKyBsb2dpblRpbWVvdXQpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RFbGVtZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUG9zdENvbnN0cnVjdEVsZW1lbnQvV2ViVGVzdC5qYXZhCmluZGV4IDM0ZGRkZDAuLjY2OWY2NTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUG9zdENvbnN0cnVjdEVsZW1lbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUG9zdENvbnN0cnVjdEVsZW1lbnQvV2ViVGVzdC5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiAgKiBVbml0IHRlc3QgZm9yIHNwZWNpZnlpbmcgcG9zdC1jb25zdHJ1Y3Rpb24gcmVxdWlyZW1lbnRzIG9mIGEgSlNQIHRhZwogICogaGFuZGxlciB1c2luZyB0aGUgPHBvc3QtY29uc3RydWN0PiBkZXBsb3ltZW50IGRlc2NyaXB0b3IgZWxlbWVudC4KICAqCi0gKiBUaGlzIHVuaXQgdGVzdCBpcyBlcXVpdmFsZW50IGluIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIAorICogVGhpcyB1bml0IHRlc3QgaXMgZXF1aXZhbGVudCBpbiBmdW5jdGlvbmFsaXR5IHRvIHRoZQogICoganNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyUG9zdENvbnN0cnVjdCB1bml0IHRlc3QsIHdoZXJlIHRoZQogICogcG9zdC1jb25zdHJ1Y3Rpb24gcmVxdWlyZW1lbnRzIGFyZSBkZWNsYXJlZCB1c2luZyB0aGUgQFBvc3RDb25zdHJ1Y3QKICAqIGFubm90YXRpb24uCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcG9zdC1jb25zdHJ1Y3QgZWxlbWVudCBvbiAiCkBAIC02MSw3ICs2MSw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUG9zdENvbnN0cnVjdEVsZW1lbnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUG9zdENvbnN0cnVjdEVsZW1lbnQvYnVpbGQucHJvcGVydGllcwppbmRleCBlZmE5OGU3Li4wYjIwYjQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RFbGVtZW50L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQb3N0Q29uc3RydWN0RWxlbWVudC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC10YWctaGFuZGxlci1wb3N0LWNvbnN0cnVjdC1lbGVtZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RFbGVtZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUG9zdENvbnN0cnVjdEVsZW1lbnQvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUG9zdENvbnN0cnVjdEVsZW1lbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUG9zdENvbnN0cnVjdEVsZW1lbnQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQb3N0Q29uc3RydWN0RWxlbWVudC9zZXJ2bGV0L3RhZ2xpYi9NeVRhZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQb3N0Q29uc3RydWN0RWxlbWVudC9zZXJ2bGV0L3RhZ2xpYi9NeVRhZy5qYXZhCmluZGV4IDQ0MGJlOGQuLjJkMzZhNjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUG9zdENvbnN0cnVjdEVsZW1lbnQvc2VydmxldC90YWdsaWIvTXlUYWcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RFbGVtZW50L3NlcnZsZXQvdGFnbGliL015VGFnLmphdmEKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgICAgICAgIHNiLmFwcGVuZCgiLGRzMy1sb2dpbi10aW1lb3V0PSIgKyBsb2dpblRpbWVvdXQpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclByZURlc3Ryb3lBbm5vdGF0aW9uL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUHJlRGVzdHJveUFubm90YXRpb24vV2ViVGVzdC5qYXZhCmluZGV4IDEyMzkwNDcuLjkwMTdlYWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUHJlRGVzdHJveUFubm90YXRpb24vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUHJlRGVzdHJveUFubm90YXRpb24vV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICAgICAgbnVtUnVuID0gYXJnc1szXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBAUHJlRGVzdHJveSBvbiBKU1AgdGFnIGhhbmRsZXIiKTsKQEAgLTYwLDEwICs2MCwxMCBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgcnVuRmlyc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgICAgIAorICAgIHB1YmxpYyB2b2lkIHJ1bkZpcnN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9qc3AvdGVzdC5qc3AiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQcmVEZXN0cm95QW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQcmVEZXN0cm95QW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDkzYmQ1NGMuLjVkMWUyZjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUHJlRGVzdHJveUFubm90YXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclByZURlc3Ryb3lBbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXRhZy1oYW5kbGVyLXByZS1kZXN0cm95LWFubm90YXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUHJlRGVzdHJveUFubm90YXRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQcmVEZXN0cm95QW5ub3RhdGlvbi9idWlsZC54bWwKaW5kZXggN2U4M2Y3Mi4uZDEyOTMzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQcmVEZXN0cm95QW5ub3RhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQcmVEZXN0cm95QW5ub3RhdGlvbi9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIzICs0NCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4tZmlyc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTg2LDEwICs4NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdMaWJyYXJ5VmFsaWRhdG9yWE1MVmlld1N0YXRpY0luY2x1ZGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0xpYnJhcnlWYWxpZGF0b3JYTUxWaWV3U3RhdGljSW5jbHVkZS9XZWJUZXN0LmphdmEKaW5kZXggNDRiYjE1ZS4uMzliY2U3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0xpYnJhcnlWYWxpZGF0b3JYTUxWaWV3U3RhdGljSW5jbHVkZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0xpYnJhcnlWYWxpZGF0b3JYTUxWaWV3U3RhdGljSW5jbHVkZS9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgNjU5Iik7CkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdMaWJyYXJ5VmFsaWRhdG9yWE1MVmlld1N0YXRpY0luY2x1ZGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdMaWJyYXJ5VmFsaWRhdG9yWE1MVmlld1N0YXRpY0luY2x1ZGUvYnVpbGQucHJvcGVydGllcwppbmRleCAwMjk1MGYzLi4yOTdkYWI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnTGlicmFyeVZhbGlkYXRvclhNTFZpZXdTdGF0aWNJbmNsdWRlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0xpYnJhcnlWYWxpZGF0b3JYTUxWaWV3U3RhdGljSW5jbHVkZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC10YWctbGlicmFyeS12YWxpZGF0b3IteG1sLXZpZXctc3RhdGljLWluY2x1ZGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdMaWJyYXJ5VmFsaWRhdG9yWE1MVmlld1N0YXRpY0luY2x1ZGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0xpYnJhcnlWYWxpZGF0b3JYTUxWaWV3U3RhdGljSW5jbHVkZS9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0xpYnJhcnlWYWxpZGF0b3JYTUxWaWV3U3RhdGljSW5jbHVkZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0xpYnJhcnlWYWxpZGF0b3JYTUxWaWV3U3RhdGljSW5jbHVkZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnTGlicmFyeVZhbGlkYXRvclhNTFZpZXdTdGF0aWNJbmNsdWRlL3NlcnZsZXQvdGFnbGliL015VmFsaWRhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnTGlicmFyeVZhbGlkYXRvclhNTFZpZXdTdGF0aWNJbmNsdWRlL3NlcnZsZXQvdGFnbGliL015VmFsaWRhdG9yLmphdmEKaW5kZXggMjE2ODc1Ny4uNDQ0ZjZjMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0xpYnJhcnlWYWxpZGF0b3JYTUxWaWV3U3RhdGljSW5jbHVkZS9zZXJ2bGV0L3RhZ2xpYi9NeVZhbGlkYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdMaWJyYXJ5VmFsaWRhdG9yWE1MVmlld1N0YXRpY0luY2x1ZGUvc2VydmxldC90YWdsaWIvTXlWYWxpZGF0b3IuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgIHB1YmxpYyBWYWxpZGF0aW9uTWVzc2FnZVtdIHZhbGlkYXRlKFN0cmluZyBwcmVmaXgsIFN0cmluZyB1cmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFnZURhdGEgcGFnZSkgewogCi0JLyoKKyAgICAvKgogICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAKICAgICAgICAgc2IuYXBwZW5kKCItLS0tLS0tLS0tIFByZWZpeD0iICsgcHJlZml4ICsgIiBVUkk9IiArIHVyaSArCkBAIC01NiwzNCArNTYsMzQgQEAKICAgICAgICAgfQogICAgICAgICBzYi5hcHBlbmQoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzYi50b1N0cmluZygpKTsKLQkqLworICAgICovCiAKICAgICAgICAgdHJ5IHsKLQkgICAgRGVmYXVsdEhhbmRsZXIgaCA9IG5ldyBEZWZhdWx0SGFuZGxlcigpOworICAgICAgICBEZWZhdWx0SGFuZGxlciBoID0gbmV3IERlZmF1bHRIYW5kbGVyKCk7CiAKLQkgICAgLy8gcGFyc2UgdGhlIHBhZ2UKLQkgICAgU0FYUGFyc2VyRmFjdG9yeSBmID0gU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCSAgICBmLnNldFZhbGlkYXRpbmcoZmFsc2UpOwotCSAgICBmLnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotCSAgICBTQVhQYXJzZXIgcCA9IGYubmV3U0FYUGFyc2VyKCk7Ci0JICAgIHAucGFyc2UocGFnZS5nZXRJbnB1dFN0cmVhbSgpLCBoKTsKKyAgICAgICAgLy8gcGFyc2UgdGhlIHBhZ2UKKyAgICAgICAgU0FYUGFyc2VyRmFjdG9yeSBmID0gU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOworICAgICAgICBmLnNldFZhbGlkYXRpbmcoZmFsc2UpOworICAgICAgICBmLnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOworICAgICAgICBTQVhQYXJzZXIgcCA9IGYubmV3U0FYUGFyc2VyKCk7CisgICAgICAgIHAucGFyc2UocGFnZS5nZXRJbnB1dFN0cmVhbSgpLCBoKTsKIAotCX0gY2F0Y2ggKFNBWEV4Y2VwdGlvbiBleCkgewotCSAgICByZXR1cm4gdm1Gcm9tU3RyaW5nKGV4LnRvU3RyaW5nKCkpOwotCX0gY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZXgpIHsKLQkgICAgcmV0dXJuIHZtRnJvbVN0cmluZyhleC50b1N0cmluZygpKTsKLQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkgewotCSAgICByZXR1cm4gdm1Gcm9tU3RyaW5nKGV4LnRvU3RyaW5nKCkpOwotCX0KKyAgICB9IGNhdGNoIChTQVhFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgcmV0dXJuIHZtRnJvbVN0cmluZyhleC50b1N0cmluZygpKTsKKyAgICB9IGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHJldHVybiB2bUZyb21TdHJpbmcoZXgudG9TdHJpbmcoKSk7CisgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKKyAgICAgICAgcmV0dXJuIHZtRnJvbVN0cmluZyhleC50b1N0cmluZygpKTsKKyAgICB9CiAKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCiAgICAgLy8gY29uc3RydWN0cyBhIFZhbGlkYXRpb25NZXNzYWdlW10gZnJvbSBhIHNpbmdsZSBTdHJpbmcgYW5kIG5vIElECiAgICAgcHJpdmF0ZSBzdGF0aWMgVmFsaWRhdGlvbk1lc3NhZ2VbXSB2bUZyb21TdHJpbmcoU3RyaW5nIG1lc3NhZ2UpIHsKLQlyZXR1cm4gbmV3IFZhbGlkYXRpb25NZXNzYWdlW10gewotCSAgICBuZXcgVmFsaWRhdGlvbk1lc3NhZ2UobnVsbCwgbWVzc2FnZSkKLQl9OworICAgIHJldHVybiBuZXcgVmFsaWRhdGlvbk1lc3NhZ2VbXSB7CisgICAgICAgIG5ldyBWYWxpZGF0aW9uTWVzc2FnZShudWxsLCBtZXNzYWdlKQorICAgIH07CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnUmVsZWFzZUNhbGxlZFdoZW5Qb29saW5nRGlzYWJsZWQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ1JlbGVhc2VDYWxsZWRXaGVuUG9vbGluZ0Rpc2FibGVkL1dlYlRlc3QuamF2YQppbmRleCBkYjc3NGU1Li40ZGU3ZDZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnUmVsZWFzZUNhbGxlZFdoZW5Qb29saW5nRGlzYWJsZWQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdSZWxlYXNlQ2FsbGVkV2hlblBvb2xpbmdEaXNhYmxlZC9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnUmVsZWFzZUNhbGxlZFdoZW5Qb29saW5nRGlzYWJsZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdSZWxlYXNlQ2FsbGVkV2hlblBvb2xpbmdEaXNhYmxlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGM4YjE1ZmEuLjZkYTllYzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdSZWxlYXNlQ2FsbGVkV2hlblBvb2xpbmdEaXNhYmxlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdSZWxlYXNlQ2FsbGVkV2hlblBvb2xpbmdEaXNhYmxlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXRhZy1yZWxlYXNlLWNhbGxlZC13aGVuLXBvb2xpbmctZGlzYWJsZWQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdSZWxlYXNlQ2FsbGVkV2hlblBvb2xpbmdEaXNhYmxlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnUmVsZWFzZUNhbGxlZFdoZW5Qb29saW5nRGlzYWJsZWQvYnVpbGQueG1sCmluZGV4IDA5NzQzMWMuLjVhMWYwYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdSZWxlYXNlQ2FsbGVkV2hlblBvb2xpbmdEaXNhYmxlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ1JlbGVhc2VDYWxsZWRXaGVuUG9vbGluZ0Rpc2FibGVkL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01Myw4ICs1Myw4IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ1JlbGVhc2VDYWxsZWRXaGVuUG9vbGluZ0Rpc2FibGVkL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnUmVsZWFzZUNhbGxlZFdoZW5Qb29saW5nRGlzYWJsZWQvZGVzY3JpcHRvci9zdW4td2ViLnhtbAppbmRleCA3NWYwNDAzLi5mODYzNTRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnUmVsZWFzZUNhbGxlZFdoZW5Qb29saW5nRGlzYWJsZWQvZGVzY3JpcHRvci9zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnUmVsZWFzZUNhbGxlZFdoZW5Qb29saW5nRGlzYWJsZWQvZGVzY3JpcHRvci9zdW4td2ViLnhtbApAQCAtMjIsNSArMjIsNSBAQAogPHN1bi13ZWItYXBwPgogICA8anNwLWNvbmZpZz4KICAgICA8cHJvcGVydHkgbmFtZT0iZW5hYmxlUG9vbGluZyIgdmFsdWU9ImZhbHNlIiAvPgotICA8L2pzcC1jb25maWc+IAorICA8L2pzcC1jb25maWc+CiA8L3N1bi13ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ1JlbGVhc2VDYWxsZWRXaGVuUG9vbGluZ0VuYWJsZWQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ1JlbGVhc2VDYWxsZWRXaGVuUG9vbGluZ0VuYWJsZWQvV2ViVGVzdC5qYXZhCmluZGV4IDg0YTNmYWQuLjkzZDYzZDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdSZWxlYXNlQ2FsbGVkV2hlblBvb2xpbmdFbmFibGVkL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnUmVsZWFzZUNhbGxlZFdoZW5Qb29saW5nRW5hYmxlZC9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnUmVsZWFzZUNhbGxlZFdoZW5Qb29saW5nRW5hYmxlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ1JlbGVhc2VDYWxsZWRXaGVuUG9vbGluZ0VuYWJsZWQvYnVpbGQucHJvcGVydGllcwppbmRleCAwMTlkYWUwLi41OTFjODBhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnUmVsZWFzZUNhbGxlZFdoZW5Qb29saW5nRW5hYmxlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdSZWxlYXNlQ2FsbGVkV2hlblBvb2xpbmdFbmFibGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEyICsxNSwxMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtdGFnLXJlbGVhc2UtY2FsbGVkLXdoZW4tcG9vbGluZy1lbmFibGVkIi8+CiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnUmVsZWFzZUNhbGxlZFdoZW5Qb29saW5nRW5hYmxlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnUmVsZWFzZUNhbGxlZFdoZW5Qb29saW5nRW5hYmxlZC9idWlsZC54bWwKaW5kZXggMDk3NDMxYy4uNWExZjBjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ1JlbGVhc2VDYWxsZWRXaGVuUG9vbGluZ0VuYWJsZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdSZWxlYXNlQ2FsbGVkV2hlblBvb2xpbmdFbmFibGVkL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01Myw4ICs1Myw4IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ1JlbGVhc2VDYWxsZWRXaGVuUG9vbGluZ0VuYWJsZWQvZGVzY3JpcHRvci9zdW4td2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdSZWxlYXNlQ2FsbGVkV2hlblBvb2xpbmdFbmFibGVkL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKaW5kZXggZDBkZjhjNi4uMWQ3ZTMzYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ1JlbGVhc2VDYWxsZWRXaGVuUG9vbGluZ0VuYWJsZWQvZGVzY3JpcHRvci9zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnUmVsZWFzZUNhbGxlZFdoZW5Qb29saW5nRW5hYmxlZC9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCkBAIC0yMiw1ICsyMiw1IEBACiA8c3VuLXdlYi1hcHA+CiAgIDxqc3AtY29uZmlnPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJlbmFibGVQb29saW5nIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgPC9qc3AtY29uZmlnPiAKKyAgPC9qc3AtY29uZmlnPgogPC9zdW4td2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdkZXBlbmRlbnRYbWwvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ2RlcGVuZGVudFhtbC9XZWJUZXN0LmphdmEKaW5kZXggMzlkN2U3Yi4uMzQzNDQyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ2RlcGVuZGVudFhtbC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ2RlcGVuZGVudFhtbC9XZWJUZXN0LmphdmEKQEAgLTIyLDE0ICsyMiwxNCBAQAogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdAogewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBwYXNzID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGJUYWcgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCB1c2VCZWFuID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgc2NyaXB0bGV0ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRUx2YWx1ZTEgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFTHZhbHVlMiA9IDA7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApAQCAtMzgsMTQgKzM4LDE0IEBACiAKICAgICAgICAgLy8gVGhlIHN0YXQgcmVwb3J0ZXIgd3JpdGVzIG91dCB0aGUgdGVzdCBpbmZvIGFuZCByZXN1bHRzCiAgICAgICAgIC8vIGludG8gdGhlIHRvcC1sZXZlbCBxdWlja2xvb2sgZGlyZWN0b3J5IGR1cmluZyBhIHJ1bi4KLSAgICAgIAorCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRlc3QgdGFnZGVwZW5kZW50IGJvZGllcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgaW4gWE1MIHN5bnRheCIpOwogCiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKICAgICAgICAgU3RyaW5nIHBvcnRTID0gYXJnc1sxXTsKICAgICAgICAgU3RyaW5nIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0UykuaW50VmFsdWUoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsIGNvbnRleHRSb290ICsgIi90ZXN0LmpzcHgiICk7CiAgICAgICAgICAgICBpZiAoYlRhZyA9PSA2ICYmIHVzZUJlYW4gPT0gMSAmJiBzY3JpcHRsZXQgPT0gMSAmJgpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRlc3QgVU5QUkVESUNURUQtRkFJTFVSRSIpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdkZXBlbmRlbnRYbWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdkZXBlbmRlbnRYbWwvYnVpbGQucHJvcGVydGllcwppbmRleCBhOTQwNDEwLi5mZTNhMTYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnZGVwZW5kZW50WG1sL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ2RlcGVuZGVudFhtbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcFRhZ2RlcGVuZGVudFhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ2RlcGVuZGVudFhtbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnZGVwZW5kZW50WG1sL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnZGVwZW5kZW50WG1sL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnZGVwZW5kZW50WG1sL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdkZXBlbmRlbnRYbWwvc2VydmxldC9teXBhY2svTXlCb2R5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnZGVwZW5kZW50WG1sL3NlcnZsZXQvbXlwYWNrL015Qm9keS5qYXZhCmluZGV4IGZiNjg2ZTYuLjA0MmU1MjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdkZXBlbmRlbnRYbWwvc2VydmxldC9teXBhY2svTXlCb2R5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ2RlcGVuZGVudFhtbC9zZXJ2bGV0L215cGFjay9NeUJvZHkuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogCiAKIHB1YmxpYyBjbGFzcyBNeUJvZHkgZXh0ZW5kcyBCb2R5VGFnU3VwcG9ydCB7Ci0JCisKICAgU3RyaW5nIGVjaG9TdHI7CiAgIFN0cmluZyBzdGF0aWNTdHI7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUZW1wbGF0ZVRleHRFc2NhcGVkRUwvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRlbXBsYXRlVGV4dEVzY2FwZWRFTC9XZWJUZXN0LmphdmEKaW5kZXggOGQ2ZmE3Ni4uMTBmYjNjYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRlbXBsYXRlVGV4dEVzY2FwZWRFTC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRlbXBsYXRlVGV4dEVzY2FwZWRFTC9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgZXNjYXBpbmcgRUwgZXhwcmVzc2lvbnMgaW4gdGVtcGxhdGUgdGV4dCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ4LDggKzQ4LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlSnNwKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQuIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGVtcGxhdGVUZXh0RXNjYXBlZEVML2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGVtcGxhdGVUZXh0RXNjYXBlZEVML2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDkwMTlmYi4uMmY1NDIwOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRlbXBsYXRlVGV4dEVzY2FwZWRFTC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUZW1wbGF0ZVRleHRFc2NhcGVkRUwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC10ZW1wbGF0ZS10ZXh0LWVzY2FwZWQtZWwiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC10ZW1wbGF0ZS10ZXh0LWVzY2FwZWQtZWwiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGVtcGxhdGVUZXh0RXNjYXBlZEVML2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUZW1wbGF0ZVRleHRFc2NhcGVkRUwvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUZW1wbGF0ZVRleHRFc2NhcGVkRUwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUZW1wbGF0ZVRleHRFc2NhcGVkRUwvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRocm93c0ZpbGVOb3RGb3VuZEV4cGVjdDUwMFJlc3BvbnNlQ29kZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGhyb3dzRmlsZU5vdEZvdW5kRXhwZWN0NTAwUmVzcG9uc2VDb2RlL1dlYlRlc3QuamF2YQppbmRleCBmNDNjNDc0Li4yNDQzNDQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGhyb3dzRmlsZU5vdEZvdW5kRXhwZWN0NTAwUmVzcG9uc2VDb2RlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGhyb3dzRmlsZU5vdEZvdW5kRXhwZWN0NTAwUmVzcG9uc2VDb2RlL1dlYlRlc3QuamF2YQpAQCAtNTMsMTggKzUzLDE4IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL2pzcC9ub3Rmb3VuZC5qc3AiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlID09IDUwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSA9PSA1MDApIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDUwMCIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUaHJvd3NGaWxlTm90Rm91bmRFeHBlY3Q1MDBSZXNwb25zZUNvZGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUaHJvd3NGaWxlTm90Rm91bmRFeHBlY3Q1MDBSZXNwb25zZUNvZGUvYnVpbGQucHJvcGVydGllcwppbmRleCA0ZjYyOWJlLi5hOGE3ZmUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGhyb3dzRmlsZU5vdEZvdW5kRXhwZWN0NTAwUmVzcG9uc2VDb2RlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRocm93c0ZpbGVOb3RGb3VuZEV4cGVjdDUwMFJlc3BvbnNlQ29kZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC10aHJvd3MtZmlsZS1ub3QtZm91bmQtZXhwZWN0LTUwMC1yZXNwb25zZS1jb2RlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGhyb3dzRmlsZU5vdEZvdW5kRXhwZWN0NTAwUmVzcG9uc2VDb2RlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUaHJvd3NGaWxlTm90Rm91bmRFeHBlY3Q1MDBSZXNwb25zZUNvZGUvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUaHJvd3NGaWxlTm90Rm91bmRFeHBlY3Q1MDBSZXNwb25zZUNvZGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUaHJvd3NGaWxlTm90Rm91bmRFeHBlY3Q1MDBSZXNwb25zZUNvZGUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRyaW1EaXJlY3RpdmVXaGl0ZXNwYWNlcy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVHJpbURpcmVjdGl2ZVdoaXRlc3BhY2VzL1dlYlRlc3QuamF2YQppbmRleCBmNjgzM2ZlLi44YzUxOTVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVHJpbURpcmVjdGl2ZVdoaXRlc3BhY2VzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVHJpbURpcmVjdGl2ZVdoaXRlc3BhY2VzL1dlYlRlc3QuamF2YQpAQCAtMzUsMTIgKzM1LDEyIEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGVudW0gc3VwcG9ydCBpbiBFTCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKICAgICAgICAgd2ViVGVzdC5kb1Rlc3QoIi90cmltLmpzcCIsICJqc3AtdHJpbURpcmVjdGl2ZVdoaXRlc3BhY2VzIik7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmcgcGF0aCwgU3RyaW5nIHRlc3ROYW1lKSB7CkBAIC02OSw3ICs2OSw3IEBACiAvLyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxpbmUzOiIgKyBsaW5lMyk7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGxpbmU0ID0gaW5wdXQucmVhZExpbmUoKTsKIC8vICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibGluZTQ6IiArIGxpbmU0KTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGlmICgiIi5lcXVhbHMobGluZTEpICYmCiAgICAgICAgICAgICAgICAgICAgICJ4eXoiLmVxdWFscyhsaW5lMikgJiYKICAgICAgICAgICAgICAgICAgICAgIiIuZXF1YWxzKGxpbmUzKSAmJgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRyaW1EaXJlY3RpdmVXaGl0ZXNwYWNlcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRyaW1EaXJlY3RpdmVXaGl0ZXNwYWNlcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDZiZjVmNzQuLjVjZGQ1MmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUcmltRGlyZWN0aXZlV2hpdGVzcGFjZXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVHJpbURpcmVjdGl2ZVdoaXRlc3BhY2VzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEyICsxNSwxMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS10cmltRGlyZWN0aXZlV2hpdGVzcGFjZXMiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXRyaW1EaXJlY3RpdmVXaGl0ZXNwYWNlcyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0iLz4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRyaW1EaXJlY3RpdmVXaGl0ZXNwYWNlcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVHJpbURpcmVjdGl2ZVdoaXRlc3BhY2VzL2J1aWxkLnhtbAppbmRleCA4N2RiZDRjLi41YTFmMGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVHJpbURpcmVjdGl2ZVdoaXRlc3BhY2VzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVHJpbURpcmVjdGl2ZVdoaXRlc3BhY2VzL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01MywxMCArNTMsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BVcm5Kc3BUbGRXaXRob3V0VXJpL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BVcm5Kc3BUbGRXaXRob3V0VXJpL1dlYlRlc3QuamF2YQppbmRleCAyZmVlNzk4Li5lMjZhMTA5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVXJuSnNwVGxkV2l0aG91dFVyaS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFVybkpzcFRsZFdpdGhvdXRVcmkvV2ViVGVzdC5qYXZhCkBAIC00MiwyNSArNDIsMjUgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgdXJuOmpzcHRsZDo8cGF0aD4iKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAgICAgICAgIHdlYlRlc3QuZG9UZXN0KCk7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBudWxsOwotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi90ZXN0LmpzcHgiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BVcm5Kc3BUbGRXaXRob3V0VXJpL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVXJuSnNwVGxkV2l0aG91dFVyaS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDI2MzFmYTMuLmU3ZTdmZDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BVcm5Kc3BUbGRXaXRob3V0VXJpL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFVybkpzcFRsZFdpdGhvdXRVcmkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtdXJuLWpzcC10bGQtd2l0aG91dC11cmkiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BVcm5Kc3BUbGRXaXRob3V0VXJpL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BVcm5Kc3BUbGRXaXRob3V0VXJpL2J1aWxkLnhtbAppbmRleCA4N2RiZDRjLi41YTFmMGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVXJuSnNwVGxkV2l0aG91dFVyaS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFVybkpzcFRsZFdpdGhvdXRVcmkvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDEwICs1MywxMCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFVzZUJlYW4vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFVzZUJlYW4vV2ViVGVzdC5qYXZhCmluZGV4IGZhNDVlZjYuLjY5NzdjYWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BVc2VCZWFuL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVXNlQmVhbi9XZWJUZXN0LmphdmEKQEAgLTIxLDExICsyMSwxMSBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9ICJqc3AtdXNlLWJlYW4iOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBwYXNzID0gZmFsc2U7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApAQCAtMzQsMTQgKzM0LDE0IEBACiAKICAgICAgICAgLy8gVGhlIHN0YXQgcmVwb3J0ZXIgd3JpdGVzIG91dCB0aGUgdGVzdCBpbmZvIGFuZCByZXN1bHRzCiAgICAgICAgIC8vIGludG8gdGhlIHRvcC1sZXZlbCBxdWlja2xvb2sgZGlyZWN0b3J5IGR1cmluZyBhIHJ1bi4KLSAgICAgIAorCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRlc3QgdXNlQmVhbiBvcHRpbWl6YXRpb24gYmVoYXZpb3IiKTsKIAogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CiAgICAgICAgIFN0cmluZyBwb3J0UyA9IGFyZ3NbMV07CiAgICAgICAgIFN0cmluZyBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBnb0dldChob3N0LCBwb3J0LCBjb250ZXh0Um9vdCArICIvdGVzdC5qc3AiICk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHBhc3M/IHN0YXQuUEFTUzogc3RhdC5GQUlMKTsKQEAgLTc4LDEwICs3OCwxMCBAQAogICAgICAgICAgICAgICAgIGludCBpbmRleCA9IGxpbmUuaW5kZXhPZigiUEFTUyIpOwogICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIHBhc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRlc3QgVU5QUkVESUNURUQtRkFJTFVSRSIpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BVc2VCZWFuL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVXNlQmVhbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGFkNmRjNzYuLjQyOTY4OWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BVc2VCZWFuL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFVzZUJlYW4vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC11c2UtYmVhbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXVzZS1iZWFuIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFVzZUJlYW4vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFVzZUJlYW4vYnVpbGQueG1sCmluZGV4IDg3ZGJkNGMuLjVhMWYwYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BVc2VCZWFuL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVXNlQmVhbi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwV2VsY29tZVBhZ2VXaXRob3V0QW55U2VydmxldE1hcHBpbmdzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BXZWxjb21lUGFnZVdpdGhvdXRBbnlTZXJ2bGV0TWFwcGluZ3MvV2ViVGVzdC5qYXZhCmluZGV4IDUxZmZhMGQuLjc1MWIyMTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BXZWxjb21lUGFnZVdpdGhvdXRBbnlTZXJ2bGV0TWFwcGluZ3MvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BXZWxjb21lUGFnZVdpdGhvdXRBbnlTZXJ2bGV0TWFwcGluZ3MvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDYzNzI1NzAiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00OSw4ICs0OSw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZUpzcCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BXZWxjb21lUGFnZVdpdGhvdXRBbnlTZXJ2bGV0TWFwcGluZ3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BXZWxjb21lUGFnZVdpdGhvdXRBbnlTZXJ2bGV0TWFwcGluZ3MvYnVpbGQucHJvcGVydGllcwppbmRleCA5ZGNjYmE4Li4xNWEzMzUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwV2VsY29tZVBhZ2VXaXRob3V0QW55U2VydmxldE1hcHBpbmdzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFdlbGNvbWVQYWdlV2l0aG91dEFueVNlcnZsZXRNYXBwaW5ncy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC13ZWxjb21lLXBhZ2Utd2l0aG91dC1hbnktc2VydmxldC1tYXBwaW5ncyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFdlbGNvbWVQYWdlV2l0aG91dEFueVNlcnZsZXRNYXBwaW5ncy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwV2VsY29tZVBhZ2VXaXRob3V0QW55U2VydmxldE1hcHBpbmdzL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwV2VsY29tZVBhZ2VXaXRob3V0QW55U2VydmxldE1hcHBpbmdzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwV2VsY29tZVBhZ2VXaXRob3V0QW55U2VydmxldE1hcHBpbmdzL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BYcG93ZXJlZEJ5RGlzYWJsZWQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFhwb3dlcmVkQnlEaXNhYmxlZC9XZWJUZXN0LmphdmEKaW5kZXggZjJmYjRlYi4uMjY5ZDFmYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFhwb3dlcmVkQnlEaXNhYmxlZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFhwb3dlcmVkQnlEaXNhYmxlZC9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgZGlzYWJsaW5nICdYLVBvd2VyZWQtQnk6IEpTUC8yLjAnIHJlc3BvbnNlIGhlYWRlciIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDggKzQ2LDggQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgIAotICAgICAgICB0cnkgeyAKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlSnNwKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BYcG93ZXJlZEJ5RGlzYWJsZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BYcG93ZXJlZEJ5RGlzYWJsZWQvYnVpbGQucHJvcGVydGllcwppbmRleCA4ZWY5YmVjLi44YTFiNTJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwWHBvd2VyZWRCeURpc2FibGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFhwb3dlcmVkQnlEaXNhYmxlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXhwb3dlcmVkLWJ5LWRpc2FibGVkIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AteHBvd2VyZWQtYnktZGlzYWJsZWQiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFhwb3dlcmVkQnlEaXNhYmxlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwWHBvd2VyZWRCeURpc2FibGVkL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwWHBvd2VyZWRCeURpc2FibGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwWHBvd2VyZWRCeURpc2FibGVkL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BYcG93ZXJlZEJ5U2luZ2xlUmVzcG9uc2VIZWFkZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFhwb3dlcmVkQnlTaW5nbGVSZXNwb25zZUhlYWRlci9XZWJUZXN0LmphdmEKaW5kZXggZDRmNDY0ZS4uNGRhNTk2OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFhwb3dlcmVkQnlTaW5nbGVSZXNwb25zZUhlYWRlci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFhwb3dlcmVkQnlTaW5nbGVSZXNwb25zZUhlYWRlci9XZWJUZXN0LmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKICAqIFVuaXQgdGVzdCBmb3IgaHR0cHM6Ly9nbGFzc2Zpc2guZGV2LmphdmEubmV0L2lzc3Vlcy9zaG93X2J1Zy5jZ2k/aWQ9MTA5MwogICogKCJ4LXBvd2VyZWQtYnkgaGVhZGVyIGhhcyByZWR1bmRhbnQgaW5mb3JtYXRpb24iKToKICAqCi0gKiBNYWtlIHN1cmUgdGhhdCBpZiBvbmUgSlNQIGZvcndhcmRzIHRvIGFub3RoZXIsIHRoZSByZXNwb25zZSBkb2VzIG5vdCAKKyAqIE1ha2Ugc3VyZSB0aGF0IGlmIG9uZSBKU1AgZm9yd2FyZHMgdG8gYW5vdGhlciwgdGhlIHJlc3BvbnNlIGRvZXMgbm90CiAgKiBjb250YWluIGFueSBkdXBsaWNhdGUgJ1gtUG93ZXJlZC1CeTogSlNQJyBoZWFkZXIuCiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIGlzc3VlIDEwOTMiKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFhwb3dlcmVkQnlTaW5nbGVSZXNwb25zZUhlYWRlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFhwb3dlcmVkQnlTaW5nbGVSZXNwb25zZUhlYWRlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI5OTVhYmMuLjAwYTE5ZmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BYcG93ZXJlZEJ5U2luZ2xlUmVzcG9uc2VIZWFkZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwWHBvd2VyZWRCeVNpbmdsZVJlc3BvbnNlSGVhZGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXhwb3dlcmVkLWJ5LXNpbmdsZS1yZXNwb25zZS1oZWFkZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BYcG93ZXJlZEJ5U2luZ2xlUmVzcG9uc2VIZWFkZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFhwb3dlcmVkQnlTaW5nbGVSZXNwb25zZUhlYWRlci9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFhwb3dlcmVkQnlTaW5nbGVSZXNwb25zZUhlYWRlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFhwb3dlcmVkQnlTaW5nbGVSZXNwb25zZUhlYWRlci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwY0NvbmZpZ3VyZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwY0NvbmZpZ3VyZS9XZWJUZXN0LmphdmEKaW5kZXggYjAxYzliMS4uNmE3NzFlYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcGNDb25maWd1cmUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BjQ29uZmlndXJlL1dlYlRlc3QuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBCdWd0cmFxIDQ5OTQ3OTAiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MSw4ICs1MSw4IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAKLSAgICAgICAgdHJ5IHsgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZUpzcCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwY0NvbmZpZ3VyZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcGNDb25maWd1cmUvYnVpbGQucHJvcGVydGllcwppbmRleCBiY2ZhYmM4Li4yMjBlYjkyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwY0NvbmZpZ3VyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BjQ29uZmlndXJlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3BjLWNvbmZpZ3VyZSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwYy1jb25maWd1cmUiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BjQ29uZmlndXJlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BjQ29uZmlndXJlL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwY0NvbmZpZ3VyZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcGNDb25maWd1cmUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcGNvbmZpZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwY29uZmlnL1dlYlRlc3QuamF2YQppbmRleCBjOWY0NDRmLi4xMzE3ZjRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwY29uZmlnL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwY29uZmlnL1dlYlRlc3QuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgICAgU3RyaW5nIHBvcnRTID0gYXJnc1sxXTsKICAgICAgICAgU3RyaW5nIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0UykuaW50VmFsdWUoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsICJKU1AtQ09ORklHIiwgY29udGV4dFJvb3QgKyAiL3Rlc3QuanNwIiApOwogICAgICAgICAgICAgZ29HZXQyKGhvc3QsIHBvcnQsICJFTElnbm9yZWQiLCBjb250ZXh0Um9vdCArICIvZm9vL3Rlc3QuanNwIiApOwpAQCAtODEsNyArODEsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXR1cy5lcXVhbHNJZ25vcmVDYXNlKCJQQVNTIikpewogICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UiKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKQEAgLTk4LDcgKzk4LDcgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7fQogICAgICAgICB9CiAgICB9Ci0gIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBnb0dldDIoU3RyaW5nIGhvc3QsIGludCBwb3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCwgU3RyaW5nIGNvbnRleHRQYXRoKQogICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKSk7CiAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjBcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHMuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwY29uZmlnL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDFkMDJjNS4uYzRmZDJhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcGNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3Bjb25maWcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTEgKzE1LDExIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1jb25maWciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1jb25maWciLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcGNvbmZpZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwY29uZmlnL2J1aWxkLnhtbAppbmRleCA4N2RiZDRjLi41YTFmMGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwY29uZmlnL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwY29uZmlnL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01MywxMCArNTMsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3RsSHRtbFBhcmFtT3V0c2lkZUZtdE1lc3NhZ2UvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzdGxIdG1sUGFyYW1PdXRzaWRlRm10TWVzc2FnZS9XZWJUZXN0LmphdmEKaW5kZXggOTQ1NDE5ZS4uZmFhMDdmMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzdGxIdG1sUGFyYW1PdXRzaWRlRm10TWVzc2FnZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzdGxIdG1sUGFyYW1PdXRzaWRlRm10TWVzc2FnZS9XZWJUZXN0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBDUiA2MzYxNjY4Iik7CkBAIC01MiwxMSArNTIsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvanNwL3Rlc3QuanNweCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanN0bEh0bWxQYXJhbU91dHNpZGVGbXRNZXNzYWdlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanN0bEh0bWxQYXJhbU91dHNpZGVGbXRNZXNzYWdlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggY2FiZmZiOS4uNTYyYWQ2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzdGxIdG1sUGFyYW1PdXRzaWRlRm10TWVzc2FnZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3RsSHRtbFBhcmFtT3V0c2lkZUZtdE1lc3NhZ2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3RsLWh0bWwtcGFyYW0tb3V0c2lkZS1mbXQtbWVzc2FnZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzdGxIdG1sUGFyYW1PdXRzaWRlRm10TWVzc2FnZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanN0bEh0bWxQYXJhbU91dHNpZGVGbXRNZXNzYWdlL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanN0bEh0bWxQYXJhbU91dHNpZGVGbXRNZXNzYWdlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanN0bEh0bWxQYXJhbU91dHNpZGVGbXRNZXNzYWdlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3RsTG9jYWxlU3VwcG9ydEFQSS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanN0bExvY2FsZVN1cHBvcnRBUEkvV2ViVGVzdC5qYXZhCmluZGV4IGY1ZTAyMDIuLjFhOTIzZTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3RsTG9jYWxlU3VwcG9ydEFQSS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzdGxMb2NhbGVTdXBwb3J0QVBJL1dlYlRlc3QuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCA4NzEiKTsKQEAgLTUzLDExICs1MywxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIC8vIEFjY2VzcyB0ZXN0MS5qc3AKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwpAQCAtNjUsNyArNjUsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgU3RyaW5nIGFjY2VwdExhbmd1YWdlID0gIkFjY2VwdC1MYW5ndWFnZTogZGVcbiI7CiAgICAgICAgIG9zLndyaXRlKGFjY2VwdExhbmd1YWdlLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3RsTG9jYWxlU3VwcG9ydEFQSS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzdGxMb2NhbGVTdXBwb3J0QVBJL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTE4MDBjNS4uNjQzMmRhNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzdGxMb2NhbGVTdXBwb3J0QVBJL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzdGxMb2NhbGVTdXBwb3J0QVBJL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanN0bC1sb2NhbGUtc3VwcG9ydC1hcGkiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3RsTG9jYWxlU3VwcG9ydEFQSS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanN0bExvY2FsZVN1cHBvcnRBUEkvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3RsTG9jYWxlU3VwcG9ydEFQSS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzdGxMb2NhbGVTdXBwb3J0QVBJL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9rZWVwQWxpdmUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9rZWVwQWxpdmUvYnVpbGQucHJvcGVydGllcwppbmRleCA5ZDkxOTBhLi43OTBjMjhjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIva2VlcEFsaXZlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2tlZXBBbGl2ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0ta2VlcGFsaXZlIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1rZWVwYWxpdmUiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLWtlZXBhbGl2ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2tlZXBBbGl2ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIva2VlcEFsaXZlL2J1aWxkLnhtbAppbmRleCA4N2RiZDRjLi41YTFmMGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIva2VlcEFsaXZlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIva2VlcEFsaXZlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01MywxMCArNTMsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9rZWVwQWxpdmVUaW1lb3V0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9rZWVwQWxpdmVUaW1lb3V0L2J1aWxkLnhtbAppbmRleCA1M2Q2ZWRlLi5mZGI2ZDZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIva2VlcEFsaXZlVGltZW91dC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2tlZXBBbGl2ZVRpbWVvdXQvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKLQkJCQkJCSB2YWx1ZT0iY29uZmlncy5jb25maWcuc2VydmVyLWNvbmZpZy5uZXR3b3JrLWNvbmZpZy5wcm90b2NvbHMucHJvdG9jb2wuaHR0cC1saXN0ZW5lci0xLmh0dHAudGltZW91dC1zZWNvbmRzPTEwIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImNvbmZpZ3MuY29uZmlnLnNlcnZlci1jb25maWcubmV0d29yay1jb25maWcucHJvdG9jb2xzLnByb3RvY29sLmh0dHAtbGlzdGVuZXItMS5odHRwLnRpbWVvdXQtc2Vjb25kcz0xMCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCQkJCQkJIHZhbHVlPSJjb25maWdzLmNvbmZpZy5zZXJ2ZXItY29uZmlnLm5ldHdvcmstY29uZmlnLnByb3RvY29scy5wcm90b2NvbC5odHRwLWxpc3RlbmVyLTEuaHR0cC50aW1lb3V0LXNlY29uZHM9Ii8+CisgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImNvbmZpZ3MuY29uZmlnLnNlcnZlci1jb25maWcubmV0d29yay1jb25maWcucHJvdG9jb2xzLnByb3RvY29sLmh0dHAtbGlzdGVuZXItMS5odHRwLnRpbWVvdXQtc2Vjb25kcz0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCkBAIC02MSw3ICs2MSw3IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIva2VlcEFsaXZlVGltZW91dFNTTC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2tlZXBBbGl2ZVRpbWVvdXRTU0wvYnVpbGQucHJvcGVydGllcwppbmRleCA1YjAxYTcxLi42YzQxNDFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIva2VlcEFsaXZlVGltZW91dFNTTC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9rZWVwQWxpdmVUaW1lb3V0U1NML2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0ta2VlcEFsaXZlVGltZW91dEluU2Vjb25kc1plcm9TU0wiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9rZWVwQWxpdmVUaW1lb3V0U1NML2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9rZWVwQWxpdmVUaW1lb3V0U1NML2J1aWxkLnhtbAppbmRleCA0ZTE1YzUwLi43NzFmZjBlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIva2VlcEFsaXZlVGltZW91dFNTTC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2tlZXBBbGl2ZVRpbWVvdXRTU0wvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKLQkJCQkJCSB2YWx1ZT0iY29uZmlncy5jb25maWcuc2VydmVyLWNvbmZpZy5uZXR3b3JrLWNvbmZpZy5wcm90b2NvbHMucHJvdG9jb2wuaHR0cC1saXN0ZW5lci0yLmh0dHAudGltZW91dC1zZWNvbmRzPTEwIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImNvbmZpZ3MuY29uZmlnLnNlcnZlci1jb25maWcubmV0d29yay1jb25maWcucHJvdG9jb2xzLnByb3RvY29sLmh0dHAtbGlzdGVuZXItMi5odHRwLnRpbWVvdXQtc2Vjb25kcz0xMCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JCQkJCQkgdmFsdWU9ImNvbmZpZ3MuY29uZmlnLnNlcnZlci1jb25maWcubmV0d29yay1jb25maWcucHJvdG9jb2xzLnByb3RvY29sLmh0dHAtbGlzdGVuZXItMi5odHRwLnRpbWVvdXQtc2Vjb25kcz0iLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iY29uZmlncy5jb25maWcuc2VydmVyLWNvbmZpZy5uZXR3b3JrLWNvbmZpZy5wcm90b2NvbHMucHJvdG9jb2wuaHR0cC1saXN0ZW5lci0yLmh0dHAudGltZW91dC1zZWNvbmRzPSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sYXJnZUNvb2tpZUVycm9yL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sYXJnZUNvb2tpZUVycm9yL1dlYlRlc3QuamF2YQppbmRleCBhMmU4ZTU2Li5hMzJkZTRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGFyZ2VDb29raWVFcnJvci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xhcmdlQ29va2llRXJyb3IvV2ViVGVzdC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIENSIDY0NTY1NTMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01Miw4ICs1Miw4IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAKLSAgICAgICAgdHJ5IHsgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZVdpdGhMYXJnZUNvb2tpZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGFyZ2VDb29raWVFcnJvci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xhcmdlQ29va2llRXJyb3IvYnVpbGQucHJvcGVydGllcwppbmRleCA3YWM2MDAxLi42ZWU2YWE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGFyZ2VDb29raWVFcnJvci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sYXJnZUNvb2tpZUVycm9yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbGFyZ2UtY29va2llLWVycm9yIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGFyZ2VDb29raWVFcnJvci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGFyZ2VDb29raWVFcnJvci9idWlsZC54bWwKaW5kZXggMjRkNTM3MC4uYWI2Y2YwNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xhcmdlQ29va2llRXJyb3IvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sYXJnZUNvb2tpZUVycm9yL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICAgIDxkZWxldGUgZmlsZT0iV2ViVGVzdC5jbGFzcyIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQzLDIzICs0MywyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcxLDEwICs3MSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckRpc2FibGVkL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckRpc2FibGVkL1dlYlRlc3QuamF2YQppbmRleCAyYTZjODJkLi40YTczMGU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJEaXNhYmxlZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRGlzYWJsZWQvV2ViVGVzdC5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKQEAgLTQxLDEyICs0MSwxMiBAQAogICAgICAgICBTdHJpbmcgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkVuc3VyZSBkaXNhYmxlZCBIVFRQIGxpc3RlbmVyIGdpdmVzIENvbm5lY3RFeGNlcHRpb24iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIi9TZXJ2bGV0VGVzdCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludm9raW5nIHVybDogIiArIHVybC50b1N0cmluZygpKTsKIAotICAgICAgICB0cnkgeyAgICAgICAgICAgIAorICAgICAgICB0cnkgewogICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgICAgICBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFeHBlY3RlZCBqYXZhLm5ldC5Db25uZWN0RXhjZXB0aW9uOiAiCkBAIC01Niw2ICs1Niw2IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJEaXNhYmxlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRGlzYWJsZWQvYnVpbGQucHJvcGVydGllcwppbmRleCA4N2RlOWY0Li44MGQwZDFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJEaXNhYmxlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckRpc2FibGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbGlzdGVuZXJEaXNhYmxlZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRGlzYWJsZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRGlzYWJsZWQvYnVpbGQueG1sCmluZGV4IGU0ODZlNGQuLmZkNDRiNjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckRpc2FibGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJEaXNhYmxlZC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE4ICs0NCwxOCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImNyZWF0ZS1odHRwLWxpc3RlbmVyIiAvPgpAQCAtNzksNyArNzksNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC05MSwxMCArOTEsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJEaXNhYmxlZC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJEaXNhYmxlZC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMGNmZTgxMi4uODFiMTQ1NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRGlzYWJsZWQvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckRpc2FibGVkL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjMsNyArMjMsNyBAQAogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgogCi0gICAgPGxpc3RlbmVyPiAgICAgCisgICAgPGxpc3RlbmVyPgogICAgICAgICA8bGlzdGVuZXItY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvbGlzdGVuZXItY2xhc3M+CiAgICAgPC9saXN0ZW5lcj4KIApAQCAtMzEsNyArMzEsNyBAQAogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckRpc2FibGVkL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckRpc2FibGVkL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCA4NjBiY2M0Li5lN2E3YzA5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJEaXNhYmxlZC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRGlzYWJsZWQvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCBpbXBsZW1lbnRzIEh0dHBTZXNzaW9uTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwogICAgIH0KIApAQCAtNTIsNyArNTIsNyBAQAogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25DcmVhdGVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25DcmVhdGVkXSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25EZXN0cm95ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkRlc3Ryb3llZF0iKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJGaWx0ZXJTZXJ2bGV0SW5pdC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJGaWx0ZXJTZXJ2bGV0SW5pdC9XZWJUZXN0LmphdmEKaW5kZXggMDNjOWIwMy4uNzA3NWM2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRmlsdGVyU2VydmxldEluaXQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckZpbHRlclNlcnZsZXRJbml0L1dlYlRlc3QuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdAogewotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTQ0LDE0ICs0NCwxNCBAQAogCiAgICAgICAgIC8vIFRoZSBzdGF0IHJlcG9ydGVyIHdyaXRlcyBvdXQgdGhlIHRlc3QgaW5mbyBhbmQgcmVzdWx0cwogICAgICAgICAvLyBpbnRvIHRoZSB0b3AtbGV2ZWwgcXVpY2tsb29rIGRpcmVjdG9yeSBkdXJpbmcgYSBydW4uCi0gICAgICAKKwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElUIDEzNTU1Iik7CiAKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcih3ZWJUZXN0LnBvcnRTKS5pbnRWYWx1ZSgpOwogICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHdlYlRlc3QuZ29HZXQod2ViVGVzdC5ob3N0LCBwb3J0LAogICAgICAgICAgICAgICAgIHdlYlRlc3QuY29udGV4dFJvb3QgKyAiL3Rlc3QiICk7CkBAIC04MSw3ICs4MSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKSk7CiAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjBcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG51bGw7CiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKQEAgLTEyMiw1ICsxMjIsNSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FICsgIiBGQUlMRUQiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJGaWx0ZXJTZXJ2bGV0SW5pdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRmlsdGVyU2VydmxldEluaXQvYnVpbGQucHJvcGVydGllcwppbmRleCAwYzM0OTNjLi5iODk1N2ZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJGaWx0ZXJTZXJ2bGV0SW5pdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckZpbHRlclNlcnZsZXRJbml0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1saXN0ZW5lckZpbHRlclNlcnZsZXRJbml0Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1saXN0ZW5lckZpbHRlclNlcnZsZXRJbml0Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRmlsdGVyU2VydmxldEluaXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRmlsdGVyU2VydmxldEluaXQvYnVpbGQueG1sCmluZGV4IDEwYzY2N2QuLmFiNmNmMDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckZpbHRlclNlcnZsZXRJbml0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJGaWx0ZXJTZXJ2bGV0SW5pdC9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IldlYlRlc3QuY2xhc3MiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MywyMyArNDMsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MSwxMCArNzEsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJGaWx0ZXJTZXJ2bGV0SW5pdC9zZXJ2bGV0L3Rlc3QvRmlsdGVyVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRmlsdGVyU2VydmxldEluaXQvc2VydmxldC90ZXN0L0ZpbHRlclRlc3QuamF2YQppbmRleCBjMDA0MTYyLi4xNDIxMGM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJGaWx0ZXJTZXJ2bGV0SW5pdC9zZXJ2bGV0L3Rlc3QvRmlsdGVyVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckZpbHRlclNlcnZsZXRJbml0L3NlcnZsZXQvdGVzdC9GaWx0ZXJUZXN0LmphdmEKQEAgLTMwLDE0ICszMCwxNCBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuaW5pdF0iKTsKICAgICAgICAgUmVjb3JkLmFkZERhdGEoIkZpIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBGaWx0ZXJDaGFpbiBmaWx0ZXJDaGFpbikgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmRvRmlsdGVyXSIpOwogICAgICAgICBmaWx0ZXJDaGFpbi5kb0ZpbHRlcihyZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgICAgIAotICAgIH0gICAgCi0gICAgCisKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuZGVzdHJveV0iKTsKLSAgICB9ICAgIAorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckZpbHRlclNlcnZsZXRJbml0L3NlcnZsZXQvdGVzdC9MaXN0ZW5lclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckZpbHRlclNlcnZsZXRJbml0L3NlcnZsZXQvdGVzdC9MaXN0ZW5lclRlc3QuamF2YQppbmRleCA4MWI1ODhjLi4wNTE1YTBmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJGaWx0ZXJTZXJ2bGV0SW5pdC9zZXJ2bGV0L3Rlc3QvTGlzdGVuZXJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRmlsdGVyU2VydmxldEluaXQvc2VydmxldC90ZXN0L0xpc3RlbmVyVGVzdC5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgY29udGV4dEluaXRpYWxpemVkKFNlcnZsZXRDb250ZXh0RXZlbnQgc2NlKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW0xpc3RlbmVyLmNvbnRleHRJbml0aWFsaXplZF0iKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltMaXN0ZW5lci5jb250ZXh0SW5pdGlhbGl6ZWRdIik7CiAgICAgICAgIFJlY29yZC5hZGREYXRhKCJMaSIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRmlsdGVyU2VydmxldEluaXQvc2VydmxldC90ZXN0L1JlY29yZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRmlsdGVyU2VydmxldEluaXQvc2VydmxldC90ZXN0L1JlY29yZC5qYXZhCmluZGV4IDliOTJhMWMuLmI0ODg3NWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckZpbHRlclNlcnZsZXRJbml0L3NlcnZsZXQvdGVzdC9SZWNvcmQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJGaWx0ZXJTZXJ2bGV0SW5pdC9zZXJ2bGV0L3Rlc3QvUmVjb3JkLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGNsYXNzIFJlY29yZCB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGF0YSA9ICIiOwotICAgIAorCiAgICAgc3RhdGljIHZvaWQgYWRkRGF0YShTdHJpbmcgYSkgewogICAgICAgICBkYXRhICs9IGE7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRmlsdGVyU2VydmxldEluaXQvc2VydmxldC90ZXN0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJGaWx0ZXJTZXJ2bGV0SW5pdC9zZXJ2bGV0L3Rlc3QvU2VydmxldFRlc3QuamF2YQppbmRleCA5MWJhNmJjLi4wMTQ4MDhjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJGaWx0ZXJTZXJ2bGV0SW5pdC9zZXJ2bGV0L3Rlc3QvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJGaWx0ZXJTZXJ2bGV0SW5pdC9zZXJ2bGV0L3Rlc3QvU2VydmxldFRlc3QuamF2YQpAQCAtMjYsMTAgKzI2LDEwIEBACiAgICAgcHVibGljIFNlcnZsZXRUZXN0KCkgewogICAgICAgICBSZWNvcmQuYWRkRGF0YSgiUyIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOwogICAgICAgICBSZWNvcmQuYWRkRGF0YSgiU2kiKTsKICAgICB9CiAKQEAgLTM4LDkgKzM4LDkgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogICAgICAgICBvdXQucHJpbnRsbihSZWNvcmQuZ2V0RGF0YSgpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2FkQmFsYW5jZU1vZEpLL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2FkQmFsYW5jZU1vZEpLL1dlYlRlc3QuamF2YQppbmRleCBmYTk3ODNkLi41NjYxZWY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9hZEJhbGFuY2VNb2RKSy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvYWRCYWxhbmNlTW9kSksvV2ViVGVzdC5qYXZhCkBAIC0yMSwxMyArMjEsMTMgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogICAgIHByaXZhdGUgc3RhdGljIFVSTENvbm5lY3Rpb24gY29ubiA9IG51bGw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMIHVybDsKICAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RPdXRwdXRTdHJlYW0gb2JqZWN0V3JpdGVyID0gbnVsbDsKLSAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOyAgCisgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgaG9zdDsKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29udGV4dFJvb3Q7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHBvcnQ7CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiB1cmxDb25uZWN0aW9uID0gKEh0dHBVUkxDb25uZWN0aW9uKWNvbm47CiAgICAgICAgICAgICAgICB1cmxDb25uZWN0aW9uLnNldERvT3V0cHV0KHRydWUpOwogICAgICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZT0gIHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDIwMCIpOyAKKyAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogMjAwIik7CiAgICAgICAgICAgICAgICBpZiAodXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKSAhPSAyMDApewogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9hZC1iYWxhbmNlci1tb2QtamsiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2FkQmFsYW5jZU1vZEpLL1dlYlRlc3QyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9hZEJhbGFuY2VNb2RKSy9XZWJUZXN0Mi5qYXZhCmluZGV4IGVhZGM2ODYuLmVlNTQ4YjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2FkQmFsYW5jZU1vZEpLL1dlYlRlc3QyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvYWRCYWxhbmNlTW9kSksvV2ViVGVzdDIuamF2YQpAQCAtMjEsMTMgKzIxLDEzIEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdDIgewotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICBwcml2YXRlIHN0YXRpYyBVUkwgdXJsOwogICAgIHByaXZhdGUgc3RhdGljIE9iamVjdE91dHB1dFN0cmVhbSBvYmplY3RXcml0ZXIgPSBudWxsOwotICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7ICAKKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBob3N0OwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBjb250ZXh0Um9vdDsKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcG9ydDsKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIHVybENvbm5lY3Rpb24gPSAoSHR0cFVSTENvbm5lY3Rpb24pY29ubjsKICAgICAgICAgICAgICAgIHVybENvbm5lY3Rpb24uc2V0RG9PdXRwdXQodHJ1ZSk7CiAgICAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlPSAgdXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogMjAwIik7IAorICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBjb2RlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiAyMDAiKTsKICAgICAgICAgICAgICAgIGlmICh1cmxDb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpICE9IDIwMCl7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2FkLWJhbGFuY2VyLW1vZC1qayIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvYWRCYWxhbmNlTW9kSksvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2FkQmFsYW5jZU1vZEpLL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGZmYWIwMS4uYTM0NDgxYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvYWRCYWxhbmNlTW9kSksvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9hZEJhbGFuY2VNb2RKSy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWxvYWQtYmFsYW5jZS1tb2QtamsiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2FkQ2xhc3Nlc0Zyb21aaXBGaWxlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2FkQ2xhc3Nlc0Zyb21aaXBGaWxlL1dlYlRlc3QuamF2YQppbmRleCBmMmYyZTQxLi40YzkzNmUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9hZENsYXNzZXNGcm9tWmlwRmlsZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvYWRDbGFzc2VzRnJvbVppcEZpbGUvV2ViVGVzdC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDQ2NTc5NzkiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTU4LDcgKzU4LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvVGVzdFNlcnZsZXQiOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKQpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICAgICAgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7CiAgICAgICAgICAgICBpZiAoIUVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2FkQ2xhc3Nlc0Zyb21aaXBGaWxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9hZENsYXNzZXNGcm9tWmlwRmlsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDNmMGQwMmYuLmIwZWUyYWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2FkQ2xhc3Nlc0Zyb21aaXBGaWxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvYWRDbGFzc2VzRnJvbVppcEZpbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1sb2FkLWNsYXNzZXMtZnJvbS16aXAtZmlsZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvYWRDbGFzc2VzRnJvbVppcEZpbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvYWRDbGFzc2VzRnJvbVppcEZpbGUvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2FkQ2xhc3Nlc0Zyb21aaXBGaWxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9hZENsYXNzZXNGcm9tWmlwRmlsZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9jYWxlRW5jb2RpbmdNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9jYWxlRW5jb2RpbmdNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTM3NTAzYS4uZTgyM2FiYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvY2FsZUVuY29kaW5nTWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2NhbGVFbmNvZGluZ01hcHBpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWxvY2FsZS1lbmNvZGluZy1tYXBwaW5nIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1sb2NhbGUtZW5jb2RpbmctbWFwcGluZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2NhbGVFbmNvZGluZ01hcHBpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvY2FsZUVuY29kaW5nTWFwcGluZy9idWlsZC54bWwKaW5kZXggOGVlZDY2MS4uYzdhMDg0ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvY2FsZUVuY29kaW5nTWFwcGluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvY2FsZUVuY29kaW5nTWFwcGluZy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE2ICs0MiwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01OSw3ICs1OSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgICA8amF2YWMKICAgICAgICAgICAgIHNyY2Rpcj0iLiIKQEAgLTc3LDEwICs3NywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2NhbGVFbmNvZGluZ01hcHBpbmcvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvY2FsZUVuY29kaW5nTWFwcGluZy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNmY2MzY3My4uMGM2NmRhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvY2FsZUVuY29kaW5nTWFwcGluZy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvY2FsZUVuY29kaW5nTWFwcGluZy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDEyICsyMiwxMiBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz5zZXJ2bGV0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9jYWxlRW5jb2RpbmdNYXBwaW5nL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2NhbGVFbmNvZGluZ01hcHBpbmcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IGEzOWI1MjUuLjU3ZDg3OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2NhbGVFbmNvZGluZ01hcHBpbmcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2NhbGVFbmNvZGluZ01hcHBpbmcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICByZXNwb25zZS5zZXRMb2NhbGUoTG9jYWxlLkpBUEFOKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9nNGpMb2NhbGx5QnVuZGxlZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9nNGpMb2NhbGx5QnVuZGxlZC9XZWJUZXN0LmphdmEKaW5kZXggMTM1YTljMy4uZjY4YzMxMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvZzRqTG9jYWxseUJ1bmRsZWQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2c0akxvY2FsbHlCdW5kbGVkL1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGxvY2FsbHkgYnVuZGxlZCBsb2c0aiIpOwpAQCAtNTQsMTEgKzU0LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTc3LDEwICs3NywxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9nNGpMb2NhbGx5QnVuZGxlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvZzRqTG9jYWxseUJ1bmRsZWQvYnVpbGQucHJvcGVydGllcwppbmRleCBhNTdlMDIyLi5jMDZjZTRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9nNGpMb2NhbGx5QnVuZGxlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2c0akxvY2FsbHlCdW5kbGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbG9nNGotbG9jYWxseS1idW5kbGVkIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9nNGpMb2NhbGx5QnVuZGxlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9nNGpMb2NhbGx5QnVuZGxlZC9idWlsZC54bWwKaW5kZXggNTU0YzY1MS4uNDZlY2RkYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvZzRqTG9jYWxseUJ1bmRsZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2c0akxvY2FsbHlCdW5kbGVkL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTcgKzQ0LDE3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9nNGpYbWxJbkVhckZpbGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvZzRqWG1sSW5FYXJGaWxlL1dlYlRlc3QuamF2YQppbmRleCAwMGZiOTExLi5kZDkxNDU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9nNGpYbWxJbkVhckZpbGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2c0alhtbEluRWFyRmlsZS9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgaG9zdCA9IGFyZ3NbMF07CiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGxvZzRqIHBhY2thZ2VkIGluIEVBUiBmaWxlIik7CkBAIC01MywxMSArNTMsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyAiL215d2FyL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKIApAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2c0alhtbEluRWFyRmlsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvZzRqWG1sSW5FYXJGaWxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODYwNjkyYS4uYjQ2ZDZkMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvZzRqWG1sSW5FYXJGaWxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvZzRqWG1sSW5FYXJGaWxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbG9nNGoteG1sLWluLWVhci1maWxlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9nNGpYbWxJbkVhckZpbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvZzRqWG1sSW5FYXJGaWxlL2J1aWxkLnhtbAppbmRleCA4MTdjMTdiLi4xMDdiZjViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9nNGpYbWxJbkVhckZpbGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2c0alhtbEluRWFyRmlsZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke215d2FyLndhcn0iLz4KQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9IiBpbmNsdWRlcz0iKi53YXIiLz4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9ImxpYi8qLmphciwgbGliLyoueG1sIi8+CiAgICAgICAgIDwvZWFyPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KQEAgLTYxLDggKzYxLDggQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgICAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21hbGZvcm1lZFF1ZXJ5U3RyaW5nL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYWxmb3JtZWRRdWVyeVN0cmluZy9XZWJUZXN0LmphdmEKaW5kZXggNTY5OGJhOS4uNjZhZjEzMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21hbGZvcm1lZFF1ZXJ5U3RyaW5nL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWFsZm9ybWVkUXVlcnlTdHJpbmcvV2ViVGVzdC5qYXZhCkBAIC0yMSwxMCArMjEsMTAgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMTsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC00MCwxMyArNDAsMTMgQEAKIAogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwogICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsIGNvbnRleHRSb290ICsgIi9TZXJ2bGV0VGVzdCIgKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoY291bnQgIT0gRVhQRUNURURfQ09VTlQpewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtYWxmb3JtZWRRdWVyeVN0cmluZyIsIHN0YXQuRkFJTCk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibWFsZm9ybWVkUXVlcnlTdHJpbmciLCBzdGF0LkZBSUwpOwpAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2ViL21hbGZvcm1lZFF1ZXJ5U3RyaW5nLS0tPiBleHBlY3QgMSBQQVNTIik7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBnb0dldChTdHJpbmcgaG9zdCwgCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBnb0dldChTdHJpbmcgaG9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0LCBTdHJpbmcgY29udGV4dFBhdGgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTb2NrZXQgcyA9IG5ldyBTb2NrZXQoaG9zdCwgcG9ydCk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHMuZ2V0T3V0cHV0U3RyZWFtKCk7CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKSk7CiAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjBcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHMuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CkBAIC03NSwxOSArNzUsMTkgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZU51bSArICI6ICAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdGF0dXMgPSBsaW5lLnN1YnN0cmluZyhpbmRleCsyKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5lcXVhbHNJZ25vcmVDYXNlKCJQQVNTIikpewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1tYWxmb3JtZWRRdWVyeVN0cmluZyIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLW1hbGZvcm1lZFF1ZXJ5U3RyaW5nIiwgc3RhdC5GQUlMKTsgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGxpbmVOdW0rKzsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgfQogICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21hbGZvcm1lZFF1ZXJ5U3RyaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWFsZm9ybWVkUXVlcnlTdHJpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCA5OWMyZjdmLi45M2EzZTM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWFsZm9ybWVkUXVlcnlTdHJpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWFsZm9ybWVkUXVlcnlTdHJpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW1hbGZvcm1lZFF1ZXJ5U3RyaW5nIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1tYWxmb3JtZWRRdWVyeVN0cmluZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItbWFsZm9ybWVkUXVlcnlTdHJpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYWxmb3JtZWRRdWVyeVN0cmluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWFsZm9ybWVkUXVlcnlTdHJpbmcvYnVpbGQueG1sCmluZGV4IDg3ZGJkNGMuLjVhMWYwYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYWxmb3JtZWRRdWVyeVN0cmluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21hbGZvcm1lZFF1ZXJ5U3RyaW5nL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01MywxMCArNTMsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYWxmb3JtZWRRdWVyeVN0cmluZy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWFsZm9ybWVkUXVlcnlTdHJpbmcvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGM3OTAyODQuLjg4YzZjMDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYWxmb3JtZWRRdWVyeVN0cmluZy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21hbGZvcm1lZFF1ZXJ5U3RyaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMTggKzIyLDE4IEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0MjwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mjwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0Mjwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QyPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3QyPC91cmwtcGF0dGVybj4KICAgICA8L3NlcnZsZXQtbWFwcGluZz4KLSAgICAKKwogICAgIDxzZXNzaW9uLWNvbmZpZz4KICAgICAgICAgPHNlc3Npb24tdGltZW91dD4xMDwvc2Vzc2lvbi10aW1lb3V0PgogICAgIDwvc2Vzc2lvbi1jb25maWc+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWFsZm9ybWVkUXVlcnlTdHJpbmcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21hbGZvcm1lZFF1ZXJ5U3RyaW5nL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCBhZDk5ZjNjLi4xMzFjMmRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWFsZm9ybWVkUXVlcnlTdHJpbmcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYWxmb3JtZWRRdWVyeVN0cmluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CkBAIC0zNCwxOCArMzQsMTggQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAJCisKICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmQgPSBjb250ZXh0LmdldFJlcXVlc3REaXNwYXRjaGVyKCIvU2VydmxldFRlc3QyP1F1ZWJlYztsaWJyZSIpOwogICAgICAgICBpZiAoIHJkID09IG51bGwgKXsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOjpGQUlMIik7CiAgICAgICAgICAgICBvdXQuZmx1c2goKTsKLSAgICAgICAgfSBlbHNlIHsgICAgCi0gICAgICAgICAgICByZC5mb3J3YXJkKHJlcXVlc3QsIHJlc3BvbnNlKTsgICAgICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZC5mb3J3YXJkKHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYWxmb3JtZWRRdWVyeVN0cmluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21hbGZvcm1lZFF1ZXJ5U3RyaW5nL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEKaW5kZXggODNmZGJlZi4uMjIzZTE5ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21hbGZvcm1lZFF1ZXJ5U3RyaW5nL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21hbGZvcm1lZFF1ZXJ5U3RyaW5nL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEKQEAgLTI0LDEwICsyNCwxMCBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0MiBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0Mi5pbml0XSIpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQyLmluaXRdIik7CiAgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICB9CiAKQEAgLTM2LDEyICszNiwxMiBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDIuZG9Qb3N0XSIpOwogCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIG91dC5wcmludGxuKCJURVNUOjpQQVNTIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21heEtlZXBBbGl2ZVJlcXVlc3RzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYXhLZWVwQWxpdmVSZXF1ZXN0cy9XZWJUZXN0LmphdmEKaW5kZXggZjZjZjc2My4uMGQ2OWNiOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21heEtlZXBBbGl2ZVJlcXVlc3RzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWF4S2VlcEFsaXZlUmVxdWVzdHMvV2ViVGVzdC5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKFRFU1RfTkFNRSk7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDQsOCArNDQsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZC4iKTsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIHNvY2suc2V0U29UaW1lb3V0KDUwMDApOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwpAQCAtNjQsOCArNjQsOCBAQAogICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJIb3N0OiBsb2NhbGhvc3RcbiIuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0Jb3MuZmx1c2goKTsKLSAgICAgICAgCisgICAgb3MuZmx1c2goKTsKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIkhvc3Q6IGxvY2FsaG9zdFxuIi5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLQlvcy5mbHVzaCgpOworICAgIG9zLmZsdXNoKCk7CiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIHdoaWxlICgobGluZSA9IGJpcy5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICB9CkBAIC0xMDIsNyArMTAyLDcgQEAKIAogICAgICAgICAgICAgdHJ5ewogICAgICAgICAgICAgICAgIHdoaWxlICgobGluZSA9IGJpcy5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0JICAgICAgICAgICAgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxpbmU6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Y2F0Y2ggKFNvY2tldFRpbWVvdXRFeGNlcHRpb24gdCl7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWF4S2VlcEFsaXZlUmVxdWVzdHMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYXhLZWVwQWxpdmVSZXF1ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGU2ODFjOTIuLjkwYmEwYzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYXhLZWVwQWxpdmVSZXF1ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYXhLZWVwQWxpdmVSZXF1ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW1heEtlZXBBbGl2ZVJlcXVlc3RzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWF4S2VlcEFsaXZlUmVxdWVzdHMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21heEtlZXBBbGl2ZVJlcXVlc3RzL2J1aWxkLnhtbAppbmRleCA5YTA4NzM4Li4yY2RjODZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWF4S2VlcEFsaXZlUmVxdWVzdHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYXhLZWVwQWxpdmVSZXF1ZXN0cy9idWlsZC54bWwKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9taW1lTWFwcGluZ0Nhc2VJbnNlbnNpdGl2ZU1hdGNoL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9taW1lTWFwcGluZ0Nhc2VJbnNlbnNpdGl2ZU1hdGNoL1dlYlRlc3QuamF2YQppbmRleCAxZmYzOWQ2Li5hZjY4M2U4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWltZU1hcHBpbmdDYXNlSW5zZW5zaXRpdmVNYXRjaC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21pbWVNYXBwaW5nQ2FzZUluc2Vuc2l0aXZlTWF0Y2gvV2ViVGVzdC5qYXZhCkBAIC00MCwyNCArNDAsMjQgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDE2MDciKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAgICAgICAgIHdlYlRlc3QuZG9UZXN0KCk7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCi0gICAgICAgIHRyeSB7IAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL2Zvby5IVE1MIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEVYUEVDVEVEX0NPTlRFTlRfVFlQRQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIGNvbnRlbnRUeXBlKTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21pbWVNYXBwaW5nQ2FzZUluc2Vuc2l0aXZlTWF0Y2gvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9taW1lTWFwcGluZ0Nhc2VJbnNlbnNpdGl2ZU1hdGNoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODI1M2QwYy4uYzJhMjJlOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21pbWVNYXBwaW5nQ2FzZUluc2Vuc2l0aXZlTWF0Y2gvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWltZU1hcHBpbmdDYXNlSW5zZW5zaXRpdmVNYXRjaC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW1pbWUtbWFwcGluZy1jYXNlLWluc2Vuc2l0aXZlLW1hdGNoIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWltZU1hcHBpbmdDYXNlSW5zZW5zaXRpdmVNYXRjaC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWltZU1hcHBpbmdDYXNlSW5zZW5zaXRpdmVNYXRjaC9idWlsZC54bWwKaW5kZXggNDhlM2JmMC4uMjI3Y2ZmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21pbWVNYXBwaW5nQ2FzZUluc2Vuc2l0aXZlTWF0Y2gvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9taW1lTWFwcGluZ0Nhc2VJbnNlbnNpdGl2ZU1hdGNoL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjEgKzQyLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC02OCwxMCArNjgsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWltZU1hcHBpbmdJbmhlcml0ZWRGcm9tRGVmYXVsdFdlYlhtbC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWltZU1hcHBpbmdJbmhlcml0ZWRGcm9tRGVmYXVsdFdlYlhtbC9XZWJUZXN0LmphdmEKaW5kZXggZmU4MDNiMC4uODE1N2FlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21pbWVNYXBwaW5nSW5oZXJpdGVkRnJvbURlZmF1bHRXZWJYbWwvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9taW1lTWFwcGluZ0luaGVyaXRlZEZyb21EZWZhdWx0V2ViWG1sL1dlYlRlc3QuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiSW5oZXJpdCBNSU1FIG1hcHBpbmcgZnJvbSBkZWZhdWx0LXdlYi54bWwiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01Miw4ICs1Miw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkLiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21pbWVNYXBwaW5nSW5oZXJpdGVkRnJvbURlZmF1bHRXZWJYbWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9taW1lTWFwcGluZ0luaGVyaXRlZEZyb21EZWZhdWx0V2ViWG1sL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzYwYTUxZC4uZGZhY2JkZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21pbWVNYXBwaW5nSW5oZXJpdGVkRnJvbURlZmF1bHRXZWJYbWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWltZU1hcHBpbmdJbmhlcml0ZWRGcm9tRGVmYXVsdFdlYlhtbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbWltZS1tYXBwaW5nLWluaGVyaXRlZC1mcm9tLWRlZmF1bHQtd2ViLXhtbCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbWltZS1tYXBwaW5nLWluaGVyaXRlZC1mcm9tLWRlZmF1bHQtd2ViLXhtbCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9taW1lTWFwcGluZ0luaGVyaXRlZEZyb21EZWZhdWx0V2ViWG1sL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9taW1lTWFwcGluZ0luaGVyaXRlZEZyb21EZWZhdWx0V2ViWG1sL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWltZU1hcHBpbmdJbmhlcml0ZWRGcm9tRGVmYXVsdFdlYlhtbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21pbWVNYXBwaW5nSW5oZXJpdGVkRnJvbURlZmF1bHRXZWJYbWwvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JIdHRwU2VydmljZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbW9uaXRvckh0dHBTZXJ2aWNlL1dlYlRlc3QuamF2YQppbmRleCA2OTVjMDA2Li5kYTczNzQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbW9uaXRvckh0dHBTZXJ2aWNlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbW9uaXRvckh0dHBTZXJ2aWNlL1dlYlRlc3QuamF2YQpAQCAtNjMsMTIgKzYzLDEyIEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzZdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbN107CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGlzc3VlIDk1NDkiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAgICAgICAgIHdlYlRlc3QuZG9UZXN0KCk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewpAQCAtODEsNyArODEsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlcnJvcmNvdW50ID0gIiArIGVycm9yY291bnQpOwogCiAgICAgICAgICAgICBpbnZva2VVUkwoImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdCArICIvc3RhdHVzY29kZT9jb2RlPTUwMyIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGludCBjb3VudDUwM18yID0gZ2V0Q291bnQoImNvdW50NTAzIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvdW50NTAzXzIgPSAiICsgY291bnQ1MDNfMik7CiAgICAgICAgICAgICBpbnQgY291bnQ1eHhfMiA9IGdldENvdW50KCJjb3VudDV4eCIpOwpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBTdHJpbmcgaW52b2tlVVJMKFN0cmluZyB1cmxTdHJpbmcpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKIAogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCh1cmxTdHJpbmcpOwpAQCAtMTU0LDcgKzE1NCw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0Q291bnQ6ICIrcmVzdWx0U3RyKTsKICAgICAgICAgUmVzdFJlc3BvbnNlIHJlc3BvbnNlID0gUmVzdFV0aWwuZ2V0KHVybCk7CiAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbWFwID0gcmVzcG9uc2UuZ2V0UmVzcG9uc2UoKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuICgoTG9uZykoKE1hcCkoKE1hcCkoKE1hcCkoKE1hcCltYXAuZ2V0KCJkYXRhIikpLmdldCgiZXh0cmFQcm9wZXJ0aWVzIikpLmdldCgKICAgICAgICAgICAgICAgICAiZW50aXR5IikpLmdldChtb25pdG9yUGF0aCkpLmdldCgiY291bnQiKSkuaW50VmFsdWUoKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbW9uaXRvckh0dHBTZXJ2aWNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbW9uaXRvckh0dHBTZXJ2aWNlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWJhMGU4ZC4uYTAyYzEzOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JIdHRwU2VydmljZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tb25pdG9ySHR0cFNlcnZpY2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1tb25pdG9yLWh0dHAtc2VydmljZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JIdHRwU2VydmljZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbW9uaXRvckh0dHBTZXJ2aWNlL2J1aWxkLnhtbAppbmRleCA1OWVmMWFlLi4wODFiOTU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbW9uaXRvckh0dHBTZXJ2aWNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbW9uaXRvckh0dHBTZXJ2aWNlL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICAgIDxkZWxldGUgZmlsZT0iV2ViVGVzdC5jbGFzcyIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQzLDE2ICs0MywxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXI6JHtzMWFzLmNsYXNzcGF0aH0iCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpAQCAtNjMsNyArNjMsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTcxLDcgKzcxLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke3MxYXMuY2xhc3NwYXRofTouIiBmb3JrPSJ0cnVlIj4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2FkbWluLmhvc3R9Ii8+CkBAIC04NCw3ICs4NCw3IEBACiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CkBAIC05NSw3ICs5NSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbW9uaXRvclNlcnZsZXRJbnN0YW5jZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbW9uaXRvclNlcnZsZXRJbnN0YW5jZS9XZWJUZXN0LmphdmEKaW5kZXggODU5MTFhMC4uYzlhOGRhMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JTZXJ2bGV0SW5zdGFuY2UvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tb25pdG9yU2VydmxldEluc3RhbmNlL1dlYlRlc3QuamF2YQpAQCAtNjMsMTIgKzYzLDEyIEBACiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1s2XTsKICAgICAgICAgYXBwTmFtZSA9IGFyZ3NbN107CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGlzc3VlIDk0ODEiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAgICAgICAgIHdlYlRlc3QuZG9UZXN0KCk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewpAQCAtODAsNyArODAsNyBAQAogCiAgICAgICAgICAgICBTdHJpbmcgdGVzdFJlc3VsdCA9IGludm9rZVVSTCgiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290ICsgIi90ZXN0Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVzdFJlc3VsdCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgbG9uZyBhcHBSZXFDb3VudDIgPSBnZXRWYWx1ZSgidGVzdC9yZXF1ZXN0Y291bnQiLCAicmVxdWVzdGNvdW50IiwgImNvdW50Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFwcCByZXF1ZXN0IGNvdW50OiAiICsgYXBwUmVxQ291bnQyKTsKICAgICAgICAgICAgIGxvbmcgcHJvY2Vzc1RpbWUyID0gZ2V0VmFsdWUoInRlc3QvcHJvY2Vzc2luZ3RpbWUiLCAicHJvY2Vzc2luZ3RpbWUiLCAibGFzdHNhbXBsZXRpbWUiKTsKQEAgLTk0LDcgKzk0LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXBwIGVycm9yIGNvdW50OiAiICsgYXBwRXJyb3JDb3VudDEpOwogCiAgICAgICAgICAgICBpbnZva2VVUkwoImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdCArICIvYmFkcmVxdWVzdCIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGxvbmcgYXBwRXJyb3JDb3VudDIgPSBnZXRWYWx1ZSgiYmFkcmVxdWVzdC9lcnJvcmNvdW50IiwgImVycm9yY291bnQiLCAiY291bnQiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXBwIGVycm9yIGNvdW50OiAiICsgYXBwRXJyb3JDb3VudDIpOwogCkBAIC0xMDksNyArMTA5LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIFN0cmluZyBpbnZva2VVUkwoU3RyaW5nIHVybFN0cmluZykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwogCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKHVybFN0cmluZyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbW9uaXRvclNlcnZsZXRJbnN0YW5jZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JTZXJ2bGV0SW5zdGFuY2UvYnVpbGQucHJvcGVydGllcwppbmRleCAwNmEzNTE3Li5iY2FhZjQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbW9uaXRvclNlcnZsZXRJbnN0YW5jZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tb25pdG9yU2VydmxldEluc3RhbmNlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW1vbml0b3Itc2VydmxldC1pbnN0YW5jZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JTZXJ2bGV0SW5zdGFuY2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JTZXJ2bGV0SW5zdGFuY2UvYnVpbGQueG1sCmluZGV4IDczYTJjYzguLmJmNjY5NmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tb25pdG9yU2VydmxldEluc3RhbmNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbW9uaXRvclNlcnZsZXRJbnN0YW5jZS9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IldlYlRlc3QuY2xhc3MiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MywxNiArNDMsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7czFhcy5jbGFzc3BhdGh9IgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KQEAgLTYzLDEzICs2MywxMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzLnByb3BzIiB2YWx1ZT0iJHthcy5wcm9wc30gLS1uYW1lICR7YXBwbmFtZX0td2ViIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7czFhcy5jbGFzc3BhdGh9Oi4iIGZvcms9InRydWUiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7YWRtaW4uaG9zdH0iLz4KQEAgLTgyLDcgKzgyLDcgQEAKICAgICAgICAgICA8YXJnIHZhbHVlPSIke2FwcG5hbWV9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgpAQCAtOTMsNyArOTMsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JXZWJSZXF1ZXN0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tb25pdG9yV2ViUmVxdWVzdC9XZWJUZXN0LmphdmEKaW5kZXggMjhmY2MyYi4uYjRiZjliMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JXZWJSZXF1ZXN0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbW9uaXRvcldlYlJlcXVlc3QvV2ViVGVzdC5qYXZhCkBAIC02NCwxMiArNjQsMTIgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbNl07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1s3XTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgaXNzdWUgOTMwOSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKICAgICAgICAgd2ViVGVzdC5kb1Rlc3QoKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CkBAIC04MSw3ICs4MSw3IEBACiAKICAgICAgICAgICAgIFN0cmluZyB0ZXN0UmVzdWx0ID0gaW52b2tlVVJMKCJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QgKyAiL3Rlc3QiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0UmVzdWx0KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpbnQgd2ViUmVxQ291bnQyID0gZ2V0Q291bnQoIndlYi9yZXF1ZXN0L3JlcXVlc3Rjb3VudCIsICJyZXF1ZXN0Y291bnQiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigid2ViIHJlcXVlc3QgY291bnQ6ICIgKyB3ZWJSZXFDb3VudDIpOwogICAgICAgICAgICAgaW50IGFwcFJlcUNvdW50MiA9IGdldENvdW50KCJhcHBsaWNhdGlvbnMiICsgY29udGV4dFJvb3QgKyAiLXdlYi8iICsgaW5zdGFuY2VOYW1lICsgIi9yZXF1ZXN0Y291bnQiLCAicmVxdWVzdGNvdW50Iik7CkBAIC05OCw3ICs5OCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFwcCBlcnJvciBjb3VudDogIiArIGFwcEVycm9yQ291bnQxKTsKIAogICAgICAgICAgICAgaW52b2tlVVJMKCJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QgKyAiL2JhZHJlcXVlc3QiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpbnQgd2ViRXJyb3JDb3VudDIgPSBnZXRDb3VudCgid2ViL3JlcXVlc3QvZXJyb3Jjb3VudCIsICJlcnJvcmNvdW50Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIndlYiBlcnJvciBjb3VudDogIiArIHdlYkVycm9yQ291bnQyKTsKICAgICAgICAgICAgIGludCBhcHBFcnJvckNvdW50MiA9IGdldENvdW50KCJhcHBsaWNhdGlvbnMiICsgY29udGV4dFJvb3QgKyAiLXdlYi8iICsgaW5zdGFuY2VOYW1lICsgIi9lcnJvcmNvdW50IiwgImVycm9yY291bnQiKTsKQEAgLTExNiw3ICsxMTYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgU3RyaW5nIGludm9rZVVSTChTdHJpbmcgdXJsU3RyaW5nKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CiAKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwodXJsU3RyaW5nKTsKQEAgLTE3Miw1ICsxNzIsNSBAQAogICAgICAgICByZXR1cm4gKChMb25nKSgoTWFwKSgoTWFwKSgoTWFwKSgoTWFwKW1hcC5nZXQoImRhdGEiKSkuZ2V0KCJleHRyYVByb3BlcnRpZXMiKSkuZ2V0KAogICAgICAgICAgICAgICAgICJlbnRpdHkiKSkuZ2V0KGNvdW50TmFtZSkpLmdldCgiY291bnQiKSkuaW50VmFsdWUoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tb25pdG9yV2ViUmVxdWVzdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JXZWJSZXF1ZXN0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjZiODQ2MS4uYjE1NWNjMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JXZWJSZXF1ZXN0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JXZWJSZXF1ZXN0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbW9uaXRvci13ZWItcmVxdWVzdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JXZWJSZXF1ZXN0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tb25pdG9yV2ViUmVxdWVzdC9idWlsZC54bWwKaW5kZXggN2M5NzQxYi4uZGY3NmQ1NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JXZWJSZXF1ZXN0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbW9uaXRvcldlYlJlcXVlc3QvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgICAgPGRlbGV0ZSBmaWxlPSJXZWJUZXN0LmNsYXNzIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDMsMTYgKzQzLDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke3MxYXMuY2xhc3NwYXRofSIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNzEsNyArNzEsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7czFhcy5jbGFzc3BhdGh9Oi4iIGZvcms9InRydWUiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7YWRtaW4uaG9zdH0iLz4KQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTk1LDcgKzk1LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVDb250ZXh0Um9vdC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlQ29udGV4dFJvb3QvV2ViVGVzdC5qYXZhCmluZGV4IDQzNGQ2NjkuLmVkZWQyZDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVDb250ZXh0Um9vdC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUNvbnRleHRSb290L1dlYlRlc3QuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogaW1wb3J0IGphdmEubmV0Lio7CiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCi0vKiogCisvKioKICAqIFVuaXQgdGVzdCBmb3I6CiAgKgogICogIGh0dHBzOi8vZ2xhc3NmaXNoLmRldi5qYXZhLm5ldC9pc3N1ZXMvc2hvd19idWcuY2dpP2lkPTIzMzkKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgaG9zdCA9IGFyZ3NbMF07CiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSAyMzM5Iik7CkBAIC01NSwxMSArNTUsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyAiLyIKICAgICAgICAgICAgICsgIiVFMyU4MSVBOCVFNyVCMiVBRUpvdCVFNyVCMiVBRUVudGVycHJpc2VBcHBsaWNhdGlvbjIlRTclQjIlQTQlRTMlODIlOEQtd2FyL3Rlc3QuanNwIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTc5LDEwICs3OSwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlQ29udGV4dFJvb3QvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVDb250ZXh0Um9vdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGU3ZjEzMjYuLjhlMzhjNjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVDb250ZXh0Um9vdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVDb250ZXh0Um9vdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW11bHRpLWJ5dGUtY29udGV4dC1yb290Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlQ29udGV4dFJvb3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUNvbnRleHRSb290L2J1aWxkLnhtbAppbmRleCAyM2YyYWM2Li4xOWRhM2RlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlQ29udGV4dFJvb3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVDb250ZXh0Um9vdC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIxICs0MiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItbm8tY29udGV4dC1yb290Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNjgsMTAgKzY4LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUNvbnRleHRSb290L2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVDb250ZXh0Um9vdC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZjY0NDNjZC4uNDUyNjQ0YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUNvbnRleHRSb290L2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlQ29udGV4dFJvb3QvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOCw3ICsxOCw3IEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQkgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCIKLQkgdmVyc2lvbj0iMi41Ij4KKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCIKKyAgICAgdmVyc2lvbj0iMi41Ij4KIDwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVDb250ZXh0Um9vdFdpdGhDb29raWUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUNvbnRleHRSb290V2l0aENvb2tpZS9XZWJUZXN0LmphdmEKaW5kZXggOGIzYzM3ZC4uOWJkMGEzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUNvbnRleHRSb290V2l0aENvb2tpZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUNvbnRleHRSb290V2l0aENvb2tpZS9XZWJUZXN0LmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAotLyoqIAorLyoqCiAgKiBVbml0IHRlc3QgZm9yOgogICoKICAqICBNdWx0aS1ieXRlIGNvbnRleHQgcm9vdCB3aXRoIHNlc3Npb24gY29va2llCkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIGhvc3QgPSBhcmdzWzBdOwogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBNdWx0aS1CeXRlIENvbnRleHQgUm9vdCB3aXRoIFNlc3Npb24gQ29va2llIik7CkBAIC02NywxMSArNjcsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBkb1NldEpzcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBTdHJpbmcgc2Vzc2lvbklkID0gbnVsbDsKIAogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyAiLyIKQEAgLTkyLDcgKzkyLDcgQEAKIAogICAgICAgICAgICAgc2Vzc2lvbklkID0gZ2V0Q29va2llRmllbGQoY29va2llcywgSlNFU1NJT05JRCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNlc3Npb25JZCA9ICIgKyBzZXNzaW9uSWQpOwotICAgICAgICB9IGVsc2UgeyAgIAorICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVbmV4cGVjdGVkIHJldHVybiBjb2RlOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgfQogCkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIC8vU3RyaW5nIGNvb2tpZSA9IHNlc3Npb25JZCArICI7IG15aWQ9MTIzQDQ1NiI7CiAgICAgICAgIFN0cmluZyBjb29raWUgPSAiJFZlcnNpb249MTsgIiArIHNlc3Npb25JZCArICI7IG15aWQ9XCIxMjNANDU2XCIiOwotICAgICAgICBjb25uLnNldFJlcXVlc3RQcm9wZXJ0eSgiQ29va2llIiwgY29va2llKTsgCisgICAgICAgIGNvbm4uc2V0UmVxdWVzdFByb3BlcnR5KCJDb29raWUiLCBjb29raWUpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7CiAKQEAgLTEyMSwxMCArMTIxLDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgeyAgIAorICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVbmV4cGVjdGVkIHJldHVybiBjb2RlOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlQ29udGV4dFJvb3RXaXRoQ29va2llL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlQ29udGV4dFJvb3RXaXRoQ29va2llL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzUzM2IzOC4uMjI2OTUxZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUNvbnRleHRSb290V2l0aENvb2tpZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVDb250ZXh0Um9vdFdpdGhDb29raWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1tdWx0aS1ieXRlLWNvbnRleHQtcm9vdC13aXRoLWNvb2tpZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUNvbnRleHRSb290V2l0aENvb2tpZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlQ29udGV4dFJvb3RXaXRoQ29va2llL2J1aWxkLnhtbAppbmRleCAyM2YyYWM2Li4xOWRhM2RlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlQ29udGV4dFJvb3RXaXRoQ29va2llL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlQ29udGV4dFJvb3RXaXRoQ29va2llL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjEgKzQyLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1uby1jb250ZXh0LXJvb3QiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC02OCwxMCArNjgsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlQ29udGV4dFJvb3RXaXRoQ29va2llL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVDb250ZXh0Um9vdFdpdGhDb29raWUvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGY2NDQzY2QuLjQ1MjY0NGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVDb250ZXh0Um9vdFdpdGhDb29raWUvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVDb250ZXh0Um9vdFdpdGhDb29raWUvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOCw3ICsxOCw3IEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQkgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCIKLQkgdmVyc2lvbj0iMi41Ij4KKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCIKKyAgICAgdmVyc2lvbj0iMi41Ij4KIDwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRGVmYXVsdENoYXJzZXQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1EZWZhdWx0Q2hhcnNldC9XZWJUZXN0LmphdmEKaW5kZXggMzMyYmNjNS4uMmI3NGVmYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1EZWZhdWx0Q2hhcnNldC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1EZWZhdWx0Q2hhcnNldC9XZWJUZXN0LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjMzOTYwOCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTYwLDkgKzYwLDkgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIEludGVnZXIucGFyc2VJbnQocG9ydCkpOwotICAgIAorCiAgICAgICAgIEJ1ZmZlcmVkV3JpdGVyIGJ3ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoCiAgICAgICAgICAgICBzb2NrLmdldE91dHB1dFN0cmVhbSgpLCAiU2hpZnRfSklTIikpOwogICAgICAgICBidy53cml0ZSgiR0VUICIgKyBjb250ZXh0Um9vdApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1EZWZhdWx0Q2hhcnNldC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1EZWZhdWx0Q2hhcnNldC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGEyODgwZjEuLmY4MWZjOTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRGVmYXVsdENoYXJzZXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbURlZmF1bHRDaGFyc2V0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1tdWx0aS1ieXRlLWdldC1xdWVyeS1wYXJhbS1kZWZhdWx0LWNoYXJzZXQiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW11bHRpLWJ5dGUtZ2V0LXF1ZXJ5LXBhcmFtLWRlZmF1bHQtY2hhcnNldCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1EZWZhdWx0Q2hhcnNldC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbURlZmF1bHRDaGFyc2V0L2J1aWxkLnhtbAppbmRleCBmYWY3ZjU1Li41MWExY2JhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbURlZmF1bHRDaGFyc2V0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbURlZmF1bHRDaGFyc2V0L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTUgKzQyLDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01OCw3ICs1OCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1EZWZhdWx0Q2hhcnNldC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbURlZmF1bHRDaGFyc2V0L2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAwNGJkZmM1Li5lYTBmNjIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbURlZmF1bHRDaGFyc2V0L2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbURlZmF1bHRDaGFyc2V0L2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMTIgKzIyLDEyIEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz5UZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vVGVzdFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1EZWZhdWx0Q2hhcnNldC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbURlZmF1bHRDaGFyc2V0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQppbmRleCAzZTUzZGNmLi4xNzQ4MmQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbURlZmF1bHRDaGFyc2V0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbURlZmF1bHRDaGFyc2V0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7CiAKIHB1YmxpYyBjbGFzcyBUZXN0U2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvR2V0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRm9ybUhpbnRGaWVsZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUZvcm1IaW50RmllbGQvV2ViVGVzdC5qYXZhCmluZGV4IDc0ZDJlNjkuLjRiYzg3MWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRm9ybUhpbnRGaWVsZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Gb3JtSGludEZpZWxkL1dlYlRlc3QuamF2YQpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MzM5NjA4Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNzAsOSArNzAsOSBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBzb2NrID0gbmV3IFNvY2tldChob3N0LCBJbnRlZ2VyLnBhcnNlSW50KHBvcnQpKTsKLSAgICAKKwogICAgICAgICBCdWZmZXJlZFdyaXRlciBidyA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKAogICAgICAgICAgICAgc29jay5nZXRPdXRwdXRTdHJlYW0oKSwgIlNoaWZ0X0pJUyIpKTsKICAgICAgICAgYncud3JpdGUoIkdFVCAiICsgY29udGV4dFJvb3QKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRm9ybUhpbnRGaWVsZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Gb3JtSGludEZpZWxkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggY2IyZWRkMC4uMmZkYzk5MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Gb3JtSGludEZpZWxkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Gb3JtSGludEZpZWxkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1tdWx0aS1ieXRlLWdldC1xdWVyeS1wYXJhbS1mb3JtLWhpbnQtZmllbGQiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW11bHRpLWJ5dGUtZ2V0LXF1ZXJ5LXBhcmFtLWZvcm0taGludC1maWVsZCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Gb3JtSGludEZpZWxkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRm9ybUhpbnRGaWVsZC9idWlsZC54bWwKaW5kZXggZmFmN2Y1NS4uNTFhMWNiYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Gb3JtSGludEZpZWxkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUZvcm1IaW50RmllbGQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNSArNDIsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTU4LDcgKzU4LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogCiAgICAgICAgICAgPGphdmFjCkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUZvcm1IaW50RmllbGQvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Gb3JtSGludEZpZWxkL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAwNGJkZmM1Li5lYTBmNjIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUZvcm1IaW50RmllbGQvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRm9ybUhpbnRGaWVsZC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDEyICsyMiwxMiBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1Rlc3RTZXJ2bGV0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRm9ybUhpbnRGaWVsZC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUZvcm1IaW50RmllbGQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDNlNTNkY2YuLjE3NDgyZDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRm9ybUhpbnRGaWVsZC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Gb3JtSGludEZpZWxkL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7CiAKIHB1YmxpYyBjbGFzcyBUZXN0U2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvR2V0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtTG9jYWxlQ2hhcnNldE1hcC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUxvY2FsZUNoYXJzZXRNYXAvV2ViVGVzdC5qYXZhCmluZGV4IDY1ZmJmMDcuLmJhY2ZmODAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtTG9jYWxlQ2hhcnNldE1hcC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Mb2NhbGVDaGFyc2V0TWFwL1dlYlRlc3QuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MzM5NjA4Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNjAsOSArNjAsOSBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgSW50ZWdlci5wYXJzZUludChwb3J0KSk7Ci0gICAgCisKICAgICAgICAgQnVmZmVyZWRXcml0ZXIgYncgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IE91dHB1dFN0cmVhbVdyaXRlcigKICAgICAgICAgICAgIHNvY2suZ2V0T3V0cHV0U3RyZWFtKCksICJTaGlmdF9KSVMiKSk7CiAgICAgICAgIGJ3LndyaXRlKCJHRVQgIiArIGNvbnRleHRSb290CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUxvY2FsZUNoYXJzZXRNYXAvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtTG9jYWxlQ2hhcnNldE1hcC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDIyMjhiMGYuLjI2MjZlYTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtTG9jYWxlQ2hhcnNldE1hcC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtTG9jYWxlQ2hhcnNldE1hcC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbXVsdGktYnl0ZS1nZXQtcXVlcnktcGFyYW0tbG9jYWxlLWNoYXJzZXQtbWFwIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1tdWx0aS1ieXRlLWdldC1xdWVyeS1wYXJhbS1sb2NhbGUtY2hhcnNldC1tYXAiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtTG9jYWxlQ2hhcnNldE1hcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUxvY2FsZUNoYXJzZXRNYXAvYnVpbGQueG1sCmluZGV4IGZhZjdmNTUuLjUxYTFjYmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtTG9jYWxlQ2hhcnNldE1hcC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Mb2NhbGVDaGFyc2V0TWFwL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTUgKzQyLDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01OCw3ICs1OCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Mb2NhbGVDaGFyc2V0TWFwL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtTG9jYWxlQ2hhcnNldE1hcC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMDRiZGZjNS4uZWEwZjYyMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Mb2NhbGVDaGFyc2V0TWFwL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUxvY2FsZUNoYXJzZXRNYXAvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwxMiArMjIsMTIgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9UZXN0U2VydmxldDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUxvY2FsZUNoYXJzZXRNYXAvc2VydmxldC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Mb2NhbGVDaGFyc2V0TWFwL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQppbmRleCAzZTUzZGNmLi4xNzQ4MmQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUxvY2FsZUNoYXJzZXRNYXAvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtTG9jYWxlQ2hhcnNldE1hcC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogCiBwdWJsaWMgY2xhc3MgVGVzdFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb0dldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbVNldENoYXJFbmNvZGluZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbVNldENoYXJFbmNvZGluZy9XZWJUZXN0LmphdmEKaW5kZXggYjIwNTQ5Yy4uODk3YzVmZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1TZXRDaGFyRW5jb2RpbmcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtU2V0Q2hhckVuY29kaW5nL1dlYlRlc3QuamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MzM5NjA4Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNjksOSArNjksOSBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBzb2NrID0gbmV3IFNvY2tldChob3N0LCBJbnRlZ2VyLnBhcnNlSW50KHBvcnQpKTsKLSAgICAKKwogICAgICAgICBCdWZmZXJlZFdyaXRlciBidyA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKAogICAgICAgICAgICAgc29jay5nZXRPdXRwdXRTdHJlYW0oKSwgIlNoaWZ0X0pJUyIpKTsKICAgICAgICAgYncud3JpdGUoIkdFVCAiICsgY29udGV4dFJvb3QKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtU2V0Q2hhckVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbVNldENoYXJFbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGZiM2QxMTkuLjNhZWQyNjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtU2V0Q2hhckVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1TZXRDaGFyRW5jb2RpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW11bHRpLWJ5dGUtZ2V0LXF1ZXJ5LXBhcmFtLXNldC1jaGFyLWVuY29kaW5nIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1tdWx0aS1ieXRlLWdldC1xdWVyeS1wYXJhbS1zZXQtY2hhci1lbmNvZGluZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtU2V0Q2hhckVuY29kaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtU2V0Q2hhckVuY29kaW5nL2J1aWxkLnhtbAppbmRleCBmYWY3ZjU1Li41MWExY2JhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbVNldENoYXJFbmNvZGluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1TZXRDaGFyRW5jb2RpbmcvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNSArNDIsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTU4LDcgKzU4LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogCiAgICAgICAgICAgPGphdmFjCkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbVNldENoYXJFbmNvZGluZy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbVNldENoYXJFbmNvZGluZy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMDRiZGZjNS4uZWEwZjYyMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1TZXRDaGFyRW5jb2RpbmcvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtU2V0Q2hhckVuY29kaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMTIgKzIyLDEyIEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz5UZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vVGVzdFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1TZXRDaGFyRW5jb2Rpbmcvc2VydmxldC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1TZXRDaGFyRW5jb2Rpbmcvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDA3ZGFlYmMuLjkxZGMzNTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtU2V0Q2hhckVuY29kaW5nL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbVNldENoYXJFbmNvZGluZy9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogCiBwdWJsaWMgY2xhc3MgVGVzdFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb0dldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlSHR0cFJlcXVlc3RCdWZmZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUh0dHBSZXF1ZXN0QnVmZmVyL1dlYlRlc3QuamF2YQppbmRleCBiYjI1MzlmLi44NmNmMzg5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlSHR0cFJlcXVlc3RCdWZmZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVIdHRwUmVxdWVzdEJ1ZmZlci9XZWJUZXN0LmphdmEKQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgc2l6ZSA9IEludGVnZXIucGFyc2VJbnQoYXJnc1szXSk7CiAgICAgICAgIGlzQXNjaWkgPSBCb29sZWFuLnZhbHVlT2YoYXJnc1s0XSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIE11bHRpLWJ5dGUgSHR0cCByZXF1ZXN0IGJ1ZmZlciIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVIdHRwUmVxdWVzdEJ1ZmZlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUh0dHBSZXF1ZXN0QnVmZmVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTcxNTA3OS4uY2Q0MjMzYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUh0dHBSZXF1ZXN0QnVmZmVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUh0dHBSZXF1ZXN0QnVmZmVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbXVsdGktYnl0ZS1odHRwLXJlcXVlc3QtYnVmZmVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlSHR0cFJlcXVlc3RCdWZmZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUh0dHBSZXF1ZXN0QnVmZmVyL2J1aWxkLnhtbAppbmRleCBkODk3MjViLi5lYjAyOWRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlSHR0cFJlcXVlc3RCdWZmZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVIdHRwUmVxdWVzdEJ1ZmZlci9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIyICs0NCwyMiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIiBlbmNvZGluZz0iVVRGLTgiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTczLDEwICs3MywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVQT1NURm9ybUhpbnRGaWVsZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlUE9TVEZvcm1IaW50RmllbGQvV2ViVGVzdC5qYXZhCmluZGV4IGI0ZDlhMzAuLjQ4YThkN2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVQT1NURm9ybUhpbnRGaWVsZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZVBPU1RGb3JtSGludEZpZWxkL1dlYlRlc3QuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBQT1NUIGZvcm0gZGF0YSB3aXRoIGZvcm0taGludC1maWVsZCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU4LDcgKzU4LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgLy8gUE9TVCBib2R5CiAgICAgICAgIFN0cmluZyBib2R5ID0gImphcGFuZXNlTmFtZT0iCiAgICAgICAgICAgICArIFVSTEVuY29kZXIuZW5jb2RlKCJcdTMwNjhcdTRlYmFcdTY1ODciLCAiU2hpZnRfSklTIikKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgLy8gQ3JlYXRlIGEgc29ja2V0IHRvIHRoZSBob3N0CiAgICAgICAgIFNvY2tldCBzb2NrID0gbmV3IFNvY2tldChob3N0LCBJbnRlZ2VyLnBhcnNlSW50KHBvcnQpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKLSAgICAKKwogICAgICAgICAvLyBTZW5kIGhlYWRlcgogICAgICAgICBCdWZmZXJlZFdyaXRlciB3ciA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jay5nZXRPdXRwdXRTdHJlYW0oKSkpOwpAQCAtNzUsNyArNzUsNyBAQAogICAgICAgICB3ci53cml0ZSgiQ29udGVudC1MZW5ndGg6ICIgKyBib2R5Lmxlbmd0aCgpICsgIlxyXG4iKTsKICAgICAgICAgd3Iud3JpdGUoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXHJcbiIpOwogICAgICAgICB3ci53cml0ZSgiXHJcbiIpOwotICAgIAorCiAgICAgICAgIC8vIFNlbmQgYm9keQogICAgICAgICB3ci53cml0ZShib2R5KTsKICAgICAgICAgd3IuZmx1c2goKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVQT1NURm9ybUhpbnRGaWVsZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZVBPU1RGb3JtSGludEZpZWxkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMTdjMDZlZS4uMTExMzM1OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZVBPU1RGb3JtSGludEZpZWxkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZVBPU1RGb3JtSGludEZpZWxkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1tdWx0aS1ieXRlLXBvc3QtZm9ybS1oaW50LWZpZWxkIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1tdWx0aS1ieXRlLXBvc3QtZm9ybS1oaW50LWZpZWxkIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlUE9TVEZvcm1IaW50RmllbGQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZVBPU1RGb3JtSGludEZpZWxkL2J1aWxkLnhtbAppbmRleCBmYWY3ZjU1Li41MWExY2JhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlUE9TVEZvcm1IaW50RmllbGQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVQT1NURm9ybUhpbnRGaWVsZC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE1ICs0MiwxNSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNTgsNyArNTgsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVQT1NURm9ybUhpbnRGaWVsZC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlUE9TVEZvcm1IaW50RmllbGQvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDA0YmRmYzUuLmVhMGY2MjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVQT1NURm9ybUhpbnRGaWVsZC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZVBPU1RGb3JtSGludEZpZWxkL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMTIgKzIyLDEyIEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz5UZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vVGVzdFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZVBPU1RGb3JtSGludEZpZWxkL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVQT1NURm9ybUhpbnRGaWVsZC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggMTk0YWY3NS4uYTc0MjRmNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZVBPU1RGb3JtSGludEZpZWxkL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlUE9TVEZvcm1IaW50RmllbGQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIAogcHVibGljIGNsYXNzIFRlc3RTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9Qb3N0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVByb2Nlc3NvckNvbmZpZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlQcm9jZXNzb3JDb25maWcvV2ViVGVzdC5qYXZhCmluZGV4IDg5MjAyN2UuLmEyMTQ0OGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVByb2Nlc3NvckNvbmZpZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpUHJvY2Vzc29yQ29uZmlnL1dlYlRlc3QuamF2YQpAQCAtMjQsMTAgKzI0LDEwIEBACiAqIElzc3VlIElzc3VlIDQ2NDogTXVsdGktUHJvY2Vzc29yIGNvbmZpZ3VyYXRpb24gYXJlbid0IGFwcGxpZWQKICovCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDM7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApAQCAtMzYsNyArMzYsNyBAQAogCiAgICAgICAgIC8vIFRoZSBzdGF0IHJlcG9ydGVyIHdyaXRlcyBvdXQgdGhlIHRlc3QgaW5mbyBhbmQgcmVzdWx0cwogICAgICAgICAvLyBpbnRvIHRoZSB0b3AtbGV2ZWwgcXVpY2tsb29rIGRpcmVjdG9yeSBkdXJpbmcgYSBydW4uCi0gICAgICAKKwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJtdWx0aVByb2Nlc3NvckNvbmZpZyIpOwogCiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKQEAgLTQ1LDE3ICs0NSwxNyBAQAogCiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7CiAgICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZ29HZXQoaG9zdCwgcG9ydCwgIkZJTFRFUiIsIGNvbnRleHRSb290ICsgIi9TZXJ2bGV0VGVzdCIgKTsKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibXVsdGlQcm9jZXNzb3JDb25maWciLCBzdGF0LlBBU1MpOyAKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtdWx0aVByb2Nlc3NvckNvbmZpZyIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY291bnQgIT0gRVhQRUNURURfQ09VTlQpewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm11bHRpUHJvY2Vzc29yQ29uZmlnIiwgc3RhdC5GQUlMKTsKLSAgICAgICAgfSAgICAgICAgICAgCisgICAgICAgIH0KICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYi9zdGFuZGFsb25ld2FyLS0tPiBleHBlY3QgIiArIEVYUEVDVEVEX0NPVU5UKTsKICAgICB9CiAKQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMVxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCgiSG9zdDogbG9jYWxob3N0XG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZTogIiArIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHRpbWUpKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwpAQCAtODMsMTYgKzgzLDE2IEBACiAgICAgICAgICAgICAgICAgaW5kZXggPSBsaW5lLmluZGV4T2YocmVzdWx0KTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm11bHRpUHJvY2Vzc29yQ29uZmlnIiwgc3RhdC5GQUlMKTsgCisgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm11bHRpUHJvY2Vzc29yQ29uZmlnIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCBpbmRleCA9PSAtMSApewotICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtdWx0aVByb2Nlc3NvckNvbmZpZyIsIHN0YXQuUEFTUyk7IAorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtdWx0aVByb2Nlc3NvckNvbmZpZyIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7CiAgICAgICAgIH0KICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVByb2Nlc3NvckNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpUHJvY2Vzc29yQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNmU0NzgxOC4uMDcyNTQ1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpUHJvY2Vzc29yQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpUHJvY2Vzc29yQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1tdWx0aVByb2Nlc3NvckNvbmZpZyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbXVsdGlQcm9jZXNzb3JDb25maWciLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLW11bHRpUHJvY2Vzc29yQ29uZmlnIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlQcm9jZXNzb3JDb25maWcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpUHJvY2Vzc29yQ29uZmlnL2J1aWxkLnhtbAppbmRleCBhNDJjZWZiLi5kMzEwMmFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlQcm9jZXNzb3JDb25maWcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVByb2Nlc3NvckNvbmZpZy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTcwLDE1ICs3MCwxNSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtODYsNyArODYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhYwogICAgICAgICAgICAgc3JjZGlyPSIuIgpAQCAtMTAzLDEwICsxMDMsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlQcm9jZXNzb3JDb25maWcvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpUHJvY2Vzc29yQ29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBmOTg2MWRmLi4xZjg0Y2VlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlQcm9jZXNzb3JDb25maWcvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVByb2Nlc3NvckNvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDM3ICsyMiwzNyBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPGZpbHRlcj4KICAgICAgICAgPGZpbHRlci1uYW1lPkZpbHRlclRlc3Q8L2ZpbHRlci1uYW1lPgogICAgICAgICA8ZmlsdGVyLWNsYXNzPnRlc3QuRmlsdGVyVGVzdDwvZmlsdGVyLWNsYXNzPgotICAgIDwvZmlsdGVyPiAgICAKLSAgICAgICAgCisgICAgPC9maWx0ZXI+CisKICAgICA8ZmlsdGVyLW1hcHBpbmc+CiAgICAgICAgIDxmaWx0ZXItbmFtZT5GaWx0ZXJUZXN0PC9maWx0ZXItbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KICAgICAgICAgPGRpc3BhdGNoZXI+UkVRVUVTVDwvZGlzcGF0Y2hlcj4KICAgICAgICAgPGRpc3BhdGNoZXI+SU5DTFVERTwvZGlzcGF0Y2hlcj4KLSAgICAgICAgPGRpc3BhdGNoZXI+Rk9SV0FSRDwvZGlzcGF0Y2hlcj4gIAotICAgICAgICA8ZGlzcGF0Y2hlcj5FUlJPUjwvZGlzcGF0Y2hlcj4gCisgICAgICAgIDxkaXNwYXRjaGVyPkZPUldBUkQ8L2Rpc3BhdGNoZXI+CisgICAgICAgIDxkaXNwYXRjaGVyPkVSUk9SPC9kaXNwYXRjaGVyPgogICAgIDwvZmlsdGVyLW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0MjwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mjwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0Mjwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3QzPC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QzPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3QzPC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDM8L3VybC1wYXR0ZXJuPgogICAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlc3Npb24tY29uZmlnPgogICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjEwPC9zZXNzaW9uLXRpbWVvdXQ+CiAgICAgPC9zZXNzaW9uLWNvbmZpZz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVByb2Nlc3NvckNvbmZpZy9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVByb2Nlc3NvckNvbmZpZy9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQppbmRleCBmY2YzNjI0Li5lZWM5NTdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlQcm9jZXNzb3JDb25maWcvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpUHJvY2Vzc29yQ29uZmlnL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhCkBAIC0xOSwyNSArMTksMjUgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogcHVibGljIGNsYXNzIEZpbHRlclRlc3QgaW1wbGVtZW50cyBGaWx0ZXJ7Ci0gICAgCisKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuZGVzdHJveV0iKTsKLSAgICB9ICAgIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwgRmlsdGVyQ2hhaW4gZmlsdGVyQ2hhaW4pIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLCBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW0ZpbHRlci5kb0ZpbHRlcl0iKTsKLSAgICAgICAgICAKKwogICAgICAgICAoKEh0dHBTZXJ2bGV0UmVxdWVzdClyZXF1ZXN0KS5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiUEFTUyIpOwogICAgICAgICBmaWx0ZXJDaGFpbi5kb0ZpbHRlcihyZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgICAgIAotICAgIH0gICAgCi0gICAgCi0gICAgCisKKyAgICB9CisKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoamFrYXJ0YS5zZXJ2bGV0LkZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW0ZpbHRlci5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gZmlsdGVyQ29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlQcm9jZXNzb3JDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpUHJvY2Vzc29yQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCBkNGEzMTc0Li5kYWE4MDUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlQcm9jZXNzb3JDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVByb2Nlc3NvckNvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTQ2LDEzICs0NiwxMyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgaW1wbGVtZW50cyBIdHRwU2Vzc2lvbkxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0gIiArIGNvbnRleHQuZ2V0TWFqb3JWZXJzaW9uKCkpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpAQCAtNjAsMjMgKzYwLDIzIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVItUkVRVUVTVCIsIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSIikpOwotICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7ICAgICAgICAKLSAgICAgICAgCQorICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7CisKICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmQgPSBjb250ZXh0LmdldFJlcXVlc3REaXNwYXRjaGVyKCIvU2VydmxldFRlc3QyIik7Ci0gICAgICAgIHJkLmZvcndhcmQocmVxdWVzdCwgcmVzcG9uc2UpOyAgICAgICAKKyAgICAgICAgcmQuZm9yd2FyZChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkNyZWF0ZWRdIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkRlc3Ryb3llZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uRGVzdHJveWVkXSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF0dHJpYnV0ZXM6ICIgKyBodHRwU2Vzc2lvbkV2ZW50LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoInRlc3QiKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlQcm9jZXNzb3JDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVByb2Nlc3NvckNvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCmluZGV4IGRiMmNiNTAuLjAwNzc1YTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVByb2Nlc3NvckNvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVByb2Nlc3NvckNvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCkBAIC0yNSwxMCArMjUsMTAgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdDIgZXh0ZW5kcyBIdHRwU2VydmxldCBpbXBsZW1lbnRzIEh0dHBTZXNzaW9uTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQyLmluaXRdIik7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDIuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgIH0KIApAQCAtMzcsMjMgKzM3LDIzIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0Mi5kb1Bvc3RdIik7Ci0gICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUi1GT1JXQVJEIixyZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUiIpKTsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiRkFJTCIpOyAgICAgICAgCi0gICAgICAgIAorICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7CisKICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmQgPSByZXF1ZXN0LmdldFJlcXVlc3REaXNwYXRjaGVyKCIvU2VydmxldFRlc3QzIik7Ci0gICAgICAgIHJkLmluY2x1ZGUocmVxdWVzdCwgcmVzcG9uc2UpOyAgICAgCisgICAgICAgIHJkLmluY2x1ZGUocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KLSAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25DcmVhdGVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25DcmVhdGVkXSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25EZXN0cm95ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkRlc3Ryb3llZF0iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdHRyaWJ1dGVzOiAiICsgaHR0cFNlc3Npb25FdmVudC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJ0ZXN0IikpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpUHJvY2Vzc29yQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlQcm9jZXNzb3JDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YQppbmRleCAzZThkMjViLi5lNzhmZWMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlQcm9jZXNzb3JDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlQcm9jZXNzb3JDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YQpAQCAtNDYsMTEgKzQ2LDExIEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QzIGV4dGVuZHMgSHR0cFNlcnZsZXR7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDMuaW5pdF0iKTsgICAgICAgIAotICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7ICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDMuaW5pdF0iKTsKKyAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpAQCAtNTgsMTIgKzU4LDEyIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0My5kb1Bvc3RdIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIG91dC5wcmludGxuKCJGSUxURVItUkVRVUVTVDoiICsgcmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVItUkVRVUVTVCIpKTsKICAgICAgICAgb3V0LnByaW50bG4oIkZJTFRFUi1GT1JXQVJEOiIgKyByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUi1GT1JXQVJEIikpOwogICAgICAgICBvdXQucHJpbnRsbigiRklMVEVSLUlOQ0xVREU6IiArIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSIikpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpU2VydmxldFJlcXVlc3RzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVNlcnZsZXRSZXF1ZXN0cy9XZWJUZXN0LmphdmEKaW5kZXggNWZmMWYyNy4uOGU3YTU2MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpU2VydmxldFJlcXVlc3RzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlTZXJ2bGV0UmVxdWVzdHMvV2ViVGVzdC5qYXZhCkBAIC0yMiwxMCArMjIsMTAgQEAKIAogcHVibGljIGNsYXNzIFdlYlRlc3QKIHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMTsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC0zNCw3ICszNCw3IEBACiAKICAgICAgICAgLy8gVGhlIHN0YXQgcmVwb3J0ZXIgd3JpdGVzIG91dCB0aGUgdGVzdCBpbmZvIGFuZCByZXN1bHRzCiAgICAgICAgIC8vIGludG8gdGhlIHRvcC1sZXZlbCBxdWlja2xvb2sgZGlyZWN0b3J5IGR1cmluZyBhIHJ1bi4KLSAgICAgIAorCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIk11bHRpIFNlcnZsZXQgUmVxdWVzdHMiKTsKIAogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CkBAIC00Myw3ICs0Myw3IEBACiAKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0UykuaW50VmFsdWUoKTsKICAgICAgICAgU3RyaW5nIG5hbWU7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBnb0dldChob3N0LCBwb3J0LCAibXVsdGlTZXJ2bGV0UmVxdWVzdHMiLCBjb250ZXh0Um9vdCArICIvU2VydmxldFRlc3QiICk7CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CkBAIC01Miw3ICs1Miw3IEBACiAKICAgICAgICAgaWYgKGNvdW50ICE9IEVYUEVDVEVEX0NPVU5UKXsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItbXVsdGlTZXJ2bGV0UmVxdWVzdHMiLCBzdGF0LkZBSUwpOwotICAgICAgICB9ICAgICAgICAgICAKKyAgICAgICAgfQogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2ViL211bHRpU2VydmxldFJlcXVlc3RzLS0tPiBleHBlY3QgIiArIEVYUEVDVEVEX0NPVU5UKTsKICAgICB9CiAKQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMVxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCgiSG9zdDogbG9jYWxob3N0XG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZTogIiArIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHRpbWUpKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwpAQCAtODQsMTkgKzg0LDE5IEBACiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gbGluZS5pbmRleE9mKCI6OiIpOwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3RhdHVzID0gbGluZS5zdWJzdHJpbmcoaW5kZXgrMik7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPT09IHN0YXR1czogIiArIHN0YXR1cyk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuZXF1YWxzSWdub3JlQ2FzZSgiUEFTUyIpKXsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItbXVsdGlTZXJ2bGV0UmVxdWVzdHM6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItbXVsdGlTZXJ2bGV0UmVxdWVzdHM6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5GQUlMKTsgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1tdWx0aVNlcnZsZXRSZXF1ZXN0czogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaisrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewogICAgICAgICB9CiAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlTZXJ2bGV0UmVxdWVzdHMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVNlcnZsZXRSZXF1ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGNmYTRhYjIuLjI1NTRkOTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVNlcnZsZXRSZXF1ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVNlcnZsZXRSZXF1ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbXVsdGlTZXJ2bGV0UmVxdWVzdHMiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW11bHRpU2VydmxldFJlcXVlc3RzIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1tdWx0aVNlcnZsZXRSZXF1ZXN0cyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpU2VydmxldFJlcXVlc3RzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVNlcnZsZXRSZXF1ZXN0cy9idWlsZC54bWwKaW5kZXggZGVlYzhhOS4uYWM0NjE5MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpU2VydmxldFJlcXVlc3RzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlTZXJ2bGV0UmVxdWVzdHMvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNiArNDIsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNTksNyArNTksNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICAgPGphdmFjCiAgICAgICAgICAgICBzcmNkaXI9Ii4iCkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlTZXJ2bGV0UmVxdWVzdHMvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpU2VydmxldFJlcXVlc3RzL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBhYzMyNzhlLi43ZTFhMDA5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlTZXJ2bGV0UmVxdWVzdHMvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVNlcnZsZXRSZXF1ZXN0cy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDIzICsyMiwyMyBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDI8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDI8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDI8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0MzwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mzwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0Mzwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QzPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3QzPC91cmwtcGF0dGVybj4KICAgICA8L3NlcnZsZXQtbWFwcGluZz4KLSAgICAKKwogICAgIDxzZXNzaW9uLWNvbmZpZz4KICAgICAgICAgPHNlc3Npb24tdGltZW91dD4xMDwvc2Vzc2lvbi10aW1lb3V0PgogICAgIDwvc2Vzc2lvbi1jb25maWc+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlTZXJ2bGV0UmVxdWVzdHMvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpU2VydmxldFJlcXVlc3RzL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCAwNTM1ZmU0Li5iZTQxNGI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlTZXJ2bGV0UmVxdWVzdHMvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVNlcnZsZXRSZXF1ZXN0cy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTI5LDE0ICsyOSwxNCBAQAogCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiB1cmxDb25uZWN0aW9uID0gKEh0dHBVUkxDb25uZWN0aW9uKWNvbm47CiAgICAgICAgICAgICB1cmxDb25uZWN0aW9uLnNldERvT3V0cHV0KHRydWUpOwogCi0gICAgICAgICAgICBEYXRhT3V0cHV0U3RyZWFtIGRvdXQgPSAKKyAgICAgICAgICAgIERhdGFPdXRwdXRTdHJlYW0gZG91dCA9CiAgICAgICAgICAgICAgICBuZXcgRGF0YU91dHB1dFN0cmVhbSh1cmxDb25uZWN0aW9uLmdldE91dHB1dFN0cmVhbSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdXQud3JpdGVCeXRlKDEpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlTZXJ2bGV0UmVxdWVzdHMvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVNlcnZsZXRSZXF1ZXN0cy9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCmluZGV4IDY4ZDg3NmEuLmU5NzQ1ZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVNlcnZsZXRSZXF1ZXN0cy9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVNlcnZsZXRSZXF1ZXN0cy9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCkBAIC0yOSwxNCArMjksMTQgQEAKIAogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09PSBJbiBTZXJ2bGV0VGVzdDIgPT09PT09PT09PT09Iik7CiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlTZXJ2bGV0UmVxdWVzdHMvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVNlcnZsZXRSZXF1ZXN0cy9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhCmluZGV4IGE5MmRhYjAuLmM5ZTVjODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVNlcnZsZXRSZXF1ZXN0cy9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVNlcnZsZXRSZXF1ZXN0cy9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhCkBAIC0yOSwxNCArMjksMTQgQEAKIAogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09PT09PT09IEluIFNlcnZsZXQzID09PT09PT09PT09PT09PSIpOwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpYnl0ZVZhbHVlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aWJ5dGVWYWx1ZS9XZWJUZXN0LmphdmEKaW5kZXggNTQ0MWNkYS4uYTQ1OWY2MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpYnl0ZVZhbHVlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlieXRlVmFsdWUvV2ViVGVzdC5qYXZhCkBAIC0yNSwxMCArMjUsMTAgQEAKICAqIGZvcndhcmRlZCB0byBhbm90aGVyIHNlcnZsZXQKICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAyOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTQxLDEzICs0MSwxMyBAQAogCiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7CiAgICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcnVuKGhvc3QsIHBvcnQsIGNvbnRleHRSb290ICsgIi9TZXJ2bGV0VGVzdCIgKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoY291bnQgIT0gRVhQRUNURURfQ09VTlQpewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtdWx0aUJ5dGVWYWx1ZSBQT1NUIiwgc3RhdC5GQUlMKTsKLSAgICAgICAgICAgIH0gICAgICAgICAgIAorICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm11bHRpQnl0ZVZhbHVlIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQpAQCAtNjMsMTIgKzYzLDEyIEBACiAgICAgICAgICAqLwogICAgICAgICBTb2NrZXQgcyA9IG5ldyBTb2NrZXQoaG9zdCwgcG9ydCk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHMuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoIkdFVCAiICsgY29udGV4dFBhdGggKyAiP2pfZW5jb2Rpbmc9U2hpZnRfSklTIiAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICI/al9lbmNvZGluZz1TaGlmdF9KSVMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgSFRUUC8xLjBcbiIpKTsKLSAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIj9qX2VuY29kaW5nPVNoaWZ0X0pJUyIgCisgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICI/al9lbmNvZGluZz1TaGlmdF9KSVMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgSFRUUC8xLjBcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHMuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CkBAIC03OSwxNiArNzksMTYgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lTnVtICsgIjogICIgKyBsaW5lKTsKICAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgICAgICAgICAgIFN0cmluZyBzdGF0dXMgPSBsaW5lLnN1YnN0cmluZyhpbmRleCsyKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuZXF1YWxzSWdub3JlQ2FzZSgiUEFTUyIpKXsKLSAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1tdWx0aWJ5dGVWYWx1ZSBHRVQ6ICIgCisgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItbXVsdGlieXRlVmFsdWUgR0VUOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLW11bHRpYnl0ZVZhbHVlIEdFVDogIiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LkZBSUwpOyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItbXVsdGlieXRlVmFsdWUgR0VUOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9CiAgICAgICAgICAgICBsaW5lTnVtKys7CiAgICAgICAgIH0KIApAQCAtOTgsMTEgKzk4LDExIEBACiAgICAgICAgIC8vIENvbnN0cnVjdCBib2R5CiAgICAgICAgIFN0cmluZyBib2R5ID0gVVJMRW5jb2Rlci5lbmNvZGUoImpfZW5jb2RpbmciLCAiVVRGLTgiKQogICAgICAgICAgICAgKyAiPSIgKyBVUkxFbmNvZGVyLmVuY29kZSgiU2hpZnRfSklTIiwgIlVURi04Iik7Ci0gICAgCisKICAgICAgICAgLy8gQ3JlYXRlIGEgc29ja2V0IHRvIHRoZSBob3N0CiAgICAgICAgIHMgPSBuZXcgU29ja2V0KGhvc3QsIHBvcnQpOwogICAgICAgICBvcyA9IHMuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0gICAgCisKICAgICAgICAgLy8gU2VuZCBoZWFkZXIKICAgICAgICAgQnVmZmVyZWRXcml0ZXIgd3IgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IE91dHB1dFN0cmVhbVdyaXRlcigKICAgICAgICAgICAgIHMuZ2V0T3V0cHV0U3RyZWFtKCksICJVVEY4IikpOwpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgICAgIHdyLndyaXRlKCJDb250ZW50LUxlbmd0aDogIiArIGJvZHkubGVuZ3RoKCkgKyAiXHJcbiIpOwogICAgICAgICB3ci53cml0ZSgiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcclxuIik7CiAgICAgICAgIHdyLndyaXRlKCJcclxuIik7Ci0gICAgCisKICAgICAgICAgLy8gU2VuZCBib2R5CiAgICAgICAgIHdyLndyaXRlKGJvZHkpOwogICAgICAgICB3ci5mbHVzaCgpOwpAQCAtMTI2LDE4ICsxMjYsMTggQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lTnVtICsgIjogICIgKyBsaW5lKTsKICAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgICAgICAgICAgIFN0cmluZyBzdGF0dXMgPSBsaW5lLnN1YnN0cmluZyhpbmRleCsyKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuZXF1YWxzSWdub3JlQ2FzZSgiUEFTUyIpKXsKLSAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1tdWx0aWJ5dGVWYWx1ZSBQT1NUOiAiIAorICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLW11bHRpYnl0ZVZhbHVlIFBPU1Q6ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItbXVsdGlieXRlVmFsdWUgUE9TVDogIiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LkZBSUwpOyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItbXVsdGlieXRlVmFsdWUgUE9TVDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICB9IAorICAgICAgICAgICAgfQogICAgICAgICAgICAgbGluZU51bSsrOwogICAgICAgICB9CiAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlieXRlVmFsdWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aWJ5dGVWYWx1ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDc0MTdkZjguLjY0NzJhODUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aWJ5dGVWYWx1ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aWJ5dGVWYWx1ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbXVsdGlieXRlVmFsdWUiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW11bHRpYnl0ZVZhbHVlIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1tdWx0aWJ5dGVWYWx1ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpYnl0ZVZhbHVlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aWJ5dGVWYWx1ZS9idWlsZC54bWwKaW5kZXggZmFmN2Y1NS4uNTFhMWNiYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpYnl0ZVZhbHVlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlieXRlVmFsdWUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNSArNDIsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTU4LDcgKzU4LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogCiAgICAgICAgICAgPGphdmFjCkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlieXRlVmFsdWUvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpYnl0ZVZhbHVlL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA5ZDQ0OTlmLi4wYzE3NDIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlieXRlVmFsdWUvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aWJ5dGVWYWx1ZS9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDE4ICsyMiwxOCBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDI8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDI8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDI8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpYnl0ZVZhbHVlL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aWJ5dGVWYWx1ZS9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggOGVkYjNjMi4uOTAxNzI3ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpYnl0ZVZhbHVlL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlieXRlVmFsdWUvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9HZXQgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQotICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgCisgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBkb1Bvc3QgKHJlcSxyZXMpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aWJ5dGVWYWx1ZS9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpYnl0ZVZhbHVlL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEKaW5kZXggYWU2NTI3NS4uMTRlMWNlZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpYnl0ZVZhbHVlL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpYnl0ZVZhbHVlL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEKQEAgLTMwLDkgKzMwLDkgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOwogCiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QyIGV4dGVuZHMgSHR0cFNlcnZsZXQgewotICAgIAorCiAgICAgQ29sbGF0b3IgamFwQ29sbGF0b3IgPSBDb2xsYXRvci5nZXRJbnN0YW5jZShMb2NhbGUuSkFQQU5FU0UpOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9Qb3N0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKQEAgLTUxLDcgKzUxLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCi0gICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAKKyAgICAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIGRvUG9zdCAocmVxLHJlcyk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWcvV2ViVGVzdC5qYXZhCmluZGV4IDBmYWQ0MmMuLjAwYjYyNTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZy9XZWJUZXN0LmphdmEKQEAgLTIxLDE2ICsyMSwxNiBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAxOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICBwcml2YXRlIHN0YXRpYyBVUkwgdXJsOwogICAgIHByaXZhdGUgc3RhdGljIE9iamVjdE91dHB1dFN0cmVhbSBvYmplY3RXcml0ZXIgPSBudWxsOwotICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7ICAKKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiB1cmxDb25uZWN0aW9uID0gKEh0dHBVUkxDb25uZWN0aW9uKWNvbm47CiAgICAgICAgICAgICAgICB1cmxDb25uZWN0aW9uLnNldERvT3V0cHV0KHRydWUpOwogICAgICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZT0gIHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDIwMCIpOyAKKyAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogMjAwIik7CiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlID09IDIwMCl7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJuZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZy9XZWJUZXN0Mi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWcvV2ViVGVzdDIuamF2YQppbmRleCAzMWRkZDNkLi4yOWU3MDhkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZy9XZWJUZXN0Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnL1dlYlRlc3QyLmphdmEKQEAgLTIxLDE2ICsyMSwxNiBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QyIHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMTsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogICAgIHByaXZhdGUgc3RhdGljIFVSTENvbm5lY3Rpb24gY29ubiA9IG51bGw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMIHVybDsKICAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RPdXRwdXRTdHJlYW0gb2JqZWN0V3JpdGVyID0gbnVsbDsKLSAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOyAgCisgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIApAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gdXJsQ29ubmVjdGlvbiA9IChIdHRwVVJMQ29ubmVjdGlvbiljb25uOwogICAgICAgICAgICAgICAgdXJsQ29ubmVjdGlvbi5zZXREb091dHB1dCh0cnVlKTsKICAgICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGU9ICB1cmxDb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBjb2RlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiAyMDAiKTsgCisgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDIwMCIpOwogICAgICAgICAgICAgICAgaWYgKHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCkgPT0gMjAwKXsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm5ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWctYWZ0ZXJSZWNvbmYiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGE5NmRmNTUuLjFmZTJhNTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW5ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW5ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWciLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWcvYnVpbGQueG1sCmluZGV4IDBkMjJhY2QuLmMyYTc4ZTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZy9idWlsZC54bWwKQEAgLTUwLDcgKzUwLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTU4LDEwICs1OCwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgPGphdmFjCkBAIC02OSwxMCArNjksMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSIqLmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC04MCw3ICs4MCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4tYWdhaW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QyIj4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTEwNyw3ICsxMDcsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWcvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWcvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGZkYjBjMTcuLmMxZDRiYjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDEyICsyMiwxMiBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggNzgxYmNjZi4uYzA3MzI3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKQEAgLTM0LDEyICszNCwxMiBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5kb1Bvc3RdIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAkKKwogICAgICAgICBvdXQucHJpbnRsbigiVEVTVDo6UEFTUyIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnRW5hYmxlZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZ0VuYWJsZWQvV2ViVGVzdC5qYXZhCmluZGV4IDJkMWFiMDMuLmQyNzA4NjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnRW5hYmxlZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWdFbmFibGVkL1dlYlRlc3QuamF2YQpAQCAtMjEsMTYgKzIxLDE2IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDE7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKICAgICBwcml2YXRlIHN0YXRpYyBVUkxDb25uZWN0aW9uIGNvbm4gPSBudWxsOwogICAgIHByaXZhdGUgc3RhdGljIFVSTCB1cmw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0T3V0cHV0U3RyZWFtIG9iamVjdFdyaXRlciA9IG51bGw7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsgIAorICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIHVybENvbm5lY3Rpb24gPSAoSHR0cFVSTENvbm5lY3Rpb24pY29ubjsKICAgICAgICAgICAgICAgIHVybENvbm5lY3Rpb24uc2V0RG9PdXRwdXQodHJ1ZSk7CiAgICAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlPSAgdXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogNDA0Iik7IAorICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBjb2RlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiA0MDQiKTsKICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgPT0gMjAwKXsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm5ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWdFbmFibGVkIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZ0VuYWJsZWQvV2ViVGVzdDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnRW5hYmxlZC9XZWJUZXN0Mi5qYXZhCmluZGV4IGI3NmY1YjUuLjk1MDVjZTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnRW5hYmxlZC9XZWJUZXN0Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnRW5hYmxlZC9XZWJUZXN0Mi5qYXZhCkBAIC0yMSwxNiArMjEsMTYgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0MiB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDE7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKICAgICBwcml2YXRlIHN0YXRpYyBVUkxDb25uZWN0aW9uIGNvbm4gPSBudWxsOwogICAgIHByaXZhdGUgc3RhdGljIFVSTCB1cmw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0T3V0cHV0U3RyZWFtIG9iamVjdFdyaXRlciA9IG51bGw7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsgIAorICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIHVybENvbm5lY3Rpb24gPSAoSHR0cFVSTENvbm5lY3Rpb24pY29ubjsKICAgICAgICAgICAgICAgIHVybENvbm5lY3Rpb24uc2V0RG9PdXRwdXQodHJ1ZSk7CiAgICAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlPSAgdXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogMjAwIik7IAorICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBjb2RlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiAyMDAiKTsKICAgICAgICAgICAgICAgIGlmICh1cmxDb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpID09IDIwMCl7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJuZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnRW5hYmxlZC1hZnRlclJlY29uZiIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWdFbmFibGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZ0VuYWJsZWQvYnVpbGQucHJvcGVydGllcwppbmRleCBlZjI5YmY3Li44OTExMmQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZ0VuYWJsZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZ0VuYWJsZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW5ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWdFbmFibGVkIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnRW5hYmxlZCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZ0VuYWJsZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWdFbmFibGVkL2J1aWxkLnhtbAppbmRleCA0MWYyYjg3Li4yYjc4ZjFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZ0VuYWJsZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnRW5hYmxlZC9idWlsZC54bWwKQEAgLTU4LDcgKzU4LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTY2LDEwICs2NiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgPGphdmFjCkBAIC03NywxMCArNzcsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSIqLmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC04OCw3ICs4OCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTEwMCw3ICsxMDAsNyBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLWFnYWluIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdDIiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtMTE1LDcgKzExNSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZ0VuYWJsZWQvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWdFbmFibGVkL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBmZGIwYzE3Li5jMWQ0YmI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZ0VuYWJsZWQvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnRW5hYmxlZC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDEyICsyMiwxMiBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZ0VuYWJsZWQvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWdFbmFibGVkL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCA3ODFiY2NmLi5jMDczMjcwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZ0VuYWJsZWQvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnRW5hYmxlZC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CkBAIC0zNCwxMiArMzQsMTIgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAJCisKICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6OlBBU1MiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyVGFyZ2V0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJUYXJnZXQvV2ViVGVzdC5qYXZhCmluZGV4IGQwMTlkYzAuLjNjZmM0YjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJUYXJnZXQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJUYXJnZXQvV2ViVGVzdC5qYXZhCkBAIC0yMSwxNiArMjEsMTYgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMTsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogICAgIHByaXZhdGUgc3RhdGljIFVSTENvbm5lY3Rpb24gY29ubiA9IG51bGw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMIHVybDsKICAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RPdXRwdXRTdHJlYW0gb2JqZWN0V3JpdGVyID0gbnVsbDsKLSAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOyAgCisgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIApAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gdXJsQ29ubmVjdGlvbiA9IChIdHRwVVJMQ29ubmVjdGlvbiljb25uOwogICAgICAgICAgICAgICAgdXJsQ29ubmVjdGlvbi5zZXREb091dHB1dCh0cnVlKTsKICAgICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGU9ICB1cmxDb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBjb2RlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiAyMDAiKTsgCisgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDIwMCIpOwogICAgICAgICAgICAgICAgaWYgKHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCkgIT0gMjAwKXsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm5ldHdvcmtMaXN0ZW5lclRhcmdldCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lclRhcmdldC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lclRhcmdldC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDEzNDhjODMuLjExMzYwMTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJUYXJnZXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyVGFyZ2V0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1uZXR3b3JrTGlzdGVuZXJUYXJnZXQiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW5ldHdvcmtMaXN0ZW5lclRhcmdldCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItbmV0d29ya0xpc3RlbmVyVGFyZ2V0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyVGFyZ2V0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJUYXJnZXQvYnVpbGQueG1sCmluZGV4IDUyOTIyMDYuLmVlMzU3MjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJUYXJnZXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJUYXJnZXQvYnVpbGQueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8IURPQ1RZUEUgcHJvamVjdCBbCiA8IUVOVElUWSBjb21tb25TZXR1cCBTWVNURU0gIi4vLi4vLi4vLi4vY29uZmlnL3Byb3BlcnRpZXMueG1sIj4KIDwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+Ci08IUVOVElUWSBlZUNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi8uLi9jb25maWcvZWUtY29tbW9uLnhtbCI+IAorPCFFTlRJVFkgZWVDb21tb25CdWlsZCBTWVNURU0gIi4vLi4vLi4vLi4vY29uZmlnL2VlLWNvbW1vbi54bWwiPgogPCFFTlRJVFkgcnVuIFNZU1RFTSAiLi8uLi8uLi8uLi9jb25maWcvcnVuLnhtbCI+CiA8IUVOVElUWSB0ZXN0cHJvcGVydGllcyBTWVNURU0gIi4vYnVpbGQucHJvcGVydGllcyI+CiBdPgpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC0xMzIsMTkgKzEzMiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgIDxqYXZhYwogICAgICAgICAgICAgc3JjZGlyPSIuIgogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciBmcm9tICR7YmFzZWRpcn0uIgogICAgICAgICAgICAgICBsZXZlbD0idmVyYm9zZSIvPgpAQCAtMTcyLDcgKzE3Miw3IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJVbmRlcGxveWluZyB3YXJmaWxlICR7YXBwbmFtZX0td2ViIGZyb20KICAgICAgICAgICAgICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIgZnJvbSAke2Jhc2VkaXJ9LiIgbGV2ZWw9InZlcmJvc2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJUYXJnZXQvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lclRhcmdldC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZmRiMGMxNy4uYzFkNGJiNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lclRhcmdldC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lclRhcmdldC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDEyICsyMiwxMiBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyVGFyZ2V0L3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJUYXJnZXQvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDc4MWJjY2YuLmMwNzMyNzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJUYXJnZXQvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJUYXJnZXQvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwpAQCAtMzQsMTIgKzM0LDEyIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCQorCiAgICAgICAgIG91dC5wcmludGxuKCJURVNUOjpQQVNTIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL29uZVNlc3Npb25Db29raWVIZWFkZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL29uZVNlc3Npb25Db29raWVIZWFkZXIvV2ViVGVzdC5qYXZhCmluZGV4IGU5YjEwMjEuLmI3NDNkNTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vbmVTZXNzaW9uQ29va2llSGVhZGVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb25lU2Vzc2lvbkNvb2tpZUhlYWRlci9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3Igb25lIHNlc3Npb24gY29va2llIGhlYWRlciIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvaW5kZXguanNwIEhUVFAvMS4wXG4iOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL29uZVNlc3Npb25Db29raWVIZWFkZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vbmVTZXNzaW9uQ29va2llSGVhZGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjUzYzM5NC4uZWVkNzRkYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL29uZVNlc3Npb25Db29raWVIZWFkZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb25lU2Vzc2lvbkNvb2tpZUhlYWRlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW9uZS1zZXNzaW9uLWNvb2tpZS1oZWFkZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vbmVTZXNzaW9uQ29va2llSGVhZGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vbmVTZXNzaW9uQ29va2llSGVhZGVyL2J1aWxkLnhtbAppbmRleCAzZTUzZDdlLi45MDgzZDVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb25lU2Vzc2lvbkNvb2tpZUhlYWRlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL29uZVNlc3Npb25Db29raWVIZWFkZXIvYnVpbGQueG1sCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICA8L2RlbGV0ZT4KICAgICAgIDxkZWxldGUgZmlsZT0iUmVwUnVuQ29uZi50eHQiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NiwyMyArNDYsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3NnaVNlcnZsZXQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL29zZ2lTZXJ2bGV0L1dlYlRlc3QuamF2YQppbmRleCBjZDk4YjFjLi5iMmQ3Y2UwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3NnaVNlcnZsZXQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vc2dpU2VydmxldC9XZWJUZXN0LmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBob3N0OwogICAgIHByaXZhdGUgU3RyaW5nIHBvcnQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgY29udGV4dFJvb3Q7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3NnaVNlcnZsZXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vc2dpU2VydmxldC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGU4Y2JkMjEuLmExMjM2NGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vc2dpU2VydmxldC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vc2dpU2VydmxldC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW9zZ2ktc2VydmxldCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL29zZ2lTZXJ2bGV0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vc2dpU2VydmxldC9idWlsZC54bWwKaW5kZXggMzRmMzFmMy4uN2VlYWNmMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL29zZ2lTZXJ2bGV0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3NnaVNlcnZsZXQvYnVpbGQueG1sCkBAIC0zOCw3ICszOCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NiwxNCArNDYsMTQgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgICAgICAgICB2YWx1ZT0ib3NnaS1zZXJ2bGV0Ii8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vc2dpU2VydmxldC9vc2dpLXNlcnZsZXQvc3JjL21haW4vamF2YS9zYWhvby9vc2dpaHR0cC90ZXN0MS9BY3RpdmF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vc2dpU2VydmxldC9vc2dpLXNlcnZsZXQvc3JjL21haW4vamF2YS9zYWhvby9vc2dpaHR0cC90ZXN0MS9BY3RpdmF0b3IuamF2YQppbmRleCA4OTA2MTJhLi43ODJjM2NiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3NnaVNlcnZsZXQvb3NnaS1zZXJ2bGV0L3NyYy9tYWluL2phdmEvc2Fob28vb3NnaWh0dHAvdGVzdDEvQWN0aXZhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL29zZ2lTZXJ2bGV0L29zZ2ktc2VydmxldC9zcmMvbWFpbi9qYXZhL3NhaG9vL29zZ2lodHRwL3Rlc3QxL0FjdGl2YXRvci5qYXZhCkBAIC0zMCw0MyArMzAsNDMgQEAKIAogcHVibGljIGNsYXNzIEFjdGl2YXRvciBpbXBsZW1lbnRzIEJ1bmRsZUFjdGl2YXRvciB7CiAKLQlwcml2YXRlIFNlcnZpY2VUcmFja2VyIGh0dHBTZXJ2aWNlVHJhY2tlcjsKLQkKLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlodHRwU2VydmljZVRyYWNrZXIgPSBuZXcgSHR0cFNlcnZpY2VUcmFja2VyKGNvbnRleHQpOwotCQlodHRwU2VydmljZVRyYWNrZXIub3BlbigpOwotCX0KKyAgICBwcml2YXRlIFNlcnZpY2VUcmFja2VyIGh0dHBTZXJ2aWNlVHJhY2tlcjsKIAotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaHR0cFNlcnZpY2VUcmFja2VyLmNsb3NlKCk7Ci0JCWh0dHBTZXJ2aWNlVHJhY2tlciA9IG51bGw7Ci0JfQorICAgIHB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGh0dHBTZXJ2aWNlVHJhY2tlciA9IG5ldyBIdHRwU2VydmljZVRyYWNrZXIoY29udGV4dCk7CisgICAgICAgIGh0dHBTZXJ2aWNlVHJhY2tlci5vcGVuKCk7CisgICAgfQogCi0JcHJpdmF0ZSBjbGFzcyBIdHRwU2VydmljZVRyYWNrZXIgZXh0ZW5kcyBTZXJ2aWNlVHJhY2tlciB7CisgICAgcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBodHRwU2VydmljZVRyYWNrZXIuY2xvc2UoKTsKKyAgICAgICAgaHR0cFNlcnZpY2VUcmFja2VyID0gbnVsbDsKKyAgICB9CiAKLQkJcHVibGljIEh0dHBTZXJ2aWNlVHJhY2tlcihCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQkJc3VwZXIoY29udGV4dCwgY29udGV4dC5jcmVhdGVGaWx0ZXIoIigmKG9iamVjdENsYXNzPSIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcub3NnaS5zZXJ2aWNlLmh0dHAuSHR0cFNlcnZpY2UuY2xhc3MuZ2V0TmFtZSgpICsgCisgICAgcHJpdmF0ZSBjbGFzcyBIdHRwU2VydmljZVRyYWNrZXIgZXh0ZW5kcyBTZXJ2aWNlVHJhY2tlciB7CisKKyAgICAgICAgcHVibGljIEh0dHBTZXJ2aWNlVHJhY2tlcihCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgc3VwZXIoY29udGV4dCwgY29udGV4dC5jcmVhdGVGaWx0ZXIoIigmKG9iamVjdENsYXNzPSIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5vc2dpLnNlcnZpY2UuaHR0cC5IdHRwU2VydmljZS5jbGFzcy5nZXROYW1lKCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpKFZpcnR1YWxTZXJ2ZXI9c2VydmVyKSkiKSwgbnVsbCk7Ci0JCX0KKyAgICAgICAgfQogCi0JCXB1YmxpYyBPYmplY3QgYWRkaW5nU2VydmljZShTZXJ2aWNlUmVmZXJlbmNlIHJlZmVyZW5jZSkgewotCQkJSHR0cFNlcnZpY2UgaHR0cFNlcnZpY2UgPSAoSHR0cFNlcnZpY2UpIGNvbnRleHQuZ2V0U2VydmljZShyZWZlcmVuY2UpOwotCQkJdHJ5IHsJCQkKLQkJCQlodHRwU2VydmljZS5yZWdpc3RlclNlcnZsZXQoIi9hYS9iYiIsIG5ldyBIZWxsb1dvcmxkU2VydmxldDEoKSwgbnVsbCwgbnVsbCk7Ci0JCQkJaHR0cFNlcnZpY2UucmVnaXN0ZXJTZXJ2bGV0KCIvYWEiLCBuZXcgSGVsbG9Xb3JsZFNlcnZsZXQyKCksIG51bGwsIG51bGwpOworICAgICAgICBwdWJsaWMgT2JqZWN0IGFkZGluZ1NlcnZpY2UoU2VydmljZVJlZmVyZW5jZSByZWZlcmVuY2UpIHsKKyAgICAgICAgICAgIEh0dHBTZXJ2aWNlIGh0dHBTZXJ2aWNlID0gKEh0dHBTZXJ2aWNlKSBjb250ZXh0LmdldFNlcnZpY2UocmVmZXJlbmNlKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaHR0cFNlcnZpY2UucmVnaXN0ZXJTZXJ2bGV0KCIvYWEvYmIiLCBuZXcgSGVsbG9Xb3JsZFNlcnZsZXQxKCksIG51bGwsIG51bGwpOworICAgICAgICAgICAgICAgIGh0dHBTZXJ2aWNlLnJlZ2lzdGVyU2VydmxldCgiL2FhIiwgbmV3IEhlbGxvV29ybGRTZXJ2bGV0MigpLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWdpc3RlcmVkIHNlcnZsZXQxIHdpdGggbWFwcGluZyAvYWEvYmIgYW5kIHNlcnZsZXQyIHdpdGggbWFwcGluZyAvYWEiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwU2VydmljZS51bnJlZ2lzdGVyKCIvYWEvYmIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbnJlZ2lzdGVyZWQgc2VydmxldDEiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCXJldHVybiBodHRwU2VydmljZTsKLQkJfQkJCi0JfQorCisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gaHR0cFNlcnZpY2U7CisgICAgICAgIH0KKyAgICB9CiAKICAgICAgICAgdm9pZCB0ZXN0KCkgewogICAgICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vc2dpU2VydmxldC9vc2dpLXNlcnZsZXQvc3JjL21haW4vamF2YS9zYWhvby9vc2dpaHR0cC90ZXN0MS9IZWxsb1dvcmxkU2VydmxldDEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vc2dpU2VydmxldC9vc2dpLXNlcnZsZXQvc3JjL21haW4vamF2YS9zYWhvby9vc2dpaHR0cC90ZXN0MS9IZWxsb1dvcmxkU2VydmxldDEuamF2YQppbmRleCBmNjUzNWU3Li41N2NmNGZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3NnaVNlcnZsZXQvb3NnaS1zZXJ2bGV0L3NyYy9tYWluL2phdmEvc2Fob28vb3NnaWh0dHAvdGVzdDEvSGVsbG9Xb3JsZFNlcnZsZXQxLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL29zZ2lTZXJ2bGV0L29zZ2ktc2VydmxldC9zcmMvbWFpbi9qYXZhL3NhaG9vL29zZ2lodHRwL3Rlc3QxL0hlbGxvV29ybGRTZXJ2bGV0MS5qYXZhCkBAIC0yNiwxMCArMjYsMTAgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOwogCiBwdWJsaWMgY2xhc3MgSGVsbG9Xb3JsZFNlcnZsZXQxIGV4dGVuZHMgSHR0cFNlcnZsZXQgewotICAgICAgICAKLQlwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCXJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwotCQlyZXNwLmdldFdyaXRlcigpLndyaXRlKCI8aHRtbD48Ym9keT5TZXJ2bGV0IDEgPC9ib2R5PjwvaHRtbD4iKTsKLQl9CisKKyAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisgICAgICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgICAgICByZXNwLmdldFdyaXRlcigpLndyaXRlKCI8aHRtbD48Ym9keT5TZXJ2bGV0IDEgPC9ib2R5PjwvaHRtbD4iKTsKKyAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vc2dpU2VydmxldC9vc2dpLXNlcnZsZXQvc3JjL21haW4vamF2YS9zYWhvby9vc2dpaHR0cC90ZXN0MS9IZWxsb1dvcmxkU2VydmxldDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vc2dpU2VydmxldC9vc2dpLXNlcnZsZXQvc3JjL21haW4vamF2YS9zYWhvby9vc2dpaHR0cC90ZXN0MS9IZWxsb1dvcmxkU2VydmxldDIuamF2YQppbmRleCA1NTQ5OWY5Li5hOGE2MWVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3NnaVNlcnZsZXQvb3NnaS1zZXJ2bGV0L3NyYy9tYWluL2phdmEvc2Fob28vb3NnaWh0dHAvdGVzdDEvSGVsbG9Xb3JsZFNlcnZsZXQyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL29zZ2lTZXJ2bGV0L29zZ2ktc2VydmxldC9zcmMvbWFpbi9qYXZhL3NhaG9vL29zZ2lodHRwL3Rlc3QxL0hlbGxvV29ybGRTZXJ2bGV0Mi5qYXZhCkBAIC0yNyw5ICsyNyw5IEBACiAKIHB1YmxpYyBjbGFzcyBIZWxsb1dvcmxkU2VydmxldDIgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKLQlwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICAgICAgICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICAgICAgICAgIHJlc3AuZ2V0V3JpdGVyKCkud3JpdGUoIjxodG1sPjxib2R5PlNlcnZsZXQgMiA8L2JvZHk+PC9odG1sPiIpOwotCX0KKyAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vdmVycmlkZUltcGxpY2l0TWFwcGluZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3ZlcnJpZGVJbXBsaWNpdE1hcHBpbmcvV2ViVGVzdC5qYXZhCmluZGV4IDIwZTY4ODcuLmQxOTEwN2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vdmVycmlkZUltcGxpY2l0TWFwcGluZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL292ZXJyaWRlSW1wbGljaXRNYXBwaW5nL1dlYlRlc3QuamF2YQpAQCAtNDAsMTYgKzQwLDE2IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGlzc3VlIDg2NDgiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAgICAgICAgIHdlYlRlc3QuZG9UZXN0KCk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAKKwogICAgICAgICB0cnkgewogCiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vdmVycmlkZUltcGxpY2l0TWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL292ZXJyaWRlSW1wbGljaXRNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjkxMTdkMS4uMzk4NDQwZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL292ZXJyaWRlSW1wbGljaXRNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL292ZXJyaWRlSW1wbGljaXRNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tb3ZlcnJpZGUtaW1wbGljaXQtbWFwcGluZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL292ZXJyaWRlSW1wbGljaXRNYXBwaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vdmVycmlkZUltcGxpY2l0TWFwcGluZy9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL292ZXJyaWRlSW1wbGljaXRNYXBwaW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3ZlcnJpZGVJbXBsaWNpdE1hcHBpbmcvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3BpcGVsaW5lUXVldWVGdWxsL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9waXBlbGluZVF1ZXVlRnVsbC9XZWJUZXN0LmphdmEKaW5kZXggMjkzOTFhYS4uY2M1ZjVkNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3BpcGVsaW5lUXVldWVGdWxsL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcGlwZWxpbmVRdWV1ZUZ1bGwvV2ViVGVzdC5qYXZhCkBAIC0yNSwxNiArMjUsMTYgQEAKICAqICgiTlBFIFdoZW4gc3RyZXNzaW5nIEdsYXNzRmlzaCBhbmQgdGhlIFBpcGVsaW5lIFF1ZXVlIGlzIGZ1bGwiKQogICovCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDE7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKICAgICBwcml2YXRlIHN0YXRpYyBVUkxDb25uZWN0aW9uIGNvbm4gPSBudWxsOwogICAgIHByaXZhdGUgc3RhdGljIFVSTCB1cmw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0T3V0cHV0U3RyZWFtIG9iamVjdFdyaXRlciA9IG51bGw7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsgIAorICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIHVybENvbm5lY3Rpb24gPSAoSHR0cFVSTENvbm5lY3Rpb24pY29ubjsKICAgICAgICAgICAgICAgIHVybENvbm5lY3Rpb24uc2V0RG9PdXRwdXQodHJ1ZSk7CiAgICAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlPSAgdXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogNTAzIik7IAorICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBjb2RlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiA1MDMiKTsKICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gNTAzKXsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInBpcGVsaW5lUXVldWVGdWxsIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcGlwZWxpbmVRdWV1ZUZ1bGwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9waXBlbGluZVF1ZXVlRnVsbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGRmMTllNGUuLmRiMTI0NjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9waXBlbGluZVF1ZXVlRnVsbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9waXBlbGluZVF1ZXVlRnVsbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcGlwZWxpbmVRdWV1ZUZ1bGwiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXBpcGVsaW5lUXVldWVGdWxsIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1waXBlbGluZVF1ZXVlRnVsbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3BpcGVsaW5lUXVldWVGdWxsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9waXBlbGluZVF1ZXVlRnVsbC9idWlsZC54bWwKaW5kZXggZmI2MjdiZS4uMWFjY2M3ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3BpcGVsaW5lUXVldWVGdWxsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcGlwZWxpbmVRdWV1ZUZ1bGwvYnVpbGQueG1sCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcG9ydFVuaWZpY2F0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcG9ydFVuaWZpY2F0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggY2UwNDBhOS4uNDVhNTE5ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3BvcnRVbmlmaWNhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wb3J0VW5pZmljYXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1wb3J0dW5pZiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3BvcnRVbmlmaWNhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcG9ydFVuaWZpY2F0aW9uL2J1aWxkLnhtbAppbmRleCBlNzljMmUxLi4wMGNkMmJkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcG9ydFVuaWZpY2F0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcG9ydFVuaWZpY2F0aW9uL2J1aWxkLnhtbApAQCAtMzAsNyArMzAsNyBAQAogICAgICZjb21tb25CdWlsZDsKICAgICAmdGVzdHByb3BlcnRpZXM7CiAgICAgJnJ1bjsKLSAgICAKKwogICAgIDxpbXBvcnQgZmlsZT0iLi4vcmVwb3J0YnVpbGRlci54bWwiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iamFyIiBkZXBlbmRzPSJidWlsZCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcG9ydFVuaWZpY2F0aW9uVGFyZ2V0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcG9ydFVuaWZpY2F0aW9uVGFyZ2V0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYmIxODMyYS4uMWRkNjJmZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3BvcnRVbmlmaWNhdGlvblRhcmdldC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wb3J0VW5pZmljYXRpb25UYXJnZXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1wb3J0dW5pZi10YXJnZXQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wb3J0VW5pZmljYXRpb25UYXJnZXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3BvcnRVbmlmaWNhdGlvblRhcmdldC9idWlsZC54bWwKaW5kZXggM2FhMTdiZS4uM2JjZDA1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3BvcnRVbmlmaWNhdGlvblRhcmdldC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3BvcnRVbmlmaWNhdGlvblRhcmdldC9idWlsZC54bWwKQEAgLTMyLDcgKzMyLDcgQEAKICAgICAmZWVDb21tb25CdWlsZDsKICAgICAmdGVzdHByb3BlcnRpZXM7CiAgICAgJnJ1bjsKLSAgICAKKwogICAgIDxpbXBvcnQgZmlsZT0iLi4vcmVwb3J0YnVpbGRlci54bWwiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iamFyIiBkZXBlbmRzPSJidWlsZCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJvZ3JhbW1hdGljTG9naW4vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb2dyYW1tYXRpY0xvZ2luL1dlYlRlc3QuamF2YQppbmRleCA1MzFlOGUyLi5mODJkMmEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJvZ3JhbW1hdGljTG9naW4vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wcm9ncmFtbWF0aWNMb2dpbi9XZWJUZXN0LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKICAqIHJlZ3Jlc3Npb24gb24gQVM4IikKICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9ICJwcm9ncmFtbWF0aWMtbG9naW4iOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQpAQCAtNDcsMTEgKzQ3LDExIEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNDg2MjA5OCIpOwotICAgICAgICAKKwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHdlYlRlc3QuaW52b2tlKCk7ICAgICAgICAgICAgCisgICAgICAgICAgICB3ZWJUZXN0Lmludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpAQCAtNzcsNSArNzcsNSBAQAogICAgICAgICAgICAgICAgICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgfQogICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb2dyYW1tYXRpY0xvZ2luL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJvZ3JhbW1hdGljTG9naW4vYnVpbGQucHJvcGVydGllcwppbmRleCBhMDJmY2E4Li42MDgwNzM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJvZ3JhbW1hdGljTG9naW4vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJvZ3JhbW1hdGljTG9naW4vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTEgKzE1LDExIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXByb2dyYW1tYXRpYy1sb2dpbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcHJvZ3JhbW1hdGljLWxvZ2luIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1wcm9ncmFtbWF0aWMtbG9naW4iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wcm9ncmFtbWF0aWNMb2dpbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJvZ3JhbW1hdGljTG9naW4vYnVpbGQueG1sCmluZGV4IDFkZGI5NDAuLmQzMTkxMmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wcm9ncmFtbWF0aWNMb2dpbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb2dyYW1tYXRpY0xvZ2luL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTAgKzQ0LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01NSw3ICs1NSw3IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCkBAIC02NiwxMSArNjYsMTEgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJncm91cHMiIHZhbHVlPSJ0ZXN0Z3JvdXAxIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAtcG9saWN5IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxtb3ZlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL3NlcnZlci5wb2xpY3kiIAorICAgICAgICA8bW92ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZy9zZXJ2ZXIucG9saWN5IgogICAgICAgICAgICAgICB0b2ZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL3NlcnZlci5wb2xpY3kuU0FWRSIvPgotICAgICAgICA8Y29weSBmaWxlPSJzZXJ2ZXIucG9saWN5IiAKKyAgICAgICAgPGNvcHkgZmlsZT0ic2VydmVyLnBvbGljeSIKICAgICAgICAgICAgICAgdG9maWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZy9zZXJ2ZXIucG9saWN5Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC04Miw3ICs4Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTk2LDE5ICs5NiwxOSBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlbW92ZS11c2VyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXVzZXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0idGVzdHVzZXIzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZS1wb2xpY3kiIGRlcGVuZHM9InNldHVwLXBvbGljeSI+Ci0gICAgICAgIDxtb3ZlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL3NlcnZlci5wb2xpY3kuU0FWRSIgCisgICAgICAgIDxtb3ZlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL3NlcnZlci5wb2xpY3kuU0FWRSIKICAgICAgICAgICAgICAgdG9maWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZy9zZXJ2ZXIucG9saWN5Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJvZ3JhbW1hdGljTG9naW4vZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb2dyYW1tYXRpY0xvZ2luL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBkNWY4YjVlLi4yYjAxY2FkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJvZ3JhbW1hdGljTG9naW4vZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wcm9ncmFtbWF0aWNMb2dpbi9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTI3LDcgKzI3LDcgQEAKICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb2dyYW1tYXRpY0xvZ2luL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wcm9ncmFtbWF0aWNMb2dpbi9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggOGJiN2I5OC4uNDM1OTk4NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb2dyYW1tYXRpY0xvZ2luL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJvZ3JhbW1hdGljTG9naW4vc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZyB1c2VyID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInVzZXIiKTsKLSAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInBhc3N3b3JkIik7IAorICAgICAgICBTdHJpbmcgcGFzc3dvcmQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigicGFzc3dvcmQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbdXNlcl0gIiArIHVzZXIgKyAiIFtwYXNzd29yZF0gIiArIHBhc3N3b3JkKTsKICAgICAgICAgUHJvZ3JhbW1hdGljTG9naW4gbG9naW4gPSBuZXcgUHJvZ3JhbW1hdGljTG9naW4oKTsKICAgICAgICAgaWYgKCFsb2dpbi5sb2dpbih1c2VyLCBwYXNzd29yZCwgcmVxdWVzdCwgcmVzcG9uc2UpLmJvb2xlYW5WYWx1ZSgpKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJveHlBdXRoQ2VydC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJveHlBdXRoQ2VydC9XZWJUZXN0LmphdmEKaW5kZXggMDJlODZkYi4uNDVmNWE3MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb3h5QXV0aENlcnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wcm94eUF1dGhDZXJ0L1dlYlRlc3QuamF2YQpAQCAtNjYsNyArNjYsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MTg4OTMyIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNzUsOCArNzUsOCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCi0gICAgICAgIHRyeSB7IAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJveHlBdXRoQ2VydC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb3h5QXV0aENlcnQvYnVpbGQucHJvcGVydGllcwppbmRleCA0ZTBhODAzLi5iYTlhYzRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJveHlBdXRoQ2VydC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wcm94eUF1dGhDZXJ0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcHJveHktYXV0aC1jZXJ0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJveHlBdXRoQ2VydC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJveHlBdXRoQ2VydC9idWlsZC54bWwKaW5kZXggZmZiNjY1Ny4uZGYyZjg4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb3h5QXV0aENlcnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wcm94eUF1dGhDZXJ0L2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTggKzQ0LDE4IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgpAQCAtNzEsNyArNzEsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04MywxMCArODMsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb3h5S2V5c2l6ZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJveHlLZXlzaXplL1dlYlRlc3QuamF2YQppbmRleCAwYWQyMTFlLi4wZDk3MDIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJveHlLZXlzaXplL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJveHlLZXlzaXplL1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MTcwNDUwIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTAsOCArNTAsOCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCi0gICAgICAgIHRyeSB7IAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VKc3AoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CkBAIC02MCw3ICs2MCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZUpzcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBudWxsOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBudWxsOwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiUHJveHkta2V5c2l6ZTogNTEyXG4iLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJveHlLZXlzaXplL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJveHlLZXlzaXplL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYmM0MmUxMi4uYzM5ZWZkMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb3h5S2V5c2l6ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wcm94eUtleXNpemUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1wcm94eS1rZXlzaXplIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJveHlLZXlzaXplL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wcm94eUtleXNpemUvYnVpbGQueG1sCmluZGV4IGZmYjY2NTcuLmRmMmY4OGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wcm94eUtleXNpemUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wcm94eUtleXNpemUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxOCArNDQsMTggQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CkBAIC03MSw3ICs3MSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTgzLDEwICs4MywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcXVlcnlTdHJpbmcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3F1ZXJ5U3RyaW5nL1dlYlRlc3QuamF2YQppbmRleCA5NWMxOGVjLi4zN2M4OGY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcXVlcnlTdHJpbmcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9xdWVyeVN0cmluZy9XZWJUZXN0LmphdmEKQEAgLTM1LDEyICszNSwxMiBAQAogCiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7CiAgICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICAKKwogICAgICAgICBnb0dldChob3N0LCBwb3J0LCAiVEVTVCIsIGNvbnRleHRSb290ICsgIi9TZXJ2bGV0VGVzdCIgKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGdvR2V0KFN0cmluZyBob3N0LCBpbnQgcG9ydCwgCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBnb0dldChTdHJpbmcgaG9zdCwgaW50IHBvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0LCBTdHJpbmcgY29udGV4dFBhdGgpIHsKIAogICAgICAgICB0cnl7CkBAIC00OCwxMyArNDgsMTMgQEAKICAgICAgICAgICAgIFNvY2tldCBzID0gbmV3IFNvY2tldChob3N0LCBwb3J0KTsKICAgICAgICAgICAgIHMuc2V0U29UaW1lb3V0KDUwMDApOwogICAgICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gcy5nZXRPdXRwdXRTdHJlYW0oKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjb250ZXh0UGF0aCArPSAiP3VybD0iICsgY29udGV4dFBhdGg7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMVxuIikpOwogICAgICAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMVxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiSG9zdDogbG9jYWxob3N0XG4iLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHMuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZTogIiArIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHRpbWUpKTsKICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKQEAgLTY0LDE2ICs2NCwxNiBAQAogICAgICAgICAgICAgd2hpbGUgKChsaW5lID0gYmlzLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBpbmRleCA9IGxpbmUuaW5kZXhPZihyZXN1bHQpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZlciByZXNwb25zZV0iICsgbGluZSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpbnQgcG9zID0gbGluZS5pbmRleE9mKCJMb2NhdGlvbiIpOwogICAgICAgICAgICAgICAgIGlmIChwb3MgIT0gLTEpewogICAgICAgICAgICAgICAgICAgIGNvbnRleHRQYXRoID0gbGluZS5zdWJzdHJpbmcocG9zICsgIkxvY2F0aW9uOiIubGVuZ3RoKCkpLnRyaW0oKTsKICAgICAgICAgICAgICAgICAgICBiaXMuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgICBpcy5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgIGJyZWFrOyAKKyAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgcyA9IG5ldyBTb2NrZXQoaG9zdCwgcG9ydCk7CiAgICAgICAgICAgICBvcyA9IHMuZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMVxuIikpOwpAQCAtODUsMjEgKzg1LDIxIEBACiAgICAgICAgICAgICB3aGlsZSAoKGxpbmUgPSBiaXMucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGluZGV4ID0gbGluZS5pbmRleE9mKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbUmVkaXJlY3QgcmVzcG9uc2VdIiArIGxpbmUpOwotICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBsaW5lLmluZGV4T2YoIjoiKTsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0YXR1cyA9IGxpbmUuc3Vic3RyaW5nKGluZGV4KzEpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmVxdWFsc0lnbm9yZUNhc2UoIlBBU1MiKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJURVNUX05BTUUiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcXVlcnlTdHJpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9xdWVyeVN0cmluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDdkMmI0ZmYuLjE3YWY0ZDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9xdWVyeVN0cmluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9xdWVyeVN0cmluZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcXVlcnlTdHJpbmciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXF1ZXJ5U3RyaW5nIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1xdWVyeVN0cmluZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3F1ZXJ5U3RyaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9xdWVyeVN0cmluZy9idWlsZC54bWwKaW5kZXggODdkYmQ0Yy4uNWExZjBjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3F1ZXJ5U3RyaW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcXVlcnlTdHJpbmcvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDEwICs1MywxMCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3F1ZXJ5U3RyaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9xdWVyeVN0cmluZy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggM2RmZjljYi4uNGVjNjJmYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3F1ZXJ5U3RyaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcXVlcnlTdHJpbmcvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwxOCArMjIsMTggQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2Vzc2lvbi1jb25maWc+CiAgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+MTA8L3Nlc3Npb24tdGltZW91dD4KICAgICA8L3Nlc3Npb24tY29uZmlnPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3F1ZXJ5U3RyaW5nL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9xdWVyeVN0cmluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggZTQ5Mjg5Zi4uMDc0Y2Q1ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3F1ZXJ5U3RyaW5nL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcXVlcnlTdHJpbmcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0yNSwxMyArMjUsMTMgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzUmVkaXJlY3RlZCA9IGZhbHNlOwogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0gIiArIGNvbnRleHQuZ2V0TWFqb3JWZXJzaW9uKCkpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpAQCAtMzksMTQgKzM5LDE0IEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlcXVlc3RVcmk6ICIgKyByZXF1ZXN0LmdldFJlcXVlc3RVUkkoKSk7Ci0gICAgICAgCisKICAgICAgICAgaWYgKCFpc1JlZGlyZWN0ZWQpewogICAgICAgICAgICAgU3RyaW5nIHVybCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJ1cmwiKSArICI/VEVTVD1QQVNTIjsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1VSTF0gIiArIHVybCk7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgICAgICBvdXQuZmx1c2goKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgIAorCiAgICAgICAgIG91dC5wcmludGxuKCJURVNUOiIgKyByZXF1ZXN0LmdldFBhcmFtZXRlcigiVEVTVCIpKTsKICAgICAgICAgb3V0LmZsdXNoKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRMaW5lSU9FeGNlcHRpb24vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRMaW5lSU9FeGNlcHRpb24vV2ViVGVzdC5qYXZhCmluZGV4IGVhYWUyMDYuLjgxYjI3NWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkTGluZUlPRXhjZXB0aW9uL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZExpbmVJT0V4Y2VwdGlvbi9XZWJUZXN0LmphdmEKQEAgLTIxLDIyICsyMSwyMiBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAxOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICAvKioKLSAgICAgKiBGaXggZm9yIEJ1Z3ppbGxhIEJ1ZyAyODk1OSBJT0V4Y2VwdGlvbiB1c2luZyBDb3lvdGVSZWFkZXIucmVhZExpbmUoKSAKKyAgICAgKiBGaXggZm9yIEJ1Z3ppbGxhIEJ1ZyAyODk1OSBJT0V4Y2VwdGlvbiB1c2luZyBDb3lvdGVSZWFkZXIucmVhZExpbmUoKQogICAgICAqIGJ1dCBub3QgdXNpbmcgLnJlYWQoKQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIAogICAgICAgICAvLyBUaGUgc3RhdCByZXBvcnRlciB3cml0ZXMgb3V0IHRoZSB0ZXN0IGluZm8gYW5kIHJlc3VsdHMKICAgICAgICAgLy8gaW50byB0aGUgdG9wLWxldmVsIHF1aWNrbG9vayBkaXJlY3RvcnkgZHVyaW5nIGEgcnVuLgotICAgICAgCisKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiU3RhbmRhbG9uZSB0ZXN0IGZvciBCdWd6aWxsYSAyODk1OSIpOwogCiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKQEAgLTQ1LDEzICs0NSwxMyBAQAogCiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7CiAgICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZ29HZXQoaG9zdCwgcG9ydCwgInJlYWRsaW5lIiwgY29udGV4dFJvb3QgKyAiL1NlcnZsZXRUZXN0MiIgKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoY291bnQgIT0gRVhQRUNURURfQ09VTlQpewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJyZWFkTGluZUlPRXhjZXB0aW9uIFVOUFJFRElDVEVELUZBSUxVUkUiLCBzdGF0LkZBSUwpOwotICAgICAgICAgICAgfSAgICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInJlYWRMaW5lSU9FeGNlcHRpb24gVU5QUkVESUNURUQtRkFJTFVSRSIsIHN0YXQuRkFJTCk7CkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKSk7CiAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjBcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHMuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CkBAIC04MiwyNCArODIsMjQgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZU51bSArICI6ICAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdGF0dXMgPSBsaW5lLnN1YnN0cmluZyhpbmRleCsyKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5lcXVhbHNJZ25vcmVDYXNlKCJQQVNTRUQiKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgICAgICB9IAotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbGluZU51bSsrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoY291bnQgPT0gMTApewotICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItcmVhZExpbmVJT0V4Y2VwdGlvbjogcmVhZExpbmUiIAorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItcmVhZExpbmVJT0V4Y2VwdGlvbjogcmVhZExpbmUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXJlYWRMaW5lSU9FeGNlcHRpb246IHJlYWRMaW5lICIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHN0YXQuRkFJTCk7ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXJlYWRMaW5lSU9FeGNlcHRpb246IHJlYWRMaW5lICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY291bnQgPSAxOwogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgIH0KICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkTGluZUlPRXhjZXB0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZExpbmVJT0V4Y2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDdhM2YzM2MuLjg5Y2FkZDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkTGluZUlPRXhjZXB0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRMaW5lSU9FeGNlcHRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlYWRMaW5lSU9FeGNlcHRpb24iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlYWRMaW5lSU9FeGNlcHRpb24iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLXJlYWRMaW5lSU9FeGNlcHRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkTGluZUlPRXhjZXB0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkTGluZUlPRXhjZXB0aW9uL2J1aWxkLnhtbAppbmRleCBjZjkzZmE0Li4yODI3NWE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZExpbmVJT0V4Y2VwdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRMaW5lSU9FeGNlcHRpb24vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDEwICs1MywxMCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRMaW5lV2l0aE1heExlbmd0aC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZExpbmVXaXRoTWF4TGVuZ3RoL1dlYlRlc3QuamF2YQppbmRleCBiZDk5ZDkwLi41NjcwN2ZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZExpbmVXaXRoTWF4TGVuZ3RoL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZExpbmVXaXRoTWF4TGVuZ3RoL1dlYlRlc3QuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIGxlbmd0aCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1szXSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHJlYWRMaW5lIHdpdGggbWF4IGxlbmd0aCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkTGluZVdpdGhNYXhMZW5ndGgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkTGluZVdpdGhNYXhMZW5ndGgvYnVpbGQucHJvcGVydGllcwppbmRleCAwMGIxYjg5Li42NDFmYzJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZExpbmVXaXRoTWF4TGVuZ3RoL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRMaW5lV2l0aE1heExlbmd0aC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlYWRMaW5lLXdpdGgtbWF4LWxlbmd0aCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRMaW5lV2l0aE1heExlbmd0aC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZExpbmVXaXRoTWF4TGVuZ3RoL2J1aWxkLnhtbAppbmRleCA4YmFiY2JhLi5kZDQyMDk3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZExpbmVXaXRoTWF4TGVuZ3RoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZExpbmVXaXRoTWF4TGVuZ3RoL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjIgKzQ0LDIyIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcyLDEwICs3MiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9XZWJUZXN0LmphdmEKaW5kZXggM2YwYmZiMS4uN2NjNTc3NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9XZWJUZXN0LmphdmEKQEAgLTIyLDEwICsyMiwxMCBAQAogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdAogewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAzOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTM0LDcgKzM0LDcgQEAKIAogICAgICAgICAvLyBUaGUgc3RhdCByZXBvcnRlciB3cml0ZXMgb3V0IHRoZSB0ZXN0IGluZm8gYW5kIHJlc3VsdHMKICAgICAgICAgLy8gaW50byB0aGUgdG9wLWxldmVsIHF1aWNrbG9vayBkaXJlY3RvcnkgZHVyaW5nIGEgcnVuLgotICAgICAgCisKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiaHR0cC1saXN0ZW5lciByZWFkZXItdGhyZWFkcyB1bml0IHRlc3RzLiIpOwogCiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKQEAgLTQzLDcgKzQzLDcgQEAKIAogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwogICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsICJGSUxURVIiLCBjb250ZXh0Um9vdCArICIvU2VydmxldFRlc3QiICk7CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CkBAIC01Miw3ICs1Miw3IEBACiAKICAgICAgICAgaWYgKGNvdW50ICE9IEVYUEVDVEVEX0NPVU5UKXsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItcmVhZGVyU2VsZWN0b3JzQ29uZmlnIiwgc3RhdC5GQUlMKTsKLSAgICAgICAgfSAgICAgICAgICAgCisgICAgICAgIH0KICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYi9zdGFuZGFsb25ld2FyLS0tPiBleHBlY3QgIiArIEVYUEVDVEVEX0NPVU5UKTsKICAgICB9CiAKQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMVxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCgiSG9zdDogbG9jYWxob3N0XG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZTogIiArIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHRpbWUpKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwpAQCAtODMsMTcgKzgzLDE3IEBACiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gbGluZS5pbmRleE9mKCI6Iik7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdGF0dXMgPSBsaW5lLnN1YnN0cmluZyhpbmRleCsxKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5lcXVhbHNJZ25vcmVDYXNlKCJQQVNTIikpewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1yZWFkZXJTZWxlY3RvcnNDb25maWc6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItcmVhZGVyU2VsZWN0b3JzQ29uZmlnOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuRkFJTCk7ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItcmVhZGVyU2VsZWN0b3JzQ29uZmlnOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKICAgICAgICAgfQogICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDExMDUxY2IuLjJlYmE4YzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyU2VsZWN0b3JzQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZWFkZXJTZWxlY3RvcnNDb25maWciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlYWRlclNlbGVjdG9yc0NvbmZpZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItcmVhZGVyU2VsZWN0b3JzQ29uZmlnIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyU2VsZWN0b3JzQ29uZmlnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvYnVpbGQueG1sCmluZGV4IDBhOTk3MjYuLjNiZGM3MTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC02MCwxMCArNjAsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTcxLDEwICs3MSwxMCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTgyLDcgKzgyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtOTQsMTAgKzk0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyU2VsZWN0b3JzQ29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBmOTg2MWRmLi4xZjg0Y2VlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyU2VsZWN0b3JzQ29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyU2VsZWN0b3JzQ29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMzcgKzIyLDM3IEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8ZmlsdGVyPgogICAgICAgICA8ZmlsdGVyLW5hbWU+RmlsdGVyVGVzdDwvZmlsdGVyLW5hbWU+CiAgICAgICAgIDxmaWx0ZXItY2xhc3M+dGVzdC5GaWx0ZXJUZXN0PC9maWx0ZXItY2xhc3M+Ci0gICAgPC9maWx0ZXI+ICAgIAotICAgICAgICAKKyAgICA8L2ZpbHRlcj4KKwogICAgIDxmaWx0ZXItbWFwcGluZz4KICAgICAgICAgPGZpbHRlci1uYW1lPkZpbHRlclRlc3Q8L2ZpbHRlci1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgogICAgICAgICA8ZGlzcGF0Y2hlcj5SRVFVRVNUPC9kaXNwYXRjaGVyPgogICAgICAgICA8ZGlzcGF0Y2hlcj5JTkNMVURFPC9kaXNwYXRjaGVyPgotICAgICAgICA8ZGlzcGF0Y2hlcj5GT1JXQVJEPC9kaXNwYXRjaGVyPiAgCi0gICAgICAgIDxkaXNwYXRjaGVyPkVSUk9SPC9kaXNwYXRjaGVyPiAKKyAgICAgICAgPGRpc3BhdGNoZXI+Rk9SV0FSRDwvZGlzcGF0Y2hlcj4KKyAgICAgICAgPGRpc3BhdGNoZXI+RVJST1I8L2Rpc3BhdGNoZXI+CiAgICAgPC9maWx0ZXItbWFwcGluZz4KLSAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3QyPC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QyPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3QyPC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDM8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpAQCAtNjUsNyArNjUsNyBAQAogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mzwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0MzwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2Vzc2lvbi1jb25maWc+CiAgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+MTA8L3Nlc3Npb24tdGltZW91dD4KICAgICA8L3Nlc3Npb24tY29uZmlnPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEKaW5kZXggZmNmMzYyNC4uZWVjOTU3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyU2VsZWN0b3JzQ29uZmlnL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhCkBAIC0xOSwyNSArMTksMjUgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogcHVibGljIGNsYXNzIEZpbHRlclRlc3QgaW1wbGVtZW50cyBGaWx0ZXJ7Ci0gICAgCisKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuZGVzdHJveV0iKTsKLSAgICB9ICAgIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwgRmlsdGVyQ2hhaW4gZmlsdGVyQ2hhaW4pIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLCBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW0ZpbHRlci5kb0ZpbHRlcl0iKTsKLSAgICAgICAgICAKKwogICAgICAgICAoKEh0dHBTZXJ2bGV0UmVxdWVzdClyZXF1ZXN0KS5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiUEFTUyIpOwogICAgICAgICBmaWx0ZXJDaGFpbi5kb0ZpbHRlcihyZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgICAgIAotICAgIH0gICAgCi0gICAgCi0gICAgCisKKyAgICB9CisKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoamFrYXJ0YS5zZXJ2bGV0LkZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW0ZpbHRlci5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gZmlsdGVyQ29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyU2VsZWN0b3JzQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IGQ0YTMxNzQuLmRhYTgwNTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC00NiwxMyArNDYsMTMgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IGltcGxlbWVudHMgSHR0cFNlc3Npb25MaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdICIgKyBjb250ZXh0LmdldE1ham9yVmVyc2lvbigpKTsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKQEAgLTYwLDIzICs2MCwyMyBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5kb1Bvc3RdIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSLVJFUVVFU1QiLCByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUiIpKTsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiRkFJTCIpOyAgICAgICAgCi0gICAgICAgIAkKKyAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiRkFJTCIpOworCiAgICAgICAgIFJlcXVlc3REaXNwYXRjaGVyIHJkID0gY29udGV4dC5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL1NlcnZsZXRUZXN0MiIpOwotICAgICAgICByZC5mb3J3YXJkKHJlcXVlc3QsIHJlc3BvbnNlKTsgICAgICAgCisgICAgICAgIHJkLmZvcndhcmQocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25DcmVhdGVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25DcmVhdGVkXSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25EZXN0cm95ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkRlc3Ryb3llZF0iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdHRyaWJ1dGVzOiAiICsgaHR0cFNlc3Npb25FdmVudC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJ0ZXN0IikpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCmluZGV4IGRiMmNiNTAuLjAwNzc1YTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyU2VsZWN0b3JzQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEKQEAgLTI1LDEwICsyNSwxMCBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0MiBleHRlbmRzIEh0dHBTZXJ2bGV0IGltcGxlbWVudHMgSHR0cFNlc3Npb25MaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDIuaW5pdF0iKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0Mi5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgfQogCkBAIC0zNywyMyArMzcsMjMgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQyLmRvUG9zdF0iKTsKLSAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSLUZPUldBUkQiLHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSIikpOwotICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7ICAgICAgICAKLSAgICAgICAgCisgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIkZBSUwiKTsKKwogICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciByZCA9IHJlcXVlc3QuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9TZXJ2bGV0VGVzdDMiKTsKLSAgICAgICAgcmQuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7ICAgICAKKyAgICAgICAgcmQuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQotIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkNyZWF0ZWRdIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkRlc3Ryb3llZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uRGVzdHJveWVkXSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF0dHJpYnV0ZXM6ICIgKyBodHRwU2Vzc2lvbkV2ZW50LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoInRlc3QiKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyU2VsZWN0b3JzQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyU2VsZWN0b3JzQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEKaW5kZXggM2U4ZDI1Yi4uZTc4ZmVjMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YQpAQCAtNDYsMTEgKzQ2LDExIEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QzIGV4dGVuZHMgSHR0cFNlcnZsZXR7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDMuaW5pdF0iKTsgICAgICAgIAotICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7ICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDMuaW5pdF0iKTsKKyAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpAQCAtNTgsMTIgKzU4LDEyIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0My5kb1Bvc3RdIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIG91dC5wcmludGxuKCJGSUxURVItUkVRVUVTVDoiICsgcmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVItUkVRVUVTVCIpKTsKICAgICAgICAgb3V0LnByaW50bG4oIkZJTFRFUi1GT1JXQVJEOiIgKyByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUi1GT1JXQVJEIikpOwogICAgICAgICBvdXQucHJpbnRsbigiRklMVEVSLUlOQ0xVREU6IiArIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSIikpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9zZXJ2bGV0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvc2VydmxldC9XZWJUZXN0LmphdmEKaW5kZXggODM1ZDU2ZS4uZTNjN2M3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9zZXJ2bGV0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyU2VsZWN0b3JzQ29uZmlnL3NlcnZsZXQvV2ViVGVzdC5qYXZhCkBAIC0yMiwxMCArMjIsMTAgQEAKIAogcHVibGljIGNsYXNzIFdlYlRlc3QKIHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMzsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC0zNCw3ICszNCw3IEBACiAKICAgICAgICAgLy8gVGhlIHN0YXQgcmVwb3J0ZXIgd3JpdGVzIG91dCB0aGUgdGVzdCBpbmZvIGFuZCByZXN1bHRzCiAgICAgICAgIC8vIGludG8gdGhlIHRvcC1sZXZlbCBxdWlja2xvb2sgZGlyZWN0b3J5IGR1cmluZyBhIHJ1bi4KLSAgICAgIAorCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImh0dHAtbGlzdGVuZXIgcmVhZGVyLXRocmVhZHMgdW5pdCB0ZXN0cy4iKTsKIAogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CkBAIC00Myw3ICs0Myw3IEBACiAKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0UykuaW50VmFsdWUoKTsKICAgICAgICAgU3RyaW5nIG5hbWU7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBnb0dldChob3N0LCBwb3J0LCAiRklMVEVSIiwgY29udGV4dFJvb3QgKyAiL1NlcnZsZXRUZXN0IiApOwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewpAQCAtNTIsNyArNTIsNyBAQAogCiAgICAgICAgIGlmIChjb3VudCAhPSBFWFBFQ1RFRF9DT1VOVCl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXJlYWRlclRocmVhZHNDb25maWciLCBzdGF0LkZBSUwpOwotICAgICAgICB9ICAgICAgICAgICAKKyAgICAgICAgfQogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2ViL3N0YW5kYWxvbmV3YXItLS0+IGV4cGVjdCAiICsgRVhQRUNURURfQ09VTlQpOwogICAgIH0KIApAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICBvcy53cml0ZSgoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4xXG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoKCJIb3N0OiBsb2NhbGhvc3RcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHMuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaW1lOiAiICsgKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gdGltZSkpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CkBAIC04MiwxNyArODIsMTcgQEAKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBsaW5lLmluZGV4T2YoIjoiKTsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0YXR1cyA9IGxpbmUuc3Vic3RyaW5nKGluZGV4KzEpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmVxdWFsc0lnbm9yZUNhc2UoIlBBU1MiKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXJlYWRlclRocmVhZHNDb25maWc6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItcmVhZGVyVGhyZWFkc0NvbmZpZzogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LkZBSUwpOyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXJlYWRlclRocmVhZHNDb25maWc6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewogICAgICAgICB9CiAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyVGhyZWFkc0NvbmZpZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyVGhyZWFkc0NvbmZpZy9XZWJUZXN0LmphdmEKaW5kZXggYTkwNGQwMC4uNzcwYTUyZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJUaHJlYWRzQ29uZmlnL1dlYlRlc3QuamF2YQpAQCAtMjIsMTAgKzIyLDEwIEBACiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0CiB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDM7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApAQCAtMzQsNyArMzQsNyBAQAogCiAgICAgICAgIC8vIFRoZSBzdGF0IHJlcG9ydGVyIHdyaXRlcyBvdXQgdGhlIHRlc3QgaW5mbyBhbmQgcmVzdWx0cwogICAgICAgICAvLyBpbnRvIHRoZSB0b3AtbGV2ZWwgcXVpY2tsb29rIGRpcmVjdG9yeSBkdXJpbmcgYSBydW4uCi0gICAgICAKKwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJodHRwLWxpc3RlbmVyIHJlYWRlci10aHJlYWRzIHVuaXQgdGVzdHMuIik7CiAKICAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwpAQCAtNDMsNyArNDMsNyBAQAogCiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7CiAgICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZ29HZXQoaG9zdCwgcG9ydCwgIkZJTFRFUiIsIGNvbnRleHRSb290ICsgIi9TZXJ2bGV0VGVzdCIgKTsKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKQEAgLTUyLDcgKzUyLDcgQEAKIAogICAgICAgICBpZiAoY291bnQgIT0gRVhQRUNURURfQ09VTlQpewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1yZWFkZXJUaHJlYWRzQ29uZmlnIiwgc3RhdC5GQUlMKTsKLSAgICAgICAgfSAgICAgICAgICAgCisgICAgICAgIH0KICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYi9zdGFuZGFsb25ld2FyLS0tPiBleHBlY3QgIiArIEVYUEVDVEVEX0NPVU5UKTsKICAgICB9CiAKQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMVxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCgiSG9zdDogbG9jYWxob3N0XG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZTogIiArIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHRpbWUpKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwpAQCAtODMsMTcgKzgzLDE3IEBACiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gbGluZS5pbmRleE9mKCI6Iik7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdGF0dXMgPSBsaW5lLnN1YnN0cmluZyhpbmRleCsxKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5lcXVhbHNJZ25vcmVDYXNlKCJQQVNTIikpewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1yZWFkZXJUaHJlYWRzQ29uZmlnOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXJlYWRlclRocmVhZHNDb25maWc6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5GQUlMKTsgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1yZWFkZXJUaHJlYWRzQ29uZmlnOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKICAgICAgICAgfQogICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJUaHJlYWRzQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggM2Y4Yjc4Ni4uOWZjMWU5OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyVGhyZWFkc0NvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVhZGVyVGhyZWFkc0NvbmZpZyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVhZGVyVGhyZWFkc0NvbmZpZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItcmVhZGVyVGhyZWFkc0NvbmZpZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvYnVpbGQueG1sCmluZGV4IDBhOTk3MjYuLjNiZGM3MTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJUaHJlYWRzQ29uZmlnL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyVGhyZWFkc0NvbmZpZy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTYwLDEwICs2MCwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtODIsNyArODIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC05NCwxMCArOTQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyVGhyZWFkc0NvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyVGhyZWFkc0NvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZjk4NjFkZi4uMWY4NGNlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJUaHJlYWRzQ29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMzcgKzIyLDM3IEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8ZmlsdGVyPgogICAgICAgICA8ZmlsdGVyLW5hbWU+RmlsdGVyVGVzdDwvZmlsdGVyLW5hbWU+CiAgICAgICAgIDxmaWx0ZXItY2xhc3M+dGVzdC5GaWx0ZXJUZXN0PC9maWx0ZXItY2xhc3M+Ci0gICAgPC9maWx0ZXI+ICAgIAotICAgICAgICAKKyAgICA8L2ZpbHRlcj4KKwogICAgIDxmaWx0ZXItbWFwcGluZz4KICAgICAgICAgPGZpbHRlci1uYW1lPkZpbHRlclRlc3Q8L2ZpbHRlci1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgogICAgICAgICA8ZGlzcGF0Y2hlcj5SRVFVRVNUPC9kaXNwYXRjaGVyPgogICAgICAgICA8ZGlzcGF0Y2hlcj5JTkNMVURFPC9kaXNwYXRjaGVyPgotICAgICAgICA8ZGlzcGF0Y2hlcj5GT1JXQVJEPC9kaXNwYXRjaGVyPiAgCi0gICAgICAgIDxkaXNwYXRjaGVyPkVSUk9SPC9kaXNwYXRjaGVyPiAKKyAgICAgICAgPGRpc3BhdGNoZXI+Rk9SV0FSRDwvZGlzcGF0Y2hlcj4KKyAgICAgICAgPGRpc3BhdGNoZXI+RVJST1I8L2Rpc3BhdGNoZXI+CiAgICAgPC9maWx0ZXItbWFwcGluZz4KLSAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3QyPC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QyPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3QyPC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDM8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpAQCAtNjUsNyArNjUsNyBAQAogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mzwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0MzwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2Vzc2lvbi1jb25maWc+CiAgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+MTA8L3Nlc3Npb24tdGltZW91dD4KICAgICA8L3Nlc3Npb24tY29uZmlnPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyVGhyZWFkc0NvbmZpZy9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQppbmRleCBmY2YzNjI0Li5lZWM5NTdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyVGhyZWFkc0NvbmZpZy9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyVGhyZWFkc0NvbmZpZy9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQpAQCAtMTksMjUgKzE5LDI1IEBACiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIHB1YmxpYyBjbGFzcyBGaWx0ZXJUZXN0IGltcGxlbWVudHMgRmlsdGVyewotICAgIAorCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmRlc3Ryb3ldIik7Ci0gICAgfSAgICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIEZpbHRlckNoYWluIGZpbHRlckNoYWluKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuZG9GaWx0ZXJdIik7Ci0gICAgICAgICAgCisKICAgICAgICAgKChIdHRwU2VydmxldFJlcXVlc3QpcmVxdWVzdCkuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIlBBU1MiKTsKICAgICAgICAgZmlsdGVyQ2hhaW4uZG9GaWx0ZXIocmVxdWVzdCwgcmVzcG9uc2UpOwotICAgICAgICAKLSAgICB9ICAgIAotICAgIAotICAgIAorCisgICAgfQorCisKICAgICBwdWJsaWMgdm9pZCBpbml0KGpha2FydGEuc2VydmxldC5GaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGZpbHRlckNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IGQ0YTMxNzQuLmRhYTgwNTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJUaHJlYWRzQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyVGhyZWFkc0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTQ2LDEzICs0NiwxMyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgaW1wbGVtZW50cyBIdHRwU2Vzc2lvbkxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0gIiArIGNvbnRleHQuZ2V0TWFqb3JWZXJzaW9uKCkpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpAQCAtNjAsMjMgKzYwLDIzIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVItUkVRVUVTVCIsIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSIikpOwotICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7ICAgICAgICAKLSAgICAgICAgCQorICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7CisKICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmQgPSBjb250ZXh0LmdldFJlcXVlc3REaXNwYXRjaGVyKCIvU2VydmxldFRlc3QyIik7Ci0gICAgICAgIHJkLmZvcndhcmQocmVxdWVzdCwgcmVzcG9uc2UpOyAgICAgICAKKyAgICAgICAgcmQuZm9yd2FyZChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkNyZWF0ZWRdIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkRlc3Ryb3llZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uRGVzdHJveWVkXSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF0dHJpYnV0ZXM6ICIgKyBodHRwU2Vzc2lvbkV2ZW50LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoInRlc3QiKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyVGhyZWFkc0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YQppbmRleCBkYjJjYjUwLi4wMDc3NWE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyVGhyZWFkc0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJUaHJlYWRzQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEKQEAgLTI1LDEwICsyNSwxMCBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0MiBleHRlbmRzIEh0dHBTZXJ2bGV0IGltcGxlbWVudHMgSHR0cFNlc3Npb25MaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDIuaW5pdF0iKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0Mi5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgfQogCkBAIC0zNywyMyArMzcsMjMgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQyLmRvUG9zdF0iKTsKLSAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSLUZPUldBUkQiLHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSIikpOwotICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7ICAgICAgICAKLSAgICAgICAgCisgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIkZBSUwiKTsKKwogICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciByZCA9IHJlcXVlc3QuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9TZXJ2bGV0VGVzdDMiKTsKLSAgICAgICAgcmQuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7ICAgICAKKyAgICAgICAgcmQuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQotIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkNyZWF0ZWRdIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkRlc3Ryb3llZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uRGVzdHJveWVkXSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF0dHJpYnV0ZXM6ICIgKyBodHRwU2Vzc2lvbkV2ZW50LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoInRlc3QiKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyVGhyZWFkc0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YQppbmRleCAzZThkMjViLi5lNzhmZWMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyVGhyZWFkc0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJUaHJlYWRzQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEKQEAgLTQ2LDExICs0NiwxMSBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0MyBleHRlbmRzIEh0dHBTZXJ2bGV0ewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQzLmluaXRdIik7ICAgICAgICAKLSAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOyAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQzLmluaXRdIik7CisgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKQEAgLTU4LDEyICs1OCwxMiBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDMuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICBvdXQucHJpbnRsbigiRklMVEVSLVJFUVVFU1Q6IiArIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSLVJFUVVFU1QiKSk7CiAgICAgICAgIG91dC5wcmludGxuKCJGSUxURVItRk9SV0FSRDoiICsgcmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVItRk9SV0FSRCIpKTsKICAgICAgICAgb3V0LnByaW50bG4oIkZJTFRFUi1JTkNMVURFOiIgKyByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUiIpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWNvbmZpZ0RlZmF1bHRXZWJNb2R1bGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlY29uZmlnRGVmYXVsdFdlYk1vZHVsZS9XZWJUZXN0LmphdmEKaW5kZXggN2I4NTU5Yy4uZDc5YWRjMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlY29uZmlnRGVmYXVsdFdlYk1vZHVsZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlY29uZmlnRGVmYXVsdFdlYk1vZHVsZS9XZWJUZXN0LmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVjb25maWdEZWZhdWx0V2ViTW9kdWxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVjb25maWdEZWZhdWx0V2ViTW9kdWxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDJhZDRkYy4uOGI1ZmEyYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlY29uZmlnRGVmYXVsdFdlYk1vZHVsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWNvbmZpZ0RlZmF1bHRXZWJNb2R1bGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlY29uZmlnRGVmYXVsdFdlYk1vZHVsZSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVjb25maWdEZWZhdWx0V2ViTW9kdWxlIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1yZWNvbmZpZ0RlZmF1bHRXZWJNb2R1bGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWNvbmZpZ0RlZmF1bHRXZWJNb2R1bGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlY29uZmlnRGVmYXVsdFdlYk1vZHVsZS9idWlsZC54bWwKaW5kZXggMGNjNGI0ZS4uN2VhNDQ5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlY29uZmlnRGVmYXVsdFdlYk1vZHVsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlY29uZmlnRGVmYXVsdFdlYk1vZHVsZS9idWlsZC54bWwKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgICAgICAgIHZhbHVlPSItLWxpc3RlbmVyYWRkcmVzcyAke2h0dHAuYWRkcmVzc30gLS1saXN0ZW5lcnBvcnQgJHtodHRwLmFsdGVybmF0ZS5wb3J0fSAtLWRlZmF1bHR2cyBzZXJ2ZXIzIGh0dHAtbGlzdGVuZXItc2VydmVyIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS12aXJ0dWFsLXNlcnZlciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iY3JlYXRlLXZpcnR1YWwtc2VydmVyIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RQb3J0L1dlYlRlc3QuamF2YQppbmRleCAwZjYzYjMxLi4wM2FiZDhkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RQb3J0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RQb3J0L1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIHRydXN0U3RvcmVQYXRoID0gYXJnc1szXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQnVndHJhcSA0OTQ2NzM5Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNjksNyArNjksNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICB1cmwgPSBuZXcgVVJMKGNvbm4uZ2V0SGVhZGVyRmllbGQoIkxvY2F0aW9uIikpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVkaXJlY3RlZCB0bzogIiArIHVybC50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICBTU0xDb250ZXh0IGN0eCA9IFNTTENvbnRleHQuZ2V0SW5zdGFuY2UoIlRMUyIpOyAKKyAgICAgICAgICAgICAgICBTU0xDb250ZXh0IGN0eCA9IFNTTENvbnRleHQuZ2V0SW5zdGFuY2UoIlRMUyIpOwogICAgICAgICAgICAgICAgIGN0eC5pbml0KG51bGwsIGdldFRydXN0TWFuYWdlcnModHJ1c3RTdG9yZVBhdGgpLCBudWxsKTsKICAgICAgICAgICAgICAgICBIdHRwc1VSTENvbm5lY3Rpb24gaHR0cHNDb25uID0gKEh0dHBzVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgICAgICAgICAgaHR0cHNDb25uLnNldFNTTFNvY2tldEZhY3RvcnkoY3R4LmdldFNvY2tldEZhY3RvcnkoKSk7CkBAIC0xMjgsNiArMTI4LDYgQEAKIAogICAgICAgICBwdWJsaWMgYm9vbGVhbiB2ZXJpZnkoU3RyaW5nIGhvc3RuYW1lLCBTU0xTZXNzaW9uIHNlc3Npb24pIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotCX0KKyAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDJlMWZiZDAuLjI1MzlhNTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFBvcnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RQb3J0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZWRpcmVjdC1wb3J0Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZWRpcmVjdC1wb3J0Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RQb3J0L2J1aWxkLnhtbAppbmRleCA4YWNjNTA3Li5lMGY1NDFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RQb3J0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RQb3J0L2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTkgKzQ0LDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24scHJlcGFyZS1rZXlzdG9yZS1jb21tb24iPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RQb3J0RHluYW1pY0NvbmZpZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydER5bmFtaWNDb25maWcvYnVpbGQucHJvcGVydGllcwppbmRleCAyYzA4MWMwLi5jMWI5ZDZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RQb3J0RHluYW1pY0NvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFBvcnREeW5hbWljQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZWRpcmVjdC1wb3J0LWR5bmFtaWMtcmVjb25maWciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlZGlyZWN0LXBvcnQtZHluYW1pYy1yZWNvbmZpZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFBvcnREeW5hbWljQ29uZmlnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFBvcnREeW5hbWljQ29uZmlnL2J1aWxkLnhtbAppbmRleCA2MGNkNzFhLi40ZTFmNDA5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RQb3J0RHluYW1pY0NvbmZpZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydER5bmFtaWNDb25maWcvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxNSArNDQsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtbmV0d29yay1saXN0ZW5lci0xIiAvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1uZXR3b3JrLWxpc3RlbmVyLTEiIC8+CkBAIC05Myw3ICs5Myw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uLHByZXBhcmUta2V5c3RvcmUtY29tbW9uIj4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgpAQCAtMTA5LDEwICsxMDksMTAgQEAKICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLW5ldHdvcmstbGlzdGVuZXItMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydExvYWRCYWxhbmNlci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RQb3J0TG9hZEJhbGFuY2VyL1dlYlRlc3QuamF2YQppbmRleCA2MjUzNWI2Li4wMDgzYTUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RQb3J0TG9hZEJhbGFuY2VyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RQb3J0TG9hZEJhbGFuY2VyL1dlYlRlc3QuamF2YQpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2NDE5NjU5Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNjksNyArNjksNyBAQAogICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJIb3N0OiBsb2FkYmFsYW5jZXI6OTk5OVxuIi5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydExvYWRCYWxhbmNlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydExvYWRCYWxhbmNlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGY2OWFkMmQuLjE2NmVhNmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFBvcnRMb2FkQmFsYW5jZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RQb3J0TG9hZEJhbGFuY2VyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVkaXJlY3QtcG9ydC1sb2FkYmFsYW5jZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFBvcnRMb2FkQmFsYW5jZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydExvYWRCYWxhbmNlci9idWlsZC54bWwKaW5kZXggODlmY2Q4ZS4uNjBjZGI4ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydExvYWRCYWxhbmNlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydExvYWRCYWxhbmNlci9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE4ICs0NCwxOCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTc2LDcgKzc2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODgsMTAgKzg4LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFdpdGhSb290V2lsZENhcmRVcmxQYXR0ZXJuL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFdpdGhSb290V2lsZENhcmRVcmxQYXR0ZXJuL1dlYlRlc3QuamF2YQppbmRleCBmODI0NzQ0Li40MDAwYWM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RXaXRoUm9vdFdpbGRDYXJkVXJsUGF0dGVybi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0V2l0aFJvb3RXaWxkQ2FyZFVybFBhdHRlcm4vV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICAgICAgZXhwZWN0ZWQgPSAidXJpID0gIiArIGNvbnRleHRSb290ICsgIi8sIHBhdGhJbmZvID0gLyI7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElzc3VlIDUxNDEiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RXaXRoUm9vdFdpbGRDYXJkVXJsUGF0dGVybi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0V2l0aFJvb3RXaWxkQ2FyZFVybFBhdHRlcm4vYnVpbGQucHJvcGVydGllcwppbmRleCBkODhlMjZiLi42ZDE3NGRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RXaXRoUm9vdFdpbGRDYXJkVXJsUGF0dGVybi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFdpdGhSb290V2lsZENhcmRVcmxQYXR0ZXJuL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZWRpcmVjdC13aXRoLXJvb3Qtd2lsZC1jYXJkLXVybC1wYXR0ZXJuIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZWRpcmVjdC13aXRoLXJvb3Qtd2lsZC1jYXJkLXVybC1wYXR0ZXJuIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0V2l0aFJvb3RXaWxkQ2FyZFVybFBhdHRlcm4vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0V2l0aFJvb3RXaWxkQ2FyZFVybFBhdHRlcm4vYnVpbGQueG1sCmluZGV4IDg1NGJmNmYuLmJkZTk3OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFdpdGhSb290V2lsZENhcmRVcmxQYXR0ZXJuL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RXaXRoUm9vdFdpbGRDYXJkVXJsUGF0dGVybi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE4ICs0MiwxOCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KQEAgLTY4LDEwICs2OCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWxhdGl2ZVJlZGlyZWN0QWxsb3dlZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVsYXRpdmVSZWRpcmVjdEFsbG93ZWQvV2ViVGVzdC5qYXZhCmluZGV4IDI3NDAxMTUuLmI0Y2NjNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWxhdGl2ZVJlZGlyZWN0QWxsb3dlZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlbGF0aXZlUmVkaXJlY3RBbGxvd2VkL1dlYlRlc3QuamF2YQpAQCAtMjAsOSArMjAsOSBAQAogCiAvKgogICogVGhpcyB1bml0IHRlc3QgZXhwZWN0cyBvbmx5IHRoZSByZWxhdGl2ZSBwYXRoIHdoZW4gcmVkaXJlY3QKLSAqIGFzIHRoZSBmb2xsb3dpbmcgaXMgc3BlY2lmaWVkIGluIHN1bi13ZWIueG1sLiAKKyAqIGFzIHRoZSBmb2xsb3dpbmcgaXMgc3BlY2lmaWVkIGluIHN1bi13ZWIueG1sLgogICoKLSAqIDxwcm9wZXJ0eSBuYW1lPSJyZWxhdGl2ZVJlZGlyZWN0QWxsb3dlZCIgdmFsdWU9InRydWUiLz4gCisgKiA8cHJvcGVydHkgbmFtZT0icmVsYXRpdmVSZWRpcmVjdEFsbG93ZWQiIHZhbHVlPSJ0cnVlIi8+CiAgKgogICovCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7CkBAIC0zMiw3ICszMiw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9ICJ3ZWItcmVsYXRpdmVSZWRpcmVjdEFsbG93ZWQiOwogCiAgICAgLyoKLSAgICAgKiBUaGUgcmVsYXRpdmUgcGF0aCB0aGF0IGlzIGV4cGVjdGVkLiAKKyAgICAgKiBUaGUgcmVsYXRpdmUgcGF0aCB0aGF0IGlzIGV4cGVjdGVkLgogICAgICAqLwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQQVRIID0gIi93ZWItcmVsYXRpdmVSZWRpcmVjdEFsbG93ZWQvanNwL3Rlc3QyLmpzcCI7CiAKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQnVndHJhcSA0NjQyNjUwIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTUsOCArNTUsOCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCi0gICAgICAgIHRyeSB7IAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VKc3AoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CkBAIC03MSwxNCArNzEsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlSnNwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvanNwL3Rlc3QxLmpzcCIgKyAiIEhUVFAvMS4wXG4iOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgICAgICAgICAgIGZhaWwgPSBmYWxzZTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyBwYXRoOiAiICsgbGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIGV4cGVjdGVkOiAiICsgUEFUSCk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIGV4cGVjdGVkOiAiICsgUEFUSCk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgIGZhaWwgPSB0cnVlOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlbGF0aXZlUmVkaXJlY3RBbGxvd2VkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVsYXRpdmVSZWRpcmVjdEFsbG93ZWQvYnVpbGQucHJvcGVydGllcwppbmRleCAzOTYxNTI4Li44ZTJmNzA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVsYXRpdmVSZWRpcmVjdEFsbG93ZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVsYXRpdmVSZWRpcmVjdEFsbG93ZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlbGF0aXZlUmVkaXJlY3RBbGxvd2VkIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZWxhdGl2ZVJlZGlyZWN0QWxsb3dlZCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItcmVsYXRpdmVSZWRpcmVjdEFsbG93ZWQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWxhdGl2ZVJlZGlyZWN0QWxsb3dlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVsYXRpdmVSZWRpcmVjdEFsbG93ZWQvYnVpbGQueG1sCmluZGV4IDg3ZGJkNGMuLjVhMWYwYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWxhdGl2ZVJlZGlyZWN0QWxsb3dlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlbGF0aXZlUmVkaXJlY3RBbGxvd2VkL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01MywxMCArNTMsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXBsYWNlUm9vdENvbnRleHQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcGxhY2VSb290Q29udGV4dC9XZWJUZXN0LmphdmEKaW5kZXggNWQxOTUxNi4uZDczZjRlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcGxhY2VSb290Q29udGV4dC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcGxhY2VSb290Q29udGV4dC9XZWJUZXN0LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQnVndHJhcSA1MDU2NzI2Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDYsMTUgKzQ2LDE1IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJ0ZXN0LnR4dCIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcGxhY2VSb290Q29udGV4dC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcGxhY2VSb290Q29udGV4dC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGU1ZDQ1ZTEuLjEyODI2OTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXBsYWNlUm9vdENvbnRleHQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVwbGFjZVJvb3RDb250ZXh0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVwbGFjZS1yb290LWNvbnRleHQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXBsYWNlUm9vdENvbnRleHQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcGxhY2VSb290Q29udGV4dC9idWlsZC54bWwKaW5kZXggNGVkYzljYy4uNGFiNzg2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcGxhY2VSb290Q29udGV4dC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcGxhY2VSb290Q29udGV4dC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE5ICs0NCwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJEaXJlY3RvcnlUcmF2ZXJzYWwvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRGlyZWN0b3J5VHJhdmVyc2FsL1dlYlRlc3QuamF2YQppbmRleCAwNTAxZmRlLi5iOGMzMWZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJEaXJlY3RvcnlUcmF2ZXJzYWwvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckRpcmVjdG9yeVRyYXZlcnNhbC9XZWJUZXN0LmphdmEKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgICAgYXBwc2VydmVyVGVzdFBhdGggPSBhcmdzWzNdOwogICAgICAgICBhZG1pblBvcnQgPSBhcmdzWzRdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiU2VjdXJpdHkgVnVsbmVyYWJpbGl0eSB0ZXN0IGZvciBSZXF1ZXN0RGlzcGF0Y2hlciBkaXJlY3RvcnkgdHJhdmVyc2FsIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTcsOCArNTcsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJNaXNzaW5nIGV4cGVjdGVkIHJlc3BvbnNlOiAiICsgRVhQRUNURUQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYgKG9zICE9IG51bGwpIG9zLmNsb3NlKCk7CkBAIC0xMjUsOSArMTI1LDkgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7fQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZVZhbGlkYXRpb25UZXN0Rm9yRG91YmxlRG90KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFNvY2tldCBzb2NrID0gbnVsbDsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gbnVsbDsKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwpAQCAtMTcwLDkgKzE3MCw5IEBACiAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkge30KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBpbnZva2VWYWxpZGF0aW9uVGVzdEZvckNvbG9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFNvY2tldCBzb2NrID0gbnVsbDsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gbnVsbDsKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRGlyZWN0b3J5VHJhdmVyc2FsL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJEaXJlY3RvcnlUcmF2ZXJzYWwvYnVpbGQucHJvcGVydGllcwppbmRleCBkZDI4MDU3Li45MjJhNzgyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJEaXJlY3RvcnlUcmF2ZXJzYWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJEaXJlY3RvcnlUcmF2ZXJzYWwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZXF1ZXN0LWRpc3BhdGNoZXItZGlyZWN0b3J5LXRyYXZlcnNhbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRGlyZWN0b3J5VHJhdmVyc2FsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckRpcmVjdG9yeVRyYXZlcnNhbC9idWlsZC54bWwKaW5kZXggNTUzZDk1ZS4uMWM3MDU0YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRGlyZWN0b3J5VHJhdmVyc2FsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJEaXJlY3RvcnlUcmF2ZXJzYWwvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwzOSArNDQsMzkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5wb3J0fSIvPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9Ii8+Ci0JICA8YXJnIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9Ii8+Ci0JICA8YXJnIHZhbHVlPSIke2FkbWluLnBvcnR9Ii8+CisgICAgICA8YXJnIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9Ii8+CisgICAgICA8YXJnIHZhbHVlPSIke2FkbWluLnBvcnR9Ii8+CiAgICAgICAgICAgPGNsYXNzcGF0aD4KICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIi8+CiAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iLiIvPgogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRDb21taXRSZXNwb25zZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkQ29tbWl0UmVzcG9uc2UvV2ViVGVzdC5qYXZhCmluZGV4IDQ5OTI0OTMuLjFiMDFiNWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRDb21taXRSZXNwb25zZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZENvbW1pdFJlc3BvbnNlL1dlYlRlc3QuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2Mzc0OTkwIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtMTE0LDYgKzExNCw2IEBACiAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKICAgICAgICAgICAgICAgICAvLyBpZ25vcmUKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRDb21taXRSZXNwb25zZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZENvbW1pdFJlc3BvbnNlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGEzYmZmOS4uN2Y2OGFhNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZENvbW1pdFJlc3BvbnNlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZENvbW1pdFJlc3BvbnNlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZXF1ZXN0LWRpc3BhdGNoZXItZm9yd2FyZC1jb21taXQtcmVzcG9uc2UiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlcXVlc3QtZGlzcGF0Y2hlci1mb3J3YXJkLWNvbW1pdC1yZXNwb25zZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRDb21taXRSZXNwb25zZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkQ29tbWl0UmVzcG9uc2UvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRDb21taXRSZXNwb25zZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZENvbW1pdFJlc3BvbnNlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRDb21taXRSZXNwb25zZS9zZXJ2bGV0L0Zyb20uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRDb21taXRSZXNwb25zZS9zZXJ2bGV0L0Zyb20uamF2YQppbmRleCBlZmZkZDk3Li40MjdlNDYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkQ29tbWl0UmVzcG9uc2Uvc2VydmxldC9Gcm9tLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZENvbW1pdFJlc3BvbnNlL3NlcnZsZXQvRnJvbS5qYXZhCkBAIC0yMSw4ICsyMSw4IEBACiBwdWJsaWMgY2xhc3MgRnJvbSBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHB1YmxpYyB2b2lkIHNlcnZpY2UoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCi0JdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKLQkKKyAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24geworCiAgICAgICAgIGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9UbyIpLmZvcndhcmQocmVxLCByZXMpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMCAqIDEwMDApOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZEhFQURSZXF1ZXN0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRIRUFEUmVxdWVzdC9XZWJUZXN0LmphdmEKaW5kZXggZmMwYjk5NC4uNDgyNjg1MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZEhFQURSZXF1ZXN0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkSEVBRFJlcXVlc3QvV2ViVGVzdC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSAyMjEwIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtMTE2LDYgKzExNiw2IEBACiAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKICAgICAgICAgICAgICAgICAvLyBpZ25vcmUKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRIRUFEUmVxdWVzdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZEhFQURSZXF1ZXN0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNmQ5NTRiMi4uYzQwYzk3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZEhFQURSZXF1ZXN0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZEhFQURSZXF1ZXN0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVxdWVzdC1kaXNwYXRjaGVyLWZvcndhcmQtaGVhZC1yZXF1ZXN0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkSEVBRFJlcXVlc3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZEhFQURSZXF1ZXN0L2J1aWxkLnhtbAppbmRleCA0OGUzYmYwLi4yMjdjZmZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkSEVBRFJlcXVlc3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRIRUFEUmVxdWVzdC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIxICs0MiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNjgsMTAgKzY4LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZEhFQURSZXF1ZXN0L3NlcnZsZXQvRnJvbS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZEhFQURSZXF1ZXN0L3NlcnZsZXQvRnJvbS5qYXZhCmluZGV4IGE3M2IyYzAuLjczNzc2MDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRIRUFEUmVxdWVzdC9zZXJ2bGV0L0Zyb20uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkSEVBRFJlcXVlc3Qvc2VydmxldC9Gcm9tLmphdmEKQEAgLTIxLDggKzIxLDggQEAKIHB1YmxpYyBjbGFzcyBGcm9tIGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCi0JdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKLQkKKyAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24geworCiAgICAgICAgIGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9UbyIpLmZvcndhcmQocmVxLCByZXMpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmROb25IdHRwL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmROb25IdHRwL1dlYlRlc3QuamF2YQppbmRleCA1MjM1MjVkLi5jYWU3MzljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkTm9uSHR0cC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZE5vbkh0dHAvV2ViVGVzdC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJVCAxMDY0MSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmROb25IdHRwL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkTm9uSHR0cC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGU5YWQ2ZjUuLmUxODA2ZTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmROb25IdHRwL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZE5vbkh0dHAvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZXF1ZXN0LWRpc3BhdGNoZXItZm9yd2FyZC1ub24taHR0cCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZE5vbkh0dHAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZE5vbkh0dHAvYnVpbGQueG1sCmluZGV4IDQ4ZTNiZjAuLjIyN2NmZmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmROb25IdHRwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkTm9uSHR0cC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIxICs0MiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNjgsMTAgKzY4LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZFNlbmRFcnJvckNvbW1pdFJlc3BvbnNlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRTZW5kRXJyb3JDb21taXRSZXNwb25zZS9XZWJUZXN0LmphdmEKaW5kZXggODNkY2IzNS4uYTE4MjI0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZFNlbmRFcnJvckNvbW1pdFJlc3BvbnNlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkU2VuZEVycm9yQ29tbWl0UmVzcG9uc2UvV2ViVGVzdC5qYXZhCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDYzNzQ5OTAiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkU2VuZEVycm9yQ29tbWl0UmVzcG9uc2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRTZW5kRXJyb3JDb21taXRSZXNwb25zZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDYxMGViZTcuLmE3YmY5ZjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRTZW5kRXJyb3JDb21taXRSZXNwb25zZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRTZW5kRXJyb3JDb21taXRSZXNwb25zZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVxdWVzdC1kaXNwYXRjaGVyLWZvcndhcmQtc2VuZC1lcnJvci1jb21taXQtcmVzcG9uc2UiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlcXVlc3QtZGlzcGF0Y2hlci1mb3J3YXJkLXNlbmQtZXJyb3ItY29tbWl0LXJlc3BvbnNlIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZFNlbmRFcnJvckNvbW1pdFJlc3BvbnNlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRTZW5kRXJyb3JDb21taXRSZXNwb25zZS9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZFNlbmRFcnJvckNvbW1pdFJlc3BvbnNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkU2VuZEVycm9yQ29tbWl0UmVzcG9uc2UvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZFNlbmRFcnJvckNvbW1pdFJlc3BvbnNlL3NlcnZsZXQvRnJvbS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZFNlbmRFcnJvckNvbW1pdFJlc3BvbnNlL3NlcnZsZXQvRnJvbS5qYXZhCmluZGV4IGVmZmRkOTcuLjQyN2U0NjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRTZW5kRXJyb3JDb21taXRSZXNwb25zZS9zZXJ2bGV0L0Zyb20uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkU2VuZEVycm9yQ29tbWl0UmVzcG9uc2Uvc2VydmxldC9Gcm9tLmphdmEKQEAgLTIxLDggKzIxLDggQEAKIHB1YmxpYyBjbGFzcyBGcm9tIGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAgICAgcHVibGljIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKLQl0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewotCQorICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CisKICAgICAgICAgZ2V0U2VydmxldENvbnRleHQoKS5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL1RvIikuZm9yd2FyZChyZXEsIHJlcyk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEwICogMTAwMCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkU2V0U3RhdHVzQ29tbWl0UmVzcG9uc2UvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZFNldFN0YXR1c0NvbW1pdFJlc3BvbnNlL1dlYlRlc3QuamF2YQppbmRleCAwNjE1NDE2Li4wNzM0YTgyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkU2V0U3RhdHVzQ29tbWl0UmVzcG9uc2UvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRTZXRTdGF0dXNDb21taXRSZXNwb25zZS9XZWJUZXN0LmphdmEKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjM3NDk5MCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTEzNCw3ICsxMzQsNyBAQAogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlJlc3BvbnNlIHdhcyBkZWxheWVkIGJ5IDEwIHNlY29uZHMgIiArCiAgICAgICAgICAgICAgICAgICAgICJvciBtb3JlLCB3aGljaCBpcyBob3cgbG9uZyB0aGUgIiArCiAgICAgICAgICAgICAgICAgICAgICJvcmlnaW4gc2VydmxldCBvZiB0aGUgUkQuZm9yd2FyZCgpICIgKwotICAgICAgICAgICAgICAgICAgICAiaGFzIGJlZW4gc2xlZXBpbmcgZm9yLiAiICsgCisgICAgICAgICAgICAgICAgICAgICJoYXMgYmVlbiBzbGVlcGluZyBmb3IuICIgKwogICAgICAgICAgICAgICAgICAgICAiVGhlIHJlc3BvbnNlIHNob3VsZCBoYXZlIGJlZW4gIiArCiAgICAgICAgICAgICAgICAgICAgICJjb21taXR0ZWQgaW1tZWRpYXRlbHkuIik7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkU2V0U3RhdHVzQ29tbWl0UmVzcG9uc2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRTZXRTdGF0dXNDb21taXRSZXNwb25zZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDI2ZTczMTMuLjU5NTFlOWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRTZXRTdGF0dXNDb21taXRSZXNwb25zZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRTZXRTdGF0dXNDb21taXRSZXNwb25zZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVxdWVzdC1kaXNwYXRjaGVyLWZvcndhcmQtc2V0LXN0YXR1cy1jb21taXQtcmVzcG9uc2UiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlcXVlc3QtZGlzcGF0Y2hlci1mb3J3YXJkLXNldC1zdGF0dXMtY29tbWl0LXJlc3BvbnNlIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZFNldFN0YXR1c0NvbW1pdFJlc3BvbnNlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRTZXRTdGF0dXNDb21taXRSZXNwb25zZS9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZFNldFN0YXR1c0NvbW1pdFJlc3BvbnNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkU2V0U3RhdHVzQ29tbWl0UmVzcG9uc2UvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZFNldFN0YXR1c0NvbW1pdFJlc3BvbnNlL3NlcnZsZXQvRnJvbS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZFNldFN0YXR1c0NvbW1pdFJlc3BvbnNlL3NlcnZsZXQvRnJvbS5qYXZhCmluZGV4IGVmZmRkOTcuLjQyN2U0NjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRTZXRTdGF0dXNDb21taXRSZXNwb25zZS9zZXJ2bGV0L0Zyb20uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkU2V0U3RhdHVzQ29tbWl0UmVzcG9uc2Uvc2VydmxldC9Gcm9tLmphdmEKQEAgLTIxLDggKzIxLDggQEAKIHB1YmxpYyBjbGFzcyBGcm9tIGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAgICAgcHVibGljIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKLQl0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewotCQorICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CisKICAgICAgICAgZ2V0U2VydmxldENvbnRleHQoKS5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL1RvIikuZm9yd2FyZChyZXEsIHJlcyk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEwICogMTAwMCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJJbmNsdWRlTm9uSHR0cC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJJbmNsdWRlTm9uSHR0cC9XZWJUZXN0LmphdmEKaW5kZXggYzdjYmM1Ni4uYjlmZDJiZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVySW5jbHVkZU5vbkh0dHAvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckluY2x1ZGVOb25IdHRwL1dlYlRlc3QuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSVQgMTA2NDEiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJJbmNsdWRlTm9uSHR0cC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVySW5jbHVkZU5vbkh0dHAvYnVpbGQucHJvcGVydGllcwppbmRleCA1NjI4Y2Y2Li5iNzU0MjM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJJbmNsdWRlTm9uSHR0cC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckluY2x1ZGVOb25IdHRwL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVxdWVzdC1kaXNwYXRjaGVyLWluY2x1ZGUtbm9uLWh0dHAiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckluY2x1ZGVOb25IdHRwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckluY2x1ZGVOb25IdHRwL2J1aWxkLnhtbAppbmRleCA0OGUzYmYwLi4yMjdjZmZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJJbmNsdWRlTm9uSHR0cC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVySW5jbHVkZU5vbkh0dHAvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMSArNDIsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTY4LDEwICs2OCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckluY2x1ZGVUYXJnZXROb3RGb3VuZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJJbmNsdWRlVGFyZ2V0Tm90Rm91bmQvV2ViVGVzdC5qYXZhCmluZGV4IDhmYTkxMWMuLjVjMDA4OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckluY2x1ZGVUYXJnZXROb3RGb3VuZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVySW5jbHVkZVRhcmdldE5vdEZvdW5kL1dlYlRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MTgyOTg0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTQsNyArNTQsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvanNwL2luY2x1ZGUuanNwIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTY3LDYgKzY3LDYgQEAKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDUwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckluY2x1ZGVUYXJnZXROb3RGb3VuZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVySW5jbHVkZVRhcmdldE5vdEZvdW5kL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNWI2ZGZmNi4uNmE5MmQ2MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVySW5jbHVkZVRhcmdldE5vdEZvdW5kL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVySW5jbHVkZVRhcmdldE5vdEZvdW5kL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZXF1ZXN0LWRpc3BhdGNoZXItaW5jbHVkZS10YXJnZXQtbm90LWZvdW5kIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZXF1ZXN0LWRpc3BhdGNoZXItaW5jbHVkZS10YXJnZXQtbm90LWZvdW5kIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVySW5jbHVkZVRhcmdldE5vdEZvdW5kL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckluY2x1ZGVUYXJnZXROb3RGb3VuZC9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVySW5jbHVkZVRhcmdldE5vdEZvdW5kL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJJbmNsdWRlVGFyZ2V0Tm90Rm91bmQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyTWF4RGVwdGgvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyTWF4RGVwdGgvV2ViVGVzdC5qYXZhCmluZGV4IDQwNzQzMjMuLjU2YWY5NTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlck1heERlcHRoL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJNYXhEZXB0aC9XZWJUZXN0LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKICAqIGV4Y2VwdGlvbiBpbiBzZXJ2ZXIubG9nIGZpbGUiKS4KICAqCiAgKiBUaGlzIHRlc3QncyBidWlsZC54bWwgY29uZmlndXJlcyA8d2ViLWNvbnRhaW5lcj4gcHJvcGVydHkgbmFtZWQKLSAqIGRpc3BhdGNoZXItbWF4LWRlcHRoIGluIGRvbWFpbi54bWwgYW5kIHNldHMgaXRzIHZhbHVlIHRvIDUgYmVmb3JlIAorICogZGlzcGF0Y2hlci1tYXgtZGVwdGggaW4gZG9tYWluLnhtbCBhbmQgc2V0cyBpdHMgdmFsdWUgdG8gNSBiZWZvcmUKICAqIHJlc3RhcnRpbmcgdGhlIHNlcnZlci4KICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA0NzAzMDIzIik7CiAKQEAgLTU3LDE4ICs1NywxOCBAQAogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL2Zvby5qc3AiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJNYXhEZXB0aC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyTWF4RGVwdGgvYnVpbGQucHJvcGVydGllcwppbmRleCAzN2NlYThlLi41NmVmZGE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJNYXhEZXB0aC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlck1heERlcHRoL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVxdWVzdC1kaXNwYXRjaGVyLW1heC1kZXB0aCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyTWF4RGVwdGgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyTWF4RGVwdGgvYnVpbGQueG1sCmluZGV4IDRiNDFkODguLjhlNjY1YTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlck1heERlcHRoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJNYXhEZXB0aC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE2ICs0NCwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgpAQCAtNzIsNyArNzIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04NCwxMCArODQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyTXVsdGlwbGVGb3J3YXJkL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlck11bHRpcGxlRm9yd2FyZC9XZWJUZXN0LmphdmEKaW5kZXggNTRlNTU2Yi4uNTdkOTExMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyTXVsdGlwbGVGb3J3YXJkL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJNdWx0aXBsZUZvcndhcmQvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElUIDcwMzQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJNdWx0aXBsZUZvcndhcmQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlck11bHRpcGxlRm9yd2FyZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQ3YWUzYjMuLmIyMjk0NTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlck11bHRpcGxlRm9yd2FyZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlck11bHRpcGxlRm9yd2FyZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlcXVlc3QtZGlzcGF0Y2hlci1tdWx0aXBsZS1mb3J3YXJkIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJNdWx0aXBsZUZvcndhcmQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyTXVsdGlwbGVGb3J3YXJkL2J1aWxkLnhtbAppbmRleCAwMGZkYWQzLi5jMzk3NzZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJNdWx0aXBsZUZvcndhcmQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlck11bHRpcGxlRm9yd2FyZC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDEwICs3MCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlclBhdGhXaXRoUGFyYW1zL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlclBhdGhXaXRoUGFyYW1zL1dlYlRlc3QuamF2YQppbmRleCBiNmM2OGU0Li42Y2YxNmI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJQYXRoV2l0aFBhcmFtcy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyUGF0aFdpdGhQYXJhbXMvV2ViVGVzdC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDQ4NzM0MjMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Nyw4ICs0Nyw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZUpzcCgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTY3LDcgKzY3LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlSnNwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi9qc3AvZm9yd2FyZEZyb20uanNwIEhUVFAvMS4wXG4iOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyUGF0aFdpdGhQYXJhbXMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlclBhdGhXaXRoUGFyYW1zL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYmM3NmNmMi4uNWQ1MjVjZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyUGF0aFdpdGhQYXJhbXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJQYXRoV2l0aFBhcmFtcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVxdWVzdC1kaXNwYXRjaGVyLXBhdGgtd2l0aC1wYXJhbXMiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlcXVlc3QtZGlzcGF0Y2hlci1wYXRoLXdpdGgtcGFyYW1zIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlclBhdGhXaXRoUGFyYW1zL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlclBhdGhXaXRoUGFyYW1zL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJQYXRoV2l0aFBhcmFtcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyUGF0aFdpdGhQYXJhbXMvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Jlc3BvbnNlRXJyb3JNZXNzYWdlRW5jb2RpbmcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Jlc3BvbnNlRXJyb3JNZXNzYWdlRW5jb2RpbmcvV2ViVGVzdC5qYXZhCmluZGV4IDU1Njk5NjMuLjY4NGNlOTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXNwb25zZUVycm9yTWVzc2FnZUVuY29kaW5nL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVzcG9uc2VFcnJvck1lc3NhZ2VFbmNvZGluZy9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNDY1NTAxMCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ1LDggKzQ1LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlU2VydmxldCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKQEAgLTU1LDE0ICs1NSwxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2VTZXJ2bGV0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvSGVsbG9KYXBhbiIgKyAiIEhUVFAvMS4wXG4iOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgLy8gRGVjb2RlIGVycm9yIG1lc3NhZ2UgdXNpbmcgdGhlIHNhbWUgY2hhcnNldCB0aGF0IGl0IHdhcyBlbmNvZGVkIGluCiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcigKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXNwb25zZUVycm9yTWVzc2FnZUVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVzcG9uc2VFcnJvck1lc3NhZ2VFbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQ3NTNmNDUuLjY4NWUwOTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXNwb25zZUVycm9yTWVzc2FnZUVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Jlc3BvbnNlRXJyb3JNZXNzYWdlRW5jb2RpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZXNwb25zZS1lcnJvci1tZXNzYWdlLWVuY29kaW5nIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVzcG9uc2VFcnJvck1lc3NhZ2VFbmNvZGluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVzcG9uc2VFcnJvck1lc3NhZ2VFbmNvZGluZy9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Jlc3BvbnNlRXJyb3JNZXNzYWdlRW5jb2RpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXNwb25zZUVycm9yTWVzc2FnZUVuY29kaW5nL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXNwb25zZUVycm9yTWVzc2FnZUVuY29kaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXNwb25zZUVycm9yTWVzc2FnZUVuY29kaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBlYzBiYzRjLi43ODQ4ZTQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVzcG9uc2VFcnJvck1lc3NhZ2VFbmNvZGluZy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Jlc3BvbnNlRXJyb3JNZXNzYWdlRW5jb2RpbmcvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9KYXBhbjwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPkhlbGxvSmFwYW48L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5IZWxsb0phcGFuPC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsb0phcGFuPC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVzcG9uc2VFeGNlcHRpb25NZXNzYWdlRW5jb2RpbmcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Jlc3BvbnNlRXhjZXB0aW9uTWVzc2FnZUVuY29kaW5nL1dlYlRlc3QuamF2YQppbmRleCAzYmEwZWIwLi5mZWY1ZGMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVzcG9uc2VFeGNlcHRpb25NZXNzYWdlRW5jb2RpbmcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXNwb25zZUV4Y2VwdGlvbk1lc3NhZ2VFbmNvZGluZy9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjI1NDQ2OSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ1LDggKzQ1LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlU2VydmxldCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKQEAgLTU1LDE0ICs1NSwxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2VTZXJ2bGV0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvSGVsbG9KYXBhbiIgKyAiIEhUVFAvMS4wXG4iOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgLy8gRGVjb2RlIGVycm9yIG1lc3NhZ2UgdXNpbmcgdGhlIHNhbWUgY2hhcnNldCB0aGF0IGl0IHdhcyBlbmNvZGVkIGluCiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcigKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXNwb25zZUV4Y2VwdGlvbk1lc3NhZ2VFbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Jlc3BvbnNlRXhjZXB0aW9uTWVzc2FnZUVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjU1YWE5Ny4uMTZmYTg4NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Jlc3BvbnNlRXhjZXB0aW9uTWVzc2FnZUVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Jlc3BvbnNlRXhjZXB0aW9uTWVzc2FnZUVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVzcG9uc2UtZXhjZXB0aW9uLW1lc3NhZ2UtZW5jb2RpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXNwb25zZUV4Y2VwdGlvbk1lc3NhZ2VFbmNvZGluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVzcG9uc2VFeGNlcHRpb25NZXNzYWdlRW5jb2RpbmcvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXNwb25zZUV4Y2VwdGlvbk1lc3NhZ2VFbmNvZGluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Jlc3BvbnNlRXhjZXB0aW9uTWVzc2FnZUVuY29kaW5nL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXNwb25zZUV4Y2VwdGlvbk1lc3NhZ2VFbmNvZGluZy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVzcG9uc2VFeGNlcHRpb25NZXNzYWdlRW5jb2RpbmcvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGVjMGJjNGMuLjc4NDhlNDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXNwb25zZUV4Y2VwdGlvbk1lc3NhZ2VFbmNvZGluZy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Jlc3BvbnNlRXhjZXB0aW9uTWVzc2FnZUVuY29kaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjcsNyArMjcsNyBAQAogICAgICAgICA8ZGlzcGxheS1uYW1lPkhlbGxvSmFwYW48L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsb0phcGFuPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuSGVsbG9KYXBhbjwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+SGVsbG9KYXBhbjwvc2VydmxldC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JldXNlU2Vzc2lvbklkL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXVzZVNlc3Npb25JZC9XZWJUZXN0LmphdmEKaW5kZXggMDhkMDEyMS4uZTQyZWU1NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JldXNlU2Vzc2lvbklkL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmV1c2VTZXNzaW9uSWQvV2ViVGVzdC5qYXZhCkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJ1Z3RyYXEgNDgxNzY0Miw0ODc2NDU0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoKCJDb29raWU6IEpTRVNTSU9OSUQ9IiArIEpTRVNTSU9OX0lEICsgIlxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKQEAgLTg3LDExICs4NywxMSBAQAogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgICAgICB9Ci0JICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJNaXNzaW5nIEpTRVNTSU9OSUQiKTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgIH0KLQkgICAgfSBlbHNlIHsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk1pc3NpbmcgU2V0LUNvb2tpZSByZXNwb25zZSBoZWFkZXIiKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmV1c2VTZXNzaW9uSWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXVzZVNlc3Npb25JZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDc0NDcwNjkuLmY5MGUwYmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXVzZVNlc3Npb25JZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXVzZVNlc3Npb25JZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmV1c2Utc2Vzc2lvbmlkIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZXVzZS1zZXNzaW9uaWQiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXVzZVNlc3Npb25JZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmV1c2VTZXNzaW9uSWQvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXVzZVNlc3Npb25JZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JldXNlU2Vzc2lvbklkL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXVzZVNlc3Npb25JZC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmV1c2VTZXNzaW9uSWQvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDI4YWY3OWQuLmM5YTA1MDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXVzZVNlc3Npb25JZC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JldXNlU2Vzc2lvbklkL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjYsNyArMjYsNyBAQAogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuVGVzdFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50TWFwcGluZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50TWFwcGluZy9XZWJUZXN0LmphdmEKaW5kZXggMzU3MjNlOC4uNjI5ZDM5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludE1hcHBpbmcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRNYXBwaW5nL1dlYlRlc3QuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdAogewotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9ICJTZWN1cml0eSBDb25zdHJhaW50IE1hcHBpbmcgdGVzdCI7CkBAIC0zMiw3ICszMiw3IEBACiAKICAgICAgICAgLy8gVGhlIHN0YXQgcmVwb3J0ZXIgd3JpdGVzIG91dCB0aGUgdGVzdCBpbmZvIGFuZCByZXN1bHRzCiAgICAgICAgIC8vIGludG8gdGhlIHRvcC1sZXZlbCBxdWlja2xvb2sgZGlyZWN0b3J5IGR1cmluZyBhIHJ1bi4KLSAgICAgIAorCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNDkwMzIwOSIpOwogCiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKQEAgLTQxLDcgKzQxLDcgQEAKIAogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwogICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vQ2hlY2sgaWYgaXQgc3RyaXBzIG91dCB1cmkgcGFyYW1ldGVycyAoIjsuKiIpIGJlZm9yZSBtYXBwaW5nIHRvIHdlYmFwcHMKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsIGNvbnRleHRSb290ICsgIi9TZXJ2bGV0VGVzdDt0ZXN0PWFhYSIgKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50TWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDMyZWYwNTQuLmIwZDdhNWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludE1hcHBpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlY3VyaXR5Q29uc3RyYWludE1hcHBpbmciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlY3VyaXR5Q29uc3RyYWludE1hcHBpbmciLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLXNlY3VyaXR5Q29uc3RyYWludE1hcHBpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRNYXBwaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRNYXBwaW5nL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50TWFwcGluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludE1hcHBpbmcvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludE1hcHBpbmcvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludE1hcHBpbmcvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDIyYWRjYjQuLmVmODM5MjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRNYXBwaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50TWFwcGluZy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDE4ICsyMiwxOCBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KICAgICA8L3NlcnZsZXQtbWFwcGluZz4KLSAgICAKKwogICAgIDxzZXNzaW9uLWNvbmZpZz4KICAgICAgICAgPHNlc3Npb24tdGltZW91dD4xMDwvc2Vzc2lvbi10aW1lb3V0PgogICAgIDwvc2Vzc2lvbi1jb25maWc+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50TWFwcGluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50TWFwcGluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggNTJjM2EzNy4uZDExYzk4NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludE1hcHBpbmcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRNYXBwaW5nL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMjUsMTMgKzI1LDEzIEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdICIgKyBjb250ZXh0LmdldE1ham9yVmVyc2lvbigpKTsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKQEAgLTM5LDkgKzM5LDkgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogICAgICAgICBvdXQucHJpbnRsbigiVGhpcyBpcyBTZXJ2bGV0IFRlc3QiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRXaWxkY2FyZE1hcHBpbmcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpbGRjYXJkTWFwcGluZy9XZWJUZXN0LmphdmEKaW5kZXggZmUxNjZiNi4uYTAyMjczYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpbGRjYXJkTWFwcGluZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpbGRjYXJkTWFwcGluZy9XZWJUZXN0LmphdmEKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3Igc2VjdXJpdHkgY29uc3RyYWludHMgbWFwcGluZyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTYzLDExICs2MywxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9hcHBsaWNhdGlvbi9yZWRpcmVjdC94eHgiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpbGRjYXJkTWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpbGRjYXJkTWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQxOTJlODYuLmM1ODJiZWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRXaWxkY2FyZE1hcHBpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50V2lsZGNhcmRNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VjdXJpdHktY29uc3RyYWludC13aWxkY2FyZC1tYXBwaW5nIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50V2lsZGNhcmRNYXBwaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRXaWxkY2FyZE1hcHBpbmcvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRXaWxkY2FyZE1hcHBpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRXaWxkY2FyZE1hcHBpbmcvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpbGRjYXJkTWFwcGluZy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50V2lsZGNhcmRNYXBwaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA0NDEyYWJjLi5jYjg4ZWY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50V2lsZGNhcmRNYXBwaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50V2lsZGNhcmRNYXBwaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjgsNyArMjgsNyBAQAogICAgIDxzZXJ2bGV0LW5hbWU+TXlQcm90ZWN0ZWRTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgPHVybC1wYXR0ZXJuPi9hcHBsaWNhdGlvbi8qPC91cmwtcGF0dGVybj4KICAgPC9zZXJ2bGV0LW1hcHBpbmc+Ci0gIAorCiAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgPHNlcnZsZXQtbmFtZT5NeVByb3RlY3RlZFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICA8dXJsLXBhdHRlcm4+L2xvZ2luPC91cmwtcGF0dGVybj4KQEAgLTM4LDE4ICszOCwxOCBAQAogICAgIDxzZXJ2bGV0LW5hbWU+TXlQcm90ZWN0ZWRTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgPHVybC1wYXR0ZXJuPi9yZWRpcmVjdDwvdXJsLXBhdHRlcm4+CiAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgICAgCisKICAgPHNlc3Npb24tY29uZmlnPgogICAgIDxzZXNzaW9uLXRpbWVvdXQ+CiAgICAgICAgICAgICAzMAogICAgICAgICA8L3Nlc3Npb24tdGltZW91dD4KICAgPC9zZXNzaW9uLWNvbmZpZz4KLSAgCisKICAgPHNlY3VyaXR5LWNvbnN0cmFpbnQ+CiAgICAgPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgogICAgICAgPHdlYi1yZXNvdXJjZS1uYW1lPlByb3RlY3RlZCBBcmVhPC93ZWItcmVzb3VyY2UtbmFtZT4KICAgICAgIDx1cmwtcGF0dGVybj4vYXBwbGljYXRpb24vcmVkaXJlY3QvKjwvdXJsLXBhdHRlcm4+Ci0gICAgICA8dXJsLXBhdHRlcm4+L3JlZGlyZWN0PC91cmwtcGF0dGVybj4gICAgICAKKyAgICAgIDx1cmwtcGF0dGVybj4vcmVkaXJlY3Q8L3VybC1wYXR0ZXJuPgogICAgICAgPHVybC1wYXR0ZXJuPi9jb250ZW50LmpzcDwvdXJsLXBhdHRlcm4+CiAgICAgICA8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KICAgICAgIDxodHRwLW1ldGhvZD5QT1NUPC9odHRwLW1ldGhvZD4KQEAgLTU4LDEyICs1OCwxMiBAQAogICAgICAgPHJvbGUtbmFtZT51c2VyPC9yb2xlLW5hbWU+CiAgICAgPC9hdXRoLWNvbnN0cmFpbnQ+CiAgIDwvc2VjdXJpdHktY29uc3RyYWludD4KLSAgCisKICAgPGxvZ2luLWNvbmZpZz4KICAgICA8YXV0aC1tZXRob2Q+QkFTSUM8L2F1dGgtbWV0aG9kPgogICAgIDxyZWFsbS1uYW1lPmZpbGU8L3JlYWxtLW5hbWU+CiAgIDwvbG9naW4tY29uZmlnPgotICAKKwogICA8c2VjdXJpdHktcm9sZT4KICAgICA8cm9sZS1uYW1lPnVzZXI8L3JvbGUtbmFtZT4KICAgPC9zZWN1cml0eS1yb2xlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpbGRjYXJkTWFwcGluZy9zZXJ2bGV0L015UHJvdGVjdGVkU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpbGRjYXJkTWFwcGluZy9zZXJ2bGV0L015UHJvdGVjdGVkU2VydmxldC5qYXZhCmluZGV4IDJjMzMyYzMuLjE2NDlkZTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRXaWxkY2FyZE1hcHBpbmcvc2VydmxldC9NeVByb3RlY3RlZFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50V2lsZGNhcmRNYXBwaW5nL3NlcnZsZXQvTXlQcm90ZWN0ZWRTZXJ2bGV0LmphdmEKQEAgLTMyLDE2ICszMiwxNiBAQAogICogQHZlcnNpb24KICAqLwogcHVibGljIGNsYXNzIE15UHJvdGVjdGVkU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICAKKwogICAgIC8qKiBQcm9jZXNzZXMgcmVxdWVzdHMgZm9yIGJvdGggSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IGFuZCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2RzLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1JlcXVlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeVByb3RlY3RlZFNlcnZsZXQucHJvY2Vzc1JlcXVlc3QgIiArIHJlcXVlc3QuZ2V0UmVxdWVzdFVSSSgpICsgIiAiICsgcmVxdWVzdC5nZXRRdWVyeVN0cmluZygpKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIG15VXJsID0gcmVxdWVzdC5nZXRSZXF1ZXN0VVJJKCk7CiAgICAgICAgIGlmKG15VXJsLmluZGV4T2YoImxvZ2luIikgPj0gMCkgewogICAgICAgICAgICAgbG9naW4ocmVxdWVzdCwgcmVzcG9uc2UpOwpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICAgICAgcmVkaXJlY3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKHJlcXVlc3QuZ2V0UmVtb3RlVXNlcigpID09IG51bGwpIHsKICAgICAgICAgICAgIFN0cmluZyBjYWxsVXJsID0gcmVxdWVzdC5nZXRSZXF1ZXN0VVJJKCk7CiAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPSByZXF1ZXN0LmdldFF1ZXJ5U3RyaW5nKCk7CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlNlcnZsZXQgTXlQcm90ZWN0ZWRTZXJ2bGV0PC90aXRsZT4iKTsKQEAgLTcyLDIzICs3MiwyMyBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5TZXJ2bGV0IE15UHJvdGVjdGVkU2VydmxldCBhdCAiICsgcmVxdWVzdC5nZXRDb250ZXh0UGF0aCgpICsgIjwvaDE+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9ib2R5PiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaHRtbD4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCByZWRpcmVjdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAKKwogICAgICAgICByZXNwb25zZS5zZW5kUmVkaXJlY3QocmVxdWVzdC5nZXRQYXJhbWV0ZXIoIm5leHRlbmN1cmwiKSk7CiAgICAgfQotICAgIAorCiAgICAgIHByb3RlY3RlZCB2b2lkIGxvZ2luKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCiAgICAgICAgIHJlcXVlc3QuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9sb2dpbi5qc3AiKS5mb3J3YXJkKHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICB9ICAgCi0gICAgCisgICAgfQorCiAgICAgLy8gPGVkaXRvci1mb2xkIGRlZmF1bHRzdGF0ZT0iY29sbGFwc2VkIiBkZXNjPSJIdHRwU2VydmxldCBtZXRob2RzLiBDbGljayBvbiB0aGUgKyBzaWduIG9uIHRoZSBsZWZ0IHRvIGVkaXQgdGhlIGNvZGUuIj4KICAgICAvKiogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKQEAgLTk4LDcgKzk4LDcgQEAKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC0xMDcsNyArMTA3LDcgQEAKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqIFJldHVybnMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgc2VydmxldC4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNlcnZsZXRJbmZvKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpdGhvdXRBbnlBdXRoQ29uc3RyYWludC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50V2l0aG91dEFueUF1dGhDb25zdHJhaW50L1dlYlRlc3QuamF2YQppbmRleCBhZmE3ZWYwLi43ZDdiMDcxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50V2l0aG91dEFueUF1dGhDb25zdHJhaW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50V2l0aG91dEFueUF1dGhDb25zdHJhaW50L1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MjY0NjU2Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTAsOCArNTAsOCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCi0gICAgICAgIHRyeSB7IAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpdGhvdXRBbnlBdXRoQ29uc3RyYWludC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpdGhvdXRBbnlBdXRoQ29uc3RyYWludC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGE1NTliNDMuLmJhYTk1ODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRXaXRob3V0QW55QXV0aENvbnN0cmFpbnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50V2l0aG91dEFueUF1dGhDb25zdHJhaW50L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VjdXJpdHktY29uc3RyYWludC13aXRob3V0LWFueS1hdXRoLWNvbnN0cmFpbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRXaXRob3V0QW55QXV0aENvbnN0cmFpbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpdGhvdXRBbnlBdXRoQ29uc3RyYWludC9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpdGhvdXRBbnlBdXRoQ29uc3RyYWludC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpdGhvdXRBbnlBdXRoQ29uc3RyYWludC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmVyUmVkaXJlY3RXaXRoUXVlcnlTdHJpbmcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZlclJlZGlyZWN0V2l0aFF1ZXJ5U3RyaW5nL1dlYlRlc3QuamF2YQppbmRleCBkZjEwYjFjLi43MmMxYzk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmVyUmVkaXJlY3RXaXRoUXVlcnlTdHJpbmcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2ZXJSZWRpcmVjdFdpdGhRdWVyeVN0cmluZy9XZWJUZXN0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDMwODUiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MSw4ICs1MSw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZVNlcnZsZXQoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZVNlcnZsZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGV4cGVjdGVkUmVkaXJlY3RMb2NhdGlvbiA9ICJMb2NhdGlvbjogaHR0cDovLyIgKyBob3N0ICsgIjoiCiAgICAgICAgICAgICArIHBvcnQgKyBjb250ZXh0Um9vdCArICIvPyIgKyBRVUVSWV9TVFJJTkc7CiAKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBudWxsOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgICAgICB3aGlsZSAoKGxpbmUgPSBiaXMucmVhZExpbmUoKSkgIT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZlclJlZGlyZWN0V2l0aFF1ZXJ5U3RyaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmVyUmVkaXJlY3RXaXRoUXVlcnlTdHJpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCAzOTI0NzM2Li4yNGViY2VjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmVyUmVkaXJlY3RXaXRoUXVlcnlTdHJpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmVyUmVkaXJlY3RXaXRoUXVlcnlTdHJpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2ZXItcmVkaXJlY3Qtd2l0aC1xdWVyeS1zdHJpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2ZXJSZWRpcmVjdFdpdGhRdWVyeVN0cmluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmVyUmVkaXJlY3RXaXRoUXVlcnlTdHJpbmcvYnVpbGQueG1sCmluZGV4IGFkMDI1ZDkuLmRlMWRjZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2ZXJSZWRpcmVjdFdpdGhRdWVyeVN0cmluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZlclJlZGlyZWN0V2l0aFF1ZXJ5U3RyaW5nL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjIgKzQ0LDIyIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcxLDEwICs3MSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hYnNvbHV0ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hYnNvbHV0ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL1dlYlRlc3QuamF2YQppbmRleCBkMjUxNzllLi5kZTZjOGJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYWJzb2x1dGVPcmRlcmluZ1dlYkZyYWdtZW50cy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Fic29sdXRlT3JkZXJpbmdXZWJGcmFnbWVudHMvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGFic29sdXRlLW9yZGVyaW5nLXdlYi1mcmFnbWVudHMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdCArICIvIjsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikKICAgICAgICAgICAgIChuZXcgVVJMKHVybCkpLm9wZW5Db25uZWN0aW9uKCk7CkBAIC05MywxMCArOTMsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hYnNvbHV0ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYWJzb2x1dGVPcmRlcmluZ1dlYkZyYWdtZW50cy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDg5OGFmOTEuLjI4Yzk2YmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hYnNvbHV0ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Fic29sdXRlT3JkZXJpbmdXZWJGcmFnbWVudHMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1hYnNvbHV0ZS1vcmRlcmluZy13ZWItZnJhZ21lbnRzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYWJzb2x1dGVPcmRlcmluZ1dlYkZyYWdtZW50cy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYWJzb2x1dGVPcmRlcmluZ1dlYkZyYWdtZW50cy9idWlsZC54bWwKaW5kZXggNjY4Yzc3OS4uOGZmN2JmOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Fic29sdXRlT3JkZXJpbmdXZWJGcmFnbWVudHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hYnNvbHV0ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPGRlbGV0ZSBkaXI9ImxpYiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTcxLDIzICs3MSwyMyBAQAogCiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogCi0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovVGVzdFNlcnZsZXQuY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovVGVzdFNlcnZsZXQuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtOTksMTAgKzk5LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Fic29sdXRlT3JkZXJpbmdXZWJGcmFnbWVudHMvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hYnNvbHV0ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50My54bWwKaW5kZXggZGVlMDQ4Yy4uNzE0NzI4NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Fic29sdXRlT3JkZXJpbmdXZWJGcmFnbWVudHMvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYWJzb2x1dGVPcmRlcmluZ1dlYkZyYWdtZW50cy9kZXNjcmlwdG9yL3dlYi1mcmFnbWVudDMueG1sCkBAIC0yMCw2ICsyMCw2IEBACiA8d2ViLWZyYWdtZW50IHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWZyYWdtZW50XzNfMC54c2QiCi0gICAgdmVyc2lvbj0iMy4wIj4gCisgICAgdmVyc2lvbj0iMy4wIj4KICAgPG5hbWU+QjwvbmFtZT4KIDwvd2ViLWZyYWdtZW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Fic29sdXRlT3JkZXJpbmdXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hYnNvbHV0ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyLmphdmEKaW5kZXggMWU0ZGFlZS4uMjdiNTdiYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Fic29sdXRlT3JkZXJpbmdXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYWJzb2x1dGVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlci5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihleCk7CiAgICAgICAgIH0KLSAgICB9ICAgCisgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxLCBTZXJ2bGV0UmVzcG9uc2UgcmVzLAogICAgICAgICAgICAgRmlsdGVyQ2hhaW4gY2hhaW4pIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYWJzb2x1dGVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hYnNvbHV0ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyMi5qYXZhCmluZGV4IGQ3OWI0NDAuLmQzZWQzN2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hYnNvbHV0ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hYnNvbHV0ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyMi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiBwdWJsaWMgY2xhc3MgV0ZUZXN0RmlsdGVyMiBpbXBsZW1lbnRzIEZpbHRlciB7CiAgICAgcHVibGljIHZvaWQgaW5pdChGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IFdGVGVzdEZpbHRlcjIuaW5pdCIpOwotICAgIH0gICAKKyAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXEsIFNlcnZsZXRSZXNwb25zZSByZXMsCiAgICAgICAgICAgICBGaWx0ZXJDaGFpbiBjaGFpbikgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hYnNvbHV0ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyMkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hYnNvbHV0ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyMkIuamF2YQppbmRleCA0ZjlmNjg0Li4zY2Y2MDk5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYWJzb2x1dGVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjJCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Fic29sdXRlT3JkZXJpbmdXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIyQi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiBwdWJsaWMgY2xhc3MgV0ZUZXN0RmlsdGVyMkIgaW1wbGVtZW50cyBGaWx0ZXIgewogICAgIHB1YmxpYyB2b2lkIGluaXQoRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBXRlRlc3RGaWx0ZXIyQi5pbml0Iik7Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywKICAgICAgICAgICAgIEZpbHRlckNoYWluIGNoYWluKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Fic29sdXRlT3JkZXJpbmdXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYWJzb2x1dGVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjMuamF2YQppbmRleCAxOTcyODA2Li5jZjg4MmE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYWJzb2x1dGVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYWJzb2x1dGVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjMuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZXgpOwogICAgICAgICB9Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywKICAgICAgICAgICAgIEZpbHRlckNoYWluIGNoYWluKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENvbXBsZXRlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRDb21wbGV0ZS9XZWJUZXN0LmphdmEKaW5kZXggYTQ3MjcxOS4uNGQwNzg0YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENvbXBsZXRlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0Q29tcGxldGUvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQXN5bmNDb250ZXh0I2NvbXBsZXRlIik7CkBAIC01NCwxMSArNTQsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENvbXBsZXRlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0Q29tcGxldGUvYnVpbGQucHJvcGVydGllcwppbmRleCA4MmJiN2M5Li4yZGZkM2E2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0Q29tcGxldGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0Q29tcGxldGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1hc3luYy1jb250ZXh0LWNvbXBsZXRlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0Q29tcGxldGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENvbXBsZXRlL2J1aWxkLnhtbAppbmRleCBkYjJjYTM0Li41ZmUzZWM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0Q29tcGxldGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRDb21wbGV0ZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDkgKzcwLDkgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0Q29tcGxldGUvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENvbXBsZXRlL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA3OTc3NjU4Li43NDAzNTkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0Q29tcGxldGUvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRDb21wbGV0ZS9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTE4LDEzICsxOCwxMyBAQAogLS0+CiAKIDx3ZWItYXBwIHZlcnNpb249IjMuMCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5UZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KICAgICAgICAgPGFzeW5jLXN1cHBvcnRlZD50cnVlPC9hc3luYy1zdXBwb3J0ZWQ+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1Rlc3RTZXJ2bGV0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRDb21wbGV0ZS9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRDb21wbGV0ZS9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQppbmRleCA2YmU0MzQyLi4yNmYwNTIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0Q29tcGxldGUvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENvbXBsZXRlL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCkBAIC00NSw2ICs0NSw2IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9LAotCSAgICA1MDAwKTsKKyAgICAgICAgNTAwMCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENyZWF0ZUxpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0Q3JlYXRlTGlzdGVuZXIvYnVpbGQucHJvcGVydGllcwppbmRleCA2YTRlOTM0Li45YzQ3MTYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0Q3JlYXRlTGlzdGVuZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0Q3JlYXRlTGlzdGVuZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1hc3luYy1jb250ZXh0LWNyZWF0ZS1saXN0ZW5lciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENyZWF0ZUxpc3RlbmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRDcmVhdGVMaXN0ZW5lci9idWlsZC54bWwKaW5kZXggNDhlMGEwYS4uZTliNzYwNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENyZWF0ZUxpc3RlbmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0Q3JlYXRlTGlzdGVuZXIvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMyArNDQsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0Q3JlYXRlTGlzdGVuZXIvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENyZWF0ZUxpc3RlbmVyL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA3OTc3NjU4Li43NDAzNTkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0Q3JlYXRlTGlzdGVuZXIvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRDcmVhdGVMaXN0ZW5lci9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTE4LDEzICsxOCwxMyBAQAogLS0+CiAKIDx3ZWItYXBwIHZlcnNpb249IjMuMCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5UZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KICAgICAgICAgPGFzeW5jLXN1cHBvcnRlZD50cnVlPC9hc3luYy1zdXBwb3J0ZWQ+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1Rlc3RTZXJ2bGV0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaENyb3NzQ29udGV4dC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hDcm9zc0NvbnRleHQvV2ViVGVzdC5qYXZhCmluZGV4IGE1NTFhZTEuLmRiMGE1MjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaENyb3NzQ29udGV4dC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoQ3Jvc3NDb250ZXh0L1dlYlRlc3QuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogICogVW5pdCB0ZXN0IGZvciBjcm9zcy1jb250ZXh0IEFTWU5DIGRpc3BhdGNoLgogICoKICAqIFRoaXMgdW5pdCB0ZXN0IGFjY2Vzc2VzIHNlcnZsZXQgImRpc3BhdGNoRnJvbSIgaW4gY29udGV4dCAiZnJvbUNvbnRleHQiLAotICogd2hpY2ggaW5pdGlhdGVzIGFuIEFTWU5DIGRpc3BhdGNoIHRvIHNlcnZsZXQgImRpc3BhdGNoVG8iIGluIGNvbnRleHQgCisgKiB3aGljaCBpbml0aWF0ZXMgYW4gQVNZTkMgZGlzcGF0Y2ggdG8gc2VydmxldCAiZGlzcGF0Y2hUbyIgaW4gY29udGV4dAogICogInRvQ29udGV4dCIuCiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgaG9zdCA9IGFyZ3NbMF07CiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgY3Jvc3MtY29udGV4dCBhc3luYyBkaXNwYXRjaCIpOwpAQCAtNTUsMTEgKzU1LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICIvZnJvbUNvbnRleHQvZGlzcGF0Y2hGcm9tP215bmFtZT1teXZhbHVlIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaENyb3NzQ29udGV4dC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoQ3Jvc3NDb250ZXh0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYmFjMDA1Ny4uMDgwOTgzYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoQ3Jvc3NDb250ZXh0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoQ3Jvc3NDb250ZXh0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1hc3luYy1jb250ZXh0LWRpc3BhdGNoLWNyb3NzLWNvbnRleHQiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLWFzeW5jLWNvbnRleHQtZGlzcGF0Y2gtY3Jvc3MtY29udGV4dCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZnJvbUNvbnRleHQud2FyIiB2YWx1ZT0iZnJvbUNvbnRleHQud2FyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hDcm9zc0NvbnRleHQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoQ3Jvc3NDb250ZXh0L2J1aWxkLnhtbAppbmRleCBjY2RkY2I0Li5iMzI1NTQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hDcm9zc0NvbnRleHQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaENyb3NzQ29udGV4dC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2Zyb21Db250ZXh0Lndhcn0iLz4KQEAgLTUwLDggKzUwLDggQEAKICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiLz4KICAgICAgICAgPGVhciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSIgaW5jbHVkZXM9Iioud2FyIi8+Ci0gICAgICAgIDwvZWFyPiAKLSAgICA8L3RhcmdldD4gCisgICAgICAgIDwvZWFyPgorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgpAQCAtNjQsOCArNjQsOCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgIAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDcgKzc2LDcgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hDcm9zc0NvbnRleHQvZGVzY3JpcHRvci9mcm9tX3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hDcm9zc0NvbnRleHQvZGVzY3JpcHRvci9mcm9tX3dlYi54bWwKaW5kZXggZGRkYWZmNS4uNjNmNmE4MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoQ3Jvc3NDb250ZXh0L2Rlc2NyaXB0b3IvZnJvbV93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaENyb3NzQ29udGV4dC9kZXNjcmlwdG9yL2Zyb21fd2ViLnhtbApAQCAtMTgsMTIgKzE4LDEyIEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMy4wIiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8zXzAueHNkIj4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5EaXNwYXRjaEZyb208L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5EaXNwYXRjaEZyb208L3NlcnZsZXQtY2xhc3M+CiAgICAgICAgIDxhc3luYy1zdXBwb3J0ZWQ+dHJ1ZTwvYXN5bmMtc3VwcG9ydGVkPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+RGlzcGF0Y2hGcm9tPC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hDcm9zc0NvbnRleHQvZGVzY3JpcHRvci90b193ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoQ3Jvc3NDb250ZXh0L2Rlc2NyaXB0b3IvdG9fd2ViLnhtbAppbmRleCA5NWQwYzM4Li5iN2RhYmZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hDcm9zc0NvbnRleHQvZGVzY3JpcHRvci90b193ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaENyb3NzQ29udGV4dC9kZXNjcmlwdG9yL3RvX3dlYi54bWwKQEAgLTE4LDEyICsxOCwxMiBAQAogLS0+CiAKIDx3ZWItYXBwIHZlcnNpb249IjMuMCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+RGlzcGF0Y2hUbzwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LkRpc3BhdGNoVG88L3NlcnZsZXQtY2xhc3M+CiAgICAgICAgIDxhc3luYy1zdXBwb3J0ZWQ+dHJ1ZTwvYXN5bmMtc3VwcG9ydGVkPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+RGlzcGF0Y2hUbzwvc2VydmxldC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoQ3Jvc3NDb250ZXh0L3NlcnZsZXQvdGVzdC9EaXNwYXRjaEZyb20uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaENyb3NzQ29udGV4dC9zZXJ2bGV0L3Rlc3QvRGlzcGF0Y2hGcm9tLmphdmEKaW5kZXggNTRmNGViMC4uY2I3OGJhNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoQ3Jvc3NDb250ZXh0L3NlcnZsZXQvdGVzdC9EaXNwYXRjaEZyb20uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hDcm9zc0NvbnRleHQvc2VydmxldC90ZXN0L0Rpc3BhdGNoRnJvbS5qYXZhCkBAIC00NCw2ICs0NCw2IEBACiAgICAgICAgICAgICAgICAgICAgIGFjLmRpc3BhdGNoKHRvQ29udGV4dCwgIi9kaXNwYXRjaFRvIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSwKLQkgICAgNTAwMCk7CisgICAgICAgIDUwMDApOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFRvUGF0aC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hUb1BhdGgvV2ViVGVzdC5qYXZhCmluZGV4IDdiYmUxOWMuLmE3MTVlNDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFRvUGF0aC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoVG9QYXRoL1dlYlRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQXN5bmNDb250ZXh0I2Rpc3BhdGNoIik7CkBAIC01MywxMSArNTMsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0P3RhcmdldD1EaXNwYXRjaFRhcmdldFdpdGhQYXRoIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFRvUGF0aC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoVG9QYXRoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjYyOTJiYy4uNDMxODU0MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoVG9QYXRoL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoVG9QYXRoL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtYXN5bmMtY29udGV4dC1kaXNwYXRjaC10by1wYXRoIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hUb1BhdGgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoVG9QYXRoL2J1aWxkLnhtbAppbmRleCBkYjJjYTM0Li41ZmUzZWM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hUb1BhdGgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFRvUGF0aC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDkgKzcwLDkgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hUb1BhdGgvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoVG9QYXRoL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBjZThjYzFmLi45ZWRiYTExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hUb1BhdGgvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFRvUGF0aC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTE4LDE4ICsxOCwxOCBAQAogLS0+CiAKIDx3ZWItYXBwIHZlcnNpb249IjMuMCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5UZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KICAgICAgICAgPGFzeW5jLXN1cHBvcnRlZD50cnVlPC9hc3luYy1zdXBwb3J0ZWQ+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+RGlzcGF0Y2hUYXJnZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5EaXNwYXRjaFRhcmdldDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vVGVzdFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoVG9QYXRoL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoVG9QYXRoL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCmluZGV4IGU0NGRkY2EuLjQ2OWE0MmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFRvUGF0aC9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hUb1BhdGgvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTQzLDYgKzQzLDYgQEAKICAgICAgICAgICAgICAgICAgICAgYWMuZGlzcGF0Y2godGFyZ2V0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9LAotCSAgICA1MDAwKTsKKyAgICAgICAgNTAwMCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoV2l0aEV4Y2VwdGlvbi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hXaXRoRXhjZXB0aW9uL1dlYlRlc3QuamF2YQppbmRleCA2NTYzY2Y0Li44YjBmOGRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hXaXRoRXhjZXB0aW9uL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hXaXRoRXhjZXB0aW9uL1dlYlRlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHTEFTU0ZJU0gtMTkzNjQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGFzdExpbmUpKSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGFzdExpbmUpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hXaXRoRXhjZXB0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hXaXRoRXhjZXB0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGNiMGQ2Ni4uZjRlNGY2OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoV2l0aEV4Y2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFdpdGhFeGNlcHRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1hc3luYy1jb250ZXh0LWRpc3BhdGNoLXdpdGgtZXhjZXB0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hXaXRoRXhjZXB0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFdpdGhFeGNlcHRpb24vYnVpbGQueG1sCmluZGV4IDlhZmI4NTMuLjBmN2FmYjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFdpdGhFeGNlcHRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFdpdGhFeGNlcHRpb24vYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ3LDIzICs0NywyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc1LDEwICs3NSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFplcm9BcmcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoWmVyb0FyZy9XZWJUZXN0LmphdmEKaW5kZXggOTlkZTJkNS4uMjQ1MTI0NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoWmVyb0FyZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoWmVyb0FyZy9XZWJUZXN0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEFzeW5jQ29udGV4dCNkaXNwYXRjaCIpOwpAQCAtNTMsMTEgKzUzLDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nIHRhcmdldCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArIHRhcmdldCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFplcm9BcmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFplcm9BcmcvYnVpbGQucHJvcGVydGllcwppbmRleCBiNjgyYjNjLi4xOTFhNjM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2haZXJvQXJnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoWmVyb0FyZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLWFzeW5jLWNvbnRleHQtemVyby1hcmctZGlzcGF0Y2giLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFplcm9BcmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoWmVyb0FyZy9idWlsZC54bWwKaW5kZXggYmVkNjBhMS4uY2Y1YWY5NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoWmVyb0FyZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoWmVyb0FyZy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDkgKzcwLDkgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2haZXJvQXJnL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFplcm9BcmcvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGIwMGIzZDcuLjc0MDM1OTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFplcm9BcmcvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFplcm9BcmcvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOCwxMiArMTgsMTIgQEAKIC0tPgogCiA8d2ViLWFwcCB2ZXJzaW9uPSIzLjAiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuVGVzdFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+CiAgICAgICAgIDxhc3luYy1zdXBwb3J0ZWQ+dHJ1ZTwvYXN5bmMtc3VwcG9ydGVkPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRIYXNPcmlnaW5hbFJlcXVlc3RBbmRSZXNwb25zZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0SGFzT3JpZ2luYWxSZXF1ZXN0QW5kUmVzcG9uc2UvV2ViVGVzdC5qYXZhCmluZGV4IGVmNDVlN2MuLjk0Y2MwYjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRIYXNPcmlnaW5hbFJlcXVlc3RBbmRSZXNwb25zZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dEhhc09yaWdpbmFsUmVxdWVzdEFuZFJlc3BvbnNlL1dlYlRlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEFzeW5jQ29udGV4dCNoYXNPcmlnaW5hbFJlcXVlc3RBbmRSZXNwb25zZSIpOwpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyBtb2RlKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRIYXNPcmlnaW5hbFJlcXVlc3RBbmRSZXNwb25zZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dEhhc09yaWdpbmFsUmVxdWVzdEFuZFJlc3BvbnNlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggN2ZkNmYwZC4uZjBmY2ZhYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dEhhc09yaWdpbmFsUmVxdWVzdEFuZFJlc3BvbnNlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dEhhc09yaWdpbmFsUmVxdWVzdEFuZFJlc3BvbnNlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtYXN5bmMtY29udGV4dC1oYXMtb3JpZ2luYWwtcmVxdWVzdC1hbmQtcmVzcG9uc2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRIYXNPcmlnaW5hbFJlcXVlc3RBbmRSZXNwb25zZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0SGFzT3JpZ2luYWxSZXF1ZXN0QW5kUmVzcG9uc2UvYnVpbGQueG1sCmluZGV4IGYxYzIyYWEuLmVlZDFkY2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRIYXNPcmlnaW5hbFJlcXVlc3RBbmRSZXNwb25zZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dEhhc09yaWdpbmFsUmVxdWVzdEFuZFJlc3BvbnNlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjMgKzQ0LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzIsMTAgKzcyLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dE11bHRpcGxlRGlzcGF0Y2gvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dE11bHRpcGxlRGlzcGF0Y2gvV2ViVGVzdC5qYXZhCmluZGV4IDY3N2UwYTAuLjU5NDA5YWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRNdWx0aXBsZURpc3BhdGNoL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0TXVsdGlwbGVEaXNwYXRjaC9XZWJUZXN0LmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIC8qCi0gKiBVbml0IHRlc3QgZm9yIHJlcGVhdGVkIGNhbGxzIHRvIEFzeW5jQ29udGV4dCNkaXNwYXRjaCB3aXRoIG9uZSAKKyAqIFVuaXQgdGVzdCBmb3IgcmVwZWF0ZWQgY2FsbHMgdG8gQXN5bmNDb250ZXh0I2Rpc3BhdGNoIHdpdGggb25lCiAgKiBpbnRlcnZlbmluZyBTZXJ2bGV0UmVxdWVzdCNzdGFydEFzeW5jLiBUaGlzIHVuaXQgdGVzdCBhbHNvIGNoZWNrcwogICogdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGludGVydmVuaW5nIFNlcnZsZXRSZXF1ZXN0I3N0YXJ0QXN5bmMgbm90aWZpZXMKICAqIHRoZSByZWdpc3RlcmVkIEFzeW5jTGlzdGVuZXIgYXQgaXRzIG9uU3RhcnRBc3luYyBtZXRob2QsIGFuZCBwcm92aWRlcwpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQXN5bmNDb250ZXh0I2Rpc3BhdGNoIik7CkBAIC01OSwxMSArNTksMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gZ2V0SHR0cFVSTENvbm5lY3Rpb24oIi9UZXN0U2VydmxldCIpOwogICAgICAgICBjb25uLmRpc2Nvbm5lY3QoKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dE11bHRpcGxlRGlzcGF0Y2gvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRNdWx0aXBsZURpc3BhdGNoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYWRiNTNiMi4uYTk0MzQ4MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dE11bHRpcGxlRGlzcGF0Y2gvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0TXVsdGlwbGVEaXNwYXRjaC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLWFzeW5jLWNvbnRleHQtbXVsdGlwbGUtZGlzcGF0Y2giLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRNdWx0aXBsZURpc3BhdGNoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRNdWx0aXBsZURpc3BhdGNoL2J1aWxkLnhtbAppbmRleCBkYjJjYTM0Li41ZmUzZWM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0TXVsdGlwbGVEaXNwYXRjaC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dE11bHRpcGxlRGlzcGF0Y2gvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCw5ICs3MCw5IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dE11bHRpcGxlRGlzcGF0Y2gvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dE11bHRpcGxlRGlzcGF0Y2gvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGIwMGIzZDcuLjc0MDM1OTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRNdWx0aXBsZURpc3BhdGNoL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0TXVsdGlwbGVEaXNwYXRjaC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTE4LDEyICsxOCwxMiBAQAogLS0+CiAKIDx3ZWItYXBwIHZlcnNpb249IjMuMCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5UZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KICAgICAgICAgPGFzeW5jLXN1cHBvcnRlZD50cnVlPC9hc3luYy1zdXBwb3J0ZWQ+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dE11bHRpcGxlRGlzcGF0Y2gvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0TXVsdGlwbGVEaXNwYXRjaC9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQppbmRleCBiOTUyOTA2Li4zOWM4MzlkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0TXVsdGlwbGVEaXNwYXRjaC9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0TXVsdGlwbGVEaXNwYXRjaC9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICBpZiAoIXJlcS5pc0FzeW5jU3VwcG9ydGVkKCkpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJBc3luYyBub3Qgc3VwcG9ydGVkIHdoZW4gaXQgc2hvdWxkIik7CiAgICAgICAgIH0KLSAgIAorCiAgICAgICAgIGlmIChyZXEuZ2V0RGlzcGF0Y2hlclR5cGUoKSA9PSBEaXNwYXRjaGVyVHlwZS5SRVFVRVNUKSB7CiAgICAgICAgICAgICAvLyBDb250YWluZXItaW5pdGlhdGVkIGRpc3BhdGNoCiAgICAgICAgICAgICByZXEuc2V0QXR0cmlidXRlKCJBQkMiLCAiREVGIik7CkBAIC04MCw3ICs4MCw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIFNlcnZsZXRSZXF1ZXN0I3N0YXJ0QXN5bmMgY2xlYXJzIHRoZSBsaXN0IG9mIEFzeW5jTGlzdGVuZXIKICAgICAgICAgICogaW5zdGFuY2VzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgQXN5bmNDb250ZXh0IC0gYWZ0ZXIgY2FsbGluZwotICAgICAgICAgKiBlYWNoIEFzeW5jTGlzdGVuZXIgYXQgaXRzIG9uU3RhcnRBc3luYyBtZXRob2QsIHdoaWNoIGlzIHRoZSAKKyAgICAgICAgICogZWFjaCBBc3luY0xpc3RlbmVyIGF0IGl0cyBvblN0YXJ0QXN5bmMgbWV0aG9kLCB3aGljaCBpcyB0aGUKICAgICAgICAgICogbWV0aG9kIHdlJ3JlIGluLgogICAgICAgICAgKiBSZWdpc3RlciBvdXJzZWx2ZXMgYWdhaW4sIHNvIHdlIGNvbnRpbnVlIHRvIGdldCBub3RpZmllZAogICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRTZXRUaW1lb3V0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRTZXRUaW1lb3V0L1dlYlRlc3QuamF2YQppbmRleCA5ODkwNGUwLi4zNjMyZDdiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0U2V0VGltZW91dC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dFNldFRpbWVvdXQvV2ViVGVzdC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQXN5bmNMaXN0ZW5lciNvblRpbWVvdXQiKTsKQEAgLTUzLDE1ICs1MywxNSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG51bGw7Ci0gICAgICAgCi0gICAgICAgIHRyeSB7ICAgICAKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICAgICBjb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRTZXRUaW1lb3V0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0U2V0VGltZW91dC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGVjMmFjY2MuLjU3NmFlY2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRTZXRUaW1lb3V0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dFNldFRpbWVvdXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1hc3luYy1jb250ZXh0LXNldC10aW1lb3V0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0U2V0VGltZW91dC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0U2V0VGltZW91dC9idWlsZC54bWwKaW5kZXggNTUwZTE2OS4uNzU0MWY3MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dFNldFRpbWVvdXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRTZXRUaW1lb3V0L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKQEAgLTcwLDkgKzcwLDkgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0U2V0VGltZW91dC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0U2V0VGltZW91dC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNzk3NzY1OC4uNzQwMzU5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dFNldFRpbWVvdXQvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRTZXRUaW1lb3V0L2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMTgsMTMgKzE4LDEzIEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMy4wIiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8zXzAueHNkIj4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgogICAgICAgICA8YXN5bmMtc3VwcG9ydGVkPnRydWU8L2FzeW5jLXN1cHBvcnRlZD4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vVGVzdFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jRGVsYXlEaXNwYXRjaEFuZENvbXBsZXRlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0RlbGF5RGlzcGF0Y2hBbmRDb21wbGV0ZS9XZWJUZXN0LmphdmEKaW5kZXggNWU2YTdmNy4uYWEwMzNkZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jRGVsYXlEaXNwYXRjaEFuZENvbXBsZXRlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNEZWxheURpc3BhdGNoQW5kQ29tcGxldGUvV2ViVGVzdC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgZGVsYXkgaW4gYXN5bmMgZGlzcGF0Y2ggYW5kIGNvbXBsZXRlIik7CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0RlbGF5RGlzcGF0Y2hBbmRDb21wbGV0ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jRGVsYXlEaXNwYXRjaEFuZENvbXBsZXRlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWZhMTk2Zi4uYTRhYjAyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jRGVsYXlEaXNwYXRjaEFuZENvbXBsZXRlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jRGVsYXlEaXNwYXRjaEFuZENvbXBsZXRlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtYXN5bmMtZGVsYXktZGlzcGF0Y2gtYW5kLWNvbXBsZXRlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNEZWxheURpc3BhdGNoQW5kQ29tcGxldGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jRGVsYXlEaXNwYXRjaEFuZENvbXBsZXRlL2J1aWxkLnhtbAppbmRleCBkYjJjYTM0Li41ZmUzZWM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNEZWxheURpc3BhdGNoQW5kQ29tcGxldGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0RlbGF5RGlzcGF0Y2hBbmRDb21wbGV0ZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDkgKzcwLDkgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNEZWxheURpc3BhdGNoQW5kQ29tcGxldGUvc2VydmxldC90ZXN0L1Rlc3RGaWx0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0RlbGF5RGlzcGF0Y2hBbmRDb21wbGV0ZS9zZXJ2bGV0L3Rlc3QvVGVzdEZpbHRlci5qYXZhCmluZGV4IGIzOWEzMGUuLjkxOTYwMjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0RlbGF5RGlzcGF0Y2hBbmRDb21wbGV0ZS9zZXJ2bGV0L3Rlc3QvVGVzdEZpbHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0RlbGF5RGlzcGF0Y2hBbmRDb21wbGV0ZS9zZXJ2bGV0L3Rlc3QvVGVzdEZpbHRlci5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiAKICAgICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gZmlsdGVyLmluaXQiKTsKLSAgICB9ICAgCisgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxLCBTZXJ2bGV0UmVzcG9uc2UgcmVzLAogICAgICAgICAgICAgRmlsdGVyQ2hhaW4gY2hhaW4pIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uQ29tcGxldGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkNvbXBsZXRlL1dlYlRlc3QuamF2YQppbmRleCBjOTAyYWQzLi5hZDY0ZGZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uQ29tcGxldGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25Db21wbGV0ZS9XZWJUZXN0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBBc3luY0xpc3RlbmVyI29uQ29tcGxldGUiKTsKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmcgbW9kZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC04NCw3ICs4NCw3IEBACiAgICAgICAgICAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIGlucHV0LmNsb3NlKCk7CiAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkge30KICAgICAgICAgICAgIGlmIChjb25uICE9IG51bGwpIGNvbm4uZGlzY29ubmVjdCgpOwotICAgICAgICB9ICAgICAKKyAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgSHR0cFVSTENvbm5lY3Rpb24gZ2V0SHR0cFVSTENvbm5lY3Rpb24oU3RyaW5nIHBhdGgpIHRocm93cyBFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkNvbXBsZXRlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uQ29tcGxldGUvYnVpbGQucHJvcGVydGllcwppbmRleCAzMmUwY2QyLi5iZTNhOWFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uQ29tcGxldGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uQ29tcGxldGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1hc3luYy1saXN0ZW5lci1vbi1jb21wbGV0ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkNvbXBsZXRlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25Db21wbGV0ZS9idWlsZC54bWwKaW5kZXggZGIyY2EzNC4uNWZlM2VjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkNvbXBsZXRlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uQ29tcGxldGUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCw5ICs3MCw5IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkNvbXBsZXRlL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25Db21wbGV0ZS9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNzk3NzY1OC4uNzQwMzU5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkNvbXBsZXRlL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uQ29tcGxldGUvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOCwxMyArMTgsMTMgQEAKIC0tPgogCiA8d2ViLWFwcCB2ZXJzaW9uPSIzLjAiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuVGVzdFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+CiAgICAgICAgIDxhc3luYy1zdXBwb3J0ZWQ+dHJ1ZTwvYXN5bmMtc3VwcG9ydGVkPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9UZXN0U2VydmxldDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uRXJyb3IvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkVycm9yL1dlYlRlc3QuamF2YQppbmRleCBlNDRmODE4Li5kYzFmNDM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uRXJyb3IvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25FcnJvci9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBBc3luY0xpc3RlbmVyI29uRXJyb3IiKTsKQEAgLTU0LDE1ICs1NCwxNSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG51bGw7Ci0gICAgICAgCi0gICAgICAgIHRyeSB7ICAgICAKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICAgICBjb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25FcnJvci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkVycm9yL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzY1MGY0MS4uYTA2NzhhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkVycm9yL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkVycm9yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtYXN5bmMtbGlzdGVuZXItb24tZXJyb3IiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25FcnJvci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uRXJyb3IvYnVpbGQueG1sCmluZGV4IDU1MGUxNjkuLjc1NDFmNzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25FcnJvci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkVycm9yL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKQEAgLTcwLDkgKzcwLDkgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uRXJyb3IvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkVycm9yL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA3OTc3NjU4Li43NDAzNTkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uRXJyb3IvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25FcnJvci9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTE4LDEzICsxOCwxMyBAQAogLS0+CiAKIDx3ZWItYXBwIHZlcnNpb249IjMuMCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5UZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KICAgICAgICAgPGFzeW5jLXN1cHBvcnRlZD50cnVlPC9hc3luYy1zdXBwb3J0ZWQ+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1Rlc3RTZXJ2bGV0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25FcnJvci9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25FcnJvci9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQppbmRleCAwNGU0OTk1Li44YjhmZTEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uRXJyb3Ivc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkVycm9yL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgIGlmICghcmVxLmlzQXN5bmNTdXBwb3J0ZWQoKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIkFzeW5jIG5vdCBzdXBwb3J0ZWQgd2hlbiBpdCBzaG91bGQiKTsKICAgICAgICAgfQotIAorCiAgICAgICAgIGlmICghcmVxLmdldERpc3BhdGNoZXJUeXBlKCkuZXF1YWxzKERpc3BhdGNoZXJUeXBlLkFTWU5DKSkgewogICAgICAgICAgICAgLy8gQ29udGFpbmVyLWluaXRpYXRlZCBkaXNwYXRjaAogICAgICAgICAgICAgZmluYWwgQXN5bmNDb250ZXh0IGFjID0gcmVxLnN0YXJ0QXN5bmMoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25UaW1lb3V0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25UaW1lb3V0L1dlYlRlc3QuamF2YQppbmRleCBiNmYwZDhlLi4xODQyMThlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPblRpbWVvdXQvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQXN5bmNMaXN0ZW5lciNvblRpbWVvdXQiKTsKQEAgLTU4LDE1ICs1OCwxNSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyBtb2RlLCBTdHJpbmcgZXhwZWN0ZWRSZXNwb25zZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG51bGw7Ci0gICAgICAgCi0gICAgICAgIHRyeSB7ICAgICAKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICAgICBjb250ZXh0Um9vdCArICIvQXN5bmNMaXN0ZW5lclRpbWVvdXRTZXJ2bGV0PyIgKyBtb2RlKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25UaW1lb3V0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGUyZTliNWEuLjJlY2QyNzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25UaW1lb3V0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPblRpbWVvdXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1hc3luYy1saXN0ZW5lci1vbi10aW1lb3V0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dC9idWlsZC54bWwKaW5kZXggYWNhODVkNi4uMmFhYmQ2NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPblRpbWVvdXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25UaW1lb3V0L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgZGVidWc9InRydWUiCkBAIC03MCw5ICs3MCw5IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPblRpbWVvdXQvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPblRpbWVvdXQvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDIwNjdlMjIuLmQ4MGJkODUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25UaW1lb3V0L2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTE4LDEzICsxOCwxMyBAQAogLS0+CiAKIDx3ZWItYXBwIHZlcnNpb249IjMuMCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+QXN5bmNMaXN0ZW5lclRpbWVvdXRTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuQXN5bmNMaXN0ZW5lclRpbWVvdXRTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgogICAgICAgICA8YXN5bmMtc3VwcG9ydGVkPnRydWU8L2FzeW5jLXN1cHBvcnRlZD4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPkFzeW5jTGlzdGVuZXJUaW1lb3V0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L0FzeW5jTGlzdGVuZXJUaW1lb3V0U2VydmxldDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dERpc3BhdGNoL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25UaW1lb3V0RGlzcGF0Y2gvV2ViVGVzdC5qYXZhCmluZGV4IDQ0MDQ2NmEuLjFmNTAzYmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25UaW1lb3V0RGlzcGF0Y2gvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25UaW1lb3V0RGlzcGF0Y2gvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgSVQgMTE3MzkiKTsKQEAgLTU3LDE1ICs1NywxNSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyBwYXRoLCBTdHJpbmcgbW9kZSwgU3RyaW5nIGV4cGVjdGVkUmVzcG9uc2UpIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBudWxsOwotICAgICAgIAotICAgICAgICB0cnkgeyAgICAgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICAgICAgY29udGV4dFJvb3QgKyAiLyIgKyBwYXRoICsgIj8iICsgbW9kZSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dERpc3BhdGNoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dERpc3BhdGNoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNWExYTJlNC4uMzVkMTgyYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPblRpbWVvdXREaXNwYXRjaC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25UaW1lb3V0RGlzcGF0Y2gvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1hc3luYy1saXN0ZW5lci1vbi10aW1lb3V0LWRpc3BhdGNoIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dERpc3BhdGNoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25UaW1lb3V0RGlzcGF0Y2gvYnVpbGQueG1sCmluZGV4IDdhMjIwZGIuLmZhNGUzMDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25UaW1lb3V0RGlzcGF0Y2gvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25UaW1lb3V0RGlzcGF0Y2gvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICA8ZGVsZXRlIGZpbGU9IldlYlRlc3QuY2xhc3MiLz4KICAgICAgIDxkZWxldGUgZmlsZT0iUmVSdW5Db25mLnR4dCIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE5ICs0NCwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIGRlYnVnPSJ0cnVlIgpAQCAtNzIsOSArNzIsOSBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25UaW1lb3V0RGlzcGF0Y2gvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dERpc3BhdGNoL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCmluZGV4IGU0MmViYzQuLmMyNWFlYTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25UaW1lb3V0RGlzcGF0Y2gvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPblRpbWVvdXREaXNwYXRjaC9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICAgICAgc2IuYXBwZW5kKCIsICIpOwogICAgICAgICAgICAgc2IuYXBwZW5kKGF0dHJCKTsKICAgICAgICAgfQotICAgICAgICBTdHJpbmcgb3V0cHV0ID0gc2IudG9TdHJpbmcoKTsgCisgICAgICAgIFN0cmluZyBvdXRwdXQgPSBzYi50b1N0cmluZygpOwogICAgICAgICB3cml0ZXIud3JpdGUob3V0cHV0KTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG91dHB1dCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3RhcnRPdXRzaWRlQXN5bmNEaXNwYXRjaFNjb3BlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N0YXJ0T3V0c2lkZUFzeW5jRGlzcGF0Y2hTY29wZS9XZWJUZXN0LmphdmEKaW5kZXggOTFkOGJiMi4uMTdmN2Q4OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3RhcnRPdXRzaWRlQXN5bmNEaXNwYXRjaFNjb3BlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdGFydE91dHNpZGVBc3luY0Rpc3BhdGNoU2NvcGUvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBDUiA2ODk1MTg3Iik7CkBAIC01NCwxMSArNTQsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdCArCiAgICAgICAgICAgICAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTk4LDcgKzk4LDcgQEAKIAogICAgICAgICBpZiAoIUVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiTWlzc2luZyBvciB1bmV4cGVjdGVkIHJlc3BvbnNlIGJvZHksICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQ6ICIgKyBFWFBFQ1RFRF9SRVNQT05TRSArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQ6ICIgKyBFWFBFQ1RFRF9SRVNQT05TRSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdGFydE91dHNpZGVBc3luY0Rpc3BhdGNoU2NvcGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N0YXJ0T3V0c2lkZUFzeW5jRGlzcGF0Y2hTY29wZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGY5MGMwZjguLmM4NjdmOTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N0YXJ0T3V0c2lkZUFzeW5jRGlzcGF0Y2hTY29wZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N0YXJ0T3V0c2lkZUFzeW5jRGlzcGF0Y2hTY29wZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLWFzeW5jLXN0YXJ0LW91dHNpZGUtYXN5bmMtZGlzcGF0Y2gtc2NvcGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N0YXJ0T3V0c2lkZUFzeW5jRGlzcGF0Y2hTY29wZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdGFydE91dHNpZGVBc3luY0Rpc3BhdGNoU2NvcGUvYnVpbGQueG1sCmluZGV4IGRiMmNhMzQuLjVmZTNlYzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N0YXJ0T3V0c2lkZUFzeW5jRGlzcGF0Y2hTY29wZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3RhcnRPdXRzaWRlQXN5bmNEaXNwYXRjaFNjb3BlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsOSArNzAsOSBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N0YXJ0T3V0c2lkZUFzeW5jRGlzcGF0Y2hTY29wZS9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdGFydE91dHNpZGVBc3luY0Rpc3BhdGNoU2NvcGUvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGIwMGIzZDcuLjc0MDM1OTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N0YXJ0T3V0c2lkZUFzeW5jRGlzcGF0Y2hTY29wZS9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3RhcnRPdXRzaWRlQXN5bmNEaXNwYXRjaFNjb3BlL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMTgsMTIgKzE4LDEyIEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMy4wIiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8zXzAueHNkIj4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgogICAgICAgICA8YXN5bmMtc3VwcG9ydGVkPnRydWU8L2FzeW5jLXN1cHBvcnRlZD4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdGFydE91dHNpZGVBc3luY0Rpc3BhdGNoU2NvcGUvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdGFydE91dHNpZGVBc3luY0Rpc3BhdGNoU2NvcGUvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggOGVlYzQwMS4uNzRjYjdkNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3RhcnRPdXRzaWRlQXN5bmNEaXNwYXRjaFNjb3BlL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N0YXJ0T3V0c2lkZUFzeW5jRGlzcGF0Y2hTY29wZS9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSwKLQkgICAgICAgIDUwMDApOworICAgICAgICAgICAgNTAwMCk7CiAgICAgICAgIH0gZWxzZSBpZiAocmVxLmdldERpc3BhdGNoZXJUeXBlKCkgPT0gRGlzcGF0Y2hlclR5cGUuQVNZTkMpIHsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBTbGVlcCBkdXJpbmcgdGhlIEFTWU5DIGRpc3BhdGNoLCB3aGljaCBpcyBleGVjdXRlZCBvbiBhCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRGYWxzZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRGYWxzZS9XZWJUZXN0LmphdmEKaW5kZXggNmQ3NmZhNy4uZmM3OTc1MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkRmFsc2UvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZEZhbHNlL1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGFzeW5jLXN1cHBvcnRlZCIpOwpAQCAtNTUsMTEgKzU1LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZEZhbHNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRGYWxzZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDYxZjJkNzMuLjFiOWQ4MjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZEZhbHNlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkRmFsc2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1hc3luYy1zdXBwb3J0ZWQtZmFsc2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZEZhbHNlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZEZhbHNlL2J1aWxkLnhtbAppbmRleCBkYjJjYTM0Li41ZmUzZWM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRGYWxzZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkRmFsc2UvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCw5ICs3MCw5IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkRmFsc2UvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkRmFsc2UvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGZmMWI0Y2YuLjVjMWE3NGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZEZhbHNlL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRGYWxzZS9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTE4LDIzICsxOCwyMyBAQAogLS0+CiAKIDx3ZWItYXBwIHZlcnNpb249IjMuMCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCI+Ci0gICAgIAorCiAgICAgPGZpbHRlcj4KICAgICAgICAgPGZpbHRlci1uYW1lPlRlc3RGaWx0ZXI8L2ZpbHRlci1uYW1lPgogICAgICAgICA8ZmlsdGVyLWNsYXNzPnRlc3QuVGVzdEZpbHRlcjwvZmlsdGVyLWNsYXNzPgotICAgIDwvZmlsdGVyPiAgICAKKyAgICA8L2ZpbHRlcj4KIAogICAgIDxmaWx0ZXItbWFwcGluZz4KICAgICAgICAgPGZpbHRlci1uYW1lPlRlc3RGaWx0ZXI8L2ZpbHRlci1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgPC9maWx0ZXItbWFwcGluZz4KLSAgICAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgogICAgICAgICA8YXN5bmMtc3VwcG9ydGVkPnRydWU8L2FzeW5jLXN1cHBvcnRlZD4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vVGVzdFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZURlY2xhcmF0aXZlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVEZWNsYXJhdGl2ZS9XZWJUZXN0LmphdmEKaW5kZXggYjA3MTIxYS4uZDUzYjlkOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZURlY2xhcmF0aXZlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRUcnVlRGVjbGFyYXRpdmUvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgYXN5bmMtc3VwcG9ydGVkIik7CkBAIC01NSwxMSArNTUsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZURlY2xhcmF0aXZlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRUcnVlRGVjbGFyYXRpdmUvYnVpbGQucHJvcGVydGllcwppbmRleCA4OWQxNjdiLi5hYTJkMzI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRUcnVlRGVjbGFyYXRpdmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRUcnVlRGVjbGFyYXRpdmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1hc3luYy1zdXBwb3J0ZWQtdHJ1ZS1kZWNsYXJhdGl2ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZURlY2xhcmF0aXZlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVEZWNsYXJhdGl2ZS9idWlsZC54bWwKaW5kZXggZGIyY2EzNC4uNWZlM2VjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZURlY2xhcmF0aXZlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRUcnVlRGVjbGFyYXRpdmUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCw5ICs3MCw5IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZURlY2xhcmF0aXZlL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVEZWNsYXJhdGl2ZS9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggYTE1NWUzZS4uYjkyODM1YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZURlY2xhcmF0aXZlL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRUcnVlRGVjbGFyYXRpdmUvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOCwyNCArMTgsMjQgQEAKIC0tPgogCiA8d2ViLWFwcCB2ZXJzaW9uPSIzLjAiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiPgotICAgICAKKwogICAgIDxmaWx0ZXI+CiAgICAgICAgIDxmaWx0ZXItbmFtZT5UZXN0RmlsdGVyPC9maWx0ZXItbmFtZT4KICAgICAgICAgPGZpbHRlci1jbGFzcz50ZXN0LlRlc3RGaWx0ZXI8L2ZpbHRlci1jbGFzcz4KICAgICAgICAgPGFzeW5jLXN1cHBvcnRlZD50cnVlPC9hc3luYy1zdXBwb3J0ZWQ+Ci0gICAgPC9maWx0ZXI+ICAgIAorICAgIDwvZmlsdGVyPgogCiAgICAgPGZpbHRlci1tYXBwaW5nPgogICAgICAgICA8ZmlsdGVyLW5hbWU+VGVzdEZpbHRlcjwvZmlsdGVyLW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICA8L2ZpbHRlci1tYXBwaW5nPgotICAgICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuVGVzdFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+CiAgICAgICAgIDxhc3luYy1zdXBwb3J0ZWQ+dHJ1ZTwvYXN5bmMtc3VwcG9ydGVkPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9UZXN0U2VydmxldDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRUcnVlUHJvZ3JhbW1hdGljL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVQcm9ncmFtbWF0aWMvV2ViVGVzdC5qYXZhCmluZGV4IDZmZTM3ZmYuLjMzZjA5ZDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVQcm9ncmFtbWF0aWMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVQcm9ncmFtbWF0aWMvV2ViVGVzdC5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgYXN5bmMtc3VwcG9ydGVkIik7CkBAIC01NiwxMSArNTYsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvbmV3U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRUcnVlUHJvZ3JhbW1hdGljL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRUcnVlUHJvZ3JhbW1hdGljL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMTdhNjljMC4uMDNjYjg2MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZVByb2dyYW1tYXRpYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVQcm9ncmFtbWF0aWMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1hc3luYy1zdXBwb3J0ZWQtdHJ1ZS1wcm9ncmFtbWF0aWMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVQcm9ncmFtbWF0aWMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZVByb2dyYW1tYXRpYy9idWlsZC54bWwKaW5kZXggZGIyY2EzNC4uNWZlM2VjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZVByb2dyYW1tYXRpYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZVByb2dyYW1tYXRpYy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDkgKzcwLDkgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRUcnVlUHJvZ3JhbW1hdGljL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVQcm9ncmFtbWF0aWMvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDMwMDI3ZmYuLmYxZmU1MWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVQcm9ncmFtbWF0aWMvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVQcm9ncmFtbWF0aWMvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOCw3ICsxOCw3IEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMy4wIiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8zXzAueHNkIj4KLSAgICAgCisKICAgPGxpc3RlbmVyPgogICAgIDxsaXN0ZW5lci1jbGFzcz50ZXN0Lk15TGlzdGVuZXI8L2xpc3RlbmVyLWNsYXNzPgogICA8L2xpc3RlbmVyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZVByb2dyYW1tYXRpYy9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZVByb2dyYW1tYXRpYy9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCmluZGV4IGZiOGFlYjUuLmM3NzNjYTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVQcm9ncmFtbWF0aWMvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRUcnVlUHJvZ3JhbW1hdGljL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgRmlsdGVyUmVnaXN0cmF0aW9uLkR5bmFtaWMgZnIgPSBzYy5hZGRGaWx0ZXIoCiAgICAgICAgICAgICAiTmV3RmlsdGVyIiwgInRlc3QuTmV3RmlsdGVyIik7CiAgICAgICAgIGZyLmFkZE1hcHBpbmdGb3JTZXJ2bGV0TmFtZXMoRW51bVNldC5vZihEaXNwYXRjaGVyVHlwZS5SRVFVRVNUKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAiTmV3U2VydmxldCIpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAiTmV3U2VydmxldCIpOwogICAgICAgICBmci5zZXRBc3luY1N1cHBvcnRlZCh0cnVlKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNUaW1lb3V0Tm9MaXN0ZW5lci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNUaW1lb3V0Tm9MaXN0ZW5lci9XZWJUZXN0LmphdmEKaW5kZXggNzk4YzZlZi4uMmNmZTc0MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jVGltZW91dE5vTGlzdGVuZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1RpbWVvdXROb0xpc3RlbmVyL1dlYlRlc3QuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogLyoKICAqIFVuaXQgdGVzdCBmb3IgdGhlIHNwZWMgcmVxdWlyZW1lbnQgdGhhdCBpZiBhbiBhc3luYyB0aW1lb3V0IG9jY3VycywgYW5kCiAgKiB0aGVyZSBhcmUgbm8gQXN5bmNMaXN0ZW5lcnMgcmVnaXN0ZXJlZCwgdGhlIGNvbnRhaW5lciBNVVNUIGRvIGFuIEVSUk9SCi0gKiBkaXNwYXRjaCB3aXRoIGEgc3RhdHVzIGNvZGUgZXF1YWwgdG8gNTAwLCB3aGljaCBpbiB0aGlzIHRlc3QgY2FzZSBpcyAKKyAqIGRpc3BhdGNoIHdpdGggYSBzdGF0dXMgY29kZSBlcXVhbCB0byA1MDAsIHdoaWNoIGluIHRoaXMgdGVzdCBjYXNlIGlzCiAgKiBtYXBwZWQgdG8gZXJyb3IuanNwLCB3aGljaCByZXNldHMgdGhlIHN0YXR1cyBjb2RlIHRvIDIwMCBhbmQgb3V0cHV0cwogICogdGhlIHN0cmluZyAiU1VDQ0VTUyIgdG8gdGhlIHJlc3BvbnNlLgogICovCkBAIC0zNCw3ICszNCw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRVhQRUNURURfUkVTUE9OU0VfQ09ERSA9IDIwMDsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSAiU1VDQ0VTUyI7Ci0gICAKKwogICAgIHByaXZhdGUgU3RyaW5nIGhvc3Q7CiAgICAgcHJpdmF0ZSBTdHJpbmcgcG9ydDsKICAgICBwcml2YXRlIFN0cmluZyBjb250ZXh0Um9vdDsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBhc3luYyB0aW1lb3V0IHdpdGhvdXQgIiArCkBAIC01OCwxMSArNTgsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbnVsbDsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jVGltZW91dE5vTGlzdGVuZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1RpbWVvdXROb0xpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjUyZmY3MC4uMmY2OTExZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jVGltZW91dE5vTGlzdGVuZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNUaW1lb3V0Tm9MaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLWFzeW5jLXRpbWVvdXQtbm8tbGlzdGVuZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1RpbWVvdXROb0xpc3RlbmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1RpbWVvdXROb0xpc3RlbmVyL2J1aWxkLnhtbAppbmRleCA1NTBlMTY5Li43NTQxZjcyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNUaW1lb3V0Tm9MaXN0ZW5lci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jVGltZW91dE5vTGlzdGVuZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgpAQCAtNzAsOSArNzAsOSBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1RpbWVvdXROb0xpc3RlbmVyL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1RpbWVvdXROb0xpc3RlbmVyL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA0Y2E1YzBiLi4yODAzNDAwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNUaW1lb3V0Tm9MaXN0ZW5lci9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jVGltZW91dE5vTGlzdGVuZXIvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOCwxMyArMTgsMTMgQEAKIC0tPgogCiA8d2ViLWFwcCB2ZXJzaW9uPSIzLjAiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuVGVzdFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+CiAgICAgICAgIDxhc3luYy1zdXBwb3J0ZWQ+dHJ1ZTwvYXN5bmMtc3VwcG9ydGVkPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9UZXN0U2VydmxldDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXV0aEFubm90YXRpb25Jbmhlcml0YW5jZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXV0aEFubm90YXRpb25Jbmhlcml0YW5jZS9XZWJUZXN0LmphdmEKaW5kZXggNDZkZTJjZi4uNjZlYWNkMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2F1dGhBbm5vdGF0aW9uSW5oZXJpdGFuY2UvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hdXRoQW5ub3RhdGlvbkluaGVyaXRhbmNlL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEBTZXJ2bGV0U2VjdXJpdHkgSW5oZXJpdGFuY2UiKTsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHRocm93cyBFeGNlcHRpb24gewpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIG9rID0gb2sgJiYgZXhwZWN0ZWQuZXF1YWxzKGxpbmUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7Ci0gICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGVzdCBVTlBSRURJQ1RFRC1GQUlMVVJFIik7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgIHRyeSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXV0aEFubm90YXRpb25Jbmhlcml0YW5jZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2F1dGhBbm5vdGF0aW9uSW5oZXJpdGFuY2UvYnVpbGQucHJvcGVydGllcwppbmRleCA3MjdlMzFhLi5lYjUzMzgyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXV0aEFubm90YXRpb25Jbmhlcml0YW5jZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hdXRoQW5ub3RhdGlvbkluaGVyaXRhbmNlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtYXV0aC1hbm5vdGF0aW9uLWluaGVyaXRhbmNlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXV0aEFubm90YXRpb25Jbmhlcml0YW5jZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXV0aEFubm90YXRpb25Jbmhlcml0YW5jZS9idWlsZC54bWwKaW5kZXggOWYyZDc5OC4uMTNkNDMxZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2F1dGhBbm5vdGF0aW9uSW5oZXJpdGFuY2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hdXRoQW5ub3RhdGlvbkluaGVyaXRhbmNlL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICAgIDxkZWxldGUgZmlsZT0iV2ViVGVzdC5jbGFzcyIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTU3LDEwICs1NywxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNjgsMTQgKzY4LDE0IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvYXBwc2Vydi1ydC5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTkwLDcgKzkwLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9InNldHVwIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtdXNlci1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2F1dGhBbm5vdGF0aW9ucy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXV0aEFubm90YXRpb25zL1dlYlRlc3QuamF2YQppbmRleCBjODEzYTkzLi4zNDliZDQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXV0aEFubm90YXRpb25zL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXV0aEFubm90YXRpb25zL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEBTZXJ2bGV0U2VjdXJpdHkiKTsKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHJ1bigpIHRocm93cyBFeGNlcHRpb24gewpAQCAtNzIsNyArNzIsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiBkb1dlYk1ldGhvZChTdHJpbmcgd2ViTWV0aG9kLCBTdHJpbmcgaG9zdCwgaW50IHBvcnQsCi0gICAgICAgICAgICBTdHJpbmcgY29udGV4dFBhdGgsIGJvb2xlYW4gcmVxdWlyZUF1dGhlbnRpY2F0ZSwgCisgICAgICAgICAgICBTdHJpbmcgY29udGV4dFBhdGgsIGJvb2xlYW4gcmVxdWlyZUF1dGhlbnRpY2F0ZSwKICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGUsIFN0cmluZyBleHBlY3RlZCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgU3RyaW5nIHVybFN0ciA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFBhdGg7CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgb2sgPSBvayAmJiBleHBlY3RlZC5lcXVhbHMobGluZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hdXRoQW5ub3RhdGlvbnMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hdXRoQW5ub3RhdGlvbnMvYnVpbGQucHJvcGVydGllcwppbmRleCBmN2IwYThmLi41ZTAzMTFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXV0aEFubm90YXRpb25zL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2F1dGhBbm5vdGF0aW9ucy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLWF1dGgtYW5ub3RhdGlvbnMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hdXRoQW5ub3RhdGlvbnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2F1dGhBbm5vdGF0aW9ucy9idWlsZC54bWwKaW5kZXggNzViZDViNi4uY2Y1NGYwOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2F1dGhBbm5vdGF0aW9ucy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2F1dGhBbm5vdGF0aW9ucy9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IldlYlRlc3QuY2xhc3MiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01NywxMCArNTcsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTY4LDE0ICs2OCwxNCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtcnQuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC05MCw3ICs5MCw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXVzZXItY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hdXRoQW5ub3RhdGlvbnMvc2VydmxldC9UZXN0U2VydmxldDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hdXRoQW5ub3RhdGlvbnMvc2VydmxldC9UZXN0U2VydmxldDIuamF2YQppbmRleCA3ZTAzYmM2Li41Y2RiNWU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXV0aEFubm90YXRpb25zL3NlcnZsZXQvVGVzdFNlcnZsZXQyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2F1dGhBbm5vdGF0aW9ucy9zZXJ2bGV0L1Rlc3RTZXJ2bGV0Mi5qYXZhCkBAIC00NywxNCArNDcsMTQgQEAKICAgICAgICAgd3JpdGVyLndyaXRlKCJwOkhlbGxvLCAiICsgcmVxLmdldFJlbW90ZVVzZXIoKSArICJcbiIpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvT3B0aW9ucyhIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykgCisgICAgcHVibGljIHZvaWQgZG9PcHRpb25zKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKIAogICAgICAgICBQcmludFdyaXRlciB3cml0ZXIgPSByZXMuZ2V0V3JpdGVyKCk7CiAgICAgICAgIHdyaXRlci53cml0ZSgibzpIZWxsbyIpOwogICAgIH0KIAotICAgIHByb3RlY3RlZCB2b2lkIGRvUHV0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKSAKKyAgICBwcm90ZWN0ZWQgdm9pZCBkb1B1dChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgd3JpdGVyID0gcmVzLmdldFdyaXRlcigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Nvb2tpZUh0dHBPbmx5L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9jb29raWVIdHRwT25seS9XZWJUZXN0LmphdmEKaW5kZXggZmZhOGQxNi4uMGZiYTY4NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Nvb2tpZUh0dHBPbmx5L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvY29va2llSHR0cE9ubHkvV2ViVGVzdC5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEh0dHBPbmx5IGNvb2tpZXMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00NSw3ICs0NSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZVNlcnZsZXQoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvY29va2llSHR0cE9ubHkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9jb29raWVIdHRwT25seS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGYyN2IxYWIuLjY4YWRlOTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9jb29raWVIdHRwT25seS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9jb29raWVIdHRwT25seS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLWNvb2tpZS1odHRwLW9ubHkiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9jb29raWVIdHRwT25seS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvY29va2llSHR0cE9ubHkvYnVpbGQueG1sCmluZGV4IGU4YTA2N2QuLmFlODkwNzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9jb29raWVIdHRwT25seS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Nvb2tpZUh0dHBPbmx5L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjEgKzQyLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC02OCwxMCArNjgsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGVmYXVsdEVycm9yUGFnZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGVmYXVsdEVycm9yUGFnZS9XZWJUZXN0LmphdmEKaW5kZXggYTM5M2U0ZS4uMTRiYWU2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2RlZmF1bHRFcnJvclBhZ2UvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kZWZhdWx0RXJyb3JQYWdlL1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBkZWZhdWx0IGVycm9yIHBhZ2UiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00OCw4ICs0OCw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kZWZhdWx0RXJyb3JQYWdlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGVmYXVsdEVycm9yUGFnZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQ3OWI4MmEuLjhiMThjZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kZWZhdWx0RXJyb3JQYWdlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2RlZmF1bHRFcnJvclBhZ2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1kZWZhdWx0LWVycm9yLXBhZ2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kZWZhdWx0RXJyb3JQYWdlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kZWZhdWx0RXJyb3JQYWdlL2J1aWxkLnhtbAppbmRleCBlOGEwNjdkLi5hZTg5MDczIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGVmYXVsdEVycm9yUGFnZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2RlZmF1bHRFcnJvclBhZ2UvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMSArNDIsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTY4LDEwICs2OCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kZWZhdWx0RXJyb3JQYWdlL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kZWZhdWx0RXJyb3JQYWdlL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQppbmRleCA0YzEyNTMzLi40YTMxODEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGVmYXVsdEVycm9yUGFnZS9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2RlZmF1bHRFcnJvclBhZ2Uvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIAogcHVibGljIGNsYXNzIFRlc3RTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICByZXMuc2VuZEVycm9yKDQwNCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGlzcGF0Y2hGb3J3YXJkQXN5bmNEaXNwYXRjaC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGlzcGF0Y2hGb3J3YXJkQXN5bmNEaXNwYXRjaC9XZWJUZXN0LmphdmEKaW5kZXggNGRkYjZhMS4uOGM5OTY0ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Rpc3BhdGNoRm9yd2FyZEFzeW5jRGlzcGF0Y2gvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kaXNwYXRjaEZvcndhcmRBc3luY0Rpc3BhdGNoL1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPWFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBkaXNwYXRjaCBmb3J3YXJkIGFzeW5jIGRpc3BhdGNoIik7CkBAIC01OSwxMSArNTksMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmcgcGF0aCwgU3RyaW5nIGV4cGVjdGVkUmVzcG9uc2UpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdCArIHBhdGgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kaXNwYXRjaEZvcndhcmRBc3luY0Rpc3BhdGNoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGlzcGF0Y2hGb3J3YXJkQXN5bmNEaXNwYXRjaC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDcyN2VkYWMuLmY4NGM0NTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kaXNwYXRjaEZvcndhcmRBc3luY0Rpc3BhdGNoL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Rpc3BhdGNoRm9yd2FyZEFzeW5jRGlzcGF0Y2gvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1kaXNwYXRjaC1mb3J3YXJkLWFzeW5jLWRpc3BhdGNoIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGlzcGF0Y2hGb3J3YXJkQXN5bmNEaXNwYXRjaC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGlzcGF0Y2hGb3J3YXJkQXN5bmNEaXNwYXRjaC9idWlsZC54bWwKaW5kZXggNDU5NGE0Zi4uZjZjZjcxYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Rpc3BhdGNoRm9yd2FyZEFzeW5jRGlzcGF0Y2gvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kaXNwYXRjaEZvcndhcmRBc3luY0Rpc3BhdGNoL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICAgIDxkZWxldGUgZmlsZT0iV2ViVGVzdC5jbGFzcyIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQzLDIzICs0MywyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcxLDkgKzcxLDkgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGlzcGF0Y2hGb3J3YXJkQXN5bmNEaXNwYXRjaC9zZXJ2bGV0L3Rlc3QvRGlzcGF0Y2hGb3J3YXJkLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGlzcGF0Y2hGb3J3YXJkQXN5bmNEaXNwYXRjaC9zZXJ2bGV0L3Rlc3QvRGlzcGF0Y2hGb3J3YXJkLmphdmEKaW5kZXggNzc3MmYxZS4uZDFhNDVmOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Rpc3BhdGNoRm9yd2FyZEFzeW5jRGlzcGF0Y2gvc2VydmxldC90ZXN0L0Rpc3BhdGNoRm9yd2FyZC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kaXNwYXRjaEZvcndhcmRBc3luY0Rpc3BhdGNoL3NlcnZsZXQvdGVzdC9EaXNwYXRjaEZvcndhcmQuamF2YQpAQCAtMTgsMTkgKzE4LDE5IEBACiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci0gICAgICAgICAgICAKKwogaW1wb3J0IGpha2FydGEuc2VydmxldC5EaXNwYXRjaGVyVHlwZTsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuYW5ub3RhdGlvbi5XZWJTZXJ2bGV0OwogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0OwogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOwotICAgICAgICAgICAgICAgIAorCiBAV2ViU2VydmxldCh1cmxQYXR0ZXJucz17Ii9kaXNwYXRjaGZvcndhcmQifSwgYXN5bmNTdXBwb3J0ZWQ9dHJ1ZSkKIHB1YmxpYyBjbGFzcyBEaXNwYXRjaEZvcndhcmQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBTdHJpbmcgZm9yd2FyZFVybCA9ICIvYXN5bmNkaXNwYXRjaCI7CiAgICAgICAgIFN0cmluZyB3aXRoYXJncyA9IHJlcS5nZXRQYXJhbWV0ZXIoIndpdGhhcmdzIik7CiAgICAgICAgIGlmICh3aXRoYXJncyAhPSBudWxsKSB7CkBAIC00MCwxMCArNDAsMTAgQEAKICAgICAgICAgaWYgKCFyZXEuZ2V0RGlzcGF0Y2hlclR5cGUoKS5lcXVhbHMoRGlzcGF0Y2hlclR5cGUuQVNZTkMpKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRGOiBmb3J3YXJkaW5nICIgKyBmb3J3YXJkVXJsKTsKICAgICAgICAgICAgIHJlcS5nZXRSZXF1ZXN0RGlzcGF0Y2hlcihmb3J3YXJkVXJsKS5mb3J3YXJkKHJlcSwgcmVzKTsKLSAgICAgICAgfSBlbHNlIHsgICAgICAgIAorICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJERjogYXN5bmMgZGlzcGF0Y2ggdHlwZSAuLi4iKTsKICAgICAgICAgICAgIFByaW50V3JpdGVyIHdyaXRlciA9IHJlcy5nZXRXcml0ZXIoKTsKICAgICAgICAgICAgIHdyaXRlci53cml0ZSgiSGVsbG8gZnJvbSBEaXNwYXRjaEZvcndhcmRcbiIpOwotICAgICAgICB9IAotICAgIH0gICAgICAgCisgICAgICAgIH0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGlzcGF0Y2hGb3J3YXJkQXN5bmNEaXNwYXRjaC9zZXJ2bGV0L3Rlc3QvRGlzcGF0Y2hGb3J3YXJkMC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Rpc3BhdGNoRm9yd2FyZEFzeW5jRGlzcGF0Y2gvc2VydmxldC90ZXN0L0Rpc3BhdGNoRm9yd2FyZDAuamF2YQppbmRleCA0ZGFhM2JiLi5mNjI2ZmViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGlzcGF0Y2hGb3J3YXJkQXN5bmNEaXNwYXRjaC9zZXJ2bGV0L3Rlc3QvRGlzcGF0Y2hGb3J3YXJkMC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kaXNwYXRjaEZvcndhcmRBc3luY0Rpc3BhdGNoL3NlcnZsZXQvdGVzdC9EaXNwYXRjaEZvcndhcmQwLmphdmEKQEAgLTE4LDI4ICsxOCwyOCBAQAogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotICAgICAgICAgICAgCisKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuRGlzcGF0Y2hlclR5cGU7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0LmFubm90YXRpb24uV2ViU2VydmxldDsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldDsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsKLSAgICAgICAgICAgICAgICAKKwogQFdlYlNlcnZsZXQodXJsUGF0dGVybnM9eyIvZGlzcGF0Y2hmb3J3YXJkMCJ9LCBhc3luY1N1cHBvcnRlZD10cnVlKQogcHVibGljIGNsYXNzIERpc3BhdGNoRm9yd2FyZDAgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBTdHJpbmcgZm9yd2FyZFVybCA9ICIvZGlzcGF0Y2hmb3J3YXJkIjsKIAogICAgICAgICBpZiAoIXJlcS5nZXREaXNwYXRjaGVyVHlwZSgpLmVxdWFscyhEaXNwYXRjaGVyVHlwZS5BU1lOQykpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiREYwOiBmb3J3YXJkaW5nICIgKyBmb3J3YXJkVXJsKTsKICAgICAgICAgICAgIHJlcS5nZXRSZXF1ZXN0RGlzcGF0Y2hlcihmb3J3YXJkVXJsKS5mb3J3YXJkKHJlcSwgcmVzKTsKLSAgICAgICAgfSBlbHNlIHsgICAgICAgIAorICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJERjA6IGFzeW5jIGRpc3BhdGNoIHR5cGUgLi4uIik7CiAgICAgICAgICAgICBQcmludFdyaXRlciB3cml0ZXIgPSByZXMuZ2V0V3JpdGVyKCk7CiAgICAgICAgICAgICB3cml0ZXIud3JpdGUoIkhlbGxvIGZyb20gRGlzcGF0Y2hGb3J3YXJkMFxuIik7Ci0gICAgICAgIH0gCi0gICAgfSAgICAgICAKKyAgICAgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kaXNwYXRjaEZvcndhcmRBc3luY0Rpc3BhdGNoL3NlcnZsZXQvdGVzdC9OYW1lZERpc3BhdGNoRm9yd2FyZDAuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kaXNwYXRjaEZvcndhcmRBc3luY0Rpc3BhdGNoL3NlcnZsZXQvdGVzdC9OYW1lZERpc3BhdGNoRm9yd2FyZDAuamF2YQppbmRleCBmN2VlYWQ3Li42ZGFjNmFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGlzcGF0Y2hGb3J3YXJkQXN5bmNEaXNwYXRjaC9zZXJ2bGV0L3Rlc3QvTmFtZWREaXNwYXRjaEZvcndhcmQwLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Rpc3BhdGNoRm9yd2FyZEFzeW5jRGlzcGF0Y2gvc2VydmxldC90ZXN0L05hbWVkRGlzcGF0Y2hGb3J3YXJkMC5qYXZhCkBAIC0xOCwyNyArMTgsMjcgQEAKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLSAgICAgICAgICAgIAorCiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0LkRpc3BhdGNoZXJUeXBlOwogaW1wb3J0IGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuc2VydmxldC5hbm5vdGF0aW9uLldlYlNlcnZsZXQ7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXQ7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7Ci0gICAgICAgICAgICAgICAgCisKIEBXZWJTZXJ2bGV0KHVybFBhdHRlcm5zPXsiL25hbWVkZGlzcGF0Y2hmb3J3YXJkMCJ9LCBhc3luY1N1cHBvcnRlZD10cnVlKQogcHVibGljIGNsYXNzIE5hbWVkRGlzcGF0Y2hGb3J3YXJkMCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIFN0cmluZyBzZXJ2bGV0TmFtZSA9ICJ0ZXN0LkRpc3BhdGNoRm9yd2FyZCI7CiAgICAgICAgIGlmICghcmVxLmdldERpc3BhdGNoZXJUeXBlKCkuZXF1YWxzKERpc3BhdGNoZXJUeXBlLkFTWU5DKSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJERjA6IG5hbWVkIGZvcndhcmRpbmcgIiArIHNlcnZsZXROYW1lKTsKICAgICAgICAgICAgIGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0TmFtZWREaXNwYXRjaGVyKHNlcnZsZXROYW1lKS5mb3J3YXJkKHJlcSwgcmVzKTsKLSAgICAgICAgfSBlbHNlIHsgICAgICAgIAorICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJERjA6IGFzeW5jIGRpc3BhdGNoIHR5cGUgLi4uIik7CiAgICAgICAgICAgICBQcmludFdyaXRlciB3cml0ZXIgPSByZXMuZ2V0V3JpdGVyKCk7CiAgICAgICAgICAgICB3cml0ZXIud3JpdGUoIkhlbGxvIGZyb20gRGlzcGF0Y2hGb3J3YXJkMFxuIik7Ci0gICAgICAgIH0gCi0gICAgfSAgICAgICAKKyAgICAgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9maWx0ZXJXaXRoRW1wdHlVcmwvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2ZpbHRlcldpdGhFbXB0eVVybC9XZWJUZXN0LmphdmEKaW5kZXggNWIxNmRhZC4uYjc2Y2YyMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2ZpbHRlcldpdGhFbXB0eVVybC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2ZpbHRlcldpdGhFbXB0eVVybC9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRlc3QgZm9yIGZpbHRlciB3aXRoIGVtcHR5IHVybCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvIjsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikKQEAgLTkzLDEwICs5MywxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2ZpbHRlcldpdGhFbXB0eVVybC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2ZpbHRlcldpdGhFbXB0eVVybC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDAzODc0OGUuLmU4M2JjOWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9maWx0ZXJXaXRoRW1wdHlVcmwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZmlsdGVyV2l0aEVtcHR5VXJsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtZmlsdGVyLXdpdGgtZW1wdHktdXJsIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZmlsdGVyV2l0aEVtcHR5VXJsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9maWx0ZXJXaXRoRW1wdHlVcmwvYnVpbGQueG1sCmluZGV4IDMyZDM2YWYuLjU1YTJhMWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9maWx0ZXJXaXRoRW1wdHlVcmwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9maWx0ZXJXaXRoRW1wdHlVcmwvYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ3LDIzICs0NywyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc1LDEwICs3NSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9maWx0ZXJXaXRoRW1wdHlVcmwvc2VydmxldC9UZXN0RmlsdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZmlsdGVyV2l0aEVtcHR5VXJsL3NlcnZsZXQvVGVzdEZpbHRlci5qYXZhCmluZGV4IDg2M2UxODcuLmM2MTQ0OTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9maWx0ZXJXaXRoRW1wdHlVcmwvc2VydmxldC9UZXN0RmlsdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2ZpbHRlcldpdGhFbXB0eVVybC9zZXJ2bGV0L1Rlc3RGaWx0ZXIuamF2YQpAQCAtMzQsNyArMzQsNyBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBmaWx0ZXIuaW5pdCIpOwogICAgICAgICBtZXNnID0gZmlsdGVyQ29uZmlnLmdldEluaXRQYXJhbWV0ZXIoIm1lc2ciKTsKLSAgICB9ICAgCisgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxLCBTZXJ2bGV0UmVzcG9uc2UgcmVzLAogICAgICAgICAgICAgRmlsdGVyQ2hhaW4gY2hhaW4pIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvamF2YXhTZXJ2bGV0Q29udGV4dE9yZGVyZWRMaWJzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9qYXZheFNlcnZsZXRDb250ZXh0T3JkZXJlZExpYnMvV2ViVGVzdC5qYXZhCmluZGV4IDM0N2MxNmYuLmZmZTExNWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9qYXZheFNlcnZsZXRDb250ZXh0T3JkZXJlZExpYnMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9qYXZheFNlcnZsZXRDb250ZXh0T3JkZXJlZExpYnMvV2ViVGVzdC5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAgKgogICogVGhlIG1haW4gd2ViLnhtbCBkZWNsYXJlcyBhbiBhYnNvbHV0ZSBvcmRlcmluZyBvZiB0aGUgdHdvIHdlYiBmcmFnbWVudHMsCiAgKiB3aXRoIHdlYkZyYWdtZW50MiBsaXN0ZWQgZmlyc3QsIGZvbGxvd2VkIGJ5IHdlYkZyYWdtZW50MS4KLSAqIAorICoKICAqIEVpdGhlciBTZXJ2bGV0Q29udGV4dExpc3RlbmVyIGNoZWNrcyBmb3IgdGhlIHByZXNlbmNlIGFuZCBjb250ZW50cyBvZiB0aGUKICAqIGpha2FydGEuc2VydmxldC5jb250ZXh0Lm9yZGVyZWRMaWJzIFNlcnZsZXRDb250ZXh0IGF0dHJpYnV0ZSBhbmQsIGlmCiAgKiBzYXRpc2ZpZWQsIHJlZ2lzdGVycyBhIFNlcnZsZXQuCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yICIgKwogICAgICAgICAgICAgImpha2FydGEuc2VydmxldC5jb250ZXh0Lm9yZGVyZWRMaWJzIFNlcnZsZXRDb250ZXh0IGF0dHJpYnV0ZSIpOwpAQCAtNzEsNyArNzEsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QgKwogICAgICAgICAgICAgIi93ZWJGcmFnbWVudDFTZXJ2bGV0IjsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9qYXZheFNlcnZsZXRDb250ZXh0T3JkZXJlZExpYnMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9qYXZheFNlcnZsZXRDb250ZXh0T3JkZXJlZExpYnMvYnVpbGQucHJvcGVydGllcwppbmRleCAyMjM5NWE3Li4yY2U3NzJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvamF2YXhTZXJ2bGV0Q29udGV4dE9yZGVyZWRMaWJzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2phdmF4U2VydmxldENvbnRleHRPcmRlcmVkTGlicy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLWphdmF4LXNlcnZsZXQtY29udGV4dC1vcmRlcmVkTGlicyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2phdmF4U2VydmxldENvbnRleHRPcmRlcmVkTGlicy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvamF2YXhTZXJ2bGV0Q29udGV4dE9yZGVyZWRMaWJzL2J1aWxkLnhtbAppbmRleCA1YWYyNTZlLi4xNDUxMDliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvamF2YXhTZXJ2bGV0Q29udGV4dE9yZGVyZWRMaWJzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvamF2YXhTZXJ2bGV0Q29udGV4dE9yZGVyZWRMaWJzL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPGRlbGV0ZSBkaXI9ImxpYiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTY4LDIzICs2OCwyMyBAQAogCiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogCi0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovVGVzdFNlcnZsZXQuY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovVGVzdFNlcnZsZXQuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtOTYsMTAgKzk2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2phdmF4U2VydmxldENvbnRleHRPcmRlcmVkTGlicy9kZXNjcmlwdG9yL3dlYi1mcmFnbWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvamF2YXhTZXJ2bGV0Q29udGV4dE9yZGVyZWRMaWJzL2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50LnhtbAppbmRleCAxNjgwZTBkLi4zNjM1MGNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvamF2YXhTZXJ2bGV0Q29udGV4dE9yZGVyZWRMaWJzL2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvamF2YXhTZXJ2bGV0Q29udGV4dE9yZGVyZWRMaWJzL2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50LnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1mcmFnbWVudCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1mcmFnbWVudF8zXzAueHNkIgotICAgIHZlcnNpb249IjMuMCI+IAorICAgIHZlcnNpb249IjMuMCI+CiAgIDxuYW1lPndlYkZyYWdtZW50MTwvbmFtZT4KICAgPGxpc3RlbmVyPgogICAgIDxsaXN0ZW5lci1jbGFzcz53ZWJGcmFnbWVudDEuV2ViRnJhZ21lbnRTZXJ2bGV0Q29udGV4dExpc3RlbmVyPC9saXN0ZW5lci1jbGFzcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9qYXZheFNlcnZsZXRDb250ZXh0T3JkZXJlZExpYnMvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9qYXZheFNlcnZsZXRDb250ZXh0T3JkZXJlZExpYnMvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQyLnhtbAppbmRleCBhMTQ1OGFiLi44NDA2OTA3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvamF2YXhTZXJ2bGV0Q29udGV4dE9yZGVyZWRMaWJzL2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50Mi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2phdmF4U2VydmxldENvbnRleHRPcmRlcmVkTGlicy9kZXNjcmlwdG9yL3dlYi1mcmFnbWVudDIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWZyYWdtZW50IHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWZyYWdtZW50XzNfMC54c2QiCi0gICAgdmVyc2lvbj0iMy4wIj4gCisgICAgdmVyc2lvbj0iMy4wIj4KICAgPG5hbWU+d2ViRnJhZ21lbnQyPC9uYW1lPgogICA8bGlzdGVuZXI+CiAgICAgPGxpc3RlbmVyLWNsYXNzPndlYkZyYWdtZW50Mi5XZWJGcmFnbWVudFNlcnZsZXRDb250ZXh0TGlzdGVuZXI8L2xpc3RlbmVyLWNsYXNzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2xvZ2luQ2hhbmdlU2Vzc2lvbklkL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9sb2dpbkNoYW5nZVNlc3Npb25JZC9XZWJUZXN0LmphdmEKaW5kZXggNzg0NDUwZS4uYWQ3MWI1MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2xvZ2luQ2hhbmdlU2Vzc2lvbklkL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbG9naW5DaGFuZ2VTZXNzaW9uSWQvV2ViVGVzdC5qYXZhCkBAIC0yNCwxMSArMjQsMTEgQEAKICAqIFRlc3QgbG9naW4gY2hhbmdlIHNlc3Npb24gaWQgaW4gU2VydmxldCAzLjAKICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9ICJzZXJ2bGV0LTMuMC1sb2dpbi1jaGFuZ2Utc2Vzc2lvbi1pZCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEpTRVNTSU9OSUQgPSAiSlNFU1NJT05JRCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0gIm9uZSI7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBTdHJpbmcgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogCiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBMaXN0PFN0cmluZz4gcmVzdWx0ID0gZ29HZXQoaG9zdCwgcG9ydCwgY29udGV4dFJvb3QgKyAiL3Rlc3Q/cnVuPWZpcnN0IiwKICAgICAgICAgICAgICAgICAgICBudWxsKTsKQEAgLTQ5LDEyICs0OSwxMiBAQAogICAgICAgICAgICAgaWYgKHJlc3VsdC5zaXplKCkgPiAwKSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0MiA9IGdvR2V0KGhvc3QsIHBvcnQsIGNvbnRleHRSb290ICsgIi90ZXN0P3J1bj1zZWNvbmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdldCgwKSk7Ci0gICAgICAgICAgICB9IAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsCiAgICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2l6ZSgpID4gMSAmJiByZXN1bHQyLnNpemUoKSA+IDEKICAgICAgICAgICAgICAgICAgICAgJiYgIXJlc3VsdC5nZXQoMCkuZXF1YWxzKHJlc3VsdDIuZ2V0KDApKQotICAgICAgICAgICAgICAgICAgICAmJiBFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMocmVzdWx0Mi5nZXQoMSkpKSA/IAorICAgICAgICAgICAgICAgICAgICAmJiBFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMocmVzdWx0Mi5nZXQoMSkpKSA/CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odC5nZXRNZXNzYWdlKCkpOwpAQCAtOTksNyArOTksNyBAQAogICAgICAgICAgICAgICAgIGxpbmVOdW0rKzsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewpAQCAtMTM4LDUgKzEzOCw1IEBACiAKICAgICAgICAgcmV0dXJuIHJldDsKICAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbG9naW5DaGFuZ2VTZXNzaW9uSWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9sb2dpbkNoYW5nZVNlc3Npb25JZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDE1ODA2MTguLmU2ZmVhMzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9sb2dpbkNoYW5nZVNlc3Npb25JZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9sb2dpbkNoYW5nZVNlc3Npb25JZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLWxvZ2luLWNoYW5nZS1zZXNzaW9uLWlkIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbG9naW5DaGFuZ2VTZXNzaW9uSWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2xvZ2luQ2hhbmdlU2Vzc2lvbklkL2J1aWxkLnhtbAppbmRleCA5YjQ1NWEwLi5mMTA4NmE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbG9naW5DaGFuZ2VTZXNzaW9uSWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9sb2dpbkNoYW5nZVNlc3Npb25JZC9idWlsZC54bWwKQEAgLTYyLDcgKzYyLDcgQEAKIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgpAQCAtODMsNyArODMsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0ic2V0dXAiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbG9naW5Mb2dvdXQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2xvZ2luTG9nb3V0L1dlYlRlc3QuamF2YQppbmRleCA3NTk2Mzk1Li45MWU3YWZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbG9naW5Mb2dvdXQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9sb2dpbkxvZ291dC9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1sxXSk7CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBsb2dpbiBhbmQgbG9nb3V0Iik7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICAgICAgICAgICAgICBvayA9IG9rICYmIGV4cGVjdGVkLmVxdWFscyhsaW5lKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRlc3QgVU5QUkVESUNURUQtRkFJTFVSRSIpOwogICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgICB0cnkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2xvZ2luTG9nb3V0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbG9naW5Mb2dvdXQvYnVpbGQucHJvcGVydGllcwppbmRleCBhYmYxMjc5Li45NWI4MGM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbG9naW5Mb2dvdXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbG9naW5Mb2dvdXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1sb2dpbi1sb2dvdXQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9sb2dpbkxvZ291dC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbG9naW5Mb2dvdXQvYnVpbGQueG1sCmluZGV4IDg0NDE4NTIuLmUwMzYyYTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9sb2dpbkxvZ291dC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2xvZ2luTG9nb3V0L2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICAgIDxkZWxldGUgZmlsZT0iV2ViVGVzdC5jbGFzcyIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTUxLDEwICs1MSwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNjIsMTQgKzYyLDE0IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvYXBwc2Vydi1ydC5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTg0LDcgKzg0LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9InNldHVwIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtdXNlci1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2xvZ2luTG9nb3V0L2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9sb2dpbkxvZ291dC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggYjIzMTY3MS4uYzE2OTYxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2xvZ2luTG9nb3V0L2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbG9naW5Mb2dvdXQvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDx3ZWItYXBwIHZlcnNpb249IjMuMCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCI+CiAgIDxzZWN1cml0eS1yb2xlPgotICAgIDxyb2xlLW5hbWU+amF2YWVlPC9yb2xlLW5hbWU+IAorICAgIDxyb2xlLW5hbWU+amF2YWVlPC9yb2xlLW5hbWU+CiAgIDwvc2VjdXJpdHktcm9sZT4KICAgPGxvZ2luLWNvbmZpZz4KICAgICA8YXV0aC1tZXRob2Q+QkFTSUM8L2F1dGgtbWV0aG9kPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2xvZ2luTG9nb3V0L3NlcnZsZXQvVGVzdFNlcnZsZXQyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbG9naW5Mb2dvdXQvc2VydmxldC9UZXN0U2VydmxldDIuamF2YQppbmRleCBhNGEwOTIzLi4wZGFmMGNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbG9naW5Mb2dvdXQvc2VydmxldC9UZXN0U2VydmxldDIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbG9naW5Mb2dvdXQvc2VydmxldC9UZXN0U2VydmxldDIuamF2YQpAQCAtNDIsNiArNDIsNiBAQAogICAgICAgICAgICAgYi5hcHBlbmQocmVxLmlzVXNlckluUm9sZSgiamF2YWVlIikgKyAiXG4iKTsKICAgICAgICAgICAgIFByaW50V3JpdGVyIHdyaXRlciA9IHJlcy5nZXRXcml0ZXIoKTsKICAgICAgICAgICAgIHdyaXRlci53cml0ZShiLnRvU3RyaW5nKCkpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50cy9XZWJUZXN0LmphdmEKaW5kZXggNGU1NWZhZC4uMjc2ZDk2OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlXZWJGcmFnbWVudHMvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIG11bHRpIHdlYiBmcmFnbWVudHMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdDsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikKICAgICAgICAgICAgIChuZXcgVVJMKHVybCkpLm9wZW5Db25uZWN0aW9uKCk7CkBAIC05MywxMCArOTMsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50cy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDkwN2U2My4uOTllMWY5OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtbXVsdGktd2ViLWZyYWdtZW50cyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50cy9idWlsZC54bWwKaW5kZXggNzA2N2ExNS4uNTdkM2NiNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlXZWJGcmFnbWVudHMvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8ZGVsZXRlIGRpcj0ibGliIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNjMsMjMgKzYzLDIzIEBACiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2Z0ZXN0MiIvPgogCi0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovVGVzdFNlcnZsZXQuY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovVGVzdFNlcnZsZXQuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtOTEsMTAgKzkxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIuamF2YQppbmRleCBkMDJlYmRkLi4xOWQxNzg3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogcHVibGljIGNsYXNzIFdGVGVzdEZpbHRlciBpbXBsZW1lbnRzIEZpbHRlciB7CiAgICAgcHVibGljIHZvaWQgaW5pdChGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IFdGVGVzdEZpbHRlci5pbml0Iik7Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywKICAgICAgICAgICAgIEZpbHRlckNoYWluIGNoYWluKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyMi5qYXZhCmluZGV4IDJkYmI5ODkuLmFjOWFlZTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIyLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIHB1YmxpYyBjbGFzcyBXRlRlc3RGaWx0ZXIyIGltcGxlbWVudHMgRmlsdGVyIHsKICAgICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gV0ZUZXN0RmlsdGVyMi5pbml0Iik7Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywKICAgICAgICAgICAgIEZpbHRlckNoYWluIGNoYWluKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyMy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyMy5qYXZhCmluZGV4IDVkYTZjZjkuLjZkNzY1ZWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIzLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIHB1YmxpYyBjbGFzcyBXRlRlc3RGaWx0ZXIzIGltcGxlbWVudHMgRmlsdGVyIHsKICAgICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gV0ZUZXN0RmlsdGVyMy5pbml0Iik7Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywKICAgICAgICAgICAgIEZpbHRlckNoYWluIGNoYWluKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzUmVzb3VyY2VzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50c1Jlc291cmNlcy9XZWJUZXN0LmphdmEKaW5kZXggODM2ZWZhNS4uMzgwYmY1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzUmVzb3VyY2VzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlXZWJGcmFnbWVudHNSZXNvdXJjZXMvV2ViVGVzdC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIG11bHRpIHdlYiBmcmFnbWVudHMgcmVzb3VyY2VzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTUsNyArNTUsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNjUsNyArNjUsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QgKyAiL2luZGV4LmpzcCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih1cmwpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKQpAQCAtMTIwLDcgKzEyMCw3IEBACiAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwKICAgICAgICAgICAgICAgICAgICAgKChzdGF0dXMxICYmIHN0YXR1czIgJiYgc3RhdHVzMykgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgU2V0PFN0cmluZz4gcGFyc2VSZXN1bHQoU3RyaW5nIGxpbmUsIFN0cmluZyBwcmVmaXgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50c1Jlc291cmNlcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzUmVzb3VyY2VzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjdkNGYwZC4uYmE1ZDYwNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzUmVzb3VyY2VzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzUmVzb3VyY2VzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtbXVsdGktd2ViLWZyYWdtZW50cy1yZXNvdXJjZXMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50c1Jlc291cmNlcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlXZWJGcmFnbWVudHNSZXNvdXJjZXMvYnVpbGQueG1sCmluZGV4IGRlODMzNjAuLjExNDg1MGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50c1Jlc291cmNlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzUmVzb3VyY2VzL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPGRlbGV0ZSBkaXI9ImxpYiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgICAgIGluY2x1ZGVzPSIqKi8qLmh0bWwiLz4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAKLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPC9hbnRjYWxsPgpAQCAtNzAsMTQgKzcwLDE0IEBACiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODksMTAgKzg5LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpcGFydC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlwYXJ0L1dlYlRlc3QuamF2YQppbmRleCBiNGRhYjU1Li45ZWUzNjNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlwYXJ0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlwYXJ0L1dlYlRlc3QuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTE0MywyOCArMTQzLDI4IEBACiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmIChiaXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBiaXMuY2xvc2UoKTsgCisgICAgICAgICAgICAgICAgICAgIGJpcy5jbG9zZSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2goSU9FeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICAvLyBpZ25vcmUKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgaXMuY2xvc2UoKTsgCisgICAgICAgICAgICAgICAgICAgIGlzLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaChJT0V4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIC8vIGlnbm9yZQogICAgICAgICAgICAgfQogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZiAob3MgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZSgpOyAKKyAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoKElPRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICAgICAgLy8gaWdub3JlCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmIChzb2NrICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpOyAKKyAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2goSU9FeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICAvLyBpZ25vcmUKQEAgLTE3NSw3ICsxNzUsNyBAQAogICAgc3RhdGljIFN0cmluZ1tdW10gZXhwZWN0ZWQgPSB7CiAgICAgICAgeyIxMjM0NTY3YWJjZGVmZyJ9LAogICAgICAgIHsibXlGaWxlIiwgIjM2IiwgInRleHQvcGxhaW4iLCAiY29udGVudC1kaXNwb3NpdGlvbiBjb250ZW50LXR5cGUiIH0sCi0gICAgICAgeyJteUZpbGUyIiwgIjEzODEyIiwgImFwcGxpY2F0aW9uL3gtamF2YS1hcmNoaXZlIiwgCisgICAgICAgeyJteUZpbGUyIiwgIjEzODEyIiwgImFwcGxpY2F0aW9uL3gtamF2YS1hcmNoaXZlIiwKICAgICAgICAgICAgICJjb250ZW50LWRpc3Bvc2l0aW9uIGNvbnRlbnQtdHlwZSIgfSwKICAgICAgICB7Inh5eiIsICIxNCIsICJ0ZXh0L3BsYWluIiwgImNvbnRlbnQtZGlzcG9zaXRpb24gY29udGVudC10eXBlIn0KICAgIH07CkBAIC0xODUsNSArMTg1LDUgQEAKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlwYXJ0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlwYXJ0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMTJmZjNjMC4uMTBlOWQxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpcGFydC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aXBhcnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTEgKzE1LDExIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLW11bHRpcGFydCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtbXVsdGlwYXJ0Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aXBhcnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpcGFydC9idWlsZC54bWwKaW5kZXggZmNkNzc4MS4uYTQ0YzkxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpcGFydC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpcGFydC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE2ICs0MiwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01OSw3ICs1OSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgICA8amF2YWMKICAgICAgICAgICAgIGRlYnVnPSJ0cnVlIgpAQCAtNzcsMTAgKzc3LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpcGFydC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlwYXJ0L2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAwYTNhMzlmLi5hM2M1NzhiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlwYXJ0L2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlwYXJ0L2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjgsNyArMjgsNyBAQAogICAgICAgICAgICAgPG1heC1maWxlLXNpemU+MjAwMDA8L21heC1maWxlLXNpemU+CiAgICAgICAgIDwvbXVsdGlwYXJ0LWNvbmZpZz4KIC0tPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpcGFydC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlwYXJ0L3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCA0NTYyYmI3Li5hNGM4YjVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlwYXJ0L3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlwYXJ0L3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAgICAgfQpAQCAtMzUsNyArMzUsNyBAQAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL25vbkR1cGxpY2F0ZVNlc3Npb25Db29raWVXaXRoQ3VzdG9tQ29va2llTmFtZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbm9uRHVwbGljYXRlU2Vzc2lvbkNvb2tpZVdpdGhDdXN0b21Db29raWVOYW1lL1dlYlRlc3QuamF2YQppbmRleCBiNjFmYzA0Li5iNTk5YjMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbm9uRHVwbGljYXRlU2Vzc2lvbkNvb2tpZVdpdGhDdXN0b21Db29raWVOYW1lL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbm9uRHVwbGljYXRlU2Vzc2lvbkNvb2tpZVdpdGhDdXN0b21Db29raWVOYW1lL1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIENSOiA3MDE0NjU0OiBQb3NzaWJsZSBEdXBsaWNhdGUgc2Vzc2lvbiBjb29raWUgd2hlbiB0aGUgc2Vzc2lvbiBjb29raWUgbmFtZSBpcyBjb25maWd1cmVkLiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL25vbkR1cGxpY2F0ZVNlc3Npb25Db29raWVXaXRoQ3VzdG9tQ29va2llTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL25vbkR1cGxpY2F0ZVNlc3Npb25Db29raWVXaXRoQ3VzdG9tQ29va2llTmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDRmYmY4ZDYuLjFlYjkzY2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9ub25EdXBsaWNhdGVTZXNzaW9uQ29va2llV2l0aEN1c3RvbUNvb2tpZU5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbm9uRHVwbGljYXRlU2Vzc2lvbkNvb2tpZVdpdGhDdXN0b21Db29raWVOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtbm9uLWR1cGxpY2F0ZS1zZXNzaW9uLWNvb2tpZS13aXRoLWN1c3RvbS1jb29raWUtbmFtZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL25vbkR1cGxpY2F0ZVNlc3Npb25Db29raWVXaXRoQ3VzdG9tQ29va2llTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbm9uRHVwbGljYXRlU2Vzc2lvbkNvb2tpZVdpdGhDdXN0b21Db29raWVOYW1lL2J1aWxkLnhtbAppbmRleCBkYmM1ODVkLi43NGQ0YjE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbm9uRHVwbGljYXRlU2Vzc2lvbkNvb2tpZVdpdGhDdXN0b21Db29raWVOYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbm9uRHVwbGljYXRlU2Vzc2lvbkNvb2tpZVdpdGhDdXN0b21Db29raWVOYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTUgKzQ0LDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CkBAIC03Miw3ICs3Miw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9XZWJUZXN0LmphdmEKaW5kZXggNzRlZDViNC4uZDI5ZjE2YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciByZWxhdGl2ZS1vcmRlcmluZy13ZWItZnJhZ21lbnRzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDYsNyArNDYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QgKyAiLyI7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pCiAgICAgICAgICAgICAobmV3IFVSTCh1cmwpKS5vcGVuQ29ubmVjdGlvbigpOwpAQCAtOTMsMTAgKzkzLDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvYnVpbGQucHJvcGVydGllcwppbmRleCAzNDEwNGM1Li42ZDE0N2VjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtcmVsYXRpdmUtb3JkZXJpbmctd2ViLWZyYWdtZW50cyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvYnVpbGQueG1sCmluZGV4IGFlYmUwMjEuLjNhMmQ1YzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxkZWxldGUgZGlyPSJsaWIiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC04NSwyMyArODUsMjMgQEAKIAogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KIAotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqL1Rlc3RTZXJ2bGV0LmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqL1Rlc3RTZXJ2bGV0LmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTExMywxMCArMTEzLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQueG1sCmluZGV4IGY2ZDM1ZTAuLmU5NzJmMTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9kZXNjcmlwdG9yL3dlYi1mcmFnbWVudC54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItZnJhZ21lbnQgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItZnJhZ21lbnRfM18wLnhzZCIKLSAgICB2ZXJzaW9uPSIzLjAiPiAKKyAgICB2ZXJzaW9uPSIzLjAiPgogICA8bmFtZT5BPC9uYW1lPgogICA8b3JkZXJpbmc+CiAgICAgPGJlZm9yZT48bmFtZT5Ob1N1Y2hOYW1lPC9uYW1lPjxvdGhlcnMvPjwvYmVmb3JlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50Mi54bWwKaW5kZXggYWJiMzBkZC4uNGZkYTFmZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9kZXNjcmlwdG9yL3dlYi1mcmFnbWVudDIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWZyYWdtZW50IHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWZyYWdtZW50XzNfMC54c2QiCi0gICAgdmVyc2lvbj0iMy4wIj4gCisgICAgdmVyc2lvbj0iMy4wIj4KICAgPG5hbWU+QjwvbmFtZT4KICAgPG9yZGVyaW5nPgogICAgIDxhZnRlcj48b3RoZXJzLz48L2FmdGVyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50My54bWwKaW5kZXggMjE1OGVkMC4uZTBkMmNmNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9kZXNjcmlwdG9yL3dlYi1mcmFnbWVudDMueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWZyYWdtZW50IHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWZyYWdtZW50XzNfMC54c2QiCi0gICAgdmVyc2lvbj0iMy4wIj4gCisgICAgdmVyc2lvbj0iMy4wIj4KICAgPG5hbWU+QzwvbmFtZT4KICAgPG9yZGVyaW5nPgogICAgICAgPGJlZm9yZT48bmFtZT5BPC9uYW1lPjxuYW1lPkI8L25hbWU+PC9iZWZvcmU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9kZXNjcmlwdG9yL3dlYi1mcmFnbWVudDQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQ0LnhtbAppbmRleCBiNTBhMGQ2Li5lOTVhOTQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9kZXNjcmlwdG9yL3dlYi1mcmFnbWVudDQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50NC54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItZnJhZ21lbnQgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItZnJhZ21lbnRfM18wLnhzZCIKLSAgICB2ZXJzaW9uPSIzLjAiPiAKKyAgICB2ZXJzaW9uPSIzLjAiPgogICA8bmFtZT5EPC9uYW1lPgogICA8b3JkZXJpbmc+CiAgICAgICA8YWZ0ZXI+PG5hbWU+QzwvbmFtZT48L2FmdGVyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyLmphdmEKaW5kZXggM2FiMjRiOS4uYTVhMWU5MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlci5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiBwdWJsaWMgY2xhc3MgV0ZUZXN0RmlsdGVyIGltcGxlbWVudHMgRmlsdGVyIHsKICAgICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gV0ZUZXN0RmlsdGVyLmluaXQiKTsKLSAgICB9ICAgCisgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxLCBTZXJ2bGV0UmVzcG9uc2UgcmVzLAogICAgICAgICAgICAgRmlsdGVyQ2hhaW4gY2hhaW4pIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyMi5qYXZhCmluZGV4IDc3MWQ4ZDEuLjM3NmEyZDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyMi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiBwdWJsaWMgY2xhc3MgV0ZUZXN0RmlsdGVyMiBpbXBsZW1lbnRzIEZpbHRlciB7CiAgICAgcHVibGljIHZvaWQgaW5pdChGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IFdGVGVzdEZpbHRlcjIuaW5pdCIpOwotICAgIH0gICAKKyAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXEsIFNlcnZsZXRSZXNwb25zZSByZXMsCiAgICAgICAgICAgICBGaWx0ZXJDaGFpbiBjaGFpbikgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyMy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIzLmphdmEKaW5kZXggZTJlZTgzOS4uZTA2NWEyMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIzLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIHB1YmxpYyBjbGFzcyBXRlRlc3RGaWx0ZXIzIGltcGxlbWVudHMgRmlsdGVyIHsKICAgICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gV0ZUZXN0RmlsdGVyMy5pbml0Iik7Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywKICAgICAgICAgICAgIEZpbHRlckNoYWluIGNoYWluKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXI0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjQuamF2YQppbmRleCA0YWUyOTI4Li40Y2M2YmZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjQuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogcHVibGljIGNsYXNzIFdGVGVzdEZpbHRlcjQgaW1wbGVtZW50cyBGaWx0ZXIgewogICAgIHB1YmxpYyB2b2lkIGluaXQoRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBXRlRlc3RGaWx0ZXI0LmluaXQiKTsKLSAgICB9ICAgCisgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxLCBTZXJ2bGV0UmVzcG9uc2UgcmVzLAogICAgICAgICAgICAgRmlsdGVyQ2hhaW4gY2hhaW4pIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyNS5qYXZhCmluZGV4IDQ1MzU4MjkuLjNkMzAyMGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyNS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyNS5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiBwdWJsaWMgY2xhc3MgV0ZUZXN0RmlsdGVyNSBpbXBsZW1lbnRzIEZpbHRlciB7CiAgICAgcHVibGljIHZvaWQgaW5pdChGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IFdGVGVzdEZpbHRlcjUuaW5pdCIpOwotICAgIH0gICAKKyAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXEsIFNlcnZsZXRSZXNwb25zZSByZXMsCiAgICAgICAgICAgICBGaWx0ZXJDaGFpbiBjaGFpbikgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZXNvdXJjZVVSTEZyb21Mb2NhbEphci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVzb3VyY2VVUkxGcm9tTG9jYWxKYXIvV2ViVGVzdC5qYXZhCmluZGV4IDMyOGYzNTUuLjhhMjUyMmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZXNvdXJjZVVSTEZyb21Mb2NhbEphci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Jlc291cmNlVVJMRnJvbUxvY2FsSmFyL1dlYlRlc3QuamF2YQpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciByZXNvdXJjZSBVUkwgZnJvbSBKQVIgaW5zaWRlIFdFQi1JTkYvbGliIik7CiAgICAgICAgIG5ldyBXZWJUZXN0KGFyZ3MpLmRvVGVzdCgpOwpAQCAtNjAsNyArNjAsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VUZXN0U2VydmxldCgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZXNvdXJjZVVSTEZyb21Mb2NhbEphci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Jlc291cmNlVVJMRnJvbUxvY2FsSmFyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTY2MDdkYi4uOGUxYTkyMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Jlc291cmNlVVJMRnJvbUxvY2FsSmFyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Jlc291cmNlVVJMRnJvbUxvY2FsSmFyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtcmVzb3VyY2UtdXJsLWZyb20tbG9jYWwtamFyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVzb3VyY2VVUkxGcm9tTG9jYWxKYXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Jlc291cmNlVVJMRnJvbUxvY2FsSmFyL2J1aWxkLnhtbAppbmRleCA0MTFkZjhjLi5kOGI2OTk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVzb3VyY2VVUkxGcm9tTG9jYWxKYXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZXNvdXJjZVVSTEZyb21Mb2NhbEphci9idWlsZC54bWwKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxkZWxldGUgZGlyPSJsaWIiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01NCwyMSArNTQsMjEgQEAKICAgICAgICAgICAgIGluY2x1ZGVzPSJNRVRBLUlORi8qKiIvPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvcmVzb3VyY2VzIi8+CiAKLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04MCwxMCArODAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmVKc3BBbmRTdGF0aWNSZXNvdXJjZUZyb21Mb2NhbEphci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmVKc3BBbmRTdGF0aWNSZXNvdXJjZUZyb21Mb2NhbEphci9XZWJUZXN0LmphdmEKaW5kZXggOThiMzNjYS4uYWFmMmM0YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZlSnNwQW5kU3RhdGljUmVzb3VyY2VGcm9tTG9jYWxKYXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2ZUpzcEFuZFN0YXRpY1Jlc291cmNlRnJvbUxvY2FsSmFyL1dlYlRlc3QuamF2YQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBzZXJ2aW5nIEpTUCBhbmQgc3RhdGljICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXNvdXJjZXMgZnJvbSBKQVIgaW5zaWRlIFdFQi1JTkYvbGliIik7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZUpzcFNlcnZsZXQoKTsKICAgICAgICAgICAgIGludm9rZURlZmF1bHRTZXJ2bGV0KCIvYWJjLnR4dCIsIDIwMCwgRVhQRUNURURfUkVTUE9OU0UpOwogICAgICAgICAgICAgaW52b2tlRGVmYXVsdFNlcnZsZXQoIi9mb2xkZXIiLCBuZXcgaW50W10geyAzMDEsIDMwMiB9LCBjb250ZXh0Um9vdCArICIvZm9sZGVyLyIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZlSnNwQW5kU3RhdGljUmVzb3VyY2VGcm9tTG9jYWxKYXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2ZUpzcEFuZFN0YXRpY1Jlc291cmNlRnJvbUxvY2FsSmFyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzZjN2U1MS4uY2Q3NTRhMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZlSnNwQW5kU3RhdGljUmVzb3VyY2VGcm9tTG9jYWxKYXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmVKc3BBbmRTdGF0aWNSZXNvdXJjZUZyb21Mb2NhbEphci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlcnZlLWpzcC1hbmQtc3RhdGljLXJlc291cmNlLWZyb20tbG9jYWwtamFyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmVKc3BBbmRTdGF0aWNSZXNvdXJjZUZyb21Mb2NhbEphci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmVKc3BBbmRTdGF0aWNSZXNvdXJjZUZyb21Mb2NhbEphci9idWlsZC54bWwKaW5kZXggMmFkNTc0OS4uNDFmZWI1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZlSnNwQW5kU3RhdGljUmVzb3VyY2VGcm9tTG9jYWxKYXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2ZUpzcEFuZFN0YXRpY1Jlc291cmNlRnJvbUxvY2FsSmFyL2J1aWxkLnhtbApAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPGRlbGV0ZSBkaXI9ImxpYiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTU2LDIxICs1NiwyMSBAQAogICAgICAgICAgICAgaW5jbHVkZXM9Ik1FVEEtSU5GLyoqIi8+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9yZXNvdXJjZXMiLz4KIAotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTgyLDEwICs4MiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvanNmTWFuYWdlZEJlYW5Bbm5vdGF0aW9uL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvanNmTWFuYWdlZEJlYW5Bbm5vdGF0aW9uL1dlYlRlc3QuamF2YQppbmRleCA5MjkyYmM0Li40MDE3MTk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL2pzZk1hbmFnZWRCZWFuQW5ub3RhdGlvbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9qc2ZNYW5hZ2VkQmVhbkFubm90YXRpb24vV2ViVGVzdC5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiAvKgotICogVW5pdCB0ZXN0IGZvciAKKyAqIFVuaXQgdGVzdCBmb3IKICAqCiAgKiAgIGh0dHBzOi8vZ2xhc3NmaXNoLmRldi5qYXZhLm5ldC9pc3N1ZXMvc2hvd19idWcuY2dpP2lkPTEwOTkyCiAgKiAgICgiVW5hYmxlIHRvIGRlcGxveSBKU0YyIGJhY2tpbmcgYmVhbiBCIDcyLCB3b3JrcyBpbiBCNzEiKQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElUIDEwOTkyIik7CkBAIC01NCwxMCArNTQsMTAgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geyAgICAgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290ICsKICAgICAgICAgICAgICIvaW5kZXguanNwIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvanNmTWFuYWdlZEJlYW5Bbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL2pzZk1hbmFnZWRCZWFuQW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA1NGY5YTUuLjQ4YzlmYjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvanNmTWFuYWdlZEJlYW5Bbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9qc2ZNYW5hZ2VkQmVhbkFubm90YXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1qc2YtbWFuYWdlZC1iZWFuLWFubm90YXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvanNmTWFuYWdlZEJlYW5Bbm5vdGF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvanNmTWFuYWdlZEJlYW5Bbm5vdGF0aW9uL2J1aWxkLnhtbAppbmRleCAzNGI0Y2IzLi5iNmUxNmE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL2pzZk1hbmFnZWRCZWFuQW5ub3RhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9qc2ZNYW5hZ2VkQmVhbkFubm90YXRpb24vYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTU2LDE0ICs1NiwxNCBAQAogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoRUFSL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEVBUi9XZWJUZXN0LmphdmEKaW5kZXggZDk3MGQ0ZC4uZWQ0ZDZkNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoRUFSL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhFQVIvV2ViVGVzdC5qYXZhCkBAIC0zOSwxOCArMzksMTggQEAKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgICAgICB0ZXN0TnVtYmVyID0gYXJnc1szXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcGx1Z2dhYmlsaXR5IG9mIHNoYXJlZGxpYiBpbiBFQVIiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7Ci0JaWYoIjEiLmVxdWFscyhhcmdzWzNdKSkgeworICAgIGlmKCIxIi5lcXVhbHMoYXJnc1szXSkpIHsKICAgICAgICAgICAgIHdlYlRlc3QuZG9UZXN0KCIvbXl0ZXN0MSIpOwogICAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKLQl9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmcgcm9vdCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZShyb290KTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNjAsNyArNjAsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoU3RyaW5nIHJvb3QpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyByb290OwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludm9raW5nICIgKyB1cmwpOwpAQCAtOTksMTAgKzk5LDEwIEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSRVNQT05TRSA6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0VbKG5ldyBJbnRlZ2VyKHRlc3ROdW1iZXIpKS5pbnRWYWx1ZSgpXSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoRUFSL2FwcGxpYjEvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvYXBwbGliL1NlcnZDb250SW5pdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoRUFSL2FwcGxpYjEvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvYXBwbGliL1NlcnZDb250SW5pdC5qYXZhCmluZGV4IDUxNjVmNDEuLjM1OWE4MDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEVBUi9hcHBsaWIxL2NvbS9zdW4vZGV2dGVzdHMvd2ViL2FwcGxpYi9TZXJ2Q29udEluaXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhFQVIvYXBwbGliMS9jb20vc3VuL2RldnRlc3RzL3dlYi9hcHBsaWIvU2VydkNvbnRJbml0LmphdmEKQEAgLTIzLDEwICsyMywxMCBAQAogQEhhbmRsZXNUeXBlcyhXZWJTZXJ2bGV0LmNsYXNzKQogcHVibGljIGNsYXNzIFNlcnZDb250SW5pdCBpbXBsZW1lbnRzIFNlcnZsZXRDb250YWluZXJJbml0aWFsaXplciB7CiAgICAgcHVibGljIFNlcnZDb250SW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgQVBQIExJQiBDT05TVCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBBUFAgTElCIENPTlNUIik7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIG9uU3RhcnR1cChTZXQ8Q2xhc3M8Pz4+IGMsIFNlcnZsZXRDb250ZXh0IGN0eCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBBUFAgTElCIG9uU3RhcnR1cCIpOwotCWN0eC5zZXRBdHRyaWJ1dGUoIkFQUExJQi0xIiwgIkNBTExFRCBFQVJBUFBMSUItMSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBBUFAgTElCIG9uU3RhcnR1cCIpOworICAgIGN0eC5zZXRBdHRyaWJ1dGUoIkFQUExJQi0xIiwgIkNBTExFRCBFQVJBUFBMSUItMSIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEVBUi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoRUFSL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDIxYmY0NC4uZWQ2NDliMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoRUFSL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoRUFSL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtcGx1Z2dhYmlsaXR5LXNoYXJlZGxpYi1lYXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEVBUi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhFQVIvYnVpbGQueG1sCmluZGV4IDA0MjFlYzIuLjYwMjUxZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEVBUi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoRUFSL2J1aWxkLnhtbApAQCAtMzgsNDAgKzM4LDQwIEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbi1saWIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8ZGVsZXRlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL1Rlc3RTaGFyZWRMaWIxLmphciIvPgotCTxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvVGVzdFNoYXJlZExpYjIuamFyIi8+Ci0JPGRlbGV0ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9UZXN0U2hhcmVkTGliMy5qYXIiLz4KKyAgICA8ZGVsZXRlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL1Rlc3RTaGFyZWRMaWIxLmphciIvPgorICAgIDxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvVGVzdFNoYXJlZExpYjIuamFyIi8+CisgICAgPGRlbGV0ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9UZXN0U2hhcmVkTGliMy5qYXIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydERvbWFpbiIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJpbml0LXNoYXJlZGxpYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0b3BEb21haW4iLz4KLSAgCTxqYXZhYyBzcmNkaXI9Ii4vc2hhcmVkbGliMSIKLSAgICAJCWRlc3RkaXI9Ii4vc2hhcmVkbGliMSIKLSAgICAJCWNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9IgotICAgIAkJZGVidWc9Im9uIgotICAgIAkJZmFpbG9uZXJyb3I9InRydWUiLz4KLQk8amFyIGRlc3RmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9UZXN0U2hhcmVkTGliMS5qYXIiPgotCSAgICA8ZmlsZXNldCBkaXI9Ii4vc2hhcmVkbGliMSIvPgotCTwvamFyPgotICAJPGphdmFjIHNyY2Rpcj0iLi9zaGFyZWRsaWIyIgotICAgIAkJZGVzdGRpcj0iLi9zaGFyZWRsaWIyIgotICAgIAkJY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH0iCi0gICAgCQlkZWJ1Zz0ib24iCi0gICAgCQlmYWlsb25lcnJvcj0idHJ1ZSIvPgotCTxqYXIgZGVzdGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL1Rlc3RTaGFyZWRMaWIyLmphciI+Ci0JICAgIDxmaWxlc2V0IGRpcj0iLi9zaGFyZWRsaWIyIi8+Ci0JPC9qYXI+Ci0gIAk8amF2YWMgc3JjZGlyPSIuL3NoYXJlZGxpYjMiCi0gICAgCQlkZXN0ZGlyPSIuL3NoYXJlZGxpYjMiCi0gICAgCQljbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofSIKLSAgICAJCWRlYnVnPSJvbiIKLSAgICAJCWZhaWxvbmVycm9yPSJ0cnVlIi8+Ci0JPGphciBkZXN0ZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvVGVzdFNoYXJlZExpYjMuamFyIj4KLQkgICAgPGZpbGVzZXQgZGlyPSIuL3NoYXJlZGxpYjMiLz4KLQk8L2phcj4KKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4vc2hhcmVkbGliMSIKKyAgICAgICAgICAgIGRlc3RkaXI9Ii4vc2hhcmVkbGliMSIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9IgorICAgICAgICAgICAgZGVidWc9Im9uIgorICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiLz4KKyAgICA8amFyIGRlc3RmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9UZXN0U2hhcmVkTGliMS5qYXIiPgorICAgICAgICA8ZmlsZXNldCBkaXI9Ii4vc2hhcmVkbGliMSIvPgorICAgIDwvamFyPgorICAgICAgPGphdmFjIHNyY2Rpcj0iLi9zaGFyZWRsaWIyIgorICAgICAgICAgICAgZGVzdGRpcj0iLi9zaGFyZWRsaWIyIgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH0iCisgICAgICAgICAgICBkZWJ1Zz0ib24iCisgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIvPgorICAgIDxqYXIgZGVzdGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL1Rlc3RTaGFyZWRMaWIyLmphciI+CisgICAgICAgIDxmaWxlc2V0IGRpcj0iLi9zaGFyZWRsaWIyIi8+CisgICAgPC9qYXI+CisgICAgICA8amF2YWMgc3JjZGlyPSIuL3NoYXJlZGxpYjMiCisgICAgICAgICAgICBkZXN0ZGlyPSIuL3NoYXJlZGxpYjMiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofSIKKyAgICAgICAgICAgIGRlYnVnPSJvbiIKKyAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+CisgICAgPGphciBkZXN0ZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvVGVzdFNoYXJlZExpYjMuamFyIj4KKyAgICAgICAgPGZpbGVzZXQgZGlyPSIuL3NoYXJlZGxpYjMiLz4KKyAgICA8L2phcj4KICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjE1IiAvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0RG9tYWluIi8+CiAgICAgPC90YXJnZXQ+CkBAIC04MywyNyArODMsMjcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAJPGphdmFjIHNyY2Rpcj0iLi9hcHBsaWIxIgotICAgIAkJZGVzdGRpcj0iLi9hcHBsaWIxIgotICAgIAkJY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH0iCi0gICAgCQlkZWJ1Zz0ib24iCi0gICAgCQlmYWlsb25lcnJvcj0idHJ1ZSIvPgorICAgICAgPGphdmFjIHNyY2Rpcj0iLi9hcHBsaWIxIgorICAgICAgICAgICAgZGVzdGRpcj0iLi9hcHBsaWIxIgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH0iCisgICAgICAgICAgICBkZWJ1Zz0ib24iCisgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIvPgogICAgICAgICA8bWtkaXIgZGlyPSJsaWIiLz4KLQk8amFyIGRlc3RmaWxlPSJsaWIvQXBwU2hhcmVkTGliMS5qYXIiPgotCSAgICA8ZmlsZXNldCBkaXI9Ii4vYXBwbGliMSIvPgotCTwvamFyPgorICAgIDxqYXIgZGVzdGZpbGU9ImxpYi9BcHBTaGFyZWRMaWIxLmphciI+CisgICAgICAgIDxmaWxlc2V0IGRpcj0iLi9hcHBsaWIxIi8+CisgICAgPC9qYXI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPG1rZGlyIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9hcmNoaXZlL01FVEEtSU5GIi8+Ci0JPGNvcHkgZmlsZT0iLi9hcHBsaWNhdGlvbi54bWwiIHRvZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2FyY2hpdmUvTUVUQS1JTkYiLz4KLQk8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgotCSAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvYXJjaGl2ZSIvPgotCTwvamFyPgorICAgIDxta2RpciBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvYXJjaGl2ZS9NRVRBLUlORiIvPgorICAgIDxjb3B5IGZpbGU9Ii4vYXBwbGljYXRpb24ueG1sIiB0b2Rpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9hcmNoaXZlL01FVEEtSU5GIi8+CisgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KKyAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2FyY2hpdmUiLz4KKyAgICA8L2phcj4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CkBAIC0xMTcsMTIgKzExNywxMiBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoRUFSL3NlcnZsZXQvVGVzdDFTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhFQVIvc2VydmxldC9UZXN0MVNlcnZsZXQuamF2YQppbmRleCA4NmE0MjUwLi5jNjY0YmNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhFQVIvc2VydmxldC9UZXN0MVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhFQVIvc2VydmxldC9UZXN0MVNlcnZsZXQuamF2YQpAQCAtMzUsMTkgKzM1LDE5IEBACiAgICAgcHVibGljIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAKLQlTdHJpbmdCdWZmZXIgcmV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgIFN0cmluZ0J1ZmZlciByZXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgIFN0cmluZyBhdHRyID0gKFN0cmluZykgY29udGV4dC5nZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi0xIik7Ci0JcmV0LmFwcGVuZChhdHRyICsiOyIpOworICAgIHJldC5hcHBlbmQoYXR0ciArIjsiKTsKICAgICAgICAgYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJTSEFSRURMSUItMiIpOwotCXJldC5hcHBlbmQoYXR0ciArIjsiKTsKLQlhdHRyID0gKFN0cmluZykgY29udGV4dC5nZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi0zIik7Ci0JcmV0LmFwcGVuZChhdHRyICsiOyIpOworICAgIHJldC5hcHBlbmQoYXR0ciArIjsiKTsKKyAgICBhdHRyID0gKFN0cmluZykgY29udGV4dC5nZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi0zIik7CisgICAgcmV0LmFwcGVuZChhdHRyICsiOyIpOwogICAgICAgICBhdHRyID0gKFN0cmluZykgY29udGV4dC5nZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi00Iik7Ci0JcmV0LmFwcGVuZChhdHRyICsiOyIpOworICAgIHJldC5hcHBlbmQoYXR0ciArIjsiKTsKICAgICAgICAgYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJBUFBMSUItMSIpOwotCXJldC5hcHBlbmQoYXR0ciArIjsiKTsKLQlhdHRyID0gKFN0cmluZykgY29udGV4dC5nZXRBdHRyaWJ1dGUoIkFQUExJQi0yIik7Ci0JcmV0LmFwcGVuZChhdHRyKTsKKyAgICByZXQuYXBwZW5kKGF0dHIgKyI7Iik7CisgICAgYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJBUFBMSUItMiIpOworICAgIHJldC5hcHBlbmQoYXR0cik7CiAgICAgICAgIHJlcy5nZXRXcml0ZXIoKS53cml0ZShyZXQudG9TdHJpbmcoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoRUFSL3NoYXJlZGxpYjEvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvU2hhcmVkTGliMVNlcnZDb250SW5pdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoRUFSL3NoYXJlZGxpYjEvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvU2hhcmVkTGliMVNlcnZDb250SW5pdC5qYXZhCmluZGV4IGEzOTU5N2QuLmM1MWNmZTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEVBUi9zaGFyZWRsaWIxL2NvbS9zdW4vZGV2dGVzdHMvd2ViL1NoYXJlZExpYjFTZXJ2Q29udEluaXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhFQVIvc2hhcmVkbGliMS9jb20vc3VuL2RldnRlc3RzL3dlYi9TaGFyZWRMaWIxU2VydkNvbnRJbml0LmphdmEKQEAgLTIzLDkgKzIzLDkgQEAKIEBIYW5kbGVzVHlwZXMoV2ViU2VydmxldC5jbGFzcykKIHB1YmxpYyBjbGFzcyBTaGFyZWRMaWIxU2VydkNvbnRJbml0IGltcGxlbWVudHMgU2VydmxldENvbnRhaW5lckluaXRpYWxpemVyIHsKICAgICBwdWJsaWMgU2hhcmVkTGliMVNlcnZDb250SW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlNIQVJFRCBMSUIgMSBDT05TVCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU0hBUkVEIExJQiAxIENPTlNUIik7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIG9uU3RhcnR1cChTZXQ8Q2xhc3M8Pz4+IGMsIFNlcnZsZXRDb250ZXh0IGN0eCkgewotCWN0eC5zZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi0xIiwgIkNBTExFRCBFQVJTSEFSRURMSUItMSIpOworICAgIGN0eC5zZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi0xIiwgIkNBTExFRCBFQVJTSEFSRURMSUItMSIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEVBUi9zaGFyZWRsaWIyL2NvbS9zdW4vZGV2dGVzdHMvd2ViL1NoYXJlZExpYjJTZXJ2Q29udEluaXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEVBUi9zaGFyZWRsaWIyL2NvbS9zdW4vZGV2dGVzdHMvd2ViL1NoYXJlZExpYjJTZXJ2Q29udEluaXQuamF2YQppbmRleCAyNzVjOTBhLi42M2QyODMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhFQVIvc2hhcmVkbGliMi9jb20vc3VuL2RldnRlc3RzL3dlYi9TaGFyZWRMaWIyU2VydkNvbnRJbml0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoRUFSL3NoYXJlZGxpYjIvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvU2hhcmVkTGliMlNlcnZDb250SW5pdC5qYXZhCkBAIC0yMiw5ICsyMiw5IEBACiAKIHB1YmxpYyBjbGFzcyBTaGFyZWRMaWIyU2VydkNvbnRJbml0IGltcGxlbWVudHMgU2VydmxldENvbnRhaW5lckluaXRpYWxpemVyIHsKICAgICBwdWJsaWMgU2hhcmVkTGliMlNlcnZDb250SW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlNIQVJFRCBMSUIgMiBDT05TVCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU0hBUkVEIExJQiAyIENPTlNUIik7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIG9uU3RhcnR1cChTZXQ8Q2xhc3M8Pz4+IGMsIFNlcnZsZXRDb250ZXh0IGN0eCkgewotCWN0eC5zZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi0yIiwgIkNBTExFRCBFQVJTSEFSRURMSUItMiIpOworICAgIGN0eC5zZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi0yIiwgIkNBTExFRCBFQVJTSEFSRURMSUItMiIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEVBUi9zaGFyZWRsaWIzL2NvbS9zdW4vZGV2dGVzdHMvd2ViL1NoYXJlZExpYjNTZXJ2Q29udEluaXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEVBUi9zaGFyZWRsaWIzL2NvbS9zdW4vZGV2dGVzdHMvd2ViL1NoYXJlZExpYjNTZXJ2Q29udEluaXQuamF2YQppbmRleCAxZDg2M2QxLi40MTRhNjJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhFQVIvc2hhcmVkbGliMy9jb20vc3VuL2RldnRlc3RzL3dlYi9TaGFyZWRMaWIzU2VydkNvbnRJbml0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoRUFSL3NoYXJlZGxpYjMvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvU2hhcmVkTGliM1NlcnZDb250SW5pdC5qYXZhCkBAIC0yMyw5ICsyMyw5IEBACiBASGFuZGxlc1R5cGVzKFdlYkZpbHRlci5jbGFzcykKIHB1YmxpYyBjbGFzcyBTaGFyZWRMaWIzU2VydkNvbnRJbml0IGltcGxlbWVudHMgU2VydmxldENvbnRhaW5lckluaXRpYWxpemVyIHsKICAgICBwdWJsaWMgU2hhcmVkTGliM1NlcnZDb250SW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlNIQVJFRCBMSUIgMyBDT05TVCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU0hBUkVEIExJQiAzIENPTlNUIik7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIG9uU3RhcnR1cChTZXQ8Q2xhc3M8Pz4+IGMsIFNlcnZsZXRDb250ZXh0IGN0eCkgewotCWN0eC5zZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi0zIiwgIkNBTExFRCBFQVJTSEFSRURMSUItMyIpOworICAgIGN0eC5zZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi0zIiwgIkNBTExFRCBFQVJTSEFSRURMSUItMyIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL1dlYlRlc3QuamF2YQppbmRleCBjNGI5YTRlLi5hZDBjMDVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoSW50ZXJmYWNlSW1wbGVtZW50YXRpb24vV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHBsdWdnYWJpbGl0eSBvZiBzaGFyZWRsaWIgd2l0aCBpbnRlcnJhY2UgaW1wbGVtZW50YXRpb24gYW5kIGV4dGVuc2lvbnMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyByb290KSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKHJvb3QpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTU3LDcgKzU3LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKFN0cmluZyByb290KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgcm9vdDsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikKQEAgLTkzLDcgKzkzLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmICghRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoSW50ZXJmYWNlSW1wbGVtZW50YXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggY2MwYjQ3MC4uMWNiOWVkYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoSW50ZXJmYWNlSW1wbGVtZW50YXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXBsdWdnYWJpbGl0eS1zaGFyZWRsaWItaW50ZXJmYWNlaW1wbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoSW50ZXJmYWNlSW1wbGVtZW50YXRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoSW50ZXJmYWNlSW1wbGVtZW50YXRpb24vYnVpbGQueG1sCmluZGV4IDhiOTBjN2EuLjQzYWNkNDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9idWlsZC54bWwKQEAgLTM2LDMzICszNiwzMyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4tbGliIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPGRlbGV0ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9UZXN0U2hhcmVkTGliMS5qYXIiLz4KLQk8ZGVsZXRlIGRpcj0iLi9saWIiLz4KKyAgICA8ZGVsZXRlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL1Rlc3RTaGFyZWRMaWIxLmphciIvPgorICAgIDxkZWxldGUgZGlyPSIuL2xpYiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0RG9tYWluIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImluaXQtc2hhcmVkbGliIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RvcERvbWFpbiIvPgogICAgICAgICA8bWtkaXIgZGlyPSJsaWIiLz4KLSAgCTxqYXZhYyBzcmNkaXI9Ii4vaW50ZXJmYWNlIgotICAgIAkJZGVzdGRpcj0iLi9pbnRlcmZhY2UiCi0gICAgCQljbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofSIKLSAgICAJCWRlYnVnPSJvbiIKLSAgICAJCWZhaWxvbmVycm9yPSJ0cnVlIi8+Ci0JPGphciBkZXN0ZmlsZT0ibGliL0NvbW1vbkludGVyZmFjZS5qYXIiPgotCSAgICA8ZmlsZXNldCBkaXI9Ii4vaW50ZXJmYWNlIi8+Ci0JPC9qYXI+Ci0gIAk8amF2YWMgc3JjZGlyPSIuL3NoYXJlZGxpYjEiCi0gICAgCQlkZXN0ZGlyPSIuL3NoYXJlZGxpYjEiCi0gICAgCQljbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofTsuL2ludGVyZmFjZSIKLSAgICAJCWRlYnVnPSJvbiIKLSAgICAJCWZhaWxvbmVycm9yPSJ0cnVlIi8+Ci0JPGphciBkZXN0ZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvVGVzdFNoYXJlZExpYjEuamFyIj4KLQkgICAgPGZpbGVzZXQgZGlyPSIuL3NoYXJlZGxpYjEiLz4KLQkgICAgPGZpbGVzZXQgZGlyPSIuL2ludGVyZmFjZSIvPgotCTwvamFyPgorICAgICAgPGphdmFjIHNyY2Rpcj0iLi9pbnRlcmZhY2UiCisgICAgICAgICAgICBkZXN0ZGlyPSIuL2ludGVyZmFjZSIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9IgorICAgICAgICAgICAgZGVidWc9Im9uIgorICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiLz4KKyAgICA8amFyIGRlc3RmaWxlPSJsaWIvQ29tbW9uSW50ZXJmYWNlLmphciI+CisgICAgICAgIDxmaWxlc2V0IGRpcj0iLi9pbnRlcmZhY2UiLz4KKyAgICA8L2phcj4KKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4vc2hhcmVkbGliMSIKKyAgICAgICAgICAgIGRlc3RkaXI9Ii4vc2hhcmVkbGliMSIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9Oy4vaW50ZXJmYWNlIgorICAgICAgICAgICAgZGVidWc9Im9uIgorICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiLz4KKyAgICA8amFyIGRlc3RmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9UZXN0U2hhcmVkTGliMS5qYXIiPgorICAgICAgICA8ZmlsZXNldCBkaXI9Ii4vc2hhcmVkbGliMSIvPgorICAgICAgICA8ZmlsZXNldCBkaXI9Ii4vaW50ZXJmYWNlIi8+CisgICAgPC9qYXI+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxNSIgLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydERvbWFpbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNzksMTYgKzc5LDE2IEBACiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPG1rZGlyIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9hcmNoaXZlL01FVEEtSU5GIi8+Ci0JPGNvcHkgZmlsZT0iLi9hcHBsaWNhdGlvbi54bWwiIHRvZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2FyY2hpdmUvTUVUQS1JTkYiLz4KLQk8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgotCSAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvYXJjaGl2ZSIvPgotCTwvamFyPgorICAgIDxta2RpciBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvYXJjaGl2ZS9NRVRBLUlORiIvPgorICAgIDxjb3B5IGZpbGU9Ii4vYXBwbGljYXRpb24ueG1sIiB0b2Rpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9hcmNoaXZlL01FVEEtSU5GIi8+CisgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KKyAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2FyY2hpdmUiLz4KKyAgICA8L2phcj4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CkBAIC0xMDEsMTIgKzEwMSwxMiBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoSW50ZXJmYWNlSW1wbGVtZW50YXRpb24vaW50ZXJmYWNlL2NvbS9zdW4vZGV2dGVzdHMvd2ViL2NvbW1vbi9Db21tb25JbnRlcmZhY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL2ludGVyZmFjZS9jb20vc3VuL2RldnRlc3RzL3dlYi9jb21tb24vQ29tbW9uSW50ZXJmYWNlLmphdmEKaW5kZXggM2YyNTI0Ny4uYThhOTYzOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoSW50ZXJmYWNlSW1wbGVtZW50YXRpb24vaW50ZXJmYWNlL2NvbS9zdW4vZGV2dGVzdHMvd2ViL2NvbW1vbi9Db21tb25JbnRlcmZhY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9pbnRlcmZhY2UvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvY29tbW9uL0NvbW1vbkludGVyZmFjZS5qYXZhCkBAIC0xNyw1ICsxNyw1IEBACiBwYWNrYWdlIGNvbS5zdW4uZGV2dGVzdHMud2ViLmNvbW1vbjsKIAogcHVibGljIGludGVyZmFjZSBDb21tb25JbnRlcmZhY2UgewotCXB1YmxpYyBTdHJpbmcgc2F5RHVtbXlJbnRmSGVsbG8oKTsKKyAgICBwdWJsaWMgU3RyaW5nIHNheUR1bW15SW50ZkhlbGxvKCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9pbnRlcmZhY2UvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvY29tbW9uL0NvbW1vbkludGVyZmFjZUltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL2ludGVyZmFjZS9jb20vc3VuL2RldnRlc3RzL3dlYi9jb21tb24vQ29tbW9uSW50ZXJmYWNlSW1wbC5qYXZhCmluZGV4IGNlZTJhNjguLjI3ZGE3OTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL2ludGVyZmFjZS9jb20vc3VuL2RldnRlc3RzL3dlYi9jb21tb24vQ29tbW9uSW50ZXJmYWNlSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL2ludGVyZmFjZS9jb20vc3VuL2RldnRlc3RzL3dlYi9jb21tb24vQ29tbW9uSW50ZXJmYWNlSW1wbC5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgY29tLnN1bi5kZXZ0ZXN0cy53ZWIuY29tbW9uLkNvbW1vbkludGVyZmFjZTsKIAogcHVibGljIGNsYXNzICBDb21tb25JbnRlcmZhY2VJbXBsIGltcGxlbWVudHMgQ29tbW9uSW50ZXJmYWNlIHsKLQlwdWJsaWMgU3RyaW5nIHNheUR1bW15SW50ZkhlbGxvKCkgeworICAgIHB1YmxpYyBTdHJpbmcgc2F5RHVtbXlJbnRmSGVsbG8oKSB7CiAgICAgICAgICAgICByZXR1cm4gIkhFRUxMTExPT09PIjsKICAgICAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoSW50ZXJmYWNlSW1wbGVtZW50YXRpb24vc2VydmxldC9Bbm90aGVyQ29tbW9uSW50ZXJmYWNlSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoSW50ZXJmYWNlSW1wbGVtZW50YXRpb24vc2VydmxldC9Bbm90aGVyQ29tbW9uSW50ZXJmYWNlSW1wbC5qYXZhCmluZGV4IGI1OTFjYzYuLmNmZGJiMWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL3NlcnZsZXQvQW5vdGhlckNvbW1vbkludGVyZmFjZUltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9zZXJ2bGV0L0Fub3RoZXJDb21tb25JbnRlcmZhY2VJbXBsLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBjb20uc3VuLmRldnRlc3RzLndlYi5jb21tb24uQ29tbW9uSW50ZXJmYWNlOwogCiBwdWJsaWMgY2xhc3MgIEFub3RoZXJDb21tb25JbnRlcmZhY2VJbXBsIGltcGxlbWVudHMgQ29tbW9uSW50ZXJmYWNlIHsKLQlwdWJsaWMgU3RyaW5nIHNheUR1bW15SW50ZkhlbGxvKCkgeworICAgIHB1YmxpYyBTdHJpbmcgc2F5RHVtbXlJbnRmSGVsbG8oKSB7CiAgICAgICAgICAgICByZXR1cm4gIkhFRUxMTExPT09PIjsKICAgICAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoSW50ZXJmYWNlSW1wbGVtZW50YXRpb24vc2VydmxldC9Db21tb25JbnRlcmZhY2VJbXBsRXh0bi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoSW50ZXJmYWNlSW1wbGVtZW50YXRpb24vc2VydmxldC9Db21tb25JbnRlcmZhY2VJbXBsRXh0bi5qYXZhCmluZGV4IDhlMzA1ZjguLjhjMTY2NmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL3NlcnZsZXQvQ29tbW9uSW50ZXJmYWNlSW1wbEV4dG4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9zZXJ2bGV0L0NvbW1vbkludGVyZmFjZUltcGxFeHRuLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBjb20uc3VuLmRldnRlc3RzLndlYi5jb21tb24uQ29tbW9uSW50ZXJmYWNlSW1wbDsKIAogcHVibGljIGNsYXNzICBDb21tb25JbnRlcmZhY2VJbXBsRXh0biBleHRlbmRzIENvbW1vbkludGVyZmFjZUltcGwgewotCXB1YmxpYyBTdHJpbmcgbXlPd25NZXRob2QoKSB7CisgICAgcHVibGljIFN0cmluZyBteU93bk1ldGhvZCgpIHsKICAgICAgICAgICAgIHJldHVybiAiSEVFTExMTE9PT08iOwogICAgICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9zZXJ2bGV0L1Rlc3QxU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoSW50ZXJmYWNlSW1wbGVtZW50YXRpb24vc2VydmxldC9UZXN0MVNlcnZsZXQuamF2YQppbmRleCA3NGVlYTdkLi5iNWYzMmY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9zZXJ2bGV0L1Rlc3QxU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL3NlcnZsZXQvVGVzdDFTZXJ2bGV0LmphdmEKQEAgLTM1LDE5ICszNSwxOSBAQAogICAgIHB1YmxpYyB2b2lkIHNlcnZpY2UoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewogCi0JU3RyaW5nQnVmZmVyIHJldCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICBTdHJpbmdCdWZmZXIgcmV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICAgICBTdHJpbmcgYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJTSEFSRURMSUItMSIpOwotCXJldC5hcHBlbmQoYXR0ciArIjsiKTsKKyAgICByZXQuYXBwZW5kKGF0dHIgKyI7Iik7CiAgICAgICAgIGF0dHIgPSAoU3RyaW5nKSBjb250ZXh0LmdldEF0dHJpYnV0ZSgiU0hBUkVETElCLTIiKTsKLQlyZXQuYXBwZW5kKGF0dHIgKyI7Iik7Ci0JYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJTSEFSRURMSUItMyIpOwotCXJldC5hcHBlbmQoYXR0ciArIjsiKTsKKyAgICByZXQuYXBwZW5kKGF0dHIgKyI7Iik7CisgICAgYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJTSEFSRURMSUItMyIpOworICAgIHJldC5hcHBlbmQoYXR0ciArIjsiKTsKICAgICAgICAgYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJTSEFSRURMSUItNCIpOwotCXJldC5hcHBlbmQoYXR0ciArIjsiKTsKKyAgICByZXQuYXBwZW5kKGF0dHIgKyI7Iik7CiAgICAgICAgIGF0dHIgPSAoU3RyaW5nKSBjb250ZXh0LmdldEF0dHJpYnV0ZSgiQVBQTElCLTEiKTsKLQlyZXQuYXBwZW5kKGF0dHIgKyI7Iik7Ci0JYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJBUFBMSUItMiIpOwotCXJldC5hcHBlbmQoYXR0ciArIjsiKTsKKyAgICByZXQuYXBwZW5kKGF0dHIgKyI7Iik7CisgICAgYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJBUFBMSUItMiIpOworICAgIHJldC5hcHBlbmQoYXR0ciArIjsiKTsKICAgICAgICAgcmVzLmdldFdyaXRlcigpLndyaXRlKHJldC50b1N0cmluZygpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9zaGFyZWRsaWIxL2NvbS9zdW4vZGV2dGVzdHMvd2ViL1NoYXJlZExpYjFTZXJ2Q29udEluaXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL3NoYXJlZGxpYjEvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvU2hhcmVkTGliMVNlcnZDb250SW5pdC5qYXZhCmluZGV4IDMwZDQ3ODcuLmQ3YjE5ZGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL3NoYXJlZGxpYjEvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvU2hhcmVkTGliMVNlcnZDb250SW5pdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL3NoYXJlZGxpYjEvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvU2hhcmVkTGliMVNlcnZDb250SW5pdC5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiBASGFuZGxlc1R5cGVzKENvbW1vbkludGVyZmFjZS5jbGFzcykKIHB1YmxpYyBjbGFzcyBTaGFyZWRMaWIxU2VydkNvbnRJbml0IGltcGxlbWVudHMgU2VydmxldENvbnRhaW5lckluaXRpYWxpemVyIHsKICAgICBwdWJsaWMgU2hhcmVkTGliMVNlcnZDb250SW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlNIQVJFRCBMSUIgMSBDT05TVCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU0hBUkVEIExJQiAxIENPTlNUIik7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIG9uU3RhcnR1cChTZXQ8Q2xhc3M8Pz4+IGMsIFNlcnZsZXRDb250ZXh0IGN0eCkgewotCWN0eC5zZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi0xIiwgYy5zaXplKCkrIkNBTExFRCBJTlRGSU1QTC1TSEFSRURMSUItMSIpOworICAgIGN0eC5zZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi0xIiwgYy5zaXplKCkrIkNBTExFRCBJTlRGSU1QTC1TSEFSRURMSUItMSIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy9XZWJUZXN0LmphdmEKaW5kZXggMDQwNzM3ZS4uNjFiY2UzOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy9XZWJUZXN0LmphdmEKQEAgLTM5LDIyICszOSwyMiBAQAogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIHRlc3ROdW1iZXIgPSBhcmdzWzNdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBwbHVnZ2FibGUgc2hhcmVkIGxpYnJhcmllcyBpbiBXQVIiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7Ci0JaWYoIjEiLmVxdWFscyhhcmdzWzNdKSkgeworICAgIGlmKCIxIi5lcXVhbHMoYXJnc1szXSkpIHsKICAgICAgICAgICAgIHdlYlRlc3QuZG9UZXN0KCIvbXl0ZXN0MSIpOwogICAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKLQl9Ci0JaWYoIjIiLmVxdWFscyhhcmdzWzNdKSkgeworICAgIH0KKyAgICBpZigiMiIuZXF1YWxzKGFyZ3NbM10pKSB7CiAgICAgICAgICAgICB3ZWJUZXN0LmRvVGVzdCgiL215dGVzdDIiKTsKICAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7Ci0JfQorICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nIHJvb3QpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2Uocm9vdCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTY0LDcgKzY0LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKFN0cmluZyByb290KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgcm9vdDsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnZva2luZyAiICsgdXJsKTsKQEAgLTEwMywxMCArMTAzLDEwIEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSRVNQT05TRSA6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0VbKG5ldyBJbnRlZ2VyKHRlc3ROdW1iZXIpKS5pbnRWYWx1ZSgpXSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL2J1aWxkLnhtbAppbmRleCAwM2RhZTM5Li43NWU0YzAxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL2J1aWxkLnhtbApAQCAtMzIsNjYgKzMyLDY2IEBACiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImluaXQtc2hhcmVkbGliLGJ1aWxkLHJ1bix1bmRlcGxveSxzdG9wRG9tYWluLGNsZWFuLWxpYiIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxhbnQgZGlyPSJ3ZWJhcHAxIiB0YXJnZXQ9ImNsZWFuIi8+Ci0JPGFudCBkaXI9IndlYmFwcDIiIHRhcmdldD0iY2xlYW4iLz4KKyAgICA8YW50IGRpcj0id2ViYXBwMSIgdGFyZ2V0PSJjbGVhbiIvPgorICAgIDxhbnQgZGlyPSJ3ZWJhcHAyIiB0YXJnZXQ9ImNsZWFuIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICAgIDxkZWxldGU+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbi1saWIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8ZGVsZXRlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL1Rlc3RTaGFyZWRMaWIxLmphciIvPgotCTxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvVGVzdFNoYXJlZExpYjIuamFyIi8+Ci0JPGRlbGV0ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9UZXN0U2hhcmVkTGliMy5qYXIiLz4KLQk8ZGVsZXRlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL1Rlc3RTaGFyZWRMaWI0LmphciIvPgorICAgIDxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvVGVzdFNoYXJlZExpYjEuamFyIi8+CisgICAgPGRlbGV0ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9UZXN0U2hhcmVkTGliMi5qYXIiLz4KKyAgICA8ZGVsZXRlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL1Rlc3RTaGFyZWRMaWIzLmphciIvPgorICAgIDxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvVGVzdFNoYXJlZExpYjQuamFyIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnREb21haW4iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iaW5pdC1zaGFyZWRsaWIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wRG9tYWluIi8+Ci0gIAk8amF2YWMgc3JjZGlyPSIuL3NoYXJlZGxpYjEiCi0gICAgCQlkZXN0ZGlyPSIuL3NoYXJlZGxpYjEiCi0gICAgCQljbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofSIKLSAgICAJCWRlYnVnPSJvbiIKLSAgICAJCWZhaWxvbmVycm9yPSJ0cnVlIi8+Ci0JPGphciBkZXN0ZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvVGVzdFNoYXJlZExpYjEuamFyIj4KLQkgICAgPGZpbGVzZXQgZGlyPSIuL3NoYXJlZGxpYjEiLz4KLQk8L2phcj4KLSAgCTxqYXZhYyBzcmNkaXI9Ii4vc2hhcmVkbGliMiIKLSAgICAJCWRlc3RkaXI9Ii4vc2hhcmVkbGliMiIKLSAgICAJCWNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9IgotICAgIAkJZGVidWc9Im9uIgotICAgIAkJZmFpbG9uZXJyb3I9InRydWUiLz4KLQk8amFyIGRlc3RmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9UZXN0U2hhcmVkTGliMi5qYXIiPgotCSAgICA8ZmlsZXNldCBkaXI9Ii4vc2hhcmVkbGliMiIvPgotCTwvamFyPgotICAJPGphdmFjIHNyY2Rpcj0iLi9zaGFyZWRsaWIzIgotICAgIAkJZGVzdGRpcj0iLi9zaGFyZWRsaWIzIgotICAgIAkJY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH0iCi0gICAgCQlkZWJ1Zz0ib24iCi0gICAgCQlmYWlsb25lcnJvcj0idHJ1ZSIvPgotCTxqYXIgZGVzdGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL1Rlc3RTaGFyZWRMaWIzLmphciI+Ci0JICAgIDxmaWxlc2V0IGRpcj0iLi9zaGFyZWRsaWIzIi8+Ci0JPC9qYXI+Ci0gIAk8amF2YWMgc3JjZGlyPSIuL3NoYXJlZGxpYjQiCi0gICAgCQlkZXN0ZGlyPSIuL3NoYXJlZGxpYjQiCi0gICAgCQljbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofSIKLSAgICAJCWRlYnVnPSJvbiIKLSAgICAJCWZhaWxvbmVycm9yPSJ0cnVlIi8+Ci0JPGphciBkZXN0ZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvVGVzdFNoYXJlZExpYjQuamFyIj4KLQkgICAgPGZpbGVzZXQgZGlyPSIuL3NoYXJlZGxpYjQiLz4KLQk8L2phcj4KKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4vc2hhcmVkbGliMSIKKyAgICAgICAgICAgIGRlc3RkaXI9Ii4vc2hhcmVkbGliMSIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9IgorICAgICAgICAgICAgZGVidWc9Im9uIgorICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiLz4KKyAgICA8amFyIGRlc3RmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9UZXN0U2hhcmVkTGliMS5qYXIiPgorICAgICAgICA8ZmlsZXNldCBkaXI9Ii4vc2hhcmVkbGliMSIvPgorICAgIDwvamFyPgorICAgICAgPGphdmFjIHNyY2Rpcj0iLi9zaGFyZWRsaWIyIgorICAgICAgICAgICAgZGVzdGRpcj0iLi9zaGFyZWRsaWIyIgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH0iCisgICAgICAgICAgICBkZWJ1Zz0ib24iCisgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIvPgorICAgIDxqYXIgZGVzdGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL1Rlc3RTaGFyZWRMaWIyLmphciI+CisgICAgICAgIDxmaWxlc2V0IGRpcj0iLi9zaGFyZWRsaWIyIi8+CisgICAgPC9qYXI+CisgICAgICA8amF2YWMgc3JjZGlyPSIuL3NoYXJlZGxpYjMiCisgICAgICAgICAgICBkZXN0ZGlyPSIuL3NoYXJlZGxpYjMiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofSIKKyAgICAgICAgICAgIGRlYnVnPSJvbiIKKyAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+CisgICAgPGphciBkZXN0ZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvVGVzdFNoYXJlZExpYjMuamFyIj4KKyAgICAgICAgPGZpbGVzZXQgZGlyPSIuL3NoYXJlZGxpYjMiLz4KKyAgICA8L2phcj4KKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4vc2hhcmVkbGliNCIKKyAgICAgICAgICAgIGRlc3RkaXI9Ii4vc2hhcmVkbGliNCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9IgorICAgICAgICAgICAgZGVidWc9Im9uIgorICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiLz4KKyAgICA8amFyIGRlc3RmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9UZXN0U2hhcmVkTGliNC5qYXIiPgorICAgICAgICA8ZmlsZXNldCBkaXI9Ii4vc2hhcmVkbGliNCIvPgorICAgIDwvamFyPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTUiIC8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnREb21haW4iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiPgotCTxhbnQgZGlyPSJ3ZWJhcHAxIiB0YXJnZXQ9ImRlcGxveSIvPgotCTxhbnQgZGlyPSJ3ZWJhcHAyIiB0YXJnZXQ9ImRlcGxveSIvPgorICAgIDxhbnQgZGlyPSJ3ZWJhcHAxIiB0YXJnZXQ9ImRlcGxveSIvPgorICAgIDxhbnQgZGlyPSJ3ZWJhcHAyIiB0YXJnZXQ9ImRlcGxveSIvPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KQEAgLTExNSwxMCArMTE1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxhbnQgZGlyPSJ3ZWJhcHAxIiB0YXJnZXQ9InVuZGVwbG95Ii8+Ci0JPGFudCBkaXI9IndlYmFwcDIiIHRhcmdldD0idW5kZXBsb3kiLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8YW50IGRpcj0id2ViYXBwMSIgdGFyZ2V0PSJ1bmRlcGxveSIvPgorICAgIDxhbnQgZGlyPSJ3ZWJhcHAyIiB0YXJnZXQ9InVuZGVwbG95Ii8+CisgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvc2hhcmVkbGliMS9jb20vc3VuL2RldnRlc3RzL3dlYi9TaGFyZWRMaWIxU2VydkNvbnRJbml0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3NoYXJlZGxpYjEvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvU2hhcmVkTGliMVNlcnZDb250SW5pdC5qYXZhCmluZGV4IDBmYzYwYzkuLjU1MTgxZDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvc2hhcmVkbGliMS9jb20vc3VuL2RldnRlc3RzL3dlYi9TaGFyZWRMaWIxU2VydkNvbnRJbml0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy9zaGFyZWRsaWIxL2NvbS9zdW4vZGV2dGVzdHMvd2ViL1NoYXJlZExpYjFTZXJ2Q29udEluaXQuamF2YQpAQCAtMjMsOSArMjMsOSBAQAogQEhhbmRsZXNUeXBlcyhXZWJTZXJ2bGV0LmNsYXNzKQogcHVibGljIGNsYXNzIFNoYXJlZExpYjFTZXJ2Q29udEluaXQgaW1wbGVtZW50cyBTZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIgewogICAgIHB1YmxpYyBTaGFyZWRMaWIxU2VydkNvbnRJbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiU0hBUkVEIExJQiAxIENPTlNUIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTSEFSRUQgTElCIDEgQ09OU1QiKTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgb25TdGFydHVwKFNldDxDbGFzczw/Pj4gYywgU2VydmxldENvbnRleHQgY3R4KSB7Ci0JY3R4LnNldEF0dHJpYnV0ZSgiU0hBUkVETElCLTEiLCAiQ0FMTEVEIFNIQVJFRExJQi0xIik7CisgICAgY3R4LnNldEF0dHJpYnV0ZSgiU0hBUkVETElCLTEiLCAiQ0FMTEVEIFNIQVJFRExJQi0xIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy9zaGFyZWRsaWIyL2NvbS9zdW4vZGV2dGVzdHMvd2ViL1NoYXJlZExpYjJTZXJ2Q29udEluaXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvc2hhcmVkbGliMi9jb20vc3VuL2RldnRlc3RzL3dlYi9TaGFyZWRMaWIyU2VydkNvbnRJbml0LmphdmEKaW5kZXggOTE1N2M4My4uZGIyYjg5NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy9zaGFyZWRsaWIyL2NvbS9zdW4vZGV2dGVzdHMvd2ViL1NoYXJlZExpYjJTZXJ2Q29udEluaXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3NoYXJlZGxpYjIvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvU2hhcmVkTGliMlNlcnZDb250SW5pdC5qYXZhCkBAIC0yMiw5ICsyMiw5IEBACiAKIHB1YmxpYyBjbGFzcyBTaGFyZWRMaWIyU2VydkNvbnRJbml0IGltcGxlbWVudHMgU2VydmxldENvbnRhaW5lckluaXRpYWxpemVyIHsKICAgICBwdWJsaWMgU2hhcmVkTGliMlNlcnZDb250SW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlNIQVJFRCBMSUIgMiBDT05TVCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU0hBUkVEIExJQiAyIENPTlNUIik7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIG9uU3RhcnR1cChTZXQ8Q2xhc3M8Pz4+IGMsIFNlcnZsZXRDb250ZXh0IGN0eCkgewotCWN0eC5zZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi0yIiwgIkNBTExFRCBTSEFSRURMSUItMiIpOworICAgIGN0eC5zZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi0yIiwgIkNBTExFRCBTSEFSRURMSUItMiIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvc2hhcmVkbGliMy9jb20vc3VuL2RldnRlc3RzL3dlYi9TaGFyZWRMaWIzU2VydkNvbnRJbml0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3NoYXJlZGxpYjMvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvU2hhcmVkTGliM1NlcnZDb250SW5pdC5qYXZhCmluZGV4IGUzYTQ1NDEuLmM1MmUzZWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvc2hhcmVkbGliMy9jb20vc3VuL2RldnRlc3RzL3dlYi9TaGFyZWRMaWIzU2VydkNvbnRJbml0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy9zaGFyZWRsaWIzL2NvbS9zdW4vZGV2dGVzdHMvd2ViL1NoYXJlZExpYjNTZXJ2Q29udEluaXQuamF2YQpAQCAtMjMsOSArMjMsOSBAQAogQEhhbmRsZXNUeXBlcyhXZWJGaWx0ZXIuY2xhc3MpCiBwdWJsaWMgY2xhc3MgU2hhcmVkTGliM1NlcnZDb250SW5pdCBpbXBsZW1lbnRzIFNlcnZsZXRDb250YWluZXJJbml0aWFsaXplciB7CiAgICAgcHVibGljIFNoYXJlZExpYjNTZXJ2Q29udEluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTSEFSRUQgTElCIDMgQ09OU1QiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNIQVJFRCBMSUIgMyBDT05TVCIpOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBvblN0YXJ0dXAoU2V0PENsYXNzPD8+PiBjLCBTZXJ2bGV0Q29udGV4dCBjdHgpIHsKLQljdHguc2V0QXR0cmlidXRlKCJTSEFSRURMSUItMyIsICJDQUxMRUQgU0hBUkVETElCLTMiKTsKKyAgICBjdHguc2V0QXR0cmlidXRlKCJTSEFSRURMSUItMyIsICJDQUxMRUQgU0hBUkVETElCLTMiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3NoYXJlZGxpYjQvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvU2hhcmVkTGliNFNlcnZDb250SW5pdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy9zaGFyZWRsaWI0L2NvbS9zdW4vZGV2dGVzdHMvd2ViL1NoYXJlZExpYjRTZXJ2Q29udEluaXQuamF2YQppbmRleCBhMzUyM2Y1Li5mMWYzMzIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3NoYXJlZGxpYjQvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvU2hhcmVkTGliNFNlcnZDb250SW5pdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvc2hhcmVkbGliNC9jb20vc3VuL2RldnRlc3RzL3dlYi9TaGFyZWRMaWI0U2VydkNvbnRJbml0LmphdmEKQEAgLTIzLDkgKzIzLDkgQEAKIEBIYW5kbGVzVHlwZXMoamFrYXJ0YS5qd3MuV2ViU2VydmljZS5jbGFzcykKIHB1YmxpYyBjbGFzcyBTaGFyZWRMaWI0U2VydkNvbnRJbml0IGltcGxlbWVudHMgU2VydmxldENvbnRhaW5lckluaXRpYWxpemVyIHsKICAgICBwdWJsaWMgU2hhcmVkTGliNFNlcnZDb250SW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlNIQVJFRCBMSUIgNCBDT05TVCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU0hBUkVEIExJQiA0IENPTlNUIik7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIG9uU3RhcnR1cChTZXQ8Q2xhc3M8Pz4+IGMsIFNlcnZsZXRDb250ZXh0IGN0eCkgewotCWN0eC5zZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi00IiwgIkNBTExFRCBTSEFSRURMSUItNCIpOworICAgIGN0eC5zZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi00IiwgIkNBTExFRCBTSEFSRURMSUItNCIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMS9hcHBsaWIxL2NvbS9zdW4vZGV2dGVzdHMvd2ViL2FwcGxpYi9TZXJ2Q29udEluaXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMS9hcHBsaWIxL2NvbS9zdW4vZGV2dGVzdHMvd2ViL2FwcGxpYi9TZXJ2Q29udEluaXQuamF2YQppbmRleCA3ODNlMWExLi4wYzQzMzVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDEvYXBwbGliMS9jb20vc3VuL2RldnRlc3RzL3dlYi9hcHBsaWIvU2VydkNvbnRJbml0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy93ZWJhcHAxL2FwcGxpYjEvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvYXBwbGliL1NlcnZDb250SW5pdC5qYXZhCkBAIC0yMywxMCArMjMsMTAgQEAKIEBIYW5kbGVzVHlwZXMoV2ViU2VydmxldC5jbGFzcykKIHB1YmxpYyBjbGFzcyBTZXJ2Q29udEluaXQgaW1wbGVtZW50cyBTZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIgewogICAgIHB1YmxpYyBTZXJ2Q29udEluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEFQUCBMSUIgQ09OU1QiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgQVBQIExJQiBDT05TVCIpOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBvblN0YXJ0dXAoU2V0PENsYXNzPD8+PiBjLCBTZXJ2bGV0Q29udGV4dCBjdHgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgQVBQIExJQiBvblN0YXJ0dXAiKTsKLQljdHguc2V0QXR0cmlidXRlKCJBUFBMSUItMSIsICJDQUxMRUQgQVBQTElCLTEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgQVBQIExJQiBvblN0YXJ0dXAiKTsKKyAgICBjdHguc2V0QXR0cmlidXRlKCJBUFBMSUItMSIsICJDQUxMRUQgQVBQTElCLTEiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDI0ZjMwZWUuLmQwZTVhYzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtcGx1Z2dhYmlsaXR5LTEiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDEvYnVpbGQueG1sCmluZGV4IGQ1YTRhMzcuLjA2NzIxNjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy93ZWJhcHAxL2J1aWxkLnhtbApAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NSwzMCArNDUsMzAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAJPGphdmFjIHNyY2Rpcj0iLi9hcHBsaWIxIgotICAgIAkJZGVzdGRpcj0iLi9hcHBsaWIxIgotICAgIAkJY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH0iCi0gICAgCQlkZWJ1Zz0ib24iCi0gICAgCQlmYWlsb25lcnJvcj0idHJ1ZSIvPgorICAgICAgPGphdmFjIHNyY2Rpcj0iLi9hcHBsaWIxIgorICAgICAgICAgICAgZGVzdGRpcj0iLi9hcHBsaWIxIgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH0iCisgICAgICAgICAgICBkZWJ1Zz0ib24iCisgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIvPgogICAgICAgICA8bWtkaXIgZGlyPSJsaWIiLz4KLQk8amFyIGRlc3RmaWxlPSJsaWIvQXBwU2hhcmVkTGliMS5qYXIiPgotCSAgICA8ZmlsZXNldCBkaXI9Ii4vYXBwbGliMSIvPgotCTwvamFyPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgIDxqYXIgZGVzdGZpbGU9ImxpYi9BcHBTaGFyZWRMaWIxLmphciI+CisgICAgICAgIDxmaWxlc2V0IGRpcj0iLi9hcHBsaWIxIi8+CisgICAgPC9qYXI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImJ1aWxkIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy93ZWJhcHAxL3NlcnZsZXQvVGVzdDFTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDEvc2VydmxldC9UZXN0MVNlcnZsZXQuamF2YQppbmRleCA1OTFhNTQ4Li4wNDI5YjNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDEvc2VydmxldC9UZXN0MVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDEvc2VydmxldC9UZXN0MVNlcnZsZXQuamF2YQpAQCAtMzUsMTkgKzM1LDE5IEBACiAgICAgcHVibGljIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAKLQlTdHJpbmdCdWZmZXIgcmV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgIFN0cmluZ0J1ZmZlciByZXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgIFN0cmluZyBhdHRyID0gKFN0cmluZykgY29udGV4dC5nZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi0xIik7Ci0JcmV0LmFwcGVuZChhdHRyICsiOyIpOworICAgIHJldC5hcHBlbmQoYXR0ciArIjsiKTsKICAgICAgICAgYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJTSEFSRURMSUItMiIpOwotCXJldC5hcHBlbmQoYXR0ciArIjsiKTsKLQlhdHRyID0gKFN0cmluZykgY29udGV4dC5nZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi0zIik7Ci0JcmV0LmFwcGVuZChhdHRyICsiOyIpOworICAgIHJldC5hcHBlbmQoYXR0ciArIjsiKTsKKyAgICBhdHRyID0gKFN0cmluZykgY29udGV4dC5nZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi0zIik7CisgICAgcmV0LmFwcGVuZChhdHRyICsiOyIpOwogICAgICAgICBhdHRyID0gKFN0cmluZykgY29udGV4dC5nZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi00Iik7Ci0JcmV0LmFwcGVuZChhdHRyICsiOyIpOworICAgIHJldC5hcHBlbmQoYXR0ciArIjsiKTsKICAgICAgICAgYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJBUFBMSUItMSIpOwotCXJldC5hcHBlbmQoYXR0ciArIjsiKTsKLQlhdHRyID0gKFN0cmluZykgY29udGV4dC5nZXRBdHRyaWJ1dGUoIkFQUExJQi0yIik7Ci0JcmV0LmFwcGVuZChhdHRyKTsKKyAgICByZXQuYXBwZW5kKGF0dHIgKyI7Iik7CisgICAgYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJBUFBMSUItMiIpOworICAgIHJldC5hcHBlbmQoYXR0cik7CiAgICAgICAgIHJlcy5nZXRXcml0ZXIoKS53cml0ZShyZXQudG9TdHJpbmcoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy93ZWJhcHAyL2FwcGxpYjIvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvYXBwbGliL1NlcnZDb250MkluaXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMi9hcHBsaWIyL2NvbS9zdW4vZGV2dGVzdHMvd2ViL2FwcGxpYi9TZXJ2Q29udDJJbml0LmphdmEKaW5kZXggNGJlYWUzZS4uMGQ5MGNhNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy93ZWJhcHAyL2FwcGxpYjIvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvYXBwbGliL1NlcnZDb250MkluaXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDIvYXBwbGliMi9jb20vc3VuL2RldnRlc3RzL3dlYi9hcHBsaWIvU2VydkNvbnQySW5pdC5qYXZhCkBAIC0yMyw5ICsyMyw5IEBACiBASGFuZGxlc1R5cGVzKFdlYkZpbHRlci5jbGFzcykKIHB1YmxpYyBjbGFzcyBTZXJ2Q29udDJJbml0IGltcGxlbWVudHMgU2VydmxldENvbnRhaW5lckluaXRpYWxpemVyIHsKICAgICBwdWJsaWMgU2VydkNvbnQySW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkFQUCBMSUIgMiBDT05TVCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQVBQIExJQiAyIENPTlNUIik7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIG9uU3RhcnR1cChTZXQ8Q2xhc3M8Pz4+IGMsIFNlcnZsZXRDb250ZXh0IGN0eCkgewotCWN0eC5zZXRBdHRyaWJ1dGUoIkFQUExJQi0yIiwgIkNBTExFRCBBUFBMSUItMiIpOworICAgIGN0eC5zZXRBdHRyaWJ1dGUoIkFQUExJQi0yIiwgIkNBTExFRCBBUFBMSUItMiIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy93ZWJhcHAyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzE5ZjRjOS4uOGU2OGFmMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy93ZWJhcHAyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy93ZWJhcHAyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1wbHVnZ2FiaWxpdHktMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy93ZWJhcHAyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMi9idWlsZC54bWwKaW5kZXggMjAxMDJiNC4uOTExYTEwOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy93ZWJhcHAyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDIvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ1LDMwICs0NSwzMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gIAk8amF2YWMgc3JjZGlyPSIuL2FwcGxpYjIiCi0gICAgCQlkZXN0ZGlyPSIuL2FwcGxpYjIiCi0gICAgCQljbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofSIKLSAgICAJCWRlYnVnPSJvbiIKLSAgICAJCWZhaWxvbmVycm9yPSJ0cnVlIi8+CisgICAgICA8amF2YWMgc3JjZGlyPSIuL2FwcGxpYjIiCisgICAgICAgICAgICBkZXN0ZGlyPSIuL2FwcGxpYjIiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofSIKKyAgICAgICAgICAgIGRlYnVnPSJvbiIKKyAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+CiAgICAgICAgIDxta2RpciBkaXI9ImxpYiIvPgotCTxqYXIgZGVzdGZpbGU9ImxpYi9BcHBTaGFyZWRMaWIyLmphciI+Ci0JICAgIDxmaWxlc2V0IGRpcj0iLi9hcHBsaWIyIi8+Ci0JPC9qYXI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgPGphciBkZXN0ZmlsZT0ibGliL0FwcFNoYXJlZExpYjIuamFyIj4KKyAgICAgICAgPGZpbGVzZXQgZGlyPSIuL2FwcGxpYjIiLz4KKyAgICA8L2phcj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iYnVpbGQiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDIvc2VydmxldC9UZXN0MlNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMi9zZXJ2bGV0L1Rlc3QyU2VydmxldC5qYXZhCmluZGV4IGZiZDc5MDMuLjkzZjJkNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMi9zZXJ2bGV0L1Rlc3QyU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMi9zZXJ2bGV0L1Rlc3QyU2VydmxldC5qYXZhCkBAIC0zNSwxOSArMzUsMTkgQEAKICAgICBwdWJsaWMgdm9pZCBzZXJ2aWNlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKIAotCVN0cmluZ0J1ZmZlciByZXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgU3RyaW5nQnVmZmVyIHJldCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgICAgU3RyaW5nIGF0dHIgPSAoU3RyaW5nKSBjb250ZXh0LmdldEF0dHJpYnV0ZSgiU0hBUkVETElCLTEiKTsKLQlyZXQuYXBwZW5kKGF0dHIgKyI7Iik7CisgICAgcmV0LmFwcGVuZChhdHRyICsiOyIpOwogICAgICAgICBhdHRyID0gKFN0cmluZykgY29udGV4dC5nZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi0yIik7Ci0JcmV0LmFwcGVuZChhdHRyICsiOyIpOwotCWF0dHIgPSAoU3RyaW5nKSBjb250ZXh0LmdldEF0dHJpYnV0ZSgiU0hBUkVETElCLTMiKTsKLQlyZXQuYXBwZW5kKGF0dHIgKyI7Iik7CisgICAgcmV0LmFwcGVuZChhdHRyICsiOyIpOworICAgIGF0dHIgPSAoU3RyaW5nKSBjb250ZXh0LmdldEF0dHJpYnV0ZSgiU0hBUkVETElCLTMiKTsKKyAgICByZXQuYXBwZW5kKGF0dHIgKyI7Iik7CiAgICAgICAgIGF0dHIgPSAoU3RyaW5nKSBjb250ZXh0LmdldEF0dHJpYnV0ZSgiU0hBUkVETElCLTQiKTsKLQlyZXQuYXBwZW5kKGF0dHIgKyI7Iik7CisgICAgcmV0LmFwcGVuZChhdHRyICsiOyIpOwogICAgICAgICBhdHRyID0gKFN0cmluZykgY29udGV4dC5nZXRBdHRyaWJ1dGUoIkFQUExJQi0xIik7Ci0JcmV0LmFwcGVuZChhdHRyICsiOyIpOwotCWF0dHIgPSAoU3RyaW5nKSBjb250ZXh0LmdldEF0dHJpYnV0ZSgiQVBQTElCLTIiKTsKLQlyZXQuYXBwZW5kKGF0dHIpOworICAgIHJldC5hcHBlbmQoYXR0ciArIjsiKTsKKyAgICBhdHRyID0gKFN0cmluZykgY29udGV4dC5nZXRBdHRyaWJ1dGUoIkFQUExJQi0yIik7CisgICAgcmV0LmFwcGVuZChhdHRyKTsKICAgICAgICAgcmVzLmdldFdyaXRlcigpLndyaXRlKHJldC50b1N0cmluZygpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDIvc2VydmxldC9UZXN0RmlsdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDIvc2VydmxldC9UZXN0RmlsdGVyLmphdmEKaW5kZXggYjRlNDczZi4uNTEzZWYwMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy93ZWJhcHAyL3NlcnZsZXQvVGVzdEZpbHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMi9zZXJ2bGV0L1Rlc3RGaWx0ZXIuamF2YQpAQCAtMzQsNyArMzQsNyBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBmaWx0ZXIuaW5pdCIpOwogICAgICAgICBtZXNnID0gZmlsdGVyQ29uZmlnLmdldEluaXRQYXJhbWV0ZXIoIm1lc2ciKTsKLSAgICB9ICAgCisgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxLCBTZXJ2bGV0UmVzcG9uc2UgcmVzLAogICAgICAgICAgICAgRmlsdGVyQ2hhaW4gY2hhaW4pIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyQWRkUmVzdHJpY3RlZFNlcnZsZXRDb250ZXh0TGlzdGVuZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplckFkZFJlc3RyaWN0ZWRTZXJ2bGV0Q29udGV4dExpc3RlbmVyL1dlYlRlc3QuamF2YQppbmRleCA2MGEyMjk0Li4xOWRkOGZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyQWRkUmVzdHJpY3RlZFNlcnZsZXRDb250ZXh0TGlzdGVuZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXJBZGRSZXN0cmljdGVkU2VydmxldENvbnRleHRMaXN0ZW5lci9XZWJUZXN0LmphdmEKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgSVQgODU2NSIpOwogCkBAIC03MSw3ICs3MSw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdCArICIvdGVzdCI7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pCiAgICAgICAgICAgICAobmV3IFVSTCh1cmwpKS5vcGVuQ29ubmVjdGlvbigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplckFkZFJlc3RyaWN0ZWRTZXJ2bGV0Q29udGV4dExpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyQWRkUmVzdHJpY3RlZFNlcnZsZXRDb250ZXh0TGlzdGVuZXIvYnVpbGQucHJvcGVydGllcwppbmRleCA3NTQ1YjY4Li4xMTkxNDdmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyQWRkUmVzdHJpY3RlZFNlcnZsZXRDb250ZXh0TGlzdGVuZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyQWRkUmVzdHJpY3RlZFNlcnZsZXRDb250ZXh0TGlzdGVuZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1zZXJ2bGV0LWNvbnRhaW5lci1pbml0aWFsaXplci1hZGQtcmVzdHJpY3RlZC1zZXJ2bGV0LWNvbnRleHQtbGlzdGVuZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXJBZGRSZXN0cmljdGVkU2VydmxldENvbnRleHRMaXN0ZW5lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyQWRkUmVzdHJpY3RlZFNlcnZsZXRDb250ZXh0TGlzdGVuZXIvYnVpbGQueG1sCmluZGV4IGFiZjRhNTguLjhjNmEwMzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXJBZGRSZXN0cmljdGVkU2VydmxldENvbnRleHRMaXN0ZW5lci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplckFkZFJlc3RyaWN0ZWRTZXJ2bGV0Q29udGV4dExpc3RlbmVyL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPGRlbGV0ZSBkaXI9ImxpYiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTY2LDE5ICs2NiwxOSBAQAogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqL1Rlc3RTZXJ2bGV0LmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqL1Rlc3RTZXJ2bGV0LmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC05MCwxMCArOTAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRMaXN0ZW5lckJ5Q2xhc3NOYW1lL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZExpc3RlbmVyQnlDbGFzc05hbWUvV2ViVGVzdC5qYXZhCmluZGV4IDlmMjE3NGIuLjM2ZGEyZDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZExpc3RlbmVyQnlDbGFzc05hbWUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZExpc3RlbmVyQnlDbGFzc05hbWUvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgU2VydmxldENvbnRleHQjYWRkTGlzdGVuZXIiKTsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkTGlzdGVuZXJCeUNsYXNzTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkTGlzdGVuZXJCeUNsYXNzTmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGJiMGI1YzkuLjY0MmIzZjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZExpc3RlbmVyQnlDbGFzc05hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRMaXN0ZW5lckJ5Q2xhc3NOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtc2VydmxldC1jb250ZXh0LWFkZC1saXN0ZW5lci1ieS1jbGFzcy1uYW1lIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRMaXN0ZW5lckJ5Q2xhc3NOYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZExpc3RlbmVyQnlDbGFzc05hbWUvYnVpbGQueG1sCmluZGV4IDQ4ZTBhMGEuLmU5Yjc2MDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZExpc3RlbmVyQnlDbGFzc05hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZExpc3RlbmVyQnlDbGFzc05hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMyArNDQsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzcy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzcy9XZWJUZXN0LmphdmEKaW5kZXggNjhhYjg2Mi4uZWQ5YTZmNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5Q2xhc3MvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzL1dlYlRlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIFNlcnZsZXRDb250ZXh0I2FkZFNlcnZsZXQgYW5kICIgKwpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5Q2xhc3MvYnVpbGQucHJvcGVydGllcwppbmRleCBiZDUyZmRmLi5kODM5NDMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtc2VydmxldC1jb250ZXh0LWFkZC1zZXJ2bGV0LWFuZC1maWx0ZXItYnktY2xhc3MiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzL2J1aWxkLnhtbAppbmRleCBmMWMyMmFhLi5lZWQxZGNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5Q2xhc3MvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMyArNDQsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzcy9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5Q2xhc3Mvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQppbmRleCBjZjE5MjE2Li40NDVmNTZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzcy9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKQEAgLTY3LDYgKzY3LDYgQEAKICAgICAgICAgICAgICAgICAidGVzdC5OZXdGaWx0ZXIiKSk7CiAgICAgICAgIGZyLnNldEluaXRQYXJhbWV0ZXIoImZpbHRlckluaXRQYXJhbU5hbWUiLCAiZmlsdGVySW5pdFBhcmFtVmFsdWUiKTsKICAgICAgICAgZnIuYWRkTWFwcGluZ0ZvclNlcnZsZXROYW1lcyhFbnVtU2V0Lm9mKERpc3BhdGNoZXJUeXBlLlJFUVVFU1QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICJOZXdTZXJ2bGV0Iik7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICJOZXdTZXJ2bGV0Iik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5Q2xhc3NOYW1lL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzTmFtZS9XZWJUZXN0LmphdmEKaW5kZXggNGM1MjdjMS4uZGZhZGViYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5Q2xhc3NOYW1lL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzc05hbWUvV2ViVGVzdC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgU2VydmxldENvbnRleHQjYWRkU2VydmxldCBhbmQgIiArCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5Q2xhc3NOYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDcyMmQzMy4uODI3Yzk0ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5Q2xhc3NOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5Q2xhc3NOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtc2VydmxldC1jb250ZXh0LWFkZC1zZXJ2bGV0LWFuZC1maWx0ZXItYnktY2xhc3MtbmFtZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5Q2xhc3NOYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzTmFtZS9idWlsZC54bWwKaW5kZXggZjFjMjJhYS4uZWVkMWRjZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5Q2xhc3NOYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzc05hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMyArNDQsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzc05hbWUvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzTmFtZS9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCmluZGV4IGZlODkwYmQuLjYzOTYxODUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzTmFtZS9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzTmFtZS9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIEZpbHRlclJlZ2lzdHJhdGlvbiBmciA9IHNjLmFkZEZpbHRlcigiTmV3RmlsdGVyIiwgInRlc3QuTmV3RmlsdGVyIik7CiAgICAgICAgIGZyLnNldEluaXRQYXJhbWV0ZXIoImZpbHRlckluaXROYW1lIiwgImZpbHRlckluaXRWYWx1ZSIpOwogICAgICAgICBmci5hZGRNYXBwaW5nRm9yU2VydmxldE5hbWVzKEVudW1TZXQub2YoRGlzcGF0Y2hlclR5cGUuUkVRVUVTVCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgIk5ld1NlcnZsZXQiKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgIk5ld1NlcnZsZXQiKTsKICAgICB9CiAKICAgICAvKioKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUluc3RhbmNlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUluc3RhbmNlL1dlYlRlc3QuamF2YQppbmRleCA5MDlmNzZkLi5iZDEyZDkwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlJbnN0YW5jZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5SW5zdGFuY2UvV2ViVGVzdC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgU2VydmxldENvbnRleHQjYWRkU2VydmxldCBhbmQgIiArCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUluc3RhbmNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlJbnN0YW5jZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGZlMmY0ZmUuLjQ2ZGQ4ZWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUluc3RhbmNlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5SW5zdGFuY2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1zZXJ2bGV0LWNvbnRleHQtYWRkLXNlcnZsZXQtYW5kLWZpbHRlci1ieS1pbnN0YW5jZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5SW5zdGFuY2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5SW5zdGFuY2UvYnVpbGQueG1sCmluZGV4IGYxYzIyYWEuLmVlZDFkY2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUluc3RhbmNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlJbnN0YW5jZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIzICs0NCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcyLDEwICs3MiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUluc3RhbmNlL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlJbnN0YW5jZS9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCmluZGV4IGRhZWQxNmYuLmQwZTdiZDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUluc3RhbmNlL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5SW5zdGFuY2Uvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQpAQCAtODcsNyArODcsNyBAQAogICAgICAgICBGaWx0ZXJSZWdpc3RyYXRpb24gZnIgPSBzYy5hZGRGaWx0ZXIoIk5ld0ZpbHRlciIsIGZpbHRlcik7CiAgICAgICAgIGZyLnNldEluaXRQYXJhbWV0ZXIoImZpbHRlckluaXRQYXJhbU5hbWUiLCAiZmlsdGVySW5pdFBhcmFtVmFsdWUiKTsKICAgICAgICAgZnIuYWRkTWFwcGluZ0ZvclNlcnZsZXROYW1lcyhFbnVtU2V0Lm9mKERpc3BhdGNoZXJUeXBlLlJFUVVFU1QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICJOZXdTZXJ2bGV0Iik7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICJOZXdTZXJ2bGV0Iik7CiAKICAgICAgICAgLyoKICAgICAgICAgICogTWFrZSBzdXJlIHRoYXQgaWYgd2UgcmVnaXN0ZXIgYSBkaWZmZXJlbnQgZmlsdGVyIGluc3RhbmNlCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0T3ZlcnJpZGVEZWZhdWx0QW5kSnNwU2VydmxldE1hcHBpbmdzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRPdmVycmlkZURlZmF1bHRBbmRKc3BTZXJ2bGV0TWFwcGluZ3MvV2ViVGVzdC5qYXZhCmluZGV4IDQzMmFlYTAuLmIxMjJiNWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRPdmVycmlkZURlZmF1bHRBbmRKc3BTZXJ2bGV0TWFwcGluZ3MvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRPdmVycmlkZURlZmF1bHRBbmRKc3BTZXJ2bGV0TWFwcGluZ3MvV2ViVGVzdC5qYXZhCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgSVQgOTE4MSIpOwpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyBwYXRoKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRPdmVycmlkZURlZmF1bHRBbmRKc3BTZXJ2bGV0TWFwcGluZ3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRPdmVycmlkZURlZmF1bHRBbmRKc3BTZXJ2bGV0TWFwcGluZ3MvYnVpbGQucHJvcGVydGllcwppbmRleCA5ZTgwNzc5Li5iNjZiYjY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0T3ZlcnJpZGVEZWZhdWx0QW5kSnNwU2VydmxldE1hcHBpbmdzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldE92ZXJyaWRlRGVmYXVsdEFuZEpzcFNlcnZsZXRNYXBwaW5ncy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlcnZsZXQtY29udGV4dC1hZGQtc2VydmxldC1vdmVycmlkZS1kZWZhdWx0LWFuZC1qc3Atc2VydmxldC1tYXBwaW5ncyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldE92ZXJyaWRlRGVmYXVsdEFuZEpzcFNlcnZsZXRNYXBwaW5ncy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0T3ZlcnJpZGVEZWZhdWx0QW5kSnNwU2VydmxldE1hcHBpbmdzL2J1aWxkLnhtbAppbmRleCBmMWMyMmFhLi5lZWQxZGNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0T3ZlcnJpZGVEZWZhdWx0QW5kSnNwU2VydmxldE1hcHBpbmdzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0T3ZlcnJpZGVEZWZhdWx0QW5kSnNwU2VydmxldE1hcHBpbmdzL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjMgKzQ0LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzIsMTAgKzcyLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q29tcGxldGVQcmVsaW1pbmFyeUZpbHRlclJlZ2lzdHJhdGlvbi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDb21wbGV0ZVByZWxpbWluYXJ5RmlsdGVyUmVnaXN0cmF0aW9uL1dlYlRlc3QuamF2YQppbmRleCBkYmFiNTg5Li44MzJhNjUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDb21wbGV0ZVByZWxpbWluYXJ5RmlsdGVyUmVnaXN0cmF0aW9uL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDb21wbGV0ZVByZWxpbWluYXJ5RmlsdGVyUmVnaXN0cmF0aW9uL1dlYlRlc3QuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElUIDkxOTkiKTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q29tcGxldGVQcmVsaW1pbmFyeUZpbHRlclJlZ2lzdHJhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q29tcGxldGVQcmVsaW1pbmFyeUZpbHRlclJlZ2lzdHJhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDgyZjBiZGIuLjU0YzcxNGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENvbXBsZXRlUHJlbGltaW5hcnlGaWx0ZXJSZWdpc3RyYXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDb21wbGV0ZVByZWxpbWluYXJ5RmlsdGVyUmVnaXN0cmF0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtc2VydmxldC1jb250ZXh0LWNvbXBsZXRlLXByZWxpbWluYXJ5LWZpbHRlci1yZWdpc3RyYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENvbXBsZXRlUHJlbGltaW5hcnlGaWx0ZXJSZWdpc3RyYXRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q29tcGxldGVQcmVsaW1pbmFyeUZpbHRlclJlZ2lzdHJhdGlvbi9idWlsZC54bWwKaW5kZXggZjFjMjJhYS4uZWVkMWRjZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q29tcGxldGVQcmVsaW1pbmFyeUZpbHRlclJlZ2lzdHJhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q29tcGxldGVQcmVsaW1pbmFyeUZpbHRlclJlZ2lzdHJhdGlvbi9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIzICs0NCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcyLDEwICs3MiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENvbXBsZXRlUHJlbGltaW5hcnlGaWx0ZXJSZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENvbXBsZXRlUHJlbGltaW5hcnlGaWx0ZXJSZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQppbmRleCBjNzljNjI1Li43NWEyMWZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDb21wbGV0ZVByZWxpbWluYXJ5RmlsdGVyUmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q29tcGxldGVQcmVsaW1pbmFyeUZpbHRlclJlZ2lzdHJhdGlvbi9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCkBAIC0zNCw3ICszNCw3IEBACiAgICAgICAgIFNlcnZsZXRDb250ZXh0IHNjID0gc2NlLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgICAgIEZpbHRlclJlZ2lzdHJhdGlvbiBmclByZWxpbSA9IHNjLmdldEZpbHRlclJlZ2lzdHJhdGlvbigiTXlGaWx0ZXIiKTsKICAgICAgICAgaWYgKGZyUHJlbGltID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJNaXNzaW5nIEZpbHRlclJlZ2lzdHJhdGlvbiBmb3IgIiArIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk1pc3NpbmcgRmlsdGVyUmVnaXN0cmF0aW9uIGZvciAiICsKICAgICAgICAgICAgICAgICAiTXlGaWx0ZXIiKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDb21wbGV0ZVByZWxpbWluYXJ5U2VydmxldFJlZ2lzdHJhdGlvbi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDb21wbGV0ZVByZWxpbWluYXJ5U2VydmxldFJlZ2lzdHJhdGlvbi9XZWJUZXN0LmphdmEKaW5kZXggMWEyYjcxZi4uNmM1ZmQ0MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q29tcGxldGVQcmVsaW1pbmFyeVNlcnZsZXRSZWdpc3RyYXRpb24vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENvbXBsZXRlUHJlbGltaW5hcnlTZXJ2bGV0UmVnaXN0cmF0aW9uL1dlYlRlc3QuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElUIDkxOTkiKTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q29tcGxldGVQcmVsaW1pbmFyeVNlcnZsZXRSZWdpc3RyYXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENvbXBsZXRlUHJlbGltaW5hcnlTZXJ2bGV0UmVnaXN0cmF0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjE0MjliMi4uZmRiN2YxYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q29tcGxldGVQcmVsaW1pbmFyeVNlcnZsZXRSZWdpc3RyYXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDb21wbGV0ZVByZWxpbWluYXJ5U2VydmxldFJlZ2lzdHJhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlcnZsZXQtY29udGV4dC1jb21wbGV0ZS1wcmVsaW1pbmFyeS1zZXJ2bGV0LXJlZ2lzdHJhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q29tcGxldGVQcmVsaW1pbmFyeVNlcnZsZXRSZWdpc3RyYXRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q29tcGxldGVQcmVsaW1pbmFyeVNlcnZsZXRSZWdpc3RyYXRpb24vYnVpbGQueG1sCmluZGV4IGYxYzIyYWEuLmVlZDFkY2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENvbXBsZXRlUHJlbGltaW5hcnlTZXJ2bGV0UmVnaXN0cmF0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDb21wbGV0ZVByZWxpbWluYXJ5U2VydmxldFJlZ2lzdHJhdGlvbi9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIzICs0NCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcyLDEwICs3MiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENvbXBsZXRlUHJlbGltaW5hcnlTZXJ2bGV0UmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDb21wbGV0ZVByZWxpbWluYXJ5U2VydmxldFJlZ2lzdHJhdGlvbi9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCmluZGV4IDlkY2IyNzIuLjcwZWM2NDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENvbXBsZXRlUHJlbGltaW5hcnlTZXJ2bGV0UmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q29tcGxldGVQcmVsaW1pbmFyeVNlcnZsZXRSZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQpAQCAtMzQsNyArMzQsNyBAQAogICAgICAgICBTZXJ2bGV0Q29udGV4dCBzYyA9IHNjZS5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgICAgICBTZXJ2bGV0UmVnaXN0cmF0aW9uIHNyUHJlbGltID0gc2MuZ2V0U2VydmxldFJlZ2lzdHJhdGlvbigiTXlTZXJ2bGV0Iik7CiAgICAgICAgIGlmIChzclByZWxpbSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTWlzc2luZyBTZXJ2bGV0UmVnaXN0cmF0aW9uIGZvciAiICsgCisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTWlzc2luZyBTZXJ2bGV0UmVnaXN0cmF0aW9uIGZvciAiICsKICAgICAgICAgICAgICAgICAiTXlTZXJ2bGV0Iik7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldEFuZEZpbHRlci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDcmVhdGVTZXJ2bGV0QW5kRmlsdGVyL1dlYlRlc3QuamF2YQppbmRleCA0Nzk5MjgzLi41MDBhOWViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDcmVhdGVTZXJ2bGV0QW5kRmlsdGVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDcmVhdGVTZXJ2bGV0QW5kRmlsdGVyL1dlYlRlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigKICAgICAgICAgICAgICJVbml0IHRlc3QgZm9yIFNlcnZsZXRDb250ZXh0I2NyZWF0ZVtTZXJ2bGV0fEZpbHRlcl0iKTsKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldEFuZEZpbHRlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldEFuZEZpbHRlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQyNGU5NzcuLjVhZDZmZDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENyZWF0ZVNlcnZsZXRBbmRGaWx0ZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDcmVhdGVTZXJ2bGV0QW5kRmlsdGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtc2VydmxldC1jb250ZXh0LWNyZWF0ZS1zZXJ2bGV0LWFuZC1maWx0ZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENyZWF0ZVNlcnZsZXRBbmRGaWx0ZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldEFuZEZpbHRlci9idWlsZC54bWwKaW5kZXggMDQ5OTljYS4uYzFiOTYyZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldEFuZEZpbHRlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldEFuZEZpbHRlci9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIyICs0NCwyMiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MSwxMCArNzEsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDcmVhdGVTZXJ2bGV0QW5kRmlsdGVyL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDcmVhdGVTZXJ2bGV0QW5kRmlsdGVyL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKaW5kZXggYzg4NWQyMy4uMWY3ZWQ2YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldEFuZEZpbHRlci9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENyZWF0ZVNlcnZsZXRBbmRGaWx0ZXIvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQpAQCAtNzIsNiArNzIsNiBAQAogICAgICAgICBGaWx0ZXJSZWdpc3RyYXRpb24gZnIgPSBzYy5hZGRGaWx0ZXIoIk5ld0ZpbHRlciIsIGZpbHRlcik7CiAgICAgICAgIGZyLnNldEluaXRQYXJhbWV0ZXIoImZpbHRlckluaXRQYXJhbU5hbWUiLCAiZmlsdGVySW5pdFBhcmFtVmFsdWUiKTsKICAgICAgICAgZnIuYWRkTWFwcGluZ0ZvclNlcnZsZXROYW1lcyhFbnVtU2V0Lm9mKERpc3BhdGNoZXJUeXBlLlJFUVVFU1QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICJOZXdTZXJ2bGV0Iik7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICJOZXdTZXJ2bGV0Iik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldEFuZEZpbHRlci9zZXJ2bGV0L3Rlc3QvTmV3RmlsdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDcmVhdGVTZXJ2bGV0QW5kRmlsdGVyL3NlcnZsZXQvdGVzdC9OZXdGaWx0ZXIuamF2YQppbmRleCA2YWE0MDVmLi44ZDQ2MDdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDcmVhdGVTZXJ2bGV0QW5kRmlsdGVyL3NlcnZsZXQvdGVzdC9OZXdGaWx0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDcmVhdGVTZXJ2bGV0QW5kRmlsdGVyL3NlcnZsZXQvdGVzdC9OZXdGaWx0ZXIuamF2YQpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICBpbml0UGFyYW1WYWx1ZSA9IGNvbmZpZy5nZXRJbml0UGFyYW1ldGVyKCJmaWx0ZXJJbml0UGFyYW1OYW1lIik7CiAKICAgICAgICAgU2VydmxldENvbnRleHQgc2MgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKLSAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGxvZ2luVGltZW91dCA9IGRzMS5nZXRMb2dpblRpbWVvdXQoKTsKICAgICAgICAgICAgIHNjLmxvZygiZHMxLWxvZ2luLXRpbWVvdXQ9IiArIGxvZ2luVGltZW91dCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDcmVhdGVTZXJ2bGV0V2l0aFNlcnZsZXRTZWN1cml0eS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDcmVhdGVTZXJ2bGV0V2l0aFNlcnZsZXRTZWN1cml0eS9XZWJUZXN0LmphdmEKaW5kZXggNTFmYTc5NC4uZWZhMDFmMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldFdpdGhTZXJ2bGV0U2VjdXJpdHkvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENyZWF0ZVNlcnZsZXRXaXRoU2VydmxldFNlY3VyaXR5L1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHNldFNlcnZsZXRTZWN1cml0eSIpOwpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTc0LDcgKzc0LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIGJvb2xlYW4gZG9XZWJNZXRob2QoU3RyaW5nIHdlYk1ldGhvZCwgU3RyaW5nIGhvc3QsIGludCBwb3J0LAotICAgICAgICAgICAgU3RyaW5nIGNvbnRleHRQYXRoLCBib29sZWFuIHJlcXVpcmVBdXRoZW50aWNhdGUsIAorICAgICAgICAgICAgU3RyaW5nIGNvbnRleHRQYXRoLCBib29sZWFuIHJlcXVpcmVBdXRoZW50aWNhdGUsCiAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlLCBTdHJpbmcgZXhwZWN0ZWQpIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIFN0cmluZyB1cmxTdHIgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRQYXRoOwpAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIG9rID0gb2sgJiYgZXhwZWN0ZWQuZXF1YWxzKGxpbmUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7Ci0gICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGVzdCBVTlBSRURJQ1RFRC1GQUlMVVJFIik7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgIHRyeSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDcmVhdGVTZXJ2bGV0V2l0aFNlcnZsZXRTZWN1cml0eS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldFdpdGhTZXJ2bGV0U2VjdXJpdHkvYnVpbGQucHJvcGVydGllcwppbmRleCBlMmFhYTRlLi42Yzc5NGUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDcmVhdGVTZXJ2bGV0V2l0aFNlcnZsZXRTZWN1cml0eS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENyZWF0ZVNlcnZsZXRXaXRoU2VydmxldFNlY3VyaXR5L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtc2VydmxldC1jb250ZXh0LWNyZWF0ZS1zZXJ2bGV0LXdpdGgtc2VydmxldC1zZWN1cml0eSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldFdpdGhTZXJ2bGV0U2VjdXJpdHkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldFdpdGhTZXJ2bGV0U2VjdXJpdHkvYnVpbGQueG1sCmluZGV4IDQ4NmQ4ODguLjBiNzUyNDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENyZWF0ZVNlcnZsZXRXaXRoU2VydmxldFNlY3VyaXR5L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDcmVhdGVTZXJ2bGV0V2l0aFNlcnZsZXRTZWN1cml0eS9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IldlYlRlc3QuY2xhc3MiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01NywxMCArNTcsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTY4LDE0ICs2OCwxNCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtcnQuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC05MCw3ICs5MCw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJzZXR1cCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXVzZXItY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlYWxQYXRoRnJvbUxvY2FsSmFyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlYWxQYXRoRnJvbUxvY2FsSmFyL1dlYlRlc3QuamF2YQppbmRleCA5NzlhNWJlLi5hZDc4MjAzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZWFsUGF0aEZyb21Mb2NhbEphci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVhbFBhdGhGcm9tTG9jYWxKYXIvV2ViVGVzdC5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiAvKgotICogVW5pdCB0ZXN0IGZvciBTZXJ2bGV0Q29udGV4dCNnZXRSZWFsUGF0aCwgd2hlcmUgdGhlIHJlcXVlc3RlZCAKKyAqIFVuaXQgdGVzdCBmb3IgU2VydmxldENvbnRleHQjZ2V0UmVhbFBhdGgsIHdoZXJlIHRoZSByZXF1ZXN0ZWQKICAqIHJlc291cmNlIGlzIHN0b3JlZCBpbiB0aGUgTUVUQS1JTkYvcmVzb3VyY2VzIGRpcmVjdG9yeSBvZiB0aGUKICAqIGFwcGxpY2F0aW9uJ3MgYnVuZGxlZCBXRUItSU5GL2xpYi9uZXN0ZWQuamFyLgogICovCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIFNlcnZsZXRDb250ZXh0I2dldFJlYWxQYXRoIik7CiAgICAgICAgIG5ldyBXZWJUZXN0KGFyZ3MpLmRvVGVzdCgpOwpAQCAtNDcsNyArNDcsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VTZXJ2bGV0KCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVhbFBhdGhGcm9tTG9jYWxKYXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlYWxQYXRoRnJvbUxvY2FsSmFyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggN2Q3YmMxOC4uNGUzYzU4ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVhbFBhdGhGcm9tTG9jYWxKYXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZWFsUGF0aEZyb21Mb2NhbEphci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlcnZsZXQtY29udGV4dC1nZXQtcmVhbC1wYXRoLWZyb20tbG9jYWwtamFyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZWFsUGF0aEZyb21Mb2NhbEphci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZWFsUGF0aEZyb21Mb2NhbEphci9idWlsZC54bWwKaW5kZXggZThhMDY3ZC4uYWU4OTA3MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVhbFBhdGhGcm9tTG9jYWxKYXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlYWxQYXRoRnJvbUxvY2FsSmFyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjEgKzQyLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC02OCwxMCArNjgsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZWFsUGF0aEZyb21Mb2NhbEphci9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZWFsUGF0aEZyb21Mb2NhbEphci9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggM2FlODQ1My4uZTllN2ExYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVhbFBhdGhGcm9tTG9jYWxKYXIvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlYWxQYXRoRnJvbUxvY2FsSmFyL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogICAgIHB1YmxpYyB2b2lkIHNlcnZpY2UoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgcGF0aCA9IGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0UmVhbFBhdGgoIi9hYmMudHh0Iik7Ci0gICAgICAgIGlmIChwYXRoID09IG51bGwgfHwgCisgICAgICAgIGlmIChwYXRoID09IG51bGwgfHwKICAgICAgICAgICAgICAgICBwYXRoLmluZGV4T2YoIi9NRVRBLUlORi9yZXNvdXJjZXMiKSA9PSAtMSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIldyb25nIHJlc291cmNlIHBhdGgiKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVzb3VyY2VJbkxvY2FsSmFyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlc291cmNlSW5Mb2NhbEphci9XZWJUZXN0LmphdmEKaW5kZXggZWM3ZjJiNC4uMDgzOGZjYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVzb3VyY2VJbkxvY2FsSmFyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZXNvdXJjZUluTG9jYWxKYXIvV2ViVGVzdC5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIFNlcnZsZXRDb250ZXh0I2dldFJlc291cmNlIik7CiAgICAgICAgIG5ldyBXZWJUZXN0KGFyZ3MpLmRvVGVzdCgpOwpAQCAtNTMsNyArNTMsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VTZXJ2bGV0KCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVzb3VyY2VJbkxvY2FsSmFyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZXNvdXJjZUluTG9jYWxKYXIvYnVpbGQucHJvcGVydGllcwppbmRleCAyMjljMjVkLi4wMzFmN2NiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZXNvdXJjZUluTG9jYWxKYXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZXNvdXJjZUluTG9jYWxKYXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1zZXJ2bGV0LWNvbnRleHQtZ2V0LXJlc291cmNlLWluLWxvY2FsLWphciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVzb3VyY2VJbkxvY2FsSmFyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlc291cmNlSW5Mb2NhbEphci9idWlsZC54bWwKaW5kZXggZThhMDY3ZC4uYWU4OTA3MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVzb3VyY2VJbkxvY2FsSmFyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZXNvdXJjZUluTG9jYWxKYXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMSArNDIsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTY4LDEwICs2OCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlc291cmNlUGF0aHNGcm9tTG9jYWxKYXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVzb3VyY2VQYXRoc0Zyb21Mb2NhbEphci9XZWJUZXN0LmphdmEKaW5kZXggMGY5MjYwZS4uMWVmNmE3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVzb3VyY2VQYXRoc0Zyb21Mb2NhbEphci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVzb3VyY2VQYXRoc0Zyb21Mb2NhbEphci9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgU2VydmxldENvbnRleHQjZ2V0UmVzb3VyY2VQYXRocyIpOwogICAgICAgICBuZXcgV2ViVGVzdChhcmdzKS5kb1Rlc3QoKTsKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlU2VydmxldCgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlc291cmNlUGF0aHNGcm9tTG9jYWxKYXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlc291cmNlUGF0aHNGcm9tTG9jYWxKYXIvYnVpbGQucHJvcGVydGllcwppbmRleCBhMzkxZTg2Li5iNmUxM2JiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZXNvdXJjZVBhdGhzRnJvbUxvY2FsSmFyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVzb3VyY2VQYXRoc0Zyb21Mb2NhbEphci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlcnZsZXQtY29udGV4dC1nZXQtcmVzb3VyY2UtcGF0aHMtZnJvbS1sb2NhbC1qYXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlc291cmNlUGF0aHNGcm9tTG9jYWxKYXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVzb3VyY2VQYXRoc0Zyb21Mb2NhbEphci9idWlsZC54bWwKaW5kZXggZThhMDY3ZC4uYWU4OTA3MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVzb3VyY2VQYXRoc0Zyb21Mb2NhbEphci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVzb3VyY2VQYXRoc0Zyb21Mb2NhbEphci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIxICs0MiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNjgsMTAgKzY4LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVzb3VyY2VQYXRoc0Zyb21Mb2NhbEphci9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZXNvdXJjZVBhdGhzRnJvbUxvY2FsSmFyL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQppbmRleCA5YWYxMDFiLi40MWViMTA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZXNvdXJjZVBhdGhzRnJvbUxvY2FsSmFyL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZXNvdXJjZVBhdGhzRnJvbUxvY2FsSmFyL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogICAgICAgICBpZiAocmVzUGF0aHMgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIk5vIHJlc291cmNlIHBhdGhzIik7CiAgICAgICAgIH0KLSAgIAorCiAgICAgICAgIGlmICghcmVzUGF0aHMuY29udGFpbnMoQ0FUQUxPR19PRkZFUlMpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihDQVRBTE9HX09GRkVSUyArCiAgICAgICAgICAgICAgICAgIiBtaXNzaW5nIGZyb20gcmVzb3VyY2UgcGF0aHMiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dFNldEluaXRQYXJhbWV0ZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0U2V0SW5pdFBhcmFtZXRlci9XZWJUZXN0LmphdmEKaW5kZXggMjUyMDZjNy4uZGY3Njc5MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0U2V0SW5pdFBhcmFtZXRlci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0U2V0SW5pdFBhcmFtZXRlci9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBTZXJ2bGV0Q29udGV4dCNzZXRJbml0UGFyYW1ldGVyIik7CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dFNldEluaXRQYXJhbWV0ZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dFNldEluaXRQYXJhbWV0ZXIvYnVpbGQucHJvcGVydGllcwppbmRleCA3NjIzNWQ0Li5iYTA4NjMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRTZXRJbml0UGFyYW1ldGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0U2V0SW5pdFBhcmFtZXRlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlcnZsZXQtY29udGV4dC1zZXQtaW5pdC1wYXJhbWV0ZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dFNldEluaXRQYXJhbWV0ZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0U2V0SW5pdFBhcmFtZXRlci9idWlsZC54bWwKaW5kZXggZjFjMjJhYS4uZWVkMWRjZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0U2V0SW5pdFBhcmFtZXRlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0U2V0SW5pdFBhcmFtZXRlci9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIzICs0NCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcyLDEwICs3MiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dFNldEluaXRQYXJhbWV0ZXIvc2VydmxldC9NeUxpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRTZXRJbml0UGFyYW1ldGVyL3NlcnZsZXQvTXlMaXN0ZW5lci5qYXZhCmluZGV4IGRjMTFmMDMuLmJjNTE2YjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dFNldEluaXRQYXJhbWV0ZXIvc2VydmxldC9NeUxpc3RlbmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0U2V0SW5pdFBhcmFtZXRlci9zZXJ2bGV0L015TGlzdGVuZXIuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogICAgICAqIEBwYXJhbSBzY2UgVGhlIHNlcnZsZXQgY29udGV4dCBldmVudAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbnRleHRJbml0aWFsaXplZChTZXJ2bGV0Q29udGV4dEV2ZW50IHNjZSkgewotICAgICAgICBzY2UuZ2V0U2VydmxldENvbnRleHQoKS5zZXRJbml0UGFyYW1ldGVyKCJhYWEiLCAiYmJiIik7IAorICAgICAgICBzY2UuZ2V0U2VydmxldENvbnRleHQoKS5zZXRJbml0UGFyYW1ldGVyKCJhYWEiLCAiYmJiIik7CiAgICAgfQogCiAgICAgLyoqCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldE1hcHBpbmdFbXB0eVN0cmluZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldE1hcHBpbmdFbXB0eVN0cmluZy9XZWJUZXN0LmphdmEKaW5kZXggZWE1MWI3My4uMWYxMTNlMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRNYXBwaW5nRW1wdHlTdHJpbmcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0TWFwcGluZ0VtcHR5U3RyaW5nL1dlYlRlc3QuamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGVtcHR5IHN0cmluZyBVUkwgcGF0dGVybiIpOwpAQCAtNjEsNyArNjEsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyBwYXRoLCBTdHJpbmcgZXhwZWN0ZWRSZXNwb25zZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldE1hcHBpbmdFbXB0eVN0cmluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRNYXBwaW5nRW1wdHlTdHJpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCA0MzAyZDFkLi42M2M0NWJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldE1hcHBpbmdFbXB0eVN0cmluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0TWFwcGluZ0VtcHR5U3RyaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtc2VydmxldC1tYXBwaW5nLWVtcHR5LXN0cmluZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRNYXBwaW5nRW1wdHlTdHJpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRNYXBwaW5nRW1wdHlTdHJpbmcvYnVpbGQueG1sCmluZGV4IGYxYzIyYWEuLmVlZDFkY2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0TWFwcGluZ0VtcHR5U3RyaW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldE1hcHBpbmdFbXB0eVN0cmluZy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIzICs0NCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcyLDEwICs3MiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdERpc3BhdGNoZXJUeXBlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdERpc3BhdGNoZXJUeXBlL1dlYlRlc3QuamF2YQppbmRleCBjYTk2MDY4Li41N2I2MGY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3REaXNwYXRjaGVyVHlwZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0RGlzcGF0Y2hlclR5cGUvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIFNlcnZsZXRSZXF1ZXN0I2dldERpc3BhdGNoZXJUeXBlIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0RGlzcGF0Y2hlclR5cGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdERpc3BhdGNoZXJUeXBlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzQ3ZWQxOC4uZmRiOWM0ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0RGlzcGF0Y2hlclR5cGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3REaXNwYXRjaGVyVHlwZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlcnZsZXQtcmVxdWVzdC1kaXNwYXRjaGVyLXR5cGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdERpc3BhdGNoZXJUeXBlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdERpc3BhdGNoZXJUeXBlL2J1aWxkLnhtbAppbmRleCBmNTQ4NzFkLi4xMGEwODhlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3REaXNwYXRjaGVyVHlwZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0RGlzcGF0Y2hlclR5cGUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCwxMCArNzAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3RMaXN0ZW5lckludm9jYXRpb25PcmRlci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3RMaXN0ZW5lckludm9jYXRpb25PcmRlci9XZWJUZXN0LmphdmEKaW5kZXggYWVlYTEwNS4uMDRiZTI2NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0TGlzdGVuZXJJbnZvY2F0aW9uT3JkZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdExpc3RlbmVySW52b2NhdGlvbk9yZGVyL1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MDU3Mzg1Iik7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdExpc3RlbmVySW52b2NhdGlvbk9yZGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3RMaXN0ZW5lckludm9jYXRpb25PcmRlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQ0MGU1Y2YuLjdhOGFmZGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdExpc3RlbmVySW52b2NhdGlvbk9yZGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0TGlzdGVuZXJJbnZvY2F0aW9uT3JkZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1zZXJ2bGV0LXJlcXVlc3QtbGlzdGVuZXItaW52b2NhdGlvbi1vcmRlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0TGlzdGVuZXJJbnZvY2F0aW9uT3JkZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0TGlzdGVuZXJJbnZvY2F0aW9uT3JkZXIvYnVpbGQueG1sCmluZGV4IGRiZjgwMDIuLmYxYTY1NzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdExpc3RlbmVySW52b2NhdGlvbk9yZGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3RMaXN0ZW5lckludm9jYXRpb25PcmRlci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE3ICs0MiwxNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0TGlzdGVuZXJJbnZvY2F0aW9uT3JkZXIvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0TGlzdGVuZXJJbnZvY2F0aW9uT3JkZXIvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGY3NjM2MzEuLjdlOGZmMTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdExpc3RlbmVySW52b2NhdGlvbk9yZGVyL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3RMaXN0ZW5lckludm9jYXRpb25PcmRlci9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz5UZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3RSZXNwb25zZVdyYXBwZXJJc1dyYXBwZXJGb3IvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0UmVzcG9uc2VXcmFwcGVySXNXcmFwcGVyRm9yL1dlYlRlc3QuamF2YQppbmRleCA1MmYxMmNhLi4zN2YyNGFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3RSZXNwb25zZVdyYXBwZXJJc1dyYXBwZXJGb3IvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdFJlc3BvbnNlV3JhcHBlcklzV3JhcHBlckZvci9XZWJUZXN0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBTZXJ2bGV0W1JlcXVlc3R8UmVzcG9uc2VdV3JhcHBlciNpc1dyYXBwZXJGb3IiKTsKQEAgLTUzLDExICs1MywxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3RSZXNwb25zZVdyYXBwZXJJc1dyYXBwZXJGb3IvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdFJlc3BvbnNlV3JhcHBlcklzV3JhcHBlckZvci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGM1NDQ1MjIuLjQzMTA2NmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdFJlc3BvbnNlV3JhcHBlcklzV3JhcHBlckZvci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdFJlc3BvbnNlV3JhcHBlcklzV3JhcHBlckZvci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlcnZsZXQtcmVxdWVzdC1yZXNwb25zZS13cmFwcGVyLWlzLXdyYXBwZXItZm9yIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3RSZXNwb25zZVdyYXBwZXJJc1dyYXBwZXJGb3IvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0UmVzcG9uc2VXcmFwcGVySXNXcmFwcGVyRm9yL2J1aWxkLnhtbAppbmRleCBmNTQ4NzFkLi4xMGEwODhlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3RSZXNwb25zZVdyYXBwZXJJc1dyYXBwZXJGb3IvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdFJlc3BvbnNlV3JhcHBlcklzV3JhcHBlckZvci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDEwICs3MCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdFJlc3BvbnNlV3JhcHBlcklzV3JhcHBlckZvci9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdFJlc3BvbnNlV3JhcHBlcklzV3JhcHBlckZvci9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQppbmRleCA2YjhlZGY0Li44YjEwMjY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3RSZXNwb25zZVdyYXBwZXJJc1dyYXBwZXJGb3Ivc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0UmVzcG9uc2VXcmFwcGVySXNXcmFwcGVyRm9yL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgICAgIFNlcnZsZXRSZXF1ZXN0V3JhcHBlciByZXFXcmFwcGVyMSA9IG5ldyBTdWJGaXJzdExldmVsUmVxdWVzdFdyYXBwZXIocmVxKTsKICAgICAgICAgU2VydmxldFJlcXVlc3RXcmFwcGVyIHJlcVdyYXBwZXIyID0gbmV3IFNlY29uZExldmVsUmVxdWVzdFdyYXBwZXIocmVxV3JhcHBlcjEpOwogICAgICAgICBTZXJ2bGV0UmVxdWVzdFdyYXBwZXIgcmVxV3JhcHBlcjMgPSBuZXcgVGhpcmRMZXZlbFJlcXVlc3RXcmFwcGVyKHJlcVdyYXBwZXIyKTsKLSAgICAgICAKKwogICAgICAgICBpZiAoIXJlcVdyYXBwZXIzLmlzV3JhcHBlckZvcihyZXFXcmFwcGVyMSkgfHwKICAgICAgICAgICAgICAgICAhcmVxV3JhcHBlcjMuaXNXcmFwcGVyRm9yKEZpcnN0TGV2ZWxSZXF1ZXN0V3JhcHBlci5jbGFzcykpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJVbmV4cGVjdGVkIHJlc3VsdCIpOwpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBTZXJ2bGV0UmVzcG9uc2VXcmFwcGVyIHJlc1dyYXBwZXIxID0gbmV3IFN1YkZpcnN0TGV2ZWxSZXNwb25zZVdyYXBwZXIocmVzKTsKICAgICAgICAgU2VydmxldFJlc3BvbnNlV3JhcHBlciByZXNXcmFwcGVyMiA9IG5ldyBTZWNvbmRMZXZlbFJlc3BvbnNlV3JhcHBlcihyZXNXcmFwcGVyMSk7CiAgICAgICAgIFNlcnZsZXRSZXNwb25zZVdyYXBwZXIgcmVzV3JhcHBlcjMgPSBuZXcgVGhpcmRMZXZlbFJlc3BvbnNlV3JhcHBlcihyZXNXcmFwcGVyMik7Ci0gICAgICAgCisKICAgICAgICAgaWYgKCFyZXNXcmFwcGVyMy5pc1dyYXBwZXJGb3IocmVzV3JhcHBlcjEpIHx8CiAgICAgICAgICAgICAgICAgIXJlc1dyYXBwZXIzLmlzV3JhcHBlckZvcihGaXJzdExldmVsUmVzcG9uc2VXcmFwcGVyLmNsYXNzKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIlVuZXhwZWN0ZWQgcmVzdWx0Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZy9XZWJUZXN0LmphdmEKaW5kZXggYWFjNzA1Mi4uYjA0ZDM3MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnL1dlYlRlc3QuamF2YQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogLyoKLSAqIFRoaXMgdW5pdCB0ZXN0IGV4cGVjdHMgdGhlIGZvbGxvd2luZyBTZXQtQ29va2llIHJlc3BvbnNlIGhlYWRlciwgYmFzZWQgb24gCisgKiBUaGlzIHVuaXQgdGVzdCBleHBlY3RzIHRoZSBmb2xsb3dpbmcgU2V0LUNvb2tpZSByZXNwb25zZSBoZWFkZXIsIGJhc2VkIG9uCiAgKiB0aGUgY29va2llLXByb3BlcnRpZXMgc3BlY2lmaWVkIHVzaW5nIFNlcnZsZXRDb250ZXh0LnNldFNlc3Npb25Db29raWVDb25maWcKICAqCiAgKiAgIFNldC1Db29raWU6IEpTRVNTSU9OSUQ9Wy4uLl07IERvbWFpbj0uaXBsYW5ldC5jb207IFBhdGg9LwpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBTZXJ2bGV0Q29udGV4dCBTZXNzaW9uQ29va2llQ29uZmlnIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgZmFpbCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQotCSAgICB9IGVsc2UgeworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTWlzc2luZyBjb29raWUgZG9tYWluIik7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgIGZhaWwgPSB0cnVlOwpAQCAtMTE1LDcgKzExNSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgZmFpbCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQotCSAgICB9IGVsc2UgeworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTWlzc2luZyBjb29raWUgcGF0aCIpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICBmYWlsID0gdHJ1ZTsKQEAgLTEzMCw3ICsxMzAsNyBAQAogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIGZhaWwgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KLQkgICAgfSBlbHNlIHsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk1pc3NpbmcgY29va2llIGNvbW1lbnQiKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgZmFpbCA9IHRydWU7CkBAIC0xNTcsNyArMTU3LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwcml2YXRlIFN0cmluZyBnZXRDb29raWVGaWVsZChTdHJpbmcgY29va2llLCBTdHJpbmcgZmllbGQpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGE3M2Y5MzIuLmU4YjcxNTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlc3Npb24tY29va2llLWNvbmZpZyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtc2Vzc2lvbi1jb29raWUtY29uZmlnIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnL2J1aWxkLnhtbAppbmRleCBmNTQ4NzFkLi4xMGEwODhlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWcvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCwxMCArNzAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZy9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZy9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggZDg2OGZhMS4uZWEwZGUxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWcvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7CiAKIHB1YmxpYyBjbGFzcyBUZXN0U2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWdEZWNsYXJhdGl2ZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL1dlYlRlc3QuamF2YQppbmRleCA1OGQxMThkLi4xNTQ4ZWJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL1dlYlRlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGN1c3RvbWl6aW5nIGNvbXBsZXRlIGxpc3Qgb2YgIiArCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnRGVjbGFyYXRpdmUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnRGVjbGFyYXRpdmUvYnVpbGQucHJvcGVydGllcwppbmRleCA5NTZkZWMzLi41ZjU4MTAwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWdEZWNsYXJhdGl2ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlc3Npb24tY29va2llLWNvbmZpZy1kZWNsYXJhdGl2ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWdEZWNsYXJhdGl2ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL2J1aWxkLnhtbAppbmRleCBkYmM1ODVkLi43NGQ0YjE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTUgKzQ0LDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CkBAIC03Miw3ICs3Miw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEKaW5kZXggNjdiNGYwYy4uYTBmZTY5YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWdEZWNsYXJhdGl2ZS9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnRGVjbGFyYXRpdmUvc2VydmxldC90ZXN0L0NyZWF0ZVNlc3Npb24uamF2YQpAQCAtNDAsMzIgKzQwLDMyIEBACiAgICAgICAgIC8vIGNvbW1lbnQKICAgICAgICAgaWYgKHNlc3Npb25Db29raWUuaW5kZXhPZigiQ29tbWVudD1teUNvbW1lbnQiKSA9PSAtMSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIk1pc3NpbmcgY29va2llIGNvbW1lbnQiKTsKLSAgICAgICAgfSAgICAgIAorICAgICAgICB9CiAKICAgICAgICAgLy8gZG9tYWluCiAgICAgICAgIGlmIChzZXNzaW9uQ29va2llLmluZGV4T2YoIkRvbWFpbj1teWRvbWFpbiIpID09IC0xKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbigiTWlzc2luZyBjb29raWUgZG9tYWluIik7Ci0gICAgICAgIH0gICAgICAKKyAgICAgICAgfQogCiAgICAgICAgIC8vIHBhdGgKICAgICAgICAgaWYgKHNlc3Npb25Db29raWUuaW5kZXhPZigiUGF0aD0vbXlQYXRoIikgPT0gLTEpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJNaXNzaW5nIGNvb2tpZSBwYXRoIik7Ci0gICAgICAgIH0gICAgICAKKyAgICAgICAgfQogCiAgICAgICAgIC8vIHNlY3VyZQogICAgICAgICBpZiAoc2Vzc2lvbkNvb2tpZS5pbmRleE9mKCJTZWN1cmUiKSA9PSAtMSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIk1pc3NpbmcgU2VjdXJlIGF0dHJpYnV0ZSIpOwotICAgICAgICB9ICAgICAgCisgICAgICAgIH0KIAogICAgICAgICAvLyBodHRwLW9ubHkKICAgICAgICAgaWYgKHNlc3Npb25Db29raWUuaW5kZXhPZigiSHR0cE9ubHkiKSA9PSAtMSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIk1pc3NpbmcgSHR0cE9ubHkgYXR0cmlidXRlIik7Ci0gICAgICAgIH0gICAgICAKKyAgICAgICAgfQogCiAgICAgICAgIC8vIG1heC1hZ2UKICAgICAgICAgaWYgKHNlc3Npb25Db29raWUuaW5kZXhPZigiTWF4LUFnZT0xMjMiKSA9PSAtMSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIk1pc3NpbmcgbWF4LWFnZSIpOwotICAgICAgICB9ICAgICAgCisgICAgICAgIH0KIAogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnUHJvZ3JhbW1hdGljL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnUHJvZ3JhbW1hdGljL1dlYlRlc3QuamF2YQppbmRleCBjNzBjZTJkLi43N2M4ZWQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZ1Byb2dyYW1tYXRpYy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWdQcm9ncmFtbWF0aWMvV2ViVGVzdC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgY3VzdG9taXppbmcgY29tcGxldGUgbGlzdCBvZiAiICsKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHRocm93cyBFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWdQcm9ncmFtbWF0aWMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnUHJvZ3JhbW1hdGljL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZmQ3YzRiMS4uZGRiZTAxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWdQcm9ncmFtbWF0aWMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZ1Byb2dyYW1tYXRpYy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlc3Npb24tY29va2llLWNvbmZpZy1wcm9ncmFtbWF0aWMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnUHJvZ3JhbW1hdGljL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnUHJvZ3JhbW1hdGljL2J1aWxkLnhtbAppbmRleCBkYmM1ODVkLi43NGQ0YjE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZ1Byb2dyYW1tYXRpYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWdQcm9ncmFtbWF0aWMvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxNSArNDQsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KQEAgLTcyLDcgKzcyLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnUHJvZ3JhbW1hdGljL3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZ1Byb2dyYW1tYXRpYy9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhCmluZGV4IGRlNTFlMzUuLjgxZDVkNjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnUHJvZ3JhbW1hdGljL3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWdQcm9ncmFtbWF0aWMvc2VydmxldC90ZXN0L0NyZWF0ZVNlc3Npb24uamF2YQpAQCAtNDAsMzEgKzQwLDMxIEBACiAgICAgICAgIC8vIGNvbW1lbnQKICAgICAgICAgaWYgKHNlc3Npb25Db29raWUuaW5kZXhPZigiQ29tbWVudD1teUNvbW1lbnQiKSA9PSAtMSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIk1pc3NpbmcgY29va2llIGNvbW1lbnQiKTsKLSAgICAgICAgfSAgICAgIAorICAgICAgICB9CiAKICAgICAgICAgLy8gZG9tYWluCiAgICAgICAgIGlmIChzZXNzaW9uQ29va2llLmluZGV4T2YoIkRvbWFpbj1teWRvbWFpbiIpID09IC0xKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbigiTWlzc2luZyBjb29raWUgZG9tYWluIik7Ci0gICAgICAgIH0gICAgICAKKyAgICAgICAgfQogCiAgICAgICAgIC8vIHBhdGgKICAgICAgICAgaWYgKHNlc3Npb25Db29raWUuaW5kZXhPZigiUGF0aD0vbXlQYXRoIikgPT0gLTEpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJNaXNzaW5nIGNvb2tpZSBwYXRoIik7Ci0gICAgICAgIH0gICAgICAKKyAgICAgICAgfQogCiAgICAgICAgIC8vIHNlY3VyZQogICAgICAgICBpZiAoc2Vzc2lvbkNvb2tpZS5pbmRleE9mKCJTZWN1cmUiKSA9PSAtMSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIk1pc3NpbmcgU2VjdXJlIGF0dHJpYnV0ZSIpOwotICAgICAgICB9ICAgICAgCisgICAgICAgIH0KIAogICAgICAgICAvLyBodHRwLW9ubHkKICAgICAgICAgaWYgKHNlc3Npb25Db29raWUuaW5kZXhPZigiSHR0cE9ubHkiKSA9PSAtMSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIk1pc3NpbmcgSHR0cE9ubHkgYXR0cmlidXRlIik7Ci0gICAgICAgIH0gICAgICAKKyAgICAgICAgfQogCiAgICAgICAgIC8vIG1heC1hZ2UKICAgICAgICAgaWYgKHNlc3Npb25Db29raWUuaW5kZXhPZigiTWF4LUFnZT0xMjMiKSA9PSAtMSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIk1pc3NpbmcgbWF4LWFnZSIpOwotICAgICAgICB9ICAgICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVQcm9ncmFtbWF0aWMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lUHJvZ3JhbW1hdGljL1dlYlRlc3QuamF2YQppbmRleCA5NDc4OTdlLi4xMTVhZGRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVQcm9ncmFtbWF0aWMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVByb2dyYW1tYXRpYy9XZWJUZXN0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBjdXN0b21pemluZyBuYW1lIG9mIHNlc3Npb24gIiArCkBAIC01OCw3ICs1OCw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGZpcnN0UnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC03Niw3ICs3Niw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCJcclxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIC8vIEdldCB0aGUgTVlKU0VTU0lPTklEIGZyb20gdGhlIHJlc3BvbnNlCiAgICAgICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY29va2llKTsKICAgICAgICAgICAgIG9zLndyaXRlKGNvb2tpZS5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCJcclxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVByb2dyYW1tYXRpYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lUHJvZ3JhbW1hdGljL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjdkZDY0MS4uMzcwYzUzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lUHJvZ3JhbW1hdGljL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lUHJvZ3JhbW1hdGljL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtc2Vzc2lvbi1jb29raWUtY3VzdG9tLW5hbWUtcHJvZ3JhbW1hdGljIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVQcm9ncmFtbWF0aWMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lUHJvZ3JhbW1hdGljL2J1aWxkLnhtbAppbmRleCBkYmM1ODVkLi43NGQ0YjE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVQcm9ncmFtbWF0aWMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVByb2dyYW1tYXRpYy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE1ICs0NCwxNSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgpAQCAtNzIsNyArNzIsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lUHJvZ3JhbW1hdGljL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVByb2dyYW1tYXRpYy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNzNhZjdmOC4uOWZhNmFhZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lUHJvZ3JhbW1hdGljL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVQcm9ncmFtbWF0aWMvZGVzY3JpcHRvci93ZWIueG1sCkBAIC00Niw1ICs0Niw1IEBACiAgICAgPHNlcnZsZXQtbmFtZT5SZXN1bWVTZXNzaW9uPC9zZXJ2bGV0LW5hbWU+CiAgICAgPHVybC1wYXR0ZXJuPi9SZXN1bWVTZXNzaW9uPC91cmwtcGF0dGVybj4KICAgPC9zZXJ2bGV0LW1hcHBpbmc+Ci0gICAgCisKIDwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVByb2dyYW1tYXRpYy9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lUHJvZ3JhbW1hdGljL3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEKaW5kZXggODk3OTU3ZS4uY2RkODdjOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lUHJvZ3JhbW1hdGljL3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lUHJvZ3JhbW1hdGljL3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEKQEAgLTMwLDggKzMwLDggQEAKICAgICAgICAgSHR0cFNlc3Npb24gc2Vzc2lvbiA9IHJlcS5nZXRTZXNzaW9uKHRydWUpOwogCiAgICAgICAgIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgbWFwLnB1dCgibmFtZTEiLCAidmFsdWUxIik7ICAgCi0gICAgICAgIG1hcC5wdXQoIm5hbWUyIiwgInZhbHVlMiIpOyAgIAorICAgICAgICBtYXAucHV0KCJuYW1lMSIsICJ2YWx1ZTEiKTsKKyAgICAgICAgbWFwLnB1dCgibmFtZTIiLCAidmFsdWUyIik7CiAgICAgICAgIHNlc3Npb24uc2V0QXR0cmlidXRlKCJtYXAiLCBtYXApOwogCiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVN1bldlYlhtbC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVTdW5XZWJYbWwvV2ViVGVzdC5qYXZhCmluZGV4IDI0NjM5MDEuLmI0Y2YyZjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVN1bldlYlhtbC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lU3VuV2ViWG1sL1dlYlRlc3QuamF2YQpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGN1c3RvbWl6aW5nIG5hbWUgb2Ygc2Vzc2lvbiAiICsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZmlyc3RSdW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTgwLDcgKzgwLDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXQpOwogICAgICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxyXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICAgICAgLy8gR2V0IHRoZSBNWUpTRVNTSU9OSUQgZnJvbSB0aGUgcmVzcG9uc2UKICAgICAgICAgICAgIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CkBAIC0xNDksNyArMTQ5LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb29raWUpOwogICAgICAgICAgICAgb3Mud3JpdGUoY29va2llLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxyXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICAgICAgaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lU3VuV2ViWG1sL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVTdW5XZWJYbWwvYnVpbGQucHJvcGVydGllcwppbmRleCA5M2IyMzc1Li41NmZjODY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVTdW5XZWJYbWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVTdW5XZWJYbWwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1zZXNzaW9uLWNvb2tpZS1jdXN0b20tbmFtZS1zdW4td2ViLXhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lU3VuV2ViWG1sL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVN1bldlYlhtbC9idWlsZC54bWwKaW5kZXggZGJjNTg1ZC4uNzRkNGIxNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lU3VuV2ViWG1sL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVTdW5XZWJYbWwvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxNSArNDQsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KQEAgLTcyLDcgKzcyLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVN1bldlYlhtbC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVTdW5XZWJYbWwvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDZmMTFhNGEuLjg5ZTdhNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVN1bldlYlhtbC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lU3VuV2ViWG1sL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtNDIsNSArNDIsNSBAQAogICAgIDxzZXJ2bGV0LW5hbWU+UmVzdW1lU2Vzc2lvbjwvc2VydmxldC1uYW1lPgogICAgIDx1cmwtcGF0dGVybj4vUmVzdW1lU2Vzc2lvbjwvdXJsLXBhdHRlcm4+CiAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgIAorCiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVTdW5XZWJYbWwvc2VydmxldC90ZXN0L0NyZWF0ZVNlc3Npb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVN1bldlYlhtbC9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhCmluZGV4IDg5Nzk1N2UuLmNkZDg3YzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVN1bldlYlhtbC9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVN1bldlYlhtbC9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhCkBAIC0zMCw4ICszMCw4IEBACiAgICAgICAgIEh0dHBTZXNzaW9uIHNlc3Npb24gPSByZXEuZ2V0U2Vzc2lvbih0cnVlKTsKIAogICAgICAgICBIYXNoTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgIG1hcC5wdXQoIm5hbWUxIiwgInZhbHVlMSIpOyAgIAotICAgICAgICBtYXAucHV0KCJuYW1lMiIsICJ2YWx1ZTIiKTsgICAKKyAgICAgICAgbWFwLnB1dCgibmFtZTEiLCAidmFsdWUxIik7CisgICAgICAgIG1hcC5wdXQoIm5hbWUyIiwgInZhbHVlMiIpOwogICAgICAgICBzZXNzaW9uLnNldEF0dHJpYnV0ZSgibWFwIiwgbWFwKTsKIAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVXZWJYbWxTdW5XZWJYbWxQcmVjZWRlbmNlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVdlYlhtbFN1bldlYlhtbFByZWNlZGVuY2UvV2ViVGVzdC5qYXZhCmluZGV4IDEyZDE3ZGEuLmM5MTgyNjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVdlYlhtbFN1bldlYlhtbFByZWNlZGVuY2UvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVdlYlhtbFN1bldlYlhtbFByZWNlZGVuY2UvV2ViVGVzdC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgY3VzdG9taXppbmcgbmFtZSBvZiBzZXNzaW9uICIgKwpAQCAtNTgsNyArNTgsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBmaXJzdFJ1bigpIHRocm93cyBFeGNlcHRpb24gewpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXHJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICAvLyBHZXQgdGhlIE1ZSlNFU1NJT05JRCBmcm9tIHRoZSByZXNwb25zZQogICAgICAgICAgICAgaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKQEAgLTEyMSw3ICsxMjEsNyBAQAogICAgICAgICBpZiAobGluZSA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJNaXNzaW5nIFNldC1Db29raWUgcmVzcG9uc2UgaGVhZGVyIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKCFsaW5lLmNvbnRhaW5zKCJIdHRwT25seSIpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJNaXNzaW5nIEh0dHBPbmx5IGluIGNvb2tpZSBoZWFkZXIiKTsKICAgICAgICAgfQpAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY29va2llKTsKICAgICAgICAgICAgIG9zLndyaXRlKGNvb2tpZS5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCJcclxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVdlYlhtbFN1bldlYlhtbFByZWNlZGVuY2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVdlYlhtbFN1bldlYlhtbFByZWNlZGVuY2UvYnVpbGQucHJvcGVydGllcwppbmRleCA5M2IyMzc1Li41NmZjODY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVXZWJYbWxTdW5XZWJYbWxQcmVjZWRlbmNlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lV2ViWG1sU3VuV2ViWG1sUHJlY2VkZW5jZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlc3Npb24tY29va2llLWN1c3RvbS1uYW1lLXN1bi13ZWIteG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVXZWJYbWxTdW5XZWJYbWxQcmVjZWRlbmNlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVdlYlhtbFN1bldlYlhtbFByZWNlZGVuY2UvYnVpbGQueG1sCmluZGV4IGRiYzU4NWQuLjc0ZDRiMTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVdlYlhtbFN1bldlYlhtbFByZWNlZGVuY2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVdlYlhtbFN1bldlYlhtbFByZWNlZGVuY2UvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxNSArNDQsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KQEAgLTcyLDcgKzcyLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVdlYlhtbFN1bldlYlhtbFByZWNlZGVuY2UvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lV2ViWG1sU3VuV2ViWG1sUHJlY2VkZW5jZS9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZTQ4ODVkOS4uMTZkZDkwYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lV2ViWG1sU3VuV2ViWG1sUHJlY2VkZW5jZS9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lV2ViWG1sU3VuV2ViWG1sUHJlY2VkZW5jZS9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTM4LDcgKzM4LDcgQEAKICAgICA8c2VydmxldC1uYW1lPlJlc3VtZVNlc3Npb248L3NlcnZsZXQtbmFtZT4KICAgICA8dXJsLXBhdHRlcm4+L1Jlc3VtZVNlc3Npb248L3VybC1wYXR0ZXJuPgogICA8L3NlcnZsZXQtbWFwcGluZz4KLSAgICAKKwogICA8c2Vzc2lvbi1jb25maWc+CiAgICAgPGNvb2tpZS1jb25maWc+CiAgICAgICA8bmFtZT5BQkM8L25hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVXZWJYbWxTdW5XZWJYbWxQcmVjZWRlbmNlL3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVXZWJYbWxTdW5XZWJYbWxQcmVjZWRlbmNlL3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEKaW5kZXggODk3OTU3ZS4uY2RkODdjOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lV2ViWG1sU3VuV2ViWG1sUHJlY2VkZW5jZS9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVdlYlhtbFN1bldlYlhtbFByZWNlZGVuY2Uvc2VydmxldC90ZXN0L0NyZWF0ZVNlc3Npb24uamF2YQpAQCAtMzAsOCArMzAsOCBAQAogICAgICAgICBIdHRwU2Vzc2lvbiBzZXNzaW9uID0gcmVxLmdldFNlc3Npb24odHJ1ZSk7CiAKICAgICAgICAgSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICBtYXAucHV0KCJuYW1lMSIsICJ2YWx1ZTEiKTsgICAKLSAgICAgICAgbWFwLnB1dCgibmFtZTIiLCAidmFsdWUyIik7ICAgCisgICAgICAgIG1hcC5wdXQoIm5hbWUxIiwgInZhbHVlMSIpOworICAgICAgICBtYXAucHV0KCJuYW1lMiIsICJ2YWx1ZTIiKTsKICAgICAgICAgc2Vzc2lvbi5zZXRBdHRyaWJ1dGUoIm1hcCIsIG1hcCk7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZS9XZWJUZXN0LmphdmEKaW5kZXggMzE5NmM1NC4uZDljYWMyZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGUvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVUkwgcmV3cml0aW5nIHdpdGggc2Vzc2lvbiBpZCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlU2VydmxldCgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTYwLDE0ICs2MCwxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2VTZXJ2bGV0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvcmVkaXJlY3RGcm9tIiArICIgSFRUUC8xLjBcbiI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXQpOwogICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgaWYgKGNvb2tpZUxpbmUgIT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVW5leHBlY3RlZCBTZXQtQ29va2llIHJlc3BvbnNlIGhlYWRlciIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChyZWRpcmVjdExpbmUgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiTWlzc2luZyBMb2NhdGlvbiByZXNwb25zZSBoZWFkZXIiKTsKICAgICAgICAgfQpAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggM2VjMGZmNS4uZWE0YmYxNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtc2Vzc2lvbi1pZC11cmwtcmV3cml0ZS1zZXNzaW9uLXRyYWNraW5nLW1vZGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGUvYnVpbGQueG1sCmluZGV4IGY1NDg3MWQuLjEwYTA4OGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsMTAgKzcwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlQ3VzdG9tQ29va2llTmFtZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVDdXN0b21Db29raWVOYW1lL1dlYlRlc3QuamF2YQppbmRleCBjODU1M2E1Li43ZDA4ZTE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVDdXN0b21Db29raWVOYW1lL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVDdXN0b21Db29raWVOYW1lL1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVVJMIHJld3JpdGluZyB3aXRoIGN1c3RvbSBjb29raWUgbmFtZSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlU2VydmxldCgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTYwLDE0ICs2MCwxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2VTZXJ2bGV0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvcmVkaXJlY3RGcm9tIiArICIgSFRUUC8xLjBcbiI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXQpOwogICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgaWYgKGNvb2tpZUxpbmUgIT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVW5leHBlY3RlZCBTZXQtQ29va2llIHJlc3BvbnNlIGhlYWRlciIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChyZWRpcmVjdExpbmUgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiTWlzc2luZyBMb2NhdGlvbiByZXNwb25zZSBoZWFkZXIiKTsKICAgICAgICAgfQpAQCAtMTA4LDcgKzEwOCw3IEBACiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZUN1c3RvbUNvb2tpZU5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZUN1c3RvbUNvb2tpZU5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCAyOWI1NDg2Li4xODY3OTI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVDdXN0b21Db29raWVOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlQ3VzdG9tQ29va2llTmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlc3Npb24taWQtdXJsLXJld3JpdGUtc2Vzc2lvbi10cmFja2luZy1tb2RlLWN1c3RvbS1jb29raWUtbmFtZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlQ3VzdG9tQ29va2llTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVDdXN0b21Db29raWVOYW1lL2J1aWxkLnhtbAppbmRleCBmNTQ4NzFkLi4xMGEwODhlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVDdXN0b21Db29raWVOYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVDdXN0b21Db29raWVOYW1lL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsMTAgKzcwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlRGVjbGFyYXRpdmUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlRGVjbGFyYXRpdmUvV2ViVGVzdC5qYXZhCmluZGV4IDdmYTBkNmMuLmUyZDY4MTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZURlY2xhcmF0aXZlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVEZWNsYXJhdGl2ZS9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgVVJMIHNlc3Npb24gdHJhY2tpbmcgbW9kZSBjb25maWd1cmVkIHZpYSB3ZWIueG1sIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTAsNyArNTAsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VTZXJ2bGV0KCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNjAsMTQgKzYwLDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZVNlcnZsZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgIAorCiAgICAgICAgIFNvY2tldCBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi9yZWRpcmVjdEZyb20iICsgIiBIVFRQLzEuMFxuIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtODcsNyArODcsNyBAQAogICAgICAgICBpZiAoY29va2llTGluZSAhPSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJVbmV4cGVjdGVkIFNldC1Db29raWUgcmVzcG9uc2UgaGVhZGVyIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKHJlZGlyZWN0TGluZSA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJNaXNzaW5nIExvY2F0aW9uIHJlc3BvbnNlIGhlYWRlciIpOwogICAgICAgICB9CkBAIC0xMDQsNyArMTA0LDcgQEAKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlRGVjbGFyYXRpdmUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZURlY2xhcmF0aXZlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTM3Y2U4Zi4uNjRjMzQzZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlRGVjbGFyYXRpdmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVEZWNsYXJhdGl2ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlc3Npb24taWQtdXJsLXJld3JpdGUtc2Vzc2lvbi10cmFja2luZy1tb2RlLWRlY2xhcmF0aXZlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVEZWNsYXJhdGl2ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVEZWNsYXJhdGl2ZS9idWlsZC54bWwKaW5kZXggZjgyNmI1ZS4uMjA2N2Q4OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlRGVjbGFyYXRpdmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZURlY2xhcmF0aXZlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjIgKzQyLDIyIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTY5LDEwICs2OSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC90cmFuc3BvcnRQcm90ZWN0ZWRBbm5vdGF0aW9uL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC90cmFuc3BvcnRQcm90ZWN0ZWRBbm5vdGF0aW9uL1dlYlRlc3QuamF2YQppbmRleCAzYzBhZmIxLi41OTlmYWQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvdHJhbnNwb3J0UHJvdGVjdGVkQW5ub3RhdGlvbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3RyYW5zcG9ydFByb3RlY3RlZEFubm90YXRpb24vV2ViVGVzdC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9ICJzZXJ2bGV0LTMuMC10cmFuc3BvcnRQcm90ZWN0ZWRBbm5vdGF0aW9uIjsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHRocm93cyBFeGNlcHRpb257CiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKICAgICAgICAgU3RyaW5nIGh0dHBQb3J0ID0gYXJnc1sxXTsKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgbnVsbCwgdHJ1ZSwgIm1mcjpIZWxsbzpqYXZhZWU6ZmFsc2UiKTsKICAgICAgICAgICAgIG9rID0gb2sgJiYgdGVzdFVSTCgiR0VUIiwgImh0dHBzOi8vIiArIGhvc3QgKyAiOiIgKyBodHRwc1BvcnQgKyAiLyIgKyBjb250ZXh0Um9vdCArICIvbXl1cmwzIiwKICAgICAgICAgICAgICAgICAgICAgc3NmLCB0cnVlLCAiZzpIZWxsbzpqYXZhZWU6dHJ1ZSIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIG9rID0gb2sgJiYgdGVzdFVSTCgiVFJBQ0UiLCAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgaHR0cFBvcnQgKyAiLyIgKyBjb250ZXh0Um9vdCArICIvbXl1cmwzIiwKICAgICAgICAgICAgICAgICAgICAgbnVsbCwgdHJ1ZSwgInQ6SGVsbG86amF2YWVlOmZhbHNlIik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsICgob2spPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKQEAgLTk2LDcgKzk2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjb25uZWN0aW9uID0gY29ubjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwpAQCAtMTEzLDcgKzExMyw3IEBACiAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uewogCiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSAgY29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBjb2RlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiAyMDAiKTsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogMjAwIik7CiAgICAgICAgIHJldHVybiAoY29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKSA9PSAyMDApOwogICAgIH0KIApAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcigKICAgICAgICAgICAgICAgICBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoY29ubmVjdGlvbi5nZXRJbnB1dFN0cmVhbSgpKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSAiIjsKICAgICAgICAgICAgIHdoaWxlICgobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7CkBAIC0xMzgsNyArMTM4LDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYgKGluICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgaW4uY2xvc2UoKTsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2goSU9FeGNlcHRpb24gaW9lKSB7CiAgICAgICAgICAgICAgICAgLy8gaWdub3JlCiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvdHJhbnNwb3J0UHJvdGVjdGVkQW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3RyYW5zcG9ydFByb3RlY3RlZEFubm90YXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCBmZjFhOWZlLi4zNDg2OWIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvdHJhbnNwb3J0UHJvdGVjdGVkQW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC90cmFuc3BvcnRQcm90ZWN0ZWRBbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEyICsxNSwxMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC10cmFuc3BvcnQtcHJvdGVjdGVkLWFubm90YXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3RyYW5zcG9ydC1wcm90ZWN0ZWQtYW5ub3RhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3RyYW5zcG9ydFByb3RlY3RlZEFubm90YXRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3RyYW5zcG9ydFByb3RlY3RlZEFubm90YXRpb24vYnVpbGQueG1sCmluZGV4IDg2Y2FmZDQuLmMxNjVjNzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC90cmFuc3BvcnRQcm90ZWN0ZWRBbm5vdGF0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvdHJhbnNwb3J0UHJvdGVjdGVkQW5ub3RhdGlvbi9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDEwICs0NCwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KQEAgLTcxLDEzICs3MSwxMyBAQAogICAgICAgICA8L2FudGNhbGw+CiAKICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24scHJlcGFyZS1rZXlzdG9yZS1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtOTEsMTAgKzkxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGaWx0ZXJBbm5vdGF0aW9uL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGaWx0ZXJBbm5vdGF0aW9uL1dlYlRlc3QuamF2YQppbmRleCBiMDg4MTcwLi5kMmUwODIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRmlsdGVyQW5ub3RhdGlvbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZpbHRlckFubm90YXRpb24vV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEBXZWJGaWx0ZXIiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dGVzdCI7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pCkBAIC05MywxMCArOTMsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGaWx0ZXJBbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRmlsdGVyQW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQwN2M4ODcuLjI2MzQwMzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGaWx0ZXJBbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZpbHRlckFubm90YXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC13ZWItZmlsdGVyLWFubm90YXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGaWx0ZXJBbm5vdGF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGaWx0ZXJBbm5vdGF0aW9uL2J1aWxkLnhtbAppbmRleCAzMmQzNmFmLi41NWEyYTFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRmlsdGVyQW5ub3RhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZpbHRlckFubm90YXRpb24vYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ3LDIzICs0NywyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc1LDEwICs3NSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGaWx0ZXJBbm5vdGF0aW9uL3NlcnZsZXQvVGVzdEZpbHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZpbHRlckFubm90YXRpb24vc2VydmxldC9UZXN0RmlsdGVyLmphdmEKaW5kZXggNjQyYzc1ZC4uMDQ1ZjEzMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZpbHRlckFubm90YXRpb24vc2VydmxldC9UZXN0RmlsdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZpbHRlckFubm90YXRpb24vc2VydmxldC9UZXN0RmlsdGVyLmphdmEKQEAgLTM0LDcgKzM0LDcgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gZmlsdGVyLmluaXQiKTsKICAgICAgICAgbWVzZyA9IGZpbHRlckNvbmZpZy5nZXRJbml0UGFyYW1ldGVyKCJtZXNnIik7Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywKICAgICAgICAgICAgIEZpbHRlckNoYWluIGNoYWluKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZpbHRlckFubm90YXRpb24vc2VydmxldC9UZXN0RmlsdGVyMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZpbHRlckFubm90YXRpb24vc2VydmxldC9UZXN0RmlsdGVyMi5qYXZhCmluZGV4IDQ1ZGMzYzIuLjIwNDI1OTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGaWx0ZXJBbm5vdGF0aW9uL3NlcnZsZXQvVGVzdEZpbHRlcjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRmlsdGVyQW5ub3RhdGlvbi9zZXJ2bGV0L1Rlc3RGaWx0ZXIyLmphdmEKQEAgLTM0LDcgKzM0LDcgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gZmlsdGVyMi5pbml0Iik7CiAgICAgICAgIG1lc2cgPSBmaWx0ZXJDb25maWcuZ2V0SW5pdFBhcmFtZXRlcigibWVzZyIpOwotICAgIH0gICAKKyAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXEsIFNlcnZsZXRSZXNwb25zZSByZXMsCiAgICAgICAgICAgICBGaWx0ZXJDaGFpbiBjaGFpbikgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnQvV2ViVGVzdC5qYXZhCmluZGV4IDMzNzRlNDEuLjQ2N2Y4MTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50L1dlYlRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciB3ZWIgZnJhZ21lbnQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoIWV4cGVjdGVkUmVzcG9uc2UuZXF1YWxzKGxpbmUpKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgIGV4cGVjdGVkUmVzcG9uc2UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgdGVzdFN0YXR1cyA9IGZhbHNlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk5YzNjNTkuLjI4NzZjMmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXdlYi1mcmFnbWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudC9idWlsZC54bWwKaW5kZXggNTkzZWFkZS4uYjNkNWI0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnQvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8ZGVsZXRlIGRpcj0ibGliIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNTgsMjMgKzU4LDIzIEBACiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2Z0ZXN0Ii8+CiAKLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi9UZXN0U2VydmxldC5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi9UZXN0U2VydmxldC5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04NiwxMCArODYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnQvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50L2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50LnhtbAppbmRleCAxZWJhMWM3Li43NDJlYmRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnQvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudC9kZXNjcmlwdG9yL3dlYi1mcmFnbWVudC54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItZnJhZ21lbnQgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItZnJhZ21lbnRfM18wLnhzZCIKLSAgICB2ZXJzaW9uPSIzLjAiPiAKKyAgICB2ZXJzaW9uPSIzLjAiPgogICA8ZGlzcGxheS1uYW1lPndmdGVzdDwvZGlzcGxheS1uYW1lPgogICA8ZGlzdHJpYnV0YWJsZT48L2Rpc3RyaWJ1dGFibGU+CiAgIDxzZXJ2bGV0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50L3NlcnZsZXQvV0ZUZXN0RmlsdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnQvc2VydmxldC9XRlRlc3RGaWx0ZXIuamF2YQppbmRleCA5YmQ2YzcyLi5iOGFhNDg4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnQvc2VydmxldC9XRlRlc3RGaWx0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnQvc2VydmxldC9XRlRlc3RGaWx0ZXIuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogcHVibGljIGNsYXNzIFdGVGVzdEZpbHRlciBpbXBsZW1lbnRzIEZpbHRlciB7CiAgICAgcHVibGljIHZvaWQgaW5pdChGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IGZpbHRlci5pbml0Iik7Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywKICAgICAgICAgICAgIEZpbHRlckNoYWluIGNoYWluKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aEVqYkxpdGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aEVqYkxpdGUvV2ViVGVzdC5qYXZhCmluZGV4IGY1Zjk3YTkuLjNlZjM2YjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhFamJMaXRlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoRWpiTGl0ZS9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3Igd2ViIGZyYWdtZW50IHdpdGggZWpiIGxpdGUiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC05OCw3ICs5OCw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFleHBlY3RlZFJlc3BvbnNlLmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICBleHBlY3RlZFJlc3BvbnNlICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIHRlc3RTdGF0dXMgPSBmYWxzZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aEVqYkxpdGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhFamJMaXRlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzIzODU5YS4uMDI1MzdjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aEVqYkxpdGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoRWpiTGl0ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXdlYi1mcmFnbWVudC13aXRoLWVqYi1saXRlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoRWpiTGl0ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoRWpiTGl0ZS9idWlsZC54bWwKaW5kZXggNTkzZWFkZS4uYjNkNWI0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aEVqYkxpdGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhFamJMaXRlL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPGRlbGV0ZSBkaXI9ImxpYiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTU4LDIzICs1OCwyMyBAQAogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dmdGVzdCIvPgogCi0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovVGVzdFNlcnZsZXQuY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovVGVzdFNlcnZsZXQuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODYsMTAgKzg2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aEZpbGVVcGxvYWQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aEZpbGVVcGxvYWQvV2ViVGVzdC5qYXZhCmluZGV4IGZmZDBlYjEuLjg2NjY5NzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhGaWxlVXBsb2FkL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoRmlsZVVwbG9hZC9XZWJUZXN0LmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC01NywyMyArNTcsMjMgQEAKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gbnVsbDsKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArIHVybFBhdHRlcm4gKyAiIEhUVFAvMS4wXHJcbiIgKyAiQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxyXG4iOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIHBvcnQpOwogICAgICAgICAgICAgb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxyXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgICAgICBpbnQgaSA9IDA7CiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CiAgICAgICAgICAgICBTdHJpbmcgdmlld0lkID0gbnVsbDsKICAgICAgICAgICAgIFN0cmluZyBzZXNzaW9uSWQgPSBudWxsOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vZ2V0IHNlc3Npb24gaWQgYW5kIEpTRiB2aWV3IGlkCiAgICAgICAgICAgICB3aGlsZSAoKGxpbmUgPSBici5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgaWYobGluZS5zdGFydHNXaXRoKCJTZXQtQ29va2llIikpIHsKQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIFdyaXRlIGhlYWRlciBmb3IgdGhlIHVwbG9hZGVkIHRleHQgZmlsZQogICAgICAgICAgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJhID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwogICAgICAgICAgICAgYmEud3JpdGUoIi0tQWFCMDN4XHJcbiIuZ2V0Qnl0ZXMoKSk7CkBAIC05NSwxNCArOTUsMTQgQEAKICAgICAgICAgICAgIGJhLndyaXRlKCItLUFhQjAzeFxyXG4iLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgYmEud3JpdGUoIkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT1cImZvcm06ZmlsZVwiOyBmaWxlbmFtZT1cInRlc3QudHh0XCJcclxuIi5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIGJhLndyaXRlKCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVxyXG5cclxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBXcml0ZSBjb250ZW50IG9mIHRoZSB1cGxvYWRlZCB0ZXh0IGZpbGUKICAgICAgICAgICAgIGlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbSAoZGlyICsgInRlc3QudHh0Iik7CiAgICAgICAgICAgICBpbnQgYzsKICAgICAgICAgICAgIHdoaWxlICgoYyA9IGlzLnJlYWQoKSkgIT0gLTEpIHsKICAgICAgICAgICAgICAgICBiYS53cml0ZShjKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBiYS53cml0ZSgiXHJcbi0tQWFCMDN4XHJcbiIuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBiYS53cml0ZSgiQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPVwiZm9ybTpqX2lkdDRcIlxyXG5cclxuIi5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIGJhLndyaXRlKCJ1cGxvYWRcclxuIi5nZXRCeXRlcygpKTsKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICAgICAgICAgYmEud3JpdGUoIi0tQWFCMDN4LS1cclxuIi5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIGJ5dGVbXSBkYXRhID0gYmEudG9CeXRlQXJyYXkoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihiYS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBDb21wb3NlIHRoZSBwb3N0IHJlcXVlc3QgaGVhZGVyCiAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHBvc3RIZWFkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwogICAgICAgICAgICAgcG9zdEhlYWRlci5hcHBlbmQoIlBPU1QgIiArIGNvbnRleHRSb290ICsgdXJsUGF0dGVybiArICIgSFRUUC8xLjFcclxuIik7CkBAIC0xMjUsMTcgKzEyNSwxNyBAQAogICAgICAgICAgICAgcG9zdEhlYWRlci5hcHBlbmQoIkNvbnRlbnQtTGVuZ3RoOiAiICsgZGF0YS5sZW5ndGggKyAiXHJcbiIpOwogICAgICAgICAgICAgcG9zdEhlYWRlci5hcHBlbmQoIkNvb2tpZTogSlNFU1NJT05JRD0iICsgc2Vzc2lvbklkICsgIlxyXG5cclxuIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocG9zdEhlYWRlcik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgb3Mud3JpdGUocG9zdEhlYWRlci50b1N0cmluZygpLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoZGF0YSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgd2hpbGUgKChsaW5lID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGlmIChsaW5lLmNvbnRhaW5zKEVYUEVDVEVEX1JFU1BPTlNFKSkgewogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKQEAgLTE2MywxMiArMTYzLDEyIEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmIChzb2NrICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpOyAKKyAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2goSU9FeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICAvLyBpZ25vcmUKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhGaWxlVXBsb2FkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoRmlsZVVwbG9hZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQ2YzFjNDEuLjU1YmU0NzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhGaWxlVXBsb2FkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aEZpbGVVcGxvYWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC13ZWItZnJhZ21lbnQtd2l0aC1maWxlLXVwbG9hZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aEZpbGVVcGxvYWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aEZpbGVVcGxvYWQvYnVpbGQueG1sCmluZGV4IDdkZjAzNmYuLmNmMmFiZWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhGaWxlVXBsb2FkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoRmlsZVVwbG9hZC9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxkZWxldGUgZGlyPSJsaWIiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01OSwyMyArNTksMjMgQEAKICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9maWxldXBsb2FkIi8+CiAKLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi9UZXN0U2VydmxldC5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi9UZXN0U2VydmxldC5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04NywxMCArODcsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoRmlsZVVwbG9hZC9kZXNjcmlwdG9yL3dlYi1mcmFnbWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoRmlsZVVwbG9hZC9kZXNjcmlwdG9yL3dlYi1mcmFnbWVudC54bWwKaW5kZXggN2Q4NzMzZC4uNWM2NTMxMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aEZpbGVVcGxvYWQvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhGaWxlVXBsb2FkL2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50LnhtbApAQCAtMTksMTkgKzE5LDE5IEBACiAKIDx3ZWItZnJhZ21lbnQgdmVyc2lvbj0iMy4wIiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8zXzAueHNkIj4KICA8ZGlzcGxheS1uYW1lPkZpbGUgdXBsb2FkIHRlc3Q8L2Rpc3BsYXktbmFtZT4KLQk8c2VydmxldD4KLQkJPHNlcnZsZXQtbmFtZT5GYWNlcyBTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmpha2FydGEuZmFjZXMud2ViYXBwLkZhY2VzU2VydmxldDwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4xPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgotIAk8IS0tIE1hcCB0aGVzZSBmaWxlcyB3aXRoIEpTRiAtLT4KLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkZhY2VzIFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi9mYWNlcy8qPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkZhY2VzIFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPioueGh0bWw8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgotIAorICAgIDxzZXJ2bGV0PgorICAgICAgICA8c2VydmxldC1uYW1lPkZhY2VzIFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+amFrYXJ0YS5mYWNlcy53ZWJhcHAuRmFjZXNTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjE8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CisgICAgIDwhLS0gTWFwIHRoZXNlIGZpbGVzIHdpdGggSlNGIC0tPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+RmFjZXMgU2VydmxldDwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L2ZhY2VzLyo8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+RmFjZXMgU2VydmxldDwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+Ki54aHRtbDwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CisKIDwvd2ViLWZyYWdtZW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aEZpbGVVcGxvYWQvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aEZpbGVVcGxvYWQvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGM0ZTJjZjMuLmYxMTc0NzcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhGaWxlVXBsb2FkL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoRmlsZVVwbG9hZC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIxLDExICsyMSwxMSBAQAogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSBodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18xLnhzZCIKICAgICAgICAgIHZlcnNpb249IjMuMSI+Ci0gICAgCisKICAgICA8d2VsY29tZS1maWxlLWxpc3Q+CiAgICAgICAgIDx3ZWxjb21lLWZpbGU+CiAgICAgICAgICAgICBzaW5nbGUueGh0bWwKICAgICAgICAgPC93ZWxjb21lLWZpbGU+Ci0gICAgICAgIAorCiAgICAgPC93ZWxjb21lLWZpbGUtbGlzdD4KIDwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhMb2dpbkNvbmZpZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWcvV2ViVGVzdC5qYXZhCmluZGV4IGM4YmQzNjguLjViNDhiYzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhMb2dpbkNvbmZpZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aExvZ2luQ29uZmlnL1dlYlRlc3QuamF2YQpAQCAtNTAsNyArNTAsNyBAQAogCiAgICAgICAgIGV4cGVjdGVkID0gInN1Y2Nlc3Mgd2l0aCAiICsgYWRtaW5Vc2VyOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHdlYi1mcmFnbWVudCB3aXRoIGxvZ2luLWNvbmZpZyIpOwpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KGdldCk7CiAgICAgICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXHJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC0xMzksNyArMTM5LDcgQEAKICAgICAgICAgICAgIFN0cmluZyBjb29raWUgPSAiQ29va2llOiAiICsganNlc3Npb25JZCArICJcbiI7CiAgICAgICAgICAgICBvcy53cml0ZShjb29raWUuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXHJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC0xODUsNyArMTg1LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzZW5kQ29va2llKTsKICAgICAgICAgICAgIG9zLndyaXRlKHNlbmRDb29raWUuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXHJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhMb2dpbkNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDlkZDBlYmQuLmY4ZmJkZmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhMb2dpbkNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhMb2dpbkNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXdlYi1mcmFnbWVudC13aXRoLWxvZ2luLWNvbmZpZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aExvZ2luQ29uZmlnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhMb2dpbkNvbmZpZy9idWlsZC54bWwKaW5kZXggMzM3NDExMi4uNWQ2ZGZkYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aExvZ2luQ29uZmlnL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWcvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8ZGVsZXRlIGRpcj0ibGliIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNzMsMjMgKzczLDIzIEBACiAgICAgICAgICAgICBleGNsdWRlcz0iKiovKi5qc3AiLz4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAKLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtMTAzLDEwICsxMDMsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXVzZXItY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhMb2dpbkNvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWcvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDQzMzQzYTEuLmE0Y2I1MjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhMb2dpbkNvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aExvZ2luQ29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjMsMTIgKzIzLDEyIEBACiAKICAgPHNlY3VyaXR5LWNvbnN0cmFpbnQ+CiAgICAgPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgotCTx3ZWItcmVzb3VyY2UtbmFtZT5Qcm90ZWN0ZWQgQXJlYTwvd2ViLXJlc291cmNlLW5hbWU+Ci0JPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KLQk8aHR0cC1tZXRob2Q+REVMRVRFPC9odHRwLW1ldGhvZD4KLQk8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KLQk8aHR0cC1tZXRob2Q+UE9TVDwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPlBVVDwvaHR0cC1tZXRob2Q+CisgICAgPHdlYi1yZXNvdXJjZS1uYW1lPlByb3RlY3RlZCBBcmVhPC93ZWItcmVzb3VyY2UtbmFtZT4KKyAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgorICAgIDxodHRwLW1ldGhvZD5ERUxFVEU8L2h0dHAtbWV0aG9kPgorICAgIDxodHRwLW1ldGhvZD5HRVQ8L2h0dHAtbWV0aG9kPgorICAgIDxodHRwLW1ldGhvZD5QT1NUPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+UFVUPC9odHRwLW1ldGhvZD4KICAgICA8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgogCiAgICAgPGF1dGgtY29uc3RyYWludD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhMb2dpbkNvbmZpZ092ZXJyaWRlZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWdPdmVycmlkZWQvV2ViVGVzdC5qYXZhCmluZGV4IDJkMjhkNzkuLjdlN2Q2NzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhMb2dpbkNvbmZpZ092ZXJyaWRlZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aExvZ2luQ29uZmlnT3ZlcnJpZGVkL1dlYlRlc3QuamF2YQpAQCAtNTAsNyArNTAsNyBAQAogCiAgICAgICAgIGV4cGVjdGVkID0gInN1Y2Nlc3Mgd2l0aCAiICsgYWRtaW5Vc2VyOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHdlYi1mcmFnbWVudCB3aXRoIGxvZ2luLWNvbmZpZyBvdmVycmlkZWQgYnkgd2ViLnhtbCIpOwpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KGdldCk7CiAgICAgICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXHJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC0xMzgsNyArMTM4LDcgQEAKICAgICAgICAgICAgIFN0cmluZyBjb29raWUgPSAiQ29va2llOiAiICsganNlc3Npb25JZCArICJcbiI7CiAgICAgICAgICAgICBvcy53cml0ZShjb29raWUuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXHJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC0xODQsNyArMTg0LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzZW5kQ29va2llKTsKICAgICAgICAgICAgIG9zLndyaXRlKHNlbmRDb29raWUuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXHJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWdPdmVycmlkZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhMb2dpbkNvbmZpZ092ZXJyaWRlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGRhMjUwYWMuLjVmMDY2ZDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhMb2dpbkNvbmZpZ092ZXJyaWRlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhMb2dpbkNvbmZpZ092ZXJyaWRlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXdlYi1mcmFnbWVudC13aXRoLWxvZ2luLWNvbmZpZy1vdmVycmlkZWQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhMb2dpbkNvbmZpZ092ZXJyaWRlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWdPdmVycmlkZWQvYnVpbGQueG1sCmluZGV4IDMzNzQxMTIuLjVkNmRmZGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhMb2dpbkNvbmZpZ092ZXJyaWRlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aExvZ2luQ29uZmlnT3ZlcnJpZGVkL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPGRlbGV0ZSBkaXI9ImxpYiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTczLDIzICs3MywyMyBAQAogICAgICAgICAgICAgZXhjbHVkZXM9IioqLyouanNwIi8+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogCi0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTEwMywxMCArMTAzLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWdPdmVycmlkZWQvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aExvZ2luQ29uZmlnT3ZlcnJpZGVkL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBmZTc1Y2I2Li41MmNjZWIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWdPdmVycmlkZWQvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhMb2dpbkNvbmZpZ092ZXJyaWRlZC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIzLDEyICsyMywxMiBAQAogCiAgIDxzZWN1cml0eS1jb25zdHJhaW50PgogICAgIDx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KLQk8d2ViLXJlc291cmNlLW5hbWU+UHJvdGVjdGVkIEFyZWE8L3dlYi1yZXNvdXJjZS1uYW1lPgotCTx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+Ci0JPGh0dHAtbWV0aG9kPkRFTEVURTwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPkdFVDwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPlBPU1Q8L2h0dHAtbWV0aG9kPgotCTxodHRwLW1ldGhvZD5QVVQ8L2h0dHAtbWV0aG9kPgorICAgIDx3ZWItcmVzb3VyY2UtbmFtZT5Qcm90ZWN0ZWQgQXJlYTwvd2ViLXJlc291cmNlLW5hbWU+CisgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KKyAgICA8aHR0cC1tZXRob2Q+REVMRVRFPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+UE9TVDwvaHR0cC1tZXRob2Q+CisgICAgPGh0dHAtbWV0aG9kPlBVVDwvaHR0cC1tZXRob2Q+CiAgICAgPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KIAogICAgIDxhdXRoLWNvbnN0cmFpbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViTGlzdGVuZXJBbm5vdGF0aW9uL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJMaXN0ZW5lckFubm90YXRpb24vV2ViVGVzdC5qYXZhCmluZGV4IGZjNGQzZGYuLjRhNTdhMzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJMaXN0ZW5lckFubm90YXRpb24vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJMaXN0ZW5lckFubm90YXRpb24vV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEBXZWJDb250ZXh0TGlzdGVuZXIiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dGVzdCI7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pCkBAIC05MywxMCArOTMsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJMaXN0ZW5lckFubm90YXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJMaXN0ZW5lckFubm90YXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCBhMjljNWNiLi5mNjExZGEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViTGlzdGVuZXJBbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkxpc3RlbmVyQW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXdlYi1saXN0ZW5lci1hbm5vdGF0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViTGlzdGVuZXJBbm5vdGF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJMaXN0ZW5lckFubm90YXRpb24vYnVpbGQueG1sCmluZGV4IDMyZDM2YWYuLjU1YTJhMWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJMaXN0ZW5lckFubm90YXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJMaXN0ZW5lckFubm90YXRpb24vYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ3LDIzICs0NywyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc1LDEwICs3NSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJMaXN0ZW5lckFubm90YXRpb24vc2VydmxldC9UZXN0U2VydmxldENvbnRleHRMaXN0ZW5lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkxpc3RlbmVyQW5ub3RhdGlvbi9zZXJ2bGV0L1Rlc3RTZXJ2bGV0Q29udGV4dExpc3RlbmVyLmphdmEKaW5kZXggNzgyMDVjZS4uYmU5ZDBkZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkxpc3RlbmVyQW5ub3RhdGlvbi9zZXJ2bGV0L1Rlc3RTZXJ2bGV0Q29udGV4dExpc3RlbmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkxpc3RlbmVyQW5ub3RhdGlvbi9zZXJ2bGV0L1Rlc3RTZXJ2bGV0Q29udGV4dExpc3RlbmVyLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gY29udGV4dEluaXRpYWxpemVkIik7CiAgICAgICAgIFNlcnZsZXRDb250ZXh0IGNvbnRleHQgPSBzY2UuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICAgICAgY29udGV4dC5zZXRBdHRyaWJ1dGUoIm15YXR0ciIsICJteXNlcnZsZXRjb250ZXh0bGlzdGVuZXIiKTsKLSAgICB9ICAgCisgICAgfQogCiAgICAgcHVibGljIHZvaWQgY29udGV4dERlc3Ryb3llZChTZXJ2bGV0Q29udGV4dEV2ZW50IHNjZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBjb250ZXh0RGVzdHJveWVkIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViU2VydmxldEFubm90YXRpb24vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYlNlcnZsZXRBbm5vdGF0aW9uL1dlYlRlc3QuamF2YQppbmRleCBlNmQ1NWI0Li43Y2M1OTcxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViU2VydmxldEFubm90YXRpb24vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJTZXJ2bGV0QW5ub3RhdGlvbi9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQFdlYlNlcnZsZXQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikKQEAgLTkzLDEwICs5MywxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYlNlcnZsZXRBbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViU2VydmxldEFubm90YXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCAzZGFlZWI1Li4xZTcwYzM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViU2VydmxldEFubm90YXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViU2VydmxldEFubm90YXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1zZXJ2bGV0LTMuMC13ZWItc2VydmxldC1hbm5vdGF0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViU2VydmxldEFubm90YXRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYlNlcnZsZXRBbm5vdGF0aW9uL2J1aWxkLnhtbAppbmRleCAzMmQzNmFmLi41NWEyYTFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViU2VydmxldEFubm90YXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJTZXJ2bGV0QW5ub3RhdGlvbi9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMjMgKzQ3LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uL1dlYlRlc3QuamF2YQppbmRleCBlYTU5MmZjLi44MTk1OGE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciB4bWwgb3ZlcnJpZGUgYW5ub3RhdGlvbiIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgYm9vbGVhbiBvayA9IGludm9rZSgiL215dGVzdDIiLCAyMDAsIEVYUEVDVEVEX1JFU1BPTlNFKTsKICAgICAgICAgICAgIG9rID0gb2sgJiYgaW52b2tlKCIvbXl0ZXN0IiwgNDA0LCBudWxsKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgKChvayk/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwpAQCAtNTksNyArNTksNyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIGludm9rZShTdHJpbmcgdXJsUGF0dGVybiwKICAgICAgICAgICAgIGludCBleHBlY3RlZENvZGUsIFN0cmluZyBleHBlY3RlZFJlc3BvbnNlKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgdXJsUGF0dGVybjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBY2Nlc3NpbmcgIiArIHVybCk7CkBAIC0xMDIsMTAgKzEwMiwxMCBAQAogICAgICAgICAgICAgaWYgKGV4cGVjdGVkUmVzcG9uc2UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRSZXNwb25zZSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI4Njg0YmEuLjlmMGE1NGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0teG1sLW92ZXJyaWRlLWFubm90YXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbi9idWlsZC54bWwKaW5kZXggMzJkMzZhZi4uNTVhMmExYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbi9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMjMgKzQ3LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbi9zZXJ2bGV0L1Rlc3RGaWx0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb24vc2VydmxldC9UZXN0RmlsdGVyLmphdmEKaW5kZXggY2NiNWJlMC4uZmE5NGQ1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbi9zZXJ2bGV0L1Rlc3RGaWx0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uL3NlcnZsZXQvVGVzdEZpbHRlci5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAgICAgcHVibGljIHZvaWQgaW5pdChGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IGZpbHRlci5pbml0Iik7CiAgICAgICAgIG1lc2cgPSBmaWx0ZXJDb25maWcuZ2V0SW5pdFBhcmFtZXRlcigibWVzZyIpOwotICAgIH0gICAKKyAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXEsIFNlcnZsZXRSZXNwb25zZSByZXMsCiAgICAgICAgICAgICBGaWx0ZXJDaGFpbiBjaGFpbikgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb24vc2VydmxldC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbi9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggNDZiMGEyOC4uMzNiNmFlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbi9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbi9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZyllbi5uZXh0RWxlbWVudCgpOwogICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gZ2V0SW5pdFBhcmFtZXRlcihuYW1lKTsKICAgICAgICAgICAgIG1zZyArPSBuYW1lICsgIj0iICsgdmFsdWUgKyAiLCAiOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgICAgIHdyaXRlci53cml0ZSgiLCBpbml0UGFyYW1zOiAiICsgbXNnICsgIlxuIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbldpdGhXZWJGcmFnbWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uV2l0aFdlYkZyYWdtZW50L1dlYlRlc3QuamF2YQppbmRleCA2OWVhNWZkLi5kNGI0NTkwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uV2l0aFdlYkZyYWdtZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uV2l0aFdlYkZyYWdtZW50L1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBJc3N1ZSA5ODE2Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDYsNyArNDYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBib29sZWFuIG9rID0gaW52b2tlKCIvbXl0ZXN0MiIsIDIwMCwgRVhQRUNURURfUkVTUE9OU0UpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCAoKG9rKT8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNTgsNyArNTgsNyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIGludm9rZShTdHJpbmcgdXJsUGF0dGVybiwKICAgICAgICAgICAgIGludCBleHBlY3RlZENvZGUsIFN0cmluZyBleHBlY3RlZFJlc3BvbnNlKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgdXJsUGF0dGVybjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBY2Nlc3NpbmcgIiArIHVybCk7CkBAIC0xMDEsMTAgKzEwMSwxMCBAQAogICAgICAgICAgICAgaWYgKGV4cGVjdGVkUmVzcG9uc2UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRSZXNwb25zZSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbldpdGhXZWJGcmFnbWVudC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbldpdGhXZWJGcmFnbWVudC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDMyNzFkMjUuLjhjNTU4MGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb25XaXRoV2ViRnJhZ21lbnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uV2l0aFdlYkZyYWdtZW50L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAteG1sLW92ZXJyaWRlLWFubm90YXRpb24td2l0aC13ZWItZnJhZ21lbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb25XaXRoV2ViRnJhZ21lbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbldpdGhXZWJGcmFnbWVudC9idWlsZC54bWwKaW5kZXggNTkzZWFkZS4uYjNkNWI0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbldpdGhXZWJGcmFnbWVudC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbldpdGhXZWJGcmFnbWVudC9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxkZWxldGUgZGlyPSJsaWIiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01OCwyMyArNTgsMjMgQEAKICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZnRlc3QiLz4KIAotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqL1Rlc3RTZXJ2bGV0LmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqL1Rlc3RTZXJ2bGV0LmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTg2LDEwICs4NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb25XaXRoV2ViRnJhZ21lbnQvc2VydmxldC9UZXN0RmlsdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uV2l0aFdlYkZyYWdtZW50L3NlcnZsZXQvVGVzdEZpbHRlci5qYXZhCmluZGV4IDkyOTlmYTcuLjc4Njc0ZGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb25XaXRoV2ViRnJhZ21lbnQvc2VydmxldC9UZXN0RmlsdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbldpdGhXZWJGcmFnbWVudC9zZXJ2bGV0L1Rlc3RGaWx0ZXIuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBmaWx0ZXIuaW5pdCIpOwogICAgICAgICBtZXNnID0gZmlsdGVyQ29uZmlnLmdldEluaXRQYXJhbWV0ZXIoIm1lc2ciKTsKLSAgICB9ICAgCisgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxLCBTZXJ2bGV0UmVzcG9uc2UgcmVzLAogICAgICAgICAgICAgRmlsdGVyQ2hhaW4gY2hhaW4pIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uV2l0aFdlYkZyYWdtZW50L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb25XaXRoV2ViRnJhZ21lbnQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDQ2YjBhMjguLjMzYjZhZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb25XaXRoV2ViRnJhZ21lbnQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb25XaXRoV2ViRnJhZ21lbnQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpZW4ubmV4dEVsZW1lbnQoKTsKICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IGdldEluaXRQYXJhbWV0ZXIobmFtZSk7CiAgICAgICAgICAgICBtc2cgKz0gbmFtZSArICI9IiArIHZhbHVlICsgIiwgIjsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgICAgICB3cml0ZXIud3JpdGUoIiwgaW5pdFBhcmFtczogIiArIG1zZyArICJcbiIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb25XaXRoV2ViRnJhZ21lbnQvc2VydmxldC9XRlRlc3RGaWx0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb25XaXRoV2ViRnJhZ21lbnQvc2VydmxldC9XRlRlc3RGaWx0ZXIuamF2YQppbmRleCBhNWQ2ODMzLi5jMDIyMjY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uV2l0aFdlYkZyYWdtZW50L3NlcnZsZXQvV0ZUZXN0RmlsdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbldpdGhXZWJGcmFnbWVudC9zZXJ2bGV0L1dGVGVzdEZpbHRlci5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiBwdWJsaWMgY2xhc3MgV0ZUZXN0RmlsdGVyIGltcGxlbWVudHMgRmlsdGVyIHsKICAgICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gZmlsdGVyLmluaXQiKTsKLSAgICB9ICAgCisgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxLCBTZXJ2bGV0UmVzcG9uc2UgcmVzLAogICAgICAgICAgICAgRmlsdGVyQ2hhaW4gY2hhaW4pIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBdXRoQW5ub3RhdGlvbnMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQXV0aEFubm90YXRpb25zL1dlYlRlc3QuamF2YQppbmRleCA1NGVkMTE0Li5kYjRlYzJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBdXRoQW5ub3RhdGlvbnMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUF1dGhBbm5vdGF0aW9ucy9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1sxXSk7CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IHRoYXQgd2ViLnhtbCBvdmVycmlkZXMgQFNlcnZsZXRTZWN1cml0eSIpOwpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC0xMDEsNyArMTAxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgb2sgPSBvayAmJiBleHBlY3RlZC5lcXVhbHMobGluZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUF1dGhBbm5vdGF0aW9ucy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQXV0aEFubm90YXRpb25zL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggM2VkNzlkNC4uZDUzNzRkNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQXV0aEFubm90YXRpb25zL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQXV0aEFubm90YXRpb25zL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAteG1sLW92ZXJyaWRlLWF1dGgtYW5ub3RhdGlvbnMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUF1dGhBbm5vdGF0aW9ucy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBdXRoQW5ub3RhdGlvbnMvYnVpbGQueG1sCmluZGV4IDMxYWZiZGEuLmI3N2EzY2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUF1dGhBbm5vdGF0aW9ucy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQXV0aEFubm90YXRpb25zL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICAgIDxkZWxldGUgZmlsZT0iV2ViVGVzdC5jbGFzcyIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTU3LDEwICs1NywxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNjgsMTQgKzY4LDE0IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvYXBwc2Vydi1ydC5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTkwLDcgKzkwLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9InNldHVwIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtdXNlci1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQXV0aEFubm90YXRpb25zL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUF1dGhBbm5vdGF0aW9ucy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNDIzMDE2YS4uNGU3MjE3OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQXV0aEFubm90YXRpb25zL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBdXRoQW5ub3RhdGlvbnMvZGVzY3JpcHRvci93ZWIueG1sCkBAIC00NCw3ICs0NCw3IEBACiAgICAgPGF1dGgtY29uc3RyYWludC8+CiAgIDwvc2VjdXJpdHktY29uc3RyYWludD4KICAgPHNlY3VyaXR5LXJvbGU+Ci0gICAgPHJvbGUtbmFtZT5qYXZhZWU8L3JvbGUtbmFtZT4gCisgICAgPHJvbGUtbmFtZT5qYXZhZWU8L3JvbGUtbmFtZT4KICAgPC9zZWN1cml0eS1yb2xlPgogICA8bG9naW4tY29uZmlnPgogICAgIDxhdXRoLW1ldGhvZD5CQVNJQzwvYXV0aC1tZXRob2Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVVcmxQYXR0ZXJuV2l0aFdlYkZyYWdtZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZVVybFBhdHRlcm5XaXRoV2ViRnJhZ21lbnQvV2ViVGVzdC5qYXZhCmluZGV4IDg0NzFjZmYuLjlhZjIyMmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZVVybFBhdHRlcm5XaXRoV2ViRnJhZ21lbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZVVybFBhdHRlcm5XaXRoV2ViRnJhZ21lbnQvV2ViVGVzdC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElzc3VlIDExNzUwIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDcsNyArNDcsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBib29sZWFuIG9rID0gaW52b2tlKCIvbXl0ZXN0IiwgNDA0LCBudWxsKTsKICAgICAgICAgICAgIG9rID0gaW52b2tlKCIvbXl0ZXN0MiIsIDIwMCwgRVhQRUNURURfUkVTUE9OU0UpICYmIG9rOwogICAgICAgICAgICAgb2sgPSBpbnZva2UoIi9teXRlc3QzIiwgMjAwLCBFWFBFQ1RFRF9SRVNQT05TRV8yKSAmJiBvazsKQEAgLTYxLDcgKzYxLDcgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBpbnZva2UoU3RyaW5nIHVybFBhdHRlcm4sCiAgICAgICAgICAgICBpbnQgZXhwZWN0ZWRDb2RlLCBTdHJpbmcgZXhwZWN0ZWRSZXNwb25zZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArIHVybFBhdHRlcm47CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWNjZXNzaW5nICIgKyB1cmwpOwpAQCAtMTA0LDEwICsxMDQsMTAgQEAKICAgICAgICAgICAgIGlmIChleHBlY3RlZFJlc3BvbnNlLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkUmVzcG9uc2UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZVVybFBhdHRlcm5XaXRoV2ViRnJhZ21lbnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZVVybFBhdHRlcm5XaXRoV2ViRnJhZ21lbnQvYnVpbGQucHJvcGVydGllcwppbmRleCAzNDRlYmYwLi5mMzE4MTlmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVVcmxQYXR0ZXJuV2l0aFdlYkZyYWdtZW50L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlVXJsUGF0dGVybldpdGhXZWJGcmFnbWVudC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXhtbC1vdmVycmlkZS11cmwtcGF0dGVybi13aXRoLXdlYi1mcmFnbWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlVXJsUGF0dGVybldpdGhXZWJGcmFnbWVudC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVVcmxQYXR0ZXJuV2l0aFdlYkZyYWdtZW50L2J1aWxkLnhtbAppbmRleCA1OTNlYWRlLi5iM2Q1YjQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVVcmxQYXR0ZXJuV2l0aFdlYkZyYWdtZW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVVcmxQYXR0ZXJuV2l0aFdlYkZyYWdtZW50L2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPGRlbGV0ZSBkaXI9ImxpYiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTU4LDIzICs1OCwyMyBAQAogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dmdGVzdCIvPgogCi0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovVGVzdFNlcnZsZXQuY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovVGVzdFNlcnZsZXQuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODYsMTAgKzg2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlVXJsUGF0dGVybldpdGhXZWJGcmFnbWVudC9zZXJ2bGV0L1Rlc3RGaWx0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZVVybFBhdHRlcm5XaXRoV2ViRnJhZ21lbnQvc2VydmxldC9UZXN0RmlsdGVyLmphdmEKaW5kZXggZGE4NmRiNy4uNGVjNjYwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlVXJsUGF0dGVybldpdGhXZWJGcmFnbWVudC9zZXJ2bGV0L1Rlc3RGaWx0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVVcmxQYXR0ZXJuV2l0aFdlYkZyYWdtZW50L3NlcnZsZXQvVGVzdEZpbHRlci5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiBwdWJsaWMgY2xhc3MgVGVzdEZpbHRlciBpbXBsZW1lbnRzIEZpbHRlciB7CiAgICAgcHVibGljIHZvaWQgaW5pdChGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IGZpbHRlci5pbml0Iik7Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywKICAgICAgICAgICAgIEZpbHRlckNoYWluIGNoYWluKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlVXJsUGF0dGVybldpdGhXZWJGcmFnbWVudC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVVcmxQYXR0ZXJuV2l0aFdlYkZyYWdtZW50L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQppbmRleCA0NmIwYTI4Li4zM2I2YWU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVVcmxQYXR0ZXJuV2l0aFdlYkZyYWdtZW50L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVVcmxQYXR0ZXJuV2l0aFdlYkZyYWdtZW50L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKWVuLm5leHRFbGVtZW50KCk7CiAgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBnZXRJbml0UGFyYW1ldGVyKG5hbWUpOwogICAgICAgICAgICAgbXNnICs9IG5hbWUgKyAiPSIgKyB2YWx1ZSArICIsICI7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICAgICAgd3JpdGVyLndyaXRlKCIsIGluaXRQYXJhbXM6ICIgKyBtc2cgKyAiXG4iKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVVcmxQYXR0ZXJuV2l0aFdlYkZyYWdtZW50L3NlcnZsZXQvVGVzdFNlcnZsZXQyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVVcmxQYXR0ZXJuV2l0aFdlYkZyYWdtZW50L3NlcnZsZXQvVGVzdFNlcnZsZXQyLmphdmEKaW5kZXggZTQwY2IwYS4uZjQwYzNjOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlVXJsUGF0dGVybldpdGhXZWJGcmFnbWVudC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZVVybFBhdHRlcm5XaXRoV2ViRnJhZ21lbnQvc2VydmxldC9UZXN0U2VydmxldDIuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKWVuLm5leHRFbGVtZW50KCk7CiAgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBnZXRJbml0UGFyYW1ldGVyKG5hbWUpOwogICAgICAgICAgICAgbXNnICs9IG5hbWUgKyAiPSIgKyB2YWx1ZSArICIsICI7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICAgICAgd3JpdGVyLndyaXRlKCIsIGluaXRQYXJhbXM6ICIgKyBtc2cgKyAiXG4iKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVVcmxQYXR0ZXJuV2l0aFdlYkZyYWdtZW50L3NlcnZsZXQvV0ZUZXN0RmlsdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVVcmxQYXR0ZXJuV2l0aFdlYkZyYWdtZW50L3NlcnZsZXQvV0ZUZXN0RmlsdGVyLmphdmEKaW5kZXggYjVmYzYwOC4uZjYxNDE1ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlVXJsUGF0dGVybldpdGhXZWJGcmFnbWVudC9zZXJ2bGV0L1dGVGVzdEZpbHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZVVybFBhdHRlcm5XaXRoV2ViRnJhZ21lbnQvc2VydmxldC9XRlRlc3RGaWx0ZXIuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogcHVibGljIGNsYXNzIFdGVGVzdEZpbHRlciBpbXBsZW1lbnRzIEZpbHRlciB7CiAgICAgcHVibGljIHZvaWQgaW5pdChGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IHdmRmlsdGVyLmluaXQiKTsKLSAgICB9ICAgCisgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxLCBTZXJ2bGV0UmVzcG9uc2UgcmVzLAogICAgICAgICAgICAgRmlsdGVyQ2hhaW4gY2hhaW4pIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvYW55QXV0aGVudGljYXRlZFVzZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL2FueUF1dGhlbnRpY2F0ZWRVc2VyL1dlYlRlc3QuamF2YQppbmRleCA0ODIxOTM5Li5jZDM3ZTg1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvYW55QXV0aGVudGljYXRlZFVzZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9hbnlBdXRoZW50aWNhdGVkVXNlci9XZWJUZXN0LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgcG9ydCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1sxXSk7CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBkZW55LXVuY292ZXJlZC1odHRwLW1ldGhvZHMiKTsKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0gICAgCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIHJ1bihib29sZWFuIGF1dGgsCkBAIC04OSw3ICs4OSw3IEBACiAgICAgICAgICAgICAgICAgb2sgPSBvayAmJiBFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7Ci0gICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGVzdCBVTlBSRURJQ1RFRC1GQUlMVVJFIik7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL2FueUF1dGhlbnRpY2F0ZWRVc2VyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvYW55QXV0aGVudGljYXRlZFVzZXIvYnVpbGQucHJvcGVydGllcwppbmRleCA5NjdkNjc3Li5hN2U1NDA0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvYW55QXV0aGVudGljYXRlZFVzZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvYW55QXV0aGVudGljYXRlZFVzZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMS1hbnktYXV0aGVudGljYXRlZC11c2VyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvYW55QXV0aGVudGljYXRlZFVzZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL2FueUF1dGhlbnRpY2F0ZWRVc2VyL2J1aWxkLnhtbAppbmRleCBmOWIzYjQ1Li4xZDgxYjFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvYW55QXV0aGVudGljYXRlZFVzZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9hbnlBdXRoZW50aWNhdGVkVXNlci9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IldlYlRlc3QuY2xhc3MiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01MSwxMCArNTEsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTYyLDE0ICs2MiwxNCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtcnQuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9jaGFuZ2VTZXNzaW9uSWQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL2NoYW5nZVNlc3Npb25JZC9XZWJUZXN0LmphdmEKaW5kZXggODc5ZjlhNy4uNDFhYTU3MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL2NoYW5nZVNlc3Npb25JZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL2NoYW5nZVNlc3Npb25JZC9XZWJUZXN0LmphdmEKQEAgLTI0LDExICsyNCwxMSBAQAogICogVGVzdCBjaGFuZ2Ugc2Vzc2lvbiBpZCBpbiBTZXJ2bGV0IDMuMQogICovCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0gInNlcnZsZXQtMy4xLWNoYW5nZS1zZXNzaW9uLWlkIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSlNFU1NJT05JRCA9ICJKU0VTU0lPTklEIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSAidHdvIjsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIFN0cmluZyBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0UykuaW50VmFsdWUoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIExpc3Q8U3RyaW5nPiByZXN1bHQgPSBnb0dldChob3N0LCBwb3J0LCBjb250ZXh0Um9vdCArICIvdGVzdD9ydW49Zmlyc3QiLAogICAgICAgICAgICAgICAgICAgIG51bGwpOwpAQCAtNDksMTIgKzQ5LDEyIEBACiAgICAgICAgICAgICBpZiAocmVzdWx0LnNpemUoKSA+IDApIHsKICAgICAgICAgICAgICAgICByZXN1bHQyID0gZ29HZXQoaG9zdCwgcG9ydCwgY29udGV4dFJvb3QgKyAiL3Rlc3Q/cnVuPXNlY29uZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ2V0KDApKTsKLSAgICAgICAgICAgIH0gCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwKICAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zaXplKCkgPiAxICYmIHJlc3VsdDIuc2l6ZSgpID4gMQogICAgICAgICAgICAgICAgICAgICAmJiAhcmVzdWx0LmdldCgwKS5lcXVhbHMocmVzdWx0Mi5nZXQoMCkpCi0gICAgICAgICAgICAgICAgICAgICYmIEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhyZXN1bHQyLmdldCgxKSkpID8gCisgICAgICAgICAgICAgICAgICAgICYmIEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhyZXN1bHQyLmdldCgxKSkpID8KICAgICAgICAgICAgICAgICAgICAgc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0LmdldE1lc3NhZ2UoKSk7CkBAIC05OSw3ICs5OSw3IEBACiAgICAgICAgICAgICAgICAgbGluZU51bSsrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRlc3QgVU5QUkVESUNURUQtRkFJTFVSRSIpOwogICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CkBAIC0xMzgsNSArMTM4LDUgQEAKIAogICAgICAgICByZXR1cm4gcmV0OwogICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9jaGFuZ2VTZXNzaW9uSWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9jaGFuZ2VTZXNzaW9uSWQvYnVpbGQucHJvcGVydGllcwppbmRleCA1ZTdlMzYwLi5hOTE5MjM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvY2hhbmdlU2Vzc2lvbklkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL2NoYW5nZVNlc3Npb25JZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4xLWNoYW5nZS1zZXNzaW9uLWlkIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvY2hhbmdlU2Vzc2lvbklkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9jaGFuZ2VTZXNzaW9uSWQvYnVpbGQueG1sCmluZGV4IGIyNTM0OTUuLjZlOTExNDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9jaGFuZ2VTZXNzaW9uSWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9jaGFuZ2VTZXNzaW9uSWQvYnVpbGQueG1sCkBAIC01NCw3ICs1NCw3IEBACiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KQEAgLTc1LDcgKzc1LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9kZW55VW5jb3ZlcmVkSHR0cE1ldGhvZHMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL2RlbnlVbmNvdmVyZWRIdHRwTWV0aG9kcy9XZWJUZXN0LmphdmEKaW5kZXggNWRjNDlhNS4uMWJlOGU1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL2RlbnlVbmNvdmVyZWRIdHRwTWV0aG9kcy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL2RlbnlVbmNvdmVyZWRIdHRwTWV0aG9kcy9XZWJUZXN0LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgcG9ydCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1sxXSk7CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBkZW55LXVuY292ZXJlZC1odHRwLW1ldGhvZHMiKTsKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0gICAgCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIHJ1bihTdHJpbmcgbWV0aG9kLCBib29sZWFuIGF1dGgsCkBAIC04OCw3ICs4OCw3IEBACiAgICAgICAgICAgICAgICAgb2sgPSBvayAmJiBFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7Ci0gICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGVzdCBVTlBSRURJQ1RFRC1GQUlMVVJFIik7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL2RlbnlVbmNvdmVyZWRIdHRwTWV0aG9kcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL2RlbnlVbmNvdmVyZWRIdHRwTWV0aG9kcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGIxMTViM2IuLjFjNzE2ZjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9kZW55VW5jb3ZlcmVkSHR0cE1ldGhvZHMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvZGVueVVuY292ZXJlZEh0dHBNZXRob2RzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjEtZGVueS11bmNvdmVyZWQtaHR0cC1tZXRob2RzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvZGVueVVuY292ZXJlZEh0dHBNZXRob2RzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9kZW55VW5jb3ZlcmVkSHR0cE1ldGhvZHMvYnVpbGQueG1sCmluZGV4IGY5YjNiNDUuLjFkODFiMWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9kZW55VW5jb3ZlcmVkSHR0cE1ldGhvZHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9kZW55VW5jb3ZlcmVkSHR0cE1ldGhvZHMvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgICAgPGRlbGV0ZSBmaWxlPSJXZWJUZXN0LmNsYXNzIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNTEsMTAgKzUxLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC02MiwxNCArNjIsMTQgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0LmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbmV0d29ya1BhdGhSZWZlcmVuY2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9uZXR3b3JrUGF0aFJlZmVyZW5jZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDRlNWQ0MGIuLmEyYTc5ZmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9uZXR3b3JrUGF0aFJlZmVyZW5jZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9uZXR3b3JrUGF0aFJlZmVyZW5jZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4xLW5ldHdvcmstcGF0aC1yZWZlcmVuY2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9uZXR3b3JrUGF0aFJlZmVyZW5jZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbmV0d29ya1BhdGhSZWZlcmVuY2UvYnVpbGQueG1sCmluZGV4IDUzMTZlNmQuLmU5M2QwZDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9uZXR3b3JrUGF0aFJlZmVyZW5jZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25ldHdvcmtQYXRoUmVmZXJlbmNlL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvd2VidGVzdC5qYXIiLz4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmFjPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KQEAgLTc0LDcgKzc0LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0L1dlYlRlc3QuamF2YQppbmRleCA2NTNkNWQ4Li4yMDkxMTY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXQvV2ViVGVzdC5qYXZhCkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCAoKGV4cGVjdGVkKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXQvYnVpbGQucHJvcGVydGllcwppbmRleCAxYTQxZTI5Li40MTdhNWFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjEtbm9uLWJsb2NraW5nLWlucHV0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dC9idWlsZC54bWwKaW5kZXggOTk3YmVkYS4uMGMwNjRjMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0L2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiLz4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmFjPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KQEAgLTc4LDcgKzc4LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0L3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXQvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggZTM2OGQwZi4uM2JjMjA5OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXQvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXQvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTc3LDcgKzc3LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0+IG9uRGF0YUF2YWlsYWJsZSIpOwogICAgICAgICAgICAgaW50IGxlbiA9IC0xOwogICAgICAgICAgICAgYnl0ZSBiW10gPSBuZXcgYnl0ZVsxMDI0XTsKLSAgICAgICAgICAgIHdoaWxlIChpbnB1dC5pc1JlYWR5KCkgCisgICAgICAgICAgICB3aGlsZSAoaW5wdXQuaXNSZWFkeSgpCiAgICAgICAgICAgICAgICAgICAgICYmIChsZW4gPSBpbnB1dC5yZWFkKGIpKSAhPSAtMSkgewogICAgICAgICAgICAgICAgIFN0cmluZyBkYXRhID0gbmV3IFN0cmluZyhiLCAwLCBsZW4pOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0+ICIgKyBkYXRhKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0T3V0cHV0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0T3V0cHV0L1dlYlRlc3QuamF2YQppbmRleCBmMzZhN2JhLi45MWQ2ZjhlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dE91dHB1dC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXRPdXRwdXQvV2ViVGVzdC5qYXZhCkBAIC05MCw3ICs5MCw3IEBACiAgICAgICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCAoKGV4cGVjdGVkKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dE91dHB1dC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXRPdXRwdXQvYnVpbGQucHJvcGVydGllcwppbmRleCAxYTQxZTI5Li40MTdhNWFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dE91dHB1dC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0T3V0cHV0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjEtbm9uLWJsb2NraW5nLWlucHV0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dE91dHB1dC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dE91dHB1dC9idWlsZC54bWwKaW5kZXggOTk3YmVkYS4uMGMwNjRjMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXRPdXRwdXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0T3V0cHV0L2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiLz4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmFjPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KQEAgLTc4LDcgKzc4LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0T3V0cHV0L3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXRPdXRwdXQvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggYjkwYmEwMy4uYjc0NzA4YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXRPdXRwdXQvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXRPdXRwdXQvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0+IG9uRGF0YUF2YWlsYWJsZSIpOwogICAgICAgICAgICAgaW50IGxlbiA9IC0xOwogICAgICAgICAgICAgYnl0ZSBiW10gPSBuZXcgYnl0ZVsxMDI0XTsKLSAgICAgICAgICAgIHdoaWxlIChpbnB1dC5pc1JlYWR5KCkgCisgICAgICAgICAgICB3aGlsZSAoaW5wdXQuaXNSZWFkeSgpCiAgICAgICAgICAgICAgICAgICAgICYmIChsZW4gPSBpbnB1dC5yZWFkKGIpKSAhPSAtMSkgewogICAgICAgICAgICAgICAgIFN0cmluZyBkYXRhID0gbmV3IFN0cmluZyhiLCAwLCBsZW4pOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0+ICIgKyBkYXRhKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0V2l0aEFzeW5jRGlzcGF0Y2gvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXRXaXRoQXN5bmNEaXNwYXRjaC9XZWJUZXN0LmphdmEKaW5kZXggNDJkMjUyMS4uZTUyMjk1MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXRXaXRoQXN5bmNEaXNwYXRjaC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXRXaXRoQXN5bmNEaXNwYXRjaC9XZWJUZXN0LmphdmEKQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsICgoZXhwZWN0ZWQpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0V2l0aEFzeW5jRGlzcGF0Y2gvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0V2l0aEFzeW5jRGlzcGF0Y2gvYnVpbGQucHJvcGVydGllcwppbmRleCA4YjQxMzE0Li4xZGRkNDgyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dFdpdGhBc3luY0Rpc3BhdGNoL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXRXaXRoQXN5bmNEaXNwYXRjaC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4xLW5vbi1ibG9ja2luZy1pbnB1dC13aXRoLWFzeW5jLWRpc3BhdGNoIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dFdpdGhBc3luY0Rpc3BhdGNoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0V2l0aEFzeW5jRGlzcGF0Y2gvYnVpbGQueG1sCmluZGV4IDk5N2JlZGEuLjBjMDY0YzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0V2l0aEFzeW5jRGlzcGF0Y2gvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0V2l0aEFzeW5jRGlzcGF0Y2gvYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNTcsNyArNTcsNyBAQAogICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIvPgogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YWM+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgpAQCAtNzgsNyArNzgsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXRXaXRoQXN5bmNEaXNwYXRjaC9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0V2l0aEFzeW5jRGlzcGF0Y2gvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggNDk1MzY2ZS4uYTdkNzAyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXRXaXRoQXN5bmNEaXNwYXRjaC9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dFdpdGhBc3luY0Rpc3BhdGNoL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tPiBvbkRhdGFBdmFpbGFibGUiKTsKICAgICAgICAgICAgIGludCBsZW4gPSAtMTsKICAgICAgICAgICAgIGJ5dGUgYltdID0gbmV3IGJ5dGVbMTAyNF07Ci0gICAgICAgICAgICB3aGlsZSAoaW5wdXQuaXNSZWFkeSgpIAorICAgICAgICAgICAgd2hpbGUgKGlucHV0LmlzUmVhZHkoKQogICAgICAgICAgICAgICAgICAgICAmJiAobGVuID0gaW5wdXQucmVhZChiKSkgIT0gLTEpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0YSA9IG5ldyBTdHJpbmcoYiwgMCwgbGVuKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tPiAiICsgZGF0YSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdPdXRwdXQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nT3V0cHV0L1dlYlRlc3QuamF2YQppbmRleCA5NjkxZDVhLi42YTRjZWM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdPdXRwdXQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ091dHB1dC9XZWJUZXN0LmphdmEKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgKChleHBlY3RlZCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nT3V0cHV0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdPdXRwdXQvYnVpbGQucHJvcGVydGllcwppbmRleCBlZTE1MTk3Li43ZGQxNWE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdPdXRwdXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdPdXRwdXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMS1ub24tYmxvY2tpbmctb3V0cHV0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdPdXRwdXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nT3V0cHV0L2J1aWxkLnhtbAppbmRleCA3MmE3Mzk0Li4yNTQ2NTczIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdPdXRwdXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ091dHB1dC9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIi8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhYz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CkBAIC05NCw3ICs5NCw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdPdXRwdXQvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdPdXRwdXQvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggOTE4YjViNC4uZjY0MmYwMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nT3V0cHV0L3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ091dHB1dC9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQpAQCAtNTgsNyArNTgsNyBAQAogICAgICAgICAgICAgICAgIGxvbmcgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKG91dHB1dC5pc1JlYWR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgd3JpdGVEYXRhKG91dHB1dCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7ICAgIAorICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICAgICAgICAgICBpZiAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWUgPiBNQVhfVElNRV9NSUxMSVMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBjb3VudCA+IDEwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIkNhbm5vdCBmaWxsIHRoZSB3cml0ZSBidWZmZXIiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9wYXJ0U3VibWl0dGVkRmlsZU5hbWUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3BhcnRTdWJtaXR0ZWRGaWxlTmFtZS9XZWJUZXN0LmphdmEKaW5kZXggMzVlYTFkOS4uMTA2NTE5OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3BhcnRTdWJtaXR0ZWRGaWxlTmFtZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3BhcnRTdWJtaXR0ZWRGaWxlTmFtZS9XZWJUZXN0LmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC0xNDEsNyArMTQxLDcgQEAKICAgIHN0YXRpYyBTdHJpbmdbXVtdIGV4cGVjdGVkID0gewogICAgICAgIHsiMTIzNDU2N2FiY2RlZmcifSwKICAgICAgICB7Im15RmlsZSIsICJ0ZXN0LnR4dCIsICIzNiIsICJ0ZXh0L3BsYWluIiwgImNvbnRlbnQtZGlzcG9zaXRpb24gY29udGVudC10eXBlIiB9LAotICAgICAgIHsibXlGaWxlMiIsICJ0ZXN0Mi50eHQiLCAiMzciLCAidGV4dC9wbGFpbiIsIAorICAgICAgIHsibXlGaWxlMiIsICJ0ZXN0Mi50eHQiLCAiMzciLCAidGV4dC9wbGFpbiIsCiAgICAgICAgICAgICAiY29udGVudC1kaXNwb3NpdGlvbiBjb250ZW50LXR5cGUiIH0sCiAgICAgICAgeyJ4eXoiLCAibnVsbCIsICIxNCIsICJ0ZXh0L3BsYWluIiwgImNvbnRlbnQtZGlzcG9zaXRpb24gY29udGVudC10eXBlIn0KICAgIH07CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcGFydFN1Ym1pdHRlZEZpbGVOYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcGFydFN1Ym1pdHRlZEZpbGVOYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzBlMDBmNC4uOGQyMGNlMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3BhcnRTdWJtaXR0ZWRGaWxlTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9wYXJ0U3VibWl0dGVkRmlsZU5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4xLXBhcnQtc3VibWl0dGVkLWZpbGUtbmFtZSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjEtcGFydC1zdWJtaXR0ZWQtZmlsZS1uYW1lIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3BhcnRTdWJtaXR0ZWRGaWxlTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcGFydFN1Ym1pdHRlZEZpbGVOYW1lL2J1aWxkLnhtbAppbmRleCAzY2Y5YTcxLi42OGNkOTA3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcGFydFN1Ym1pdHRlZEZpbGVOYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcGFydFN1Ym1pdHRlZEZpbGVOYW1lL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTYgKzQyLDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTU5LDcgKzU5LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YWMKICAgICAgICAgICAgIGRlYnVnPSJ0cnVlIgpAQCAtNzgsMTAgKzc4LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3BhcnRTdWJtaXR0ZWRGaWxlTmFtZS9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcGFydFN1Ym1pdHRlZEZpbGVOYW1lL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCA2NjdmNTEwLi4yZjk5NDA0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcGFydFN1Ym1pdHRlZEZpbGVOYW1lL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcGFydFN1Ym1pdHRlZEZpbGVOYW1lL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogQE11bHRpcGFydENvbmZpZyhtYXhGaWxlU2l6ZT0yMDApCiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKLSAgICBwcm90ZWN0ZWQgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwcm90ZWN0ZWQgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9yZXNldENoYXJhY3RlckVuY29kaW5nL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9yZXNldENoYXJhY3RlckVuY29kaW5nL1dlYlRlc3QuamF2YQppbmRleCA4N2I4NWQxLi42YTEzZDE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcmVzZXRDaGFyYWN0ZXJFbmNvZGluZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3Jlc2V0Q2hhcmFjdGVyRW5jb2RpbmcvV2ViVGVzdC5qYXZhCkBAIC0yNCwxMSArMjQsMTEgQEAKICAqIFRlc3QgSHR0cFNlcnZsZXRSZXNwb25zZSNyZXNldCBhbmQgI3NldENoYXJhY3RlckVuY29kaW5nLgogICovCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0gInNlcnZsZXQtMy4xLXJlc2V0LWNoYXJhY3Rlci1lbmNvZGluZyI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX0NPTlRFTlRfVFlQRSA9ICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47Y2hhcnNldD1CaWc1IjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0U9IkRvbmUiOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTU1LDcgKzU1LDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZ29HZXQoU3RyaW5nIGhvc3QsIGludCBwb3J0LCBTdHJpbmcgY29udGV4dFBhdGgsCiAgICAgICAgICAgICBTdHJpbmcgZXhwZWN0ZWRDb250ZW50VHlwZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgIGJvb2xlYW4gaGFzRXhwZWN0ZWRDb250ZW50VHlwZSA9IChleHBlY3RlZENvbnRlbnRUeXBlID09IG51bGwpOwogICAgICAgICBib29sZWFuIGhhc0RvbmUgPSBmYWxzZTsKQEAgLTg4LDcgKzg4LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbGluZU51bSsrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHJlc3VsdCA9IGhhc0V4cGVjdGVkQ29udGVudFR5cGUgJiYgaGFzRG9uZTsKIAogICAgICAgICAgfSBmaW5hbGx5IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9yZXNldENoYXJhY3RlckVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcmVzZXRDaGFyYWN0ZXJFbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA0Yzg0M2YuLjAzM2RjMDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9yZXNldENoYXJhY3RlckVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3Jlc2V0Q2hhcmFjdGVyRW5jb2RpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMS1yZXNldC1jaGFyYWN0ZXItZW5jb2RpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9yZXNldENoYXJhY3RlckVuY29kaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9yZXNldENoYXJhY3RlckVuY29kaW5nL2J1aWxkLnhtbAppbmRleCBiMjUzNDk1Li42ZTkxMTQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcmVzZXRDaGFyYWN0ZXJFbmNvZGluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3Jlc2V0Q2hhcmFjdGVyRW5jb2RpbmcvYnVpbGQueG1sCkBAIC01NCw3ICs1NCw3IEBACiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KQEAgLTc1LDcgKzc1LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ydW5Bc0luaXREZXN0cm95L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ydW5Bc0luaXREZXN0cm95L1dlYlRlc3QuamF2YQppbmRleCA0NTgxZTliLi40ZjNjYjc4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcnVuQXNJbml0RGVzdHJveS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3J1bkFzSW5pdERlc3Ryb3kvV2ViVGVzdC5qYXZhCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgIHNlcnZlckxvZyA9IGFyZ3NbNF07CiAgICAgICAgIGFwcE5hbWUgPSBhcmdzWzVdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEBSdW5BcyB3aXRoIGluaXQgYW5kIGRlc3Ryb3kiKTsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0gICAgCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC0xMDMsNyArMTAzLDcgQEAKICAgICAgICAgICAgICAgICBvayA9IG9rICYmIEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcnVuQXNJbml0RGVzdHJveS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3J1bkFzSW5pdERlc3Ryb3kvYnVpbGQucHJvcGVydGllcwppbmRleCBkOGRiY2MzLi5jMjNiMjg1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcnVuQXNJbml0RGVzdHJveS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ydW5Bc0luaXREZXN0cm95L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjEtcnVuLWFzLWluaXQtZGVzdHJveSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3J1bkFzSW5pdERlc3Ryb3kvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3J1bkFzSW5pdERlc3Ryb3kvYnVpbGQueG1sCmluZGV4IDM2ZWE4MzkuLjk2NTM3MTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ydW5Bc0luaXREZXN0cm95L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcnVuQXNJbml0RGVzdHJveS9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IldlYlRlc3QuY2xhc3MiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC02MSwxMCArNjEsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTcyLDE0ICs3MiwxNCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtcnQuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuQW5kVW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3NlcnZsZXRDb250ZXh0R2V0VmlydHVhbFNlcnZlck5hbWUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3NlcnZsZXRDb250ZXh0R2V0VmlydHVhbFNlcnZlck5hbWUvV2ViVGVzdC5qYXZhCmluZGV4IDc3ZmQ5ZjQuLmQ5OWJhOWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9zZXJ2bGV0Q29udGV4dEdldFZpcnR1YWxTZXJ2ZXJOYW1lL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvc2VydmxldENvbnRleHRHZXRWaXJ0dWFsU2VydmVyTmFtZS9XZWJUZXN0LmphdmEKQEAgLTI0LDkgKzI0LDkgQEAKICAqIFRlc3QgSHR0cFNlcnZsZXRSZXNwb25zZSNyZXNldCBhbmQgI3NldENoYXJhY3RlckVuY29kaW5nLgogICovCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0gInNlcnZsZXQtMy4xLXNlcnZsZXQtY29udGV4dC1nZXQtdmlydHVhbC1zZXJ2ZXItbmFtZSI7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApAQCAtNTMsNyArNTMsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBnb0dldChTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBjb250ZXh0UGF0aCwKICAgICAgICAgICAgIFN0cmluZyBleHBlY3RlZFJlc3VsdCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CiAKICAgICAgICAgdHJ5IChTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgcG9ydCk7CkBAIC03Niw4ICs3Niw4IEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICB9IAorCisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9zZXJ2bGV0Q29udGV4dEdldFZpcnR1YWxTZXJ2ZXJOYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvc2VydmxldENvbnRleHRHZXRWaXJ0dWFsU2VydmVyTmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGE2ZmQzOTIuLjg2YjkzMDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9zZXJ2bGV0Q29udGV4dEdldFZpcnR1YWxTZXJ2ZXJOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3NlcnZsZXRDb250ZXh0R2V0VmlydHVhbFNlcnZlck5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMS1zZXJ2bGV0LWNvbnRleHQtZ2V0LXZpcnR1YWwtc2VydmVyLW5hbWUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9zZXJ2bGV0Q29udGV4dEdldFZpcnR1YWxTZXJ2ZXJOYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9zZXJ2bGV0Q29udGV4dEdldFZpcnR1YWxTZXJ2ZXJOYW1lL2J1aWxkLnhtbAppbmRleCBhNTEyZjhhLi42YzI4YzA1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvc2VydmxldENvbnRleHRHZXRWaXJ0dWFsU2VydmVyTmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3NlcnZsZXRDb250ZXh0R2V0VmlydHVhbFNlcnZlck5hbWUvYnVpbGQueG1sCkBAIC01NCw3ICs1NCw3IEBACiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KQEAgLTc2LDcgKzc2LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlRWNoby9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvdXBncmFkZUVjaG8vV2ViVGVzdC5qYXZhCmluZGV4IDQ5ODE4ODUuLmI0NTUwN2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlRWNoby9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3VwZ3JhZGVFY2hvL1dlYlRlc3QuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogLyoKLSAqIFVuaXQgdGVzdCBmb3IgdXBncmFkZSBlY2hvIAorICogVW5pdCB0ZXN0IGZvciB1cGdyYWRlIGVjaG8KICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewogCkBAIC04NCw3ICs4NCw3IEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIlNsZWVwaW5nICVkIHNlY1xuIiwgc2xlZXBJblNlY29uZHMpOwogICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcChzbGVlcEluU2Vjb25kcyAqIDEwMDApOwogICAgICAgICAgICAgICAgIHdyaXRlQ2h1bmsob3V0cHV0LCAiV29ybGQiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIHJlYWQgZGF0YSB3aXRob3V0IHVzaW5nIHJlYWRMaW5lCiAgICAgICAgICAgICAgICAgbG9uZyBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbnN1bWluZyByZXN1bHRzIik7CkBAIC05NSw3ICs5NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaGFzRXJyb3IgPSBzYi50b1N0cmluZygpLmNvbnRhaW5zKCJXcm9uZ0NsYXNzTG9hZGVyIik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbmZvIHx8IGhhc0Vycm9yIHx8IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lID4gMjAgKiAxMDAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzYi50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlRWNoby9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3VwZ3JhZGVFY2hvL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggY2E5N2E4MC4uNWJjMzcyMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3VwZ3JhZGVFY2hvL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3VwZ3JhZGVFY2hvL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjEtdXBncmFkZS1zaW1wbGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlRWNoby9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvdXBncmFkZUVjaG8vYnVpbGQueG1sCmluZGV4IDk5N2JlZGEuLjBjMDY0YzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlRWNoby9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3VwZ3JhZGVFY2hvL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiLz4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmFjPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KQEAgLTc4LDcgKzc4LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlRWNoby9zZXJ2bGV0L3Rlc3QvRWNob0h0dHBVcGdyYWRlSGFuZGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3VwZ3JhZGVFY2hvL3NlcnZsZXQvdGVzdC9FY2hvSHR0cFVwZ3JhZGVIYW5kbGVyLmphdmEKaW5kZXggMDBjYTI4ZS4uNTRmYmMxZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3VwZ3JhZGVFY2hvL3NlcnZsZXQvdGVzdC9FY2hvSHR0cFVwZ3JhZGVIYW5kbGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3VwZ3JhZGVFY2hvL3NlcnZsZXQvdGVzdC9FY2hvSHR0cFVwZ3JhZGVIYW5kbGVyLmphdmEKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvcnJlY3QgQ2xhc3NMb2FkZXIiKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFUlJPUiBXcm9uZyBDbGFzc0xvYWRlciEhISIpOwotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiV3JvbmdDbGFzc0xvYWRlciIpOyAKKyAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIldyb25nQ2xhc3NMb2FkZXIiKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaW50IGxlbiA9IC0xOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3VwZ3JhZGVXaXRoQ0RJL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvdXBncmFkZVdpdGhDREkvYnVpbGQucHJvcGVydGllcwppbmRleCA0ODY5YjgxLi41YzhlZDg0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvdXBncmFkZVdpdGhDREkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvdXBncmFkZVdpdGhDREkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMS11cGdyYWRlLXdpdGgtY2RpIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvdXBncmFkZVdpdGhDREkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3VwZ3JhZGVXaXRoQ0RJL2J1aWxkLnhtbAppbmRleCA5OTdiZWRhLi4wYzA2NGMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvdXBncmFkZVdpdGhDREkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlV2l0aENESS9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIi8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhYz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CkBAIC03OCw3ICs3OCw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvdXBncmFkZVdpdGhDREkvc2VydmxldC90ZXN0L0lTQk5WYWxpZGF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlV2l0aENESS9zZXJ2bGV0L3Rlc3QvSVNCTlZhbGlkYXRvci5qYXZhCmluZGV4IGRkODc2ZTkuLjk1OTI2YmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlV2l0aENESS9zZXJ2bGV0L3Rlc3QvSVNCTlZhbGlkYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlV2l0aENESS9zZXJ2bGV0L3Rlc3QvSVNCTlZhbGlkYXRvci5qYXZhCkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgIGludCBzdW0gPSAwOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKICAgICAgICAgICAgIHN1bSArPSAoMTAgLSBpKSAqIGlzW2ldOwotICAgICAgICB9ICAgCisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIChzdW0gJSAxMSA9PSAwKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlV2l0aENESS9zZXJ2bGV0L3Rlc3QvUmVhZExpc3RlbmVySW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3VwZ3JhZGVXaXRoQ0RJL3NlcnZsZXQvdGVzdC9SZWFkTGlzdGVuZXJJbXBsLmphdmEKaW5kZXggYjlmYWRlMS4uMmZhYzIxYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3VwZ3JhZGVXaXRoQ0RJL3NlcnZsZXQvdGVzdC9SZWFkTGlzdGVuZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3VwZ3JhZGVXaXRoQ0RJL3NlcnZsZXQvdGVzdC9SZWFkTGlzdGVuZXJJbXBsLmphdmEKQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgIHB1YmxpYyB2b2lkIG9uRXJyb3IoZmluYWwgVGhyb3dhYmxlIHQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLT4gb25FcnJvcjogIiArIHQpOwogICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgd2MuY2xvc2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvYWRkSnNwRmlsZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvYWRkSnNwRmlsZS9XZWJUZXN0LmphdmEKaW5kZXggZjRmMGFkOC4uNjE0NzgxZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2FkZEpzcEZpbGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9hZGRKc3BGaWxlL1dlYlRlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBTZXJ2bGV0Q29udGV4dC5hZGRKc3BGaWxlIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2FkZEpzcEZpbGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9hZGRKc3BGaWxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjkyNDc1Ny4uMjA4NDA1MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2FkZEpzcEZpbGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvYWRkSnNwRmlsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw5ICsxNSw5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtNC4wLWFkZC1qc3AtZmlsZSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC00LjAtYWRkLWpzcC1maWxlIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvYWRkSnNwRmlsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvYWRkSnNwRmlsZS9idWlsZC54bWwKaW5kZXggODRiOGQ2ZC4uOWI3ZmJkOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2FkZEpzcEZpbGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9hZGRKc3BGaWxlL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywxMCArNDcsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgaW5jbHVkZXM9IldlYlRlc3QuamF2YSI+CkBAIC01OSwxMCArNTksMTAgQEAKICAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvd2VidGVzdC5qYXIiLz4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmFjPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC03MCw3ICs3MCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0IiBmb3JrPSJ0cnVlIj4KICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJTMUFTX0hPTUUiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9Ii8+CkBAIC04NiwxMCArODYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvY29tcG9zaXRlVHJhaWxlclN1cHBsaWVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9jb21wb3NpdGVUcmFpbGVyU3VwcGxpZXIvV2ViVGVzdC5qYXZhCmluZGV4IGJjNTA3OGEuLmVkZGJkMTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9jb21wb3NpdGVUcmFpbGVyU3VwcGxpZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9jb21wb3NpdGVUcmFpbGVyU3VwcGxpZXIvV2ViVGVzdC5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIHBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMV0pOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGNvbXBvc2l0ZSB0cmFpbGVyIHN1cHBsaWVyIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtODUsNyArODUsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgU3RyaW5nIGNvbnRlbnRUeXBlID0gaHR0cFJlc3BvbnNlLmdldEhlYWRlcigiQ29udGVudC1UeXBlIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tPiBoZWFkZXJzID0gIiArIGh0dHBSZXNwb25zZS5nZXRIZWFkZXJzKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBuZXcgU3RyaW5nQnVpbGRlcihodHRwUmVzcG9uc2UuZ2V0Qm9keSgpLnRyaW0oKSkKICAgICAgICAgICAgICAgICAuYXBwZW5kKCd8JykKICAgICAgICAgICAgICAgICAuYXBwZW5kKGh0dHBSZXNwb25zZS5nZXRUcmFpbGVyRmllbGRzKCkuZ2V0KCJiYXIxIikpIC8vIHRyYWlsZXIgZmllbGQKQEAgLTk2LDcgKzk2LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0+IHJlc3VsdCA9ICIgKyByZXN1bHQpOwogCiAgICAgICAgICAgICBpZiAgKCFFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMocmVzdWx0KSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXN1bHQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvY29tcG9zaXRlVHJhaWxlclN1cHBsaWVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvY29tcG9zaXRlVHJhaWxlclN1cHBsaWVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODc1MzM0MS4uNmUyMWEwZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2NvbXBvc2l0ZVRyYWlsZXJTdXBwbGllci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9jb21wb3NpdGVUcmFpbGVyU3VwcGxpZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOSArMTUsOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTQuMC1jb21wb3NpdGUtdHJhaWxlci1zdXBwbGllciIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC00LjAtY29tcG9zaXRlLXRyYWlsZXItc3VwcGxpZXIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9jb21wb3NpdGVUcmFpbGVyU3VwcGxpZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2NvbXBvc2l0ZVRyYWlsZXJTdXBwbGllci9idWlsZC54bWwKaW5kZXggNzhkN2MzOS4uM2FlZGI5ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2NvbXBvc2l0ZVRyYWlsZXJTdXBwbGllci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2NvbXBvc2l0ZVRyYWlsZXJTdXBwbGllci9idWlsZC54bWwKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDUsMTAgKzQ1LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIj4KICAgICAgICAgICAgIDxjbGFzc3BhdGg+CkBAIC01NiwxMCArNTYsMTAgQEAKICAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvd2VidGVzdC5qYXIiLz4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmFjPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0IiBmb3JrPSJ0cnVlIj4KICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJTMUFTX0hPTUUiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9Ii8+CkBAIC04MywxMCArODMsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvY29udGV4dENoYXJFbmNvZGluZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvY29udGV4dENoYXJFbmNvZGluZy9XZWJUZXN0LmphdmEKaW5kZXggMzY3MjhmMC4uOTU3MzkwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2NvbnRleHRDaGFyRW5jb2RpbmcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9jb250ZXh0Q2hhckVuY29kaW5nL1dlYlRlc3QuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBTZXJ2bGV0Q29udGV4dCNzZXRSZXF1ZXN0L1Jlc3BvbnNlQ2hhcmFjdGVyRW5jb2RpbmciKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC05MCw3ICs5MCw3IEBACiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IGh0dHBSZXNwb25zZS5nZXRCb2R5KGNoYXJzZXQpLnRyaW0oKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0+IGxpbmUgPSAiICsgbGluZSk7CiAgICAgICAgICAgICBpZiAgKCFFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9jb250ZXh0Q2hhckVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvY29udGV4dENoYXJFbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGM0YTQyMTUuLmNiNmUzN2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9jb250ZXh0Q2hhckVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2NvbnRleHRDaGFyRW5jb2RpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtNC4wLWNvbnRleHQtY2hhci1lbmNvZGluZyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC00LjAtY29udGV4dC1jaGFyLWVuY29kaW5nIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2NvbnRleHRDaGFyRW5jb2RpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2NvbnRleHRDaGFyRW5jb2RpbmcvYnVpbGQueG1sCmluZGV4IDc4ZDdjMzkuLjNhZWRiOWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9jb250ZXh0Q2hhckVuY29kaW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvY29udGV4dENoYXJFbmNvZGluZy9idWlsZC54bWwKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDUsMTAgKzQ1LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIj4KICAgICAgICAgICAgIDxjbGFzc3BhdGg+CkBAIC01NiwxMCArNTYsMTAgQEAKICAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvd2VidGVzdC5qYXIiLz4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmFjPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0IiBmb3JrPSJ0cnVlIj4KICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJTMUFTX0hPTUUiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9Ii8+CkBAIC04MywxMCArODMsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvZGVmYXVsdENvbnRleHRQYXRoL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9kZWZhdWx0Q29udGV4dFBhdGgvV2ViVGVzdC5qYXZhCmluZGV4IDNhNmZjNzIuLjZiYTdlNGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9kZWZhdWx0Q29udGV4dFBhdGgvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9kZWZhdWx0Q29udGV4dFBhdGgvV2ViVGVzdC5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgIGhvc3QgPSBhcmdzWzBdOwogICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgZGVmYXVsdC1jb250ZXh0LXBhdGggc2V0dGluZyBpbiB3ZWIueG1sIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDQsOCArNDQsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VKc3AoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvZGVmYXVsdENvbnRleHRQYXRoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvZGVmYXVsdENvbnRleHRQYXRoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjI5Y2FmOS4uYjk0MDRiNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2RlZmF1bHRDb250ZXh0UGF0aC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9kZWZhdWx0Q29udGV4dFBhdGgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTQuMC1kZWZhdWx0LWNvbnRleHQtcGF0aCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2RlZmF1bHRDb250ZXh0UGF0aC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvZGVmYXVsdENvbnRleHRQYXRoL2J1aWxkLnhtbAppbmRleCBjYTQ4NTgyLi5mYzViYThjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvZGVmYXVsdENvbnRleHRQYXRoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvZGVmYXVsdENvbnRleHRQYXRoL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywxMCArNDcsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgaW5jbHVkZXM9IldlYlRlc3QuamF2YSI+CkBAIC01OSwxNCArNTksMTQgQEAKICAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvd2VidGVzdC5qYXIiLz4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmFjPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItbm8tY29udGV4dC1yb290Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiIGZvcms9InRydWUiPgogICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9IlMxQVNfSE9NRSIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0iLz4KQEAgLTgxLDEwICs4MSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9kZWZhdWx0Q29udGV4dFBhdGhFYXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2RlZmF1bHRDb250ZXh0UGF0aEVhci9XZWJUZXN0LmphdmEKaW5kZXggM2FjMzE5MC4uOTViZDE2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2RlZmF1bHRDb250ZXh0UGF0aEVhci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2RlZmF1bHRDb250ZXh0UGF0aEVhci9XZWJUZXN0LmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgaG9zdCA9IGFyZ3NbMF07CiAgICAgICAgIHBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMV0pOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBkZWZhdWx0LWNvbnRleHQtcGF0aCBzZXR0aW5nIGluIHdlYi54bWwgaW4gYW4gZWFyIGZpbGUiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00NCw4ICs0NCw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZUpzcCgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9kZWZhdWx0Q29udGV4dFBhdGhFYXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9kZWZhdWx0Q29udGV4dFBhdGhFYXIvYnVpbGQucHJvcGVydGllcwppbmRleCBkYmJlN2Q0Li5iMWViM2M5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvZGVmYXVsdENvbnRleHRQYXRoRWFyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2RlZmF1bHRDb250ZXh0UGF0aEVhci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtNC4wLWRlZmF1bHQtY29udGV4dC1wYXRoLWVhciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2RlZmF1bHRDb250ZXh0UGF0aEVhci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvZGVmYXVsdENvbnRleHRQYXRoRWFyL2J1aWxkLnhtbAppbmRleCAxN2E1NGM2Li4yNDE4MGI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvZGVmYXVsdENvbnRleHRQYXRoRWFyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvZGVmYXVsdENvbnRleHRQYXRoRWFyL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC02NSwxMiArNjUsMTIgQEAKICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9IiBpbmNsdWRlcz0iKi53YXIiLz4KICAgICAgICAgPC9qYXI+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiIGZvcms9InRydWUiPgogICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9IlMxQVNfSE9NRSIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0iLz4KQEAgLTg1LDEwICs4NSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3ZlcnkvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3ZlcnkvV2ViVGVzdC5qYXZhCmluZGV4IDU0Y2YwNDAuLjBkMjdjOTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9XZWJUZXN0LmphdmEKQEAgLTQyLDkgKzQyLDkgQEAKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgICAgICBhcHBOYW1lID0gYXJnc1szXTsKICAgICAgICAgc2VydmVyTG9nID0gYXJnc1s0XTsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBtYXBwaW5nIGRpc2NvdmVyeSIpOwpAQCAtNTcsMTIgKzU3LDEyIEBACiAgICAgICAgICAgICBib29sZWFuIGV4dGVuc2lvbk1hdGNoID0gd2ViVGVzdC5ydW4oIkdFVCIsIDIwMCwgZmFsc2UsICIvZm9vLklzc3VlNzMiLCAiLipTZXJ2bGV0Qy5NYXBwaW5nSW1wbFxce21hdGNoVmFsdWU9Zm9vLipwYXR0ZXJuPVxcKlxcLklzc3VlNzMuKnNlcnZsZXROYW1lPVNlcnZsZXRDLiptYXBwaW5nTWF0Y2g9RVhURU5TSU9OXFx9LipGT1JXQVJEX01BUFBJTkc6IG51bGwuKklOQ0xVREVfTUFQUElORzogbnVsbC4qQVNZTkNfTUFQUElORzogbnVsbC4qIik7CiAgICAgICAgICAgICBib29sZWFuIHBhdGhNYXRjaCA9IHdlYlRlc3QucnVuKCJHRVQiLCAyMDAsIGZhbHNlLCAiL3BhdGgvZm9vIiwgIi4qU2VydmxldEMuTWFwcGluZ0ltcGxcXHttYXRjaFZhbHVlPWZvby4qcGF0dGVybj0vcGF0aC9cXCouKnNlcnZsZXROYW1lPVNlcnZsZXRDLiptYXBwaW5nTWF0Y2g9UEFUSFxcfS4qRk9SV0FSRF9NQVBQSU5HOiBudWxsLipJTkNMVURFX01BUFBJTkc6IG51bGwuKkFTWU5DX01BUFBJTkc6IG51bGwuKiIpOwogCi0gICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUgKyAiLXNpbXBsZSIsICgoY29udGV4dFJvb3RNYXRjaCAmJiAKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSArICItc2ltcGxlIiwgKChjb250ZXh0Um9vdE1hdGNoICYmCiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRNYXRjaCAmJgotICAgICAgICAgICAgICAgICAgICBleGFjdE1hdGNoICYmIAorICAgICAgICAgICAgICAgICAgICBleGFjdE1hdGNoICYmCiAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbk1hdGNoICYmCiAgICAgICAgICAgICAgICAgICAgIHBhdGhNYXRjaCk/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGJvb2xlYW4gYXN5bmNNYXRjaDEgPSB3ZWJUZXN0LnJ1bigiR0VUIiwgMjAwLCBmYWxzZSwgIi9BQXN5bmNEaXNwYXRjaFRvQyIsICIuKlNlcnZsZXRDLk1hcHBpbmdJbXBsXFx7bWF0Y2hWYWx1ZT1BQXN5bmNEaXNwYXRjaFRvQy4qcGF0dGVybj0vQUFzeW5jRGlzcGF0Y2hUb0MuKnNlcnZsZXROYW1lPUFBc3luY0Rpc3BhdGNoVG9DLC4qbWFwcGluZ01hdGNoPUVYQUNUXFx9LipGT1JXQVJEX01BUFBJTkc6IG51bGwuKklOQ0xVREVfTUFQUElORzogbnVsbC4qQVNZTkNfTUFQUElORzouKk1hcHBpbmdJbXBsXFx7bWF0Y2hWYWx1ZT1BQXN5bmNEaXNwYXRjaFRvQy4qcGF0dGVybj0vQUFzeW5jRGlzcGF0Y2hUb0MuKnNlcnZsZXROYW1lPUFBc3luY0Rpc3BhdGNoVG9DLiptYXBwaW5nTWF0Y2g9RVhBQ1R9LioiKTsKIAogICAgICAgICAgICAgYm9vbGVhbiBhc3luY01hdGNoMiA9IHdlYlRlc3QucnVuKCJHRVQiLCAyMDAsIGZhbHNlLCAiL0JJbmNsdWRlRGlzcGF0Y2hTZXJ2bGV0TmFtZWREaXNwYXRjaGVyIiwgIi4qSW4uU2VydmxldEMuTWFwcGluZ0ltcGxcXHttYXRjaFZhbHVlPUJJbmNsdWRlRGlzcGF0Y2hTZXJ2bGV0TmFtZWREaXNwYXRjaGVyLC5wYXR0ZXJuPS9CSW5jbHVkZURpc3BhdGNoU2VydmxldE5hbWVkRGlzcGF0Y2hlciwuc2VydmxldE5hbWU9QkluY2x1ZGVEaXNwYXRjaFNlcnZsZXROYW1lZERpc3BhdGNoZXIsLm1hcHBpbmdNYXRjaD1FWEFDVFxcfS4qRk9SV0FSRF9NQVBQSU5HOi5udWxsLipJTkNMVURFX01BUFBJTkc6Lm51bGwuKkFTWU5DX01BUFBJTkc6Lk1hcHBpbmdJbXBsXFx7bWF0Y2hWYWx1ZT1CSW5jbHVkZURpc3BhdGNoU2VydmxldE5hbWVkRGlzcGF0Y2hlciwucGF0dGVybj0vQkluY2x1ZGVEaXNwYXRjaFNlcnZsZXROYW1lZERpc3BhdGNoZXIsLnNlcnZsZXROYW1lPUJJbmNsdWRlRGlzcGF0Y2hTZXJ2bGV0TmFtZWREaXNwYXRjaGVyLC5tYXBwaW5nTWF0Y2g9RVhBQ1RcXH0uKiIpOwpAQCAtNzAsMTggKzcwLDE4IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUgKyAiLWFzeW5jIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jTWF0Y2gxICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luY01hdGNoMiA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYm9vbGVhbiBmb3J3YXJkTWF0Y2gxID0gd2ViVGVzdC5ydW4oIkdFVCIsIDIwMCwgZmFsc2UsICIvQUZvcndhcmRUb0IiLCAiLipTZXJ2bGV0Qy5NYXBwaW5nSW1wbFxce21hdGNoVmFsdWU9U2VydmxldEMsLipwYXR0ZXJuPS9TZXJ2bGV0QywuKnNlcnZsZXROYW1lPVNlcnZsZXRDLC4qbWFwcGluZ01hdGNoPUVYQUNUXFx9LipGT1JXQVJEX01BUFBJTkc6Lk1hcHBpbmdJbXBsXFx7bWF0Y2hWYWx1ZT1BRm9yd2FyZFRvQiwucGF0dGVybj0vQUZvcndhcmRUb0IsLnNlcnZsZXROYW1lPUFGb3J3YXJkVG9CLC5tYXBwaW5nTWF0Y2g9RVhBQ1RcXH0uKklOQ0xVREVfTUFQUElORzoubnVsbC4qQVNZTkNfTUFQUElORzoubnVsbC4qIik7CiAgICAgICAgICAgICBib29sZWFuIGZvcndhcmRNYXRjaDIgPSB3ZWJUZXN0LnJ1bigiR0VUIiwgMjAwLCBmYWxzZSwgIi9CRm9yd2FyZFRvQyIsICIuKlNlcnZsZXRDLk1hcHBpbmdJbXBsXFx7bWF0Y2hWYWx1ZT1TZXJ2bGV0QywuKnBhdHRlcm49L1NlcnZsZXRDLC4qc2VydmxldE5hbWU9U2VydmxldEMsLiptYXBwaW5nTWF0Y2g9RVhBQ1RcXH0uKkZPUldBUkRfTUFQUElORzouTWFwcGluZ0ltcGxcXHttYXRjaFZhbHVlPUJGb3J3YXJkVG9DLC5wYXR0ZXJuPS9CRm9yd2FyZFRvQywuc2VydmxldE5hbWU9QkZvcndhcmRUb0MsLm1hcHBpbmdNYXRjaD1FWEFDVFxcfS4qSU5DTFVERV9NQVBQSU5HOi5udWxsLipBU1lOQ19NQVBQSU5HOi5udWxsLioiKTsKIAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FICsgIi1mb3J3YXJkIiwgKChmb3J3YXJkTWF0Y2gxICYmCiAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRNYXRjaDIpPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBib29sZWFuIGluY2x1ZGVNYXRjaDEgPSB3ZWJUZXN0LnJ1bigiR0VUIiwgMjAwLCBmYWxzZSwgIi9BSW5jbHVkZXNCIiwgIi4qQUluY2x1ZGVzQi5NYXBwaW5nSW1wbFxce21hdGNoVmFsdWU9QUluY2x1ZGVzQiwucGF0dGVybj0vQUluY2x1ZGVzQiwuc2VydmxldE5hbWU9QUluY2x1ZGVzQiwubWFwcGluZ01hdGNoPUVYQUNUXFx9LipGT1JXQVJEX01BUFBJTkc6Lm51bGwuKklOQ0xVREVfTUFQUElORzoubnVsbC4qSW4uQkluY2x1ZGVzQy5NYXBwaW5nSW1wbFxce21hdGNoVmFsdWU9QUluY2x1ZGVzQiwucGF0dGVybj0vQUluY2x1ZGVzQiwuc2VydmxldE5hbWU9QUluY2x1ZGVzQiwubWFwcGluZ01hdGNoPUVYQUNUXFx9LipGT1JXQVJEX01BUFBJTkc6Lm51bGwuKklOQ0xVREVfTUFQUElORzouTWFwcGluZ0ltcGxcXHttYXRjaFZhbHVlPUJJbmNsdWRlc0MsLnBhdHRlcm49L0JJbmNsdWRlc0MsLnNlcnZsZXROYW1lPUJJbmNsdWRlc0MsLm1hcHBpbmdNYXRjaD1FWEFDVFxcfS4qSW4uU2VydmxldEMuTWFwcGluZ0ltcGxcXHttYXRjaFZhbHVlPUFJbmNsdWRlc0IsLnBhdHRlcm49L0FJbmNsdWRlc0IsLnNlcnZsZXROYW1lPUFJbmNsdWRlc0IsLm1hcHBpbmdNYXRjaD1FWEFDVFxcfS4qRk9SV0FSRF9NQVBQSU5HOi5udWxsLipJTkNMVURFX01BUFBJTkc6Lk1hcHBpbmdJbXBsXFx7bWF0Y2hWYWx1ZT1TZXJ2bGV0QywucGF0dGVybj0vU2VydmxldEMsLnNlcnZsZXROYW1lPVNlcnZsZXRDLC5tYXBwaW5nTWF0Y2g9RVhBQ1RcXH0uKkFTWU5DX01BUFBJTkc6Lm51bGwuKiIpOwogICAgICAgICAgICAgYm9vbGVhbiBpbmNsdWRlTWF0Y2gyID0gd2ViVGVzdC5ydW4oIkdFVCIsIDIwMCwgZmFsc2UsICIvQkluY2x1ZGVzQyIsICIuKkluLkJJbmNsdWRlc0MuTWFwcGluZ0ltcGxcXHttYXRjaFZhbHVlPUJJbmNsdWRlc0MsLnBhdHRlcm49L0JJbmNsdWRlc0MsLnNlcnZsZXROYW1lPUJJbmNsdWRlc0MsLm1hcHBpbmdNYXRjaD1FWEFDVFxcfS4qLkZPUldBUkRfTUFQUElORzoubnVsbC4qLklOQ0xVREVfTUFQUElORzoubnVsbC4qSW4uU2VydmxldEMuTWFwcGluZ0ltcGxcXHttYXRjaFZhbHVlPUJJbmNsdWRlc0MsLnBhdHRlcm49L0JJbmNsdWRlc0MsLnNlcnZsZXROYW1lPUJJbmNsdWRlc0MsLm1hcHBpbmdNYXRjaD1FWEFDVFxcfS4qLkZPUldBUkRfTUFQUElORzoubnVsbC4qLklOQ0xVREVfTUFQUElORzouTWFwcGluZ0ltcGxcXHttYXRjaFZhbHVlPVNlcnZsZXRDLC5wYXR0ZXJuPS9TZXJ2bGV0Qywuc2VydmxldE5hbWU9U2VydmxldEMsLm1hcHBpbmdNYXRjaD1FWEFDVFxcfS4qLkFTWU5DX01BUFBJTkc6Lm51bGwuKiIpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FICsgIi1pbmNsdWRlIiwgKChpbmNsdWRlTWF0Y2gxICYmCiAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVNYXRjaDIpPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBib29sZWFuIGJvdW5kc01hdGNoMSA9IHdlYlRlc3QucnVuKCJHRVQiLCAyMDAsIGZhbHNlLCAiL2EvZm9vIiwgIi4qIik7CiAgICAgICAgICAgICBib29sZWFuIGJvdW5kc01hdGNoMiA9IHdlYlRlc3QucnVuKCJHRVQiLCAyMDAsIGZhbHNlLCAiL2YiLCAiLioiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSArICItYm91bmRzIiwgKChib3VuZHNNYXRjaDEgJiYgYm91bmRzTWF0Y2gyKT8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CkBAIC05MSwxNCArOTEsMTQgQEAKICAgICAgICAgICAgIGJvb2xlYW4gbmFtZWREaXNwYXRjaE1hdGNoMiA9IHdlYlRlc3QucnVuKCJHRVQiLCAyMDAsIGZhbHNlLCAiL0JJbmNsdWRlQ05hbWVkRGlzcGF0Y2hlciIsICIuKkluLlNlcnZsZXRDLk1hcHBpbmdJbXBsXFx7bWF0Y2hWYWx1ZT1CSW5jbHVkZUNOYW1lZERpc3BhdGNoZXIsLnBhdHRlcm49L0JJbmNsdWRlQ05hbWVkRGlzcGF0Y2hlciwuc2VydmxldE5hbWU9QkluY2x1ZGVDTmFtZWREaXNwYXRjaGVyLC5tYXBwaW5nTWF0Y2g9RVhBQ1RcXH08L3A+PHA+LkZPUldBUkRfTUFQUElORzoubnVsbDwvcD48cD4uSU5DTFVERV9NQVBQSU5HOi5udWxsPC9wPjxwPi5BU1lOQ19NQVBQSU5HOi5udWxsLioiKTsKIAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FICsgIi1uYW1lZERpc3BhdGNoIiwgKChuYW1lZERpc3BhdGNoTWF0Y2gxICYmIG5hbWVkRGlzcGF0Y2hNYXRjaDIpPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgCisKKwogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLSAgICAJc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwcml2YXRlIGJvb2xlYW4gcnVuKFN0cmluZyBtZXRob2QsCkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICAgICAgICAgICAgICBob3N0KGhvc3QpLnBvcnQocG9ydCkuYnVpbGQoKSkgewogICAgICAgICAgICAgaHR0cENsaWVudC5yZXF1ZXN0KCkucGF0aChwYXRoKS5tZXRob2QobWV0aG9kKS5idWlsZCgpLnNlbmQoKTsKICAgICAgICAgICAgIEh0dHBSZXNwb25zZSBodHRwUmVzcG9uc2UgPSBodHRwQ2xpZW50LmdldEh0dHBSZXNwb25zZSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGludCBjb2RlID0gaHR0cFJlc3BvbnNlLmdldFN0YXR1cygpOwogICAgICAgICAgICAgYm9vbGVhbiBvayA9IChjb2RlID09IHN0YXR1cyk7CiAgICAgICAgICAgICBpZiAoY2hlY2tPS1N0YXR1c09ubHkpIHsKQEAgLTExNiw3ICsxMTYsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbnVsbDsKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgU3RyaW5nUmVhZGVyKGh0dHBSZXNwb25zZS5nZXRCb2R5KCkpKTsKICAgICAgICAgICAgICAgICBsaW5lID0gYmlzLnJlYWRMaW5lKCk7CkBAIC0xMjQsNyArMTI0LDcgQEAKICAgICAgICAgICAgICAgICBvayA9IGxpbmUubWF0Y2hlcyhtYXRjaFJlZ2V4KTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm1hdGNoZXM6ICIgKyBvayk7CiAgICAgICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRlc3QgVU5QUkVESUNURUQtRkFJTFVSRSIpOwogICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgICB0cnkgewpAQCAtMTM1LDkgKzEzNSw5IEBACiAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICByZXR1cm4gb2s7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGFhYWE0MmYuLjBkMTNkMDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3ZlcnkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTQuMC1tYXBwaW5nLWRpc2NvdmVyeSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3ZlcnkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3ZlcnkvYnVpbGQueG1sCmluZGV4IGZlZjcyNTEuLjA0ZjI2YTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IldlYlRlc3QuY2xhc3MiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NiwxMCArNDYsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgaW5jbHVkZXM9IldlYlRlc3QuamF2YSI+CkBAIC01OSwxNCArNTksMTQgQEAKICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmFjPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCIgZm9yaz0idHJ1ZSI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJTMUFTX0hPTUUiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNGUzM2IzMy4uNTBjNjkzYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3ZlcnkvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICA8c2VydmxldC1uYW1lPkJJbmNsdWRlc0M8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9CSW5jbHVkZXNDPC91cmwtcGF0dGVybj4KICAgICA8L3NlcnZsZXQtbWFwcGluZz4KLSAgICAKKwogICAgIDwhLS0gYXN5bmMgY2FzZXMgLS0+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+QUFzeW5jRGlzcGF0Y2hUb0M8L3NlcnZsZXQtbmFtZT4KQEAgLTExMiw1ICsxMTIsNSBAQAogICAgICAgICA8dXJsLXBhdHRlcm4+L2EvKjwvdXJsLXBhdHRlcm4+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vLyo8L3VybC1wYXR0ZXJuPgogICAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgIAorCiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0FBc3luY0Rpc3BhdGNoVG9DLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0FBc3luY0Rpc3BhdGNoVG9DLmphdmEKaW5kZXggOTc3MGFhMi4uMDNlYTU2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9BQXN5bmNEaXNwYXRjaFRvQy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvQUFzeW5jRGlzcGF0Y2hUb0MuamF2YQpAQCAtMzcsMTcgKzM3LDE3IEBACiAgICAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1JlcXVlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBBc3luY0NvbnRleHQgYXN5bmNDb250ZXh0ID0gcmVxdWVzdC5zdGFydEFzeW5jKCk7Ci0gICAgICAgIAotICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIGdldEh0dHBTZXJ2bGV0TWFwcGluZzogIiAKKworICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIGdldEh0dHBTZXJ2bGV0TWFwcGluZzogIgogICAgICAgICAgICAgICAgICsgcmVxdWVzdC5nZXRIdHRwU2VydmxldE1hcHBpbmcoKSk7CiAgICAgICAgIEh0dHBTZXJ2bGV0TWFwcGluZyBmb3J3YXJkTWFwcGluZyA9IChIdHRwU2VydmxldE1hcHBpbmcpIHJlcXVlc3QuZ2V0QXR0cmlidXRlKFJlcXVlc3REaXNwYXRjaGVyLkZPUldBUkRfTUFQUElORyk7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgRk9SV0FSRF9NQVBQSU5HIGF0dHJpYnV0ZTogIiAKKyAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBGT1JXQVJEX01BUFBJTkcgYXR0cmlidXRlOiAiCiAgICAgICAgICAgICAgICAgKyBmb3J3YXJkTWFwcGluZyk7CiAgICAgICAgIEh0dHBTZXJ2bGV0TWFwcGluZyBpbmNsdWRlTWFwcGluZyA9IChIdHRwU2VydmxldE1hcHBpbmcpIHJlcXVlc3QuZ2V0QXR0cmlidXRlKFJlcXVlc3REaXNwYXRjaGVyLklOQ0xVREVfTUFQUElORyk7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgSU5DTFVERV9NQVBQSU5HIGF0dHJpYnV0ZTogIiAKKyAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBJTkNMVURFX01BUFBJTkcgYXR0cmlidXRlOiAiCiAgICAgICAgICAgICAgICAgKyBpbmNsdWRlTWFwcGluZyk7CiAgICAgICAgIEh0dHBTZXJ2bGV0TWFwcGluZyBhc3luY01hcHBpbmcgPSAoSHR0cFNlcnZsZXRNYXBwaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZShBc3luY0NvbnRleHQuQVNZTkNfTUFQUElORyk7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgQVNZTkNfTUFQUElORyBhdHRyaWJ1dGU6ICIgCisgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgQVNZTkNfTUFQUElORyBhdHRyaWJ1dGU6ICIKICAgICAgICAgICAgICAgICArIGFzeW5jTWFwcGluZyk7CiAgICAgICAgIGFzeW5jQ29udGV4dC5kaXNwYXRjaCgiL1NlcnZsZXRDIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9BRm9yd2FyZFRvQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9BRm9yd2FyZFRvQi5qYXZhCmluZGV4IGY4N2JlNjUuLjkwYWUyYzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvQUZvcndhcmRUb0IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0FGb3J3YXJkVG9CLmphdmEKQEAgLTM3LDE2ICszNywxNiBAQAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NSZXF1ZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBnZXRIdHRwU2VydmxldE1hcHBpbmc6ICIgCisgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgZ2V0SHR0cFNlcnZsZXRNYXBwaW5nOiAiCiAgICAgICAgICAgICAgICAgKyByZXF1ZXN0LmdldEh0dHBTZXJ2bGV0TWFwcGluZygpKTsKICAgICAgICAgSHR0cFNlcnZsZXRNYXBwaW5nIGZvcndhcmRNYXBwaW5nID0gKEh0dHBTZXJ2bGV0TWFwcGluZykgcmVxdWVzdC5nZXRBdHRyaWJ1dGUoUmVxdWVzdERpc3BhdGNoZXIuRk9SV0FSRF9NQVBQSU5HKTsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBGT1JXQVJEX01BUFBJTkcgYXR0cmlidXRlOiAiIAorICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEZPUldBUkRfTUFQUElORyBhdHRyaWJ1dGU6ICIKICAgICAgICAgICAgICAgICArIGZvcndhcmRNYXBwaW5nKTsKICAgICAgICAgSHR0cFNlcnZsZXRNYXBwaW5nIGluY2x1ZGVNYXBwaW5nID0gKEh0dHBTZXJ2bGV0TWFwcGluZykgcmVxdWVzdC5nZXRBdHRyaWJ1dGUoUmVxdWVzdERpc3BhdGNoZXIuSU5DTFVERV9NQVBQSU5HKTsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBJTkNMVURFX01BUFBJTkcgYXR0cmlidXRlOiAiIAorICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIElOQ0xVREVfTUFQUElORyBhdHRyaWJ1dGU6ICIKICAgICAgICAgICAgICAgICArIGluY2x1ZGVNYXBwaW5nKTsKICAgICAgICAgSHR0cFNlcnZsZXRNYXBwaW5nIGFzeW5jTWFwcGluZyA9IChIdHRwU2VydmxldE1hcHBpbmcpIHJlcXVlc3QuZ2V0QXR0cmlidXRlKEFzeW5jQ29udGV4dC5BU1lOQ19NQVBQSU5HKTsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBBU1lOQ19NQVBQSU5HIGF0dHJpYnV0ZTogIiAKKyAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBBU1lOQ19NQVBQSU5HIGF0dHJpYnV0ZTogIgogICAgICAgICAgICAgICAgICsgYXN5bmNNYXBwaW5nKTsKICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmQgPSByZXF1ZXN0LmdldFJlcXVlc3REaXNwYXRjaGVyKCIvQkZvcndhcmRUb0MiKTsKICAgICAgICAgcmQuZm9yd2FyZChyZXF1ZXN0LCByZXNwb25zZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0FJbmNsdWRlc0IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvQUluY2x1ZGVzQi5qYXZhCmluZGV4IDEzZDRhOWYuLmMzMjE5YWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvQUluY2x1ZGVzQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvQUluY2x1ZGVzQi5qYXZhCkBAIC00NCwxNyArNDQsMTcgQEAKICAgICAgICAgICAgIG91dC5wcmludCgiPCFET0NUWVBFIGh0bWw+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnQoIjxodG1sPiIpOwogICAgICAgICAgICAgb3V0LnByaW50KCI8aGVhZD4iKTsKLSAgICAgICAgICAgIG91dC5wcmludCgiPHRpdGxlPlNlcnZsZXQgQUluY2x1ZGVzQjwvdGl0bGU+Iik7ICAgICAgICAgICAgCisgICAgICAgICAgICBvdXQucHJpbnQoIjx0aXRsZT5TZXJ2bGV0IEFJbmNsdWRlc0I8L3RpdGxlPiIpOwogICAgICAgICAgICAgb3V0LnByaW50KCI8L2hlYWQ+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnQoIjxib2R5PiIpOwogICAgICAgICAgICAgb3V0LnByaW50KCI8aDE+U2VydmxldCBBSW5jbHVkZXNCIGF0ICIgKyByZXF1ZXN0LmdldENvbnRleHRQYXRoKCkgKyAiPC9oMT4iKTsKLSAgICAgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgZ2V0SHR0cFNlcnZsZXRNYXBwaW5nOiAiIAorICAgICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBnZXRIdHRwU2VydmxldE1hcHBpbmc6ICIKICAgICAgICAgICAgICAgICAgICAgKyByZXF1ZXN0LmdldEh0dHBTZXJ2bGV0TWFwcGluZygpKTsKICAgICAgICAgICAgIEh0dHBTZXJ2bGV0TWFwcGluZyBmb3J3YXJkTWFwcGluZyA9IChIdHRwU2VydmxldE1hcHBpbmcpIHJlcXVlc3QuZ2V0QXR0cmlidXRlKFJlcXVlc3REaXNwYXRjaGVyLkZPUldBUkRfTUFQUElORyk7Ci0gICAgICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEZPUldBUkRfTUFQUElORyBhdHRyaWJ1dGU6ICIgCisgICAgICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEZPUldBUkRfTUFQUElORyBhdHRyaWJ1dGU6ICIKICAgICAgICAgICAgICAgICAgICAgKyBmb3J3YXJkTWFwcGluZyk7CiAgICAgICAgICAgICBIdHRwU2VydmxldE1hcHBpbmcgaW5jbHVkZU1hcHBpbmcgPSAoSHR0cFNlcnZsZXRNYXBwaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZShSZXF1ZXN0RGlzcGF0Y2hlci5JTkNMVURFX01BUFBJTkcpOwotICAgICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBJTkNMVURFX01BUFBJTkcgYXR0cmlidXRlOiAiIAorICAgICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBJTkNMVURFX01BUFBJTkcgYXR0cmlidXRlOiAiCiAgICAgICAgICAgICAgICAgICAgICsgaW5jbHVkZU1hcHBpbmcpOwogICAgICAgICAgICAgb3V0LnByaW50KCI8cD4gSW4gIiArIHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiICIgKyByZXF1ZXN0LmdldEh0dHBTZXJ2bGV0TWFwcGluZygpICsgIjwvcD4iKTsKICAgICAgICAgICAgIG91dC5wcmludCgiPHA+IEZPUldBUkRfTUFQUElORzogIiArIGZvcndhcmRNYXBwaW5nICsgIjwvcD4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvQkZvcndhcmRUb0MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvQkZvcndhcmRUb0MuamF2YQppbmRleCBjOTM0ZGI2Li4yYWRmNGVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0JGb3J3YXJkVG9DLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9CRm9yd2FyZFRvQy5qYXZhCkBAIC0zNywxNiArMzcsMTYgQEAKICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzUmVxdWVzdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgIiAKKyAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiAiCiAgICAgICAgICAgICAgICAgKyByZXF1ZXN0LmdldEh0dHBTZXJ2bGV0TWFwcGluZygpKTsKICAgICAgICAgSHR0cFNlcnZsZXRNYXBwaW5nIGZvcndhcmRNYXBwaW5nID0gKEh0dHBTZXJ2bGV0TWFwcGluZykgcmVxdWVzdC5nZXRBdHRyaWJ1dGUoUmVxdWVzdERpc3BhdGNoZXIuRk9SV0FSRF9NQVBQSU5HKTsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBGT1JXQVJEX01BUFBJTkcgYXR0cmlidXRlOiAiIAorICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEZPUldBUkRfTUFQUElORyBhdHRyaWJ1dGU6ICIKICAgICAgICAgICAgICAgICArIGZvcndhcmRNYXBwaW5nKTsKICAgICAgICAgSHR0cFNlcnZsZXRNYXBwaW5nIGluY2x1ZGVNYXBwaW5nID0gKEh0dHBTZXJ2bGV0TWFwcGluZykgcmVxdWVzdC5nZXRBdHRyaWJ1dGUoUmVxdWVzdERpc3BhdGNoZXIuSU5DTFVERV9NQVBQSU5HKTsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBJTkNMVURFX01BUFBJTkcgYXR0cmlidXRlOiAiIAorICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIElOQ0xVREVfTUFQUElORyBhdHRyaWJ1dGU6ICIKICAgICAgICAgICAgICAgICArIGluY2x1ZGVNYXBwaW5nKTsKICAgICAgICAgSHR0cFNlcnZsZXRNYXBwaW5nIGFzeW5jTWFwcGluZyA9IChIdHRwU2VydmxldE1hcHBpbmcpIHJlcXVlc3QuZ2V0QXR0cmlidXRlKEFzeW5jQ29udGV4dC5BU1lOQ19NQVBQSU5HKTsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBBU1lOQ19NQVBQSU5HIGF0dHJpYnV0ZTogIiAKKyAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBBU1lOQ19NQVBQSU5HIGF0dHJpYnV0ZTogIgogICAgICAgICAgICAgICAgICsgYXN5bmNNYXBwaW5nKTsKICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmQgPSByZXF1ZXN0LmdldFJlcXVlc3REaXNwYXRjaGVyKCIvU2VydmxldEMiKTsKICAgICAgICAgcmQuZm9yd2FyZChyZXF1ZXN0LCByZXNwb25zZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0JGb3J3YXJkVG9DTmFtZWREaXNwYXRjaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0JGb3J3YXJkVG9DTmFtZWREaXNwYXRjaGVyLmphdmEKaW5kZXggNzM3MTk3NS4uNzFhNWI0ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9CRm9yd2FyZFRvQ05hbWVkRGlzcGF0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvQkZvcndhcmRUb0NOYW1lZERpc3BhdGNoZXIuamF2YQpAQCAtMzcsMTYgKzM3LDE2IEBACiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1JlcXVlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiICIgCisgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgIgogICAgICAgICAgICAgICAgICsgcmVxdWVzdC5nZXRIdHRwU2VydmxldE1hcHBpbmcoKSk7CiAgICAgICAgIEh0dHBTZXJ2bGV0TWFwcGluZyBmb3J3YXJkTWFwcGluZyA9IChIdHRwU2VydmxldE1hcHBpbmcpIHJlcXVlc3QuZ2V0QXR0cmlidXRlKFJlcXVlc3REaXNwYXRjaGVyLkZPUldBUkRfTUFQUElORyk7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgRk9SV0FSRF9NQVBQSU5HIGF0dHJpYnV0ZTogIiAKKyAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBGT1JXQVJEX01BUFBJTkcgYXR0cmlidXRlOiAiCiAgICAgICAgICAgICAgICAgKyBmb3J3YXJkTWFwcGluZyk7CiAgICAgICAgIEh0dHBTZXJ2bGV0TWFwcGluZyBpbmNsdWRlTWFwcGluZyA9IChIdHRwU2VydmxldE1hcHBpbmcpIHJlcXVlc3QuZ2V0QXR0cmlidXRlKFJlcXVlc3REaXNwYXRjaGVyLklOQ0xVREVfTUFQUElORyk7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgSU5DTFVERV9NQVBQSU5HIGF0dHJpYnV0ZTogIiAKKyAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBJTkNMVURFX01BUFBJTkcgYXR0cmlidXRlOiAiCiAgICAgICAgICAgICAgICAgKyBpbmNsdWRlTWFwcGluZyk7CiAgICAgICAgIEh0dHBTZXJ2bGV0TWFwcGluZyBhc3luY01hcHBpbmcgPSAoSHR0cFNlcnZsZXRNYXBwaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZShBc3luY0NvbnRleHQuQVNZTkNfTUFQUElORyk7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgQVNZTkNfTUFQUElORyBhdHRyaWJ1dGU6ICIgCisgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgQVNZTkNfTUFQUElORyBhdHRyaWJ1dGU6ICIKICAgICAgICAgICAgICAgICArIGFzeW5jTWFwcGluZyk7CiAgICAgICAgIFJlcXVlc3REaXNwYXRjaGVyIHJkID0gcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmdldE5hbWVkRGlzcGF0Y2hlcigiU2VydmxldEMiKTsKICAgICAgICAgcmQuZm9yd2FyZChyZXF1ZXN0LCByZXNwb25zZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0JJbmNsdWRlQ05hbWVkRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9CSW5jbHVkZUNOYW1lZERpc3BhdGNoZXIuamF2YQppbmRleCA0NTc5YzBkLi5jNjU3MTJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0JJbmNsdWRlQ05hbWVkRGlzcGF0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvQkluY2x1ZGVDTmFtZWREaXNwYXRjaGVyLmphdmEKQEAgLTM3LDE2ICszNywxNiBAQAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NSZXF1ZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiAiIAorICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiICIKICAgICAgICAgICAgICAgICArIHJlcXVlc3QuZ2V0SHR0cFNlcnZsZXRNYXBwaW5nKCkpOwogICAgICAgICBIdHRwU2VydmxldE1hcHBpbmcgZm9yd2FyZE1hcHBpbmcgPSAoSHR0cFNlcnZsZXRNYXBwaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZShSZXF1ZXN0RGlzcGF0Y2hlci5GT1JXQVJEX01BUFBJTkcpOwotICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEZPUldBUkRfTUFQUElORyBhdHRyaWJ1dGU6ICIgCisgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgRk9SV0FSRF9NQVBQSU5HIGF0dHJpYnV0ZTogIgogICAgICAgICAgICAgICAgICsgZm9yd2FyZE1hcHBpbmcpOwogICAgICAgICBIdHRwU2VydmxldE1hcHBpbmcgaW5jbHVkZU1hcHBpbmcgPSAoSHR0cFNlcnZsZXRNYXBwaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZShSZXF1ZXN0RGlzcGF0Y2hlci5JTkNMVURFX01BUFBJTkcpOwotICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIElOQ0xVREVfTUFQUElORyBhdHRyaWJ1dGU6ICIgCisgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgSU5DTFVERV9NQVBQSU5HIGF0dHJpYnV0ZTogIgogICAgICAgICAgICAgICAgICsgaW5jbHVkZU1hcHBpbmcpOwogICAgICAgICBIdHRwU2VydmxldE1hcHBpbmcgYXN5bmNNYXBwaW5nID0gKEh0dHBTZXJ2bGV0TWFwcGluZykgcmVxdWVzdC5nZXRBdHRyaWJ1dGUoQXN5bmNDb250ZXh0LkFTWU5DX01BUFBJTkcpOwotICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEFTWU5DX01BUFBJTkcgYXR0cmlidXRlOiAiIAorICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEFTWU5DX01BUFBJTkcgYXR0cmlidXRlOiAiCiAgICAgICAgICAgICAgICAgKyBhc3luY01hcHBpbmcpOwogICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciByZCA9IHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5nZXROYW1lZERpc3BhdGNoZXIoIlNlcnZsZXRDIik7CiAgICAgICAgIHJkLmluY2x1ZGUocmVxdWVzdCwgcmVzcG9uc2UpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9CSW5jbHVkZURpc3BhdGNoU2VydmxldE5hbWVkRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9CSW5jbHVkZURpc3BhdGNoU2VydmxldE5hbWVkRGlzcGF0Y2hlci5qYXZhCmluZGV4IDBmZjc1YjUuLjc4N2Y3NWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvQkluY2x1ZGVEaXNwYXRjaFNlcnZsZXROYW1lZERpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0JJbmNsdWRlRGlzcGF0Y2hTZXJ2bGV0TmFtZWREaXNwYXRjaGVyLmphdmEKQEAgLTM3LDE2ICszNywxNiBAQAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NSZXF1ZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiAiIAorICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiICIKICAgICAgICAgICAgICAgICArIHJlcXVlc3QuZ2V0SHR0cFNlcnZsZXRNYXBwaW5nKCkpOwogICAgICAgICBIdHRwU2VydmxldE1hcHBpbmcgZm9yd2FyZE1hcHBpbmcgPSAoSHR0cFNlcnZsZXRNYXBwaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZShSZXF1ZXN0RGlzcGF0Y2hlci5GT1JXQVJEX01BUFBJTkcpOwotICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEZPUldBUkRfTUFQUElORyBhdHRyaWJ1dGU6ICIgCisgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgRk9SV0FSRF9NQVBQSU5HIGF0dHJpYnV0ZTogIgogICAgICAgICAgICAgICAgICsgZm9yd2FyZE1hcHBpbmcpOwogICAgICAgICBIdHRwU2VydmxldE1hcHBpbmcgaW5jbHVkZU1hcHBpbmcgPSAoSHR0cFNlcnZsZXRNYXBwaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZShSZXF1ZXN0RGlzcGF0Y2hlci5JTkNMVURFX01BUFBJTkcpOwotICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIElOQ0xVREVfTUFQUElORyBhdHRyaWJ1dGU6ICIgCisgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgSU5DTFVERV9NQVBQSU5HIGF0dHJpYnV0ZTogIgogICAgICAgICAgICAgICAgICsgaW5jbHVkZU1hcHBpbmcpOwogICAgICAgICBIdHRwU2VydmxldE1hcHBpbmcgYXN5bmNNYXBwaW5nID0gKEh0dHBTZXJ2bGV0TWFwcGluZykgcmVxdWVzdC5nZXRBdHRyaWJ1dGUoQXN5bmNDb250ZXh0LkFTWU5DX01BUFBJTkcpOwotICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEFTWU5DX01BUFBJTkcgYXR0cmlidXRlOiAiIAorICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEFTWU5DX01BUFBJTkcgYXR0cmlidXRlOiAiCiAgICAgICAgICAgICAgICAgKyBhc3luY01hcHBpbmcpOwogICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciByZCA9IHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5nZXROYW1lZERpc3BhdGNoZXIoImZhNXJhUCIpOwogICAgICAgICByZC5pbmNsdWRlKHJlcXVlc3QsIHJlc3BvbnNlKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvQkluY2x1ZGVzQy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9CSW5jbHVkZXNDLmphdmEKaW5kZXggOWFiYzdjYS4uMjA3NWVhYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9CSW5jbHVkZXNDLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9CSW5jbHVkZXNDLmphdmEKQEAgLTQxLDEzICs0MSwxMyBAQAogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8qIFRPRE8gb3V0cHV0IHlvdXIgcGFnZSBoZXJlLiBZb3UgbWF5IHVzZSBmb2xsb3dpbmcgc2FtcGxlIGNvZGUuICovCi0gICAgICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiICIgCisgICAgICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiICIKICAgICAgICAgICAgICAgICAgICAgKyByZXF1ZXN0LmdldEh0dHBTZXJ2bGV0TWFwcGluZygpKTsKICAgICAgICAgICAgIEh0dHBTZXJ2bGV0TWFwcGluZyBmb3J3YXJkTWFwcGluZyA9IChIdHRwU2VydmxldE1hcHBpbmcpIHJlcXVlc3QuZ2V0QXR0cmlidXRlKFJlcXVlc3REaXNwYXRjaGVyLkZPUldBUkRfTUFQUElORyk7Ci0gICAgICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEZPUldBUkRfTUFQUElORyBhdHRyaWJ1dGU6ICIgCisgICAgICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEZPUldBUkRfTUFQUElORyBhdHRyaWJ1dGU6ICIKICAgICAgICAgICAgICAgICAgICAgKyBmb3J3YXJkTWFwcGluZyk7CiAgICAgICAgICAgICBIdHRwU2VydmxldE1hcHBpbmcgaW5jbHVkZU1hcHBpbmcgPSAoSHR0cFNlcnZsZXRNYXBwaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZShSZXF1ZXN0RGlzcGF0Y2hlci5JTkNMVURFX01BUFBJTkcpOwotICAgICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBJTkNMVURFX01BUFBJTkcgYXR0cmlidXRlOiAiIAorICAgICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBJTkNMVURFX01BUFBJTkcgYXR0cmlidXRlOiAiCiAgICAgICAgICAgICAgICAgICAgICsgaW5jbHVkZU1hcHBpbmcpOwogICAgICAgICAgICAgb3V0LnByaW50KCI8cD4gSW4gIiArIHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiICIgKyByZXF1ZXN0LmdldEh0dHBTZXJ2bGV0TWFwcGluZygpICsgIjwvcD4iKTsKICAgICAgICAgICAgIG91dC5wcmludCgiPHA+IEZPUldBUkRfTUFQUElORzogIiArIGZvcndhcmRNYXBwaW5nICsgIjwvcD4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvRGlzcGF0Y2hTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0Rpc3BhdGNoU2VydmxldC5qYXZhCmluZGV4IGJlODUwYWQuLjQzZWMxYTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvRGlzcGF0Y2hTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9EaXNwYXRjaFNlcnZsZXQuamF2YQpAQCAtMjcsMTggKzI3LDE4IEBACiBwdWJsaWMgY2xhc3MgRGlzcGF0Y2hTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgSU9FeGNlcHRpb257Ci0gICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiAiIAorICAgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyByZXF1ZXN0LmdldEh0dHBTZXJ2bGV0TWFwcGluZygpKTsKICAgICAgICAgICBIdHRwU2VydmxldE1hcHBpbmcgZm9yd2FyZE1hcHBpbmcgPSAoSHR0cFNlcnZsZXRNYXBwaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZShSZXF1ZXN0RGlzcGF0Y2hlci5GT1JXQVJEX01BUFBJTkcpOwotICAgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgRk9SV0FSRF9NQVBQSU5HIGF0dHJpYnV0ZTogIiAKKyAgICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEZPUldBUkRfTUFQUElORyBhdHRyaWJ1dGU6ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZm9yd2FyZE1hcHBpbmcpOwogICAgICAgICAgIEh0dHBTZXJ2bGV0TWFwcGluZyBpbmNsdWRlTWFwcGluZyA9IChIdHRwU2VydmxldE1hcHBpbmcpIHJlcXVlc3QuZ2V0QXR0cmlidXRlKFJlcXVlc3REaXNwYXRjaGVyLklOQ0xVREVfTUFQUElORyk7Ci0gICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBJTkNMVURFX01BUFBJTkcgYXR0cmlidXRlOiAiIAorICAgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgSU5DTFVERV9NQVBQSU5HIGF0dHJpYnV0ZTogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBpbmNsdWRlTWFwcGluZyk7CiAgICAgICAgICAgSHR0cFNlcnZsZXRNYXBwaW5nIGFzeW5jTWFwcGluZyA9IChIdHRwU2VydmxldE1hcHBpbmcpIHJlcXVlc3QuZ2V0QXR0cmlidXRlKEFzeW5jQ29udGV4dC5BU1lOQ19NQVBQSU5HKTsKLSAgICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEFTWU5DX01BUFBJTkcgYXR0cmlidXRlOiAiIAorICAgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgQVNZTkNfTUFQUElORyBhdHRyaWJ1dGU6ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYXN5bmNNYXBwaW5nKTsKLSAgICAgICAgICAKKwogICAgIEFzeW5jQ29udGV4dCBhc3luY0NvbnRleHQgPSByZXF1ZXN0LnN0YXJ0QXN5bmMoKTsKICAgICBhc3luY0NvbnRleHQuc2V0VGltZW91dCgwKTsKICAgICBhc3luY0NvbnRleHQuZGlzcGF0Y2goIi9TZXJ2bGV0QyIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9TZXJ2bGV0Qy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9TZXJ2bGV0Qy5qYXZhCmluZGV4IDIzYWFkODMuLmIxYWI3OTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvU2VydmxldEMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L1NlcnZsZXRDLmphdmEKQEAgLTQxLDE2ICs0MSwxNiBAQAogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8qIFRPRE8gb3V0cHV0IHlvdXIgcGFnZSBoZXJlLiBZb3UgbWF5IHVzZSBmb2xsb3dpbmcgc2FtcGxlIGNvZGUuICovCi0gICAgICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiICIgCisgICAgICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiICIKICAgICAgICAgICAgICAgICAgICAgKyByZXF1ZXN0LmdldEh0dHBTZXJ2bGV0TWFwcGluZygpKTsKICAgICAgICAgICAgIEh0dHBTZXJ2bGV0TWFwcGluZyBmb3J3YXJkTWFwcGluZyA9IChIdHRwU2VydmxldE1hcHBpbmcpIHJlcXVlc3QuZ2V0QXR0cmlidXRlKFJlcXVlc3REaXNwYXRjaGVyLkZPUldBUkRfTUFQUElORyk7Ci0gICAgICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEZPUldBUkRfTUFQUElORyBhdHRyaWJ1dGU6ICIgCisgICAgICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEZPUldBUkRfTUFQUElORyBhdHRyaWJ1dGU6ICIKICAgICAgICAgICAgICAgICAgICAgKyBmb3J3YXJkTWFwcGluZyk7CiAgICAgICAgICAgICBIdHRwU2VydmxldE1hcHBpbmcgaW5jbHVkZU1hcHBpbmcgPSAoSHR0cFNlcnZsZXRNYXBwaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZShSZXF1ZXN0RGlzcGF0Y2hlci5JTkNMVURFX01BUFBJTkcpOwotICAgICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBJTkNMVURFX01BUFBJTkcgYXR0cmlidXRlOiAiIAorICAgICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBJTkNMVURFX01BUFBJTkcgYXR0cmlidXRlOiAiCiAgICAgICAgICAgICAgICAgICAgICsgaW5jbHVkZU1hcHBpbmcpOwogICAgICAgICAgICAgSHR0cFNlcnZsZXRNYXBwaW5nIGFzeW5jTWFwcGluZyA9IChIdHRwU2VydmxldE1hcHBpbmcpIHJlcXVlc3QuZ2V0QXR0cmlidXRlKEFzeW5jQ29udGV4dC5BU1lOQ19NQVBQSU5HKTsKLSAgICAgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgQVNZTkNfTUFQUElORyBhdHRyaWJ1dGU6ICIgCisgICAgICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEFTWU5DX01BUFBJTkcgYXR0cmlidXRlOiAiCiAgICAgICAgICAgICAgICAgICAgICsgYXN5bmNNYXBwaW5nKTsKICAgICAgICAgICAgIG91dC5wcmludCgiPHA+IEluICIgKyB0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiAiICsgcmVxdWVzdC5nZXRIdHRwU2VydmxldE1hcHBpbmcoKSArICI8L3A+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnQoIjxwPiBGT1JXQVJEX01BUFBJTkc6ICIgKyBmb3J3YXJkTWFwcGluZyArICI8L3A+Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaEFyYml0cmFyeU1ldGhvZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaEFyYml0cmFyeU1ldGhvZC9XZWJUZXN0LmphdmEKaW5kZXggODdmN2YyMS4uMzMyZjYwMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hBcmJpdHJhcnlNZXRob2QvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQXJiaXRyYXJ5TWV0aG9kL1dlYlRlc3QuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBodHRwMiBwdXNoIGFyYml0cmFyeSBtZXRob2QiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaEFyYml0cmFyeU1ldGhvZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hBcmJpdHJhcnlNZXRob2QvYnVpbGQucHJvcGVydGllcwppbmRleCA5NDQ1YzEwLi4xMGYzNThkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaEFyYml0cmFyeU1ldGhvZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQXJiaXRyYXJ5TWV0aG9kL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC00LjAtcHVzaC1hcmJpdHJhcnktbWV0aG9kIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaEFyYml0cmFyeU1ldGhvZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaEFyYml0cmFyeU1ldGhvZC9idWlsZC54bWwKaW5kZXggNmQ4NTYxZC4uZWE3NGIyYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hBcmJpdHJhcnlNZXRob2QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQXJiaXRyYXJ5TWV0aG9kL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvd2VidGVzdC5qYXIiLz4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmFjPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KQEAgLTgyLDcgKzgyLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQXJiaXRyYXJ5TWV0aG9kL3NlcnZsZXQvdGVzdC9Gb29NZXRob2RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaEFyYml0cmFyeU1ldGhvZC9zZXJ2bGV0L3Rlc3QvRm9vTWV0aG9kU2VydmxldC5qYXZhCmluZGV4IGNkMWE2YzguLjY3ZGE5ZjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQXJiaXRyYXJ5TWV0aG9kL3NlcnZsZXQvdGVzdC9Gb29NZXRob2RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hBcmJpdHJhcnlNZXRob2Qvc2VydmxldC90ZXN0L0Zvb01ldGhvZFNlcnZsZXQuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogCiBAV2ViU2VydmxldCh1cmxQYXR0ZXJucz0iL2Zvby8qIikKIHB1YmxpYyBjbGFzcyBGb29NZXRob2RTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewotICAgICAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIHNlcnZpY2UoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpAQCAtNTMsNiArNTMsNiBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVzLnNldFN0YXR1cyhIdHRwU2VydmxldFJlc3BvbnNlLlNDX0lOVEVSTkFMX1NFUlZFUl9FUlJPUik7CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKKwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQXJiaXRyYXJ5TWV0aG9kL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hBcmJpdHJhcnlNZXRob2Qvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggMzVhMzhlNC4uZmY3NDczYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hBcmJpdHJhcnlNZXRob2Qvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hBcmJpdHJhcnlNZXRob2Qvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTU4LDcgKzU4LDcgQEAKICAgICAgICAgICAgICAqIGNvb2tpZTogWzM3NSBieXRlcyB3ZXJlIHN0cmlwcGVkXQogICAgICAgICAgICAgICogcmVmZXJlcjogaHR0cHM6Ly9sb2NhbGhvc3Q6ODE4MS93ZWItc2VydmxldC00LjAtcHVzaC1hcmJpdHJhcnktbWV0aG9kL3Rlc3QKICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgCisKICAgICAgICAgUHVzaEJ1aWxkZXIgcHVzaEJ1aWxkZXIgPSByZXEubmV3UHVzaEJ1aWxkZXIoKS4KICAgICAgICAgICAgIG1ldGhvZCgiRk9PIikuCiAgICAgICAgICAgICBwYXRoKCJmb28vbXkuY3NzIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaEF1dGhvcml6YXRpb24vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hBdXRob3JpemF0aW9uL1dlYlRlc3QuamF2YQppbmRleCBlMDBjOTllLi5jNDYxNzU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaEF1dGhvcml6YXRpb24vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQXV0aG9yaXphdGlvbi9XZWJUZXN0LmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgcG9ydCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1sxXSk7CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgaHR0cDIgcHVzaCBzdGF0aWMgZmlsZSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQXV0aG9yaXphdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hBdXRob3JpemF0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMTQwYjk3YS4uNjA4NWU2MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hBdXRob3JpemF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hBdXRob3JpemF0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC00LjAtcHVzaC1hdXRob3JpemF0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaEF1dGhvcml6YXRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hBdXRob3JpemF0aW9uL2J1aWxkLnhtbAppbmRleCBlMmNkZmMwLi45NzJjMGQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaEF1dGhvcml6YXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQXV0aG9yaXphdGlvbi9idWlsZC54bWwKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0iJHt0ZXN0dXNlcn0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvd2VidGVzdC5qYXIiLz4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmFjPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KQEAgLTk2LDcgKzk2LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQ2FjaGVhYmxlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQ2FjaGVhYmxlL1dlYlRlc3QuamF2YQppbmRleCAxN2I3MzU0Li40YWEzYzllIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaENhY2hlYWJsZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hDYWNoZWFibGUvV2ViVGVzdC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIHBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMV0pOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGh0dHAyIHB1c2ggY2FjaGVhYmxlIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTIsNyArNTIsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaENhY2hlYWJsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hDYWNoZWFibGUvYnVpbGQucHJvcGVydGllcwppbmRleCBkMTEzYWNlLi44ZTcyOGI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaENhY2hlYWJsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQ2FjaGVhYmxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC00LjAtcHVzaC1jYWNoZWFibGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQ2FjaGVhYmxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQ2FjaGVhYmxlL2J1aWxkLnhtbAppbmRleCA4MzE3NDVmLi43ZjRmYTFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaENhY2hlYWJsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hDYWNoZWFibGUvYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNTcsNyArNTcsNyBAQAogICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi93ZWJ0ZXN0LmphciIvPgogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YWM+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgpAQCAtODIsNyArODIsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hEeW5hbWljL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoRHluYW1pYy9XZWJUZXN0LmphdmEKaW5kZXggNDljMGMyMi4uOTE5ZWRjMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hEeW5hbWljL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaER5bmFtaWMvV2ViVGVzdC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIHBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMV0pOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGh0dHAyIHB1c2ggZHluYW1pYyBmaWxlIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hEeW5hbWljL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaER5bmFtaWMvYnVpbGQucHJvcGVydGllcwppbmRleCBkM2JkYmE5Li45YzI4NWNlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaER5bmFtaWMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaER5bmFtaWMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTQuMC1wdXNoLWR5bmFtaWMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoRHluYW1pYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaER5bmFtaWMvYnVpbGQueG1sCmluZGV4IDZkODU2MWQuLmVhNzRiMmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoRHluYW1pYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hEeW5hbWljL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvd2VidGVzdC5qYXIiLz4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmFjPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KQEAgLTgyLDcgKzgyLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoRHluYW1pYy9zZXJ2bGV0L3Rlc3QvTk9UZmFjZXNTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaER5bmFtaWMvc2VydmxldC90ZXN0L05PVGZhY2VzU2VydmxldC5qYXZhCmluZGV4IGYwNjkwNjUuLmM4ZTRjNjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoRHluYW1pYy9zZXJ2bGV0L3Rlc3QvTk9UZmFjZXNTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hEeW5hbWljL3NlcnZsZXQvdGVzdC9OT1RmYWNlc1NlcnZsZXQuamF2YQpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZygiU2hvdWxkIGhhdmUgbG4gcGFyYW1ldGVyLiAgRG9lcyBub3QuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLnNlbmRFcnJvcihIdHRwU2VydmxldFJlc3BvbnNlLlNDX0lOVEVSTkFMX1NFUlZFUl9FUlJPUik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlcy5nZXRXcml0ZXIoKS5wcmludGxuKCJmb286IGJhciIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hEeW5hbWljL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hEeW5hbWljL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDI2ZGZkN2IuLjczMDVmNjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoRHluYW1pYy9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaER5bmFtaWMvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgcHVzaEJ1aWxkZXIgPSByZXEubmV3UHVzaEJ1aWxkZXIoKS4KICAgICAgICAgICAgIHBhdGgoIi93ZWItc2VydmxldC00LjAtcHVzaC1keW5hbWljL05PVGZhY2VzL2phdmF4LmZhY2VzLnJlc291cmNlL3BhcmFtZXRlck1hcEZhaWx1cmUuanM/bG49cmVzb3VyY2VzIik7CiAgICAgICAgIHB1c2hCdWlsZGVyLnB1c2goKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzLmdldFdyaXRlcigpLnByaW50bG4oIjxodG1sPjxoZWFkPjx0aXRsZT5IVFRQMiBUZXN0PC90aXRsZT48bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cIi93ZWItc2VydmxldC00LjAtcHVzaC1keW5hbWljL05PVGZhY2VzL2phdmF4LmZhY2VzLnJlc291cmNlL3N0eWxlLmNzc1wiPjxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiIHNyYz1cIi93ZWItc2VydmxldC00LjAtcHVzaC1keW5hbWljL05PVGZhY2VzL2phdmF4LmZhY2VzLnJlc291cmNlL2pzZi5qcz9sbj1qYXZheC5mYWNlc1wiPjwvc2NyaXB0PjxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiIHNyYz1cIi93ZWItc2VydmxldC00LjAtcHVzaC1keW5hbWljL05PVGZhY2VzL2phdmF4LmZhY2VzLnJlc291cmNlL3BhcmFtZXRlck1hcEZhaWx1cmUuanM/bG49cmVzb3VyY2VzXCI+PC9zY3JpcHQ+PC9oZWFkPjxib2R5PkhlbGxvPC9ib2R5PjwvaHRtbD4iKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaFF1ZXJ5U3RyaW5nL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoUXVlcnlTdHJpbmcvV2ViVGVzdC5qYXZhCmluZGV4IDgzOWY5N2QuLjY2MjI0ZTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoUXVlcnlTdHJpbmcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoUXVlcnlTdHJpbmcvV2ViVGVzdC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIHBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMV0pOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGh0dHAyIHB1c2ggcXVlcnkgc3RyaW5nIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTIsNyArNTIsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaFF1ZXJ5U3RyaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaFF1ZXJ5U3RyaW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGE5MGVhZi4uMjIxNDNkNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hRdWVyeVN0cmluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoUXVlcnlTdHJpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTQuMC1wdXNoLXF1ZXJ5LXN0cmluZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hRdWVyeVN0cmluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaFF1ZXJ5U3RyaW5nL2J1aWxkLnhtbAppbmRleCA4MzE3NDVmLi43ZjRmYTFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaFF1ZXJ5U3RyaW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaFF1ZXJ5U3RyaW5nL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvd2VidGVzdC5qYXIiLz4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmFjPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KQEAgLTgyLDcgKzgyLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoU3RhdGljL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoU3RhdGljL1dlYlRlc3QuamF2YQppbmRleCAyMTM2OTBkLi42ZDQ0ZjMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaFN0YXRpYy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hTdGF0aWMvV2ViVGVzdC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIHBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMV0pOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGh0dHAyIHB1c2ggc3RhdGljIGZpbGUiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaFN0YXRpYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hTdGF0aWMvYnVpbGQucHJvcGVydGllcwppbmRleCA3YzExOTJiLi5mMTllYzM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaFN0YXRpYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoU3RhdGljL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC00LjAtcHVzaC1zdGF0aWMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoU3RhdGljL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoU3RhdGljL2J1aWxkLnhtbAppbmRleCA4MzE3NDVmLi43ZjRmYTFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaFN0YXRpYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hTdGF0aWMvYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNTcsNyArNTcsNyBAQAogICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi93ZWJ0ZXN0LmphciIvPgogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YWM+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgpAQCAtODIsNyArODIsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3JlcVJlc0VuY29kaW5nL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9yZXFSZXNFbmNvZGluZy9XZWJUZXN0LmphdmEKaW5kZXggODY5YWM5OC4uOGZjY2MwNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3JlcVJlc0VuY29kaW5nL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcmVxUmVzRW5jb2RpbmcvV2ViVGVzdC5qYXZhCkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIHBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMV0pOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHJlcXVlc3QtY2hhcmFjdGVyLWVuY29kaW5nLCByZXNwb25zZS1jaGFyYWN0ZXItZW5jb2RpbmcgaW4gd2ViLnhtbCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaHR0cFJlc3BvbnNlLmdldEJvZHkoY2hhcnNldCkudHJpbSgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLT4gbGluZSA9ICIgKyBsaW5lKTsKICAgICAgICAgICAgIGlmICAoIUVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3JlcVJlc0VuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcmVxUmVzRW5jb2RpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCAyYWVhOGZkLi5kYzhmNjhmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcmVxUmVzRW5jb2RpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcmVxUmVzRW5jb2RpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtNC4wLXJlcS1yZXMtZW5jb2RpbmciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtNC4wLXJlcS1yZXMtZW5jb2RpbmciLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcmVxUmVzRW5jb2RpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3JlcVJlc0VuY29kaW5nL2J1aWxkLnhtbAppbmRleCA3OGQ3YzM5Li4zYWVkYjlkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcmVxUmVzRW5jb2RpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9yZXFSZXNFbmNvZGluZy9idWlsZC54bWwKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDUsMTAgKzQ1LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIj4KICAgICAgICAgICAgIDxjbGFzc3BhdGg+CkBAIC01NiwxMCArNTYsMTAgQEAKICAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvd2VidGVzdC5qYXIiLz4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmFjPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0IiBmb3JrPSJ0cnVlIj4KICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJTMUFTX0hPTUUiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9Ii8+CkBAIC04MywxMCArODMsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcmVxUmVzRW5jb2RpbmdHRldlYnhtbC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcmVxUmVzRW5jb2RpbmdHRldlYnhtbC9XZWJUZXN0LmphdmEKaW5kZXggYjJkZWNlYy4uNWJiOGVmNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3JlcVJlc0VuY29kaW5nR0ZXZWJ4bWwvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9yZXFSZXNFbmNvZGluZ0dGV2VieG1sL1dlYlRlc3QuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciByZXF1ZXN0LWNoYXJhY3Rlci1lbmNvZGluZywgcmVzcG9uc2UtY2hhcmFjdGVyLWVuY29kaW5nIGluIHdlYi54bWwgYW5kIHBhcmFtZXRlci1lbmNvZGluZyBpbiBnbGFzc2Zpc2gtd2ViLnhtbCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTkxLDEyICs5MSwxMiBAQAogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBodHRwUmVzcG9uc2UuZ2V0Qm9keShjaGFyc2V0KS50cmltKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tPiBsaW5lID0gIiArIGxpbmUpOwogICAgICAgICAgICAgaWYgKCFKQ0hBUlNFVF9SRVNQT05TRS5lcXVhbHMoY2hhcnNldCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyBDb250ZW50LVR5cGUgY2hhcnNldC4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyBDb250ZW50LVR5cGUgY2hhcnNldC4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICBKQ0hBUlNFVF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgY2hhcnNldCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgICghRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMjQsMTIgKzEyNCwxMiBAQAogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBodHRwUmVzcG9uc2UuZ2V0Qm9keShjaGFyc2V0KS50cmltKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tPiBsaW5lID0gIiArIGxpbmUpOwogICAgICAgICAgICAgaWYgKCFKQ0hBUlNFVF9SRVNQT05TRS5lcXVhbHMoY2hhcnNldCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyBDb250ZW50LVR5cGUgY2hhcnNldC4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyBDb250ZW50LVR5cGUgY2hhcnNldC4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICBKQ0hBUlNFVF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgY2hhcnNldCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgICghRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcmVxUmVzRW5jb2RpbmdHRldlYnhtbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3JlcVJlc0VuY29kaW5nR0ZXZWJ4bWwvYnVpbGQucHJvcGVydGllcwppbmRleCAzMTI5MTRjLi41MDA5ODQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcmVxUmVzRW5jb2RpbmdHRldlYnhtbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9yZXFSZXNFbmNvZGluZ0dGV2VieG1sL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE2LDEwICsxNiwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTQuMC1yZXEtcmVzLWVuY29kaW5nLWdmd2VieG1sIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTQuMC1yZXEtcmVzLWVuY29kaW5nLWdmd2VieG1sIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3JlcVJlc0VuY29kaW5nR0ZXZWJ4bWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3JlcVJlc0VuY29kaW5nR0ZXZWJ4bWwvYnVpbGQueG1sCmluZGV4IGQ4ZmZmY2YuLjM5YmI1MzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9yZXFSZXNFbmNvZGluZ0dGV2VieG1sL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcmVxUmVzRW5jb2RpbmdHRldlYnhtbC9idWlsZC54bWwKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDYsMTAgKzQ2LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIj4KICAgICAgICAgICAgIDxjbGFzc3BhdGg+CkBAIC01NywxMCArNTcsMTAgQEAKICAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvd2VidGVzdC5qYXIiLz4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmFjPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02OCw3ICs2OCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0IiBmb3JrPSJ0cnVlIj4KICAgICAgICAgICA8anZtYXJnIHZhbHVlPSItRGphdmEuZW5kb3JzZWQuZGlycz0ke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMvZW5kb3JzZWQiLz4KQEAgLTg1LDEwICs4NSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9zZXRTZXNzaW9uVGltZW91dC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvc2V0U2Vzc2lvblRpbWVvdXQvV2ViVGVzdC5qYXZhCmluZGV4IGEyOWJjYWYuLjc3Nzk4YmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9zZXRTZXNzaW9uVGltZW91dC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3NldFNlc3Npb25UaW1lb3V0L1dlYlRlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBTZXJ2bGV0Q29udGV4dC5zZXRTZXNzaW9uVGltZW91dCgpIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDcsNyArNDcsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IGh0dHBSZXNwb25zZS5nZXRCb2R5KCkudHJpbSgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLT4gbGluZSA9ICIgKyBsaW5lKTsKICAgICAgICAgICAgIGlmICAoIUVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3NldFNlc3Npb25UaW1lb3V0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvc2V0U2Vzc2lvblRpbWVvdXQvYnVpbGQucHJvcGVydGllcwppbmRleCBkOTY2OWNlLi5jOGRjYmQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvc2V0U2Vzc2lvblRpbWVvdXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvc2V0U2Vzc2lvblRpbWVvdXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTQuMC1zZXQtc2Vzc2lvbi10aW1lb3V0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvc2V0U2Vzc2lvblRpbWVvdXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3NldFNlc3Npb25UaW1lb3V0L2J1aWxkLnhtbAppbmRleCAyMjlkMzM2Li43NTY2OGMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvc2V0U2Vzc2lvblRpbWVvdXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9zZXRTZXNzaW9uVGltZW91dC9idWlsZC54bWwKQEAgLTQ1LDEwICs0NSwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIj4KQEAgLTU4LDEwICs1OCwxMCBAQAogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YWM+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjksNyArNjksNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCIgZm9yaz0idHJ1ZSI+CiAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0iUzFBU19IT01FIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfSIvPgpAQCAtODUsMTAgKzg1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3NldFNlc3Npb25UaW1lb3V0L3NlcnZsZXQvdGVzdC9NeU9iamVjdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3NldFNlc3Npb25UaW1lb3V0L3NlcnZsZXQvdGVzdC9NeU9iamVjdC5qYXZhCmluZGV4IGI3ZWFmOWEuLjk5Y2I4MzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9zZXRTZXNzaW9uVGltZW91dC9zZXJ2bGV0L3Rlc3QvTXlPYmplY3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvc2V0U2Vzc2lvblRpbWVvdXQvc2VydmxldC90ZXN0L015T2JqZWN0LmphdmEKQEAgLTI2LDE4ICsyNiwxOCBAQAogICAgICAqIE5vdGlmaWVzIHRoZSBvYmplY3QgdGhhdCBpdCBpcyBiZWluZyBib3VuZCB0byBhIHNlc3Npb24sIGFuZAogICAgICAqIGlkZW50aWZpZXMgdGhlIHNlc3Npb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRoYXQgaWRlbnRpZmllcyB0aGUgc2Vzc2lvbiAKKyAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRoYXQgaWRlbnRpZmllcyB0aGUgc2Vzc2lvbgogICAgICAqLwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHZhbHVlQm91bmQoSHR0cFNlc3Npb25CaW5kaW5nRXZlbnQgZXZlbnQpIHsKICAgICAgICAgLy8gZG8gbm90aGluZwogICAgIH0KLSAgICAKKwogICAgIC8qCiAgICAgICogTm90aWZpZXMgdGhlIG9iamVjdCB0aGF0IGl0IGlzIGJlaW5nIHVuYm91bmQgZnJvbSBhIHNlc3Npb24sIGFuZAogICAgICAqIGlkZW50aWZpZXMgdGhlIHNlc3Npb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRoYXQgaWRlbnRpZmllcyB0aGUgc2Vzc2lvbiAKKyAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRoYXQgaWRlbnRpZmllcyB0aGUgc2Vzc2lvbgogICAgICAqLwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHZhbHVlVW5ib3VuZChIdHRwU2Vzc2lvbkJpbmRpbmdFdmVudCBldmVudCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3RyYWlsZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3RyYWlsZXIvV2ViVGVzdC5qYXZhCmluZGV4IDBjNzhmOWIuLjUwM2IxNmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC90cmFpbGVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvdHJhaWxlci9XZWJUZXN0LmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgcG9ydCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1sxXSk7CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgdHJhaWxlciIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFN0cmluZyBjb250ZW50VHlwZSA9IGh0dHBSZXNwb25zZS5nZXRIZWFkZXIoIkNvbnRlbnQtVHlwZSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLT4gaGVhZGVycyA9ICIgKyBodHRwUmVzcG9uc2UuZ2V0SGVhZGVycygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gbmV3IFN0cmluZ0J1aWxkZXIoaHR0cFJlc3BvbnNlLmdldEJvZHkoKS50cmltKCkpCiAgICAgICAgICAgICAgICAgLmFwcGVuZCgnfCcpCiAgICAgICAgICAgICAgICAgLmFwcGVuZChodHRwUmVzcG9uc2UuZ2V0VHJhaWxlckZpZWxkcygpLmdldCgiYmFyMSIpKSAvLyB0cmFpbGVyIGZpZWxkCkBAIC05Niw3ICs5Niw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tPiByZXN1bHQgPSAiICsgcmVzdWx0KTsKIAogICAgICAgICAgICAgaWYgICghRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKHJlc3VsdCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgcmVzdWx0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3RyYWlsZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC90cmFpbGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjdlMjk3ZC4uYzk4YjE4MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3RyYWlsZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvdHJhaWxlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw5ICsxNSw5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtNC4wLXRyYWlsZXIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtNC4wLXRyYWlsZXIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC90cmFpbGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC90cmFpbGVyL2J1aWxkLnhtbAppbmRleCA3OGQ3YzM5Li4zYWVkYjlkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvdHJhaWxlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3RyYWlsZXIvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ1LDEwICs0NSwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgaW5jbHVkZXM9IldlYlRlc3QuamF2YSI+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoPgpAQCAtNTYsMTAgKzU2LDEwIEBACiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3dlYnRlc3QuamFyIi8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhYz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjcsNyArNjcsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCIgZm9yaz0idHJ1ZSI+CiAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0iUzFBU19IT01FIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfSIvPgpAQCAtODMsMTAgKzgzLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRBbm5vdGF0aW9uUHJlRGVzdHJveS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEFubm90YXRpb25QcmVEZXN0cm95L1dlYlRlc3QuamF2YQppbmRleCBkM2EwYzhkLi4xYWFkYWMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEFubm90YXRpb25QcmVEZXN0cm95L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEFubm90YXRpb25QcmVEZXN0cm95L1dlYlRlc3QuamF2YQpAQCAtNDksNyArNDksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDY1MzU4OTgiKTsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewpAQCAtNzUsNyArNzUsNyBAQAogCiAgICAgICAgIGlmICgiU1VDQ0VTUyIuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKKyAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRBbm5vdGF0aW9uUHJlRGVzdHJveS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRBbm5vdGF0aW9uUHJlRGVzdHJveS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA1MmU0NDQuLjk2NjYzMDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0QW5ub3RhdGlvblByZURlc3Ryb3kvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEFubm90YXRpb25QcmVEZXN0cm95L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1hbm5vdGF0aW9uLXByZWRlc3Ryb3kiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0QW5ub3RhdGlvblByZURlc3Ryb3kvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRBbm5vdGF0aW9uUHJlRGVzdHJveS9idWlsZC54bWwKaW5kZXggNmE4MTUyOC4uNjNiNWQ0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRBbm5vdGF0aW9uUHJlRGVzdHJveS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRBbm5vdGF0aW9uUHJlRGVzdHJveS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE5ICs0NCwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENoYWluZWRFeGNlcHRpb24vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDaGFpbmVkRXhjZXB0aW9uL1dlYlRlc3QuamF2YQppbmRleCBhMzRjMTE0Li41YjdlMWIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENoYWluZWRFeGNlcHRpb24vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q2hhaW5lZEV4Y2VwdGlvbi9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBzZXJ2bGV0IGNoYWluZWQgZXhjZXB0aW9uIik7CkBAIC01MywxOCArNTMsMTggQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiICsKICAgICAgICAgICAgICAgICAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q2hhaW5lZEV4Y2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDaGFpbmVkRXhjZXB0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDg2N2M1MS4uNWM2YWU1NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDaGFpbmVkRXhjZXB0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDaGFpbmVkRXhjZXB0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1jaGFpbmVkLWV4Y2VwdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDaGFpbmVkRXhjZXB0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q2hhaW5lZEV4Y2VwdGlvbi9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDaGFpbmVkRXhjZXB0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENoYWluZWRFeGNlcHRpb24vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDaGFpbmVkRXhjZXB0aW9uL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDaGFpbmVkRXhjZXB0aW9uL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDYwMjU3NTEuLjFjMTcwMDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q2hhaW5lZEV4Y2VwdGlvbi9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENoYWluZWRFeGNlcHRpb24vc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgVGhyb3dhYmxlIHQgPSBuZXcgVGhyb3dhYmxlKCJ0ZXN0Iik7CiAKICAgICAgICAgU2VydmxldEV4Y2VwdGlvbiBzZTEgPSBuZXcgU2VydmxldEV4Y2VwdGlvbigidGVzdCIsIHQpOwotICAgICAgICBTZXJ2bGV0RXhjZXB0aW9uIHNlMiA9IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKHQpOyAgICAgICAgCisgICAgICAgIFNlcnZsZXRFeGNlcHRpb24gc2UyID0gbmV3IFNlcnZsZXRFeGNlcHRpb24odCk7CiAgICAgICAgIGlmIChzZTEuZ2V0Q2F1c2UoKSA9PSB0ICYmIHNlMi5nZXRDYXVzZSgpID09IHQpIHsKICAgICAgICAgICAgIHBhc3NlZCA9IHRydWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50QXR0cmlidXRlUmVtb3ZlZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudEF0dHJpYnV0ZVJlbW92ZWQvV2ViVGVzdC5qYXZhCmluZGV4IDA0ZjYyMGEuLjAzYmRmZDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50QXR0cmlidXRlUmVtb3ZlZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnRBdHRyaWJ1dGVSZW1vdmVkL1dlYlRlc3QuamF2YQpAQCAtMjAsMTMgKzIwLDEzIEBACiAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAvKioKLSAqIEJ1Z3ppbGxhIDMzNDYzIAorICogQnVnemlsbGEgMzM0NjMKICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAxOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTM1LDcgKzM1LDcgQEAKIAogICAgICAgICAvLyBUaGUgc3RhdCByZXBvcnRlciB3cml0ZXMgb3V0IHRoZSB0ZXN0IGluZm8gYW5kIHJlc3VsdHMKICAgICAgICAgLy8gaW50byB0aGUgdG9wLWxldmVsIHF1aWNrbG9vayBkaXJlY3RvcnkgZHVyaW5nIGEgcnVuLgotICAgICAgCisKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiUmVtb3ZlIEF0dHJpYnV0ZSBvbiBkZXN0cm95Iik7CiAKICAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwpAQCAtNDQsNyArNDQsNyBAQAogCiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7CiAgICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZ29HZXQoaG9zdCwgcG9ydCwgIkRFU1RST1kiLCBjb250ZXh0Um9vdCArICIvU2VydmxldFRlc3QiICk7CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CkBAIC01Myw3ICs1Myw3IEBACiAKICAgICAgICAgaWYgKGNvdW50ICE9IEVYUEVDVEVEX0NPVU5UKXsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJhdHRyaWJ1dGVMaXN0ZW5lckNsZWFyIiwgc3RhdC5GQUlMKTsKLSAgICAgICAgfSAgICAgICAgICAgCisgICAgICAgIH0KICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYi9hdHRyaWJ1dGVMaXN0ZW5lckNsZWFyLS0tPiBleHBlY3QgIiArIEVYUEVDVEVEX0NPVU5UKTsKICAgICB9CiAKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjBcbiIpKTsKICAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMFxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gcy5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWU6ICIgKyAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSB0aW1lKSk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKQEAgLTgzLDE4ICs4MywxOCBAQAogICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGxpbmUuaW5kZXhPZigiOiIpOwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3RhdHVzID0gbGluZS5zdWJzdHJpbmcoaW5kZXgrMSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuZXF1YWxzSWdub3JlQ2FzZSgiUEFTUyIpKXsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItYXR0cmlidXRlTGlzdGVuZXJDbGVhcjogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1hdHRyaWJ1dGVMaXN0ZW5lckNsZWFyOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuRkFJTCk7ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItYXR0cmlidXRlTGlzdGVuZXJDbGVhcjogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7Ci0gICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudEF0dHJpYnV0ZVJlbW92ZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50QXR0cmlidXRlUmVtb3ZlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDFjYTQwOWMuLjkxNzcyNTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50QXR0cmlidXRlUmVtb3ZlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50QXR0cmlidXRlUmVtb3ZlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudEF0dHJpYnV0ZVJlbW92ZWQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50QXR0cmlidXRlUmVtb3ZlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudEF0dHJpYnV0ZVJlbW92ZWQvYnVpbGQueG1sCmluZGV4IDI3MTc1NzUuLjY1ZTk1MmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50QXR0cmlidXRlUmVtb3ZlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnRBdHRyaWJ1dGVSZW1vdmVkL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDgsMTYgKzQ4LDE2IEBACiAgICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7czFhcy5jbGFzc3BhdGh9IgogICAgICAgICAgICAgICAgZGVzdGRpcj0iLi9zaGFyZWQiIGluY2x1ZGVzPSIqLmphdmEiLz4KICAgICAgICAgPGphciBkZXN0ZmlsZT0ic2hhcmVkLmphciIgYmFzZWRpcj0ic2hhcmVkIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9InNoYXJlZC5qYXIiIAorICAgICAgICA8Y29weSBmaWxlPSJzaGFyZWQuamFyIgogICAgICAgICAgICAgICB0b2Rpcj0iJHtlbnYuUzFBU19IT01FfS9saWIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTY1LDE0ICs2NSwxNCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTgyLDcgKzgyLDcgQEAKICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9zaGFyZWQuamFyIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtOTQsMTAgKzk0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnRBdHRyaWJ1dGVSZW1vdmVkL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50QXR0cmlidXRlUmVtb3ZlZC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMWE4OTYwZS4uYWMyNTU5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnRBdHRyaWJ1dGVSZW1vdmVkL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudEF0dHJpYnV0ZVJlbW92ZWQvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yNywxNCArMjcsMTQgQEAKICAgICAgICAgICAgIHRlc3QuU3RhdGljTGlzdGVuZXIKICAgICAgICAgPC9saXN0ZW5lci1jbGFzcz4KICAgICA8L2xpc3RlbmVyPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KICAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnRBdHRyaWJ1dGVSZW1vdmVkL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50QXR0cmlidXRlUmVtb3ZlZC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggZmMxMjY2ZS4uYzRlMTEzNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnRBdHRyaWJ1dGVSZW1vdmVkL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudEF0dHJpYnV0ZVJlbW92ZWQvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0yNSwxMyArMjUsMTMgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0ewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0JCVNlcnZsZXRDb250ZXh0IGN0eCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwotCQljdHguc2V0QXR0cmlidXRlKCJBdHRyaWJ1dCIsICJ1bmUgdmFsZXVyIik7CisgICAgICAgIFNlcnZsZXRDb250ZXh0IGN0eCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOworICAgICAgICBjdHguc2V0QXR0cmlidXRlKCJBdHRyaWJ1dCIsICJ1bmUgdmFsZXVyIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiMjIyMjIyMjIyMjIGRlc3Ryb3kgIyMjIyMjIyMjIyMjIyIpOwogICAgIH0KQEAgLTQxLDE0ICs0MSwxNCBAQAogCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiMjIyMjIyMjIyMgU3RhdGljTGlzdGVuZXIucmVtb3ZlQXR0cmlidXRlOiAiICsgCisKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIjIyMjIyMjIyMjIFN0YXRpY0xpc3RlbmVyLnJlbW92ZUF0dHJpYnV0ZTogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRpY0xpc3RlbmVyLnJlbW92ZUF0dHJpYnV0ZSk7Ci0gICAgICAgIG91dC5wcmludGxuKCJERVNUUk9ZOiIgCisgICAgICAgIG91dC5wcmludGxuKCJERVNUUk9ZOiIKICAgICAgICAgICAgICAgICAgICAgKyAoU3RhdGljTGlzdGVuZXIucmVtb3ZlQXR0cmlidXRlID09IHRydWUgPyAiUEFTUyIgOiAiRkFJTCIpKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudEF0dHJpYnV0ZVJlbW92ZWQvc2VydmxldC9TdGF0aWNMaXN0ZW5lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnRBdHRyaWJ1dGVSZW1vdmVkL3NlcnZsZXQvU3RhdGljTGlzdGVuZXIuamF2YQppbmRleCBjNWM0NGJlLi5mM2U3ZGU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudEF0dHJpYnV0ZVJlbW92ZWQvc2VydmxldC9TdGF0aWNMaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50QXR0cmlidXRlUmVtb3ZlZC9zZXJ2bGV0L1N0YXRpY0xpc3RlbmVyLmphdmEKQEAgLTIzLDIxICsyMywyMSBAQAogCiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIHJlbW92ZUF0dHJpYnV0ZSA9IGZhbHNlOwogCi0JcHVibGljIHZvaWQgYXR0cmlidXRlQWRkZWQoU2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudCBldnQpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJcblxuQWRkZWQgYSBzZXJ2bGV0IGNvbnRleHQgYXR0cmlidXRlOiAiICsgZXZ0LmdldE5hbWUoKSArICIgKCIrIGV2dC5nZXRWYWx1ZSgpICsiKSIpOwotCX0KKyAgICBwdWJsaWMgdm9pZCBhdHRyaWJ1dGVBZGRlZChTZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50IGV2dCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuXG5BZGRlZCBhIHNlcnZsZXQgY29udGV4dCBhdHRyaWJ1dGU6ICIgKyBldnQuZ2V0TmFtZSgpICsgIiAoIisgZXZ0LmdldFZhbHVlKCkgKyIpIik7CisgICAgfQogCi0JcHVibGljIHZvaWQgYXR0cmlidXRlUmVtb3ZlZChTZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50IGV2dCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuXG5SZW1vdmVkIGEgc2VydmxldCBjb250ZXh0IGF0dHJpYnV0ZTogIiArIGV2dC5nZXROYW1lKCkgKyAiICgiKyBldnQuZ2V0VmFsdWUoKSArIikiKTsKKyAgICBwdWJsaWMgdm9pZCBhdHRyaWJ1dGVSZW1vdmVkKFNlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnQgZXZ0KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5cblJlbW92ZWQgYSBzZXJ2bGV0IGNvbnRleHQgYXR0cmlidXRlOiAiICsgZXZ0LmdldE5hbWUoKSArICIgKCIrIGV2dC5nZXRWYWx1ZSgpICsiKSIpOwogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmVtb3ZlQXR0cmlidXRlOiAiICsgcmVtb3ZlQXR0cmlidXRlKTsKIAogICAgICAgICByZW1vdmVBdHRyaWJ1dGUgPSB0cnVlOwotCX0KKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBhdHRyaWJ1dGVSZXBsYWNlZChTZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50IGV2dCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuXG5SZXBsYWNlZCBhIHNlcnZsZXQgY29udGV4dCBhdHRyaWJ1dGU6ICIgKyBldnQuZ2V0TmFtZSgpICsgIiAoIisgZXZ0LmdldFZhbHVlKCkgKyIpIik7Ci0JfQorICAgIHB1YmxpYyB2b2lkIGF0dHJpYnV0ZVJlcGxhY2VkKFNlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnQgZXZ0KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5cblJlcGxhY2VkIGEgc2VydmxldCBjb250ZXh0IGF0dHJpYnV0ZTogIiArIGV2dC5nZXROYW1lKCkgKyAiICgiKyBldnQuZ2V0VmFsdWUoKSArIikiKTsKKyAgICB9CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnRBdHRyaWJ1dGVSZW1vdmVkL3NoYXJlZC90ZXN0L1N0YXRpY0xpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudEF0dHJpYnV0ZVJlbW92ZWQvc2hhcmVkL3Rlc3QvU3RhdGljTGlzdGVuZXIuamF2YQppbmRleCBjNWM0NGJlLi5mM2U3ZGU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudEF0dHJpYnV0ZVJlbW92ZWQvc2hhcmVkL3Rlc3QvU3RhdGljTGlzdGVuZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudEF0dHJpYnV0ZVJlbW92ZWQvc2hhcmVkL3Rlc3QvU3RhdGljTGlzdGVuZXIuamF2YQpAQCAtMjMsMjEgKzIzLDIxIEBACiAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcmVtb3ZlQXR0cmlidXRlID0gZmFsc2U7CiAKLQlwdWJsaWMgdm9pZCBhdHRyaWJ1dGVBZGRlZChTZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50IGV2dCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuXG5BZGRlZCBhIHNlcnZsZXQgY29udGV4dCBhdHRyaWJ1dGU6ICIgKyBldnQuZ2V0TmFtZSgpICsgIiAoIisgZXZ0LmdldFZhbHVlKCkgKyIpIik7Ci0JfQorICAgIHB1YmxpYyB2b2lkIGF0dHJpYnV0ZUFkZGVkKFNlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnQgZXZ0KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5cbkFkZGVkIGEgc2VydmxldCBjb250ZXh0IGF0dHJpYnV0ZTogIiArIGV2dC5nZXROYW1lKCkgKyAiICgiKyBldnQuZ2V0VmFsdWUoKSArIikiKTsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBhdHRyaWJ1dGVSZW1vdmVkKFNlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnQgZXZ0KSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiXG5cblJlbW92ZWQgYSBzZXJ2bGV0IGNvbnRleHQgYXR0cmlidXRlOiAiICsgZXZ0LmdldE5hbWUoKSArICIgKCIrIGV2dC5nZXRWYWx1ZSgpICsiKSIpOworICAgIHB1YmxpYyB2b2lkIGF0dHJpYnV0ZVJlbW92ZWQoU2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudCBldnQpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblxuUmVtb3ZlZCBhIHNlcnZsZXQgY29udGV4dCBhdHRyaWJ1dGU6ICIgKyBldnQuZ2V0TmFtZSgpICsgIiAoIisgZXZ0LmdldFZhbHVlKCkgKyIpIik7CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZW1vdmVBdHRyaWJ1dGU6ICIgKyByZW1vdmVBdHRyaWJ1dGUpOwogCiAgICAgICAgIHJlbW92ZUF0dHJpYnV0ZSA9IHRydWU7Ci0JfQorICAgIH0KIAotCXB1YmxpYyB2b2lkIGF0dHJpYnV0ZVJlcGxhY2VkKFNlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnQgZXZ0KSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiXG5cblJlcGxhY2VkIGEgc2VydmxldCBjb250ZXh0IGF0dHJpYnV0ZTogIiArIGV2dC5nZXROYW1lKCkgKyAiICgiKyBldnQuZ2V0VmFsdWUoKSArIikiKTsKLQl9CisgICAgcHVibGljIHZvaWQgYXR0cmlidXRlUmVwbGFjZWQoU2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudCBldnQpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblxuUmVwbGFjZWQgYSBzZXJ2bGV0IGNvbnRleHQgYXR0cmlidXRlOiAiICsgZXZ0LmdldE5hbWUoKSArICIgKCIrIGV2dC5nZXRWYWx1ZSgpICsiKSIpOworICAgIH0KIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVMaXN0ZW5lckFubm90YXRpb25QcmVEZXN0cm95L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUxpc3RlbmVyQW5ub3RhdGlvblByZURlc3Ryb3kvV2ViVGVzdC5qYXZhCmluZGV4IDNjMzkyNDcuLjRlOWZmZWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUxpc3RlbmVyQW5ub3RhdGlvblByZURlc3Ryb3kvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUxpc3RlbmVyQW5ub3RhdGlvblByZURlc3Ryb3kvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjM5MSIpOwpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC02Niw3ICs2Niw3IEBACiAKICAgICAgICAgaWYgKCJTVUNDRVNTIi5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgeworICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVMaXN0ZW5lckFubm90YXRpb25QcmVEZXN0cm95L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVMaXN0ZW5lckFubm90YXRpb25QcmVEZXN0cm95L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDY2YmY2OC4uZjM1ZTU2YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlTGlzdGVuZXJBbm5vdGF0aW9uUHJlRGVzdHJveS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUxpc3RlbmVyQW5ub3RhdGlvblByZURlc3Ryb3kvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LWNvbnRleHQtYXR0cmlidXRlLWxpc3RlbmVyLWFubm90YXRpb24tcHJlZGVzdHJveSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlTGlzdGVuZXJBbm5vdGF0aW9uUHJlRGVzdHJveS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVMaXN0ZW5lckFubm90YXRpb25QcmVEZXN0cm95L2J1aWxkLnhtbAppbmRleCA5MGFiZWYxLi43MjQwNzkwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVMaXN0ZW5lckFubm90YXRpb25QcmVEZXN0cm95L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVMaXN0ZW5lckFubm90YXRpb25QcmVEZXN0cm95L2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjIgKzQ0LDIyIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcxLDEwICs3MSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dERlc3Ryb3llZEV2ZW50QXR0cmlidXRlc0F2YWlsYWJsZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHREZXN0cm95ZWRFdmVudEF0dHJpYnV0ZXNBdmFpbGFibGUvV2ViVGVzdC5qYXZhCmluZGV4IDA3NzJhMzEuLmUzY2E1NGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dERlc3Ryb3llZEV2ZW50QXR0cmlidXRlc0F2YWlsYWJsZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0RGVzdHJveWVkRXZlbnRBdHRyaWJ1dGVzQXZhaWxhYmxlL1dlYlRlc3QuamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIHJ1biA9IGFyZ3NbM107CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgSXNzdWUgNjQ0MiIpOwpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC03Miw3ICs3Miw3IEBACiAgICAgICogYXQgaXRzIGNvbnRleHREZXN0cm95ZWQoKSBtZXRob2QgYW5kIHdpbGwgYXR0ZW1wdCB0byBhY2Nlc3MgdGhlCiAgICAgICogU2VydmxldENvbnRleHQgYXR0cmlidXRlIHRoYXQgd2FzIGFkZGVkIGJ5IHRoZSBzZXJ2bGV0LgogICAgICAqIElmIHRoZSBhdHRyaWJ1dGUgaXMgcHJlc2VudCwgdGhlIFNlcnZsZXRDb250ZXh0TGlzdGVuZXIgd2lsbCB3cml0ZQotICAgICAqIHRoZSB3b3JkICJTVUNDRVNTIiB0byAvdG1wL215dGVzdC4gT3RoZXJ3aXNlLCBpdCB3aWxsIHdyaXRlIEZBSUwgdG8gCisgICAgICogdGhlIHdvcmQgIlNVQ0NFU1MiIHRvIC90bXAvbXl0ZXN0LiBPdGhlcndpc2UsIGl0IHdpbGwgd3JpdGUgRkFJTCB0bwogICAgICAqIHRoYXQgZmlsZS4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBmaXJzdFJ1bigpIHRocm93cyBFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0RGVzdHJveWVkRXZlbnRBdHRyaWJ1dGVzQXZhaWxhYmxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHREZXN0cm95ZWRFdmVudEF0dHJpYnV0ZXNBdmFpbGFibGUvYnVpbGQucHJvcGVydGllcwppbmRleCA5N2VjZTBlLi5lZDlhZjc4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHREZXN0cm95ZWRFdmVudEF0dHJpYnV0ZXNBdmFpbGFibGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHREZXN0cm95ZWRFdmVudEF0dHJpYnV0ZXNBdmFpbGFibGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LWNvbnRleHQtZGVzdHJveWVkLWV2ZW50LWF0dHJpYnV0ZXMtYXZhaWxhYmxlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHREZXN0cm95ZWRFdmVudEF0dHJpYnV0ZXNBdmFpbGFibGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0RGVzdHJveWVkRXZlbnRBdHRyaWJ1dGVzQXZhaWxhYmxlL2J1aWxkLnhtbAppbmRleCBlZTY1ZGE2Li4wYTdkMTk4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHREZXN0cm95ZWRFdmVudEF0dHJpYnV0ZXNBdmFpbGFibGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dERlc3Ryb3llZEV2ZW50QXR0cmlidXRlc0F2YWlsYWJsZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIxICs0NCwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJmaXJzdFJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04NCwxMCArODQsMTAgQEAKICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEdldENvbnRleHRQYXRoL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEdldENvbnRleHRQYXRoL1dlYlRlc3QuamF2YQppbmRleCBmN2Q4NmQ4Li40MzhiYzEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRHZXRDb250ZXh0UGF0aC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0R2V0Q29udGV4dFBhdGgvV2ViVGVzdC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgU2VydmxldENvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSIpOwpAQCAtNTIsMTEgKzUyLDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICsgIi9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC03MSw4ICs3MSw4IEBACiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICBTdHJpbmcgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7CiAgICAgICAgIGlmICghY29udGV4dFJvb3QuZXF1YWxzKGxpbmUpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRSb290ICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEdldENvbnRleHRQYXRoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRHZXRDb250ZXh0UGF0aC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQ5YzNlMjEuLjQ0ODY4YmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEdldENvbnRleHRQYXRoL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0R2V0Q29udGV4dFBhdGgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LWNvbnRleHQtZ2V0LWNvbnRleHQtcGF0aCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0R2V0Q29udGV4dFBhdGgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0R2V0Q29udGV4dFBhdGgvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEdldENvbnRleHRQYXRoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRHZXRDb250ZXh0UGF0aC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRHZXRFbXB0eUNvbnRleHRQYXRoL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEdldEVtcHR5Q29udGV4dFBhdGgvV2ViVGVzdC5qYXZhCmluZGV4IGIwY2FiZTUuLmU4NWFlMzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEdldEVtcHR5Q29udGV4dFBhdGgvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEdldEVtcHR5Q29udGV4dFBhdGgvV2ViVGVzdC5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAgKiBUaGUgZW1wdHkgY29udGV4dCBwYXRoIGlzIHNwZWNpZmllZCBpbiB0aGUgc3VuLXdlYi54bWwsIGFzIGZvbGxvd3M6CiAgKgogICogIDxzdW4td2ViLWFwcD4KLSAqICAgIDxjb250ZXh0LXJvb3Q+PC9jb250ZXh0LXJvb3Q+IAorICogICAgPGNvbnRleHQtcm9vdD48L2NvbnRleHQtcm9vdD4KICAqICA8L3N1bi13ZWItYXBwPgogICoKICAqIGFuZCB0aGVyZSBpcyBubyBjb250ZXh0cm9vdCBzcGVjaWZpZWQgaW4gYnVpbGQucHJvcGVydGllcy4KQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgaG9zdCA9IGFyZ3NbMF07CiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIFNlcnZsZXRDb250ZXh0LmdldENvbnRleHRQYXRoKCkiKTsKQEAgLTYwLDExICs2MCwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKQEAgLTgwLDEwICs4MCwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRHZXRFbXB0eUNvbnRleHRQYXRoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRHZXRFbXB0eUNvbnRleHRQYXRoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWM0ZjBlYy4uNjIzM2MwMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0R2V0RW1wdHlDb250ZXh0UGF0aC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEdldEVtcHR5Q29udGV4dFBhdGgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LWNvbnRleHQtZ2V0LWVtcHR5LWNvbnRleHQtcGF0aCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0R2V0RW1wdHlDb250ZXh0UGF0aC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRHZXRFbXB0eUNvbnRleHRQYXRoL2J1aWxkLnhtbAppbmRleCA2Yzk2ODNmLi45NjhkZWI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRHZXRFbXB0eUNvbnRleHRQYXRoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRHZXRFbXB0eUNvbnRleHRQYXRoL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItbm8tY29udGV4dC1yb290Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsMTAgKzcwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0R2V0RW1wdHlDb250ZXh0UGF0aC9kZXNjcmlwdG9yL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0R2V0RW1wdHlDb250ZXh0UGF0aC9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCmluZGV4IDY1NmM1MmMuLjEyOTIxZDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEdldEVtcHR5Q29udGV4dFBhdGgvZGVzY3JpcHRvci9zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRHZXRFbXB0eUNvbnRleHRQYXRoL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKQEAgLTIwLDUgKzIwLDUgQEAKIDwhRE9DVFlQRSBzdW4td2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOC4xIFNlcnZsZXQgMi40Ly9FTiIgImh0dHA6Ly93d3cuc3VuLmNvbS9zb2Z0d2FyZS9zdW5vbmUvYXBwc2VydmVyL2R0ZHMvc3VuLXdlYi1hcHBfMl80LTEuZHRkIj4KIAogPHN1bi13ZWItYXBwPgotICA8Y29udGV4dC1yb290Pi88L2NvbnRleHQtcm9vdD4gCisgIDxjb250ZXh0LXJvb3Q+LzwvY29udGV4dC1yb290PgogPC9zdW4td2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dExpc3RlbmVyQW5ub3RhdGlvblByZURlc3Ryb3kvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0TGlzdGVuZXJBbm5vdGF0aW9uUHJlRGVzdHJveS9XZWJUZXN0LmphdmEKaW5kZXggYzIxMDg2OC4uN2ZkYzQ5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0TGlzdGVuZXJBbm5vdGF0aW9uUHJlRGVzdHJveS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0TGlzdGVuZXJBbm5vdGF0aW9uUHJlRGVzdHJveS9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBJc3N1ZSA2MzkxIik7CkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTg1LDEwICs4NSwxMCBAQAogICAgICAgICAgICAgICAgIC8vIGlnbm9yZQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZiAoIlNVQ0NFU1MiLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dExpc3RlbmVyQW5ub3RhdGlvblByZURlc3Ryb3kvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dExpc3RlbmVyQW5ub3RhdGlvblByZURlc3Ryb3kvYnVpbGQucHJvcGVydGllcwppbmRleCAzYmRhY2NkLi4zN2Q4NjkwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRMaXN0ZW5lckFubm90YXRpb25QcmVEZXN0cm95L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0TGlzdGVuZXJBbm5vdGF0aW9uUHJlRGVzdHJveS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtY29udGV4dC1saXN0ZW5lci1hbm5vdGF0aW9uLXByZWRlc3Ryb3kiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dExpc3RlbmVyQW5ub3RhdGlvblByZURlc3Ryb3kvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0TGlzdGVuZXJBbm5vdGF0aW9uUHJlRGVzdHJveS9idWlsZC54bWwKaW5kZXggZTU1MjE5ZC4uNWJmNGIzNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0TGlzdGVuZXJBbm5vdGF0aW9uUHJlRGVzdHJveS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0TGlzdGVuZXJBbm5vdGF0aW9uUHJlRGVzdHJveS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIzICs0NCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcyLDEwICs3MiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dE51bGxQYXRoQXJndW1lbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0TnVsbFBhdGhBcmd1bWVudC9XZWJUZXN0LmphdmEKaW5kZXggZTFmNTIxYS4uMDIxY2Y3MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0TnVsbFBhdGhBcmd1bWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0TnVsbFBhdGhBcmd1bWVudC9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjI2NTA2NiIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUwLDggKzUwLDggQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgIAotICAgICAgICB0cnkgeyAKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0TnVsbFBhdGhBcmd1bWVudC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0TnVsbFBhdGhBcmd1bWVudC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGFlZjM5ZDIuLmFiYjZhMDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dE51bGxQYXRoQXJndW1lbnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHROdWxsUGF0aEFyZ3VtZW50L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1jb250ZXh0LW51bGwtcGF0aC1hcmd1bWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0TnVsbFBhdGhBcmd1bWVudC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHROdWxsUGF0aEFyZ3VtZW50L2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHROdWxsUGF0aEFyZ3VtZW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHROdWxsUGF0aEFyZ3VtZW50L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RW1wdHlMb2FkT25TdGFydHVwL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RW1wdHlMb2FkT25TdGFydHVwL1dlYlRlc3QuamF2YQppbmRleCBiZmZiZWNkLi5iOGQ4MTM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEVtcHR5TG9hZE9uU3RhcnR1cC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRFbXB0eUxvYWRPblN0YXJ0dXAvV2ViVGVzdC5qYXZhCkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDYxNzIwMDYiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01Miw4ICs1Miw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJ1bigpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgKyAiL1Rlc3RTZXJ2bGV0IjsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikKQEAgLTg0LDYgKzg0LDYgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRFbXB0eUxvYWRPblN0YXJ0dXAvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RW1wdHlMb2FkT25TdGFydHVwL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzgzNTNiMC4uNDhkNmYwZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRFbXB0eUxvYWRPblN0YXJ0dXAvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEVtcHR5TG9hZE9uU3RhcnR1cC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtZW1wdHktbG9hZC1vbi1zdGFydHVwIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEVtcHR5TG9hZE9uU3RhcnR1cC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEVtcHR5TG9hZE9uU3RhcnR1cC9idWlsZC54bWwKaW5kZXggODU0MmU5MS4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRFbXB0eUxvYWRPblN0YXJ0dXAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RW1wdHlMb2FkT25TdGFydHVwL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTcgKzQyLDE3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEVtcHR5TG9hZE9uU3RhcnR1cC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEVtcHR5TG9hZE9uU3RhcnR1cC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZjVjNGQzYi4uYWU1Yjk1OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRFbXB0eUxvYWRPblN0YXJ0dXAvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RW1wdHlMb2FkT25TdGFydHVwL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjQsNyArMjQsNyBAQAogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgogICAgICAgICA8bG9hZC1vbi1zdGFydHVwLz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyRGVmYXVsdEludm9jYXRpb25PcmRlci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlckRlZmF1bHRJbnZvY2F0aW9uT3JkZXIvV2ViVGVzdC5qYXZhCmluZGV4IDY3YWU0ODguLjZkZGFhNTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyRGVmYXVsdEludm9jYXRpb25PcmRlci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRGaWx0ZXJEZWZhdWx0SW52b2NhdGlvbk9yZGVyL1dlYlRlc3QuamF2YQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogLyoKLSAqIFVuaXQgdGVzdCBmb3IgCisgKiBVbml0IHRlc3QgZm9yCiAgKgogICogICBodHRwczovL2dsYXNzZmlzaC5kZXYuamF2YS5uZXQvaXNzdWVzL3Nob3dfYnVnLmNnaT9pZD02OTQzCiAgKiAgICgiR3JhaWxzIHNhbXBsZSBhcHAgZmFpbGVkIHdpdGggU2VydmxldCBnc3AgTlBFIikKQEAgLTI5LDcgKzI5LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0gInNlcnZsZXQtZmlsdGVyLWRlZmF1bHQtaW52b2NhdGlvbi1vcmRlciI7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSAidHJ1ZSI7Ci0gCisKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElUIDY5NDMiKTsKQEAgLTU2LDExICs1NiwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC03Niw5ICs3Niw5IEBACiAgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKICAgICAgICAgICAgIGlmICghRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlckRlZmF1bHRJbnZvY2F0aW9uT3JkZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyRGVmYXVsdEludm9jYXRpb25PcmRlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGY4NjI4ZjEuLmRkYmYyYTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyRGVmYXVsdEludm9jYXRpb25PcmRlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyRGVmYXVsdEludm9jYXRpb25PcmRlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtZmlsdGVyLWRlZmF1bHQtaW52b2NhdGlvbi1vcmRlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRGaWx0ZXJEZWZhdWx0SW52b2NhdGlvbk9yZGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyRGVmYXVsdEludm9jYXRpb25PcmRlci9idWlsZC54bWwKaW5kZXggMDBmZGFkMy4uYzM5Nzc2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRGaWx0ZXJEZWZhdWx0SW52b2NhdGlvbk9yZGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlckRlZmF1bHRJbnZvY2F0aW9uT3JkZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCwxMCArNzAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlckRlZmF1bHRJbnZvY2F0aW9uT3JkZXIvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRGaWx0ZXJEZWZhdWx0SW52b2NhdGlvbk9yZGVyL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBiZWMyMzkwLi5iZTVjMWU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlckRlZmF1bHRJbnZvY2F0aW9uT3JkZXIvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyRGVmYXVsdEludm9jYXRpb25PcmRlci9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTE4LDE3ICsxOCwxNyBAQAogLS0+CiAKIDx3ZWItYXBwIHZlcnNpb249IjIuNSIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+Ci0gICAgIAorCiAgICAgPGZpbHRlcj4KICAgICAgICAgPGZpbHRlci1uYW1lPkZpbHRlcl9BPC9maWx0ZXItbmFtZT4KICAgICAgICAgPGZpbHRlci1jbGFzcz5GaWx0ZXJfQTwvZmlsdGVyLWNsYXNzPgotICAgIDwvZmlsdGVyPiAgICAKKyAgICA8L2ZpbHRlcj4KIAogICAgIDxmaWx0ZXI+CiAgICAgICAgIDxmaWx0ZXItbmFtZT5GaWx0ZXJfQjwvZmlsdGVyLW5hbWU+CiAgICAgICAgIDxmaWx0ZXItY2xhc3M+RmlsdGVyX0I8L2ZpbHRlci1jbGFzcz4KLSAgICA8L2ZpbHRlcj4gICAgCi0gICAgICAgIAorICAgIDwvZmlsdGVyPgorCiAgICAgPGZpbHRlci1tYXBwaW5nPgogICAgICAgICA8ZmlsdGVyLW5hbWU+RmlsdGVyX0E8L2ZpbHRlci1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgpAQCAtMzgsMTIgKzM4LDEyIEBACiAgICAgICAgIDxmaWx0ZXItbmFtZT5GaWx0ZXJfQjwvZmlsdGVyLW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+CiAgICAgPC9maWx0ZXItbWFwcGluZz4KLSAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9UZXN0U2VydmxldDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlck1hcHBpbmdXaXRoU2VydmxldE5hbWVBbmRVUkxQYXR0ZXJuL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyTWFwcGluZ1dpdGhTZXJ2bGV0TmFtZUFuZFVSTFBhdHRlcm4vV2ViVGVzdC5qYXZhCmluZGV4IGIzMzg0ZjIuLjNhNjk5YzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyTWFwcGluZ1dpdGhTZXJ2bGV0TmFtZUFuZFVSTFBhdHRlcm4vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyTWFwcGluZ1dpdGhTZXJ2bGV0TmFtZUFuZFVSTFBhdHRlcm4vV2ViVGVzdC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgICAgICJzZXJ2bGV0LWZpbHRlci1tYXBwaW5nLXdpdGgtc2VydmxldG5hbWUtYW5kLXVybHBhdHRlcm4iOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0gInRydWUiOwotIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQKICAgICAgICAgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBmaWx0ZXItbWFwcGluZyB3aXRoIGJvdGggIgpAQCAtNTYsMTEgKzU2LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTgwLDcgKzgwLDcgQEAKICAgICAgICAgICAgIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpOwogICAgICAgICAgICAgaWYgKCFFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZmluYWxseSB7CkBAIC05OCw2ICs5OCw2IEBACiAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKICAgICAgICAgICAgICAgICAvLyBpZ25vcmUKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlck1hcHBpbmdXaXRoU2VydmxldE5hbWVBbmRVUkxQYXR0ZXJuL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlck1hcHBpbmdXaXRoU2VydmxldE5hbWVBbmRVUkxQYXR0ZXJuL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTNiYjFkZi4uMzJhMTdjZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRGaWx0ZXJNYXBwaW5nV2l0aFNlcnZsZXROYW1lQW5kVVJMUGF0dGVybi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyTWFwcGluZ1dpdGhTZXJ2bGV0TmFtZUFuZFVSTFBhdHRlcm4vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LWZpbHRlci1tYXBwaW5nLXdpdGgtc2VydmxldG5hbWUtYW5kLXVybHBhdHRlcm4iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyTWFwcGluZ1dpdGhTZXJ2bGV0TmFtZUFuZFVSTFBhdHRlcm4vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRGaWx0ZXJNYXBwaW5nV2l0aFNlcnZsZXROYW1lQW5kVVJMUGF0dGVybi9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRGaWx0ZXJNYXBwaW5nV2l0aFNlcnZsZXROYW1lQW5kVVJMUGF0dGVybi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRGaWx0ZXJNYXBwaW5nV2l0aFNlcnZsZXROYW1lQW5kVVJMUGF0dGVybi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlck1hcHBpbmdXaXRoU2VydmxldE5hbWVBbmRVUkxQYXR0ZXJuL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyTWFwcGluZ1dpdGhTZXJ2bGV0TmFtZUFuZFVSTFBhdHRlcm4vZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDE1MjE5YzUuLjM2OTgzMzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyTWFwcGluZ1dpdGhTZXJ2bGV0TmFtZUFuZFVSTFBhdHRlcm4vZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyTWFwcGluZ1dpdGhTZXJ2bGV0TmFtZUFuZFVSTFBhdHRlcm4vZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOCwyNCArMTgsMjQgQEAKIC0tPgogCiA8d2ViLWFwcCB2ZXJzaW9uPSIyLjUiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgotICAgICAKKwogICAgIDxmaWx0ZXI+CiAgICAgICAgIDxmaWx0ZXItbmFtZT5UZXN0RmlsdGVyPC9maWx0ZXItbmFtZT4KICAgICAgICAgPGZpbHRlci1jbGFzcz50ZXN0LlRlc3RGaWx0ZXI8L2ZpbHRlci1jbGFzcz4KLSAgICA8L2ZpbHRlcj4gICAgCi0gICAgICAgIAorICAgIDwvZmlsdGVyPgorCiAgICAgPGZpbHRlci1tYXBwaW5nPgogICAgICAgICA8ZmlsdGVyLW5hbWU+VGVzdEZpbHRlcjwvZmlsdGVyLW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vVGVzdFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxkaXNwYXRjaGVyPlJFUVVFU1Q8L2Rpc3BhdGNoZXI+CiAgICAgPC9maWx0ZXItbWFwcGluZz4KLSAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuVGVzdFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1Rlc3RTZXJ2bGV0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyTWFwcGluZ1dpdGhTZXJ2bGV0TmFtZUFuZFVSTFBhdHRlcm4vc2VydmxldC90ZXN0L1Rlc3RGaWx0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyTWFwcGluZ1dpdGhTZXJ2bGV0TmFtZUFuZFVSTFBhdHRlcm4vc2VydmxldC90ZXN0L1Rlc3RGaWx0ZXIuamF2YQppbmRleCA2NWFhZTcwLi44MzM2MzdmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlck1hcHBpbmdXaXRoU2VydmxldE5hbWVBbmRVUkxQYXR0ZXJuL3NlcnZsZXQvdGVzdC9UZXN0RmlsdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRGaWx0ZXJNYXBwaW5nV2l0aFNlcnZsZXROYW1lQW5kVVJMUGF0dGVybi9zZXJ2bGV0L3Rlc3QvVGVzdEZpbHRlci5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiAgICAgcHJpdmF0ZSBBdG9taWNJbnRlZ2VyIGNvdW50OwogCiAgICAgcHVibGljIHZvaWQgaW5pdChGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7Ci0gICAgICAgIGNvdW50ID0gbmV3IEF0b21pY0ludGVnZXIoKTsgICAgCisgICAgICAgIGNvdW50ID0gbmV3IEF0b21pY0ludGVnZXIoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlciAoU2VydmxldFJlcXVlc3QgcmVxdWVzdCwKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyTWFwcGluZ1dpdGhTZXJ2bGV0TmFtZUFuZFVSTFBhdHRlcm4vc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlck1hcHBpbmdXaXRoU2VydmxldE5hbWVBbmRVUkxQYXR0ZXJuL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCmluZGV4IGU1MTBmNjMuLmM3NDUxMjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyTWFwcGluZ1dpdGhTZXJ2bGV0TmFtZUFuZFVSTFBhdHRlcm4vc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRGaWx0ZXJNYXBwaW5nV2l0aFNlcnZsZXROYW1lQW5kVVJMUGF0dGVybi9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKIAogICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICAgICAgCisKICAgICAgICAgQXRvbWljSW50ZWdlciBjb3VudCA9IChBdG9taWNJbnRlZ2VyKSByZXEuZ2V0QXR0cmlidXRlKCJmaWx0ZXJDb3VudCIpOwogICAgICAgICBpZiAoY291bnQgIT0gbnVsbCAmJiBjb3VudC5pbnRWYWx1ZSgpID09IDIpIHsKICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRHZXRTZXJ2ZXJQb3J0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0R2V0U2VydmVyUG9ydC9XZWJUZXN0LmphdmEKaW5kZXggZTFkYjYxMS4uZmU3ZDY1NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRHZXRTZXJ2ZXJQb3J0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEdldFNlcnZlclBvcnQvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDYzNTY4MTMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC03Nyw2ICs3Nyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEdldFNlcnZlclBvcnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0R2V0U2VydmVyUG9ydC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDI2N2Y1MjEuLjg4N2FlYWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0R2V0U2VydmVyUG9ydC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0R2V0U2VydmVyUG9ydC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1nZXQtc2VydmVyLXBvcnQiLz4gCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LWdldC1zZXJ2ZXItcG9ydCIvPlx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEdldFNlcnZlclBvcnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRHZXRTZXJ2ZXJQb3J0L2J1aWxkLnhtbAppbmRleCBmYWY3ZjU1Li41MWExY2JhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEdldFNlcnZlclBvcnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0R2V0U2VydmVyUG9ydC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE1ICs0MiwxNSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNTgsNyArNTgsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0R2V0U2VydmVyUG9ydC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEdldFNlcnZlclBvcnQvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDA0YmRmYzUuLmVhMGY2MjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0R2V0U2VydmVyUG9ydC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRHZXRTZXJ2ZXJQb3J0L2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMTIgKzIyLDEyIEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz5UZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vVGVzdFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRHZXRTZXJ2ZXJQb3J0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0R2V0U2VydmVyUG9ydC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggODY4MzZjMy4uYzRkOTY0NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRHZXRTZXJ2ZXJQb3J0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEdldFNlcnZlclBvcnQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIAogcHVibGljIGNsYXNzIFRlc3RTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEluaXRCZWZvcmVHZXRTZXJ2bGV0Q29uZmlnL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0SW5pdEJlZm9yZUdldFNlcnZsZXRDb25maWcvV2ViVGVzdC5qYXZhCmluZGV4IGRjNGY1OWQuLjU2YWNjOTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0SW5pdEJlZm9yZUdldFNlcnZsZXRDb25maWcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0SW5pdEJlZm9yZUdldFNlcnZsZXRDb25maWcvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElUIDE3MjE2Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDYsNyArNDYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pCkBAIC05MywxMCArOTMsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0SW5pdEJlZm9yZUdldFNlcnZsZXRDb25maWcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0SW5pdEJlZm9yZUdldFNlcnZsZXRDb25maWcvYnVpbGQucHJvcGVydGllcwppbmRleCBhYmU5NjkyLi44ZjdhNGI1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEluaXRCZWZvcmVHZXRTZXJ2bGV0Q29uZmlnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRJbml0QmVmb3JlR2V0U2VydmxldENvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtaW5pdC1iZWZvcmUtZ2V0LXNlcnZsZXQtY29uZmlnIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEluaXRCZWZvcmVHZXRTZXJ2bGV0Q29uZmlnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0SW5pdEJlZm9yZUdldFNlcnZsZXRDb25maWcvYnVpbGQueG1sCmluZGV4IDg2ZjUxZWQuLjdhYWI3N2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0SW5pdEJlZm9yZUdldFNlcnZsZXRDb25maWcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0SW5pdEJlZm9yZUdldFNlcnZsZXRDb25maWcvYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ3LDE5ICs0NywxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRJbml0QmVmb3JlR2V0U2VydmxldENvbmZpZy9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEluaXRCZWZvcmVHZXRTZXJ2bGV0Q29uZmlnL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQppbmRleCBjMGYzMzdlLi4yMGRkYWNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEluaXRCZWZvcmVHZXRTZXJ2bGV0Q29uZmlnL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEluaXRCZWZvcmVHZXRTZXJ2bGV0Q29uZmlnL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogcHVibGljIGNsYXNzIFRlc3RTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogICAgIHByaXZhdGUgdm9sYXRpbGUgSW50ZWdlciBpID0gbnVsbDsKICAgICBwcml2YXRlIHZvbGF0aWxlIEJvb2xlYW4gaW5pdEJlZm9yZUdldENvbmZpZyA9IG51bGw7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewogICAgICAgICBpID0gbmV3IEludGVnZXIoMSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRMb2FkT25TdGFydHVwTXVsdGlwbGVJbml0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0TG9hZE9uU3RhcnR1cE11bHRpcGxlSW5pdC9XZWJUZXN0LmphdmEKaW5kZXggYjFhYmViNS4uNDNkZDVjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRMb2FkT25TdGFydHVwTXVsdGlwbGVJbml0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldExvYWRPblN0YXJ0dXBNdWx0aXBsZUluaXQvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgSVQgODU1NyIpOwpAQCAtNTUsMTEgKzU1LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0TG9hZE9uU3RhcnR1cE11bHRpcGxlSW5pdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRMb2FkT25TdGFydHVwTXVsdGlwbGVJbml0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWJmODJkMi4uZGQwMDdiMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRMb2FkT25TdGFydHVwTXVsdGlwbGVJbml0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRMb2FkT25TdGFydHVwTXVsdGlwbGVJbml0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1sb2FkLW9uLXN0YXJ0dXAtbXVsdGlwbGUtaW5pdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRMb2FkT25TdGFydHVwTXVsdGlwbGVJbml0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0TG9hZE9uU3RhcnR1cE11bHRpcGxlSW5pdC9idWlsZC54bWwKaW5kZXggOGQyYWRmOS4uYmNmYjE5ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRMb2FkT25TdGFydHVwTXVsdGlwbGVJbml0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldExvYWRPblN0YXJ0dXBNdWx0aXBsZUluaXQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRNYXBwaW5nV2l0aE11bHRpcGxlVVJMUGF0dGVybnMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRNYXBwaW5nV2l0aE11bHRpcGxlVVJMUGF0dGVybnMvV2ViVGVzdC5qYXZhCmluZGV4IDE4NTEzMDEuLmI1OTdiM2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0TWFwcGluZ1dpdGhNdWx0aXBsZVVSTFBhdHRlcm5zL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldE1hcHBpbmdXaXRoTXVsdGlwbGVVUkxQYXR0ZXJucy9XZWJUZXN0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBzZXJ2bGV0LW1hcHBpbmcgd2l0aCAiCkBAIC01MywxMSArNTMsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBib29sZWFuIGZhaWwgPSBmYWxzZTsKICAgICAgICAgVVJMIHVybCA9IG51bGw7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSBudWxsOwpAQCAtODgsNiArODgsNiBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRNYXBwaW5nV2l0aE11bHRpcGxlVVJMUGF0dGVybnMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0TWFwcGluZ1dpdGhNdWx0aXBsZVVSTFBhdHRlcm5zL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjVkNTIxYi4uY2E1N2Y3YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRNYXBwaW5nV2l0aE11bHRpcGxlVVJMUGF0dGVybnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldE1hcHBpbmdXaXRoTXVsdGlwbGVVUkxQYXR0ZXJucy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtbWFwcGluZy13aXRoLW11bHRpcGxlLXVybC1wYXR0ZXJucyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRNYXBwaW5nV2l0aE11bHRpcGxlVVJMUGF0dGVybnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRNYXBwaW5nV2l0aE11bHRpcGxlVVJMUGF0dGVybnMvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0TWFwcGluZ1dpdGhNdWx0aXBsZVVSTFBhdHRlcm5zL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldE1hcHBpbmdXaXRoTXVsdGlwbGVVUkxQYXR0ZXJucy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlbGF0aXZlQ29udGV4dFVSTHNFcXVhbHMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZWxhdGl2ZUNvbnRleHRVUkxzRXF1YWxzL1dlYlRlc3QuamF2YQppbmRleCA5MjdhNjNmLi4wNmY5YzNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlbGF0aXZlQ29udGV4dFVSTHNFcXVhbHMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVsYXRpdmVDb250ZXh0VVJMc0VxdWFscy9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MzE4NDk0Iik7CkBAIC01MiwxOCArNTIsMTggQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiICsKICAgICAgICAgICAgICAgICAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVsYXRpdmVDb250ZXh0VVJMc0VxdWFscy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZWxhdGl2ZUNvbnRleHRVUkxzRXF1YWxzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggM2ZmNjZmMi4uNDJjMWJjMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZWxhdGl2ZUNvbnRleHRVUkxzRXF1YWxzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZWxhdGl2ZUNvbnRleHRVUkxzRXF1YWxzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1yZWxhdGl2ZS1jb250ZXh0LXVybHMtZXF1YWxzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlbGF0aXZlQ29udGV4dFVSTHNFcXVhbHMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZWxhdGl2ZUNvbnRleHRVUkxzRXF1YWxzL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlbGF0aXZlQ29udGV4dFVSTHNFcXVhbHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVsYXRpdmVDb250ZXh0VVJMc0VxdWFscy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlbGF0aXZlQ29udGV4dFVSTHNFcXVhbHMvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlbGF0aXZlQ29udGV4dFVSTHNFcXVhbHMvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggYjZhNzFkMC4uNzNjMzE2NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZWxhdGl2ZUNvbnRleHRVUkxzRXF1YWxzL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVsYXRpdmVDb250ZXh0VVJMc0VxdWFscy9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQpAQCAtMzQsOCArMzQsOCBAQAogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKIAogICAgICAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwotCQotCXRyeSB7CisKKyAgICB0cnkgewogICAgICAgICAgICAgVVJMIG1haW4gPSBjb250ZXh0LmdldFJlc291cmNlKCIvdGVzdC9yZXMxLmpzcCIpOwogICAgICAgICAgICAgVVJMIHN1YiA9IG5ldyBVUkwobWFpbiwgInJlczIuanNwIik7CiAgICAgICAgICAgICBVUkwgc3ViMSA9IGNvbnRleHQuZ2V0UmVzb3VyY2UoIi90ZXN0L3JlczIuanNwIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RHZXRQYXRoSW5mb0NvbGxhcHNlQ29udGlndW91c1NsYXNoZXMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0R2V0UGF0aEluZm9Db2xsYXBzZUNvbnRpZ3VvdXNTbGFzaGVzL1dlYlRlc3QuamF2YQppbmRleCA1YTNhZjBkLi5lN2I3YjU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RHZXRQYXRoSW5mb0NvbGxhcHNlQ29udGlndW91c1NsYXNoZXMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdEdldFBhdGhJbmZvQ29sbGFwc2VDb250aWd1b3VzU2xhc2hlcy9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggaXNzdWUgMzUwNSIpOwpAQCAtNTQsMTEgKzU0LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0L2h0dHA6Ly93d3cuc3VuLmNvbS8iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpAQCAtNzcsMTAgKzc3LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdEdldFBhdGhJbmZvQ29sbGFwc2VDb250aWd1b3VzU2xhc2hlcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0R2V0UGF0aEluZm9Db2xsYXBzZUNvbnRpZ3VvdXNTbGFzaGVzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZmQ0NDE1Zi4uMjE0M2QyMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0R2V0UGF0aEluZm9Db2xsYXBzZUNvbnRpZ3VvdXNTbGFzaGVzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0R2V0UGF0aEluZm9Db2xsYXBzZUNvbnRpZ3VvdXNTbGFzaGVzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1yZXF1ZXN0LWdldC1wYXRoLWluZm8tY29sbGFwc2UtY29udGlndW91cy1zbGFzaGVzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RHZXRQYXRoSW5mb0NvbGxhcHNlQ29udGlndW91c1NsYXNoZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0R2V0UGF0aEluZm9Db2xsYXBzZUNvbnRpZ3VvdXNTbGFzaGVzL2J1aWxkLnhtbAppbmRleCA2YjYxYTA5Li4zZTEwZTE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RHZXRQYXRoSW5mb0NvbGxhcHNlQ29udGlndW91c1NsYXNoZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdEdldFBhdGhJbmZvQ29sbGFwc2VDb250aWd1b3VzU2xhc2hlcy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIyICs0NCwyMiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MSwxMCArNzEsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RHZXRQYXRoSW5mb0dldFBhdGhUcmFuc2xhdGVkL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdEdldFBhdGhJbmZvR2V0UGF0aFRyYW5zbGF0ZWQvV2ViVGVzdC5qYXZhCmluZGV4IDNkMmIwZDUuLjBkNzEyNzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdEdldFBhdGhJbmZvR2V0UGF0aFRyYW5zbGF0ZWQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdEdldFBhdGhJbmZvR2V0UGF0aFRyYW5zbGF0ZWQvV2ViVGVzdC5qYXZhCkBAIC02MSw4ICs2MSw4IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAKLSAgICAgICAgdHJ5IHsgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtOTIsNyArOTIsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG51bGw7CiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKQEAgLTE0Myw3ICsxNDMsNyBAQAogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgIGZhaWwgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0R2V0UGF0aEluZm9HZXRQYXRoVHJhbnNsYXRlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0R2V0UGF0aEluZm9HZXRQYXRoVHJhbnNsYXRlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGJhMzRkMzUuLmI0YjQ5ZDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdEdldFBhdGhJbmZvR2V0UGF0aFRyYW5zbGF0ZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RHZXRQYXRoSW5mb0dldFBhdGhUcmFuc2xhdGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1yZXF1ZXN0LWdldFBhdGhJbmZvLWdldFBhdGhUcmFuc2xhdGVkIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RHZXRQYXRoSW5mb0dldFBhdGhUcmFuc2xhdGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdEdldFBhdGhJbmZvR2V0UGF0aFRyYW5zbGF0ZWQvYnVpbGQueG1sCmluZGV4IGViZGNmMmYuLjVhM2IyMjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdEdldFBhdGhJbmZvR2V0UGF0aFRyYW5zbGF0ZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdEdldFBhdGhJbmZvR2V0UGF0aFRyYW5zbGF0ZWQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0TG9uZ1VyaS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RMb25nVXJpL1dlYlRlc3QuamF2YQppbmRleCBhY2M2ZTZkLi5lYWM0YTIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RMb25nVXJpL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RMb25nVXJpL1dlYlRlc3QuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHRlc3RpbmcgdmVyeSBsb25nIHJlcXVlc3QgVVJJIik7CkBAIC01OCw3ICs1OCw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nIHBhdGhJbmZvLCBTdHJpbmcgZXhwZWN0ZWQpIHRocm93cyBFeGNlcHRpb24gewpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiICsKICAgICAgICAgICAgICAgICAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdExvbmdVcmkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdExvbmdVcmkvYnVpbGQucHJvcGVydGllcwppbmRleCA2ZjJjNjA3Li42NjRkZjNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RMb25nVXJpL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0TG9uZ1VyaS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtcmVxdWVzdC1sb25nLXVyaSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0TG9uZ1VyaS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RMb25nVXJpL2J1aWxkLnhtbAppbmRleCAwMGZkYWQzLi5jMzk3NzZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RMb25nVXJpL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RMb25nVXJpL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsMTAgKzcwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0UGFyYW1zUHJlc2VydmVPcmRlci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RQYXJhbXNQcmVzZXJ2ZU9yZGVyL1dlYlRlc3QuamF2YQppbmRleCA3ODVkODg4Li5hZGQ2MDk5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RQYXJhbXNQcmVzZXJ2ZU9yZGVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RQYXJhbXNQcmVzZXJ2ZU9yZGVyL1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MDU3Mzg1Iik7CiAKQEAgLTU3LDcgKzU3LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgKyAiL1Rlc3RTZXJ2bGV0P3BhcmFtMT12YWx1ZTEmcGFyYW0yPXZhbHVlMiZwYXJhbTM9dmFsdWUzIjsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikKQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgaW50IGNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwogICAgICAgICBpZiAoY29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlVuZXhwZWN0ZWQgcmV0dXJuIGNvZGU6ICIgKyBjb2RlKTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBudWxsOwpAQCAtOTMsNiArOTMsNiBAQAogICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CiAgICAgICAgICAgICAgICAgLy8gaWdub3JlCiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RQYXJhbXNQcmVzZXJ2ZU9yZGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RQYXJhbXNQcmVzZXJ2ZU9yZGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMGJkMDE3Ny4uMjI3NjM5NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0UGFyYW1zUHJlc2VydmVPcmRlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFBhcmFtc1ByZXNlcnZlT3JkZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LXJlcXVlc3QtcGFyYW1zLXByZXNlcnZlLW9yZGVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RQYXJhbXNQcmVzZXJ2ZU9yZGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFBhcmFtc1ByZXNlcnZlT3JkZXIvYnVpbGQueG1sCmluZGV4IDg1NDJlOTEuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFBhcmFtc1ByZXNlcnZlT3JkZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFBhcmFtc1ByZXNlcnZlT3JkZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNyArNDIsMTcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFBhcmFtc1ByZXNlcnZlT3JkZXIvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0UGFyYW1zUHJlc2VydmVPcmRlci9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNGQ5ZDRhMC4uOThkMTY4NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0UGFyYW1zUHJlc2VydmVPcmRlci9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0UGFyYW1zUHJlc2VydmVPcmRlci9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTI3LDcgKzI3LDcgQEAKICAgICAgICAgPGRpc3BsYXktbmFtZT5UZXN0U2VydmxldDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0U2V0Q2hhckVuY29kaW5nSWxsZWdhbFN0YXRlRXhjZXB0aW9uL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFNldENoYXJFbmNvZGluZ0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbi9XZWJUZXN0LmphdmEKaW5kZXggMDU5M2NmNC4uYmUwYWRiZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0U2V0Q2hhckVuY29kaW5nSWxsZWdhbFN0YXRlRXhjZXB0aW9uL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RTZXRDaGFyRW5jb2RpbmdJbGxlZ2FsU3RhdGVFeGNlcHRpb24vV2ViVGVzdC5qYXZhCkBAIC01OCw3ICs1OCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNDkzNjg1NSIpOwpAQCAtNzEsMTggKzcxLDE4IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RTZXRDaGFyRW5jb2RpbmdJbGxlZ2FsU3RhdGVFeGNlcHRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFNldENoYXJFbmNvZGluZ0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDdhZDFkM2MuLmIyYzFiNjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFNldENoYXJFbmNvZGluZ0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFNldENoYXJFbmNvZGluZ0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtcmVxdWVzdC1zZXRjaGFyZW5jb2RpbmctaWxsZWdhbC1zdGF0ZS1leGNlcHRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFNldENoYXJFbmNvZGluZ0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RTZXRDaGFyRW5jb2RpbmdJbGxlZ2FsU3RhdGVFeGNlcHRpb24vYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFNldENoYXJFbmNvZGluZ0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0U2V0Q2hhckVuY29kaW5nSWxsZWdhbFN0YXRlRXhjZXB0aW9uL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFVSSU11bHRpcGxlU2VtaWNvbG9ucy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RVUklNdWx0aXBsZVNlbWljb2xvbnMvV2ViVGVzdC5qYXZhCmluZGV4IDg4NTM0MGUuLjc0MmU0M2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFVSSU11bHRpcGxlU2VtaWNvbG9ucy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0VVJJTXVsdGlwbGVTZW1pY29sb25zL1dlYlRlc3QuamF2YQpAQCAtNDksNyArNDksNyBAQAogCiAgICAgICAgIGV4cGVjdGVkUmVzcG9uc2UgPSBjb250ZXh0Um9vdCArICIvdGVzdC5qc3A7anNlc3Npb253aGF0ZXZlcj00NTYiOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHJlc291cmNlIGluamVjdGlvbiBpbnRvICIKQEAgLTYzLDExICs2MywxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvdGVzdC5qc3A7anNlc3Npb25pZD0xMjtqc2Vzc2lvbndoYXRldmVyPTQ1NiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICAgICAgICBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKICAgICAgICAgICAgIGlmICghZXhwZWN0ZWRSZXNwb25zZS5lcXVhbHMobGluZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFJlc3BvbnNlICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKQEAgLTEwNSw2ICsxMDUsNiBAQAogICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CiAgICAgICAgICAgICAgICAgLy8gaWdub3JlCiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RVUklNdWx0aXBsZVNlbWljb2xvbnMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFVSSU11bHRpcGxlU2VtaWNvbG9ucy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA1YWE3MmIuLjlmZTNhZDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFVSSU11bHRpcGxlU2VtaWNvbG9ucy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFVSSU11bHRpcGxlU2VtaWNvbG9ucy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtcmVxdWVzdC11cmktbXVsdGlwbGUtc2VtaWNvbG9ucyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0VVJJTXVsdGlwbGVTZW1pY29sb25zL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFVSSU11bHRpcGxlU2VtaWNvbG9ucy9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0VVJJTXVsdGlwbGVTZW1pY29sb25zL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RVUklNdWx0aXBsZVNlbWljb2xvbnMvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkNvbnRleHRBdHRyaWJ1dGVMaXN0ZW5lci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uQ29udGV4dEF0dHJpYnV0ZUxpc3RlbmVyL1dlYlRlc3QuamF2YQppbmRleCAxYWI0OTBlLi5kNWExNDI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uQ29udGV4dEF0dHJpYnV0ZUxpc3RlbmVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uQ29udGV4dEF0dHJpYnV0ZUxpc3RlbmVyL1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHJlc291cmNlIGluamVjdGlvbiBpbnRvICIKQEAgLTU1LDExICs1NSwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgICAgICBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKICAgICAgICAgICAgIGlmICghRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewpAQCAtOTYsNiArOTYsNiBAQAogICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CiAgICAgICAgICAgICAgICAgLy8gaWdub3JlCiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uQ29udGV4dEF0dHJpYnV0ZUxpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uQ29udGV4dEF0dHJpYnV0ZUxpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNTJlYWM0OS4uMTQ0YzJhYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkNvbnRleHRBdHRyaWJ1dGVMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25Db250ZXh0QXR0cmlidXRlTGlzdGVuZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LXJlc291cmNlLWluamVjdGlvbi1jb250ZXh0LWF0dHJpYnV0ZS1saXN0ZW5lciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkNvbnRleHRBdHRyaWJ1dGVMaXN0ZW5lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uQ29udGV4dEF0dHJpYnV0ZUxpc3RlbmVyL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uQ29udGV4dEF0dHJpYnV0ZUxpc3RlbmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uQ29udGV4dEF0dHJpYnV0ZUxpc3RlbmVyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25Db250ZXh0QXR0cmlidXRlTGlzdGVuZXIvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25Db250ZXh0QXR0cmlidXRlTGlzdGVuZXIvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQppbmRleCBlMjc1MWExLi5jZjE5MzEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uQ29udGV4dEF0dHJpYnV0ZUxpc3RlbmVyL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkNvbnRleHRBdHRyaWJ1dGVMaXN0ZW5lci9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCkBAIC00OSw3ICs0OSw3IEBACiAgICAgcHVibGljIHZvaWQgYXR0cmlidXRlQWRkZWQoU2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudCBzY2FlKSB7CiAKICAgICAgICAgU2VydmxldENvbnRleHQgc2MgPSBzY2FlLmdldFNlcnZsZXRDb250ZXh0KCk7Ci0gICAgCisKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgaW50IGxvZ2luVGltZW91dCA9IGRzMS5nZXRMb2dpblRpbWVvdXQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25Db250ZXh0TGlzdGVuZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkNvbnRleHRMaXN0ZW5lci9XZWJUZXN0LmphdmEKaW5kZXggMzNiM2M3Mi4uYjcwMGM2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkNvbnRleHRMaXN0ZW5lci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkNvbnRleHRMaXN0ZW5lci9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciByZXNvdXJjZSBpbmplY3Rpb24gaW50byBzZXJ2bGV0ICIKQEAgLTU1LDExICs1NSwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgICAgICBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKICAgICAgICAgICAgIGlmICghRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewpAQCAtOTYsNiArOTYsNiBAQAogICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CiAgICAgICAgICAgICAgICAgLy8gaWdub3JlCiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uQ29udGV4dExpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uQ29udGV4dExpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOWNkZmEwOS4uOTFlZmU4MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkNvbnRleHRMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25Db250ZXh0TGlzdGVuZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LXJlc291cmNlLWluamVjdGlvbi1jb250ZXh0LWxpc3RlbmVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uQ29udGV4dExpc3RlbmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25Db250ZXh0TGlzdGVuZXIvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25Db250ZXh0TGlzdGVuZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25Db250ZXh0TGlzdGVuZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkNvbnRleHRMaXN0ZW5lci9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkNvbnRleHRMaXN0ZW5lci9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCmluZGV4IDU3ZDY0NjYuLjExOGU3MjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25Db250ZXh0TGlzdGVuZXIvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uQ29udGV4dExpc3RlbmVyL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICBwdWJsaWMgdm9pZCBjb250ZXh0SW5pdGlhbGl6ZWQoU2VydmxldENvbnRleHRFdmVudCBzY2UpIHsKIAogICAgICAgICBTZXJ2bGV0Q29udGV4dCBzYyA9IHNjZS5nZXRTZXJ2bGV0Q29udGV4dCgpOwotICAgIAorCiAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgIGludCBsb2dpblRpbWVvdXQgPSBkczEuZ2V0TG9naW5UaW1lb3V0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uRmlsdGVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25GaWx0ZXIvV2ViVGVzdC5qYXZhCmluZGV4IGMwZmE3YjYuLmZiZDU3ZTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25GaWx0ZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25GaWx0ZXIvV2ViVGVzdC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcmVzb3VyY2UgaW5qZWN0aW9uIGludG8gc2VydmxldCAiCkBAIC01MSwxOCArNTEsMTggQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiICsKICAgICAgICAgICAgICAgICAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25GaWx0ZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25GaWx0ZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBmMWVjMTY4Li4zNjJmNTBlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uRmlsdGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkZpbHRlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtcmVzb3VyY2UtaW5qZWN0aW9uLWZpbHRlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkZpbHRlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uRmlsdGVyL2J1aWxkLnhtbAppbmRleCAwMGZkYWQzLi5jMzk3NzZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uRmlsdGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uRmlsdGVyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsMTAgKzcwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkZpbHRlci9zZXJ2bGV0L215ZmlsdGVyL015RmlsdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uRmlsdGVyL3NlcnZsZXQvbXlmaWx0ZXIvTXlGaWx0ZXIuamF2YQppbmRleCAyMTRjMzBhLi42N2E0ZjdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uRmlsdGVyL3NlcnZsZXQvbXlmaWx0ZXIvTXlGaWx0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uRmlsdGVyL3NlcnZsZXQvbXlmaWx0ZXIvTXlGaWx0ZXIuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogCiAgICAgICAgIFNlcnZsZXRDb250ZXh0IHNjID0gZmlsdGVyQ29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7Ci0gICAgCisKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgaW50IGxvZ2luVGltZW91dCA9IGRzMS5nZXRMb2dpblRpbWVvdXQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25IdHRwU2Vzc2lvbkF0dHJpYnV0ZUxpc3RlbmVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25IdHRwU2Vzc2lvbkF0dHJpYnV0ZUxpc3RlbmVyL1dlYlRlc3QuamF2YQppbmRleCAwMTYxYmQ2Li5iOTZmYmE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uSHR0cFNlc3Npb25BdHRyaWJ1dGVMaXN0ZW5lci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkh0dHBTZXNzaW9uQXR0cmlidXRlTGlzdGVuZXIvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcmVzb3VyY2UgaW5qZWN0aW9uIGludG8gIgpAQCAtNTYsMTEgKzU2LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTc5LDcgKzc5LDcgQEAKICAgICAgICAgICAgIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpOwogICAgICAgICAgICAgaWYgKCFFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZmluYWxseSB7CkBAIC05Nyw2ICs5Nyw2IEBACiAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKICAgICAgICAgICAgICAgICAvLyBpZ25vcmUKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25IdHRwU2Vzc2lvbkF0dHJpYnV0ZUxpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uSHR0cFNlc3Npb25BdHRyaWJ1dGVMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDY3NDM5OWUuLjljZmU4NWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25IdHRwU2Vzc2lvbkF0dHJpYnV0ZUxpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkh0dHBTZXNzaW9uQXR0cmlidXRlTGlzdGVuZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LXJlc291cmNlLWluamVjdGlvbi1odHRwLXNlc3Npb24tYXR0cmlidXRlLWxpc3RlbmVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uSHR0cFNlc3Npb25BdHRyaWJ1dGVMaXN0ZW5lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uSHR0cFNlc3Npb25BdHRyaWJ1dGVMaXN0ZW5lci9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkh0dHBTZXNzaW9uQXR0cmlidXRlTGlzdGVuZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25IdHRwU2Vzc2lvbkF0dHJpYnV0ZUxpc3RlbmVyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25IdHRwU2Vzc2lvbkF0dHJpYnV0ZUxpc3RlbmVyL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uSHR0cFNlc3Npb25BdHRyaWJ1dGVMaXN0ZW5lci9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCmluZGV4IDk3NmFhMTMuLjBmZjIyZTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25IdHRwU2Vzc2lvbkF0dHJpYnV0ZUxpc3RlbmVyL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkh0dHBTZXNzaW9uQXR0cmlidXRlTGlzdGVuZXIvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQpAQCAtNTEsNyArNTEsNyBAQAogCiAgICAgICAgIEh0dHBTZXNzaW9uIHNlc3Npb24gPSBoc2JlLmdldFNlc3Npb24oKTsKICAgICAgICAgU2VydmxldENvbnRleHQgc2MgPSBzZXNzaW9uLmdldFNlcnZsZXRDb250ZXh0KCk7Ci0gICAgCisKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgaW50IGxvZ2luVGltZW91dCA9IGRzMS5nZXRMb2dpblRpbWVvdXQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25IdHRwU2Vzc2lvbkxpc3RlbmVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25IdHRwU2Vzc2lvbkxpc3RlbmVyL1dlYlRlc3QuamF2YQppbmRleCA5YzdiYTlhLi40YjBlYjhhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uSHR0cFNlc3Npb25MaXN0ZW5lci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkh0dHBTZXNzaW9uTGlzdGVuZXIvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcmVzb3VyY2UgaW5qZWN0aW9uIGludG8gIgpAQCAtNTYsMTEgKzU2LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTc5LDcgKzc5LDcgQEAKICAgICAgICAgICAgIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpOwogICAgICAgICAgICAgaWYgKCFFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZmluYWxseSB7CkBAIC05Nyw2ICs5Nyw2IEBACiAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKICAgICAgICAgICAgICAgICAvLyBpZ25vcmUKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25IdHRwU2Vzc2lvbkxpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uSHR0cFNlc3Npb25MaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDcyZTUwMWMuLmMwOWNjYTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25IdHRwU2Vzc2lvbkxpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkh0dHBTZXNzaW9uTGlzdGVuZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LXJlc291cmNlLWluamVjdGlvbi1odHRwLXNlc3Npb24tbGlzdGVuZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25IdHRwU2Vzc2lvbkxpc3RlbmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25IdHRwU2Vzc2lvbkxpc3RlbmVyL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uSHR0cFNlc3Npb25MaXN0ZW5lci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkh0dHBTZXNzaW9uTGlzdGVuZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkh0dHBTZXNzaW9uTGlzdGVuZXIvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25IdHRwU2Vzc2lvbkxpc3RlbmVyL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKaW5kZXggODJjMTNlZC4uMTNlNDY1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkh0dHBTZXNzaW9uTGlzdGVuZXIvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uSHR0cFNlc3Npb25MaXN0ZW5lci9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCkBAIC01MCw3ICs1MCw3IEBACiAKICAgICAgICAgSHR0cFNlc3Npb24gc2Vzc2lvbiA9IGhzZS5nZXRTZXNzaW9uKCk7CiAgICAgICAgIFNlcnZsZXRDb250ZXh0IHNjID0gc2Vzc2lvbi5nZXRTZXJ2bGV0Q29udGV4dCgpOwotICAgIAorCiAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgIGludCBsb2dpblRpbWVvdXQgPSBkczEuZ2V0TG9naW5UaW1lb3V0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uUmVxdWVzdEF0dHJpYnV0ZUxpc3RlbmVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25SZXF1ZXN0QXR0cmlidXRlTGlzdGVuZXIvV2ViVGVzdC5qYXZhCmluZGV4IDZiYmY5NTguLmY2ZDFiNzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25SZXF1ZXN0QXR0cmlidXRlTGlzdGVuZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25SZXF1ZXN0QXR0cmlidXRlTGlzdGVuZXIvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcmVzb3VyY2UgaW5qZWN0aW9uIGludG8gIgpAQCAtNTUsMTEgKzU1LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgICAgIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpOwogICAgICAgICAgICAgaWYgKCFFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZmluYWxseSB7CkBAIC05Niw2ICs5Niw2IEBACiAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKICAgICAgICAgICAgICAgICAvLyBpZ25vcmUKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25SZXF1ZXN0QXR0cmlidXRlTGlzdGVuZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25SZXF1ZXN0QXR0cmlidXRlTGlzdGVuZXIvYnVpbGQucHJvcGVydGllcwppbmRleCA2NzUzMzkyLi4zYjAwNGE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uUmVxdWVzdEF0dHJpYnV0ZUxpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblJlcXVlc3RBdHRyaWJ1dGVMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtcmVzb3VyY2UtaW5qZWN0aW9uLXJlcXVlc3QtYXR0cmlidXRlLWxpc3RlbmVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uUmVxdWVzdEF0dHJpYnV0ZUxpc3RlbmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25SZXF1ZXN0QXR0cmlidXRlTGlzdGVuZXIvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25SZXF1ZXN0QXR0cmlidXRlTGlzdGVuZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25SZXF1ZXN0QXR0cmlidXRlTGlzdGVuZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblJlcXVlc3RBdHRyaWJ1dGVMaXN0ZW5lci9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblJlcXVlc3RBdHRyaWJ1dGVMaXN0ZW5lci9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCmluZGV4IDliMjU1ZDUuLjM2MmFlYWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25SZXF1ZXN0QXR0cmlidXRlTGlzdGVuZXIvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uUmVxdWVzdEF0dHJpYnV0ZUxpc3RlbmVyL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKQEAgLTUwLDcgKzUwLDcgQEAKIAogICAgICAgICBTZXJ2bGV0UmVxdWVzdCBzciA9IHNyYWUuZ2V0U2VydmxldFJlcXVlc3QoKTsKICAgICAgICAgU2VydmxldENvbnRleHQgc2MgPSBzcmFlLmdldFNlcnZsZXRDb250ZXh0KCk7Ci0gICAgCisKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgaW50IGxvZ2luVGltZW91dCA9IGRzMS5nZXRMb2dpblRpbWVvdXQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25SZXF1ZXN0TGlzdGVuZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblJlcXVlc3RMaXN0ZW5lci9XZWJUZXN0LmphdmEKaW5kZXggYWFiN2E2Yy4uOGQ1OTk0MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblJlcXVlc3RMaXN0ZW5lci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblJlcXVlc3RMaXN0ZW5lci9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciByZXNvdXJjZSBpbmplY3Rpb24gaW50byAiCkBAIC01NSwxMSArNTUsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICAgICAgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7CiAgICAgICAgICAgICBpZiAoIUVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKQEAgLTk2LDYgKzk2LDYgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgewogICAgICAgICAgICAgICAgIC8vIGlnbm9yZQogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblJlcXVlc3RMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblJlcXVlc3RMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk0MDQ0NGIuLjlhMDI2NWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25SZXF1ZXN0TGlzdGVuZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uUmVxdWVzdExpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1yZXNvdXJjZS1pbmplY3Rpb24tcmVxdWVzdC1saXN0ZW5lciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblJlcXVlc3RMaXN0ZW5lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uUmVxdWVzdExpc3RlbmVyL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uUmVxdWVzdExpc3RlbmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uUmVxdWVzdExpc3RlbmVyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25SZXF1ZXN0TGlzdGVuZXIvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25SZXF1ZXN0TGlzdGVuZXIvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQppbmRleCBkNmFmNjdiLi5iNmRkNTVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uUmVxdWVzdExpc3RlbmVyL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblJlcXVlc3RMaXN0ZW5lci9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCkBAIC01MSw3ICs1MSw3IEBACiAKICAgICAgICAgU2VydmxldFJlcXVlc3Qgc3IgPSBzcmUuZ2V0U2VydmxldFJlcXVlc3QoKTsKICAgICAgICAgU2VydmxldENvbnRleHQgc2MgPSBzcmUuZ2V0U2VydmxldENvbnRleHQoKTsKLSAgICAKKwogICAgICAgICB0cnkgewogCiAgICAgICAgICAgICBpbnQgbG9naW5UaW1lb3V0ID0gZHMxLmdldExvZ2luVGltZW91dCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblNlcnZsZXRJbnN0YW5jZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uU2VydmxldEluc3RhbmNlL1dlYlRlc3QuamF2YQppbmRleCA1NmFiYzc3Li44OTFhNzBiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uU2VydmxldEluc3RhbmNlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uU2VydmxldEluc3RhbmNlL1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHJlc291cmNlIGluamVjdGlvbiBpbnRvICIKQEAgLTU0LDExICs1NCwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC03OCw5ICs3OCw5IEBACiAgICAgICAgICAgICBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKICAgICAgICAgICAgIGlmICghRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwotCSAgICB9CisgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzICE9IG51bGwpIHsKQEAgLTk2LDYgKzk2LDYgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgewogICAgICAgICAgICAgICAgIC8vIGlnbm9yZQogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblNlcnZsZXRJbnN0YW5jZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblNlcnZsZXRJbnN0YW5jZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDJiNTNkYWMuLmE1YjgxZDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0SW5zdGFuY2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uU2VydmxldEluc3RhbmNlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1yZXNvdXJjZS1pbmplY3Rpb24tc2VydmxldC1pbnN0YW5jZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblNlcnZsZXRJbnN0YW5jZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uU2VydmxldEluc3RhbmNlL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uU2VydmxldEluc3RhbmNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uU2VydmxldEluc3RhbmNlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0SW5zdGFuY2VMb2FkT25TdGFydHVwL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0SW5zdGFuY2VMb2FkT25TdGFydHVwL1dlYlRlc3QuamF2YQppbmRleCA0NjNkYzNlLi5lOGQzNDQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uU2VydmxldEluc3RhbmNlTG9hZE9uU3RhcnR1cC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblNlcnZsZXRJbnN0YW5jZUxvYWRPblN0YXJ0dXAvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcmVzb3VyY2UgaW5qZWN0aW9uIGludG8gIgpAQCAtNTYsMTEgKzU2LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTc5LDEwICs3OSwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uU2VydmxldEluc3RhbmNlTG9hZE9uU3RhcnR1cC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblNlcnZsZXRJbnN0YW5jZUxvYWRPblN0YXJ0dXAvYnVpbGQucHJvcGVydGllcwppbmRleCBjOTRhNDdhLi40ZmI2MDA3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uU2VydmxldEluc3RhbmNlTG9hZE9uU3RhcnR1cC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0SW5zdGFuY2VMb2FkT25TdGFydHVwL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1yZXNvdXJjZS1pbmplY3Rpb24tc2VydmxldC1pbnN0YW5jZS1sb2FkLW9uLXN0YXJ0dXAiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0SW5zdGFuY2VMb2FkT25TdGFydHVwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0SW5zdGFuY2VMb2FkT25TdGFydHVwL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uU2VydmxldEluc3RhbmNlTG9hZE9uU3RhcnR1cC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblNlcnZsZXRJbnN0YW5jZUxvYWRPblN0YXJ0dXAvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNwb25zZVF1b3RlZENvbnRlbnRUeXBlSW1iYWxhbmNlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzcG9uc2VRdW90ZWRDb250ZW50VHlwZUltYmFsYW5jZS9XZWJUZXN0LmphdmEKaW5kZXggOTlmNTQ4MS4uZGIyMDBkOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNwb25zZVF1b3RlZENvbnRlbnRUeXBlSW1iYWxhbmNlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc3BvbnNlUXVvdGVkQ29udGVudFR5cGVJbWJhbGFuY2UvV2ViVGVzdC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjMxNjI1NCIpOwpAQCAtNTAsMTggKzUwLDE4IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc3BvbnNlUXVvdGVkQ29udGVudFR5cGVJbWJhbGFuY2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzcG9uc2VRdW90ZWRDb250ZW50VHlwZUltYmFsYW5jZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGYyNTM4MjcuLjJiM2Y5ZDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzcG9uc2VRdW90ZWRDb250ZW50VHlwZUltYmFsYW5jZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzcG9uc2VRdW90ZWRDb250ZW50VHlwZUltYmFsYW5jZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtcmVzcG9uc2UtcXVvdGVkLWNvbnRlbnQtdHlwZS1pbWJhbGFuY2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzcG9uc2VRdW90ZWRDb250ZW50VHlwZUltYmFsYW5jZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc3BvbnNlUXVvdGVkQ29udGVudFR5cGVJbWJhbGFuY2UvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzcG9uc2VRdW90ZWRDb250ZW50VHlwZUltYmFsYW5jZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNwb25zZVF1b3RlZENvbnRlbnRUeXBlSW1iYWxhbmNlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0U1NMUmVxdWVzdEF0dHJpYnV0ZXMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRTU0xSZXF1ZXN0QXR0cmlidXRlcy9XZWJUZXN0LmphdmEKaW5kZXggMTI0YmFkYy4uOWI3ZGY4MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRTU0xSZXF1ZXN0QXR0cmlidXRlcy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRTU0xSZXF1ZXN0QXR0cmlidXRlcy9XZWJUZXN0LmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIC8qCi0gKiBVbml0IHRlc3QgcmVsYXRlZCB0byAKKyAqIFVuaXQgdGVzdCByZWxhdGVkIHRvCiAgKiBodHRwczovL2dsYXNzZmlzaC5kZXYuamF2YS5uZXQvaXNzdWVzL3Nob3dfYnVnLmNnaT9pZD01NjIKICAqICgiSHR0cFNlcnZsZXRSZXF1ZXN0IGRvZXMgbm90IHJldHVybiBhbnkgYXR0cmlidXRlIGluIEpBWC1XUyB3ZWIgc2VydmljZSIpOgogICoKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgU3RyaW5nIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICAgICAgU3RyaW5nIGtleVN0b3JlUGF0aCA9IGFyZ3NbM107CiAgICAgICAgIFN0cmluZyB0cnVzdFN0b3JlUGF0aCA9IGFyZ3NbNF07Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTU0xTb2NrZXRGYWN0b3J5IHNzZiA9IGdldFNTTFNvY2tldEZhY3Rvcnkoa2V5U3RvcmVQYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydXN0U3RvcmVQYXRoKTsKQEAgLTcyLDkgKzcyLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIi9UZXN0U2VydmxldCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NmKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBwYXJzZVJlc3BvbnNlKGNvbm5lY3Rpb24pOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0xMTcsNyArMTE3LDcgQEAKIAogICAgICAgICBTU0xDb250ZXh0IGN0eCA9IFNTTENvbnRleHQuZ2V0SW5zdGFuY2UoIlRMUyIpOwogCi0gICAgICAgIC8vIEtleXN0b3JlIAorICAgICAgICAvLyBLZXlzdG9yZQogICAgICAgICBLZXlTdG9yZSBrcyA9IEtleVN0b3JlLmdldEluc3RhbmNlKCJKS1MiKTsKICAgICAgICAgY2hhcltdIHBhc3NwaHJhc2UgPSAiY2hhbmdlaXQiLnRvQ2hhckFycmF5KCk7CiAgICAgICAgIGtzLmxvYWQobmV3IEZpbGVJbnB1dFN0cmVhbShrZXlTdG9yZVBhdGgpLCBwYXNzcGhyYXNlKTsKQEAgLTEzMyw3ICsxMzMsNyBAQAogICAgICAgICB0bWYuaW5pdCh0cnVzdFN0b3JlKTsKIAogICAgICAgICBjdHguaW5pdChrbWYuZ2V0S2V5TWFuYWdlcnMoKSx0bWYuZ2V0VHJ1c3RNYW5hZ2VycygpLCBudWxsKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGN0eC5nZXRTb2NrZXRGYWN0b3J5KCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFNTTFJlcXVlc3RBdHRyaWJ1dGVzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFNTTFJlcXVlc3RBdHRyaWJ1dGVzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggM2QyMmE2Yi4uOGZjNjA3ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRTU0xSZXF1ZXN0QXR0cmlidXRlcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0U1NMUmVxdWVzdEF0dHJpYnV0ZXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LXNzbC1yZXF1ZXN0LWF0dHJpYnV0ZXMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0U1NMUmVxdWVzdEF0dHJpYnV0ZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRTU0xSZXF1ZXN0QXR0cmlidXRlcy9idWlsZC54bWwKaW5kZXggYTdlYWI5ZC4uNjU2ZGRkYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRTU0xSZXF1ZXN0QXR0cmlidXRlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRTU0xSZXF1ZXN0QXR0cmlidXRlcy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE4ICs0NCwxOCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTc3LDEwICs3NywxMCBAQAogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRTU0xSZXF1ZXN0QXR0cmlidXRlcy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFNTTFJlcXVlc3RBdHRyaWJ1dGVzL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBjMmE3NjhlLi5mNTVjYjlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFNTTFJlcXVlc3RBdHRyaWJ1dGVzL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFNTTFJlcXVlc3RBdHRyaWJ1dGVzL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMTMgKzIyLDEzIEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgIDxkaXNwbGF5LW5hbWU+VGVzdFNlcnZsZXQ8L2Rpc3BsYXktbmFtZT4KICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgIDxzZXJ2bGV0LWNsYXNzPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICA8dXJsLXBhdHRlcm4+L1Rlc3RTZXJ2bGV0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0U1NMUmVxdWVzdEF0dHJpYnV0ZXMvc2VydmxldC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRTU0xSZXF1ZXN0QXR0cmlidXRlcy9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggYTA0YWE5YS4uYjQ1Zjk1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRTU0xSZXF1ZXN0QXR0cmlidXRlcy9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRTU0xSZXF1ZXN0QXR0cmlidXRlcy9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgICAgRW51bWVyYXRpb248U3RyaW5nPiBlID0gcmVxLmdldEF0dHJpYnV0ZU5hbWVzKCk7CiAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7CiAgICAgICAgICAgIGF0dHJzLmFwcGVuZChlLm5leHRFbGVtZW50KCkgKyAiOyIpOwotICAgICAgICB9ICAgICAgICAKKyAgICAgICAgfQogCiAgICAgICAgIHJlcy5nZXRXcml0ZXIoKS5wcmludChhdHRycyk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRUb0pzcEZpbGVNYXBwaW5nL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0VG9Kc3BGaWxlTWFwcGluZy9XZWJUZXN0LmphdmEKaW5kZXggNGVmMjY1Ni4uZTJmZTJkMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRUb0pzcEZpbGVNYXBwaW5nL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFRvSnNwRmlsZU1hcHBpbmcvV2ViVGVzdC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJ1Z3RyYXEgNDkyNDMyNiIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUzLDcgKzUzLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3Q7CiAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwgKyAiL1Rlc3RTZXJ2bGV0MSIpOwogICAgICAgICBpZiAoY29kZSAhPSAyMDApIHsKQEAgLTY3LDcgKzY3LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIGludCBpbnZva2VTZXJ2bGV0KFN0cmluZyB1cmwpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnZva2luZyBzZXJ2bGV0IGF0OiAiICsgdXJsKTsKIAogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRUb0pzcEZpbGVNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFRvSnNwRmlsZU1hcHBpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCA1ZTUzMGRmLi5jYTgwYjgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFRvSnNwRmlsZU1hcHBpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFRvSnNwRmlsZU1hcHBpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtdG8tanNwLWZpbGUtbWFwcGluZyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC10by1qc3AtZmlsZS1tYXBwaW5nIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0VG9Kc3BGaWxlTWFwcGluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFRvSnNwRmlsZU1hcHBpbmcvYnVpbGQueG1sCmluZGV4IDRlZGM5Y2MuLjRhYjc4NjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0VG9Kc3BGaWxlTWFwcGluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRUb0pzcEZpbGVNYXBwaW5nL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTkgKzQ0LDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkL1dlYlRlc3QuamF2YQppbmRleCAwMWE1OTIxLi5kMGFmZGVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWQvV2ViVGVzdC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAgKiB0b28gbGF0ZSBhY2NvcmRpbmcgdG8gU2VydmxldCBTcGVjIikuCiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAic2Vzc2lvbi1kZXN0cm95ZWQiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGNmZDhkNC4uODc1Y2ZhZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMSArMTUsMTEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2Vzc2lvbi1kZXN0cm95ZWQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkL2J1aWxkLnhtbAppbmRleCAwMmUyN2Q3Li5jMTRjZjMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWQvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxMCArNDQsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTU1LDE0ICs1NSwxNCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggN2ViNWVjMC4uNDJmNDkyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWQvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjMsNyArMjMsNyBAQAogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgogCi0gICAgPGxpc3RlbmVyPiAgICAgCisgICAgPGxpc3RlbmVyPgogICAgICAgICA8bGlzdGVuZXItY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvbGlzdGVuZXItY2xhc3M+CiAgICAgPC9saXN0ZW5lcj4KIApAQCAtMzEsMTQgKzMxLDE0IEBACiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KICAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotICAgIAorCiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWQvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWQvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IGI3Yzk2MzcuLjcwMjk2MTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTIyLDEwICsyMiwxMCBAQAogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7CiAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IGltcGxlbWVudHMgSHR0cFNlc3Npb25MaXN0ZW5lciB7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQotICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJyZXNwb25zZSIsIHJlc3BvbnNlKTsKICAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuaW52YWxpZGF0ZSgpOwogICAgIH0KQEAgLTMzLDcgKzMzLDcgQEAKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChIdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgLy8gRG8gbm90aGluZwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25EZXN0cm95ZWQoSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIC8vIE1ha2Ugc3VyZSBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaXMgbm90IHRocm93bgogICAgICAgICB0cnkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWRDbGFzc0xvYWRlci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZENsYXNzTG9hZGVyL1dlYlRlc3QuamF2YQppbmRleCBmNDJjNTUyLi42YmIzZjM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZENsYXNzTG9hZGVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZENsYXNzTG9hZGVyL1dlYlRlc3QuamF2YQpAQCAtMTksOCArMTksOCBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogLyoKLSAqIAotICogCisgKgorICoKICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewogCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGNsYXNzbG9hZGVyIGluIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIkh0dHBTZXNzaW9uTGlzdGVuZXIuc2Vzc2lvbkRlc3Ryb3llZCgpIik7CkBAIC00OSw3ICs0OSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTYwLDcgKzYwLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBiYXNlVXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdCArICIvdGVzdCI7CiAKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikobmV3IFVSTChiYXNlVXJsICsgIj90aW1lb3V0PTEiKSkub3BlbkNvbm5lY3Rpb24oKTsKQEAgLTg5LDcgKzg5LDcgQEAKICAgICAgICAgICAgIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpOwogICAgICAgICAgICAgaWYgKCFFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZmluYWxseSB7CkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIGdldFNlc3Npb25JZChIdHRwVVJMQ29ubmVjdGlvbiBjb25uKSB7CiAgICAgICAgIFN0cmluZyBzZXNzaW9uSWQgPSBudWxsOwogICAgICAgICBTdHJpbmcgY29va2llU3RyaW5nID0gY29ubi5nZXRIZWFkZXJGaWVsZCgiU2V0LUNvb2tpZSIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWRDbGFzc0xvYWRlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWRDbGFzc0xvYWRlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDhmY2EzYzIuLjAyZTEwZTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkQ2xhc3NMb2FkZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZENsYXNzTG9hZGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2Vzc2lvbi1leHBpcmVkIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZENsYXNzTG9hZGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkQ2xhc3NMb2FkZXIvYnVpbGQueG1sCmluZGV4IGNmOTNmYTQuLjI4Mjc1YTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkQ2xhc3NMb2FkZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkQ2xhc3NMb2FkZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDEwICs1MywxMCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWRDbGFzc0xvYWRlci9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZENsYXNzTG9hZGVyL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA4ODgwNDI5Li40YTMzNDk4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZENsYXNzTG9hZGVyL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZENsYXNzTG9hZGVyL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjMsNyArMjMsNyBAQAogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgogCi0gIDxsaXN0ZW5lcj4gICAgIAorICA8bGlzdGVuZXI+CiAgICAgPGxpc3RlbmVyLWNsYXNzPnRlc3QuTXlIdHRwU2Vzc2lvbkxpc3RlbmVyPC9saXN0ZW5lci1jbGFzcz4KICAgPC9saXN0ZW5lcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWREdXJpbmdVbmRlcGxveS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZER1cmluZ1VuZGVwbG95L1dlYlRlc3QuamF2YQppbmRleCBhZGJkMjRhLi5jZGM1YTVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZER1cmluZ1VuZGVwbG95L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZER1cmluZ1VuZGVwbG95L1dlYlRlc3QuamF2YQpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICBhZG1pblBhc3N3b3JkID0gYXJnc1s0XTsKICAgICAgICAgcnVuID0gYXJnc1s1XTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgODM0Iik7CkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBmaXJzdFJ1bigpIHRocm93cyBFeGNlcHRpb24gewpAQCAtMTI4LDcgKzEyOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlQ29kZSArICIsIGV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24uSFRUUF9PSyk7CiAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIFN0cmluZyBjb29raWUgPSBjb25uLmdldEhlYWRlckZpZWxkKCJzZXQtY29va2llIik7CiAgICAgICAgIGlmIChjb29raWUgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiTWlzc2luZyBTZXQtQ29va2llIHJlc3BvbnNlIGhlYWRlciIpOwpAQCAtMTYwLDcgKzE2MCw3IEBACiAgICAgICAgICAgICBTdHJpbmcgY29va2llID0gIkNvb2tpZTogIiArIGpzZXNzaW9uSWQgKyAiXG4iOwogICAgICAgICAgICAgb3Mud3JpdGUoY29va2llLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxyXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICAgICAgaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtMjA4LDcgKzIwOCw3IEBACiAgICAgICAgICAgICBTdHJpbmcgY29va2llID0gIkNvb2tpZTogIiArIGpzZXNzaW9uSWQgKyAiXG4iOwogICAgICAgICAgICAgb3Mud3JpdGUoY29va2llLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxyXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICAgICAgaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtMjYwLDcgKzI2MCw3IEBACiAgICAgICAgICAgICBTdHJpbmcgY29va2llID0gIkNvb2tpZTogIiArIGpzZXNzaW9uSWRTU08gKyAiXG4iOwogICAgICAgICAgICAgb3Mud3JpdGUoY29va2llLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxyXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICAgICAgaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtMjc3LDcgKzI3Nyw3IEBACiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKICAgICAgICAgICAgIFN0cmluZyByZWRpcmVjdFVybCA9ICJMb2NhdGlvbjogaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydAotICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL2xvZ2luLmpzcCI7IAorICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL2xvZ2luLmpzcCI7CiAgICAgICAgICAgICB3aGlsZSAoKGxpbmUgPSBici5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOwogICAgICAgICAgICAgICAgIGlmIChsaW5lLmVxdWFscyhyZWRpcmVjdFVybCkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkRHVyaW5nVW5kZXBsb3kvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkRHVyaW5nVW5kZXBsb3kvYnVpbGQucHJvcGVydGllcwppbmRleCAyNDM2OTMzLi40MTE0OWI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZER1cmluZ1VuZGVwbG95L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWREdXJpbmdVbmRlcGxveS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlc3Npb24tZGVzdHJveWVkLWR1cmluZy11bmRlcGxveSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWREdXJpbmdVbmRlcGxveS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZER1cmluZ1VuZGVwbG95L2J1aWxkLnhtbAppbmRleCAwYmNhMGFmLi41MDE1NDVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZER1cmluZ1VuZGVwbG95L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZER1cmluZ1VuZGVwbG95L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNTUsMTAgKzU1LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC02NiwxMCArNjYsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0LmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5GaXJzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtMTA3LDE0ICsxMDcsMTQgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS1hZ2FpbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95Ii8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZER1cmluZ1VuZGVwbG95L2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkRHVyaW5nVW5kZXBsb3kvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDE2MmU4NDMuLmJjNmRjMjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkRHVyaW5nVW5kZXBsb3kvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkRHVyaW5nVW5kZXBsb3kvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yNSwxMiArMjUsMTIgQEAKIAogICA8c2VjdXJpdHktY29uc3RyYWludD4KICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+Ci0JPHdlYi1yZXNvdXJjZS1uYW1lPlByb3RlY3RlZCBBcmVhPC93ZWItcmVzb3VyY2UtbmFtZT4KLQk8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgotCTxodHRwLW1ldGhvZD5ERUxFVEU8L2h0dHAtbWV0aG9kPgotCTxodHRwLW1ldGhvZD5HRVQ8L2h0dHAtbWV0aG9kPgotCTxodHRwLW1ldGhvZD5QT1NUPC9odHRwLW1ldGhvZD4KLQk8aHR0cC1tZXRob2Q+UFVUPC9odHRwLW1ldGhvZD4KKyAgICA8d2ViLXJlc291cmNlLW5hbWU+UHJvdGVjdGVkIEFyZWE8L3dlYi1yZXNvdXJjZS1uYW1lPgorICAgIDx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+CisgICAgPGh0dHAtbWV0aG9kPkRFTEVURTwvaHR0cC1tZXRob2Q+CisgICAgPGh0dHAtbWV0aG9kPkdFVDwvaHR0cC1tZXRob2Q+CisgICAgPGh0dHAtbWV0aG9kPlBPU1Q8L2h0dHAtbWV0aG9kPgorICAgIDxodHRwLW1ldGhvZD5QVVQ8L2h0dHAtbWV0aG9kPgogICAgIDwvd2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CiAKICAgICA8YXV0aC1jb25zdHJhaW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25FeHBpcmVkL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRXhwaXJlZC9XZWJUZXN0LmphdmEKaW5kZXggZGYxOGFhNy4uODEzN2Y1YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25FeHBpcmVkL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkV4cGlyZWQvV2ViVGVzdC5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiAvKgotICogTWFrZSBzdXJlIEh0dHBTZXNzaW9uTGlzdGVuZXIncyBzZXNzaW9uRGVzdHJveWVkKCksIGFuZCAKKyAqIE1ha2Ugc3VyZSBIdHRwU2Vzc2lvbkxpc3RlbmVyJ3Mgc2Vzc2lvbkRlc3Ryb3llZCgpLCBhbmQKICAqIEh0dHBTZXNzaW9uQmluZGluZ0xpc3RlbmVyJ3MgdmFsdWVVbmJvdW5kKCkgbWV0aG9kcyBhcmUgY2FsbGVkIHdoZW4KICAqIHNlc3Npb24gZXhwaXJlcy4KICAqCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJIdHRwU2Vzc2lvbkxpc3RlbmVyLnNlc3Npb25EZXN0cm95ZWQoKSIpOwpAQCAtNTUsNyArNTUsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL0NyZWF0ZVNlc3Npb24iOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKQpAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICAgICAgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7CiAgICAgICAgICAgICBpZiAoIUVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRXhwaXJlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25FeHBpcmVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDA5YjY2YS4uY2Q2ZGE1NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25FeHBpcmVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25FeHBpcmVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2Vzc2lvbi1leHBpcmVkIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkV4cGlyZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25FeHBpcmVkL2J1aWxkLnhtbAppbmRleCBjZjkzZmE0Li4yODI3NWE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkV4cGlyZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRXhwaXJlZC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkV4cGlyZWQvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25FeHBpcmVkL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBhNGVlYzI3Li42YWE4YjdiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkV4cGlyZWQvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRXhwaXJlZC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIzLDcgKzIzLDcgQEAKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KIAotICA8bGlzdGVuZXI+ICAgICAKKyAgPGxpc3RlbmVyPgogICAgIDxsaXN0ZW5lci1jbGFzcz50ZXN0Lk15SHR0cFNlc3Npb25MaXN0ZW5lcjwvbGlzdGVuZXItY2xhc3M+CiAgIDwvbGlzdGVuZXI+CiAKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICA8c2VydmxldC1uYW1lPkNoZWNrUmVzdWx0PC9zZXJ2bGV0LW5hbWU+CiAgICAgPHVybC1wYXR0ZXJuPi9DaGVja1Jlc3VsdDwvdXJsLXBhdHRlcm4+CiAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgIAorCiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25FeHBpcmVkL3NlcnZsZXQvdGVzdC9NeU9iamVjdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25FeHBpcmVkL3NlcnZsZXQvdGVzdC9NeU9iamVjdC5qYXZhCmluZGV4IGZkMDYxMGMuLmY2ZjMyZWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRXhwaXJlZC9zZXJ2bGV0L3Rlc3QvTXlPYmplY3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkV4cGlyZWQvc2VydmxldC90ZXN0L015T2JqZWN0LmphdmEKQEAgLTI3LDE3ICsyNywxNyBAQAogICAgICAqIE5vdGlmaWVzIHRoZSBvYmplY3QgdGhhdCBpdCBpcyBiZWluZyBib3VuZCB0byBhIHNlc3Npb24sIGFuZAogICAgICAqIGlkZW50aWZpZXMgdGhlIHNlc3Npb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRoYXQgaWRlbnRpZmllcyB0aGUgc2Vzc2lvbiAKKyAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRoYXQgaWRlbnRpZmllcyB0aGUgc2Vzc2lvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHZhbHVlQm91bmQoSHR0cFNlc3Npb25CaW5kaW5nRXZlbnQgZXZlbnQpIHsKICAgICAgICAgLy8gZG8gbm90aGluZwogICAgIH0KLSAgICAKKwogICAgIC8qCiAgICAgICogTm90aWZpZXMgdGhlIG9iamVjdCB0aGF0IGl0IGlzIGJlaW5nIHVuYm91bmQgZnJvbSBhIHNlc3Npb24sIGFuZAogICAgICAqIGlkZW50aWZpZXMgdGhlIHNlc3Npb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRoYXQgaWRlbnRpZmllcyB0aGUgc2Vzc2lvbiAKKyAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRoYXQgaWRlbnRpZmllcyB0aGUgc2Vzc2lvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHZhbHVlVW5ib3VuZChIdHRwU2Vzc2lvbkJpbmRpbmdFdmVudCBldmVudCkgewogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkQ3VzdG9tR2VuZXJhdG9yL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRDdXN0b21HZW5lcmF0b3IvV2ViVGVzdC5qYXZhCmluZGV4IGViYzBmYWYuLmQ0ZTY0NTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRDdXN0b21HZW5lcmF0b3IvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRDdXN0b21HZW5lcmF0b3IvV2ViVGVzdC5qYXZhCkBAIC00OSw3ICs0OSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIENSIDYyNzU3MDkiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01OCw4ICs1OCw4IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAKLSAgICAgICAgdHJ5IHsgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZVNlcnZsZXQoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTc2LDE0ICs3NiwxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2VTZXJ2bGV0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL2NyZWF0ZVNlc3Npb24iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRDdXN0b21HZW5lcmF0b3IvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRDdXN0b21HZW5lcmF0b3IvYnVpbGQucHJvcGVydGllcwppbmRleCAxZThkMzNmLi5iMDg2ZjVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkQ3VzdG9tR2VuZXJhdG9yL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZEN1c3RvbUdlbmVyYXRvci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlc3Npb24taWQtY3VzdG9tLWdlbmVyYXRvciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZEN1c3RvbUdlbmVyYXRvci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkQ3VzdG9tR2VuZXJhdG9yL2J1aWxkLnhtbAppbmRleCAzMTRjYmQ1Li5hM2FhOGRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkQ3VzdG9tR2VuZXJhdG9yL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkQ3VzdG9tR2VuZXJhdG9yL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTkgKzQ0LDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvcHktamFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxjb3B5IGZpbGU9InV1aWRHZW5lcmF0b3JJbXBsLmphciIgdG9kaXI9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2xpYiIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRQcmVzZW50SW5Cb3RoUmV3cml0dGVuVXJsQW5kQ29va2llQnlEZWZhdWx0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRQcmVzZW50SW5Cb3RoUmV3cml0dGVuVXJsQW5kQ29va2llQnlEZWZhdWx0L1dlYlRlc3QuamF2YQppbmRleCA3YzI2MDUwLi40NjExMzM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkUHJlc2VudEluQm90aFJld3JpdHRlblVybEFuZENvb2tpZUJ5RGVmYXVsdC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFByZXNlbnRJbkJvdGhSZXdyaXR0ZW5VcmxBbmRDb29raWVCeURlZmF1bHQvV2ViVGVzdC5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElUIDQzOTQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01Myw4ICs1Myw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJ1blRlc3QoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC03Miw3ICs3Miw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHJ1blRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgIAorCiAgICAgICAgIHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL2NyZWF0ZVNlc3Npb24iICsgIiBIVFRQLzEuMFxuIjsKQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGxvY2F0aW9uSGVhZGVyID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGNvb2tpZUhlYWRlciA9IG51bGw7Ci0gICAgICAgIHRyeSB7ICAgICAgICAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwpAQCAtMTE2LDcgKzExNiw3IEBACiAgICAgICAgIGlmIChjb29raWVIZWFkZXIgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiTWlzc2luZyBTZXQtQ29va2llIHJlc3BvbnNlIGhlYWRlciIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChsb2NhdGlvbkhlYWRlciA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJNaXNzaW5nIExvY2F0aW9uIHJlc3BvbnNlIGhlYWRlciIpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkUHJlc2VudEluQm90aFJld3JpdHRlblVybEFuZENvb2tpZUJ5RGVmYXVsdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFByZXNlbnRJbkJvdGhSZXdyaXR0ZW5VcmxBbmRDb29raWVCeURlZmF1bHQvYnVpbGQucHJvcGVydGllcwppbmRleCA4NGU3ODY2Li40NGVmZTEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkUHJlc2VudEluQm90aFJld3JpdHRlblVybEFuZENvb2tpZUJ5RGVmYXVsdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRQcmVzZW50SW5Cb3RoUmV3cml0dGVuVXJsQW5kQ29va2llQnlEZWZhdWx0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2Vzc2lvbi1pZC1wcmVzZW50LWluLWJvdGgtcmV3cml0dGVuLXVybC1hbmQtY29va2llLWJ5LWRlZmF1bHQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRQcmVzZW50SW5Cb3RoUmV3cml0dGVuVXJsQW5kQ29va2llQnlEZWZhdWx0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRQcmVzZW50SW5Cb3RoUmV3cml0dGVuVXJsQW5kQ29va2llQnlEZWZhdWx0L2J1aWxkLnhtbAppbmRleCAwMGZkYWQzLi5jMzk3NzZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkUHJlc2VudEluQm90aFJld3JpdHRlblVybEFuZENvb2tpZUJ5RGVmYXVsdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFByZXNlbnRJbkJvdGhSZXdyaXR0ZW5VcmxBbmRDb29raWVCeURlZmF1bHQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCwxMCArNzAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkUHJlc2VudE9ubHlJbkNvb2tpZUlmVXJsUmV3cml0aW5nRGlzYWJsZWQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFByZXNlbnRPbmx5SW5Db29raWVJZlVybFJld3JpdGluZ0Rpc2FibGVkL1dlYlRlc3QuamF2YQppbmRleCA3NjZkMjgxLi5lMDA1ZGMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkUHJlc2VudE9ubHlJbkNvb2tpZUlmVXJsUmV3cml0aW5nRGlzYWJsZWQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRQcmVzZW50T25seUluQ29va2llSWZVcmxSZXdyaXRpbmdEaXNhYmxlZC9XZWJUZXN0LmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgSVQgNDM5NCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUyLDggKzUyLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgcnVuVGVzdCgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTYzLDE0ICs2MywxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBydW5UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvY3JlYXRlU2Vzc2lvbiIgKyAiIEhUVFAvMS4wXG4iOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CkBAIC04OCw3ICs4OCw3IEBACiAgICAgICAgIGlmIChjb29raWVIZWFkZXIgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiTWlzc2luZyBTZXQtQ29va2llIHJlc3BvbnNlIGhlYWRlciIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChsb2NhdGlvbkhlYWRlciA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJNaXNzaW5nIExvY2F0aW9uIHJlc3BvbnNlIGhlYWRlciIpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkUHJlc2VudE9ubHlJbkNvb2tpZUlmVXJsUmV3cml0aW5nRGlzYWJsZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRQcmVzZW50T25seUluQ29va2llSWZVcmxSZXdyaXRpbmdEaXNhYmxlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDc4ZjhjNTguLjJmOWE4MWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRQcmVzZW50T25seUluQ29va2llSWZVcmxSZXdyaXRpbmdEaXNhYmxlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRQcmVzZW50T25seUluQ29va2llSWZVcmxSZXdyaXRpbmdEaXNhYmxlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlc3Npb24taWQtcHJlc2VudC1vbmx5LWluLWNvb2tpZS1pZi11cmwtcmV3cml0aW5nLWRpc2FibGVkIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkUHJlc2VudE9ubHlJbkNvb2tpZUlmVXJsUmV3cml0aW5nRGlzYWJsZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFByZXNlbnRPbmx5SW5Db29raWVJZlVybFJld3JpdGluZ0Rpc2FibGVkL2J1aWxkLnhtbAppbmRleCAwMGZkYWQzLi5jMzk3NzZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkUHJlc2VudE9ubHlJbkNvb2tpZUlmVXJsUmV3cml0aW5nRGlzYWJsZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRQcmVzZW50T25seUluQ29va2llSWZVcmxSZXdyaXRpbmdEaXNhYmxlZC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDEwICs3MCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRVcmxSZXdyaXRlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRVcmxSZXdyaXRlL1dlYlRlc3QuamF2YQppbmRleCA5MWRkOGI2Li5mMmQ2MWNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFVybFJld3JpdGUvV2ViVGVzdC5qYXZhCkBAIC00MSwxNSArNDEsMTUgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVSTCByZXdyaXRpbmcgd2l0aCBzZXNzaW9uIGlkIik7CiAgICAgICAgIG5ldyBXZWJUZXN0KGFyZ3MpLmRvVGVzdCgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCi0gICAgICAgIHRyeSB7IAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VTZXJ2bGV0KCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNjEsMTQgKzYxLDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZVNlcnZsZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgIAorCiAgICAgICAgIFNvY2tldCBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi9yZWRpcmVjdEZyb20iICsgIiBIVFRQLzEuMFxuIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtODgsNyArODgsNyBAQAogICAgICAgICBpZiAoY29va2llTGluZSAhPSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJVbmV4cGVjdGVkIFNldC1Db29raWUgcmVzcG9uc2UgaGVhZGVyIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKHJlZGlyZWN0TGluZSA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJNaXNzaW5nIExvY2F0aW9uIHJlc3BvbnNlIGhlYWRlciIpOwogICAgICAgICB9CkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFVybFJld3JpdGUvYnVpbGQtbmcucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRVcmxSZXdyaXRlL2J1aWxkLW5nLnByb3BlcnRpZXMKaW5kZXggYTcwMjA4Ny4uMTJlM2UxYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFVybFJld3JpdGUvYnVpbGQtbmcucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS9idWlsZC1uZy5wcm9wZXJ0aWVzCkBAIC0xNiw3ICsxNiw3IEBACiAKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2Vzc2lvbi1pZC11cmwtcmV3cml0ZSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2Vzc2lvbi1pZC11cmwtcmV3cml0ZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS9idWlsZC1uZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS9idWlsZC1uZy54bWwKaW5kZXggMWRkMWE2YS4uNWM0Y2QzNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFVybFJld3JpdGUvYnVpbGQtbmcueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRVcmxSZXdyaXRlL2J1aWxkLW5nLnhtbApAQCAtODAsNyArODAsNyBAQAogICAgICAgPGRlbGV0ZSBkaXI9InRlc3QtcmVwb3J0Ii8+CiAgICAgPC90YXJnZXQ+CiAKLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC05MCwxNiArOTAsMTYgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFVybFJld3JpdGUvYnVpbGQucHJvcGVydGllcwppbmRleCA3OGYyMjBmLi45MGFjZDljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRVcmxSZXdyaXRlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXNzaW9uLWlkLXVybC1yZXdyaXRlIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXNzaW9uLWlkLXVybC1yZXdyaXRlIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRVcmxSZXdyaXRlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRVcmxSZXdyaXRlL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFVybFJld3JpdGUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFVybFJld3JpdGUvdGVzdC9XZWJUZXN0TkcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRVcmxSZXdyaXRlL3Rlc3QvV2ViVGVzdE5HLmphdmEKaW5kZXggZjVlZTlkNC4uMTM5ODBkMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFVybFJld3JpdGUvdGVzdC9XZWJUZXN0TkcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS90ZXN0L1dlYlRlc3RORy5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXQpOwogICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwogCi0JYXNzZXJ0IHJlc3BvbnNlQ29kZSA9PSAyMDA7CisgICAgYXNzZXJ0IHJlc3BvbnNlQ29kZSA9PSAyMDA7CiAKICAgICAgICAgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihjb25uLmdldElucHV0U3RyZWFtKCkpKTsKICAgICAgICAgd2hpbGUgKChsaW5lID0gYmlzLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRVcmxSZXdyaXRlL3Rlc3QvdGVzdG5nLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRVcmxSZXdyaXRlL3Rlc3QvdGVzdG5nLnhtbAppbmRleCA4YTdkZjUyLi40MTVkMjVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS90ZXN0L3Rlc3RuZy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFVybFJld3JpdGUvdGVzdC90ZXN0bmcueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAtLT4KIAogPCFET0NUWVBFIHN1aXRlIFNZU1RFTSAiaHR0cDovL3Rlc3RuZy5vcmcvdGVzdG5nLTEuMC5kdGQiID4KLSAgCisKIDxzdWl0ZSBuYW1lPSJ3ZWIiID4KICAgPHBhcmFtZXRlciBuYW1lPSJob3N0IiB2YWx1ZT0ibG9jYWxob3N0Ii8+CiAgIDxwYXJhbWV0ZXIgbmFtZT0icG9ydCIgdmFsdWU9IjgwODAiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSW52YWxpZGF0ZU5vQ29va2llSW5SZXNwb25zZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkludmFsaWRhdGVOb0Nvb2tpZUluUmVzcG9uc2UvV2ViVGVzdC5qYXZhCmluZGV4IDY1ODJkNWIuLjc3YmVjY2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSW52YWxpZGF0ZU5vQ29va2llSW5SZXNwb25zZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JbnZhbGlkYXRlTm9Db29raWVJblJlc3BvbnNlL1dlYlRlc3QuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggODk2Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTIsOCArNTIsOCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCi0gICAgICAgIHRyeSB7IAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBydW4oKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNzIsNyArNzIsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIG51bWJlciBvZiBjb29raWUgcmVzcG9uc2UgaGVhZGVycy4gIik7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkV4cGVjdGVkIDEsIGdvdCAiICsgY29va2llQ291bnQpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwotCX0gZWxzZSBpZiAoIUVYUEVDVEVEX0NPT0tJRV9IRUFERVIuZXF1YWxzKGNvb2tpZUhlYWRlcikpIHsKKyAgICB9IGVsc2UgaWYgKCFFWFBFQ1RFRF9DT09LSUVfSEVBREVSLmVxdWFscyhjb29raWVIZWFkZXIpKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIGNvb2tpZSByZXNwb25zZSBoZWFkZXIuICIpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFeHBlY3RlZDogIiArIEVYUEVDVEVEX0NPT0tJRV9IRUFERVIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIGdvdDogIiArIGNvb2tpZUhlYWRlcik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkludmFsaWRhdGVOb0Nvb2tpZUluUmVzcG9uc2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSW52YWxpZGF0ZU5vQ29va2llSW5SZXNwb25zZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDUzMmE1ZDEuLjYzODAyYTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSW52YWxpZGF0ZU5vQ29va2llSW5SZXNwb25zZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSW52YWxpZGF0ZU5vQ29va2llSW5SZXNwb25zZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlc3Npb24taW52YWxpZGF0ZS1uby1jb29raWUtaW4tcmVzcG9uc2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSW52YWxpZGF0ZU5vQ29va2llSW5SZXNwb25zZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkludmFsaWRhdGVOb0Nvb2tpZUluUmVzcG9uc2UvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSW52YWxpZGF0ZU5vQ29va2llSW5SZXNwb25zZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JbnZhbGlkYXRlTm9Db29raWVJblJlc3BvbnNlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSnZtUm91dGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25Kdm1Sb3V0ZS9XZWJUZXN0LmphdmEKaW5kZXggYWI4NGNmZi4uMzhhNTNlYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25Kdm1Sb3V0ZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25Kdm1Sb3V0ZS9XZWJUZXN0LmphdmEKQEAgLTU4LDcgKzU4LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDM3OTYiKTsKICAgICAgICAgbmV3IFdlYlRlc3QoYXJncykuZG9UZXN0KCk7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTg4LDcgKzg4LDcgQEAKIAogICAgICAgICAvKgogICAgICAgICAgKiBDcmVhdGUgc2Vzc2lvbgotICAgICAgICAgKi8gICAgICAgIAorICAgICAgICAgKi8KICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9DcmVhdGVTZXNzaW9uIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsKTsKQEAgLTEwOSwxOSArMTA5LDE5IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJTZXNzaW9uIGNvb2tpZSBkb2VzIG5vdCBoYXZlIGFueSBKVk1ST1VURSIpOwogICAgICAgICB9CiAKLQlTdHJpbmcgY2xpZW50Q29va2llID0gc2Vzc2lvbkNvb2tpZUhlYWRlci5yZXBsYWNlKCJQYXRoIiwgIiRQYXRoIikucmVwbGFjZSgiSHR0cE9ubHkiLCAiJEh0dHBPbmx5Iik7CisgICAgU3RyaW5nIGNsaWVudENvb2tpZSA9IHNlc3Npb25Db29raWVIZWFkZXIucmVwbGFjZSgiUGF0aCIsICIkUGF0aCIpLnJlcGxhY2UoIkh0dHBPbmx5IiwgIiRIdHRwT25seSIpOwogICAgICAgICAvKgogICAgICAgICAgKiBSZXN1bWUgc2Vzc2lvbgotICAgICAgICAgKi8gICAgICAgIAorICAgICAgICAgKi8KICAgICAgICAgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXRSZXF1ZXN0TGluZSA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi9DaGVja1Nlc3Npb24iICsKICAgICAgICAgICAgICIgSFRUUC8xLjBcbiI7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5Db25uZWN0aW5nIHRvOiAiICsgZ2V0UmVxdWVzdExpbmUpOyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbkNvbm5lY3RpbmcgdG86ICIgKyBnZXRSZXF1ZXN0TGluZSk7CiAgICAgICAgIG9zLndyaXRlKGdldFJlcXVlc3RMaW5lLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgoIkNvb2tpZTogIiArIGNsaWVudENvb2tpZSArICJcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBzZXNzaW9uQ29va2llSGVhZGVyID0gbnVsbDsKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25Kdm1Sb3V0ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25Kdm1Sb3V0ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGMxMjg3MDMuLmI2ZGQyMjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSnZtUm91dGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkp2bVJvdXRlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2Vzc2lvbi1qdm0tcm91dGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSnZtUm91dGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25Kdm1Sb3V0ZS9idWlsZC54bWwKaW5kZXggZTkwNjYxZS4uMzE3M2JkYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25Kdm1Sb3V0ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25Kdm1Sb3V0ZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIxICs0NCwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzMsNyArNzMsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbk1lbW9yeVBlcnNpc3QvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0L1dlYlRlc3QuamF2YQppbmRleCA4YmI0MGRlLi5jODUxOTk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbk1lbW9yeVBlcnNpc3QvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdC9XZWJUZXN0LmphdmEKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgICAgICBydW4gPSBhcmdzWzNdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIChkZSlzZXJpYWxpemF0aW9uIG9mICIKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGZpcnN0UnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC04NCw3ICs4NCw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXQpOwogICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcclxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC0xMjksNyArMTI5LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvb2tpZSk7CiAgICAgICAgIG9zLndyaXRlKGNvb2tpZS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxyXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDhjMjE3OC4uNGVkMWQ5MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2Vzc2lvbi1tZW1vcnktcGVyc2lzdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdC9idWlsZC54bWwKaW5kZXggOWQzMDM4Ny4uZDNlNDY5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbk1lbW9yeVBlcnNpc3QvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMSArNDQsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5maXJzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODQsMTAgKzg0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0L2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZWQ3OGIyYS4uYTNiZjM0OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0L2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbk1lbW9yeVBlcnNpc3QvZGVzY3JpcHRvci93ZWIueG1sCkBAIC00NCw1ICs0NCw1IEBACiAgICAgPHNlcnZsZXQtbmFtZT5SZXN1bWVTZXNzaW9uPC9zZXJ2bGV0LW5hbWU+CiAgICAgPHVybC1wYXR0ZXJuPi9SZXN1bWVTZXNzaW9uPC91cmwtcGF0dGVybj4KICAgPC9zZXJ2bGV0LW1hcHBpbmc+Ci0gICAgCisKIDwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdC9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0L3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEKaW5kZXggODk3OTU3ZS4uY2RkODdjOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0L3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0L3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEKQEAgLTMwLDggKzMwLDggQEAKICAgICAgICAgSHR0cFNlc3Npb24gc2Vzc2lvbiA9IHJlcS5nZXRTZXNzaW9uKHRydWUpOwogCiAgICAgICAgIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgbWFwLnB1dCgibmFtZTEiLCAidmFsdWUxIik7ICAgCi0gICAgICAgIG1hcC5wdXQoIm5hbWUyIiwgInZhbHVlMiIpOyAgIAorICAgICAgICBtYXAucHV0KCJuYW1lMSIsICJ2YWx1ZTEiKTsKKyAgICAgICAgbWFwLnB1dCgibmFtZTIiLCAidmFsdWUyIik7CiAgICAgICAgIHNlc3Npb24uc2V0QXR0cmlidXRlKCJtYXAiLCBtYXApOwogCiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdC9zZXJ2bGV0L3Rlc3QvUmVzdW1lU2Vzc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0L3NlcnZsZXQvdGVzdC9SZXN1bWVTZXNzaW9uLmphdmEKaW5kZXggMjFmYjgzMi4uOTk3ZmMyNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0L3NlcnZsZXQvdGVzdC9SZXN1bWVTZXNzaW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0L3NlcnZsZXQvdGVzdC9SZXN1bWVTZXNzaW9uLmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSAoSW5pdGlhbENvbnRleHQpCiAgICAgICAgICAgICBzZXNzaW9uLmdldEF0dHJpYnV0ZSgiSk5ESUluaXRpYWxDb250ZXh0Iik7CiAKLSAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsgCisgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAgICAgICAgIGlmICgidmFsdWUxIi5lcXVhbHMobWFwLmdldCgibmFtZTEiKSkKICAgICAgICAgICAgICAgICAmJiAidmFsdWUyIi5lcXVhbHMobWFwLmdldCgibmFtZTIiKSkKICAgICAgICAgICAgICAgICAmJiAoaWMgIT0gbnVsbCkpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdFByaW1pdGl2ZUNsYXNzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdFByaW1pdGl2ZUNsYXNzL1dlYlRlc3QuamF2YQppbmRleCAxNWIwZTUyLi5jZTA0ODBhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbk1lbW9yeVBlcnNpc3RQcmltaXRpdmVDbGFzcy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0UHJpbWl0aXZlQ2xhc3MvV2ViVGVzdC5qYXZhCkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICAgICAgcnVuID0gYXJnc1szXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBDUiA2NzE2NTAzIik7CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBmaXJzdFJ1bigpIHRocm93cyBFeGNlcHRpb24gewpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKQEAgLTExOCw3ICsxMTgsNyBAQAogICAgICAgICBTdHJpbmcgY29va2llID0gIkNvb2tpZTogIiArIGpzZXNzaW9uSWQgKyAiXG4iOwogICAgICAgICBvcy53cml0ZShjb29raWUuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0UHJpbWl0aXZlQ2xhc3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdFByaW1pdGl2ZUNsYXNzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjJlYmQzMi4uNDAxNmUxNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0UHJpbWl0aXZlQ2xhc3MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbk1lbW9yeVBlcnNpc3RQcmltaXRpdmVDbGFzcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlc3Npb24tbWVtb3J5LXBlcnNpc3QtcHJpbWl0aXZlLWNsYXNzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbk1lbW9yeVBlcnNpc3RQcmltaXRpdmVDbGFzcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbk1lbW9yeVBlcnNpc3RQcmltaXRpdmVDbGFzcy9idWlsZC54bWwKaW5kZXggOWQzMDM4Ny4uZDNlNDY5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0UHJpbWl0aXZlQ2xhc3MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdFByaW1pdGl2ZUNsYXNzL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjEgKzQ0LDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuZmlyc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTg0LDEwICs4NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdFByaW1pdGl2ZUNsYXNzL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdFByaW1pdGl2ZUNsYXNzL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBlMDQwOWYyLi5mZTg1M2Y2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbk1lbW9yeVBlcnNpc3RQcmltaXRpdmVDbGFzcy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0UHJpbWl0aXZlQ2xhc3MvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0zNCw1ICszNCw1IEBACiAgICAgPHNlcnZsZXQtbmFtZT5SZXN1bWVTZXNzaW9uPC9zZXJ2bGV0LW5hbWU+CiAgICAgPHVybC1wYXR0ZXJuPi9SZXN1bWVTZXNzaW9uPC91cmwtcGF0dGVybj4KICAgPC9zZXJ2bGV0LW1hcHBpbmc+Ci0gICAgCisKIDwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3kvV2ViVGVzdC5qYXZhCmluZGV4IGUwNjdlNDUuLmEzYjIzNmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95L1dlYlRlc3QuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIHJ1biA9IGFyZ3NbM107CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDYwMDUiKTsKQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGZpcnN0UnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXQpOwogICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcclxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC0xMjAsNyArMTIwLDcgQEAKICAgICAgICAgU3RyaW5nIGNvb2tpZSA9ICJDb29raWU6ICIgKyBqc2Vzc2lvbklkICsgIlxuIjsKICAgICAgICAgb3Mud3JpdGUoY29va2llLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXHJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3kvYnVpbGQucHJvcGVydGllcwppbmRleCA3NWUxMWJmLi41ZTYyNzcxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3kvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3kvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXNzaW9uLXByZXNlcnZlLWFjcm9zcy1yZWRlcGxveSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveS9idWlsZC54bWwKaW5kZXggYWFhMmQ3OS4uNmIzYjdkOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3kvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxNiArNDQsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSItLXByb3BlcnRpZXMga2VlcFNlc3Npb25zPXRydWUgLS1uYW1lPSR7YXBwbmFtZX0td2ViICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZWRlcGxveUtlZXBTdGF0ZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJSZWRlcGxveWluZyBrZWVwU3RhdGUgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciBmcm9tICR7YmFzZWRpcn0uIgogICAgICAgICAgICAgICBsZXZlbD0idmVyYm9zZSIvPgpAQCAtOTQsNyArOTQsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJ1bi5uYW1lIiB2YWx1ZT0idGhpcmQiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTExMCw3ICsxMTAsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95L2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveS9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZWQ3OGIyYS4uYTNiZjM0OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95L2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3kvZGVzY3JpcHRvci93ZWIueG1sCkBAIC00NCw1ICs0NCw1IEBACiAgICAgPHNlcnZsZXQtbmFtZT5SZXN1bWVTZXNzaW9uPC9zZXJ2bGV0LW5hbWU+CiAgICAgPHVybC1wYXR0ZXJuPi9SZXN1bWVTZXNzaW9uPC91cmwtcGF0dGVybj4KICAgPC9zZXJ2bGV0LW1hcHBpbmc+Ci0gICAgCisKIDwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveS9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95L3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEKaW5kZXggODk3OTU3ZS4uY2RkODdjOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95L3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95L3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEKQEAgLTMwLDggKzMwLDggQEAKICAgICAgICAgSHR0cFNlc3Npb24gc2Vzc2lvbiA9IHJlcS5nZXRTZXNzaW9uKHRydWUpOwogCiAgICAgICAgIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgbWFwLnB1dCgibmFtZTEiLCAidmFsdWUxIik7ICAgCi0gICAgICAgIG1hcC5wdXQoIm5hbWUyIiwgInZhbHVlMiIpOyAgIAorICAgICAgICBtYXAucHV0KCJuYW1lMSIsICJ2YWx1ZTEiKTsKKyAgICAgICAgbWFwLnB1dCgibmFtZTIiLCAidmFsdWUyIik7CiAgICAgICAgIHNlc3Npb24uc2V0QXR0cmlidXRlKCJtYXAiLCBtYXApOwogCiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveS9zZXJ2bGV0L3Rlc3QvUmVzdW1lU2Vzc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95L3NlcnZsZXQvdGVzdC9SZXN1bWVTZXNzaW9uLmphdmEKaW5kZXggZjZkOGZhYi4uNzM0NTVlYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95L3NlcnZsZXQvdGVzdC9SZXN1bWVTZXNzaW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95L3NlcnZsZXQvdGVzdC9SZXN1bWVTZXNzaW9uLmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSAoSW5pdGlhbENvbnRleHQpCiAgICAgICAgICAgICBzZXNzaW9uLmdldEF0dHJpYnV0ZSgiSk5ESUluaXRpYWxDb250ZXh0Iik7CiAKLSAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsgCisgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAgICAgICAgIGlmICgidmFsdWUxIi5lcXVhbHMobWFwLmdldCgibmFtZTEiKSkKICAgICAgICAgICAgICAgICAmJiAidmFsdWUyIi5lcXVhbHMobWFwLmdldCgibmFtZTIiKSkKICAgICAgICAgICAgICAgICAmJiAoaWMgIT0gbnVsbCkpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL1dlYlRlc3QuamF2YQppbmRleCAzYmJiYWViLi5jYTQxMzlmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvV2ViVGVzdC5qYXZhCkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICAgICAgcnVuID0gYXJnc1szXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBrZWVwU2Vzc2lvbnMgaW4gc2Vzc2lvbi1jb25maWcvc2Vzc2lvbi1wcm9wZXJ0aWVzIik7CkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBmaXJzdFJ1bigpIHRocm93cyBFeGNlcHRpb24gewpAQCAtODEsNyArODEsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXHJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgICAgIFN0cmluZyBjb29raWUgPSAiQ29va2llOiAiICsganNlc3Npb25JZCArICJcbiI7CiAgICAgICAgIG9zLndyaXRlKGNvb2tpZS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxyXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDU3ZmNlZWQuLmY1MTQxODcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXNzaW9uLXByZXNlcnZlLWFjcm9zcy1yZWRlcGxveS1kZWNsYXJhdGl2ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvYnVpbGQueG1sCmluZGV4IDM4MGU2ZDguLjllMTFhZjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgIDxkZWxldGUgZmlsZT0iUmVwUnVuQ29uZi50eHQiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgPGRlbGV0ZSBmaWxlPSJKU0VTU0lPTklEIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywxNiArNDcsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSItLW5hbWU9JHthcHBuYW1lfS13ZWIgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlZGVwbG95MiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJSZWRlcGxveWluZyB3aXRoIGtlZXBTdGF0ZT1mYWxzZSAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIGZyb20gJHtiYXNlZGlyfS4iCiAgICAgICAgICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRoaXJkIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC0xMjEsNyArMTIxLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBlZDc4YjJhLi5hM2JmMzQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvZGVzY3JpcHRvci93ZWIueG1sCkBAIC00NCw1ICs0NCw1IEBACiAgICAgPHNlcnZsZXQtbmFtZT5SZXN1bWVTZXNzaW9uPC9zZXJ2bGV0LW5hbWU+CiAgICAgPHVybC1wYXR0ZXJuPi9SZXN1bWVTZXNzaW9uPC91cmwtcGF0dGVybj4KICAgPC9zZXJ2bGV0LW1hcHBpbmc+Ci0gICAgCisKIDwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhCmluZGV4IDg5Nzk1N2UuLmNkZDg3YzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvc2VydmxldC90ZXN0L0NyZWF0ZVNlc3Npb24uamF2YQpAQCAtMzAsOCArMzAsOCBAQAogICAgICAgICBIdHRwU2Vzc2lvbiBzZXNzaW9uID0gcmVxLmdldFNlc3Npb24odHJ1ZSk7CiAKICAgICAgICAgSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICBtYXAucHV0KCJuYW1lMSIsICJ2YWx1ZTEiKTsgICAKLSAgICAgICAgbWFwLnB1dCgibmFtZTIiLCAidmFsdWUyIik7ICAgCisgICAgICAgIG1hcC5wdXQoIm5hbWUxIiwgInZhbHVlMSIpOworICAgICAgICBtYXAucHV0KCJuYW1lMiIsICJ2YWx1ZTIiKTsKICAgICAgICAgc2Vzc2lvbi5zZXRBdHRyaWJ1dGUoIm1hcCIsIG1hcCk7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvc2VydmxldC90ZXN0L1Jlc3VtZVNlc3Npb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL3NlcnZsZXQvdGVzdC9SZXN1bWVTZXNzaW9uLmphdmEKaW5kZXggMThlZDNhYS4uY2U0ZmM1OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvc2VydmxldC90ZXN0L1Jlc3VtZVNlc3Npb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9zZXJ2bGV0L3Rlc3QvUmVzdW1lU2Vzc2lvbi5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCi0gICAgICAgIGJvb2xlYW4gcmVzdW1lID0gZmFsc2U7IAorICAgICAgICBib29sZWFuIHJlc3VtZSA9IGZhbHNlOwogICAgICAgICBIdHRwU2Vzc2lvbiBzZXNzaW9uID0gcmVxLmdldFNlc3Npb24oZmFsc2UpOwogICAgICAgICBpZiAoc2Vzc2lvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICBIYXNoTWFwIG1hcCA9IChIYXNoTWFwKSBzZXNzaW9uLmdldEF0dHJpYnV0ZSgibWFwIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByb3BlcnR5RW5hYmxlQ29va2llc0luc3RhbmNlTGV2ZWwvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25Qcm9wZXJ0eUVuYWJsZUNvb2tpZXNJbnN0YW5jZUxldmVsL1dlYlRlc3QuamF2YQppbmRleCBhOWY2ODU4Li5hYjU2ZmM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByb3BlcnR5RW5hYmxlQ29va2llc0luc3RhbmNlTGV2ZWwvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJvcGVydHlFbmFibGVDb29raWVzSW5zdGFuY2VMZXZlbC9XZWJUZXN0LmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKICAqCiAgKiAgIGh0dHBzOi8vZ2xhc3NmaXNoLmRldi5qYXZhLm5ldC9pc3N1ZXMvc2hvd19idWcuY2dpP2lkPTMxMzcKICAqICAgKENoYW5naW5nICJlbmFibGVDb29raWVzIiBzZXNzaW9uIHByb3BlcnR5IGhhcyBubyBlZmZlY3QpCi0gKiAKKyAqCiAgKiBNYWtlIHN1cmUgdGhhdCBpZiB0aGUgImVuYWJsZUNvb2tpZXMiIHByb3BlcnR5IGF0IHRoZSBkb21haW4gaW5zdGFuY2UgbGV2ZWwKICAqIGlzIHNldCB0byBGQUxTRSwgYW5kIHRoZSB3ZWJhcHAgZG9lcyBub3Qgb3ZlcnJpZGUgdGhpcyBwcm9wZXJ0eSB0byBUUlVFIGluCiAgKiBpdHMgc3VuLXdlYi54bWwsIHRoZXJlIHdpbGwgYmUgbm8gc2Vzc2lvbiBjb29raWUgcHJlc2VudCBpbiB0aGUgcmVzcG9uc2UsCkBAIC00OSw3ICs0OSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVUkwgcmV3cml0aW5nIHdpdGggc2Vzc2lvbiBpZCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU4LDggKzU4LDggQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgIAotICAgICAgICB0cnkgeyAKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlU2VydmxldCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtODQsNyArODQsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2VTZXJ2bGV0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi9yZWRpcmVjdEZyb20iICsgIiBIVFRQLzEuMFxuIjsKQEAgLTEzMiw3ICsxMzIsNyBAQAogICAgICAgICAgICAgZmFpbCA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZWRpcmVjdExpbmU6ICIgKyByZWRpcmVjdExpbmUpOwogICAgICAgICBpZiAocmVkaXJlY3RMaW5lID09IG51bGwpIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTWlzc2luZyBMb2NhdGlvbiByZXNwb25zZSBoZWFkZXIiKTsKQEAgLTE1NCw3ICsxNTQsNyBAQAogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgIGZhaWwgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25Qcm9wZXJ0eUVuYWJsZUNvb2tpZXNJbnN0YW5jZUxldmVsL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByb3BlcnR5RW5hYmxlQ29va2llc0luc3RhbmNlTGV2ZWwvYnVpbGQucHJvcGVydGllcwppbmRleCA2MjJiZjlhLi5iMmRhMjJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByb3BlcnR5RW5hYmxlQ29va2llc0luc3RhbmNlTGV2ZWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByb3BlcnR5RW5hYmxlQ29va2llc0luc3RhbmNlTGV2ZWwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXNzaW9uLXByb3BlcnR5LWVuYWJsZUNvb2tpZXMtaW5zdGFuY2UtbGV2ZWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJvcGVydHlFbmFibGVDb29raWVzSW5zdGFuY2VMZXZlbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByb3BlcnR5RW5hYmxlQ29va2llc0luc3RhbmNlTGV2ZWwvYnVpbGQueG1sCmluZGV4IDIyNWM5NGQuLjkxZDlkMmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJvcGVydHlFbmFibGVDb29raWVzSW5zdGFuY2VMZXZlbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25Qcm9wZXJ0eUVuYWJsZUNvb2tpZXNJbnN0YW5jZUxldmVsL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTkgKzQ0LDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXJpYWxpemVPblNodXRkb3duT25seS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXJpYWxpemVPblNodXRkb3duT25seS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDUzZTc1YjIuLmQzMGJjOTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2VyaWFsaXplT25TaHV0ZG93bk9ubHkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNlcmlhbGl6ZU9uU2h1dGRvd25Pbmx5L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2Vzc2lvbi1zZXJpYWxpemUtb24tc2h1dGRvd24tb25seSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRBdHRyaWJ1dGVKYXZheE5hbWluZ0NvbnRleHQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRBdHRyaWJ1dGVKYXZheE5hbWluZ0NvbnRleHQvV2ViVGVzdC5qYXZhCmluZGV4IGZhY2VlYzguLjA5YWFlMDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0QXR0cmlidXRlSmF2YXhOYW1pbmdDb250ZXh0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldEF0dHJpYnV0ZUphdmF4TmFtaW5nQ29udGV4dC9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgMjAwMyIpOwpAQCAtNTMsMTEgKzUzLDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTcxLDYgKzcxLDYgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0QXR0cmlidXRlSmF2YXhOYW1pbmdDb250ZXh0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldEF0dHJpYnV0ZUphdmF4TmFtaW5nQ29udGV4dC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGUyYjBkYjguLjFkOTgzYjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0QXR0cmlidXRlSmF2YXhOYW1pbmdDb250ZXh0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRBdHRyaWJ1dGVKYXZheE5hbWluZ0NvbnRleHQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXNzaW9uLXNldC1hdHRyaWJ1dGUtamF2YXgtbmFtaW5nLWNvbnRleHQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0QXR0cmlidXRlSmF2YXhOYW1pbmdDb250ZXh0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0QXR0cmlidXRlSmF2YXhOYW1pbmdDb250ZXh0L2J1aWxkLnhtbAppbmRleCA0OGUzYmYwLi4yMjdjZmZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldEF0dHJpYnV0ZUphdmF4TmFtaW5nQ29udGV4dC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRBdHRyaWJ1dGVKYXZheE5hbWluZ0NvbnRleHQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMSArNDIsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTY4LDEwICs2OCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0QXR0cmlidXRlSmF2YXhOYW1pbmdDb250ZXh0L3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRBdHRyaWJ1dGVKYXZheE5hbWluZ0NvbnRleHQvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggYTlmMTQ2ZC4uM2YzOTE0OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRBdHRyaWJ1dGVKYXZheE5hbWluZ0NvbnRleHQvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRBdHRyaWJ1dGVKYXZheE5hbWluZ0NvbnRleHQvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUpOwogICAgICAgICB9CiAKLQlIdHRwU2Vzc2lvbiBodHRwU2Vzc2lvbiA9IHJlcS5nZXRTZXNzaW9uKCk7CisgICAgSHR0cFNlc3Npb24gaHR0cFNlc3Npb24gPSByZXEuZ2V0U2Vzc2lvbigpOwogICAgICAgICBodHRwU2Vzc2lvbi5zZXRBdHRyaWJ1dGUoIkpORElJbml0aWFsQ29udGV4dCIsIGljKTsKIAogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0TWF4SW5hY3RpdmVJbnRlcnZhbEV4cGlyZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldE1heEluYWN0aXZlSW50ZXJ2YWxFeHBpcmUvV2ViVGVzdC5qYXZhCmluZGV4IGQ2ZTk0YTMuLjA4MjQ4MTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0TWF4SW5hY3RpdmVJbnRlcnZhbEV4cGlyZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsRXhwaXJlL1dlYlRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA0NjYxMDAxIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDgsNyArNDgsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNjYsNyArNjYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9DcmVhdGVTZXNzaW9uIjsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikKQEAgLTg0LDkgKzg0LDkgQEAKIAogICAgICAgICBUaHJlYWQuc2xlZXAoNSAqIDEwMDApOwogCi0JLy8gdHJhbnNsYXRlIHNlcnZlciAtPiBjbGllbnQgY29va2llCi0JU3RyaW5nIGNsaWVudENvb2tpZSA9IGNvb2tpZS5yZXBsYWNlKCJQYXRoIiwgIiRQYXRoIikucmVwbGFjZSgiSHR0cE9ubHkiLCAiJEh0dHBPbmx5Iik7Ci0gCisgICAgLy8gdHJhbnNsYXRlIHNlcnZlciAtPiBjbGllbnQgY29va2llCisgICAgU3RyaW5nIGNsaWVudENvb2tpZSA9IGNvb2tpZS5yZXBsYWNlKCJQYXRoIiwgIiRQYXRoIikucmVwbGFjZSgiSHR0cE9ubHkiLCAiJEh0dHBPbmx5Iik7CisKICAgICAgICAgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0Um9vdCArICIvQ2hlY2tTZXNzaW9uIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsRXhwaXJlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldE1heEluYWN0aXZlSW50ZXJ2YWxFeHBpcmUvYnVpbGQucHJvcGVydGllcwppbmRleCA0NDg1ZTg2Li44NTI5MTE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldE1heEluYWN0aXZlSW50ZXJ2YWxFeHBpcmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldE1heEluYWN0aXZlSW50ZXJ2YWxFeHBpcmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXNzaW9uLXNldC1tYXgtaW5hY3RpdmUtaW50ZXJ2YWwtZXhwaXJlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldE1heEluYWN0aXZlSW50ZXJ2YWxFeHBpcmUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsRXhwaXJlL2J1aWxkLnhtbAppbmRleCAwMGZkYWQzLi5jMzk3NzZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldE1heEluYWN0aXZlSW50ZXJ2YWxFeHBpcmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0TWF4SW5hY3RpdmVJbnRlcnZhbEV4cGlyZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDEwICs3MCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0TWF4SW5hY3RpdmVJbnRlcnZhbFRvWmVyb0FuZEludmFsaWRhdGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsVG9aZXJvQW5kSW52YWxpZGF0ZS9XZWJUZXN0LmphdmEKaW5kZXggNmQ3NDhlNS4uNzgwNTEzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsVG9aZXJvQW5kSW52YWxpZGF0ZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsVG9aZXJvQW5kSW52YWxpZGF0ZS9XZWJUZXN0LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNDY4ODI3NyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU3LDcgKzU3LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvVGVzdFNlcnZsZXQiOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKQpAQCAtNzksNiArNzksNiBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldE1heEluYWN0aXZlSW50ZXJ2YWxUb1plcm9BbmRJbnZhbGlkYXRlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldE1heEluYWN0aXZlSW50ZXJ2YWxUb1plcm9BbmRJbnZhbGlkYXRlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzJiZWRhZi4uYzg5MjNiMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsVG9aZXJvQW5kSW52YWxpZGF0ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0TWF4SW5hY3RpdmVJbnRlcnZhbFRvWmVyb0FuZEludmFsaWRhdGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXNzaW9uLXNldC1tYXgtaW5hY3RpdmUtaW50ZXJ2YWwtdG8temVyby1hbmQtaW52YWxpZGF0ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsVG9aZXJvQW5kSW52YWxpZGF0ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldE1heEluYWN0aXZlSW50ZXJ2YWxUb1plcm9BbmRJbnZhbGlkYXRlL2J1aWxkLnhtbAppbmRleCAwMGZkYWQzLi5jMzk3NzZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldE1heEluYWN0aXZlSW50ZXJ2YWxUb1plcm9BbmRJbnZhbGlkYXRlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldE1heEluYWN0aXZlSW50ZXJ2YWxUb1plcm9BbmRJbnZhbGlkYXRlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsMTAgKzcwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsVG9aZXJvQW5kSW52YWxpZGF0ZS9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldE1heEluYWN0aXZlSW50ZXJ2YWxUb1plcm9BbmRJbnZhbGlkYXRlL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQppbmRleCBmMjdjN2NkLi4zZWUzNWUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldE1heEluYWN0aXZlSW50ZXJ2YWxUb1plcm9BbmRJbnZhbGlkYXRlL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldE1heEluYWN0aXZlSW50ZXJ2YWxUb1plcm9BbmRJbnZhbGlkYXRlL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgSHR0cFNlc3Npb24gc2Vzc2lvbiA9IHJlcS5nZXRTZXNzaW9uKHRydWUpOwogICAgICAgICAgICAgc2Vzc2lvbi5zZXRNYXhJbmFjdGl2ZUludGVydmFsKDApOwotICAgICAgICAgICAgc2Vzc2lvbi5pbnZhbGlkYXRlKCk7ICAgCisgICAgICAgICAgICBzZXNzaW9uLmludmFsaWRhdGUoKTsKICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlzZSkgewogICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25XaXRoQ29va2llUGVyc2lzdGVuY2VUeXBlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uV2l0aENvb2tpZVBlcnNpc3RlbmNlVHlwZS9XZWJUZXN0LmphdmEKaW5kZXggODc4ZGJlZC4uZjM2YjBmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25XaXRoQ29va2llUGVyc2lzdGVuY2VUeXBlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbldpdGhDb29raWVQZXJzaXN0ZW5jZVR5cGUvV2ViVGVzdC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAKKwogICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9ICJzZXNzaW9uLXdpdGgtY29va2llLXBlcnNpc3RlbmNlLXR5cGUiOwogCiAgICAgcHJpdmF0ZSBTdHJpbmcgaG9zdDsKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgY29va2llLWJhc2VkIHNlc3Npb24gcGVyc2lzdGVuY2UiKTsKICAgICAgICAgbmV3IFdlYlRlc3QoYXJncykuZG9UZXN0KCk7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTgxLDcgKzgxLDcgQEAKIAogICAgICAgICAvKgogICAgICAgICAgKiBDcmVhdGUgc2Vzc2lvbgotICAgICAgICAgKi8gICAgICAgIAorICAgICAgICAgKi8KICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QgKyAiL0NyZWF0ZVNlc3Npb24iOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKQpAQCAtMTE3LDEyICsxMTcsMTIgQEAKIAogICAgICAgICAvKgogICAgICAgICAgKiBSZXN1bWUgc2Vzc2lvbgotICAgICAgICAgKi8gICAgICAgIAorICAgICAgICAgKi8KICAgICAgICAgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXRSZXF1ZXN0TGluZSA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi9DaGVja1Nlc3Npb24iICsKICAgICAgICAgICAgICIgSFRUUC8xLjBcbiI7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIlxuQ29ubmVjdGluZyB0bzogIiArIGdldFJlcXVlc3RMaW5lKTsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIlxuQ29ubmVjdGluZyB0bzogIiArIGdldFJlcXVlc3RMaW5lKTsKICAgICAgICAgb3Mud3JpdGUoZ2V0UmVxdWVzdExpbmUuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIFN0cmluZyBjb29raWVIZWFkZXJMaW5lID0gIkNvb2tpZTogIiArIGpzZXNzaW9uSWRDb29raWUgKyAiXG4iOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50KGNvb2tpZUhlYWRlckxpbmUpOwpAQCAtMTMxLDcgKzEzMSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoY29va2llSGVhZGVyTGluZSk7CiAgICAgICAgIG9zLndyaXRlKGNvb2tpZUhlYWRlckxpbmUuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25XaXRoQ29va2llUGVyc2lzdGVuY2VUeXBlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbldpdGhDb29raWVQZXJzaXN0ZW5jZVR5cGUvYnVpbGQucHJvcGVydGllcwppbmRleCAwNWJjYTViLi5hMWIxNjExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbldpdGhDb29raWVQZXJzaXN0ZW5jZVR5cGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbldpdGhDb29raWVQZXJzaXN0ZW5jZVR5cGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXNzaW9uLXdpdGgtY29va2llLXBlcnNpc3RlbmNlLXR5cGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uV2l0aENvb2tpZVBlcnNpc3RlbmNlVHlwZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbldpdGhDb29raWVQZXJzaXN0ZW5jZVR5cGUvYnVpbGQueG1sCmluZGV4IGNiYThiYmYuLmFmMjE3YWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uV2l0aENvb2tpZVBlcnNpc3RlbmNlVHlwZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25XaXRoQ29va2llUGVyc2lzdGVuY2VUeXBlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjEgKzQ0LDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03Myw3ICs3Myw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbldpdGhDb29raWVQZXJzaXN0ZW5jZVR5cGUvZGVzY3JpcHRvci9zdW4td2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uV2l0aENvb2tpZVBlcnNpc3RlbmNlVHlwZS9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCmluZGV4IDI4MmE5ZjkuLmM0MGQwMzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uV2l0aENvb2tpZVBlcnNpc3RlbmNlVHlwZS9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uV2l0aENvb2tpZVBlcnNpc3RlbmNlVHlwZS9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCkBAIC0yNSw2ICsyNSw2IEBACiAgICAgICA8c3RvcmUtcHJvcGVydGllcz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNvb2tpZU5hbWUiIHZhbHVlPSJBQkMiLz4KICAgICAgIDwvc3RvcmUtcHJvcGVydGllcz4KLSAgICA8L3Nlc3Npb24tbWFuYWdlcj4gCisgICAgPC9zZXNzaW9uLW1hbmFnZXI+CiAgIDwvc2Vzc2lvbi1jb25maWc+CiA8L3N1bi13ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25XaXRob3V0Q29va2llL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uV2l0aG91dENvb2tpZS9XZWJUZXN0LmphdmEKaW5kZXggYWQxZDcwYS4uNzhhMmZjOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25XaXRob3V0Q29va2llL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbldpdGhvdXRDb29raWUvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElUIDEzMTI5LCBzZXNzaW9uIHdpdGhvdXQgY29va2llIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDgsOCArNDgsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgYSA9IGludm9rZSgiL2luZGV4LmpzcCIpOwogICAgICAgICAgICAgaW50IGIgPSBpbnZva2UoIi9pbmRleC5qc3A7anNlc3Npb25pZD0iICsgc2Vzc2lvbklkKTsKICAgICAgICAgICAgIGludCBjID0gaW52b2tlKCIvO2pzZXNzaW9uaWQ9IiArIHNlc3Npb25JZCk7CkBAIC02OSw3ICs2OSw3IEBACiAgICAgICovCiAgICAgcHJpdmF0ZSBpbnQgaW52b2tlKFN0cmluZyB1cmkpCiAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgSW50ZWdlciByZXN1bHQgPSBudWxsOwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdCArIHVyaSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uV2l0aG91dENvb2tpZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25XaXRob3V0Q29va2llL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODE0MjM1MC4uNzQ2NzljNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25XaXRob3V0Q29va2llL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25XaXRob3V0Q29va2llL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2Vzc2lvbi13aXRob3V0LWNvb2tpZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25XaXRob3V0Q29va2llL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uV2l0aG91dENvb2tpZS9idWlsZC54bWwKaW5kZXggNDlhNTUwOC4uNWI0M2ZmNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25XaXRob3V0Q29va2llL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbldpdGhvdXRDb29raWUvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NSwxNiArNDUsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvcHlSZXNvdXJjZXMiLz4KQEAgLTc1LDExICs3NSwxMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC05MSwxMCArOTEsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVtb3ZlUmVzb3VyY2VzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0TXVsdGlWYWx1ZWRSZXNwb25zZUhlYWRlci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0TXVsdGlWYWx1ZWRSZXNwb25zZUhlYWRlci9XZWJUZXN0LmphdmEKaW5kZXggOGQ2ZDgwNi4uODkyYzE0ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldE11bHRpVmFsdWVkUmVzcG9uc2VIZWFkZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRNdWx0aVZhbHVlZFJlc3BvbnNlSGVhZGVyL1dlYlRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBCdWd6aWxsYSAzNDExMyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRNdWx0aVZhbHVlZFJlc3BvbnNlSGVhZGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0TXVsdGlWYWx1ZWRSZXNwb25zZUhlYWRlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDE1ZTIyZDguLmY0OTYyNWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRNdWx0aVZhbHVlZFJlc3BvbnNlSGVhZGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldE11bHRpVmFsdWVkUmVzcG9uc2VIZWFkZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXQtbXVsdGktdmFsdWVkLXJlc3BvbnNlLWhlYWRlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldE11bHRpVmFsdWVkUmVzcG9uc2VIZWFkZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldE11bHRpVmFsdWVkUmVzcG9uc2VIZWFkZXIvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRNdWx0aVZhbHVlZFJlc3BvbnNlSGVhZGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0TXVsdGlWYWx1ZWRSZXNwb25zZUhlYWRlci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0UmVzcG9uc2VDb250ZW50TGVuZ3RoVG9aZXJvS2VlcFJlc3BvbnNlSGVhZGVycy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0UmVzcG9uc2VDb250ZW50TGVuZ3RoVG9aZXJvS2VlcFJlc3BvbnNlSGVhZGVycy9XZWJUZXN0LmphdmEKaW5kZXggZjI3MmI2NC4uMTJhYTM5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldFJlc3BvbnNlQ29udGVudExlbmd0aFRvWmVyb0tlZXBSZXNwb25zZUhlYWRlcnMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRSZXNwb25zZUNvbnRlbnRMZW5ndGhUb1plcm9LZWVwUmVzcG9uc2VIZWFkZXJzL1dlYlRlc3QuamF2YQpAQCAtNDMsMTYgKzQzLDE2IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJ1Z3ppbGxhIDMyNjA0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogICAgICAgICB3ZWJUZXN0LmRvVGVzdCgpOwotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgIAorCiAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydApAQCAtNzIsMTAgKzcyLDEwIEBACiAKICAgICAgICAgICAgIGlmIChjb25uLmdldEhlYWRlckZpZWxkKCJBIikgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTWlzc2luZyByZXNwb25zZSBoZWFkZXIgJ0EnIik7Ci0gICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOyAgICAKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbm4uZ2V0SGVhZGVyRmllbGQoIkIiKSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJNaXNzaW5nIHJlc3BvbnNlIGhlYWRlciAnQiciKTsKLSAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7ICAgIAorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldFJlc3BvbnNlQ29udGVudExlbmd0aFRvWmVyb0tlZXBSZXNwb25zZUhlYWRlcnMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRSZXNwb25zZUNvbnRlbnRMZW5ndGhUb1plcm9LZWVwUmVzcG9uc2VIZWFkZXJzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNTM1Y2E3Ni4uZTgzNWIwMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldFJlc3BvbnNlQ29udGVudExlbmd0aFRvWmVyb0tlZXBSZXNwb25zZUhlYWRlcnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0UmVzcG9uc2VDb250ZW50TGVuZ3RoVG9aZXJvS2VlcFJlc3BvbnNlSGVhZGVycy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNldC1yZXNwb25zZS1jb250ZW50LWxlbmd0aC10by16ZXJvLWtlZXAtcmVzcG9uc2UtaGVhZGVycyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldFJlc3BvbnNlQ29udGVudExlbmd0aFRvWmVyb0tlZXBSZXNwb25zZUhlYWRlcnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldFJlc3BvbnNlQ29udGVudExlbmd0aFRvWmVyb0tlZXBSZXNwb25zZUhlYWRlcnMvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRSZXNwb25zZUNvbnRlbnRMZW5ndGhUb1plcm9LZWVwUmVzcG9uc2VIZWFkZXJzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0UmVzcG9uc2VDb250ZW50TGVuZ3RoVG9aZXJvS2VlcFJlc3BvbnNlSGVhZGVycy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0V2ViQ29udGV4dFBhcmFtL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRXZWJDb250ZXh0UGFyYW0vV2ViVGVzdC5qYXZhCmluZGV4IDg2YmI1NTEuLjI0NDc1ZmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRXZWJDb250ZXh0UGFyYW0vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRXZWJDb250ZXh0UGFyYW0vV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElUIDE2MjIyIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDYsNyArNDYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pCkBAIC05MywxMCArOTMsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRXZWJDb250ZXh0UGFyYW0vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRXZWJDb250ZXh0UGFyYW0vYnVpbGQucHJvcGVydGllcwppbmRleCA0NmQzNGFiLi4wYzE3NmYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0V2ViQ29udGV4dFBhcmFtL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldFdlYkNvbnRleHRQYXJhbS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNldC13ZWItY29udGV4dC1wYXJhbSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldFdlYkNvbnRleHRQYXJhbS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0V2ViQ29udGV4dFBhcmFtL2J1aWxkLnhtbAppbmRleCA0ZjM4MzMxLi5hZWRiMTAwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0V2ViQ29udGV4dFBhcmFtL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0V2ViQ29udGV4dFBhcmFtL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywxOSArNDcsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgICAgICAgICAgICAgIHZhbHVlPSItLW5hbWUgJHtwYXJhbS5uYW1lfSAtLXZhbHVlICR7cGFyYW0udmFsdWV9ICR7YXBwbmFtZX0td2ViIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5zZXQtd2ViLWNvbnRleHQtcGFyYW0iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InVuc2V0LXdlYi1jb250ZXh0LXBhcmFtIi8+CkBAIC0xMjgsMTAgKzEyOCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRXZWJDb250ZXh0UGFyYW0vZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldFdlYkNvbnRleHRQYXJhbS9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMjhlYjczNC4uNzE2MTdhZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldFdlYkNvbnRleHRQYXJhbS9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldFdlYkNvbnRleHRQYXJhbS9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTQ2LDUgKzQ2LDUgQEAKICAgICAgICAgPHNlcnZsZXQtbmFtZT5teXRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9teXVybDwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+Ci0gICAgIAorCiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llSHR0cE9ubHkvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZUh0dHBPbmx5L1dlYlRlc3QuamF2YQppbmRleCAxZTA1MGIwLi45ZmZmZTgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llSHR0cE9ubHkvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25Db29raWVIdHRwT25seS9XZWJUZXN0LmphdmEKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgICAgYWRtaW5Vc2VyID0gYXJnc1szXTsKICAgICAgICAgYWRtaW5QYXNzd29yZCA9IGFyZ3NbNF07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDM4MjMiKTsKQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHRocm93cyBFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZUh0dHBPbmx5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llSHR0cE9ubHkvYnVpbGQucHJvcGVydGllcwppbmRleCAzY2QwNjdhLi45NDgyYjM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llSHR0cE9ubHkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llSHR0cE9ubHkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zaW5nbGUtc2lnbi1vbi1jb29raWUtaHR0cC1vbmx5Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llSHR0cE9ubHkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZUh0dHBPbmx5L2J1aWxkLnhtbAppbmRleCA4OTZmMDkyLi4xMTJkNjcwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llSHR0cE9ubHkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25Db29raWVIdHRwT25seS9idWlsZC54bWwKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IldlYlRlc3QuY2xhc3MiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC02MywxMCArNjMsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTc0LDE0ICs3NCwxNCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtcnQuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC05OCw3ICs5OCw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZUh0dHBPbmx5L2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25Db29raWVIdHRwT25seS9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMTYyZTg0My4uYmM2ZGMyNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZUh0dHBPbmx5L2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llSHR0cE9ubHkvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yNSwxMiArMjUsMTIgQEAKIAogICA8c2VjdXJpdHktY29uc3RyYWludD4KICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+Ci0JPHdlYi1yZXNvdXJjZS1uYW1lPlByb3RlY3RlZCBBcmVhPC93ZWItcmVzb3VyY2UtbmFtZT4KLQk8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgotCTxodHRwLW1ldGhvZD5ERUxFVEU8L2h0dHAtbWV0aG9kPgotCTxodHRwLW1ldGhvZD5HRVQ8L2h0dHAtbWV0aG9kPgotCTxodHRwLW1ldGhvZD5QT1NUPC9odHRwLW1ldGhvZD4KLQk8aHR0cC1tZXRob2Q+UFVUPC9odHRwLW1ldGhvZD4KKyAgICA8d2ViLXJlc291cmNlLW5hbWU+UHJvdGVjdGVkIEFyZWE8L3dlYi1yZXNvdXJjZS1uYW1lPgorICAgIDx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+CisgICAgPGh0dHAtbWV0aG9kPkRFTEVURTwvaHR0cC1tZXRob2Q+CisgICAgPGh0dHAtbWV0aG9kPkdFVDwvaHR0cC1tZXRob2Q+CisgICAgPGh0dHAtbWV0aG9kPlBPU1Q8L2h0dHAtbWV0aG9kPgorICAgIDxodHRwLW1ldGhvZD5QVVQ8L2h0dHAtbWV0aG9kPgogICAgIDwvd2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CiAKICAgICA8YXV0aC1jb25zdHJhaW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZVNlY3VyZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llU2VjdXJlL1dlYlRlc3QuamF2YQppbmRleCA1MDk5ZmVmLi4xNWU4MzA1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llU2VjdXJlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llU2VjdXJlL1dlYlRlc3QuamF2YQpAQCAtNDksNyArNDksNyBAQAogICAgICAgICBhZG1pblVzZXIgPSBhcmdzWzNdOwogICAgICAgICBhZG1pblBhc3N3b3JkID0gYXJnc1s0XTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgMzgyMyIpOwpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llU2VjdXJlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llU2VjdXJlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjEzZTI2ZC4uOGE5MTk1NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZVNlY3VyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25Db29raWVTZWN1cmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zaW5nbGUtc2lnbi1vbi1jb29raWUtc2VjdXJlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llU2VjdXJlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25Db29raWVTZWN1cmUvYnVpbGQueG1sCmluZGV4IDcwYmFkMjYuLjI4MDI0ODkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25Db29raWVTZWN1cmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25Db29raWVTZWN1cmUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC02MiwxMCArNjIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTczLDE0ICs3MywxNCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtcnQuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC05Nyw3ICs5Nyw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZVNlY3VyZS9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llU2VjdXJlL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAxNjJlODQzLi5iYzZkYzI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llU2VjdXJlL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llU2VjdXJlL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjUsMTIgKzI1LDEyIEBACiAKICAgPHNlY3VyaXR5LWNvbnN0cmFpbnQ+CiAgICAgPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgotCTx3ZWItcmVzb3VyY2UtbmFtZT5Qcm90ZWN0ZWQgQXJlYTwvd2ViLXJlc291cmNlLW5hbWU+Ci0JPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KLQk8aHR0cC1tZXRob2Q+REVMRVRFPC9odHRwLW1ldGhvZD4KLQk8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KLQk8aHR0cC1tZXRob2Q+UE9TVDwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPlBVVDwvaHR0cC1tZXRob2Q+CisgICAgPHdlYi1yZXNvdXJjZS1uYW1lPlByb3RlY3RlZCBBcmVhPC93ZWItcmVzb3VyY2UtbmFtZT4KKyAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgorICAgIDxodHRwLW1ldGhvZD5ERUxFVEU8L2h0dHAtbWV0aG9kPgorICAgIDxodHRwLW1ldGhvZD5HRVQ8L2h0dHAtbWV0aG9kPgorICAgIDxodHRwLW1ldGhvZD5QT1NUPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+UFVUPC9odHRwLW1ldGhvZD4KICAgICA8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgogCiAgICAgPGF1dGgtY29uc3RyYWludD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25IdHRwU2VydmljZUR5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uSHR0cFNlcnZpY2VEeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhCmluZGV4IGRhZDJkOGUuLjZhNjk2YjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25IdHRwU2VydmljZUR5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25Pbkh0dHBTZXJ2aWNlRHluYW1pY1JlY29uZmlnL1dlYlRlc3QuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogICogICBkeW5hbWljYWxseSByZWNvbmZpZ3VyYWJsZSIpOgogICoKICAqIFRoaXMgdW5pdCB0ZXN0IHNldHMgdGhlIHNzby1lbmFibGVkIHByb3BlcnR5IG9mIGh0dHAtc2VydmljZSB0byBmYWxzZSBhbmQKLSAqIHJlc3RhcnRzIHRoZSBzZXJ2ZXIuIEl0IHRoZW4gcmVtb3ZlcyB0aGUgc3NvLWVuYWJsZWQgcHJvcGVydHkgb2YgCisgKiByZXN0YXJ0cyB0aGUgc2VydmVyLiBJdCB0aGVuIHJlbW92ZXMgdGhlIHNzby1lbmFibGVkIHByb3BlcnR5IG9mCiAgKiB2aXJ0dWFsIHNlcnZlciAic2VydmVyIiwgc28gdGhhdCB0aGUgc3NvLWVuYWJsZWQgcHJvcGVydHkgb2YgaHR0cC1zZXJ2aWNlCiAgKiAocHJldmlvdXNseSBzZXQgdG8gZmFsc2UpIHdpbGwgdGFrZSBlZmZlY3QuIEl0IHRoZW4gc2V0cyB0aGF0IHByb3BlcnR5IHRvCiAgKiB0cnVlLCBhbmQgdGVzdHMgd2hldGhlciBTU08gaGFzIGJlZW4gZW5hYmxlZCBmb3IgdmlydHVhbCBzZXJ2ZXIgInNlcnZlciIuCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgIGFkbWluVXNlciA9IGFyZ3NbM107CiAgICAgICAgIGFkbWluUGFzc3dvcmQgPSBhcmdzWzRdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSAyOTExIik7CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTk0LDcgKzk0LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC0xMzAsNyArMTMwLDcgQEAKICAgICAgICAgU3RyaW5nIGNvb2tpZSA9ICJDb29raWU6ICIgKyBqc2Vzc2lvbklkICsgIlxuIjsKICAgICAgICAgb3Mud3JpdGUoY29va2llLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKQEAgLTE2NSw3ICsxNjUsNyBAQAogICAgICAgICBTdHJpbmcgY29va2llID0gIkNvb2tpZTogIiArIGpzZXNzaW9uSWQgKyAiXG4iOwogICAgICAgICBvcy53cml0ZShjb29raWUuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25Pbkh0dHBTZXJ2aWNlRHluYW1pY1JlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uSHR0cFNlcnZpY2VEeW5hbWljUmVjb25maWcvYnVpbGQucHJvcGVydGllcwppbmRleCA1MjU5ZDc2Li5hYjdmNzIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uSHR0cFNlcnZpY2VEeW5hbWljUmVjb25maWcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uSHR0cFNlcnZpY2VEeW5hbWljUmVjb25maWcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zaW5nbGUtc2lnbi1vbi1odHRwLXNlcnZpY2UtZHluYW1pYy1yZWNvbmZpZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25Pbkh0dHBTZXJ2aWNlRHluYW1pY1JlY29uZmlnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25IdHRwU2VydmljZUR5bmFtaWNSZWNvbmZpZy9idWlsZC54bWwKaW5kZXggYmY1ZGYwMC4uNDMwN2EwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25Pbkh0dHBTZXJ2aWNlRHluYW1pY1JlY29uZmlnL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uSHR0cFNlcnZpY2VEeW5hbWljUmVjb25maWcvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC03MCwyMyArNzAsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC0xMDMsNyArMTAzLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uSHR0cFNlcnZpY2VEeW5hbWljUmVjb25maWcvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25Pbkh0dHBTZXJ2aWNlRHluYW1pY1JlY29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAxNjJlODQzLi5iYzZkYzI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uSHR0cFNlcnZpY2VEeW5hbWljUmVjb25maWcvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25IdHRwU2VydmljZUR5bmFtaWNSZWNvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTI1LDEyICsyNSwxMiBAQAogCiAgIDxzZWN1cml0eS1jb25zdHJhaW50PgogICAgIDx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KLQk8d2ViLXJlc291cmNlLW5hbWU+UHJvdGVjdGVkIEFyZWE8L3dlYi1yZXNvdXJjZS1uYW1lPgotCTx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+Ci0JPGh0dHAtbWV0aG9kPkRFTEVURTwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPkdFVDwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPlBPU1Q8L2h0dHAtbWV0aG9kPgotCTxodHRwLW1ldGhvZD5QVVQ8L2h0dHAtbWV0aG9kPgorICAgIDx3ZWItcmVzb3VyY2UtbmFtZT5Qcm90ZWN0ZWQgQXJlYTwvd2ViLXJlc291cmNlLW5hbWU+CisgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KKyAgICA8aHR0cC1tZXRob2Q+REVMRVRFPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+UE9TVDwvaHR0cC1tZXRob2Q+CisgICAgPGh0dHAtbWV0aG9kPlBVVDwvaHR0cC1tZXRob2Q+CiAgICAgPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KIAogICAgIDxhdXRoLWNvbnN0cmFpbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlZW5naW5lL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVlbmdpbmUvV2ViVGVzdC5qYXZhCmluZGV4IGQ2NDQ0OWIuLmQzZGYyODAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVlbmdpbmUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVlbmdpbmUvV2ViVGVzdC5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgaG9zdDsKICAgICBwcml2YXRlIFN0cmluZyBwb3J0OwogICAgIHByaXZhdGUgU3RyaW5nIGNvbnRleHRSb290OwpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgd2ViVGVzdC5kb1Rlc3Qod2ViVGVzdC5wb3J0LCAyMDApOwogICAgICAgICAgICAgd2ViVGVzdC5kb1Rlc3Qod2ViVGVzdC5hZG1pblBvcnQsIDIwMik7Ci0gICAgICAgICAgICAvLyBTbGVlcCBsb25nIGVub3VnaCBmb3IgdGhlIGFkbWluIGNvbnNvbGUgdG8gaGF2ZSBiZWVuIAorICAgICAgICAgICAgLy8gU2xlZXAgbG9uZyBlbm91Z2ggZm9yIHRoZSBhZG1pbiBjb25zb2xlIHRvIGhhdmUgYmVlbgogICAgICAgICAgICAgLy8gaW5zdGFsbGVkIGFuZCBkZXBsb3llZAogICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCg2MDAwMCk7CiAgICAgICAgICAgICB3ZWJUZXN0LmRvVGVzdCh3ZWJUZXN0LmFkbWluUG9ydCwgNDA0KTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVlbmdpbmUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVlbmdpbmUvYnVpbGQucHJvcGVydGllcwppbmRleCAyNmE1Mjg4Li5mNGJiNDlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlZW5naW5lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZWVuZ2luZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2luZ2xlLWVuZ2luZSIvPgogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZWVuZ2luZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlZW5naW5lL2J1aWxkLnhtbAppbmRleCA1M2Y5M2EwLi41ZWQ4NjViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlZW5naW5lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlZW5naW5lL2J1aWxkLnhtbApAQCAtMzgsNyArMzgsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDYsMTAgKzQ2LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01NywxMCArNTcsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02OCw3ICs2OCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTgxLDEwICs4MSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVlbmdpbmUvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZWVuZ2luZS9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMGNmZTgxMi4uODFiMTQ1NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZWVuZ2luZS9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZWVuZ2luZS9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIzLDcgKzIzLDcgQEAKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KIAotICAgIDxsaXN0ZW5lcj4gICAgIAorICAgIDxsaXN0ZW5lcj4KICAgICAgICAgPGxpc3RlbmVyLWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L2xpc3RlbmVyLWNsYXNzPgogICAgIDwvbGlzdGVuZXI+CiAKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlZW5naW5lL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVlbmdpbmUvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDg2MGJjYzQuLmU3YTdjMDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVlbmdpbmUvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVlbmdpbmUvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCBpbXBsZW1lbnRzIEh0dHBTZXNzaW9uTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwogICAgIH0KIApAQCAtNTIsNyArNTIsNyBAQAogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25DcmVhdGVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25DcmVhdGVkXSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25EZXN0cm95ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkRlc3Ryb3llZF0iKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NpRXNjYXBlQ2hhcmFjdGVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2lFc2NhcGVDaGFyYWN0ZXIvV2ViVGVzdC5qYXZhCmluZGV4IGM4OWQ0MjIuLjUyOGVmNzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2lFc2NhcGVDaGFyYWN0ZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2lFc2NhcGVDaGFyYWN0ZXIvV2ViVGVzdC5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIFNTSSBFc2NhcGUgQ2hhcmFjdGVyIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTMsOCArNTMsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CkBAIC02NCw3ICs2NCw3IEBACiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIb3N0PSIgKyBob3N0ICsgIiwgcG9ydD0iICsgcG9ydCk7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIb3N0PSIgKyBob3N0ICsgIiwgcG9ydD0iICsgcG9ydCk7CiAgICAgICAgIFNvY2tldCBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi9pbmRleC5zaHRtbCBIVFRQLzEuMVxuIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2lFc2NhcGVDaGFyYWN0ZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2lFc2NhcGVDaGFyYWN0ZXIvYnVpbGQucHJvcGVydGllcwppbmRleCA5OTQ5ZGFjLi5lNzJhZTk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NpRXNjYXBlQ2hhcmFjdGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzaUVzY2FwZUNoYXJhY3Rlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNzaS1lc2NhcGUtY2hhcmFjdGVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NpRXNjYXBlQ2hhcmFjdGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2lFc2NhcGVDaGFyYWN0ZXIvYnVpbGQueG1sCmluZGV4IGFkMDI1ZDkuLmRlMWRjZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2lFc2NhcGVDaGFyYWN0ZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2lFc2NhcGVDaGFyYWN0ZXIvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMiArNDQsMjIgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzaUh0bWxFbnRpdHkvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzaUh0bWxFbnRpdHkvV2ViVGVzdC5qYXZhCmluZGV4IDc0NDMwYmEuLmUwMThjMmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2lIdG1sRW50aXR5L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NpSHRtbEVudGl0eS9XZWJUZXN0LmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgU1NJIEh0bWwgRW50aXR5Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTMsOCArNTMsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CkBAIC02NCw3ICs2NCw3IEBACiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIb3N0PSIgKyBob3N0ICsgIiwgcG9ydD0iICsgcG9ydCk7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIb3N0PSIgKyBob3N0ICsgIiwgcG9ydD0iICsgcG9ydCk7CiAgICAgICAgIFNvY2tldCBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi9pbmRleC5zaHRtbCBIVFRQLzEuMVxuIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2lIdG1sRW50aXR5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NpSHRtbEVudGl0eS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDYzZTYzODkuLmVhODA1MzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2lIdG1sRW50aXR5L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzaUh0bWxFbnRpdHkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zc2ktaHRtbC1lbnRpdHkiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2lIdG1sRW50aXR5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2lIdG1sRW50aXR5L2J1aWxkLnhtbAppbmRleCBhZDAyNWQ5Li5kZTFkY2ZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NpSHRtbEVudGl0eS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzaUh0bWxFbnRpdHkvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMiArNDQsMjIgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsL1dlYlRlc3QuamF2YQppbmRleCBiZGM5MzM2Li41MGNjNzYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsL1dlYlRlc3QuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDM7CiAKQEAgLTQzLDEyICs0MywxMiBAQAogICAgICAgICAgICAgU1NMU29ja2V0RmFjdG9yeSBzc2YgPSBnZXRTU0xTb2NrZXRGYWN0b3J5KHRydXN0U3RvcmVQYXRoKTsKICAgICAgICAgICAgIEh0dHBzVVJMQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gZG9TU0xIYW5kc2hha2UoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHBzOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArICIvIiwgc3NmKTsKLSAgICAgICAgICAgIGNoZWNrU3RhdHVzKGNvbm5lY3Rpb24pOyAKKyAgICAgICAgICAgIGNoZWNrU3RhdHVzKGNvbm5lY3Rpb24pOwogCiAgICAgICAgICAgICBjb25uZWN0aW9uID0gZG9TU0xIYW5kc2hha2UoCi0gICAgICAgICAgICAgICAgImh0dHBzOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArICIvIiArIGNvbnRleHRSb290IAorICAgICAgICAgICAgICAgICJodHRwczovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyAiLyIgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICsgIi9TZXJ2bGV0VGVzdCIsIHNzZik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcGFyc2VSZXNwb25zZShjb25uZWN0aW9uKTsKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CkBAIC01Niw3ICs1Niw3IEBACiAKICAgICAgICAgaWYgKGNvdW50ICE9IEVYUEVDVEVEX0NPVU5UKXsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJzc2wiLCBzdGF0LkZBSUwpOwotICAgICAgICB9ICAgICAgICAgICAKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWIvc3NsIC0tLT4gZXhwZWN0IDQgUEFTUyIpOwogICAgIH0KQEAgLTg5LDcgKzg5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbnsKIAogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlPSAgY29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBjb2RlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiAyMDAiKTsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogMjAwIik7CiAgICAgICAgIGlmIChjb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpICE9IDIwMCl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic3NsLXJlc3BvbnNlQ29kZSIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMDEsNyArMTAxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbnsKIAogICAgICAgICBCdWZmZXJlZFJlYWRlciBpbiA9IG51bGw7Ci0gICAgICAgICAgICAKKwogICAgICAgICBTdHJpbmcgbGluZSA9ICIiOwogICAgICAgICBpbnQgaW5kZXg7CiAgICAgICAgIHRyeSB7CkBAIC0xMjksNyArMTI5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJzc2wtRklMVEVSIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2wvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2wvYnVpbGQucHJvcGVydGllcwppbmRleCBkMTc3YzZkLi45MGVlNGQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc3NsIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zc2wiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLXNzbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsL2J1aWxkLnhtbAppbmRleCAzZGFiNjAxLi40Mzc3MjZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTAgKzQ0LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01NSwxNCArNTUsMTQgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24scHJlcGFyZS1rZXlzdG9yZS1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBmOTg2MWRmLi4xZjg0Y2VlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMzcgKzIyLDM3IEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8ZmlsdGVyPgogICAgICAgICA8ZmlsdGVyLW5hbWU+RmlsdGVyVGVzdDwvZmlsdGVyLW5hbWU+CiAgICAgICAgIDxmaWx0ZXItY2xhc3M+dGVzdC5GaWx0ZXJUZXN0PC9maWx0ZXItY2xhc3M+Ci0gICAgPC9maWx0ZXI+ICAgIAotICAgICAgICAKKyAgICA8L2ZpbHRlcj4KKwogICAgIDxmaWx0ZXItbWFwcGluZz4KICAgICAgICAgPGZpbHRlci1uYW1lPkZpbHRlclRlc3Q8L2ZpbHRlci1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgogICAgICAgICA8ZGlzcGF0Y2hlcj5SRVFVRVNUPC9kaXNwYXRjaGVyPgogICAgICAgICA8ZGlzcGF0Y2hlcj5JTkNMVURFPC9kaXNwYXRjaGVyPgotICAgICAgICA8ZGlzcGF0Y2hlcj5GT1JXQVJEPC9kaXNwYXRjaGVyPiAgCi0gICAgICAgIDxkaXNwYXRjaGVyPkVSUk9SPC9kaXNwYXRjaGVyPiAKKyAgICAgICAgPGRpc3BhdGNoZXI+Rk9SV0FSRDwvZGlzcGF0Y2hlcj4KKyAgICAgICAgPGRpc3BhdGNoZXI+RVJST1I8L2Rpc3BhdGNoZXI+CiAgICAgPC9maWx0ZXItbWFwcGluZz4KLSAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3QyPC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QyPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3QyPC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDM8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpAQCAtNjUsNyArNjUsNyBAQAogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mzwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0MzwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2Vzc2lvbi1jb25maWc+CiAgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+MTA8L3Nlc3Npb24tdGltZW91dD4KICAgICA8L3Nlc3Npb24tY29uZmlnPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2wvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEKaW5kZXggZmNmMzYyNC4uZWVjOTU3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhCkBAIC0xOSwyNSArMTksMjUgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogcHVibGljIGNsYXNzIEZpbHRlclRlc3QgaW1wbGVtZW50cyBGaWx0ZXJ7Ci0gICAgCisKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuZGVzdHJveV0iKTsKLSAgICB9ICAgIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwgRmlsdGVyQ2hhaW4gZmlsdGVyQ2hhaW4pIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLCBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW0ZpbHRlci5kb0ZpbHRlcl0iKTsKLSAgICAgICAgICAKKwogICAgICAgICAoKEh0dHBTZXJ2bGV0UmVxdWVzdClyZXF1ZXN0KS5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiUEFTUyIpOwogICAgICAgICBmaWx0ZXJDaGFpbi5kb0ZpbHRlcihyZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgICAgIAotICAgIH0gICAgCi0gICAgCi0gICAgCisKKyAgICB9CisKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoamFrYXJ0YS5zZXJ2bGV0LkZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW0ZpbHRlci5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gZmlsdGVyQ29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2wvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDhkMTExYWMuLjE0YzhlMjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2wvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2wvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0yNSwxMyArMjUsMTMgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IGltcGxlbWVudHMgSHR0cFNlc3Npb25MaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdICIgKyBjb250ZXh0LmdldE1ham9yVmVyc2lvbigpKTsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKQEAgLTM5LDIzICszOSwyMyBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5kb1Bvc3RdIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSLVJFUVVFU1QiLCByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUiIpKTsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiRkFJTCIpOyAgICAgICAgCi0gICAgICAgIAkKKyAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiRkFJTCIpOworCiAgICAgICAgIFJlcXVlc3REaXNwYXRjaGVyIHJkID0gY29udGV4dC5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL1NlcnZsZXRUZXN0MiIpOwotICAgICAgICByZC5mb3J3YXJkKHJlcXVlc3QsIHJlc3BvbnNlKTsgICAgICAgCisgICAgICAgIHJkLmZvcndhcmQocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25DcmVhdGVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25DcmVhdGVkXSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25EZXN0cm95ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkRlc3Ryb3llZF0iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdHRyaWJ1dGVzOiAiICsgaHR0cFNlc3Npb25FdmVudC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJ0ZXN0IikpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCmluZGV4IGRiMmNiNTAuLjAwNzc1YTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2wvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEKQEAgLTI1LDEwICsyNSwxMCBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0MiBleHRlbmRzIEh0dHBTZXJ2bGV0IGltcGxlbWVudHMgSHR0cFNlc3Npb25MaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDIuaW5pdF0iKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0Mi5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgfQogCkBAIC0zNywyMyArMzcsMjMgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQyLmRvUG9zdF0iKTsKLSAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSLUZPUldBUkQiLHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSIikpOwotICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7ICAgICAgICAKLSAgICAgICAgCisgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIkZBSUwiKTsKKwogICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciByZCA9IHJlcXVlc3QuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9TZXJ2bGV0VGVzdDMiKTsKLSAgICAgICAgcmQuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7ICAgICAKKyAgICAgICAgcmQuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQotIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkNyZWF0ZWRdIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkRlc3Ryb3llZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uRGVzdHJveWVkXSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF0dHJpYnV0ZXM6ICIgKyBodHRwU2Vzc2lvbkV2ZW50LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoInRlc3QiKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEKaW5kZXggYzVhMzgxYS4uMWE5ZTY4NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2wvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YQpAQCAtMjUsMTEgKzI1LDExIEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QzIGV4dGVuZHMgSHR0cFNlcnZsZXR7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDMuaW5pdF0iKTsgICAgICAgIAotICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7ICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDMuaW5pdF0iKTsKKyAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpAQCAtMzcsMTIgKzM3LDEyIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0My5kb1Bvc3RdIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIG91dC5wcmludGxuKCJGSUxURVItUkVRVUVTVDoiICsgcmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVItUkVRVUVTVCIpKTsKICAgICAgICAgb3V0LnByaW50bG4oIkZJTFRFUi1GT1JXQVJEOiIgKyByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUi1GT1JXQVJEIikpOwogICAgICAgICBvdXQucHJpbnRsbigiRklMVEVSLUlOQ0xVREU6IiArIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSIikpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENsaWVudEF1dGhVbnByb3RlY3RlZFJlc291cmNlR2V0Q2xpZW50Q2VydC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ2xpZW50QXV0aFVucHJvdGVjdGVkUmVzb3VyY2VHZXRDbGllbnRDZXJ0L1dlYlRlc3QuamF2YQppbmRleCBmYzQzM2E2Li41YjY3MzlmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ2xpZW50QXV0aFVucHJvdGVjdGVkUmVzb3VyY2VHZXRDbGllbnRDZXJ0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ2xpZW50QXV0aFVucHJvdGVjdGVkUmVzb3VyY2VHZXRDbGllbnRDZXJ0L1dlYlRlc3QuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogcHVibGljIGNsYXNzIFdlYlRlc3QgewogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRQotICAgICAgICA9ICJzc2wtY2xpZW50LWF1dGgtdW5wcm90ZWN0ZWQtcmVzb3VyY2UtZ2V0LWNsaWVudC1jZXJ0IjsgICAgCisgICAgICAgID0gInNzbC1jbGllbnQtYXV0aC11bnByb3RlY3RlZC1yZXNvdXJjZS1nZXQtY2xpZW50LWNlcnQiOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFCiAgICAgICAgID0gIltMamF2YS5zZWN1cml0eS5jZXJ0Llg1MDlDZXJ0aWZpY2F0ZTsiOwpAQCAtNDksNyArNDksNyBAQAogICAgICAgICBTdHJpbmcgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgICAgICBTdHJpbmcga2V5U3RvcmVQYXRoID0gYXJnc1szXTsKICAgICAgICAgU3RyaW5nIHRydXN0U3RvcmVQYXRoID0gYXJnc1s0XTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFNTTFNvY2tldEZhY3Rvcnkgc3NmID0gZ2V0U1NMU29ja2V0RmFjdG9yeShrZXlTdG9yZVBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1c3RTdG9yZVBhdGgpOwpAQCAtNTcsOSArNTcsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiL1Rlc3RTZXJ2bGV0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2YpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHBhcnNlUmVzcG9uc2UoY29ubmVjdGlvbik7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTc2LDcgKzc2LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmdldElucHV0U3RyZWFtKCkpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CiAgICAgICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewpAQCAtMTA1LDcgKzEwNSw3IEBACiAKICAgICAgICAgU1NMQ29udGV4dCBjdHggPSBTU0xDb250ZXh0LmdldEluc3RhbmNlKCJUTFMiKTsKIAotICAgICAgICAvLyBLZXlzdG9yZSAKKyAgICAgICAgLy8gS2V5c3RvcmUKICAgICAgICAgS2V5U3RvcmUga3MgPSBLZXlTdG9yZS5nZXRJbnN0YW5jZSgiSktTIik7CiAgICAgICAgIGNoYXJbXSBwYXNzcGhyYXNlID0gImNoYW5nZWl0Ii50b0NoYXJBcnJheSgpOwogICAgICAgICBrcy5sb2FkKG5ldyBGaWxlSW5wdXRTdHJlYW0oa2V5U3RvcmVQYXRoKSwgcGFzc3BocmFzZSk7CkBAIC0xMjEsNyArMTIxLDcgQEAKICAgICAgICAgdG1mLmluaXQodHJ1c3RTdG9yZSk7CiAKICAgICAgICAgY3R4LmluaXQoa21mLmdldEtleU1hbmFnZXJzKCksdG1mLmdldFRydXN0TWFuYWdlcnMoKSwgbnVsbCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBjdHguZ2V0U29ja2V0RmFjdG9yeSgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENsaWVudEF1dGhVbnByb3RlY3RlZFJlc291cmNlR2V0Q2xpZW50Q2VydC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENsaWVudEF1dGhVbnByb3RlY3RlZFJlc291cmNlR2V0Q2xpZW50Q2VydC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGIxNzljY2UuLjE0NjgxYWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDbGllbnRBdXRoVW5wcm90ZWN0ZWRSZXNvdXJjZUdldENsaWVudENlcnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ2xpZW50QXV0aFVucHJvdGVjdGVkUmVzb3VyY2VHZXRDbGllbnRDZXJ0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc3NsLWNsaWVudC1hdXRoLXVucHJvdGVjdGVkLXJlc291cmNlLWdldC1jbGllbnQtY2VydCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENsaWVudEF1dGhVbnByb3RlY3RlZFJlc291cmNlR2V0Q2xpZW50Q2VydC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ2xpZW50QXV0aFVucHJvdGVjdGVkUmVzb3VyY2VHZXRDbGllbnRDZXJ0L2J1aWxkLnhtbAppbmRleCBmYTViZWNjLi4wOTI5YmJkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ2xpZW50QXV0aFVucHJvdGVjdGVkUmVzb3VyY2VHZXRDbGllbnRDZXJ0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ2xpZW50QXV0aFVucHJvdGVjdGVkUmVzb3VyY2VHZXRDbGllbnRDZXJ0L2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTggKzQ0LDE4IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgpAQCAtODUsMTAgKzg1LDEwIEBACiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDbGllbnRBdXRoVW5wcm90ZWN0ZWRSZXNvdXJjZUdldENsaWVudENlcnQvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENsaWVudEF1dGhVbnByb3RlY3RlZFJlc291cmNlR2V0Q2xpZW50Q2VydC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggYzJhNzY4ZS4uZjU1Y2I5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENsaWVudEF1dGhVbnByb3RlY3RlZFJlc291cmNlR2V0Q2xpZW50Q2VydC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENsaWVudEF1dGhVbnByb3RlY3RlZFJlc291cmNlR2V0Q2xpZW50Q2VydC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDEzICsyMiwxMyBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICA8ZGlzcGxheS1uYW1lPlRlc3RTZXJ2bGV0PC9kaXNwbGF5LW5hbWU+CiAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICA8c2VydmxldC1jbGFzcz5UZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgPHVybC1wYXR0ZXJuPi9UZXN0U2VydmxldDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ2xpZW50QXV0aFVucHJvdGVjdGVkUmVzb3VyY2VHZXRDbGllbnRDZXJ0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDbGllbnRBdXRoVW5wcm90ZWN0ZWRSZXNvdXJjZUdldENsaWVudENlcnQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDU1ODg0NjguLjhhM2NiMTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDbGllbnRBdXRoVW5wcm90ZWN0ZWRSZXNvdXJjZUdldENsaWVudENlcnQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDbGllbnRBdXRoVW5wcm90ZWN0ZWRSZXNvdXJjZUdldENsaWVudENlcnQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgIFN0cmluZyBjbE5hbWUgPSBudWxsOwogICAgICAgICBpZiAoY2VydCAhPSBudWxsKSB7CiAgICAgICAgICAgICBjbE5hbWUgPSBjZXJ0LmdldENsYXNzKCkuZ2V0TmFtZSgpOwotCX0KKyAgICB9CiAgICAgICAgIHJlcy5nZXRXcml0ZXIoKS5wcmludChjbE5hbWUpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDb29raWUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENvb2tpZS9XZWJUZXN0LmphdmEKaW5kZXggODUyMDJhMy4uNjgwMjE4OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENvb2tpZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENvb2tpZS9XZWJUZXN0LmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAzOwogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZmlyc3RDb25uZWN0aW9uID0gdHJ1ZTsKQEAgLTUxLDE5ICs1MSwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIi9TZXJ2bGV0VGVzdDtqc2Vzc2lvbmlkPTAxQTk2MEMyMjQ4MENFOUY0NDVDREU0OERFMzMzRjMxIiwgc3NmKTsKIAogICAgICAgICAgICAgcGFyc2VSZXNwb25zZShjb25uZWN0aW9uKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBmaXJzdENvbm5lY3Rpb24gPSBmYWxzZTsKICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBkb1NTTEhhbmRzaGFrZSgKLSAgICAgICAgICAgICAgICAiaHR0cHM6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgIi8iICsgY29udGV4dFJvb3QgCisgICAgICAgICAgICAgICAgImh0dHBzOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArICIvIiArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgKyAiL1NlcnZsZXRUZXN0O2pzZXNzaW9uaWQ9IiArIHNlc3Npb25GYWxzZUlkLCBzc2YpOwogICAgICAgICAgICAgcGFyc2VSZXNwb25zZShjb25uZWN0aW9uKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CiAgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgaWYgKGNvdW50ICE9IEVYUEVDVEVEX0NPVU5UKXsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXNzbENvb2tpZSIsIHN0YXQuRkFJTCk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAKQEAgLTEwMSw4ICsxMDEsOCBAQAogICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uewogCiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGluID0gbnVsbDsKLSAgICAgICAgICAgIAotICAgICAgICBTdHJpbmcgbGluZT0gIiI7IAorCisgICAgICAgIFN0cmluZyBsaW5lPSAiIjsKICAgICAgICAgaW50IGluZGV4ID0gMDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKApAQCAtMTE2LDcgKzExNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29udGV4dDogIiArIGNvbnRleHQgKyAiIHN0YXR1czogIiArIHN0YXR1cyk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdENvbm5lY3Rpb24pewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb250ZXh0LmVxdWFsc0lnbm9yZUNhc2UoImdldFJlcXVlc3RTZXNzaW9uSWQiKSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkU2Vzc2lvbklkID0gc3RhdHVzOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ZWRTZXNzaW9uSWQgPSBzdGF0dXM7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICggY29udGV4dC5lcXVhbHNJZ25vcmVDYXNlKCJnZXRTZXNzaW9uKGZhbHNlKS5nZXRJZCIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbkZhbHNlSWQgPSBzdGF0dXM7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBjb250ZXh0LmVxdWFsc0lnbm9yZUNhc2UoImdldFJlcXVlc3RVUkkiKSkKQEAgLTE0OCw3ICsxNDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbGluZU51bSsrOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENvb2tpZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENvb2tpZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGM3YTZkZTUuLjU4YjdlMzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDb29raWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ29va2llL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zc2xDb29raWUiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNzbENvb2tpZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItc3NsQ29va2llIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ29va2llL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDb29raWUvYnVpbGQueG1sCmluZGV4IDQ5YzJlMmUuLjQzNzcyNmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDb29raWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDb29raWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxMCArNDQsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTU1LDE0ICs1NSwxNCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbixwcmVwYXJlLWtleXN0b3JlLWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ29va2llL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDb29raWUvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDNiY2JjY2QuLjhlZDkzNGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDb29raWUvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDb29raWUvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwxMyArMjIsMTMgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ29va2llL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDb29raWUvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IGJkZjUxMzguLjkyZjQ0OWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDb29raWUvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDb29raWUvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0yNCwxMSArMjQsMTEgQEAKIAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgaW1wbGVtZW50cyBIdHRwU2Vzc2lvbkxpc3RlbmVyIHsKIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsgICAgICAgIAotICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOworCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CkBAIC0zOSw5ICszOSw5IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBzZXNzaW9uQ3JlYXRlZCA9IGZhbHNlOwogCiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogCkBAIC00OSw3ICs0OSw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZSBzZXNzaW9uOiAiICsgcmVxdWVzdC5nZXRTZXNzaW9uKHRydWUpLmdldElkKCkpOwogICAgICAgICAgICAgc2Vzc2lvbkNyZWF0ZWQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAKICAgICAgICAgb3V0LnByaW50bG4oImdldFJlcXVlc3RTZXNzaW9uSWQ6OiIgKyByZXF1ZXN0LmdldFJlcXVlc3RlZFNlc3Npb25JZCgpKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXRSZXF1ZXN0U2Vzc2lvbklkOjoiICsgcmVxdWVzdC5nZXRSZXF1ZXN0ZWRTZXNzaW9uSWQoKSk7CkBAIC01OSwxMyArNTksMTMgQEAKICAgICAgICAgfQogICAgICAgICBvdXQucHJpbnRsbigiZ2V0UmVxdWVzdFVSSTo6IiArIHJlcXVlc3QuZ2V0UmVxdWVzdFVSSSgpKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXRSZXF1ZXN0VVJJOjoiICsgcmVxdWVzdC5nZXRSZXF1ZXN0VVJJKCkpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25DcmVhdGVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25DcmVhdGVkXSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25EZXN0cm95ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkRlc3Ryb3llZF0iKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsTXVsdGlTZWxlY3Rvci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsTXVsdGlTZWxlY3Rvci9XZWJUZXN0LmphdmEKaW5kZXggMDllY2I5Ni4uZDQxYWFmMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3IvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xNdWx0aVNlbGVjdG9yL1dlYlRlc3QuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDM7CiAKQEAgLTQzLDEyICs0MywxMiBAQAogICAgICAgICAgICAgU1NMU29ja2V0RmFjdG9yeSBzc2YgPSBnZXRTU0xTb2NrZXRGYWN0b3J5KHRydXN0U3RvcmVQYXRoKTsKICAgICAgICAgICAgIEh0dHBzVVJMQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gZG9TU0xIYW5kc2hha2UoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHBzOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArICIvIiwgc3NmKTsKLSAgICAgICAgICAgIGNoZWNrU3RhdHVzKGNvbm5lY3Rpb24pOyAKKyAgICAgICAgICAgIGNoZWNrU3RhdHVzKGNvbm5lY3Rpb24pOwogCiAgICAgICAgICAgICBjb25uZWN0aW9uID0gZG9TU0xIYW5kc2hha2UoCi0gICAgICAgICAgICAgICAgImh0dHBzOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArICIvIiArIGNvbnRleHRSb290IAorICAgICAgICAgICAgICAgICJodHRwczovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyAiLyIgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICsgIi9TZXJ2bGV0VGVzdCIsIHNzZik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcGFyc2VSZXNwb25zZShjb25uZWN0aW9uKTsKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CkBAIC01Niw3ICs1Niw3IEBACiAKICAgICAgICAgaWYgKGNvdW50ICE9IEVYUEVDVEVEX0NPVU5UKXsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtdWx0aVNlbGVjdG9yLXNzbCIsIHN0YXQuRkFJTCk7Ci0gICAgICAgIH0gICAgICAgICAgIAorICAgICAgICB9CiAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInNzbE11bHRpU2VsZWN0b3IiKTsKICAgICB9CkBAIC04OSw3ICs4OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb257CiAKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZT0gIGNvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogMjAwIik7IAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDIwMCIpOwogICAgICAgICBpZiAoY29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKSAhPSAyMDApewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm11bHRpU2VsZWN0b3ItcmVzcG9uc2VDb2RlIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTEwMiw3ICsxMDIsNyBAQAogCiAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIoCiAgICAgICAgICAgICAgICAgbmV3IElucHV0U3RyZWFtUmVhZGVyKGNvbm5lY3Rpb24uZ2V0SW5wdXRTdHJlYW0oKSkpOwotICAgICAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGxpbmUgPSAiIjsKICAgICAgICAgaW50IGluZGV4OwogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsKSB7CkBAIC0xMTEsMTUgKzExMSwxNSBAQAogICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgaW5kZXggPSBsaW5lLmluZGV4T2YoIjoiKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgc3RhdHVzID0gbGluZS5zdWJzdHJpbmcoaW5kZXgrMSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5lcXVhbHNJZ25vcmVDYXNlKCJQQVNTIikpewogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibXVsdGlTZWxlY3Rvci0iICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm11bHRpU2VsZWN0b3ItZmlsdGVyIiwgc3RhdC5GQUlMKTsgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibXVsdGlTZWxlY3Rvci1maWx0ZXIiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGluLmNsb3NlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsTXVsdGlTZWxlY3Rvci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3IvYnVpbGQucHJvcGVydGllcwppbmRleCA0YWNjNGQzLi4wY2MyZTBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsTXVsdGlTZWxlY3Rvci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xNdWx0aVNlbGVjdG9yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zc2xNdWx0aVNlbGVjdG9yIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zc2xNdWx0aVNlbGVjdG9yIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3NzbE11bHRpU2VsZWN0b3IiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xNdWx0aVNlbGVjdG9yL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xNdWx0aVNlbGVjdG9yL2J1aWxkLnhtbAppbmRleCBjNzBjYWZjLi5kZmJkNjU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsTXVsdGlTZWxlY3Rvci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3IvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxMCArNDQsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CkBAIC03Miw3ICs3Miw3IEBACiAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImNvbmZpZ3MuY29uZmlnLnNlcnZlci1jb25maWcubmV0d29yay1jb25maWcudHJhbnNwb3J0cy50cmFuc3BvcnQudGNwLmFjY2VwdG9yLXRocmVhZHM9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtODIsNyArODIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbixwcmVwYXJlLWtleXN0b3JlLWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC05NSwxMCArOTUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsTXVsdGlTZWxlY3Rvci9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsTXVsdGlTZWxlY3Rvci9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZjk4NjFkZi4uMWY4NGNlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3IvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xNdWx0aVNlbGVjdG9yL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMzcgKzIyLDM3IEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8ZmlsdGVyPgogICAgICAgICA8ZmlsdGVyLW5hbWU+RmlsdGVyVGVzdDwvZmlsdGVyLW5hbWU+CiAgICAgICAgIDxmaWx0ZXItY2xhc3M+dGVzdC5GaWx0ZXJUZXN0PC9maWx0ZXItY2xhc3M+Ci0gICAgPC9maWx0ZXI+ICAgIAotICAgICAgICAKKyAgICA8L2ZpbHRlcj4KKwogICAgIDxmaWx0ZXItbWFwcGluZz4KICAgICAgICAgPGZpbHRlci1uYW1lPkZpbHRlclRlc3Q8L2ZpbHRlci1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgogICAgICAgICA8ZGlzcGF0Y2hlcj5SRVFVRVNUPC9kaXNwYXRjaGVyPgogICAgICAgICA8ZGlzcGF0Y2hlcj5JTkNMVURFPC9kaXNwYXRjaGVyPgotICAgICAgICA8ZGlzcGF0Y2hlcj5GT1JXQVJEPC9kaXNwYXRjaGVyPiAgCi0gICAgICAgIDxkaXNwYXRjaGVyPkVSUk9SPC9kaXNwYXRjaGVyPiAKKyAgICAgICAgPGRpc3BhdGNoZXI+Rk9SV0FSRDwvZGlzcGF0Y2hlcj4KKyAgICAgICAgPGRpc3BhdGNoZXI+RVJST1I8L2Rpc3BhdGNoZXI+CiAgICAgPC9maWx0ZXItbWFwcGluZz4KLSAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3QyPC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QyPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3QyPC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDM8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpAQCAtNjUsNyArNjUsNyBAQAogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mzwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0MzwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2Vzc2lvbi1jb25maWc+CiAgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+MTA8L3Nlc3Npb24tdGltZW91dD4KICAgICA8L3Nlc3Npb24tY29uZmlnPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3Ivc2VydmxldC9GaWx0ZXJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsTXVsdGlTZWxlY3Rvci9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQppbmRleCBmY2YzNjI0Li5lZWM5NTdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsTXVsdGlTZWxlY3Rvci9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsTXVsdGlTZWxlY3Rvci9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQpAQCAtMTksMjUgKzE5LDI1IEBACiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIHB1YmxpYyBjbGFzcyBGaWx0ZXJUZXN0IGltcGxlbWVudHMgRmlsdGVyewotICAgIAorCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmRlc3Ryb3ldIik7Ci0gICAgfSAgICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIEZpbHRlckNoYWluIGZpbHRlckNoYWluKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuZG9GaWx0ZXJdIik7Ci0gICAgICAgICAgCisKICAgICAgICAgKChIdHRwU2VydmxldFJlcXVlc3QpcmVxdWVzdCkuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIlBBU1MiKTsKICAgICAgICAgZmlsdGVyQ2hhaW4uZG9GaWx0ZXIocmVxdWVzdCwgcmVzcG9uc2UpOwotICAgICAgICAKLSAgICB9ICAgIAotICAgIAotICAgIAorCisgICAgfQorCisKICAgICBwdWJsaWMgdm9pZCBpbml0KGpha2FydGEuc2VydmxldC5GaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGZpbHRlckNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3Ivc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3Ivc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDhkMTExYWMuLjE0YzhlMjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xNdWx0aVNlbGVjdG9yL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsTXVsdGlTZWxlY3Rvci9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTI1LDEzICsyNSwxMyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgaW1wbGVtZW50cyBIdHRwU2Vzc2lvbkxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0gIiArIGNvbnRleHQuZ2V0TWFqb3JWZXJzaW9uKCkpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpAQCAtMzksMjMgKzM5LDIzIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVItUkVRVUVTVCIsIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSIikpOwotICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7ICAgICAgICAKLSAgICAgICAgCQorICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7CisKICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmQgPSBjb250ZXh0LmdldFJlcXVlc3REaXNwYXRjaGVyKCIvU2VydmxldFRlc3QyIik7Ci0gICAgICAgIHJkLmZvcndhcmQocmVxdWVzdCwgcmVzcG9uc2UpOyAgICAgICAKKyAgICAgICAgcmQuZm9yd2FyZChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkNyZWF0ZWRdIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkRlc3Ryb3llZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uRGVzdHJveWVkXSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF0dHJpYnV0ZXM6ICIgKyBodHRwU2Vzc2lvbkV2ZW50LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoInRlc3QiKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsTXVsdGlTZWxlY3Rvci9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3Ivc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YQppbmRleCBkYjJjYjUwLi4wMDc3NWE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsTXVsdGlTZWxlY3Rvci9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xNdWx0aVNlbGVjdG9yL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEKQEAgLTI1LDEwICsyNSwxMCBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0MiBleHRlbmRzIEh0dHBTZXJ2bGV0IGltcGxlbWVudHMgSHR0cFNlc3Npb25MaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDIuaW5pdF0iKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0Mi5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgfQogCkBAIC0zNywyMyArMzcsMjMgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQyLmRvUG9zdF0iKTsKLSAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSLUZPUldBUkQiLHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSIikpOwotICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7ICAgICAgICAKLSAgICAgICAgCisgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIkZBSUwiKTsKKwogICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciByZCA9IHJlcXVlc3QuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9TZXJ2bGV0VGVzdDMiKTsKLSAgICAgICAgcmQuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7ICAgICAKKyAgICAgICAgcmQuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQotIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkNyZWF0ZWRdIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkRlc3Ryb3llZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uRGVzdHJveWVkXSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF0dHJpYnV0ZXM6ICIgKyBodHRwU2Vzc2lvbkV2ZW50LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoInRlc3QiKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsTXVsdGlTZWxlY3Rvci9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3Ivc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YQppbmRleCBjNWEzODFhLi4xYTllNjg3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsTXVsdGlTZWxlY3Rvci9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xNdWx0aVNlbGVjdG9yL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEKQEAgLTI1LDExICsyNSwxMSBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0MyBleHRlbmRzIEh0dHBTZXJ2bGV0ewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQzLmluaXRdIik7ICAgICAgICAKLSAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOyAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQzLmluaXRdIik7CisgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKQEAgLTM3LDEyICszNywxMiBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDMuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICBvdXQucHJpbnRsbigiRklMVEVSLVJFUVVFU1Q6IiArIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSLVJFUVVFU1QiKSk7CiAgICAgICAgIG91dC5wcmludGxuKCJGSUxURVItRk9SV0FSRDoiICsgcmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVItRk9SV0FSRCIpKTsKICAgICAgICAgb3V0LnByaW50bG4oIkZJTFRFUi1JTkNMVURFOiIgKyByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUiIpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xTZXJ2ZXJOYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsU2VydmVyTmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDZlMjMzMjAuLjgyMjgzZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xTZXJ2ZXJOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbFNlcnZlck5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZlck5hbWUiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZlck5hbWUiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLXNlcnZlck5hbWUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xTZXJ2ZXJOYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xTZXJ2ZXJOYW1lL2J1aWxkLnhtbAppbmRleCAwYTVhMjBiLi41NGVhOTQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsU2VydmVyTmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbFNlcnZlck5hbWUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyNiArNDIsMjYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgIDxqYXZhYwogICAgICAgICAgICAgc3JjZGlyPSIuIgotICAgICAgICAgICAgZGVidWc9InRydWUiICAgICAgICAgICAgCisgICAgICAgICAgICBkZWJ1Zz0idHJ1ZSIKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSIqLmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24scHJlcGFyZS1rZXlzdG9yZS1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbFNlcnZlck5hbWUvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbFNlcnZlck5hbWUvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGZkYjBjMTcuLmMxZDRiYjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xTZXJ2ZXJOYW1lL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsU2VydmVyTmFtZS9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDEyICsyMiwxMiBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsU2VydmVyTmFtZS9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsU2VydmVyTmFtZS9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggNzgxYmNjZi4uYzA3MzI3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbFNlcnZlck5hbWUvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xTZXJ2ZXJOYW1lL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKQEAgLTM0LDEyICszNCwxMiBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5kb1Bvc3RdIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAkKKwogICAgICAgICBvdXQucHJpbnRsbigiVEVTVDo6UEFTUyIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zdGFuZGFsb25ld2FyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zdGFuZGFsb25ld2FyL1dlYlRlc3QuamF2YQppbmRleCAyODA0OTljLi5jODIwNzNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3N0YW5kYWxvbmV3YXIvV2ViVGVzdC5qYXZhCkBAIC0yMiwxMCArMjIsMTAgQEAKIAogcHVibGljIGNsYXNzIFdlYlRlc3QKIHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMzsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC0zNCw3ICszNCw3IEBACiAKICAgICAgICAgLy8gVGhlIHN0YXQgcmVwb3J0ZXIgd3JpdGVzIG91dCB0aGUgdGVzdCBpbmZvIGFuZCByZXN1bHRzCiAgICAgICAgIC8vIGludG8gdGhlIHRvcC1sZXZlbCBxdWlja2xvb2sgZGlyZWN0b3J5IGR1cmluZyBhIHJ1bi4KLSAgICAgIAorCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlN0YW5kYWxvbmUgU2VydmxldC9GaWx0ZXIgd2FyIHRlc3QiKTsKIAogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CkBAIC00Myw3ICs0Myw3IEBACiAKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0UykuaW50VmFsdWUoKTsKICAgICAgICAgU3RyaW5nIG5hbWU7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBnb0dldChob3N0LCBwb3J0LCAiRklMVEVSIiwgY29udGV4dFJvb3QgKyAiL1NlcnZsZXRUZXN0IiApOwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewpAQCAtNTIsNyArNTIsNyBAQAogCiAgICAgICAgIGlmIChjb3VudCAhPSBFWFBFQ1RFRF9DT1VOVCl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXJlcXVlc3RkaXNwYXRjaGVyIiwgc3RhdC5GQUlMKTsKLSAgICAgICAgfSAgICAgICAgICAgCisgICAgICAgIH0KICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYi1yZXF1ZXN0ZGlzcGF0Y2hlciIpOwogICAgIH0KIApAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMVxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgoIkhvc3Q6IGxvY2FsaG9zdFxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gcy5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaW1lOiAiICsgKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gdGltZSkpOwogICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwpAQCAtODEsMTggKzgxLDE4IEBACiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gbGluZS5pbmRleE9mKCI6Iik7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdGF0dXMgPSBsaW5lLnN1YnN0cmluZyhpbmRleCsxKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5lcXVhbHNJZ25vcmVDYXNlKCJQQVNTIikpewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1yZXF1ZXN0ZGlzcGF0Y2hlcjogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1yZXF1ZXN0ZGlzcGF0Y2hlcjogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LkZBSUwpOyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXJlcXVlc3RkaXNwYXRjaGVyOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3N0YW5kYWxvbmV3YXIvYnVpbGQucHJvcGVydGllcwppbmRleCAxMmVmNGJhLi4yMTRjNjJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zdGFuZGFsb25ld2FyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZXF1ZXN0ZGlzcGF0Y2hlciIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVxdWVzdGRpc3BhdGNoZXIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLXJlcXVlc3RkaXNwYXRjaGVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9idWlsZC54bWwKaW5kZXggMWQ5ODI2OS4uNmI4MDE1NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3N0YW5kYWxvbmV3YXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zdGFuZGFsb25ld2FyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01MywxMCArNTMsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc4LDExICs3OCwxMSBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iY2xvYmJlciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKLSAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zdGFuZGFsb25ld2FyL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zdGFuZGFsb25ld2FyL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBmOTg2MWRmLi4xZjg0Y2VlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3N0YW5kYWxvbmV3YXIvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwzNyArMjIsMzcgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxmaWx0ZXI+CiAgICAgICAgIDxmaWx0ZXItbmFtZT5GaWx0ZXJUZXN0PC9maWx0ZXItbmFtZT4KICAgICAgICAgPGZpbHRlci1jbGFzcz50ZXN0LkZpbHRlclRlc3Q8L2ZpbHRlci1jbGFzcz4KLSAgICA8L2ZpbHRlcj4gICAgCi0gICAgICAgIAorICAgIDwvZmlsdGVyPgorCiAgICAgPGZpbHRlci1tYXBwaW5nPgogICAgICAgICA8ZmlsdGVyLW5hbWU+RmlsdGVyVGVzdDwvZmlsdGVyLW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+CiAgICAgICAgIDxkaXNwYXRjaGVyPlJFUVVFU1Q8L2Rpc3BhdGNoZXI+CiAgICAgICAgIDxkaXNwYXRjaGVyPklOQ0xVREU8L2Rpc3BhdGNoZXI+Ci0gICAgICAgIDxkaXNwYXRjaGVyPkZPUldBUkQ8L2Rpc3BhdGNoZXI+ICAKLSAgICAgICAgPGRpc3BhdGNoZXI+RVJST1I8L2Rpc3BhdGNoZXI+IAorICAgICAgICA8ZGlzcGF0Y2hlcj5GT1JXQVJEPC9kaXNwYXRjaGVyPgorICAgICAgICA8ZGlzcGF0Y2hlcj5FUlJPUjwvZGlzcGF0Y2hlcj4KICAgICA8L2ZpbHRlci1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDI8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDI8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDI8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0MzwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mzwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0Mzwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QzPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3QzPC91cmwtcGF0dGVybj4KICAgICA8L3NlcnZsZXQtbWFwcGluZz4KLSAgICAKKwogICAgIDxzZXNzaW9uLWNvbmZpZz4KICAgICAgICAgPHNlc3Npb24tdGltZW91dD4xMDwvc2Vzc2lvbi10aW1lb3V0PgogICAgIDwvc2Vzc2lvbi1jb25maWc+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zdGFuZGFsb25ld2FyL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhCmluZGV4IGZjZjM2MjQuLmVlYzk1N2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zdGFuZGFsb25ld2FyL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zdGFuZGFsb25ld2FyL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhCkBAIC0xOSwyNSArMTksMjUgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogcHVibGljIGNsYXNzIEZpbHRlclRlc3QgaW1wbGVtZW50cyBGaWx0ZXJ7Ci0gICAgCisKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuZGVzdHJveV0iKTsKLSAgICB9ICAgIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwgRmlsdGVyQ2hhaW4gZmlsdGVyQ2hhaW4pIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLCBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW0ZpbHRlci5kb0ZpbHRlcl0iKTsKLSAgICAgICAgICAKKwogICAgICAgICAoKEh0dHBTZXJ2bGV0UmVxdWVzdClyZXF1ZXN0KS5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiUEFTUyIpOwogICAgICAgICBmaWx0ZXJDaGFpbi5kb0ZpbHRlcihyZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgICAgIAotICAgIH0gICAgCi0gICAgCi0gICAgCisKKyAgICB9CisKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoamFrYXJ0YS5zZXJ2bGV0LkZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW0ZpbHRlci5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gZmlsdGVyQ29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggZDRhMzE3NC4uZGFhODA1MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3N0YW5kYWxvbmV3YXIvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zdGFuZGFsb25ld2FyL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtNDYsMTMgKzQ2LDEzIEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCBpbXBsZW1lbnRzIEh0dHBTZXNzaW9uTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7CiAgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSAiICsgY29udGV4dC5nZXRNYWpvclZlcnNpb24oKSk7Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CkBAIC02MCwyMyArNjAsMjMgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUi1SRVFVRVNUIiwgcmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVIiKSk7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIkZBSUwiKTsgICAgICAgIAotICAgICAgICAJCisgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIkZBSUwiKTsKKwogICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciByZCA9IGNvbnRleHQuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9TZXJ2bGV0VGVzdDIiKTsKLSAgICAgICAgcmQuZm9yd2FyZChyZXF1ZXN0LCByZXNwb25zZSk7ICAgICAgIAorICAgICAgICByZC5mb3J3YXJkKHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uQ3JlYXRlZF0iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uRGVzdHJveWVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25EZXN0cm95ZWRdIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXR0cmlidXRlczogIiArIGh0dHBTZXNzaW9uRXZlbnQuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgidGVzdCIpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zdGFuZGFsb25ld2FyL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCmluZGV4IGRiMmNiNTAuLjAwNzc1YTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zdGFuZGFsb25ld2FyL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3N0YW5kYWxvbmV3YXIvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YQpAQCAtMjUsMTAgKzI1LDEwIEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QyIGV4dGVuZHMgSHR0cFNlcnZsZXQgaW1wbGVtZW50cyBIdHRwU2Vzc2lvbkxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0Mi5pbml0XSIpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQyLmluaXRdIik7CiAgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICB9CiAKQEAgLTM3LDIzICszNywyMyBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDIuZG9Qb3N0XSIpOwotICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVItRk9SV0FSRCIscmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVIiKSk7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIkZBSUwiKTsgICAgICAgIAotICAgICAgICAKKyAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiRkFJTCIpOworCiAgICAgICAgIFJlcXVlc3REaXNwYXRjaGVyIHJkID0gcmVxdWVzdC5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL1NlcnZsZXRUZXN0MyIpOwotICAgICAgICByZC5pbmNsdWRlKHJlcXVlc3QsIHJlc3BvbnNlKTsgICAgIAorICAgICAgICByZC5pbmNsdWRlKHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9Ci0gCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uQ3JlYXRlZF0iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uRGVzdHJveWVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25EZXN0cm95ZWRdIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXR0cmlidXRlczogIiArIGh0dHBTZXNzaW9uRXZlbnQuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgidGVzdCIpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zdGFuZGFsb25ld2FyL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhCmluZGV4IDNlOGQyNWIuLmU3OGZlYzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zdGFuZGFsb25ld2FyL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3N0YW5kYWxvbmV3YXIvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YQpAQCAtNDYsMTEgKzQ2LDExIEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QzIGV4dGVuZHMgSHR0cFNlcnZsZXR7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDMuaW5pdF0iKTsgICAgICAgIAotICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7ICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDMuaW5pdF0iKTsKKyAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpAQCAtNTgsMTIgKzU4LDEyIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0My5kb1Bvc3RdIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIG91dC5wcmludGxuKCJGSUxURVItUkVRVUVTVDoiICsgcmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVItUkVRVUVTVCIpKTsKICAgICAgICAgb3V0LnByaW50bG4oIkZJTFRFUi1GT1JXQVJEOiIgKyByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUi1GT1JXQVJEIikpOwogICAgICAgICBvdXQucHJpbnRsbigiRklMVEVSLUlOQ0xVREU6IiArIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSIikpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2gvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2gvV2ViVGVzdC5qYXZhCmluZGV4IGRjMWIxMTUuLmQ1ZWY2NTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaC9XZWJUZXN0LmphdmEKQEAgLTY2LDE3ICs2NiwxNyBAQAogICAgIC8qCiAgICAgICogUmV0dXJucyB0cnVlIGluIGNhc2Ugb2Ygc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZG9UZXN0KFN0cmluZyB1cmxTdHJpbmcsIAorICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZG9UZXN0KFN0cmluZyB1cmxTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGV4cGVjdGVkMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZXhwZWN0ZWQyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBleHBlY3RlZDMpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCh1cmxTdHJpbmcpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTYsOCArOTYsOCBAQAogCiAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnZhbGlkIHJlc3BvbnNlLiBSZXNwb25zZSBkaWQgbm90ICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29udGFpbiBvbmUgb2YgdGhlIGV4cGVjdGVkIHN0cmluZ3M6ICIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQxICsgIiwiICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb250YWluIG9uZSBvZiB0aGUgZXhwZWN0ZWQgc3RyaW5nczogIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkMSArICIsIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkMiArICIsIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkMyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2gvYnVpbGQtbmcucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoL2J1aWxkLW5nLnByb3BlcnRpZXMKaW5kZXggZDdlYzA5MS4uODdiY2Q5ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2gvYnVpbGQtbmcucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaC9idWlsZC1uZy5wcm9wZXJ0aWVzCkBAIC0xOCw3ICsxOCw3IEBACiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS10YWctcGx1Z2luLWZvci1lYWNoIi8+CiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0YWdQbHVnaW5zLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvdGFnUGx1Z2lucy54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaC9idWlsZC1uZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaC9idWlsZC1uZy54bWwKaW5kZXggNzJmNGZjYi4uOTYwOWFjOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2gvYnVpbGQtbmcueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoL2J1aWxkLW5nLnhtbApAQCAtODgsMTYgKzg4LDE2IEBACiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2gvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTYyMTdiMy4uN2M2NmIwOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2gvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdGFnLXBsdWdpbi1mb3ItZWFjaCIvPgogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0idGFnUGx1Z2lucy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3RhZ1BsdWdpbnMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2gvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2gvYnVpbGQueG1sCmluZGV4IGY2ZTc4ZmIuLjliNGU1NDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTQgKzUzLDE0IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcyLDEwICs3MiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoL3Rlc3QvV2ViVGVzdE5HLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaC90ZXN0L1dlYlRlc3RORy5qYXZhCmluZGV4IDQzNWEwYjAuLjZjNzQ3NzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoL3Rlc3QvV2ViVGVzdE5HLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2gvdGVzdC9XZWJUZXN0TkcuamF2YQpAQCAtNTQsMTMgKzU0LDEzIEBACiAgICAgICogUmV0dXJucyB0cnVlIGluIGNhc2Ugb2Ygc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICAqLwogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZG9UZXN0KFN0cmluZyB1cmxTdHJpbmcsIFN0cmluZyBleHBlY3RlZCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKHVybFN0cmluZyk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaC90ZXN0L3Rlc3RuZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaC90ZXN0L3Rlc3RuZy54bWwKaW5kZXggMzU0ZjQyNi4uNmIyMjA0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2gvdGVzdC90ZXN0bmcueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoL3Rlc3QvdGVzdG5nLnhtbApAQCAtMTcsNyArMTcsNyBAQAogLS0+CiAKIDwhRE9DVFlQRSBzdWl0ZSBTWVNURU0gImh0dHA6Ly90ZXN0bmcub3JnL3Rlc3RuZy0xLjAuZHRkIiA+Ci0gIAorCiA8c3VpdGUgbmFtZT0id2ViIiA+CiAgIDxwYXJhbWV0ZXIgbmFtZT0iaG9zdCIgdmFsdWU9ImxvY2FsaG9zdCIvPgogICA8cGFyYW1ldGVyIG5hbWU9InBvcnQiIHZhbHVlPSI4MDgwIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaFRhZ0ZpbGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2hUYWdGaWxlL1dlYlRlc3QuamF2YQppbmRleCA5Mzc4OWIzLi5jMWEwZWZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaFRhZ0ZpbGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoVGFnRmlsZS9XZWJUZXN0LmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIC8qCi0gKiBVbml0IHRlc3QgZm9yIEJ1Z3ppbGxhIDI4MzYxICgiZm9yZWFjaCBubyBsb25nZXIgd29ya3MgaW4gdGFnIGZpbGUiKSAKKyAqIFVuaXQgdGVzdCBmb3IgQnVnemlsbGEgMjgzNjEgKCJmb3JlYWNoIG5vIGxvbmdlciB3b3JrcyBpbiB0YWcgZmlsZSIpCiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKIApAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBCdWd6aWxsYSAyODM2MSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIiArCiAgICAgICAgICAgICAgICAgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9CkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgICAgICAgICAgaWYgKGJyICE9IG51bGwpIGJyLmNsb3NlKCk7CiAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkge30KICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgIGlmICghZm91bmQpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkludmFsaWQgcmVzcG9uc2UuIFJlc3BvbnNlIGRpZCBub3QgIiArCiAgICAgICAgICAgICAgICAgImNvbnRhaW4gZXhwZWN0ZWQ6ICIgKyBFWFBFQ1RFRCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaFRhZ0ZpbGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoVGFnRmlsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQzYzZiMDkuLjA4NjY5OWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoVGFnRmlsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoVGFnRmlsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdGFnLXBsdWdpbi1mb3ItZWFjaC10YWctZmlsZSIvPgogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0idGFnUGx1Z2lucy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3RhZ1BsdWdpbnMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2hUYWdGaWxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoVGFnRmlsZS9idWlsZC54bWwKaW5kZXggZjZlNzhmYi4uOWI0ZTU0MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2hUYWdGaWxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaFRhZ0ZpbGUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDE0ICs1MywxNCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnZmlsZUluY2x1ZGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ2ZpbGVJbmNsdWRlL1dlYlRlc3QuamF2YQppbmRleCA1OWU0N2JhLi45ZDQ5MTc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnZmlsZUluY2x1ZGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdmaWxlSW5jbHVkZS9XZWJUZXN0LmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAotcHVibGljIGNsYXNzIFdlYlRlc3QgeyAgICAKK3B1YmxpYyBjbGFzcyBXZWJUZXN0IHsKIAogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgU3RyaW5nIHBvcnRTID0gYXJnc1sxXTsKICAgICAgICAgU3RyaW5nIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0UykuaW50VmFsdWUoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsIGNvbnRleHRSb290ICsgIi90ZXN0LmpzcCIgKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgICAgICAgICBpZiAobGluZS5pbmRleE9mKCJQQVNTIikgPj0gMCkgewogICAgICAgICAgICAgICAgICAgICBwYXNzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ2ZpbGVJbmNsdWRlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnZmlsZUluY2x1ZGUvYnVpbGQucHJvcGVydGllcwppbmRleCBlZDRlOTA3Li42MDlkMmVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnZmlsZUluY2x1ZGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnZmlsZUluY2x1ZGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTIgKzE1LDEyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXRhZ2ZpbGUtaW5jbHVkZSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdGFnZmlsZS1pbmNsdWRlIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0YWdmaWxlcyIgdmFsdWU9ImRlc2NyaXB0b3IvdGFncyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ2ZpbGVJbmNsdWRlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdmaWxlSW5jbHVkZS9idWlsZC54bWwKaW5kZXggZGJiZmY0ZS4uMjE5NjA4OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ2ZpbGVJbmNsdWRlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnZmlsZUluY2x1ZGUvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NSwxMCArNDUsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTU2LDEwICs1NiwxMCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY3LDcgKzY3LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzksMTAgKzc5LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ3BsdWdpbi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFncGx1Z2luL1dlYlRlc3QuamF2YQppbmRleCAzY2I4YzIzLi4zZDZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFncGx1Z2luL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFncGx1Z2luL1dlYlRlc3QuamF2YQpAQCAtMjIsOSArMjIsOSBAQAogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdAogewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBwYXNzID0gZmFsc2U7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApAQCAtMzMsMTQgKzMzLDE0IEBACiAKICAgICAgICAgLy8gVGhlIHN0YXQgcmVwb3J0ZXIgd3JpdGVzIG91dCB0aGUgdGVzdCBpbmZvIGFuZCByZXN1bHRzCiAgICAgICAgIC8vIGludG8gdGhlIHRvcC1sZXZlbCBxdWlja2xvb2sgZGlyZWN0b3J5IGR1cmluZyBhIHJ1bi4KLSAgICAgIAorCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRhZyBQbHVnaW4gdGVzdCIpOwogCiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKICAgICAgICAgU3RyaW5nIHBvcnRTID0gYXJnc1sxXTsKICAgICAgICAgU3RyaW5nIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0UykuaW50VmFsdWUoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsIGNvbnRleHRSb290ICsgIi90ZXN0LmpzcCIgKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJUYWcgUGx1Z2luIHRlc3QiLCBwYXNzPyBzdGF0LlBBU1M6IHN0YXQuRkFJTCk7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjAiKTsKICAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMFxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gcy5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKQEAgLTczLDEwICs3MywxMCBAQAogICAgICAgICAgICAgICAgIGludCBpbmRleCA9IGxpbmUuaW5kZXhPZigiUEFTUyIpOwogICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIHBhc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRlc3QgVU5QUkVESUNURUQtRkFJTFVSRSIpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ3BsdWdpbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ3BsdWdpbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDJhOTU4ZTQuLjM2NjAxZTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdwbHVnaW4vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFncGx1Z2luL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS10YWdwbHVnaW4iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXRhZ3BsdWdpbiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0YWdQbHVnaW5zLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvdGFnUGx1Z2lucy54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdwbHVnaW4vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ3BsdWdpbi9idWlsZC54bWwKaW5kZXggODdkYmQ0Yy4uNWExZjBjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ3BsdWdpbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ3BsdWdpbi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGVzdEZvcm1BdXRoZW50aWNhdG9yL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90ZXN0Rm9ybUF1dGhlbnRpY2F0b3IvV2ViVGVzdC5qYXZhCmluZGV4IGIzMDdmMDguLmM5NjhmN2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90ZXN0Rm9ybUF1dGhlbnRpY2F0b3IvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90ZXN0Rm9ybUF1dGhlbnRpY2F0b3IvV2ViVGVzdC5qYXZhCkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIGFkbWluVXNlciA9IGFyZ3NbM107CiAgICAgICAgIGFkbWluUGFzc3dvcmQgPSBhcmdzWzRdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIFRvbWNhdCBidWcgNDk3NzkiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90ZXN0Rm9ybUF1dGhlbnRpY2F0b3IvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90ZXN0Rm9ybUF1dGhlbnRpY2F0b3IvYnVpbGQucHJvcGVydGllcwppbmRleCBjMjBjNjZlLi41MzZjMWMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGVzdEZvcm1BdXRoZW50aWNhdG9yL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Rlc3RGb3JtQXV0aGVudGljYXRvci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXRlc3QtZm9ybS1hdXRoZW50aWNhdG9yIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGVzdEZvcm1BdXRoZW50aWNhdG9yL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90ZXN0Rm9ybUF1dGhlbnRpY2F0b3IvYnVpbGQueG1sCmluZGV4IDNhZjg3YTIuLjU0ZWUzODUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90ZXN0Rm9ybUF1dGhlbnRpY2F0b3IvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90ZXN0Rm9ybUF1dGhlbnRpY2F0b3IvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNTMsMjQgKzUzLDI0IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iCiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi93ZWJ0ZXN0LmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0iZGVidWciIHZhbHVlPSJmYWxzZSIvPgpAQCAtODksNyArODksNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0ic2V0dXAiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGVzdEZvcm1BdXRoZW50aWNhdG9yL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90ZXN0Rm9ybUF1dGhlbnRpY2F0b3IvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDdmYzYwNWUuLjVlNzgwMzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90ZXN0Rm9ybUF1dGhlbnRpY2F0b3IvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90ZXN0Rm9ybUF1dGhlbnRpY2F0b3IvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yNSwxMiArMjUsMTIgQEAKIAogICA8c2VjdXJpdHktY29uc3RyYWludD4KICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+Ci0JPHdlYi1yZXNvdXJjZS1uYW1lPlByb3RlY3RlZCBBcmVhPC93ZWItcmVzb3VyY2UtbmFtZT4KLQk8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgotCTxodHRwLW1ldGhvZD5ERUxFVEU8L2h0dHAtbWV0aG9kPgotCTxodHRwLW1ldGhvZD5HRVQ8L2h0dHAtbWV0aG9kPgotCTxodHRwLW1ldGhvZD5QT1NUPC9odHRwLW1ldGhvZD4KLQk8aHR0cC1tZXRob2Q+UFVUPC9odHRwLW1ldGhvZD4KKyAgICA8d2ViLXJlc291cmNlLW5hbWU+UHJvdGVjdGVkIEFyZWE8L3dlYi1yZXNvdXJjZS1uYW1lPgorICAgIDx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+CisgICAgPGh0dHAtbWV0aG9kPkRFTEVURTwvaHR0cC1tZXRob2Q+CisgICAgPGh0dHAtbWV0aG9kPkdFVDwvaHR0cC1tZXRob2Q+CisgICAgPGh0dHAtbWV0aG9kPlBPU1Q8L2h0dHAtbWV0aG9kPgorICAgIDxodHRwLW1ldGhvZD5QVVQ8L2h0dHAtbWV0aG9kPgogICAgIDwvd2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CiAKICAgICA8YXV0aC1jb25zdHJhaW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RocmVhZFBvb2xJZGxlVGltZW91dC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGhyZWFkUG9vbElkbGVUaW1lb3V0L1dlYlRlc3QuamF2YQppbmRleCBmZGRlMmVmLi5lMzA3MjkxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGhyZWFkUG9vbElkbGVUaW1lb3V0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGhyZWFkUG9vbElkbGVUaW1lb3V0L1dlYlRlc3QuamF2YQpAQCAtMjAsMzMgKzIwLDMzIEBACiBpbXBvcnQgY29tLnN1bi5hcHBzZXJ2LnRlc3QudXRpbC5yZXN1bHRzLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIsICJ0aHJlYWQtcG9vbC1pZGxlLXRpbWVvdXQiKTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiLCAidGhyZWFkLXBvb2wtaWRsZS10aW1lb3V0Iik7CiAKLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7Ci0JCXN0YXQuYWRkRGVzY3JpcHRpb24oIkhUVFAgdGhyZWFkIHRpbWVvdXQiKTsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkhUVFAgdGhyZWFkIHRpbWVvdXQiKTsKIAotCQlTdHJpbmcgaG9zdCA9IGFyZ3NbMF07Ci0JCVN0cmluZyBwb3J0UyA9IGFyZ3NbMV07Ci0JCVN0cmluZyBjb250ZXh0Um9vdCA9IGFyZ3NbMl07Ci0JCWJvb2xlYW4gbm9UaW1lb3V0ID0gYXJncy5sZW5ndGggPT0gNDsKKyAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOworICAgICAgICBTdHJpbmcgcG9ydFMgPSBhcmdzWzFdOworICAgICAgICBTdHJpbmcgY29udGV4dFJvb3QgPSBhcmdzWzJdOworICAgICAgICBib29sZWFuIG5vVGltZW91dCA9IGFyZ3MubGVuZ3RoID09IDQ7CiAKLQkJaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0Uyk7CisgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpOwogCi0JCWdvR2V0KGhvc3QsIHBvcnQsIGNvbnRleHRSb290ICsgIi9TZXJ2bGV0VGVzdCIsIG5vVGltZW91dCApOworICAgICAgICBnb0dldChob3N0LCBwb3J0LCBjb250ZXh0Um9vdCArICIvU2VydmxldFRlc3QiLCBub1RpbWVvdXQgKTsKIAotCQlzdGF0LnByaW50U3VtbWFyeSgid2ViLXRocmVhZC10aW1lb3V0Iik7Ci0JfQorICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2ViLXRocmVhZC10aW1lb3V0Iik7CisgICAgfQogCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBnb0dldChTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBjb250ZXh0UGF0aCwgYm9vbGVhbiBub1RpbWVvdXQpIHsKLQkJdHJ5IHsKLQkJCVVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFBhdGgpOwotCQkJdXJsLmdldENvbnRlbnQoKTsKLQkJCXN0YXQuYWRkU3RhdHVzKCJ3ZWItdGhyZWFkLXRpbWVvdXQiICsgKG5vVGltZW91dCA/ICItZGVidWciIDogIiIpLCBub1RpbWVvdXQgPyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIuUEFTUyA6IFNpbXBsZVJlcG9ydGVyQWRhcHRlci5GQUlMKTsKLQkJfSBjYXRjaCggSU9FeGNlcHRpb24gZXgpewotCQkJc3RhdC5hZGRTdGF0dXMoIndlYi10aHJlYWQtdGltZW91dCIsIG5vVGltZW91dCA/IFNpbXBsZVJlcG9ydGVyQWRhcHRlci5GQUlMIDogU2ltcGxlUmVwb3J0ZXJBZGFwdGVyLlBBU1MpOwotCQl9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotCQkJc3RhdC5hZGRTdGF0dXMoIndlYi10aHJlYWQtdGltZW91dCIsIFNpbXBsZVJlcG9ydGVyQWRhcHRlci5GQUlMKTsKLQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQorICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZ29HZXQoU3RyaW5nIGhvc3QsIGludCBwb3J0LCBTdHJpbmcgY29udGV4dFBhdGgsIGJvb2xlYW4gbm9UaW1lb3V0KSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRQYXRoKTsKKyAgICAgICAgICAgIHVybC5nZXRDb250ZW50KCk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXRocmVhZC10aW1lb3V0IiArIChub1RpbWVvdXQgPyAiLWRlYnVnIiA6ICIiKSwgbm9UaW1lb3V0ID8gU2ltcGxlUmVwb3J0ZXJBZGFwdGVyLlBBU1MgOiBTaW1wbGVSZXBvcnRlckFkYXB0ZXIuRkFJTCk7CisgICAgICAgIH0gY2F0Y2goIElPRXhjZXB0aW9uIGV4KXsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItdGhyZWFkLXRpbWVvdXQiLCBub1RpbWVvdXQgPyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIuRkFJTCA6IFNpbXBsZVJlcG9ydGVyQWRhcHRlci5QQVNTKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItdGhyZWFkLXRpbWVvdXQiLCBTaW1wbGVSZXBvcnRlckFkYXB0ZXIuRkFJTCk7CisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90aHJlYWRQb29sSWRsZVRpbWVvdXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RocmVhZFBvb2xJZGxlVGltZW91dC9idWlsZC54bWwKaW5kZXggM2RiYzA3Ny4uNzcxYTRlZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RocmVhZFBvb2xJZGxlVGltZW91dC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RocmVhZFBvb2xJZGxlVGltZW91dC9idWlsZC54bWwKQEAgLTc1LDcgKzc1LDcgQEAKIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC0xMTgsNyArMTE4LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic3RhcnREb21haW5EZWJ1ZyIgZGVwZW5kcz0ic3RhcnREb21haW5EZWJ1Z1VuaXgsIHN0YXJ0RG9tYWluRGVidWdXaW5kb3dzIi8+CiAKICAgICA8dGFyZ2V0IG5hbWU9InN0YXJ0RG9tYWluRGVidWdVbml4IiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgaWY9ImlzVW5peCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGhyZWFkUG9vbElkbGVUaW1lb3V0L3NyYy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGhyZWFkUG9vbElkbGVUaW1lb3V0L3NyYy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggZTg1NDE0OS4uMTU3YzRiNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RocmVhZFBvb2xJZGxlVGltZW91dC9zcmMvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90aHJlYWRQb29sSWRsZVRpbWVvdXQvc3JjL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMjQsMTcgKzI0LDE3IEBACiAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAotCXB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwotCX0KKyAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKyAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQlUaHJlYWQuc2xlZXAoMTAwMDApOworICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFRocmVhZC5zbGVlcCgxMDAwMCk7CiAgICAgICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9wbGFpbiIpOwotCQkJcmVzcG9uc2UuZ2V0V3JpdGVyKCkucHJpbnRsbigiSGVyZSdzIHlvdXIgY29udGVudC4iKTsKLQkJfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgewotCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKGllKTsKLQkJfQotCX0KKyAgICAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLnByaW50bG4oIkhlcmUncyB5b3VyIGNvbnRlbnQuIik7CisgICAgICAgIH0gY2F0Y2goSW50ZXJydXB0ZWRFeGNlcHRpb24gaWUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbihpZSk7CisgICAgICAgIH0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdHJhY2VFbmFibGVkL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90cmFjZUVuYWJsZWQvV2ViVGVzdC5qYXZhCmluZGV4IDRjMDQ3NGIuLjA5Y2ZkNmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90cmFjZUVuYWJsZWQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90cmFjZUVuYWJsZWQvV2ViVGVzdC5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKQEAgLTQxLDcgKzQxLDcgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVHJhY2Ugbm90IGFsbG93ZWQgdGVzdCIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIi9TZXJ2bGV0VGVzdCIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnZva2luZyB1cmw6ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdHJhY2VFbmFibGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdHJhY2VFbmFibGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYWYxNzNmZi4uMGRkZWQ1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RyYWNlRW5hYmxlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90cmFjZUVuYWJsZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXRyYWNlRW5hYmxlZCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdHJhY2VFbmFibGVkIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi10cmFjZUVuYWJsZWQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90cmFjZUVuYWJsZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RyYWNlRW5hYmxlZC9idWlsZC54bWwKaW5kZXggMDQ4MTE5Ny4uZjM0MWFkNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RyYWNlRW5hYmxlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RyYWNlRW5hYmxlZC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTYwLDE2ICs2MCwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxqYXZhYwogICAgICAgICAgICAgc3JjZGlyPSIuIgpAQCAtOTQsMTAgKzk0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RyYWNlRW5hYmxlZC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdHJhY2VFbmFibGVkL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAxOTZhNjA0Li44MWU2MmUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdHJhY2VFbmFibGVkL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdHJhY2VFbmFibGVkL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMTIgKzIyLDEyIEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90cmFpbGVySGVhZGVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90cmFpbGVySGVhZGVyL1dlYlRlc3QuamF2YQppbmRleCAwM2RjYzRlLi4zYTYyNThiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdHJhaWxlckhlYWRlci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RyYWlsZXJIZWFkZXIvV2ViVGVzdC5qYXZhCkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgSVQgR0xBU1NGSVNILTE2NzY4Iik7CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgICAgICAvLyB0cmFpbGluZyBoZWFkZXJzIHNpemUgbGltaXQKICAgICAgICAgICAgIC8vIG5lZWQgdG8gc2V0IG1heFRyYWlsZXJTaXplID0gMTAKICAgICAgICAgICAgIFN0cmluZyBkdW1teSA9ICIwMTIzNDU2Nzg5MCI7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcmVxID0gbmV3IFN0cmluZ1tdIHsKICAgICAgICAgICAgICAgICAiUE9TVCAvIiArIHdlYlRlc3QuY29udGV4dFJvb3QgKyAiIEhUVFAvMS4xIiArIENSTEYgKwogICAgICAgICAgICAgICAgICJIb3N0OiBhbnkiICsgQ1JMRiArCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdHJhaWxlckhlYWRlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RyYWlsZXJIZWFkZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBlNmYxOGUyLi41NzliZTE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdHJhaWxlckhlYWRlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90cmFpbGVySGVhZGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdHJhaWxlci1oZWFkZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90cmFpbGVySGVhZGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90cmFpbGVySGVhZGVyL2J1aWxkLnhtbAppbmRleCAwNWM3MWQ4Li44MmFlMDA1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdHJhaWxlckhlYWRlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RyYWlsZXJIZWFkZXIvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfSIgaW5jbHVkZXM9IldlYlRlc3QqLmNsYXNzIi8+CiAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NSwyMyArNDUsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MywxMCArNzMsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdHJhaWxlckhlYWRlci9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdHJhaWxlckhlYWRlci9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZDBhZjFiMi4uMDA5M2MwOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RyYWlsZXJIZWFkZXIvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90cmFpbGVySGVhZGVyL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsNyArMjIsNyBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIzLjAiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPkVjaG9IZWFkZXJTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPkVjaG9IZWFkZXJTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VucHJvdGVjdGVkQ2xhc3Nlcy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdW5wcm90ZWN0ZWRDbGFzc2VzL1dlYlRlc3QuamF2YQppbmRleCBiMGIxNjNlLi44YTBhNWQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdW5wcm90ZWN0ZWRDbGFzc2VzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdW5wcm90ZWN0ZWRDbGFzc2VzL1dlYlRlc3QuamF2YQpAQCAtMjEsMTAgKzIxLDEwIEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDI7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApAQCAtMzIsNyArMzIsNyBAQAogCiAgICAgICAgIC8vIFRoZSBzdGF0IHJlcG9ydGVyIHdyaXRlcyBvdXQgdGhlIHRlc3QgaW5mbyBhbmQgcmVzdWx0cwogICAgICAgICAvLyBpbnRvIHRoZSB0b3AtbGV2ZWwgcXVpY2tsb29rIGRpcmVjdG9yeSBkdXJpbmcgYSBydW4uCi0gICAgICAKKwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJQYWNrYWdlIHByb3RlY3Rpb24gdW5pdCB0ZXN0LiIpOwogCiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKQEAgLTQxLDEzICs0MSwxMyBAQAogCiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7CiAgICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZ29HZXQoaG9zdCwgcG9ydCwgY29udGV4dFJvb3QgKyAiL1NlcnZsZXRUZXN0IiApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChjb3VudCAhPSBFWFBFQ1RFRF9DT1VOVCl7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlRlc3QgVU5QUkVESUNURUQtRkFJTFVSRSIsIHN0YXQuRkFJTCk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiVGVzdCBVTlBSRURJQ1RFRC1GQUlMVVJFIiwgc3RhdC5GQUlMKTsKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjBcbiIpKTsKICAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMFxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gcy5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKQEAgLTc2LDIwICs3NiwyMCBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lTnVtICsgIjogICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0YXR1cyA9IGxpbmUuc3Vic3RyaW5nKGluZGV4KzIpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmVxdWFsc0lnbm9yZUNhc2UoIlBBU1MiKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXVucHJvdGVjdGVkQ2xhc3M6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItdW5wcm90ZWN0ZWRDbGFzczogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LkZBSUwpOyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXVucHJvdGVjdGVkQ2xhc3M6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGxpbmVOdW0rKzsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgIH0KICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi91bnByb3RlY3RlZENsYXNzZXMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi91bnByb3RlY3RlZENsYXNzZXMvYnVpbGQucHJvcGVydGllcwppbmRleCBjNmFjY2JlLi5mZmEwZDBkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdW5wcm90ZWN0ZWRDbGFzc2VzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VucHJvdGVjdGVkQ2xhc3Nlcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdW5wcm90ZWN0ZWRDbGFzcyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdW5wcm90ZWN0ZWRDbGFzcyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItdW5wcm90ZWN0ZWRDbGFzcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VucHJvdGVjdGVkQ2xhc3Nlcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdW5wcm90ZWN0ZWRDbGFzc2VzL2J1aWxkLnhtbAppbmRleCBhOTA4OTE4Li5lMmZjMjU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdW5wcm90ZWN0ZWRDbGFzc2VzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdW5wcm90ZWN0ZWRDbGFzc2VzL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01MywxNCArNTMsMTQgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzIsMTAgKzcyLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VucHJvdGVjdGVkQ2xhc3Nlcy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdW5wcm90ZWN0ZWRDbGFzc2VzL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA3ZWI1ZWMwLi40MmY0OTI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdW5wcm90ZWN0ZWRDbGFzc2VzL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdW5wcm90ZWN0ZWRDbGFzc2VzL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjMsNyArMjMsNyBAQAogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgogCi0gICAgPGxpc3RlbmVyPiAgICAgCisgICAgPGxpc3RlbmVyPgogICAgICAgICA8bGlzdGVuZXItY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvbGlzdGVuZXItY2xhc3M+CiAgICAgPC9saXN0ZW5lcj4KIApAQCAtMzEsMTQgKzMxLDE0IEBACiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KICAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotICAgIAorCiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VucHJvdGVjdGVkQ2xhc3Nlcy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdW5wcm90ZWN0ZWRDbGFzc2VzL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCAyZTgyN2I1Li5mMTIyNmNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdW5wcm90ZWN0ZWRDbGFzc2VzL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdW5wcm90ZWN0ZWRDbGFzc2VzL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMzUsNyArMzUsNyBAQAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgc3RhdHVzID0gIkVYUElSRUQ6RkFJTCI7CiAKLSAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwogCiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VzZUJ1bmRsZWRKc2ZXaXRoVGFnQ29tcGlsYXRpb24vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VzZUJ1bmRsZWRKc2ZXaXRoVGFnQ29tcGlsYXRpb24vV2ViVGVzdC5qYXZhCmluZGV4IDI4ZjcyOGYuLjQ5MGY2MDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi91c2VCdW5kbGVkSnNmV2l0aFRhZ0NvbXBpbGF0aW9uL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdXNlQnVuZGxlZEpzZldpdGhUYWdDb21waWxhdGlvbi9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgSVQgNzI0NiIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ5LDggKzQ5LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VzZUJ1bmRsZWRKc2ZXaXRoVGFnQ29tcGlsYXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi91c2VCdW5kbGVkSnNmV2l0aFRhZ0NvbXBpbGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjVlMzhhYS4uMmM4M2JiMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VzZUJ1bmRsZWRKc2ZXaXRoVGFnQ29tcGlsYXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdXNlQnVuZGxlZEpzZldpdGhUYWdDb21waWxhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXVzZS1idW5kbGVkLWpzZi13aXRoLXRhZy1jb21waWxhdGlvbm4iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi91c2VCdW5kbGVkSnNmV2l0aFRhZ0NvbXBpbGF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi91c2VCdW5kbGVkSnNmV2l0aFRhZ0NvbXBpbGF0aW9uL2J1aWxkLnhtbAppbmRleCBkYTI1YjFhLi44OTY2NGQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdXNlQnVuZGxlZEpzZldpdGhUYWdDb21waWxhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VzZUJ1bmRsZWRKc2ZXaXRoVGFnQ29tcGlsYXRpb24vYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgIGRlc3Q9ImpzZi1jYXJkZW1vLndhciIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLW5hbWUiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTYyLDEwICs2MiwxMCBAQAogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItbmFtZSIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdjNIdHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92M0h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvV2ViVGVzdC5qYXZhCmluZGV4IGQ0ZWYxMzUuLmYxMWJiODggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92M0h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92M0h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvV2ViVGVzdC5qYXZhCkBAIC0yMSwxNiArMjEsMTYgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMTsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogICAgIHByaXZhdGUgc3RhdGljIFVSTENvbm5lY3Rpb24gY29ubiA9IG51bGw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMIHVybDsKICAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RPdXRwdXRTdHJlYW0gb2JqZWN0V3JpdGVyID0gbnVsbDsKLSAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOyAgCisgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIApAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gdXJsQ29ubmVjdGlvbiA9IChIdHRwVVJMQ29ubmVjdGlvbiljb25uOwogICAgICAgICAgICAgICAgdXJsQ29ubmVjdGlvbi5zZXREb091dHB1dCh0cnVlKTsKICAgICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGU9ICB1cmxDb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBjb2RlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiAyMDAiKTsgCisgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDIwMCIpOwogICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSA9PSAyMDApewogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygidjNIdHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdjNIdHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL1dlYlRlc3QyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdjNIdHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL1dlYlRlc3QyLmphdmEKaW5kZXggYTMyZDYyZS4uN2U5ODdkZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3YzSHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9XZWJUZXN0Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92M0h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvV2ViVGVzdDIuamF2YQpAQCAtMjEsMTYgKzIxLDE2IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdDIgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAxOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICBwcml2YXRlIHN0YXRpYyBVUkwgdXJsOwogICAgIHByaXZhdGUgc3RhdGljIE9iamVjdE91dHB1dFN0cmVhbSBvYmplY3RXcml0ZXIgPSBudWxsOwotICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7ICAKKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiB1cmxDb25uZWN0aW9uID0gKEh0dHBVUkxDb25uZWN0aW9uKWNvbm47CiAgICAgICAgICAgICAgICB1cmxDb25uZWN0aW9uLnNldERvT3V0cHV0KHRydWUpOwogICAgICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZT0gIHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDIwMCIpOyAKKyAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogMjAwIik7CiAgICAgICAgICAgICAgICBpZiAodXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKSA9PSAyMDApewogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygidjNIdHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnLWFmdGVyUmVjb25mIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdjNIdHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdjNIdHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzE1YzAyMi4uMTE0MWU4MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3YzSHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92M0h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXYzSHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdjNIdHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92M0h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3YzSHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9idWlsZC54bWwKaW5kZXggN2RmOTVmNy4uZTk3Y2NjZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3YzSHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3YzSHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9idWlsZC54bWwKQEAgLTUwLDcgKzUwLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTU4LDEwICs1OCwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgPGphdmFjCkBAIC02OSwxMCArNjksMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSIqLmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC04MCw3ICs4MCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4tYWdhaW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QyIj4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTEwNyw3ICsxMDcsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3YzSHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdjNIdHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBmZGIwYzE3Li5jMWQ0YmI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdjNIdHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdjNIdHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMTIgKzIyLDEyIEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92M0h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3YzSHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggNzgxYmNjZi4uYzA3MzI3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3YzSHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3YzSHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CkBAIC0zNCwxMiArMzQsMTIgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAJCisKICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6OlBBU1MiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVHbGFzc0Zpc2hTdHlsZUJhY2t3YXJkQ29tcGF0aWJsZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVHbGFzc0Zpc2hTdHlsZUJhY2t3YXJkQ29tcGF0aWJsZS9XZWJUZXN0LmphdmEKaW5kZXggODViYWJiZi4uYjBmOThmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlR2xhc3NGaXNoU3R5bGVCYWNrd2FyZENvbXBhdGlibGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZUdsYXNzRmlzaFN0eWxlQmFja3dhcmRDb21wYXRpYmxlL1dlYlRlc3QuamF2YQpAQCAtMjQsMTEgKzI0LDExIEBACiAgKiBwcmlvciB0byBWMyksIHdoaWNoIGhhcyBiZWVuIHJlbmFtZWQgdG8KICAqIG9yZy5nbGFzc2Zpc2gud2ViLnZhbHZlLkdsYXNzRmlzaFZhbHZlIGluIFYzLCBjb250aW51ZSB0byB3b3JrIGluIFYzCiAgKiAoaW4gYSBiaW5hcnktY29tcGF0aWJsZSB3YXkpLgotICogCisgKgogICogVGhpcyB0ZXN0IGRlcGxveXMgYSB3ZWJhcHAgdGhhdCBzcGVjaWZpZXMgYSBHbGFzc0Zpc2gtc3R5bGUgdmFsdmUKICAqIChjb21waWxlZCBhZ2FpbnN0IHRoZSAib2xkIiBWYWx2ZSBpbnRlcmZhY2UpIGluIGl0cyBzdW4td2ViLnhtbC4KICAqIFRoZSB2YWx2ZSBhZGRzIGFuIGF0dHJpYnV0ZSB0byB0aGUgcmVxdWVzdC4KLSAqIAorICoKICAqIFdoZW4gdGhlIHRlc3QgYWNjZXNzZXMgdGhlIHdlYmFwcCdzIHNlcnZsZXQsIHRoZSBzZXJ2bGV0IGNoZWNrcyBmb3IgdGhlCiAgKiBwcmVzZW5jZSBvZiB0aGlzIGF0dHJpYnV0ZSBpbiB0aGUgcmVxdWVzdCwgYW5kIHdpbGwgY2F1c2UgdGhlIHRlc3QgdG8gZmFpbAogICogaWYgdGhlIGF0dHJpYnV0ZSBpcyBtaXNzaW5nLgpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGVuc3VyaW5nIGJpbmFyeSBjb21wYXRpYmlsaXR5ICIgKwpAQCAtNjcsMTEgKzY3LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL3Rlc3QiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICAgICAgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7CiAgICAgICAgICAgICBpZiAoIUVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUpOwogICAgICAgICAgICAgfQpAQCAtMTEwLDYgKzExMCw2IEBACiAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKICAgICAgICAgICAgICAgICAvLyBpZ25vcmUKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZUdsYXNzRmlzaFN0eWxlQmFja3dhcmRDb21wYXRpYmxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVHbGFzc0Zpc2hTdHlsZUJhY2t3YXJkQ29tcGF0aWJsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQ3OWI1OGUuLmFmMTJiNGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZUdsYXNzRmlzaFN0eWxlQmFja3dhcmRDb21wYXRpYmxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlR2xhc3NGaXNoU3R5bGVCYWNrd2FyZENvbXBhdGlibGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS12YWx2ZS1nbGFzc0Zpc2gtc3R5bGUtYmFja3dhcmQtY29tcGF0aWJsZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlR2xhc3NGaXNoU3R5bGVCYWNrd2FyZENvbXBhdGlibGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlR2xhc3NGaXNoU3R5bGVCYWNrd2FyZENvbXBhdGlibGUvYnVpbGQueG1sCmluZGV4IDAwZmRhZDMuLmMzOTc3NmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZUdsYXNzRmlzaFN0eWxlQmFja3dhcmRDb21wYXRpYmxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVHbGFzc0Zpc2hTdHlsZUJhY2t3YXJkQ29tcGF0aWJsZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDEwICs3MCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZVRvbWNhdFN0eWxlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZVRvbWNhdFN0eWxlL1dlYlRlc3QuamF2YQppbmRleCA2ZDZkOGNhLi5jZGMzNDZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVUb21jYXRTdHlsZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlVG9tY2F0U3R5bGUvV2ViVGVzdC5qYXZhCkBAIC0yMCwxMiArMjAsMTIgQEAKIAogLyoKICAqIFVuaXQgdGVzdCBmb3IgdGVzdGluZyBzdXBwb3J0IGZvciBUb21jYXQtc3R5bGUgdmFsdmVzLgotICogCisgKgogICogVGhpcyB0ZXN0IGRlcGxveXMgYSB3ZWJhcHAgdGhhdCBzcGVjaWZpZXMgMyB2YWx2ZXMgaW4gaXRzIHN1bi13ZWIueG1sOgogICogMiBUb21jYXQtc3R5bGUgdmFsdmVzLCBhbmQgMSBHbGFzc0Zpc2gtc3R5bGUgdmFsdmUuIFRoZSBHbGFzc0Zpc2gtc3R5bGUKICAqIHZhbHZlIGlzIGFkZGVkIGluIGJldHdlZW4gdGhlIHR3byBUb21jYXQtc3R5bGUgdmFsdmVzLCBjYXVzaW5nIGl0IHRvIGJlCiAgKiB3cmFwcGVkIChieSB0aGUgY29udGFpbmVyKSBpbnNpZGUgYSBUb21jYXRWYWx2ZUFkYXB0ZXIuCi0gKiAKKyAqCiAgKiBFYWNoIG9mIHRoZSB2YWx2ZXMgYWRkcyBhbiBhdHRyaWJ1dGUgdG8gdGhlIHJlcXVlc3QuCiAgKgogICogV2hlbiB0aGUgdGVzdCBhY2Nlc3NlcyB0aGUgd2ViYXBwJ3Mgc2VydmxldCwgaXQgY2hlY2tzIGZvciB0aGUgcHJlc2VuY2UKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBUb21jYXQtc3R5bGUgdmFsdmVzIik7CkBAIC02NCwxMSArNjQsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvdGVzdCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC04OCw3ICs4OCw3IEBACiAgICAgICAgICAgICBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKICAgICAgICAgICAgIGlmICghRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVUb21jYXRTdHlsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlVG9tY2F0U3R5bGUvYnVpbGQucHJvcGVydGllcwppbmRleCAzZDQ5YWRjLi5jMjYxOTI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVUb21jYXRTdHlsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZVRvbWNhdFN0eWxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdmFsdmUtdG9tY2F0LXN0eWxlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVUb21jYXRTdHlsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVUb21jYXRTdHlsZS9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlVG9tY2F0U3R5bGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZVRvbWNhdFN0eWxlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZVRvbWNhdFN0eWxlL2xpYi92YWx2ZXMvVG9tY2F0VmFsdmVCYXNlXzEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZVRvbWNhdFN0eWxlL2xpYi92YWx2ZXMvVG9tY2F0VmFsdmVCYXNlXzEuamF2YQppbmRleCBiOWFhZjY0Li45YTBlZjMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVUb21jYXRTdHlsZS9saWIvdmFsdmVzL1RvbWNhdFZhbHZlQmFzZV8xLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlVG9tY2F0U3R5bGUvbGliL3ZhbHZlcy9Ub21jYXRWYWx2ZUJhc2VfMS5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBwdWJsaWMgY2xhc3MgVG9tY2F0VmFsdmVCYXNlXzEgZXh0ZW5kcyBWYWx2ZUJhc2UgewogCiAgICAgcHVibGljIFN0cmluZyBnZXRJbmZvKCkgewotCXJldHVybiBnZXRDbGFzcygpLmdldE5hbWUoKTsKKyAgICByZXR1cm4gZ2V0Q2xhc3MoKS5nZXROYW1lKCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW52b2tlKFJlcXVlc3QgcmVxdWVzdCwgUmVzcG9uc2UgcmVzcG9uc2UpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVUb21jYXRTdHlsZS9saWIvdmFsdmVzL1RvbWNhdFZhbHZlQmFzZV8yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVUb21jYXRTdHlsZS9saWIvdmFsdmVzL1RvbWNhdFZhbHZlQmFzZV8yLmphdmEKaW5kZXggZWYyZGY2ZS4uMWI3MzViNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlVG9tY2F0U3R5bGUvbGliL3ZhbHZlcy9Ub21jYXRWYWx2ZUJhc2VfMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZVRvbWNhdFN0eWxlL2xpYi92YWx2ZXMvVG9tY2F0VmFsdmVCYXNlXzIuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogcHVibGljIGNsYXNzIFRvbWNhdFZhbHZlQmFzZV8yIGV4dGVuZHMgVmFsdmVCYXNlIHsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0SW5mbygpIHsKLQlyZXR1cm4gZ2V0Q2xhc3MoKS5nZXROYW1lKCk7CisgICAgcmV0dXJuIGdldENsYXNzKCkuZ2V0TmFtZSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGludm9rZShSZXF1ZXN0IHJlcXVlc3QsIFJlc3BvbnNlIHJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlV2l0aFBhcmFtcy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVXaXRoUGFyYW1zL1dlYlRlc3QuamF2YQppbmRleCA4Y2ZlODQ5Li44YzZlY2FlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVXaXRoUGFyYW1zL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVXaXRoUGFyYW1zL1dlYlRlc3QuamF2YQpAQCAtMjMsMTIgKzIzLDEyIEBACiAgKgogICogIGh0dHBzOi8vZ2xhc3NmaXNoLmRldi5qYXZhLm5ldC9pc3N1ZXMvc2hvd19idWcuY2dpP2lkPTcxNzcKICAqICAoIkFkZCB2YWx2ZSBjb25maWd1cmF0aW9uIHN1cHBvcnQgdG8gc3VuLXdlYi54bWwiKQotICogCisgKgogICogVGhpcyB0ZXN0IGRlcGxveXMgYSB3ZWJhcHAgdGhhdCBzcGVjaWZpZXMgMyB2YWx2ZXMgaW4gaXRzIHN1bi13ZWIueG1sOgogICogMiBUb21jYXQtc3R5bGUgdmFsdmVzLCBhbmQgMSBHbGFzc0Zpc2gtc3R5bGUgdmFsdmUuIFRoZSBHbGFzc0Zpc2gtc3R5bGUKICAqIHZhbHZlIGlzIGFkZGVkIGluIGJldHdlZW4gdGhlIHR3byBUb21jYXQtc3R5bGUgdmFsdmVzLCBjYXVzaW5nIGl0IHRvIGJlCiAgKiB3cmFwcGVkIChieSB0aGUgY29udGFpbmVyKSBpbnNpZGUgYSBUb21jYXRWYWx2ZUFkYXB0ZXIuCi0gKiAKKyAqCiAgKiBFYWNoIG9mIHRoZSB2YWx2ZXMgYWRkcyBhbiBhdHRyaWJ1dGUgdG8gdGhlIHJlcXVlc3QuCiAgKgogICogV2hlbiB0aGUgdGVzdCBhY2Nlc3NlcyB0aGUgd2ViYXBwJ3Mgc2VydmxldCwgaXQgY2hlY2tzIGZvciB0aGUgcHJlc2VuY2UKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBJVCA3MTc3Iik7CkBAIC02NywxMSArNjcsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvdGVzdCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC05MSwxMCArOTEsMTAgQEAKICAgICAgICAgICAgIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpOwogICAgICAgICAgICAgaWYgKCFFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lKTsKLSAgICAgICAgICAgIH0gICAgCisgICAgICAgICAgICB9CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmIChpcyAhPSBudWxsKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVXaXRoUGFyYW1zL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVXaXRoUGFyYW1zL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggN2MyYzkxOC4uNTI1MDhkOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlV2l0aFBhcmFtcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZVdpdGhQYXJhbXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS12YWx2ZS13aXRoLXByb3BlcnRpZXMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZVdpdGhQYXJhbXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlV2l0aFBhcmFtcy9idWlsZC54bWwKaW5kZXggMDBmZGFkMy4uYzM5Nzc2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlV2l0aFBhcmFtcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlV2l0aFBhcmFtcy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDEwICs3MCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZVdpdGhQYXJhbXMvbGliL3ZhbHZlcy9UZXN0VmFsdmUyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVXaXRoUGFyYW1zL2xpYi92YWx2ZXMvVGVzdFZhbHZlMi5qYXZhCmluZGV4IGVmNDhiNmIuLjg5MmFiOWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZVdpdGhQYXJhbXMvbGliL3ZhbHZlcy9UZXN0VmFsdmUyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlV2l0aFBhcmFtcy9saWIvdmFsdmVzL1Rlc3RWYWx2ZTIuamF2YQpAQCAtMzQsMTAgKzM0LDEwIEBACiAgICAgICAgIGlmICh0ZXN0UHJvcGVydHkgPT0gbnVsbCkgewogICAgICAgICAgICAgcmVxdWVzdC5nZXRSZXF1ZXN0KCkuc2V0QXR0cmlidXRlKCJ2YWx2ZTYiLCAibnVsbF92YWx1ZSIpOwogICAgICAgICB9Ci0JZWxzZSBpZiAoIiIuZXF1YWxzKHRlc3RQcm9wZXJ0eSkpIHsKKyAgICBlbHNlIGlmICgiIi5lcXVhbHModGVzdFByb3BlcnR5KSkgewogICAgICAgICAgICAgcmVxdWVzdC5nZXRSZXF1ZXN0KCkuc2V0QXR0cmlidXRlKCJ2YWx2ZTUiLCAiZW1wdHlfdmFsdWUiKTsKICAgICAgICAgfQotCWVsc2UgeworICAgIGVsc2UgewogICAgICAgICAgICAgcmVxdWVzdC5nZXRSZXF1ZXN0KCkuc2V0QXR0cmlidXRlKCJ2YWx2ZTQiLCB0ZXN0UHJvcGVydHkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBHbGFzc0Zpc2hWYWx2ZS5JTlZPS0VfTkVYVDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3QvV2ViVGVzdC5qYXZhCmluZGV4IDFkMzc2YWMuLjc4NTllZGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290L1dlYlRlc3QuamF2YQpAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICBob3N0ID0gYXJnc1swXTsKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGFsdGVybmF0ZSBkb2Nyb290IHN1cHBvcnQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC04Niw4ICs4Niw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgiL2RvbWFpbi54bWwiLCAiPGRvbWFpbiAiKTsKICAgICAgICAgICAgIGludm9rZSgiL3NlcnZlci5wb2xpY3kiLCAiZ3JhbnQgY29kZUJhc2UiKTsKICAgICAgICAgICAgIGludm9rZSgiL2NvbmZpZy9sb2dpbi5jb25mIiwgImZpbGVSZWFsbSIpOwpAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgICogaW4gb3JkZXIgZm9yIHRoZSB0ZXN0IHRvIHBhc3MKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgaW52b2tlKFN0cmluZyB1cmksIFN0cmluZyBleHBlY3RlZCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIHVyaSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3QvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGY4OGEyZTkuLjA3YzMyMWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXZpcnR1YWwtc2VydmVyLWFsdGVybmF0ZS1kb2Nyb290Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290L2J1aWxkLnhtbAppbmRleCA3ODc4YzIwLi45NTBkYjM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdC9idWlsZC54bWwKQEAgLTM2LDE0ICszNiwxNCBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSIvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgpAQCAtNTQsMTIgKzU0LDEyIEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfS5odHRwLXNlcnZpY2UudmlydHVhbC1zZXJ2ZXIuc2VydmVyLnByb3BlcnR5LmFsdGVybmF0ZWRvY3Jvb3RfMj0mcXVvdDtmcm9tPSoucG9saWN5IGRpcj0ke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZyZxdW90OyIvPgotICAgICAgICA8L2FudGNhbGw+IAorICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0uaHR0cC1zZXJ2aWNlLnZpcnR1YWwtc2VydmVyLnNlcnZlci5wcm9wZXJ0eS5hbHRlcm5hdGVkb2Nyb290XzM9JnF1b3Q7ZnJvbT0vY29uZmlnLyogZGlyPSR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0mcXVvdDsiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdER5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3REeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhCmluZGV4IGJhZjhmODAuLjE5Mzc0YzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdER5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290RHluYW1pY1JlY29uZmlnL1dlYlRlc3QuamF2YQpAQCAtODEsNyArODEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBhbHRlcm5hdGUgZG9jcm9vdCBzdXBwb3J0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtODksOCArODksOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoIi9kb21haW4ueG1sIiwgIjxkb21haW4gIik7CiAgICAgICAgICAgICBpbnZva2UoIi9zZXJ2ZXIucG9saWN5IiwgImdyYW50IGNvZGVCYXNlIik7CiAgICAgICAgICAgICBpbnZva2UoIi9jb25maWcvbG9naW4uY29uZiIsICJmaWxlUmVhbG0iKTsKQEAgLTEwNyw3ICsxMDcsNyBAQAogICAgICAqIGluIG9yZGVyIGZvciB0aGUgdGVzdCB0byBwYXNzCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZShTdHJpbmcgdXJpLCBTdHJpbmcgZXhwZWN0ZWQpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyB1cmkpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290RHluYW1pY1JlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3REeW5hbWljUmVjb25maWcvYnVpbGQucHJvcGVydGllcwppbmRleCA4ZDQ2NmI2Li5iMDFmYTY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3REeW5hbWljUmVjb25maWcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3REeW5hbWljUmVjb25maWcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS12aXJ0dWFsLXNlcnZlci1hbHRlcm5hdGUtZG9jcm9vdC1keW5hbWljLXJlY29uZmlnIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3REeW5hbWljUmVjb25maWcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290RHluYW1pY1JlY29uZmlnL2J1aWxkLnhtbAppbmRleCAyODBlNzA1Li42NDVlYjE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3REeW5hbWljUmVjb25maWcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdER5bmFtaWNSZWNvbmZpZy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE2ICs0NCwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgpAQCAtNjQsMTIgKzY0LDEyIEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfS5odHRwLXNlcnZpY2UudmlydHVhbC1zZXJ2ZXIuc2VydmVyLnByb3BlcnR5LmFsdGVybmF0ZWRvY3Jvb3RfMj0mcXVvdDtmcm9tPSoucG9saWN5IGRpcj0ke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZyZxdW90OyIvPgotICAgICAgICA8L2FudGNhbGw+IAorICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0uaHR0cC1zZXJ2aWNlLnZpcnR1YWwtc2VydmVyLnNlcnZlci5wcm9wZXJ0eS5hbHRlcm5hdGVkb2Nyb290XzM9JnF1b3Q7ZnJvbT0vY29uZmlnLyogZGlyPSR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0mcXVvdDsiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KQEAgLTgxLDcgKzgxLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtOTMsMTAgKzkzLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdFJlc3RhcnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290UmVzdGFydC9XZWJUZXN0LmphdmEKaW5kZXggMThiZmNlZi4uM2E2MzVmNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290UmVzdGFydC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290UmVzdGFydC9XZWJUZXN0LmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIC8qKgotICogVW5pdCB0ZXN0IGZvciBpc3N1ZSAxNjI1MiAKKyAqIFVuaXQgdGVzdCBmb3IgaXNzdWUgMTYyNTIKICAqCiAgKiBVbml0IHRlc3QgZm9yIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGFsdGVybmF0ZSBkb2Nyb290IHN1cHBvcnQuCiAgKgpAQCAtNzcsNyArNzcsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIGhvc3Q7CiAgICAgcHJpdmF0ZSBTdHJpbmcgcG9ydDsKICAgICBwcml2YXRlIFN0cmluZyBjb250ZXh0Um9vdDsKLSAgICBwcml2YXRlIFN0cmluZyBleHBlY3RlZFJlc3BvbnNlQ29kZTsgCisgICAgcHJpdmF0ZSBTdHJpbmcgZXhwZWN0ZWRSZXNwb25zZUNvZGU7CiAgICAgcHJpdmF0ZSBib29sZWFuIHJlc3VsdCA9IHRydWU7CiAKICAgICBwdWJsaWMgV2ViVGVzdChTdHJpbmdbXSBhcmdzKSB7CkBAIC04Niw3ICs4Niw3IEBACiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICAgICAgZXhwZWN0ZWRSZXNwb25zZUNvZGUgPSBhcmdzWzNdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBhbHRlcm5hdGUgZG9jcm9vdCBzdXBwb3J0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtOTQsOCArOTQsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoIi9kb21haW4ueG1sIiwgIjxkb21haW4gIik7CiAgICAgICAgICAgICBpbnZva2UoIi9zZXJ2ZXIucG9saWN5IiwgImdyYW50IGNvZGVCYXNlIik7CiAgICAgICAgICAgICBpbnZva2UoIi9jb25maWcvbG9naW4uY29uZiIsICJmaWxlUmVhbG0iKTsKQEAgLTExMyw3ICsxMTMsNyBAQAogICAgICAqIGluIG9yZGVyIGZvciB0aGUgdGVzdCB0byBwYXNzCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZShTdHJpbmcgdXJpLCBTdHJpbmcgZXhwZWN0ZWQpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICB0cnkgewogCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIHVyaSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3RSZXN0YXJ0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3RSZXN0YXJ0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGQ0NjZiNi4uYjAxZmE2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290UmVzdGFydC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdFJlc3RhcnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS12aXJ0dWFsLXNlcnZlci1hbHRlcm5hdGUtZG9jcm9vdC1keW5hbWljLXJlY29uZmlnIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3RSZXN0YXJ0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdFJlc3RhcnQvYnVpbGQueG1sCmluZGV4IDE2ZDZmMWUuLmEyOGY4ZDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdFJlc3RhcnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdFJlc3RhcnQvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxNiArNDQsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTY0LDEyICs2NCwxMiBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0uaHR0cC1zZXJ2aWNlLnZpcnR1YWwtc2VydmVyLnNlcnZlci5wcm9wZXJ0eS5hbHRlcm5hdGVkb2Nyb290XzI9JnF1b3Q7ZnJvbT0qLnBvbGljeSBkaXI9JHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcmcXVvdDsiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Lmh0dHAtc2VydmljZS52aXJ0dWFsLXNlcnZlci5zZXJ2ZXIucHJvcGVydHkuYWx0ZXJuYXRlZG9jcm9vdF8zPSZxdW90O2Zyb209L2NvbmZpZy8qIGRpcj0ke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59JnF1b3Q7Ii8+Ci0gICAgICAgIDwvYW50Y2FsbD4gCisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CkBAIC05Niw3ICs5Niw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJyZXN0YXJ0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXIiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC0xNDMsNyArMTQzLDcgQEAKICAgICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgICAgICA8YXJnIGxpbmU9InRlc3QiLz4KICAgICAgICAgPC9leGVjPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290V2VsY29tZVBhZ2VSZWRpcmVjdC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3RXZWxjb21lUGFnZVJlZGlyZWN0L1dlYlRlc3QuamF2YQppbmRleCBlMGI0NDk3Li45OTU4OTRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3RXZWxjb21lUGFnZVJlZGlyZWN0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3RXZWxjb21lUGFnZVJlZGlyZWN0L1dlYlRlc3QuamF2YQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBob3N0ID0gYXJnc1swXTsKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGFsdGVybmF0ZSBkb2Nyb290IHN1cHBvcnQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC02MSw4ICs2MSw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdFdlbGNvbWVQYWdlUmVkaXJlY3QvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdFdlbGNvbWVQYWdlUmVkaXJlY3QvYnVpbGQucHJvcGVydGllcwppbmRleCBkODEyZDU2Li4wMDJhYTcyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3RXZWxjb21lUGFnZVJlZGlyZWN0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290V2VsY29tZVBhZ2VSZWRpcmVjdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXZpcnR1YWwtc2VydmVyLWFsdGVybmF0ZS1kb2Nyb290LXdlbGNvbWVwYWdlLXJlZGlyZWN0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3RXZWxjb21lUGFnZVJlZGlyZWN0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdFdlbGNvbWVQYWdlUmVkaXJlY3QvYnVpbGQueG1sCmluZGV4IDFlZjE0NmUuLjNmYTVmNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdFdlbGNvbWVQYWdlUmVkaXJlY3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdFdlbGNvbWVQYWdlUmVkaXJlY3QvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDI4ICs0OCwyOCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1hbHRlcm5hdGUtcmVzb3VyY2VzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0uaHR0cC1zZXJ2aWNlLnZpcnR1YWwtc2VydmVyLnNlcnZlci5wcm9wZXJ0eS5hbHRlcm5hdGVkb2Nyb290XzE9JnF1b3Q7ZnJvbT0vbXl0ZXN0IGRpcj0vdG1wJnF1b3Q7Ii8+Ci0gICAgICAgIDwvYW50Y2FsbD4gCisgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfS5odHRwLXNlcnZpY2UudmlydHVhbC1zZXJ2ZXIuc2VydmVyLnByb3BlcnR5LmFsdGVybmF0ZWRvY3Jvb3RfMj0mcXVvdDtmcm9tPS9teXRlc3QvKiBkaXI9L3RtcCZxdW90OyIvPgotICAgICAgICA8L2FudGNhbGw+IAorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1hbHRlcm5hdGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckF1dGhSZWFsbVByb3BlcnR5L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQXV0aFJlYWxtUHJvcGVydHkvV2ViVGVzdC5qYXZhCmluZGV4IDI5MGExZDAuLjU2YTEyNTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQXV0aFJlYWxtUHJvcGVydHkvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQXV0aFJlYWxtUHJvcGVydHkvV2ViVGVzdC5qYXZhCkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgIGFkbWluVXNlciA9IGFyZ3NbM107CiAgICAgICAgIGFkbWluUGFzc3dvcmQgPSBhcmdzWzRdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSAxNTM3Iik7CkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTk5LDcgKzk5LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXQpOwogICAgICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICAgICAgICAgICAgU3RyaW5nIGNvb2tpZSA9ICJDb29raWU6ICIgKyBqc2Vzc2lvbklkICsgIlxuIjsKICAgICAgICAgICAgIG9zLndyaXRlKGNvb2tpZS5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC0xOTUsNyArMTk1LDcgQEAKICAgICAgICAgICAgIFN0cmluZyBjb29raWUgPSAiQ29va2llOiAiICsganNlc3Npb25JZCArICJcbiI7CiAgICAgICAgICAgICBvcy53cml0ZShjb29raWUuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICAgICAgaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtMjQ3LDcgKzI0Nyw3IEBACiAgICAgICAgICAgICBTdHJpbmcgY29va2llID0gIkNvb2tpZTogIiArIGpzZXNzaW9uSWRTU08gKyAiXG4iOwogICAgICAgICAgICAgb3Mud3JpdGUoY29va2llLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQXV0aFJlYWxtUHJvcGVydHkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQXV0aFJlYWxtUHJvcGVydHkvYnVpbGQucHJvcGVydGllcwppbmRleCBmYzI3YzYwLi5mZDc3ZTVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckF1dGhSZWFsbVByb3BlcnR5L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBdXRoUmVhbG1Qcm9wZXJ0eS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXZpcnR1YWwtc2VydmVyLWF1dGgtcmVhbG0tcHJvcGVydHkiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQXV0aFJlYWxtUHJvcGVydHkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBdXRoUmVhbG1Qcm9wZXJ0eS9idWlsZC54bWwKaW5kZXggMzQ5MjdkMi4uZDVmZTAwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBdXRoUmVhbG1Qcm9wZXJ0eS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBdXRoUmVhbG1Qcm9wZXJ0eS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE2ICs0NCwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgpAQCAtOTcsNyArOTcsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC0xMTEsMTAgKzExMSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQXV0aFJlYWxtUHJvcGVydHkvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBdXRoUmVhbG1Qcm9wZXJ0eS9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZGY0Y2ViZC4uZTU2N2U2YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBdXRoUmVhbG1Qcm9wZXJ0eS9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBdXRoUmVhbG1Qcm9wZXJ0eS9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTI0LDEyICsyNCwxMiBAQAogCiAgIDxzZWN1cml0eS1jb25zdHJhaW50PgogICAgIDx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KLQk8d2ViLXJlc291cmNlLW5hbWU+UHJvdGVjdGVkIEFyZWE8L3dlYi1yZXNvdXJjZS1uYW1lPgotCTx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+Ci0JPGh0dHAtbWV0aG9kPkRFTEVURTwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPkdFVDwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPlBPU1Q8L2h0dHAtbWV0aG9kPgotCTxodHRwLW1ldGhvZD5QVVQ8L2h0dHAtbWV0aG9kPgorICAgIDx3ZWItcmVzb3VyY2UtbmFtZT5Qcm90ZWN0ZWQgQXJlYTwvd2ViLXJlc291cmNlLW5hbWU+CisgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KKyAgICA8aHR0cC1tZXRob2Q+REVMRVRFPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+UE9TVDwvaHR0cC1tZXRob2Q+CisgICAgPGh0dHAtbWV0aG9kPlBVVDwvaHR0cC1tZXRob2Q+CiAgICAgPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KICAgICA8YXV0aC1jb25zdHJhaW50PgogICAgICAgPHJvbGUtbmFtZT5hZG1pbjwvcm9sZS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJDaGFuZ2VIdHRwTGlzdGVuZXJXZWJhcHBOb0xvbmdlckFjY2Vzc2libGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJDaGFuZ2VIdHRwTGlzdGVuZXJXZWJhcHBOb0xvbmdlckFjY2Vzc2libGUvV2ViVGVzdC5qYXZhCmluZGV4IDUxOWNhODkuLmI1M2ZmOGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQ2hhbmdlSHR0cExpc3RlbmVyV2ViYXBwTm9Mb25nZXJBY2Nlc3NpYmxlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckNoYW5nZUh0dHBMaXN0ZW5lcldlYmFwcE5vTG9uZ2VyQWNjZXNzaWJsZS9XZWJUZXN0LmphdmEKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgSXNzdWUgNDQwOCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTYwLDggKzYwLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpAQCAtNzEsNyArNzEsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewogCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSG9zdD0iICsgaG9zdCArICIsIHBvcnQ9IiArIHBvcnQpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSG9zdD0iICsgaG9zdCArICIsIHBvcnQ9IiArIHBvcnQpOwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvdGVzdC50eHQgSFRUUC8xLjFcbiI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckNoYW5nZUh0dHBMaXN0ZW5lcldlYmFwcE5vTG9uZ2VyQWNjZXNzaWJsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJDaGFuZ2VIdHRwTGlzdGVuZXJXZWJhcHBOb0xvbmdlckFjY2Vzc2libGUvYnVpbGQucHJvcGVydGllcwppbmRleCBmY2U5YTk1Li45N2RkNzU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckNoYW5nZUh0dHBMaXN0ZW5lcldlYmFwcE5vTG9uZ2VyQWNjZXNzaWJsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQ2hhbmdlSHR0cExpc3RlbmVyV2ViYXBwTm9Mb25nZXJBY2Nlc3NpYmxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdmlydHVhbC1zZXJ2ZXItY2hhbmdlLWh0dHAtbGlzdGVuZXItd2ViYXBwLW5vLWxvbmdlci1hY2Nlc3NpYmxlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckNoYW5nZUh0dHBMaXN0ZW5lcldlYmFwcE5vTG9uZ2VyQWNjZXNzaWJsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckNoYW5nZUh0dHBMaXN0ZW5lcldlYmFwcE5vTG9uZ2VyQWNjZXNzaWJsZS9idWlsZC54bWwKaW5kZXggYmI5MjgxYi4uMmEzM2RiYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJDaGFuZ2VIdHRwTGlzdGVuZXJXZWJhcHBOb0xvbmdlckFjY2Vzc2libGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQ2hhbmdlSHR0cExpc3RlbmVyV2ViYXBwTm9Mb25nZXJBY2Nlc3NpYmxlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS12aXJ0dWFsLXNlcnZlciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iY3JlYXRlLXZpcnR1YWwtc2VydmVyIiAvPgpAQCAtOTEsNyArOTEsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciBmcm9tICR7YmFzZWRpcn0uIiAKKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIgZnJvbSAke2Jhc2VkaXJ9LiIKICAgICAgICAgICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InByZWNvbXBpbGVqc3AiIHZhbHVlPSJ0cnVlIi8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CkBAIC05OSwxMSArOTksMTEgQEAKICAgICAgICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICAgICAgICAgIDxhcmcgbGluZT0iLS1jb250ZXh0cm9vdCAke2NvbnRleHRyb290fSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItLXZpcnR1YWxzZXJ2ZXJzIG15dnMiLz4KLSAgICAgICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KICAgICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTExNSwxMCArMTE1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXZpcnR1YWwtc2VydmVyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQ3JlYXRlVXBwZXJDYXNlRGVwbG95RXhjbHVzaXZlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQ3JlYXRlVXBwZXJDYXNlRGVwbG95RXhjbHVzaXZlL1dlYlRlc3QuamF2YQppbmRleCA5NDRlMmZkLi44MzVjZjU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckNyZWF0ZVVwcGVyQ2FzZURlcGxveUV4Y2x1c2l2ZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJDcmVhdGVVcHBlckNhc2VEZXBsb3lFeGNsdXNpdmUvV2ViVGVzdC5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSA2MDQzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTMsOCArNTMsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC02NCw3ICs2NCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIAorCiAgICAgICAgIFNvY2tldCBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi8gSFRUUC8xLjBcbiI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckNyZWF0ZVVwcGVyQ2FzZURlcGxveUV4Y2x1c2l2ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJDcmVhdGVVcHBlckNhc2VEZXBsb3lFeGNsdXNpdmUvYnVpbGQucHJvcGVydGllcwppbmRleCBkMTZjZjNlLi5jZDI0NmQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckNyZWF0ZVVwcGVyQ2FzZURlcGxveUV4Y2x1c2l2ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQ3JlYXRlVXBwZXJDYXNlRGVwbG95RXhjbHVzaXZlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdmlydHVhbC1zZXJ2ZXItY3JlYXRlLXVwcGVyLWNhc2UtZGVwbG95LWV4Y2x1c2l2ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJDcmVhdGVVcHBlckNhc2VEZXBsb3lFeGNsdXNpdmUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJDcmVhdGVVcHBlckNhc2VEZXBsb3lFeGNsdXNpdmUvYnVpbGQueG1sCmluZGV4IDZlMjM4NzEuLjA3OTkyMjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQ3JlYXRlVXBwZXJDYXNlRGVwbG95RXhjbHVzaXZlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckNyZWF0ZVVwcGVyQ2FzZURlcGxveUV4Y2x1c2l2ZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIwICs0NCwyMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIGZyb20gJHtiYXNlZGlyfS4iIAorICAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciBmcm9tICR7YmFzZWRpcn0uIgogICAgICAgICAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICAgICAgPGFyZyBsaW5lPSJkZXBsb3kiLz4KQEAgLTY1LDExICs2NSwxMSBAQAogICAgICAgICAgICAgPGFyZyBsaW5lPSItLWNvbnRleHRyb290ICR7Y29udGV4dHJvb3R9Ii8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tdXBsb2FkPXRydWUiLz4KICAgICAgICAgICAgIDxhcmcgbGluZT0iLS12aXJ0dWFsc2VydmVycyBUZXN0U2VydmVyIi8+Ci0gICAgICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CiAgICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04MSwxMCArODEsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtdnMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZS9XZWJUZXN0LmphdmEKaW5kZXggOGMxYTdkNC4uOGZkODg0NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGUvV2ViVGVzdC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHZpcnR1YWwgc2VydmVyIGRlZmF1bHQtd2ViLW1vZHVsZSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUxLDggKzUxLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNjIsNyArNjIsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgIi9pbmRleC5odG1sIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDYyNzkxYmUuLjYzZWM1YjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXZpcnR1YWwtc2VydmVyLWRlZmF1bHQtd2ViLW1vZHVsZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZS9idWlsZC54bWwKaW5kZXggNDY4OGNlMC4uNGNlOTVlYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxNiArNDQsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icmVjb25maWciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTcxLDcgKzcxLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODMsMTAgKzgzLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0icmVjb25maWciPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZUZvcm1Mb2dpbkpTZWN1cml0eUNoZWNrRGlyZWN0QWNjZXNzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZUZvcm1Mb2dpbkpTZWN1cml0eUNoZWNrRGlyZWN0QWNjZXNzL1dlYlRlc3QuamF2YQppbmRleCA4ZDMxYWQyLi42Y2IyYWFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVGb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlRm9ybUxvZ2luSlNlY3VyaXR5Q2hlY2tEaXJlY3RBY2Nlc3MvV2ViVGVzdC5qYXZhCkBAIC00OSw3ICs0OSw3IEBACiAgICAgICAgIGFkbWluVXNlciA9IGFyZ3NbMl07CiAgICAgICAgIGFkbWluUGFzc3dvcmQgPSBhcmdzWzNdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSA0NDM4Iik7CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgICAgICBTdHJpbmcgY29va2llID0gIkNvb2tpZTogIiArIGpzZXNzaW9uSWQgKyAiXG4iOwogICAgICAgICBvcy53cml0ZShjb29raWUuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlRm9ybUxvZ2luSlNlY3VyaXR5Q2hlY2tEaXJlY3RBY2Nlc3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZUZvcm1Mb2dpbkpTZWN1cml0eUNoZWNrRGlyZWN0QWNjZXNzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWM0YmEyZS4uZTAxMjA5OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlRm9ybUxvZ2luSlNlY3VyaXR5Q2hlY2tEaXJlY3RBY2Nlc3MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVGb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXZpcnR1YWwtc2VydmVyLWRlZmF1bHQtd2ViLW1vZHVsZS1mb3JtLWxvZ2luLWpzZWN1cml0eS1jaGVjay1kaXJlY3QtYWNjZXNzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVGb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVGb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9idWlsZC54bWwKaW5kZXggNzRlOWVjYy4uYzBiOWU0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlRm9ybUxvZ2luSlNlY3VyaXR5Q2hlY2tEaXJlY3RBY2Nlc3MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZUZvcm1Mb2dpbkpTZWN1cml0eUNoZWNrRGlyZWN0QWNjZXNzL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InJlY29uZmlnIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CkBAIC03Miw3ICs3Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTg1LDEwICs4NSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9InJlY29uZmlnIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVGb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVGb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMTYyZTg0My4uYmM2ZGMyNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlRm9ybUxvZ2luSlNlY3VyaXR5Q2hlY2tEaXJlY3RBY2Nlc3MvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZUZvcm1Mb2dpbkpTZWN1cml0eUNoZWNrRGlyZWN0QWNjZXNzL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjUsMTIgKzI1LDEyIEBACiAKICAgPHNlY3VyaXR5LWNvbnN0cmFpbnQ+CiAgICAgPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgotCTx3ZWItcmVzb3VyY2UtbmFtZT5Qcm90ZWN0ZWQgQXJlYTwvd2ViLXJlc291cmNlLW5hbWU+Ci0JPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KLQk8aHR0cC1tZXRob2Q+REVMRVRFPC9odHRwLW1ldGhvZD4KLQk8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KLQk8aHR0cC1tZXRob2Q+UE9TVDwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPlBVVDwvaHR0cC1tZXRob2Q+CisgICAgPHdlYi1yZXNvdXJjZS1uYW1lPlByb3RlY3RlZCBBcmVhPC93ZWItcmVzb3VyY2UtbmFtZT4KKyAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgorICAgIDxodHRwLW1ldGhvZD5ERUxFVEU8L2h0dHAtbWV0aG9kPgorICAgIDxodHRwLW1ldGhvZD5HRVQ8L2h0dHAtbWV0aG9kPgorICAgIDxodHRwLW1ldGhvZD5QT1NUPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+UFVUPC9odHRwLW1ldGhvZD4KICAgICA8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgogCiAgICAgPGF1dGgtY29uc3RyYWludD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZVJlY29uZmlnL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZVJlY29uZmlnL1dlYlRlc3QuamF2YQppbmRleCBlNTI3YTAxLi5jNDgxN2ZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZWNvbmZpZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVjb25maWcvV2ViVGVzdC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIGhvc3QgPSBhcmdzWzBdOwogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjUyNjExMyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU0LDggKzU0LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNjUsNyArNjUsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgIi9pbmRleC5odG1sIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVjb25maWcvYnVpbGQucHJvcGVydGllcwppbmRleCBhZmQ0YTNkLi5hOTUxOGIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZVJlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdmlydHVhbC1zZXJ2ZXItZGVmYXVsdC13ZWItbW9kdWxlLXJlc3RhcnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZVJlY29uZmlnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZVJlY29uZmlnL2J1aWxkLnhtbAppbmRleCBjODI4NmM3Li5lYWU5ZDRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZWNvbmZpZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVjb25maWcvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxNiArNDQsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0RGVmYXVsdFdlYk1vZHVsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgpAQCAtMTExLDEwICsxMTEsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldERlZmF1bHRXZWJNb2R1bGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CkBAIC0xMjIsNyArMTIyLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfS5odHRwLXNlcnZpY2UudmlydHVhbC1zZXJ2ZXIuJHtuZXctdmlydHVhbC1zZXJ2ZXJ9LmRlZmF1bHQtd2ViLW1vZHVsZT0iLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZXF1ZXN0RGlzcGF0Y2hlci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZXF1ZXN0RGlzcGF0Y2hlci9XZWJUZXN0LmphdmEKaW5kZXggMDFhYzQ1My4uNTNhMzE4YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVxdWVzdERpc3BhdGNoZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZVJlcXVlc3REaXNwYXRjaGVyL1dlYlRlc3QuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciB2aXJ0dWFsIHNlcnZlciBkZWZhdWx0LXdlYi1tb2R1bGUiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01Miw4ICs1Miw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTYzLDcgKzYzLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZVJlcXVlc3REaXNwYXRjaGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZXF1ZXN0RGlzcGF0Y2hlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDJlYzU1MjMuLjYwYzRmZWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZVJlcXVlc3REaXNwYXRjaGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVxdWVzdERpc3BhdGNoZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS12aXJ0dWFsLXNlcnZlci1kZWZhdWx0LXdlYi1tb2R1bGUtcmVxdWVzdC1kaXNwYXRjaGVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZXF1ZXN0RGlzcGF0Y2hlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZXF1ZXN0RGlzcGF0Y2hlci9idWlsZC54bWwKaW5kZXggNDY4OGNlMC4uNGNlOTVlYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVxdWVzdERpc3BhdGNoZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZVJlcXVlc3REaXNwYXRjaGVyL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InJlY29uZmlnIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CkBAIC03MSw3ICs3MSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTgzLDEwICs4MywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9InJlY29uZmlnIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZXF1ZXN0UGF0aC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZXF1ZXN0UGF0aC9XZWJUZXN0LmphdmEKaW5kZXggNGI2MmUzNS4uYzZmMzI1NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVxdWVzdFBhdGgvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZVJlcXVlc3RQYXRoL1dlYlRlc3QuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgMzcxMCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU0LDggKzU0LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlQXRSb290Q29udGV4dCgpOwogICAgICAgICAgICAgaW52b2tlQXRDb250ZXh0Um9vdCgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwpAQCAtNjYsNyArNjYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2VBdFJvb3RDb250ZXh0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICAiL2NoZWNrUmVxdWVzdFBhdGg/cnVuPWZpcnN0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTkxLDcgKzkxLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlQXRDb250ZXh0Um9vdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdCArCiAgICAgICAgICAgICAiL2NoZWNrUmVxdWVzdFBhdGg/cnVuPXNlY29uZCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZXF1ZXN0UGF0aC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVxdWVzdFBhdGgvYnVpbGQucHJvcGVydGllcwppbmRleCBkMDUwYzI2Li42MmUwNjhiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZXF1ZXN0UGF0aC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZVJlcXVlc3RQYXRoL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdmlydHVhbC1zZXJ2ZXItZGVmYXVsdC13ZWItbW9kdWxlLXJlcXVlc3QtcGF0aCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVxdWVzdFBhdGgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVxdWVzdFBhdGgvYnVpbGQueG1sCmluZGV4IDI4NGMyOWQuLjU2N2NkYTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZVJlcXVlc3RQYXRoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZXF1ZXN0UGF0aC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE2ICs0NCwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJyZWNvbmZpZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgpAQCAtNjcsNyArNjcsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03OSwxMCArNzksMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJyZWNvbmZpZyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVxdWVzdFBhdGgvc2VydmxldC9DaGVja1JlcXVlc3RQYXRoLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZXF1ZXN0UGF0aC9zZXJ2bGV0L0NoZWNrUmVxdWVzdFBhdGguamF2YQppbmRleCAxNDQ5ZTk2Li4wMGQ1MDAxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZXF1ZXN0UGF0aC9zZXJ2bGV0L0NoZWNrUmVxdWVzdFBhdGguamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZXF1ZXN0UGF0aC9zZXJ2bGV0L0NoZWNrUmVxdWVzdFBhdGguamF2YQpAQCAtMzAsNyArMzAsNyBAQAogICAgICAgICBTdHJpbmcgZXhwZWN0ZWRDdHh0Um9vdCA9IG51bGw7CiAgICAgICAgIFN0cmluZyBleHBlY3RlZFJlcXVlc3RVUkwgPSBudWxsOwogICAgICAgICBTdHJpbmcgZXhwZWN0ZWRSZXF1ZXN0VVJJID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHJ1biA9IHJlcS5nZXRQYXJhbWV0ZXIoInJ1biIpOwogICAgICAgICBpZiAoImZpcnN0Ii5lcXVhbHMocnVuKSkgewogICAgICAgICAgICAgZXhwZWN0ZWRDdHh0Um9vdCA9ICIiOwpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICAgICAgZXhwZWN0ZWRDdHh0Um9vdCA9CiAgICAgICAgICAgICAgICAgIi93ZWItdmlydHVhbC1zZXJ2ZXItZGVmYXVsdC13ZWItbW9kdWxlLXJlcXVlc3QtcGF0aCI7CiAgICAgICAgICAgICBleHBlY3RlZFJlcXVlc3RVUkkgPSBleHBlY3RlZEN0eHRSb290ICsgc2VydmxldFBhdGg7Ci0gICAgICAgICAgICBleHBlY3RlZFJlcXVlc3RVUkwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIAorICAgICAgICAgICAgZXhwZWN0ZWRSZXF1ZXN0VVJMID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKwogICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFJlcXVlc3RVUkk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEb2Nyb290RHluYW1pY1JlY29uZmlnL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRG9jcm9vdER5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEKaW5kZXggMDI4YjgzYS4uYTNkNTEwNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEb2Nyb290RHluYW1pY1JlY29uZmlnL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRvY3Jvb3REeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGRvY3Jvb3QiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00NSw4ICs0NSw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgiL2RvbWFpbi54bWwiLCAiPGRvbWFpbiAiKTsKICAgICAgICAgICAgIGludm9rZSgiL3NlcnZlci5wb2xpY3kiLCAiZ3JhbnQgY29kZUJhc2UiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgKiBpbiBvcmRlciBmb3IgdGhlIHRlc3QgdG8gcGFzcwogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoU3RyaW5nIHVyaSwgU3RyaW5nIGV4cGVjdGVkKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgdXJpKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRG9jcm9vdER5bmFtaWNSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEb2Nyb290RHluYW1pY1JlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODU1NDFmNy4uZTEyMWEyNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEb2Nyb290RHluYW1pY1JlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEb2Nyb290RHluYW1pY1JlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdmlydHVhbC1zZXJ2ZXItZG9jcm9vdC1keW5hbWljLXJlY29uZmlnIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRvY3Jvb3REeW5hbWljUmVjb25maWcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEb2Nyb290RHluYW1pY1JlY29uZmlnL2J1aWxkLnhtbAppbmRleCA3M2Q4YTc3Li5jY2ZiMjU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRvY3Jvb3REeW5hbWljUmVjb25maWcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRG9jcm9vdER5bmFtaWNSZWNvbmZpZy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE2ICs0NCwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgpAQCAtNzUsNyArNzUsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04NywxMCArODcsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckR5bmFtaWNDb25maWcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEeW5hbWljQ29uZmlnL1dlYlRlc3QuamF2YQppbmRleCA3YmQ3MGIwLi40YjNmZTc3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckR5bmFtaWNDb25maWcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRHluYW1pY0NvbmZpZy9XZWJUZXN0LmphdmEKQEAgLTIxLDE2ICsyMSwxNiBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAxOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICBwcml2YXRlIHN0YXRpYyBVUkwgdXJsOwogICAgIHByaXZhdGUgc3RhdGljIE9iamVjdE91dHB1dFN0cmVhbSBvYmplY3RXcml0ZXIgPSBudWxsOwotICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7ICAKKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiB1cmxDb25uZWN0aW9uID0gKEh0dHBVUkxDb25uZWN0aW9uKWNvbm47CiAgICAgICAgICAgICAgICB1cmxDb25uZWN0aW9uLnNldERvT3V0cHV0KHRydWUpOwogICAgICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZT0gIHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDIwMCIpOyAKKyAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogMjAwIik7CiAgICAgICAgICAgICAgICBpZiAodXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKSAhPSAyMDApewogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygidmlydHVhbFNlcnZlckR5bmFtaWNDb25maWciLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRHluYW1pY0NvbmZpZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEeW5hbWljQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTQ4MWI1My4uNWFiMzUxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEeW5hbWljQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEeW5hbWljQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS12aXJ0dWFsU2VydmVyRHluYW1pY0NvbmZpZyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdmlydHVhbFNlcnZlckR5bmFtaWNDb25maWciLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLXZpcnR1YWxTZXJ2ZXJEeW5hbWljQ29uZmlnIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckR5bmFtaWNDb25maWcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEeW5hbWljQ29uZmlnL2J1aWxkLnhtbAppbmRleCBhMWY1YzE5Li40MTg0ZmIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckR5bmFtaWNDb25maWcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRHluYW1pY0NvbmZpZy9idWlsZC54bWwKQEAgLTY2LDcgKzY2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgPGphdmFjCkBAIC04NSwxMCArODUsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC05Niw3ICs5Niw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTEwOCwxMCArMTA4LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEeW5hbWljQ29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRHluYW1pY0NvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZmRiMGMxNy4uYzFkNGJiNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEeW5hbWljQ29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckR5bmFtaWNDb25maWcvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwxMiArMjIsMTIgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEeW5hbWljQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRHluYW1pY0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggNzgxYmNjZi4uYzA3MzI3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEeW5hbWljQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckR5bmFtaWNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwpAQCAtMzQsMTIgKzM0LDEyIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCQorCiAgICAgICAgIG91dC5wcmludGxuKCJURVNUOjpQQVNTIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJFYXJXcmFwcGVkRGVmYXVsdFdlYk1vZHVsZVJlc3RhcnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJFYXJXcmFwcGVkRGVmYXVsdFdlYk1vZHVsZVJlc3RhcnQvV2ViVGVzdC5qYXZhCmluZGV4IDYyZGRjNTIuLjVlYjFmMDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRWFyV3JhcHBlZERlZmF1bHRXZWJNb2R1bGVSZXN0YXJ0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckVhcldyYXBwZWREZWZhdWx0V2ViTW9kdWxlUmVzdGFydC9XZWJUZXN0LmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKICAqICAgKCJXQVIgZnJvbSBhbiBFQVIgYXMgZGVmYXVsdCB3ZWJhcHAgbm8gbW9yZSB3b3JraW5nIGFmdGVyIHN0b3Avc3RhcnQiKQogICoKICAqIFRoaXMgdW5pdCB0ZXN0IGRlcGxveXMgYW4gRUFSLCBkeW5hbWljYWxseSBjb25maWd1cmVzIHRoZSBFQVIncyBlbWJlZGRlZAotICogV0FSIGFzIHRoZSBkZWZhdWx0LXdlYi1tb2R1bGUgb2YgdmlydHVhbCBzZXJ2ZXIgInNlcnZlciIsIGFjY2Vzc2VzIHRoZSAKKyAqIFdBUiBhcyB0aGUgZGVmYXVsdC13ZWItbW9kdWxlIG9mIHZpcnR1YWwgc2VydmVyICJzZXJ2ZXIiLCBhY2Nlc3NlcyB0aGUKICAqIFdBUidzIEpTUCByZXNvdXJjZSB1bmRlciBib3RoIHRoZSBXQVIncyBjb250ZXh0IHJvb3QgYW5kIHRoZSBlbXB0eSBjb250ZXh0CiAgKiByb290LCBzdG9wcyBhbmQgcmVzdGFydHMgdGhlIGRvbWFpbiwgYW5kIGFjY2Vzc2VzIHRoZSBXQVIncyBKU1AgcmVzb3VjZQogICogYWdhaW4gKHVuZGVyIGJvdGggdGhlIFdBUidzIGNvbnRleHQgcm9vdCBhbmQgdGhlIGVtcHR5IGNvbnRleHQgcm9vdCkuCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIGhvc3QgPSBhcmdzWzBdOwogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgNTQyIik7CkBAIC02NSwxMyArNjUsMTMgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nIHVyaSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIHVyaSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRWFyV3JhcHBlZERlZmF1bHRXZWJNb2R1bGVSZXN0YXJ0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckVhcldyYXBwZWREZWZhdWx0V2ViTW9kdWxlUmVzdGFydC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDBjODIwZTguLjI0NDRjZDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRWFyV3JhcHBlZERlZmF1bHRXZWJNb2R1bGVSZXN0YXJ0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJFYXJXcmFwcGVkRGVmYXVsdFdlYk1vZHVsZVJlc3RhcnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXZpcnR1YWwtc2VydmVyLWVhci13cmFwcGVkLWRlZmF1bHQtd2ViLW1vZHVsZS1yZXN0YXJ0Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS12aXJ0dWFsLXNlcnZlci1lYXItd3JhcHBlZC1kZWZhdWx0LXdlYi1tb2R1bGUtcmVzdGFydCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJFYXJXcmFwcGVkRGVmYXVsdFdlYk1vZHVsZVJlc3RhcnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJFYXJXcmFwcGVkRGVmYXVsdFdlYk1vZHVsZVJlc3RhcnQvYnVpbGQueG1sCmluZGV4IDc2OTRmMDEuLjk5ODgyYzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRWFyV3JhcHBlZERlZmF1bHRXZWJNb2R1bGVSZXN0YXJ0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckVhcldyYXBwZWREZWZhdWx0V2ViTW9kdWxlUmVzdGFydC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTY0LDExICs2NCwxMSBAQAogICAgICAgICA8ZWFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9IiBpbmNsdWRlcz0iKi5qYXIsICoud2FyIi8+CiAgICAgICAgIDwvZWFyPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuZmlyc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KQEAgLTkzLDcgKzkzLDcgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckxvZ0ZpbGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJMb2dGaWxlL1dlYlRlc3QuamF2YQppbmRleCBlYzZhYjJjLi5kYzVhZmY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckxvZ0ZpbGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyTG9nRmlsZS9XZWJUZXN0LmphdmEKQEAgLTM0LDE0ICszNCwxNCBAQAogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIGxvY2F0aW9uID0gYXJnc1szXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogICAgICAgICB3ZWJUZXN0LmRvVGVzdCgpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTQ5LDE0ICs0OSwxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiL2luZGV4LmpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckxvZ0ZpbGUvV2ViVGVzdDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyTG9nRmlsZS9XZWJUZXN0Mi5qYXZhCmluZGV4IGZjZmY0OTkuLjY3ZWRiOWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyTG9nRmlsZS9XZWJUZXN0Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyTG9nRmlsZS9XZWJUZXN0Mi5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICAgICAgbG9jYXRpb24gPSBhcmdzWzNdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVmlydHVhbCBTZXJ2ZXIgbG9nIGZpbGUiKTsKICAgICAgICAgV2ViVGVzdDIgd2ViVGVzdCA9IG5ldyBXZWJUZXN0MihhcmdzKTsKQEAgLTUwLDggKzUwLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNjEsNyArNjEsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiL0NoZWNrQWNjZXNzTG9nP2xvY2F0aW9uPSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBVUkxFbmNvZGVyLmVuY29kZShsb2NhdGlvbikpOwpAQCAtNjksNyArNjksNyBAQAogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJMb2dGaWxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckxvZ0ZpbGUvYnVpbGQucHJvcGVydGllcwppbmRleCAzYTg0YzA1Li5kOTBkZjMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckxvZ0ZpbGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckxvZ0ZpbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS12aXJ0dWFsLXNlcnZlci1sb2ctZmlsZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJMb2dGaWxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyTG9nRmlsZS9idWlsZC54bWwKaW5kZXggZWZhYTc2MC4uOTBhMjAwMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJMb2dGaWxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckxvZ0ZpbGUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC0xMzAsNyArMTMwLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtMTU3LDcgKzE1Nyw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8ZGVsZXRlIGRpcj0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvbG9ncy92c2xvZ3MiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyTG9nRmlsZS9zZXJ2bGV0L0NoZWNrQWNjZXNzTG9nLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckxvZ0ZpbGUvc2VydmxldC9DaGVja0FjY2Vzc0xvZy5qYXZhCmluZGV4IGI2Y2MzNDEuLmQ5YzJkZDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyTG9nRmlsZS9zZXJ2bGV0L0NoZWNrQWNjZXNzTG9nLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJMb2dGaWxlL3NlcnZsZXQvQ2hlY2tBY2Nlc3NMb2cuamF2YQpAQCAtMjgsNiArMjgsNiBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNoZWNraW5nIGZpbGUgbG9jYXRpb24gIitsb2NhdGlvbisiL2RvbWFpbnMvZG9tYWluMS9sb2dzL3ZzbG9ncyIpOwogICAgICAgICBpZiAoZmlsZXMgIT0gbnVsbCAmJiBmaWxlcy5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgcmVzcC5nZXRXcml0ZXIoKS5wcmludGxuKCJTVUNDRVNTISIpOwotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJNb2RpZnlIdHRwTGlzdGVuZXJQb3J0QWNjZXNzV2ViYXBwL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyTW9kaWZ5SHR0cExpc3RlbmVyUG9ydEFjY2Vzc1dlYmFwcC9XZWJUZXN0LmphdmEKaW5kZXggYTNlNzI2NS4uMDMzMDFkMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJNb2RpZnlIdHRwTGlzdGVuZXJQb3J0QWNjZXNzV2ViYXBwL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlck1vZGlmeUh0dHBMaXN0ZW5lclBvcnRBY2Nlc3NXZWJhcHAvV2ViVGVzdC5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiAgKiAgdmlydHVhbCBzZXJ2ZXJzIGdldCBsb3N0IikKICAqCiAgKiBUaGlzIHVuaXQgdGVzdCBkb2VzIHRoZSBmb2xsb3dpbmc6Ci0gKiAKKyAqCiAgKiAtIENyZWF0ZXMgdmlydHVhbCBzZXJ2ZXIgbXl2cywgYW5kIGFzc29jaWF0ZXMgaXQgd2l0aCBodHRwLWxpc3RlbmVyLTEKICAqIC0gRGVwbG95cyB3ZWJhcHAgdG8gbXl2cywgYW5kIGFzc2lnbnMgdGhpcyB3ZWJhcHAgYXMgdGhlIGRlZmF1bHQtd2ViLW1vZHVsZQogICogICBvZiBteXZzCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSA0NDA3Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNjEsOCArNjEsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VBdENvbnRleHRSb290KCk7CiAgICAgICAgICAgICBpbnZva2VBdFJvb3RDb250ZXh0KCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CkBAIC03Myw3ICs3Myw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZUF0Q29udGV4dFJvb3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvIEhUVFAvMS4xXG4iOwpAQCAtMTAyLDcgKzEwMiw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZUF0Um9vdENvbnRleHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUIC8gSFRUUC8xLjFcbiI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlck1vZGlmeUh0dHBMaXN0ZW5lclBvcnRBY2Nlc3NXZWJhcHAvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyTW9kaWZ5SHR0cExpc3RlbmVyUG9ydEFjY2Vzc1dlYmFwcC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDMzZTIxYWUuLmI1ZGFkN2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyTW9kaWZ5SHR0cExpc3RlbmVyUG9ydEFjY2Vzc1dlYmFwcC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyTW9kaWZ5SHR0cExpc3RlbmVyUG9ydEFjY2Vzc1dlYmFwcC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXZpcnR1YWwtc2VydmVyLWRlZmF1bHQtd2ViLW1vZHVsZS1tb2RpZnktaHR0cC1saXN0ZW5lci1wb3J0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlck1vZGlmeUh0dHBMaXN0ZW5lclBvcnRBY2Nlc3NXZWJhcHAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJNb2RpZnlIdHRwTGlzdGVuZXJQb3J0QWNjZXNzV2ViYXBwL2J1aWxkLnhtbAppbmRleCA4ZTViYWY4Li4wYmNlZjY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlck1vZGlmeUh0dHBMaXN0ZW5lclBvcnRBY2Nlc3NXZWJhcHAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyTW9kaWZ5SHR0cExpc3RlbmVyUG9ydEFjY2Vzc1dlYmFwcC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIwICs0NCwyMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIGZyb20gJHtiYXNlZGlyfS4iIAorICAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciBmcm9tICR7YmFzZWRpcn0uIgogICAgICAgICAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICAgICAgPGFyZyBsaW5lPSJkZXBsb3kiLz4KQEAgLTY1LDExICs2NSwxMSBAQAogICAgICAgICAgICAgPGFyZyBsaW5lPSItLWNvbnRleHRyb290ICR7Y29udGV4dHJvb3R9Ii8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tdXBsb2FkPXRydWUiLz4KICAgICAgICAgICAgIDxhcmcgbGluZT0iLS12aXJ0dWFsc2VydmVycyBteXZzIi8+Ci0gICAgICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CiAgICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04MSwxMCArODEsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtdnMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJSZWRpcmVjdFByb3BlcnR5Tm9TdWJzdHJpbmdNYXRjaC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlOb1N1YnN0cmluZ01hdGNoL1dlYlRlc3QuamF2YQppbmRleCA3ZDU2YTM4Li4zMjkxNjgwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlOb1N1YnN0cmluZ01hdGNoL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlOb1N1YnN0cmluZ01hdGNoL1dlYlRlc3QuamF2YQpAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2ODYxNjgyIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNjMsOCArNjMsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VTZXJ2bGV0KCIvcG9ydGFsL2RpcmVjdG9yeSIsCiAgICAgICAgICAgICAgICAgRVhQRUNURURfTE9DQVRJT05fUkVTUE9OU0VfSEVBREVSKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKQEAgLTc4LDcgKzc4LDcgQEAKIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2VTZXJ2bGV0KFN0cmluZyB1cmksIFN0cmluZyBleHBlY3RlZFJlZGlyZWN0KQogICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIHVyaSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJSZWRpcmVjdFByb3BlcnR5Tm9TdWJzdHJpbmdNYXRjaC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJSZWRpcmVjdFByb3BlcnR5Tm9TdWJzdHJpbmdNYXRjaC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGVlZjVlNDEuLmU2MzY3YWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eU5vU3Vic3RyaW5nTWF0Y2gvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlOb1N1YnN0cmluZ01hdGNoL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdmlydHVhbC1zZXJ2ZXItcmVkaXJlY3QtcHJvcGVydHktbm8tc3Vic3RyaW5nLW1hdGNoIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlOb1N1YnN0cmluZ01hdGNoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eU5vU3Vic3RyaW5nTWF0Y2gvYnVpbGQueG1sCmluZGV4IDVlMDE1NzYuLjFkMDcwN2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eU5vU3Vic3RyaW5nTWF0Y2gvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eU5vU3Vic3RyaW5nTWF0Y2gvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxNiArNDQsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTcxLDcgKzcxLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODMsMTAgKzgzLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eVVybC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlVcmwvV2ViVGVzdC5qYXZhCmluZGV4IDhiOTY1NjIuLjExNjA4NGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eVVybC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJSZWRpcmVjdFByb3BlcnR5VXJsL1dlYlRlc3QuamF2YQpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MzMwMzAwIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNjAsOCArNjAsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VTZXJ2bGV0KCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpAQCAtNzAsMTQgKzcwLDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZVNlcnZsZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAvc29tZXByZWZpeC8xMjM0IEhUVFAvMS4wXG4iOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlVcmwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eVVybC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDg5YjMzZDAuLjk2NmY1ZmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eVVybC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eVVybC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXZpcnR1YWwtc2VydmVyLXJlZGlyZWN0LXByb3BlcnR5LXVybCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJSZWRpcmVjdFByb3BlcnR5VXJsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eVVybC9idWlsZC54bWwKaW5kZXggZTA5NjFjMy4uNjE3ZTc5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJSZWRpcmVjdFByb3BlcnR5VXJsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlVcmwvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxNiArNDQsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTcxLDcgKzcxLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODMsMTAgKzgzLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eVVybFByZWZpeC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlVcmxQcmVmaXgvV2ViVGVzdC5qYXZhCmluZGV4IDljZTA2N2UuLjAzMzk2ZTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eVVybFByZWZpeC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJSZWRpcmVjdFByb3BlcnR5VXJsUHJlZml4L1dlYlRlc3QuamF2YQpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MzMwMzAwIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNjIsOCArNjIsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VTZXJ2bGV0KCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpAQCAtNzIsMTQgKzcyLDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZVNlcnZsZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAvc29tZXByZWZpeC81Njc4IEhUVFAvMS4wXG4iOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlVcmxQcmVmaXgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eVVybFByZWZpeC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI2NmU3ZGYuLmE2MTc3YTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eVVybFByZWZpeC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eVVybFByZWZpeC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXZpcnR1YWwtc2VydmVyLXJlZGlyZWN0LXByb3BlcnR5LXVybC1wcmVmaXgiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eVVybFByZWZpeC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlVcmxQcmVmaXgvYnVpbGQueG1sCmluZGV4IDEzNGM2YzUuLmJkZTg4YTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eVVybFByZWZpeC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJSZWRpcmVjdFByb3BlcnR5VXJsUHJlZml4L2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CkBAIC03MSw3ICs3MSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTgzLDEwICs4MywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHkvV2ViVGVzdC5qYXZhCmluZGV4IGZlZjIyZTYuLmY4ZjMyODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHkvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHkvV2ViVGVzdC5qYXZhCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDYzMjQ5MTEiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC04Miw3ICs4Miw3IEBACiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7CiAKICAgICAgICAgYm9vbGVhbiBzdGF0dXNIZWFkZXJGb3VuZCA9IGZhbHNlOwotICAgICAgICBib29sZWFuIGJvZHlMaW5lRm91bmQgPSBmYWxzZTsgICAgICAgIAorICAgICAgICBib29sZWFuIGJvZHlMaW5lRm91bmQgPSBmYWxzZTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNGRhNDM1Ny4uYmZjODAzMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJTZW5kRXJyb3JQcm9wZXJ0eS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS12aXJ0dWFsLXNlcnZlci1zZW5kLWVycm9yLXByb3BlcnR5Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHkvYnVpbGQueG1sCmluZGV4IDVmOGRkMDEuLjA1NDFiYjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHkvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxNiArNDQsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTc2LDcgKzc2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODgsMTAgKzg4LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHlCcm9rZW5XZWJhcHAvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJTZW5kRXJyb3JQcm9wZXJ0eUJyb2tlbldlYmFwcC9XZWJUZXN0LmphdmEKaW5kZXggMTU3ZTdkOS4uZmE1ZjYxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJTZW5kRXJyb3JQcm9wZXJ0eUJyb2tlbldlYmFwcC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJTZW5kRXJyb3JQcm9wZXJ0eUJyb2tlbldlYmFwcC9XZWJUZXN0LmphdmEKQEAgLTI5LDggKzI5LDggQEAKICAgICBwcml2YXRlIHN0YXRpYyBVUkxDb25uZWN0aW9uIGNvbm4gPSBudWxsOwogICAgIHByaXZhdGUgc3RhdGljIFVSTCB1cmw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0T3V0cHV0U3RyZWFtIG9iamVjdFdyaXRlciA9IG51bGw7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsgIAotICAgIAorICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7CisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB0aHJvd3MgRXhjZXB0aW9uewogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CiAgICAgICAgIFN0cmluZyBwb3J0ID0gYXJnc1sxXTsKQEAgLTQ3LDEyICs0NywxMiBAQAogICAgICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIHVybENvbm5lY3Rpb24gPSAoSHR0cFVSTENvbm5lY3Rpb24pY29ubjsKICAgICAgICAgICAgICAgICB1cmxDb25uZWN0aW9uLnNldERvT3V0cHV0KHRydWUpOwogCi0gICAgICAgICAgICAgICAgRGF0YU91dHB1dFN0cmVhbSBvdXQgPSAKKyAgICAgICAgICAgICAgICBEYXRhT3V0cHV0U3RyZWFtIG91dCA9CiAgICAgICAgICAgICAgICAgICAgbmV3IERhdGFPdXRwdXRTdHJlYW0odXJsQ29ubmVjdGlvbi5nZXRPdXRwdXRTdHJlYW0oKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVCeXRlKDEpOwogCiAgICAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlPSAgdXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidmlydHVhbC1zZXJ2ZXItc2VuZC1lcnJvci1wcm9wZXJ0eS1icm9rZW4td2ViYXBwOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiA0MDQiKTsgCisgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInZpcnR1YWwtc2VydmVyLXNlbmQtZXJyb3ItcHJvcGVydHktYnJva2VuLXdlYmFwcDogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogNDA0Iik7CiAgICAgICAgICAgICAgICBpZiAodXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKSAhPSA0MDQpewogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiVGVzdCB2aXJ0dWFsLXNlcnZlci1zZW5kLWVycm9yLXByb3BlcnR5LWJyb2tlbi13ZWJhcHAiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHlCcm9rZW5XZWJhcHAvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHlCcm9rZW5XZWJhcHAvYnVpbGQucHJvcGVydGllcwppbmRleCA0NzgxMGNjLi5hNzliMzA3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5QnJva2VuV2ViYXBwL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJTZW5kRXJyb3JQcm9wZXJ0eUJyb2tlbldlYmFwcC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdmlydHVhbC1zZXJ2ZXItc2VuZC1lcnJvci1wcm9wZXJ0eS1icm9rZW4td2ViYXBwIi8+CiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5QnJva2VuV2ViYXBwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHlCcm9rZW5XZWJhcHAvYnVpbGQueG1sCmluZGV4IDdiYTlhZmIuLmRlMjkwNjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHlCcm9rZW5XZWJhcHAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHlCcm9rZW5XZWJhcHAvYnVpbGQueG1sCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Lmh0dHAtc2VydmljZS52aXJ0dWFsLXNlcnZlci5zZXJ2ZXIucHJvcGVydHkuc2VuZC1lcnJvcl8xPSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNjIsMjQgKzYyLDI0IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCiAgICAgICAgICAgICBzcmNkaXI9Ii4iCiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC05MSwxMCArOTEsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5QnJva2VuV2ViYXBwL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHlCcm9rZW5XZWJhcHAvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDI5YWM3OGIuLmM3ZGY5ZDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHlCcm9rZW5XZWJhcHAvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHlCcm9rZW5XZWJhcHAvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwxMiArMjIsMTIgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj5TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5QnJva2VuV2ViYXBwL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHlCcm9rZW5XZWJhcHAvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDBiOWUyZTkuLmQ4OWJlYWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHlCcm9rZW5XZWJhcHAvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHlCcm9rZW5XZWJhcHAvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC00NiwxMSArNDYsMTEgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0ewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgc3RhdHVzID0gInZpcnR1YWwtc2VydmVyLXNlbmQtZXJyb3ItcHJvcGVydHktYnJva2VuLXdlYmFwcDo6RkFJTCI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOyAgICAgICAgCi0gICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7CisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKQEAgLTU4LDE2ICs1OCwxNiBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5kb1Bvc3RdIik7Ci0gICAgICAgIAorCiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogICAgICAgICBvdXQucHJpbnRsbihzdGF0dXMpOwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7Ci0gICAgICAgIAorCiAgICAgICAgIHN0YXR1cyA9ICJ2aXJ0dWFsLXNlcnZlci1zZW5kLWVycm9yLXByb3BlcnR5LWJyb2tlbi13ZWJhcHA6OjpGQUlMIjsKICAgICAgICAgb3V0LnByaW50bG4oc3RhdHVzKTsKLSAgICAgICAgCisKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU3RhdGVEeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJTdGF0ZUR5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEKaW5kZXggZGVjMzYzNS4uZDMzZGMxYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJTdGF0ZUR5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJTdGF0ZUR5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEKQEAgLTY2LDEyICs2NiwxMiBAQAogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIHJ1biA9IGFyZ3NbM107CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGRpc2FibGluZyBhIHZpcnR1YWwgc2VydmVyIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogCi0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKCJvbiIuZXF1YWxzKHdlYlRlc3QucnVuKSkgewogICAgICAgICAgICAgICAgIFRFU1RfTkFNRSA9IFRFU1RfUk9PVF9OQU1FICsgIi1vbiI7CiAgICAgICAgICAgICAgICAgd2ViVGVzdC5vblJ1bigpOwpAQCAtOTYsNyArOTYsNyBAQAogICAgICAqIHNlcnZlci4KICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgb25SdW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL3Rlc3QudHh0IEhUVFAvMS4xXG4iOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJTdGF0ZUR5bmFtaWNSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJTdGF0ZUR5bmFtaWNSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA3ODM0MjYuLmM1YTIyZDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU3RhdGVEeW5hbWljUmVjb25maWcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclN0YXRlRHluYW1pY1JlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdmlydHVhbC1zZXJ2ZXItc3RhdGUtZHluYW1pYy1yZWNvbmZpZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJTdGF0ZUR5bmFtaWNSZWNvbmZpZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclN0YXRlRHluYW1pY1JlY29uZmlnL2J1aWxkLnhtbAppbmRleCA3NDZmYWQzLi43NTdjZTFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclN0YXRlRHluYW1pY1JlY29uZmlnL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclN0YXRlRHluYW1pY1JlY29uZmlnL2J1aWxkLnhtbApAQCAtNDIsNyArNDIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNTAsMTcgKzUwLDE3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIgZnJvbSAke2Jhc2VkaXJ9LiIgCisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIGZyb20gJHtiYXNlZGlyfS4iCiAgICAgICAgICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwcmVjb21waWxlanNwIiB2YWx1ZT0idHJ1ZSIvPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgpAQCAtNzAsMTQgKzcwLDE0IEBACiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tcHJlY29tcGlsZWpzcD0ke3ByZWNvbXBpbGVqc3B9Ii8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tdXBsb2FkPXRydWUiLz4KICAgICAgICAgICAgIDxhcmcgbGluZT0iLS12aXJ0dWFsc2VydmVycyBteXZzIi8+Ci0gICAgICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CiAgICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KLSAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXZpcnR1YWwtc2VydmVyLW15dnMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyVXBkYXRlSG9zdHNEeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJVcGRhdGVIb3N0c0R5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEKaW5kZXggZTRhOTc1OC4uM2MxODU1NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJVcGRhdGVIb3N0c0R5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJVcGRhdGVIb3N0c0R5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKICAqICJteWhvc3QiLCBkZXBsb3lzIGEgd2ViYXBwIHRvIGl0LCBhbmQgYWNjZXNzZXMgdGhlIHdlYmFwcCBieSBzcGVjaWZ5aW5nCiAgKiBhIEhvc3QgaGVhZGVyIGVxdWFsIHRvICJteWhvc3QiIGluIHRoZSByZXF1ZXN0LgogICoKLSAqIFRoZSB0ZXN0IHRoZW4gdXBkYXRlcyB0aGUgdmlydHVhbCBzZXJ2ZXIncyAiaG9zdHMiIGF0dHJpYnV0ZSB0byAKKyAqIFRoZSB0ZXN0IHRoZW4gdXBkYXRlcyB0aGUgdmlydHVhbCBzZXJ2ZXIncyAiaG9zdHMiIGF0dHJpYnV0ZSB0bwogICogIm15bmV3aG9zdCIsIGFuZCBlbnN1cmVzIHRoYXQgdGhlIHdlYmFwcCBtYXkgc3RpbGwgYmUgYWNjZXNzZWQgd2hlbgogICogc3BlY2lmeWluZyBhIEhvc3QgaGVhZGVyIGVxdWFsIHRvICJteW5ld2hvc3QiIGluIHRoZSByZXF1ZXN0LgogICovCkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICAgICAgcnVuID0gYXJnc1szXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2NzEyNzc4Iik7CkBAIC04MCw3ICs4MCw3IEBACiAgICAgICogaXMgbWFwcGVkIHRvIHRoZSB2aXJ0dWFsIHNlcnZlci4KICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgZmlyc3RSdW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL3Rlc3QudHh0IEhUVFAvMS4xXG4iOwpAQCAtMTE1LDcgKzExNSw3IEBACiAgICAgICogaXMgbWFwcGVkIHRvIHRoZSB1cGRhdGVkIHZpcnR1YWwgc2VydmVyLgogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBzZWNvbmRSdW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL3Rlc3QudHh0IEhUVFAvMS4xXG4iOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJVcGRhdGVIb3N0c0R5bmFtaWNSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJVcGRhdGVIb3N0c0R5bmFtaWNSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQyMTBhNTguLjBlOTc3ZDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyVXBkYXRlSG9zdHNEeW5hbWljUmVjb25maWcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclVwZGF0ZUhvc3RzRHluYW1pY1JlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdmlydHVhbC1zZXJ2ZXItdXBkYXRlLWhvc3RzLWR5bmFtaWMtcmVjb25maWciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyVXBkYXRlSG9zdHNEeW5hbWljUmVjb25maWcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJVcGRhdGVIb3N0c0R5bmFtaWNSZWNvbmZpZy9idWlsZC54bWwKaW5kZXggYTMyNjA2MS4uZWNiMTFmMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJVcGRhdGVIb3N0c0R5bmFtaWNSZWNvbmZpZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJVcGRhdGVIb3N0c0R5bmFtaWNSZWNvbmZpZy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE2ICs0NCwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS12aXJ0dWFsLXNlcnZlciIvPgogICAgIDwvdGFyZ2V0PgpAQCAtODksMTAgKzg5LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXZpcnR1YWwtc2VydmVyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJVcGRhdGVIdHRwTGlzdGVuZXJzRHluYW1pY1JlY29uZmlnL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyVXBkYXRlSHR0cExpc3RlbmVyc0R5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEKaW5kZXggYTRlY2Y4MS4uYWQwOWJmNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJVcGRhdGVIdHRwTGlzdGVuZXJzRHluYW1pY1JlY29uZmlnL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclVwZGF0ZUh0dHBMaXN0ZW5lcnNEeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDY1NzM1NDUiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00OSw4ICs0OSw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKQEAgLTU5LDcgKzU5LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFNvY2tldCBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi90ZXN0LnR4dCBIVFRQLzEuMVxuIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyVXBkYXRlSHR0cExpc3RlbmVyc0R5bmFtaWNSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJVcGRhdGVIdHRwTGlzdGVuZXJzRHluYW1pY1JlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjA0YzNmOS4uNTg0ZTI2ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJVcGRhdGVIdHRwTGlzdGVuZXJzRHluYW1pY1JlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJVcGRhdGVIdHRwTGlzdGVuZXJzRHluYW1pY1JlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdmlydHVhbC1zZXJ2ZXItdXBkYXRlLWh0dHAtbGlzdGVuZXJzLWR5bmFtaWMtcmVjb25maWciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyVXBkYXRlSHR0cExpc3RlbmVyc0R5bmFtaWNSZWNvbmZpZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclVwZGF0ZUh0dHBMaXN0ZW5lcnNEeW5hbWljUmVjb25maWcvYnVpbGQueG1sCmluZGV4IDMzMDU2NzkuLmViNjU0YjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyVXBkYXRlSHR0cExpc3RlbmVyc0R5bmFtaWNSZWNvbmZpZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJVcGRhdGVIdHRwTGlzdGVuZXJzRHluYW1pY1JlY29uZmlnL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS12aXJ0dWFsLXNlcnZlci12czEiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJjcmVhdGUtdmlydHVhbC1zZXJ2ZXIiIC8+CkBAIC05Niw3ICs5Niw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIGZyb20gJHtiYXNlZGlyfS4iIAorICAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciBmcm9tICR7YmFzZWRpcn0uIgogICAgICAgICAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0icHJlY29tcGlsZWpzcCIgdmFsdWU9InRydWUiLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KQEAgLTEwNiwxMSArMTA2LDExIEBACiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tcHJlY29tcGlsZWpzcD0ke3ByZWNvbXBpbGVqc3B9Ii8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tdXBsb2FkPXRydWUiLz4KICAgICAgICAgICAgIDxhcmcgbGluZT0iLS12aXJ0dWFsc2VydmVycyB2czIiLz4KLSAgICAgICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KICAgICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtMTIyLDEwICsxMjIsMTAgQEAKICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtdmlydHVhbC1zZXJ2ZXItdnMxIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyV2l0aEN1c3RvbUVycm9yUmVwb3J0VmFsdmUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJXaXRoQ3VzdG9tRXJyb3JSZXBvcnRWYWx2ZS9XZWJUZXN0LmphdmEKaW5kZXggNGRiMWZhZS4uYmI4MmFjNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJXaXRoQ3VzdG9tRXJyb3JSZXBvcnRWYWx2ZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJXaXRoQ3VzdG9tRXJyb3JSZXBvcnRWYWx2ZS9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1sxXSk7CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgSVQgMTcwOTMiKTsKIApAQCAtNTMsMTEgKzUzLDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBudWxsOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBudWxsOwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlcldpdGhDdXN0b21FcnJvclJlcG9ydFZhbHZlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlcldpdGhDdXN0b21FcnJvclJlcG9ydFZhbHZlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNWZiYjlhYy4uOWE3ODFmZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJXaXRoQ3VzdG9tRXJyb3JSZXBvcnRWYWx2ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyV2l0aEN1c3RvbUVycm9yUmVwb3J0VmFsdmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS12aXJ0dWFsLXNlcnZlci13aXRoLWN1c3RvbS1lcnJvci1yZXBvcnQtdmFsdmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyV2l0aEN1c3RvbUVycm9yUmVwb3J0VmFsdmUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJXaXRoQ3VzdG9tRXJyb3JSZXBvcnRWYWx2ZS9idWlsZC54bWwKaW5kZXggYmQyOTRiZS4uZGMwYWEzNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJXaXRoQ3VzdG9tRXJyb3JSZXBvcnRWYWx2ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJXaXRoQ3VzdG9tRXJyb3JSZXBvcnRWYWx2ZS9idWlsZC54bWwKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IldlYlRlc3QuY2xhc3MiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01MSwxNiArNTEsMTYgQEAKICAgICAgICAgPC9qYXI+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jdXN0b20iLz4KIAotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb3B5SmFyVG9Eb21haW5MaWIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KQEAgLTgyLDcgKzgyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtOTQsMTAgKzk0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlbW92ZUphckZyb21Eb21haW5MaWIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyV2l0aEN1c3RvbVZhbHZlcy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlcldpdGhDdXN0b21WYWx2ZXMvV2ViVGVzdC5qYXZhCmluZGV4IGZmYWJiMjYuLmMzOWYwYzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyV2l0aEN1c3RvbVZhbHZlcy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJXaXRoQ3VzdG9tVmFsdmVzL1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBJVCAxMTY3NCIpOwogCkBAIC01MywxMSArNTMsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdCArICIvdGVzdCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAKQEAgLTc3LDcgKzc3LDcgQEAKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKICAgICAgICAgICAgIGlmICghRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJXaXRoQ3VzdG9tVmFsdmVzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlcldpdGhDdXN0b21WYWx2ZXMvYnVpbGQucHJvcGVydGllcwppbmRleCBmNDQ2YWM0Li45M2MzYzk5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlcldpdGhDdXN0b21WYWx2ZXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlcldpdGhDdXN0b21WYWx2ZXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS12aXJ0dWFsLXNlcnZlci13aXRoLWN1c3RvbS12YWx2ZXMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyV2l0aEN1c3RvbVZhbHZlcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlcldpdGhDdXN0b21WYWx2ZXMvYnVpbGQueG1sCmluZGV4IDg5ZDczMzIuLmU5NzJhZmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyV2l0aEN1c3RvbVZhbHZlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJXaXRoQ3VzdG9tVmFsdmVzL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29weUphclRvRG9tYWluTGliIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpAQCAtNjUsMTIgKzY1LDEyIEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfS5odHRwLXNlcnZpY2UudmlydHVhbC1zZXJ2ZXIuc2VydmVyLnByb3BlcnR5LnZhbHZlXzI9JnF1b3Q7dmFsdmVzLkdsYXNzRmlzaFZhbHZlSW1wbCZxdW90OyIvPgotICAgICAgICA8L2FudGNhbGw+IAorICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0uaHR0cC1zZXJ2aWNlLnZpcnR1YWwtc2VydmVyLnNlcnZlci5wcm9wZXJ0eS52YWx2ZV8zPSZxdW90O3ZhbHZlcy5Ub21jYXRWYWx2ZUJhc2VfMiZxdW90OyIvPgotICAgICAgICA8L2FudGNhbGw+IAorICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTg1LDcgKzg1LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtOTcsMTAgKzk3LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlbW92ZUphckZyb21Eb21haW5MaWIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyV2l0aEN1c3RvbVZhbHZlcy9saWIvdmFsdmVzL1RvbWNhdFZhbHZlQmFzZV8xLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlcldpdGhDdXN0b21WYWx2ZXMvbGliL3ZhbHZlcy9Ub21jYXRWYWx2ZUJhc2VfMS5qYXZhCmluZGV4IGI5YWFmNjQuLjlhMGVmMzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyV2l0aEN1c3RvbVZhbHZlcy9saWIvdmFsdmVzL1RvbWNhdFZhbHZlQmFzZV8xLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJXaXRoQ3VzdG9tVmFsdmVzL2xpYi92YWx2ZXMvVG9tY2F0VmFsdmVCYXNlXzEuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogcHVibGljIGNsYXNzIFRvbWNhdFZhbHZlQmFzZV8xIGV4dGVuZHMgVmFsdmVCYXNlIHsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0SW5mbygpIHsKLQlyZXR1cm4gZ2V0Q2xhc3MoKS5nZXROYW1lKCk7CisgICAgcmV0dXJuIGdldENsYXNzKCkuZ2V0TmFtZSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGludm9rZShSZXF1ZXN0IHJlcXVlc3QsIFJlc3BvbnNlIHJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJXaXRoQ3VzdG9tVmFsdmVzL2xpYi92YWx2ZXMvVG9tY2F0VmFsdmVCYXNlXzIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyV2l0aEN1c3RvbVZhbHZlcy9saWIvdmFsdmVzL1RvbWNhdFZhbHZlQmFzZV8yLmphdmEKaW5kZXggZWYyZGY2ZS4uMWI3MzViNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJXaXRoQ3VzdG9tVmFsdmVzL2xpYi92YWx2ZXMvVG9tY2F0VmFsdmVCYXNlXzIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlcldpdGhDdXN0b21WYWx2ZXMvbGliL3ZhbHZlcy9Ub21jYXRWYWx2ZUJhc2VfMi5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBwdWJsaWMgY2xhc3MgVG9tY2F0VmFsdmVCYXNlXzIgZXh0ZW5kcyBWYWx2ZUJhc2UgewogCiAgICAgcHVibGljIFN0cmluZyBnZXRJbmZvKCkgewotCXJldHVybiBnZXRDbGFzcygpLmdldE5hbWUoKTsKKyAgICByZXR1cm4gZ2V0Q2xhc3MoKS5nZXROYW1lKCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW52b2tlKFJlcXVlc3QgcmVxdWVzdCwgUmVzcG9uc2UgcmVzcG9uc2UpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwQWx0ZXJuYXRlRG9jcm9vdC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwQWx0ZXJuYXRlRG9jcm9vdC9XZWJUZXN0LmphdmEKaW5kZXggNmZmNDJmNS4uYzlhOTI1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcEFsdGVybmF0ZURvY3Jvb3QvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBBbHRlcm5hdGVEb2Nyb290L1dlYlRlc3QuamF2YQpAQCAtODQsNyArODQsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBhbHRlcm5hdGUgZG9jcm9vdCBzdXBwb3J0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtOTIsOCArOTIsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoY29udGV4dFJvb3QsICIvZG9tYWluLnhtbCIsICI8ZG9tYWluICIpOwogICAgICAgICAgICAgaW52b2tlKGNvbnRleHRSb290LCAiL3NlcnZlci5wb2xpY3kiLCAiZ3JhbnQgY29kZUJhc2UiKTsKICAgICAgICAgICAgIGludm9rZShjb250ZXh0Um9vdCwgIi9jb25maWcvbG9naW4uY29uZiIsICJmaWxlUmVhbG0iKTsKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoU3RyaW5nIGNvbnRleHRSb290LCBTdHJpbmcgdXJpLCBTdHJpbmcgZXhwZWN0ZWQpCiAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QgKyB1cmkpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcEFsdGVybmF0ZURvY3Jvb3QvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBBbHRlcm5hdGVEb2Nyb290L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDZiMjk4NC4uN2MxNGE2OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcEFsdGVybmF0ZURvY3Jvb3QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwQWx0ZXJuYXRlRG9jcm9vdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXdlYmFwcC1hbHRlcm5hdGUtZG9jcm9vdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcEFsdGVybmF0ZURvY3Jvb3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcEFsdGVybmF0ZURvY3Jvb3QvYnVpbGQueG1sCmluZGV4IDZmZDFiYjcuLjRmNDgxY2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBBbHRlcm5hdGVEb2Nyb290L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwQWx0ZXJuYXRlRG9jcm9vdC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE2ICs0MiwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29weVJlc291cmNlcyIvPgpAQCAtNzIsMTEgKzcyLDExIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTg4LDEwICs4OCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZW1vdmVSZXNvdXJjZXMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBBbHRlcm5hdGVEb2Nyb290VGFnRmlsZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwQWx0ZXJuYXRlRG9jcm9vdFRhZ0ZpbGUvV2ViVGVzdC5qYXZhCmluZGV4IDIxYjc0MDIuLmQzNTRiMjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBBbHRlcm5hdGVEb2Nyb290VGFnRmlsZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcEFsdGVybmF0ZURvY3Jvb3RUYWdGaWxlL1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBhbHRlcm5hdGUgZG9jcm9vdCBzdXBwb3J0IGZvciB0YWcgZmlsZXMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00OSw4ICs0OSw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBBbHRlcm5hdGVEb2Nyb290VGFnRmlsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcEFsdGVybmF0ZURvY3Jvb3RUYWdGaWxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTU4Njc0MS4uNzdlMzYyZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcEFsdGVybmF0ZURvY3Jvb3RUYWdGaWxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcEFsdGVybmF0ZURvY3Jvb3RUYWdGaWxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0td2ViYXBwLWFsdGVybmF0ZS1kb2Nyb290LXRhZ2ZpbGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBBbHRlcm5hdGVEb2Nyb290VGFnRmlsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwQWx0ZXJuYXRlRG9jcm9vdFRhZ0ZpbGUvYnVpbGQueG1sCmluZGV4IDllYjk5YjYuLmU2YjVmOTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBBbHRlcm5hdGVEb2Nyb290VGFnRmlsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcEFsdGVybmF0ZURvY3Jvb3RUYWdGaWxlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTYgKzQyLDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJtb3ZlUmVzb3VyY2VzIi8+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNzIsNyArNzIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04NCwxMCArODQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdG9yZVJlc291cmNlcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcERlcGxveURhc2hEYXNoTGlicmFyaWVzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9XZWJUZXN0LmphdmEKaW5kZXggOTY1YWQ3Ny4uNDk2ZjNmNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcERlcGxveURhc2hEYXNoTGlicmFyaWVzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwRGVwbG95RGFzaERhc2hMaWJyYXJpZXMvV2ViVGVzdC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjMyOTQxNSIpOwpAQCAtNTMsMTEgKzUzLDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcERlcGxveURhc2hEYXNoTGlicmFyaWVzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYWVjYTUwZS4uNmI2Y2Y1MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcERlcGxveURhc2hEYXNoTGlicmFyaWVzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcERlcGxveURhc2hEYXNoTGlicmFyaWVzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0td2ViYXBwLWRlcGxveS1kYXNoLWRhc2gtbGlicmFyaWVzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwRGVwbG95RGFzaERhc2hMaWJyYXJpZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcERlcGxveURhc2hEYXNoTGlicmFyaWVzL2J1aWxkLnhtbAppbmRleCA1Yzk3NzhjLi40N2JhOTY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwRGVwbG95RGFzaERhc2hMaWJyYXJpZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjMgKzQ0LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWxpYnJhcmllcyIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzIsMTAgKzcyLDEwIEBACiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlckNvbnNpZGVySGlkZGVuSmFyRmlsZXMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlckNvbnNpZGVySGlkZGVuSmFyRmlsZXMvV2ViVGVzdC5qYXZhCmluZGV4IGRjYzRlY2IuLjlkODIwNzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJDb25zaWRlckhpZGRlbkphckZpbGVzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyQ29uc2lkZXJIaWRkZW5KYXJGaWxlcy9XZWJUZXN0LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MzE0NDgxIik7CkBAIC01NywxOCArNTcsMTggQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJDb25zaWRlckhpZGRlbkphckZpbGVzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyQ29uc2lkZXJIaWRkZW5KYXJGaWxlcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDE1ZWRkN2IuLjI3NTgyNjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJDb25zaWRlckhpZGRlbkphckZpbGVzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlckNvbnNpZGVySGlkZGVuSmFyRmlsZXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS13ZWJhcHAtbG9hZGVyLWNvbnNpZGVyLWhpZGRlbi1qYXItZmlsZXMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJDb25zaWRlckhpZGRlbkphckZpbGVzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJDb25zaWRlckhpZGRlbkphckZpbGVzL2J1aWxkLnhtbAppbmRleCAwMGZkYWQzLi5jMzk3NzZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyQ29uc2lkZXJIaWRkZW5KYXJGaWxlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlckNvbnNpZGVySGlkZGVuSmFyRmlsZXMvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCwxMCArNzAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyRW1wdHlKYXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlckVtcHR5SmFyL1dlYlRlc3QuamF2YQppbmRleCBlNWZjNWJkLi5jNzZhMGNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyRW1wdHlKYXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJFbXB0eUphci9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQnVndHJhcSA0NjcwMDk5IGFuZCA0NjQ5ODIxIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTAsOCArNTAsOCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCi0gICAgICAgIHRyeSB7IAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VKU1AoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgIGludCBjb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgaWYgKGNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJVbmV4cGVjdGVkIHJlc3BvbnNlIGNvZGU6ICIgKyBjb2RlKTsKLSAgICAgICAgfSAgICAgICAgIAorICAgICAgICB9CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyRW1wdHlKYXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJFbXB0eUphci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDZhNWNmOTIuLjNlMzQyMjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJFbXB0eUphci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJFbXB0eUphci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXdlYmFwcGxvYWRlci1lbXB0eS1qYXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJFbXB0eUphci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyRW1wdHlKYXIvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJFbXB0eUphci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlckVtcHR5SmFyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJFbXB0eUphci9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyRW1wdHlKYXIvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDNiY2JjY2QuLjhlZDkzNGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJFbXB0eUphci9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlckVtcHR5SmFyL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMTMgKzIyLDEzIEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlckdldFJlc291cmNlRG90L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJHZXRSZXNvdXJjZURvdC9XZWJUZXN0LmphdmEKaW5kZXggZTBhNGJlYi4uMmJhNjkwMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlckdldFJlc291cmNlRG90L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyR2V0UmVzb3VyY2VEb3QvV2ViVGVzdC5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiAvKgotICogVW5pdCB0ZXN0IGZvciAKKyAqIFVuaXQgdGVzdCBmb3IKICAqICAgaHR0cHM6Ly9nbGFzc2Zpc2guZGV2LmphdmEubmV0L2lzc3Vlcy9zaG93X2J1Zy5jZ2k/aWQ9NjgxMAogICogICAoIldlYmFwcENsYXNzTG9hZGVyIGNhbiBub3QgcmVzb2x2ZSByZXNvdXJjZSB3aXRoICIuIiBzdWZmaXgiKQogICovCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElUIDY4MTAiKTsKQEAgLTUyLDExICs1MiwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyR2V0UmVzb3VyY2VEb3QvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJHZXRSZXNvdXJjZURvdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDU1M2RhMDcuLmZhNTExMDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJHZXRSZXNvdXJjZURvdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJHZXRSZXNvdXJjZURvdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXdlYmFwcC1sb2FkZXItZ2V0cmVzb3VyY2UtZG90Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyR2V0UmVzb3VyY2VEb3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlckdldFJlc291cmNlRG90L2J1aWxkLnhtbAppbmRleCAwMGZkYWQzLi5jMzk3NzZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyR2V0UmVzb3VyY2VEb3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJHZXRSZXNvdXJjZURvdC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDEwICs3MCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJJZ25vcmVIaWRkZW5KYXJGaWxlcy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVySWdub3JlSGlkZGVuSmFyRmlsZXMvV2ViVGVzdC5qYXZhCmluZGV4IDVlMjY0ZDcuLjFlMzAxOTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJJZ25vcmVIaWRkZW5KYXJGaWxlcy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlcklnbm9yZUhpZGRlbkphckZpbGVzL1dlYlRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDYzMTQ0ODEiKTsKQEAgLTUxLDE4ICs1MSwxOCBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIgKwogICAgICAgICAgICAgICAgICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlcklnbm9yZUhpZGRlbkphckZpbGVzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVySWdub3JlSGlkZGVuSmFyRmlsZXMvYnVpbGQucHJvcGVydGllcwppbmRleCBlMDE0OWNhLi4wOTg0Zjg4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVySWdub3JlSGlkZGVuSmFyRmlsZXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVySWdub3JlSGlkZGVuSmFyRmlsZXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS13ZWJhcHAtbG9hZGVyLWlnbm9yZS1oaWRkZW4tamFyLWZpbGVzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVySWdub3JlSGlkZGVuSmFyRmlsZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlcklnbm9yZUhpZGRlbkphckZpbGVzL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVySWdub3JlSGlkZGVuSmFyRmlsZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJJZ25vcmVIaWRkZW5KYXJGaWxlcy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViZGF2Q29weURlbGV0ZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViZGF2Q29weURlbGV0ZS9XZWJUZXN0LmphdmEKaW5kZXggZDhjN2Q3MS4uMzkwNzExZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmRhdkNvcHlEZWxldGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJkYXZDb3B5RGVsZXRlL1dlYlRlc3QuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBXZWJEQVYgY29weSBhbmQgZGVsZXRlIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3RyaW5nIHRtcGxhdGUgPSAiL2RhdGEuaHRtbCI7CiAgICAgICAgICAgICBTdHJpbmcgcGFnZSA9ICIvaW5kZXguaHRtbCI7Ci0gICAgICAgICAgICBpbnZva2UobmV3IFN0cmluZ1tdIHsgIkNPUFkgIiArIGNvbnRleHRSb290ICsgdG1wbGF0ZSArICIgSFRUUC8xLjEiLCAKKyAgICAgICAgICAgIGludm9rZShuZXcgU3RyaW5nW10geyAiQ09QWSAiICsgY29udGV4dFJvb3QgKyB0bXBsYXRlICsgIiBIVFRQLzEuMSIsCiAgICAgICAgICAgICAgICAgICAgICJEZXN0aW5hdGlvbjogaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290ICsgcGFnZSB9LCBudWxsLCBmYWxzZSk7CiAKICAgICAgICAgICAgIGJvb2xlYW4gc3RhdHVzID0gaW52b2tlKG5ldyBTdHJpbmdbXSB7ICJHRVQgIiArIGNvbnRleHRSb290ICsgcGFnZSAgKyAiIEhUVFAvMS4xIn0sIEVYUEVDVEVELCBmYWxzZSk7CkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgIGZvciAoU3RyaW5nIHJlcUxpbmUgOiByZXFMaW5lcykgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJlcUxpbmUpOwogICAgICAgICAgICAgb3Mud3JpdGUoKHJlcUxpbmUgKyAiXG4iKS5nZXRCeXRlcygpKTsKLSAgICAgICAgfSAgIAorICAgICAgICB9CiAKICAgICAgICAgb3Mud3JpdGUoIkhvc3Q6IGxvY2FsaG9zdFxuIi5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIkNvbm5lY3Rpb246IGNsb3NlXG4iLmdldEJ5dGVzKCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmRhdkNvcHlEZWxldGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJkYXZDb3B5RGVsZXRlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTkzYTQ4Mi4uYzRlOWYyNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmRhdkNvcHlEZWxldGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViZGF2Q29weURlbGV0ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXdlYmRhdi1jb3B5LWRlbGV0ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmRhdkNvcHlEZWxldGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmRhdkNvcHlEZWxldGUvYnVpbGQueG1sCmluZGV4IGFkMDI1ZDkuLmRlMWRjZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJkYXZDb3B5RGVsZXRlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViZGF2Q29weURlbGV0ZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIyICs0NCwyMiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MSwxMCArNzEsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9jb250ZXh0Um9vdC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9jb250ZXh0Um9vdC9XZWJUZXN0LmphdmEKaW5kZXggYjU2NTQzMy4uM2Q5OGZjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvY29udGV4dFJvb3QvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2NvbnRleHRSb290L1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBjb250ZXh0IHJvb3QgaW4gd2VibG9naWMueG1sIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNzcsMTEgKzc3LDExIEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBib29sZWFuIHRlc3RTdGF0dXMgPSBFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSk7CiAgICAgICAgICAgICBpZiAoIXRlc3RTdGF0dXMpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHRlc3RTdGF0dXMgPSBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsICh0ZXN0U3RhdHVzKT8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9jb250ZXh0Um9vdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvY29udGV4dFJvb3QvYnVpbGQucHJvcGVydGllcwppbmRleCAwYjVlODQzLi5lYjljODE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9jb250ZXh0Um9vdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2NvbnRleHRSb290L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0td2wtY29udGV4dC1yb290Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9jb250ZXh0Um9vdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9jb250ZXh0Um9vdC9idWlsZC54bWwKaW5kZXggYzUxYjVhMC4uZTcyYmQyNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvY29udGV4dFJvb3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2NvbnRleHRSb290L2J1aWxkLnhtbApAQCAtMzksOSArMzksOSBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNsZWFuIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPC9hbnRjYWxsPgpAQCAtNTIsMTEgKzUyLDExIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLW5vLWNvbnRleHQtcm9vdCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTY4LDEwICs2OCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2RlbGVnYXRlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2RlbGVnYXRlL1dlYlRlc3QuamF2YQppbmRleCA3YjU5ODI3Li5jZmYzZDliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9kZWxlZ2F0ZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvZGVsZWdhdGUvV2ViVGVzdC5qYXZhCkBAIC0yMywxMCArMjMsMTAgQEAKICAqIFVuaXQgdGVzdCBmb3IgcHJlZmVyLXdlYi1pbmYtY2xhc3NlcyBpbiB3ZWJsb2dpYy54bWwuCiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMTsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC00MCwxNiArNDAsMTYgQEAKIAogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwogICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsICJkZWxlZ2F0ZS1mbGFnIiwgY29udGV4dFJvb3QgKyAiL1NlcnZsZXRUZXN0IiApOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNvdW50ICE9IEVYUEVDVEVEX0NPVU5UKXsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJkZWxlZ2F0ZSIsIHN0YXQuRkFJTCk7Ci0gICAgICAgIH0gICAgICAgICAgIAorICAgICAgICB9CiAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYi9kZWxlZ2F0ZUZsYWctLS0+IGV4cGVjdCAiICsgRVhQRUNURURfQ09VTlQgKyAiIFBBU1MiKTsKICAgICB9CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKSk7CiAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjBcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHMuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CkBAIC03NSwxOCArNzUsMTggQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZU51bSArICI6ICAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdGF0dXMgPSBsaW5lLnN1YnN0cmluZyhpbmRleCsyKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5lcXVhbHNJZ25vcmVDYXNlKCJQQVNTIikpewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMocmVzdWx0ICsiOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhyZXN1bHQgKyI6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5GQUlMKTsgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMocmVzdWx0ICsiOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBsaW5lTnVtKys7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7Ci0gICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGVzdCBVTlBSRURJQ1RFRC1GQUlMVVJFIik7CiAgICAgICAgICB9CiAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9kZWxlZ2F0ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvZGVsZWdhdGUvYnVpbGQucHJvcGVydGllcwppbmRleCA4YzQxN2ZiLi4zYTI1NjAxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9kZWxlZ2F0ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2RlbGVnYXRlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEyICsxNSwxMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS13bC1kZWxlZ2F0ZSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0td2wtZGVsZWdhdGUiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8IS0tcHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8tLT4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWJsb2dpYy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYmxvZ2ljLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvZGVsZWdhdGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvZGVsZWdhdGUvYnVpbGQueG1sCmluZGV4IGU5ODg4YTguLjY0MTdkMGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2RlbGVnYXRlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9kZWxlZ2F0ZS9idWlsZC54bWwKQEAgLTQ0LDExICs0NCwxMSBAQAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuL3NoYXJlZC90ZXN0IgogICAgICAgICAgICAgICAgZGVzdGRpcj0iLi9zaGFyZWQiIGluY2x1ZGVzPSIqLmphdmEiLz4KICAgICAgICAgPGphciBkZXN0ZmlsZT0ic2hhcmVkLmphciIgYmFzZWRpcj0ic2hhcmVkIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9InNoYXJlZC5qYXIiIAorICAgICAgICA8Y29weSBmaWxlPSJzaGFyZWQuamFyIgogICAgICAgICAgICAgICB0b2Rpcj0iJHtlbnYuUzFBU19IT01FfS9saWIiLz4KLSAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4gICAgICAgIAorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTU2LDI0ICs1NiwyNCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwogICAgICAgICAgICAgc3JjZGlyPSIuIgogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODUsMTQgKzg1LDE0IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZS1hcHBzZXJ2IiBkZXBlbmRzPSJzZXR1cC1hcHBzZXJ2Ij4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9zaGFyZWQuamFyIi8+Ci0gICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+ICAgICAgICAKKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvZGVsZWdhdGUvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvZGVsZWdhdGUvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDczNDY5N2EuLmMwN2VmYzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2RlbGVnYXRlL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9kZWxlZ2F0ZS9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDEyICsyMiwxMiBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9kZWxlZ2F0ZS9zZXJ2bGV0L3Rlc3QvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2RlbGVnYXRlL3NlcnZsZXQvdGVzdC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IGI5Mzk1ODMuLmYzZWVjYjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2RlbGVnYXRlL3NlcnZsZXQvdGVzdC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2RlbGVnYXRlL3NlcnZsZXQvdGVzdC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0yNiwxMSArMjYsMTEgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFTUyA9ICJXTERlbGVnYXRlVGVzdDo6UEFTUyI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZBSUwgPSAiV0xEZWxlZ2F0ZVRlc3Q6OkZBSUwiOwogCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOyAgICAgICAgCi0gICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7CisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKQEAgLTM4LDEyICszOCwxMiBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5kb1Bvc3RdIik7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBzdGF0dXMgPSBGQUlMOwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7Ci0gICAgICAgIAorCiAgICAgICAgIERlbGVnYXRlVGVzdCBkZWxlZ2F0ZSA9IG51bGw7CiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIENsYXNzIGNsYXp6ID0gQ2xhc3MuZm9yTmFtZSgidGVzdC5EZWxlZ2F0ZVRlc3QiKTsKQEAgLTU2LDcgKzU2LDcgQEAKIAogICAgICAgICBpZiAoZGVsZWdhdGUgIT0gbnVsbCl7CiAgICAgICAgICAgICB0cnl7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWxlZ2F0ZTogIiArIGRlbGVnYXRlLmdldENoaWxkTmFtZSgpKTsgICAgICAgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWxlZ2F0ZTogIiArIGRlbGVnYXRlLmdldENoaWxkTmFtZSgpKTsKICAgICAgICAgICAgICAgICBzdGF0dXMgPSBQQVNTOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KXsKICAgICAgICAgICAgICAgICBzdGF0dXMgPSBGQUlMOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvZGlyTGlzdGluZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9kaXJMaXN0aW5nL1dlYlRlc3QuamF2YQppbmRleCAyZWIyZmZhLi5jMjE3YTk2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9kaXJMaXN0aW5nL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9kaXJMaXN0aW5nL1dlYlRlc3QuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogICogICAgIGNvbnRhaW5lci1kZXNjcmlwdG9yOmluZGV4LWRpcmVjdG9yeS1zb3J0LWJ5CiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC0zNCw3ICszNCw3IEBACiAKICAgICAgICAgLy8gVGhlIHN0YXQgcmVwb3J0ZXIgd3JpdGVzIG91dCB0aGUgdGVzdCBpbmZvIGFuZCByZXN1bHRzCiAgICAgICAgIC8vIGludG8gdGhlIHRvcC1sZXZlbCBxdWlja2xvb2sgZGlyZWN0b3J5IGR1cmluZyBhIHJ1bi4KLSAgICAgIAorCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIldlYmxvZ2ljREQ6IGluZGV4LWRpcmVjdG9yeS1lbmFibGVkLCBpbmRleC1kaXJlY3Rvcnktc29ydC1ieSIpOwogCiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKQEAgLTQzLDEwICs0MywxMCBAQAogCiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7CiAgICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgYm9vbGVhbiBvayA9IGdvR2V0KGhvc3QsIHBvcnQsICIiLCBjb250ZXh0Um9vdCArICIvIiApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3bC13ZWItZGlyZWN0b3J5TGlzdGluZyIsCiAgICAgICAgICAgICAgICAgICAgICgob2spPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CkBAIC05NCwxMSArOTQsMTEgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYSwgYiwgYzogIiArIGEgKyAiLCAiICsgYiArICIsICIgKyBjKTsKICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiAobGlzdERpciAmJiAoYiA8IGMpICYmIChjIDwgYSkpOwogICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvZGlyTGlzdGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvZGlyTGlzdGluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGNlZDJkYjEuLjUyOWJhOGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2Rpckxpc3RpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9kaXJMaXN0aW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEyICsxNSwxMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS13bC1kaXJlY3RvcnlMaXN0aW5nIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS13bC1kaXJlY3RvcnlMaXN0aW5nIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYmxvZ2ljLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2VibG9naWMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLWRpcmVjdG9yeUxpc3RpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2Rpckxpc3RpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvZGlyTGlzdGluZy9idWlsZC54bWwKaW5kZXggMTYxOWM5OS4uNjdjZmUzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvZGlyTGlzdGluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvZGlyTGlzdGluZy9idWlsZC54bWwKQEAgLTM2LDIxICszNiwyMSBAQAogICAgICAgPGRlbGV0ZSBmaWxlPSJXZWJUZXN0LmNsYXNzIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgIDxkZWxldGUgZmlsZT0iUmVwUnVuQ29uZi50eHQiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY2xlYW4iPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxqYXZhYwogICAgICAgICAgICAgc3JjZGlyPSIuIgpAQCAtNjcsMTAgKzY3LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvanNwRGVzY3JpcHRvci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9qc3BEZXNjcmlwdG9yL1dlYlRlc3QuamF2YQppbmRleCAxZjIyMTk5Li43OTkwZDJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9qc3BEZXNjcmlwdG9yL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9qc3BEZXNjcmlwdG9yL1dlYlRlc3QuamF2YQpAQCAtMzUsMTIgKzM1LDEyIEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGpzcC1kZXNjcmlwdG9yIGluIHdlYmxvZ2ljLnhtbCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKICAgICAgICAgd2ViVGVzdC5kb1Rlc3QoIi90ZXN0LmpzcCIpOwotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nIHBhdGgpIHsKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgICAgICAgICAgICAvLyBUZXN0IDMuICBNYWtlIHN1cmUgdGhhdCBzcGFjZXMgYXJlIHRyaW1tZWQuCiAgICAgICAgICAgICAgICAgdGVzdE5hbWUgPSAid2wganNwIGRlc2M6IGNvbXByZXNzLWh0bWwtdGVtcGxhdGUiOwogICAgICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGlmIChsaW5lLmVxdWFscygicGFzcyEiKSkgewogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0TmFtZSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvanNwRGVzY3JpcHRvci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvanNwRGVzY3JpcHRvci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGM4NGFhZGYuLjc3OTQ1OTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2pzcERlc2NyaXB0b3IvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9qc3BEZXNjcmlwdG9yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEyICsxNSwxMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1XTGpzcERlc2NyaXB0b3IiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LVdManNwRGVzY3JpcHRvciIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYmxvZ2ljLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2VibG9naWMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIke2FwcG5hbWV9Ii8+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2pzcERlc2NyaXB0b3IvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvanNwRGVzY3JpcHRvci9idWlsZC54bWwKaW5kZXggMDU3ZmUwMC4uZjRkYWI4ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvanNwRGVzY3JpcHRvci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvanNwRGVzY3JpcHRvci9idWlsZC54bWwKQEAgLTM5LDkgKzM5LDkgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjbGVhbiI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KQEAgLTUyLDExICs1MiwxMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC02OCwxMCArNjgsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9yZWZlcmVuY2VEZXNjcmlwdG9yL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3JlZmVyZW5jZURlc2NyaXB0b3IvV2ViVGVzdC5qYXZhCmluZGV4IGRmMzQ5MmQuLjk3MDkwNTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3JlZmVyZW5jZURlc2NyaXB0b3IvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3JlZmVyZW5jZURlc2NyaXB0b3IvV2ViVGVzdC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHJ1bi1hcy1wcmluY2lwYWwtbmFtZSBpbiB3ZWJsb2dpYy54bWwiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC0xMDEsNyArMTAxLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoIWV4cGVjdGVkUmVzcG9uc2UuZXF1YWxzKGxpbmUpKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgIGV4cGVjdGVkUmVzcG9uc2UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgdGVzdFN0YXR1cyA9IGZhbHNlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9yZWZlcmVuY2VEZXNjcmlwdG9yL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9yZWZlcmVuY2VEZXNjcmlwdG9yL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjc5NTBiOS4uNGQwNjAwNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvcmVmZXJlbmNlRGVzY3JpcHRvci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3JlZmVyZW5jZURlc2NyaXB0b3IvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS13bC1yZWZlcmVuY2UtZGVzY3JpcHRvciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvcmVmZXJlbmNlRGVzY3JpcHRvci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9yZWZlcmVuY2VEZXNjcmlwdG9yL2J1aWxkLnhtbAppbmRleCBmZTIxODU3Li5jNGU3ODJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9yZWZlcmVuY2VEZXNjcmlwdG9yL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9yZWZlcmVuY2VEZXNjcmlwdG9yL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywxNiArNDcsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIApAQCAtNzcsNyArNzcsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04OSwxMCArODksMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpAQCAtMTA1LDcgKzEwNSw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9Ii0tZGVzdHR5cGUgcXVldWUgbXlfcXVldWUiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9yZWZlcmVuY2VEZXNjcmlwdG9yL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvcmVmZXJlbmNlRGVzY3JpcHRvci9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQppbmRleCA3OTQ4NDE4Li45Mzc1ODY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9yZWZlcmVuY2VEZXNjcmlwdG9yL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3JlZmVyZW5jZURlc2NyaXB0b3Ivc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIHF1ZXVlID0gKFF1ZXVlKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvUXVldWVOYW1lIik7ICAgCisgICAgICAgICAgICBxdWV1ZSA9IChRdWV1ZSlpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL1F1ZXVlTmFtZSIpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZXgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9ydW5Bc1ByaW5jaXBhbE5hbWUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvcnVuQXNQcmluY2lwYWxOYW1lL1dlYlRlc3QuamF2YQppbmRleCBjODU2OTQ1Li42YmRhYjE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9ydW5Bc1ByaW5jaXBhbE5hbWUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3J1bkFzUHJpbmNpcGFsTmFtZS9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcnVuLWFzLXByaW5jaXBhbC1uYW1lIGluIHdlYmxvZ2ljLnhtbCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTk5LDcgKzk5LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoIWV4cGVjdGVkUmVzcG9uc2UuZXF1YWxzKGxpbmUpKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgIGV4cGVjdGVkUmVzcG9uc2UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgdGVzdFN0YXR1cyA9IGZhbHNlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9ydW5Bc1ByaW5jaXBhbE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3J1bkFzUHJpbmNpcGFsTmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQxMmFiMDUuLjE3MTgxMDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3J1bkFzUHJpbmNpcGFsTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3J1bkFzUHJpbmNpcGFsTmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXdsLXJ1bi1hcy1wcmluY2lwYWwtbmFtZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvcnVuQXNQcmluY2lwYWxOYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3J1bkFzUHJpbmNpcGFsTmFtZS9idWlsZC54bWwKaW5kZXggZjBiMTdjMC4uY2E4MGIwNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvcnVuQXNQcmluY2lwYWxOYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9ydW5Bc1ByaW5jaXBhbE5hbWUvYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTYwLDIzICs2MCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTg4LDEwICs4OCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtdXNlci1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25Db29raWVDb25maWdEZWNsYXJhdGl2ZS9XZWJUZXN0LmphdmEKaW5kZXggMTkwM2U5Ny4uNDQxYzlmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uQ29va2llQ29uZmlnRGVjbGFyYXRpdmUvV2ViVGVzdC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgY3VzdG9taXppbmcgY29tcGxldGUgbGlzdCBvZiAiICsKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHRocm93cyBFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uQ29va2llQ29uZmlnRGVjbGFyYXRpdmUvYnVpbGQucHJvcGVydGllcwppbmRleCAwMjBkZDQ1Li5iZTExZmZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uQ29va2llQ29uZmlnRGVjbGFyYXRpdmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uQ29va2llQ29uZmlnRGVjbGFyYXRpdmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS13bC1zZXNzaW9uLWNvb2tpZS1jb25maWctZGVjbGFyYXRpdmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25Db29raWVDb25maWdEZWNsYXJhdGl2ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uQ29va2llQ29uZmlnRGVjbGFyYXRpdmUvYnVpbGQueG1sCmluZGV4IDFjYTBjMzMuLmE4ZDg4MTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25Db29raWVDb25maWdEZWNsYXJhdGl2ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL2J1aWxkLnhtbApAQCAtMzgsNyArMzgsNyBAQAogICAgICAgPGRlbGV0ZSBmaWxlPSJXZWJUZXN0LmNsYXNzIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgIDxkZWxldGUgZmlsZT0iUmVwUnVuQ29uZi50eHQiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ2LDE1ICs0NiwxNSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgpAQCAtNzQsNyArNzQsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uQ29va2llQ29uZmlnRGVjbGFyYXRpdmUvc2VydmxldC90ZXN0L0NyZWF0ZVNlc3Npb24uamF2YQppbmRleCA2N2I0ZjBjLi5hMGZlNjljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uQ29va2llQ29uZmlnRGVjbGFyYXRpdmUvc2VydmxldC90ZXN0L0NyZWF0ZVNlc3Npb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uQ29va2llQ29uZmlnRGVjbGFyYXRpdmUvc2VydmxldC90ZXN0L0NyZWF0ZVNlc3Npb24uamF2YQpAQCAtNDAsMzIgKzQwLDMyIEBACiAgICAgICAgIC8vIGNvbW1lbnQKICAgICAgICAgaWYgKHNlc3Npb25Db29raWUuaW5kZXhPZigiQ29tbWVudD1teUNvbW1lbnQiKSA9PSAtMSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIk1pc3NpbmcgY29va2llIGNvbW1lbnQiKTsKLSAgICAgICAgfSAgICAgIAorICAgICAgICB9CiAKICAgICAgICAgLy8gZG9tYWluCiAgICAgICAgIGlmIChzZXNzaW9uQ29va2llLmluZGV4T2YoIkRvbWFpbj1teWRvbWFpbiIpID09IC0xKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbigiTWlzc2luZyBjb29raWUgZG9tYWluIik7Ci0gICAgICAgIH0gICAgICAKKyAgICAgICAgfQogCiAgICAgICAgIC8vIHBhdGgKICAgICAgICAgaWYgKHNlc3Npb25Db29raWUuaW5kZXhPZigiUGF0aD0vbXlQYXRoIikgPT0gLTEpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJNaXNzaW5nIGNvb2tpZSBwYXRoIik7Ci0gICAgICAgIH0gICAgICAKKyAgICAgICAgfQogCiAgICAgICAgIC8vIHNlY3VyZQogICAgICAgICBpZiAoc2Vzc2lvbkNvb2tpZS5pbmRleE9mKCJTZWN1cmUiKSA9PSAtMSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIk1pc3NpbmcgU2VjdXJlIGF0dHJpYnV0ZSIpOwotICAgICAgICB9ICAgICAgCisgICAgICAgIH0KIAogICAgICAgICAvLyBodHRwLW9ubHkKICAgICAgICAgaWYgKHNlc3Npb25Db29raWUuaW5kZXhPZigiSHR0cE9ubHkiKSA9PSAtMSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIk1pc3NpbmcgSHR0cE9ubHkgYXR0cmlidXRlIik7Ci0gICAgICAgIH0gICAgICAKKyAgICAgICAgfQogCiAgICAgICAgIC8vIG1heC1hZ2UKICAgICAgICAgaWYgKHNlc3Npb25Db29raWUuaW5kZXhPZigiTWF4LUFnZT0xMjMiKSA9PSAtMSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIk1pc3NpbmcgbWF4LWFnZSIpOwotICAgICAgICB9ICAgICAgCisgICAgICAgIH0KIAogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25FeHBpcmVkL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25FeHBpcmVkL1dlYlRlc3QuamF2YQppbmRleCAzZjYyYThjLi40NGZjNGNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uRXhwaXJlZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkV4cGlyZWQvV2ViVGVzdC5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiAvKgotICogTWFrZSBzdXJlIEh0dHBTZXNzaW9uTGlzdGVuZXIncyBzZXNzaW9uRGVzdHJveWVkKCksIGFuZCAKKyAqIE1ha2Ugc3VyZSBIdHRwU2Vzc2lvbkxpc3RlbmVyJ3Mgc2Vzc2lvbkRlc3Ryb3llZCgpLCBhbmQKICAqIEh0dHBTZXNzaW9uQmluZGluZ0xpc3RlbmVyJ3MgdmFsdWVVbmJvdW5kKCkgbWV0aG9kcyBhcmUgY2FsbGVkIHdoZW4KICAqIHNlc3Npb24gZXhwaXJlcy4KICAqCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHRpbWVvdXQtc2VjcywgaW52YWxpZGF0aW9uLWludGVydmFsLXNlY3MiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01NCw3ICs1NCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvQ3JlYXRlU2Vzc2lvbiI7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pCkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgICAgICBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKICAgICAgICAgICAgIGlmICghRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkV4cGlyZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25FeHBpcmVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNTE5NmQwZC4uMzc3N2M0MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkV4cGlyZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uRXhwaXJlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXdsLXNlc3Npb24tZXhwaXJlZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkV4cGlyZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkV4cGlyZWQvYnVpbGQueG1sCmluZGV4IDhjYTFhMDcuLmM4NTE1YzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25FeHBpcmVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uRXhwaXJlZC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgIDxkZWxldGUgZmlsZT0iV2ViVGVzdC5jbGFzcyIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IlJlcFJ1bkNvbmYudHh0IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxMCArNDQsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTU1LDEwICs1NSwxMCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY2LDcgKzY2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzgsMTAgKzc4LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkV4cGlyZWQvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkV4cGlyZWQvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGE0ZWVjMjcuLjZhYThiN2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25FeHBpcmVkL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uRXhwaXJlZC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIzLDcgKzIzLDcgQEAKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KIAotICA8bGlzdGVuZXI+ICAgICAKKyAgPGxpc3RlbmVyPgogICAgIDxsaXN0ZW5lci1jbGFzcz50ZXN0Lk15SHR0cFNlc3Npb25MaXN0ZW5lcjwvbGlzdGVuZXItY2xhc3M+CiAgIDwvbGlzdGVuZXI+CiAKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICA8c2VydmxldC1uYW1lPkNoZWNrUmVzdWx0PC9zZXJ2bGV0LW5hbWU+CiAgICAgPHVybC1wYXR0ZXJuPi9DaGVja1Jlc3VsdDwvdXJsLXBhdHRlcm4+CiAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgIAorCiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkV4cGlyZWQvc2VydmxldC90ZXN0L015T2JqZWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uRXhwaXJlZC9zZXJ2bGV0L3Rlc3QvTXlPYmplY3QuamF2YQppbmRleCBmZDA2MTBjLi5mNmYzMmVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uRXhwaXJlZC9zZXJ2bGV0L3Rlc3QvTXlPYmplY3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uRXhwaXJlZC9zZXJ2bGV0L3Rlc3QvTXlPYmplY3QuamF2YQpAQCAtMjcsMTcgKzI3LDE3IEBACiAgICAgICogTm90aWZpZXMgdGhlIG9iamVjdCB0aGF0IGl0IGlzIGJlaW5nIGJvdW5kIHRvIGEgc2Vzc2lvbiwgYW5kCiAgICAgICogaWRlbnRpZmllcyB0aGUgc2Vzc2lvbi4KICAgICAgKgotICAgICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgdGhhdCBpZGVudGlmaWVzIHRoZSBzZXNzaW9uIAorICAgICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgdGhhdCBpZGVudGlmaWVzIHRoZSBzZXNzaW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgdmFsdWVCb3VuZChIdHRwU2Vzc2lvbkJpbmRpbmdFdmVudCBldmVudCkgewogICAgICAgICAvLyBkbyBub3RoaW5nCiAgICAgfQotICAgIAorCiAgICAgLyoKICAgICAgKiBOb3RpZmllcyB0aGUgb2JqZWN0IHRoYXQgaXQgaXMgYmVpbmcgdW5ib3VuZCBmcm9tIGEgc2Vzc2lvbiwgYW5kCiAgICAgICogaWRlbnRpZmllcyB0aGUgc2Vzc2lvbi4KICAgICAgKgotICAgICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgdGhhdCBpZGVudGlmaWVzIHRoZSBzZXNzaW9uIAorICAgICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgdGhhdCBpZGVudGlmaWVzIHRoZSBzZXNzaW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgdmFsdWVVbmJvdW5kKEh0dHBTZXNzaW9uQmluZGluZ0V2ZW50IGV2ZW50KSB7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlRGVjbGFyYXRpdmUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVEZWNsYXJhdGl2ZS9XZWJUZXN0LmphdmEKaW5kZXggNGMzNDUxMC4uNDc5MjllMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVEZWNsYXJhdGl2ZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVEZWNsYXJhdGl2ZS9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgVVJMIHNlc3Npb24gdHJhY2tpbmcgbW9kZSBjb25maWd1cmVkIHZpYSB3ZWJsb2dpYy54bWwiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZVNlcnZsZXQoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC02MCwxNCArNjAsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlU2VydmxldCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL3JlZGlyZWN0RnJvbSIgKyAiIEhUVFAvMS4wXG4iOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICAgIGlmIChjb29raWVMaW5lICE9IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlVuZXhwZWN0ZWQgU2V0LUNvb2tpZSByZXNwb25zZSBoZWFkZXIiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAocmVkaXJlY3RMaW5lID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIk1pc3NpbmcgTG9jYXRpb24gcmVzcG9uc2UgaGVhZGVyIik7CiAgICAgICAgIH0KQEAgLTEwNyw3ICsxMDcsNyBAQAogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZURlY2xhcmF0aXZlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZURlY2xhcmF0aXZlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDJhZjBjOC4uN2ZiOWI0OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVEZWNsYXJhdGl2ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlRGVjbGFyYXRpdmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS13bC1zZXNzaW9uLWlkLXVybC1yZXdyaXRlLXNlc3Npb24tdHJhY2tpbmctbW9kZS1kZWNsYXJhdGl2ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVEZWNsYXJhdGl2ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZURlY2xhcmF0aXZlL2J1aWxkLnhtbAppbmRleCBhODI0YmUwLi5jZGQ1Y2RmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZURlY2xhcmF0aXZlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZURlY2xhcmF0aXZlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgICAgPGRlbGV0ZSBmaWxlPSJXZWJUZXN0LmNsYXNzIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgIDxkZWxldGUgZmlsZT0iUmVwUnVuQ29uZi50eHQiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIyICs0NCwyMiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MSwxMCArNzEsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvV2ViVGVzdC5qYXZhCmluZGV4IDIwNWI0YjIuLmNlZjY4ZWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvV2ViVGVzdC5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICAgICAgcnVuID0gYXJnc1szXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBXZWJsb2dpYyBERDogc2F2ZS1zZXNzaW9ucy1lbmFibGVkIik7CkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBmaXJzdFJ1bigpIHRocm93cyBFeGNlcHRpb24gewpAQCAtODIsNyArODIsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXHJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgIFN0cmluZyBjb29raWUgPSAiQ29va2llOiAiICsganNlc3Npb25JZCArICJcbiI7CiAgICAgICAgIG9zLndyaXRlKGNvb2tpZS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxyXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvYnVpbGQucHJvcGVydGllcwppbmRleCA1MDAzNDdkLi4xNDkxMzYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXdsLXNlc3Npb24tcHJlc2VydmUtYWNyb3NzLXJlZGVwbG95LWRlY2xhcmF0aXZlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvYnVpbGQueG1sCmluZGV4IDIyNjc0OWEuLjFkZTcxOWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICA8ZGVsZXRlIGZpbGU9IlJlcFJ1bkNvbmYudHh0IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgIDxkZWxldGUgZmlsZT0iSlNFU1NJT05JRCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMTYgKzQ3LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iLS1uYW1lPSR7YXBwbmFtZX0td2ViICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZWRlcGxveTIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iUmVkZXBsb3lpbmcgd2l0aCBrZWVwU3RhdGU9ZmFsc2UgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciBmcm9tICR7YmFzZWRpcn0uIgogICAgICAgICAgICAgICBsZXZlbD0idmVyYm9zZSIvPgpAQCAtMTA1LDcgKzEwNSw3IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW50aGlyZCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtMTIxLDcgKzEyMSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGVkNzhiMmEuLmEzYmYzNDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvZGVzY3JpcHRvci93ZWIueG1sCkBAIC00NCw1ICs0NCw1IEBACiAgICAgPHNlcnZsZXQtbmFtZT5SZXN1bWVTZXNzaW9uPC9zZXJ2bGV0LW5hbWU+CiAgICAgPHVybC1wYXR0ZXJuPi9SZXN1bWVTZXNzaW9uPC91cmwtcGF0dGVybj4KICAgPC9zZXJ2bGV0LW1hcHBpbmc+Ci0gICAgCisKIDwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvc2VydmxldC90ZXN0L0NyZWF0ZVNlc3Npb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvc2VydmxldC90ZXN0L0NyZWF0ZVNlc3Npb24uamF2YQppbmRleCA4OTc5NTdlLi5jZGQ4N2M5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhCkBAIC0zMCw4ICszMCw4IEBACiAgICAgICAgIEh0dHBTZXNzaW9uIHNlc3Npb24gPSByZXEuZ2V0U2Vzc2lvbih0cnVlKTsKIAogICAgICAgICBIYXNoTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgIG1hcC5wdXQoIm5hbWUxIiwgInZhbHVlMSIpOyAgIAotICAgICAgICBtYXAucHV0KCJuYW1lMiIsICJ2YWx1ZTIiKTsgICAKKyAgICAgICAgbWFwLnB1dCgibmFtZTEiLCAidmFsdWUxIik7CisgICAgICAgIG1hcC5wdXQoIm5hbWUyIiwgInZhbHVlMiIpOwogICAgICAgICBzZXNzaW9uLnNldEF0dHJpYnV0ZSgibWFwIiwgbWFwKTsKIAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL3NlcnZsZXQvdGVzdC9SZXN1bWVTZXNzaW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL3NlcnZsZXQvdGVzdC9SZXN1bWVTZXNzaW9uLmphdmEKaW5kZXggMThlZDNhYS4uY2U0ZmM1OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9zZXJ2bGV0L3Rlc3QvUmVzdW1lU2Vzc2lvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvc2VydmxldC90ZXN0L1Jlc3VtZVNlc3Npb24uamF2YQpAQCAtMjcsNyArMjcsNyBAQAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAotICAgICAgICBib29sZWFuIHJlc3VtZSA9IGZhbHNlOyAKKyAgICAgICAgYm9vbGVhbiByZXN1bWUgPSBmYWxzZTsKICAgICAgICAgSHR0cFNlc3Npb24gc2Vzc2lvbiA9IHJlcS5nZXRTZXNzaW9uKGZhbHNlKTsKICAgICAgICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgewogICAgICAgICAgICAgSGFzaE1hcCBtYXAgPSAoSGFzaE1hcCkgc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoIm1hcCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGNvbWVQYWdlRXh0ZW5zaW9uTWF0Y2gvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGNvbWVQYWdlRXh0ZW5zaW9uTWF0Y2gvV2ViVGVzdC5qYXZhCmluZGV4IGQxZDQwMWMuLmUyODI5N2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZUV4dGVuc2lvbk1hdGNoL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VFeHRlbnNpb25NYXRjaC9XZWJUZXN0LmphdmEKQEAgLTQwLDE2ICs0MCwxNiBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBpc3N1ZSA4NTM1Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogICAgICAgICB3ZWJUZXN0LmRvVGVzdCgpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCisKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VFeHRlbnNpb25NYXRjaC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGNvbWVQYWdlRXh0ZW5zaW9uTWF0Y2gvYnVpbGQucHJvcGVydGllcwppbmRleCAyZWQ1N2JjLi4yMTk4ZTVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VFeHRlbnNpb25NYXRjaC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZUV4dGVuc2lvbk1hdGNoL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0td2VsY29tZS1wYWdlLWV4dGVuc2lvbi1tYXRjaCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGNvbWVQYWdlRXh0ZW5zaW9uTWF0Y2gvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGNvbWVQYWdlRXh0ZW5zaW9uTWF0Y2gvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZUV4dGVuc2lvbk1hdGNoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VFeHRlbnNpb25NYXRjaC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VTZWN1cml0eUNvbnN0cmFpbnRFeGFjdE1hdGNoL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZVNlY3VyaXR5Q29uc3RyYWludEV4YWN0TWF0Y2gvV2ViVGVzdC5qYXZhCmluZGV4IDUyZDEwYmUuLjg3MTM1NWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZVNlY3VyaXR5Q29uc3RyYWludEV4YWN0TWF0Y2gvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZVNlY3VyaXR5Q29uc3RyYWludEV4YWN0TWF0Y2gvV2ViVGVzdC5qYXZhCkBAIC00MiwxNiArNDIsMTYgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQ1IgNjIzMzI3NiIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKICAgICAgICAgd2ViVGVzdC5kb1Rlc3QoKTsKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAKKwogICAgICAgICB0cnkgewogCiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZVNlY3VyaXR5Q29uc3RyYWludEV4YWN0TWF0Y2gvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZVNlY3VyaXR5Q29uc3RyYWludEV4YWN0TWF0Y2gvYnVpbGQucHJvcGVydGllcwppbmRleCA2Y2IwZWRhLi42YjU2NWQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VTZWN1cml0eUNvbnN0cmFpbnRFeGFjdE1hdGNoL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGNvbWVQYWdlU2VjdXJpdHlDb25zdHJhaW50RXhhY3RNYXRjaC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXdlbGNvbWUtcGFnZS1zZWN1cml0eS1jb25zdHJhaW50LWV4YWN0LW1hdGNoIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VTZWN1cml0eUNvbnN0cmFpbnRFeGFjdE1hdGNoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZVNlY3VyaXR5Q29uc3RyYWludEV4YWN0TWF0Y2gvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZVNlY3VyaXR5Q29uc3RyYWludEV4YWN0TWF0Y2gvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZVNlY3VyaXR5Q29uc3RyYWludEV4YWN0TWF0Y2gvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGNvbWVQYWdlU2VjdXJpdHlDb25zdHJhaW50SnNwRXh0ZW5zaW9uL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZVNlY3VyaXR5Q29uc3RyYWludEpzcEV4dGVuc2lvbi9XZWJUZXN0LmphdmEKaW5kZXggYjhhN2NmMC4uN2ZkNjVkYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGNvbWVQYWdlU2VjdXJpdHlDb25zdHJhaW50SnNwRXh0ZW5zaW9uL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VTZWN1cml0eUNvbnN0cmFpbnRKc3BFeHRlbnNpb24vV2ViVGVzdC5qYXZhCkBAIC00MiwxNiArNDIsMTYgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQ1IgNjIzMzI3NiIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKICAgICAgICAgd2ViVGVzdC5kb1Rlc3QoKTsKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAKKwogICAgICAgICB0cnkgewogCiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgSHR0cFVSTENvbm5lY3Rpb24uSFRUUF9VTkFVVEhPUklaRUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7Ci0gICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOyAgICAKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VTZWN1cml0eUNvbnN0cmFpbnRKc3BFeHRlbnNpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZVNlY3VyaXR5Q29uc3RyYWludEpzcEV4dGVuc2lvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDkxNzRlN2MuLmZjYzU0OWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZVNlY3VyaXR5Q29uc3RyYWludEpzcEV4dGVuc2lvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZVNlY3VyaXR5Q29uc3RyYWludEpzcEV4dGVuc2lvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXdlbGNvbWUtcGFnZS1zZWN1cml0eS1jb25zdHJhaW50LWpzcC1leHRlbnNpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZVNlY3VyaXR5Q29uc3RyYWludEpzcEV4dGVuc2lvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VTZWN1cml0eUNvbnN0cmFpbnRKc3BFeHRlbnNpb24vYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZVNlY3VyaXR5Q29uc3RyYWludEpzcEV4dGVuc2lvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGNvbWVQYWdlU2VjdXJpdHlDb25zdHJhaW50SnNwRXh0ZW5zaW9uL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmRm9ybUxvZ2luSHR0cFNlc3Npb25MaXN0ZW5lci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkZvcm1Mb2dpbkh0dHBTZXNzaW9uTGlzdGVuZXIvV2ViVGVzdC5qYXZhCmluZGV4IGU1OGE5MTYuLjBkZWZjZDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmRm9ybUxvZ2luSHR0cFNlc3Npb25MaXN0ZW5lci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZGb3JtTG9naW5IdHRwU2Vzc2lvbkxpc3RlbmVyL1dlYlRlc3QuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICBhZG1pblVzZXIgPSBhcmdzWzNdOwogICAgICAgICBhZG1pblBhc3N3b3JkID0gYXJnc1s0XTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgMTkzMyIpOwpAQCAtNjAsNyArNjAsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAgICAgU3RyaW5nIGNvb2tpZSA9ICJDb29raWU6ICIgKyBqc2Vzc2lvbklkICsgIlxuIjsKICAgICAgICAgb3Mud3JpdGUoY29va2llLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmRm9ybUxvZ2luSHR0cFNlc3Npb25MaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZGb3JtTG9naW5IdHRwU2Vzc2lvbkxpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYmRkN2VkNy4uMDgxNzk5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZGb3JtTG9naW5IdHRwU2Vzc2lvbkxpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZGb3JtTG9naW5IdHRwU2Vzc2lvbkxpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0td2VsZC1qc2YtZm9ybS1sb2dpbi1odHRwLXNlc3Npb24tbGlzdGVuZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmRm9ybUxvZ2luSHR0cFNlc3Npb25MaXN0ZW5lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkZvcm1Mb2dpbkh0dHBTZXNzaW9uTGlzdGVuZXIvYnVpbGQueG1sCmluZGV4IGQ4MTY2OTkuLjZjMjdhMDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmRm9ybUxvZ2luSHR0cFNlc3Npb25MaXN0ZW5lci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZGb3JtTG9naW5IdHRwU2Vzc2lvbkxpc3RlbmVyL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgICAgPGRlbGV0ZSBmaWxlPSJXZWJUZXN0LmNsYXNzIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgIDxkZWxldGUgZmlsZT0iUmVwUnVuQ29uZi50eHQiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNyYyIvPgpAQCAtNjUsMTQgKzY1LDE0IEBACiAgICAgICAgICAgICBzcmNkaXI9Ii4iCiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvYXBwc2Vydi1ydC5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04OSw3ICs4OSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXVzZXItY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmRm9ybUxvZ2luSHR0cFNlc3Npb25MaXN0ZW5lci9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkZvcm1Mb2dpbkh0dHBTZXNzaW9uTGlzdGVuZXIvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGEyNzc4OTEuLmZkZDRjMzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmRm9ybUxvZ2luSHR0cFNlc3Npb25MaXN0ZW5lci9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZGb3JtTG9naW5IdHRwU2Vzc2lvbkxpc3RlbmVyL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMzcsNyArMzcsNyBAQAogCiAgIDxzZWN1cml0eS1jb25zdHJhaW50PgogICAgIDx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KLQkgIDx3ZWItcmVzb3VyY2UtbmFtZT5Qcm90ZWN0ZWQgQXJlYTwvd2ViLXJlc291cmNlLW5hbWU+CisgICAgICA8d2ViLXJlc291cmNlLW5hbWU+UHJvdGVjdGVkIEFyZWE8L3dlYi1yZXNvdXJjZS1uYW1lPgogICAgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KICAgICA8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgogICAgIDxhdXRoLWNvbnN0cmFpbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkZvcm1Mb2dpbkh0dHBTZXNzaW9uTGlzdGVuZXIvc3JjL3Rlc3QvVGVzdEh0dHBTZXNzaW9uTGlzdGVuZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmRm9ybUxvZ2luSHR0cFNlc3Npb25MaXN0ZW5lci9zcmMvdGVzdC9UZXN0SHR0cFNlc3Npb25MaXN0ZW5lci5qYXZhCmluZGV4IDA3YTFkOGQuLjUxMDI2MDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmRm9ybUxvZ2luSHR0cFNlc3Npb25MaXN0ZW5lci9zcmMvdGVzdC9UZXN0SHR0cFNlc3Npb25MaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmRm9ybUxvZ2luSHR0cFNlc3Npb25MaXN0ZW5lci9zcmMvdGVzdC9UZXN0SHR0cFNlc3Npb25MaXN0ZW5lci5qYXZhCkBAIC0yOCwxMCArMjgsMTAgQEAKICAgICAgICAgU3RyaW5nIHZhbHVlID0gbXlCZWFuLmdldFRleHQoKTsKICAgICAgICAgaWYgKCEiQ0RJX1ZBTFVFIi5lcXVhbHModmFsdWUpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigpOwotICAgICAgICB9ICAgCisgICAgICAgIH0KICAgICAgICAgc2UuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgibXlBdHRyIiwgdmFsdWUpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBzZXNzaW9uQ3JlYXRlZDogIiArIHZhbHVlKTsKLSAgICB9ICAgCisgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkRlc3Ryb3llZChIdHRwU2Vzc2lvbkV2ZW50IHNlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IHNlc3Npb25EZXN0cm95ZWQiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmTG9naW5QYWdlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmTG9naW5QYWdlL1dlYlRlc3QuamF2YQppbmRleCA2ZmUyN2Q2Li45Yzg4ZjhkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkxvZ2luUGFnZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZMb2dpblBhZ2UvV2ViVGVzdC5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIGtleVN0b3JlUGF0aCA9IGFyZ3NbNF07CiAgICAgICAgIHRydXN0U3RvcmVQYXRoID0gYXJnc1s1XTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgSVQgMTE1MDQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgIFVSTENvbm5lY3Rpb24gY29ubiA9IHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBTdHJpbmcgcmVkaXJlY3RMb2NhdGlvbiA9IGNvbm4uZ2V0SGVhZGVyRmllbGQoIkxvY2F0aW9uIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9jYXRpb246ICIgKyByZWRpcmVjdExvY2F0aW9uKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGV4cGVjdGVkUmVkaXJlY3RMb2NhdGlvbiA9ICJodHRwczovLyIgKyBob3N0ICsgIjoiICsgaHR0cHNQb3J0ICsKICAgICAgICAgICAgICAgICBjb250ZXh0Um9vdCArICIvcHJvdGVjdGVkLnR4dCI7CiAgICAgICAgIGlmICghZXhwZWN0ZWRSZWRpcmVjdExvY2F0aW9uLmVxdWFscyhyZWRpcmVjdExvY2F0aW9uKSkgewpAQCAtMTEyLDcgKzExMiw3IEBACiAgICAgICAgICAgICBTdHJpbmcgdHJ1c3RTdG9yZVBhdGgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTU0xDb250ZXh0IGN0eCA9IFNTTENvbnRleHQuZ2V0SW5zdGFuY2UoIlRMUyIpOwogCi0gICAgICAgIC8vIEtleXN0b3JlIAorICAgICAgICAvLyBLZXlzdG9yZQogICAgICAgICBLZXlTdG9yZSBrcyA9IEtleVN0b3JlLmdldEluc3RhbmNlKCJKS1MiKTsKICAgICAgICAgY2hhcltdIHBhc3NwaHJhc2UgPSAiY2hhbmdlaXQiLnRvQ2hhckFycmF5KCk7CiAgICAgICAgIGtzLmxvYWQobmV3IEZpbGVJbnB1dFN0cmVhbShrZXlTdG9yZVBhdGgpLCBwYXNzcGhyYXNlKTsKQEAgLTEyOCw3ICsxMjgsNyBAQAogICAgICAgICB0bWYuaW5pdCh0cnVzdFN0b3JlKTsKIAogICAgICAgICBjdHguaW5pdChrbWYuZ2V0S2V5TWFuYWdlcnMoKSx0bWYuZ2V0VHJ1c3RNYW5hZ2VycygpLCBudWxsKTsKLSAKKwogICAgICAgICByZXR1cm4gY3R4LmdldFNvY2tldEZhY3RvcnkoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmTG9naW5QYWdlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkxvZ2luUGFnZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDg4MTgzMjguLjMzMTRlZTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmTG9naW5QYWdlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZMb2dpblBhZ2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS13ZWxkLWpzZi1mb3JtLWxvZ2luLXBhZ2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmTG9naW5QYWdlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmTG9naW5QYWdlL2J1aWxkLnhtbAppbmRleCA5OGU0ZTYxLi42Y2M4MzI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkxvZ2luUGFnZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZMb2dpblBhZ2UvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMyArNDQsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8amF2YWMgc3JjZGlyPSIuIgogICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0LmphciIKICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24scHJlcGFyZS10cnVzdHN0b3JlLWNvbW1vbixwcmVwYXJlLWtleXN0b3JlLWNvbW1vbiI+CiAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc4LDcgKzc4LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZMb2dpblBhZ2UvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZMb2dpblBhZ2UvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDRiYWRjNDUuLmRjNzNmNTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmTG9naW5QYWdlL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkxvZ2luUGFnZS9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgICAgIDxmb3JtLWVycm9yLXBhZ2U+L2xvZ2luX2Vycm9yLmpzZjwvZm9ybS1lcnJvci1wYWdlPgogICAgICAgICA8L2Zvcm0tbG9naW4tY29uZmlnPgogICAgIDwvbG9naW4tY29uZmlnPgotICAgIAorCiAgICAgPHNlY3VyaXR5LXJvbGU+CiAgICAgICAgIDxyb2xlLW5hbWU+YWRtaW48L3JvbGUtbmFtZT4KICAgICA8L3NlY3VyaXR5LXJvbGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZlNlcnZlckF1dGhNb2R1bGVSZWRpcmVjdC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZlNlcnZlckF1dGhNb2R1bGVSZWRpcmVjdC9XZWJUZXN0LmphdmEKaW5kZXggZWFlYWMxZC4uYWY2NzgzYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZTZXJ2ZXJBdXRoTW9kdWxlUmVkaXJlY3QvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmU2VydmVyQXV0aE1vZHVsZVJlZGlyZWN0L1dlYlRlc3QuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICBhZG1pblVzZXIgPSBhcmdzWzNdOwogICAgICAgICBhZG1pblBhc3N3b3JkID0gYXJnc1s0XTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgMTkzMyIpOwpAQCAtNjAsNyArNjAsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICAgICAgU3RyaW5nIGNvb2tpZSA9ICJDb29raWU6ICIgKyBqc2Vzc2lvbklkICsgIlxuIjsKICAgICAgICAgb3Mud3JpdGUoY29va2llLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmU2VydmVyQXV0aE1vZHVsZVJlZGlyZWN0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZlNlcnZlckF1dGhNb2R1bGVSZWRpcmVjdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDExZTcwOTguLmVhNjgxM2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmU2VydmVyQXV0aE1vZHVsZVJlZGlyZWN0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZTZXJ2ZXJBdXRoTW9kdWxlUmVkaXJlY3QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS13ZWxkLWpzZi1zZXJ2ZXItYXV0aC1tb2R1bGUtcmVkaXJlY3QiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmU2VydmVyQXV0aE1vZHVsZVJlZGlyZWN0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmU2VydmVyQXV0aE1vZHVsZVJlZGlyZWN0L2J1aWxkLnhtbAppbmRleCAwZWU0MzE4Li5kYjEwM2ZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZlNlcnZlckF1dGhNb2R1bGVSZWRpcmVjdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZTZXJ2ZXJBdXRoTW9kdWxlUmVkaXJlY3QvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICA8ZGVsZXRlIGZpbGU9IldlYlRlc3QuY2xhc3MiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgPGRlbGV0ZSBmaWxlPSJSZXBSdW5Db25mLnR4dCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic3JjIi8+CkBAIC03MCwxNCArNzAsMTQgQEAKICAgICAgICAgICAgIHNyY2Rpcj0iLiIKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0LmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTk0LDcgKzk0LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZlNlcnZlckF1dGhNb2R1bGVSZWRpcmVjdC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZlNlcnZlckF1dGhNb2R1bGVSZWRpcmVjdC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNDBjNmY2My4uMzEzODg3NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZTZXJ2ZXJBdXRoTW9kdWxlUmVkaXJlY3QvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmU2VydmVyQXV0aE1vZHVsZVJlZGlyZWN0L2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMzMsNyArMzMsNyBAQAogCiAgIDxzZWN1cml0eS1jb25zdHJhaW50PgogICAgIDx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KLQkgIDx3ZWItcmVzb3VyY2UtbmFtZT5Qcm90ZWN0ZWQgQXJlYTwvd2ViLXJlc291cmNlLW5hbWU+CisgICAgICA8d2ViLXJlc291cmNlLW5hbWU+UHJvdGVjdGVkIEFyZWE8L3dlYi1yZXNvdXJjZS1uYW1lPgogICAgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KICAgICA8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgogICAgIDxhdXRoLWNvbnN0cmFpbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2luMmtMb2NrL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93aW4ya0xvY2svV2ViVGVzdC5qYXZhCmluZGV4IGRkM2IyNGYuLjQ0ZTBhY2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93aW4ya0xvY2svV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93aW4ya0xvY2svV2ViVGVzdC5qYXZhCkBAIC0yMywxMCArMjMsMTAgQEAKICAqIFVuaXQgdGVzdCBmb3IgYnVndHJhcSA0OTMzOTg0IEV4Y2VwdGlvbiBvbiBSZWRlcGxveSBvbiBXaW5YUAogICovCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDE7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApAQCAtMzQsNyArMzQsNyBAQAogCiAgICAgICAgIC8vIFRoZSBzdGF0IHJlcG9ydGVyIHdyaXRlcyBvdXQgdGhlIHRlc3QgaW5mbyBhbmQgcmVzdWx0cwogICAgICAgICAvLyBpbnRvIHRoZSB0b3AtbGV2ZWwgcXVpY2tsb29rIGRpcmVjdG9yeSBkdXJpbmcgYSBydW4uCi0gICAgICAKKwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJTdGFuZGFsb25lIFdpbjJrIExvY2tpbmcgd2FyIHRlc3QiKTsKIAogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CkBAIC00MywxMyArNDMsMTMgQEAKIAogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwogICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsICJXaW4ya0xvY2siLCBjb250ZXh0Um9vdCArICIvU2VydmxldFRlc3QiICk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGNvdW50ICE9IEVYUEVDVEVEX0NPVU5UKXsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiVGVzdCBVTlBSRURJQ1RFRC1GQUlMVVJFIiwgc3RhdC5GQUlMKTsKLSAgICAgICAgICAgIH0gICAgICAgICAgIAorICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHQuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiLCBzdGF0LkZBSUwpOwpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMFxuIikpOwogICAgICAgICBvcy53cml0ZSgoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwpAQCAtODAsMTkgKzgwLDE5IEBACiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gbGluZS5pbmRleE9mKCI6Iik7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdGF0dXMgPSBsaW5lLnN1YnN0cmluZyhpbmRleCsxKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5lcXVhbHNJZ25vcmVDYXNlKCJQQVNTIikpewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1XaW4ya0xvY2s6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItV2luMmtMb2NrOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuRkFJTCk7ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItV2luMmtMb2NrOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgIH0KICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93aW4ya0xvY2svYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93aW4ya0xvY2svYnVpbGQucHJvcGVydGllcwppbmRleCAxZDIyOTVjLi45MjQ0MzE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2luMmtMb2NrL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dpbjJrTG9jay9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0td2luMmtMb2NrIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS13aW4ya0xvY2siLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLXdpbjJrTG9jayIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dpbjJrTG9jay9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2luMmtMb2NrL2J1aWxkLnhtbAppbmRleCBlNWQ4NDAzLi44ZGE2MDZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2luMmtMb2NrL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2luMmtMb2NrL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01MywxMCArNTMsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93aW4ya0xvY2svZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dpbjJrTG9jay9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNmJlNDA3My4uM2RjZmY3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dpbjJrTG9jay9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dpbjJrTG9jay9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTI3LDE0ICsyNywxNCBAQAogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLSAgICAKKwogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93aW4ya0xvY2svc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dpbjJrTG9jay9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggMmQ0NDA4Yy4uZDZmMmZiNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dpbjJrTG9jay9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dpbjJrTG9jay9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTM0LDcgKzM0LDcgQEAKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgc3RhdHVzID0gIldpbjJrTG9jazpQQVNTIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7CkBAIC00NSwxNCArNDUsMTQgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwogCiAgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgidGVzdCIsIldpbjJrTG9jazpQQVNTIik7CiAgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmludmFsaWRhdGUoKTsKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgb3V0LnByaW50bG4oc3RhdHVzKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93cm9uZ1RyYW5zcG9ydC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dyb25nVHJhbnNwb3J0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMTYxY2FkYS4uODg1YmQ3NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dyb25nVHJhbnNwb3J0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dyb25nVHJhbnNwb3J0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS13cm9uZ1Byb3RvY29sIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS13cm9uZ1Byb3RvY29sIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dyb25nUHJvdG9jb2wiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93cm9uZ1RyYW5zcG9ydC9zcmMvbWFpbi9qYXZhL3dyb25ndHJhbnNwb3J0L1dyb25nVHJhbnNwb3J0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd3JvbmdUcmFuc3BvcnQvc3JjL21haW4vamF2YS93cm9uZ3RyYW5zcG9ydC9Xcm9uZ1RyYW5zcG9ydC5qYXZhCmluZGV4IGQwNWNiYTcuLjMxZjA0MzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93cm9uZ1RyYW5zcG9ydC9zcmMvbWFpbi9qYXZhL3dyb25ndHJhbnNwb3J0L1dyb25nVHJhbnNwb3J0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dyb25nVHJhbnNwb3J0L3NyYy9tYWluL2phdmEvd3Jvbmd0cmFuc3BvcnQvV3JvbmdUcmFuc3BvcnQuamF2YQpAQCAtOTQsNyArOTQsNyBAQAogICAgICAgICByZXBvcnQoImRlbGV0ZS1odHRwLXJlZGlyZWN0IiwgYXNhZG1pbigiZGVsZXRlLXByb3RvY29sIiwKICAgICAgICAgICAgICJodHRwLXJlZGlyZWN0IikpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBjaGVja1N0YXR1cyhIdHRwVVJMQ29ubmVjdGlvbiBjb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd3JvbmdUcmFuc3BvcnRUYXJnZXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93cm9uZ1RyYW5zcG9ydFRhcmdldC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDZmY2Q0ZGYuLmQ2NGE1MDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93cm9uZ1RyYW5zcG9ydFRhcmdldC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93cm9uZ1RyYW5zcG9ydFRhcmdldC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0td3JvbmdQcm90b2NvbFRhcmdldCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0td3JvbmdQcm90b2NvbFRhcmdldCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93cm9uZ1Byb3RvY29sVGFyZ2V0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd3JvbmdUcmFuc3BvcnRUYXJnZXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dyb25nVHJhbnNwb3J0VGFyZ2V0L2J1aWxkLnhtbAppbmRleCA5ZjcxMTlmLi45NzZkZTNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd3JvbmdUcmFuc3BvcnRUYXJnZXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93cm9uZ1RyYW5zcG9ydFRhcmdldC9idWlsZC54bWwKQEAgLTgwLDcgKzgwLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1jbHVzdGVyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWNsdXN0ZXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93cm9uZ1RyYW5zcG9ydFRhcmdldC9zcmMvbWFpbi9qYXZhL3dyb25ndHJhbnNwb3J0dGFyZ2V0L1dyb25nVHJhbnNwb3J0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd3JvbmdUcmFuc3BvcnRUYXJnZXQvc3JjL21haW4vamF2YS93cm9uZ3RyYW5zcG9ydHRhcmdldC9Xcm9uZ1RyYW5zcG9ydC5qYXZhCmluZGV4IDUxNzc2YTUuLjAxMTVhZjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93cm9uZ1RyYW5zcG9ydFRhcmdldC9zcmMvbWFpbi9qYXZhL3dyb25ndHJhbnNwb3J0dGFyZ2V0L1dyb25nVHJhbnNwb3J0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dyb25nVHJhbnNwb3J0VGFyZ2V0L3NyYy9tYWluL2phdmEvd3Jvbmd0cmFuc3BvcnR0YXJnZXQvV3JvbmdUcmFuc3BvcnQuamF2YQpAQCAtMTAyLDcgKzEwMiw3IEBACiAgICAgICAgIHJlcG9ydCgiZGVsZXRlLWh0dHAtcmVkaXJlY3QiLCBhc2FkbWluKCJkZWxldGUtcHJvdG9jb2wiLCAiLS10YXJnZXQiLCBjbHVzdGVyTmFtZSwKICAgICAgICAgICAgICJodHRwLXJlZGlyZWN0IikpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBjaGVja1N0YXR1cyhIdHRwVVJMQ29ubmVjdGlvbiBjb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIveWFzc29uL1lhc3NvblRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi95YXNzb24vWWFzc29uVGVzdC5qYXZhCmluZGV4IDAwZTZhOTYuLjE3ZjJjMWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi95YXNzb24vWWFzc29uVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi95YXNzb24vWWFzc29uVGVzdC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSAyMTkyMiIpOwogICAgICAgICBZYXNzb25UZXN0IHlhc3NvblRlc3QgPSBuZXcgWWFzc29uVGVzdChhcmdzKTsKQEAgLTUxLDggKzUxLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNjIsNyArNjIsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiL1RyYW5zZm9ybVRvSnNvbj9wYXJhbWV0ZXI9IgogICAgICAgICAgICAgICAgICAgICAgICAgICArIFVSTEVuY29kZXIuZW5jb2RlKFBBUkFNRVRFUikpOwpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3lhc3Nvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3lhc3Nvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDkzMTM4YTMuLjVkNDIyZTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi95YXNzb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIveWFzc29uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0teWFzc29uLWxvYWRlZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3lhc3Nvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIveWFzc29uL2J1aWxkLnhtbAppbmRleCA3MjZlMDNlLi45YTc1OTJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIveWFzc29uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIveWFzc29uL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDgsMTAgKzQ4LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKQEAgLTYzLDcgKzYzLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iWWFzc29uVGVzdCI+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzUsNyArNzUsNyBAQAogICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2Fubm90YXRpb25zLWNvbW1vbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2Fubm90YXRpb25zLWNvbW1vbi54bWwKaW5kZXggZmU0YWFmOS4uZTZmYjY4NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9hbm5vdGF0aW9ucy1jb21tb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvYW5ub3RhdGlvbnMtY29tbW9uLnhtbApAQCAtMTcsNyArMTcsNyBAQAogLS0+CiAKIDxwcm9wZXJ0eSBlbnZpcm9ubWVudD0iZW52Ii8+Ci08cHJvcGVydHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzIi8+ICAgCis8cHJvcGVydHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzIi8+CiAKIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbiwgY29tcGlsZSwgcnVuLCB1bmRlcGxveSwgcmVwb3J0Ii8+CiAKQEAgLTM5LDIxICszOSwyMSBAQAogCiAKIDx0YXJnZXQgbmFtZT0iY29tcGlsZSI+Ci0gICAgPG1rZGlyIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIi8+ICAgCisgICAgPG1rZGlyIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIi8+CiAgICAgPGJhc2VuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0ic2VydmVyIiBzdWZmaXg9Ii5qYXZhIi8+CiAgICAgPGRpcm5hbWUgZmlsZT0iJHtzcmMtbmFtZX0iIHByb3BlcnR5PSJkaXJlY3RvcnkiLz4KLSAgICA8YmFzZW5hbWUgZmlsZT0iJHtkaXJlY3Rvcnl9IiBwcm9wZXJ0eT0icGtnLW5hbWUiLz4gCisgICAgPGJhc2VuYW1lIGZpbGU9IiR7ZGlyZWN0b3J5fSIgcHJvcGVydHk9InBrZy1uYW1lIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzLW5hbWUiIHZhbHVlPSIke3BrZy1uYW1lfS8ke3NlcnZlcn0uY2xhc3MiLz4KICAgICA8ZWNobyBtZXNzYWdlPSJDb21waWxpbmcgaW50byAke3BrZy1uYW1lfS8ke3NlcnZlcn0uY2xhc3MiLz4KLSAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95IiAKKyAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95IgogICAgICAgICBpbmNsdWRlcz0iJHtzcmMtbmFtZX0iPgogICAgIDxjbGFzc3BhdGggcmVmaWQ9ImNsYXNzcGF0aCIvPgogICAgPC9qYXZhYz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtY2xpZW50Ij4KLSAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiIAotICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiIAorICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIKKyAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIgogICAgICAgICBpbmNsdWRlcz0iJHtjbGllbnQtc3JjLW5hbWV9Ii8+CiA8L3RhcmdldD4KIApAQCAtNjQsNyArNjQsNyBAQAogPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+CiAgICAgPGJhc2VuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0ic2VydmVyIiBzdWZmaXg9Ii5qYXZhIi8+CiAgICAgPGRpcm5hbWUgZmlsZT0iJHtzcmMtbmFtZX0iIHByb3BlcnR5PSJkaXJlY3RvcnkiLz4KLSAgICA8YmFzZW5hbWUgZmlsZT0iJHtkaXJlY3Rvcnl9IiBwcm9wZXJ0eT0icGtnLW5hbWUiLz4gCisgICAgPGJhc2VuYW1lIGZpbGU9IiR7ZGlyZWN0b3J5fSIgcHJvcGVydHk9InBrZy1uYW1lIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzLW5hbWUiIHZhbHVlPSIke3BrZy1uYW1lfS8ke3NlcnZlcn0uY2xhc3MiLz4KICAgICA8ZWNobyBtZXNzYWdlPSJSZW1vdmluZyBmaWxlICR7Y2xhc3MtbmFtZX0gZnJvbSBhdXRvZGVwbG95IGRpcmVjdG9yeSIvPgogICAgIDxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke2NsYXNzLW5hbWV9Ii8+CkBAIC04Myw3ICs4Myw3IEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJyZXBvcnQiIGRlcGVuZHM9ImludGVybmFsLXJlcG9ydC1zdWNjZXNzLCBpbnRlcm5hbC1yZXBvcnQtZmFpbHVyZSI+Ci0gICAgPGRlbGV0ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95LyR7Y2xhc3MtbmFtZX1fKiIvPiAgICAKKyAgICA8ZGVsZXRlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtjbGFzcy1uYW1lfV8qIi8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJydW4iPgpAQCAtMTA4LDE3ICsxMDgsMTcgQEAKIDx0YXJnZXQgbmFtZT0iaW50ZXJuYWwtcnVuIiBpZj0iZGVwbG95X3N1Y2NlZWRlZCI+CiAgICAgPGJhc2VuYW1lIGZpbGU9IiR7Y2xpZW50LXNyYy1uYW1lfSIgcHJvcGVydHk9ImNsaWVudCIgc3VmZml4PSIuamF2YSIvPgogICAgIDxkaXJuYW1lIGZpbGU9IiR7Y2xpZW50LXNyYy1uYW1lfSIgcHJvcGVydHk9ImNsaWVudC1kaXJlY3RvcnkiLz4KLSAgICA8YmFzZW5hbWUgZmlsZT0iJHtjbGllbnQtZGlyZWN0b3J5fSIgcHJvcGVydHk9ImNsaWVudC1wa2ctbmFtZSIvPiAKKyAgICA8YmFzZW5hbWUgZmlsZT0iJHtjbGllbnQtZGlyZWN0b3J5fSIgcHJvcGVydHk9ImNsaWVudC1wa2ctbmFtZSIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGllbnQtY2xhc3MtbmFtZSIgdmFsdWU9IiR7Y2xpZW50LXBrZy1uYW1lfS8ke2NsaWVudH0uY2xhc3MiLz4KICAgICA8ZWNobyBtZXNzYWdlPSJ3c2ltcG9ydGluZyBodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS8ke3NlcnZlcn0vJHtzZXJ2ZXJ9U2VydmljZT9XU0RMIi8+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3NpbXBvcnQiPgogICAgICAgICA8YXJnIGxpbmU9Ii1rZWVwIC1kICR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyBodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS8ke3NlcnZlcn0vJHtzZXJ2ZXJ9U2VydmljZT9XU0RMIi8+CiAgICAgPC9leGVjPgotICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jbGllbnQiLz4gICAKKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY2xpZW50Ii8+CiAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyBhcHBjbGllbnQgd2l0aCAke2NsaWVudC1wa2ctbmFtZX0uJHtjbGllbnR9Ii8+CiAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2FwcGNsaWVudCIgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiPgotICAgICAgICA8YXJnIHZhbHVlPSIke2NsaWVudC1wa2ctbmFtZX0uJHtjbGllbnR9Ii8+ICAgIAorICAgICAgICA8YXJnIHZhbHVlPSIke2NsaWVudC1wa2ctbmFtZX0uJHtjbGllbnR9Ii8+CiAgICAgPC9leGVjPgogPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvYXN5bmMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvYXN5bmMvYnVpbGQucHJvcGVydGllcwppbmRleCBiMDg0YzU0Li4zMTc1ODI1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2FzeW5jL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9hc3luYy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw5ICsxNSw5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJhc3luY3NlcnZpY2UiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9hc3luYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2FzeW5jL2J1aWxkLnhtbAppbmRleCA4MTdkNjY4Li4zNmRmZGZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2FzeW5jL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2FzeW5jL2J1aWxkLnhtbApAQCAtNjMsOCArNjMsOCBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2ltcG9ydC5hcmdzIgogICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC1iIGN1c3RvbS1jbGllbnQueG1sIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCBodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS8ke2FwcG5hbWV9L3dlYnNlcnZpY2UvQXN5bmNTZXJ2aWNlP1dTREwiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgIDwvdGFyZ2V0PgogCkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50Ij4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWNsaWVudCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQtY2xhc3MiIHZhbHVlPSJjbGllbnQuQ2xpZW50Ii8+CkBAIC04NSw3ICs4NSw3IEBACiAgICAgICA8L2FudGNhbGw+CiAKIAotPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4gCis8IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0iY3VzdG9tLWNsaWVudC54bWwiIHRva2VuPSIke2h0dHAuaG9zdH0iIHZhbHVlPSJIVFRQX0hPU1QiLz4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9ImN1c3RvbS1jbGllbnQueG1sIiB0b2tlbj0iJHtodHRwLnBvcnR9IiB2YWx1ZT0iSFRUUF9QT1JUIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2FzeW5jL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvYXN5bmMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDY1MTVhOTMuLmM4OTUyODIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvYXN5bmMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvYXN5bmMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zNywyMyArMzcsMjMgQEAKICAgICAgICAgc3RhdGljIEFkZE51bWJlcnNJbXBsU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiYXN5bmMtc2VydmljZSIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJhc3luYy1zZXJ2aWNlIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvU3luY1Rlc3QoKTsKICAgICAgICAgICAgIGNsaWVudC5kb0FTeW5jUG9sbFRlc3QoKTsKICAgICAgICAgICAgIGNsaWVudC5kb0FTeW5jQ2FsbEJhY2tUZXN0KCk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJhc3luYy1zZXJ2aWNlIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJhc3luYy1zZXJ2aWNlIik7CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgdm9pZCBkb1N5bmNUZXN0KCkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBBZGROdW1iZXJzSW1wbCBwb3J0ID0gc2VydmljZS5nZXRBZGROdW1iZXJzSW1wbFBvcnQoKTsKICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gcG9ydC5hZGROdW1iZXJzKDIyMjIsIDEyMzQpOwotCQlpZihyZXQhPSgyMjIyKzEyMzQpKSB7CisgICAgICAgIGlmKHJldCE9KDIyMjIrMTIzNCkpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGFkZCByZXN1bHQgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJhc3luYy1zZXJ2aWNlLXN5bmMtdGVzdCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImFzeW5jLXNlcnZpY2Utc3luYy10ZXN0Iiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKQEAgLTcwLDExICs3MCwxMSBAQAogICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcCAoMjAwMCk7CiAgICAgICAgICAgICAgICAgQWRkTnVtYmVyc1Jlc3BvbnNlIG91dHB1dCA9IHJlc3AuZ2V0KCk7CiAgICAgICAgICAgICAgICAgaW50IHJldCA9IG91dHB1dC5nZXRSZXR1cm4oKTsKLQkJaWYocmV0IT0oMTIzNCs1Njc4KSkgeworICAgICAgICBpZihyZXQhPSgxMjM0KzU2NzgpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBhZGQgcmVzdWx0ICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXN5bmMtc2VydmljZS1wb2xsLXRlc3QiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCX0KKyAgICAgICAgfQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJhc3luYy1zZXJ2aWNlLXBvbGwtdGVzdCIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CkBAIC05MiwxMSArOTIsMTEgQEAKICAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAgKDIwMDApOwogICAgICAgICAgICAgICAgIEFkZE51bWJlcnNSZXNwb25zZSBvdXRwdXQgPSBjYmguZ2V0UmVzcG9uc2UgKCk7CiAgICAgICAgICAgICAgICAgaW50IHJldCA9IG91dHB1dC5nZXRSZXR1cm4oKTsKLQkJaWYocmV0IT0oOTg3Nis1NDMyKSkgeworICAgICAgICBpZihyZXQhPSg5ODc2KzU0MzIpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBhZGQgcmVzdWx0ICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXN5bmMtc2VydmljZS1jYWxsYmFja2hhbmRsZXItdGVzdCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImFzeW5jLXNlcnZpY2UtY2FsbGJhY2toYW5kbGVyLXRlc3QiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9hc3luYy9jdXN0b20tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvYXN5bmMvY3VzdG9tLWNsaWVudC54bWwKaW5kZXggZjMwYzdhZS4uZGZkMjU3YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9hc3luYy9jdXN0b20tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2FzeW5jL2N1c3RvbS1jbGllbnQueG1sCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKICAgICB3c2RsTG9jYXRpb249Imh0dHA6Ly9IVFRQX0hPU1Q6SFRUUF9QT1JUL2FzeW5jc2VydmljZS93ZWJzZXJ2aWNlL0FzeW5jU2VydmljZT9XU0RMIgotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+ICAgIAorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+CiAgICAgPGJpbmRpbmdzIG5vZGU9Im5zMTpkZWZpbml0aW9ucyIgeG1sbnM6bnMxPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+CiAgICAgICAgIDxwYWNrYWdlIG5hbWU9ImNsaWVudCIvPgogICAgICAgICA8ZW5hYmxlQXN5bmNNYXBwaW5nPnRydWU8L2VuYWJsZUFzeW5jTWFwcGluZz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvYXN5bmMvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvYXN5bmMvd2ViLnhtbAppbmRleCBlNjY3NzI3Li42NGZhYWY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2FzeW5jL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9hc3luYy93ZWIueG1sCkBAIC0xOCwxNyArMTgsMTcgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgotCTxzZXJ2bGV0PgotCQk8c2VydmxldC1uYW1lPkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgotCTwvc2VydmxldD4KLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9Bc3luY1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8c2VydmxldC1uYW1lPkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgorICAgIDwvc2VydmxldD4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9Bc3luY1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvYnVpbGQueG1sCmluZGV4IGZmNWUwYTguLmE2NTViOWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvYnVpbGQueG1sCkBAIC0yMSw0NiArMjEsNDYgQEAKIF0+CiA8cHJvamVjdCBuYW1lPSJzZXJ2bGV0IGVuZHBvaW50IGFubm90YXRpb25zIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KLQk8YW50IGRpcj0ibm9uYW1lIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJub25hbWUyIiB0YXJnZXQ9ImFsbCIvPgotCTwhLS1hbnQgZGlyPSJleHRlcm5hbHdzZGwiIHRhcmdldD0iYWxsIi8tLT4KKyAgICA8YW50IGRpcj0ibm9uYW1lIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJub25hbWUyIiB0YXJnZXQ9ImFsbCIvPgorICAgIDwhLS1hbnQgZGlyPSJleHRlcm5hbHdzZGwiIHRhcmdldD0iYWxsIi8tLT4KIAotCTxhbnQgZGlyPSJkb2wtb3ZlcnJpZGUtMSIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iZG9sLW92ZXJyaWRlLTEiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJ3ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmciIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJ3ZWJzZXJ2aWNlcmVmLWxvb2t1cCIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9IndlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy0yIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJwcm92aWRlciIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ic3ZjaGFuZGxlci0xIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJzdmNoYW5kbGVyLTIiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InN2Y2hhbmRsZXItMyIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ic3ZjaGFuZGxlci00IiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJjbGllbnQtaGFuZGxlci0xIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJjbGllbnQtaGFuZGxlci0yIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJtdG9tIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJjb250YWluZXJyZXNvbHZlciIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iZW5kcG9pbnRhZGRyZXNzIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJmYXVsdCIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0id2Vic2VydmljZXJlZnMiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9IndhcnNlcnZpY2UiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9IndzZGx0b2phdmEiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9IndzY3R4dCIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ic29hcDEyIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJvbmV3YXkiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9Im1zZ2N0eHQiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9Im5vd2VieG1sIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJwcm92aWRlciIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ic3ZjaGFuZGxlci0xIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJzdmNoYW5kbGVyLTIiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InN2Y2hhbmRsZXItMyIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ic3ZjaGFuZGxlci00IiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJjbGllbnQtaGFuZGxlci0xIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJjbGllbnQtaGFuZGxlci0yIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJtdG9tIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJjb250YWluZXJyZXNvbHZlciIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iZW5kcG9pbnRhZGRyZXNzIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJmYXVsdCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0id2Vic2VydmljZXJlZnMiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9IndhcnNlcnZpY2UiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9IndzZGx0b2phdmEiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9IndzY3R4dCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ic29hcDEyIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJvbmV3YXkiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9Im1zZ2N0eHQiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9Im5vd2VieG1sIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0id2Vic2VydmljZXMxMy1yZXNwZWN0YmluZGluZyIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iYXN5bmMiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InJlc3RmdWwiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InJlc3RmdWwtMiIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0icGtnZWR3YXJzZXJ2aWNlIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJtYXBwZWRuYW1lIiB0YXJnZXQ9ImFsbCIvPgotCTwhLS08YW50IGRpcj0ibWJ5dGUiIHRhcmdldD0iYWxsIi8+LS0+Ci0JPGFudCBkaXI9InBvc3Rjb25zdHJ1Y3QiIHRhcmdldD0iYWxsIi8+Ci08IS0tCTxhbnQgZGlyPSJqYXhycGNpbmplY3Rpb24iIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InByb3ZpZGVyaGFuZGxlciIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0icHJlcGtnZWQtc3ZjLTEiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImxpYmRlcGVuZGVudCIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ic29hcHRjcCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iYXN5bmMiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InJlc3RmdWwiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InJlc3RmdWwtMiIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0icGtnZWR3YXJzZXJ2aWNlIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJtYXBwZWRuYW1lIiB0YXJnZXQ9ImFsbCIvPgorICAgIDwhLS08YW50IGRpcj0ibWJ5dGUiIHRhcmdldD0iYWxsIi8+LS0+CisgICAgPGFudCBkaXI9InBvc3Rjb25zdHJ1Y3QiIHRhcmdldD0iYWxsIi8+Cis8IS0tICAgIDxhbnQgZGlyPSJqYXhycGNpbmplY3Rpb24iIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InByb3ZpZGVyaGFuZGxlciIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0icHJlcGtnZWQtc3ZjLTEiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImxpYmRlcGVuZGVudCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ic29hcHRjcCIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9IndlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy1hcHBjbGllbnQiIHRhcmdldD0iYWxsIi8+CiAtLT4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzdiMGEyMi4uMDhlMmM4OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2xpZW50LWhhbmRsZXItMSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL2J1aWxkLnhtbAppbmRleCA5NzcyMDY3Li5lZTViMjZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS9idWlsZC54bWwKQEAgLTEyNywxMSArMTI3LDExIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5UZXN0Q2xpZW50Ij4KQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgICA8YXJnIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS93c2NsaWVudC9SZXF1ZXN0UHJvY2Vzc29yIi8+CiAgICAgICA8L2phdmE+CiAKLSA8IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPiAKKyA8IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLmhvc3R9IiB2YWx1ZT0iSFRUUF9IT1NUIi8+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAucG9ydH0iIHZhbHVlPSJIVFRQX1BPUlQiLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS9jbGllbnQtd2ViLnhtbAppbmRleCBkOGFhMmU1Li40ZGM4YmUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggYTZiNWY1ZC4uMTk2NmJlYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTYzLDkgKzYzLDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIFNVQlRSQUNUIFNFUlZJQ0UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiWzExMDldIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL2N1c3RvbS1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL2N1c3RvbS1jbGllbnQueG1sCmluZGV4IDgzOWZjYjEuLjQ4ZjE3MTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS9jdXN0b20tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvY3VzdG9tLWNsaWVudC54bWwKQEAgLTE3LDEyICsxNywxMiBAQAogCiAtLT4KIAotPGJpbmRpbmdzIAorPGJpbmRpbmdzCiAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKICAgICB4bWxuczpqYXhiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXhiIgogICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgogICAgIHdzZGxMb2NhdGlvbj0iU3VidHJhY3ROdW1iZXJzLndzZGwiCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIj4gICAgCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIj4KICAgICA8YmluZGluZ3Mgbm9kZT0ibnMxOmRlZmluaXRpb25zIiB4bWxuczpuczE9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KICAgICAgICAgPHBhY2thZ2UgbmFtZT0iY2xpZW50Ii8+CiAgICAgPC9iaW5kaW5ncz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS9jdXN0b20tc2VydmVyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS9jdXN0b20tc2VydmVyLnhtbAppbmRleCAxNzBkNjY3Li4wOTg4MTIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvY3VzdG9tLXNlcnZlci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL2N1c3RvbS1zZXJ2ZXIueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAKIC0tPgogCi08YmluZGluZ3MgCis8YmluZGluZ3MKICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogICAgIHhtbG5zOmpheGI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIiCiAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQppbmRleCAzOTg3MjdhLi40N2VhMzBkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogQGpha2FydGEuandzLldlYlNlcnZpY2UgKHNlcnZpY2VOYW1lPSJqdW5ranVua2p1bmsiLCBlbmRwb2ludEludGVyZmFjZT0iZW5kcG9pbnQuU3VidHJhY3ROdW1iZXJzUG9ydFR5cGUiKQogcHVibGljIGNsYXNzIFN1YnRyYWN0TnVtYmVyc0ltcGwgaW1wbGVtZW50cyBTdWJ0cmFjdE51bWJlcnNQb3J0VHlwZSB7Ci0gICAgCisKICAgICBwdWJsaWMgaW50IHN1YnRyYWN0TnVtYmVycyAoaW50IG51bWJlcjEsIGludCBudW1iZXIyKSB7CiAgICAgICAgIHJldHVybiBudW1iZXIxIC0gbnVtYmVyMjsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS93ZWIueG1sCmluZGV4IDQzNDI0MzQuLjRhMWIyODMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS93ZWIueG1sCkBAIC0xOCwyOSArMTgsMjkgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPlN1YnRyYWN0TnVtYmVycyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGVzY3JpcHRpb24+U3VidHJhY3ROdW1iZXJzIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU3VidHJhY3ROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5TdWJ0cmFjdE51bWJlcnNXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU3VidHJhY3ROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5TdWJ0cmFjdE51bWJlcnNXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL1N1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvU3VidHJhY3ROdW1iZXJzU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS93ZWJjbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMWY3OWE5NC4uOTUwNjcxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL3dlYmNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNyw4ICsyNyw4IEBACiAKICAgICAgICBAV2ViU2VydmljZVJlZih3c2RsTG9jYXRpb249IldFQi1JTkYvd3NkbC9TdWJ0cmFjdE51bWJlcnMud3NkbCIpIFN1YnRyYWN0TnVtYmVyc1NlcnZpY2Ugc2VydmljZTsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS93ZWJjbGllbnQvVGVzdEhhbmRsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS93ZWJjbGllbnQvVGVzdEhhbmRsZXIuamF2YQppbmRleCAzNWQ3MDUzLi5jNTNiMjJkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvd2ViY2xpZW50L1Rlc3RIYW5kbGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL3dlYmNsaWVudC9UZXN0SGFuZGxlci5qYXZhCkBAIC0yOCwxMSArMjgsMTEgQEAKIGltcG9ydCBqYWthcnRhLnhtbC5zb2FwLio7CiAKIHB1YmxpYyBjbGFzcyBUZXN0SGFuZGxlciBpbXBsZW1lbnRzIFNPQVBIYW5kbGVyPFNPQVBNZXNzYWdlQ29udGV4dD4gewotICAgIAorCiAgICAgcHVibGljIFNldDxRTmFtZT4gZ2V0SGVhZGVycygpIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiAgICAgU3RyaW5nIHBvc3RDb25zdFN0cmluZyA9ICJOT1RfSU5JVElBTElaRUQiOwogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhhbmRsZXIgUG9zdENvbnN0cnVjdCBub3QgY2FsbGVkIHByb3BlcnR5Iik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwb3N0Q29uc3RTdHJpbmcgPSAiICsgcG9zdENvbnN0U3RyaW5nKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoInVuZGVmaW5lZCIuZXF1YWxzKGluamVjdGVkU3RyaW5nKSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGFuZGxlciBub3QgaW5qZWN0ZWQgcHJvcGVydHkiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgICAgICAgICBTT0FQTWVzc2FnZUNvbnRleHQgc21jID0gKFNPQVBNZXNzYWdlQ29udGV4dCkgY29udGV4dDsKICAgICAgICAgICAgIFNPQVBNZXNzYWdlIG1lc3NhZ2UgPSBzbWMuZ2V0TWVzc2FnZSgpOwogICAgICAgICAgICAgU09BUEJvZHkgYm9keSA9IG1lc3NhZ2UuZ2V0U09BUEJvZHkoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTT0FQRWxlbWVudCBwYXJhbUVsZW1lbnQgPQogICAgICAgICAgICAgICAgIChTT0FQRWxlbWVudCkgYm9keS5nZXRGaXJzdENoaWxkKCkuZ2V0Rmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgaW50IG51bWJlciA9IEludGVnZXIucGFyc2VJbnQocGFyYW1FbGVtZW50LmdldFZhbHVlKCkpOwpAQCAtNjksMTEgKzY5LDExIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlRmF1bHQoU09BUE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgY2xvc2UoTWVzc2FnZUNvbnRleHQgY29udGV4dCkge30KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvYnVpbGQucHJvcGVydGllcwppbmRleCAwYTc2OTVjLi45YzU1MTlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjbGllbnQtaGFuZGxlci0yIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvYnVpbGQueG1sCmluZGV4IDdiYzg1MDYuLmIxM2IxMjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2J1aWxkLnhtbApAQCAtODcsNyArODcsNyBAQAogICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB2YWx1ZT0iJHtodHRwLmhvc3R9IiB0b2tlbj0iSFRUUF9IT1NUIi8+CiAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHZhbHVlPSIke2h0dHAucG9ydH0iIHRva2VuPSJIVFRQX1BPUlQiLz4KICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMiCi0gICAgICAgICAgICBjbGFzc3BhdGhyZWY9ImNsYXNzLnBhdGgiIAorICAgICAgICAgICAgY2xhc3NwYXRocmVmPSJjbGFzcy5wYXRoIgogICAgICAgICAgICAgaW5jbHVkZXM9IndlYmNsaWVudC8qKiIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jbGllbnQtd2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi93ZWIueG1sIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC1zdW4td2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9zdW4td2ViLnhtbCIvPgpAQCAtMTI5LDExICsxMjksMTEgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CkBAIC0xNDMsNyArMTQzLDcgQEAKICAgICAgICAgPGFyZyB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vd3NjbGllbnQvUmVxdWVzdFByb2Nlc3NvciIvPgogICAgICAgPC9qYXZhPgogCi08IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPiAKKzwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAuaG9zdH0iIHZhbHVlPSJIVFRQX0hPU1QiLz4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9IndlYmNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5wb3J0fSIgdmFsdWU9IkhUVFBfUE9SVCIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2NsaWVudC13ZWIueG1sCmluZGV4IDAyN2RmY2UuLmI0YmJmNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCAxODYwNTQ5Li45ZTY4NjVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjMsOSArNjMsOSBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgU1VCVFJBQ1QgU0VSVklDRSBJUyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJbMTExNV0iKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvY3VzdG9tLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvY3VzdG9tLWNsaWVudC54bWwKaW5kZXggODM5ZmNiMS4uNDhmMTcxNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2N1c3RvbS1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi9jdXN0b20tY2xpZW50LnhtbApAQCAtMTcsMTIgKzE3LDEyIEBACiAKIC0tPgogCi08YmluZGluZ3MgCis8YmluZGluZ3MKICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogICAgIHhtbG5zOmpheGI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIiCiAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCiAgICAgd3NkbExvY2F0aW9uPSJTdWJ0cmFjdE51bWJlcnMud3NkbCIKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPiAgICAKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPgogICAgIDxiaW5kaW5ncyBub2RlPSJuczE6ZGVmaW5pdGlvbnMiIHhtbG5zOm5zMT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgogICAgICAgICA8cGFja2FnZSBuYW1lPSJjbGllbnQiLz4KICAgICA8L2JpbmRpbmdzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2N1c3RvbS1zZXJ2ZXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2N1c3RvbS1zZXJ2ZXIueG1sCmluZGV4IDE3MGQ2NjcuLjA5ODgxMjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi9jdXN0b20tc2VydmVyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvY3VzdG9tLXNlcnZlci54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIAogLS0+CiAKLTxiaW5kaW5ncyAKKzxiaW5kaW5ncwogICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgICAgeG1sbnM6amF4Yj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4YiIKICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCmluZGV4IGY2MDdlNjIuLjVlMDUwOTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQpAQCAtMTksNyArMTksNyBAQAogQGpha2FydGEuandzLkhhbmRsZXJDaGFpbihuYW1lPSJzb21lIG5hbWUiLCBmaWxlPSJteWhhbmRsZXIueG1sIikKIEBqYWthcnRhLmp3cy5XZWJTZXJ2aWNlIChzZXJ2aWNlTmFtZT0ianVua2p1bmtqdW5rIiwgZW5kcG9pbnRJbnRlcmZhY2U9ImVuZHBvaW50LlN1YnRyYWN0TnVtYmVyc1BvcnRUeXBlIikKIHB1YmxpYyBjbGFzcyBTdWJ0cmFjdE51bWJlcnNJbXBsIGltcGxlbWVudHMgU3VidHJhY3ROdW1iZXJzUG9ydFR5cGUgewotICAgIAorCiAgICAgcHVibGljIGludCBzdWJ0cmFjdE51bWJlcnMgKGludCBudW1iZXIxLCBpbnQgbnVtYmVyMikgewogU3lzdGVtLm91dC5wcmludGxuKCJJIGdvdCBuMSA9ICIgKyBudW1iZXIxICsgIiBhbmQgbjIgPSAiICsgbnVtYmVyMik7CiAgICAgICAgIHJldHVybiBudW1iZXIxIC0gbnVtYmVyMjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi9lbmRwb2ludC9UZXN0SGFuZGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2VuZHBvaW50L1Rlc3RIYW5kbGVyLmphdmEKaW5kZXggNmVlN2EyYy4uNDQyNzIxNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2VuZHBvaW50L1Rlc3RIYW5kbGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2VuZHBvaW50L1Rlc3RIYW5kbGVyLmphdmEKQEAgLTI2LDE3ICsyNiwxNyBAQAogaW1wb3J0IGpha2FydGEueG1sLnNvYXAuKjsKIAogcHVibGljIGNsYXNzIFRlc3RIYW5kbGVyIGltcGxlbWVudHMgU09BUEhhbmRsZXI8U09BUE1lc3NhZ2VDb250ZXh0PiB7Ci0gICAgCisKICAgICBwdWJsaWMgU2V0PFFOYW1lPiBnZXRIZWFkZXJzKCkgewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVNZXNzYWdlKFNPQVBNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTT0FQTWVzc2FnZUNvbnRleHQgc21jID0gKFNPQVBNZXNzYWdlQ29udGV4dCkgY29udGV4dDsKICAgICAgICAgICAgIFNPQVBNZXNzYWdlIG1lc3NhZ2UgPSBzbWMuZ2V0TWVzc2FnZSgpOwogICAgICAgICAgICAgU09BUEJvZHkgYm9keSA9IG1lc3NhZ2UuZ2V0U09BUEJvZHkoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTT0FQRWxlbWVudCBwYXJhbUVsZW1lbnQgPQogICAgICAgICAgICAgICAgIChTT0FQRWxlbWVudCkgYm9keS5nZXRGaXJzdENoaWxkKCkuZ2V0Rmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgaW50IG51bWJlciA9IEludGVnZXIucGFyc2VJbnQocGFyYW1FbGVtZW50LmdldFZhbHVlKCkpOwpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgICAgIH0gY2F0Y2ggKFNPQVBFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCVN5c3RlbS5vdXQucHJpbnRsbigiVklKJ3MgU0VSVkVSIFNJREUgVEVTVCBIQU5ETEVSIENBTExFRCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVklKJ3MgU0VSVkVSIFNJREUgVEVTVCBIQU5ETEVSIENBTExFRCIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVGYXVsdChTT0FQTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNsb3NlKE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHt9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL3dlYi54bWwKaW5kZXggNDM0MjQzNC4uNGExYjI4MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL3dlYi54bWwKQEAgLTE4LDI5ICsxOCwyOSBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+U3VidHJhY3ROdW1iZXJzIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkZXNjcmlwdGlvbj5TdWJ0cmFjdE51bWJlcnMgU2VydmljZTwvZGVzY3JpcHRpb24+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBTdWJ0cmFjdE51bWJlcnMgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPlN1YnRyYWN0TnVtYmVyc1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LlN1YnRyYWN0TnVtYmVyc0ltcGw8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBTdWJ0cmFjdE51bWJlcnMgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPlN1YnRyYWN0TnVtYmVyc1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LlN1YnRyYWN0TnVtYmVyc0ltcGw8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvU3VidHJhY3ROdW1iZXJzU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvd2ViY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL3dlYmNsaWVudC9DbGllbnQuamF2YQppbmRleCBkMDFlYTQ1Li5iNGY2M2JmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvd2ViY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi93ZWJjbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDggKzI4LDggQEAKICAgICAgICAgQGpha2FydGEuandzLkhhbmRsZXJDaGFpbihuYW1lPSJzb21lIG5hbWUiLCBmaWxlPSJteWhhbmRsZXIueG1sIikKICAgICAgICAgQFdlYlNlcnZpY2VSZWYgU3VidHJhY3ROdW1iZXJzU2VydmljZSBzZXJ2aWNlOwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL3dlYmNsaWVudC9UZXN0SGFuZGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL3dlYmNsaWVudC9UZXN0SGFuZGxlci5qYXZhCmluZGV4IDRhNmFkNWYuLjQ4NDBkZTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi93ZWJjbGllbnQvVGVzdEhhbmRsZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvd2ViY2xpZW50L1Rlc3RIYW5kbGVyLmphdmEKQEAgLTI2LDE3ICsyNiwxNyBAQAogaW1wb3J0IGpha2FydGEueG1sLnNvYXAuKjsKIAogcHVibGljIGNsYXNzIFRlc3RIYW5kbGVyIGltcGxlbWVudHMgU09BUEhhbmRsZXI8U09BUE1lc3NhZ2VDb250ZXh0PiB7Ci0gICAgCisKICAgICBwdWJsaWMgU2V0PFFOYW1lPiBnZXRIZWFkZXJzKCkgewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVNZXNzYWdlKFNPQVBNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTT0FQTWVzc2FnZUNvbnRleHQgc21jID0gKFNPQVBNZXNzYWdlQ29udGV4dCkgY29udGV4dDsKICAgICAgICAgICAgIFNPQVBNZXNzYWdlIG1lc3NhZ2UgPSBzbWMuZ2V0TWVzc2FnZSgpOwogICAgICAgICAgICAgU09BUEJvZHkgYm9keSA9IG1lc3NhZ2UuZ2V0U09BUEJvZHkoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTT0FQRWxlbWVudCBwYXJhbUVsZW1lbnQgPQogICAgICAgICAgICAgICAgIChTT0FQRWxlbWVudCkgYm9keS5nZXRGaXJzdENoaWxkKCkuZ2V0Rmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgaW50IG51bWJlciA9IEludGVnZXIucGFyc2VJbnQocGFyYW1FbGVtZW50LmdldFZhbHVlKCkpOwpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgICAgIH0gY2F0Y2ggKFNPQVBFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCVN5c3RlbS5vdXQucHJpbnRsbigiVklKJ3MgQ0xJRU5UIFNJREUgVEVTVCBIQU5ETEVSIENBTExFRCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVklKJ3MgQ0xJRU5UIFNJREUgVEVTVCBIQU5ETEVSIENBTExFRCIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVGYXVsdChTT0FQTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNsb3NlKE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHt9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9idWlsZC54bWwKaW5kZXggN2MzZmE4Ni4uMThkMDk2YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9idWlsZC54bWwKQEAgLTIxLDEyICsyMSwxMiBAQAogXT4KIDxwcm9qZWN0IG5hbWU9InNlcnZsZXQgZW5kcG9pbnQgYW5ub3RhdGlvbnMiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAgICAgPHRhcmdldCBuYW1lPSJhbGwiPgotCTxhbnQgZGlyPSJzdmMxIiB0YXJnZXQ9InNldHVwIi8+Ci0JPGFudCBkaXI9InN2YzIiIHRhcmdldD0ic2V0dXAiLz4KLQk8YW50IGRpcj0iY2xpZW50IiB0YXJnZXQ9InNldHVwIi8+Ci0JPGFudCBkaXI9ImNsaWVudCIgdGFyZ2V0PSJydW50ZXN0Ii8+Ci0JPGFudCBkaXI9InN2YzEiIHRhcmdldD0iY2xlYW51cCIvPgotCTxhbnQgZGlyPSJzdmMyIiB0YXJnZXQ9ImNsZWFudXAiLz4KLQk8YW50IGRpcj0iY2xpZW50IiB0YXJnZXQ9ImNsZWFudXAiLz4KKyAgICA8YW50IGRpcj0ic3ZjMSIgdGFyZ2V0PSJzZXR1cCIvPgorICAgIDxhbnQgZGlyPSJzdmMyIiB0YXJnZXQ9InNldHVwIi8+CisgICAgPGFudCBkaXI9ImNsaWVudCIgdGFyZ2V0PSJzZXR1cCIvPgorICAgIDxhbnQgZGlyPSJjbGllbnQiIHRhcmdldD0icnVudGVzdCIvPgorICAgIDxhbnQgZGlyPSJzdmMxIiB0YXJnZXQ9ImNsZWFudXAiLz4KKyAgICA8YW50IGRpcj0ic3ZjMiIgdGFyZ2V0PSJjbGVhbnVwIi8+CisgICAgPGFudCBkaXI9ImNsaWVudCIgdGFyZ2V0PSJjbGVhbnVwIi8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL2NsaWVudC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9jbGllbnQvYnVpbGQucHJvcGVydGllcwppbmRleCAyZDU5NTJlLi5iMWFlY2RhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL2NsaWVudC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvY2xpZW50L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY29udGFpbmVycmVzb2x2ZXItY2xpZW50Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvY2xpZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvY2xpZW50L2J1aWxkLnhtbAppbmRleCA5MDEzMzViLi4zMjNjMDBlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL2NsaWVudC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9jbGllbnQvYnVpbGQueG1sCkBAIC02OCw3ICs2OCw3IEBACiAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHZhbHVlPSIke2h0dHAuaG9zdH0iIHRva2VuPSJIVFRQX0hPU1QiLz4KICAgICAgIDxyZXBsYWNlIGZpbGU9IndlYmNsaWVudC9DbGllbnQuamF2YSIgdmFsdWU9IiR7aHR0cC5wb3J0fSIgdG9rZW49IkhUVFBfUE9SVCIvPgogICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyIKLSAgICAgICAgICAgICAKKwogICAgICAgICAgICAgaW5jbHVkZXM9IndlYmNsaWVudC8qKiI+CiAgICAgICAgPGNsYXNzcGF0aCByZWZpZD0iY2xhc3NwYXRoIi8+CiAgICAgICA8L2phdmFjPgpAQCAtMTAzLDggKzEwMyw4IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LlRlc3RDbGllbnQiPgpAQCAtMTE1LDcgKzExNSw3IEBACiAgICAgICA8L2phdmE+CiAKIAotPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4gCis8IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLmhvc3R9IiB2YWx1ZT0iSFRUUF9IT1NUIi8+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAucG9ydH0iIHZhbHVlPSJIVFRQX1BPUlQiLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvY2xpZW50L2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9jbGllbnQvY2xpZW50LXdlYi54bWwKaW5kZXggMDI3ZGZjZS4uYjRiYmY1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9jbGllbnQvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9jbGllbnQvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9jbGllbnQvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvY2xpZW50L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggNjdhMGM0NS4uNmRlZWMzYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9jbGllbnQvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL2NsaWVudC9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC02MywxMSArNjMsMTEgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIFNFUlZJQ0UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiW1dlYlN2Y1Rlc3QtSGVsbG8yIEhpXSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJbV2ViU3ZjVGVzdC1IZWxsbzEgSGldIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9jbGllbnQvd2ViY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9jbGllbnQvd2ViY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGYwNmMxMWMuLjdhMDVkM2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvY2xpZW50L3dlYmNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL2NsaWVudC93ZWJjbGllbnQvQ2xpZW50LmphdmEKQEAgLTMxLDggKzMxLDggQEAKICAgICAgICBAV2ViU2VydmljZVJlZih3c2RsTG9jYXRpb249Imh0dHA6Ly9IVFRQX0hPU1Q6SFRUUF9QT1JUL2NvbnRhaW5lcnJlc29sdmVyLWFwcDEvSGVsbG8xU2VydmljZT93c2RsIikgSGVsbG8xU2VydmljZSBzZXJ2aWNlMTsKICAgICAgICBAV2ViU2VydmljZVJlZih3c2RsTG9jYXRpb249Imh0dHA6Ly9IVFRQX0hPU1Q6SFRUUF9QT1JUL2NvbnRhaW5lcnJlc29sdmVyLWFwcDIvSGVsbG8yU2VydmljZT93c2RsIikgSGVsbG8yU2VydmljZSBzZXJ2aWNlMjsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvc3ZjMS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9zdmMxL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYmYwMjY1NC4uZDJkYTQyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9zdmMxL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9zdmMxL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDggKzE1LDggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNvbnRhaW5lcnJlc29sdmVyLWFwcDEiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL3N2YzEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9zdmMxL2J1aWxkLnhtbAppbmRleCA2ZWVlNTk1Li5mYWFlMTI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL3N2YzEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvc3ZjMS9idWlsZC54bWwKQEAgLTY1LDYgKzY1LDYgQEAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiA8L3Byb2plY3Q+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvc3ZjMS9lbmRwb2ludDEvSGVsbG8xLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL3N2YzEvZW5kcG9pbnQxL0hlbGxvMS5qYXZhCmluZGV4IDY5MWMzOTguLjRhNDY0ZjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvc3ZjMS9lbmRwb2ludDEvSGVsbG8xLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9zdmMxL2VuZHBvaW50MS9IZWxsbzEuamF2YQpAQCAtMjUsMTAgKzI1LDEwIEBACiAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS5jb20vSGVsbG8xIgogKQogcHVibGljIGNsYXNzIEhlbGxvMSB7Ci0JcHVibGljIEhlbGxvMSgpIHt9CisgICAgcHVibGljIEhlbGxvMSgpIHt9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhlbGxvMSIsIGFjdGlvbj0idXJuOlNheUhlbGxvMSIpCi0JcHVibGljIFN0cmluZyBzYXlIZWxsbzEoU3RyaW5nIHdobykgewotCQlyZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8xICIgKyB3aG87Ci0JfQorICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGVsbG8xIiwgYWN0aW9uPSJ1cm46U2F5SGVsbG8xIikKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvMShTdHJpbmcgd2hvKSB7CisgICAgICAgIHJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbzEgIiArIHdobzsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL3N2YzIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvc3ZjMi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGUzYjI4MDkuLjNjZTcxMjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvc3ZjMi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvc3ZjMi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw4ICsxNSw4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjb250YWluZXJyZXNvbHZlci1hcHAyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9zdmMyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvc3ZjMi9idWlsZC54bWwKaW5kZXggMTA4MWRiNC4uYmFhNmQ1ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9zdmMyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL3N2YzIvYnVpbGQueG1sCkBAIC02NSw2ICs2NSw2IEBACiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogPC9wcm9qZWN0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL3N2YzIvZW5kcG9pbnQyL0hlbGxvMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9zdmMyL2VuZHBvaW50Mi9IZWxsbzIuamF2YQppbmRleCBjMzJmZTdkLi4yNTkzMTMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL3N2YzIvZW5kcG9pbnQyL0hlbGxvMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvc3ZjMi9lbmRwb2ludDIvSGVsbG8yLmphdmEKQEAgLTI1LDEwICsyNSwxMCBAQAogICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2V4YW1wbGUuY29tL0hlbGxvMiIKICkKIHB1YmxpYyBjbGFzcyBIZWxsbzIgewotCXB1YmxpYyBIZWxsbzIoKSB7fQorICAgIHB1YmxpYyBIZWxsbzIoKSB7fQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbzIiLCBhY3Rpb249InVybjpTYXlIZWxsbzIiKQotCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8yKFN0cmluZyB3aG8pIHsKLQkJcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvMiAiICsgd2hvOwotCX0KKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhlbGxvMiIsIGFjdGlvbj0idXJuOlNheUhlbGxvMiIpCisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbzIoU3RyaW5nIHdobykgeworICAgICAgICByZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8yICIgKyB3aG87CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9kb2wtb3ZlcnJpZGUtMS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9kb2wtb3ZlcnJpZGUtMS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQ1NjdhYjkuLjk0NjY1ODcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZG9sLW92ZXJyaWRlLTEiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9kb2wtb3ZlcnJpZGUtMS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL2J1aWxkLnhtbAppbmRleCA4Zjk2NDU0Li40Yjk5ZTFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL2J1aWxkLnhtbApAQCAtNjYsNyArNjYsNyBAQAogICAgICAgICAgIHZhbHVlPSItd3NkbGxvY2F0aW9uIFdFQi1JTkYvd3NkbC9TdWJ0cmFjdE51bWJlcnMud3NkbCAtYiBjdXN0b20tc2VydmVyLnhtbCAta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfSAke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9kb2wtb3ZlcnJpZGUtMS9TdWJ0cmFjdE51bWJlcnMud3NkbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlIi8+Ci0gICAgIDxjb3B5IGZpbGU9IlN1YnRyYWN0TnVtYmVycy53c2RsIiB0b2Rpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL2xvY2Fsd3NkbCIvPiAKKyAgICAgPGNvcHkgZmlsZT0iU3VidHJhY3ROdW1iZXJzLndzZGwiIHRvZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbG9jYWx3c2RsIi8+CiAgICAgICA8Y29weSBmaWxlPSJzdW4td2ViLnhtbC50ZW1wbGF0ZSIgdG9maWxlPSJzdW4td2ViLnhtbCIvPgogICAgICAgPHJlcGxhY2UgZmlsZT0ic3VuLXdlYi54bWwiPgogICAgICAgICA8cmVwbGFjZWZpbHRlciB0b2tlbj0iJVRPS0VOJSIgdmFsdWU9ImZpbGU6JHtlbnYuQVBTX0hPTUV9L2J1aWxkL2xvY2Fsd3NkbCIvPgpAQCAtMTM3LDExICsxMzcsMTEgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LlRlc3RDbGllbnQiPgpAQCAtMTUxLDcgKzE1MSw3IEBACiAgICAgICAgIDxhcmcgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L3dzY2xpZW50L1JlcXVlc3RQcm9jZXNzb3IiLz4KICAgICAgIDwvamF2YT4KIAotICAgICAgICAgIDwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+IAorICAgICAgICAgIDwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAuaG9zdH0iIHZhbHVlPSJIVFRQX0hPU1QiLz4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9IndlYmNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5wb3J0fSIgdmFsdWU9IkhUVFBfUE9SVCIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9kb2wtb3ZlcnJpZGUtMS9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvY2xpZW50LXdlYi54bWwKaW5kZXggMDI3ZGZjZS4uYjRiYmY1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9kb2wtb3ZlcnJpZGUtMS9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCBlMGU5M2QwLi41YjE4MWI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9kb2wtb3ZlcnJpZGUtMS9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC02Myw5ICs2Myw5IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBTVUJUUkFDVCBTRVJWSUNFIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlsxMTExXSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvY3VzdG9tLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL2N1c3RvbS1jbGllbnQueG1sCmluZGV4IDgzOWZjYjEuLjQ4ZjE3MTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvY3VzdG9tLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9kb2wtb3ZlcnJpZGUtMS9jdXN0b20tY2xpZW50LnhtbApAQCAtMTcsMTIgKzE3LDEyIEBACiAKIC0tPgogCi08YmluZGluZ3MgCis8YmluZGluZ3MKICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogICAgIHhtbG5zOmpheGI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIiCiAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCiAgICAgd3NkbExvY2F0aW9uPSJTdWJ0cmFjdE51bWJlcnMud3NkbCIKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPiAgICAKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPgogICAgIDxiaW5kaW5ncyBub2RlPSJuczE6ZGVmaW5pdGlvbnMiIHhtbG5zOm5zMT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgogICAgICAgICA8cGFja2FnZSBuYW1lPSJjbGllbnQiLz4KICAgICA8L2JpbmRpbmdzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9kb2wtb3ZlcnJpZGUtMS9jdXN0b20tc2VydmVyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvY3VzdG9tLXNlcnZlci54bWwKaW5kZXggMTcwZDY2Ny4uMDk4ODEyMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9kb2wtb3ZlcnJpZGUtMS9jdXN0b20tc2VydmVyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL2N1c3RvbS1zZXJ2ZXIueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAKIC0tPgogCi08YmluZGluZ3MgCis8YmluZGluZ3MKICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogICAgIHhtbG5zOmpheGI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIiCiAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCmluZGV4IGRjOGEyMzAuLjlhOWZkZmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIEBqYWthcnRhLmp3cy5XZWJTZXJ2aWNlIChzZXJ2aWNlTmFtZT0ianVua2p1bmtqdW5rIiwgcG9ydE5hbWU9IlN1YnRyYWN0TnVtYmVyc1BvcnRUeXBlIiwgZW5kcG9pbnRJbnRlcmZhY2U9ImVuZHBvaW50LlN1YnRyYWN0TnVtYmVyc1BvcnRUeXBlIikKIHB1YmxpYyBjbGFzcyBTdWJ0cmFjdE51bWJlcnNJbXBsIGltcGxlbWVudHMgU3VidHJhY3ROdW1iZXJzUG9ydFR5cGUgewotICAgIAorCiAgICAgcHVibGljIGludCBzdWJ0cmFjdE51bWJlcnMgKGludCBudW1iZXIxLCBpbnQgbnVtYmVyMikgewogICAgICAgICByZXR1cm4gbnVtYmVyMSAtIG51bWJlcjI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9kb2wtb3ZlcnJpZGUtMS93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9kb2wtb3ZlcnJpZGUtMS93ZWIueG1sCmluZGV4IDQzNDI0MzQuLjRhMWIyODMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL3dlYi54bWwKQEAgLTE4LDI5ICsxOCwyOSBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+U3VidHJhY3ROdW1iZXJzIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkZXNjcmlwdGlvbj5TdWJ0cmFjdE51bWJlcnMgU2VydmljZTwvZGVzY3JpcHRpb24+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBTdWJ0cmFjdE51bWJlcnMgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPlN1YnRyYWN0TnVtYmVyc1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LlN1YnRyYWN0TnVtYmVyc0ltcGw8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBTdWJ0cmFjdE51bWJlcnMgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPlN1YnRyYWN0TnVtYmVyc1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LlN1YnRyYWN0TnVtYmVyc0ltcGw8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvU3VidHJhY3ROdW1iZXJzU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvd2ViY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGM4YzE1MGQuLjA1YmM5MmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvd2ViY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNyw4ICsyNyw4IEBACiAKICAgICAgICAgQFdlYlNlcnZpY2VSZWYgU3VidHJhY3ROdW1iZXJzU2VydmljZSBzZXJ2aWNlOwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9lbmRwb2ludGFkZHJlc3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZW5kcG9pbnRhZGRyZXNzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjU1YTUzZi4uZDI2MTA0OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9lbmRwb2ludGFkZHJlc3MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2VuZHBvaW50YWRkcmVzcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw5ICsxNSw5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlbmRwb2ludGFkZHJlc3MiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9lbmRwb2ludGFkZHJlc3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9lbmRwb2ludGFkZHJlc3MvYnVpbGQueG1sCmluZGV4IGRjZWI3YzguLjMyYTcwNGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZW5kcG9pbnRhZGRyZXNzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2VuZHBvaW50YWRkcmVzcy9idWlsZC54bWwKQEAgLTc1LDcgKzc1LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2VuZHBvaW50YWRkcmVzcy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2VuZHBvaW50YWRkcmVzcy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMzI2ODUyNi4uYjg5MDcwOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9lbmRwb2ludGFkZHJlc3MvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZW5kcG9pbnRhZGRyZXNzL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzAsMTAgKzMwLDEwIEBACiAKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImVuZHBvaW50YWRkcmVzcyIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlbmRwb2ludGFkZHJlc3MiKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgiZW5kcG9pbnRhZGRyZXNzIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlbmRwb2ludGFkZHJlc3MiKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewpAQCAtNDEsMTcgKzQxLDE3IEBACiAKICAgICAgICAgICAgICAgICBVUkwgc2VydmljZUluZm8gPSBuZXcgVVJMIChhcmdzWzBdKTsKICAgICAgICAgICAgICAgICBVUkxDb25uZWN0aW9uIGNvbiA9IHNlcnZpY2VJbmZvLm9wZW5Db25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoY29uLmdldElucHV0U3RyZWFtKCkpKTsgCisgICAgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoY29uLmdldElucHV0U3RyZWFtKCkpKTsKIAogICAgICAgICAgICAgICAgIFN0cmluZyBpbnB1dExpbmU7Ci0gICAgICAgICAgICAgICAgaW50IGluZGV4PTA7IAorICAgICAgICAgICAgICAgIGludCBpbmRleD0wOwogICAgICAgICAgICAgICAgIHdoaWxlICgoaW5wdXRMaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIGlmICgoaW5kZXg9IGlucHV0TGluZS5pbmRleE9mKCJocmVmPSIpKT4wKXsKIAotICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB1cmwgPSBpbnB1dExpbmUuc3Vic3RyaW5nKGluZGV4KzEpOyAgCisgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHVybCA9IGlucHV0TGluZS5zdWJzdHJpbmcoaW5kZXgrMSk7CiAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVybC5pbmRleE9mKCJodHRwOiIpPjApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZW5kcG9pbnRhZGRyZXNzIiwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaW5wdXRMaW5lKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9lbmRwb2ludGFkZHJlc3MvZW5kcG9pbnQvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZW5kcG9pbnRhZGRyZXNzL2VuZHBvaW50L0hlbGxvLmphdmEKaW5kZXggYzU3MjdiMi4uMTRiNmUwYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9lbmRwb2ludGFkZHJlc3MvZW5kcG9pbnQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2VuZHBvaW50YWRkcmVzcy9lbmRwb2ludC9IZWxsby5qYXZhCkBAIC0yNSwxMCArMjUsMTAgQEAKICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLmNvbS9IZWxsbyIKICkKIHB1YmxpYyBjbGFzcyBIZWxsbyB7Ci0JcHVibGljIEhlbGxvKCkge30KKyAgICBwdWJsaWMgSGVsbG8oKSB7fQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKLQkJcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvICIgKyB3aG87Ci0JfQorICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7CisgICAgICAgIHJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZW5kcG9pbnRhZGRyZXNzL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2VuZHBvaW50YWRkcmVzcy93ZWIueG1sCmluZGV4IGY1MWNjYzAuLjU2NGNkNGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZW5kcG9pbnRhZGRyZXNzL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9lbmRwb2ludGFkZHJlc3Mvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgSGVsbG8gU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5IZWxsb1dBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgSGVsbG8gU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5IZWxsb1dBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgSGVsbG8gV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkhlbGxvV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkhlbGxvPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkhlbGxvPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgSGVsbG8gV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkhlbGxvV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkhlbGxvPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkhlbGxvPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkhlbGxvPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vSGVsbG9TZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkhlbGxvPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vSGVsbG9TZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2V4dGVybmFsd3NkbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9leHRlcm5hbHdzZGwvYnVpbGQucHJvcGVydGllcwppbmRleCAwNThmOTYxLi4xNTMyNWE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2V4dGVybmFsd3NkbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZXh0ZXJuYWx3c2RsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDkgKzE1LDkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImV4dGVybmFsd3NkbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi90ZXN0LXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZXh0ZXJuYWx3c2RsL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZXh0ZXJuYWx3c2RsL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAzYWU1NDZkLi5hNTIxZjZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2V4dGVybmFsd3NkbC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9leHRlcm5hbHdzZGwvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCwxNSArMjgsMTUgQEAKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotICAgICAgICAKLQlAV2ViU2VydmljZVJlZgkKLQlzdGF0aWMgSGVsbG9TZXJ2aWNlIHNlcnZpY2U7CisKKyAgICBAV2ViU2VydmljZVJlZgorICAgIHN0YXRpYyBIZWxsb1NlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLXNpbXBsZS1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLXNpbXBsZS1hbm5vdGF0aW9uIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWFubm90YXRpb24iKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgICAgICAgICAgICAgSGVsbG8gcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG8oKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7aTwxMDtpKyspIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIgKyBhcmdzWzBdKTsKLQkJICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9Ci0JCSAgICBpZihyZXQuaW5kZXhPZihhcmdzWzBdKSA9PSAtMSkgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYocmV0LmluZGV4T2YoYXJnc1swXSkgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9leHRlcm5hbHdzZGwvZW5kcG9pbnQvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZXh0ZXJuYWx3c2RsL2VuZHBvaW50L0hlbGxvLmphdmEKaW5kZXggNzQ3NWM2NS4uMTI1N2E5OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9leHRlcm5hbHdzZGwvZW5kcG9pbnQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2V4dGVybmFsd3NkbC9lbmRwb2ludC9IZWxsby5qYXZhCkBAIC0yNiwxMCArMjYsMTAgQEAKICAgICB3c2RsTG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC93c2RsL0hlbGxvU2VydmljZS53c2RsIgogKQogcHVibGljIGNsYXNzIEhlbGxvIHsKLQlwdWJsaWMgSGVsbG8oKSB7fQorICAgIHB1YmxpYyBIZWxsbygpIHt9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhlbGxvIiwgYWN0aW9uPSJ1cm46U2F5SGVsbG8iKQotCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgewotCQlyZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHdobzsKLQl9CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKKyAgICAgICAgcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvICIgKyB3aG87CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9leHRlcm5hbHdzZGwvaG9zdC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9leHRlcm5hbHdzZGwvaG9zdC13ZWIueG1sCmluZGV4IDcyOWIwMTMuLjIwOWIyZDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZXh0ZXJuYWx3c2RsL2hvc3Qtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2V4dGVybmFsd3NkbC9ob3N0LXdlYi54bWwKQEAgLTE4LDggKzE4LDggQEAKIC0tPgogCiA8d2ViLWFwcCB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiAKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgICAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRpc3BsYXktbmFtZT5leHRlcm5hbHdzZGw8L2Rpc3BsYXktbmFtZT4KICAgPHdlbGNvbWUtZmlsZS1saXN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9leHRlcm5hbHdzZGwvdGVzdC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9leHRlcm5hbHdzZGwvdGVzdC13ZWIueG1sCmluZGV4IDViNmJmY2EuLjU1ODA5NGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZXh0ZXJuYWx3c2RsL3Rlc3Qtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2V4dGVybmFsd3NkbC90ZXN0LXdlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5IZWxsb1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuSGVsbG88L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBIZWxsbyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9XZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+SGVsbG9TZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkhlbGxvPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkhlbGxvU2VydmljZTwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvSGVsbG9TZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkhlbGxvU2VydmljZTwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvSGVsbG9TZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2ZhdWx0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2ZhdWx0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTI2ZWNmZC4uZTUyMDk5ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9mYXVsdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZmF1bHQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOSArMTUsOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZmF1bHQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9mYXVsdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2ZhdWx0L2J1aWxkLnhtbAppbmRleCBhZmJiYTNiLi5lYjkwNDFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2ZhdWx0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2ZhdWx0L2J1aWxkLnhtbApAQCAtNzIsMTQgKzcyLDE0IEBACiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50Ij4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWNsaWVudCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQtY2xhc3MiIHZhbHVlPSJjbGllbnQuQ2xpZW50Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJvdGhlci1hcmdzIiB2YWx1ZT0id2Vic2VydmljZS13aXRoLWZhdWx0Ii8+CiAgICAgICA8L2FudGNhbGw+CiAKLSA8IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPiAKKyA8IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLmhvc3R9IiB2YWx1ZT0iSFRUUF9IT1NUIi8+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAucG9ydH0iIHZhbHVlPSJIVFRQX1BPUlQiLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZmF1bHQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9mYXVsdC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYmMyYTY5Yi4uMDNkN2FhYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9mYXVsdC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9mYXVsdC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMzLDEwICszMywxMCBAQAogICAgICAgICBzdGF0aWMgTXlTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1mYXVsdCIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1mYXVsdCIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1mYXVsdCIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtZmF1bHQiKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewpAQCAtNjIsMTYgKzYyLDE2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiICsgYXJnc1swXSk7Ci0JCWlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQotCQlpZihyZXQuaW5kZXhPZihhcmdzWzBdKSA9PSAtMSkgeworICAgICAgICB9CisgICAgICAgIGlmKHJldC5pbmRleE9mKGFyZ3NbMF0pID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQl9CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9mYXVsdC9lbmRwb2ludC9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9mYXVsdC9lbmRwb2ludC9IZWxsby5qYXZhCmluZGV4IDQ1NGIzY2UuLmI2YTQ2MGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZmF1bHQvZW5kcG9pbnQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2ZhdWx0L2VuZHBvaW50L0hlbGxvLmphdmEKQEAgLTI1LDEzICsyNSwxMyBAQAogICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2V4YW1wbGUuY29tL0hlbGxvIgogKQogcHVibGljIGNsYXNzIEhlbGxvIHsKLQlwdWJsaWMgSGVsbG8oKSB7fQorICAgIHB1YmxpYyBIZWxsbygpIHt9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhlbGxvIiwgYWN0aW9uPSJ1cm46U2F5SGVsbG8iKQotCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgdGhyb3dzIE15RXhjZXB0aW9uIHsKLQkJaWYod2hvID09IG51bGwpCi0JCQl0aHJvdyBuZXcgTXlFeGNlcHRpb24oIklOUFVUIElTIE5VTEwiKTsKLQkJZWxzZQotCQkJcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvICIgKyB3aG87Ci0JfQorICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB0aHJvd3MgTXlFeGNlcHRpb24geworICAgICAgICBpZih3aG8gPT0gbnVsbCkKKyAgICAgICAgICAgIHRocm93IG5ldyBNeUV4Y2VwdGlvbigiSU5QVVQgSVMgTlVMTCIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHdobzsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2ZhdWx0L2VuZHBvaW50L015RXhjZXB0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2ZhdWx0L2VuZHBvaW50L015RXhjZXB0aW9uLmphdmEKaW5kZXggOTk0NDliMy4uYTJmMWQ2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9mYXVsdC9lbmRwb2ludC9NeUV4Y2VwdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZmF1bHQvZW5kcG9pbnQvTXlFeGNlcHRpb24uamF2YQpAQCAtMTcsMTUgKzE3LDE1IEBACiBwYWNrYWdlIGVuZHBvaW50OwogCiBwdWJsaWMgY2xhc3MgTXlFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24gewotCXByaXZhdGUgU3RyaW5nIG1lc3NhZ2UgPSAiIjsKKyAgICBwcml2YXRlIFN0cmluZyBtZXNzYWdlID0gIiI7CiAKLQlwdWJsaWMgTXlFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UpIHsKLQkJc3VwZXIobWVzc2FnZSk7Ci0JCXRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci0JfQorICAgIHB1YmxpYyBNeUV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSkgeworICAgICAgICBzdXBlcihtZXNzYWdlKTsKKyAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKKyAgICB9CiAKLQlwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7Ci0JCXJldHVybiBtZXNzYWdlOwotCX0KKyAgICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7CisgICAgICAgIHJldHVybiBtZXNzYWdlOworICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9mYXVsdC93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9mYXVsdC93ZWIueG1sCmluZGV4IDA3MDhjNWMuLjVmMWI5NzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZmF1bHQvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2ZhdWx0L3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5NeUhlbGxvPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkhlbGxvPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgSGVsbG8gV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkhlbGxvV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPk15SGVsbG88L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuSGVsbG88L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+TXlIZWxsbzwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvSGVsbG9TZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPk15SGVsbG88L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0hlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9qYXhycGNpbmplY3Rpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4cnBjaW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWJiMjViMy4uZmM3MWNlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9qYXhycGNpbmplY3Rpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHJwY2luamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyNiArMTUsMjYgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpheHJwY2luamVjdGlvbiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2Vic2VydmljZXMueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWJzZXJ2aWNlcy54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4cnBjaW5qZWN0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4cnBjaW5qZWN0aW9uL2J1aWxkLnhtbAppbmRleCA3YjA2OWY4Li5kNDgyMTk2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHJwY2luamVjdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9qYXhycGNpbmplY3Rpb24vYnVpbGQueG1sCkBAIC0zMCw5ICszMCw5IEBACiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwogCiAgIDx0YXJnZXQgbmFtZT0icnVuLndzY29tcGlsZSI+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9IiBmYWlsb25lcnJvcj0idHJ1ZSIgPgotICAgICAgICA8YXJnIGxpbmU9IiR7d3Njb21waWxlLmNvbW1hbmR9IiAvPiAgICAgICAgCi0JPC9leGVjPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KKyAgICAgICAgPGFyZyBsaW5lPSIke3dzY29tcGlsZS5jb21tYW5kfSIgLz4KKyAgICA8L2V4ZWM+CiAgIDwvdGFyZ2V0PgogCiA8IS0tIE5PVEUuIHRoZSBzaW1wbGUgbWFwcGluZyB0ZXN0IGFuZCBmdWxsIG1hcHBpbmcgdGVzdCBjYW4KQEAgLTQ2LDUzICs0Niw1MyBAQAogICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9Imdlbi1zZXJ2bGV0LXdzZGwiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9XRUItSU5GL3dzZGwiLz4gCisgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vV0VCLUlORi93c2RsIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCi0gICB2YWx1ZT0iLWRlZmluZSAtbWFwcGluZyAke2J1aWxkLmNsYXNzZXMuZGlyfS9TaW1wbGVIYW5kbGVyTWFwcGluZ19zZXJ2bGV0LnhtbCAtY3AgJHtidWlsZC5jbGFzc2VzLmRpcn0gLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vV0VCLUlORi93c2RsIGNvbmZpZy1pbnRlcmZhY2UueG1sIi8+IAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgorICAgdmFsdWU9Ii1kZWZpbmUgLW1hcHBpbmcgJHtidWlsZC5jbGFzc2VzLmRpcn0vU2ltcGxlSGFuZGxlck1hcHBpbmdfc2VydmxldC54bWwgLWNwICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IC1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYvd3NkbCBjb25maWctaW50ZXJmYWNlLnhtbCIvPgogICAgIDwvYW50Y2FsbD4KLSAgPC90YXJnZXQ+ICAgIAotICAgCisgIDwvdGFyZ2V0PgorCiAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUtd2ViIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgY29tcGlsZSwgZ2VuLXNlcnZsZXQtd3NkbCI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gICAKKyAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ibWFwcGluZ2ZpbGUubG9jYXRpb24iIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ibWFwcGluZ2ZpbGUubmFtZSIgdmFsdWU9IlNpbXBsZUhhbmRsZXJNYXBwaW5nX3NlcnZsZXQueG1sIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2RsZmlsZS5sb2NhdGlvbiIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYvd3NkbCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0id3NkbGZpbGUubmFtZSIgdmFsdWU9IlNpbXBsZUhhbmRsZXJTZXJ2bGV0LndzZGwiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9IndlYndhci5jbGFzc2VzIiB2YWx1ZT0ic2VydmxldC8qLmNsYXNzIi8+Ci0gICAgIDwvYW50Y2FsbD4gIAorICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgIAorCiAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImFzc2VtYmxlLXdlYiwgYXNzZW1ibGUtY2xpZW50Ii8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUtY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KLSAgICA8L2FudGNhbGw+ICAgIAotICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwiLz4gICAgIAotICAgIDxjb3B5IGZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYvd3NkbC9TaW1wbGVIYW5kbGVyU2VydmxldC53c2RsIiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIvPiAgICAKKyAgICA8L2FudGNhbGw+CisgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIvPgorICAgIDxjb3B5IGZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYvd3NkbC9TaW1wbGVIYW5kbGVyU2VydmxldC53c2RsIiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIvPgogICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iYXBwY2xpZW50LWphci1jb21tb24iPgotICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICB2YWx1ZT0iU2ltcGxlSGFuZGxlck1hcHBpbmdfc2VydmxldC54bWwsTUVUQS1JTkYvd3NkbC8qKixzaW1wbGVoYW5kbGVyLyoqLHNlcnZsZXQvU2ltcGxlU2VydmVyLmNsYXNzLGNvbS8qKiIgLz4KLSAgICA8L2FudGNhbGw+ICAKKyAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgotICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vU2VydmxldEhhbmRsZXJUZXN0L1NlcnZsZXRIYW5kbGVyVGVzdCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAKKyAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSJTZXJ2bGV0SGFuZGxlclRlc3QiLz4gICAKLSAgICAgICAgPC9hbnRjYWxsPiAgICAgICAgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSJTZXJ2bGV0SGFuZGxlclRlc3QiLz4KKyAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jbGllbnQtY29tbW9uIi8+CiAgICAgICAgIDxtb3ZlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudENsaWVudC5qYXIiIHRvRmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+CiAgICAgPC90YXJnZXQ+CkBAIC0xMDAsMTAgKzEwMCwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudC1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gIAotICAgIAorICAgIDwvdGFyZ2V0PgorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHJwY2luamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHJwY2luamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMzY5ZjQ4NC4uZDczZjUyZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9qYXhycGNpbmplY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4cnBjaW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzAsMjggKzMwLDI4IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLWpheHJwYy1oYW5kbGVyLWluamVjdGlvbiIpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtamF4cnBjLWhhbmRsZXItaW5qZWN0aW9uIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAJdHJ5IHsKLSAgICAgICAgICAgIAorICAgICAgICB0cnkgeworCiAgICAgICAgICAgICBTdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0gYXJnc1swXTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU2VydmljZSB0ZXN0U2VydmljZSA9IChTZXJ2aWNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9zaW1wbGVoYW5kbGVyIik7CiAgICAgICAgICAgICBTaW1wbGVTZXJ2ZXIgdGVzdCA9IChTaW1wbGVTZXJ2ZXIpCiAgICAgICAgICAgICB0ZXN0U2VydmljZS5nZXRQb3J0KFNpbXBsZVNlcnZlci5jbGFzcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgKChTdHViKXRlc3QpLl9zZXRQcm9wZXJ0eShTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCiAgICAgICAgICAgICAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlbmRwb2ludCBhZGRyZXNzID0gIiArIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludm9jYXRpb24gcmV0dXJuZWQgIiArIHRlc3Quc2F5SGVsbG8oImplcm9tZSIpKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHJwY2luamVjdGlvbi9jb25maWctaW50ZXJmYWNlLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4cnBjaW5qZWN0aW9uL2NvbmZpZy1pbnRlcmZhY2UueG1sCmluZGV4IDA3ZTFjYjAuLjRiMDgwNTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4cnBjaW5qZWN0aW9uL2NvbmZpZy1pbnRlcmZhY2UueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4cnBjaW5qZWN0aW9uL2NvbmZpZy1pbnRlcmZhY2UueG1sCkBAIC0xOSwxMSArMTksMTEgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHNlcnZpY2UgCi0gICAgICBuYW1lPSJTaW1wbGVIYW5kbGVyU2VydmxldCIgCi0gICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpIYW5kbGVyVGVzdCIgCi0gICAgICB0eXBlTmFtZXNwYWNlPSJ1cm46SGFuZGxlclRlc3QiIAorICA8c2VydmljZQorICAgICAgbmFtZT0iU2ltcGxlSGFuZGxlclNlcnZsZXQiCisgICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpIYW5kbGVyVGVzdCIKKyAgICAgIHR5cGVOYW1lc3BhY2U9InVybjpIYW5kbGVyVGVzdCIKICAgICAgIHBhY2thZ2VOYW1lPSJoYW5kbGVydGVzdCI+CiAgICAgICA8aW50ZXJmYWNlIG5hbWU9InNlcnZsZXQuU2ltcGxlU2VydmVyIi8+CiAgIDwvc2VydmljZT4KLTwvY29uZmlndXJhdGlvbj4gCis8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHJwY2luamVjdGlvbi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHJwY2luamVjdGlvbi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKaW5kZXggYzE0YmI3YS4uZDJkODMwMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9qYXhycGNpbmplY3Rpb24vZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4cnBjaW5qZWN0aW9uL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbApAQCAtMjQsMTEgKzI0LDExIEBACiAgICAgPGRlc2NyaXB0aW9uPnNpbXBsZSBoYW5kbGVyIHNlcnZpY2UgcmVmPC9kZXNjcmlwdGlvbj4KICAgICA8c2VydmljZS1yZWYtbmFtZT5zZXJ2aWNlL3NpbXBsZWhhbmRsZXI8L3NlcnZpY2UtcmVmLW5hbWU+CiAgICAgPHNlcnZpY2UtaW50ZXJmYWNlPmphdmF4LnhtbC5ycGMuU2VydmljZTwvc2VydmljZS1pbnRlcmZhY2U+Ci0gICAgPHdzZGwtZmlsZT5NRVRBLUlORi93c2RsL1NpbXBsZUhhbmRsZXJTZXJ2bGV0LndzZGw8L3dzZGwtZmlsZT4gICAgCisgICAgPHdzZGwtZmlsZT5NRVRBLUlORi93c2RsL1NpbXBsZUhhbmRsZXJTZXJ2bGV0LndzZGw8L3dzZGwtZmlsZT4KICAgICA8amF4cnBjLW1hcHBpbmctZmlsZT5TaW1wbGVIYW5kbGVyTWFwcGluZ19zZXJ2bGV0LnhtbDwvamF4cnBjLW1hcHBpbmctZmlsZT4KLSAgICA8c2VydmljZS1xbmFtZSB4bWxuczpzZXJ2aWNlbnM9InVybjpIYW5kbGVyVGVzdCI+c2VydmljZW5zOlNpbXBsZUhhbmRsZXJTZXJ2bGV0PC9zZXJ2aWNlLXFuYW1lPiAgICAgICAgICAgICAgIAorICAgIDxzZXJ2aWNlLXFuYW1lIHhtbG5zOnNlcnZpY2Vucz0idXJuOkhhbmRsZXJUZXN0Ij5zZXJ2aWNlbnM6U2ltcGxlSGFuZGxlclNlcnZsZXQ8L3NlcnZpY2UtcW5hbWU+CiAgICAgPHBvcnQtY29tcG9uZW50LXJlZj4KICAgICAgIDxzZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT5lamIuU2ltcGxlU2VydmVyPC9zZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT4KLSAgICA8L3BvcnQtY29tcG9uZW50LXJlZj4gICAgICAgICAgCisgICAgPC9wb3J0LWNvbXBvbmVudC1yZWY+CiAgIDwvc2VydmljZS1yZWY+CiA8L2FwcGxpY2F0aW9uLWNsaWVudD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4cnBjaW5qZWN0aW9uL3NlcnZsZXQvU2VydmxldEhhbmRsZXJUZXN0SW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9qYXhycGNpbmplY3Rpb24vc2VydmxldC9TZXJ2bGV0SGFuZGxlclRlc3RJbXBsLmphdmEKaW5kZXggMzM2ZTRmOC4uZjlmMjExNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9qYXhycGNpbmplY3Rpb24vc2VydmxldC9TZXJ2bGV0SGFuZGxlclRlc3RJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9qYXhycGNpbmplY3Rpb24vc2VydmxldC9TZXJ2bGV0SGFuZGxlclRlc3RJbXBsLmphdmEKQEAgLTIyLDIzICsyMiwyMyBAQAogCiBwdWJsaWMgY2xhc3MgU2VydmxldEhhbmRsZXJUZXN0SW1wbCBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKICAgICBTZXNzaW9uQ29udGV4dCBzYzsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIGhlbGxvKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuICJzYWx1dCAiICsgaGVsbG87CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVTZXJ2ZXI6OjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZVNlcnZlcjo6OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KLSAgICAKKwogICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQorCiAgICAgICAgIHRoaXMuc2MgPSBzYzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30gICAKKworICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHJwY2luamVjdGlvbi9zZXJ2bGV0L1NpbXBsZUhhbmRsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4cnBjaW5qZWN0aW9uL3NlcnZsZXQvU2ltcGxlSGFuZGxlci5qYXZhCmluZGV4IGVkOWNlMWQuLjVhODFmMTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4cnBjaW5qZWN0aW9uL3NlcnZsZXQvU2ltcGxlSGFuZGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4cnBjaW5qZWN0aW9uL3NlcnZsZXQvU2ltcGxlSGFuZGxlci5qYXZhCkBAIC0yMiw5ICsyMiw5IEBACiBpbXBvcnQgamFrYXJ0YS5hbm5vdGF0aW9uLlJlc291cmNlOwogCiBwdWJsaWMgY2xhc3MgU2ltcGxlSGFuZGxlciBleHRlbmRzIEdlbmVyaWNIYW5kbGVyIHsKLSAgICAKKwogICAgIHByb3RlY3RlZCBIYW5kbGVySW5mbyBpbmZvID0gbnVsbDsKLSAgICAKKwogLyoKICAgICBAUmVzb3VyY2UobmFtZT0ic3RyaW5nVmFsdWUiKQogICAgIFN0cmluZyBpbmplY3RlZFN0cmluZyA9ICJ1bmRlZmluZWQiOwpAQCAtMzMsNyArMzMsNyBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoSGFuZGxlckluZm8gaW5mbykgewogICAgICAgICB0aGlzLmluZm8gPSBpbmZvOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZVJlcXVlc3QoTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogLyoKICAgICAgICAgaWYgKCJ1bmRlZmluZWQiLmVxdWFscyhpbmplY3RlZFN0cmluZykpIHsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVSZXNwb25zZShNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBEYXRlIHN0YXJ0VGltZSA9IChEYXRlKSBjb250ZXh0LmdldFByb3BlcnR5KCJzdGFydFRpbWUiKTsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgUU5hbWVbXSBnZXRIZWFkZXJzKCkgewogICAgICAgICByZXR1cm4gbmV3IFFOYW1lWzBdOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4cnBjaW5qZWN0aW9uL3NlcnZsZXQvU2ltcGxlU2VydmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHJwY2luamVjdGlvbi9zZXJ2bGV0L1NpbXBsZVNlcnZlci5qYXZhCmluZGV4IGRjNWNmMjYuLjA2NzVjZDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4cnBjaW5qZWN0aW9uL3NlcnZsZXQvU2ltcGxlU2VydmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9qYXhycGNpbmplY3Rpb24vc2VydmxldC9TaW1wbGVTZXJ2ZXIuamF2YQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IGphdmEucm1pLio7CiAKIHB1YmxpYyBpbnRlcmZhY2UgU2ltcGxlU2VydmVyIGV4dGVuZHMgUmVtb3RlIHsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHNvdXJjZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9qYXh3c3Rvb2xzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4d3N0b29scy54bWwKaW5kZXggYjZiMGIzNC4uOWE1ZWFjYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9qYXh3c3Rvb2xzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHdzdG9vbHMueG1sCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2ltcG9ydC5hcmdzIgogICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwICAtWGVuZG9yc2VkICAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQgaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vJHt0ZXN0LXdzZGwtdXJpfSIvPgogICAgIDwvYW50Y2FsbD4KLSAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAorICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKICAgICAgICAgICAgIGluY2x1ZGVzPSIke2NsaWVudC1zcmN9LyoqIj4KICAgICAgICAgPGNsYXNzcGF0aCByZWZpZD0iY2xhc3NwYXRoIi8+CiAgICAgPC9qYXZhYz4KQEAgLTU2LDggKzU2LDggQEAKIDx0YXJnZXQgbmFtZT0icnVuLWNsaWVudCI+CiAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiPgotICAgICAgPGFyZyB2YWx1ZT0iJHtjbGllbnQtY2xhc3N9Ii8+ICAgIAotICAgICAgPGFyZyB2YWx1ZT0iJHtvdGhlci1hcmdzfSIvPiAgICAKKyAgICAgIDxhcmcgdmFsdWU9IiR7Y2xpZW50LWNsYXNzfSIvPgorICAgICAgPGFyZyB2YWx1ZT0iJHtvdGhlci1hcmdzfSIvPgogICAgIDwvZXhlYz4KIDwvdGFyZ2V0PgogCkBAIC03NSw3ICs3NSw3IEBACiAgIDxjb3B5IHZlcmJvc2U9InRydWUiIHRvRGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi8iPgogICAgICAgPGZpbGVzZXQgZGlyPSIke2Jhc2VkaXJ9IiBpbmNsdWRlcz0id2VibG9naWMtd2Vic2VydmljZXMueG1sIi8+CiAgIDwvY29weT4KLSAgCisKICAgPGNvcHkgZmlsZT0iJHt3c2RsZmlsZS5sb2NhdGlvbn0vJHt3c2RsZmlsZS5uYW1lfSIKICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93c2RsLyR7d3NkbGZpbGUubmFtZX0iCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dlYi54bWwiLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9IldFQi1JTkYvc3VuLXdlYi54bWwiLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9IldFQi1JTkYvd2Vic2VydmljZXMueG1sIi8+Ci0gICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dlYmxvZ2ljLXdlYnNlcnZpY2VzLnhtbCIvPiAgCisgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dlYmxvZ2ljLXdlYnNlcnZpY2VzLnhtbCIvPgogICAgICAgPGluY2x1ZGUgbmFtZT0iV0VCLUlORi9qYXgtd3MtY2F0YWxvZy54bWwiLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9IldFQi1JTkYvd3NkbC8ke3dzZGxmaWxlLm5hbWV9Ii8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dzZGwvJHtzY2hlbWFmaWxlLm5hbWV9Ii8+CkBAIC0xMzcsNSArMTM3LDUgQEAKICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC93c2l0L2VqYiIgY2FzZXNlbnNpdGl2ZT0ieWVzIj4KICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GLyoqIi8+CiAgICAgPC9maWxlc2V0PgotICA8L2phcj4gICAgICAgICAgICAKKyAgPC9qYXI+CiA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGE3MjM2ZjguLjNjYjllNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOSArMTUsOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ibGliZGVwZW5kZW50Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50L2J1aWxkLnhtbAppbmRleCAzMWM4YTI2Li5iYWNlODRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQvYnVpbGQueG1sCkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50Ij4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWNsaWVudCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQtY2xhc3MiIHZhbHVlPSJjbGllbnQuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZTcxMzYyYi4uNDZkMjkzOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzMsMTAgKzMzLDEwIEBACiAgICAgICAgIHN0YXRpYyBIZWxsb1NlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLXNpbXBsZS1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLXNpbXBsZS1hbm5vdGF0aW9uIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWFubm90YXRpb24iKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgICAgICAgICAgICAgSGVsbG8gcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9Qb3J0KCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIFJldFZhbCByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiICsgYXJnc1swXSk7Ci0JCSAgICBpZihyZXQuZ2V0UmV0VmFsKCkuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgICAgICBpZihyZXQuZ2V0UmV0VmFsKCkuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQotCQkgICAgaWYocmV0LmdldFJldFZhbCgpLmluZGV4T2YoYXJnc1swXSkgPT0gLTEpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKHJldC5nZXRSZXRWYWwoKS5pbmRleE9mKGFyZ3NbMF0pID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldC5nZXRSZXRWYWwoKSk7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQvZW5kcG9pbnQvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50L2VuZHBvaW50L0hlbGxvLmphdmEKaW5kZXggZDQ5ZjE1OC4uNTViZmM3NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQvZW5kcG9pbnQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC9lbmRwb2ludC9IZWxsby5qYXZhCkBAIC0yNyw5ICsyNyw5IEBACiAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS5jb20vSGVsbG8iCiApCiBwdWJsaWMgY2xhc3MgSGVsbG8gewotCXB1YmxpYyBIZWxsbygpIHt9CisgICAgcHVibGljIEhlbGxvKCkge30KIAotCXB1YmxpYyBSZXRWYWwgc2F5SGVsbG8oU3RyaW5nIHdobykgewotCQlyZXR1cm4gbmV3IFJldFZhbCgiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvKTsKLQl9CisgICAgcHVibGljIFJldFZhbCBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7CisgICAgICAgIHJldHVybiBuZXcgUmV0VmFsKCJXZWJTdmNUZXN0LUhlbGxvICIgKyB3aG8pOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50L3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC93ZWIueG1sCmluZGV4IDM3Y2UxODIuLmNjNjQxMWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50L3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgSGVsbG8gU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5IZWxsb1dBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgSGVsbG8gU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5IZWxsb1dBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgSGVsbG8gV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkhlbGxvV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkhlbGxvPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkhlbGxvPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgSGVsbG8gV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkhlbGxvV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkhlbGxvPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkhlbGxvPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkhlbGxvPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9IZWxsb1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0hlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21hcHBlZG5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCAzOTQyMDMxLi5lMmRjNjJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21hcHBlZG5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21hcHBlZG5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJtYXBwZWRuYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWFwcGVkbmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21hcHBlZG5hbWUvYnVpbGQueG1sCmluZGV4IDhlZmUyZjEuLjJiOGRhZjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWFwcGVkbmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL2J1aWxkLnhtbApAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZW5kcG9pbnQiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LWFwcCI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iJHthcHBuYW1lfSIvPgpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgPC90YXJnZXQ+CiAKIAotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgpAQCAtMTIwLDcgKzEyMCw3IEBACiAgICAgICAgIDxhcmcgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L2VuZHBvaW50YWRkcmVzcy9IZWxsb1NlcnZpY2UiLz4KICAgICAgIDwvamF2YT4KIAotIDwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+IAorIDwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAuaG9zdH0iIHZhbHVlPSJIVFRQX0hPU1QiLz4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9IndlYmNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5wb3J0fSIgdmFsdWU9IkhUVFBfUE9SVCIvPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLmhvc3R9IiB2YWx1ZT0iSFRUUF9IT1NUIi8+CkBAIC0xNjgsNyArMTY4LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBGQUlMRUQiLz4KLSAgICA8L3RhcmdldD4gICAJCisgICAgPC90YXJnZXQ+CiAKLSAgICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL2NsaWVudC13ZWIueG1sCmluZGV4IDAyN2RmY2UuLmI0YmJmNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWFwcGVkbmFtZS9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21hcHBlZG5hbWUvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWFwcGVkbmFtZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOTg3ZDg1Ny4uOWRjOWM4OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21hcHBlZG5hbWUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMCwzNyArMzAsMzcgQEAKICAgICAgICAgc3RhdGljIEhlbGxvU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtbWFwcGVkLW5hbWUiKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtbWFwcGVkLW5hbWUiKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtbWFwcGVkLW5hbWUiKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLW1hcHBlZC1uYW1lIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgYm9vbGVhbiBnb3RFeCA9IGZhbHNlOworICAgICAgICBib29sZWFuIGdvdEV4ID0gZmFsc2U7CiAgICAgICAgICAgICB0cnkgewotCQlqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCk7Ci0JCU9iamVjdCByZXMgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvaWdub3JlZE5hbWUiKTsKLQkgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgRXhwZWN0ZWQgZXhjZXB0aW9uIC0gIiArIGV4LmdldE1lc3NhZ2UoKSk7Ci0JCWdvdEV4ID0gdHJ1ZTsKLQkgICAgfSAKLQkgICAgaWYoIWdvdEV4KSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiTWFwcGVkIG5hbWUgbm90IG1hcHBlZCBhcyBleHBlY3RlZCIpOworICAgICAgICBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIE9iamVjdCByZXMgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvaWdub3JlZE5hbWUiKTsKKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgRXhwZWN0ZWQgZXhjZXB0aW9uIC0gIiArIGV4LmdldE1lc3NhZ2UoKSk7CisgICAgICAgIGdvdEV4ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZighZ290RXgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNYXBwZWQgbmFtZSBub3QgbWFwcGVkIGFzIGV4cGVjdGVkIik7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlNpbXBsZS1tYXBwZWQtbmFtZSIsIHN0YXQuRkFJTCk7Ci0JCXJldHVybjsKLQkgICAgfQorICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgICAgIHRyeSB7Ci0JCWphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCBpYyA9IG5ldyBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQoKTsKLQkJT2JqZWN0IHJlcyA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeU1hcHBlZE5hbWUiKTsKKyAgICAgICAgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0IGljID0gbmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpOworICAgICAgICBPYmplY3QgcmVzID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015TWFwcGVkTmFtZSIpOwogICAgICAgICAgICAgICAgIEhlbGxvIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvUG9ydCgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPDEwO2krKykgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7Ci0JCSAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiU2ltcGxlLUFubm90YXRpb24iLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlNpbXBsZS1tYXBwZWQtbmFtZSIsIHN0YXQuUEFTUyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21hcHBlZG5hbWUvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWFwcGVkbmFtZS9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IDcwZjBhZDIuLjc3NThkNDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWFwcGVkbmFtZS9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWFwcGVkbmFtZS9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC02Myw5ICs2Myw5IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBIRUxMTyBTRVJWSUNFIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIltIZWxsbyBBbGxdIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL2VuZHBvaW50L0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21hcHBlZG5hbWUvZW5kcG9pbnQvSGVsbG8uamF2YQppbmRleCBmMmVjYzkzLi5lMWZkMWY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21hcHBlZG5hbWUvZW5kcG9pbnQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21hcHBlZG5hbWUvZW5kcG9pbnQvSGVsbG8uamF2YQpAQCAtMjAsOCArMjAsOCBAQAogCiBAV2ViU2VydmljZQogcHVibGljIGNsYXNzIEhlbGxvIHsKLQkKKwogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHBhcmFtKSB7Ci0JcmV0dXJuICJIZWxsbyAiICsgcGFyYW07CisgICAgcmV0dXJuICJIZWxsbyAiICsgcGFyYW07CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21hcHBlZG5hbWUvd2ViLnhtbAppbmRleCBmNTFjY2MwLi41NjRjZDRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21hcHBlZG5hbWUvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21hcHBlZG5hbWUvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgSGVsbG8gU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5IZWxsb1dBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgSGVsbG8gU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5IZWxsb1dBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgSGVsbG8gV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkhlbGxvV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkhlbGxvPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkhlbGxvPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgSGVsbG8gV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkhlbGxvV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkhlbGxvPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkhlbGxvPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkhlbGxvPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vSGVsbG9TZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkhlbGxvPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vSGVsbG9TZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21hcHBlZG5hbWUvd2ViY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL3dlYmNsaWVudC9DbGllbnQuamF2YQppbmRleCBhMzI2MjI1Li43OGJlNmE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21hcHBlZG5hbWUvd2ViY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWFwcGVkbmFtZS93ZWJjbGllbnQvQ2xpZW50LmphdmEKQEAgLTMwLDggKzMwLDggQEAKICBAV2ViU2VydmljZVJlZihuYW1lPSJpZ25vcmVkTmFtZSIsIG1hcHBlZE5hbWU9Ik15TWFwcGVkTmFtZSIsIHdzZGxMb2NhdGlvbj0iaHR0cDovL0hUVFBfSE9TVDpIVFRQX1BPUlQvbWFwcGVkbmFtZS9IZWxsb1NlcnZpY2U/V1NETCIpCiAgICAgICAgIEhlbGxvU2VydmljZSBzZXJ2aWNlOwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYnl0ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYnl0ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDljYzM2MDcuLmFkYTcyM2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWJ5dGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21ieXRlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDggKzE1LDggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Im1ieXRlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYnl0ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21ieXRlL2J1aWxkLnhtbAppbmRleCA5MGM0OGY2Li5jZTE4MzliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21ieXRlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21ieXRlL2J1aWxkLnhtbApAQCAtNzAsNyArNzAsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1jbGllbnQiPgogICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50LWNsYXNzIiB2YWx1ZT0iY2xpZW50LkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYnl0ZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21ieXRlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA1MzY2NWE1Li5mZjg0ZDM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21ieXRlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21ieXRlL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzIsMzggKzMyLDM4IEBACiAgICAgICAgIHN0YXRpYyBIZWxsb+5TZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJzZXJ2aWNlLXdpdGgtbWJ5dGUtY2hhciIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJzZXJ2aWNlLXdpdGgtbWJ5dGUtY2hhciIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJzZXJ2aWNlLXdpdGgtbWJ5dGUtY2hhciIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgic2VydmljZS13aXRoLW1ieXRlLWNoYXIiKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBIZWxsbyBwb3J0ID0gc2VydmljZS5nZXRIZWxsb1BvcnQoKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIiArIGFyZ3NbMF0pOwotCQlpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCX0KLQkJaWYocmV0LmluZGV4T2YoYXJnc1swXSkgPT0gLTEpIHsKKyAgICAgICAgfQorICAgICAgICBpZihyZXQuaW5kZXhPZihhcmdzWzBdKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgcmV0ID0gcG9ydC5zYXlEb3VibGVIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIiArIGFyZ3NbMF0pOwotCQlpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1Eb3VibGUtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1Eb3VibGUtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQotCQlpZihyZXQuaW5kZXhPZihhcmdzWzBdKSA9PSAtMSkgeworICAgICAgICB9CisgICAgICAgIGlmKHJldC5pbmRleE9mKGFyZ3NbMF0pID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQl9CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYnl0ZS9lbmRwb2ludC9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYnl0ZS9lbmRwb2ludC9IZWxsby5qYXZhCmluZGV4IGEwMGQxOGEuLjZlODFhYzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWJ5dGUvZW5kcG9pbnQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21ieXRlL2VuZHBvaW50L0hlbGxvLmphdmEKQEAgLTI1LDE1ICsyNSwxNSBAQAogICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2V4YW1wbGUuY29tL0hlbGxvIgogKQogcHVibGljIGNsYXNzIEhlbGxvIHsKLQlwdWJsaWMgSGVsbG8oKSB7fQorICAgIHB1YmxpYyBIZWxsbygpIHt9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhlbGxvIiwgYWN0aW9uPSJ1cm46U2F5SGVsbG8iKQotCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgewotCQlyZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHdobzsKLQl9CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKKyAgICAgICAgcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvICIgKyB3aG87CisgICAgfQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlEb3VibGVIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKLQlwdWJsaWMgU3RyaW5nIHNheURvdWJsZUhlbGxvKFN0cmluZyB3aG8pIHsKLQkJcmV0dXJuICJXZWJTdmNUZXN0LURvdWJsZS1IZWxsbyAiICsgd2hvICsgIiBBTkQgIiArIHdobzsKLQl9CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlEb3VibGVIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKKyAgICBwdWJsaWMgU3RyaW5nIHNheURvdWJsZUhlbGxvKFN0cmluZyB3aG8pIHsKKyAgICAgICAgcmV0dXJuICJXZWJTdmNUZXN0LURvdWJsZS1IZWxsbyAiICsgd2hvICsgIiBBTkQgIiArIHdobzsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21zZ2N0eHQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXNnY3R4dC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDJlNjQ5NjEuLmNjNzQyYTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXNnY3R4dC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXNnY3R4dC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJtc2djdHh0Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tc2djdHh0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXNnY3R4dC9idWlsZC54bWwKaW5kZXggMjAzYTc0ZC4uMDc2ZTEwNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tc2djdHh0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21zZ2N0eHQvYnVpbGQueG1sCkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgICAgICA8YXJnIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS93c2NsaWVudC9SZXF1ZXN0UHJvY2Vzc29yIi8+CiAgICAgICAgICAgPC9qYXZhPgogCi08IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPiAKKzwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAuaG9zdH0iIHZhbHVlPSJIVFRQX0hPU1QiLz4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9IndlYmNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5wb3J0fSIgdmFsdWU9IkhUVFBfUE9SVCIvPgogICAgICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXNnY3R4dC9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXNnY3R4dC9jbGllbnQtd2ViLnhtbAppbmRleCAwMjdkZmNlLi5iNGJiZjViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21zZ2N0eHQvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tc2djdHh0L2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXNnY3R4dC9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tc2djdHh0L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggZDkwM2U5ZS4uNDY3ZTZiOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tc2djdHh0L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tc2djdHh0L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlciAobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKLSAgICAgICAKKwogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgSEVMTE8gU0VSVklDRSBJUyIpICE9IC0xKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tc2djdHh0L2VuZHBvaW50L0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21zZ2N0eHQvZW5kcG9pbnQvSGVsbG8uamF2YQppbmRleCA4YjEyMTA5Li4xNjBjNWJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21zZ2N0eHQvZW5kcG9pbnQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21zZ2N0eHQvZW5kcG9pbnQvSGVsbG8uamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiBAV2ViU2VydmljZQogcHVibGljIGNsYXNzIEhlbGxvIHsKLQkKKwogICAgIEBSZXNvdXJjZSBXZWJTZXJ2aWNlQ29udGV4dCB3c2M7CiAKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyBwYXJhbSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tc2djdHh0L3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21zZ2N0eHQvd2ViLnhtbAppbmRleCBkNGVlNGI1Li4yN2Y5ZjIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21zZ2N0eHQvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21zZ2N0eHQvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgSGVsbG8gU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5IZWxsb1dBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgSGVsbG8gU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5IZWxsb1dBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgSGVsbG8gV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkhlbGxvV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkhlbGxvPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkhlbGxvPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjE8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgSGVsbG8gV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkhlbGxvV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkhlbGxvPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkhlbGxvPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjE8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkhlbGxvPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vSGVsbG9TZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkhlbGxvPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vSGVsbG9TZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21zZ2N0eHQvd2ViY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tc2djdHh0L3dlYmNsaWVudC9DbGllbnQuamF2YQppbmRleCAxNjg3NTZkLi4wMzEzM2M0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21zZ2N0eHQvd2ViY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXNnY3R4dC93ZWJjbGllbnQvQ2xpZW50LmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAgICAgSGVsbG9TZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogCiAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBIZWxsbyBwb3J0ID0gc2VydmljZS5nZXRIZWxsb1BvcnQoKTsKIAogICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBbGwiKTsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB9CiAgICAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vYnVpbGQucHJvcGVydGllcwppbmRleCA2MmJjMDg3Li43NGIwNTJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJtdG9tIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vYnVpbGQueG1sCmluZGV4IDVkNTgyZjYuLjc0ZjllMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL2J1aWxkLnhtbApAQCAtMTMxLDExICsxMzEsMTEgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LlRlc3RDbGllbnQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL2NsaWVudC13ZWIueG1sCmluZGV4IGFjYTY5YWIuLmIwOGZmODIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCBjNThlZTUzLi5jMzFjNzc4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjMsOSArNjMsOSBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgU1VCVFJBQ1QgU0VSVklDRSBJUyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJbMTExMTFdIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL2N1c3RvbS1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL2N1c3RvbS1jbGllbnQueG1sCmluZGV4IDgzOWZjYjEuLjQ4ZjE3MTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS9jdXN0b20tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vY3VzdG9tLWNsaWVudC54bWwKQEAgLTE3LDEyICsxNywxMiBAQAogCiAtLT4KIAotPGJpbmRpbmdzIAorPGJpbmRpbmdzCiAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKICAgICB4bWxuczpqYXhiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXhiIgogICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgogICAgIHdzZGxMb2NhdGlvbj0iU3VidHJhY3ROdW1iZXJzLndzZGwiCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIj4gICAgCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIj4KICAgICA8YmluZGluZ3Mgbm9kZT0ibnMxOmRlZmluaXRpb25zIiB4bWxuczpuczE9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KICAgICAgICAgPHBhY2thZ2UgbmFtZT0iY2xpZW50Ii8+CiAgICAgPC9iaW5kaW5ncz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS9jdXN0b20tc2VydmVyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS9jdXN0b20tc2VydmVyLnhtbAppbmRleCAxNzBkNjY3Li4wOTg4MTIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vY3VzdG9tLXNlcnZlci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL2N1c3RvbS1zZXJ2ZXIueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAKIC0tPgogCi08YmluZGluZ3MgCis8YmluZGluZ3MKICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogICAgIHhtbG5zOmpheGI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIiCiAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQppbmRleCBkYzhhMjMwLi45YTlmZGZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogQGpha2FydGEuandzLldlYlNlcnZpY2UgKHNlcnZpY2VOYW1lPSJqdW5ranVua2p1bmsiLCBwb3J0TmFtZT0iU3VidHJhY3ROdW1iZXJzUG9ydFR5cGUiLCBlbmRwb2ludEludGVyZmFjZT0iZW5kcG9pbnQuU3VidHJhY3ROdW1iZXJzUG9ydFR5cGUiKQogcHVibGljIGNsYXNzIFN1YnRyYWN0TnVtYmVyc0ltcGwgaW1wbGVtZW50cyBTdWJ0cmFjdE51bWJlcnNQb3J0VHlwZSB7Ci0gICAgCisKICAgICBwdWJsaWMgaW50IHN1YnRyYWN0TnVtYmVycyAoaW50IG51bWJlcjEsIGludCBudW1iZXIyKSB7CiAgICAgICAgIHJldHVybiBudW1iZXIxIC0gbnVtYmVyMjsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS93ZWIueG1sCmluZGV4IDQzNDI0MzQuLjRhMWIyODMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS93ZWIueG1sCkBAIC0xOCwyOSArMTgsMjkgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPlN1YnRyYWN0TnVtYmVycyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGVzY3JpcHRpb24+U3VidHJhY3ROdW1iZXJzIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU3VidHJhY3ROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5TdWJ0cmFjdE51bWJlcnNXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU3VidHJhY3ROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5TdWJ0cmFjdE51bWJlcnNXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL1N1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvU3VidHJhY3ROdW1iZXJzU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS93ZWJjbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMzYxYTBiNy4uMzgyMDdkYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL3dlYmNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNyw4ICsyNyw4IEBACiAKICAgICAgICAgQFdlYlNlcnZpY2VSZWYgU3VidHJhY3ROdW1iZXJzU2VydmljZSBzZXJ2aWNlOwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL3dlYnNlcnZpY2VzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS93ZWJzZXJ2aWNlcy54bWwKaW5kZXggZjhjYTQ4NS4uODQyMzM2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL3dlYnNlcnZpY2VzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vd2Vic2VydmljZXMueG1sCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgICAgICA8cG9ydC1jb21wb25lbnQtbmFtZT5TdWJ0cmFjdE51bWJlcnNJbXBsPC9wb3J0LWNvbXBvbmVudC1uYW1lPgogICAgICAgICAgICAgPHdzZGwtc2VydmljZSB4bWxuczp3c2RsLXBvcnRfbnNfXz0iaHR0cDovL2R1a2Uub3JnIj53c2RsLXBvcnRfbnNfXzpTdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC93c2RsLXNlcnZpY2U+CiAgICAgICAgICAgICA8d3NkbC1wb3J0IHhtbG5zOndzZGwtcG9ydF9uc19fPSJodHRwOi8vZHVrZS5vcmciPndzZGwtcG9ydF9uc19fOlN1YnRyYWN0TnVtYmVyc1BvcnRUeXBlPC93c2RsLXBvcnQ+Ci0JICAgIDxlbmFibGUtbXRvbT50cnVlPC9lbmFibGUtbXRvbT4KKyAgICAgICAgPGVuYWJsZS1tdG9tPnRydWU8L2VuYWJsZS1tdG9tPgogICAgICAgICAgICAgPHNlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPmVuZHBvaW50LlN1YnRyYWN0TnVtYmVyc1BvcnRUeXBlPC9zZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT4KICAgICAgICAgICAgIDxzZXJ2aWNlLWltcGwtYmVhbj4KICAgICAgICAgICAgICAgICA8c2VydmxldC1saW5rPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbGluaz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI4NGVjMjMuLjdiZjc0MzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOSArMTUsOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ibXVsdGlwb3J0Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2J1aWxkLnhtbAppbmRleCAxY2E1MjE0Li5jM2VjOWU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvYnVpbGQueG1sCkBAIC02OSw4ICs2OSw4IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3NpbXBvcnQuYXJncyIKICAgICAgICAgICAgICAgIHZhbHVlPSIta2VlcCAtd3NkbGxvY2F0aW9uICR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9IdHRwVGVzdFNlcnZpY2Uud3NkbCAtYiBjdXN0b21jbGllbnQueG1sIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCBIdHRwVGVzdFNlcnZpY2Uud3NkbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiIAorICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTgzLDcgKzgzLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0Ij4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWNsaWVudCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQtY2xhc3MiIHZhbHVlPSJjbGllbnQuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZjM1Y2RkYi4uMDhlOTgyZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjIsNTAgKzIyLDUwIEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0JcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICAgICAgQFdlYlNlcnZpY2VSZWYgc3RhdGljIEh0dHBUZXN0U2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtc2ltcGxlLWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtc2ltcGxlLWFubm90YXRpb24iKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtYW5ub3RhdGlvbiIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIEhlbGxvIHBvcnQgPSBuZXcgSHR0cFRlc3RTZXJ2aWNlKCkuZ2V0SGVsbG9Qb3J0KCk7Ci0JCUhlbGxvUmVxdWVzdCByZXEgPSBuZXcgSGVsbG9SZXF1ZXN0KCk7Ci0JCXJlcS5zZXRTdHJpbmcoIkZyb20gVmlqYXkgIik7Ci0JCUhlbGxvUmVzcG9uc2UgcmVzcCA9IHBvcnQuaGVsbG8ocmVxKTsKLQkJaWYocmVzcC5nZXRTdHJpbmcoKS5pbmRleE9mKCJGcm9tIFZpamF5IikgPT0gLTEpIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmVzcC5nZXRTdHJpbmcoKSk7Ci0JCSAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwotCQl9Ci0JCWlmKHJlc3AuZ2V0U3RyaW5nKCkuaW5kZXhPZigiSGVsbG8xIikgIT0gLTEpIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmVzcC5nZXRTdHJpbmcoKSk7Ci0JCSAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwotCQl9Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihyZXNwLmdldFN0cmluZygpKTsKKyAgICAgICAgSGVsbG9SZXF1ZXN0IHJlcSA9IG5ldyBIZWxsb1JlcXVlc3QoKTsKKyAgICAgICAgcmVxLnNldFN0cmluZygiRnJvbSBWaWpheSAiKTsKKyAgICAgICAgSGVsbG9SZXNwb25zZSByZXNwID0gcG9ydC5oZWxsbyhyZXEpOworICAgICAgICBpZihyZXNwLmdldFN0cmluZygpLmluZGV4T2YoIkZyb20gVmlqYXkiKSA9PSAtMSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXNwLmdldFN0cmluZygpKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CisgICAgICAgIH0KKyAgICAgICAgaWYocmVzcC5nZXRTdHJpbmcoKS5pbmRleE9mKCJIZWxsbzEiKSAhPSAtMSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXNwLmdldFN0cmluZygpKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CisgICAgICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJlc3AuZ2V0U3RyaW5nKCkpOwogICAgICAgICAgICAgICAgIEhlbGxvMSBwb3J0MSA9IHNlcnZpY2UuZ2V0SGVsbG8xUG9ydCgpOwotCQlIZWxsbzFSZXF1ZXN0IHJlcTEgPSBuZXcgSGVsbG8xUmVxdWVzdCgpOwotCQlyZXExLnNldFN0cmluZygiRnJvbSBWaWpheSAiKTsKLQkJSGVsbG8xUmVzcG9uc2UgcmVzcDEgPSBwb3J0MS5oZWxsbzEocmVxMSk7Ci0JCWlmKHJlc3AxLmdldFN0cmluZygpLmluZGV4T2YoIkZyb20gVmlqYXkiKSA9PSAtMSkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXNwMS5nZXRTdHJpbmcoKSk7Ci0JCSAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwotCQl9Ci0JCWlmKHJlc3AxLmdldFN0cmluZygpLmluZGV4T2YoIkhlbGxvMSIpID09IC0xKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJlc3AxLmdldFN0cmluZygpKTsKLQkJICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7Ci0JCX0KLQkJU3lzdGVtLm91dC5wcmludGxuKHJlc3AxLmdldFN0cmluZygpKTsKLQkJc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5QQVNTKTsKKyAgICAgICAgSGVsbG8xUmVxdWVzdCByZXExID0gbmV3IEhlbGxvMVJlcXVlc3QoKTsKKyAgICAgICAgcmVxMS5zZXRTdHJpbmcoIkZyb20gVmlqYXkgIik7CisgICAgICAgIEhlbGxvMVJlc3BvbnNlIHJlc3AxID0gcG9ydDEuaGVsbG8xKHJlcTEpOworICAgICAgICBpZihyZXNwMS5nZXRTdHJpbmcoKS5pbmRleE9mKCJGcm9tIFZpamF5IikgPT0gLTEpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmVzcDEuZ2V0U3RyaW5nKCkpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKKyAgICAgICAgfQorICAgICAgICBpZihyZXNwMS5nZXRTdHJpbmcoKS5pbmRleE9mKCJIZWxsbzEiKSA9PSAtMSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXNwMS5nZXRTdHJpbmcoKSk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOworICAgICAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXNwMS5nZXRTdHJpbmcoKSk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQogICAgICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2N1c3RvbWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9jdXN0b21jbGllbnQueG1sCmluZGV4IDdjMzM3MmYuLjk5ZGY2MzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2N1c3RvbWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvY3VzdG9tY2xpZW50LnhtbApAQCAtMjMsOSArMjMsOSBAQAogICAgICAgICA8cGFja2FnZSBuYW1lPSJjbGllbnQiLz4KICAgICA8L2JpbmRpbmdzPgogCi0gICAgPGJpbmRpbmdzIG5vZGU9Im5zMTpkZWZpbml0aW9ucy9uczE6dHlwZXMveHM6c2NoZW1hW0B0YXJnZXROYW1lc3BhY2U9J2h0dHA6Ly9odHRwdGVzdHNlcnZpY2Uub3JnL3R5cGVzJ10iIAotCXhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0JeG1sbnM6bnMxPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+CisgICAgPGJpbmRpbmdzIG5vZGU9Im5zMTpkZWZpbml0aW9ucy9uczE6dHlwZXMveHM6c2NoZW1hW0B0YXJnZXROYW1lc3BhY2U9J2h0dHA6Ly9odHRwdGVzdHNlcnZpY2Uub3JnL3R5cGVzJ10iCisgICAgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgorICAgIHhtbG5zOm5zMT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgogICAgICAgICA8bnMyOnNjaGVtYUJpbmRpbmdzIHhtbG5zOm5zMj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4YiI+CiAgICAgICAgICAgICA8bnMyOnBhY2thZ2UgbmFtZT0iY2xpZW50Ii8+CiAgICAgICAgIDwvbnMyOnNjaGVtYUJpbmRpbmdzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvY3VzdG9tc2VydmljZS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9jdXN0b21zZXJ2aWNlLnhtbAppbmRleCAyNDI2MTFiLi41OGM1NWUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9jdXN0b21zZXJ2aWNlLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9jdXN0b21zZXJ2aWNlLnhtbApAQCAtMjMsOSArMjMsOSBAQAogICAgICAgICA8cGFja2FnZSBuYW1lPSJzZXJ2aWNlIi8+CiAgICAgPC9iaW5kaW5ncz4KIAotICAgIDxiaW5kaW5ncyBub2RlPSJuczE6ZGVmaW5pdGlvbnMvbnMxOnR5cGVzL3hzOnNjaGVtYVtAdGFyZ2V0TmFtZXNwYWNlPSdodHRwOi8vaHR0cHRlc3RzZXJ2aWNlLm9yZy90eXBlcyddIiAKLQl4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotCXhtbG5zOm5zMT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgorICAgIDxiaW5kaW5ncyBub2RlPSJuczE6ZGVmaW5pdGlvbnMvbnMxOnR5cGVzL3hzOnNjaGVtYVtAdGFyZ2V0TmFtZXNwYWNlPSdodHRwOi8vaHR0cHRlc3RzZXJ2aWNlLm9yZy90eXBlcyddIgorICAgIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKKyAgICB4bWxuczpuczE9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KICAgICAgICAgPG5zMjpzY2hlbWFCaW5kaW5ncyB4bWxuczpuczI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIiPgogICAgICAgICAgICAgPG5zMjpwYWNrYWdlIG5hbWU9InNlcnZpY2UiLz4KICAgICAgICAgPC9uczI6c2NoZW1hQmluZGluZ3M+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9zZXJ2aWNlL0hlbGxvMUltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXVsdGlwb3J0L3NlcnZpY2UvSGVsbG8xSW1wbC5qYXZhCmluZGV4IGE1NTFjMjMuLjI2NTg2MTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXVsdGlwb3J0L3NlcnZpY2UvSGVsbG8xSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXVsdGlwb3J0L3NlcnZpY2UvSGVsbG8xSW1wbC5qYXZhCkBAIC0zOCw4ICszOCw4IEBACiAKICAgICBwdWJsaWMgSGVsbG8xUmVzcG9uc2UgaGVsbG8xKEhlbGxvMVJlcXVlc3QgcmVxKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8xLCAiICsgcmVxLmdldFN0cmluZygpICsgIiEiKTsKLQlIZWxsbzFSZXNwb25zZSByZXNwID0gbmV3IEhlbGxvMVJlc3BvbnNlKCk7Ci0JcmVzcC5zZXRTdHJpbmcoIkhlbGxvMSwgIiArIHJlcS5nZXRTdHJpbmcoKSArICIhIik7CisgICAgSGVsbG8xUmVzcG9uc2UgcmVzcCA9IG5ldyBIZWxsbzFSZXNwb25zZSgpOworICAgIHJlc3Auc2V0U3RyaW5nKCJIZWxsbzEsICIgKyByZXEuZ2V0U3RyaW5nKCkgKyAiISIpOwogICAgICAgICByZXR1cm4gcmVzcDsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9zZXJ2aWNlL0hlbGxvSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvc2VydmljZS9IZWxsb0ltcGwuamF2YQppbmRleCA4MmY0ZWZlLi4yMGUxZTU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9zZXJ2aWNlL0hlbGxvSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXVsdGlwb3J0L3NlcnZpY2UvSGVsbG9JbXBsLmphdmEKQEAgLTM4LDggKzM4LDggQEAKIAogICAgIHB1YmxpYyBIZWxsb1Jlc3BvbnNlIGhlbGxvKEhlbGxvUmVxdWVzdCByZXEpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsbywgIiArIHJlcS5nZXRTdHJpbmcoKSArICIhIik7Ci0JSGVsbG9SZXNwb25zZSByZXNwID0gbmV3IEhlbGxvUmVzcG9uc2UoKTsKLQlyZXNwLnNldFN0cmluZygiSGVsbG8sICIgKyByZXEuZ2V0U3RyaW5nKCkgKyAiISIpOworICAgIEhlbGxvUmVzcG9uc2UgcmVzcCA9IG5ldyBIZWxsb1Jlc3BvbnNlKCk7CisgICAgcmVzcC5zZXRTdHJpbmcoIkhlbGxvLCAiICsgcmVxLmdldFN0cmluZygpICsgIiEiKTsKICAgICAgICAgcmV0dXJuIHJlc3A7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXVsdGlwb3J0L3dlYi54bWwKaW5kZXggZjNiNmNjNi4uYWY4MjQ4YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC93ZWIueG1sCkBAIC0xOCw3ICsxOCw3IEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMi41IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKICAgPGRpc3BsYXktbmFtZT5XU1cySlJMSHR0cFRlc3RBcHA8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDZlZjUxM2EuLjRiYzllYWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ibm9uYW1lIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUvYnVpbGQueG1sCmluZGV4IGU3NTJjOTIuLjcxZjY1MTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZS9idWlsZC54bWwKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iJHthcHBuYW1lfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KQEAgLTEzMSw2ICsxMzEsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IEZBSUxFRCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZS9jbGllbnQtd2ViLnhtbAppbmRleCAwMjdkZmNlLi5iNGJiZjViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZS9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZS9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZS9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCBlN2VlNGEyLi42MGRmNzZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZS9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTYzLDkgKzYzLDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIEhFTExPIFNFUlZJQ0UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyBBbGwiKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZS9lbmRwb2ludC9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUvZW5kcG9pbnQvSGVsbG8uamF2YQppbmRleCAyNGE3OGQxLi41NDY2ZWRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZS9lbmRwb2ludC9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lL2VuZHBvaW50L0hlbGxvLmphdmEKQEAgLTIwLDggKzIwLDggQEAKIAogQFdlYlNlcnZpY2UKIHB1YmxpYyBjbGFzcyBIZWxsbyB7Ci0JCisKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyBwYXJhbSkgewotCXJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgcGFyYW07CisgICAgcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvICIgKyBwYXJhbTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZS93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUvd2ViLnhtbAppbmRleCBmNTFjY2MwLi41NjRjZDRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZS93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lL3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsbzwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsbzwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L0hlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L0hlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUvd2ViY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUvd2ViY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDE5NzJjNTkuLmMwMjE2MjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lL3dlYmNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZS93ZWJjbGllbnQvQ2xpZW50LmphdmEKQEAgLTMxLDE0ICszMSwxNCBAQAogICAgICAgICBIZWxsb1NlcnZpY2Ugc2VydmljZTsKIAogICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKICAgICAgICAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEhlbGxvIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvUG9ydCgpOwogCiAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFsbCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZTIvYnVpbGQucHJvcGVydGllcwppbmRleCBhZDJkNGNhLi43ODk1ZTJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZTIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZTIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ibm9uYW1lMiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lMi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZTIvYnVpbGQueG1sCmluZGV4IDIyN2FlYTQuLjM4MTA2YjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUyL2J1aWxkLnhtbApAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS93c2NsaWVudC9SZXF1ZXN0UHJvY2Vzc29yIi8+CiAgICAgICAgICAgPC9qYXZhPgotICAgICAgICA8IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPiAKKyAgICAgICAgPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9IndlYmNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5ob3N0fSIgdmFsdWU9IkhUVFBfSE9TVCIvPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLnBvcnR9IiB2YWx1ZT0iSFRUUF9QT1JUIi8+CiAgICAgICAgIDwvdGFyZ2V0PgpAQCAtMTQxLDUgKzE0MSw1IEBACiAKICAgICA8L3Byb2plY3Q+CiAKLSAgICAKLSAgIAorCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lMi9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lMi9jbGllbnQtd2ViLnhtbAppbmRleCAwMjdkZmNlLi5iNGJiZjViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZTIvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUyL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lMi9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUyL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggNmE5YTViYS4uN2YxM2U5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUyL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUyL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lMi9lbmRwb2ludC9IZWxsbzIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lMi9lbmRwb2ludC9IZWxsbzIuamF2YQppbmRleCA0YWVmOTIyLi43MDViY2RhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZTIvZW5kcG9pbnQvSGVsbG8yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUyL2VuZHBvaW50L0hlbGxvMi5qYXZhCkBAIC0yNCw4ICsyNCw4IEBACiAgICAgcG9ydE5hbWU9IkhlbGxvIgogKQogcHVibGljIGNsYXNzIEhlbGxvMiB7Ci0JCisKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyBwYXJhbSkgewotCXJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgcGFyYW07CisgICAgcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvICIgKyBwYXJhbTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZTIvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lMi93ZWIueG1sCmluZGV4IDBjNDU4ZjQuLmE4MmRjYzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lMi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lMi93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBIZWxsbyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBIZWxsbyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBIZWxsbyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+SGVsbG9XZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuSGVsbG8yPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgSGVsbG8gV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkhlbGxvV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkhlbGxvPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkhlbGxvMjwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L0hlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L0hlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUyL3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lMi93ZWJjbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZmQ3YmQ2MC4uMTdhYjI0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUyL3dlYmNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZTIvd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMSwxNCArMzEsMTQgQEAKICAgICAgICAgSGVsbG9TZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCiAgICAgICAgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBIZWxsbyBwb3J0ID0gc2VydmljZS5nZXRIZWxsbygpOwogCiAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFsbCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub3dlYnhtbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub3dlYnhtbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDkxZTkxMjUuLjQ0ZTY4MmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm93ZWJ4bWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vd2VieG1sL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDggKzE1LDggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Im5vd2VieG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub3dlYnhtbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vd2VieG1sL2J1aWxkLnhtbAppbmRleCA1YmQzNGZkLi41YTQzNmU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vd2VieG1sL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vd2VieG1sL2J1aWxkLnhtbApAQCAtNzMsNyArNzMsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1jbGllbnQiPgogICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50LWNsYXNzIiB2YWx1ZT0iY2xpZW50LkNsaWVudCIvPgpAQCAtODEsNyArODEsNyBAQAogICAgICAgPC9hbnRjYWxsPgogCiAKLTwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+IAorPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5ob3N0fSIgdmFsdWU9IkhUVFBfSE9TVCIvPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLnBvcnR9IiB2YWx1ZT0iSFRUUF9QT1JUIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vd2VieG1sL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm93ZWJ4bWwvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDBmNjdmZDIuLmRjYjRmZTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm93ZWJ4bWwvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm93ZWJ4bWwvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMiwzOCArMzIsMzggQEAKICAgICAgICAgc3RhdGljIEhlbGxvU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigic2VydmljZS13aXRoLW5vLXdlYnhtbCIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJzZXJ2aWNlLXdpdGgtbm8td2VieG1sIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoInNlcnZpY2Utd2l0aC1uby13ZWJ4bWwiKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInNlcnZpY2Utd2l0aC1uby13ZWJ4bWwiKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBIZWxsbyBwb3J0ID0gc2VydmljZS5nZXRIZWxsb1BvcnQoKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIiArIGFyZ3NbMF0pOwotCQlpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCX0KLQkJaWYocmV0LmluZGV4T2YoYXJnc1swXSkgPT0gLTEpIHsKKyAgICAgICAgfQorICAgICAgICBpZihyZXQuaW5kZXhPZihhcmdzWzBdKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgcmV0ID0gcG9ydC5zYXlEb3VibGVIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIiArIGFyZ3NbMF0pOwotCQlpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1Eb3VibGUtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1Eb3VibGUtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQotCQlpZihyZXQuaW5kZXhPZihhcmdzWzBdKSA9PSAtMSkgeworICAgICAgICB9CisgICAgICAgIGlmKHJldC5pbmRleE9mKGFyZ3NbMF0pID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQl9CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub3dlYnhtbC9lbmRwb2ludC9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub3dlYnhtbC9lbmRwb2ludC9IZWxsby5qYXZhCmluZGV4IDJlMGUwYWUuLjk0ZjEwMjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm93ZWJ4bWwvZW5kcG9pbnQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vd2VieG1sL2VuZHBvaW50L0hlbGxvLmphdmEKQEAgLTI1LDE1ICsyNSwxNSBAQAogICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2V4YW1wbGUuY29tL0hlbGxvIgogKQogcHVibGljIGNsYXNzIEhlbGxvIHsKLQlwdWJsaWMgSGVsbG8oKSB7fQorICAgIHB1YmxpYyBIZWxsbygpIHt9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhlbGxvIiwgYWN0aW9uPSJ1cm46U2F5SGVsbG8iKQotCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgewotCQlyZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHdobzsKLQl9CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKKyAgICAgICAgcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvICIgKyB3aG87CisgICAgfQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlEb3VibGVIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKLQlwdWJsaWMgU3RyaW5nIHNheURvdWJsZUhlbGxvKFN0cmluZyB3aG8pIHsKLQkJcmV0dXJuICJXZWJTdmNUZXN0LURvdWJsZS1IZWxsbyAiICsgd2hvICsgIiBBTkQgIiArIHdobzsKLQl9CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlEb3VibGVIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKKyAgICBwdWJsaWMgU3RyaW5nIHNheURvdWJsZUhlbGxvKFN0cmluZyB3aG8pIHsKKyAgICAgICAgcmV0dXJuICJXZWJTdmNUZXN0LURvdWJsZS1IZWxsbyAiICsgd2hvICsgIiBBTkQgIiArIHdobzsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL29uZXdheS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9vbmV3YXkvYnVpbGQucHJvcGVydGllcwppbmRleCA3MzM4Y2VlLi42YjkzNjUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL29uZXdheS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvb25ld2F5L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Im9uZXdheSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvb25ld2F5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvb25ld2F5L2J1aWxkLnhtbAppbmRleCBhNWRmODJjLi5kNGFlYTNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL29uZXdheS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9vbmV3YXkvYnVpbGQueG1sCkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L3dzY2xpZW50L1JlcXVlc3RQcm9jZXNzb3IiLz4KICAgICAgICAgICA8L2phdmE+Ci0gICAgICAgICAgPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4gCisgICAgICAgICAgPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4KICAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAuaG9zdH0iIHZhbHVlPSJIVFRQX0hPU1QiLz4KICAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAucG9ydH0iIHZhbHVlPSJIVFRQX1BPUlQiLz4KICAgICAgICAgPC90YXJnZXQ+CkBAIC0xNTQsNyArMTU0LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLWNsaWVudCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWVkIHBhc3NlZCIvPgotICAgIDwvdGFyZ2V0PgkKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LXN1Y2Nlc3MiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBQQVNTRUQiLz4KQEAgLTE2Miw3ICsxNjIsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IEZBSUxFRCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgogLS0+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL29uZXdheS9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvb25ld2F5L2NsaWVudC13ZWIueG1sCmluZGV4IDAyN2RmY2UuLmI0YmJmNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvb25ld2F5L2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvb25ld2F5L2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvb25ld2F5L2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL29uZXdheS9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IDYxNTg3NmMuLmQzZTM5YjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvb25ld2F5L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9vbmV3YXkvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjAsNyArNjAsNyBAQAogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwotICAgICAgIAorCiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBIRUxMTyBTRVJWSUNFIElTIikgIT0gLTEpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL29uZXdheS93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9vbmV3YXkvd2ViLnhtbAppbmRleCBkNGVlNGI1Li4yN2Y5ZjIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL29uZXdheS93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvb25ld2F5L3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsbzwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4xPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsbzwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4xPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L0hlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L0hlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9vbmV3YXkvd2ViY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9vbmV3YXkvd2ViY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDUzMzcyMzYuLjNlN2I4OGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvb25ld2F5L3dlYmNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL29uZXdheS93ZWJjbGllbnQvQ2xpZW50LmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAgICAgSGVsbG9TZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBTdHJpbmcgcmV0PSJPbmV3YXkgd29ya3MiOwogICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSGVsbG8gcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9Qb3J0KCk7CiAKICAgICAgICAgICAgICAgICBwb3J0LnNheUhlbGxvKCJBbGwiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcGtnZWR3YXJzZXJ2aWNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3BrZ2Vkd2Fyc2VydmljZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDJkYzE2Y2QuLjdiMDc3MGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcGtnZWR3YXJzZXJ2aWNlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wa2dlZHdhcnNlcnZpY2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJwa2doZWxsbyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3BrZ2Vkd2Fyc2VydmljZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3BrZ2Vkd2Fyc2VydmljZS9idWlsZC54bWwKaW5kZXggYzE4NTIzNC4uMmVkZTZkOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wa2dlZHdhcnNlcnZpY2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcGtnZWR3YXJzZXJ2aWNlL2J1aWxkLnhtbApAQCAtODgsMTQgKzg4LDE0IEBACiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50Ij4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWNsaWVudCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQtY2xhc3MiIHZhbHVlPSJjbGllbnQuQ2xpZW50Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJvdGhlci1hcmdzIiB2YWx1ZT0id2FyLXdpdGgtcGFja2FnZWQtd3NkbC1hbmQtc2NoZW1hIi8+CiAgICAgICA8L2FudGNhbGw+CiAKLTwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+IAorPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5ob3N0fSIgdmFsdWU9IkhUVFBfSE9TVCIvPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLnBvcnR9IiB2YWx1ZT0iSFRUUF9QT1JUIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3BrZ2Vkd2Fyc2VydmljZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3BrZ2Vkd2Fyc2VydmljZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYzI3MDY0OC4uMmE5NTA5NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wa2dlZHdhcnNlcnZpY2UvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcGtnZWR3YXJzZXJ2aWNlL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzIsMTAgKzMyLDEwIEBACiAgICAgICAgIHN0YXRpYyBIZWxsb1NlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLXNpbXBsZS1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLXNpbXBsZS1hbm5vdGF0aW9uIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWFubm90YXRpb24iKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewpAQCAtNDMsMTYgKzQzLDE2IEBACiAgICAgICAgICAgICAgICAgSGVsbG8gcG9ydCA9IHNlcnZpY2UuZ2V0TXlQb3J0KCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiICsgYXJnc1swXSk7Ci0JCSAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQotCQkgICAgaWYocmV0LmluZGV4T2YoYXJnc1swXSkgPT0gLTEpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKGFyZ3NbMF0pID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcGtnZWR3YXJzZXJ2aWNlL2VuZHBvaW50L0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3BrZ2Vkd2Fyc2VydmljZS9lbmRwb2ludC9IZWxsby5qYXZhCmluZGV4IDU4ZjIzMzYuLjEyN2JjYzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcGtnZWR3YXJzZXJ2aWNlL2VuZHBvaW50L0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wa2dlZHdhcnNlcnZpY2UvZW5kcG9pbnQvSGVsbG8uamF2YQpAQCAtMjcsMTAgKzI3LDEwIEBACiAgICAgd3NkbExvY2F0aW9uPSJXRUItSU5GL3dzZGwvSGVsbG9TZXJ2aWNlLndzZGwiCiApCiBwdWJsaWMgY2xhc3MgSGVsbG8gewotCXB1YmxpYyBIZWxsbygpIHt9CisgICAgcHVibGljIEhlbGxvKCkge30KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCi0JcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7Ci0JCXJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvOwotCX0KKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhlbGxvIiwgYWN0aW9uPSJ1cm46U2F5SGVsbG8iKQorICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgeworICAgICAgICByZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHdobzsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3BrZ2Vkd2Fyc2VydmljZS93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wa2dlZHdhcnNlcnZpY2Uvd2ViLnhtbAppbmRleCAzN2NlMTgyLi5jYzY0MTFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3BrZ2Vkd2Fyc2VydmljZS93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcGtnZWR3YXJzZXJ2aWNlL3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsbzwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsbzwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvSGVsbG9TZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkhlbGxvPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9IZWxsb1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcG9zdGNvbnN0cnVjdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wb3N0Y29uc3RydWN0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzk0NGNiYy4uZTQwNzZkYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wb3N0Y29uc3RydWN0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wb3N0Y29uc3RydWN0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InBvc3Rjb25zdHJ1Y3QiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Bvc3Rjb25zdHJ1Y3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wb3N0Y29uc3RydWN0L2J1aWxkLnhtbAppbmRleCA2YTUyYzNmLi5kM2NjMWFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Bvc3Rjb25zdHJ1Y3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcG9zdGNvbnN0cnVjdC9idWlsZC54bWwKQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgICAgIDxhcmcgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L3dzY2xpZW50L1JlcXVlc3RQcm9jZXNzb3IiLz4KICAgICAgICAgICA8L2phdmE+CiAKLSAgICAgICAgIDwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+IAorICAgICAgICAgPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9IndlYmNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5ob3N0fSIgdmFsdWU9IkhUVFBfSE9TVCIvPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLnBvcnR9IiB2YWx1ZT0iSFRUUF9QT1JUIi8+CiAgICAgICAgIDwvdGFyZ2V0PgpAQCAtMjAyLDcgKzIwMiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50Ij4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWNsaWVudCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQtY2xhc3MiIHZhbHVlPSJjbGllbnQuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Bvc3Rjb25zdHJ1Y3QvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Bvc3Rjb25zdHJ1Y3QvY2xpZW50LXdlYi54bWwKaW5kZXggMDI3ZGZjZS4uYjRiYmY1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wb3N0Y29uc3RydWN0L2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcG9zdGNvbnN0cnVjdC9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Bvc3Rjb25zdHJ1Y3QvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcG9zdGNvbnN0cnVjdC9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IGU0NThmMzYuLjkwYmYxOGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcG9zdGNvbnN0cnVjdC9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcG9zdGNvbnN0cnVjdC9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0gICAgICAgCisKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIEhFTExPIFNFUlZJQ0UgSVMiKSAhPSAtMSkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcG9zdGNvbnN0cnVjdC93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wb3N0Y29uc3RydWN0L3dlYi54bWwKaW5kZXggOGZhZWIwNy4uMzdlMjc5NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wb3N0Y29uc3RydWN0L3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wb3N0Y29uc3RydWN0L3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsbzwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4xPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsbzwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4xPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvSGVsbG9TZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkhlbGxvPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9IZWxsb1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcG9zdGNvbnN0cnVjdC93ZWJjbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Bvc3Rjb25zdHJ1Y3Qvd2ViY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDVkOGVlMTIuLjU4NDBjYTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcG9zdGNvbnN0cnVjdC93ZWJjbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wb3N0Y29uc3RydWN0L3dlYmNsaWVudC9DbGllbnQuamF2YQpAQCAtMzEsMTQgKzMxLDE0IEBACiAgICAgICAgIEhlbGxvU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQogICAgICAgICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSGVsbG8gcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9Qb3J0KCk7CiAKICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQWxsIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL2FwcGNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvYXBwY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDM5YzFiOTMuLjM0MWVlNmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvYXBwY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvYXBwY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMCwxMCArMzAsMTAgQEAKICAgICAgICAgQFdlYlNlcnZpY2VSZWYobmFtZT0ic2VydmljZS9NeVNlcnZpY2UiKSBzdGF0aWMgQWRkTnVtYmVyc1NlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLXNpbXBsZS1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLXNpbXBsZS1hbm5vdGF0aW9uIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWFubm90YXRpb24iKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICAgICAgICAgIEFkZE51bWJlcnNQb3J0VHlwZSBwb3J0ID0gc2VydmljZS5nZXRBZGROdW1iZXJzUG9ydFR5cGUoKTsKICAgICAgICAgICAgICAgICAoKEJpbmRpbmdQcm92aWRlcilwb3J0KS5nZXRSZXF1ZXN0Q29udGV4dCgpLnB1dChCaW5kaW5nUHJvdmlkZXIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3ByZXBrZ2VkLXN2Yy0xL3dlYnNlcnZpY2UvQWRkTnVtYmVyc1NlcnZpY2U/V1NETCIpOwogICAgICAgICAgICAgICAgIGludCByZXQgPSBwb3J0LmFkZE51bWJlcnMoMTAwLCAyMDApOwotCQlpZihyZXQgIT0gMzAwKSB7CisgICAgICAgIGlmKHJldCAhPSAzMDApIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygicHJlLXBrZ2VkLWFwcGNsaWVudCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvYnVpbGQucHJvcGVydGllcwppbmRleCAzZjY3MGI0Li45YjI0NzMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InByZXBrZ2VkLXN2Yy0xIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS9idWlsZC54bWwKaW5kZXggYTVlZmE4Yi4uNjBmNTNjNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS9idWlsZC54bWwKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9IndzaW1wb3J0LmFyZ3MiCiAgICAgICAgICAgdmFsdWU9Ii1iIGN1c3RvbS1jbGllbnQueG1sIC1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMgJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvQWRkTnVtYmVycy53c2RsIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMiCiAgICAgICAgICAgICBpbmNsdWRlcz0id2ViY2xpZW50LyoqIj4KICA8Y2xhc3NwYXRoIHJlZmlkPSJjbGFzc3BhdGgiLz4KIDwvamF2YWM+CkBAIC0xMDMsNyArMTAzLDcgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9IndzaW1wb3J0LmFyZ3MiCiAgICAgICAgICAgdmFsdWU9Ii1iIGN1c3RvbS1jbGllbnQueG1sIC1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FwcGNsaWVudCAke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS9BZGROdW1iZXJzLndzZGwiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FwcGNsaWVudCIgIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXBwY2xpZW50IgogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImFwcGNsaWVudC8qKiIvPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXBwY2xpZW50L01FVEEtSU5GL3dzZGwiLz4KQEAgLTE2MiwxMSArMTYyLDExIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5UZXN0Q2xpZW50Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL2NsaWVudC13ZWIueG1sCmluZGV4IGU2OTFhODkuLjk2M2Y2YWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggMTEzOTJkOS4uNDRmN2NiYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjMsOSArNjMsOSBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgQUREIFNFUlZJQ0UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiWzMwMF0iKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL2N1c3RvbS1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS9jdXN0b20tY2xpZW50LnhtbAppbmRleCA2YTEzNWFkLi5mZTNmNzM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL2N1c3RvbS1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvY3VzdG9tLWNsaWVudC54bWwKQEAgLTE3LDEyICsxNywxMiBAQAogCiAtLT4KIAotPGJpbmRpbmdzIAorPGJpbmRpbmdzCiAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKICAgICB4bWxuczpqYXhiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXhiIgogICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgogICAgIHdzZGxMb2NhdGlvbj0iQWRkTnVtYmVycy53c2RsIgotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+ICAgIAorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+CiAgICAgPGJpbmRpbmdzIG5vZGU9Im5zMTpkZWZpbml0aW9ucyIgeG1sbnM6bnMxPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+CiAgICAgICAgIDxwYWNrYWdlIG5hbWU9ImNsaWVudCIvPgogICAgIDwvYmluZGluZ3M+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL2N1c3RvbS1zZXJ2ZXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS9jdXN0b20tc2VydmVyLnhtbAppbmRleCA0Y2ZiYjU5Li5lNmJiMjM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL2N1c3RvbS1zZXJ2ZXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvY3VzdG9tLXNlcnZlci54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIAogLS0+CiAKLTxiaW5kaW5ncyAKKzxiaW5kaW5ncwogICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgICAgeG1sbnM6amF4Yj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4YiIKICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvZW5kcG9pbnQvQWRkTnVtYmVyc0ltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvZW5kcG9pbnQvQWRkTnVtYmVyc0ltcGwuamF2YQppbmRleCBlN2JkYTdjLi4zMGFjNjk5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL2VuZHBvaW50L0FkZE51bWJlcnNJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS9lbmRwb2ludC9BZGROdW1iZXJzSW1wbC5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIEBqYWthcnRhLmp3cy5XZWJTZXJ2aWNlICh3c2RsTG9jYXRpb249IldFQi1JTkYvd3NkbC9BZGROdW1iZXJzLndzZGwiLCBzZXJ2aWNlTmFtZT0iQWRkTnVtYmVyc1NlcnZpY2UiLCB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9kdWtlLm9yZyIsIHBvcnROYW1lPSJBZGROdW1iZXJzUG9ydFR5cGUiLCBlbmRwb2ludEludGVyZmFjZT0iZW5kcG9pbnQuQWRkTnVtYmVyc1BvcnRUeXBlIikKIHB1YmxpYyBjbGFzcyBBZGROdW1iZXJzSW1wbCBpbXBsZW1lbnRzIEFkZE51bWJlcnNQb3J0VHlwZSB7Ci0gICAgCisKICAgICBwdWJsaWMgaW50IGFkZE51bWJlcnMgKGludCBudW1iZXIxLCBpbnQgbnVtYmVyMikgewogICAgICAgICByZXR1cm4gbnVtYmVyMSArIG51bWJlcjI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS93ZWIueG1sCmluZGV4IDYyNTYxNTMuLjE4ODllYjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL3dlYi54bWwKQEAgLTE4LDI5ICsxOCwyOSBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+QWRkTnVtYmVycyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGVzY3JpcHRpb24+QWRkTnVtYmVycyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEFkZE51bWJlcnMgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkFkZE51bWJlcnNXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+QWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBBZGROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5BZGROdW1iZXJzV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9BZGROdW1iZXJzU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQWRkTnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvd2ViY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS93ZWJjbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMDQ1MjQ4YS4uZGM1YmI3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS93ZWJjbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS93ZWJjbGllbnQvQ2xpZW50LmphdmEKQEAgLTI3LDggKzI3LDggQEAKIAogICAgICAgICBAV2ViU2VydmljZVJlZihuYW1lPSJzZXJ2aWNlL015U2VydmljZSIpIEFkZE51bWJlcnNTZXJ2aWNlIHNlcnZpY2U7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyLWVqYmlud2ViL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXItZWpiaW53ZWIvYnVpbGQueG1sCmluZGV4IGY1MzQ3NzcuLjRmODMxOTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXItZWpiaW53ZWIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXItZWpiaW53ZWIvYnVpbGQueG1sCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgPHByb3BlcnR5IG5hbWU9ImNsaWVudC1zcmMtbmFtZSIgdmFsdWU9ImNsaWVudC9DbGllbnQuamF2YSIvPgogICAgIDxiYXNlbmFtZSBmaWxlPSIke3NyYy1uYW1lfSIgcHJvcGVydHk9InNlcnZlciIgc3VmZml4PSIuamF2YSIvPgogICAgIDxkaXJuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0iZGlyZWN0b3J5Ii8+Ci0gICAgPGJhc2VuYW1lIGZpbGU9IiR7ZGlyZWN0b3J5fSIgcHJvcGVydHk9InBrZy1uYW1lIi8+IAorICAgIDxiYXNlbmFtZSBmaWxlPSIke2RpcmVjdG9yeX0iIHByb3BlcnR5PSJwa2ctbmFtZSIvPgogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzaW1wb3J0Ij4KICAgICAgICAgICAgIDxhcmcgbGluZT0iLWtlZXAgLWQgJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIGVuZHBvaW50L3dzZGwvSGVsbG9JbXBsU2VydmljZS53c2RsIi8+CkBAIC0zNyw5ICszNyw5IEBACiAgICAgICAgIDx3YXIgZGVzdGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtzZXJ2ZXJ9LndhciIgbmVlZHhtbGZpbGU9ImZhbHNlIj4KICAgICAgICAgICAgIDx3ZWJpbmYgZGlyPSIke3BrZy1uYW1lfSIKICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9IioueG1sICoqLyoud3NkbCAqKi8qLnhzZCIvPgotICAgICAgICAgICAgPGNsYXNzZXMgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiIAorICAgICAgICAgICAgPGNsYXNzZXMgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiCiAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwa2ctbmFtZX0vKioiLz4KLSAgICAgICAgPC93YXI+ICAKKyAgICAgICAgPC93YXI+CiAgICAgICAgIDx3YWl0Zm9yIG1heHdhaXQ9IjEwMCIgbWF4d2FpdHVuaXQ9InNlY29uZCI+CiAgICAgICAgICAgICA8b3I+CiAgICAgICAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95LyR7c2VydmVyfS53YXJfZGVwbG95ZWQiLz4KQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgPGZhaWwgaWY9ImRlcGxveV9mYWlsZWQiIG1lc3NhZ2U9IkRlcGxveW1lbnQgZmFpbGVkIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jbGllbnQiLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3NpbXBvcnQiPgotICAgICAgICAgICAgPGFyZyBsaW5lPSIta2VlcCAtZCAke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMgaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vJHtzZXJ2ZXJ9LyR7c2VydmVyfVNlcnZpY2U/V1NETCIvPgkKKyAgICAgICAgICAgIDxhcmcgbGluZT0iLWtlZXAgLWQgJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIGh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9LyR7c2VydmVyfS8ke3NlcnZlcn1TZXJ2aWNlP1dTREwiLz4KICAgICAgICAgPC9leGVjPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuamFyLWNsaWVudC11dGlscyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImludGVybmFsLXJ1biIvPgpAQCAtODYsNiArODYsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3QgZmFpbGVkIi8+Ci0gICAgPC90YXJnZXQ+ICAgCQotICAgIAorICAgIDwvdGFyZ2V0PgorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyLWVqYmlud2ViL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXItZWpiaW53ZWIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDM3ZWQyYWYuLjVjODI1MzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXItZWpiaW53ZWIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXItZWpiaW53ZWIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMCwxMCArMzAsMTAgQEAKIAogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigic2VydmxldC1wcm92aWRlci1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oInNlcnZsZXQtcHJvdmlkZXItYW5ub3RhdGlvbiIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJzZXJ2bGV0LXByb3ZpZGVyLWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInNlcnZsZXQtcHJvdmlkZXItYW5ub3RhdGlvbiIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CkBAIC00MSwxMSArNDEsMTEgQEAKICAgICAgICAgICAgICAgICBIZWxsb0ltcGwgcG9ydCA9IG5ldyBIZWxsb0ltcGxTZXJ2aWNlKCkuZ2V0SGVsbG9JbXBsKCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKLQkJICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJTaW1wbGUtQW5ub3RhdGlvbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic2VydmxldC1wcm92aWRlci1hbm5vdGF0aW9uIiwgc3RhdC5QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlci9idWlsZC54bWwKaW5kZXggODJkMzNjZS4uM2JjYzhkMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlci9idWlsZC54bWwKQEAgLTI4LDI1ICsyOCwyNSBAQAogICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGllbnQtc3JjLW5hbWUiIHZhbHVlPSJjbGllbnQvQ2xpZW50LmphdmEiLz4KICAgICA8YmFzZW5hbWUgZmlsZT0iJHtzcmMtbmFtZX0iIHByb3BlcnR5PSJzZXJ2ZXIiIHN1ZmZpeD0iLmphdmEiLz4KICAgICA8ZGlybmFtZSBmaWxlPSIke3NyYy1uYW1lfSIgcHJvcGVydHk9ImRpcmVjdG9yeSIvPgotICAgIDxiYXNlbmFtZSBmaWxlPSIke2RpcmVjdG9yeX0iIHByb3BlcnR5PSJwa2ctbmFtZSIvPiAKKyAgICA8YmFzZW5hbWUgZmlsZT0iJHtkaXJlY3Rvcnl9IiBwcm9wZXJ0eT0icGtnLW5hbWUiLz4KICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi93c2ltcG9ydCI+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii1rZWVwIC1kICR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyBlbmRwb2ludC93c2RsL0hlbGxvSW1wbFNlcnZpY2Uud3NkbCIvPgogICAgICAgICA8L2V4ZWM+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ0ZXN0LWNvbXBpbGUiLz4KLQk8d2FyIGRlc3RmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95LyR7c2VydmVyfS53YXIiCi0JICAgIHdlYnhtbD0id2ViLnhtbCI+Ci0JICAgIDx3ZWJpbmYgZGlyPSIke3BrZy1uYW1lfSIKLQkJaW5jbHVkZXM9IioueG1sICoqLyoud3NkbCAqKi8qLnhzZCIvPgotCSAgICA8Y2xhc3NlcyBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIgCi0JCWluY2x1ZGVzPSIke3BrZy1uYW1lfS8qKiIvPgotCTwvd2FyPiAgCi0JPHdhaXRmb3IgbWF4d2FpdD0iMTAwIiBtYXh3YWl0dW5pdD0ic2Vjb25kIj4KLQkgIDxvcj4KLQkgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke3NlcnZlcn0ud2FyX2RlcGxveWVkIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ0ZXN0LWNvbXBpbGUiLz4KKyAgICA8d2FyIGRlc3RmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95LyR7c2VydmVyfS53YXIiCisgICAgICAgIHdlYnhtbD0id2ViLnhtbCI+CisgICAgICAgIDx3ZWJpbmYgZGlyPSIke3BrZy1uYW1lfSIKKyAgICAgICAgaW5jbHVkZXM9IioueG1sICoqLyoud3NkbCAqKi8qLnhzZCIvPgorICAgICAgICA8Y2xhc3NlcyBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIKKyAgICAgICAgaW5jbHVkZXM9IiR7cGtnLW5hbWV9LyoqIi8+CisgICAgPC93YXI+CisgICAgPHdhaXRmb3IgbWF4d2FpdD0iMTAwIiBtYXh3YWl0dW5pdD0ic2Vjb25kIj4KKyAgICAgIDxvcj4KKyAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke3NlcnZlcn0ud2FyX2RlcGxveWVkIi8+CiAgICAgICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtzZXJ2ZXJ9Lndhcl9kZXBsb3lGYWlsZWQiLz4KLSAgICAgICAJICA8L29yPgotCTwvd2FpdGZvcj4KKyAgICAgICAgICAgICA8L29yPgorICAgIDwvd2FpdGZvcj4KICAgICAgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0iZGVwbG95X3N1Y2NlZWRlZCI+CiAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95LyR7c2VydmVyfS53YXJfZGVwbG95ZWQiLz4KICAgICAgICAgPC9jb25kaXRpb24+CkBAIC01NSwxNCArNTUsMTQgQEAKICAgICAgICAgPC9jb25kaXRpb24+CiAKICAgICAgICAgPGZhaWwgaWY9ImRlcGxveV9mYWlsZWQiIG1lc3NhZ2U9IkRlcGxveW1lbnQgZmFpbGVkIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNsaWVudCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jbGllbnQiLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3NpbXBvcnQiPgotICAgICAgICAgICAgPGFyZyBsaW5lPSIta2VlcCAtZCAke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMgaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vJHtzZXJ2ZXJ9LyR7c2VydmVyfVNlcnZpY2U/V1NETCIvPgkKKyAgICAgICAgICAgIDxhcmcgbGluZT0iLWtlZXAgLWQgJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIGh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9LyR7c2VydmVyfS8ke3NlcnZlcn1TZXJ2aWNlP1dTREwiLz4KICAgICA8L2V4ZWM+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5qYXItY2xpZW50LXV0aWxzIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJpbnRlcm5hbC1ydW4iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImludGVybmFsLXJ1biIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImF1dG91bmRlcGxveS1maWxlIj4KLSAgCSAgICA8cGFyYW0gbmFtZT0iZmlsZW5hbWUiIHZhbHVlPSIke3NlcnZlcn0ud2FyIi8+CisgICAgICAgICAgPHBhcmFtIG5hbWU9ImZpbGVuYW1lIiB2YWx1ZT0iJHtzZXJ2ZXJ9LndhciIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxjb25kaXRpb24gcHJvcGVydHk9InVuZGVwbG95X3N1Y2NlZWRlZCI+CiAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95LyR7c2VydmVyfS5qYXJfdW5kZXBsb3llZCIvPgpAQCAtNzEsMTQgKzcxLDE0IEBACiAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95LyR7c2VydmVyfS5qYXJfdW5kZXBsb3lGYWlsZWQiLz4KICAgICAgICAgPC9jb25kaXRpb24+CiAgICAgICAgIDxmYWlsIGlmPSJ1bmRlcGxveV9mYWlsZWQiIG1lc3NhZ2U9InVuZGVwbG95bWVudCBmYWlsZWQiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJlcG9ydCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icmVwb3J0Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InRlc3RfYnVpbGQiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzaW1wb3J0Ij4KLSAgICAgICAgCTxhcmcgbGluZT0iLWtlZXAgLWQgJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIGVuZHBvaW50L3dzZGwvSGVsbG9JbXBsU2VydmljZS53c2RsIi8+Ci0JPC9leGVjPgotCTxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi93c2ltcG9ydCI+CisgICAgICAgICAgICA8YXJnIGxpbmU9Ii1rZWVwIC1kICR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyBlbmRwb2ludC93c2RsL0hlbGxvSW1wbFNlcnZpY2Uud3NkbCIvPgorICAgIDwvZXhlYz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlcG9ydC1zdWNjZXNzIj4KQEAgLTg3LDYgKzg3LDYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBmYWlsZWQiLz4KLSAgICA8L3RhcmdldD4gICAJCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlci9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMzdlZDJhZi4uNWM4MjUzMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlci9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlci9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMwLDEwICszMCwxMCBAQAogCiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJzZXJ2bGV0LXByb3ZpZGVyLWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigic2VydmxldC1wcm92aWRlci1hbm5vdGF0aW9uIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoInNlcnZsZXQtcHJvdmlkZXItYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgic2VydmxldC1wcm92aWRlci1hbm5vdGF0aW9uIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQxLDExICs0MSwxMSBAQAogICAgICAgICAgICAgICAgIEhlbGxvSW1wbCBwb3J0ID0gbmV3IEhlbGxvSW1wbFNlcnZpY2UoKS5nZXRIZWxsb0ltcGwoKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7aTwxMDtpKyspIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIpOwotCQkgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlNpbXBsZS1Bbm5vdGF0aW9uIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJzZXJ2bGV0LXByb3ZpZGVyLWFubm90YXRpb24iLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlci9lbmRwb2ludC9IZWxsb0ltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXIvZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEKaW5kZXggN2M1MjViNC4uOGE5NmZmNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlci9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyL2VuZHBvaW50L0hlbGxvSW1wbC5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiBpbXBvcnQgamFrYXJ0YS54bWwud3MuUHJvdmlkZXI7CiBpbXBvcnQgamFrYXJ0YS54bWwud3MuV2ViU2VydmljZVByb3ZpZGVyOwogaW1wb3J0IGpha2FydGEueG1sLndzLlNlcnZpY2VNb2RlOwotaW1wb3J0IGpha2FydGEueG1sLndzLlNlcnZpY2UJOwkKK2ltcG9ydCBqYWthcnRhLnhtbC53cy5TZXJ2aWNlICAgIDsKIGltcG9ydCBqYWthcnRhLnhtbC5zb2FwLlNPQVBNZXNzYWdlOwogaW1wb3J0IGpha2FydGEuZWpiLlN0YXRlbGVzczsKIApAQCAtNDEsMTEgKzQxLDExIEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSkFYQkNvbnRleHQgamF4YkNvbnRleHQgPSBjcmVhdGVKQVhCQ29udGV4dCgpOwogICAgIHByaXZhdGUgaW50IGNvbWJvOwogICAgIHByaXZhdGUgaW50IGJvZHlJbmRleDsKLSAgICAKKwogICAgIHB1YmxpYyBqYWthcnRhLnhtbC5iaW5kLkpBWEJDb250ZXh0IGdldEpBWEJDb250ZXh0KCl7CiAgICAgICAgIHJldHVybiBqYXhiQ29udGV4dDsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBqYWthcnRhLnhtbC5iaW5kLkpBWEJDb250ZXh0IGNyZWF0ZUpBWEJDb250ZXh0KCl7CiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIHJldHVybiBqYWthcnRhLnhtbC5iaW5kLkpBWEJDb250ZXh0Lm5ld0luc3RhbmNlKE9iamVjdEZhY3RvcnkuY2xhc3MpOwpAQCAtNTMsMjcgKzUzLDI3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgV2ViU2VydmljZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyBTb3VyY2UgaW52b2tlKFNvdXJjZSByZXF1ZXN0KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZWN2QmVhbihyZXF1ZXN0KTsKICAgICAgICAgICAgIHJldHVybiBzZW5kQmVhbigpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNlcnZpY2VFeGNlcHRpb24oIlByb3ZpZGVyIGVuZHBvaW50IGZhaWxlZCIsIGUpOyAgICAgICAgICAgIAorICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNlcnZpY2VFeGNlcHRpb24oIlByb3ZpZGVyIGVuZHBvaW50IGZhaWxlZCIsIGUpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHJlY3ZCZWFuKFNvdXJjZSBzb3VyY2UpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogcmVjdkJlYW4gKioqKioqIik7CiAgICAgICAgIEpBWEJFbGVtZW50IGVsZW1lbnQgPSAoSkFYQkVsZW1lbnQpIGpheGJDb250ZXh0LmNyZWF0ZVVubWFyc2hhbGxlcigpLnVubWFyc2hhbChzb3VyY2UpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm5hbWU9IitlbGVtZW50LmdldE5hbWUoKSsgIiB2YWx1ZT0iICsgZWxlbWVudC5nZXRWYWx1ZSgpKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm5hbWU9IitlbGVtZW50LmdldE5hbWUoKSsgIiB2YWx1ZT0iICsgZWxlbWVudC5nZXRWYWx1ZSgpKTsKICAgICAgICAgaWYgKGVsZW1lbnQuZ2V0VmFsdWUoKSBpbnN0YW5jZW9mIFNheUhlbGxvKSB7Ci0gICAgICAgICAgICBTYXlIZWxsbyBoZWxsbyA9IChTYXlIZWxsbykgZWxlbWVudC5nZXRWYWx1ZSgpOyAKKyAgICAgICAgICAgIFNheUhlbGxvIGhlbGxvID0gKFNheUhlbGxvKSBlbGVtZW50LmdldFZhbHVlKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNheSBIZWxsbyBmcm9tICIgKyBoZWxsby5nZXRBcmcwKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHJpdmF0ZSBTb3VyY2Ugc2VuZEJlYW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTgxLDkgKzgxLDkgQEAKICAgICAgICAgU2F5SGVsbG9SZXNwb25zZSByZXNwID0gbmV3IFNheUhlbGxvUmVzcG9uc2UoKTsKICAgICAgICAgcmVzcC5zZXRSZXR1cm4oIldlYlN2Y1Rlc3QtSGVsbG8iKTsKICAgICAgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJvdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0gICAgICAgIE9iamVjdEZhY3RvcnkgZmFjdG9yeSA9IG5ldyBPYmplY3RGYWN0b3J5KCk7IAorICAgICAgICBPYmplY3RGYWN0b3J5IGZhY3RvcnkgPSBuZXcgT2JqZWN0RmFjdG9yeSgpOwogICAgICAgICBqYXhiQ29udGV4dC5jcmVhdGVNYXJzaGFsbGVyKCkubWFyc2hhbChmYWN0b3J5LmNyZWF0ZVNheUhlbGxvUmVzcG9uc2UocmVzcCksIGJvdXQpOwogICAgICAgICByZXR1cm4gbmV3IFN0cmVhbVNvdXJjZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYm91dC50b0J5dGVBcnJheSgpKSk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyL3dlYi54bWwKaW5kZXggNWI4ZGIwYy4uZmJmMmVkNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXIvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgSGVsbG8gU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5IZWxsb1dBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgSGVsbG8gU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5IZWxsb1dBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgSGVsbG8gV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkhlbGxvV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPmVuZHBvaW50LkhlbGxvSW1wbDwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsb0ltcGw8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBIZWxsbyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9XZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+ZW5kcG9pbnQuSGVsbG9JbXBsPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkhlbGxvSW1wbDwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5lbmRwb2ludC5IZWxsb0ltcGw8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi9IZWxsb0ltcGxTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPmVuZHBvaW50LkhlbGxvSW1wbDwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L0hlbGxvSW1wbFNlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXJoYW5kbGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXJoYW5kbGVyL2J1aWxkLnhtbAppbmRleCA4MmQzM2NlLi4zYmNjOGQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyaGFuZGxlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlcmhhbmRsZXIvYnVpbGQueG1sCkBAIC0yOCwyNSArMjgsMjUgQEAKICAgICA8cHJvcGVydHkgbmFtZT0iY2xpZW50LXNyYy1uYW1lIiB2YWx1ZT0iY2xpZW50L0NsaWVudC5qYXZhIi8+CiAgICAgPGJhc2VuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0ic2VydmVyIiBzdWZmaXg9Ii5qYXZhIi8+CiAgICAgPGRpcm5hbWUgZmlsZT0iJHtzcmMtbmFtZX0iIHByb3BlcnR5PSJkaXJlY3RvcnkiLz4KLSAgICA8YmFzZW5hbWUgZmlsZT0iJHtkaXJlY3Rvcnl9IiBwcm9wZXJ0eT0icGtnLW5hbWUiLz4gCisgICAgPGJhc2VuYW1lIGZpbGU9IiR7ZGlyZWN0b3J5fSIgcHJvcGVydHk9InBrZy1uYW1lIi8+CiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3NpbXBvcnQiPgogICAgICAgICAgICAgPGFyZyBsaW5lPSIta2VlcCAtZCAke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMgZW5kcG9pbnQvd3NkbC9IZWxsb0ltcGxTZXJ2aWNlLndzZGwiLz4KICAgICAgICAgPC9leGVjPgotCTxhbnRjYWxsIHRhcmdldD0idGVzdC1jb21waWxlIi8+Ci0JPHdhciBkZXN0ZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke3NlcnZlcn0ud2FyIgotCSAgICB3ZWJ4bWw9IndlYi54bWwiPgotCSAgICA8d2ViaW5mIGRpcj0iJHtwa2ctbmFtZX0iCi0JCWluY2x1ZGVzPSIqLnhtbCAqKi8qLndzZGwgKiovKi54c2QiLz4KLQkgICAgPGNsYXNzZXMgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiIAotCQlpbmNsdWRlcz0iJHtwa2ctbmFtZX0vKioiLz4KLQk8L3dhcj4gIAotCTx3YWl0Zm9yIG1heHdhaXQ9IjEwMCIgbWF4d2FpdHVuaXQ9InNlY29uZCI+Ci0JICA8b3I+Ci0JICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtzZXJ2ZXJ9Lndhcl9kZXBsb3llZCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idGVzdC1jb21waWxlIi8+CisgICAgPHdhciBkZXN0ZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke3NlcnZlcn0ud2FyIgorICAgICAgICB3ZWJ4bWw9IndlYi54bWwiPgorICAgICAgICA8d2ViaW5mIGRpcj0iJHtwa2ctbmFtZX0iCisgICAgICAgIGluY2x1ZGVzPSIqLnhtbCAqKi8qLndzZGwgKiovKi54c2QiLz4KKyAgICAgICAgPGNsYXNzZXMgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiCisgICAgICAgIGluY2x1ZGVzPSIke3BrZy1uYW1lfS8qKiIvPgorICAgIDwvd2FyPgorICAgIDx3YWl0Zm9yIG1heHdhaXQ9IjEwMCIgbWF4d2FpdHVuaXQ9InNlY29uZCI+CisgICAgICA8b3I+CisgICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtzZXJ2ZXJ9Lndhcl9kZXBsb3llZCIvPgogICAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95LyR7c2VydmVyfS53YXJfZGVwbG95RmFpbGVkIi8+Ci0gICAgICAgCSAgPC9vcj4KLQk8L3dhaXRmb3I+CisgICAgICAgICAgICAgPC9vcj4KKyAgICA8L3dhaXRmb3I+CiAgICAgICAgIDxjb25kaXRpb24gcHJvcGVydHk9ImRlcGxveV9zdWNjZWVkZWQiPgogICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke3NlcnZlcn0ud2FyX2RlcGxveWVkIi8+CiAgICAgICAgIDwvY29uZGl0aW9uPgpAQCAtNTUsMTQgKzU1LDE0IEBACiAgICAgICAgIDwvY29uZGl0aW9uPgogCiAgICAgICAgIDxmYWlsIGlmPSJkZXBsb3lfZmFpbGVkIiBtZXNzYWdlPSJEZXBsb3ltZW50IGZhaWxlZCIvPgotCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jbGllbnQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY2xpZW50Ii8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzaW1wb3J0Ij4KLSAgICAgICAgICAgIDxhcmcgbGluZT0iLWtlZXAgLWQgJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIGh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9LyR7c2VydmVyfS8ke3NlcnZlcn1TZXJ2aWNlP1dTREwiLz4JCisgICAgICAgICAgICA8YXJnIGxpbmU9Ii1rZWVwIC1kICR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyBodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS8ke3NlcnZlcn0vJHtzZXJ2ZXJ9U2VydmljZT9XU0RMIi8+CiAgICAgPC9leGVjPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuamFyLWNsaWVudC11dGlscyIvPgotCTxhbnRjYWxsIHRhcmdldD0iaW50ZXJuYWwtcnVuIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJpbnRlcm5hbC1ydW4iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhdXRvdW5kZXBsb3ktZmlsZSI+Ci0gIAkgICAgPHBhcmFtIG5hbWU9ImZpbGVuYW1lIiB2YWx1ZT0iJHtzZXJ2ZXJ9LndhciIvPgorICAgICAgICAgIDxwYXJhbSBuYW1lPSJmaWxlbmFtZSIgdmFsdWU9IiR7c2VydmVyfS53YXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJ1bmRlcGxveV9zdWNjZWVkZWQiPgogICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke3NlcnZlcn0uamFyX3VuZGVwbG95ZWQiLz4KQEAgLTcxLDE0ICs3MSwxNCBAQAogICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke3NlcnZlcn0uamFyX3VuZGVwbG95RmFpbGVkIi8+CiAgICAgICAgIDwvY29uZGl0aW9uPgogICAgICAgICA8ZmFpbCBpZj0idW5kZXBsb3lfZmFpbGVkIiBtZXNzYWdlPSJ1bmRlcGxveW1lbnQgZmFpbGVkIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJyZXBvcnQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJlcG9ydCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ0ZXN0X2J1aWxkIj4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi93c2ltcG9ydCI+Ci0gICAgICAgIAk8YXJnIGxpbmU9Ii1rZWVwIC1kICR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyBlbmRwb2ludC93c2RsL0hlbGxvSW1wbFNlcnZpY2Uud3NkbCIvPgotCTwvZXhlYz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkIi8+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3NpbXBvcnQiPgorICAgICAgICAgICAgPGFyZyBsaW5lPSIta2VlcCAtZCAke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMgZW5kcG9pbnQvd3NkbC9IZWxsb0ltcGxTZXJ2aWNlLndzZGwiLz4KKyAgICA8L2V4ZWM+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtc3VjY2VzcyI+CkBAIC04Nyw2ICs4Nyw2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJlcG9ydC1mYWlsdXJlIj4KICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3QgZmFpbGVkIi8+Ci0gICAgPC90YXJnZXQ+ICAgCQotICAgIAorICAgIDwvdGFyZ2V0PgorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyaGFuZGxlci9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyaGFuZGxlci9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYTVhNGEwMS4uZWVlNjkyNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlcmhhbmRsZXIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXJoYW5kbGVyL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzIsMTAgKzMyLDEwIEBACiAgICAgICAgIHN0YXRpYyBIZWxsb0ltcGxTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJzZXJ2bGV0LXByb3ZpZGVyLWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigic2VydmxldC1wcm92aWRlci1hbm5vdGF0aW9uIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoInNlcnZsZXQtcHJvdmlkZXItYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgic2VydmxldC1wcm92aWRlci1hbm5vdGF0aW9uIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQzLDExICs0MywxMSBAQAogICAgICAgICAgICAgICAgIEhlbGxvSW1wbCBwb3J0ID0gc2VydmljZS5nZXRIZWxsb0ltcGwoKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7aTwxMDtpKyspIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oImluamVjdGVkVmFsdWUgQXBwc2VydmVyIFRlc3RlciAhIik7Ci0JCSAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiU2ltcGxlLUFubm90YXRpb24iLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInNlcnZsZXQtcHJvdmlkZXItYW5ub3RhdGlvbiIsIHN0YXQuUEFTUyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyaGFuZGxlci9lbmRwb2ludC9IZWxsb0ltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXJoYW5kbGVyL2VuZHBvaW50L0hlbGxvSW1wbC5qYXZhCmluZGV4IDRiNDdmYzEuLjBjOWQ5NTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXJoYW5kbGVyL2VuZHBvaW50L0hlbGxvSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXJoYW5kbGVyL2VuZHBvaW50L0hlbGxvSW1wbC5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiBpbXBvcnQgamFrYXJ0YS54bWwud3MuUHJvdmlkZXI7CiBpbXBvcnQgamFrYXJ0YS54bWwud3MuV2ViU2VydmljZVByb3ZpZGVyOwogaW1wb3J0IGpha2FydGEueG1sLndzLlNlcnZpY2VNb2RlOwotaW1wb3J0IGpha2FydGEueG1sLndzLlNlcnZpY2UJOwkKK2ltcG9ydCBqYWthcnRhLnhtbC53cy5TZXJ2aWNlICAgIDsKIGltcG9ydCBqYWthcnRhLnhtbC5zb2FwLlNPQVBNZXNzYWdlOwogaW1wb3J0IGpha2FydGEuZWpiLlN0YXRlbGVzczsKIApAQCAtNDIsMTEgKzQyLDExIEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSkFYQkNvbnRleHQgamF4YkNvbnRleHQgPSBjcmVhdGVKQVhCQ29udGV4dCgpOwogICAgIHByaXZhdGUgaW50IGNvbWJvOwogICAgIHByaXZhdGUgaW50IGJvZHlJbmRleDsKLSAgICAKKwogICAgIHB1YmxpYyBqYWthcnRhLnhtbC5iaW5kLkpBWEJDb250ZXh0IGdldEpBWEJDb250ZXh0KCl7CiAgICAgICAgIHJldHVybiBqYXhiQ29udGV4dDsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBqYWthcnRhLnhtbC5iaW5kLkpBWEJDb250ZXh0IGNyZWF0ZUpBWEJDb250ZXh0KCl7CiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIHJldHVybiBqYWthcnRhLnhtbC5iaW5kLkpBWEJDb250ZXh0Lm5ld0luc3RhbmNlKE9iamVjdEZhY3RvcnkuY2xhc3MpOwpAQCAtNTQsMjggKzU0LDI4IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgV2ViU2VydmljZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyBTb3VyY2UgaW52b2tlKFNvdXJjZSByZXF1ZXN0KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZWN2QmVhbihyZXF1ZXN0KTsKICAgICAgICAgICAgIHJldHVybiBzZW5kQmVhbigpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNlcnZpY2VFeGNlcHRpb24oIlByb3ZpZGVyIGVuZHBvaW50IGZhaWxlZCIsIGUpOyAgICAgICAgICAgIAorICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNlcnZpY2VFeGNlcHRpb24oIlByb3ZpZGVyIGVuZHBvaW50IGZhaWxlZCIsIGUpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHJlY3ZCZWFuKFNvdXJjZSBzb3VyY2UpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogcmVjdkJlYW4gKioqKioqIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihqYXhiQ29udGV4dC5jcmVhdGVVbm1hcnNoYWxsZXIoKS51bm1hcnNoYWwoc291cmNlKSk7CiAgICAgICAgIEpBWEJFbGVtZW50IGVsZW1lbnQgPSAoSkFYQkVsZW1lbnQpIGpheGJDb250ZXh0LmNyZWF0ZVVubWFyc2hhbGxlcigpLnVubWFyc2hhbChzb3VyY2UpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm5hbWU9IitlbGVtZW50LmdldE5hbWUoKSsgIiB2YWx1ZT0iICsgZWxlbWVudC5nZXRWYWx1ZSgpKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm5hbWU9IitlbGVtZW50LmdldE5hbWUoKSsgIiB2YWx1ZT0iICsgZWxlbWVudC5nZXRWYWx1ZSgpKTsKICAgICAgICAgaWYgKGVsZW1lbnQuZ2V0VmFsdWUoKSBpbnN0YW5jZW9mIFNheUhlbGxvKSB7Ci0gICAgICAgICAgICBTYXlIZWxsbyBoZWxsbyA9IChTYXlIZWxsbykgZWxlbWVudC5nZXRWYWx1ZSgpOyAKKyAgICAgICAgICAgIFNheUhlbGxvIGhlbGxvID0gKFNheUhlbGxvKSBlbGVtZW50LmdldFZhbHVlKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNheSBIZWxsbyBmcm9tICIgKyBoZWxsby5nZXRBcmcwKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHJpdmF0ZSBTb3VyY2Ugc2VuZEJlYW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTgzLDkgKzgzLDkgQEAKICAgICAgICAgU2F5SGVsbG9SZXNwb25zZSByZXNwID0gbmV3IFNheUhlbGxvUmVzcG9uc2UoKTsKICAgICAgICAgcmVzcC5zZXRSZXR1cm4oIldlYlN2Y1Rlc3QtSGVsbG8iKTsKICAgICAgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJvdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0gICAgICAgIE9iamVjdEZhY3RvcnkgZmFjdG9yeSA9IG5ldyBPYmplY3RGYWN0b3J5KCk7IAorICAgICAgICBPYmplY3RGYWN0b3J5IGZhY3RvcnkgPSBuZXcgT2JqZWN0RmFjdG9yeSgpOwogICAgICAgICBqYXhiQ29udGV4dC5jcmVhdGVNYXJzaGFsbGVyKCkubWFyc2hhbChmYWN0b3J5LmNyZWF0ZVNheUhlbGxvUmVzcG9uc2UocmVzcCksIGJvdXQpOwogICAgICAgICByZXR1cm4gbmV3IFN0cmVhbVNvdXJjZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYm91dC50b0J5dGVBcnJheSgpKSk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyaGFuZGxlci9lbmRwb2ludC9UZXN0SGFuZGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlcmhhbmRsZXIvZW5kcG9pbnQvVGVzdEhhbmRsZXIuamF2YQppbmRleCBmYmE2MDUxLi42NDk0NTdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyaGFuZGxlci9lbmRwb2ludC9UZXN0SGFuZGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXJoYW5kbGVyL2VuZHBvaW50L1Rlc3RIYW5kbGVyLmphdmEKQEAgLTI4LDExICsyOCwxMSBAQAogaW1wb3J0IGpha2FydGEueG1sLnNvYXAuKjsKIAogcHVibGljIGNsYXNzIFRlc3RIYW5kbGVyIGltcGxlbWVudHMgU09BUEhhbmRsZXI8U09BUE1lc3NhZ2VDb250ZXh0PiB7Ci0gICAgCisKICAgICBwdWJsaWMgU2V0PFFOYW1lPiBnZXRIZWFkZXJzKCkgewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBTdHJpbmcgcG9zdENvbnN0U3RyaW5nID0gIk5PVF9JTklUSUFMSVpFRCI7CiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewpAQCAtNDAsOCArNDAsOCBAQAogICAgIH0KIAogICAgIEBSZXNvdXJjZShuYW1lPSJzdHJpbmdWYWx1ZSIpCi0gICAgU3RyaW5nIGluamVjdGVkU3RyaW5nID0gInVuZGVmaW5lZCI7ICAgIAotICAgIAorICAgIFN0cmluZyBpbmplY3RlZFN0cmluZyA9ICJ1bmRlZmluZWQiOworCiAgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlTWVzc2FnZShTT0FQTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKCJQUk9QRVJMWV9JTklUSUFMSVpFRCIuZXF1YWxzKHBvc3RDb25zdFN0cmluZykpIHsKQEAgLTUwLDMzICs1MCwzMyBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGFuZGxlciBQb3N0Q29uc3RydWN0IG5vdCBjYWxsZWQgcHJvcGVydHkiKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInBvc3RDb25zdFN0cmluZyA9ICIgKyBwb3N0Q29uc3RTdHJpbmcpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgidW5kZWZpbmVkIi5lcXVhbHMoaW5qZWN0ZWRTdHJpbmcpKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIYW5kbGVyIG5vdCBpbmplY3RlZCBwcm9wZXJ0eSIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbmplY3RlZFN0cmluZyA9ICIgKyBpbmplY3RlZFN0cmluZyk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgICAgICBTT0FQTWVzc2FnZUNvbnRleHQgc21jID0gKFNPQVBNZXNzYWdlQ29udGV4dCkgY29udGV4dDsKICAgICAgICAgICAgIFNPQVBNZXNzYWdlIG1lc3NhZ2UgPSBzbWMuZ2V0TWVzc2FnZSgpOwogICAgICAgICAgICAgU09BUEJvZHkgYm9keSA9IG1lc3NhZ2UuZ2V0U09BUEJvZHkoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTT0FQRWxlbWVudCBwYXJhbUVsZW1lbnQgPQogICAgICAgICAgICAgICAgIChTT0FQRWxlbWVudCkgYm9keS5nZXRGaXJzdENoaWxkKCkuZ2V0Rmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgcGFyYW1FbGVtZW50LnNldFZhbHVlKGluamVjdGVkU3RyaW5nICsgIiAiICsgcGFyYW1FbGVtZW50LmdldFZhbHVlKCkpOwogICAgICAgICB9IGNhdGNoIChTT0FQRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIlZJSidzIFRFU1QgSEFORExFUiBDQUxMRUQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlZJSidzIFRFU1QgSEFORExFUiBDQUxMRUQiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlRmF1bHQoU09BUE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBjbG9zZShNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7fQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyaGFuZGxlci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlcmhhbmRsZXIvd2ViLnhtbAppbmRleCAyMmU1YzhiLi5hMTcxN2Q3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyaGFuZGxlci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXJoYW5kbGVyL3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5lbmRwb2ludC5IZWxsb0ltcGw8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuSGVsbG9JbXBsPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgSGVsbG8gV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkhlbGxvV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPmVuZHBvaW50LkhlbGxvSW1wbDwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsb0ltcGw8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+ZW5kcG9pbnQuSGVsbG9JbXBsPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vSGVsbG9JbXBsU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5lbmRwb2ludC5IZWxsb0ltcGw8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi9IZWxsb0ltcGxTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogICAgICAgICA8ZW52LWVudHJ5PgogICAgICAgICAgICAgPGVudi1lbnRyeS1uYW1lPnN0cmluZ1ZhbHVlPC9lbnYtZW50cnktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC0yL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwtMi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDRmNWRmMDQuLmYwNTA2M2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC0yL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsLTIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOSArMTUsOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0icmVzdGZ1bC0yIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC0yL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC0yL2J1aWxkLnhtbAppbmRleCAxZjY2NDhmLi43MTM4NzRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwtMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsLTIvYnVpbGQueG1sCkBAIC01OSw4ICs1OSw4IEBACiAKICA8cmVwbGFjZSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEiIHZhbHVlPSIke2h0dHAuaG9zdH0iIHRva2VuPSJIVFRQX0hPU1QiLz4KICAgICAgIDxyZXBsYWNlIGZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIgdmFsdWU9IiR7aHR0cC5wb3J0fSIgdG9rZW49IkhUVFBfUE9SVCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTczLDE0ICs3MywxNCBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1jbGllbnQiPgogICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50LWNsYXNzIiB2YWx1ZT0iY2xpZW50LkNsaWVudCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ib3RoZXItYXJncyIgdmFsdWU9InJlc3RmdWwtc3ZjLTIiLz4KICAgICAgIDwvYW50Y2FsbD4KIAotPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4gCis8IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLmhvc3R9IiB2YWx1ZT0iSFRUUF9IT1NUIi8+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAucG9ydH0iIHZhbHVlPSJIVFRQX1BPUlQiLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC0yL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC0yL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBiNGIzMzU2Li4wNmQyNjAxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwtMi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsLTIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC01Myw3ICs1Myw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHF1ZXJ5U3RyaW5nID0gIm51bTE9MzAmbnVtMj0yMCI7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0Jc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtc2ltcGxlLXJlc3RmdWwtc3ZjIik7CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtc2ltcGxlLXJlc3RmdWwtc3ZjIik7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IGNsaWVudC5jcmVhdGVTZXJ2aWNlKCk7CiAgICAgICAgIFVSSSBlbmRwb2ludFVSSSA9IG5ldyBVUkkoZW5kcG9pbnRBZGRyZXNzKTsKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiSW52b2tpbmcgUmVzdGZ1bCBHRVQgUmVxdWVzdCB3aXRoIHF1ZXJ5IHN0cmluZyAiICsgcXVlcnlTdHJpbmcpOwogICAgICAgICBTb3VyY2UgcmVzdWx0ID0gZC5pbnZva2UobnVsbCk7CiAgICAgICAgIHByaW50U291cmNlKHJlc3VsdCk7Ci0Jc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLXNpbXBsZS1yZXN0ZnVsLXN2YyIpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtcmVzdGZ1bC1zdmMiKTsKICAgICB9CiAKICAgICBwcml2YXRlIFNlcnZpY2UgY3JlYXRlU2VydmljZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC0yL2VuZHBvaW50L0FkZE51bWJlcnNJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwtMi9lbmRwb2ludC9BZGROdW1iZXJzSW1wbC5qYXZhCmluZGV4IDBmYWFhYjIuLjM3MjhjODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC0yL2VuZHBvaW50L0FkZE51bWJlcnNJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsLTIvZW5kcG9pbnQvQWRkTnVtYmVyc0ltcGwuamF2YQpAQCAtNjAsNyArNjAsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEhUVFBFeGNlcHRpb24oNTAwKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgU291cmNlIGNyZWF0ZVNvdXJjZShTdHJpbmcgc3RyKSB7CiAgICAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc3RyLCAiPSYvIik7CiAgICAgICAgIFN0cmluZyB0b2tlbiA9IHN0Lm5leHRUb2tlbigpOwpAQCAtNzYsNSArNzYsNSBAQAogICAgICAgICAgICAgbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGJvZHkuZ2V0Qnl0ZXMoKSkpOwogICAgICAgICByZXR1cm4gc291cmNlOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsLTIvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC0yL3dlYi54bWwKaW5kZXggMmZmNjc0Zi4uOTNiYWYyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsLTIvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwtMi93ZWIueG1sCkBAIC0xOCwyMyArMTgsMjMgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBSZXN0ZnVsIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIFJlc3RmdWwgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5IZWxsb1dBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxzZXJ2bGV0LW5hbWU+ZW5kcG9pbnQuQWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5lbmRwb2ludC5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5lbmRwb2ludC5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQWRkTnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+ZW5kcG9pbnQuQWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0FkZE51bWJlcnNTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwvYnVpbGQucHJvcGVydGllcwppbmRleCBlZWQxOThiLi5hMWVjMTEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOSArMTUsOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0icmVzdGZ1bCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsL2J1aWxkLnhtbAppbmRleCAwYzdiNWM3Li44NTg1MmRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC9idWlsZC54bWwKQEAgLTU4LDggKzU4LDggQEAKICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogPHJlcGxhY2UgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIiB2YWx1ZT0iJHtodHRwLmhvc3R9IiB0b2tlbj0iSFRUUF9IT1NUIi8+CiAgICAgICA8cmVwbGFjZSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEiIHZhbHVlPSIke2h0dHAucG9ydH0iIHRva2VuPSJIVFRQX1BPUlQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogCiAKQEAgLTc0LDcgKzc0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tY2xpZW50Ij4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudC1jbGFzcyIgdmFsdWU9ImNsaWVudC5DbGllbnQiLz4KQEAgLTgyLDcgKzgyLDcgQEAKICAgICAgIDwvYW50Y2FsbD4KIAogCi08IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPiAKKzwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAuaG9zdH0iIHZhbHVlPSJIVFRQX0hPU1QiLz4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5wb3J0fSIgdmFsdWU9IkhUVFBfUE9SVCIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggN2ZkNjdkZS4uMmU1Y2VmNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwvY2xpZW50L0NsaWVudC5qYXZhCkBAIC00MCwxMyArNDAsMTMgQEAKICAgICAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0Jc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtc2ltcGxlLXJlc3RmdWwtc3ZjIik7Ci0gICAgICAgIFN0cmluZyBlbmRwb2ludEFkZHJlc3MgPSAKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtcmVzdGZ1bC1zdmMiKTsKKyAgICAgICAgU3RyaW5nIGVuZHBvaW50QWRkcmVzcyA9CiAgICAgICAgICAgICAiaHR0cDovL0hUVFBfSE9TVDpIVFRQX1BPUlQvcmVzdGZ1bC93ZWJzZXJ2aWNlL0FkZE51bWJlcnNTZXJ2aWNlIjsKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoZW5kcG9pbnRBZGRyZXNzKyI/bnVtMT0xMCZudW0yPTIwIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkludm9raW5nIFVSTD0iK3VybCk7CiAgICAgICAgIHByb2Nlc3ModXJsLCBhcmdzKTsKLQlzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtc2ltcGxlLXJlc3RmdWwtc3ZjIik7CisgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLXNpbXBsZS1yZXN0ZnVsLXN2YyIpOwogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcHJvY2VzcyhVUkwgdXJsLCBTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTY0LDEyICs2NCwxMiBAQAogICAgICAgICAgICAgb3Byb3BzLnB1dChPdXRwdXRLZXlzLk9NSVRfWE1MX0RFQ0xBUkFUSU9OLCAieWVzIik7CiAgICAgICAgICAgICB0cmFucy5zZXRPdXRwdXRQcm9wZXJ0aWVzKG9wcm9wcyk7CiAgICAgICAgICAgICB0cmFucy50cmFuc2Zvcm0oc291cmNlLCBzcik7Ci0JICAgIFN0cmluZyByZXNwID0gYm9zLnRvU3RyaW5nKCk7CisgICAgICAgIFN0cmluZyByZXNwID0gYm9zLnRvU3RyaW5nKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogUmVzcG9uc2UgKioqKioqIityZXNwKTsKICAgICAgICAgICAgIGJvcy5jbG9zZSgpOwotCSAgICBpZihyZXNwLmluZGV4T2YoIjxuczpyZXR1cm4+MzA8L25zOnJldHVybj4iKSAhPSAtMSkKKyAgICAgICAgaWYocmVzcC5pbmRleE9mKCI8bnM6cmV0dXJuPjMwPC9uczpyZXR1cm4+IikgIT0gLTEpCiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5QQVNTKTsKLQkgICAgZWxzZQorICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC9lbmRwb2ludC9BZGROdW1iZXJzSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsL2VuZHBvaW50L0FkZE51bWJlcnNJbXBsLmphdmEKaW5kZXggMGZhYWFiMi4uMzcyOGM4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsL2VuZHBvaW50L0FkZE51bWJlcnNJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsL2VuZHBvaW50L0FkZE51bWJlcnNJbXBsLmphdmEKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBIVFRQRXhjZXB0aW9uKDUwMCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIFNvdXJjZSBjcmVhdGVTb3VyY2UoU3RyaW5nIHN0cikgewogICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHN0ciwgIj0mLyIpOwogICAgICAgICBTdHJpbmcgdG9rZW4gPSBzdC5uZXh0VG9rZW4oKTsKQEAgLTc2LDUgKzc2LDUgQEAKICAgICAgICAgICAgIG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShib2R5LmdldEJ5dGVzKCkpKTsKICAgICAgICAgcmV0dXJuIHNvdXJjZTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsL3dlYi54bWwKaW5kZXggMmZmNjc0Zi4uOTNiYWYyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsL3dlYi54bWwKQEAgLTE4LDIzICsxOCwyMyBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIFJlc3RmdWwgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5IZWxsb1dBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgUmVzdGZ1bCBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPHNlcnZsZXQtbmFtZT5lbmRwb2ludC5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8c2VydmxldC1uYW1lPmVuZHBvaW50LkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPmVuZHBvaW50LkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9BZGROdW1iZXJzU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5lbmRwb2ludC5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQWRkTnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXAxMi9hcHBjbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXAxMi9hcHBjbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMTE1NGQzZS4uM2NiNzE3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwMTIvYXBwY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcDEyL2FwcGNsaWVudC9DbGllbnQuamF2YQpAQCAtMzAsMTAgKzMwLDEwIEBACiAgICAgICAgIEBXZWJTZXJ2aWNlUmVmKG5hbWU9InNlcnZpY2UvTXlTZXJ2aWNlIikgc3RhdGljIEFkZE51bWJlcnNTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtYW5ub3RhdGlvbiIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1hbm5vdGF0aW9uIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgICAgICAgICBBZGROdW1iZXJzUG9ydFR5cGUgcG9ydCA9IHNlcnZpY2UuZ2V0QWRkTnVtYmVyc1BvcnQoKTsKICAgICAgICAgICAgICAgICAoKEJpbmRpbmdQcm92aWRlcilwb3J0KS5nZXRSZXF1ZXN0Q29udGV4dCgpLnB1dChCaW5kaW5nUHJvdmlkZXIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwiaHR0cDovL0hUVFBfSE9TVDpIVFRQX1BPUlQvc29hcDEyL3dlYnNlcnZpY2UvQWRkTnVtYmVyc1NlcnZpY2U/V1NETCIpOwogICAgICAgICAgICAgICAgIGludCByZXQgPSBwb3J0LmFkZE51bWJlcnMoMTAwLCAyMDApOwotCQlpZihyZXQgIT0gMzAwKSB7CisgICAgICAgIGlmKHJldCAhPSAzMDApIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic29hcDEyIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwMTIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcDEyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDQ5NjgzOC4uZjBjMWMwNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwMTIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXAxMi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNvYXAxMiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXAxMi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXAxMi9idWlsZC54bWwKaW5kZXggNTU1NzkwYy4uZWYwOTE5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwMTIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcDEyL2J1aWxkLnhtbApAQCAtNzQsNyArNzQsNyBAQAogICAgICAgPC9hbnRjYWxsPgogICAgICAgPHJlcGxhY2UgZmlsZT0iYXBwY2xpZW50L0NsaWVudC5qYXZhIiB2YWx1ZT0iJHtodHRwLmhvc3R9IiB0b2tlbj0iSFRUUF9IT1NUIi8+CiAgICAgICA8cmVwbGFjZSBmaWxlPSJhcHBjbGllbnQvQ2xpZW50LmphdmEiIHZhbHVlPSIke2h0dHAucG9ydH0iIHRva2VuPSJIVFRQX1BPUlQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FwcGNsaWVudCIgIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXBwY2xpZW50IgogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImFwcGNsaWVudC8qKiIvPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXBwY2xpZW50L01FVEEtSU5GL3dzZGwiLz4KQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXAxMi9jdXN0b20tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcDEyL2N1c3RvbS1jbGllbnQueG1sCmluZGV4IDZhMTM1YWQuLmZlM2Y3MzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcDEyL2N1c3RvbS1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcDEyL2N1c3RvbS1jbGllbnQueG1sCkBAIC0xNywxMiArMTcsMTIgQEAKIAogLS0+CiAKLTxiaW5kaW5ncyAKKzxiaW5kaW5ncwogICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgICAgeG1sbnM6amF4Yj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4YiIKICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKICAgICB3c2RsTG9jYXRpb249IkFkZE51bWJlcnMud3NkbCIKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPiAgICAKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPgogICAgIDxiaW5kaW5ncyBub2RlPSJuczE6ZGVmaW5pdGlvbnMiIHhtbG5zOm5zMT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgogICAgICAgICA8cGFja2FnZSBuYW1lPSJjbGllbnQiLz4KICAgICA8L2JpbmRpbmdzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwMTIvY3VzdG9tLXNlcnZlci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXAxMi9jdXN0b20tc2VydmVyLnhtbAppbmRleCA0Y2ZiYjU5Li5lNmJiMjM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXAxMi9jdXN0b20tc2VydmVyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXAxMi9jdXN0b20tc2VydmVyLnhtbApAQCAtMTcsNyArMTcsNyBAQAogCiAtLT4KIAotPGJpbmRpbmdzIAorPGJpbmRpbmdzCiAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKICAgICB4bWxuczpqYXhiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXhiIgogICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwMTIvZW5kcG9pbnQvQWRkTnVtYmVyc0ltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcDEyL2VuZHBvaW50L0FkZE51bWJlcnNJbXBsLmphdmEKaW5kZXggMzc0ZjViZC4uYzNkMmI5OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwMTIvZW5kcG9pbnQvQWRkTnVtYmVyc0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXAxMi9lbmRwb2ludC9BZGROdW1iZXJzSW1wbC5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBAamFrYXJ0YS54bWwud3MuQmluZGluZ1R5cGUoamFrYXJ0YS54bWwud3Muc29hcC5TT0FQQmluZGluZy5TT0FQMTJIVFRQX0JJTkRJTkcpCiBAamFrYXJ0YS5qd3MuV2ViU2VydmljZSAod3NkbExvY2F0aW9uPSJXRUItSU5GL3dzZGwvQWRkTnVtYmVycy53c2RsIiwgc2VydmljZU5hbWU9IkFkZE51bWJlcnNTZXJ2aWNlIiwgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZHVrZS5vcmciLCBwb3J0TmFtZT0iQWRkTnVtYmVyc1BvcnQiLCBlbmRwb2ludEludGVyZmFjZT0iZW5kcG9pbnQuQWRkTnVtYmVyc1BvcnRUeXBlIikKIHB1YmxpYyBjbGFzcyBBZGROdW1iZXJzSW1wbCBpbXBsZW1lbnRzIEFkZE51bWJlcnNQb3J0VHlwZSB7Ci0gICAgCisKICAgICBwdWJsaWMgaW50IGFkZE51bWJlcnMgKGludCBudW1iZXIxLCBpbnQgbnVtYmVyMikgewogICAgICAgICByZXR1cm4gbnVtYmVyMSArIG51bWJlcjI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwMTIvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcDEyL3dlYi54bWwKaW5kZXggNjI1NjE1My4uMTg4OWViNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwMTIvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXAxMi93ZWIueG1sCkBAIC0xOCwyOSArMTgsMjkgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPkFkZE51bWJlcnMgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRlc2NyaXB0aW9uPkFkZE51bWJlcnMgU2VydmljZTwvZGVzY3JpcHRpb24+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBBZGROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5BZGROdW1iZXJzV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQWRkTnVtYmVycyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+QWRkTnVtYmVyc1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQWRkTnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+QWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0FkZE51bWJlcnNTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXB0Y3AvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcHRjcC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDNiMjM0MjQuLmZhOGE3NTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcHRjcC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcHRjcC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNvYXB0Y3AiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi53c2l0LmRlc2NyaXB0b3JzIiB2YWx1ZT0iLi9ldGMvZWpiIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXB0Y3AvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwdGNwL2J1aWxkLnhtbAppbmRleCBlNGYwOTE2Li5kYjYzYmI1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXB0Y3AvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcHRjcC9idWlsZC54bWwKQEAgLTI2LDEzICsyNiwxMyBAQAogXT4KIAogPHByb2plY3QgbmFtZT0id2Vic2VydmljZXJlZnMiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+Ci0gICAgCisKICAgICAmY29tbW9uU2V0dXA7CiAgICAgJmNvbW1vbkJ1aWxkOwogICAgICZjb21tb25SdW47CiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwogICAgICZqYXh3c1Rvb2xzOwotICAgIAorCiAgICAgPHBhdGggaWQ9ImNsaWVudC1jbGFzc3BhdGgiPgogICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KICAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyIi8+CkBAIC00MSwxNiArNDEsMTYgQEAKICAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2FjdGl2YXRpb24uamFyIi8+CiAgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0LmphciIvPgogICAgIDwvcGF0aD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbiwgc2V0dXAtd2ViLCBjbGVhbiwgc2V0dXAtZWpiLCBhc3NlbWJsZS1jbGllbnQsIHJ1bmNsaWVudCwgdW5kZXBsb3kiLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAtd2ViIiBkZXBlbmRzPSJhc3NlbWJsZS13ZWIsIGRlcGxveS13ZWItYXBwIi8+CiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cC1lamIiIGRlcGVuZHM9ImFzc2VtYmxlLWVqYiwgZGVwbG95LWVqYi1qYXIiLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUtZWpiIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiX2VuZHBvaW50Ii8+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamFyLmZpbGUiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUtd2ViIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldF9lbmRwb2ludCIvPgpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0id3NpbXBvcnRpbmcgaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vJHthcHBuYW1lfS93ZWJzZXJ2aWNlL1NlcnZsZXRIZWxsb1NlcnZpY2U/V1NETCIvPgpAQCAtODYsNyArODYsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzaW1wb3J0LmFyZ3MiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCBodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS9XU0hlbGxvRUpCU2VydmljZS9XU0hlbGxvRUpCP1dTREwiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAorICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIj4KICAgICAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9ImNsaWVudC1jbGFzc3BhdGgiLz4KICAgICAgICAgPC9qYXZhYz4KQEAgLTk0LDIyICs5NCwyMiBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2NsaWVudC53c2l0LmRlc2NyaXB0b3JzfSIvPgogICAgICAgICA8L2NvcHk+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS13ZWItYXBwIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIke2FwcG5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LWVqYi1qYXIiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50Ij4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWNsaWVudCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQtY2xhc3MiIHZhbHVlPSJjbGllbnQuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXB0Y3AvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwdGNwL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA2NmRkZDA5Li41NGE4YmZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXB0Y3AvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcHRjcC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTM4LDE1ICszOCwxNSBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHN0YXRpYyBqYWthcnRhLnRyYW5zYWN0aW9uLlVzZXJUcmFuc2FjdGlvbiB1dDsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRJTUVfT1VUID0gMTAwMCAqIDYwOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJzb2FwdGNwLXRlc3QiKTsKICAgICAgICAgU3RyaW5nIGhvc3QgPSAibG9jYWxob3N0IjsKQEAgLTU0LDEyICs1NCwxMiBAQAogICAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMSkgeyAvLyBydW4gd2l0aCBhcHBjbGllbnQ/CiAgICAgICAgICAgICBhcmdzID0gYXJnc1swXS5zcGxpdCgiICIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA+PSAyKSB7CiAgICAgICAgICAgICBob3N0ID0gYXJnc1swXTsKICAgICAgICAgICAgIHBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMV0pOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0byBob3N0OiAiICsgaG9zdCArICIgcG9ydDogIiArIHBvcnQpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICBpZiAoY2xpZW50LmRvUG9ydFVuaWZpY2F0aW9uVGVzdChob3N0LCBwb3J0KSkgewpAQCAtNzIsMTIgKzcyLDEyIEBACiAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInNvYXB0Y3AtdGVzdCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvU2VydmxldFRlc3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTZXJ2bGV0SGVsbG9TZXJ2aWNlIHN2YyA9IG5ldyBTZXJ2bGV0SGVsbG9TZXJ2aWNlKCk7CiAgICAgICAgICAgICBTZXJ2bGV0SGVsbG8gcG9ydCA9IHN2Yy5nZXRTZXJ2bGV0SGVsbG9Qb3J0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5U2VydmxldEhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKICAgICAgICAgICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1TZXJ2bGV0LUhlbGxvIikgPT0gLTEpIHsKQEAgLTkzLDcgKzkzLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJTT0FQL1RDUC1TZXJ2bGV0LUVuZHBvaW50Iiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvRWpiVGVzdCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFdTSGVsbG9FSkJTZXJ2aWNlIHN2YyA9IG5ldyAgV1NIZWxsb0VKQlNlcnZpY2UoKTsKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlNPQVAvVENQLUVKQi1FbmRwb2ludCIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBkb1BvcnRVbmlmaWNhdGlvblRlc3QoU3RyaW5nIGhvc3QsIGludCBwb3J0KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTb2NrZXQgcyA9IG5ldyBTb2NrZXQoImxvY2FsaG9zdCIsIDgwODApOwpAQCAtMTIyLDI0ICsxMjIsMjQgQEAKICAgICAgICAgICAgIGZpbmFsIFZlcnNpb25Db250cm9sbGVyIHZlcnNpb25Db250cm9sbGVyID0gVmVyc2lvbkNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTsKICAgICAgICAgICAgIGZpbmFsIFZlcnNpb24gZnJhbWluZ1ZlcnNpb24gPSB2ZXJzaW9uQ29udHJvbGxlci5nZXRGcmFtaW5nVmVyc2lvbigpOwogICAgICAgICAgICAgZmluYWwgVmVyc2lvbiBjb25uZWN0aW9uTWFuYWdlbWVudFZlcnNpb24gPSB2ZXJzaW9uQ29udHJvbGxlci5nZXRDb25uZWN0aW9uTWFuYWdlbWVudFZlcnNpb24oKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBmaW5hbCBPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gcy5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgICAgIG91dHB1dFN0cmVhbS53cml0ZShUQ1BDb25zdGFudHMuUFJPVE9DT0xfU0NIRU1BLmdldEJ5dGVzKCJVUy1BU0NJSSIpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBEYXRhSW5PdXRVdGlscy53cml0ZUludHM0KG91dHB1dFN0cmVhbSwgZnJhbWluZ1ZlcnNpb24uZ2V0TWFqb3IoKSwKICAgICAgICAgICAgICAgICAgICAgZnJhbWluZ1ZlcnNpb24uZ2V0TWlub3IoKSwKICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbk1hbmFnZW1lbnRWZXJzaW9uLmdldE1ham9yKCksCiAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25NYW5hZ2VtZW50VmVyc2lvbi5nZXRNaW5vcigpKTsKICAgICAgICAgICAgIG91dHB1dFN0cmVhbS5mbHVzaCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGZpbmFsIElucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gcy5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgZmluYWwgaW50W10gdmVyc2lvbkluZm8gPSBuZXcgaW50WzRdOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIERhdGFJbk91dFV0aWxzLnJlYWRJbnRzNChpbnB1dFN0cmVhbSwgdmVyc2lvbkluZm8sIDQpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGZpbmFsIFZlcnNpb24gc2VydmVyRnJhbWluZ1ZlcnNpb24gPSBuZXcgVmVyc2lvbih2ZXJzaW9uSW5mb1swXSwgdmVyc2lvbkluZm9bMV0pOwogICAgICAgICAgICAgZmluYWwgVmVyc2lvbiBzZXJ2ZXJDb25uZWN0aW9uTWFuYWdlbWVudFZlcnNpb24gPSBuZXcgVmVyc2lvbih2ZXJzaW9uSW5mb1syXSwgdmVyc2lvbkluZm9bM10pOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gc3VjY2VzcyA9IHZlcnNpb25Db250cm9sbGVyLmlzVmVyc2lvblN1cHBvcnRlZChzZXJ2ZXJGcmFtaW5nVmVyc2lvbiwgc2VydmVyQ29ubmVjdGlvbk1hbmFnZW1lbnRWZXJzaW9uKTsKICAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlNPQVAvVENQLVBvcnRVbmlmaWNhdGlvbiIsIHN0YXQuUEFTUyk7CkBAIC0xNTMsNyArMTUzLDcgQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiU09BUC9UQ1AtUG9ydFVuaWZpY2F0aW9uIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwdGNwL2V0Yy9jbGllbnQvd3NpdC1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwdGNwL2V0Yy9jbGllbnQvd3NpdC1jbGllbnQueG1sCmluZGV4IDM0Y2U0MWYuLmZhZTNiNDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcHRjcC9ldGMvY2xpZW50L3dzaXQtY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXB0Y3AvZXRjL2NsaWVudC93c2l0LWNsaWVudC54bWwKQEAgLTE4LDEwICsxOCwxMCBAQAogLS0+CiAKICA8ZGVmaW5pdGlvbnMKLSB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIAotIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiAKLSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiBuYW1lPSJtYWluY2xpZW50Y29uZmlnIiAKKyB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCisgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCisgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKKyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiBuYW1lPSJtYWluY2xpZW50Y29uZmlnIgogID4KICAgICA8aW1wb3J0IGxvY2F0aW9uPSJTZXJ2aWNlQ2hhbm5lbFdTSW1wbC53c2RsIiBuYW1lc3BhY2U9Imh0dHA6Ly9zZXJ2aWNlY2hhbm5lbC50Y3AudHJhbnNwb3J0LndzLnhtbC5zdW4uY29tLyIvPgogICAgIDxpbXBvcnQgbG9jYXRpb249IlNlcnZsZXRIZWxsb1NlcnZpY2Uud3NkbCIgbmFtZXNwYWNlPSJodHRwOi8vc2VydmxldF9lbmRwb2ludC8iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcHRjcC9ldGMvZWpiL3dzaXQtZWpiX2VuZHBvaW50LldTSGVsbG9FSkIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwdGNwL2V0Yy9lamIvd3NpdC1lamJfZW5kcG9pbnQuV1NIZWxsb0VKQi54bWwKaW5kZXggNjQxYTY3MC4uYjI5ZDJlNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwdGNwL2V0Yy9lamIvd3NpdC1lamJfZW5kcG9pbnQuV1NIZWxsb0VKQi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwdGNwL2V0Yy9lamIvd3NpdC1lamJfZW5kcG9pbnQuV1NIZWxsb0VKQi54bWwKQEAgLTE4LDEwICsxOCwxMCBAQAogLS0+CiAKICA8ZGVmaW5pdGlvbnMKLSB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIAotIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiAKLSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiBuYW1lPSJXU0hlbGxvRUpCU2VydmljZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZWpiX2VuZHBvaW50LyIgeG1sbnM6dG5zPSJodHRwOi8vZWpiX2VuZHBvaW50LyIgeG1sbnM6d3NwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA0LzA5L3BvbGljeSIgeG1sbnM6d3N1PSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXdzc2VjdXJpdHktdXRpbGl0eS0xLjAueHNkIiB4bWxuczp3c2F3cz0iaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nIiB4bWxuczp0Y3A9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL3dzaXQvMjAwNi8wOS9wb2xpY3kvc29hcHRjcC9zZXJ2aWNlIiAKKyB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCisgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCisgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKKyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiBuYW1lPSJXU0hlbGxvRUpCU2VydmljZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZWpiX2VuZHBvaW50LyIgeG1sbnM6dG5zPSJodHRwOi8vZWpiX2VuZHBvaW50LyIgeG1sbnM6d3NwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA0LzA5L3BvbGljeSIgeG1sbnM6d3N1PSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXdzc2VjdXJpdHktdXRpbGl0eS0xLjAueHNkIiB4bWxuczp3c2F3cz0iaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nIiB4bWxuczp0Y3A9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL3dzaXQvMjAwNi8wOS9wb2xpY3kvc29hcHRjcC9zZXJ2aWNlIgogID4KICAgICA8cG9ydFR5cGUgbmFtZT0iV1NIZWxsb0VKQiIvPgogICAgIDxiaW5kaW5nIG5hbWU9IldTSGVsbG9FSkJQb3J0QmluZGluZyIgdHlwZT0idG5zOldTSGVsbG9FSkIiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwdGNwL2V0Yy93ZWIvd3NpdC1zZXJ2bGV0X2VuZHBvaW50LlNlcnZsZXRIZWxsby54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXB0Y3AvZXRjL3dlYi93c2l0LXNlcnZsZXRfZW5kcG9pbnQuU2VydmxldEhlbGxvLnhtbAppbmRleCA0YTYzZjc2Li5lZmM0NmI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXB0Y3AvZXRjL3dlYi93c2l0LXNlcnZsZXRfZW5kcG9pbnQuU2VydmxldEhlbGxvLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXB0Y3AvZXRjL3dlYi93c2l0LXNlcnZsZXRfZW5kcG9pbnQuU2VydmxldEhlbGxvLnhtbApAQCAtMTgsMTAgKzE4LDEwIEBACiAtLT4KIAogIDxkZWZpbml0aW9ucwotIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgCi0geG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIAotIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIG5hbWU9IlNlcnZsZXRIZWxsb1NlcnZpY2UiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3NlcnZsZXRfZW5kcG9pbnQvIiB4bWxuczp0bnM9Imh0dHA6Ly9zZXJ2bGV0X2VuZHBvaW50LyIgeG1sbnM6d3NwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA0LzA5L3BvbGljeSIgeG1sbnM6d3N1PSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXdzc2VjdXJpdHktdXRpbGl0eS0xLjAueHNkIiB4bWxuczp3c2F3cz0iaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nIiB4bWxuczp0Y3A9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL3dzaXQvMjAwNi8wOS9wb2xpY3kvc29hcHRjcC9zZXJ2aWNlIiAKKyB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCisgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCisgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKKyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiBuYW1lPSJTZXJ2bGV0SGVsbG9TZXJ2aWNlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zZXJ2bGV0X2VuZHBvaW50LyIgeG1sbnM6dG5zPSJodHRwOi8vc2VydmxldF9lbmRwb2ludC8iIHhtbG5zOndzcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNC8wOS9wb2xpY3kiIHhtbG5zOndzdT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXV0aWxpdHktMS4wLnhzZCIgeG1sbnM6d3Nhd3M9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgvYWRkcmVzc2luZyIgeG1sbnM6dGNwPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy93c2l0LzIwMDYvMDkvcG9saWN5L3NvYXB0Y3Avc2VydmljZSIKICA+CiAgICAgPHBvcnRUeXBlIG5hbWU9IlNlcnZsZXRIZWxsbyIvPgogICAgIDxiaW5kaW5nIG5hbWU9IlNlcnZsZXRIZWxsb1BvcnRCaW5kaW5nIiB0eXBlPSJ0bnM6U2VydmxldEhlbGxvIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcHRjcC9zZXJ2bGV0X2VuZHBvaW50L1NlcnZsZXRIZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwdGNwL3NlcnZsZXRfZW5kcG9pbnQvU2VydmxldEhlbGxvLmphdmEKaW5kZXggNzliMDcyNS4uZTkzMWJkNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwdGNwL3NlcnZsZXRfZW5kcG9pbnQvU2VydmxldEhlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwdGNwL3NlcnZsZXRfZW5kcG9pbnQvU2VydmxldEhlbGxvLmphdmEKQEAgLTIwLDggKzIwLDggQEAKIAogQFdlYlNlcnZpY2UKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0SGVsbG8gewotCQorCiAgICAgcHVibGljIFN0cmluZyBzYXlTZXJ2bGV0SGVsbG8oU3RyaW5nIHBhcmFtKSB7Ci0JcmV0dXJuICJXZWJTdmNUZXN0LVNlcnZsZXQtSGVsbG8gIiArIHBhcmFtOworICAgIHJldHVybiAiV2ViU3ZjVGVzdC1TZXJ2bGV0LUhlbGxvICIgKyBwYXJhbTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXB0Y3Avd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcHRjcC93ZWIueG1sCmluZGV4IGYwNmY3NGMuLjBhZGQ4MWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcHRjcC93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcHRjcC93ZWIueG1sCkBAIC0xOCwyNSArMTgsMjUgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBTZXJ2bGV0IEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+U2VydmxldCBIZWxsb1dBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgU2VydmxldCBIZWxsbyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXQgSGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIFNlcnZsZXQgSGVsbG8gV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPlNlcnZsZXRIZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5TZXJ2bGV0SGVsbG88L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+c2VydmxldF9lbmRwb2ludC5TZXJ2bGV0SGVsbG88L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBTZXJ2bGV0IEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0SGVsbG9XZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldEhlbGxvPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnNlcnZsZXRfZW5kcG9pbnQuU2VydmxldEhlbGxvPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPlNlcnZsZXRIZWxsbzwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvU2VydmxldEhlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0SGVsbG88L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL1NlcnZsZXRIZWxsb1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTEvYnVpbGQucHJvcGVydGllcwppbmRleCA1YzFiNGFiLi42MjI4MzM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3ZjaGFuZGxlci0xIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL2J1aWxkLnhtbAppbmRleCA0YTdhNjFkLi4xMTg4NTM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTEvYnVpbGQueG1sCkBAIC04Myw3ICs4Myw3IEBACiAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHZhbHVlPSIke2h0dHAuaG9zdH0iIHRva2VuPSJIVFRQX0hPU1QiLz4KICAgICAgIDxyZXBsYWNlIGZpbGU9IndlYmNsaWVudC9DbGllbnQuamF2YSIgdmFsdWU9IiR7aHR0cC5wb3J0fSIgdG9rZW49IkhUVFBfUE9SVCIvPgogICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyIKLSAgICAgICAgICAgIGNsYXNzcGF0aHJlZj0iY2xhc3MucGF0aCIgCisgICAgICAgICAgICBjbGFzc3BhdGhyZWY9ImNsYXNzLnBhdGgiCiAgICAgICAgICAgICBpbmNsdWRlcz0id2ViY2xpZW50LyoqIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3dlYi54bWwiLz4KICAgICAgIDxjb3B5IGZpbGU9Ii4vY2xpZW50LXN1bi13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3N1bi13ZWIueG1sIi8+CkBAIC0xMjQsMTEgKzEyNCwxMSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL2NsaWVudC13ZWIueG1sCmluZGV4IDAyN2RmY2UuLmI0YmJmNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IGI4OTNiOWEuLjE0OTQ5NTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTEvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjMsOSArNjMsOSBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgU1VCVFJBQ1QgU0VSVklDRSBJUyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJbMTExM10iKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9jdXN0b20tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL2N1c3RvbS1jbGllbnQueG1sCmluZGV4IDgzOWZjYjEuLjQ4ZjE3MTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL2N1c3RvbS1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL2N1c3RvbS1jbGllbnQueG1sCkBAIC0xNywxMiArMTcsMTIgQEAKIAogLS0+CiAKLTxiaW5kaW5ncyAKKzxiaW5kaW5ncwogICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgICAgeG1sbnM6amF4Yj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4YiIKICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKICAgICB3c2RsTG9jYXRpb249IlN1YnRyYWN0TnVtYmVycy53c2RsIgotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+ICAgIAorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+CiAgICAgPGJpbmRpbmdzIG5vZGU9Im5zMTpkZWZpbml0aW9ucyIgeG1sbnM6bnMxPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+CiAgICAgICAgIDxwYWNrYWdlIG5hbWU9ImNsaWVudCIvPgogICAgIDwvYmluZGluZ3M+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9jdXN0b20tc2VydmVyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL2N1c3RvbS1zZXJ2ZXIueG1sCmluZGV4IDE3MGQ2NjcuLjA5ODgxMjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL2N1c3RvbS1zZXJ2ZXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL2N1c3RvbS1zZXJ2ZXIueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAKIC0tPgogCi08YmluZGluZ3MgCis8YmluZGluZ3MKICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogICAgIHhtbG5zOmpheGI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIiCiAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKaW5kZXggNjU5YzQ4ZS4uODEwMTQ1OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTEvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBAamFrYXJ0YS5qd3MuV2ViU2VydmljZSAoc2VydmljZU5hbWU9Imp1bmtqdW5ranVuayIsIGVuZHBvaW50SW50ZXJmYWNlPSJlbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNQb3J0VHlwZSIpCiBwdWJsaWMgY2xhc3MgU3VidHJhY3ROdW1iZXJzSW1wbCBpbXBsZW1lbnRzIFN1YnRyYWN0TnVtYmVyc1BvcnRUeXBlIHsKLSAgICAKKwogICAgIHB1YmxpYyBpbnQgc3VidHJhY3ROdW1iZXJzIChpbnQgbnVtYmVyMSwgaW50IG51bWJlcjIpIHsKIFN5c3RlbS5vdXQucHJpbnRsbigiSSBnb3QgbjEgPSAiICsgbnVtYmVyMSArICIgYW5kIG4yID0gIiArIG51bWJlcjIpOwogICAgICAgICByZXR1cm4gbnVtYmVyMSAtIG51bWJlcjI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9lbmRwb2ludC9UZXN0SGFuZGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTEvZW5kcG9pbnQvVGVzdEhhbmRsZXIuamF2YQppbmRleCBlMGE1NzY3Li40NjlkNmJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9lbmRwb2ludC9UZXN0SGFuZGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL2VuZHBvaW50L1Rlc3RIYW5kbGVyLmphdmEKQEAgLTI4LDExICsyOCwxMSBAQAogaW1wb3J0IGpha2FydGEuYW5ub3RhdGlvbi5Qb3N0Q29uc3RydWN0OwogCiBwdWJsaWMgY2xhc3MgVGVzdEhhbmRsZXIgaW1wbGVtZW50cyBTT0FQSGFuZGxlcjxTT0FQTWVzc2FnZUNvbnRleHQ+IHsKLSAgICAKKwogICAgIHB1YmxpYyBTZXQ8UU5hbWU+IGdldEhlYWRlcnMoKSB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogICAgIFN0cmluZyBwb3N0Q29uc3RTdHJpbmcgPSAiTk9UX0lOSVRJQUxJWkVEIjsKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CkBAIC00OSw3ICs0OSw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhhbmRsZXIgUG9zdENvbnN0cnVjdCBub3QgY2FsbGVkIHByb3BlcnR5Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInBvc3RDb25zdFN0cmluZyA9ICIgKyBwb3N0Q29uc3RTdHJpbmcpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgIH0KICAgICAgICAgaWYgKCJ1bmRlZmluZWQiLmVxdWFscyhpbmplY3RlZFN0cmluZykpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGFuZGxlciBub3QgaW5qZWN0ZWQgcHJvcGVydHkiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU5LDcgKzU5LDcgQEAKICAgICAgICAgICAgIFNPQVBNZXNzYWdlQ29udGV4dCBzbWMgPSAoU09BUE1lc3NhZ2VDb250ZXh0KSBjb250ZXh0OwogICAgICAgICAgICAgU09BUE1lc3NhZ2UgbWVzc2FnZSA9IHNtYy5nZXRNZXNzYWdlKCk7CiAgICAgICAgICAgICBTT0FQQm9keSBib2R5ID0gbWVzc2FnZS5nZXRTT0FQQm9keSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFNPQVBFbGVtZW50IHBhcmFtRWxlbWVudCA9CiAgICAgICAgICAgICAgICAgKFNPQVBFbGVtZW50KSBib2R5LmdldEZpcnN0Q2hpbGQoKS5nZXRGaXJzdENoaWxkKCk7CiAgICAgICAgICAgICBpbnQgbnVtYmVyID0gSW50ZWdlci5wYXJzZUludChwYXJhbUVsZW1lbnQuZ2V0VmFsdWUoKSk7CkBAIC02NywxNiArNjcsMTYgQEAKICAgICAgICAgfSBjYXRjaCAoU09BUEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJWSUoncyBURVNUIEhBTkRMRVIgQ0FMTEVEIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJWSUoncyBURVNUIEhBTkRMRVIgQ0FMTEVEIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZUZhdWx0KFNPQVBNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgY2xvc2UoTWVzc2FnZUNvbnRleHQgY29udGV4dCkge30KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTEvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL3dlYi54bWwKaW5kZXggOGY0M2E2ZC4uY2U2Y2QyMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTEvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS93ZWIueG1sCkBAIC0xOCwyOSArMTgsMjkgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPlN1YnRyYWN0TnVtYmVycyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGVzY3JpcHRpb24+U3VidHJhY3ROdW1iZXJzIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU3VidHJhY3ROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5TdWJ0cmFjdE51bWJlcnNXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU3VidHJhY3ROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5TdWJ0cmFjdE51bWJlcnNXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL1N1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvU3VidHJhY3ROdW1iZXJzU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKICA8ZW52LWVudHJ5PgogICA8ZW52LWVudHJ5LW5hbWU+c3RyaW5nVmFsdWU8L2Vudi1lbnRyeS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTEvd2ViY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTEvd2ViY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDE1MDJmZmQuLmI3OWZjOGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL3dlYmNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS93ZWJjbGllbnQvQ2xpZW50LmphdmEKQEAgLTI3LDggKzI3LDggQEAKIAogICAgICAgICBAV2ViU2VydmljZVJlZiBTdWJ0cmFjdE51bWJlcnNTZXJ2aWNlIHNlcnZpY2U7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTIvYnVpbGQucHJvcGVydGllcwppbmRleCA0ZGRiOWRmLi4xNDU5NTYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3ZjaGFuZGxlci0yIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL2J1aWxkLnhtbAppbmRleCA3N2IyMjc3Li40OTMxY2FmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTIvYnVpbGQueG1sCkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHZhbHVlPSIke2h0dHAuaG9zdH0iIHRva2VuPSJIVFRQX0hPU1QiLz4KICAgICAgIDxyZXBsYWNlIGZpbGU9IndlYmNsaWVudC9DbGllbnQuamF2YSIgdmFsdWU9IiR7aHR0cC5wb3J0fSIgdG9rZW49IkhUVFBfUE9SVCIvPgogICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyIKLSAgICAgICAgICAgIGNsYXNzcGF0aHJlZj0iY2xhc3MucGF0aCIgCisgICAgICAgICAgICBjbGFzc3BhdGhyZWY9ImNsYXNzLnBhdGgiCiAgICAgICAgICAgICBpbmNsdWRlcz0id2ViY2xpZW50LyoqIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3dlYi54bWwiLz4KICAgICAgIDxjb3B5IGZpbGU9Ii4vY2xpZW50LXN1bi13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3N1bi13ZWIueG1sIi8+CkBAIC0xMzMsMTEgKzEzMywxMSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5UZXN0Q2xpZW50Ij4KQEAgLTE0Nyw3ICsxNDcsNyBAQAogICAgICAgICA8YXJnIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS93c2NsaWVudC9SZXF1ZXN0UHJvY2Vzc29yIi8+CiAgICAgICA8L2phdmE+CiAKLSAgICAgIDwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+IAorICAgICAgPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4KICAgICAgIDxyZXBsYWNlIGZpbGU9IndlYmNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5ob3N0fSIgdmFsdWU9IkhUVFBfSE9TVCIvPgogICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLnBvcnR9IiB2YWx1ZT0iSFRUUF9QT1JUIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL2NsaWVudC13ZWIueG1sCmluZGV4IDAyN2RmY2UuLmI0YmJmNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IGQwMzNjMzEuLjlmNzAwM2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjMsOSArNjMsOSBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgU1VCVFJBQ1QgU0VSVklDRSBJUyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJbMTExM10iKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9jdXN0b20tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL2N1c3RvbS1jbGllbnQueG1sCmluZGV4IDgzOWZjYjEuLjQ4ZjE3MTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL2N1c3RvbS1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL2N1c3RvbS1jbGllbnQueG1sCkBAIC0xNywxMiArMTcsMTIgQEAKIAogLS0+CiAKLTxiaW5kaW5ncyAKKzxiaW5kaW5ncwogICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgICAgeG1sbnM6amF4Yj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4YiIKICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKICAgICB3c2RsTG9jYXRpb249IlN1YnRyYWN0TnVtYmVycy53c2RsIgotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+ICAgIAorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+CiAgICAgPGJpbmRpbmdzIG5vZGU9Im5zMTpkZWZpbml0aW9ucyIgeG1sbnM6bnMxPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+CiAgICAgICAgIDxwYWNrYWdlIG5hbWU9ImNsaWVudCIvPgogICAgIDwvYmluZGluZ3M+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9jdXN0b20tc2VydmVyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL2N1c3RvbS1zZXJ2ZXIueG1sCmluZGV4IDE3MGQ2NjcuLjA5ODgxMjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL2N1c3RvbS1zZXJ2ZXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL2N1c3RvbS1zZXJ2ZXIueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAKIC0tPgogCi08YmluZGluZ3MgCis8YmluZGluZ3MKICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogICAgIHhtbG5zOmpheGI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIiCiAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKaW5kZXggZjYwN2U2Mi4uNWUwNTA5OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTIvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQpAQCAtMTksNyArMTksNyBAQAogQGpha2FydGEuandzLkhhbmRsZXJDaGFpbihuYW1lPSJzb21lIG5hbWUiLCBmaWxlPSJteWhhbmRsZXIueG1sIikKIEBqYWthcnRhLmp3cy5XZWJTZXJ2aWNlIChzZXJ2aWNlTmFtZT0ianVua2p1bmtqdW5rIiwgZW5kcG9pbnRJbnRlcmZhY2U9ImVuZHBvaW50LlN1YnRyYWN0TnVtYmVyc1BvcnRUeXBlIikKIHB1YmxpYyBjbGFzcyBTdWJ0cmFjdE51bWJlcnNJbXBsIGltcGxlbWVudHMgU3VidHJhY3ROdW1iZXJzUG9ydFR5cGUgewotICAgIAorCiAgICAgcHVibGljIGludCBzdWJ0cmFjdE51bWJlcnMgKGludCBudW1iZXIxLCBpbnQgbnVtYmVyMikgewogU3lzdGVtLm91dC5wcmludGxuKCJJIGdvdCBuMSA9ICIgKyBudW1iZXIxICsgIiBhbmQgbjIgPSAiICsgbnVtYmVyMik7CiAgICAgICAgIHJldHVybiBudW1iZXIxIC0gbnVtYmVyMjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL2VuZHBvaW50L1Rlc3RIYW5kbGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9lbmRwb2ludC9UZXN0SGFuZGxlci5qYXZhCmluZGV4IGY5MDgxMjguLjM2MDg3YWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL2VuZHBvaW50L1Rlc3RIYW5kbGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTIvZW5kcG9pbnQvVGVzdEhhbmRsZXIuamF2YQpAQCAtMjgsMTEgKzI4LDExIEBACiBpbXBvcnQgamFrYXJ0YS54bWwuc29hcC4qOwogCiBwdWJsaWMgY2xhc3MgVGVzdEhhbmRsZXIgaW1wbGVtZW50cyBTT0FQSGFuZGxlcjxTT0FQTWVzc2FnZUNvbnRleHQ+IHsKLSAgICAKKwogICAgIHB1YmxpYyBTZXQ8UU5hbWU+IGdldEhlYWRlcnMoKSB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogICAgIFN0cmluZyBwb3N0Q29uc3RTdHJpbmcgPSAiTk9UX0lOSVRJQUxJWkVEIjsKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CkBAIC00MCw4ICs0MCw4IEBACiAgICAgfQogCiAgICAgQFJlc291cmNlKG5hbWU9InN0cmluZ1ZhbHVlIikKLSAgICBTdHJpbmcgaW5qZWN0ZWRTdHJpbmcgPSAidW5kZWZpbmVkIjsgICAgCi0gICAgCisgICAgU3RyaW5nIGluamVjdGVkU3RyaW5nID0gInVuZGVmaW5lZCI7CisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVNZXNzYWdlKFNPQVBNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiAoIlBST1BFUkxZX0lOSVRJQUxJWkVEIi5lcXVhbHMocG9zdENvbnN0U3RyaW5nKSkgewpAQCAtNTAsMTcgKzUwLDE3IEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIYW5kbGVyIFBvc3RDb25zdHJ1Y3Qgbm90IGNhbGxlZCBwcm9wZXJ0eSIpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicG9zdENvbnN0U3RyaW5nID0gIiArIHBvc3RDb25zdFN0cmluZyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCJ1bmRlZmluZWQiLmVxdWFscyhpbmplY3RlZFN0cmluZykpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhhbmRsZXIgbm90IGluamVjdGVkIHByb3BlcnR5Iik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluamVjdGVkU3RyaW5nID0gIiArIGluamVjdGVkU3RyaW5nKTsKLSAgICAgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNPQVBNZXNzYWdlQ29udGV4dCBzbWMgPSAoU09BUE1lc3NhZ2VDb250ZXh0KSBjb250ZXh0OwogICAgICAgICAgICAgU09BUE1lc3NhZ2UgbWVzc2FnZSA9IHNtYy5nZXRNZXNzYWdlKCk7CiAgICAgICAgICAgICBTT0FQQm9keSBib2R5ID0gbWVzc2FnZS5nZXRTT0FQQm9keSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFNPQVBFbGVtZW50IHBhcmFtRWxlbWVudCA9CiAgICAgICAgICAgICAgICAgKFNPQVBFbGVtZW50KSBib2R5LmdldEZpcnN0Q2hpbGQoKS5nZXRGaXJzdENoaWxkKCk7CiAgICAgICAgICAgICBpbnQgbnVtYmVyID0gSW50ZWdlci5wYXJzZUludChwYXJhbUVsZW1lbnQuZ2V0VmFsdWUoKSk7CkBAIC02OCwxNiArNjgsMTYgQEAKICAgICAgICAgfSBjYXRjaCAoU09BUEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJWSUoncyBURVNUIEhBTkRMRVIgQ0FMTEVEIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJWSUoncyBURVNUIEhBTkRMRVIgQ0FMTEVEIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZUZhdWx0KFNPQVBNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgY2xvc2UoTWVzc2FnZUNvbnRleHQgY29udGV4dCkge30KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTIvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL3dlYi54bWwKaW5kZXggNTRkMjBjNC4uNmNjYjUwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTIvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPlN1YnRyYWN0TnVtYmVycyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGVzY3JpcHRpb24+U3VidHJhY3ROdW1iZXJzIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU3VidHJhY3ROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5TdWJ0cmFjdE51bWJlcnNXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU3VidHJhY3ROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5TdWJ0cmFjdE51bWJlcnNXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL1N1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvU3VidHJhY3ROdW1iZXJzU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgotICAgICAgICAKKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgorCiAgICAgICAgIDxlbnYtZW50cnk+CiAgICAgICAgICAgICA8ZW52LWVudHJ5LW5hbWU+c3RyaW5nVmFsdWU8L2Vudi1lbnRyeS1uYW1lPgogICAgICAgICAgICAgPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2Vudi1lbnRyeS10eXBlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTIvd2ViY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTIvd2ViY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGE1MTE2NmYuLjhhNjM2ZGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL3dlYmNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi93ZWJjbGllbnQvQ2xpZW50LmphdmEKQEAgLTI3LDggKzI3LDggQEAKIAogICAgICAgICBAV2ViU2VydmljZVJlZiBTdWJ0cmFjdE51bWJlcnNTZXJ2aWNlIHNlcnZpY2U7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTMvYnVpbGQucHJvcGVydGllcwppbmRleCBlMGQwNTIxLi5lOTRlODE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3ZjaGFuZGxlci0zIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL2J1aWxkLnhtbAppbmRleCBmNTU5NTA1Li5lNzJhODgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTMvYnVpbGQueG1sCkBAIC04NSw3ICs4NSw3IEBACiAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHZhbHVlPSIke2h0dHAuaG9zdH0iIHRva2VuPSJIVFRQX0hPU1QiLz4KICAgICAgIDxyZXBsYWNlIGZpbGU9IndlYmNsaWVudC9DbGllbnQuamF2YSIgdmFsdWU9IiR7aHR0cC5wb3J0fSIgdG9rZW49IkhUVFBfUE9SVCIvPgogICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyIKLSAgICAgICAgICAgIGNsYXNzcGF0aHJlZj0iY2xhc3MucGF0aCIgCisgICAgICAgICAgICBjbGFzc3BhdGhyZWY9ImNsYXNzLnBhdGgiCiAgICAgICAgICAgICBpbmNsdWRlcz0id2ViY2xpZW50LyoqIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3dlYi54bWwiLz4KICAgICAgIDxjb3B5IGZpbGU9Ii4vY2xpZW50LXN1bi13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3N1bi13ZWIueG1sIi8+CkBAIC0xMjYsMTEgKzEyNiwxMSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICAgIDwvamF2YT4KIAogCi0gPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4gCisgPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9IndlYmNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5ob3N0fSIgdmFsdWU9IkhUVFBfSE9TVCIvPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLnBvcnR9IiB2YWx1ZT0iSFRUUF9QT1JUIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL2NsaWVudC13ZWIueG1sCmluZGV4IDAyN2RmY2UuLmI0YmJmNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IDU2NTQ5ZmEuLjRkNjAyNmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTMvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjMsOSArNjMsOSBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgU1VCVFJBQ1QgU0VSVklDRSBJUyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJbMTExMV0iKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9jdXN0b20tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL2N1c3RvbS1jbGllbnQueG1sCmluZGV4IDgzOWZjYjEuLjQ4ZjE3MTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL2N1c3RvbS1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL2N1c3RvbS1jbGllbnQueG1sCkBAIC0xNywxMiArMTcsMTIgQEAKIAogLS0+CiAKLTxiaW5kaW5ncyAKKzxiaW5kaW5ncwogICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgICAgeG1sbnM6amF4Yj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4YiIKICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKICAgICB3c2RsTG9jYXRpb249IlN1YnRyYWN0TnVtYmVycy53c2RsIgotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+ICAgIAorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+CiAgICAgPGJpbmRpbmdzIG5vZGU9Im5zMTpkZWZpbml0aW9ucyIgeG1sbnM6bnMxPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+CiAgICAgICAgIDxwYWNrYWdlIG5hbWU9ImNsaWVudCIvPgogICAgIDwvYmluZGluZ3M+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9jdXN0b20tc2VydmVyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL2N1c3RvbS1zZXJ2ZXIueG1sCmluZGV4IDE3MGQ2NjcuLjA5ODgxMjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL2N1c3RvbS1zZXJ2ZXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL2N1c3RvbS1zZXJ2ZXIueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAKIC0tPgogCi08YmluZGluZ3MgCis8YmluZGluZ3MKICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogICAgIHhtbG5zOmpheGI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIiCiAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKaW5kZXggZjYwN2U2Mi4uNWUwNTA5OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTMvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQpAQCAtMTksNyArMTksNyBAQAogQGpha2FydGEuandzLkhhbmRsZXJDaGFpbihuYW1lPSJzb21lIG5hbWUiLCBmaWxlPSJteWhhbmRsZXIueG1sIikKIEBqYWthcnRhLmp3cy5XZWJTZXJ2aWNlIChzZXJ2aWNlTmFtZT0ianVua2p1bmtqdW5rIiwgZW5kcG9pbnRJbnRlcmZhY2U9ImVuZHBvaW50LlN1YnRyYWN0TnVtYmVyc1BvcnRUeXBlIikKIHB1YmxpYyBjbGFzcyBTdWJ0cmFjdE51bWJlcnNJbXBsIGltcGxlbWVudHMgU3VidHJhY3ROdW1iZXJzUG9ydFR5cGUgewotICAgIAorCiAgICAgcHVibGljIGludCBzdWJ0cmFjdE51bWJlcnMgKGludCBudW1iZXIxLCBpbnQgbnVtYmVyMikgewogU3lzdGVtLm91dC5wcmludGxuKCJJIGdvdCBuMSA9ICIgKyBudW1iZXIxICsgIiBhbmQgbjIgPSAiICsgbnVtYmVyMik7CiAgICAgICAgIHJldHVybiBudW1iZXIxIC0gbnVtYmVyMjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL2VuZHBvaW50L1Rlc3RIYW5kbGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9lbmRwb2ludC9UZXN0SGFuZGxlci5qYXZhCmluZGV4IDJkZTRjOTkuLjI5NjZjNGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL2VuZHBvaW50L1Rlc3RIYW5kbGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTMvZW5kcG9pbnQvVGVzdEhhbmRsZXIuamF2YQpAQCAtMjYsMTcgKzI2LDE3IEBACiBpbXBvcnQgamFrYXJ0YS54bWwuc29hcC4qOwogCiBwdWJsaWMgY2xhc3MgVGVzdEhhbmRsZXIgaW1wbGVtZW50cyBTT0FQSGFuZGxlcjxTT0FQTWVzc2FnZUNvbnRleHQ+IHsKLSAgICAKKwogICAgIHB1YmxpYyBTZXQ8UU5hbWU+IGdldEhlYWRlcnMoKSB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZU1lc3NhZ2UoU09BUE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFNPQVBNZXNzYWdlQ29udGV4dCBzbWMgPSAoU09BUE1lc3NhZ2VDb250ZXh0KSBjb250ZXh0OwogICAgICAgICAgICAgU09BUE1lc3NhZ2UgbWVzc2FnZSA9IHNtYy5nZXRNZXNzYWdlKCk7CiAgICAgICAgICAgICBTT0FQQm9keSBib2R5ID0gbWVzc2FnZS5nZXRTT0FQQm9keSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFNPQVBFbGVtZW50IHBhcmFtRWxlbWVudCA9CiAgICAgICAgICAgICAgICAgKFNPQVBFbGVtZW50KSBib2R5LmdldEZpcnN0Q2hpbGQoKS5nZXRGaXJzdENoaWxkKCk7CiAgICAgICAgICAgICBpbnQgbnVtYmVyID0gSW50ZWdlci5wYXJzZUludChwYXJhbUVsZW1lbnQuZ2V0VmFsdWUoKSk7CkBAIC00NCwxNCArNDQsMTQgQEAKICAgICAgICAgfSBjYXRjaCAoU09BUEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJWSUoncyBURVNUIEhBTkRMRVIgQ0FMTEVEIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJWSUoncyBURVNUIEhBTkRMRVIgQ0FMTEVEIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZUZhdWx0KFNPQVBNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNsb3NlKE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHt9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy93ZWIueG1sCmluZGV4IDQzNDI0MzQuLjRhMWIyODMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTMvd2ViLnhtbApAQCAtMTgsMjkgKzE4LDI5IEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5TdWJ0cmFjdE51bWJlcnMgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRlc2NyaXB0aW9uPlN1YnRyYWN0TnVtYmVycyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIFN1YnRyYWN0TnVtYmVycyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+U3VidHJhY3ROdW1iZXJzV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuU3VidHJhY3ROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIFN1YnRyYWN0TnVtYmVycyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+U3VidHJhY3ROdW1iZXJzV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuU3VidHJhY3ROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL1N1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL3dlYmNsaWVudC9DbGllbnQuamF2YQppbmRleCA1MTI3N2NiLi40M2Y2MGIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy93ZWJjbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTMvd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNyw4ICsyNyw4IEBACiAKICAgICAgICAgQFdlYlNlcnZpY2VSZWYgU3VidHJhY3ROdW1iZXJzU2VydmljZSBzZXJ2aWNlOwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjg3MjRiYy4uMDIxMmVjZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN2Y2hhbmRsZXItNCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9idWlsZC54bWwKaW5kZXggNGRlNDE5Zi4uMTYwNjI4OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L2J1aWxkLnhtbApAQCAtMTMwLDExICsxMzAsMTEgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L2NsaWVudC13ZWIueG1sCmluZGV4IDAyN2RmY2UuLmI0YmJmNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IDYxYmM4MjAuLjY2OTBlZTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTQvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjMsOSArNjMsOSBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgU1VCVFJBQ1QgU0VSVklDRSBJUyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJbMTExM10iKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9jdXN0b20tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L2N1c3RvbS1jbGllbnQueG1sCmluZGV4IDgzOWZjYjEuLjQ4ZjE3MTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L2N1c3RvbS1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L2N1c3RvbS1jbGllbnQueG1sCkBAIC0xNywxMiArMTcsMTIgQEAKIAogLS0+CiAKLTxiaW5kaW5ncyAKKzxiaW5kaW5ncwogICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgICAgeG1sbnM6amF4Yj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4YiIKICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKICAgICB3c2RsTG9jYXRpb249IlN1YnRyYWN0TnVtYmVycy53c2RsIgotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+ICAgIAorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+CiAgICAgPGJpbmRpbmdzIG5vZGU9Im5zMTpkZWZpbml0aW9ucyIgeG1sbnM6bnMxPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+CiAgICAgICAgIDxwYWNrYWdlIG5hbWU9ImNsaWVudCIvPgogICAgIDwvYmluZGluZ3M+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9jdXN0b20tc2VydmVyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L2N1c3RvbS1zZXJ2ZXIueG1sCmluZGV4IDE3MGQ2NjcuLjA5ODgxMjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L2N1c3RvbS1zZXJ2ZXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L2N1c3RvbS1zZXJ2ZXIueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAKIC0tPgogCi08YmluZGluZ3MgCis8YmluZGluZ3MKICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogICAgIHhtbG5zOmpheGI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIiCiAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKaW5kZXggZjYwN2U2Mi4uNWUwNTA5OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTQvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQpAQCAtMTksNyArMTksNyBAQAogQGpha2FydGEuandzLkhhbmRsZXJDaGFpbihuYW1lPSJzb21lIG5hbWUiLCBmaWxlPSJteWhhbmRsZXIueG1sIikKIEBqYWthcnRhLmp3cy5XZWJTZXJ2aWNlIChzZXJ2aWNlTmFtZT0ianVua2p1bmtqdW5rIiwgZW5kcG9pbnRJbnRlcmZhY2U9ImVuZHBvaW50LlN1YnRyYWN0TnVtYmVyc1BvcnRUeXBlIikKIHB1YmxpYyBjbGFzcyBTdWJ0cmFjdE51bWJlcnNJbXBsIGltcGxlbWVudHMgU3VidHJhY3ROdW1iZXJzUG9ydFR5cGUgewotICAgIAorCiAgICAgcHVibGljIGludCBzdWJ0cmFjdE51bWJlcnMgKGludCBudW1iZXIxLCBpbnQgbnVtYmVyMikgewogU3lzdGVtLm91dC5wcmludGxuKCJJIGdvdCBuMSA9ICIgKyBudW1iZXIxICsgIiBhbmQgbjIgPSAiICsgbnVtYmVyMik7CiAgICAgICAgIHJldHVybiBudW1iZXIxIC0gbnVtYmVyMjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L2VuZHBvaW50L1Rlc3RIYW5kbGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9lbmRwb2ludC9UZXN0SGFuZGxlci5qYXZhCmluZGV4IGY5MDgxMjguLjM2MDg3YWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L2VuZHBvaW50L1Rlc3RIYW5kbGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTQvZW5kcG9pbnQvVGVzdEhhbmRsZXIuamF2YQpAQCAtMjgsMTEgKzI4LDExIEBACiBpbXBvcnQgamFrYXJ0YS54bWwuc29hcC4qOwogCiBwdWJsaWMgY2xhc3MgVGVzdEhhbmRsZXIgaW1wbGVtZW50cyBTT0FQSGFuZGxlcjxTT0FQTWVzc2FnZUNvbnRleHQ+IHsKLSAgICAKKwogICAgIHB1YmxpYyBTZXQ8UU5hbWU+IGdldEhlYWRlcnMoKSB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogICAgIFN0cmluZyBwb3N0Q29uc3RTdHJpbmcgPSAiTk9UX0lOSVRJQUxJWkVEIjsKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CkBAIC00MCw4ICs0MCw4IEBACiAgICAgfQogCiAgICAgQFJlc291cmNlKG5hbWU9InN0cmluZ1ZhbHVlIikKLSAgICBTdHJpbmcgaW5qZWN0ZWRTdHJpbmcgPSAidW5kZWZpbmVkIjsgICAgCi0gICAgCisgICAgU3RyaW5nIGluamVjdGVkU3RyaW5nID0gInVuZGVmaW5lZCI7CisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVNZXNzYWdlKFNPQVBNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiAoIlBST1BFUkxZX0lOSVRJQUxJWkVEIi5lcXVhbHMocG9zdENvbnN0U3RyaW5nKSkgewpAQCAtNTAsMTcgKzUwLDE3IEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIYW5kbGVyIFBvc3RDb25zdHJ1Y3Qgbm90IGNhbGxlZCBwcm9wZXJ0eSIpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicG9zdENvbnN0U3RyaW5nID0gIiArIHBvc3RDb25zdFN0cmluZyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCJ1bmRlZmluZWQiLmVxdWFscyhpbmplY3RlZFN0cmluZykpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhhbmRsZXIgbm90IGluamVjdGVkIHByb3BlcnR5Iik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluamVjdGVkU3RyaW5nID0gIiArIGluamVjdGVkU3RyaW5nKTsKLSAgICAgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNPQVBNZXNzYWdlQ29udGV4dCBzbWMgPSAoU09BUE1lc3NhZ2VDb250ZXh0KSBjb250ZXh0OwogICAgICAgICAgICAgU09BUE1lc3NhZ2UgbWVzc2FnZSA9IHNtYy5nZXRNZXNzYWdlKCk7CiAgICAgICAgICAgICBTT0FQQm9keSBib2R5ID0gbWVzc2FnZS5nZXRTT0FQQm9keSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFNPQVBFbGVtZW50IHBhcmFtRWxlbWVudCA9CiAgICAgICAgICAgICAgICAgKFNPQVBFbGVtZW50KSBib2R5LmdldEZpcnN0Q2hpbGQoKS5nZXRGaXJzdENoaWxkKCk7CiAgICAgICAgICAgICBpbnQgbnVtYmVyID0gSW50ZWdlci5wYXJzZUludChwYXJhbUVsZW1lbnQuZ2V0VmFsdWUoKSk7CkBAIC02OCwxNiArNjgsMTYgQEAKICAgICAgICAgfSBjYXRjaCAoU09BUEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJWSUoncyBURVNUIEhBTkRMRVIgQ0FMTEVEIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJWSUoncyBURVNUIEhBTkRMRVIgQ0FMTEVEIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZUZhdWx0KFNPQVBNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgY2xvc2UoTWVzc2FnZUNvbnRleHQgY29udGV4dCkge30KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTQvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L3dlYi54bWwKaW5kZXggNTRkMjBjNC4uNmNjYjUwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTQvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPlN1YnRyYWN0TnVtYmVycyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGVzY3JpcHRpb24+U3VidHJhY3ROdW1iZXJzIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU3VidHJhY3ROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5TdWJ0cmFjdE51bWJlcnNXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU3VidHJhY3ROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5TdWJ0cmFjdE51bWJlcnNXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL1N1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvU3VidHJhY3ROdW1iZXJzU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgotICAgICAgICAKKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgorCiAgICAgICAgIDxlbnYtZW50cnk+CiAgICAgICAgICAgICA8ZW52LWVudHJ5LW5hbWU+c3RyaW5nVmFsdWU8L2Vudi1lbnRyeS1uYW1lPgogICAgICAgICAgICAgPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2Vudi1lbnRyeS10eXBlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTQvd2ViY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTQvd2ViY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDRlMmI3NTguLmE0MTliMTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L3dlYmNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC93ZWJjbGllbnQvQ2xpZW50LmphdmEKQEAgLTI3LDggKzI3LDggQEAKIAogICAgICAgICBAV2ViU2VydmljZVJlZiBTdWJ0cmFjdE51bWJlcnNTZXJ2aWNlIHNlcnZpY2U7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dhcnNlcnZpY2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Fyc2VydmljZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDgzMjZjODMuLjI0NzE1NTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Fyc2VydmljZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Fyc2VydmljZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw5ICsxNSw5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3YXJzZXJ2aWNlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Fyc2VydmljZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dhcnNlcnZpY2UvYnVpbGQueG1sCmluZGV4IDgzZGQzOWQuLjA0NzI1ZjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Fyc2VydmljZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93YXJzZXJ2aWNlL2J1aWxkLnhtbApAQCAtNzMsNyArNzMsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50Ii8+CiAKLSAgICAgIDwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+IAorICAgICAgPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4KICAgICAgIDxyZXBsYWNlIGZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5ob3N0fSIgdmFsdWU9IkhUVFBfSE9TVCIvPgogICAgICAgPHJlcGxhY2UgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLnBvcnR9IiB2YWx1ZT0iSFRUUF9QT1JUIi8+CiAgICAgPC90YXJnZXQ+CkBAIC04MSw3ICs4MSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50Ij4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWNsaWVudCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQtY2xhc3MiIHZhbHVlPSJjbGllbnQuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dhcnNlcnZpY2UvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93YXJzZXJ2aWNlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAwMGEyYWFhLi4wZjlhNDdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dhcnNlcnZpY2UvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Fyc2VydmljZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMyLDEwICszMiwxMCBAQAogICAgICAgICBzdGF0aWMgSGVsbG9TZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtYW5ub3RhdGlvbiIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1hbm5vdGF0aW9uIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQzLDE2ICs0MywxNiBAQAogICAgICAgICAgICAgICAgIEhlbGxvIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvUG9ydCgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPDEwO2krKykgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIiArIGFyZ3NbMF0pOwotCQkgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJICAgIH0KLQkJICAgIGlmKHJldC5pbmRleE9mKGFyZ3NbMF0pID09IC0xKSB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihyZXQuaW5kZXhPZihhcmdzWzBdKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuUEFTUyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dhcnNlcnZpY2UvZW5kcG9pbnQvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Fyc2VydmljZS9lbmRwb2ludC9IZWxsby5qYXZhCmluZGV4IGM1NzI3YjIuLjE0YjZlMGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Fyc2VydmljZS9lbmRwb2ludC9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Fyc2VydmljZS9lbmRwb2ludC9IZWxsby5qYXZhCkBAIC0yNSwxMCArMjUsMTAgQEAKICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLmNvbS9IZWxsbyIKICkKIHB1YmxpYyBjbGFzcyBIZWxsbyB7Ci0JcHVibGljIEhlbGxvKCkge30KKyAgICBwdWJsaWMgSGVsbG8oKSB7fQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKLQkJcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvICIgKyB3aG87Ci0JfQorICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7CisgICAgICAgIHJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Fyc2VydmljZS93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93YXJzZXJ2aWNlL3dlYi54bWwKaW5kZXggMzdjZTE4Mi4uY2M2NDExZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93YXJzZXJ2aWNlL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93YXJzZXJ2aWNlL3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsbzwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsbzwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvSGVsbG9TZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkhlbGxvPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9IZWxsb1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1jb2J1bmRsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWNvYnVuZGxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjA5ZDk1MS4uYTUwMTQ3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWNvYnVuZGxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWNvYnVuZGxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iJHthbnQucHJvamVjdC5uYW1lfSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtY29idW5kbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWNvYnVuZGxlL2J1aWxkLnhtbAppbmRleCA1ZDAwM2QyLi5mMWY0OGU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtY29idW5kbGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1jb2J1bmRsZS9idWlsZC54bWwKQEAgLTEyMiwxMSArMTIyLDExIEBACiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtY29idW5kbGUvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1jb2J1bmRsZS93ZWIueG1sCmluZGV4IDBmYjBmMWIuLjAxNTQ5YWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1jb2J1bmRsZS93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1jb2J1bmRsZS93ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1sb29rdXAvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1sb29rdXAvYnVpbGQucHJvcGVydGllcwppbmRleCBiNDY5YmFiLi4xNzA1ZDI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtbG9va3VwL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWxvb2t1cC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYnNlcnZpY2VyZWYtbG9va3VwIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1sb29rdXAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWxvb2t1cC9idWlsZC54bWwKaW5kZXggZDJhOGY3Mi4uNDIxMDQ5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWxvb2t1cC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWxvb2t1cC9idWlsZC54bWwKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMiCiAgICAgICAgICAgICBpbmNsdWRlcz0id2ViY2xpZW50LyoqIj4KICAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9ImNsYXNzcGF0aCIvPgotIAorCiAgICAgICA8L2phdmFjPgogICAgICAgPGNvcHkgZmlsZT0iY2xpZW50LXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvd2ViLnhtbCIvPgogICAgICAgPGNvcHkgZmlsZT0iY2xpZW50LXN1bi13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3N1bi13ZWIueG1sIi8+CkBAIC0xMjQsMTEgKzEyNCwxMSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtbG9va3VwL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWxvb2t1cC9jbGllbnQtd2ViLnhtbAppbmRleCAwMjdkZmNlLi5iNGJiZjViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtbG9va3VwL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1sb29rdXAvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWxvb2t1cC9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWxvb2t1cC9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IDBkZWY3MGQuLmNlODI1OTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1sb29rdXAvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtbG9va3VwL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTYzLDkgKzYzLDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIFNVQlRSQUNUIFNFUlZJQ0UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiWzU1NTVdIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWxvb2t1cC9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtbG9va3VwL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQppbmRleCA0ZDYzMzkyLi5hZDlmNzkxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtbG9va3VwL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtbG9va3VwL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBAamFrYXJ0YS5qd3MuV2ViU2VydmljZQogcHVibGljIGNsYXNzIFN1YnRyYWN0TnVtYmVyc0ltcGwgIHsKLSAgICAKKwogICAgIHB1YmxpYyBpbnQgc3VidHJhY3ROdW1iZXJzIChpbnQgbnVtYmVyMSwgaW50IG51bWJlcjIpIHsKICAgICAgICAgcmV0dXJuIG51bWJlcjEgLSBudW1iZXIyOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1sb29rdXAvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1sb29rdXAvd2ViLnhtbAppbmRleCA0MzQyNDM0Li40YTFiMjgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtbG9va3VwL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWxvb2t1cC93ZWIueG1sCkBAIC0xOCwyOSArMTgsMjkgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPlN1YnRyYWN0TnVtYmVycyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGVzY3JpcHRpb24+U3VidHJhY3ROdW1iZXJzIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU3VidHJhY3ROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5TdWJ0cmFjdE51bWJlcnNXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU3VidHJhY3ROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5TdWJ0cmFjdE51bWJlcnNXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL1N1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvU3VidHJhY3ROdW1iZXJzU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWxvb2t1cC93ZWJjbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtbG9va3VwL3dlYmNsaWVudC9DbGllbnQuamF2YQppbmRleCA0OWNkMjAzLi4xZWYyMDIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtbG9va3VwL3dlYmNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtbG9va3VwL3dlYmNsaWVudC9DbGllbnQuamF2YQpAQCAtMjcsMTQgKzI3LDE0IEBACiBwdWJsaWMgY2xhc3MgQ2xpZW50IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAgICAgICAgIEBqYWthcnRhLnhtbC53cy5XZWJTZXJ2aWNlUmVmKG5hbWU9ImZvby9iYXIiICkKLSAgICAgICAgQEFkZHJlc3NpbmcgCisgICAgICAgIEBBZGRyZXNzaW5nCiAgICAgICAgIFN1YnRyYWN0TnVtYmVyc1NlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBAamFrYXJ0YS54bWwud3MuV2ViU2VydmljZVJlZihsb29rdXA9ImphdmE6Y29tcC9lbnYvZm9vL2JhciIpCiAgICAgICAgIFN1YnRyYWN0TnVtYmVyc1NlcnZpY2Ugc2VydmljZTI7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWZzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWZzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNThjNmNiNy4uMDMyZTYxMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOSArMTUsOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2Vic2VydmljZXJlZnMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWZzL2J1aWxkLnhtbAppbmRleCBlMWMwNTEzLi44YWNhM2ViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWZzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWZzL2J1aWxkLnhtbApAQCAtNzgsOCArNzgsOCBAQAogICAgICAgPHJlcGxhY2UgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIiB2YWx1ZT0iJHtodHRwLmhvc3R9IiB0b2tlbj0iSFRUUF9IT1NUIi8+CiAgICAgICA8cmVwbGFjZSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEiIHZhbHVlPSIke2h0dHAucG9ydH0iIHRva2VuPSJIVFRQX1BPUlQiLz4KIAotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTk3LDcgKzk3LDcgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tY2xpZW50Ij4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudC1jbGFzcyIgdmFsdWU9ImNsaWVudC5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZnMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmcy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNzBhNmQ0MC4uN2NiYjc5OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmcy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmcy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTM2LDExICszNiwxMSBAQAogICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VyZWZzLXRlc3QiKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXJlZnMtdGVzdCIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1NlcnZsZXRUZXN0KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9FamJUZXN0KCk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcmVmcy10ZXN0Iik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcmVmcy10ZXN0Iik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9TZXJ2bGV0VGVzdCgpIHsKQEAgLTUwLDExICs1MCwxMSBAQAogICAgICAgICAgICAgICAgIFNlcnZsZXRIZWxsbyBwb3J0ID0gc3ZjLmdldFNlcnZsZXRIZWxsb1BvcnQoKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7aTwxMDtpKyspIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5U2VydmxldEhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKLQkJICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LVNlcnZsZXQtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtU2VydmxldC1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiV2ViU2VydmljZVJlZnMtU2VydmxldC1FbmRwb2ludCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiV2ViU2VydmljZVJlZnMtU2VydmxldC1FbmRwb2ludCIsIHN0YXQuUEFTUyk7CkBAIC03MSwxMSArNzEsMTEgQEAKICAgICAgICAgICAgICAgICBXU0hlbGxvIHBvcnQgPSBzdmMuZ2V0V1NIZWxsb0VKQlBvcnQoKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7aTwxMDtpKyspIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5RWpiSGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIpOwotCQkgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtRUpCLUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUVKQi1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiV2ViU2VydmljZVJlZnMtRUpCLUVuZHBvaW50Iiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJXZWJTZXJ2aWNlUmVmcy1FSkItRW5kcG9pbnQiLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmcy9lamJfZW5kcG9pbnQvV1NIZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmcy9lamJfZW5kcG9pbnQvV1NIZWxsby5qYXZhCmluZGV4IDczZDNhNTQuLmJiMmZhNzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZnMvZWpiX2VuZHBvaW50L1dTSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWZzL2VqYl9lbmRwb2ludC9XU0hlbGxvLmphdmEKQEAgLTIxLDUgKzIxLDUgQEAKIEBXZWJTZXJ2aWNlCiBwdWJsaWMgaW50ZXJmYWNlIFdTSGVsbG8gewogCi0JcHVibGljIFN0cmluZyBzYXlFamJIZWxsbyhTdHJpbmcgd2hvKTsKKyAgICBwdWJsaWMgU3RyaW5nIHNheUVqYkhlbGxvKFN0cmluZyB3aG8pOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmcy9zZXJ2bGV0X2VuZHBvaW50L1NlcnZsZXRIZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmcy9zZXJ2bGV0X2VuZHBvaW50L1NlcnZsZXRIZWxsby5qYXZhCmluZGV4IDc5YjA3MjUuLmU5MzFiZDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZnMvc2VydmxldF9lbmRwb2ludC9TZXJ2bGV0SGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWZzL3NlcnZsZXRfZW5kcG9pbnQvU2VydmxldEhlbGxvLmphdmEKQEAgLTIwLDggKzIwLDggQEAKIAogQFdlYlNlcnZpY2UKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0SGVsbG8gewotCQorCiAgICAgcHVibGljIFN0cmluZyBzYXlTZXJ2bGV0SGVsbG8oU3RyaW5nIHBhcmFtKSB7Ci0JcmV0dXJuICJXZWJTdmNUZXN0LVNlcnZsZXQtSGVsbG8gIiArIHBhcmFtOworICAgIHJldHVybiAiV2ViU3ZjVGVzdC1TZXJ2bGV0LUhlbGxvICIgKyBwYXJhbTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWZzL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWZzL3dlYi54bWwKaW5kZXggZjA2Zjc0Yy4uMGFkZDgxZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmcy93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZnMvd2ViLnhtbApAQCAtMTgsMjUgKzE4LDI1IEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgU2VydmxldCBIZWxsbyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPlNlcnZsZXQgSGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIFNlcnZsZXQgSGVsbG8gU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0IEhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBTZXJ2bGV0IEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5TZXJ2bGV0SGVsbG9XZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+U2VydmxldEhlbGxvPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPnNlcnZsZXRfZW5kcG9pbnQuU2VydmxldEhlbGxvPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU2VydmxldCBIZWxsbyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldEhlbGxvV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRIZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5zZXJ2bGV0X2VuZHBvaW50LlNlcnZsZXRIZWxsbzwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5TZXJ2bGV0SGVsbG88L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL1NlcnZsZXRIZWxsb1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldEhlbGxvPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9TZXJ2bGV0SGVsbG9TZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctMi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctMi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGU0NmE4MTAuLjk5YzRjN2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLTIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy0yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLTIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctMi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy0yL2J1aWxkLnhtbAppbmRleCA2Mzg5ZTczLi4wOTYxMTYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy0yL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy0yL2J1aWxkLnhtbApAQCAtODMsNyArODMsNyBAQAogICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyIKICAgICAgICAgICAgIGluY2x1ZGVzPSJ3ZWJjbGllbnQvKioiPgogICAgICAgICAgPGNsYXNzcGF0aCByZWZpZD0iY2xhc3NwYXRoIi8+Ci0gCisKICAgICAgIDwvamF2YWM+CiAgICAgICA8Y29weSBmaWxlPSJjbGllbnQtd2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi93ZWIueG1sIi8+CiAgICAgICA8Y29weSBmaWxlPSJjbGllbnQtc3VuLXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvc3VuLXdlYi54bWwiLz4KQEAgLTEyNCwxMSArMTI0LDExIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5UZXN0Q2xpZW50Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLTIvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy0yL2NsaWVudC13ZWIueG1sCmluZGV4IDAyN2RmY2UuLmI0YmJmNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLTIvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctMi9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy0yL2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy0yL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggMmE5MmUzNS4uM2NlODcxYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctMi9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLTIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjMsOSArNjMsOSBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgU1VCVFJBQ1QgU0VSVklDRSBJUyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJbNTU1NV0iKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy0yL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLTIvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCmluZGV4IDRkNjMzOTIuLmFkOWY3OTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLTIvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLTIvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIEBqYWthcnRhLmp3cy5XZWJTZXJ2aWNlCiBwdWJsaWMgY2xhc3MgU3VidHJhY3ROdW1iZXJzSW1wbCAgewotICAgIAorCiAgICAgcHVibGljIGludCBzdWJ0cmFjdE51bWJlcnMgKGludCBudW1iZXIxLCBpbnQgbnVtYmVyMikgewogICAgICAgICByZXR1cm4gbnVtYmVyMSAtIG51bWJlcjI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctMi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctMi93ZWIueG1sCmluZGV4IDQzNDI0MzQuLjRhMWIyODMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLTIvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy0yL3dlYi54bWwKQEAgLTE4LDI5ICsxOCwyOSBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+U3VidHJhY3ROdW1iZXJzIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkZXNjcmlwdGlvbj5TdWJ0cmFjdE51bWJlcnMgU2VydmljZTwvZGVzY3JpcHRpb24+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBTdWJ0cmFjdE51bWJlcnMgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPlN1YnRyYWN0TnVtYmVyc1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LlN1YnRyYWN0TnVtYmVyc0ltcGw8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBTdWJ0cmFjdE51bWJlcnMgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPlN1YnRyYWN0TnVtYmVyc1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LlN1YnRyYWN0TnVtYmVyc0ltcGw8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvU3VidHJhY3ROdW1iZXJzU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy0yL3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLTIvd2ViY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGE0NzhkODEuLjNkZWJkM2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLTIvd2ViY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLTIvd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCwxMSArMjgsMTEgQEAKIAogICAgICAgICBAamFrYXJ0YS54bWwud3MuV2ViU2VydmljZVJlZihuYW1lPSJmb28vYmFyIiAsdmFsdWUgPVN1YnRyYWN0TnVtYmVyc1NlcnZpY2UuY2xhc3MpCiAgICAgICAgQEFkZHJlc3NpbmcgKGVuYWJsZWQ9ZmFsc2UpCi0gICAgICAgIC8vQEFkZHJlc3NpbmcgCisgICAgICAgIC8vQEFkZHJlc3NpbmcKICAgICAgICAgU3VidHJhY3ROdW1iZXJzSW1wbCBwb3J0OwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50L2FwcGNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLWFwcGNsaWVudC9hcHBjbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOTdiZDQzNi4uNzk4Y2YwYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50L2FwcGNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy1hcHBjbGllbnQvYXBwY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMiwxMCArMzIsMTAgQEAKICAgICAgICAgQFdlYlNlcnZpY2VSZWYobmFtZT0ic2VydmljZS9NeVNlcnZpY2UiKSBzdGF0aWMgQWRkTnVtYmVyc1NlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy1hcHBjbGllbnQgdGVzdCIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50IHRlc3QiKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLWFwcGNsaWVudElEIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50SUQiKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICAgICAgICAgIEFkZE51bWJlcnNQb3J0VHlwZSBwb3J0ID0gc2VydmljZS5nZXRBZGROdW1iZXJzUG9ydCgpOwogICAgICAgICAgICAgICAgICgoQmluZGluZ1Byb3ZpZGVyKXBvcnQpLmdldFJlcXVlc3RDb250ZXh0KCkucHV0KEJpbmRpbmdQcm92aWRlci5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLCJodHRwOi8vbG9jYWxob3N0OjgwODAvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLWFwcGNsaWVudC93ZWJzZXJ2aWNlL0FkZE51bWJlcnNTZXJ2aWNlP1dTREwiKTsKICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gcG9ydC5hZGROdW1iZXJzKDEwMCwgMjAwKTsKLQkJaWYocmV0ICE9IDMwMCkgeworICAgICAgICBpZihyZXQgIT0gMzAwKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy1hcHBjbGllbnQiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy1hcHBjbGllbnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLWFwcGNsaWVudC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDAxOWM2ODYuLjVjNzM5YzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLWFwcGNsaWVudC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLWFwcGNsaWVudC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy1hcHBjbGllbnQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLWFwcGNsaWVudC9idWlsZC54bWwKaW5kZXggN2ZmYTdiMC4uMzkyMGNmZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy1hcHBjbGllbnQvYnVpbGQueG1sCkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50L2N1c3RvbS1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50L2N1c3RvbS1jbGllbnQueG1sCmluZGV4IDZhMTM1YWQuLmZlM2Y3MzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLWFwcGNsaWVudC9jdXN0b20tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy1hcHBjbGllbnQvY3VzdG9tLWNsaWVudC54bWwKQEAgLTE3LDEyICsxNywxMiBAQAogCiAtLT4KIAotPGJpbmRpbmdzIAorPGJpbmRpbmdzCiAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKICAgICB4bWxuczpqYXhiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXhiIgogICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgogICAgIHdzZGxMb2NhdGlvbj0iQWRkTnVtYmVycy53c2RsIgotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+ICAgIAorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+CiAgICAgPGJpbmRpbmdzIG5vZGU9Im5zMTpkZWZpbml0aW9ucyIgeG1sbnM6bnMxPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+CiAgICAgICAgIDxwYWNrYWdlIG5hbWU9ImNsaWVudCIvPgogICAgIDwvYmluZGluZ3M+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy1hcHBjbGllbnQvY3VzdG9tLXNlcnZlci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy1hcHBjbGllbnQvY3VzdG9tLXNlcnZlci54bWwKaW5kZXggNGNmYmI1OS4uZTZiYjIzNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50L2N1c3RvbS1zZXJ2ZXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLWFwcGNsaWVudC9jdXN0b20tc2VydmVyLnhtbApAQCAtMTcsNyArMTcsNyBAQAogCiAtLT4KIAotPGJpbmRpbmdzIAorPGJpbmRpbmdzCiAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKICAgICB4bWxuczpqYXhiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXhiIgogICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50L2VuZHBvaW50L0FkZE51bWJlcnNJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy1hcHBjbGllbnQvZW5kcG9pbnQvQWRkTnVtYmVyc0ltcGwuamF2YQppbmRleCAzNzRmNWJkLi5jM2QyYjk5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy1hcHBjbGllbnQvZW5kcG9pbnQvQWRkTnVtYmVyc0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy1hcHBjbGllbnQvZW5kcG9pbnQvQWRkTnVtYmVyc0ltcGwuamF2YQpAQCAtMTksNyArMTksNyBAQAogQGpha2FydGEueG1sLndzLkJpbmRpbmdUeXBlKGpha2FydGEueG1sLndzLnNvYXAuU09BUEJpbmRpbmcuU09BUDEySFRUUF9CSU5ESU5HKQogQGpha2FydGEuandzLldlYlNlcnZpY2UgKHdzZGxMb2NhdGlvbj0iV0VCLUlORi93c2RsL0FkZE51bWJlcnMud3NkbCIsIHNlcnZpY2VOYW1lPSJBZGROdW1iZXJzU2VydmljZSIsIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2R1a2Uub3JnIiwgcG9ydE5hbWU9IkFkZE51bWJlcnNQb3J0IiwgZW5kcG9pbnRJbnRlcmZhY2U9ImVuZHBvaW50LkFkZE51bWJlcnNQb3J0VHlwZSIpCiBwdWJsaWMgY2xhc3MgQWRkTnVtYmVyc0ltcGwgaW1wbGVtZW50cyBBZGROdW1iZXJzUG9ydFR5cGUgewotICAgIAorCiAgICAgcHVibGljIGludCBhZGROdW1iZXJzIChpbnQgbnVtYmVyMSwgaW50IG51bWJlcjIpIHsKICAgICAgICAgcmV0dXJuIG51bWJlcjEgKyBudW1iZXIyOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLWFwcGNsaWVudC93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50L3dlYi54bWwKaW5kZXggNjI1NjE1My4uMTg4OWViNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50L3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50L3dlYi54bWwKQEAgLTE4LDI5ICsxOCwyOSBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+QWRkTnVtYmVycyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGVzY3JpcHRpb24+QWRkTnVtYmVycyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEFkZE51bWJlcnMgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkFkZE51bWJlcnNXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+QWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBBZGROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5BZGROdW1iZXJzV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9BZGROdW1iZXJzU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQWRkTnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDgwYmIxYzEuLmI3MTFjYjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmciLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmcvYnVpbGQueG1sCmluZGV4IGJjY2M3YWIuLjRhZTMwMTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy9idWlsZC54bWwKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMiCiAgICAgICAgICAgICBpbmNsdWRlcz0id2ViY2xpZW50LyoqIj4KICAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9ImNsYXNzcGF0aCIvPgotIAorCiAgICAgICA8L2phdmFjPgogICAgICAgPGNvcHkgZmlsZT0iY2xpZW50LXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvd2ViLnhtbCIvPgogICAgICAgPGNvcHkgZmlsZT0iY2xpZW50LXN1bi13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3N1bi13ZWIueG1sIi8+CkBAIC0xMjQsMTEgKzEyNCwxMSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nL2NsaWVudC13ZWIueG1sCmluZGV4IDAyN2RmY2UuLmI0YmJmNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nL2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IDJkMTU3MWQuLjM1YjdhMWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmcvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjMsOSArNjMsOSBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgU1VCVFJBQ1QgU0VSVklDRSBJUyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJbNTU1NV0iKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKaW5kZXggNGQ2MzM5Mi4uYWQ5Zjc5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmcvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBAamFrYXJ0YS5qd3MuV2ViU2VydmljZQogcHVibGljIGNsYXNzIFN1YnRyYWN0TnVtYmVyc0ltcGwgIHsKLSAgICAKKwogICAgIHB1YmxpYyBpbnQgc3VidHJhY3ROdW1iZXJzIChpbnQgbnVtYmVyMSwgaW50IG51bWJlcjIpIHsKICAgICAgICAgcmV0dXJuIG51bWJlcjEgLSBudW1iZXIyOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy93ZWIueG1sCmluZGV4IDQzNDI0MzQuLjRhMWIyODMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3Npbmcvd2ViLnhtbApAQCAtMTgsMjkgKzE4LDI5IEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5TdWJ0cmFjdE51bWJlcnMgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRlc2NyaXB0aW9uPlN1YnRyYWN0TnVtYmVycyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIFN1YnRyYWN0TnVtYmVycyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+U3VidHJhY3ROdW1iZXJzV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuU3VidHJhY3ROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIFN1YnRyYWN0TnVtYmVycyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+U3VidHJhY3ROdW1iZXJzV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuU3VidHJhY3ROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL1N1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nL3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nL3dlYmNsaWVudC9DbGllbnQuamF2YQppbmRleCA1NWY0MDVmLi5mZGRiMjQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy93ZWJjbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3Npbmcvd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCwxMSArMjgsMTEgQEAKIAogICAgICAgICBAamFrYXJ0YS54bWwud3MuV2ViU2VydmljZVJlZihTdWJ0cmFjdE51bWJlcnNTZXJ2aWNlLmNsYXNzKQogICAgICAgIC8vQEFkZHJlc3NpbmcgKHJlcXVpcmVkID0gdHJ1ZSxlbmFibGVkPXRydWUgLHJlc3BvbnNlcz1BZGRyZXNzaW5nRmVhdHVyZS5SZXNwb25zZXMuTk9OX0FOT05ZTU9VUykKLSAgICAgICAgLy9AQWRkcmVzc2luZyAKKyAgICAgICAgLy9AQWRkcmVzc2luZwogICAgICAgICBTdWJ0cmFjdE51bWJlcnNJbXBsIHBvcnQ7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtY2xpZW50ZGRzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtY2xpZW50ZGRzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDVlZTgyOS4uMzc2ZjU5ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWNsaWVudGRkcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1jbGllbnRkZHMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWJzZXJ2aWNlczEzLWNsaWVudGRkcyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtY2xpZW50ZGRzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1jbGllbnRkZHMvYnVpbGQueG1sCmluZGV4IGU4NWViMGQuLjhlZjEwYWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1jbGllbnRkZHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1jbGllbnRkZHMvYnVpbGQueG1sCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndzaW1wb3J0Ij4KICAgICAgICAgPHBhcmFtIG5hbWU9IndzaW1wb3J0LmFyZ3MiCiAgICAgICAgICAgdmFsdWU9IiAtWGVuZG9yc2VkIC1wIGVuZHBvaW50IC1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9ICR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtY2xpZW50ZGRzL1N1YnRyYWN0TnVtYmVycy53c2RsIi8+Ci0gICAgICA8L2FudGNhbGw+IAorICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBrZy13YXIiPgogICAgICAgICA8cGFyYW0gbmFtZT0id3NkbGZpbGUubG9jYXRpb24iIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWNsaWVudGRkcyIvPgpAQCAtODMsNyArODMsNyBAQAogICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyIKICAgICAgICAgICAgIGluY2x1ZGVzPSJ3ZWJjbGllbnQvKioiPgogICAgICAgICAgPGNsYXNzcGF0aCByZWZpZD0iY2xhc3NwYXRoIi8+Ci0gCisKICAgICAgIDwvamF2YWM+CiAgICAgICA8Y29weSBmaWxlPSJjbGllbnQtd2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi93ZWIueG1sIi8+CiAgICAgICA8Y29weSBmaWxlPSJjbGllbnQtc3VuLXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvc3VuLXdlYi54bWwiLz4KQEAgLTEyNSwxMSArMTI1LDExIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5UZXN0Q2xpZW50Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1jbGllbnRkZHMvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1jbGllbnRkZHMvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCBmYmQzYWYyLi4yZWQzYTkxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtY2xpZW50ZGRzL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWNsaWVudGRkcy9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC02Myw5ICs2Myw5IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBTVUJUUkFDVCBTRVJWSUNFIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIls1NTU1XSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1jbGllbnRkZHMvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWNsaWVudGRkcy9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKaW5kZXggOGQxMGVmZC4uNGM5YmM0ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWNsaWVudGRkcy9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWNsaWVudGRkcy9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKICAgICBlbmRwb2ludEludGVyZmFjZT0iZW5kcG9pbnQuU3VidHJhY3ROdW1iZXJzUG9ydFR5cGUiKQogCiBwdWJsaWMgY2xhc3MgU3VidHJhY3ROdW1iZXJzSW1wbCAgewotICAgIAorCiAgICAgcHVibGljIGludCBzdWJ0cmFjdE51bWJlcnMgKGludCBudW1iZXIxLCBpbnQgbnVtYmVyMikgewogICAgICAgICByZXR1cm4gbnVtYmVyMSAtIG51bWJlcjI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWNsaWVudGRkcy93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWNsaWVudGRkcy93ZWIueG1sCmluZGV4IDQzNDI0MzQuLjRhMWIyODMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1jbGllbnRkZHMvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtY2xpZW50ZGRzL3dlYi54bWwKQEAgLTE4LDI5ICsxOCwyOSBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+U3VidHJhY3ROdW1iZXJzIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkZXNjcmlwdGlvbj5TdWJ0cmFjdE51bWJlcnMgU2VydmljZTwvZGVzY3JpcHRpb24+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBTdWJ0cmFjdE51bWJlcnMgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPlN1YnRyYWN0TnVtYmVyc1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LlN1YnRyYWN0TnVtYmVyc0ltcGw8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBTdWJ0cmFjdE51bWJlcnMgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPlN1YnRyYWN0TnVtYmVyc1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LlN1YnRyYWN0TnVtYmVyc0ltcGw8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvU3VidHJhY3ROdW1iZXJzU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtY2xpZW50ZGRzL3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1jbGllbnRkZHMvd2ViY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDIxMDg3ZDIuLjhmYWQwZDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1jbGllbnRkZHMvd2ViY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1jbGllbnRkZHMvd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCwxMSArMjgsMTEgQEAKIAogICAgICAgICAvL0BqYWthcnRhLnhtbC53cy5XZWJTZXJ2aWNlUmVmKFN1YnRyYWN0TnVtYmVyc1NlcnZpY2UuY2xhc3MpCiAgICAgICAgLy9AQWRkcmVzc2luZyAocmVxdWlyZWQgPSB0cnVlLGVuYWJsZWQ9dHJ1ZSAscmVzcG9uc2VzPUFkZHJlc3NpbmdGZWF0dXJlLlJlc3BvbnNlcy5OT05fQU5PTllNT1VTKQotICAgICAgICAvL0BBZGRyZXNzaW5nIAorICAgICAgICAvL0BBZGRyZXNzaW5nCiAgICAgICAgIFN1YnRyYWN0TnVtYmVyc1BvcnRUeXBlIHBvcnQ7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtcmVzcGVjdGJpbmRpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1yZXNwZWN0YmluZGluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDlmMGViNTEuLjU1ZGNmMGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1yZXNwZWN0YmluZGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1yZXNwZWN0YmluZGluZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYnNlcnZpY2VzMTMtcmVzcGVjdGJpbmRpbmciLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLXJlc3BlY3RiaW5kaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1yZXNwZWN0YmluZGluZy9idWlsZC54bWwKaW5kZXggYTg2YTIzNy4uMTI5MjJlOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLXJlc3BlY3RiaW5kaW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtcmVzcGVjdGJpbmRpbmcvYnVpbGQueG1sCkBAIC04Niw3ICs4Niw3IEBACiAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIgogICAgICAgICAgICAgaW5jbHVkZXM9IndlYmNsaWVudC8qKiI+CiAgICAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJjbGFzc3BhdGgiLz4KLSAKKwogICAgICAgPC9qYXZhYz4KICAgICAgIDxjb3B5IGZpbGU9ImNsaWVudC13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3dlYi54bWwiLz4KICAgICAgIDxjb3B5IGZpbGU9ImNsaWVudC1zdW4td2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9zdW4td2ViLnhtbCIvPgpAQCAtMTI3LDExICsxMjcsMTEgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LlRlc3RDbGllbnQiPgpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgICAgIDxhcmcgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L3dzY2xpZW50L1JlcXVlc3RQcm9jZXNzb3IiLz4KICAgICAgIDwvamF2YT4KIAotPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4gCis8IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLmhvc3R9IiB2YWx1ZT0iSFRUUF9IT1NUIi8+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAucG9ydH0iIHZhbHVlPSJIVFRQX1BPUlQiLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1yZXNwZWN0YmluZGluZy9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1yZXNwZWN0YmluZGluZy9jbGllbnQtd2ViLnhtbAppbmRleCAwMjdkZmNlLi5iNGJiZjViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtcmVzcGVjdGJpbmRpbmcvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLXJlc3BlY3RiaW5kaW5nL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1yZXNwZWN0YmluZGluZy9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLXJlc3BlY3RiaW5kaW5nL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggOTg3NTUxZC4uNzdlMmNhYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLXJlc3BlY3RiaW5kaW5nL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLXJlc3BlY3RiaW5kaW5nL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTYzLDkgKzYzLDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIFNVQlRSQUNUIFNFUlZJQ0UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiWzU1NTVdIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLXJlc3BlY3RiaW5kaW5nL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1yZXNwZWN0YmluZGluZy9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKaW5kZXggNGQ2MzM5Mi4uYWQ5Zjc5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLXJlc3BlY3RiaW5kaW5nL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtcmVzcGVjdGJpbmRpbmcvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIEBqYWthcnRhLmp3cy5XZWJTZXJ2aWNlCiBwdWJsaWMgY2xhc3MgU3VidHJhY3ROdW1iZXJzSW1wbCAgewotICAgIAorCiAgICAgcHVibGljIGludCBzdWJ0cmFjdE51bWJlcnMgKGludCBudW1iZXIxLCBpbnQgbnVtYmVyMikgewogICAgICAgICByZXR1cm4gbnVtYmVyMSAtIG51bWJlcjI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLXJlc3BlY3RiaW5kaW5nL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtcmVzcGVjdGJpbmRpbmcvd2ViLnhtbAppbmRleCA0MzQyNDM0Li40YTFiMjgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtcmVzcGVjdGJpbmRpbmcvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtcmVzcGVjdGJpbmRpbmcvd2ViLnhtbApAQCAtMTgsMjkgKzE4LDI5IEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5TdWJ0cmFjdE51bWJlcnMgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRlc2NyaXB0aW9uPlN1YnRyYWN0TnVtYmVycyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIFN1YnRyYWN0TnVtYmVycyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+U3VidHJhY3ROdW1iZXJzV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuU3VidHJhY3ROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIFN1YnRyYWN0TnVtYmVycyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+U3VidHJhY3ROdW1iZXJzV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuU3VidHJhY3ROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL1N1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1yZXNwZWN0YmluZGluZy93ZWJjbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtcmVzcGVjdGJpbmRpbmcvd2ViY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDJjNzVmMzMuLjI0MjExNDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1yZXNwZWN0YmluZGluZy93ZWJjbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLXJlc3BlY3RiaW5kaW5nL3dlYmNsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsMTEgKzI4LDExIEBACiAKICAgICAgICAgQGpha2FydGEueG1sLndzLldlYlNlcnZpY2VSZWYoU3VidHJhY3ROdW1iZXJzU2VydmljZS5jbGFzcykKICAgICAgICAvL0BBZGRyZXNzaW5nIChyZXF1aXJlZCA9IHRydWUsZW5hYmxlZD10cnVlICxyZXNwb25zZXM9QWRkcmVzc2luZ0ZlYXR1cmUuUmVzcG9uc2VzLk5PTl9BTk9OWU1PVVMpCi0gICAgICAgIC8vQEFkZHJlc3NpbmcgCisgICAgICAgIC8vQEFkZHJlc3NpbmcKICAgICAgICAgU3VidHJhY3ROdW1iZXJzSW1wbCBwb3J0OwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2N0eHQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NjdHh0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggY2VmNDhmOC4uNzNkZjY1NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2N0eHQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzY3R4dC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndzY3R4Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NjdHh0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NjdHh0L2J1aWxkLnhtbAppbmRleCA0ZTcwNjY4Li45N2M4MTk4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzY3R4dC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2N0eHQvYnVpbGQueG1sCkBAIC01NiwxMiArNTYsMTIgQEAKICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAgCisKIAogICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUtY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIi8+CkBAIC03OCw3ICs3OCw3IEBACiAgICAgICA8Y29weSBmaWxlPSJjbGllbnQtc3VuLXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvc3VuLXdlYi54bWwiLz4KICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS93c2NsaWVudC53YXIiIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudCIgaW5jbHVkZXM9IioqIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8cHJvcGVydHkgbmFtZT0iY2xpZW50LndhciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS93c2NsaWVudC53YXIiLz4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke3dzZGwud2FyfSBmcm9tICR7YmFzZWRpcn0uIiBsZXZlbD0idmVyYm9zZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2N0eHQvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzY3R4dC9jbGllbnQtd2ViLnhtbAppbmRleCAwMjdkZmNlLi5iNGJiZjViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzY3R4dC9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzY3R4dC9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzY3R4dC9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2N0eHQvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCA1NTcxMTBmLi4wODNkYzY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzY3R4dC9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NjdHh0L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTYzLDkgKzYzLDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIEhFTExPIFNFUlZJQ0UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiW0hlbGxvIEFsbEhlbGxvV0FSXSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NjdHh0L2VuZHBvaW50L0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzY3R4dC9lbmRwb2ludC9IZWxsby5qYXZhCmluZGV4IDRhZjZiNDMuLmIyZGQ3MWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NjdHh0L2VuZHBvaW50L0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2N0eHQvZW5kcG9pbnQvSGVsbG8uamF2YQpAQCAtMjYsMjAgKzI2LDIwIEBACiAKIEBXZWJTZXJ2aWNlCiBwdWJsaWMgY2xhc3MgSGVsbG8gewotCQorCiAgICAgQFJlc291cmNlIFdlYlNlcnZpY2VDb250ZXh0IHdzYzsKIAogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHBhcmFtKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJ3c2N0eHQtc2VydmxldCB3c2MgPSAiICsgd3NjKTsKLQlpZih3c2MgIT0gbnVsbCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigid3NjdHh0LXNlcnZsZXQgd3NjID0gIiArIHdzYyk7CisgICAgaWYod3NjICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgU2VydmxldENvbnRleHQgc2MgPQogKFNlcnZsZXRDb250ZXh0KXdzYy5nZXRNZXNzYWdlQ29udGV4dCgpLmdldChNZXNzYWdlQ29udGV4dC5TRVJWTEVUX0NPTlRFWFQpOwogICAgICAgICAgICAgICAgIFN0cmluZyBhID0gbnVsbDsKICAgICAgICAgICAgICAgICBpZiAoc2MhPSBudWxsICkgewogICAgICAgICAgICAgICAgICBhID0gc2MuZ2V0U2VydmxldENvbnRleHROYW1lKCk7CiAgICAgICAgICAgICAgICAgfQotCQlyZXR1cm4gIkhlbGxvICIgKyBwYXJhbSArYTsKKyAgICAgICAgcmV0dXJuICJIZWxsbyAiICsgcGFyYW0gK2E7CiAgICAgICAgIH0KLQlyZXR1cm4gIldlYlNlcnZpY2UgQ29udGV4dCBpbmplY3Rpb24gZmFpbGVkIjsKKyAgICByZXR1cm4gIldlYlNlcnZpY2UgQ29udGV4dCBpbmplY3Rpb24gZmFpbGVkIjsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzY3R4dC93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2N0eHQvd2ViLnhtbAppbmRleCBmNTFjY2MwLi41NjRjZDRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzY3R4dC93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NjdHh0L3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsbzwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsbzwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L0hlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L0hlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2N0eHQvd2ViY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2N0eHQvd2ViY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDQwZmMyODUuLjk1Y2I3M2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NjdHh0L3dlYmNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzY3R4dC93ZWJjbGllbnQvQ2xpZW50LmphdmEKQEAgLTI5LDggKzI5LDggQEAKICAgICAgICAgQGpha2FydGEueG1sLndzLldlYlNlcnZpY2VSZWYoSGVsbG9TZXJ2aWNlLmNsYXNzKQogICAgICAgICBIZWxsbyBwb3J0OwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2RsdG9qYXZhL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzZGx0b2phdmEvYnVpbGQucHJvcGVydGllcwppbmRleCA1NWRlOTNhLi5lZmJkN2FjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzZGx0b2phdmEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzZGx0b2phdmEvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOSArMTUsOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id3NkbHRvamF2YSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzZGx0b2phdmEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2RsdG9qYXZhL2J1aWxkLnhtbAppbmRleCBlNTQ5OWY1Li43YzQxNjA0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzZGx0b2phdmEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NkbHRvamF2YS9idWlsZC54bWwKQEAgLTcxLDggKzcxLDggQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2ltcG9ydC5hcmdzIgogICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC13c2RsbG9jYXRpb24gJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NkbHRvamF2YS9IdHRwVGVzdFNlcnZpY2Uud3NkbCAtYiBjdXN0b21jbGllbnQueG1sIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCBIdHRwVGVzdFNlcnZpY2Uud3NkbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiIAorICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTg1LDE0ICs4NSwxNCBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tY2xpZW50Ij4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudC1jbGFzcyIgdmFsdWU9ImNsaWVudC5DbGllbnQiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Im90aGVyLWFyZ3MiIHZhbHVlPSJiYXNpYy13c2RsLXRvLWphdmEtdGVzdC1jYXNlIi8+CiAgICAgICA8L2FudGNhbGw+CiAKLSAgICAgIDwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+IAorICAgICAgPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4KICAgICAgIDxyZXBsYWNlIGZpbGU9Ikh0dHBUZXN0U2VydmljZS53c2RsIiB0b2tlbj0iJHtodHRwLmhvc3R9IiB2YWx1ZT0iSFRUUF9IT1NUIi8+CiAgICAgICA8cmVwbGFjZSBmaWxlPSJIdHRwVGVzdFNlcnZpY2Uud3NkbCIgdG9rZW49IiR7aHR0cC5wb3J0fSIgdmFsdWU9IkhUVFBfUE9SVCIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2RsdG9qYXZhL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NkbHRvamF2YS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZTU0NGRlNS4uNDcyMDBkMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2RsdG9qYXZhL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzZGx0b2phdmEvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yMiwzMyArMjIsMzMgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLQlwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgICAgICBAV2ViU2VydmljZVJlZiBzdGF0aWMgSHR0cFRlc3RTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtYW5ub3RhdGlvbiIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1hbm5vdGF0aW9uIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgSGVsbG8gcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9Qb3J0KCk7Ci0JCUhlbGxvUmVxdWVzdCByZXEgPSBuZXcgSGVsbG9SZXF1ZXN0KCk7Ci0JCXJlcS5zZXRTdHJpbmcoIkZyb20gVmlqYXkgIik7Ci0JCUhlbGxvUmVzcG9uc2UgcmVzcCA9IHBvcnQuaGVsbG8ocmVxKTsKLQkJaWYocmVzcC5nZXRTdHJpbmcoKS5pbmRleE9mKCJGcm9tIFZpamF5IikgPT0gLTEpIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmVzcC5nZXRTdHJpbmcoKSk7Ci0JCSAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwotCQl9Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihyZXNwLmdldFN0cmluZygpKTsKLQkJc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5QQVNTKTsKKyAgICAgICAgSGVsbG9SZXF1ZXN0IHJlcSA9IG5ldyBIZWxsb1JlcXVlc3QoKTsKKyAgICAgICAgcmVxLnNldFN0cmluZygiRnJvbSBWaWpheSAiKTsKKyAgICAgICAgSGVsbG9SZXNwb25zZSByZXNwID0gcG9ydC5oZWxsbyhyZXEpOworICAgICAgICBpZihyZXNwLmdldFN0cmluZygpLmluZGV4T2YoIkZyb20gVmlqYXkiKSA9PSAtMSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXNwLmdldFN0cmluZygpKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CisgICAgICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJlc3AuZ2V0U3RyaW5nKCkpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCSAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KICAgICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzZGx0b2phdmEvY3VzdG9tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NkbHRvamF2YS9jdXN0b21jbGllbnQueG1sCmluZGV4IDdjMzM3MmYuLjk5ZGY2MzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NkbHRvamF2YS9jdXN0b21jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NkbHRvamF2YS9jdXN0b21jbGllbnQueG1sCkBAIC0yMyw5ICsyMyw5IEBACiAgICAgICAgIDxwYWNrYWdlIG5hbWU9ImNsaWVudCIvPgogICAgIDwvYmluZGluZ3M+CiAKLSAgICA8YmluZGluZ3Mgbm9kZT0ibnMxOmRlZmluaXRpb25zL25zMTp0eXBlcy94czpzY2hlbWFbQHRhcmdldE5hbWVzcGFjZT0naHR0cDovL2h0dHB0ZXN0c2VydmljZS5vcmcvdHlwZXMnXSIgCi0JeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLQl4bWxuczpuczE9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KKyAgICA8YmluZGluZ3Mgbm9kZT0ibnMxOmRlZmluaXRpb25zL25zMTp0eXBlcy94czpzY2hlbWFbQHRhcmdldE5hbWVzcGFjZT0naHR0cDovL2h0dHB0ZXN0c2VydmljZS5vcmcvdHlwZXMnXSIKKyAgICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCisgICAgeG1sbnM6bnMxPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+CiAgICAgICAgIDxuczI6c2NoZW1hQmluZGluZ3MgeG1sbnM6bnMyPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXhiIj4KICAgICAgICAgICAgIDxuczI6cGFja2FnZSBuYW1lPSJjbGllbnQiLz4KICAgICAgICAgPC9uczI6c2NoZW1hQmluZGluZ3M+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzZGx0b2phdmEvY3VzdG9tc2VydmljZS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzZGx0b2phdmEvY3VzdG9tc2VydmljZS54bWwKaW5kZXggMjQyNjExYi4uNThjNTVlMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2RsdG9qYXZhL2N1c3RvbXNlcnZpY2UueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NkbHRvamF2YS9jdXN0b21zZXJ2aWNlLnhtbApAQCAtMjMsOSArMjMsOSBAQAogICAgICAgICA8cGFja2FnZSBuYW1lPSJzZXJ2aWNlIi8+CiAgICAgPC9iaW5kaW5ncz4KIAotICAgIDxiaW5kaW5ncyBub2RlPSJuczE6ZGVmaW5pdGlvbnMvbnMxOnR5cGVzL3hzOnNjaGVtYVtAdGFyZ2V0TmFtZXNwYWNlPSdodHRwOi8vaHR0cHRlc3RzZXJ2aWNlLm9yZy90eXBlcyddIiAKLQl4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotCXhtbG5zOm5zMT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgorICAgIDxiaW5kaW5ncyBub2RlPSJuczE6ZGVmaW5pdGlvbnMvbnMxOnR5cGVzL3hzOnNjaGVtYVtAdGFyZ2V0TmFtZXNwYWNlPSdodHRwOi8vaHR0cHRlc3RzZXJ2aWNlLm9yZy90eXBlcyddIgorICAgIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKKyAgICB4bWxuczpuczE9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KICAgICAgICAgPG5zMjpzY2hlbWFCaW5kaW5ncyB4bWxuczpuczI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIiPgogICAgICAgICAgICAgPG5zMjpwYWNrYWdlIG5hbWU9InNlcnZpY2UiLz4KICAgICAgICAgPC9uczI6c2NoZW1hQmluZGluZ3M+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzZGx0b2phdmEvc2VydmljZS9IZWxsb0ltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NkbHRvamF2YS9zZXJ2aWNlL0hlbGxvSW1wbC5qYXZhCmluZGV4IGE5M2Q4ZDEuLjY1NGNlNzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NkbHRvamF2YS9zZXJ2aWNlL0hlbGxvSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NkbHRvamF2YS9zZXJ2aWNlL0hlbGxvSW1wbC5qYXZhCkBAIC0zOCw4ICszOCw4IEBACiAKICAgICBwdWJsaWMgSGVsbG9SZXNwb25zZSBoZWxsbyhIZWxsb1JlcXVlc3QgcmVxKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8sICIgKyByZXEuZ2V0U3RyaW5nKCkgKyAiISIpOwotCUhlbGxvUmVzcG9uc2UgcmVzcCA9IG5ldyBIZWxsb1Jlc3BvbnNlKCk7Ci0JcmVzcC5zZXRTdHJpbmcoIkhlbGxvLCAiICsgcmVxLmdldFN0cmluZygpICsgIiEiKTsKKyAgICBIZWxsb1Jlc3BvbnNlIHJlc3AgPSBuZXcgSGVsbG9SZXNwb25zZSgpOworICAgIHJlc3Auc2V0U3RyaW5nKCJIZWxsbywgIiArIHJlcS5nZXRTdHJpbmcoKSArICIhIik7CiAgICAgICAgIHJldHVybiByZXNwOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2RsdG9qYXZhL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzZGx0b2phdmEvd2ViLnhtbAppbmRleCA2NDA0MzNhLi45NTY2NWY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzZGx0b2phdmEvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzZGx0b2phdmEvd2ViLnhtbApAQCAtMTgsNyArMTgsNyBAQAogLS0+CiAKIDx3ZWItYXBwIHZlcnNpb249IjIuNSIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCiAgIDxkaXNwbGF5LW5hbWU+V1NXMkpSTEh0dHBUZXN0QXBwPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fub255bW91cy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fub255bW91cy9idWlsZC54bWwKaW5kZXggMjUyOWJjMS4uMGE1MDY3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm9ueW1vdXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5vbnltb3VzL2J1aWxkLnhtbApAQCAtMzksMTAgKzM5LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgZG9jbGl0IAotCQkJYW50IGFsbAotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgZG9jbGl0CisgICAgICAgICAgICBhbnQgYWxsCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm9ueW1vdXMvZG9jbGl0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fub255bW91cy9kb2NsaXQvYnVpbGQucHJvcGVydGllcwppbmRleCAzMTAyOWZmLi5kYzNmNjMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fub255bW91cy9kb2NsaXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fub255bW91cy9kb2NsaXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjIgKzE1LDIyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJkb2NsaXQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2Vic2VydmljZXMueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWJzZXJ2aWNlcy54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm9ueW1vdXMvZG9jbGl0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5vbnltb3VzL2RvY2xpdC9idWlsZC54bWwKaW5kZXggNjQ4ZWM1My4uOTVkOTQxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm9ueW1vdXMvZG9jbGl0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fub255bW91cy9kb2NsaXQvYnVpbGQueG1sCkBAIC0zMyw5ICszMyw5IEBACiAKIAogICA8dGFyZ2V0IG5hbWU9InJ1bi53c2NvbXBpbGUiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KLSAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPiAgICAgICAgCi0JPC9leGVjPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KKyAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPgorICAgIDwvZXhlYz4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNsZWFuIj4KQEAgLTYxLDcgKzYxLDcgQEAKIAogICA8dGFyZ2V0IG5hbWU9Imdlbi1wb3J0YWJsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItaW1wb3J0IC1jcCAuIC1tYXBwaW5nIG1hcHBpbmcueG1sICR7ZmVhdHVyZXN9IGNvbmZpZy54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgpAQCAtNzAsNyArNzAsNyBAQAogICA8IS0tIE5PIGZlYXR1cmUgZmxhZ3MgYXMgbWFwcGluZyBmaWxlIHNob3VsZCBjb250YWluIGVub3VnaCBpbmZvIC0tPgogICA8dGFyZ2V0IG5hbWU9Imdlbi1ub24tcG9ydGFibGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICB2YWx1ZT0iLWdlbjpib3RoIC1jcCAuIC1mOndzaSBtYXBwaW5nLmNvbmZpZy54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm9ueW1vdXMvcnBjbGl0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fub255bW91cy9ycGNsaXQvYnVpbGQucHJvcGVydGllcwppbmRleCBiMzc1ZjUwLi44YzMzOWUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fub255bW91cy9ycGNsaXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fub255bW91cy9ycGNsaXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjIgKzE1LDIyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJycGNsaXQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2Vic2VydmljZXMueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWJzZXJ2aWNlcy54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm9ueW1vdXMvcnBjbGl0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5vbnltb3VzL3JwY2xpdC9idWlsZC54bWwKaW5kZXggYzc0MjYwYS4uZTM2YmFlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm9ueW1vdXMvcnBjbGl0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fub255bW91cy9ycGNsaXQvYnVpbGQueG1sCkBAIC0zMyw5ICszMyw5IEBACiAKIAogICA8dGFyZ2V0IG5hbWU9InJ1bi53c2NvbXBpbGUiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KLSAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPiAgICAgICAgCi0JPC9leGVjPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KKyAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPgorICAgIDwvZXhlYz4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNsZWFuIj4KQEAgLTYxLDcgKzYxLDcgQEAKIAogICA8dGFyZ2V0IG5hbWU9Imdlbi1wb3J0YWJsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItaW1wb3J0IC1jcCAuIC1tYXBwaW5nIG1hcHBpbmcueG1sICR7ZmVhdHVyZXN9IGNvbmZpZy54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgpAQCAtNzAsNyArNzAsNyBAQAogICA8IS0tIE5PIGZlYXR1cmUgZmxhZ3MgYXMgbWFwcGluZyBmaWxlIHNob3VsZCBjb250YWluIGVub3VnaCBpbmZvIC0tPgogICA8dGFyZ2V0IG5hbWU9Imdlbi1ub24tcG9ydGFibGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICB2YWx1ZT0iLWdlbjpib3RoIC1jcCAuIC1mOndzaSBtYXBwaW5nLmNvbmZpZy54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2J1aWxkLnhtbAppbmRleCBjNjBkYzRmLi42ZTVmYWFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2J1aWxkLnhtbApAQCAtMzksMTYgKzM5LDE2IEBACiAgICAgICAgIDxhbnQgZGlyPSJqYXhycGMtaGVsbG8tZWpiIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZSIvPgogICAgICAgICA8YW50IGRpcj0iamF4cnBjLWhlbGxvLXdlYiIgdGFyZ2V0PSJhbGwiLz4KLTwhLS0JPGFudCBkaXI9Imdvb2dsZXNlcnZlciIgdGFyZ2V0PSJhbGwiLz4tLT4gPCEtLSAzIHRlc3RzIC0tPgorPCEtLSAgICA8YW50IGRpcj0iZ29vZ2xlc2VydmVyIiB0YXJnZXQ9ImFsbCIvPi0tPiA8IS0tIDMgdGVzdHMgLS0+CiAgICAgICAgIDxhbnQgZGlyPSJ4c2RhbnkiIHRhcmdldD0iYWxsIi8+IDwhLS0gMSB0ZXN0IC0tPgogICAgICAgICA8YW50IGRpcj0iZmlsdGVyX3VybGhhbmRsaW5nIiB0YXJnZXQ9ImFsbCIvPiA8IS0tIDEgdGVzdCAtLT4KICAgICA8IS0tICAgIDxhbnQgZGlyPSJzZWN1cml0eSIgdGFyZ2V0PSJhbGwiLz4tLT4gICAgICAgICA8IS0tIDkgdGVzdCAtLT4KLTwhLS0JPGFudCBkaXI9InNpbXBsZWZhdWx0IiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJoYW5kbGVyIiB0YXJnZXQ9ImFsbCIvPiAKLSAgICAgICAgPGFudCBkaXI9IndlYnN0dWJfcHJvcGVydGllcyIgdGFyZ2V0PSJhbGwiLz4gCi0JPGFudCBkaXI9InNlcnZsZXRoYW5kbGVyIiB0YXJnZXQ9ImFsbCIvPi0tPiAKLQk8YW50IGRpcj0iYW5ub3RhdGlvbnMiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImVqYl9hbm5vdGF0aW9ucyIgdGFyZ2V0PSJhbGwiLz4KKzwhLS0gICAgPGFudCBkaXI9InNpbXBsZWZhdWx0IiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJoYW5kbGVyIiB0YXJnZXQ9ImFsbCIvPgorICAgICAgICA8YW50IGRpcj0id2Vic3R1Yl9wcm9wZXJ0aWVzIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJzZXJ2bGV0aGFuZGxlciIgdGFyZ2V0PSJhbGwiLz4tLT4KKyAgICA8YW50IGRpcj0iYW5ub3RhdGlvbnMiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImVqYl9hbm5vdGF0aW9ucyIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9Im1hcHBpbmcvajJ3L3NpZ25hdHVyZSIgdGFyZ2V0PSJhbGwiLz4gPCEtLSAyIHRlc3RzIC0tPgogICAgICAgICA8YW50IGRpcj0iZ29vZ2xlIiB0YXJnZXQ9ImFsbCIvPiA8IS0tIDEgdGVzdCAtLT4KICAgICAgICAgPGFudCBkaXI9ImdmX2RkL2VuZHBvaW50X2FkZHJlc3NfdXJpIiB0YXJnZXQ9ImFsbCIvPiA8IS0tIDEgdGVzdCAtLT4KQEAgLTg3LDI0ICs4NywyNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0iIAorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Jhc2VkaXJ9IgogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9IioqLm91dHB1dCwgY291bnQudHh0Ii8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8YW50IGRpcj0iZ29vZ2xlIiB0YXJnZXQ9ImNsZWFuIi8+CiAgICAgICAgIDxhbnQgZGlyPSJ4c2RhbnkiIHRhcmdldD0iY2xlYW4iLz4KICAgICAgICAgPGFudCBkaXI9Im1hcHBpbmcvajJ3L3NpZ25hdHVyZSIgdGFyZ2V0PSJjbGVhbiIvPgogICAgICAgICA8YW50IGRpcj0id2Vic3R1Yl9wcm9wZXJ0aWVzIiB0YXJnZXQ9ImNsZWFuIi8+Ci0gICAgICAgIDxhbnQgZGlyPSJmaWx0ZXJfdXJsaGFuZGxpbmciIHRhcmdldD0iY2xlYW4iLz4gICAgICAgIAorICAgICAgICA8YW50IGRpcj0iZmlsdGVyX3VybGhhbmRsaW5nIiB0YXJnZXQ9ImNsZWFuIi8+CiAgICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSB3ZWJzZXJ2aWNlIHRlc3RzKQorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgd2Vic2VydmljZSB0ZXN0cykKIAotCQkJYW50IGdvb2dsZSAoRXhlY3V0ZXMgdGhlIGdvb2dsZSB0ZXN0cykKLQkJCWFudCB4c2RhbnkgKEV4ZWN1dGVzIHRoZSB4c2RhbnkgdGVzdHMpCi0JPC9lY2hvPgorICAgICAgICAgICAgYW50IGdvb2dsZSAoRXhlY3V0ZXMgdGhlIGdvb2dsZSB0ZXN0cykKKyAgICAgICAgICAgIGFudCB4c2RhbnkgKEV4ZWN1dGVzIHRoZSB4c2RhbnkgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2NvbW1vbi90YXJnZXRzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvY29tbW9uL3RhcmdldHMueG1sCmluZGV4IGU3ZjIxMWUuLmQ2ZGVhNTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvY29tbW9uL3RhcmdldHMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvY29tbW9uL3RhcmdldHMueG1sCkBAIC04NCwxNCArODQsMTQgQEAKICAgPC90YXJnZXQ+CiAKIAotIAogCiAKLSAgCisKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiA+CiAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZH0iIC8+CiAgICAgICA8ZGVsZXRlIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkIiAvPgotICAgICAgPGRlbGV0ZSBkaXI9IiR7ZGlzdH0iIC8+ICAgIAorICAgICAgPGRlbGV0ZSBkaXI9IiR7ZGlzdH0iIC8+CiAgICAgICA8ZGVsZXRlIGRpcj0iJHthc3NlbWJsZX0iIC8+CiAgICAgICA8ZGVsZXRlIGRpcj0iJHthc3NlbWJsZS5kaXJ9IiAvPgogICAgICAgPGRlbGV0ZSBmaWxlPSIke2Vhci5uYW1lfSIgLz4KQEAgLTE5MSw3ICsxOTEsNyBAQAogICAgICAgICAgIG9uZXJyb3I9ImFib3J0IiA+CiAgICAgICAgICAgPHRyYW5zYWN0aW9uIHNyYz0iJHtzcWwuc2NyaXB0fSIvPgogICAgICAgPC9zcWw+Ci0gIDwvdGFyZ2V0PiAgCisgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLWRiIgogICAgICAgZGVzY3JpcHRpb249IkRlbGV0ZXMgdGhlIGRhdGFiYXNlIHRhYmxlcy4iID4KQEAgLTIyMSwzOSArMjIxLDM5IEBACiAgICAgICAgICAgPGVxdWFscyBhcmcxPSIke2RiLnBpbmcucmVzdWx0fSIgYXJnMj0iMCIgLz4KICAgICAgIDwvY29uZGl0aW9uPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJzdGFydC1kYiIKICAgICAgIHVubGVzcz0iZGIucnVubmluZyIKICAgICAgIGRlc2NyaXB0aW9uPSJTdGFydHMgdGhlIERlcmJ5IGRhdGFic2Ugc2VydmVyLiIKICAgICAgIGRlcGVuZHM9InBpbmctZGIiPgotICAJCQkJCisKICAgICAgIDxzdW4tYXBwc2Vydi1hZG1pbgogICAgICAgZXhwbGljaXRjb21tYW5kPSJzdGFydC1kYXRhYmFzZSIgLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0ic3RvcC1kYiIKICAgICAgIGRlc2NyaXB0aW9uPSJTdG9wcyB0aGUgRGVyYnkgZGF0YWJhc2Ugc2VydmVyLiIKICAgICAgIGRlcGVuZHM9InBpbmctZGIiCiAgICAgICBpZj0iZGIucnVubmluZyI+CiAgICAgICA8c3VuLWFwcHNlcnYtYWRtaW4KICAgICAgIGV4cGxpY2l0Y29tbWFuZD0ic3RvcC1kYXRhYmFzZSIgLz4KLSAgPC90YXJnZXQ+ICAKLSAgCisgIDwvdGFyZ2V0PgorCiAgIDx0YXJnZXQgbmFtZT0iYWRtaW5fY29tbWFuZF9jb21tb24iPgogICAgICAgPGVjaG8gbWVzc2FnZT0iRG9pbmcgYWRtaW4gdGFzayAke2FkbWluLmNvbW1hbmR9Ii8+Ci0gICAgICA8c3VuLWFwcHNlcnYtYWRtaW4gCisgICAgICA8c3VuLWFwcHNlcnYtYWRtaW4KICAgICAgIGNvbW1hbmQ9IiR7YWRtaW4uY29tbWFuZH0iCi0gICAgICB1c2VyPSIke2FkbWluLnVzZXJ9IiAKLSAgICAgIHBhc3N3b3JkZmlsZT0iJHthZG1pbi5wYXNzd29yZC5maWxlfSIgCi0gICAgICBob3N0PSIke2FkbWluLmhvc3R9IiAKLSAgICAgIHBvcnQ9IiR7YWRtaW4ucG9ydH0iIAorICAgICAgdXNlcj0iJHthZG1pbi51c2VyfSIKKyAgICAgIHBhc3N3b3JkZmlsZT0iJHthZG1pbi5wYXNzd29yZC5maWxlfSIKKyAgICAgIGhvc3Q9IiR7YWRtaW4uaG9zdH0iCisgICAgICBwb3J0PSIke2FkbWluLnBvcnR9IgogICAgICAgYXNpbnN0YWxsZGlyPSIke2oyZWUuaG9tZX0iIC8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLXJlc291cmNlX2NvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFkbWluX2NvbW1hbmRfY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIKLSAgICAgICAgICB2YWx1ZT0iY3JlYXRlLWpkYmMtcmVzb3VyY2UgCisgICAgICAgICAgdmFsdWU9ImNyZWF0ZS1qZGJjLXJlc291cmNlCiAgICAgICAgICAgLS1jb25uZWN0aW9ucG9vbGlkICR7Y29ucG9vbC5uYW1lfSAke2pkYmMucmVzb3VyY2UubmFtZX0iIC8+CiAgICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9kb2NsaXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZG9jbGl0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTg2ZjAwNS4uZTlmZjExMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9kb2NsaXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2RvY2xpdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImRvY2xpdCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2RvY2xpdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2RvY2xpdC9idWlsZC54bWwKaW5kZXggN2IzMWVkZi4uNmM0NWEwNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9kb2NsaXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZG9jbGl0L2J1aWxkLnhtbApAQCAtMzMsOSArMzMsOSBAQAogCiAKICAgPHRhcmdldCBuYW1lPSJydW4ud3Njb21waWxlIj4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+Ci0gICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4gICAgICAgIAotCTwvZXhlYz4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+CisgICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4KKyAgICA8L2V4ZWM+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iIj4KQEAgLTUyLDE2ICs1MiwxNiBAQAogICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgYnVpbGQsIGNvbXBpbGUiPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIgogICAgICAgZmlsZT0iU2ltcGxlVGVzdC53c2RsIi8+Ci0gICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKLQkgZmlsZT0iRG9jTGl0TWFwcGluZy54bWwiLz4KKyAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCisgICAgIGZpbGU9IkRvY0xpdE1hcHBpbmcueG1sIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgIHZhbHVlPSJEb2NMaXRNYXBwaW5nLnhtbCxNRVRBLUlORi93c2RsLyoqLGRvY2xpdC8qLmNsYXNzIiAvPgogCiAgICAgPC9hbnRjYWxsPgotICA8L3RhcmdldD4gCisgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC03NSwxOSArNzUsMTkgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgCisgICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJ3c2NvbXBpbGUtZWpiIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPG1rZGlyIGRpcj0ib3V0cHV0Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1pbXBvcnQgLWtlZXAgLWQgb3V0cHV0IC1zIG91dHB1dCAtY2xhc3NwYXRoIC4gd3Njb21waWxlX2NvbmZpZy54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2RvY2xpdCI+Ci0gICAgICAgPGZpbGVzZXQgZGlyPSJvdXRwdXQvZG9jbGl0IiAKKyAgICAgICA8ZmlsZXNldCBkaXI9Im91dHB1dC9kb2NsaXQiCiAgICAgICAgICAgICAgICAgaW5jbHVkZXM9IlNpbXBsZVRlc3QuY2xhc3MiLz4KICAgICA8L2NvcHk+CiAgICAgPGRlbGV0ZSBkaXI9Im91dHB1dCIvPgpAQCAtOTgsMjMgKzk4LDIzIEBACiAgICAgPG1rZGlyIGRpcj0ib3V0cHV0Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KICAgICAgIDwhLS0gdXNlIG1vZGVsIC0tPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKLSAgICAgICB2YWx1ZT0iLWdlbiAtY3AgLiAta2VlcCAtZCBvdXRwdXQgLVhkZWJ1Z21vZGVsOmFueVJwY01vZGVsLnR4dCAtbW9kZWwgRG9jTGl0TWFwcGluZy54bWwgd3Njb21waWxlX2NvbmZpZy54bWwiLz4gCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCisgICAgICAgdmFsdWU9Ii1nZW4gLWNwIC4gLWtlZXAgLWQgb3V0cHV0IC1YZGVidWdtb2RlbDphbnlScGNNb2RlbC50eHQgLW1vZGVsIERvY0xpdE1hcHBpbmcueG1sIHdzY29tcGlsZV9jb25maWcueG1sIi8+CiAKICAgICAgIDwhLS0gdXNlIG1hcHBpbmcgLS0+Ci08IS0tIAotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKLSAgICAgICB2YWx1ZT0iLWdlbiAtY3AgLiAta2VlcCAtZCBvdXRwdXQgLVhkZWJ1Z21vZGVsOmFueVJwY01vZGVsLnR4dCAtbWFwcGluZyBScGNMaXRNYXBwaW5nLnhtbCB3c2NvbXBpbGVfY29uZmlnLnhtbCIvPiAKKzwhLS0KKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKKyAgICAgICB2YWx1ZT0iLWdlbiAtY3AgLiAta2VlcCAtZCBvdXRwdXQgLVhkZWJ1Z21vZGVsOmFueVJwY01vZGVsLnR4dCAtbWFwcGluZyBScGNMaXRNYXBwaW5nLnhtbCB3c2NvbXBpbGVfY29uZmlnLnhtbCIvPgogLS0+CiAgICAgPC9hbnRjYWxsPgogICAgIDxkZWxldGUgZGlyPSJvdXRwdXQiLz4KICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyB0aGUgV2ViU2VydmljZXMgdGVzdCkKLQkJCWFudCBjbGVhbiAKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgdGhlIFdlYlNlcnZpY2VzIHRlc3QpCisgICAgICAgICAgICBhbnQgY2xlYW4KKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2RvY2xpdC9kb2NsaXQvU2ltcGxlVGVzdEltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZG9jbGl0L2RvY2xpdC9TaW1wbGVUZXN0SW1wbC5qYXZhCmluZGV4IGU2ZTEwMGUuLjM2NTk3YmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZG9jbGl0L2RvY2xpdC9TaW1wbGVUZXN0SW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZG9jbGl0L2RvY2xpdC9TaW1wbGVUZXN0SW1wbC5qYXZhCkBAIC0xNSw3ICsxNSw3IEBACiAgKi8KIAogLyoKLSAqIEAoIylTaW1wbGVUZXN0SW1wbC5qYXZhCTEuMyAwMi8wNC8wNQorICogQCgjKVNpbXBsZVRlc3RJbXBsLmphdmEgICAgMS4zIDAyLzA0LzA1CiAgKi8KIAogcGFja2FnZSBkb2NsaXQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2RvY2xpdC93c2NvbXBpbGVfY29uZmlnLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZG9jbGl0L3dzY29tcGlsZV9jb25maWcueG1sCmluZGV4IGRiMDQ1MWUuLmE3Y2VlMDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZG9jbGl0L3dzY29tcGlsZV9jb25maWcueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZG9jbGl0L3dzY29tcGlsZV9jb25maWcueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249IlNpbXBsZVRlc3Qud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJkb2NsaXQiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2Fubm90YXRpb25zLWNvbW1vbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hbm5vdGF0aW9ucy1jb21tb24ueG1sCmluZGV4IDc0M2E0MTguLjgyZTYxNzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2Fubm90YXRpb25zLWNvbW1vbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYW5ub3RhdGlvbnMtY29tbW9uLnhtbApAQCAtMTcsMTYgKzE3LDE2IEBACiAtLT4KIAogPHByb3BlcnR5IGVudmlyb25tZW50PSJlbnYiLz4KLTxwcm9wZXJ0eSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiLz4gICAKKzxwcm9wZXJ0eSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiLz4KIAogPHRhcmdldCBuYW1lPSJ0ZXN0LWFsbCIgZGVwZW5kcz0iY2xlYW4iPgogICAgIDxiYXNlbmFtZSBmaWxlPSIke3NyYy1uYW1lfSIgcHJvcGVydHk9InNlcnZlciIgc3VmZml4PSIuamF2YSIvPgogICAgIDxkaXJuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0iZGlyZWN0b3J5Ii8+CiAgICAgPGVjaG8gbWVzc2FnZT0iU3RhcnRpbmcgVGVzdCAke2RpcmVjdG9yeX0iLz4KLSAgICA8YmFzZW5hbWUgZmlsZT0iJHtkaXJlY3Rvcnl9IiBwcm9wZXJ0eT0icGtnLW5hbWUiLz4gCisgICAgPGJhc2VuYW1lIGZpbGU9IiR7ZGlyZWN0b3J5fSIgcHJvcGVydHk9InBrZy1uYW1lIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3kiPgotCTxwYXJhbSBuYW1lPSJwa2ctbmFtZSIgdmFsdWU9IiR7cGtnLW5hbWV9Ii8+Ci0gICAgPC9hbnRjYWxsPiAKKyAgICA8cGFyYW0gbmFtZT0icGtnLW5hbWUiIHZhbHVlPSIke3BrZy1uYW1lfSIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJkZXBsb3lfc3VjY2VlZGVkIj4KICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95LyR7c2VydmVyfS5qYXJfZGVwbG95ZWQiLz4KICAgICA8L2NvbmRpdGlvbj4KQEAgLTQyLDExICs0MiwxMSBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgotICAgIDxlY2hvIG1lc3NhZ2U9IkNsZWFuIGZyb20gJHthbnQuZmlsZX0iLz4gCisgICAgPGVjaG8gbWVzc2FnZT0iQ2xlYW4gZnJvbSAke2FudC5maWxlfSIvPgogICAgIDxkZWxldGUgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiLz4KLSAgICA8ZGVsZXRlIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9hcmNoaXZlIi8+ICAgIAotICAgIDxta2RpciBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIvPiAgIAotICAgIDxta2RpciBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvYXJjaGl2ZSIvPiAgIAorICAgIDxkZWxldGUgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2FyY2hpdmUiLz4KKyAgICA8bWtkaXIgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiLz4KKyAgICA8bWtkaXIgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2FyY2hpdmUiLz4KIDwvdGFyZ2V0PgogIDxwYXRoIGlkPSJjbGFzc3BhdGgiPgogCkBAIC02OCwxNCArNjgsMTQgQEAKIAogPHRhcmdldCBuYW1lPSJ0ZXN0LWNvbXBpbGUiPgogICAgIDxlY2hvIG1lc3NhZ2U9IkNvbXBpbGluZyBpbnRvICR7cGtnLW5hbWV9LyR7c2VydmVyfS5jbGFzcyIvPgotICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIgCisgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIgogICAgICAgICBpbmNsdWRlcz0iJHtwa2ctbmFtZX0vKi5qYXZhIj4KICA8Y2xhc3NwYXRoIHJlZmlkPSJjbGFzc3BhdGgiLz4KIDwvamF2YWM+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJjb21waWxlLWNsaWVudCI+Ci0gICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIiAKKyAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiCiAgICAgICAgIGluY2x1ZGVzPSIke2NsaWVudC1zcmMtbmFtZX0iPgogICAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJjbGFzc3BhdGgiLz4KICAgICA8L2phdmFjPgpAQCAtODQsMTUgKzg0LDE1IEBACiA8dGFyZ2V0IG5hbWU9ImJ1aWxkIj4KICAgICA8YmFzZW5hbWUgZmlsZT0iJHtzcmMtbmFtZX0iIHByb3BlcnR5PSJzZXJ2ZXIiIHN1ZmZpeD0iLmphdmEiLz4KICAgICA8ZGlybmFtZSBmaWxlPSIke3NyYy1uYW1lfSIgcHJvcGVydHk9ImRpcmVjdG9yeSIvPgotICAgIDxiYXNlbmFtZSBmaWxlPSIke2RpcmVjdG9yeX0iIHByb3BlcnR5PSJwa2ctbmFtZSIvPiAKKyAgICA8YmFzZW5hbWUgZmlsZT0iJHtkaXJlY3Rvcnl9IiBwcm9wZXJ0eT0icGtnLW5hbWUiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InRlc3QtY29tcGlsZSIvPgogICAgIDxlY2hvIG1lc3NhZ2U9IkJ1aWxkaW5nIHdpdGggcGFja2FnZSAke3BrZy1uYW1lfSIvPgogICAgIDxqYXIgZGVzdGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtzZXJ2ZXJ9LmphciIKICAgICAgICAgYmFzZWRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIgogICAgICAgICBpbmNsdWRlcz0iJHtwa2ctbmFtZX0vKioiPgotCTxtZXRhaW5mIGRpcj0iJHtwa2ctbmFtZX0iCi0JCWluY2x1ZGVzPSIqLnhtbCAqKi8qLndzZGwgKiovKi54c2QiLz4KLSAgICA8L2phcj4gICAgICAgICAgICAKKyAgICA8bWV0YWluZiBkaXI9IiR7cGtnLW5hbWV9IgorICAgICAgICBpbmNsdWRlcz0iKi54bWwgKiovKi53c2RsICoqLyoueHNkIi8+CisgICAgPC9qYXI+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJkZXBsb3kiPgpAQCAtMTA5LDcgKzEwOSw3IEBACiA8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KICAgICA8YmFzZW5hbWUgZmlsZT0iJHtzcmMtbmFtZX0iIHByb3BlcnR5PSJzZXJ2ZXIiIHN1ZmZpeD0iLmphdmEiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImF1dG91bmRlcGxveS1maWxlIj4KLQk8cGFyYW0gbmFtZT0iZmlsZW5hbWUiIHZhbHVlPSIke3NlcnZlcn0uamFyIi8+CisgICAgPHBhcmFtIG5hbWU9ImZpbGVuYW1lIiB2YWx1ZT0iJHtzZXJ2ZXJ9LmphciIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJ1bmRlcGxveV9zdWNjZWVkZWQiPgogICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtzZXJ2ZXJ9Lmphcl91bmRlcGxveWVkIi8+CkBAIC0xMzIsNyArMTMyLDcgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InJlcG9ydCIgZGVwZW5kcz0iaW50ZXJuYWwtcmVwb3J0LXN1Y2Nlc3MsIGludGVybmFsLXJlcG9ydC1mYWlsdXJlIj4KLSAgICA8ZGVsZXRlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtjbGFzcy1uYW1lfV8qIi8+ICAgIAorICAgIDxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke2NsYXNzLW5hbWV9XyoiLz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InJ1biI+CkBAIC0xNDUsNyArMTQ1LDcgQEAKICAgICA8L2NvbmRpdGlvbj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InByZXBhcmUtY2xpZW50Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJpbnRlcm5hbC1ydW4iLz4KLTwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+IAorPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5ob3N0fSIgdmFsdWU9IkhUVFBfSE9TVCIvPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLnBvcnR9IiB2YWx1ZT0iSFRUUF9QT1JUIi8+CiA8L3RhcmdldD4KQEAgLTE1OSw3ICsxNTksNyBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iY29uZmlndXJhYmxlLXdzZGwtaW1wb3J0Ij4KLSAgICA8ZWNobyBtZXNzYWdlPSJ3c2ltcG9ydGluZyAke3Byb3RvY29sfTovLyR7aG9zdC1uYW1lfToke2hvc3QtcG9ydH0vJHtzZXJ2ZXJ9U2VydmljZS8ke3BvcnR9P1dTREw7IHNwZWNpYWwgYXJncyBhcmUgJHt3c2ltcG9ydC1zcGVjaWFsLWFyZ3N9Ii8+ICAKKyAgICA8ZWNobyBtZXNzYWdlPSJ3c2ltcG9ydGluZyAke3Byb3RvY29sfTovLyR7aG9zdC1uYW1lfToke2hvc3QtcG9ydH0vJHtzZXJ2ZXJ9U2VydmljZS8ke3BvcnR9P1dTREw7IHNwZWNpYWwgYXJncyBhcmUgJHt3c2ltcG9ydC1zcGVjaWFsLWFyZ3N9Ii8+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3NpbXBvcnQiPgogICAgICAgICA8YXJnIGxpbmU9Ii1rZWVwIC1kICR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyAke3Byb3RvY29sfTovLyR7aG9zdC1uYW1lfToke2hvc3QtcG9ydH0vJHtzZXJ2ZXJ9U2VydmljZS8ke3BvcnR9P1dTREwiLz4KICAgICA8L2V4ZWM+CkBAIC0xNjksMTMgKzE2OSwxMyBAQAogICAgIDwhLS1iYXNlbmFtZSBmaWxlPSIke3NlcnZlcn0iIHByb3BlcnR5PSJwb3J0IiBzdWZmaXg9IkVKQiIvLS0+CiAgICAgPGJhc2VuYW1lIGZpbGU9IiR7c2VydmVyfSIgcHJvcGVydHk9InBvcnQiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9IndzZGwtaW1wb3J0Ij4KLQk8cGFyYW0gbmFtZT0ic2VydmVyIiB2YWx1ZT0iJHtzZXJ2ZXJ9Ii8+Ci0JPHBhcmFtIG5hbWU9InBvcnQiIHZhbHVlPSIke3BvcnR9Ii8+CisgICAgPHBhcmFtIG5hbWU9InNlcnZlciIgdmFsdWU9IiR7c2VydmVyfSIvPgorICAgIDxwYXJhbSBuYW1lPSJwb3J0IiB2YWx1ZT0iJHtwb3J0fSIvPgogICAgIDwvYW50Y2FsbD4KIAogICAgICAgPHJlcGxhY2UgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIiB2YWx1ZT0iJHtodHRwLmhvc3R9IiB0b2tlbj0iSFRUUF9IT1NUIi8+CiAgICAgICA8cmVwbGFjZSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEiIHZhbHVlPSIke2h0dHAucG9ydH0iIHRva2VuPSJIVFRQX1BPUlQiLz4KLSAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY2xpZW50Ii8+ICAgCisgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNsaWVudCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0idW5qYXItY2xpZW50LXV0aWxzIi8+CiA8L3RhcmdldD4KIApAQCAtMTg2LDExICsxODYsMTEgQEAKIDx0YXJnZXQgbmFtZT0iaW50ZXJuYWwtcnVuIiBpZj0iZGVwbG95X3N1Y2NlZWRlZCI+CiAgICAgPGJhc2VuYW1lIGZpbGU9IiR7Y2xpZW50LXNyYy1uYW1lfSIgcHJvcGVydHk9ImNsaWVudCIgc3VmZml4PSIuamF2YSIvPgogICAgIDxkaXJuYW1lIGZpbGU9IiR7Y2xpZW50LXNyYy1uYW1lfSIgcHJvcGVydHk9ImNsaWVudC1kaXJlY3RvcnkiLz4KLSAgICA8YmFzZW5hbWUgZmlsZT0iJHtjbGllbnQtZGlyZWN0b3J5fSIgcHJvcGVydHk9ImNsaWVudC1wa2ctbmFtZSIvPiAKKyAgICA8YmFzZW5hbWUgZmlsZT0iJHtjbGllbnQtZGlyZWN0b3J5fSIgcHJvcGVydHk9ImNsaWVudC1wa2ctbmFtZSIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGllbnQtY2xhc3MtbmFtZSIgdmFsdWU9IiR7Y2xpZW50LXBrZy1uYW1lfS8ke2NsaWVudH0uY2xhc3MiLz4KICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIGFwcGNsaWVudCB3aXRoICR7Y2xpZW50LXBrZy1uYW1lfS4ke2NsaWVudH0gJHthcHAtY2xpZW50LXBhcmFtZXRlcnN9ICR7YXBwLWNsaWVudC1leHRyYS1wYXJhbWV0ZXJzfSIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2FwcGNsaWVudCIgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiPgotICAgICAgICA8YXJnIGxpbmU9IiR7Y2xpZW50LXBrZy1uYW1lfS4ke2NsaWVudH0gJHthcHAtY2xpZW50LXBhcmFtZXRlcnN9ICR7YXBwLWNsaWVudC1leHRyYS1wYXJhbWV0ZXJzfSIvPiAgICAKKyAgICAgICAgPGFyZyBsaW5lPSIke2NsaWVudC1wa2ctbmFtZX0uJHtjbGllbnR9ICR7YXBwLWNsaWVudC1wYXJhbWV0ZXJzfSAke2FwcC1jbGllbnQtZXh0cmEtcGFyYW1ldGVyc30iLz4KICAgICA8L2V4ZWM+CiA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYXN5bmMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTkwOTYzNi4uYzQ5ZTQwZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYXN5bmMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hc3luYy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw4ICsxNSw4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJhc3luYyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jL2J1aWxkLnhtbAppbmRleCBkM2UzYTI4Li5lMDI2MTNlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hc3luYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYXN5bmMvYnVpbGQueG1sCkBAIC02MCw4ICs2MCw4IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2ltcG9ydC5hcmdzIgogICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC1iIGN1c3RvbS1jbGllbnQueG1sIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCBodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS9BZGROdW1iZXJzSW1wbFNlcnZpY2UvQWRkTnVtYmVyc0ltcGw/V1NETCIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTcyLDEzICs3MiwxMyBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1jbGllbnQiPgogICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50LWNsYXNzIiB2YWx1ZT0iY2xpZW50LkNsaWVudCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ib3RoZXItYXJncyIgdmFsdWU9ImFzeW5jLWVqYi10ZXN0Ii8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICA8IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPiAKKyAgICAgIDwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+CiAgICAgICA8cmVwbGFjZSBmaWxlPSJjdXN0b20tY2xpZW50LnhtbCIgdG9rZW49IiR7aHR0cC5ob3N0fSIgdmFsdWU9IkhUVFBfSE9TVCIvPgogICAgICAgPHJlcGxhY2UgZmlsZT0iY3VzdG9tLWNsaWVudC54bWwiIHRva2VuPSIke2h0dHAucG9ydH0iIHZhbHVlPSJIVFRQX1BPUlQiLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBiOTJmMzViLi42NmZlOGQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hc3luYy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYXN5bmMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zNywyMyArMzcsMjMgQEAKICAgICAgICAgc3RhdGljIEFkZE51bWJlcnNJbXBsU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiYXN5bmMtZWpiLXNlcnZpY2UiKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiYXN5bmMtZWpiLXNlcnZpY2UiKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9TeW5jVGVzdCgpOwogICAgICAgICAgICAgY2xpZW50LmRvQVN5bmNQb2xsVGVzdCgpOwogICAgICAgICAgICAgY2xpZW50LmRvQVN5bmNDYWxsQmFja1Rlc3QoKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoImFzeW5jLWVqYi1zZXJ2aWNlIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJhc3luYy1lamItc2VydmljZSIpOwogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIHZvaWQgZG9TeW5jVGVzdCgpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgQWRkTnVtYmVyc0ltcGwgcG9ydCA9IHNlcnZpY2UuZ2V0QWRkTnVtYmVyc0ltcGxQb3J0KCk7CiAgICAgICAgICAgICAgICAgaW50IHJldCA9IHBvcnQuYWRkTnVtYmVycygyMjIyLCAxMjM0KTsKLQkJaWYocmV0IT0oMjIyMisxMjM0KSkgeworICAgICAgICBpZihyZXQhPSgyMjIyKzEyMzQpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBhZGQgcmVzdWx0ICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXN5bmMtZWpiLXNlcnZpY2Utc3luYy10ZXN0Iiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQl9CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXN5bmMtZWpiLXNlcnZpY2Utc3luYy10ZXN0Iiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKQEAgLTcwLDExICs3MCwxMSBAQAogICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcCAoMjAwMCk7CiAgICAgICAgICAgICAgICAgQWRkTnVtYmVyc1Jlc3BvbnNlIG91dHB1dCA9IHJlc3AuZ2V0KCk7CiAgICAgICAgICAgICAgICAgaW50IHJldCA9IG91dHB1dC5nZXRSZXR1cm4oKTsKLQkJaWYocmV0IT0oMTIzNCs1Njc4KSkgeworICAgICAgICBpZihyZXQhPSgxMjM0KzU2NzgpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBhZGQgcmVzdWx0ICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXN5bmMtZWpiLXNlcnZpY2UtcG9sbC10ZXN0Iiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQl9CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXN5bmMtZWpiLXNlcnZpY2UtcG9sbC10ZXN0Iiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKQEAgLTkyLDExICs5MiwxMSBAQAogICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcCAoMjAwMCk7CiAgICAgICAgICAgICAgICAgQWRkTnVtYmVyc1Jlc3BvbnNlIG91dHB1dCA9IGNiaC5nZXRSZXNwb25zZSAoKTsKICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gb3V0cHV0LmdldFJldHVybigpOwotCQlpZihyZXQhPSg5ODc2KzU0MzIpKSB7CisgICAgICAgIGlmKHJldCE9KDk4NzYrNTQzMikpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGFkZCByZXN1bHQgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJhc3luYy1lamItc2VydmljZS1jYWxsYmFja2hhbmRsZXItdGVzdCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImFzeW5jLWVqYi1zZXJ2aWNlLWNhbGxiYWNraGFuZGxlci10ZXN0Iiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jL2N1c3RvbS1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYXN5bmMvY3VzdG9tLWNsaWVudC54bWwKaW5kZXggNjMzZjcxMi4uMGUzYWNhNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYXN5bmMvY3VzdG9tLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYXN5bmMvY3VzdG9tLWNsaWVudC54bWwKQEAgLTIxLDcgKzIxLDcgQEAKICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgogICAgIHdzZGxMb2NhdGlvbj0iaHR0cDovL0hUVFBfSE9TVDpIVFRQX1BPUlQvQWRkTnVtYmVyc0ltcGxTZXJ2aWNlL0FkZE51bWJlcnNJbXBsP1dTREwiCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIj4gICAgCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIj4KICAgICA8YmluZGluZ3Mgbm9kZT0ibnMxOmRlZmluaXRpb25zIiB4bWxuczpuczE9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KICAgICAgICAgPHBhY2thZ2UgbmFtZT0iY2xpZW50Ii8+CiAgICAgICAgIDxlbmFibGVBc3luY01hcHBpbmc+dHJ1ZTwvZW5hYmxlQXN5bmNNYXBwaW5nPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYXN5bmNlamJjbGllbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYXN5bmNlamJjbGllbnQvYnVpbGQueG1sCmluZGV4IGQwNjY5ZGUuLjFjOWI5ZmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jZWpiY2xpZW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hc3luY2VqYmNsaWVudC9idWlsZC54bWwKQEAgLTIyLDcgKzIyLDcgQEAKIF0+CiAKIDxwcm9qZWN0IG5hbWU9IkhlbGxvIiBkZWZhdWx0PSJjb3JlIiBiYXNlZGlyPSIuIj4KLSAKKwogCiAgICAgJmNvbW1vbkJ1aWxkOwogICAgIDxwcm9wZXJ0eSBuYW1lPSJzcmMtbmFtZSIgdmFsdWU9ImVuZHBvaW50L1dlYlNlcnZpY2VFSkIuamF2YSIvPgpAQCAtMzIsMTggKzMyLDE4IEBACiAKIAogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS11bmRlcGxveSI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJhdXRvdW5kZXBsb3ktZmlsZSI+Ci0JCTxwYXJhbSBuYW1lPSJmaWxlbmFtZSIgdmFsdWU9IkVqYkNsaWVudC5qYXIiLz4KLQk8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJhdXRvdW5kZXBsb3ktZmlsZSI+Ci0JCTxwYXJhbSBuYW1lPSJmaWxlbmFtZSIgdmFsdWU9IldlYlNlcnZpY2VFSkIuamFyIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYXV0b3VuZGVwbG95LWZpbGUiPgorICAgICAgICA8cGFyYW0gbmFtZT0iZmlsZW5hbWUiIHZhbHVlPSJFamJDbGllbnQuamFyIi8+CisgICAgPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYXV0b3VuZGVwbG95LWZpbGUiPgorICAgICAgICA8cGFyYW0gbmFtZT0iZmlsZW5hbWUiIHZhbHVlPSJXZWJTZXJ2aWNlRUpCLmphciIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogCiAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLXJ1biI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjbGVhbiIvPgotICAgICAgICA8ZWNobyBtZXNzYWdlPSJ3c2ltcG9ydGluZyBodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS9XZWJTZXJ2aWNlRUpCU2VydmljZS9XZWJTZXJ2aWNlRUpCP1dTREwiLz4gIAorICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4iLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0id3NpbXBvcnRpbmcgaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vV2ViU2VydmljZUVKQlNlcnZpY2UvV2ViU2VydmljZUVKQj9XU0RMIi8+CiAgICAgICAgPHJlcGxhY2UgZmlsZT0iY3VzdG9tLWNsaWVudC54bWwiIHZhbHVlPSIke2h0dHAuaG9zdH0iIHRva2VuPSJIVFRQX0hPU1QiLz4KICAgICAgICA8cmVwbGFjZSBmaWxlPSJjdXN0b20tY2xpZW50LnhtbCIgdmFsdWU9IiR7aHR0cC5wb3J0fSIgdG9rZW49IkhUVFBfUE9SVCIvPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi93c2ltcG9ydCI+CkBAIC01NCwxMCArNTQsMTAgQEAKICAgICAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9ImNsYXNzcGF0aCIvPgogICAgICAgICA8L2phdmFjPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95L0VqYkNsaWVudC5qYXIiCi0JICAgIGJhc2VkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIKLQkgICAgaW5jbHVkZXM9ImVqYi8qKixlbmRwb2ludC8qKiIvPgotCTx3YWl0Zm9yIG1heHdhaXQ9IjEwMCIgbWF4d2FpdHVuaXQ9InNlY29uZCI+Ci0gICAgICAgCSAgICA8b3I+CisgICAgICAgIGJhc2VkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIKKyAgICAgICAgaW5jbHVkZXM9ImVqYi8qKixlbmRwb2ludC8qKiIvPgorICAgIDx3YWl0Zm9yIG1heHdhaXQ9IjEwMCIgbWF4d2FpdHVuaXQ9InNlY29uZCI+CisgICAgICAgICAgICAgICA8b3I+CiAgICAgICAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95L0VqYkNsaWVudC5qYXJfZGVwbG95ZWQiLz4KICAgICAgICAgICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvRWpiQ2xpZW50Lmphcl9kZXBsb3lGYWlsZWQiLz4KICAgICAgICAgICAgIDwvb3I+CkBAIC02OCwyMCArNjgsMjAgQEAKICAgICAgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0iZGVwbG95X2ZhaWxlZCI+CiAgICAgICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvRWpiQ2xpZW50Lmphcl9kZXBsb3lGYWlsZWQiLz4KICAgICAgICAgPC9jb25kaXRpb24+Ci0JPGZhaWwgaWY9ImRlcGxveV9mYWlsZWQiIG1lc3NhZ2U9IkRlcGxveW1lbnQgZmFpbGVkIi8+CisgICAgPGZhaWwgaWY9ImRlcGxveV9mYWlsZWQiIG1lc3NhZ2U9IkRlcGxveW1lbnQgZmFpbGVkIi8+CiAgICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke2NsaWVudC1zcmMtbmFtZX0iIHByb3BlcnR5PSJjbGllbnQiIHN1ZmZpeD0iLmphdmEiLz4KICAgICAgICAgPGRpcm5hbWUgZmlsZT0iJHtjbGllbnQtc3JjLW5hbWV9IiBwcm9wZXJ0eT0iY2xpZW50LWRpcmVjdG9yeSIvPgotICAgICAgICA8YmFzZW5hbWUgZmlsZT0iJHtjbGllbnQtZGlyZWN0b3J5fSIgcHJvcGVydHk9ImNsaWVudC1wa2ctbmFtZSIvPiAKKyAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7Y2xpZW50LWRpcmVjdG9yeX0iIHByb3BlcnR5PSJjbGllbnQtcGtnLW5hbWUiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNsaWVudC1jbGFzcy1uYW1lIiB2YWx1ZT0iJHtjbGllbnQtcGtnLW5hbWV9LyR7Y2xpZW50fS5jbGFzcyIvPgotCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jbGllbnQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY2xpZW50Ii8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgYXBwY2xpZW50IHdpdGggJHtjbGllbnQtcGtnLW5hbWV9LiR7Y2xpZW50fSIvPgogICAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIi8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2FwcGNsaWVudCIgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiPgotICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0PSR7b3JiLnBvcnR9Ii8+IAotICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjbGllbnQtcGtnLW5hbWV9LiR7Y2xpZW50fSIvPiAgICAKKyAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydD0ke29yYi5wb3J0fSIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjbGllbnQtcGtnLW5hbWV9LiR7Y2xpZW50fSIvPgogICAgICAgICA8L2V4ZWM+CiAKLTwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+IAorPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9ImN1c3RvbS1jbGllbnQueG1sIiB0b2tlbj0iJHtodHRwLmhvc3R9IiB2YWx1ZT0iSFRUUF9IT1NUIi8+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJjdXN0b20tY2xpZW50LnhtbCIgdG9rZW49IiR7aHR0cC5wb3J0fSIgdmFsdWU9IkhUVFBfUE9SVCIvPgogICAgIDwvdGFyZ2V0PgpAQCAtOTIsNiArOTIsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IEZBSUxFRCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYXN5bmNlamJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYXN5bmNlamJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDM3MmZhY2QuLjRjYTliYTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jZWpiY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hc3luY2VqYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY2xpZW50OwogCiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCOwotaW1wb3J0IGVqYi5IZWxsbzsgCitpbXBvcnQgZWpiLkhlbGxvOwogCiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKQEAgLTI3LDI1ICsyNywyNSBAQAogICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgICAgICBARUpCKG1hcHBlZE5hbWU9ImVqYi5IZWxsbyIpCi0Jc3RhdGljIEhlbGxvIGhlbGxvOworICAgIHN0YXRpYyBIZWxsbyBoZWxsbzsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImFzeW5jLWVqYi1jbGllbnQiKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiYXN5bmMtZWpiLWNsaWVudCIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1N5bmNUZXN0KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9Bc3luY1BvbGxUZXN0KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9Bc3luY0NhbGxiYWNrVGVzdCgpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgiYXN5bmMtZWpiLWNsaWVudCIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiYXN5bmMtZWpiLWNsaWVudCIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvU3luY1Rlc3QoKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBoZWxsby5pbnZva2VTeW5jKCJIZWxsbyBUZXN0ZXIgISIpOwotCQlpZihyZXQuaW5kZXhPZigiU1lOQyBDQUxMIikgPT0gLTEpIHsKKyAgICAgICAgaWYocmV0LmluZGV4T2YoIlNZTkMgQ0FMTCIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImFzeW5jLXN5bmMtZWpiLWNsaWVudCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImFzeW5jLXN5bmMtZWpiLWNsaWVudCIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CkBAIC01NywxMSArNTcsMTEgQEAKICAgICAgICBwdWJsaWMgdm9pZCBkb0FzeW5jUG9sbFRlc3QoKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBoZWxsby5pbnZva2VBc3luY1BvbGwoIkhlbGxvIFRlc3RlciAhIik7Ci0JCWlmKHJldC5pbmRleE9mKCJBU1lOQyBQT0xMIENBTEwiKSA9PSAtMSkgeworICAgICAgICBpZihyZXQuaW5kZXhPZigiQVNZTkMgUE9MTCBDQUxMIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXN5bmMtcG9sbC1lamItY2xpZW50Iiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQl9CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXN5bmMtcG9sbC1lamItY2xpZW50Iiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKQEAgLTczLDExICs3MywxMSBAQAogICAgICAgIHB1YmxpYyB2b2lkIGRvQXN5bmNDYWxsYmFja1Rlc3QoKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBoZWxsby5pbnZva2VBc3luY0NhbGxCYWNrKCJIZWxsbyBUZXN0ZXIgISIpOwotCQlpZihyZXQuaW5kZXhPZigiQVNZTkMgQ0FMTCBCQUNLIENBTEwiKSA9PSAtMSkgeworICAgICAgICBpZihyZXQuaW5kZXhPZigiQVNZTkMgQ0FMTCBCQUNLIENBTEwiKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJhc3luYy1jYWxsYmFjay1lamItY2xpZW50Iiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQl9CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXN5bmMtY2FsbGJhY2stZWpiLWNsaWVudCIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hc3luY2VqYmNsaWVudC9jdXN0b20tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jZWpiY2xpZW50L2N1c3RvbS1jbGllbnQueG1sCmluZGV4IDg4NTdjY2EuLjY3ZGY1OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jZWpiY2xpZW50L2N1c3RvbS1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jZWpiY2xpZW50L2N1c3RvbS1jbGllbnQueG1sCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKICAgICB3c2RsTG9jYXRpb249Imh0dHA6Ly9IVFRQX0hPU1Q6SFRUUF9QT1JUL1dlYlNlcnZpY2VFSkJTZXJ2aWNlL1dlYlNlcnZpY2VFSkI/V1NETCIKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPiAgICAKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPgogICAgIDxiaW5kaW5ncyBub2RlPSJuczE6ZGVmaW5pdGlvbnMiIHhtbG5zOm5zMT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgogICAgICAgICA8cGFja2FnZSBuYW1lPSJlamIiLz4KICAgICAgICAgPGVuYWJsZUFzeW5jTWFwcGluZz50cnVlPC9lbmFibGVBc3luY01hcHBpbmc+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hc3luY2VqYmNsaWVudC9lamIvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jZWpiY2xpZW50L2VqYi9IZWxsby5qYXZhCmluZGV4IDJiYWEwZjAuLjU5MDcyODQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jZWpiY2xpZW50L2VqYi9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jZWpiY2xpZW50L2VqYi9IZWxsby5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgSGVsbG8gewotCXB1YmxpYyBTdHJpbmcgaW52b2tlU3luYyhTdHJpbmcgbXNnKTsKLQlwdWJsaWMgU3RyaW5nIGludm9rZUFzeW5jUG9sbChTdHJpbmcgbXNnKTsKLQlwdWJsaWMgU3RyaW5nIGludm9rZUFzeW5jQ2FsbEJhY2soU3RyaW5nIG1zZyk7CisgICAgcHVibGljIFN0cmluZyBpbnZva2VTeW5jKFN0cmluZyBtc2cpOworICAgIHB1YmxpYyBTdHJpbmcgaW52b2tlQXN5bmNQb2xsKFN0cmluZyBtc2cpOworICAgIHB1YmxpYyBTdHJpbmcgaW52b2tlQXN5bmNDYWxsQmFjayhTdHJpbmcgbXNnKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jZWpiY2xpZW50L2VqYi9IZWxsb0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYXN5bmNlamJjbGllbnQvZWpiL0hlbGxvRUpCLmphdmEKaW5kZXggM2ZlMjNlZS4uYzg5NzMzMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYXN5bmNlamJjbGllbnQvZWpiL0hlbGxvRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYXN5bmNlamJjbGllbnQvZWpiL0hlbGxvRUpCLmphdmEKQEAgLTI3LDI0ICsyNywyNCBAQAogCiBpbXBvcnQgZW5kcG9pbnQuU2F5SGVsbG9SZXNwb25zZTsKIAotQFN0YXRlbGVzcyAKK0BTdGF0ZWxlc3MKIHB1YmxpYyBjbGFzcyBIZWxsb0VKQiBpbXBsZW1lbnRzIEhlbGxvIHsKIAogCiAgICBAV2ViU2VydmljZVJlZgogICAgV2ViU2VydmljZUVKQlNlcnZpY2Ugd2ViU2VydmljZTsKLSAKKwogICAgIHB1YmxpYyBTdHJpbmcgaW52b2tlU3luYyhTdHJpbmcgc3RyaW5nKSB7Ci0JV2ViU2VydmljZUVKQiBlamIgPSB3ZWJTZXJ2aWNlLmdldFdlYlNlcnZpY2VFSkJQb3J0KCk7Ci0JcmV0dXJuIGVqYi5zYXlIZWxsbygiU1lOQyBDQUxMIiArIHN0cmluZyk7CisgICAgV2ViU2VydmljZUVKQiBlamIgPSB3ZWJTZXJ2aWNlLmdldFdlYlNlcnZpY2VFSkJQb3J0KCk7CisgICAgcmV0dXJuIGVqYi5zYXlIZWxsbygiU1lOQyBDQUxMIiArIHN0cmluZyk7CiAgICB9CiAKICAgIHB1YmxpYyBTdHJpbmcgaW52b2tlQXN5bmNQb2xsKFN0cmluZyBtc2cpIHsKICAgICAgICB0cnkgewotCSAgICBXZWJTZXJ2aWNlRUpCIGVqYiA9IHdlYlNlcnZpY2UuZ2V0V2ViU2VydmljZUVKQlBvcnQoKTsKKyAgICAgICAgV2ViU2VydmljZUVKQiBlamIgPSB3ZWJTZXJ2aWNlLmdldFdlYlNlcnZpY2VFSkJQb3J0KCk7CiAgICAgICAgICAgICBSZXNwb25zZTxTYXlIZWxsb1Jlc3BvbnNlPiByZXNwID0gZWpiLnNheUhlbGxvQXN5bmMoIkFTWU5DIFBPTEwgQ0FMTCIgKyBtc2cpOwotCSAgICBUaHJlYWQuc2xlZXAgKDIwMDApOwotCSAgICBTYXlIZWxsb1Jlc3BvbnNlIG91dCA9IHJlc3AuZ2V0KCk7CisgICAgICAgIFRocmVhZC5zbGVlcCAoMjAwMCk7CisgICAgICAgIFNheUhlbGxvUmVzcG9uc2Ugb3V0ID0gcmVzcC5nZXQoKTsKICAgICAgICAgICAgIHJldHVybihvdXQuZ2V0UmV0dXJuKCkpOwogICAgICAgIH0gY2F0Y2goVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgIHJldHVybih0LmdldE1lc3NhZ2UoKSk7CkBAIC01Miw5ICs1Miw5IEBACiAgICB9CiAKICAgIHB1YmxpYyBTdHJpbmcgaW52b2tlQXN5bmNDYWxsQmFjayhTdHJpbmcgbXNnKSB7Ci0JdHJ5IHsKKyAgICB0cnkgewogU3lzdGVtLm91dC5wcmludGxuKCJWSUogLSBpbnZva2luZyBhc3luYyBjYWxsIGJhY2siKTsKLQkgICAgV2ViU2VydmljZUVKQiBlamIgPSB3ZWJTZXJ2aWNlLmdldFdlYlNlcnZpY2VFSkJQb3J0KCk7CisgICAgICAgIFdlYlNlcnZpY2VFSkIgZWpiID0gd2ViU2VydmljZS5nZXRXZWJTZXJ2aWNlRUpCUG9ydCgpOwogICAgICAgICAgICAgTXlDYWxsQmFja0hhbmRsZXIgY2JoID0gbmV3IE15Q2FsbEJhY2tIYW5kbGVyKCk7CiAgICAgICAgICAgICBGdXR1cmU8Pz4gcmVzcG9uc2UgPQogICAgICAgICAgICAgICAgIGVqYi5zYXlIZWxsb0FzeW5jKCJBU1lOQyBDQUxMIEJBQ0sgQ0FMTCIgKyBtc2csIGNiaCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9iaWdpbnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2JpZ2ludC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDI1YWZkODUuLjRmOWI2MWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2JpZ2ludC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2JpZ2ludC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw4ICsxNSw4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJiaWdpbnQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9iaWdpbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYmlnaW50L2J1aWxkLnhtbAppbmRleCBjNGJkMzMzLi41YTg4ZmMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9iaWdpbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2JpZ2ludC9idWlsZC54bWwKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiCiAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgIGluY2x1ZGVzPSIqKiI+Ci0gICAgICA8L2phcj4gICAgICAgICAgICAKKyAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTYxLDggKzYxLDggQEAKICAgICAgICAgPHBhcmFtIG5hbWU9IndzaW1wb3J0LmFyZ3MiCiAgICAgICAgICAgICAgICB2YWx1ZT0iLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IGh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L0N1c3RvbWVyTWFuYWdlclNlcnZpY2UvQ3VzdG9tZXJNYW5hZ2VyP1dTREwiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgIDwvdGFyZ2V0PgogCkBAIC03NSw3ICs3NSw3IEBACiAgICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICAgICAgPGFyZyBsaW5lPSItLXVwbG9hZD10cnVlIi8+CiAgICAgICAgIDxhcmcgbGluZT0iLS1kcm9wYW5kY3JlYXRldGFibGVzIi8+Ci0gICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIi8+CiAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+CkBAIC04NiwxNCArODYsMTQgQEAKICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICAgICAgPGFyZyBsaW5lPSItLWRyb3B0YWJsZXM9dHJ1ZSIvPgogICAgICAgICAgIDxhcmcgbGluZT0iLS1jYXNjYWRlPXRydWUiLz4KLSAgICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXBwbmFtZX0tZWpiIi8+CiAgICAgICAgIDwvZXhlYz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICAgICAgIDxhcmcgbGluZT0ic3RvcC1kYXRhYmFzZSIvPgogICAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1jbGllbnQiPgogICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50LWNsYXNzIiB2YWx1ZT0iY2xpZW50LkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYmlnaW50L2VuZHBvaW50L0N1c3RvbWVyTWFuYWdlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYmlnaW50L2VuZHBvaW50L0N1c3RvbWVyTWFuYWdlci5qYXZhCmluZGV4IDI3NDI3ZjEuLmM0NDhiOGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2JpZ2ludC9lbmRwb2ludC9DdXN0b21lck1hbmFnZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9iaWdpbnQvZW5kcG9pbnQvQ3VzdG9tZXJNYW5hZ2VyLmphdmEKQEAgLTQ3LDYgKzQ3LDYgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZW1vdmVDdXN0b21lciIpOwogICAgICAgICBTdHJpbmcgZWpiUUwgPSAiREVMRVRFIEZST00gQ3VzdG9tZXIgYyBXSEVSRSBjLm5hbWUgPSBcIiIraWQrIlwiIjsKICAgICAgICAgaW50IHJldCA9IGVtLmNyZWF0ZVF1ZXJ5KCBlamJRTCApLmV4ZWN1dGVVcGRhdGUoKTsKLSAJcmV0dXJuIHJldDsKKyAgICAgcmV0dXJuIHJldDsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9idWlsZC54bWwKaW5kZXggMDM2OTA2YS4uNWQ0YTI2YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2J1aWxkLnhtbApAQCAtMjQsNDEgKzI0LDQxIEBACiAgICAgPHRhcmdldCBuYW1lPSJhbGwiPgogICAgICAgICA8YW50IGRpcj0ibm9uYW1lIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0ibm9pbnRmIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJzZWN1cml0eSIgdGFyZ2V0PSJhbGwiLz4KLQk8IS0tYW50IGRpcj0icHJvdmlkZXIiIHRhcmdldD0iYWxsIi8tLT4KLQk8YW50IGRpcj0ib25ld2F5IiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJ3c2N0eHRpbnRlcmNlcHRvciIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ic2VjdXJpdHkiIHRhcmdldD0iYWxsIi8+CisgICAgPCEtLWFudCBkaXI9InByb3ZpZGVyIiB0YXJnZXQ9ImFsbCIvLS0+CisgICAgPGFudCBkaXI9Im9uZXdheSIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0id3NjdHh0aW50ZXJjZXB0b3IiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJlamJjbGllbnQiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9Im1zZ2N0eHQiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImFzeW5jZWpiY2xpZW50IiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJtc2djdHh0IiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJhc3luY2VqYmNsaWVudCIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9InNlcnZpY2VlamJjbGllbnQiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InBvcnRlamJjbGllbnQiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImxvY2FscmVtb3RlZWpid2Vic2VydmljZSIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ibGliZGVwZW5kZW50IiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJtZXNzYWdlY3R4dCIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ic2luZ2xldG9uIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJtc2djdHhpbnRlcmNlcHRvciIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iZWpid2Vic2VydmljZXNpbndhciIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iZWpid2Vic2VydmljZXNpbndhci0yIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJlamJ3ZWJzZXJ2aWNlc2lud2FyLTMiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImVqYndlYnNlcnZpY2VzaW53YXItc2Vzc2lvbmNvbnRleHQiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImVqYndlYnNlcnZpY2VzaW53YXItaW50ZXJjZXB0b3IiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InBvcnRlamJjbGllbnQiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImxvY2FscmVtb3RlZWpid2Vic2VydmljZSIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ibGliZGVwZW5kZW50IiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJtZXNzYWdlY3R4dCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ic2luZ2xldG9uIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJtc2djdHhpbnRlcmNlcHRvciIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iZWpid2Vic2VydmljZXNpbndhciIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iZWpid2Vic2VydmljZXNpbndhci0yIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJlamJ3ZWJzZXJ2aWNlc2lud2FyLTMiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImVqYndlYnNlcnZpY2VzaW53YXItc2Vzc2lvbmNvbnRleHQiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImVqYndlYnNlcnZpY2VzaW53YXItaW50ZXJjZXB0b3IiIHRhcmdldD0iYWxsIi8+CiAgICAgPGFudCBkaXI9ImVqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJhc3luYyIgdGFyZ2V0PSJhbGwiLz4KLQk8IS0tPGFudCBkaXI9ImJpZ2ludCIgdGFyZ2V0PSJhbGwiLz4tLT4KLQk8YW50IGRpcj0ibGliZGVwZW5kZW50IiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJsaWJkZXBlbmRlbnQtMiIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iYXN5bmMiIHRhcmdldD0iYWxsIi8+CisgICAgPCEtLTxhbnQgZGlyPSJiaWdpbnQiIHRhcmdldD0iYWxsIi8+LS0+CisgICAgPGFudCBkaXI9ImxpYmRlcGVuZGVudCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ibGliZGVwZW5kZW50LTIiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJzdmNoYW5kbGVyIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJ3c2N0eHQiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InNlc3Npb25jdHgiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9IndzbmFtZWVqYm5hbWUiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImRlcGVuZGVuY3lub2luamVjdGlvbiIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iZXhjZXB0aW9uIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJtZXRob2RpbmplY3Rpb24iIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImludmFsaWRtZXRob2RpbmplY3Rpb24iIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9IndzY3R4dCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ic2Vzc2lvbmN0eCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0id3NuYW1lZWpibmFtZSIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iZGVwZW5kZW5jeW5vaW5qZWN0aW9uIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJleGNlcHRpb24iIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9Im1ldGhvZGluamVjdGlvbiIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iaW52YWxpZG1ldGhvZGluamVjdGlvbiIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9InBvcnRkZXBlbmRlbmN5bm9pbmplY3Rpb24iIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InBvcnRmaWVsZGluamVjdGlvbiIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0icG9ydG1ldGhvZGluamVjdGlvbiIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0icG9ydGZpZWxkaW5qZWN0aW9uIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJwb3J0bWV0aG9kaW5qZWN0aW9uIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0id3NSZWYtd2Vic2VydmljZS1mZWF0dXJlcyIgdGFyZ2V0PSJhbGwiLz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2RlcGVuZGVuY3lub2luamVjdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9kZXBlbmRlbmN5bm9pbmplY3Rpb24vYnVpbGQueG1sCmluZGV4IGE5NGZiNTIuLmM5OTc3YTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2RlcGVuZGVuY3lub2luamVjdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZGVwZW5kZW5jeW5vaW5qZWN0aW9uL2J1aWxkLnhtbApAQCAtMzQsNiArMzQsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGZhaWxlZCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZGVwZW5kZW5jeW5vaW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2RlcGVuZGVuY3lub2luamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggN2FiZjYzOC4uNTQ2MWUxZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZGVwZW5kZW5jeW5vaW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9kZXBlbmRlbmN5bm9pbmplY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zNCwyMiArMzQsMjIgQEAKICAgICAgICAgc3RhdGljIEhlbGxvSW1wbFNlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndzLWRlcGVuZGVuY3ktbm8taW5qZWN0aW9uIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndzLWRlcGVuZGVuY3ktbm8taW5qZWN0aW9uIik7CiAgICAgICAgICAgICB0cnkgewotCSAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKLSAgICAgICAgCSAgICBzZXJ2aWNlID0gKEhlbGxvSW1wbFNlcnZpY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL2hlbGxvc2VydmljZSIpOwotCSAgICB9IGNhdGNoKFRocm93YWJsZSB0KSB7Ci0JCXQucHJpbnRTdGFja1RyYWNlKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiRGVwZW5kZW5jeSBsb29rdXAgZmFpbGVkIDogIiArIHQuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid3MtZGVwZW5kZW5jeS1uby1pbmplY3Rpb24iLCBzdGF0LkZBSUwpOwkJCi0JICAgIH0KLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2aWNlIGlzICIgKyBzZXJ2aWNlKTsKLQkgICAgaWYgKHNlcnZpY2UhPW51bGwpIHsKLQkgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwotCSAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIH0KLQkgICAgc3RhdC5wcmludFN1bW1hcnkoIndzLWRlcGVuZGVuY3ktbm8taW5qZWN0aW9uIik7CisgICAgICAgICAgICAgICAgc2VydmljZSA9IChIZWxsb0ltcGxTZXJ2aWNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9oZWxsb3NlcnZpY2UiKTsKKyAgICAgICAgfSBjYXRjaChUaHJvd2FibGUgdCkgeworICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlcGVuZGVuY3kgbG9va3VwIGZhaWxlZCA6ICIgKyB0LmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndzLWRlcGVuZGVuY3ktbm8taW5qZWN0aW9uIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlcnZpY2UgaXMgIiArIHNlcnZpY2UpOworICAgICAgICBpZiAoc2VydmljZSE9bnVsbCkgeworICAgICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CisgICAgICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid3MtZGVwZW5kZW5jeS1uby1pbmplY3Rpb24iKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewpAQCAtNTcsMTEgKzU3LDExIEBACiAgICAgICAgICAgICAgICAgSGVsbG9JbXBsIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvSW1wbFBvcnQoKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7aTwxMDtpKyspIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIpOwotCQkgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndzLWVqYi1tZXRob2QtaW5qZWN0aW9uIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3cy1kZXBlbmRlbmN5LW5vLWluamVjdGlvbiIsIHN0YXQuUEFTUyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJjbGllbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpiY2xpZW50L2J1aWxkLnhtbAppbmRleCBmN2NhNDM4Li42ZGQwZGZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJjbGllbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYmNsaWVudC9idWlsZC54bWwKQEAgLTIyLDcgKzIyLDcgQEAKIF0+CiAKIDxwcm9qZWN0IG5hbWU9IkhlbGxvIiBkZWZhdWx0PSJjb3JlIiBiYXNlZGlyPSIuIj4KLSAKKwogCiAgICAgJmNvbW1vbkJ1aWxkOwogICAgIDxwcm9wZXJ0eSBuYW1lPSJzcmMtbmFtZSIgdmFsdWU9ImVuZHBvaW50L1dlYlNlcnZpY2VFSkIuamF2YSIvPgpAQCAtMzIsMzAgKzMyLDMwIEBACiAKIAogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS11bmRlcGxveSI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJhdXRvdW5kZXBsb3ktZmlsZSI+Ci0JCTxwYXJhbSBuYW1lPSJmaWxlbmFtZSIgdmFsdWU9IkVqYkNsaWVudC5qYXIiLz4KLQk8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJhdXRvdW5kZXBsb3ktZmlsZSI+Ci0JCTxwYXJhbSBuYW1lPSJmaWxlbmFtZSIgdmFsdWU9IldlYlNlcnZpY2VFSkIuamFyIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYXV0b3VuZGVwbG95LWZpbGUiPgorICAgICAgICA8cGFyYW0gbmFtZT0iZmlsZW5hbWUiIHZhbHVlPSJFamJDbGllbnQuamFyIi8+CisgICAgPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYXV0b3VuZGVwbG95LWZpbGUiPgorICAgICAgICA8cGFyYW0gbmFtZT0iZmlsZW5hbWUiIHZhbHVlPSJXZWJTZXJ2aWNlRUpCLmphciIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogCiAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLXJ1biI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjbGVhbiIvPgotCTxhbnRjYWxsIHRhcmdldD0id3NkbC1pbXBvcnQiPgotCQk8cGFyYW0gbmFtZT0ic2VydmVyIiB2YWx1ZT0iV2ViU2VydmljZUVKQiIvPgotCQk8cGFyYW0gbmFtZT0icG9ydCIgdmFsdWU9IldlYlNlcnZpY2VFSkIiLz4KLQk8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbiIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0id3NkbC1pbXBvcnQiPgorICAgICAgICA8cGFyYW0gbmFtZT0ic2VydmVyIiB2YWx1ZT0iV2ViU2VydmljZUVKQiIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icG9ydCIgdmFsdWU9IldlYlNlcnZpY2VFSkIiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIKICAgICAgICAgICAgIGluY2x1ZGVzPSJlamIvSGVsbG9FSkIuamF2YSI+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJjbGFzc3BhdGgiLz4KICAgICAgICAgPC9qYXZhYz4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS9FamJDbGllbnQuamFyIgotCSAgICBiYXNlZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiCi0JICAgIGluY2x1ZGVzPSJlamIvKiosZW5kcG9pbnQvKioiLz4KLQk8d2FpdGZvciBtYXh3YWl0PSIxMDAiIG1heHdhaXR1bml0PSJzZWNvbmQiPgotICAgICAgIAkgICAgPG9yPgorICAgICAgICBiYXNlZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiCisgICAgICAgIGluY2x1ZGVzPSJlamIvKiosZW5kcG9pbnQvKioiLz4KKyAgICA8d2FpdGZvciBtYXh3YWl0PSIxMDAiIG1heHdhaXR1bml0PSJzZWNvbmQiPgorICAgICAgICAgICAgICAgPG9yPgogICAgICAgICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS9FamJDbGllbnQuamFyX2RlcGxveWVkIi8+CiAgICAgICAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95L0VqYkNsaWVudC5qYXJfZGVwbG95RmFpbGVkIi8+CiAgICAgICAgICAgICA8L29yPgpAQCAtNjYsMTcgKzY2LDE3IEBACiAgICAgICAgIDxjb25kaXRpb24gcHJvcGVydHk9ImRlcGxveV9mYWlsZWQiPgogICAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95L0VqYkNsaWVudC5qYXJfZGVwbG95RmFpbGVkIi8+CiAgICAgICAgIDwvY29uZGl0aW9uPgotCTxmYWlsIGlmPSJkZXBsb3lfZmFpbGVkIiBtZXNzYWdlPSJEZXBsb3ltZW50IGZhaWxlZCIvPgorICAgIDxmYWlsIGlmPSJkZXBsb3lfZmFpbGVkIiBtZXNzYWdlPSJEZXBsb3ltZW50IGZhaWxlZCIvPgogICAgICAgICA8YmFzZW5hbWUgZmlsZT0iJHtjbGllbnQtc3JjLW5hbWV9IiBwcm9wZXJ0eT0iY2xpZW50IiBzdWZmaXg9Ii5qYXZhIi8+CiAgICAgICAgIDxkaXJuYW1lIGZpbGU9IiR7Y2xpZW50LXNyYy1uYW1lfSIgcHJvcGVydHk9ImNsaWVudC1kaXJlY3RvcnkiLz4KLSAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7Y2xpZW50LWRpcmVjdG9yeX0iIHByb3BlcnR5PSJjbGllbnQtcGtnLW5hbWUiLz4gCisgICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke2NsaWVudC1kaXJlY3Rvcnl9IiBwcm9wZXJ0eT0iY2xpZW50LXBrZy1uYW1lIi8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGllbnQtY2xhc3MtbmFtZSIgdmFsdWU9IiR7Y2xpZW50LXBrZy1uYW1lfS8ke2NsaWVudH0uY2xhc3MiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY2xpZW50Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNsaWVudCIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIGFwcGNsaWVudCB3aXRoICR7Y2xpZW50LXBrZy1uYW1lfS4ke2NsaWVudH0iLz4KICAgICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIvPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hcHBjbGllbnQiIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIj4KLSAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydD0ke29yYi5wb3J0fSIvPiAKLSAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y2xpZW50LXBrZy1uYW1lfS4ke2NsaWVudH0iLz4gICAgCisgICAgICAgICAgICA8YXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y2xpZW50LXBrZy1uYW1lfS4ke2NsaWVudH0iLz4KICAgICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgogCkBAIC04Niw2ICs4Niw2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJlcG9ydC1mYWlsdXJlIj4KICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3QgRkFJTEVEIi8+Ci0gICAgPC90YXJnZXQ+ICAgCQotICAgIAorICAgIDwvdGFyZ2V0PgorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpiY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQppbmRleCA3NmRiY2QwLi5mZGFmNDNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY2xpZW50OwogCiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCOwotaW1wb3J0IGVqYi5IZWxsbzsgCitpbXBvcnQgZWpiLkhlbGxvOwogCiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKQEAgLTI3LDI0ICsyNywyNCBAQAogICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgICAgICBARUpCKG1hcHBlZE5hbWU9ImVqYi5IZWxsbyIpCi0Jc3RhdGljIEhlbGxvIGhlbGxvOworICAgIHN0YXRpYyBIZWxsbyBoZWxsbzsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImVqYmNsaWVudC1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImVqYmNsaWVudC1hbm5vdGF0aW9uIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYmNsaWVudC1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamJjbGllbnQtYW5ub3RhdGlvbiIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPDEwO2krKykgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gaGVsbG8uaW52b2tlKCJIZWxsbyBUZXN0ZXIgISIpOwotCQkgICAgaWYocmV0LmluZGV4T2YoIkhlbGxvIFRlc3RlciIpID09IC0xKSB7CisgICAgICAgICAgICBpZihyZXQuaW5kZXhPZigiSGVsbG8gVGVzdGVyIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJTaW1wbGUtQW5ub3RhdGlvbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50LWFubm90YXRpb24iLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpiY2xpZW50L2VqYi9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpiY2xpZW50L2VqYi9IZWxsby5qYXZhCmluZGV4IDg2YWQ0NGYuLjg2ZWQ2OGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYmNsaWVudC9lamIvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJjbGllbnQvZWpiL0hlbGxvLmphdmEKQEAgLTIwLDUgKzIwLDUgQEAKIAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBIZWxsbyB7Ci0JcHVibGljIFN0cmluZyBpbnZva2UoU3RyaW5nIG1zZyk7CisgICAgcHVibGljIFN0cmluZyBpbnZva2UoU3RyaW5nIG1zZyk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJjbGllbnQvZWpiL0hlbGxvRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJjbGllbnQvZWpiL0hlbGxvRUpCLmphdmEKaW5kZXggZDk1ZjM5MS4uOTUwN2Y5NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpiY2xpZW50L2VqYi9IZWxsb0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYmNsaWVudC9lamIvSGVsbG9FSkIuamF2YQpAQCAtMjIsMTggKzIyLDE4IEBACiBpbXBvcnQgZW5kcG9pbnQuV2ViU2VydmljZUVKQlNlcnZpY2U7CiBpbXBvcnQgZW5kcG9pbnQuV2ViU2VydmljZUVKQjsKIAotQFN0YXRlbGVzcyAKK0BTdGF0ZWxlc3MKIHB1YmxpYyBjbGFzcyBIZWxsb0VKQiBpbXBsZW1lbnRzIEhlbGxvIHsKIAogCiAgICBAV2ViU2VydmljZVJlZgogICAgV2ViU2VydmljZUVKQlNlcnZpY2Ugd2ViU2VydmljZTsKLSAKKwogICAgIHB1YmxpYyBTdHJpbmcgaW52b2tlKFN0cmluZyBzdHJpbmcpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2VkIHdpdGggIiArIHN0cmluZyk7IAotCVN5c3RlbS5vdXQucHJpbnRsbigiZ2V0dGluZyB0aGUgcG9ydCBub3cgZnJvbSAiICsgd2ViU2VydmljZSk7Ci0JV2ViU2VydmljZUVKQiBlamIgPSB3ZWJTZXJ2aWNlLmdldFdlYlNlcnZpY2VFSkJQb3J0KCk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJnb3QgIiArIGVqYik7Ci0JcmV0dXJuIGVqYi5zYXlIZWxsbyhzdHJpbmcpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9rZWQgd2l0aCAiICsgc3RyaW5nKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdldHRpbmcgdGhlIHBvcnQgbm93IGZyb20gIiArIHdlYlNlcnZpY2UpOworICAgIFdlYlNlcnZpY2VFSkIgZWpiID0gd2ViU2VydmljZS5nZXRXZWJTZXJ2aWNlRUpCUG9ydCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ290ICIgKyBlamIpOworICAgIHJldHVybiBlamIuc2F5SGVsbG8oc3RyaW5nKTsKICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJzZXJ2bGV0d2Vic2VydmljZXNpbndhci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGIxZmRjYWYuLjJmMTVkMTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpic2VydmxldHdlYnNlcnZpY2VzaW53YXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamJzZXJ2bGV0d2Vic2VydmljZXNpbndhciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyL2J1aWxkLnhtbAppbmRleCBiNjUzOTAwLi4yM2ZjNzE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJzZXJ2bGV0d2Vic2VydmljZXNpbndhci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpic2VydmxldHdlYnNlcnZpY2VzaW53YXIvYnVpbGQueG1sCkBAIC0zMyw3ICszMyw3IEBACiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwogICAgICZqYXh3c1Rvb2xzOwogCi0gIAorCiAgICAgPHBhdGggaWQ9ImNsYXNzcGF0aCI+CiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzIj4KICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgpAQCAtMTE0LDcgKzExNCw3IEBACiAgICAgICAgIDxhcmcgbGluZT0iLS1wb3J0ICR7YWRtaW4ucG9ydH0iLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2NsaWVudC53YXJ9Ii8+CiAgICAgICA8L2V4ZWM+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CkBAIC0xNDAsNiArMTQwLDYgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KIAotICAgIAorCiA8L3Byb2plY3Q+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpic2VydmxldHdlYnNlcnZpY2VzaW53YXIvY2xpZW50LXdlYi54bWwKaW5kZXggMGZiMGYxYi4uMDE1NDlhYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpic2VydmxldHdlYnNlcnZpY2VzaW53YXIvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpic2VydmxldHdlYnNlcnZpY2VzaW53YXIvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpic2VydmxldHdlYnNlcnZpY2VzaW53YXIvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggZTQyMjc2MC4uYjhlOGRmYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpic2VydmxldHdlYnNlcnZpY2VzaW53YXIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJzZXJ2bGV0d2Vic2VydmljZXNpbndhci9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJzZXJ2bGV0d2Vic2VydmljZXNpbndhci9lbmRwb2ludC9IZWxsb0VqYi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpic2VydmxldHdlYnNlcnZpY2VzaW53YXIvZW5kcG9pbnQvSGVsbG9FamIuamF2YQppbmRleCBmM2NhMzNjLi40NTA1MDUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJzZXJ2bGV0d2Vic2VydmljZXNpbndhci9lbmRwb2ludC9IZWxsb0VqYi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyL2VuZHBvaW50L0hlbGxvRWpiLmphdmEKQEAgLTMzLDEwICszMywxMCBAQAogQFJlc291cmNlCiAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjOwogCi0JcHVibGljIEhlbGxvRWpiKCkge30KKyAgICBwdWJsaWMgSGVsbG9FamIoKSB7fQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKLQkJcmV0dXJuICJFSkIgV1M6IiArIHdobzsKLQl9CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKKyAgICAgICAgcmV0dXJuICJFSkIgV1M6IiArIHdobzsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJzZXJ2bGV0d2Vic2VydmljZXNpbndhci9lbmRwb2ludC9IZWxsb1dTLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJzZXJ2bGV0d2Vic2VydmljZXNpbndhci9lbmRwb2ludC9IZWxsb1dTLmphdmEKaW5kZXggMWI0OTI3ZS4uYWIwODU0ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpic2VydmxldHdlYnNlcnZpY2VzaW53YXIvZW5kcG9pbnQvSGVsbG9XUy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyL2VuZHBvaW50L0hlbGxvV1MuamF2YQpAQCAtMjgsMTAgKzI4LDEwIEBACiApCiBwdWJsaWMgY2xhc3MgSGVsbG9XUyB7CiAKLQlwdWJsaWMgSGVsbG9XUygpIHt9CisgICAgcHVibGljIEhlbGxvV1MoKSB7fQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKLQkJcmV0dXJuICJTZXJ2bGV0IFdTOiIgKyB3aG87Ci0JfQorICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7CisgICAgICAgIHJldHVybiAiU2VydmxldCBXUzoiICsgd2hvOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJzZXJ2bGV0d2Vic2VydmljZXNpbndhci93ZWIueG1sCmluZGV4IGFhZTUyN2UuLmZiYTA5MDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpic2VydmxldHdlYnNlcnZpY2VzaW53YXIvd2ViLnhtbApAQCAtMTgsMTAgKzE4LDEwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyL3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyL3dlYmNsaWVudC9DbGllbnQuamF2YQppbmRleCAzNzk3OTQxLi4zOGM4ZGRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJzZXJ2bGV0d2Vic2VydmljZXNpbndhci93ZWJjbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpic2VydmxldHdlYnNlcnZpY2VzaW53YXIvd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMiw4ICszMiw4IEBACiAgICAgQGpha2FydGEueG1sLndzLldlYlNlcnZpY2VSZWYod2ViY2xpZW50LkhlbGxvU2VydmljZS5jbGFzcykKICAgICAgICAgICAgIHdlYmNsaWVudC5IZWxsbyBoaXBvcnQyOwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0yL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTIvYnVpbGQucHJvcGVydGllcwppbmRleCAxODUzOGQ0Li5lODMzNGE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamJ3ZWJzZXJ2aWNlc2lud2FyLTIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0yL2J1aWxkLnhtbAppbmRleCA3MzFjYzVmLi5mNzg4NTc1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMi9idWlsZC54bWwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAmdGVzdHByb3BlcnRpZXM7CiAgICAgJmpheHdzVG9vbHM7CiAKLSAgCisKICAgICA8cGF0aCBpZD0iY2xhc3NwYXRoIj4KICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMiPgogICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgPGFyZyBsaW5lPSItLXBvcnQgJHthZG1pbi5wb3J0fSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7Y2xpZW50Lndhcn0iLz4KICAgICAgIDwvZXhlYz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KQEAgLTEzNSw2ICsxMzUsNiBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgogCi0gICAgCisKIDwvcHJvamVjdD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0yL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0yL2NsaWVudC13ZWIueG1sCmluZGV4IDAyN2RmY2UuLmI0YmJmNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMi9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTIvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0yL2VuZHBvaW50L0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTIvZW5kcG9pbnQvSGVsbG8uamF2YQppbmRleCBkNWE3YWU4Li40ZTJhNjVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTIvZW5kcG9pbnQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTIvZW5kcG9pbnQvSGVsbG8uamF2YQpAQCAtMzIsMTAgKzMyLDEwIEBACiAvL0BSZXNvdXJjZQogIC8vICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjOwogCi0JcHVibGljIEhlbGxvKCkge30KKyAgICBwdWJsaWMgSGVsbG8oKSB7fQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKLQkJcmV0dXJuICJIZWxsbyAiICsgd2hvOwotCX0KKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhlbGxvIiwgYWN0aW9uPSJ1cm46U2F5SGVsbG8iKQorICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgeworICAgICAgICByZXR1cm4gIkhlbGxvICIgKyB3aG87CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTIvd2ViLnhtbAppbmRleCBhYWU1MjdlLi5mYmEwOTAyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTIvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTIvd2ViLnhtbApAQCAtMTgsMTAgKzE4LDEwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMi93ZWJjbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTIvd2ViY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGIyNjNlZTAuLjg5NDNhNWFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTIvd2ViY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMi93ZWJjbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDggKzI4LDggQEAKICAgICAgICAgQGpha2FydGEueG1sLndzLldlYlNlcnZpY2VSZWYoSGVsbG9TZXJ2aWNlLmNsYXNzKQogICAgICAgICBIZWxsbyBoaXBvcnQ7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQ4ZjQ4MWIuLjcwMWNiODcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYndlYnNlcnZpY2VzaW53YXItMyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTMvYnVpbGQueG1sCmluZGV4IDczMWNjNWYuLmY3ODg1NzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0zL2J1aWxkLnhtbApAQCAtMzMsNyArMzMsNyBAQAogICAgICZ0ZXN0cHJvcGVydGllczsKICAgICAmamF4d3NUb29sczsKIAotICAKKwogICAgIDxwYXRoIGlkPSJjbGFzc3BhdGgiPgogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICA8YXJnIGxpbmU9Ii0tcG9ydCAke2FkbWluLnBvcnR9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHtjbGllbnQud2FyfSIvPgogICAgICAgPC9leGVjPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgpAQCAtMTM1LDYgKzEzNSw2IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+CiAKLSAgICAKKwogPC9wcm9qZWN0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTMvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTMvY2xpZW50LXdlYi54bWwKaW5kZXggMDI3ZGZjZS4uYjRiYmY1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0zL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMy9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTMvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMy9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IGUxNjY1YjMuLmMxYjdkYWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMy9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMy9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC02Myw5ICs2Myw5IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBIRUxMTyBTRVJWSUNFIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIltIZWxsbyBBbGxdIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0zL2VuZHBvaW50L0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTMvZW5kcG9pbnQvSGVsbG8uamF2YQppbmRleCBkOTY0ZThmLi5hYjg1YzgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTMvZW5kcG9pbnQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTMvZW5kcG9pbnQvSGVsbG8uamF2YQpAQCAtMzMsMTAgKzMzLDEwIEBACiBAUmVzb3VyY2UKICAgIHByaXZhdGUgV2ViU2VydmljZUNvbnRleHQgc2M7CiAKLQlwdWJsaWMgSGVsbG8oKSB7fQorICAgIHB1YmxpYyBIZWxsbygpIHt9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhlbGxvIiwgYWN0aW9uPSJ1cm46U2F5SGVsbG8iKQotCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgewotCQlyZXR1cm4gIkhlbGxvICIgKyB3aG87Ci0JfQorICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7CisgICAgICAgIHJldHVybiAiSGVsbG8gIiArIHdobzsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTMvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMy93ZWIueG1sCmluZGV4IGFhZTUyN2UuLmZiYTA5MDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMy93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMy93ZWIueG1sCkBAIC0xOCwxMCArMTgsMTAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0zL3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMy93ZWJjbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYjI2M2VlMC4uODk0M2E1YWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMy93ZWJjbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0zL3dlYmNsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsOCArMjgsOCBAQAogICAgICAgICBAamFrYXJ0YS54bWwud3MuV2ViU2VydmljZVJlZihIZWxsb1NlcnZpY2UuY2xhc3MpCiAgICAgICAgIEhlbGxvIGhpcG9ydDsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItaW50ZXJjZXB0b3IvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItaW50ZXJjZXB0b3IvYnVpbGQucHJvcGVydGllcwppbmRleCA4ZmEwYWJiLi5lYWY0NmQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1pbnRlcmNlcHRvci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYndlYnNlcnZpY2VzaW53YXItaW50ZXJjZXB0b3IiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItaW50ZXJjZXB0b3IvYnVpbGQueG1sCmluZGV4IDczMWNjNWYuLmY3ODg1NzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItaW50ZXJjZXB0b3IvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItaW50ZXJjZXB0b3IvYnVpbGQueG1sCkBAIC0zMyw3ICszMyw3IEBACiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwogICAgICZqYXh3c1Rvb2xzOwogCi0gIAorCiAgICAgPHBhdGggaWQ9ImNsYXNzcGF0aCI+CiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzIj4KICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgIDxhcmcgbGluZT0iLS1wb3J0ICR7YWRtaW4ucG9ydH0iLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2NsaWVudC53YXJ9Ii8+CiAgICAgICA8L2V4ZWM+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CkBAIC0xMzUsNiArMTM1LDYgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KIAotICAgIAorCiA8L3Byb2plY3Q+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItaW50ZXJjZXB0b3IvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yL2NsaWVudC13ZWIueG1sCmluZGV4IDAyN2RmY2UuLmI0YmJmNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItaW50ZXJjZXB0b3IvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1pbnRlcmNlcHRvci9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yL2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggNGMwMjVkOS4uYTUyYzljZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1pbnRlcmNlcHRvci9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItaW50ZXJjZXB0b3IvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjMsOSArNjMsOSBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgSEVMTE8gU0VSVklDRSBJUyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJbc2F5SGVsbG9dIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1pbnRlcmNlcHRvci9lbmRwb2ludC9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1pbnRlcmNlcHRvci9lbmRwb2ludC9IZWxsby5qYXZhCmluZGV4IGEwNDQ3NzguLmUwYmVjNDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItaW50ZXJjZXB0b3IvZW5kcG9pbnQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yL2VuZHBvaW50L0hlbGxvLmphdmEKQEAgLTMyLDEyICszMiwxMiBAQAogQFJlc291cmNlCiAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjOwogCi0JcHVibGljIEhlbGxvKCkge30KKyAgICBwdWJsaWMgSGVsbG8oKSB7fQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhlbGxvIiwgYWN0aW9uPSJ1cm46U2F5SGVsbG8iKQogICAgICAgICBAamFrYXJ0YS5pbnRlcmNlcHRvci5JbnRlcmNlcHRvcnMoU2ltcGxlSW50ZXJjZXB0b3IuY2xhc3MpCi0JcHVibGljIFN0cmluZyBzYXlIZWxsbyhPYmplY3Qgd2hvKSB7Ci0JCXJldHVybiAiSGVsbG8gIiArIHdobyAgOworICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oT2JqZWN0IHdobykgeworICAgICAgICByZXR1cm4gIkhlbGxvICIgKyB3aG8gIDsKIAotCX0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yL3dlYi54bWwKaW5kZXggYWFlNTI3ZS4uZmJhMDkwMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1pbnRlcmNlcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItaW50ZXJjZXB0b3Ivd2ViLnhtbApAQCAtMTgsMTAgKzE4LDEwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItaW50ZXJjZXB0b3Ivd2ViY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1pbnRlcmNlcHRvci93ZWJjbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYjI2M2VlMC4uODk0M2E1YWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItaW50ZXJjZXB0b3Ivd2ViY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItaW50ZXJjZXB0b3Ivd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw4ICsyOCw4IEBACiAgICAgICAgIEBqYWthcnRhLnhtbC53cy5XZWJTZXJ2aWNlUmVmKEhlbGxvU2VydmljZS5jbGFzcykKICAgICAgICAgSGVsbG8gaGlwb3J0OwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1zZXNzaW9uY29udGV4dC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1zZXNzaW9uY29udGV4dC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDU4MWFmNzcuLjM0NWJkNDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItc2Vzc2lvbmNvbnRleHQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLXNlc3Npb25jb250ZXh0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpid2Vic2VydmljZXNpbndhci1zZXNzaW9uY29udGV4dCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItc2Vzc2lvbmNvbnRleHQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1zZXNzaW9uY29udGV4dC9idWlsZC54bWwKaW5kZXggNzMxY2M1Zi4uZjc4ODU3NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1zZXNzaW9uY29udGV4dC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1zZXNzaW9uY29udGV4dC9idWlsZC54bWwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAmdGVzdHByb3BlcnRpZXM7CiAgICAgJmpheHdzVG9vbHM7CiAKLSAgCisKICAgICA8cGF0aCBpZD0iY2xhc3NwYXRoIj4KICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMiPgogICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgPGFyZyBsaW5lPSItLXBvcnQgJHthZG1pbi5wb3J0fSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7Y2xpZW50Lndhcn0iLz4KICAgICAgIDwvZXhlYz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KQEAgLTEzNSw2ICsxMzUsNiBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgogCi0gICAgCisKIDwvcHJvamVjdD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1zZXNzaW9uY29udGV4dC9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItc2Vzc2lvbmNvbnRleHQvY2xpZW50LXdlYi54bWwKaW5kZXggMDI3ZGZjZS4uYjRiYmY1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1zZXNzaW9uY29udGV4dC9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLXNlc3Npb25jb250ZXh0L2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItc2Vzc2lvbmNvbnRleHQvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItc2Vzc2lvbmNvbnRleHQvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCBhMzljZTI3Li5lMzI5ODgyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLXNlc3Npb25jb250ZXh0L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1zZXNzaW9uY29udGV4dC9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC02Myw5ICs2Myw5IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBIRUxMTyBTRVJWSUNFIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIltIZWxsbyBBbGxdIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1zZXNzaW9uY29udGV4dC9lbmRwb2ludC9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1zZXNzaW9uY29udGV4dC9lbmRwb2ludC9IZWxsby5qYXZhCmluZGV4IDg2ZmE4MmMuLjMyMzIxZmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItc2Vzc2lvbmNvbnRleHQvZW5kcG9pbnQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLXNlc3Npb25jb250ZXh0L2VuZHBvaW50L0hlbGxvLmphdmEKQEAgLTMyLDExICszMiwxMSBAQAogQFJlc291cmNlCiAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjOwogCi0JcHVibGljIEhlbGxvKCkge30KKyAgICBwdWJsaWMgSGVsbG8oKSB7fQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKLQkJcmV0dXJuICJIZWxsbyAiICsgd2hvICA7CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKKyAgICAgICAgcmV0dXJuICJIZWxsbyAiICsgd2hvICA7CiAKLQl9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1zZXNzaW9uY29udGV4dC93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1zZXNzaW9uY29udGV4dC93ZWIueG1sCmluZGV4IGFhZTUyN2UuLmZiYTA5MDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItc2Vzc2lvbmNvbnRleHQvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLXNlc3Npb25jb250ZXh0L3dlYi54bWwKQEAgLTE4LDEwICsxOCwxMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLXNlc3Npb25jb250ZXh0L3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItc2Vzc2lvbmNvbnRleHQvd2ViY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGIyNjNlZTAuLjg5NDNhNWFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLXNlc3Npb25jb250ZXh0L3dlYmNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLXNlc3Npb25jb250ZXh0L3dlYmNsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsOCArMjgsOCBAQAogICAgICAgICBAamFrYXJ0YS54bWwud3MuV2ViU2VydmljZVJlZihIZWxsb1NlcnZpY2UuY2xhc3MpCiAgICAgICAgIEhlbGxvIGhpcG9ydDsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXIvYnVpbGQucHJvcGVydGllcwppbmRleCAxOGI0Y2NjLi4xZDM5NTNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw5ICsxNSw5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamJ3ZWJzZXJ2aWNlc2lud2FyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci9idWlsZC54bWwKaW5kZXggMTRjYzVmZC4uMTBiNmE0YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci9idWlsZC54bWwKQEAgLTc1LDcgKzc1LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDc3ZGZkMDcuLmQwMzI5MzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMCwxMCArMzAsMTAgQEAKIAogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpid2Vic2VydmljZXNpbndhciIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamJ3ZWJzZXJ2aWNlc2lud2FyIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYndlYnNlcnZpY2VzaW53YXIiKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYndlYnNlcnZpY2VzaW53YXIiKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewpAQCAtNDEsMTcgKzQxLDE3IEBACiAKICAgICAgICAgICAgICAgICBVUkwgc2VydmljZUluZm8gPSBuZXcgVVJMIChhcmdzWzBdKTsKICAgICAgICAgICAgICAgICBVUkxDb25uZWN0aW9uIGNvbiA9IHNlcnZpY2VJbmZvLm9wZW5Db25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoY29uLmdldElucHV0U3RyZWFtKCkpKTsgCisgICAgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoY29uLmdldElucHV0U3RyZWFtKCkpKTsKIAogICAgICAgICAgICAgICAgIFN0cmluZyBpbnB1dExpbmU7Ci0gICAgICAgICAgICAgICAgaW50IGluZGV4PTA7IAorICAgICAgICAgICAgICAgIGludCBpbmRleD0wOwogICAgICAgICAgICAgICAgIHdoaWxlICgoaW5wdXRMaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIGlmICgoaW5kZXg9IGlucHV0TGluZS5pbmRleE9mKCJtZXNzYWdlPSIpKT4wKXsKIAotICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB1cmwgPSBpbnB1dExpbmUuc3Vic3RyaW5nKGluZGV4KzcpOyAgCisgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHVybCA9IGlucHV0TGluZS5zdWJzdHJpbmcoaW5kZXgrNyk7CiAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVybC5pbmRleE9mKCJzYXlIZWxsbyIpPjApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpid2Vic2VydmljZXNpbndhciIsIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGlucHV0TGluZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXIvZW5kcG9pbnQvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXIvZW5kcG9pbnQvSGVsbG8uamF2YQppbmRleCA2NjU2OTBhLi4yYmU2OWYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyL2VuZHBvaW50L0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci9lbmRwb2ludC9IZWxsby5qYXZhCkBAIC0zMywxMCArMzMsMTAgQEAKIEBSZXNvdXJjZQogICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYzsKIAotCXB1YmxpYyBIZWxsbygpIHt9CisgICAgcHVibGljIEhlbGxvKCkge30KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCi0JcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7Ci0JCXJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvOwotCX0KKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhlbGxvIiwgYWN0aW9uPSJ1cm46U2F5SGVsbG8iKQorICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgeworICAgICAgICByZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHdobzsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyL3dlYi54bWwKaW5kZXggYWFlNTI3ZS4uZmJhMDkwMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXIvd2ViLnhtbApAQCAtMTgsMTAgKzE4LDEwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndzaW53YXJ3aXRod3NkbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid3NpbndhcndpdGh3c2RsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZmRlMzc5YS4uZDI2MjNmNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid3NpbndhcndpdGh3c2RsL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid3NpbndhcndpdGh3c2RsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDkgKzE1LDkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYndzaW53YXJ3aXRod3NkbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3c2lud2Fyd2l0aHdzZGwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid3NpbndhcndpdGh3c2RsL2J1aWxkLnhtbAppbmRleCA4OGNjNzU4Li5lOTNjMGZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3c2lud2Fyd2l0aHdzZGwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndzaW53YXJ3aXRod3NkbC9idWlsZC54bWwKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgICAgICAgIHZhbHVlPSItd3NkbGxvY2F0aW9uIFdFQi1JTkYvd3NkbC9IZWxsb1NlcnZpY2Uud3NkbCAta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfSBIZWxsb1NlcnZpY2Uud3NkbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVuZHBvaW50Ii8+CkBAIC05Nyw2ICs5Nyw2IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJvdGhlci1hcmdzIiB2YWx1ZT0iZWpid3NpbndhcndpdGh3c2RsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gIAorCiA8L3Byb2plY3Q+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndzaW53YXJ3aXRod3NkbC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3c2lud2Fyd2l0aHdzZGwvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGMyNzcwZTMuLjY5MWEwMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndzaW53YXJ3aXRod3NkbC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid3NpbndhcndpdGh3c2RsL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzAsMTAgKzMwLDEwIEBACiAKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImVqYndzaW53YXJ3aXRod3NkbCIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamJ3c2lud2Fyd2l0aHdzZGwiKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpid3NpbndhcndpdGh3c2RsIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamJ3c2lud2Fyd2l0aHdzZGwiKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewpAQCAtNTAsMTcgKzUwLDE3IEBACiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICBVUkwgc2VydmljZUluZm8gPSBuZXcgVVJMIChhcmdzWzBdKTsKICAgICAgICAgICAgICAgICBVUkxDb25uZWN0aW9uIGNvbiA9IHNlcnZpY2VJbmZvLm9wZW5Db25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoY29uLmdldElucHV0U3RyZWFtKCkpKTsgCisgICAgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoY29uLmdldElucHV0U3RyZWFtKCkpKTsKIAogICAgICAgICAgICAgICAgIFN0cmluZyBpbnB1dExpbmU7Ci0gICAgICAgICAgICAgICAgaW50IGluZGV4PTA7IAorICAgICAgICAgICAgICAgIGludCBpbmRleD0wOwogICAgICAgICAgICAgICAgIHdoaWxlICgoaW5wdXRMaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIGlmICgoaW5kZXg9IGlucHV0TGluZS5pbmRleE9mKCJocmVmPSIpKT4wKXsKIAotICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB1cmwgPSBpbnB1dExpbmUuc3Vic3RyaW5nKGluZGV4KzEpOyAgCisgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHVybCA9IGlucHV0TGluZS5zdWJzdHJpbmcoaW5kZXgrMSk7CiAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVybC5pbmRleE9mKCJodHRwOiIpPjApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpid3NpbndhcndpdGh3c2RsIiwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaW5wdXRMaW5lKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid3NpbndhcndpdGh3c2RsL2VuZHBvaW50L0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3c2lud2Fyd2l0aHdzZGwvZW5kcG9pbnQvSGVsbG8uamF2YQppbmRleCAzNGFiNjVmLi41YzY0MDUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3c2lud2Fyd2l0aHdzZGwvZW5kcG9pbnQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3c2lud2Fyd2l0aHdzZGwvZW5kcG9pbnQvSGVsbG8uamF2YQpAQCAtMzAsOSArMzAsOSBAQAogQFJlc291cmNlCiAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjOwogCi0JcHVibGljIEhlbGxvKCkge30KKyAgICBwdWJsaWMgSGVsbG8oKSB7fQogCi0JcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7Ci0JCXJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvOwotCX0KKyAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKKyAgICAgICAgcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvICIgKyB3aG87CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid3NpbndhcndpdGh3c2RsL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3c2lud2Fyd2l0aHdzZGwvd2ViLnhtbAppbmRleCBhYWU1MjdlLi5mYmEwOTAyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3c2lud2Fyd2l0aHdzZGwvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3c2lud2Fyd2l0aHdzZGwvd2ViLnhtbApAQCAtMTgsMTAgKzE4LDEwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2V4Y2VwdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9leGNlcHRpb24vYnVpbGQueG1sCmluZGV4IDMwNDk0ZjcuLjZhYTIwMTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2V4Y2VwdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZXhjZXB0aW9uL2J1aWxkLnhtbApAQCAtMzQsNiArMzQsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGZhaWxlZCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZXhjZXB0aW9uL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2V4Y2VwdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYWM2ZTNiZC4uYjhlOTBiZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZXhjZXB0aW9uL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9leGNlcHRpb24vY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMiwxMCArMzIsMTAgQEAKICAgICAgICAgc3RhdGljIEhlbGxvSW1wbFNlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImVqYi1leGNlcHRpb24iKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpiLWV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItZXhjZXB0aW9uIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItZXhjZXB0aW9uIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQzLDE1ICs0MywxNSBAQAogICAgICAgICAgICAgICAgIEhlbGxvSW1wbCBwb3J0ID0gc2VydmljZS5nZXRIZWxsb0ltcGxQb3J0KCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKLQkJICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJTaW1wbGUtQW5ub3RhdGlvbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIH0KIAotCQkvLyB3ZSB3ZXJlIHN1cHBvc2VkIHRvIGZhaWwgIQorICAgICAgICAvLyB3ZSB3ZXJlIHN1cHBvc2VkIHRvIGZhaWwgIQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamItZXhjZXB0aW9uIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCBleGNlcHRpb24gIiArIGUuZ2V0TWVzc2FnZSgpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2V4Y2VwdGlvbi9lbmRwb2ludC9IZWxsb0ltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2V4Y2VwdGlvbi9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQppbmRleCA3MDA4NGFjLi5hOGY3YjEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9leGNlcHRpb24vZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZXhjZXB0aW9uL2VuZHBvaW50L0hlbGxvSW1wbC5qYXZhCkBAIC0yNCw2ICsyNCw2IEBACiBwdWJsaWMgY2xhc3MgSGVsbG9JbXBsIHsKIAogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgewotCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJIGFtIGEgYmFkIGJhZCBlamIgZW5kcG9pbnQiKTsKKyAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSSBhbSBhIGJhZCBiYWQgZWpiIGVuZHBvaW50Iik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvaW52YWxpZG1ldGhvZGluamVjdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9pbnZhbGlkbWV0aG9kaW5qZWN0aW9uL2J1aWxkLnhtbAppbmRleCA4YjJmNTc2Li5hNTQ1MWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9pbnZhbGlkbWV0aG9kaW5qZWN0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9pbnZhbGlkbWV0aG9kaW5qZWN0aW9uL2J1aWxkLnhtbApAQCAtMzQsNiArMzQsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGZhaWxlZCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvaW52YWxpZG1ldGhvZGluamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9pbnZhbGlkbWV0aG9kaW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAwYTFlZDg0Li5mYTYzNzgyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9pbnZhbGlkbWV0aG9kaW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9pbnZhbGlkbWV0aG9kaW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjksMjggKzI5LDI4IEBACiAgICAgICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgICAgIEBXZWJTZXJ2aWNlUmVmKHdzZGxMb2NhdGlvbj0iaHR0cDovL0hUVFBfSE9TVDpIVFRQX1BPUlQvSGVsbG9JbXBsU2VydmljZS9IZWxsb0ltcGw/V1NETCIpCi0Jc3RhdGljIHZvaWQgc2V0U2VydmljZShIZWxsb0ltcGxTZXJ2aWNlIHMpIHsKLQkKLQkJU3lzdGVtLm91dC5wcmludGxuKCJJbmplY3Rpb24gc3VjZXNzZnVsIHdpdGggIitzLmdldENsYXNzKCkudG9TdHJpbmcoKSk7Ci0JCXNlcnZpY2UgPSBzOwotCX0KKyAgICBzdGF0aWMgdm9pZCBzZXRTZXJ2aWNlKEhlbGxvSW1wbFNlcnZpY2UgcykgewogCi0JQFdlYlNlcnZpY2VSZWYod3NkbExvY2F0aW9uPSJodHRwOi8vSFRUUF9IT1NUOkhUVFBfUE9SVC9IZWxsb0ltcGxTZXJ2aWNlL0hlbGxvSW1wbD9XU0RMIikKLQlzdGF0aWMgaW50IHNldEZvbyhIZWxsb0ltcGxTZXJ2aWNlIHMpIHsKLQkJc2VydmljZTEgPSBzOwotCQlyZXR1cm4gMDsKLQl9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5qZWN0aW9uIHN1Y2Vzc2Z1bCB3aXRoICIrcy5nZXRDbGFzcygpLnRvU3RyaW5nKCkpOworICAgICAgICBzZXJ2aWNlID0gczsKKyAgICB9CiAKLQlAV2ViU2VydmljZVJlZih3c2RsTG9jYXRpb249Imh0dHA6Ly9IVFRQX0hPU1Q6SFRUUF9QT1JUL0hlbGxvSW1wbFNlcnZpY2UvSGVsbG9JbXBsP1dTREwiKQotCXN0YXRpYyB2b2lkIG15U2VydmljZShTdHJpbmcgZm9vLCBIZWxsb0ltcGxTZXJ2aWNlIHMpIHsKLQkJc2VydmljZTIgPSBzOwotCX0KKyAgICBAV2ViU2VydmljZVJlZih3c2RsTG9jYXRpb249Imh0dHA6Ly9IVFRQX0hPU1Q6SFRUUF9QT1JUL0hlbGxvSW1wbFNlcnZpY2UvSGVsbG9JbXBsP1dTREwiKQorICAgIHN0YXRpYyBpbnQgc2V0Rm9vKEhlbGxvSW1wbFNlcnZpY2UgcykgeworICAgICAgICBzZXJ2aWNlMSA9IHM7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEBXZWJTZXJ2aWNlUmVmKHdzZGxMb2NhdGlvbj0iaHR0cDovL0hUVFBfSE9TVDpIVFRQX1BPUlQvSGVsbG9JbXBsU2VydmljZS9IZWxsb0ltcGw/V1NETCIpCisgICAgc3RhdGljIHZvaWQgbXlTZXJ2aWNlKFN0cmluZyBmb28sIEhlbGxvSW1wbFNlcnZpY2UgcykgeworICAgICAgICBzZXJ2aWNlMiA9IHM7CisgICAgfQogCiAgICAgICAgIEBXZWJTZXJ2aWNlUmVmKHdzZGxMb2NhdGlvbj0iaHR0cDovL0hUVFBfSE9TVDpIVFRQX1BPUlQvSGVsbG9JbXBsU2VydmljZS9IZWxsb0ltcGw/V1NETCIpCi0Jdm9pZCBzZXRNeVNlcnZpY2UoSGVsbG9JbXBsU2VydmljZSBzKSB7Ci0JCi0JCXNlcnZpY2UzID0gczsKLQl9CisgICAgdm9pZCBzZXRNeVNlcnZpY2UoSGVsbG9JbXBsU2VydmljZSBzKSB7CisKKyAgICAgICAgc2VydmljZTMgPSBzOworICAgIH0KIAogCiAgICAgICAgIHN0YXRpYyBIZWxsb0ltcGxTZXJ2aWNlIHNlcnZpY2UxPW51bGw7CkBAIC02MywyOCArNjMsMjggQEAKICAgICAgICAgc3RhdGljIEhlbGxvSW1wbFNlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndzLWVqYi1pbnZhbGlkbWV0aG9kaW5qZWN0aW9uIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndzLWVqYi1pbnZhbGlkbWV0aG9kaW5qZWN0aW9uIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoIndzLWVqYi1pbnZhbGlkbWV0aG9kaW5qZWN0aW9uIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3cy1lamItaW52YWxpZG1ldGhvZGluamVjdGlvbiIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgICAgICB0cnkgewotCQlpZiAoc2VydmljZTEhPW51bGwgfHwgc2VydmljZTIhPW51bGwgfHwgc2VydmljZTMhPW51bGwpIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmFpbGVkIDogaW52YWxpZCBpbmplY3Rpb24gbWV0aG9kIGdvdCBpbmplY3RlZCAhIik7CisgICAgICAgIGlmIChzZXJ2aWNlMSE9bnVsbCB8fCBzZXJ2aWNlMiE9bnVsbCB8fCBzZXJ2aWNlMyE9bnVsbCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGYWlsZWQgOiBpbnZhbGlkIGluamVjdGlvbiBtZXRob2QgZ290IGluamVjdGVkICEiKTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndzLWVqYi1pbnZhbGlkbWV0aG9kaW5qZWN0aW9uIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzIDogaW52YWxpZCByZWZlcmVuY2VzIHdlcmUgbm90IGluamVjdGVkIik7Ci0gCSAgICAgICAgfQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzIDogaW52YWxpZCByZWZlcmVuY2VzIHdlcmUgbm90IGluamVjdGVkIik7CisgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIEhlbGxvSW1wbCBwb3J0ID0gc2VydmljZS5nZXRIZWxsb0ltcGxQb3J0KCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKLQkJICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3cy1lamItaW52YWxpZG1ldGhvZGluamVjdGlvbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid3MtZWpiLWludmFsaWRtZXRob2RpbmplY3Rpb24iLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50LTIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC0yL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGFhOGUxMC4uYTFkMGIyZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50LTIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQtMi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw4ICsxNSw4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJsaWJkZXBlbmRlbnQtMiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC0yL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC0yL2J1aWxkLnhtbAppbmRleCA0ODE5OWRjLi45MTFjNjVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQtMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50LTIvYnVpbGQueG1sCkBAIC03MCw4ICs3MCw4IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2ltcG9ydC5hcmdzIgogICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCBodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS9IZWxsb0ltcGxTZXJ2aWNlL0hlbGxvSW1wbD9XU0RMIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICA8L3RhcmdldD4KIApAQCAtODIsNyArODIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50Ij4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWNsaWVudCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQtY2xhc3MiIHZhbHVlPSJjbGllbnQuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQtMi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQtMi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOTk5NTE4Ni4uNjFhZmExNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50LTIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC0yL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzcsMjEgKzM3LDIxIEBACiAgICAgICAgIHN0YXRpYyBIZWxsb0ltcGxTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamItbGliZGVwZW5kZW50LTItc2VydmljZSIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamItbGliZGVwZW5kZW50LTItc2VydmljZSIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1N5bmNUZXN0KCk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItbGliZGVwZW5kZW50LTItc2VydmljZSIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWxpYmRlcGVuZGVudC0yLXNlcnZpY2UiKTsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyB2b2lkIGRvU3luY1Rlc3QoKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIEhlbGxvSW1wbCBwb3J0ID0gc2VydmljZS5nZXRIZWxsb0ltcGxQb3J0KCk7CiAgICAgICAgICAgICAgICAgUmV0VmFsIHJldCA9IHBvcnQuc2F5SGVsbG8oIkhpIExpYkRlcGVuZGVudCIpOwotCQlpZihyZXQuZ2V0UmV0VmFsKCkuaW5kZXhPZigiTGliRGVwIikgPT0gLTEpIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV1JPTkcgR1JFRVRJTkcgIiArIHJldC5nZXRSZXRWYWwoKSk7CisgICAgICAgIGlmKHJldC5nZXRSZXRWYWwoKS5pbmRleE9mKCJMaWJEZXAiKSA9PSAtMSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXUk9ORyBHUkVFVElORyAiICsgcmV0LmdldFJldFZhbCgpKTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYi1saWJkZXBlbmRlbnQtMi1zZXJ2aWNlLXRlc3QiLCBzdGF0LkZBSUwpOwotCQkgICAgcmV0dXJuOwotCQl9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0LmdldFJldFZhbCgpKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiLWxpYmRlcGVuZGVudC0yLXNlcnZpY2UtdGVzdCIsIHN0YXQuUEFTUyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA4NTA4NTIuLjA0MTczNTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw4ICsxNSw4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJsaWJkZXBlbmRlbnQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50L2J1aWxkLnhtbAppbmRleCA5YTM3ZDU4Li45OTVjZGI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC9idWlsZC54bWwKQEAgLTY5LDggKzY5LDggQEAKICAgICAgICAgPHBhcmFtIG5hbWU9IndzaW1wb3J0LmFyZ3MiCiAgICAgICAgICAgICAgICB2YWx1ZT0iLWtlZXAgIC1YZW5kb3JzZWQgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IGh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L0hlbGxvSW1wbFNlcnZpY2UvSGVsbG9JbXBsP1dTREwiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIDxqYXZhYyB2ZXJib3NlPSJ0cnVlIiBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy93ZWJzZXJ2aWNlcy1vc2dpLmphcjoke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMvd2Vic2VydmljZXMtYXBpLW9zZ2kuamFyOiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy9qYXhiLW9zZ2kuamFyOiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy9qYXhiLWFwaS1vc2dpLmphciIgCisgICAgICA8amF2YWMgdmVyYm9zZT0idHJ1ZSIgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy93ZWJzZXJ2aWNlcy1vc2dpLmphcjoke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMvd2Vic2VydmljZXMtYXBpLW9zZ2kuamFyOiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy9qYXhiLW9zZ2kuamFyOiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy9qYXhiLWFwaS1vc2dpLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICA8L3RhcmdldD4KIApAQCAtODYsNyArODYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50Ij4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWNsaWVudCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQtY2xhc3MiIHZhbHVlPSJjbGllbnQuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50L2NsaWVudC9DbGllbnQuamF2YQppbmRleCBkYWRiYTY2Li4zNTEwMzc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTM3LDEwICszNywxMCBAQAogICAgICAgIC8vIHN0YXRpYyBIZWxsb0ltcGxTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamItbGliZGVwZW5kZW50LXNlcnZpY2UiKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpiLWxpYmRlcGVuZGVudC1zZXJ2aWNlIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvU3luY1Rlc3QoKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1saWJkZXBlbmRlbnQtc2VydmljZSIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWxpYmRlcGVuZGVudC1zZXJ2aWNlIik7CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgdm9pZCBkb1N5bmNUZXN0KCkgewpAQCAtNDgsMTEgKzQ4LDExIEBACiAgICAgICAgICAgICAgICAgSGVsbG9JbXBsU2VydmljZSBzZXJ2aWNlID0gbmV3IEhlbGxvSW1wbFNlcnZpY2UoKTsKICAgICAgICAgICAgICAgICBIZWxsb0ltcGwgcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9JbXBsUG9ydCgpOwogICAgICAgICAgICAgICAgIFJldFZhbCByZXQgPSBwb3J0LnNheUhlbGxvKCJIaSBMaWJEZXBlbmRlbnQiKTsKLQkJaWYocmV0LmdldFJldFZhbCgpLmluZGV4T2YoIkxpYkRlcCIpID09IC0xKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldST05HIEdSRUVUSU5HICIgKyByZXQuZ2V0UmV0VmFsKCkpOworICAgICAgICBpZihyZXQuZ2V0UmV0VmFsKCkuaW5kZXhPZigiTGliRGVwIikgPT0gLTEpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV1JPTkcgR1JFRVRJTkcgIiArIHJldC5nZXRSZXRWYWwoKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamItbGliZGVwZW5kZW50LXNlcnZpY2UtdGVzdCIsIHN0YXQuRkFJTCk7Ci0JCSAgICByZXR1cm47Ci0JCX0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQuZ2V0UmV0VmFsKCkpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamItbGliZGVwZW5kZW50LXNlcnZpY2UtdGVzdCIsIHN0YXQuUEFTUyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9sb2NhbHJlbW90ZWVqYndlYnNlcnZpY2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbG9jYWxyZW1vdGVlamJ3ZWJzZXJ2aWNlL2J1aWxkLnhtbAppbmRleCBmN2NhNDM4Li42ZGQwZGZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9sb2NhbHJlbW90ZWVqYndlYnNlcnZpY2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xvY2FscmVtb3RlZWpid2Vic2VydmljZS9idWlsZC54bWwKQEAgLTIyLDcgKzIyLDcgQEAKIF0+CiAKIDxwcm9qZWN0IG5hbWU9IkhlbGxvIiBkZWZhdWx0PSJjb3JlIiBiYXNlZGlyPSIuIj4KLSAKKwogCiAgICAgJmNvbW1vbkJ1aWxkOwogICAgIDxwcm9wZXJ0eSBuYW1lPSJzcmMtbmFtZSIgdmFsdWU9ImVuZHBvaW50L1dlYlNlcnZpY2VFSkIuamF2YSIvPgpAQCAtMzIsMzAgKzMyLDMwIEBACiAKIAogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS11bmRlcGxveSI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJhdXRvdW5kZXBsb3ktZmlsZSI+Ci0JCTxwYXJhbSBuYW1lPSJmaWxlbmFtZSIgdmFsdWU9IkVqYkNsaWVudC5qYXIiLz4KLQk8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJhdXRvdW5kZXBsb3ktZmlsZSI+Ci0JCTxwYXJhbSBuYW1lPSJmaWxlbmFtZSIgdmFsdWU9IldlYlNlcnZpY2VFSkIuamFyIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYXV0b3VuZGVwbG95LWZpbGUiPgorICAgICAgICA8cGFyYW0gbmFtZT0iZmlsZW5hbWUiIHZhbHVlPSJFamJDbGllbnQuamFyIi8+CisgICAgPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYXV0b3VuZGVwbG95LWZpbGUiPgorICAgICAgICA8cGFyYW0gbmFtZT0iZmlsZW5hbWUiIHZhbHVlPSJXZWJTZXJ2aWNlRUpCLmphciIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogCiAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLXJ1biI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjbGVhbiIvPgotCTxhbnRjYWxsIHRhcmdldD0id3NkbC1pbXBvcnQiPgotCQk8cGFyYW0gbmFtZT0ic2VydmVyIiB2YWx1ZT0iV2ViU2VydmljZUVKQiIvPgotCQk8cGFyYW0gbmFtZT0icG9ydCIgdmFsdWU9IldlYlNlcnZpY2VFSkIiLz4KLQk8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbiIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0id3NkbC1pbXBvcnQiPgorICAgICAgICA8cGFyYW0gbmFtZT0ic2VydmVyIiB2YWx1ZT0iV2ViU2VydmljZUVKQiIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icG9ydCIgdmFsdWU9IldlYlNlcnZpY2VFSkIiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIKICAgICAgICAgICAgIGluY2x1ZGVzPSJlamIvSGVsbG9FSkIuamF2YSI+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJjbGFzc3BhdGgiLz4KICAgICAgICAgPC9qYXZhYz4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS9FamJDbGllbnQuamFyIgotCSAgICBiYXNlZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiCi0JICAgIGluY2x1ZGVzPSJlamIvKiosZW5kcG9pbnQvKioiLz4KLQk8d2FpdGZvciBtYXh3YWl0PSIxMDAiIG1heHdhaXR1bml0PSJzZWNvbmQiPgotICAgICAgIAkgICAgPG9yPgorICAgICAgICBiYXNlZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiCisgICAgICAgIGluY2x1ZGVzPSJlamIvKiosZW5kcG9pbnQvKioiLz4KKyAgICA8d2FpdGZvciBtYXh3YWl0PSIxMDAiIG1heHdhaXR1bml0PSJzZWNvbmQiPgorICAgICAgICAgICAgICAgPG9yPgogICAgICAgICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS9FamJDbGllbnQuamFyX2RlcGxveWVkIi8+CiAgICAgICAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95L0VqYkNsaWVudC5qYXJfZGVwbG95RmFpbGVkIi8+CiAgICAgICAgICAgICA8L29yPgpAQCAtNjYsMTcgKzY2LDE3IEBACiAgICAgICAgIDxjb25kaXRpb24gcHJvcGVydHk9ImRlcGxveV9mYWlsZWQiPgogICAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95L0VqYkNsaWVudC5qYXJfZGVwbG95RmFpbGVkIi8+CiAgICAgICAgIDwvY29uZGl0aW9uPgotCTxmYWlsIGlmPSJkZXBsb3lfZmFpbGVkIiBtZXNzYWdlPSJEZXBsb3ltZW50IGZhaWxlZCIvPgorICAgIDxmYWlsIGlmPSJkZXBsb3lfZmFpbGVkIiBtZXNzYWdlPSJEZXBsb3ltZW50IGZhaWxlZCIvPgogICAgICAgICA8YmFzZW5hbWUgZmlsZT0iJHtjbGllbnQtc3JjLW5hbWV9IiBwcm9wZXJ0eT0iY2xpZW50IiBzdWZmaXg9Ii5qYXZhIi8+CiAgICAgICAgIDxkaXJuYW1lIGZpbGU9IiR7Y2xpZW50LXNyYy1uYW1lfSIgcHJvcGVydHk9ImNsaWVudC1kaXJlY3RvcnkiLz4KLSAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7Y2xpZW50LWRpcmVjdG9yeX0iIHByb3BlcnR5PSJjbGllbnQtcGtnLW5hbWUiLz4gCisgICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke2NsaWVudC1kaXJlY3Rvcnl9IiBwcm9wZXJ0eT0iY2xpZW50LXBrZy1uYW1lIi8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGllbnQtY2xhc3MtbmFtZSIgdmFsdWU9IiR7Y2xpZW50LXBrZy1uYW1lfS8ke2NsaWVudH0uY2xhc3MiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY2xpZW50Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNsaWVudCIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIGFwcGNsaWVudCB3aXRoICR7Y2xpZW50LXBrZy1uYW1lfS4ke2NsaWVudH0iLz4KICAgICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIvPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hcHBjbGllbnQiIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIj4KLSAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydD0ke29yYi5wb3J0fSIvPiAKLSAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y2xpZW50LXBrZy1uYW1lfS4ke2NsaWVudH0iLz4gICAgCisgICAgICAgICAgICA8YXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y2xpZW50LXBrZy1uYW1lfS4ke2NsaWVudH0iLz4KICAgICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgogCkBAIC04Niw2ICs4Niw2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJlcG9ydC1mYWlsdXJlIj4KICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3QgRkFJTEVEIi8+Ci0gICAgPC90YXJnZXQ+ICAgCQotICAgIAorICAgIDwvdGFyZ2V0PgorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9sb2NhbHJlbW90ZWVqYndlYnNlcnZpY2UvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbG9jYWxyZW1vdGVlamJ3ZWJzZXJ2aWNlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAxZWY3YTEzLi5lODc4ZTdjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9sb2NhbHJlbW90ZWVqYndlYnNlcnZpY2UvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xvY2FscmVtb3RlZWpid2Vic2VydmljZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY2xpZW50OwogCiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCOwotaW1wb3J0IGVqYi5IZWxsbzsgCitpbXBvcnQgZWpiLkhlbGxvOwogCiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKQEAgLTI3LDI0ICsyNywyNCBAQAogICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgICAgICBARUpCKG1hcHBlZE5hbWU9ImVqYi5IZWxsbyIpCi0Jc3RhdGljIEhlbGxvIGhlbGxvOworICAgIHN0YXRpYyBIZWxsbyBoZWxsbzsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImxvY2FscmVtb3RlZWpid2Vic2VydmljZS1pc3N1ZSIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJsb2NhbHJlbW90ZWVqYndlYnNlcnZpY2UtaXNzdWUiKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgibG9jYWxyZW1vdGVlamJ3ZWJzZXJ2aWNlLWlzc3VlIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJsb2NhbHJlbW90ZWVqYndlYnNlcnZpY2UtaXNzdWUiKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7aTwxMDtpKyspIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IGhlbGxvLmludm9rZSgiSGVsbG8gVGVzdGVyICEiKTsKLQkJICAgIGlmKHJldC5pbmRleE9mKCJIZWxsbyBUZXN0ZXIiKSA9PSAtMSkgeworICAgICAgICAgICAgaWYocmV0LmluZGV4T2YoIkhlbGxvIFRlc3RlciIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiU2ltcGxlLUFubm90YXRpb24iLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FscmVtb3RlZWpid2Vic2VydmljZS1pc3N1ZSIsIHN0YXQuUEFTUyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9sb2NhbHJlbW90ZWVqYndlYnNlcnZpY2UvZWpiL0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9sb2NhbHJlbW90ZWVqYndlYnNlcnZpY2UvZWpiL0hlbGxvLmphdmEKaW5kZXggODZhZDQ0Zi4uODZlZDY4ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbG9jYWxyZW1vdGVlamJ3ZWJzZXJ2aWNlL2VqYi9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xvY2FscmVtb3RlZWpid2Vic2VydmljZS9lamIvSGVsbG8uamF2YQpAQCAtMjAsNSArMjAsNSBAQAogCiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIEhlbGxvIHsKLQlwdWJsaWMgU3RyaW5nIGludm9rZShTdHJpbmcgbXNnKTsKKyAgICBwdWJsaWMgU3RyaW5nIGludm9rZShTdHJpbmcgbXNnKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xvY2FscmVtb3RlZWpid2Vic2VydmljZS9lamIvSGVsbG9FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xvY2FscmVtb3RlZWpid2Vic2VydmljZS9lamIvSGVsbG9FSkIuamF2YQppbmRleCBkOTVmMzkxLi45NTA3Zjk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9sb2NhbHJlbW90ZWVqYndlYnNlcnZpY2UvZWpiL0hlbGxvRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbG9jYWxyZW1vdGVlamJ3ZWJzZXJ2aWNlL2VqYi9IZWxsb0VKQi5qYXZhCkBAIC0yMiwxOCArMjIsMTggQEAKIGltcG9ydCBlbmRwb2ludC5XZWJTZXJ2aWNlRUpCU2VydmljZTsKIGltcG9ydCBlbmRwb2ludC5XZWJTZXJ2aWNlRUpCOwogCi1AU3RhdGVsZXNzIAorQFN0YXRlbGVzcwogcHVibGljIGNsYXNzIEhlbGxvRUpCIGltcGxlbWVudHMgSGVsbG8gewogCiAKICAgIEBXZWJTZXJ2aWNlUmVmCiAgICBXZWJTZXJ2aWNlRUpCU2VydmljZSB3ZWJTZXJ2aWNlOwotIAorCiAgICAgcHVibGljIFN0cmluZyBpbnZva2UoU3RyaW5nIHN0cmluZykgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9rZWQgd2l0aCAiICsgc3RyaW5nKTsgCi0JU3lzdGVtLm91dC5wcmludGxuKCJnZXR0aW5nIHRoZSBwb3J0IG5vdyBmcm9tICIgKyB3ZWJTZXJ2aWNlKTsKLQlXZWJTZXJ2aWNlRUpCIGVqYiA9IHdlYlNlcnZpY2UuZ2V0V2ViU2VydmljZUVKQlBvcnQoKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImdvdCAiICsgZWpiKTsKLQlyZXR1cm4gZWpiLnNheUhlbGxvKHN0cmluZyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tlZCB3aXRoICIgKyBzdHJpbmcpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0dGluZyB0aGUgcG9ydCBub3cgZnJvbSAiICsgd2ViU2VydmljZSk7CisgICAgV2ViU2VydmljZUVKQiBlamIgPSB3ZWJTZXJ2aWNlLmdldFdlYlNlcnZpY2VFSkJQb3J0KCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJnb3QgIiArIGVqYik7CisgICAgcmV0dXJuIGVqYi5zYXlIZWxsbyhzdHJpbmcpOwogICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbG9jYWxyZW1vdGVlamJ3ZWJzZXJ2aWNlL2VuZHBvaW50L05ld1Nlc3Npb25CZWFuTG9jYWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xvY2FscmVtb3RlZWpid2Vic2VydmljZS9lbmRwb2ludC9OZXdTZXNzaW9uQmVhbkxvY2FsLmphdmEKaW5kZXggYjliNTcyZi4uOWU2YTliNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbG9jYWxyZW1vdGVlamJ3ZWJzZXJ2aWNlL2VuZHBvaW50L05ld1Nlc3Npb25CZWFuTG9jYWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9sb2NhbHJlbW90ZWVqYndlYnNlcnZpY2UvZW5kcG9pbnQvTmV3U2Vzc2lvbkJlYW5Mb2NhbC5qYXZhCkBAIC0yNCw2ICsyNCw2IEBACiAgKi8KIEBMb2NhbAogcHVibGljIGludGVyZmFjZSBOZXdTZXNzaW9uQmVhbkxvY2FsIHsKLSAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xvY2FscmVtb3RlZWpid2Vic2VydmljZS9lbmRwb2ludC9OZXdTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbG9jYWxyZW1vdGVlamJ3ZWJzZXJ2aWNlL2VuZHBvaW50L05ld1Nlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggNjM0NDQ0MC4uMDJmOTI1NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbG9jYWxyZW1vdGVlamJ3ZWJzZXJ2aWNlL2VuZHBvaW50L05ld1Nlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbG9jYWxyZW1vdGVlamJ3ZWJzZXJ2aWNlL2VuZHBvaW50L05ld1Nlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI0LDYgKzI0LDYgQEAKICAqLwogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBOZXdTZXNzaW9uQmVhblJlbW90ZSB7Ci0gICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tZXNzYWdlY3R4dC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tZXNzYWdlY3R4dC9idWlsZC54bWwKaW5kZXggMzA0OTRmNy4uNmFhMjAxMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbWVzc2FnZWN0eHQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21lc3NhZ2VjdHh0L2J1aWxkLnhtbApAQCAtMzQsNiArMzQsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGZhaWxlZCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbWVzc2FnZWN0eHQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbWVzc2FnZWN0eHQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDk4Mzc0NTYuLmU3OWNlYmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21lc3NhZ2VjdHh0L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tZXNzYWdlY3R4dC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMyLDEwICszMiwxMCBAQAogICAgICAgICBzdGF0aWMgSGVsbG9JbXBsU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtZWpiLW1zZ2N0eHQiKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtZWpiLW1zZ2N0eHQiKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtZWpiLW1zZ2N0eHQiKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWVqYi1tc2djdHh0Iik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQzLDExICs0MywxMSBAQAogICAgICAgICAgICAgICAgIEhlbGxvSW1wbCBwb3J0ID0gc2VydmljZS5nZXRIZWxsb0ltcGxQb3J0KCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKLQkJICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamItbXNnY3R4dCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiLW1zZ2N0eHQiLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbWVzc2FnZWN0eHQvZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tZXNzYWdlY3R4dC9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQppbmRleCA5MWY2NDU5Li41NmM3ZDM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tZXNzYWdlY3R4dC9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tZXNzYWdlY3R4dC9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQpAQCAtMzAsMTEgKzMwLDExIEBACiAKIAogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgewotCWlmKGVqYnNjICE9IG51bGwpIHsKKyAgICBpZihlamJzYyAhPSBudWxsKSB7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlamJzYy5nZXRNZXNzYWdlQ29udGV4dCgpKTsKICAgICAgICAgICAgaWYgKGVqYnNjLmdldE1lc3NhZ2VDb250ZXh0KCkgaW5zdGFuY2VvZiBqYWthcnRhLnhtbC53cy5oYW5kbGVyLk1lc3NhZ2VDb250ZXh0KXsKICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIllZWVlZIiArZWpic2MuZ2V0TWVzc2FnZUNvbnRleHQoKS5nZXRDbGFzcygpKTsKLSAgICAgICAgCXJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvOworICAgICAgICAgICAgcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvICIgKyB3aG87CiB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiTk5OICIgKyBlamJzYy5nZXRNZXNzYWdlQ29udGV4dCgpLmdldENsYXNzKCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbWV0aG9kaW5qZWN0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21ldGhvZGluamVjdGlvbi9idWlsZC54bWwKaW5kZXggYTk0ZmI1Mi4uYzk5NzdhNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbWV0aG9kaW5qZWN0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tZXRob2RpbmplY3Rpb24vYnVpbGQueG1sCkBAIC0zNCw2ICszNCw2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJlcG9ydC1mYWlsdXJlIj4KICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3QgZmFpbGVkIi8+Ci0gICAgPC90YXJnZXQ+ICAgCQotICAgIAorICAgIDwvdGFyZ2V0PgorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tZXRob2RpbmplY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbWV0aG9kaW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAxODE4OTQ5Li5lMGNhNTMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tZXRob2RpbmplY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21ldGhvZGluamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDE4ICsyOCwxOCBAQAogICAgICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCi0JQFdlYlNlcnZpY2VSZWYod3NkbExvY2F0aW9uPSJodHRwOi8vSFRUUF9IT1NUOkhUVFBfUE9SVC9IZWxsb0ltcGxTZXJ2aWNlL0hlbGxvSW1wbD9XU0RMIikKLQlzdGF0aWMgdm9pZCBzZXRTZXJ2aWNlKEhlbGxvSW1wbFNlcnZpY2UgcykgewotCQlzZXJ2aWNlID0gczsKLQl9CisgICAgQFdlYlNlcnZpY2VSZWYod3NkbExvY2F0aW9uPSJodHRwOi8vSFRUUF9IT1NUOkhUVFBfUE9SVC9IZWxsb0ltcGxTZXJ2aWNlL0hlbGxvSW1wbD9XU0RMIikKKyAgICBzdGF0aWMgdm9pZCBzZXRTZXJ2aWNlKEhlbGxvSW1wbFNlcnZpY2UgcykgeworICAgICAgICBzZXJ2aWNlID0gczsKKyAgICB9CiAKICAgICAgICAgc3RhdGljIEhlbGxvSW1wbFNlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndzLWVqYi1tZXRob2QtaW5qZWN0aW9uIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndzLWVqYi1tZXRob2QtaW5qZWN0aW9uIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoIndzLWVqYi1tZXRob2QtaW5qZWN0aW9uIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3cy1lamItbWV0aG9kLWluamVjdGlvbiIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CkBAIC00NywxMSArNDcsMTEgQEAKICAgICAgICAgICAgICAgICBIZWxsb0ltcGwgcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9JbXBsUG9ydCgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPDEwO2krKykgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7Ci0JCSAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid3MtZWpiLW1ldGhvZC1pbmplY3Rpb24iLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndzLWVqYi1tZXRob2QtaW5qZWN0aW9uIiwgc3RhdC5QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21zZ2N0eGludGVyY2VwdG9yL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21zZ2N0eGludGVyY2VwdG9yL2J1aWxkLnhtbAppbmRleCAwNmM3YWNjLi5hNGZiYzQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tc2djdHhpbnRlcmNlcHRvci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXNnY3R4aW50ZXJjZXB0b3IvYnVpbGQueG1sCkBAIC0zNCw2ICszNCw2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJlcG9ydC1mYWlsdXJlIj4KICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3QgZmFpbGVkIi8+Ci0gICAgPC90YXJnZXQ+ICAgCQotICAgIAorICAgIDwvdGFyZ2V0PgorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tc2djdHhpbnRlcmNlcHRvci9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tc2djdHhpbnRlcmNlcHRvci9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZDQ1NWMzYS4uMmFjYTI5MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXNnY3R4aW50ZXJjZXB0b3IvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21zZ2N0eGludGVyY2VwdG9yL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzIsMjEgKzMyLDIxIEBACiAgICAgICAgIHN0YXRpYyBIZWxsb0VKQlNlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIm1zZ2N0eHQtaW52b2NhdGlvbmhhbmRsZXJjdHh0Iik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIm1zZ2N0eHQtaW52b2NhdGlvbmhhbmRsZXJjdHh0Iik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoIm1zZ2N0eHQtaW52b2NhdGlvbmhhbmRsZXJjdHh0Iik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJtc2djdHh0LWludm9jYXRpb25oYW5kbGVyY3R4dCIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIEhlbGxvIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvRUpCUG9ydCgpOwogICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKLQkJaWYocmV0ID09IG51bGwpIHsKKyAgICAgICAgaWYocmV0ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibXNnY3R4dC1pbnZvY2F0aW9uaGFuZGxlcmN0eHQiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCX0KKyAgICAgICAgfQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtc2djdHh0LWludm9jYXRpb25oYW5kbGVyY3R4dCIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tc2djdHhpbnRlcmNlcHRvci9lbmRwb2ludC9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXNnY3R4aW50ZXJjZXB0b3IvZW5kcG9pbnQvSGVsbG8uamF2YQppbmRleCBkZDRiNjQyLi40YjhmOWVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tc2djdHhpbnRlcmNlcHRvci9lbmRwb2ludC9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21zZ2N0eGludGVyY2VwdG9yL2VuZHBvaW50L0hlbGxvLmphdmEKQEAgLTIxLDUgKzIxLDUgQEAKIEBXZWJTZXJ2aWNlCiBwdWJsaWMgaW50ZXJmYWNlIEhlbGxvIHsKIAotCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobyk7CisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21zZ2N0eGludGVyY2VwdG9yL2VuZHBvaW50L0hlbGxvRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tc2djdHhpbnRlcmNlcHRvci9lbmRwb2ludC9IZWxsb0VKQi5qYXZhCmluZGV4IDEwMjBhMWIuLjExYWEyYjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21zZ2N0eGludGVyY2VwdG9yL2VuZHBvaW50L0hlbGxvRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXNnY3R4aW50ZXJjZXB0b3IvZW5kcG9pbnQvSGVsbG9FSkIuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogCiAgICAgQEFyb3VuZEludm9rZQogICAgIHByaXZhdGUgT2JqZWN0IGludGVyY2VwdEJ1c2luZXNzTWV0aG9kKEludm9jYXRpb25Db250ZXh0IGludkN0eCkgewotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29udGV4dERhdGEiICsgaW52Q3R4LmdldENvbnRleHREYXRhKCkpOwogICAgICAgICAgICAgLy9UaGlzIGlzIGp1c3QgdG8gZ2V0IHRoZSBpbnZvY2F0aW9uIHRyYWNlCiAgICAgICAgICAgICAvL3JlbW92ZSBvbmNlIGJ1ZyBpcyBmaXhlZApAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KLQl9IGNhdGNoKFRocm93YWJsZSB0KSB7IHQucHJpbnRTdGFja1RyYWNlKCk7fQorICAgIH0gY2F0Y2goVGhyb3dhYmxlIHQpIHsgdC5wcmludFN0YWNrVHJhY2UoKTt9CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21zZ2N0eHQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXNnY3R4dC9idWlsZC54bWwKaW5kZXggMzA0OTRmNy4uNmFhMjAxMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXNnY3R4dC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXNnY3R4dC9idWlsZC54bWwKQEAgLTM0LDYgKzM0LDYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBmYWlsZWQiLz4KLSAgICA8L3RhcmdldD4gICAJCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21zZ2N0eHQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXNnY3R4dC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOTgzNzQ1Ni4uZTc5Y2ViYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXNnY3R4dC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXNnY3R4dC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMyLDEwICszMiwxMCBAQAogICAgICAgICBzdGF0aWMgSGVsbG9JbXBsU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtZWpiLW1zZ2N0eHQiKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtZWpiLW1zZ2N0eHQiKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtZWpiLW1zZ2N0eHQiKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWVqYi1tc2djdHh0Iik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQzLDExICs0MywxMSBAQAogICAgICAgICAgICAgICAgIEhlbGxvSW1wbCBwb3J0ID0gc2VydmljZS5nZXRIZWxsb0ltcGxQb3J0KCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKLQkJICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamItbXNnY3R4dCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiLW1zZ2N0eHQiLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXNnY3R4dC9lbmRwb2ludC9IZWxsb0ltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21zZ2N0eHQvZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEKaW5kZXggYzA2ZjE4My4uN2Q3MDc1ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXNnY3R4dC9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tc2djdHh0L2VuZHBvaW50L0hlbGxvSW1wbC5qYXZhCkBAIC0yOCwxMiArMjgsMTIgQEAKICAgICBAUmVzb3VyY2UgV2ViU2VydmljZUNvbnRleHQgZWpic2M7CiAKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkVKQiBXU0NUWFQgd3NjID0gIiArIGVqYnNjKTsKLQlqYWthcnRhLnhtbC53cy5oYW5kbGVyLk1lc3NhZ2VDb250ZXh0IG0gPSBlamJzYy5nZXRNZXNzYWdlQ29udGV4dCgpOwotCWlmKG0gPT0gbnVsbCkKLQkJcmV0dXJuICJXZWJTZXJ2aWNlIENvbnRleHQgaW5qZWN0aW9uIGZhaWxlZCI7Ci0JaWYoZWpic2MgIT0gbnVsbCkKLSAgICAgICAgCXJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRUpCIFdTQ1RYVCB3c2MgPSAiICsgZWpic2MpOworICAgIGpha2FydGEueG1sLndzLmhhbmRsZXIuTWVzc2FnZUNvbnRleHQgbSA9IGVqYnNjLmdldE1lc3NhZ2VDb250ZXh0KCk7CisgICAgaWYobSA9PSBudWxsKQorICAgICAgICByZXR1cm4gIldlYlNlcnZpY2UgQ29udGV4dCBpbmplY3Rpb24gZmFpbGVkIjsKKyAgICBpZihlamJzYyAhPSBudWxsKQorICAgICAgICAgICAgcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvICIgKyB3aG87CiAgICAgICAgIHJldHVybiAiRUpCIFdlYlNlcnZpY2VDb250ZXh0IGluamVjdGlvbiBmYWlsZWQiOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL211bHRpcG9ydC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZmI1MTI1Ni4uMzExZGQ3YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDggKzE1LDggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Im11bHRpcG9ydCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL211bHRpcG9ydC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvYnVpbGQueG1sCmluZGV4IGI4YzU0MjQuLmNmZDAwZjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL211bHRpcG9ydC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2J1aWxkLnhtbApAQCAtNjMsMTEgKzYzLDExIEBACiAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwiLz4KICAgICAgIDxjb3B5IGZpbGU9Ikh0dHBUZXN0U2VydmljZS53c2RsIiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIvPgotICAgICAgPGVjaG8gbWVzc2FnZT0ibXkgYnVpbGQgY2xhc3NlcyBkaXIgaXM6JHtidWlsZC5jbGFzc2VzLmRpcn0iIGxldmVsPSJ2ZXJib3NlIi8+IAorICAgICAgPGVjaG8gbWVzc2FnZT0ibXkgYnVpbGQgY2xhc3NlcyBkaXIgaXM6JHtidWlsZC5jbGFzc2VzLmRpcn0iIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIgogICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgaW5jbHVkZXM9InNlcnZpY2UvKiosTUVUQS1JTkYvKioiPgotICAgICAgPC9qYXI+ICAgICAgICAgICAgCisgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUtY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC03NywxNSArNzcsMTUgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2ltcG9ydC5hcmdzIgogICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC13c2RsbG9jYXRpb24gJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXVsdGlwb3J0L0h0dHBUZXN0U2VydmljZS53c2RsIC1iIGN1c3RvbWNsaWVudC54bWwgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IEh0dHBUZXN0U2VydmljZS53c2RsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIgCisgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1jbGllbnQiPgogICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50LWNsYXNzIiB2YWx1ZT0iY2xpZW50LkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL211bHRpcG9ydC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMjAxNWRlYy4uYjljNWUyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yMiw1MCArMjIsNTAgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLQlwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgICAgICBAV2ViU2VydmljZVJlZiBzdGF0aWMgSHR0cFRlc3RTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtYW5ub3RhdGlvbiIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1hbm5vdGF0aW9uIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgSGVsbG8gcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9Qb3J0KCk7Ci0JCUhlbGxvUmVxdWVzdCByZXEgPSBuZXcgSGVsbG9SZXF1ZXN0KCk7Ci0JCXJlcS5zZXRTdHJpbmcoIkZyb20gVmlqYXkgIik7Ci0JCUhlbGxvUmVzcG9uc2UgcmVzcCA9IHBvcnQuaGVsbG8ocmVxKTsKLQkJaWYocmVzcC5nZXRTdHJpbmcoKS5pbmRleE9mKCJGcm9tIFZpamF5IikgPT0gLTEpIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmVzcC5nZXRTdHJpbmcoKSk7Ci0JCSAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwotCQl9Ci0JCWlmKHJlc3AuZ2V0U3RyaW5nKCkuaW5kZXhPZigiSGVsbG8xIikgIT0gLTEpIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmVzcC5nZXRTdHJpbmcoKSk7Ci0JCSAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwotCQl9Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihyZXNwLmdldFN0cmluZygpKTsKKyAgICAgICAgSGVsbG9SZXF1ZXN0IHJlcSA9IG5ldyBIZWxsb1JlcXVlc3QoKTsKKyAgICAgICAgcmVxLnNldFN0cmluZygiRnJvbSBWaWpheSAiKTsKKyAgICAgICAgSGVsbG9SZXNwb25zZSByZXNwID0gcG9ydC5oZWxsbyhyZXEpOworICAgICAgICBpZihyZXNwLmdldFN0cmluZygpLmluZGV4T2YoIkZyb20gVmlqYXkiKSA9PSAtMSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXNwLmdldFN0cmluZygpKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CisgICAgICAgIH0KKyAgICAgICAgaWYocmVzcC5nZXRTdHJpbmcoKS5pbmRleE9mKCJIZWxsbzEiKSAhPSAtMSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXNwLmdldFN0cmluZygpKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CisgICAgICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJlc3AuZ2V0U3RyaW5nKCkpOwogICAgICAgICAgICAgICAgIEhlbGxvMSBwb3J0MSA9IHNlcnZpY2UuZ2V0SGVsbG8xUG9ydCgpOwotCQlIZWxsbzFSZXF1ZXN0IHJlcTEgPSBuZXcgSGVsbG8xUmVxdWVzdCgpOwotCQlyZXExLnNldFN0cmluZygiRnJvbSBWaWpheSAiKTsKLQkJSGVsbG8xUmVzcG9uc2UgcmVzcDEgPSBwb3J0MS5oZWxsbzEocmVxMSk7Ci0JCWlmKHJlc3AxLmdldFN0cmluZygpLmluZGV4T2YoIkZyb20gVmlqYXkiKSA9PSAtMSkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXNwMS5nZXRTdHJpbmcoKSk7Ci0JCSAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwotCQl9Ci0JCWlmKHJlc3AxLmdldFN0cmluZygpLmluZGV4T2YoIkhlbGxvMSIpID09IC0xKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJlc3AxLmdldFN0cmluZygpKTsKLQkJICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7Ci0JCX0KLQkJU3lzdGVtLm91dC5wcmludGxuKHJlc3AxLmdldFN0cmluZygpKTsKLQkJc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5QQVNTKTsKKyAgICAgICAgSGVsbG8xUmVxdWVzdCByZXExID0gbmV3IEhlbGxvMVJlcXVlc3QoKTsKKyAgICAgICAgcmVxMS5zZXRTdHJpbmcoIkZyb20gVmlqYXkgIik7CisgICAgICAgIEhlbGxvMVJlc3BvbnNlIHJlc3AxID0gcG9ydDEuaGVsbG8xKHJlcTEpOworICAgICAgICBpZihyZXNwMS5nZXRTdHJpbmcoKS5pbmRleE9mKCJGcm9tIFZpamF5IikgPT0gLTEpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmVzcDEuZ2V0U3RyaW5nKCkpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKKyAgICAgICAgfQorICAgICAgICBpZihyZXNwMS5nZXRTdHJpbmcoKS5pbmRleE9mKCJIZWxsbzEiKSA9PSAtMSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXNwMS5nZXRTdHJpbmcoKSk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOworICAgICAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXNwMS5nZXRTdHJpbmcoKSk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQogICAgICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL211bHRpcG9ydC9jdXN0b21jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2N1c3RvbWNsaWVudC54bWwKaW5kZXggN2MzMzcyZi4uOTlkZjYzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2N1c3RvbWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2N1c3RvbWNsaWVudC54bWwKQEAgLTIzLDkgKzIzLDkgQEAKICAgICAgICAgPHBhY2thZ2UgbmFtZT0iY2xpZW50Ii8+CiAgICAgPC9iaW5kaW5ncz4KIAotICAgIDxiaW5kaW5ncyBub2RlPSJuczE6ZGVmaW5pdGlvbnMvbnMxOnR5cGVzL3hzOnNjaGVtYVtAdGFyZ2V0TmFtZXNwYWNlPSdodHRwOi8vaHR0cHRlc3RzZXJ2aWNlLm9yZy90eXBlcyddIiAKLQl4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotCXhtbG5zOm5zMT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgorICAgIDxiaW5kaW5ncyBub2RlPSJuczE6ZGVmaW5pdGlvbnMvbnMxOnR5cGVzL3hzOnNjaGVtYVtAdGFyZ2V0TmFtZXNwYWNlPSdodHRwOi8vaHR0cHRlc3RzZXJ2aWNlLm9yZy90eXBlcyddIgorICAgIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKKyAgICB4bWxuczpuczE9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KICAgICAgICAgPG5zMjpzY2hlbWFCaW5kaW5ncyB4bWxuczpuczI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIiPgogICAgICAgICAgICAgPG5zMjpwYWNrYWdlIG5hbWU9ImNsaWVudCIvPgogICAgICAgICA8L25zMjpzY2hlbWFCaW5kaW5ncz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL211bHRpcG9ydC9jdXN0b21zZXJ2aWNlLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL211bHRpcG9ydC9jdXN0b21zZXJ2aWNlLnhtbAppbmRleCAyNDI2MTFiLi41OGM1NWUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvY3VzdG9tc2VydmljZS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2N1c3RvbXNlcnZpY2UueG1sCkBAIC0yMyw5ICsyMyw5IEBACiAgICAgICAgIDxwYWNrYWdlIG5hbWU9InNlcnZpY2UiLz4KICAgICA8L2JpbmRpbmdzPgogCi0gICAgPGJpbmRpbmdzIG5vZGU9Im5zMTpkZWZpbml0aW9ucy9uczE6dHlwZXMveHM6c2NoZW1hW0B0YXJnZXROYW1lc3BhY2U9J2h0dHA6Ly9odHRwdGVzdHNlcnZpY2Uub3JnL3R5cGVzJ10iIAotCXhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0JeG1sbnM6bnMxPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+CisgICAgPGJpbmRpbmdzIG5vZGU9Im5zMTpkZWZpbml0aW9ucy9uczE6dHlwZXMveHM6c2NoZW1hW0B0YXJnZXROYW1lc3BhY2U9J2h0dHA6Ly9odHRwdGVzdHNlcnZpY2Uub3JnL3R5cGVzJ10iCisgICAgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgorICAgIHhtbG5zOm5zMT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgogICAgICAgICA8bnMyOnNjaGVtYUJpbmRpbmdzIHhtbG5zOm5zMj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4YiI+CiAgICAgICAgICAgICA8bnMyOnBhY2thZ2UgbmFtZT0ic2VydmljZSIvPgogICAgICAgICA8L25zMjpzY2hlbWFCaW5kaW5ncz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL211bHRpcG9ydC9zZXJ2aWNlL0hlbGxvMUltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL211bHRpcG9ydC9zZXJ2aWNlL0hlbGxvMUltcGwuamF2YQppbmRleCBlYjg0N2NhLi45YTQ0ZWM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvc2VydmljZS9IZWxsbzFJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXVsdGlwb3J0L3NlcnZpY2UvSGVsbG8xSW1wbC5qYXZhCkBAIC0zOSw4ICszOSw4IEBACiAKICAgICBwdWJsaWMgSGVsbG8xUmVzcG9uc2UgaGVsbG8xKEhlbGxvMVJlcXVlc3QgcmVxKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8xLCAiICsgcmVxLmdldFN0cmluZygpICsgIiEiKTsKLQlIZWxsbzFSZXNwb25zZSByZXNwID0gbmV3IEhlbGxvMVJlc3BvbnNlKCk7Ci0JcmVzcC5zZXRTdHJpbmcoIkhlbGxvMSwgIiArIHJlcS5nZXRTdHJpbmcoKSArICIhIik7CisgICAgSGVsbG8xUmVzcG9uc2UgcmVzcCA9IG5ldyBIZWxsbzFSZXNwb25zZSgpOworICAgIHJlc3Auc2V0U3RyaW5nKCJIZWxsbzEsICIgKyByZXEuZ2V0U3RyaW5nKCkgKyAiISIpOwogICAgICAgICByZXR1cm4gcmVzcDsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvc2VydmljZS9IZWxsb0ltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL211bHRpcG9ydC9zZXJ2aWNlL0hlbGxvSW1wbC5qYXZhCmluZGV4IDY3ZGY0YmIuLjdjNmFiMGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL211bHRpcG9ydC9zZXJ2aWNlL0hlbGxvSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL211bHRpcG9ydC9zZXJ2aWNlL0hlbGxvSW1wbC5qYXZhCkBAIC0zOSw4ICszOSw4IEBACiAKICAgICBwdWJsaWMgSGVsbG9SZXNwb25zZSBoZWxsbyhIZWxsb1JlcXVlc3QgcmVxKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8sICIgKyByZXEuZ2V0U3RyaW5nKCkgKyAiISIpOwotCUhlbGxvUmVzcG9uc2UgcmVzcCA9IG5ldyBIZWxsb1Jlc3BvbnNlKCk7Ci0JcmVzcC5zZXRTdHJpbmcoIkhlbGxvLCAiICsgcmVxLmdldFN0cmluZygpICsgIiEiKTsKKyAgICBIZWxsb1Jlc3BvbnNlIHJlc3AgPSBuZXcgSGVsbG9SZXNwb25zZSgpOworICAgIHJlc3Auc2V0U3RyaW5nKCJIZWxsbywgIiArIHJlcS5nZXRTdHJpbmcoKSArICIhIik7CiAgICAgICAgIHJldHVybiByZXNwOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL25vaW50Zi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9ub2ludGYvYnVpbGQueG1sCmluZGV4IDMwNDk0ZjcuLjZhYTIwMTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL25vaW50Zi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbm9pbnRmL2J1aWxkLnhtbApAQCAtMzQsNiArMzQsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGZhaWxlZCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbm9pbnRmL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL25vaW50Zi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMTg4MTA1ZS4uNTVkZTY3MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbm9pbnRmL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9ub2ludGYvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMiwxMCArMzIsMTAgQEAKICAgICAgICAgc3RhdGljIEhlbGxvSW1wbFNlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLWVqYi1ub2ludGYtYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1lamItbm9pbnRmLWFubm90YXRpb24iKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtZWpiLW5vaW50Zi1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1lamItbm9pbnRmLWFubm90YXRpb24iKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewpAQCAtNDMsMTEgKzQzLDExIEBACiAgICAgICAgICAgICAgICAgSGVsbG9JbXBsIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvSW1wbFBvcnQoKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7aTwxMDtpKyspIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIpOwotCQkgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlNpbXBsZS1Bbm5vdGF0aW9uIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamItbm9pbnRmLWFubm90YXRpb24iLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbm9uYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL25vbmFtZS9idWlsZC54bWwKaW5kZXggMDZjN2FjYy4uYTRmYmM0OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbm9uYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9ub25hbWUvYnVpbGQueG1sCkBAIC0zNCw2ICszNCw2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJlcG9ydC1mYWlsdXJlIj4KICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3QgZmFpbGVkIi8+Ci0gICAgPC90YXJnZXQ+ICAgCQotICAgIAorICAgIDwvdGFyZ2V0PgorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9ub25hbWUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbm9uYW1lL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAyOWM0NDIxLi43ZGE5MmJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9ub25hbWUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL25vbmFtZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMyLDEwICszMiwxMCBAQAogICAgICAgICBzdGF0aWMgSGVsbG9FSkJTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1lamItbm9uYW1lLWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtZWpiLW5vbmFtZS1hbm5vdGF0aW9uIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWVqYi1ub25hbWUtYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtZWpiLW5vbmFtZS1hbm5vdGF0aW9uIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQzLDExICs0MywxMSBAQAogICAgICAgICAgICAgICAgIEhlbGxvIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvRUpCUG9ydCgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPDEwO2krKykgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7Ci0JCSAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiU2ltcGxlLUFubm90YXRpb24iLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYi1ub25hbWUtYW5ub3RhdGlvbiIsIHN0YXQuUEFTUyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9ub25hbWUvZW5kcG9pbnQvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL25vbmFtZS9lbmRwb2ludC9IZWxsby5qYXZhCmluZGV4IGRkNGI2NDIuLjRiOGY5ZWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL25vbmFtZS9lbmRwb2ludC9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL25vbmFtZS9lbmRwb2ludC9IZWxsby5qYXZhCkBAIC0yMSw1ICsyMSw1IEBACiBAV2ViU2VydmljZQogcHVibGljIGludGVyZmFjZSBIZWxsbyB7CiAKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pOworICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobyk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9vbmV3YXkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvb25ld2F5L2J1aWxkLnhtbAppbmRleCAwNmM3YWNjLi5hNGZiYzQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9vbmV3YXkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL29uZXdheS9idWlsZC54bWwKQEAgLTM0LDYgKzM0LDYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBmYWlsZWQiLz4KLSAgICA8L3RhcmdldD4gICAJCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL29uZXdheS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9vbmV3YXkvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDVkZWI2ZDIuLjNjNDIwZmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL29uZXdheS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvb25ld2F5L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzIsMTAgKzMyLDEwIEBACiAgICAgICAgIHN0YXRpYyBIZWxsb0VKQlNlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImVqYi1vbmV3YXktYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamItb25ld2F5LWFubm90YXRpb24iKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLW9uZXdheS1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItb25ld2F5LWFubm90YXRpb24iKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvb25ld2F5L2VuZHBvaW50L0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9vbmV3YXkvZW5kcG9pbnQvSGVsbG8uamF2YQppbmRleCAwMWNlZjQ2Li43ZDVjNDMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9vbmV3YXkvZW5kcG9pbnQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9vbmV3YXkvZW5kcG9pbnQvSGVsbG8uamF2YQpAQCAtMjUsNSArMjUsNSBAQAogCiAgICAgICAgIEBXZWJNZXRob2QKICAgICAgICAgQE9uZXdheQotCXB1YmxpYyB2b2lkIHNheUhlbGxvKFN0cmluZyB3aG8pOworICAgIHB1YmxpYyB2b2lkIHNheUhlbGxvKFN0cmluZyB3aG8pOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydGRlcGVuZGVuY3lub2luamVjdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0ZGVwZW5kZW5jeW5vaW5qZWN0aW9uL2J1aWxkLnhtbAppbmRleCBhOTRmYjUyLi5jOTk3N2E0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0ZGVwZW5kZW5jeW5vaW5qZWN0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0ZGVwZW5kZW5jeW5vaW5qZWN0aW9uL2J1aWxkLnhtbApAQCAtMzQsNiArMzQsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGZhaWxlZCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydGRlcGVuZGVuY3lub2luamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0ZGVwZW5kZW5jeW5vaW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA3ZmQ4OTA3Li5kMTg5OWU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0ZGVwZW5kZW5jeW5vaW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0ZGVwZW5kZW5jeW5vaW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzQsMzMgKzM0LDMzIEBACiAgICAgICAgIHN0YXRpYyBIZWxsb0ltcGwgcG9ydDsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndzLXBvcnRkZXBlbmRlbmN5LW5vLWluamVjdGlvbiIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3cy1wb3J0ZGVwZW5kZW5jeS1uby1pbmplY3Rpb24iKTsKICAgICAgICAgICAgIHRyeSB7Ci0JICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIAotICAgICAgICAJICAgIHBvcnQgPSAoSGVsbG9JbXBsKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9oZWxsb3BvcnQiKTsKLQkgICAgfSBjYXRjaChUaHJvd2FibGUgdCkgewotCQl0LnByaW50U3RhY2tUcmFjZSgpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRlcGVuZGVuY3kgbG9va3VwIGZhaWxlZCA6ICIgKyB0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndzLWRlcGVuZGVuY3ktbm8taW5qZWN0aW9uIiwgc3RhdC5GQUlMKTsJCQotCSAgICB9Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUG9ydCBpcyAiICsgcG9ydCk7Ci0JICAgIGlmIChwb3J0IT1udWxsKSB7Ci0JICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKLQkgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICB9Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3cy1wb3J0ZGVwZW5kZW5jeS1uby1pbmplY3Rpb24iKTsKKyAgICAgICAgICAgICAgICBwb3J0ID0gKEhlbGxvSW1wbCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvaGVsbG9wb3J0Iik7CisgICAgICAgIH0gY2F0Y2goVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZXBlbmRlbmN5IGxvb2t1cCBmYWlsZWQgOiAiICsgdC5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3cy1kZXBlbmRlbmN5LW5vLWluamVjdGlvbiIsIHN0YXQuRkFJTCk7CisgICAgICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQb3J0IGlzICIgKyBwb3J0KTsKKyAgICAgICAgaWYgKHBvcnQhPW51bGwpIHsKKyAgICAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOworICAgICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndzLXBvcnRkZXBlbmRlbmN5LW5vLWluamVjdGlvbiIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPDEwO2krKykgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7Ci0JCSAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid3MtcG9ydGRlcGVuZGVuY3ktbm8taW5qZWN0aW9uIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3cy1wb3J0ZGVwZW5kZW5jeS1uby1pbmplY3Rpb24iLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydGVqYmNsaWVudC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0ZWpiY2xpZW50L2J1aWxkLnhtbAppbmRleCBkNzYzNjMyLi5kNDI5YjIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0ZWpiY2xpZW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0ZWpiY2xpZW50L2J1aWxkLnhtbApAQCAtMjQsMzEgKzI0LDMxIEBACiA8cHJvamVjdCBuYW1lPSJtZXRob2RpbmplY3Rpb24iIGRlZmF1bHQ9ImNvcmUiIGJhc2VkaXI9Ii4iPgogCiAgICAgJmNvbW1vbkJ1aWxkOwotICAgIDxwcm9wZXJ0eSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiLz4gICAKKyAgICA8cHJvcGVydHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9InNyYy1uYW1lIiB2YWx1ZT0iZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iY2xpZW50LXNyYy1uYW1lIiB2YWx1ZT0iY2xpZW50L0NsaWVudC5qYXZhIi8+CiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLCBwcml2YXRlLWRlcGxveSwgcHJpdmF0ZS1ydW4sIHByaXZhdGUtdW5kZXBsb3ksIHJlcG9ydCIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWRlcGxveSI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3kiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ3c2RsLWltcG9ydCI+Ci0JCTxwYXJhbSBuYW1lPSJzZXJ2ZXIiIHZhbHVlPSJIZWxsb0ltcGwiLz4KLQkJPHBhcmFtIG5hbWU9InBvcnQiIHZhbHVlPSJIZWxsb0ltcGwiLz4KLQk8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3kiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ3c2RsLWltcG9ydCI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJzZXJ2ZXIiIHZhbHVlPSJIZWxsb0ltcGwiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InBvcnQiIHZhbHVlPSJIZWxsb0ltcGwiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIKICAgICAgICAgICAgIGluY2x1ZGVzPSJlamIvR2F0ZXdheUltcGwuamF2YSI+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJjbGFzc3BhdGgiLz4KICAgICAgICAgPC9qYXZhYz4KLSAJPG1rZGlyIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzL3dzZGwvd3NkbCIvPgotCTxnZXQgc3JjPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS9IZWxsb0ltcGxTZXJ2aWNlL0hlbGxvSW1wbD9XU0RMIiBkZXN0PSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMvL3dzZGwvd3NkbC9IZWxsb0ltcGxTZXJ2aWNlLndzZGwiLz4KKyAgICAgPG1rZGlyIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzL3dzZGwvd3NkbCIvPgorICAgIDxnZXQgc3JjPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS9IZWxsb0ltcGxTZXJ2aWNlL0hlbGxvSW1wbD9XU0RMIiBkZXN0PSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMvL3dzZGwvd3NkbC9IZWxsb0ltcGxTZXJ2aWNlLndzZGwiLz4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS9FamJDbGllbnQuamFyIgotCSAgICBiYXNlZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiCi0JICAgIGluY2x1ZGVzPSJlamIvKiosZW5kcG9pbnQvKioiPgotCSAgICA8bWV0YWluZiBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3Nlcy93c2RsIi8+Ci0JPC9qYXI+Ci0JPHdhaXRmb3IgbWF4d2FpdD0iMTAwIiBtYXh3YWl0dW5pdD0ic2Vjb25kIj4KLSAgICAgICAJICAgIDxvcj4KKyAgICAgICAgYmFzZWRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIgorICAgICAgICBpbmNsdWRlcz0iZWpiLyoqLGVuZHBvaW50LyoqIj4KKyAgICAgICAgPG1ldGFpbmYgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMvd3NkbCIvPgorICAgIDwvamFyPgorICAgIDx3YWl0Zm9yIG1heHdhaXQ9IjEwMCIgbWF4d2FpdHVuaXQ9InNlY29uZCI+CisgICAgICAgICAgICAgICA8b3I+CiAgICAgICAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95L0VqYkNsaWVudC5qYXJfZGVwbG95ZWQiLz4KICAgICAgICAgICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvRWpiQ2xpZW50Lmphcl9kZXBsb3lGYWlsZWQiLz4KICAgICAgICAgICAgIDwvb3I+CkBAIC01OSwzMCArNTksMzAgQEAKICAgICAgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0iZGVwbG95X2ZhaWxlZCI+CiAgICAgICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvRWpiQ2xpZW50Lmphcl9kZXBsb3lGYWlsZWQiLz4KICAgICAgICAgPC9jb25kaXRpb24+Ci0JPGZhaWwgaWY9ImRlcGxveV9mYWlsZWQiIG1lc3NhZ2U9IkRlcGxveW1lbnQgZmFpbGVkIi8+CisgICAgPGZhaWwgaWY9ImRlcGxveV9mYWlsZWQiIG1lc3NhZ2U9IkRlcGxveW1lbnQgZmFpbGVkIi8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLXJ1biI+CiAgICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke2NsaWVudC1zcmMtbmFtZX0iIHByb3BlcnR5PSJjbGllbnQiIHN1ZmZpeD0iLmphdmEiLz4KICAgICAgICAgPGRpcm5hbWUgZmlsZT0iJHtjbGllbnQtc3JjLW5hbWV9IiBwcm9wZXJ0eT0iY2xpZW50LWRpcmVjdG9yeSIvPgotICAgICAgICA8YmFzZW5hbWUgZmlsZT0iJHtjbGllbnQtZGlyZWN0b3J5fSIgcHJvcGVydHk9ImNsaWVudC1wa2ctbmFtZSIvPiAKKyAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7Y2xpZW50LWRpcmVjdG9yeX0iIHByb3BlcnR5PSJjbGllbnQtcGtnLW5hbWUiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNsaWVudC1jbGFzcy1uYW1lIiB2YWx1ZT0iJHtjbGllbnQtcGtnLW5hbWV9LyR7Y2xpZW50fS5jbGFzcyIvPgotCTxhbnRjYWxsIHRhcmdldD0iY2xlYW4iLz4KLQk8YW50Y2FsbCB0YXJnZXQ9IndzZGwtaW1wb3J0Ij4KLQkJPHBhcmFtIG5hbWU9InNlcnZlciIgdmFsdWU9IkdhdGV3YXlJbXBsIi8+Ci0JCTxwYXJhbSBuYW1lPSJwb3J0IiB2YWx1ZT0iR2F0ZXdheUltcGwiLz4KLQk8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNsaWVudCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9IndzZGwtaW1wb3J0Ij4KKyAgICAgICAgPHBhcmFtIG5hbWU9InNlcnZlciIgdmFsdWU9IkdhdGV3YXlJbXBsIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJwb3J0IiB2YWx1ZT0iR2F0ZXdheUltcGwiLz4KKyAgICA8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNsaWVudCIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIGFwcGNsaWVudCB3aXRoICR7Y2xpZW50LXBrZy1uYW1lfS4ke2NsaWVudH0iLz4KICAgICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIvPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hcHBjbGllbnQiIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIj4KLSAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y2xpZW50LXBrZy1uYW1lfS4ke2NsaWVudH0iLz4gICAgCisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NsaWVudC1wa2ctbmFtZX0uJHtjbGllbnR9Ii8+CiAgICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtdW5kZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJhdXRvdW5kZXBsb3ktZmlsZSI+Ci0JCTxwYXJhbSBuYW1lPSJmaWxlbmFtZSIgdmFsdWU9IkVqYkNsaWVudC5qYXIiLz4KLQk8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJhdXRvdW5kZXBsb3ktZmlsZSI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJmaWxlbmFtZSIgdmFsdWU9IkVqYkNsaWVudC5qYXIiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlcG9ydC1zdWNjZXNzIj4KQEAgLTkxLDYgKzkxLDYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBmYWlsZWQiLz4KLSAgICA8L3RhcmdldD4gICAJCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3BvcnRlamJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydGVqYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggN2ZhNzYyMC4uZjU3ZDU3NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydGVqYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydGVqYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDQzICsyOCw0MyBAQAogICAgICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCi0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIGRlc2MgPSAid3MtZWpiLXBvcnQtZmllbGQtaW5qZWN0aW9uIjsKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgZGVzYyA9ICJ3cy1lamItcG9ydC1maWVsZC1pbmplY3Rpb24iOwogCi0JQFdlYlNlcnZpY2VSZWYoR2F0ZXdheUltcGxTZXJ2aWNlLmNsYXNzKQorICAgIEBXZWJTZXJ2aWNlUmVmKEdhdGV3YXlJbXBsU2VydmljZS5jbGFzcykKICAgICAgICAgc3RhdGljIEdhdGV3YXlJbXBsIHBvcnQ7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGRlc2MpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGRlc2MpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KGRlc2MpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeShkZXNjKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogICAgICAgICAgICAgdHJ5IHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJNZXRob2QgaW5qZWN0ZWQgcmVmZXJlbmNlIHRlc3QuLi4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXRob2QgaW5qZWN0ZWQgcmVmZXJlbmNlIHRlc3QuLi4iKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5pbnZva2VNZXRob2QoIkFwcHNlcnZlciBUZXN0ZXIgISIpOwotCQlpZihyZXQuaW5kZXhPZigiTUVUSE9EIFdlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICBpZihyZXQuaW5kZXhPZigiTUVUSE9EIFdlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2MsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2ZXIgcmV0dXJuZWQgIiArIHJldCArICIgOiBQQVNTRUQiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJGaWVsZCBpbmplY3RlZCByZWZlcmVuY2UgdGVzdC4uLiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZpZWxkIGluamVjdGVkIHJlZmVyZW5jZSB0ZXN0Li4uIik7CiAgICAgICAgICAgICAgICAgcmV0ID0gcG9ydC5pbnZva2VGaWVsZCgiQXBwc2VydmVyIFRlc3RlciAhIik7Ci0JCWlmKHJldC5pbmRleE9mKCJGSUVMRCBXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgaWYocmV0LmluZGV4T2YoIkZJRUxEIFdlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2MsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2ZXIgcmV0dXJuZWQgIiArIHJldCArICIgOiBQQVNTRUQiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJEZXBlbmRlbmN5IGpuZGkgbG9vdXAgcmVmZXJlbmNlIHRlc3QuLi4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZXBlbmRlbmN5IGpuZGkgbG9vdXAgcmVmZXJlbmNlIHRlc3QuLi4iKTsKICAgICAgICAgICAgICAgICByZXQgPSBwb3J0Lmludm9rZURlcGVuZGVuY3koIkFwcHNlcnZlciBUZXN0ZXIgISIpOwotCQlpZihyZXQuaW5kZXhPZigiSk5ESSBXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgaWYocmV0LmluZGV4T2YoIkpOREkgV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzYywgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQl9CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlcnZlciByZXR1cm5lZCAiICsgcmV0ICsgIiA6IFBBU1NFRCIpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2MsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0ZWpiY2xpZW50L2VqYi9HYXRld2F5SW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydGVqYmNsaWVudC9lamIvR2F0ZXdheUltcGwuamF2YQppbmRleCAwOTlkNTMwLi5jMWRkMzcxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0ZWpiY2xpZW50L2VqYi9HYXRld2F5SW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3BvcnRlamJjbGllbnQvZWpiL0dhdGV3YXlJbXBsLmphdmEKQEAgLTM5LDE2ICszOSwxNiBAQAogCiAgICAgSGVsbG9JbXBsIHBvcnRNZXRob2Q9bnVsbDsKIAotICAgIC8vIG1ldGhvZCBpbmplY3Rpb24gaGFzIHRvIGJlIHByaXZhdGUgdG8gYXZvaWQgYmVpbmcgcGFydCBvZiB0aGUgCisgICAgLy8gbWV0aG9kIGluamVjdGlvbiBoYXMgdG8gYmUgcHJpdmF0ZSB0byBhdm9pZCBiZWluZyBwYXJ0IG9mIHRoZQogICAgIC8vIHdlYiBzZXJ2aWNlIGludGVyZmFjZS4KICAgICBAV2ViU2VydmljZVJlZihIZWxsb0ltcGxTZXJ2aWNlLmNsYXNzKQogICAgIHByaXZhdGUgdm9pZCBzZXRQb3J0KEhlbGxvSW1wbCBwb3J0KSB7Ci0JcG9ydE1ldGhvZCA9IHBvcnQ7CisgICAgcG9ydE1ldGhvZCA9IHBvcnQ7CiAgICAgfQogCiAgICAgQFdlYk1ldGhvZAogICAgIHB1YmxpYyBTdHJpbmcgaW52b2tlTWV0aG9kKFN0cmluZyB3aG8pIHsKLQlyZXR1cm4gIk1FVEhPRCAiICsgcG9ydE1ldGhvZC5zYXlIZWxsbyh3aG8pOworICAgIHJldHVybiAiTUVUSE9EICIgKyBwb3J0TWV0aG9kLnNheUhlbGxvKHdobyk7CiAgICAgfQogCiAgICAgQFdlYk1ldGhvZApAQCAtNTgsMTcgKzU4LDE3IEBACiAKICAgICBAV2ViTWV0aG9kCiAgICAgcHVibGljIFN0cmluZyBpbnZva2VEZXBlbmRlbmN5KFN0cmluZyB3aG8pIHsKLQl0cnkgewotCQlDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0vLwkJSGVsbG9JbXBsU2VydmljZSBzZXJ2aWNlID0gKEhlbGxvSW1wbFNlcnZpY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL2hlbGxvc2VydmljZSIpOwotLy8JCUhlbGxvSW1wbCBwb3J0ID0gc2VydmljZS5nZXRQb3J0KEhlbGxvSW1wbC5jbGFzcyk7Ci0vLwkJU3lzdGVtLm91dC5wcmludGxuKCJGcm9tIHNlcnZpY2UuLi4gIiArIHBvcnQuc2F5SGVsbG8od2hvKSk7Ci0JCUhlbGxvSW1wbCBwb3J0ID0gKEhlbGxvSW1wbCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvaGVsbG9wb3J0Iik7Ci0JCXJldHVybiAiSk5ESSAiICsgcG9ydC5zYXlIZWxsbyh3aG8pOwotCX0gY2F0Y2goVGhyb3dhYmxlIHQpIHsKLQkJdC5wcmludFN0YWNrVHJhY2UoKTsKLQkJcmV0dXJuICJGQUlMRUQiOwotCX0KKyAgICB0cnkgeworICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisvLyAgICAgICAgSGVsbG9JbXBsU2VydmljZSBzZXJ2aWNlID0gKEhlbGxvSW1wbFNlcnZpY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL2hlbGxvc2VydmljZSIpOworLy8gICAgICAgIEhlbGxvSW1wbCBwb3J0ID0gc2VydmljZS5nZXRQb3J0KEhlbGxvSW1wbC5jbGFzcyk7CisvLyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGcm9tIHNlcnZpY2UuLi4gIiArIHBvcnQuc2F5SGVsbG8od2hvKSk7CisgICAgICAgIEhlbGxvSW1wbCBwb3J0ID0gKEhlbGxvSW1wbCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvaGVsbG9wb3J0Iik7CisgICAgICAgIHJldHVybiAiSk5ESSAiICsgcG9ydC5zYXlIZWxsbyh3aG8pOworICAgIH0gY2F0Y2goVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuICJGQUlMRUQiOworICAgIH0KICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3BvcnRmaWVsZGluamVjdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0ZmllbGRpbmplY3Rpb24vYnVpbGQueG1sCmluZGV4IGE5NGZiNTIuLmM5OTc3YTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3BvcnRmaWVsZGluamVjdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydGZpZWxkaW5qZWN0aW9uL2J1aWxkLnhtbApAQCAtMzQsNiArMzQsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGZhaWxlZCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydGZpZWxkaW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3BvcnRmaWVsZGluamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMGMwNjUxZS4uN2U0ZGIxYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydGZpZWxkaW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0ZmllbGRpbmplY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCwyNyArMjgsMjcgQEAKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBkZXNjID0gIndzLWVqYi1wb3J0LWZpZWxkLWluamVjdGlvbiI7CisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIGRlc2MgPSAid3MtZWpiLXBvcnQtZmllbGQtaW5qZWN0aW9uIjsKIAotCUBXZWJTZXJ2aWNlUmVmKEhlbGxvSW1wbFNlcnZpY2UuY2xhc3MpCisgICAgQFdlYlNlcnZpY2VSZWYoSGVsbG9JbXBsU2VydmljZS5jbGFzcykKICAgICAgICAgc3RhdGljIEhlbGxvSW1wbCBwb3J0OwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbihkZXNjKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbihkZXNjKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeShkZXNjKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoZGVzYyk7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKLQkJICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2MsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydG1ldGhvZGluamVjdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0bWV0aG9kaW5qZWN0aW9uL2J1aWxkLnhtbAppbmRleCBhOTRmYjUyLi5jOTk3N2E0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0bWV0aG9kaW5qZWN0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0bWV0aG9kaW5qZWN0aW9uL2J1aWxkLnhtbApAQCAtMzQsNiArMzQsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGZhaWxlZCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydG1ldGhvZGluamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0bWV0aG9kaW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA2NzA2MTcxLi5kYmI2YTViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0bWV0aG9kaW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0bWV0aG9kaW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsMzEgKzI4LDMxIEBACiAgICAgICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgZGVzYyA9ICJ3cy1lamItcG9ydC1tZXRob2QtaW5qZWN0aW9uIjsKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgZGVzYyA9ICJ3cy1lamItcG9ydC1tZXRob2QtaW5qZWN0aW9uIjsKIAotCUBXZWJTZXJ2aWNlUmVmKEhlbGxvSW1wbFNlcnZpY2UuY2xhc3MpCi0Jc3RhdGljIHZvaWQgc2V0UG9ydChIZWxsb0ltcGwgcykgewotCQlwb3J0ID0gczsKLQl9CisgICAgQFdlYlNlcnZpY2VSZWYoSGVsbG9JbXBsU2VydmljZS5jbGFzcykKKyAgICBzdGF0aWMgdm9pZCBzZXRQb3J0KEhlbGxvSW1wbCBzKSB7CisgICAgICAgIHBvcnQgPSBzOworICAgIH0KIAogICAgICAgICBzdGF0aWMgSGVsbG9JbXBsIHBvcnQ7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGRlc2MpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGRlc2MpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KGRlc2MpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeShkZXNjKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7aTwxMDtpKyspIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIpOwotCQkgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzYywgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2MsIHN0YXQuUEFTUyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wcm92aWRlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wcm92aWRlci9idWlsZC54bWwKaW5kZXggODI1MDY2YS4uMTg5NGUzZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcHJvdmlkZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Byb3ZpZGVyL2J1aWxkLnhtbApAQCAtMjcsMjggKzI3LDI4IEBACiAgICAgPHByb3BlcnR5IG5hbWU9InNyYy1uYW1lIiB2YWx1ZT0iZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iY2xpZW50LXNyYy1uYW1lIiB2YWx1ZT0iY2xpZW50L0NsaWVudC5qYXZhIi8+CiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuIj4KLQk8YW50Y2FsbCB0YXJnZXQ9InRlc3RfYnVpbGQiLz4KLSAgICAJPGJhc2VuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0ic2VydmVyIiBzdWZmaXg9Ii5qYXZhIi8+Ci0JPHdhaXRmb3IgbWF4d2FpdD0iMTAwIiBtYXh3YWl0dW5pdD0ic2Vjb25kIj4KLQkgIDxvcj4KLQkgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke3NlcnZlcn0uamFyX2RlcGxveWVkIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ0ZXN0X2J1aWxkIi8+CisgICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke3NyYy1uYW1lfSIgcHJvcGVydHk9InNlcnZlciIgc3VmZml4PSIuamF2YSIvPgorICAgIDx3YWl0Zm9yIG1heHdhaXQ9IjEwMCIgbWF4d2FpdHVuaXQ9InNlY29uZCI+CisgICAgICA8b3I+CisgICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtzZXJ2ZXJ9Lmphcl9kZXBsb3llZCIvPgogICAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95LyR7c2VydmVyfS5qYXJfZGVwbG95RmFpbGVkIi8+Ci0gICAgICAgCSAgPC9vcj4KLQk8L3dhaXRmb3I+CisgICAgICAgICAgICAgPC9vcj4KKyAgICA8L3dhaXRmb3I+CiAgICAgICAgIDxjb25kaXRpb24gcHJvcGVydHk9ImRlcGxveV9zdWNjZWVkZWQiPgogICAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95LyR7c2VydmVyfS5qYXJfZGVwbG95ZWQiLz4KICAgICAgICAgPC9jb25kaXRpb24+Ci0gICAgICAgIAorCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4iLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJyZXBvcnQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXBvcnQiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idGVzdF9idWlsZCI+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3NpbXBvcnQiPgotICAgICAgICAJPGFyZyBsaW5lPSIta2VlcCAtZCAke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMgZW5kcG9pbnQvd3NkbC9IZWxsb0ltcGxTZXJ2aWNlLndzZGwiLz4KLQk8L2V4ZWM+Ci0JPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzaW1wb3J0Ij4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iLWtlZXAgLWQgJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIGVuZHBvaW50L3dzZGwvSGVsbG9JbXBsU2VydmljZS53c2RsIi8+CisgICAgPC9leGVjPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LXN1Y2Nlc3MiPgpAQCAtNTcsNiArNTcsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGZhaWxlZCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcHJvdmlkZXIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcHJvdmlkZXIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGQyNjViYjUuLmZiNWZmMjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Byb3ZpZGVyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wcm92aWRlci9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMyLDEwICszMiwxMCBAQAogICAgICAgICBzdGF0aWMgSGVsbG9JbXBsU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpiLXByb3ZpZGVyLWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpiLXByb3ZpZGVyLWFubm90YXRpb24iKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLXByb3ZpZGVyLWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1wcm92aWRlci1hbm5vdGF0aW9uIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQzLDExICs0MywxMSBAQAogICAgICAgICAgICAgICAgIEhlbGxvSW1wbCBwb3J0ID0gc2VydmljZS5nZXRIZWxsb0ltcGwoKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7aTwxMDtpKyspIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIpOwotCQkgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlNpbXBsZS1Bbm5vdGF0aW9uIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamItcHJvdmlkZXItYW5ub3RhdGlvbiIsIHN0YXQuUEFTUyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wcm92aWRlci9lbmRwb2ludC9IZWxsb0ltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Byb3ZpZGVyL2VuZHBvaW50L0hlbGxvSW1wbC5qYXZhCmluZGV4IDVhMjgxMjMuLmE1YzA5ZWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Byb3ZpZGVyL2VuZHBvaW50L0hlbGxvSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Byb3ZpZGVyL2VuZHBvaW50L0hlbGxvSW1wbC5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiBpbXBvcnQgamFrYXJ0YS54bWwud3MuUHJvdmlkZXI7CiBpbXBvcnQgamFrYXJ0YS54bWwud3MuV2ViU2VydmljZVByb3ZpZGVyOwogaW1wb3J0IGpha2FydGEueG1sLndzLlNlcnZpY2VNb2RlOwotaW1wb3J0IGpha2FydGEueG1sLndzLlNlcnZpY2UJOwkKK2ltcG9ydCBqYWthcnRhLnhtbC53cy5TZXJ2aWNlICAgIDsKIGltcG9ydCBqYWthcnRhLnhtbC5zb2FwLlNPQVBNZXNzYWdlOwogaW1wb3J0IGpha2FydGEuZWpiLlN0YXRlbGVzczsKIApAQCAtNDMsMTEgKzQzLDExIEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSkFYQkNvbnRleHQgamF4YkNvbnRleHQgPSBjcmVhdGVKQVhCQ29udGV4dCgpOwogICAgIHByaXZhdGUgaW50IGNvbWJvOwogICAgIHByaXZhdGUgaW50IGJvZHlJbmRleDsKLSAgICAKKwogICAgIHB1YmxpYyBqYWthcnRhLnhtbC5iaW5kLkpBWEJDb250ZXh0IGdldEpBWEJDb250ZXh0KCl7CiAgICAgICAgIHJldHVybiBqYXhiQ29udGV4dDsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBqYWthcnRhLnhtbC5iaW5kLkpBWEJDb250ZXh0IGNyZWF0ZUpBWEJDb250ZXh0KCl7CiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIHJldHVybiBqYWthcnRhLnhtbC5iaW5kLkpBWEJDb250ZXh0Lm5ld0luc3RhbmNlKE9iamVjdEZhY3RvcnkuY2xhc3MpOwpAQCAtNTUsMjggKzU1LDI4IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgV2ViU2VydmljZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyBTb3VyY2UgaW52b2tlKFNvdXJjZSByZXF1ZXN0KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZWN2QmVhbihyZXF1ZXN0KTsKICAgICAgICAgICAgIHJldHVybiBzZW5kQmVhbigpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNlcnZpY2VFeGNlcHRpb24oIlByb3ZpZGVyIGVuZHBvaW50IGZhaWxlZCIsIGUpOyAgICAgICAgICAgIAorICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNlcnZpY2VFeGNlcHRpb24oIlByb3ZpZGVyIGVuZHBvaW50IGZhaWxlZCIsIGUpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHJlY3ZCZWFuKFNvdXJjZSBzb3VyY2UpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogcmVjdkJlYW4gKioqKioqIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihqYXhiQ29udGV4dC5jcmVhdGVVbm1hcnNoYWxsZXIoKS51bm1hcnNoYWwoc291cmNlKSk7CiAgICAgICAgIEpBWEJFbGVtZW50IGVsZW1lbnQgPSAoSkFYQkVsZW1lbnQpIGpheGJDb250ZXh0LmNyZWF0ZVVubWFyc2hhbGxlcigpLnVubWFyc2hhbChzb3VyY2UpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm5hbWU9IitlbGVtZW50LmdldE5hbWUoKSsgIiB2YWx1ZT0iICsgZWxlbWVudC5nZXRWYWx1ZSgpKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm5hbWU9IitlbGVtZW50LmdldE5hbWUoKSsgIiB2YWx1ZT0iICsgZWxlbWVudC5nZXRWYWx1ZSgpKTsKICAgICAgICAgaWYgKGVsZW1lbnQuZ2V0VmFsdWUoKSBpbnN0YW5jZW9mIFNheUhlbGxvKSB7Ci0gICAgICAgICAgICBTYXlIZWxsbyBoZWxsbyA9IChTYXlIZWxsbykgZWxlbWVudC5nZXRWYWx1ZSgpOyAKKyAgICAgICAgICAgIFNheUhlbGxvIGhlbGxvID0gKFNheUhlbGxvKSBlbGVtZW50LmdldFZhbHVlKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNheSBIZWxsbyBmcm9tICIgKyBoZWxsby5nZXRBcmcwKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHJpdmF0ZSBTb3VyY2Ugc2VuZEJlYW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTg0LDkgKzg0LDkgQEAKICAgICAgICAgU2F5SGVsbG9SZXNwb25zZSByZXNwID0gbmV3IFNheUhlbGxvUmVzcG9uc2UoKTsKICAgICAgICAgcmVzcC5zZXRSZXR1cm4oIldlYlN2Y1Rlc3QtSGVsbG8iKTsKICAgICAgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJvdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0gICAgICAgIE9iamVjdEZhY3RvcnkgZmFjdG9yeSA9IG5ldyBPYmplY3RGYWN0b3J5KCk7IAorICAgICAgICBPYmplY3RGYWN0b3J5IGZhY3RvcnkgPSBuZXcgT2JqZWN0RmFjdG9yeSgpOwogICAgICAgICBqYXhiQ29udGV4dC5jcmVhdGVNYXJzaGFsbGVyKCkubWFyc2hhbChmYWN0b3J5LmNyZWF0ZVNheUhlbGxvUmVzcG9uc2UocmVzcCksIGJvdXQpOwogICAgICAgICByZXR1cm4gbmV3IFN0cmVhbVNvdXJjZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYm91dC50b0J5dGVBcnJheSgpKSk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9yZXN0ZnVsLWVqYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcmVzdGZ1bC1lamIvYnVpbGQucHJvcGVydGllcwppbmRleCA0N2RiYWJkLi5kMDM3NjBkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9yZXN0ZnVsLWVqYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Jlc3RmdWwtZWpiL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDggKzE1LDggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InJlc3RmdWwtZWpiIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcmVzdGZ1bC1lamIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcmVzdGZ1bC1lamIvYnVpbGQueG1sCmluZGV4IDc2YzY0ZDIuLmRmNmUxZjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Jlc3RmdWwtZWpiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9yZXN0ZnVsLWVqYi9idWlsZC54bWwKQEAgLTU3LDggKzU3LDggQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUtY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgIDwvdGFyZ2V0PgogCkBAIC02OSw3ICs2OSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tY2xpZW50Ij4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudC1jbGFzcyIgdmFsdWU9ImNsaWVudC5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Jlc3RmdWwtZWpiL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Jlc3RmdWwtZWpiL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBmNmQ3ZWNhLi42NzU3MDcxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9yZXN0ZnVsLWVqYi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcmVzdGZ1bC1lamIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC00MCwxMyArNDAsMTMgQEAKICAgICAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0Jc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtc2ltcGxlLXJlc3RmdWwtc3ZjIik7Ci0gICAgICAgIFN0cmluZyBlbmRwb2ludEFkZHJlc3MgPSAKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtcmVzdGZ1bC1zdmMiKTsKKyAgICAgICAgU3RyaW5nIGVuZHBvaW50QWRkcmVzcyA9CiAgICAgICAgICAgICAiaHR0cDovL2xvY2FsaG9zdDo4MDgwL0FkZE51bWJlcnNJbXBsU2VydmljZS9lbmRwb2ludC5BZGROdW1iZXJzSW1wbCI7CiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKGVuZHBvaW50QWRkcmVzcysiP251bTE9MTAmbnVtMj0yMCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJJbnZva2luZyBVUkw9Iit1cmwpOwogICAgICAgICBwcm9jZXNzKHVybCwgYXJncyk7Ci0Jc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLXNpbXBsZS1yZXN0ZnVsLXN2YyIpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtcmVzdGZ1bC1zdmMiKTsKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHByb2Nlc3MoVVJMIHVybCwgU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC02NCwxMiArNjQsMTIgQEAKICAgICAgICAgICAgIG9wcm9wcy5wdXQoT3V0cHV0S2V5cy5PTUlUX1hNTF9ERUNMQVJBVElPTiwgInllcyIpOwogICAgICAgICAgICAgdHJhbnMuc2V0T3V0cHV0UHJvcGVydGllcyhvcHJvcHMpOwogICAgICAgICAgICAgdHJhbnMudHJhbnNmb3JtKHNvdXJjZSwgc3IpOwotCSAgICBTdHJpbmcgcmVzcCA9IGJvcy50b1N0cmluZygpOworICAgICAgICBTdHJpbmcgcmVzcCA9IGJvcy50b1N0cmluZygpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIFJlc3BvbnNlICoqKioqKiIrcmVzcCk7CiAgICAgICAgICAgICBib3MuY2xvc2UoKTsKLQkgICAgaWYocmVzcC5pbmRleE9mKCI8bnM6cmV0dXJuPjMwPC9uczpyZXR1cm4+IikgIT0gLTEpCisgICAgICAgIGlmKHJlc3AuaW5kZXhPZigiPG5zOnJldHVybj4zMDwvbnM6cmV0dXJuPiIpICE9IC0xKQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuUEFTUyk7Ci0JICAgIGVsc2UKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9yZXN0ZnVsLWVqYi9lbmRwb2ludC9BZGROdW1iZXJzSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcmVzdGZ1bC1lamIvZW5kcG9pbnQvQWRkTnVtYmVyc0ltcGwuamF2YQppbmRleCBjYjRiNDFmLi4wMzAwYTUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9yZXN0ZnVsLWVqYi9lbmRwb2ludC9BZGROdW1iZXJzSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Jlc3RmdWwtZWpiL2VuZHBvaW50L0FkZE51bWJlcnNJbXBsLmphdmEKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBIVFRQRXhjZXB0aW9uKDUwMCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIFNvdXJjZSBjcmVhdGVTb3VyY2UoU3RyaW5nIHN0cikgewogICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHN0ciwgIj0mLyIpOwogICAgICAgICBTdHJpbmcgdG9rZW4gPSBzdC5uZXh0VG9rZW4oKTsKQEAgLTc4LDUgKzc4LDUgQEAKICAgICAgICAgICAgIG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShib2R5LmdldEJ5dGVzKCkpKTsKICAgICAgICAgcmV0dXJuIHNvdXJjZTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NlY3VyaXR5L3JvbGVzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NlY3VyaXR5L3JvbGVzL2J1aWxkLnhtbAppbmRleCA0NDZjNTg0Li5hYmQwZWYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZWN1cml0eS9yb2xlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2VjdXJpdHkvcm9sZXMvYnVpbGQueG1sCkBAIC0yOSw5ICsyOSw5IEBACiAgICAgPHByb3BlcnR5IG5hbWU9ImNsaWVudC1zcmMtbmFtZSIgdmFsdWU9ImNsaWVudC9DbGllbnQuamF2YSIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJhcHAtY2xpZW50LXBhcmFtZXRlcnMiIHZhbHVlPSIteG1sICR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sIi8+CiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuIj4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveSIvPgotICAgICAgICA8YmFzZW5hbWUgZmlsZT0iJHtzcmMtbmFtZX0iIHByb3BlcnR5PSJzZXJ2ZXIiIHN1ZmZpeD0iLmphdmEiLz4gICAgCi0JPGNvbmRpdGlvbiBwcm9wZXJ0eT0iZGVwbG95X3N1Y2NlZWRlZCI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3kiLz4KKyAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0ic2VydmVyIiBzdWZmaXg9Ii5qYXZhIi8+CisgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0iZGVwbG95X3N1Y2NlZWRlZCI+CiAgICAgICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtzZXJ2ZXJ9Lmphcl9kZXBsb3llZCIvPgogICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0iZGVwbG95X2ZhaWxlZCI+CkBAIC0zOSwzOSArMzksMzkgQEAKICAgICAgICAgPC9jb25kaXRpb24+CiAgICAgICAgIDxmYWlsIG1lc3NhZ2U9IkRlcGxveW1lbnQgZmFpbGVkIiBpZj0iZGVwbG95X2ZhaWxlZCIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3ltZW50IHBhc3NlZCAke2RlcGxveV9zdWNjZWVkZWR9Ii8+Ci0JPGVjaG8gbWVzc2FnZT0iQUxMIFdFQlNFUlZJQ0UgSU5WT0NBVElPTiBTSE9VTEQgRkFJTC4uLiIvPiAgICAgICAgCisgICAgPGVjaG8gbWVzc2FnZT0iQUxMIFdFQlNFUlZJQ0UgSU5WT0NBVElPTiBTSE9VTEQgRkFJTC4uLiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1biI+Ci0JICAgIDxwYXJhbSBuYW1lPSJhcHAtY2xpZW50LWV4dHJhLXBhcmFtZXRlcnMiIHZhbHVlPSItdXNlciBub3VzZXIgLXBhc3N3b3JkIG5vcGFzcyIvPgorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwLWNsaWVudC1leHRyYS1wYXJhbWV0ZXJzIiB2YWx1ZT0iLXVzZXIgbm91c2VyIC1wYXNzd29yZCBub3Bhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxlY2hvIG1lc3NhZ2U9IkNSRUFUSU5HIFVTRVJTLi4uIi8+CisgICAgPGVjaG8gbWVzc2FnZT0iQ1JFQVRJTkcgVVNFUlMuLi4iLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHthZG1pbi5wYXNzd29yZC5maWxlfSIgdG9maWxlPSIuL3Bhc3N3b3JkZmlsZSIgb3ZlcndyaXRlPSJ0cnVlIi8+CiAgICAgICAgIDxlY2hvIGZpbGU9Ii4vcGFzc3dvcmRmaWxlIiBhcHBlbmQ9InRydWUiPgogQVNfQURNSU5fVVNFUlBBU1NXT1JEPXRlc3RlcgogICAgICAgICA8L2VjaG8+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXNhZG1pbiI+Ci0gICAgICAgICAgICA8YXJnIGxpbmU9ImNyZWF0ZS1maWxlLXVzZXIgLS1wb3J0ICR7YWRtaW4ucG9ydH0gLS11c2VyICR7YWRtaW4udXNlcn0gLS1wYXNzd29yZGZpbGUgLi9wYXNzd29yZGZpbGUgLS1ncm91cHMgd2Vic2VydmljZXRlc3RlciAtLWF1dGhyZWFsbW5hbWUgZmlsZSB3ZWJzZXJ2aWNldGVzdGVyIi8+ICAgIAotICAgIAk8L2V4ZWM+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXNhZG1pbiI+CisgICAgICAgICAgICA8YXJnIGxpbmU9ImNyZWF0ZS1maWxlLXVzZXIgLS1wb3J0ICR7YWRtaW4ucG9ydH0gLS11c2VyICR7YWRtaW4udXNlcn0gLS1wYXNzd29yZGZpbGUgLi9wYXNzd29yZGZpbGUgLS1ncm91cHMgd2Vic2VydmljZXRlc3RlciAtLWF1dGhyZWFsbW5hbWUgZmlsZSB3ZWJzZXJ2aWNldGVzdGVyIi8+CisgICAgICAgIDwvZXhlYz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHthZG1pbi5wYXNzd29yZC5maWxlfSIgdG9maWxlPSIuL3Bhc3N3b3JkZmlsZSIgb3ZlcndyaXRlPSJ0cnVlIi8+CiAgICAgICAgIDxlY2hvIGZpbGU9Ii4vcGFzc3dvcmRmaWxlIiBhcHBlbmQ9InRydWUiPgogQVNfQURNSU5fVVNFUlBBU1NXT1JEPXRlc3RlcjIKICAgICAgICAgPC9lY2hvPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2FzYWRtaW4iPgotICAgICAgICAgICAgPGFyZyBsaW5lPSJjcmVhdGUtZmlsZS11c2VyIC0tcG9ydCAke2FkbWluLnBvcnR9IC0tdXNlciAke2FkbWluLnVzZXJ9IC0tcGFzc3dvcmRmaWxlIC4vcGFzc3dvcmRmaWxlIC0tZ3JvdXBzIHdlYnNlcnZpY2V0ZXN0ZXIyIC0tYXV0aHJlYWxtbmFtZSBmaWxlIHdlYnNlcnZpY2V0ZXN0ZXIyIi8+ICAgIAotICAgIAk8L2V4ZWM+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXNhZG1pbiI+CisgICAgICAgICAgICA8YXJnIGxpbmU9ImNyZWF0ZS1maWxlLXVzZXIgLS1wb3J0ICR7YWRtaW4ucG9ydH0gLS11c2VyICR7YWRtaW4udXNlcn0gLS1wYXNzd29yZGZpbGUgLi9wYXNzd29yZGZpbGUgLS1ncm91cHMgd2Vic2VydmljZXRlc3RlcjIgLS1hdXRocmVhbG1uYW1lIGZpbGUgd2Vic2VydmljZXRlc3RlcjIiLz4KKyAgICAgICAgPC9leGVjPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImludGVybmFsLXJ1biI+Ci0JICAgIDxwYXJhbSBuYW1lPSJhcHAtY2xpZW50LWV4dHJhLXBhcmFtZXRlcnMiIHZhbHVlPSItdXNlciBub3VzZXIgLXBhc3N3b3JkIG5vcGFzcyB3ZWJzZXJ2aWNldGVzdGVyIHRlc3RlciIvPgorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwLWNsaWVudC1leHRyYS1wYXJhbWV0ZXJzIiB2YWx1ZT0iLXVzZXIgbm91c2VyIC1wYXNzd29yZCBub3Bhc3Mgd2Vic2VydmljZXRlc3RlciB0ZXN0ZXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImludGVybmFsLXJ1biI+Ci0JICAgIDxwYXJhbSBuYW1lPSJhcHAtY2xpZW50LWV4dHJhLXBhcmFtZXRlcnMiIHZhbHVlPSItdXNlciBub3VzZXIgLXBhc3N3b3JkIG5vcGFzcyB3ZWJzZXJ2aWNldGVzdGVyMiB0ZXN0ZXIyIEZBSUxVUkUiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgICAgICAgCi0JPGVjaG8gbWVzc2FnZT0iREVMRVRJTkcgVVNFUlMuLi4iLz4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hc2FkbWluIj4KLSAgICAgICAgICAgIDxhcmcgbGluZT0iZGVsZXRlLWZpbGUtdXNlciAtLXBvcnQgJHthZG1pbi5wb3J0fSAtLXVzZXIgJHthZG1pbi51c2VyfSAtLXBhc3N3b3JkZmlsZSAke2FkbWluLnBhc3N3b3JkLmZpbGV9IC0tYXV0aHJlYWxtbmFtZSBmaWxlIHdlYnNlcnZpY2V0ZXN0ZXIiLz4gICAgCi0gICAgCTwvZXhlYz4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hc2FkbWluIj4KLSAgICAgICAgICAgIDxhcmcgbGluZT0iZGVsZXRlLWZpbGUtdXNlciAtLXBvcnQgJHthZG1pbi5wb3J0fSAtLXVzZXIgJHthZG1pbi51c2VyfSAtLXBhc3N3b3JkZmlsZSAke2FkbWluLnBhc3N3b3JkLmZpbGV9IC0tYXV0aHJlYWxtbmFtZSBmaWxlIHdlYnNlcnZpY2V0ZXN0ZXIyIi8+ICAgIAotICAgIAk8L2V4ZWM+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwLWNsaWVudC1leHRyYS1wYXJhbWV0ZXJzIiB2YWx1ZT0iLXVzZXIgbm91c2VyIC1wYXNzd29yZCBub3Bhc3Mgd2Vic2VydmljZXRlc3RlcjIgdGVzdGVyMiBGQUlMVVJFIi8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8ZWNobyBtZXNzYWdlPSJERUxFVElORyBVU0VSUy4uLiIvPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2FzYWRtaW4iPgorICAgICAgICAgICAgPGFyZyBsaW5lPSJkZWxldGUtZmlsZS11c2VyIC0tcG9ydCAke2FkbWluLnBvcnR9IC0tdXNlciAke2FkbWluLnVzZXJ9IC0tcGFzc3dvcmRmaWxlICR7YWRtaW4ucGFzc3dvcmQuZmlsZX0gLS1hdXRocmVhbG1uYW1lIGZpbGUgd2Vic2VydmljZXRlc3RlciIvPgorICAgICAgICA8L2V4ZWM+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXNhZG1pbiI+CisgICAgICAgICAgICA8YXJnIGxpbmU9ImRlbGV0ZS1maWxlLXVzZXIgLS1wb3J0ICR7YWRtaW4ucG9ydH0gLS11c2VyICR7YWRtaW4udXNlcn0gLS1wYXNzd29yZGZpbGUgJHthZG1pbi5wYXNzd29yZC5maWxlfSAtLWF1dGhyZWFsbW5hbWUgZmlsZSB3ZWJzZXJ2aWNldGVzdGVyMiIvPgorICAgICAgICA8L2V4ZWM+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveSIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtc3VjY2VzcyI+CkBAIC04MCw2ICs4MCw2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJlcG9ydC1mYWlsdXJlIj4KICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3QgZmFpbGVkIi8+Ci0gICAgPC90YXJnZXQ+ICAgCQotICAgIAorICAgIDwvdGFyZ2V0PgorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZWN1cml0eS9yb2xlcy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZWN1cml0eS9yb2xlcy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOTMxMzdhNS4uOTUzZDE0YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2VjdXJpdHkvcm9sZXMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NlY3VyaXR5L3JvbGVzL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzgsMjYgKzM4LDI2IEBACiAgICAgICAgICAgICBTdHJpbmcgcGFzc3dvcmQ9bnVsbDsKICAgICAgICAgICAgIGJvb2xlYW4gc3VjY2Vzc0V4cGVjdGVkPXRydWU7CiAgICAgICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb247Ci0JICAgIGlmIChhcmdzLmxlbmd0aD4xKSB7CisgICAgICAgIGlmIChhcmdzLmxlbmd0aD4xKSB7CiAgICAgICAgICAgICAgICAgdXNlcm5hbWU9YXJnc1swXTsKICAgICAgICAgICAgICAgICBwYXNzd29yZD1hcmdzWzFdOwotCQlkZXNjcmlwdGlvbj0id2Vic2VydmljZXMtZWpiLXJvbGVzQWxsb3dlZC1hbm5vdGF0aW9uLXBvc2l0aXZlIjsKKyAgICAgICAgZGVzY3JpcHRpb249IndlYnNlcnZpY2VzLWVqYi1yb2xlc0FsbG93ZWQtYW5ub3RhdGlvbi1wb3NpdGl2ZSI7CiAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoPjIpIHsKICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249IndlYnNlcnZpY2VzLWVqYi1yb2xlc0FsbG93ZWQtYW5ub3RhdGlvbi1uZWdhdGl2ZS0yIjsKICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc0V4cGVjdGVkID0gIShhcmdzWzJdLmVxdWFsc0lnbm9yZUNhc2UoIkZBSUxVUkUiKSk7Ci0gICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN1Y2Nlc3NFeHBlY3RlZCA9IGZhbHNlOwotCQlkZXNjcmlwdGlvbj0id2Vic2VydmljZXMtZWpiLXJvbGVzQWxsb3dlZC1hbm5vdGF0aW9uLW5lZ2F0aXZlIjsKLQkgICAgfQotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTsKKyAgICAgICAgZGVzY3JpcHRpb249IndlYnNlcnZpY2VzLWVqYi1yb2xlc0FsbG93ZWQtYW5ub3RhdGlvbi1uZWdhdGl2ZSI7CisgICAgICAgIH0KKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChkZXNjcmlwdGlvbiwgdXNlcm5hbWUsIHBhc3N3b3JkLCBzdWNjZXNzRXhwZWN0ZWQpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeShkZXNjcmlwdGlvbik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGRlc2NyaXB0aW9uKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nIGRlc2MsIFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkLCBib29sZWFuIHN1Y2Nlc3NFeHBlY3RlZCkgewotICAgICAgICAgICAKKwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBIZWxsb0ltcGwgcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9JbXBsUG9ydCgpOwogICAgICAgICAgICAgICAgIGlmICh1c2VybmFtZSE9bnVsbCAmJiBwYXNzd29yZCE9bnVsbCkgewpAQCAtNjYsNyArNjYsNyBAQAogICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q29udGV4dC5wdXQoImpha2FydGEueG1sLndzLnNlY3VyaXR5LmF1dGgudXNlcm5hbWUiLHVzZXJuYW1lKTsKICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdENvbnRleHQucHV0KCJqYWthcnRhLnhtbC53cy5zZWN1cml0eS5hdXRoLnBhc3N3b3JkIixwYXNzd29yZCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQFBlcm1pdEFsbCBpbnZvY2F0aW9uLCBpdCBzaG91bGQgYWx3YXlzIHdvcmsKICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5wZXJtaXRBbGwoIkFwcHNlcnZlciBUZXN0ZXIgISIpOwpAQCAtODEsMTAgKzgxLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkBQZXJtaXRBbGwgbWV0aG9kIGludm9jYXRpb24gZmFpbGVkIC0gVEVTVCBGQUlMRUQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2MsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkBQZXJtaXRBbGwgbWV0aG9kIGludm9jYXRpb24gZmFpbGVkIC0gZ29vZC4uLiIpOyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJAUGVybWl0QWxsIG1ldGhvZCBpbnZvY2F0aW9uIGZhaWxlZCAtIGdvb2QuLi4iKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIEBEZW55QWxsIGludm9jYXRpb24sIGl0IHNob3VsZCBhbHdheXMgZmFpbGUKICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5kZW55QWxsKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKQEAgLTk2LDcgKzk2LDcgQEAKICAgICAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQERlbnlBbGwgbWV0aG9kIGludm9jYXRpb24gZmFpbGVkIC0gZ29vZC4uLiIpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIHJvbGUgYmFzZWQgaW52b2NhdGlvbgogICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnJvbGVCYXNlZCgiQXBwc2VydmVyIFRlc3RlciAhIik7CiAgICAgICAgICAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewpAQCAtMTA1LDE5ICsxMDUsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKLQkJaWYgKHN1Y2Nlc3NFeHBlY3RlZCkKLQkgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzYywgc3RhdC5QQVNTKTsKLQkJZWxzZSAKLQkgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzYywgc3RhdC5GQUlMKTsKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgaWYgKHN1Y2Nlc3NFeHBlY3RlZCkKKyAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzYywgc3RhdC5QQVNTKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjLCBzdGF0LkZBSUwpOworCiAgICAgICAgICAgICB9IGNhdGNoKFRocm93YWJsZSB0KSB7Ci0JCWlmIChzdWNjZXNzRXhwZWN0ZWQpIHsKLQkgICAgICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzYywgc3RhdC5GQUlMKTsKLQkJfSBlbHNlIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIGZhaWx1cmUgIiArIHQuZ2V0TWVzc2FnZSgpKTsgCi0JICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2MsIHN0YXQuUEFTUyk7Ci0JCX0KKyAgICAgICAgaWYgKHN1Y2Nlc3NFeHBlY3RlZCkgeworICAgICAgICAgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjLCBzdGF0LkZBSUwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgZmFpbHVyZSAiICsgdC5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjLCBzdGF0LlBBU1MpOworICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2VjdXJpdHkvcm9sZXMvZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZWN1cml0eS9yb2xlcy9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQppbmRleCBhZGM5YmZjLi5iZGFjNDRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZWN1cml0eS9yb2xlcy9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZWN1cml0eS9yb2xlcy9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgcm9sZUJhc2VkKFN0cmluZyB3aG8pIHsKICAgICAgICAgcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvICIgKyB3aG87CiAgICAgfQotICAgIAorCiAgICAgQERlbnlBbGwKICAgICBwdWJsaWMgU3RyaW5nIGRlbnlBbGwoU3RyaW5nIHdobykgewogICAgICAgICByZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHdobzsKQEAgLTM5LDUgKzM5LDUgQEAKICAgIEBQZXJtaXRBbGwKICAgICBwdWJsaWMgU3RyaW5nIHBlcm1pdEFsbChTdHJpbmcgd2hvKSB7CiAgICAgICAgIHJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvOwotICAgIH0gICAgCisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2VjdXJpdHkvcm9sZXMvZW5kcG9pbnQvc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2VjdXJpdHkvcm9sZXMvZW5kcG9pbnQvc3VuLWVqYi1qYXIueG1sCmluZGV4IGQ5YWU5NjQuLjBiNGVmMGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NlY3VyaXR5L3JvbGVzL2VuZHBvaW50L3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZWN1cml0eS9yb2xlcy9lbmRwb2ludC9zdW4tZWpiLWphci54bWwKQEAgLTI3LDEwICsyNywxMCBAQAogICAgIDxlamI+CiAgICAgICA8ZWpiLW5hbWU+SGVsbG9JbXBsPC9lamItbmFtZT4KICAgICAgIDx3ZWJzZXJ2aWNlLWVuZHBvaW50PgotCTxwb3J0LWNvbXBvbmVudC1uYW1lPkhlbGxvSW1wbDwvcG9ydC1jb21wb25lbnQtbmFtZT4KLQk8bG9naW4tY29uZmlnPgotCSAgPGF1dGgtbWV0aG9kPkJBU0lDPC9hdXRoLW1ldGhvZD4KLQk8L2xvZ2luLWNvbmZpZz4KKyAgICA8cG9ydC1jb21wb25lbnQtbmFtZT5IZWxsb0ltcGw8L3BvcnQtY29tcG9uZW50LW5hbWU+CisgICAgPGxvZ2luLWNvbmZpZz4KKyAgICAgIDxhdXRoLW1ldGhvZD5CQVNJQzwvYXV0aC1tZXRob2Q+CisgICAgPC9sb2dpbi1jb25maWc+CiAgICAgICA8L3dlYnNlcnZpY2UtZW5kcG9pbnQ+CiAgICAgPC9lamI+CiAgICA8L2VudGVycHJpc2UtYmVhbnM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZXJ2aWNlZWpiY2xpZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NlcnZpY2VlamJjbGllbnQvYnVpbGQueG1sCmluZGV4IGQ3NjM2MzIuLmQ0MjliMjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NlcnZpY2VlamJjbGllbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NlcnZpY2VlamJjbGllbnQvYnVpbGQueG1sCkBAIC0yNCwzMSArMjQsMzEgQEAKIDxwcm9qZWN0IG5hbWU9Im1ldGhvZGluamVjdGlvbiIgZGVmYXVsdD0iY29yZSIgYmFzZWRpcj0iLiI+CiAKICAgICAmY29tbW9uQnVpbGQ7Ci0gICAgPHByb3BlcnR5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcyIvPiAgIAorICAgIDxwcm9wZXJ0eSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiLz4KICAgICA8cHJvcGVydHkgbmFtZT0ic3JjLW5hbWUiIHZhbHVlPSJlbmRwb2ludC9IZWxsb0ltcGwuamF2YSIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGllbnQtc3JjLW5hbWUiIHZhbHVlPSJjbGllbnQvQ2xpZW50LmphdmEiLz4KICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sIHByaXZhdGUtZGVwbG95LCBwcml2YXRlLXJ1biwgcHJpdmF0ZS11bmRlcGxveSwgcmVwb3J0Ii8+CiAKICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtZGVwbG95Ij4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveSIvPgotCTxhbnRjYWxsIHRhcmdldD0iY2xlYW4iLz4KLQk8YW50Y2FsbCB0YXJnZXQ9IndzZGwtaW1wb3J0Ij4KLQkJPHBhcmFtIG5hbWU9InNlcnZlciIgdmFsdWU9IkhlbGxvSW1wbCIvPgotCQk8cGFyYW0gbmFtZT0icG9ydCIgdmFsdWU9IkhlbGxvSW1wbCIvPgotCTwvYW50Y2FsbD4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9IndzZGwtaW1wb3J0Ij4KKyAgICAgICAgPHBhcmFtIG5hbWU9InNlcnZlciIgdmFsdWU9IkhlbGxvSW1wbCIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icG9ydCIgdmFsdWU9IkhlbGxvSW1wbCIvPgorICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIgogICAgICAgICAgICAgaW5jbHVkZXM9ImVqYi9HYXRld2F5SW1wbC5qYXZhIj4KICAgICAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9ImNsYXNzcGF0aCIvPgogICAgICAgICA8L2phdmFjPgotIAk8bWtkaXIgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMvd3NkbC93c2RsIi8+Ci0JPGdldCBzcmM9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L0hlbGxvSW1wbFNlcnZpY2UvSGVsbG9JbXBsP1dTREwiIGRlc3Q9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3Nlcy8vd3NkbC93c2RsL0hlbGxvSW1wbFNlcnZpY2Uud3NkbCIvPgorICAgICA8bWtkaXIgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMvd3NkbC93c2RsIi8+CisgICAgPGdldCBzcmM9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L0hlbGxvSW1wbFNlcnZpY2UvSGVsbG9JbXBsP1dTREwiIGRlc3Q9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3Nlcy8vd3NkbC93c2RsL0hlbGxvSW1wbFNlcnZpY2Uud3NkbCIvPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95L0VqYkNsaWVudC5qYXIiCi0JICAgIGJhc2VkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIKLQkgICAgaW5jbHVkZXM9ImVqYi8qKixlbmRwb2ludC8qKiI+Ci0JICAgIDxtZXRhaW5mIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzL3dzZGwiLz4KLQk8L2phcj4KLQk8d2FpdGZvciBtYXh3YWl0PSIxMDAiIG1heHdhaXR1bml0PSJzZWNvbmQiPgotICAgICAgIAkgICAgPG9yPgorICAgICAgICBiYXNlZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiCisgICAgICAgIGluY2x1ZGVzPSJlamIvKiosZW5kcG9pbnQvKioiPgorICAgICAgICA8bWV0YWluZiBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3Nlcy93c2RsIi8+CisgICAgPC9qYXI+CisgICAgPHdhaXRmb3IgbWF4d2FpdD0iMTAwIiBtYXh3YWl0dW5pdD0ic2Vjb25kIj4KKyAgICAgICAgICAgICAgIDxvcj4KICAgICAgICAgICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvRWpiQ2xpZW50Lmphcl9kZXBsb3llZCIvPgogICAgICAgICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS9FamJDbGllbnQuamFyX2RlcGxveUZhaWxlZCIvPgogICAgICAgICAgICAgPC9vcj4KQEAgLTU5LDMwICs1OSwzMCBAQAogICAgICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJkZXBsb3lfZmFpbGVkIj4KICAgICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS9FamJDbGllbnQuamFyX2RlcGxveUZhaWxlZCIvPgogICAgICAgICA8L2NvbmRpdGlvbj4KLQk8ZmFpbCBpZj0iZGVwbG95X2ZhaWxlZCIgbWVzc2FnZT0iRGVwbG95bWVudCBmYWlsZWQiLz4KKyAgICA8ZmFpbCBpZj0iZGVwbG95X2ZhaWxlZCIgbWVzc2FnZT0iRGVwbG95bWVudCBmYWlsZWQiLz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtcnVuIj4KICAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7Y2xpZW50LXNyYy1uYW1lfSIgcHJvcGVydHk9ImNsaWVudCIgc3VmZml4PSIuamF2YSIvPgogICAgICAgICA8ZGlybmFtZSBmaWxlPSIke2NsaWVudC1zcmMtbmFtZX0iIHByb3BlcnR5PSJjbGllbnQtZGlyZWN0b3J5Ii8+Ci0gICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke2NsaWVudC1kaXJlY3Rvcnl9IiBwcm9wZXJ0eT0iY2xpZW50LXBrZy1uYW1lIi8+IAorICAgICAgICA8YmFzZW5hbWUgZmlsZT0iJHtjbGllbnQtZGlyZWN0b3J5fSIgcHJvcGVydHk9ImNsaWVudC1wa2ctbmFtZSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2xpZW50LWNsYXNzLW5hbWUiIHZhbHVlPSIke2NsaWVudC1wa2ctbmFtZX0vJHtjbGllbnR9LmNsYXNzIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjbGVhbiIvPgotCTxhbnRjYWxsIHRhcmdldD0id3NkbC1pbXBvcnQiPgotCQk8cGFyYW0gbmFtZT0ic2VydmVyIiB2YWx1ZT0iR2F0ZXdheUltcGwiLz4KLQkJPHBhcmFtIG5hbWU9InBvcnQiIHZhbHVlPSJHYXRld2F5SW1wbCIvPgotCTwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY2xpZW50Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbiIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0id3NkbC1pbXBvcnQiPgorICAgICAgICA8cGFyYW0gbmFtZT0ic2VydmVyIiB2YWx1ZT0iR2F0ZXdheUltcGwiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InBvcnQiIHZhbHVlPSJHYXRld2F5SW1wbCIvPgorICAgIDwvYW50Y2FsbD4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY2xpZW50Ii8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgYXBwY2xpZW50IHdpdGggJHtjbGllbnQtcGtnLW5hbWV9LiR7Y2xpZW50fSIvPgogICAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIi8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2FwcGNsaWVudCIgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiPgotICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjbGllbnQtcGtnLW5hbWV9LiR7Y2xpZW50fSIvPiAgICAKKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y2xpZW50LXBrZy1uYW1lfS4ke2NsaWVudH0iLz4KICAgICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS11bmRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3kiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImF1dG91bmRlcGxveS1maWxlIj4KLQkJPHBhcmFtIG5hbWU9ImZpbGVuYW1lIiB2YWx1ZT0iRWpiQ2xpZW50LmphciIvPgotCTwvYW50Y2FsbD4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImF1dG91bmRlcGxveS1maWxlIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImZpbGVuYW1lIiB2YWx1ZT0iRWpiQ2xpZW50LmphciIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LXN1Y2Nlc3MiPgpAQCAtOTEsNiArOTEsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGZhaWxlZCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2VydmljZWVqYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZXJ2aWNlZWpiY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQppbmRleCAwM2U5YjY3Li4wYzI2MGRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZXJ2aWNlZWpiY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZXJ2aWNlZWpiY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsNDMgKzI4LDQzIEBACiAgICAgICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgZGVzYyA9ICJ3cy1lamItc2V2aWNlLWZpZWxkLWluamVjdGlvbiI7CisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIGRlc2MgPSAid3MtZWpiLXNldmljZS1maWVsZC1pbmplY3Rpb24iOwogCi0JQFdlYlNlcnZpY2VSZWYoR2F0ZXdheUltcGxTZXJ2aWNlLmNsYXNzKQorICAgIEBXZWJTZXJ2aWNlUmVmKEdhdGV3YXlJbXBsU2VydmljZS5jbGFzcykKICAgICAgICAgc3RhdGljIEdhdGV3YXlJbXBsIHBvcnQ7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGRlc2MpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGRlc2MpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KGRlc2MpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeShkZXNjKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogICAgICAgICAgICAgdHJ5IHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJNZXRob2QgaW5qZWN0ZWQgcmVmZXJlbmNlIHRlc3QuLi4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXRob2QgaW5qZWN0ZWQgcmVmZXJlbmNlIHRlc3QuLi4iKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5pbnZva2VNZXRob2QoIkFwcHNlcnZlciBUZXN0ZXIgISIpOwotCQlpZihyZXQuaW5kZXhPZigiTUVUSE9EIFdlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICBpZihyZXQuaW5kZXhPZigiTUVUSE9EIFdlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2MsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2ZXIgcmV0dXJuZWQgIiArIHJldCArICIgOiBQQVNTRUQiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJGaWVsZCBpbmplY3RlZCByZWZlcmVuY2UgdGVzdC4uLiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZpZWxkIGluamVjdGVkIHJlZmVyZW5jZSB0ZXN0Li4uIik7CiAgICAgICAgICAgICAgICAgcmV0ID0gcG9ydC5pbnZva2VGaWVsZCgiQXBwc2VydmVyIFRlc3RlciAhIik7Ci0JCWlmKHJldC5pbmRleE9mKCJGSUVMRCBXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgaWYocmV0LmluZGV4T2YoIkZJRUxEIFdlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2MsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2ZXIgcmV0dXJuZWQgIiArIHJldCArICIgOiBQQVNTRUQiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJEZXBlbmRlbmN5IGpuZGkgbG9vdXAgcmVmZXJlbmNlIHRlc3QuLi4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZXBlbmRlbmN5IGpuZGkgbG9vdXAgcmVmZXJlbmNlIHRlc3QuLi4iKTsKICAgICAgICAgICAgICAgICByZXQgPSBwb3J0Lmludm9rZURlcGVuZGVuY3koIkFwcHNlcnZlciBUZXN0ZXIgISIpOwotCQlpZihyZXQuaW5kZXhPZigiSk5ESSBXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgaWYocmV0LmluZGV4T2YoIkpOREkgV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzYywgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQl9CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlcnZlciByZXR1cm5lZCAiICsgcmV0ICsgIiA6IFBBU1NFRCIpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2MsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZXJ2aWNlZWpiY2xpZW50L2VqYi9HYXRld2F5SW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2VydmljZWVqYmNsaWVudC9lamIvR2F0ZXdheUltcGwuamF2YQppbmRleCBhMDQwM2RjLi4xNWFjZWY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZXJ2aWNlZWpiY2xpZW50L2VqYi9HYXRld2F5SW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NlcnZpY2VlamJjbGllbnQvZWpiL0dhdGV3YXlJbXBsLmphdmEKQEAgLTM4LDM4ICszOCwzOCBAQAogCiAgICAgSGVsbG9JbXBsU2VydmljZSBzZXJ2aWNlTWV0aG9kPW51bGw7CiAKLSAgICAvLyBtZXRob2QgaW5qZWN0aW9uIGhhcyB0byBiZSBwcml2YXRlIHRvIGF2b2lkIGJlaW5nIHBhcnQgb2YgdGhlIAorICAgIC8vIG1ldGhvZCBpbmplY3Rpb24gaGFzIHRvIGJlIHByaXZhdGUgdG8gYXZvaWQgYmVpbmcgcGFydCBvZiB0aGUKICAgICAvLyB3ZWIgc2VydmljZSBpbnRlcmZhY2UuCiAgICAgQFdlYlNlcnZpY2VSZWYoKQogICAgIHByaXZhdGUgdm9pZCBzZXRTZXJ2aWNlKEhlbGxvSW1wbFNlcnZpY2Ugc2VydmljZSkgewotCXNlcnZpY2VNZXRob2QgPSBzZXJ2aWNlOworICAgIHNlcnZpY2VNZXRob2QgPSBzZXJ2aWNlOwogICAgIH0KIAogICAgIEBXZWJNZXRob2QKICAgICBwdWJsaWMgU3RyaW5nIGludm9rZU1ldGhvZChTdHJpbmcgd2hvKSB7Ci0gICAgICAgIEhlbGxvSW1wbCBwb3J0ID0gc2VydmljZU1ldGhvZC5nZXRQb3J0KEhlbGxvSW1wbC5jbGFzcyk7ICAgICAgIAotCXJldHVybiAiTUVUSE9EICIgKyBwb3J0LnNheUhlbGxvKHdobyk7CisgICAgICAgIEhlbGxvSW1wbCBwb3J0ID0gc2VydmljZU1ldGhvZC5nZXRQb3J0KEhlbGxvSW1wbC5jbGFzcyk7CisgICAgcmV0dXJuICJNRVRIT0QgIiArIHBvcnQuc2F5SGVsbG8od2hvKTsKICAgICB9CiAKICAgICBAV2ViTWV0aG9kCiAgICAgcHVibGljIFN0cmluZyBpbnZva2VGaWVsZChTdHJpbmcgd2hvKSB7Ci0gICAgICAgIEhlbGxvSW1wbCBwb3J0ID0gc2VydmljZUZpZWxkLmdldFBvcnQoSGVsbG9JbXBsLmNsYXNzKTsgICAgICAgIAorICAgICAgICBIZWxsb0ltcGwgcG9ydCA9IHNlcnZpY2VGaWVsZC5nZXRQb3J0KEhlbGxvSW1wbC5jbGFzcyk7CiAgICAgICAgIHJldHVybiAiRklFTEQgIiArIHBvcnQuc2F5SGVsbG8od2hvKTsKICAgICB9CiAKICAgICBAV2ViTWV0aG9kCiAgICAgcHVibGljIFN0cmluZyBpbnZva2VEZXBlbmRlbmN5KFN0cmluZyB3aG8pIHsKICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0JdHJ5IHsKLQkJQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCQlIZWxsb0ltcGxTZXJ2aWNlIHNlcnZpY2UgPSAoSGVsbG9JbXBsU2VydmljZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvaGVsbG9zZXJ2aWNlIik7Ci0JCUhlbGxvSW1wbCBwb3J0ID0gc2VydmljZS5nZXRQb3J0KEhlbGxvSW1wbC5jbGFzcyk7CisgICAgdHJ5IHsKKyAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBIZWxsb0ltcGxTZXJ2aWNlIHNlcnZpY2UgPSAoSGVsbG9JbXBsU2VydmljZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvaGVsbG9zZXJ2aWNlIik7CisgICAgICAgIEhlbGxvSW1wbCBwb3J0ID0gc2VydmljZS5nZXRQb3J0KEhlbGxvSW1wbC5jbGFzcyk7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gIkpOREkgIiArIHBvcnQuc2F5SGVsbG8od2hvKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKHJlc3VsdCk7Ci0JfSBjYXRjaChUaHJvd2FibGUgdCkgewotCQl0LnByaW50U3RhY2tUcmFjZSgpOwotCQlyZXR1cm4gIkZBSUxFRCI7Ci0JfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmVzdWx0KTsKKyAgICB9IGNhdGNoKFRocm93YWJsZSB0KSB7CisgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiAiRkFJTEVEIjsKKyAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZXNzaW9uY3R4L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Nlc3Npb25jdHgvYnVpbGQueG1sCmluZGV4IDMwNDk0ZjcuLjZhYTIwMTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Nlc3Npb25jdHgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Nlc3Npb25jdHgvYnVpbGQueG1sCkBAIC0zNCw2ICszNCw2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJlcG9ydC1mYWlsdXJlIj4KICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3QgZmFpbGVkIi8+Ci0gICAgPC90YXJnZXQ+ICAgCQotICAgIAorICAgIDwvdGFyZ2V0PgorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZXNzaW9uY3R4L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Nlc3Npb25jdHgvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGRhZjJkZWUuLjhkZTc4MTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Nlc3Npb25jdHgvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Nlc3Npb25jdHgvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMiwxMCArMzIsMTAgQEAKICAgICAgICAgc3RhdGljIEhlbGxvSW1wbFNlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLWVqYi1zZXNzaW9uY3R4Iik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLWVqYi1zZXNzaW9uY3R4Iik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWVqYi1zZXNzaW9uY3R4Iik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1lamItc2Vzc2lvbmN0eCIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CkBAIC00MywxMSArNDMsMTEgQEAKICAgICAgICAgICAgICAgICBIZWxsb0ltcGwgcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9JbXBsUG9ydCgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPDEwO2krKykgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7Ci0JCSAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyBBTk9OWU1PVVMiKSA9PSAtMSkgeworICAgICAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8gQU5PTllNT1VTIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamItc2Vzc2lvbmN0eCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiLXNlc3Npb25jdHgiLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2Vzc2lvbmN0eC9lbmRwb2ludC9IZWxsb0ltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Nlc3Npb25jdHgvZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEKaW5kZXggNWVjYmNiMS4uMWFlMTk1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2Vzc2lvbmN0eC9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZXNzaW9uY3R4L2VuZHBvaW50L0hlbGxvSW1wbC5qYXZhCkBAIC0zMCw5ICszMCw5IEBACiAgICAgQFJlc291cmNlIFNlc3Npb25Db250ZXh0IGVqYnNjOwogCiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJFSkIgV1NDVFhUIHdzYyA9ICIgKyBlamJzYyk7Ci0JaWYoZWpic2MgIT0gbnVsbCkKLSAgICAgICAgCXJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgZWpic2MuZ2V0Q2FsbGVyUHJpbmNpcGFsKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJFSkIgV1NDVFhUIHdzYyA9ICIgKyBlamJzYyk7CisgICAgaWYoZWpic2MgIT0gbnVsbCkKKyAgICAgICAgICAgIHJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgZWpic2MuZ2V0Q2FsbGVyUHJpbmNpcGFsKCk7CiAgICAgICAgIHJldHVybiAiRUpCIFdlYlNlcnZpY2VDb250ZXh0IGluamVjdGlvbiBmYWlsZWQiOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NpbmdsZXRvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2luZ2xldG9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMTFlNGQ0ZS4uYmQzZmRlNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2luZ2xldG9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2luZ2xldG9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDggKzE1LDggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNpbmdsZXRvbiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NpbmdsZXRvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zaW5nbGV0b24vYnVpbGQueG1sCmluZGV4IGYwMjllYTMuLjU2M2JlZDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NpbmdsZXRvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2luZ2xldG9uL2J1aWxkLnhtbApAQCAtNjksOCArNjksOCBAQAogICAgICAgICA8cGFyYW0gbmFtZT0id3NpbXBvcnQuYXJncyIKICAgICAgICAgICAgICAgIHZhbHVlPSIta2VlcCAgLVhlbmRvcnNlZCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQgaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vSGVsbG9JbXBsU2VydmljZS9IZWxsb0ltcGw/V1NETCIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgPGphdmFjIHZlcmJvc2U9InRydWUiIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9tb2R1bGVzL3dlYnNlcnZpY2VzLW9zZ2kuamFyOiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy93ZWJzZXJ2aWNlcy1hcGktb3NnaS5qYXI6JHtlbnYuUzFBU19IT01FfS9tb2R1bGVzL2pheGItb3NnaS5qYXI6JHtlbnYuUzFBU19IT01FfS9tb2R1bGVzL2pheGItYXBpLW9zZ2kuamFyIiAKKyAgICAgIDxqYXZhYyB2ZXJib3NlPSJ0cnVlIiBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9tb2R1bGVzL3dlYnNlcnZpY2VzLW9zZ2kuamFyOiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy93ZWJzZXJ2aWNlcy1hcGktb3NnaS5qYXI6JHtlbnYuUzFBU19IT01FfS9tb2R1bGVzL2pheGItb3NnaS5qYXI6JHtlbnYuUzFBU19IT01FfS9tb2R1bGVzL2pheGItYXBpLW9zZ2kuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgIDwvdGFyZ2V0PgogCkBAIC04Niw3ICs4Niw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tY2xpZW50Ij4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudC1jbGFzcyIgdmFsdWU9ImNsaWVudC5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NpbmdsZXRvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zaW5nbGV0b24vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDhjZWIwNjIuLjg0NmNkM2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NpbmdsZXRvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2luZ2xldG9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzcsMTAgKzM3LDEwIEBACiAgICAgICAgLy8gc3RhdGljIEhlbGxvSW1wbFNlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImVqYi1zaW5nbGV0b24tc2VydmljZSIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamItc2luZ2xldG9uLXNlcnZpY2UiKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9TeW5jVGVzdCgpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLXNpbmdsZXRvbi1zZXJ2aWNlIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItc2luZ2xldG9uLXNlcnZpY2UiKTsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyB2b2lkIGRvU3luY1Rlc3QoKSB7CkBAIC00OCwxMSArNDgsMTEgQEAKICAgICAgICAgICAgICAgICBIZWxsb0ltcGxTZXJ2aWNlIHNlcnZpY2UgPSBuZXcgSGVsbG9JbXBsU2VydmljZSgpOwogICAgICAgICAgICAgICAgIEhlbGxvSW1wbCBwb3J0ID0gc2VydmljZS5nZXRIZWxsb0ltcGxQb3J0KCk7CiAgICAgICAgICAgICAgICAgUmV0VmFsIHJldCA9IHBvcnQuc2F5SGVsbG8oIkhpIFNpbmdsZXRvbiIpOwotCQlpZihyZXQuZ2V0UmV0VmFsKCkuaW5kZXhPZigiU2luZyIpID09IC0xKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldST05HIEdSRUVUSU5HICIgKyByZXQuZ2V0UmV0VmFsKCkpOworICAgICAgICBpZihyZXQuZ2V0UmV0VmFsKCkuaW5kZXhPZigiU2luZyIpID09IC0xKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldST05HIEdSRUVUSU5HICIgKyByZXQuZ2V0UmV0VmFsKCkpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiLXNpbmdsZXRvbi1zZXJ2aWNlLXRlc3QiLCBzdGF0LkZBSUwpOwotCQkgICAgcmV0dXJuOwotCQl9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0LmdldFJldFZhbCgpKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiLXNpbmdsZXRvbi1zZXJ2aWNlLXRlc3QiLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyL2J1aWxkLnhtbAppbmRleCAwNmM3YWNjLi5hNGZiYzQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyL2J1aWxkLnhtbApAQCAtMzQsNiArMzQsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGZhaWxlZCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA0NjYxOGVjLi5jODc0YjMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzIsMTAgKzMyLDEwIEBACiAgICAgICAgIC8vc3RhdGljIEhlbGxvRUpCU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiaGFuZGxlci1jaGFpbi1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImhhbmRsZXItY2hhaW4tYW5ub3RhdGlvbiIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJoYW5kbGVyLWNoYWluLWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImhhbmRsZXItY2hhaW4tYW5ub3RhdGlvbiIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CkBAIC00MywxMSArNDMsMTEgQEAKICAgICAgICAgICAgICAgICBIZWxsbyBwb3J0ID1uZXcgSGVsbG9FSkJTZXJ2aWNlKCkuZ2V0SGVsbG9FSkJQb3J0KCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKLQkJICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIGluamVjdGVkVmFsdWUiKSA9PSAtMSkgeworICAgICAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8gaW5qZWN0ZWRWYWx1ZSIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiaGFuZGxlci1jaGFpbi1hbm5vdGF0aW9uIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJoYW5kbGVyLWNoYWluLWFubm90YXRpb24iLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci9lbmRwb2ludC9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci9lbmRwb2ludC9IZWxsby5qYXZhCmluZGV4IGRkNGI2NDIuLjRiOGY5ZWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3N2Y2hhbmRsZXIvZW5kcG9pbnQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyL2VuZHBvaW50L0hlbGxvLmphdmEKQEAgLTIxLDUgKzIxLDUgQEAKIEBXZWJTZXJ2aWNlCiBwdWJsaWMgaW50ZXJmYWNlIEhlbGxvIHsKIAotCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobyk7CisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3N2Y2hhbmRsZXIvZW5kcG9pbnQvVGVzdEhhbmRsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3N2Y2hhbmRsZXIvZW5kcG9pbnQvVGVzdEhhbmRsZXIuamF2YQppbmRleCBmYmE2MDUxLi42NDk0NTdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyL2VuZHBvaW50L1Rlc3RIYW5kbGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci9lbmRwb2ludC9UZXN0SGFuZGxlci5qYXZhCkBAIC0yOCwxMSArMjgsMTEgQEAKIGltcG9ydCBqYWthcnRhLnhtbC5zb2FwLio7CiAKIHB1YmxpYyBjbGFzcyBUZXN0SGFuZGxlciBpbXBsZW1lbnRzIFNPQVBIYW5kbGVyPFNPQVBNZXNzYWdlQ29udGV4dD4gewotICAgIAorCiAgICAgcHVibGljIFNldDxRTmFtZT4gZ2V0SGVhZGVycygpIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiAgICAgU3RyaW5nIHBvc3RDb25zdFN0cmluZyA9ICJOT1RfSU5JVElBTElaRUQiOwogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKQEAgLTQwLDggKzQwLDggQEAKICAgICB9CiAKICAgICBAUmVzb3VyY2UobmFtZT0ic3RyaW5nVmFsdWUiKQotICAgIFN0cmluZyBpbmplY3RlZFN0cmluZyA9ICJ1bmRlZmluZWQiOyAgICAKLSAgICAKKyAgICBTdHJpbmcgaW5qZWN0ZWRTdHJpbmcgPSAidW5kZWZpbmVkIjsKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZU1lc3NhZ2UoU09BUE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmICgiUFJPUEVSTFlfSU5JVElBTElaRUQiLmVxdWFscyhwb3N0Q29uc3RTdHJpbmcpKSB7CkBAIC01MCwzMyArNTAsMzMgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhhbmRsZXIgUG9zdENvbnN0cnVjdCBub3QgY2FsbGVkIHByb3BlcnR5Iik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwb3N0Q29uc3RTdHJpbmcgPSAiICsgcG9zdENvbnN0U3RyaW5nKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoInVuZGVmaW5lZCIuZXF1YWxzKGluamVjdGVkU3RyaW5nKSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGFuZGxlciBub3QgaW5qZWN0ZWQgcHJvcGVydHkiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW5qZWN0ZWRTdHJpbmcgPSAiICsgaW5qZWN0ZWRTdHJpbmcpOwotICAgICAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICAgICAgfQogICAgICAgICAgICAgU09BUE1lc3NhZ2VDb250ZXh0IHNtYyA9IChTT0FQTWVzc2FnZUNvbnRleHQpIGNvbnRleHQ7CiAgICAgICAgICAgICBTT0FQTWVzc2FnZSBtZXNzYWdlID0gc21jLmdldE1lc3NhZ2UoKTsKICAgICAgICAgICAgIFNPQVBCb2R5IGJvZHkgPSBtZXNzYWdlLmdldFNPQVBCb2R5KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU09BUEVsZW1lbnQgcGFyYW1FbGVtZW50ID0KICAgICAgICAgICAgICAgICAoU09BUEVsZW1lbnQpIGJvZHkuZ2V0Rmlyc3RDaGlsZCgpLmdldEZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgIHBhcmFtRWxlbWVudC5zZXRWYWx1ZShpbmplY3RlZFN0cmluZyArICIgIiArIHBhcmFtRWxlbWVudC5nZXRWYWx1ZSgpKTsKICAgICAgICAgfSBjYXRjaCAoU09BUEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJWSUoncyBURVNUIEhBTkRMRVIgQ0FMTEVEIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJWSUoncyBURVNUIEhBTkRMRVIgQ0FMTEVEIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZUZhdWx0KFNPQVBNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgY2xvc2UoTWVzc2FnZUNvbnRleHQgY29udGV4dCkge30KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NSZWYtd2Vic2VydmljZS1mZWF0dXJlcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NSZWYtd2Vic2VydmljZS1mZWF0dXJlcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDJlNzZhMzkuLjAyNmFhNDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c1JlZi13ZWJzZXJ2aWNlLWZlYXR1cmVzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id3NSZWYtd2Vic2VydmljZS1mZWF0dXJlcyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NSZWYtd2Vic2VydmljZS1mZWF0dXJlcy9idWlsZC54bWwKaW5kZXggNzFjNzE2Ny4uNmFjZjdmZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NSZWYtd2Vic2VydmljZS1mZWF0dXJlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NSZWYtd2Vic2VydmljZS1mZWF0dXJlcy9idWlsZC54bWwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAmdGVzdHByb3BlcnRpZXM7CiAgICAgJmpheHdzVG9vbHM7CiAKLSAgCisKICAgICA8cGF0aCBpZD0iY2xhc3NwYXRoIj4KICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMiPgogICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CkBAIC0xMTUsNyArMTE1LDcgQEAKICAgICAgICAgPGFyZyBsaW5lPSItLXBvcnQgJHthZG1pbi5wb3J0fSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7Y2xpZW50Lndhcn0iLz4KICAgICAgIDwvZXhlYz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KQEAgLTE0MSw2ICsxNDEsNiBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgogCi0gICAgCisKIDwvcHJvamVjdD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NSZWYtd2Vic2VydmljZS1mZWF0dXJlcy9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMvY2xpZW50LXdlYi54bWwKaW5kZXggMDI3ZGZjZS4uYjRiYmY1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NSZWYtd2Vic2VydmljZS1mZWF0dXJlcy9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c1JlZi13ZWJzZXJ2aWNlLWZlYXR1cmVzL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCBmZmQ3NmY1Li4zMGY5NWUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c1JlZi13ZWJzZXJ2aWNlLWZlYXR1cmVzL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NSZWYtd2Vic2VydmljZS1mZWF0dXJlcy9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC02Myw5ICs2Myw5IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBIRUxMTyBTRVJWSUNFIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIltIZWxsbyBBbGxdIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NSZWYtd2Vic2VydmljZS1mZWF0dXJlcy9lbmRwb2ludC9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NSZWYtd2Vic2VydmljZS1mZWF0dXJlcy9lbmRwb2ludC9IZWxsby5qYXZhCmluZGV4IDkzYjc5OWMuLjQwOGNlNDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMvZW5kcG9pbnQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c1JlZi13ZWJzZXJ2aWNlLWZlYXR1cmVzL2VuZHBvaW50L0hlbGxvLmphdmEKQEAgLTI2LDEwICsyNiwxMCBAQAogICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2V4YW1wbGUuY29tL0hlbGxvIgogKQogcHVibGljIGNsYXNzIEhlbGxvIHsKLQlwdWJsaWMgSGVsbG8oKSB7fQorICAgIHB1YmxpYyBIZWxsbygpIHt9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhlbGxvIiwgYWN0aW9uPSJ1cm46U2F5SGVsbG8iKQotCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgewotCQlyZXR1cm4gIkhlbGxvICIgKyB3aG87Ci0JfQorICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7CisgICAgICAgIHJldHVybiAiSGVsbG8gIiArIHdobzsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c1JlZi13ZWJzZXJ2aWNlLWZlYXR1cmVzL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c1JlZi13ZWJzZXJ2aWNlLWZlYXR1cmVzL3dlYi54bWwKaW5kZXggYWFlNTI3ZS4uZmJhMDkwMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NSZWYtd2Vic2VydmljZS1mZWF0dXJlcy93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMvd2ViLnhtbApAQCAtMTgsMTAgKzE4LDEwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMvd2ViY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NSZWYtd2Vic2VydmljZS1mZWF0dXJlcy93ZWJjbGllbnQvQ2xpZW50LmphdmEKaW5kZXggODA1MjA5NS4uNWYzYzgwOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NSZWYtd2Vic2VydmljZS1mZWF0dXJlcy93ZWJjbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NSZWYtd2Vic2VydmljZS1mZWF0dXJlcy93ZWJjbGllbnQvQ2xpZW50LmphdmEKQEAgLTMwLDExICszMCwxMSBAQAogICAgICAgICBATVRPTShlbmFibGVkPXRydWUpCiAgICAgICAgIEBSZXNwZWN0QmluZGluZwogICAgICAgICBAQWRkcmVzc2luZyAocmVxdWlyZWQgPSBmYWxzZSxlbmFibGVkPXRydWUpCi0gCisKICAgICAgICAgSGVsbG8gaGlwb3J0OwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NjdHh0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzY3R4dC9idWlsZC54bWwKaW5kZXggMzA0OTRmNy4uNmFhMjAxMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NjdHh0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c2N0eHQvYnVpbGQueG1sCkBAIC0zNCw2ICszNCw2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJlcG9ydC1mYWlsdXJlIj4KICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3QgZmFpbGVkIi8+Ci0gICAgPC90YXJnZXQ+ICAgCQotICAgIAorICAgIDwvdGFyZ2V0PgorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c2N0eHQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NjdHh0L2NsaWVudC9DbGllbnQuamF2YQppbmRleCA4OWFkODc2Li42ZWY3N2FhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c2N0eHQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzY3R4dC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMyLDEwICszMiwxMCBAQAogICAgICAgICBzdGF0aWMgSGVsbG9JbXBsU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtZWpiLXdzY3R4dCIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1lamItd3NjdHh0Iik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWVqYi13c2N0eHQiKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWVqYi13c2N0eHQiKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewpAQCAtNDMsMTEgKzQzLDExIEBACiAgICAgICAgICAgICAgICAgSGVsbG9JbXBsIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvSW1wbFBvcnQoKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7aTwxMDtpKyspIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIpOwotCQkgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYi13c2N0eHQiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYi13c2N0eHQiLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NjdHh0L2VuZHBvaW50L0hlbGxvSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NjdHh0L2VuZHBvaW50L0hlbGxvSW1wbC5qYXZhCmluZGV4IGNhOGRkMjUuLjQ5MDljNzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzY3R4dC9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c2N0eHQvZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEKQEAgLTMxLDggKzMxLDggQEAKIAogCiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJFSkIgV1NDVFhUIHdzYyA9ICIgKyBlamJzYyk7Ci0JaWYoZWpic2MgIT0gbnVsbCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRUpCIFdTQ1RYVCB3c2MgPSAiICsgZWpic2MpOworICAgIGlmKGVqYnNjICE9IG51bGwpIHsKIFN5c3RlbS5vdXQucHJpbnRsbihlamJzYy5nZXRNZXNzYWdlQ29udGV4dCgpKTsKIGlmIChlamJzYy5nZXRNZXNzYWdlQ29udGV4dCgpIGluc3RhbmNlb2YgamFrYXJ0YS54bWwud3MuaGFuZGxlci5NZXNzYWdlQ29udGV4dCl7CiBTeXN0ZW0ub3V0LnByaW50bG4oIllZWVlZIiArZWpic2MuZ2V0TWVzc2FnZUNvbnRleHQoKS5nZXRDbGFzcygpKTsKQEAgLTQxLDkgKzQxLDkgQEAKIFN5c3RlbS5vdXQucHJpbnRsbigiTk5OICIgKyBlamJzYy5nZXRNZXNzYWdlQ29udGV4dCgpLmdldENsYXNzKCkpOwogCiB9Ci0gICAgICAgIAlyZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHdobzsKKyAgICAgICAgICAgIHJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvOwogICAgICAgICB9Ci0vKglpZihzYyAhPSBudWxsKSB7CisvKiAgICBpZihzYyAhPSBudWxsKSB7CiBTeXN0ZW0ub3V0LnByaW50bG4oc2MuZ2V0Q29udGV4dERhdGEoKS5nZXRDbGFzcygpKTsKIFN5c3RlbS5vdXQucHJpbnRsbihzYy5nZXRDb250ZXh0RGF0YSgpKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NjdHh0aW50ZXJjZXB0b3IvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NjdHh0aW50ZXJjZXB0b3IvYnVpbGQueG1sCmluZGV4IDA2YzdhY2MuLmE0ZmJjNDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzY3R4dGludGVyY2VwdG9yL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c2N0eHRpbnRlcmNlcHRvci9idWlsZC54bWwKQEAgLTM0LDYgKzM0LDYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBmYWlsZWQiLz4KLSAgICA8L3RhcmdldD4gICAJCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzY3R4dGludGVyY2VwdG9yL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzY3R4dGludGVyY2VwdG9yL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA3Yzg2NDQxLi4xYWJmNGI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c2N0eHRpbnRlcmNlcHRvci9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NjdHh0aW50ZXJjZXB0b3IvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMiwzMSArMzIsMzEgQEAKICAgICAgICAgc3RhdGljIEhlbGxvRUpCU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid3NjdHh0LWludm9jYXRpb25oYW5kbGVyY3R4dCIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3c2N0eHQtaW52b2NhdGlvbmhhbmRsZXJjdHh0Iik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoIndzY3R4dC1pbnZvY2F0aW9uaGFuZGxlcmN0eHQiKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndzY3R4dC1pbnZvY2F0aW9uaGFuZGxlcmN0eHQiKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBIZWxsbyBwb3J0ID0gc2VydmljZS5nZXRIZWxsb0VKQlBvcnQoKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7Ci0JCWlmKHJldC5pbmRleE9mKCIxMjM0IikgPT0gLTEpIHsKKyAgICAgICAgaWYocmV0LmluZGV4T2YoIjEyMzQiKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3c2N0eHQtaW52b2NhdGlvbmhhbmRsZXJjdHh0Iiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQl9Ci0JCWlmKHJldC5pbmRleE9mKCI0NSIpID09IC0xKSB7CisgICAgICAgIH0KKyAgICAgICAgaWYocmV0LmluZGV4T2YoIjQ1IikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid3NjdHh0LWludm9jYXRpb25oYW5kbGVyY3R4dCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQotCQlpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgIH0KKyAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3c2N0eHQtaW52b2NhdGlvbmhhbmRsZXJjdHh0Iiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQl9CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid3NjdHh0LWludm9jYXRpb25oYW5kbGVyY3R4dCIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c2N0eHRpbnRlcmNlcHRvci9lbmRwb2ludC9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NjdHh0aW50ZXJjZXB0b3IvZW5kcG9pbnQvSGVsbG8uamF2YQppbmRleCBkZDRiNjQyLi40YjhmOWVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c2N0eHRpbnRlcmNlcHRvci9lbmRwb2ludC9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzY3R4dGludGVyY2VwdG9yL2VuZHBvaW50L0hlbGxvLmphdmEKQEAgLTIxLDUgKzIxLDUgQEAKIEBXZWJTZXJ2aWNlCiBwdWJsaWMgaW50ZXJmYWNlIEhlbGxvIHsKIAotCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobyk7CisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzY3R4dGludGVyY2VwdG9yL2VuZHBvaW50L0hlbGxvRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c2N0eHRpbnRlcmNlcHRvci9lbmRwb2ludC9IZWxsb0VKQi5qYXZhCmluZGV4IGI4MmJjZmEuLjE1OWIzMDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzY3R4dGludGVyY2VwdG9yL2VuZHBvaW50L0hlbGxvRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NjdHh0aW50ZXJjZXB0b3IvZW5kcG9pbnQvSGVsbG9FSkIuamF2YQpAQCAtNDAsMTIgKzQwLDEyIEBACiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHJpdmF0ZSBPYmplY3QgaW50ZXJjZXB0QnVzaW5lc3NNZXRob2QoSW52b2NhdGlvbkNvbnRleHQgaW52Q3R4KSB7Ci0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1hcCA9IGludkN0eC5nZXRDb250ZXh0RGF0YSgpOwogICAgICAgICAgICBtYXAucHV0KCJpbnRWYWwiLCBuZXcgSW50ZWdlcig0NSkpOwogICAgICAgICAgICBtYXAucHV0KCJsb25nVmFsIiwgbmV3IExvbmcoMTIzNCkpOwogICAgICAgICAgICByZXR1cm4gaW52Q3R4LnByb2NlZWQoKTsKLQl9IGNhdGNoKFRocm93YWJsZSB0KSB7fQorICAgIH0gY2F0Y2goVGhyb3dhYmxlIHQpIHt9CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzbmFtZWVqYm5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzbmFtZWVqYm5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCA1MDA3MDljLi5jNjdjYTBkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c25hbWVlamJuYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NuYW1lZWpibmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw4ICsxNSw4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3c25hbWVlamJuYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NuYW1lZWpibmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c25hbWVlamJuYW1lL2J1aWxkLnhtbAppbmRleCBkODFlOGY0Li42NDM1YWUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c25hbWVlamJuYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c25hbWVlamJuYW1lL2J1aWxkLnhtbApAQCAtNTgsOCArNTgsOCBAQAogICAgICAgICA8cGFyYW0gbmFtZT0id3NpbXBvcnQuYXJncyIKICAgICAgICAgICAgICAgIHZhbHVlPSIta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQgaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vQWRkTnVtYmVyc0ltcGxTZXJ2aWNlL1RoaXNTaG91bGRCZUlnbm9yZWQ/V1NETCIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTcwLDcgKzcwLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tY2xpZW50Ij4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudC1jbGFzcyIgdmFsdWU9ImNsaWVudC5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzbmFtZWVqYm5hbWUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NuYW1lZWpibmFtZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggN2UzN2ZjZi4uZDBkNjBiZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NuYW1lZWpibmFtZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NuYW1lZWpibmFtZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTM3LDIxICszNywyMSBAQAogICAgICAgICBzdGF0aWMgQWRkTnVtYmVyc0ltcGxTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3c25hbWUtZWpibmFtZS1zZXJ2aWNlIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndzbmFtZS1lamJuYW1lLXNlcnZpY2UiKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9TeW5jVGVzdCgpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgid3NuYW1lLWVqYm5hbWUtc2VydmljZSIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid3NuYW1lLWVqYm5hbWUtc2VydmljZSIpOwogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIHZvaWQgZG9TeW5jVGVzdCgpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgVGhpc1Nob3VsZEJlSWdub3JlZCBwb3J0ID0gc2VydmljZS5nZXRUaGlzU2hvdWxkQmVJZ25vcmVkUG9ydCgpOwogICAgICAgICAgICAgICAgIGludCByZXQgPSBwb3J0LmFkZE51bWJlcnMoMjIyMiwgMTIzNCk7Ci0JCWlmKHJldCE9KDIyMjIrMTIzNCkpIHsKKyAgICAgICAgaWYocmV0IT0oMjIyMisxMjM0KSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgYWRkIHJlc3VsdCAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndzbmFtZS1lamJuYW1lLXNlcnZpY2UtdGVzdCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndzbmFtZS1lamJuYW1lLXNlcnZpY2UtdGVzdCIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2ZpbHRlcl91cmxoYW5kbGluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2ZpbHRlcl91cmxoYW5kbGluZy9idWlsZC54bWwKaW5kZXggMzE4ZGVkMy4uMDNlZTg2YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9maWx0ZXJfdXJsaGFuZGxpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZmlsdGVyX3VybGhhbmRsaW5nL2J1aWxkLnhtbApAQCAtMTgsNyArMTgsNyBAQAogCiA8IURPQ1RZUEUgcHJvamVjdCBbCiA8IUVOVElUWSBjb21tb25TZXR1cCBTWVNURU0gImZpbGU6Li8uLi8uLi8uLi9jb25maWcvcHJvcGVydGllcy54bWwiPgotPCFFTlRJVFkgY29tbW9uQnVpbGQgU1lTVEVNICJmaWxlOi4vLi4vLi4vLi4vY29uZmlnL2NvbW1vbi54bWwiPiAKKzwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiZmlsZTouLy4uLy4uLy4uL2NvbmZpZy9jb21tb24ueG1sIj4KIF0+CiAKIDxwcm9qZWN0IG5hbWU9IkZpbHRlciBVUkwgaGFuZGxpbmcgdGVzdCIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KQEAgLTM0LDcgKzM0LDcgQEAKICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LkNsaWVudCI+CiAgICAgICAgIDxhcmcgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9LyIvPgpAQCAtNDIsMTEgKzQyLDExIEBACiAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KICAgICAgICAgPC9jbGFzc3BhdGg+Ci0gICAgPC9qYXZhPiAgICAKKyAgICA8L2phdmE+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICA8L3RhcmdldD4KIDwvcHJvamVjdD4KLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZmlsdGVyX3VybGhhbmRsaW5nL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZmlsdGVyX3VybGhhbmRsaW5nL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA5MzUyZjc0Li5mMTFkMTM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2ZpbHRlcl91cmxoYW5kbGluZy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9maWx0ZXJfdXJsaGFuZGxpbmcvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMCwyMCArMzAsMjAgQEAKICAqLwogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KLSAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOyAgICAKKyAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1maWx0ZXItdXJsLWhhbmRsaW5nIik7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0gICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1maWx0ZXItdXJsLWhhbmRsaW5nIik7ICAgICAgICAKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWZpbHRlci11cmwtaGFuZGxpbmciKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogICAgICAgICB0cnkgewotICAgICAgICAgICAgU3RyaW5nIHdlYlVSTCA9IGFyZ3NbMF07ICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJpbmcgd2ViVVJMID0gYXJnc1swXTsKICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKGFyZ3NbMF0gKyAiLy8iKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW52b2tpbmcgIiArIHVybC50b0V4dGVybmFsRm9ybSgpKTsKICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwpAQCAtNTksNyArNTksNyBAQAogICAgICAgICAgICAgaWYgKEh0dHBVUkxDb25uZWN0aW9uLkhUVFBfSU5URVJOQUxfRVJST1IgPT0gcmVzcG9uc2VDb2RlKSB7CiAgICAgICAgICAgICAgICAgLy8gc2VydmVyIG5vdCBzdGFydGVkCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciwgc2VydmVyIGlzIGRvd24gPyIpOwotICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWJzZXJ2aWNlIGZpbHRlciB1cmwgaGFuZGxpbmciLCBzdGF0LkZBSUwpOyAgICAgICAgCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYnNlcnZpY2UgZmlsdGVyIHVybCBoYW5kbGluZyIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKEh0dHBVUkxDb25uZWN0aW9uLkhUVFBfT0sgPT0gcmVzcG9uc2VDb2RlKSB7CkBAIC02OCwyMyArNjgsMjMgQEAKICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoID0gY29ubmVjdGlvbi5nZXRDb250ZW50TGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb250ZW50LWxlbmd0aCAiICsgbGVuZ3RoKTsKICAgICAgICAgICAgICAgICBpZiAobGVuZ3RoPT0tMSkgewotICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2Vic2VydmljZSBmaWx0ZXIgdXJsIGhhbmRsaW5nIiwgc3RhdC5GQUlMKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWJzZXJ2aWNlIGZpbHRlciB1cmwgaGFuZGxpbmciLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWJzZXJ2aWNlIGZpbHRlciB1cmwgaGFuZGxpbmciLCBzdGF0LlBBU1MpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYnNlcnZpY2UgZmlsdGVyIHVybCBoYW5kbGluZyIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWJzZXJ2aWNlIGZpbHRlciB1cmwgaGFuZGxpbmciLCBzdGF0LkZBSUwpOyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWJzZXJ2aWNlIGZpbHRlciB1cmwgaGFuZGxpbmciLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SIC0gVW5rbm93IHJldHVybiBjb2RlICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICAgICAgICAgIE1hcCBtYXAgPSBjb25uZWN0aW9uLmdldEhlYWRlckZpZWxkcygpOwogICAgICAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaXRyPW1hcC5rZXlTZXQoKS5pdGVyYXRvcigpO2l0ci5oYXNOZXh0KCk7KSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBoZWFkZXIgPSAoU3RyaW5nKSBpdHIubmV4dCgpOwogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlYWRlciAiICsgaGVhZGVyICsgIi0tPiIgKyBtYXAuZ2V0KGhlYWRlcikpOwotICAgICAgICAgICAgICAgIH0gICAKLSAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2Vic2VydmljZSBmaWx0ZXIgdXJsIGhhbmRsaW5nIiwgc3RhdC5GQUlMKTsgICAgICAgIAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2Vic2VydmljZSBmaWx0ZXIgdXJsIGhhbmRsaW5nIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJyb3IgLSBleGNlcHRpb24gIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWJzZXJ2aWNlIGZpbHRlciB1cmwgaGFuZGxpbmciLCBzdGF0LkZBSUwpOyAgICAgICAgCisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2Vic2VydmljZSBmaWx0ZXIgdXJsIGhhbmRsaW5nIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotICAgIH0gICAgCisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nZl9kZC9lbmRwb2ludF9hZGRyZXNzX3VyaS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nZl9kZC9lbmRwb2ludF9hZGRyZXNzX3VyaS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGM0Zjg1ZWEuLjM1YWNmNDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ2ZfZGQvZW5kcG9pbnRfYWRkcmVzc191cmkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dmX2RkL2VuZHBvaW50X2FkZHJlc3NfdXJpL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlcnZpY2VfZW5kcG9pbnRfYWRkcmVzcyIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDZlYjc1YzMuLmI2ODdkNmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjIgKzE1LDIyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJnb29nbGUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2Vic2VydmljZXMueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWJzZXJ2aWNlcy54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGUvYnVpbGQueG1sCmluZGV4IGFkN2ZkNDkuLjFjMmQyZjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZS9idWlsZC54bWwKQEAgLTMzLDkgKzMzLDkgQEAKIAogCiAgIDx0YXJnZXQgbmFtZT0icnVuLndzY29tcGlsZSI+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9IiBmYWlsb25lcnJvcj0idHJ1ZSIgPgotICAgICAgICA8YXJnIGxpbmU9Ii1zb3VyY2UgMS4xLjIgJHt3c2NvbXBpbGUuY29tbWFuZH0iIC8+ICAgICAgICAKLQk8L2V4ZWM+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9IiBmYWlsb25lcnJvcj0idHJ1ZSIgPgorICAgICAgICA8YXJnIGxpbmU9Ii1zb3VyY2UgMS4xLjIgJHt3c2NvbXBpbGUuY29tbWFuZH0iIC8+CisgICAgPC9leGVjPgogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9IiI+CkBAIC00Myw3ICs0Myw3IEBACiAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJtZWpiY2xpZW50Ii8+CisgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9Im1lamJjbGllbnQiLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC02MSwxMSArNjEsMTEgQEAKICAgPHRhcmdldCBuYW1lPSJ3c2NvbXBpbGUtYXBwY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPG1rZGlyIGRpcj0ib3V0cHV0Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1pbXBvcnQgLWtlZXAgLWQgb3V0cHV0IC1zIG91dHB1dCAtY2xhc3NwYXRoIC4gd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9nb29nbGUiPgotICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0L2dvb2dsZSIgCisgICAgICAgPGZpbGVzZXQgZGlyPSJvdXRwdXQvZ29vZ2xlIgogICAgICAgICBpbmNsdWRlcz0iRGlyZWN0b3J5Q2F0ZWdvcnkuY2xhc3MsIEdvb2dsZVNlYXJjaFJlc3VsdC5jbGFzcywgR29vZ2xlU2VhcmNoU2VydmljZS5jbGFzcywgR29vZ2xlU2VhcmNoUG9ydC5jbGFzcywgUmVzdWx0RWxlbWVudC5jbGFzcyIvPgogICAgIDwvY29weT4KICAgICA8ZGVsZXRlIGRpcj0ib3V0cHV0Ii8+CkBAIC03NCwxMSArNzQsMTEgQEAKICAgPHRhcmdldCBuYW1lPSJ3c2NvbXBpbGUtZWpiIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPG1rZGlyIGRpcj0ib3V0cHV0Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1pbXBvcnQgLWtlZXAgLWQgb3V0cHV0IC1zIG91dHB1dCAtY2xhc3NwYXRoIC4gd3Njb21waWxlX2NvbmZpZ19lamIueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9nb29nbGVlamIiPgotICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0L2dvb2dsZWVqYiIgCisgICAgICAgPGZpbGVzZXQgZGlyPSJvdXRwdXQvZ29vZ2xlZWpiIgogICAgICAgICBpbmNsdWRlcz0iRGlyZWN0b3J5Q2F0ZWdvcnkuY2xhc3MsIEdvb2dsZVNlYXJjaFJlc3VsdC5jbGFzcywgR29vZ2xlU2VhcmNoUG9ydC5jbGFzcywgUmVzdWx0RWxlbWVudC5jbGFzcyIvPgogICAgIDwvY29weT4KICAgICA8ZGVsZXRlIGRpcj0ib3V0cHV0Ii8+CkBAIC04NywzNSArODcsMzUgQEAKICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNvbXBpbGUiPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIgogICAgICAgZmlsZT0iR29vZ2xlU2VhcmNoLndzZGwiLz4KLSAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAotCSBmaWxlPSJHb29nbGVNYXBwaW5nX2FwcGNsaWVudC54bWwiLz4KKyAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCisgICAgIGZpbGU9Ikdvb2dsZU1hcHBpbmdfYXBwY2xpZW50LnhtbCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iYXBwY2xpZW50LWphci1jb21tb24iPgotICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICB2YWx1ZT0iR29vZ2xlTWFwcGluZ19hcHBjbGllbnQueG1sLE1FVEEtSU5GL3dzZGwvKiosZ29vZ2xlLyouY2xhc3MiIC8+CiAKICAgICA8L2FudGNhbGw+Ci0gICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKLQkgZmlsZT0iR29vZ2xlTWFwcGluZ19lamIueG1sIi8+CisgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgorICAgICBmaWxlPSJHb29nbGVNYXBwaW5nX2VqYi54bWwiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgdmFsdWU9Ikdvb2dsZU1hcHBpbmdfZWpiLnhtbCxNRVRBLUlORi93c2RsLyoqLGdvb2dsZWVqYi8qLmNsYXNzIiAvPgogCiAgICAgPC9hbnRjYWxsPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIgLz4KLSAgPC90YXJnZXQ+IAorICA8L3RhcmdldD4KIAotICAgPHRhcmdldCBuYW1lPSJidWlsZC1tZWpiIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgY29tcGlsZSI+ICAKKyAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtbWVqYiIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNvbXBpbGUiPgogICAgIDxjb3B5IGZpbGU9Im1lamJjbGllbnQvYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgPGNvcHkgZmlsZT0ibWVqYmNsaWVudC9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9tZWpiY2xpZW50LmphciIgbWFuaWZlc3Q9Im1lamJjbGllbnQvTUFOSUZFU1QuTUYiPgkKLQk8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgotCQlpbmNsdWRlcz0iZ29vZ2xlL01FSkJDbGllbnQuY2xhc3MgTUVUQS1JTkYvYXBwbGljYXRpb24tY2xpZW50LnhtbCBNRVRBLUlORi9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIKLQkvPgotICAgIDwvamFyPiAKKyAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbWVqYmNsaWVudC5qYXIiIG1hbmlmZXN0PSJtZWpiY2xpZW50L01BTklGRVNULk1GIj4KKyAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgorICAgICAgICBpbmNsdWRlcz0iZ29vZ2xlL01FSkJDbGllbnQuY2xhc3MgTUVUQS1JTkYvYXBwbGljYXRpb24tY2xpZW50LnhtbCBNRVRBLUlORi9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIKKyAgICAvPgorICAgIDwvamFyPgogICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTMxLDEzICsxMzEsMTMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLW1lamJjbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgCTxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIgZmFpbG9uZXJyb3I9InRydWUiPgotICAgIAkJPGFyZyBsaW5lPSItY2xpZW50ICR7YXNzZW1ibGUuZGlyfS9tZWpiY2xpZW50LmphciIvPgotCQk8YXJnIGxpbmU9Ii10ZXh0YXV0aCIvPgotCQk8YXJnIGxpbmU9Ii11c2VyIGoyZWUiLz4KLSAgICAJCTxhcmcgbGluZT0iLXBhc3N3b3JkIGoyZWUiLz4KLSAgICAJCTxhcmcgbGluZT0iJHthcHBjbGllbnQuYXBwbGljYXRpb24uYXJnc30iLz4KLSAgCTwvZXhlYz4KKyAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIgZmFpbG9uZXJyb3I9InRydWUiPgorICAgICAgICAgICAgPGFyZyBsaW5lPSItY2xpZW50ICR7YXNzZW1ibGUuZGlyfS9tZWpiY2xpZW50LmphciIvPgorICAgICAgICA8YXJnIGxpbmU9Ii10ZXh0YXV0aCIvPgorICAgICAgICA8YXJnIGxpbmU9Ii11c2VyIGoyZWUiLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iLXBhc3N3b3JkIGoyZWUiLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iJHthcHBjbGllbnQuYXBwbGljYXRpb24uYXJnc30iLz4KKyAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC0xNDUsMTAgKzE0NSwxMCBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9InNwZWxsbmcgaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vZ29vZ2xlZWpiL0dvb2dsZVNlYXJjaCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAKKyAgICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImNvbnRhY3Rnb29nbGUiPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CkBAIC0xNTgsMjMgKzE1OCwyMyBAQAogCiAgIDx0YXJnZXQgbmFtZT0iZ2VuLW1hcHBpbmctYXBwY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1nZW4gLWNwIC4gLW1hcHBpbmcgR29vZ2xlTWFwcGluZ19hcHBjbGllbnQueG1sIHdzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJnZW4tbWFwcGluZy1lamIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICB2YWx1ZT0iLWdlbiAtY3AgLiAtbWFwcGluZyBHb29nbGVNYXBwaW5nX2VqYi54bWwgd3Njb21waWxlX2NvbmZpZ19lamIueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIHRoZSBXZWJTZXJ2aWNlcyB0ZXN0KQotCQkJYW50IGNvbnRhY3Rnb29nbGUgKEV4ZWN1dGVzIHRoZSBhcHBjbGllbnQgY29udGFjdGluZyB0aGUgR29vZ2xlLmNvbSBXZWJTZXJ2aWNlcykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgdGhlIFdlYlNlcnZpY2VzIHRlc3QpCisgICAgICAgICAgICBhbnQgY29udGFjdGdvb2dsZSAoRXhlY3V0ZXMgdGhlIGFwcGNsaWVudCBjb250YWN0aW5nIHRoZSBHb29nbGUuY29tIFdlYlNlcnZpY2VzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBiZDhjMjQyLi5hMjRlYTZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIGdvb2dsZUtleTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zNSwyMyArMzUsMjMgQEAKICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWdvb2dsZUlEIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgU3RyaW5nIHdvcmQgPSAoYXJncy5sZW5ndGggPT0gMCkgPwogICAgICAgICAgICAgInNwZWxsbmciIDogYXJnc1swXTsKICAgICAgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9IChhcmdzLmxlbmd0aCA9PSAyKSA/CiAgICAgICAgICAgICBhcmdzWzFdIDogImh0dHA6Ly9hcGkuZ29vZ2xlLmNvbS9zZWFyY2gvYmV0YTIiOwogCi0gICAgCXRyeSB7Ci0JICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisKKwogICAgICAgICAgICAgU3RyaW5nIGdvb2dsZUtleSA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9nb29nbGVrZXkiKTsKICAgICAgICAgICAgIEdvb2dsZVNlYXJjaFNlcnZpY2UgZ29vZ2xlU2VhcmNoU2VydmljZSA9CiAgICAgICAgICAgICAgICAgKEdvb2dsZVNlYXJjaFNlcnZpY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL0dvb2dsZVNlYXJjaCIpOwotICAgICAgICAgICAgR29vZ2xlU2VhcmNoUG9ydCBnb29nbGVQb3J0ID0gCisgICAgICAgICAgICBHb29nbGVTZWFyY2hQb3J0IGdvb2dsZVBvcnQgPQogICAgICAgICAgICAgICAgIGdvb2dsZVNlYXJjaFNlcnZpY2UuZ2V0R29vZ2xlU2VhcmNoUG9ydCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgICgoU3R1Yilnb29nbGVQb3J0KS5fc2V0UHJvcGVydHkoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb250YWN0aW5nIGdvb2dsZSBmb3IgYSBzcGVsbGluZyBzdWdnZXN0aW9uIGF0ICIgKyB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwpAQCAtNjMsMTEgKzYzLDExIEBACiAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJnb29nbGVjbGllbnQgbWFpbiIsIHN0YXQuUEFTUyk7CiAKLSAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnb29nbGUgY2xpZW50IHRlc3QgZmFpbGVkIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJnb29nbGVjbGllbnQgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgLy9TeXN0ZW0uZXhpdCgxNSk7Ci0JfSAKKyAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGUvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGUvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IDk0Y2Y3MzMuLjU1OTBkMzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZS9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKQEAgLTMyLDYgKzMyLDYgQEAKICAgICA8d3NkbC1maWxlPk1FVEEtSU5GL3dzZGwvR29vZ2xlU2VhcmNoLndzZGw8L3dzZGwtZmlsZT4KICAgICA8amF4cnBjLW1hcHBpbmctZmlsZT5Hb29nbGVNYXBwaW5nX2FwcGNsaWVudC54bWw8L2pheHJwYy1tYXBwaW5nLWZpbGU+CiAgICAgPHNlcnZpY2UtcW5hbWUgeG1sbnM6c2VydmljZW5zPSJ1cm46R29vZ2xlU2VhcmNoIj5zZXJ2aWNlbnM6R29vZ2xlU2VhcmNoU2VydmljZQotICAgIDwvc2VydmljZS1xbmFtZT4gICAgICAgICAgICAgICAKKyAgICA8L3NlcnZpY2UtcW5hbWU+CiAgIDwvc2VydmljZS1yZWY+CiA8L2FwcGxpY2F0aW9uLWNsaWVudD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL2VqYi9Hb29nbGVFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL2VqYi9Hb29nbGVFSkIuamF2YQppbmRleCAxYmIwYWRmLi5lODJlYTBhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZS9lamIvR29vZ2xlRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGUvZWpiL0dvb2dsZUVKQi5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGdvb2dsZWVqYjsKIAogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTI5LDE4ICsyOSwxOCBAQAogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2M7CiAKICAgICBwdWJsaWMgR29vZ2xlRUpCKCl7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBHb29nbGVFSkI6OmVqYkNyZWF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gR29vZ2xlRUpCOjplamJDcmVhdGUgISEiKTsKICAgICB9CiAKLSAgICBwdWJsaWMgYnl0ZVtdIGRvR2V0Q2FjaGVkUGFnZShqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyB1cmwpIAotICAgIHsgCi0gICAgICAgIHJldHVybiBudWxsOyAKKyAgICBwdWJsaWMgYnl0ZVtdIGRvR2V0Q2FjaGVkUGFnZShqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyB1cmwpCisgICAgeworICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKLSAgICBwdWJsaWMgU3RyaW5nIGRvU3BlbGxpbmdTdWdnZXN0aW9uKGphdmEubGFuZy5TdHJpbmcga2V5LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcgcGhyYXNlKSAKKyAgICBwdWJsaWMgU3RyaW5nIGRvU3BlbGxpbmdTdWdnZXN0aW9uKGphdmEubGFuZy5TdHJpbmcga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyBwaHJhc2UpCiAgICAgewogCiAgICAgICAgIHRyeSB7CkBAIC01Myw5ICs1Myw5IEBACiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIEVKQkV4Y2VwdGlvbiBlamJFeCA9IG5ldyBFSkJFeGNlcHRpb24oImdldENhbGxlclByaW5jaXBhbCBleGNlcHRpb24iKTsKICAgICAgICAgICAgIGVqYkV4LmluaXRDYXVzZShlKTsKLSAgICAgICAgICAgIHRocm93IGVqYkV4OyAgICAgICAgICAKKyAgICAgICAgICAgIHRocm93IGVqYkV4OwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIE1lc3NhZ2VDb250ZXh0IG1zZ0NvbnRleHQgPSBzYy5nZXRNZXNzYWdlQ29udGV4dCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm1zZ0NvbnRleHQgPSAiICsgbXNnQ29udGV4dCk7CiAKQEAgLTY4LDIwICs2OCwyMCBAQAogCiAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgcHVibGljIEdvb2dsZVNlYXJjaFJlc3VsdCBkb0dvb2dsZVNlYXJjaChqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyBxLCBpbnQgc3RhcnQsIGludCBtYXhSZXN1bHRzLCBib29sZWFuIGZpbHRlciwgamF2YS5sYW5nLlN0cmluZyByZXN0cmljdCwgYm9vbGVhbiBzYWZlU2VhcmNoLCBqYXZhLmxhbmcuU3RyaW5nIGxyLCBqYXZhLmxhbmcuU3RyaW5nIGllLCBqYXZhLmxhbmcuU3RyaW5nIG9lKSB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JCisKICAgICAgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL21lamJjbGllbnQvTUVKQkNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGUvbWVqYmNsaWVudC9NRUpCQ2xpZW50LmphdmEKaW5kZXggNWZmYTU2NC4uYmE4MzUwMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGUvbWVqYmNsaWVudC9NRUpCQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGUvbWVqYmNsaWVudC9NRUpCQ2xpZW50LmphdmEKQEAgLTMxLDExICszMSwxMSBAQAogLy8gICAgcHJpdmF0ZSBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAvLyAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeyAKLSAgICAgICAgTUVKQkNsaWVudCBjbGllbnQgPSBuZXcgTUVKQkNsaWVudCgpOyAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIE1FSkJDbGllbnQgY2xpZW50ID0gbmV3IE1FSkJDbGllbnQoKTsKIAogICAgICAgICAvLyBydW4gdGhlIHRlc3RzCi0gICAgICAgIGNsaWVudC5ydW5UZXN0Q2xpZW50KCk7ICAgCisgICAgICAgIGNsaWVudC5ydW5UZXN0Q2xpZW50KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuVGVzdENsaWVudCgpIHsKQEAgLTQ4LDc4ICs0OCw3OCBAQAogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB0ZXN0MDEoKSB7Ci0JCi0JLy8gaW5zdGFuY2lhdGUgdGhlIG1lamIKLSAgIAl0cnkgewotICAgICAgICAgICAgCi0JICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKipDcmVhdGVkIGluaXRpYWwgY29udGV4dCIpOwotICAgICAgICAgICAgCi0JICAgIGphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJlamIvbWdtdC9NRUpCIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqTG9va2VkIHVwIE1hbmFnZW1lbnRIb21lISEiKTsKIAotCSAgICBNYW5hZ2VtZW50SG9tZSAgaG9tZSA9IChNYW5hZ2VtZW50SG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3coCi0JCQkgICAgICAgICAgICAgICAgICAgICBvYmpyZWYsIE1hbmFnZW1lbnRIb21lLmNsYXNzKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKipOYXJyb3dlZCBNYW5hZ2VtZW50SG9tZSEhIik7CisgICAgLy8gaW5zdGFuY2lhdGUgdGhlIG1lamIKKyAgICAgICB0cnkgewogCi0JICAgIE1hbmFnZW1lbnQgbWVqYiA9IGhvbWUuY3JlYXRlKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqR290IHRoZSBNRUpCISEiKTsKKyAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKkNyZWF0ZWQgaW5pdGlhbCBjb250ZXh0Iik7CiAKLQkgICAgU3RyaW5nIGRvbWFpbiA9IG1lamIuZ2V0RGVmYXVsdERvbWFpbigpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKk1FSkIgZGVmYXVsdCBkb21haW4gPSAiK2RvbWFpbik7Ci0JICAgIGludCBtYmVhbkNvdW50ID0gbWVqYi5nZXRNQmVhbkNvdW50KCkuaW50VmFsdWUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKipNQmVhbkNvdW50ID0gIittYmVhbkNvdW50KTsKKyAgICAgICAgamF2YS5sYW5nLk9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImVqYi9tZ210L01FSkIiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKipMb29rZWQgdXAgTWFuYWdlbWVudEhvbWUhISIpOwogCi0JICAgIC8vIFByaW50IGF0dHJpYnV0ZXMgb2YgYWxsIE1CZWFucyAKKyAgICAgICAgTWFuYWdlbWVudEhvbWUgIGhvbWUgPSAoTWFuYWdlbWVudEhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqcmVmLCBNYW5hZ2VtZW50SG9tZS5jbGFzcyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqTmFycm93ZWQgTWFuYWdlbWVudEhvbWUhISIpOworCisgICAgICAgIE1hbmFnZW1lbnQgbWVqYiA9IGhvbWUuY3JlYXRlKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqR290IHRoZSBNRUpCISEiKTsKKworICAgICAgICBTdHJpbmcgZG9tYWluID0gbWVqYi5nZXREZWZhdWx0RG9tYWluKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqTUVKQiBkZWZhdWx0IGRvbWFpbiA9ICIrZG9tYWluKTsKKyAgICAgICAgaW50IG1iZWFuQ291bnQgPSBtZWpiLmdldE1CZWFuQ291bnQoKS5pbnRWYWx1ZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKk1CZWFuQ291bnQgPSAiK21iZWFuQ291bnQpOworCisgICAgICAgIC8vIFByaW50IGF0dHJpYnV0ZXMgb2YgYWxsIE1CZWFucwogICAgICAgICAgICAgT2JqZWN0TmFtZSBxdWVyeSA9IG5ldyBPYmplY3ROYW1lKCIqOmoyZWVUeXBlPUoyRUVBcHBsaWNhdGlvbixuYW1lPWdvb2dsZUFwcCwqIik7Ci0JICAgIFNldCBtYmVhbk5hbWVzID0gbWVqYi5xdWVyeU5hbWVzKHF1ZXJ5LCBudWxsKTsKLQkgICAgaWYgKCBtYmVhbk5hbWVzLnNpemUoKSAhPSAxICkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIioqKkVSUk9SOiBtYmVhbnMgcmV0dXJuZWQgYnkgcXVlcnkgaXMgIgorICAgICAgICBTZXQgbWJlYW5OYW1lcyA9IG1lamIucXVlcnlOYW1lcyhxdWVyeSwgbnVsbCk7CisgICAgICAgIGlmICggbWJlYW5OYW1lcy5zaXplKCkgIT0gMSApIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKipFUlJPUjogbWJlYW5zIHJldHVybmVkIGJ5IHF1ZXJ5IGlzICIKICAgICAgICAgICAgICAgICArbWJlYW5OYW1lcy5zaXplKCkgKyAiIGl0IHNob3VsZCBiZSAxIik7Ci0JICAgIH0KLQkJCi0JICAgIEl0ZXJhdG9yIGl0ID0gbWJlYW5OYW1lcy5pdGVyYXRvcigpOwotCSAgICBPYmplY3ROYW1lIG5hbWUgPSAoT2JqZWN0TmFtZSlpdC5uZXh0KCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT2J0YWluZWQganNyNzcgbWJlYW4gZm9yIGdvb2dsZUFwcCA9ICIrbmFtZSk7CisgICAgICAgIH0KIAotCQkvLyBHZXQgYXR0ciB2YWx1ZXMgZnJvbSBNRUpCIGFuZCBwcmludCB0aGVtCi0gICAgICAgICAgICAgICAgdHJ5eyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIEl0ZXJhdG9yIGl0ID0gbWJlYW5OYW1lcy5pdGVyYXRvcigpOworICAgICAgICBPYmplY3ROYW1lIG5hbWUgPSAoT2JqZWN0TmFtZSlpdC5uZXh0KCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT2J0YWluZWQganNyNzcgbWJlYW4gZm9yIGdvb2dsZUFwcCA9ICIrbmFtZSk7CisKKyAgICAgICAgLy8gR2V0IGF0dHIgdmFsdWVzIGZyb20gTUVKQiBhbmQgcHJpbnQgdGhlbQorICAgICAgICAgICAgICAgIHRyeXsKICAgICAgICAgICAgICAgICAgICAgT2JqZWN0IGF0dHIgPSBtZWpiLmdldEF0dHJpYnV0ZShuYW1lLCAiaGFzV2ViU2VydmljZXMiKTsKLQkJICAgIGJvb2xlYW4gaGFzV2ViU2VydmljZXM9ZmFsc2U7Ci0JCSAgICBpZiAoYXR0ciBpbnN0YW5jZW9mIEJvb2xlYW4pIHsKLQkJCWhhc1dlYlNlcnZpY2VzID0gKChCb29sZWFuKSBhdHRyKS5ib29sZWFuVmFsdWUoKTsKLQkJICAgIH0KLQkJICAgIAkKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRm9yIEhhc1dlYlNlcnZpY2VzICIraGFzV2ViU2VydmljZXMpOworICAgICAgICAgICAgYm9vbGVhbiBoYXNXZWJTZXJ2aWNlcz1mYWxzZTsKKyAgICAgICAgICAgIGlmIChhdHRyIGluc3RhbmNlb2YgQm9vbGVhbikgeworICAgICAgICAgICAgaGFzV2ViU2VydmljZXMgPSAoKEJvb2xlYW4pIGF0dHIpLmJvb2xlYW5WYWx1ZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZvciBIYXNXZWJTZXJ2aWNlcyAiK2hhc1dlYlNlcnZpY2VzKTsKIAogICAgICAgICAgICAgICAgICAgICBhdHRyID0gbWVqYi5nZXRBdHRyaWJ1dGUobmFtZSwgImVuZHBvaW50QWRkcmVzc2VzIik7Ci0JCSAgICBpZiAoYXR0ciBpbnN0YW5jZW9mIFN0cmluZ1tdKSB7Ci0JCQlTdHJpbmdbXSBhZGRyZXNzZXMgPSAoU3RyaW5nW10pIGF0dHI7Ci0JCQlmb3IgKGludCBpPTA7aTxhZGRyZXNzZXMubGVuZ3RoO2krKykgewotCQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVnaXN0ZXJlZCBhZGRyZXNzZXMgIiArIGFkZHJlc3Nlc1tpXSk7CisgICAgICAgICAgICBpZiAoYXR0ciBpbnN0YW5jZW9mIFN0cmluZ1tdKSB7CisgICAgICAgICAgICBTdHJpbmdbXSBhZGRyZXNzZXMgPSAoU3RyaW5nW10pIGF0dHI7CisgICAgICAgICAgICBmb3IgKGludCBpPTA7aTxhZGRyZXNzZXMubGVuZ3RoO2krKykgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVnaXN0ZXJlZCBhZGRyZXNzZXMgIiArIGFkZHJlc3Nlc1tpXSk7CiAKLQkJCSAgICAvLyByZXRyaWV2ZSB0aGUgd3NkbCAgZmlsZQotCQkJICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vbG9jYWxob3N0OjgwODAvIithZGRyZXNzZXNbaV0rIj93c2RsIik7Ci0JCQkgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7Ci0JCQkgICAgY29ubmVjdGlvbi5zZXRSZXF1ZXN0TWV0aG9kKCJHRVQiKTsKLQkJCSAgICBjb25uZWN0aW9uLmNvbm5lY3QoKTsKLQkJCSAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKTsKLQkJCSAgICBpZiAocmVzcG9uc2VDb2RlIT1IdHRwVVJMQ29ubmVjdGlvbi5IVFRQX09LKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJDYW5ub3QgcmV0cmlldmUgd3NkbCBmb3IgIiArIGFkZHJlc3Nlc1tpXSArICIgZXJyb3IgaXMgIiArIGNvbm5lY3Rpb24uZ2V0UmVzcG9uc2VNZXNzYWdlKCkpOwotCQkJICAgIH0gZWxzZSB7Ci0JCQkJSW5wdXRTdHJlYW0gaXMgPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShjb25uZWN0aW9uLmdldElucHV0U3RyZWFtKCkpOwotCQkJCWJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVsxMDBdOwotCQkJCWludCByZWFkOwotCQkJCWRvIHsKLQkJCQkgICAgcmVhZCA9IGlzLnJlYWQoYnVmZmVyLDAsIDEwMCk7Ci0JCQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbihuZXcgU3RyaW5nKGJ1ZmZlciwwLCByZWFkKSk7Ci0JCQkJfSB3aGlsZShyZWFkPT0xMDAgJiYgcmVhZCE9LTEpOwotCQkJICAgIH0KLQkJCX0KLQkJICAgIH0KLSAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyByZXRyaWV2ZSB0aGUgd3NkbCAgZmlsZQorICAgICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vbG9jYWxob3N0OjgwODAvIithZGRyZXNzZXNbaV0rIj93c2RsIik7CisgICAgICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5zZXRSZXF1ZXN0TWV0aG9kKCJHRVQiKTsKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmNvbm5lY3QoKTsKKyAgICAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlIT1IdHRwVVJMQ29ubmVjdGlvbi5IVFRQX09LKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYW5ub3QgcmV0cmlldmUgd3NkbCBmb3IgIiArIGFkZHJlc3Nlc1tpXSArICIgZXJyb3IgaXMgIiArIGNvbm5lY3Rpb24uZ2V0UmVzcG9uc2VNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShjb25uZWN0aW9uLmdldElucHV0U3RyZWFtKCkpOworICAgICAgICAgICAgICAgIGJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVsxMDBdOworICAgICAgICAgICAgICAgIGludCByZWFkOworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgcmVhZCA9IGlzLnJlYWQoYnVmZmVyLDAsIDEwMCk7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihuZXcgU3RyaW5nKGJ1ZmZlciwwLCByZWFkKSk7CisgICAgICAgICAgICAgICAgfSB3aGlsZShyZWFkPT0xMDAgJiYgcmVhZCE9LTEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjYXRjaChFeGNlcHRpb24gZXhwKXsKICAgICAgICAgICAgICAgICAgICAgLy9leHAucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0xMjcsMTQgKzEyNywxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhY2Nlc3NpbmcgbWJlYW4gZGV0YWlsczogIEtlZXAgY29udGludWluZ1xuIik7CiAgICAgICAgICAgICAgICAgfQogCi0JICAgIG1lamIucmVtb3ZlKCk7CisgICAgICAgIG1lamIucmVtb3ZlKCk7CiAKLQl9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBuZSl7CisgICAgfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKipFeGNlcHRpb24gd2hpbGUgaW5pdGlhbGl6aW5nIGNvbnRleHQuXG4iKTsKICAgICAgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOwotCX0gY2F0Y2goRXhjZXB0aW9uIHJlKSB7CisgICAgfSBjYXRjaChFeGNlcHRpb24gcmUpIHsKICAgICAgICAgICAgIHJlLnByaW50U3RhY2tUcmFjZSgpOwotCX0gCQorICAgIH0KICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL3dzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL3dzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbAppbmRleCA5OGM4NjU1Li41Mjk4NDg4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZS93c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGUvd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249Ikdvb2dsZVNlYXJjaC53c2RsIgogICAgICAgcGFja2FnZU5hbWU9Imdvb2dsZSIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGUvd3Njb21waWxlX2NvbmZpZ19lamIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGUvd3Njb21waWxlX2NvbmZpZ19lamIueG1sCmluZGV4IGNkN2JjZWMuLmJlYjg0NmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL3dzY29tcGlsZV9jb25maWdfZWpiLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZS93c2NvbXBpbGVfY29uZmlnX2VqYi54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHdzZGwgCisgIDx3c2RsCiAgICAgICBsb2NhdGlvbj0iR29vZ2xlU2VhcmNoLndzZGwiCiAgICAgICBwYWNrYWdlTmFtZT0iZ29vZ2xlZWpiIi8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBmYjI5ZGNlLi5hZjc5MDM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIzICsxNSwyMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZ29vZ2xlc2VydmVyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYnNlcnZpY2VzLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2Vic2VydmljZXMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dhci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dhci9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvYnVpbGQueG1sCmluZGV4IDA1ZDEyYjAuLjYwZDlmMTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci9idWlsZC54bWwKQEAgLTM1LDkgKzM1LDkgQEAKIAogCiAgIDx0YXJnZXQgbmFtZT0icnVuLndzY29tcGlsZSI+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9IiBmYWlsb25lcnJvcj0idHJ1ZSIgPgotICAgICAgICA8YXJnIGxpbmU9Ii1zb3VyY2UgMS4xLjIgJHt3c2NvbXBpbGUuY29tbWFuZH0iIC8+ICAgICAgICAKLQk8L2V4ZWM+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9IiBmYWlsb25lcnJvcj0idHJ1ZSIgPgorICAgICAgICA8YXJnIGxpbmU9Ii1zb3VyY2UgMS4xLjIgJHt3c2NvbXBpbGUuY29tbWFuZH0iIC8+CisgICAgPC9leGVjPgogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9IiI+CkBAIC02NiwxMSArNjYsMTEgQEAKICAgPHRhcmdldCBuYW1lPSJ3c2NvbXBpbGUtYXBwY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPG1rZGlyIGRpcj0ib3V0cHV0Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1pbXBvcnQgLWY6bm9ycGNzdHJ1Y3R1cmVzIC1rZWVwIC1kIG91dHB1dCAtcyBvdXRwdXQgLWNsYXNzcGF0aCAuIC1tb2RlbCBnb29nbGVjbGllbnQubW9kZWwgd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9nb29nbGVjbGllbnQiPgotICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0L2dvb2dsZWNsaWVudCIgCisgICAgICAgPGZpbGVzZXQgZGlyPSJvdXRwdXQvZ29vZ2xlY2xpZW50IgogICAgICAgICBpbmNsdWRlcz0iRGlyZWN0b3J5Q2F0ZWdvcnkuY2xhc3MsIEdvb2dsZVNlYXJjaFJlc3VsdC5jbGFzcywgR29vZ2xlU2VhcmNoU2VydmljZS5jbGFzcywgR29vZ2xlU2VhcmNoUG9ydC5jbGFzcywgUmVzdWx0RWxlbWVudC5jbGFzcyIvPgogICAgIDwvY29weT4KICAgICA8IS0tIDxkZWxldGUgZGlyPSJvdXRwdXQiLz4gLS0+CkBAIC03OSwxMSArNzksMTEgQEAKICAgPHRhcmdldCBuYW1lPSJ3c2NvbXBpbGUtZWpiIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPG1rZGlyIGRpcj0ib3V0cHV0Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1pbXBvcnQgLWY6bm9ycGNzdHJ1Y3R1cmVzIC1rZWVwIC1kIG91dHB1dCAtcyBvdXRwdXQgLWNsYXNzcGF0aCAuIHdzY29tcGlsZV9jb25maWdfZWpiLnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vZ29vZ2xlc2VydmVyIj4KLSAgICAgICA8ZmlsZXNldCBkaXI9Im91dHB1dC9nb29nbGVzZXJ2ZXIiIAorICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0L2dvb2dsZXNlcnZlciIKICAgICAgICAgaW5jbHVkZXM9IkRpcmVjdG9yeUNhdGVnb3J5LmNsYXNzLCBHb29nbGVTZWFyY2hSZXN1bHQuY2xhc3MsIEdvb2dsZVNlYXJjaFBvcnQuY2xhc3MsIFJlc3VsdEVsZW1lbnQuY2xhc3MiLz4KICAgICA8L2NvcHk+CiAgICAgPGRlbGV0ZSBkaXI9Im91dHB1dCIvPgpAQCAtOTIsMzcgKzkyLDM3IEBACiAgIDx0YXJnZXQgbmFtZT0id3Njb21waWxlLXdlYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxta2RpciBkaXI9Im91dHB1dCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgICAgICAgdmFsdWU9Ii1pbXBvcnQgLWY6bm9ycGNzdHJ1Y3R1cmVzIC1rZWVwIC1kIG91dHB1dCAtcyBvdXRwdXQgLW1vZGVsIGdvb2dsZXdlYi5tb2RlbCAtY2xhc3NwYXRoIC4gd3Njb21waWxlX2NvbmZpZ193ZWIueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9nb29nbGVzZXJ2ZXJ3ZWIiPgotICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0L2dvb2dsZXNlcnZlcndlYiIgCisgICAgICAgPGZpbGVzZXQgZGlyPSJvdXRwdXQvZ29vZ2xlc2VydmVyd2ViIgogICAgICAgICBpbmNsdWRlcz0iRGlyZWN0b3J5Q2F0ZWdvcnkuY2xhc3MsIEdvb2dsZVNlYXJjaFJlc3VsdC5jbGFzcywgR29vZ2xlU2VhcmNoUG9ydC5jbGFzcywgUmVzdWx0RWxlbWVudC5jbGFzcyIvPgogICAgIDwvY29weT4KICAgICA8ZGVsZXRlIGRpcj0ib3V0cHV0Ii8+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjb21waWxlIj4KLSAgICA8IS0tIAotCUVKQiBtb2R1bGUgY3JlYXRpb24KKyAgICA8IS0tCisgICAgRUpCIG1vZHVsZSBjcmVhdGlvbgogICAgIC0tPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIgogICAgICAgZmlsZT0iR29vZ2xlU2VhcmNoLndzZGwiLz4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIKICAgICAgIGZpbGU9Ikdvb2dsZVNlYXJjaF90eXBlcy53c2RsIi8+Ci0gICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKLQkgZmlsZT0iR29vZ2xlTWFwcGluZ19lamIueG1sIi8+CisgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgorICAgICBmaWxlPSJHb29nbGVNYXBwaW5nX2VqYi54bWwiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgdmFsdWU9Ikdvb2dsZU1hcHBpbmdfZWpiLnhtbCxNRVRBLUlORi93c2RsLyoqLGdvb2dsZXNlcnZlci8qLmNsYXNzIiAvPgogCiAgICAgPC9hbnRjYWxsPgotICAgIDwhLS0gCi0JV2FyIG1vZHVsZSBjcmVhdGlvbiAKKyAgICA8IS0tCisgICAgV2FyIG1vZHVsZSBjcmVhdGlvbgogICAgIC0tPgogICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtd2FyLWZpbGUiLz4KLSAgICA8IS0tIAotCUFwcENsaWVudCBtb2R1bGUgY3JlYXRpb24KKyAgICA8IS0tCisgICAgQXBwQ2xpZW50IG1vZHVsZSBjcmVhdGlvbgogICAgIC0tPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIgogICAgICAgZmlsZT0iR29vZ2xlU2VhcmNoLndzZGwiLz4KQEAgLTEzMCwzNiArMTMwLDM2IEBACiAgICAgICBmaWxlPSJHb29nbGVTZWFyY2hfdHlwZXMud3NkbCIvPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIgogICAgICAgZmlsZT0iR29vZ2xlU2VhcmNoX3BhcnRpYWwud3NkbCIvPgotICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCi0JIGZpbGU9Ikdvb2dsZU1hcHBpbmdfYXBwY2xpZW50LnhtbCIvPgotICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCi0JIGZpbGU9Imdvb2dsZWNsaWVudC5tb2RlbCIvPgorICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKKyAgICAgZmlsZT0iR29vZ2xlTWFwcGluZ19hcHBjbGllbnQueG1sIi8+CisgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgorICAgICBmaWxlPSJnb29nbGVjbGllbnQubW9kZWwiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFwcGNsaWVudC1qYXItY29tbW9uIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgdmFsdWU9Imdvb2dsZWNsaWVudC5tb2RlbCxHb29nbGVNYXBwaW5nX2FwcGNsaWVudC54bWwsTUVUQS1JTkYvd3NkbC8qKixnb29nbGVjbGllbnQvKi5jbGFzcyIgLz4KIAogICAgIDwvYW50Y2FsbD4KLSAgICA8IS0tIAotCUVBUiBmaWxlIGNyZWF0aW9uIAorICAgIDwhLS0KKyAgICBFQVIgZmlsZSBjcmVhdGlvbgogICAgIC0tPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIgLz4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiCiAgICAgICBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9Ii8+Ci0gICAgPGphciBkZXN0ZmlsZSA9ICIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIAotCXVwZGF0ZT0idHJ1ZSI+CisgICAgPGphciBkZXN0ZmlsZSA9ICIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiCisgICAgdXBkYXRlPSJ0cnVlIj4KICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotCTxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KKyAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiAgICAgICA8L2ZpbGVzZXQ+CiAgICAgPC9qYXI+Ci0JCi0gIDwvdGFyZ2V0PiAKKworICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWFwcGNsaWVudC1maWxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtd2FyLWZpbGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8ZWNobyBtZXNzYWdlPSJteSBidWlsZCBjbGFzc2VzIGRpciBpczoke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotICAgIDxkZWxldGUgZmlsZT0iJHt3YXIuZmlsZX0iLz4gIAorICAgIDxkZWxldGUgZmlsZT0iJHt3YXIuZmlsZX0iLz4KICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiLz4KICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORiIvPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORiIKQEAgLTE3MywxMCArMTczLDEwIEBACiAgICAgICBmaWxlPSJHb29nbGVTZWFyY2gud3NkbCIvPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93c2RsIgogICAgICAgZmlsZT0iR29vZ2xlU2VhcmNoX3R5cGVzLndzZGwiLz4KLSAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIiAKLQkgZmlsZT0iR29vZ2xlTWFwcGluZ193ZWIueG1sIi8+Ci0gICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcCIgCi0JIGZpbGU9Imdvb2dsZXdlYi5tb2RlbCIvPgorICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiCisgICAgIGZpbGU9Ikdvb2dsZU1hcHBpbmdfd2ViLnhtbCIvPgorICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiCisgICAgIGZpbGU9Imdvb2dsZXdlYi5tb2RlbCIvPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9jbGFzc2VzL2dvb2dsZXNlcnZlcndlYiI+CiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vZ29vZ2xlc2VydmVyd2ViIj4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouY2xhc3MiLz4KQEAgLTE4NiwxMiArMTg2LDEyIEBACiAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcCIgY2FzZXNlbnNpdGl2ZT0ieWVzIj4KICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qKiIvPgogICAgICAgPC9maWxlc2V0PgotICAgIDwvamFyPgkKKyAgICA8L2phcj4KICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIi8+CiAgIDwvdGFyZ2V0PgogCiAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMjIyLDcgKzIyMiw3IEBACiAKICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtc3RhbmRhbG9uZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgICAgdmFsdWU9Ii1nZW46Y2xpZW50IC1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IC1zICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IC1jbGFzc3BhdGggLiB3c2NvbXBpbGVfY29uZmlnX3N0YW5kYWxvbmUueG1sIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KQEAgLTI0Miw3ICsyNDIsNyBAQAogICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtcnQuamFyIi8+CiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyIi8+CiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIi8+Ci0JICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KKyAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIvPgogICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICA8L2NsYXNzcGF0aD4KIApAQCAtMjUwLDEwICsyNTAsMTAgQEAKICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Imh0dHAucHJveHlQb3J0IiB2YWx1ZT0iODA4MCIvPgogICAgIDwvamF2YT4KICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgCisgICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJjb250YWN0Z29vZ2xlIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgpAQCAtMjYzLDM0ICsyNjMsMzQgQEAKIAogICA8dGFyZ2V0IG5hbWU9Imdlbi1tYXBwaW5nLWFwcGNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItZ2VuIC1jcCAuIC1tYXBwaW5nIEdvb2dsZU1hcHBpbmdfYXBwY2xpZW50LnhtbCB3c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iZ2VuLW1hcHBpbmctZWpiIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1nZW4gLWNwIC4gLW1hcHBpbmcgR29vZ2xlTWFwcGluZ19lamIueG1sIHdzY29tcGlsZV9jb25maWdfZWpiLnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJnZW4tbWFwcGluZy13ZWIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICB2YWx1ZT0iLWdlbiAtY3AgLiAtbWFwcGluZyBHb29nbGVNYXBwaW5nX3dlYi54bWwgd3Njb21waWxlX2NvbmZpZ193ZWIueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXVzZXIiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS11c2VyLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0iajJlZSIvPgotCSAgICA8cGFyYW0gbmFtZT0icGFzc3dvcmQiIHZhbHVlPSJqMmVlIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJncm91cHMiIHZhbHVlPSJzdGFmZiIvPgorICAgICAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9ImoyZWUiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InBhc3N3b3JkIiB2YWx1ZT0iajJlZSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0iZ3JvdXBzIiB2YWx1ZT0ic3RhZmYiLz4KICAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtdXNlciI+CiAgICAgICA8IS0tIHJlbW92ZSB0ZXN0IHVzZXJzLCBqdXN0IGNsZWFudXAuIC0tPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtdXNlci1jb21tb24iPgpAQCAtMzAzLDEwICszMDMsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIHRoZSBXZWJTZXJ2aWNlcyB0ZXN0KQotCQkJYW50IGNvbnRhY3Rnb29nbGUgKEV4ZWN1dGVzIHRoZSBhcHBjbGllbnQgY29udGFjdGluZyB0aGUgR29vZ2xlLmNvbSBXZWJTZXJ2aWNlcykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgdGhlIFdlYlNlcnZpY2VzIHRlc3QpCisgICAgICAgICAgICBhbnQgY29udGFjdGdvb2dsZSAoRXhlY3V0ZXMgdGhlIGFwcGNsaWVudCBjb250YWN0aW5nIHRoZSBHb29nbGUuY29tIFdlYlNlcnZpY2VzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBiZGRlMjAyLi40ZDdmN2RiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOSwxMCArMjksMTAgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUU5hbWUgUE9SVF9RTkFNRSA9IAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFFOYW1lIFBPUlRfUU5BTUUgPQogICAgICAgICBuZXcgUU5hbWUoInVybjpHb29nbGVTZWFyY2giLCAiR29vZ2xlU2VhcmNoUG9ydCIpOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFFOYW1lIE9QRVJBVElPTl9RTkFNRSA9CiAgICAgICAgIG5ldyBRTmFtZSgidXJuOkdvb2dsZVNlYXJjaCIsICJkb1NwZWxsaW5nU3VnZ2VzdGlvbiIpOwpAQCAtNDIsMTIgKzQyLDEyIEBACiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogCi0gICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImdvb2dsZXNlcnZlciBhcHBjbGllbnQiKTsJCisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImdvb2dsZXNlcnZlciBhcHBjbGllbnQiKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImdvb2dsZXNlcnZlci1hcHBsaWVudElEIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHdvcmQgPSAoYXJncy5sZW5ndGggPiAwKSA/IGFyZ3NbMF0gOiAic3BlbGxuZyI7CiAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9IChhcmdzLmxlbmd0aCA+IDEpID8gYXJnc1sxXSA6IG51bGw7CkBAIC01NSw3ICs1NSw3IEBACiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKLSAgICAJdHJ5IHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIFN0cmluZyBnb29nbGVLZXkgPSAoU3RyaW5nKQogICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9nb29nbGVrZXkiKTsKQEAgLTgwLDcgKzgwLDcgQEAKIAogICAgICAgICAgICAgZG9EeW5hbWljUHJveHlUZXN0KGdvb2dsZVNlYXJjaFNlcnZpY2UsIGdvb2dsZUtleSk7CiAKLSAgICAgICAgICAgIEdvb2dsZVNlYXJjaFBvcnQgZ29vZ2xlU2VhcmNoUG9ydCA9IAorICAgICAgICAgICAgR29vZ2xlU2VhcmNoUG9ydCBnb29nbGVTZWFyY2hQb3J0ID0KICAgICAgICAgICAgICAgICBnb29nbGVTZWFyY2hTZXJ2aWNlLmdldEdvb2dsZVNlYXJjaFBvcnQoKTsKICAgICAgICAgICAgIGRvU3BlbGxpbmdTdWdnZXN0aW9uKGdvb2dsZVNlYXJjaFBvcnQsIGdvb2dsZUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7CkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICAgICAgICAgICAgICBwYXJ0aWFsV3NkbFNlcnZpY2VHZW5lcmljLmdldFBvcnQoR29vZ2xlU2VhcmNoUG9ydC5jbGFzcyk7CiAgICAgICAgICAgICBnb29nbGVTZWFyY2guZG9TcGVsbGluZ1N1Z2dlc3Rpb24oZ29vZ2xlS2V5LCB3b3JkKTsKIAotLyoqICAgICAgICAgICAgR29vZ2xlU2VhcmNoU2VydmljZSBwYXJ0aWFsV3NkbFNlcnZpY2VHZW5lcmF0ZWQgPSAKKy8qKiAgICAgICAgICAgIEdvb2dsZVNlYXJjaFNlcnZpY2UgcGFydGlhbFdzZGxTZXJ2aWNlR2VuZXJhdGVkID0KICAgICAgICAgICAgICAgICAoR29vZ2xlU2VhcmNoU2VydmljZSkKICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9wYXJ0aWFsR2VuZXJhdGVkIik7CiAgICAgICAgICAgICBnb29nbGVTZWFyY2ggPSBwYXJ0aWFsV3NkbFNlcnZpY2VHZW5lcmF0ZWQuZ2V0R29vZ2xlU2VhcmNoUG9ydCgpOwpAQCAtMTE1LDE3ICsxMTUsMTcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJhcHBjbGllbnQgbWFpbiIsIHN0YXQuUEFTUyk7CiAKIAotICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdvb2dsZSBjbGllbnQgdGVzdCBmYWlsZWQiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImFwcGNsaWVudCBtYWluIiAsIHN0YXQuRkFJTCk7Ci0JfSAKKyAgICB9CiAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZG9TcGVsbGluZ1N1Z2dlc3Rpb24oR29vZ2xlU2VhcmNoUG9ydCBnb29nbGVTZWFyY2hQb3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZ29vZ2xlS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZW5kcG9pbnRBZGRyZXNzKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGVuZHBvaW50QWRkcmVzcykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgaWYoIGVuZHBvaW50QWRkcmVzcyAhPSBudWxsICkgewpAQCAtMTQyLDcgKzE0Miw3IEBACiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb250YWN0aW5nIGdvb2dsZSBmb3Igc3BlbGxpbmcgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VnZ2VzdGlvbiBhdCAiICsgZW5kcG9pbnRBZGRyZXNzKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHNwZWxsaW5nU3VnZ2VzdGlvbiA9CiAgICAgICAgICAgICBnb29nbGVTZWFyY2hQb3J0LmRvU3BlbGxpbmdTdWdnZXN0aW9uKGdvb2dsZUtleSwgd29yZCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR2F2ZSBnb29nbGUgdGhlIHdvcmQgJyIgKyB3b3JkICsgIicgLi4uICIgKwpAQCAtMTU1LDIxICsxNTUsMjEgQEAKICAgICAgICAgQ2FsbCBjMSA9IHNlcnZpY2UuY3JlYXRlQ2FsbCgpOwogICAgICAgICBDYWxsIGMyID0gc2VydmljZS5jcmVhdGVDYWxsKFBPUlRfUU5BTUUpOwogICAgICAgICBDYWxsIGMzID0gc2VydmljZS5jcmVhdGVDYWxsKFBPUlRfUU5BTUUsIE9QRVJBVElPTl9RTkFNRSk7Ci0gICAgICAgIENhbGwgYzQgPSBzZXJ2aWNlLmNyZWF0ZUNhbGwoUE9SVF9RTkFNRSwgCisgICAgICAgIENhbGwgYzQgPSBzZXJ2aWNlLmNyZWF0ZUNhbGwoUE9SVF9RTkFNRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUEVSQVRJT05fUU5BTUUuZ2V0TG9jYWxQYXJ0KCkpOwogICAgICAgICBDYWxsW10gY2FsbHMgPSBzZXJ2aWNlLmdldENhbGxzKFBPUlRfUU5BTUUpOwogCiAgICAgICAgIGlmKCB0YXJnZXRFbmRwb2ludEFkZHJlc3MgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIGMzLnNldFRhcmdldEVuZHBvaW50QWRkcmVzcyh0YXJnZXRFbmRwb2ludEFkZHJlc3MpOyAgICAgICAgICAgIAotICAgICAgICB9IAorICAgICAgICAgICAgYzMuc2V0VGFyZ2V0RW5kcG9pbnRBZGRyZXNzKHRhcmdldEVuZHBvaW50QWRkcmVzcyk7CisgICAgICAgIH0KICAgICAgICAgT2JqZWN0IHBhcmFtc1tdID0gbmV3IE9iamVjdFtdIHtnb29nbGVLZXksICJoZWxsbyIgfTsKICAgICAgICAgU3RyaW5nIHJlc3BvbnNlID0gKFN0cmluZykgYzMuaW52b2tlKHBhcmFtcyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgPSAiICsgcmVzcG9uc2UpOwogCiAgICAgICAgIC8vIGNvbnRhaW5lci1tYW5hZ2VkIHBvcnQgc2VsZWN0aW9uCi0gICAgICAgIEdvb2dsZVNlYXJjaFBvcnQgc2VpID0gKEdvb2dsZVNlYXJjaFBvcnQpIAorICAgICAgICBHb29nbGVTZWFyY2hQb3J0IHNlaSA9IChHb29nbGVTZWFyY2hQb3J0KQogICAgICAgICAgICAgc2VydmljZS5nZXRQb3J0KEdvb2dsZVNlYXJjaFBvcnQuY2xhc3MpOwotICAgICAgICBzZWkgPSAoR29vZ2xlU2VhcmNoUG9ydCkgCisgICAgICAgIHNlaSA9IChHb29nbGVTZWFyY2hQb3J0KQogICAgICAgICAgICAgc2VydmljZS5nZXRQb3J0KFBPUlRfUU5BTUUsIEdvb2dsZVNlYXJjaFBvcnQuY2xhc3MpOwogCiAgICAgICAgIFFOYW1lIHNlcnZpY2VOYW1lID0gc2VydmljZS5nZXRTZXJ2aWNlTmFtZSgpOwpAQCAtMTgyLDE4ICsxODIsMTggQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIG9uZXdheSBvcGVyYXRpb24iKTsKICAgICAgICAgQ2FsbCBvbmV3YXkgPSBzZXJ2aWNlLmNyZWF0ZUNhbGwoUE9SVF9RTkFNRSwgImhlbGxvT25lV2F5Iik7CiAgICAgICAgIGlmKCB0YXJnZXRFbmRwb2ludEFkZHJlc3MgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIG9uZXdheS5zZXRUYXJnZXRFbmRwb2ludEFkZHJlc3ModGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsgICAgICAgICAgICAKLSAgICAgICAgfSAKKyAgICAgICAgICAgIG9uZXdheS5zZXRUYXJnZXRFbmRwb2ludEFkZHJlc3ModGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKKyAgICAgICAgfQogCiAgICAgICAgIGxvbmcgb25lV2F5TWV0aG9kV2FpdFRpbWVJbk1pbGxpcyA9IDcwMDA7CiAKLSAgICAgICAgRGF0ZSBiZWZvcmUgPSBuZXcgRGF0ZSgpOyAgICAgICAgCi0gICAgICAgIG9uZXdheS5pbnZva2VPbmVXYXkobmV3IE9iamVjdFtdIAorICAgICAgICBEYXRlIGJlZm9yZSA9IG5ldyBEYXRlKCk7CisgICAgICAgIG9uZXdheS5pbnZva2VPbmVXYXkobmV3IE9iamVjdFtdCiAgICAgICAgICAgICAgICB7IG9uZVdheU1ldGhvZFdhaXRUaW1lSW5NaWxsaXMgKyAiIiB9KTsKICAgICAgICAgRGF0ZSBhZnRlciA9IG5ldyBEYXRlKCk7CiAgICAgICAgIGxvbmcgZWxhcHNlZFRpbWUgPSBhZnRlci5nZXRUaW1lKCkgLSBiZWZvcmUuZ2V0VGltZSgpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9uZSB3YXkgb3BlcmF0aW9uIGJlZ2FuIGF0ICIgKyBiZWZvcmUgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYW5kIHJldHVybmVkIGF0ICIgKyBhZnRlciArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9uZSB3YXkgb3BlcmF0aW9uIGJlZ2FuIGF0ICIgKyBiZWZvcmUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBhbmQgcmV0dXJuZWQgYXQgIiArIGFmdGVyICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYW5kIHRvb2sgIiArICBlbGFwc2VkVGltZSArICIgbWlsbGktc2Vjb25kcyIpOwogICAgICAgICBpZiggZWxhcHNlZFRpbWUgPiBvbmVXYXlNZXRob2RXYWl0VGltZUluTWlsbGlzICkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigib25lIHdheSBvcGVyYXRpb24gYmxvY2tlZCBmb3IgdG9vIGxvbmcgIik7CkBAIC0yMDQsNyArMjA0LDcgQEAKICAgICAgICAgLy8gdG8gdW5kZXBsb3ksIGJ1dCB0aGUgZW5kcG9pbnQgaXMgc3RpbGwgZXhlY3V0aW5nIGl0cwogICAgICAgICAvLyBvbmV3YXkgb3BlcmF0aW9uLgogICAgICAgICBsb25nIHNsZWVwVGltZSA9IChvbmVXYXlNZXRob2RXYWl0VGltZUluTWlsbGlzIC0gZWxhcHNlZFRpbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm5vdyBzbGVlcGluZyBmb3IgIiArIHNsZWVwVGltZSArICIgbWlsbGkgc2VjcyIpOwogICAgICAgICBUaHJlYWQuc2xlZXAoc2xlZXBUaW1lKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZXR1cm5pbmcgZnJvbSBkb0R5bmFtaWNQcm94eVRlc3QiKTsKQEAgLTI2MCw3ICsyNjAsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IHVuc3VwcG9ydGVkIG9wZXJhdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIFNlcnZpY2UuZ2V0UG9ydChTRUkpIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFJlbW90ZSByZW1vdGUgPSBzZXJ2aWNlLmdldFBvcnQoUE9SVF9RTkFNRSwgR29vZ2xlU2VhcmNoUG9ydC5jbGFzcyk7CiAgICAgICAgIH0gY2F0Y2goamF2YS5sYW5nLlVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIHVvZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvY2xpZW50L0NsaWVudEhhbmRsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL2NsaWVudC9DbGllbnRIYW5kbGVyLmphdmEKaW5kZXggZjcxMDVjOS4uMzZkNzk2MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvY2xpZW50L0NsaWVudEhhbmRsZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci9jbGllbnQvQ2xpZW50SGFuZGxlci5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiBpbXBvcnQgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0OwogCiBwdWJsaWMgY2xhc3MgQ2xpZW50SGFuZGxlciBleHRlbmRzIEdlbmVyaWNIYW5kbGVyIHsKLSAgCisKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIENsaWVudEhhbmRsZXI6OmRlc3Ryb3koKSIpOwogICAgIH0KQEAgLTQwLDE3ICs0MCwxNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIENsaWVudEhhbmRsZXI6OmhhbmRsZUZhdWx0KCkiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgICAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZVJlcXVlc3QoTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIENsaWVudEhhbmRsZXI6OmhhbmRsZVJlcXVlc3QoKSIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlUmVzcG9uc2UoTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIENsaWVudEhhbmRsZXI6OmhhbmRsZVJlc3BvbnNlKCkiKTsKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSAKLSAgICAgICAgCisgICAgfQorCiAgICAgcHVibGljIHZvaWQgaW5pdChIYW5kbGVySW5mbyBjb25maWcpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBDbGllbnRIYW5kbGVyOjppbml0KCkiKTsKICAgICAgICAgdHJ5IHsKQEAgLTYwLDkgKzYwLDkgQEAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhhbmRsZXIgaW5pdCBwYXJhbXMgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5nZXRIYW5kbGVyQ29uZmlnKCkpOwotICAgIH0gCi0gICAKKyAgICB9CisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbAppbmRleCBjYzAxY2EyLi40ZTc0NDVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC05MCw3ICs5MCw3IEBACiAgICAgICA8L3NlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPgogICAgICAgPHBvcnQtY29tcG9uZW50LWxpbms+Z29vZ2xlc2VydmVyLXdlYi53YXIjR29vZ2xlU2VhcmNoUG9ydDwvcG9ydC1jb21wb25lbnQtbGluaz4KICAgICA8L3BvcnQtY29tcG9uZW50LXJlZj4KLSAgPC9zZXJ2aWNlLXJlZj4gIAorICA8L3NlcnZpY2UtcmVmPgogPCEtLSAgPHNlcnZpY2UtcmVmPgogICAgIDxkZXNjcmlwdGlvbj5wYXJ0aWFsIHdzZGwgdGVzdCBnb29nbGUgc2VydmljZSByZWY8L2Rlc2NyaXB0aW9uPgogICAgIDxzZXJ2aWNlLXJlZi1uYW1lPnNlcnZpY2UvcGFydGlhbEdlbmVyYXRlZDwvc2VydmljZS1yZWYtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL2Rlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL2Rlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbAppbmRleCAyMWNkZTc2Li5jNTM0ZDc4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci9kZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sCkBAIC0zMyw1ICszMyw1IEBACiAgICAgPGdyb3VwLW5hbWU+ZW5nPC9ncm91cC1uYW1lPgogICAgIDxncm91cC1uYW1lPm1ncjwvZ3JvdXAtbmFtZT4KICAgICA8Z3JvdXAtbmFtZT5ndWVzdDwvZ3JvdXAtbmFtZT4KLSAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+CQorICA8L3NlY3VyaXR5LXJvbGUtbWFwcGluZz4KIDwvc3VuLWFwcGxpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvZWpiL0Zvb0hhbmRsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL2VqYi9Gb29IYW5kbGVyLmphdmEKaW5kZXggZmZiNjFmNS4uYWJlMjcyMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvZWpiL0Zvb0hhbmRsZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci9lamIvRm9vSGFuZGxlci5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiBpbXBvcnQgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0OwogCiBwdWJsaWMgY2xhc3MgRm9vSGFuZGxlciBleHRlbmRzIEdlbmVyaWNIYW5kbGVyIHsKLSAgCisKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0hhbmRsZXI6OmRlc3Ryb3koKSIpOwogICAgIH0KQEAgLTQwLDE3ICs0MCwxNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0hhbmRsZXI6OmhhbmRsZUZhdWx0KCkiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgICAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZVJlcXVlc3QoTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0hhbmRsZXI6OmhhbmRsZVJlcXVlc3QoKSIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlUmVzcG9uc2UoTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0hhbmRsZXI6OmhhbmRsZVJlc3BvbnNlKCkiKTsKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSAKLSAgICAgICAgCisgICAgfQorCiAgICAgcHVibGljIHZvaWQgaW5pdChIYW5kbGVySW5mbyBjb25maWcpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29IYW5kbGVyOjppbml0KCkiKTsKICAgICAgICAgdHJ5IHsKQEAgLTYwLDkgKzYwLDkgQEAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhhbmRsZXIgaW5pdCBwYXJhbXMgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5nZXRIYW5kbGVyQ29uZmlnKCkpOwotICAgIH0gCi0gICAKKyAgICB9CisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL2VqYi9Hb29nbGVFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL2VqYi9Hb29nbGVFSkIuamF2YQppbmRleCA2YjkzNWNiLi4zMTg2YWNlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci9lamIvR29vZ2xlRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvZWpiL0dvb2dsZUVKQi5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgamF2YXgueG1sLnJwYy5TZXJ2aWNlOwogaW1wb3J0IGphdmF4LnhtbC5ycGMuQ2FsbDsKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC0zMywyNCArMzMsMjQgQEAKIHB1YmxpYyBjbGFzcyBHb29nbGVFSkIgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7CiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYzsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFFOYW1lIFBPUlRfUU5BTUUgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBRTmFtZSBQT1JUX1FOQU1FID0KICAgICAgICAgbmV3IFFOYW1lKCJ1cm46R29vZ2xlU2VhcmNoIiwgIkdvb2dsZVNlYXJjaFBvcnQiKTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBRTmFtZSBPUEVSQVRJT05fUU5BTUUgPQogICAgICAgICBuZXcgUU5hbWUoInVybjpHb29nbGVTZWFyY2giLCAiZG9TcGVsbGluZ1N1Z2dlc3Rpb24iKTsKLSAgICAKKwogICAgIHB1YmxpYyBHb29nbGVFSkIoKXt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEdvb2dsZUVKQjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBHb29nbGVFSkI6OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAotICAgIHB1YmxpYyBieXRlW10gZG9HZXRDYWNoZWRQYWdlKGphdmEubGFuZy5TdHJpbmcga2V5LCBqYXZhLmxhbmcuU3RyaW5nIHVybCkgCi0gICAgeyAKLSAgICAgICAgcmV0dXJuIG51bGw7IAorICAgIHB1YmxpYyBieXRlW10gZG9HZXRDYWNoZWRQYWdlKGphdmEubGFuZy5TdHJpbmcga2V5LCBqYXZhLmxhbmcuU3RyaW5nIHVybCkKKyAgICB7CisgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIAotICAgIHB1YmxpYyBTdHJpbmcgZG9TcGVsbGluZ1N1Z2dlc3Rpb24oamF2YS5sYW5nLlN0cmluZyBrZXksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyBwaHJhc2UpIAorICAgIHB1YmxpYyBTdHJpbmcgZG9TcGVsbGluZ1N1Z2dlc3Rpb24oamF2YS5sYW5nLlN0cmluZyBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nIHBocmFzZSkKICAgICAgICB7CiAKICAgICAgICAgdHJ5IHsKQEAgLTc1LDkgKzc1LDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkdvb2dsZUVKQi5kb1NwZWxsaW5nU3VnZ2VzdGlvbigpOlVuZXhwZWN0ZWQgZXhjZXB0aW9uIGNhdWdodCAtICIsIGV4KTsgICAgICAgIAorICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiR29vZ2xlRUpCLmRvU3BlbGxpbmdTdWdnZXN0aW9uKCk6VW5leHBlY3RlZCBleGNlcHRpb24gY2F1Z2h0IC0gIiwgZXgpOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBzYy5pc0NhbGxlckluUm9sZSgiZm9vIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oCkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJHb29nbGVFSkIuZG9TcGVsbGluZ1N1Z2dlc3Rpb24oKTpVbmV4cGVjdGVkIGV4Y2VwdGlvbiBjYXVnaHQgaW4gaXNDYWxsZXJJblJvbGUoZm9vKSBjYWxsICIsIGV4KTsgICAgICAgICAgICAKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkdvb2dsZUVKQi5kb1NwZWxsaW5nU3VnZ2VzdGlvbigpOlVuZXhwZWN0ZWQgZXhjZXB0aW9uIGNhdWdodCBpbiBpc0NhbGxlckluUm9sZShmb28pIGNhbGwgIiwgZXgpOwogICAgICAgICB9CiAKICAgICAgICAgU3RyaW5nIHJldHVyblZhbHVlID0gInNwZWxsaW5nIHN1Z2dlc3Rpb24gZnJvbSBlamIiOwpAQCAtOTYsMTAgKzk2LDEwIEBACiAgICAgICAgICAgICBTZXJ2aWNlIGdlbmVyaWNTZXJ2aWNlV2l0aFdTREwgPSBudWxsOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSAKKyAgICAgICAgICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkKICAgICAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvV2ViRElJUmVmZXJlbmNlIik7CiAgICAgICAgICAgICAgICAgZG9EeW5hbWljUHJveHlUZXN0KHNlcnZpY2UpOwotICAgICAgICAgICAgICAgIEdvb2dsZVNlYXJjaFBvcnQgd2ViUG9ydCA9IChHb29nbGVTZWFyY2hQb3J0KSAKKyAgICAgICAgICAgICAgICBHb29nbGVTZWFyY2hQb3J0IHdlYlBvcnQgPSAoR29vZ2xlU2VhcmNoUG9ydCkKICAgICAgICAgICAgICAgICAgICAgc2VydmljZS5nZXRQb3J0KEdvb2dsZVNlYXJjaFBvcnQuY2xhc3MpOwogICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gd2ViUG9ydC5kb1NwZWxsaW5nU3VnZ2VzdGlvbihrZXksIHBocmFzZSk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb29nbGVFSkIgcmV0dXJuaW5nICIgKyByZXR1cm5WYWx1ZSk7CiAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgaGVsbG9PbmVXYXkoU3RyaW5nIHMxKSB7CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBHb29nbGVFSkI6OmhlbGxvT25lV2F5LiBwYXJhbSA9ICIgKwpAQCAtMTMxLDE2ICsxMzEsMTYgQEAKICAgICBwdWJsaWMgZ29vZ2xlc2VydmVyLkdvb2dsZVNlYXJjaFJlc3VsdCBkb0dvb2dsZVNlYXJjaChqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyBxLCBpbnQgc3RhcnQsIGludCBtYXhSZXN1bHRzLCBib29sZWFuIGZpbHRlciwgamF2YS5sYW5nLlN0cmluZyByZXN0cmljdCwgYm9vbGVhbiBzYWZlU2VhcmNoLCBqYXZhLmxhbmcuU3RyaW5nIGxyLCBqYXZhLmxhbmcuU3RyaW5nIGllLCBqYXZhLmxhbmcuU3RyaW5nIG9lKSB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JCisKICAgICAgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiAKICAgICBwcml2YXRlIHZvaWQgZG9EeW5hbWljUHJveHlUZXN0KFNlcnZpY2Ugc2VydmljZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC0xNDgsMTQgKzE0OCwxNCBAQAogICAgICAgICBDYWxsIGMxID0gc2VydmljZS5jcmVhdGVDYWxsKCk7CiAgICAgICAgIENhbGwgYzIgPSBzZXJ2aWNlLmNyZWF0ZUNhbGwoUE9SVF9RTkFNRSk7CiAgICAgICAgIENhbGwgYzMgPSBzZXJ2aWNlLmNyZWF0ZUNhbGwoUE9SVF9RTkFNRSwgT1BFUkFUSU9OX1FOQU1FKTsKLSAgICAgICAgQ2FsbCBjNCA9IHNlcnZpY2UuY3JlYXRlQ2FsbChQT1JUX1FOQU1FLCAKKyAgICAgICAgQ2FsbCBjNCA9IHNlcnZpY2UuY3JlYXRlQ2FsbChQT1JUX1FOQU1FLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QRVJBVElPTl9RTkFNRS5nZXRMb2NhbFBhcnQoKSk7CiAgICAgICAgIENhbGxbXSBjYWxscyA9IHNlcnZpY2UuZ2V0Q2FsbHMoUE9SVF9RTkFNRSk7CiAKICAgICAgICAgLy8gY29udGFpbmVyLW1hbmFnZWQgcG9ydCBzZWxlY3Rpb24KLSAgICAgICAgR29vZ2xlU2VhcmNoUG9ydCBzZWkgPSAoR29vZ2xlU2VhcmNoUG9ydCkgCisgICAgICAgIEdvb2dsZVNlYXJjaFBvcnQgc2VpID0gKEdvb2dsZVNlYXJjaFBvcnQpCiAgICAgICAgICAgICBzZXJ2aWNlLmdldFBvcnQoR29vZ2xlU2VhcmNoUG9ydC5jbGFzcyk7Ci0gICAgICAgIHNlaSA9IChHb29nbGVTZWFyY2hQb3J0KSAKKyAgICAgICAgc2VpID0gKEdvb2dsZVNlYXJjaFBvcnQpCiAgICAgICAgICAgICBzZXJ2aWNlLmdldFBvcnQoUE9SVF9RTkFNRSwgR29vZ2xlU2VhcmNoUG9ydC5jbGFzcyk7CiAKICAgICAgICAgUU5hbWUgc2VydmljZU5hbWUgPSBzZXJ2aWNlLmdldFNlcnZpY2VOYW1lKCk7CkBAIC0xNjQsNyArMTY0LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigid3NkbExvY2F0aW9uID0gIiArIHdzZGxMb2NhdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgSXRlcmF0b3IgcG9ydHMgPSBzZXJ2aWNlLmdldFBvcnRzKCk7Ci0gICAgICAgIAorCiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL3N0YW5kYWxvbmUvU3RhbmRBbG9uZUNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvc3RhbmRhbG9uZS9TdGFuZEFsb25lQ2xpZW50LmphdmEKaW5kZXggMDhmMjdmYi4uMjBjODY2YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvc3RhbmRhbG9uZS9TdGFuZEFsb25lQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvc3RhbmRhbG9uZS9TdGFuZEFsb25lQ2xpZW50LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIAogcHVibGljIGNsYXNzIFN0YW5kQWxvbmVDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgU3RyaW5nIHdvcmQ7CkBAIC0zMiwxMiArMzIsMTIgQEAKICAgICBwcml2YXRlIFN0cmluZyBnb29nbGVLZXk7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewotICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJnb29nbGVzZXJ2ZXIgc3RhbmRhbG9uZSIpOwkKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZ29vZ2xlc2VydmVyIHN0YW5kYWxvbmUiKTsKICAgICAgICAgU3RhbmRBbG9uZUNsaWVudCBjbGllbnQgPSBuZXcgU3RhbmRBbG9uZUNsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZ29vZ2xlc2VydmVyLXN0YW5kYWxvbmVJRCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdGFuZEFsb25lQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgd29yZCA9IChhcmdzLmxlbmd0aCA+IDApID8gInNwZWxsbmciIDogYXJnc1swXTsKICAgICAgICAgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0gKGFyZ3MubGVuZ3RoID4gMSkgPwpAQCAtNDcsMTEgKzQ3LDExIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgIAl0cnkgewotICAgICAgICAgICAgR29vZ2xlU2VhcmNoU2VydmljZSBnb29nbGVTZWFyY2hTZXJ2aWNlID0gCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBHb29nbGVTZWFyY2hTZXJ2aWNlIGdvb2dsZVNlYXJjaFNlcnZpY2UgPQogICAgICAgICAgICAgICAgIG5ldyBHb29nbGVTZWFyY2hTZXJ2aWNlX0ltcGwoKTsKIAotICAgICAgICAgICAgR29vZ2xlU2VhcmNoUG9ydCBnb29nbGVTZWFyY2hQb3J0ID0gCisgICAgICAgICAgICBHb29nbGVTZWFyY2hQb3J0IGdvb2dsZVNlYXJjaFBvcnQgPQogICAgICAgICAgICAgICAgIGdvb2dsZVNlYXJjaFNlcnZpY2UuZ2V0R29vZ2xlU2VhcmNoUG9ydCgpOwogCiAgICAgICAgICAgICAoKFN0dWIpZ29vZ2xlU2VhcmNoUG9ydCkuX3NldFByb3BlcnR5CkBAIC03MiwxNSArNzIsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVsbGluZ1N1Z2dlc3Rpb24gKyAiJyIpOwogCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXBwY2xpZW50IG1haW4iLCBzdGF0LlBBU1MpOwotICAgICAgICAgICAgICAgIAotICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ29vZ2xlIGNsaWVudCB0ZXN0IGZhaWxlZCIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXBwY2xpZW50IG1haW4iICwgc3RhdC5GQUlMKTsKIAotCX0gCisgICAgfQogCiAgICAgfQotICAgICAgICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci93ZWIvRm9vSGFuZGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvd2ViL0Zvb0hhbmRsZXIuamF2YQppbmRleCA3YTUxNTA3Li5jYmU1M2ZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci93ZWIvRm9vSGFuZGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL3dlYi9Gb29IYW5kbGVyLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIGltcG9ydCBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQ7CiAKIHB1YmxpYyBjbGFzcyBGb29IYW5kbGVyIGV4dGVuZHMgR2VuZXJpY0hhbmRsZXIgewotICAKKwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vSGFuZGxlcjo6ZGVzdHJveSgpIik7CiAgICAgfQpAQCAtNDAsMTcgKzQwLDE3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vSGFuZGxlcjo6aGFuZGxlRmF1bHQoKSIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlUmVxdWVzdChNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vSGFuZGxlcjo6aGFuZGxlUmVxdWVzdCgpIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAgICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVSZXNwb25zZShNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vSGFuZGxlcjo6aGFuZGxlUmVzcG9uc2UoKSIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IAotICAgICAgICAKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBpbml0KEhhbmRsZXJJbmZvIGNvbmZpZykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0hhbmRsZXI6OmluaXQoKSIpOwogICAgICAgICB0cnkgewpAQCAtNjAsOSArNjAsOSBAQAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGFuZGxlciBpbml0IHBhcmFtcyA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmdldEhhbmRsZXJDb25maWcoKSk7Ci0gICAgfSAKLSAgIAorICAgIH0KKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvd2ViL0dvb2dsZVNlcnZsZXRJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci93ZWIvR29vZ2xlU2VydmxldEltcGwuamF2YQppbmRleCA5MTZmNTJlLi5iNDFjMjAyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci93ZWIvR29vZ2xlU2VydmxldEltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci93ZWIvR29vZ2xlU2VydmxldEltcGwuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CiBpbXBvcnQgamF2YXgueG1sLnJwYy5DYWxsOwogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGphdmF4Lm5hbWluZy4qOwogaW1wb3J0IGphdmF4LnhtbC5ycGMuU2VydmljZTsKIGltcG9ydCBqYXZheC54bWwucnBjLnNlcnZlci5TZXJ2aWNlTGlmZWN5Y2xlOwpAQCAtMzAsMTEgKzMwLDExIEBACiAKIHB1YmxpYyBjbGFzcyBHb29nbGVTZXJ2bGV0SW1wbCBpbXBsZW1lbnRzIGpha2FydGEuc2VydmxldC5TaW5nbGVUaHJlYWRNb2RlbCwgU2VydmljZUxpZmVjeWNsZSB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBRTmFtZSBQT1JUX1FOQU1FID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUU5hbWUgUE9SVF9RTkFNRSA9CiAgICAgICAgIG5ldyBRTmFtZSgidXJuOkdvb2dsZVNlYXJjaCIsICJHb29nbGVTZWFyY2hQb3J0Iik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUU5hbWUgT1BFUkFUSU9OX1FOQU1FID0KICAgICAgICAgbmV3IFFOYW1lKCJ1cm46R29vZ2xlU2VhcmNoIiwgImRvU3BlbGxpbmdTdWdnZXN0aW9uIik7Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gZ290SW5pdCA9IGZhbHNlOwogCiAgICAgcHVibGljIEdvb2dsZVNlcnZsZXRJbXBsKCkgewpAQCAtNTAsOSArNTAsOSBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBTZXJ2aWNlTGlmZWN5Y2xlOjpkZXN0cm95IGNhbGwiKTsKICAgICB9CiAKLSAgICBwdWJsaWMgYnl0ZVtdIGRvR2V0Q2FjaGVkUGFnZShqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyB1cmwpIAotICAgIHsgCi0gICAgICAgIHJldHVybiBudWxsOyAKKyAgICBwdWJsaWMgYnl0ZVtdIGRvR2V0Q2FjaGVkUGFnZShqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyB1cmwpCisgICAgeworICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsb09uZVdheShTdHJpbmcgczEpIHsKQEAgLTcxLDggKzcxLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlKCkpOwogICAgIH0KIAotICAgIHB1YmxpYyBTdHJpbmcgZG9TcGVsbGluZ1N1Z2dlc3Rpb24oamF2YS5sYW5nLlN0cmluZyBrZXksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyBwaHJhc2UpIAorICAgIHB1YmxpYyBTdHJpbmcgZG9TcGVsbGluZ1N1Z2dlc3Rpb24oamF2YS5sYW5nLlN0cmluZyBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nIHBocmFzZSkKIAogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb29nbGVTZXJ2bGV0SW1wbC5kb1NwZWxsaW5nU3VnZ2VzdGlvbigpICIgKwpAQCAtODgsMjIgKzg4LDIyIEBACiAgICAgICAgICAgICBTZXJ2aWNlIGdlbmVyaWNTZXJ2aWNlV2l0aFdTREwgPSBudWxsOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSAKKyAgICAgICAgICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkKICAgICAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvRWpiRElJUmVmZXJlbmNlIik7CiAgICAgICAgICAgICAgICAgZG9EeW5hbWljUHJveHlUZXN0KHNlcnZpY2UpOwotICAgICAgICAgICAgICAgIEdvb2dsZVNlYXJjaFBvcnQgZWpiUG9ydCA9IChHb29nbGVTZWFyY2hQb3J0KSAKKyAgICAgICAgICAgICAgICBHb29nbGVTZWFyY2hQb3J0IGVqYlBvcnQgPSAoR29vZ2xlU2VhcmNoUG9ydCkKICAgICAgICAgICAgICAgICAgICAgc2VydmljZS5nZXRQb3J0KEdvb2dsZVNlYXJjaFBvcnQuY2xhc3MpOwogICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gZWpiUG9ydC5kb1NwZWxsaW5nU3VnZ2VzdGlvbihrZXksIHBocmFzZSk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVtb3RlRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLCBlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAgICAgICAgICAgIAotICAgICAgICAKKyAgICAgICAgfQorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR29vZ2xlU2VydmxldEltcGwgcmV0dXJuaW5nICIgKyByZXR1cm5WYWx1ZSk7CiAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgcHVibGljIEdvb2dsZVNlYXJjaFJlc3VsdCBkb0dvb2dsZVNlYXJjaChqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyBxLCBpbnQgc3RhcnQsIGludCBtYXhSZXN1bHRzLCBib29sZWFuIGZpbHRlciwgamF2YS5sYW5nLlN0cmluZyByZXN0cmljdCwgYm9vbGVhbiBzYWZlU2VhcmNoLCBqYXZhLmxhbmcuU3RyaW5nIGxyLCBqYXZhLmxhbmcuU3RyaW5nIGllLCBqYXZhLmxhbmcuU3RyaW5nIG9lKSB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KQEAgLTExMywxNCArMTEzLDE0IEBACiAgICAgICAgIENhbGwgYzEgPSBzZXJ2aWNlLmNyZWF0ZUNhbGwoKTsKICAgICAgICAgQ2FsbCBjMiA9IHNlcnZpY2UuY3JlYXRlQ2FsbChQT1JUX1FOQU1FKTsKICAgICAgICAgQ2FsbCBjMyA9IHNlcnZpY2UuY3JlYXRlQ2FsbChQT1JUX1FOQU1FLCBPUEVSQVRJT05fUU5BTUUpOwotICAgICAgICBDYWxsIGM0ID0gc2VydmljZS5jcmVhdGVDYWxsKFBPUlRfUU5BTUUsIAorICAgICAgICBDYWxsIGM0ID0gc2VydmljZS5jcmVhdGVDYWxsKFBPUlRfUU5BTUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BFUkFUSU9OX1FOQU1FLmdldExvY2FsUGFydCgpKTsKICAgICAgICAgQ2FsbFtdIGNhbGxzID0gc2VydmljZS5nZXRDYWxscyhQT1JUX1FOQU1FKTsKIAogICAgICAgICAvLyBjb250YWluZXItbWFuYWdlZCBwb3J0IHNlbGVjdGlvbgotICAgICAgICBHb29nbGVTZWFyY2hQb3J0IHNlaSA9IChHb29nbGVTZWFyY2hQb3J0KSAKKyAgICAgICAgR29vZ2xlU2VhcmNoUG9ydCBzZWkgPSAoR29vZ2xlU2VhcmNoUG9ydCkKICAgICAgICAgICAgIHNlcnZpY2UuZ2V0UG9ydChHb29nbGVTZWFyY2hQb3J0LmNsYXNzKTsKLSAgICAgICAgc2VpID0gKEdvb2dsZVNlYXJjaFBvcnQpIAorICAgICAgICBzZWkgPSAoR29vZ2xlU2VhcmNoUG9ydCkKICAgICAgICAgICAgIHNlcnZpY2UuZ2V0UG9ydChQT1JUX1FOQU1FLCBHb29nbGVTZWFyY2hQb3J0LmNsYXNzKTsKIAogICAgICAgICBRTmFtZSBzZXJ2aWNlTmFtZSA9IHNlcnZpY2UuZ2V0U2VydmljZU5hbWUoKTsKQEAgLTEyOSw3ICsxMjksNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ3c2RsTG9jYXRpb24gPSAiICsgd3NkbExvY2F0aW9uKTsKICAgICAgICAgfQogICAgICAgICBJdGVyYXRvciBwb3J0cyA9IHNlcnZpY2UuZ2V0UG9ydHMoKTsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL3dzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL3dzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbAppbmRleCA1ZmZkZWI5Li41NjM0YzE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci93c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249Ikdvb2dsZVNlYXJjaC53c2RsIgogICAgICAgcGFja2FnZU5hbWU9Imdvb2dsZWNsaWVudCIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvd3Njb21waWxlX2NvbmZpZ19lamIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvd3Njb21waWxlX2NvbmZpZ19lamIueG1sCmluZGV4IGNjN2E4MzguLmYxYTgxMTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL3dzY29tcGlsZV9jb25maWdfZWpiLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci93c2NvbXBpbGVfY29uZmlnX2VqYi54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHdzZGwgCisgIDx3c2RsCiAgICAgICBsb2NhdGlvbj0iR29vZ2xlU2VhcmNoLndzZGwiCiAgICAgICBwYWNrYWdlTmFtZT0iZ29vZ2xlc2VydmVyIi8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci93c2NvbXBpbGVfY29uZmlnX3N0YW5kYWxvbmUueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvd3Njb21waWxlX2NvbmZpZ19zdGFuZGFsb25lLnhtbAppbmRleCBkOWNjZmU2Li45OWFkOTFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci93c2NvbXBpbGVfY29uZmlnX3N0YW5kYWxvbmUueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL3dzY29tcGlsZV9jb25maWdfc3RhbmRhbG9uZS54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHdzZGwgCisgIDx3c2RsCiAgICAgICBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo4MDgwL0dvb2dsZVNlcnZsZXQvR29vZ2xlU2VhcmNoP1dTREwiCiAgICAgICBwYWNrYWdlTmFtZT0ic3RhbmRhbG9uZSIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvd3Njb21waWxlX2NvbmZpZ193ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvd3Njb21waWxlX2NvbmZpZ193ZWIueG1sCmluZGV4IGRkNmU3NjYuLmRiMGNhNzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL3dzY29tcGlsZV9jb25maWdfd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci93c2NvbXBpbGVfY29uZmlnX3dlYi54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHdzZGwgCisgIDx3c2RsCiAgICAgICBsb2NhdGlvbj0iR29vZ2xlU2VhcmNoLndzZGwiCiAgICAgICBwYWNrYWdlTmFtZT0iZ29vZ2xlc2VydmVyd2ViIi8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2hhbmRsZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvaGFuZGxlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDU0YmQ4NTAuLmY5NTIwZGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvaGFuZGxlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvaGFuZGxlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyNiArMTUsMjYgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNpbXBsZWhhbmRsZXIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgCis8cHJvcGVydHkgbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYnNlcnZpY2VzLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2Vic2VydmljZXMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2hhbmRsZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9oYW5kbGVyL2J1aWxkLnhtbAppbmRleCBlZjA1ZGQ1Li5hZjc5OGE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2hhbmRsZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvaGFuZGxlci9idWlsZC54bWwKQEAgLTMwLDkgKzMwLDkgQEAKICAgICAmdGVzdHByb3BlcnRpZXM7CiAKICAgPHRhcmdldCBuYW1lPSJydW4ud3Njb21waWxlIj4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+Ci0gICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4gICAgICAgIAotCTwvZXhlYz4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+CisgICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4KKyAgICA8L2V4ZWM+CiAgIDwvdGFyZ2V0PgogCiA8IS0tIE5PVEUuIHRoZSBzaW1wbGUgbWFwcGluZyB0ZXN0IGFuZCBmdWxsIG1hcHBpbmcgdGVzdCBjYW4KQEAgLTQ5LDQ1ICs0OSw0NSBAQAogICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iZ2VuLWVqYi13c2RsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIvPiAKKyAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCi0gICB2YWx1ZT0iLWRlZmluZSAtbWFwcGluZyAke2J1aWxkLmNsYXNzZXMuZGlyfS9TaW1wbGVIYW5kbGVyTWFwcGluZ19lamIueG1sIC1jcCAke2J1aWxkLmNsYXNzZXMuZGlyfSAta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIGNvbmZpZy1pbnRlcmZhY2UueG1sIi8+IAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgorICAgdmFsdWU9Ii1kZWZpbmUgLW1hcHBpbmcgJHtidWlsZC5jbGFzc2VzLmRpcn0vU2ltcGxlSGFuZGxlck1hcHBpbmdfZWpiLnhtbCAtY3AgJHtidWlsZC5jbGFzc2VzLmRpcn0gLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCBjb25maWctaW50ZXJmYWNlLnhtbCIvPgogICAgIDwvYW50Y2FsbD4KLSAgPC90YXJnZXQ+ICAgIAotICAgCisgIDwvdGFyZ2V0PgorCiAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUtZWpiIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgY29tcGlsZSwgZ2VuLWVqYi13c2RsIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iU2ltcGxlSGFuZGxlck1hcHBpbmdfZWpiLnhtbCxNRVRBLUlORi93c2RsLyoqLGVqYi8qLmNsYXNzIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgICAgICAgICAgICAKKwogICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJhc3NlbWJsZS1lamIsIGFzc2VtYmxlLWNsaWVudCIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+Ci0gICAgPC9hbnRjYWxsPiAgICAKKyAgICA8L2FudGNhbGw+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJnZW4tZWpiLXdzZGwiLz4KICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFwcGNsaWVudC1qYXItY29tbW9uIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgdmFsdWU9IlNpbXBsZUhhbmRsZXJNYXBwaW5nX2VqYi54bWwsTUVUQS1JTkYvd3NkbC8qKixzaW1wbGVoYW5kbGVyLyoqLGVqYi9TaW1wbGVTZXJ2ZXIuY2xhc3MsY29tLyoqIiAvPgotICAgIDwvYW50Y2FsbD4gIAorICAgIDwvYW50Y2FsbD4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jbGllbnQtY29tbW9uIi8+CiAgICAgPG1vdmUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Q2xpZW50LmphciIgdG9GaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS9zaW1wbGVoYW5kbGVyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC05NSwxMCArOTUsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQtY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9oYW5kbGVyL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvaGFuZGxlci9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZmIwMGY4OC4uZjgyMDFhMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9oYW5kbGVyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2hhbmRsZXIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMCwyOCArMzAsMjggQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtc2ltcGxlLXNvYXBmYXVsdCIpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtc29hcGZhdWx0SUQiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewotICAgIAl0cnkgewotICAgICAgICAgICAgCisgICAgICAgIHRyeSB7CisKICAgICAgICAgICAgIFN0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPSBhcmdzWzBdOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTZXJ2aWNlIHRlc3RTZXJ2aWNlID0gKFNlcnZpY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL3NpbXBsZWhhbmRsZXIiKTsKICAgICAgICAgICAgIFNpbXBsZVNlcnZlciB0ZXN0ID0gKFNpbXBsZVNlcnZlcikKICAgICAgICAgICAgIHRlc3RTZXJ2aWNlLmdldFBvcnQoU2ltcGxlU2VydmVyLmNsYXNzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAoKFN0dWIpdGVzdCkuX3NldFByb3BlcnR5KFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVuZHBvaW50IGFkZHJlc3MgPSAiICsgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW52b2NhdGlvbiByZXR1cm5lZCAiICsgdGVzdC5zYXlIZWxsbygiamVyb21lIikpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvaGFuZGxlci9jb25maWctaW50ZXJmYWNlLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvaGFuZGxlci9jb25maWctaW50ZXJmYWNlLnhtbAppbmRleCAzMDU0OTQ5Li5kN2RiYTIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2hhbmRsZXIvY29uZmlnLWludGVyZmFjZS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9oYW5kbGVyL2NvbmZpZy1pbnRlcmZhY2UueG1sCkBAIC0xOSwxMSArMTksMTEgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHNlcnZpY2UgCi0gICAgICBuYW1lPSJTaW1wbGVIYW5kbGVyU2VydmVyIiAKLSAgICAgIHRhcmdldE5hbWVzcGFjZT0idXJuOkhhbmRsZXJUZXN0IiAKLSAgICAgIHR5cGVOYW1lc3BhY2U9InVybjpIYW5kbGVyVGVzdCIgCisgIDxzZXJ2aWNlCisgICAgICBuYW1lPSJTaW1wbGVIYW5kbGVyU2VydmVyIgorICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46SGFuZGxlclRlc3QiCisgICAgICB0eXBlTmFtZXNwYWNlPSJ1cm46SGFuZGxlclRlc3QiCiAgICAgICBwYWNrYWdlTmFtZT0iaGFuZGxlcnRlc3QiPgogICAgICAgPGludGVyZmFjZSBuYW1lPSJlamIuU2ltcGxlU2VydmVyIi8+CiAgIDwvc2VydmljZT4KLTwvY29uZmlndXJhdGlvbj4gCis8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2hhbmRsZXIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9oYW5kbGVyL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbAppbmRleCA4ZTUwMjlkLi5jYjdmYmUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2hhbmRsZXIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvaGFuZGxlci9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKQEAgLTI0LDExICsyNCwxMSBAQAogICAgIDxkZXNjcmlwdGlvbj5zaW1wbGUgaGFuZGxlciBzZXJ2aWNlIHJlZjwvZGVzY3JpcHRpb24+CiAgICAgPHNlcnZpY2UtcmVmLW5hbWU+c2VydmljZS9zaW1wbGVoYW5kbGVyPC9zZXJ2aWNlLXJlZi1uYW1lPgogICAgIDxzZXJ2aWNlLWludGVyZmFjZT5qYXZheC54bWwucnBjLlNlcnZpY2U8L3NlcnZpY2UtaW50ZXJmYWNlPgotICAgIDx3c2RsLWZpbGU+TUVUQS1JTkYvd3NkbC9TaW1wbGVIYW5kbGVyU2VydmVyLndzZGw8L3dzZGwtZmlsZT4gICAgCisgICAgPHdzZGwtZmlsZT5NRVRBLUlORi93c2RsL1NpbXBsZUhhbmRsZXJTZXJ2ZXIud3NkbDwvd3NkbC1maWxlPgogICAgIDxqYXhycGMtbWFwcGluZy1maWxlPlNpbXBsZUhhbmRsZXJNYXBwaW5nX2VqYi54bWw8L2pheHJwYy1tYXBwaW5nLWZpbGU+Ci0gICAgPHNlcnZpY2UtcW5hbWUgeG1sbnM6c2VydmljZW5zPSJ1cm46SGFuZGxlclRlc3QiPnNlcnZpY2VuczpTaW1wbGVIYW5kbGVyU2VydmVyPC9zZXJ2aWNlLXFuYW1lPiAgICAgICAgICAgICAgIAorICAgIDxzZXJ2aWNlLXFuYW1lIHhtbG5zOnNlcnZpY2Vucz0idXJuOkhhbmRsZXJUZXN0Ij5zZXJ2aWNlbnM6U2ltcGxlSGFuZGxlclNlcnZlcjwvc2VydmljZS1xbmFtZT4KICAgICA8cG9ydC1jb21wb25lbnQtcmVmPgogICAgICAgPHNlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPmVqYi5TaW1wbGVTZXJ2ZXI8L3NlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPgotICAgIDwvcG9ydC1jb21wb25lbnQtcmVmPiAgICAgICAgICAKKyAgICA8L3BvcnQtY29tcG9uZW50LXJlZj4KICAgPC9zZXJ2aWNlLXJlZj4KIDwvYXBwbGljYXRpb24tY2xpZW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9oYW5kbGVyL2VqYi9TaW1wbGVIYW5kbGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2hhbmRsZXIvZWpiL1NpbXBsZUhhbmRsZXIuamF2YQppbmRleCA3NGRkNzExLi5kMmFjMzViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2hhbmRsZXIvZWpiL1NpbXBsZUhhbmRsZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2hhbmRsZXIvZWpiL1NpbXBsZUhhbmRsZXIuamF2YQpAQCAtMjEsMTMgKzIxLDEzIEBACiBpbXBvcnQgamF2YXgueG1sLnJwYy5oYW5kbGVyLio7CiAKIHB1YmxpYyBjbGFzcyBTaW1wbGVIYW5kbGVyIGV4dGVuZHMgR2VuZXJpY0hhbmRsZXIgewotICAgIAorCiAgICAgcHJvdGVjdGVkIEhhbmRsZXJJbmZvIGluZm8gPSBudWxsOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChIYW5kbGVySW5mbyBpbmZvKSB7CiAgICAgICAgIHRoaXMuaW5mbyA9IGluZm87CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlUmVxdWVzdChNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBEYXRlIHN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7CkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlUmVzcG9uc2UoTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgRGF0ZSBzdGFydFRpbWUgPSAoRGF0ZSkgY29udGV4dC5nZXRQcm9wZXJ0eSgic3RhcnRUaW1lIik7CkBAIC00OSw3ICs0OSw3IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFFOYW1lW10gZ2V0SGVhZGVycygpIHsKICAgICAgICAgcmV0dXJuIG5ldyBRTmFtZVswXTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2hhbmRsZXIvZWpiL1NpbXBsZVNlcnZlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9oYW5kbGVyL2VqYi9TaW1wbGVTZXJ2ZXIuamF2YQppbmRleCBiNzhmYTYyLi42NTNkNDRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2hhbmRsZXIvZWpiL1NpbXBsZVNlcnZlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvaGFuZGxlci9lamIvU2ltcGxlU2VydmVyLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBqYXZhLnJtaS4qOwogCiBwdWJsaWMgaW50ZXJmYWNlIFNpbXBsZVNlcnZlciBleHRlbmRzIFJlbW90ZSB7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyBzb3VyY2UpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvaGFuZGxlci9lamIvU2ltcGxlU2VydmVySW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9oYW5kbGVyL2VqYi9TaW1wbGVTZXJ2ZXJJbXBsLmphdmEKaW5kZXggYjM0Y2U1MS4uOTdlZDJjNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9oYW5kbGVyL2VqYi9TaW1wbGVTZXJ2ZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9oYW5kbGVyL2VqYi9TaW1wbGVTZXJ2ZXJJbXBsLmphdmEKQEAgLTIyLDIzICsyMiwyMyBAQAogCiBwdWJsaWMgY2xhc3MgU2ltcGxlU2VydmVySW1wbCBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKICAgICBTZXNzaW9uQ29udGV4dCBzYzsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIGhlbGxvKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuICJzYWx1dCAiICsgaGVsbG87CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVTZXJ2ZXI6OjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZVNlcnZlcjo6OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KLSAgICAKKwogICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQorCiAgICAgICAgIHRoaXMuc2MgPSBzYzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30gICAKKworICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby1lamIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLWVqYi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDRmOWNjNGMuLjgzZWI3MTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLWVqYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLWVqYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqYXhycGMtaGVsbG8tZWpiIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpAQCAtMzAsMTEgKzMwLDExIEBACiA8cHJvcGVydHkgbmFtZT0id2Vic2VydmljZXMueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWJzZXJ2aWNlcy54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIgotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby1lamIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8tZWpiL2J1aWxkLnhtbAppbmRleCBjMGM4YzI3Li5hNWJlNmVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby1lamIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLWVqYi9idWlsZC54bWwKQEAgLTU2LDggKzU2LDggQEAKICAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmVhcn0vJHtlamJqYXIuZmlsZX0iIC8+CiAgICAgIDxkZWxldGUgZGlyPSIke2Fzc2VtYmxlLmVhcn0vTUVUQS1JTkYiIC8+CiAgICAgIDxjb3B5IHRvZGlyPSIke2Fzc2VtYmxlLmVhcn0iPgotICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkfS8iIAotICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9IioqLyouY2xhc3MiIAorICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkfS8iCisgICAgICAgICAgICAgICAgICBpbmNsdWRlcz0iKiovKi5jbGFzcyIKICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVzPSIqKi8qQ2xpZW50LmNsYXNzLCAqKi8qLndzZGwsICoqLyptYXBwaW5nLnhtbCIvPgogICAgICA8L2NvcHk+CiAgICAgIDxjb3B5IGZpbGU9IiR7YnVpbGR9L015SGVsbG9TZXJ2aWNlLndzZGwiIHRvZGlyPSIke2Fzc2VtYmxlLmVhcn0vTUVUQS1JTkYvd3NkbCIgLz4KQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgPGNvcHkgZmlsZT0id2Vic2VydmljZXMueG1sIiB0b2Rpcj0iJHthc3NlbWJsZS5lYXJ9L01FVEEtSU5GIiAvPgogICAgICA8Y29weSBmaWxlPSJlamItamFyLnhtbCIgdG9kaXI9IiR7YXNzZW1ibGUuZWFyfS9NRVRBLUlORiIgLz4KICAgICAgPGNvcHkgZmlsZT0ic3VuLWVqYi1qYXIueG1sIiB0b2Rpcj0iJHthc3NlbWJsZS5lYXJ9L01FVEEtSU5GIiAvPgotICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmVhcn0vJHtlamJqYXIuZmlsZX0iIAorICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmVhcn0vJHtlamJqYXIuZmlsZX0iCiAgICAgICAgICAgID4KICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZWFyfSIgaW5jbHVkZXM9Ik1FVEEtSU5GLyoqLCBidWlsZC8qKixoZWxsb3NlcnZpY2UvKioiIC8+CiAgICAgIDwvamFyPgpAQCAtNzgsNyArNzgsNyBAQAogCiAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWVhciIgZGVwZW5kcz0iY3JlYXRlLWVqYi1qYXIiCiAgICAgIGRlc2NyaXB0aW9uPSJFeGVjdXRlcyB0aGUgdGFyZ2V0cyBuZWVkZWQgdG8gY3JlYXRlIHRoZSBlamIgamFyLiI+Ci0gICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZWFyfS8ke2Vhci5maWxlfSIgCisgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZWFyfS8ke2Vhci5maWxlfSIKICAgICAgICAgICAgPgogICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5lYXJ9IiBpbmNsdWRlcz0iJHtlamJqYXIuZmlsZX0iIC8+CiAgICAgIDwvamFyPgpAQCAtMTIwLDcgKzEyMCw3IEBACiAKIAogCi0gICAgICAgICAKKwogICAgICAgICAgIDxjb3B5IGZpbGU9ImNsaWVudC1zdW4td2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9zdW4td2ViLnhtbCIvPgogICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L3dzY2xpZW50LndhciIgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50IiBpbmNsdWRlcz0iKioiLz4KQEAgLTE4Myw2ICsxODMsNiBAQAogICAgICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLmhvc3R9IiB2YWx1ZT0iSFRUUF9IT1NUIi8+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAucG9ydH0iIHZhbHVlPSJIVFRQX1BPUlQiLz4KICAgICAgICA8L3RhcmdldD4KLSAgICAKKwogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby1lamIvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby1lamIvY2xpZW50LXdlYi54bWwKaW5kZXggNGMyYjNiMS4uZGNjZmJjMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8tZWpiL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLWVqYi9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby1lamIvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLWVqYi9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IGY5M2ExZDUuLjUwNjIxOGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLWVqYi9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLWVqYi9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC02Myw5ICs2Myw5IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBqYXhycGMgd2ViIFNFUlZJQ0UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiW0hlbGxvIEFsbF0iKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby1lamIvY29uZmlnLWludGVyZmFjZS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby1lamIvY29uZmlnLWludGVyZmFjZS54bWwKaW5kZXggNTQxNjY5MS4uYjEzYTU3NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8tZWpiL2NvbmZpZy1pbnRlcmZhY2UueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLWVqYi9jb25maWctaW50ZXJmYWNlLnhtbApAQCAtMTksMTAgKzE5LDEwIEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDxzZXJ2aWNlIAotICAgICAgbmFtZT0iTXlIZWxsb1NlcnZpY2UiIAotICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46Rm9vIiAKLSAgICAgIHR5cGVOYW1lc3BhY2U9InVybjpGb28iIAorICA8c2VydmljZQorICAgICAgbmFtZT0iTXlIZWxsb1NlcnZpY2UiCisgICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpGb28iCisgICAgICB0eXBlTmFtZXNwYWNlPSJ1cm46Rm9vIgogICAgICAgcGFja2FnZU5hbWU9ImhlbGxvc2VydmljZSI+CiAgICAgICA8aW50ZXJmYWNlIG5hbWU9ImhlbGxvc2VydmljZS5IZWxsb0lGIi8+CiAgIDwvc2VydmljZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLWVqYi9jb25maWctd3NkbC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby1lamIvY29uZmlnLXdzZGwueG1sCmluZGV4IDNkMTQ0MGYuLjBjMWJiYmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLWVqYi9jb25maWctd3NkbC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8tZWpiL2NvbmZpZy13c2RsLnhtbApAQCAtMTgsNyArMTgsNyBAQAogLS0+CiAKIDxjb25maWd1cmF0aW9uCi0gCXhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+CisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+CiAgIDx3c2RsIGxvY2F0aW9uPSJidWlsZC9NeUhlbGxvU2VydmljZS53c2RsIgogICAgICAgIHBhY2thZ2VOYW1lPSJoZWxsb3NlcnZpY2UiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLWVqYi93ZWJjbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby1lamIvd2ViY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGI2ZTI3ODQuLjU1OWZkYmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLWVqYi93ZWJjbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8tZWpiL3dlYmNsaWVudC9DbGllbnQuamF2YQpAQCAtMzEsOCArMzEsOCBAQAogcHVibGljIGNsYXNzIENsaWVudCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby13ZWIvYnVpbGQucHJvcGVydGllcwppbmRleCBmZmY4ZmFjLi43OWNlNDBkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby13ZWIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby13ZWIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamF4cnBjLWhlbGxvLXdlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KQEAgLTMwLDExICszMCwxMSBAQAogPHByb3BlcnR5IG5hbWU9IndlYnNlcnZpY2VzLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2Vic2VydmljZXMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIgotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIgotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLXdlYi9idWlsZC54bWwKaW5kZXggOGVmZWMyYi4uNDQ4Nzg1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby13ZWIvYnVpbGQueG1sCkBAIC01MSwyMiArNTEsMjIgQEAKICAgICA8L3BhdGg+CiAKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLGRlcGxveSxhc3NlbWJsZS1jbGllbnQsZGVwbG95LWNsaWVudCxydW50ZXN0LHVuZGVwbG95Ii8+Ci0gIAorCiAKICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtd2FyIiBkZXNjcmlwdGlvbj0iUGFja2FnZXMgdGhlIFdBUiBmaWxlIj4KICAgICAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgdGhlIFdBUi4uLi4iLz4KICAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLndhcn0vJHt3YXIuZmlsZX0iIC8+CiAgICAgIDxkZWxldGUgZGlyPSIke2Fzc2VtYmxlLndhcn0vV0VCLUlORiIgLz4KICAgICAgPGNvcHkgdG9kaXI9IiR7YXNzZW1ibGUud2FyfS9XRUItSU5GL2NsYXNzZXMvIj4KLSAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZH0vIiAKLSAgICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIqKi8qLmNsYXNzIiAKKyAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZH0vIgorICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9IioqLyouY2xhc3MiCiAgICAgICAgICAgICAgICAgICBleGNsdWRlcz0iKiovKkNsaWVudC5jbGFzcywgKiovKi53c2RsLCAqKi8qbWFwcGluZy54bWwiLz4KICAgICAgPC9jb3B5PgogICAgICA8Y29weSBmaWxlPSIke2J1aWxkfS9NeUhlbGxvU2VydmljZS53c2RsIiB0b2Rpcj0iJHthc3NlbWJsZS53YXJ9L1dFQi1JTkYvd3NkbCIgLz4KICAgICAgPGNvcHkgZmlsZT0iJHtidWlsZH0vbWFwcGluZy54bWwiIHRvZGlyPSIke2Fzc2VtYmxlLndhcn0vJHtidWlsZH0vIiAvPgogICAgICA8Y29weSBmaWxlPSJzdW4td2ViLnhtbCIgdG9kaXI9IiR7YXNzZW1ibGUud2FyfS9XRUItSU5GIiAvPgogICAgICA8Y29weSBmaWxlPSJ3ZWJzZXJ2aWNlcy54bWwiIHRvZGlyPSIke2Fzc2VtYmxlLndhcn0vV0VCLUlORiIgLz4KLSAgICAgPHdhciBkZXN0ZmlsZT0iJHthc3NlbWJsZS53YXJ9LyR7d2FyLmZpbGV9IiAKKyAgICAgPHdhciBkZXN0ZmlsZT0iJHthc3NlbWJsZS53YXJ9LyR7d2FyLmZpbGV9IgogICAgICAgICAgIHdlYnhtbD0iLi93ZWIueG1sIiBmaWxlc29ubHk9InRydWUiID4KICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUud2FyfSIgaW5jbHVkZXM9IldFQi1JTkYvKiosIGJ1aWxkLyoqIiAvPgogICAgICA8L3dhcj4KQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICA8YXJnIGxpbmU9IiR7d2FybmFtZX0iLz4KICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KLSAKKwogCiAgPCEtLSA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWNsaWVudCIgZGVwZW5kcz0iYnVpbGQtc3RhdGljIgogICAgICBkZXNjcmlwdGlvbj0iRXhlY3V0ZXMgdGhlIHRhcmdldHMgbmVlZGVkIHRvIGJ1aWxkIGEgc3RhdGljIHN0dWIgY2xpZW50LiI+CkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIi8+Ci0gICAgPGNvcHkgZmlsZT0iJHthc3NlbWJsZS53YXJ9L1dFQi1JTkYvd3NkbC9NeUhlbGxvU2VydmljZS53c2RsIiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIvPiAgICAKKyAgICA8Y29weSBmaWxlPSIke2Fzc2VtYmxlLndhcn0vV0VCLUlORi93c2RsL015SGVsbG9TZXJ2aWNlLndzZGwiIHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIi8+CiAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiI+CkBAIC0yMDEsNyArMjAxLDcgQEAKICAgICAgICAgIDwvdGFyZ2V0PgogCiAgICAgICAgPHRhcmdldCAgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9InVuZGVwbG95LXdhcjEsdW5kZXBsb3ktY2xpZW50Ii8+Ci0gICAgCisKICAgICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby13ZWIvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby13ZWIvY2xpZW50LXdlYi54bWwKaW5kZXggNGMyYjNiMS4uZGNjZmJjMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLXdlYi9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby13ZWIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA5MGM1ZjZlLi45Y2U1NDNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby13ZWIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLXdlYi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMxLDMwICszMSwzMCBAQAogCiAgLyogICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImpheHJwYy1oZWxsby13ZWItY2xpZW50Iik7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJqYXhycGMtaGVsbG8td2ViLWNsaWVudCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7Ci0gICAgCXRyeSB7Ci0gICAgICAgICAgICAKKyAgICAgICAgdHJ5IHsKKwogICAgICAgICAgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9IGFyZ3NbMF07CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKICAgICAgICAgICAgIE15SGVsbG9TZXJ2aWNlIG15SGVsbG9TZXJ2aWNlID0KICAgICAgICAgICAgICAgICAoTXlIZWxsb1NlcnZpY2UpIGljLmxvb2t1cCgKICAgICAgICAgICAgICAgICAgICAgImphdmE6Y29tcC9lbnYvc2VydmljZS9oZWxsb3NlcnZpY2UiKTsKLSAKKwogICAgICAgICAgICBIZWxsb0lGIGhlbGxvUG9ydCA9IG15SGVsbG9TZXJ2aWNlLmdldEhlbGxvSUZQb3J0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIAorCisKICAgICAgICAgICAgICgoU3R1YiloZWxsb1BvcnQpLl9zZXRQcm9wZXJ0eShTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCiAgICAgICAgICAgICAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlbmRwb2ludCBhZGRyZXNzID0gIiArIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludm9jYXRpb24gcmV0dXJuZWQgIiArIGhlbGxvUG9ydC5zYXlIZWxsbygiQWxsIikpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLXdlYi9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggMjAyOWFkYi4uZDFiZjM1NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTYzLDkgKzYzLDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIGpheHJwYyB3ZWIgU0VSVklDRSBJUyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJbSGVsbG8gQWxsXSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLXdlYi9jb25maWctaW50ZXJmYWNlLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLXdlYi9jb25maWctaW50ZXJmYWNlLnhtbAppbmRleCA1NDE2NjkxLi5iMTNhNTc1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby13ZWIvY29uZmlnLWludGVyZmFjZS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2NvbmZpZy1pbnRlcmZhY2UueG1sCkBAIC0xOSwxMCArMTksMTAgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHNlcnZpY2UgCi0gICAgICBuYW1lPSJNeUhlbGxvU2VydmljZSIgCi0gICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpGb28iIAotICAgICAgdHlwZU5hbWVzcGFjZT0idXJuOkZvbyIgCisgIDxzZXJ2aWNlCisgICAgICBuYW1lPSJNeUhlbGxvU2VydmljZSIKKyAgICAgIHRhcmdldE5hbWVzcGFjZT0idXJuOkZvbyIKKyAgICAgIHR5cGVOYW1lc3BhY2U9InVybjpGb28iCiAgICAgICBwYWNrYWdlTmFtZT0iaGVsbG9zZXJ2aWNlIj4KICAgICAgIDxpbnRlcmZhY2UgbmFtZT0iaGVsbG9zZXJ2aWNlLkhlbGxvSUYiLz4KICAgPC9zZXJ2aWNlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2NvbmZpZy13c2RsLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLXdlYi9jb25maWctd3NkbC54bWwKaW5kZXggM2QxNDQwZi4uMGMxYmJiYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2NvbmZpZy13c2RsLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby13ZWIvY29uZmlnLXdzZGwueG1sCkBAIC0xOCw3ICsxOCw3IEBACiAtLT4KIAogPGNvbmZpZ3VyYXRpb24KLSAJeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KICAgPHdzZGwgbG9jYXRpb249ImJ1aWxkL015SGVsbG9TZXJ2aWNlLndzZGwiCiAgICAgICAgcGFja2FnZU5hbWU9ImhlbGxvc2VydmljZSIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLXdlYi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKaW5kZXggZWI5ZTk3ZC4uNDA4MzY0MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby13ZWIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC0yNCwxMSArMjQsMTEgQEAKICAgICA8ZGVzY3JpcHRpb24+c2ltcGxlIGpheHJwYyBzZXJ2aWNlIHJlZjwvZGVzY3JpcHRpb24+CiAgICAgPHNlcnZpY2UtcmVmLW5hbWU+c2VydmljZS9oZWxsb3NlcnZpY2U8L3NlcnZpY2UtcmVmLW5hbWU+CiAgICAgPHNlcnZpY2UtaW50ZXJmYWNlPmphdmF4LnhtbC5ycGMuU2VydmljZTwvc2VydmljZS1pbnRlcmZhY2U+Ci0gICAgPHdzZGwtZmlsZT5NRVRBLUlORi93c2RsL015SGVsbG9TZXJ2aWNlLndzZGw8L3dzZGwtZmlsZT4gICAgCisgICAgPHdzZGwtZmlsZT5NRVRBLUlORi93c2RsL015SGVsbG9TZXJ2aWNlLndzZGw8L3dzZGwtZmlsZT4KICAgICA8amF4cnBjLW1hcHBpbmctZmlsZT5tYXBwaW5nLnhtbDwvamF4cnBjLW1hcHBpbmctZmlsZT4KLSAgICA8c2VydmljZS1xbmFtZSB4bWxuczpzZXJ2aWNlbnM9InVybjpGb28iPnNlcnZpY2VuczpIZWxsb0lGPC9zZXJ2aWNlLXFuYW1lPiAgICAgICAgICAgICAgIAorICAgIDxzZXJ2aWNlLXFuYW1lIHhtbG5zOnNlcnZpY2Vucz0idXJuOkZvbyI+c2VydmljZW5zOkhlbGxvSUY8L3NlcnZpY2UtcW5hbWU+CiAgICAgPHBvcnQtY29tcG9uZW50LXJlZj4KICAgICAgIDxzZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT5oZWxsb3NlcnZpY2UuSGVsbG9JRjwvc2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+Ci0gICAgPC9wb3J0LWNvbXBvbmVudC1yZWY+ICAgICAgICAgIAorICAgIDwvcG9ydC1jb21wb25lbnQtcmVmPgogICA8L3NlcnZpY2UtcmVmPgogPC9hcHBsaWNhdGlvbi1jbGllbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby13ZWIvd2ViY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL3dlYmNsaWVudC9DbGllbnQuamF2YQppbmRleCBjNzEyZWZlLi40ZTEyYWZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby13ZWIvd2ViY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLXdlYi93ZWJjbGllbnQvQ2xpZW50LmphdmEKQEAgLTMxLDggKzMxLDggQEAKIHB1YmxpYyBjbGFzcyBDbGllbnQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9iY19jb25zdW1lcl9zZV9wcm92aWRlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggN2RkYTk4NC4uMDkxODA2ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iYmFyZV9kb2NfbGl0ZXJhbC1iY19jb25zdW1lcl9zZV9wcm92aWRlciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iamJpLWNvbXBvbmVudC1zdS1hc3NlbWJseSIgdmFsdWU9IndlYl9jYWxjdWxhdG9yX2NvbnN1bWVyX2Fzc2VtYmx5Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1aWxkLnhtbAppbmRleCAyZTU4NjExLi5mNTkxNmFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9iY19jb25zdW1lcl9zZV9wcm92aWRlci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICAmamF4d3NUb29sczsKICAgICAmamJpY29tbW9uOwogICAgICZqYmlwcm9wZXJ0aWVzOwotICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbiwgc2V0dXAsIHJ1bnRlc3QsdW5kZXBsb3kiLz4gCisgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLCBzZXR1cCwgcnVudGVzdCx1bmRlcGxveSIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9iY19jb25zdW1lcl9zZV9wcm92aWRlci9jbGllbnQvU09BUFdlYkNvbnN1bWVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvY2xpZW50L1NPQVBXZWJDb25zdW1lci5qYXZhCmluZGV4IDQ0OTg0MGIuLjZiOGU0NTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9iY19jb25zdW1lcl9zZV9wcm92aWRlci9jbGllbnQvU09BUFdlYkNvbnN1bWVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2NsaWVudC9TT0FQV2ViQ29uc3VtZXIuamF2YQpAQCAtMjgsNDEgKzI4LDQxIEBACiAgICAgc3RhdGljIENhbGN1bGF0b3JTZXJ2aWNlIHNlcnZpY2U7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIiOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9iY19jb25zdW1lcl9zZV9wcm92aWRlciI7CiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0SWQpOwotCVNPQVBXZWJDb25zdW1lciBjbGllbnQgPSBuZXcgU09BUFdlYkNvbnN1bWVyKCk7Ci0JY2xpZW50LmFkZFVzaW5nU09BUENvbnN1bWVyKCk7CisgICAgU09BUFdlYkNvbnN1bWVyIGNsaWVudCA9IG5ldyBTT0FQV2ViQ29uc3VtZXIoKTsKKyAgICBjbGllbnQuYWRkVXNpbmdTT0FQQ29uc3VtZXIoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdElkKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgYWRkVXNpbmdTT0FQQ29uc3VtZXIoKSB7Ci0JY29tLmV4YW1wbGUuY2FsY3VsYXRvci5DYWxjdWxhdG9yIHBvcnQ9IG51bGw7Ci0JdHJ5IHsKKyAgICBjb20uZXhhbXBsZS5jYWxjdWxhdG9yLkNhbGN1bGF0b3IgcG9ydD0gbnVsbDsKKyAgICB0cnkgewogCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGNyZWF0aW5nIENhbGN1bGF0b3JTZXJ2aWNlIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGNyZWF0aW5nIENhbGN1bGF0b3JTZXJ2aWNlIik7CiAKICAgICAgICAgICAgICAgICBwb3J0ID0gc2VydmljZS5nZXRDYWxjdWxhdG9yUG9ydCgpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBnZXR0aW5nIHBvcnQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgZ2V0dGluZyBwb3J0Iik7CiAKLQkJLy8gR2V0IFN0dWIKLQkJQmluZGluZ1Byb3ZpZGVyIHN0dWIgPSAoQmluZGluZ1Byb3ZpZGVyKXBvcnQ7Ci0JCVN0cmluZyBlbmRwb2ludFVSSSA9Imh0dHA6Ly9sb2NhbGhvc3Q6MTIwMTEvY2FsY3VsYXRvcmVuZHBvaW50IjsKLQkJc3R1Yi5nZXRSZXF1ZXN0Q29udGV4dCgpLnB1dChCaW5kaW5nUHJvdmlkZXIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKLQkJICAgICAgZW5kcG9pbnRVUkkpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBzZXR0aW5nIGVuZHBvaW50IGFkZHJlc3MgVVJJIik7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBVc2luZyBTT0FQIGJpbmRpbmcncyBjb25zdW1lciB0byBhZGQgNTAwICsgNTAgPSAiICsgcG9ydC5hZGQoNTApKTsKLQkgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5QQVNTKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgTm8gRXhjZXB0aW9uIHRocm93biIpOworICAgICAgICAvLyBHZXQgU3R1YgorICAgICAgICBCaW5kaW5nUHJvdmlkZXIgc3R1YiA9IChCaW5kaW5nUHJvdmlkZXIpcG9ydDsKKyAgICAgICAgU3RyaW5nIGVuZHBvaW50VVJJID0iaHR0cDovL2xvY2FsaG9zdDoxMjAxMS9jYWxjdWxhdG9yZW5kcG9pbnQiOworICAgICAgICBzdHViLmdldFJlcXVlc3RDb250ZXh0KCkucHV0KEJpbmRpbmdQcm92aWRlci5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAorICAgICAgICAgICAgICBlbmRwb2ludFVSSSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIHNldHRpbmcgZW5kcG9pbnQgYWRkcmVzcyBVUkkiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFVzaW5nIFNPQVAgYmluZGluZydzIGNvbnN1bWVyIHRvIGFkZCA1MDAgKyA1MCA9ICIgKyBwb3J0LmFkZCg1MCkpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LlBBU1MpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBObyBFeGNlcHRpb24gdGhyb3duIik7CiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCS8vZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJaWYoZSBpbnN0YW5jZW9mIGpha2FydGEueG1sLndzLnNvYXAuU09BUEZhdWx0RXhjZXB0aW9uKSAKLSAgICAgICAgICAgICAgICAJc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwotCQllbHNlIHsKLQkgICAgICAgIAlzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBTT0FQRmF1bHRFeGNlcHRpb24gTm90IHRocm93biIpOwotCQl9Ci0JfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgLy9lLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBpZihlIGluc3RhbmNlb2YgamFrYXJ0YS54bWwud3Muc29hcC5TT0FQRmF1bHRFeGNlcHRpb24pCisgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgU09BUEZhdWx0RXhjZXB0aW9uIE5vdCB0aHJvd24iKTsKKyAgICAgICAgfQorICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQppbmRleCBhNGRhMDdkLi4zNGM5MjYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9iY19jb25zdW1lcl9zZV9wcm92aWRlci9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKQEAgLTI2LDE2ICsyNiwxNiBAQAogKQogQFNPQVBCaW5kaW5nKHBhcmFtZXRlclN0eWxlID0gU09BUEJpbmRpbmcuUGFyYW1ldGVyU3R5bGUuQkFSRSkKIHB1YmxpYyBjbGFzcyBDYWxjdWxhdG9yIHsKLQlwdWJsaWMgQ2FsY3VsYXRvcigpIHt9CisgICAgcHVibGljIENhbGN1bGF0b3IoKSB7fQogCi0JQFdlYk1ldGhvZAotCXB1YmxpYyBpbnQgYWRkKAotCQkJQFdlYlBhcmFtKG5hbWUgPSAibnVtYmVyMSIsIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vZXhhbXBsZS5jb20vQ2FsY3VsYXRvciIsIHBhcnROYW1lID0gInBhcnQxIikKLQkJCWludCBqCi0JCQkpIHRocm93cyBFeGNlcHRpb24gewotCQkJCWludCBpID0gNTAwOworICAgIEBXZWJNZXRob2QKKyAgICBwdWJsaWMgaW50IGFkZCgKKyAgICAgICAgICAgIEBXZWJQYXJhbShuYW1lID0gIm51bWJlcjEiLCB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL2V4YW1wbGUuY29tL0NhbGN1bGF0b3IiLCBwYXJ0TmFtZSA9ICJwYXJ0MSIpCisgICAgICAgICAgICBpbnQgagorICAgICAgICAgICAgKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICBpbnQgaSA9IDUwMDsKICAgICAgICAgICAgICAgICBpbnQgayA9IGkgK2ogOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSkJJIFRlc3QgOjogYmFyZS1ycGMtbGl0ZXJhbCBiY19jb25zdW1lcl9zZV9wcm92aWRlciA6ICIgKyBpICsgIisiICsgaiArIiA9ICIgKyBrKTsKLQkJcmV0dXJuIGs7Ci0JfQorICAgICAgICByZXR1cm4gazsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCBiNGRhOTg2Li40MzM3OGUyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9iY19jb25zdW1lcl9zZV9wcm92aWRlci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKQEAgLTE5LDkgKzE5LDkgQEAKIAogPCEtLSBqYmkueG1sIGZpbGUgZm9yIHRoZSBTT0FQIGJpbmRpbmcgZGVwbG95bWVudHMgYmluZGluZy4gLS0+CiA8amJpCi0gICAgdmVyc2lvbj0iMS4wIiAKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICB2ZXJzaW9uPSIxLjAiCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIC4vamJpLnhzZCI+CiAgIDxzZXJ2aWNlLWFzc2VtYmx5PgogICAgIDxpZGVudGlmaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9iY19jb25zdW1lcl9zZV9wcm92aWRlci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDJkMWU3ZTguLjY1Y2E5NmYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9iY19jb25zdW1lcl9zZV9wcm92aWRlci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMTgsMTYgKzE4LDE2IEBACiAtLT4KIAogPGpiaSB2ZXJzaW9uPSIxLjAiCi0JIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotCSB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLSAJIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCi0JIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUuY29tL0NhbGN1bGF0b3IiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CQkKLQkJPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCi0JCQkgIGxpbmstdHlwZT0ic3RhbmRhcmQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIiAKKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICAgIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCisgICAgIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUuY29tL0NhbGN1bGF0b3IiCisgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgorICAgIDxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CisgICAgICAgIDxjb25zdW1lcyBpbnRlcmZhY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIgorICAgICAgICAgICAgICBsaW5rLXR5cGU9InN0YW5kYXJkIgorICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtbmFtZT0iQ2FsY3VsYXRvclBvcnQiLz4KICAgICAgICAgPGphdmFlc2I6YXJ0aWZhY3RzdHlwZT5XU0RMMTE8L2phdmFlc2I6YXJ0aWZhY3RzdHlwZT4KLQk8L3NlcnZpY2VzPgorICAgIDwvc2VydmljZXM+CiA8L2piaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9iY19jb25zdW1lcl9zZV9wcm92aWRlci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3dlYi54bWwKaW5kZXggMDdlMTQ3Ny4uNzk4YzY5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVpbGQucHJvcGVydGllcwppbmRleCAzMDgxMTk1Li5hNTBhYzg5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJiYXJlX2RvY19saXRlcmFsLXNlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVpbGQueG1sCmluZGV4IDhjNzE1ZjEuLjRmNDZmNjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1aWxkLnhtbApAQCAtMzgsOSArMzgsOSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KLQkgIDxkZWxldGUgZmlsZT0iJHtqYmktY29tcG9uZW50LXN1LWRpcn0vYXNzZW1ibHkvJHthcHBuYW1lfS13ZWIud2FyIi8+Ci0JICA8ZGVsZXRlIGZpbGU9IiR7YmFzZWRpcn0vUmVwUnVuQ29uZi50eHQiLz4KLQkgIDxkZWxldGUgZGlyPSIke2Jhc2VkaXJ9L2NvbW1vbjplbmRwb2ludCIvPgorICAgICAgPGRlbGV0ZSBmaWxlPSIke2piaS1jb21wb25lbnQtc3UtZGlyfS9hc3NlbWJseS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KKyAgICAgIDxkZWxldGUgZmlsZT0iJHtiYXNlZGlyfS9SZXBSdW5Db25mLnR4dCIvPgorICAgICAgPGRlbGV0ZSBkaXI9IiR7YmFzZWRpcn0vY29tbW9uOmVuZHBvaW50Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJjbGVhbiwgYXNzZW1ibGUtd2ViLCBkZXBsb3ktYXBwLGFzc2VtYmxlLWNsaWVudCxkZXBsb3ktY2xpZW50Ii8+CkBAIC01Miw4ICs1Miw4IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLXdlYiIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNvbXBpbGUiPgotCSAgPGVjaG8gbWVzc2FnZT0iY2xhc3NlcyBkaXIgPSAke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotCSAgPGVjaG8gbWVzc2FnZT0iYXNzZW1ibGUuZGlyID0gJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgorICAgICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NlcyBkaXIgPSAke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgorICAgICAgPGVjaG8gbWVzc2FnZT0iYXNzZW1ibGUuZGlyID0gJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwa2ctd2FyIj4KICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgpAQCAtNjksNyArNjksNyBAQAogICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMgaHR0cDovL2xvY2FsaG9zdDo4MDgwL2JhcmVfZG9jX2xpdGVyYWwtc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZT9XU0RMIi8+CiAgICAgPC9hbnRjYWxsPgogICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyIKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXIiIAorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjb21tb24vKiosIHdlYmNsaWVudC8qKiIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jbGllbnQtd2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi93ZWIueG1sIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC1zdW4td2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9zdW4td2ViLnhtbCIvPgpAQCAtMTI1LDExICsxMjUsMTEgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1hcHAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNvbW1vbi8qKiwgY2xpZW50LyoqIi8+CiAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5UZXN0Q2xpZW50Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9jbGllbnQtd2ViLnhtbAppbmRleCBlZWI3MzBkLi43OTViMDUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggMDc2YzE3Zi4uYmFiNjNmZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlciI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyIjsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24odGVzdElkKTsKQEAgLTQ1LDggKzQ1LDggQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGZhaWwoKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTU3LDE1ICs1NywxNSBAQAogICAgICAgICBpbnQgY29kZSA9IGMxLmdldFJlc3BvbnNlQ29kZSgpOwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKLQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwotCQlib29sZWFuIGZvdW5kID0gZmFsc2U7CisgICAgICAgIGJvb2xlYW4gZm91bmQgPSBmYWxzZTsKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewotCQkJaWYobGluZS5pbmRleE9mKCJTVUNDRVNTIikgIT0gLTEpIGZvdW5kID0gdHJ1ZTsJCi0JCQlidWZmZXIuYXBwZW5kKGxpbmUgKyAiXG4iKTsKKyAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU1VDQ0VTUyIpICE9IC0xKSBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGxpbmUgKyAiXG4iKTsKICAgICAgICAgfQogICAgICAgICBsb2coYnVmZmVyLnRvU3RyaW5nKCkpOwotCSAgICBpZighZm91bmQpIHJldHVybiA1MDU7CQorICAgICAgICBpZighZm91bmQpIHJldHVybiA1MDU7CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2NvbW1vbi9JbmNvbWVUYXhEZXRhaWxzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvY29tbW9uL0luY29tZVRheERldGFpbHMuamF2YQppbmRleCA1N2IwMGU4Li4zNTBiMTZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvY29tbW9uL0luY29tZVRheERldGFpbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvY29tbW9uL0luY29tZVRheERldGFpbHMuamF2YQpAQCAtMTcsMTAgKzE3LDEwIEBACiBwYWNrYWdlIGNvbW1vbjsKIAogcHVibGljIGNsYXNzIEluY29tZVRheERldGFpbHMgewotCXB1YmxpYyBTdHJpbmcgZmlyc3ROYW1lOwotCXB1YmxpYyBTdHJpbmcgbGFzdE5hbWU7Ci0JcHVibGljIFN0cmluZyBzdGF0dXM7IC8vIHNhbGFyaWVkLCBzZWxmLWVtcGxveWVkLCBzdHVkZW50LgotCXB1YmxpYyBsb25nIGFubnVhbEluY29tZTsKKyAgICBwdWJsaWMgU3RyaW5nIGZpcnN0TmFtZTsKKyAgICBwdWJsaWMgU3RyaW5nIGxhc3ROYW1lOworICAgIHB1YmxpYyBTdHJpbmcgc3RhdHVzOyAvLyBzYWxhcmllZCwgc2VsZi1lbXBsb3llZCwgc3R1ZGVudC4KKyAgICBwdWJsaWMgbG9uZyBhbm51YWxJbmNvbWU7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKaW5kZXggZmQ1MzcyNi4uMGY3ZmRjZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCkBAIC0yOCwyMCArMjgsMjAgQEAKICkKIEBTT0FQQmluZGluZyhwYXJhbWV0ZXJTdHlsZSA9IFNPQVBCaW5kaW5nLlBhcmFtZXRlclN0eWxlLkJBUkUpCiBwdWJsaWMgY2xhc3MgQ2FsY3VsYXRvciB7Ci0JcHVibGljIENhbGN1bGF0b3IoKSB7fQorICAgIHB1YmxpYyBDYWxjdWxhdG9yKCkge30KIAotCUBXZWJNZXRob2QKLQlwdWJsaWMgaW50IGFkZCgKLQkJCS8qCi0JCQlAV2ViUGFyYW0obmFtZSA9ICJudW1iZXIxIiwgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3IiLCBwYXJ0TmFtZSA9ICJwYXJ0MSIpCi0JCQlpbnQgaSAsICovCi0JCQlAV2ViUGFyYW0obmFtZSA9ICJudW1iZXIyIiwgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3IiLCBwYXJ0TmFtZSA9ICJwYXJ0MiIpCi0JCQlpbnQgagotCQkJKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCQlpbnQgaSA9IDUwOworICAgIEBXZWJNZXRob2QKKyAgICBwdWJsaWMgaW50IGFkZCgKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICBAV2ViUGFyYW0obmFtZSA9ICJudW1iZXIxIiwgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3IiLCBwYXJ0TmFtZSA9ICJwYXJ0MSIpCisgICAgICAgICAgICBpbnQgaSAsICovCisgICAgICAgICAgICBAV2ViUGFyYW0obmFtZSA9ICJudW1iZXIyIiwgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3IiLCBwYXJ0TmFtZSA9ICJwYXJ0MiIpCisgICAgICAgICAgICBpbnQgagorICAgICAgICAgICAgKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICBpbnQgaSA9IDUwOwogICAgICAgICAgICAgICAgIGludCBrID0gaSAraiA7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKQkkgVGVzdCA6OiBiYXJlLXJwYy1saXRlcmFsIHNlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyIDogIiArIGkgKyAiKyIgKyBqICsiID0gIiArIGspOwotCQlyZXR1cm4gazsKLQl9CisgICAgICAgIHJldHVybiBrOworICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvd2ViLnhtbAppbmRleCAwN2UxNDc3Li43OThjNjliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGM2YWJkM2MuLjFjNDg2YmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMCwzOCArMzAsMzggQEAKIAogICAgICAgIEBXZWJTZXJ2aWNlUmVmKG5hbWU9InN1bi13ZWIuc2VydmljZXJlZi9jYWxjdWxhdG9yIikgQ2FsY3VsYXRvclNlcnZpY2Ugc2VydmljZTsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQogICAgICAgICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewotCSAgICBQcmludFdyaXRlciBvdXQ9bnVsbDsKKyAgICAgICAgUHJpbnRXcml0ZXIgb3V0PW51bGw7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFNlcnZpY2UgaXMgOiIgKyBzZXJ2aWNlKTsKICAgICAgICAgICAgICAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKLSAgICAgICAgICAgIAlvdXQgPSByZXNwLmdldFdyaXRlcigpOworICAgICAgICAgICAgICAgIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CiAgICAgICAgICAgICAgICAgQ2FsY3VsYXRvciBwb3J0ID0gc2VydmljZS5nZXRDYWxjdWxhdG9yUG9ydCgpOwogCi0JCWludCBrID0gcG9ydC5hZGQoNTA1KTsKLQkJcHJpbnRTdWNjZXNzKCJTVUNDRVNTIDo6IFN1bSBvZiA1MDUgYW5kIDUwIGlzIDogIiwgb3V0LGspOworICAgICAgICBpbnQgayA9IHBvcnQuYWRkKDUwNSk7CisgICAgICAgIHByaW50U3VjY2VzcygiU1VDQ0VTUyA6OiBTdW0gb2YgNTA1IGFuZCA1MCBpcyA6ICIsIG91dCxrKTsKIAogCiAgICAgICAgICAgICB9IGNhdGNoKGphdmEubGFuZy5FeGNlcHRpb24gZSkgewotCQkvL2UucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIAlwcmludEZhaWx1cmUob3V0LCBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIC8vZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIHByaW50RmFpbHVyZShvdXQsIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0JCWlmKG91dCAhPSBudWxsKSB7CisgICAgICAgIGlmKG91dCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIG91dC5mbHVzaCgpOwogICAgICAgICAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKLQkJfQotCSAgICB9CisgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIHByaW50RmFpbHVyZShQcmludFdyaXRlciBvdXQsIFN0cmluZyBlcnJNc2cpIHsKLQkJaWYob3V0ID09IG51bGwpIHJldHVybjsKLQkJb3V0LnByaW50bG4oIjxodG1sPiIpOworICAgICAgICBpZihvdXQgPT0gbnVsbCkgcmV0dXJuOworICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+VGVzdFNlcnZsZXQ8L3RpdGxlPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CkBAIC03NCwxMyArNzQsMTMgQEAKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBwcmludFN1Y2Nlc3MoU3RyaW5nIG1lc3NhZ2UsIFByaW50V3JpdGVyIG91dCwgbG9uZyByZXN1bHQpIHsKLQkJaWYob3V0ID09IG51bGwpIHJldHVybjsKKyAgICAgICAgaWYob3V0ID09IG51bGwpIHJldHVybjsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiXG5cbiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKG1lc3NhZ2UgKyByZXN1bHQpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIHByaW50U3VjY2VzcyhTdHJpbmcgbWVzc2FnZSwgUHJpbnRXcml0ZXIgb3V0LCBTdHJpbmcgcmVzdWx0KSB7Ci0JCWlmKG91dCA9PSBudWxsKSByZXR1cm47CisgICAgICAgIGlmKG91dCA9PSBudWxsKSByZXR1cm47CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIlxuXG4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbihtZXNzYWdlICsgcmVzdWx0KTsKICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYnVpbGQueG1sCmluZGV4IDAwNjBmMDguLjVjZTNjYTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYnVpbGQueG1sCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L3Rlc3RfcmVzdWx0cy54bWwiLz4KICAgICAgICAgPHJlY29yZCBuYW1lPSJqYmktc2VydmljZWVuZ2luZS5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiIC8+CiAgICAgICAgIDxhbnQgZGlyPSJzZXJ2ZXIiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImNsaWVudCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iY2xpZW50IiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0iamF4LXJwYyIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9InNvYXBmYXVsdCIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9Im9uZXdheSIgdGFyZ2V0PSJhbGwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggM2Y4MzAxMC4uZTMwMmQ1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ianNyMjA4LWludGVncmF0aW9uLXdlYi1jbGllbnQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9idWlsZC54bWwKaW5kZXggM2YxY2FjOS4uM2FiYzhiYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvYnVpbGQueG1sCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgICAgICAgICB2YWx1ZT0iLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyBodHRwOi8vbG9jYWxob3N0OjgwODAvanNyMjA4LWludGVncmF0aW9uLXdlYi1jbGllbnQvd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZT9XU0RMIi8+CiAgICAgPC9hbnRjYWxsPgogICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyIKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIgCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0id2ViY2xpZW50LyoqIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3dlYi54bWwiLz4KICAgICAgIDxjb3B5IGZpbGU9Ii4vY2xpZW50LXN1bi13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3N1bi13ZWIueG1sIi8+CkBAIC0xMTAsMTEgKzExMCwxMSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvY2xpZW50LXdlYi54bWwKaW5kZXggZWViNzMwZC4uNzk1YjA1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IGFhZTljYjQuLmRkNGU3MGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIiOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYiI7CiAKICAgICBwdWJsaWMgYm9vbGVhbiBmb3VuZDEgPSBmYWxzZTsKICAgICBwdWJsaWMgYm9vbGVhbiBmb3VuZDIgPSBmYWxzZTsKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTY0LDkgKzY0LDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIENhbGN1bGF0b3IgYWRkIFNFUlZJQ0UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiWzNdIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKaW5kZXggNjk1MTMyMC4uYmVkMWUwZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCkBAIC0yNSwxMyArMjUsMTMgQEAKICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3IiCiApCiBwdWJsaWMgY2xhc3MgQ2FsY3VsYXRvciB7Ci0JcHVibGljIENhbGN1bGF0b3IoKSB7fQorICAgIHB1YmxpYyBDYWxjdWxhdG9yKCkge30KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0iYWRkIiwgYWN0aW9uPSJ1cm46QWRkIikKLQlwdWJsaWMgaW50IGFkZChpbnQgaSwgaW50IGopIHsKKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCisgICAgcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB7CiAgICAgICAgICAgICAgICAgaW50IGsgPSBpICtqIDsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSArICIrIiArIGogKyIgPSAiICsgayk7Ci0gCi0JCXJldHVybiBrOwotCX0KKworICAgICAgICByZXR1cm4gazsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCAzYmM4MGI5Li44MGYyZTVkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKQEAgLTE5LDkgKzE5LDkgQEAKIAogPCEtLSBqYmkueG1sIGZpbGUgZm9yIHRoZSBTT0FQIGJpbmRpbmcgZGVwbG95bWVudHMgYmluZGluZy4gLS0+CiA8amJpCi0gICAgdmVyc2lvbj0iMS4wIiAKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICB2ZXJzaW9uPSIxLjAiCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIC4vamJpLnhzZCI+CiAgIDxzZXJ2aWNlLWFzc2VtYmx5PgogICAgIDxpZGVudGlmaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDMzOTc0ZjkuLjQzM2JkMTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMTgsMTUgKzE4LDE1IEBACiAtLT4KIAogPGpiaSB2ZXJzaW9uPSIxLjAiCi0JIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotCSB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLQkgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKLQkgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9DYWxjdWxhdG9yIgotCSB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KLQk8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgkJCi0JIDxwcm92aWRlcyBpbnRlcmZhY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlSW50ZXJmYWNlIgorICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgICB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgorICAgICB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3IiCisgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgorICAgIDxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CisgICAgIDxwcm92aWRlcyBpbnRlcmZhY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlSW50ZXJmYWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtbmFtZT0iQ2FsY3VsYXRvclBvcnQiLz4KICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RzIHhtbG5zPSIiIHJvbGU9InByb3ZpZGVyIiBmaWxlLW5hbWU9ImVuZHBvaW50cy54bWwiIHR5cGU9InhtbCIvPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL3NvYXAtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL3NvYXAtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCmluZGV4IGQ1ZDlkMDkuLjllNmNmM2UgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9zb2FwLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvc29hcC1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKQEAgLTE5LDkgKzE5LDkgQEAKIAogPCEtLSBqYmkueG1sIGZpbGUgZm9yIHRoZSBTT0FQIGJpbmRpbmcgZGVwbG95bWVudHMgYmluZGluZy4gLS0+CiA8amJpCi0gICAgdmVyc2lvbj0iMS4wIiAKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICB2ZXJzaW9uPSIxLjAiCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIC4vamJpLnhzZCI+CiAgIDxzZXJ2aWNlLWFzc2VtYmx5PgogICAgIDxpZGVudGlmaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9zb2FwLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9zb2FwLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCBlYTIwMjdjLi40ODNjNTU3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvc29hcC1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL3NvYXAtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOCwxNCArMTgsMTQgQEAKIC0tPgogCiA8amJpIHZlcnNpb249IjEuMCIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotCSB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3IiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CQkKLQkJPHByb3ZpZGVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2VJbnRlcmZhY2UiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIiAKKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICAgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9DYWxjdWxhdG9yIgorICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgorICAgICAgICA8cHJvdmlkZXMgaW50ZXJmYWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZUludGVyZmFjZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkNhbGN1bGF0b3JQb3J0Ii8+CiAgICAgICAgICAgICAgICAgPGFydGlmYWN0cyB4bWxucz0iIiByb2xlPSJwcm92aWRlciIgZmlsZS1uYW1lPSJlbmRwb2ludHMueG1sIiB0eXBlPSJ4bWwiLz4KLQk8L3NlcnZpY2VzPgorICAgIDwvc2VydmljZXM+CiA8L2piaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9zb2FwLWJpbmRpbmctc3Uvc3UvZW5kcG9pbnRzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9zb2FwLWJpbmRpbmctc3Uvc3UvZW5kcG9pbnRzLnhtbAppbmRleCAyNDg0NzUyLi5mNjQxNjU1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvc29hcC1iaW5kaW5nLXN1L3N1L2VuZHBvaW50cy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL3NvYXAtYmluZGluZy1zdS9zdS9lbmRwb2ludHMueG1sCkBAIC0yMSwyMiArMjEsMjIgQEAKICAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5zdW4uY29tL25zL2piaS9jb21wb25lbnQvc29hcC9kZXBsb3kgLi9lbmRwb2ludHMueHNkIj4KIDxzZXJ2aWNlLW5hbWU+Ci0JPG5hbWVzcGFjZS11cmk+aHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQ2FsY3VsYXRvcjwvbmFtZXNwYWNlLXVyaT4KLQk8bG9jYWwtcGFydD5DYWxjdWxhdG9yU2VydmljZTwvbG9jYWwtcGFydD4KKyAgICA8bmFtZXNwYWNlLXVyaT5odHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9DYWxjdWxhdG9yPC9uYW1lc3BhY2UtdXJpPgorICAgIDxsb2NhbC1wYXJ0PkNhbGN1bGF0b3JTZXJ2aWNlPC9sb2NhbC1wYXJ0PgogICAgIDwvc2VydmljZS1uYW1lPgogICAgIDxlbmRwb2ludC1uYW1lPkNhbGN1bGF0b3JQb3J0PC9lbmRwb2ludC1uYW1lPgogICAgIDxlbmRwb2ludC1yb2xlPnByb3ZpZGVyPC9lbmRwb2ludC1yb2xlPgotICAgIDxhZGRyZXNzLWxvY2F0aW9uPmh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9qc3IyMDgtaW50ZWdyYXRpb24td2ViLWNsaWVudC93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC9hZGRyZXNzLWxvY2F0aW9uPiAKLSAgICA8c3R5bGU+aHR0cDovL3d3dy53My5vcmcvMjAwNC8wOC93c2RsL3N0eWxlL3JwYzwvc3R5bGU+ICAgICAgICAgICAgIAorICAgIDxhZGRyZXNzLWxvY2F0aW9uPmh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9qc3IyMDgtaW50ZWdyYXRpb24td2ViLWNsaWVudC93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC9hZGRyZXNzLWxvY2F0aW9uPgorICAgIDxzdHlsZT5odHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwvc3R5bGUvcnBjPC9zdHlsZT4KICAgICA8b3BlcmF0aW9uPgogICAgICAgICA8bmFtZT5hZGQ8L25hbWU+Ci0gICAgICAgIDxtZXA+aHR0cDovL3d3dy53My5vcmcvMjAwNC8wOC93c2RsL2luLW91dDwvbWVwPiAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDxtZXA+aHR0cDovL3d3dy53My5vcmcvMjAwNC8wOC93c2RsL2luLW91dDwvbWVwPgogICAgICAgICA8c29hcGFjdGlvbj4iIjwvc29hcGFjdGlvbj4KICAgICAgICAgPGlucHV0PgogICAgICAgICAgIDxuYW1lc3BhY2UtdXJpPmh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3I8L25hbWVzcGFjZS11cmk+CiAgICAgICAgIDwvaW5wdXQ+CiAgICAgICAgIDxvdXRwdXQ+CiAgICAgICAgICAgPG5hbWVzcGFjZS11cmk+aHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQ2FsY3VsYXRvcjwvbmFtZXNwYWNlLXVyaT4KLSAgICAgICAgPC9vdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgPC9vdXRwdXQ+CiAgICAgPC9vcGVyYXRpb24+Ci08L2VuZHBvaW50PiAKKzwvZW5kcG9pbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi93ZWIueG1sCmluZGV4IDA3ZTE0NzcuLjc5OGM2OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZTY1M2Q0Ni4uYjM4Y2E3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDggKzI4LDggQEAKIAogICAgICAgIEBXZWJTZXJ2aWNlUmVmKG5hbWU9InN1bi13ZWIuc2VydmljZXJlZi9jYWxjdWxhdG9yIikgQ2FsY3VsYXRvclNlcnZpY2Ugc2VydmljZTsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQ0MGJlODYuLjg2M2M5M2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqc3IyMDgtaW50ZWdyYXRpb24iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii5jb25zdW1lci8vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9jb25zdW1lci9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvYnVpbGQueG1sCmluZGV4IDRmOGRkMGIuLjc1MjIzNDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9idWlsZC54bWwKQEAgLTU0LDEwICs1NCwxMCBAQAogICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIgogICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKLQlpbmNsdWRlcz0iZW5kcG9pbnQvKioiPgorICAgIGluY2x1ZGVzPSJlbmRwb2ludC8qKiI+CiAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJwcm92aWRlci9lbmRwb2ludCIvPgpAQCAtOTksOCArOTksOCBAQAogICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMgaHR0cDovL2xvY2FsaG9zdDo4MDgwL0hlbGxvRUpCU2VydmljZS9IZWxsb0VKQj9XU0RMIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8amF2YWMgc3JjZGlyPSJjb25zdW1lciIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyIKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIgCi0JICAgIGRlYnVnPSJvbiIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIKKyAgICAgICAgZGVidWc9Im9uIgogICAgICAgICAgICAgaW5jbHVkZXM9IndlYmNsaWVudC8qKiIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jb25zdW1lci9jbGllbnQtd2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi93ZWIueG1sIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NvbnN1bWVyL2NsaWVudC1zdW4td2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9zdW4td2ViLnhtbCIvPgpAQCAtMTc4LDEyICsxNzgsMTIgQEAKICAgICAgICAgPGFyZyBsaW5lPSIke2FwcG5hbWV9LWVqYiIvPgogICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIHRoZSB0ZXN0IGNsaWVudCIvPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNvbnN1bWVyL2NsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9jb25zdW1lci9jbGllbnQtc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9jb25zdW1lci9jbGllbnQtc3VuLXdlYi54bWwKaW5kZXggZDZlODlkYy4uZDRhMGYzZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvY29uc3VtZXIvY2xpZW50LXN1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL2NvbnN1bWVyL2NsaWVudC1zdW4td2ViLnhtbApAQCAtMjYsMTIgKzI2LDEyIEBACiAgICAgPHBvcnQtaW5mbz4KICAgICAgIDxzZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT5lbmRwb2ludC5lamIuSGVsbG88L3NlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPgogICAgICAgPHdzZGwtcG9ydD4KLQk8bmFtZXNwYWNlVVJJPmh0dHA6Ly9lbmRwb2ludC9lamI8L25hbWVzcGFjZVVSST4KLQk8bG9jYWxwYXJ0PkhlbGxvRUpCUG9ydDwvbG9jYWxwYXJ0PgorICAgIDxuYW1lc3BhY2VVUkk+aHR0cDovL2VuZHBvaW50L2VqYjwvbmFtZXNwYWNlVVJJPgorICAgIDxsb2NhbHBhcnQ+SGVsbG9FSkJQb3J0PC9sb2NhbHBhcnQ+CiAgICAgICA8L3dzZGwtcG9ydD4KICAgICAgIDxzdHViLXByb3BlcnR5PgotCTxuYW1lPmpiaS1lbmFibGVkPC9uYW1lPgotCTx2YWx1ZT50cnVlPC92YWx1ZT4KKyAgICA8bmFtZT5qYmktZW5hYmxlZDwvbmFtZT4KKyAgICA8dmFsdWU+dHJ1ZTwvdmFsdWU+CiAgICAgICA8L3N0dWItcHJvcGVydHk+CiAgICAgPC9wb3J0LWluZm8+CiAgICAgPHdzZGwtb3ZlcnJpZGU+aHR0cDovL2xvY2FsaG9zdDo4MDgwL0hlbGxvRUpCU2VydmljZS9IZWxsb0VKQj9XU0RMPC93c2RsLW92ZXJyaWRlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvY29uc3VtZXIvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9jb25zdW1lci9jbGllbnQtd2ViLnhtbAppbmRleCAxMGMzMjk1Li4xOWMxMzFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9jb25zdW1lci9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9jb25zdW1lci9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9jb25zdW1lci9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvY29uc3VtZXIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCAyNzEyODFkLi4xN2JkYjA3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9jb25zdW1lci9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL2NvbnN1bWVyL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTY0LDkgKzY0LDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIENhbGN1bGF0b3IgYWRkIFNFUlZJQ0UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiW1dlYlN2Y1Rlc3QtSGVsbG8gQXBwc2VydmVyIFRlc3RlciAhXSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL2NvbnN1bWVyL2ptcy1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9jb25zdW1lci9qbXMtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCmluZGV4IGQzMjExZjYuLjE2NTgwYzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL2NvbnN1bWVyL2ptcy1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvY29uc3VtZXIvam1zLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbApAQCAtMjIsMTMgKzIyLDEzIEBACiAgICAgdmVyc2lvbj0iMS4wIgogICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCiAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+Ci0gIAorCiAgIDxzZXJ2aWNlLWFzc2VtYmx5PgogICAgIDxpZGVudGlmaWNhdGlvbj4KICAgICAgIDxuYW1lPmNsaWVudF9lamJfY29uc3VtZXJfYXNzZW1ibHk8L25hbWU+CiAgICAgICA8ZGVzY3JpcHRpb24+VGhpcyBpcyBhbiBTQSBmb3IgSk1TIEJpbmRpbmc8L2Rlc2NyaXB0aW9uPgogICAgIDwvaWRlbnRpZmljYXRpb24+Ci0gCisKICAgICA8c2VydmljZS11bml0PgogICAgICAgPGlkZW50aWZpY2F0aW9uPgogICAgICAgICAgPG5hbWU+Y2xpZW50X2VqYl9jb25zdW1lcl9zdTwvbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL2NvbnN1bWVyL2ptcy1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9jb25zdW1lci9qbXMtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCmluZGV4IGExOWNlZGYuLjExZGJkZGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL2NvbnN1bWVyL2ptcy1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvY29uc3VtZXIvam1zLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMjcsNiArMjcsNiBAQAogICAgICAgICAgICAgICAgIDxjb25zdW1lcyBpbnRlcmZhY2UtbmFtZT0idG5zOkhlbGxvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpIZWxsb0VKQlNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkhlbGxvRUpCUG9ydCIvPgotCQk8amF2YWVzYjphcnRpZmFjdHN0eXBlPldTREwxMTwvamF2YWVzYjphcnRpZmFjdHN0eXBlPgotCTwvc2VydmljZXM+CisgICAgICAgIDxqYXZhZXNiOmFydGlmYWN0c3R5cGU+V1NETDExPC9qYXZhZXNiOmFydGlmYWN0c3R5cGU+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvY29uc3VtZXIvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL2NvbnN1bWVyL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYjBjODY2Ny4uNWNkYjA0MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvY29uc3VtZXIvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9jb25zdW1lci93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOSw4ICsyOSw4IEBACiAgICAgICAgQFdlYlNlcnZpY2VSZWYobmFtZT0ic3VuLXdlYi5zZXJ2aWNlcmVmL0hlbGxvRUpCU2VydmljZSIpCiAgICAgICAgSGVsbG9FSkJTZXJ2aWNlIHNlcnZpY2U7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFNlcnZpY2UgaXMgOiIgKyBzZXJ2aWNlKTsKLQkJSGVsbG8gcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9FSkJQb3J0KCk7CisgICAgICAgIEhlbGxvIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvRUpCUG9ydCgpOwogICAgICAgICAgICAgICAgIC8vIEdldCBTdHViCiAvKgogICAgICAgICAgICAgICAgIEJpbmRpbmdQcm92aWRlciBzdHViID0gKEJpbmRpbmdQcm92aWRlcilwb3J0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvcHJvdmlkZXIvZW5kcG9pbnQvZWpiL0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9wcm92aWRlci9lbmRwb2ludC9lamIvSGVsbG8uamF2YQppbmRleCAyMzE2N2ViLi45MDczOTMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9wcm92aWRlci9lbmRwb2ludC9lamIvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9wcm92aWRlci9lbmRwb2ludC9lamIvSGVsbG8uamF2YQpAQCAtMjIsNSArMjIsNSBAQAogdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZW5kcG9pbnQvZWpiIikKIHB1YmxpYyBpbnRlcmZhY2UgSGVsbG8gewogCi0JcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKTsKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvcHJvdmlkZXIvZW5kcG9pbnQvZWpiL0hlbGxvRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9wcm92aWRlci9lbmRwb2ludC9lamIvSGVsbG9FSkIuamF2YQppbmRleCBhZmFiNjlmLi5lZmY2NmExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9wcm92aWRlci9lbmRwb2ludC9lamIvSGVsbG9FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9wcm92aWRlci9lbmRwb2ludC9lamIvSGVsbG9FSkIuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogcHVibGljIGNsYXNzIEhlbGxvRUpCIGltcGxlbWVudHMgSGVsbG8gewogCiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIqKioqIEVKQiBDYWxsZWQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogRUpCIENhbGxlZCIpOwogICAgICAgICByZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHdobzsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9wcm92aWRlci9qbXMtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvcHJvdmlkZXIvam1zLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCBhN2I3YjU1Li4wNzI3YzM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9wcm92aWRlci9qbXMtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL3Byb3ZpZGVyL2ptcy1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKQEAgLTIyLDEzICsyMiwxMyBAQAogICAgIHZlcnNpb249IjEuMCIKICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgogICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICAKKwogICA8c2VydmljZS1hc3NlbWJseT4KICAgICA8aWRlbnRpZmljYXRpb24+CiAgICAgICA8bmFtZT5jbGllbnRfZWpiX3Byb3ZpZGVyX2Fzc2VtYmx5PC9uYW1lPgogICAgICAgPGRlc2NyaXB0aW9uPlRoaXMgaXMgYW4gU0EgZm9yIEpNUyBCaW5kaW5nPC9kZXNjcmlwdGlvbj4KICAgICA8L2lkZW50aWZpY2F0aW9uPgotIAorCiAgICAgPHNlcnZpY2UtdW5pdD4KICAgICAgIDxpZGVudGlmaWNhdGlvbj4KICAgICAgICAgIDxuYW1lPmNsaWVudF9lamJfcHJvdmlkZXJfc3U8L25hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9wcm92aWRlci9qbXMtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvcHJvdmlkZXIvam1zLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCBhNDc5ZDQxLi5jNjhlYWMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9wcm92aWRlci9qbXMtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL3Byb3ZpZGVyL2ptcy1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwKQEAgLTI3LDYgKzI3LDYgQEAKICAgICAgICAgICAgICAgICA8cHJvdmlkZXMgaW50ZXJmYWNlLW5hbWU9InRuczpIZWxsbyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6SGVsbG9FSkJTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJIZWxsb0VKQlBvcnQiLz4KLQkJPGphdmFlc2I6YXJ0aWZhY3RzdHlwZT5XU0RMMTE8L2phdmFlc2I6YXJ0aWZhY3RzdHlwZT4KLQk8L3NlcnZpY2VzPgorICAgICAgICA8amF2YWVzYjphcnRpZmFjdHN0eXBlPldTREwxMTwvamF2YWVzYjphcnRpZmFjdHN0eXBlPgorICAgIDwvc2VydmljZXM+CiA8L2piaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvaW5vdXQtc2FtcGxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDAzMDAxMDguLjYwMDNhN2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvaW5vdXQtc2FtcGxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjYWxjLXdlYi1jbGllbnQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvYnVpbGQueG1sCmluZGV4IGRjNjNmMDAuLjYzMmViNDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvaW5vdXQtc2FtcGxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS9idWlsZC54bWwKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgICAgICAgIHZhbHVlPSIta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9jYWxjLXdlYi1jbGllbnQvd2Vic2VydmljZS9BZGRlclNlcnZpY2U/V1NETCIvPgogICAgIDwvYW50Y2FsbD4KICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMiCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiIAorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IndlYmNsaWVudC8qKiIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jbGllbnQtd2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi93ZWIueG1sIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC1zdW4td2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9zdW4td2ViLnhtbCIvPgpAQCAtMTE2LDExICsxMTYsMTEgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LlRlc3RDbGllbnQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS9jbGllbnQtd2ViLnhtbAppbmRleCBlZWI3MzBkLi43OTViMDUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCAyNzAxMzY1Li5lMzQyMTc1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvaW5vdXQtc2FtcGxlL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKIAogICAgIHB1YmxpYyBib29sZWFuIGZvdW5kMSA9IGZhbHNlOwogCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUiOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvaW5vdXQtc2FtcGxlIjsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24odGVzdElkKTsKQEAgLTQ1LDEzICs0NSwxMyBAQAogCiAgICAgICAgIFN0cmluZyB1cmwgPSBhcmdzWzBdOwogICAgICAgICB0cnkgewotCQkJLy9mb3IoaW50IGk9MDsgaTwxMDAwOyBpKyspIHsKKyAgICAgICAgICAgIC8vZm9yKGludCBpPTA7IGk8MTAwMDsgaSsrKSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKLQkJCS8vU3lzdGVtLm91dC5wcmludGxuKCJjbGllbnQgSUQgOiAiICsgaSk7CisgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiY2xpZW50IElEIDogIiArIGkpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCQkJLy99Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgZmFpbCgpOworICAgICAgICAgICAgLy99CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZmFpbCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiVmFsdWUgaXMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS9lbmRwb2ludC9BZGRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvZW5kcG9pbnQvQWRkZXIuamF2YQppbmRleCA0ZmMxMDNmLi45ZjgzNWFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS9lbmRwb2ludC9BZGRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvaW5vdXQtc2FtcGxlL2VuZHBvaW50L0FkZGVyLmphdmEKQEAgLTI2LDE3ICsyNiwxNyBAQAogICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQWRkZXIiCiApCiBwdWJsaWMgY2xhc3MgQWRkZXIgewotCXB1YmxpYyBBZGRlcigpIHt9CisgICAgcHVibGljIEFkZGVyKCkge30KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0iYWRkIiwgYWN0aW9uPSJ1cm46QWRkIikKLQlwdWJsaWMgaW50IGFkZChpbnQgaSwgaW50IGopIHsKKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCisgICAgcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB7CiAgICAgICAgICAgICAgICAgaW50IGsgPSBpIC1qIDsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oaSArICItIiArIGogKyIgPSAiICsgayk7Ci0JCQkJcmV0dXJuIGs7CisgICAgICAgICAgICAgICAgcmV0dXJuIGs7CiAKLQkJCQkvKgotCQlpZihpID09IDEwMSkKLQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUaGlzIGlzIG15IGV4Y2VwdGlvbiBpbiBhZGQgLi4uIik7Ci0JCQkqLwotCX0KKyAgICAgICAgICAgICAgICAvKgorICAgICAgICBpZihpID09IDEwMSkKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUaGlzIGlzIG15IGV4Y2VwdGlvbiBpbiBhZGQgLi4uIik7CisgICAgICAgICAgICAqLworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvaW5vdXQtc2FtcGxlL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvaW5vdXQtc2FtcGxlL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCAzYmM4MGI5Li44MGYyZTVkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOSw5ICsxOSw5IEBACiAKIDwhLS0gamJpLnhtbCBmaWxlIGZvciB0aGUgU09BUCBiaW5kaW5nIGRlcGxveW1lbnRzIGJpbmRpbmcuIC0tPgogPGpiaQotICAgIHZlcnNpb249IjEuMCIgCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgdmVyc2lvbj0iMS4wIgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSAuL2piaS54c2QiPgogICA8c2VydmljZS1hc3NlbWJseT4KICAgICA8aWRlbnRpZmljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKaW5kZXggN2JiOTZiYy4uNzBiOWVhMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvaW5vdXQtc2FtcGxlL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMTgsMTUgKzE4LDE1IEBACiAtLT4KIAogPGpiaSB2ZXJzaW9uPSIxLjAiCi0JIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotCSB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLQkgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKLQkgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9BZGRlciIKLQkgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+Ci0JPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4JCQotCSA8cHJvdmlkZXMgaW50ZXJmYWNlLW5hbWU9InRuczpBZGRlclNlcnZpY2VJbnRlcmZhY2UiCisgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCisgICAgIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQWRkZXIiCisgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgorICAgIDxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CisgICAgIDxwcm92aWRlcyBpbnRlcmZhY2UtbmFtZT0idG5zOkFkZGVyU2VydmljZUludGVyZmFjZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6QWRkZXJTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJBZGRlclBvcnQiLz4KICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RzIHhtbG5zPSIiIHJvbGU9InByb3ZpZGVyIiBmaWxlLW5hbWU9ImVuZHBvaW50cy54bWwiIHR5cGU9InhtbCIvPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvaW5vdXQtc2FtcGxlL3dlYi54bWwKaW5kZXggZGE4NmJmNC4uZTUzMmNlMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBBZGRlciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkFkZGVyV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBBZGRlciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkFkZGVyV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBBZGRlciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+QWRkZXJXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+QWRkZXI8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQWRkZXI8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBBZGRlciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+QWRkZXJXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+QWRkZXI8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQWRkZXI8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+QWRkZXI8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0FkZGVyU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5BZGRlcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQWRkZXJTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQppbmRleCBjZmZiZmU5Li4yZmRkOGRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvaW5vdXQtc2FtcGxlL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDM5ICsyOCwzOSBAQAogCiAgICAgICAgQFdlYlNlcnZpY2VSZWYobmFtZT0ic3VuLXdlYi5zZXJ2aWNlcmVmL2FkZGVyIikgQWRkZXJTZXJ2aWNlIHNlcnZpY2U7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKICAgICAgICAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKLQkgICAgUHJpbnRXcml0ZXIgb3V0PW51bGw7CisgICAgICAgIFByaW50V3JpdGVyIG91dD1udWxsOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBTZXJ2aWNlIGlzIDoiICsgc2VydmljZSk7CiAgICAgICAgICAgICAgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7Ci0gICAgICAgICAgICAJb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKKyAgICAgICAgICAgICAgICBvdXQgPSByZXNwLmdldFdyaXRlcigpOwogICAgICAgICAgICAgICAgIEFkZGVyIHBvcnQgPSBzZXJ2aWNlLmdldEFkZGVyUG9ydCgpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicG9ydCBpcyA6ICIgKyBwb3J0KTsKICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gcG9ydC5hZGQoMTAxLCAyKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlc3VsdCBpcyA6ICIgKyByZXN1bHQpOwotCQkvL3ByaW50RmFpbHVyZShvdXQpOwotCQlwcmludFN1Y2Nlc3Mob3V0LCByZXN1bHQpOworICAgICAgICAvL3ByaW50RmFpbHVyZShvdXQpOworICAgICAgICBwcmludFN1Y2Nlc3Mob3V0LCByZXN1bHQpOwogICAgICAgICAgICAgfSBjYXRjaChqYXZhLmxhbmcuRXhjZXB0aW9uIGUpIHsKLQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgCS8vcHJpbnRTdWNjZXNzKG91dCk7Ci0JICAgIAlwcmludEZhaWx1cmUob3V0KTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIC8vcHJpbnRTdWNjZXNzKG91dCk7CisgICAgICAgICAgICBwcmludEZhaWx1cmUob3V0KTsKICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0JCWlmKG91dCAhPSBudWxsKSB7CisgICAgICAgIGlmKG91dCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIG91dC5mbHVzaCgpOwogICAgICAgICAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKLQkJfQotCSAgICB9CisgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIHByaW50RmFpbHVyZShQcmludFdyaXRlciBvdXQpIHsKLQkJaWYob3V0ID09IG51bGwpIHJldHVybjsKLQkJb3V0LnByaW50bG4oIjxodG1sPiIpOworICAgICAgICBpZihvdXQgPT0gbnVsbCkgcmV0dXJuOworICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+VGVzdFNlcnZsZXQ8L3RpdGxlPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgcHJpbnRTdWNjZXNzKFByaW50V3JpdGVyIG91dCwgaW50IHJlc3VsdCkgewotCQlpZihvdXQgPT0gbnVsbCkgcmV0dXJuOworICAgICAgICBpZihvdXQgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5UZXN0U2VydmxldDwvdGl0bGU+Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2J1aWxkLnhtbAppbmRleCA5ZjRmMTYxLi40YmJmYzJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9idWlsZC54bWwKQEAgLTI1LDYgKzI1LDYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KICAgICAgICAgPGFudCBkaXI9ImNvbnN1bWVyIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJwcm92aWRlciIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0icHJvdmlkZXIiIHRhcmdldD0iYWxsIi8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGMyYTQ1NjQuLmQ0MWVjMGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImZpbmRpbnRlcmVzdCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJqYmktY29tcG9uZW50LXN1LWFzc2VtYmx5IiB2YWx1ZT0iZWpiX2ZpbmRpbnRlcmVzdF9wcm92aWRlcl9hc3NlbWJseSIvPgogPHByb3BlcnR5IG5hbWU9ImpiaS1jb21wb25lbnQtc3UiIHZhbHVlPSJlamJfamF4cnBjX3Byb3ZpZGVyX3N1Ii8+CiA8cHJvcGVydHkgbmFtZT0iamJpLWNvbXBvbmVudC1zdS1kaXIiIHZhbHVlPSJzb2FwLWJpbmRpbmctc3UtYWxhc2thIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2J1aWxkLnhtbAppbmRleCBjMzliMGMwLi4yNmY1OTM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyb290LmRpciIgdmFsdWU9Ii4iIC8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzcmMuZGlyIiB2YWx1ZT0iLiIgLz4KLQk8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IkZpbmRJbnRlcmVzdEFwcCIgLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IkZpbmRJbnRlcmVzdEFwcCIgLz4KIAogICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQuZGlyIiB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZSIgLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkLnJlcG9zaXRvcnkiIHZhbHVlPSIke2J1aWxkLmRpcn0vYnVpbGRlYXJzIi8+CkBAIC01OCwxMyArNTgsMTMgQEAKIAogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVidWciIHZhbHVlPSJvbiIgLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9InNldHVwIj4KLQk8ZGVsZXRlIGRpcj0iJHtidWlsZC5kaXJ9Ii8+CisgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuZGlyfSIvPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5yZXBvc2l0b3J5fSIvPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5hcHBjbGllbnR9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8IS0tIHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJzZXR1cCxjbGVhbiIgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJ3c2NvbXBpbGUsc2V0dXAiID4KICAgICAgICAgPCEtLSBhbnQgdGFyZ2V0PSJtYWtlZGlycyIvIC0tPgpAQCAtOTYsOCArOTYsOCBAQAogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqL0ZpbmRJbnRlcmVzdF9TY2hlbWEueHNkIiAvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8L2phcj4KLSAgICAgICAgCi0JPGFudGNhbGwgdGFyZ2V0PSJjb3B5LXRvLXdlYmluZiIgLz4KKworICAgIDxhbnRjYWxsIHRhcmdldD0iY29weS10by13ZWJpbmYiIC8+CiAKICAgICAgICAgPGphciBqYXJmaWxlPSIke2J1aWxkLmphcnN9L3dlYi53YXIiID4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC53ZWJpbmZ9Ij4KQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLm1hcHBpbmd9Ij4KICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJJbnRyQ2xpZW50TWFwcGluZy54bWwiIC8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC53ZWJpbmZ9Ij4KICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi93ZWIueG1sIiAvPgpAQCAtMTE2LDggKzExNiw4IEBACiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgIDwvamFyPgogCi0gICAgICAgIDxqYXIgamFyZmlsZT0iJHtidWlsZC5qYXJzfS9hcHBjbGllbnQuamFyIiAKLQkgICAgIG1hbmlmZXN0PSIke2J1aWxkLmRlc2N9L2NsaWVudC9NQU5JRkVTVC5NRiI+CisgICAgICAgIDxqYXIgamFyZmlsZT0iJHtidWlsZC5qYXJzfS9hcHBjbGllbnQuamFyIgorICAgICAgICAgbWFuaWZlc3Q9IiR7YnVpbGQuZGVzY30vY2xpZW50L01BTklGRVNULk1GIj4KIAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLm1hcHBpbmd9Ij4KICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJJbnRyQ2xpZW50TWFwcGluZy54bWwiIC8+CkBAIC0xMzgsMTggKzEzOCwxOCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb3B5LXRvLXdlYmluZiI+Ci0JPGNvcHkgIHRvZGlyPSIke2J1aWxkLndlYmluZn0vV0VCLUlORi9jbGFzc2VzIiBmaWx0ZXJpbmc9Im9uIiBvdmVyd3JpdGU9InllcyIgID4KLQkgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5kZXN0fSI+Ci0JICAgIDxpbmNsdWRlIG5hbWU9Im15Y2xpZW50LyouY2xhc3MiLz4KLQkgIDwvZmlsZXNldD4KLQk8L2NvcHk+CisgICAgPGNvcHkgIHRvZGlyPSIke2J1aWxkLndlYmluZn0vV0VCLUlORi9jbGFzc2VzIiBmaWx0ZXJpbmc9Im9uIiBvdmVyd3JpdGU9InllcyIgID4KKyAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5kZXN0fSI+CisgICAgICAgIDxpbmNsdWRlIG5hbWU9Im15Y2xpZW50LyouY2xhc3MiLz4KKyAgICAgIDwvZmlsZXNldD4KKyAgICA8L2NvcHk+CiAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC53ZWJpbmZ9L1dFQi1JTkYvY2xhc3NlcyIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJlYXIiIGRlcGVuZHM9ImNsZWFuLGphciI+Ci0gICAgICAgIDxlYXIgZWFyZmlsZT0iJHtidWlsZC5lYXJ9LyR7YXBwbmFtZX0uZWFyIiAKLQkgICAgIGFwcHhtbD0iJHtidWlsZC5kZXNjfS9hcHBsaWNhdGlvbi54bWwiIAotCSAgICAgbWFuaWZlc3Q9IiR7YnVpbGQuZGVzY30vTUFOSUZFU1QuTUYiPgorICAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YnVpbGQuZWFyfS8ke2FwcG5hbWV9LmVhciIKKyAgICAgICAgIGFwcHhtbD0iJHtidWlsZC5kZXNjfS9hcHBsaWNhdGlvbi54bWwiCisgICAgICAgICBtYW5pZmVzdD0iJHtidWlsZC5kZXNjfS9NQU5JRkVTVC5NRiI+CiAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5qYXJzfSIgaW5jbHVkZXM9IiouamFyLCoud2FyIiBleGNsdWRlcz0iZWpiLmphciIvPgogCkBAIC0xNTgsOSArMTU4LDkgQEAKICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgPC9lYXI+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0ic2V0dXAiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iZGVwbG95IiAvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLS11c2VyIiAvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHthZG1pbi51c2VyfSIgLz4KQEAgLTE3MSw3ICsxNzEsNyBAQAogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLS1yZXRyaWV2ZSIgLz4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7YnVpbGQuYXBwY2xpZW50fSIgLz4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7YnVpbGQuZWFyfS8ke2FwcG5hbWV9LmVhciIgLz4KLQk8L2V4ZWM+IAorICAgIDwvZXhlYz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSJkZXBsb3kiIC8+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSItLXVzZXIiIC8+CkBAIC0xOTIsOSArMTkyLDkgQEAKIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYmktY29tcG9uZW50LXN1Ii8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJzZXR1cCI+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSJ1bmRlcGxveSIgLz4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii0tdXNlciIgLz4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7YWRtaW4udXNlcn0iIC8+CkBAIC0yMDMsNyArMjAzLDcgQEAKICAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii0tcG9ydCIgLz4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7YWRtaW4ucG9ydH0iIC8+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2FwcG5hbWV9IiAvPgotCTwvZXhlYz4gCisgICAgPC9leGVjPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9InVuZGVwbG95IiAvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLS11c2VyIiAvPgpAQCAtMjIyLDEwICsyMjIsMTAgQEAKICAgICAgICA8ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgYW4gYXBwY2xpZW50Ii8+CiAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9Ij4KICAgICAgICAgICAgIDxlbnYga2V5PSJWTUFSR1MiIHZhbHVlPSItRHRlc3QucmVzdWx0cz0ke3Jlc3VsdHMuZmlsZX0iIC8+Ci0JICAgIDxhcmcgdmFsdWU9Ii1jbGllbnQiIC8+Ci0JICAgIDxhcmcgdmFsdWU9IiR7YnVpbGQuYXBwY2xpZW50fS8ke2FwcG5hbWV9Q2xpZW50LmphciIvPgotCSAgICA8YXJnIHZhbHVlPSItbmFtZSIgLz4KLQkgICAgPGFyZyB2YWx1ZT0iTXlBcHBDbGllbnQiIC8+CisgICAgICAgIDxhcmcgdmFsdWU9Ii1jbGllbnQiIC8+CisgICAgICAgIDxhcmcgdmFsdWU9IiR7YnVpbGQuYXBwY2xpZW50fS8ke2FwcG5hbWV9Q2xpZW50LmphciIvPgorICAgICAgICA8YXJnIHZhbHVlPSItbmFtZSIgLz4KKyAgICAgICAgPGFyZyB2YWx1ZT0iTXlBcHBDbGllbnQiIC8+CiAgICAgICAgPC9leGVjPgogICAgPC90YXJnZXQ+CiAKQEAgLTI2NiwxNCArMjY2LDE0IEBACiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi54bWwiIC8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgIDwvY29weT4KLSAgICAgICAgCisKICAgICAgICAgPGNvcHkgIHRvZGlyPSIke2J1aWxkLmRlc2N9L2NsaWVudCIgZmlsdGVyaW5nPSJvbiIgb3ZlcndyaXRlPSJ5ZXMiICA+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7c3JjLmRpcn0vZGVzY3JpcHRvci9jbGllbnQiID4KICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLnhtbCIgLz4KLQkJPGluY2x1ZGUgbmFtZT0iTUFOSUZFU1QuTUYiIC8+CisgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1BTklGRVNULk1GIiAvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8L2NvcHk+Ci0gICAgICAgIAorCiAgICAgICAgIDxjb3B5ICB0b2Rpcj0iJHtidWlsZC5kZXNjfSIgZmlsdGVyaW5nPSJvbiIgb3ZlcndyaXRlPSJ5ZXMiICA+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7c3JjLmRpcn0vZGVzY3JpcHRvciIgPgogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgLz4KQEAgLTI4Niw3ICsyODYsNyBAQAogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InN1bi1qMmVlLXJpLnhtbCIgLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgPC9jb3B5PgotICAgICAgICAKKwogICAgICAgICA8Y29weSAgdG9kaXI9IiR7YnVpbGQuZWpic3JjfSIgZmlsdGVyaW5nPSJvbiIgb3ZlcndyaXRlPSJ5ZXMiICA+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7c3JjLmRpcn0vZWpiIiA+CiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qYXZhIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2NsaWVudC9GaW5kSW50ZXJlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9jbGllbnQvRmluZEludGVyZXN0Q2xpZW50LmphdmEKaW5kZXggOTI3ZDU0YS4uNTIxNTJjOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2NsaWVudC9GaW5kSW50ZXJlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvY2xpZW50L0ZpbmRJbnRlcmVzdENsaWVudC5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyIjsKIAogICAgIHB1YmxpYyBGaW5kSW50ZXJlc3RDbGllbnQoKSB7Ci0Jc3RhdHVzLmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7CisgICAgc3RhdHVzLmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQwLDE1ICs0MCwxNSBAQAogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgIC8vICAgICAgY2xpZW50LmRvU2VydmxldFRlc3QoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgZG91YmxlIGRvVGVzdCgpIHsKIAogICAgICAgICAvL1N0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQotCS8vCQkiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2ZpbmRpbnRyL0ZpbmRJbnRlcmVzdCI7CisgICAgLy8gICAgICAgICJodHRwOi8vbG9jYWxob3N0OjgwODAvZmluZGludHIvRmluZEludGVyZXN0IjsKICAgICAgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9Ci0JCQkiaHR0cDovL2xvY2FsaG9zdDoxMjAxMy9JbnRlcmVzdElGUG9ydCI7CisgICAgICAgICAgICAiaHR0cDovL2xvY2FsaG9zdDoxMjAxMy9JbnRlcmVzdElGUG9ydCI7CiAKLSAgICAJdHJ5IHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIEZpbmRJbnRlcmVzdCBmaW5kSW50clNlcnZpY2UgPSAoRmluZEludGVyZXN0KQogICAgICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9GaW5kSW50ZXJlc3QiKTsKQEAgLTU2LDI5ICs1NiwyOSBAQAogICAgICAgICAgICAgSW50ZXJlc3RJRiBpbnRlcmVzdElGUG9ydCA9IGZpbmRJbnRyU2VydmljZS5nZXRJbnRlcmVzdElGUG9ydCgpOwogCiAgICAgICAgICAgICAoKFN0dWIpaW50ZXJlc3RJRlBvcnQpLl9zZXRQcm9wZXJ0eSAoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAotICAgICAgICAgICAgICAgICAJCQkJdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7CiAKLQkgICAgZG91YmxlIGludGVyZXN0ID0gaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsKKyAgICAgICAgZG91YmxlIGludGVyZXN0ID0gaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW50ZXJlc3Qgb24gJDMwMCBmb3IgYSBwZXJpb2Qgb2YgMy41IHllYXJzIGlzICIKLQkJCQkrIGludGVyZXN0KTsKLSAgICAgICAgICAgICAgICAKLQkgICAgaWYgKGludGVyZXN0ID09IDEwNS4wKSB7Ci0JCXN0YXR1cy5hZGRTdGF0dXModGVzdElkICsiMSA6IEVKQiBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLlBBU1MpOwotCSAgICB9CisgICAgICAgICAgICAgICAgKyBpbnRlcmVzdCk7CisKKyAgICAgICAgaWYgKGludGVyZXN0ID09IDEwNS4wKSB7CisgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdElkICsiMSA6IEVKQiBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLlBBU1MpOworICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gaW50ZXJlc3Q7CiAKLSAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCXN0YXR1cy5hZGRTdGF0dXModGVzdElkICsiMSA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLkZBSUwpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyIxIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbmRpbnRyIGNsaWVudCBmYWlsZWQiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0gCisgICAgfQogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCiAgICAvKiBwdWJsaWMgdm9pZCBkb1NlcnZsZXRUZXN0KCkgewotICAgIAl0cnkgewotCSAgICBTdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0KLQkJImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9GaW5kSW50ZXJlc3RTZXJ2bGV0L0ZpbmRJbnRlcmVzdCI7CisgICAgICAgIHRyeSB7CisgICAgICAgIFN0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQorICAgICAgICAiaHR0cDovL2xvY2FsaG9zdDo4MDgwL0ZpbmRJbnRlcmVzdFNlcnZsZXQvRmluZEludGVyZXN0IjsKIAogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgRmluZEludGVyZXN0IGZpbmRJbnRyU2VydmljZSA9IChGaW5kSW50ZXJlc3QpCkBAIC04NywyMiArODcsMjIgQEAKICAgICAgICAgICAgIEludGVyZXN0SUYgaW50ZXJlc3RJRlBvcnQgPSBmaW5kSW50clNlcnZpY2UuZ2V0SW50ZXJlc3RJRlBvcnQoKTsKIAogICAgICAgICAgICAgKChTdHViKWludGVyZXN0SUZQb3J0KS5fc2V0UHJvcGVydHkgKFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKLQkJCQkJCXRhcmdldEVuZHBvaW50QWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwogCi0JICAgIGRvdWJsZSBpbnRlcmVzdCA9IGludGVyZXN0SUZQb3J0LmNhbGN1bGF0ZUludGVyZXN0KGJhbGFuY2UsIHBlcmlvZCk7CisgICAgICAgIGRvdWJsZSBpbnRlcmVzdCA9IGludGVyZXN0SUZQb3J0LmNhbGN1bGF0ZUludGVyZXN0KGJhbGFuY2UsIHBlcmlvZCk7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW50ZXJlc3Qgb24gJDMwMCBmb3IgYSBwZXJpb2Qgb2YgMy41IHllYXJzIGlzICIKLQkJCQkrIGludGVyZXN0KTsKLSAgICAgICAgICAgICAgICAKLQkgICAgaWYgKGludGVyZXN0ID09IDIxMC4wKSB7Ci0JCXN0YXR1cy5hZGRTdGF0dXMoVEVTVF9TVUlURV9JRCsiMiA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLlBBU1MpOwotCSAgICB9Ci0gICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQlzdGF0dXMuYWRkU3RhdHVzKFRFU1RfU1VJVEVfSUQrIjIgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5GQUlMKTsKKyAgICAgICAgICAgICAgICArIGludGVyZXN0KTsKKworICAgICAgICBpZiAoaW50ZXJlc3QgPT0gMjEwLjApIHsKKyAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyhURVNUX1NVSVRFX0lEKyIyIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuUEFTUyk7CisgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoVEVTVF9TVUlURV9JRCsiMiA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaW5kaW50ciBjbGllbnQgZmFpbGVkIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9IAotCXN0YXR1cy5wcmludFN1bW1hcnkoIkpTUjEwOSAtIEZpbmRJbnRlcmVzdFRlc3QiKTsKKyAgICB9CisgICAgc3RhdHVzLnByaW50U3VtbWFyeSgiSlNSMTA5IC0gRmluZEludGVyZXN0VGVzdCIpOwogICAgIH0qLwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvY2xpZW50L0ZpbmRJbnRlcmVzdENsaWVudE5vbkh0dHBCQy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2NsaWVudC9GaW5kSW50ZXJlc3RDbGllbnROb25IdHRwQkMuamF2YQppbmRleCAyMjE0YWY1Li40YTU4YjgwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvY2xpZW50L0ZpbmRJbnRlcmVzdENsaWVudE5vbkh0dHBCQy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9jbGllbnQvRmluZEludGVyZXN0Q2xpZW50Tm9uSHR0cEJDLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIiOwogCiAgICAgcHVibGljIEZpbmRJbnRlcmVzdENsaWVudE5vbkh0dHBCQygpIHsKLQlzdGF0dXMuYWRkRGVzY3JpcHRpb24odGVzdElkKTsKKyAgICBzdGF0dXMuYWRkRGVzY3JpcHRpb24odGVzdElkKTsKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtNDAsMTMgKzQwLDEzIEBACiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgLy8gICAgICBjbGllbnQuZG9TZXJ2bGV0VGVzdCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBkb3VibGUgZG9UZXN0KCkgewogCiAgICAgICAgIFN0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQotCQkJImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9maW5kaW50ci9GaW5kSW50ZXJlc3QiOworICAgICAgICAgICAgImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9maW5kaW50ci9GaW5kSW50ZXJlc3QiOwogCi0gICAgCXRyeSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBGaW5kSW50ZXJlc3QgZmluZEludHJTZXJ2aWNlID0gKEZpbmRJbnRlcmVzdCkKICAgICAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvRmluZEludGVyZXN0Iik7CkBAIC01NCwyOSArNTQsMjkgQEAKICAgICAgICAgICAgIEludGVyZXN0SUYgaW50ZXJlc3RJRlBvcnQgPSBmaW5kSW50clNlcnZpY2UuZ2V0SW50ZXJlc3RJRlBvcnQoKTsKIAogICAgICAgICAgICAgKChTdHViKWludGVyZXN0SUZQb3J0KS5fc2V0UHJvcGVydHkgKFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKLSAgICAgICAgICAgICAgICAgCQkJCXRhcmdldEVuZHBvaW50QWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwogCi0JICAgIGRvdWJsZSBpbnRlcmVzdCA9IGludGVyZXN0SUZQb3J0LmNhbGN1bGF0ZUludGVyZXN0KGJhbGFuY2UsIHBlcmlvZCk7CisgICAgICAgIGRvdWJsZSBpbnRlcmVzdCA9IGludGVyZXN0SUZQb3J0LmNhbGN1bGF0ZUludGVyZXN0KGJhbGFuY2UsIHBlcmlvZCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludGVyZXN0IG9uICQzMDAgZm9yIGEgcGVyaW9kIG9mIDMuNSB5ZWFycyBpcyAiCi0JCQkJKyBpbnRlcmVzdCk7Ci0gICAgICAgICAgICAgICAgCi0JICAgIGlmIChpbnRlcmVzdCA9PSAxMDUuMCkgewotCQlzdGF0dXMuYWRkU3RhdHVzKHRlc3RJZCArIjEgOiBFSkIgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5QQVNTKTsKLQkgICAgfQorICAgICAgICAgICAgICAgICsgaW50ZXJlc3QpOworCisgICAgICAgIGlmIChpbnRlcmVzdCA9PSAxMDUuMCkgeworICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKHRlc3RJZCArIjEgOiBFSkIgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5QQVNTKTsKKyAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGludGVyZXN0OwogCi0gICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQlzdGF0dXMuYWRkU3RhdHVzKHRlc3RJZCArIjEgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5GQUlMKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdElkICsiMSA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaW5kaW50ciBjbGllbnQgZmFpbGVkIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9IAorICAgIH0KICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgLyogcHVibGljIHZvaWQgZG9TZXJ2bGV0VGVzdCgpIHsKLSAgICAJdHJ5IHsKLQkgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9Ci0JCSJodHRwOi8vbG9jYWxob3N0OjgwODAvRmluZEludGVyZXN0U2VydmxldC9GaW5kSW50ZXJlc3QiOworICAgICAgICB0cnkgeworICAgICAgICBTdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0KKyAgICAgICAgImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9GaW5kSW50ZXJlc3RTZXJ2bGV0L0ZpbmRJbnRlcmVzdCI7CiAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIEZpbmRJbnRlcmVzdCBmaW5kSW50clNlcnZpY2UgPSAoRmluZEludGVyZXN0KQpAQCAtODUsMjIgKzg1LDIyIEBACiAgICAgICAgICAgICBJbnRlcmVzdElGIGludGVyZXN0SUZQb3J0ID0gZmluZEludHJTZXJ2aWNlLmdldEludGVyZXN0SUZQb3J0KCk7CiAKICAgICAgICAgICAgICgoU3R1YilpbnRlcmVzdElGUG9ydCkuX3NldFByb3BlcnR5IChTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCi0JCQkJCQl0YXJnZXRFbmRwb2ludEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKIAotCSAgICBkb3VibGUgaW50ZXJlc3QgPSBpbnRlcmVzdElGUG9ydC5jYWxjdWxhdGVJbnRlcmVzdChiYWxhbmNlLCBwZXJpb2QpOworICAgICAgICBkb3VibGUgaW50ZXJlc3QgPSBpbnRlcmVzdElGUG9ydC5jYWxjdWxhdGVJbnRlcmVzdChiYWxhbmNlLCBwZXJpb2QpOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludGVyZXN0IG9uICQzMDAgZm9yIGEgcGVyaW9kIG9mIDMuNSB5ZWFycyBpcyAiCi0JCQkJKyBpbnRlcmVzdCk7Ci0gICAgICAgICAgICAgICAgCi0JICAgIGlmIChpbnRlcmVzdCA9PSAyMTAuMCkgewotCQlzdGF0dXMuYWRkU3RhdHVzKFRFU1RfU1VJVEVfSUQrIjIgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5QQVNTKTsKLQkgICAgfQotICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJc3RhdHVzLmFkZFN0YXR1cyhURVNUX1NVSVRFX0lEKyIyIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuRkFJTCk7CisgICAgICAgICAgICAgICAgKyBpbnRlcmVzdCk7CisKKyAgICAgICAgaWYgKGludGVyZXN0ID09IDIxMC4wKSB7CisgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoVEVTVF9TVUlURV9JRCsiMiA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLlBBU1MpOworICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKFRFU1RfU1VJVEVfSUQrIjIgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5GQUlMKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmluZGludHIgY2xpZW50IGZhaWxlZCIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSAKLQlzdGF0dXMucHJpbnRTdW1tYXJ5KCJKU1IxMDkgLSBGaW5kSW50ZXJlc3RUZXN0Iik7CisgICAgfQorICAgIHN0YXR1cy5wcmludFN1bW1hcnkoIkpTUjEwOSAtIEZpbmRJbnRlcmVzdFRlc3QiKTsKICAgICB9Ki8KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2NsaWVudC9GaW5kSW50ZXJlc3RTZXJ2bGV0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvY2xpZW50L0ZpbmRJbnRlcmVzdFNlcnZsZXRDbGllbnQuamF2YQppbmRleCAwOGMwNjU2Li44NmM4OWUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvY2xpZW50L0ZpbmRJbnRlcmVzdFNlcnZsZXRDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvY2xpZW50L0ZpbmRJbnRlcmVzdFNlcnZsZXRDbGllbnQuamF2YQpAQCAtMjAsMTIgKzIwLDEyIEBACiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGphdmF4Lm5hbWluZy4qOwogaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CiAKIHB1YmxpYyBjbGFzcyBGaW5kSW50ZXJlc3RTZXJ2bGV0Q2xpZW50IGV4dGVuZHMgSHR0cFNlcnZsZXQKLQkJCXsKKyAgICAgICAgICAgIHsKICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3A7CiAgICAgcHVibGljIEZpbmRJbnRlcmVzdFNlcnZsZXRDbGllbnQoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmluZEludGVyZXN0U2VydmxldEltcGwoKSBpbnN0YW50aWF0ZWQiKTsKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgdGhpcy5yZXNwID0gcmVzcDsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCiAgICAgICAgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgdHJ5ewpAQCAtNDksOSArNDksOSBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGNhbGN1bGF0ZUludGVyZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJjYWxjdWxhdGVJbnRlcmVzdCBpbnZva2VkIGZyb20gc2VydmxldCAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNhbGN1bGF0ZUludGVyZXN0IGludm9rZWQgZnJvbSBzZXJ2bGV0ICIpOwogICAgICAgICBGaW5kSW50ZXJlc3RDbGllbnQgY2xpZW50ID0gbmV3IEZpbmRJbnRlcmVzdENsaWVudCgpOwotCWRvdWJsZSBpbnRlcmVzdD0gY2xpZW50LmRvVGVzdCgpOworICAgIGRvdWJsZSBpbnRlcmVzdD0gY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwogICAgICAgICAgICAgICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9jbGllbnQvU09BUEVqYkNvbnN1bWVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvY2xpZW50L1NPQVBFamJDb25zdW1lci5qYXZhCmluZGV4IDA3OTc1NWIuLjNkZmZmYjEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9jbGllbnQvU09BUEVqYkNvbnN1bWVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2NsaWVudC9TT0FQRWpiQ29uc3VtZXIuamF2YQpAQCAtMjMsMTkgKzIzLDE5IEBACiBwdWJsaWMgY2xhc3MgU09BUEVqYkNvbnN1bWVyIHsKICAgICBwcml2YXRlIGRvdWJsZSBiYWxhbmNlID0gMzAwLjAwOwogICAgIHByaXZhdGUgZG91YmxlIHBlcmlvZCA9IDMuNTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdHVzID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lciI7CiAKICAgICBwdWJsaWMgU09BUEVqYkNvbnN1bWVyKCkgewogICAgICAgICBzdGF0dXMuYWRkRGVzY3JpcHRpb24odGVzdElkKTsKICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgU09BUEVqYkNvbnN1bWVyIGNsaWVudCA9IG5ldyBTT0FQRWpiQ29uc3VtZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgIH0KIApAQCAtNDQsMjMgKzQ0LDIzIEBACiAgICAgICAgICAvLyAgICAgICAgICAgICAgICJodHRwOi8vbG9jYWxob3N0OjgwODAvc29hcC93ZWIvZmluZGludGVyZXN0IjsKICAgICAgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9CiAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2xvY2FsaG9zdDoxMjAxMy9JbnRlcmVzdElGUG9ydCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBGaW5kSW50ZXJlc3QgZmluZEludHJTZXJ2aWNlID0gKEZpbmRJbnRlcmVzdCkKICAgICAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvRmluZEludGVyZXN0Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBJbnRlcmVzdElGIGludGVyZXN0SUZQb3J0ID0gZmluZEludHJTZXJ2aWNlLmdldEludGVyZXN0SUZQb3J0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAoKFN0dWIpaW50ZXJlc3RJRlBvcnQpLl9zZXRQcm9wZXJ0eSAoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBkb3VibGUgaW50ZXJlc3QgPSBpbnRlcmVzdElGUG9ydC5jYWxjdWxhdGVJbnRlcmVzdChiYWxhbmNlLCBwZXJpb2QpOyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW50ZXJlc3Qgb24gJDMwMCBmb3IgYSBwZXJpb2Qgb2YgMy41IHllYXJzIGlzICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBpbnRlcmVzdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoaW50ZXJlc3QgPT0gMTA1LjApIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKHRlc3RJZCArIjEgOiBFSkIgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5QQVNTKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyIxIDogRUpCIEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbmRpbnRyIGNsaWVudCBmYWlsZWQiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9jbGllbnQvU09BUEVqYkNvbnN1bWVyTm9uSHR0cEJDLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvY2xpZW50L1NPQVBFamJDb25zdW1lck5vbkh0dHBCQy5qYXZhCmluZGV4IDdjNGJmYmIuLjg3YTc1ZWQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9jbGllbnQvU09BUEVqYkNvbnN1bWVyTm9uSHR0cEJDLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2NsaWVudC9TT0FQRWpiQ29uc3VtZXJOb25IdHRwQkMuamF2YQpAQCAtMjMsNDIgKzIzLDQyIEBACiBwdWJsaWMgY2xhc3MgU09BUEVqYkNvbnN1bWVyTm9uSHR0cEJDIHsKICAgICBwcml2YXRlIGRvdWJsZSBiYWxhbmNlID0gMzAwLjAwOwogICAgIHByaXZhdGUgZG91YmxlIHBlcmlvZCA9IDMuNTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdHVzID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgU09BUEVqYkNvbnN1bWVyTm9uSHR0cEJDKCkgewogICAgICAgICBzdGF0dXMuYWRkRGVzY3JpcHRpb24odGVzdElkKTsKICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgU09BUEVqYkNvbnN1bWVyTm9uSHR0cEJDIGNsaWVudCA9IG5ldyBTT0FQRWpiQ29uc3VtZXJOb25IdHRwQkMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB7CiAgICAgICAgIFN0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQogICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9zb2FwL3dlYi9maW5kaW50ZXJlc3QiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgRmluZEludGVyZXN0IGZpbmRJbnRyU2VydmljZSA9IChGaW5kSW50ZXJlc3QpCiAgICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL0ZpbmRJbnRlcmVzdCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSW50ZXJlc3RJRiBpbnRlcmVzdElGUG9ydCA9IGZpbmRJbnRyU2VydmljZS5nZXRJbnRlcmVzdElGUG9ydCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgKChTdHViKWludGVyZXN0SUZQb3J0KS5fc2V0UHJvcGVydHkgKFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgZG91YmxlIGludGVyZXN0ID0gaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludGVyZXN0IG9uICQzMDAgZm9yIGEgcGVyaW9kIG9mIDMuNSB5ZWFycyBpcyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZXJlc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGludGVyZXN0ID09IDEwNS4wKSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyIxIDogRUpCIEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuUEFTUyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdElkICsiMSA6IEVKQiBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaW5kaW50ciBjbGllbnQgZmFpbGVkIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvY2xpZW50L1NlcnZsZXRJbnZva2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvY2xpZW50L1NlcnZsZXRJbnZva2VyLmphdmEKaW5kZXggNmE4YmEzNC4uNTAyYTEwZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2NsaWVudC9TZXJ2bGV0SW52b2tlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9jbGllbnQvU2VydmxldEludm9rZXIuamF2YQpAQCAtNDgsNyArNDgsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjUsOSArNjUsOSBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgRmluZEludGVyZXN0IFNFUlZJQ0UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiWzEwNS4wXSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9kZXNjcmlwdG9yL3dlYi9zdW4td2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9kZXNjcmlwdG9yL3dlYi9zdW4td2ViLnhtbAppbmRleCAzNTQyYzA2Li4yYjBjZWMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvZGVzY3JpcHRvci93ZWIvc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2Rlc2NyaXB0b3Ivd2ViL3N1bi13ZWIueG1sCkBAIC0yNiw3ICsyNiw3IEBACiAgICAgICAgICAgIDx3c2RsLXBvcnQ+CiAgICAgPG5hbWVzcGFjZVVSST5odHRwOi8vaGVsbG8ub3JnL3dzZGw8L25hbWVzcGFjZVVSST4KICAgICA8bG9jYWxwYXJ0PkludGVyZXN0SUZQb3J0PC9sb2NhbHBhcnQ+Ci08L3dzZGwtcG9ydD4gCis8L3dzZGwtcG9ydD4KICAgICAgICAgICAgIDxzdHViLXByb3BlcnR5IG5hbWU9ImpiaS1lbmFibGVkIiB2YWx1ZT0idHJ1ZSIvPgogICAgICAgICA8L3BvcnQtaW5mbz4KICAgICA8L3NlcnZpY2UtcmVmPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2VqYi9JbnRlcmVzdEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2VqYi9JbnRlcmVzdEVKQi5qYXZhCmluZGV4IGQ2Zjk0YWYuLjhkNzA5NDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9lamIvSW50ZXJlc3RFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvZWpiL0ludGVyZXN0RUpCLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgbXllamI7CiAKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC0yNiwxMSArMjYsMTEgQEAKIHB1YmxpYyBjbGFzcyBJbnRlcmVzdEVKQiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKIAogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2M7Ci0gICAgCisKICAgICBwdWJsaWMgSW50ZXJlc3RFSkIoKXt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyZXN0RUpCOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyZXN0RUpCOjplamJDcmVhdGUgISEiKTsKICAgICB9CiAKICAgICBwdWJsaWMgZG91YmxlIGNhbGN1bGF0ZUludGVyZXN0KGRvdWJsZSBiYWxhbmNlLCBkb3VibGUgcGVyaW9kKSB7CkBAIC0zOSwxMyArMzksMTMgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQorCiAgICAgICAgIHRoaXMuc2MgPSBzYzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKaW5kZXggYTFlOWZmYS4uYWMyZTVlNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOSw5ICsxOSw5IEBACiAKIDwhLS0gamJpLnhtbCBmaWxlIGZvciB0aGUgU09BUCBiaW5kaW5nIGRlcGxveW1lbnRzIGJpbmRpbmcuIC0tPgogPGpiaQotICAgIHZlcnNpb249IjEuMCIgCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgdmVyc2lvbj0iMS4wIgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSAuL2piaS54c2QiPgogICA8c2VydmljZS1hc3NlbWJseT4KICAgICA8aWRlbnRpZmljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCBjNGY2Y2NiLi4zZGY1OTE0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKQEAgLTE4LDE1ICsxOCwxNSBAQAogLS0+CiAKIDxqYmkgdmVyc2lvbj0iMS4wIgotCSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLQkgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0JIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCi0JIHhtbG5zOnRucz0iaHR0cDovL2hlbGxvLm9yZy93c2RsIgotCSB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KLQk8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgkJCi0JPHByb3ZpZGVzIGludGVyZmFjZS1uYW1lPSJ0bnM6RmluZEludGVyZXN0SW50ZXJmYWNlIgorICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgICB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgorICAgICB4bWxuczp0bnM9Imh0dHA6Ly9oZWxsby5vcmcvd3NkbCIKKyAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+CisgICAgPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4KKyAgICA8cHJvdmlkZXMgaW50ZXJmYWNlLW5hbWU9InRuczpGaW5kSW50ZXJlc3RJbnRlcmZhY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkZpbmRJbnRlcmVzdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtbmFtZT0iSW50ZXJlc3RJRlBvcnQiLz4KICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RzIHhtbG5zPSIiIHJvbGU9ImNvbnN1bWVyIiBmaWxlLW5hbWU9ImVuZHBvaW50cy54bWwiIHR5cGU9InhtbCIvPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL3NvYXAtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL3NvYXAtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDFhY2VjOTUuLjczZWZiMzIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9zb2FwLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvc29hcC1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKQEAgLTE5LDkgKzE5LDkgQEAKIAogPCEtLSBqYmkueG1sIGZpbGUgZm9yIHRoZSBTT0FQIGJpbmRpbmcgZGVwbG95bWVudHMgYmluZGluZy4gLS0+CiA8amJpCi0gICAgdmVyc2lvbj0iMS4wIiAKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICB2ZXJzaW9uPSIxLjAiCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIC4vamJpLnhzZCI+CiAgIDxzZXJ2aWNlLWFzc2VtYmx5PgogICAgIDxpZGVudGlmaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9zb2FwLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9zb2FwLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCAxNjEwZGVlLi43NjJjZTQ1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvc29hcC1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL3NvYXAtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOCwxNCArMTgsMTQgQEAKIC0tPgogCiA8amJpIHZlcnNpb249IjEuMCIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotCSB4bWxuczp0bnM9Imh0dHA6Ly9oZWxsby5vcmcvd3NkbCIKLQkgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+Ci0JPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4JCQotCQk8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpGaW5kSW50ZXJlc3RJbnRlcmZhY2UiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkZpbmRJbnRlcmVzdCIgCisgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgIHhtbG5zOnRucz0iaHR0cDovL2hlbGxvLm9yZy93c2RsIgorICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgorICAgICAgICA8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpGaW5kSW50ZXJlc3RJbnRlcmZhY2UiCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkZpbmRJbnRlcmVzdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtbmFtZT0iSW50ZXJlc3RJRlBvcnQiLz4KICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RzIHhtbG5zPSIiIHJvbGU9ImNvbnN1bWVyIiBmaWxlLW5hbWU9ImVuZHBvaW50cy54bWwiIHR5cGU9InhtbCIvPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL3NvYXAtYmluZGluZy1zdS9zdS9lbmRwb2ludHMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL3NvYXAtYmluZGluZy1zdS9zdS9lbmRwb2ludHMueG1sCmluZGV4IDliMDgxMmIuLmE0ZGE2YWEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9zb2FwLWJpbmRpbmctc3Uvc3UvZW5kcG9pbnRzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvc29hcC1iaW5kaW5nLXN1L3N1L2VuZHBvaW50cy54bWwKQEAgLTIxLDIyICsyMSwyMiBAQAogICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnN1bi5jb20vbnMvamJpL2NvbXBvbmVudC9zb2FwL2RlcGxveSAuL2VuZHBvaW50cy54c2QiPgogPHNlcnZpY2UtbmFtZT4KLQk8bmFtZXNwYWNlLXVyaT5odHRwOi8vaGVsbG8ub3JnL3dzZGw8L25hbWVzcGFjZS11cmk+Ci0JPGxvY2FsLXBhcnQ+RmluZEludGVyZXN0PC9sb2NhbC1wYXJ0PgorICAgIDxuYW1lc3BhY2UtdXJpPmh0dHA6Ly9oZWxsby5vcmcvd3NkbDwvbmFtZXNwYWNlLXVyaT4KKyAgICA8bG9jYWwtcGFydD5GaW5kSW50ZXJlc3Q8L2xvY2FsLXBhcnQ+CiAgICAgPC9zZXJ2aWNlLW5hbWU+CiAgICAgPGVuZHBvaW50LW5hbWU+SW50ZXJlc3RJRlBvcnQ8L2VuZHBvaW50LW5hbWU+CiAgICAgPGVuZHBvaW50LXJvbGU+cHJvdmlkZXI8L2VuZHBvaW50LXJvbGU+Ci0gICAgPGFkZHJlc3MtbG9jYXRpb24+aHR0cDovL2xvY2FsaG9zdDo4MDgwL2ZpbmRpbnRyL0ZpbmRJbnRlcmVzdDwvYWRkcmVzcy1sb2NhdGlvbj4gCi0gICAgPHN0eWxlPmh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDgvd3NkbC9zdHlsZS9ycGM8L3N0eWxlPiAgICAgICAgICAgICAKKyAgICA8YWRkcmVzcy1sb2NhdGlvbj5odHRwOi8vbG9jYWxob3N0OjgwODAvZmluZGludHIvRmluZEludGVyZXN0PC9hZGRyZXNzLWxvY2F0aW9uPgorICAgIDxzdHlsZT5odHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwvc3R5bGUvcnBjPC9zdHlsZT4KICAgICA8b3BlcmF0aW9uPgogICAgICAgICA8bmFtZT5jYWxjdWxhdGVJbnRlcmVzdDwvbmFtZT4KLSAgICAgICAgPG1lcD5odHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwvaW4tb3V0PC9tZXA+ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgPG1lcD5odHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwvaW4tb3V0PC9tZXA+CiAgICAgICAgIDxzb2FwYWN0aW9uPiIiPC9zb2FwYWN0aW9uPgogICAgICAgICA8aW5wdXQ+CiAgICAgICAgICAgPG5hbWVzcGFjZS11cmk+aHR0cDovL2hlbGxvLm9yZy93c2RsPC9uYW1lc3BhY2UtdXJpPgogICAgICAgICA8L2lucHV0PgogICAgICAgICA8b3V0cHV0PgogICAgICAgICAgIDxuYW1lc3BhY2UtdXJpPmh0dHA6Ly9oZWxsby5vcmcvd3NkbDwvbmFtZXNwYWNlLXVyaT4KLSAgICAgICAgPC9vdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgPC9vdXRwdXQ+CiAgICAgPC9vcGVyYXRpb24+Ci08L2VuZHBvaW50PiAKKzwvZW5kcG9pbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvd2ViL0ZpbmRJbnRlcmVzdFNlcnZsZXRJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvd2ViL0ZpbmRJbnRlcmVzdFNlcnZsZXRJbXBsLmphdmEKaW5kZXggZGY2NjIwZC4uNDllZDM2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL3dlYi9GaW5kSW50ZXJlc3RTZXJ2bGV0SW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci93ZWIvRmluZEludGVyZXN0U2VydmxldEltcGwuamF2YQpAQCAtMjEsMTUgKzIxLDE1IEBACiBpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKIGltcG9ydCBqYXZheC54bWwucnBjLkNhbGw7CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamF2YXgubmFtaW5nLio7CiBpbXBvcnQgamF2YXgueG1sLnJwYy5TZXJ2aWNlOwogaW1wb3J0IGphdmF4LnhtbC5ycGMuc2VydmVyLlNlcnZpY2VMaWZlY3ljbGU7CiBpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuU2luZ2xlVGhyZWFkTW9kZWw7CiAKLXB1YmxpYyBjbGFzcyBGaW5kSW50ZXJlc3RTZXJ2bGV0SW1wbCBpbXBsZW1lbnRzIAotCQkJU2luZ2xlVGhyZWFkTW9kZWwsIFNlcnZpY2VMaWZlY3ljbGUgeworcHVibGljIGNsYXNzIEZpbmRJbnRlcmVzdFNlcnZsZXRJbXBsIGltcGxlbWVudHMKKyAgICAgICAgICAgIFNpbmdsZVRocmVhZE1vZGVsLCBTZXJ2aWNlTGlmZWN5Y2xlIHsKIAogICAgIHB1YmxpYyBGaW5kSW50ZXJlc3RTZXJ2bGV0SW1wbCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGaW5kSW50ZXJlc3RTZXJ2bGV0SW1wbCgpIGluc3RhbnRpYXRlZCIpOwpAQCAtNDQsNyArNDQsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBkb3VibGUgY2FsY3VsYXRlSW50ZXJlc3QoZG91YmxlIGJhbGFuY2UsIGRvdWJsZSBwZXJpb2QpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImNhbGN1bGF0ZUludGVyZXN0IGludm9rZWQgZnJvbSBzZXJ2bGV0IGVuZHBvaW50Iik7Ci0JcmV0dXJuIDAuMipiYWxhbmNlKnBlcmlvZDsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNhbGN1bGF0ZUludGVyZXN0IGludm9rZWQgZnJvbSBzZXJ2bGV0IGVuZHBvaW50Iik7CisgICAgcmV0dXJuIDAuMipiYWxhbmNlKnBlcmlvZDsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvd3Njb21waWxlX2NvbmZpZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvd3Njb21waWxlX2NvbmZpZy54bWwKaW5kZXggNGNmYjk1NC4uYzExYjg4NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL3dzY29tcGlsZV9jb25maWcueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci93c2NvbXBpbGVfY29uZmlnLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJGaW5kSW50ZXJlc3Qud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJteWVqYiIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL3dzY29tcGlsZV9jb25maWdfY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci93c2NvbXBpbGVfY29uZmlnX2NsaWVudC54bWwKaW5kZXggZWJmZjY5Yy4uOWMzMThjOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL3dzY29tcGlsZV9jb25maWdfY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvd3Njb21waWxlX2NvbmZpZ19jbGllbnQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249IkZpbmRJbnRlcmVzdC53c2RsIgogICAgICAgcGFja2FnZU5hbWU9Im15Y2xpZW50Ii8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWQ5NGMwNS4uZDdjZDhjMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJmaW5kaW50ZXJlc3QiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iamJpLWNvbXBvbmVudC1zdS1hc3NlbWJseSIgdmFsdWU9ImVqYl9maW5kaW50ZXJlc3RfYXNzZW1ibHkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJqYmktY29tcG9uZW50LXN1IiB2YWx1ZT0iZWpiX2pheHJwY19jb25zdW1lcl9zdSIvPgogPHByb3BlcnR5IG5hbWU9ImpiaS1jb21wb25lbnQtc3UtZGlyIiB2YWx1ZT0ic29hcC1iaW5kaW5nLXN1LWFsYXNrYSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L2J1aWxkLnhtbAppbmRleCA0ODZiNjg0Li5jZjljZDBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L2J1aWxkLnhtbApAQCAtMzcsNyArMzcsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJvb3QuZGlyIiB2YWx1ZT0iLiIgLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNyYy5kaXIiIHZhbHVlPSIuIiAvPgotCTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iRmluZEludGVyZXN0QXBwIiAvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iRmluZEludGVyZXN0QXBwIiAvPgogCiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZC5kaXIiIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlIiAvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQucmVwb3NpdG9yeSIgdmFsdWU9IiR7YnVpbGQuZGlyfS9idWlsZGVhcnMiLz4KQEAgLTU2LDEzICs1NiwxMyBAQAogCiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZWJ1ZyIgdmFsdWU9Im9uIiAvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0ic2V0dXAiPgotCTxkZWxldGUgZGlyPSIke2J1aWxkLmRpcn0iLz4KKyAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5kaXJ9Ii8+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLnJlcG9zaXRvcnl9Ii8+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmFwcGNsaWVudH0iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDwhLS0gdGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9InNldHVwLGNsZWFuIiAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9IndzY29tcGlsZSxzZXR1cCIgPgogICAgICAgICA8IS0tIGFudCB0YXJnZXQ9Im1ha2VkaXJzIi8gLS0+CkBAIC05OSw4ICs5OSw4IEBACiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovRmluZEludGVyZXN0X1NjaGVtYS54c2QiIC8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgIDwvamFyPgotICAgICAgICAKLQk8YW50Y2FsbCB0YXJnZXQ9ImNvcHktdG8td2ViaW5mIiAvPgorCisgICAgPGFudGNhbGwgdGFyZ2V0PSJjb3B5LXRvLXdlYmluZiIgLz4KIAogICAgICAgICA8amFyIGphcmZpbGU9IiR7YnVpbGQuamFyc30vd2ViLndhciIgPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLndlYmluZn0iPgpAQCAtMTI1LDggKzEyNSw4IEBACiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgIDwvamFyPgogCi0gICAgICAgIDxqYXIgamFyZmlsZT0iJHtidWlsZC5qYXJzfS9hcHBjbGllbnQuamFyIiAKLQkgICAgIG1hbmlmZXN0PSIke2J1aWxkLmRlc2N9L2NsaWVudC9NQU5JRkVTVC5NRiI+CisgICAgICAgIDxqYXIgamFyZmlsZT0iJHtidWlsZC5qYXJzfS9hcHBjbGllbnQuamFyIgorICAgICAgICAgbWFuaWZlc3Q9IiR7YnVpbGQuZGVzY30vY2xpZW50L01BTklGRVNULk1GIj4KIDwhLS0KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiI+CiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iRklNYXBwaW5nQ2xpZW50LnhtbCIgLz4KQEAgLTE1MiwxNyArMTUyLDE3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvcHktdG8td2ViaW5mIj4KLQk8Y29weSAgdG9kaXI9IiR7YnVpbGQud2ViaW5mfS9XRUItSU5GL2NsYXNzZXMiIGZpbHRlcmluZz0ib24iIG92ZXJ3cml0ZT0ieWVzIiAgPgotCSAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmRlc3R9Ij4KLQkgICAgPGluY2x1ZGUgbmFtZT0ibXl3ZWIvKi5jbGFzcyIvPgotCSAgPC9maWxlc2V0PgotCTwvY29weT4KKyAgICA8Y29weSAgdG9kaXI9IiR7YnVpbGQud2ViaW5mfS9XRUItSU5GL2NsYXNzZXMiIGZpbHRlcmluZz0ib24iIG92ZXJ3cml0ZT0ieWVzIiAgPgorICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmRlc3R9Ij4KKyAgICAgICAgPGluY2x1ZGUgbmFtZT0ibXl3ZWIvKi5jbGFzcyIvPgorICAgICAgPC9maWxlc2V0PgorICAgIDwvY29weT4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZWFyIiBkZXBlbmRzPSJjbGVhbixqYXIiPgotICAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YnVpbGQuZWFyfS8ke2FwcG5hbWV9LmVhciIgCi0JICAgICBhcHB4bWw9IiR7YnVpbGQuZGVzY30vYXBwbGljYXRpb24ueG1sIiAKLQkgICAgIG1hbmlmZXN0PSIke2J1aWxkLmRlc2N9L01BTklGRVNULk1GIj4KKyAgICAgICAgPGVhciBlYXJmaWxlPSIke2J1aWxkLmVhcn0vJHthcHBuYW1lfS5lYXIiCisgICAgICAgICBhcHB4bWw9IiR7YnVpbGQuZGVzY30vYXBwbGljYXRpb24ueG1sIgorICAgICAgICAgbWFuaWZlc3Q9IiR7YnVpbGQuZGVzY30vTUFOSUZFU1QuTUYiPgogCiAgICAgICAgICAgICA8IS0tPGZpbGVzZXQgZGlyPSIke2J1aWxkLmphcnN9IiBpbmNsdWRlcz0iKi5qYXIsLndhciIvPi0tPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmphcnN9IiBpbmNsdWRlcz0iKi5qYXIiLz4KQEAgLTE3Miw5ICsxNzIsOSBAQAogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8L2Vhcj4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJzZXR1cCI+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSJkZXBsb3kiIC8+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSItLXVzZXIiIC8+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2FkbWluLnVzZXJ9IiAvPgpAQCAtMTg1LDEyICsxODUsMTIgQEAKICAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii0tcmV0cmlldmUiIC8+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2J1aWxkLmFwcGNsaWVudH0iIC8+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2J1aWxkLmVhcn0vJHthcHBuYW1lfS5lYXIiIC8+Ci0JPC9leGVjPiAKKyAgICA8L2V4ZWM+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpiaS1jb21wb25lbnQtc3UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9InNldHVwIj4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9InVuZGVwbG95IiAvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLS11c2VyIiAvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHthZG1pbi51c2VyfSIgLz4KQEAgLTE5OSwxOCArMTk5LDE4IEBACiAgICAgICAgICAgICA8YXJnIHZhbHVlPSItLXBvcnQiIC8+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2FkbWluLnBvcnR9IiAvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHthcHBuYW1lfSIgLz4KLQk8L2V4ZWM+IAorICAgIDwvZXhlYz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYmktY29tcG9uZW50LXN1Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50IiBkZXBlbmRzPSJzZXR1cCI+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9Ij4KICAgICAgICAgICAgIDxlbnYga2V5PSJWTUFSR1MiIHZhbHVlPSItRHRlc3QucmVzdWx0cz0ke3Jlc3VsdHMuZmlsZX0iIC8+Ci0JICAgIDxhcmcgdmFsdWU9Ii1jbGllbnQiIC8+Ci0JICAgIDxhcmcgdmFsdWU9IiR7YnVpbGQuYXBwY2xpZW50fS8ke2FwcG5hbWV9Q2xpZW50LmphciIvPgotCSAgICA8YXJnIHZhbHVlPSItbmFtZSIgLz4KLQkgICAgPGFyZyB2YWx1ZT0iTXlBcHBDbGllbnQiIC8+Ci0gICAgPC9leGVjPiAKKyAgICAgICAgPGFyZyB2YWx1ZT0iLWNsaWVudCIgLz4KKyAgICAgICAgPGFyZyB2YWx1ZT0iJHtidWlsZC5hcHBjbGllbnR9LyR7YXBwbmFtZX1DbGllbnQuamFyIi8+CisgICAgICAgIDxhcmcgdmFsdWU9Ii1uYW1lIiAvPgorICAgICAgICA8YXJnIHZhbHVlPSJNeUFwcENsaWVudCIgLz4KKyAgICA8L2V4ZWM+CiAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ibWFrZWRpcnMiPgpAQCAtMjUwLDE0ICsyNTAsMTQgQEAKICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLnhtbCIgLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgPC9jb3B5PgotICAgICAgICAKKwogICAgICAgICA8Y29weSAgdG9kaXI9IiR7YnVpbGQuZGVzY30vY2xpZW50IiBmaWx0ZXJpbmc9Im9uIiBvdmVyd3JpdGU9InllcyIgID4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtzcmMuZGlyfS9kZXNjcmlwdG9yL2NsaWVudCIgPgogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioueG1sIiAvPgotCQk8aW5jbHVkZSBuYW1lPSJNQU5JRkVTVC5NRiIgLz4KKyAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUFOSUZFU1QuTUYiIC8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgIDwvY29weT4KLSAgICAgICAgCisKICAgICAgICAgPGNvcHkgIHRvZGlyPSIke2J1aWxkLmRlc2N9IiBmaWx0ZXJpbmc9Im9uIiBvdmVyd3JpdGU9InllcyIgID4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtzcmMuZGlyfS9kZXNjcmlwdG9yIiA+CiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iYXBwbGljYXRpb24ueG1sIiAvPgpAQCAtMjcwLDcgKzI3MCw3IEBACiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0ic3VuLWoyZWUtcmkueG1sIiAvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8L2NvcHk+Ci0gICAgICAgIAorCiAgICAgICAgIDxjb3B5ICB0b2Rpcj0iJHtidWlsZC5lamJzcmN9IiBmaWx0ZXJpbmc9Im9uIiBvdmVyd3JpdGU9InllcyIgID4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtzcmMuZGlyfS9lamIiID4KICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphdmEiIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L2NsaWVudC9GaW5kSW50ZXJlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvY2xpZW50L0ZpbmRJbnRlcmVzdENsaWVudC5qYXZhCmluZGV4IGUwOGY1ODYuLjE1MzdjMWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvY2xpZW50L0ZpbmRJbnRlcmVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvY2xpZW50L0ZpbmRJbnRlcmVzdENsaWVudC5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheSI7CiAKICAgICBwdWJsaWMgRmluZEludGVyZXN0Q2xpZW50KCkgewotCXN0YXR1cy5hZGREZXNjcmlwdGlvbih0ZXN0SWQpOworICAgIHN0YXR1cy5hZGREZXNjcmlwdGlvbih0ZXN0SWQpOwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC00MSwxNSArNDEsMTUgQEAKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAvLyAgICAgIGNsaWVudC5kb1NlcnZsZXRUZXN0KCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIC8vU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9Ci0JLy8JCSJodHRwOi8vbG9jYWxob3N0OjgwODAvZmluZGludHIvRmluZEludGVyZXN0IjsKKyAgICAvLyAgICAgICAgImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9maW5kaW50ci9GaW5kSW50ZXJlc3QiOwogICAgICAgICBTdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0KLQkJCSJodHRwOi8vbG9jYWxob3N0OjEyMDEzL0ludGVyZXN0SUZQb3J0IjsKKyAgICAgICAgICAgICJodHRwOi8vbG9jYWxob3N0OjEyMDEzL0ludGVyZXN0SUZQb3J0IjsKIAotICAgIAl0cnkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgRmluZEludGVyZXN0IGZpbmRJbnRyU2VydmljZSA9IChGaW5kSW50ZXJlc3QpCiAgICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL0ZpbmRJbnRlcmVzdCIpOwpAQCAtNTcsMjMgKzU3LDIzIEBACiAgICAgICAgICAgICBJbnRlcmVzdElGIGludGVyZXN0SUZQb3J0ID0gZmluZEludHJTZXJ2aWNlLmdldEludGVyZXN0SUZQb3J0KCk7CiAKICAgICAgICAgICAgICgoU3R1YilpbnRlcmVzdElGUG9ydCkuX3NldFByb3BlcnR5IChTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCi0gICAgICAgICAgICAgICAgIAkJCQl0YXJnZXRFbmRwb2ludEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKIAotCSAgICBpbnRlcmVzdElGUG9ydC5jYWxjdWxhdGVJbnRlcmVzdChiYWxhbmNlLCBwZXJpb2QpOwotICAgICAgICAgICAgICAgIAotCSAgICBzdGF0dXMuYWRkU3RhdHVzKHRlc3RJZCArICIxIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuUEFTUyk7CisgICAgICAgIGludGVyZXN0SUZQb3J0LmNhbGN1bGF0ZUludGVyZXN0KGJhbGFuY2UsIHBlcmlvZCk7CiAKLSAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCXN0YXR1cy5hZGRTdGF0dXModGVzdElkICsgIjEgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5GQUlMKTsKKyAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyAiMSA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLlBBU1MpOworCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKHRlc3RJZCArICIxIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbmRpbnRyIGNsaWVudCBmYWlsZWQiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0gCisgICAgfQogICAgIH0KIAogICAgLyogcHVibGljIHZvaWQgZG9TZXJ2bGV0VGVzdCgpIHsKLSAgICAJdHJ5IHsKLQkgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9Ci0JCSJodHRwOi8vbG9jYWxob3N0OjgwODAvRmluZEludGVyZXN0U2VydmxldC9GaW5kSW50ZXJlc3QiOworICAgICAgICB0cnkgeworICAgICAgICBTdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0KKyAgICAgICAgImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9GaW5kSW50ZXJlc3RTZXJ2bGV0L0ZpbmRJbnRlcmVzdCI7CiAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIEZpbmRJbnRlcmVzdCBmaW5kSW50clNlcnZpY2UgPSAoRmluZEludGVyZXN0KQpAQCAtODIsMjIgKzgyLDIyIEBACiAgICAgICAgICAgICBJbnRlcmVzdElGIGludGVyZXN0SUZQb3J0ID0gZmluZEludHJTZXJ2aWNlLmdldEludGVyZXN0SUZQb3J0KCk7CiAKICAgICAgICAgICAgICgoU3R1YilpbnRlcmVzdElGUG9ydCkuX3NldFByb3BlcnR5IChTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCi0JCQkJCQl0YXJnZXRFbmRwb2ludEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKIAotCSAgICBkb3VibGUgaW50ZXJlc3QgPSBpbnRlcmVzdElGUG9ydC5jYWxjdWxhdGVJbnRlcmVzdChiYWxhbmNlLCBwZXJpb2QpOworICAgICAgICBkb3VibGUgaW50ZXJlc3QgPSBpbnRlcmVzdElGUG9ydC5jYWxjdWxhdGVJbnRlcmVzdChiYWxhbmNlLCBwZXJpb2QpOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludGVyZXN0IG9uICQzMDAgZm9yIGEgcGVyaW9kIG9mIDMuNSB5ZWFycyBpcyAiCi0JCQkJKyBpbnRlcmVzdCk7Ci0gICAgICAgICAgICAgICAgCi0JICAgIGlmIChpbnRlcmVzdCA9PSAyMTAuMCkgewotCQlzdGF0dXMuYWRkU3RhdHVzKFRFU1RfU1VJVEVfSUQrIjIgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5QQVNTKTsKLQkgICAgfQotICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJc3RhdHVzLmFkZFN0YXR1cyhURVNUX1NVSVRFX0lEKyIyIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuRkFJTCk7CisgICAgICAgICAgICAgICAgKyBpbnRlcmVzdCk7CisKKyAgICAgICAgaWYgKGludGVyZXN0ID09IDIxMC4wKSB7CisgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoVEVTVF9TVUlURV9JRCsiMiA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLlBBU1MpOworICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKFRFU1RfU1VJVEVfSUQrIjIgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5GQUlMKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmluZGludHIgY2xpZW50IGZhaWxlZCIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSAKLQlzdGF0dXMucHJpbnRTdW1tYXJ5KCJKU1IxMDkgLSBGaW5kSW50ZXJlc3RUZXN0Iik7CisgICAgfQorICAgIHN0YXR1cy5wcmludFN1bW1hcnkoIkpTUjEwOSAtIEZpbmRJbnRlcmVzdFRlc3QiKTsKICAgICB9Ki8KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9jbGllbnQvRmluZEludGVyZXN0Q2xpZW50Tm9uSHR0cEJDLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L2NsaWVudC9GaW5kSW50ZXJlc3RDbGllbnROb25IdHRwQkMuamF2YQppbmRleCBlZTJmNDJhLi4yOTNhNWNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L2NsaWVudC9GaW5kSW50ZXJlc3RDbGllbnROb25IdHRwQkMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L2NsaWVudC9GaW5kSW50ZXJlc3RDbGllbnROb25IdHRwQkMuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkiOwogCiAgICAgcHVibGljIEZpbmRJbnRlcmVzdENsaWVudE5vbkh0dHBCQygpIHsKLQlzdGF0dXMuYWRkRGVzY3JpcHRpb24odGVzdElkKTsKKyAgICBzdGF0dXMuYWRkRGVzY3JpcHRpb24odGVzdElkKTsKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtNDEsMTMgKzQxLDEzIEBACiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgLy8gICAgICBjbGllbnQuZG9TZXJ2bGV0VGVzdCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICBTdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0KLQkJCSJodHRwOi8vbG9jYWxob3N0OjgwODAvZmluZGludHIvRmluZEludGVyZXN0IjsKKyAgICAgICAgICAgICJodHRwOi8vbG9jYWxob3N0OjgwODAvZmluZGludHIvRmluZEludGVyZXN0IjsKIAotICAgIAl0cnkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgRmluZEludGVyZXN0IGZpbmRJbnRyU2VydmljZSA9IChGaW5kSW50ZXJlc3QpCiAgICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL0ZpbmRJbnRlcmVzdCIpOwpAQCAtNTUsMjMgKzU1LDIzIEBACiAgICAgICAgICAgICBJbnRlcmVzdElGIGludGVyZXN0SUZQb3J0ID0gZmluZEludHJTZXJ2aWNlLmdldEludGVyZXN0SUZQb3J0KCk7CiAKICAgICAgICAgICAgICgoU3R1YilpbnRlcmVzdElGUG9ydCkuX3NldFByb3BlcnR5IChTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCi0gICAgICAgICAgICAgICAgIAkJCQl0YXJnZXRFbmRwb2ludEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKIAotCSAgICBpbnRlcmVzdElGUG9ydC5jYWxjdWxhdGVJbnRlcmVzdChiYWxhbmNlLCBwZXJpb2QpOwotICAgICAgICAgICAgICAgIAotCSAgICBzdGF0dXMuYWRkU3RhdHVzKHRlc3RJZCArICIxIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuUEFTUyk7CisgICAgICAgIGludGVyZXN0SUZQb3J0LmNhbGN1bGF0ZUludGVyZXN0KGJhbGFuY2UsIHBlcmlvZCk7CiAKLSAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCXN0YXR1cy5hZGRTdGF0dXModGVzdElkICsgIjEgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5GQUlMKTsKKyAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyAiMSA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLlBBU1MpOworCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKHRlc3RJZCArICIxIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbmRpbnRyIGNsaWVudCBmYWlsZWQiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0gCisgICAgfQogICAgIH0KIAogICAgLyogcHVibGljIHZvaWQgZG9TZXJ2bGV0VGVzdCgpIHsKLSAgICAJdHJ5IHsKLQkgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9Ci0JCSJodHRwOi8vbG9jYWxob3N0OjgwODAvRmluZEludGVyZXN0U2VydmxldC9GaW5kSW50ZXJlc3QiOworICAgICAgICB0cnkgeworICAgICAgICBTdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0KKyAgICAgICAgImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9GaW5kSW50ZXJlc3RTZXJ2bGV0L0ZpbmRJbnRlcmVzdCI7CiAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIEZpbmRJbnRlcmVzdCBmaW5kSW50clNlcnZpY2UgPSAoRmluZEludGVyZXN0KQpAQCAtODAsMjIgKzgwLDIyIEBACiAgICAgICAgICAgICBJbnRlcmVzdElGIGludGVyZXN0SUZQb3J0ID0gZmluZEludHJTZXJ2aWNlLmdldEludGVyZXN0SUZQb3J0KCk7CiAKICAgICAgICAgICAgICgoU3R1YilpbnRlcmVzdElGUG9ydCkuX3NldFByb3BlcnR5IChTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCi0JCQkJCQl0YXJnZXRFbmRwb2ludEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKIAotCSAgICBkb3VibGUgaW50ZXJlc3QgPSBpbnRlcmVzdElGUG9ydC5jYWxjdWxhdGVJbnRlcmVzdChiYWxhbmNlLCBwZXJpb2QpOworICAgICAgICBkb3VibGUgaW50ZXJlc3QgPSBpbnRlcmVzdElGUG9ydC5jYWxjdWxhdGVJbnRlcmVzdChiYWxhbmNlLCBwZXJpb2QpOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludGVyZXN0IG9uICQzMDAgZm9yIGEgcGVyaW9kIG9mIDMuNSB5ZWFycyBpcyAiCi0JCQkJKyBpbnRlcmVzdCk7Ci0gICAgICAgICAgICAgICAgCi0JICAgIGlmIChpbnRlcmVzdCA9PSAyMTAuMCkgewotCQlzdGF0dXMuYWRkU3RhdHVzKFRFU1RfU1VJVEVfSUQrIjIgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5QQVNTKTsKLQkgICAgfQotICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJc3RhdHVzLmFkZFN0YXR1cyhURVNUX1NVSVRFX0lEKyIyIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuRkFJTCk7CisgICAgICAgICAgICAgICAgKyBpbnRlcmVzdCk7CisKKyAgICAgICAgaWYgKGludGVyZXN0ID09IDIxMC4wKSB7CisgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoVEVTVF9TVUlURV9JRCsiMiA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLlBBU1MpOworICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKFRFU1RfU1VJVEVfSUQrIjIgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5GQUlMKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmluZGludHIgY2xpZW50IGZhaWxlZCIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSAKLQlzdGF0dXMucHJpbnRTdW1tYXJ5KCJKU1IxMDkgLSBGaW5kSW50ZXJlc3RUZXN0Iik7CisgICAgfQorICAgIHN0YXR1cy5wcmludFN1bW1hcnkoIkpTUjEwOSAtIEZpbmRJbnRlcmVzdFRlc3QiKTsKICAgICB9Ki8KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9jbGllbnQvU09BUEVqYkNvbnN1bWVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L2NsaWVudC9TT0FQRWpiQ29uc3VtZXIuamF2YQppbmRleCBmYTAyZDVmLi5lNTM2ZWQ2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L2NsaWVudC9TT0FQRWpiQ29uc3VtZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L2NsaWVudC9TT0FQRWpiQ29uc3VtZXIuamF2YQpAQCAtMjMsMTkgKzIzLDE5IEBACiBwdWJsaWMgY2xhc3MgU09BUEVqYkNvbnN1bWVyIHsKICAgICBwcml2YXRlIGRvdWJsZSBiYWxhbmNlID0gMzAwLjAwOwogICAgIHByaXZhdGUgZG91YmxlIHBlcmlvZCA9IDMuNTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdHVzID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkiOwogCiAgICAgcHVibGljIFNPQVBFamJDb25zdW1lcigpIHsKICAgICAgICAgc3RhdHVzLmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIFNPQVBFamJDb25zdW1lciBjbGllbnQgPSBuZXcgU09BUEVqYkNvbnN1bWVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdHVzLnByaW50U3VtbWFyeSh0ZXN0SWQpOwogICAgfQpAQCAtNDUsMjAgKzQ1LDIwIEBACiAgICAgICAgICAvLyAgICAgICAgICAgICAgICJodHRwOi8vbG9jYWxob3N0OjgwODAvc29hcC93ZWIvZmluZGludGVyZXN0IjsKICAgICAgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9CiAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2xvY2FsaG9zdDoxMjAxMy9JbnRlcmVzdElGUG9ydCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBGaW5kSW50ZXJlc3QgZmluZEludHJTZXJ2aWNlID0gKEZpbmRJbnRlcmVzdCkKICAgICAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvRmluZEludGVyZXN0Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBJbnRlcmVzdElGIGludGVyZXN0SUZQb3J0ID0gZmluZEludHJTZXJ2aWNlLmdldEludGVyZXN0SUZQb3J0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAoKFN0dWIpaW50ZXJlc3RJRlBvcnQpLl9zZXRQcm9wZXJ0eSAoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpbnRlcmVzdElGUG9ydC5jYWxjdWxhdGVJbnRlcmVzdChiYWxhbmNlLCBwZXJpb2QpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyAiMSA6IEVKQiBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLlBBU1MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKHRlc3RJZCArICIxIDogRUpCIEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbmRpbnRyIGNsaWVudCBmYWlsZWQiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvY2xpZW50L1NPQVBFamJDb25zdW1lck5vbkh0dHBCQy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9jbGllbnQvU09BUEVqYkNvbnN1bWVyTm9uSHR0cEJDLmphdmEKaW5kZXggMmI1OTM5My4uOWJiYWNkNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9jbGllbnQvU09BUEVqYkNvbnN1bWVyTm9uSHR0cEJDLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9jbGllbnQvU09BUEVqYkNvbnN1bWVyTm9uSHR0cEJDLmphdmEKQEAgLTIzLDE5ICsyMywxOSBAQAogcHVibGljIGNsYXNzIFNPQVBFamJDb25zdW1lck5vbkh0dHBCQyB7CiAgICAgcHJpdmF0ZSBkb3VibGUgYmFsYW5jZSA9IDMwMC4wMDsKICAgICBwcml2YXRlIGRvdWJsZSBwZXJpb2QgPSAzLjU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXR1cyA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5IjsKIAogICAgIHB1YmxpYyBTT0FQRWpiQ29uc3VtZXJOb25IdHRwQkMoKSB7CiAgICAgICAgIHN0YXR1cy5hZGREZXNjcmlwdGlvbih0ZXN0SWQpOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBTT0FQRWpiQ29uc3VtZXJOb25IdHRwQkMgY2xpZW50ID0gbmV3IFNPQVBFamJDb25zdW1lck5vbkh0dHBCQygpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXR1cy5wcmludFN1bW1hcnkodGVzdElkKTsKICAgIH0KQEAgLTQzLDIwICs0MywyMCBAQAogICAgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB7CiAgICAgICAgIFN0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQogICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9zb2FwL3dlYi9maW5kaW50ZXJlc3QiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgRmluZEludGVyZXN0IGZpbmRJbnRyU2VydmljZSA9IChGaW5kSW50ZXJlc3QpCiAgICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL0ZpbmRJbnRlcmVzdCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSW50ZXJlc3RJRiBpbnRlcmVzdElGUG9ydCA9IGZpbmRJbnRyU2VydmljZS5nZXRJbnRlcmVzdElGUG9ydCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgKChTdHViKWludGVyZXN0SUZQb3J0KS5fc2V0UHJvcGVydHkgKFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGludGVyZXN0SUZQb3J0LmNhbGN1bGF0ZUludGVyZXN0KGJhbGFuY2UsIHBlcmlvZCk7ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKworICAgICAgICAgICAgaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsKKwogICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyAiMSA6IEVKQiBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLlBBU1MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKHRlc3RJZCArICIxIDogRUpCIEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbmRpbnRyIGNsaWVudCBmYWlsZWQiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvZWpiL0ludGVyZXN0RUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L2VqYi9JbnRlcmVzdEVKQi5qYXZhCmluZGV4IDRkMWYxOWYuLjQyZGJjNWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvZWpiL0ludGVyZXN0RUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9lamIvSW50ZXJlc3RFSkIuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBteWVqYjsKIAogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTI2LDExICsyNiwxMSBAQAogcHVibGljIGNsYXNzIEludGVyZXN0RUpCIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewogCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYzsKLSAgICAKKwogICAgIHB1YmxpYyBJbnRlcmVzdEVKQigpe30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJlc3RFSkI6OmVqYkNyZWF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJlc3RFSkI6OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGNhbGN1bGF0ZUludGVyZXN0KGRvdWJsZSBiYWxhbmNlLCBkb3VibGUgcGVyaW9kKSB7CkBAIC0zOCwxMyArMzgsMTMgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQorCiAgICAgICAgIHRoaXMuc2MgPSBzYzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCBkMTZjMTU3Li5mMWIzZjdhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbApAQCAtMTksOSArMTksOSBAQAogCiA8IS0tIGpiaS54bWwgZmlsZSBmb3IgdGhlIFNPQVAgYmluZGluZyBkZXBsb3ltZW50cyBiaW5kaW5nLiAtLT4KIDxqYmkKLSAgICB2ZXJzaW9uPSIxLjAiIAotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgIHZlcnNpb249IjEuMCIKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgLi9qYmkueHNkIj4KICAgPHNlcnZpY2UtYXNzZW1ibHk+CiAgICAgPGlkZW50aWZpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCBmNzMyMDNiLi5jZDY3ZGZlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMTgsMTAgKzE4LDEwIEBACiAtLT4KIAogPGpiaSB2ZXJzaW9uPSIxLjAiCi0JIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotCSB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLQkgeG1sbnM6dG5zPSJodHRwOi8vaGVsbG8ub3JnL3dzZGwiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CQkKLQk8L3NlcnZpY2VzPgorICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgICB4bWxuczp0bnM9Imh0dHA6Ly9oZWxsby5vcmcvd3NkbCIKKyAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+CisgICAgPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4KKyAgICA8L3NlcnZpY2VzPgogPC9qYmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L3dlYi9GaW5kSW50ZXJlc3RTZXJ2bGV0SW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS93ZWIvRmluZEludGVyZXN0U2VydmxldEltcGwuamF2YQppbmRleCA2N2YyMjg4Li5kZjM5N2I3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L3dlYi9GaW5kSW50ZXJlc3RTZXJ2bGV0SW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvd2ViL0ZpbmRJbnRlcmVzdFNlcnZsZXRJbXBsLmphdmEKQEAgLTIxLDE1ICsyMSwxNSBAQAogaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CiBpbXBvcnQgamF2YXgueG1sLnJwYy5DYWxsOwogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGphdmF4Lm5hbWluZy4qOwogaW1wb3J0IGphdmF4LnhtbC5ycGMuU2VydmljZTsKIGltcG9ydCBqYXZheC54bWwucnBjLnNlcnZlci5TZXJ2aWNlTGlmZWN5Y2xlOwogaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0LlNpbmdsZVRocmVhZE1vZGVsOwogCi1wdWJsaWMgY2xhc3MgRmluZEludGVyZXN0U2VydmxldEltcGwgaW1wbGVtZW50cyAKLQkJCVNpbmdsZVRocmVhZE1vZGVsLCBTZXJ2aWNlTGlmZWN5Y2xlIHsKK3B1YmxpYyBjbGFzcyBGaW5kSW50ZXJlc3RTZXJ2bGV0SW1wbCBpbXBsZW1lbnRzCisgICAgICAgICAgICBTaW5nbGVUaHJlYWRNb2RlbCwgU2VydmljZUxpZmVjeWNsZSB7CiAKICAgICBwdWJsaWMgRmluZEludGVyZXN0U2VydmxldEltcGwoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmluZEludGVyZXN0U2VydmxldEltcGwoKSBpbnN0YW50aWF0ZWQiKTsKQEAgLTQ0LDYgKzQ0LDYgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBjYWxjdWxhdGVJbnRlcmVzdChkb3VibGUgYmFsYW5jZSwgZG91YmxlIHBlcmlvZCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiY2FsY3VsYXRlSW50ZXJlc3QgaW52b2tlZCBmcm9tIHNlcnZsZXQgZW5kcG9pbnQgIiArICgwLjIqYmFsYW5jZSpwZXJpb2QpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNhbGN1bGF0ZUludGVyZXN0IGludm9rZWQgZnJvbSBzZXJ2bGV0IGVuZHBvaW50ICIgKyAoMC4yKmJhbGFuY2UqcGVyaW9kKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS93c2NvbXBpbGVfY29uZmlnLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvd3Njb21waWxlX2NvbmZpZy54bWwKaW5kZXggNGNmYjk1NC4uYzExYjg4NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS93c2NvbXBpbGVfY29uZmlnLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L3dzY29tcGlsZV9jb25maWcueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249IkZpbmRJbnRlcmVzdC53c2RsIgogICAgICAgcGFja2FnZU5hbWU9Im15ZWpiIi8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L3dzY29tcGlsZV9jb25maWdfY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvd3Njb21waWxlX2NvbmZpZ19jbGllbnQueG1sCmluZGV4IGViZmY2OWMuLjljMzE4YzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvd3Njb21waWxlX2NvbmZpZ19jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvd3Njb21waWxlX2NvbmZpZ19jbGllbnQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249IkZpbmRJbnRlcmVzdC53c2RsIgogICAgICAgcGFja2FnZU5hbWU9Im15Y2xpZW50Ii8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L3dzY29tcGlsZV9jb25maWdfd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvd3Njb21waWxlX2NvbmZpZ193ZWIueG1sCmluZGV4IDlkMWUxMmYuLmU4MDAxY2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvd3Njb21waWxlX2NvbmZpZ193ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvd3Njb21waWxlX2NvbmZpZ193ZWIueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249IkZpbmRJbnRlcmVzdC53c2RsIgogICAgICAgcGFja2FnZU5hbWU9Im15d2ViIi8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGVkOTRjMDUuLmQ3Y2Q4YzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImZpbmRpbnRlcmVzdCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJqYmktY29tcG9uZW50LXN1LWFzc2VtYmx5IiB2YWx1ZT0iZWpiX2ZpbmRpbnRlcmVzdF9hc3NlbWJseSIvPgogPHByb3BlcnR5IG5hbWU9ImpiaS1jb21wb25lbnQtc3UiIHZhbHVlPSJlamJfamF4cnBjX2NvbnN1bWVyX3N1Ii8+CiA8cHJvcGVydHkgbmFtZT0iamJpLWNvbXBvbmVudC1zdS1kaXIiIHZhbHVlPSJzb2FwLWJpbmRpbmctc3UtYWxhc2thIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL2J1aWxkLnhtbAppbmRleCBlZjlkZjM5Li4zNTk2NzFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyb290LmRpciIgdmFsdWU9Ii4iIC8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzcmMuZGlyIiB2YWx1ZT0iLiIgLz4KLQk8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IkZpbmRJbnRlcmVzdEFwcCIgLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IkZpbmRJbnRlcmVzdEFwcCIgLz4KIAogICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQuZGlyIiB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZSIgLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkLnJlcG9zaXRvcnkiIHZhbHVlPSIke2J1aWxkLmRpcn0vYnVpbGRlYXJzIi8+CkBAIC01OCwxMyArNTgsMTMgQEAKIAogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVidWciIHZhbHVlPSJvbiIgLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9InNldHVwIj4KLQk8ZGVsZXRlIGRpcj0iJHtidWlsZC5kaXJ9Ii8+CisgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuZGlyfSIvPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5yZXBvc2l0b3J5fSIvPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5hcHBjbGllbnR9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8IS0tIHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJzZXR1cCxjbGVhbiIgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJ3c2NvbXBpbGUsc2V0dXAiID4KICAgICAgICAgPCEtLSBhbnQgdGFyZ2V0PSJtYWtlZGlycyIvIC0tPgpAQCAtMTAxLDggKzEwMSw4IEBACiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovRmluZEludGVyZXN0X1NjaGVtYS54c2QiIC8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgIDwvamFyPgotICAgICAgICAKLQk8YW50Y2FsbCB0YXJnZXQ9ImNvcHktdG8td2ViaW5mIiAvPgorCisgICAgPGFudGNhbGwgdGFyZ2V0PSJjb3B5LXRvLXdlYmluZiIgLz4KIAogICAgICAgICA8amFyIGphcmZpbGU9IiR7YnVpbGQuamFyc30vd2ViLndhciIgPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLndlYmluZn0iPgpAQCAtMTI3LDggKzEyNyw4IEBACiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgIDwvamFyPgogCi0gICAgICAgIDxqYXIgamFyZmlsZT0iJHtidWlsZC5qYXJzfS9hcHBjbGllbnQuamFyIiAKLQkgICAgIG1hbmlmZXN0PSIke2J1aWxkLmRlc2N9L2NsaWVudC9NQU5JRkVTVC5NRiI+CisgICAgICAgIDxqYXIgamFyZmlsZT0iJHtidWlsZC5qYXJzfS9hcHBjbGllbnQuamFyIgorICAgICAgICAgbWFuaWZlc3Q9IiR7YnVpbGQuZGVzY30vY2xpZW50L01BTklGRVNULk1GIj4KIDwhLS0KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiI+CiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iRklNYXBwaW5nQ2xpZW50LnhtbCIgLz4KQEAgLTE1NCwxNyArMTU0LDE3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvcHktdG8td2ViaW5mIj4KLQk8Y29weSAgdG9kaXI9IiR7YnVpbGQud2ViaW5mfS9XRUItSU5GL2NsYXNzZXMiIGZpbHRlcmluZz0ib24iIG92ZXJ3cml0ZT0ieWVzIiAgPgotCSAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmRlc3R9Ij4KLQkgICAgPGluY2x1ZGUgbmFtZT0ibXl3ZWIvKi5jbGFzcyIvPgotCSAgPC9maWxlc2V0PgotCTwvY29weT4KKyAgICA8Y29weSAgdG9kaXI9IiR7YnVpbGQud2ViaW5mfS9XRUItSU5GL2NsYXNzZXMiIGZpbHRlcmluZz0ib24iIG92ZXJ3cml0ZT0ieWVzIiAgPgorICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmRlc3R9Ij4KKyAgICAgICAgPGluY2x1ZGUgbmFtZT0ibXl3ZWIvKi5jbGFzcyIvPgorICAgICAgPC9maWxlc2V0PgorICAgIDwvY29weT4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZWFyIiBkZXBlbmRzPSJjbGVhbixqYXIiPgotICAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YnVpbGQuZWFyfS8ke2FwcG5hbWV9LmVhciIgCi0JICAgICBhcHB4bWw9IiR7YnVpbGQuZGVzY30vYXBwbGljYXRpb24ueG1sIiAKLQkgICAgIG1hbmlmZXN0PSIke2J1aWxkLmRlc2N9L01BTklGRVNULk1GIj4KKyAgICAgICAgPGVhciBlYXJmaWxlPSIke2J1aWxkLmVhcn0vJHthcHBuYW1lfS5lYXIiCisgICAgICAgICBhcHB4bWw9IiR7YnVpbGQuZGVzY30vYXBwbGljYXRpb24ueG1sIgorICAgICAgICAgbWFuaWZlc3Q9IiR7YnVpbGQuZGVzY30vTUFOSUZFU1QuTUYiPgogCiAgICAgICAgICAgICA8IS0tPGZpbGVzZXQgZGlyPSIke2J1aWxkLmphcnN9IiBpbmNsdWRlcz0iKi5qYXIsLndhciIvPi0tPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmphcnN9IiBpbmNsdWRlcz0iKi5qYXIiLz4KQEAgLTE3NCw5ICsxNzQsOSBAQAogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8L2Vhcj4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJzZXR1cCI+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSJkZXBsb3kiIC8+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSItLXVzZXIiIC8+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2FkbWluLnVzZXJ9IiAvPgpAQCAtMTg3LDEyICsxODcsMTIgQEAKICAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii0tcmV0cmlldmUiIC8+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2J1aWxkLmFwcGNsaWVudH0iIC8+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2J1aWxkLmVhcn0vJHthcHBuYW1lfS5lYXIiIC8+Ci0JPC9leGVjPiAKKyAgICA8L2V4ZWM+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpiaS1jb21wb25lbnQtc3UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9InNldHVwIj4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9InVuZGVwbG95IiAvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLS11c2VyIiAvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHthZG1pbi51c2VyfSIgLz4KQEAgLTIwMSwxOCArMjAxLDE4IEBACiAgICAgICAgICAgICA8YXJnIHZhbHVlPSItLXBvcnQiIC8+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2FkbWluLnBvcnR9IiAvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHthcHBuYW1lfSIgLz4KLQk8L2V4ZWM+IAorICAgIDwvZXhlYz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYmktY29tcG9uZW50LXN1Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50IiBkZXBlbmRzPSJzZXR1cCI+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9Ij4KICAgICAgICAgICAgIDxlbnYga2V5PSJWTUFSR1MiIHZhbHVlPSItRHRlc3QucmVzdWx0cz0ke3Jlc3VsdHMuZmlsZX0iIC8+Ci0JICAgIDxhcmcgdmFsdWU9Ii1jbGllbnQiIC8+Ci0JICAgIDxhcmcgdmFsdWU9IiR7YnVpbGQuYXBwY2xpZW50fS8ke2FwcG5hbWV9Q2xpZW50LmphciIvPgotCSAgICA8YXJnIHZhbHVlPSItbmFtZSIgLz4KLQkgICAgPGFyZyB2YWx1ZT0iTXlBcHBDbGllbnQiIC8+Ci0gICAgPC9leGVjPiAKKyAgICAgICAgPGFyZyB2YWx1ZT0iLWNsaWVudCIgLz4KKyAgICAgICAgPGFyZyB2YWx1ZT0iJHtidWlsZC5hcHBjbGllbnR9LyR7YXBwbmFtZX1DbGllbnQuamFyIi8+CisgICAgICAgIDxhcmcgdmFsdWU9Ii1uYW1lIiAvPgorICAgICAgICA8YXJnIHZhbHVlPSJNeUFwcENsaWVudCIgLz4KKyAgICA8L2V4ZWM+CiAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ibWFrZWRpcnMiPgpAQCAtMjUyLDE0ICsyNTIsMTQgQEAKICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLnhtbCIgLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgPC9jb3B5PgotICAgICAgICAKKwogICAgICAgICA8Y29weSAgdG9kaXI9IiR7YnVpbGQuZGVzY30vY2xpZW50IiBmaWx0ZXJpbmc9Im9uIiBvdmVyd3JpdGU9InllcyIgID4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtzcmMuZGlyfS9kZXNjcmlwdG9yL2NsaWVudCIgPgogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioueG1sIiAvPgotCQk8aW5jbHVkZSBuYW1lPSJNQU5JRkVTVC5NRiIgLz4KKyAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUFOSUZFU1QuTUYiIC8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgIDwvY29weT4KLSAgICAgICAgCisKICAgICAgICAgPGNvcHkgIHRvZGlyPSIke2J1aWxkLmRlc2N9IiBmaWx0ZXJpbmc9Im9uIiBvdmVyd3JpdGU9InllcyIgID4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtzcmMuZGlyfS9kZXNjcmlwdG9yIiA+CiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iYXBwbGljYXRpb24ueG1sIiAvPgpAQCAtMjcyLDcgKzI3Miw3IEBACiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0ic3VuLWoyZWUtcmkueG1sIiAvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8L2NvcHk+Ci0gICAgICAgIAorCiAgICAgICAgIDxjb3B5ICB0b2Rpcj0iJHtidWlsZC5lamJzcmN9IiBmaWx0ZXJpbmc9Im9uIiBvdmVyd3JpdGU9InllcyIgID4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtzcmMuZGlyfS9lamIiID4KICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphdmEiIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvY2xpZW50L0ZpbmRJbnRlcmVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL2NsaWVudC9GaW5kSW50ZXJlc3RDbGllbnQuamF2YQppbmRleCBjNzNhNWQwLi41NTllYjNlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvY2xpZW50L0ZpbmRJbnRlcmVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9jbGllbnQvRmluZEludGVyZXN0Q2xpZW50LmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIiOwogCiAgICAgcHVibGljIEZpbmRJbnRlcmVzdENsaWVudCgpIHsKLQlzdGF0dXMuYWRkRGVzY3JpcHRpb24odGVzdElkKTsKKyAgICBzdGF0dXMuYWRkRGVzY3JpcHRpb24odGVzdElkKTsKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtNDEsMTUgKzQxLDE1IEBACiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgLy8gICAgICBjbGllbnQuZG9TZXJ2bGV0VGVzdCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICAvL1N0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQotCS8vCQkiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2ZpbmRpbnRyL0ZpbmRJbnRlcmVzdCI7CisgICAgLy8gICAgICAgICJodHRwOi8vbG9jYWxob3N0OjgwODAvZmluZGludHIvRmluZEludGVyZXN0IjsKICAgICAgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9Ci0JCQkiaHR0cDovL2xvY2FsaG9zdDoxMjAxMy9JbnRlcmVzdElGUG9ydCI7CisgICAgICAgICAgICAiaHR0cDovL2xvY2FsaG9zdDoxMjAxMy9JbnRlcmVzdElGUG9ydCI7CiAKLSAgICAJdHJ5IHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIEZpbmRJbnRlcmVzdCBmaW5kSW50clNlcnZpY2UgPSAoRmluZEludGVyZXN0KQogICAgICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9GaW5kSW50ZXJlc3QiKTsKQEAgLTU3LDI3ICs1NywyNyBAQAogICAgICAgICAgICAgSW50ZXJlc3RJRiBpbnRlcmVzdElGUG9ydCA9IGZpbmRJbnRyU2VydmljZS5nZXRJbnRlcmVzdElGUG9ydCgpOwogCiAgICAgICAgICAgICAoKFN0dWIpaW50ZXJlc3RJRlBvcnQpLl9zZXRQcm9wZXJ0eSAoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAotICAgICAgICAgICAgICAgICAJCQkJdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7CiAKLQkgICAgZG91YmxlIGludGVyZXN0ID0gaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsKKyAgICAgICAgZG91YmxlIGludGVyZXN0ID0gaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW50ZXJlc3Qgb24gJDMwMCBmb3IgYSBwZXJpb2Qgb2YgMy41IHllYXJzIGlzICIKLQkJCQkrIGludGVyZXN0KTsKLSAgICAgICAgICAgICAgICAKLQkgICAgaWYgKGludGVyZXN0ID09IDEwNS4wKSB7Ci0JCXN0YXR1cy5hZGRTdGF0dXModGVzdElkICsiMSA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLlBBU1MpOwotCSAgICB9CisgICAgICAgICAgICAgICAgKyBpbnRlcmVzdCk7CiAKLSAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCXN0YXR1cy5hZGRTdGF0dXModGVzdElkICsiMSA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLkZBSUwpOworICAgICAgICBpZiAoaW50ZXJlc3QgPT0gMTA1LjApIHsKKyAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyIxIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuUEFTUyk7CisgICAgICAgIH0KKworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyIxIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbmRpbnRyIGNsaWVudCBmYWlsZWQiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0gCisgICAgfQogICAgIH0KIAogICAgLyogcHVibGljIHZvaWQgZG9TZXJ2bGV0VGVzdCgpIHsKLSAgICAJdHJ5IHsKLQkgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9Ci0JCSJodHRwOi8vbG9jYWxob3N0OjgwODAvRmluZEludGVyZXN0U2VydmxldC9GaW5kSW50ZXJlc3QiOworICAgICAgICB0cnkgeworICAgICAgICBTdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0KKyAgICAgICAgImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9GaW5kSW50ZXJlc3RTZXJ2bGV0L0ZpbmRJbnRlcmVzdCI7CiAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIEZpbmRJbnRlcmVzdCBmaW5kSW50clNlcnZpY2UgPSAoRmluZEludGVyZXN0KQpAQCAtODYsMjIgKzg2LDIyIEBACiAgICAgICAgICAgICBJbnRlcmVzdElGIGludGVyZXN0SUZQb3J0ID0gZmluZEludHJTZXJ2aWNlLmdldEludGVyZXN0SUZQb3J0KCk7CiAKICAgICAgICAgICAgICgoU3R1YilpbnRlcmVzdElGUG9ydCkuX3NldFByb3BlcnR5IChTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCi0JCQkJCQl0YXJnZXRFbmRwb2ludEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKIAotCSAgICBkb3VibGUgaW50ZXJlc3QgPSBpbnRlcmVzdElGUG9ydC5jYWxjdWxhdGVJbnRlcmVzdChiYWxhbmNlLCBwZXJpb2QpOworICAgICAgICBkb3VibGUgaW50ZXJlc3QgPSBpbnRlcmVzdElGUG9ydC5jYWxjdWxhdGVJbnRlcmVzdChiYWxhbmNlLCBwZXJpb2QpOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludGVyZXN0IG9uICQzMDAgZm9yIGEgcGVyaW9kIG9mIDMuNSB5ZWFycyBpcyAiCi0JCQkJKyBpbnRlcmVzdCk7Ci0gICAgICAgICAgICAgICAgCi0JICAgIGlmIChpbnRlcmVzdCA9PSAyMTAuMCkgewotCQlzdGF0dXMuYWRkU3RhdHVzKFRFU1RfU1VJVEVfSUQrIjIgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5QQVNTKTsKLQkgICAgfQotICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJc3RhdHVzLmFkZFN0YXR1cyhURVNUX1NVSVRFX0lEKyIyIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuRkFJTCk7CisgICAgICAgICAgICAgICAgKyBpbnRlcmVzdCk7CisKKyAgICAgICAgaWYgKGludGVyZXN0ID09IDIxMC4wKSB7CisgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoVEVTVF9TVUlURV9JRCsiMiA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLlBBU1MpOworICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKFRFU1RfU1VJVEVfSUQrIjIgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5GQUlMKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmluZGludHIgY2xpZW50IGZhaWxlZCIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSAKLQlzdGF0dXMucHJpbnRTdW1tYXJ5KCJKU1IxMDkgLSBGaW5kSW50ZXJlc3RUZXN0Iik7CisgICAgfQorICAgIHN0YXR1cy5wcmludFN1bW1hcnkoIkpTUjEwOSAtIEZpbmRJbnRlcmVzdFRlc3QiKTsKICAgICB9Ki8KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL2NsaWVudC9GaW5kSW50ZXJlc3RDbGllbnROb25IdHRwQkMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9jbGllbnQvRmluZEludGVyZXN0Q2xpZW50Tm9uSHR0cEJDLmphdmEKaW5kZXggOGI5NjYwYy4uYzRlNmRmMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL2NsaWVudC9GaW5kSW50ZXJlc3RDbGllbnROb25IdHRwQkMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvY2xpZW50L0ZpbmRJbnRlcmVzdENsaWVudE5vbkh0dHBCQy5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyIjsKIAogICAgIHB1YmxpYyBGaW5kSW50ZXJlc3RDbGllbnROb25IdHRwQkMoKSB7Ci0Jc3RhdHVzLmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7CisgICAgc3RhdHVzLmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQxLDEzICs0MSwxMyBAQAogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgIC8vICAgICAgY2xpZW50LmRvU2VydmxldFRlc3QoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9Ci0JCQkiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2ZpbmRpbnRyL0ZpbmRJbnRlcmVzdCI7CisgICAgICAgICAgICAiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2ZpbmRpbnRyL0ZpbmRJbnRlcmVzdCI7CiAKLSAgICAJdHJ5IHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIEZpbmRJbnRlcmVzdCBmaW5kSW50clNlcnZpY2UgPSAoRmluZEludGVyZXN0KQogICAgICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9GaW5kSW50ZXJlc3QiKTsKQEAgLTU1LDI3ICs1NSwyNyBAQAogICAgICAgICAgICAgSW50ZXJlc3RJRiBpbnRlcmVzdElGUG9ydCA9IGZpbmRJbnRyU2VydmljZS5nZXRJbnRlcmVzdElGUG9ydCgpOwogCiAgICAgICAgICAgICAoKFN0dWIpaW50ZXJlc3RJRlBvcnQpLl9zZXRQcm9wZXJ0eSAoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAotICAgICAgICAgICAgICAgICAJCQkJdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7CiAKLQkgICAgZG91YmxlIGludGVyZXN0ID0gaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsKKyAgICAgICAgZG91YmxlIGludGVyZXN0ID0gaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW50ZXJlc3Qgb24gJDMwMCBmb3IgYSBwZXJpb2Qgb2YgMy41IHllYXJzIGlzICIKLQkJCQkrIGludGVyZXN0KTsKLSAgICAgICAgICAgICAgICAKLQkgICAgaWYgKGludGVyZXN0ID09IDEwNS4wKSB7Ci0JCXN0YXR1cy5hZGRTdGF0dXModGVzdElkICsiMSA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLlBBU1MpOwotCSAgICB9CisgICAgICAgICAgICAgICAgKyBpbnRlcmVzdCk7CiAKLSAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCXN0YXR1cy5hZGRTdGF0dXModGVzdElkICsiMSA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLkZBSUwpOworICAgICAgICBpZiAoaW50ZXJlc3QgPT0gMTA1LjApIHsKKyAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyIxIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuUEFTUyk7CisgICAgICAgIH0KKworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyIxIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbmRpbnRyIGNsaWVudCBmYWlsZWQiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0gCisgICAgfQogICAgIH0KIAogICAgLyogcHVibGljIHZvaWQgZG9TZXJ2bGV0VGVzdCgpIHsKLSAgICAJdHJ5IHsKLQkgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9Ci0JCSJodHRwOi8vbG9jYWxob3N0OjgwODAvRmluZEludGVyZXN0U2VydmxldC9GaW5kSW50ZXJlc3QiOworICAgICAgICB0cnkgeworICAgICAgICBTdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0KKyAgICAgICAgImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9GaW5kSW50ZXJlc3RTZXJ2bGV0L0ZpbmRJbnRlcmVzdCI7CiAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIEZpbmRJbnRlcmVzdCBmaW5kSW50clNlcnZpY2UgPSAoRmluZEludGVyZXN0KQpAQCAtODQsMjIgKzg0LDIyIEBACiAgICAgICAgICAgICBJbnRlcmVzdElGIGludGVyZXN0SUZQb3J0ID0gZmluZEludHJTZXJ2aWNlLmdldEludGVyZXN0SUZQb3J0KCk7CiAKICAgICAgICAgICAgICgoU3R1YilpbnRlcmVzdElGUG9ydCkuX3NldFByb3BlcnR5IChTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCi0JCQkJCQl0YXJnZXRFbmRwb2ludEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKIAotCSAgICBkb3VibGUgaW50ZXJlc3QgPSBpbnRlcmVzdElGUG9ydC5jYWxjdWxhdGVJbnRlcmVzdChiYWxhbmNlLCBwZXJpb2QpOworICAgICAgICBkb3VibGUgaW50ZXJlc3QgPSBpbnRlcmVzdElGUG9ydC5jYWxjdWxhdGVJbnRlcmVzdChiYWxhbmNlLCBwZXJpb2QpOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludGVyZXN0IG9uICQzMDAgZm9yIGEgcGVyaW9kIG9mIDMuNSB5ZWFycyBpcyAiCi0JCQkJKyBpbnRlcmVzdCk7Ci0gICAgICAgICAgICAgICAgCi0JICAgIGlmIChpbnRlcmVzdCA9PSAyMTAuMCkgewotCQlzdGF0dXMuYWRkU3RhdHVzKFRFU1RfU1VJVEVfSUQrIjIgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5QQVNTKTsKLQkgICAgfQotICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJc3RhdHVzLmFkZFN0YXR1cyhURVNUX1NVSVRFX0lEKyIyIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuRkFJTCk7CisgICAgICAgICAgICAgICAgKyBpbnRlcmVzdCk7CisKKyAgICAgICAgaWYgKGludGVyZXN0ID09IDIxMC4wKSB7CisgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoVEVTVF9TVUlURV9JRCsiMiA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLlBBU1MpOworICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKFRFU1RfU1VJVEVfSUQrIjIgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5GQUlMKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmluZGludHIgY2xpZW50IGZhaWxlZCIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSAKLQlzdGF0dXMucHJpbnRTdW1tYXJ5KCJKU1IxMDkgLSBGaW5kSW50ZXJlc3RUZXN0Iik7CisgICAgfQorICAgIHN0YXR1cy5wcmludFN1bW1hcnkoIkpTUjEwOSAtIEZpbmRJbnRlcmVzdFRlc3QiKTsKICAgICB9Ki8KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL2NsaWVudC9TT0FQRWpiQ29uc3VtZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9jbGllbnQvU09BUEVqYkNvbnN1bWVyLmphdmEKaW5kZXggZTEyM2ZlYS4uZDI2MTc1YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL2NsaWVudC9TT0FQRWpiQ29uc3VtZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvY2xpZW50L1NPQVBFamJDb25zdW1lci5qYXZhCkBAIC0yMywxOSArMjMsMTkgQEAKIHB1YmxpYyBjbGFzcyBTT0FQRWpiQ29uc3VtZXIgewogICAgIHByaXZhdGUgZG91YmxlIGJhbGFuY2UgPSAzMDAuMDA7CiAgICAgcHJpdmF0ZSBkb3VibGUgcGVyaW9kID0gMy41OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0dXMgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyIjsKIAogICAgIHB1YmxpYyBTT0FQRWpiQ29uc3VtZXIoKSB7CiAgICAgICAgIHN0YXR1cy5hZGREZXNjcmlwdGlvbih0ZXN0SWQpOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBTT0FQRWpiQ29uc3VtZXIgY2xpZW50ID0gbmV3IFNPQVBFamJDb25zdW1lcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXR1cy5wcmludFN1bW1hcnkodGVzdElkKTsKICAgIH0KQEAgLTQ1LDIzICs0NSwyMyBAQAogICAgICAgICAgLy8gICAgICAgICAgICAgICAiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3NvYXAvd2ViL2ZpbmRpbnRlcmVzdCI7CiAgICAgICAgIFN0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQogICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9sb2NhbGhvc3Q6MTIwMTMvSW50ZXJlc3RJRlBvcnQiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgRmluZEludGVyZXN0IGZpbmRJbnRyU2VydmljZSA9IChGaW5kSW50ZXJlc3QpCiAgICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL0ZpbmRJbnRlcmVzdCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSW50ZXJlc3RJRiBpbnRlcmVzdElGUG9ydCA9IGZpbmRJbnRyU2VydmljZS5nZXRJbnRlcmVzdElGUG9ydCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgKChTdHViKWludGVyZXN0SUZQb3J0KS5fc2V0UHJvcGVydHkgKFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgZG91YmxlIGludGVyZXN0ID0gaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludGVyZXN0IG9uICQzMDAgZm9yIGEgcGVyaW9kIG9mIDMuNSB5ZWFycyBpcyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZXJlc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGludGVyZXN0ID09IDEwNS4wKSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyIxIDogRUpCIEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuUEFTUyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdElkICsiMSA6IEVKQiBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaW5kaW50ciBjbGllbnQgZmFpbGVkIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvY2xpZW50L1NPQVBFamJDb25zdW1lck5vbkh0dHBCQy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL2NsaWVudC9TT0FQRWpiQ29uc3VtZXJOb25IdHRwQkMuamF2YQppbmRleCA1MmRkYjZmLi5hMzJkNGVmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvY2xpZW50L1NPQVBFamJDb25zdW1lck5vbkh0dHBCQy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9jbGllbnQvU09BUEVqYkNvbnN1bWVyTm9uSHR0cEJDLmphdmEKQEAgLTIzLDE5ICsyMywxOSBAQAogcHVibGljIGNsYXNzIFNPQVBFamJDb25zdW1lck5vbkh0dHBCQyB7CiAgICAgcHJpdmF0ZSBkb3VibGUgYmFsYW5jZSA9IDMwMC4wMDsKICAgICBwcml2YXRlIGRvdWJsZSBwZXJpb2QgPSAzLjU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXR1cyA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIiOwogCiAgICAgcHVibGljIFNPQVBFamJDb25zdW1lck5vbkh0dHBCQygpIHsKICAgICAgICAgc3RhdHVzLmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIFNPQVBFamJDb25zdW1lck5vbkh0dHBCQyBjbGllbnQgPSBuZXcgU09BUEVqYkNvbnN1bWVyTm9uSHR0cEJDKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdHVzLnByaW50U3VtbWFyeSh0ZXN0SWQpOwogICAgfQpAQCAtNDMsMjMgKzQzLDIzIEBACiAgICAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHsKICAgICAgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9CiAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3NvYXAvd2ViL2ZpbmRpbnRlcmVzdCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBGaW5kSW50ZXJlc3QgZmluZEludHJTZXJ2aWNlID0gKEZpbmRJbnRlcmVzdCkKICAgICAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvRmluZEludGVyZXN0Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBJbnRlcmVzdElGIGludGVyZXN0SUZQb3J0ID0gZmluZEludHJTZXJ2aWNlLmdldEludGVyZXN0SUZQb3J0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAoKFN0dWIpaW50ZXJlc3RJRlBvcnQpLl9zZXRQcm9wZXJ0eSAoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBkb3VibGUgaW50ZXJlc3QgPSBpbnRlcmVzdElGUG9ydC5jYWxjdWxhdGVJbnRlcmVzdChiYWxhbmNlLCBwZXJpb2QpOyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW50ZXJlc3Qgb24gJDMwMCBmb3IgYSBwZXJpb2Qgb2YgMy41IHllYXJzIGlzICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBpbnRlcmVzdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoaW50ZXJlc3QgPT0gMTA1LjApIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKHRlc3RJZCArIjEgOiBFSkIgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5QQVNTKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyIxIDogRUpCIEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbmRpbnRyIGNsaWVudCBmYWlsZWQiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9lamIvSW50ZXJlc3RFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9lamIvSW50ZXJlc3RFSkIuamF2YQppbmRleCBkNmY5NGFmLi44ZDcwOTQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvZWpiL0ludGVyZXN0RUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL2VqYi9JbnRlcmVzdEVKQi5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIG15ZWpiOwogCiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMjYsMTEgKzI2LDExIEBACiBwdWJsaWMgY2xhc3MgSW50ZXJlc3RFSkIgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7CiAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjOwotICAgIAorCiAgICAgcHVibGljIEludGVyZXN0RUpCKCl7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmVzdEVKQjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmVzdEVKQjo6ZWpiQ3JlYXRlICEhIik7CiAgICAgfQogCiAgICAgcHVibGljIGRvdWJsZSBjYWxjdWxhdGVJbnRlcmVzdChkb3VibGUgYmFsYW5jZSwgZG91YmxlIHBlcmlvZCkgewpAQCAtMzksMTMgKzM5LDEzIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQkKKwogICAgICAgICB0aGlzLnNjID0gc2M7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCmluZGV4IGQxNmMxNTcuLmYxYjNmN2EgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbApAQCAtMTksOSArMTksOSBAQAogCiA8IS0tIGpiaS54bWwgZmlsZSBmb3IgdGhlIFNPQVAgYmluZGluZyBkZXBsb3ltZW50cyBiaW5kaW5nLiAtLT4KIDxqYmkKLSAgICB2ZXJzaW9uPSIxLjAiIAotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgIHZlcnNpb249IjEuMCIKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgLi9qYmkueHNkIj4KICAgPHNlcnZpY2UtYXNzZW1ibHk+CiAgICAgPGlkZW50aWZpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKaW5kZXggZTA4OTE1Yy4uYmVlNjdhOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOCwxNCArMTgsMTQgQEAKIC0tPgogCiA8amJpIHZlcnNpb249IjEuMCIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotCSB4bWxuczp0bnM9Imh0dHA6Ly9oZWxsby5vcmcvd3NkbCIKLQkgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+Ci0JPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4JCQotCSA8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpGaW5kSW50ZXJlc3RJbnRlcmZhY2UiCisgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgIHhtbG5zOnRucz0iaHR0cDovL2hlbGxvLm9yZy93c2RsIgorICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgorICAgICA8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpGaW5kSW50ZXJlc3RJbnRlcmZhY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkZpbmRJbnRlcmVzdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtbmFtZT0iSW50ZXJlc3RJRlBvcnQiLz4KICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RzIHhtbG5zPSIiIHJvbGU9ImNvbnN1bWVyIiBmaWxlLW5hbWU9ImVuZHBvaW50cy54bWwiIHR5cGU9InhtbCIvPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3NvYXAtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3NvYXAtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCmluZGV4IGZjYzAwMDcuLjM4OTFkNTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9zb2FwLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKQEAgLTE5LDkgKzE5LDkgQEAKIAogPCEtLSBqYmkueG1sIGZpbGUgZm9yIHRoZSBTT0FQIGJpbmRpbmcgZGVwbG95bWVudHMgYmluZGluZy4gLS0+CiA8amJpCi0gICAgdmVyc2lvbj0iMS4wIiAKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICB2ZXJzaW9uPSIxLjAiCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIC4vamJpLnhzZCI+CiAgIDxzZXJ2aWNlLWFzc2VtYmx5PgogICAgIDxpZGVudGlmaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9zb2FwLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9zb2FwLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCAxNjEwZGVlLi43NjJjZTQ1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3NvYXAtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOCwxNCArMTgsMTQgQEAKIC0tPgogCiA8amJpIHZlcnNpb249IjEuMCIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotCSB4bWxuczp0bnM9Imh0dHA6Ly9oZWxsby5vcmcvd3NkbCIKLQkgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+Ci0JPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4JCQotCQk8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpGaW5kSW50ZXJlc3RJbnRlcmZhY2UiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkZpbmRJbnRlcmVzdCIgCisgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgIHhtbG5zOnRucz0iaHR0cDovL2hlbGxvLm9yZy93c2RsIgorICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgorICAgICAgICA8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpGaW5kSW50ZXJlc3RJbnRlcmZhY2UiCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkZpbmRJbnRlcmVzdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtbmFtZT0iSW50ZXJlc3RJRlBvcnQiLz4KICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RzIHhtbG5zPSIiIHJvbGU9ImNvbnN1bWVyIiBmaWxlLW5hbWU9ImVuZHBvaW50cy54bWwiIHR5cGU9InhtbCIvPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3NvYXAtYmluZGluZy1zdS9zdS9lbmRwb2ludHMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3NvYXAtYmluZGluZy1zdS9zdS9lbmRwb2ludHMueG1sCmluZGV4IDBhNzg2OWQuLjJhMjY1NGQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9zb2FwLWJpbmRpbmctc3Uvc3UvZW5kcG9pbnRzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1L3N1L2VuZHBvaW50cy54bWwKQEAgLTIxLDIyICsyMSwyMiBAQAogICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnN1bi5jb20vbnMvamJpL2NvbXBvbmVudC9zb2FwL2RlcGxveSAuL2VuZHBvaW50cy54c2QiPgogPHNlcnZpY2UtbmFtZT4KLQk8bmFtZXNwYWNlLXVyaT5odHRwOi8vaGVsbG8ub3JnL3dzZGw8L25hbWVzcGFjZS11cmk+Ci0JPGxvY2FsLXBhcnQ+RmluZEludGVyZXN0PC9sb2NhbC1wYXJ0PgorICAgIDxuYW1lc3BhY2UtdXJpPmh0dHA6Ly9oZWxsby5vcmcvd3NkbDwvbmFtZXNwYWNlLXVyaT4KKyAgICA8bG9jYWwtcGFydD5GaW5kSW50ZXJlc3Q8L2xvY2FsLXBhcnQ+CiAgICAgPC9zZXJ2aWNlLW5hbWU+CiAgICAgPGVuZHBvaW50LW5hbWU+SW50ZXJlc3RJRlBvcnQ8L2VuZHBvaW50LW5hbWU+CiAgICAgPGVuZHBvaW50LXJvbGU+Y29uc3VtZXI8L2VuZHBvaW50LXJvbGU+Ci0gICAgPGFkZHJlc3MtbG9jYXRpb24+aHR0cDovL2xvY2FsaG9zdDo4MDgwL3NvYXAvd2ViL2ZpbmRpbnRlcmVzdDwvYWRkcmVzcy1sb2NhdGlvbj4gCi0gICAgPHN0eWxlPmh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDgvd3NkbC9zdHlsZS9ycGM8L3N0eWxlPiAgICAgICAgICAgICAKKyAgICA8YWRkcmVzcy1sb2NhdGlvbj5odHRwOi8vbG9jYWxob3N0OjgwODAvc29hcC93ZWIvZmluZGludGVyZXN0PC9hZGRyZXNzLWxvY2F0aW9uPgorICAgIDxzdHlsZT5odHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwvc3R5bGUvcnBjPC9zdHlsZT4KICAgICA8b3BlcmF0aW9uPgogICAgICAgICA8bmFtZT5jYWxjdWxhdGVJbnRlcmVzdDwvbmFtZT4KLSAgICAgICAgPG1lcD5odHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwvaW4tb3V0PC9tZXA+ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgPG1lcD5odHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwvaW4tb3V0PC9tZXA+CiAgICAgICAgIDxzb2FwYWN0aW9uPiIiPC9zb2FwYWN0aW9uPgogICAgICAgICA8aW5wdXQ+CiAgICAgICAgICAgPG5hbWVzcGFjZS11cmk+aHR0cDovL2hlbGxvLm9yZy93c2RsPC9uYW1lc3BhY2UtdXJpPgogICAgICAgICA8L2lucHV0PgogICAgICAgICA8b3V0cHV0PgogICAgICAgICAgIDxuYW1lc3BhY2UtdXJpPmh0dHA6Ly9oZWxsby5vcmcvd3NkbDwvbmFtZXNwYWNlLXVyaT4KLSAgICAgICAgPC9vdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgPC9vdXRwdXQ+CiAgICAgPC9vcGVyYXRpb24+Ci08L2VuZHBvaW50PiAKKzwvZW5kcG9pbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvd2ViL0ZpbmRJbnRlcmVzdFNlcnZsZXRJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvd2ViL0ZpbmRJbnRlcmVzdFNlcnZsZXRJbXBsLmphdmEKaW5kZXggZGY2NjIwZC4uNDllZDM2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3dlYi9GaW5kSW50ZXJlc3RTZXJ2bGV0SW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci93ZWIvRmluZEludGVyZXN0U2VydmxldEltcGwuamF2YQpAQCAtMjEsMTUgKzIxLDE1IEBACiBpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKIGltcG9ydCBqYXZheC54bWwucnBjLkNhbGw7CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamF2YXgubmFtaW5nLio7CiBpbXBvcnQgamF2YXgueG1sLnJwYy5TZXJ2aWNlOwogaW1wb3J0IGphdmF4LnhtbC5ycGMuc2VydmVyLlNlcnZpY2VMaWZlY3ljbGU7CiBpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuU2luZ2xlVGhyZWFkTW9kZWw7CiAKLXB1YmxpYyBjbGFzcyBGaW5kSW50ZXJlc3RTZXJ2bGV0SW1wbCBpbXBsZW1lbnRzIAotCQkJU2luZ2xlVGhyZWFkTW9kZWwsIFNlcnZpY2VMaWZlY3ljbGUgeworcHVibGljIGNsYXNzIEZpbmRJbnRlcmVzdFNlcnZsZXRJbXBsIGltcGxlbWVudHMKKyAgICAgICAgICAgIFNpbmdsZVRocmVhZE1vZGVsLCBTZXJ2aWNlTGlmZWN5Y2xlIHsKIAogICAgIHB1YmxpYyBGaW5kSW50ZXJlc3RTZXJ2bGV0SW1wbCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGaW5kSW50ZXJlc3RTZXJ2bGV0SW1wbCgpIGluc3RhbnRpYXRlZCIpOwpAQCAtNDQsNyArNDQsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBkb3VibGUgY2FsY3VsYXRlSW50ZXJlc3QoZG91YmxlIGJhbGFuY2UsIGRvdWJsZSBwZXJpb2QpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImNhbGN1bGF0ZUludGVyZXN0IGludm9rZWQgZnJvbSBzZXJ2bGV0IGVuZHBvaW50Iik7Ci0JcmV0dXJuIDAuMipiYWxhbmNlKnBlcmlvZDsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNhbGN1bGF0ZUludGVyZXN0IGludm9rZWQgZnJvbSBzZXJ2bGV0IGVuZHBvaW50Iik7CisgICAgcmV0dXJuIDAuMipiYWxhbmNlKnBlcmlvZDsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvd3Njb21waWxlX2NvbmZpZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvd3Njb21waWxlX2NvbmZpZy54bWwKaW5kZXggNGNmYjk1NC4uYzExYjg4NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3dzY29tcGlsZV9jb25maWcueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci93c2NvbXBpbGVfY29uZmlnLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJGaW5kSW50ZXJlc3Qud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJteWVqYiIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3dzY29tcGlsZV9jb25maWdfY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci93c2NvbXBpbGVfY29uZmlnX2NsaWVudC54bWwKaW5kZXggZWJmZjY5Yy4uOWMzMThjOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3dzY29tcGlsZV9jb25maWdfY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvd3Njb21waWxlX2NvbmZpZ19jbGllbnQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249IkZpbmRJbnRlcmVzdC53c2RsIgogICAgICAgcGFja2FnZU5hbWU9Im15Y2xpZW50Ii8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvd3Njb21waWxlX2NvbmZpZ193ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3dzY29tcGlsZV9jb25maWdfd2ViLnhtbAppbmRleCA5ZDFlMTJmLi5lODAwMWNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvd3Njb21waWxlX2NvbmZpZ193ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci93c2NvbXBpbGVfY29uZmlnX3dlYi54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHdzZGwgCisgIDx3c2RsCiAgICAgICBsb2NhdGlvbj0iRmluZEludGVyZXN0LndzZGwiCiAgICAgICBwYWNrYWdlTmFtZT0ibXl3ZWIiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamJpX2NvbW1vbnMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYmlfY29tbW9ucy54bWwKaW5kZXggMDJlOGM1Ny4uZjMzMzM1YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYmlfY29tbW9ucy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYmlfY29tbW9ucy54bWwKQEAgLTMwLDcgKzMwLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS1zZXJ2aWNlLWFzc2VtYmx5IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8cHJvcGVydHkgbmFtZT0iYmFzZS1kaXIiIHZhbHVlPSIuIi8+CiAgICAgICA8cHJvcGVydHkgbmFtZT0idGVtcCIgdmFsdWU9IiR7YmFzZS1kaXJ9L3RlbXAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0ic3UtZGlyIiB2YWx1ZT0iJHtiYXNlLWRpcn0vJHtqYmktY29tcG9uZW50LXN1LWRpcn0iLz4gCisgICAgICA8cHJvcGVydHkgbmFtZT0ic3UtZGlyIiB2YWx1ZT0iJHtiYXNlLWRpcn0vJHtqYmktY29tcG9uZW50LXN1LWRpcn0iLz4KICAgICAgIDxta2RpciBkaXI9IiR7dGVtcH0iLz4KICAgICAgIDxqYXIgYmFzZWRpcj0iJHtzdS1kaXJ9L3N1IiBkZXN0ZmlsZT0iJHt0ZW1wfS8ke2piaS1jb21wb25lbnQtc3V9LmphciIvPgogICAgICAgPGNvcHkgdG9kaXI9IiR7dGVtcH0iPgpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNodXQtZG93bi1zZXJ2aWNlLWFzc2VtYmx5Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktc2VydmljZS1hc3NlbWJseSIvPgogICAgIDwvdGFyZ2V0PgotICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic3RvcC1zZXJ2aWNlLWFzc2VtYmx5IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50IGRpcj0iJHtqYmktaW5zdGFsbGF0aW9ufS9iaW4iIGFudGZpbGU9IiR7amJpLWluc3RhbGxhdGlvbn0vYmluL2piaV9hZG1pbi54bWwiIHRhcmdldD0KICJzdG9wLXNlcnZpY2UtYXNzZW1ibHkiPgpAQCAtOTIsMTIgKzkyLDEyIEBACiAgICAgICA8L2FudD4KICAgICA8L3RhcmdldD4KIAotICAgIDwhLS0gCi0JQXJndW1lbnRzIHRvIHRoaXMgdGFyZ2V0IGFyZS0KLQkJYXBwTmFtZSAtIGFwcGxpY2F0aW9uIG5hbWUKLQkJd3NOYW1lICAtIHdlYiBzZXJ2aWNlIG5hbWUKLQkJbW9kdWxlICAtIGVqYi1tb2R1bGV8d2ViLW1vZHVsZXxqMmVlLWFwcGxpY2F0aW9uLmVqYi1tb2R1bGV8ajJlZS1hcHBsaWNhdGlvbi53ZWItbW9kdWxlCi0JCWZsYWcJLSB0cnVlfGZhbHNlCisgICAgPCEtLQorICAgIEFyZ3VtZW50cyB0byB0aGlzIHRhcmdldCBhcmUtCisgICAgICAgIGFwcE5hbWUgLSBhcHBsaWNhdGlvbiBuYW1lCisgICAgICAgIHdzTmFtZSAgLSB3ZWIgc2VydmljZSBuYW1lCisgICAgICAgIG1vZHVsZSAgLSBlamItbW9kdWxlfHdlYi1tb2R1bGV8ajJlZS1hcHBsaWNhdGlvbi5lamItbW9kdWxlfGoyZWUtYXBwbGljYXRpb24ud2ViLW1vZHVsZQorICAgICAgICBmbGFnICAgIC0gdHJ1ZXxmYWxzZQogICAgIC0tPgogICAgIDx0YXJnZXQgbmFtZT0ic2V0LWpiaS1lbmFibGVkIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL29uZXdheS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDU3OWRlYzYuLjVlZDBlYjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjYWxjLXdlYi1jbGllbnQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvYnVpbGQueG1sCmluZGV4IGEyZTczNjAuLjFiZmMxNjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL29uZXdheS9idWlsZC54bWwKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgICAgICAgIHZhbHVlPSIta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9jYWxjLXdlYi1jbGllbnQvd2Vic2VydmljZS9PbmVXYXlTZXJ2aWNlP1dTREwiLz4KICAgICA8L2FudGNhbGw+CiAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIgotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIiAKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJ3ZWJjbGllbnQvKioiLz4KICAgICAgIDxjb3B5IGZpbGU9Ii4vY2xpZW50LXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvd2ViLnhtbCIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jbGllbnQtc3VuLXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvc3VuLXdlYi54bWwiLz4KQEAgLTEwOSwxMSArMTA5LDExIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5UZXN0Q2xpZW50Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvY2xpZW50LXdlYi54bWwKaW5kZXggZWViNzMwZC4uNzk1YjA1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggZDc2NjJlZi4uZGE3Y2MxNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL29uZXdheS9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL29uZXdheSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9vbmV3YXkiOwogICAgIHB1YmxpYyBib29sZWFuIGZvdW5kMSA9IGZhbHNlOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQ0LDEyICs0NCwxMiBAQAogCiAgICAgICAgIFN0cmluZyB1cmwgPSBhcmdzWzBdOwogICAgICAgICB0cnkgewotCQkJLy9mb3IoaW50IGk9MDsgaTwxMDA7IGkrKykgeworICAgICAgICAgICAgLy9mb3IoaW50IGk9MDsgaTwxMDA7IGkrKykgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JCQkvL30KLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBmYWlsKCk7CisgICAgICAgICAgICAvL30KKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIC8vaWYobGluZS5pbmRleE9mKCJFeGNlcHRpb24gdGhyb3duIFN1Y2Nlc3NmdWxseSIpICE9IC0xKQogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJFbmRwb2ludCBpcyBpbnZva2VkIHN1Y2Nlc3NmdWxseSIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L2VuZHBvaW50L09uZVdheS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvZW5kcG9pbnQvT25lV2F5LmphdmEKaW5kZXggZjA5YjM4Yi4uMDgyYjQ3NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvZW5kcG9pbnQvT25lV2F5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvZW5kcG9pbnQvT25lV2F5LmphdmEKQEAgLTI2LDIwICsyNiwyMCBAQAogICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvT25lV2F5IgogKQogcHVibGljIGNsYXNzIE9uZVdheSB7Ci0JcHVibGljIE9uZVdheSgpIHt9CisgICAgcHVibGljIE9uZVdheSgpIHt9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InN1YnRyYWN0IiwgYWN0aW9uPSJ1cm46U3VidHJhY3QiKQotCUBPbmV3YXkKLQlwdWJsaWMgdm9pZCBzdWJ0cmFjdChpbnQgaSwgaW50IGopIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIqKiogSW5zaWRlIHN1YnRyYWN0KCIraSsiLCAiK2orIikiKTsKKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InN1YnRyYWN0IiwgYWN0aW9uPSJ1cm46U3VidHJhY3QiKQorICAgIEBPbmV3YXkKKyAgICBwdWJsaWMgdm9pZCBzdWJ0cmFjdChpbnQgaSwgaW50IGopIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKiogSW5zaWRlIHN1YnRyYWN0KCIraSsiLCAiK2orIikiKTsKICAgICAgICAgICAgICAgICBpbnQgayA9IGkgLWogOwotCQlpZihpID09IDEwMSkKLQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUaGlzIGlzIG15IGV4Y2VwdGlvbiBpbiBzdWJ0cmFjdCAuLi4iKTsKLQl9CisgICAgICAgIGlmKGkgPT0gMTAxKQorICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlRoaXMgaXMgbXkgZXhjZXB0aW9uIGluIHN1YnRyYWN0IC4uLiIpOworICAgIH0KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGkiLCBhY3Rpb249InVybjpTYXlIaSIpCi0JQE9uZXdheQotCXB1YmxpYyB2b2lkIHNheUhpKCkgeworICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGkiLCBhY3Rpb249InVybjpTYXlIaSIpCisgICAgQE9uZXdheQorICAgIHB1YmxpYyB2b2lkIHNheUhpKCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqIEhpIGZyb20gT25lV2F5Iik7Ci0JfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCA5NTg3Mzc2Li5lMzVlMTQ4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL29uZXdheS9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOSw5ICsxOSw5IEBACiAKIDwhLS0gamJpLnhtbCBmaWxlIGZvciB0aGUgU09BUCBiaW5kaW5nIGRlcGxveW1lbnRzIGJpbmRpbmcuIC0tPgogPGpiaQotICAgIHZlcnNpb249IjEuMCIgCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgdmVyc2lvbj0iMS4wIgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSAuL2piaS54c2QiPgogICA8c2VydmljZS1hc3NlbWJseT4KICAgICA8aWRlbnRpZmljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL29uZXdheS9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL29uZXdheS9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKaW5kZXggNTM1MGY1ZS4uYzMzZjE2NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMTgsMTUgKzE4LDE1IEBACiAtLT4KIAogPGpiaSB2ZXJzaW9uPSIxLjAiCi0JIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotCSB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLQkgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKLQkgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9PbmVXYXkiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CQkKLQkgPHByb3ZpZGVzIGludGVyZmFjZS1uYW1lPSJ0bnM6T25lV2F5U2VydmljZUludGVyZmFjZSIKKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICAgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKKyAgICAgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9PbmVXYXkiCisgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgorICAgIDxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CisgICAgIDxwcm92aWRlcyBpbnRlcmZhY2UtbmFtZT0idG5zOk9uZVdheVNlcnZpY2VJbnRlcmZhY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOk9uZVdheVNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9Ik9uZVdheVBvcnQiLz4KICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RzIHhtbG5zPSIiIHJvbGU9InByb3ZpZGVyIiBmaWxlLW5hbWU9ImVuZHBvaW50cy54bWwiIHR5cGU9InhtbCIvPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L3dlYi54bWwKaW5kZXggMjI2ZjY1NC4uYzA4OTAxZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL29uZXdheS93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBPbmVXYXkgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5PbmVXYXlXQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIE9uZVdheSBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPk9uZVdheVdBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgT25lV2F5IFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5PbmVXYXlXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+T25lV2F5PC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50Lk9uZVdheTwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIE9uZVdheSBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+T25lV2F5V2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPk9uZVdheTwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5PbmVXYXk8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+T25lV2F5PC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9PbmVXYXlTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPk9uZVdheTwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvT25lV2F5U2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMWU4YjZhYS4uMTQxM2Y4ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL29uZXdheS93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNyw0MCArMjcsNDAgQEAKIHB1YmxpYyBjbGFzcyBDbGllbnQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgICAgICBAV2ViU2VydmljZVJlZihuYW1lPSJzdW4td2ViLnNlcnZpY2VyZWYvb25ld2F5IikgT25lV2F5U2VydmljZSBzZXJ2aWNlOwotCSAgIC8vc3RhdGljIE9uZVdheSBwb3J0OworICAgICAgIC8vc3RhdGljIE9uZVdheSBwb3J0OwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCiAgICAgICAgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7Ci0JICAgIFByaW50V3JpdGVyIG91dD1udWxsOworICAgICAgICBQcmludFdyaXRlciBvdXQ9bnVsbDsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgU2VydmljZSBpcyA6IiArIHNlcnZpY2UpOwogICAgICAgICAgICAgICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwotICAgICAgICAgICAgCW91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CisgICAgICAgICAgICAgICAgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKICAgICAgICAgICAgICAgICBPbmVXYXkgcG9ydCA9IHNlcnZpY2UuZ2V0T25lV2F5UG9ydCgpOwotCQkJCS8vaWYgKHBvcnQgPT0gbnVsbCkgcG9ydCA9IHNlcnZpY2UuZ2V0T25lV2F5UG9ydCgpOworICAgICAgICAgICAgICAgIC8vaWYgKHBvcnQgPT0gbnVsbCkgcG9ydCA9IHNlcnZpY2UuZ2V0T25lV2F5UG9ydCgpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicG9ydCBpcyA6ICIgKyBwb3J0KTsKICAgICAgICAgICAgICAgICBwb3J0LnN1YnRyYWN0KDEwMSwgMik7CiAgICAgICAgICAgICAgICAgcG9ydC5zYXlIaSgpOwotCQkJCXByaW50U3VjY2VzcyhvdXQpOworICAgICAgICAgICAgICAgIHByaW50U3VjY2VzcyhvdXQpOwogICAgICAgICAgICAgfSBjYXRjaChqYXZhLmxhbmcuRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICAJCXByaW50RmFpbHVyZShvdXQpOworICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICAgICAgcHJpbnRGYWlsdXJlKG91dCk7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewotCQkJCWlmKG91dCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYob3V0ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgb3V0LmZsdXNoKCk7CiAgICAgICAgICAgICAgICAgICAgIG91dC5jbG9zZSgpOwotCQkJCX0KLQkgICAgCX0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgcHJpbnRGYWlsdXJlKFByaW50V3JpdGVyIG91dCkgewotCQlpZihvdXQgPT0gbnVsbCkgcmV0dXJuOwotCQlvdXQucHJpbnRsbigiPGh0bWw+Iik7CisgICAgICAgIGlmKG91dCA9PSBudWxsKSByZXR1cm47CisgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5UZXN0U2VydmxldDwvdGl0bGU+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBwcmludFN1Y2Nlc3MoUHJpbnRXcml0ZXIgb3V0KSB7Ci0JCWlmKG91dCA9PSBudWxsKSByZXR1cm47CisgICAgICAgIGlmKG91dCA9PSBudWxsKSByZXR1cm47CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlRlc3RTZXJ2bGV0PC90aXRsZT4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcmVwb3J0LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcmVwb3J0LnhtbAppbmRleCA2NWEzMmFlLi4wOTRlMzY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JlcG9ydC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9yZXBvcnQueG1sCkBAIC0yMyw3ICsyMyw3IEBACiA8dGFyZ2V0IG5hbWU9InJlcG9ydCI+CiA8ZWNobyBtZXNzYWdlPSJDb21wYXJpbmcgcmVzdWx0cyB3aXRoIGV4cGVjdGVkIHJlc3VsdHMiLz4KIAotIAorCiAgICAgPHhzbHQgc3R5bGU9IiR7c3R5bGVzaGVldH0iCiAgICAgICAgICAgICBpbj0iJHt4bWxmaWxlfSIgb3V0PSIke2h0bWxmaWxlfSIKICAgICAgICAgICAgIGJhc2VkaXI9Ii4iIGRlc3RkaXI9Ii4iIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwvYnVpbGQucHJvcGVydGllcwppbmRleCA5MWFkODk5Li5mMThkMmRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvYnVuZGxlZC13c2RsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0icnBjLWxpdGVyYWwtYnVuZGxlZC13c2RsLWJjLWNvbnN1bWVyLXNlLXByb3ZpZGVyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJqYmktY29tcG9uZW50LXN1LWFzc2VtYmx5IiB2YWx1ZT0id2ViX2NhbGN1bGF0b3JfY29uc3VtZXJfYXNzZW1ibHkiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvYnVuZGxlZC13c2RsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvYnVuZGxlZC13c2RsL2J1aWxkLnhtbAppbmRleCAyZTU2NDIxLi5kNWZlMDQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwvYnVpbGQueG1sCkBAIC0zNCwxMSArMzQsMTEgQEAKICAgICAmamF4d3NUb29sczsKICAgICAmamJpY29tbW9uOwogICAgICZqYmlwcm9wZXJ0aWVzOwotICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbiwgc2V0dXAsIHJ1bnRlc3QsdW5kZXBsb3kiLz4gCisgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLCBzZXR1cCwgcnVudGVzdCx1bmRlcGxveSIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KLQkgIDxkZWxldGUgZGlyPSJjb21tb246ZW5kcG9pbnQiLz4KKyAgICAgIDxkZWxldGUgZGlyPSJjb21tb246ZW5kcG9pbnQiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImFzc2VtYmxlLXdlYiwgZGVwbG95LWFwcCwgYXNzZW1ibGUtY2xpZW50Ii8+CkBAIC01NCwxNiArNTQsMTYgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICAgICAgIDwvYW50Y2FsbD4KLQkgICA8IS0tIEFkZCB0aGUgV1NETCAtLT4KLQkgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93c2RsIi8+Ci0JICAgPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS93c2RsL0NhbGN1bGF0b3JTZXJ2aWNlX3NjaGVtYTEueHNkIiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd3NkbCIvPgotCSAgIDxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vd3NkbC9DYWxjdWxhdG9yU2VydmljZS53c2RsIiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd3NkbCIvPgotCSAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIgdXBkYXRlPSJ0cnVlIj4KLQkgICAJCTxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIj4KLQkJCQk8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dzZGwvQ2FsY3VsYXRvclNlcnZpY2Vfc2NoZW1hMS54c2QiLz4KLQkJCQk8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dzZGwvQ2FsY3VsYXRvclNlcnZpY2Uud3NkbCIvPgotCQkJPC9maWxlc2V0PgotCSAgIDwvamFyPgorICAgICAgIDwhLS0gQWRkIHRoZSBXU0RMIC0tPgorICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dzZGwiLz4KKyAgICAgICA8Y29weSBmaWxlPSIke2Jhc2VkaXJ9L3dzZGwvQ2FsY3VsYXRvclNlcnZpY2Vfc2NoZW1hMS54c2QiIHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93c2RsIi8+CisgICAgICAgPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS93c2RsL0NhbGN1bGF0b3JTZXJ2aWNlLndzZGwiIHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93c2RsIi8+CisgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIiB1cGRhdGU9InRydWUiPgorICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IldFQi1JTkYvd3NkbC9DYWxjdWxhdG9yU2VydmljZV9zY2hlbWExLnhzZCIvPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IldFQi1JTkYvd3NkbC9DYWxjdWxhdG9yU2VydmljZS53c2RsIi8+CisgICAgICAgICAgICA8L2ZpbGVzZXQ+CisgICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwvY2xpZW50L1NPQVBXZWJDb25zdW1lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwvY2xpZW50L1NPQVBXZWJDb25zdW1lci5qYXZhCmluZGV4IGY5ZDVlNjkuLmM1ZGQ5OTAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvYnVuZGxlZC13c2RsL2NsaWVudC9TT0FQV2ViQ29uc3VtZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbC9jbGllbnQvU09BUFdlYkNvbnN1bWVyLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3JwYy1saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9ycGMtbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwiOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7CkBAIC0zOCwyOSArMzgsMjkgQEAKICAgICAgICAgY2xpZW50LmFkZFVzaW5nU09BUENvbnN1bWVyKCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGFkZFVzaW5nU09BUENvbnN1bWVyKCkgewogICAgICAgICBDYWxjdWxhdG9yIHBvcnQ9IG51bGw7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgY3JlYXRpbmcgQ2FsY3VsYXRvclNlcnZpY2UiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBwb3J0ID0gc2VydmljZS5nZXRDYWxjdWxhdG9yUG9ydCgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgZ2V0dGluZyBwb3J0Iik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gR2V0IFN0dWIKICAgICAgICAgICAgIEJpbmRpbmdQcm92aWRlciBzdHViID0gKEJpbmRpbmdQcm92aWRlcilwb3J0OwogICAgICAgICAgICAgU3RyaW5nIGVuZHBvaW50VVJJID0iaHR0cDovL2xvY2FsaG9zdDoxMjAxMS9jYWxjdWxhdG9yZW5kcG9pbnQiOwogICAgICAgICAgICAgc3R1Yi5nZXRSZXF1ZXN0Q29udGV4dCgpLnB1dChCaW5kaW5nUHJvdmlkZXIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRVUkkpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgc2V0dGluZyBlbmRwb2ludCBhZGRyZXNzIFVSSSIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEluY29tZVRheERldGFpbHMgaXREZXRhaWxzID0gbmV3IEluY29tZVRheERldGFpbHMoKTsKICAgICAgICAgICAgIGl0RGV0YWlscy5zZXRGaXJzdE5hbWUoICJiaGF2YW5pIik7CiAgICAgICAgICAgICBpdERldGFpbHMuc2V0TGFzdE5hbWUoInMiKTsKICAgICAgICAgICAgIGl0RGV0YWlscy5zZXRBbm51YWxJbmNvbWUoIDQwMDAwMCk7CiAgICAgICAgICAgICBpdERldGFpbHMuc2V0U3RhdHVzKCJzYWxhcmllZCIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGxvbmcgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgICAgICBsb25nIHJldCA9IDA7CiAgICAgICAgICAgICAvLyBNYWtlIDEwMCBjYWxscyB0byBzZWUgaG93IG11Y2ggdGltZSBpdCB0YWtlcy4KQEAgLTc4LDM3ICs3OCwzNyBAQAogICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgLy99CiAgICAgICAgICAgICBsb25nIHRpbWVUYWtlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vaW50IHJldCA9IHBvcnQuYWRkKDEsIDIpOwogICAgICAgICAgICAgcHJpbnRTdWNjZXNzKCJZb3VyIGluY29tZSB0YXggaXMgOiBScyAiLCByZXQsIHRpbWVUYWtlbik7CiAgICAgICAgICAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgICAgIGludCBrID0gcG9ydC5hZGQoNTA1LCA1MCk7CiAgICAgICAgICAgICB0aW1lVGFrZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKICAgICAgICAgICAgIHByaW50U3VjY2VzcygiU3VtIG9mIDUwNSBhbmQgNTAgaXMgOiAiLCBrLCB0aW1lVGFrZW4pOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgICAgICAgICAgU3RyaW5nIGhpID0gcG9ydC5zYXlIaSgpOwogICAgICAgICAgICAgdGltZVRha2VuID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWU7CiAgICAgICAgICAgICBwcmludFN1Y2Nlc3MoIk91dHB1dCBmcm9tIHdlYnNlcnZpY2UgOiAiLCAgaGksIHRpbWVUYWtlbik7Ci0gICAgICAgICAgICAKLQkJCS8qCisKKyAgICAgICAgICAgIC8qCiAgICAgICAgICAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgICAgIHBvcnQucHJpbnRIaSgpOwogICAgICAgICAgICAgdGltZVRha2VuID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWU7CiAgICAgICAgICAgICBwcmludFN1Y2Nlc3MoIlNVQ0NFU1MgOiAiLCAgIldlYnNlcnZpY2UgaGFzIHN1Y2Nlc3NmdWxseSBwcmludGVkIGhpIGluIHNlcnZlci5sb2ciLCB0aW1lVGFrZW4pOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgICAgICAgICAgcG9ydC5wcmludEhpVG9NZSgiSmF2YUVFU2VydmljZUVuZ2luZSIpOwogICAgICAgICAgICAgdGltZVRha2VuID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWU7CiAgICAgICAgICAgICBwcmludFN1Y2Nlc3MoIlNVQ0NFU1MgOiAiLCAgIldlYnNlcnZpY2UgaGFzIHN1Y2Nlc3NmdWxseSBwcmludGVkIGhpIHRvIG1lIGluIHNlcnZlci5sb2ciLCB0aW1lVGFrZW4pOwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goamF2YS5sYW5nLkV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBwcmludEZhaWx1cmUoU3RyaW5nIGVyck1zZykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjxoZWFkPiIpOwpAQCAtMTIxLDE3ICsxMjEsMTcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI8L2JvZHk+Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPC9odG1sPiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHByaW50U3VjY2VzcyhTdHJpbmcgbWVzc2FnZSwgbG9uZyByZXN1bHQsIGxvbmcgdGltZVRha2VuKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5cbiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obWVzc2FnZSArIHJlc3VsdCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZSB0YWtlbiB0byBpbnZva2UgdGhlIGVuZHBvaW50IG9wZXJhdGlvbiBpcyAgOiAgIiArIHRpbWVUYWtlbiArICIgbWlsbGlzZWNvbmRzLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHByaW50U3VjY2VzcyhTdHJpbmcgbWVzc2FnZSwgU3RyaW5nIHJlc3VsdCwgbG9uZyB0aW1lVGFrZW4pIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblxuIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihtZXNzYWdlICsgcmVzdWx0KTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaW1lIHRha2VuIHRvIGludm9rZSB0aGUgZW5kcG9pbnQgb3BlcmF0aW9uIGlzICA6ICAiICsgdGltZVRha2VuICsgIiBtaWxsaXNlY29uZHMuIik7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbC9jb21tb24vSW5jb21lVGF4RGV0YWlscy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwvY29tbW9uL0luY29tZVRheERldGFpbHMuamF2YQppbmRleCA1N2IwMGU4Li4zNTBiMTZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbC9jb21tb24vSW5jb21lVGF4RGV0YWlscy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvYnVuZGxlZC13c2RsL2NvbW1vbi9JbmNvbWVUYXhEZXRhaWxzLmphdmEKQEAgLTE3LDEwICsxNywxMCBAQAogcGFja2FnZSBjb21tb247CiAKIHB1YmxpYyBjbGFzcyBJbmNvbWVUYXhEZXRhaWxzIHsKLQlwdWJsaWMgU3RyaW5nIGZpcnN0TmFtZTsKLQlwdWJsaWMgU3RyaW5nIGxhc3ROYW1lOwotCXB1YmxpYyBTdHJpbmcgc3RhdHVzOyAvLyBzYWxhcmllZCwgc2VsZi1lbXBsb3llZCwgc3R1ZGVudC4KLQlwdWJsaWMgbG9uZyBhbm51YWxJbmNvbWU7CisgICAgcHVibGljIFN0cmluZyBmaXJzdE5hbWU7CisgICAgcHVibGljIFN0cmluZyBsYXN0TmFtZTsKKyAgICBwdWJsaWMgU3RyaW5nIHN0YXR1czsgLy8gc2FsYXJpZWQsIHNlbGYtZW1wbG95ZWQsIHN0dWRlbnQuCisgICAgcHVibGljIGxvbmcgYW5udWFsSW5jb21lOwogfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvYnVuZGxlZC13c2RsL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvYnVuZGxlZC13c2RsL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQppbmRleCA2OWM5YWNjLi41NWI5NGM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbC9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCkBAIC0yOSwxMiArMjksMTIgQEAKICAgICAgICAgd3NkbExvY2F0aW9uID0gIldFQi1JTkYvd3NkbC9DYWxjdWxhdG9yU2VydmljZS53c2RsIgogICAgICAgICApCiAgICAgICAgIEBTT0FQQmluZGluZyhzdHlsZT1TT0FQQmluZGluZy5TdHlsZS5SUEMsIHVzZT1TT0FQQmluZGluZy5Vc2UuTElURVJBTCkKLSAgICAgICAgCisKICAgICAgICAgcHVibGljIGNsYXNzIENhbGN1bGF0b3IgewotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgdGVzdE5hbWUgPSAiXG5UZXN0IDo6IHJwYy1saXRlcmFsLWJ1bmRsZWQtd3NkbC1iYy1jb25zdW1lci1zZS1wcm92aWRlciA6ICI7CiAgICAgcHVibGljIENhbGN1bGF0b3IoKSB7fQotICAgIAorCiAgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiLCBhY3Rpb249InVybjpBZGQiKQogICAgIHB1YmxpYyBpbnQgYWRkKAogICAgICAgICAgICAgQFdlYlBhcmFtKG5hbWUgPSAiaW50XzEiLCBwYXJ0TmFtZSA9ICJpbnRfMSIpIGludCBpLApAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVzdE5hbWUgKyBpICsgIisiICsgaiArIiA9ICIgKyBrKTsKICAgICAgICAgcmV0dXJuIGs7CiAgICAgfQotICAgIAorCiAgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJjYWxjdWxhdGVJbmNvbWVUYXgiLCBhY3Rpb249InVybjpDYWxjdWxhdGVJbmNvbWVUYXgiKQogICAgIHB1YmxpYyBsb25nIGNhbGN1bGF0ZUluY29tZVRheChJbmNvbWVUYXhEZXRhaWxzIGRldGFpbHMKICAgICAgICAgICAgICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzMgpAQCAtNjQsMTggKzY0LDE4IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0TmFtZSArIlRheCB0byBiZSBwYWlkID0gIiArIHRheFRvQmVQYWlkKTsKICAgICAgICAgcmV0dXJuIHRheFRvQmVQYWlkOwogICAgIH0KLSAgICAKKwogICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGkiLCBhY3Rpb249InVybjpTYXlIaSIpCiAgICAgcHVibGljIFN0cmluZyBzYXlIaSgpIHsKICAgICAgICAgcmV0dXJuIHRlc3ROYW1lICsgIkhpIGZyb20gc2F5SGkoKSI7CiAgICAgfQotICAgIAorCiAgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJwcmludEhpIiwgYWN0aW9uPSJ1cm46UHJpbnRIaSIpCiAgICAgQE9uZXdheQogICAgIHB1YmxpYyB2b2lkIHByaW50SGkoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0TmFtZSArIkhpIGZyb20gcHJpbnRIaSgpIik7CiAgICAgfQotICAgIAorCiAgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJwcmludEhpVG9NZSIsIGFjdGlvbj0idXJuOlByaW50SGlUb01lIikKICAgICBAT25ld2F5CiAgICAgcHVibGljIHZvaWQgcHJpbnRIaVRvTWUoU3RyaW5nIG5hbWUpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvYnVuZGxlZC13c2RsL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvYnVuZGxlZC13c2RsL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCBiNGRhOTg2Li40MzM3OGUyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbC9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOSw5ICsxOSw5IEBACiAKIDwhLS0gamJpLnhtbCBmaWxlIGZvciB0aGUgU09BUCBiaW5kaW5nIGRlcGxveW1lbnRzIGJpbmRpbmcuIC0tPgogPGpiaQotICAgIHZlcnNpb249IjEuMCIgCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgdmVyc2lvbj0iMS4wIgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSAuL2piaS54c2QiPgogICA8c2VydmljZS1hc3NlbWJseT4KICAgICA8aWRlbnRpZmljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbC9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbC9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKaW5kZXggODFjNTMwOS4uY2YzNTQ5NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvYnVuZGxlZC13c2RsL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMTgsMTYgKzE4LDE2IEBACiAtLT4KIAogPGpiaSB2ZXJzaW9uPSIxLjAiCi0JIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotCSB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLSAJIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCi0JIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQ2FsY3VsYXRvciIKLQkgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+Ci0JPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4JCQotCQk8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIKLQkJCSAgbGluay10eXBlPSJzdGFuZGFyZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiIAorICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgICAgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKKyAgICAgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9DYWxjdWxhdG9yIgorICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgorICAgICAgICA8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIKKyAgICAgICAgICAgICAgbGluay10eXBlPSJzdGFuZGFyZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkNhbGN1bGF0b3JQb3J0Ii8+CiAgICAgICAgIDxqYXZhZXNiOmFydGlmYWN0c3R5cGU+V1NETDExPC9qYXZhZXNiOmFydGlmYWN0c3R5cGU+Ci0JPC9zZXJ2aWNlcz4KKyAgICA8L3NlcnZpY2VzPgogPC9qYmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbC93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwvd2ViLnhtbAppbmRleCAwN2UxNDc3Li43OThjNjliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbC93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvYnVuZGxlZC13c2RsL3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDEwNjBjN2EuLmIxM2ZiMDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvd3NkbC1pbXBvcnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL3dzZGwtaW1wb3J0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0icnBjLWxpdGVyYWwtYnVuZGxlZC13c2RsLWJjLWNvbnN1bWVyLXNlLXByb3ZpZGVyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJqYmktY29tcG9uZW50LXN1LWFzc2VtYmx5IiB2YWx1ZT0id2ViX2NhbGN1bGF0b3JfY29uc3VtZXJfYXNzZW1ibHkiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvd3NkbC1pbXBvcnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC9idWlsZC54bWwKaW5kZXggMmQ0YzM5My4uZTBiYmE0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC9idWlsZC54bWwKQEAgLTM0LDExICszNCwxMSBAQAogICAgICZqYXh3c1Rvb2xzOwogICAgICZqYmljb21tb247CiAgICAgJmpiaXByb3BlcnRpZXM7Ci0gICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLCBzZXR1cCwgcnVudGVzdCx1bmRlcGxveSIvPiAKKyAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sIHNldHVwLCBydW50ZXN0LHVuZGVwbG95Ii8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgotCSAgPGRlbGV0ZSBkaXI9ImNvbW1vbjplbmRwb2ludCIvPgorICAgICAgPGRlbGV0ZSBkaXI9ImNvbW1vbjplbmRwb2ludCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iYXNzZW1ibGUtd2ViLCBkZXBsb3ktYXBwLCBhc3NlbWJsZS1jbGllbnQiLz4KQEAgLTU0LDE4ICs1NCwxOCBAQAogICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmZpbGUiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CiAgICAgICAgPC9hbnRjYWxsPgotCSAgIDwhLS0gQWRkIHRoZSBXU0RMIC0tPgotCSAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dzZGwiLz4KLQkgICA8Y29weSBmaWxlPSIke2Jhc2VkaXJ9L3dzZGwvQ2FsY3VsYXRvclNlcnZpY2Vfc2NoZW1hMS54c2QiIHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93c2RsIi8+Ci0JICAgPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS93c2RsL0NhbGN1bGF0b3JTZXJ2aWNlLndzZGwiIHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93c2RsIi8+Ci0JICAgPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS93c2RsL01lc3NhZ2VUeXBlcy53c2RsIiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd3NkbCIvPgotCSAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIgdXBkYXRlPSJ0cnVlIj4KLQkgICAJCTxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIj4KLQkJCQk8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dzZGwvQ2FsY3VsYXRvclNlcnZpY2Vfc2NoZW1hMS54c2QiLz4KLQkJCQk8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dzZGwvQ2FsY3VsYXRvclNlcnZpY2Uud3NkbCIvPgotCQkJCTxpbmNsdWRlIG5hbWU9IldFQi1JTkYvd3NkbC9NZXNzYWdlVHlwZXMud3NkbCIvPgotCQkJPC9maWxlc2V0PgotCSAgIDwvamFyPgorICAgICAgIDwhLS0gQWRkIHRoZSBXU0RMIC0tPgorICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dzZGwiLz4KKyAgICAgICA8Y29weSBmaWxlPSIke2Jhc2VkaXJ9L3dzZGwvQ2FsY3VsYXRvclNlcnZpY2Vfc2NoZW1hMS54c2QiIHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93c2RsIi8+CisgICAgICAgPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS93c2RsL0NhbGN1bGF0b3JTZXJ2aWNlLndzZGwiIHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93c2RsIi8+CisgICAgICAgPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS93c2RsL01lc3NhZ2VUeXBlcy53c2RsIiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd3NkbCIvPgorICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIgdXBkYXRlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIj4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dzZGwvQ2FsY3VsYXRvclNlcnZpY2Vfc2NoZW1hMS54c2QiLz4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dzZGwvQ2FsY3VsYXRvclNlcnZpY2Uud3NkbCIvPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IldFQi1JTkYvd3NkbC9NZXNzYWdlVHlwZXMud3NkbCIvPgorICAgICAgICAgICAgPC9maWxlc2V0PgorICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvd3NkbC1pbXBvcnQvY2xpZW50L1NPQVBXZWJDb25zdW1lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC9jbGllbnQvU09BUFdlYkNvbnN1bWVyLmphdmEKaW5kZXggYzU0NzE2Zi4uZGFiMGQyZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC9jbGllbnQvU09BUFdlYkNvbnN1bWVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC9jbGllbnQvU09BUFdlYkNvbnN1bWVyLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3JwYy1saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL3dzZGwtaW1wb3J0IjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3JwYy1saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL3dzZGwtaW1wb3J0IjsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0SWQpOwpAQCAtMzgsMjkgKzM4LDI5IEBACiAgICAgICAgIGNsaWVudC5hZGRVc2luZ1NPQVBDb25zdW1lcigpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBhZGRVc2luZ1NPQVBDb25zdW1lcigpIHsKICAgICAgICAgQ2FsY3VsYXRvciBwb3J0PSBudWxsOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGNyZWF0aW5nIENhbGN1bGF0b3JTZXJ2aWNlIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcG9ydCA9IHNlcnZpY2UuZ2V0Q2FsY3VsYXRvclBvcnQoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGdldHRpbmcgcG9ydCIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIEdldCBTdHViCiAgICAgICAgICAgICBCaW5kaW5nUHJvdmlkZXIgc3R1YiA9IChCaW5kaW5nUHJvdmlkZXIpcG9ydDsKICAgICAgICAgICAgIFN0cmluZyBlbmRwb2ludFVSSSA9Imh0dHA6Ly9sb2NhbGhvc3Q6MTIwMTEvY2FsY3VsYXRvcmVuZHBvaW50IjsKICAgICAgICAgICAgIHN0dWIuZ2V0UmVxdWVzdENvbnRleHQoKS5wdXQoQmluZGluZ1Byb3ZpZGVyLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCiAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50VVJJKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIHNldHRpbmcgZW5kcG9pbnQgYWRkcmVzcyBVUkkiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBJbmNvbWVUYXhEZXRhaWxzIGl0RGV0YWlscyA9IG5ldyBJbmNvbWVUYXhEZXRhaWxzKCk7CiAgICAgICAgICAgICBpdERldGFpbHMuc2V0Rmlyc3ROYW1lKCAiYmhhdmFuaSIpOwogICAgICAgICAgICAgaXREZXRhaWxzLnNldExhc3ROYW1lKCJzIik7CiAgICAgICAgICAgICBpdERldGFpbHMuc2V0QW5udWFsSW5jb21lKCA0MDAwMDApOwogICAgICAgICAgICAgaXREZXRhaWxzLnNldFN0YXR1cygic2FsYXJpZWQiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBsb25nIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgICAgICAgICAgbG9uZyByZXQgPSAwOwogICAgICAgICAgICAgLy8gTWFrZSAxMDAgY2FsbHMgdG8gc2VlIGhvdyBtdWNoIHRpbWUgaXQgdGFrZXMuCkBAIC03OCwzNyArNzgsMzcgQEAKICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgIC8vfQogICAgICAgICAgICAgbG9uZyB0aW1lVGFrZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvL2ludCByZXQgPSBwb3J0LmFkZCgxLCAyKTsKICAgICAgICAgICAgIHByaW50U3VjY2VzcygiWW91ciBpbmNvbWUgdGF4IGlzIDogUnMgIiwgcmV0LCB0aW1lVGFrZW4pOwogICAgICAgICAgICAgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgICAgICBpbnQgayA9IHBvcnQuYWRkKDUwNSwgNTApOwogICAgICAgICAgICAgdGltZVRha2VuID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWU7CiAgICAgICAgICAgICBwcmludFN1Y2Nlc3MoIlN1bSBvZiA1MDUgYW5kIDUwIGlzIDogIiwgaywgdGltZVRha2VuKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgICAgIFN0cmluZyBoaSA9IHBvcnQuc2F5SGkoKTsKICAgICAgICAgICAgIHRpbWVUYWtlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOwogICAgICAgICAgICAgcHJpbnRTdWNjZXNzKCJPdXRwdXQgZnJvbSB3ZWJzZXJ2aWNlIDogIiwgIGhpLCB0aW1lVGFrZW4pOwotICAgICAgICAgICAgCi0JCQkvKgorCisgICAgICAgICAgICAvKgogICAgICAgICAgICAgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgICAgICBwb3J0LnByaW50SGkoKTsKICAgICAgICAgICAgIHRpbWVUYWtlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOwogICAgICAgICAgICAgcHJpbnRTdWNjZXNzKCJTVUNDRVNTIDogIiwgICJXZWJzZXJ2aWNlIGhhcyBzdWNjZXNzZnVsbHkgcHJpbnRlZCBoaSBpbiBzZXJ2ZXIubG9nIiwgdGltZVRha2VuKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgICAgIHBvcnQucHJpbnRIaVRvTWUoIkphdmFFRVNlcnZpY2VFbmdpbmUiKTsKICAgICAgICAgICAgIHRpbWVUYWtlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOwogICAgICAgICAgICAgcHJpbnRTdWNjZXNzKCJTVUNDRVNTIDogIiwgICJXZWJzZXJ2aWNlIGhhcyBzdWNjZXNzZnVsbHkgcHJpbnRlZCBoaSB0byBtZSBpbiBzZXJ2ZXIubG9nIiwgdGltZVRha2VuKTsKICAgICAgICAgICAgICovCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoKGphdmEubGFuZy5FeGNlcHRpb24gZSkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgcHJpbnRGYWlsdXJlKFN0cmluZyBlcnJNc2cpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI8aGVhZD4iKTsKQEAgLTEyMSwxNyArMTIxLDE3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPC9ib2R5PiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjwvaHRtbD4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBwcmludFN1Y2Nlc3MoU3RyaW5nIG1lc3NhZ2UsIGxvbmcgcmVzdWx0LCBsb25nIHRpbWVUYWtlbikgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuXG4iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UgKyByZXN1bHQpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWUgdGFrZW4gdG8gaW52b2tlIHRoZSBlbmRwb2ludCBvcGVyYXRpb24gaXMgIDogICIgKyB0aW1lVGFrZW4gKyAiIG1pbGxpc2Vjb25kcy4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBwcmludFN1Y2Nlc3MoU3RyaW5nIG1lc3NhZ2UsIFN0cmluZyByZXN1bHQsIGxvbmcgdGltZVRha2VuKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5cbiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obWVzc2FnZSArIHJlc3VsdCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZSB0YWtlbiB0byBpbnZva2UgdGhlIGVuZHBvaW50IG9wZXJhdGlvbiBpcyAgOiAgIiArIHRpbWVUYWtlbiArICIgbWlsbGlzZWNvbmRzLiIpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC9jb21tb24vSW5jb21lVGF4RGV0YWlscy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC9jb21tb24vSW5jb21lVGF4RGV0YWlscy5qYXZhCmluZGV4IDU3YjAwZTguLjM1MGIxNmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvd3NkbC1pbXBvcnQvY29tbW9uL0luY29tZVRheERldGFpbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL3dzZGwtaW1wb3J0L2NvbW1vbi9JbmNvbWVUYXhEZXRhaWxzLmphdmEKQEAgLTE3LDEwICsxNywxMCBAQAogcGFja2FnZSBjb21tb247CiAKIHB1YmxpYyBjbGFzcyBJbmNvbWVUYXhEZXRhaWxzIHsKLQlwdWJsaWMgU3RyaW5nIGZpcnN0TmFtZTsKLQlwdWJsaWMgU3RyaW5nIGxhc3ROYW1lOwotCXB1YmxpYyBTdHJpbmcgc3RhdHVzOyAvLyBzYWxhcmllZCwgc2VsZi1lbXBsb3llZCwgc3R1ZGVudC4KLQlwdWJsaWMgbG9uZyBhbm51YWxJbmNvbWU7CisgICAgcHVibGljIFN0cmluZyBmaXJzdE5hbWU7CisgICAgcHVibGljIFN0cmluZyBsYXN0TmFtZTsKKyAgICBwdWJsaWMgU3RyaW5nIHN0YXR1czsgLy8gc2FsYXJpZWQsIHNlbGYtZW1wbG95ZWQsIHN0dWRlbnQuCisgICAgcHVibGljIGxvbmcgYW5udWFsSW5jb21lOwogfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvd3NkbC1pbXBvcnQvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKaW5kZXggNjljOWFjYy4uNTViOTRjNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKQEAgLTI5LDEyICsyOSwxMiBAQAogICAgICAgICB3c2RsTG9jYXRpb24gPSAiV0VCLUlORi93c2RsL0NhbGN1bGF0b3JTZXJ2aWNlLndzZGwiCiAgICAgICAgICkKICAgICAgICAgQFNPQVBCaW5kaW5nKHN0eWxlPVNPQVBCaW5kaW5nLlN0eWxlLlJQQywgdXNlPVNPQVBCaW5kaW5nLlVzZS5MSVRFUkFMKQotICAgICAgICAKKwogICAgICAgICBwdWJsaWMgY2xhc3MgQ2FsY3VsYXRvciB7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyB0ZXN0TmFtZSA9ICJcblRlc3QgOjogcnBjLWxpdGVyYWwtYnVuZGxlZC13c2RsLWJjLWNvbnN1bWVyLXNlLXByb3ZpZGVyIDogIjsKICAgICBwdWJsaWMgQ2FsY3VsYXRvcigpIHt9Ci0gICAgCisKICAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCiAgICAgcHVibGljIGludCBhZGQoCiAgICAgICAgICAgICBAV2ViUGFyYW0obmFtZSA9ICJpbnRfMSIsIHBhcnROYW1lID0gImludF8xIikgaW50IGksCkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0TmFtZSArIGkgKyAiKyIgKyBqICsiID0gIiArIGspOwogICAgICAgICByZXR1cm4gazsKICAgICB9Ci0gICAgCisKICAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImNhbGN1bGF0ZUluY29tZVRheCIsIGFjdGlvbj0idXJuOkNhbGN1bGF0ZUluY29tZVRheCIpCiAgICAgcHVibGljIGxvbmcgY2FsY3VsYXRlSW5jb21lVGF4KEluY29tZVRheERldGFpbHMgZGV0YWlscwogICAgICAgICAgICAgLCBJbmNvbWVUYXhEZXRhaWxzIGRldGFpbHMyCkBAIC02NCwxOCArNjQsMTggQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3ROYW1lICsiVGF4IHRvIGJlIHBhaWQgPSAiICsgdGF4VG9CZVBhaWQpOwogICAgICAgICByZXR1cm4gdGF4VG9CZVBhaWQ7CiAgICAgfQotICAgIAorCiAgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIaSIsIGFjdGlvbj0idXJuOlNheUhpIikKICAgICBwdWJsaWMgU3RyaW5nIHNheUhpKCkgewogICAgICAgICByZXR1cm4gdGVzdE5hbWUgKyAiSGkgZnJvbSBzYXlIaSgpIjsKICAgICB9Ci0gICAgCisKICAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InByaW50SGkiLCBhY3Rpb249InVybjpQcmludEhpIikKICAgICBAT25ld2F5CiAgICAgcHVibGljIHZvaWQgcHJpbnRIaSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3ROYW1lICsiSGkgZnJvbSBwcmludEhpKCkiKTsKICAgICB9Ci0gICAgCisKICAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InByaW50SGlUb01lIiwgYWN0aW9uPSJ1cm46UHJpbnRIaVRvTWUiKQogICAgIEBPbmV3YXkKICAgICBwdWJsaWMgdm9pZCBwcmludEhpVG9NZShTdHJpbmcgbmFtZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC9zdW4taHR0cC1iaW5kaW5nL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL3dzZGwtaW1wb3J0L3N1bi1odHRwLWJpbmRpbmcvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCBiNGRhOTg2Li40MzM3OGUyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL3dzZGwtaW1wb3J0L3N1bi1odHRwLWJpbmRpbmcvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL3dzZGwtaW1wb3J0L3N1bi1odHRwLWJpbmRpbmcvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbApAQCAtMTksOSArMTksOSBAQAogCiA8IS0tIGpiaS54bWwgZmlsZSBmb3IgdGhlIFNPQVAgYmluZGluZyBkZXBsb3ltZW50cyBiaW5kaW5nLiAtLT4KIDxqYmkKLSAgICB2ZXJzaW9uPSIxLjAiIAotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgIHZlcnNpb249IjEuMCIKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgLi9qYmkueHNkIj4KICAgPHNlcnZpY2UtYXNzZW1ibHk+CiAgICAgPGlkZW50aWZpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC9zdW4taHR0cC1iaW5kaW5nL3N1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL3dzZGwtaW1wb3J0L3N1bi1odHRwLWJpbmRpbmcvc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCA4MWM1MzA5Li5jZjM1NDk2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL3dzZGwtaW1wb3J0L3N1bi1odHRwLWJpbmRpbmcvc3UvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL3dzZGwtaW1wb3J0L3N1bi1odHRwLWJpbmRpbmcvc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMTgsMTYgKzE4LDE2IEBACiAtLT4KIAogPGpiaSB2ZXJzaW9uPSIxLjAiCi0JIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotCSB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLSAJIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCi0JIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQ2FsY3VsYXRvciIKLQkgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+Ci0JPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4JCQotCQk8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIKLQkJCSAgbGluay10eXBlPSJzdGFuZGFyZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiIAorICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgICAgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKKyAgICAgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9DYWxjdWxhdG9yIgorICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgorICAgICAgICA8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIKKyAgICAgICAgICAgICAgbGluay10eXBlPSJzdGFuZGFyZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkNhbGN1bGF0b3JQb3J0Ii8+CiAgICAgICAgIDxqYXZhZXNiOmFydGlmYWN0c3R5cGU+V1NETDExPC9qYXZhZXNiOmFydGlmYWN0c3R5cGU+Ci0JPC9zZXJ2aWNlcz4KKyAgICA8L3NlcnZpY2VzPgogPC9qYmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL3dzZGwtaW1wb3J0L3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL3dzZGwtaW1wb3J0L3dlYi54bWwKaW5kZXggMDdlMTQ3Ny4uNzk4YzY5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvd3NkbC1pbXBvcnQvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYnVpbGQueG1sCmluZGV4IDkwZDA1ZTkuLmE3YjdlOTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYnVpbGQueG1sCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJhbGwiPgogICAgICAgICA8YW50IGRpcj0ic2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvZ2VuZXJhdGVkX3dzZGwiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJzZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwiIHRhcmdldD0iYWxsIi8+Ci0JCTxhbnQgZGlyPSJiY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydCIgdGFyZ2V0PSJhbGwiLz4KLQkJPGFudCBkaXI9ImJjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbCIgdGFyZ2V0PSJhbGwiLz4KKyAgICAgICAgPGFudCBkaXI9ImJjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL3dzZGwtaW1wb3J0IiB0YXJnZXQ9ImFsbCIvPgorICAgICAgICA8YW50IGRpcj0iYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvYnVuZGxlZC13c2RsIiB0YXJnZXQ9ImFsbCIvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODQ5YzU1NS4uZDc5NTNmNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InJwYy1saXRlcmFsLWJ1bmRsZWQtd3NkbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC9idWlsZC54bWwKaW5kZXggODdjNDI0YS4uZGY4M2FhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL2J1aWxkLnhtbApAQCAtMzgsOSArMzgsOSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KLQkgIDxkZWxldGUgZmlsZT0iJHtqYmktY29tcG9uZW50LXN1LWRpcn0vYXNzZW1ibHkvJHthcHBuYW1lfS13ZWIud2FyIi8+Ci0JICA8ZGVsZXRlIGZpbGU9IiR7YmFzZWRpcn0vUmVwUnVuQ29uZi50eHQiLz4KLQkgIDxkZWxldGUgZGlyPSIke2Jhc2VkaXJ9L2NvbW1vbjplbmRwb2ludCIvPgorICAgICAgPGRlbGV0ZSBmaWxlPSIke2piaS1jb21wb25lbnQtc3UtZGlyfS9hc3NlbWJseS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KKyAgICAgIDxkZWxldGUgZmlsZT0iJHtiYXNlZGlyfS9SZXBSdW5Db25mLnR4dCIvPgorICAgICAgPGRlbGV0ZSBkaXI9IiR7YmFzZWRpcn0vY29tbW9uOmVuZHBvaW50Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJhc3NlbWJsZS13ZWIsIGRlcGxveS1qYmktY29tcG9uZW50LXN1LGFzc2VtYmxlLWNsaWVudCxkZXBsb3ktY2xpZW50Ii8+CkBAIC01MiwzNSArNTIsMzUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUtd2ViIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgY29tcGlsZSI+Ci0JICA8ZWNobyBtZXNzYWdlPSJjbGFzc2VzIGRpciA9ICR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0JICA8ZWNobyBtZXNzYWdlPSJhc3NlbWJsZS5kaXIgPSAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CisgICAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc2VzIGRpciA9ICR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CisgICAgICA8ZWNobyBtZXNzYWdlPSJhc3NlbWJsZS5kaXIgPSAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBrZy13YXIiPgogICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmZpbGUiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CiAgICAgICAgPC9hbnRjYWxsPgotCSAgIDwhLS0gQWRkIE1FVEEtSU5GL2piaS54bWwgdG8gLndhciBmaWxlIC0tPgotCSAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9NRVRBLUlORiIvPgotCSAgIDxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgZGlyID0gJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL01FVEEtSU5GIi8+Ci0JICAgPGNvcHkgZmlsZT0iJHtqYmktY29tcG9uZW50LXN1LWRpcn0vc3UvTUVUQS1JTkYvamJpLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvTUVUQS1JTkYvamJpLnhtbCIvPgotCSAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIgdXBkYXRlPSJ0cnVlIj4KLQkgICAJCTxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIj4KLQkJCQk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9qYmkueG1sIi8+Ci0JCQk8L2ZpbGVzZXQ+Ci0JICAgPC9qYXI+CisgICAgICAgPCEtLSBBZGQgTUVUQS1JTkYvamJpLnhtbCB0byAud2FyIGZpbGUgLS0+CisgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL01FVEEtSU5GIi8+CisgICAgICAgPGVjaG8gbWVzc2FnZT0iY3JlYXRlZCBkaXIgPSAke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvTUVUQS1JTkYiLz4KKyAgICAgICA8Y29weSBmaWxlPSIke2piaS1jb21wb25lbnQtc3UtZGlyfS9zdS9NRVRBLUlORi9qYmkueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9NRVRBLUlORi9qYmkueG1sIi8+CisgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIiB1cGRhdGU9InRydWUiPgorICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2piaS54bWwiLz4KKyAgICAgICAgICAgIDwvZmlsZXNldD4KKyAgICAgICA8L2phcj4KIAotCSAgIDwhLS0gQWRkIHRoZSBXU0RMIC0tPgotCSAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dzZGwiLz4KLQkgICA8Y29weSBmaWxlPSIke2Jhc2VkaXJ9L3dzZGwvQ2FsY3VsYXRvclNlcnZpY2Vfc2NoZW1hMS54c2QiIHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93c2RsIi8+Ci0JICAgPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS93c2RsL0NhbGN1bGF0b3JTZXJ2aWNlLndzZGwiIHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93c2RsIi8+Ci0JICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIiB1cGRhdGU9InRydWUiPgotCSAgIAkJPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiPgotCQkJCTxpbmNsdWRlIG5hbWU9IldFQi1JTkYvd3NkbC9DYWxjdWxhdG9yU2VydmljZV9zY2hlbWExLnhzZCIvPgotCQkJCTxpbmNsdWRlIG5hbWU9IldFQi1JTkYvd3NkbC9DYWxjdWxhdG9yU2VydmljZS53c2RsIi8+Ci0JCQk8L2ZpbGVzZXQ+Ci0JICAgPC9qYXI+CisgICAgICAgPCEtLSBBZGQgdGhlIFdTREwgLS0+CisgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd3NkbCIvPgorICAgICAgIDxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vd3NkbC9DYWxjdWxhdG9yU2VydmljZV9zY2hlbWExLnhzZCIgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dzZGwiLz4KKyAgICAgICA8Y29weSBmaWxlPSIke2Jhc2VkaXJ9L3dzZGwvQ2FsY3VsYXRvclNlcnZpY2Uud3NkbCIgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dzZGwiLz4KKyAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiIHVwZGF0ZT0idHJ1ZSI+CisgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcCI+CisgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iV0VCLUlORi93c2RsL0NhbGN1bGF0b3JTZXJ2aWNlX3NjaGVtYTEueHNkIi8+CisgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iV0VCLUlORi93c2RsL0NhbGN1bGF0b3JTZXJ2aWNlLndzZGwiLz4KKyAgICAgICAgICAgIDwvZmlsZXNldD4KKyAgICAgICA8L2phcj4KIAotCSAgIDwhLS0gQ29weSB0aGUgSmF2YUVFIGFwcCB0byB0aGUgc2VydmljZSBhc3NlbWJseSAtLT4KLQkgIDxjb3B5IGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiIHRvZGlyPSIke2piaS1jb21wb25lbnQtc3UtZGlyfS9hc3NlbWJseSIvPgorICAgICAgIDwhLS0gQ29weSB0aGUgSmF2YUVFIGFwcCB0byB0aGUgc2VydmljZSBhc3NlbWJseSAtLT4KKyAgICAgIDxjb3B5IGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiIHRvZGlyPSIke2piaS1jb21wb25lbnQtc3UtZGlyfS9hc3NlbWJseSIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgICAgICAgIHZhbHVlPSIta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9ycGMtbGl0ZXJhbC1idW5kbGVkLXdzZGwvd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZT9XU0RMIi8+CiAgICAgPC9hbnRjYWxsPgogICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyIKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXIiIAorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjb21tb24vKiosd2ViY2xpZW50LyoqIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3dlYi54bWwiLz4KICAgICAgIDxjb3B5IGZpbGU9Ii4vY2xpZW50LXN1bi13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3N1bi13ZWIueG1sIi8+CkBAIC0xMzEsMTEgKzEzMSwxMSBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNvbW1vbi8qKixjbGllbnQvKioiLz4KICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LlRlc3RDbGllbnQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC9jbGllbnQtd2ViLnhtbAppbmRleCBlZWI3MzBkLi43OTViMDUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCA0Mjk2YTdmLi42MjgyNTNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvcnBjLWxpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsIjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3JwYy1saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbCI7CiAKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC00Niw4ICs0Niw4IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBmYWlsKCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZmFpbCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01OCwxNSArNTgsMTUgQEAKICAgICAgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlciAobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7Ci0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKLQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOworICAgICAgICBib29sZWFuIGZvdW5kID0gZmFsc2U7CiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKLQkJCWlmKGxpbmUuaW5kZXhPZigiU1VDQ0VTUyIpICE9IC0xKSBmb3VuZCA9IHRydWU7CQotCQkJYnVmZmVyLmFwcGVuZChsaW5lICsgIlxuIik7CisgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNVQ0NFU1MiKSAhPSAtMSkgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChsaW5lICsgIlxuIik7CiAgICAgICAgIH0KICAgICAgICAgbG9nKGJ1ZmZlci50b1N0cmluZygpKTsKLQkgICAgaWYoIWZvdW5kKSByZXR1cm4gNTA1OwkKKyAgICAgICAgaWYoIWZvdW5kKSByZXR1cm4gNTA1OwogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL2NvbW1vbi9JbmNvbWVUYXhEZXRhaWxzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC9jb21tb24vSW5jb21lVGF4RGV0YWlscy5qYXZhCmluZGV4IDU3YjAwZTguLjM1MGIxNmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL2NvbW1vbi9JbmNvbWVUYXhEZXRhaWxzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvY29tbW9uL0luY29tZVRheERldGFpbHMuamF2YQpAQCAtMTcsMTAgKzE3LDEwIEBACiBwYWNrYWdlIGNvbW1vbjsKIAogcHVibGljIGNsYXNzIEluY29tZVRheERldGFpbHMgewotCXB1YmxpYyBTdHJpbmcgZmlyc3ROYW1lOwotCXB1YmxpYyBTdHJpbmcgbGFzdE5hbWU7Ci0JcHVibGljIFN0cmluZyBzdGF0dXM7IC8vIHNhbGFyaWVkLCBzZWxmLWVtcGxveWVkLCBzdHVkZW50LgotCXB1YmxpYyBsb25nIGFubnVhbEluY29tZTsKKyAgICBwdWJsaWMgU3RyaW5nIGZpcnN0TmFtZTsKKyAgICBwdWJsaWMgU3RyaW5nIGxhc3ROYW1lOworICAgIHB1YmxpYyBTdHJpbmcgc3RhdHVzOyAvLyBzYWxhcmllZCwgc2VsZi1lbXBsb3llZCwgc3R1ZGVudC4KKyAgICBwdWJsaWMgbG9uZyBhbm51YWxJbmNvbWU7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCmluZGV4IDIzOGRmZDguLmI0YmM4YTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKQEAgLTI2LDE1ICsyNiwxNSBAQAogICAgICAgICBuYW1lPSJDYWxjdWxhdG9yIiwKICAgICAgICAgc2VydmljZU5hbWU9IkNhbGN1bGF0b3JTZXJ2aWNlIiwKICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9DYWxjdWxhdG9yIiwKLQkJd3NkbExvY2F0aW9uID0gIldFQi1JTkYvd3NkbC9DYWxjdWxhdG9yU2VydmljZS53c2RsIgorICAgICAgICB3c2RsTG9jYXRpb24gPSAiV0VCLUlORi93c2RsL0NhbGN1bGF0b3JTZXJ2aWNlLndzZGwiCiAgICAgICAgICkKIEBTT0FQQmluZGluZyhzdHlsZT1TT0FQQmluZGluZy5TdHlsZS5SUEMsIHVzZT1TT0FQQmluZGluZy5Vc2UuTElURVJBTCkKIAogcHVibGljIGNsYXNzIENhbGN1bGF0b3IgewogCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgdGVzdE5hbWUgPSAiXG5UZXN0IDo6IHJwYy1saXRlcmFsLWJ1bmRsZWQtd3NkbCA6ICI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgdGVzdE5hbWUgPSAiXG5UZXN0IDo6IHJwYy1saXRlcmFsLWJ1bmRsZWQtd3NkbCA6ICI7CiAgICAgcHVibGljIENhbGN1bGF0b3IoKSB7fQotICAgIAorCiAgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiLCBhY3Rpb249InVybjpBZGQiKQogICAgIHB1YmxpYyBpbnQgYWRkKAogICAgICAgICAgICAgQFdlYlBhcmFtKG5hbWUgPSAiaW50XzEiLCBwYXJ0TmFtZSA9ICJpbnRfMSIpIGludCBpLApAQCAtNDUsMzggKzQ1LDM4IEBACiAgICAgICAgIHJldHVybiBrOwogICAgIH0KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0iY2FsY3VsYXRlSW5jb21lVGF4IiwgYWN0aW9uPSJ1cm46Q2FsY3VsYXRlSW5jb21lVGF4IikKLQlwdWJsaWMgbG9uZyBjYWxjdWxhdGVJbmNvbWVUYXgoSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzCi0JCQkgLCBJbmNvbWVUYXhEZXRhaWxzIGRldGFpbHMyCi0JCQkgLCBJbmNvbWVUYXhEZXRhaWxzIGRldGFpbHMzCi0JCQkgLCBJbmNvbWVUYXhEZXRhaWxzIGRldGFpbHM0Ci0JCQkgLCBJbmNvbWVUYXhEZXRhaWxzIGRldGFpbHM1Ci0JCQkgLCBJbmNvbWVUYXhEZXRhaWxzIGRldGFpbHM2Ci0JCQkgLCBJbmNvbWVUYXhEZXRhaWxzIGRldGFpbHM3Ci0JCQkgLCBJbmNvbWVUYXhEZXRhaWxzIGRldGFpbHM4Ci0JCQkgLCBJbmNvbWVUYXhEZXRhaWxzIGRldGFpbHM5Ci0JCQkgLCBJbmNvbWVUYXhEZXRhaWxzIGRldGFpbHMxMAotCQkJKSB7Ci0JCWxvbmcgaW5jb21lID0gZGV0YWlscy5hbm51YWxJbmNvbWU7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbih0ZXN0TmFtZSArICJBbm51YWwgaW5jb21lID0gIiArIGluY29tZSk7Ci0JCWxvbmcgdGF4UmF0ZSA9IDMwOyAvLyAzMCUKLQkJbG9uZyB0YXhUb0JlUGFpZCA9IGluY29tZSAvIHRheFJhdGU7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbih0ZXN0TmFtZSArIlRheCB0byBiZSBwYWlkID0gIiArIHRheFRvQmVQYWlkKTsKLQkJcmV0dXJuIHRheFRvQmVQYWlkOwotCX0KKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImNhbGN1bGF0ZUluY29tZVRheCIsIGFjdGlvbj0idXJuOkNhbGN1bGF0ZUluY29tZVRheCIpCisgICAgcHVibGljIGxvbmcgY2FsY3VsYXRlSW5jb21lVGF4KEluY29tZVRheERldGFpbHMgZGV0YWlscworICAgICAgICAgICAgICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzMgorICAgICAgICAgICAgICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzMworICAgICAgICAgICAgICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzNAorICAgICAgICAgICAgICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzNQorICAgICAgICAgICAgICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzNgorICAgICAgICAgICAgICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzNworICAgICAgICAgICAgICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzOAorICAgICAgICAgICAgICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzOQorICAgICAgICAgICAgICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzMTAKKyAgICAgICAgICAgICkgeworICAgICAgICBsb25nIGluY29tZSA9IGRldGFpbHMuYW5udWFsSW5jb21lOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVzdE5hbWUgKyAiQW5udWFsIGluY29tZSA9ICIgKyBpbmNvbWUpOworICAgICAgICBsb25nIHRheFJhdGUgPSAzMDsgLy8gMzAlCisgICAgICAgIGxvbmcgdGF4VG9CZVBhaWQgPSBpbmNvbWUgLyB0YXhSYXRlOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVzdE5hbWUgKyJUYXggdG8gYmUgcGFpZCA9ICIgKyB0YXhUb0JlUGFpZCk7CisgICAgICAgIHJldHVybiB0YXhUb0JlUGFpZDsKKyAgICB9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhpIiwgYWN0aW9uPSJ1cm46U2F5SGkiKQotCXB1YmxpYyBTdHJpbmcgc2F5SGkoKSB7Ci0JCXJldHVybiB0ZXN0TmFtZSArICJIaSBmcm9tIHNheUhpKCkiOwotCX0KKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhpIiwgYWN0aW9uPSJ1cm46U2F5SGkiKQorICAgIHB1YmxpYyBTdHJpbmcgc2F5SGkoKSB7CisgICAgICAgIHJldHVybiB0ZXN0TmFtZSArICJIaSBmcm9tIHNheUhpKCkiOworICAgIH0KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0icHJpbnRIaSIsIGFjdGlvbj0idXJuOlByaW50SGkiKQotCXB1YmxpYyB2b2lkIHByaW50SGkoKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbih0ZXN0TmFtZSArIkhpIGZyb20gcHJpbnRIaSgpIik7Ci0JfQorICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0icHJpbnRIaSIsIGFjdGlvbj0idXJuOlByaW50SGkiKQorICAgIHB1YmxpYyB2b2lkIHByaW50SGkoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0TmFtZSArIkhpIGZyb20gcHJpbnRIaSgpIik7CisgICAgfQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJwcmludEhpVG9NZSIsIGFjdGlvbj0idXJuOlByaW50SGlUb01lIikKLQlwdWJsaWMgdm9pZCBwcmludEhpVG9NZShTdHJpbmcgbmFtZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4odGVzdE5hbWUgKyJIaSB0byAiICsgbmFtZSArICIgZnJvbSBwcmludEhpVG9NZSgpIik7Ci0JfQorICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0icHJpbnRIaVRvTWUiLCBhY3Rpb249InVybjpQcmludEhpVG9NZSIpCisgICAgcHVibGljIHZvaWQgcHJpbnRIaVRvTWUoU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3ROYW1lICsiSGkgdG8gIiArIG5hbWUgKyAiIGZyb20gcHJpbnRIaVRvTWUoKSIpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL2phdmFlZS1zZS1zZXJ2aWNldW5pdC9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvamF2YWVlLXNlLXNlcnZpY2V1bml0L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKaW5kZXggMWMwODcyYy4uOGQzNjc4ZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvamF2YWVlLXNlLXNlcnZpY2V1bml0L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvamF2YWVlLXNlLXNlcnZpY2V1bml0L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKQEAgLTE5LDE2ICsxOSwxNiBAQAogCiA8IS0tIGpiaS54bWwgZmlsZSBmb3IgdGhlIFNPQVAgYmluZGluZyBkZXBsb3ltZW50cyBiaW5kaW5nLiAtLT4KIDxqYmkKLSAgICB2ZXJzaW9uPSIxLjAiIAotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgIHZlcnNpb249IjEuMCIKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgLi9qYmkueHNkIj4KICAgPHNlcnZpY2UtYXNzZW1ibHk+CiAgICAgPGlkZW50aWZpY2F0aW9uPgogICAgICAgPG5hbWU+cnBjLWxpdGVyYWwtYnVuZGxlZC13c2RsLXNlLWNvbnN1bWVyLXNlLXByb3ZpZGVyPC9uYW1lPgogICAgICAgPGRlc2NyaXB0aW9uPkNsaWVudCB3ZWIgY2FsY3VsYXRvciBzZXJ2aWNlIGFzc2VtYmx5PC9kZXNjcmlwdGlvbj4KICAgICA8L2lkZW50aWZpY2F0aW9uPgotCTxzZXJ2aWNlLXVuaXQ+CisgICAgPHNlcnZpY2UtdW5pdD4KICAgICAgIDxpZGVudGlmaWNhdGlvbj4KICAgICAgICAgIDxuYW1lPnJwYy1saXRlcmFsLWJ1bmRsZWQtd3NkbDwvbmFtZT4KICAgICAgICAgIDxkZXNjcmlwdGlvbj5wcm92aWRlciBzZXJ2aWNlPC9kZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL2phdmFlZS1zZS1zZXJ2aWNldW5pdC9zdS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvamF2YWVlLXNlLXNlcnZpY2V1bml0L3N1L01FVEEtSU5GL2piaS54bWwKaW5kZXggOWEyMDFhMC4uOWUxMTQ5OSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvamF2YWVlLXNlLXNlcnZpY2V1bml0L3N1L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvamF2YWVlLXNlLXNlcnZpY2V1bml0L3N1L01FVEEtSU5GL2piaS54bWwKQEAgLTE4LDE0ICsxOCwxNCBAQAogLS0+CiAKIDxqYmkgdmVyc2lvbj0iMS4wIgotCSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLQkgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0JIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCi0JIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQ2FsY3VsYXRvciIKLQkgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+Ci0JPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJmYWxzZSI+CQkKLQkgPHByb3ZpZGVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2VJbnRlcmZhY2UiCisgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCisgICAgIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQ2FsY3VsYXRvciIKKyAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+CisgICAgPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJmYWxzZSI+CisgICAgIDxwcm92aWRlcyBpbnRlcmZhY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlSW50ZXJmYWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtbmFtZT0iQ2FsY3VsYXRvclBvcnQiLz4KLQk8L3NlcnZpY2VzPgorICAgIDwvc2VydmljZXM+CiA8L2piaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC93ZWIueG1sCmluZGV4IDA3ZTE0NzcuLjc5OGM2OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQppbmRleCA4OWM2ZjYyLi5mOTM1NTc1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMwLDc5ICszMCw3OSBAQAogCiAgICAgICAgQFdlYlNlcnZpY2VSZWYobmFtZT0ic3VuLXdlYi5zZXJ2aWNlcmVmL2NhbGN1bGF0b3IiKSBDYWxjdWxhdG9yU2VydmljZSBzZXJ2aWNlOwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCiAgICAgICAgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7Ci0JICAgIFByaW50V3JpdGVyIG91dD1udWxsOworICAgICAgICBQcmludFdyaXRlciBvdXQ9bnVsbDsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgU2VydmljZSBpcyA6IiArIHNlcnZpY2UpOwogICAgICAgICAgICAgICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwotICAgICAgICAgICAgCW91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CisgICAgICAgICAgICAgICAgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKICAgICAgICAgICAgICAgICBDYWxjdWxhdG9yIHBvcnQgPSBzZXJ2aWNlLmdldENhbGN1bGF0b3JQb3J0KCk7Ci0JCQkJSW5jb21lVGF4RGV0YWlscyBpdERldGFpbHMgPSBuZXcgSW5jb21lVGF4RGV0YWlscygpOwotCQkJCWl0RGV0YWlscy5zZXRGaXJzdE5hbWUgKCAiYmhhdmFuaSIpOwotCQkJCWl0RGV0YWlscy5zZXRMYXN0TmFtZSAoInMiKTsKLQkJCQlpdERldGFpbHMuc2V0QW5udWFsSW5jb21lICggNDAwMDAwKTsKLQkJCQlpdERldGFpbHMuc2V0U3RhdHVzICgic2FsYXJpZWQiKTsKKyAgICAgICAgICAgICAgICBJbmNvbWVUYXhEZXRhaWxzIGl0RGV0YWlscyA9IG5ldyBJbmNvbWVUYXhEZXRhaWxzKCk7CisgICAgICAgICAgICAgICAgaXREZXRhaWxzLnNldEZpcnN0TmFtZSAoICJiaGF2YW5pIik7CisgICAgICAgICAgICAgICAgaXREZXRhaWxzLnNldExhc3ROYW1lICgicyIpOworICAgICAgICAgICAgICAgIGl0RGV0YWlscy5zZXRBbm51YWxJbmNvbWUgKCA0MDAwMDApOworICAgICAgICAgICAgICAgIGl0RGV0YWlscy5zZXRTdGF0dXMgKCJzYWxhcmllZCIpOwogCi0JCQkJbG9uZyBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJCQlsb25nIHJldCA9IDA7Ci0JCQkJLy8gTWFrZSAxMDAgY2FsbHMgdG8gc2VlIGhvdyBtdWNoIHRpbWUgaXQgdGFrZXMuCi0JCQkJLy9mb3IoaW50IGk9MDsgaTwxMDAwOyBpKyspIHsKLQkJCQkJcmV0ID0gcG9ydC5jYWxjdWxhdGVJbmNvbWVUYXgoaXREZXRhaWxzCi0JCQkJCQkJLCBpdERldGFpbHMKLQkJCQkJCQksIGl0RGV0YWlscwotCQkJCQkJCSwgaXREZXRhaWxzCi0JCQkJCQkJLCBpdERldGFpbHMKLQkJCQkJCQksIGl0RGV0YWlscwotCQkJCQkJCSwgaXREZXRhaWxzCi0JCQkJCQkJLCBpdERldGFpbHMKLQkJCQkJCQksIGl0RGV0YWlscwotCQkJCQkJCSwgaXREZXRhaWxzCi0JCQkJCQkJKTsKLQkJCQkvL30KLQkJCQlsb25nIHRpbWVUYWtlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOwotCQkJCQorICAgICAgICAgICAgICAgIGxvbmcgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgICAgICAgICAgbG9uZyByZXQgPSAwOworICAgICAgICAgICAgICAgIC8vIE1ha2UgMTAwIGNhbGxzIHRvIHNlZSBob3cgbXVjaCB0aW1lIGl0IHRha2VzLgorICAgICAgICAgICAgICAgIC8vZm9yKGludCBpPTA7IGk8MTAwMDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IHBvcnQuY2FsY3VsYXRlSW5jb21lVGF4KGl0RGV0YWlscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgaXREZXRhaWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBpdERldGFpbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGl0RGV0YWlscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgaXREZXRhaWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBpdERldGFpbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGl0RGV0YWlscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgaXREZXRhaWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBpdERldGFpbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGl0RGV0YWlscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgLy99CisgICAgICAgICAgICAgICAgbG9uZyB0aW1lVGFrZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKKwogICAgICAgICAgICAgICAgIC8vaW50IHJldCA9IHBvcnQuYWRkKDEsIDIpOwotCQlwcmludFN1Y2Nlc3MoIllvdXIgaW5jb21lIHRheCBpcyA6IFJzICIsIG91dCxyZXQsIHRpbWVUYWtlbik7Ci0JCXN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlpbnQgayA9IHBvcnQuYWRkKDUwNSwgNTApOwotCQkJCXRpbWVUYWtlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOwotCQlwcmludFN1Y2Nlc3MoIlN1bSBvZiA1MDUgYW5kIDUwIGlzIDogIiwgb3V0LGssIHRpbWVUYWtlbik7CisgICAgICAgIHByaW50U3VjY2VzcygiWW91ciBpbmNvbWUgdGF4IGlzIDogUnMgIiwgb3V0LHJldCwgdGltZVRha2VuKTsKKyAgICAgICAgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgIGludCBrID0gcG9ydC5hZGQoNTA1LCA1MCk7CisgICAgICAgICAgICAgICAgdGltZVRha2VuID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWU7CisgICAgICAgIHByaW50U3VjY2VzcygiU3VtIG9mIDUwNSBhbmQgNTAgaXMgOiAiLCBvdXQsaywgdGltZVRha2VuKTsKIAotCQlzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJU3RyaW5nIGhpID0gcG9ydC5zYXlIaSgpOwotCQkJCXRpbWVUYWtlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOwotCQlwcmludFN1Y2Nlc3MoIk91dHB1dCBmcm9tIHdlYnNlcnZpY2UgOiAiLCBvdXQsIGhpLCB0aW1lVGFrZW4pOworICAgICAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgU3RyaW5nIGhpID0gcG9ydC5zYXlIaSgpOworICAgICAgICAgICAgICAgIHRpbWVUYWtlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOworICAgICAgICBwcmludFN1Y2Nlc3MoIk91dHB1dCBmcm9tIHdlYnNlcnZpY2UgOiAiLCBvdXQsIGhpLCB0aW1lVGFrZW4pOwogCi0JCXN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlwb3J0LnByaW50SGkoKTsKLQkJCQl0aW1lVGFrZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKLQkJcHJpbnRTdWNjZXNzKCJTVUNDRVNTIDogIiwgb3V0LCAiV2Vic2VydmljZSBoYXMgc3VjY2Vzc2Z1bGx5IHByaW50ZWQgaGkgaW4gc2VydmVyLmxvZyIsIHRpbWVUYWtlbik7CisgICAgICAgIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICBwb3J0LnByaW50SGkoKTsKKyAgICAgICAgICAgICAgICB0aW1lVGFrZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKKyAgICAgICAgcHJpbnRTdWNjZXNzKCJTVUNDRVNTIDogIiwgb3V0LCAiV2Vic2VydmljZSBoYXMgc3VjY2Vzc2Z1bGx5IHByaW50ZWQgaGkgaW4gc2VydmVyLmxvZyIsIHRpbWVUYWtlbik7CiAKLQkJc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCXBvcnQucHJpbnRIaVRvTWUoIkphdmFFRVNlcnZpY2VFbmdpbmUiKTsKLQkJCQl0aW1lVGFrZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKLQkJcHJpbnRTdWNjZXNzKCJTVUNDRVNTIDogIiwgb3V0LCAiV2Vic2VydmljZSBoYXMgc3VjY2Vzc2Z1bGx5IHByaW50ZWQgaGkgdG8gbWUgaW4gc2VydmVyLmxvZyIsIHRpbWVUYWtlbik7CisgICAgICAgIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICBwb3J0LnByaW50SGlUb01lKCJKYXZhRUVTZXJ2aWNlRW5naW5lIik7CisgICAgICAgICAgICAgICAgdGltZVRha2VuID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWU7CisgICAgICAgIHByaW50U3VjY2VzcygiU1VDQ0VTUyA6ICIsIG91dCwgIldlYnNlcnZpY2UgaGFzIHN1Y2Nlc3NmdWxseSBwcmludGVkIGhpIHRvIG1lIGluIHNlcnZlci5sb2ciLCB0aW1lVGFrZW4pOwogCiAgICAgICAgICAgICB9IGNhdGNoKGphdmEubGFuZy5FeGNlcHRpb24gZSkgewotCQkvL2UucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIAlwcmludEZhaWx1cmUob3V0LCBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIC8vZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIHByaW50RmFpbHVyZShvdXQsIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0JCWlmKG91dCAhPSBudWxsKSB7CisgICAgICAgIGlmKG91dCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIG91dC5mbHVzaCgpOwogICAgICAgICAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKLQkJfQotCSAgICB9CisgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIHByaW50RmFpbHVyZShQcmludFdyaXRlciBvdXQsIFN0cmluZyBlcnJNc2cpIHsKLQkJaWYob3V0ID09IG51bGwpIHJldHVybjsKLQkJb3V0LnByaW50bG4oIjxodG1sPiIpOworICAgICAgICBpZihvdXQgPT0gbnVsbCkgcmV0dXJuOworICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+VGVzdFNlcnZsZXQ8L3RpdGxlPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CkBAIC0xMTUsMTQgKzExNSwxNCBAQAogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIHByaW50U3VjY2VzcyhTdHJpbmcgbWVzc2FnZSwgUHJpbnRXcml0ZXIgb3V0LCBsb25nIHJlc3VsdCwgbG9uZyB0aW1lVGFrZW4pIHsKLQkJaWYob3V0ID09IG51bGwpIHJldHVybjsKKyAgICAgICAgaWYob3V0ID09IG51bGwpIHJldHVybjsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiXG5cbiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKG1lc3NhZ2UgKyByZXN1bHQpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJUaW1lIHRha2VuIHRvIGludm9rZSB0aGUgZW5kcG9pbnQgb3BlcmF0aW9uIGlzICA6ICAiICsgdGltZVRha2VuICsgIiBtaWxsaXNlY29uZHMuIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgcHJpbnRTdWNjZXNzKFN0cmluZyBtZXNzYWdlLCBQcmludFdyaXRlciBvdXQsIFN0cmluZyByZXN1bHQsIGxvbmcgdGltZVRha2VuKSB7Ci0JCWlmKG91dCA9PSBudWxsKSByZXR1cm47CisgICAgICAgIGlmKG91dCA9PSBudWxsKSByZXR1cm47CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIlxuXG4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbihtZXNzYWdlICsgcmVzdWx0KTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiVGltZSB0YWtlbiB0byBpbnZva2UgdGhlIGVuZHBvaW50IG9wZXJhdGlvbiBpcyAgOiAgIiArIHRpbWVUYWtlbiArICIgbWlsbGlzZWNvbmRzLiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDE5OGM1NDkuLmMyYjY1ZGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvZ2VuZXJhdGVkX3dzZGwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0icnBjLWxpdGVyYWwtZ2VuZXJhdGVkLXdzZGwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsL2J1aWxkLnhtbAppbmRleCAwYzY4MmI4Li4zZmE1NDA3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsL2J1aWxkLnhtbApAQCAtMzgsOSArMzgsOSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KLQkgIDxkZWxldGUgZmlsZT0iJHtqYmktY29tcG9uZW50LXN1LWRpcn0vYXNzZW1ibHkvJHthcHBuYW1lfS13ZWIud2FyIi8+Ci0JICA8ZGVsZXRlIGZpbGU9IiR7YmFzZWRpcn0vUmVwUnVuQ29uZi50eHQiLz4KLQkgIDxkZWxldGUgZGlyPSIke2Jhc2VkaXJ9L2NvbW1vbjplbmRwb2ludCIvPgorICAgICAgPGRlbGV0ZSBmaWxlPSIke2piaS1jb21wb25lbnQtc3UtZGlyfS9hc3NlbWJseS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KKyAgICAgIDxkZWxldGUgZmlsZT0iJHtiYXNlZGlyfS9SZXBSdW5Db25mLnR4dCIvPgorICAgICAgPGRlbGV0ZSBkaXI9IiR7YmFzZWRpcn0vY29tbW9uOmVuZHBvaW50Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJjbGVhbiwgYXNzZW1ibGUtd2ViLCBkZXBsb3ktYXBwLGFzc2VtYmxlLWNsaWVudCxkZXBsb3ktY2xpZW50Ii8+CkBAIC01Miw4ICs1Miw4IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLXdlYiIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNvbXBpbGUiPgotCSAgPGVjaG8gbWVzc2FnZT0iY2xhc3NlcyBkaXIgPSAke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotCSAgPGVjaG8gbWVzc2FnZT0iYXNzZW1ibGUuZGlyID0gJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgorICAgICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NlcyBkaXIgPSAke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgorICAgICAgPGVjaG8gbWVzc2FnZT0iYXNzZW1ibGUuZGlyID0gJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwa2ctd2FyIj4KICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgpAQCAtNjksNyArNjksNyBAQAogICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMgaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JwYy1saXRlcmFsLWdlbmVyYXRlZC13c2RsL3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U/V1NETCIvPgogICAgIDwvYW50Y2FsbD4KICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMiCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyIiAKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY29tbW9uLyoqLCB3ZWJjbGllbnQvKioiLz4KICAgICAgIDxjb3B5IGZpbGU9Ii4vY2xpZW50LXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvd2ViLnhtbCIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jbGllbnQtc3VuLXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvc3VuLXdlYi54bWwiLz4KQEAgLTEyNSwxMSArMTI1LDExIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktYXBwIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjb21tb24vKiosIGNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC9jbGllbnQtd2ViLnhtbAppbmRleCBlZWI3MzBkLi43OTViMDUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvZ2VuZXJhdGVkX3dzZGwvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IGE5NGMwOGUuLmIzMWI3MWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvZ2VuZXJhdGVkX3dzZGwvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvcnBjLWxpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvZ2VuZXJhdGVkX3dzZGwiOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvcnBjLWxpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvZ2VuZXJhdGVkX3dzZGwiOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0SWQpOwpAQCAtNDUsOCArNDUsOCBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgZmFpbCgpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTcsMTUgKzU3LDE1IEBACiAgICAgICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7CiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0JCWJvb2xlYW4gZm91bmQgPSBmYWxzZTsKKyAgICAgICAgYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0JCQlpZihsaW5lLmluZGV4T2YoIlNVQ0NFU1MiKSAhPSAtMSkgZm91bmQgPSB0cnVlOwkKLQkJCWJ1ZmZlci5hcHBlbmQobGluZSArICJcbiIpOworICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTVUNDRVNTIikgIT0gLTEpIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQobGluZSArICJcbiIpOwogICAgICAgICB9CiAgICAgICAgIGxvZyhidWZmZXIudG9TdHJpbmcoKSk7Ci0JICAgIGlmKCFmb3VuZCkgcmV0dXJuIDUwNTsJCisgICAgICAgIGlmKCFmb3VuZCkgcmV0dXJuIDUwNTsKICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsL2NvbW1vbi9JbmNvbWVUYXhEZXRhaWxzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsL2NvbW1vbi9JbmNvbWVUYXhEZXRhaWxzLmphdmEKaW5kZXggNTdiMDBlOC4uMzUwYjE2ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC9jb21tb24vSW5jb21lVGF4RGV0YWlscy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvZ2VuZXJhdGVkX3dzZGwvY29tbW9uL0luY29tZVRheERldGFpbHMuamF2YQpAQCAtMTcsMTAgKzE3LDEwIEBACiBwYWNrYWdlIGNvbW1vbjsKIAogcHVibGljIGNsYXNzIEluY29tZVRheERldGFpbHMgewotCXB1YmxpYyBTdHJpbmcgZmlyc3ROYW1lOwotCXB1YmxpYyBTdHJpbmcgbGFzdE5hbWU7Ci0JcHVibGljIFN0cmluZyBzdGF0dXM7IC8vIHNhbGFyaWVkLCBzZWxmLWVtcGxveWVkLCBzdHVkZW50LgotCXB1YmxpYyBsb25nIGFubnVhbEluY29tZTsKKyAgICBwdWJsaWMgU3RyaW5nIGZpcnN0TmFtZTsKKyAgICBwdWJsaWMgU3RyaW5nIGxhc3ROYW1lOworICAgIHB1YmxpYyBTdHJpbmcgc3RhdHVzOyAvLyBzYWxhcmllZCwgc2VsZi1lbXBsb3llZCwgc3R1ZGVudC4KKyAgICBwdWJsaWMgbG9uZyBhbm51YWxJbmNvbWU7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQppbmRleCAxYzQxNGNhLi5lMGYyYTQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQpAQCAtMzEsNDkgKzMxLDQ5IEBACiBAU09BUEJpbmRpbmcoc3R5bGU9U09BUEJpbmRpbmcuU3R5bGUuUlBDLCB1c2U9U09BUEJpbmRpbmcuVXNlLkxJVEVSQUwpCiBwdWJsaWMgY2xhc3MgQ2FsY3VsYXRvciB7CiAKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyB0ZXN0TmFtZSA9ICJcblRlc3QgOjogcnBjLWxpdGVyYWwtZ2VuZXJhdGVkLXdzZGwgOiAiOwotCXB1YmxpYyBDYWxjdWxhdG9yKCkge30KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyB0ZXN0TmFtZSA9ICJcblRlc3QgOjogcnBjLWxpdGVyYWwtZ2VuZXJhdGVkLXdzZGwgOiAiOworICAgIHB1YmxpYyBDYWxjdWxhdG9yKCkge30KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0iYWRkIiwgYWN0aW9uPSJ1cm46QWRkIikKLQlwdWJsaWMgaW50IGFkZChpbnQgaSwgaW50IGopIHRocm93cyBFeGNlcHRpb24geworICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0iYWRkIiwgYWN0aW9uPSJ1cm46QWRkIikKKyAgICBwdWJsaWMgaW50IGFkZChpbnQgaSwgaW50IGopIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAgICAgICAgIGludCBrID0gaSAraiA7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3ROYW1lICsgaSArICIrIiArIGogKyIgPSAiICsgayk7Ci0JCS8vdGhyb3cgbmV3IGphdmEubGFuZy5FeGNlcHRpb24oIlRoaXMgaXMgbXkgZXhjZXB0aW9uIik7IAotCQlyZXR1cm4gazsKLQl9CisgICAgICAgIC8vdGhyb3cgbmV3IGphdmEubGFuZy5FeGNlcHRpb24oIlRoaXMgaXMgbXkgZXhjZXB0aW9uIik7CisgICAgICAgIHJldHVybiBrOworICAgIH0KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0iY2FsY3VsYXRlSW5jb21lVGF4IiwgYWN0aW9uPSJ1cm46Q2FsY3VsYXRlSW5jb21lVGF4IikKLQlwdWJsaWMgbG9uZyBjYWxjdWxhdGVJbmNvbWVUYXgoSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzCi0JCQkgLCBJbmNvbWVUYXhEZXRhaWxzIGRldGFpbHMyCi0JCQkgLCBJbmNvbWVUYXhEZXRhaWxzIGRldGFpbHMzCi0JCQkgLCBJbmNvbWVUYXhEZXRhaWxzIGRldGFpbHM0Ci0JCQkgLCBJbmNvbWVUYXhEZXRhaWxzIGRldGFpbHM1Ci0JCQkgLCBJbmNvbWVUYXhEZXRhaWxzIGRldGFpbHM2Ci0JCQkgLCBJbmNvbWVUYXhEZXRhaWxzIGRldGFpbHM3Ci0JCQkgLCBJbmNvbWVUYXhEZXRhaWxzIGRldGFpbHM4Ci0JCQkgLCBJbmNvbWVUYXhEZXRhaWxzIGRldGFpbHM5Ci0JCQkgLCBJbmNvbWVUYXhEZXRhaWxzIGRldGFpbHMxMAotCQkJKSB7Ci0JCWxvbmcgaW5jb21lID0gZGV0YWlscy5hbm51YWxJbmNvbWU7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbih0ZXN0TmFtZSArICJBbm51YWwgaW5jb21lID0gIiArIGluY29tZSk7Ci0JCWxvbmcgdGF4UmF0ZSA9IDMwOyAvLyAzMCUKLQkJbG9uZyB0YXhUb0JlUGFpZCA9IGluY29tZSAvIHRheFJhdGU7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbih0ZXN0TmFtZSArIlRheCB0byBiZSBwYWlkID0gIiArIHRheFRvQmVQYWlkKTsKLQkJcmV0dXJuIHRheFRvQmVQYWlkOwotCX0KKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImNhbGN1bGF0ZUluY29tZVRheCIsIGFjdGlvbj0idXJuOkNhbGN1bGF0ZUluY29tZVRheCIpCisgICAgcHVibGljIGxvbmcgY2FsY3VsYXRlSW5jb21lVGF4KEluY29tZVRheERldGFpbHMgZGV0YWlscworICAgICAgICAgICAgICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzMgorICAgICAgICAgICAgICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzMworICAgICAgICAgICAgICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzNAorICAgICAgICAgICAgICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzNQorICAgICAgICAgICAgICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzNgorICAgICAgICAgICAgICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzNworICAgICAgICAgICAgICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzOAorICAgICAgICAgICAgICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzOQorICAgICAgICAgICAgICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzMTAKKyAgICAgICAgICAgICkgeworICAgICAgICBsb25nIGluY29tZSA9IGRldGFpbHMuYW5udWFsSW5jb21lOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVzdE5hbWUgKyAiQW5udWFsIGluY29tZSA9ICIgKyBpbmNvbWUpOworICAgICAgICBsb25nIHRheFJhdGUgPSAzMDsgLy8gMzAlCisgICAgICAgIGxvbmcgdGF4VG9CZVBhaWQgPSBpbmNvbWUgLyB0YXhSYXRlOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVzdE5hbWUgKyJUYXggdG8gYmUgcGFpZCA9ICIgKyB0YXhUb0JlUGFpZCk7CisgICAgICAgIHJldHVybiB0YXhUb0JlUGFpZDsKKyAgICB9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhpIiwgYWN0aW9uPSJ1cm46U2F5SGkiKQotCXB1YmxpYyBTdHJpbmcgc2F5SGkoKSB7Ci0JCXJldHVybiB0ZXN0TmFtZSArICJIaSBmcm9tIHNheUhpKCkiOwotCX0KKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhpIiwgYWN0aW9uPSJ1cm46U2F5SGkiKQorICAgIHB1YmxpYyBTdHJpbmcgc2F5SGkoKSB7CisgICAgICAgIHJldHVybiB0ZXN0TmFtZSArICJIaSBmcm9tIHNheUhpKCkiOworICAgIH0KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0icHJpbnRIaSIsIGFjdGlvbj0idXJuOlByaW50SGkiKQotCXB1YmxpYyB2b2lkIHByaW50SGkoKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbih0ZXN0TmFtZSArIkhpIGZyb20gcHJpbnRIaSgpIik7Ci0JfQorICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0icHJpbnRIaSIsIGFjdGlvbj0idXJuOlByaW50SGkiKQorICAgIHB1YmxpYyB2b2lkIHByaW50SGkoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0TmFtZSArIkhpIGZyb20gcHJpbnRIaSgpIik7CisgICAgfQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJwcmludEhpVG9NZSIsIGFjdGlvbj0idXJuOlByaW50SGlUb01lIikKLQlwdWJsaWMgdm9pZCBwcmludEhpVG9NZShTdHJpbmcgbmFtZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4odGVzdE5hbWUgKyJIaSB0byAiICsgbmFtZSArICIgZnJvbSBwcmludEhpVG9NZSgpIik7Ci0JfQorICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0icHJpbnRIaVRvTWUiLCBhY3Rpb249InVybjpQcmludEhpVG9NZSIpCisgICAgcHVibGljIHZvaWQgcHJpbnRIaVRvTWUoU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3ROYW1lICsiSGkgdG8gIiArIG5hbWUgKyAiIGZyb20gcHJpbnRIaVRvTWUoKSIpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvZ2VuZXJhdGVkX3dzZGwvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvZ2VuZXJhdGVkX3dzZGwvd2ViLnhtbAppbmRleCAwN2UxNDc3Li43OThjNjliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvZ2VuZXJhdGVkX3dzZGwvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvZ2VuZXJhdGVkX3dzZGwvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQppbmRleCA4OWM2ZjYyLi5mOTM1NTc1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMCw3OSArMzAsNzkgQEAKIAogICAgICAgIEBXZWJTZXJ2aWNlUmVmKG5hbWU9InN1bi13ZWIuc2VydmljZXJlZi9jYWxjdWxhdG9yIikgQ2FsY3VsYXRvclNlcnZpY2Ugc2VydmljZTsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQogICAgICAgICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewotCSAgICBQcmludFdyaXRlciBvdXQ9bnVsbDsKKyAgICAgICAgUHJpbnRXcml0ZXIgb3V0PW51bGw7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFNlcnZpY2UgaXMgOiIgKyBzZXJ2aWNlKTsKICAgICAgICAgICAgICAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKLSAgICAgICAgICAgIAlvdXQgPSByZXNwLmdldFdyaXRlcigpOworICAgICAgICAgICAgICAgIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CiAgICAgICAgICAgICAgICAgQ2FsY3VsYXRvciBwb3J0ID0gc2VydmljZS5nZXRDYWxjdWxhdG9yUG9ydCgpOwotCQkJCUluY29tZVRheERldGFpbHMgaXREZXRhaWxzID0gbmV3IEluY29tZVRheERldGFpbHMoKTsKLQkJCQlpdERldGFpbHMuc2V0Rmlyc3ROYW1lICggImJoYXZhbmkiKTsKLQkJCQlpdERldGFpbHMuc2V0TGFzdE5hbWUgKCJzIik7Ci0JCQkJaXREZXRhaWxzLnNldEFubnVhbEluY29tZSAoIDQwMDAwMCk7Ci0JCQkJaXREZXRhaWxzLnNldFN0YXR1cyAoInNhbGFyaWVkIik7CisgICAgICAgICAgICAgICAgSW5jb21lVGF4RGV0YWlscyBpdERldGFpbHMgPSBuZXcgSW5jb21lVGF4RGV0YWlscygpOworICAgICAgICAgICAgICAgIGl0RGV0YWlscy5zZXRGaXJzdE5hbWUgKCAiYmhhdmFuaSIpOworICAgICAgICAgICAgICAgIGl0RGV0YWlscy5zZXRMYXN0TmFtZSAoInMiKTsKKyAgICAgICAgICAgICAgICBpdERldGFpbHMuc2V0QW5udWFsSW5jb21lICggNDAwMDAwKTsKKyAgICAgICAgICAgICAgICBpdERldGFpbHMuc2V0U3RhdHVzICgic2FsYXJpZWQiKTsKIAotCQkJCWxvbmcgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCQkJbG9uZyByZXQgPSAwOwotCQkJCS8vIE1ha2UgMTAwIGNhbGxzIHRvIHNlZSBob3cgbXVjaCB0aW1lIGl0IHRha2VzLgotCQkJCS8vZm9yKGludCBpPTA7IGk8MTAwMDsgaSsrKSB7Ci0JCQkJCXJldCA9IHBvcnQuY2FsY3VsYXRlSW5jb21lVGF4KGl0RGV0YWlscwotCQkJCQkJCSwgaXREZXRhaWxzCi0JCQkJCQkJLCBpdERldGFpbHMKLQkJCQkJCQksIGl0RGV0YWlscwotCQkJCQkJCSwgaXREZXRhaWxzCi0JCQkJCQkJLCBpdERldGFpbHMKLQkJCQkJCQksIGl0RGV0YWlscwotCQkJCQkJCSwgaXREZXRhaWxzCi0JCQkJCQkJLCBpdERldGFpbHMKLQkJCQkJCQksIGl0RGV0YWlscwotCQkJCQkJCSk7Ci0JCQkJLy99Ci0JCQkJbG9uZyB0aW1lVGFrZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKLQkJCQkKKyAgICAgICAgICAgICAgICBsb25nIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICAgICAgICAgIGxvbmcgcmV0ID0gMDsKKyAgICAgICAgICAgICAgICAvLyBNYWtlIDEwMCBjYWxscyB0byBzZWUgaG93IG11Y2ggdGltZSBpdCB0YWtlcy4KKyAgICAgICAgICAgICAgICAvL2ZvcihpbnQgaT0wOyBpPDEwMDA7IGkrKykgeworICAgICAgICAgICAgICAgICAgICByZXQgPSBwb3J0LmNhbGN1bGF0ZUluY29tZVRheChpdERldGFpbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGl0RGV0YWlscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgaXREZXRhaWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBpdERldGFpbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGl0RGV0YWlscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgaXREZXRhaWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBpdERldGFpbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGl0RGV0YWlscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgaXREZXRhaWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBpdERldGFpbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIC8vfQorICAgICAgICAgICAgICAgIGxvbmcgdGltZVRha2VuID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWU7CisKICAgICAgICAgICAgICAgICAvL2ludCByZXQgPSBwb3J0LmFkZCgxLCAyKTsKLQkJcHJpbnRTdWNjZXNzKCJZb3VyIGluY29tZSB0YXggaXMgOiBScyAiLCBvdXQscmV0LCB0aW1lVGFrZW4pOwotCQlzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJaW50IGsgPSBwb3J0LmFkZCg1MDUsIDUwKTsKLQkJCQl0aW1lVGFrZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKLQkJcHJpbnRTdWNjZXNzKCJTdW0gb2YgNTA1IGFuZCA1MCBpcyA6ICIsIG91dCxrLCB0aW1lVGFrZW4pOworICAgICAgICBwcmludFN1Y2Nlc3MoIllvdXIgaW5jb21lIHRheCBpcyA6IFJzICIsIG91dCxyZXQsIHRpbWVUYWtlbik7CisgICAgICAgIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICBpbnQgayA9IHBvcnQuYWRkKDUwNSwgNTApOworICAgICAgICAgICAgICAgIHRpbWVUYWtlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOworICAgICAgICBwcmludFN1Y2Nlc3MoIlN1bSBvZiA1MDUgYW5kIDUwIGlzIDogIiwgb3V0LGssIHRpbWVUYWtlbik7CiAKLQkJc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCVN0cmluZyBoaSA9IHBvcnQuc2F5SGkoKTsKLQkJCQl0aW1lVGFrZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKLQkJcHJpbnRTdWNjZXNzKCJPdXRwdXQgZnJvbSB3ZWJzZXJ2aWNlIDogIiwgb3V0LCBoaSwgdGltZVRha2VuKTsKKyAgICAgICAgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgIFN0cmluZyBoaSA9IHBvcnQuc2F5SGkoKTsKKyAgICAgICAgICAgICAgICB0aW1lVGFrZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKKyAgICAgICAgcHJpbnRTdWNjZXNzKCJPdXRwdXQgZnJvbSB3ZWJzZXJ2aWNlIDogIiwgb3V0LCBoaSwgdGltZVRha2VuKTsKIAotCQlzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJcG9ydC5wcmludEhpKCk7Ci0JCQkJdGltZVRha2VuID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWU7Ci0JCXByaW50U3VjY2VzcygiU1VDQ0VTUyA6ICIsIG91dCwgIldlYnNlcnZpY2UgaGFzIHN1Y2Nlc3NmdWxseSBwcmludGVkIGhpIGluIHNlcnZlci5sb2ciLCB0aW1lVGFrZW4pOworICAgICAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgcG9ydC5wcmludEhpKCk7CisgICAgICAgICAgICAgICAgdGltZVRha2VuID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWU7CisgICAgICAgIHByaW50U3VjY2VzcygiU1VDQ0VTUyA6ICIsIG91dCwgIldlYnNlcnZpY2UgaGFzIHN1Y2Nlc3NmdWxseSBwcmludGVkIGhpIGluIHNlcnZlci5sb2ciLCB0aW1lVGFrZW4pOwogCi0JCXN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlwb3J0LnByaW50SGlUb01lKCJKYXZhRUVTZXJ2aWNlRW5naW5lIik7Ci0JCQkJdGltZVRha2VuID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWU7Ci0JCXByaW50U3VjY2VzcygiU1VDQ0VTUyA6ICIsIG91dCwgIldlYnNlcnZpY2UgaGFzIHN1Y2Nlc3NmdWxseSBwcmludGVkIGhpIHRvIG1lIGluIHNlcnZlci5sb2ciLCB0aW1lVGFrZW4pOworICAgICAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgcG9ydC5wcmludEhpVG9NZSgiSmF2YUVFU2VydmljZUVuZ2luZSIpOworICAgICAgICAgICAgICAgIHRpbWVUYWtlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOworICAgICAgICBwcmludFN1Y2Nlc3MoIlNVQ0NFU1MgOiAiLCBvdXQsICJXZWJzZXJ2aWNlIGhhcyBzdWNjZXNzZnVsbHkgcHJpbnRlZCBoaSB0byBtZSBpbiBzZXJ2ZXIubG9nIiwgdGltZVRha2VuKTsKIAogICAgICAgICAgICAgfSBjYXRjaChqYXZhLmxhbmcuRXhjZXB0aW9uIGUpIHsKLQkJLy9lLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICAJcHJpbnRGYWlsdXJlKG91dCwgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAvL2UucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBwcmludEZhaWx1cmUob3V0LCBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewotCQlpZihvdXQgIT0gbnVsbCkgeworICAgICAgICBpZihvdXQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBvdXQuZmx1c2goKTsKICAgICAgICAgICAgICAgICAgICAgb3V0LmNsb3NlKCk7Ci0JCX0KLQkgICAgfQorICAgICAgICB9CisgICAgICAgIH0KICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBwcmludEZhaWx1cmUoUHJpbnRXcml0ZXIgb3V0LCBTdHJpbmcgZXJyTXNnKSB7Ci0JCWlmKG91dCA9PSBudWxsKSByZXR1cm47Ci0JCW91dC5wcmludGxuKCI8aHRtbD4iKTsKKyAgICAgICAgaWYob3V0ID09IG51bGwpIHJldHVybjsKKyAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlRlc3RTZXJ2bGV0PC90aXRsZT4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwpAQCAtMTE1LDE0ICsxMTUsMTQgQEAKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBwcmludFN1Y2Nlc3MoU3RyaW5nIG1lc3NhZ2UsIFByaW50V3JpdGVyIG91dCwgbG9uZyByZXN1bHQsIGxvbmcgdGltZVRha2VuKSB7Ci0JCWlmKG91dCA9PSBudWxsKSByZXR1cm47CisgICAgICAgIGlmKG91dCA9PSBudWxsKSByZXR1cm47CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIlxuXG4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbihtZXNzYWdlICsgcmVzdWx0KTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiVGltZSB0YWtlbiB0byBpbnZva2UgdGhlIGVuZHBvaW50IG9wZXJhdGlvbiBpcyAgOiAgIiArIHRpbWVUYWtlbiArICIgbWlsbGlzZWNvbmRzLiIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIHByaW50U3VjY2VzcyhTdHJpbmcgbWVzc2FnZSwgUHJpbnRXcml0ZXIgb3V0LCBTdHJpbmcgcmVzdWx0LCBsb25nIHRpbWVUYWtlbikgewotCQlpZihvdXQgPT0gbnVsbCkgcmV0dXJuOworICAgICAgICBpZihvdXQgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJcblxuIik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4obWVzc2FnZSArIHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIlRpbWUgdGFrZW4gdG8gaW52b2tlIHRoZSBlbmRwb2ludCBvcGVyYXRpb24gaXMgIDogICIgKyB0aW1lVGFrZW4gKyAiIG1pbGxpc2Vjb25kcy4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VjdXJpdHkvanNlX29ubHkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VjdXJpdHkvanNlX29ubHkvYnVpbGQucHJvcGVydGllcwppbmRleCAwNGFlZDgwLi41YWVkMTI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyZWQtZWpiV1MiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L2J1aWxkLnhtbAppbmRleCAzMWYyNGE3Li5lYTliZmEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L2J1aWxkLnhtbApAQCAtNTAsMTUgKzUwLDE1IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS11c2VyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS11c2VyLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSIke2ZpbGVVc2VyfSIvPgotCTxwYXJhbSBuYW1lPSJwYXNzd29yZCIgdmFsdWU9IiR7ZmlsZVVzZXJQYXNzd29yZH0iLz4KLQk8cGFyYW0gbmFtZT0iZ3JvdXBzIiB2YWx1ZT0iJHtmaWxlVXNlckdyb3Vwc30iLz4KKyAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9IiR7ZmlsZVVzZXJ9Ii8+CisgICAgPHBhcmFtIG5hbWU9InBhc3N3b3JkIiB2YWx1ZT0iJHtmaWxlVXNlclBhc3N3b3JkfSIvPgorICAgIDxwYXJhbSBuYW1lPSJncm91cHMiIHZhbHVlPSIke2ZpbGVVc2VyR3JvdXBzfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtdXNlciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtdXNlci1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0iJHtmaWxlVXNlcn0iLz4KKyAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9IiR7ZmlsZVVzZXJ9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTEwNywxMCArMTA3LDEwIEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LWpiaS1lbmFibGVkIj4KLQk8cGFyYW0gbmFtZT0iYXBwTmFtZSIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+Ci0JPHBhcmFtIG5hbWU9IndzTmFtZSIgdmFsdWU9IkhlbGxvRUpCIi8+Ci0JPHBhcmFtIG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1tb2R1bGUiLz4KLQk8cGFyYW0gbmFtZT0iZmxhZyIgdmFsdWU9InRydWUiLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwTmFtZSIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+CisgICAgPHBhcmFtIG5hbWU9IndzTmFtZSIgdmFsdWU9IkhlbGxvRUpCIi8+CisgICAgPHBhcmFtIG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1tb2R1bGUiLz4KKyAgICA8cGFyYW0gbmFtZT0iZmxhZyIgdmFsdWU9InRydWUiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApAQCAtMTE4LDcgKzExOCw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktYXBwIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGVjaG8gbWVzc2FnZT0iVW5kZXBsb3lpbmcgY2xpZW50IGFwcGxpY2F0aW9uIi8+CiAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KQEAgLTE0NSw4ICsxNDUsOCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5UZXN0Q2xpZW50Ij4KQEAgLTE1NCw3ICsxNTQsNyBAQAogICAgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDxhcmcgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L3dzY2xpZW50L3dlYmNsaWVudC9SZXF1ZXN0UHJvY2Vzc29yIi8+Ci0JPGFyZyB2YWx1ZT0iJHtmaWxlVXNlcn06JHtmaWxlVXNlclBhc3N3b3JkfSIvPgorICAgIDxhcmcgdmFsdWU9IiR7ZmlsZVVzZXJ9OiR7ZmlsZVVzZXJQYXNzd29yZH0iLz4KICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS9jbGllbnQtc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L2NsaWVudC1zdW4td2ViLnhtbAppbmRleCA2MzI3YjEzLi40ZjBmNjZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L2NsaWVudC1zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L2NsaWVudC1zdW4td2ViLnhtbApAQCAtMjksMTUgKzI5LDE1IEBACiAgIDxzZXJ2aWNlLXJlZj4KICAgICA8c2VydmljZS1yZWYtbmFtZT5zdW4td2ViLnNlcnZpY2VyZWYvSGVsbG9FSkJTZXJ2aWNlPC9zZXJ2aWNlLXJlZi1uYW1lPgogICAgIDxwb3J0LWluZm8+Ci0JPHNlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPmVuZHBvaW50LmVqYi5IZWxsbzwvc2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+Ci0JPHdzZGwtcG9ydD4KLSAgICAJICA8bmFtZXNwYWNlVVJJPmh0dHA6Ly9lbmRwb2ludC9lamI8L25hbWVzcGFjZVVSST4KLSAgICAJICA8bG9jYWxwYXJ0PkhlbGxvRUpCUG9ydDwvbG9jYWxwYXJ0PgotCTwvd3NkbC1wb3J0PgotICAgIAk8c3R1Yi1wcm9wZXJ0eT4KLQkgIDxuYW1lPmpiaS1lbmFibGVkPC9uYW1lPgotCSAgPHZhbHVlPnRydWU8L3ZhbHVlPgotCTwvc3R1Yi1wcm9wZXJ0eT4KKyAgICA8c2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+ZW5kcG9pbnQuZWpiLkhlbGxvPC9zZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT4KKyAgICA8d3NkbC1wb3J0PgorICAgICAgICAgIDxuYW1lc3BhY2VVUkk+aHR0cDovL2VuZHBvaW50L2VqYjwvbmFtZXNwYWNlVVJJPgorICAgICAgICAgIDxsb2NhbHBhcnQ+SGVsbG9FSkJQb3J0PC9sb2NhbHBhcnQ+CisgICAgPC93c2RsLXBvcnQ+CisgICAgICAgIDxzdHViLXByb3BlcnR5PgorICAgICAgPG5hbWU+amJpLWVuYWJsZWQ8L25hbWU+CisgICAgICA8dmFsdWU+dHJ1ZTwvdmFsdWU+CisgICAgPC9zdHViLXByb3BlcnR5PgogICAgIDwvcG9ydC1pbmZvPgogICAgIDx3c2RsLW92ZXJyaWRlPmh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9IZWxsb0VKQlNlcnZpY2UvSGVsbG9FSkI/V1NETDwvd3NkbC1vdmVycmlkZT4KICAgPC9zZXJ2aWNlLXJlZj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VjdXJpdHkvanNlX29ubHkvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L2NsaWVudC13ZWIueG1sCmluZGV4IDFkMWYzZmUuLjhlMmM2NDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VjdXJpdHkvanNlX29ubHkvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggMDg2ZmY0OS4uYzE3MzJlOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VjdXJpdHkvanNlX29ubHkvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDgsNyArNDgsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCxwYXNzd2QpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTU3LDkgKzU3LDkgQEAKICAgICBwcml2YXRlIGludCBpbnZva2VTZXJ2bGV0KFN0cmluZyB1cmwsIFN0cmluZyB1c2VyUGFzc3dvcmQpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBsb2coIkludm9raW5nIHVybCA9ICIgKyB1cmwrIiwgcGFzc3dvcmQgPSAiICsgdXNlclBhc3N3b3JkKTsKICAgICAgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7Ci0JU3RyaW5nIGVuY29kaW5nID0gbmV3IHN1bi5taXNjLkJBU0U2NEVuY29kZXIoKS5lbmNvZGUgKHVzZXJQYXNzd29yZC5nZXRCeXRlcygpKTsKKyAgICBTdHJpbmcgZW5jb2RpbmcgPSBuZXcgc3VuLm1pc2MuQkFTRTY0RW5jb2RlcigpLmVuY29kZSAodXNlclBhc3N3b3JkLmdldEJ5dGVzKCkpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjMSA9IChIdHRwVVJMQ29ubmVjdGlvbil1Lm9wZW5Db25uZWN0aW9uKCk7Ci0JYzEuc2V0UmVxdWVzdFByb3BlcnR5ICgiQXV0aG9yaXphdGlvbiIsICJCYXNpYyAiICsgZW5jb2RpbmcpOworICAgIGMxLnNldFJlcXVlc3RQcm9wZXJ0eSAoIkF1dGhvcml6YXRpb24iLCAiQmFzaWMgIiArIGVuY29kaW5nKTsKICAgICAgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlciAobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CkBAIC02Nyw5ICs2Nyw5IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBFSkIgd2Vic2VydmljZSBJUyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJbSkJJLVNlY3VyaXR5VGVzdCBQcmluY2lwYWxTZW50PXVzZXIgUHJpbmNpcGFsR290PXVzZXJdIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS9lbmRwb2ludC9lamIvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VjdXJpdHkvanNlX29ubHkvZW5kcG9pbnQvZWpiL0hlbGxvLmphdmEKaW5kZXggMjMxNjdlYi4uOTA3MzkzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS9lbmRwb2ludC9lamIvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L2VuZHBvaW50L2VqYi9IZWxsby5qYXZhCkBAIC0yMiw1ICsyMiw1IEBACiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9lbmRwb2ludC9lamIiKQogcHVibGljIGludGVyZmFjZSBIZWxsbyB7CiAKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pOworICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobyk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L2VuZHBvaW50L2VqYi9IZWxsb0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS9lbmRwb2ludC9lamIvSGVsbG9FSkIuamF2YQppbmRleCAxNDAyODFjLi5mNmY1YjA0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L2VuZHBvaW50L2VqYi9IZWxsb0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VjdXJpdHkvanNlX29ubHkvZW5kcG9pbnQvZWpiL0hlbGxvRUpCLmphdmEKQEAgLTMwLDEwICszMCwxMCBAQAogICAgIEBSZXNvdXJjZSBwcml2YXRlIFNlc3Npb25Db250ZXh0IGN0eDsKIAogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgewotCVN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBzYXlIZWxsbygiKyB3aG8rIikiKTsKLQlQcmluY2lwYWwgcCA9IGN0eC5nZXRDYWxsZXJQcmluY2lwYWwoKTsKLQlTdHJpbmcgcHJpbmNpcGFsID0gKHAgPT0gbnVsbCk/ICJOVUxMIjogcC50b1N0cmluZygpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiKioqKkVKQjogcHJpbmNpcGFsID0gIiArIHByaW5jaXBhbCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIHNheUhlbGxvKCIrIHdobysiKSIpOworICAgIFByaW5jaXBhbCBwID0gY3R4LmdldENhbGxlclByaW5jaXBhbCgpOworICAgIFN0cmluZyBwcmluY2lwYWwgPSAocCA9PSBudWxsKT8gIk5VTEwiOiBwLnRvU3RyaW5nKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqRUpCOiBwcmluY2lwYWwgPSAiICsgcHJpbmNpcGFsKTsKICAgICAgICAgcmV0dXJuICJKQkktU2VjdXJpdHlUZXN0ICIgKyB3aG8gKyAiIFByaW5jaXBhbEdvdD0iK3ByaW5jaXBhbDsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L3dlYi54bWwKaW5kZXggMDdlMTQ3Ny4uNzk4YzY5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VjdXJpdHkvanNlX29ubHkvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggODZmYTNlNC4uMmFjMjFjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VjdXJpdHkvanNlX29ubHkvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzgsMTMgKzM4LDEzIEBACiAgICAgICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgUHJpbmNpcGFsIHAgPSByZXEuZ2V0VXNlclByaW5jaXBhbCgpOwotCSAgICBTdHJpbmcgcHJpbmNpcGFsID0gKHA9PW51bGwpPyAiTlVMTCI6IHAudG9TdHJpbmcoKTsKKyAgICAgICAgU3RyaW5nIHByaW5jaXBhbCA9IChwPT1udWxsKT8gIk5VTEwiOiBwLnRvU3RyaW5nKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKipTZXJ2bGV0OiBwcmluY2lwYWwgPSAiICsgcHJpbmNpcGFsKTsKIAogICAgICAgICAgICAgSGVsbG8gcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9FSkJQb3J0KCk7Ci0JICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJQcmluY2lwYWxTZW50PSIrcHJpbmNpcGFsKTsKKyAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIlByaW5jaXBhbFNlbnQ9IitwcmluY2lwYWwpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXR1cm4gdmFsdWUgZnJvbSB3ZWJzZXJ2aWNlOiIrcmV0KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwogICAgICAgICAgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9idWlsZC54bWwKaW5kZXggNDc1YjFmNC4uMGNiODZiMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2J1aWxkLnhtbApAQCAtMjUsNiArMjUsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiPgogICAgICAgICA8YW50IGRpcj0id2ViIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJlamIiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImVqYiIgdGFyZ2V0PSJhbGwiLz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvYnVpbGQueG1sCmluZGV4IDJlNzZmYzEuLjNlYWVlYTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2J1aWxkLnhtbApAQCAtMjEsNiArMjEsNiBAQAogXT4KIDxwcm9qZWN0IG5hbWU9ImpzcjEwOC1pbnRlZ3JhdGlvbiB0ZXN0cyIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KICAgICA8dGFyZ2V0IG5hbWU9ImFsbCI+Ci0JPGFudCBkaXI9ImhlbGxvIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJoZWxsbyIgdGFyZ2V0PSJhbGwiLz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX2VqYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfZWpiL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWI3NDJmZS4uYmM5NjAzNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfZWpiL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfZWpiL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImpiaS1jb21wb25lbnQtc3UtYXNzZW1ibHkiIHZhbHVlPSJlamJfbm9uYW1lX0hpRUpCX2NvbnN1bWVyX2Fzc2VtYmx5Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9lamIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfZWpiL2J1aWxkLnhtbAppbmRleCA1ZGY0NzllLi5kM2M0MDYyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9lamIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX2VqYi9idWlsZC54bWwKQEAgLTQyLDcgKzQyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9Im15LXdzZGwtaW1wb3J0Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3c2RsLWltcG9ydCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic2VydmVyIiB2YWx1ZT0iJHtzZXJ2ZXJ9Ii8+Ci0gCSAgICA8cGFyYW0gbmFtZT0icG9ydCIgdmFsdWU9IkhpRUpCIi8+CisgICAgICAgICA8cGFyYW0gbmFtZT0icG9ydCIgdmFsdWU9IkhpRUpCIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApAQCAtNTIsNiArNTIsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGZhaWxlZCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfZWpiL2VuZHBvaW50L2pheHdzL0hpLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9lamIvZW5kcG9pbnQvamF4d3MvSGkuamF2YQppbmRleCBkYmUwN2NlLi5mMjFlOWY1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9lamIvZW5kcG9pbnQvamF4d3MvSGkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9lamIvZW5kcG9pbnQvamF4d3MvSGkuamF2YQpAQCAtMjIsNSArMjIsNSBAQAogdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZW5kcG9pbnQvamF4d3MiKQogcHVibGljIGludGVyZmFjZSBIaSB7CiAKLQlwdWJsaWMgU3RyaW5nIHNheUhpKFN0cmluZyB3aG8pOworICAgIHB1YmxpYyBTdHJpbmcgc2F5SGkoU3RyaW5nIHdobyk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9lamIvZW5kcG9pbnQvamF4d3MvSGlFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX2VqYi9lbmRwb2ludC9qYXh3cy9IaUVKQi5qYXZhCmluZGV4IGY5ODAxYmIuLjAzNTMyYWQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX2VqYi9lbmRwb2ludC9qYXh3cy9IaUVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX2VqYi9lbmRwb2ludC9qYXh3cy9IaUVKQi5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBwdWJsaWMgY2xhc3MgSGlFSkIgaW1wbGVtZW50cyBIaSB7CiAKICAgICBwdWJsaWMgU3RyaW5nIHNheUhpKFN0cmluZyB3aG8pIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEVKQjIiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEVKQjIiKTsKICAgICAgICAgcmV0dXJuICJXZWJTdmNUZXN0LUhpIiArIHdobzsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9lamIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfZWpiL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCA0NWVjMjMzLi4zOTllM2I3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9lamIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX2VqYi9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKQEAgLTE5LDkgKzE5LDkgQEAKIAogPCEtLSBqYmkueG1sIGZpbGUgZm9yIHRoZSBTT0FQIGJpbmRpbmcgZGVwbG95bWVudHMgYmluZGluZy4gLS0+CiA8amJpCi0gICAgdmVyc2lvbj0iMS4wIiAKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICB2ZXJzaW9uPSIxLjAiCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIC4vamJpLnhzZCI+CiAgIDxzZXJ2aWNlLWFzc2VtYmx5PgogICAgIDxpZGVudGlmaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX2VqYi9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9lamIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCmluZGV4IGMzYmM0MWYuLjkzMDZhZjUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX2VqYi9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfZWpiL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMTgsMTUgKzE4LDE1IEBACiAtLT4KIAogPGpiaSB2ZXJzaW9uPSIxLjAiCi0JIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotCSB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLQkgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKLQkgeG1sbnM6dG5zPSJodHRwOi8vZW5kcG9pbnQvamF4d3MiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CQkKKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICAgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKKyAgICAgeG1sbnM6dG5zPSJodHRwOi8vZW5kcG9pbnQvamF4d3MiCisgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgorICAgIDxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CiAgICAgICAgIDxjb25zdW1lcyBpbnRlcmZhY2UtbmFtZT0idG5zOkhpRUpCU2VydmljZUludGVyZmFjZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6SGlFSkJTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJIaUVKQlBvcnQiLz4KICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RzIHhtbG5zPSIiIHJvbGU9ImNvbnN1bWVyIiBmaWxlLW5hbWU9ImVuZHBvaW50cy54bWwiIHR5cGU9InhtbCIvPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfc2VydmxldC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfc2VydmxldC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDY5ZDJjYTEuLjA3NDA2NjIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX3NlcnZsZXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3VidHJhY3RvcnNlcnZpY2UiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfc2VydmxldC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L2J1aWxkLnhtbAppbmRleCAzYWFiOGI1Li4wZjk2NzZlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L2J1aWxkLnhtbApAQCAtNzUsNyArNzUsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYmktY29tcG9uZW50LXN1Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbmZpZ3VyZS13ZWJzZXJ2aWNlLW1hbmFnZW1lbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImNvbmZpZ3VyZS13ZWJzZXJ2aWNlLW1hbmFnZW1lbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX3NlcnZsZXQvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L2NsaWVudC13ZWIueG1sCmluZGV4IGFmYWU4ZTcuLjIyZGY1ZTYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX3NlcnZsZXQvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfc2VydmxldC9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L2VuZHBvaW50L1N1YnRyYWN0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX3NlcnZsZXQvZW5kcG9pbnQvU3VidHJhY3Rvci5qYXZhCmluZGV4IDFiNjZiOWQuLjlmOWQ0YWYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX3NlcnZsZXQvZW5kcG9pbnQvU3VidHJhY3Rvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX3NlcnZsZXQvZW5kcG9pbnQvU3VidHJhY3Rvci5qYXZhCkBAIC0yNSwxNSArMjUsMTUgQEAKICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLmNvbS9TdWJ0cmFjdG9yIgogKQogcHVibGljIGNsYXNzIFN1YnRyYWN0b3IgewotCXN0YXRpYyBpbnQgY291bnQgPSAwOwotCXB1YmxpYyBTdWJ0cmFjdG9yKCkge30KKyAgICBzdGF0aWMgaW50IGNvdW50ID0gMDsKKyAgICBwdWJsaWMgU3VidHJhY3RvcigpIHt9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCi0JcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB7CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiLCBhY3Rpb249InVybjpBZGQiKQorICAgIHB1YmxpYyBpbnQgYWRkKGludCBpLCBpbnQgaikgewogICAgICAgICAgICAgICAgIGludCBrID0gaSAtaiA7Ci0JCWNvdW50Kys7CisgICAgICAgIGNvdW50Kys7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkgKyAiLSIgKyBqICsiID0gIiArIGspOwotIAkJU3lzdGVtLm91dC5wcmludGxuKCJDb3VudCBpczogIitjb3VudCk7Ci0JCXJldHVybiBrOwotCX0KKyAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bnQgaXM6ICIrY291bnQpOworICAgICAgICByZXR1cm4gazsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX3NlcnZsZXQvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDE2NThhNDAuLjlkNWZiMjYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX3NlcnZsZXQvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX3NlcnZsZXQvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOSw5ICsxOSw5IEBACiAKIDwhLS0gamJpLnhtbCBmaWxlIGZvciB0aGUgU09BUCBiaW5kaW5nIGRlcGxveW1lbnRzIGJpbmRpbmcuIC0tPgogPGpiaQotICAgIHZlcnNpb249IjEuMCIgCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgdmVyc2lvbj0iMS4wIgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSAuL2piaS54c2QiPgogICA8c2VydmljZS1hc3NlbWJseT4KICAgICA8aWRlbnRpZmljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX3NlcnZsZXQvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDZiOWIwMzUuLjEzYzMzZGUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX3NlcnZsZXQvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX3NlcnZsZXQvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOCwxNiArMTgsMTYgQEAKIC0tPgogCiA8amJpIHZlcnNpb249IjEuMCIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotCSB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgotCSB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLmNvbS9TdWJ0cmFjdG9yIgotCSB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KLQk8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgkJCi0JIDxjb25zdW1lcyBpbnRlcmZhY2UtbmFtZT0idG5zOlN1YnRyYWN0b3JTZXJ2aWNlIgorICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgICB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgorICAgICB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLmNvbS9TdWJ0cmFjdG9yIgorICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgorICAgICA8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpTdWJ0cmFjdG9yU2VydmljZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluay10eXBlPSJzdGFuZGFyZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6U3VidHJhY3RvclNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IlN1YnRyYWN0b3JQb3J0Ii8+CiAgICAgICAgICA8amF2YWVzYjphcnRpZmFjdHN0eXBlPldTREwxMTwvamF2YWVzYjphcnRpZmFjdHN0eXBlPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfc2VydmxldC93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfc2VydmxldC93ZWIueG1sCmluZGV4IGU0YzlhNTYuLjFhODRmZjAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX3NlcnZsZXQvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIFN1YnRyYWN0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5TdWJ0cmFjdG9yV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBTdWJ0cmFjdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+U3VidHJhY3RvcldBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU3VidHJhY3RvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+U3VidHJhY3RvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LlN1YnRyYWN0b3I8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBTdWJ0cmFjdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5TdWJ0cmFjdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPlN1YnRyYWN0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuU3VidHJhY3Rvcjwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9TdWJ0cmFjdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9TdWJ0cmFjdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfc2VydmxldC93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfc2VydmxldC93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGIyM2M5MGYuLjM2NjdhN2QgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX3NlcnZsZXQvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDggKzI4LDggQEAKIAogICAgICAgIEBXZWJTZXJ2aWNlUmVmKG5hbWU9InN1bi13ZWIuc2VydmljZXJlZi9zdWJ0cmFjdG9yIikgU3VidHJhY3RvclNlcnZpY2Ugc2VydmljZTsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODg5MjViMy4uNDZlMWE1OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImpiaS1jb21wb25lbnQtc3UtYXNzZW1ibHkiIHZhbHVlPSJlamJfbm9uYW1lX0hlbGxvRUpCX2NvbnN1bWVyX2Fzc2VtYmx5Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2J1aWxkLnhtbAppbmRleCBjMTllYWM0Li4xZDA4NWY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9idWlsZC54bWwKQEAgLTQ0LDggKzQ0LDggQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBmYWlsZWQiLz4KLSAgICA8L3RhcmdldD4gICAJCi0gICAKKyAgICA8L3RhcmdldD4KKwogICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktdGVzdCIgZGVwZW5kcz0iY2xlYW4iPgogICAgIDxiYXNlbmFtZSBmaWxlPSIke3NyYy1uYW1lfSIgcHJvcGVydHk9InNlcnZlciIgc3VmZml4PSIuamF2YSIvPgogICAgIDxkaXJuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0iZGlyZWN0b3J5Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vY2xpZW50L0pBWFdTQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vY2xpZW50L0pBWFdTQ2xpZW50LmphdmEKaW5kZXggNTZiMzIxNi4uM2FlMTYzZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2NsaWVudC9KQVhXU0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9jbGllbnQvSkFYV1NDbGllbnQuamF2YQpAQCAtMjcsMTYgKzI3LDE2IEBACiAKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8iOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsbyI7CiAKICAgICAgICAgQFdlYlNlcnZpY2VSZWYKICAgICAgICAgc3RhdGljIEhlbGxvRUpCU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0SWQpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7CiAgICAgICAgICAgICBKQVhXU0NsaWVudCBjbGllbnQgPSBuZXcgSkFYV1NDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQ0LDExICs0NCwxMSBAQAogICAgICAgICAgICAgICAgIEhlbGxvIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvRUpCUG9ydCgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPDEwO2krKykgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7Ci0JCSAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuUEFTUyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vY2xpZW50L1NPQVBFamJDb25zdW1lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2NsaWVudC9TT0FQRWpiQ29uc3VtZXIuamF2YQppbmRleCA3Y2NmZWU0Li4xODkwMDc4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vY2xpZW50L1NPQVBFamJDb25zdW1lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9jbGllbnQvU09BUEVqYkNvbnN1bWVyLmphdmEKQEAgLTI5LDE1ICsyOSwxNSBAQAogICAgICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvIjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8iOwogICAgICAgICBAV2ViU2VydmljZVJlZgogICAgICAgICBzdGF0aWMgSGVsbG9FSkJTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24odGVzdElkKTsKICAgICAgICAgICAgIFNPQVBFamJDb25zdW1lciBjbGllbnQgPSBuZXcgU09BUEVqYkNvbnN1bWVyKCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CkBAIC01MSwxMSArNTEsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFVSSSk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgc2V0dGluZyBlbmRwb2ludCBhZGRyZXNzIFVSSSIpOwogICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKLQkJaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCX0KKyAgICAgICAgfQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9jbGllbnQvU09BUEVqYkNvbnN1bWVyTm9uSHR0cEJDLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vY2xpZW50L1NPQVBFamJDb25zdW1lck5vbkh0dHBCQy5qYXZhCmluZGV4IGI2ZjdmZDEuLmJjOTZjZDYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9jbGllbnQvU09BUEVqYkNvbnN1bWVyTm9uSHR0cEJDLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2NsaWVudC9TT0FQRWpiQ29uc3VtZXJOb25IdHRwQkMuamF2YQpAQCAtMjgsMTYgKzI4LDE2IEBACiAKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8iOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsbyI7CiAKICAgICAgICAgQFdlYlNlcnZpY2VSZWYKICAgICAgICAgc3RhdGljIEhlbGxvRUpCU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0SWQpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7CiAgICAgICAgICAgICBTT0FQRWpiQ29uc3VtZXJOb25IdHRwQkMgY2xpZW50ID0gbmV3IFNPQVBFamJDb25zdW1lck5vbkh0dHBCQygpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdElkKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdElkKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewpAQCAtNTAsMTEgKzUwLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRVUkkpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIHNldHRpbmcgZW5kcG9pbnQgYWRkcmVzcyBVUkkiKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7Ci0JCWlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQl9CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vZW5kcG9pbnQvamF4d3MvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9lbmRwb2ludC9qYXh3cy9IZWxsby5qYXZhCmluZGV4IGZkNGY2ZjAuLjIyNmJmNWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9lbmRwb2ludC9qYXh3cy9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9lbmRwb2ludC9qYXh3cy9IZWxsby5qYXZhCkBAIC0yMiw1ICsyMiw1IEBACiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9lbmRwb2ludC9qYXh3cyIpCiBwdWJsaWMgaW50ZXJmYWNlIEhlbGxvIHsKIAotCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobyk7CisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDg3NjJjNGUuLjEzYWU0ZjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbApAQCAtMTksOSArMTksOSBAQAogCiA8IS0tIGpiaS54bWwgZmlsZSBmb3IgdGhlIFNPQVAgYmluZGluZyBkZXBsb3ltZW50cyBiaW5kaW5nLiAtLT4KIDxqYmkKLSAgICB2ZXJzaW9uPSIxLjAiIAotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgIHZlcnNpb249IjEuMCIKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgLi9qYmkueHNkIj4KICAgPHNlcnZpY2UtYXNzZW1ibHk+CiAgICAgPGlkZW50aWZpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKaW5kZXggOGVlYzYzNi4uZmNlMjQ3ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOCwxNSArMTgsMTUgQEAKIC0tPgogCiA8amJpIHZlcnNpb249IjEuMCIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotCSB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgotCSB4bWxuczp0bnM9Imh0dHA6Ly9lbmRwb2ludC9qYXh3cyIKLQkgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+Ci0JPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4JCQorICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgICB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgorICAgICB4bWxuczp0bnM9Imh0dHA6Ly9lbmRwb2ludC9qYXh3cyIKKyAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+CisgICAgPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4KICAgICAgICAgPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJ0bnM6SGVsbG9FSkJTZXJ2aWNlSW50ZXJmYWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpIZWxsb0VKQlNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkhlbGxvRUpCUG9ydCIvPgogICAgICAgICAgICAgICAgIDxhcnRpZmFjdHMgeG1sbnM9IiIgcm9sZT0iY29uc3VtZXIiIGZpbGUtbmFtZT0iZW5kcG9pbnRzLnhtbCIgdHlwZT0ieG1sIi8+Ci0JPC9zZXJ2aWNlcz4KKyAgICA8L3NlcnZpY2VzPgogPC9qYmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vc29hcC1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vc29hcC1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKaW5kZXggYzk1YmE5YS4uOWU3MWE2MSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3NvYXAtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zb2FwLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbApAQCAtMTksOSArMTksOSBAQAogCiA8IS0tIGpiaS54bWwgZmlsZSBmb3IgdGhlIFNPQVAgYmluZGluZyBkZXBsb3ltZW50cyBiaW5kaW5nLiAtLT4KIDxqYmkKLSAgICB2ZXJzaW9uPSIxLjAiIAotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgIHZlcnNpb249IjEuMCIKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgLi9qYmkueHNkIj4KICAgPHNlcnZpY2UtYXNzZW1ibHk+CiAgICAgPGlkZW50aWZpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3NvYXAtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3NvYXAtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDE2NThkMTYuLjA5NTY3Y2MgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zb2FwLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vc29hcC1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwKQEAgLTE4LDE0ICsxOCwxNCBAQAogLS0+CiAKIDxqYmkgdmVyc2lvbj0iMS4wIgotCSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLQkgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0JIHhtbG5zOnRucz0iaHR0cDovL2VuZHBvaW50L2pheHdzIgotCSB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KLQk8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgkJCi0JCTxjb25zdW1lcyBpbnRlcmZhY2UtbmFtZT0idG5zOkhlbGxvRUpCU2VydmljZUludGVyZmFjZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6SGVsbG9FSkJTZXJ2aWNlIiAKKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICAgeG1sbnM6dG5zPSJodHRwOi8vZW5kcG9pbnQvamF4d3MiCisgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgorICAgIDxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CisgICAgICAgIDxjb25zdW1lcyBpbnRlcmZhY2UtbmFtZT0idG5zOkhlbGxvRUpCU2VydmljZUludGVyZmFjZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6SGVsbG9FSkJTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJIZWxsb0VKQlBvcnQiLz4KICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RzIHhtbG5zPSIiIHJvbGU9ImNvbnN1bWVyIiBmaWxlLW5hbWU9ImVuZHBvaW50cy54bWwiIHR5cGU9InhtbCIvPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3NvYXAtYmluZGluZy1zdS9zdS9lbmRwb2ludHMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3NvYXAtYmluZGluZy1zdS9zdS9lbmRwb2ludHMueG1sCmluZGV4IGQyNDkyYjYuLmQzMWZjZmEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zb2FwLWJpbmRpbmctc3Uvc3UvZW5kcG9pbnRzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vc29hcC1iaW5kaW5nLXN1L3N1L2VuZHBvaW50cy54bWwKQEAgLTIxLDIyICsyMSwyMiBAQAogICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnN1bi5jb20vbnMvamJpL2NvbXBvbmVudC9zb2FwL2RlcGxveSAuL2VuZHBvaW50cy54c2QiPgogPHNlcnZpY2UtbmFtZT4KLQk8bmFtZXNwYWNlLXVyaT5odHRwOi8vZW5kcG9pbnQvamF4d3M8L25hbWVzcGFjZS11cmk+Ci0JPGxvY2FsLXBhcnQ+SGVsbG9FSkJTZXJ2aWNlPC9sb2NhbC1wYXJ0PgorICAgIDxuYW1lc3BhY2UtdXJpPmh0dHA6Ly9lbmRwb2ludC9qYXh3czwvbmFtZXNwYWNlLXVyaT4KKyAgICA8bG9jYWwtcGFydD5IZWxsb0VKQlNlcnZpY2U8L2xvY2FsLXBhcnQ+CiAgICAgPC9zZXJ2aWNlLW5hbWU+CiAgICAgPGVuZHBvaW50LW5hbWU+SGVsbG9FSkJQb3J0PC9lbmRwb2ludC1uYW1lPgogICAgIDxlbmRwb2ludC1yb2xlPmNvbnN1bWVyPC9lbmRwb2ludC1yb2xlPgotICAgIDxhZGRyZXNzLWxvY2F0aW9uPmh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9zb2FwL2VqYi9ub25hbWUvaGVsbG9lbmRwb2ludDwvYWRkcmVzcy1sb2NhdGlvbj4gCi0gICAgPHN0eWxlPmh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDgvd3NkbC9zdHlsZS9ycGM8L3N0eWxlPiAgICAgICAgICAgICAKKyAgICA8YWRkcmVzcy1sb2NhdGlvbj5odHRwOi8vbG9jYWxob3N0OjgwODAvc29hcC9lamIvbm9uYW1lL2hlbGxvZW5kcG9pbnQ8L2FkZHJlc3MtbG9jYXRpb24+CisgICAgPHN0eWxlPmh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDgvd3NkbC9zdHlsZS9ycGM8L3N0eWxlPgogICAgIDxvcGVyYXRpb24+CiAgICAgICAgIDxuYW1lPnNheUhlbGxvPC9uYW1lPgotICAgICAgICA8bWVwPmh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDgvd3NkbC9pbi1vdXQ8L21lcD4gICAgICAgICAgICAgICAgICAgIAorICAgICAgICA8bWVwPmh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDgvd3NkbC9pbi1vdXQ8L21lcD4KICAgICAgICAgPHNvYXBhY3Rpb24+IiI8L3NvYXBhY3Rpb24+CiAgICAgICAgIDxpbnB1dD4KICAgICAgICAgICA8bmFtZXNwYWNlLXVyaT5odHRwOi8vZW5kcG9pbnQvamF4d3M8L25hbWVzcGFjZS11cmk+CiAgICAgICAgIDwvaW5wdXQ+CiAgICAgICAgIDxvdXRwdXQ+CiAgICAgICAgICAgPG5hbWVzcGFjZS11cmk+aHR0cDovL2VuZHBvaW50L2pheHdzPC9uYW1lc3BhY2UtdXJpPgotICAgICAgICA8L291dHB1dD4gICAgICAgICAgICAgICAgICAgIAorICAgICAgICA8L291dHB1dD4KICAgICA8L29wZXJhdGlvbj4KLTwvZW5kcG9pbnQ+IAorPC9lbmRwb2ludD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zdHJlc3MueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3N0cmVzcy54bWwKaW5kZXggZDZlMzczMS4uZjQyZDZkNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3N0cmVzcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3N0cmVzcy54bWwKQEAgLTc2LDcgKzc2LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYW5vdGhlcl9zZXJ2bGV0Ij4KLSAgICAgICA8YW50IGluaGVyaXRBbGw9ImZhbHNlIiBkaXI9Ii4vYW5vdGhlcl9zZXJ2bGV0Ii8+IAorICAgICAgIDxhbnQgaW5oZXJpdEFsbD0iZmFsc2UiIGRpcj0iLi9hbm90aGVyX3NlcnZsZXQiLz4KICAgICA8L3RhcmdldD4KIAogCkBAIC05MSw2ICs5MSw2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJlcG9ydC1mYWlsdXJlIj4KICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3QgZmFpbGVkIi8+Ci0gICAgPC90YXJnZXQ+ICAgCQotICAgIAorICAgIDwvdGFyZ2V0PgorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vc3RyZXNzY2xpZW50L1N0cmVzc0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3N0cmVzc2NsaWVudC9TdHJlc3NDbGllbnQuamF2YQppbmRleCA2NTExYjQ4Li42NDlhMjliIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vc3RyZXNzY2xpZW50L1N0cmVzc0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zdHJlc3NjbGllbnQvU3RyZXNzQ2xpZW50LmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogaW1wb3J0IGNvbS5leGFtcGxlLnN1YnRyYWN0b3IuU3VidHJhY3RvclNlcnZpY2U7CiBpbXBvcnQgY29tLmV4YW1wbGUuc3VidHJhY3Rvci5TdWJ0cmFjdG9yOwotIAorCiBpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CkBAIC0zNyw0MiArMzcsNDIgQEAKIAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCi1wdWJsaWMgY2xhc3MgU3RyZXNzQ2xpZW50IGV4dGVuZHMgVGhyZWFkIHsgCitwdWJsaWMgY2xhc3MgU3RyZXNzQ2xpZW50IGV4dGVuZHMgVGhyZWFkIHsKIAogICAgIGludCBjbGllbnRJZDsKICAgICBIZWxsbyBwb3J0OwogICAgIEhpIHBvcnQxOwogICAgIFN1YnRyYWN0b3IgcG9ydDI7CiAKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vc3RyZXNzY2xpZW50IjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vc3RyZXNzY2xpZW50IjsKIAogICAgICBzdGF0aWMgbG9uZyBzdGFydFRpbWUgID0gMDsKICAgICAgc3RhdGljIGludCBtaW51dGVzVG9SdW4gPSAwOwogICAgICBzdGF0aWMgbG9uZyBlbmRUaW1lID0gMDsKLQkJICAgICAKKwogCiAgICAgICAgcHJpdmF0ZSBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA7Ci0gICAKKwogICAgICAgIEhlbGxvRUpCU2VydmljZSBzZXJ2aWNlOwogICAgICAgIEhpRUpCU2VydmljZSBzZXJ2aWNlMTsKICAgICAgICBTdWJ0cmFjdG9yU2VydmljZSBzZXJ2aWNlMjsKIAogICAgICAgIFN0cmVzc0NsaWVudChpbnQgaSxTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCkgewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluc3RhbnRpYXRpbmcgYSBzdHJlc3MgY2xpZW50Iik7Ci0JICAgLy9zdGF0LmFkZERlc2NyaXB0aW9uKCJqc3IxMDgtc2VydmVyc2lkZS13ZWJzZXJ2aWNlcy1lamItbm9uYW1lLWFubm90YXRpb24iKTsKKyAgICAgICAvL3N0YXQuYWRkRGVzY3JpcHRpb24oImpzcjEwOC1zZXJ2ZXJzaWRlLXdlYnNlcnZpY2VzLWVqYi1ub25hbWUtYW5ub3RhdGlvbiIpOwogICAgICAgICAgICBjbGllbnRJZCA9IGk7Ci0JICAgdGhpcy5zdGF0ID0gc3RhdDsKKyAgICAgICB0aGlzLnN0YXQgPSBzdGF0OwogICAgICAgIH0KIAogICAgICAgIHZvaWQgc2V0U2VydmljZUhhbmRsZSggSGVsbG9FSkJTZXJ2aWNlIHNlciwgSGlFSkJTZXJ2aWNlIHNlcjEsIFN1YnRyYWN0b3JTZXJ2aWNlIHNlcjIpewogICAgICAgICAgICBzZXJ2aWNlID0gc2VyOwotCSAgIHNlcnZpY2UxID0gc2VyMTsKLQkgICBzZXJ2aWNlMiA9IHNlcjI7CisgICAgICAgc2VydmljZTEgPSBzZXIxOworICAgICAgIHNlcnZpY2UyID0gc2VyMjsKICAgICAgICB9CiAKICAgICAgICBzdGF0aWMgdm9pZCBzZXRUaW1lVG9SdW4oIGludCBtaW51dGVzICkgewogICAgICAgICAgICBtaW51dGVzVG9SdW4gPSBtaW51dGVzOwotCSAgIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKQEAgLTg0LDYzICs4NCw2MyBAQAogICAgICAgICAgICAgICAgIGVuZHBvaW50VVJJKTsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNsaWVudElkICsgIjoiICsgIiBBZnRlciBzZXR0aW5nIGVuZHBvaW50IGFkZHJlc3MgVVJJIik7CiAKLQkgICAgcG9ydDEgPSBzZXJ2aWNlMS5nZXRIaUVKQlBvcnQoKTsKLQkgICAgQmluZGluZ1Byb3ZpZGVyIHN0dWIxID0gKEJpbmRpbmdQcm92aWRlcilwb3J0MTsKKyAgICAgICAgcG9ydDEgPSBzZXJ2aWNlMS5nZXRIaUVKQlBvcnQoKTsKKyAgICAgICAgQmluZGluZ1Byb3ZpZGVyIHN0dWIxID0gKEJpbmRpbmdQcm92aWRlcilwb3J0MTsKICAgICAgICAgICAgIFN0cmluZyBlbmRwb2ludFVSSTEgPSJodHRwOi8vbG9jYWxob3N0OjEyMDE3L0hpRUpCUG9ydCI7CiAgICAgICAgICAgICBzdHViMS5nZXRSZXF1ZXN0Q29udGV4dCgpLnB1dChCaW5kaW5nUHJvdmlkZXIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKLSAgICAgICAgCQkgICAgICAgICAgICAgICAgICBlbmRwb2ludFVSSTEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50VVJJMSk7CiAKLQkgICAgIHBvcnQyID0gc2VydmljZTIuZ2V0U3VidHJhY3RvclBvcnQoKTsKLQkgICAgIEJpbmRpbmdQcm92aWRlciBzdHViMiA9IChCaW5kaW5nUHJvdmlkZXIpcG9ydDI7IAorICAgICAgICAgcG9ydDIgPSBzZXJ2aWNlMi5nZXRTdWJ0cmFjdG9yUG9ydCgpOworICAgICAgICAgQmluZGluZ1Byb3ZpZGVyIHN0dWIyID0gKEJpbmRpbmdQcm92aWRlcilwb3J0MjsKICAgICAgICAgICAgICBTdHJpbmcgZW5kcG9pbnRVUkkyID0iaHR0cDovL2xvY2FsaG9zdDoxMjAxOC9zdWJ0cmFjdG9yZW5kcG9pbnQiOwogICAgICAgICAgICAgIHN0dWIyLmdldFJlcXVlc3RDb250ZXh0KCkucHV0KEJpbmRpbmdQcm92aWRlci5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50VVJJMik7Ci0JCSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFVSSTIpOwogCi0JICAgd2hpbGUoKGVuZFRpbWUgLSBzdGFydFRpbWUpIDwgbWludXRlc1RvUnVuKjYwKjEwMDApIHsKKworICAgICAgIHdoaWxlKChlbmRUaW1lIC0gc3RhcnRUaW1lKSA8IG1pbnV0ZXNUb1J1bio2MCoxMDAwKSB7CiAgICAgICAgICAgICAgICAvLyBJdGVyYXRpdmUgdGVzdGVyIGZvciBzdHJlc3MsIHBlciBUaHJlYWQKICAgICAgICAgICAgICAgIGZvciAoIGludCBpPTAgOyBpIDwgMTA7IGkrKykKLQkgICAgICAgICAgIGRvVGVzdCgiU3RyZXNzIFRlc3RlciIsaSk7Ci0JICAgICAgIGVuZFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkgICB9CisgICAgICAgICAgICAgICBkb1Rlc3QoIlN0cmVzcyBUZXN0ZXIiLGkpOworICAgICAgICAgICBlbmRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgfQotICAgICAgICAgCisgICAgICAgfQorCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyB0b1NlbmQsIGludCBpZCkgewogICAgICAgICAgICAgdHJ5IHsKLQkgICAgICAgIEludGVnZXIgaSA9IChJbnRlZ2VyKWlkOworICAgICAgICAgICAgSW50ZWdlciBpID0gKEludGVnZXIpaWQ7CiAKICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbyh0b1NlbmQraSk7Ci0JCVN0cmluZyByZXQxID0gcG9ydDEuc2F5SGkodG9TZW5kK2kpOwotCQlpbnQgcmVzID0gcG9ydDIuYWRkKDUsMik7CisgICAgICAgIFN0cmluZyByZXQxID0gcG9ydDEuc2F5SGkodG9TZW5kK2kpOworICAgICAgICBpbnQgcmVzID0gcG9ydDIuYWRkKDUsMik7CiAKLQkJaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSB8fCByZXQuaW5kZXhPZihpLnRvU3RyaW5nKCkpID09IC0xKSB7CisgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEgfHwgcmV0LmluZGV4T2YoaS50b1N0cmluZygpKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY2xpZW50SWQgKyAiOiIgKyAiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwotCSAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CisgICAgICAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdElkKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQl9Ci0JCS8vcGFzcygpOworICAgICAgICB9CisgICAgICAgIC8vcGFzcygpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjbGllbnRJZCArICI6IiArIHJldCk7CiAKLQkJIGlmKHJldDEuaW5kZXhPZigiV2ViU3ZjVGVzdC1IaSIpID09IC0xIHx8IHJldDEuaW5kZXhPZihpLnRvU3RyaW5nKCkpID09IC0xKSB7Ci0JICAgICAgIAkgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjbGllbnRJZCArICI6IiArICJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQxKTsKLQkJICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7Ci0JCSAgICAgcmV0dXJuOwotCQkgfQotCQkgLy9wYXNzKCk7Ci0JCSBTeXN0ZW0ub3V0LnByaW50bG4oY2xpZW50SWQgKyAiOiIgKyByZXQxKTsKKyAgICAgICAgIGlmKHJldDEuaW5kZXhPZigiV2ViU3ZjVGVzdC1IaSIpID09IC0xIHx8IHJldDEuaW5kZXhPZihpLnRvU3RyaW5nKCkpID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjbGllbnRJZCArICI6IiArICJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQxKTsKKyAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7CisgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgfQorICAgICAgICAgLy9wYXNzKCk7CisgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY2xpZW50SWQgKyAiOiIgKyByZXQxKTsKIAotCQkgaWYoIHJlcyAhPSAzKSB7Ci0JICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY2xpZW50SWQgKyAiOiIgKyAiVW5leHBlY3RlZCByZXN1bHQgIiArIHJlcyk7Ci0JCSAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKLQkJICAgICAgcmV0dXJuOwotCSAgICAgICAgIH0KKyAgICAgICAgIGlmKCByZXMgIT0gMykgeworICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNsaWVudElkICsgIjoiICsgIlVuZXhwZWN0ZWQgcmVzdWx0ICIgKyByZXMpOworICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIC8vcGFzcygpOwotCQkgU3lzdGVtLm91dC5wcmludGxuKGNsaWVudElkICsgIlJlc3VsdCBpcyA6IiArIHJlcyk7CisgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY2xpZW50SWQgKyAiUmVzdWx0IGlzIDoiICsgcmVzKTsKIAotCSAgICAgfSAgY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgIH0gIGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwotCSAgICAgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdElkKTsKKyAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vc3RyZXNzY2xpZW50L1N0cmVzc1NPQVBFamJDb25zdW1lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3N0cmVzc2NsaWVudC9TdHJlc3NTT0FQRWpiQ29uc3VtZXIuamF2YQppbmRleCBkMGRlNjk0Li5kZWZhOTI5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vc3RyZXNzY2xpZW50L1N0cmVzc1NPQVBFamJDb25zdW1lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zdHJlc3NjbGllbnQvU3RyZXNzU09BUEVqYkNvbnN1bWVyLmphdmEKQEAgLTMxLDEyICszMSwxMiBAQAogCiAgICAgICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3N0cmVzc2NsaWVudCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3N0cmVzc2NsaWVudCI7CiAKICAgICAgICAgQFdlYlNlcnZpY2VSZWYKICAgICAgICAgc3RhdGljIEhlbGxvRUpCU2VydmljZSBzZXJ2aWNlOwogCi0JIEBXZWJTZXJ2aWNlUmVmCisgICAgIEBXZWJTZXJ2aWNlUmVmCiAgICAgICAgICBzdGF0aWMgSGlFSkJTZXJ2aWNlIHNlcnZpY2UxOwogCiAgICAgICAgICBAV2ViU2VydmljZVJlZih3c2RsTG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9zdWJ0cmFjdG9yc2VydmljZS93ZWJzZXJ2aWNlL1N1YnRyYWN0b3JTZXJ2aWNlP1dTREwiKQpAQCAtNDQsMzIgKzQ0LDMyIEBACiAKIAogICAgICAgICBzdGF0aWMgbG9uZyBzdGFydFRpbWUgID0gMDsKLQlzdGF0aWMgaW50IG1pbnV0ZXNUb1J1biA9IDA7Ci0Jc3RhdGljIGxvbmcgZW5kVGltZSA9IDA7CisgICAgc3RhdGljIGludCBtaW51dGVzVG9SdW4gPSAwOworICAgIHN0YXRpYyBsb25nIGVuZFRpbWUgPSAwOwogCiAgICAgICAgIFN0cmVzc1NPQVBFamJDb25zdW1lcigpIHsKLQkgICAgLy9jcmVhdGUgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIGl0ZXJhdGl2ZSB0ZXN0IGNsaWVudHMuCisgICAgICAgIC8vY3JlYXRlIG11bHRpcGxlIGluc3RhbmNlcyBvZiBpdGVyYXRpdmUgdGVzdCBjbGllbnRzLgogICAgICAgICAgICAgU3RyZXNzQ2xpZW50IGNsaWVudHNbXSA9IG5ldyBTdHJlc3NDbGllbnRbMTAwXTsKICAgICAgICAgICAgIGZvcihpbnQgaSA9IDAgOyBpIDwgMTAwIDsgaSsrKSB7Ci0JICAgICAgICBjbGllbnRzW2ldID0gbmV3IFN0cmVzc0NsaWVudChpLHN0YXQpOworICAgICAgICAgICAgY2xpZW50c1tpXSA9IG5ldyBTdHJlc3NDbGllbnQoaSxzdGF0KTsKICAgICAgICAgICAgICAgICBjbGllbnRzW2ldLnNldFNlcnZpY2VIYW5kbGUoc2VydmljZSxzZXJ2aWNlMSxzZXJ2aWNlMik7CiAgICAgICAgICAgICAgICAgY2xpZW50c1tpXS5zdGFydCgpOwogICAgICAgICAgICAgfQotCX0KKyAgICB9CiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7Ci0JICAgCi0JICAgaWYoIGFyZ3MgIT0gbnVsbCAmJiBhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSAhPSBudWxsKSAKLQkgICAgICAgdHJ5IHsKKworICAgICAgIGlmKCBhcmdzICE9IG51bGwgJiYgYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gIT0gbnVsbCkKKyAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICBtaW51dGVzVG9SdW4gPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMF0pOwotCSAgICAgICB9IGNhdGNoKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBudW1FeCkgewotCQkgICBtaW51dGVzVG9SdW4gPSAzOwotCSAgICAgICB9Ci0JICAgU3lzdGVtLm91dC5wcmludGxuKCJUaW1lIHRvIHJ1biBpczogIittaW51dGVzVG9SdW4pOyAKLQkgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDIwMDApOwotCSAgIFN0cmVzc0NsaWVudC5zZXRUaW1lVG9SdW4obWludXRlc1RvUnVuKTsKKyAgICAgICAgICAgfSBjYXRjaChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbnVtRXgpIHsKKyAgICAgICAgICAgbWludXRlc1RvUnVuID0gMzsKKyAgICAgICAgICAgfQorICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZSB0byBydW4gaXM6ICIrbWludXRlc1RvUnVuKTsKKyAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDIwMDApOworICAgICAgIFN0cmVzc0NsaWVudC5zZXRUaW1lVG9SdW4obWludXRlc1RvUnVuKTsKICAgICAgICAgICAgU3RyZXNzU09BUEVqYkNvbnN1bWVyIHN0cmVzc0NsaWVudCA9IG5ldyBTdHJlc3NTT0FQRWpiQ29uc3VtZXIoKTsKICAgICAgICAgICAgLy9zdGF0LmFkZFN0YXR1cygianNyMTA4LXNlcnZlcnNpZGUtd2Vic2VydmljZXMtZWpiLW5vbmFtZS1hbm5vdGF0aW9uIiwgc3RhdC5QQVNTKTsKLQkgICAvL3N0YXQucHJpbnRTdW1tYXJ5KCJqc3IxMDgtc2VydmVyc2lkZS13ZWJzZXJ2aWNlcy1lamItbm9uYW1lLWFubm90YXRpb24iKTsKKyAgICAgICAvL3N0YXQucHJpbnRTdW1tYXJ5KCJqc3IxMDgtc2VydmVyc2lkZS13ZWJzZXJ2aWNlcy1lamItbm9uYW1lLWFubm90YXRpb24iKTsKICAgICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDY4OTg3YmQuLjcyMDBmMzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNhbGN1bGF0b3JzZXJ2aWNlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJqYmktY29tcG9uZW50LXN1LWFzc2VtYmx5IiB2YWx1ZT0id2ViX2NhbGN1bGF0b3JfY29uc3VtZXJfYXNzZW1ibHkiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvYnVpbGQueG1sCmluZGV4IDQwNGZmZjguLmQwNDE4ODkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgICZqYXh3c1Rvb2xzOwogICAgICZqYmljb21tb247CiAgICAgJmpiaXByb3BlcnRpZXM7Ci0gICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLCBzZXR1cCwgcnVudGVzdCx1bmRlcGxveSIvPiAKKyAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sIHNldHVwLCBydW50ZXN0LHVuZGVwbG95Ii8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgpAQCAtODUsNyArODUsNyBAQAogICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyBuZWdhdGl2ZSB0ZXN0IGJ5IHNldHRpbmcgamJpLWVuYWJsZWQgZmxhZyB0byBmYWxzZSIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW50ZXN0LWpiaS1lbmFibGVkLWZhbHNlIi8+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIEpBWFdTIGNsaWVudCIvPgotICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW50ZXN0LWpheHdzIi8+IAorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW50ZXN0LWpheHdzIi8+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIHBvc2l0aXZlIHRlc3QgYnkgc2V0dGluZyBqYmktZW5hYmxlZCBmbGFnIHRvIHRydWUiLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudGVzdC1qYmktZW5hYmxlZC10cnVlIi8+CiAKQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0ic2VydmVyLmFwcGxpY2F0aW9ucy53ZWItbW9kdWxlLiR7YXBwbmFtZX0td2ViLndlYi1zZXJ2aWNlLWVuZHBvaW50LkNhbGN1bGF0b3IuamJpLWVuYWJsZWQ9ZmFsc2UiLz4KLSAgICAgIDwvYW50Y2FsbD4gCisgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1jbGllbnQiPgogICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50LWNsYXNzIiB2YWx1ZT0iY2xpZW50LlNPQVBXZWJDb25zdW1lck5vbkh0dHBCQyIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ib3RoZXItYXJncyIgdmFsdWU9ImpiaS1lbmFibGVkLWZhbHNlIi8+CkBAIC0xMTIsMTQgKzExMiwxNCBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0ic2VydmVyLmFwcGxpY2F0aW9ucy53ZWItbW9kdWxlLiR7YXBwbmFtZX0td2ViLndlYi1zZXJ2aWNlLWVuZHBvaW50LkNhbGN1bGF0b3IuamJpLWVuYWJsZWQ9dHJ1ZSIvPgotICAgICAgPC9hbnRjYWxsPiAKKyAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudGVzdC1zb2FwLWJpbmRpbmciLz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9ImNvbmZpZ3VyZS13ZWJzZXJ2aWNlLW1hbmFnZW1lbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImNvbmZpZ3VyZS13ZWJzZXJ2aWNlLW1hbmFnZW1lbnQiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke2FwcG5hbWV9LXdlYiNDYWxjdWxhdG9yIi8+Ci0gICAgICA8L2FudGNhbGw+IAorICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvY2xpZW50L0pBWFdTQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvY2xpZW50L0pBWFdTQ2xpZW50LmphdmEKaW5kZXggODk0NjI0My4uMzMzOWZkNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL2NsaWVudC9KQVhXU0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9jbGllbnQvSkFYV1NDbGllbnQuamF2YQpAQCAtMjcsMTggKzI3LDE4IEBACiAKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvY2xpZW50IjsKLSAgICAgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL2NsaWVudCI7CisKICAgICAgICAgICAgIEBXZWJTZXJ2aWNlUmVmKHdzZGxMb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo4MDgwL2NhbGN1bGF0b3JzZXJ2aWNlL3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U/V1NETCIpCiAgICAgICAgICAgICBzdGF0aWMgQ2FsY3VsYXRvclNlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgICAgICB0cnkgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24odGVzdElkKTsKICAgICAgICAgICAgIC8vQ2FsY3VsYXRvclNlcnZpY2Ugc2VydmljZSA9IG5ldyBDYWxjdWxhdG9yU2VydmljZSgpOwogICAgICAgICAgICAgSkFYV1NDbGllbnQgY2xpZW50ID0gbmV3IEpBWFdTQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MsIHNlcnZpY2UpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KQEAgLTUwLDExICs1MCwxMSBAQAogICAgICAgICAgICAgICAgIENhbGN1bGF0b3IgcG9ydCA9IHNlcnZpY2UuZ2V0Q2FsY3VsYXRvclBvcnQoKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7aTwxMDtpKyspIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHJldCA9IHBvcnQuYWRkKGksIDEwKTsKLQkJICAgIGlmKHJldCAhPSAoaSArIDEwKSkgeworICAgICAgICAgICAgaWYocmV0ICE9IChpICsgMTApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFkZGluZyA6ICIgKyBpICsgIiArIDEwID0gIiAgKyByZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuUEFTUyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvY2xpZW50L1NPQVBXZWJDb25zdW1lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL2NsaWVudC9TT0FQV2ViQ29uc3VtZXIuamF2YQppbmRleCBhOTA4OGQwLi44NTc5MjU1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvY2xpZW50L1NPQVBXZWJDb25zdW1lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9jbGllbnQvU09BUFdlYkNvbnN1bWVyLmphdmEKQEAgLTI4LDQyICsyOCw0MiBAQAogICAgIHN0YXRpYyBDYWxjdWxhdG9yU2VydmljZSBzZXJ2aWNlOwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL2NsaWVudCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL2NsaWVudCI7CiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0SWQgKyBhcmdzWzBdKTsKLQlTT0FQV2ViQ29uc3VtZXIgY2xpZW50ID0gbmV3IFNPQVBXZWJDb25zdW1lcigpOwotCWNsaWVudC5hZGRVc2luZ1NPQVBDb25zdW1lcihhcmdzKTsKKyAgICBTT0FQV2ViQ29uc3VtZXIgY2xpZW50ID0gbmV3IFNPQVBXZWJDb25zdW1lcigpOworICAgIGNsaWVudC5hZGRVc2luZ1NPQVBDb25zdW1lcihhcmdzKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdElkICsgYXJnc1swXSk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGFkZFVzaW5nU09BUENvbnN1bWVyKFN0cmluZ1tdIGFyZ3MpIHsKLQljb20uZXhhbXBsZS5jYWxjdWxhdG9yLkNhbGN1bGF0b3IgcG9ydD0gbnVsbDsKLQl0cnkgeworICAgIGNvbS5leGFtcGxlLmNhbGN1bGF0b3IuQ2FsY3VsYXRvciBwb3J0PSBudWxsOworICAgIHRyeSB7CiAKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgY3JlYXRpbmcgQ2FsY3VsYXRvclNlcnZpY2UiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgY3JlYXRpbmcgQ2FsY3VsYXRvclNlcnZpY2UiKTsKIAogICAgICAgICAgICAgICAgIHBvcnQgPSBzZXJ2aWNlLmdldENhbGN1bGF0b3JQb3J0KCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGdldHRpbmcgcG9ydCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBnZXR0aW5nIHBvcnQiKTsKIAotCQkvLyBHZXQgU3R1YgotCQlCaW5kaW5nUHJvdmlkZXIgc3R1YiA9IChCaW5kaW5nUHJvdmlkZXIpcG9ydDsKLQkJLy9TdHJpbmcgZW5kcG9pbnRVUkkgPSJodHRwOi8vbG9jYWxob3N0OjgwODAvc29hcC93ZWIvY2FsY3VsYXRvcmVuZHBvaW50IjsKLQkJU3RyaW5nIGVuZHBvaW50VVJJID0iaHR0cDovL2xvY2FsaG9zdDoxMjAxMS9jYWxjdWxhdG9yZW5kcG9pbnQiOwotCQlzdHViLmdldFJlcXVlc3RDb250ZXh0KCkucHV0KEJpbmRpbmdQcm92aWRlci5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAotCQkgICAgICBlbmRwb2ludFVSSSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIHNldHRpbmcgZW5kcG9pbnQgYWRkcmVzcyBVUkkiKTsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFVzaW5nIFNPQVAgYmluZGluZydzIGNvbnN1bWVyIHRvIGFkZCAxICsgMiA9ICIgKyBwb3J0LmFkZCgxLDIpKTsKKyAgICAgICAgLy8gR2V0IFN0dWIKKyAgICAgICAgQmluZGluZ1Byb3ZpZGVyIHN0dWIgPSAoQmluZGluZ1Byb3ZpZGVyKXBvcnQ7CisgICAgICAgIC8vU3RyaW5nIGVuZHBvaW50VVJJID0iaHR0cDovL2xvY2FsaG9zdDo4MDgwL3NvYXAvd2ViL2NhbGN1bGF0b3JlbmRwb2ludCI7CisgICAgICAgIFN0cmluZyBlbmRwb2ludFVSSSA9Imh0dHA6Ly9sb2NhbGhvc3Q6MTIwMTEvY2FsY3VsYXRvcmVuZHBvaW50IjsKKyAgICAgICAgc3R1Yi5nZXRSZXF1ZXN0Q29udGV4dCgpLnB1dChCaW5kaW5nUHJvdmlkZXIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKKyAgICAgICAgICAgICAgZW5kcG9pbnRVUkkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBzZXR0aW5nIGVuZHBvaW50IGFkZHJlc3MgVVJJIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBVc2luZyBTT0FQIGJpbmRpbmcncyBjb25zdW1lciB0byBhZGQgMSArIDIgPSAiICsgcG9ydC5hZGQoMSwyKSk7CiAgICAgICAgICAgICAgICAgaWYoYXJnc1swXS5lcXVhbHMoImpiaS1lbmFibGVkLXRydWUiKSkKLQkJICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgICAgICBlbHNlIAotCSAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5QQVNTKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCQllLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICBpZihhcmdzWzBdLmVxdWFscygiamJpLWVuYWJsZWQtZmFsc2UiKSkKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgIGVsc2UKLQkJICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKLQl9CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7CisgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9jbGllbnQvU09BUFdlYkNvbnN1bWVyTm9uSHR0cEJDLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvY2xpZW50L1NPQVBXZWJDb25zdW1lck5vbkh0dHBCQy5qYXZhCmluZGV4IGYzMzZiOGQuLjI5ZDBmNjcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9jbGllbnQvU09BUFdlYkNvbnN1bWVyTm9uSHR0cEJDLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL2NsaWVudC9TT0FQV2ViQ29uc3VtZXJOb25IdHRwQkMuamF2YQpAQCAtMjgsNDIgKzI4LDQyIEBACiAgICAgc3RhdGljIENhbGN1bGF0b3JTZXJ2aWNlIHNlcnZpY2U7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvY2xpZW50IjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvY2xpZW50IjsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24odGVzdElkICsgYXJnc1swXSk7Ci0JU09BUFdlYkNvbnN1bWVyTm9uSHR0cEJDIGNsaWVudCA9IG5ldyBTT0FQV2ViQ29uc3VtZXJOb25IdHRwQkMoKTsKLQljbGllbnQuYWRkVXNpbmdTT0FQQ29uc3VtZXIoYXJncyk7CisgICAgU09BUFdlYkNvbnN1bWVyTm9uSHR0cEJDIGNsaWVudCA9IG5ldyBTT0FQV2ViQ29uc3VtZXJOb25IdHRwQkMoKTsKKyAgICBjbGllbnQuYWRkVXNpbmdTT0FQQ29uc3VtZXIoYXJncyk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCArIGFyZ3NbMF0pOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBhZGRVc2luZ1NPQVBDb25zdW1lcihTdHJpbmdbXSBhcmdzKSB7Ci0JY29tLmV4YW1wbGUuY2FsY3VsYXRvci5DYWxjdWxhdG9yIHBvcnQ9IG51bGw7Ci0JdHJ5IHsKKyAgICBjb20uZXhhbXBsZS5jYWxjdWxhdG9yLkNhbGN1bGF0b3IgcG9ydD0gbnVsbDsKKyAgICB0cnkgewogCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGNyZWF0aW5nIENhbGN1bGF0b3JTZXJ2aWNlIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGNyZWF0aW5nIENhbGN1bGF0b3JTZXJ2aWNlIik7CiAKICAgICAgICAgICAgICAgICBwb3J0ID0gc2VydmljZS5nZXRDYWxjdWxhdG9yUG9ydCgpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBnZXR0aW5nIHBvcnQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgZ2V0dGluZyBwb3J0Iik7CiAKLQkJLy8gR2V0IFN0dWIKLQkJQmluZGluZ1Byb3ZpZGVyIHN0dWIgPSAoQmluZGluZ1Byb3ZpZGVyKXBvcnQ7Ci0JCVN0cmluZyBlbmRwb2ludFVSSSA9Imh0dHA6Ly9sb2NhbGhvc3Q6MTIwMTEvY2FsY3VsYXRvcmVuZHBvaW50IjsKLQkJc3R1Yi5nZXRSZXF1ZXN0Q29udGV4dCgpLnB1dChCaW5kaW5nUHJvdmlkZXIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKLQkJICAgICAgZW5kcG9pbnRVUkkpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBzZXR0aW5nIGVuZHBvaW50IGFkZHJlc3MgVVJJIik7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBVc2luZyBTT0FQIGJpbmRpbmcncyBjb25zdW1lciB0byBhZGQgMSArIDIgPSAiICsgcG9ydC5hZGQoMSwyKSk7CisgICAgICAgIC8vIEdldCBTdHViCisgICAgICAgIEJpbmRpbmdQcm92aWRlciBzdHViID0gKEJpbmRpbmdQcm92aWRlcilwb3J0OworICAgICAgICBTdHJpbmcgZW5kcG9pbnRVUkkgPSJodHRwOi8vbG9jYWxob3N0OjEyMDExL2NhbGN1bGF0b3JlbmRwb2ludCI7CisgICAgICAgIHN0dWIuZ2V0UmVxdWVzdENvbnRleHQoKS5wdXQoQmluZGluZ1Byb3ZpZGVyLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCisgICAgICAgICAgICAgIGVuZHBvaW50VVJJKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgc2V0dGluZyBlbmRwb2ludCBhZGRyZXNzIFVSSSIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgVXNpbmcgU09BUCBiaW5kaW5nJ3MgY29uc3VtZXIgdG8gYWRkIDEgKyAyID0gIiArIHBvcnQuYWRkKDEsMikpOwogICAgICAgICAgICAgICAgIGlmKGFyZ3NbMF0uZXF1YWxzKCJqYmktZW5hYmxlZC10cnVlIikpCi0JCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAgICAgZWxzZSAKLQkgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuUEFTUyk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgaWYoYXJnc1swXS5lcXVhbHMoImpiaS1lbmFibGVkLWZhbHNlIikpCiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICBlbHNlCi0JCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOworICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQppbmRleCBmNTlmNDMwLi4zNmE5OWQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKQEAgLTI1LDEzICsyNSwxMyBAQAogICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2V4YW1wbGUuY29tL0NhbGN1bGF0b3IiCiApCiBwdWJsaWMgY2xhc3MgQ2FsY3VsYXRvciB7Ci0JcHVibGljIENhbGN1bGF0b3IoKSB7fQorICAgIHB1YmxpYyBDYWxjdWxhdG9yKCkge30KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0iYWRkIiwgYWN0aW9uPSJ1cm46QWRkIikKLQlwdWJsaWMgaW50IGFkZChpbnQgaSwgaW50IGopIHsKKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCisgICAgcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB7CiAgICAgICAgICAgICAgICAgaW50IGsgPSBpICtqIDsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSArICIrIiArIGogKyIgPSAiICsgayk7Ci0gCi0JCXJldHVybiBrOwotCX0KKworICAgICAgICByZXR1cm4gazsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCBiNGRhOTg2Li40MzM3OGUyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKQEAgLTE5LDkgKzE5LDkgQEAKIAogPCEtLSBqYmkueG1sIGZpbGUgZm9yIHRoZSBTT0FQIGJpbmRpbmcgZGVwbG95bWVudHMgYmluZGluZy4gLS0+CiA8amJpCi0gICAgdmVyc2lvbj0iMS4wIiAKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICB2ZXJzaW9uPSIxLjAiCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIC4vamJpLnhzZCI+CiAgIDxzZXJ2aWNlLWFzc2VtYmx5PgogICAgIDxpZGVudGlmaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDJkMWU3ZTguLjY1Y2E5NmYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMTgsMTYgKzE4LDE2IEBACiAtLT4KIAogPGpiaSB2ZXJzaW9uPSIxLjAiCi0JIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotCSB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLSAJIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCi0JIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUuY29tL0NhbGN1bGF0b3IiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CQkKLQkJPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCi0JCQkgIGxpbmstdHlwZT0ic3RhbmRhcmQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIiAKKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICAgIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCisgICAgIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUuY29tL0NhbGN1bGF0b3IiCisgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgorICAgIDxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CisgICAgICAgIDxjb25zdW1lcyBpbnRlcmZhY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIgorICAgICAgICAgICAgICBsaW5rLXR5cGU9InN0YW5kYXJkIgorICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtbmFtZT0iQ2FsY3VsYXRvclBvcnQiLz4KICAgICAgICAgPGphdmFlc2I6YXJ0aWZhY3RzdHlwZT5XU0RMMTE8L2phdmFlc2I6YXJ0aWZhY3RzdHlwZT4KLQk8L3NlcnZpY2VzPgorICAgIDwvc2VydmljZXM+CiA8L2piaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9zb2FwLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9zb2FwLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCA4ZTYyYTBmLi5lZDI3NGFkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvc29hcC1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL3NvYXAtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOSw5ICsxOSw5IEBACiAKIDwhLS0gamJpLnhtbCBmaWxlIGZvciB0aGUgU09BUCBiaW5kaW5nIGRlcGxveW1lbnRzIGJpbmRpbmcuIC0tPgogPGpiaQotICAgIHZlcnNpb249IjEuMCIgCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgdmVyc2lvbj0iMS4wIgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSAuL2piaS54c2QiPgogICA8c2VydmljZS1hc3NlbWJseT4KICAgICA8aWRlbnRpZmljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvc29hcC1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvc29hcC1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwKaW5kZXggNDE5MGFjNy4uODUxNmNmZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL3NvYXAtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9zb2FwLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMTgsMTQgKzE4LDE0IEBACiAtLT4KIAogPGpiaSB2ZXJzaW9uPSIxLjAiCi0JIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotCSB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLQkgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS5jb20vQ2FsY3VsYXRvciIKLQkgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+Ci0JPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4JCQotCQk8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZUludGVyZmFjZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiIAorICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgICB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLmNvbS9DYWxjdWxhdG9yIgorICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgorICAgICAgICA8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZUludGVyZmFjZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkNhbGN1bGF0b3JQb3J0Ii8+CiAgICAgICAgICAgICAgICAgPGFydGlmYWN0cyByb2xlPSJjb25zdW1lciIgeG1sbnM9IiIgZmlsZS1uYW1lPSJlbmRwb2ludHMueG1sIiB0eXBlPSJ4bWwiLz4KLQk8L3NlcnZpY2VzPgorICAgIDwvc2VydmljZXM+CiA8L2piaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9zb2FwLWJpbmRpbmctc3Uvc3UvZW5kcG9pbnRzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9zb2FwLWJpbmRpbmctc3Uvc3UvZW5kcG9pbnRzLnhtbAppbmRleCA0YmVmNThhLi41Yzg0ODY4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvc29hcC1iaW5kaW5nLXN1L3N1L2VuZHBvaW50cy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL3NvYXAtYmluZGluZy1zdS9zdS9lbmRwb2ludHMueG1sCkBAIC0yMSwyMiArMjEsMjIgQEAKICAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5zdW4uY29tL25zL2piaS9jb21wb25lbnQvc29hcC9kZXBsb3kgLi9lbmRwb2ludHMueHNkIj4KIDxzZXJ2aWNlLW5hbWU+Ci0JPG5hbWVzcGFjZS11cmk+aHR0cDovL2V4YW1wbGUuY29tL0NhbGN1bGF0b3I8L25hbWVzcGFjZS11cmk+Ci0JPGxvY2FsLXBhcnQ+Q2FsY3VsYXRvclNlcnZpY2U8L2xvY2FsLXBhcnQ+CisgICAgPG5hbWVzcGFjZS11cmk+aHR0cDovL2V4YW1wbGUuY29tL0NhbGN1bGF0b3I8L25hbWVzcGFjZS11cmk+CisgICAgPGxvY2FsLXBhcnQ+Q2FsY3VsYXRvclNlcnZpY2U8L2xvY2FsLXBhcnQ+CiAgICAgPC9zZXJ2aWNlLW5hbWU+CiAgICAgPGVuZHBvaW50LW5hbWU+Q2FsY3VsYXRvclBvcnQ8L2VuZHBvaW50LW5hbWU+CiAgICAgPGVuZHBvaW50LXJvbGU+Y29uc3VtZXI8L2VuZHBvaW50LXJvbGU+Ci0gICAgPGFkZHJlc3MtbG9jYXRpb24+aHR0cDovL2xvY2FsaG9zdDo4MDgwL3NvYXAvd2ViL2NhbGN1bGF0b3JlbmRwb2ludDwvYWRkcmVzcy1sb2NhdGlvbj4gCi0gICAgPHN0eWxlPmh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDgvd3NkbC9zdHlsZS9ycGM8L3N0eWxlPiAgICAgICAgICAgICAKKyAgICA8YWRkcmVzcy1sb2NhdGlvbj5odHRwOi8vbG9jYWxob3N0OjgwODAvc29hcC93ZWIvY2FsY3VsYXRvcmVuZHBvaW50PC9hZGRyZXNzLWxvY2F0aW9uPgorICAgIDxzdHlsZT5odHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwvc3R5bGUvcnBjPC9zdHlsZT4KICAgICA8b3BlcmF0aW9uPgogICAgICAgICA8bmFtZT5hZGQ8L25hbWU+Ci0gICAgICAgIDxtZXA+aHR0cDovL3d3dy53My5vcmcvMjAwNC8wOC93c2RsL2luLW91dDwvbWVwPiAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDxtZXA+aHR0cDovL3d3dy53My5vcmcvMjAwNC8wOC93c2RsL2luLW91dDwvbWVwPgogICAgICAgICA8c29hcGFjdGlvbj4iIjwvc29hcGFjdGlvbj4KICAgICAgICAgPGlucHV0PgogICAgICAgICAgIDxuYW1lc3BhY2UtdXJpPmh0dHA6Ly9leGFtcGxlLmNvbS9DYWxjdWxhdG9yPC9uYW1lc3BhY2UtdXJpPgogICAgICAgICA8L2lucHV0PgogICAgICAgICA8b3V0cHV0PgogICAgICAgICAgIDxuYW1lc3BhY2UtdXJpPmh0dHA6Ly9leGFtcGxlLmNvbS9DYWxjdWxhdG9yPC9uYW1lc3BhY2UtdXJpPgotICAgICAgICA8L291dHB1dD4gICAgICAgICAgICAgICAgICAgIAorICAgICAgICA8L291dHB1dD4KICAgICA8L29wZXJhdGlvbj4KLTwvZW5kcG9pbnQ+IAorPC9lbmRwb2ludD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL3dlYi54bWwKaW5kZXggMDdlMTQ3Ny4uNzk4YzY5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2FkZC1udW1iZXJzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDcwZmUwNC4uZmNjMDY4NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNhbGMtd2ViLWNsaWVudCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy9idWlsZC54bWwKaW5kZXggYzFhYjkzYi4uMThhMzhhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2FkZC1udW1iZXJzL2J1aWxkLnhtbApAQCAtMzgsNyArMzgsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KLQkgIDxkZWxldGUgZmlsZT0iJHtqYmktY29tcG9uZW50LXN1LWRpcn0vYXNzZW1ibHkvJHthcHBuYW1lfS13ZWIud2FyIi8+CisgICAgICA8ZGVsZXRlIGZpbGU9IiR7amJpLWNvbXBvbmVudC1zdS1kaXJ9L2Fzc2VtYmx5LyR7YXBwbmFtZX0td2ViLndhciIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iYXNzZW1ibGUtd2ViLCBkZXBsb3ktamJpLWNvbXBvbmVudC1zdSxhc3NlbWJsZS1jbGllbnQsZGVwbG95LWNsaWVudCIvPgpAQCAtNTAsMjMgKzUwLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLXdlYiIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNvbXBpbGUiPgotCSAgPGVjaG8gbWVzc2FnZT0iY2xhc3NlcyBkaXIgPSAke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotCSAgPGVjaG8gbWVzc2FnZT0iYXNzZW1ibGUuZGlyID0gJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgorICAgICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NlcyBkaXIgPSAke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgorICAgICAgPGVjaG8gbWVzc2FnZT0iYXNzZW1ibGUuZGlyID0gJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwa2ctd2FyIj4KICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICAgICAgIDwvYW50Y2FsbD4KLQkgICA8IS0tIEFkZCBNRVRBLUlORi9qYmkueG1sIHRvIC53YXIgZmlsZSAtLT4KLQkgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvTUVUQS1JTkYiLz4KLQkgICA8ZWNobyBtZXNzYWdlPSJjcmVhdGVkIGRpciA9ICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9NRVRBLUlORiIvPgotCSAgIDxjb3B5IGZpbGU9IiR7amJpLWNvbXBvbmVudC1zdS1kaXJ9L3N1L01FVEEtSU5GL2piaS54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL01FVEEtSU5GL2piaS54bWwiLz4KLQkgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiIHVwZGF0ZT0idHJ1ZSI+Ci0JICAgCQk8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcCI+Ci0JCQkJPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvamJpLnhtbCIvPgotCQkJPC9maWxlc2V0PgotCSAgIDwvamFyPgotCSAgIDwhLS0gQ29weSB0aGUgSmF2YUVFIGFwcCB0byB0aGUgc2VydmljZSBhc3NlbWJseSAtLT4KLQkgIDxjb3B5IGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiIHRvZGlyPSIke2piaS1jb21wb25lbnQtc3UtZGlyfS9hc3NlbWJseSIvPgorICAgICAgIDwhLS0gQWRkIE1FVEEtSU5GL2piaS54bWwgdG8gLndhciBmaWxlIC0tPgorICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9NRVRBLUlORiIvPgorICAgICAgIDxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgZGlyID0gJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL01FVEEtSU5GIi8+CisgICAgICAgPGNvcHkgZmlsZT0iJHtqYmktY29tcG9uZW50LXN1LWRpcn0vc3UvTUVUQS1JTkYvamJpLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvTUVUQS1JTkYvamJpLnhtbCIvPgorICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIgdXBkYXRlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIj4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9qYmkueG1sIi8+CisgICAgICAgICAgICA8L2ZpbGVzZXQ+CisgICAgICAgPC9qYXI+CisgICAgICAgPCEtLSBDb3B5IHRoZSBKYXZhRUUgYXBwIHRvIHRoZSBzZXJ2aWNlIGFzc2VtYmx5IC0tPgorICAgICAgPGNvcHkgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIgdG9kaXI9IiR7amJpLWNvbXBvbmVudC1zdS1kaXJ9L2Fzc2VtYmx5Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMgaHR0cDovL2xvY2FsaG9zdDo4MDgwL2NhbGMtd2ViLWNsaWVudC13ZWIvd2Vic2VydmljZS9BZGROdW1iZXJTZXJ2aWNlP1dTREwiLz4KICAgICA8L2FudGNhbGw+CiAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIgotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphciIgCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IndlYmNsaWVudC8qKiIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jbGllbnQtd2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi93ZWIueG1sIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC1zdW4td2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9zdW4td2ViLnhtbCIvPgpAQCAtMTE3LDExICsxMTcsMTEgQEAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LlRlc3RDbGllbnQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy9jbGllbnQtd2ViLnhtbAppbmRleCBlZWI3MzBkLi43OTViMDUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCBiZjJkYjIzLi5lM2YxMTE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2FkZC1udW1iZXJzL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2FkZC1udW1iZXJzIjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycyI7CiAKICAgICBwdWJsaWMgYm9vbGVhbiBmb3VuZDEgPSBmYWxzZTsKIApAQCAtNDYsOCArNDYsOCBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgZmFpbCgpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlJlc3VsdCBpcyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2FkZC1udW1iZXJzL2VuZHBvaW50L0FkZE51bWJlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvZW5kcG9pbnQvQWRkTnVtYmVyLmphdmEKaW5kZXggODQwYzZjOS4uZjI5YjkxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvZW5kcG9pbnQvQWRkTnVtYmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvZW5kcG9pbnQvQWRkTnVtYmVyLmphdmEKQEAgLTI2LDEzICsyNiwxMyBAQAogICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQWRkTnVtYmVyIgogKQogcHVibGljIGNsYXNzIEFkZE51bWJlciB7Ci0JcHVibGljIEFkZE51bWJlcigpIHt9CisgICAgcHVibGljIEFkZE51bWJlcigpIHt9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCi0JcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCisgICAgcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgICAgICAgICBpbnQgayA9IGkgK2ogOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpICsgIisiICsgaiArIiA9ICIgKyBrKTsKLQkJLy90aHJvdyBuZXcgamF2YS5sYW5nLkV4Y2VwdGlvbigiVGhpcyBpcyBteSBleGNlcHRpb24iKTsgCi0JCXJldHVybiBrOwotCX0KKyAgICAgICAgLy90aHJvdyBuZXcgamF2YS5sYW5nLkV4Y2VwdGlvbigiVGhpcyBpcyBteSBleGNlcHRpb24iKTsKKyAgICAgICAgcmV0dXJuIGs7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvamF2YWVlLXNlLXNlcnZpY2V1bml0L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy9qYXZhZWUtc2Utc2VydmljZXVuaXQvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCBhZWExNWE2Li5iMDQ1MTYwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy9qYXZhZWUtc2Utc2VydmljZXVuaXQvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy9qYXZhZWUtc2Utc2VydmljZXVuaXQvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbApAQCAtMTksMTYgKzE5LDE2IEBACiAKIDwhLS0gamJpLnhtbCBmaWxlIGZvciB0aGUgU09BUCBiaW5kaW5nIGRlcGxveW1lbnRzIGJpbmRpbmcuIC0tPgogPGpiaQotICAgIHZlcnNpb249IjEuMCIgCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgdmVyc2lvbj0iMS4wIgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSAuL2piaS54c2QiPgogICA8c2VydmljZS1hc3NlbWJseT4KICAgICA8aWRlbnRpZmljYXRpb24+CiAgICAgICA8bmFtZT5jbGllbnRfd2ViX2NhbGN1bGF0b3Jfc2VydmljZV9hc3NlbWJseTwvbmFtZT4KICAgICAgIDxkZXNjcmlwdGlvbj5DbGllbnQgd2ViIGNhbGN1bGF0b3Igc2VydmljZSBhc3NlbWJseTwvZGVzY3JpcHRpb24+CiAgICAgPC9pZGVudGlmaWNhdGlvbj4KLQk8c2VydmljZS11bml0PgorICAgIDxzZXJ2aWNlLXVuaXQ+CiAgICAgICA8aWRlbnRpZmljYXRpb24+CiAgICAgICAgICA8bmFtZT5jYWxjLXdlYi1jbGllbnQ8L25hbWU+CiAgICAgICAgICA8ZGVzY3JpcHRpb24+cHJvdmlkZXIgc2VydmljZTwvZGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy9qYXZhZWUtc2Utc2VydmljZXVuaXQvc3UvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2FkZC1udW1iZXJzL2phdmFlZS1zZS1zZXJ2aWNldW5pdC9zdS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDJmZjFmMGMuLmVlYzZiMDYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2FkZC1udW1iZXJzL2phdmFlZS1zZS1zZXJ2aWNldW5pdC9zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2FkZC1udW1iZXJzL2phdmFlZS1zZS1zZXJ2aWNldW5pdC9zdS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOCwxNCArMTgsMTQgQEAKIC0tPgogCiA8amJpIHZlcnNpb249IjEuMCIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotCSB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgotCSB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0FkZE51bWJlciIKLQkgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+Ci0JPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJmYWxzZSI+CQkKLQkgPHByb3ZpZGVzIGludGVyZmFjZS1uYW1lPSJ0bnM6QWRkTnVtYmVyU2VydmljZUludGVyZmFjZSIKKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICAgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKKyAgICAgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9BZGROdW1iZXIiCisgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgorICAgIDxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0iZmFsc2UiPgorICAgICA8cHJvdmlkZXMgaW50ZXJmYWNlLW5hbWU9InRuczpBZGROdW1iZXJTZXJ2aWNlSW50ZXJmYWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpBZGROdW1iZXJTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJBZGROdW1iZXJQb3J0Ii8+Ci0JPC9zZXJ2aWNlcz4KKyAgICA8L3NlcnZpY2VzPgogPC9qYmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvd2ViLnhtbAppbmRleCAxMDRiNTgwLi4yMDg1ZWQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2FkZC1udW1iZXJzL3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEFkZE51bWJlciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkFkZE51bWJlcldBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQWRkTnVtYmVyIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+QWRkTnVtYmVyV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBBZGROdW1iZXIgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkFkZE51bWJlcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5BZGROdW1iZXI8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQWRkTnVtYmVyPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQWRkTnVtYmVyIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5BZGROdW1iZXJXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+QWRkTnVtYmVyPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkFkZE51bWJlcjwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5BZGROdW1iZXI8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0FkZE51bWJlclNlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+QWRkTnVtYmVyPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9BZGROdW1iZXJTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQppbmRleCA3ZGU1Y2Y2Li5kNzllZWFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2FkZC1udW1iZXJzL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDM1ICsyOCwzNSBAQAogCiAgICAgICAgQFdlYlNlcnZpY2VSZWYobmFtZT0ic3VuLXdlYi5zZXJ2aWNlcmVmL2NhbGN1bGF0b3IiKSBBZGROdW1iZXJTZXJ2aWNlIHNlcnZpY2U7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKICAgICAgICAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKLQkgICAgUHJpbnRXcml0ZXIgb3V0PW51bGw7CisgICAgICAgIFByaW50V3JpdGVyIG91dD1udWxsOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBTZXJ2aWNlIGlzIDoiICsgc2VydmljZSk7CiAgICAgICAgICAgICAgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7Ci0gICAgICAgICAgICAJb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKKyAgICAgICAgICAgICAgICBvdXQgPSByZXNwLmdldFdyaXRlcigpOwogICAgICAgICAgICAgICAgIEFkZE51bWJlciBwb3J0ID0gc2VydmljZS5nZXRBZGROdW1iZXJQb3J0KCk7CiAgICAgICAgICAgICAgICAgaW50IHJldCA9IHBvcnQuYWRkKDEsIDIpOwotCQlwcmludFN1Y2Nlc3Mob3V0LHJldCk7CisgICAgICAgIHByaW50U3VjY2VzcyhvdXQscmV0KTsKICAgICAgICAgICAgIH0gY2F0Y2goamF2YS5sYW5nLkV4Y2VwdGlvbiBlKSB7Ci0JCS8vZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgCXByaW50RmFpbHVyZShvdXQsIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgLy9lLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgcHJpbnRGYWlsdXJlKG91dCwgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfSBmaW5hbGx5IHsKLQkJaWYob3V0ICE9IG51bGwpIHsKKyAgICAgICAgaWYob3V0ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgb3V0LmZsdXNoKCk7CiAgICAgICAgICAgICAgICAgICAgIG91dC5jbG9zZSgpOwotCQl9Ci0JICAgIH0KKyAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgcHJpbnRGYWlsdXJlKFByaW50V3JpdGVyIG91dCwgU3RyaW5nIGVyck1zZykgewotCQlpZihvdXQgPT0gbnVsbCkgcmV0dXJuOwotCQlvdXQucHJpbnRsbigiPGh0bWw+Iik7CisgICAgICAgIGlmKG91dCA9PSBudWxsKSByZXR1cm47CisgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5UZXN0U2VydmxldDwvdGl0bGU+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBwcmludFN1Y2Nlc3MoUHJpbnRXcml0ZXIgb3V0LCBpbnQgcmVzdWx0KSB7Ci0JCWlmKG91dCA9PSBudWxsKSByZXR1cm47CisgICAgICAgIGlmKG91dCA9PSBudWxsKSByZXR1cm47CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlRlc3RTZXJ2bGV0PC90aXRsZT4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2J1aWxkLnhtbAppbmRleCBmNzBhOWMwLi5lZjE0YTdmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYnVpbGQueG1sCkBAIC0zOCw2ICszOCw2IEBACiAgICAgICAgIDxhbnQgZGlyPSJlbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyIiB0YXJnZXQ9ImNsZWFuIi8+CiAgICAgICAgIDxhbnQgZGlyPSJhZGQtbnVtYmVycyIgdGFyZ2V0PSJjbGVhbiIvPgogICAgICAgICA8YW50IGRpcj0iZW50ZXJwcmlzZV9hcHAiIHRhcmdldD0iY2xlYW4iLz4KLQk8L3RhcmdldD4KKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTMxOGM0My4uY2E2YTAzOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpzcjIwOC1pbnRlZ3JhdGlvbi13ZWItY2xpZW50Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L2J1aWxkLnhtbAppbmRleCA5ZWJhNDE4Li5hMjQzMTQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvYnVpbGQueG1sCkBAIC03Niw3ICs3Niw3IEBACiAgICAgICAgICAgICAgICB2YWx1ZT0iLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyBodHRwOi8vbG9jYWxob3N0OjgwODAvanNyMjA4LWludGVncmF0aW9uLXdlYi1jbGllbnQtd2ViL3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U/V1NETCIvPgogICAgIDwvYW50Y2FsbD4KICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMiCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiIAorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IndlYmNsaWVudC8qKiIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jbGllbnQtd2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi93ZWIueG1sIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC1zdW4td2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9zdW4td2ViLnhtbCIvPgpAQCAtOTgsMTEgKzk4LDExIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5UZXN0Q2xpZW50Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvY2xpZW50LXdlYi54bWwKaW5kZXggZWViNzMwZC4uNzk1YjA1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggYWZkMTc4YS4uYjQ4NDdhNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQiOwogCiAgICAgcHVibGljIGJvb2xlYW4gZm91bmQxID0gZmFsc2U7CiAgICAgcHVibGljIGJvb2xlYW4gZm91bmQyID0gZmFsc2U7CkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC02NCw5ICs2NCw5IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBDYWxjdWxhdG9yIGFkZCBTRVJWSUNFIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlszXSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQppbmRleCA2OTUxMzIwLi5iZWQxZTBmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCkBAIC0yNSwxMyArMjUsMTMgQEAKICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3IiCiApCiBwdWJsaWMgY2xhc3MgQ2FsY3VsYXRvciB7Ci0JcHVibGljIENhbGN1bGF0b3IoKSB7fQorICAgIHB1YmxpYyBDYWxjdWxhdG9yKCkge30KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0iYWRkIiwgYWN0aW9uPSJ1cm46QWRkIikKLQlwdWJsaWMgaW50IGFkZChpbnQgaSwgaW50IGopIHsKKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCisgICAgcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB7CiAgICAgICAgICAgICAgICAgaW50IGsgPSBpICtqIDsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSArICIrIiArIGogKyIgPSAiICsgayk7Ci0gCi0JCXJldHVybiBrOwotCX0KKworICAgICAgICByZXR1cm4gazsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvamJpLnhtbAppbmRleCAxZmE5MmJkLi41M2Y5Yzg2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L2piaS54bWwKQEAgLTE4LDE0ICsxOCwxNCBAQAogLS0+CiAKIDxqYmkgdmVyc2lvbj0iMS4wIgotCSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLQkgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0JIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCi0JIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQ2FsY3VsYXRvciIKLQkgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+Ci0JPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJmYWxzZSI+Ci0JIDxjb25zdW1lcyBpbnRlcmZhY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlSW50ZXJmYWNlIgorICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgICB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgorICAgICB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3IiCisgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgorICAgIDxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0iZmFsc2UiPgorICAgICA8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZUludGVyZmFjZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkNhbGN1bGF0b3JQb3J0Ii8+Ci0JPC9zZXJ2aWNlcz4KKyAgICA8L3NlcnZpY2VzPgogPC9qYmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC9zb2FwLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L3NvYXAtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCmluZGV4IGY5MTcxYzkuLjRkYzRmMzEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L3NvYXAtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L3NvYXAtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOSw5ICsxOSw5IEBACiAKIDwhLS0gamJpLnhtbCBmaWxlIGZvciB0aGUgU09BUCBiaW5kaW5nIGRlcGxveW1lbnRzIGJpbmRpbmcuIC0tPgogPGpiaQotICAgIHZlcnNpb249IjEuMCIgCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgdmVyc2lvbj0iMS4wIgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSAuL2piaS54c2QiPgogICA8c2VydmljZS1hc3NlbWJseT4KICAgICA8aWRlbnRpZmljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC9zb2FwLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L3NvYXAtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDMzOTc0ZjkuLjQzM2JkMTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L3NvYXAtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L3NvYXAtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOCwxNSArMTgsMTUgQEAKIC0tPgogCiA8amJpIHZlcnNpb249IjEuMCIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotCSB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgotCSB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3IiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CQkKLQkgPHByb3ZpZGVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2VJbnRlcmZhY2UiCisgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCisgICAgIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQ2FsY3VsYXRvciIKKyAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+CisgICAgPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4KKyAgICAgPHByb3ZpZGVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2VJbnRlcmZhY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJDYWxjdWxhdG9yUG9ydCIvPgogICAgICAgICAgICAgICAgIDxhcnRpZmFjdHMgeG1sbnM9IiIgcm9sZT0icHJvdmlkZXIiIGZpbGUtbmFtZT0iZW5kcG9pbnRzLnhtbCIgdHlwZT0ieG1sIi8+Ci0JPC9zZXJ2aWNlcz4KKyAgICA8L3NlcnZpY2VzPgogPC9qYmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvd2ViLnhtbAppbmRleCAwN2UxNDc3Li43OThjNjliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZWQ3OGJjYi4uZWUyZmYyNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw4ICsyOCw4IEBACiAKICAgICAgICBAV2ViU2VydmljZVJlZiBDYWxjdWxhdG9yU2VydmljZSBzZXJ2aWNlOwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1zZXJ2ZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzJjMjY0NS4uZDdlNDBjZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1zZXJ2ZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNhbGN1bGF0b3JzZXJ2aWNlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJqYmktY29tcG9uZW50LXN1LWFzc2VtYmx5IiB2YWx1ZT0id2ViX2NhbGN1bGF0b3JfY29uc3VtZXJfYXNzZW1ibHkiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyL2J1aWxkLnhtbAppbmRleCA4NjhkMzk2Li5iMGVlNWE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1zZXJ2ZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgJmpheHdzVG9vbHM7CiAgICAgJmpiaWNvbW1vbjsKICAgICAmamJpcHJvcGVydGllczsKLSAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sIHNldHVwLCBydW50ZXN0LHVuZGVwbG95Ii8+IAorICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbiwgc2V0dXAsIHJ1bnRlc3QsdW5kZXBsb3kiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuZmlsZSIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIgdXBkYXRlPSJ0cnVlIj4KLQk8bWV0YWluZiBmaWxlPSJqYmkueG1sIi8+CisgICAgPG1ldGFpbmYgZmlsZT0iamJpLnhtbCIvPgogICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyL2NsaWVudC9TT0FQV2ViQ29uc3VtZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyL2NsaWVudC9TT0FQV2ViQ29uc3VtZXIuamF2YQppbmRleCAwYjczYzEzLi5iOTRiYjEzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlci9jbGllbnQvU09BUFdlYkNvbnN1bWVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1zZXJ2ZXIvY2xpZW50L1NPQVBXZWJDb25zdW1lci5qYXZhCkBAIC0yOCw0MiArMjgsNDIgQEAKICAgICBzdGF0aWMgQ2FsY3VsYXRvclNlcnZpY2Ugc2VydmljZTsKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyIjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlciI7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RJZCArIGFyZ3NbMF0pOwotCVNPQVBXZWJDb25zdW1lciBjbGllbnQgPSBuZXcgU09BUFdlYkNvbnN1bWVyKCk7Ci0JY2xpZW50LmFkZFVzaW5nU09BUENvbnN1bWVyKGFyZ3MpOworICAgIFNPQVBXZWJDb25zdW1lciBjbGllbnQgPSBuZXcgU09BUFdlYkNvbnN1bWVyKCk7CisgICAgY2xpZW50LmFkZFVzaW5nU09BUENvbnN1bWVyKGFyZ3MpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQgKyBhcmdzWzBdKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgYWRkVXNpbmdTT0FQQ29uc3VtZXIoU3RyaW5nW10gYXJncykgewotCWNvbS5leGFtcGxlLmNhbGN1bGF0b3IuQ2FsY3VsYXRvciBwb3J0PSBudWxsOwotCXRyeSB7CisgICAgY29tLmV4YW1wbGUuY2FsY3VsYXRvci5DYWxjdWxhdG9yIHBvcnQ9IG51bGw7CisgICAgdHJ5IHsKIAotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBjcmVhdGluZyBDYWxjdWxhdG9yU2VydmljZSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBjcmVhdGluZyBDYWxjdWxhdG9yU2VydmljZSIpOwogCiAgICAgICAgICAgICAgICAgcG9ydCA9IHNlcnZpY2UuZ2V0Q2FsY3VsYXRvclBvcnQoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgZ2V0dGluZyBwb3J0Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGdldHRpbmcgcG9ydCIpOwogCi0JCS8vIEdldCBTdHViCi0JCUJpbmRpbmdQcm92aWRlciBzdHViID0gKEJpbmRpbmdQcm92aWRlcilwb3J0OwotCQlTdHJpbmcgZW5kcG9pbnRVUkkgPSJodHRwOi8vbG9jYWxob3N0OjEyMDExL2NhbGN1bGF0b3JlbmRwb2ludCI7Ci0JCXN0dWIuZ2V0UmVxdWVzdENvbnRleHQoKS5wdXQoQmluZGluZ1Byb3ZpZGVyLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCi0JCSAgICAgIGVuZHBvaW50VVJJKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgc2V0dGluZyBlbmRwb2ludCBhZGRyZXNzIFVSSSIpOwotCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgVXNpbmcgU09BUCBiaW5kaW5nJ3MgY29uc3VtZXIgdG8gYWRkIDEgKyAyID0gIiArIHBvcnQuYWRkKDEsMikpOworICAgICAgICAvLyBHZXQgU3R1YgorICAgICAgICBCaW5kaW5nUHJvdmlkZXIgc3R1YiA9IChCaW5kaW5nUHJvdmlkZXIpcG9ydDsKKyAgICAgICAgU3RyaW5nIGVuZHBvaW50VVJJID0iaHR0cDovL2xvY2FsaG9zdDoxMjAxMS9jYWxjdWxhdG9yZW5kcG9pbnQiOworICAgICAgICBzdHViLmdldFJlcXVlc3RDb250ZXh0KCkucHV0KEJpbmRpbmdQcm92aWRlci5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAorICAgICAgICAgICAgICBlbmRwb2ludFVSSSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIHNldHRpbmcgZW5kcG9pbnQgYWRkcmVzcyBVUkkiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFVzaW5nIFNPQVAgYmluZGluZydzIGNvbnN1bWVyIHRvIGFkZCAxICsgMiA9ICIgKyBwb3J0LmFkZCgxLDIpKTsKICAgICAgICAgICAgICAgICBpZihhcmdzWzBdLmVxdWFscygiamJpLWVuYWJsZWQtdHJ1ZSIpKQotCQkgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LlBBU1MpOwotICAgICAgICAgICAgICAgIGVsc2UgCi0JICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LlBBU1MpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7CiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCWUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIGlmKGFyZ3NbMF0uZXF1YWxzKCJqYmktZW5hYmxlZC1mYWxzZSIpKQogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgZWxzZQotCQkgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwotCX0KKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKKyAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1zZXJ2ZXIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1zZXJ2ZXIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCmluZGV4IGY1OWY0MzAuLjM2YTk5ZDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlci9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKQEAgLTI1LDEzICsyNSwxMyBAQAogICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2V4YW1wbGUuY29tL0NhbGN1bGF0b3IiCiApCiBwdWJsaWMgY2xhc3MgQ2FsY3VsYXRvciB7Ci0JcHVibGljIENhbGN1bGF0b3IoKSB7fQorICAgIHB1YmxpYyBDYWxjdWxhdG9yKCkge30KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0iYWRkIiwgYWN0aW9uPSJ1cm46QWRkIikKLQlwdWJsaWMgaW50IGFkZChpbnQgaSwgaW50IGopIHsKKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCisgICAgcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB7CiAgICAgICAgICAgICAgICAgaW50IGsgPSBpICtqIDsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSArICIrIiArIGogKyIgPSAiICsgayk7Ci0gCi0JCXJldHVybiBrOwotCX0KKworICAgICAgICByZXR1cm4gazsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlci9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1zZXJ2ZXIvamJpLnhtbAppbmRleCBmOTE1ZGMyLi44MDUzOWUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlci9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyL2piaS54bWwKQEAgLTE4LDE1ICsxOCwxNSBAQAogLS0+CiAKIDxqYmkgdmVyc2lvbj0iMS4wIgotCSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLQkgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gCSB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgotCSB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLmNvbS9DYWxjdWxhdG9yIgotCSB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KLQk8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9ImZhbHNlIj4KLQkJPHByb3ZpZGVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIiAKKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICAgIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCisgICAgIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUuY29tL0NhbGN1bGF0b3IiCisgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgorICAgIDxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0iZmFsc2UiPgorICAgICAgICA8cHJvdmlkZXMgaW50ZXJmYWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkNhbGN1bGF0b3JQb3J0Ii8+CiAgICAgICAgIDxqYXZhZXNiOmFydGlmYWN0c3R5cGU+V1NETDExPC9qYXZhZXNiOmFydGlmYWN0c3R5cGU+Ci0JPC9zZXJ2aWNlcz4KKyAgICA8L3NlcnZpY2VzPgogPC9qYmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlci9zb2FwLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyL3NvYXAtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDA5MGI0MzAuLjQ0MzRlNWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyL3NvYXAtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyL3NvYXAtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOSw5ICsxOSw5IEBACiAKIDwhLS0gamJpLnhtbCBmaWxlIGZvciB0aGUgU09BUCBiaW5kaW5nIGRlcGxveW1lbnRzIGJpbmRpbmcuIC0tPgogPGpiaQotICAgIHZlcnNpb249IjEuMCIgCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgdmVyc2lvbj0iMS4wIgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSAuL2piaS54c2QiPgogICA8c2VydmljZS1hc3NlbWJseT4KICAgICA8aWRlbnRpZmljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlci9zb2FwLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyL3NvYXAtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDJkMWU3ZTguLjY1Y2E5NmYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyL3NvYXAtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyL3NvYXAtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOCwxNiArMTgsMTYgQEAKIC0tPgogCiA8amJpIHZlcnNpb249IjEuMCIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotIAkgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKLQkgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS5jb20vQ2FsY3VsYXRvciIKLQkgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+Ci0JPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4JCQotCQk8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIKLQkJCSAgbGluay10eXBlPSJzdGFuZGFyZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiIAorICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgICAgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKKyAgICAgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS5jb20vQ2FsY3VsYXRvciIKKyAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+CisgICAgPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4KKyAgICAgICAgPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCisgICAgICAgICAgICAgIGxpbmstdHlwZT0ic3RhbmRhcmQiCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJDYWxjdWxhdG9yUG9ydCIvPgogICAgICAgICA8amF2YWVzYjphcnRpZmFjdHN0eXBlPldTREwxMTwvamF2YWVzYjphcnRpZmFjdHN0eXBlPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1zZXJ2ZXIvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyL3dlYi54bWwKaW5kZXggMDdlMTQ3Ny4uNzk4YzY5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1zZXJ2ZXIvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlci93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCBkNzBmZTA0Li5mY2MwNjg1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNhbGMtd2ViLWNsaWVudCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvYnVpbGQueG1sCmluZGV4IGRiNTExZWEuLjQ4N2I5OWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvYnVpbGQueG1sCkBAIC0zOCw3ICszOCw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgotCSAgPGRlbGV0ZSBmaWxlPSIke2piaS1jb21wb25lbnQtc3UtZGlyfS9hc3NlbWJseS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KKyAgICAgIDxkZWxldGUgZmlsZT0iJHtqYmktY29tcG9uZW50LXN1LWRpcn0vYXNzZW1ibHkvJHthcHBuYW1lfS13ZWIud2FyIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJhc3NlbWJsZS13ZWIsIGRlcGxveS1qYmktY29tcG9uZW50LXN1LGFzc2VtYmxlLWNsaWVudCxkZXBsb3ktY2xpZW50Ii8+CkBAIC01MCwyMyArNTAsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUtd2ViIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgY29tcGlsZSI+Ci0JICA8ZWNobyBtZXNzYWdlPSJjbGFzc2VzIGRpciA9ICR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0JICA8ZWNobyBtZXNzYWdlPSJhc3NlbWJsZS5kaXIgPSAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CisgICAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc2VzIGRpciA9ICR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CisgICAgICA8ZWNobyBtZXNzYWdlPSJhc3NlbWJsZS5kaXIgPSAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBrZy13YXIiPgogICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmZpbGUiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CiAgICAgICAgPC9hbnRjYWxsPgotCSAgIDwhLS0gQWRkIE1FVEEtSU5GL2piaS54bWwgdG8gLndhciBmaWxlIC0tPgotCSAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9NRVRBLUlORiIvPgotCSAgIDxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgZGlyID0gJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL01FVEEtSU5GIi8+Ci0JICAgPGNvcHkgZmlsZT0iJHtqYmktY29tcG9uZW50LXN1LWRpcn0vc3UvTUVUQS1JTkYvamJpLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvTUVUQS1JTkYvamJpLnhtbCIvPgotCSAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIgdXBkYXRlPSJ0cnVlIj4KLQkgICAJCTxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIj4KLQkJCQk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9qYmkueG1sIi8+Ci0JCQk8L2ZpbGVzZXQ+Ci0JICAgPC9qYXI+Ci0JICAgPCEtLSBDb3B5IHRoZSBKYXZhRUUgYXBwIHRvIHRoZSBzZXJ2aWNlIGFzc2VtYmx5IC0tPgotCSAgPGNvcHkgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIgdG9kaXI9IiR7amJpLWNvbXBvbmVudC1zdS1kaXJ9L2Fzc2VtYmx5Ii8+CisgICAgICAgPCEtLSBBZGQgTUVUQS1JTkYvamJpLnhtbCB0byAud2FyIGZpbGUgLS0+CisgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL01FVEEtSU5GIi8+CisgICAgICAgPGVjaG8gbWVzc2FnZT0iY3JlYXRlZCBkaXIgPSAke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvTUVUQS1JTkYiLz4KKyAgICAgICA8Y29weSBmaWxlPSIke2piaS1jb21wb25lbnQtc3UtZGlyfS9zdS9NRVRBLUlORi9qYmkueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9NRVRBLUlORi9qYmkueG1sIi8+CisgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIiB1cGRhdGU9InRydWUiPgorICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2piaS54bWwiLz4KKyAgICAgICAgICAgIDwvZmlsZXNldD4KKyAgICAgICA8L2phcj4KKyAgICAgICA8IS0tIENvcHkgdGhlIEphdmFFRSBhcHAgdG8gdGhlIHNlcnZpY2UgYXNzZW1ibHkgLS0+CisgICAgICA8Y29weSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIiB0b2Rpcj0iJHtqYmktY29tcG9uZW50LXN1LWRpcn0vYXNzZW1ibHkiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUtY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgICAgICAgICB2YWx1ZT0iLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyBodHRwOi8vbG9jYWxob3N0OjgwODAvY2FsYy13ZWItY2xpZW50LXdlYi93ZWJzZXJ2aWNlL0VuZHBvaW50TWFwcGluZ1NlcnZpY2U/V1NETCIvPgogICAgIDwvYW50Y2FsbD4KICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMiCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyIiAKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0id2ViY2xpZW50LyoqIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3dlYi54bWwiLz4KICAgICAgIDxjb3B5IGZpbGU9Ii4vY2xpZW50LXN1bi13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3N1bi13ZWIueG1sIi8+CkBAIC0xMTcsMTEgKzExNywxMSBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZy9jbGllbnQtd2ViLnhtbAppbmRleCBlZWI3MzBkLi43OTViMDUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZy9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZy9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IGVlZDhlNWEuLjdiZGI0M2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50LW5hbWluZyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnQtbmFtaW5nIjsKIAogICAgIHB1YmxpYyBib29sZWFuIGZvdW5kMSA9IGZhbHNlOwogCkBAIC00Niw4ICs0Niw4IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBmYWlsKCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZmFpbCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiUmVzdWx0IGlzIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZy9lbmRwb2ludC9FbmRwb2ludE1hcHBpbmcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvZW5kcG9pbnQvRW5kcG9pbnRNYXBwaW5nLmphdmEKaW5kZXggNmE4YzAzNy4uN2E1YjJkMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZy9lbmRwb2ludC9FbmRwb2ludE1hcHBpbmcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL2VuZHBvaW50L0VuZHBvaW50TWFwcGluZy5qYXZhCkBAIC0yNiwxMyArMjYsMTMgQEAKICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0VuZHBvaW50TWFwcGluZyIKICkKIHB1YmxpYyBjbGFzcyBFbmRwb2ludE1hcHBpbmcgewotCXB1YmxpYyBFbmRwb2ludE1hcHBpbmcoKSB7fQorICAgIHB1YmxpYyBFbmRwb2ludE1hcHBpbmcoKSB7fQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiLCBhY3Rpb249InVybjpBZGQiKQotCXB1YmxpYyBpbnQgYWRkKGludCBpLCBpbnQgaikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiLCBhY3Rpb249InVybjpBZGQiKQorICAgIHB1YmxpYyBpbnQgYWRkKGludCBpLCBpbnQgaikgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgICAgICAgICAgaW50IGsgPSBpICtqIDsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSArICIrIiArIGogKyIgPSAiICsgayk7Ci0JCS8vdGhyb3cgbmV3IGphdmEubGFuZy5FeGNlcHRpb24oIlRoaXMgaXMgbXkgZXhjZXB0aW9uIik7IAotCQlyZXR1cm4gazsKLQl9CisgICAgICAgIC8vdGhyb3cgbmV3IGphdmEubGFuZy5FeGNlcHRpb24oIlRoaXMgaXMgbXkgZXhjZXB0aW9uIik7CisgICAgICAgIHJldHVybiBrOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvamF2YWVlLXNlLXNlcnZpY2V1bml0L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL2phdmFlZS1zZS1zZXJ2aWNldW5pdC9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDk1NjE4NmIuLmRkMmYxOWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvamF2YWVlLXNlLXNlcnZpY2V1bml0L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZy9qYXZhZWUtc2Utc2VydmljZXVuaXQvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbApAQCAtMTksMTcgKzE5LDE3IEBACiAKIDwhLS0gamJpLnhtbCBmaWxlIGZvciB0aGUgU09BUCBiaW5kaW5nIGRlcGxveW1lbnRzIGJpbmRpbmcuIC0tPgogPGpiaQotICAgIHZlcnNpb249IjEuMCIgCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCisgICAgdmVyc2lvbj0iMS4wIgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCiAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4bWxuczpuczA9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0VuZHBvaW50TWFwcGluZyIKKyAgICB4bWxuczpuczA9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0VuZHBvaW50TWFwcGluZyIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSAuL2piaS54c2QiPgogICA8c2VydmljZS1hc3NlbWJseT4KICAgICA8aWRlbnRpZmljYXRpb24+CiAgICAgICA8bmFtZT5jbGllbnRfd2ViX2NhbGN1bGF0b3Jfc2VydmljZV9hc3NlbWJseTwvbmFtZT4KICAgICAgIDxkZXNjcmlwdGlvbj5DbGllbnQgd2ViIGNhbGN1bGF0b3Igc2VydmljZSBhc3NlbWJseTwvZGVzY3JpcHRpb24+CiAgICAgPC9pZGVudGlmaWNhdGlvbj4KLQk8c2VydmljZS11bml0PgorICAgIDxzZXJ2aWNlLXVuaXQ+CiAgICAgICA8aWRlbnRpZmljYXRpb24+CiAgICAgICAgICA8bmFtZT5jYWxjLXdlYi1jbGllbnQ8L25hbWU+CiAgICAgICAgICA8ZGVzY3JpcHRpb24+cHJvdmlkZXIgc2VydmljZTwvZGVzY3JpcHRpb24+CkBAIC00MSwxMCArNDEsMTAgQEAKICAgICA8L3NlcnZpY2UtdW5pdD4KIAogICAgPGNvbm5lY3Rpb25zPgotICAgCTxjb25uZWN0aW9uPgotCQk8Y29uc3VtZXIgZW5kcG9pbnQtbmFtZT0iRW5kcG9pbnRNYXBwaW5nUG9ydCIgc2VydmljZS1uYW1lPSJuczA6RW5kcG9pbnRNYXBwaW5nU2VydmljZSIvPgotCSAgIAk8cHJvdmlkZXIgZW5kcG9pbnQtbmFtZT0iamF2YWVlX0VuZHBvaW50TWFwcGluZ1BvcnQiIHNlcnZpY2UtbmFtZT0ibnMwOkVuZHBvaW50TWFwcGluZ1NlcnZpY2UiLz4KLQk8L2Nvbm5lY3Rpb24+CisgICAgICAgPGNvbm5lY3Rpb24+CisgICAgICAgIDxjb25zdW1lciBlbmRwb2ludC1uYW1lPSJFbmRwb2ludE1hcHBpbmdQb3J0IiBzZXJ2aWNlLW5hbWU9Im5zMDpFbmRwb2ludE1hcHBpbmdTZXJ2aWNlIi8+CisgICAgICAgICAgIDxwcm92aWRlciBlbmRwb2ludC1uYW1lPSJqYXZhZWVfRW5kcG9pbnRNYXBwaW5nUG9ydCIgc2VydmljZS1uYW1lPSJuczA6RW5kcG9pbnRNYXBwaW5nU2VydmljZSIvPgorICAgIDwvY29ubmVjdGlvbj4KICAgIDwvY29ubmVjdGlvbnM+CiAgICA8L3NlcnZpY2UtYXNzZW1ibHk+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvamF2YWVlLXNlLXNlcnZpY2V1bml0L3N1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL2phdmFlZS1zZS1zZXJ2aWNldW5pdC9zdS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDU0ZmU4MDQuLjE5ODYzM2IgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvamF2YWVlLXNlLXNlcnZpY2V1bml0L3N1L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZy9qYXZhZWUtc2Utc2VydmljZXVuaXQvc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMTgsMTMgKzE4LDEzIEBACiAtLT4KIAogPGpiaSB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiB4bWxuczpqYXZhZWVfZXh0PSJodHRwOi8vamF2YWVlLnNlcnZpY2VlbmdpbmUuc3VuLmNvbS9lbmRwb2ludC9uYW1pbmcvZXh0ZW5zaW9uIiB4bWxuczpuczA9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0VuZHBvaW50TWFwcGluZyIgdmVyc2lvbj0iMS4wIj4KLQk8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9ImZhbHNlIj4gCi0JCTxwcm92aWRlcyBlbmRwb2ludC1uYW1lPSJqYXZhZWVfRW5kcG9pbnRNYXBwaW5nUG9ydCIgaW50ZXJmYWNlLW5hbWU9Im5zMDpFbmRwb2ludE1hcHBpbmdTZXJ2aWNlSW50ZXJmYWNlIiBzZXJ2aWNlLW5hbWU9Im5zMDpFbmRwb2ludE1hcHBpbmdTZXJ2aWNlIi8+Ci0JCTxqYXZhZWVfZXh0OmVwdC1tYXBwaW5ncz4KLQkJCTxqYXZhZWVfZXh0OmVwdC1tYXBwaW5nPgotCQkJCTxqYXZhZWVfZXh0OmphdmEtZXB0IGVuZHBvaW50LW5hbWU9ImphdmFlZV9FbmRwb2ludE1hcHBpbmdQb3J0IiBpbnRlcmZhY2UtbmFtZT0ibnMwOkVuZHBvaW50TWFwcGluZ1NlcnZpY2VJbnRlcmZhY2UiIHNlcnZpY2UtbmFtZT0ibnMwOkVuZHBvaW50TWFwcGluZ1NlcnZpY2UiIHR5cGU9InByb3ZpZGVyIi8+Ci0JCQkJPGphdmFlZV9leHQ6d3NkbC1lcHQgZW5kcG9pbnQtbmFtZT0iRW5kcG9pbnRNYXBwaW5nUG9ydCIgaW50ZXJmYWNlLW5hbWU9Im5zMDpFbmRwb2ludE1hcHBpbmdTZXJ2aWNlSW50ZXJmYWNlIiBzZXJ2aWNlLW5hbWU9Im5zMDpFbmRwb2ludE1hcHBpbmdTZXJ2aWNlIiB0eXBlPSJwcm92aWRlciIvPgotCQkJPC9qYXZhZWVfZXh0OmVwdC1tYXBwaW5nPgotCQk8L2phdmFlZV9leHQ6ZXB0LW1hcHBpbmdzPgotCTwvc2VydmljZXM+IAorICAgIDxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0iZmFsc2UiPgorICAgICAgICA8cHJvdmlkZXMgZW5kcG9pbnQtbmFtZT0iamF2YWVlX0VuZHBvaW50TWFwcGluZ1BvcnQiIGludGVyZmFjZS1uYW1lPSJuczA6RW5kcG9pbnRNYXBwaW5nU2VydmljZUludGVyZmFjZSIgc2VydmljZS1uYW1lPSJuczA6RW5kcG9pbnRNYXBwaW5nU2VydmljZSIvPgorICAgICAgICA8amF2YWVlX2V4dDplcHQtbWFwcGluZ3M+CisgICAgICAgICAgICA8amF2YWVlX2V4dDplcHQtbWFwcGluZz4KKyAgICAgICAgICAgICAgICA8amF2YWVlX2V4dDpqYXZhLWVwdCBlbmRwb2ludC1uYW1lPSJqYXZhZWVfRW5kcG9pbnRNYXBwaW5nUG9ydCIgaW50ZXJmYWNlLW5hbWU9Im5zMDpFbmRwb2ludE1hcHBpbmdTZXJ2aWNlSW50ZXJmYWNlIiBzZXJ2aWNlLW5hbWU9Im5zMDpFbmRwb2ludE1hcHBpbmdTZXJ2aWNlIiB0eXBlPSJwcm92aWRlciIvPgorICAgICAgICAgICAgICAgIDxqYXZhZWVfZXh0OndzZGwtZXB0IGVuZHBvaW50LW5hbWU9IkVuZHBvaW50TWFwcGluZ1BvcnQiIGludGVyZmFjZS1uYW1lPSJuczA6RW5kcG9pbnRNYXBwaW5nU2VydmljZUludGVyZmFjZSIgc2VydmljZS1uYW1lPSJuczA6RW5kcG9pbnRNYXBwaW5nU2VydmljZSIgdHlwZT0icHJvdmlkZXIiLz4KKyAgICAgICAgICAgIDwvamF2YWVlX2V4dDplcHQtbWFwcGluZz4KKyAgICAgICAgPC9qYXZhZWVfZXh0OmVwdC1tYXBwaW5ncz4KKyAgICA8L3NlcnZpY2VzPgogPC9qYmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL3dlYi54bWwKaW5kZXggMzU4NzQwYS4uZjNjNmQ1ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZy93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgRW5kcG9pbnRNYXBwaW5nIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+RW5kcG9pbnRNYXBwaW5nV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBFbmRwb2ludE1hcHBpbmcgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5FbmRwb2ludE1hcHBpbmdXQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEVuZHBvaW50TWFwcGluZyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+RW5kcG9pbnRNYXBwaW5nV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkVuZHBvaW50TWFwcGluZzwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5FbmRwb2ludE1hcHBpbmc8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBFbmRwb2ludE1hcHBpbmcgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkVuZHBvaW50TWFwcGluZ1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5FbmRwb2ludE1hcHBpbmc8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuRW5kcG9pbnRNYXBwaW5nPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkVuZHBvaW50TWFwcGluZzwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvRW5kcG9pbnRNYXBwaW5nU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5FbmRwb2ludE1hcHBpbmc8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0VuZHBvaW50TWFwcGluZ1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQppbmRleCBmN2JmNDY3Li5mMDViZGM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZy93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCwzNSArMjgsMzUgQEAKIAogICAgICAgIEBXZWJTZXJ2aWNlUmVmKG5hbWU9InN1bi13ZWIuc2VydmljZXJlZi9jYWxjdWxhdG9yIikgRW5kcG9pbnRNYXBwaW5nU2VydmljZSBzZXJ2aWNlOwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCiAgICAgICAgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7Ci0JICAgIFByaW50V3JpdGVyIG91dD1udWxsOworICAgICAgICBQcmludFdyaXRlciBvdXQ9bnVsbDsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgU2VydmljZSBpcyA6IiArIHNlcnZpY2UpOwogICAgICAgICAgICAgICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwotICAgICAgICAgICAgCW91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CisgICAgICAgICAgICAgICAgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKICAgICAgICAgICAgICAgICBFbmRwb2ludE1hcHBpbmcgcG9ydCA9IHNlcnZpY2UuZ2V0RW5kcG9pbnRNYXBwaW5nUG9ydCgpOwogICAgICAgICAgICAgICAgIGludCByZXQgPSBwb3J0LmFkZCgxLCAyKTsKLQkJcHJpbnRTdWNjZXNzKG91dCxyZXQpOworICAgICAgICBwcmludFN1Y2Nlc3Mob3V0LHJldCk7CiAgICAgICAgICAgICB9IGNhdGNoKGphdmEubGFuZy5FeGNlcHRpb24gZSkgewotCQkvL2UucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIAlwcmludEZhaWx1cmUob3V0LCBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIC8vZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIHByaW50RmFpbHVyZShvdXQsIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0JCWlmKG91dCAhPSBudWxsKSB7CisgICAgICAgIGlmKG91dCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIG91dC5mbHVzaCgpOwogICAgICAgICAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKLQkJfQotCSAgICB9CisgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIHByaW50RmFpbHVyZShQcmludFdyaXRlciBvdXQsIFN0cmluZyBlcnJNc2cpIHsKLQkJaWYob3V0ID09IG51bGwpIHJldHVybjsKLQkJb3V0LnByaW50bG4oIjxodG1sPiIpOworICAgICAgICBpZihvdXQgPT0gbnVsbCkgcmV0dXJuOworICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+VGVzdFNlcnZsZXQ8L3RpdGxlPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgcHJpbnRTdWNjZXNzKFByaW50V3JpdGVyIG91dCwgaW50IHJlc3VsdCkgewotCQlpZihvdXQgPT0gbnVsbCkgcmV0dXJuOworICAgICAgICBpZihvdXQgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5UZXN0U2VydmxldDwvdGl0bGU+Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYWNjNTdmMy4uYzJmN2E1MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqc3IyMDgtaW50ZWdyYXRpb24td2ViLWNsaWVudCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvYnVpbGQueG1sCmluZGV4IGZjODg1NWYuLjZjNmQ5MTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvYnVpbGQueG1sCkBAIC03Niw3ICs3Niw3IEBACiAgICAgICAgICAgICAgICB2YWx1ZT0iLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyAuL3dlYmNsaWVudC9jbGllbnQvd3NkbC9FbmRwb2ludE1hcHBpbmdDb25zdW1lclNlcnZpY2Uud3NkbCIvPgogICAgIDwvYW50Y2FsbD4KICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMiCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiIAorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IndlYmNsaWVudC8qKiIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jbGllbnQtd2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi93ZWIueG1sIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC1zdW4td2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9zdW4td2ViLnhtbCIvPgpAQCAtOTgsMTEgKzk4LDExIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5UZXN0Q2xpZW50Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL2NsaWVudC13ZWIueG1sCmluZGV4IGVlYjczMGQuLjc5NWIwNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lci9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggNmI2NDkyMi4uNzU1NDljMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lci9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtMjksNyArMjksNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lciI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lciI7CiAKICAgICBwdWJsaWMgYm9vbGVhbiBmb3VuZDEgPSBmYWxzZTsKICAgICBwdWJsaWMgYm9vbGVhbiBmb3VuZDIgPSBmYWxzZTsKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTY0LDkgKzY0LDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIEVuZHBvaW50TWFwcGluZ0NvbnN1bWVyIGFkZCBTRVJWSUNFIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlszXSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvZW5kcG9pbnQvRW5kcG9pbnRNYXBwaW5nQ29uc3VtZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvZW5kcG9pbnQvRW5kcG9pbnRNYXBwaW5nQ29uc3VtZXIuamF2YQppbmRleCBiOGJkNzhiLi5lNTBlYTRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL2VuZHBvaW50L0VuZHBvaW50TWFwcGluZ0NvbnN1bWVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lci9lbmRwb2ludC9FbmRwb2ludE1hcHBpbmdDb25zdW1lci5qYXZhCkBAIC0yNSwxMyArMjUsMTMgQEAKICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0VuZHBvaW50TWFwcGluZ0NvbnN1bWVyIgogKQogcHVibGljIGNsYXNzIEVuZHBvaW50TWFwcGluZ0NvbnN1bWVyIHsKLQlwdWJsaWMgRW5kcG9pbnRNYXBwaW5nQ29uc3VtZXIoKSB7fQorICAgIHB1YmxpYyBFbmRwb2ludE1hcHBpbmdDb25zdW1lcigpIHt9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCi0JcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB7CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiLCBhY3Rpb249InVybjpBZGQiKQorICAgIHB1YmxpYyBpbnQgYWRkKGludCBpLCBpbnQgaikgewogICAgICAgICAgICAgICAgIGludCBrID0gaSAraiA7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkgKyAiKyIgKyBqICsiID0gIiArIGspOwotIAotCQlyZXR1cm4gazsKLQl9CisKKyAgICAgICAgcmV0dXJuIGs7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lci9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lci9qYmkueG1sCmluZGV4IDNlMTdiOGMuLmRiMzU1MWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL2piaS54bWwKQEAgLTE4LDIxICsxOCwyMSBAQAogLS0+CiAKIDxqYmkgdmVyc2lvbj0iMS4wIgotCSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLQkgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0JIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCi0JIHhtbG5zOm5zMD0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvRW5kcG9pbnRNYXBwaW5nQ29uc3VtZXIiCi0JIHhtbG5zOmphdmFlZV9leHQ9Imh0dHA6Ly9qYXZhZWUuc2VydmljZWVuZ2luZS5zdW4uY29tL2VuZHBvaW50L25hbWluZy9leHRlbnNpb24iCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0iZmFsc2UiPgotCSA8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9Im5zMDpFbmRwb2ludE1hcHBpbmdDb25zdW1lclNlcnZpY2VJbnRlcmZhY2UiCisgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCisgICAgIHhtbG5zOm5zMD0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvRW5kcG9pbnRNYXBwaW5nQ29uc3VtZXIiCisgICAgIHhtbG5zOmphdmFlZV9leHQ9Imh0dHA6Ly9qYXZhZWUuc2VydmljZWVuZ2luZS5zdW4uY29tL2VuZHBvaW50L25hbWluZy9leHRlbnNpb24iCisgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgorICAgIDxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0iZmFsc2UiPgorICAgICA8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9Im5zMDpFbmRwb2ludE1hcHBpbmdDb25zdW1lclNlcnZpY2VJbnRlcmZhY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0ibnMwOkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyU2VydmljZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtbmFtZT0iamF2YWVlX0VuZHBvaW50TWFwcGluZ0NvbnN1bWVyUG9ydCIvPgotCQk8amF2YWVlX2V4dDplcHQtbWFwcGluZ3M+Ci0JCQk8amF2YWVlX2V4dDplcHQtbWFwcGluZz4KLQkJCQk8amF2YWVlX2V4dDpqYXZhLWVwdCBlbmRwb2ludC1uYW1lPSJqYXZhZWVfRW5kcG9pbnRNYXBwaW5nQ29uc3VtZXJQb3J0IiBpbnRlcmZhY2UtbmFtZT0ibnMwOkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyU2VydmljZUludGVyZmFjZSIgc2VydmljZS1uYW1lPSJuczA6RW5kcG9pbnRNYXBwaW5nQ29uc3VtZXJTZXJ2aWNlIiB0eXBlPSJjb25zdW1lciIvPgotCQkJCTxqYXZhZWVfZXh0OndzZGwtZXB0IGVuZHBvaW50LW5hbWU9IkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyUG9ydCIgaW50ZXJmYWNlLW5hbWU9Im5zMDpFbmRwb2ludE1hcHBpbmdDb25zdW1lclNlcnZpY2VJbnRlcmZhY2UiIHNlcnZpY2UtbmFtZT0ibnMwOkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyU2VydmljZSIgdHlwZT0iY29uc3VtZXIiLz4KLQkJCTwvamF2YWVlX2V4dDplcHQtbWFwcGluZz4KLQkJPC9qYXZhZWVfZXh0OmVwdC1tYXBwaW5ncz4KLQk8L3NlcnZpY2VzPgorICAgICAgICA8amF2YWVlX2V4dDplcHQtbWFwcGluZ3M+CisgICAgICAgICAgICA8amF2YWVlX2V4dDplcHQtbWFwcGluZz4KKyAgICAgICAgICAgICAgICA8amF2YWVlX2V4dDpqYXZhLWVwdCBlbmRwb2ludC1uYW1lPSJqYXZhZWVfRW5kcG9pbnRNYXBwaW5nQ29uc3VtZXJQb3J0IiBpbnRlcmZhY2UtbmFtZT0ibnMwOkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyU2VydmljZUludGVyZmFjZSIgc2VydmljZS1uYW1lPSJuczA6RW5kcG9pbnRNYXBwaW5nQ29uc3VtZXJTZXJ2aWNlIiB0eXBlPSJjb25zdW1lciIvPgorICAgICAgICAgICAgICAgIDxqYXZhZWVfZXh0OndzZGwtZXB0IGVuZHBvaW50LW5hbWU9IkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyUG9ydCIgaW50ZXJmYWNlLW5hbWU9Im5zMDpFbmRwb2ludE1hcHBpbmdDb25zdW1lclNlcnZpY2VJbnRlcmZhY2UiIHNlcnZpY2UtbmFtZT0ibnMwOkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyU2VydmljZSIgdHlwZT0iY29uc3VtZXIiLz4KKyAgICAgICAgICAgIDwvamF2YWVlX2V4dDplcHQtbWFwcGluZz4KKyAgICAgICAgPC9qYXZhZWVfZXh0OmVwdC1tYXBwaW5ncz4KKyAgICA8L3NlcnZpY2VzPgogPC9qYmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL3N1bi1odHRwLWJpbmRpbmcvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvc3VuLWh0dHAtYmluZGluZy9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCmluZGV4IGMzMjJkZjcuLjE5MzVhYzUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvc3VuLWh0dHAtYmluZGluZy9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvc3VuLWh0dHAtYmluZGluZy9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOSwxMCArMTksMTAgQEAKIAogPCEtLSBqYmkueG1sIGZpbGUgZm9yIHRoZSBTT0FQIGJpbmRpbmcgZGVwbG95bWVudHMgYmluZGluZy4gLS0+CiA8amJpCi0gICAgdmVyc2lvbj0iMS4wIiAKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLQkgeG1sbnM6bnMwPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9FbmRwb2ludE1hcHBpbmdDb25zdW1lciIKKyAgICB2ZXJzaW9uPSIxLjAiCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICB4bWxuczpuczA9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0VuZHBvaW50TWFwcGluZ0NvbnN1bWVyIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIC4vamJpLnhzZCI+CiAgIDxzZXJ2aWNlLWFzc2VtYmx5PgogICAgIDxpZGVudGlmaWNhdGlvbj4KQEAgLTUyLDEwICs1MiwxMCBAQAogICAgIDwvc2VydmljZS11bml0PgogCiAgICA8Y29ubmVjdGlvbnM+Ci0gICAJPGNvbm5lY3Rpb24+Ci0JCTxjb25zdW1lciBlbmRwb2ludC1uYW1lPSJqYXZhZWVfRW5kcG9pbnRNYXBwaW5nQ29uc3VtZXJQb3J0IiBzZXJ2aWNlLW5hbWU9Im5zMDpFbmRwb2ludE1hcHBpbmdDb25zdW1lclNlcnZpY2UiLz4KLQkgICAJPHByb3ZpZGVyIGVuZHBvaW50LW5hbWU9IkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyUG9ydCIgc2VydmljZS1uYW1lPSJuczA6RW5kcG9pbnRNYXBwaW5nQ29uc3VtZXJTZXJ2aWNlIi8+Ci0JPC9jb25uZWN0aW9uPgorICAgICAgIDxjb25uZWN0aW9uPgorICAgICAgICA8Y29uc3VtZXIgZW5kcG9pbnQtbmFtZT0iamF2YWVlX0VuZHBvaW50TWFwcGluZ0NvbnN1bWVyUG9ydCIgc2VydmljZS1uYW1lPSJuczA6RW5kcG9pbnRNYXBwaW5nQ29uc3VtZXJTZXJ2aWNlIi8+CisgICAgICAgICAgIDxwcm92aWRlciBlbmRwb2ludC1uYW1lPSJFbmRwb2ludE1hcHBpbmdDb25zdW1lclBvcnQiIHNlcnZpY2UtbmFtZT0ibnMwOkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyU2VydmljZSIvPgorICAgIDwvY29ubmVjdGlvbj4KICAgIDwvY29ubmVjdGlvbnM+CiAKICAgIDwvc2VydmljZS1hc3NlbWJseT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvc3VuLWh0dHAtYmluZGluZy9zdS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lci9zdW4taHR0cC1iaW5kaW5nL3N1L01FVEEtSU5GL2piaS54bWwKaW5kZXggMGY5NTljOS4uMTliYmFmZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lci9zdW4taHR0cC1iaW5kaW5nL3N1L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lci9zdW4taHR0cC1iaW5kaW5nL3N1L01FVEEtSU5GL2piaS54bWwKQEAgLTE4LDE1ICsxOCwxNSBAQAogLS0+CiAKIDxqYmkgdmVyc2lvbj0iMS4wIgotCSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLQkgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0JIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCi0JIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvRW5kcG9pbnRNYXBwaW5nQ29uc3VtZXIiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CQkKLQkgPHByb3ZpZGVzIGludGVyZmFjZS1uYW1lPSJ0bnM6RW5kcG9pbnRNYXBwaW5nQ29uc3VtZXJTZXJ2aWNlSW50ZXJmYWNlIgorICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgICB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgorICAgICB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0VuZHBvaW50TWFwcGluZ0NvbnN1bWVyIgorICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgorICAgICA8cHJvdmlkZXMgaW50ZXJmYWNlLW5hbWU9InRuczpFbmRwb2ludE1hcHBpbmdDb25zdW1lclNlcnZpY2VJbnRlcmZhY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyU2VydmljZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtbmFtZT0iRW5kcG9pbnRNYXBwaW5nQ29uc3VtZXJQb3J0Ii8+CiAgICAgICAgICAgICAgICAgPGFydGlmYWN0cyB4bWxucz0iIiByb2xlPSJwcm92aWRlciIgZmlsZS1uYW1lPSJlbmRwb2ludHMueG1sIiB0eXBlPSJ4bWwiLz4KLQk8L3NlcnZpY2VzPgorICAgIDwvc2VydmljZXM+CiA8L2piaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvd2ViLnhtbAppbmRleCBjMzQ0MGMzLi4zYjAzNWVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lci93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBFbmRwb2ludE1hcHBpbmdDb25zdW1lciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBFbmRwb2ludE1hcHBpbmdDb25zdW1lciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBFbmRwb2ludE1hcHBpbmdDb25zdW1lciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+RW5kcG9pbnRNYXBwaW5nQ29uc3VtZXJXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+RW5kcG9pbnRNYXBwaW5nQ29uc3VtZXI8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuRW5kcG9pbnRNYXBwaW5nQ29uc3VtZXI8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBFbmRwb2ludE1hcHBpbmdDb25zdW1lciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+RW5kcG9pbnRNYXBwaW5nQ29uc3VtZXJXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+RW5kcG9pbnRNYXBwaW5nQ29uc3VtZXI8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuRW5kcG9pbnRNYXBwaW5nQ29uc3VtZXI8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+RW5kcG9pbnRNYXBwaW5nQ29uc3VtZXI8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0VuZHBvaW50TWFwcGluZ0NvbnN1bWVyU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5FbmRwb2ludE1hcHBpbmdDb25zdW1lcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvRW5kcG9pbnRNYXBwaW5nQ29uc3VtZXJTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMTc3OGQyYi4uMWI5NWIzOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lci93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsOCArMjgsOCBAQAogCiAgICAgICAgQFdlYlNlcnZpY2VSZWYgRW5kcG9pbnRNYXBwaW5nQ29uc3VtZXJTZXJ2aWNlIHNlcnZpY2U7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvRW50QXBwLWVqYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvRW50QXBwLWVqYi9idWlsZC54bWwKaW5kZXggZmU0NDBjMC4uM2ViZTUyYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL0VudEFwcC1lamIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9FbnRBcHAtZWpiL2J1aWxkLnhtbApAQCAtMjUsMjMgKzI1LDIzIEBACiAgICAgPGltcG9ydCBmaWxlPSJuYnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8IS0tCiAKLSAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZSAKLSAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZCAKLSAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZTogCisgICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUKKyAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZAorICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOgogCi0gICAgICBwcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgcG9zdC1pbml0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgcHJlLWNvbXBpbGU6ICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIAotICAgICAgcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gCisgICAgICBwcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzCisgICAgICBwb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIHByZS1jb21waWxlOiAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbgorICAgICAgcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24KICAgICAgIHByZS1jb21waWxlLXNpbmdsZTogICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgZmlsZQogICAgICAgcG9zdC1jb21waWxlLXNpbmdsZTogICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIGZpbGUKLSAgICAgIHByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXIgYnVpbGRpbmcgCi0gICAgICBwb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXIgYnVpbGRpbmcgCi0gICAgICBwb3N0LWNsZWFuOiAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBjbGVhbmluZyBidWlsZCBwcm9kdWN0cyAKKyAgICAgIHByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXIgYnVpbGRpbmcKKyAgICAgIHBvc3QtZGlzdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphciBidWlsZGluZworICAgICAgcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMKICAgICAgIHByZS1ydW4tZGVwbG95OiAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBkZXBsb3lpbmcKICAgICAgIHBvc3QtcnVuLWRlcGxveTogICAgICAgICAgY2FsbGVkIGFmdGVyIGRlcGxveWluZwogCi0gICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSJwb3N0LWNvbXBpbGUiPgogICAgICAgICAgICAgPG9iZnVzY2F0ZT4KQEAgLTQ5LDIwICs0OSwyMCBAQAogICAgICAgICAgICAgPC9vYmZ1c2NhdGU+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQKKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogCiAgICAgT3RoZXIgd2F5IGhvdyB0byBjdXN0b21pemUgdGhlIGJ1aWxkIGlzIGJ5IG92ZXJyaWRpbmcgZXhpc3RpbmcgbWFpbiB0YXJnZXRzLgotICAgIFRoZSB0YXJnZXQgb2YgaW50ZXJlc3QgYXJlOiAKKyAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZToKIAogICAgICAgaW5pdC1tYWNyb2RlZi1qYXZhYzogICAgZGVmaW5lcyBtYWNybyBmb3IgamF2YWMgY29tcGlsYXRpb24KICAgICAgIGluaXQtbWFjcm9kZWYtZGVidWc6ICAgIGRlZmluZXMgbWFjcm8gZm9yIGNsYXNzIGRlYnVnZ2luZwogICAgICAgZG8tZGlzdDogICAgICAgICAgICAgICAgamFyIGFyY2hpdmUgYnVpbGRpbmcKLSAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0IAotICAgICAgamF2YWRvYy1idWlsZDogICAgICAgICAgamF2YWRvYyBnZW5lcmF0aW9uIAorICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHByb2plY3QKKyAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbgogCi0gICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgdGhlIHRhcmdldCBmb3IgcHJvamVjdCBleGVjdXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9IjxQUk9KTkFNRT4taW1wbC5qYXIiPgogICAgICAgICAgICAgPGV4ZWMgZGlyPSJiaW4iIGV4ZWN1dGFibGU9ImxhdW5jaGVyLmV4ZSI+CkBAIC03MCwxMCArNzAsMTAgQEAKICAgICAgICAgICAgIDwvZXhlYz4KICAgICAgICAgPC90YXJnZXQ+CiAKLSAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uIAotICAgIGNvbXBpbGUgdGFyZ2V0IGFzIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGxpc3Qgb2YgYXZhaWxhYmxlIAotICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4gCi0gICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuIAorICAgIE5vdGljZSB0aGF0IG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gamFyIHRhcmdldCBhbmQgbm90IG9ubHkgb24KKyAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZQorICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4KKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogICAgIC0tPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL0VudEFwcC1lamIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL0VudEFwcC1lamIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCmluZGV4IDE0NGQ2MzAuLmNiMDgzODUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9FbnRBcHAtZWpiL25icHJvamVjdC9hbnQtZGVwbG95LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvRW50QXBwLWVqYi9uYnByb2plY3QvYW50LWRlcGxveS54bWwKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0ic2pzYXMiIHByb3BlcnR5PSJzanNhcy5wYXNzd29yZC5maWxlIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPiAgPCEtLSBkbyBub3QgZm9yZ2V0IHRvIGRlbGV0ZSB0aGlzISAtLT4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQVNfQURNSU5fUEFTU1dPUkQ9JHtzanNhcy5wYXNzd29yZH0iIGZpbGU9IiR7c2pzYXMucGFzc3dvcmQuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iLXBhcnNlLXN1bi13ZWIiIGRlcGVuZHM9Ii1pbml0LWNsLWRlcGxveW1lbnQtZW52IiBpZj0ic3VuLndlYi5wcmVzZW50Ij4KICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0ic2pzYXMiIHByb3BlcnR5PSJ0ZW1wLnN1bi53ZWIiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7ZGVwbG95LmFudC5kb2NiYXNlLmRpcn0vV0VCLUlORi9zdW4td2ViLnhtbCIgdG9maWxlPSIke3RlbXAuc3VuLndlYn0iLz4KQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxyZXBsYWNldmFsdWU+PCFbQ0RBVEFbLS0+IDxzdW4td2ViLWFwcF1dPjwvcmVwbGFjZXZhbHVlPgogICAgICAgICA8L3JlcGxhY2U+CiAgICAgICAgIDx4bWxwcm9wZXJ0eSBmaWxlPSIke3RlbXAuc3VuLndlYn0iIHZhbGlkYXRlPSJmYWxzZSI+Ci0gICAgICAgIDwveG1scHJvcGVydHk+ICAgIAorICAgICAgICA8L3htbHByb3BlcnR5PgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7dGVtcC5zdW4ud2VifSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95LmFudC5jbGllbnQudXJsIiB2YWx1ZT0iJHtzanNhcy51cmx9JHtzdW4td2ViLWFwcC5jb250ZXh0LXJvb3R9Ii8+CiAgICAgPC90YXJnZXQ+CkBAIC00OSwxMSArNDksMTEgQEAKICAgICAgICAgPG1rZGlyIGRpcj0iJHtzanNhcy5yZXNvdXJjZXMuZGlyfS9NRVRBLUlORiIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2pzYXMucmVzb3VyY2VzLmZpbGUiIHZhbHVlPSIke3Nqc2FzLnJlc291cmNlcy5kaXJ9L01FVEEtSU5GL3N1bi1yZXNvdXJjZXMueG1sIi8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsZWZ0eSIgdmFsdWU9IiZsdDsiLz4KLSAgICAgICAgIAorCiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodHkiIHZhbHVlPSImZ3Q7Ii8+CiAgICAgICAgIDxjb25jYXQgZGVzdGZpbGU9IiR7c2pzYXMucmVzb3VyY2VzLmZpbGV9Ij4ke2xlZnR5fT94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPyR7cmlnaHR5fQotJHtsZWZ0eX0hRE9DVFlQRSByZXNvdXJjZXMgUFVCTElDIAotICAgIi0vL1N1biBNaWNyb3N5c3RlbXMgSW5jLi8vRFREIEFwcGxpY2F0aW9uIFNlcnZlciA5LjAgUmVzb3VyY2UgRGVmaW5pdGlvbnMgLy9FTiIgCiske2xlZnR5fSFET0NUWVBFIHJlc291cmNlcyBQVUJMSUMKKyAgICItLy9TdW4gTWljcm9zeXN0ZW1zIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOS4wIFJlc291cmNlIERlZmluaXRpb25zIC8vRU4iCiAgICAiJHtzanNhcy5yb290fS9saWIvZHRkcy9zdW4tcmVzb3VyY2VzXzFfMi5kdGQiJHtyaWdodHl9CiAke2xlZnR5fXJlc291cmNlcyR7cmlnaHR5fQogJHtsZWZ0eX0vcmVzb3VyY2VzJHtyaWdodHl9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvRW50QXBwLWVqYi9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvRW50QXBwLWVqYi9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKaW5kZXggNjIxMzVhYS4uNDEyODUyOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL0VudEFwcC1lamIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9FbnRBcHAtZWpiL25icHJvamVjdC9idWlsZC1pbXBsLnhtbApAQCAtMzYsOCArMzYsOCBAQAogPHByb2plY3QgbmFtZT0iRW50QXBwLWVqYi1pbXBsIiBkZWZhdWx0PSJidWlsZCIgYmFzZWRpcj0iLi4iIHhtbG5zOmVqYmphcnByb2plY3QzPSJodHRwOi8vd3d3Lm5ldGJlYW5zLm9yZy9ucy9qMmVlLWVqYmphcnByb2plY3QvMyIgeG1sbnM6ZWpiamFycHJvamVjdDI9Imh0dHA6Ly93d3cubmV0YmVhbnMub3JnL25zL2oyZWUtZWpiamFycHJvamVjdC8yIiB4bWxuczplamJqYXJwcm9qZWN0MT0iaHR0cDovL3d3dy5uZXRiZWFucy5vcmcvbnMvajJlZS1lamJqYXJwcm9qZWN0LzEiIHhtbG5zOmpheHdzPSJodHRwOi8vd3d3Lm5ldGJlYW5zLm9yZy9ucy9qYXgtd3MvMSI+CiAgICAgPGltcG9ydCBmaWxlPSJhbnQtZGVwbG95LnhtbCIvPgogICAgIDx0YXJnZXQgbmFtZT0iZGVmYXVsdCIgZGVwZW5kcz0iZGlzdCxqYXZhZG9jIiBkZXNjcmlwdGlvbj0iQnVpbGQgd2hvbGUgcHJvamVjdC4iLz4KLSAgICA8IS0tIAotICAgICAgICAgICAgICAgIElOSVRJQUxJWkFUSU9OIFNFQ1RJT04gCisgICAgPCEtLQorICAgICAgICAgICAgICAgIElOSVRJQUxJWkFUSU9OIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iLXByZS1pbml0Ij4KICAgICAgICAgPCEtLSBFbXB0eSBwbGFjZWhvbGRlciBmb3IgZWFzaWVyIGN1c3RvbWl6YXRpb24uIC0tPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL0VudEFwcC1lamIvc3JjL2phdmEvZW50YXBwL2VqYi9IZWxsb0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL0VudEFwcC1lamIvc3JjL2phdmEvZW50YXBwL2VqYi9IZWxsb0VKQi5qYXZhCmluZGV4IDI3ODhlN2MuLjYzMjFjZGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9FbnRBcHAtZWpiL3NyYy9qYXZhL2VudGFwcC9lamIvSGVsbG9FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvRW50QXBwLWVqYi9zcmMvamF2YS9lbnRhcHAvZWpiL0hlbGxvRUpCLmphdmEKQEAgLTQ5LDUgKzQ5LDUgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGhlbGxvKTsKICAgICAgICAgcmV0dXJuIGhlbGxvOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL0VudEFwcC13YXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL0VudEFwcC13YXIvYnVpbGQueG1sCmluZGV4IGExNTFhYzEuLjAyN2VhMmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9FbnRBcHAtd2FyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvRW50QXBwLXdhci9idWlsZC54bWwKQEAgLTI1LDI3ICsyNSwyNyBAQAogICAgIDxpbXBvcnQgZmlsZT0ibmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPCEtLQogCi0gICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUgCi0gICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQgCi0gICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6IAorICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlCisgICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQKKyAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZToKIAotICAgICAgLXByZS1pbml0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMgCi0gICAgICAtcG9zdC1pbml0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgLXByZS1jb21waWxlOiAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiAKLSAgICAgIC1wb3N0LWNvbXBpbGU6ICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiAKKyAgICAgIC1wcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzCisgICAgICAtcG9zdC1pbml0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzCisgICAgICAtcHJlLWNvbXBpbGU6ICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uCisgICAgICAtcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24KICAgICAgIC1wcmUtY29tcGlsZS1zaW5nbGU6ICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIGZpbGUKICAgICAgIC1wb3N0LWNvbXBpbGUtc2luZ2xlOiAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgZmlsZQogICAgICAgLXByZS1jb21waWxlLXRlc3Q6ICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBKVW5pdCB0ZXN0cwogICAgICAgLXBvc3QtY29tcGlsZS10ZXN0OiAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIEpVbml0IHRlc3RzCiAgICAgICAtcHJlLWNvbXBpbGUtdGVzdC1zaW5nbGU6ICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBKVW5pdCB0ZXN0CiAgICAgICAtcG9zdC1jb21waWxlLXRlc3Qtc2luZ2xlOiBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIEpVdW5pdCB0ZXN0Ci0gICAgICAtcHJlLWRpc3Q6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphciBidWlsZGluZyAKLSAgICAgIC1wb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXIgYnVpbGRpbmcgCi0gICAgICAtcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMgCisgICAgICAtcHJlLWRpc3Q6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphciBidWlsZGluZworICAgICAgLXBvc3QtZGlzdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphciBidWlsZGluZworICAgICAgLXBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzCiAgICAgICAtcHJlLXJ1bi1kZXBsb3k6ICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGRlcGxveWluZwogICAgICAgLXBvc3QtcnVuLWRlcGxveTogICAgICAgICAgY2FsbGVkIGFmdGVyIGRlcGxveWluZwogCi0gICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSJwb3N0LWNvbXBpbGUiPgogICAgICAgICAgICAgPG9iZnVzY2F0ZT4KQEAgLTUzLDIxICs1MywyMSBAQAogICAgICAgICAgICAgPC9vYmZ1c2NhdGU+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQKKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogCiAgICAgT3RoZXIgd2F5IGhvdyB0byBjdXN0b21pemUgdGhlIGJ1aWxkIGlzIGJ5IG92ZXJyaWRpbmcgZXhpc3RpbmcgbWFpbiB0YXJnZXRzLgotICAgIFRoZSB0YXJnZXQgb2YgaW50ZXJlc3QgYXJlOiAKKyAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZToKIAogICAgICAgaW5pdC1tYWNyb2RlZi1qYXZhYzogICAgZGVmaW5lcyBtYWNybyBmb3IgamF2YWMgY29tcGlsYXRpb24KICAgICAgIGluaXQtbWFjcm9kZWYtanVuaXQ6ICAgZGVmaW5lcyBtYWNybyBmb3IganVuaXQgZXhlY3V0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWRlYnVnOiAgICBkZWZpbmVzIG1hY3JvIGZvciBjbGFzcyBkZWJ1Z2dpbmcKICAgICAgIGRvLWRpc3Q6ICAgICAgICAgICAgICAgIGphciBhcmNoaXZlIGJ1aWxkaW5nCi0gICAgICBydW46ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdCAKLSAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbiAKKyAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0CisgICAgICBqYXZhZG9jLWJ1aWxkOiAgICAgICAgICBqYXZhZG9jIGdlbmVyYXRpb24KIAotICAgIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgdGFyZ2V0IGZvciBwcm9qZWN0IGV4ZWN1dGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSI8UFJPSk5BTUU+LWltcGwuamFyIj4KICAgICAgICAgICAgIDxleGVjIGRpcj0iYmluIiBleGVjdXRhYmxlPSJsYXVuY2hlci5leGUiPgpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgTm90aWNlIHRoYXQgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbiAKLSAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZSAKLSAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uCisgICAgY29tcGlsZSB0YXJnZXQgYXMgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgbGlzdCBvZiBhdmFpbGFibGUKKyAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKICAgICAtLT4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9FbnRBcHAtd2FyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9FbnRBcHAtd2FyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbAppbmRleCAxNDRkNjMwLi5jYjA4Mzg1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvRW50QXBwLXdhci9uYnByb2plY3QvYW50LWRlcGxveS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL0VudEFwcC13YXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9InNqc2FzIiBwcm9wZXJ0eT0ic2pzYXMucGFzc3dvcmQuZmlsZSIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4gIDwhLS0gZG8gbm90IGZvcmdldCB0byBkZWxldGUgdGhpcyEgLS0+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkFTX0FETUlOX1BBU1NXT1JEPSR7c2pzYXMucGFzc3dvcmR9IiBmaWxlPSIke3Nqc2FzLnBhc3N3b3JkLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9Ii1wYXJzZS1zdW4td2ViIiBkZXBlbmRzPSItaW5pdC1jbC1kZXBsb3ltZW50LWVudiIgaWY9InN1bi53ZWIucHJlc2VudCI+CiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9InNqc2FzIiBwcm9wZXJ0eT0idGVtcC5zdW4ud2ViIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2RlcGxveS5hbnQuZG9jYmFzZS5kaXJ9L1dFQi1JTkYvc3VuLXdlYi54bWwiIHRvZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9Ii8+CkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8cmVwbGFjZXZhbHVlPjwhW0NEQVRBWy0tPiA8c3VuLXdlYi1hcHBdXT48L3JlcGxhY2V2YWx1ZT4KICAgICAgICAgPC9yZXBsYWNlPgogICAgICAgICA8eG1scHJvcGVydHkgZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9IiB2YWxpZGF0ZT0iZmFsc2UiPgotICAgICAgICA8L3htbHByb3BlcnR5PiAgICAKKyAgICAgICAgPC94bWxwcm9wZXJ0eT4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke3RlbXAuc3VuLndlYn0iLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveS5hbnQuY2xpZW50LnVybCIgdmFsdWU9IiR7c2pzYXMudXJsfSR7c3VuLXdlYi1hcHAuY29udGV4dC1yb290fSIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNDksMTEgKzQ5LDExIEBACiAgICAgICAgIDxta2RpciBkaXI9IiR7c2pzYXMucmVzb3VyY2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNqc2FzLnJlc291cmNlcy5maWxlIiB2YWx1ZT0iJHtzanNhcy5yZXNvdXJjZXMuZGlyfS9NRVRBLUlORi9zdW4tcmVzb3VyY2VzLnhtbCIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdHkiIHZhbHVlPSImbHQ7Ii8+Ci0gICAgICAgICAKKwogICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHR5IiB2YWx1ZT0iJmd0OyIvPgogICAgICAgICA8Y29uY2F0IGRlc3RmaWxlPSIke3Nqc2FzLnJlc291cmNlcy5maWxlfSI+JHtsZWZ0eX0/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8ke3JpZ2h0eX0KLSR7bGVmdHl9IURPQ1RZUEUgcmVzb3VyY2VzIFBVQkxJQyAKLSAgICItLy9TdW4gTWljcm9zeXN0ZW1zIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOS4wIFJlc291cmNlIERlZmluaXRpb25zIC8vRU4iIAorJHtsZWZ0eX0hRE9DVFlQRSByZXNvdXJjZXMgUFVCTElDCisgICAiLS8vU3VuIE1pY3Jvc3lzdGVtcyBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDkuMCBSZXNvdXJjZSBEZWZpbml0aW9ucyAvL0VOIgogICAgIiR7c2pzYXMucm9vdH0vbGliL2R0ZHMvc3VuLXJlc291cmNlc18xXzIuZHRkIiR7cmlnaHR5fQogJHtsZWZ0eX1yZXNvdXJjZXMke3JpZ2h0eX0KICR7bGVmdHl9L3Jlc291cmNlcyR7cmlnaHR5fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL0VudEFwcC13YXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL0VudEFwcC13YXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCmluZGV4IDNiNGE3Y2IuLjdmZTk3YjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9FbnRBcHAtd2FyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvRW50QXBwLXdhci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKQEAgLTY2Miw3ICs2NjIsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iamF2YWRvYyIgZGVwZW5kcz0iaW5pdCxqYXZhZG9jLWJ1aWxkLGphdmFkb2MtYnJvd3NlIiBkZXNjcmlwdGlvbj0iQnVpbGQgSmF2YWRvYy4iLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBDT01QSUxBVElPTiBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IG5hbWU9Ii1wcmUtcHJlLWNvbXBpbGUtdGVzdCIgaWY9ImhhdmUudGVzdHMiIGRlcGVuZHM9ImluaXQsY29tcGlsZSI+CkBAIC03MDQsNyArNzA0LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtdGVzdC1zaW5nbGUiIGRlcGVuZHM9ImluaXQsY29tcGlsZSwtcHJlLXByZS1jb21waWxlLXRlc3QsLXByZS1jb21waWxlLXRlc3Qtc2luZ2xlLC1kby1jb21waWxlLXRlc3Qtc2luZ2xlLC1wb3N0LWNvbXBpbGUtdGVzdC1zaW5nbGUiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBFWEVDVVRJT04gU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBuYW1lPSItcHJlLXRlc3QtcnVuIiBpZj0iaGF2ZS50ZXN0cyIgZGVwZW5kcz0iaW5pdCI+CkBAIC03MzEsNyArNzMxLDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9InRlc3Qtc2luZ2xlIiBkZXBlbmRzPSJpbml0LGNvbXBpbGUtdGVzdC1zaW5nbGUsLXByZS10ZXN0LXJ1bi1zaW5nbGUsLWRvLXRlc3QtcnVuLXNpbmdsZSwtcG9zdC10ZXN0LXJ1bi1zaW5nbGUiIGRlc2NyaXB0aW9uPSJSdW4gc2luZ2xlIHVuaXQgdGVzdC4iLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBERUJVR0dJTkcgU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBuYW1lPSItZGVidWctc3RhcnQtZGVidWdnZWUtdGVzdCIgaWY9ImhhdmUudGVzdHMiIGRlcGVuZHM9ImluaXQsY29tcGlsZS10ZXN0Ij4KQEAgLTc0Nyw3ICs3NDcsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iZGVidWctZml4LXRlc3QiIGlmPSJuZXRiZWFucy5ob21lIiBkZXBlbmRzPSJpbml0LC1wcmUtZGVidWctZml4LC1kby1kZWJ1Zy1maXgtdGVzdCIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIENMRUFOVVAgU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJkZXBzLWNsZWFuIiBkZXBlbmRzPSJpbml0IiBpZj0ibm8uZGlzdC5lYXIuZGlyIiB1bmxlc3M9Im5vLmRlcHMiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL0VudEFwcC13YXIvc3JjL2phdmEvZW50YXBwL3dlYi9IZWxsb1dlYi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL0VudEFwcC13YXIvc3JjL2phdmEvZW50YXBwL3dlYi9IZWxsb1dlYi5qYXZhCmluZGV4IGMxZWEwNGIuLjFhZmVlZjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9FbnRBcHAtd2FyL3NyYy9qYXZhL2VudGFwcC93ZWIvSGVsbG9XZWIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvRW50QXBwLXdhci9zcmMvamF2YS9lbnRhcHAvd2ViL0hlbGxvV2ViLmphdmEKQEAgLTQ2LDUgKzQ2LDUgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGhlbGxvKTsKICAgICAgICAgcmV0dXJuIGhlbGxvOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9idWlsZC54bWwKaW5kZXggNzY4ZTJjMy4uNzE1Y2NmZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvYnVpbGQueG1sCkBAIC0yNSwyMSArMjUsMjEgQEAKICAgICA8aW1wb3J0IGZpbGU9Im5icHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDwhLS0KIAotICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlIAotICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkIAotICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOiAKKyAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZQorICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkCisgICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6CiAKLSAgICAgIHByZS1pbml0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMgCi0gICAgICBwb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMgCi0gICAgICBwcmUtY29tcGlsZTogICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gCi0gICAgICBwb3N0LWNvbXBpbGU6ICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiAKLSAgICAgIHByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXIgYnVpbGRpbmcgCi0gICAgICBwb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXIgYnVpbGRpbmcgCi0gICAgICBwb3N0LWNsZWFuOiAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBjbGVhbmluZyBidWlsZCBwcm9kdWN0cyAKKyAgICAgIHByZS1pbml0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIHBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgcHJlLWNvbXBpbGU6ICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uCisgICAgICBwb3N0LWNvbXBpbGU6ICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbgorICAgICAgcHJlLWRpc3Q6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphciBidWlsZGluZworICAgICAgcG9zdC1kaXN0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamFyIGJ1aWxkaW5nCisgICAgICBwb3N0LWNsZWFuOiAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBjbGVhbmluZyBidWlsZCBwcm9kdWN0cwogICAgICAgcHJlLXJ1bi1kZXBsb3k6ICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGRlcGxveWluZwogICAgICAgcG9zdC1ydW4tZGVwbG95OiAgICAgICAgICBjYWxsZWQgYWZ0ZXIgZGVwbG95aW5nCiAKLSAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlIAorICAgIEV4YW1wbGUgb2YgcGx1Z2luZyBhbiBvYmZ1c2NhdG9yIGFmdGVyIHRoZSBjb21waWxhdGlvbiBjb3VsZCBsb29rIGxpa2UKIAogICAgICAgICA8dGFyZ2V0IG5hbWU9InBvc3QtY29tcGlsZSI+CiAgICAgICAgICAgICA8b2JmdXNjYXRlPgpAQCAtNDcsMTcgKzQ3LDE3IEBACiAgICAgICAgICAgICA8L29iZnVzY2F0ZT4KICAgICAgICAgPC90YXJnZXQ+CiAKLSAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQgCi0gICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuIAorICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZAorICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLgogCiAKICAgICBPdGhlciB3YXkgaG93IHRvIGN1c3RvbWl6ZSB0aGUgYnVpbGQgaXMgYnkgb3ZlcnJpZGluZyBleGlzdGluZyBtYWluIHRhcmdldHMuCi0gICAgVGhlIHRhcmdldCBvZiBpbnRlcmVzdCBhcmU6IAorICAgIFRoZSB0YXJnZXQgb2YgaW50ZXJlc3QgYXJlOgogCiAgICAgICBkby1kaXN0OiAgICAgICAgICAgICAgICBqYXIgYXJjaGl2ZSBidWlsZGluZwotICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHByb2plY3QgCisgICAgICBydW46ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdAogCi0gICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgdGhlIHRhcmdldCBmb3IgcHJvamVjdCBleGVjdXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9IjxQUk9KTkFNRT4taW1wbC5qYXIiPgogICAgICAgICAgICAgPGV4ZWMgZGlyPSJiaW4iIGV4ZWN1dGFibGU9ImxhdW5jaGVyLmV4ZSI+CkBAIC02NSwxMCArNjUsMTAgQEAKICAgICAgICAgICAgIDwvZXhlYz4KICAgICAgICAgPC90YXJnZXQ+CiAKLSAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uIAotICAgIGNvbXBpbGUgdGFyZ2V0IGFzIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGxpc3Qgb2YgYXZhaWxhYmxlIAotICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4gCi0gICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuIAorICAgIE5vdGljZSB0aGF0IG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gamFyIHRhcmdldCBhbmQgbm90IG9ubHkgb24KKyAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZQorICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4KKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogICAgIC0tPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL25icHJvamVjdC9hbnQtZGVwbG95LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9uYnByb2plY3QvYW50LWRlcGxveS54bWwKaW5kZXggMTQ0ZDYzMC4uY2IwODM4NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL25icHJvamVjdC9hbnQtZGVwbG95LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9InNqc2FzIiBwcm9wZXJ0eT0ic2pzYXMucGFzc3dvcmQuZmlsZSIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4gIDwhLS0gZG8gbm90IGZvcmdldCB0byBkZWxldGUgdGhpcyEgLS0+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkFTX0FETUlOX1BBU1NXT1JEPSR7c2pzYXMucGFzc3dvcmR9IiBmaWxlPSIke3Nqc2FzLnBhc3N3b3JkLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9Ii1wYXJzZS1zdW4td2ViIiBkZXBlbmRzPSItaW5pdC1jbC1kZXBsb3ltZW50LWVudiIgaWY9InN1bi53ZWIucHJlc2VudCI+CiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9InNqc2FzIiBwcm9wZXJ0eT0idGVtcC5zdW4ud2ViIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2RlcGxveS5hbnQuZG9jYmFzZS5kaXJ9L1dFQi1JTkYvc3VuLXdlYi54bWwiIHRvZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9Ii8+CkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8cmVwbGFjZXZhbHVlPjwhW0NEQVRBWy0tPiA8c3VuLXdlYi1hcHBdXT48L3JlcGxhY2V2YWx1ZT4KICAgICAgICAgPC9yZXBsYWNlPgogICAgICAgICA8eG1scHJvcGVydHkgZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9IiB2YWxpZGF0ZT0iZmFsc2UiPgotICAgICAgICA8L3htbHByb3BlcnR5PiAgICAKKyAgICAgICAgPC94bWxwcm9wZXJ0eT4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke3RlbXAuc3VuLndlYn0iLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveS5hbnQuY2xpZW50LnVybCIgdmFsdWU9IiR7c2pzYXMudXJsfSR7c3VuLXdlYi1hcHAuY29udGV4dC1yb290fSIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNDksMTEgKzQ5LDExIEBACiAgICAgICAgIDxta2RpciBkaXI9IiR7c2pzYXMucmVzb3VyY2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNqc2FzLnJlc291cmNlcy5maWxlIiB2YWx1ZT0iJHtzanNhcy5yZXNvdXJjZXMuZGlyfS9NRVRBLUlORi9zdW4tcmVzb3VyY2VzLnhtbCIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdHkiIHZhbHVlPSImbHQ7Ii8+Ci0gICAgICAgICAKKwogICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHR5IiB2YWx1ZT0iJmd0OyIvPgogICAgICAgICA8Y29uY2F0IGRlc3RmaWxlPSIke3Nqc2FzLnJlc291cmNlcy5maWxlfSI+JHtsZWZ0eX0/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8ke3JpZ2h0eX0KLSR7bGVmdHl9IURPQ1RZUEUgcmVzb3VyY2VzIFBVQkxJQyAKLSAgICItLy9TdW4gTWljcm9zeXN0ZW1zIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOS4wIFJlc291cmNlIERlZmluaXRpb25zIC8vRU4iIAorJHtsZWZ0eX0hRE9DVFlQRSByZXNvdXJjZXMgUFVCTElDCisgICAiLS8vU3VuIE1pY3Jvc3lzdGVtcyBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDkuMCBSZXNvdXJjZSBEZWZpbml0aW9ucyAvL0VOIgogICAgIiR7c2pzYXMucm9vdH0vbGliL2R0ZHMvc3VuLXJlc291cmNlc18xXzIuZHRkIiR7cmlnaHR5fQogJHtsZWZ0eX1yZXNvdXJjZXMke3JpZ2h0eX0KICR7bGVmdHl9L3Jlc291cmNlcyR7cmlnaHR5fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL25icHJvamVjdC9idWlsZC1pbXBsLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKaW5kZXggY2Q1YzdjZi4uNjkxN2U1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL25icHJvamVjdC9idWlsZC1pbXBsLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCkBAIC0zNSw4ICszNSw4IEBACiA8cHJvamVjdCBuYW1lPSJFbnRBcHAtaW1wbCIgZGVmYXVsdD0iYnVpbGQiIGJhc2VkaXI9Ii4uIiB4bWxuczplYXIyPSJodHRwOi8vd3d3Lm5ldGJlYW5zLm9yZy9ucy9qMmVlLWVhcnByb2plY3QvMiI+CiAgICAgPGltcG9ydCBmaWxlPSJhbnQtZGVwbG95LnhtbCIvPgogICAgIDx0YXJnZXQgbmFtZT0iZGVmYXVsdCIgZGVwZW5kcz0iZGlzdCIgZGVzY3JpcHRpb249IkJ1aWxkIHdob2xlIHByb2plY3QuIi8+Ci0gICAgPCEtLSAKLSAgICBJTklUSUFMSVpBVElPTiBTRUNUSU9OIAorICAgIDwhLS0KKyAgICBJTklUSUFMSVpBVElPTiBTRUNUSU9OCiAgICAgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJwcmUtaW5pdCI+CiAgICAgICAgIDwhLS0gRW1wdHkgcGxhY2Vob2xkZXIgZm9yIGVhc2llciBjdXN0b21pemF0aW9uLiAtLT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA2OGY4NGUuLjFkZmIwN2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiAgIERvbid0IHJlbmFtZSBqZGsuaG9tZSBhcyBqYXZhLmhvbWUKIGpkay5ob21lPSR7ZW52LkpBVkFfSE9NRX0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL2J1aWxkLnhtbAppbmRleCBkNWIwZjQ3Li44MTAyYzc4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvYnVpbGQueG1sCkBAIC0xOSwxNjggKzE5LDE2OCBAQAogCiA8cHJvamVjdCBuYW1lPSJQbGFpbiBFSkIgaW52b2NhdGlvbiBmcm9tIEpCSSIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotCTxwcm9wZXJ0eSBlbnZpcm9ubWVudD0iZW52Ii8+CisgICAgPHByb3BlcnR5IGVudmlyb25tZW50PSJlbnYiLz4KICAgICA8cHJvcGVydHkgZmlsZT0iYnVpbGQucHJvcGVydGllcyIvPgotICAgCi0gICAJPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLCBzZXR1cCwgcnVudGVzdCwgdW5kZXBsb3kiPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuIi8+Ci0JPC90YXJnZXQ+CisKKyAgICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sIHNldHVwLCBydW50ZXN0LCB1bmRlcGxveSI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4iLz4KKyAgICA8L3RhcmdldD4KIAogCi0JPHRhcmdldCBuYW1lPSJzZXR1cCI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1lbnRhcHAiLz4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ3c2dlbi1zdW4taHR0cC1iaW5kaW5nIi8+Ci0JCTxhbnRjYWxsIHRhcmdldD0iYnVpbGQtc2VydmljZWFzc2VtYmx5Ii8+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXNlcnZpY2Vhc3NlbWJseSIvPgotCTwvdGFyZ2V0PgkKKyAgICA8dGFyZ2V0IG5hbWU9InNldHVwIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWVudGFwcCIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndzZ2VuLXN1bi1odHRwLWJpbmRpbmciLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1zZXJ2aWNlYXNzZW1ibHkiLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktc2VydmljZWFzc2VtYmx5Ii8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiPgorICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCI+CiAKLQkJPCEtLSBCdWlsZCB0aGUgY2xpZW50IC0tPgotCQk8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi93c2ltcG9ydCI+Ci0JCQk8YXJnIGxpbmU9Ii1kIi8+Ci0JCQk8YXJnIGxpbmU9ImJ1aWxkIi8+Ci0JCQk8YXJnIGxpbmU9Ii1rZWVwIi8+Ci0JCQk8YXJnIGxpbmU9InNlcnZpY2UtYXNzZW1ibHkvc3VuLWh0dHAtYmluZGluZy8ke2VqYi53ZWJzZXJ2aWNlLm5hbWV9U2VydmljZS53c2RsIi8+Ci0JCTwvZXhlYz4KLQkJPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3NpbXBvcnQiPgotCQkJPGFyZyBsaW5lPSItZCIvPgotCQkJPGFyZyBsaW5lPSJidWlsZCIvPgotCQkJPGFyZyBsaW5lPSIta2VlcCIvPgotCQkJPGFyZyBsaW5lPSJzZXJ2aWNlLWFzc2VtYmx5L3N1bi1odHRwLWJpbmRpbmcvJHt3ZWIud2Vic2VydmljZS5uYW1lfVNlcnZpY2Uud3NkbCIvPgotCQk8L2V4ZWM+CisgICAgICAgIDwhLS0gQnVpbGQgdGhlIGNsaWVudCAtLT4KKyAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3NpbXBvcnQiPgorICAgICAgICAgICAgPGFyZyBsaW5lPSItZCIvPgorICAgICAgICAgICAgPGFyZyBsaW5lPSJidWlsZCIvPgorICAgICAgICAgICAgPGFyZyBsaW5lPSIta2VlcCIvPgorICAgICAgICAgICAgPGFyZyBsaW5lPSJzZXJ2aWNlLWFzc2VtYmx5L3N1bi1odHRwLWJpbmRpbmcvJHtlamIud2Vic2VydmljZS5uYW1lfVNlcnZpY2Uud3NkbCIvPgorICAgICAgICA8L2V4ZWM+CisgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzaW1wb3J0Ij4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iLWQiLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iYnVpbGQiLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iLWtlZXAiLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0ic2VydmljZS1hc3NlbWJseS9zdW4taHR0cC1iaW5kaW5nLyR7d2ViLndlYnNlcnZpY2UubmFtZX1TZXJ2aWNlLndzZGwiLz4KKyAgICAgICAgPC9leGVjPgogCi0JCTxqYXZhYyBzcmNkaXI9ImNsaWVudCIgaW5jbHVkZXM9IkNsaWVudC5qYXZhIiBkZXN0ZGlyPSJidWlsZCIgY2xhc3NwYXRoPSIke2NsaWVudC5jbGFzc3BhdGh9IiBkZWJ1Zz0idHJ1ZSIvPgorICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGluY2x1ZGVzPSJDbGllbnQuamF2YSIgZGVzdGRpcj0iYnVpbGQiIGNsYXNzcGF0aD0iJHtjbGllbnQuY2xhc3NwYXRofSIgZGVidWc9InRydWUiLz4KIAotCQk8amF2YSBjbGFzc25hbWU9ImNsaWVudC5DbGllbnQiIGNsYXNzcGF0aD0iJHtjbGllbnQuY2xhc3NwYXRofSIgZm9yaz0idHJ1ZSIvPgotCi0JPC90YXJnZXQ+Ci0KLSAgIAk8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KLQotCQk8ZXhlYyBkaXI9IiR7ZW50LmFwcH0iIGV4ZWN1dGFibGU9IiR7ZW52LkFOVF9IT01FfS9iaW4vYW50Ij4KLQkJCTxhcmcgbGluZT0iY2xlYW4iLz4KLQkJPC9leGVjPgotCi0JCTxkZWxldGUgZGlyPSJidWlsZCIvPgotCi0JCTxkZWxldGUgaW5jbHVkZWVtcHR5ZGlycz0idHJ1ZSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KLQkgICAJCTxmaWxlc2V0IGRpcj0ic2VydmljZS1hc3NlbWJseS9zdW4taHR0cC1iaW5kaW5nIiBpbmNsdWRlcz0iKi53c2RsLCAqLnhzZCIvPgotCSAgIAkJPGZpbGVzZXQgZGlyPSJzZXJ2aWNlLWFzc2VtYmx5L3N1bi1odHRwLWJpbmRpbmcvZW50YXBwIi8+Ci0JCTwvZGVsZXRlPgotCi0JPC90YXJnZXQ+CQotCi0gICAJPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktc2VydmljZWFzc2VtYmx5Ii8+Ci0JPC90YXJnZXQ+Ci0KLQk8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtZW50YXBwIj4KLQkJPGV4ZWMgZGlyPSIke2VudC5hcHB9IiBleGVjdXRhYmxlPSIke2Vudi5BTlRfSE9NRX0vYmluL2FudCIvPgotCQk8IS0tCi0JCTxhbnQgZGlyPSIke2VudC5hcHB9Ii8+Ci0JCS0tPgotCi0JCTwhLS0gQWRkIGpiaS54bWwgZmlsZSB0byB0aGUgLmVhciBmaWxlIC0tPgotCQk8amFyIGRlc3RmaWxlPSIke2VudC5hcHB9L2Rpc3QvRW50QXBwLmVhciIKLQkJCSBiYXNlZGlyPSJzZXJ2aWNlLWFzc2VtYmx5L3N1bi1qYXZhZWUtZW5naW5lIgotCQkJIGluY2x1ZGVzPSJNRVRBLUlORi9qYmkueG1sIgotCQkJIHVwZGF0ZT0idHJ1ZSIKLQkJLz4KLQk8L3RhcmdldD4KLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9IndzZ2VuLXN1bi1odHRwLWJpbmRpbmciPgotCQk8IS0tIGdlbmVyYXRlIFdTREwgZm9yIHRoZSBFSkIgd2ViIHNlcnZpY2UgLS0+Ci0JCTxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzZ2VuIj4KLQkJCTxhcmcgbGluZT0iLWNwIi8+Ci0JCQk8YXJnIGxpbmU9IiR7ZW50LmFwcH0vJHtlamIubW9kdWxlfS9idWlsZC9lYXItbW9kdWxlIi8+Ci0JCQk8YXJnIGxpbmU9IiR7ZWpiLndlYnNlcnZpY2UuY2xhc3N9Ii8+Ci0JCQk8YXJnIGxpbmU9Ii13c2RsIi8+Ci0JCQk8YXJnIGxpbmU9Ii1kIi8+Ci0JCQk8YXJnIGxpbmU9InNlcnZpY2UtYXNzZW1ibHkvc3VuLWh0dHAtYmluZGluZyIvPgotCQk8L2V4ZWM+Ci0JCTwhLS0gUmVwbGFjZSBSRVBMQUNFX1dJVEhfQUNUVUFMX1VSTCB3aXRoIHNvbWUgdmFsdWUgLS0+Ci0JCTxyZXBsYWNlIGZpbGU9InNlcnZpY2UtYXNzZW1ibHkvc3VuLWh0dHAtYmluZGluZy8ke2VqYi53ZWJzZXJ2aWNlLm5hbWV9U2VydmljZS53c2RsIj4KLQkJCTxyZXBsYWNldG9rZW4+UkVQTEFDRV9XSVRIX0FDVFVBTF9VUkw8L3JlcGxhY2V0b2tlbj4KLQkJCTxyZXBsYWNldmFsdWU+aHR0cDovL2xvY2FsaG9zdDoxMjAwMC9lbnRhcHAvZWpiL0hlbGxvRUpCPC9yZXBsYWNldmFsdWU+Ci0JCTwvcmVwbGFjZT4KLQotCQk8IS0tIGdlbmVyYXRlIFdTREwgZm9yIHRoZSBTZXJ2bGV0IHdlYiBzZXJ2aWNlIC0tPgotCQk8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi93c2dlbiI+Ci0JCQk8YXJnIGxpbmU9Ii1jcCIvPgotCQkJPGFyZyBsaW5lPSIke2VudC5hcHB9LyR7d2ViLm1vZHVsZX0vYnVpbGQvZWFyLW1vZHVsZS9XRUItSU5GL2NsYXNzZXMiLz4KLQkJCTxhcmcgbGluZT0iJHt3ZWIud2Vic2VydmljZS5jbGFzc30iLz4KLQkJCTxhcmcgbGluZT0iLXdzZGwiLz4KLQkJCTxhcmcgbGluZT0iLWQiLz4KLQkJCTxhcmcgbGluZT0ic2VydmljZS1hc3NlbWJseS9zdW4taHR0cC1iaW5kaW5nIi8+Ci0JCTwvZXhlYz4KLQkJPCEtLSBSZXBsYWNlIFJFUExBQ0VfV0lUSF9BQ1RVQUxfVVJMIHdpdGggc29tZSB2YWx1ZSAtLT4KLQkJPHJlcGxhY2UgZmlsZT0ic2VydmljZS1hc3NlbWJseS9zdW4taHR0cC1iaW5kaW5nLyR7d2ViLndlYnNlcnZpY2UubmFtZX1TZXJ2aWNlLndzZGwiPgotCQkJPHJlcGxhY2V0b2tlbj5SRVBMQUNFX1dJVEhfQUNUVUFMX1VSTDwvcmVwbGFjZXRva2VuPgotCQkJPHJlcGxhY2V2YWx1ZT5odHRwOi8vbG9jYWxob3N0OjEyMDAwL2VudGFwcC93ZWIvSGVsbG9FSkI8L3JlcGxhY2V2YWx1ZT4KLQkJPC9yZXBsYWNlPgorICAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5DbGllbnQiIGNsYXNzcGF0aD0iJHtjbGllbnQuY2xhc3NwYXRofSIgZm9yaz0idHJ1ZSIvPgogCiAgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkLXNlcnZpY2Vhc3NlbWJseSI+Ci0JCTxta2RpciBkaXI9ImJ1aWxkIi8+CisgICAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAKLQkJPCEtLSBCdWlsZCB0aGUgc2VydmljZSB1bml0ICYgYXNzZW1ibHkgamFycyAtLT4KLQkJPGphciBkZXN0ZmlsZT0iYnVpbGQvc3VuLWh0dHAtYmluZGluZy5qYXIiCi0JCQkgYmFzZWRpcj0ic2VydmljZS1hc3NlbWJseS9zdW4taHR0cC1iaW5kaW5nIgotCQkJIGluY2x1ZGVzPSIqLndzZGwsICoueHNkLCBNRVRBLUlORi9qYmkueG1sIgotCQkvPgotCQk8amFyIGRlc3RmaWxlPSJidWlsZC9FbnRBcHAuemlwIgotCQkJIGJhc2VkaXI9ImJ1aWxkIgotCQkJIGluY2x1ZGVzPSJzdW4taHR0cC1iaW5kaW5nLmphciIKLQkJLz4KLQkJPGphciBkZXN0ZmlsZT0iYnVpbGQvRW50QXBwLnppcCIKLQkJCSB1cGRhdGU9InRydWUiCi0JCQkgYmFzZWRpcj0iJHtlbnQuYXBwfS9kaXN0IgotCQkJIGluY2x1ZGVzPSJFbnRBcHAuZWFyIgotCQkvPgotCQk8amFyIGRlc3RmaWxlPSJidWlsZC9FbnRBcHAuemlwIgotCQkJIGJhc2VkaXI9InNlcnZpY2UtYXNzZW1ibHkiCi0JCQkgaW5jbHVkZXM9Ik1FVEEtSU5GL2piaS54bWwiCi0JCQkgdXBkYXRlPSJ0cnVlIgotCQkvPgotCTwvdGFyZ2V0PgorICAgICAgICA8ZXhlYyBkaXI9IiR7ZW50LmFwcH0iIGV4ZWN1dGFibGU9IiR7ZW52LkFOVF9IT01FfS9iaW4vYW50Ij4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iY2xlYW4iLz4KKyAgICAgICAgPC9leGVjPgogCi0JPHRhcmdldCBuYW1lPSJkZXBsb3ktc2VydmljZWFzc2VtYmx5Ij4KLQkJPGV4ZWMgZXhlY3V0YWJsZT0iJHthc2FkbWluLmNvbW1hbmR9Ij4KLQkJCTxhcmcgbGluZT0iZGVwbG95LWpiaS1zZXJ2aWNlLWFzc2VtYmx5Ii8+Ci0JCQk8YXJnIGxpbmU9ImJ1aWxkL0VudEFwcC56aXAiLz4KLQkJPC9leGVjPgotCQk8ZXhlYyBleGVjdXRhYmxlPSIke2FzYWRtaW4uY29tbWFuZH0iPgotCQkJPGFyZyBsaW5lPSJzdGFydC1qYmktc2VydmljZS1hc3NlbWJseSIvPgotCQkJPGFyZyBsaW5lPSJFbnRBcHAiLz4KLQkJPC9leGVjPgotCTwvdGFyZ2V0PgotICAgIAotCTx0YXJnZXQgbmFtZT0idW5kZXBsb3ktc2VydmljZWFzc2VtYmx5Ij4KLQkJPGV4ZWMgZXhlY3V0YWJsZT0iJHthc2FkbWluLmNvbW1hbmR9Ij4KLQkJCTxhcmcgbGluZT0ic3RvcC1qYmktc2VydmljZS1hc3NlbWJseSIvPgotCQkJPGFyZyBsaW5lPSJFbnRBcHAiLz4KLQkJPC9leGVjPgotCQk8ZXhlYyBleGVjdXRhYmxlPSIke2FzYWRtaW4uY29tbWFuZH0iPgotCQkJPGFyZyBsaW5lPSJzaHV0LWRvd24tamJpLXNlcnZpY2UtYXNzZW1ibHkiLz4KLQkJCTxhcmcgbGluZT0iRW50QXBwIi8+Ci0JCTwvZXhlYz4KLQkJPGV4ZWMgZXhlY3V0YWJsZT0iJHthc2FkbWluLmNvbW1hbmR9Ij4KLQkJCTxhcmcgbGluZT0idW5kZXBsb3ktamJpLXNlcnZpY2UtYXNzZW1ibHkiLz4KLQkJCTxhcmcgbGluZT0iRW50QXBwIi8+Ci0JCTwvZXhlYz4KLQk8L3RhcmdldD4KKyAgICAgICAgPGRlbGV0ZSBkaXI9ImJ1aWxkIi8+CiAKLQk8dGFyZ2V0IG5hbWU9InJlc3RhcnQtZWpibW9kdWxlIj4KLQkJPGV4ZWMgZXhlY3V0YWJsZT0iJHthc2FkbWluLmNvbW1hbmR9Ij4KLQkJCTxhcmcgbGluZT0iZGlzYWJsZSIvPgotCQkJPGFyZyBsaW5lPSIke2VqYi5tb2R1bGV9Ii8+Ci0JCTwvZXhlYz4KLQkJPGV4ZWMgZXhlY3V0YWJsZT0iJHthc2FkbWluLmNvbW1hbmR9Ij4KLQkJCTxhcmcgbGluZT0iZW5hYmxlIi8+Ci0JCQk8YXJnIGxpbmU9IiR7ZWpiLm1vZHVsZX0iLz4KLQkJPC9leGVjPgotCTwvdGFyZ2V0PgorICAgICAgICA8ZGVsZXRlIGluY2x1ZGVlbXB0eWRpcnM9InRydWUiIGZhaWxvbmVycm9yPSJmYWxzZSI+CisgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9InNlcnZpY2UtYXNzZW1ibHkvc3VuLWh0dHAtYmluZGluZyIgaW5jbHVkZXM9Iioud3NkbCwgKi54c2QiLz4KKyAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0ic2VydmljZS1hc3NlbWJseS9zdW4taHR0cC1iaW5kaW5nL2VudGFwcCIvPgorICAgICAgICA8L2RlbGV0ZT4KKworICAgIDwvdGFyZ2V0PgorCisgICAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktc2VydmljZWFzc2VtYmx5Ii8+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtZW50YXBwIj4KKyAgICAgICAgPGV4ZWMgZGlyPSIke2VudC5hcHB9IiBleGVjdXRhYmxlPSIke2Vudi5BTlRfSE9NRX0vYmluL2FudCIvPgorICAgICAgICA8IS0tCisgICAgICAgIDxhbnQgZGlyPSIke2VudC5hcHB9Ii8+CisgICAgICAgIC0tPgorCisgICAgICAgIDwhLS0gQWRkIGpiaS54bWwgZmlsZSB0byB0aGUgLmVhciBmaWxlIC0tPgorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2VudC5hcHB9L2Rpc3QvRW50QXBwLmVhciIKKyAgICAgICAgICAgICBiYXNlZGlyPSJzZXJ2aWNlLWFzc2VtYmx5L3N1bi1qYXZhZWUtZW5naW5lIgorICAgICAgICAgICAgIGluY2x1ZGVzPSJNRVRBLUlORi9qYmkueG1sIgorICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIKKyAgICAgICAgLz4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0id3NnZW4tc3VuLWh0dHAtYmluZGluZyI+CisgICAgICAgIDwhLS0gZ2VuZXJhdGUgV1NETCBmb3IgdGhlIEVKQiB3ZWIgc2VydmljZSAtLT4KKyAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3NnZW4iPgorICAgICAgICAgICAgPGFyZyBsaW5lPSItY3AiLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iJHtlbnQuYXBwfS8ke2VqYi5tb2R1bGV9L2J1aWxkL2Vhci1tb2R1bGUiLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iJHtlamIud2Vic2VydmljZS5jbGFzc30iLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iLXdzZGwiLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iLWQiLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0ic2VydmljZS1hc3NlbWJseS9zdW4taHR0cC1iaW5kaW5nIi8+CisgICAgICAgIDwvZXhlYz4KKyAgICAgICAgPCEtLSBSZXBsYWNlIFJFUExBQ0VfV0lUSF9BQ1RVQUxfVVJMIHdpdGggc29tZSB2YWx1ZSAtLT4KKyAgICAgICAgPHJlcGxhY2UgZmlsZT0ic2VydmljZS1hc3NlbWJseS9zdW4taHR0cC1iaW5kaW5nLyR7ZWpiLndlYnNlcnZpY2UubmFtZX1TZXJ2aWNlLndzZGwiPgorICAgICAgICAgICAgPHJlcGxhY2V0b2tlbj5SRVBMQUNFX1dJVEhfQUNUVUFMX1VSTDwvcmVwbGFjZXRva2VuPgorICAgICAgICAgICAgPHJlcGxhY2V2YWx1ZT5odHRwOi8vbG9jYWxob3N0OjEyMDAwL2VudGFwcC9lamIvSGVsbG9FSkI8L3JlcGxhY2V2YWx1ZT4KKyAgICAgICAgPC9yZXBsYWNlPgorCisgICAgICAgIDwhLS0gZ2VuZXJhdGUgV1NETCBmb3IgdGhlIFNlcnZsZXQgd2ViIHNlcnZpY2UgLS0+CisgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzZ2VuIj4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iLWNwIi8+CisgICAgICAgICAgICA8YXJnIGxpbmU9IiR7ZW50LmFwcH0vJHt3ZWIubW9kdWxlfS9idWlsZC9lYXItbW9kdWxlL1dFQi1JTkYvY2xhc3NlcyIvPgorICAgICAgICAgICAgPGFyZyBsaW5lPSIke3dlYi53ZWJzZXJ2aWNlLmNsYXNzfSIvPgorICAgICAgICAgICAgPGFyZyBsaW5lPSItd3NkbCIvPgorICAgICAgICAgICAgPGFyZyBsaW5lPSItZCIvPgorICAgICAgICAgICAgPGFyZyBsaW5lPSJzZXJ2aWNlLWFzc2VtYmx5L3N1bi1odHRwLWJpbmRpbmciLz4KKyAgICAgICAgPC9leGVjPgorICAgICAgICA8IS0tIFJlcGxhY2UgUkVQTEFDRV9XSVRIX0FDVFVBTF9VUkwgd2l0aCBzb21lIHZhbHVlIC0tPgorICAgICAgICA8cmVwbGFjZSBmaWxlPSJzZXJ2aWNlLWFzc2VtYmx5L3N1bi1odHRwLWJpbmRpbmcvJHt3ZWIud2Vic2VydmljZS5uYW1lfVNlcnZpY2Uud3NkbCI+CisgICAgICAgICAgICA8cmVwbGFjZXRva2VuPlJFUExBQ0VfV0lUSF9BQ1RVQUxfVVJMPC9yZXBsYWNldG9rZW4+CisgICAgICAgICAgICA8cmVwbGFjZXZhbHVlPmh0dHA6Ly9sb2NhbGhvc3Q6MTIwMDAvZW50YXBwL3dlYi9IZWxsb0VKQjwvcmVwbGFjZXZhbHVlPgorICAgICAgICA8L3JlcGxhY2U+CisKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtc2VydmljZWFzc2VtYmx5Ij4KKyAgICAgICAgPG1rZGlyIGRpcj0iYnVpbGQiLz4KKworICAgICAgICA8IS0tIEJ1aWxkIHRoZSBzZXJ2aWNlIHVuaXQgJiBhc3NlbWJseSBqYXJzIC0tPgorICAgICAgICA8amFyIGRlc3RmaWxlPSJidWlsZC9zdW4taHR0cC1iaW5kaW5nLmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSJzZXJ2aWNlLWFzc2VtYmx5L3N1bi1odHRwLWJpbmRpbmciCisgICAgICAgICAgICAgaW5jbHVkZXM9Iioud3NkbCwgKi54c2QsIE1FVEEtSU5GL2piaS54bWwiCisgICAgICAgIC8+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9ImJ1aWxkL0VudEFwcC56aXAiCisgICAgICAgICAgICAgYmFzZWRpcj0iYnVpbGQiCisgICAgICAgICAgICAgaW5jbHVkZXM9InN1bi1odHRwLWJpbmRpbmcuamFyIgorICAgICAgICAvPgorICAgICAgICA8amFyIGRlc3RmaWxlPSJidWlsZC9FbnRBcHAuemlwIgorICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2VudC5hcHB9L2Rpc3QiCisgICAgICAgICAgICAgaW5jbHVkZXM9IkVudEFwcC5lYXIiCisgICAgICAgIC8+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9ImJ1aWxkL0VudEFwcC56aXAiCisgICAgICAgICAgICAgYmFzZWRpcj0ic2VydmljZS1hc3NlbWJseSIKKyAgICAgICAgICAgICBpbmNsdWRlcz0iTUVUQS1JTkYvamJpLnhtbCIKKyAgICAgICAgICAgICB1cGRhdGU9InRydWUiCisgICAgICAgIC8+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS1zZXJ2aWNlYXNzZW1ibHkiPgorICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2FzYWRtaW4uY29tbWFuZH0iPgorICAgICAgICAgICAgPGFyZyBsaW5lPSJkZXBsb3ktamJpLXNlcnZpY2UtYXNzZW1ibHkiLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iYnVpbGQvRW50QXBwLnppcCIvPgorICAgICAgICA8L2V4ZWM+CisgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7YXNhZG1pbi5jb21tYW5kfSI+CisgICAgICAgICAgICA8YXJnIGxpbmU9InN0YXJ0LWpiaS1zZXJ2aWNlLWFzc2VtYmx5Ii8+CisgICAgICAgICAgICA8YXJnIGxpbmU9IkVudEFwcCIvPgorICAgICAgICA8L2V4ZWM+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LXNlcnZpY2Vhc3NlbWJseSI+CisgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7YXNhZG1pbi5jb21tYW5kfSI+CisgICAgICAgICAgICA8YXJnIGxpbmU9InN0b3AtamJpLXNlcnZpY2UtYXNzZW1ibHkiLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iRW50QXBwIi8+CisgICAgICAgIDwvZXhlYz4KKyAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHthc2FkbWluLmNvbW1hbmR9Ij4KKyAgICAgICAgICAgIDxhcmcgbGluZT0ic2h1dC1kb3duLWpiaS1zZXJ2aWNlLWFzc2VtYmx5Ii8+CisgICAgICAgICAgICA8YXJnIGxpbmU9IkVudEFwcCIvPgorICAgICAgICA8L2V4ZWM+CisgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7YXNhZG1pbi5jb21tYW5kfSI+CisgICAgICAgICAgICA8YXJnIGxpbmU9InVuZGVwbG95LWpiaS1zZXJ2aWNlLWFzc2VtYmx5Ii8+CisgICAgICAgICAgICA8YXJnIGxpbmU9IkVudEFwcCIvPgorICAgICAgICA8L2V4ZWM+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9InJlc3RhcnQtZWpibW9kdWxlIj4KKyAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHthc2FkbWluLmNvbW1hbmR9Ij4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iZGlzYWJsZSIvPgorICAgICAgICAgICAgPGFyZyBsaW5lPSIke2VqYi5tb2R1bGV9Ii8+CisgICAgICAgIDwvZXhlYz4KKyAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHthc2FkbWluLmNvbW1hbmR9Ij4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iZW5hYmxlIi8+CisgICAgICAgICAgICA8YXJnIGxpbmU9IiR7ZWpiLm1vZHVsZX0iLz4KKyAgICAgICAgPC9leGVjPgorICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMDkzZjAxZS4uYzExZjM2YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjUsMzMgKzI1LDMzIEBACiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwIjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcCI7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7Ci0JCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7Ci0JCWNsaWVudC5pbnZva2UoKTsKKyAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKKyAgICAgICAgY2xpZW50Lmludm9rZSgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQgKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgewotCQl0cnkgeworICAgICAgICB0cnkgewogCi0JCQlIZWxsb0VKQlNlcnZpY2UgaGVsbG9FSkJTZXJ2aWNlID0gbmV3IEhlbGxvRUpCU2VydmljZSgpOwotCQkJSGVsbG9FSkIgcG9ydCA9IGhlbGxvRUpCU2VydmljZS5nZXRIZWxsb0VKQlBvcnQoKTsKLQkJCVN0cmluZyBoZWxsbyA9IHBvcnQuc2F5SGVsbG8oIkJoYXZhbmkiKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiT3V0cHV0IDo6ICIgKyBoZWxsbyk7CisgICAgICAgICAgICBIZWxsb0VKQlNlcnZpY2UgaGVsbG9FSkJTZXJ2aWNlID0gbmV3IEhlbGxvRUpCU2VydmljZSgpOworICAgICAgICAgICAgSGVsbG9FSkIgcG9ydCA9IGhlbGxvRUpCU2VydmljZS5nZXRIZWxsb0VKQlBvcnQoKTsKKyAgICAgICAgICAgIFN0cmluZyBoZWxsbyA9IHBvcnQuc2F5SGVsbG8oIkJoYXZhbmkiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT3V0cHV0IDo6ICIgKyBoZWxsbyk7CiAKLQkJCUhlbGxvV2ViU2VydmljZSBoZWxsb1dlYlNlcnZpY2UgPSBuZXcgSGVsbG9XZWJTZXJ2aWNlKCk7Ci0JCQlIZWxsb1dlYiB3ZWJQb3J0ID0gaGVsbG9XZWJTZXJ2aWNlLmdldEhlbGxvV2ViUG9ydCgpOwotCQkJaGVsbG8gPSB3ZWJQb3J0LnNheUhlbGxvKCJCaGF2YW5pIik7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIk91dHB1dCA6OiAiICsgaGVsbG8pOworICAgICAgICAgICAgSGVsbG9XZWJTZXJ2aWNlIGhlbGxvV2ViU2VydmljZSA9IG5ldyBIZWxsb1dlYlNlcnZpY2UoKTsKKyAgICAgICAgICAgIEhlbGxvV2ViIHdlYlBvcnQgPSBoZWxsb1dlYlNlcnZpY2UuZ2V0SGVsbG9XZWJQb3J0KCk7CisgICAgICAgICAgICBoZWxsbyA9IHdlYlBvcnQuc2F5SGVsbG8oIkJoYXZhbmkiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT3V0cHV0IDo6ICIgKyBoZWxsbyk7CiAKLQkJCXN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5QQVNTKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5QQVNTKTsKIAotCQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewotCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7Ci0gICAgCX0KLQl9CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKKyAgICAgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL3NlcnZpY2UtYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL3NlcnZpY2UtYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCA5OTYyMjgxLi4yZWRmZWI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9zZXJ2aWNlLWFzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvc2VydmljZS1hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOSwxMCArMTksMTAgQEAKIAogPCEtLSBqYmkueG1sIGZpbGUgZm9yIHRoZSBTT0FQIGJpbmRpbmcgZGVwbG95bWVudHMgYmluZGluZy4gLS0+CiA8amJpCi0gICAgdmVyc2lvbj0iMS4wIiAKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLQl4bWxuczp0bnM9Imh0dHA6Ly9nbGFzc2Zpc2guc2FtcGxlcy5zdW4uY29tLyIKKyAgICB2ZXJzaW9uPSIxLjAiCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOnRucz0iaHR0cDovL2dsYXNzZmlzaC5zYW1wbGVzLnN1bi5jb20vIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIC4vamJpLnhzZCI+CiAgIDxzZXJ2aWNlLWFzc2VtYmx5PgogICAgIDxpZGVudGlmaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL3NlcnZpY2UtYXNzZW1ibHkvc3VuLWh0dHAtYmluZGluZy9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvc2VydmljZS1hc3NlbWJseS9zdW4taHR0cC1iaW5kaW5nL01FVEEtSU5GL2piaS54bWwKaW5kZXggOWJkMmEyMS4uMzQ3MDA3NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvc2VydmljZS1hc3NlbWJseS9zdW4taHR0cC1iaW5kaW5nL01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvc2VydmljZS1hc3NlbWJseS9zdW4taHR0cC1iaW5kaW5nL01FVEEtSU5GL2piaS54bWwKQEAgLTE4LDE4ICsxOCwxOCBAQAogLS0+CiAKIDxqYmkgdmVyc2lvbj0iMS4wIgotCSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLQkgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gCSB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgotCSB4bWxuczplamI9Imh0dHA6Ly9lamIuZW50YXBwLyIKLQkgeG1sbnM6d2ViPSJodHRwOi8vd2ViLmVudGFwcC8iCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CQkKLQkJPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJlamI6SGVsbG9FSkJTZXJ2aWNlIgotICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9ImVqYjpIZWxsb0VKQlNlcnZpY2UiIAorICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgICAgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKKyAgICAgeG1sbnM6ZWpiPSJodHRwOi8vZWpiLmVudGFwcC8iCisgICAgIHhtbG5zOndlYj0iaHR0cDovL3dlYi5lbnRhcHAvIgorICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgorICAgICAgICA8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9ImVqYjpIZWxsb0VKQlNlcnZpY2UiCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0iZWpiOkhlbGxvRUpCU2VydmljZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtbmFtZT0iSGVsbG9FSkJQb3J0Ii8+Ci0JCTxjb25zdW1lcyBpbnRlcmZhY2UtbmFtZT0id2ViOkhlbGxvV2ViU2VydmljZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ3ZWI6SGVsbG9XZWJTZXJ2aWNlIiAKKyAgICAgICAgPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJ3ZWI6SGVsbG9XZWJTZXJ2aWNlIgorICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9IndlYjpIZWxsb1dlYlNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkhlbGxvV2ViUG9ydCIvPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvc2VydmljZS1hc3NlbWJseS9zdW4tamF2YWVlLWVuZ2luZS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvc2VydmljZS1hc3NlbWJseS9zdW4tamF2YWVlLWVuZ2luZS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDUzYjEyZjAuLjgzOGQzODAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL3NlcnZpY2UtYXNzZW1ibHkvc3VuLWphdmFlZS1lbmdpbmUvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9zZXJ2aWNlLWFzc2VtYmx5L3N1bi1qYXZhZWUtZW5naW5lL01FVEEtSU5GL2piaS54bWwKQEAgLTE4LDE4ICsxOCwxOCBAQAogLS0+CiAKIDxqYmkgdmVyc2lvbj0iMS4wIgotCSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLQkgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gCSB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgotCSB4bWxuczplamI9Imh0dHA6Ly9lamIuZW50YXBwLyIKLQkgeG1sbnM6d2ViPSJodHRwOi8vd2ViLmVudGFwcC8iCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0iZmFsc2UiPgkJCi0JCTxwcm92aWRlcyBpbnRlcmZhY2UtbmFtZT0iZWpiOkhlbGxvRUpCU2VydmljZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJlamI6SGVsbG9FSkJTZXJ2aWNlIiAKKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICAgIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCisgICAgIHhtbG5zOmVqYj0iaHR0cDovL2VqYi5lbnRhcHAvIgorICAgICB4bWxuczp3ZWI9Imh0dHA6Ly93ZWIuZW50YXBwLyIKKyAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+CisgICAgPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJmYWxzZSI+CisgICAgICAgIDxwcm92aWRlcyBpbnRlcmZhY2UtbmFtZT0iZWpiOkhlbGxvRUpCU2VydmljZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJlamI6SGVsbG9FSkJTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJIZWxsb0VKQlBvcnQiLz4KLQkJPHByb3ZpZGVzIGludGVyZmFjZS1uYW1lPSJ3ZWI6SGVsbG9XZWJTZXJ2aWNlIgotICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9IndlYjpIZWxsb1dlYlNlcnZpY2UiIAorICAgICAgICA8cHJvdmlkZXMgaW50ZXJmYWNlLW5hbWU9IndlYjpIZWxsb1dlYlNlcnZpY2UiCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0id2ViOkhlbGxvV2ViU2VydmljZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtbmFtZT0iSGVsbG9XZWJQb3J0Ii8+Ci0JPC9zZXJ2aWNlcz4KKyAgICA8L3NlcnZpY2VzPgogPC9qYmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYWM1OTY0Mi4uYzI3YzEyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zbS9iY19jb25zdW1lcl9zZV9wcm92aWRlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJwcm92aWRlcl9zdSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi9lbmRwb2ludC93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iamJpLWNvbXBvbmVudC1zdS1hc3NlbWJseSIgdmFsdWU9InNhbXBsZV9zZXJ2aWNlX2Fzc2VtYmx5Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVpbGQueG1sCmluZGV4IGRlOTRjMzYuLjliZjBiZWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVpbGQueG1sCkBAIC0yNywyNCArMjcsMjQgQEAKIF0+CiAKIDxwcm9qZWN0IG5hbWU9IndhcnNlcnZpY2UiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+Ci0gICAgCisKICAgICAmY29tbW9uU2V0dXA7CiAgICAgJmNvbW1vbkJ1aWxkOwogICAgICZ0ZXN0cHJvcGVydGllczsKICAgICAmamF4d3NUb29sczsKICAgICAmamJpY29tbW9uOwogICAgICZqYmlwcm9wZXJ0aWVzOwotICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbiwgZGVwbG95LCBydW50ZXN0LCB1bmRlcGxveSwgY2xlYW4iLz4gCi0gICAgCisgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLCBkZXBsb3ksIHJ1bnRlc3QsIHVuZGVwbG95LCBjbGVhbiIvPgorCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YmFzZWRpcn0vc2VydmljZV9hc3NlbWJseS8ke2FwcG5hbWV9LndhciIvPgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YmFzZWRpcn0vc2VydmljZV9hc3NlbWJseS8ke2h0dHAtc29hcC1iYy1zdX0uamFyIi8+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHtiYXNlZGlyfS9zZXJ2aWNlX2Fzc2VtYmx5LyR7amJpLWNvbXBvbmVudC1zdS1hc3NlbWJseX0uemlwIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgY29tcGlsZSI+Ci0gICAgICAgIAorCiAgICAgICAgIDwhLS0gU3RlcDEuIEJ1aWxkIHRoZSBwcm92aWRlciBzZXJ2aWNlIHVuaXQgLS0+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzZXMgZGlyID0gJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iYXNzZW1ibGUuZGlyID0gJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0ud2FyIi8+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgIDwvamFyPgogICAgICAgICA8IS0tIENvcHkgdGhlIEphdmFFRSBhcHAgdG8gdGhlIHNlcnZpY2UgYXNzZW1ibHkgLS0+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LndhciIgdG9kaXI9IiR7YmFzZWRpcn0vc2VydmljZV9hc3NlbWJseSIvPgotICAgICAgICAKKwogICAgICAgICA8IS0tIFN0ZXAyLiBCdWlsZCB0aGUgY29uc3VtZXIgc2VydmljZSB1bml0IC0tPgogICAgICAgICA8amFyIGphcmZpbGU9IiR7YmFzZWRpcn0vc2VydmljZV9hc3NlbWJseS8ke2h0dHAtc29hcC1iYy1zdX0uamFyIj4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfS9zZXJ2aWNlX2Fzc2VtYmx5L3NlcnZpY2VfdW5pdHMvc29hcC1iYy1zdSI+CkBAIC03Myw2NCArNzMsNjQgQEAKICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJDYWxjdWxhdG9yU2VydmljZV9zY2hlbWExLnhzZCIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8L2phcj4KLSAgICAgICAgCisKICAgICAgICAgPCEtLSBTdGVwMi4gQnVpbGQgdGhlIHNlcnZpY2UgYXNzZW1ibHkgLS0+CiAgICAgICAgIDx6aXAgZGVzdGZpbGU9IiR7YmFzZWRpcn0vc2VydmljZV9hc3NlbWJseS8ke2piaS1jb21wb25lbnQtc3UtYXNzZW1ibHl9LnppcCIgYmFzZWRpcj0iJHtiYXNlZGlyfS9zZXJ2aWNlX2Fzc2VtYmx5Ij4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2piaS54bWwiLz4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiR7aHR0cC1zb2FwLWJjLXN1fS5qYXIiLz4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiR7amF2YWVlLXNlLXN1fS53YXIiLz4KICAgICAgICAgPC96aXA+Ci0gICAgICAgIAorCiAgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9Imluc3RhbGwiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGNvcHkgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9qYmkvc2hhcmVkbGlicmFyaWVzL3dzZGwvaW5zdGFsbGVyL3dzZGxzbC5qYXIiIHRvZGlyPSIke3NlcnZpY2VtaXgtYXV0b2RlcGxveS1kaXJ9Ii8+Ci0JCTxlY2hvIG1lc3NhZ2U9Ikluc3RhbGxpbmcgU3VuV1NETFNoYXJlZExpYnJhcnkuLi4iLz4KLQkJPHNsZWVwIHNlY29uZHM9IjEwIi8+Ci0JCTxjb3B5IGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vamJpL2NvbXBvbmVudHMvamF2YWVlc2VydmljZWVuZ2luZS9pbnN0YWxsZXIvYXBwc2Vydi1qYmlzZS5qYXIiIHRvZGlyPSIke3NlcnZpY2VtaXgtYXV0b2RlcGxveS1kaXJ9Ii8+Ci0JCTxlY2hvIG1lc3NhZ2U9Ikluc3RhbGxpbmcgSmF2YSBFRSBTZXJ2aWNlIEVuZ2luZS4uLiIvPgotCQk8c2xlZXAgc2Vjb25kcz0iMTUiLz4KLQk8L3RhcmdldD4gICAKLQkKLQk8dGFyZ2V0IG5hbWU9InVuaW5zdGFsbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8ZGVsZXRlIGZpbGU9IiR7c2VydmljZW1peC1hdXRvZGVwbG95LWRpcn0vYXBwc2Vydi1qYmlzZS5qYXIiLz4KLQkJPGVjaG8gbWVzc2FnZT0iVW5pbnN0YWxsaW5nIEphdmEgRUUgU2VydmljZSBFbmdpbmUuLi4iLz4KLQkJPHNsZWVwIHNlY29uZHM9IjEwIi8+Ci0JCTxkZWxldGUgZmlsZT0iJHtzZXJ2aWNlbWl4LWF1dG9kZXBsb3ktZGlyfS93c2Rsc2wuamFyIi8+Ci0JCTxlY2hvIG1lc3NhZ2U9IlVuaW5zdGFsbGluZyBTdW5XU0RMU2hhcmVkTGlicmFyeS4uLiIvPgotCQk8c2xlZXAgc2Vjb25kcz0iMTAiLz4KLQk8L3RhcmdldD4gICAKLSAgICAgIAotCTx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJhc3NlbWJsZSI+Ci0JCTxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vc2VydmljZV9hc3NlbWJseS8ke2piaS1jb21wb25lbnQtc3UtYXNzZW1ibHl9LnppcCIgdG9kaXI9IiR7c2VydmljZW1peC1hdXRvZGVwbG95LWRpcn0iLz4KLQkJPHNsZWVwIHNlY29uZHM9IjE1Ii8+Ci0JPC90YXJnZXQ+ICAgCisgICAgPHRhcmdldCBuYW1lPSJpbnN0YWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vamJpL3NoYXJlZGxpYnJhcmllcy93c2RsL2luc3RhbGxlci93c2Rsc2wuamFyIiB0b2Rpcj0iJHtzZXJ2aWNlbWl4LWF1dG9kZXBsb3ktZGlyfSIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJJbnN0YWxsaW5nIFN1bldTRExTaGFyZWRMaWJyYXJ5Li4uIi8+CisgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2piaS9jb21wb25lbnRzL2phdmFlZXNlcnZpY2VlbmdpbmUvaW5zdGFsbGVyL2FwcHNlcnYtamJpc2UuamFyIiB0b2Rpcj0iJHtzZXJ2aWNlbWl4LWF1dG9kZXBsb3ktZGlyfSIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJJbnN0YWxsaW5nIEphdmEgRUUgU2VydmljZSBFbmdpbmUuLi4iLz4KKyAgICAgICAgPHNsZWVwIHNlY29uZHM9IjE1Ii8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KLQkJPGRlbGV0ZSBmaWxlPSIke3NlcnZpY2VtaXgtYXV0b2RlcGxveS1kaXJ9LyR7amJpLWNvbXBvbmVudC1zdS1hc3NlbWJseX0uemlwIi8+Ci0JCTxzbGVlcCBzZWNvbmRzPSIxNSIvPgotCTwvdGFyZ2V0PiAgIAorICAgIDx0YXJnZXQgbmFtZT0idW5pbnN0YWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtzZXJ2aWNlbWl4LWF1dG9kZXBsb3ktZGlyfS9hcHBzZXJ2LWpiaXNlLmphciIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJVbmluc3RhbGxpbmcgSmF2YSBFRSBTZXJ2aWNlIEVuZ2luZS4uLiIvPgorICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke3NlcnZpY2VtaXgtYXV0b2RlcGxveS1kaXJ9L3dzZGxzbC5qYXIiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iVW5pbnN0YWxsaW5nIFN1bldTRExTaGFyZWRMaWJyYXJ5Li4uIi8+CisgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImFzc2VtYmxlIj4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS9zZXJ2aWNlX2Fzc2VtYmx5LyR7amJpLWNvbXBvbmVudC1zdS1hc3NlbWJseX0uemlwIiB0b2Rpcj0iJHtzZXJ2aWNlbWl4LWF1dG9kZXBsb3ktZGlyfSIvPgorICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTUiLz4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgorICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7c2VydmljZW1peC1hdXRvZGVwbG95LWRpcn0vJHtqYmktY29tcG9uZW50LXN1LWFzc2VtYmx5fS56aXAiLz4KKyAgICAgICAgPHNsZWVwIHNlY29uZHM9IjE1Ii8+CisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZW5kcG9pbnQiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZS13ZWIiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwa2ctd2FyIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmZpbGUiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUtY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jbGllbnQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3Qtd3NkbC11cmkiIHZhbHVlPSJwcm92aWRlci93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlP1dTREwiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQtc3JjIiB2YWx1ZT0iY2xpZW50Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iYXNzZW1ibGUtY2xpZW50Ij4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyBTT0FQIEJpbmRpbmcgY2xpZW50Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWNsaWVudCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2NsaWVudC9TT0FQV2ViQ29uc3VtZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvY2xpZW50L1NPQVBXZWJDb25zdW1lci5qYXZhCmluZGV4IGMyZmVmZTguLmVmOTNkYWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvY2xpZW50L1NPQVBXZWJDb25zdW1lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvY2xpZW50L1NPQVBXZWJDb25zdW1lci5qYXZhCkBAIC0yOCw0MSArMjgsNDEgQEAKICAgICBzdGF0aWMgQ2FsY3VsYXRvclNlcnZpY2Ugc2VydmljZTsKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIiOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIiOwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24odGVzdElkKTsKLQlTT0FQV2ViQ29uc3VtZXIgY2xpZW50ID0gbmV3IFNPQVBXZWJDb25zdW1lcigpOwotCWNsaWVudC5hZGRVc2luZ1NPQVBDb25zdW1lcigpOworICAgIFNPQVBXZWJDb25zdW1lciBjbGllbnQgPSBuZXcgU09BUFdlYkNvbnN1bWVyKCk7CisgICAgY2xpZW50LmFkZFVzaW5nU09BUENvbnN1bWVyKCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCApOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBhZGRVc2luZ1NPQVBDb25zdW1lcigpIHsKLQljb20uZXhhbXBsZS5jYWxjdWxhdG9yLkNhbGN1bGF0b3IgcG9ydD0gbnVsbDsKLQl0cnkgeworICAgIGNvbS5leGFtcGxlLmNhbGN1bGF0b3IuQ2FsY3VsYXRvciBwb3J0PSBudWxsOworICAgIHRyeSB7CiAKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgY3JlYXRpbmcgQ2FsY3VsYXRvclNlcnZpY2UiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgY3JlYXRpbmcgQ2FsY3VsYXRvclNlcnZpY2UiKTsKIAogICAgICAgICAgICAgICAgIHBvcnQgPSBzZXJ2aWNlLmdldENhbGN1bGF0b3JQb3J0KCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGdldHRpbmcgcG9ydCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBnZXR0aW5nIHBvcnQiKTsKIAotCQkvLyBHZXQgU3R1YgotCQlCaW5kaW5nUHJvdmlkZXIgc3R1YiA9IChCaW5kaW5nUHJvdmlkZXIpcG9ydDsKLQkJU3RyaW5nIGVuZHBvaW50VVJJID0iaHR0cDovL2xvY2FsaG9zdDo4MTkyL2NhbGN1bGF0b3JlbmRwb2ludC8iOwotCQlzdHViLmdldFJlcXVlc3RDb250ZXh0KCkucHV0KEJpbmRpbmdQcm92aWRlci5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAotCQkgICAgICBlbmRwb2ludFVSSSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIHNldHRpbmcgZW5kcG9pbnQgYWRkcmVzcyBVUkkiKTsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFVzaW5nIFNPQVAgYmluZGluZydzIGNvbnN1bWVyIHRvIGFkZCAxICsgMiA9ICIgKyBwb3J0LmFkZCgxLDIpKTsKLQkgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5QQVNTKTsKLQkJLy9TeXN0ZW0ub3V0LnByaW50bG4oIiBObyBFeGNlcHRpb24gdGhyb3duIik7CisgICAgICAgIC8vIEdldCBTdHViCisgICAgICAgIEJpbmRpbmdQcm92aWRlciBzdHViID0gKEJpbmRpbmdQcm92aWRlcilwb3J0OworICAgICAgICBTdHJpbmcgZW5kcG9pbnRVUkkgPSJodHRwOi8vbG9jYWxob3N0OjgxOTIvY2FsY3VsYXRvcmVuZHBvaW50LyI7CisgICAgICAgIHN0dWIuZ2V0UmVxdWVzdENvbnRleHQoKS5wdXQoQmluZGluZ1Byb3ZpZGVyLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCisgICAgICAgICAgICAgIGVuZHBvaW50VVJJKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgc2V0dGluZyBlbmRwb2ludCBhZGRyZXNzIFVSSSIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgVXNpbmcgU09BUCBiaW5kaW5nJ3MgY29uc3VtZXIgdG8gYWRkIDEgKyAyID0gIiArIHBvcnQuYWRkKDEsMikpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LlBBU1MpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiIE5vIEV4Y2VwdGlvbiB0aHJvd24iKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJaWYoZSBpbnN0YW5jZW9mIGpha2FydGEueG1sLndzLnNvYXAuU09BUEZhdWx0RXhjZXB0aW9uKSAKLSAgICAgICAgICAgICAgICAJc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LlBBU1MpOwotCQllbHNlIHsKLQkgICAgICAgIAlzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsICBzdGF0LkZBSUwpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCIgU09BUEZhdWx0RXhjZXB0aW9uIE5vdCB0aHJvd24iKTsKLQkJfQotCX0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIGlmKGUgaW5zdGFuY2VvZiBqYWthcnRhLnhtbC53cy5zb2FwLlNPQVBGYXVsdEV4Y2VwdGlvbikKKyAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LlBBU1MpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsICBzdGF0LkZBSUwpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgU09BUEZhdWx0RXhjZXB0aW9uIE5vdCB0aHJvd24iKTsKKyAgICAgICAgfQorICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCmluZGV4IGEyNzlhMmIuLmYxYzBmMzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCkBAIC0yNSwxMiArMjUsMTIgQEAKICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLmNvbS9DYWxjdWxhdG9yIgogKQogcHVibGljIGNsYXNzIENhbGN1bGF0b3IgewotCXB1YmxpYyBDYWxjdWxhdG9yKCkge30KKyAgICBwdWJsaWMgQ2FsY3VsYXRvcigpIHt9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCi0JcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCisgICAgcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgICAgICAgICBpbnQgayA9IGkgK2ogOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpICsgIisiICsgaiArIiA9ICIgKyBrKTsKLQkJcmV0dXJuIGs7Ci0JfQorICAgICAgICByZXR1cm4gazsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2VuZHBvaW50L3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2VuZHBvaW50L3dlYi54bWwKaW5kZXggMDdlMTQ3Ny4uNzk4YzY5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zbS9iY19jb25zdW1lcl9zZV9wcm92aWRlci9lbmRwb2ludC93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvZW5kcG9pbnQvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3NlcnZpY2VfYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvc2VydmljZV9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDI4N2MwNTAuLmYwN2RmMzMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvc2VydmljZV9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvc2VydmljZV9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOSw5ICsxOSw5IEBACiAKIDwhLS0gamJpLnhtbCBmaWxlIGZvciB0aGUgU09BUCBiaW5kaW5nIGRlcGxveW1lbnRzIGJpbmRpbmcuIC0tPgogPGpiaQotICAgIHZlcnNpb249IjEuMCIgCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgdmVyc2lvbj0iMS4wIgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSAuL2piaS54c2QiPgogICAgIDxzZXJ2aWNlLWFzc2VtYmx5PgogICAgICAgICA8aWRlbnRpZmljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3NlcnZpY2VfYXNzZW1ibHkvc2VydmljZV91bml0cy9qYXZhZWUtc2Utc3UvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvc2VydmljZV9hc3NlbWJseS9zZXJ2aWNlX3VuaXRzL2phdmFlZS1zZS1zdS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDkzMDY5M2IuLmRjMjY2ODAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvc2VydmljZV9hc3NlbWJseS9zZXJ2aWNlX3VuaXRzL2phdmFlZS1zZS1zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvc2VydmljZV9hc3NlbWJseS9zZXJ2aWNlX3VuaXRzL2phdmFlZS1zZS1zdS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOCwxNCArMTgsMTQgQEAKIC0tPgogCiA8amJpIHZlcnNpb249IjEuMCIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotCSB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgotCSB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLmNvbS9DYWxjdWxhdG9yIgotCSB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KLQk8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9ImZhbHNlIj4JCQotCSA8cHJvdmlkZXMgaW50ZXJmYWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZUludGVyZmFjZSIKKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICAgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKKyAgICAgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS5jb20vQ2FsY3VsYXRvciIKKyAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+CisgICAgPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJmYWxzZSI+CisgICAgIDxwcm92aWRlcyBpbnRlcmZhY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlSW50ZXJmYWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtbmFtZT0iQ2FsY3VsYXRvclBvcnQiLz4KLQk8L3NlcnZpY2VzPgorICAgIDwvc2VydmljZXM+CiA8L2piaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvc2VydmljZV9hc3NlbWJseS9zZXJ2aWNlX3VuaXRzL3NvYXAtYmMtc3UvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvc2VydmljZV9hc3NlbWJseS9zZXJ2aWNlX3VuaXRzL3NvYXAtYmMtc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCA3YjQ4ZmRhLi5lNzNiZDMyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3NlcnZpY2VfYXNzZW1ibHkvc2VydmljZV91bml0cy9zb2FwLWJjLXN1L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zbS9iY19jb25zdW1lcl9zZV9wcm92aWRlci9zZXJ2aWNlX2Fzc2VtYmx5L3NlcnZpY2VfdW5pdHMvc29hcC1iYy1zdS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOCwxNSArMTgsMTUgQEAKIC0tPgogCiA8amJpIHZlcnNpb249IjEuMCIKLSAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0gICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAorICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgogICAgICB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgogICAgICB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLmNvbS9DYWxjdWxhdG9yIgogICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KLSAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgkJCisgICAgPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4KICAgICAgICAgPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCiAgICAgbGluay10eXBlPSJzdGFuZGFyZCIKLSAgICBzZXJ2aWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIgCisgICAgc2VydmljZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCiAgICAgZW5kcG9pbnQtbmFtZT0iQ2FsY3VsYXRvclBvcnQiLz4KICAgICAgICAgPGphdmFlc2I6YXJ0aWZhY3RzdHlwZT5XU0RMMTE8L2phdmFlc2I6YXJ0aWZhY3RzdHlwZT4KICAgICA8L3NlcnZpY2VzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zbS9iY19jb25zdW1lcl9zZV9wcm92aWRlci9zZXJ2aWNlX2Fzc2VtYmx5L3NlcnZpY2VfdW5pdHMvc29hcC1iYy1zdS94YmVhbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3NlcnZpY2VfYXNzZW1ibHkvc2VydmljZV91bml0cy9zb2FwLWJjLXN1L3hiZWFuLnhtbAppbmRleCAyZjBlY2UzLi5jNjc5MjEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3NlcnZpY2VfYXNzZW1ibHkvc2VydmljZV91bml0cy9zb2FwLWJjLXN1L3hiZWFuLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3NlcnZpY2VfYXNzZW1ibHkvc2VydmljZV91bml0cy9zb2FwLWJjLXN1L3hiZWFuLnhtbApAQCAtMjYsNSArMjYsNSBAQAogICAgICAgICAgICAgbG9jYXRpb25VUkk9Imh0dHA6Ly9sb2NhbGhvc3Q6ODE5Mi9jYWxjdWxhdG9yZW5kcG9pbnQiCiAgICAgICAgICAgICBkZWZhdWx0TWVwPSJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwvaW4tb3V0IgogICAgIC8+Ci0gICAgCisKIDwvYmVhbnM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9idWlsZC54bWwKaW5kZXggYTgzNjBlYy4uMjYzOTI3OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L2J1aWxkLnhtbApAQCAtMjYsNiArMjYsNiBAQAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KICAgICAgICAgPGFudCBkaXI9InNlX2NvbnN1bWVyTnByb3ZpZGVyIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0ic2VfcHJvdmlkZXIiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InNlX2NvbnN1bWVyIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJzZV9jb25zdW1lciIgdGFyZ2V0PSJhbGwiLz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDAzMDAxMDguLjYwMDNhN2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjYWxjLXdlYi1jbGllbnQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXIvYnVpbGQueG1sCmluZGV4IDY1ZDZkYzUuLmJiOThmMGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci9idWlsZC54bWwKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgICAgICAgIHZhbHVlPSIta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9jYWxjLXdlYi1jbGllbnQvd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZT9XU0RMIi8+CiAgICAgPC9hbnRjYWxsPgogICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyIKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIgCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0id2ViY2xpZW50LyoqIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3dlYi54bWwiLz4KICAgICAgIDxjb3B5IGZpbGU9Ii4vY2xpZW50LXN1bi13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3N1bi13ZWIueG1sIi8+CkBAIC0xMTAsMTEgKzExMCwxMSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL2NsaWVudC13ZWIueG1sCmluZGV4IGVlYjczMGQuLjc5NWIwNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IGU2YWFmZTcuLjJlNWNlNGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXIiOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyIjsKIAogICAgIHB1YmxpYyBib29sZWFuIGZvdW5kMSA9IGZhbHNlOwogCkBAIC00Nyw4ICs0Nyw4IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBmYWlsKCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZmFpbCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiRXhjZXB0aW9uIHRocm93biBTdWNjZXNzZnVsbHkiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKaW5kZXggZGMwYjkwZi4uZmMzYjM1OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQpAQCAtMjYsMTMgKzI2LDEzIEBACiAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9DYWxjdWxhdG9yIgogKQogcHVibGljIGNsYXNzIENhbGN1bGF0b3IgewotCXB1YmxpYyBDYWxjdWxhdG9yKCkge30KKyAgICBwdWJsaWMgQ2FsY3VsYXRvcigpIHt9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCi0JcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCisgICAgcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgICAgICAgICBpbnQgayA9IGkgK2ogOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpICsgIisiICsgaiArIiA9ICIgKyBrKTsKLQkJdGhyb3cgbmV3IGphdmEubGFuZy5FeGNlcHRpb24oIlRoaXMgaXMgbXkgZXhjZXB0aW9uIik7IAotCQkvL3JldHVybiBrOwotCX0KKyAgICAgICAgdGhyb3cgbmV3IGphdmEubGFuZy5FeGNlcHRpb24oIlRoaXMgaXMgbXkgZXhjZXB0aW9uIik7CisgICAgICAgIC8vcmV0dXJuIGs7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDNiYzgwYjkuLjgwZjJlNWQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKQEAgLTE5LDkgKzE5LDkgQEAKIAogPCEtLSBqYmkueG1sIGZpbGUgZm9yIHRoZSBTT0FQIGJpbmRpbmcgZGVwbG95bWVudHMgYmluZGluZy4gLS0+CiA8amJpCi0gICAgdmVyc2lvbj0iMS4wIiAKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICB2ZXJzaW9uPSIxLjAiCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIC4vamJpLnhzZCI+CiAgIDxzZXJ2aWNlLWFzc2VtYmx5PgogICAgIDxpZGVudGlmaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCAzMzk3NGY5Li40MzNiZDE5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOCwxNSArMTgsMTUgQEAKIC0tPgogCiA8amJpIHZlcnNpb249IjEuMCIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotCSB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgotCSB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3IiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CQkKLQkgPHByb3ZpZGVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2VJbnRlcmZhY2UiCisgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCisgICAgIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQ2FsY3VsYXRvciIKKyAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+CisgICAgPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4KKyAgICAgPHByb3ZpZGVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2VJbnRlcmZhY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJDYWxjdWxhdG9yUG9ydCIvPgogICAgICAgICAgICAgICAgIDxhcnRpZmFjdHMgeG1sbnM9IiIgcm9sZT0icHJvdmlkZXIiIGZpbGUtbmFtZT0iZW5kcG9pbnRzLnhtbCIgdHlwZT0ieG1sIi8+Ci0JPC9zZXJ2aWNlcz4KKyAgICA8L3NlcnZpY2VzPgogPC9qYmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXIvd2ViLnhtbAppbmRleCAwN2UxNDc3Li43OThjNjliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXIvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZTQ4YTQwOC4uOTQ2NGIwMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXIvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCwzNyArMjgsMzcgQEAKIAogICAgICAgIEBXZWJTZXJ2aWNlUmVmKG5hbWU9InN1bi13ZWIuc2VydmljZXJlZi9jYWxjdWxhdG9yIikgQ2FsY3VsYXRvclNlcnZpY2Ugc2VydmljZTsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQogICAgICAgICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewotCSAgICBQcmludFdyaXRlciBvdXQ9bnVsbDsKKyAgICAgICAgUHJpbnRXcml0ZXIgb3V0PW51bGw7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFNlcnZpY2UgaXMgOiIgKyBzZXJ2aWNlKTsKICAgICAgICAgICAgICAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKLSAgICAgICAgICAgIAlvdXQgPSByZXNwLmdldFdyaXRlcigpOworICAgICAgICAgICAgICAgIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CiAgICAgICAgICAgICAgICAgQ2FsY3VsYXRvciBwb3J0ID0gc2VydmljZS5nZXRDYWxjdWxhdG9yUG9ydCgpOwogICAgICAgICAgICAgICAgIGludCByZXQgPSBwb3J0LmFkZCgxLCAyKTsKLQkJcHJpbnRGYWlsdXJlKG91dCk7CisgICAgICAgIHByaW50RmFpbHVyZShvdXQpOwogICAgICAgICAgICAgfSBjYXRjaChqYXZhLmxhbmcuRXhjZXB0aW9uIGUpIHsKLQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCWlmKGUgaW5zdGFuY2VvZiBzZXJ2aWNlLndlYi5leGFtcGxlLmNhbGN1bGF0b3IuRXhjZXB0aW9uX0V4Y2VwdGlvbikgewotCSAgICAJCXByaW50U3VjY2VzcyhvdXQpOwotCQkJfQorICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgaWYoZSBpbnN0YW5jZW9mIHNlcnZpY2Uud2ViLmV4YW1wbGUuY2FsY3VsYXRvci5FeGNlcHRpb25fRXhjZXB0aW9uKSB7CisgICAgICAgICAgICAgICAgcHJpbnRTdWNjZXNzKG91dCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGZpbmFsbHkgewotCQlpZihvdXQgIT0gbnVsbCkgeworICAgICAgICBpZihvdXQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBvdXQuZmx1c2goKTsKICAgICAgICAgICAgICAgICAgICAgb3V0LmNsb3NlKCk7Ci0JCX0KLQkgICAgfQorICAgICAgICB9CisgICAgICAgIH0KICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBwcmludEZhaWx1cmUoUHJpbnRXcml0ZXIgb3V0KSB7Ci0JCWlmKG91dCA9PSBudWxsKSByZXR1cm47Ci0JCW91dC5wcmludGxuKCI8aHRtbD4iKTsKKyAgICAgICAgaWYob3V0ID09IG51bGwpIHJldHVybjsKKyAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlRlc3RTZXJ2bGV0PC90aXRsZT4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwpAQCAtNzEsNyArNzEsNyBAQAogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIHByaW50U3VjY2VzcyhQcmludFdyaXRlciBvdXQpIHsKLQkJaWYob3V0ID09IG51bGwpIHJldHVybjsKKyAgICAgICAgaWYob3V0ID09IG51bGwpIHJldHVybjsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+VGVzdFNlcnZsZXQ8L3RpdGxlPiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDMwMDEwOC4uNjAwM2E3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lck5wcm92aWRlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNhbGMtd2ViLWNsaWVudCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lck5wcm92aWRlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lck5wcm92aWRlci9idWlsZC54bWwKaW5kZXggOTQyNGU4OC4uZDI1MWI3NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL2J1aWxkLnhtbApAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMgaHR0cDovL2xvY2FsaG9zdDo4MDgwL2NhbGMtd2ViLWNsaWVudC93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlP1dTREwiLz4KICAgICA8L2FudGNhbGw+CiAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIgotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIiAKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJ3ZWJjbGllbnQvKioiLz4KICAgICAgIDxjb3B5IGZpbGU9Ii4vY2xpZW50LXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvd2ViLnhtbCIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jbGllbnQtc3VuLXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvc3VuLXdlYi54bWwiLz4KQEAgLTExMCwxMSArMTEwLDExIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5UZXN0Q2xpZW50Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvY2xpZW50LXdlYi54bWwKaW5kZXggZWViNzMwZC4uNzk1YjA1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggNjFjNmU0My4uNTIwZjJlYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lck5wcm92aWRlci9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lck5wcm92aWRlciI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIiOwogCiAgICAgcHVibGljIGJvb2xlYW4gZm91bmQxID0gZmFsc2U7CiAKQEAgLTQ3LDggKzQ3LDggQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGZhaWwoKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJFeGNlcHRpb24gdGhyb3duIFN1Y2Nlc3NmdWxseSIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQppbmRleCAwOThmYTlkLi40OTg5NGZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lck5wcm92aWRlci9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCkBAIC0yNiwyMyArMjYsMjMgQEAKICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3IiCiApCiBwdWJsaWMgY2xhc3MgQ2FsY3VsYXRvciB7Ci0JcHVibGljIENhbGN1bGF0b3IoKSB7fQorICAgIHB1YmxpYyBDYWxjdWxhdG9yKCkge30KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0iYWRkIiwgYWN0aW9uPSJ1cm46QWRkIikKLQlwdWJsaWMgaW50IGFkZChpbnQgaSwgaW50IGopIHRocm93cyBFeGNlcHRpb24geworICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0iYWRkIiwgYWN0aW9uPSJ1cm46QWRkIikKKyAgICBwdWJsaWMgaW50IGFkZChpbnQgaSwgaW50IGopIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAgICAgICAgIGludCBrID0gaSAraiA7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkgKyAiKyIgKyBqICsiID0gIiArIGspOwotCQl0aHJvdyBuZXcgamF2YS5sYW5nLkV4Y2VwdGlvbigiVGhpcyBpcyBteSBleGNlcHRpb24uLi4iKTsgCi0JCS8vcmV0dXJuIGs7Ci0JfQorICAgICAgICB0aHJvdyBuZXcgamF2YS5sYW5nLkV4Y2VwdGlvbigiVGhpcyBpcyBteSBleGNlcHRpb24uLi4iKTsKKyAgICAgICAgLy9yZXR1cm4gazsKKyAgICB9CiAvKgotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic3VidHJhY3QiLCBhY3Rpb249InVybjpTdWJ0cmFjdCIpCi0JQE9uZXdheQotCXB1YmxpYyB2b2lkIHN1YnRyYWN0KGludCBpLCBpbnQgaikgeworICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic3VidHJhY3QiLCBhY3Rpb249InVybjpTdWJ0cmFjdCIpCisgICAgQE9uZXdheQorICAgIHB1YmxpYyB2b2lkIHN1YnRyYWN0KGludCBpLCBpbnQgaikgewogICAgICAgICAgICAgICAgIGludCBrID0gaSAtaiA7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkgKyAiLSIgKyBqICsiID0gIiArIGspOwotCQlpZihpID09IDEwMSkKLQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUaGlzIGlzIG15IGV4Y2VwdGlvbiBpbiBzdWJ0cmFjdCAuLi4iKTsKLQl9CisgICAgICAgIGlmKGkgPT0gMTAxKQorICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlRoaXMgaXMgbXkgZXhjZXB0aW9uIGluIHN1YnRyYWN0IC4uLiIpOworICAgIH0KICovCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lck5wcm92aWRlci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lck5wcm92aWRlci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKaW5kZXggM2JjODBiOS4uODBmMmU1ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbApAQCAtMTksOSArMTksOSBAQAogCiA8IS0tIGpiaS54bWwgZmlsZSBmb3IgdGhlIFNPQVAgYmluZGluZyBkZXBsb3ltZW50cyBiaW5kaW5nLiAtLT4KIDxqYmkKLSAgICB2ZXJzaW9uPSIxLjAiIAotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgIHZlcnNpb249IjEuMCIKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgLi9qYmkueHNkIj4KICAgPHNlcnZpY2UtYXNzZW1ibHk+CiAgICAgPGlkZW50aWZpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDMzOTc0ZjkuLjQzM2JkMTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lck5wcm92aWRlci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKQEAgLTE4LDE1ICsxOCwxNSBAQAogLS0+CiAKIDxqYmkgdmVyc2lvbj0iMS4wIgotCSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLQkgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0JIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCi0JIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQ2FsY3VsYXRvciIKLQkgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+Ci0JPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4JCQotCSA8cHJvdmlkZXMgaW50ZXJmYWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZUludGVyZmFjZSIKKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICAgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKKyAgICAgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9DYWxjdWxhdG9yIgorICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgorICAgICA8cHJvdmlkZXMgaW50ZXJmYWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZUludGVyZmFjZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkNhbGN1bGF0b3JQb3J0Ii8+CiAgICAgICAgICAgICAgICAgPGFydGlmYWN0cyB4bWxucz0iIiByb2xlPSJwcm92aWRlciIgZmlsZS1uYW1lPSJlbmRwb2ludHMueG1sIiB0eXBlPSJ4bWwiLz4KLQk8L3NlcnZpY2VzPgorICAgIDwvc2VydmljZXM+CiA8L2piaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lck5wcm92aWRlci93ZWIueG1sCmluZGV4IDA3ZTE0NzcuLjc5OGM2OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lck5wcm92aWRlci93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQppbmRleCBkMTg1ZjZmLi4yZjdiNDc4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lck5wcm92aWRlci93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDM1ICsyOCwzNSBAQAogCiAgICAgICAgQFdlYlNlcnZpY2VSZWYobmFtZT0ic3VuLXdlYi5zZXJ2aWNlcmVmL2NhbGN1bGF0b3IiKSBDYWxjdWxhdG9yU2VydmljZSBzZXJ2aWNlOwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCiAgICAgICAgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7Ci0JICAgIFByaW50V3JpdGVyIG91dD1udWxsOworICAgICAgICBQcmludFdyaXRlciBvdXQ9bnVsbDsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgU2VydmljZSBpcyA6IiArIHNlcnZpY2UpOwogICAgICAgICAgICAgICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwotICAgICAgICAgICAgCW91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CisgICAgICAgICAgICAgICAgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKICAgICAgICAgICAgICAgICBDYWxjdWxhdG9yIHBvcnQgPSBzZXJ2aWNlLmdldENhbGN1bGF0b3JQb3J0KCk7CiAgICAgICAgICAgICAgICAgaW50IHJldCA9IHBvcnQuYWRkKDEsIDIpOwotCQlwcmludEZhaWx1cmUob3V0KTsKKyAgICAgICAgcHJpbnRGYWlsdXJlKG91dCk7CiAgICAgICAgICAgICB9IGNhdGNoKGphdmEubGFuZy5FeGNlcHRpb24gZSkgewotCQllLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICAJcHJpbnRTdWNjZXNzKG91dCk7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBwcmludFN1Y2Nlc3Mob3V0KTsKICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0JCWlmKG91dCAhPSBudWxsKSB7CisgICAgICAgIGlmKG91dCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIG91dC5mbHVzaCgpOwogICAgICAgICAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKLQkJfQotCSAgICB9CisgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIHByaW50RmFpbHVyZShQcmludFdyaXRlciBvdXQpIHsKLQkJaWYob3V0ID09IG51bGwpIHJldHVybjsKLQkJb3V0LnByaW50bG4oIjxodG1sPiIpOworICAgICAgICBpZihvdXQgPT0gbnVsbCkgcmV0dXJuOworICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+VGVzdFNlcnZsZXQ8L3RpdGxlPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgcHJpbnRTdWNjZXNzKFByaW50V3JpdGVyIG91dCkgewotCQlpZihvdXQgPT0gbnVsbCkgcmV0dXJuOworICAgICAgICBpZihvdXQgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5UZXN0U2VydmxldDwvdGl0bGU+Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9wcm92aWRlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfcHJvdmlkZXIvYnVpbGQucHJvcGVydGllcwppbmRleCA2ODk4N2JkLi43MjAwZjMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9wcm92aWRlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX3Byb3ZpZGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2FsY3VsYXRvcnNlcnZpY2UiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImpiaS1jb21wb25lbnQtc3UtYXNzZW1ibHkiIHZhbHVlPSJ3ZWJfY2FsY3VsYXRvcl9jb25zdW1lcl9hc3NlbWJseSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfcHJvdmlkZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfcHJvdmlkZXIvYnVpbGQueG1sCmluZGV4IDhmZTU2MGIuLjI0MmFiZjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX3Byb3ZpZGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9wcm92aWRlci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICAmamF4d3NUb29sczsKICAgICAmamJpY29tbW9uOwogICAgICZqYmlwcm9wZXJ0aWVzOwotICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbiwgc2V0dXAsIHJ1bnRlc3QsdW5kZXBsb3kiLz4gCisgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLCBzZXR1cCwgcnVudGVzdCx1bmRlcGxveSIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX3Byb3ZpZGVyL2NsaWVudC9TT0FQV2ViQ29uc3VtZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX3Byb3ZpZGVyL2NsaWVudC9TT0FQV2ViQ29uc3VtZXIuamF2YQppbmRleCBjNzUwNjBkLi5iNDMzZTNkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9wcm92aWRlci9jbGllbnQvU09BUFdlYkNvbnN1bWVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfcHJvdmlkZXIvY2xpZW50L1NPQVBXZWJDb25zdW1lci5qYXZhCkBAIC0yOCw1MyArMjgsNTMgQEAKICAgICBzdGF0aWMgQ2FsY3VsYXRvclNlcnZpY2Ugc2VydmljZTsKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX3Byb3ZpZGVyIjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9wcm92aWRlciI7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7Ci0JU09BUFdlYkNvbnN1bWVyIGNsaWVudCA9IG5ldyBTT0FQV2ViQ29uc3VtZXIoKTsKLQljbGllbnQuYWRkVXNpbmdTT0FQQ29uc3VtZXIoKTsKKyAgICBTT0FQV2ViQ29uc3VtZXIgY2xpZW50ID0gbmV3IFNPQVBXZWJDb25zdW1lcigpOworICAgIGNsaWVudC5hZGRVc2luZ1NPQVBDb25zdW1lcigpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQgKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgYWRkVXNpbmdTT0FQQ29uc3VtZXIoKSB7Ci0JY29tLmV4YW1wbGUuY2FsY3VsYXRvci5DYWxjdWxhdG9yIHBvcnQ9IG51bGw7CisgICAgY29tLmV4YW1wbGUuY2FsY3VsYXRvci5DYWxjdWxhdG9yIHBvcnQ9IG51bGw7CiAKICAgICAgICAgICAgICAgICBwb3J0ID0gc2VydmljZS5nZXRDYWxjdWxhdG9yUG9ydCgpOwogCi0JCS8vIEdldCBTdHViCi0JCUJpbmRpbmdQcm92aWRlciBzdHViID0gKEJpbmRpbmdQcm92aWRlcilwb3J0OwotCQlTdHJpbmcgZW5kcG9pbnRVUkkgPSJodHRwOi8vbG9jYWxob3N0OjEyMDExL2NhbGN1bGF0b3JlbmRwb2ludCI7Ci0JCXN0dWIuZ2V0UmVxdWVzdENvbnRleHQoKS5wdXQoQmluZGluZ1Byb3ZpZGVyLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCi0JCSAgICAgIGVuZHBvaW50VVJJKTsKKyAgICAgICAgLy8gR2V0IFN0dWIKKyAgICAgICAgQmluZGluZ1Byb3ZpZGVyIHN0dWIgPSAoQmluZGluZ1Byb3ZpZGVyKXBvcnQ7CisgICAgICAgIFN0cmluZyBlbmRwb2ludFVSSSA9Imh0dHA6Ly9sb2NhbGhvc3Q6MTIwMTEvY2FsY3VsYXRvcmVuZHBvaW50IjsKKyAgICAgICAgc3R1Yi5nZXRSZXF1ZXN0Q29udGV4dCgpLnB1dChCaW5kaW5nUHJvdmlkZXIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKKyAgICAgICAgICAgICAgZW5kcG9pbnRVUkkpOwogCi0JCVN0cmluZyBmYWlsZWRNc2cgPSBudWxsOworICAgICAgICBTdHJpbmcgZmFpbGVkTXNnID0gbnVsbDsKIAotCQl0cnkgewotCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbkludm9raW5nIHRocm93UnVudGltZUV4Y2VwdGlvbiIpOwotCQkgICAJcG9ydC50aHJvd1J1bnRpbWVFeGNlcHRpb24oImJoYXZhbmkiKTsKLQkJfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihleCk7Ci0JCQlpZighKGV4IGluc3RhbmNlb2YgUnVudGltZUV4Y2VwdGlvbikgfHwgCi0JCQkJCSEoZXguZ2V0TWVzc2FnZSgpLmVxdWFscygiQ2FsY3VsYXRvciA6OiBUaHJldyBSdW50aW1lIEV4Y2VwdGlvbiIpKSkgewotCQkJCWZhaWxlZE1zZyA9ICJwb3J0LnRocm93UnVudGltZUV4Y2VwdGlvbigpIGRpZCBub3QgcmVjZWl2ZSBSdW50aW1lRXhjZXB0aW9uICdDYWxjdWxhdG9yIDo6IFRocmV3IFJ1bnRpbWUgRXhjZXB0aW9uJyI7Ci0JCQl9Ci0JCX0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5JbnZva2luZyB0aHJvd1J1bnRpbWVFeGNlcHRpb24iKTsKKyAgICAgICAgICAgICAgIHBvcnQudGhyb3dSdW50aW1lRXhjZXB0aW9uKCJiaGF2YW5pIik7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZXgpOworICAgICAgICAgICAgaWYoIShleCBpbnN0YW5jZW9mIFJ1bnRpbWVFeGNlcHRpb24pIHx8CisgICAgICAgICAgICAgICAgICAgICEoZXguZ2V0TWVzc2FnZSgpLmVxdWFscygiQ2FsY3VsYXRvciA6OiBUaHJldyBSdW50aW1lIEV4Y2VwdGlvbiIpKSkgeworICAgICAgICAgICAgICAgIGZhaWxlZE1zZyA9ICJwb3J0LnRocm93UnVudGltZUV4Y2VwdGlvbigpIGRpZCBub3QgcmVjZWl2ZSBSdW50aW1lRXhjZXB0aW9uICdDYWxjdWxhdG9yIDo6IFRocmV3IFJ1bnRpbWUgRXhjZXB0aW9uJyI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotCQl0cnkgewotCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbkludm9raW5nIHRocm93QXBwbGljYXRpb25FeGNlcHRpb24iKTsKLQkJICAgCXBvcnQudGhyb3dBcHBsaWNhdGlvbkV4Y2VwdGlvbigiYmhhdmFuaSIpOwotCQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGV4KTsKLQkJCWlmKCEoZXggaW5zdGFuY2VvZiBjb20uZXhhbXBsZS5jYWxjdWxhdG9yLkV4Y2VwdGlvbl9FeGNlcHRpb24pKSB7Ci0JCQkJZmFpbGVkTXNnID0gInBvcnQudGhyb3dBcHBsaWNhdGlvbkV4Y2VwdGlvbigpIGRpZCBub3QgdGhyb3cgQXBwbGljYXRpb25FeGNlcHRpb24iOwotCQkJfQotCQl9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuSW52b2tpbmcgdGhyb3dBcHBsaWNhdGlvbkV4Y2VwdGlvbiIpOworICAgICAgICAgICAgICAgcG9ydC50aHJvd0FwcGxpY2F0aW9uRXhjZXB0aW9uKCJiaGF2YW5pIik7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZXgpOworICAgICAgICAgICAgaWYoIShleCBpbnN0YW5jZW9mIGNvbS5leGFtcGxlLmNhbGN1bGF0b3IuRXhjZXB0aW9uX0V4Y2VwdGlvbikpIHsKKyAgICAgICAgICAgICAgICBmYWlsZWRNc2cgPSAicG9ydC50aHJvd0FwcGxpY2F0aW9uRXhjZXB0aW9uKCkgZGlkIG5vdCB0aHJvdyBBcHBsaWNhdGlvbkV4Y2VwdGlvbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotCQlpZihmYWlsZWRNc2cgIT0gbnVsbCkgewotCSAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwotCQl9IGVsc2UgewotICAgICAgICAJc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LlBBU1MpOwotCQl9CisgICAgICAgIGlmKGZhaWxlZE1zZyAhPSBudWxsKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuUEFTUyk7CisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9wcm92aWRlci9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9wcm92aWRlci9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKaW5kZXggNmQ4NzYzNC4uMTAxOTBjYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfcHJvdmlkZXIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX3Byb3ZpZGVyL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogcHVibGljIGNsYXNzIENhbGN1bGF0b3IgewogICAgIHB1YmxpYyBDYWxjdWxhdG9yKCkge30KIAotICAgIAorCiAgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJ0aHJvd1J1bnRpbWVFeGNlcHRpb24iLCBhY3Rpb249InVybjpUaHJvd1J1bnRpbWVFeGNlcHRpb24iKQogICAgIHB1YmxpYyBTdHJpbmcgdGhyb3dSdW50aW1lRXhjZXB0aW9uKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIFN0cmluZyBleGNlcHRpb25Nc2cgPSAiQ2FsY3VsYXRvciA6OiBUaHJldyBSdW50aW1lIEV4Y2VwdGlvbiI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9wcm92aWRlci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9wcm92aWRlci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKaW5kZXggYjRkYTk4Ni4uNDMzNzhlMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX3Byb3ZpZGVyL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbApAQCAtMTksOSArMTksOSBAQAogCiA8IS0tIGpiaS54bWwgZmlsZSBmb3IgdGhlIFNPQVAgYmluZGluZyBkZXBsb3ltZW50cyBiaW5kaW5nLiAtLT4KIDxqYmkKLSAgICB2ZXJzaW9uPSIxLjAiIAotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgIHZlcnNpb249IjEuMCIKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgLi9qYmkueHNkIj4KICAgPHNlcnZpY2UtYXNzZW1ibHk+CiAgICAgPGlkZW50aWZpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDJkMWU3ZTguLjY1Y2E5NmYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX3Byb3ZpZGVyL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9wcm92aWRlci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKQEAgLTE4LDE2ICsxOCwxNiBAQAogLS0+CiAKIDxqYmkgdmVyc2lvbj0iMS4wIgotCSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLQkgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gCSB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgotCSB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLmNvbS9DYWxjdWxhdG9yIgotCSB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KLQk8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgkJCi0JCTxjb25zdW1lcyBpbnRlcmZhY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIgotCQkJICBsaW5rLXR5cGU9InN0YW5kYXJkIgotICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIgCisgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgICB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgorICAgICB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLmNvbS9DYWxjdWxhdG9yIgorICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgorICAgICAgICA8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIKKyAgICAgICAgICAgICAgbGluay10eXBlPSJzdGFuZGFyZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkNhbGN1bGF0b3JQb3J0Ii8+CiAgICAgICAgIDxqYXZhZXNiOmFydGlmYWN0c3R5cGU+V1NETDExPC9qYXZhZXNiOmFydGlmYWN0c3R5cGU+Ci0JPC9zZXJ2aWNlcz4KKyAgICA8L3NlcnZpY2VzPgogPC9qYmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9wcm92aWRlci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfcHJvdmlkZXIvd2ViLnhtbAppbmRleCAwN2UxNDc3Li43OThjNjliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9wcm92aWRlci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX3Byb3ZpZGVyL3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDZhZTQ5YzguLjBjOGRlYTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ianNyMjA4LWludGVncmF0aW9uLXdlYi1jbGllbnQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii5jb25zdW1lci8vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9jb25zdW1lci9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL2J1aWxkLnhtbAppbmRleCAyNzk5NzM4Li4xNTdlNTQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL2J1aWxkLnhtbApAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmZpbGUiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CiAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InByb3ZpZGVyL2VuZHBvaW50Ii8+CkBAIC05OCw3ICs5OCw3IEBACiAgICAgICAgICAgICAgICB2YWx1ZT0iLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyBodHRwOi8vbG9jYWxob3N0OjgwODAvanNyMjA4LWludGVncmF0aW9uLXdlYi1jbGllbnQvQ2FsY3VsYXRvclNlcnZpY2U/V1NETCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGphdmFjIHNyY2Rpcj0iY29uc3VtZXIiIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMiCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiIAorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IndlYmNsaWVudC8qKiIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jb25zdW1lci9jbGllbnQtd2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi93ZWIueG1sIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NvbnN1bWVyL2NsaWVudC1zdW4td2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9zdW4td2ViLnhtbCIvPgpAQCAtMTc2LDEyICsxNzYsMTIgQEAKICAgICAgICAgPGFyZyBsaW5lPSIke2FwcG5hbWV9LXdlYiIvPgogICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIHRoZSB0ZXN0IGNsaWVudCIvPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNvbnN1bWVyL2NsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL2NvbnN1bWVyL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9jb25zdW1lci9jbGllbnQtd2ViLnhtbAppbmRleCBlZWI3MzBkLi43OTViMDUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL2NvbnN1bWVyL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvY29uc3VtZXIvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9jb25zdW1lci9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9jb25zdW1lci9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IDQ2NmUzNWMuLmI3NjYyZDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvY29uc3VtZXIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL2NvbnN1bWVyL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTY0LDkgKzY0LDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIENhbGN1bGF0b3IgYWRkIFNFUlZJQ0UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiWzNdIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9jb25zdW1lci9qbXMtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9jb25zdW1lci9qbXMtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDkxOGE5NTcuLmQ2MzVmNTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvY29uc3VtZXIvam1zLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL2NvbnN1bWVyL2ptcy1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKQEAgLTIyLDEzICsyMiwxMyBAQAogICAgIHZlcnNpb249IjEuMCIKICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgogICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICAKKwogICA8c2VydmljZS1hc3NlbWJseT4KICAgICA8aWRlbnRpZmljYXRpb24+CiAgICAgICA8bmFtZT5jbGllbnRfd2ViX2NhbGN1bGF0b3JfY29uc3VtZXJfYXNzZW1ibHk8L25hbWU+CiAgICAgICA8ZGVzY3JpcHRpb24+VGhpcyBpcyBhbiBTQSBmb3IgSk1TIEJpbmRpbmc8L2Rlc2NyaXB0aW9uPgogICAgIDwvaWRlbnRpZmljYXRpb24+Ci0gCisKICAgICA8c2VydmljZS11bml0PgogICAgICAgPGlkZW50aWZpY2F0aW9uPgogICAgICAgICAgPG5hbWU+Y2xpZW50X3dlYl9jYWxjdWxhdG9yX2NvbnN1bWVyX3N1PC9uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9jb25zdW1lci9qbXMtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9jb25zdW1lci9qbXMtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDVjNjZiOWUuLjA2ZjZhYWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvY29uc3VtZXIvam1zLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL2NvbnN1bWVyL2ptcy1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwKQEAgLTI4LDUgKzI4LDUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkNhbGN1bGF0b3IiLz4KIDxqYXZhZXNiOmFydGlmYWN0c3R5cGU+V1NETDIwPC9qYXZhZXNiOmFydGlmYWN0c3R5cGU+Ci0JPC9zZXJ2aWNlcz4KKyAgICA8L3NlcnZpY2VzPgogPC9qYmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL2NvbnN1bWVyL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL2NvbnN1bWVyL3dlYi54bWwKaW5kZXggNjc2ZGUyMC4uMzU0NWFlOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9jb25zdW1lci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvY29uc3VtZXIvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3JQb3J0PC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3JQb3J0PC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvclBvcnQ8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3JQb3J0PC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9jb25zdW1lci93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9jb25zdW1lci93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGU2NTNkNDYuLmIzOGNhN2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvY29uc3VtZXIvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL2NvbnN1bWVyL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDggKzI4LDggQEAKIAogICAgICAgIEBXZWJTZXJ2aWNlUmVmKG5hbWU9InN1bi13ZWIuc2VydmljZXJlZi9jYWxjdWxhdG9yIikgQ2FsY3VsYXRvclNlcnZpY2Ugc2VydmljZTsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvcHJvdmlkZXIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9wcm92aWRlci9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKaW5kZXggNjk1MTMyMC4uYmVkMWUwZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9wcm92aWRlci9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9wcm92aWRlci9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKQEAgLTI1LDEzICsyNSwxMyBAQAogICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQ2FsY3VsYXRvciIKICkKIHB1YmxpYyBjbGFzcyBDYWxjdWxhdG9yIHsKLQlwdWJsaWMgQ2FsY3VsYXRvcigpIHt9CisgICAgcHVibGljIENhbGN1bGF0b3IoKSB7fQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiLCBhY3Rpb249InVybjpBZGQiKQotCXB1YmxpYyBpbnQgYWRkKGludCBpLCBpbnQgaikgeworICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0iYWRkIiwgYWN0aW9uPSJ1cm46QWRkIikKKyAgICBwdWJsaWMgaW50IGFkZChpbnQgaSwgaW50IGopIHsKICAgICAgICAgICAgICAgICBpbnQgayA9IGkgK2ogOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpICsgIisiICsgaiArIiA9ICIgKyBrKTsKLSAKLQkJcmV0dXJuIGs7Ci0JfQorCisgICAgICAgIHJldHVybiBrOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvcHJvdmlkZXIvam1zLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvcHJvdmlkZXIvam1zLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCBkZjgxNDU1Li43NzRhYzZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL3Byb3ZpZGVyL2ptcy1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9wcm92aWRlci9qbXMtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCkBAIC0yMiwxMyArMjIsMTMgQEAKICAgICB2ZXJzaW9uPSIxLjAiCiAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgCisKICAgPHNlcnZpY2UtYXNzZW1ibHk+CiAgICAgPGlkZW50aWZpY2F0aW9uPgogICAgICAgPG5hbWU+Y2xpZW50X3dlYl9jYWxjdWxhdG9yX3Byb3ZpZGVyX2Fzc2VtYmx5PC9uYW1lPgogICAgICAgPGRlc2NyaXB0aW9uPlRoaXMgaXMgYW4gU0EgZm9yIEpNUyBCaW5kaW5nPC9kZXNjcmlwdGlvbj4KICAgICA8L2lkZW50aWZpY2F0aW9uPgotIAorCiAgICAgPHNlcnZpY2UtdW5pdD4KICAgICAgIDxpZGVudGlmaWNhdGlvbj4KICAgICAgICAgIDxuYW1lPmNsaWVudF93ZWJfY2FsY3VsYXRvcl9wcm92aWRlcl9zdTwvbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvcHJvdmlkZXIvam1zLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvcHJvdmlkZXIvam1zLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCA4ZjM4ZDA3Li43NTQ2ZWM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL3Byb3ZpZGVyL2ptcy1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9wcm92aWRlci9qbXMtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCkBAIC0yOCw1ICsyOCw1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJDYWxjdWxhdG9yIi8+CiA8amF2YWVzYjphcnRpZmFjdHN0eXBlPldTREwyMDwvamF2YWVzYjphcnRpZmFjdHN0eXBlPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggM2Y4MzAxMC4uZTMwMmQ1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpzcjIwOC1pbnRlZ3JhdGlvbi13ZWItY2xpZW50Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5L2J1aWxkLnhtbAppbmRleCBkYmEwNjliLi5mZTIzYTg4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHkvYnVpbGQueG1sCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgICAgICAgICB2YWx1ZT0iLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyBodHRwOi8vbG9jYWxob3N0OjgwODAvanNyMjA4LWludGVncmF0aW9uLXdlYi1jbGllbnQvd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZT9XU0RMIi8+CiAgICAgPC9hbnRjYWxsPgogICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyIKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIgCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0id2ViY2xpZW50LyoqIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3dlYi54bWwiLz4KICAgICAgIDxjb3B5IGZpbGU9Ii4vY2xpZW50LXN1bi13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3N1bi13ZWIueG1sIi8+CkBAIC0xMTEsMTEgKzExMSwxMSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seS9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5L2NsaWVudC13ZWIueG1sCmluZGV4IGVlYjczMGQuLjc5NWIwNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5L2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5L2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5L2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seS9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IDVlODY1ZDAuLmM0OWY1YjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHkvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDgsNyArNDgsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjUsOSArNjUsOSBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgQ2FsY3VsYXRvciBhZGQgU0VSVklDRSBJUyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJbM10iKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seS9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seS9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKaW5kZXggYjUyMmI5Zi4uMjMyODE3YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHkvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5L2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQpAQCAtMjcsMTQgKzI3LDE0IEBACiAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9DYWxjdWxhdG9yIgogKQogcHVibGljIGNsYXNzIENhbGN1bGF0b3IgewotCXB1YmxpYyBDYWxjdWxhdG9yKCkge30KKyAgICBwdWJsaWMgQ2FsY3VsYXRvcigpIHt9CiAKLQlAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLlJFUVVJUkVTX05FVykKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCi0JcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB7CisgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5SRVFVSVJFU19ORVcpCisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiLCBhY3Rpb249InVybjpBZGQiKQorICAgIHB1YmxpYyBpbnQgYWRkKGludCBpLCBpbnQgaikgewogICAgICAgICAgICAgICAgIGludCBrID0gaSAraiA7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkgKyAiKyIgKyBqICsiID0gIiArIGspOwotIAotCQlyZXR1cm4gazsKLQl9CisKKyAgICAgICAgcmV0dXJuIGs7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHkvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5L3dlYi54bWwKaW5kZXggMDdlMTQ3Ny4uNzk4YzY5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHkvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seS93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5L3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seS93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGJhNDY2MTkuLjNkYjU3YmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5L3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHkvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzAsMjIgKzMwLDIyIEBACiAKICAgICAgICBAV2ViU2VydmljZVJlZihuYW1lPSJzdW4td2ViLnNlcnZpY2VyZWYvY2FsY3VsYXRvciIpIENhbGN1bGF0b3JTZXJ2aWNlIHNlcnZpY2U7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKICAgICAgICAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKLQkgICAgVXNlclRyYW5zYWN0aW9uIHV0ID0gbnVsbDsKKyAgICAgICAgVXNlclRyYW5zYWN0aW9uIHV0ID0gbnVsbDsKICAgICAgICAgICAgIHRyeSB7Ci0JCXV0ID0gKFVzZXJUcmFuc2FjdGlvbikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvVXNlclRyYW5zYWN0aW9uIik7Ci0JCXV0LmJlZ2luKCk7CisgICAgICAgIHV0ID0gKFVzZXJUcmFuc2FjdGlvbikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvVXNlclRyYW5zYWN0aW9uIik7CisgICAgICAgIHV0LmJlZ2luKCk7CiAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBTZXJ2aWNlIGlzIDoiICsgc2VydmljZSk7CiAgICAgICAgICAgICAgICAgQ2FsY3VsYXRvciBwb3J0ID0gc2VydmljZS5nZXRDYWxjdWxhdG9yUG9ydCgpOwogICAgICAgICAgICAgICAgIGludCByZXQgPSBwb3J0LmFkZCgxLCAyKTsKLQkJdXQuY29tbWl0KCk7CisgICAgICAgIHV0LmNvbW1pdCgpOwogICAgICAgICAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CiAgICAgICAgICAgICAgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwpAQCAtNjIsMTIgKzYyLDEyIEBACiAgICAgICAgICAgICAgICAgb3V0LmZsdXNoKCk7CiAgICAgICAgICAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCXRyeSB7Ci0JCQlpZih1dCAhPSBudWxsKQotCQkJCXV0LnJvbGxiYWNrKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIAlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYodXQgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICB1dC5yb2xsYmFjaygpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgfQogICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDMzMTYyNC4uOTBkODQ1MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ianNyMjA4LWludGVncmF0aW9uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQvYnVpbGQueG1sCmluZGV4IGMxNjlkMjEuLjA1ZWNkMWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0L2J1aWxkLnhtbApAQCAtMTA1LDcgKzEwNSw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktYXBwIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGVjaG8gbWVzc2FnZT0iVW5kZXBsb3lpbmcgY2xpZW50IGFwcGxpY2F0aW9uIi8+CiAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KQEAgLTEzMiw4ICsxMzIsOCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5UZXN0Q2xpZW50Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC9jbGllbnQtc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQvY2xpZW50LXN1bi13ZWIueG1sCmluZGV4IGQ0M2U3MGYuLjkwYWVmZjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC9jbGllbnQtc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0L2NsaWVudC1zdW4td2ViLnhtbApAQCAtMjQsMTUgKzI0LDE1IEBACiAgIDxzZXJ2aWNlLXJlZj4KICAgICA8c2VydmljZS1yZWYtbmFtZT5zdW4td2ViLnNlcnZpY2VyZWYvSGVsbG9FSkJTZXJ2aWNlPC9zZXJ2aWNlLXJlZi1uYW1lPgogICAgIDxwb3J0LWluZm8+Ci0JPHNlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPmVuZHBvaW50LmVqYi5IZWxsbzwvc2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+Ci0JPHdzZGwtcG9ydD4KLSAgICAJICA8bmFtZXNwYWNlVVJJPmh0dHA6Ly9lbmRwb2ludC9lamI8L25hbWVzcGFjZVVSST4KLSAgICAJICA8bG9jYWxwYXJ0PkhlbGxvRUpCUG9ydDwvbG9jYWxwYXJ0PgotCTwvd3NkbC1wb3J0PgotICAgIAk8c3R1Yi1wcm9wZXJ0eT4KLQkgIDxuYW1lPmpiaS1lbmFibGVkPC9uYW1lPgotCSAgPHZhbHVlPnRydWU8L3ZhbHVlPgotCTwvc3R1Yi1wcm9wZXJ0eT4KKyAgICA8c2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+ZW5kcG9pbnQuZWpiLkhlbGxvPC9zZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT4KKyAgICA8d3NkbC1wb3J0PgorICAgICAgICAgIDxuYW1lc3BhY2VVUkk+aHR0cDovL2VuZHBvaW50L2VqYjwvbmFtZXNwYWNlVVJJPgorICAgICAgICAgIDxsb2NhbHBhcnQ+SGVsbG9FSkJQb3J0PC9sb2NhbHBhcnQ+CisgICAgPC93c2RsLXBvcnQ+CisgICAgICAgIDxzdHViLXByb3BlcnR5PgorICAgICAgPG5hbWU+amJpLWVuYWJsZWQ8L25hbWU+CisgICAgICA8dmFsdWU+dHJ1ZTwvdmFsdWU+CisgICAgPC9zdHViLXByb3BlcnR5PgogICAgIDwvcG9ydC1pbmZvPgogICAgIDx3c2RsLW92ZXJyaWRlPmh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9IZWxsb0VKQlNlcnZpY2UvSGVsbG9FSkI/V1NETDwvd3NkbC1vdmVycmlkZT4KICAgPC9zZXJ2aWNlLXJlZj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC9jbGllbnQtd2ViLnhtbAppbmRleCA1YWMyNjQ5Li5jZDk1OGE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0L2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggOTNkZjZiZi4uZDVhODE5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTY1LDkgKzY1LDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIEVKQiB3ZWJzZXJ2aWNlIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIltXZWJTdmNUZXN0LUhlbGxvIEFwcHNlcnZlciBUZXN0ZXIgIV0iKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQvZW5kcG9pbnQvZWpiL0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQvZW5kcG9pbnQvZWpiL0hlbGxvLmphdmEKaW5kZXggMjMxNjdlYi4uOTA3MzkzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0L2VuZHBvaW50L2VqYi9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC9lbmRwb2ludC9lamIvSGVsbG8uamF2YQpAQCAtMjIsNSArMjIsNSBAQAogdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZW5kcG9pbnQvZWpiIikKIHB1YmxpYyBpbnRlcmZhY2UgSGVsbG8gewogCi0JcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKTsKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0L2VuZHBvaW50L2VqYi9IZWxsb0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0L2VuZHBvaW50L2VqYi9IZWxsb0VKQi5qYXZhCmluZGV4IDI0OWRmOTAuLjQ1MmM2OTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC9lbmRwb2ludC9lamIvSGVsbG9FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQvZW5kcG9pbnQvZWpiL0hlbGxvRUpCLmphdmEKQEAgLTM1LDM2ICszNSwzNiBAQAogCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5SRVFVSVJFRCkKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogRUpCIENhbGxlZCIpOwotCUNvbm5lY3Rpb24gY29uPW51bGw7Ci0JU3RyaW5nIHRhYmxlTmFtZSA9ICJDVVNUT01FUl9jbSI7Ci0JdHJ5IHsKLQljb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGF1dG8gY29tbWl0ID0gIiArIGNvbi5nZXRBdXRvQ29tbWl0KCkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBFSkIgQ2FsbGVkIik7CisgICAgQ29ubmVjdGlvbiBjb249bnVsbDsKKyAgICBTdHJpbmcgdGFibGVOYW1lID0gIkNVU1RPTUVSX2NtIjsKKyAgICB0cnkgeworICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogYXV0byBjb21taXQgPSAiICsgY29uLmdldEF1dG9Db21taXQoKSk7CiAKLQl1cGRhdGVUYWJsZShjb24sIHRhYmxlTmFtZSwgIlZpa2FzIiwgInZpa2FzQHN1bi5jb20iKTsKLQlyZWFkRGF0YShjb24sIHRhYmxlTmFtZSk7CisgICAgdXBkYXRlVGFibGUoY29uLCB0YWJsZU5hbWUsICJWaWthcyIsICJ2aWthc0BzdW4uY29tIik7CisgICAgcmVhZERhdGEoY29uLCB0YWJsZU5hbWUpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOwogICAgICAgICB9IGZpbmFsbHkgewotCSAgICB0cnkgewotCSAgICBpZihjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzZSkge30KLQl9Ci0JLy9jdHguc2V0Um9sbGJhY2tPbmx5KCk7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmKGNvbiAhPSBudWxsKSBjb24uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIHNlKSB7fQorICAgIH0KKyAgICAvL2N0eC5zZXRSb2xsYmFja09ubHkoKTsKICAgICAgICAgcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvICIgKyB3aG87CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVRhYmxlKENvbm5lY3Rpb24gY29uLCBTdHJpbmcgdGFibGVOYW1lLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGVtYWlsKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcFN0bXQgPSAKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcFN0bXQgPQogICAgICAgICAgICAgIGNvbi5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyAiKyB0YWJsZU5hbWUgKyIgKE5BTUUsIEVNQUlMKSBWQUxVRVMoPyw/KSIpOwotCXBTdG10LnNldFN0cmluZygxLCBuYW1lKTsKLQlwU3RtdC5zZXRTdHJpbmcoMiwgZW1haWwpOworICAgIHBTdG10LnNldFN0cmluZygxLCBuYW1lKTsKKyAgICBwU3RtdC5zZXRTdHJpbmcoMiwgZW1haWwpOwogICAgICAgICBwU3RtdC5leGVjdXRlVXBkYXRlKCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHJlYWREYXRhKENvbm5lY3Rpb24gY29uLCBTdHJpbmcgdGFibGVOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcFN0bXQgPSAKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcFN0bXQgPQogICAgICAgICAgICAgIGNvbi5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgTkFNRSwgRU1BSUwgRlJPTSAiK3RhYmxlTmFtZSk7CiAgICAgICAgIFJlc3VsdFNldCBycyA9IHBTdG10LmV4ZWN1dGVRdWVyeSgpOwogICAgICAgICB3aGlsZShycy5uZXh0KCkpewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0L3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQvd2ViLnhtbAppbmRleCAwN2UxNDc3Li43OThjNjliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDUyYTY1NTQuLjE1YjQ0NzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zNiw4ICszNiw4IEBACiAgICAgICAgSGVsbG9FSkJTZXJ2aWNlIHNlcnZpY2U7CiAgICAgICAgQFJlc291cmNlKG1hcHBlZE5hbWU9ImpkYmMvX19kZWZhdWx0IikgcHJpdmF0ZSBEYXRhU291cmNlIGRzOwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApAQCAtNDUsMjEgKzQ1LDIxIEBACiAgICAgICAgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgICBVc2VyVHJhbnNhY3Rpb24gdXQgPSBudWxsOwogICAgICAgICAgICAgLy8gQ3JlYXRlIFRhYmxlIHdpdGggbmFtZSBDVVNUT01FUl9jbS4gVGhpcyBuYW1lIHdpbGwgYmUgdXNlZCBpbiB0aGUgRUpCCi0JICAgIFN0cmluZyB0YWJsZU5hbWUgPSAiQ1VTVE9NRVJfY20iOwotCSAgICBTdHJpbmcgbmFtZUVudHJ5ID0gIlZpa2FzIjsKLQkgICAgU3RyaW5nIGVtYWlsRW50cnk9ICJ2aWthc0BzdW4uY29tIjsKKyAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSA9ICJDVVNUT01FUl9jbSI7CisgICAgICAgIFN0cmluZyBuYW1lRW50cnkgPSAiVmlrYXMiOworICAgICAgICBTdHJpbmcgZW1haWxFbnRyeT0gInZpa2FzQHN1bi5jb20iOwogICAgICAgICAgICAgdHJ5IHsKLQkgICAgICAgIENvbm5lY3Rpb24gY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICAgICAgLy8gYXV0b2NvbW1pdCBpcyBtYWRlIHRydWUgc28gdGhhdCB0aGUgdGFibGUgaXMgY3JlYXRlZCBhbmQgZHJvcHBlZCBpbW1lZGlhdGVseQogICAgICAgICAgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KHRydWUpOwotCSAgICAgICAgY3JlYXRlVGFibGUoY29uLCB0YWJsZU5hbWUpOworICAgICAgICAgICAgY3JlYXRlVGFibGUoY29uLCB0YWJsZU5hbWUpOwogICAgICAgICAgICAgICAgIHV0ID0gKFVzZXJUcmFuc2FjdGlvbikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvVXNlclRyYW5zYWN0aW9uIik7CiAgICAgICAgICAgICAgICAgdXQuYmVnaW4oKTsKIAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFNlcnZpY2UgaXMgOiIgKyBzZXJ2aWNlKTsKLQkJSGVsbG8gcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9FSkJQb3J0KCk7Ci0gICAgICAgICAgICAgICAgCi0JCVN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKKyAgICAgICAgSGVsbG8gcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9FSkJQb3J0KCk7CisKKyAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuIHZhbHVlIGZyb20gd2Vic2VydmljZToiK3JldCk7CiAKICAgICAgICAgICAgICAgICBpZih1dC5nZXRTdGF0dXMoKSAhPSBTdGF0dXMuU1RBVFVTX0FDVElWRSkgewpAQCAtODUsMTUgKzg1LDE1IEBACiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIlsiICsgcmV0ICsgIl0iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9ib2R5PiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2h0bWw+Iik7Ci0JCWRyb3BUYWJsZShjb24sIHRhYmxlTmFtZSk7CisgICAgICAgIGRyb3BUYWJsZShjb24sIHRhYmxlTmFtZSk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgfQorICAgICAgICB9CiAgICAgICAgfQogCiAgICAgICAgLy8gdXNlIHRoaXMgdGFibGUgaW4gdGhlIEVKQiB3ZWJzZXJ2aWNlCiAgICAgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVRhYmxlKENvbm5lY3Rpb24gY29uLCBTdHJpbmcgdGFibGVOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGF1dG8gY29tbWl0ID0gIiArIGNvbi5nZXRBdXRvQ29tbWl0KCkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogYXV0byBjb21taXQgPSAiICsgY29uLmdldEF1dG9Db21taXQoKSk7CiAgICAgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9CiAgICAgICAgICAgICBjb24ucHJlcGFyZVN0YXRlbWVudCgiQ1JFQVRFIFRBQkxFICIrdGFibGVOYW1lKyIgKE5BTUUgVkFSQ0hBUigzMCkgTk9UIE5VTEwgUFJJTUFSWSBLRVksIEVNQUlMIFZBUkNIQVIoMzApKSIpOwogICAgICAgICAgICAgcFN0bXQuZXhlY3V0ZVVwZGF0ZSgpOwpAQCAtMTA2LDE5ICsxMDYsMTkgQEAKIAogICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIEVKQiB3ZWJzZXJ2aWNlIGhhcyB1cGRhdGVkIHRoZSBkYXRhIGluIHRoZSB0YWJsZS4KICAgICAgICBwcml2YXRlIGJvb2xlYW4gaXNEYXRhVXBkYXRlZChDb25uZWN0aW9uIGNvbiwgU3RyaW5nIHRhYmxlTmFtZSwgU3RyaW5nIG5hbWUsIFN0cmluZyBlbWFpbCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAgIFByZXBhcmVkU3RhdGVtZW50IHBTdG10ID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBOQU1FLCBFTUFJTCBGUk9NICIrdGFibGVOYW1lKTsKLQkgICAgUmVzdWx0U2V0IHJzID0gcFN0bXQuZXhlY3V0ZVF1ZXJ5KCk7Ci0JICAgIHRyeSB7Ci0JICAgICAgd2hpbGUocnMubmV4dCgpKSB7Ci0JCVN0cmluZyBkYl9OYW1lICA9IHJzLmdldFN0cmluZygxKTsKLQkJU3RyaW5nIGRiX0VtYWlsID0gcnMuZ2V0U3RyaW5nKDIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIk5BTUU9IitkYl9OYW1lKyIsIEVNQUlMPSIrZGJfRW1haWwpOwotCQlpZihkYl9OYW1lLmVxdWFscyhuYW1lKSAmJiBkYl9FbWFpbC5lcXVhbHMoZW1haWwpKQotCQkgICAgcmV0dXJuIHRydWU7Ci0JICAgICAgfQotCSAgICB9IGZpbmFsbHkgewotCSAgICAgIHJzLmNsb3NlKCk7Ci0JICAgIH0KLQkgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgTkFNRSwgRU1BSUwgRlJPTSAiK3RhYmxlTmFtZSk7CisgICAgICAgIFJlc3VsdFNldCBycyA9IHBTdG10LmV4ZWN1dGVRdWVyeSgpOworICAgICAgICB0cnkgeworICAgICAgICAgIHdoaWxlKHJzLm5leHQoKSkgeworICAgICAgICBTdHJpbmcgZGJfTmFtZSAgPSBycy5nZXRTdHJpbmcoMSk7CisgICAgICAgIFN0cmluZyBkYl9FbWFpbCA9IHJzLmdldFN0cmluZygyKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOQU1FPSIrZGJfTmFtZSsiLCBFTUFJTD0iK2RiX0VtYWlsKTsKKyAgICAgICAgaWYoZGJfTmFtZS5lcXVhbHMobmFtZSkgJiYgZGJfRW1haWwuZXF1YWxzKGVtYWlsKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICBycy5jbG9zZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDMzMTYyNC4uOTBkODQ1MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdDEvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqc3IyMDgtaW50ZWdyYXRpb24iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL2J1aWxkLnhtbAppbmRleCBjMTY5ZDIxLi4wNWVjZDFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL2J1aWxkLnhtbApAQCAtMTA1LDcgKzEwNSw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktYXBwIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGVjaG8gbWVzc2FnZT0iVW5kZXBsb3lpbmcgY2xpZW50IGFwcGxpY2F0aW9uIi8+CiAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KQEAgLTEzMiw4ICsxMzIsOCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5UZXN0Q2xpZW50Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdDEvY2xpZW50LXN1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS9jbGllbnQtc3VuLXdlYi54bWwKaW5kZXggZDQzZTcwZi4uOTBhZWZmMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS9jbGllbnQtc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS9jbGllbnQtc3VuLXdlYi54bWwKQEAgLTI0LDE1ICsyNCwxNSBAQAogICA8c2VydmljZS1yZWY+CiAgICAgPHNlcnZpY2UtcmVmLW5hbWU+c3VuLXdlYi5zZXJ2aWNlcmVmL0hlbGxvRUpCU2VydmljZTwvc2VydmljZS1yZWYtbmFtZT4KICAgICA8cG9ydC1pbmZvPgotCTxzZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT5lbmRwb2ludC5lamIuSGVsbG88L3NlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPgotCTx3c2RsLXBvcnQ+Ci0gICAgCSAgPG5hbWVzcGFjZVVSST5odHRwOi8vZW5kcG9pbnQvZWpiPC9uYW1lc3BhY2VVUkk+Ci0gICAgCSAgPGxvY2FscGFydD5IZWxsb0VKQlBvcnQ8L2xvY2FscGFydD4KLQk8L3dzZGwtcG9ydD4KLSAgICAJPHN0dWItcHJvcGVydHk+Ci0JICA8bmFtZT5qYmktZW5hYmxlZDwvbmFtZT4KLQkgIDx2YWx1ZT50cnVlPC92YWx1ZT4KLQk8L3N0dWItcHJvcGVydHk+CisgICAgPHNlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPmVuZHBvaW50LmVqYi5IZWxsbzwvc2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+CisgICAgPHdzZGwtcG9ydD4KKyAgICAgICAgICA8bmFtZXNwYWNlVVJJPmh0dHA6Ly9lbmRwb2ludC9lamI8L25hbWVzcGFjZVVSST4KKyAgICAgICAgICA8bG9jYWxwYXJ0PkhlbGxvRUpCUG9ydDwvbG9jYWxwYXJ0PgorICAgIDwvd3NkbC1wb3J0PgorICAgICAgICA8c3R1Yi1wcm9wZXJ0eT4KKyAgICAgIDxuYW1lPmpiaS1lbmFibGVkPC9uYW1lPgorICAgICAgPHZhbHVlPnRydWU8L3ZhbHVlPgorICAgIDwvc3R1Yi1wcm9wZXJ0eT4KICAgICA8L3BvcnQtaW5mbz4KICAgICA8d3NkbC1vdmVycmlkZT5odHRwOi8vbG9jYWxob3N0OjgwODAvSGVsbG9FSkJTZXJ2aWNlL0hlbGxvRUpCP1dTREw8L3dzZGwtb3ZlcnJpZGU+CiAgIDwvc2VydmljZS1yZWY+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS9jbGllbnQtd2ViLnhtbAppbmRleCA1YWMyNjQ5Li5jZDk1OGE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdDEvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IDg5MzUzYzEuLmFmNTEyZGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdDEvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTY1LDkgKzY1LDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIEVKQiB3ZWJzZXJ2aWNlIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIltXZWJTdmNUZXN0LUhlbGxvIEFwcHNlcnZlciBUZXN0ZXIgIV0iKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL2VuZHBvaW50L2VqYi9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS9lbmRwb2ludC9lamIvSGVsbG8uamF2YQppbmRleCAyMzE2N2ViLi45MDczOTMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL2VuZHBvaW50L2VqYi9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdDEvZW5kcG9pbnQvZWpiL0hlbGxvLmphdmEKQEAgLTIyLDUgKzIyLDUgQEAKIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2VuZHBvaW50L2VqYiIpCiBwdWJsaWMgaW50ZXJmYWNlIEhlbGxvIHsKIAotCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobyk7CisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdDEvZW5kcG9pbnQvZWpiL0hlbGxvRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL2VuZHBvaW50L2VqYi9IZWxsb0VKQi5qYXZhCmluZGV4IGIwYjUwNGUuLmI1ZTg0YjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdDEvZW5kcG9pbnQvZWpiL0hlbGxvRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS9lbmRwb2ludC9lamIvSGVsbG9FSkIuamF2YQpAQCAtMzUsMzkgKzM1LDM5IEBACiAKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLlJFUVVJUkVEKQogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgewotCVN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBFSkIgQ2FsbGVkIik7Ci0JQ29ubmVjdGlvbiBjb249bnVsbDsKLQlTdHJpbmcgdGFibGVOYW1lID0gIkNVU1RPTUVSX2NtMSI7Ci0JU3RyaW5nIG5hbWVFbnRyeSA9ICJWaWthcyI7Ci0JU3RyaW5nIGVtYWlsRW50cnk9ICJ2aWthc0BzdW4uY29tIjsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogRUpCIENhbGxlZCIpOworICAgIENvbm5lY3Rpb24gY29uPW51bGw7CisgICAgU3RyaW5nIHRhYmxlTmFtZSA9ICJDVVNUT01FUl9jbTEiOworICAgIFN0cmluZyBuYW1lRW50cnkgPSAiVmlrYXMiOworICAgIFN0cmluZyBlbWFpbEVudHJ5PSAidmlrYXNAc3VuLmNvbSI7CiAKLQl0cnkgewotCWNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogYXV0byBjb21taXQgPSAiICsgY29uLmdldEF1dG9Db21taXQoKSk7CisgICAgdHJ5IHsKKyAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGF1dG8gY29tbWl0ID0gIiArIGNvbi5nZXRBdXRvQ29tbWl0KCkpOwogCi0JdXBkYXRlVGFibGUoY29uLCB0YWJsZU5hbWUsIG5hbWVFbnRyeSwgZW1haWxFbnRyeSk7Ci0JcmVhZERhdGEoY29uLCB0YWJsZU5hbWUpOworICAgIHVwZGF0ZVRhYmxlKGNvbiwgdGFibGVOYW1lLCBuYW1lRW50cnksIGVtYWlsRW50cnkpOworICAgIHJlYWREYXRhKGNvbiwgdGFibGVOYW1lKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKICAgICAgICAgfSBmaW5hbGx5IHsKLQkgICAgdHJ5IHsKLQkgICAgaWYoY29uICE9IG51bGwpIGNvbi5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gc2UpIHt9Ci0JfQotCS8vY3R4LnNldFJvbGxiYWNrT25seSgpOworICAgICAgICB0cnkgeworICAgICAgICBpZihjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzZSkge30KKyAgICB9CisgICAgLy9jdHguc2V0Um9sbGJhY2tPbmx5KCk7CiAgICAgICAgIHJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB1cGRhdGVUYWJsZShDb25uZWN0aW9uIGNvbiwgU3RyaW5nIHRhYmxlTmFtZSwgU3RyaW5nIG5hbWUsIFN0cmluZyBlbWFpbCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBTdG10ID0gCisgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBTdG10ID0KICAgICAgICAgICAgICBjb24ucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gIisgdGFibGVOYW1lICsiIChOQU1FLCBFTUFJTCkgVkFMVUVTKD8sPykiKTsKLQlwU3RtdC5zZXRTdHJpbmcoMSwgbmFtZSk7Ci0JcFN0bXQuc2V0U3RyaW5nKDIsIGVtYWlsKTsKKyAgICBwU3RtdC5zZXRTdHJpbmcoMSwgbmFtZSk7CisgICAgcFN0bXQuc2V0U3RyaW5nKDIsIGVtYWlsKTsKICAgICAgICAgcFN0bXQuZXhlY3V0ZVVwZGF0ZSgpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCByZWFkRGF0YShDb25uZWN0aW9uIGNvbiwgU3RyaW5nIHRhYmxlTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBTdG10ID0gCisgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBTdG10ID0KICAgICAgICAgICAgICBjb24ucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIE5BTUUsIEVNQUlMIEZST00gIit0YWJsZU5hbWUpOwogICAgICAgICBSZXN1bHRTZXQgcnMgPSBwU3RtdC5leGVjdXRlUXVlcnkoKTsKICAgICAgICAgd2hpbGUocnMubmV4dCgpKXsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdDEvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdDEvd2ViLnhtbAppbmRleCAwN2UxNDc3Li43OThjNjliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdDEvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdDEvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQppbmRleCA1ZDQ1Nzk2Li5mY2YwZDAwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zNiw4ICszNiw4IEBACiAgICAgICAgSGVsbG9FSkJTZXJ2aWNlIHNlcnZpY2U7CiAgICAgICAgQFJlc291cmNlKG1hcHBlZE5hbWU9ImpkYmMvX19kZWZhdWx0IikgcHJpdmF0ZSBEYXRhU291cmNlIGRzOwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApAQCAtNDUsMzEgKzQ1LDMxIEBACiAgICAgICAgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgICBVc2VyVHJhbnNhY3Rpb24gdXQgPSBudWxsOwogICAgICAgICAgICAgLy8gQ3JlYXRlIFRhYmxlIHdpdGggbmFtZSBDVVNUT01FUl9jbTEuIFRoaXMgbmFtZSB3aWxsIGJlIHVzZWQgaW4gdGhlIEVKQgotCSAgICBTdHJpbmcgdGFibGVOYW1lID0gIkNVU1RPTUVSX2NtMSI7Ci0JICAgIFN0cmluZ1tdIG5hbWVzID0geyJWaWthcyIsICJWaWthc0F3YXN0aGkifTsKLQkgICAgU3RyaW5nW10gZW1haWxzPSB7InZpa2FzQHN1bi5jb20iLCAiVmlrYXNBQHN1bi5jb20ifTsKKyAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSA9ICJDVVNUT01FUl9jbTEiOworICAgICAgICBTdHJpbmdbXSBuYW1lcyA9IHsiVmlrYXMiLCAiVmlrYXNBd2FzdGhpIn07CisgICAgICAgIFN0cmluZ1tdIGVtYWlscz0geyJ2aWthc0BzdW4uY29tIiwgIlZpa2FzQUBzdW4uY29tIn07CiAgICAgICAgICAgICB0cnkgewotCSAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgICAgICBjcmVhdGVUYWJsZShjb24sIHRhYmxlTmFtZSk7CisgICAgICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgIGNyZWF0ZVRhYmxlKGNvbiwgdGFibGVOYW1lKTsKICAgICAgICAgICAgICAgICB1dCA9IChVc2VyVHJhbnNhY3Rpb24pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpjb21wL1VzZXJUcmFuc2FjdGlvbiIpOwogICAgICAgICAgICAgICAgIHV0LmJlZ2luKCk7CiAKLQkJdXBkYXRlVGFibGUoY29uLCB0YWJsZU5hbWUsIG5hbWVzWzFdLCBlbWFpbHNbMV0pOworICAgICAgICB1cGRhdGVUYWJsZShjb24sIHRhYmxlTmFtZSwgbmFtZXNbMV0sIGVtYWlsc1sxXSk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgU2VydmljZSBpcyA6IiArIHNlcnZpY2UpOwotCQlIZWxsbyBwb3J0ID0gc2VydmljZS5nZXRIZWxsb0VKQlBvcnQoKTsKLSAgICAgICAgICAgICAgICAKLQkJU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIpOworICAgICAgICBIZWxsbyBwb3J0ID0gc2VydmljZS5nZXRIZWxsb0VKQlBvcnQoKTsKKworICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXR1cm4gdmFsdWUgZnJvbSB3ZWJzZXJ2aWNlOiIrcmV0KTsKIAotCQlpZih1dC5nZXRTdGF0dXMoKSAhPSBTdGF0dXMuU1RBVFVTX0FDVElWRSkgeworICAgICAgICBpZih1dC5nZXRTdGF0dXMoKSAhPSBTdGF0dXMuU1RBVFVTX0FDVElWRSkgewogICAgICAgICAgICAgICAgICAgICByZXQgKz0gIkZBSUxFRCI7Ci0JCX0gZWxzZSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogY29tbWl0dGluZyB0cmFuc2FjdGlvbiIpOwotCQkgICAgdXQuY29tbWl0KCk7Ci0JCSAgICBpZighaXNEYXRhVXBkYXRlZChjb24sIHRhYmxlTmFtZSwgbmFtZXMsIGVtYWlscykpIHsKLSAgICAgICAgICAgICAgICAJcmV0ICs9ICJGQUlMRUQiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24iKTsKKyAgICAgICAgICAgIHV0LmNvbW1pdCgpOworICAgICAgICAgICAgaWYoIWlzRGF0YVVwZGF0ZWQoY29uLCB0YWJsZU5hbWUsIG5hbWVzLCBlbWFpbHMpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldCArPSAiRkFJTEVEIjsKICAgICAgICAgICAgICAgICAgICAgfQotCQl9CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwogICAgICAgICAgICAgICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKQEAgLTgzLDU1ICs4Myw1NSBAQAogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJbIiArIHJldCArICJdIik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvYm9keT4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9odG1sPiIpOwotCQlkcm9wVGFibGUoY29uLCB0YWJsZU5hbWUpOworICAgICAgICBkcm9wVGFibGUoY29uLCB0YWJsZU5hbWUpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0KKyAgICAgICAgfQogICAgICAgIH0KIAogICAgICAgIC8vIHVzZSB0aGlzIHRhYmxlIGluIHRoZSBFSkIgd2Vic2VydmljZQogICAgICAgIHByaXZhdGUgdm9pZCBjcmVhdGVUYWJsZShDb25uZWN0aW9uIGNvbiwgU3RyaW5nIHRhYmxlTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAgIC8vIGF1dG9jb21taXQgaXMgbWFkZSB0cnVlIHNvIHRoYXQgdGhlIHRhYmxlIGlzIGNyZWF0ZWQgaW1tZWRpYXRlbHkKLQkgICAgYm9vbGVhbiBhdXRvQ29tbWl0ID0gY29uLmdldEF1dG9Db21taXQoKTsKLQkgICAgY29uLnNldEF1dG9Db21taXQodHJ1ZSk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBhdXRvIGNvbW1pdCA9ICIgKyBjb24uZ2V0QXV0b0NvbW1pdCgpKTsKKyAgICAgICAgLy8gYXV0b2NvbW1pdCBpcyBtYWRlIHRydWUgc28gdGhhdCB0aGUgdGFibGUgaXMgY3JlYXRlZCBpbW1lZGlhdGVseQorICAgICAgICBib29sZWFuIGF1dG9Db21taXQgPSBjb24uZ2V0QXV0b0NvbW1pdCgpOworICAgICAgICBjb24uc2V0QXV0b0NvbW1pdCh0cnVlKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGF1dG8gY29tbWl0ID0gIiArIGNvbi5nZXRBdXRvQ29tbWl0KCkpOwogICAgICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcFN0bXQgPQogICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoIkNSRUFURSBUQUJMRSAiK3RhYmxlTmFtZSsiIChOQU1FIFZBUkNIQVIoMzApIE5PVCBOVUxMIFBSSU1BUlkgS0VZLCBFTUFJTCBWQVJDSEFSKDMwKSkiKTsKICAgICAgICAgICAgIHBTdG10LmV4ZWN1dGVVcGRhdGUoKTsKLQkgICAgY29uLnNldEF1dG9Db21taXQoYXV0b0NvbW1pdCk7CisgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGF1dG9Db21taXQpOwogICAgICAgIH0KIAogICAgICAgIHByaXZhdGUgdm9pZCBkcm9wVGFibGUoQ29ubmVjdGlvbiBjb24sIFN0cmluZyB0YWJsZU5hbWUpIHRocm93cyBFeGNlcHRpb24gewotCSAgICBib29sZWFuIGF1dG9Db21taXQgPSBjb24uZ2V0QXV0b0NvbW1pdCgpOwotCSAgICBjb24uc2V0QXV0b0NvbW1pdCh0cnVlKTsKKyAgICAgICAgYm9vbGVhbiBhdXRvQ29tbWl0ID0gY29uLmdldEF1dG9Db21taXQoKTsKKyAgICAgICAgY29uLnNldEF1dG9Db21taXQodHJ1ZSk7CiAgICAgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KCJEUk9QIFRBQkxFICIrdGFibGVOYW1lKTsKICAgICAgICAgICAgIHBTdG10LmV4ZWN1dGVVcGRhdGUoKTsKLQkgICAgY29uLnNldEF1dG9Db21taXQoYXV0b0NvbW1pdCk7CisgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGF1dG9Db21taXQpOwogICAgICAgIH0KIAogICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIEVKQiB3ZWJzZXJ2aWNlIGhhcyB1cGRhdGVkIHRoZSBkYXRhIGluIHRoZSB0YWJsZS4KICAgICAgICBwcml2YXRlIGJvb2xlYW4gaXNEYXRhVXBkYXRlZChDb25uZWN0aW9uIGNvbiwgU3RyaW5nIHRhYmxlTmFtZSwgU3RyaW5nW10gbmFtZXMsIFN0cmluZ1tdIGVtYWlscykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAgIFByZXBhcmVkU3RhdGVtZW50IHBTdG10ID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBOQU1FLCBFTUFJTCBGUk9NICIrdGFibGVOYW1lKTsKLQkgICAgUmVzdWx0U2V0IHJzID0gcFN0bXQuZXhlY3V0ZVF1ZXJ5KCk7Ci0JICAgIGludCBhbGxEYXRhQ291bnQgPSAwOwotCSAgICB3aGlsZShycy5uZXh0KCkpIHsKLQkJU3RyaW5nIGRiX05hbWUgID0gcnMuZ2V0U3RyaW5nKDEpOwotCQlTdHJpbmcgZGJfRW1haWwgPSBycy5nZXRTdHJpbmcoMik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiTkFNRT0iK2RiX05hbWUrIiwgRU1BSUw9IitkYl9FbWFpbCk7Ci0JICAgICAgCWZvciAoaW50IGk9MDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSAKLQkJICAgIGlmKGRiX05hbWUuZXF1YWxzKG5hbWVzW2ldKSAmJiBkYl9FbWFpbC5lcXVhbHMoZW1haWxzW2ldKSkKLQkJCWFsbERhdGFDb3VudCsrOwotCSAgICB9Ci0JICAgIHJzLmNsb3NlKCk7Ci0JICAgIHJldHVybiAoYWxsRGF0YUNvdW50ID09IG5hbWVzLmxlbmd0aCk7CisgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBTdG10ID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBOQU1FLCBFTUFJTCBGUk9NICIrdGFibGVOYW1lKTsKKyAgICAgICAgUmVzdWx0U2V0IHJzID0gcFN0bXQuZXhlY3V0ZVF1ZXJ5KCk7CisgICAgICAgIGludCBhbGxEYXRhQ291bnQgPSAwOworICAgICAgICB3aGlsZShycy5uZXh0KCkpIHsKKyAgICAgICAgU3RyaW5nIGRiX05hbWUgID0gcnMuZ2V0U3RyaW5nKDEpOworICAgICAgICBTdHJpbmcgZGJfRW1haWwgPSBycy5nZXRTdHJpbmcoMik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTkFNRT0iK2RiX05hbWUrIiwgRU1BSUw9IitkYl9FbWFpbCk7CisgICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgaWYoZGJfTmFtZS5lcXVhbHMobmFtZXNbaV0pICYmIGRiX0VtYWlsLmVxdWFscyhlbWFpbHNbaV0pKQorICAgICAgICAgICAgYWxsRGF0YUNvdW50Kys7CisgICAgICAgIH0KKyAgICAgICAgcnMuY2xvc2UoKTsKKyAgICAgICAgcmV0dXJuIChhbGxEYXRhQ291bnQgPT0gbmFtZXMubGVuZ3RoKTsKICAgICAgICB9CiAKLSAgICAgICBwcml2YXRlIHZvaWQgdXBkYXRlVGFibGUoQ29ubmVjdGlvbiBjb24sIFN0cmluZyB0YWJsZU5hbWUsIFN0cmluZyBuYW1lLCBTdHJpbmcgZW1haWwpIAotCQl0aHJvd3MgRXhjZXB0aW9uIHsKLQkgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9IAotCQljb24ucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gIisgdGFibGVOYW1lICsiIChOQU1FLCBFTUFJTCkgVkFMVUVTKD8sPykiKTsKLQkgICBwU3RtdC5zZXRTdHJpbmcoMSwgbmFtZSk7Ci0JICAgcFN0bXQuc2V0U3RyaW5nKDIsIGVtYWlsKTsKLQkgICBwU3RtdC5leGVjdXRlVXBkYXRlKCk7CisgICAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVRhYmxlKENvbm5lY3Rpb24gY29uLCBTdHJpbmcgdGFibGVOYW1lLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGVtYWlsKQorICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9CisgICAgICAgIGNvbi5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyAiKyB0YWJsZU5hbWUgKyIgKE5BTUUsIEVNQUlMKSBWQUxVRVMoPyw/KSIpOworICAgICAgIHBTdG10LnNldFN0cmluZygxLCBuYW1lKTsKKyAgICAgICBwU3RtdC5zZXRTdHJpbmcoMiwgZW1haWwpOworICAgICAgIHBTdG10LmV4ZWN1dGVVcGRhdGUoKTsKICAgICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjay9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2svYnVpbGQucHJvcGVydGllcwppbmRleCAwMzMxNjI0Li45MGQ4NDUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjay9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ianNyMjA4LWludGVncmF0aW9uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL2J1aWxkLnhtbAppbmRleCBjMTY5ZDIxLi4wNWVjZDFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjay9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2svYnVpbGQueG1sCkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1hcHAiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJVbmRlcGxveWluZyBjbGllbnQgYXBwbGljYXRpb24iLz4KICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgpAQCAtMTMyLDggKzEzMiw4IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LlRlc3RDbGllbnQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2svY2xpZW50LXN1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2svY2xpZW50LXN1bi13ZWIueG1sCmluZGV4IGQ0M2U3MGYuLjkwYWVmZjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL2NsaWVudC1zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjay9jbGllbnQtc3VuLXdlYi54bWwKQEAgLTI0LDE1ICsyNCwxNSBAQAogICA8c2VydmljZS1yZWY+CiAgICAgPHNlcnZpY2UtcmVmLW5hbWU+c3VuLXdlYi5zZXJ2aWNlcmVmL0hlbGxvRUpCU2VydmljZTwvc2VydmljZS1yZWYtbmFtZT4KICAgICA8cG9ydC1pbmZvPgotCTxzZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT5lbmRwb2ludC5lamIuSGVsbG88L3NlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPgotCTx3c2RsLXBvcnQ+Ci0gICAgCSAgPG5hbWVzcGFjZVVSST5odHRwOi8vZW5kcG9pbnQvZWpiPC9uYW1lc3BhY2VVUkk+Ci0gICAgCSAgPGxvY2FscGFydD5IZWxsb0VKQlBvcnQ8L2xvY2FscGFydD4KLQk8L3dzZGwtcG9ydD4KLSAgICAJPHN0dWItcHJvcGVydHk+Ci0JICA8bmFtZT5qYmktZW5hYmxlZDwvbmFtZT4KLQkgIDx2YWx1ZT50cnVlPC92YWx1ZT4KLQk8L3N0dWItcHJvcGVydHk+CisgICAgPHNlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPmVuZHBvaW50LmVqYi5IZWxsbzwvc2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+CisgICAgPHdzZGwtcG9ydD4KKyAgICAgICAgICA8bmFtZXNwYWNlVVJJPmh0dHA6Ly9lbmRwb2ludC9lamI8L25hbWVzcGFjZVVSST4KKyAgICAgICAgICA8bG9jYWxwYXJ0PkhlbGxvRUpCUG9ydDwvbG9jYWxwYXJ0PgorICAgIDwvd3NkbC1wb3J0PgorICAgICAgICA8c3R1Yi1wcm9wZXJ0eT4KKyAgICAgIDxuYW1lPmpiaS1lbmFibGVkPC9uYW1lPgorICAgICAgPHZhbHVlPnRydWU8L3ZhbHVlPgorICAgIDwvc3R1Yi1wcm9wZXJ0eT4KICAgICA8L3BvcnQtaW5mbz4KICAgICA8d3NkbC1vdmVycmlkZT5odHRwOi8vbG9jYWxob3N0OjgwODAvSGVsbG9FSkJTZXJ2aWNlL0hlbGxvRUpCP1dTREw8L3dzZGwtb3ZlcnJpZGU+CiAgIDwvc2VydmljZS1yZWY+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjay9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL2NsaWVudC13ZWIueG1sCmluZGV4IDVhYzI2NDkuLmNkOTU4YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjay9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IDFkMzNlYWIuLjZkYjgzYzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2svY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjQsOSArNjQsOSBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgRUpCIHdlYnNlcnZpY2UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiW1dlYlN2Y1Rlc3QtSGVsbG8gQXBwc2VydmVyIFRlc3RlciAhXSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL2VuZHBvaW50L2VqYi9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2svZW5kcG9pbnQvZWpiL0hlbGxvLmphdmEKaW5kZXggMjMxNjdlYi4uOTA3MzkzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2svZW5kcG9pbnQvZWpiL0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2svZW5kcG9pbnQvZWpiL0hlbGxvLmphdmEKQEAgLTIyLDUgKzIyLDUgQEAKIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2VuZHBvaW50L2VqYiIpCiBwdWJsaWMgaW50ZXJmYWNlIEhlbGxvIHsKIAotCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobyk7CisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL2VuZHBvaW50L2VqYi9IZWxsb0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2svZW5kcG9pbnQvZWpiL0hlbGxvRUpCLmphdmEKaW5kZXggOTFlYTdlNi4uMDUzZGRiYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2svZW5kcG9pbnQvZWpiL0hlbGxvRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2svZW5kcG9pbnQvZWpiL0hlbGxvRUpCLmphdmEKQEAgLTM1LDM2ICszNSwzNiBAQAogCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5SRVFVSVJFRCkKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogRUpCIENhbGxlZCIpOwotCUNvbm5lY3Rpb24gY29uPW51bGw7Ci0JU3RyaW5nIHRhYmxlTmFtZSA9ICJDVVNUT01FUl9yYiI7Ci0JdHJ5IHsKLQljb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGF1dG8gY29tbWl0ID0gIiArIGNvbi5nZXRBdXRvQ29tbWl0KCkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBFSkIgQ2FsbGVkIik7CisgICAgQ29ubmVjdGlvbiBjb249bnVsbDsKKyAgICBTdHJpbmcgdGFibGVOYW1lID0gIkNVU1RPTUVSX3JiIjsKKyAgICB0cnkgeworICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogYXV0byBjb21taXQgPSAiICsgY29uLmdldEF1dG9Db21taXQoKSk7CiAKLQl1cGRhdGVUYWJsZShjb24sIHRhYmxlTmFtZSwgIlZpa2FzIiwgInZpa2FzQHN1bi5jb20iKTsKLQlyZWFkRGF0YShjb24sIHRhYmxlTmFtZSk7CisgICAgdXBkYXRlVGFibGUoY29uLCB0YWJsZU5hbWUsICJWaWthcyIsICJ2aWthc0BzdW4uY29tIik7CisgICAgcmVhZERhdGEoY29uLCB0YWJsZU5hbWUpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOwogICAgICAgICB9IGZpbmFsbHkgewotCSAgICB0cnkgewotCSAgICBpZihjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzZSkge30KLQl9Ci0JY3R4LnNldFJvbGxiYWNrT25seSgpOworICAgICAgICB0cnkgeworICAgICAgICBpZihjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzZSkge30KKyAgICB9CisgICAgY3R4LnNldFJvbGxiYWNrT25seSgpOwogICAgICAgICByZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHdobzsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgdXBkYXRlVGFibGUoQ29ubmVjdGlvbiBjb24sIFN0cmluZyB0YWJsZU5hbWUsIFN0cmluZyBuYW1lLCBTdHJpbmcgZW1haWwpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9IAorICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9CiAgICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPICIrIHRhYmxlTmFtZSArIiAoTkFNRSwgRU1BSUwpIFZBTFVFUyg/LD8pIik7Ci0JcFN0bXQuc2V0U3RyaW5nKDEsIG5hbWUpOwotCXBTdG10LnNldFN0cmluZygyLCBlbWFpbCk7CisgICAgcFN0bXQuc2V0U3RyaW5nKDEsIG5hbWUpOworICAgIHBTdG10LnNldFN0cmluZygyLCBlbWFpbCk7CiAgICAgICAgIHBTdG10LmV4ZWN1dGVVcGRhdGUoKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcmVhZERhdGEoQ29ubmVjdGlvbiBjb24sIFN0cmluZyB0YWJsZU5hbWUpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9IAorICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9CiAgICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBOQU1FLCBFTUFJTCBGUk9NICIrdGFibGVOYW1lKTsKICAgICAgICAgUmVzdWx0U2V0IHJzID0gcFN0bXQuZXhlY3V0ZVF1ZXJ5KCk7CiAgICAgICAgIHdoaWxlKHJzLm5leHQoKSl7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjay93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2svd2ViLnhtbAppbmRleCAwN2UxNDc3Li43OThjNjliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjay93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2svd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYjIzZjBmYi4uOWYwMGFjZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2svd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjay93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zNiw4ICszNiw4IEBACiAgICAgICAgSGVsbG9FSkJTZXJ2aWNlIHNlcnZpY2U7CiAgICAgICAgQFJlc291cmNlKG1hcHBlZE5hbWU9ImpkYmMvX19kZWZhdWx0IikgcHJpdmF0ZSBEYXRhU291cmNlIGRzOwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApAQCAtNDUsMjYgKzQ1LDI2IEBACiAgICAgICAgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgICBVc2VyVHJhbnNhY3Rpb24gdXQgPSBudWxsOwogICAgICAgICAgICAgLy8gQ3JlYXRlIFRhYmxlIHdpdGggbmFtZSBDVVNUT01FUl9yYi4gVGhpcyBuYW1lIHdpbGwgYmUgdXNlZCBpbiB0aGUgRUpCCi0JICAgIFN0cmluZyB0YWJsZU5hbWUgPSAiQ1VTVE9NRVJfcmIiOworICAgICAgICBTdHJpbmcgdGFibGVOYW1lID0gIkNVU1RPTUVSX3JiIjsKICAgICAgICAgICAgIHRyeSB7Ci0JICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkJY29uLnNldEF1dG9Db21taXQodHJ1ZSk7Ci0JICAgICAgICBjcmVhdGVUYWJsZShjb24sIHRhYmxlTmFtZSk7CisgICAgICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgY29uLnNldEF1dG9Db21taXQodHJ1ZSk7CisgICAgICAgICAgICBjcmVhdGVUYWJsZShjb24sIHRhYmxlTmFtZSk7CiAgICAgICAgICAgICAgICAgdXQgPSAoVXNlclRyYW5zYWN0aW9uKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Y29tcC9Vc2VyVHJhbnNhY3Rpb24iKTsKICAgICAgICAgICAgICAgICB1dC5iZWdpbigpOwogCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgU2VydmljZSBpcyA6IiArIHNlcnZpY2UpOwotCQlIZWxsbyBwb3J0ID0gc2VydmljZS5nZXRIZWxsb0VKQlBvcnQoKTsKLSAgICAgICAgICAgICAgICAKLQkJU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIpOworICAgICAgICBIZWxsbyBwb3J0ID0gc2VydmljZS5nZXRIZWxsb0VKQlBvcnQoKTsKKworICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXR1cm4gdmFsdWUgZnJvbSB3ZWJzZXJ2aWNlOiIrcmV0KTsKIAotCQlpZih1dC5nZXRTdGF0dXMoKSAhPSBTdGF0dXMuU1RBVFVTX01BUktFRF9ST0xMQkFDSykgeworICAgICAgICBpZih1dC5nZXRTdGF0dXMoKSAhPSBTdGF0dXMuU1RBVFVTX01BUktFRF9ST0xMQkFDSykgewogICAgICAgICAgICAgICAgICAgICByZXQgKz0gIkZBSUxFRCI7Ci0JCX0KLQkJU3lzdGVtLm91dC5wcmludGxuKCIqKioqIHJvbGxiYWNraW5nIHRyYW5zYWN0aW9uIik7Ci0JCXV0LnJvbGxiYWNrKCk7Ci0JCWlmKGlzRGF0YVByZXNlbnQoY29uLCB0YWJsZU5hbWUpKSB7CisgICAgICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIHJvbGxiYWNraW5nIHRyYW5zYWN0aW9uIik7CisgICAgICAgIHV0LnJvbGxiYWNrKCk7CisgICAgICAgIGlmKGlzRGF0YVByZXNlbnQoY29uLCB0YWJsZU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldCArPSAiRkFJTEVEIjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKQEAgLTgwLDE1ICs4MCwxNSBAQAogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJbIiArIHJldCArICJdIik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvYm9keT4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9odG1sPiIpOwotCQlkcm9wVGFibGUoY29uLCB0YWJsZU5hbWUpOworICAgICAgICBkcm9wVGFibGUoY29uLCB0YWJsZU5hbWUpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0KKyAgICAgICAgfQogICAgICAgIH0KIAogICAgICAgIC8vIHVzZSB0aGlzIHRhYmxlIGluIHRoZSBFSkIgd2Vic2VydmljZQogICAgICAgIHByaXZhdGUgdm9pZCBjcmVhdGVUYWJsZShDb25uZWN0aW9uIGNvbiwgU3RyaW5nIHRhYmxlTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBhdXRvIGNvbW1pdCA9ICIgKyBjb24uZ2V0QXV0b0NvbW1pdCgpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGF1dG8gY29tbWl0ID0gIiArIGNvbi5nZXRBdXRvQ29tbWl0KCkpOwogICAgICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcFN0bXQgPQogICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoIkNSRUFURSBUQUJMRSAiK3RhYmxlTmFtZSsiIChOQU1FIFZBUkNIQVIoMzApIE5PVCBOVUxMIFBSSU1BUlkgS0VZLCBFTUFJTCBWQVJDSEFSKDMwKSkiKTsKICAgICAgICAgICAgIHBTdG10LmV4ZWN1dGVVcGRhdGUoKTsKQEAgLTEwMSwxNSArMTAxLDE1IEBACiAKICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBFSkIgd2Vic2VydmljZSBoYXMgdXBkYXRlZCB0aGUgZGF0YSBpbiB0aGUgdGFibGUuCiAgICAgICAgcHJpdmF0ZSBib29sZWFuIGlzRGF0YVByZXNlbnQoQ29ubmVjdGlvbiBjb24sIFN0cmluZyB0YWJsZU5hbWUpIHRocm93cyBFeGNlcHRpb24gewotCSAgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgTkFNRSwgRU1BSUwgRlJPTSAiK3RhYmxlTmFtZSk7Ci0JICAgIFJlc3VsdFNldCBycyA9IHBTdG10LmV4ZWN1dGVRdWVyeSgpOwotCSAgICB3aGlsZShycy5uZXh0KCkpIHsKLQkJU3RyaW5nIGRiX05hbWUgID0gcnMuZ2V0U3RyaW5nKDEpOwotCQlTdHJpbmcgZGJfRW1haWwgPSBycy5nZXRTdHJpbmcoMik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiTkFNRT0iK2RiX05hbWUrIiwgRU1BSUw9IitkYl9FbWFpbCk7Ci0JCXJzLmNsb3NlKCk7Ci0JCXJldHVybiB0cnVlOwotCSAgICB9Ci0JICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcFN0bXQgPSBjb24ucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIE5BTUUsIEVNQUlMIEZST00gIit0YWJsZU5hbWUpOworICAgICAgICBSZXN1bHRTZXQgcnMgPSBwU3RtdC5leGVjdXRlUXVlcnkoKTsKKyAgICAgICAgd2hpbGUocnMubmV4dCgpKSB7CisgICAgICAgIFN0cmluZyBkYl9OYW1lICA9IHJzLmdldFN0cmluZygxKTsKKyAgICAgICAgU3RyaW5nIGRiX0VtYWlsID0gcnMuZ2V0U3RyaW5nKDIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5BTUU9IitkYl9OYW1lKyIsIEVNQUlMPSIrZGJfRW1haWwpOworICAgICAgICBycy5jbG9zZSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjazEvYnVpbGQucHJvcGVydGllcwppbmRleCAwMzMxNjI0Li45MGQ4NDUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjazEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjazEvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqc3IyMDgtaW50ZWdyYXRpb24iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrMS9idWlsZC54bWwKaW5kZXggYzE2OWQyMS4uMDVlY2QxZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjazEvYnVpbGQueG1sCkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1hcHAiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJVbmRlcGxveWluZyBjbGllbnQgYXBwbGljYXRpb24iLz4KICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgpAQCAtMTMyLDggKzEzMiw4IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LlRlc3RDbGllbnQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL2NsaWVudC1zdW4td2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrMS9jbGllbnQtc3VuLXdlYi54bWwKaW5kZXggZDQzZTcwZi4uOTBhZWZmMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL2NsaWVudC1zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjazEvY2xpZW50LXN1bi13ZWIueG1sCkBAIC0yNCwxNSArMjQsMTUgQEAKICAgPHNlcnZpY2UtcmVmPgogICAgIDxzZXJ2aWNlLXJlZi1uYW1lPnN1bi13ZWIuc2VydmljZXJlZi9IZWxsb0VKQlNlcnZpY2U8L3NlcnZpY2UtcmVmLW5hbWU+CiAgICAgPHBvcnQtaW5mbz4KLQk8c2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+ZW5kcG9pbnQuZWpiLkhlbGxvPC9zZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT4KLQk8d3NkbC1wb3J0PgotICAgIAkgIDxuYW1lc3BhY2VVUkk+aHR0cDovL2VuZHBvaW50L2VqYjwvbmFtZXNwYWNlVVJJPgotICAgIAkgIDxsb2NhbHBhcnQ+SGVsbG9FSkJQb3J0PC9sb2NhbHBhcnQ+Ci0JPC93c2RsLXBvcnQ+Ci0gICAgCTxzdHViLXByb3BlcnR5PgotCSAgPG5hbWU+amJpLWVuYWJsZWQ8L25hbWU+Ci0JICA8dmFsdWU+dHJ1ZTwvdmFsdWU+Ci0JPC9zdHViLXByb3BlcnR5PgorICAgIDxzZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT5lbmRwb2ludC5lamIuSGVsbG88L3NlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPgorICAgIDx3c2RsLXBvcnQ+CisgICAgICAgICAgPG5hbWVzcGFjZVVSST5odHRwOi8vZW5kcG9pbnQvZWpiPC9uYW1lc3BhY2VVUkk+CisgICAgICAgICAgPGxvY2FscGFydD5IZWxsb0VKQlBvcnQ8L2xvY2FscGFydD4KKyAgICA8L3dzZGwtcG9ydD4KKyAgICAgICAgPHN0dWItcHJvcGVydHk+CisgICAgICA8bmFtZT5qYmktZW5hYmxlZDwvbmFtZT4KKyAgICAgIDx2YWx1ZT50cnVlPC92YWx1ZT4KKyAgICA8L3N0dWItcHJvcGVydHk+CiAgICAgPC9wb3J0LWluZm8+CiAgICAgPHdzZGwtb3ZlcnJpZGU+aHR0cDovL2xvY2FsaG9zdDo4MDgwL0hlbGxvRUpCU2VydmljZS9IZWxsb0VKQj9XU0RMPC93c2RsLW92ZXJyaWRlPgogICA8L3NlcnZpY2UtcmVmPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL2NsaWVudC13ZWIueG1sCmluZGV4IDVhYzI2NDkuLmNkOTU4YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrMS9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjazEvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjazEvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCAyOTNiODE3Li5iZTlkMjVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjazEvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjazEvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDgsNyArNDgsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjUsOSArNjUsOSBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgRUpCIHdlYnNlcnZpY2UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiW1dlYlN2Y1Rlc3QtSGVsbG8gQXBwc2VydmVyIFRlc3RlciAhXSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrMS9lbmRwb2ludC9lamIvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrMS9lbmRwb2ludC9lamIvSGVsbG8uamF2YQppbmRleCAyMzE2N2ViLi45MDczOTMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjazEvZW5kcG9pbnQvZWpiL0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL2VuZHBvaW50L2VqYi9IZWxsby5qYXZhCkBAIC0yMiw1ICsyMiw1IEBACiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9lbmRwb2ludC9lamIiKQogcHVibGljIGludGVyZmFjZSBIZWxsbyB7CiAKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pOworICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobyk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjazEvZW5kcG9pbnQvZWpiL0hlbGxvRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjazEvZW5kcG9pbnQvZWpiL0hlbGxvRUpCLmphdmEKaW5kZXggOGQyNDY4ZC4uNDk0ZWM4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL2VuZHBvaW50L2VqYi9IZWxsb0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrMS9lbmRwb2ludC9lamIvSGVsbG9FSkIuamF2YQpAQCAtMzUsMzkgKzM1LDM5IEBACiAKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLlJFUVVJUkVEKQogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgewotCVN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBFSkIgQ2FsbGVkIik7Ci0JQ29ubmVjdGlvbiBjb249bnVsbDsKLQlTdHJpbmcgdGFibGVOYW1lID0gIkNVU1RPTUVSX3JiMSI7Ci0JU3RyaW5nIG5hbWVFbnRyeSA9ICJWaWthcyI7Ci0JU3RyaW5nIGVtYWlsRW50cnk9ICJ2aWthc0BzdW4uY29tIjsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogRUpCIENhbGxlZCIpOworICAgIENvbm5lY3Rpb24gY29uPW51bGw7CisgICAgU3RyaW5nIHRhYmxlTmFtZSA9ICJDVVNUT01FUl9yYjEiOworICAgIFN0cmluZyBuYW1lRW50cnkgPSAiVmlrYXMiOworICAgIFN0cmluZyBlbWFpbEVudHJ5PSAidmlrYXNAc3VuLmNvbSI7CiAKLQl0cnkgewotCWNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogYXV0byBjb21taXQgPSAiICsgY29uLmdldEF1dG9Db21taXQoKSk7CisgICAgdHJ5IHsKKyAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGF1dG8gY29tbWl0ID0gIiArIGNvbi5nZXRBdXRvQ29tbWl0KCkpOwogCi0JdXBkYXRlVGFibGUoY29uLCB0YWJsZU5hbWUsIG5hbWVFbnRyeSwgZW1haWxFbnRyeSk7Ci0JcmVhZERhdGEoY29uLCB0YWJsZU5hbWUpOworICAgIHVwZGF0ZVRhYmxlKGNvbiwgdGFibGVOYW1lLCBuYW1lRW50cnksIGVtYWlsRW50cnkpOworICAgIHJlYWREYXRhKGNvbiwgdGFibGVOYW1lKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKICAgICAgICAgfSBmaW5hbGx5IHsKLQkgICAgdHJ5IHsKLQkgICAgaWYoY29uICE9IG51bGwpIGNvbi5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gc2UpIHt9Ci0JfQotCS8vY3R4LnNldFJvbGxiYWNrT25seSgpOworICAgICAgICB0cnkgeworICAgICAgICBpZihjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzZSkge30KKyAgICB9CisgICAgLy9jdHguc2V0Um9sbGJhY2tPbmx5KCk7CiAgICAgICAgIHJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB1cGRhdGVUYWJsZShDb25uZWN0aW9uIGNvbiwgU3RyaW5nIHRhYmxlTmFtZSwgU3RyaW5nIG5hbWUsIFN0cmluZyBlbWFpbCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBTdG10ID0gCisgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBTdG10ID0KICAgICAgICAgICAgICBjb24ucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gIisgdGFibGVOYW1lICsiIChOQU1FLCBFTUFJTCkgVkFMVUVTKD8sPykiKTsKLQlwU3RtdC5zZXRTdHJpbmcoMSwgbmFtZSk7Ci0JcFN0bXQuc2V0U3RyaW5nKDIsIGVtYWlsKTsKKyAgICBwU3RtdC5zZXRTdHJpbmcoMSwgbmFtZSk7CisgICAgcFN0bXQuc2V0U3RyaW5nKDIsIGVtYWlsKTsKICAgICAgICAgcFN0bXQuZXhlY3V0ZVVwZGF0ZSgpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCByZWFkRGF0YShDb25uZWN0aW9uIGNvbiwgU3RyaW5nIHRhYmxlTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBTdG10ID0gCisgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBTdG10ID0KICAgICAgICAgICAgICBjb24ucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIE5BTUUsIEVNQUlMIEZST00gIit0YWJsZU5hbWUpOwogICAgICAgICBSZXN1bHRTZXQgcnMgPSBwU3RtdC5leGVjdXRlUXVlcnkoKTsKICAgICAgICAgd2hpbGUocnMubmV4dCgpKXsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrMS93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL3dlYi54bWwKaW5kZXggMDdlMTQ3Ny4uNzk4YzY5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjazEvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQppbmRleCA0NDI4NmNiLi41MmM1YmU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjazEvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjazEvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzYsOCArMzYsOCBAQAogICAgICAgIEhlbGxvRUpCU2VydmljZSBzZXJ2aWNlOwogICAgICAgIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqZGJjL19fZGVmYXVsdCIpIHByaXZhdGUgRGF0YVNvdXJjZSBkczsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKQEAgLTQ1LDI1ICs0NSwyNSBAQAogICAgICAgICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICAgVXNlclRyYW5zYWN0aW9uIHV0ID0gbnVsbDsKICAgICAgICAgICAgIC8vIENyZWF0ZSBUYWJsZSB3aXRoIG5hbWUgQ1VTVE9NRVJfcmIxLiBUaGlzIG5hbWUgd2lsbCBiZSB1c2VkIGluIHRoZSBFSkIKLQkgICAgU3RyaW5nIHRhYmxlTmFtZSA9ICJDVVNUT01FUl9yYjEiOworICAgICAgICBTdHJpbmcgdGFibGVOYW1lID0gIkNVU1RPTUVSX3JiMSI7CiAgICAgICAgICAgICBTdHJpbmdbXSBuYW1lcyA9IHsiVmlrYXMiLCAiVmlrYXNBd2FzdGhpIn07CiAgICAgICAgICAgICBTdHJpbmdbXSBlbWFpbHM9IHsidmlrYXNAc3VuLmNvbSIsICJWaWthc0FAc3VuLmNvbSJ9OwogICAgICAgICAgICAgdHJ5IHsKLQkgICAgICAgIENvbm5lY3Rpb24gY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICAgICAgY3JlYXRlVGFibGUoY29uLCB0YWJsZU5hbWUpOworICAgICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICBjcmVhdGVUYWJsZShjb24sIHRhYmxlTmFtZSk7CiAgICAgICAgICAgICAgICAgdXQgPSAoVXNlclRyYW5zYWN0aW9uKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Y29tcC9Vc2VyVHJhbnNhY3Rpb24iKTsKICAgICAgICAgICAgICAgICB1dC5iZWdpbigpOwogCi0JCXVwZGF0ZVRhYmxlKGNvbiwgdGFibGVOYW1lLCBuYW1lc1sxXSwgZW1haWxzWzFdKTsKKyAgICAgICAgdXBkYXRlVGFibGUoY29uLCB0YWJsZU5hbWUsIG5hbWVzWzFdLCBlbWFpbHNbMV0pOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFNlcnZpY2UgaXMgOiIgKyBzZXJ2aWNlKTsKLQkJSGVsbG8gcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9FSkJQb3J0KCk7Ci0gICAgICAgICAgICAgICAgCi0JCVN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKKyAgICAgICAgSGVsbG8gcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9FSkJQb3J0KCk7CisKKyAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuIHZhbHVlIGZyb20gd2Vic2VydmljZToiK3JldCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiKioqKiByb2xsYmFja2luZyB0cmFuc2FjdGlvbiIpOwotCQl1dC5yb2xsYmFjaygpOwotCQkKLQkJaWYoaXNEYXRhUHJlc2VudChjb24sIHRhYmxlTmFtZSkpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIHJvbGxiYWNraW5nIHRyYW5zYWN0aW9uIik7CisgICAgICAgIHV0LnJvbGxiYWNrKCk7CisKKyAgICAgICAgaWYoaXNEYXRhUHJlc2VudChjb24sIHRhYmxlTmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0ICs9ICJGQUlMRUQiOwogICAgICAgICAgICAgICAgIH0KIApAQCAtODAsMzAgKzgwLDMwIEBACiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIlsiICsgcmV0ICsgIl0iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9ib2R5PiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2h0bWw+Iik7Ci0JCWRyb3BUYWJsZShjb24sIHRhYmxlTmFtZSk7CisgICAgICAgIGRyb3BUYWJsZShjb24sIHRhYmxlTmFtZSk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgfQorICAgICAgICB9CiAgICAgICAgfQogCiAgICAgICAgLy8gdXNlIHRoaXMgdGFibGUgaW4gdGhlIEVKQiB3ZWJzZXJ2aWNlCiAgICAgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVRhYmxlKENvbm5lY3Rpb24gY29uLCBTdHJpbmcgdGFibGVOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkgICAgLy8gYXV0b2NvbW1pdCBpcyBtYWRlIHRydWUgc28gdGhhdCB0aGUgdGFibGUgaXMgY3JlYXRlZCBpbW1lZGlhdGVseQotCSAgICBib29sZWFuIGF1dG9Db21taXQgPSBjb24uZ2V0QXV0b0NvbW1pdCgpOwotCSAgICBjb24uc2V0QXV0b0NvbW1pdCh0cnVlKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGF1dG8gY29tbWl0ID0gIiArIGNvbi5nZXRBdXRvQ29tbWl0KCkpOworICAgICAgICAvLyBhdXRvY29tbWl0IGlzIG1hZGUgdHJ1ZSBzbyB0aGF0IHRoZSB0YWJsZSBpcyBjcmVhdGVkIGltbWVkaWF0ZWx5CisgICAgICAgIGJvb2xlYW4gYXV0b0NvbW1pdCA9IGNvbi5nZXRBdXRvQ29tbWl0KCk7CisgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KHRydWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogYXV0byBjb21taXQgPSAiICsgY29uLmdldEF1dG9Db21taXQoKSk7CiAgICAgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9CiAgICAgICAgICAgICBjb24ucHJlcGFyZVN0YXRlbWVudCgiQ1JFQVRFIFRBQkxFICIrdGFibGVOYW1lKyIgKE5BTUUgVkFSQ0hBUigzMCkgTk9UIE5VTEwgUFJJTUFSWSBLRVksIEVNQUlMIFZBUkNIQVIoMzApKSIpOwogICAgICAgICAgICAgcFN0bXQuZXhlY3V0ZVVwZGF0ZSgpOwotCSAgICBjb24uc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTsKKyAgICAgICAgY29uLnNldEF1dG9Db21taXQoYXV0b0NvbW1pdCk7CiAgICAgICAgfQogCiAgICAgICAgcHJpdmF0ZSB2b2lkIGRyb3BUYWJsZShDb25uZWN0aW9uIGNvbiwgU3RyaW5nIHRhYmxlTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAgIGJvb2xlYW4gYXV0b0NvbW1pdCA9IGNvbi5nZXRBdXRvQ29tbWl0KCk7Ci0JICAgIGNvbi5zZXRBdXRvQ29tbWl0KHRydWUpOworICAgICAgICBib29sZWFuIGF1dG9Db21taXQgPSBjb24uZ2V0QXV0b0NvbW1pdCgpOworICAgICAgICBjb24uc2V0QXV0b0NvbW1pdCh0cnVlKTsKICAgICAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBTdG10ID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoIkRST1AgVEFCTEUgIit0YWJsZU5hbWUpOwogICAgICAgICAgICAgcFN0bXQuZXhlY3V0ZVVwZGF0ZSgpOwotCSAgICBjb24uc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTsKKyAgICAgICAgY29uLnNldEF1dG9Db21taXQoYXV0b0NvbW1pdCk7CiAgICAgICAgfQogCiAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgRUpCIHdlYnNlcnZpY2UgaGFzIHVwZGF0ZWQgdGhlIGRhdGEgaW4gdGhlIHRhYmxlLgpAQCAtMTIwLDEyICsxMjAsMTIgQEAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAKLSAgICAgICBwcml2YXRlIHZvaWQgdXBkYXRlVGFibGUoQ29ubmVjdGlvbiBjb24sIFN0cmluZyB0YWJsZU5hbWUsIFN0cmluZyBuYW1lLCBTdHJpbmcgZW1haWwpIAotCQl0aHJvd3MgRXhjZXB0aW9uIHsKLQkgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9IAotCQljb24ucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gIisgdGFibGVOYW1lICsiIChOQU1FLCBFTUFJTCkgVkFMVUVTKD8sPykiKTsKLQkgICBwU3RtdC5zZXRTdHJpbmcoMSwgbmFtZSk7Ci0JICAgcFN0bXQuc2V0U3RyaW5nKDIsIGVtYWlsKTsKLQkgICBwU3RtdC5leGVjdXRlVXBkYXRlKCk7CisgICAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVRhYmxlKENvbm5lY3Rpb24gY29uLCBTdHJpbmcgdGFibGVOYW1lLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGVtYWlsKQorICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9CisgICAgICAgIGNvbi5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyAiKyB0YWJsZU5hbWUgKyIgKE5BTUUsIEVNQUlMKSBWQUxVRVMoPyw/KSIpOworICAgICAgIHBTdG10LnNldFN0cmluZygxLCBuYW1lKTsKKyAgICAgICBwU3RtdC5zZXRTdHJpbmcoMiwgZW1haWwpOworICAgICAgIHBTdG10LmV4ZWN1dGVVcGRhdGUoKTsKICAgICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL21hcHBpbmcvajJ3L3NpZ25hdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9tYXBwaW5nL2oydy9zaWduYXR1cmUvYnVpbGQucHJvcGVydGllcwppbmRleCA3YmZiYTc4Li4wYWZlNzIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL21hcHBpbmcvajJ3L3NpZ25hdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvbWFwcGluZy9qMncvc2lnbmF0dXJlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIyICsxNSwyMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2lnbmF0dXJlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYnNlcnZpY2VzLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2Vic2VydmljZXMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvbWFwcGluZy9qMncvc2lnbmF0dXJlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvbWFwcGluZy9qMncvc2lnbmF0dXJlL2J1aWxkLnhtbAppbmRleCBiNThmODc3Li5kNWJlZjBmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL21hcHBpbmcvajJ3L3NpZ25hdHVyZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9tYXBwaW5nL2oydy9zaWduYXR1cmUvYnVpbGQueG1sCkBAIC0zMyw5ICszMyw5IEBACiAKIAogICA8dGFyZ2V0IG5hbWU9InJ1bi53c2NvbXBpbGUiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KLSAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPiAgICAgICAgCi0JPC9leGVjPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KKyAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPgorICAgIDwvZXhlYz4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSIiPgpAQCAtNTMsMTEgKzUzLDExIEBACiAgIDx0YXJnZXQgbmFtZT0id3Njb21waWxlLWFwcGNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxta2RpciBkaXI9Im91dHB1dCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItaW1wb3J0IC1rZWVwIC1kIG91dHB1dCAtcyBvdXRwdXQgLWNsYXNzcGF0aCAuIC1tYXBwaW5nIFNpZ25hdHVyZU1hcHBpbmdfYXBwY2xpZW50LnhtbCAtWHByaW50c3RhY2t0cmFjZSAtWGRlYnVnbW9kZWw6YXBwY2xpZW50Lm1vZGVsLnR4dCB3c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3NpZ25hdHVyZSI+Ci0gICAgICAgPGZpbGVzZXQgZGlyPSJvdXRwdXQvc2lnbmF0dXJlIiAKKyAgICAgICA8ZmlsZXNldCBkaXI9Im91dHB1dC9zaWduYXR1cmUiCiAgICAgICAgIGluY2x1ZGVzPSJTaWduYXR1cmVUZXN0U2VydmljZS5jbGFzcywgU2lnbmF0dXJlVGVzdC5jbGFzcywgTXlEYXRlVmFsdWVUeXBlLmNsYXNzLCBNeVNlY29uZERhdGVWYWx1ZVR5cGUuY2xhc3MiLz4KICAgICA8L2NvcHk+CiA8IS0tCkBAIC03MCw3ICs3MCw3IEBACiAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2lnbmF0dXJlZWpiIi8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItZGVmaW5lIC1jbGFzc3BhdGggJHtidWlsZC5jbGFzc2VzLmRpcn0gLW1hcHBpbmcgU2lnbmF0dXJlTWFwcGluZ19lamIueG1sIC1YcHJpbnRzdGFja3RyYWNlIC1YZGVidWdtb2RlbDplamIubW9kZWwudHh0IHdzY29tcGlsZV9jb25maWdfZWpiLnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CkBAIC03OCwyNCArNzgsMjQgQEAKICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNvbXBpbGUiPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIgogICAgICAgZmlsZT0iU2lnbmF0dXJlVGVzdFNlcnZpY2Uud3NkbCIvPgotICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCi0JIGZpbGU9IlNpZ25hdHVyZU1hcHBpbmdfYXBwY2xpZW50LnhtbCIvPgorICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKKyAgICAgZmlsZT0iU2lnbmF0dXJlTWFwcGluZ19hcHBjbGllbnQueG1sIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiI+Ci0gICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgIHZhbHVlPSJTaWduYXR1cmVNYXBwaW5nX2FwcGNsaWVudC54bWwsTUVUQS1JTkYvd3NkbC8qKixzaWduYXR1cmUvKi5jbGFzcyIgLz4KIAogICAgIDwvYW50Y2FsbD4KLSAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAotCSBmaWxlPSJTaWduYXR1cmVNYXBwaW5nX2VqYi54bWwiLz4KKyAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCisgICAgIGZpbGU9IlNpZ25hdHVyZU1hcHBpbmdfZWpiLnhtbCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICB2YWx1ZT0iU2lnbmF0dXJlTWFwcGluZ19lamIueG1sLE1FVEEtSU5GL3dzZGwvKiosc2lnbmF0dXJlZWpiLyouY2xhc3MiIC8+CiAKICAgICA8L2FudGNhbGw+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIiAvPgotICA8L3RhcmdldD4gCisgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTExNCwxOSArMTE0LDE5IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9IiBmYWlsb25lcnJvcj0iZmFsc2UiPgotICAgICAgICAgIDxhcmcgbGluZT0iLWNsaWVudCAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4gICAgICAKKyAgICAgICAgICA8YXJnIGxpbmU9Ii1jbGllbnQgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+CiAgICAgICAgICAgPGFyZyBsaW5lPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS9zaWduYXR1cmVlamIvU2lnbmF0dXJlVGVzdCIvPgogICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyB0aGUgV2ViU2VydmljZXMgdGVzdCkKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgdGhlIFdlYlNlcnZpY2VzIHRlc3QpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9tYXBwaW5nL2oydy9zaWduYXR1cmUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9tYXBwaW5nL2oydy9zaWduYXR1cmUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDgwY2E5MDguLjE3Mzg0OTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvbWFwcGluZy9qMncvc2lnbmF0dXJlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL21hcHBpbmcvajJ3L3NpZ25hdHVyZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDI1ICsyOCwyNSBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1zaWduYXR1cmUiKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLXNpZ25hdHVyZUlEIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAJdHJ5IHsKKyAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICBTdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0gYXJnc1swXTsKIAotCSAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAKKyAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworCiAgICAgICAgICAgICBTaWduYXR1cmVUZXN0U2VydmljZSB0ZXN0U2VydmljZSA9CiAgICAgICAgICAgICAgICAgKFNpZ25hdHVyZVRlc3RTZXJ2aWNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9zaWduYXR1cmUiKTsKICAgICAgICAgICAgIFNpZ25hdHVyZVRlc3QgdGVzdCA9IHRlc3RTZXJ2aWNlLmdldFNpZ25hdHVyZVRlc3RQb3J0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgKChTdHViKXRlc3QpLl9zZXRQcm9wZXJ0eShTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7CiAKQEAgLTU4LDEzICs1OCwxMyBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTVNHOiAiICsgbXNnKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic2lnbmF0dXJlIFNFSS5zYXlIZWxsbyhtc2cpIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgewotCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgZTEucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInNpZ25hdHVyZSBTRUkuc2F5SGVsbG8obXNnKSIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9CiAKIAogLyogdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgd2hlbiB0aGUgZGF0ZS0+Y2FsZW5kYXIgaXMgZG9uZQotICAgICAgICAgICAgTXlTZWNvbmREYXRlVmFsdWVUeXBlIGQgPSAKKyAgICAgICAgICAgIE15U2Vjb25kRGF0ZVZhbHVlVHlwZSBkID0KICAgICAgICAgICAgICAgICBuZXcgTXlTZWNvbmREYXRlVmFsdWVUeXBlKG5ldyBqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXIoKSwgIlN1Y2sgaXQgdXAgYW5kIGRvIGl0ISIpOwogICAgICAgICAgICAgTXlEYXRlVmFsdWVUeXBlIGMgPSBuZXcgTXlEYXRlVmFsdWVUeXBlKCk7CiAgICAgICAgICAgICBjLnNldERhdGUobmV3IGphdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhcigpKTsKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgdGVzdC5zZXRNeURhdGVWYWx1ZVR5cGUoYyk7CiAgICAgICAgICAgICAgICAgTXlEYXRlVmFsdWVUeXBlIGRhdGUyID0gdGVzdC5nZXRNeURhdGVWYWx1ZVR5cGUoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJFVFVSTkVEIEFOT1RIRVIgTFVDS1kgREFURSA9ICIgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSRVRVUk5FRCBBTk9USEVSIExVQ0tZIERBVEUgPSAiCiAgICAgICAgICAgICAgICAgICAgICsgZGF0ZTIuZ2V0RGF0ZSgpICsgIjsgd2l0aCBtZXNzYWdlID0gIiArIGRhdGUyLmdldFdoaW5lKCkpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJzaWduYXR1cmUgU0VJLnNldFZhbHVlVHlwZVdpdGhEYXRlIiwgc3RhdC5QQVNTKTsKIApAQCAtMTA3LDEwICsxMDcsMTAgQEAKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic2lnbmF0dXJlIFNFSS5zZXRWYWx1ZVR5cGVXaXRoRGF0ZXMiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQogKi8KLSAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzaWduYXR1cmUgY2xpZW50IHRlc3QgZmFpbGVkIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJzaWduYXR1cmUgY2xpZW50IG1haW4iLCBzdGF0LkZBSUwpOwotCX0gCisgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvbWFwcGluZy9qMncvc2lnbmF0dXJlL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvbWFwcGluZy9qMncvc2lnbmF0dXJlL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbAppbmRleCBmZDNmMWFiLi5kZmZhY2I2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL21hcHBpbmcvajJ3L3NpZ25hdHVyZS9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9tYXBwaW5nL2oydy9zaWduYXR1cmUvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC0yNyw2ICsyNyw2IEBACiAgICAgPHdzZGwtZmlsZT5NRVRBLUlORi93c2RsL1NpZ25hdHVyZVRlc3RTZXJ2aWNlLndzZGw8L3dzZGwtZmlsZT4KICAgICA8amF4cnBjLW1hcHBpbmctZmlsZT5TaWduYXR1cmVNYXBwaW5nX2FwcGNsaWVudC54bWw8L2pheHJwYy1tYXBwaW5nLWZpbGU+CiAgICAgPHNlcnZpY2UtcW5hbWUgeG1sbnM6c2VydmljZW5zPSJodHRwOi8vc2lnbmF0dXJlLm9yZy93c2RsIj5zZXJ2aWNlbnM6U2lnbmF0dXJlVGVzdFNlcnZpY2UKLSAgICA8L3NlcnZpY2UtcW5hbWU+ICAgICAgICAgICAgICAgCisgICAgPC9zZXJ2aWNlLXFuYW1lPgogICA8L3NlcnZpY2UtcmVmPgogPC9hcHBsaWNhdGlvbi1jbGllbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL21hcHBpbmcvajJ3L3NpZ25hdHVyZS9zaWduYXR1cmVlamIvTXlEYXRlVmFsdWVUeXBlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL21hcHBpbmcvajJ3L3NpZ25hdHVyZS9zaWduYXR1cmVlamIvTXlEYXRlVmFsdWVUeXBlLmphdmEKaW5kZXggNjRmMzBiNC4uNWM4NjRkYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9tYXBwaW5nL2oydy9zaWduYXR1cmUvc2lnbmF0dXJlZWpiL015RGF0ZVZhbHVlVHlwZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvbWFwcGluZy9qMncvc2lnbmF0dXJlL3NpZ25hdHVyZWVqYi9NeURhdGVWYWx1ZVR5cGUuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogCiAgICAgcHVibGljIE15RGF0ZVZhbHVlVHlwZSgpIHt9CiAKLSAgICBwdWJsaWMgTXlEYXRlVmFsdWVUeXBlKERhdGUgZGF0ZSwgamF2YS5sYW5nLlN0cmluZyB3aGluZSwgCisgICAgcHVibGljIE15RGF0ZVZhbHVlVHlwZShEYXRlIGRhdGUsIGphdmEubGFuZy5TdHJpbmcgd2hpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXlTZWNvbmREYXRlVmFsdWVUeXBlW10gZGF0ZXMpIHsKICAgICAgICAgdGhpcy5kYXRlID0gZGF0ZTsKICAgICAgICAgdGhpcy53aGluZSA9IHdoaW5lOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9tYXBwaW5nL2oydy9zaWduYXR1cmUvc2lnbmF0dXJlZWpiL1NpZ25hdHVyZUVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9tYXBwaW5nL2oydy9zaWduYXR1cmUvc2lnbmF0dXJlZWpiL1NpZ25hdHVyZUVKQi5qYXZhCmluZGV4IDI2ZmQ2MTMuLmQ2MGQzZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvbWFwcGluZy9qMncvc2lnbmF0dXJlL3NpZ25hdHVyZWVqYi9TaWduYXR1cmVFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL21hcHBpbmcvajJ3L3NpZ25hdHVyZS9zaWduYXR1cmVlamIvU2lnbmF0dXJlRUpCLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2Ugc2lnbmF0dXJlZWpiOwogCiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMzMsNTUgKzMzLDU1IEBACiAgICAgcHJpdmF0ZSBNeURhdGVWYWx1ZVR5cGVbXSBteURhdGVzOwogCiAgICAgcHVibGljIFNpZ25hdHVyZUVKQigpe30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2lnbmF0dXJlRUpCOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpZ25hdHVyZUVKQjo6ZWpiQ3JlYXRlICEhIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgU2V0VGVzdERhdGUoamF2YS51dGlsLkRhdGUgdGVzdERhdGUpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpZ25hdHVyZUVKQjo6c2V0VGVzdERhdGUgPSAiICsgdGVzdERhdGUpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2lnbmF0dXJlRUpCOjpzZXRUZXN0RGF0ZSA9ICIgKyB0ZXN0RGF0ZSk7CiAgICAgICAgIGRhdGUgPSB0ZXN0RGF0ZTsKICAgICB9CiAKICAgICBwdWJsaWMgamF2YS51dGlsLkRhdGUgR2V0VGVzdERhdGUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaWduYXR1cmVFSkI6OmdldFRlc3REYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaWduYXR1cmVFSkI6OmdldFRlc3REYXRlICEhIik7CiAgICAgICAgIHJldHVybiBkYXRlOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldE15RGF0ZVZhbHVlVHlwZShNeURhdGVWYWx1ZVR5cGUgbXl0ZXN0ZGF0ZSkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2lnbmF0dXJlRUpCOjpzZXRNeURhdGVWYWx1ZVR5cGU6IGRhdGUgPSAiIAorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2lnbmF0dXJlRUpCOjpzZXRNeURhdGVWYWx1ZVR5cGU6IGRhdGUgPSAiCiAgICAgICAgICAgICArIG15dGVzdGRhdGUuZ2V0RGF0ZSgpICsgIiA7IHdoaW5lID0gIiArIG15dGVzdGRhdGUuZ2V0V2hpbmUoKSk7CiAgICAgICAgIG15RGF0ZSA9IG15dGVzdGRhdGU7CiAgICAgfQogCiAgICAgcHVibGljIE15RGF0ZVZhbHVlVHlwZSBnZXRNeURhdGVWYWx1ZVR5cGUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaWduYXR1cmVFSkI6OmdldE15RGF0ZVZhbHVlVHlwZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2lnbmF0dXJlRUpCOjpnZXRNeURhdGVWYWx1ZVR5cGUgISEiKTsKICAgICAgICAgcmV0dXJuIG15RGF0ZTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRNeURhdGVWYWx1ZVR5cGVzKE15RGF0ZVZhbHVlVHlwZVtdIG15dGVzdGRhdGVzKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaWduYXR1cmVFSkI6OnNldE15RGF0ZVZhbHVlVHlwZXM6IGRhdGVzLnNpemUgPSAiIAorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2lnbmF0dXJlRUpCOjpzZXRNeURhdGVWYWx1ZVR5cGVzOiBkYXRlcy5zaXplID0gIgogICAgICAgICAgICAgKyBteXRlc3RkYXRlcy5sZW5ndGgpOwogICAgICAgICBteURhdGVzID0gbXl0ZXN0ZGF0ZXM7CiAgICAgfQogCiAgICAgcHVibGljIE15RGF0ZVZhbHVlVHlwZVtdIGdldE15RGF0ZVZhbHVlVHlwZXMoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaWduYXR1cmVFSkI6OmdldE15RGF0ZVZhbHVlVHlwZXMgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpZ25hdHVyZUVKQjo6Z2V0TXlEYXRlVmFsdWVUeXBlcyAhISIpOwogICAgICAgICByZXR1cm4gbXlEYXRlczsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIFNheUhlbGxvKFN0cmluZyBtc2cpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpZ25hdHVyZUVKQjo6U2F5SGVsbG8gISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpZ25hdHVyZUVKQjo6U2F5SGVsbG8gISEiKTsKICAgICAgICAgcmV0dXJuICJIZWxsbyEgIiArIG1zZzsKICAgICB9Ci0gICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKICAgICAgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL21hcHBpbmcvajJ3L3NpZ25hdHVyZS93c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL21hcHBpbmcvajJ3L3NpZ25hdHVyZS93c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwKaW5kZXggODczMmMzYy4uY2M2OTRkZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9tYXBwaW5nL2oydy9zaWduYXR1cmUvd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvbWFwcGluZy9qMncvc2lnbmF0dXJlL3dzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJTaWduYXR1cmVUZXN0U2VydmljZS53c2RsIgogICAgICAgcGFja2FnZU5hbWU9InNpZ25hdHVyZSIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9uczJwYWNrYWdlL3dzY29tcGlsZV9jb25maWdfZWpiLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvbnMycGFja2FnZS93c2NvbXBpbGVfY29uZmlnX2VqYi54bWwKaW5kZXggZGVhYjEzZi4uNGFmYmY1ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9uczJwYWNrYWdlL3dzY29tcGlsZV9jb25maWdfZWpiLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL25zMnBhY2thZ2Uvd3Njb21waWxlX2NvbmZpZ19lamIueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249Im5zMnBhY2thZ2Uud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJuczJwYWNrYWdlIi8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3JlcG9ydC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3JlcG9ydC54bWwKaW5kZXggNjVhMzJhZS4uMDk0ZTM2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9yZXBvcnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcmVwb3J0LnhtbApAQCAtMjMsNyArMjMsNyBAQAogPHRhcmdldCBuYW1lPSJyZXBvcnQiPgogPGVjaG8gbWVzc2FnZT0iQ29tcGFyaW5nIHJlc3VsdHMgd2l0aCBleHBlY3RlZCByZXN1bHRzIi8+CiAKLSAKKwogICAgIDx4c2x0IHN0eWxlPSIke3N0eWxlc2hlZXR9IgogICAgICAgICAgICAgaW49IiR7eG1sZmlsZX0iIG91dD0iJHtodG1sZmlsZX0iCiAgICAgICAgICAgICBiYXNlZGlyPSIuIiBkZXN0ZGlyPSIuIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ycGNlbmNvZGVkX29uZXdheS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ycGNlbmNvZGVkX29uZXdheS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDE4ZDhmMGUuLmIyNTFjNjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjZW5jb2RlZF9vbmV3YXkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3JwY2VuY29kZWRfb25ld2F5L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0icnBjZW5jb2RlZE9uZXdheSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CkBAIC0yNiwxMyArMjYsMTMgQEAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2Vic2VydmljZXMueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWJzZXJ2aWNlcy54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJtYXBwaW5nZmlsZS5sb2NhdGlvbiIgdmFsdWU9IiR7YmFzZWRpcn0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjZW5jb2RlZF9vbmV3YXkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ycGNlbmNvZGVkX29uZXdheS9idWlsZC54bWwKaW5kZXggYTVhZmQzZi4uMGYzMTRkMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ycGNlbmNvZGVkX29uZXdheS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ycGNlbmNvZGVkX29uZXdheS9idWlsZC54bWwKQEAgLTMwLDkgKzMwLDkgQEAKICAgICAmdGVzdHByb3BlcnRpZXM7CiAKICAgPHRhcmdldCBuYW1lPSJydW4ud3Njb21waWxlIj4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+Ci0gICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4gICAgICAgIAotCTwvZXhlYz4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+CisgICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4KKyAgICA8L2V4ZWM+CiAgIDwvdGFyZ2V0PgogCiA8IS0tIE5PVEUuIHRoZSBzaW1wbGUgbWFwcGluZyB0ZXN0IGFuZCBmdWxsIG1hcHBpbmcgdGVzdCBjYW4KQEAgLTQzLDkgKzQzLDkgQEAKIC0tPgogCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJzaW1wbGUtbWFwcGluZywgZnVsbC1tYXBwaW5nIi8+Ci0gIDx0YXJnZXQgbmFtZT0ic2ltcGxlLW1hcHBpbmciIAorICA8dGFyZ2V0IG5hbWU9InNpbXBsZS1tYXBwaW5nIgogICAgICAgICAgIGRlcGVuZHM9ImJ1aWxkLXNpbXBsZS1tYXBwaW5nLGRlcGxveSxhc3NlbWJsZS1jbGllbnQsIHJ1bix1bmRlcGxveSIvPgotICA8dGFyZ2V0IG5hbWU9ImZ1bGwtbWFwcGluZyIgCisgIDx0YXJnZXQgbmFtZT0iZnVsbC1tYXBwaW5nIgogICAgICAgICAgIGRlcGVuZHM9ImJ1aWxkLWZ1bGwtbWFwcGluZyxkZXBsb3kscnVuLHVuZGVwbG95Ii8+CiAKICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSIiPgpAQCAtNzcsMzIgKzc3LDMyIEBACiAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIgLz4KLSAgPC90YXJnZXQ+IAotICAKKyAgPC90YXJnZXQ+CisKICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgotICAgIDwvYW50Y2FsbD4gICAgCisgICAgPC9hbnRjYWxsPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIgogICAgICAgZmlsZT0iU2ltcGxlVGVzdC53c2RsIi8+Ci0gICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKLQkgZmlsZT0iTm9NZXRhZGF0YS5TaW1wbGVUZXN0LnhtbCIvPiAKKyAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCisgICAgIGZpbGU9Ik5vTWV0YWRhdGEuU2ltcGxlVGVzdC54bWwiLz4KICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFwcGNsaWVudC1qYXItY29tbW9uIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgdmFsdWU9Ik5vTWV0YWRhdGEuU2ltcGxlVGVzdC54bWwsTUVUQS1JTkYvd3NkbC8qKixycGNlbmNvZGVkLyouY2xhc3MsY29tLyoqIiAvPgotICAgIDwvYW50Y2FsbD4gIAorICAgIDwvYW50Y2FsbD4KICAgICA8bW92ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIiB0b0ZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIvPgogICA8L3RhcmdldD4KLSAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9Ly9SUENFbmNvZGVkT25ld2F5L0hlbGxvIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTExNiwxOSArMTE2LDE5IEBACiAgICAgICA8ZGVsZXRlIGZpbGUgPSIvdG1wL2RlYnVnTW9kZWwudHh0Ii8+CiAgICAgICA8ZGVsZXRlIGZpbGUgPSIvdG1wL2RlYnVnTW9kZWwubW9kZWwiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0id3Njb21waWxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPG1rZGlyIGRpcj0idm9fb3V0cHV0Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1pbXBvcnQgLWtlZXAgLWQgdm9fb3V0cHV0IC1jbGFzc3BhdGggLiB3c2NvbXBpbGVfY29uZmlnLnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vcnBjZW5jb2RlZCI+Ci0gICAgICAgPGZpbGVzZXQgZGlyPSJ2b19vdXRwdXQvcnBjZW5jb2RlZCIgCisgICAgICAgPGZpbGVzZXQgZGlyPSJ2b19vdXRwdXQvcnBjZW5jb2RlZCIKICAgICAgICAgICAgICAgICBpbmNsdWRlcz0iSGVsbG8uY2xhc3MiLz4KICAgICA8L2NvcHk+CiAgICAgPGRlbGV0ZSBkaXI9InZvX291dHB1dCIvPgpAQCAtMTM5LDIzICsxMzksMjMgQEAKICAgICA8bWtkaXIgZGlyPSJvdXRwdXQiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgogICAgICAgPCEtLSB1c2UgbW9kZWwgLS0+Ci08IS0tIAotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKLSAgICAgICB2YWx1ZT0iLWdlbiAtY3AgLiAta2VlcCAtZCBvdXRwdXQgLVhkZWJ1Z21vZGVsOm9uZXdheU1vZGVsLnR4dCAtbW9kZWwgJHttYXBwaW5nZmlsZS5uYW1lfSB3c2NvbXBpbGVfY29uZmlnLnhtbCIvPiAKKzwhLS0KKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKKyAgICAgICB2YWx1ZT0iLWdlbiAtY3AgLiAta2VlcCAtZCBvdXRwdXQgLVhkZWJ1Z21vZGVsOm9uZXdheU1vZGVsLnR4dCAtbW9kZWwgJHttYXBwaW5nZmlsZS5uYW1lfSB3c2NvbXBpbGVfY29uZmlnLnhtbCIvPgogLS0+CiAKICAgICAgIDwhLS0gdXNlIG1hcHBpbmcgLS0+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAotICAgICAgIHZhbHVlPSItaW1wb3J0IC1jcCAuIC1rZWVwIC1kIG91dHB1dCAtWGRlYnVnbW9kZWw6b25ld2F5TW9kZWwudHh0IC1tYXBwaW5nICR7bWFwcGluZ2ZpbGUubmFtZX0gd3Njb21waWxlX2NvbmZpZy54bWwiLz4gCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCisgICAgICAgdmFsdWU9Ii1pbXBvcnQgLWNwIC4gLWtlZXAgLWQgb3V0cHV0IC1YZGVidWdtb2RlbDpvbmV3YXlNb2RlbC50eHQgLW1hcHBpbmcgJHttYXBwaW5nZmlsZS5uYW1lfSB3c2NvbXBpbGVfY29uZmlnLnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8ZGVsZXRlIGRpcj0ib3V0cHV0Ii8+CiAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgdGhlIFdlYlNlcnZpY2VzIHRlc3QpCi0JCQlhbnQgY2xlYW4gCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIHRoZSBXZWJTZXJ2aWNlcyB0ZXN0KQorICAgICAgICAgICAgYW50IGNsZWFuCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ycGNlbmNvZGVkX29uZXdheS9ycGNlbmNvZGVkL0hlbGxvSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ycGNlbmNvZGVkX29uZXdheS9ycGNlbmNvZGVkL0hlbGxvSW1wbC5qYXZhCmluZGV4IDAzZjI0MDQuLmIzYmQwNmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjZW5jb2RlZF9vbmV3YXkvcnBjZW5jb2RlZC9IZWxsb0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3JwY2VuY29kZWRfb25ld2F5L3JwY2VuY29kZWQvSGVsbG9JbXBsLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIHB1YmxpYyBjbGFzcyBIZWxsb0ltcGwgaW1wbGVtZW50cyBqYWthcnRhLnNlcnZsZXQuU2luZ2xlVGhyZWFkTW9kZWwsIFNlcnZpY2VMaWZlY3ljbGUgewogCiAgICAgcHJpdmF0ZSBib29sZWFuIGdvdEluaXQgPSBmYWxzZTsKLSAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChPYmplY3QgbykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBTZXJ2aWNlTGlmZWN5Y2xlOjppbml0IGNhbGwgIiArIG8pOwogICAgICAgICBnb3RJbml0ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjZW5jb2RlZF9vbmV3YXkvd3Njb21waWxlX2NvbmZpZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3JwY2VuY29kZWRfb25ld2F5L3dzY29tcGlsZV9jb25maWcueG1sCmluZGV4IGEzMjQ5ZTcuLjIzNWZkNDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjZW5jb2RlZF9vbmV3YXkvd3Njb21waWxlX2NvbmZpZy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ycGNlbmNvZGVkX29uZXdheS93c2NvbXBpbGVfY29uZmlnLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJTaW1wbGVUZXN0LndzZGwiCiAgICAgICBwYWNrYWdlTmFtZT0icnBjZW5jb2RlZCI+CiAgIDwvd3NkbD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjbGl0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3JwY2xpdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGY1MmIzMWUuLjVhMjc2ZGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjbGl0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ycGNsaXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJycGNsaXQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ycGNsaXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ycGNsaXQvYnVpbGQueG1sCmluZGV4IDkzZjkxYTAuLmEyZWJhMGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjbGl0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3JwY2xpdC9idWlsZC54bWwKQEAgLTMzLDkgKzMzLDkgQEAKIAogCiAgIDx0YXJnZXQgbmFtZT0icnVuLndzY29tcGlsZSI+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9IiBmYWlsb25lcnJvcj0idHJ1ZSIgPgotICAgICAgICA8YXJnIGxpbmU9Ii1zb3VyY2UgMS4xLjIgJHt3c2NvbXBpbGUuY29tbWFuZH0iIC8+ICAgICAgICAKLQk8L2V4ZWM+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9IiBmYWlsb25lcnJvcj0idHJ1ZSIgPgorICAgICAgICA8YXJnIGxpbmU9Ii1zb3VyY2UgMS4xLjIgJHt3c2NvbXBpbGUuY29tbWFuZH0iIC8+CisgICAgPC9leGVjPgogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9IiI+CkBAIC01MiwxNyArNTIsMTcgQEAKICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGJ1aWxkLCBjb21waWxlIj4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIKICAgICAgIGZpbGU9IlNpbXBsZVRlc3Qud3NkbCIvPgotICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCi0JIGZpbGU9IlJwY0xpdE1hcHBpbmcueG1sIi8+CisgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgorICAgICBmaWxlPSJScGNMaXRNYXBwaW5nLnhtbCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICB2YWx1ZT0iUnBjTGl0TWFwcGluZy54bWwsTUVUQS1JTkYvd3NkbC8qKixycGNsaXQvKi5jbGFzcyIgLz4KIAogICAgIDwvYW50Y2FsbD4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iIC8+Ci0gIDwvdGFyZ2V0PiAKKyAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNzYsMTkgKzc2LDE5IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgCisgICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJ3c2NvbXBpbGUtZWpiIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPG1rZGlyIGRpcj0ib3V0cHV0Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1pbXBvcnQgLWtlZXAgLWQgb3V0cHV0IC1zIG91dHB1dCAtY2xhc3NwYXRoIC4gd3Njb21waWxlX2NvbmZpZy54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3JwY2xpdCI+Ci0gICAgICAgPGZpbGVzZXQgZGlyPSJvdXRwdXQvcnBjbGl0IiAKKyAgICAgICA8ZmlsZXNldCBkaXI9Im91dHB1dC9ycGNsaXQiCiAgICAgICAgICAgICAgICAgaW5jbHVkZXM9IlNpbXBsZVRlc3QuY2xhc3MsRWNob1N0cmluZ1R5cGUuY2xhc3MsU3RyaW5nUmVzcG9uc2VOYW1lVHlwZS5jbGFzcyIvPgogICAgIDwvY29weT4KICAgICA8ZGVsZXRlIGRpcj0ib3V0cHV0Ii8+CkBAIC05OSwyMyArOTksMjMgQEAKICAgICA8bWtkaXIgZGlyPSJvdXRwdXQiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgogICAgICAgPCEtLSB1c2UgbW9kZWwgLS0+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAotICAgICAgIHZhbHVlPSItZ2VuIC1jcCAuIC1rZWVwIC1kIG91dHB1dCAtWGRlYnVnbW9kZWw6YW55UnBjTW9kZWwudHh0IC1tb2RlbCBScGNMaXRNYXBwaW5nLnhtbCB3c2NvbXBpbGVfY29uZmlnLnhtbCIvPiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKKyAgICAgICB2YWx1ZT0iLWdlbiAtY3AgLiAta2VlcCAtZCBvdXRwdXQgLVhkZWJ1Z21vZGVsOmFueVJwY01vZGVsLnR4dCAtbW9kZWwgUnBjTGl0TWFwcGluZy54bWwgd3Njb21waWxlX2NvbmZpZy54bWwiLz4KIAogICAgICAgPCEtLSB1c2UgbWFwcGluZyAtLT4KLTwhLS0gCi0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAotICAgICAgIHZhbHVlPSItZ2VuIC1jcCAuIC1rZWVwIC1kIG91dHB1dCAtWGRlYnVnbW9kZWw6YW55UnBjTW9kZWwudHh0IC1tYXBwaW5nIFJwY0xpdE1hcHBpbmcueG1sIHdzY29tcGlsZV9jb25maWcueG1sIi8+IAorPCEtLQorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgorICAgICAgIHZhbHVlPSItZ2VuIC1jcCAuIC1rZWVwIC1kIG91dHB1dCAtWGRlYnVnbW9kZWw6YW55UnBjTW9kZWwudHh0IC1tYXBwaW5nIFJwY0xpdE1hcHBpbmcueG1sIHdzY29tcGlsZV9jb25maWcueG1sIi8+CiAtLT4KICAgICA8L2FudGNhbGw+CiAgICAgPGRlbGV0ZSBkaXI9Im91dHB1dCIvPgogICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIHRoZSBXZWJTZXJ2aWNlcyB0ZXN0KQotCQkJYW50IGNsZWFuIAotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyB0aGUgV2ViU2VydmljZXMgdGVzdCkKKyAgICAgICAgICAgIGFudCBjbGVhbgorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjbGl0L3JwY2xpdC9TaW1wbGVUZXN0SW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ycGNsaXQvcnBjbGl0L1NpbXBsZVRlc3RJbXBsLmphdmEKaW5kZXggYzBiNTkyZS4uMWUyYjRmMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ycGNsaXQvcnBjbGl0L1NpbXBsZVRlc3RJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ycGNsaXQvcnBjbGl0L1NpbXBsZVRlc3RJbXBsLmphdmEKQEAgLTE1LDcgKzE1LDcgQEAKICAqLwogCiAvKgotICogQCgjKVNpbXBsZVRlc3RJbXBsLmphdmEJMS4zIDAyLzA0LzA1CisgKiBAKCMpU2ltcGxlVGVzdEltcGwuamF2YSAgICAxLjMgMDIvMDQvMDUKICAqLwogCiBwYWNrYWdlIHJwY2xpdDsKQEAgLTM3LDcgKzM3LDcgQEAKIAogICAgIHB1YmxpYyBTaW1wbGVUZXN0SW1wbCgpe30KIAotICAgIHB1YmxpYyBFY2hvU3RyaW5nVHlwZSBlY2hvU3RyaW5nKFN0cmluZ1Jlc3BvbnNlTmFtZVR5cGUgdikgCisgICAgcHVibGljIEVjaG9TdHJpbmdUeXBlIGVjaG9TdHJpbmcoU3RyaW5nUmVzcG9uc2VOYW1lVHlwZSB2KQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uCiAgICAgewogICAgICAgICByZXR1cm4gbnVsbDsgIC8vZm9yIG5vdwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ycGNsaXQvd3Njb21waWxlX2NvbmZpZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3JwY2xpdC93c2NvbXBpbGVfY29uZmlnLnhtbAppbmRleCA3ZGYwZDMzLi5jYzI5NmQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3JwY2xpdC93c2NvbXBpbGVfY29uZmlnLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3JwY2xpdC93c2NvbXBpbGVfY29uZmlnLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJTaW1wbGVUZXN0LndzZGwiCiAgICAgICBwYWNrYWdlTmFtZT0icnBjbGl0Ii8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3J1bl90ZXN0LnNoIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ydW5fdGVzdC5zaAppbmRleCA3ZjFlNTA1Li4zNGY4ODJmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3J1bl90ZXN0LnNoCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnVuX3Rlc3Quc2gKQEAgLTQ1LDExICs0NSwxMSBAQAogfQogCiBnZXRfdGVzdF90YXJnZXQoKXsKLQljYXNlICR7MX0gaW4KLQkJd2Vic2VydmljZV9hbGwgKQotCQkJVEFSR0VUPWFsbAotCQkJZXhwb3J0IFRBUkdFVDs7Ci0JZXNhYworICAgIGNhc2UgJHsxfSBpbgorICAgICAgICB3ZWJzZXJ2aWNlX2FsbCApCisgICAgICAgICAgICBUQVJHRVQ9YWxsCisgICAgICAgICAgICBleHBvcnQgVEFSR0VUOzsKKyAgICBlc2FjCiB9CiAKIE9QVD0kezF9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvYnVpbGQueG1sCmluZGV4IDBiMzhiZWUuLmJhOTEzZjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvYnVpbGQueG1sCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgJmNvbW1vblNldHVwOwogICAgICZjb21tb25CdWlsZDsKICAgICAmcmVwb3J0aW5nOwotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjaGVjay1uc3MiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPCEtLQogICAgICAgICAgIERldGVybWluZSBpZiB3ZSBuZWVkIHRvIHVzZSB0aGUgY2VydHV0aWwgb3IgdGhlIGtleXRvb2wgY29tbWFuZCB0bwpAQCAtNDcsOCArNDcsOCBAQAogICAgICAgICAgICAgPC9hbmQ+CiAgICAgICAgIDwvY29uZGl0aW9uPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIAorCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgY2hlY2stbnNzIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgdGhlIHZhbGlkIGNlcnRpZmljYXRlIGluIGtlc3RvcmUuamtzIi8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7amF2YS5ob21lfS9iaW4va2V5dG9vbCIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KQEAgLTc3LDEyICs3NywxMiBAQAogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtzc2wucGFzc3dvcmR9Ii8+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSItZG5hbWUiLz4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9ImNuPVVua25vd24gRHVrZSwgb3U9UHJvZywgbz1IYWNrU29mdCwgYz1VUyIvPgotICAgICAgICA8L2V4ZWM+ICAgICAgICAgICAKKyAgICAgICAgPC9leGVjPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwLXBlIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAtZWUiLz4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICAKKworCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cC1wZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iIHVubGVzcz0idXNlLmNlcnR1dGlsIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iRXhwb3J0aW5nIGFwcHNlcnZlciBwdWJsaWMga2V5IGZyb20gJHthZG1pbi5kb21haW59Ii8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7amF2YS5ob21lfS9iaW4va2V5dG9vbCIgZmFpbG9uZXJyb3I9InRydWUiPgpAQCAtOTUsMjAgKzk1LDIwIEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkV4dHJhY3RpbmcgdGVzdGVyIHB1YmxpYyBrZXkiLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtqYXZhLmhvbWV9L2Jpbi9rZXl0b29sIiBmYWlsb25lcnJvcj0idHJ1ZSI+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii1leHBvcnQgLWFsaWFzIHMxYXN0ZXN0ZXIgLWtleXN0b3JlIGtleXN0b3JlLmprcyAtc3RvcmVwYXNzICR7c3NsLnBhc3N3b3JkfSAtZmlsZSBjbGllbnQuY2VyIi8+Ci0gICAgICAgIDwvZXhlYz4gICAgICAgIAorICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkltcG9ydGluZyB0ZXN0ZXIgcHVibGljIGtleSBpbiBhcHBzZXJ2ZXIgdHJ1c3RlZCBjZXJ0aWZpY2F0ZXMiLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtqYXZhLmhvbWV9L2Jpbi9rZXl0b29sIiBmYWlsb25lcnJvcj0idHJ1ZSI+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii1pbXBvcnQgLW5vcHJvbXB0IC1hbGlhcyBzMWFzdGVzdGVyIC1rZXlzdG9yZSAke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZy9jYWNlcnRzLmprcyAtc3RvcmVwYXNzICR7c3NsLnBhc3N3b3JkfSAtZmlsZSBjbGllbnQuY2VyIi8+CiAgICAgICAgIDwvZXhlYz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXBlLXNlcnZlciIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cC1lZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJ1c2UuY2VydHV0aWwiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJFeHBvcnRpbmcgYXBwc2VydmVyIHB1YmxpYyBrZXkgZnJvbSAke2FkbWluLmRvbWFpbn0iLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZSA9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2NlcnR1dGlsIiBmYWlsb25lcnJvcj0idHJ1ZSI+CiAgICAgICAgICAgICA8ZW52IGtleT0iTERfTElCUkFSWV9QQVRIIiBwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgotICAgICAgICAgICAgPGFyZyBsaW5lPSItTCAtbiBzMWFzIC1kICR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnIC1hIC1vIGFwcHNlcnZlci5jZXIiLz4gICAgICAgICAgICAKLSAgICAgICAgPC9leGVjPiAgICAgICAgCisgICAgICAgICAgICA8YXJnIGxpbmU9Ii1MIC1uIHMxYXMgLWQgJHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcgLWEgLW8gYXBwc2VydmVyLmNlciIvPgorICAgICAgICA8L2V4ZWM+CiAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iSW1wb3J0aW5nIHRoZSBBcHBzZXJ2ZXIgY2VydGlmaWNhdGUgb24gdGhlIGNsaWVudCBrZXlzdG9yZSIvPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2phdmEuaG9tZX0vYmluL2tleXRvb2wiIGZhaWxvbmVycm9yPSJ0cnVlIj4KQEAgLTExNyw3ICsxMTcsNyBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJFeHRyYWN0aW5nIHRlc3RlciBwdWJsaWMga2V5Ii8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7amF2YS5ob21lfS9iaW4va2V5dG9vbCIgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItZXhwb3J0IC1yZmMgLWFsaWFzIHMxYXN0ZXN0ZXIgLWtleXN0b3JlIGtleXN0b3JlLmprcyAtc3RvcmVwYXNzICR7c3NsLnBhc3N3b3JkfSAtZmlsZSBjbGllbnQuY2VyIi8+Ci0gICAgICAgIDwvZXhlYz4gICAgICAgIAorICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkltcG9ydGluZyB0ZXN0ZXIgcHVibGljIGtleSBpbiBhcHBzZXJ2ZXIgdHJ1c3RlZCBjZXJ0aWZpY2F0ZXMiLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZSA9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2NlcnR1dGlsIiBmYWlsb25lcnJvcj0idHJ1ZSI+CiAgICAgICAgICAgICA8ZW52IGtleT0iTERfTElCUkFSWV9QQVRIIiBwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgIDwvZXhlYz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LWVlLXNlcnZlciIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmVzdGFydC1wZS1zZXJ2ZXIiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJSZXN0YXJ0aW5nIFBFIHNlcnZlci4uLiIvPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgpAQCAtMTUxLDIwICsxNTEsMjAgQEAKICAgICAgICAgPGRlbGV0ZSBmaWxlPSJpbnZhbGlkX2tleXN0b3JlLmprcyIvPgogICAgICAgICA8ZGVsZXRlIGZpbGU9ImtleXN0b3JlLmprcyIvPgogICAgICAgICA8ZGVsZXRlIGZpbGU9ImFwcHNlcnZlci5jZXIiLz4KLSAgICAgICAgPGRlbGV0ZSBmaWxlPSJjbGllbnQuY2VyIi8+ICAgICAgICAKKyAgICAgICAgPGRlbGV0ZSBmaWxlPSJjbGllbnQuY2VyIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cC1wZSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAtZWUiLz4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICAgICAgCisKKwogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cC1wZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iIHVubGVzcz0idXNlLmNlcnR1dGlsIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iUmVtb3ZpbmcgdGVzdGVyIHB1YmxpYyBrZXkgZnJvbSBhcHBzZXJ2ZXIgdHJ1c3RlZCBjZXJ0aWZpY2F0ZXMiLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtqYXZhLmhvbWV9L2Jpbi9rZXl0b29sIiBmYWlsb25lcnJvcj0idHJ1ZSI+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii1kZWxldGUgLWFsaWFzIHMxYXN0ZXN0ZXIgLWtleXN0b3JlICR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2NhY2VydHMuamtzIC1zdG9yZXBhc3MgJHtzc2wucGFzc3dvcmR9Ii8+Ci0gICAgICAgIDwvZXhlYz4gICAgICAgIAorICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1wZS1zZXJ2ZXIiLz4KLSAgICA8L3RhcmdldD4gICAgICAgIAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwLWVlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgaWY9InVzZS5jZXJ0dXRpbCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlJlbW92aW5nIHRlc3RlciBwdWJsaWMga2V5IGZyb20gYXBwc2VydmVyIHRydXN0ZWQgY2VydGlmaWNhdGVzIi8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGUgPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9jZXJ0dXRpbCIgZmFpbG9uZXJyb3I9InRydWUiPgpAQCAtMTcyLDI4ICsxNzIsMjggQEAKICAgICAgICAgICAgIDxhcmcgbGluZT0iLUQgLW4gczFhc3Rlc3RlciAtZCAke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZyIvPgogICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1lZS1zZXJ2ZXIiLz4KLSAgICA8L3RhcmdldD4gICAgICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgogICAgICAgICA8YW50IGRpcj0iZWpiX3NzbF9jYWNlcnQiIHRhcmdldD0iYWxsIi8+Ci0gICAgICAgIDxhbnQgZGlyPSJlamIzX3NzbF9jYWNlcnQiIHRhcmdldD0iYWxsIi8+ICAgICAgICAKKyAgICAgICAgPGFudCBkaXI9ImVqYjNfc3NsX2NhY2VydCIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0iIAorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Jhc2VkaXJ9IgogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9IioqLm91dHB1dCwgY291bnQudHh0Ii8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8YW50IGRpcj0iZWpiX3NzbF9jYWNlcnQiIHRhcmdldD0iY2xlYW4iLz4KICAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIHdlYnNlcnZpY2Ugc2VjdXJpdHkgdGVzdHMpCisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSB3ZWJzZXJ2aWNlIHNlY3VyaXR5IHRlc3RzKQogCi0JCQlhbnQgZWpiX3NzbF9jYWNlcnQgKEV4ZWN1dGVzIHRoZSBjbGllbnQgY2VydGlmaWNhdGUgZWpiIHNzbCBlbmRwb2ludCB0ZXN0KQotCTwvZWNobz4KKyAgICAgICAgICAgIGFudCBlamJfc3NsX2NhY2VydCAoRXhlY3V0ZXMgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSBlamIgc3NsIGVuZHBvaW50IHRlc3QpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9jb21tb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9jb21tb24ueG1sCmluZGV4IDdkZDZmNzkuLjY5NjE4OTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvY29tbW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2NvbW1vbi54bWwKQEAgLTE4LDE1ICsxOCwxNSBAQAogCiAgICAgPCEtLSBydW4gYXBwY2xpZW50IGluIEFwcFNlcnYgIC0tPgogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50LXNlY3VyZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICAKKwogICAgICAgPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIGFwcGNsaWVudCBhdCBCYXNlZGlyOiR7YmFzZWRpcn0iIC8+Ci0gICAgICA8ZWNobyBtZXNzYWdlPSJBcHBjbGllbnQgamFyOiAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiIAorICAgICAgPGVjaG8gbWVzc2FnZT0iQXBwY2xpZW50IGphcjogJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIgogICAgICAgICAgIC8+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJBcHBuYW1lOiAke2FwcG5hbWV9IiAvPgogICAgICAgPGVjaG8gbWVzc2FnZT0iRGlzcGxheSBuYW1lIGZvciBhcHBjbGllbnQ6ICR7YXBwbmFtZX1DbGllbnQiIC8+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJhcHBjbGllbnQgLWNsaWVudCAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIgLW5hbWUgJHthcHBuYW1lfUNsaWVudCAtdGV4dGF1dGggLXVzZXIgajJlZSAtcGFzc3dvcmQgajJlZSAteG1sICR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sICR7YXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3N9Ii8+CiAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iIGZhaWxvbmVycm9yPSJmYWxzZSI+Ci0gICAgPGVudiBrZXk9IlZNQVJHUyIgdmFsdWU9Ii1EamF2YXgubmV0LnNzbC5rZXlTdG9yZT0ke2Jhc2VkaXJ9Ly4uL2tleXN0b3JlLmprcyAtRGphdmF4Lm5ldC5zc2wua2V5U3RvcmVQYXNzd29yZD1jaGFuZ2VpdCAtRGphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZT0ke2Jhc2VkaXJ9Ly4uL2NhY2VydHMuamtzIC1EamF2YXgubmV0LnNzbC50cnVzdFN0b3JlUGFzc3dvcmQ9Y2hhbmdlaXQiLz4gICAgICAgICAgICAgICAgCisgICAgPGVudiBrZXk9IlZNQVJHUyIgdmFsdWU9Ii1EamF2YXgubmV0LnNzbC5rZXlTdG9yZT0ke2Jhc2VkaXJ9Ly4uL2tleXN0b3JlLmprcyAtRGphdmF4Lm5ldC5zc2wua2V5U3RvcmVQYXNzd29yZD1jaGFuZ2VpdCAtRGphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZT0ke2Jhc2VkaXJ9Ly4uL2NhY2VydHMuamtzIC1EamF2YXgubmV0LnNzbC50cnVzdFN0b3JlUGFzc3dvcmQ9Y2hhbmdlaXQiLz4KICAgICAgICAgPGFyZyBsaW5lPSItY2xpZW50ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIvPgogICAgICAgICA8YXJnIGxpbmU9Ii1uYW1lICR7YXBwbmFtZX1DbGllbnQiLz4KICAgICAgICAgPGFyZyBsaW5lPSItdGV4dGF1dGgiLz4KQEAgLTM1LDE5ICszNSwxOSBAQAogICAgICAgICA8YXJnIGxpbmU9Ii14bWwgJHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwiLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzfSIvPgogICAgICAgPC9leGVjPgotICAgIDwvdGFyZ2V0PiAgCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8IS0tIHJ1biBhcHBjbGllbnQgaW4gQXBwU2VydiAgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQtaW52YWxpZC1zZWN1cmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgCisKICAgICAgIDxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBhcHBjbGllbnQgYXQgQmFzZWRpcjoke2Jhc2VkaXJ9IiAvPgotICAgICAgPGVjaG8gbWVzc2FnZT0iQXBwY2xpZW50IGphcjogJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIiAKKyAgICAgIDxlY2hvIG1lc3NhZ2U9IkFwcGNsaWVudCBqYXI6ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIKICAgICAgICAgICAvPgogICAgICAgPGVjaG8gbWVzc2FnZT0iQXBwbmFtZTogJHthcHBuYW1lfSIgLz4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRpc3BsYXkgbmFtZSBmb3IgYXBwY2xpZW50OiAke2FwcG5hbWV9Q2xpZW50IiAvPgogICAgICAgPGVjaG8gbWVzc2FnZT0iYXBwY2xpZW50IC1jbGllbnQgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIC1uYW1lICR7YXBwbmFtZX1DbGllbnQgLXRleHRhdXRoIC11c2VyIGoyZWUgLXBhc3N3b3JkIGoyZWUgLXhtbCAke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZy9nbGFzc2Zpc2gtYWNjLnhtbCAke2FwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzfSIvPgogICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9IiBmYWlsb25lcnJvcj0iZmFsc2UiPgotICAgIDxlbnYga2V5PSJWTUFSR1MiIHZhbHVlPSItRGphdmF4Lm5ldC5zc2wua2V5U3RvcmU9JHtiYXNlZGlyfS8uLi9pbnZhbGlkX2tleXN0b3JlLmprcyAtRGphdmF4Lm5ldC5zc2wua2V5U3RvcmVQYXNzd29yZD1jaGFuZ2VpdCAtRGphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZT0ke2Jhc2VkaXJ9Ly4uL2NhY2VydHMuamtzIC1EamF2YXgubmV0LnNzbC50cnVzdFN0b3JlUGFzc3dvcmQ9Y2hhbmdlaXQiLz4gICAgICAgICAgICAgICAgCisgICAgPGVudiBrZXk9IlZNQVJHUyIgdmFsdWU9Ii1EamF2YXgubmV0LnNzbC5rZXlTdG9yZT0ke2Jhc2VkaXJ9Ly4uL2ludmFsaWRfa2V5c3RvcmUuamtzIC1EamF2YXgubmV0LnNzbC5rZXlTdG9yZVBhc3N3b3JkPWNoYW5nZWl0IC1EamF2YXgubmV0LnNzbC50cnVzdFN0b3JlPSR7YmFzZWRpcn0vLi4vY2FjZXJ0cy5qa3MgLURqYXZheC5uZXQuc3NsLnRydXN0U3RvcmVQYXNzd29yZD1jaGFuZ2VpdCIvPgogICAgICAgICA8YXJnIGxpbmU9Ii1jbGllbnQgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+CiAgICAgICAgIDxhcmcgbGluZT0iLW5hbWUgJHthcHBuYW1lfUNsaWVudCIvPgogICAgICAgICA8YXJnIGxpbmU9Ii10ZXh0YXV0aCIvPgpAQCAtNTYsNCArNTYsNCBAQAogICAgICAgICA8YXJnIGxpbmU9Ii14bWwgJHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwiLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzfSIvPgogICAgICAgPC9leGVjPgotICAgIDwvdGFyZ2V0PiAgICAgIAorICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamIzX3NzbF9jYWNlcnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamIzX3NzbF9jYWNlcnQvYnVpbGQueG1sCmluZGV4IDdjODU0MDkuLjE0MThjNWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiM19zc2xfY2FjZXJ0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYjNfc3NsX2NhY2VydC9idWlsZC54bWwKQEAgLTI2LDE4ICsyNiwxOCBAQAogCiA8cHJvamVjdCBuYW1lPSJFSkIzX1NTTF9DQUNFUlQiIGRlZmF1bHQ9ImNvcmUiIGJhc2VkaXI9Ii4iPgogCi0gICAgJmNvbW1vbkFubm90YXRpb25zOyAgICAKKyAgICAmY29tbW9uQW5ub3RhdGlvbnM7CiAgICAgJmNvbW1vblNldHVwOwogICAgICZjb21tb25CdWlsZDsKICAgICAmY29tbW9uOwogICAgIDxwcm9wZXJ0eSBuYW1lPSJzcmMtbmFtZSIgdmFsdWU9ImVuZHBvaW50L0hlbGxvSW1wbC5qYXZhIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImNsaWVudC1zcmMtbmFtZSIgdmFsdWU9ImNsaWVudC9DbGllbnQuamF2YSIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJhcHAtY2xpZW50LXBhcmFtZXRlcnMiIHZhbHVlPSIteG1sICR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sIi8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InRlc3QtYnVpbGQiPgogICAgICAgICA8YmFzZW5hbWUgZmlsZT0iJHtzcmMtbmFtZX0iIHByb3BlcnR5PSJzZXJ2ZXIiIHN1ZmZpeD0iLmphdmEiLz4KICAgICAgICAgPGRpcm5hbWUgZmlsZT0iJHtzcmMtbmFtZX0iIHByb3BlcnR5PSJkaXJlY3RvcnkiLz4KLSAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7ZGlyZWN0b3J5fSIgcHJvcGVydHk9InBrZy1uYW1lIi8+IAorICAgICAgICA8YmFzZW5hbWUgZmlsZT0iJHtkaXJlY3Rvcnl9IiBwcm9wZXJ0eT0icGtnLW5hbWUiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ0ZXN0LWNvbXBpbGUiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQnVpbGRpbmcgd2l0aCBwYWNrYWdlICR7cGtnLW5hbWV9Ii8+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvYXJjaGl2ZS8ke3NlcnZlcn0uamFyIgpAQCAtNDUsMjggKzQ1LDI4IEBACiAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwa2ctbmFtZX0vKioiPgogICAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke3BrZy1uYW1lfSIKICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9IioueG1sIi8+Ci0gICAgICAgIDwvamFyPiAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InRlc3QtZGVwbG95IiBkZXBlbmRzPSJ0ZXN0LWJ1aWxkIj4KLSAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0ic2VydmVyIiBzdWZmaXg9Ii5qYXZhIi8+ICAgCi0gICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke3NlcnZlcn0iIHByb3BlcnR5PSJwb3J0IiBzdWZmaXg9IkVKQiIvPiAgICAgCisgICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke3NyYy1uYW1lfSIgcHJvcGVydHk9InNlcnZlciIgc3VmZml4PSIuamF2YSIvPgorICAgICAgICA8YmFzZW5hbWUgZmlsZT0iJHtzZXJ2ZXJ9IiBwcm9wZXJ0eT0icG9ydCIgc3VmZml4PSJFSkIiLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXNhZG1pbiIgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICAgICAgICAgPGFyZyBsaW5lPSJkZXBsb3kgLS1wb3J0ICR7YWRtaW4ucG9ydH0gLS11c2VyICR7YWRtaW4udXNlcn0gLS1wYXNzd29yZGZpbGUgJHthZG1pbi5wYXNzd29yZC5maWxlfSAke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2FyY2hpdmUvJHtzZXJ2ZXJ9LmphciIvPgotICAgICAgICAgPC9leGVjPiAgICAgICAgCisgICAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InRlc3QtdW5kZXBsb3kiPgotICAgICAgICA8YmFzZW5hbWUgZmlsZT0iJHtzcmMtbmFtZX0iIHByb3BlcnR5PSJzZXJ2ZXIiIHN1ZmZpeD0iLmphdmEiLz4gICAKLSAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7c2VydmVyfSIgcHJvcGVydHk9InBvcnQiIHN1ZmZpeD0iRUpCIi8+ICAgICAKKyAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0ic2VydmVyIiBzdWZmaXg9Ii5qYXZhIi8+CisgICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke3NlcnZlcn0iIHByb3BlcnR5PSJwb3J0IiBzdWZmaXg9IkVKQiIvPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hc2FkbWluIiBmYWlsb25lcnJvcj0idHJ1ZSI+CiAgICAgICAgICAgICA8YXJnIGxpbmU9InVuZGVwbG95IC0tcG9ydCAke2FkbWluLnBvcnR9IC0tdXNlciAke2FkbWluLnVzZXJ9IC0tcGFzc3dvcmRmaWxlICR7YWRtaW4ucGFzc3dvcmQuZmlsZX0gJHtzZXJ2ZXJ9Ii8+Ci0gICAgICAgICA8L2V4ZWM+ICAgICAKLSAgICA8L3RhcmdldD4gICAgCisgICAgICAgICA8L2V4ZWM+CisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InRlc3QtcHJlcGFyZS1jbGllbnQiPgotICAgICAgICA8YmFzZW5hbWUgZmlsZT0iJHtzcmMtbmFtZX0iIHByb3BlcnR5PSJzZXJ2ZXIiIHN1ZmZpeD0iLmphdmEiLz4gICAKLSAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7c2VydmVyfSIgcHJvcGVydHk9InBvcnQiIHN1ZmZpeD0iRUpCIi8+ICAgICAKKyAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0ic2VydmVyIiBzdWZmaXg9Ii5qYXZhIi8+CisgICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke3NlcnZlcn0iIHByb3BlcnR5PSJwb3J0IiBzdWZmaXg9IkVKQiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuIi8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJDcmVhdGUgYXBwY2xpZW50IGphciBmaWxlIi8+CkBAIC03NCwzNCArNzQsMzQgQEAKICAgICAgICAgICAgIDxhcmcgbGluZT0iLWtlZXAgLWQgJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIGxvY2Fsd3NkbC8ke3NlcnZlcn1TZXJ2aWNlLndzZGwiLz4KICAgICAgICAgIDwvZXhlYz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNsaWVudCIvPgotICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuamFyLWNsaWVudC11dGlscyIvPiAgICAgICAKKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmphci1jbGllbnQtdXRpbHMiLz4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9hcmNoaXZlL0hlbGxvQXBwQ2xpZW50LmphciI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIvPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0ibG9jYWx3c2RsLyoqIi8+CiAgICAgICAgICAgICA8bWFuaWZlc3Q+Ci0gICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJNYWluLUNsYXNzIiB2YWx1ZT0iY2xpZW50LkNsaWVudCIvPiAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iTWFpbi1DbGFzcyIgdmFsdWU9ImNsaWVudC5DbGllbnQiLz4KICAgICAgICAgICAgIDwvbWFuaWZlc3Q+Ci0gICAgICAgIDwvamFyPiAgICAKLSAgICA8L3RhcmdldD4gIAorICAgICAgICA8L2phcj4KKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idGVzdC1ydW4iPgotICAgICAgICA8YmFzZW5hbWUgZmlsZT0iJHtzcmMtbmFtZX0iIHByb3BlcnR5PSJzZXJ2ZXIiIHN1ZmZpeD0iLmphdmEiLz4gICAKLSAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7c2VydmVyfSIgcHJvcGVydHk9InBvcnQiIHN1ZmZpeD0iRUpCIi8+ICAgICAKKyAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0ic2VydmVyIiBzdWZmaXg9Ii5qYXZhIi8+CisgICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke3NlcnZlcn0iIHByb3BlcnR5PSJwb3J0IiBzdWZmaXg9IkVKQiIvPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hcHBjbGllbnQiPgotICAgICAgICAgICAgPGFyZyBsaW5lPSItY2xpZW50ICR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvYXJjaGl2ZS9IZWxsb0FwcENsaWVudC5qYXIgRkFJTFVSRSBlamItc3NsLWNhY2VydC1uby1jZXJ0aWZpY2F0ZS10ZXN0Ii8+ICAgIAotICAgICAgICA8L2V4ZWM+ICAgICAgICAgCisgICAgICAgICAgICA8YXJnIGxpbmU9Ii1jbGllbnQgJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9hcmNoaXZlL0hlbGxvQXBwQ2xpZW50LmphciBGQUlMVVJFIGVqYi1zc2wtY2FjZXJ0LW5vLWNlcnRpZmljYXRlLXRlc3QiLz4KKyAgICAgICAgPC9leGVjPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1pbnZhbGlkLXNlY3VyZSI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9IkhlbGxvIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiCiAgICAgICAgICAgICAgICAgdmFsdWU9IkZBSUxVUkUgZWpiLXNzbC1jYWNlcnQtaW52YWxpZC1jZXJ0aWZpY2F0ZS10ZXN0Ii8+Ci0gICAgICAgIDwvYW50Y2FsbD4gICAgICAgIAorICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LXNlY3VyZSI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9IkhlbGxvIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiCiAgICAgICAgICAgICAgICAgdmFsdWU9IlNVQ0NFU1MgZWpiLXNzbC1jYWNlcnQtdmFsaWQtY2VydGlmaWNhdGUtdGVzdCIvPgotICAgICAgICA8L2FudGNhbGw+ICAgICAgICAgICAgICAgICAgICAgIAotICAgIDwvdGFyZ2V0PiAgICAgIAotICAgIAorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sIHRlc3QtZGVwbG95LCB0ZXN0LXByZXBhcmUtY2xpZW50LCB0ZXN0LXJ1biwgdGVzdC11bmRlcGxveSI+CiAgICAgPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiM19zc2xfY2FjZXJ0L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiM19zc2xfY2FjZXJ0L2NsaWVudC9DbGllbnQuamF2YQppbmRleCA4NzJhN2JmLi44MmI1OTcwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYjNfc3NsX2NhY2VydC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamIzX3NzbF9jYWNlcnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zNiwyNyArMzYsMjcgQEAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICAgICAgYm9vbGVhbiBzdWNjZXNzRXhwZWN0ZWQ9dHJ1ZTsKICAgICAgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbjsKLQkgICAgaWYgKGFyZ3MubGVuZ3RoPjEpIHsKKyAgICAgICAgaWYgKGFyZ3MubGVuZ3RoPjEpIHsKICAgICAgICAgICAgICAgICBpZiAoYXJnc1swXS5jb21wYXJlVG9JZ25vcmVDYXNlKCJGYWlsdXJlIik9PTApIHsKICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc0V4cGVjdGVkPWZhbHNlOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPWFyZ3NbMV07CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN1Y2Nlc3NFeHBlY3RlZCA9IGZhbHNlOwotCQlkZXNjcmlwdGlvbj0id2Vic2VydmljZXMtZWpiLXJvbGVzQWxsb3dlZC1hbm5vdGF0aW9uLW5lZ2F0aXZlIjsKLQkgICAgfQorICAgICAgICBkZXNjcmlwdGlvbj0id2Vic2VydmljZXMtZWpiLXJvbGVzQWxsb3dlZC1hbm5vdGF0aW9uLW5lZ2F0aXZlIjsKKyAgICAgICAgfQogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGFydGluZyB0ZXN0ICIgKyBkZXNjcmlwdGlvbik7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGRlc2NyaXB0aW9uLCBzdWNjZXNzRXhwZWN0ZWQpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeShkZXNjcmlwdGlvbik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGRlc2NyaXB0aW9uKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nIGRlc2MsIGJvb2xlYW4gc3VjY2Vzc0V4cGVjdGVkKSB7Ci0gICAgICAgICAgIAorCiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBIZWxsb0ltcGwgcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9JbXBsUG9ydCgpOwotICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKICAgICAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYjNfc3NsX2NhY2VydC9lbmRwb2ludC9IZWxsb0ltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiM19zc2xfY2FjZXJ0L2VuZHBvaW50L0hlbGxvSW1wbC5qYXZhCmluZGV4IDNhYzBmYjkuLjYxOTg4OTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiM19zc2xfY2FjZXJ0L2VuZHBvaW50L0hlbGxvSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiM19zc2xfY2FjZXJ0L2VuZHBvaW50L0hlbGxvSW1wbC5qYXZhCkBAIC0yNiw1ICsyNiw1IEBACiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7CiAgICAgICAgIHJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamIzX3NzbF9jYWNlcnQvZW5kcG9pbnQvc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamIzX3NzbF9jYWNlcnQvZW5kcG9pbnQvc3VuLWVqYi1qYXIueG1sCmluZGV4IDRhMTgzMWYuLjliYzkzYzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiM19zc2xfY2FjZXJ0L2VuZHBvaW50L3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYjNfc3NsX2NhY2VydC9lbmRwb2ludC9zdW4tZWpiLWphci54bWwKQEAgLTIzLDExICsyMywxMSBAQAogICAgIDxlamI+CiAgICAgICA8ZWpiLW5hbWU+SGVsbG9JbXBsPC9lamItbmFtZT4KICAgICAgIDx3ZWJzZXJ2aWNlLWVuZHBvaW50PgotCTxwb3J0LWNvbXBvbmVudC1uYW1lPkhlbGxvSW1wbDwvcG9ydC1jb21wb25lbnQtbmFtZT4KLQk8dHJhbnNwb3J0LWd1YXJhbnRlZT5DT05GSURFTlRJQUw8L3RyYW5zcG9ydC1ndWFyYW50ZWU+ICAgICAgICAKLQk8bG9naW4tY29uZmlnPgotCSAgPGF1dGgtbWV0aG9kPkNMSUVOVC1DRVJUPC9hdXRoLW1ldGhvZD4KLQk8L2xvZ2luLWNvbmZpZz4KKyAgICA8cG9ydC1jb21wb25lbnQtbmFtZT5IZWxsb0ltcGw8L3BvcnQtY29tcG9uZW50LW5hbWU+CisgICAgPHRyYW5zcG9ydC1ndWFyYW50ZWU+Q09ORklERU5USUFMPC90cmFuc3BvcnQtZ3VhcmFudGVlPgorICAgIDxsb2dpbi1jb25maWc+CisgICAgICA8YXV0aC1tZXRob2Q+Q0xJRU5ULUNFUlQ8L2F1dGgtbWV0aG9kPgorICAgIDwvbG9naW4tY29uZmlnPgogICAgICAgPC93ZWJzZXJ2aWNlLWVuZHBvaW50PgogICAgIDwvZWpiPgogICAgIDx3ZWJzZXJ2aWNlLWRlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGZmNjhhMjAuLjhkMTI3NGYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIyICsxNSwyMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id3MiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWVqYnRheGNhbCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZWpidGF4Y2FsIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLmVqYi50YXhjYWwuY2xpZW50LlRheENhbENsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5lamIudGF4Y2FsLmNsaWVudC5UYXhDYWxDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPCEtLXByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLy0tPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamIvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9jbGllbnQvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9jbGllbnQvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvY2xpZW50L2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9jbGllbnQvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0id3NkbC1maWxlIiB2YWx1ZT0id3NkbC9UYXhDYWxFamJTZXJ2aWNlLndzZGwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9idWlsZC54bWwKaW5kZXggODA2N2MyNC4uZjJmNmVjNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9idWlsZC54bWwKQEAgLTMxLDE0ICszMSwxNCBAQAogICAgICZjb21tb25TZWN1cml0eTsKICAgICAmdGVzdHByb3BlcnRpZXM7CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgCisgICAgPHRhcmdldCBuYW1lPSJhbGwiCiAgICAgZGVwZW5kcz0iY2xlYW4sIGJ1aWxkLCBkZXBsb3ksIHJ1biwgdW5kZXBsb3kiLz4KICAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0IiBkZXBlbmRzPSJjbGVhbiwgYnVpbGQsIGRlcGxveSwgcnVuLCB1bmRlcGxveSIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbixjbGVhbi1jb21tb24sIGdlbmVyYXRlLWFydGlmYWN0cyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDksMTggKzQ5LDE4IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImdlbmVyYXRlLWFydGlmYWN0cyI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJpbXBvcnQtd3NkbCI+Ci0JICAgIDxwYXJhbSBuYW1lPSJtYXBwaW5nLmZpbGUiCi0JCXZhbHVlPSIke2VqYi1tYXBwaW5nLnhtbH0iLz4KLQkgICAgPHBhcmFtIG5hbWU9ImNvbmZpZy13c2RsLmZpbGUiCi0JCXZhbHVlPSJjb25maWcvY29uZmlnLWVqYi54bWwiLz4KLQk8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJpbXBvcnQtd3NkbCI+Ci0JICAgIDxwYXJhbSBuYW1lPSJtYXBwaW5nLmZpbGUiCi0JCXZhbHVlPSIke2NsaWVudC1tYXBwaW5nLnhtbH0iLz4KLQkgICAgPHBhcmFtIG5hbWU9ImNvbmZpZy13c2RsLmZpbGUiCi0JCXZhbHVlPSJjb25maWcvY29uZmlnLWNsaWVudC54bWwiLz4KLQk8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJpbXBvcnQtd3NkbCI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJtYXBwaW5nLmZpbGUiCisgICAgICAgIHZhbHVlPSIke2VqYi1tYXBwaW5nLnhtbH0iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImNvbmZpZy13c2RsLmZpbGUiCisgICAgICAgIHZhbHVlPSJjb25maWcvY29uZmlnLWVqYi54bWwiLz4KKyAgICA8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJpbXBvcnQtd3NkbCI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJtYXBwaW5nLmZpbGUiCisgICAgICAgIHZhbHVlPSIke2NsaWVudC1tYXBwaW5nLnhtbH0iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImNvbmZpZy13c2RsLmZpbGUiCisgICAgICAgIHZhbHVlPSJjb25maWcvY29uZmlnLWNsaWVudC54bWwiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJ3cy1wYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KQEAgLTEyMSwxMyArMTIxLDEzIEBACiAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImluaXQtY29tbW9uLGNvbXBpbGUiPgotCTxhbnRjYWxsIHRhcmdldD0id3MtcGFja2FnZS1lamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgIDxhbnRjYWxsIHRhcmdldD0id3MtcGFja2FnZS1lamItamFyLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSJjb20vc3VuL3MxcGVxZS93ZWJzZXJ2aWNlcy9lamIvdGF4Y2FsLyouY2xhc3MiIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamIuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIvPgotCTwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9IndzLXBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+CisgICAgPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0id3MtcGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9ImNvbS9zdW4vczFwZXFlL3dlYnNlcnZpY2VzL2VqYi90YXhjYWwvY2xpZW50LyouY2xhc3MiIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIgpAQCAtMTM3LDIwICsxMzcsMjAgQEAKICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24sIHJlY29uZmlnLWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIAorCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0ic3RhdGV0YXgtZWpiLWVuZHBvaW50LXVybCIgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzdGF0ZXRheC1lamItZW5kcG9pbnQtdXJsIgogICAgICAgICAgICAgdmFsdWU9Imh0dHBzOi8vJHtodHRwLmhvc3R9OiR7aHR0cHMucG9ydH0vc3RhdGV0YXhlamIiLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9ImZlZHRheC1lamItZW5kcG9pbnQtdXJsIiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImZlZHRheC1lamItZW5kcG9pbnQtdXJsIgogICAgICAgICAgICAgdmFsdWU9Imh0dHBzOi8vJHtodHRwLmhvc3R9OiR7aHR0cHMucG9ydH0vZmVkdGF4ZWpiIi8+Ci0gCisKICAgICAgICAgPGVjaG8gbWVzc2FnZT0icHJvcGVydHkgc3RhdGV0YXgtZWpiLWVuZHBvaW50LXVybCBpcyBzZXQgdG86ICR7c3RhdGV0YXgtZWpiLWVuZHBvaW50LXVybH0iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0icHJvcGVydHkgZmVkdGF4LWVqYi1lbmRwb2ludC11cmwgaXMgc2V0IHRvOiAke2ZlZHRheC1lamItZW5kcG9pbnQtdXJsfSIvPgogCkBAIC0xNjEsMjMgKzE2MSwyMyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1pbnZhbGlkLXNlY3VyZSI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiCiAgICAgICAgICAgICB2YWx1ZT0iJHtzdGF0ZXRheC1lamItZW5kcG9pbnQtdXJsfSAke2ZlZHRheC1lamItZW5kcG9pbnQtdXJsfSBGYWxzZSBUcnVlIi8+Ci0gICAgICAgIDwvYW50Y2FsbD4gCisgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIKICAgICAgICAgICAgIHZhbHVlPSIke3N0YXRldGF4LWVqYi1lbmRwb2ludC11cmx9ICR7ZmVkdGF4LWVqYi1lbmRwb2ludC11cmx9IEZhbHNlIEZhbHNlIi8+Ci0gICAgICAgIDwvYW50Y2FsbD4gICAgICAgICAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKLSAgPCEtLSAKLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKKyAgPCEtLQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFVzZXIgRGVmaW5lZCBzcGVjaWZpYyB0YXJnZXRzCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgLS0+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2NsaWVudC9UYXhDYWxDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvY2xpZW50L1RheENhbENsaWVudC5qYXZhCmluZGV4IDM1MGUxNTYuLmQ5MTc2MmYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvY2xpZW50L1RheENhbENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvY2xpZW50L1RheENhbENsaWVudC5qYXZhCkBAIC0zMCwxMiArMzAsMTIgQEAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdFN1aXRlID0gIlRheENhbEVqYmJhc2VkV1MiOwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0Q2FzZSA9IG51bGw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVGF4Q2FsRWpiU2VydmljZSB0YXhDYWxTZXJ2aWNlID0gbnVsbDsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgCisKICAgICAgICAgYm9vbGVhbiBzdGF0ZVRheEludGVuZGVkUmVzdWx0PXRydWU7CiAgICAgICAgIGJvb2xlYW4gZmVkVGF4SW50ZW5kZWRSZXN1bHQ9dHJ1ZTsKLSAgICAgICAgCisKICAgICAgICAgaWYoYXJnc1swXSA9PSBudWxsIHx8IGFyZ3NbMV0gPT0gbnVsbCl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRheENhbCBjbGllbnQ6IEFyZ3VtZW50IG1pc3NpbmcuIFBsZWFzZSBwcm92aWRlIHRhcmdldCIgKwogICAgICAgICAgICAgICAgICAgICAiZW5kcG9pbnQgYWRkcmVzcyBhcyBhcmd1bWVudCIpOwpAQCAtNDgsNDcgKzQ4LDQ3IEBACiAgICAgICAgICAgICAgICAgZmVkVGF4SW50ZW5kZWRSZXN1bHQgPSAobmV3IEJvb2xlYW4oYXJnc1szXSkpLmJvb2xlYW5WYWx1ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCBlamIgYmFzZWQgd2Vic2VydmljZSIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgVGF4Q2FsQ2xpZW50IGNsaWVudCA9IG5ldyBUYXhDYWxDbGllbnQoKTsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIHRheENhbFNlcnZpY2UgPSAoVGF4Q2FsRWpiU2VydmljZSkKICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL1RheENhbEVqYlNlcnZpY2UiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjbGllbnQuY2FsbFN0YXRlVGF4U2VydmljZShzdGF0ZVRheEludGVuZGVkUmVzdWx0KTsKICAgICAgICAgICAgIGNsaWVudC5jYWxsRmVkVGF4U2VydmljZShmZWRUYXhJbnRlbmRlZFJlc3VsdCk7CiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RTdWl0ZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgY2FsbFN0YXRlVGF4U2VydmljZShib29sZWFuIGludGVuZGVkUmVzdWx0KSB7CiAgICAgICAgIGRvdWJsZSBpbmNvbWUgPSA4NTAwMC4wMDsKICAgICAgICAgZG91YmxlIGRlZHVjdGlvbnMgPSA1MDAwLjAwOwotICAgICAgICAKKwogICAgICAgICAvL1N0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQotICAgICAgICAvLwkiaHR0cDovL2xvY2FsaG9zdDoxMDI0L3RheGNhbGN1bGF0b3IiOwotICAgICAgICAKKyAgICAgICAgLy8gICAgImh0dHA6Ly9sb2NhbGhvc3Q6MTAyNC90YXhjYWxjdWxhdG9yIjsKKwogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN0YXRlVGF4SUYgdGF4Q2FsSUZQb3J0ID0gdGF4Q2FsU2VydmljZS5nZXRTdGF0ZVRheElGUG9ydCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgICgoU3R1Yil0YXhDYWxJRlBvcnQpLl9zZXRQcm9wZXJ0eShTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCiAgICAgICAgICAgICAgICAgICAgIHN0YXRlVGF4RW5kcG9pbnQpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGRvdWJsZSBzdGF0ZVRheCA9IHRheENhbElGUG9ydC5nZXRTdGF0ZVRheChpbmNvbWUsIGRlZHVjdGlvbnMpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZSB0YXggZnJvbSBlamIgYmFzZWQgVGF4Q2FsU2VydmljZSA6IiArIHN0YXRlVGF4KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZihzdGF0ZVRheCA9PSAyNDAwMC4wMCAmJiBpbnRlbmRlZFJlc3VsdCkKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIFN0YXRlVGF4UG9ydCIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGwgc3VjY2VlZGVkIHdoaWxlIGl0IHNob3VsZCBoYXZlIGZhaWxlZCIpOyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbCBzdWNjZWVkZWQgd2hpbGUgaXQgc2hvdWxkIGhhdmUgZmFpbGVkIik7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBTdGF0ZVRheFBvcnQiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBpZiAoaW50ZW5kZWRSZXN1bHQpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRheENhbEVqYldlYnNlcnZpY2UgY2xpZW50IGZhaWxlZCIpOwpAQCAtMTAyLDI1ICsxMDIsMjUgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNhbGxGZWRUYXhTZXJ2aWNlKGJvb2xlYW4gaW50ZW5kZWRSZXN1bHQpIHsKICAgICAgICAgZG91YmxlIGluY29tZSA9IDk3MDAwLjAwOwogICAgICAgICBkb3VibGUgZGVkdWN0aW9ucyA9IDcwMDAuMDA7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgRmVkVGF4SUYgdGF4Q2FsSUZQb3J0ID0gdGF4Q2FsU2VydmljZS5nZXRGZWRUYXhJRlBvcnQoKTsKICAgICAgICAgICAgICgoU3R1Yil0YXhDYWxJRlBvcnQpLl9zZXRQcm9wZXJ0eShTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCiAgICAgICAgICAgICAgICAgICAgIGZlZFRheEVuZHBvaW50KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBkb3VibGUgZmVkVGF4ID0gdGF4Q2FsSUZQb3J0LmdldEZlZFRheChpbmNvbWUsIGRlZHVjdGlvbnMpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGZWQgdGF4IGZyb20gRWpiIGJhc2VkIFRheENhbFNlcnZpY2UgOiIgKyBmZWRUYXgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKGZlZFRheCA9PSAxODAwMC4wMCAmJiBpbnRlbmRlZFJlc3VsdCkKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIEZlZFRheFBvcnQiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsIHN1Y2NlZWRlZCB3aGlsZSBpdCBzaG91bGQgaGF2ZSBmYWlsZWQiKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIEZlZFRheFBvcnQiLCBzdGF0LkZBSUwpOwotICAgICAgICAgICAgfSAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBpZiAoaW50ZW5kZWRSZXN1bHQpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRheENhbEVqYldlYlNlcnZpY2UgY2xpZW50IGZhaWxlZCIpOwpAQCAtMTMwLDcgKzEzMCw3IEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeHBlY3RlZCBFeGNlcHRpb24gY2F1Z2h0IDoiKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiRmVkVGF4UG9ydCIsIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2NvbmZpZy9jb25maWctY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvY29uZmlnL2NvbmZpZy1jbGllbnQueG1sCmluZGV4IDlkZjUzZDIuLmU1NTA5NmQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvY29uZmlnL2NvbmZpZy1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvY29uZmlnL2NvbmZpZy1jbGllbnQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249IndzZGwvVGF4Q2FsRWpiU2VydmljZS53c2RsIgogICAgICAgcGFja2FnZU5hbWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLmVqYi50YXhjYWwuY2xpZW50Ii8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2NvbmZpZy9jb25maWctZWpiLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvY29uZmlnL2NvbmZpZy1lamIueG1sCmluZGV4IDc4MWFiMWIuLjJhZmRjYWEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvY29uZmlnL2NvbmZpZy1lamIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvY29uZmlnL2NvbmZpZy1lamIueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249IndzZGwvVGF4Q2FsRWpiU2VydmljZS53c2RsIgogICAgICAgcGFja2FnZU5hbWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLmVqYi50YXhjYWwiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvY29uZmlnL2NvbmZpZy1zZWkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9jb25maWcvY29uZmlnLXNlaS54bWwKaW5kZXggMjU4M2MxOS4uM2FhMzNiMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9jb25maWcvY29uZmlnLXNlaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9jb25maWcvY29uZmlnLXNlaS54bWwKQEAgLTE4LDE2ICsxOCwxNiBAQAogLS0+CiAKIDxjb25maWd1cmF0aW9uCi0JeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLQk8c2VydmljZSBuYW1lPSJUYXhDYWxFamJTZXJ2aWNlIgotCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90YXgub3JnL3dzZGwiCi0JCXR5cGVOYW1lc3BhY2U9Imh0dHA6Ly90YXgub3JnL3R5cGVzIgotCQlwYWNrYWdlTmFtZT0iY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuZWpiLnRheGNhbCI+Ci0JCTxpbnRlcmZhY2UgbmFtZT0iY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuZWpiLnRheGNhbC5GZWRUYXhJRiIKLQkJCXNlcnZhbnROYW1lPSJjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5lamIudGF4Y2FsLkZlZFRheEVqYiIvPgotCQk8aW50ZXJmYWNlIG5hbWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLmVqYi50YXhjYWwuU3RhdGVUYXhJRiIKLQkJCXNlcnZhbnROYW1lPSJjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5lamIudGF4Y2FsLlN0YXRlVGF4RWpiIj4KLQkJPC9pbnRlcmZhY2U+Ci0JPC9zZXJ2aWNlPgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+CisgICAgPHNlcnZpY2UgbmFtZT0iVGF4Q2FsRWpiU2VydmljZSIKKyAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGF4Lm9yZy93c2RsIgorICAgICAgICB0eXBlTmFtZXNwYWNlPSJodHRwOi8vdGF4Lm9yZy90eXBlcyIKKyAgICAgICAgcGFja2FnZU5hbWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLmVqYi50YXhjYWwiPgorICAgICAgICA8aW50ZXJmYWNlIG5hbWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLmVqYi50YXhjYWwuRmVkVGF4SUYiCisgICAgICAgICAgICBzZXJ2YW50TmFtZT0iY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuZWpiLnRheGNhbC5GZWRUYXhFamIiLz4KKyAgICAgICAgPGludGVyZmFjZSBuYW1lPSJjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5lamIudGF4Y2FsLlN0YXRlVGF4SUYiCisgICAgICAgICAgICBzZXJ2YW50TmFtZT0iY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuZWpiLnRheGNhbC5TdGF0ZVRheEVqYiI+CisgICAgICAgIDwvaW50ZXJmYWNlPgorICAgIDwvc2VydmljZT4KIDwvY29uZmlndXJhdGlvbj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9kZXNjcmlwdG9yL2VqYi9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2Rlc2NyaXB0b3IvZWpiL3N1bi1lamItamFyLnhtbAppbmRleCBmZmZkZGM5Li41YjdkNzI5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2Rlc2NyaXB0b3IvZWpiL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2Rlc2NyaXB0b3IvZWpiL3N1bi1lamItamFyLnhtbApAQCAtMjgsMTAgKzI4LDEwIEBACiAgICAgICA8d2Vic2VydmljZS1lbmRwb2ludD4KICAgICAgICAgPHBvcnQtY29tcG9uZW50LW5hbWU+U3RhdGVUYXhJRlBvcnQ8L3BvcnQtY29tcG9uZW50LW5hbWU+CiAgICAgICAgIDxlbmRwb2ludC1hZGRyZXNzLXVyaT5zdGF0ZXRheGVqYjwvZW5kcG9pbnQtYWRkcmVzcy11cmk+Ci0JPHRyYW5zcG9ydC1ndWFyYW50ZWU+Q09ORklERU5USUFMPC90cmFuc3BvcnQtZ3VhcmFudGVlPgotCTxsb2dpbi1jb25maWc+Ci0JICA8YXV0aC1tZXRob2Q+Q0xJRU5ULUNFUlQ8L2F1dGgtbWV0aG9kPgotCTwvbG9naW4tY29uZmlnPgorICAgIDx0cmFuc3BvcnQtZ3VhcmFudGVlPkNPTkZJREVOVElBTDwvdHJhbnNwb3J0LWd1YXJhbnRlZT4KKyAgICA8bG9naW4tY29uZmlnPgorICAgICAgPGF1dGgtbWV0aG9kPkNMSUVOVC1DRVJUPC9hdXRoLW1ldGhvZD4KKyAgICA8L2xvZ2luLWNvbmZpZz4KICAgICAgIDwvd2Vic2VydmljZS1lbmRwb2ludD4KICAgICA8L2VqYj4KICAgICA8ZWpiPgpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgPHdlYnNlcnZpY2UtZW5kcG9pbnQ+CiAgICAgICAgIDxwb3J0LWNvbXBvbmVudC1uYW1lPkZlZFRheElGUG9ydDwvcG9ydC1jb21wb25lbnQtbmFtZT4KICAgICAgICAgPGVuZHBvaW50LWFkZHJlc3MtdXJpPmZlZHRheGVqYjwvZW5kcG9pbnQtYWRkcmVzcy11cmk+Ci0JPHRyYW5zcG9ydC1ndWFyYW50ZWU+Q09ORklERU5USUFMPC90cmFuc3BvcnQtZ3VhcmFudGVlPgorICAgIDx0cmFuc3BvcnQtZ3VhcmFudGVlPkNPTkZJREVOVElBTDwvdHJhbnNwb3J0LWd1YXJhbnRlZT4KICAgICAgIDwvd2Vic2VydmljZS1lbmRwb2ludD4KICAgICA8L2VqYj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9lamIvRmVkVGF4RWpiLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2VqYi9GZWRUYXhFamIuamF2YQppbmRleCBmNDVjYjQ1Li5lZGNmMjVjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2VqYi9GZWRUYXhFamIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2VqYi9GZWRUYXhFamIuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5lamIudGF4Y2FsOwogCiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMjYsMTEgKzI2LDExIEBACiBwdWJsaWMgY2xhc3MgRmVkVGF4RWpiIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewogCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYzsKLSAgICAKKwogICAgIHB1YmxpYyBGZWRUYXhFamIoKXt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZlZFRheEVqYjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGZWRUYXhFamI6OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyBkb3VibGUgZ2V0RmVkVGF4KGRvdWJsZSBpbmNvbWUsIGRvdWJsZSBkZWR1Y3Rpb25zKSB7CkBAIC0zOCwxMyArMzgsMTMgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQorCiAgICAgICAgIHRoaXMuc2MgPSBzYzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9lamIvRmVkVGF4SUYuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvZWpiL0ZlZFRheElGLmphdmEKaW5kZXggZTRjMTMyMi4uNTQzZmI1NCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9lamIvRmVkVGF4SUYuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2VqYi9GZWRUYXhJRi5qYXZhCkBAIC0yMiw2ICsyMiw2IEBACiAKIHB1YmxpYyBpbnRlcmZhY2UgRmVkVGF4SUYgZXh0ZW5kcyBSZW1vdGV7CiAKLQlwdWJsaWMgZG91YmxlIGdldEZlZFRheChkb3VibGUgaW5jb21lLCBkb3VibGUgZGVkdWN0aW9ucykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICBwdWJsaWMgZG91YmxlIGdldEZlZFRheChkb3VibGUgaW5jb21lLCBkb3VibGUgZGVkdWN0aW9ucykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9lamIvU3RhdGVUYXhFamIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvZWpiL1N0YXRlVGF4RWpiLmphdmEKaW5kZXggNzhjZWE0NS4uMzM1N2VjYyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9lamIvU3RhdGVUYXhFamIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2VqYi9TdGF0ZVRheEVqYi5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLmVqYi50YXhjYWw7CiAKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC0yNiwxMSArMjYsMTEgQEAKIHB1YmxpYyBjbGFzcyBTdGF0ZVRheEVqYiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKIAogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2M7Ci0gICAgCisKICAgICBwdWJsaWMgU3RhdGVUYXhFamIoKXt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlVGF4RWpiOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlVGF4RWpiOjplamJDcmVhdGUgISEiKTsKICAgICB9CiAKICAgICBwdWJsaWMgZG91YmxlIGdldFN0YXRlVGF4KGRvdWJsZSBpbmNvbWUsIGRvdWJsZSBkZWR1Y3Rpb25zKSB7CkBAIC0zOCwxMyArMzgsMTMgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQorCiAgICAgICAgIHRoaXMuc2MgPSBzYzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9lamIvU3RhdGVUYXhJRi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9lamIvU3RhdGVUYXhJRi5qYXZhCmluZGV4IDNlODdhMjMuLjM4YWQ0NTMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvZWpiL1N0YXRlVGF4SUYuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2VqYi9TdGF0ZVRheElGLmphdmEKQEAgLTIyLDYgKzIyLDYgQEAKIAogcHVibGljIGludGVyZmFjZSBTdGF0ZVRheElGIGV4dGVuZHMgUmVtb3RlewogCi0JcHVibGljIGRvdWJsZSBnZXRTdGF0ZVRheChkb3VibGUgaW5jb21lLCBkb3VibGUgZGVkdWN0aW9ucykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICBwdWJsaWMgZG91YmxlIGdldFN0YXRlVGF4KGRvdWJsZSBpbmNvbWUsIGRvdWJsZSBkZWR1Y3Rpb25zKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L3JlcG9ydC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L3JlcG9ydC54bWwKaW5kZXggNjVhMzJhZS4uMDk0ZTM2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9yZXBvcnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvcmVwb3J0LnhtbApAQCAtMjMsNyArMjMsNyBAQAogPHRhcmdldCBuYW1lPSJyZXBvcnQiPgogPGVjaG8gbWVzc2FnZT0iQ29tcGFyaW5nIHJlc3VsdHMgd2l0aCBleHBlY3RlZCByZXN1bHRzIi8+CiAKLSAKKwogICAgIDx4c2x0IHN0eWxlPSIke3N0eWxlc2hlZXR9IgogICAgICAgICAgICAgaW49IiR7eG1sZmlsZX0iIG91dD0iJHtodG1sZmlsZX0iCiAgICAgICAgICAgICBiYXNlZGlyPSIuIiBkZXN0ZGlyPSIuIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZXJ2bGV0aGFuZGxlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZXJ2bGV0aGFuZGxlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGUyZWE0OTguLmQwOGFhMWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VydmxldGhhbmRsZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlcnZsZXRoYW5kbGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDI2ICsxNSwyNiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2ltcGxlc2VydmxldGhhbmRsZXIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgCis8cHJvcGVydHkgbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYnNlcnZpY2VzLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2Vic2VydmljZXMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlcnZsZXRoYW5kbGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VydmxldGhhbmRsZXIvYnVpbGQueG1sCmluZGV4IDRlYmQwZjkuLjQ2YjIzZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VydmxldGhhbmRsZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VydmxldGhhbmRsZXIvYnVpbGQueG1sCkBAIC0zMCw5ICszMCw5IEBACiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwogCiAgIDx0YXJnZXQgbmFtZT0icnVuLndzY29tcGlsZSI+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9IiBmYWlsb25lcnJvcj0idHJ1ZSIgPgotICAgICAgICA8YXJnIGxpbmU9Ii1zb3VyY2UgMS4xLjIgJHt3c2NvbXBpbGUuY29tbWFuZH0iIC8+ICAgICAgICAKLQk8L2V4ZWM+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9IiBmYWlsb25lcnJvcj0idHJ1ZSIgPgorICAgICAgICA8YXJnIGxpbmU9Ii1zb3VyY2UgMS4xLjIgJHt3c2NvbXBpbGUuY29tbWFuZH0iIC8+CisgICAgPC9leGVjPgogICA8L3RhcmdldD4KIAogPCEtLSBOT1RFLiB0aGUgc2ltcGxlIG1hcHBpbmcgdGVzdCBhbmQgZnVsbCBtYXBwaW5nIHRlc3QgY2FuCkBAIC00Niw1MyArNDYsNTMgQEAKICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJnZW4tc2VydmxldC13c2RsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vV0VCLUlORi93c2RsIi8+IAorICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYvd3NkbCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAotICAgdmFsdWU9Ii1kZWZpbmUgLW1hcHBpbmcgJHtidWlsZC5jbGFzc2VzLmRpcn0vU2ltcGxlSGFuZGxlck1hcHBpbmdfc2VydmxldC54bWwgLWNwICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IC1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYvd3NkbCBjb25maWctaW50ZXJmYWNlLnhtbCIvPiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKKyAgIHZhbHVlPSItZGVmaW5lIC1tYXBwaW5nICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1NpbXBsZUhhbmRsZXJNYXBwaW5nX3NlcnZsZXQueG1sIC1jcCAke2J1aWxkLmNsYXNzZXMuZGlyfSAta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS9XRUItSU5GL3dzZGwgY29uZmlnLWludGVyZmFjZS54bWwiLz4KICAgICA8L2FudGNhbGw+Ci0gIDwvdGFyZ2V0PiAgICAKLSAgIAorICA8L3RhcmdldD4KKwogICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLXdlYiIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNvbXBpbGUsIGdlbi1zZXJ2bGV0LXdzZGwiPgogICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+ICAgCisgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmdmaWxlLmxvY2F0aW9uIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmdmaWxlLm5hbWUiIHZhbHVlPSJTaW1wbGVIYW5kbGVyTWFwcGluZ19zZXJ2bGV0LnhtbCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0id3NkbGZpbGUubG9jYXRpb24iIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9XRUItSU5GL3dzZGwiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9IndzZGxmaWxlLm5hbWUiIHZhbHVlPSJTaW1wbGVIYW5kbGVyU2VydmxldC53c2RsIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJ3YXIuY2xhc3NlcyIgdmFsdWU9InNlcnZsZXQvKi5jbGFzcyIvPgotICAgICA8L2FudGNhbGw+ICAKKyAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgICAgICAgICAgICAKKwogICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJhc3NlbWJsZS13ZWIsIGFzc2VtYmxlLWNsaWVudCIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+Ci0gICAgPC9hbnRjYWxsPiAgICAKLSAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIi8+ICAgICAKLSAgICA8Y29weSBmaWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9XRUItSU5GL3dzZGwvU2ltcGxlSGFuZGxlclNlcnZsZXQud3NkbCIgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwiLz4gICAgCisgICAgPC9hbnRjYWxsPgorICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwiLz4KKyAgICA8Y29weSBmaWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9XRUItSU5GL3dzZGwvU2ltcGxlSGFuZGxlclNlcnZsZXQud3NkbCIgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwiLz4KICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFwcGNsaWVudC1qYXItY29tbW9uIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgdmFsdWU9IlNpbXBsZUhhbmRsZXJNYXBwaW5nX3NlcnZsZXQueG1sLE1FVEEtSU5GL3dzZGwvKiosc2ltcGxlaGFuZGxlci8qKixzZXJ2bGV0L1NpbXBsZVNlcnZlci5jbGFzcyxjb20vKioiIC8+Ci0gICAgPC9hbnRjYWxsPiAgCisgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L1NlcnZsZXRIYW5kbGVyVGVzdC9TZXJ2bGV0SGFuZGxlclRlc3QiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgCisgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iU2VydmxldEhhbmRsZXJUZXN0Ii8+ICAgCi0gICAgICAgIDwvYW50Y2FsbD4gICAgICAgIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iU2VydmxldEhhbmRsZXJUZXN0Ii8+CisgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY2xpZW50LWNvbW1vbiIvPgogICAgICAgICA8bW92ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnRDbGllbnQuamFyIiB0b0ZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTAwLDEwICsxMDAsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQtY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZXJ2bGV0aGFuZGxlci9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlcnZsZXRoYW5kbGVyL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAzNmZlOWY1Li44NmRkMGZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlcnZsZXRoYW5kbGVyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlcnZsZXRoYW5kbGVyL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzAsMjggKzMwLDI4IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLXNpbXBsZS1zb2FwZmF1bHQiKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLXNvYXBmYXVsdElEIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAJdHJ5IHsKLSAgICAgICAgICAgIAorICAgICAgICB0cnkgeworCiAgICAgICAgICAgICBTdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0gYXJnc1swXTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU2VydmljZSB0ZXN0U2VydmljZSA9IChTZXJ2aWNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9zaW1wbGVoYW5kbGVyIik7CiAgICAgICAgICAgICBTaW1wbGVTZXJ2ZXIgdGVzdCA9IChTaW1wbGVTZXJ2ZXIpCiAgICAgICAgICAgICB0ZXN0U2VydmljZS5nZXRQb3J0KFNpbXBsZVNlcnZlci5jbGFzcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgKChTdHViKXRlc3QpLl9zZXRQcm9wZXJ0eShTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCiAgICAgICAgICAgICAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlbmRwb2ludCBhZGRyZXNzID0gIiArIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludm9jYXRpb24gcmV0dXJuZWQgIiArIHRlc3Quc2F5SGVsbG8oImplcm9tZSIpKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlcnZsZXRoYW5kbGVyL2NvbmZpZy1pbnRlcmZhY2UueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZXJ2bGV0aGFuZGxlci9jb25maWctaW50ZXJmYWNlLnhtbAppbmRleCAwN2UxY2IwLi40YjA4MDU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlcnZsZXRoYW5kbGVyL2NvbmZpZy1pbnRlcmZhY2UueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VydmxldGhhbmRsZXIvY29uZmlnLWludGVyZmFjZS54bWwKQEAgLTE5LDExICsxOSwxMSBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8c2VydmljZSAKLSAgICAgIG5hbWU9IlNpbXBsZUhhbmRsZXJTZXJ2bGV0IiAKLSAgICAgIHRhcmdldE5hbWVzcGFjZT0idXJuOkhhbmRsZXJUZXN0IiAKLSAgICAgIHR5cGVOYW1lc3BhY2U9InVybjpIYW5kbGVyVGVzdCIgCisgIDxzZXJ2aWNlCisgICAgICBuYW1lPSJTaW1wbGVIYW5kbGVyU2VydmxldCIKKyAgICAgIHRhcmdldE5hbWVzcGFjZT0idXJuOkhhbmRsZXJUZXN0IgorICAgICAgdHlwZU5hbWVzcGFjZT0idXJuOkhhbmRsZXJUZXN0IgogICAgICAgcGFja2FnZU5hbWU9ImhhbmRsZXJ0ZXN0Ij4KICAgICAgIDxpbnRlcmZhY2UgbmFtZT0ic2VydmxldC5TaW1wbGVTZXJ2ZXIiLz4KICAgPC9zZXJ2aWNlPgotPC9jb25maWd1cmF0aW9uPiAKKzwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VydmxldGhhbmRsZXIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZXJ2bGV0aGFuZGxlci9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKaW5kZXggYzE0YmI3YS4uZDJkODMwMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZXJ2bGV0aGFuZGxlci9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZXJ2bGV0aGFuZGxlci9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKQEAgLTI0LDExICsyNCwxMSBAQAogICAgIDxkZXNjcmlwdGlvbj5zaW1wbGUgaGFuZGxlciBzZXJ2aWNlIHJlZjwvZGVzY3JpcHRpb24+CiAgICAgPHNlcnZpY2UtcmVmLW5hbWU+c2VydmljZS9zaW1wbGVoYW5kbGVyPC9zZXJ2aWNlLXJlZi1uYW1lPgogICAgIDxzZXJ2aWNlLWludGVyZmFjZT5qYXZheC54bWwucnBjLlNlcnZpY2U8L3NlcnZpY2UtaW50ZXJmYWNlPgotICAgIDx3c2RsLWZpbGU+TUVUQS1JTkYvd3NkbC9TaW1wbGVIYW5kbGVyU2VydmxldC53c2RsPC93c2RsLWZpbGU+ICAgIAorICAgIDx3c2RsLWZpbGU+TUVUQS1JTkYvd3NkbC9TaW1wbGVIYW5kbGVyU2VydmxldC53c2RsPC93c2RsLWZpbGU+CiAgICAgPGpheHJwYy1tYXBwaW5nLWZpbGU+U2ltcGxlSGFuZGxlck1hcHBpbmdfc2VydmxldC54bWw8L2pheHJwYy1tYXBwaW5nLWZpbGU+Ci0gICAgPHNlcnZpY2UtcW5hbWUgeG1sbnM6c2VydmljZW5zPSJ1cm46SGFuZGxlclRlc3QiPnNlcnZpY2VuczpTaW1wbGVIYW5kbGVyU2VydmxldDwvc2VydmljZS1xbmFtZT4gICAgICAgICAgICAgICAKKyAgICA8c2VydmljZS1xbmFtZSB4bWxuczpzZXJ2aWNlbnM9InVybjpIYW5kbGVyVGVzdCI+c2VydmljZW5zOlNpbXBsZUhhbmRsZXJTZXJ2bGV0PC9zZXJ2aWNlLXFuYW1lPgogICAgIDxwb3J0LWNvbXBvbmVudC1yZWY+CiAgICAgICA8c2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+ZWpiLlNpbXBsZVNlcnZlcjwvc2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+Ci0gICAgPC9wb3J0LWNvbXBvbmVudC1yZWY+ICAgICAgICAgIAorICAgIDwvcG9ydC1jb21wb25lbnQtcmVmPgogICA8L3NlcnZpY2UtcmVmPgogPC9hcHBsaWNhdGlvbi1jbGllbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlcnZsZXRoYW5kbGVyL3NlcnZsZXQvU2VydmxldEhhbmRsZXJUZXN0SW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZXJ2bGV0aGFuZGxlci9zZXJ2bGV0L1NlcnZsZXRIYW5kbGVyVGVzdEltcGwuamF2YQppbmRleCAzMzZlNGY4Li5mOWYyMTE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlcnZsZXRoYW5kbGVyL3NlcnZsZXQvU2VydmxldEhhbmRsZXJUZXN0SW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VydmxldGhhbmRsZXIvc2VydmxldC9TZXJ2bGV0SGFuZGxlclRlc3RJbXBsLmphdmEKQEAgLTIyLDIzICsyMiwyMyBAQAogCiBwdWJsaWMgY2xhc3MgU2VydmxldEhhbmRsZXJUZXN0SW1wbCBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKICAgICBTZXNzaW9uQ29udGV4dCBzYzsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIGhlbGxvKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuICJzYWx1dCAiICsgaGVsbG87CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVTZXJ2ZXI6OjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZVNlcnZlcjo6OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KLSAgICAKKwogICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQorCiAgICAgICAgIHRoaXMuc2MgPSBzYzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30gICAKKworICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlcnZsZXRoYW5kbGVyL3NlcnZsZXQvU2ltcGxlSGFuZGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZXJ2bGV0aGFuZGxlci9zZXJ2bGV0L1NpbXBsZUhhbmRsZXIuamF2YQppbmRleCA2MjhhMjUxLi5jOTg1MTUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlcnZsZXRoYW5kbGVyL3NlcnZsZXQvU2ltcGxlSGFuZGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VydmxldGhhbmRsZXIvc2VydmxldC9TaW1wbGVIYW5kbGVyLmphdmEKQEAgLTIxLDEzICsyMSwxMyBAQAogaW1wb3J0IGphdmF4LnhtbC5ycGMuaGFuZGxlci4qOwogCiBwdWJsaWMgY2xhc3MgU2ltcGxlSGFuZGxlciBleHRlbmRzIEdlbmVyaWNIYW5kbGVyIHsKLSAgICAKKwogICAgIHByb3RlY3RlZCBIYW5kbGVySW5mbyBpbmZvID0gbnVsbDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoSGFuZGxlckluZm8gaW5mbykgewogICAgICAgICB0aGlzLmluZm8gPSBpbmZvOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZVJlcXVlc3QoTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgRGF0ZSBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpOwpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZVJlc3BvbnNlKE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIERhdGUgc3RhcnRUaW1lID0gKERhdGUpIGNvbnRleHQuZ2V0UHJvcGVydHkoInN0YXJ0VGltZSIpOwpAQCAtNDksNyArNDksNyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBRTmFtZVtdIGdldEhlYWRlcnMoKSB7CiAgICAgICAgIHJldHVybiBuZXcgUU5hbWVbMF07CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZXJ2bGV0aGFuZGxlci9zZXJ2bGV0L1NpbXBsZVNlcnZlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZXJ2bGV0aGFuZGxlci9zZXJ2bGV0L1NpbXBsZVNlcnZlci5qYXZhCmluZGV4IGRjNWNmMjYuLjA2NzVjZDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VydmxldGhhbmRsZXIvc2VydmxldC9TaW1wbGVTZXJ2ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlcnZsZXRoYW5kbGVyL3NlcnZsZXQvU2ltcGxlU2VydmVyLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBqYXZhLnJtaS4qOwogCiBwdWJsaWMgaW50ZXJmYWNlIFNpbXBsZVNlcnZlciBleHRlbmRzIFJlbW90ZSB7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyBzb3VyY2UpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2hhcmVkL3dhci9XZWJTZXJ2aWNlVGVzdEltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2hhcmVkL3dhci9XZWJTZXJ2aWNlVGVzdEltcGwuamF2YQppbmRleCA0YWM5ZDhmLi45NjVlZWFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NoYXJlZC93YXIvV2ViU2VydmljZVRlc3RJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaGFyZWQvd2FyL1dlYlNlcnZpY2VUZXN0SW1wbC5qYXZhCkBAIC0yMSwxMyArMjEsMTMgQEAKIGltcG9ydCBqYXZheC54bWwucnBjLnNlcnZlci5TZXJ2bGV0RW5kcG9pbnRDb250ZXh0OwogCiBwdWJsaWMgY2xhc3MgV2ViU2VydmljZVRlc3RJbXBsIGltcGxlbWVudHMgU2VydmljZUxpZmVjeWNsZSwgV2ViU2VydmljZVRlc3QgewotIAorCiAgICAgV2ViU2VydmljZVRlc3QgZGVsZWdhdGU7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRyaXZlciBzZXJ2bGV0IGRlc3Ryb3llZCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoT2JqZWN0IGNvbnRleHQpIHsKICAgICAgICAgU2VydmxldEVuZHBvaW50Q29udGV4dCBzZUNvbnRleHQgPSAoU2VydmxldEVuZHBvaW50Q29udGV4dCkgY29udGV4dDsKICAgICAgICAgU3RyaW5nIHRlc3RDbGFzc05hbWUgPSBzZUNvbnRleHQuZ2V0U2VydmxldENvbnRleHQoKS5nZXRJbml0UGFyYW1ldGVyKCJ0ZXN0Y2xhc3NuYW1lIik7CkBAIC01NSwxMyArNTUsMTMgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IgOiBjYW5ub3QgbG9hZCBkZWxlZ2F0ZSAiICsgdGVzdENsYXNzTmFtZSArICIgIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KFN0cmluZ1tdIHBhcmFtcykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChkZWxlZ2F0ZSE9bnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmRvVGVzdChwYXJhbXMpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlbW90ZUV4Y2VwdGlvbigiTm8gZGVsZWdhdGUgZm9yIHRlc3QgaGFybmVzcyIpOwogICAgICAgICB9Ci0gICAgfSAgICAKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NoYXJlZC93YXIvY29uZmlnLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2hhcmVkL3dhci9jb25maWcueG1sCmluZGV4IDIwYTNkNDUuLjIxYzg0YjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2hhcmVkL3dhci9jb25maWcueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2hhcmVkL3dhci9jb25maWcueG1sCkBAIC0xOSwxMSArMTksMTEgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHNlcnZpY2UgCi0gICAgICBuYW1lPSJXZWJTZXJ2aWNlU2VydmxldFRlc3QiIAotICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46V2ViU2VydmljZVRlc3QiIAotICAgICAgdHlwZU5hbWVzcGFjZT0idXJuOldlYlNlcnZpY2VUZXN0IiAKKyAgPHNlcnZpY2UKKyAgICAgIG5hbWU9IldlYlNlcnZpY2VTZXJ2bGV0VGVzdCIKKyAgICAgIHRhcmdldE5hbWVzcGFjZT0idXJuOldlYlNlcnZpY2VUZXN0IgorICAgICAgdHlwZU5hbWVzcGFjZT0idXJuOldlYlNlcnZpY2VUZXN0IgogICAgICAgcGFja2FnZU5hbWU9InRlc3Qud2Vic2VydmljZSI+CiAgICAgICA8aW50ZXJmYWNlIG5hbWU9InRlc3Qud2Vic2VydmljZS5XZWJTZXJ2aWNlVGVzdCIvPgogICA8L3NlcnZpY2U+Ci08L2NvbmZpZ3VyYXRpb24+IAorPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaW1wbGVmYXVsdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaW1wbGVmYXVsdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDRhYzMzNTIuLmFhMDdmOTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2ltcGxlZmF1bHQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NpbXBsZWZhdWx0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDI2ICsxNSwyNiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2ltcGxlc29hcGZhdWx0Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWJzZXJ2aWNlcy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYnNlcnZpY2VzLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaW1wbGVmYXVsdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NpbXBsZWZhdWx0L2J1aWxkLnhtbAppbmRleCA5OWYxNmE1Li5kOTNmMTk5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NpbXBsZWZhdWx0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NpbXBsZWZhdWx0L2J1aWxkLnhtbApAQCAtMzAsOSArMzAsOSBAQAogICAgICZ0ZXN0cHJvcGVydGllczsKIAogICA8dGFyZ2V0IG5hbWU9InJ1bi53c2NvbXBpbGUiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KLSAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPiAgICAgICAgCi0JPC9leGVjPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KKyAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPgorICAgIDwvZXhlYz4KICAgPC90YXJnZXQ+CiAKIDwhLS0gTk9URS4gdGhlIHNpbXBsZSBtYXBwaW5nIHRlc3QgYW5kIGZ1bGwgbWFwcGluZyB0ZXN0IGNhbgpAQCAtNDksNDUgKzQ5LDQ1IEBACiAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJnZW4tZWpiLXdzZGwiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIi8+IAorICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKLSAgIHZhbHVlPSItZGVmaW5lIC1tYXBwaW5nICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1NvYXBGYXVsdE1hcHBpbmdfZWpiLnhtbCAtY3AgJHtidWlsZC5jbGFzc2VzLmRpcn0gLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCBjb25maWctaW50ZXJmYWNlLnhtbCIvPiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKKyAgIHZhbHVlPSItZGVmaW5lIC1tYXBwaW5nICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1NvYXBGYXVsdE1hcHBpbmdfZWpiLnhtbCAtY3AgJHtidWlsZC5jbGFzc2VzLmRpcn0gLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCBjb25maWctaW50ZXJmYWNlLnhtbCIvPgogICAgIDwvYW50Y2FsbD4KLSAgPC90YXJnZXQ+ICAgIAotICAgCisgIDwvdGFyZ2V0PgorCiAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUtZWpiIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgY29tcGlsZSwgZ2VuLWVqYi13c2RsIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iU29hcEZhdWx0TWFwcGluZ19lamIueG1sLE1FVEEtSU5GL3dzZGwvKiosc29hcGZhdWx0L2VqYi8qLmNsYXNzIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgICAgICAgICAgICAKKwogICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJhc3NlbWJsZS1lamIsIGFzc2VtYmxlLWNsaWVudCIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+Ci0gICAgPC9hbnRjYWxsPiAgICAKKyAgICA8L2FudGNhbGw+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJnZW4tZWpiLXdzZGwiLz4KICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFwcGNsaWVudC1qYXItY29tbW9uIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgdmFsdWU9IlNvYXBGYXVsdE1hcHBpbmdfZWpiLnhtbCxNRVRBLUlORi93c2RsLyoqLHNvYXBmYXVsdC8qKixjb20vKioiIC8+Ci0gICAgPC9hbnRjYWxsPiAgCisgICAgPC9hbnRjYWxsPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNsaWVudC1jb21tb24iLz4KICAgICA8bW92ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnRDbGllbnQuamFyIiB0b0ZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIvPgogICA8L3RhcmdldD4KLSAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L3NvYXBmYXVsdC9TaW1wbGVTb2FwRmF1bHQiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgCisgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTk1LDEwICs5NSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudC1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gIAotICAgIAorICAgIDwvdGFyZ2V0PgorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NpbXBsZWZhdWx0L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2ltcGxlZmF1bHQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDk0YmI3YzEuLmMxNDdkMzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2ltcGxlZmF1bHQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2ltcGxlZmF1bHQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMCwyNiArMzAsMjYgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtc2ltcGxlLXNvYXBmYXVsdCIpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtc29hcGZhdWx0SUQiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewotICAgIAl0cnkgeworICAgICAgICB0cnkgewogCiAgICAgICAgICAgIFN0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPSBhcmdzWzBdOwogCi0JICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAorICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisKICAgICAgICAgICAgIFNlcnZpY2UgdGVzdFNlcnZpY2UgPSAoU2VydmljZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2Uvc29hcGZhdWx0Iik7Ci0gICAgICAgICAgICBTaW1wbGVTb2FwRmF1bHRTRUkgdGVzdCA9IChTaW1wbGVTb2FwRmF1bHRTRUkpIAorICAgICAgICAgICAgU2ltcGxlU29hcEZhdWx0U0VJIHRlc3QgPSAoU2ltcGxlU29hcEZhdWx0U0VJKQogICAgICAgICAgICAgICAgIHRlc3RTZXJ2aWNlLmdldFBvcnQobmV3IFFOYW1lKCJ1cm46U29hcEZhdWx0VGVzdCIsICJTaW1wbGVTb2FwRmF1bHRTRUlQb3J0IiksCiAgICAgICAgICAgICAgICAgICAgIFNpbXBsZVNvYXBGYXVsdFNFSS5jbGFzcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgKChTdHViKXRlc3QpLl9zZXRQcm9wZXJ0eShTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7CiAKQEAgLTYyLDExICs2MiwxMSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic29hcGZhdWx0c2NsaWVudCBtYWluIiwgc3RhdC5QQVNTKTsKLSAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzb2FwZmF1bHRzIGNsaWVudCB0ZXN0IGZhaWxlZCIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic29hcGZhdWx0c2NsaWVudCBtYWluIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIC8vU3lzdGVtLmV4aXQoMTUpOwotCX0gCisgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2ltcGxlZmF1bHQvY29uZmlnLWludGVyZmFjZS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NpbXBsZWZhdWx0L2NvbmZpZy1pbnRlcmZhY2UueG1sCmluZGV4IDdiYmRmYWMuLjhiZWYyNjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2ltcGxlZmF1bHQvY29uZmlnLWludGVyZmFjZS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaW1wbGVmYXVsdC9jb25maWctaW50ZXJmYWNlLnhtbApAQCAtMTksMTEgKzE5LDExIEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDxzZXJ2aWNlIAotICAgICAgbmFtZT0iU29hcEZhdWx0U2VydmljZSIgCi0gICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpTb2FwRmF1bHRUZXN0IiAKLSAgICAgIHR5cGVOYW1lc3BhY2U9InVybjpTb2FwRmF1bHRUZXN0IiAKKyAgPHNlcnZpY2UKKyAgICAgIG5hbWU9IlNvYXBGYXVsdFNlcnZpY2UiCisgICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpTb2FwRmF1bHRUZXN0IgorICAgICAgdHlwZU5hbWVzcGFjZT0idXJuOlNvYXBGYXVsdFRlc3QiCiAgICAgICBwYWNrYWdlTmFtZT0ic29hcGZhdWx0Ij4KICAgICAgIDxpbnRlcmZhY2UgbmFtZT0ic29hcGZhdWx0LmVqYi5TaW1wbGVTb2FwRmF1bHRTRUkiLz4KICAgPC9zZXJ2aWNlPgotPC9jb25maWd1cmF0aW9uPiAKKzwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2ltcGxlZmF1bHQvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaW1wbGVmYXVsdC9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKaW5kZXggYTI1ZDBlYy4uODdiYTAyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaW1wbGVmYXVsdC9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaW1wbGVmYXVsdC9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKQEAgLTI0LDExICsyNCwxMSBAQAogICAgIDxkZXNjcmlwdGlvbj5zaW1wbGUgc29hcGZhdWx0IHNlcnZpY2UgcmVmPC9kZXNjcmlwdGlvbj4KICAgICA8c2VydmljZS1yZWYtbmFtZT5zZXJ2aWNlL3NvYXBmYXVsdDwvc2VydmljZS1yZWYtbmFtZT4KICAgICA8c2VydmljZS1pbnRlcmZhY2U+amF2YXgueG1sLnJwYy5TZXJ2aWNlPC9zZXJ2aWNlLWludGVyZmFjZT4KLSAgICA8d3NkbC1maWxlPk1FVEEtSU5GL3dzZGwvU29hcEZhdWx0U2VydmljZS53c2RsPC93c2RsLWZpbGU+ICAgIAorICAgIDx3c2RsLWZpbGU+TUVUQS1JTkYvd3NkbC9Tb2FwRmF1bHRTZXJ2aWNlLndzZGw8L3dzZGwtZmlsZT4KICAgICA8amF4cnBjLW1hcHBpbmctZmlsZT5Tb2FwRmF1bHRNYXBwaW5nX2VqYi54bWw8L2pheHJwYy1tYXBwaW5nLWZpbGU+Ci0gICAgPHNlcnZpY2UtcW5hbWUgeG1sbnM6c2VydmljZW5zPSJ1cm46U29hcEZhdWx0VGVzdCI+c2VydmljZW5zOlNvYXBGYXVsdFNlcnZpY2U8L3NlcnZpY2UtcW5hbWU+ICAgICAgICAgICAgICAgCisgICAgPHNlcnZpY2UtcW5hbWUgeG1sbnM6c2VydmljZW5zPSJ1cm46U29hcEZhdWx0VGVzdCI+c2VydmljZW5zOlNvYXBGYXVsdFNlcnZpY2U8L3NlcnZpY2UtcW5hbWU+CiAgICAgPHBvcnQtY29tcG9uZW50LXJlZj4KICAgICAgIDxzZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT5zb2FwZmF1bHQuZWpiLlNpbXBsZVNvYXBGYXVsdFNFSTwvc2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+Ci0gICAgPC9wb3J0LWNvbXBvbmVudC1yZWY+ICAgICAgICAgIAorICAgIDwvcG9ydC1jb21wb25lbnQtcmVmPgogICA8L3NlcnZpY2UtcmVmPgogPC9hcHBsaWNhdGlvbi1jbGllbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NpbXBsZWZhdWx0L2VqYi9TaW1wbGVTb2FwRXhjZXB0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NpbXBsZWZhdWx0L2VqYi9TaW1wbGVTb2FwRXhjZXB0aW9uLmphdmEKaW5kZXggYjBiZjE3MC4uMGM1ODU0NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaW1wbGVmYXVsdC9lamIvU2ltcGxlU29hcEV4Y2VwdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2ltcGxlZmF1bHQvZWpiL1NpbXBsZVNvYXBFeGNlcHRpb24uamF2YQpAQCAtMTcsMTMgKzE3LDEzIEBACiBwYWNrYWdlIHNvYXBmYXVsdC5lamI7CiAKIHB1YmxpYyBjbGFzcyBTaW1wbGVTb2FwRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIHJlYXNvbjsKLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVTb2FwRXhjZXB0aW9uKFN0cmluZyByZWFzb24pIHsKICAgICAgICAgdGhpcy5yZWFzb24gPSByZWFzb247CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRSZWFzb24oKSB7CiAgICAgICAgIHJldHVybiByZWFzb247CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaW1wbGVmYXVsdC9lamIvU2ltcGxlU29hcEZhdWx0SW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaW1wbGVmYXVsdC9lamIvU2ltcGxlU29hcEZhdWx0SW1wbC5qYXZhCmluZGV4IDRmNjg3MjMuLjg2NDY1NTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2ltcGxlZmF1bHQvZWpiL1NpbXBsZVNvYXBGYXVsdEltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NpbXBsZWZhdWx0L2VqYi9TaW1wbGVTb2FwRmF1bHRJbXBsLmphdmEKQEAgLTI1LDM4ICsyNSwzOCBAQAogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIAogLyoqCiAgKgogICogQGF1dGhvciBkb2NoZXoKICAqLwogcHVibGljIGNsYXNzIFNpbXBsZVNvYXBGYXVsdEltcGwgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7Ci0gICAgCisKICAgICBTZXNzaW9uQ29udGV4dCBzYzsKLSAgICAKKwogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFNpbXBsZVNlcnZlckltcGwgKi8KICAgICBwdWJsaWMgU2ltcGxlU29hcEZhdWx0SW1wbCgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEdvb2dsZUVKQjo6ZWpiQ3JlYXRlICEhIik7Ci19ICAgIAotICAgIAorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gR29vZ2xlRUpCOjplamJDcmVhdGUgISEiKTsKK30KKwogICAgIHB1YmxpYyBTdHJpbmcgc2ltcGxlTWV0aG9kKCkKICAgICAgICAgdGhyb3dzIFNpbXBsZVNvYXBFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHRocm93IG5ldyBTaW1wbGVTb2FwRXhjZXB0aW9uKCJJIG9ubHkgcmFpc2UgZXhjZXB0aW9ucyAhIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQkKKwogICAgICAgICB0aGlzLnNjID0gc2M7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2ltcGxlZmF1bHQvZWpiL1NpbXBsZVNvYXBGYXVsdFNFSS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaW1wbGVmYXVsdC9lamIvU2ltcGxlU29hcEZhdWx0U0VJLmphdmEKaW5kZXggNzRkZjA0OC4uMTEzZDhmMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaW1wbGVmYXVsdC9lamIvU2ltcGxlU29hcEZhdWx0U0VJLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaW1wbGVmYXVsdC9lamIvU2ltcGxlU29hcEZhdWx0U0VJLmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIHB1YmxpYyBpbnRlcmZhY2UgU2ltcGxlU29hcEZhdWx0U0VJIGV4dGVuZHMgUmVtb3RlIHsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgc2ltcGxlTWV0aG9kKCkgdGhyb3dzIFNpbXBsZVNvYXBFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAgICAgICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NvYXBmYXVsdHMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc29hcGZhdWx0cy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDBiYTY2YzIuLjI0YzljZDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc29hcGZhdWx0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc29hcGZhdWx0cy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMiArMTUsMjIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNvYXBmYXVsdHMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2Vic2VydmljZXMueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWJzZXJ2aWNlcy54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zb2FwZmF1bHRzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc29hcGZhdWx0cy9idWlsZC54bWwKaW5kZXggZDhmNzc1Yy4uYjNiNDBkOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zb2FwZmF1bHRzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NvYXBmYXVsdHMvYnVpbGQueG1sCkBAIC0zMyw5ICszMyw5IEBACiAKIAogICA8dGFyZ2V0IG5hbWU9InJ1bi53c2NvbXBpbGUiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KLSAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPiAgICAgICAgCi0JPC9leGVjPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KKyAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPgorICAgIDwvZXhlYz4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSIiPgpAQCAtNTgsMTEgKzU4LDExIEBACiAgIDx0YXJnZXQgbmFtZT0id3Njb21waWxlLWFwcGNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxta2RpciBkaXI9Im91dHB1dCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItaW1wb3J0IC1rZWVwIC1kIG91dHB1dCAtcyBvdXRwdXQgLWNsYXNzcGF0aCAuIC1mOmV4cGxpY2l0Y29udGV4dCB3c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3NvYXBmYXVsdHMiPgotICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0L3NvYXBmYXVsdHMiIAorICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0L3NvYXBmYXVsdHMiCiAgICAgICAgIGluY2x1ZGVzPSJUZXN0U2VydmljZS5jbGFzcywgVGVzdC5jbGFzcywgVGVzdDFSZXF1ZXN0VHlwZS5jbGFzcywgVGVzdDJSZXF1ZXN0VHlwZS5jbGFzcywgVGVzdDFSZXNwb25zZVR5cGUuY2xhc3MsIEZhdWx0T25lLmNsYXNzLCBGYXVsdFR3by5jbGFzcywgRmF1bHRUaHJlZS5jbGFzcyIvPgogICAgIDwvY29weT4KICAgICA8ZGVsZXRlIGRpcj0ib3V0cHV0Ii8+CkBAIC03MSwxMSArNzEsMTEgQEAKICAgPHRhcmdldCBuYW1lPSJ3c2NvbXBpbGUtZWpiIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPG1rZGlyIGRpcj0ib3V0cHV0Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1pbXBvcnQgLWtlZXAgLWQgb3V0cHV0IC1zIG91dHB1dCAtY2xhc3NwYXRoIC4gLWY6ZXhwbGljaXRjb250ZXh0IHdzY29tcGlsZV9jb25maWdfZWpiLnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vc29hcGZhdWx0c2VqYiI+Ci0gICAgICAgPGZpbGVzZXQgZGlyPSJvdXRwdXQvc29hcGZhdWx0c2VqYiIgCisgICAgICAgPGZpbGVzZXQgZGlyPSJvdXRwdXQvc29hcGZhdWx0c2VqYiIKICAgICAgICAgaW5jbHVkZXM9IlRlc3RTZXJ2aWNlLmNsYXNzLCBUZXN0LmNsYXNzLCBUZXN0MVJlcXVlc3RUeXBlLmNsYXNzLCBUZXN0MlJlcXVlc3RUeXBlLmNsYXNzLCBUZXN0MVJlc3BvbnNlVHlwZS5jbGFzcywgRmF1bHRPbmUuY2xhc3MsIEZhdWx0VHdvLmNsYXNzLCBGYXVsdFRocmVlLmNsYXNzIi8+CiAgICAgPC9jb3B5PgogICAgIDxkZWxldGUgZGlyPSJvdXRwdXQiLz4KQEAgLTg0LDI0ICs4NCwyNCBAQAogICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgY29tcGlsZSI+CiAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwiCiAgICAgICBmaWxlPSJzb2FwZmF1bHRzLndzZGwiLz4KLSAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAotCSBmaWxlPSJtYXBwaW5nX2FwcGNsaWVudC54bWwiLz4KKyAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCisgICAgIGZpbGU9Im1hcHBpbmdfYXBwY2xpZW50LnhtbCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iYXBwY2xpZW50LWphci1jb21tb24iPgotICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICB2YWx1ZT0ibWFwcGluZ19hcHBjbGllbnQueG1sLE1FVEEtSU5GL3dzZGwvKiosc29hcGZhdWx0cy8qLmNsYXNzIiAvPgogCiAgICAgPC9hbnRjYWxsPgotICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCi0JIGZpbGU9Im1hcHBpbmdfZWpiLnhtbCIvPgorICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKKyAgICAgZmlsZT0ibWFwcGluZ19lamIueG1sIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgIHZhbHVlPSJtYXBwaW5nX2VqYi54bWwsTUVUQS1JTkYvd3NkbC8qKixzb2FwZmF1bHRzZWpiLyouY2xhc3MiIC8+CiAKICAgICA8L2FudGNhbGw+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIiAvPgotICA8L3RhcmdldD4gCisgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTEyNSwyMSArMTI1LDIxIEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vc29hcGZhdWx0c2VqYi9Tb2FwRmF1bHRzVGVzdCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAKKyAgICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9Imdlbi1tYXBwaW5nLWFwcGNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItaW1wb3J0IC1jcCAuIC1tYXBwaW5nIG1hcHBpbmdfYXBwY2xpZW50LnhtbCAtZjpleHBsaWNpdGNvbnRleHQgd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9Imdlbi1tYXBwaW5nLWVqYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItaW1wb3J0IC1jcCAuIC1tYXBwaW5nIG1hcHBpbmdfZWpiLnhtbCAtZjpleHBsaWNpdGNvbnRleHQgd3Njb21waWxlX2NvbmZpZ19lamIueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KQEAgLTE0OCw3ICsxNDgsNyBAQAogICAgIDxkZWxldGUgZGlyPSJvdXQiLz4KICAgICA8bWtkaXIgZGlyPSJvdXQiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICB2YWx1ZT0iLWltcG9ydCAtY3AgLiAta2VlcCAtZCBvdXQgLVhwcmludHN0YWNrdHJhY2UgLVhkZWJ1Z21vZGVsOmdvb2QuZGVidWdNb2RlbC50eHQgLW1hcHBpbmcgbWFwcGluZy54bWwgLWY6ZXhwbGljaXRjb250ZXh0IHdzY29tcGlsZV9jb25maWdfZWpiLnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CkBAIC0xNTcsMTYgKzE1NywxNiBAQAogICAgIDxkZWxldGUgZGlyPSJvdXQiLz4KICAgICA8bWtkaXIgZGlyPSJvdXQiLz4KICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICB2YWx1ZT0iLWdlbjpib3RoIC1jcCAuIC1rZWVwIC1kIG91dCAtWHByaW50c3RhY2t0cmFjZSAtWGRlYnVnbW9kZWw6YmFkLmRlYnVnTW9kZWwudHh0IC1mOmV4cGxpY2l0Y29udGV4dCBjb25maWcueG1sIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICA8L3RhcmdldD4KIAogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgdGhlIFdlYlNlcnZpY2VzIHRlc3QpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIHRoZSBXZWJTZXJ2aWNlcyB0ZXN0KQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc29hcGZhdWx0cy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NvYXBmYXVsdHMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDFhMDE4Y2EuLjRlMGEyNmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc29hcGZhdWx0cy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zb2FwZmF1bHRzL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjcsMjUgKzI3LDI1IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLXNvYXBmYXVsdHMiKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLXNvYXBmYXVsdHNJRCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7Ci0gICAgCXRyeSB7CisgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9IGFyZ3NbMF07CiAKLQkgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgCisgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKwogICAgICAgICAgICAgVGVzdFNlcnZpY2UgdGVzdFNlcnZpY2UgPQogICAgICAgICAgICAgICAgIChUZXN0U2VydmljZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2Uvc29hcGZhdWx0cyIpOwogICAgICAgICAgICAgVGVzdCB0ZXN0ID0gdGVzdFNlcnZpY2UuZ2V0VGVzdFBvcnQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAoKFN0dWIpdGVzdCkuX3NldFByb3BlcnR5KFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKIApAQCAtNzIsMTEgKzcyLDExIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJzb2FwZmF1bHRzY2xpZW50IG1haW4iLCBzdGF0LlBBU1MpOwotICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNvYXBmYXVsdHMgY2xpZW50IHRlc3QgZmFpbGVkIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJzb2FwZmF1bHRzY2xpZW50IG1haW4iLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgLy9TeXN0ZW0uZXhpdCgxNSk7Ci0JfSAKKyAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zb2FwZmF1bHRzL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc29hcGZhdWx0cy9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKaW5kZXggMDVkNDY2Yy4uOWVjMzMxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zb2FwZmF1bHRzL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NvYXBmYXVsdHMvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC0yNyw2ICsyNyw2IEBACiAgICAgPHdzZGwtZmlsZT5NRVRBLUlORi93c2RsL3NvYXBmYXVsdHMud3NkbDwvd3NkbC1maWxlPgogICAgIDxqYXhycGMtbWFwcGluZy1maWxlPm1hcHBpbmdfYXBwY2xpZW50LnhtbDwvamF4cnBjLW1hcHBpbmctZmlsZT4KICAgICA8c2VydmljZS1xbmFtZSB4bWxuczpzZXJ2aWNlbnM9InVybjp0ZXN0Ij5zZXJ2aWNlbnM6VGVzdFNlcnZpY2UKLSAgICA8L3NlcnZpY2UtcW5hbWU+ICAgICAgICAgICAgICAgCisgICAgPC9zZXJ2aWNlLXFuYW1lPgogICA8L3NlcnZpY2UtcmVmPgogPC9hcHBsaWNhdGlvbi1jbGllbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NvYXBmYXVsdHMvZWpiL1NvYXBGYXVsdHNFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc29hcGZhdWx0cy9lamIvU29hcEZhdWx0c0VKQi5qYXZhCmluZGV4IDRlYzA1NjYuLjI2MzMwNmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc29hcGZhdWx0cy9lamIvU29hcEZhdWx0c0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc29hcGZhdWx0cy9lamIvU29hcEZhdWx0c0VKQi5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIHNvYXBmYXVsdHNlamI7CiAKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC0yOCwxNCArMjgsMTQgQEAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjOwogCiAgICAgcHVibGljIFNvYXBGYXVsdHNFSkIoKXt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvYXBGYXVsdHNFSkI6OmVqYkNyZWF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29hcEZhdWx0c0VKQjo6ZWpiQ3JlYXRlICEhIik7CiAgICAgfQogCiAgICAgcHVibGljIFRlc3QxUmVzcG9uc2VUeXBlIHRlc3QxKFN0cmluZyBhLCBTdHJpbmcgYiwKICAgICAgICAgICAgICAgICAgICAgIFRlc3QyUmVxdWVzdFR5cGUgYykKLSAgICAgICAgdGhyb3dzIEZhdWx0T25lLCBGYXVsdFRocmVlLCBGYXVsdFR3bywgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uIAorICAgICAgICB0aHJvd3MgRmF1bHRPbmUsIEZhdWx0VGhyZWUsIEZhdWx0VHdvLCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24KICAgICB7CiAgICAgICAgIE1lc3NhZ2VDb250ZXh0IG1zZ0NvbnRleHQgPSBzYy5nZXRNZXNzYWdlQ29udGV4dCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm1zZ0NvbnRleHQgPSAiICsgbXNnQ29udGV4dCk7CkBAIC02NSwxNiArNjUsMTYgQEAKICAgICAgICAgVGVzdDFSZXNwb25zZVR5cGUgdCA9IG5ldyBUZXN0MVJlc3BvbnNlVHlwZSgxLDIpOwogICAgICAgICByZXR1cm4gdDsKICAgICB9Ci0gICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQkKKwogICAgICAgICB0aGlzLnNjID0gc2M7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zb2FwZmF1bHRzL3dzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc29hcGZhdWx0cy93c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwKaW5kZXggMzhkN2FhYS4uMjBhMmZkZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zb2FwZmF1bHRzL3dzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NvYXBmYXVsdHMvd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249InNvYXBmYXVsdHMud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJzb2FwZmF1bHRzIi8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NvYXBmYXVsdHMvd3Njb21waWxlX2NvbmZpZ19lamIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zb2FwZmF1bHRzL3dzY29tcGlsZV9jb25maWdfZWpiLnhtbAppbmRleCA2MTUwOTUxLi5iYjM2MzRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NvYXBmYXVsdHMvd3Njb21waWxlX2NvbmZpZ19lamIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc29hcGZhdWx0cy93c2NvbXBpbGVfY29uZmlnX2VqYi54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHdzZGwgCisgIDx3c2RsCiAgICAgICBsb2NhdGlvbj0ic29hcGZhdWx0cy53c2RsIgogICAgICAgcGFja2FnZU5hbWU9InNvYXBmYXVsdHNlamIiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQ2Yzg4MGYuLmFlNjMxZTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjYgKzE1LDI2IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdHVicHJvcGVydGllcyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2Vic2VydmljZXMueG1sIiB2YWx1ZT0id2Vic2VydmljZXMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9idWlsZC54bWwKaW5kZXggMjRhMTY1Yy4uZTg2ZjJhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL2J1aWxkLnhtbApAQCAtMzAsOSArMzAsOSBAQAogICAgICZ0ZXN0cHJvcGVydGllczsKIAogICA8dGFyZ2V0IG5hbWU9InJ1bi53c2NvbXBpbGUiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KLSAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPiAgICAgICAgCi0JPC9leGVjPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KKyAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPgorICAgIDwvZXhlYz4KICAgPC90YXJnZXQ+CiAKIDwhLS0gTk9URS4gdGhlIHNpbXBsZSBtYXBwaW5nIHRlc3QgYW5kIGZ1bGwgbWFwcGluZyB0ZXN0IGNhbgpAQCAtNDksMzQgKzQ5LDM0IEBACiAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic3R1YnByb3BzIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJnZW4tZWpiLXdzZGwiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIi8+IAorICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKLSAgIHZhbHVlPSItZGVmaW5lIC1tYXBwaW5nICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1NheUhlbGxvTWFwcGluZ19lamIueG1sIC1jcCAke2J1aWxkLmNsYXNzZXMuZGlyfSAta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIGNvbmZpZy1pbnRlcmZhY2UueG1sIi8+IAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgorICAgdmFsdWU9Ii1kZWZpbmUgLW1hcHBpbmcgJHtidWlsZC5jbGFzc2VzLmRpcn0vU2F5SGVsbG9NYXBwaW5nX2VqYi54bWwgLWNwICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IC1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwgY29uZmlnLWludGVyZmFjZS54bWwiLz4KICAgICA8L2FudGNhbGw+Ci0gIDwvdGFyZ2V0PiAgICAKLSAgIAorICA8L3RhcmdldD4KKwogICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLWVqYiIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNvbXBpbGUsIGdlbi1lamItd3NkbCI+CiAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vV0VCLUlORi93c2RsIi8+CiAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYvd3NkbCIKLSAgICAgICAgZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbC9TYXlIZWxsb1NlcnZpY2Uud3NkbCIvPiAgICAgICAgCisgICAgICAgIGZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwvU2F5SGVsbG9TZXJ2aWNlLndzZGwiLz4KICAgICA8Y29weSB0b2Rpcj0iLiIgZmlsZT0iZGVzY3JpcHRvci93ZWJzZXJ2aWNlcy54bWwiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iU2F5SGVsbG9NYXBwaW5nX2VqYi54bWwsTUVUQS1JTkYvd3NkbC8qKixzdHVicHJvcHMvU2ltcGxlKi5jbGFzcyIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8ZGVsZXRlIGZpbGU9IndlYnNlcnZpY2VzLnhtbCIvPgotICA8L3RhcmdldD4gCi0gIAotICAKKyAgPC90YXJnZXQ+CisKKwogICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLXdlYiIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNvbXBpbGUsIGdlbi13ZWItd3NkbCI+CiAgICAgPGNvcHkgdG9kaXI9Ii4iIGZpbGU9Ii4uL3NoYXJlZC93YXIvd2Vic2VydmljZXMueG1sIi8+CiAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYiIGZpbGU9IiR7c3VuLXdlYi54bWx9Ii8+CiAgICAgPHJlcGxhY2UgZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vV0VCLUlORi9zdW4td2ViLnhtbCIgdG9rZW49IkB3ZWJIb3N0QCIgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgogICAgIDxyZXBsYWNlIGZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYvc3VuLXdlYi54bWwiIHRva2VuPSJAd2ViUG9ydEAiIHZhbHVlPSIke2h0dHAucG9ydH0iLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAgIAorICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYvc3VuLXdlYi54bWwiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmdmaWxlLmxvY2F0aW9uIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmdmaWxlLm5hbWUiIHZhbHVlPSJXZWJTZXJ2aWNlVGVzdE1hcHBpbmcueG1sIi8+CkBAIC04OCw2MSArODgsNjEgQEAKICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgY2FzZXNlbnNpdGl2ZT0ieWVzIj4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IldFQi1JTkYvd3NkbC9TYXlIZWxsb1NlcnZpY2Uud3NkbCIvPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iU2F5SGVsbG9NYXBwaW5nX2VqYi54bWwiLz4KLSAgICAgICAgPC9maWxlc2V0PiAgICAgCisgICAgICAgIDwvZmlsZXNldD4KICAgICAgPC9qYXI+Ci0gICAgPGRlbGV0ZSBmaWxlPSJ3ZWJzZXJ2aWNlcy54bWwiLz4gICAgIAotICA8L3RhcmdldD4gICAKLSAgCisgICAgPGRlbGV0ZSBmaWxlPSJ3ZWJzZXJ2aWNlcy54bWwiLz4KKyAgPC90YXJnZXQ+CisKICAgPHRhcmdldCBuYW1lPSJjb21waWxlLXdlYiIgZGVwZW5kcz0iIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSIuLi9zaGFyZWQvd2FyIi8+CiAgICAgPC9hbnRjYWxsPgotICA8L3RhcmdldD4gCi0gICAgCisgIDwvdGFyZ2V0PgorCiAgIDx0YXJnZXQgbmFtZT0iZ2VuLXdlYi13c2RsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPCEtLTxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYvd3NkbCIvPiAtLT4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKLSAgIHZhbHVlPSItZGVmaW5lIC1tYXBwaW5nICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dlYlNlcnZpY2VUZXN0TWFwcGluZy54bWwgLWNwICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IC1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IC4uL3NoYXJlZC93YXIvY29uZmlnLnhtbCIvPiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKKyAgIHZhbHVlPSItZGVmaW5lIC1tYXBwaW5nICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dlYlNlcnZpY2VUZXN0TWFwcGluZy54bWwgLWNwICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IC1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IC4uL3NoYXJlZC93YXIvY29uZmlnLnhtbCIvPgogICAgIDwvYW50Y2FsbD4KLSAgPC90YXJnZXQ+ICAgICAgICAKLSAgICAKKyAgPC90YXJnZXQ+CisKICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iYXNzZW1ibGUtZWpiLCBhc3NlbWJsZS13ZWIsIGFzc2VtYmxlLWNsaWVudCIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+Ci0gICAgPC9hbnRjYWxsPiAgICAKKyAgICA8L2FudGNhbGw+CiAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiI+Ci0gICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgIHZhbHVlPSJDbGllbnQuY2xhc3MsIHRlc3QvKiosY29tLyoqIiAvPgotICAgIDwvYW50Y2FsbD4gIAorICAgIDwvYW50Y2FsbD4KICAgICA8bW92ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIiB0b0ZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIvPgogICA8L3RhcmdldD4KLSAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L1dlYlNlcnZpY2VUZXN0U2VydmxldC9XZWJTZXJ2aWNlVGVzdFNlcnZpY2UiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgCisgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSJXZWJTZXJ2aWNlVGVzdFNlcnZsZXQiLz4gICAgICAgICAgICAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9IldlYlNlcnZpY2VUZXN0U2VydmxldCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDA0MjkxNjAuLjExYTE2NjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMxLDQzICszMSw0MyBAQAogICovCiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQotICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7ICAgIAorICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLXdlYi1zdHVicy1wcm9wZXJ0aWVzIik7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0gICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy13ZWItc3R1YnMtcHJvcGVydGllcyIpOyAgICAgICAgCisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy13ZWItc3R1YnMtcHJvcGVydGllcyIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBkeW5hbWljKGFyZ3MpOwotICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1zdHVicy1wcm9wZXJ0aWVzIER5bmFtaWMgUHJveHkiLCBzdGF0LlBBU1MpOyAgICAgICAgCisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXN0dWJzLXByb3BlcnRpZXMgRHluYW1pYyBQcm94eSIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmFpbHVyZSAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItc3R1YnMtcHJvcGVydGllcyBEeW5hbWljIFByb3h5Iiwgc3RhdC5GQUlMKTsgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1zdHVicy1wcm9wZXJ0aWVzIER5bmFtaWMgUHJveHkiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICAgfQotIAorCiAgICAgcHVibGljIHZvaWQgZHluYW1pYyhTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nIGVuZHBvaW50ID0gYXJnc1swXTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnZva2luZyBkeW5hbWljIHByb3hpZXMgd2l0aCBlbmRwb2ludCBhdCAiICsgZW5kcG9pbnQpOwogICAgICAgICBVUkwgd3NkbFVSTCA9IG5ldyBVUkwoZW5kcG9pbnQrIj9XU0RMIik7CiAgICAgICAgIFNlcnZpY2VGYWN0b3J5IGZhY3RvcnkgPSBTZXJ2aWNlRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSBmYWN0b3J5LmNyZWF0ZVNlcnZpY2Uod3NkbFVSTCwgCisgICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IGZhY3RvcnkuY3JlYXRlU2VydmljZSh3c2RsVVJMLAogICAgICAgICAgICAgbmV3IFFOYW1lKCJ1cm46V2ViU2VydmljZVRlc3QiLCJXZWJTZXJ2aWNlU2VydmxldFRlc3QiKSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT2J0YWluZWQgU2VydmljZSIpOwogICAgICAgICBXZWJTZXJ2aWNlVGVzdCBpbnRmID0gKFdlYlNlcnZpY2VUZXN0KSBzZXJ2aWNlLmdldFBvcnQoCi0gICAgICAgICAgICBuZXcgUU5hbWUoInVybjpXZWJTZXJ2aWNlVGVzdCIsIldlYlNlcnZpY2VUZXN0UG9ydCIpLCAgICAgICAgICAKKyAgICAgICAgICAgIG5ldyBRTmFtZSgidXJuOldlYlNlcnZpY2VUZXN0IiwiV2ViU2VydmljZVRlc3RQb3J0IiksCiAgICAgICAgICAgICBXZWJTZXJ2aWNlVGVzdC5jbGFzcyk7CiAgICAgICAgIFN0cmluZ1tdIHBhcmFtcyA9IG5ldyBTdHJpbmdbMV07Ci0gICAgICAgIHBhcmFtc1swXSA9ICIgZnJvbSBjbGllbnQiOyAgICAgICAKKyAgICAgICAgcGFyYW1zWzBdID0gIiBmcm9tIGNsaWVudCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpbnRmLmRvVGVzdChwYXJhbXMpKTsKICAgICB9Ci0gICAgCisKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvY29uZmlnLWludGVyZmFjZS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9jb25maWctaW50ZXJmYWNlLnhtbAppbmRleCAwZTBiNjI3Li41YzllZjkxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9jb25maWctaW50ZXJmYWNlLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9jb25maWctaW50ZXJmYWNlLnhtbApAQCAtMTksMTEgKzE5LDExIEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDxzZXJ2aWNlIAotICAgICAgbmFtZT0iU2F5SGVsbG9TZXJ2aWNlIiAKLSAgICAgIHRhcmdldE5hbWVzcGFjZT0idXJuOldlYlNlcnZpY2VUZXN0IiAKLSAgICAgIHR5cGVOYW1lc3BhY2U9InVybjpXZWJTZXJ2aWNlVGVzdCIgCisgIDxzZXJ2aWNlCisgICAgICBuYW1lPSJTYXlIZWxsb1NlcnZpY2UiCisgICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpXZWJTZXJ2aWNlVGVzdCIKKyAgICAgIHR5cGVOYW1lc3BhY2U9InVybjpXZWJTZXJ2aWNlVGVzdCIKICAgICAgIHBhY2thZ2VOYW1lPSJzdHVicHJvcHMiPgogICAgICAgPGludGVyZmFjZSBuYW1lPSJzdHVicHJvcHMuU2ltcGxlU2VydmVyIi8+CiAgIDwvc2VydmljZT4KLTwvY29uZmlndXJhdGlvbj4gCis8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDkwMWYyYWEuLjkzMmYzN2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yNiw3ICsyNiw3IEBACiAgICAgICA8d2Vic2VydmljZS1lbmRwb2ludD4KICAgICAgICAgPHBvcnQtY29tcG9uZW50LW5hbWU+U2ltcGxlU2VydmVyUG9ydDwvcG9ydC1jb21wb25lbnQtbmFtZT4KICAgICAgICAgPGVuZHBvaW50LWFkZHJlc3MtdXJpPnNpbXBsZXNlcnZlci9TaW1wbGVTZXJ2ZXI8L2VuZHBvaW50LWFkZHJlc3MtdXJpPgotCTxkZWJ1Z2dpbmctZW5hYmxlZD50cnVlPC9kZWJ1Z2dpbmctZW5hYmxlZD4KKyAgICA8ZGVidWdnaW5nLWVuYWJsZWQ+dHJ1ZTwvZGVidWdnaW5nLWVuYWJsZWQ+CiAgICAgICA8L3dlYnNlcnZpY2UtZW5kcG9pbnQ+CiAgICAgPC9lamI+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCmluZGV4IDEyZjZjNTkuLjM2NjA1ZGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvZGVzY3JpcHRvci9zdW4td2ViLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgICAgICA8c3R1Yi1wcm9wZXJ0eT4KICAgICAgICAgICAgIDxuYW1lPmphdmF4LnhtbC5ycGMuc2VydmljZS5lbmRwb2ludC5hZGRyZXNzPC9uYW1lPgogICAgICAgICAgICAgPHZhbHVlPmh0dHA6Ly9Ad2ViSG9zdEA6QHdlYlBvcnRAL3NpbXBsZXNlcnZlci9TaW1wbGVTZXJ2ZXIgPC92YWx1ZT4KLSAgICAgICAgPC9zdHViLXByb3BlcnR5PiAgICAgICAgCisgICAgICAgIDwvc3R1Yi1wcm9wZXJ0eT4KICAgICA8L3BvcnQtaW5mbz4KLSA8L3NlcnZpY2UtcmVmPiAgICAgIAorIDwvc2VydmljZS1yZWY+CiA8L3N1bi13ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDU1ZTY3Y2EuLjI4M2FkNDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTQxLDUgKzQxLDUgQEAKICAgICA8cG9ydC1jb21wb25lbnQtcmVmPgogICAgICAgPHNlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPnN0dWJwcm9wcy5TaW1wbGVTZXJ2ZXI8L3NlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPgogICAgIDwvcG9ydC1jb21wb25lbnQtcmVmPgotICAgPC9zZXJ2aWNlLXJlZj4gCisgICA8L3NlcnZpY2UtcmVmPgogPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvc3R1YnByb3BzL1NpbXBsZVNlcnZlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvc3R1YnByb3BzL1NpbXBsZVNlcnZlci5qYXZhCmluZGV4IGIzYzU5NzMuLjhjMTg5YmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL3N0dWJwcm9wcy9TaW1wbGVTZXJ2ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9zdHVicHJvcHMvU2ltcGxlU2VydmVyLmphdmEKQEAgLTIyLDggKzIyLDggQEAKIAogcGFja2FnZSBzdHVicHJvcHM7CiAKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAotaW1wb3J0IGphdmEucm1pLlJlbW90ZTsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOworaW1wb3J0IGphdmEucm1pLlJlbW90ZTsKIAogLyoqCiAgKiBTaW1wbGUgV2ViU2VydmljZXMgSW50ZXJmYWNlCkBAIC0zMSw2ICszMSw2IEBACiAgKiBAYXV0aG9yIEplcm9tZSBEb2NoZXoKICAqLwogcHVibGljIGludGVyZmFjZSBTaW1wbGVTZXJ2ZXIgZXh0ZW5kcyBSZW1vdGUgewotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvc3R1YnByb3BzL1NpbXBsZVNlcnZlckltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL3N0dWJwcm9wcy9TaW1wbGVTZXJ2ZXJJbXBsLmphdmEKaW5kZXggYjcxYzRmZS4uNGE4ODkxNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvc3R1YnByb3BzL1NpbXBsZVNlcnZlckltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9zdHVicHJvcHMvU2ltcGxlU2VydmVySW1wbC5qYXZhCkBAIC0yNSwzNiArMjUsMzYgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIC8qKgogICoKICAqIEBhdXRob3IgZG9jaGV6CiAgKi8KIHB1YmxpYyBjbGFzcyBTaW1wbGVTZXJ2ZXJJbXBsIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewotICAgIAorCiAgICAgU2Vzc2lvbkNvbnRleHQgc2M7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBTaW1wbGVTZXJ2ZXJJbXBsICovCiAgICAgcHVibGljIFNpbXBsZVNlcnZlckltcGwoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBHb29nbGVFSkI6OmVqYkNyZWF0ZSAhISIpOwotfSAgICAKLSAgICAKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEdvb2dsZUVKQjo6ZWpiQ3JlYXRlICEhIik7Cit9CisKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gImhlbGxvIiArIHdobzsKLSAgICB9ICAgIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JCisKICAgICAgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9zdHVicHJvcHMvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL3N0dWJwcm9wcy9UZXN0U2VydmxldC5qYXZhCmluZGV4IDNkYjQ4OTkuLjk0NzA2ZmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL3N0dWJwcm9wcy9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL3N0dWJwcm9wcy9UZXN0U2VydmxldC5qYXZhCkBAIC0zMywxNiArMzMsMTYgQEAKICAqIEBhdXRob3IgZG9jaGV6CiAgKi8KIHB1YmxpYyBjbGFzcyBUZXN0U2VydmxldCBpbXBsZW1lbnRzIFdlYlNlcnZpY2VUZXN0IHsKLSAgICAKKwogICAgIFNpbXBsZVNlcnZlciBwb3J0OwotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgVGVzdFNlcnZsZXQgKi8KICAgICBwdWJsaWMgVGVzdFNlcnZsZXQoKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBzZXJ2bGV0IGluc3RhbnRpYXRlZCIpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBzZXJ2bGV0IGluc3RhbnRpYXRlZCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KFN0cmluZ1tdIHBhcmFtZXRlcnMpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3Qgc2VydmxldCBpbnZva2VkIik7CiAgICAgICAgIFNlcnZpY2UgcmVmOwogICAgICAgICB0cnkgewpAQCAtNjAsNyArNjAsNyBAQAogICAgICAgICBqYXZhLnV0aWwuSXRlcmF0b3IgaXRyID0gcmVmLmdldFBvcnRzKCk7CiAgICAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaXRyLm5leHQoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9CiAKICAgICAgICAgICAgIHBvcnQgPSAoU2ltcGxlU2VydmVyKSByZWYuZ2V0UG9ydChTaW1wbGVTZXJ2ZXIuY2xhc3MpOwpAQCAtNzMsNiArNzMsNiBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmYWlsdXJlIDogY2Fubm90IGdldCBwb3J0Iik7CiAgICAgICAgICAgICByZXR1cm4gIkZhaWxlZCAtIENhbm5vdCBnZXQgcG9ydCI7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHBvcnQuc2F5SGVsbG8ocGFyYW1ldGVyc1swXSk7ICAgICAgICAKLSAgICB9ICAgIAorICAgICAgICByZXR1cm4gcG9ydC5zYXlIZWxsbyhwYXJhbWV0ZXJzWzBdKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dsc19kZC9zZXJ2aWNlX2VuZHBvaW50X2FkZHJlc3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2xzX2RkL3NlcnZpY2VfZW5kcG9pbnRfYWRkcmVzcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDBhNDBhMDguLmIzZWNmMGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2xzX2RkL3NlcnZpY2VfZW5kcG9pbnRfYWRkcmVzcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2xzX2RkL3NlcnZpY2VfZW5kcG9pbnRfYWRkcmVzcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw5ICsxNSw5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZXJ2aWNlX2VuZHBvaW50X2FkZHJlc3MiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLndzaXQuZGVzY3JpcHRvcnMiIHZhbHVlPSIuL2Rlc2NyaXB0b3JzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dsc19kZC9zZXJ2aWNlX2VuZHBvaW50X2FkZHJlc3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93bHNfZGQvc2VydmljZV9lbmRwb2ludF9hZGRyZXNzL2J1aWxkLnhtbAppbmRleCBlZGUzYTEwLi4zNDhhZjVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dsc19kZC9zZXJ2aWNlX2VuZHBvaW50X2FkZHJlc3MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2xzX2RkL3NlcnZpY2VfZW5kcG9pbnRfYWRkcmVzcy9idWlsZC54bWwKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZW5kcG9pbnQiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBrZy1lamItamFyIj4KICAgICAgICAgPHBhcmFtIG5hbWU9Imphci5jbGFzc2VzIiB2YWx1ZT0iZW5kcG9pbnQiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Imphci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93bHNfZGQvc2VydmljZV9lbmRwb2ludF9hZGRyZXNzL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2xzX2RkL3NlcnZpY2VfZW5kcG9pbnRfYWRkcmVzcy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZmNkM2NiNy4uZTFlNGQyYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93bHNfZGQvc2VydmljZV9lbmRwb2ludF9hZGRyZXNzL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dsc19kZC9zZXJ2aWNlX2VuZHBvaW50X2FkZHJlc3MvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAgICAgICAgIHN0YXRpYyBBZGROdW1iZXJzSW1wbFNlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3bHNfZGQuc2VydmljZV9lbmRwb2ludF9hZGRyZXNzIik7CisgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3bHNfZGQuc2VydmljZV9lbmRwb2ludF9hZGRyZXNzIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LnJ1blRlc3QoKTsKICAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3bHNfZGQuc2VydmljZV9lbmRwb2ludF9hZGRyZXNzIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dsc19kZC93c2RsX2V4cG9zZWRfZmFsc2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2xzX2RkL3dzZGxfZXhwb3NlZF9mYWxzZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDlhNGUzMTMuLjIyYjY2MTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2xzX2RkL3dzZGxfZXhwb3NlZF9mYWxzZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2xzX2RkL3dzZGxfZXhwb3NlZF9mYWxzZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndzZGxfZXhwb3NlZF9mYWxzZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2Vic2VydmljZXMueG1sIiB2YWx1ZT0iLi93ZWJzZXJ2aWNlcy54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2xzX2RkL3dzZGxfZXhwb3NlZF9mYWxzZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dsc19kZC93c2RsX2V4cG9zZWRfZmFsc2UvYnVpbGQueG1sCmluZGV4IGNjYTU4NGUuLjc4ZDY0YjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2xzX2RkL3dzZGxfZXhwb3NlZF9mYWxzZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93bHNfZGQvd3NkbF9leHBvc2VkX2ZhbHNlL2J1aWxkLnhtbApAQCAtNzUsOCArNzUsOCBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2ltcG9ydC5hcmdzIgogICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC1wIHdsc19kZC4ke2FudC5wcm9qZWN0Lm5hbWV9LmNsaWVudCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQgJHtsb2NhbHdzZGxkaXJ9L0FkZE51bWJlcnNTZXJ2aWNlLndzZGwiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dsc19kZC93c2RsX2V4cG9zZWRfZmFsc2UvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93bHNfZGQvd3NkbF9leHBvc2VkX2ZhbHNlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBjYzMzMWUzLi44ZDZkNjE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dsc19kZC93c2RsX2V4cG9zZWRfZmFsc2UvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2xzX2RkL3dzZGxfZXhwb3NlZF9mYWxzZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKICAgICAgICAgc3RhdGljIEFkZE51bWJlcnNJbXBsU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndsc19kZC53c2RsX2V4cG9zZWRfZmFsc2UiKTsKKyAgICAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndsc19kZC53c2RsX2V4cG9zZWRfZmFsc2UiKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQucnVuVGVzdCgpOwogICAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndsc19kZC53c2RsX2V4cG9zZWRfZmFsc2UiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2xzX2RkL3dzZGxfZXhwb3NlZF9mYWxzZS93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93bHNfZGQvd3NkbF9leHBvc2VkX2ZhbHNlL3dlYi54bWwKaW5kZXggMzliZDFhNS4uMDZjMzA1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93bHNfZGQvd3NkbF9leHBvc2VkX2ZhbHNlL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93bHNfZGQvd3NkbF9leHBvc2VkX2ZhbHNlL3dlYi54bWwKQEAgLTE4LDE3ICsxOCwxNyBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+Ci0JPHNlcnZsZXQ+Ci0JCTxzZXJ2bGV0LW5hbWU+QWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+d2xzX2RkLndzZGxfZXhwb3NlZF9mYWxzZS5lbmRwb2ludC5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KLQk8L3NlcnZsZXQ+Ci0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8c2VydmxldC1uYW1lPkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPndsc19kZC53c2RsX2V4cG9zZWRfZmFsc2UuZW5kcG9pbnQuQWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtY2xhc3M+CisgICAgPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+QWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi9zZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93c2ktc2FtcGxlYXBwL2Rlc2NyaXB0b3JzL2FwcGxpY2F0aW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpLXNhbXBsZWFwcC9kZXNjcmlwdG9ycy9hcHBsaWNhdGlvbi54bWwKaW5kZXggZWEyNjUwYS4uMWQwZjhiNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93c2ktc2FtcGxlYXBwL2Rlc2NyaXB0b3JzL2FwcGxpY2F0aW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dzaS1zYW1wbGVhcHAvZGVzY3JpcHRvcnMvYXBwbGljYXRpb24ueG1sCkBAIC0xOCw5ICsxOCw5IEBACiAtLT4KIAogPGFwcGxpY2F0aW9uCi0gIHZlcnNpb249IjEuNCIgCi0gIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiAKLSAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgIHZlcnNpb249IjEuNCIKKyAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiCisgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL2FwcGxpY2F0aW9uXzFfNC54c2QiPgogCiAgIDxkZXNjcmlwdGlvbj5XU0kgU2FtcGxlIEFwcGxpY2F0aW9uIGRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpLXNhbXBsZWFwcC9kZXNjcmlwdG9ycy93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93c2ktc2FtcGxlYXBwL2Rlc2NyaXB0b3JzL3dlYi54bWwKaW5kZXggNjYzM2MzZi4uMjVkN2ZlNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93c2ktc2FtcGxlYXBwL2Rlc2NyaXB0b3JzL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93c2ktc2FtcGxlYXBwL2Rlc2NyaXB0b3JzL3dlYi54bWwKQEAgLTE4LDggKzE4LDggQEAKIC0tPgogCiA8d2ViLWFwcCB2ZXJzaW9uPSIyLjQiCi0gICAgICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICAgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIgorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+CiAKICAgPGRpc3BsYXktbmFtZT5XU0ktU2FtcGxlLUFwcGxpY2F0aW9uPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dzaS9mYXVsdGNvZGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpL2ZhdWx0Y29kZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDBmNzllYWIuLjk1YmYxOTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpL2ZhdWx0Y29kZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpL2ZhdWx0Y29kZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMiArMTUsMjIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImZhdWx0Y29kZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWJzZXJ2aWNlcy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYnNlcnZpY2VzLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dzaS9mYXVsdGNvZGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93c2kvZmF1bHRjb2RlL2J1aWxkLnhtbAppbmRleCA0OWI3OTA0Li5mMjI3Zjk5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dzaS9mYXVsdGNvZGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpL2ZhdWx0Y29kZS9idWlsZC54bWwKQEAgLTMzLDkgKzMzLDkgQEAKIAogCiAgIDx0YXJnZXQgbmFtZT0icnVuLndzY29tcGlsZSI+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9IiBmYWlsb25lcnJvcj0idHJ1ZSIgPgotICAgICAgICA8YXJnIGxpbmU9Ii1zb3VyY2UgMS4xLjIgJHt3c2NvbXBpbGUuY29tbWFuZH0iIC8+ICAgICAgICAKLQk8L2V4ZWM+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9IiBmYWlsb25lcnJvcj0idHJ1ZSIgPgorICAgICAgICA8YXJnIGxpbmU9Ii1zb3VyY2UgMS4xLjIgJHt3c2NvbXBpbGUuY29tbWFuZH0iIC8+CisgICAgPC9leGVjPgogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9IiI+CkBAIC01OCwxMSArNTgsMTEgQEAKICAgPHRhcmdldCBuYW1lPSJ3c2NvbXBpbGUtYXBwY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPG1rZGlyIGRpcj0ib3V0cHV0Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1pbXBvcnQgLWtlZXAgLWQgb3V0cHV0IC1zIG91dHB1dCAtY2xhc3NwYXRoIC4gd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9mYXVsdGNvZGUiPgotICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0L2ZhdWx0Y29kZSIgCisgICAgICAgPGZpbGVzZXQgZGlyPSJvdXRwdXQvZmF1bHRjb2RlIgogICAgICAgICBpbmNsdWRlcz0iU2ltcGxlVGVzdFNlcnZpY2UuY2xhc3MsIFNpbXBsZVRlc3QuY2xhc3MiLz4KICAgICA8L2NvcHk+CiAgICAgPGRlbGV0ZSBkaXI9Im91dHB1dCIvPgpAQCAtNzEsMTEgKzcxLDExIEBACiAgIDx0YXJnZXQgbmFtZT0id3Njb21waWxlLWVqYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxta2RpciBkaXI9Im91dHB1dCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItaW1wb3J0IC1rZWVwIC1kIG91dHB1dCAtcyBvdXRwdXQgLWNsYXNzcGF0aCAuIHdzY29tcGlsZV9jb25maWdfZWpiLnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vZmF1bHRjb2RlZWpiIj4KLSAgICAgICA8ZmlsZXNldCBkaXI9Im91dHB1dC9mYXVsdGNvZGVlamIiIAorICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0L2ZhdWx0Y29kZWVqYiIKICAgICAgICAgaW5jbHVkZXM9IlNpbXBsZVRlc3RTZXJ2aWNlLmNsYXNzLCBTaW1wbGVUZXN0LmNsYXNzIi8+CiAgICAgPC9jb3B5PgogICAgIDxkZWxldGUgZGlyPSJvdXRwdXQiLz4KQEAgLTg0LDI0ICs4NCwyNCBAQAogICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgY29tcGlsZSI+CiAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwiCiAgICAgICBmaWxlPSJmYXVsdGNvZGUud3NkbCIvPgotICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCi0JIGZpbGU9IkZhdWx0Q29kZU1hcHBpbmdfYXBwY2xpZW50LnhtbCIvPgorICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKKyAgICAgZmlsZT0iRmF1bHRDb2RlTWFwcGluZ19hcHBjbGllbnQueG1sIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiI+Ci0gICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgIHZhbHVlPSJGYXVsdENvZGVNYXBwaW5nX2FwcGNsaWVudC54bWwsTUVUQS1JTkYvd3NkbC8qKixmYXVsdGNvZGUvKi5jbGFzcyIgLz4KIAogICAgIDwvYW50Y2FsbD4KLSAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAotCSBmaWxlPSJGYXVsdENvZGVNYXBwaW5nX2VqYi54bWwiLz4KKyAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCisgICAgIGZpbGU9IkZhdWx0Q29kZU1hcHBpbmdfZWpiLnhtbCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICB2YWx1ZT0iRmF1bHRDb2RlTWFwcGluZ19lamIueG1sLE1FVEEtSU5GL3dzZGwvKiosZmF1bHRjb2RlZWpiLyouY2xhc3MiIC8+CiAKICAgICA8L2FudGNhbGw+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIiAvPgotICA8L3RhcmdldD4gCisgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTEyMSwyOSArMTIxLDI5IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vZmF1bHRjb2RlZWpiL0ZhdWx0Q29kZVRlc3QiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgCisgICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJnZW4tbWFwcGluZy1hcHBjbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICB2YWx1ZT0iLWdlbiAtY3AgLiAtbWFwcGluZyBGYXVsdENvZGVNYXBwaW5nX2FwcGNsaWVudC54bWwgd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9Imdlbi1tYXBwaW5nLWVqYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItZ2VuIC1jcCAuIC1tYXBwaW5nIEZhdWx0Q29kZU1hcHBpbmdfZWpiLnhtbCB3c2NvbXBpbGVfY29uZmlnX2VqYi54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgdGhlIFdlYlNlcnZpY2VzIHRlc3QpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIHRoZSBXZWJTZXJ2aWNlcyB0ZXN0KQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpL2ZhdWx0Y29kZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dzaS9mYXVsdGNvZGUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDA5NTA2ODAuLjc1Y2ZkOTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpL2ZhdWx0Y29kZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93c2kvZmF1bHRjb2RlL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjcsMjUgKzI3LDI1IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLWZhdWx0Y29kZSIpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtZmF1bHRjb2RlSUQiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewotICAgIAl0cnkgeworICAgICAgICB0cnkgewogCiAgICAgICAgICAgIFN0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPSBhcmdzWzBdOwogCi0JICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAorICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisKICAgICAgICAgICAgIFNpbXBsZVRlc3RTZXJ2aWNlIHRlc3RTZXJ2aWNlID0KICAgICAgICAgICAgICAgICAoU2ltcGxlVGVzdFNlcnZpY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL2ZhdWx0Y29kZSIpOwogICAgICAgICAgICAgU2ltcGxlVGVzdCB0ZXN0ID0gdGVzdFNlcnZpY2UuZ2V0U2ltcGxlVGVzdCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgICgoU3R1Yil0ZXN0KS5fc2V0UHJvcGVydHkoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwogCkBAIC02NSwxMSArNjUsMTEgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUkVUVVJOIExVQ0tZIE5VTUJFUiA9ICIgKyByZXQpOwogKi8KICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ4c2RhbnljbGllbnQgbWFpbiIsIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ4c2RhbnkgY2xpZW50IHRlc3QgZmFpbGVkIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ4c2RhbnljbGllbnQgbWFpbiIsIHN0YXQuRkFJTCk7Ci0JfSAKKyAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93c2kvZmF1bHRjb2RlL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpL2ZhdWx0Y29kZS9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKaW5kZXggMjVmZjViNS4uMWNjYWI5YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93c2kvZmF1bHRjb2RlL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dzaS9mYXVsdGNvZGUvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC0yNyw2ICsyNyw2IEBACiAgICAgPHdzZGwtZmlsZT5NRVRBLUlORi93c2RsL2ZhdWx0Y29kZS53c2RsPC93c2RsLWZpbGU+CiAgICAgPGpheHJwYy1tYXBwaW5nLWZpbGU+RmF1bHRDb2RlTWFwcGluZ19hcHBjbGllbnQueG1sPC9qYXhycGMtbWFwcGluZy1maWxlPgogICAgIDxzZXJ2aWNlLXFuYW1lIHhtbG5zOnNlcnZpY2Vucz0idXJuOnRlc3QiPnNlcnZpY2VuczpUZXN0U2VydmljZQotICAgIDwvc2VydmljZS1xbmFtZT4gICAgICAgICAgICAgICAKKyAgICA8L3NlcnZpY2UtcW5hbWU+CiAgIDwvc2VydmljZS1yZWY+CiA8L2FwcGxpY2F0aW9uLWNsaWVudD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpL2ZhdWx0Y29kZS9lamIvRmF1bHRDb2RlRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dzaS9mYXVsdGNvZGUvZWpiL0ZhdWx0Q29kZUVKQi5qYXZhCmluZGV4IGU5OTc1MTQuLjU0OGQ2MWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpL2ZhdWx0Y29kZS9lamIvRmF1bHRDb2RlRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93c2kvZmF1bHRjb2RlL2VqYi9GYXVsdENvZGVFSkIuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBmYXVsdGNvZGVlamI7CiAKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC0yOCwyNSArMjgsMjUgQEAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjOwogCiAgICAgcHVibGljIEZhdWx0Q29kZUVKQigpe30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRmF1bHRDb2RlRUpCOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZhdWx0Q29kZUVKQjo6ZWpiQ3JlYXRlICEhIik7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBlY2hvU3RyaW5nKFN0cmluZyBib2R5KSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGYXVsdENvZGVFSkI6OiAgZWNob1N0cmluZyA9ICIgKyBib2R5KTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZhdWx0Q29kZUVKQjo6ICBlY2hvU3RyaW5nID0gIiArIGJvZHkpOwogICAgICAgICByZXR1cm4gYm9keTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQkKKwogICAgICAgICB0aGlzLnNjID0gc2M7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93c2kvZmF1bHRjb2RlL3dzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpL2ZhdWx0Y29kZS93c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwKaW5kZXggNTliYjRlYS4uMWRkZTEyMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93c2kvZmF1bHRjb2RlL3dzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dzaS9mYXVsdGNvZGUvd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249ImZhdWx0Y29kZS53c2RsIgogICAgICAgcGFja2FnZU5hbWU9ImZhdWx0Y29kZSIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93c2kvZmF1bHRjb2RlL3dzY29tcGlsZV9jb25maWdfZWpiLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpL2ZhdWx0Y29kZS93c2NvbXBpbGVfY29uZmlnX2VqYi54bWwKaW5kZXggZjA2NDY3NC4uYWY1ZTUzZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93c2kvZmF1bHRjb2RlL3dzY29tcGlsZV9jb25maWdfZWpiLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dzaS9mYXVsdGNvZGUvd3Njb21waWxlX2NvbmZpZ19lamIueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249ImZhdWx0Y29kZS53c2RsIgogICAgICAgcGFja2FnZU5hbWU9ImZhdWx0Y29kZWVqYiIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS94c2RhbnkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UveHNkYW55L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjhiNmEzYS4uMzIwYjgxMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS94c2RhbnkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3hzZGFueS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMiArMTUsMjIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InhzZGFueSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWJzZXJ2aWNlcy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYnNlcnZpY2VzLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3hzZGFueS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3hzZGFueS9idWlsZC54bWwKaW5kZXggYzY4NDE1YS4uMzU4N2YwMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS94c2RhbnkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UveHNkYW55L2J1aWxkLnhtbApAQCAtMzMsOSArMzMsOSBAQAogCiAKICAgPHRhcmdldCBuYW1lPSJydW4ud3Njb21waWxlIj4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+Ci0gICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4gICAgICAgIAotCTwvZXhlYz4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+CisgICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4KKyAgICA8L2V4ZWM+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iIj4KQEAgLTU4LDExICs1OCwxMSBAQAogICA8dGFyZ2V0IG5hbWU9IndzY29tcGlsZS1hcHBjbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8bWtkaXIgZGlyPSJvdXRwdXQiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICB2YWx1ZT0iLWltcG9ydCAta2VlcCAtZCBvdXRwdXQgLXMgb3V0cHV0IC1jbGFzc3BhdGggLiB3c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3hzZGFueSI+Ci0gICAgICAgPGZpbGVzZXQgZGlyPSJvdXRwdXQveHNkYW55IiAKKyAgICAgICA8ZmlsZXNldCBkaXI9Im91dHB1dC94c2RhbnkiCiAgICAgICAgIGluY2x1ZGVzPSJUZXN0U2VydmljZS5jbGFzcywgVGVzdC5jbGFzcywgU2luZ2xlV2lsZGNhcmRUeXBlLmNsYXNzLCBSZXBlYXRlZFdpbGRjYXJkVHlwZS5jbGFzcywgVGVzdDFSZXF1ZXN0VHlwZS5jbGFzcywgVGVzdDFSZXNwb25zZVR5cGUuY2xhc3MiLz4KICAgICA8L2NvcHk+CiAgICAgPGRlbGV0ZSBkaXI9Im91dHB1dCIvPgpAQCAtNzEsMTEgKzcxLDExIEBACiAgIDx0YXJnZXQgbmFtZT0id3Njb21waWxlLWVqYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxta2RpciBkaXI9Im91dHB1dCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItaW1wb3J0IC1rZWVwIC1kIG91dHB1dCAtcyBvdXRwdXQgLWNsYXNzcGF0aCAuIHdzY29tcGlsZV9jb25maWdfZWpiLnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0veHNkYW55ZWpiIj4KLSAgICAgICA8ZmlsZXNldCBkaXI9Im91dHB1dC94c2RhbnllamIiIAorICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0L3hzZGFueWVqYiIKICAgICAgICAgaW5jbHVkZXM9IlRlc3RTZXJ2aWNlLmNsYXNzLCBUZXN0LmNsYXNzLCBTaW5nbGVXaWxkY2FyZFR5cGUuY2xhc3MsIFJlcGVhdGVkV2lsZGNhcmRUeXBlLmNsYXNzLCBUZXN0MVJlcXVlc3RUeXBlLmNsYXNzLCBUZXN0MVJlc3BvbnNlVHlwZS5jbGFzcyIvPgogICAgIDwvY29weT4KICAgICA8ZGVsZXRlIGRpcj0ib3V0cHV0Ii8+CkBAIC04NCwyNCArODQsMjQgQEAKICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNvbXBpbGUiPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIgogICAgICAgZmlsZT0ieHNkYW55LndzZGwiLz4KLSAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAotCSBmaWxlPSJYc2RBbnlNYXBwaW5nX2FwcGNsaWVudC54bWwiLz4KKyAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCisgICAgIGZpbGU9IlhzZEFueU1hcHBpbmdfYXBwY2xpZW50LnhtbCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iYXBwY2xpZW50LWphci1jb21tb24iPgotICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICB2YWx1ZT0iWHNkQW55TWFwcGluZ19hcHBjbGllbnQueG1sLE1FVEEtSU5GL3dzZGwvKioseHNkYW55LyouY2xhc3MiIC8+CiAKICAgICA8L2FudGNhbGw+Ci0gICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKLQkgZmlsZT0iWHNkQW55TWFwcGluZ19lamIueG1sIi8+CisgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgorICAgICBmaWxlPSJYc2RBbnlNYXBwaW5nX2VqYi54bWwiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgdmFsdWU9IlhzZEFueU1hcHBpbmdfZWpiLnhtbCxNRVRBLUlORi93c2RsLyoqLHhzZGFueWVqYi8qLmNsYXNzIiAvPgogCiAgICAgPC9hbnRjYWxsPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIgLz4KLSAgPC90YXJnZXQ+IAorICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC0xMjEsMjkgKzEyMSwyOSBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L3hzZGFueWVqYi9Yc2RBbnlUZXN0Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iZ2VuLW1hcHBpbmctYXBwY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1nZW4gLWNwIC4gLW1hcHBpbmcgWHNkQW55TWFwcGluZ19hcHBjbGllbnQueG1sIHdzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJnZW4tbWFwcGluZy1lamIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICB2YWx1ZT0iLWdlbiAtY3AgLiAtbWFwcGluZyBYc2RBbnlNYXBwaW5nX2VqYi54bWwgd3Njb21waWxlX2NvbmZpZ19lamIueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIHRoZSBXZWJTZXJ2aWNlcyB0ZXN0KQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyB0aGUgV2ViU2VydmljZXMgdGVzdCkKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3hzZGFueS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3hzZGFueS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYjNmYWI5Ny4uZWFhYzU5NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS94c2RhbnkvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UveHNkYW55L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjcsMjUgKzI3LDI1IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLXhzZGFueSIpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMteHNkYW55SUQiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewotICAgIAl0cnkgeworICAgICAgICB0cnkgewogCiAgICAgICAgICAgIFN0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPSBhcmdzWzBdOwogCi0JICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAorICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisKICAgICAgICAgICAgIFRlc3RTZXJ2aWNlIHRlc3RTZXJ2aWNlID0KICAgICAgICAgICAgICAgICAoVGVzdFNlcnZpY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL3hzZGFueSIpOwogICAgICAgICAgICAgVGVzdCB0ZXN0ID0gdGVzdFNlcnZpY2UuZ2V0VGVzdFBvcnQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAoKFN0dWIpdGVzdCkuX3NldFByb3BlcnR5KFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKIApAQCAtNjMsMTEgKzYzLDExIEBACiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUkVUVVJOIExVQ0tZIE5VTUJFUiA9ICIgKyByZXQpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInhzZGFueWNsaWVudCBtYWluIiwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgICAgICAKLSAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInhzZGFueSBjbGllbnQgdGVzdCBmYWlsZWQiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInhzZGFueWNsaWVudCBtYWluIiwgc3RhdC5GQUlMKTsKLQl9IAorICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3hzZGFueS9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3hzZGFueS9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKaW5kZXggNWRjYTQxNy4uZjAxOGVjOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS94c2RhbnkvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UveHNkYW55L2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbApAQCAtMjcsNiArMjcsNiBAQAogICAgIDx3c2RsLWZpbGU+TUVUQS1JTkYvd3NkbC94c2Rhbnkud3NkbDwvd3NkbC1maWxlPgogICAgIDxqYXhycGMtbWFwcGluZy1maWxlPlhzZEFueU1hcHBpbmdfYXBwY2xpZW50LnhtbDwvamF4cnBjLW1hcHBpbmctZmlsZT4KICAgICA8c2VydmljZS1xbmFtZSB4bWxuczpzZXJ2aWNlbnM9InVybjp0ZXN0Ij5zZXJ2aWNlbnM6VGVzdFNlcnZpY2UKLSAgICA8L3NlcnZpY2UtcW5hbWU+ICAgICAgICAgICAgICAgCisgICAgPC9zZXJ2aWNlLXFuYW1lPgogICA8L3NlcnZpY2UtcmVmPgogPC9hcHBsaWNhdGlvbi1jbGllbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3hzZGFueS9lamIvWHNkQW55RUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3hzZGFueS9lamIvWHNkQW55RUpCLmphdmEKaW5kZXggYmU2NjdkNS4uMTA0N2M5NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS94c2RhbnkvZWpiL1hzZEFueUVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UveHNkYW55L2VqYi9Yc2RBbnlFSkIuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSB4c2RhbnllamI7CiAKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC0yOCwxNSArMjgsMTUgQEAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjOwogCiAgICAgcHVibGljIFhzZEFueUVKQigpe30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gWHNkQW55RUpCOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFhzZEFueUVKQjo6ZWpiQ3JlYXRlICEhIik7CiAgICAgfQogCi0gICAgcHVibGljIGludCB0ZXN0MShpbnQgYSwgCi0gICAgICAgICAgICAgICAgICAgICB4c2RhbnllamIuU2luZ2xlV2lsZGNhcmRUeXBlIGMsIAotICAgICAgICAgICAgICAgICAgICAgeHNkYW55ZWpiLlJlcGVhdGVkV2lsZGNhcmRUeXBlIGQpIAotICAgICAgICB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uIAorICAgIHB1YmxpYyBpbnQgdGVzdDEoaW50IGEsCisgICAgICAgICAgICAgICAgICAgICB4c2RhbnllamIuU2luZ2xlV2lsZGNhcmRUeXBlIGMsCisgICAgICAgICAgICAgICAgICAgICB4c2RhbnllamIuUmVwZWF0ZWRXaWxkY2FyZFR5cGUgZCkKKyAgICAgICAgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgTWVzc2FnZUNvbnRleHQgbXNnQ29udGV4dCA9IHNjLmdldE1lc3NhZ2VDb250ZXh0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibXNnQ29udGV4dCA9ICIgKyBtc2dDb250ZXh0KTsKQEAgLTU3LDE2ICs1NywxNiBAQAogCiAgICAgICAgIHJldHVybiBhOwogICAgIH0KLSAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQorCiAgICAgICAgIHRoaXMuc2MgPSBzYzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3hzZGFueS93c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3hzZGFueS93c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwKaW5kZXggODgxODkxZi4uYmNiOTUzYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS94c2Rhbnkvd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UveHNkYW55L3dzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJ4c2Rhbnkud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJ4c2RhbnkiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UveHNkYW55L3dzY29tcGlsZV9jb25maWdfZWpiLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UveHNkYW55L3dzY29tcGlsZV9jb25maWdfZWpiLnhtbAppbmRleCBiYmViMjliLi5jYzJiNzM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3hzZGFueS93c2NvbXBpbGVfY29uZmlnX2VqYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS94c2Rhbnkvd3Njb21waWxlX2NvbmZpZ19lamIueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249InhzZGFueS53c2RsIgogICAgICAgcGFja2FnZU5hbWU9InhzZGFueWVqYiIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvbGliL2VqYnRpbWVyX2RlcmJ5LnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2xpYi9lamJ0aW1lcl9kZXJieS5zcWwKaW5kZXggYTRhNTQ5NS4uZGU1NTU4MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvbGliL2VqYnRpbWVyX2RlcmJ5LnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9saWIvZWpidGltZXJfZGVyYnkuc3FsCkBAIC0yLDggKzIsOCBAQAogCiBjcmVhdGUgdGFibGUgRUpCX19USU1FUl9fVEJMICgKIENSRUFUSU9OVElNRVJBVyBCSUdJTlQgTk9UIE5VTEwsCi1CTE9CICBCTE9CKDJHKSwgCi1USU1FUklEICAgICAgICAgICAgICBWQVJDSEFSKDI1NSkgTk9UIE5VTEwsIAorQkxPQiAgQkxPQigyRyksCitUSU1FUklEICAgICAgICAgICAgICBWQVJDSEFSKDI1NSkgTk9UIE5VTEwsCiBDT05UQUlORVJJRCAgICAgICAgICBCSUdJTlQgICAgICAgTk9UIE5VTEwsCiBPV05FUklEICAgICAgICAgICAgICBWQVJDSEFSKDI1NSksCiBTVEFURSAgICAgICAgICAgICAgICBJTlRFR0VSICAgICAgTk9UIE5VTEwsCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvbGliL2NjaWJsYWNrYm94LXR4L2NvbS9zdW4vY29ubmVjdG9yL2NjaWJsYWNrYm94L0NjaUNvbm5lY3Rpb25FdmVudExpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvbGliL2NjaWJsYWNrYm94LXR4L2NvbS9zdW4vY29ubmVjdG9yL2NjaWJsYWNrYm94L0NjaUNvbm5lY3Rpb25FdmVudExpc3RlbmVyLmphdmEKaW5kZXggNTQ5NTVmNS4uNDFmM2M5NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2xpYi9jY2libGFja2JveC10eC9jb20vc3VuL2Nvbm5lY3Rvci9jY2libGFja2JveC9DY2lDb25uZWN0aW9uRXZlbnRMaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9saWIvY2NpYmxhY2tib3gtdHgvY29tL3N1bi9jb25uZWN0b3IvY2NpYmxhY2tib3gvQ2NpQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogLyoqCiAgKiBUaGUgY29ubmVjdG9yIGFyY2hpdGVjdHVyZSBwcm92aWRlcyBhbiBldmVudCBjYWxsYmFjayBtZWNoYW5pc20gdGhhdAogICogZW5hYmxlcyBhbiBhcHBsaWNhdGlvbiBzZXJ2ZXIgdG8gcmVjZWl2ZSBub3RpZmljYXRpb25zIGZyb20gYQotICogTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2UuIFRoZSBBcHAgc2VydmVyIGltcGxlbWVudHMgdGhpcyBjbGFzcyBpbiBvcmRlciB0byAKKyAqIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLiBUaGUgQXBwIHNlcnZlciBpbXBsZW1lbnRzIHRoaXMgY2xhc3MgaW4gb3JkZXIgdG8KICAqIGxpc3RlbiB0byBldmVudCBub3RpZmljYXRpb25zIGZyb20gTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2UuCiAgKgogICogQGF1dGhvciBTaGVldGFsIFZhcnRhawpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2xpYi9jY2libGFja2JveC10eC9jb20vc3VuL2Nvbm5lY3Rvci9jY2libGFja2JveC9DY2lDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2xpYi9jY2libGFja2JveC10eC9jb20vc3VuL2Nvbm5lY3Rvci9jY2libGFja2JveC9DY2lDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IGZhNDE4NDkuLjM4ZTgzNzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9saWIvY2NpYmxhY2tib3gtdHgvY29tL3N1bi9jb25uZWN0b3IvY2NpYmxhY2tib3gvQ2NpQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvbGliL2NjaWJsYWNrYm94LXR4L2NvbS9zdW4vY29ubmVjdG9yL2NjaWJsYWNrYm94L0NjaUNvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIGltcG9ydCBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk7CiAKIC8qKgotICogVGhpcyBpbXBsZW1lbnRhdGlvbiBjbGFzcyBwcm92aWRlcyBwcm92aWRlcyBhbiBpbnRlZmFjZSBmb3IgZ2V0dGluZyAKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gY2xhc3MgcHJvdmlkZXMgcHJvdmlkZXMgYW4gaW50ZWZhY2UgZm9yIGdldHRpbmcKICAqIGNvbm5lY3Rpb24gdG8gYW4gRUlTIGluc3RhbmNlLgogICogQGF1dGhvciBTaGVldGFsIFZhcnRhawogICoKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9saWIvY2NpYmxhY2tib3gtdHgvY29tL3N1bi9jb25uZWN0b3IvY2NpYmxhY2tib3gvQ2NpQ29ubmVjdGlvbk1hbmFnZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9saWIvY2NpYmxhY2tib3gtdHgvY29tL3N1bi9jb25uZWN0b3IvY2NpYmxhY2tib3gvQ2NpQ29ubmVjdGlvbk1hbmFnZXIuamF2YQppbmRleCAyMDZmYzJjLi4wMjVjMmM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvbGliL2NjaWJsYWNrYm94LXR4L2NvbS9zdW4vY29ubmVjdG9yL2NjaWJsYWNrYm94L0NjaUNvbm5lY3Rpb25NYW5hZ2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2xpYi9jY2libGFja2JveC10eC9jb20vc3VuL2Nvbm5lY3Rvci9jY2libGFja2JveC9DY2lDb25uZWN0aW9uTWFuYWdlci5qYXZhCkBAIC0yNyw5ICsyNyw5IEBACiAvKioKICAqIFRoZSBkZWZhdWx0IENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudGF0aW9uIGZvciB0aGUKICAqIG5vbi1tYW5hZ2VkIHNjZW5hcmlvCi0gKiBUaGlzIHByb3ZpZWRzIGEgaG9vayBmb3IgYSByZXNvdXJjZSBhZGFwdGVyIHRvIHBhc3MgYSBjb25uZWN0aW9uIAorICogVGhpcyBwcm92aWVkcyBhIGhvb2sgZm9yIGEgcmVzb3VyY2UgYWRhcHRlciB0byBwYXNzIGEgY29ubmVjdGlvbgogICogcmVxdWVzdCB0byBhbiBhcHBsaWNhdGlvbiBzZXJ2ZXIuCi0gKiAKKyAqCiAgKiBAYXV0aG9yIFNoZWV0YWwgVmFydGFrCiAgKi8KIHB1YmxpYyBjbGFzcyBDY2lDb25uZWN0aW9uTWFuYWdlciBpbXBsZW1lbnRzIENvbm5lY3Rpb25NYW5hZ2VyLCBTZXJpYWxpemFibGUgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2xpYi9jY2libGFja2JveC10eC9jb20vc3VuL2Nvbm5lY3Rvci9jY2libGFja2JveC9DY2lDb25uZWN0aW9uUmVxdWVzdEluZm8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9saWIvY2NpYmxhY2tib3gtdHgvY29tL3N1bi9jb25uZWN0b3IvY2NpYmxhY2tib3gvQ2NpQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEKaW5kZXggZDdkNmY5OS4uZWZhNTc2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2xpYi9jY2libGFja2JveC10eC9jb20vc3VuL2Nvbm5lY3Rvci9jY2libGFja2JveC9DY2lDb25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvbGliL2NjaWJsYWNrYm94LXR4L2NvbS9zdW4vY29ubmVjdG9yL2NjaWJsYWNrYm94L0NjaUNvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiAKIC8qKgogICogVGhpcyBpbXBsZW1lbnRhdGlvbiBjbGFzcyBlbmFibGVzIGEgcmVzb3VyY2UgYWRhcHRlciB0byBwYXNzIGl0cyBvd24KLSAqIHJlcXVlc3Qtc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUgYWNyb3NzIGNvbm5lY3Rpb24gcmVxdWVzdCBmbG93IAorICogcmVxdWVzdC1zcGVjaWZpYyBkYXRhIHN0cnVjdHVyZSBhY3Jvc3MgY29ubmVjdGlvbiByZXF1ZXN0IGZsb3cKICAqIEBhdXRob3IgU2hlZXRhbCBWYXJ0YWsKICAqLwogcHVibGljIGNsYXNzIENjaUNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbXBsZW1lbnRzIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvbGliL2NjaWJsYWNrYm94LXR4L2NvbS9zdW4vY29ubmVjdG9yL2NjaWJsYWNrYm94L0NjaUNvbm5lY3Rpb25TcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvbGliL2NjaWJsYWNrYm94LXR4L2NvbS9zdW4vY29ubmVjdG9yL2NjaWJsYWNrYm94L0NjaUNvbm5lY3Rpb25TcGVjLmphdmEKaW5kZXggODk2NzhhOS4uOGYzYWRkYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2xpYi9jY2libGFja2JveC10eC9jb20vc3VuL2Nvbm5lY3Rvci9jY2libGFja2JveC9DY2lDb25uZWN0aW9uU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9saWIvY2NpYmxhY2tib3gtdHgvY29tL3N1bi9jb25uZWN0b3IvY2NpYmxhY2tib3gvQ2NpQ29ubmVjdGlvblNwZWMuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiAvKioKICAqIFRoaXMgaW1wbGVtZW50YXRpb24gY2xhc3MgaXMgdXNlZCBieSBhbiBhcHBsaWNhdGlvbiBjb21wb25lbnQgdG8gcGFzcwotICogY29ubmVjdGlvbi1zcGVjaWZpYyBpbmZvL3Byb3BlcnRpZXMgdG8gdGhlIGdldENvbm5lY3Rpb24gbWV0aG9kIGluIAorICogY29ubmVjdGlvbi1zcGVjaWZpYyBpbmZvL3Byb3BlcnRpZXMgdG8gdGhlIGdldENvbm5lY3Rpb24gbWV0aG9kIGluCiAgKiBDY2lDb25uZWN0aW9uRmFjdG9yeSBjbGFzcwogICoKICAqIEBhdXRob3IgU2hlZXRhbCBWYXJ0YWsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9saWIvY2NpYmxhY2tib3gtdHgvY29tL3N1bi9jb25uZWN0b3IvY2NpYmxhY2tib3gvQ2NpSW50ZXJhY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9saWIvY2NpYmxhY2tib3gtdHgvY29tL3N1bi9jb25uZWN0b3IvY2NpYmxhY2tib3gvQ2NpSW50ZXJhY3Rpb24uamF2YQppbmRleCAwMDc3ZjYzLi44ZTRkNGE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvbGliL2NjaWJsYWNrYm94LXR4L2NvbS9zdW4vY29ubmVjdG9yL2NjaWJsYWNrYm94L0NjaUludGVyYWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2xpYi9jY2libGFja2JveC10eC9jb20vc3VuL2Nvbm5lY3Rvci9jY2libGFja2JveC9DY2lJbnRlcmFjdGlvbi5qYXZhCkBAIC0yMTIsNyArMjEyLDcgQEAKICAgICAgIH0KICAgICAgIGNzdG10LmNsb3NlKCk7CiAgICAgICByZXR1cm4gb1JlYzsKLSAgICAgIC8vICBjb25uLmNsb3NlKCk7IAorICAgICAgLy8gIGNvbm4uY2xvc2UoKTsKICAgICB9CiAgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBleCkgewogICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvbGliL2NjaWJsYWNrYm94LXR4L2NvbS9zdW4vY29ubmVjdG9yL2NjaWJsYWNrYm94L0NjaUxvY2FsVHJhbnNhY3Rpb25JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvbGliL2NjaWJsYWNrYm94LXR4L2NvbS9zdW4vY29ubmVjdG9yL2NjaWJsYWNrYm94L0NjaUxvY2FsVHJhbnNhY3Rpb25JbXBsLmphdmEKaW5kZXggNWE5YTBkNy4uMzY4MGEyOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2xpYi9jY2libGFja2JveC10eC9jb20vc3VuL2Nvbm5lY3Rvci9jY2libGFja2JveC9DY2lMb2NhbFRyYW5zYWN0aW9uSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9saWIvY2NpYmxhY2tib3gtdHgvY29tL3N1bi9jb25uZWN0b3IvY2NpYmxhY2tib3gvQ2NpTG9jYWxUcmFuc2FjdGlvbkltcGwuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBpbXBvcnQgamFrYXJ0YS5yZXNvdXJjZS5SZXNvdXJjZUV4Y2VwdGlvbjsKIAotLyoqVGhpcyBpbXBsZW1lbnRhdGlvbiBjbGFzcyBkZWZpbmVzIGEgbG9jYWwgdHJhbnNhY3Rpb24gZGVtYXJjYXRpb24gCisvKipUaGlzIGltcGxlbWVudGF0aW9uIGNsYXNzIGRlZmluZXMgYSBsb2NhbCB0cmFuc2FjdGlvbiBkZW1hcmNhdGlvbgogICogYXQgdGhlIGFwcGxpY2F0aW9uIGxldmVsLgogICogQGF1dGhvciBTaGVldGFsIFZhcnRhawogICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvbGliL2NjaWJsYWNrYm94LXR4L2NvbS9zdW4vY29ubmVjdG9yL2NjaWJsYWNrYm94L0NjaUxvY2FsVHhNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9saWIvY2NpYmxhY2tib3gtdHgvY29tL3N1bi9jb25uZWN0b3IvY2NpYmxhY2tib3gvQ2NpTG9jYWxUeE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IGUyMzY1NDIuLjkxZTdhZTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9saWIvY2NpYmxhY2tib3gtdHgvY29tL3N1bi9jb25uZWN0b3IvY2NpYmxhY2tib3gvQ2NpTG9jYWxUeE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9saWIvY2NpYmxhY2tib3gtdHgvY29tL3N1bi9jb25uZWN0b3IvY2NpYmxhY2tib3gvQ2NpTG9jYWxUeE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0zNCw3ICszNCw3IEBACiBpbXBvcnQgamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0OwogCiAvKioKLSAqIAorICoKICAqIEBhdXRob3IgU2hlZXRhbCBWYXJ0YWsKICAqLwogcHVibGljIGNsYXNzIENjaUxvY2FsVHhNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnksIFNlcmlhbGl6YWJsZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvbGliL2NjaWJsYWNrYm94LXR4L2NvbS9zdW4vY29ubmVjdG9yL2NjaWJsYWNrYm94L0NjaU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2xpYi9jY2libGFja2JveC10eC9jb20vc3VuL2Nvbm5lY3Rvci9jY2libGFja2JveC9DY2lNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCBhNWNmYzZjLi5lYWZiMzIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvbGliL2NjaWJsYWNrYm94LXR4L2NvbS9zdW4vY29ubmVjdG9yL2NjaWJsYWNrYm94L0NjaU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9saWIvY2NpYmxhY2tib3gtdHgvY29tL3N1bi9jb25uZWN0b3IvY2NpYmxhY2tib3gvQ2NpTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTM4LDkgKzM4LDkgQEAKIAogCiAvKioKLSAqIEFuIG9iamVjdCBvZiB0aGlzIGNsYXNzIGlzIGEgZmFjdG9yeSBvZiBib3RoIE1hbmFnZWRDb25uZWN0aW9uIGFuZCAKKyAqIEFuIG9iamVjdCBvZiB0aGlzIGNsYXNzIGlzIGEgZmFjdG9yeSBvZiBib3RoIE1hbmFnZWRDb25uZWN0aW9uIGFuZAogICogY29ubmVjdGlvbiBmYWN0b3J5IGluc3RhbmNlcy4KLSAqIFRoaXMgY2xhc3Mgc3VwcG9ydHMgY29ubmVjdGlvbiBwb29saW5nIGJ5IGRlZmluaW5nIG1ldGhvZHMgZm9yIAorICogVGhpcyBjbGFzcyBzdXBwb3J0cyBjb25uZWN0aW9uIHBvb2xpbmcgYnkgZGVmaW5pbmcgbWV0aG9kcyBmb3IKICAqIG1hdGNoaW5nIGFuZCBjcmVhdGluZyBjb25uZWN0aW9ucy4KICAqIEBhdXRob3IgU2hlZXRhbCBWYXJ0YWsKICAqLwpAQCAtNDgsNyArNDgsNyBAQAogCiAgIHByaXZhdGUgU3RyaW5nIFhBRGF0YVNvdXJjZU5hbWU7CiAgIHByaXZhdGUgU3RyaW5nIHVybDsKLSAgCisKICAgdHJhbnNpZW50IHByaXZhdGUgQ29udGV4dCBpYzsKIAogICBwdWJsaWMgQ2NpTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkgewpAQCAtMTM2LDExICsxMzYsMTEgQEAKICAgcHVibGljIHZvaWQgc2V0WEFEYXRhU291cmNlTmFtZShTdHJpbmcgWEFEYXRhU291cmNlTmFtZSkgewogICAgIHRoaXMuWEFEYXRhU291cmNlTmFtZSA9IFhBRGF0YVNvdXJjZU5hbWU7CiAgIH0KLSAgCisKICAgcHVibGljIFN0cmluZyBnZXRDb25uZWN0aW9uVVJMKCl7CiAgICAgICByZXR1cm4gdXJsOwogICB9Ci0gIAorCiAgIHB1YmxpYyB2b2lkIHNldENvbm5lY3Rpb25VUkwoU3RyaW5nIGNvbm5lY3Rpb25VUkwpewogICAgICAgdGhpcy51cmwgPSBjb25uZWN0aW9uVVJMOwogICB9CkBAIC0xNTksMTIgKzE1OSwxMiBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJjYXRjaCBzcWwgZXhjZXB0aW9uIHdoaWxlIGV4ZSBnZXRYQURhdGFTb3VyY2UoKSIsIGV4KTsKICAgICAgICAgfQogICB9Ci0gIAorCiAgICBwcml2YXRlIFhBRGF0YVNvdXJjZSBnZXREZXJieVhBRGF0YVNvdXJjZSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICBTdHJpbmcgdXJsdHJpbSA9IHVybC50cmltKCkuc3Vic3RyaW5nKHVybC5pbmRleE9mKCIvLyIpICsgMik7CiAgICAgICBTdHJpbmcgaG9zdCA9IHVybHRyaW0uc3Vic3RyaW5nKDAsIHVybHRyaW0uaW5kZXhPZigiOiIpKTsKICAgICAgIFN0cmluZyBwb3J0ID0gdXJsdHJpbS5zdWJzdHJpbmcodXJsdHJpbS5pbmRleE9mKCI6IikgKyAxLCB1cmx0cmltLmluZGV4T2YoIi8iKSk7Ci0gLy8gICAgIFN0cmluZyBkYm5hbWUgPSB1cmx0cmltLnN1YnN0cmluZyh1cmx0cmltLmluZGV4T2YoIi8iKSsxKTsgIAorIC8vICAgICBTdHJpbmcgZGJuYW1lID0gdXJsdHJpbS5zdWJzdHJpbmcodXJsdHJpbS5pbmRleE9mKCIvIikrMSk7CiAgICAgICBTdHJpbmcgZGJuYW1lID0gWEFEYXRhU291cmNlTmFtZSArICI7Y3JlYXRlPXRydWU7YXV0b2NvbW1pdD1mYWxzZSI7CiAgICAgICBMb2dnZXIuaW5mbygiZ2V0RGVyYnlYQURhdGFTb3VyY2UoKSBmb3IgaG9zdDoiICsgaG9zdCArICI7cG9ydDoiICsgcG9ydCArICI7ZGJuYW1lOiIgKyBkYm5hbWUpOwogCkBAIC0xNzUsMzAgKzE3NSwzMCBAQAogCiAgICAgICByZXR1cm4gKFhBRGF0YVNvdXJjZSkgZHM7CiAgIH0KLSAgCisKICAgIHByaXZhdGUgWEFEYXRhU291cmNlIGdldE9yYVhBRGF0YVNvdXJjZSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICAgIE9iamVjdCBkcyA9IGxvYWRBbmRJbnN0YW50aWF0ZUNsYXNzKCJvcmFjbGUuamRiYy54YS5jbGllbnQuT3JhY2xlWEFEYXRhU291cmNlIik7CiAgICAgICAgIGludm9rZU1ldGhvZChkcywgInNldFVSTCIsIG5ldyBPYmplY3RbXXt1cmx9KTsKICAgICAgICAgcmV0dXJuIChYQURhdGFTb3VyY2UpZHM7CiAgIH0KLSAgIAorCiAgICBwcml2YXRlIE9iamVjdCBsb2FkQW5kSW5zdGFudGlhdGVDbGFzcyhTdHJpbmcgY2xhc3NOYW1lKXsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIGNscyA9IENsYXNzLmZvck5hbWUoY2xhc3NOYW1lKTsKICAgICAgICAgICAgT2JqZWN0IG9iaiA9IGNscy5uZXdJbnN0YW5jZSgpOwogICAgICAgICAgICBMb2dnZXIuaW5mbygiSkRCQyBEcml2ZXIgTG9hZGVkIGFuZCBpbnN0YW50aWF0ZWQgIiArIGNsYXNzTmFtZSArICIuIik7CiAgICAgICAgICAgIHJldHVybiBvYmo7Ci0gICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEluc3RhbnRpYXRpb25FeGNlcHRpb24gfCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBMb2dnZXIuaW5mbygiY2F0Y2ggZXhjZXB0aW9uIHdoaWxlIGluc3RhbnRpYXRlIGNsYXNzIHdpdGggbm9uLXBhcmFtIGNvbnN0cnVjdG9yOiAiK2NsYXNzTmFtZSwgZXgpOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBMb2dnZXIuaW5mbygiY291bGQgbm90IGZpbmQgY2xhc3M6ICIrY2xhc3NOYW1lLCBleCk7Ci0gICAgICAgIH0gICAKLSAgICAgICAgCisgICAgICAgIH0KKwogICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KLSAgIAorCiAgICBwcml2YXRlIE9iamVjdCBpbnZva2VNZXRob2QoT2JqZWN0IG9iaiwgU3RyaW5nIG1ldGhvZE5hbWUsIE9iamVjdFtdIGFyZ3MpewogICAgICAgIE1ldGhvZCBtZXRob2RUb0ludm9rZSA9IG51bGw7CiAgICAgICAgT2JqZWN0IHJldCA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvbGliL2NjaWJsYWNrYm94LXR4L2NvbS9zdW4vY29ubmVjdG9yL2NjaWJsYWNrYm94L0NjaU1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGFJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvbGliL2NjaWJsYWNrYm94LXR4L2NvbS9zdW4vY29ubmVjdG9yL2NjaWJsYWNrYm94L0NjaU1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGFJbXBsLmphdmEKaW5kZXggMGQ1NGI5OC4uMDYxYmQ1NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2xpYi9jY2libGFja2JveC10eC9jb20vc3VuL2Nvbm5lY3Rvci9jY2libGFja2JveC9DY2lNYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9saWIvY2NpYmxhY2tib3gtdHgvY29tL3N1bi9jb25uZWN0b3IvY2NpYmxhY2tib3gvQ2NpTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YUltcGwuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogaW1wb3J0IGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE7CiAKIC8qKgotICogVGhpcyBjbGFzcyBnaXZlcyBpbmZvIGFib3V0IGEgTWFuYWdlZENvbm5lY3Rpb24gYW5kIHRoZSBjb25uZWN0ZWQgRUlTIAorICogVGhpcyBjbGFzcyBnaXZlcyBpbmZvIGFib3V0IGEgTWFuYWdlZENvbm5lY3Rpb24gYW5kIHRoZSBjb25uZWN0ZWQgRUlTCiAgKiBpbnN0YW5jZS4KICAqIEBhdXRob3IgU2hlZXRhbCBWYXJ0YWsKICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2xpYi9jY2libGFja2JveC10eC9jb20vc3VuL2Nvbm5lY3Rvci9jY2libGFja2JveC9DY2lSZXNvdXJjZUFkYXB0ZXJNZXRhRGF0YS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2xpYi9jY2libGFja2JveC10eC9jb20vc3VuL2Nvbm5lY3Rvci9jY2libGFja2JveC9DY2lSZXNvdXJjZUFkYXB0ZXJNZXRhRGF0YS5qYXZhCmluZGV4IGUwMDY4MmYuLjdhZWFlNzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9saWIvY2NpYmxhY2tib3gtdHgvY29tL3N1bi9jb25uZWN0b3IvY2NpYmxhY2tib3gvQ2NpUmVzb3VyY2VBZGFwdGVyTWV0YURhdGEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvbGliL2NjaWJsYWNrYm94LXR4L2NvbS9zdW4vY29ubmVjdG9yL2NjaWJsYWNrYm94L0NjaVJlc291cmNlQWRhcHRlck1ldGFEYXRhLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBqYWthcnRhLnJlc291cmNlLmNjaS5SZXNvdXJjZUFkYXB0ZXJNZXRhRGF0YTsKIAogLyoqCi0gKiB0aGlzIGltcGxlbWVudGF0aW9uIGNsYXNzIHByb3ZpZGVzIGluZm8gYWJvdXQgdGhlIGNhcGFiaWxpdGllcyBvZiBhIAorICogdGhpcyBpbXBsZW1lbnRhdGlvbiBjbGFzcyBwcm92aWRlcyBpbmZvIGFib3V0IHRoZSBjYXBhYmlsaXRpZXMgb2YgYQogICogcmVzb3VyY2UgYWRhcHRlciBpbXBsZW1lbnRhdGlvbi4KICAqIEBhdXRob3IgU2hlZXRhbCBWYXJ0YWsKICAqLwpAQCAtODgsMTIgKzg4LDEyIEBACiAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzRXhlY3V0ZVdpdGhJbnB1dEFuZE91dHB1dFJlY29yZCgpIHsKIAogICAgIC8qIE1ldGhvZCBtZXRob2Q7Ci0gICAgICBDbGFzcyBpbnRlcmFjdGlvbkNsYXNzID0gCisgICAgICBDbGFzcyBpbnRlcmFjdGlvbkNsYXNzID0KICAgICBDbGFzcy5mb3JOYW1lKCJqYWthcnRhLnJlc291cmNlLmNjaS5JbnRlcmFjdGlvbiIpOwogICAgIHRyeSB7Ci0gICAgICAgICAgbWV0aG9kID0gCisgICAgICAgICAgbWV0aG9kID0KICAgICAgIGludGVyYWN0aW9uQ2xhc3MuZ2V0RGVjbGFyZWRNZXRob2QoSW50ZXJhY3Rpb25TcGVjLFJlY29yZCxSZWNvcmQpOwotICAgIH1jYXRjaChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSkgeyAKKyAgICB9Y2F0Y2goTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUpIHsKICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmKG1ldGhvZCAhPSBudWxsKSB7CkBAIC0xMDYsMTIgKzEwNiwxMiBAQAogCiAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzRXhlY3V0ZVdpdGhJbnB1dFJlY29yZE9ubHkoKSB7CiAgICAgLyogIE1ldGhvZCBtZXRob2Q7Ci0gICAgICBDbGFzcyBpbnRlcmFjdGlvbkNsYXNzID0gCisgICAgICBDbGFzcyBpbnRlcmFjdGlvbkNsYXNzID0KICAgICBDbGFzcy5mb3JOYW1lKCJqYWthcnRhLnJlc291cmNlLmNjaS5JbnRlcmFjdGlvbiIpOwogICAgIHRyeSB7CiAgICAgICAgICAgbWV0aG9kID0KICAgICAgIGludGVyYWN0aW9uQ2xhc3MuZ2V0RGVjbGFyZWRNZXRob2QoSW50ZXJhY3Rpb25TcGVjLFJlY29yZCk7Ci0gICAgfWNhdGNoKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlKSB7IAorICAgIH1jYXRjaChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSkgewogICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYobWV0aG9kICE9IG51bGwpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9saWIvY2NpYmxhY2tib3gtdHgvY29tL3N1bi9jb25uZWN0b3IvY2NpYmxhY2tib3gvTWFwcGluZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2xpYi9jY2libGFja2JveC10eC9jb20vc3VuL2Nvbm5lY3Rvci9jY2libGFja2JveC9NYXBwaW5nLmphdmEKaW5kZXggMmRhNjBmMi4uNmZjYjQ3YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2xpYi9jY2libGFja2JveC10eC9jb20vc3VuL2Nvbm5lY3Rvci9jY2libGFja2JveC9NYXBwaW5nLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2xpYi9jY2libGFja2JveC10eC9jb20vc3VuL2Nvbm5lY3Rvci9jY2libGFja2JveC9NYXBwaW5nLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwogCiAvKiogTWFwcGluZyBiZXR3ZWVuIEpEQkMgVHlwZSBjb2RlcyBhbmQgdGhlIFJlc3VsdFNldC5nZXRYWFggbWV0aG9kcwotICogVGhpcyBjbGFzcyBpcyB1c2VkIGJ5IHRoZSBDY2lJbnRlcmFjdGlvblNwZWMuZXhlYygpIHRvIGRldGVybWluZSAKKyAqIFRoaXMgY2xhc3MgaXMgdXNlZCBieSB0aGUgQ2NpSW50ZXJhY3Rpb25TcGVjLmV4ZWMoKSB0byBkZXRlcm1pbmUKICAqIHdoYXQgZ2V0WFhYIG1ldGhvZCB0byB1c2UgZm9yIGEgcGFydGljdWxhciB0eXBlIG9mIHBhcmFtZXRlci4KICAqIEBhdXRob3IgU2hlZXRhbCBWYXJ0YWsKICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2xpYi9jY2libGFja2JveC10eC9jb20vc3VuL2Nvbm5lY3Rvci9jY2libGFja2JveC9VdGlsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvbGliL2NjaWJsYWNrYm94LXR4L2NvbS9zdW4vY29ubmVjdG9yL2NjaWJsYWNrYm94L1V0aWwuamF2YQppbmRleCA5MDY1YjBlLi5jNTJkNTAyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvbGliL2NjaWJsYWNrYm94LXR4L2NvbS9zdW4vY29ubmVjdG9yL2NjaWJsYWNrYm94L1V0aWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvbGliL2NjaWJsYWNrYm94LXR4L2NvbS9zdW4vY29ubmVjdG9yL2NjaWJsYWNrYm94L1V0aWwuamF2YQpAQCAtMjgsOCArMjgsOCBAQAogaW1wb3J0IGpha2FydGEucmVzb3VyY2Uuc3BpLnNlY3VyaXR5LlBhc3N3b3JkQ3JlZGVudGlhbDsKIGltcG9ydCBqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Q7CiAKLS8qKiAKLSAqIFRoaXMgaXMgYSB1dGlsaXR5IGNsYXNzLiAKKy8qKgorICogVGhpcyBpcyBhIHV0aWxpdHkgY2xhc3MuCiAgKi8KIAogcHVibGljIGNsYXNzIFV0aWwgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9maWxlZGlmZi9EaWZmLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL2ZpbGVkaWZmL0RpZmYuamF2YQppbmRleCAwZGM5OTI5Li4yOTcwZTRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL2ZpbGVkaWZmL0RpZmYuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL2ZpbGVkaWZmL0RpZmYuamF2YQpAQCAtMjUsMzUgKzI1LDM1IEBACiAvKiogVGhpcyBpcyB0aGUgaW5mbyBrZXB0IHBlci1maWxlLiAgICAgKi8KIGNsYXNzIGZpbGVJbmZvIHsKIAotCXN0YXRpYyBmaW5hbCBpbnQgTUFYTElORUNPVU5UID0gMjAwMDA7CisgICAgc3RhdGljIGZpbmFsIGludCBNQVhMSU5FQ09VTlQgPSAyMDAwMDsKIAotCURhdGFJbnB1dFN0cmVhbSBmaWxlOwkvKiBGaWxlIGhhbmRsZSB0aGF0IGlzIG9wZW4gZm9yIHJlYWQuICAqLwotCXB1YmxpYyBpbnQgbWF4TGluZTsJLyogQWZ0ZXIgaW5wdXQgZG9uZSwgIyBsaW5lcyBpbiBmaWxlLiAgKi8KLQlub2RlIHN5bWJvbFtdOyAvKiBUaGUgc3ltdGFiIGhhbmRsZSBvZiBlYWNoIGxpbmUuICovCi0JaW50IG90aGVyW107IC8qIE1hcCBvZiBsaW5lIyB0byBsaW5lIyBpbiBvdGhlciBmaWxlICovCisgICAgRGF0YUlucHV0U3RyZWFtIGZpbGU7ICAgIC8qIEZpbGUgaGFuZGxlIHRoYXQgaXMgb3BlbiBmb3IgcmVhZC4gICovCisgICAgcHVibGljIGludCBtYXhMaW5lOyAgICAvKiBBZnRlciBpbnB1dCBkb25lLCAjIGxpbmVzIGluIGZpbGUuICAqLworICAgIG5vZGUgc3ltYm9sW107IC8qIFRoZSBzeW10YWIgaGFuZGxlIG9mIGVhY2ggbGluZS4gKi8KKyAgICBpbnQgb3RoZXJbXTsgLyogTWFwIG9mIGxpbmUjIHRvIGxpbmUjIGluIG90aGVyIGZpbGUgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKCAtMSBtZWFucyBkb24ndC1rbm93ICkuICAgICAgICAgICAgKi8KLQkJCQkvKiBBbGxvY2F0ZWQgQUZURVIgdGhlIGxpbmVzIGFyZSByZWFkLiAqLworICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlZCBBRlRFUiB0aGUgbGluZXMgYXJlIHJlYWQuICovCiAKLQkvKioKLQkgKiBOb3JtYWwgY29uc3RydWN0b3Igd2l0aCBvbmUgZmlsZW5hbWU7IGZpbGUgaXMgb3BlbmVkIGFuZCBzYXZlZC4KLQkgKi8KLQlmaWxlSW5mbyggU3RyaW5nIGZpbGVuYW1lICkgewotCQlzeW1ib2wgPSBuZXcgbm9kZSBbIE1BWExJTkVDT1VOVCsyIF07Ci0JCW90aGVyICA9IG51bGw7CQkvLyBhbGxvY2F0ZWQgbGF0ZXIhCi0JCXRyeSB7Ci0JCQlmaWxlID0gbmV3IERhdGFJbnB1dFN0cmVhbSgKLQkJCQluZXcgRmlsZUlucHV0U3RyZWFtKCBmaWxlbmFtZSkpOwotCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkgIFN5c3RlbS5lcnIucHJpbnRsbigiRGlmZiBjYW4ndCByZWFkIGZpbGUgIiArCi0JCQkJZmlsZW5hbWUgKTsKLQkJCSAgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciBFeGNlcHRpb24gd2FzOiIgKyBlICk7Ci0JCQkgIFN5c3RlbS5leGl0KDEpOwotCQl9Ci0JfQotCS8vIFRoaXMgaXMgZG9uZSBsYXRlLCB0byBiZSBzYW1lIHNpemUgYXMgIyBsaW5lcyBpbiBpbnB1dCBmaWxlLgotCXZvaWQgYWxsb2MoKSB7Ci0JCW90aGVyICA9IG5ldyBpbnRbc3ltYm9sLmxlbmd0aCArIDJdOwotCX0KKyAgICAvKioKKyAgICAgKiBOb3JtYWwgY29uc3RydWN0b3Igd2l0aCBvbmUgZmlsZW5hbWU7IGZpbGUgaXMgb3BlbmVkIGFuZCBzYXZlZC4KKyAgICAgKi8KKyAgICBmaWxlSW5mbyggU3RyaW5nIGZpbGVuYW1lICkgeworICAgICAgICBzeW1ib2wgPSBuZXcgbm9kZSBbIE1BWExJTkVDT1VOVCsyIF07CisgICAgICAgIG90aGVyICA9IG51bGw7ICAgICAgICAvLyBhbGxvY2F0ZWQgbGF0ZXIhCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaWxlID0gbmV3IERhdGFJbnB1dFN0cmVhbSgKKyAgICAgICAgICAgICAgICBuZXcgRmlsZUlucHV0U3RyZWFtKCBmaWxlbmFtZSkpOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRGlmZiBjYW4ndCByZWFkIGZpbGUgIiArCisgICAgICAgICAgICAgICAgZmlsZW5hbWUgKTsKKyAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciBFeGNlcHRpb24gd2FzOiIgKyBlICk7CisgICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOworICAgICAgICB9CisgICAgfQorICAgIC8vIFRoaXMgaXMgZG9uZSBsYXRlLCB0byBiZSBzYW1lIHNpemUgYXMgIyBsaW5lcyBpbiBpbnB1dCBmaWxlLgorICAgIHZvaWQgYWxsb2MoKSB7CisgICAgICAgIG90aGVyICA9IG5ldyBpbnRbc3ltYm9sLmxlbmd0aCArIDJdOworICAgIH0KIH07CiAKIC8qKgpAQCAtOTUsNDcxICs5NSw0NzEgQEAKICAqLwogcHVibGljIGNsYXNzIERpZmYgewogCi0JLyoqIGJsb2NrIGxlbiA+IGFueSBwb3NzaWJsZSByZWFsIGJsb2NrIGxlbiAqLwotCWZpbmFsIGludCBVTlJFQUw9SW50ZWdlci5NQVhfVkFMVUU7CisgICAgLyoqIGJsb2NrIGxlbiA+IGFueSBwb3NzaWJsZSByZWFsIGJsb2NrIGxlbiAqLworICAgIGZpbmFsIGludCBVTlJFQUw9SW50ZWdlci5NQVhfVkFMVUU7CiAKICAgICAgICAvLyBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD1uZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CiAKLQkvKiogS2VlcHMgdHJhY2sgb2YgaW5mb3JtYXRpb24gYWJvdXQgZmlsZTEgYW5kIGZpbGUyICovCi0JZmlsZUluZm8gb2xkaW5mbywgbmV3aW5mbzsKKyAgICAvKiogS2VlcHMgdHJhY2sgb2YgaW5mb3JtYXRpb24gYWJvdXQgZmlsZTEgYW5kIGZpbGUyICovCisgICAgZmlsZUluZm8gb2xkaW5mbywgbmV3aW5mbzsKIAotCS8qKiBibG9ja2xlbiBpcyB0aGUgaW5mbyBhYm91dCBmb3VuZCBibG9ja3MuIEl0IHdpbGwgYmUgc2V0IHRvIDAsIGV4Y2VwdAotCSAqIGF0IHRoZSBsaW5lI3Mgd2hlcmUgYmxvY2tzIHN0YXJ0IGluIHRoZSBvbGQgZmlsZS4gQXQgdGhlc2UgcGxhY2VzIGl0Ci0JICogd2lsbCBiZSBzZXQgdG8gdGhlICMgb2YgbGluZXMgaW4gdGhlIGJsb2NrLiBEdXJpbmcgcHJpbnRvdXQgLAotCSAqIHRoaXMgIyB3aWxsIGJlIHJlc2V0IHRvIC0xIGlmIHRoZSBibG9jayBpcyBwcmludGVkIGFzIGEgTU9WRSBibG9jawotCSAqIChiZWNhdXNlIHRoZSBwcmludG91dCBwaGFzZSB3aWxsIGVuY291bnRlciB0aGUgYmxvY2sgdHdpY2UsIGJ1dAotCSAqIG11c3Qgb25seSBwcmludCBpdCBvbmNlLikKLQkgKiBUaGUgYXJyYXkgZGVjbGFyYXRpb25zIGFyZSB0byBNQVhMSU5FQ09VTlQrMiBzbyB0aGF0IHdlIGNhbiBoYXZlIHR3bwotCSAqIGV4dHJhIGxpbmVzIChwc2V1ZG9saW5lcykgYXQgbGluZSMgMCBhbmQgbGluZSMgTUFYTElORUNPVU5UKzEKLQkgKiAob3IgbGVzcykuCi0JICovCi0JaW50IGJsb2NrbGVuW107CisgICAgLyoqIGJsb2NrbGVuIGlzIHRoZSBpbmZvIGFib3V0IGZvdW5kIGJsb2Nrcy4gSXQgd2lsbCBiZSBzZXQgdG8gMCwgZXhjZXB0CisgICAgICogYXQgdGhlIGxpbmUjcyB3aGVyZSBibG9ja3Mgc3RhcnQgaW4gdGhlIG9sZCBmaWxlLiBBdCB0aGVzZSBwbGFjZXMgaXQKKyAgICAgKiB3aWxsIGJlIHNldCB0byB0aGUgIyBvZiBsaW5lcyBpbiB0aGUgYmxvY2suIER1cmluZyBwcmludG91dCAsCisgICAgICogdGhpcyAjIHdpbGwgYmUgcmVzZXQgdG8gLTEgaWYgdGhlIGJsb2NrIGlzIHByaW50ZWQgYXMgYSBNT1ZFIGJsb2NrCisgICAgICogKGJlY2F1c2UgdGhlIHByaW50b3V0IHBoYXNlIHdpbGwgZW5jb3VudGVyIHRoZSBibG9jayB0d2ljZSwgYnV0CisgICAgICogbXVzdCBvbmx5IHByaW50IGl0IG9uY2UuKQorICAgICAqIFRoZSBhcnJheSBkZWNsYXJhdGlvbnMgYXJlIHRvIE1BWExJTkVDT1VOVCsyIHNvIHRoYXQgd2UgY2FuIGhhdmUgdHdvCisgICAgICogZXh0cmEgbGluZXMgKHBzZXVkb2xpbmVzKSBhdCBsaW5lIyAwIGFuZCBsaW5lIyBNQVhMSU5FQ09VTlQrMQorICAgICAqIChvciBsZXNzKS4KKyAgICAgKi8KKyAgICBpbnQgYmxvY2tsZW5bXTsKIAotCS8qKgotCSAqIG1haW4gLSBlbnRyeSBwb2ludCB3aGVuIHVzZWQgc3RhbmRhbG9uZS4KLQkgKiBOT1RFOiBubyByb3V0aW5lcyByZXR1cm4gZXJyb3IgY29kZXMgb3IgdGhyb3cgYW55IGxvY2FsCi0JICogZXhjZXB0aW9ucy4gSW5zdGVhZCwgYW55IHJvdXRpbmUgbWF5IGNvbXBsYWluCi0JICogdG8gc3RkZXJyIGFuZCB0aGVuIGV4aXQgd2l0aCBlcnJvciB0byB0aGUgc3lzdGVtLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzdHJpbmdzW10pCi0JewotCQlpZiAoIGFyZ3N0cmluZ3MubGVuZ3RoICE9IDIgKSB7Ci0JCSAgU3lzdGVtLmVyci5wcmludGxuKCJVc2FnZTogZGlmZiBvbGRmaWxlIG5ld2ZpbGUiICk7Ci0JCSAgU3lzdGVtLmV4aXQoMSk7Ci0JCX0KLQkJRGlmZiBkID0gbmV3IERpZmYoKTsKLQkJZC5kb0RpZmYoYXJnc3RyaW5nc1swXSwgYXJnc3RyaW5nc1sxXSk7Ci0JCXJldHVybjsKLQl9CisgICAgLyoqCisgICAgICogbWFpbiAtIGVudHJ5IHBvaW50IHdoZW4gdXNlZCBzdGFuZGFsb25lLgorICAgICAqIE5PVEU6IG5vIHJvdXRpbmVzIHJldHVybiBlcnJvciBjb2RlcyBvciB0aHJvdyBhbnkgbG9jYWwKKyAgICAgKiBleGNlcHRpb25zLiBJbnN0ZWFkLCBhbnkgcm91dGluZSBtYXkgY29tcGxhaW4KKyAgICAgKiB0byBzdGRlcnIgYW5kIHRoZW4gZXhpdCB3aXRoIGVycm9yIHRvIHRoZSBzeXN0ZW0uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3N0cmluZ3NbXSkKKyAgICB7CisgICAgICAgIGlmICggYXJnc3RyaW5ncy5sZW5ndGggIT0gMiApIHsKKyAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVzYWdlOiBkaWZmIG9sZGZpbGUgbmV3ZmlsZSIgKTsKKyAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgICBEaWZmIGQgPSBuZXcgRGlmZigpOworICAgICAgICBkLmRvRGlmZihhcmdzdHJpbmdzWzBdLCBhcmdzdHJpbmdzWzFdKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotCS8qKiBDb25zdHJ1Y3QgYSBEaWZmIG9iamVjdC4gKi8KLQlEaWZmKCkgewotCX0KKyAgICAvKiogQ29uc3RydWN0IGEgRGlmZiBvYmplY3QuICovCisgICAgRGlmZigpIHsKKyAgICB9CiAKLQkvKiogRG8gb25lIGZpbGUgY29tcGFyaXNvbi4gQ2FsbGVkIHdpdGggYm90aCBmaWxlbmFtZXMuICovCi0JcHVibGljIHZvaWQgZG9EaWZmKFN0cmluZyBvbGRGaWxlLCBTdHJpbmcgbmV3RmlsZSkgeworICAgIC8qKiBEbyBvbmUgZmlsZSBjb21wYXJpc29uLiBDYWxsZWQgd2l0aCBib3RoIGZpbGVuYW1lcy4gKi8KKyAgICBwdWJsaWMgdm9pZCBkb0RpZmYoU3RyaW5nIG9sZEZpbGUsIFN0cmluZyBuZXdGaWxlKSB7CiAgICAgICAgICAgICAgICAgLy9zdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRlc3Qgc3VpdGUgIGZvciBBVksiKTsKLQkJcHJpbnRsbiggIj4+Pj4gRGlmZmVyZW5jZSBvZiBmaWxlIFwiIiArIG9sZEZpbGUgKwotCQkJIlwiIGFuZCBmaWxlIFwiIiArIG5ld0ZpbGUgKyAiXCIuXG4iKTsKLQkJb2xkaW5mbyA9IG5ldyBmaWxlSW5mbyhvbGRGaWxlKTsKLQkJbmV3aW5mbyA9IG5ldyBmaWxlSW5mbyhuZXdGaWxlKTsKLQkJLyogd2UgZG9uJ3QgcHJvY2VzcyB1bnRpbCB3ZSBrbm93IGJvdGggZmlsZXMgcmVhbGx5IGRvIGV4aXN0LiAqLwotCQl0cnkgewotCQkJaW5wdXRzY2FuKCBvbGRpbmZvICk7Ci0JCQlpbnB1dHNjYW4oIG5ld2luZm8gKTsKLQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLmVyci5wcmludGxuKCJSZWFkIGVycm9yOiAiICsgZSk7Ci0JCX0KKyAgICAgICAgcHJpbnRsbiggIj4+Pj4gRGlmZmVyZW5jZSBvZiBmaWxlIFwiIiArIG9sZEZpbGUgKworICAgICAgICAgICAgIlwiIGFuZCBmaWxlIFwiIiArIG5ld0ZpbGUgKyAiXCIuXG4iKTsKKyAgICAgICAgb2xkaW5mbyA9IG5ldyBmaWxlSW5mbyhvbGRGaWxlKTsKKyAgICAgICAgbmV3aW5mbyA9IG5ldyBmaWxlSW5mbyhuZXdGaWxlKTsKKyAgICAgICAgLyogd2UgZG9uJ3QgcHJvY2VzcyB1bnRpbCB3ZSBrbm93IGJvdGggZmlsZXMgcmVhbGx5IGRvIGV4aXN0LiAqLworICAgICAgICB0cnkgeworICAgICAgICAgICAgaW5wdXRzY2FuKCBvbGRpbmZvICk7CisgICAgICAgICAgICBpbnB1dHNjYW4oIG5ld2luZm8gKTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJSZWFkIGVycm9yOiAiICsgZSk7CisgICAgICAgIH0KIAotCQkvKiBOb3cgdGhhdCB3ZSd2ZSByZWFkIGFsbCB0aGUgbGluZXMsIGFsbG9jYXRlIHNvbWUgYXJyYXlzLgotCQkgKi8KLQkJYmxvY2tsZW4gPSBuZXcgaW50WyAob2xkaW5mby5tYXhMaW5lPm5ld2luZm8ubWF4TGluZT8KLQkJCW9sZGluZm8ubWF4TGluZSA6IG5ld2luZm8ubWF4TGluZSkgKyAyIF07Ci0JCW9sZGluZm8uYWxsb2MoKTsKLQkJbmV3aW5mby5hbGxvYygpOworICAgICAgICAvKiBOb3cgdGhhdCB3ZSd2ZSByZWFkIGFsbCB0aGUgbGluZXMsIGFsbG9jYXRlIHNvbWUgYXJyYXlzLgorICAgICAgICAgKi8KKyAgICAgICAgYmxvY2tsZW4gPSBuZXcgaW50WyAob2xkaW5mby5tYXhMaW5lPm5ld2luZm8ubWF4TGluZT8KKyAgICAgICAgICAgIG9sZGluZm8ubWF4TGluZSA6IG5ld2luZm8ubWF4TGluZSkgKyAyIF07CisgICAgICAgIG9sZGluZm8uYWxsb2MoKTsKKyAgICAgICAgbmV3aW5mby5hbGxvYygpOwogCi0JCS8qIE5vdyBkbyB0aGUgd29yaywgYW5kIHByaW50IHRoZSByZXN1bHRzLiAqLwotCQl0cmFuc2Zvcm0oKTsKLQkJcHJpbnRvdXQoKTsKKyAgICAgICAgLyogTm93IGRvIHRoZSB3b3JrLCBhbmQgcHJpbnQgdGhlIHJlc3VsdHMuICovCisgICAgICAgIHRyYW5zZm9ybSgpOworICAgICAgICBwcmludG91dCgpOwogICAgICAgICAgICAgICAgIC8vc3RhdC5wcmludFN1bW1hcnkoImFwcHZlcmlmaWNhdGlvbklEIik7Ci0JfQorICAgIH0KIAotCS8qKgotCSAqIGlucHV0c2NhbiAgICBSZWFkcyB0aGUgZmlsZSBzcGVjaWZpZWQgYnkgcGluZm8uZmlsZS4KLQkgKiAtLS0tLS0tLS0gICAgUGxhY2VzIHRoZSBsaW5lcyBvZiB0aGF0IGZpbGUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KLQkgKiAgICAgICAgICAgICAgU2V0cyBwaW5mby5tYXhMaW5lIHRvIHRoZSBudW1iZXIgb2YgbGluZXMgZm91bmQuCi0JICovCi0Jdm9pZCBpbnB1dHNjYW4oIGZpbGVJbmZvIHBpbmZvICkgdGhyb3dzIElPRXhjZXB0aW9uCi0JewotCSAgICAgU3RyaW5nIGxpbmVidWZmZXI7CisgICAgLyoqCisgICAgICogaW5wdXRzY2FuICAgIFJlYWRzIHRoZSBmaWxlIHNwZWNpZmllZCBieSBwaW5mby5maWxlLgorICAgICAqIC0tLS0tLS0tLSAgICBQbGFjZXMgdGhlIGxpbmVzIG9mIHRoYXQgZmlsZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAqICAgICAgICAgICAgICBTZXRzIHBpbmZvLm1heExpbmUgdG8gdGhlIG51bWJlciBvZiBsaW5lcyBmb3VuZC4KKyAgICAgKi8KKyAgICB2b2lkIGlucHV0c2NhbiggZmlsZUluZm8gcGluZm8gKSB0aHJvd3MgSU9FeGNlcHRpb24KKyAgICB7CisgICAgICAgICBTdHJpbmcgbGluZWJ1ZmZlcjsKIAotCSAgICAgcGluZm8ubWF4TGluZSA9IDA7Ci0JICAgICB3aGlsZSAoKGxpbmVidWZmZXIgPSBwaW5mby5maWxlLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKLQkJICAgICAgIHN0b3JlbGluZSggbGluZWJ1ZmZlciwgcGluZm8gKTsKLQkgICAgIH0KLQl9CisgICAgICAgICBwaW5mby5tYXhMaW5lID0gMDsKKyAgICAgICAgIHdoaWxlICgobGluZWJ1ZmZlciA9IHBpbmZvLmZpbGUucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgc3RvcmVsaW5lKCBsaW5lYnVmZmVyLCBwaW5mbyApOworICAgICAgICAgfQorICAgIH0KIAotCS8qKgotCSAqIHN0b3JlbGluZSAgICBQbGFjZXMgbGluZSBpbnRvIHN5bWJvbCB0YWJsZS4KLQkgKiAtLS0tLS0tLS0gICAgRXhwZWN0cyBwaW5mby5tYXhMaW5lIGluaXR0ZWQ6IGluY3JlbWVudHMuCi0JICogICAgICAgICAgICAgIFBsYWNlcyBzeW1ib2wgdGFibGUgaGFuZGxlIGluIHBpbmZvLnltYm9sLgotCSAqICAgICAgICAgICAgICBFeHBlY3RzIHBpbmZvIGlzIGVpdGhlciBvbGRpbmZvIG9yIG5ld2luZm8uCi0JICovCi0Jdm9pZCBzdG9yZWxpbmUoIFN0cmluZyBsaW5lYnVmZmVyLCBmaWxlSW5mbyBwaW5mbyApCi0JewotCSAgICAgaW50IGxpbmVudW0gPSArK3BpbmZvLm1heExpbmU7ICAgIC8qIG5vdGUsIG5vIGxpbmUgemVybyAqLwotCSAgICAgaWYgKCBsaW5lbnVtID4gZmlsZUluZm8uTUFYTElORUNPVU5UICkgewotCQkgIFN5c3RlbS5lcnIucHJpbnRsbiggIk1BWExJTkVDT1VOVCBleGNlZWRlZCwgbXVzdCBzdG9wLiIgKTsKLQkJICBTeXN0ZW0uZXhpdCgxKTsKLQkgICAgIH0KLQkgICAgIHBpbmZvLnN5bWJvbFsgbGluZW51bSBdID0KLQkJICBub2RlLmFkZFN5bWJvbCggbGluZWJ1ZmZlciwgcGluZm8gPT0gb2xkaW5mbywgbGluZW51bSApOwotCX0KKyAgICAvKioKKyAgICAgKiBzdG9yZWxpbmUgICAgUGxhY2VzIGxpbmUgaW50byBzeW1ib2wgdGFibGUuCisgICAgICogLS0tLS0tLS0tICAgIEV4cGVjdHMgcGluZm8ubWF4TGluZSBpbml0dGVkOiBpbmNyZW1lbnRzLgorICAgICAqICAgICAgICAgICAgICBQbGFjZXMgc3ltYm9sIHRhYmxlIGhhbmRsZSBpbiBwaW5mby55bWJvbC4KKyAgICAgKiAgICAgICAgICAgICAgRXhwZWN0cyBwaW5mbyBpcyBlaXRoZXIgb2xkaW5mbyBvciBuZXdpbmZvLgorICAgICAqLworICAgIHZvaWQgc3RvcmVsaW5lKCBTdHJpbmcgbGluZWJ1ZmZlciwgZmlsZUluZm8gcGluZm8gKQorICAgIHsKKyAgICAgICAgIGludCBsaW5lbnVtID0gKytwaW5mby5tYXhMaW5lOyAgICAvKiBub3RlLCBubyBsaW5lIHplcm8gKi8KKyAgICAgICAgIGlmICggbGluZW51bSA+IGZpbGVJbmZvLk1BWExJTkVDT1VOVCApIHsKKyAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oICJNQVhMSU5FQ09VTlQgZXhjZWVkZWQsIG11c3Qgc3RvcC4iICk7CisgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CisgICAgICAgICB9CisgICAgICAgICBwaW5mby5zeW1ib2xbIGxpbmVudW0gXSA9CisgICAgICAgICAgbm9kZS5hZGRTeW1ib2woIGxpbmVidWZmZXIsIHBpbmZvID09IG9sZGluZm8sIGxpbmVudW0gKTsKKyAgICB9CiAKLQkvKgotCSAqIHRyYW5zZm9ybQotCSAqIEFuYWx5emVzIHRoZSBmaWxlIGRpZmZlcmVuY2VzIGFuZCBsZWF2ZXMgaXRzIGZpbmRpbmdzIGluCi0JICogdGhlIGdsb2JhbCBhcnJheXMgb2xkaW5mby5vdGhlciwgbmV3aW5mby5vdGhlciwgYW5kIGJsb2NrbGVuLgotCSAqIEV4cGVjdHMgYm90aCBmaWxlcyBpbiBzeW10YWIuCi0JICogRXhwZWN0cyB2YWxpZCAibWF4TGluZSIgYW5kICJzeW1ib2wiIGluIG9sZGluZm8gYW5kIG5ld2luZm8uCi0JICovCi0Jdm9pZCB0cmFuc2Zvcm0oKQotCXsKLQkgICAgIGludCBvbGRsaW5lLCBuZXdsaW5lOwotCSAgICAgaW50IG9sZG1heCA9IG9sZGluZm8ubWF4TGluZSArIDI7ICAvKiBDb3VudCBwc2V1ZG9saW5lcyBhdCAgKi8KLQkgICAgIGludCBuZXdtYXggPSBuZXdpbmZvLm1heExpbmUgKyAyOyAgLyogLi5mcm9udCBhbmQgcmVhciBvZiBmaWxlICovCisgICAgLyoKKyAgICAgKiB0cmFuc2Zvcm0KKyAgICAgKiBBbmFseXplcyB0aGUgZmlsZSBkaWZmZXJlbmNlcyBhbmQgbGVhdmVzIGl0cyBmaW5kaW5ncyBpbgorICAgICAqIHRoZSBnbG9iYWwgYXJyYXlzIG9sZGluZm8ub3RoZXIsIG5ld2luZm8ub3RoZXIsIGFuZCBibG9ja2xlbi4KKyAgICAgKiBFeHBlY3RzIGJvdGggZmlsZXMgaW4gc3ltdGFiLgorICAgICAqIEV4cGVjdHMgdmFsaWQgIm1heExpbmUiIGFuZCAic3ltYm9sIiBpbiBvbGRpbmZvIGFuZCBuZXdpbmZvLgorICAgICAqLworICAgIHZvaWQgdHJhbnNmb3JtKCkKKyAgICB7CisgICAgICAgICBpbnQgb2xkbGluZSwgbmV3bGluZTsKKyAgICAgICAgIGludCBvbGRtYXggPSBvbGRpbmZvLm1heExpbmUgKyAyOyAgLyogQ291bnQgcHNldWRvbGluZXMgYXQgICovCisgICAgICAgICBpbnQgbmV3bWF4ID0gbmV3aW5mby5tYXhMaW5lICsgMjsgIC8qIC4uZnJvbnQgYW5kIHJlYXIgb2YgZmlsZSAqLwogCi0JICAgICBmb3IgKG9sZGxpbmU9MDsgb2xkbGluZSA8IG9sZG1heDsgb2xkbGluZSsrICkKLQkJCW9sZGluZm8ub3RoZXJbb2xkbGluZV09IC0xOwotCSAgICAgZm9yIChuZXdsaW5lPTA7IG5ld2xpbmUgPCBuZXdtYXg7IG5ld2xpbmUrKyApCi0JCQluZXdpbmZvLm90aGVyW25ld2xpbmVdPSAtMTsKKyAgICAgICAgIGZvciAob2xkbGluZT0wOyBvbGRsaW5lIDwgb2xkbWF4OyBvbGRsaW5lKysgKQorICAgICAgICAgICAgb2xkaW5mby5vdGhlcltvbGRsaW5lXT0gLTE7CisgICAgICAgICBmb3IgKG5ld2xpbmU9MDsgbmV3bGluZSA8IG5ld21heDsgbmV3bGluZSsrICkKKyAgICAgICAgICAgIG5ld2luZm8ub3RoZXJbbmV3bGluZV09IC0xOwogCi0JICAgICBzY2FudW5pcXVlKCk7ICAvKiBzY2FuIGZvciBsaW5lcyB1c2VkIG9uY2UgaW4gYm90aCBmaWxlcyAqLwotCSAgICAgc2NhbmFmdGVyKCk7ICAgLyogc2NhbiBwYXN0IHN1cmUtbWF0Y2hlcyBmb3Igbm9uLXVuaXF1ZSBibG9ja3MgKi8KLQkgICAgIHNjYW5iZWZvcmUoKTsgIC8qIHNjYW4gYmFja3dhcmRzIGZyb20gc3VyZS1tYXRjaGVzICovCi0JICAgICBzY2FuYmxvY2tzKCk7ICAvKiBmaW5kIHRoZSBmcm9udHMgYW5kIGxlbmd0aHMgb2YgYmxvY2tzICovCi0JfQorICAgICAgICAgc2NhbnVuaXF1ZSgpOyAgLyogc2NhbiBmb3IgbGluZXMgdXNlZCBvbmNlIGluIGJvdGggZmlsZXMgKi8KKyAgICAgICAgIHNjYW5hZnRlcigpOyAgIC8qIHNjYW4gcGFzdCBzdXJlLW1hdGNoZXMgZm9yIG5vbi11bmlxdWUgYmxvY2tzICovCisgICAgICAgICBzY2FuYmVmb3JlKCk7ICAvKiBzY2FuIGJhY2t3YXJkcyBmcm9tIHN1cmUtbWF0Y2hlcyAqLworICAgICAgICAgc2NhbmJsb2NrcygpOyAgLyogZmluZCB0aGUgZnJvbnRzIGFuZCBsZW5ndGhzIG9mIGJsb2NrcyAqLworICAgIH0KIAotCS8qCi0JICogc2NhbnVuaXF1ZQotCSAqIFNjYW5zIGZvciBsaW5lcyB3aGljaCBhcmUgdXNlZCBleGFjdGx5IG9uY2UgaW4gZWFjaCBmaWxlLgotCSAqIEV4cGVjdHMgYm90aCBmaWxlcyBpbiBzeW10YWIsIGFuZCBvbGRpbmZvIGFuZCBuZXdpbmZvIHZhbGlkLgotCSAqIFRoZSBhcHByb3ByaWF0ZSAib3RoZXIiIGFycmF5IGVudHJpZXMgYXJlIHNldCB0byB0aGUgbGluZSMgaW4KLQkgKiB0aGUgb3RoZXIgZmlsZS4KLQkgKiBDbGFpbXMgcHNldWRvLWxpbmVzIGF0IDAgYW5kIFhYWGluZm8ubWF4TGluZSsxIGFyZSB1bmlxdWUuCi0JICovCi0Jdm9pZCBzY2FudW5pcXVlKCkKLQl7Ci0JICAgICBpbnQgb2xkbGluZSwgbmV3bGluZTsKLQkgICAgIG5vZGUgcHN5bWJvbDsKKyAgICAvKgorICAgICAqIHNjYW51bmlxdWUKKyAgICAgKiBTY2FucyBmb3IgbGluZXMgd2hpY2ggYXJlIHVzZWQgZXhhY3RseSBvbmNlIGluIGVhY2ggZmlsZS4KKyAgICAgKiBFeHBlY3RzIGJvdGggZmlsZXMgaW4gc3ltdGFiLCBhbmQgb2xkaW5mbyBhbmQgbmV3aW5mbyB2YWxpZC4KKyAgICAgKiBUaGUgYXBwcm9wcmlhdGUgIm90aGVyIiBhcnJheSBlbnRyaWVzIGFyZSBzZXQgdG8gdGhlIGxpbmUjIGluCisgICAgICogdGhlIG90aGVyIGZpbGUuCisgICAgICogQ2xhaW1zIHBzZXVkby1saW5lcyBhdCAwIGFuZCBYWFhpbmZvLm1heExpbmUrMSBhcmUgdW5pcXVlLgorICAgICAqLworICAgIHZvaWQgc2NhbnVuaXF1ZSgpCisgICAgeworICAgICAgICAgaW50IG9sZGxpbmUsIG5ld2xpbmU7CisgICAgICAgICBub2RlIHBzeW1ib2w7CiAKLQkgICAgIGZvciggbmV3bGluZSA9IDE7IG5ld2xpbmUgPD0gbmV3aW5mby5tYXhMaW5lOyBuZXdsaW5lKysgKSB7Ci0JCSAgcHN5bWJvbCA9IG5ld2luZm8uc3ltYm9sWyBuZXdsaW5lIF07Ci0JCSAgaWYgKCBwc3ltYm9sLnN5bWJvbElzVW5pcXVlKCkpIHsgICAgICAgIC8vIDEgdXNlIGluIGVhY2ggZmlsZQotCQkgICAgICAgb2xkbGluZSA9IHBzeW1ib2wubGluZW51bTsKLQkJICAgICAgIG5ld2luZm8ub3RoZXJbIG5ld2xpbmUgXSA9IG9sZGxpbmU7IC8vIHJlY29yZCAxLTEgbWFwCi0JCSAgICAgICBvbGRpbmZvLm90aGVyWyBvbGRsaW5lIF0gPSBuZXdsaW5lOwotCQkgIH0KLQkgICAgIH0KLQkgICAgIG5ld2luZm8ub3RoZXJbIDAgXSA9IDA7Ci0JICAgICBvbGRpbmZvLm90aGVyWyAwIF0gPSAwOwotCSAgICAgbmV3aW5mby5vdGhlclsgbmV3aW5mby5tYXhMaW5lICsgMSBdID0gb2xkaW5mby5tYXhMaW5lICsgMTsKLQkgICAgIG9sZGluZm8ub3RoZXJbIG9sZGluZm8ubWF4TGluZSArIDEgXSA9IG5ld2luZm8ubWF4TGluZSArIDE7Ci0JfQorICAgICAgICAgZm9yKCBuZXdsaW5lID0gMTsgbmV3bGluZSA8PSBuZXdpbmZvLm1heExpbmU7IG5ld2xpbmUrKyApIHsKKyAgICAgICAgICBwc3ltYm9sID0gbmV3aW5mby5zeW1ib2xbIG5ld2xpbmUgXTsKKyAgICAgICAgICBpZiAoIHBzeW1ib2wuc3ltYm9sSXNVbmlxdWUoKSkgeyAgICAgICAgLy8gMSB1c2UgaW4gZWFjaCBmaWxlCisgICAgICAgICAgICAgICBvbGRsaW5lID0gcHN5bWJvbC5saW5lbnVtOworICAgICAgICAgICAgICAgbmV3aW5mby5vdGhlclsgbmV3bGluZSBdID0gb2xkbGluZTsgLy8gcmVjb3JkIDEtMSBtYXAKKyAgICAgICAgICAgICAgIG9sZGluZm8ub3RoZXJbIG9sZGxpbmUgXSA9IG5ld2xpbmU7CisgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgICAgbmV3aW5mby5vdGhlclsgMCBdID0gMDsKKyAgICAgICAgIG9sZGluZm8ub3RoZXJbIDAgXSA9IDA7CisgICAgICAgICBuZXdpbmZvLm90aGVyWyBuZXdpbmZvLm1heExpbmUgKyAxIF0gPSBvbGRpbmZvLm1heExpbmUgKyAxOworICAgICAgICAgb2xkaW5mby5vdGhlclsgb2xkaW5mby5tYXhMaW5lICsgMSBdID0gbmV3aW5mby5tYXhMaW5lICsgMTsKKyAgICB9CiAKLQkvKgotCSAqIHNjYW5hZnRlcgotCSAqIEV4cGVjdHMgYm90aCBmaWxlcyBpbiBzeW10YWIsIGFuZCBvbGRpbmZvIGFuZCBuZXdpbmZvIHZhbGlkLgotCSAqIEV4cGVjdHMgdGhlICJvdGhlciIgYXJyYXlzIGNvbnRhaW4gcG9zaXRpdmUgI3MgdG8gaW5kaWNhdGUKLQkgKiBsaW5lcyB0aGF0IGFyZSB1bmlxdWUgaW4gYm90aCBmaWxlcy4KLQkgKiBGb3IgZWFjaCBzdWNoIHBhaXIgb2YgcGxhY2VzLCBzY2FucyBwYXN0IGluIGVhY2ggZmlsZS4KLQkgKiBDb250aWd1b3VzIGdyb3VwcyBvZiBsaW5lcyB0aGF0IG1hdGNoIG5vbi11bmlxdWVseSBhcmUKLQkgKiB0YWtlbiB0byBiZSBnb29kLWVub3VnaCBtYXRjaGVzLCBhbmQgc28gbWFya2VkIGluICJvdGhlciIuCi0JICogQXNzdW1lcyBlYWNoIG90aGVyWzBdIGlzIDAuCi0JICovCi0Jdm9pZCBzY2FuYWZ0ZXIoKQotCXsKLQkgICAgIGludCBvbGRsaW5lLCBuZXdsaW5lOworICAgIC8qCisgICAgICogc2NhbmFmdGVyCisgICAgICogRXhwZWN0cyBib3RoIGZpbGVzIGluIHN5bXRhYiwgYW5kIG9sZGluZm8gYW5kIG5ld2luZm8gdmFsaWQuCisgICAgICogRXhwZWN0cyB0aGUgIm90aGVyIiBhcnJheXMgY29udGFpbiBwb3NpdGl2ZSAjcyB0byBpbmRpY2F0ZQorICAgICAqIGxpbmVzIHRoYXQgYXJlIHVuaXF1ZSBpbiBib3RoIGZpbGVzLgorICAgICAqIEZvciBlYWNoIHN1Y2ggcGFpciBvZiBwbGFjZXMsIHNjYW5zIHBhc3QgaW4gZWFjaCBmaWxlLgorICAgICAqIENvbnRpZ3VvdXMgZ3JvdXBzIG9mIGxpbmVzIHRoYXQgbWF0Y2ggbm9uLXVuaXF1ZWx5IGFyZQorICAgICAqIHRha2VuIHRvIGJlIGdvb2QtZW5vdWdoIG1hdGNoZXMsIGFuZCBzbyBtYXJrZWQgaW4gIm90aGVyIi4KKyAgICAgKiBBc3N1bWVzIGVhY2ggb3RoZXJbMF0gaXMgMC4KKyAgICAgKi8KKyAgICB2b2lkIHNjYW5hZnRlcigpCisgICAgeworICAgICAgICAgaW50IG9sZGxpbmUsIG5ld2xpbmU7CiAKLQkgICAgIGZvciggbmV3bGluZSA9IDA7IG5ld2xpbmUgPD0gbmV3aW5mby5tYXhMaW5lOyBuZXdsaW5lKysgKSB7Ci0JCSAgb2xkbGluZSA9IG5ld2luZm8ub3RoZXJbIG5ld2xpbmUgXTsKLQkJICBpZiAoIG9sZGxpbmUgPj0gMCApIHsJLyogaXMgdW5pcXVlIGluIG9sZCAmIG5ldyAqLwotCQkgICAgICAgZm9yKDs7KSB7CS8qIHNjYW4gYWZ0ZXIgdGhlcmUgaW4gYm90aCBmaWxlcyAqLwotCQkJICAgIGlmICggKytvbGRsaW5lID4gb2xkaW5mby5tYXhMaW5lICAgKSBicmVhazsKLQkJCSAgICBpZiAoIG9sZGluZm8ub3RoZXJbIG9sZGxpbmUgXSA+PSAwICkgYnJlYWs7Ci0JCQkgICAgaWYgKCArK25ld2xpbmUgPiBuZXdpbmZvLm1heExpbmUgICApIGJyZWFrOwotCQkJICAgIGlmICggbmV3aW5mby5vdGhlclsgbmV3bGluZSBdID49IDAgKSBicmVhazsKKyAgICAgICAgIGZvciggbmV3bGluZSA9IDA7IG5ld2xpbmUgPD0gbmV3aW5mby5tYXhMaW5lOyBuZXdsaW5lKysgKSB7CisgICAgICAgICAgb2xkbGluZSA9IG5ld2luZm8ub3RoZXJbIG5ld2xpbmUgXTsKKyAgICAgICAgICBpZiAoIG9sZGxpbmUgPj0gMCApIHsgICAgLyogaXMgdW5pcXVlIGluIG9sZCAmIG5ldyAqLworICAgICAgICAgICAgICAgZm9yKDs7KSB7ICAgIC8qIHNjYW4gYWZ0ZXIgdGhlcmUgaW4gYm90aCBmaWxlcyAqLworICAgICAgICAgICAgICAgIGlmICggKytvbGRsaW5lID4gb2xkaW5mby5tYXhMaW5lICAgKSBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoIG9sZGluZm8ub3RoZXJbIG9sZGxpbmUgXSA+PSAwICkgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKCArK25ld2xpbmUgPiBuZXdpbmZvLm1heExpbmUgICApIGJyZWFrOworICAgICAgICAgICAgICAgIGlmICggbmV3aW5mby5vdGhlclsgbmV3bGluZSBdID49IDAgKSBicmVhazsKIAotCQkJICAgIC8qIG9sZGxpbmUgJiBuZXdsaW5lIGV4aXN0LCBhbmQKLQkJCQlhcmVuJ3QgYWxyZWFkeSBtYXRjaGVkICovCisgICAgICAgICAgICAgICAgLyogb2xkbGluZSAmIG5ld2xpbmUgZXhpc3QsIGFuZAorICAgICAgICAgICAgICAgIGFyZW4ndCBhbHJlYWR5IG1hdGNoZWQgKi8KIAotCQkJICAgIGlmICggbmV3aW5mby5zeW1ib2xbIG5ld2xpbmUgXSAhPQotCQkJCW9sZGluZm8uc3ltYm9sWyBvbGRsaW5lIF0gKSBicmVhazsgIC8vIG5vdCBzYW1lCisgICAgICAgICAgICAgICAgaWYgKCBuZXdpbmZvLnN5bWJvbFsgbmV3bGluZSBdICE9CisgICAgICAgICAgICAgICAgb2xkaW5mby5zeW1ib2xbIG9sZGxpbmUgXSApIGJyZWFrOyAgLy8gbm90IHNhbWUKIAotCQkJICAgIG5ld2luZm8ub3RoZXJbbmV3bGluZV0gPSBvbGRsaW5lOyAvLyByZWNvcmQgYSBtYXRjaAotCQkJICAgIG9sZGluZm8ub3RoZXJbb2xkbGluZV0gPSBuZXdsaW5lOwotCQkgICAgICAgfQotCQkgIH0KLQkgICAgIH0KLQl9CisgICAgICAgICAgICAgICAgbmV3aW5mby5vdGhlcltuZXdsaW5lXSA9IG9sZGxpbmU7IC8vIHJlY29yZCBhIG1hdGNoCisgICAgICAgICAgICAgICAgb2xkaW5mby5vdGhlcltvbGRsaW5lXSA9IG5ld2xpbmU7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgfQorICAgIH0KIAotCS8qKgotCSAqIHNjYW5iZWZvcmUKLQkgKiBBcyBzY2FuYWZ0ZXIsIGV4Y2VwdCBzY2FucyB0b3dhcmRzIGZpbGUgZnJvbnRzLgotCSAqIEFzc3VtZXMgdGhlIG9mZi1lbmQgbGluZXMgaGF2ZSBiZWVuIG1hcmtlZCBhcyBhIG1hdGNoLgotCSAqLwotCXZvaWQgc2NhbmJlZm9yZSgpCi0JewotCSAgICAgaW50IG9sZGxpbmUsIG5ld2xpbmU7CisgICAgLyoqCisgICAgICogc2NhbmJlZm9yZQorICAgICAqIEFzIHNjYW5hZnRlciwgZXhjZXB0IHNjYW5zIHRvd2FyZHMgZmlsZSBmcm9udHMuCisgICAgICogQXNzdW1lcyB0aGUgb2ZmLWVuZCBsaW5lcyBoYXZlIGJlZW4gbWFya2VkIGFzIGEgbWF0Y2guCisgICAgICovCisgICAgdm9pZCBzY2FuYmVmb3JlKCkKKyAgICB7CisgICAgICAgICBpbnQgb2xkbGluZSwgbmV3bGluZTsKIAotCSAgICAgZm9yKCBuZXdsaW5lID0gbmV3aW5mby5tYXhMaW5lICsgMTsgbmV3bGluZSA+IDA7IG5ld2xpbmUtLSApIHsKLQkJICBvbGRsaW5lID0gbmV3aW5mby5vdGhlclsgbmV3bGluZSBdOwotCQkgIGlmICggb2xkbGluZSA+PSAwICkgeyAgICAgICAgICAgICAgIC8qIHVuaXF1ZSBpbiBlYWNoICovCi0JCSAgICAgICBmb3IoOzspIHsKLQkJCSAgICBpZiAoIC0tb2xkbGluZSA8PSAwICAgICAgICAgICAgICAgICkgYnJlYWs7Ci0JCQkgICAgaWYgKCBvbGRpbmZvLm90aGVyWyBvbGRsaW5lIF0gPj0gMCApIGJyZWFrOwotCQkJICAgIGlmICggLS1uZXdsaW5lIDw9IDAgICAgICAgICAgICAgICAgKSBicmVhazsKLQkJCSAgICBpZiAoIG5ld2luZm8ub3RoZXJbIG5ld2xpbmUgXSA+PSAwICkgYnJlYWs7CisgICAgICAgICBmb3IoIG5ld2xpbmUgPSBuZXdpbmZvLm1heExpbmUgKyAxOyBuZXdsaW5lID4gMDsgbmV3bGluZS0tICkgeworICAgICAgICAgIG9sZGxpbmUgPSBuZXdpbmZvLm90aGVyWyBuZXdsaW5lIF07CisgICAgICAgICAgaWYgKCBvbGRsaW5lID49IDAgKSB7ICAgICAgICAgICAgICAgLyogdW5pcXVlIGluIGVhY2ggKi8KKyAgICAgICAgICAgICAgIGZvcig7OykgeworICAgICAgICAgICAgICAgIGlmICggLS1vbGRsaW5lIDw9IDAgICAgICAgICAgICAgICAgKSBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoIG9sZGluZm8ub3RoZXJbIG9sZGxpbmUgXSA+PSAwICkgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKCAtLW5ld2xpbmUgPD0gMCAgICAgICAgICAgICAgICApIGJyZWFrOworICAgICAgICAgICAgICAgIGlmICggbmV3aW5mby5vdGhlclsgbmV3bGluZSBdID49IDAgKSBicmVhazsKIAotCQkJICAgIC8qIG9sZGxpbmUgYW5kIG5ld2xpbmUgZXhpc3QsCi0JCQkJYW5kIGFyZW4ndCBtYXJrZWQgeWV0ICovCisgICAgICAgICAgICAgICAgLyogb2xkbGluZSBhbmQgbmV3bGluZSBleGlzdCwKKyAgICAgICAgICAgICAgICBhbmQgYXJlbid0IG1hcmtlZCB5ZXQgKi8KIAotCQkJICAgIGlmICggbmV3aW5mby5zeW1ib2xbIG5ld2xpbmUgXSAhPQotCQkJCW9sZGluZm8uc3ltYm9sWyBvbGRsaW5lIF0gKSBicmVhazsgIC8vIG5vdCBzYW1lCisgICAgICAgICAgICAgICAgaWYgKCBuZXdpbmZvLnN5bWJvbFsgbmV3bGluZSBdICE9CisgICAgICAgICAgICAgICAgb2xkaW5mby5zeW1ib2xbIG9sZGxpbmUgXSApIGJyZWFrOyAgLy8gbm90IHNhbWUKIAotCQkJICAgIG5ld2luZm8ub3RoZXJbbmV3bGluZV0gPSBvbGRsaW5lOyAvLyByZWNvcmQgYSBtYXRjaAotCQkJICAgIG9sZGluZm8ub3RoZXJbb2xkbGluZV0gPSBuZXdsaW5lOwotCQkgICAgICAgfQotCQkgIH0KLQkgICAgIH0KLQl9CisgICAgICAgICAgICAgICAgbmV3aW5mby5vdGhlcltuZXdsaW5lXSA9IG9sZGxpbmU7IC8vIHJlY29yZCBhIG1hdGNoCisgICAgICAgICAgICAgICAgb2xkaW5mby5vdGhlcltvbGRsaW5lXSA9IG5ld2xpbmU7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgfQorICAgIH0KIAotCS8qKgotCSAqIHNjYW5ibG9ja3MgLSBGaW5kcyB0aGUgYmVnaW5uaW5ncyBhbmQgbGVuZ3RocyBvZiBibG9ja3Mgb2YgbWF0Y2hlcy4KLQkgKiBTZXRzIHRoZSBibG9ja2xlbiBhcnJheSAoc2VlIGRlZmluaXRpb24pLgotCSAqIEV4cGVjdHMgb2xkaW5mbyB2YWxpZC4KLQkgKi8KLQl2b2lkIHNjYW5ibG9ja3MoKQotCXsKLQkgICAgIGludCBvbGRsaW5lLCBuZXdsaW5lOwotCSAgICAgaW50IG9sZGZyb250ID0gMDsgICAgICAvLyBsaW5lIyBvZiBmcm9udCBvZiBhIGJsb2NrIGluIG9sZCwgb3IgMAotCSAgICAgaW50IG5ld2xhc3QgPSAtMTsgICAgICAvLyBuZXdsaW5lJ3MgdmFsdWUgZHVyaW5nIHByZXYuIGl0ZXJhdGlvbgorICAgIC8qKgorICAgICAqIHNjYW5ibG9ja3MgLSBGaW5kcyB0aGUgYmVnaW5uaW5ncyBhbmQgbGVuZ3RocyBvZiBibG9ja3Mgb2YgbWF0Y2hlcy4KKyAgICAgKiBTZXRzIHRoZSBibG9ja2xlbiBhcnJheSAoc2VlIGRlZmluaXRpb24pLgorICAgICAqIEV4cGVjdHMgb2xkaW5mbyB2YWxpZC4KKyAgICAgKi8KKyAgICB2b2lkIHNjYW5ibG9ja3MoKQorICAgIHsKKyAgICAgICAgIGludCBvbGRsaW5lLCBuZXdsaW5lOworICAgICAgICAgaW50IG9sZGZyb250ID0gMDsgICAgICAvLyBsaW5lIyBvZiBmcm9udCBvZiBhIGJsb2NrIGluIG9sZCwgb3IgMAorICAgICAgICAgaW50IG5ld2xhc3QgPSAtMTsgICAgICAvLyBuZXdsaW5lJ3MgdmFsdWUgZHVyaW5nIHByZXYuIGl0ZXJhdGlvbgogCi0JICAgICBmb3IoIG9sZGxpbmUgPSAxOyBvbGRsaW5lIDw9IG9sZGluZm8ubWF4TGluZTsgb2xkbGluZSsrICkKLQkJICAgICAgIGJsb2NrbGVuWyBvbGRsaW5lIF0gPSAwOwotCSAgICAgYmxvY2tsZW5bIG9sZGluZm8ubWF4TGluZSArIDEgXSA9IFVOUkVBTDsgLy8gc3RhcnRzIGEgbXl0aGljYWwgYmxrCisgICAgICAgICBmb3IoIG9sZGxpbmUgPSAxOyBvbGRsaW5lIDw9IG9sZGluZm8ubWF4TGluZTsgb2xkbGluZSsrICkKKyAgICAgICAgICAgICAgIGJsb2NrbGVuWyBvbGRsaW5lIF0gPSAwOworICAgICAgICAgYmxvY2tsZW5bIG9sZGluZm8ubWF4TGluZSArIDEgXSA9IFVOUkVBTDsgLy8gc3RhcnRzIGEgbXl0aGljYWwgYmxrCiAKLQkgICAgIGZvciggb2xkbGluZSA9IDE7IG9sZGxpbmUgPD0gb2xkaW5mby5tYXhMaW5lOyBvbGRsaW5lKysgKSB7Ci0JCSAgbmV3bGluZSA9IG9sZGluZm8ub3RoZXJbIG9sZGxpbmUgXTsKLQkJICBpZiAoIG5ld2xpbmUgPCAwICkgb2xkZnJvbnQgPSAwOyAgLyogbm8gbWF0Y2g6IG5vdCBpbiBibG9jayAqLwotCQkgIGVsc2V7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXRjaC4gKi8KLQkJICAgICAgIGlmICggb2xkZnJvbnQgPT0gMCApICAgICAgICAgb2xkZnJvbnQgPSBvbGRsaW5lOwotCQkgICAgICAgaWYgKCBuZXdsaW5lICE9IChuZXdsYXN0KzEpKSBvbGRmcm9udCA9IG9sZGxpbmU7Ci0JCSAgICAgICArK2Jsb2NrbGVuWyBvbGRmcm9udCBdOwotCQkgIH0KLQkJICBuZXdsYXN0ID0gbmV3bGluZTsKLQkgICAgIH0KLQl9CisgICAgICAgICBmb3IoIG9sZGxpbmUgPSAxOyBvbGRsaW5lIDw9IG9sZGluZm8ubWF4TGluZTsgb2xkbGluZSsrICkgeworICAgICAgICAgIG5ld2xpbmUgPSBvbGRpbmZvLm90aGVyWyBvbGRsaW5lIF07CisgICAgICAgICAgaWYgKCBuZXdsaW5lIDwgMCApIG9sZGZyb250ID0gMDsgIC8qIG5vIG1hdGNoOiBub3QgaW4gYmxvY2sgKi8KKyAgICAgICAgICBlbHNleyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWF0Y2guICovCisgICAgICAgICAgICAgICBpZiAoIG9sZGZyb250ID09IDAgKSAgICAgICAgIG9sZGZyb250ID0gb2xkbGluZTsKKyAgICAgICAgICAgICAgIGlmICggbmV3bGluZSAhPSAobmV3bGFzdCsxKSkgb2xkZnJvbnQgPSBvbGRsaW5lOworICAgICAgICAgICAgICAgKytibG9ja2xlblsgb2xkZnJvbnQgXTsKKyAgICAgICAgICB9CisgICAgICAgICAgbmV3bGFzdCA9IG5ld2xpbmU7CisgICAgICAgICB9CisgICAgfQogCi0JLyogVGhlIGZvbGxvd2luZyBhcmUgZ2xvYmFsIHRvIHByaW50b3V0J3Mgc3Vic2lkaWFyeSByb3V0aW5lcyAqLwotCS8vIGVudW17IGlkbGUsIGRlbGV0ZSwgaW5zZXJ0LCBtb3ZlbmV3LCBtb3Zlb2xkLAotCS8vIHNhbWUsIGNoYW5nZSB9IHByaW50c3RhdHVzOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50Ci0JCWlkbGUgPSAwLCBkZWxldGUgPSAxLCBpbnNlcnQgPSAyLCBtb3ZlbmV3ID0gMywgbW92ZW9sZCA9IDQsCi0JCXNhbWUgPSA1LCBjaGFuZ2UgPSA2OwotCWludCBwcmludHN0YXR1czsKLQlib29sZWFuIGFueXByaW50ZWQ7Ci0JaW50IHByaW50b2xkbGluZSwgcHJpbnRuZXdsaW5lOyAgICAgLy8gbGluZSBudW1iZXJzIGluIG9sZCAmIG5ldyBmaWxlCisgICAgLyogVGhlIGZvbGxvd2luZyBhcmUgZ2xvYmFsIHRvIHByaW50b3V0J3Mgc3Vic2lkaWFyeSByb3V0aW5lcyAqLworICAgIC8vIGVudW17IGlkbGUsIGRlbGV0ZSwgaW5zZXJ0LCBtb3ZlbmV3LCBtb3Zlb2xkLAorICAgIC8vIHNhbWUsIGNoYW5nZSB9IHByaW50c3RhdHVzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50CisgICAgICAgIGlkbGUgPSAwLCBkZWxldGUgPSAxLCBpbnNlcnQgPSAyLCBtb3ZlbmV3ID0gMywgbW92ZW9sZCA9IDQsCisgICAgICAgIHNhbWUgPSA1LCBjaGFuZ2UgPSA2OworICAgIGludCBwcmludHN0YXR1czsKKyAgICBib29sZWFuIGFueXByaW50ZWQ7CisgICAgaW50IHByaW50b2xkbGluZSwgcHJpbnRuZXdsaW5lOyAgICAgLy8gbGluZSBudW1iZXJzIGluIG9sZCAmIG5ldyBmaWxlCiAKLQkvKioKLQkgKiBwcmludG91dCAtIFByaW50cyBzdW1tYXJ5IHRvIHN0ZG91dC4KLQkgKiBFeHBlY3RzIGFsbCBkYXRhIHN0cnVjdHVyZXMgaGF2ZSBiZWVuIGZpbGxlZCBvdXQuCi0JICovCi0Jdm9pZCBwcmludG91dCgpCi0JewotCSAgICAgcHJpbnRzdGF0dXMgPSBpZGxlOwotCSAgICAgYW55cHJpbnRlZCA9IGZhbHNlOwotCSAgICAgZm9yKCBwcmludG9sZGxpbmUgPSBwcmludG5ld2xpbmUgPSAxOyA7ICkgewotCQkgIGlmICggcHJpbnRvbGRsaW5lID4gb2xkaW5mby5tYXhMaW5lICkgeyBuZXdjb25zdW1lKCk7IGJyZWFrO30KLQkJICBpZiAoIHByaW50bmV3bGluZSA+IG5ld2luZm8ubWF4TGluZSApIHsgb2xkY29uc3VtZSgpOyBicmVhazt9Ci0JCSAgaWYgKCAgICAgIG5ld2luZm8ub3RoZXJbIHByaW50bmV3bGluZSBdIDwgMCApIHsKLQkJICAgICAgIGlmICggb2xkaW5mby5vdGhlclsgcHJpbnRvbGRsaW5lIF0gPCAwICkKLQkJCQlzaG93Y2hhbmdlKCk7Ci0JCSAgICAgICBlbHNlCi0JCQkJc2hvd2luc2VydCgpOwotCQkgIH0KLQkJICBlbHNlIGlmICggb2xkaW5mby5vdGhlclsgcHJpbnRvbGRsaW5lIF0gPCAwICkKLQkJCXNob3dkZWxldGUoKTsKLQkJICBlbHNlIGlmICggYmxvY2tsZW5bIHByaW50b2xkbGluZSBdIDwgMCApCi0JCQlza2lwb2xkKCk7Ci0JCSAgZWxzZSBpZiAoIG9sZGluZm8ub3RoZXJbIHByaW50b2xkbGluZSBdID09IHByaW50bmV3bGluZSApCi0JCQlzaG93c2FtZSgpOwotCQkgIGVsc2UKLQkJCXNob3dtb3ZlKCk7Ci0JICAgICB9CisgICAgLyoqCisgICAgICogcHJpbnRvdXQgLSBQcmludHMgc3VtbWFyeSB0byBzdGRvdXQuCisgICAgICogRXhwZWN0cyBhbGwgZGF0YSBzdHJ1Y3R1cmVzIGhhdmUgYmVlbiBmaWxsZWQgb3V0LgorICAgICAqLworICAgIHZvaWQgcHJpbnRvdXQoKQorICAgIHsKKyAgICAgICAgIHByaW50c3RhdHVzID0gaWRsZTsKKyAgICAgICAgIGFueXByaW50ZWQgPSBmYWxzZTsKKyAgICAgICAgIGZvciggcHJpbnRvbGRsaW5lID0gcHJpbnRuZXdsaW5lID0gMTsgOyApIHsKKyAgICAgICAgICBpZiAoIHByaW50b2xkbGluZSA+IG9sZGluZm8ubWF4TGluZSApIHsgbmV3Y29uc3VtZSgpOyBicmVhazt9CisgICAgICAgICAgaWYgKCBwcmludG5ld2xpbmUgPiBuZXdpbmZvLm1heExpbmUgKSB7IG9sZGNvbnN1bWUoKTsgYnJlYWs7fQorICAgICAgICAgIGlmICggICAgICBuZXdpbmZvLm90aGVyWyBwcmludG5ld2xpbmUgXSA8IDAgKSB7CisgICAgICAgICAgICAgICBpZiAoIG9sZGluZm8ub3RoZXJbIHByaW50b2xkbGluZSBdIDwgMCApCisgICAgICAgICAgICAgICAgc2hvd2NoYW5nZSgpOworICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNob3dpbnNlcnQoKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoIG9sZGluZm8ub3RoZXJbIHByaW50b2xkbGluZSBdIDwgMCApCisgICAgICAgICAgICBzaG93ZGVsZXRlKCk7CisgICAgICAgICAgZWxzZSBpZiAoIGJsb2NrbGVuWyBwcmludG9sZGxpbmUgXSA8IDAgKQorICAgICAgICAgICAgc2tpcG9sZCgpOworICAgICAgICAgIGVsc2UgaWYgKCBvbGRpbmZvLm90aGVyWyBwcmludG9sZGxpbmUgXSA9PSBwcmludG5ld2xpbmUgKQorICAgICAgICAgICAgc2hvd3NhbWUoKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBzaG93bW92ZSgpOworICAgICAgICAgfQogCi0JICAgICBpZiAoIGFueXByaW50ZWQgPT0gdHJ1ZSApCisgICAgICAgICBpZiAoIGFueXByaW50ZWQgPT0gdHJ1ZSApCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBwcmludGxuKCAiPj4+PiBFbmQgb2YgZGlmZmVyZW5jZXMuIiAgKTsKICAgICAgICAgICAgICAgICAgLy9zdGF0LmFkZFN0YXR1cygiYXBwdmVyaWZpY2F0aW9uIGJvb2tzdG9yZSIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgIH0KIAotCSAgICAgZWxzZQorICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHByaW50bG4oICI+Pj4+IEZpbGVzIGFyZSBpZGVudGljYWwuIiApOwogICAgICAgICAgICAgICAgICAvL3N0YXQuYWRkU3RhdHVzKCJhcHB2ZXJpZmljYXRpb24gYm9va3N0b3JlIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICAgfQogCiAKLQl9CisgICAgfQogCi0JLyoKLQkgKiBuZXdjb25zdW1lICAgICAgICBQYXJ0IG9mIHByaW50b3V0LiBIYXZlIHJ1biBvdXQgb2Ygb2xkIGZpbGUuCi0JICogUHJpbnQgdGhlIHJlc3Qgb2YgdGhlIG5ldyBmaWxlLCBhcyBpbnNlcnRzIGFuZC9vciBtb3Zlcy4KLQkgKi8KLQl2b2lkIG5ld2NvbnN1bWUoKQotCXsKLQkgICAgIGZvcig7OykgewotCQkgIGlmICggcHJpbnRuZXdsaW5lID4gbmV3aW5mby5tYXhMaW5lICkKLQkJCWJyZWFrOyAgICAgICAgLyogZW5kIG9mIGZpbGUgKi8KLQkJICBpZiAoIG5ld2luZm8ub3RoZXJbIHByaW50bmV3bGluZSBdIDwgMCApIHNob3dpbnNlcnQoKTsKLQkJICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd21vdmUoKTsKLQkgICAgIH0KLQl9CisgICAgLyoKKyAgICAgKiBuZXdjb25zdW1lICAgICAgICBQYXJ0IG9mIHByaW50b3V0LiBIYXZlIHJ1biBvdXQgb2Ygb2xkIGZpbGUuCisgICAgICogUHJpbnQgdGhlIHJlc3Qgb2YgdGhlIG5ldyBmaWxlLCBhcyBpbnNlcnRzIGFuZC9vciBtb3Zlcy4KKyAgICAgKi8KKyAgICB2b2lkIG5ld2NvbnN1bWUoKQorICAgIHsKKyAgICAgICAgIGZvcig7OykgeworICAgICAgICAgIGlmICggcHJpbnRuZXdsaW5lID4gbmV3aW5mby5tYXhMaW5lICkKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgLyogZW5kIG9mIGZpbGUgKi8KKyAgICAgICAgICBpZiAoIG5ld2luZm8ub3RoZXJbIHByaW50bmV3bGluZSBdIDwgMCApIHNob3dpbnNlcnQoKTsKKyAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd21vdmUoKTsKKyAgICAgICAgIH0KKyAgICB9CiAKLQkvKioKLQkgKiBvbGRjb25zdW1lICAgICAgICBQYXJ0IG9mIHByaW50b3V0LiBIYXZlIHJ1biBvdXQgb2YgbmV3IGZpbGUuCi0JICogUHJvY2VzcyB0aGUgcmVzdCBvZiB0aGUgb2xkIGZpbGUsIHByaW50aW5nIGFueQotCSAqIHBhcnRzIHdoaWNoIHdlcmUgZGVsZXRlcyBvciBtb3Zlcy4KLQkgKi8KLQl2b2lkIG9sZGNvbnN1bWUoKQotCXsKLQkgICAgIGZvcig7OykgewotCQkgIGlmICggcHJpbnRvbGRsaW5lID4gb2xkaW5mby5tYXhMaW5lICkKLQkJCWJyZWFrOyAgICAgICAvKiBlbmQgb2YgZmlsZSAqLwotCQkgIHByaW50bmV3bGluZSA9IG9sZGluZm8ub3RoZXJbIHByaW50b2xkbGluZSBdOwotCQkgIGlmICggcHJpbnRuZXdsaW5lIDwgMCApIHNob3dkZWxldGUoKTsKLQkJICBlbHNlIGlmICggYmxvY2tsZW5bIHByaW50b2xkbGluZSBdIDwgMCApIHNraXBvbGQoKTsKLQkJICBlbHNlIHNob3dtb3ZlKCk7Ci0JICAgICB9Ci0JfQorICAgIC8qKgorICAgICAqIG9sZGNvbnN1bWUgICAgICAgIFBhcnQgb2YgcHJpbnRvdXQuIEhhdmUgcnVuIG91dCBvZiBuZXcgZmlsZS4KKyAgICAgKiBQcm9jZXNzIHRoZSByZXN0IG9mIHRoZSBvbGQgZmlsZSwgcHJpbnRpbmcgYW55CisgICAgICogcGFydHMgd2hpY2ggd2VyZSBkZWxldGVzIG9yIG1vdmVzLgorICAgICAqLworICAgIHZvaWQgb2xkY29uc3VtZSgpCisgICAgeworICAgICAgICAgZm9yKDs7KSB7CisgICAgICAgICAgaWYgKCBwcmludG9sZGxpbmUgPiBvbGRpbmZvLm1heExpbmUgKQorICAgICAgICAgICAgYnJlYWs7ICAgICAgIC8qIGVuZCBvZiBmaWxlICovCisgICAgICAgICAgcHJpbnRuZXdsaW5lID0gb2xkaW5mby5vdGhlclsgcHJpbnRvbGRsaW5lIF07CisgICAgICAgICAgaWYgKCBwcmludG5ld2xpbmUgPCAwICkgc2hvd2RlbGV0ZSgpOworICAgICAgICAgIGVsc2UgaWYgKCBibG9ja2xlblsgcHJpbnRvbGRsaW5lIF0gPCAwICkgc2tpcG9sZCgpOworICAgICAgICAgIGVsc2Ugc2hvd21vdmUoKTsKKyAgICAgICAgIH0KKyAgICB9CiAKLQkvKioKLQkgKiBzaG93ZGVsZXRlICAgICAgICBQYXJ0IG9mIHByaW50b3V0LgotCSAqIEV4cGVjdHMgcHJpbnRvbGRsaW5lIGlzIGF0IGEgZGVsZXRpb24uCi0JICovCi0Jdm9pZCBzaG93ZGVsZXRlKCkKLQl7Ci0JCWlmICggcHJpbnRzdGF0dXMgIT0gZGVsZXRlICkKKyAgICAvKioKKyAgICAgKiBzaG93ZGVsZXRlICAgICAgICBQYXJ0IG9mIHByaW50b3V0LgorICAgICAqIEV4cGVjdHMgcHJpbnRvbGRsaW5lIGlzIGF0IGEgZGVsZXRpb24uCisgICAgICovCisgICAgdm9pZCBzaG93ZGVsZXRlKCkKKyAgICB7CisgICAgICAgIGlmICggcHJpbnRzdGF0dXMgIT0gZGVsZXRlICkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHByaW50bG4oIkZvbGxvd2luZyB0ZXN0IGRpZG4ndCBnZXQgcnVuLS0tLS0tLS0+Iik7CiAgICAgICAgICAgICAgICAgICAgIC8vcHJpbnRsbiggIj4+Pj4+Pj4+Pj4+Pj4+Pj4+IERFTEVURSBBVCAiICsgcHJpbnRvbGRsaW5lKTsKICAgICAgICAgICAgICAgICB9Ci0JCXByaW50c3RhdHVzID0gZGVsZXRlOwotCQlvbGRpbmZvLnN5bWJvbFsgcHJpbnRvbGRsaW5lIF0uc2hvd1N5bWJvbCgpOwotCQlhbnlwcmludGVkID0gdHJ1ZTsKLQkJcHJpbnRvbGRsaW5lKys7ICAgICAgICAgICAgICAgIAotCX0KKyAgICAgICAgcHJpbnRzdGF0dXMgPSBkZWxldGU7CisgICAgICAgIG9sZGluZm8uc3ltYm9sWyBwcmludG9sZGxpbmUgXS5zaG93U3ltYm9sKCk7CisgICAgICAgIGFueXByaW50ZWQgPSB0cnVlOworICAgICAgICBwcmludG9sZGxpbmUrKzsKKyAgICB9CiAKLQkvKgotCSAqIHNob3dpbnNlcnQgICAgICAgIFBhcnQgb2YgcHJpbnRvdXQuCi0JICogRXhwZWN0cyBwcmludG5ld2xpbmUgaXMgYXQgYW4gaW5zZXJ0aW9uLgotCSAqLwotCXZvaWQgc2hvd2luc2VydCgpCi0JewotCSAgICAgaWYgKCBwcmludHN0YXR1cyA9PSBjaGFuZ2UgKSBwcmludGxuKCAiPj4+Pj4+Pj4+Pj4+PiAgICAgQ0hBTkdFRCBUTyIgKTsKLQkgICAgIGVsc2UgaWYgKCBwcmludHN0YXR1cyAhPSBpbnNlcnQgKQotCQkgIHByaW50bG4oICI+Pj4+Pj4+Pj4+Pj4+Pj4+IElOU0VSVCBCRUZPUkUgIiArIHByaW50b2xkbGluZSApOwotCSAgICAgcHJpbnRzdGF0dXMgPSBpbnNlcnQ7Ci0JICAgICBuZXdpbmZvLnN5bWJvbFsgcHJpbnRuZXdsaW5lIF0uc2hvd1N5bWJvbCgpOwotCSAgICAgYW55cHJpbnRlZCA9IHRydWU7Ci0JICAgICBwcmludG5ld2xpbmUrKzsKLQl9CisgICAgLyoKKyAgICAgKiBzaG93aW5zZXJ0ICAgICAgICBQYXJ0IG9mIHByaW50b3V0LgorICAgICAqIEV4cGVjdHMgcHJpbnRuZXdsaW5lIGlzIGF0IGFuIGluc2VydGlvbi4KKyAgICAgKi8KKyAgICB2b2lkIHNob3dpbnNlcnQoKQorICAgIHsKKyAgICAgICAgIGlmICggcHJpbnRzdGF0dXMgPT0gY2hhbmdlICkgcHJpbnRsbiggIj4+Pj4+Pj4+Pj4+Pj4gICAgIENIQU5HRUQgVE8iICk7CisgICAgICAgICBlbHNlIGlmICggcHJpbnRzdGF0dXMgIT0gaW5zZXJ0ICkKKyAgICAgICAgICBwcmludGxuKCAiPj4+Pj4+Pj4+Pj4+Pj4+PiBJTlNFUlQgQkVGT1JFICIgKyBwcmludG9sZGxpbmUgKTsKKyAgICAgICAgIHByaW50c3RhdHVzID0gaW5zZXJ0OworICAgICAgICAgbmV3aW5mby5zeW1ib2xbIHByaW50bmV3bGluZSBdLnNob3dTeW1ib2woKTsKKyAgICAgICAgIGFueXByaW50ZWQgPSB0cnVlOworICAgICAgICAgcHJpbnRuZXdsaW5lKys7CisgICAgfQogCi0JLyoqCi0JICogc2hvd2NoYW5nZSAgICAgICAgUGFydCBvZiBwcmludG91dC4KLQkgKiBFeHBlY3RzIHByaW50bmV3bGluZSBpcyBhbiBpbnNlcnRpb24uCi0JICogIEV4cGVjdHMgcHJpbnRvbGRsaW5lIGlzIGEgZGVsZXRpb24uCi0JICovCi0Jdm9pZCBzaG93Y2hhbmdlKCkKLQl7Ci0JICAgICBpZiAoIHByaW50c3RhdHVzICE9IGNoYW5nZSApCi0JCSAgcHJpbnRsbiggIj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PiAiICsgcHJpbnRvbGRsaW5lICsgIiBDSEFOR0VEIEZST00iKTsKLQkgICAgIHByaW50c3RhdHVzID0gY2hhbmdlOwotCSAgICAgb2xkaW5mby5zeW1ib2xbIHByaW50b2xkbGluZSBdLnNob3dTeW1ib2woKTsKLQkgICAgIGFueXByaW50ZWQgPSB0cnVlOwotCSAgICAgcHJpbnRvbGRsaW5lKys7Ci0JfQorICAgIC8qKgorICAgICAqIHNob3djaGFuZ2UgICAgICAgIFBhcnQgb2YgcHJpbnRvdXQuCisgICAgICogRXhwZWN0cyBwcmludG5ld2xpbmUgaXMgYW4gaW5zZXJ0aW9uLgorICAgICAqICBFeHBlY3RzIHByaW50b2xkbGluZSBpcyBhIGRlbGV0aW9uLgorICAgICAqLworICAgIHZvaWQgc2hvd2NoYW5nZSgpCisgICAgeworICAgICAgICAgaWYgKCBwcmludHN0YXR1cyAhPSBjaGFuZ2UgKQorICAgICAgICAgIHByaW50bG4oICI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4gIiArIHByaW50b2xkbGluZSArICIgQ0hBTkdFRCBGUk9NIik7CisgICAgICAgICBwcmludHN0YXR1cyA9IGNoYW5nZTsKKyAgICAgICAgIG9sZGluZm8uc3ltYm9sWyBwcmludG9sZGxpbmUgXS5zaG93U3ltYm9sKCk7CisgICAgICAgICBhbnlwcmludGVkID0gdHJ1ZTsKKyAgICAgICAgIHByaW50b2xkbGluZSsrOworICAgIH0KIAotCS8qKgotCSAqIHNraXBvbGQgICAgICAgICAgIFBhcnQgb2YgcHJpbnRvdXQuCi0JICogRXhwZWN0cyBwcmludG9sZGxpbmUgYXQgc3RhcnQgb2YgYW4gb2xkIGJsb2NrIHRoYXQgaGFzCi0JICogYWxyZWFkeSBiZWVuIGFubm91bmNlZCBhcyBhIG1vdmUuCi0JICogU2tpcHMgb3ZlciB0aGUgb2xkIGJsb2NrLgotCSAqLwotCXZvaWQgc2tpcG9sZCgpCi0JewotCSAgICAgcHJpbnRzdGF0dXMgPSBpZGxlOwotCSAgICAgZm9yKDs7KSB7Ci0JCSAgaWYgKCArK3ByaW50b2xkbGluZSA+IG9sZGluZm8ubWF4TGluZSApCi0JCQlicmVhazsgICAgIC8qIGVuZCBvZiBmaWxlICAqLwotCQkgIGlmICggb2xkaW5mby5vdGhlclsgcHJpbnRvbGRsaW5lIF0gPCAwICkKLQkJCWJyZWFrOyAgICAvKiBlbmQgb2YgYmxvY2sgKi8KLQkJICBpZiAoIGJsb2NrbGVuWyBwcmludG9sZGxpbmUgXSE9MCkKLQkJCWJyZWFrOyAgICAgICAgICAvKiBzdGFydCBvZiBhbm90aGVyICovCi0JICAgICB9Ci0JfQorICAgIC8qKgorICAgICAqIHNraXBvbGQgICAgICAgICAgIFBhcnQgb2YgcHJpbnRvdXQuCisgICAgICogRXhwZWN0cyBwcmludG9sZGxpbmUgYXQgc3RhcnQgb2YgYW4gb2xkIGJsb2NrIHRoYXQgaGFzCisgICAgICogYWxyZWFkeSBiZWVuIGFubm91bmNlZCBhcyBhIG1vdmUuCisgICAgICogU2tpcHMgb3ZlciB0aGUgb2xkIGJsb2NrLgorICAgICAqLworICAgIHZvaWQgc2tpcG9sZCgpCisgICAgeworICAgICAgICAgcHJpbnRzdGF0dXMgPSBpZGxlOworICAgICAgICAgZm9yKDs7KSB7CisgICAgICAgICAgaWYgKCArK3ByaW50b2xkbGluZSA+IG9sZGluZm8ubWF4TGluZSApCisgICAgICAgICAgICBicmVhazsgICAgIC8qIGVuZCBvZiBmaWxlICAqLworICAgICAgICAgIGlmICggb2xkaW5mby5vdGhlclsgcHJpbnRvbGRsaW5lIF0gPCAwICkKKyAgICAgICAgICAgIGJyZWFrOyAgICAvKiBlbmQgb2YgYmxvY2sgKi8KKyAgICAgICAgICBpZiAoIGJsb2NrbGVuWyBwcmludG9sZGxpbmUgXSE9MCkKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBzdGFydCBvZiBhbm90aGVyICovCisgICAgICAgICB9CisgICAgfQogCi0JLyoqCi0JICogc2tpcG5ldyAgICAgICAgICAgUGFydCBvZiBwcmludG91dC4KLQkgKiBFeHBlY3RzIHByaW50bmV3bGluZSBpcyBhdCBzdGFydCBvZiBhIG5ldyBibG9jayB0aGF0IGhhcwotCSAqIGFscmVhZHkgYmVlbiBhbm5vdW5jZWQgYXMgYSBtb3ZlLgotCSAqIFNraXBzIG92ZXIgdGhlIG5ldyBibG9jay4KLQkgKi8KLQl2b2lkIHNraXBuZXcoKQotCXsKLQkgICAgIGludCBvbGRsaW5lOwotCSAgICAgcHJpbnRzdGF0dXMgPSBpZGxlOwotCSAgICAgZm9yKDs7KSB7Ci0JCSAgaWYgKCArK3ByaW50bmV3bGluZSA+IG5ld2luZm8ubWF4TGluZSApCi0JCQlicmVhazsgICAgLyogZW5kIG9mIGZpbGUgICovCi0JCSAgb2xkbGluZSA9IG5ld2luZm8ub3RoZXJbIHByaW50bmV3bGluZSBdOwotCQkgIGlmICggb2xkbGluZSA8IDAgKQotCQkJYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBvZiBibG9jayAqLwotCQkgIGlmICggYmxvY2tsZW5bIG9sZGxpbmUgXSAhPSAwKQotCQkJYnJlYWs7ICAgICAgICAgICAgICAvKiBzdGFydCBvZiBhbm90aGVyICovCi0JICAgICB9Ci0JfQorICAgIC8qKgorICAgICAqIHNraXBuZXcgICAgICAgICAgIFBhcnQgb2YgcHJpbnRvdXQuCisgICAgICogRXhwZWN0cyBwcmludG5ld2xpbmUgaXMgYXQgc3RhcnQgb2YgYSBuZXcgYmxvY2sgdGhhdCBoYXMKKyAgICAgKiBhbHJlYWR5IGJlZW4gYW5ub3VuY2VkIGFzIGEgbW92ZS4KKyAgICAgKiBTa2lwcyBvdmVyIHRoZSBuZXcgYmxvY2suCisgICAgICovCisgICAgdm9pZCBza2lwbmV3KCkKKyAgICB7CisgICAgICAgICBpbnQgb2xkbGluZTsKKyAgICAgICAgIHByaW50c3RhdHVzID0gaWRsZTsKKyAgICAgICAgIGZvcig7OykgeworICAgICAgICAgIGlmICggKytwcmludG5ld2xpbmUgPiBuZXdpbmZvLm1heExpbmUgKQorICAgICAgICAgICAgYnJlYWs7ICAgIC8qIGVuZCBvZiBmaWxlICAqLworICAgICAgICAgIG9sZGxpbmUgPSBuZXdpbmZvLm90aGVyWyBwcmludG5ld2xpbmUgXTsKKyAgICAgICAgICBpZiAoIG9sZGxpbmUgPCAwICkKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgb2YgYmxvY2sgKi8KKyAgICAgICAgICBpZiAoIGJsb2NrbGVuWyBvbGRsaW5lIF0gIT0gMCkKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgLyogc3RhcnQgb2YgYW5vdGhlciAqLworICAgICAgICAgfQorICAgIH0KIAotCS8qKgotCSAqIHNob3dzYW1lICAgICAgICAgIFBhcnQgb2YgcHJpbnRvdXQuCi0JICogRXhwZWN0cyBwcmludG5ld2xpbmUgYW5kIHByaW50b2xkbGluZSBhdCBzdGFydCBvZgotCSAqIHR3byBibG9ja3MgdGhhdCBhcmVuJ3QgdG8gYmUgZGlzcGxheWVkLgotCSAqLwotCXZvaWQgc2hvd3NhbWUoKQotCXsKLQkgICAgIGludCBjb3VudDsKLQkgICAgIHByaW50c3RhdHVzID0gaWRsZTsKLQkgICAgIGlmICggbmV3aW5mby5vdGhlclsgcHJpbnRuZXdsaW5lIF0gIT0gcHJpbnRvbGRsaW5lICkgewotCQkgIFN5c3RlbS5lcnIucHJpbnRsbigiQlVHIElOIExJTkUgUkVGRVJFTkNJTkciKTsKLQkJICBTeXN0ZW0uZXhpdCgxKTsKLQkgICAgIH0KLQkgICAgIGNvdW50ID0gYmxvY2tsZW5bIHByaW50b2xkbGluZSBdOwotCSAgICAgcHJpbnRvbGRsaW5lICs9IGNvdW50OwotCSAgICAgcHJpbnRuZXdsaW5lICs9IGNvdW50OwotCX0KKyAgICAvKioKKyAgICAgKiBzaG93c2FtZSAgICAgICAgICBQYXJ0IG9mIHByaW50b3V0LgorICAgICAqIEV4cGVjdHMgcHJpbnRuZXdsaW5lIGFuZCBwcmludG9sZGxpbmUgYXQgc3RhcnQgb2YKKyAgICAgKiB0d28gYmxvY2tzIHRoYXQgYXJlbid0IHRvIGJlIGRpc3BsYXllZC4KKyAgICAgKi8KKyAgICB2b2lkIHNob3dzYW1lKCkKKyAgICB7CisgICAgICAgICBpbnQgY291bnQ7CisgICAgICAgICBwcmludHN0YXR1cyA9IGlkbGU7CisgICAgICAgICBpZiAoIG5ld2luZm8ub3RoZXJbIHByaW50bmV3bGluZSBdICE9IHByaW50b2xkbGluZSApIHsKKyAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkJVRyBJTiBMSU5FIFJFRkVSRU5DSU5HIik7CisgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CisgICAgICAgICB9CisgICAgICAgICBjb3VudCA9IGJsb2NrbGVuWyBwcmludG9sZGxpbmUgXTsKKyAgICAgICAgIHByaW50b2xkbGluZSArPSBjb3VudDsKKyAgICAgICAgIHByaW50bmV3bGluZSArPSBjb3VudDsKKyAgICB9CiAKLQkvKioKLQkgKiBzaG93bW92ZSAgICAgICAgICBQYXJ0IG9mIHByaW50b3V0LgotCSAqIEV4cGVjdHMgcHJpbnRvbGRsaW5lLCBwcmludG5ld2xpbmUgYXQgc3RhcnQgb2YKLQkgKiB0d28gZGlmZmVyZW50IGJsb2NrcyAoIGEgbW92ZSB3YXMgZG9uZSkuCi0JICovCi0Jdm9pZCBzaG93bW92ZSgpCi0JewotCSAgICAgaW50IG9sZGJsb2NrID0gYmxvY2tsZW5bIHByaW50b2xkbGluZSBdOwotCSAgICAgaW50IG5ld290aGVyID0gbmV3aW5mby5vdGhlclsgcHJpbnRuZXdsaW5lIF07Ci0JICAgICBpbnQgbmV3YmxvY2sgPSBibG9ja2xlblsgbmV3b3RoZXIgXTsKKyAgICAvKioKKyAgICAgKiBzaG93bW92ZSAgICAgICAgICBQYXJ0IG9mIHByaW50b3V0LgorICAgICAqIEV4cGVjdHMgcHJpbnRvbGRsaW5lLCBwcmludG5ld2xpbmUgYXQgc3RhcnQgb2YKKyAgICAgKiB0d28gZGlmZmVyZW50IGJsb2NrcyAoIGEgbW92ZSB3YXMgZG9uZSkuCisgICAgICovCisgICAgdm9pZCBzaG93bW92ZSgpCisgICAgeworICAgICAgICAgaW50IG9sZGJsb2NrID0gYmxvY2tsZW5bIHByaW50b2xkbGluZSBdOworICAgICAgICAgaW50IG5ld290aGVyID0gbmV3aW5mby5vdGhlclsgcHJpbnRuZXdsaW5lIF07CisgICAgICAgICBpbnQgbmV3YmxvY2sgPSBibG9ja2xlblsgbmV3b3RoZXIgXTsKIAotCSAgICAgaWYgKCBuZXdibG9jayA8IDAgKSBza2lwbmV3KCk7ICAgICAgICAgLy8gYWxyZWFkeSBwcmludGVkLgotCSAgICAgZWxzZSBpZiAoIG9sZGJsb2NrID49IG5ld2Jsb2NrICkgeyAgICAgLy8gYXNzdW1lIG5ldydzIGJsayBtb3ZlZC4KLQkJICBibG9ja2xlbltuZXdvdGhlcl0gPSAtMTsgICAgICAgICAvLyBzdGFtcCBibG9jayBhcyAicHJpbnRlZCIuCi0JCSAgcHJpbnRsbiggIj4+Pj4gIiArIG5ld290aGVyICsKLQkJCSIgVEhSVSAiICsgKG5ld290aGVyICsgbmV3YmxvY2sgLSAxKSArCi0JCQkiIE1PVkVEIFRPIEJFRk9SRSAiICsgcHJpbnRvbGRsaW5lICk7Ci0JCSAgZm9yKCA7IG5ld2Jsb2NrID4gMDsgbmV3YmxvY2stLSwgcHJpbnRuZXdsaW5lKysgKQotCQkgICAgICAgbmV3aW5mby5zeW1ib2xbIHByaW50bmV3bGluZSBdLnNob3dTeW1ib2woKTsKLQkJICBhbnlwcmludGVkID0gdHJ1ZTsKLQkJICBwcmludHN0YXR1cyA9IGlkbGU7CisgICAgICAgICBpZiAoIG5ld2Jsb2NrIDwgMCApIHNraXBuZXcoKTsgICAgICAgICAvLyBhbHJlYWR5IHByaW50ZWQuCisgICAgICAgICBlbHNlIGlmICggb2xkYmxvY2sgPj0gbmV3YmxvY2sgKSB7ICAgICAvLyBhc3N1bWUgbmV3J3MgYmxrIG1vdmVkLgorICAgICAgICAgIGJsb2NrbGVuW25ld290aGVyXSA9IC0xOyAgICAgICAgIC8vIHN0YW1wIGJsb2NrIGFzICJwcmludGVkIi4KKyAgICAgICAgICBwcmludGxuKCAiPj4+PiAiICsgbmV3b3RoZXIgKworICAgICAgICAgICAgIiBUSFJVICIgKyAobmV3b3RoZXIgKyBuZXdibG9jayAtIDEpICsKKyAgICAgICAgICAgICIgTU9WRUQgVE8gQkVGT1JFICIgKyBwcmludG9sZGxpbmUgKTsKKyAgICAgICAgICBmb3IoIDsgbmV3YmxvY2sgPiAwOyBuZXdibG9jay0tLCBwcmludG5ld2xpbmUrKyApCisgICAgICAgICAgICAgICBuZXdpbmZvLnN5bWJvbFsgcHJpbnRuZXdsaW5lIF0uc2hvd1N5bWJvbCgpOworICAgICAgICAgIGFueXByaW50ZWQgPSB0cnVlOworICAgICAgICAgIHByaW50c3RhdHVzID0gaWRsZTsKIAotCSAgICAgfSBlbHNlICAgICAgICAgICAgICAgIC8qIGFzc3VtZSBvbGQncyBibG9jayBtb3ZlZCAqLwotCQkgIHNraXBvbGQoKTsgICAgICAvKiB0YXJnZXQgbGluZSMgbm90IGtub3duLCBkaXNwbGF5IGxhdGVyICovCi0JfQorICAgICAgICAgfSBlbHNlICAgICAgICAgICAgICAgIC8qIGFzc3VtZSBvbGQncyBibG9jayBtb3ZlZCAqLworICAgICAgICAgIHNraXBvbGQoKTsgICAgICAvKiB0YXJnZXQgbGluZSMgbm90IGtub3duLCBkaXNwbGF5IGxhdGVyICovCisgICAgfQogCi0JLyoqIENvbnZlbmllbmNlIHdyYXBwZXIgZm9yIHByaW50bG4gKi8KLQlwdWJsaWMgdm9pZCBwcmludGxuKFN0cmluZyBzKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihzKTsKLQl9Ci19OwkJCQkvLyBlbmQgb2YgbWFpbiBjbGFzcyEKKyAgICAvKiogQ29udmVuaWVuY2Ugd3JhcHBlciBmb3IgcHJpbnRsbiAqLworICAgIHB1YmxpYyB2b2lkIHByaW50bG4oU3RyaW5nIHMpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMpOworICAgIH0KK307ICAgICAgICAgICAgICAgIC8vIGVuZCBvZiBtYWluIGNsYXNzIQogCiAvKioKICAqIENsYXNzICJub2RlIi4gVGhlIHN5bWJvbCB0YWJsZSByb3V0aW5lcyBpbiB0aGlzIGNsYXNzIGFsbApAQCAtNTY3LDk4ICs1NjcsOTggQEAKICAqIFRoZSBtZXRob2RzIGFyZTogYWRkU3ltYm9sLCBzeW1ib2xJc1VuaXF1ZSwgc2hvd1N5bWJvbC4KICAqLwogY2xhc3Mgbm9kZXsgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoZSB0cmVlIGlzIG1hZGUgdXAgb2YgdGhlc2Ugbm9kZXMgKi8KLQlub2RlIHBsZWZ0LCBwcmlnaHQ7Ci0JaW50IGxpbmVudW07CisgICAgbm9kZSBwbGVmdCwgcHJpZ2h0OworICAgIGludCBsaW5lbnVtOwogCi0Jc3RhdGljIGZpbmFsIGludCBmcmVzaG5vZGUgPSAwLAotCW9sZG9uY2UgPSAxLCBuZXdvbmNlID0gMiwgYm90aG9uY2UgPSAzLCBvdGhlciA9IDQ7CisgICAgc3RhdGljIGZpbmFsIGludCBmcmVzaG5vZGUgPSAwLAorICAgIG9sZG9uY2UgPSAxLCBuZXdvbmNlID0gMiwgYm90aG9uY2UgPSAzLCBvdGhlciA9IDQ7CiAKLQlpbnQgLyogZW51bSBsaW5lc3RhdGVzICovIGxpbmVzdGF0ZTsKLQlTdHJpbmcgbGluZTsKKyAgICBpbnQgLyogZW51bSBsaW5lc3RhdGVzICovIGxpbmVzdGF0ZTsKKyAgICBTdHJpbmcgbGluZTsKIAotCXN0YXRpYyBub2RlIHBhbmNob3IgPSBudWxsOyAgICAvKiBzeW10YWIgaXMgYSB0cmVlIGh1bmcgZnJvbSB0aGlzICovCisgICAgc3RhdGljIG5vZGUgcGFuY2hvciA9IG51bGw7ICAgIC8qIHN5bXRhYiBpcyBhIHRyZWUgaHVuZyBmcm9tIHRoaXMgKi8KIAotCS8qKgotCSAqIENvbnN0cnVjdCBhIG5ldyBzeW1ib2wgdGFibGUgbm9kZSBhbmQgZmlsbCBpbiBpdHMgZmllbGRzLgotCSAqIEBwYXJhbSAgICAgICAgc3RyaW5nCUEgbGluZSBvZiB0aGUgdGV4dCBmaWxlCi0JICovCi0Jbm9kZSggU3RyaW5nIHBsaW5lKQotCXsKLQkgICAgIHBsZWZ0ID0gcHJpZ2h0ID0gbnVsbDsKLQkgICAgIGxpbmVzdGF0ZSA9IGZyZXNobm9kZTsKLQkgICAgIC8qIGxpbmVudW0gZmllbGQgaXMgbm90IGFsd2F5cyB2YWxpZCAqLwotCSAgICAgbGluZSA9IHBsaW5lOwotCX0KKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgc3ltYm9sIHRhYmxlIG5vZGUgYW5kIGZpbGwgaW4gaXRzIGZpZWxkcy4KKyAgICAgKiBAcGFyYW0gICAgICAgIHN0cmluZyAgICBBIGxpbmUgb2YgdGhlIHRleHQgZmlsZQorICAgICAqLworICAgIG5vZGUoIFN0cmluZyBwbGluZSkKKyAgICB7CisgICAgICAgICBwbGVmdCA9IHByaWdodCA9IG51bGw7CisgICAgICAgICBsaW5lc3RhdGUgPSBmcmVzaG5vZGU7CisgICAgICAgICAvKiBsaW5lbnVtIGZpZWxkIGlzIG5vdCBhbHdheXMgdmFsaWQgKi8KKyAgICAgICAgIGxpbmUgPSBwbGluZTsKKyAgICB9CiAKLQkvKioKLQkgKiBtYXRjaHN5bWJvbCAgICAgICBTZWFyY2hlcyB0cmVlIGZvciBhIG1hdGNoIHRvIHRoZSBsaW5lLgotCSAqIEBwYXJhbQlTdHJpbmcJcGxpbmUsIGEgbGluZSBvZiB0ZXh0Ci0JICogSWYgbm9kZSdzIGxpbmVzdGF0ZSA9PSBmcmVzaG5vZGUsIHRoZW4gY3JlYXRlZCB0aGUgbm9kZS4KLQkgKi8KLQlzdGF0aWMgbm9kZSBtYXRjaHN5bWJvbCggU3RyaW5nIHBsaW5lICkKLQl7Ci0JICAgICBpbnQgY29tcGFyaXNvbjsKLQkgICAgIG5vZGUgcG5vZGUgPSBwYW5jaG9yOwotCSAgICAgaWYgKCBwYW5jaG9yID09IG51bGwgKSByZXR1cm4gcGFuY2hvciA9IG5ldyBub2RlKCBwbGluZSk7Ci0JICAgICBmb3IoOzspIHsKLQkJICBjb21wYXJpc29uID0gcG5vZGUubGluZS5jb21wYXJlVG8ocGxpbmUpOwotCQkgIGlmICggY29tcGFyaXNvbiA9PSAwICkgcmV0dXJuIHBub2RlOyAgICAgICAgICAvKiBmb3VuZCAqLworICAgIC8qKgorICAgICAqIG1hdGNoc3ltYm9sICAgICAgIFNlYXJjaGVzIHRyZWUgZm9yIGEgbWF0Y2ggdG8gdGhlIGxpbmUuCisgICAgICogQHBhcmFtICAgIFN0cmluZyAgICBwbGluZSwgYSBsaW5lIG9mIHRleHQKKyAgICAgKiBJZiBub2RlJ3MgbGluZXN0YXRlID09IGZyZXNobm9kZSwgdGhlbiBjcmVhdGVkIHRoZSBub2RlLgorICAgICAqLworICAgIHN0YXRpYyBub2RlIG1hdGNoc3ltYm9sKCBTdHJpbmcgcGxpbmUgKQorICAgIHsKKyAgICAgICAgIGludCBjb21wYXJpc29uOworICAgICAgICAgbm9kZSBwbm9kZSA9IHBhbmNob3I7CisgICAgICAgICBpZiAoIHBhbmNob3IgPT0gbnVsbCApIHJldHVybiBwYW5jaG9yID0gbmV3IG5vZGUoIHBsaW5lKTsKKyAgICAgICAgIGZvcig7OykgeworICAgICAgICAgIGNvbXBhcmlzb24gPSBwbm9kZS5saW5lLmNvbXBhcmVUbyhwbGluZSk7CisgICAgICAgICAgaWYgKCBjb21wYXJpc29uID09IDAgKSByZXR1cm4gcG5vZGU7ICAgICAgICAgIC8qIGZvdW5kICovCiAKLQkJICBpZiAoIGNvbXBhcmlzb24gPCAwICkgewotCQkgICAgICAgaWYgKCBwbm9kZS5wbGVmdCA9PSBudWxsICkgewotCQkJICAgIHBub2RlLnBsZWZ0ID0gbmV3IG5vZGUoIHBsaW5lKTsKLQkJCSAgICByZXR1cm4gcG5vZGUucGxlZnQ7Ci0JCSAgICAgICB9Ci0JCSAgICAgICBwbm9kZSA9IHBub2RlLnBsZWZ0OwotCQkgIH0KLQkJICBpZiAoIGNvbXBhcmlzb24gPiAwICkgewotCQkgICAgICAgaWYgKCBwbm9kZS5wcmlnaHQgPT0gbnVsbCApIHsKLQkJCSAgICBwbm9kZS5wcmlnaHQgPSBuZXcgbm9kZSggcGxpbmUpOwotCQkJICAgIHJldHVybiBwbm9kZS5wcmlnaHQ7Ci0JCSAgICAgICB9Ci0JCSAgICAgICBwbm9kZSA9IHBub2RlLnByaWdodDsKLQkJICB9Ci0JICAgICB9Ci0JICAgICAvKiBOT1RFOiBUaGVyZSBhcmUgcmV0dXJuIHN0bXRzLCBzbyBjb250cm9sIGRvZXMgbm90IGdldCBoZXJlLiAqLwotCX0KKyAgICAgICAgICBpZiAoIGNvbXBhcmlzb24gPCAwICkgeworICAgICAgICAgICAgICAgaWYgKCBwbm9kZS5wbGVmdCA9PSBudWxsICkgeworICAgICAgICAgICAgICAgIHBub2RlLnBsZWZ0ID0gbmV3IG5vZGUoIHBsaW5lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcG5vZGUucGxlZnQ7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBwbm9kZSA9IHBub2RlLnBsZWZ0OworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoIGNvbXBhcmlzb24gPiAwICkgeworICAgICAgICAgICAgICAgaWYgKCBwbm9kZS5wcmlnaHQgPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICBwbm9kZS5wcmlnaHQgPSBuZXcgbm9kZSggcGxpbmUpOworICAgICAgICAgICAgICAgIHJldHVybiBwbm9kZS5wcmlnaHQ7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBwbm9kZSA9IHBub2RlLnByaWdodDsKKyAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgICAvKiBOT1RFOiBUaGVyZSBhcmUgcmV0dXJuIHN0bXRzLCBzbyBjb250cm9sIGRvZXMgbm90IGdldCBoZXJlLiAqLworICAgIH0KIAotCS8qKgotCSAqIGFkZFN5bWJvbChTdHJpbmcgcGxpbmUpIC0gU2F2ZXMgbGluZSBpbnRvIHRoZSBzeW1ib2wgdGFibGUuCi0JICogUmV0dXJucyBhIGhhbmRsZSB0byB0aGUgc3ltdGFiIGVudHJ5IGZvciB0aGF0IHVuaXF1ZSBsaW5lLgotCSAqIElmIGlub2xkZmlsZSBub256ZXJvLCB0aGVuIGxpbmVudW0gaXMgcmVtZW1iZXJlZC4KLQkgKi8KLQlzdGF0aWMgbm9kZSBhZGRTeW1ib2woIFN0cmluZyBwbGluZSwgYm9vbGVhbiBpbm9sZGZpbGUsIGludCBsaW5lbnVtICkKLQl7Ci0JCW5vZGUgcG5vZGU7Ci0JCXBub2RlID0gbWF0Y2hzeW1ib2woIHBsaW5lICk7ICAvKiBmaW5kIHRoZSBub2RlIGluIHRoZSB0cmVlICovCi0JCWlmICggcG5vZGUubGluZXN0YXRlID09IGZyZXNobm9kZSApIHsKLQkJCXBub2RlLmxpbmVzdGF0ZSA9IGlub2xkZmlsZSA/IG9sZG9uY2UgOiBuZXdvbmNlOwotCQl9IGVsc2UgewotCQkgIGlmICgoIHBub2RlLmxpbmVzdGF0ZSA9PSBvbGRvbmNlICYmICFpbm9sZGZpbGUgKSB8fAotCQkgICAgICAoIHBub2RlLmxpbmVzdGF0ZSA9PSBuZXdvbmNlICYmICBpbm9sZGZpbGUgKSkKLQkJICAgICAgIHBub2RlLmxpbmVzdGF0ZSA9IGJvdGhvbmNlOwotCQkgIGVsc2UgcG5vZGUubGluZXN0YXRlID0gb3RoZXI7Ci0JCX0KLQkJaWYgKGlub2xkZmlsZSkgcG5vZGUubGluZW51bSA9IGxpbmVudW07Ci0JCXJldHVybiBwbm9kZTsKLQl9CisgICAgLyoqCisgICAgICogYWRkU3ltYm9sKFN0cmluZyBwbGluZSkgLSBTYXZlcyBsaW5lIGludG8gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgKiBSZXR1cm5zIGEgaGFuZGxlIHRvIHRoZSBzeW10YWIgZW50cnkgZm9yIHRoYXQgdW5pcXVlIGxpbmUuCisgICAgICogSWYgaW5vbGRmaWxlIG5vbnplcm8sIHRoZW4gbGluZW51bSBpcyByZW1lbWJlcmVkLgorICAgICAqLworICAgIHN0YXRpYyBub2RlIGFkZFN5bWJvbCggU3RyaW5nIHBsaW5lLCBib29sZWFuIGlub2xkZmlsZSwgaW50IGxpbmVudW0gKQorICAgIHsKKyAgICAgICAgbm9kZSBwbm9kZTsKKyAgICAgICAgcG5vZGUgPSBtYXRjaHN5bWJvbCggcGxpbmUgKTsgIC8qIGZpbmQgdGhlIG5vZGUgaW4gdGhlIHRyZWUgKi8KKyAgICAgICAgaWYgKCBwbm9kZS5saW5lc3RhdGUgPT0gZnJlc2hub2RlICkgeworICAgICAgICAgICAgcG5vZGUubGluZXN0YXRlID0gaW5vbGRmaWxlID8gb2xkb25jZSA6IG5ld29uY2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaWYgKCggcG5vZGUubGluZXN0YXRlID09IG9sZG9uY2UgJiYgIWlub2xkZmlsZSApIHx8CisgICAgICAgICAgICAgICggcG5vZGUubGluZXN0YXRlID09IG5ld29uY2UgJiYgIGlub2xkZmlsZSApKQorICAgICAgICAgICAgICAgcG5vZGUubGluZXN0YXRlID0gYm90aG9uY2U7CisgICAgICAgICAgZWxzZSBwbm9kZS5saW5lc3RhdGUgPSBvdGhlcjsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5vbGRmaWxlKSBwbm9kZS5saW5lbnVtID0gbGluZW51bTsKKyAgICAgICAgcmV0dXJuIHBub2RlOworICAgIH0KIAotCS8qKgotCSAqIHN5bWJvbElzVW5pcXVlICAgIEFyZyBpcyBhIHB0ciBwcmV2aW91c2x5IHJldHVybmVkIGJ5IGFkZFN5bWJvbC4KLQkgKiAtLS0tLS0tLS0tLS0tLSAgICBSZXR1cm5zIHRydWUgaWYgdGhlIGxpbmUgd2FzIGFkZGVkIHRvIHRoZQotCSAqICAgICAgICAgICAgICAgICAgIHN5bWJvbCB0YWJsZSBleGFjdGx5IG9uY2Ugd2l0aCBpbm9sZGZpbGUgdHJ1ZSwKLQkgKiAgICAgICAgICAgICAgICAgICBhbmQgZXhhY3RseSBvbmNlIHdpdGggaW5vbGRmaWxlIGZhbHNlLgotCSAqLwotCWJvb2xlYW4gc3ltYm9sSXNVbmlxdWUoKQotCXsKLQkJcmV0dXJuIChsaW5lc3RhdGUgPT0gYm90aG9uY2UgKTsKLQl9CisgICAgLyoqCisgICAgICogc3ltYm9sSXNVbmlxdWUgICAgQXJnIGlzIGEgcHRyIHByZXZpb3VzbHkgcmV0dXJuZWQgYnkgYWRkU3ltYm9sLgorICAgICAqIC0tLS0tLS0tLS0tLS0tICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgbGluZSB3YXMgYWRkZWQgdG8gdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgc3ltYm9sIHRhYmxlIGV4YWN0bHkgb25jZSB3aXRoIGlub2xkZmlsZSB0cnVlLAorICAgICAqICAgICAgICAgICAgICAgICAgIGFuZCBleGFjdGx5IG9uY2Ugd2l0aCBpbm9sZGZpbGUgZmFsc2UuCisgICAgICovCisgICAgYm9vbGVhbiBzeW1ib2xJc1VuaXF1ZSgpCisgICAgeworICAgICAgICByZXR1cm4gKGxpbmVzdGF0ZSA9PSBib3Rob25jZSApOworICAgIH0KIAotCS8qKgotCSAqIHNob3dTeW1ib2wgICAgICAgIFByaW50cyB0aGUgbGluZSB0byBzdGRvdXQuCi0JICovCi0Jdm9pZCBzaG93U3ltYm9sKCkKLQl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKLQl9CisgICAgLyoqCisgICAgICogc2hvd1N5bWJvbCAgICAgICAgUHJpbnRzIHRoZSBsaW5lIHRvIHN0ZG91dC4KKyAgICAgKi8KKyAgICB2b2lkIHNob3dTeW1ib2woKQorICAgIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvZmlsZWRpZmYvTW9kaWZ5UmVwb3J0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL2ZpbGVkaWZmL01vZGlmeVJlcG9ydC5qYXZhCmluZGV4IGYxNTczOGYuLjc3NGU5YjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvZmlsZWRpZmYvTW9kaWZ5UmVwb3J0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9maWxlZGlmZi9Nb2RpZnlSZXBvcnQuamF2YQpAQCAtMjQsOCArMjQsOCBAQAogICAgICAgICBpZihhcmdzLmxlbmd0aCAhPSAxKXsKICAgICAgICAgICAgIG1mLnVzYWdlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKLSAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgICBTdHJpbmcgdG9iZUFkZGVkID0gCisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHRvYmVBZGRlZCA9CiAgICAgICAgICI8dHI+IFxuIisKICAgICAgICAgIjx0ZCBjb2xzcGFuPTMgYWxpZ249Y2VudGVyPiA8Zm9udCBjb2xvcj1SRUQ+IDxiPiBFeHBlY3RlZCBSZXN1bHRzIDwvYj4gPC9mb250PiA8L3RkPiBcbiIrCiAgICAgICAgICAiPC90cj5cbiIrCkBAIC04OCwxNCArODgsMTQgQEAKICAgICAgICAgICI8dHI+IFxuIisKICAgICAgICAgICI8dGQ+ICBzcWV0ZXN0cy90cmFuc2FjdGlvbi90eGdsb2JhbCA8L3RkPiBcbiIrCiAgICAgICAgICAiPHRkPiA8L3RkPiBcbiIrCi0gICAgICAgICAiPHRkPiBbVG90YWwgOjFdPC90ZD5cbiIrICAgICAgICAgCisgICAgICAgICAiPHRkPiBbVG90YWwgOjFdPC90ZD5cbiIrCiAgICAgICAgICAiPC90cj5cbiIrCiAgICAgICAgICAiPHRyPiBcbiIrCiAgICAgICAgICAiPHRkPiAgc3FldGVzdHMvc2VjdXJpdHkgPC90ZD5cbiIrCiAgICAgICAgICAiPHRkPiA8L3RkPiBcbiIrCiAgICAgICAgICAiPHRkPiBbVG90YWwgOjFdPC90ZD5cbiIrCiAgICAgICAgICAiPC90cj5cbiIrCi0gKi8gICAgICAgICAKKyAqLwogICAgICAgICBtZi5tb2RpZnlGaWxlKGFyZ3NbMF0sIHRvYmVBZGRlZCk7CiAgICAgfQogCkBAIC0xMDYsMjUgKzEwNiwyNSBAQAogICAgICAgICBTdHJpbmcgdGFnID0gIjwvVEFCTEU+IjsKICAgICAgICAgaW50IGJyZWFrUG9pbnQgPSAtMSA7CiAgICAgICAgIGludCBjOwotICAgICAgICB0cnl7ICAgICAgIAorICAgICAgICB0cnl7CiAgICAgICAgICAgICBGaWxlIGlucHV0ZmlsZSA9IG5ldyBGaWxlKGZpbGVuYW1lKTsKICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGlucHV0ZmlsZSkpOwotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiUmVhZGluZyBvcmlnaW5hbCBmaWxlLi4uIik7Ci0gICAgICAgICAgICB3aGlsZSAoKGZpbGVsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCl7ICAgICAgICAgICAgCisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJSZWFkaW5nIG9yaWdpbmFsIGZpbGUuLi4iKTsKKyAgICAgICAgICAgIHdoaWxlICgoZmlsZWxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsKXsKICAgICAgICAgICAgICAgICBmaWxlZGF0YS5hcHBlbmQoZmlsZWxpbmUpOwotICAgICAgICAgICAgfSAgICAgICAgICAgIAotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRmluaXNoZWQgUmVhZGluZyBmaWxlLiAiKTsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkNsb3NpbmcgaW5wdXQgc3RyZWFtLi4uIik7CisgICAgICAgICAgICB9CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJGaW5pc2hlZCBSZWFkaW5nIGZpbGUuICIpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiQ2xvc2luZyBpbnB1dCBzdHJlYW0uLi4iKTsKICAgICAgICAgICAgIGluLmNsb3NlKCk7Ci0JICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJmaWxlZGF0YTpcblxuIitmaWxlZGF0YSk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJmaWxlZGF0YTpcblxuIitmaWxlZGF0YSk7CiAgICAgICAgICAgICAvLyBmaW5kIGluZGV4IG9mIGZpcnN0IDwvVEFCTEU+IHRhZwogICAgICAgICAgICAgLy8gaW5zZXJ0IG5ldyBzdHJpbmcgYXQgdGhlIGluZGV4LgotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiYnJlYWtQb2ludDoiK2JyZWFrUG9pbnQpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiYnJlYWtQb2ludDoiK2JyZWFrUG9pbnQpOwogICAgICAgICAgICAgYnJlYWtQb2ludD1maWxlZGF0YS5pbmRleE9mKHRhZyk7CiAgICAgICAgICAgICBpZihicmVha1BvaW50ICE9IC0xKXsKICAgICAgICAgICAgICAgICBmaWxlZGF0YS5pbnNlcnQoYnJlYWtQb2ludCwgdG9iZUFkZGVkKTsKICAgICAgICAgICAgICAgICBmaWxlQ29udGVudCA9IGZpbGVkYXRhLnRvU3RyaW5nKCk7Ci0JCS8vU3lzdGVtLm91dC5wcmludGxuKCJzdHJpbmcgaW5zZXJ0ZWQiKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oInN0cmluZyBpbnNlcnRlZCIpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNwZWNpZmllZCB0YWc6ICIrdGFnKyIgd2FzIG5vdCBmb3VuZCBpbiB0aGUgcmVwb3J0Iik7CiAgICAgICAgICAgICB9CkBAIC0xMzgsNyArMTM4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxlYXNlIGNoZWNrIHRoZSBmaWxlIG5hbWUgYW5kIHRyeSBhZ2FpbiIpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCl7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfSAgICAgICAgCisgICAgICAgIH0KICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHVzYWdlKCl7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL2ZpbGVkaWZmL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL2ZpbGVkaWZmL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjc2NGI0NS4uNmFiZWMxYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9maWxlZGlmZi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvZmlsZWRpZmYvYnVpbGQucHJvcGVydGllcwpAQCAtMSw1ICsxLDUgQEAKLTxwcm9wZXJ0eSBlbnZpcm9ubWVudD0iZW52IiAvPg0KLTxwcm9wZXJ0eSBuYW1lPSJqYXZhcGF0aCIgdmFsdWU9IiR7SkFWQV9IT01FfS9saWIvZHQuamFyOiQoSkFWQV9IT01FKS9saWIvdG9vbHMuamFyIi8+DQotPHByb3BlcnR5IG5hbWU9ImNsYXNzcGF0aCIgdmFsdWU9IiR7amF2YXBhdGh9Ii8+DQotPHByb3BlcnR5IG5hbWU9ImphcmZpbGUiIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vbGliL2ZpbGVkaWZmLmphciIvPg0KLTxwcm9wZXJ0eSBuYW1lPSJidWlsZC5kZXN0IiB2YWx1ZT0iY2xhc3NlcyIvPg0KKzxwcm9wZXJ0eSBlbnZpcm9ubWVudD0iZW52IiAvPgorPHByb3BlcnR5IG5hbWU9ImphdmFwYXRoIiB2YWx1ZT0iJHtKQVZBX0hPTUV9L2xpYi9kdC5qYXI6JChKQVZBX0hPTUUpL2xpYi90b29scy5qYXIiLz4KKzxwcm9wZXJ0eSBuYW1lPSJjbGFzc3BhdGgiIHZhbHVlPSIke2phdmFwYXRofSIvPgorPHByb3BlcnR5IG5hbWU9ImphcmZpbGUiIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vbGliL2ZpbGVkaWZmLmphciIvPgorPHByb3BlcnR5IG5hbWU9ImJ1aWxkLmRlc3QiIHZhbHVlPSJjbGFzc2VzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL2ZpbGVkaWZmL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvZmlsZWRpZmYvYnVpbGQueG1sCmluZGV4IDdmOGJlZDQuLmZhNTBjYzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvZmlsZWRpZmYvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvZmlsZWRpZmYvYnVpbGQueG1sCkBAIC0yOSwyNSArMjksMjUgQEAKICZjb21tb25CdWlsZDsKIAogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4saW5pdCxidWlsZCxqYXIiLz4KLSAgICAgICAgCisKICAgPHRhcmdldCBuYW1lPSJpbml0Ij4KICAgPG1rZGlyIGRpcj0iJHtidWlsZC5kZXN0fSIvPgotICAgIAorCiAgIDwvdGFyZ2V0PgotICAKLSAgIAorCisKICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iaW5pdCI+CiAgIDxqYXZhYwotCQlkZXN0ZGlyPSIke2J1aWxkLmRlc3R9IgotCQljbGFzc3BhdGg9IiR7Y2xhc3NwYXRofSIKKyAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5kZXN0fSIKKyAgICAgICAgY2xhc3NwYXRoPSIke2NsYXNzcGF0aH0iCiAgICAgICAgICAgICAgICAgc3JjZGlyPSIke2Jhc2VkaXJ9IgogICAgICAgICAgICAgICAgIGRlYnVnPSJvbiIKLQkJZGVwcmVjYXRpb249Im9uIgorICAgICAgICBkZXByZWNhdGlvbj0ib24iCiAgICAgLz4KLSAgICAKKwogICA8L3RhcmdldD4KLSAgCi0gICAKKworCiAgIDx0YXJnZXQgbmFtZT0iamFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbixidWlsZCI+CiAgIDxlY2hvIG1lc3NhZ2U9Im91dHB1dHRpbmcgamFyIGF0ICR7amFyZmlsZX0iLz4KICAgPHByb3BlcnR5IGVudmlyb25tZW50PSJlbnYiLz4KQEAgLTU3LDQxICs1Nyw0MSBAQAogICAgPGFyZyBsaW5lPSJjdmYgJHtqYXJmaWxlfSAtQyAke2J1aWxkLmRlc3R9IC4iIC8+LS0+CiAgICA8amFyIGphcmZpbGU9IiR7amFyZmlsZX0iIGJhc2VkaXI9IiR7YnVpbGQuZGVzdH0iIHVwZGF0ZT0idHJ1ZSIKICAgIGluY2x1ZGVzPSIqKi8qLmNsYXNzIi8+Ci0gICAKLSAgCisKKwogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuZGVzdH0iLz4KLSAgICAgIAorCiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8amF2YQotCWZvcms9Im9uIgotCWNsYXNzcGF0aD0iJHtjbGFzc3BhdGh9OiR7amFyZmlsZX0iCi0JY2xhc3NuYW1lPSJjb20uc3VuLmVqdGUuY2NsLmZpbGVkaWZmLkRpZmYiPgotCTxhcmcgdmFsdWU9IiR7ZW52LkFQU19IT01FfS91dGlsL2ZpbGVkaWZmL2dvbGRlbl9yZXN1bHRzLnhtbCIvPgotCTxhcmcgdmFsdWU9IiR7ZW52LkFQU19IT01FfS90ZXN0X3Jlc3VsdHMueG1sIi8+CisgICAgZm9yaz0ib24iCisgICAgY2xhc3NwYXRoPSIke2NsYXNzcGF0aH06JHtqYXJmaWxlfSIKKyAgICBjbGFzc25hbWU9ImNvbS5zdW4uZWp0ZS5jY2wuZmlsZWRpZmYuRGlmZiI+CisgICAgPGFyZyB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L3V0aWwvZmlsZWRpZmYvZ29sZGVuX3Jlc3VsdHMueG1sIi8+CisgICAgPGFyZyB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L3Rlc3RfcmVzdWx0cy54bWwiLz4KIDwvamF2YT4KIAogPCEtLTxqYXZhCi0JZm9yaz0ib24iCi0JY2xhc3NwYXRoPSIke2NsYXNzcGF0aH06JHtqYXJmaWxlfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke3MxYXN0ZXN0LmNsYXNzcGF0aH06JHtlbnYuQU5UX0hPTUV9L2xpYi94ZXJjZXNJbXBsLmphcjoke2Vudi5BTlRfSE9NRX0veG1sUGFyc2VyQVBJcy5qYXIiCi0JY2xhc3NuYW1lPSJjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlBhcnNlTUwiPgotCTxhcmcgdmFsdWU9IiR7ZW52LkFQU19IT01FfS91dGlsL2ZpbGVkaWZmL2dvbGRlbl9yZXN1bHRzLnhtbCIvPgotCTxhcmcgdmFsdWU9IiR7ZW52LkFQU19IT01FfS90ZXN0X3Jlc3VsdHMueG1sIi8+CisgICAgZm9yaz0ib24iCisgICAgY2xhc3NwYXRoPSIke2NsYXNzcGF0aH06JHtqYXJmaWxlfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke3MxYXN0ZXN0LmNsYXNzcGF0aH06JHtlbnYuQU5UX0hPTUV9L2xpYi94ZXJjZXNJbXBsLmphcjoke2Vudi5BTlRfSE9NRX0veG1sUGFyc2VyQVBJcy5qYXIiCisgICAgY2xhc3NuYW1lPSJjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlBhcnNlTUwiPgorICAgIDxhcmcgdmFsdWU9IiR7ZW52LkFQU19IT01FfS91dGlsL2ZpbGVkaWZmL2dvbGRlbl9yZXN1bHRzLnhtbCIvPgorICAgIDxhcmcgdmFsdWU9IiR7ZW52LkFQU19IT01FfS90ZXN0X3Jlc3VsdHMueG1sIi8+CiA8L2phdmE+LS0+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJtb2RpZnlSZXBvcnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgPGphdmEKLQlmb3JrPSJvbiIKLQljbGFzc3BhdGg9IiR7Y2xhc3NwYXRofToke2phcmZpbGV9IgotCWNsYXNzbmFtZT0iY29tLnN1bi5lanRlLmNjbC5maWxlZGlmZi5Nb2RpZnlSZXBvcnQiPgotCTxhcmcgdmFsdWU9IiR7ZW52LkFQU19IT01FfS90ZXN0X3Jlc3VsdHMuaHRtbCIvPgkKKyAgICBmb3JrPSJvbiIKKyAgICBjbGFzc3BhdGg9IiR7Y2xhc3NwYXRofToke2phcmZpbGV9IgorICAgIGNsYXNzbmFtZT0iY29tLnN1bi5lanRlLmNjbC5maWxlZGlmZi5Nb2RpZnlSZXBvcnQiPgorICAgIDxhcmcgdmFsdWU9IiR7ZW52LkFQU19IT01FfS90ZXN0X3Jlc3VsdHMuaHRtbCIvPgogPC9qYXZhPgogPC90YXJnZXQ+Ci0gICAgICAKKwogPC9wcm9qZWN0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGJ1aWxkZXIvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0YnVpbGRlci9wb20ueG1sCmluZGV4IDViM2UwZjQuLjc0YWU2MWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0YnVpbGRlci9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0YnVpbGRlci9wb20ueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KLQkKKwogICAgIDxwYXJlbnQ+CiAgICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmVlNGo8L2dyb3VwSWQ+CiAgICAgICAgIDxhcnRpZmFjdElkPnByb2plY3Q8L2FydGlmYWN0SWQ+CkBAIC0yNywxMiArMjcsMTIgQEAKICAgICA8L3BhcmVudD4KICAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5kZXZ0ZXN0czwvZ3JvdXBJZD4KLQk8dmVyc2lvbj40LjAtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+NC4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDxhcnRpZmFjdElkPnJlcG9ydC1idWlsZGVyPC9hcnRpZmFjdElkPgogICAgIDxwYWNrYWdpbmc+amFyPC9wYWNrYWdpbmc+CiAgICAgPG5hbWU+cmVwb3J0LWJ1aWxkZXI8L25hbWU+CiAgICAgPGJ1aWxkPgotCQk8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4KKyAgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+CiAgICAgICAgIDxkZWZhdWx0R29hbD5pbnN0YWxsPC9kZWZhdWx0R29hbD4KICAgICAgICAgPHBsdWdpbnM+CiAgICAgICAgICAgICA8cGx1Z2luPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRidWlsZGVyL3NyYy9tYWluL2phdmEvY29tL3N1bi9hcHBzZXJ2L3Rlc3QvdXRpbC9wcm9jZXNzL1Byb2Nlc3NNYW5hZ2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGJ1aWxkZXIvc3JjL21haW4vamF2YS9jb20vc3VuL2FwcHNlcnYvdGVzdC91dGlsL3Byb2Nlc3MvUHJvY2Vzc01hbmFnZXIuamF2YQppbmRleCAyMTcyMzE0Li5iZThlNmQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGJ1aWxkZXIvc3JjL21haW4vamF2YS9jb20vc3VuL2FwcHNlcnYvdGVzdC91dGlsL3Byb2Nlc3MvUHJvY2Vzc01hbmFnZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGJ1aWxkZXIvc3JjL21haW4vamF2YS9jb20vc3VuL2FwcHNlcnYvdGVzdC91dGlsL3Byb2Nlc3MvUHJvY2Vzc01hbmFnZXIuamF2YQpAQCAtMjM4LDcgKzIzOCw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nIGxpbmUgPSByZWFkZXIucmVhZExpbmUoKTsgbGluZSAhPSBudWxsOyBsaW5lID0gcmVhZGVyLnJlYWRMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKGxpbmUpLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYoZWNobykKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGJ1aWxkZXIvc3JjL21haW4vamF2YS9jb20vc3VuL2FwcHNlcnYvdGVzdC91dGlsL3Byb2Nlc3MvUHJvY2Vzc1N0cmVhbURyYWluZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0YnVpbGRlci9zcmMvbWFpbi9qYXZhL2NvbS9zdW4vYXBwc2Vydi90ZXN0L3V0aWwvcHJvY2Vzcy9Qcm9jZXNzU3RyZWFtRHJhaW5lci5qYXZhCmluZGV4IDA2Y2I2YmMuLjc1ZTI2ZWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0YnVpbGRlci9zcmMvbWFpbi9qYXZhL2NvbS9zdW4vYXBwc2Vydi90ZXN0L3V0aWwvcHJvY2Vzcy9Qcm9jZXNzU3RyZWFtRHJhaW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0YnVpbGRlci9zcmMvbWFpbi9qYXZhL2NvbS9zdW4vYXBwc2Vydi90ZXN0L3V0aWwvcHJvY2Vzcy9Qcm9jZXNzU3RyZWFtRHJhaW5lci5qYXZhCkBAIC04Miw3ICs4Miw3IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQ3JlYXRlIGFuIGluc3RhbmNlLCBkcmFpbiBhbmQgcmVkaXJlY3QgdGhlIHByb2Nlc3MnIHN0ZGVyciBhbmQgc3Rkb3V0IHRvIAorICAgICAqIENyZWF0ZSBhbiBpbnN0YW5jZSwgZHJhaW4gYW5kIHJlZGlyZWN0IHRoZSBwcm9jZXNzJyBzdGRlcnIgYW5kIHN0ZG91dCB0bwogICAgICAqIFN5c3RlbS5lcnIgYW5kIFN5c3RlbS5vdXQgcmVzcGVjdGl2ZWx5LgogICAgICAqIEBwYXJhbSBwcm9jZXNzIFRoZSBQcm9jZXNzIHRvIGRyYWluCiAgICAgICogQHBhcmFtIHByb2Nlc3NOYW1lIFRoZSBuYW1lIHdpbGwgYmUgdXNlZCB0byBuYW1lIHRoZSBkcmFpbmVyIHRocmVhZHMKQEAgLTEyNiwyMyArMTI2LDIzIEBACiAgICAgfQogCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgCisKICAgICBwcml2YXRlIFByb2Nlc3NTdHJlYW1EcmFpbmVyKFN0cmluZyBwcm9jZXNzTmFtZSwgUHJvY2VzcyBwcm9jZXNzLCBib29sZWFuIHJlZGlyZWN0LCBib29sZWFuIHNhdmUpCiAgICAgewogICAgICAgICBpZihwcm9jZXNzID09IG51bGwpCiAgICAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oIkludGVybmFsIEVycm9yOiBudWxsIFByb2Nlc3Mgb2JqZWN0Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHRoaXMucHJvY2VzcyA9IHByb2Nlc3M7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKHByb2Nlc3NOYW1lID09IG51bGwgfHwgcHJvY2Vzc05hbWUubGVuZ3RoKCkgPD0gMCkKICAgICAgICAgICAgIHRoaXMucHJvY2Vzc05hbWUgPSAiVW5rbm93blByb2Nlc3NOYW1lIjsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdGhpcy5wcm9jZXNzTmFtZSA9IHByb2Nlc3NOYW1lOwotICAgICAgICAKKwogICAgICAgICByZWRpcmVjdFN0YW5kYXJkU3RyZWFtcyA9IHJlZGlyZWN0OwogCiAgICAgICAgIFByb2Nlc3NTdHJlYW1EcmFpbmVyV29ya2VyIHdvcmtlcjsKLSAgICAgICAgCisKICAgICAgICAgaWYocmVkaXJlY3RTdGFuZGFyZFN0cmVhbXMpCiAgICAgICAgICAgICBvdXRXb3JrZXIgPSBuZXcgUHJvY2Vzc1N0cmVhbURyYWluZXJXb3JrZXIocHJvY2Vzcy5nZXRJbnB1dFN0cmVhbSgpLCBTeXN0ZW0ub3V0LCBzYXZlKTsKICAgICAgICAgZWxzZQpAQCAtMTUwLDE5ICsxNTAsMTkgQEAKIAogICAgICAgICBvdXRUaHJlYWQgPSBuZXcgVGhyZWFkKG91dFdvcmtlciwgcHJvY2Vzc05hbWUgKyAiLSIgKyBPVVRfRFJBSU5FUik7CiAgICAgICAgIG91dFRocmVhZC5zZXREYWVtb24odHJ1ZSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKHJlZGlyZWN0U3RhbmRhcmRTdHJlYW1zKQogICAgICAgICAgICAgZXJyV29ya2VyID0gbmV3IFByb2Nlc3NTdHJlYW1EcmFpbmVyV29ya2VyKHByb2Nlc3MuZ2V0RXJyb3JTdHJlYW0oKSwgU3lzdGVtLmVyciwgc2F2ZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGVycldvcmtlciA9IG5ldyBQcm9jZXNzU3RyZWFtRHJhaW5lcldvcmtlcihwcm9jZXNzLmdldEVycm9yU3RyZWFtKCksIG51bGwsIHNhdmUpOwotICAgICAgICAKKwogICAgICAgICBlcnJUaHJlYWQgPSBuZXcgVGhyZWFkKGVycldvcmtlciwgcHJvY2Vzc05hbWUgKyAiLSIgKyBFUlJPUl9EUkFJTkVSKTsKICAgICAgICAgZXJyVGhyZWFkLnNldERhZW1vbih0cnVlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTdGFydCB0aGUgZHJhaW5pbmcuCi0gICAgICogV2Ugc3RhcnQgdGhlbSBoZXJlIGluc3RlYWQgb2YgdGhlIGNvbnN0cnVjdG9yIHNvIHRoYXQgInRoaXMiIGRvZXNuJ3QgCisgICAgICogV2Ugc3RhcnQgdGhlbSBoZXJlIGluc3RlYWQgb2YgdGhlIGNvbnN0cnVjdG9yIHNvIHRoYXQgInRoaXMiIGRvZXNuJ3QKICAgICAgKiBsZWFrIG91dCBvZiB0aGUgY29uc3RydWN0b3IuCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGRyYWluKCkKQEAgLTE3MCw5ICsxNzAsOSBAQAogICAgICAgICBvdXRUaHJlYWQuc3RhcnQoKTsKICAgICAgICAgZXJyVGhyZWFkLnN0YXJ0KCk7CiAgICAgfQotICAgIAorCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgCisKICAgICBwcml2YXRlIGZpbmFsICAgICAgICAgICBQcm9jZXNzICAgICAgICAgICAgICAgICAgICAgcHJvY2VzczsKICAgICBwcml2YXRlIGZpbmFsICAgICAgICAgICBQcm9jZXNzU3RyZWFtRHJhaW5lcldvcmtlciAgb3V0V29ya2VyOwogICAgIHByaXZhdGUgZmluYWwgICAgICAgICAgIFByb2Nlc3NTdHJlYW1EcmFpbmVyV29ya2VyICBlcnJXb3JrZXI7CkBAIC0xODIsNyArMTgyLDcgQEAKICAgICBwcml2YXRlIGZpbmFsICAgICAgICAgICBib29sZWFuICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RTdGFuZGFyZFN0cmVhbXM7CiAgICAgcHJpdmF0ZSBmaW5hbCAgIHN0YXRpYyAgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgIEVSUk9SX0RSQUlORVIgICA9ICJTdGRlcnJEcmFpbmVyIjsKICAgICBwcml2YXRlIGZpbmFsICAgc3RhdGljICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgT1VUX0RSQUlORVIgICAgID0gIlN0ZG91dERyYWluZXIiOwotICAgIAorCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0YnVpbGRlci9zcmMvbWFpbi9qYXZhL2NvbS9zdW4vYXBwc2Vydi90ZXN0L3V0aWwvcHJvY2Vzcy9Qcm9jZXNzU3RyZWFtRHJhaW5lcldvcmtlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRidWlsZGVyL3NyYy9tYWluL2phdmEvY29tL3N1bi9hcHBzZXJ2L3Rlc3QvdXRpbC9wcm9jZXNzL1Byb2Nlc3NTdHJlYW1EcmFpbmVyV29ya2VyLmphdmEKaW5kZXggNmVkZGQ0Ny4uMDllOTBjZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRidWlsZGVyL3NyYy9tYWluL2phdmEvY29tL3N1bi9hcHBzZXJ2L3Rlc3QvdXRpbC9wcm9jZXNzL1Byb2Nlc3NTdHJlYW1EcmFpbmVyV29ya2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRidWlsZGVyL3NyYy9tYWluL2phdmEvY29tL3N1bi9hcHBzZXJ2L3Rlc3QvdXRpbC9wcm9jZXNzL1Byb2Nlc3NTdHJlYW1EcmFpbmVyV29ya2VyLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKICAgICB7CiAgICAgICAgIGlmKGluID09IG51bGwpCiAgICAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oIklucHV0U3RyZWFtIGFyZ3VtZW50IHdhcyBudWxsLiIpOwotICAgICAgICAKKwogICAgICAgICByZWFkZXIgPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShpbik7CiAgICAgICAgIHJlZGlyZWN0ID0gUmVkaXJlY3Q7CiAKQEAgLTM1LDE3ICszNSwxNyBAQAogICAgICAgICAgICAgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgcnVuKCkKICAgICB7CiAgICAgICAgIGlmKHJlYWRlciA9PSBudWxsKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgICAgICB0cnkKICAgICAgICAgewogICAgICAgICAgICAgaW50IGNvdW50ID0gMDsKICAgICAgICAgICAgIGJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVs0MDk2XTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB3aGlsZSAoKGNvdW50ID0gcmVhZGVyLnJlYWQoYnVmZmVyKSkgIT0gLTEpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYocmVkaXJlY3QgIT0gbnVsbCkKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgICAgIGlmKHNiICE9IG51bGwpCiAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKG5ldyBTdHJpbmcoYnVmZmVyLCAwLCBjb3VudCkpOwogICAgICAgICAgICAgfQotICAgICAgICB9IAorICAgICAgICB9CiAgICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuICIiOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgZmluYWwgICBCdWZmZXJlZElucHV0U3RyZWFtIHJlYWRlcjsKICAgICBwcml2YXRlIGZpbmFsICAgUHJpbnRTdHJlYW0gICAgICAgICByZWRpcmVjdDsKICAgICBwcml2YXRlICAgICAgICAgU3RyaW5nQnVpbGRlciAgICAgICBzYjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0YnVpbGRlci9zcmMvbWFpbi9qYXZhL2NvbS9zdW4vYXBwc2Vydi90ZXN0L3V0aWwvcmVzdWx0cy9UZXN0Q2FzZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRidWlsZGVyL3NyYy9tYWluL2phdmEvY29tL3N1bi9hcHBzZXJ2L3Rlc3QvdXRpbC9yZXN1bHRzL1Rlc3RDYXNlLmphdmEKaW5kZXggMTY1MTUzMi4uOWEzNTFkMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRidWlsZGVyL3NyYy9tYWluL2phdmEvY29tL3N1bi9hcHBzZXJ2L3Rlc3QvdXRpbC9yZXN1bHRzL1Rlc3RDYXNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRidWlsZGVyL3NyYy9tYWluL2phdmEvY29tL3N1bi9hcHBzZXJ2L3Rlc3QvdXRpbC9yZXN1bHRzL1Rlc3RDYXNlLmphdmEKQEAgLTgxLDcgKzgxLDcgQEAKICAgICAgICAgICAgICIsIHN0YXR1cz0nIiArIHN0YXR1cyArICdcJycgKwogICAgICAgICAgICAgJ30nOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgdG9YbWwoKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKICAgICAgICAgYnVmZmVyLmFwcGVuZCgiPHRlc3RjYXNlPlxuIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGJ1aWxkZXIvc3JjL21haW4vamF2YS9jb20vc3VuL2FwcHNlcnYvdGVzdC91dGlsL3Jlc3VsdHMvVGVzdFN1aXRlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGJ1aWxkZXIvc3JjL21haW4vamF2YS9jb20vc3VuL2FwcHNlcnYvdGVzdC91dGlsL3Jlc3VsdHMvVGVzdFN1aXRlLmphdmEKaW5kZXggOTc0NzNhOC4uNDE1NjBmZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRidWlsZGVyL3NyYy9tYWluL2phdmEvY29tL3N1bi9hcHBzZXJ2L3Rlc3QvdXRpbC9yZXN1bHRzL1Rlc3RTdWl0ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0YnVpbGRlci9zcmMvbWFpbi9qYXZhL2NvbS9zdW4vYXBwc2Vydi90ZXN0L3V0aWwvcmVzdWx0cy9UZXN0U3VpdGUuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogICogQERlc2NyaXB0aW9uOiBDbGFzcyBob2xkaW5nIE9uZSBUZXN0U3VpdGUgaW5mby4KICAqIEBBdXRob3IgOiBSYW1lc2ggTWFuZGF2YQogICogQExhc3QgTW9kaWZpZWQgOiBCeSBSYW1lc2ggb24gMTAvMjQvMjAwMQotICogQExhc3QgTW9kaWZpZWQgOiBCeSBSYW1lc2ggb24gMS8yMC8yMDAyICwgRm9yIHByZXNlcnZpbmcgb3JkZXIgb2YgZW50cnkgb2YgdGVzdHMgCQl1c2VkIGEgc2VwYXJhdGUgdGVzdElkVmVjdG9yCisgKiBATGFzdCBNb2RpZmllZCA6IEJ5IFJhbWVzaCBvbiAxLzIwLzIwMDIgLCBGb3IgcHJlc2VydmluZyBvcmRlciBvZiBlbnRyeSBvZiB0ZXN0cyAgICAgICAgIHVzZWQgYSBzZXBhcmF0ZSB0ZXN0SWRWZWN0b3IKICAqIEBMYXN0IE1vZGlmaWVkIDogQnkgSnVzdGluIExlZSBvbiAxMC8wNS8yMDA5CiAgKi8KIHB1YmxpYyBjbGFzcyBUZXN0U3VpdGUgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9FbnRlcnByaXNlQmVhbkxvZ2dlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9FbnRlcnByaXNlQmVhbkxvZ2dlci5qYXZhCmluZGV4IDVlOThiMzguLmU1NzllM2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvRW50ZXJwcmlzZUJlYW5Mb2dnZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGVyL0VudGVycHJpc2VCZWFuTG9nZ2VyLmphdmEKQEAgLTQyLDEzICs0MiwxMyBAQAogICAvKmFic3RyYWN0IHB1YmxpYyBDb2xsZWN0aW9uIGdldExvY2FsQ29udHJhY3RzKCk7CiAgIGFic3RyYWN0IHB1YmxpYyBDb2xsZWN0aW9uIGdldFJlbW90ZUNvbnRyYWN0cygpOwogICAgKiovCi0gIAorCiAgIHByb3RlY3RlZCBQb3J0YWJsZUFkYXB0ZXJbXSBhZGFwdGVySG9tZTsKIAogICBwcm90ZWN0ZWQgYm9vbGVhbiBkdWFsTW9kZSA9IGZhbHNlOwogCiAgIHByb3RlY3RlZCBib29sZWFuIGRvUGFzc0J5VmFsdWUgPSB0cnVlOwotICAKKwogICBwcm90ZWN0ZWQgaW50IFJFTU9URV9FSkIgPSAwOwogICBwcm90ZWN0ZWQgaW50IExPQ0FMX0VKQiA9IDE7CiAKQEAgLTY4LDQwICs2OCw0MCBAQAogCiAgICAgICBTdHJpbmcgbW9kZSA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi90b1hNTCIpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTsKICAgICAgIGlmIChtb2RlLmNvbXBhcmVUbygiZmFsc2UiKSA9PSAwKXsKLQlvdXRwdXRYTUwgPSBmYWxzZTsKKyAgICBvdXRwdXRYTUwgPSBmYWxzZTsKICAgICAgIH0KLSAgICAgIHRvWE1MKCJ0b1hNTCIsIG1vZGUpOyAgICAgIAorICAgICAgdG9YTUwoInRvWE1MIiwgbW9kZSk7CiAKICAgICB9IGNhdGNoKGphdmEubGFuZy5FeGNlcHRpb24gZXgpewotICAgICAgdG9YTUwoInRvWE1MIiwgInRydWUiKTsgICAgCi0gICAgfSAKLSAgIAorICAgICAgdG9YTUwoInRvWE1MIiwgInRydWUiKTsKKyAgICB9CisKICAgICB0cnl7CiAgICAgICBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgU3RyaW5nIG1vZGUgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvcGFzc0J5IikudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpOwogICAgICAgaWYgKG1vZGUuY29tcGFyZVRvKCJib3RoIikgPT0gMCl7Ci0JZHVhbE1vZGUgPSB0cnVlOworICAgIGR1YWxNb2RlID0gdHJ1ZTsKICAgICAgIH0gZWxzZSBpZiAobW9kZS5jb21wYXJlVG8oInZhbHVlIikgIT0gMCl7Ci0JZG9QYXNzQnlWYWx1ZSA9IGZhbHNlOwotICAgICAgfSAgICAKLSAgICAgIHRvWE1MKCJwYXNzQnkiLCBtb2RlKTsgICAgIAorICAgIGRvUGFzc0J5VmFsdWUgPSBmYWxzZTsKKyAgICAgIH0KKyAgICAgIHRvWE1MKCJwYXNzQnkiLCBtb2RlKTsKIAogICAgIH0gY2F0Y2goamF2YS5sYW5nLkV4Y2VwdGlvbiBleCl7CiAgICAgICB0b1hNTCgiZXhjZXB0aW9uIixleC5nZXRNZXNzYWdlKCkpOwotICAgICAgdG9YTUwoInBhc3NCeSIsICJ0cnVlIik7ICAgIAotICAgIH0gCisgICAgICB0b1hNTCgicGFzc0J5IiwgInRydWUiKTsKKyAgICB9CiAKICAgICBPYmplY3Qgb2JqcmVmID0gbnVsbDsKLSAgICAKKwogICAgIGlmICggKGR1YWxNb2RlID09IHRydWUgfHwgZG9QYXNzQnlWYWx1ZSkgJiYgcmVtb3RlUmVmLmNvbXBhcmVUbygiIikgIT0gMCl7CiAgICAgICB0cnl7Ci0JdG9YTUwoInJlbW90ZSBpbnRlcmZhY2UiLHJlbW90ZVJlZik7Ci0Jb2JqcmVmID0gaWMubG9va3VwKHJlbW90ZVJlZik7Ci0JCi0JYWRhcHRlckhvbWVbUkVNT1RFX0VKQl0gPSAoUG9ydGFibGVBZGFwdGVyKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIFBvcnRhYmxlQWRhcHRlci5jbGFzcyk7Ci0JdG9YTUwoIlJlbW90ZSBpbnRlcmZhY2UiLCJMb29rZWQgdXAgcmVtb3RlIGludGVyZmFjZSIpOworICAgIHRvWE1MKCJyZW1vdGUgaW50ZXJmYWNlIixyZW1vdGVSZWYpOworICAgIG9ianJlZiA9IGljLmxvb2t1cChyZW1vdGVSZWYpOworCisgICAgYWRhcHRlckhvbWVbUkVNT1RFX0VKQl0gPSAoUG9ydGFibGVBZGFwdGVyKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIFBvcnRhYmxlQWRhcHRlci5jbGFzcyk7CisgICAgdG9YTUwoIlJlbW90ZSBpbnRlcmZhY2UiLCJMb29rZWQgdXAgcmVtb3RlIGludGVyZmFjZSIpOwogICAgICAgfSBjYXRjaChqYXZhLmxhbmcuRXhjZXB0aW9uIGV4KXsKLQlsb2dMb2NhbFhNTEV4Y2VwdGlvbihleCwicHJlcGFyZUxvY2FsQW5kUmVtb3RlT2JqZWN0IC0gcmVtb3RlIik7CisgICAgbG9nTG9jYWxYTUxFeGNlcHRpb24oZXgsInByZXBhcmVMb2NhbEFuZFJlbW90ZU9iamVjdCAtIHJlbW90ZSIpOwogICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICBSRU1PVEVfRUpCID0gMDsKQEAgLTEwOSwxMyArMTA5LDEzIEBACiAKICAgICBpZiAoZHVhbE1vZGUgPT0gdHJ1ZSB8fCAhZG9QYXNzQnlWYWx1ZSl7CiAgICAgICBpZiAoZHVhbE1vZGUgPT0gZmFsc2UpewotCUxPQ0FMX0VKQiA9IDA7CisgICAgTE9DQUxfRUpCID0gMDsKICAgICAgIH0KLSAgICAgIAorCiAgICAgICB0cnl7CiAgICAgICAgICAgLy8gR2V0IGFub3RoZXIgb2JqZWN0IGp1c3QgdG8gYmUgc3VyZSA8VEVTVD4KICAgICAgICAgICBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgIAorCiAgICAgICAgICAgdG9YTUwoImxvY2FsIGludGVyZmFjZSIsbG9jYWxSZWYpOwogICAgICAgICAgIHRvWE1MKCJsb2NhbCBpbnRlcmZhY2UiLGljLmxvb2t1cChsb2NhbFJlZikudG9TdHJpbmcoKSk7CiAgICAgICAgICAgYWRhcHRlckhvbWVbTE9DQUxfRUpCXSA9IChQb3J0YWJsZUFkYXB0ZXIpaWMubG9va3VwKGxvY2FsUmVmKTsKQEAgLTE2Myw3ICsxNjMsNyBAQAogICAgIGlmIChvdXRwdXRYTUwpewogICAgICAgdG9YTUwoImV4Y2VwdGlvbiIsIG1zZy50b1N0cmluZygpICsgIjogIiArIGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICBleC5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7Ci0gICAgICB0b1hNTCgiZXhjZXB0aW9uIiwiLS0tTk9UIFRIUk9XTiBUTyBDTElFTlQtLS0iKTsgICAgIAorICAgICAgdG9YTUwoImV4Y2VwdGlvbiIsIi0tLU5PVCBUSFJPV04gVE8gQ0xJRU5ULS0tIik7CiAgICAgfQogICB9CiAKQEAgLTE3Nyw3ICsxNzcsNyBAQAogICBwdWJsaWMgdm9pZCBkb1Bhc3NCeShpbnQgbW9kZSl7CiAgICAgaWYgKG1vZGUgPT0gRW50ZXJwcmlzZUJlYW5Mb2dnZXIuUEFTU19CWV9WQUxVRSkKICAgICAgIGRvUGFzc0J5VmFsdWUgPSB0cnVlOwotICAgIGVsc2UgCisgICAgZWxzZQogICAgICAgZG9QYXNzQnlWYWx1ZSA9IGZhbHNlOwogICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvUGFyc2VNTC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9QYXJzZU1MLmphdmEKaW5kZXggYTI3N2M0NS4uMjlkZTQ4ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9QYXJzZU1MLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9QYXJzZU1MLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuKjsKIAogcHVibGljIGNsYXNzIFBhcnNlTUx7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgdmVuZG9yUGFyc2VyQ2xhc3MgPSAKKyAgICBwcml2YXRlIFN0cmluZyB2ZW5kb3JQYXJzZXJDbGFzcyA9CiAgICAgIm9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuU0FYUGFyc2VyIjsKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKICAgICBib29sZWFuIGluVGVzdGNhc2UgPSBmYWxzZTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgfQogICAgICAgICBIYXNodGFibGVbXSBmaWxlaGFzaCA9IG5ldyBIYXNodGFibGVbbm9fb2ZfZmlsZXNdOwogICAgICAgICBmaWxlRGlmZnMgPSBuZXcgVmVjdG9yW25vX29mX2ZpbGVzXTsKLSAgICAgICAgZm9yKGludCBpID0gMDsgaTxhcmdzLmxlbmd0aDsgaSsrKXsgICAgICAgICAgICAgIAorICAgICAgICBmb3IoaW50IGkgPSAwOyBpPGFyZ3MubGVuZ3RoOyBpKyspewogICAgICAgICAgICAgZmlsZWhhc2hbaV0gPSBuZXcgSGFzaHRhYmxlKCk7CiAgICAgICAgICAgICBmaWxlRGlmZnNbaV0gPSBuZXcgVmVjdG9yKCk7CiAgICAgICAgICAgICBmaWxlRGlmZnNbaV0uYWRkKCI8L3U+PGI+RmlsZToiK2FyZ3NbaV0rIjwvYj48L3U+PGJyPlxuIik7IC8vIGFkZCB0aGUgZmlsZW5hbWUgdG8gdGhlIHZlY3RvcgpAQCAtNTksNyArNTksNyBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGlzcGxheWluZyBoYXNodGFibGUgIyAiK2kpOwogICAgICAgICAgICAgICAgIHBtbC5kaXNwbGF5SGFzaChmaWxlaGFzaFtpXSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICB9CiAgICAgICAgIHBtbC5kaWZmSGFzaChmaWxlaGFzaCk7CiAgICAgICAgIHBtbC5kaXNwbGF5VmVjdG9yQXJyKGZpbGVEaWZmcyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIndyaXRpbmcgZGlmZnMgdG8gZmlsZS4uLiIpOwpAQCAtNzAsMTQgKzcwLDE0IEBACiAgICAgICAgIC8vaGFzaCA9IG51bGw7CiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIC8vSW5pdGlhbGl6ZSBhIHJlYWRlcgotICAgICAgICAgICAgWE1MUmVhZGVyIHJlYWRlciA9IAorICAgICAgICAgICAgWE1MUmVhZGVyIHJlYWRlciA9CiAgICAgICAgICAgICBYTUxSZWFkZXJGYWN0b3J5LmNyZWF0ZVhNTFJlYWRlcih2ZW5kb3JQYXJzZXJDbGFzcyk7CiAgICAgICAgICAgICAvL1JlZ2lzdGVyIENvbnRlbnQgSGFuZGxlcgogICAgICAgICAgICAgQ29udGVudEhhbmRsZXIgbXlDb250ZW50SGFuZGxlciA9IG5ldyBNeUNvbnRlbnRIYW5kbGVyKCk7CiAgICAgICAgICAgICByZWFkZXIuc2V0Q29udGVudEhhbmRsZXIobXlDb250ZW50SGFuZGxlcik7CiAKICAgICAgICAgICAgIC8vUGFyc2UKLSAgICAgICAgICAgIElucHV0U291cmNlIGlucHV0U291cmNlID0gCisgICAgICAgICAgICBJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSA9CiAgICAgICAgICAgICBuZXcgSW5wdXRTb3VyY2UobmV3IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtKG5ldyBqYXZhLmlvLkZpbGUoeG1sVVJJKSkpOwogICAgICAgICAgICAgcmVhZGVyLnBhcnNlKGlucHV0U291cmNlKTsKIApAQCAtMTA1LDcgKzEwNSw3IEBACiAgICAgICAgIH0KICAgICAgICAgcHVibGljIHZvaWQgZW5kUHJlZml4TWFwcGluZyhTdHJpbmcgcHJlZml4KXsKICAgICAgICAgfQotICAgICAgICBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoU3RyaW5nIG5hbWVzcGFjZVVSSSwgU3RyaW5nIGxvY2FsTmFtZSwgCisgICAgICAgIHB1YmxpYyB2b2lkIHN0YXJ0RWxlbWVudChTdHJpbmcgbmFtZXNwYWNlVVJJLCBTdHJpbmcgbG9jYWxOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHFOYW1lLCBBdHRyaWJ1dGVzIGF0dHMpCiAgICAgICAgICAgICB0aHJvd3MgU0FYRXhjZXB0aW9uewogICAgICAgICAgICAgLy8gYWRkIHRoZSBsb2NhbCBuYW1lIGludG8gdmVjdG9yCkBAIC0xMTgsMjkgKzExOCwyOSBAQAogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluc2lkZSB0ZXN0Y2FzZSBpZC4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBhc3N1bWluZyB0aGF0IHdoZW4gaXRzIHRpbWUgdG8gZ2V0IHRoZSBzdGF0dXMsIHRoZSB2YWx1ZSBmb3IgdGhlIGtleXMgd291bGQgaGF2ZSBiZWVuIG9idGFpbmVkLiAKKyAgICAgICAgICAgIC8vIGFzc3VtaW5nIHRoYXQgd2hlbiBpdHMgdGltZSB0byBnZXQgdGhlIHN0YXR1cywgdGhlIHZhbHVlIGZvciB0aGUga2V5cyB3b3VsZCBoYXZlIGJlZW4gb2J0YWluZWQuCiAgICAgICAgICAgICBpZihsb2NhbE5hbWUuZXF1YWxzKCJzdGF0dXMiKSAmJiAoaW5UZXN0Y2FzZSkpewogICAgICAgICAgICAgICAgIC8vZ2V0IGF0dHJpYnV0ZXM6IHBhc3MvZmFpbAogICAgICAgICAgICAgICAgIGlmKGRlYnVnKXsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXR0aW5nIHRlc3RjYXNlIHN0YXR1cy4uLiIpOyAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXR0aW5nIHRlc3RjYXNlIHN0YXR1cy4uLiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB2YWx1ZSA9IGF0dHMuZ2V0VmFsdWUoMCkudHJpbSgpOwogICAgICAgICAgICAgICAgIGlmKChrZXkhPW51bGwpICYmICghKGtleS5lcXVhbHMoIiIpKSkgJiYgKHZhbHVlIT1udWxsKSAmJiAoIXZhbHVlLmVxdWFscygiIikpKXsKICAgICAgICAgICAgICAgICAgICAgaWYoZGVidWcpewotICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJLZXlbIitrZXkrIl0gaGFzIHZhbHVlWyIrdmFsdWUrIl0iKTsgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIktleVsiK2tleSsiXSBoYXMgdmFsdWVbIit2YWx1ZSsiXSIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGhhc2gucHV0KGtleSx2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGdvdFN0YXR1cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGtleSA9ICIiOyAKKyAgICAgICAgICAgICAgICAgICAga2V5ID0gIiI7CiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gIiI7Ci0gICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgaWYoa2V5ID09IG51bGwgfHwga2V5LmVxdWFscygiIikpewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZhbGlkIGtleSEiKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZih2YWx1ZT09IG51bGwgfHwgdmFsdWUuZXF1YWxzKCIiKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludmFsaWQgdmFsdWUhIik7Ci0gICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE0OSwxNyArMTQ5LDE3IEBACiAgICAgICAgICAgICBpZihsb2NhbE5hbWUuZXF1YWxzKCJ0ZXN0Y2FzZSIpKXsKICAgICAgICAgICAgICAgICBpblRlc3RjYXNlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYoZGVidWcpewotICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJPdXRzaWRlIHRlc3RjYXNlIHRhZyIpOyAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT3V0c2lkZSB0ZXN0Y2FzZSB0YWciKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZihsb2NhbE5hbWUuZXF1YWxzKCJpZCIpICYmIChpblRlc3RjYXNlKSl7CiAgICAgICAgICAgICAgICAgaW5UZXN0Y2FzZUlEID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYoZGVidWcpewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk91dHNpZGUgdGVzdGNhc2UtSUQgdGFnIik7ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk91dHNpZGUgdGVzdGNhc2UtSUQgdGFnIik7CiAgICAgICAgICAgICAgICAgfSAgLyoKICAgICAgICAgICAgICAgICBrZXkgPSBrZXkudHJpbSgpOwogICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpOwotICAgICAgICAgICAgICAgIGlmKChrZXkhPW51bGwpICYmICh2YWx1ZSE9bnVsbCkgJiYgCisgICAgICAgICAgICAgICAgaWYoKGtleSE9bnVsbCkgJiYgKHZhbHVlIT1udWxsKSAmJgogICAgICAgICAgICAgICAgICAgICghKHZhbHVlLmVxdWFscygiIikpKSAmJiAoIShrZXkuZXF1YWxzKCIiKSkpKXsKIAogICAgICAgICAgICAgICAgIH0gICAgKi8KQEAgLTE4NywxNiArMTg3LDE2IEBACiAgICAgICAgIH0KICAgICAgICAgcHVibGljIHZvaWQgc2tpcHBlZEVudGl0eShTdHJpbmcgbmFtZSkgdGhyb3dzIFNBWEV4Y2VwdGlvbnsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2tpcHBlZCBlbnRpdHkgaXM6IituYW1lKTsKLSAgICAgICAgfSAgCisgICAgICAgIH0KICAgICB9CiAgICAgLyo9PT09PT09IEVuZCBvZiBJbm5lciBDbGFzcyBEZWZpbml0aW9uID09PT09PT09PT09PT09PT0qLwogCi0gICAgcHVibGljIHZvaWQgZGlzcGxheUhhc2goSGFzaHRhYmxlIGhhc2h0YWJsZSl7IAorICAgIHB1YmxpYyB2b2lkIGRpc3BsYXlIYXNoKEhhc2h0YWJsZSBoYXNodGFibGUpewogICAgICAgICBmb3IgKEVudW1lcmF0aW9uIGUgPSBoYXNodGFibGUua2V5cygpIDsgZS5oYXNNb3JlRWxlbWVudHMoKSA7KSB7CiAgICAgICAgICAgICBTdHJpbmcga2V5dmFsID0gKFN0cmluZyllLm5leHRFbGVtZW50KCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oa2V5dmFsICsiOiIraGFzaHRhYmxlLmdldChrZXl2YWwpKTsKICAgICAgICAgfQotICAgIH0gCisgICAgfQogCiAgICAgcHVibGljIHZvaWQgZGlzcGxheVZlY3RvcihWZWN0b3Igdil7CiAgICAgICAgIGZvcihpbnQgaT0wOyBpPHYuc2l6ZSgpOyBpKyspewpAQCAtMjE0LDggKzIxNCw4IEBACiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIEZpbGUgaW5wdXRmaWxlID0gbmV3IEZpbGUoImZpbGVEaWZmcy5odG1sIik7CiAgICAgICAgICAgICBGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoaW5wdXRmaWxlKTsKLSAgICAgICAgICAgIFN0cmluZyBmaWxlY29udGVudCA9ICI8aDM+RmlsZSBEaWZmIE91dHB1dDwvaDM+PGhyPlxuIjsgICAgICAgICAgICAKLSAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGk8di5sZW5ndGggOyBpKyspeyAgICAKKyAgICAgICAgICAgIFN0cmluZyBmaWxlY29udGVudCA9ICI8aDM+RmlsZSBEaWZmIE91dHB1dDwvaDM+PGhyPlxuIjsKKyAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGk8di5sZW5ndGggOyBpKyspewogICAgICAgICAgICAgICAgIGZvcihpbnQgaiA9IDA7IGo8dltpXS5zaXplKCk7IGorKyl7CiAgICAgICAgICAgICAgICAgICAgIGZpbGVjb250ZW50ICs9IHZbaV0uZ2V0KGopKyI8YnI+XG4iOwogICAgICAgICAgICAgICAgIH0KQEAgLTIyOCwxNCArMjI4LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsZWFzZSBjaGVjayB0aGUgZmlsZSBuYW1lIGFuZCB0cnkgYWdhaW4iKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0gICAgICAgIAorICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIFZlY3RvciBnZXRLZXlMaXN0KEhhc2h0YWJsZVtdIGhhc2hlcyl7CiAgICAgICAgIGludCBoYXNodGFibGVzID0gaGFzaGVzLmxlbmd0aDsKICAgICAgICAgVmVjdG9yIGFsbGtleXM9IG5ldyBWZWN0b3IoKTsKICAgICAgICAgVmVjdG9yW10gaGFzaFZlY3MgPSBuZXcgVmVjdG9yW2hhc2h0YWJsZXNdOwotICAgICAgICBmb3IoaW50IGk9MDsgaTxoYXNodGFibGVzOyBpKyspeyAgICAgICAgICAgIAorICAgICAgICBmb3IoaW50IGk9MDsgaTxoYXNodGFibGVzOyBpKyspewogICAgICAgICAgICAgaGFzaFZlY3NbaV0gPSBuZXcgVmVjdG9yKChDb2xsZWN0aW9uKWhhc2hlc1tpXS5rZXlTZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgYWxsa2V5cyA9IGdldFVuaW9uKGhhc2hWZWNzKTsKQEAgLTI2MCw3ICsyNjAsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0b3RhbCBoYXNodGFibGVzIHRvIGRpZmY6IitoYXNodGFibGVzKTsKICAgICAgICAgfQogICAgICAgICBpbnQgYmlnSGFzaCA9IDA7IC8vIHRha2UgdGhlIGZpcnN0IGhhc2h0YWJsZSBhcyB0aGUgZ29sZGVuIGZpbGUuCi0gICAgICAgIC8qR2V0IGEgbGlzdCBvZiBtb3N0IGtleXMqLyAKKyAgICAgICAgLypHZXQgYSBsaXN0IG9mIG1vc3Qga2V5cyovCiAgICAgICAgIFZlY3RvciBrZXlsaXN0ID0gbmV3IFZlY3RvcigpOwogICAgICAgICBrZXlsaXN0ID0gZ2V0S2V5TGlzdChoYXNoZXMpOwogICAgICAgICAvKlN0YXJ0IGNvbXBhcmluZyBhbGwgb3RoZXIgaGFzaHRhYmxlIGVsZW1lbnRzIHRvIHRoaXMgZ29sZGVuIGxpc3Qgb2YgdGVzdGNhc2VzKi8KQEAgLTI2OSw3ICsyNjksNyBAQAogICAgICAgICBpZihkZWJ1Zyl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIG51bWJlciBvZiB0ZXN0Y2FzZXMgZ2F0aGVyZWQ6ICIrdG90YWxrZXlzKTsKICAgICAgICAgfQotICAgICAgICBmb3IoaW50IGtleW5vPTA7IGtleW5vPHRvdGFsa2V5czsga2V5bm8rKyl7IAorICAgICAgICBmb3IoaW50IGtleW5vPTA7IGtleW5vPHRvdGFsa2V5czsga2V5bm8rKyl7CiAgICAgICAgICAgICBTdHJpbmcga2V5T2JqID0gKFN0cmluZylrZXlsaXN0LmdldChrZXlubyk7CiAgICAgICAgICAgICBPYmplY3QgdmFsID0gbnVsbDsKICAgICAgICAgICAgIE9iamVjdCBiaWdIYXNoVmFsID0gbnVsbDsKQEAgLTI3Nyw4ICsyNzcsOCBAQAogICAgICAgICAgICAgaWYoZGVidWcpewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY2hlY2tpbmcgb3V0IGtleToiK2tleU9iaik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpPGhhc2h0YWJsZXMgOyBpKyspeyAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmKGk9PWJpZ0hhc2gpeyAKKyAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGk8aGFzaHRhYmxlcyA7IGkrKyl7CisgICAgICAgICAgICAgICAgaWYoaT09YmlnSGFzaCl7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBrZXkgZXhpc3RzCkBAIC0yODksMTAgKzI4OSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBrZXkgZXhpc3RzIGJ1dCB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQgaXQgaW50byBib3RoIHRoZSB2ZWN0b3JzLCBpZiBub3QgYWxyZWFkeSB0aGVyZS4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGl0IGludG8gYm90aCB0aGUgdmVjdG9ycywgaWYgbm90IGFscmVhZHkgdGhlcmUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRpZmZPYmogPSAiPGZvbnQgY29sb3I9Ymx1ZT4iK2tleU9iaisKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBoYXMgYW4gaW5jb25zaXN0ZW50IHN0YXR1czoiKyhTdHJpbmcpdmFsKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPC9mb250PiI7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPC9mb250PiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGJpZ2RpZmZPYmogPSAgIjxmb250IGNvbG9yPWJsdWU+IitrZXlPYmorCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaGFzIGFuIGluY29uc2lzdGVudCBzdGF0dXM6IisoU3RyaW5nKWJpZ0hhc2hWYWwrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8L2ZvbnQ+IjsKQEAgLTMwMiwxMCArMzAyLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWZpbGVEaWZmc1tiaWdIYXNoXS5jb250YWlucyhiaWdkaWZmT2JqKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVEaWZmc1tiaWdIYXNoXS5hZGQoYmlnZGlmZk9iaik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSAgIAorICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2V5IGRvZXNuJ3QgZXhpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qYWRkIGl0IGludG8gdGhlIHZlY3RvciBmb3Igc21hbGxlciB0YWJsZXMsIGlmIG5vdCBhbHJlYWR5IHRoZXJlLiovICAgCisgICAgICAgICAgICAgICAgICAgICAgICAvKmFkZCBpdCBpbnRvIHRoZSB2ZWN0b3IgZm9yIHNtYWxsZXIgdGFibGVzLCBpZiBub3QgYWxyZWFkeSB0aGVyZS4qLwogICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRpZmZPYmogPSAgIjxmb250IGNvbG9yPXJlZD4iK2tleU9iaisKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHRlc3RjYXNlIGlzIG1pc3NpbmcgPC9mb250PiI7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZighZmlsZURpZmZzW2ldLmNvbnRhaW5zKGRpZmZPYmopKXsKQEAgLTMxOSwxMyArMzE5LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiIHRlc3RjYXNlIGlzIG1pc3NpbmcgPC9mb250PiI7CiAgICAgICAgICAgICAgICAgICAgIGlmKCFmaWxlRGlmZnNbYmlnSGFzaF0uY29udGFpbnMoYmlnZGlmZk9iaikpewogICAgICAgICAgICAgICAgICAgICAgICAgZmlsZURpZmZzW2JpZ0hhc2hdLmFkZChiaWdkaWZmT2JqKTsKLSAgICAgICAgICAgICAgICAgICAgfS8vIGVuZCBtaXNzaW5nLWtleSBpZiAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB9Ly8gZW5kIG1pc3Npbmcta2V5IGlmCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSAvLyBlbmQgZm9yLWxvb3AgZm9yIGdvaW5nIHRocm91Z2ggdGhlIGhhc2h0YWJsZSBhcnJheQogICAgICAgICB9IC8vIGVuZCBmb3ItbG9vcCBmb3Iga2V5cyBpbiB0aGUgYmlnSGFzaCBoYXNodGFibGUKLSAgICB9IC8vIGVuZCBkaWZmLWhhc2ggbWV0aG9kICAgICAgICAgICAgICAKKyAgICB9IC8vIGVuZCBkaWZmLWhhc2ggbWV0aG9kCiAKLSAgICBwdWJsaWMgdm9pZCB1c2FnZSgpeyAgICAKKyAgICBwdWJsaWMgdm9pZCB1c2FnZSgpewogICAgICAgICBTdHJpbmcgdXNhZ2VTdHIgPSAiVXNhZ2U6XG4gamF2YSBQYXJzZU1MIDx4bWxfZmlsZV8xPiA8eG1sX2ZpbGVfMj4gPHhtbF9maWxlXzM+Li4uIisKICAgICAgICAgICAgICJcblx0VGhpcyBVdGlsaXR5IHdpbGwgbGV0IHlvdSAnZGlmZicgbXVsdGlwbGUgeG1sIisKICAgICAgICAgICAgICJcblx0IGZpbGVzIGFuZCBwcm9kdWNlIGEgZmlsZURpZmYuaHRtbCBmaWxlIGluIHRoZSAiKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9SZXBvcnRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9SZXBvcnRlci5qYXZhCmluZGV4IDE5MzI3MzcuLjJiYTZhYzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvUmVwb3J0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGVyL1JlcG9ydGVyLmphdmEKQEAgLTE3LDE4ICsxNywxOCBAQAogcGFja2FnZSBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyOwogCiAvKioKLSAqIEBDbGFzcyA6IFJlcG9ydGVyIAorICogQENsYXNzIDogUmVwb3J0ZXIKICAgIEBEZXNjcmlwdGlvbiA6IE1haW4gY2xhc3MgdXNlZCBmb3IgVW5pZm9ybSByZXBvcnRpbmcgb2YgcmVzdWx0cwogICAgQEF1dGhvciA6IFJhbWVzaCBNYW5kYXZhCi0gICBATGFzdCBNb2RpZmllZCA6IEluaXRpYWwgQ3JlYXRpb24gYnkgUmFtZXNoIE1hbmRhdmEgYWZ0ZXIgdGFraW5nIGlucHV0IGZyb20gCi0JSmVhbmZyYW5jb2lzIGFuZCBvdGhlciBUZWFtIG1lbWJlcnMKLSAgIEBMYXN0IE1vZGlmaWVkIDogQnkgUmFtZXNoIG9uIDEvMjAvMjAwMiAsIEFkZGVkIGNvZGUgdG8gdXNlIG5ldyB0ZXN0SWRWZWN0b3IgYW5kIAotCQl0ZXN0Q2FzZUlkVmVjdG9yIGZvciAgcHJlc2VydmluZyBvcmRlciBvZiBlbnRyeSBvZiB0aGVtIGFuZCBub3cgPHRlc3RzPgotCQllbGVtZW50IGlzIGFkZGVkIGFyb3VuZCBtdWx0aXBsZSB0ZXN0cworICAgQExhc3QgTW9kaWZpZWQgOiBJbml0aWFsIENyZWF0aW9uIGJ5IFJhbWVzaCBNYW5kYXZhIGFmdGVyIHRha2luZyBpbnB1dCBmcm9tCisgICAgSmVhbmZyYW5jb2lzIGFuZCBvdGhlciBUZWFtIG1lbWJlcnMKKyAgIEBMYXN0IE1vZGlmaWVkIDogQnkgUmFtZXNoIG9uIDEvMjAvMjAwMiAsIEFkZGVkIGNvZGUgdG8gdXNlIG5ldyB0ZXN0SWRWZWN0b3IgYW5kCisgICAgICAgIHRlc3RDYXNlSWRWZWN0b3IgZm9yICBwcmVzZXJ2aW5nIG9yZGVyIG9mIGVudHJ5IG9mIHRoZW0gYW5kIG5vdyA8dGVzdHM+CisgICAgICAgIGVsZW1lbnQgaXMgYWRkZWQgYXJvdW5kIG11bHRpcGxlIHRlc3RzCiAgICBATGFzdCBNb2RpZmllZCA6IEJ5IFJhbWVzaCBvbiA0LzUvMjAwMiwgVGFrZW4gY2FyZSBvZiBtYWNoaW5lIG5hbWUgdW5hdmFpbGFiaWxpdHkKLQkJdW5kZXIgSjJFRS4gQW5kIGFsbG93ZWQgaGF2aW5nIC4gaW4gdGhlIHBhdGggb2YgcmVzdWx0IGZpbGUKKyAgICAgICAgdW5kZXIgSjJFRS4gQW5kIGFsbG93ZWQgaGF2aW5nIC4gaW4gdGhlIHBhdGggb2YgcmVzdWx0IGZpbGUKIAotICogICAgICAgICAgICAgIAorICoKICAqLwogCiAKQEAgLTUzLDExMSArNTMsMTExIEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgcmVzdWx0RmlsZT0iZGVmYXVsdC54bWwiOwogCiAgICAgcHJpdmF0ZSBGaWxlT3V0cHV0U3RyZWFtIGZvdXQ7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHdzX2hvbWU9InNxZS1wZSI7ICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHdzX2hvbWU9InNxZS1wZSI7CiAgICAgdHJhbnNpZW50IHB1YmxpYyBQcmludFdyaXRlciBvdXQgPSBuZXcgUHJpbnRXcml0ZXIoU3lzdGVtLm91dCk7CiAgICAgcHJpdmF0ZSBib29sZWFuIGhhc0JlZW5QcmludGVkID0gZmFsc2U7CiAgICAgLyoqIHRlc3RTdWl0ZUhhc2ggaXMgYSBIYXNodGFibGUgaG9sZGluZyBpbmZvIGFib3V0IGRpZmZlcmVudCB0ZXN0c3VpdGVzLiAqLwogICAgIHByaXZhdGUgc3RhdGljIEhhc2h0YWJsZSB0ZXN0U3VpdGVIYXNoID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIAogCi0gICAgLyoqIAotCVRoaXMgbWV0aG9kIGlzIHVzZWQgZm9yIHNldHRpbmcgdGhlIFRlc3RTdWl0ZSBJbmZvIAorCisgICAgLyoqCisgICAgVGhpcyBtZXRob2QgaXMgdXNlZCBmb3Igc2V0dGluZyB0aGUgVGVzdFN1aXRlIEluZm8KICAgICAgKi8KIAogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RTdWl0ZSggU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2NyaXB0aW9uICkKICAgICB7CiAKLQlUZXN0U3VpdGUgbXlUZXN0U3VpdGUgPSAgKFRlc3RTdWl0ZSl0ZXN0U3VpdGVIYXNoLmdldCggaWQudHJpbSgpICk7IAotCWlmICggbXlUZXN0U3VpdGUgPT0gbnVsbCApCi0JewotCQlteVRlc3RTdWl0ZSA9IG5ldyBUZXN0U3VpdGUoIGlkLCBuYW1lLGRlc2NyaXB0aW9uKTsKLQkJdGVzdFN1aXRlSGFzaC5wdXQoIGlkLnRyaW0oKSwgbXlUZXN0U3VpdGUgKTsKLQl9CisgICAgVGVzdFN1aXRlIG15VGVzdFN1aXRlID0gIChUZXN0U3VpdGUpdGVzdFN1aXRlSGFzaC5nZXQoIGlkLnRyaW0oKSApOworICAgIGlmICggbXlUZXN0U3VpdGUgPT0gbnVsbCApCisgICAgeworICAgICAgICBteVRlc3RTdWl0ZSA9IG5ldyBUZXN0U3VpdGUoIGlkLCBuYW1lLGRlc2NyaXB0aW9uKTsKKyAgICAgICAgdGVzdFN1aXRlSGFzaC5wdXQoIGlkLnRyaW0oKSwgbXlUZXN0U3VpdGUgKTsKKyAgICB9CiAgICAgfQogCi0gICAgLyoqIAotCVRoaXMgbWV0aG9kIGlzIHVzZWQgZm9yIHNldHRpbmcgdGhlIFRlc3RTdWl0ZSBJbmZvIAorICAgIC8qKgorICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgZm9yIHNldHRpbmcgdGhlIFRlc3RTdWl0ZSBJbmZvCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdFN1aXRlKCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKQogICAgIHsKLQlUZXN0U3VpdGUgbXlUZXN0U3VpdGUgPSAgKFRlc3RTdWl0ZSl0ZXN0U3VpdGVIYXNoLmdldCggaWQudHJpbSgpICk7IAotCWlmICggbXlUZXN0U3VpdGUgPT0gbnVsbCApCi0JewotCQlteVRlc3RTdWl0ZSA9IG5ldyBUZXN0U3VpdGUoIGlkLnRyaW0oKSwgbmFtZSk7Ci0JCXRlc3RTdWl0ZUhhc2gucHV0KCBpZC50cmltKCksIG15VGVzdFN1aXRlICk7Ci0JfQorICAgIFRlc3RTdWl0ZSBteVRlc3RTdWl0ZSA9ICAoVGVzdFN1aXRlKXRlc3RTdWl0ZUhhc2guZ2V0KCBpZC50cmltKCkgKTsKKyAgICBpZiAoIG15VGVzdFN1aXRlID09IG51bGwgKQorICAgIHsKKyAgICAgICAgbXlUZXN0U3VpdGUgPSBuZXcgVGVzdFN1aXRlKCBpZC50cmltKCksIG5hbWUpOworICAgICAgICB0ZXN0U3VpdGVIYXNoLnB1dCggaWQudHJpbSgpLCBteVRlc3RTdWl0ZSApOworICAgIH0KICAgICB9CiAKLSAgICAvKiogCi0JVGhpcyBtZXRob2QgaXMgdXNlZCBmb3Igc2V0dGluZyB0aGUgVGVzdFN1aXRlIEluZm8gCisgICAgLyoqCisgICAgVGhpcyBtZXRob2QgaXMgdXNlZCBmb3Igc2V0dGluZyB0aGUgVGVzdFN1aXRlIEluZm8KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0U3VpdGUoIFN0cmluZyBpZCkKICAgICB7Ci0JU3lzdGVtLmVyci5wcmludGxuKCJzZXRUZXN0U3VpdGUgd2l0aCBpZCAtPiAiICsgaWQgKTsKLQlUZXN0U3VpdGUgbXlUZXN0U3VpdGUgPSAgKFRlc3RTdWl0ZSl0ZXN0U3VpdGVIYXNoLmdldCggaWQudHJpbSgpICk7IAotCWlmICggbXlUZXN0U3VpdGUgPT0gbnVsbCApCi0JewotCQlteVRlc3RTdWl0ZSA9IG5ldyBUZXN0U3VpdGUoIGlkLnRyaW0oKSk7Ci0JCXRlc3RTdWl0ZUhhc2gucHV0KCBpZC50cmltKCksIG15VGVzdFN1aXRlICk7Ci0JfQorICAgIFN5c3RlbS5lcnIucHJpbnRsbigic2V0VGVzdFN1aXRlIHdpdGggaWQgLT4gIiArIGlkICk7CisgICAgVGVzdFN1aXRlIG15VGVzdFN1aXRlID0gIChUZXN0U3VpdGUpdGVzdFN1aXRlSGFzaC5nZXQoIGlkLnRyaW0oKSApOworICAgIGlmICggbXlUZXN0U3VpdGUgPT0gbnVsbCApCisgICAgeworICAgICAgICBteVRlc3RTdWl0ZSA9IG5ldyBUZXN0U3VpdGUoIGlkLnRyaW0oKSk7CisgICAgICAgIHRlc3RTdWl0ZUhhc2gucHV0KCBpZC50cmltKCksIG15VGVzdFN1aXRlICk7CisgICAgfQogICAgIH0KIAotICAgIC8qKiAKLQlBZnRlciBzZXR0aW5nIFRlc3QgU3VpdGUgaW5mby4gc3Vpbmcgc2V0VGVzdFN1aXRlLCBXZSBuZWVkIHRvIHVzZSB0aGlzIGFkZFRlc3QgbWV0aG9kIAorICAgIC8qKgorICAgIEFmdGVyIHNldHRpbmcgVGVzdCBTdWl0ZSBpbmZvLiBzdWluZyBzZXRUZXN0U3VpdGUsIFdlIG5lZWQgdG8gdXNlIHRoaXMgYWRkVGVzdCBtZXRob2QKICAgICAgIGZvciBhZGRpbmcgaW5mb3JtYXRpb24gYWJvdXQgcGFydGljdWxhciBUZXN0LiBXZSBuZWVkIHRvICBwYXNzIGJvdGggVGVzdFN1aXRlSWQgYW5kCiAgICAgICBUZXN0SWQgIGFsb25nIHdpdGggb3RoZSBpbmZvIG9mIFRlc3QKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhZGRUZXN0KCBTdHJpbmcgdGVzdFN1aXRlSWQsICBTdHJpbmcgdGVzdElkLCBTdHJpbmcgdGVzdE5hbWUsIFN0cmluZyB0ZXN0RGVzY3JpcHRpb24gKQogICAgIHsKLQlUZXN0U3VpdGUgbXlUZXN0U3VpdGUgPSAoVGVzdFN1aXRlKXRlc3RTdWl0ZUhhc2guZ2V0KCB0ZXN0U3VpdGVJZC50cmltKCkgKTsKLQlpZiAoIG15VGVzdFN1aXRlPT0gbnVsbCApCi0JewotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOmFkZFRlc3QgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBzZXRUZXN0U3VpdGUuIFBFTkRJTkcgOiBTaGFsbCB3ZSB0aHJvdyBFeGNlcHRpb24/Iik7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbigiR2l2ZW4gVGVzdFN1aXRlIElkIC0+ICIgKyB0ZXN0U3VpdGVJZC50cmltKCkgKTsKLQkJcmV0dXJuOwotCX0KLQotCVRlc3QgbXlUZXN0ID0gbmV3IFRlc3QoIHRlc3RJZCwgdGVzdE5hbWUsIHRlc3REZXNjcmlwdGlvbiApOwotCW15VGVzdFN1aXRlLmFkZFRlc3QoIG15VGVzdCApOworICAgIFRlc3RTdWl0ZSBteVRlc3RTdWl0ZSA9IChUZXN0U3VpdGUpdGVzdFN1aXRlSGFzaC5nZXQoIHRlc3RTdWl0ZUlkLnRyaW0oKSApOworICAgIGlmICggbXlUZXN0U3VpdGU9PSBudWxsICkKKyAgICB7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6YWRkVGVzdCBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IHNldFRlc3RTdWl0ZS4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHaXZlbiBUZXN0U3VpdGUgSWQgLT4gIiArIHRlc3RTdWl0ZUlkLnRyaW0oKSApOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLyoqIAotCUFmdGVyIHNldHRpbmcgVGVzdCBTdWl0ZSBpbmZvLiBzdWluZyBzZXRUZXN0U3VpdGUsIFdlIG5lZWQgdG8gdXNlIHRoaXMgYWRkVGVzdCBtZXRob2QgCisgICAgVGVzdCBteVRlc3QgPSBuZXcgVGVzdCggdGVzdElkLCB0ZXN0TmFtZSwgdGVzdERlc2NyaXB0aW9uICk7CisgICAgbXlUZXN0U3VpdGUuYWRkVGVzdCggbXlUZXN0ICk7CisgICAgfQorCisgICAgLyoqCisgICAgQWZ0ZXIgc2V0dGluZyBUZXN0IFN1aXRlIGluZm8uIHN1aW5nIHNldFRlc3RTdWl0ZSwgV2UgbmVlZCB0byB1c2UgdGhpcyBhZGRUZXN0IG1ldGhvZAogICAgICAgZm9yIGFkZGluZyBpbmZvcm1hdGlvbiBhYm91dCBwYXJ0aWN1bGFyIFRlc3QuIFdlIG5lZWQgdG8gIHBhc3MgYm90aCBUZXN0U3VpdGVJZCBhbmQKICAgICAgIFRlc3RJZCAgYWxvbmcgd2l0aCBvdGhlIGluZm8gb2YgVGVzdAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGFkZFRlc3QoIFN0cmluZyB0ZXN0U3VpdGVJZCwgIFN0cmluZyB0ZXN0SWQsIFN0cmluZyB0ZXN0TmFtZSApCiAgICAgewotCVRlc3RTdWl0ZSBteVRlc3RTdWl0ZSA9IChUZXN0U3VpdGUpdGVzdFN1aXRlSGFzaC5nZXQoIHRlc3RTdWl0ZUlkLnRyaW0oKSApOwotCWlmICggbXlUZXN0U3VpdGU9PSBudWxsICkKLQl7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6YWRkVGVzdCBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IHNldFRlc3RTdWl0ZS4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKLQkJU3lzdGVtLmVyci5wcmludGxuKCJHaXZlbiBUZXN0U3VpdGUgSWQgLT4gIiArIHRlc3RTdWl0ZUlkLnRyaW0oKSApOwotCQlyZXR1cm47Ci0JfQotCi0JVGVzdCBteVRlc3QgPSBuZXcgVGVzdCggdGVzdElkLCB0ZXN0TmFtZSApOwotCW15VGVzdFN1aXRlLmFkZFRlc3QoIG15VGVzdCApOworICAgIFRlc3RTdWl0ZSBteVRlc3RTdWl0ZSA9IChUZXN0U3VpdGUpdGVzdFN1aXRlSGFzaC5nZXQoIHRlc3RTdWl0ZUlkLnRyaW0oKSApOworICAgIGlmICggbXlUZXN0U3VpdGU9PSBudWxsICkKKyAgICB7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6YWRkVGVzdCBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IHNldFRlc3RTdWl0ZS4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHaXZlbiBUZXN0U3VpdGUgSWQgLT4gIiArIHRlc3RTdWl0ZUlkLnRyaW0oKSApOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLyoqIAotCUFmdGVyIHVzaW5nIHNldHRoaW5nIFRlc3QgU3VpdGUgaW5mby4gV2UgbmVlZCB0byB1c2UgdGhpcyBhZGRUZXN0IG1ldGhvZCAKKyAgICBUZXN0IG15VGVzdCA9IG5ldyBUZXN0KCB0ZXN0SWQsIHRlc3ROYW1lICk7CisgICAgbXlUZXN0U3VpdGUuYWRkVGVzdCggbXlUZXN0ICk7CisgICAgfQorCisgICAgLyoqCisgICAgQWZ0ZXIgdXNpbmcgc2V0dGhpbmcgVGVzdCBTdWl0ZSBpbmZvLiBXZSBuZWVkIHRvIHVzZSB0aGlzIGFkZFRlc3QgbWV0aG9kCiAgICAgICBmb3IgYWRkaW5nIGluZm9ybWF0aW9uIGFib3V0IHBhcnRpY3VsYXIgVGVzdC4gV2UgbmVlZCB0byAgcGFzcyBib3RoIFRlc3RTdWl0ZUlkIGFuZAotICAgICAgVGVzdElkICAKKyAgICAgIFRlc3RJZAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGFkZFRlc3QoIFN0cmluZyB0ZXN0U3VpdGVJZCwgIFN0cmluZyB0ZXN0SWQgKQogICAgIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImFkZFRlc3Qgd2l0aCB0ZXN0U3VpdGVJZDo6IHRlc3RJZCAtPiAiICsgdGVzdFN1aXRlSWQgKyAiOjoiICsgdGVzdElkICk7Ci0JVGVzdFN1aXRlIG15VGVzdFN1aXRlID0gKFRlc3RTdWl0ZSl0ZXN0U3VpdGVIYXNoLmdldCggdGVzdFN1aXRlSWQudHJpbSgpICk7Ci0JaWYgKCBteVRlc3RTdWl0ZT09IG51bGwgKQotCXsKLQkJU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjphZGRUZXN0IG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgc2V0VGVzdFN1aXRlLiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOwotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkdpdmVuIFRlc3RTdWl0ZSBJZCAtPiAiICsgdGVzdFN1aXRlSWQudHJpbSgpICk7Ci0JCXJldHVybjsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJhZGRUZXN0IHdpdGggdGVzdFN1aXRlSWQ6OiB0ZXN0SWQgLT4gIiArIHRlc3RTdWl0ZUlkICsgIjo6IiArIHRlc3RJZCApOworICAgIFRlc3RTdWl0ZSBteVRlc3RTdWl0ZSA9IChUZXN0U3VpdGUpdGVzdFN1aXRlSGFzaC5nZXQoIHRlc3RTdWl0ZUlkLnRyaW0oKSApOworICAgIGlmICggbXlUZXN0U3VpdGU9PSBudWxsICkKKyAgICB7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6YWRkVGVzdCBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IHNldFRlc3RTdWl0ZS4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHaXZlbiBUZXN0U3VpdGUgSWQgLT4gIiArIHRlc3RTdWl0ZUlkLnRyaW0oKSApOworICAgICAgICByZXR1cm47CisgICAgfQogCi0JVGVzdCBteVRlc3QgPSBuZXcgVGVzdCggdGVzdElkICk7Ci0JbXlUZXN0U3VpdGUuYWRkVGVzdCggbXlUZXN0ICk7CisgICAgVGVzdCBteVRlc3QgPSBuZXcgVGVzdCggdGVzdElkICk7CisgICAgbXlUZXN0U3VpdGUuYWRkVGVzdCggbXlUZXN0ICk7CiAgICAgfQogCiAKQEAgLTE5MiwxMzQgKzE5MiwxMzQgQEAKIAogICAgICB9CiAKLSAgICAvKiogCi0JQWZ0ZXIgYWRkaW5nIGEgVGVzdCB1c2luZyBhZGRUZXN0ICwgV2UgbmVlZCB0byB1c2UgdGhpcyBzZXRUZXN0U3RhdHVzIG1ldGhvZCAKKyAgICAvKioKKyAgICBBZnRlciBhZGRpbmcgYSBUZXN0IHVzaW5nIGFkZFRlc3QgLCBXZSBuZWVkIHRvIHVzZSB0aGlzIHNldFRlc3RTdGF0dXMgbWV0aG9kCiAgICAgICBmb3Igc2V0dGluZyBUZXN0IHN0YXR1cyhwYXNzL2ZhaWwpIGluZm9ybWF0aW9uIGFib3V0IHBhcnRpY3VsYXIgVGVzdC4gV2UgbmVlZCB0byAgcGFzcyBib3RoIFRlc3RTdWl0ZUlkIGFuZCBUZXN0SWQgIGFsb25nIHdpdGggc3RhdHVzIGluZm9ybWF0aW9uLiBUaGlzIGlzIG9wdGlvbmFsIGFzIGluIHNvbWUgY2FzZQogICAgICBvbmx5IFRlc3RDYXNlcyB3aWxsIGhhdmUgc3RhdHVzCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdFN0YXR1cyAoIFN0cmluZyB0ZXN0U3VpdGVJZCwgU3RyaW5nIHRlc3RJZCwgU3RyaW5nIHN0YXR1cywgU3RyaW5nIHN0YXR1c0Rlc2NyaXB0aW9uICkKICAgICB7Ci0JVGVzdFN1aXRlIG15VGVzdFN1aXRlID0gKFRlc3RTdWl0ZSl0ZXN0U3VpdGVIYXNoLmdldCggdGVzdFN1aXRlSWQudHJpbSgpICk7CisgICAgVGVzdFN1aXRlIG15VGVzdFN1aXRlID0gKFRlc3RTdWl0ZSl0ZXN0U3VpdGVIYXNoLmdldCggdGVzdFN1aXRlSWQudHJpbSgpICk7CiAKLQkKLQlpZiAoIG15VGVzdFN1aXRlPT0gbnVsbCApCi0JewotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOnNldFRlc3RTdGF0dXMgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBzZXRUZXN0U3VpdGUuIFBFTkRJTkcgOiBTaGFsbCB3ZSB0aHJvdyBFeGNlcHRpb24/Iik7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbigiR2l2ZW4gVGVzdFN1aXRlIElkIC0+ICIgKyB0ZXN0U3VpdGVJZC50cmltKCkgKTsKLQkJcmV0dXJuOwotCX0KIAotCVRlc3QgbXlUZXN0ID0gKFRlc3QpbXlUZXN0U3VpdGUuZ2V0VGVzdEhhc2goKS5nZXQoIHRlc3RJZC50cmltKCkgKTsKLQlpZiAoIG15VGVzdCA9PSBudWxsICkKLQl7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6c2V0VGVzdFN0YXR1cyBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IGFkZFRlc3QuIFBFTkRJTkcgOiBTaGFsbCB3ZSB0aHJvdyBFeGNlcHRpb24/Iik7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbigiR2l2ZW4gVGVzdFN1aXRlIElkOjpUZXN0IElkIC0+ICIgKyB0ZXN0U3VpdGVJZC50cmltKCkgKyAiOjoiICsgdGVzdElkLnRyaW0oKSApOwotCQlyZXR1cm47Ci0JfQotCW15VGVzdC5zZXRTdGF0dXMoIHN0YXR1cyk7Ci0JbXlUZXN0LnNldFN0YXR1c0Rlc2NyaXB0aW9uKCBzdGF0dXNEZXNjcmlwdGlvbik7CisgICAgaWYgKCBteVRlc3RTdWl0ZT09IG51bGwgKQorICAgIHsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjpzZXRUZXN0U3RhdHVzIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgc2V0VGVzdFN1aXRlLiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdpdmVuIFRlc3RTdWl0ZSBJZCAtPiAiICsgdGVzdFN1aXRlSWQudHJpbSgpICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBUZXN0IG15VGVzdCA9IChUZXN0KW15VGVzdFN1aXRlLmdldFRlc3RIYXNoKCkuZ2V0KCB0ZXN0SWQudHJpbSgpICk7CisgICAgaWYgKCBteVRlc3QgPT0gbnVsbCApCisgICAgeworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOnNldFRlc3RTdGF0dXMgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBhZGRUZXN0LiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdpdmVuIFRlc3RTdWl0ZSBJZDo6VGVzdCBJZCAtPiAiICsgdGVzdFN1aXRlSWQudHJpbSgpICsgIjo6IiArIHRlc3RJZC50cmltKCkgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBteVRlc3Quc2V0U3RhdHVzKCBzdGF0dXMpOworICAgIG15VGVzdC5zZXRTdGF0dXNEZXNjcmlwdGlvbiggc3RhdHVzRGVzY3JpcHRpb24pOwogCiAgICAgIH0KIAotICAgIC8qKiAKLQlBZnRlciBhZGRpbmcgYSBUZXN0IHVzaW5nIGFkZFRlc3QgLCBXZSBuZWVkIHRvIHVzZSB0aGlzIHNldFRlc3RTdGF0dXMgbWV0aG9kIAorICAgIC8qKgorICAgIEFmdGVyIGFkZGluZyBhIFRlc3QgdXNpbmcgYWRkVGVzdCAsIFdlIG5lZWQgdG8gdXNlIHRoaXMgc2V0VGVzdFN0YXR1cyBtZXRob2QKICAgICAgIGZvciBzZXR0aW5nIFRlc3Qgc3RhdHVzKHBhc3MvZmFpbCkgaW5mb3JtYXRpb24gYWJvdXQgcGFydGljdWxhciBUZXN0LiBXZSBuZWVkIHRvICBwYXNzIGJvdGggVGVzdFN1aXRlSWQgYW5kIFRlc3RJZCAgYWxvbmcgd2l0aCBzdGF0dXMgaW5mb3JtYXRpb24uIFRoaXMgaXMgb3B0aW9uYWwgYXMgaW4gc29tZSBjYXNlCiAgICAgIG9ubHkgVGVzdENhc2VzIHdpbGwgaGF2ZSBzdGF0dXMKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0U3RhdHVzICggU3RyaW5nIHRlc3RTdWl0ZUlkLCBTdHJpbmcgdGVzdElkLCBTdHJpbmcgc3RhdHVzICkKICAgICB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJzZXRUZXN0U3RhdHVzIHRlc3RTdWl0ZUlkOjp0ZXN0SWQ6OnN0YXR1cyAtPiAiICsgdGVzdFN1aXRlSWQgKyAiOjoiICsgdGVzdElkICsgIjo6IiArIHN0YXR1cyApOwotCVRlc3RTdWl0ZSBteVRlc3RTdWl0ZSA9IChUZXN0U3VpdGUpdGVzdFN1aXRlSGFzaC5nZXQoIHRlc3RTdWl0ZUlkLnRyaW0oKSApOwotCWlmICggbXlUZXN0U3VpdGU9PSBudWxsICkKLQl7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6c2V0VGVzdFN0YXR1cyBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IHNldFRlc3RTdWl0ZS4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKLQkJU3lzdGVtLmVyci5wcmludGxuKCJHaXZlbiBUZXN0U3VpdGUgSWQgLT4gIiArIHRlc3RTdWl0ZUlkLnRyaW0oKSApOwotCQlyZXR1cm47Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigic2V0VGVzdFN0YXR1cyB0ZXN0U3VpdGVJZDo6dGVzdElkOjpzdGF0dXMgLT4gIiArIHRlc3RTdWl0ZUlkICsgIjo6IiArIHRlc3RJZCArICI6OiIgKyBzdGF0dXMgKTsKKyAgICBUZXN0U3VpdGUgbXlUZXN0U3VpdGUgPSAoVGVzdFN1aXRlKXRlc3RTdWl0ZUhhc2guZ2V0KCB0ZXN0U3VpdGVJZC50cmltKCkgKTsKKyAgICBpZiAoIG15VGVzdFN1aXRlPT0gbnVsbCApCisgICAgeworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOnNldFRlc3RTdGF0dXMgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBzZXRUZXN0U3VpdGUuIFBFTkRJTkcgOiBTaGFsbCB3ZSB0aHJvdyBFeGNlcHRpb24/Iik7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR2l2ZW4gVGVzdFN1aXRlIElkIC0+ICIgKyB0ZXN0U3VpdGVJZC50cmltKCkgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotCVRlc3QgbXlUZXN0ID0oVGVzdCkgbXlUZXN0U3VpdGUuZ2V0VGVzdEhhc2goKS5nZXQoIHRlc3RJZC50cmltKCkgKTsKLQlpZiAoIG15VGVzdCA9PSBudWxsICkKLQl7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6c2V0VGVzdFN0YXR1cyBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IGFkZFRlc3QuIFBFTkRJTkcgOiBTaGFsbCB3ZSB0aHJvdyBFeGNlcHRpb24/Iik7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbigiR2l2ZW4gVGVzdFN1aXRlIElkOjpUZXN0IElkIC0+ICIgKyB0ZXN0U3VpdGVJZC50cmltKCkgKyAiOjoiICsgdGVzdElkLnRyaW0oKSApOwotCQlyZXR1cm47Ci0JfQotCW15VGVzdC5zZXRTdGF0dXMoIHN0YXR1cyk7CisgICAgVGVzdCBteVRlc3QgPShUZXN0KSBteVRlc3RTdWl0ZS5nZXRUZXN0SGFzaCgpLmdldCggdGVzdElkLnRyaW0oKSApOworICAgIGlmICggbXlUZXN0ID09IG51bGwgKQorICAgIHsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjpzZXRUZXN0U3RhdHVzIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgYWRkVGVzdC4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHaXZlbiBUZXN0U3VpdGUgSWQ6OlRlc3QgSWQgLT4gIiArIHRlc3RTdWl0ZUlkLnRyaW0oKSArICI6OiIgKyB0ZXN0SWQudHJpbSgpICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbXlUZXN0LnNldFN0YXR1cyggc3RhdHVzKTsKICAgICAgfQogCi0gICAgLyoqIAotCUFmdGVyIGFkZGluZyBhIFRlc3QgdXNpbmcgYWRkVGVzdCwgV2UgbmVlZCB0byB1c2UgdGhpcyBhZGRUZXN0Q2FzZSBtZXRob2QgCisgICAgLyoqCisgICAgQWZ0ZXIgYWRkaW5nIGEgVGVzdCB1c2luZyBhZGRUZXN0LCBXZSBuZWVkIHRvIHVzZSB0aGlzIGFkZFRlc3RDYXNlIG1ldGhvZAogICAgICAgZm9yIGFkZGluZyBpbmZvcm1hdGlvbiBhYm91dCBwYXJ0aWN1bGFyIFRlc3RDYXNlIGNvcnJlc3BvbmRpbmcgdG8gdGhhdCBUZXN0LiBXZSBuZWVkIHRvICBwYXNzIFRlc3RTdWl0ZUlkLCBUZXN0SWQgYW5kIFRlc3RDYXNlSWQgYWxvbmcgd2l0aCBvdGhlIGluZm8gb2YgVGVzdENhc2UKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhZGRUZXN0Q2FzZSggU3RyaW5nIHRlc3RTdWl0ZUlkLCAgU3RyaW5nIHRlc3RJZCAsIFN0cmluZyB0ZXN0Q2FzZUlkKQogICAgIHsKLQlUZXN0U3VpdGUgbXlUZXN0U3VpdGUgPSAoVGVzdFN1aXRlKXRlc3RTdWl0ZUhhc2guZ2V0KCB0ZXN0U3VpdGVJZC50cmltKCkgKTsKLQlpZiAoIG15VGVzdFN1aXRlPT0gbnVsbCApCi0JewotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOmFkZFRlc3RDYXNlIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgc2V0VGVzdFN1aXRlLiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOwotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkdpdmVuIFRlc3RTdWl0ZSBJZCAtPiAiICsgdGVzdFN1aXRlSWQudHJpbSgpICk7Ci0JCXJldHVybjsKLQl9Ci0JVGVzdCBteVRlc3QgPSAoVGVzdClteVRlc3RTdWl0ZS5nZXRUZXN0SGFzaCgpLmdldCggdGVzdElkLnRyaW0oKSApOwotCWlmICggbXlUZXN0ID09IG51bGwgKQotCXsKLQkJU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjphZGRUZXN0Q2FzZSBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IGFkZFRlc3QuIFBFTkRJTkcgOiBTaGFsbCB3ZSB0aHJvdyBFeGNlcHRpb24/Iik7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbigiR2l2ZW4gVGVzdFN1aXRlIElkOjpUZXN0IElkIC0+ICIgKyB0ZXN0U3VpdGVJZC50cmltKCkgKyAiOjoiICsgdGVzdElkLnRyaW0oKSApOwotCQlyZXR1cm47Ci0JfQotCi0JVGVzdENhc2UgbXlUZXN0Q2FzZSA9IG5ldyBUZXN0Q2FzZSggdGVzdENhc2VJZC50cmltKCkgKTsKLQlteVRlc3QuYWRkVGVzdENhc2UgKCBteVRlc3RDYXNlICk7CisgICAgVGVzdFN1aXRlIG15VGVzdFN1aXRlID0gKFRlc3RTdWl0ZSl0ZXN0U3VpdGVIYXNoLmdldCggdGVzdFN1aXRlSWQudHJpbSgpICk7CisgICAgaWYgKCBteVRlc3RTdWl0ZT09IG51bGwgKQorICAgIHsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjphZGRUZXN0Q2FzZSBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IHNldFRlc3RTdWl0ZS4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHaXZlbiBUZXN0U3VpdGUgSWQgLT4gIiArIHRlc3RTdWl0ZUlkLnRyaW0oKSApOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFRlc3QgbXlUZXN0ID0gKFRlc3QpbXlUZXN0U3VpdGUuZ2V0VGVzdEhhc2goKS5nZXQoIHRlc3RJZC50cmltKCkgKTsKKyAgICBpZiAoIG15VGVzdCA9PSBudWxsICkKKyAgICB7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6YWRkVGVzdENhc2UgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBhZGRUZXN0LiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdpdmVuIFRlc3RTdWl0ZSBJZDo6VGVzdCBJZCAtPiAiICsgdGVzdFN1aXRlSWQudHJpbSgpICsgIjo6IiArIHRlc3RJZC50cmltKCkgKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8qKiAKLQlBZnRlciBhZGRpbmcgYSBUZXN0IHVzaW5nIGFkZFRlc3QsIFdlIG5lZWQgdG8gdXNlIHRoaXMgYWRkVGVzdENhc2UgbWV0aG9kIAorICAgIFRlc3RDYXNlIG15VGVzdENhc2UgPSBuZXcgVGVzdENhc2UoIHRlc3RDYXNlSWQudHJpbSgpICk7CisgICAgbXlUZXN0LmFkZFRlc3RDYXNlICggbXlUZXN0Q2FzZSApOworICAgIH0KKworICAgIC8qKgorICAgIEFmdGVyIGFkZGluZyBhIFRlc3QgdXNpbmcgYWRkVGVzdCwgV2UgbmVlZCB0byB1c2UgdGhpcyBhZGRUZXN0Q2FzZSBtZXRob2QKICAgICAgIGZvciBhZGRpbmcgaW5mb3JtYXRpb24gYWJvdXQgcGFydGljdWxhciBUZXN0Q2FzZSBjb3JyZXNwb25kaW5nIHRvIHRoYXQgVGVzdC4gV2UgbmVlZCB0byAgcGFzcyBUZXN0U3VpdGVJZCwgVGVzdElkIGFuZCBUZXN0Q2FzZUlkIGFsb25nIHdpdGggb3RoZSBpbmZvIG9mIFRlc3RDYXNlCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYWRkVGVzdENhc2UoIFN0cmluZyB0ZXN0U3VpdGVJZCwgIFN0cmluZyB0ZXN0SWQgLCBTdHJpbmcgdGVzdENhc2VJZCwgU3RyaW5nIHRlc3RDYXNlTmFtZSApCiAgICAgewotCVRlc3RTdWl0ZSBteVRlc3RTdWl0ZSA9IChUZXN0U3VpdGUpdGVzdFN1aXRlSGFzaC5nZXQoIHRlc3RTdWl0ZUlkLnRyaW0oKSApOwotCWlmICggbXlUZXN0U3VpdGU9PSBudWxsICkKLQl7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6YWRkVGVzdENhc2UgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBzZXRUZXN0U3VpdGUuIFBFTkRJTkcgOiBTaGFsbCB3ZSB0aHJvdyBFeGNlcHRpb24/Iik7Ci0JCXJldHVybjsKLQl9Ci0JVGVzdCBteVRlc3QgPSAoVGVzdClteVRlc3RTdWl0ZS5nZXRUZXN0SGFzaCgpLmdldCggdGVzdElkLnRyaW0oKSApOwotCWlmICggbXlUZXN0ID09IG51bGwgKQotCXsKLQkJU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjphZGRUZXN0Q2FzZSBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IGFkZFRlc3QuIFBFTkRJTkcgOiBTaGFsbCB3ZSB0aHJvdyBFeGNlcHRpb24/Iik7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbigiR2l2ZW4gVGVzdFN1aXRlIElkOjpUZXN0IElkIC0+ICIgKyB0ZXN0U3VpdGVJZC50cmltKCkgKyAiOjoiICsgdGVzdElkLnRyaW0oKSApOwotCQlyZXR1cm47Ci0JfQotCi0JVGVzdENhc2UgbXlUZXN0Q2FzZSA9IG5ldyBUZXN0Q2FzZSggdGVzdENhc2VJZC50cmltKCksIHRlc3RDYXNlTmFtZSApOwotCW15VGVzdC5hZGRUZXN0Q2FzZSAoIG15VGVzdENhc2UgKTsKKyAgICBUZXN0U3VpdGUgbXlUZXN0U3VpdGUgPSAoVGVzdFN1aXRlKXRlc3RTdWl0ZUhhc2guZ2V0KCB0ZXN0U3VpdGVJZC50cmltKCkgKTsKKyAgICBpZiAoIG15VGVzdFN1aXRlPT0gbnVsbCApCisgICAgeworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOmFkZFRlc3RDYXNlIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgc2V0VGVzdFN1aXRlLiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFRlc3QgbXlUZXN0ID0gKFRlc3QpbXlUZXN0U3VpdGUuZ2V0VGVzdEhhc2goKS5nZXQoIHRlc3RJZC50cmltKCkgKTsKKyAgICBpZiAoIG15VGVzdCA9PSBudWxsICkKKyAgICB7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6YWRkVGVzdENhc2UgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBhZGRUZXN0LiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdpdmVuIFRlc3RTdWl0ZSBJZDo6VGVzdCBJZCAtPiAiICsgdGVzdFN1aXRlSWQudHJpbSgpICsgIjo6IiArIHRlc3RJZC50cmltKCkgKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8qKiAKLQlBZnRlciBhZGRpbmcgYSBUZXN0IHVzaW5nIGFkZFRlc3QsIFdlIG5lZWQgdG8gdXNlIHRoaXMgYWRkVGVzdENhc2UgbWV0aG9kIAorICAgIFRlc3RDYXNlIG15VGVzdENhc2UgPSBuZXcgVGVzdENhc2UoIHRlc3RDYXNlSWQudHJpbSgpLCB0ZXN0Q2FzZU5hbWUgKTsKKyAgICBteVRlc3QuYWRkVGVzdENhc2UgKCBteVRlc3RDYXNlICk7CisgICAgfQorCisgICAgLyoqCisgICAgQWZ0ZXIgYWRkaW5nIGEgVGVzdCB1c2luZyBhZGRUZXN0LCBXZSBuZWVkIHRvIHVzZSB0aGlzIGFkZFRlc3RDYXNlIG1ldGhvZAogICAgICAgZm9yIGFkZGluZyBpbmZvcm1hdGlvbiBhYm91dCBwYXJ0aWN1bGFyIFRlc3RDYXNlIGNvcnJlc3BvbmRpbmcgdG8gdGhhdCBUZXN0LiBXZSBuZWVkIHRvICBwYXNzIFRlc3RTdWl0ZUlkLCBUZXN0SWQgYW5kIFRlc3RDYXNlSWQgYWxvbmcgd2l0aCBvdGhlIGluZm8gb2YgVGVzdENhc2UKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhZGRUZXN0Q2FzZSggU3RyaW5nIHRlc3RTdWl0ZUlkLCAgU3RyaW5nIHRlc3RJZCAsIFN0cmluZyB0ZXN0Q2FzZUlkLCBTdHJpbmcgdGVzdENhc2VOYW1lICwgU3RyaW5nIHRlc3RDYXNlRGVzY3JpcHRpb24gKQogICAgIHsKLQlUZXN0U3VpdGUgbXlUZXN0U3VpdGUgPSAoVGVzdFN1aXRlKXRlc3RTdWl0ZUhhc2guZ2V0KCB0ZXN0U3VpdGVJZC50cmltKCkgKTsKLQlpZiAoIG15VGVzdFN1aXRlPT0gbnVsbCApCi0JewotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOmFkZFRlc3RDYXNlIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgc2V0VGVzdFN1aXRlLiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOwotCQlyZXR1cm47Ci0JfQotCVRlc3QgbXlUZXN0ID0gKFRlc3QpbXlUZXN0U3VpdGUuZ2V0VGVzdEhhc2goKS5nZXQoIHRlc3RJZC50cmltKCkgKTsKLQlpZiAoIG15VGVzdCA9PSBudWxsICkKLQl7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6YWRkVGVzdENhc2UgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBhZGRUZXN0LiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOwotCQlyZXR1cm47Ci0JfQotCi0JVGVzdENhc2UgbXlUZXN0Q2FzZSA9IG5ldyBUZXN0Q2FzZSggdGVzdENhc2VJZC50cmltKCksIHRlc3RDYXNlTmFtZSwgdGVzdENhc2VEZXNjcmlwdGlvbiApOwotCW15VGVzdC5hZGRUZXN0Q2FzZSAoIG15VGVzdENhc2UgKTsKKyAgICBUZXN0U3VpdGUgbXlUZXN0U3VpdGUgPSAoVGVzdFN1aXRlKXRlc3RTdWl0ZUhhc2guZ2V0KCB0ZXN0U3VpdGVJZC50cmltKCkgKTsKKyAgICBpZiAoIG15VGVzdFN1aXRlPT0gbnVsbCApCisgICAgeworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOmFkZFRlc3RDYXNlIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgc2V0VGVzdFN1aXRlLiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFRlc3QgbXlUZXN0ID0gKFRlc3QpbXlUZXN0U3VpdGUuZ2V0VGVzdEhhc2goKS5nZXQoIHRlc3RJZC50cmltKCkgKTsKKyAgICBpZiAoIG15VGVzdCA9PSBudWxsICkKKyAgICB7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6YWRkVGVzdENhc2UgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBhZGRUZXN0LiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0JCisgICAgVGVzdENhc2UgbXlUZXN0Q2FzZSA9IG5ldyBUZXN0Q2FzZSggdGVzdENhc2VJZC50cmltKCksIHRlc3RDYXNlTmFtZSwgdGVzdENhc2VEZXNjcmlwdGlvbiApOworICAgIG15VGVzdC5hZGRUZXN0Q2FzZSAoIG15VGVzdENhc2UgKTsKKyAgICB9CisKKwogCiAgICAgIC8qKgogICAgICAgICBBZnRlciBhZGRpbmcgYSBUZXN0Q2FzZSB1c2luZyBhZGRUZXN0Q2FzZSAsIFdlIG5lZWQgdG8gdXNlIHRoaXMgc2V0VGVzdENhc2VTdGF0dXMgbWV0aG9kCkBAIC0zNTQsOTQgKzM1NCw5NCBAQAogICAgICB9CiAKIAotICAgIC8qKiAKLQlBZnRlciBhZGRpbmcgYSBUZXN0Q2FzZSB1c2luZyBhZGRUZXN0Q2FzZSAsIFdlIG5lZWQgdG8gdXNlIHRoaXMgc2V0VGVzdENhc2VTdGF0dXMgbWV0aG9kIAorICAgIC8qKgorICAgIEFmdGVyIGFkZGluZyBhIFRlc3RDYXNlIHVzaW5nIGFkZFRlc3RDYXNlICwgV2UgbmVlZCB0byB1c2UgdGhpcyBzZXRUZXN0Q2FzZVN0YXR1cyBtZXRob2QKICAgICAgIGZvciBzZXR0aW5nIFRlc3RDYXNlIHN0YXR1cyhwYXNzL2ZhaWwpIGluZm9ybWF0aW9uIGFib3V0IHBhcnRpY3VsYXIgVGVzdENhc2UuIFdlIG5lZWQgdG8gIHBhc3MgVGVzdFN1aXRlSWQsIFRlc3RJZCBhbmQgVGVzdENhc2VJZCAgYWxvbmcgd2l0aCBzdGF0dXMgaW5mb3JtYXRpb24uCiAgICAgIEVhY2ggVGVzdENhc2Ugd2lsbCBoYXZlIHN0YXR1cwogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RDYXNlU3RhdHVzICggU3RyaW5nIHRlc3RTdWl0ZUlkLCBTdHJpbmcgdGVzdElkLCBTdHJpbmcgdGVzdENhc2VJZCwgIFN0cmluZyBzdGF0dXMsIFN0cmluZyBzdGF0dXNEZXNjcmlwdGlvbiApCiAgICAgewotCVRlc3RTdWl0ZSBteVRlc3RTdWl0ZSA9IChUZXN0U3VpdGUpdGVzdFN1aXRlSGFzaC5nZXQoIHRlc3RTdWl0ZUlkLnRyaW0oKSApOwotCWlmICggbXlUZXN0U3VpdGU9PSBudWxsICkKLQl7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6c2V0VGVzdENhc2VTdGF0dXMgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBzZXRUZXN0U3VpdGUuIFBFTkRJTkcgOiBTaGFsbCB3ZSB0aHJvdyBFeGNlcHRpb24/Iik7Ci0JCXJldHVybjsKLQl9CisgICAgVGVzdFN1aXRlIG15VGVzdFN1aXRlID0gKFRlc3RTdWl0ZSl0ZXN0U3VpdGVIYXNoLmdldCggdGVzdFN1aXRlSWQudHJpbSgpICk7CisgICAgaWYgKCBteVRlc3RTdWl0ZT09IG51bGwgKQorICAgIHsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjpzZXRUZXN0Q2FzZVN0YXR1cyBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IHNldFRlc3RTdWl0ZS4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotCVRlc3QgbXlUZXN0ID0gKFRlc3QpbXlUZXN0U3VpdGUuZ2V0VGVzdEhhc2goKS5nZXQoIHRlc3RJZC50cmltKCkgKTsKLQlpZiAoIG15VGVzdCA9PSBudWxsICkKLQl7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6c2V0VGVzdENhc2VTdGF0dXMgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBhZGRUZXN0LiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOwotCQlyZXR1cm47Ci0JfQotCVRlc3RDYXNlIG15VGVzdENhc2UgPShUZXN0Q2FzZSkgbXlUZXN0LmdldFRlc3RDYXNlSGFzaCgpLmdldCggdGVzdENhc2VJZC50cmltKCkgKTsKLQlpZiAoIG15VGVzdENhc2UgPT0gbnVsbCApCi0JewotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOnNldFRlc3RDYXNlU3RhdHVzIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgYWRkVGVzdENhc2UuIFBFTkRJTkcgOiBTaGFsbCB3ZSB0aHJvdyBFeGNlcHRpb24/Iik7Ci0JCXJldHVybjsKLQl9Ci0JbXlUZXN0Q2FzZS5zZXRTdGF0dXMoIHN0YXR1cyk7Ci0JbXlUZXN0Q2FzZS5zZXRTdGF0dXNEZXNjcmlwdGlvbiggc3RhdHVzRGVzY3JpcHRpb24pOworICAgIFRlc3QgbXlUZXN0ID0gKFRlc3QpbXlUZXN0U3VpdGUuZ2V0VGVzdEhhc2goKS5nZXQoIHRlc3RJZC50cmltKCkgKTsKKyAgICBpZiAoIG15VGVzdCA9PSBudWxsICkKKyAgICB7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6c2V0VGVzdENhc2VTdGF0dXMgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBhZGRUZXN0LiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFRlc3RDYXNlIG15VGVzdENhc2UgPShUZXN0Q2FzZSkgbXlUZXN0LmdldFRlc3RDYXNlSGFzaCgpLmdldCggdGVzdENhc2VJZC50cmltKCkgKTsKKyAgICBpZiAoIG15VGVzdENhc2UgPT0gbnVsbCApCisgICAgeworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOnNldFRlc3RDYXNlU3RhdHVzIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgYWRkVGVzdENhc2UuIFBFTkRJTkcgOiBTaGFsbCB3ZSB0aHJvdyBFeGNlcHRpb24/Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbXlUZXN0Q2FzZS5zZXRTdGF0dXMoIHN0YXR1cyk7CisgICAgbXlUZXN0Q2FzZS5zZXRTdGF0dXNEZXNjcmlwdGlvbiggc3RhdHVzRGVzY3JpcHRpb24pOwogCiAgICAgIH0KIAogCi0gICAgLyoqIAotCUFmdGVyIGFkZGluZyBhIFRlc3RDYXNlIHVzaW5nIGFkZFRlc3RDYXNlICwgV2UgbmVlZCB0byB1c2UgdGhpcyBzZXRUZXN0Q2FzZVN0YXR1cyBtZXRob2QgCisgICAgLyoqCisgICAgQWZ0ZXIgYWRkaW5nIGEgVGVzdENhc2UgdXNpbmcgYWRkVGVzdENhc2UgLCBXZSBuZWVkIHRvIHVzZSB0aGlzIHNldFRlc3RDYXNlU3RhdHVzIG1ldGhvZAogICAgICAgZm9yIHNldHRpbmcgVGVzdENhc2Ugc3RhdHVzKHBhc3MvZmFpbCkgaW5mb3JtYXRpb24gYWJvdXQgcGFydGljdWxhciBUZXN0Q2FzZS4gV2UgbmVlZCB0byAgcGFzcyBUZXN0U3VpdGVJZCwgVGVzdElkIGFuZCBUZXN0Q2FzZUlkICBhbG9uZyB3aXRoIHN0YXR1cyBpbmZvcm1hdGlvbi4KICAgICAgb25seSBUZXN0Q2FzZXMgd2lsbCBoYXZlIHN0YXR1cwogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RDYXNlU3RhdHVzICggU3RyaW5nIHRlc3RTdWl0ZUlkLCBTdHJpbmcgdGVzdElkLCBTdHJpbmcgdGVzdENhc2VJZCwgIFN0cmluZyBzdGF0dXMgKQogICAgIHsKLQlUZXN0U3VpdGUgbXlUZXN0U3VpdGUgPSAoVGVzdFN1aXRlKXRlc3RTdWl0ZUhhc2guZ2V0KCB0ZXN0U3VpdGVJZC50cmltKCkgKTsKLQlpZiAoIG15VGVzdFN1aXRlPT0gbnVsbCApCi0JewotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOnNldFRlc3RDYXNlU3RhdHVzIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgc2V0VGVzdFN1aXRlLiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOwotCQlyZXR1cm47Ci0JfQorICAgIFRlc3RTdWl0ZSBteVRlc3RTdWl0ZSA9IChUZXN0U3VpdGUpdGVzdFN1aXRlSGFzaC5nZXQoIHRlc3RTdWl0ZUlkLnRyaW0oKSApOworICAgIGlmICggbXlUZXN0U3VpdGU9PSBudWxsICkKKyAgICB7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6c2V0VGVzdENhc2VTdGF0dXMgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBzZXRUZXN0U3VpdGUuIFBFTkRJTkcgOiBTaGFsbCB3ZSB0aHJvdyBFeGNlcHRpb24/Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLQlUZXN0IG15VGVzdCA9KFRlc3QpIG15VGVzdFN1aXRlLmdldFRlc3RIYXNoKCkuZ2V0KCB0ZXN0SWQudHJpbSgpICk7Ci0JaWYgKCBteVRlc3QgPT0gbnVsbCApCi0JewotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOnNldFRlc3RDYXNlU3RhdHVzIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgYWRkVGVzdC4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKLQkJcmV0dXJuOwotCX0KLQlUZXN0Q2FzZSBteVRlc3RDYXNlID0gKFRlc3RDYXNlKW15VGVzdC5nZXRUZXN0Q2FzZUhhc2goKS5nZXQoIHRlc3RDYXNlSWQudHJpbSgpICk7Ci0JaWYgKCBteVRlc3RDYXNlID09IG51bGwgKQotCXsKLQkJU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjpzZXRUZXN0Q2FzZVN0YXR1cyBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IGFkZFRlc3RDYXNlLiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOwotCQlyZXR1cm47Ci0JfQotCW15VGVzdENhc2Uuc2V0U3RhdHVzKCBzdGF0dXMpOworICAgIFRlc3QgbXlUZXN0ID0oVGVzdCkgbXlUZXN0U3VpdGUuZ2V0VGVzdEhhc2goKS5nZXQoIHRlc3RJZC50cmltKCkgKTsKKyAgICBpZiAoIG15VGVzdCA9PSBudWxsICkKKyAgICB7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6c2V0VGVzdENhc2VTdGF0dXMgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBhZGRUZXN0LiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFRlc3RDYXNlIG15VGVzdENhc2UgPSAoVGVzdENhc2UpbXlUZXN0LmdldFRlc3RDYXNlSGFzaCgpLmdldCggdGVzdENhc2VJZC50cmltKCkgKTsKKyAgICBpZiAoIG15VGVzdENhc2UgPT0gbnVsbCApCisgICAgeworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOnNldFRlc3RDYXNlU3RhdHVzIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgYWRkVGVzdENhc2UuIFBFTkRJTkcgOiBTaGFsbCB3ZSB0aHJvdyBFeGNlcHRpb24/Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbXlUZXN0Q2FzZS5zZXRTdGF0dXMoIHN0YXR1cyk7CiAKICAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBDaGFuZ2UgZG9uZSBvbiA3LzEwLzAyIGJ5IERlZXBhIFNpbmdoCiAgICAgICogTm93IFJlcG9ydGVyIHdpbGwgYnkgZGVmYXVsdCBjcmVhdGUgcmVzdWx0cyBmaWxlIGluICRFSlRFX0hPTUUgaWYgbm8gcmVzdWx0cyBmaWxlIGlzIHNwZWNpZmllZAogICAgICAqIFNvIG5vIG5lZWQgdG8gcGFzcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUuCiAgICAgICogUmVwb3J0ZXIuZ2V0SW5zdGFuY2Ugc2hvdWxkIGNyZWF0ZSB0ZXN0X3Jlc3VsdHMueG1sIGF0IGoyZWUtdGVzdC8KLSAgICAgKiAKKyAgICAgKgogICAgICAqLwogCi0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIFJlcG9ydGVyIGdldEluc3RhbmNlKCApCiAgICAgewotCSAgICBpZiAoIHJlcG9ydGVySW5zdGFuY2UgPT0gbnVsbCApCi0JICAgIHsKLQkJICAgIC8vcmVwb3J0ZXJJbnN0YW5jZSA9IG5ldyBSZXBvcnRlciggKTsKLQkJICAgIFN0cmluZyByb290cGF0aD1uZXcgRmlsZSgiLiIpLmdldEFic29sdXRlUGF0aCgpOwotCQkgICAgU3RyaW5nIGVqdGVfaG9tZT1yb290cGF0aC5zdWJzdHJpbmcoMCxyb290cGF0aC5pbmRleE9mKHdzX2hvbWUpKTsKLQkJICAgIC8vZWp0ZV9ob21lIGNvbnRhaW5zIE9TIGRlcGVuZGVudCBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXIgd2l0aG91dCBqMmVlLXRlc3QKLQkJICAgIFN0cmluZyBvdXRwdXREaXI9ZWp0ZV9ob21lK3dzX2hvbWU7Ci0JCSAgICByZXBvcnRlckluc3RhbmNlID0gUmVwb3J0ZXIuZ2V0SW5zdGFuY2UoIG91dHB1dERpciArIEZpbGUuc2VwYXJhdG9yQ2hhciArICJ0ZXN0X3Jlc3VsdHMueG1sIiApOwotCSAgICB9CisgICAgICAgIGlmICggcmVwb3J0ZXJJbnN0YW5jZSA9PSBudWxsICkKKyAgICAgICAgeworICAgICAgICAgICAgLy9yZXBvcnRlckluc3RhbmNlID0gbmV3IFJlcG9ydGVyKCApOworICAgICAgICAgICAgU3RyaW5nIHJvb3RwYXRoPW5ldyBGaWxlKCIuIikuZ2V0QWJzb2x1dGVQYXRoKCk7CisgICAgICAgICAgICBTdHJpbmcgZWp0ZV9ob21lPXJvb3RwYXRoLnN1YnN0cmluZygwLHJvb3RwYXRoLmluZGV4T2Yod3NfaG9tZSkpOworICAgICAgICAgICAgLy9lanRlX2hvbWUgY29udGFpbnMgT1MgZGVwZW5kZW50IHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlciB3aXRob3V0IGoyZWUtdGVzdAorICAgICAgICAgICAgU3RyaW5nIG91dHB1dERpcj1lanRlX2hvbWUrd3NfaG9tZTsKKyAgICAgICAgICAgIHJlcG9ydGVySW5zdGFuY2UgPSBSZXBvcnRlci5nZXRJbnN0YW5jZSggb3V0cHV0RGlyICsgRmlsZS5zZXBhcmF0b3JDaGFyICsgInRlc3RfcmVzdWx0cy54bWwiICk7CisgICAgICAgIH0KIAotCSAgICByZXR1cm4gcmVwb3J0ZXJJbnN0YW5jZTsKKyAgICAgICAgcmV0dXJuIHJlcG9ydGVySW5zdGFuY2U7CiAKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIFJlcG9ydGVyIGdldEluc3RhbmNlKFN0cmluZyB3c2hvbWUpCiAgICAgewogICAgICAgICBpZihyZXBvcnRlckluc3RhbmNlID09IG51bGwpCkBAIC00NTYsMTYgKzQ1NiwxNiBAQAogCiAgICAgICBwdWJsaWMgc3RhdGljIFJlcG9ydGVyIGdldEluc3RhbmNlKCBTdHJpbmcgcmVzdWx0RmlsZVBhdGgsYm9vbGVhbiBwYXRoU3BlY2lmaWVkICkKICAgICAgIHsKLQkgICBpZiAoIHJlcG9ydGVySW5zdGFuY2UgPT0gbnVsbCApCi0JICAgewotCQlyZXBvcnRlckluc3RhbmNlID0gbmV3IFJlcG9ydGVyKHJlc3VsdEZpbGVQYXRoICk7Ci0JCQotCSAgIH0KLQkgICByZXR1cm4gcmVwb3J0ZXJJbnN0YW5jZTsKKyAgICAgICBpZiAoIHJlcG9ydGVySW5zdGFuY2UgPT0gbnVsbCApCisgICAgICAgeworICAgICAgICByZXBvcnRlckluc3RhbmNlID0gbmV3IFJlcG9ydGVyKHJlc3VsdEZpbGVQYXRoICk7CisKICAgICAgICB9Ci0gICAgICAKKyAgICAgICByZXR1cm4gcmVwb3J0ZXJJbnN0YW5jZTsKKyAgICAgICB9CisKICAgICAgIC8vZG9uZSBvbmx5IGZvciB0aGUgd2VidGVzdHMuCi0gICAgCisKICAgICAvKnB1YmxpYyBzdGF0aWMgUmVwb3J0ZXIgZ2V0SW5zdGFuY2UoU3RyaW5nIHdzaG9tZSkgewogICAgICAgICBpZiAoIHJlcG9ydGVySW5zdGFuY2UgPT0gbnVsbCApIHsKICAgICAgICAgICAgIFN0cmluZyByb290cGF0aD1uZXcgRmlsZSgiLiIpLmdldEFic29sdXRlUGF0aCgpOwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAgICAgICAgICAgICByZXBvcnRlckluc3RhbmNlID0gbmV3IFJlcG9ydGVyKG91dHB1dERpciArIEZpbGUuc2VwYXJhdG9yQ2hhciArICJ0ZXN0X3Jlc3VsdHMueG1sIik7CiAgICAgICAgICAgICAvL3JlcG9ydGVySW5zdGFuY2UgPSBSZXBvcnRlci5nZXRJbnN0YW5jZSggb3V0cHV0RGlyICsgRmlsZS5zZXBhcmF0b3JDaGFyICsgInRlc3RfcmVzdWx0cy54bWwiICk7CiAgICAgICAgICAgICAvL3JlcG9ydGVySW5zdGFuY2UgPSBuZXcgUmVwb3J0ZXIocmVzdWx0RmlsZVBhdGggKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlcG9ydGVySW5zdGFuY2U7CiAgICAgfSovCkBAIC00ODUsMjQgKzQ4NSwyNCBAQAogCiAgICAgcHVibGljIHN0YXRpYyBSZXBvcnRlciBnZXRJbnN0YW5jZSggT3V0cHV0U3RyZWFtIG91dFN0cmVhbSAgKQogICAgICAgewotCSAgIGlmICggcmVwb3J0ZXJJbnN0YW5jZSA9PSBudWxsICkKLQkgICB7Ci0JCXJlcG9ydGVySW5zdGFuY2UgPSBuZXcgUmVwb3J0ZXIob3V0U3RyZWFtICk7Ci0JCQotCSAgIH0KLQkgICByZXR1cm4gcmVwb3J0ZXJJbnN0YW5jZTsKLSAgICAgICB9IAorICAgICAgIGlmICggcmVwb3J0ZXJJbnN0YW5jZSA9PSBudWxsICkKKyAgICAgICB7CisgICAgICAgIHJlcG9ydGVySW5zdGFuY2UgPSBuZXcgUmVwb3J0ZXIob3V0U3RyZWFtICk7CisKKyAgICAgICB9CisgICAgICAgcmV0dXJuIHJlcG9ydGVySW5zdGFuY2U7CisgICAgICAgfQogCiAgICAgICBwdWJsaWMgc3RhdGljIFJlcG9ydGVyIGdldEluc3RhbmNlKCBXcml0ZXIgd3JpdGVyICApCiAgICAgICB7Ci0JICAgaWYgKCByZXBvcnRlckluc3RhbmNlID09IG51bGwgKQotCSAgIHsKLQkJCi0JCXJlcG9ydGVySW5zdGFuY2UgPSBuZXcgUmVwb3J0ZXIod3JpdGVyICk7Ci0JCQotCSAgIH0KLQkgICByZXR1cm4gcmVwb3J0ZXJJbnN0YW5jZTsKLSAgICAgICB9IAorICAgICAgIGlmICggcmVwb3J0ZXJJbnN0YW5jZSA9PSBudWxsICkKKyAgICAgICB7CisKKyAgICAgICAgcmVwb3J0ZXJJbnN0YW5jZSA9IG5ldyBSZXBvcnRlcih3cml0ZXIgKTsKKworICAgICAgIH0KKyAgICAgICByZXR1cm4gcmVwb3J0ZXJJbnN0YW5jZTsKKyAgICAgICB9CiAgICAgLyogQ09OU1RSVUNUT1JTICovCiAKICAgICAgcHJpdmF0ZSBSZXBvcnRlciggKQpAQCAtNTE4LDE5ICs1MTgsMTkgQEAKICAgICAgcHJpdmF0ZSBSZXBvcnRlciggU3RyaW5nIHJlc3VsdEZpbGVQYXRoICkKICAgICAgewogICAgICAgdHJ5ewotCSAgIHJlc3VsdEZpbGU9IHJlc3VsdEZpbGVQYXRoOworICAgICAgIHJlc3VsdEZpbGU9IHJlc3VsdEZpbGVQYXRoOwogCiAgICAgICAgICAgUnVudGltZS5nZXRSdW50aW1lKCkuYWRkU2h1dGRvd25Ib29rKHRoaXMpOwogICAgICAgfSBjYXRjaCAoamF2YS5sYW5nLkV4Y2VwdGlvbiBleCl7CiAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiV0FSTklORzogUmVwb3J0ZXIgaG9vayB0aHJlYWQgbm90IGNyZWF0ZWQuIE5vIFhNTCBmaWxlIHdpbGwgYmUgcHJvZHVjZWQuIik7CiAgICAgICB9CiAgICAgfQotIAotICAgCisKKwogCiAgICAgcHJpdmF0ZSBSZXBvcnRlciAoT3V0cHV0U3RyZWFtIG8pIHsKLQl0aGlzKCk7Ci0Jb3V0ID0gbmV3IFByaW50V3JpdGVyKG8pOworICAgIHRoaXMoKTsKKyAgICBvdXQgPSBuZXcgUHJpbnRXcml0ZXIobyk7CiAgICAgfQogCiAKQEAgLTUzOSw4ICs1MzksOCBAQAogICAgICAqIHdoaWNoIGV4dGVuZHMgUHJpbnRXcml0ZXIuICAgICovCiAKICAgICBwcml2YXRlIFJlcG9ydGVyIChXcml0ZXIgdykgewotCXRoaXMoKTsKLQlvdXQgPSBuZXcgUHJpbnRXcml0ZXIodyk7CisgICAgdGhpcygpOworICAgIG91dCA9IG5ldyBQcmludFdyaXRlcih3KTsKICAgICB9CiAKIApAQCAtNTU0LDYxICs1NTQsNjEgQEAKICAgICAgdHJ5CiAgICAgIHsKIAotCS8vTm93IGZsdXNoIGFsbCB0aGUgVGVzdFN1aXRlIGluZm8KKyAgICAvL05vdyBmbHVzaCBhbGwgdGhlIFRlc3RTdWl0ZSBpbmZvCiAKLQkvL1N5c3RlbS5vdXQucHJpbnRsbigiUkVQT1JURVJcdCBnZW5lcmF0ZVZhbGlkUmVwb3J0LmZsdXNoQWxsIik7CisgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlJFUE9SVEVSXHQgZ2VuZXJhdGVWYWxpZFJlcG9ydC5mbHVzaEFsbCIpOwogICAgICAgICAgZmx1c2hBbGwoKTsKIAotCVN0cmluZyBvRmlsZU5hbWUgPW51bGw7Ci0JaWYgKCByZXN1bHRGaWxlLmxhc3RJbmRleE9mKCIuIikgPiAwICkgICAKLQl7Ci0JCW9GaWxlTmFtZSA9IHJlc3VsdEZpbGUuc3Vic3RyaW5nKDAsIHJlc3VsdEZpbGUubGFzdEluZGV4T2YoIi4iKSApICsgIlZhbGlkLnhtbCI7Ci0JfQotCWVsc2UKLQl7Ci0JCW9GaWxlTmFtZSA9IHJlc3VsdEZpbGUgKyAiVmFsaWQueG1sIjsKLQl9CisgICAgU3RyaW5nIG9GaWxlTmFtZSA9bnVsbDsKKyAgICBpZiAoIHJlc3VsdEZpbGUubGFzdEluZGV4T2YoIi4iKSA+IDAgKQorICAgIHsKKyAgICAgICAgb0ZpbGVOYW1lID0gcmVzdWx0RmlsZS5zdWJzdHJpbmcoMCwgcmVzdWx0RmlsZS5sYXN0SW5kZXhPZigiLiIpICkgKyAiVmFsaWQueG1sIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb0ZpbGVOYW1lID0gcmVzdWx0RmlsZSArICJWYWxpZC54bWwiOworICAgIH0KICAgICAgICAgd0NoYW5uZWwgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShvRmlsZU5hbWUpLmdldENoYW5uZWwoKTsKIAotCVN0cmluZyBvc05hbWUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9zLm5hbWUiKTsKLQlTdHJpbmcgb3NWZXJzaW9uID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcy52ZXJzaW9uIik7Ci0JU3RyaW5nIGN1cnJlbnREYXRlID0gKG5ldyBEYXRlKCkpLnRvU3RyaW5nKCk7Ci0JCi0JU3RyaW5nIGV4dHJhWE1MID0gIjxyZXBvcnQ+IDxkYXRlPiAiICsgY3VycmVudERhdGUgKyAiPC9kYXRlPjxjb25maWd1cmF0aW9uPiI7Ci0JZXh0cmFYTUwgKz0gIjxvcz4iICsgb3NOYW1lICsgb3NWZXJzaW9uICsgIjwvb3M+IjsKLQlleHRyYVhNTCArPSAiPGpka1ZlcnNpb24+IiArIFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS52ZXJzaW9uIikgKyAiPC9qZGtWZXJzaW9uPiI7CisgICAgU3RyaW5nIG9zTmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3MubmFtZSIpOworICAgIFN0cmluZyBvc1ZlcnNpb24gPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9zLnZlcnNpb24iKTsKKyAgICBTdHJpbmcgY3VycmVudERhdGUgPSAobmV3IERhdGUoKSkudG9TdHJpbmcoKTsKIAotCVN0cmluZyBtYWNoaW5lTmFtZSA9ICJ1bmF2YWlsYWJsZSI7CisgICAgU3RyaW5nIGV4dHJhWE1MID0gIjxyZXBvcnQ+IDxkYXRlPiAiICsgY3VycmVudERhdGUgKyAiPC9kYXRlPjxjb25maWd1cmF0aW9uPiI7CisgICAgZXh0cmFYTUwgKz0gIjxvcz4iICsgb3NOYW1lICsgb3NWZXJzaW9uICsgIjwvb3M+IjsKKyAgICBleHRyYVhNTCArPSAiPGpka1ZlcnNpb24+IiArIFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS52ZXJzaW9uIikgKyAiPC9qZGtWZXJzaW9uPiI7CisKKyAgICBTdHJpbmcgbWFjaGluZU5hbWUgPSAidW5hdmFpbGFibGUiOwogICAgICAgICBJbnB1dFN0cmVhbSBpbiA9IG51bGw7Ci0JdHJ5IHsKKyAgICB0cnkgewogCi0JICAgIGluICA9IFJ1bnRpbWUuZ2V0UnVudGltZSgpLmV4ZWMoInVuYW1lIC1uIikuZ2V0SW5wdXRTdHJlYW0oKTsKLQkgICAgYnl0ZVtdIG15Qnl0ZXMgPSBuZXcgYnl0ZVsyMDBdOwotCSAgICBpbi5yZWFkKG15Qnl0ZXMpOwotCSAgICBtYWNoaW5lTmFtZSA9IG5ldyBTdHJpbmcoIG15Qnl0ZXMgKS50cmltKCk7Ci0JfQotCWNhdGNoICggRXhjZXB0aW9uIG1lICkgewotCX0gZmluYWxseSB7CisgICAgICAgIGluICA9IFJ1bnRpbWUuZ2V0UnVudGltZSgpLmV4ZWMoInVuYW1lIC1uIikuZ2V0SW5wdXRTdHJlYW0oKTsKKyAgICAgICAgYnl0ZVtdIG15Qnl0ZXMgPSBuZXcgYnl0ZVsyMDBdOworICAgICAgICBpbi5yZWFkKG15Qnl0ZXMpOworICAgICAgICBtYWNoaW5lTmFtZSA9IG5ldyBTdHJpbmcoIG15Qnl0ZXMgKS50cmltKCk7CisgICAgfQorICAgIGNhdGNoICggRXhjZXB0aW9uIG1lICkgeworICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBjbG9zZShpbik7CiAgICAgICAgIH0KLQkKLQlleHRyYVhNTCArPSAiPG1hY2hpbmVOYW1lPiIgKyBtYWNoaW5lTmFtZSArICI8L21hY2hpbmVOYW1lPiI7Ci0JZXh0cmFYTUwgKz0gIjwvY29uZmlndXJhdGlvbj4gPHRlc3RzdWl0ZXM+IjsJCiAKLQl3Q2hhbm5lbC53cml0ZShCeXRlQnVmZmVyLndyYXAoZXh0cmFYTUwuZ2V0Qnl0ZXMoKSkpOworICAgIGV4dHJhWE1MICs9ICI8bWFjaGluZU5hbWU+IiArIG1hY2hpbmVOYW1lICsgIjwvbWFjaGluZU5hbWU+IjsKKyAgICBleHRyYVhNTCArPSAiPC9jb25maWd1cmF0aW9uPiA8dGVzdHN1aXRlcz4iOworCisgICAgd0NoYW5uZWwud3JpdGUoQnl0ZUJ1ZmZlci53cmFwKGV4dHJhWE1MLmdldEJ5dGVzKCkpKTsKIAogICAgICAgICByQ2hhbm5lbCA9IG5ldyBGaWxlSW5wdXRTdHJlYW0ocmVzdWx0RmlsZSkuZ2V0Q2hhbm5lbCgpOwogICAgICAgICB3Q2hhbm5lbC50cmFuc2ZlckZyb20ockNoYW5uZWwsIHdDaGFubmVsLnBvc2l0aW9uKCksIHJDaGFubmVsLnNpemUoKSk7CiAgICAgICAgIHdDaGFubmVsLnBvc2l0aW9uKHdDaGFubmVsLnBvc2l0aW9uKCkgKyByQ2hhbm5lbC5zaXplKCkpOwogCi0Jd0NoYW5uZWwud3JpdGUoQnl0ZUJ1ZmZlci53cmFwKCI8L3Rlc3RzdWl0ZXM+XG48L3JlcG9ydD5cbiIuZ2V0Qnl0ZXMoKSkpOworICAgIHdDaGFubmVsLndyaXRlKEJ5dGVCdWZmZXIud3JhcCgiPC90ZXN0c3VpdGVzPlxuPC9yZXBvcnQ+XG4iLmdldEJ5dGVzKCkpKTsKICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlJFUE9SVEVSXHQgRmlsZSB2YWxpZGF0aW9uIGNvbXBsZXRlIik7CiAKLQl9Ci0JY2F0Y2ggKCBFeGNlcHRpb24gZSApCi0JewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SIDogIiArIGUgKTsKLQl9IGZpbmFsbHkgeworICAgIH0KKyAgICBjYXRjaCAoIEV4Y2VwdGlvbiBlICkKKyAgICB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRVJST1IgOiAiICsgZSApOworICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBjbG9zZShyQ2hhbm5lbCk7CiAgICAgICAgICAgICBjbG9zZSh3Q2hhbm5lbCk7CiAgICAgICAgIH0KQEAgLTYxNiw0NiArNjE2LDQ2IEBACiAKICAgIHB1YmxpYyB2b2lkIGZsdXNoQWxsICggKQogICAgewotLy8JU3lzdGVtLm91dC5wcmludGxuKCJSRVBPUlRFUlx0IGluc2lkZSBmbHVzaEFsbCIpIDsKKy8vICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUkVQT1JURVJcdCBpbnNpZGUgZmx1c2hBbGwiKSA7CiAgICAgICAgSW5wdXRTdHJlYW0gaW4gPSBudWxsOwogICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZm91dHB1dCA9IG51bGw7CiAgICAgICAgdHJ5Ci0JewotCQlFbnVtZXJhdGlvbiB0ZXN0U3VpdGVFbnVtID0gdGVzdFN1aXRlSGFzaC5rZXlzKCk7CisgICAgeworICAgICAgICBFbnVtZXJhdGlvbiB0ZXN0U3VpdGVFbnVtID0gdGVzdFN1aXRlSGFzaC5rZXlzKCk7CiAKLQkJaWYgKCByZXN1bHRGaWxlLmVxdWFscygiZGVmYXVsdC54bWwiKSApCi0JCXsKLQkJCWluICA9IFJ1bnRpbWUuZ2V0UnVudGltZSgpLmV4ZWMoInVuYW1lIC1uIikuZ2V0SW5wdXRTdHJlYW0oKTsKLQkJCWJ5dGVbXSBteUJ5dGVzID0gbmV3IGJ5dGVbMjAwXTsKLQkJCWluLnJlYWQobXlCeXRlcyk7Ci0JCQlTdHJpbmcgbXlSZXN1bHRGaWxlID0gInJlc3VsdF8iOwotCQkJU3RyaW5nIG1hY2hpbmVOYW1lID0gbmV3IFN0cmluZyggbXlCeXRlcyApLnRyaW0oKTsKLQkJCW15UmVzdWx0RmlsZSArPSBtYWNoaW5lTmFtZTsKKyAgICAgICAgaWYgKCByZXN1bHRGaWxlLmVxdWFscygiZGVmYXVsdC54bWwiKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGluICA9IFJ1bnRpbWUuZ2V0UnVudGltZSgpLmV4ZWMoInVuYW1lIC1uIikuZ2V0SW5wdXRTdHJlYW0oKTsKKyAgICAgICAgICAgIGJ5dGVbXSBteUJ5dGVzID0gbmV3IGJ5dGVbMjAwXTsKKyAgICAgICAgICAgIGluLnJlYWQobXlCeXRlcyk7CisgICAgICAgICAgICBTdHJpbmcgbXlSZXN1bHRGaWxlID0gInJlc3VsdF8iOworICAgICAgICAgICAgU3RyaW5nIG1hY2hpbmVOYW1lID0gbmV3IFN0cmluZyggbXlCeXRlcyApLnRyaW0oKTsKKyAgICAgICAgICAgIG15UmVzdWx0RmlsZSArPSBtYWNoaW5lTmFtZTsKIAotCQkJQ2FsZW5kYXIgIG15Q2FsZW5kYXIgID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsgCi0JCQlTdHJpbmcgbW9udGggPSBuZXcgSW50ZWdlciggbXlDYWxlbmRhci5nZXQgKCBDYWxlbmRhci5NT05USCkpLnRvU3RyaW5nKCk7Ci0JCQlTdHJpbmcgZGF5ID0gbmV3IEludGVnZXIobXlDYWxlbmRhci5nZXQgKCBDYWxlbmRhci5EQVlfT0ZfTU9OVEgpKS50b1N0cmluZygpOwotCQkJU3RyaW5nIHllYXIgPSBuZXcgSW50ZWdlcihteUNhbGVuZGFyLmdldCAoIENhbGVuZGFyLllFQVIpKS50b1N0cmluZygpOwotCQkgCW15UmVzdWx0RmlsZSArPSAiXyIgKyBtb250aCArIGRheSArIHllYXIgKyAiLnhtbCI7Ci0JCQlyZXN1bHRGaWxlPSBteVJlc3VsdEZpbGU7CQorICAgICAgICAgICAgQ2FsZW5kYXIgIG15Q2FsZW5kYXIgID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgICAgIFN0cmluZyBtb250aCA9IG5ldyBJbnRlZ2VyKCBteUNhbGVuZGFyLmdldCAoIENhbGVuZGFyLk1PTlRIKSkudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIFN0cmluZyBkYXkgPSBuZXcgSW50ZWdlcihteUNhbGVuZGFyLmdldCAoIENhbGVuZGFyLkRBWV9PRl9NT05USCkpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICBTdHJpbmcgeWVhciA9IG5ldyBJbnRlZ2VyKG15Q2FsZW5kYXIuZ2V0ICggQ2FsZW5kYXIuWUVBUikpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgbXlSZXN1bHRGaWxlICs9ICJfIiArIG1vbnRoICsgZGF5ICsgeWVhciArICIueG1sIjsKKyAgICAgICAgICAgIHJlc3VsdEZpbGU9IG15UmVzdWx0RmlsZTsKIAotCQl9CisgICAgICAgIH0KIAotCQlmb3V0cHV0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oIHJlc3VsdEZpbGUsIHRydWUgKTsKLQkJd2hpbGUgKCB0ZXN0U3VpdGVFbnVtLmhhc01vcmVFbGVtZW50cyggKSApCi0JCXsKLQkJCVN0cmluZyB0ZXN0U3VpdGVJZCA9IChTdHJpbmcpIHRlc3RTdWl0ZUVudW0ubmV4dEVsZW1lbnQoKTsKLQkJCWZsdXNoKCB0ZXN0U3VpdGVJZCwgZm91dHB1dCApOwotCQl9CisgICAgICAgIGZvdXRwdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSggcmVzdWx0RmlsZSwgdHJ1ZSApOworICAgICAgICB3aGlsZSAoIHRlc3RTdWl0ZUVudW0uaGFzTW9yZUVsZW1lbnRzKCApICkKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nIHRlc3RTdWl0ZUlkID0gKFN0cmluZykgdGVzdFN1aXRlRW51bS5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgZmx1c2goIHRlc3RTdWl0ZUlkLCBmb3V0cHV0ICk7CisgICAgICAgIH0KIAotCQlTeXN0ZW0ub3V0LnByaW50bG4oImluIGZsdXNoQWxsICwgY3JlYXRpbmcgbmV3IHRlc3RTdWl0ZUhhc2giKTsKLQkJLy8gTm93IHRha2Ugb3V0IHRoZSBUZXN0U3VpdGUgaW5mbyBmcm9tIG1lbW9yeQotCQl0ZXN0U3VpdGVIYXNoID0gbmV3IEhhc2h0YWJsZSgpOwotCX0KLQljYXRjaCAoIEV4Y2VwdGlvbiBlICkKLQl7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6ICIgKyBlICk7Ci0JfSBmaW5hbGx5IHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBmbHVzaEFsbCAsIGNyZWF0aW5nIG5ldyB0ZXN0U3VpdGVIYXNoIik7CisgICAgICAgIC8vIE5vdyB0YWtlIG91dCB0aGUgVGVzdFN1aXRlIGluZm8gZnJvbSBtZW1vcnkKKyAgICAgICAgdGVzdFN1aXRlSGFzaCA9IG5ldyBIYXNodGFibGUoKTsKKyAgICB9CisgICAgY2F0Y2ggKCBFeGNlcHRpb24gZSApCisgICAgeworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOiAiICsgZSApOworICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBjbG9zZShpbik7CiAgICAgICAgICAgICBjbG9zZShmb3V0cHV0KTsKICAgICAgICAgfQpAQCAtNjY0LDIyICs2NjQsMjIgQEAKICAgIH0KIAogICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBwcmVwYXJlcyBhbmQgb3V0cHV0IGFuIFhNTCByZXByZXNlbnRhdGlvbiBvZiB0aGUgUmVwb3J0ZXIgY2xhc3MnIGNvbnRlbnQgZm9yIHRoZSBnaXZlbiB0ZXN0U3VpdGUuIAorICAgICAqIFRoaXMgbWV0aG9kIHByZXBhcmVzIGFuZCBvdXRwdXQgYW4gWE1MIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBSZXBvcnRlciBjbGFzcycgY29udGVudCBmb3IgdGhlIGdpdmVuIHRlc3RTdWl0ZS4KICAgICAgKiBAcGFyYW0gdGVzdFN1aXRlTmFtZSB0aGUgdGVzdCBzdWl0ZSdzIG5hbWUuCiAgICAgICogQHJldHVybiByZXR1cm5zIHRydWUgaWYgdGhlIGZpbGUgaXMgc3VjY2VzZnVsbHkgY3JlYXRlZAogICAgICAqLwogCi0gICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gZmx1c2goU3RyaW5nIHRlc3RTdWl0ZUlkKQogICAgIHsKICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlJFUE9SVEVSXHQgZmx1c2godGVzdHN1aXRlSUQiKTsKLQlib29sZWFuIHJldHVyblZhbD1mYWxzZTsKKyAgICBib29sZWFuIHJldHVyblZhbD1mYWxzZTsKICAgICAgICAgSW5wdXRTdHJlYW0gaW4gPSBudWxsOwogICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIGZvdXRwdXQgPSBudWxsOwotICAgIAl0cnkKKyAgICAgICAgdHJ5CiAgICAgICAgIHsKIAotCQkgaWYgKCByZXN1bHRGaWxlLmVxdWFscygiZGVmYXVsdC54bWwiKSApCisgICAgICAgICBpZiAoIHJlc3VsdEZpbGUuZXF1YWxzKCJkZWZhdWx0LnhtbCIpICkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbiAgPSBSdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKCJ1bmFtZSAtbiIpLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBieXRlW10gbXlCeXRlcyA9IG5ldyBieXRlWzIwMF07CkBAIC02ODgsMzAgKzY4OCwzMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG1hY2hpbmVOYW1lID0gbmV3IFN0cmluZyggbXlCeXRlcyApLnRyaW0oKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG15UmVzdWx0RmlsZSArPSBtYWNoaW5lTmFtZTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXIgIG15Q2FsZW5kYXIgID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsgCi0JCQlTdHJpbmcgbW9udGggPSBuZXcgSW50ZWdlciggbXlDYWxlbmRhci5nZXQgKCBDYWxlbmRhci5NT05USCkpLnRvU3RyaW5nKCk7Ci0JCQlTdHJpbmcgZGF5ID0gbmV3IEludGVnZXIobXlDYWxlbmRhci5nZXQgKCBDYWxlbmRhci5EQVlfT0ZfTU9OVEgpKS50b1N0cmluZygpOwotCQkJU3RyaW5nIHllYXIgPSBuZXcgSW50ZWdlcihteUNhbGVuZGFyLmdldCAoIENhbGVuZGFyLllFQVIpKS50b1N0cmluZygpOwotICAgICAgICAgICAgICAgICAgICAgICAgbXlSZXN1bHRGaWxlICs9ICJfIiArIG1vbnRoICsgZGF5ICsgeWVhciArICIueG1sIjsgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRGaWxlPSBteVJlc3VsdEZpbGU7ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBDYWxlbmRhciAgbXlDYWxlbmRhciAgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICAgICAgU3RyaW5nIG1vbnRoID0gbmV3IEludGVnZXIoIG15Q2FsZW5kYXIuZ2V0ICggQ2FsZW5kYXIuTU9OVEgpKS50b1N0cmluZygpOworICAgICAgICAgICAgU3RyaW5nIGRheSA9IG5ldyBJbnRlZ2VyKG15Q2FsZW5kYXIuZ2V0ICggQ2FsZW5kYXIuREFZX09GX01PTlRIKSkudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIFN0cmluZyB5ZWFyID0gbmV3IEludGVnZXIobXlDYWxlbmRhci5nZXQgKCBDYWxlbmRhci5ZRUFSKSkudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG15UmVzdWx0RmlsZSArPSAiXyIgKyBtb250aCArIGRheSArIHllYXIgKyAiLnhtbCI7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRGaWxlPSBteVJlc3VsdEZpbGU7CiAKICAgICAgICAgICAgICAgICB9CiAKLQkJZm91dHB1dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCByZXN1bHRGaWxlLCB0cnVlICk7Ci0JCXJldHVyblZhbD0gZmx1c2goIHRlc3RTdWl0ZUlkLCBmb3V0cHV0KTsKLSAgICAgIAl9Ci0gICAgICAJY2F0Y2ggKCBFeGNlcHRpb24gZSApCi0JewotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SIDogIiArIGUgKTsKLQl9IGZpbmFsbHkgeworICAgICAgICBmb3V0cHV0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oIHJlc3VsdEZpbGUsIHRydWUgKTsKKyAgICAgICAgcmV0dXJuVmFsPSBmbHVzaCggdGVzdFN1aXRlSWQsIGZvdXRwdXQpOworICAgICAgICAgIH0KKyAgICAgICAgICBjYXRjaCAoIEV4Y2VwdGlvbiBlICkKKyAgICB7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRVJST1IgOiAiICsgZSApOworICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBjbG9zZShpbik7CiAgICAgICAgICAgICBjbG9zZShmb3V0cHV0KTsKICAgICAgICAgfQotCXJldHVybiByZXR1cm5WYWw7CisgICAgcmV0dXJuIHJldHVyblZhbDsKICAgICB9CiAKICAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgcHJlcGFyZXMgYW5kIG91dHB1dCBhbiBYTUwgcmVwcmVzZW50YXRpb24gb2YgdGhlIFJlcG9ydGVyIGNsYXNzJyBjb250ZW50IGZvciB0aGUgZ2l2ZW4gdGVzdFN1aXRlLiAKKyAgICAgKiBUaGlzIG1ldGhvZCBwcmVwYXJlcyBhbmQgb3V0cHV0IGFuIFhNTCByZXByZXNlbnRhdGlvbiBvZiB0aGUgUmVwb3J0ZXIgY2xhc3MnIGNvbnRlbnQgZm9yIHRoZSBnaXZlbiB0ZXN0U3VpdGUuCiAgICAgICogQHBhcmFtIHRlc3RTdWl0ZU5hbWUgdGhlIHRlc3Qgc3VpdGUncyBuYW1lLgogICAgICAqIEBwYXJhbSBmb3V0cHV0IHRoZSBGaWxlT3V0cHV0U3RyZWFtIGluIHdoaWNoIHdlIG5lZWQgdG8gd3JpdGUuCiAgICAgICogQHJldHVybiByZXR1cm5zIHRydWUgaWYgdGhlIGZpbGUgaXMgc3VjY2VzZnVsbHkgY3JlYXRlZApAQCAtNzIxLDE1NCArNzIxLDE1NCBAQAogICAgICAgICB0cnl7CiAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgeG1sUmVwcmVzZW50YXRpb24gPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAKLQkgICAvKgorICAgICAgIC8qCiAgICAgICAgICAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+XG4iKTsKICAgICAgICAgICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPCFET0NUWVBFIHRlc3RzdWl0ZSBTWVNURU0gXCJ0ZXN0X3N1aXRlLmR0ZFwiPlxuIik7Ci0JICAgIAotICAgICAgICAgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8IS0tIElEIGFyZSBkZWZpbmVkIGFzOiB0ZXN0IHN1aXRlOiB0ZXN0IGNhc2UgOiBsb2NhbCBpZC0tPlxuIik7ICAgICAgICAKLQkgICAgKi8KIAotCSAgICBUZXN0U3VpdGUgbXlUZXN0U3VpdGUgPSAoVGVzdFN1aXRlKXRlc3RTdWl0ZUhhc2guZ2V0KCB0ZXN0U3VpdGVJZCApOyAKLQkgICAgaWYgKCBteVRlc3RTdWl0ZSA9PSBudWxsICkKLQkgICAgewotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOiBJbmZvcm1hdGlvbiBmb3IgVGVzdFN1aXRlIElkIDogIiArIHRlc3RTdWl0ZUlkICsgIiBkb2Vzbid0IGV4aXN0Iik7Ci0JCXJldHVybiBmYWxzZTsKLQkgICAgfQotCSAgICBTdHJpbmcgdGVzdFN1aXRlTmFtZSA9IG15VGVzdFN1aXRlLmdldE5hbWUoKTsKLQkgICAgU3RyaW5nIHRlc3RTdWl0ZURlc2NyaXB0aW9uID0gbXlUZXN0U3VpdGUuZ2V0RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPCEtLSBJRCBhcmUgZGVmaW5lZCBhczogdGVzdCBzdWl0ZTogdGVzdCBjYXNlIDogbG9jYWwgaWQtLT5cbiIpOworICAgICAgICAqLworCisgICAgICAgIFRlc3RTdWl0ZSBteVRlc3RTdWl0ZSA9IChUZXN0U3VpdGUpdGVzdFN1aXRlSGFzaC5nZXQoIHRlc3RTdWl0ZUlkICk7CisgICAgICAgIGlmICggbXlUZXN0U3VpdGUgPT0gbnVsbCApCisgICAgICAgIHsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjogSW5mb3JtYXRpb24gZm9yIFRlc3RTdWl0ZSBJZCA6ICIgKyB0ZXN0U3VpdGVJZCArICIgZG9lc24ndCBleGlzdCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHRlc3RTdWl0ZU5hbWUgPSBteVRlc3RTdWl0ZS5nZXROYW1lKCk7CisgICAgICAgIFN0cmluZyB0ZXN0U3VpdGVEZXNjcmlwdGlvbiA9IG15VGVzdFN1aXRlLmdldERlc2NyaXB0aW9uKCk7CiAKICAgICAgICAgICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPHRlc3RzdWl0ZT5cbiIgKTsKICAgICAgICAgICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiICA8aWQ+ICIgKyB0ZXN0U3VpdGVJZCArICIgPC9pZD5cbiIpOwogCi0JICAgIGlmICghdGVzdFN1aXRlTmFtZS5lcXVhbHMoIFJlcG9ydGVyQ29uc3RhbnRzLk5BICkgKQotCSAgICB7Ci0JCSAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjxuYW1lPiIgKyB0ZXN0U3VpdGVOYW1lLnRyaW0oKSArICI8L25hbWU+XG4iKTsKLQkgICAgfQotCSAgICBpZiAoIXRlc3RTdWl0ZURlc2NyaXB0aW9uLmVxdWFscyggUmVwb3J0ZXJDb25zdGFudHMuTkEgKSApCi0JICAgIHsKLQkJICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyIgKyB0ZXN0U3VpdGVEZXNjcmlwdGlvbiArICJdXT48L2Rlc2NyaXB0aW9uPlxuIik7Ci0JICAgIH0KKyAgICAgICAgaWYgKCF0ZXN0U3VpdGVOYW1lLmVxdWFscyggUmVwb3J0ZXJDb25zdGFudHMuTkEgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPG5hbWU+IiArIHRlc3RTdWl0ZU5hbWUudHJpbSgpICsgIjwvbmFtZT5cbiIpOworICAgICAgICB9CisgICAgICAgIGlmICghdGVzdFN1aXRlRGVzY3JpcHRpb24uZXF1YWxzKCBSZXBvcnRlckNvbnN0YW50cy5OQSApICkKKyAgICAgICAgeworICAgICAgICAgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIiArIHRlc3RTdWl0ZURlc2NyaXB0aW9uICsgIl1dPjwvZGVzY3JpcHRpb24+XG4iKTsKKyAgICAgICAgfQogCi0JICAgIEhhc2h0YWJsZSB0ZXN0SGFzaCA9IG15VGVzdFN1aXRlLmdldFRlc3RIYXNoKCApOwotCSAgICAKLQkgICAgVmVjdG9yIHRlc3RJZFZlY3RvciA9IG15VGVzdFN1aXRlLmdldFRlc3RJZFZlY3RvciggKTsKKyAgICAgICAgSGFzaHRhYmxlIHRlc3RIYXNoID0gbXlUZXN0U3VpdGUuZ2V0VGVzdEhhc2goICk7CiAKLQkgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8dGVzdHM+XG4iKTsKLQkgICAgZm9yICggaW50IHRpPTA7IHRpPCB0ZXN0SWRWZWN0b3Iuc2l6ZSgpOyB0aSsrICkKLQkgICAgeworICAgICAgICBWZWN0b3IgdGVzdElkVmVjdG9yID0gbXlUZXN0U3VpdGUuZ2V0VGVzdElkVmVjdG9yKCApOwogCi0JCVN0cmluZyB0ZXN0SWQgPSAoU3RyaW5nKXRlc3RJZFZlY3Rvci5lbGVtZW50QXQodGkgKTsKLQkJVGVzdCBteVRlc3QgPSAoVGVzdCl0ZXN0SGFzaC5nZXQoIHRlc3RJZC50cmltKCkgKTsKLQkJU3RyaW5nIHRlc3ROYW1lID0gbXlUZXN0LmdldE5hbWUoKTsKLQkJU3RyaW5nIHRlc3REZXNjcmlwdGlvbiA9IG15VGVzdC5nZXREZXNjcmlwdGlvbigpOwotCQlTdHJpbmcgdGVzdFN0YXR1cyA9IG15VGVzdC5nZXRTdGF0dXMoKTsKLQkJU3RyaW5nIHRlc3RTdGF0dXNEZXNjcmlwdGlvbiA9IG15VGVzdC5nZXRTdGF0dXNEZXNjcmlwdGlvbigpOworICAgICAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjx0ZXN0cz5cbiIpOworICAgICAgICBmb3IgKCBpbnQgdGk9MDsgdGk8IHRlc3RJZFZlY3Rvci5zaXplKCk7IHRpKysgKQorICAgICAgICB7CiAKLQkJU3RyaW5nIHRlc3RFeHBlY3RlZD0gbXlUZXN0LmdldEV4cGVjdGVkKCApOwotCQlTdHJpbmcgdGVzdEFjdHVhbD0gbXlUZXN0LmdldEFjdHVhbCggKTsKKyAgICAgICAgU3RyaW5nIHRlc3RJZCA9IChTdHJpbmcpdGVzdElkVmVjdG9yLmVsZW1lbnRBdCh0aSApOworICAgICAgICBUZXN0IG15VGVzdCA9IChUZXN0KXRlc3RIYXNoLmdldCggdGVzdElkLnRyaW0oKSApOworICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSBteVRlc3QuZ2V0TmFtZSgpOworICAgICAgICBTdHJpbmcgdGVzdERlc2NyaXB0aW9uID0gbXlUZXN0LmdldERlc2NyaXB0aW9uKCk7CisgICAgICAgIFN0cmluZyB0ZXN0U3RhdHVzID0gbXlUZXN0LmdldFN0YXR1cygpOworICAgICAgICBTdHJpbmcgdGVzdFN0YXR1c0Rlc2NyaXB0aW9uID0gbXlUZXN0LmdldFN0YXR1c0Rlc2NyaXB0aW9uKCk7CiAKLQkJeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8dGVzdD5cbiIpOworICAgICAgICBTdHJpbmcgdGVzdEV4cGVjdGVkPSBteVRlc3QuZ2V0RXhwZWN0ZWQoICk7CisgICAgICAgIFN0cmluZyB0ZXN0QWN0dWFsPSBteVRlc3QuZ2V0QWN0dWFsKCApOworCisgICAgICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPHRlc3Q+XG4iKTsKICAgICAgICAgICAgICAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjxpZD4iICsgdGVzdElkICsgIjwvaWQ+XG4iKTsKLQkKLQkJaWYgKCF0ZXN0TmFtZS5lcXVhbHMoIFJlcG9ydGVyQ29uc3RhbnRzLk5BICkgKQotCQl7Ci0JCSAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjxuYW1lPiIgKyB0ZXN0TmFtZSArICI8L25hbWU+XG4iKTsKLQkJfQogCi0JCWlmICghdGVzdERlc2NyaXB0aW9uLmVxdWFscyggUmVwb3J0ZXJDb25zdGFudHMuTkEgKSApCi0JCXsKLQkJICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyIgKyB0ZXN0RGVzY3JpcHRpb24gKyAiXV0+PC9kZXNjcmlwdGlvbj5cbiIpOwotCQl9Ci0JCWlmICghdGVzdFN0YXR1cy5lcXVhbHMoIFJlcG9ydGVyQ29uc3RhbnRzLk9QVElPTkFMICkgKQotCQl7Ci0JCQlpZiAoIXRlc3RTdGF0dXNEZXNjcmlwdGlvbi5lcXVhbHMoIFJlcG9ydGVyQ29uc3RhbnRzLk9QVElPTkFMICkgKQotCQkJewotCQkJICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPHN0YXR1cyB2YWx1ZT1cIiIgKyB0ZXN0U3RhdHVzICsgIlwiPjwhW0NEQVRBWyIgKyB0ZXN0U3RhdHVzRGVzY3JpcHRpb24gKyAiXV0+PC9zdGF0dXM+XG4iKTsKLQkJCX0KLQkJCWVsc2UgaWYgKCAoIHRlc3RFeHBlY3RlZCAhPSBudWxsICkgJiYgKCB0ZXN0QWN0dWFsICE9IG51bGwgKSApIAotCQkJewotCQkJICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPHN0YXR1cyB2YWx1ZT1cIiIgKyB0ZXN0U3RhdHVzICsgIlwiPiA8ZXhwZWN0ZWQ+PCFbQ0RBVEFbIiArIHRlc3RFeHBlY3RlZCArICJdXT48L2V4cGVjdGVkPjxhY3R1YWw+PCFbQ0RBVEFbIiArIHRlc3RBY3R1YWwgKyAgICJdXT48L2FjdHVhbD48L3N0YXR1cz5cbiIpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8c3RhdHVzIHZhbHVlPVwiIiArIHRlc3RTdGF0dXMgKyAiXCI+IiArICI8L3N0YXR1cz5cbiIpOwotCQkJfQotCQl9CisgICAgICAgIGlmICghdGVzdE5hbWUuZXF1YWxzKCBSZXBvcnRlckNvbnN0YW50cy5OQSApICkKKyAgICAgICAgeworICAgICAgICAgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8bmFtZT4iICsgdGVzdE5hbWUgKyAiPC9uYW1lPlxuIik7CisgICAgICAgIH0KIAotCQlIYXNodGFibGUgdGVzdENhc2VIYXNoID0gbXlUZXN0LmdldFRlc3RDYXNlSGFzaCgpOwotCQlWZWN0b3IgdGVzdENhc2VJZFZlY3RvciA9IG15VGVzdC5nZXRUZXN0Q2FzZUlkVmVjdG9yKCApOwotCQkKLQkJLyoKLQkJaWYgKCB0ZXN0Q2FzZUlkVmVjdG9yLnNpemUoICkgPCAxICkKLQkJewotCQkJLy8gVGhpcyBtZWFucyB0aGVyZSBhcmUgbm8gdGVzdCBjYXNlcyBhbmQgVGVzdCBoYXMgdGhlIHN0YXR1cyBpbmZvCi0JCQl4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjwvdGVzdD5cbiIpOworICAgICAgICBpZiAoIXRlc3REZXNjcmlwdGlvbi5lcXVhbHMoIFJlcG9ydGVyQ29uc3RhbnRzLk5BICkgKQorICAgICAgICB7CisgICAgICAgICAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjxkZXNjcmlwdGlvbj48IVtDREFUQVsiICsgdGVzdERlc2NyaXB0aW9uICsgIl1dPjwvZGVzY3JpcHRpb24+XG4iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRlc3RTdGF0dXMuZXF1YWxzKCBSZXBvcnRlckNvbnN0YW50cy5PUFRJT05BTCApICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCF0ZXN0U3RhdHVzRGVzY3JpcHRpb24uZXF1YWxzKCBSZXBvcnRlckNvbnN0YW50cy5PUFRJT05BTCApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjxzdGF0dXMgdmFsdWU9XCIiICsgdGVzdFN0YXR1cyArICJcIj48IVtDREFUQVsiICsgdGVzdFN0YXR1c0Rlc2NyaXB0aW9uICsgIl1dPjwvc3RhdHVzPlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICggKCB0ZXN0RXhwZWN0ZWQgIT0gbnVsbCApICYmICggdGVzdEFjdHVhbCAhPSBudWxsICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPHN0YXR1cyB2YWx1ZT1cIiIgKyB0ZXN0U3RhdHVzICsgIlwiPiA8ZXhwZWN0ZWQ+PCFbQ0RBVEFbIiArIHRlc3RFeHBlY3RlZCArICJdXT48L2V4cGVjdGVkPjxhY3R1YWw+PCFbQ0RBVEFbIiArIHRlc3RBY3R1YWwgKyAgICJdXT48L2FjdHVhbD48L3N0YXR1cz5cbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8c3RhdHVzIHZhbHVlPVwiIiArIHRlc3RTdGF0dXMgKyAiXCI+IiArICI8L3N0YXR1cz5cbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAKLQkJfQotCQkqLwotCQlpZiAoIHRlc3RDYXNlSWRWZWN0b3Iuc2l6ZSgpID49IDEgKQotCQl7Ci0JCQl4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjx0ZXN0Y2FzZXM+XG4iKTsKLQkJCi0JCSAgICAgZm9yICggaW50IHRjPTA7IHRjPCB0ZXN0Q2FzZUlkVmVjdG9yLnNpemUoKTsgdGMrKyApCi0JCSAgICAgewotCQkJU3RyaW5nIHRlc3RDYXNlSWQgPSAoU3RyaW5nKXRlc3RDYXNlSWRWZWN0b3IuZWxlbWVudEF0KCB0YyApOwotCQkJVGVzdENhc2UgbXlUZXN0Q2FzZSA9IChUZXN0Q2FzZSl0ZXN0Q2FzZUhhc2guZ2V0KCB0ZXN0Q2FzZUlkLnRyaW0oKSApOworICAgICAgICBIYXNodGFibGUgdGVzdENhc2VIYXNoID0gbXlUZXN0LmdldFRlc3RDYXNlSGFzaCgpOworICAgICAgICBWZWN0b3IgdGVzdENhc2VJZFZlY3RvciA9IG15VGVzdC5nZXRUZXN0Q2FzZUlkVmVjdG9yKCApOwogCi0JCQlTdHJpbmcgdGVzdENhc2VOYW1lID0gbXlUZXN0Q2FzZS5nZXROYW1lKCk7Ci0JCQlTdHJpbmcgdGVzdENhc2VEZXNjcmlwdGlvbiA9IG15VGVzdENhc2UuZ2V0RGVzY3JpcHRpb24oKTsKLQkJCVN0cmluZyB0ZXN0Q2FzZVN0YXR1cyA9IG15VGVzdENhc2UuZ2V0U3RhdHVzKCk7Ci0JCQlTdHJpbmcgdGVzdENhc2VTdGF0dXNEZXNjcmlwdGlvbiA9IG15VGVzdENhc2UuZ2V0U3RhdHVzRGVzY3JpcHRpb24oKTsKLQkJCVN0cmluZyB0ZXN0Q2FzZUV4cGVjdGVkID0gbXlUZXN0Q2FzZS5nZXRFeHBlY3RlZCgpOwotCQkJU3RyaW5nIHRlc3RDYXNlQWN0dWFsID0gbXlUZXN0Q2FzZS5nZXRBY3R1YWwoKTsKKyAgICAgICAgLyoKKyAgICAgICAgaWYgKCB0ZXN0Q2FzZUlkVmVjdG9yLnNpemUoICkgPCAxICkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGVyZSBhcmUgbm8gdGVzdCBjYXNlcyBhbmQgVGVzdCBoYXMgdGhlIHN0YXR1cyBpbmZvCisgICAgICAgICAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjwvdGVzdD5cbiIpOwogCi0JCQl4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjx0ZXN0Y2FzZT5cbiIpOwotCQkJeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8aWQ+ICIgKyB0ZXN0Q2FzZUlkICsgIjwvaWQ+XG4iKTsKLQkJCWlmICghdGVzdENhc2VOYW1lLmVxdWFscyggUmVwb3J0ZXJDb25zdGFudHMuTkEgKSApCi0JCQl7Ci0JCQkgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8bmFtZT4iICsgdGVzdENhc2VOYW1lICsgIjwvbmFtZT5cbiIpOwotCQkJfQorICAgICAgICB9CisgICAgICAgICovCisgICAgICAgIGlmICggdGVzdENhc2VJZFZlY3Rvci5zaXplKCkgPj0gMSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPHRlc3RjYXNlcz5cbiIpOwogCi0JCQlpZiAoIXRlc3RDYXNlRGVzY3JpcHRpb24uZXF1YWxzKCBSZXBvcnRlckNvbnN0YW50cy5OQSApICkKLQkJCXsKLQkJCSAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjxkZXNjcmlwdGlvbj48IVtDREFUQVsiICsgdGVzdENhc2VEZXNjcmlwdGlvbiArICJdXT48L2Rlc2NyaXB0aW9uPlxuIik7Ci0JCQl9Ci0JCQlpZiAoIXRlc3RDYXNlU3RhdHVzRGVzY3JpcHRpb24uZXF1YWxzKCBSZXBvcnRlckNvbnN0YW50cy5OQSApICkKLQkJCXsKLQkJCSAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjxzdGF0dXMgdmFsdWU9XCIiICsgdGVzdENhc2VTdGF0dXMgKyAiXCI+PCFbQ0RBVEFbIiArIHRlc3RDYXNlU3RhdHVzRGVzY3JpcHRpb24gKyAiXV0+PC9zdGF0dXM+XG4iKTsKLQkJCX0KLQkJCWVsc2UgaWYgKCAoIHRlc3RDYXNlRXhwZWN0ZWQgIT0gbnVsbCApICYmICggdGVzdENhc2VBY3R1YWwgIT0gbnVsbCApICkgCi0JCQl7Ci0JCQkgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8c3RhdHVzIHZhbHVlPVwiIiArIHRlc3RDYXNlU3RhdHVzICsgIlwiPiA8ZXhwZWN0ZWQ+PCFbQ0RBVEFbIiArIHRlc3RDYXNlRXhwZWN0ZWQgKyAiXV0+PC9leHBlY3RlZD48YWN0dWFsPjwhW0NEQVRBWyIgKyB0ZXN0Q2FzZUFjdHVhbCArICAgIl1dPjwvYWN0dWFsPjwvc3RhdHVzPlxuIik7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8c3RhdHVzIHZhbHVlPVwiIiArIHRlc3RDYXNlU3RhdHVzICsgIlwiPiIgKyAiPC9zdGF0dXM+XG4iKTsKLQkJCX0KLQkJCXhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPC90ZXN0Y2FzZT5cbiIpOworICAgICAgICAgICAgIGZvciAoIGludCB0Yz0wOyB0YzwgdGVzdENhc2VJZFZlY3Rvci5zaXplKCk7IHRjKysgKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZyB0ZXN0Q2FzZUlkID0gKFN0cmluZyl0ZXN0Q2FzZUlkVmVjdG9yLmVsZW1lbnRBdCggdGMgKTsKKyAgICAgICAgICAgIFRlc3RDYXNlIG15VGVzdENhc2UgPSAoVGVzdENhc2UpdGVzdENhc2VIYXNoLmdldCggdGVzdENhc2VJZC50cmltKCkgKTsKKworICAgICAgICAgICAgU3RyaW5nIHRlc3RDYXNlTmFtZSA9IG15VGVzdENhc2UuZ2V0TmFtZSgpOworICAgICAgICAgICAgU3RyaW5nIHRlc3RDYXNlRGVzY3JpcHRpb24gPSBteVRlc3RDYXNlLmdldERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBTdHJpbmcgdGVzdENhc2VTdGF0dXMgPSBteVRlc3RDYXNlLmdldFN0YXR1cygpOworICAgICAgICAgICAgU3RyaW5nIHRlc3RDYXNlU3RhdHVzRGVzY3JpcHRpb24gPSBteVRlc3RDYXNlLmdldFN0YXR1c0Rlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBTdHJpbmcgdGVzdENhc2VFeHBlY3RlZCA9IG15VGVzdENhc2UuZ2V0RXhwZWN0ZWQoKTsKKyAgICAgICAgICAgIFN0cmluZyB0ZXN0Q2FzZUFjdHVhbCA9IG15VGVzdENhc2UuZ2V0QWN0dWFsKCk7CisKKyAgICAgICAgICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPHRlc3RjYXNlPlxuIik7CisgICAgICAgICAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjxpZD4gIiArIHRlc3RDYXNlSWQgKyAiPC9pZD5cbiIpOworICAgICAgICAgICAgaWYgKCF0ZXN0Q2FzZU5hbWUuZXF1YWxzKCBSZXBvcnRlckNvbnN0YW50cy5OQSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjxuYW1lPiIgKyB0ZXN0Q2FzZU5hbWUgKyAiPC9uYW1lPlxuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghdGVzdENhc2VEZXNjcmlwdGlvbi5lcXVhbHMoIFJlcG9ydGVyQ29uc3RhbnRzLk5BICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyIgKyB0ZXN0Q2FzZURlc2NyaXB0aW9uICsgIl1dPjwvZGVzY3JpcHRpb24+XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdGVzdENhc2VTdGF0dXNEZXNjcmlwdGlvbi5lcXVhbHMoIFJlcG9ydGVyQ29uc3RhbnRzLk5BICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPHN0YXR1cyB2YWx1ZT1cIiIgKyB0ZXN0Q2FzZVN0YXR1cyArICJcIj48IVtDREFUQVsiICsgdGVzdENhc2VTdGF0dXNEZXNjcmlwdGlvbiArICJdXT48L3N0YXR1cz5cbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoICggdGVzdENhc2VFeHBlY3RlZCAhPSBudWxsICkgJiYgKCB0ZXN0Q2FzZUFjdHVhbCAhPSBudWxsICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPHN0YXR1cyB2YWx1ZT1cIiIgKyB0ZXN0Q2FzZVN0YXR1cyArICJcIj4gPGV4cGVjdGVkPjwhW0NEQVRBWyIgKyB0ZXN0Q2FzZUV4cGVjdGVkICsgIl1dPjwvZXhwZWN0ZWQ+PGFjdHVhbD48IVtDREFUQVsiICsgdGVzdENhc2VBY3R1YWwgKyAgICJdXT48L2FjdHVhbD48L3N0YXR1cz5cbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPHN0YXR1cyB2YWx1ZT1cIiIgKyB0ZXN0Q2FzZVN0YXR1cyArICJcIj4iICsgIjwvc3RhdHVzPlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjwvdGVzdGNhc2U+XG4iKTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8L3Rlc3RjYXNlcz5cbiIpOwogCi0JCX0KKyAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8L3Rlc3Q+XG4iKTsKLQkgICAgIH0KLQkgICAgIAorICAgICAgICAgfQorCiAgICAgICAgICAgICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPC90ZXN0cz5cbiIgKTsKICAgICAgICAgICAgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8L3Rlc3RzdWl0ZT5cbiIgKTsKICAgICAgICAgICAgICBib29sZWFuIHdyaXRlUmVzdWx0ID0gIHdyaXRlWE1MRmlsZSh4bWxSZXByZXNlbnRhdGlvbiwgZm91dHB1dCk7Ci0JCS8vIE5vdyByZW1vdmUgVGVzdFN1aXRlIGZyb20gSGFzaHRhYmxlOiBQRU5ESU5HIAotCSAgICAgaWYgKCB3cml0ZVJlc3VsdD09dHJ1ZSApCi0JICAgICB7Ci0JCS8vIElmIHdlIGNvdWxkIHdyaXRlIHRlaCBjb250ZW50IHByb3Blcmx5IHRoZW4gcmVtb3ZlIHRoZSBUZXN0U3VpdGUgZnJvbSBIYXNodGFibGUKLQkgICAgIHRlc3RTdWl0ZUhhc2gucmVtb3ZlKCB0ZXN0U3VpdGVJZC50cmltKCkgKTsKLQkgICAgIH0KLQkgICAgcmV0dXJuIHdyaXRlUmVzdWx0OworICAgICAgICAvLyBOb3cgcmVtb3ZlIFRlc3RTdWl0ZSBmcm9tIEhhc2h0YWJsZTogUEVORElORworICAgICAgICAgaWYgKCB3cml0ZVJlc3VsdD09dHJ1ZSApCisgICAgICAgICB7CisgICAgICAgIC8vIElmIHdlIGNvdWxkIHdyaXRlIHRlaCBjb250ZW50IHByb3Blcmx5IHRoZW4gcmVtb3ZlIHRoZSBUZXN0U3VpdGUgZnJvbSBIYXNodGFibGUKKyAgICAgICAgIHRlc3RTdWl0ZUhhc2gucmVtb3ZlKCB0ZXN0U3VpdGVJZC50cmltKCkgKTsKKyAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHdyaXRlUmVzdWx0OwogICAgICAgICB9IGNhdGNoIChqYXZhLmxhbmcuRXhjZXB0aW9uIGV4KXsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiB3cml0ZVhNTEZpbGUoU3RyaW5nQnVmZmVyIHhtbFN0cmluZ0J1ZmZlcil7CiAgICAgICAgIFByaW50V3JpdGVyIHdyaXRlciA9IG51bGw7CiAgICAgICAgIHRyeXsKQEAgLTg4MCwyMSArODgwLDIxIEBACiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBjbG9zZSh3cml0ZXIpOwotICAgICAgICB9ICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsgICAgICAgIAorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiB3cml0ZVhNTEZpbGUoU3RyaW5nQnVmZmVyIHhtbFN0cmluZ0J1ZmZlciwgRmlsZU91dHB1dFN0cmVhbSAgZm91dCl7CiAgICAgICAgIHRyeXsKLQkgICAgZm91dC53cml0ZSggeG1sU3RyaW5nQnVmZmVyLnRvU3RyaW5nKCkuZ2V0Qnl0ZXMoKSApOwotCSAgICBmb3V0LmZsdXNoKCApOworICAgICAgICBmb3V0LndyaXRlKCB4bWxTdHJpbmdCdWZmZXIudG9TdHJpbmcoKS5nZXRCeXRlcygpICk7CisgICAgICAgIGZvdXQuZmx1c2goICk7CiAgICAgICAgIH0gY2F0Y2goamF2YS5pby5JT0V4Y2VwdGlvbiBleCl7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7ICAgICAgICAKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gCisKICAgICBwdWJsaWMgdm9pZCBydW4oKXsKICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlJFUE9SVEVSXHQgSW5zaWRlIHJ1biIpOwogICAgICAgICBnZW5lcmF0ZVZhbGlkUmVwb3J0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGVyL1JlcG9ydGVyQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGVyL1JlcG9ydGVyQ2xpZW50LmphdmEKaW5kZXggNDhlMTJiNi4uZTAyZjhmNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9SZXBvcnRlckNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvUmVwb3J0ZXJDbGllbnQuamF2YQpAQCAtMjAsNyArMjAsNyBAQAogCiBwdWJsaWMgY2xhc3MgUmVwb3J0ZXJDbGllbnR7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pewpAQCAtMzQsMjIgKzM0LDIyIEBACiAgICAgICAgICAgICBlY2hvKGFyZ3NbMV0rIiBpcyB0aGUgdGVzdCBkZXNjcmlwdGlvbiIpOwogICAgICAgICAgICAgZGVmYXVsdF9kZXNjID0gYXJnc1sxXTsKICAgICAgICAgfQotCWludCBudW1UZXN0cyA9IDE7Ci0JaWYgKGFyZ3MubGVuZ3RoPj0zKSB7Ci0JICAgIG51bVRlc3RzID0gSW50ZWdlci5wYXJzZUludChhcmdzWzJdKTsKLQl9CisgICAgaW50IG51bVRlc3RzID0gMTsKKyAgICBpZiAoYXJncy5sZW5ndGg+PTMpIHsKKyAgICAgICAgbnVtVGVzdHMgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMl0pOworICAgIH0KIAogCiAgICAgICAgIGVjaG8oImFkZGluZyBkZXNjcmlwdGlvbi4uLiIpOwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGRlZmF1bHRfZGVzYyk7CiAgICAgICAgIGVjaG8oImFkZGluZyBzdGF0dXMuLi4iKTsKLQlpZiAobnVtVGVzdHM9PTEpIHsKLQkJIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRElEX05PVF9SVU4pOwotCX0gZWxzZSB7Ci0JICAgICBmb3IgKGludCBpPTA7aTxudW1UZXN0czsgaSsrKSB7Ci0gICAgICAgIAkgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0rIi0iKyhpKzEpLCBzdGF0LkRJRF9OT1RfUlVOKTsKLQkgICAgIH0KLQl9CisgICAgaWYgKG51bVRlc3RzPT0xKSB7CisgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkRJRF9OT1RfUlVOKTsKKyAgICB9IGVsc2UgeworICAgICAgICAgZm9yIChpbnQgaT0wO2k8bnVtVGVzdHM7IGkrKykgeworICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdKyItIisoaSsxKSwgc3RhdC5ESURfTk9UX1JVTik7CisgICAgICAgICB9CisgICAgfQogCiAgICAgICAgIGVjaG8oInByaW50aW5nIHN1bW1hcnkuLi4iKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKQEAgLTU3LDcgKzU3LDcgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgdXNhZ2UoKXsKICAgICAgICBTdHJpbmcgdXNnPSJVc2FnZToiKwogICAgICAgICAgICAiXHRSZXBvcnRlckNsaWVudCA8dGVzdCBuYW1lPiBbPHRlc3QgZGVzY3JpcHRpb24+XSIrCi0gICAgICAgICAgICJcdE5vdGU6VGVzdCBkZXNjcmlwdGlvbiBpcyBub3QgcmVxdWlyZWQgYnV0IHJlY29tbWVuZGVkIjsgCisgICAgICAgICAgICJcdE5vdGU6VGVzdCBkZXNjcmlwdGlvbiBpcyBub3QgcmVxdWlyZWQgYnV0IHJlY29tbWVuZGVkIjsKICAgICAgICBlY2hvKHVzZyk7CiAgICAgfQogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBlY2hvKFN0cmluZyBtc2cpewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9SZXBvcnRlckNvbnN0YW50cy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9SZXBvcnRlckNvbnN0YW50cy5qYXZhCmluZGV4IGQ5MjRiMmIuLjVlZWUyM2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvUmVwb3J0ZXJDb25zdGFudHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGVyL1JlcG9ydGVyQ29uc3RhbnRzLmphdmEKQEAgLTE4LDEwICsxOCwxMCBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIFJlcG9ydGVyQ29uc3RhbnRzCiB7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkE9Ik5BIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBESURfTk9UX1JVTj0iZGlkX25vdF9ydW4iOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBU1M9InBhc3MiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZBSUw9ImZhaWwiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9QVElPTkFMPSIiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BPSJOQSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElEX05PVF9SVU49ImRpZF9ub3RfcnVuIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVNTPSJwYXNzIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGQUlMPSJmYWlsIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPUFRJT05BTD0iIjsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9TaW1wbGVSZXBvcnRlckFkYXB0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvU2ltcGxlUmVwb3J0ZXJBZGFwdGVyLmphdmEKaW5kZXggM2JmNWY3NC4uNDk0ZmRiMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9TaW1wbGVSZXBvcnRlckFkYXB0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGVyL1NpbXBsZVJlcG9ydGVyQWRhcHRlci5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgcmVzdWx0RmlsZT0idGVzdF9yZXN1bHRzIjsKICAgICBwcml2YXRlIGJvb2xlYW4gaXNGaWxlU2V0PWZhbHNlOwogCi0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCkgIHsKICAgICAgICAgdGVzdFN1aXRlTmFtZSA9ICJ1bmRlZmluZWQiOwogICAgICAgICB0ZXN0U3VpdGVJRCA9IG51bGw7CkBAIC01MCw4ICs1MCw4IEBACiAgICAgICAgIH0KICAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGV4KSB7IH0KICAgICB9Ci0gICAKLSAgICAKKworCiAgICAgcHVibGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlcihTdHJpbmcgd3Nfcm9vdCkgICAgIHsKICAgICAgICAgdGVzdFN1aXRlTmFtZSA9ICJ1bmRlZmluZWQiOwogICAgICAgICB0ZXN0U3VpdGVJRCA9IG51bGw7CkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgIH0KICAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGV4KSB7IH0KICAgICB9Ci0gICAgCisKICAgICAvL3VzZWQgYnkgd2VicnVubmVyCiAgICAgcHVibGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlcihTdHJpbmcgcmVzdWx0RmlsZVBhdGgsYm9vbGVhbiBpc1Jlc3VsdEZpbGVTZXQpewogICAgICAgICB0cnl7CkBAIC03Miw4ICs3Miw4IEBACiAgICAgICAgICAgICB0aGlzLnJlc3VsdEZpbGU9cmVzdWx0RmlsZVBhdGg7CiAgICAgICAgIH1jYXRjaCggRXhjZXB0aW9uIGV4ICl7IH0KICAgICB9Ci0gICAgCi0gICAgCisKKwogCiAgICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGFkZFN0YXR1cyhTdHJpbmcgcywgU3RyaW5nIHN0YXR1cykgICAgewogICAgICAgICBpZiggdGVzdFN1aXRlTmFtZS5jb21wYXJlVG8oInVuZGVmaW5lZCIpID09IDAgKSB7CkBAIC05MCwxMSArOTAsMTEgQEAKICAgICAgICAgICAgIHRlc3RDYXNlU3RhdHVzID0gbmV3IEhhc2hNYXAoNSk7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgYmxhbmtJbmRleCA9IHMuaW5kZXhPZigiICIpOyAgICAgICAgCisgICAgICAgIGludCBibGFua0luZGV4ID0gcy5pbmRleE9mKCIgIik7CiAgICAgICAgIFN0cmluZyBrZXkgPSBzOwogICAgICAgICBpZiAoYmxhbmtJbmRleCE9LTEpewogICAgICAgICAgICAga2V5ID0gcy5zdWJzdHJpbmcocy5pbmRleE9mKCAiICIgKSk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICAgICAgaWYoZGVidWcpCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlZhbHVlIG9mIGtleSBpczoiK2tleSk7CiAKQEAgLTEyMSwxNCArMTIxLDE0IEBACiAgICAgICAgICAgICBvdXRwdXREaXIgPSBlanRlX2hvbWUgKyB3c19ob21lOwogICAgICAgICAgICAgcmVwb3J0ZXIgPSBSZXBvcnRlci5nZXRJbnN0YW5jZSh3c19ob21lKTsKICAgICAgICAgICAgIGlmKGRlYnVnKQotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR2VuZXJhdGluZyByZXBvcnQgYXQgXHQiICsgb3V0cHV0RGlyICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHZW5lcmF0aW5nIHJlcG9ydCBhdCBcdCIgKyBvdXRwdXREaXIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRmlsZS5zZXBhcmF0b3JDaGFyICsgInRlc3RfcmVzdWx0cy54bWwiKTsKICAgICAgICAgICAgIHJlcG9ydGVyLnNldFRlc3RTdWl0ZSh0ZXN0U3VpdGVJRCwgdGVzdFN1aXRlTmFtZSwgdGVzdFN1aXRlRGVzY3JpcHRpb24pOwogICAgICAgICAgICAgcmVwb3J0ZXIuYWRkVGVzdCh0ZXN0U3VpdGVJRCwgdGVzdFN1aXRlSUQsIHRlc3RTdWl0ZU5hbWUpOwogICAgICAgICAgICAga2V5U2V0cyA9IHRlc3RDYXNlU3RhdHVzLmtleVNldCgpOwogICAgICAgICAgICAga2V5U2V0c0lUID0ga2V5U2V0cy5pdGVyYXRvcigpOwogICAgICAgICAgICAgU3RyaW5nIHRjTmFtZTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpbnQgcGFzcz0gMDsKICAgICAgICAgICAgIGludCBmYWlsID0gMDsKICAgICAgICAgICAgIGludCBkX25fciA9IDA7CkBAIC0xMzcsNyArMTM3LDcgQEAKICAgICAgICAgICAgIHdoaWxlKCBrZXlTZXRzSVQuaGFzTmV4dCgpICl7CiAgICAgICAgICAgICAgICAgdGNOYW1lID0ga2V5U2V0c0lULm5leHQoKS50b1N0cmluZygpOwogICAgICAgICAgICAgICAgIHN0YXR1cyA9ICB0ZXN0Q2FzZVN0YXR1cy5nZXQoIHRjTmFtZSApLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmVxdWFsc0lnbm9yZUNhc2UoUEFTUykpewogICAgICAgICAgICAgICAgICAgICBwYXNzKys7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHN0YXR1cy5lcXVhbHNJZ25vcmVDYXNlKERJRF9OT1RfUlVOKSl7CkBAIC0xNDUsNyArMTQ1LDcgQEAKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBmYWlsKys7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItXHQgIiArIHRjTmFtZSArICI6ICIgKyBzdGF0dXMudG9VcHBlckNhc2UoKSArICJcdC0iKTsKICAgICAgICAgICAgICAgICByZXBvcnRlci5hZGRUZXN0Q2FzZSggdGVzdFN1aXRlSUQsIHRlc3RTdWl0ZUlELCB0Y05hbWUgKyAiSUQiLCB0Y05hbWUgKTsKICAgICAgICAgICAgICAgICByZXBvcnRlci5zZXRUZXN0Q2FzZVN0YXR1cyggdGVzdFN1aXRlSUQsIHRlc3RTdWl0ZUlELCB0Y05hbWUgKyAiSUQiLCBzdGF0dXMgKTsKQEAgLTIwMiwxMiArMjAyLDEyIEBACiAgICAgICAgIHRlc3RDYXNlU3RhdHVzLmNsZWFyKCk7CiAgICAgICAgIHRlc3RTdWl0ZU5hbWUgPSAidW5kZWZpbmVkIjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKkEgZGVhZCBmdW5jdGlvbi4KICAgICAgKiBKMkVFIHNlcnZlciBzZWN1cml0eSBjb250cmFpbnRzIGRvbid0IGFsbG93IHVzZSBvZiBleGVjCiAgICAgICovCi0gICAgCisKICAgICBwdWJsaWMgUHJvcGVydGllcyBnZXRFbnZWYXJzKCkgdGhyb3dzIFRocm93YWJsZSB7CiAgICAgICAgIFByb2Nlc3MgcCA9IG51bGw7CiAgICAgICAgIFByb3BlcnRpZXMgZW52VmFycyA9IG5ldyBQcm9wZXJ0aWVzKCk7CkBAIC0yMjAsMTAgKzIyMCwxMCBAQAogICAgICAgICBlbHNlIGlmICggKE9TLmluZGV4T2YoIm50IikgPiAtMSkgfHwgKE9TLmluZGV4T2YoIndpbmRvd3MgMjAwMCIpID4gLTEpICkgewogICAgICAgICAgICAgcCA9IHIuZXhlYyggImNtZC5leGUgL2Mgc2V0IiApOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgeyAgCisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcCA9IHIuZXhlYyggImVudiIgKTsKICAgICAgICAgfQotICAgICAgICBCdWZmZXJlZFJlYWRlciBiciA9IAorICAgICAgICBCdWZmZXJlZFJlYWRlciBiciA9CiAgICAgICAgICAgICBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKHAuZ2V0SW5wdXRTdHJlYW0oKSkpOwogICAgICAgICBTdHJpbmcgbGluZTsKICAgICAgICAgd2hpbGUoIChsaW5lID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCApIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9UZXN0LmphdmEKaW5kZXggMjUyYzA4MS4uZTZlNjIyZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9UZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9UZXN0LmphdmEKQEAgLTE3LDEyICsxNywxMiBAQAogcGFja2FnZSBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyOwogCiAvKioKLQlAQ2xhc3M6IFRlc3QKLQlARGVzY3JpcHRpb246IENsYXNzIGhvbGRpbmcgT25lIFRlc3QgaW5mby4KLQlAQXV0aG9yIDogUmFtZXNoIE1hbmRhdmEKLQlATGFzdCBNb2RpZmllZCA6SW5pdGlhbCBjcmVhdGlvbiBCeSBSYW1lc2ggb24gMTAvMjQvMjAwMQotCUBMYXN0IE1vZGlmaWVkIDogQnkgUmFtZXNoIG9uIDEvMjAvMjAwMiAsIEZvciBwcmVzZXJ2aW5nIG9yZGVyIG9mIGVudHJ5IG9mIAotCQl0ZXN0Y2FzZXMgdXNlZCBhIHNlcGFyYXRlIHRlc3RDYXNlSWRWZWN0b3IKKyAgICBAQ2xhc3M6IFRlc3QKKyAgICBARGVzY3JpcHRpb246IENsYXNzIGhvbGRpbmcgT25lIFRlc3QgaW5mby4KKyAgICBAQXV0aG9yIDogUmFtZXNoIE1hbmRhdmEKKyAgICBATGFzdCBNb2RpZmllZCA6SW5pdGlhbCBjcmVhdGlvbiBCeSBSYW1lc2ggb24gMTAvMjQvMjAwMQorICAgIEBMYXN0IE1vZGlmaWVkIDogQnkgUmFtZXNoIG9uIDEvMjAvMjAwMiAsIEZvciBwcmVzZXJ2aW5nIG9yZGVyIG9mIGVudHJ5IG9mCisgICAgICAgIHRlc3RjYXNlcyB1c2VkIGEgc2VwYXJhdGUgdGVzdENhc2VJZFZlY3RvcgogCiAqLwogCkBAIC0zMiwxMzYgKzMyLDEzNiBAQAogCiBwdWJsaWMgY2xhc3MgVGVzdAogewotCXByaXZhdGUgU3RyaW5nIGlkOwotCXByaXZhdGUgU3RyaW5nIG5hbWU7Ci0JcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CisgICAgcHJpdmF0ZSBTdHJpbmcgaWQ7CisgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKIAotCXByaXZhdGUgU3RyaW5nIHN0YXR1czsKLQlwcml2YXRlIFN0cmluZyBzdGF0dXNEZXNjcmlwdGlvbjsKKyAgICBwcml2YXRlIFN0cmluZyBzdGF0dXM7CisgICAgcHJpdmF0ZSBTdHJpbmcgc3RhdHVzRGVzY3JpcHRpb247CiAKLQlwcml2YXRlIFN0cmluZyBleHBlY3RlZDsKLQlwcml2YXRlIFN0cmluZyBhY3R1YWw7CisgICAgcHJpdmF0ZSBTdHJpbmcgZXhwZWN0ZWQ7CisgICAgcHJpdmF0ZSBTdHJpbmcgYWN0dWFsOwogCi0JSGFzaHRhYmxlIHRlc3RDYXNlSGFzaDsKLQlWZWN0b3IgdGVzdENhc2VJZFZlY3RvcjsgLy8gQWRkZWQgdG8gcHJlc2VydmUgb3JkZXIgb2YgZW50cnkKKyAgICBIYXNodGFibGUgdGVzdENhc2VIYXNoOworICAgIFZlY3RvciB0ZXN0Q2FzZUlkVmVjdG9yOyAvLyBBZGRlZCB0byBwcmVzZXJ2ZSBvcmRlciBvZiBlbnRyeQogCiAKLQlwdWJsaWMgVGVzdCggU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2NyaXB0aW9uICkKLQl7Ci0JCXRoaXMuaWQgPSBpZDsKLQkJdGhpcy5uYW1lPSBuYW1lOwotCQl0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0JCXRoaXMuc3RhdHVzID0gUmVwb3J0ZXJDb25zdGFudHMuT1BUSU9OQUw7Ci0JCXRoaXMuc3RhdHVzRGVzY3JpcHRpb249UmVwb3J0ZXJDb25zdGFudHMuT1BUSU9OQUw7Ci0JCXRoaXMuZXhwZWN0ZWQgPSBudWxsOwotCQl0aGlzLmFjdHVhbD0gbnVsbDsKLQkJdGVzdENhc2VIYXNoID0gbmV3IEhhc2h0YWJsZSgpOwotCQl0ZXN0Q2FzZUlkVmVjdG9yPSBuZXcgVmVjdG9yKCk7Ci0JfQotCXB1YmxpYyBUZXN0KCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lICkKLQl7Ci0JCXRoaXMuaWQgPSBpZDsKLQkJdGhpcy5uYW1lPSBuYW1lOwotCQl0aGlzLmRlc2NyaXB0aW9uID1SZXBvcnRlckNvbnN0YW50cy5OQSA7Ci0JCXRoaXMuc3RhdHVzID0gUmVwb3J0ZXJDb25zdGFudHMuT1BUSU9OQUw7Ci0JCXRoaXMuc3RhdHVzRGVzY3JpcHRpb249UmVwb3J0ZXJDb25zdGFudHMuT1BUSU9OQUw7Ci0JCXRoaXMuZXhwZWN0ZWQgPSBudWxsOwotCQl0aGlzLmFjdHVhbD0gbnVsbDsKLQkJdGVzdENhc2VIYXNoID0gbmV3IEhhc2h0YWJsZSgpOwotCQl0ZXN0Q2FzZUlkVmVjdG9yPSBuZXcgVmVjdG9yKCk7Ci0JfQorICAgIHB1YmxpYyBUZXN0KCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzY3JpcHRpb24gKQorICAgIHsKKyAgICAgICAgdGhpcy5pZCA9IGlkOworICAgICAgICB0aGlzLm5hbWU9IG5hbWU7CisgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKKyAgICAgICAgdGhpcy5zdGF0dXMgPSBSZXBvcnRlckNvbnN0YW50cy5PUFRJT05BTDsKKyAgICAgICAgdGhpcy5zdGF0dXNEZXNjcmlwdGlvbj1SZXBvcnRlckNvbnN0YW50cy5PUFRJT05BTDsKKyAgICAgICAgdGhpcy5leHBlY3RlZCA9IG51bGw7CisgICAgICAgIHRoaXMuYWN0dWFsPSBudWxsOworICAgICAgICB0ZXN0Q2FzZUhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgIHRlc3RDYXNlSWRWZWN0b3I9IG5ldyBWZWN0b3IoKTsKKyAgICB9CisgICAgcHVibGljIFRlc3QoIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUgKQorICAgIHsKKyAgICAgICAgdGhpcy5pZCA9IGlkOworICAgICAgICB0aGlzLm5hbWU9IG5hbWU7CisgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPVJlcG9ydGVyQ29uc3RhbnRzLk5BIDsKKyAgICAgICAgdGhpcy5zdGF0dXMgPSBSZXBvcnRlckNvbnN0YW50cy5PUFRJT05BTDsKKyAgICAgICAgdGhpcy5zdGF0dXNEZXNjcmlwdGlvbj1SZXBvcnRlckNvbnN0YW50cy5PUFRJT05BTDsKKyAgICAgICAgdGhpcy5leHBlY3RlZCA9IG51bGw7CisgICAgICAgIHRoaXMuYWN0dWFsPSBudWxsOworICAgICAgICB0ZXN0Q2FzZUhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgIHRlc3RDYXNlSWRWZWN0b3I9IG5ldyBWZWN0b3IoKTsKKyAgICB9CiAKLQlwdWJsaWMgVGVzdCggU3RyaW5nIGlkICkKLQl7Ci0JCXRoaXMuaWQgPSBpZDsKLQkJdGhpcy5uYW1lPSBSZXBvcnRlckNvbnN0YW50cy5OQTsKLQkJdGhpcy5kZXNjcmlwdGlvbiA9UmVwb3J0ZXJDb25zdGFudHMuTkEgOwotCQl0aGlzLnN0YXR1cyA9IFJlcG9ydGVyQ29uc3RhbnRzLk9QVElPTkFMOwotCQl0aGlzLnN0YXR1c0Rlc2NyaXB0aW9uPVJlcG9ydGVyQ29uc3RhbnRzLk9QVElPTkFMOwotCQl0aGlzLmV4cGVjdGVkID0gbnVsbDsKLQkJdGhpcy5hY3R1YWw9IG51bGw7Ci0JCXRlc3RDYXNlSGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLQkJdGVzdENhc2VJZFZlY3Rvcj0gbmV3IFZlY3RvcigpOwotCX0KKyAgICBwdWJsaWMgVGVzdCggU3RyaW5nIGlkICkKKyAgICB7CisgICAgICAgIHRoaXMuaWQgPSBpZDsKKyAgICAgICAgdGhpcy5uYW1lPSBSZXBvcnRlckNvbnN0YW50cy5OQTsKKyAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9UmVwb3J0ZXJDb25zdGFudHMuTkEgOworICAgICAgICB0aGlzLnN0YXR1cyA9IFJlcG9ydGVyQ29uc3RhbnRzLk9QVElPTkFMOworICAgICAgICB0aGlzLnN0YXR1c0Rlc2NyaXB0aW9uPVJlcG9ydGVyQ29uc3RhbnRzLk9QVElPTkFMOworICAgICAgICB0aGlzLmV4cGVjdGVkID0gbnVsbDsKKyAgICAgICAgdGhpcy5hY3R1YWw9IG51bGw7CisgICAgICAgIHRlc3RDYXNlSGFzaCA9IG5ldyBIYXNodGFibGUoKTsKKyAgICAgICAgdGVzdENhc2VJZFZlY3Rvcj0gbmV3IFZlY3RvcigpOworICAgIH0KIAotCXB1YmxpYyB2b2lkIHNldFN0YXR1cyAoIFN0cmluZyBzdGF0dXMgKSAKLQl7Ci0JCXRoaXMuc3RhdHVzID0gc3RhdHVzOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRTdGF0dXNEZXNjcmlwdGlvbiAoIFN0cmluZyBzdGF0dXNEZXNjcmlwdGlvbiApIAotCXsKLQkJdGhpcy5zdGF0dXNEZXNjcmlwdGlvbiA9IHN0YXR1c0Rlc2NyaXB0aW9uOwotCQl0aGlzLmV4cGVjdGVkPW51bGw7Ci0JCXRoaXMuYWN0dWFsID1udWxsOwotCX0KKyAgICBwdWJsaWMgdm9pZCBzZXRTdGF0dXMgKCBTdHJpbmcgc3RhdHVzICkKKyAgICB7CisgICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBzZXRTdGF0dXNEZXNjcmlwdGlvbiAoIFN0cmluZyBzdGF0dXNEZXNjcmlwdGlvbiApCisgICAgeworICAgICAgICB0aGlzLnN0YXR1c0Rlc2NyaXB0aW9uID0gc3RhdHVzRGVzY3JpcHRpb247CisgICAgICAgIHRoaXMuZXhwZWN0ZWQ9bnVsbDsKKyAgICAgICAgdGhpcy5hY3R1YWwgPW51bGw7CisgICAgfQogCi0JcHVibGljIHZvaWQgc2V0RXhwZWN0ZWQoIFN0cmluZyBleHBlY3RlZCApCi0JewotCQl0aGlzLmV4cGVjdGVkID0gZXhwZWN0ZWQ7Ci0JfQorICAgIHB1YmxpYyB2b2lkIHNldEV4cGVjdGVkKCBTdHJpbmcgZXhwZWN0ZWQgKQorICAgIHsKKyAgICAgICAgdGhpcy5leHBlY3RlZCA9IGV4cGVjdGVkOworICAgIH0KIAotCXB1YmxpYyB2b2lkIHNldEFjdHVhbCggU3RyaW5nIGFjdHVhbCApCi0JewotCQl0aGlzLmFjdHVhbCA9IGFjdHVhbDsKLQl9CisgICAgcHVibGljIHZvaWQgc2V0QWN0dWFsKCBTdHJpbmcgYWN0dWFsICkKKyAgICB7CisgICAgICAgIHRoaXMuYWN0dWFsID0gYWN0dWFsOworICAgIH0KIAotCXB1YmxpYyBTdHJpbmcgZ2V0SWQoICkKLQl7Ci0JCXJldHVybiBpZDsKLQl9CisgICAgcHVibGljIFN0cmluZyBnZXRJZCggKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlkOworICAgIH0KIAotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSggKQotCXsKLQkJcmV0dXJuIG5hbWU7Ci0JfQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSggKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfQogCi0JcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbiggKQotCXsKLQkJcmV0dXJuIGRlc2NyaXB0aW9uOwotCX0KKyAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCApCisgICAgeworICAgICAgICByZXR1cm4gZGVzY3JpcHRpb247CisgICAgfQogCi0JcHVibGljIFN0cmluZyBnZXRTdGF0dXMoICkKLQl7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCXB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzRGVzY3JpcHRpb24oICkKLQl7Ci0JCXJldHVybiBzdGF0dXNEZXNjcmlwdGlvbjsKLQl9CisgICAgcHVibGljIFN0cmluZyBnZXRTdGF0dXMoICkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzRGVzY3JpcHRpb24oICkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0dXNEZXNjcmlwdGlvbjsKKyAgICB9CiAKLQlwdWJsaWMgU3RyaW5nIGdldEV4cGVjdGVkKCApCi0JewotCQlyZXR1cm4gZXhwZWN0ZWQ7Ci0JfQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0RXhwZWN0ZWQoICkKKyAgICB7CisgICAgICAgIHJldHVybiBleHBlY3RlZDsKKyAgICB9CiAKLQlwdWJsaWMgU3RyaW5nIGdldEFjdHVhbCggKQotCXsKLQkJcmV0dXJuIGFjdHVhbDsKLQl9CisgICAgcHVibGljIFN0cmluZyBnZXRBY3R1YWwoICkKKyAgICB7CisgICAgICAgIHJldHVybiBhY3R1YWw7CisgICAgfQogCi0JcHVibGljIFZlY3RvciBnZXRUZXN0Q2FzZUlkVmVjdG9yKCApCi0JewotCQlyZXR1cm4gdGVzdENhc2VJZFZlY3RvcjsKLQl9Ci0JcHVibGljIHZvaWQgc2V0VGVzdENhc2VJZFZlY3RvciggVmVjdG9yIHRpZFZlY3RvcikKLQl7Ci0JCXRlc3RDYXNlSWRWZWN0b3IgPSB0aWRWZWN0b3I7Ci0JfQotCXB1YmxpYyBIYXNodGFibGUgZ2V0VGVzdENhc2VIYXNoKCApCi0JewotCQlyZXR1cm4gdGVzdENhc2VIYXNoOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRUZXN0Q2FzZUhhc2goIEhhc2h0YWJsZSB0ZXN0Q2FzZUhhc2ggKQotCXsKLQkJdGhpcy50ZXN0Q2FzZUhhc2g9IHRlc3RDYXNlSGFzaDsKLQl9CisgICAgcHVibGljIFZlY3RvciBnZXRUZXN0Q2FzZUlkVmVjdG9yKCApCisgICAgeworICAgICAgICByZXR1cm4gdGVzdENhc2VJZFZlY3RvcjsKKyAgICB9CisgICAgcHVibGljIHZvaWQgc2V0VGVzdENhc2VJZFZlY3RvciggVmVjdG9yIHRpZFZlY3RvcikKKyAgICB7CisgICAgICAgIHRlc3RDYXNlSWRWZWN0b3IgPSB0aWRWZWN0b3I7CisgICAgfQorICAgIHB1YmxpYyBIYXNodGFibGUgZ2V0VGVzdENhc2VIYXNoKCApCisgICAgeworICAgICAgICByZXR1cm4gdGVzdENhc2VIYXNoOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBzZXRUZXN0Q2FzZUhhc2goIEhhc2h0YWJsZSB0ZXN0Q2FzZUhhc2ggKQorICAgIHsKKyAgICAgICAgdGhpcy50ZXN0Q2FzZUhhc2g9IHRlc3RDYXNlSGFzaDsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBhZGRUZXN0Q2FzZSggVGVzdENhc2UgdGVzdENhc2UgKQotCXsKLQkJaWYgKCB0ZXN0Q2FzZUhhc2gucHV0KCB0ZXN0Q2FzZS5nZXRJZCgpLnRyaW0oKSwgdGVzdENhc2UgKSAhPSBudWxsICkKLQkJewotCQkJU3lzdGVtLmVyci5wcmludGxuKCIgRXJyb3I/IFRlc3QgQ2FzZSA6ICIgKyB0ZXN0Q2FzZS5nZXRJZCgpLnRyaW0oKSArICIgYWxyZWFkeSBhZGRlZC4gT3ZlcndyaXRpbmcgdGhlIHByZXZpb3VzIHRlc3QgY2FzZSIgKTsKLQkJfQotCQl0ZXN0Q2FzZUlkVmVjdG9yLmFkZEVsZW1lbnQoIHRlc3RDYXNlLmdldElkKCkudHJpbSgpICk7Ci0JfQorICAgIHB1YmxpYyB2b2lkIGFkZFRlc3RDYXNlKCBUZXN0Q2FzZSB0ZXN0Q2FzZSApCisgICAgeworICAgICAgICBpZiAoIHRlc3RDYXNlSGFzaC5wdXQoIHRlc3RDYXNlLmdldElkKCkudHJpbSgpLCB0ZXN0Q2FzZSApICE9IG51bGwgKQorICAgICAgICB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIiBFcnJvcj8gVGVzdCBDYXNlIDogIiArIHRlc3RDYXNlLmdldElkKCkudHJpbSgpICsgIiBhbHJlYWR5IGFkZGVkLiBPdmVyd3JpdGluZyB0aGUgcHJldmlvdXMgdGVzdCBjYXNlIiApOworICAgICAgICB9CisgICAgICAgIHRlc3RDYXNlSWRWZWN0b3IuYWRkRWxlbWVudCggdGVzdENhc2UuZ2V0SWQoKS50cmltKCkgKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGVyL1Rlc3RDYXNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGVyL1Rlc3RDYXNlLmphdmEKaW5kZXggN2E2NzYwOC4uZWU3NjA2YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9UZXN0Q2FzZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvVGVzdENhc2UuamF2YQpAQCAtMTcsMTAgKzE3LDEwIEBACiBwYWNrYWdlIGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXI7CiAKIC8qKgotCUBDbGFzczogVGVzdENhc2UKLQlARGVzY3JpcHRpb246IENsYXNzIGhvbGRpbmcgT25lIFRlc3RDYXNlIGluZm8uCi0JQEF1dGhvciA6IFJhbWVzaCBNYW5kYXZhCi0JQExhc3QgTW9kaWZpZWQgOkluaXRpYWwgY3JlYXRpb24gQnkgUmFtZXNoIG9uIDEwLzI0LzIwMDEKKyAgICBAQ2xhc3M6IFRlc3RDYXNlCisgICAgQERlc2NyaXB0aW9uOiBDbGFzcyBob2xkaW5nIE9uZSBUZXN0Q2FzZSBpbmZvLgorICAgIEBBdXRob3IgOiBSYW1lc2ggTWFuZGF2YQorICAgIEBMYXN0IE1vZGlmaWVkIDpJbml0aWFsIGNyZWF0aW9uIEJ5IFJhbWVzaCBvbiAxMC8yNC8yMDAxCiAqLwogCiAKQEAgLTI4LDY2ICsyOCw2NiBAQAogCiBwdWJsaWMgY2xhc3MgVGVzdENhc2UKIHsKLQlwcml2YXRlIFN0cmluZyBpZDsKLQlwcml2YXRlIFN0cmluZyBuYW1lOwotCXByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOworICAgIHByaXZhdGUgU3RyaW5nIGlkOworICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CisgICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CiAKLQlwcml2YXRlIFN0cmluZyBzdGF0dXM7Ci0JcHJpdmF0ZSBTdHJpbmcgc3RhdHVzRGVzY3JpcHRpb247CisgICAgcHJpdmF0ZSBTdHJpbmcgc3RhdHVzOworICAgIHByaXZhdGUgU3RyaW5nIHN0YXR1c0Rlc2NyaXB0aW9uOwogCi0JcHJpdmF0ZSBTdHJpbmcgZXhwZWN0ZWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgYWN0dWFsOworICAgIHByaXZhdGUgU3RyaW5nIGV4cGVjdGVkOworICAgIHByaXZhdGUgU3RyaW5nIGFjdHVhbDsKIAogCi0JcHVibGljIFRlc3RDYXNlKCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzY3JpcHRpb24gKQotCXsKLQkJdGhpcy5pZCA9IGlkOwotCQl0aGlzLm5hbWU9IG5hbWU7Ci0JCXRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLQkJdGhpcy5zdGF0dXMgPSBSZXBvcnRlckNvbnN0YW50cy5ESURfTk9UX1JVTjsKLQkJdGhpcy5zdGF0dXNEZXNjcmlwdGlvbj1SZXBvcnRlckNvbnN0YW50cy5OQTsKLQkJIHRoaXMuZXhwZWN0ZWQgPSBudWxsOworICAgIHB1YmxpYyBUZXN0Q2FzZSggU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2NyaXB0aW9uICkKKyAgICB7CisgICAgICAgIHRoaXMuaWQgPSBpZDsKKyAgICAgICAgdGhpcy5uYW1lPSBuYW1lOworICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgICAgIHRoaXMuc3RhdHVzID0gUmVwb3J0ZXJDb25zdGFudHMuRElEX05PVF9SVU47CisgICAgICAgIHRoaXMuc3RhdHVzRGVzY3JpcHRpb249UmVwb3J0ZXJDb25zdGFudHMuTkE7CisgICAgICAgICB0aGlzLmV4cGVjdGVkID0gbnVsbDsKICAgICAgICAgICAgICAgICB0aGlzLmFjdHVhbD0gbnVsbDsKIAotCX0KLQlwdWJsaWMgVGVzdENhc2UoIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUgKQotCXsKLQkJdGhpcy5pZCA9IGlkOwotCQl0aGlzLm5hbWU9IG5hbWU7Ci0JCXRoaXMuZGVzY3JpcHRpb24gPVJlcG9ydGVyQ29uc3RhbnRzLk5BIDsKLQkJdGhpcy5zdGF0dXMgPSBSZXBvcnRlckNvbnN0YW50cy5ESURfTk9UX1JVTjsKLQkJdGhpcy5zdGF0dXNEZXNjcmlwdGlvbj1SZXBvcnRlckNvbnN0YW50cy5OQTsKLQkJIHRoaXMuZXhwZWN0ZWQgPSBudWxsOworICAgIH0KKyAgICBwdWJsaWMgVGVzdENhc2UoIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUgKQorICAgIHsKKyAgICAgICAgdGhpcy5pZCA9IGlkOworICAgICAgICB0aGlzLm5hbWU9IG5hbWU7CisgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPVJlcG9ydGVyQ29uc3RhbnRzLk5BIDsKKyAgICAgICAgdGhpcy5zdGF0dXMgPSBSZXBvcnRlckNvbnN0YW50cy5ESURfTk9UX1JVTjsKKyAgICAgICAgdGhpcy5zdGF0dXNEZXNjcmlwdGlvbj1SZXBvcnRlckNvbnN0YW50cy5OQTsKKyAgICAgICAgIHRoaXMuZXhwZWN0ZWQgPSBudWxsOwogICAgICAgICAgICAgICAgIHRoaXMuYWN0dWFsPSBudWxsOwogCi0JfQorICAgIH0KIAotCXB1YmxpYyBUZXN0Q2FzZSggU3RyaW5nIGlkICkKLQl7Ci0JCXRoaXMuaWQgPSBpZDsKLQkJdGhpcy5uYW1lPSBSZXBvcnRlckNvbnN0YW50cy5OQTsKLQkJdGhpcy5kZXNjcmlwdGlvbiA9UmVwb3J0ZXJDb25zdGFudHMuTkEgOwotCQl0aGlzLnN0YXR1cyA9IFJlcG9ydGVyQ29uc3RhbnRzLkRJRF9OT1RfUlVOOwotCQl0aGlzLnN0YXR1c0Rlc2NyaXB0aW9uPVJlcG9ydGVyQ29uc3RhbnRzLk5BOwotCQkgdGhpcy5leHBlY3RlZCA9IG51bGw7CisgICAgcHVibGljIFRlc3RDYXNlKCBTdHJpbmcgaWQgKQorICAgIHsKKyAgICAgICAgdGhpcy5pZCA9IGlkOworICAgICAgICB0aGlzLm5hbWU9IFJlcG9ydGVyQ29uc3RhbnRzLk5BOworICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID1SZXBvcnRlckNvbnN0YW50cy5OQSA7CisgICAgICAgIHRoaXMuc3RhdHVzID0gUmVwb3J0ZXJDb25zdGFudHMuRElEX05PVF9SVU47CisgICAgICAgIHRoaXMuc3RhdHVzRGVzY3JpcHRpb249UmVwb3J0ZXJDb25zdGFudHMuTkE7CisgICAgICAgICB0aGlzLmV4cGVjdGVkID0gbnVsbDsKICAgICAgICAgICAgICAgICB0aGlzLmFjdHVhbD0gbnVsbDsKIAotCX0KKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBzZXRTdGF0dXMgKCBTdHJpbmcgc3RhdHVzICkgCi0JewotCQl0aGlzLnN0YXR1cyA9IHN0YXR1czsKLQl9Ci0JcHVibGljIHZvaWQgc2V0U3RhdHVzRGVzY3JpcHRpb24gKCBTdHJpbmcgc3RhdHVzRGVzY3JpcHRpb24gKSAKLQl7Ci0JCXRoaXMuc3RhdHVzRGVzY3JpcHRpb24gPSBzdGF0dXNEZXNjcmlwdGlvbjsKLQkJIHRoaXMuZXhwZWN0ZWQgPSBudWxsOworICAgIHB1YmxpYyB2b2lkIHNldFN0YXR1cyAoIFN0cmluZyBzdGF0dXMgKQorICAgIHsKKyAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIHNldFN0YXR1c0Rlc2NyaXB0aW9uICggU3RyaW5nIHN0YXR1c0Rlc2NyaXB0aW9uICkKKyAgICB7CisgICAgICAgIHRoaXMuc3RhdHVzRGVzY3JpcHRpb24gPSBzdGF0dXNEZXNjcmlwdGlvbjsKKyAgICAgICAgIHRoaXMuZXhwZWN0ZWQgPSBudWxsOwogICAgICAgICAgICAgICAgIHRoaXMuYWN0dWFsPSBudWxsOwogCi0JfQorICAgIH0KIAogCi0JcHVibGljIHZvaWQgc2V0RXhwZWN0ZWQoIFN0cmluZyBleHBlY3RlZCApCisgICAgcHVibGljIHZvaWQgc2V0RXhwZWN0ZWQoIFN0cmluZyBleHBlY3RlZCApCiAgICAgICAgIHsKICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdGVkID0gZXhwZWN0ZWQ7CiAgICAgICAgIH0KQEAgLTk4LDMxICs5OCwzMSBAQAogICAgICAgICB9CiAKIAotCXB1YmxpYyBTdHJpbmcgZ2V0SWQoICkKLQl7Ci0JCXJldHVybiBpZDsKLQl9CisgICAgcHVibGljIFN0cmluZyBnZXRJZCggKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlkOworICAgIH0KIAotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSggKQotCXsKLQkJcmV0dXJuIG5hbWU7Ci0JfQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSggKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfQogCi0JcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbiggKQotCXsKLQkJcmV0dXJuIGRlc2NyaXB0aW9uOwotCX0KKyAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCApCisgICAgeworICAgICAgICByZXR1cm4gZGVzY3JpcHRpb247CisgICAgfQogCi0JcHVibGljIFN0cmluZyBnZXRTdGF0dXMoICkKLQl7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCXB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzRGVzY3JpcHRpb24oICkKLQl7Ci0JCXJldHVybiBzdGF0dXNEZXNjcmlwdGlvbjsKLQl9CisgICAgcHVibGljIFN0cmluZyBnZXRTdGF0dXMoICkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzRGVzY3JpcHRpb24oICkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0dXNEZXNjcmlwdGlvbjsKKyAgICB9CiAKLQlwdWJsaWMgU3RyaW5nIGdldEV4cGVjdGVkKCApCisgICAgcHVibGljIFN0cmluZyBnZXRFeHBlY3RlZCggKQogICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGVyL1Rlc3RTdWl0ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9UZXN0U3VpdGUuamF2YQppbmRleCA4MjMxY2JiLi4zNjZmMjhhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGVyL1Rlc3RTdWl0ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvVGVzdFN1aXRlLmphdmEKQEAgLTE3LDk0ICsxNyw5NCBAQAogcGFja2FnZSBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyOwogCiAvKioKLQlAQ2xhc3M6IFRlc3RTdWl0ZQotCUBEZXNjcmlwdGlvbjogQ2xhc3MgaG9sZGluZyBPbmUgVGVzdFN1aXRlIGluZm8uCi0JQEF1dGhvciA6IFJhbWVzaCBNYW5kYXZhCi0JQExhc3QgTW9kaWZpZWQgOiBCeSBSYW1lc2ggb24gMTAvMjQvMjAwMQotCUBMYXN0IE1vZGlmaWVkIDogQnkgUmFtZXNoIG9uIDEvMjAvMjAwMiAsIEZvciBwcmVzZXJ2aW5nIG9yZGVyIG9mIGVudHJ5IG9mIHRlc3RzIAkJdXNlZCBhIHNlcGFyYXRlIHRlc3RJZFZlY3RvcgorICAgIEBDbGFzczogVGVzdFN1aXRlCisgICAgQERlc2NyaXB0aW9uOiBDbGFzcyBob2xkaW5nIE9uZSBUZXN0U3VpdGUgaW5mby4KKyAgICBAQXV0aG9yIDogUmFtZXNoIE1hbmRhdmEKKyAgICBATGFzdCBNb2RpZmllZCA6IEJ5IFJhbWVzaCBvbiAxMC8yNC8yMDAxCisgICAgQExhc3QgTW9kaWZpZWQgOiBCeSBSYW1lc2ggb24gMS8yMC8yMDAyICwgRm9yIHByZXNlcnZpbmcgb3JkZXIgb2YgZW50cnkgb2YgdGVzdHMgICAgICAgICB1c2VkIGEgc2VwYXJhdGUgdGVzdElkVmVjdG9yCiAqLwogCiAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwogaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7CiAKLXB1YmxpYyBjbGFzcyBUZXN0U3VpdGUgCitwdWJsaWMgY2xhc3MgVGVzdFN1aXRlCiB7Ci0JcHJpdmF0ZSBTdHJpbmcgaWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLQlwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICBwcml2YXRlIFN0cmluZyBpZDsKKyAgICBwcml2YXRlIFN0cmluZyBuYW1lOworICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwogCi0JSGFzaHRhYmxlIHRlc3RIYXNoOwotCVZlY3RvciB0ZXN0SWRWZWN0b3I7CisgICAgSGFzaHRhYmxlIHRlc3RIYXNoOworICAgIFZlY3RvciB0ZXN0SWRWZWN0b3I7CiAKLQlwdWJsaWMgVGVzdFN1aXRlKCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzY3JpcHRpb24gKQotCXsKLQkJdGhpcy5pZCA9IGlkOwotCQl0aGlzLm5hbWU9IG5hbWU7Ci0JCXRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLQkJdGVzdEhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCXRlc3RJZFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLQl9CisgICAgcHVibGljIFRlc3RTdWl0ZSggU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2NyaXB0aW9uICkKKyAgICB7CisgICAgICAgIHRoaXMuaWQgPSBpZDsKKyAgICAgICAgdGhpcy5uYW1lPSBuYW1lOworICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgICAgIHRlc3RIYXNoID0gbmV3IEhhc2h0YWJsZSgpOworICAgICAgICB0ZXN0SWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7CisgICAgfQogCi0JcHVibGljIFRlc3RTdWl0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSApCi0JewotCQl0aGlzLmlkID0gaWQ7Ci0JCXRoaXMubmFtZSA9IG5hbWU7Ci0JCXRoaXMuZGVzY3JpcHRpb249UmVwb3J0ZXJDb25zdGFudHMuTkE7Ci0JCXRlc3RIYXNoID0gbmV3IEhhc2h0YWJsZSgpOwotCQl0ZXN0SWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0JfQorICAgIHB1YmxpYyBUZXN0U3VpdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUgKQorICAgIHsKKyAgICAgICAgdGhpcy5pZCA9IGlkOworICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgICAgICB0aGlzLmRlc2NyaXB0aW9uPVJlcG9ydGVyQ29uc3RhbnRzLk5BOworICAgICAgICB0ZXN0SGFzaCA9IG5ldyBIYXNodGFibGUoKTsKKyAgICAgICAgdGVzdElkVmVjdG9yID0gbmV3IFZlY3RvcigpOworICAgIH0KIAotCXB1YmxpYyBUZXN0U3VpdGUgKFN0cmluZyBpZCApCi0JewotCQl0aGlzLmlkID0gaWQ7Ci0JCXRoaXMubmFtZSA9IFJlcG9ydGVyQ29uc3RhbnRzLk5BOwotCQl0aGlzLmRlc2NyaXB0aW9uPVJlcG9ydGVyQ29uc3RhbnRzLk5BOwotCQl0ZXN0SGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLQkJdGVzdElkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotCX0KKyAgICBwdWJsaWMgVGVzdFN1aXRlIChTdHJpbmcgaWQgKQorICAgIHsKKyAgICAgICAgdGhpcy5pZCA9IGlkOworICAgICAgICB0aGlzLm5hbWUgPSBSZXBvcnRlckNvbnN0YW50cy5OQTsKKyAgICAgICAgdGhpcy5kZXNjcmlwdGlvbj1SZXBvcnRlckNvbnN0YW50cy5OQTsKKyAgICAgICAgdGVzdEhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgIHRlc3RJZFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKKyAgICB9CiAKLQlwdWJsaWMgU3RyaW5nIGdldElkKCApCi0JewotCQlyZXR1cm4gaWQ7Ci0JfQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0SWQoICkKKyAgICB7CisgICAgICAgIHJldHVybiBpZDsKKyAgICB9CiAKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoICkKLQl7Ci0JCXJldHVybiBuYW1lOwotCX0KKyAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoICkKKyAgICB7CisgICAgICAgIHJldHVybiBuYW1lOworICAgIH0KIAotCXB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oICkKLQl7Ci0JCXJldHVybiBkZXNjcmlwdGlvbjsKLQl9CisgICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbiggKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOworICAgIH0KIAotCXB1YmxpYyBWZWN0b3IgZ2V0VGVzdElkVmVjdG9yKCApCi0JewotCQlyZXR1cm4gdGVzdElkVmVjdG9yOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRUZXN0SWRWZWN0b3IoIFZlY3RvciB0aWRWZWN0b3IpCi0JewotCQl0ZXN0SWRWZWN0b3I9IHRpZFZlY3RvcjsKLQl9CisgICAgcHVibGljIFZlY3RvciBnZXRUZXN0SWRWZWN0b3IoICkKKyAgICB7CisgICAgICAgIHJldHVybiB0ZXN0SWRWZWN0b3I7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIHNldFRlc3RJZFZlY3RvciggVmVjdG9yIHRpZFZlY3RvcikKKyAgICB7CisgICAgICAgIHRlc3RJZFZlY3Rvcj0gdGlkVmVjdG9yOworICAgIH0KIAotCXB1YmxpYyBIYXNodGFibGUgZ2V0VGVzdEhhc2goICkKLQl7Ci0JCXJldHVybiB0ZXN0SGFzaDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0VGVzdEhhc2goIEhhc2h0YWJsZSB0ZXN0SGFzaCApCi0JewotCQl0aGlzLnRlc3RIYXNoPSB0ZXN0SGFzaDsKLQl9CisgICAgcHVibGljIEhhc2h0YWJsZSBnZXRUZXN0SGFzaCggKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRlc3RIYXNoOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBzZXRUZXN0SGFzaCggSGFzaHRhYmxlIHRlc3RIYXNoICkKKyAgICB7CisgICAgICAgIHRoaXMudGVzdEhhc2g9IHRlc3RIYXNoOworICAgIH0KIAotCXB1YmxpYyB2b2lkIGFkZFRlc3QoIFRlc3QgbXlUZXN0ICkKLQl7Ci0JCWlmICggdGVzdEhhc2gucHV0KCBteVRlc3QuZ2V0SWQoKS50cmltKCksIG15VGVzdCkgIT0gbnVsbCApIAotCQl7Ci0JCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yIDogVGVzdCB3YXMgYWRkZWQgYmVmb3JlIG9ubHkuIFN0aWxsIGFsbG93aW5nLiBPbGQgdmFsdWUgb2YgdGhlIHRlc3Qgd2lsbCBiZSBvdmVycmlkZGVuIiApOwotCQl9Ci0JCQkKLQkJdGVzdElkVmVjdG9yLmFkZEVsZW1lbnQoIG15VGVzdC5nZXRJZCgpLnRyaW0oKSApOwotCX0JCisgICAgcHVibGljIHZvaWQgYWRkVGVzdCggVGVzdCBteVRlc3QgKQorICAgIHsKKyAgICAgICAgaWYgKCB0ZXN0SGFzaC5wdXQoIG15VGVzdC5nZXRJZCgpLnRyaW0oKSwgbXlUZXN0KSAhPSBudWxsICkKKyAgICAgICAgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciA6IFRlc3Qgd2FzIGFkZGVkIGJlZm9yZSBvbmx5LiBTdGlsbCBhbGxvd2luZy4gT2xkIHZhbHVlIG9mIHRoZSB0ZXN0IHdpbGwgYmUgb3ZlcnJpZGRlbiIgKTsKKyAgICAgICAgfQorCisgICAgICAgIHRlc3RJZFZlY3Rvci5hZGRFbGVtZW50KCBteVRlc3QuZ2V0SWQoKS50cmltKCkgKTsKKyAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9idWlsZC54bWwKaW5kZXggMjYyODNlNi4uZmU5MTk4ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9idWlsZC54bWwKQEAgLTI1LDI4ICsyNSwyOCBAQAogJnNldHVwLXByb3BzOwogCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbixpbml0LGphciIvPgotICAgICAgICAKKwogICA8dGFyZ2V0IG5hbWU9ImluaXQiPgogICAgIDx0c3RhbXAvPgogICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmRlc3R9Ii8+Ci0gICAgCisKICAgPC90YXJnZXQ+Ci0gIAotICAgCisKKwogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJpbml0Ij4KICAgPGphdmFjCi0JCWRlc3RkaXI9IiR7YnVpbGQuZGVzdH0iCi0JCWNsYXNzcGF0aD0iJHtjbGFzc3BhdGh9IgorICAgICAgICBkZXN0ZGlyPSIke2J1aWxkLmRlc3R9IgorICAgICAgICBjbGFzc3BhdGg9IiR7Y2xhc3NwYXRofSIKICAgICAgICAgICAgICAgICBzcmNkaXI9IiR7YmFzZWRpcn0iCiAgICAgICAgICAgICAgICAgZGVidWc9Im9uIgogICAgIC8+Ci0gICAgCisKICAgPC90YXJnZXQ+Ci0gIAotICAgCisKKwogICA8dGFyZ2V0IG5hbWU9ImphciIgZGVwZW5kcz0iYnVpbGQiPgogICA8amFyIGRlc3RmaWxlPSIke3JlcG9ydGVyLmphcn0iPgotCTxmaWxlc2V0IGRpcj0iJHtidWlsZC5kZXN0fSIvPgorICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5kZXN0fSIvPgogICA8L2phcj4KICAgPC90YXJnZXQ+CiAKQEAgLTU1LDcgKzU1LDcgQEAKICAgIDxhcmcgbGluZT0iY3ZmICR7cmVwb3J0ZXIuamFyfSAtQyAke2J1aWxkLmRlc3R9IC4iIC8+CiAgICA8L2V4ZWM+CiAtLT4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuZGVzdH0iLz4KICAgPC90YXJnZXQ+CkBAIC02Niw2ICs2Niw2IEBACiAgIDxlY2hvIG1lc3NhZ2U9ImFudCBqYXIgICAgICB3aWxsIGNvbXBpbGUgYW5kIHB1dCByZXBvcnRlci5qYXIgYXQgJEFQU19IT01FL2xpYiIvPgogICA8L3RhcmdldD4KIAotICAgICAgCisKIDwvcHJvamVjdD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXN1bHRzL1Jlc3VsdHNQcm9kdWNlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXN1bHRzL1Jlc3VsdHNQcm9kdWNlci5qYXZhCmluZGV4IDI1Mzc0NTIuLjExZTliNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVzdWx0cy9SZXN1bHRzUHJvZHVjZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3Jlc3VsdHMvUmVzdWx0c1Byb2R1Y2VyLmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVzYWdlOiBqYXZhIFJlc3VsdFByb2R1Y2VyIGZpbGUiKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgCisKICAgICAgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oYXJnc1syXSk7CiAgICAgICAgICAgICBGaWxlQ2hhbm5lbCBjaGFubmVsID0gb3V0cHV0U3RyZWFtLmdldENoYW5uZWwoKTsKICAgICAgICAgICAgIENoYXJCdWZmZXIgYnVmZmVyID0gQ2hhckJ1ZmZlci5hbGxvY2F0ZSg4MTkyKTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgICAgIGludCBwYXNzID0gMDsKICAgICAgICAgICAgIGludCBmYWlsID0gMDsKICAgICAgICAgICAgIHdoaWxlKCB0b2tlbnMuaGFzTW9yZUVsZW1lbnRzKCkgKXsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vucy5uZXh0VG9rZW4oKTsgCisgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnMubmV4dFRva2VuKCk7CiAgICAgICAgICAgICAgICAgY29tcGlsZSh0b2tlbik7CiAKICAgICAgICAgICAgICAgICBjb3VudCA9IGNvdW50T2NjdXJhbmNlKGNoYXJCdWZmZXIpOwpAQCAtNjcsOCArNjcsOCBAQAogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGZhaWwgPSBjb3VudDsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IAotICAgICAgICAgICAgYnVmZmVyLnB1dCgiRElEIE5PVCBSVU49ICAgIiAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ1ZmZlci5wdXQoIkRJRCBOT1QgUlVOPSAgICIKICAgICAgICAgICAgICAgICAgICAgICsgIChuZXcgSW50ZWdlcihhcmdzWzFdKS5pbnRWYWx1ZSgpIC0gKHBhc3MgKyBmYWlsKSkrICJcbiIpOwogICAgICAgICAgICAgYnVmZmVyLnB1dCgiLS0tLS0tLS0tLS0tICA9PT09PT09PT1cbiIpOwogICAgICAgICAgICAgYnVmZmVyLnB1dCgiVG90YWwgRXhwZWN0ZWQ9IiArIGFyZ3NbMV0pOwpAQCAtODYsNyArODYsNyBAQAogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIAogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgY29tcGlsZShTdHJpbmcgcGF0KSB7CiAgICAgICAgIHRyeSB7CkBAIC0xMDAsMTAgKzEwMCwxMCBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50T2NjdXJhbmNlKENoYXJCdWZmZXIgY2IpIHsKICAgICAgICAgTWF0Y2hlciBsbSA9IGxpbmVQYXR0ZXJuLm1hdGNoZXIoY2IpOwotICAgICAgICBNYXRjaGVyIHBtID0gbnVsbDsJCQkKKyAgICAgICAgTWF0Y2hlciBwbSA9IG51bGw7CiAgICAgICAgIGludCBjb3VudCA9IDA7CiAgICAgICAgIHdoaWxlIChsbS5maW5kKCkpIHsKLSAgICAgICAgICAgIENoYXJTZXF1ZW5jZSBjcyA9IGxtLmdyb3VwKCk7IAkKKyAgICAgICAgICAgIENoYXJTZXF1ZW5jZSBjcyA9IGxtLmdyb3VwKCk7CiAgICAgICAgICAgICBpZiAocG0gPT0gbnVsbCkKICAgICAgICAgICAgICAgICBwbSA9IHBhdHRlcm4ubWF0Y2hlcihjcyk7CiAgICAgICAgICAgICBlbHNlCkBAIC0xMTgsNyArMTE4LDcgQEAKICAgICAgICAgcmV0dXJuIGNvdW50OwogICAgIH0KIAotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgQ2hhckJ1ZmZlciBsb2FkRmlsZShGaWxlIGYpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIEZpbGVJbnB1dFN0cmVhbSBmaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGYpOwogICAgICAgICBGaWxlQ2hhbm5lbCBmYyA9IGZpcy5nZXRDaGFubmVsKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci9idWlsZC54bWwKaW5kZXggNDlhMjIyNC4uYTA5MTAyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL2J1aWxkLnhtbApAQCAtMjQsNyArMjQsNyBAQAogCiA8cHJvamVjdCBuYW1lPSJ3ZWJydW5uZXIiIGJhc2VkaXI9Ii4iIGRlZmF1bHQ9ImphciI+CiAgICAgICAmc2V0dXAtcHJvcHM7Ci0gICAgICAKKwogICAgICA8cHJvcGVydHkgbmFtZT0icHJveHkuc3JjIiB2YWx1ZT0icHJveHkiLz4KICAgICAgPHByb3BlcnR5IGVudmlyb25tZW50PSJteWVudiIgLz4KICAgICAgPHByb3BlcnR5IG5hbWU9IndlYnRlc3Quc3JjIiB2YWx1ZT0id2VidGVzdCIvPgpAQCAtMzMsNDggKzMzLDQ4IEBACiAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZC5kZXN0IiB2YWx1ZT0iYnVpbGQiLz4KICAgICAgPHByb3BlcnR5IG5hbWU9ImphdmEuY2xhc3NwYXRoIiB2YWx1ZT0iJHtKQVZBX0hPTUV9L2xpYi9kdC5qYXI6JHtKQVZBX0hPTUV9L2xpYi90b29scy5qYXI6JHtidWlsZC5kZXN0fToke215ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIi8+CiAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzZXJ2ZXIuaG9zdCIgdmFsdWU9ImRzaW5naCIvPgotICAgICAKKwogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY29tcGlsZS13ZWJ0ZXN0LHJ1bi13ZWJ0ZXN0Ij4KICAgICAgICAgPCEtLSBXUklURU1FIC0tPgogICA8L3RhcmdldD4KLSAgIAotICAKKworCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1wcm94eSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwhLS0gQ29tcGlsZSB0aGUgamF2YSBjb2RlIGZyb20gJHtzcmN9IGludG8gJHtidWlsZH0gLS0+CiAgICAgPGVjaG8gbWVzc2FnZT0iQ29tcGlsaW5nIFByb3h5IFNlcnZlciBzb3VyY2UgZmlsZXMgKCR7bmFtZX0pIC4uLiIvPgogICAgIDxta2RpciBkaXI9IiR7YnVpbGQuZGVzdH0iLz4KICAgICA8amF2YWMKLQkJc3JjZGlyPSIke3Byb3h5LnNyY30iCi0JCWRlc3RkaXI9IiR7YnVpbGQuZGVzdH0iCi0JCWNsYXNzcGF0aD0iJHtqYXZhLmNsYXNzcGF0aH0iCisgICAgICAgIHNyY2Rpcj0iJHtwcm94eS5zcmN9IgorICAgICAgICBkZXN0ZGlyPSIke2J1aWxkLmRlc3R9IgorICAgICAgICBjbGFzc3BhdGg9IiR7amF2YS5jbGFzc3BhdGh9IgogICAgICAgICAgICAgICAgIGRlYnVnPSJvbiIKLQkJCisKICAgICAvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjb21waWxlLXdlYnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8IS0tIENvbXBpbGUgdGhlIGphdmEgY29kZSBmcm9tICR7c3JjfSBpbnRvICR7YnVpbGR9IC0tPgogICAgIDxlY2hvIG1lc3NhZ2U9IkNvbXBpbGluZyBQcm94eSBTZXJ2ZXIgc291cmNlIGZpbGVzICgke25hbWV9KSAuLi4iLz4KICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmRlc3R9Ii8+CiAgICAgPGphdmFjCi0JCXNyY2Rpcj0iJHt3ZWJ0ZXN0LnNyY30iCi0JCWRlc3RkaXI9IiR7YnVpbGQuZGVzdH0iCi0JCWNsYXNzcGF0aD0iJHtqYXZhLmNsYXNzcGF0aH0iCisgICAgICAgIHNyY2Rpcj0iJHt3ZWJ0ZXN0LnNyY30iCisgICAgICAgIGRlc3RkaXI9IiR7YnVpbGQuZGVzdH0iCisgICAgICAgIGNsYXNzcGF0aD0iJHtqYXZhLmNsYXNzcGF0aH0iCiAgICAgICAgICAgICAgICAgZGVidWc9Im9uIgotCQkKKwogICAgIC8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtdG9tY2F0dGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwhLS0gQ29tcGlsZSB0aGUgamF2YSBjb2RlIGZyb20gJHtzcmN9IGludG8gJHtidWlsZH0gLS0+CiAgICAgPGVjaG8gbWVzc2FnZT0iQ29tcGlsaW5nIFRvbWNhdCB0ZXN0IHV0aWwgc291cmNlIGZpbGVzIC4uLiIvPgogICAgIDxta2RpciBkaXI9IiR7YnVpbGQuZGVzdH0iLz4KICAgICA8amF2YWMKLQkJc3JjZGlyPSIke3RvbWNhdHRlc3Quc3JjfSIKLQkJZGVzdGRpcj0iJHtidWlsZC5kZXN0fSIKLQkJY2xhc3NwYXRoPSIke2phdmEuY2xhc3NwYXRofSIKKyAgICAgICAgc3JjZGlyPSIke3RvbWNhdHRlc3Quc3JjfSIKKyAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5kZXN0fSIKKyAgICAgICAgY2xhc3NwYXRoPSIke2phdmEuY2xhc3NwYXRofSIKICAgICAgICAgICAgICAgICBkZWJ1Zz0ib24iCi0JCQorCiAgICAgLz4KICAgPC90YXJnZXQ+CiAKQEAgLTgzLDExICs4MywxMSBAQAogICAgIDxlY2hvIG1lc3NhZ2U9IkNvbXBpbGluZyBHcml6emx5IHRlc3Qgc291cmNlIGZpbGVzICgke25hbWV9KSAuLi4iLz4KICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmRlc3R9Ii8+CiAgICAgPGphdmFjCi0JCXNyY2Rpcj0iJHtodHRwMnRlc3Quc3JjfSIKLQkJZGVzdGRpcj0iJHtidWlsZC5kZXN0fSIKLQkJY2xhc3NwYXRoPSIke2phdmEuY2xhc3NwYXRofToke215ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy9udWNsZXVzLWdyaXp6bHktYWxsLmphciIKKyAgICAgICAgc3JjZGlyPSIke2h0dHAydGVzdC5zcmN9IgorICAgICAgICBkZXN0ZGlyPSIke2J1aWxkLmRlc3R9IgorICAgICAgICBjbGFzc3BhdGg9IiR7amF2YS5jbGFzc3BhdGh9OiR7bXllbnYuUzFBU19IT01FfS9tb2R1bGVzL251Y2xldXMtZ3JpenpseS1hbGwuamFyIgogICAgICAgICAgICAgICAgIGRlYnVnPSJvbiIKLQkJCisKICAgICAvPgogCiAgIDwvdGFyZ2V0PgpAQCAtOTYsMzQgKzk2LDM0IEBACiAgICAgPCEtLSBDb21waWxlIHRoZSBqYXZhIGNvZGUgZnJvbSAke3NyY30gaW50byAke2J1aWxkfSAtLT4KICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIFdlYiBUZXN0Ii8+CiAgICAgPGphdmEKLQkJCWZvcms9Im9uIgotCQkJY2xhc3NwYXRoPSIke2phdmEuY2xhc3NwYXRofToke2J1aWxkLmRlc3R9IgotCQkJY2xhc3NuYW1lPSJjb20uc3VuLmVqdGUuY2NsLndlYnJ1bm5lci53ZWJ0ZXN0LldlYlRlc3QiPgorICAgICAgICAgICAgZm9yaz0ib24iCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7amF2YS5jbGFzc3BhdGh9OiR7YnVpbGQuZGVzdH0iCisgICAgICAgICAgICBjbGFzc25hbWU9ImNvbS5zdW4uZWp0ZS5jY2wud2VicnVubmVyLndlYnRlc3QuV2ViVGVzdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICA8YXJnIHZhbHVlPSJzY3JpcHQudHh0Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke3NlcnZlci5ob3N0fSIvPgotICAgIAkJCisKICAgICA8L2phdmE+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InJ1bi1wcm94eSIgZGVwZW5kcz0iY29tcGlsZS1wcm94eSI+CiAgICAgPCEtLSBDb21waWxlIHRoZSBqYXZhIGNvZGUgZnJvbSAke3NyY30gaW50byAke2J1aWxkfSAtLT4KICAgICA8ZWNobyBtZXNzYWdlPSJTdGFydGluZyB3ZWJzZXJ2ZXIgYXQgcG9ydCAxMjM1Ii8+CiAgICAgPGphdmEKLQkJCWZvcms9Im9uIgotCQkJY2xhc3NwYXRoPSIke2phdmEuY2xhc3NwYXRofToke2J1aWxkLmRlc3R9IgotCQkJY2xhc3NuYW1lPSJjb20uc3VuLmVqdGUuY2NsLndlYnJ1bm5lci5wcm94eS5odHRwZCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAJCQorICAgICAgICAgICAgZm9yaz0ib24iCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7amF2YS5jbGFzc3BhdGh9OiR7YnVpbGQuZGVzdH0iCisgICAgICAgICAgICBjbGFzc25hbWU9ImNvbS5zdW4uZWp0ZS5jY2wud2VicnVubmVyLnByb3h5Lmh0dHBkIj4KKworCiAgICAgPC9qYXZhPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmRlc3R9Ii8+CiAgIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImphciIgZGVwZW5kcz0iY29tcGlsZS1wcm94eSxjb21waWxlLXdlYnRlc3QsY29tcGlsZS10b21jYXR0ZXN0LGNvbXBpbGUtaHR0cDJ0ZXN0Ij4KICAgPGphciBkZXN0ZmlsZT0iJHtteWVudi5BUFNfSE9NRX0vbGliL3dlYnRlc3QuamFyIj4KLQk8ZmlsZXNldCBkaXI9IiR7YnVpbGQuZGVzdH0iLz4KKyAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuZGVzdH0iLz4KICAgPC9qYXI+CiAgIDwvdGFyZ2V0PgogCkBAIC0xMzgsNSArMTM4LDUgQEAKICAgICA8L2VjaG8+CiAgIDwvdGFyZ2V0PgogCi0gIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci9odHRwMnRlc3Qvb3JnL2dsYXNzZmlzaC9ncml6emx5L3Rlc3QvaHR0cDIvSHR0cENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvaHR0cDJ0ZXN0L29yZy9nbGFzc2Zpc2gvZ3JpenpseS90ZXN0L2h0dHAyL0h0dHBDbGllbnQuamF2YQppbmRleCA0MzgxMjRjLi45OGI1M2I4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci9odHRwMnRlc3Qvb3JnL2dsYXNzZmlzaC9ncml6emx5L3Rlc3QvaHR0cDIvSHR0cENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL2h0dHAydGVzdC9vcmcvZ2xhc3NmaXNoL2dyaXp6bHkvdGVzdC9odHRwMi9IdHRwQ2xpZW50LmphdmEKQEAgLTczLDcgKzczLDcgQEAKIAogICAgIHByaXZhdGUgSHR0cENsaWVudCgpIHsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2V0SG9zdChTdHJpbmcgaG9zdCkgewogICAgICAgICB0aGlzLmhvc3QgPSBob3N0OwogICAgIH0KQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICBmaW5hbCBGaWx0ZXJDaGFpbkJ1aWxkZXIgZmlsdGVyQ2hhaW5CdWlsZGVyID0KICAgICAgICAgICAgICAgICBjcmVhdGVDbGllbnRGaWx0ZXJDaGFpbkFzQnVpbGRlcihzZWN1cmUpOwogICAgICAgICBmaWx0ZXJDaGFpbkJ1aWxkZXIuYWRkKG5ldyBDbGllbnRBZ2dyZWdhdG9yRmlsdGVyKHJlc3VsdFF1ZXVlKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGZpbmFsIFRDUE5JT1RyYW5zcG9ydCBjbGllbnRUcmFuc3BvcnQgPSBUQ1BOSU9UcmFuc3BvcnRCdWlsZGVyLm5ld0luc3RhbmNlKCkuYnVpbGQoKTsKICAgICAgICAgZmluYWwgRmlsdGVyQ2hhaW4gY2xpZW50RmlsdGVyQ2hhaW4gPSBmaWx0ZXJDaGFpbkJ1aWxkZXIuYnVpbGQoKTsKICAgICAgICAgY2xpZW50VHJhbnNwb3J0LnNldFByb2Nlc3NvcihjbGllbnRGaWx0ZXJDaGFpbik7CkBAIC0xNDMsMTYgKzE0MywxNiBAQAogICAgIHByaXZhdGUgRmlsdGVyQ2hhaW5CdWlsZGVyIGNyZWF0ZUNsaWVudEZpbHRlckNoYWluQXNCdWlsZGVyKAogICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBpc1NlY3VyZSwKICAgICAgICAgICAgIGZpbmFsIEZpbHRlci4uLiBjbGllbnRGaWx0ZXJzKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgZmluYWwgRmlsdGVyQ2hhaW5CdWlsZGVyIGJ1aWxkZXIgPSBGaWx0ZXJDaGFpbkJ1aWxkZXIuc3RhdGVsZXNzKCkKICAgICAgICAgICAgICAuYWRkKG5ldyBUcmFuc3BvcnRGaWx0ZXIoKSk7CiAgICAgICAgIGlmIChpc1NlY3VyZSkgewogICAgICAgICAgICAgYnVpbGRlci5hZGQobmV3IFNTTEZpbHRlcihudWxsLCBnZXRDbGllbnRTU0xFbmdpbmVDb25maWd1cmF0b3IoKSkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGJ1aWxkZXIuYWRkKG5ldyBIdHRwQ2xpZW50RmlsdGVyKCkpOwogICAgICAgICBidWlsZGVyLmFkZChuZXcgSHR0cDJDbGllbnRGaWx0ZXIoSHR0cDJDb25maWd1cmF0aW9uLmJ1aWxkZXIoKS5idWlsZCgpKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChjbGllbnRGaWx0ZXJzICE9IG51bGwpIHsKICAgICAgICAgICAgIGZvciAoRmlsdGVyIGNsaWVudEZpbHRlciA6IGNsaWVudEZpbHRlcnMpIHsKICAgICAgICAgICAgICAgICBpZiAoY2xpZW50RmlsdGVyICE9IG51bGwpIHsKQEAgLTE2MCw3ICsxNjAsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gYnVpbGRlcjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL2h0dHAydGVzdC9vcmcvZ2xhc3NmaXNoL2dyaXp6bHkvdGVzdC9odHRwMi9IdHRwUmVxdWVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvaHR0cDJ0ZXN0L29yZy9nbGFzc2Zpc2gvZ3JpenpseS90ZXN0L2h0dHAyL0h0dHBSZXF1ZXN0LmphdmEKaW5kZXggM2ViZmQzMS4uYTg1MTA1YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvaHR0cDJ0ZXN0L29yZy9nbGFzc2Zpc2gvZ3JpenpseS90ZXN0L2h0dHAyL0h0dHBSZXF1ZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvaHR0cDJ0ZXN0L29yZy9nbGFzc2Zpc2gvZ3JpenpseS90ZXN0L2h0dHAyL0h0dHBSZXF1ZXN0LmphdmEKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIEh0dHBSZXF1ZXN0IGJ1aWxkKCkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBIdHRwUmVxdWVzdChyZXFQYWNrZXRCdWlsZGVyLmJ1aWxkKCksIAorICAgICAgICAgICAgcmV0dXJuIG5ldyBIdHRwUmVxdWVzdChyZXFQYWNrZXRCdWlsZGVyLmJ1aWxkKCksCiAgICAgICAgICAgICAgICAgY2hhckVuY29kaW5nLCBjb250ZW50LCB0cmFpbGVyRmllbGRzLCBjb25uZWN0aW9uKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL3Byb3h5L0h0dHBSZXNwb25zZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvcHJveHkvSHR0cFJlc3BvbnNlLmphdmEKaW5kZXggODVjMmI3Mi4uM2U2NzA2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvcHJveHkvSHR0cFJlc3BvbnNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvcHJveHkvSHR0cFJlc3BvbnNlLmphdmEKQEAgLTIwLDY5ICsyMCw2OSBAQAogCiAvKgogICoKLSogVGhpcyBjbGFzcyBpcyBhIHdyYXBwZXIgYXJvdW5kIGV2ZXJ5dGhpbmcgYXNzb2NpYXRlZCB3aXRoIGEgcmVwbHkgZnJvbSBhbiBIVFRQIHNlcnZlci5UaGlzIGlzIHVzZWQgYnkgCisqIFRoaXMgY2xhc3MgaXMgYSB3cmFwcGVyIGFyb3VuZCBldmVyeXRoaW5nIGFzc29jaWF0ZWQgd2l0aCBhIHJlcGx5IGZyb20gYW4gSFRUUCBzZXJ2ZXIuVGhpcyBpcyB1c2VkIGJ5CiAgKnRoZSBwcm94eSBwYXJ0IG9mIGh0cHBkIGNsYXNzLgogICoKICAqLwogcHVibGljIGNsYXNzIEh0dHBSZXNwb25zZQogewotCWludCBzdGF0dXNDb2RlOwotCVN0cmluZyByZWFzb25QaHJhc2U7Ci0JTWltZUhlYWRlciBtaDsKLQlzdGF0aWMgU3RyaW5nIENSTEY9IlxyXG4iOwotCQotCS8qCisgICAgaW50IHN0YXR1c0NvZGU7CisgICAgU3RyaW5nIHJlYXNvblBocmFzZTsKKyAgICBNaW1lSGVhZGVyIG1oOworICAgIHN0YXRpYyBTdHJpbmcgQ1JMRj0iXHJcbiI7CisKKyAgICAvKgogICAgICAgICAgKldoZW4gYSByZXF1ZXN0IGlzIHNlbnQgdG8gSFRUUCBzZXJ2ZXIsIGl0IHJlc3BvbmRzIHdpdGggYSAgc3RhdHVzIGNvZGUsIHdoaWNoIGlzIHN0b3JlZCBpbiBzdGF0dXNDb2RlLAogICAgICAgICAgKmFuZCBhIHRleHR1YWwgZXF1aXZhbGVudCx3aGljaCBpcyBzdG9yZWQgaW4gcmVhc29uUGhyYXNlLlRoaXMgc2luZ2xlIGxpbmUgcmVzcG9uc2UgaXMgZm9sbG93ZWQgYnkgYSBNSU1FIGhlYWRlci5NaW1lSGVhZGVyIGNsYXNzIGlzIHVzZWQKICAgICAgICAgICp0byBwYXJzZSB0aGlzIHN0cmluZy5UaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgY29uc3RydWN0b3Igb2YgSHR0cFJlc3BvbnNlLgotCSAqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKKyAgICAgKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCiAgICAgICAgICAqQENvbXBhbnkgU3VuIE1pY3Jvc3lzdGVtcyBJbmMuCi0gICAgICAgICBAcGFyYW0JCXJlcXVlc3QJU3RyaW5nIHJlcXVlc3QKLQkqLwotCXB1YmxpYyB2b2lkIHBhcnNlKFN0cmluZyByZXF1ZXN0KQotCXsKLQkJaW50IGZzcD1yZXF1ZXN0LmluZGV4T2YoJyAnKTsKLQkJaW50IG5zcD1yZXF1ZXN0LmluZGV4T2YoJyAnLGZzcCsxKTsKLQkJaW50IGVvbD1yZXF1ZXN0LmluZGV4T2YoJ1xuJyk7Ci0JCVN0cmluZyBwcm90b2NvbD1yZXF1ZXN0LnN1YnN0cmluZygwLGZzcCk7Ci0JCXN0YXR1c0NvZGU9SW50ZWdlci5wYXJzZUludChyZXF1ZXN0LnN1YnN0cmluZyhmc3ArMSxuc3ApKTsKLQkJcmVhc29uUGhyYXNlPXJlcXVlc3Quc3Vic3RyaW5nKG5zcCsxLGVvbCk7Ci0JCVN0cmluZyByYXdfbWltZV9oZWFkZXI9cmVxdWVzdC5zdWJzdHJpbmcoZW9sKzEpOwotCQltaD1uZXcgTWltZUhlYWRlcihyYXdfbWltZV9oZWFkZXIpOwotCX0KKyAgICAgICAgIEBwYXJhbSAgICAgICAgcmVxdWVzdCAgICBTdHJpbmcgcmVxdWVzdAorICAgICovCisgICAgcHVibGljIHZvaWQgcGFyc2UoU3RyaW5nIHJlcXVlc3QpCisgICAgeworICAgICAgICBpbnQgZnNwPXJlcXVlc3QuaW5kZXhPZignICcpOworICAgICAgICBpbnQgbnNwPXJlcXVlc3QuaW5kZXhPZignICcsZnNwKzEpOworICAgICAgICBpbnQgZW9sPXJlcXVlc3QuaW5kZXhPZignXG4nKTsKKyAgICAgICAgU3RyaW5nIHByb3RvY29sPXJlcXVlc3Quc3Vic3RyaW5nKDAsZnNwKTsKKyAgICAgICAgc3RhdHVzQ29kZT1JbnRlZ2VyLnBhcnNlSW50KHJlcXVlc3Quc3Vic3RyaW5nKGZzcCsxLG5zcCkpOworICAgICAgICByZWFzb25QaHJhc2U9cmVxdWVzdC5zdWJzdHJpbmcobnNwKzEsZW9sKTsKKyAgICAgICAgU3RyaW5nIHJhd19taW1lX2hlYWRlcj1yZXF1ZXN0LnN1YnN0cmluZyhlb2wrMSk7CisgICAgICAgIG1oPW5ldyBNaW1lSGVhZGVyKHJhd19taW1lX2hlYWRlcik7CisgICAgfQogCi0JLyoqCi0JKiBEZWZhdWx0IENvbnN0cnVjdG9yLlRha2VzIGEgcmF3IHJlcXVlc3QgYXMgcGFyYW1ldGVyIGFuZCBjYWxscyBwYXJzZSB0byBjcmVhdGUgTWltZUhlYWRlci4KLQkqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKLQkqIAotCSovCi0JSHR0cFJlc3BvbnNlKFN0cmluZyByZXF1ZXN0KQotCXsKLQkJcGFyc2UocmVxdWVzdCk7Ci0JfQorICAgIC8qKgorICAgICogRGVmYXVsdCBDb25zdHJ1Y3Rvci5UYWtlcyBhIHJhdyByZXF1ZXN0IGFzIHBhcmFtZXRlciBhbmQgY2FsbHMgcGFyc2UgdG8gY3JlYXRlIE1pbWVIZWFkZXIuCisgICAgKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCisgICAgKgorICAgICovCisgICAgSHR0cFJlc3BvbnNlKFN0cmluZyByZXF1ZXN0KQorICAgIHsKKyAgICAgICAgcGFyc2UocmVxdWVzdCk7CisgICAgfQogCi0JLyoqCi0JKiBDb25zdHJ1Y3RvciB3aXRoIHRocmVlIHBhcmFtZXRlcnMKLQkqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKLQkqIAotCSogQHBhcmFtCQljb2RlCUludGVnZXIKLQkqIEBwYXJhbQkJcmVhc29uIAlUaGUgcmVhc29uIFN0cmluZwotCSogQHBhcmFtCQltCQlNaW1laGVhZGVyCQotCSovCi0JSHR0cFJlc3BvbnNlKGludCBjb2RlLFN0cmluZyByZWFzb24sTWltZUhlYWRlciBtKQotCXsKLQkJc3RhdHVzQ29kZT1jb2RlOwotCQlyZWFzb25QaHJhc2U9cmVhc29uOwotCQltaD1tOwotCX0KLQkKLQkvKioKLQkqICAKLQkqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKLQkqIEByZXR1cm4gICAgICAgU3RyaW5nCi0JKi8KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLQl7Ci0JCXJldHVybiAiSFRUUC8xLjAgIisgc3RhdHVzQ29kZSArIiAiICsgcmVhc29uUGhyYXNlICsgQ1JMRiArIG1oICsgQ1JMRjsKKyAgICAvKioKKyAgICAqIENvbnN0cnVjdG9yIHdpdGggdGhyZWUgcGFyYW1ldGVycworICAgICogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQorICAgICoKKyAgICAqIEBwYXJhbSAgICAgICAgY29kZSAgICBJbnRlZ2VyCisgICAgKiBAcGFyYW0gICAgICAgIHJlYXNvbiAgICAgVGhlIHJlYXNvbiBTdHJpbmcKKyAgICAqIEBwYXJhbSAgICAgICAgbSAgICAgICAgTWltZWhlYWRlcgorICAgICovCisgICAgSHR0cFJlc3BvbnNlKGludCBjb2RlLFN0cmluZyByZWFzb24sTWltZUhlYWRlciBtKQorICAgIHsKKyAgICAgICAgc3RhdHVzQ29kZT1jb2RlOworICAgICAgICByZWFzb25QaHJhc2U9cmVhc29uOworICAgICAgICBtaD1tOworICAgIH0KKworICAgIC8qKgorICAgICoKKyAgICAqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKKyAgICAqIEByZXR1cm4gICAgICAgU3RyaW5nCisgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKKyAgICB7CisgICAgICAgIHJldHVybiAiSFRUUC8xLjAgIisgc3RhdHVzQ29kZSArIiAiICsgcmVhc29uUGhyYXNlICsgQ1JMRiArIG1oICsgQ1JMRjsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci9wcm94eS9Mb2dNZXNzYWdlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci9wcm94eS9Mb2dNZXNzYWdlLmphdmEKaW5kZXggMmNhNTk2ZS4uMGZkZWMxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvcHJveHkvTG9nTWVzc2FnZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL3Byb3h5L0xvZ01lc3NhZ2UuamF2YQpAQCAtMjMsNSArMjMsNSBAQAogKgogKi8KIHB1YmxpYyBpbnRlcmZhY2UgTG9nTWVzc2FnZXsKLQlwdWJsaWMgdm9pZCBsb2coU3RyaW5nIG1zZyk7CisgICAgcHVibGljIHZvaWQgbG9nKFN0cmluZyBtc2cpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvcHJveHkvTWltZUhlYWRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvcHJveHkvTWltZUhlYWRlci5qYXZhCmluZGV4IDhlNDc1YTAuLmJiZGRlZDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL3Byb3h5L01pbWVIZWFkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci9wcm94eS9NaW1lSGVhZGVyLmphdmEKQEAgLTIyLDExNCArMjIsMTE0IEBACiAqIE1JTUUgaXMgYW4gaW50ZXJuZXQgc3RhbmRhcmQgZm9yIGNvbW11bmljYXRpbmcgbXVsdGltZWRpYSBjb250ZW50IG92ZXIgZS1tYWlsIHN5c3RlbXMuTWltZUhlYWRlciBleHRlbmRzIEhhc2hUYWJsZSBzbyB0aGF0IGl0IGNhbiBzdG9yZSBrZXkgdmFsdWUgcGFpcnMuCiAqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKICAqQ29tcGFueTogU3VuIE1pY3Jvc3lzdGVtcyBJbmMKLSogCisqCiAqLwogcHVibGljIGNsYXNzIE1pbWVIZWFkZXIgZXh0ZW5kcyBIYXNodGFibGUKIHsKLQkvKioKLQkqIFRha2VzIGEgU3RyaW5nIGFzIGEgcGFyYW1ldGVyIGFuZCBwYXJzZXMgaXQuVGFrZXMgYSByYXcgTUlNRS1mb3JtYXR0ZWQgU3RyaW5nIGFuZCBlbnRlciBpdHMga2V5L3ZhbHVlIHBhaXJzIGludG8gYSBnaXZlbiBpbnN0YW5jZSBvZiBNaW1lSGVhZGVyLlVzZXMKKyAgICAvKioKKyAgICAqIFRha2VzIGEgU3RyaW5nIGFzIGEgcGFyYW1ldGVyIGFuZCBwYXJzZXMgaXQuVGFrZXMgYSByYXcgTUlNRS1mb3JtYXR0ZWQgU3RyaW5nIGFuZCBlbnRlciBpdHMga2V5L3ZhbHVlIHBhaXJzIGludG8gYSBnaXZlbiBpbnN0YW5jZSBvZiBNaW1lSGVhZGVyLlVzZXMKICAgICAgICAgICpTdHJpbmdUb2tlbml6ZXIgdG8gc3BsaXQgdGhlIGlucHV0IGRhdGEgaW50byBpbmRpdmlkdWFsIGxpbmVzIG1hcmtlZCBieSBDUkxGKFxyXG4pIHNlcXVlbmNlLgotCSogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQotCSogQHJldHVybiAgICAgICB2b2lkCi0JKiBAcGFyYW0JCWRhdGEJVGhlIHN0cmluZyB0byBiZSBwYXJzZWQKLQkqLwotCXZvaWQgcGFyc2UoU3RyaW5nIGRhdGEpCi0JewotCVN0cmluZ1Rva2VuaXplciBzdD1uZXcgU3RyaW5nVG9rZW5pemVyKGRhdGEsIlxyXG4iKTsKLQkJd2hpbGUoc3QuaGFzTW9yZVRva2VucygpKQotCQl7Ci0JCQlTdHJpbmcgcz1zdC5uZXh0VG9rZW4oKTsKLQkJCWludCBjb2xvbj1zLmluZGV4T2YoJzonKTsKLQkJCVN0cmluZyBrZXk9cy5zdWJzdHJpbmcoMCxjb2xvbik7Ci0JCQlTdHJpbmcgdmFsPXMuc3Vic3RyaW5nKGNvbG9uKzIpOwotCQkJcHV0KGtleSx2YWwpOwotCQl9Ci0JfQotCQotCS8qKgotCSogRGVmYXVsdCBDb25zdHJ1Y3RvciAKKyAgICAqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKKyAgICAqIEByZXR1cm4gICAgICAgdm9pZAorICAgICogQHBhcmFtICAgICAgICBkYXRhICAgIFRoZSBzdHJpbmcgdG8gYmUgcGFyc2VkCisgICAgKi8KKyAgICB2b2lkIHBhcnNlKFN0cmluZyBkYXRhKQorICAgIHsKKyAgICBTdHJpbmdUb2tlbml6ZXIgc3Q9bmV3IFN0cmluZ1Rva2VuaXplcihkYXRhLCJcclxuIik7CisgICAgICAgIHdoaWxlKHN0Lmhhc01vcmVUb2tlbnMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nIHM9c3QubmV4dFRva2VuKCk7CisgICAgICAgICAgICBpbnQgY29sb249cy5pbmRleE9mKCc6Jyk7CisgICAgICAgICAgICBTdHJpbmcga2V5PXMuc3Vic3RyaW5nKDAsY29sb24pOworICAgICAgICAgICAgU3RyaW5nIHZhbD1zLnN1YnN0cmluZyhjb2xvbisyKTsKKyAgICAgICAgICAgIHB1dChrZXksdmFsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICogRGVmYXVsdCBDb25zdHJ1Y3RvcgogICAgICAgICAgKkNsYXNzIGlzIGEgc3ViY2xhc3Mgb2YgSGFzaFRhYmxlIHNvIHRoYXQgaXQgY2FuIGNvbnZlbmVpbnRseSBzdG9yZSBhbmQgcmV0cmVpdmUgdGhlIGtleS92YWx1ZSBwYWlycwogICAgICAgICAgKmFzc29jaWF0ZWQgd2l0aCBhIE1JTUUgaGVhZGVyLkl0IGNyZWF0ZXMgYSBibGFuayBNaW1lSGVhZGVyIHdpdGggbm8ga2V5cy4KLQkqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKLQkqIAotCSogQHBhcmFtCQlOb25lCi0JKi8KLQlNaW1lSGVhZGVyKCl7fQotCQotCS8qKgotCSogVGhpcyBjb25zdHJ1Y3RvciB0YWtlcyBzdHJuZyBmb3JtYXR0ZWQgYXMgTUlNRSBoZWFkZXIgYW5kIHBhcnNlcyBpdCBmb3IgdGhlIGluaXRpYWwgY29udGVudHMgb2YgdGhlIG9iamVjdHMuCi0JKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCi0JKiAKLQkqIEBwYXJhbQkJZAlUaGUgc3RyaW5nIHRvIGJlIHBhcnNlZAotCSovCi0JTWltZUhlYWRlcihTdHJpbmcgZCkKLQl7Ci0JCXBhcnNlKGQpOwotCX0KLQkKLQkvKioKLQkqIENvbnZlcnRzIHRvIFN0cmluZyAuSXQgdGFrZXMgY3VycmVudCBrZXkvdmFsdWUgcGFpcnMgc3RvcmVkIGluIHRoZSBNaW1lSGVhZGVyIGFuZCByZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZW0gaW4KKyAgICAqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKKyAgICAqCisgICAgKiBAcGFyYW0gICAgICAgIE5vbmUKKyAgICAqLworICAgIE1pbWVIZWFkZXIoKXt9CisKKyAgICAvKioKKyAgICAqIFRoaXMgY29uc3RydWN0b3IgdGFrZXMgc3RybmcgZm9ybWF0dGVkIGFzIE1JTUUgaGVhZGVyIGFuZCBwYXJzZXMgaXQgZm9yIHRoZSBpbml0aWFsIGNvbnRlbnRzIG9mIHRoZSBvYmplY3RzLgorICAgICogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQorICAgICoKKyAgICAqIEBwYXJhbSAgICAgICAgZCAgICBUaGUgc3RyaW5nIHRvIGJlIHBhcnNlZAorICAgICovCisgICAgTWltZUhlYWRlcihTdHJpbmcgZCkKKyAgICB7CisgICAgICAgIHBhcnNlKGQpOworICAgIH0KKworICAgIC8qKgorICAgICogQ29udmVydHMgdG8gU3RyaW5nIC5JdCB0YWtlcyBjdXJyZW50IGtleS92YWx1ZSBwYWlycyBzdG9yZWQgaW4gdGhlIE1pbWVIZWFkZXIgYW5kIHJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlbSBpbgogICAgICAgICAgKk1JTUUgZm9ybWF0LCB3aGVyZSBrZXlzIGFyZSBwcmludGVkIGZvbGxvd2VkIGJ5IGNvbG9uIGFuZCBhIHNwYWNlLCBhbmQgdGhlbiB2YWx1ZSBmb2xsb3dlZCBieSBDUkxGLgotCSogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQotCSogQHJldHVybiAgICAgICBTdHJpbmcKLQkqLwotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotCXsKLQkJU3RyaW5nIHJldD0iIjsKLQkJRW51bWVyYXRpb24gZT1rZXlzKCk7Ci0JCXdoaWxlKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0JCXsKLQkJU3RyaW5nIGtleT0oU3RyaW5nKWUubmV4dEVsZW1lbnQoKTsKLQkJU3RyaW5nIHZhbD0oU3RyaW5nKWdldChrZXkpOwotCQlyZXQrPWtleSArICI6ICIgKyB2YWwgKyAiXHJcbiI7Ci0JCX0KLQlyZXR1cm4gcmV0OwotCX0KKyAgICAqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKKyAgICAqIEByZXR1cm4gICAgICAgU3RyaW5nCisgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKKyAgICB7CisgICAgICAgIFN0cmluZyByZXQ9IiI7CisgICAgICAgIEVudW1lcmF0aW9uIGU9a2V5cygpOworICAgICAgICB3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKQorICAgICAgICB7CisgICAgICAgIFN0cmluZyBrZXk9KFN0cmluZyllLm5leHRFbGVtZW50KCk7CisgICAgICAgIFN0cmluZyB2YWw9KFN0cmluZylnZXQoa2V5KTsKKyAgICAgICAgcmV0Kz1rZXkgKyAiOiAiICsgdmFsICsgIlxyXG4iOworICAgICAgICB9CisgICAgcmV0dXJuIHJldDsKKyAgICB9CiAKLQkvKioKLQkqVG8gcmVtb3ZlIHRoZSBkaXNjcmVwYW5jeSBpbiBNSU1FIHNwZWNpZmljYXRpb24gZm9yICJDb250ZW50LVR5cGUiIGFuZCAiY29udGVudC10eXBlIiBhbmQgIkNvbnRlbnQtTGVuZ3RoIiB0byAiY29udGVudC1sZW5ndGgiCi0gICAgICAgICAqVG8gYXZvaWQgcHJvYmxlbXMsIGFsbCBpbmNvbWluZyBhbmQgb3V0Z29pbmcgTWltZUhlYWRlciBrZXlzIGFyZSBjb252ZXJ0ZWQgdG8gY2Fub25pY2FsIGZvcm0uIAotCSogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQotCSogQHJldHVybiAgICAgICBTdHJpbmcKLQkqIEBwYXJhbQkJbXMJU3RyaW5nIHRvIGJlIG9wZXJhdGVkIHVwb24KLQkqLwotCXByaXZhdGUgU3RyaW5nIGZpeChTdHJpbmcgbXMpCi0JewotCQljaGFyIGNoYXJzW109bXMudG9Mb3dlckNhc2UoKS50b0NoYXJBcnJheSgpOwotCQlib29sZWFuIHVwY2FzZU5leHQ9dHJ1ZTsKLQkJZm9yKGludCBpPTA7aTxjaGFycy5sZW5ndGgtMTtpKyspCi0JCXsKLQkJCWNoYXIgY2g9Y2hhcnNbaV07Ci0JCQlpZih1cGNhc2VOZXh0ICYmICdhJyA8PWNoICYmIGNoIDw9J3onKQotCQkJewotCQkJCWNoYXJzW2ldPShjaGFyKShjaC0oJ2EnLSdBJykpOwotCQkJfQotCQkJdXBjYXNlTmV4dD1jaD09Jy0nOwotCQl9Ci0JcmV0dXJuIG5ldyBTdHJpbmcoY2hhcnMpOwotCX0KKyAgICAvKioKKyAgICAqVG8gcmVtb3ZlIHRoZSBkaXNjcmVwYW5jeSBpbiBNSU1FIHNwZWNpZmljYXRpb24gZm9yICJDb250ZW50LVR5cGUiIGFuZCAiY29udGVudC10eXBlIiBhbmQgIkNvbnRlbnQtTGVuZ3RoIiB0byAiY29udGVudC1sZW5ndGgiCisgICAgICAgICAqVG8gYXZvaWQgcHJvYmxlbXMsIGFsbCBpbmNvbWluZyBhbmQgb3V0Z29pbmcgTWltZUhlYWRlciBrZXlzIGFyZSBjb252ZXJ0ZWQgdG8gY2Fub25pY2FsIGZvcm0uCisgICAgKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCisgICAgKiBAcmV0dXJuICAgICAgIFN0cmluZworICAgICogQHBhcmFtICAgICAgICBtcyAgICBTdHJpbmcgdG8gYmUgb3BlcmF0ZWQgdXBvbgorICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmcgZml4KFN0cmluZyBtcykKKyAgICB7CisgICAgICAgIGNoYXIgY2hhcnNbXT1tcy50b0xvd2VyQ2FzZSgpLnRvQ2hhckFycmF5KCk7CisgICAgICAgIGJvb2xlYW4gdXBjYXNlTmV4dD10cnVlOworICAgICAgICBmb3IoaW50IGk9MDtpPGNoYXJzLmxlbmd0aC0xO2krKykKKyAgICAgICAgeworICAgICAgICAgICAgY2hhciBjaD1jaGFyc1tpXTsKKyAgICAgICAgICAgIGlmKHVwY2FzZU5leHQgJiYgJ2EnIDw9Y2ggJiYgY2ggPD0neicpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2hhcnNbaV09KGNoYXIpKGNoLSgnYSctJ0EnKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1cGNhc2VOZXh0PWNoPT0nLSc7CisgICAgICAgIH0KKyAgICByZXR1cm4gbmV3IFN0cmluZyhjaGFycyk7CisgICAgfQogCi0JLyoqCi0JKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCi0JKiBAcmV0dXJuICAgICAgIFN0cmluZwotCSogQHBhcmFtCQlrZXkJU3RyaW5nIHRvIGJlIGZldGNoZWQJCi0JKi8KLQlwdWJsaWMgU3RyaW5nIGdldChTdHJpbmcga2V5KQotCXsKLQkJcmV0dXJuIChTdHJpbmcpc3VwZXIuZ2V0KGZpeChrZXkpKTsKLQl9CisgICAgLyoqCisgICAgKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCisgICAgKiBAcmV0dXJuICAgICAgIFN0cmluZworICAgICogQHBhcmFtICAgICAgICBrZXkgICAgU3RyaW5nIHRvIGJlIGZldGNoZWQKKyAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0KFN0cmluZyBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gKFN0cmluZylzdXBlci5nZXQoZml4KGtleSkpOworICAgIH0KIAotCS8qKgotCSogIAotCSogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQotCSogQHJldHVybiAgICAgICB2b2lkCi0JKiBAcGFyYW0JCWtleQkJVGhlIEtleSBTdHJpbmcJCi0JKiBAcGFyYW0JCXZhbCAgCVRoZSB2YWx1ZSBTdHJpbmcJCi0JKi8KLQlwdWJsaWMgdm9pZCBwdXQoU3RyaW5nIGtleSxTdHJpbmcgdmFsKQotCXsKLQkJc3VwZXIucHV0KGZpeChrZXkpLHZhbCk7Ci0JfQotCQotCQorICAgIC8qKgorICAgICoKKyAgICAqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKKyAgICAqIEByZXR1cm4gICAgICAgdm9pZAorICAgICogQHBhcmFtICAgICAgICBrZXkgICAgICAgIFRoZSBLZXkgU3RyaW5nCisgICAgKiBAcGFyYW0gICAgICAgIHZhbCAgICAgIFRoZSB2YWx1ZSBTdHJpbmcKKyAgICAqLworICAgIHB1YmxpYyB2b2lkIHB1dChTdHJpbmcga2V5LFN0cmluZyB2YWwpCisgICAgeworICAgICAgICBzdXBlci5wdXQoZml4KGtleSksdmFsKTsKKyAgICB9CisKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvcHJveHkvVGVtcFN0b3JlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci9wcm94eS9UZW1wU3RvcmUuamF2YQppbmRleCBiZGZiYjQwLi4xYzBjMDkxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci9wcm94eS9UZW1wU3RvcmUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci9wcm94eS9UZW1wU3RvcmUuamF2YQpAQCAtMTksNjcgKzE5LDY3IEBACiBpbXBvcnQgamF2YS5pby4qOwogCiAKLQkvKioKLQkqIFRoaXMgY2xhc3MgaXMgZm9yIGNvcHlpbmcgYXJyYXkgb2YgYnl0ZXMuIAotCSogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQorICAgIC8qKgorICAgICogVGhpcyBjbGFzcyBpcyBmb3IgY29weWluZyBhcnJheSBvZiBieXRlcy4KKyAgICAqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKICAgICAgICAgKkNvbXBhbnk6IFN1biBNaWNyb3N5c3RlbXMgSW5jCi0JKiAKLQkqIAotCSovCisgICAgKgorICAgICoKKyAgICAqLwogcHVibGljIGNsYXNzIFRlbXBTdG9yZQogewotCVN0cmluZyB1cmw7Ci0JTWltZUhlYWRlciBtaDsKLQlieXRlIGRhdGFbXTsKLQlpbnQgbGVuZ3RoPTA7CisgICAgU3RyaW5nIHVybDsKKyAgICBNaW1lSGVhZGVyIG1oOworICAgIGJ5dGUgZGF0YVtdOworICAgIGludCBsZW5ndGg9MDsKIAotCS8qKgotCSogQ29uc3RydWN0b3IgdGhhdCBUYWtlcyB0d28gU3RyaW5nYSBhcyBwYXJhbWV0ZXIgCi0JKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCi0JKiAKLQkqIEBwYXJhbQkJdQlUaGUgc3RyaW5nIFVSTAotCSogQHBhcmFtCQltCW1pbWVoZWFkZXIKLQkqLwotCXB1YmxpYyBUZW1wU3RvcmUoU3RyaW5nIHUsTWltZUhlYWRlciBtKQotCXsKLQkJdXJsPXU7Ci0JCW1oPW07Ci0JCVN0cmluZyBjbD1taC5nZXQoKFN0cmluZykiQ29udGVudC1MZW5ndGgiKTsKLQkJaWYoY2whPW51bGwpCi0JCXsKLQkJZGF0YT1uZXcgYnl0ZVtJbnRlZ2VyLnBhcnNlSW50KGNsKV07Ci0JCX0KLQl9CisgICAgLyoqCisgICAgKiBDb25zdHJ1Y3RvciB0aGF0IFRha2VzIHR3byBTdHJpbmdhIGFzIHBhcmFtZXRlcgorICAgICogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQorICAgICoKKyAgICAqIEBwYXJhbSAgICAgICAgdSAgICBUaGUgc3RyaW5nIFVSTAorICAgICogQHBhcmFtICAgICAgICBtICAgIG1pbWVoZWFkZXIKKyAgICAqLworICAgIHB1YmxpYyBUZW1wU3RvcmUoU3RyaW5nIHUsTWltZUhlYWRlciBtKQorICAgIHsKKyAgICAgICAgdXJsPXU7CisgICAgICAgIG1oPW07CisgICAgICAgIFN0cmluZyBjbD1taC5nZXQoKFN0cmluZykiQ29udGVudC1MZW5ndGgiKTsKKyAgICAgICAgaWYoY2whPW51bGwpCisgICAgICAgIHsKKyAgICAgICAgZGF0YT1uZXcgYnl0ZVtJbnRlZ2VyLnBhcnNlSW50KGNsKV07CisgICAgICAgIH0KKyAgICB9CiAKIAogCi0JLyoqCi0JKiAKLQkqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKLQkqIAotCSogQHBhcmFtCQlkW10JQnl0ZSBhcnJheQotCSogQHBhcmFtCQluIEludGVnZXIKLQkqLwotCXZvaWQgYXBwZW5kKGJ5dGUgZFtdLGludCBuKQotCXsKLQkJaWYoZGF0YT09bnVsbCkKLQkJewotCQkJZGF0YT1uZXcgYnl0ZVtuXTsKLQkJCVN5c3RlbS5hcnJheWNvcHkoZCwwLGRhdGEsMCxuKTsKLQkJCWxlbmd0aCs9bjsKLQkJfSBlbHNlIGlmKGxlbmd0aCtuPmRhdGEubGVuZ3RoKQotCQl7Ci0JCWJ5dGUgb2xkW109ZGF0YTsKLQkJZGF0YT1uZXcgYnl0ZVtvbGQubGVuZ3RoK25dOwotCQlTeXN0ZW0uYXJyYXljb3B5KG9sZCwwLGRhdGEsMCxvbGQubGVuZ3RoKTsKLQkJU3lzdGVtLmFycmF5Y29weShkLDAsZGF0YSxvbGQubGVuZ3RoLG4pOwotCQlsZW5ndGgrPW47Ci0JCX1lbHNlCi0JCXsKLQkJU3lzdGVtLmFycmF5Y29weShkLDAsZGF0YSxsZW5ndGgsbik7Ci0JCWxlbmd0aCs9bjsKLQkJfQotCX0KKyAgICAvKioKKyAgICAqCisgICAgKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCisgICAgKgorICAgICogQHBhcmFtICAgICAgICBkW10gICAgQnl0ZSBhcnJheQorICAgICogQHBhcmFtICAgICAgICBuIEludGVnZXIKKyAgICAqLworICAgIHZvaWQgYXBwZW5kKGJ5dGUgZFtdLGludCBuKQorICAgIHsKKyAgICAgICAgaWYoZGF0YT09bnVsbCkKKyAgICAgICAgeworICAgICAgICAgICAgZGF0YT1uZXcgYnl0ZVtuXTsKKyAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoZCwwLGRhdGEsMCxuKTsKKyAgICAgICAgICAgIGxlbmd0aCs9bjsKKyAgICAgICAgfSBlbHNlIGlmKGxlbmd0aCtuPmRhdGEubGVuZ3RoKQorICAgICAgICB7CisgICAgICAgIGJ5dGUgb2xkW109ZGF0YTsKKyAgICAgICAgZGF0YT1uZXcgYnl0ZVtvbGQubGVuZ3RoK25dOworICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KG9sZCwwLGRhdGEsMCxvbGQubGVuZ3RoKTsKKyAgICAgICAgU3lzdGVtLmFycmF5Y29weShkLDAsZGF0YSxvbGQubGVuZ3RoLG4pOworICAgICAgICBsZW5ndGgrPW47CisgICAgICAgIH1lbHNlCisgICAgICAgIHsKKyAgICAgICAgU3lzdGVtLmFycmF5Y29weShkLDAsZGF0YSxsZW5ndGgsbik7CisgICAgICAgIGxlbmd0aCs9bjsKKyAgICAgICAgfQorICAgIH0KIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci9wcm94eS9odHRwZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvcHJveHkvaHR0cGQuamF2YQppbmRleCA2YTE5MmIxLi45ZDU2OGY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci9wcm94eS9odHRwZC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL3Byb3h5L2h0dHBkLmphdmEKQEAgLTQ3LDggKzQ3LDggQEAKICAgICAgICAgKgogICAgICAgICAqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKICAgICAgICAgKgotICAgICAgICAqIEBwYXJhbQkJcwlUaGUgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZAotICAgICAgICAqIEByZXR1cm4JCWJ5dGVbXQorICAgICAgICAqIEBwYXJhbSAgICAgICAgcyAgICBUaGUgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZAorICAgICAgICAqIEByZXR1cm4gICAgICAgIGJ5dGVbXQogICAgICAgICAqLwogICAgICAgICBwcml2YXRlIGZpbmFsIGJ5dGVbXSB0b0J5dGVzKFN0cmluZyBzKQogICAgICAgICB7CkBAIC02MSw5ICs2MSw5IEBACiAgICAgICAgICoKICAgICAgICAgKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCiAgICAgICAgICoKLSAgICAgICAgKiBAcGFyYW0JCW91dAlUaGUgb3V0cHV0IHN0cmVhbQotICAgICAgICAqIEBwYXJhbQkJcwlUaGUgc3RyaW5nCi0gICAgICAgICogQHJldHVybgkJdm9pZAorICAgICAgICAqIEBwYXJhbSAgICAgICAgb3V0ICAgIFRoZSBvdXRwdXQgc3RyZWFtCisgICAgICAgICogQHBhcmFtICAgICAgICBzICAgIFRoZSBzdHJpbmcKKyAgICAgICAgKiBAcmV0dXJuICAgICAgICB2b2lkCiAgICAgICAgICovCiAgICAgICAgIHByaXZhdGUgdm9pZCB3cml0ZVN0cmluZyhPdXRwdXRTdHJlYW0gb3V0LFN0cmluZyBzKQogICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KQEAgLTc1LDEwICs3NSwxMCBAQAogICAgICAgICAqCiAgICAgICAgICogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQogICAgICAgICAqCi0gICAgICAgICogQHBhcmFtCQlpbglUaGUgSW5wdXRTdHJlYW0KLSAgICAgICAgKiBAcGFyYW0JCXVybAlUaGUgc3RyaW5nIFVSTAotICAgICAgICAqIEBwYXJhbQkJbWggTWltZWhlYWRlcgotICAgICAgICAqIEByZXR1cm4JCVRlbXBTdG9yZQorICAgICAgICAqIEBwYXJhbSAgICAgICAgaW4gICAgVGhlIElucHV0U3RyZWFtCisgICAgICAgICogQHBhcmFtICAgICAgICB1cmwgICAgVGhlIHN0cmluZyBVUkwKKyAgICAgICAgKiBAcGFyYW0gICAgICAgIG1oIE1pbWVoZWFkZXIKKyAgICAgICAgKiBAcmV0dXJuICAgICAgICBUZW1wU3RvcmUKICAgICAgICAgKi8KICAgICAgICAgcHJpdmF0ZSBUZW1wU3RvcmUgbG9hZEZpbGUoSW5wdXRTdHJlYW0gaW4sU3RyaW5nIHVybCxNaW1lSGVhZGVyIG1oKQogICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KQEAgLTEwNCwxMSArMTA0LDExIEBACiAgICAgICAgICoKICAgICAgICAgKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCiAgICAgICAgICoKLSAgICAgICAgKiBAcGFyYW0JCWNtZAlTdHJpbmcKLSAgICAgICAgKiBAcGFyYW0JCXVybAlUaGUgc3RyaW5nIFVSTAotICAgICAgICAqIEBwYXJhbQkJY29kZSBpbnRlZ2VyCisgICAgICAgICogQHBhcmFtICAgICAgICBjbWQgICAgU3RyaW5nCisgICAgICAgICogQHBhcmFtICAgICAgICB1cmwgICAgVGhlIHN0cmluZyBVUkwKKyAgICAgICAgKiBAcGFyYW0gICAgICAgIGNvZGUgaW50ZWdlcgogICAgICAgICAqIEBwYXJhbSAgICAgICAgc2l6ZSBJbnRlZ2VyCi0gICAgICAgICogQHJldHVybgkJdm9pZAorICAgICAgICAqIEByZXR1cm4gICAgICAgIHZvaWQKICAgICAgICAgKi8KICAgICAgICAgcHJpdmF0ZSB2b2lkIGxvZ0VudHJ5KFN0cmluZyBjbWQsU3RyaW5nIHVybCxpbnQgY29kZSxpbnQgc2l6ZSkKICAgICAgICAgewpAQCAtMTI0LDEwICsxMjQsMTAgQEAKICAgICAgICAgKgogICAgICAgICAqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKICAgICAgICAgKgotICAgICAgICAqIEBwYXJhbQkJaW4JVGhlIElucHV0U3RyZWFtCi0gICAgICAgICogQHBhcmFtCQl1cmwJVGhlIHN0cmluZyBVUkwKLSAgICAgICAgKiBAcGFyYW0JCW1oIE1pbWVoZWFkZXIKLSAgICAgICAgKiBAcmV0dXJuCQlUZW1wU3RvcmUKKyAgICAgICAgKiBAcGFyYW0gICAgICAgIGluICAgIFRoZSBJbnB1dFN0cmVhbQorICAgICAgICAqIEBwYXJhbSAgICAgICAgdXJsICAgIFRoZSBzdHJpbmcgVVJMCisgICAgICAgICogQHBhcmFtICAgICAgICBtaCBNaW1laGVhZGVyCisgICAgICAgICogQHJldHVybiAgICAgICAgVGVtcFN0b3JlCiAgICAgICAgICovCiAgICAgICAgIHByaXZhdGUgU3RyaW5nIGdldFJhd1JlcXVlc3QoSW5wdXRTdHJlYW0gaW4pCiAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgpAQCAtMTY5LDI4ICsxNjksMjggQEAKICAgICAgICAgKgogICAgICAgICAqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKICAgICAgICAgKgotICAgICAgICAqIEBwYXJhbQkJb3V0CVRoZSBPdXRwdXRTdHJlYW0KLSAgICAgICAgKiBAcGFyYW0JCXVybAlUaGUgc3RyaW5nIFVSTAotICAgICAgICAqIEBwYXJhbQkJaW5taCBNaW1laGVhZGVyCi0gICAgICAgICogQHBhcmFtCQlpbiAgIFRoZSBpbnB1dCBzdHJlYW0KLSAgICAgICAgKiBAcmV0dXJuCQl2b2lkCisgICAgICAgICogQHBhcmFtICAgICAgICBvdXQgICAgVGhlIE91dHB1dFN0cmVhbQorICAgICAgICAqIEBwYXJhbSAgICAgICAgdXJsICAgIFRoZSBzdHJpbmcgVVJMCisgICAgICAgICogQHBhcmFtICAgICAgICBpbm1oIE1pbWVoZWFkZXIKKyAgICAgICAgKiBAcGFyYW0gICAgICAgIGluICAgVGhlIGlucHV0IHN0cmVhbQorICAgICAgICAqIEByZXR1cm4gICAgICAgIHZvaWQKICAgICAgICAgKi8KICAgICAgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZVByb3h5KE91dHB1dFN0cmVhbSBvdXQsU3RyaW5nIHVybCxNaW1lSGVhZGVyIGlubWgsSW5wdXRTdHJlYW0gaW4pIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaW50IHN0YXJ0PXVybC5pbmRleE9mKCI6Ly8iKSArMzsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGludCBwYXRoPXVybC5pbmRleE9mKCcvJyxzdGFydCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBTdHJpbmcgc2l0ZT11cmwuc3Vic3RyaW5nKHN0YXJ0LHBhdGgpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBTdHJpbmcgc2VydmVyX3VybD11cmwuc3Vic3RyaW5nKHBhdGgpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgaW50IGNvbG9uPXNpdGUuaW5kZXhPZignOicpOwogICAgICAgICAgICAgICAgIGlmKGNvbG9uID4gMCkgewogICAgICAgICAgICAgICAgICAgICBwb3J0PUludGVnZXIucGFyc2VJbnQoc2l0ZS5zdWJzdHJpbmcoY29sb24rMSkpOwogICAgICAgICAgICAgICAgICAgICBzaXRlPXNpdGUuc3Vic3RyaW5nKDAsY29sb24pOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZmlsZW91dD1uZXcgRmlsZU91dHB1dFN0cmVhbSgic2NyaXB0LnR4dCIsdHJ1ZSk7CiAgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50KCJcbiBTZXJ2ZXIgYXQgcG9ydCIgKyBwb3J0ICsgIlxuIik7CiAgICAgICAgICAgICAgICAgU29ja2V0IHNlcnZlcj1uZXcgU29ja2V0KHNpdGUscG9ydCk7CkBAIC0yMDMsMTMgKzIwMywxMyBAQAogICAgICAgICAgICAgICAgICAgICBieXRlIHBvc3RidWZbXT1uZXcgYnl0ZVtjb250ZW50X2xlbmd0aF07CiAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9MDsgaSA8IGNvbnRlbnRfbGVuZ3RoOyBpKyspCiAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0YnVmW2ldPShieXRlKWluLnJlYWQoKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgIFN0cmluZyBwb3N0ZGF0YT1uZXcgU3RyaW5nKHBvc3RidWYsMCxpKTsKICAgICAgICAgICAgICAgICAgIC8vICBTeXN0ZW0ub3V0LnByaW50KCJcbiBQT1NUIGRhdGEgd2l0aG91dCBtaW1lIGhlYWRlciBpcyAiICsgcG9zdGRhdGEgKyAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgIFN0cmluZyBwb3N0PSJQT1NUIiArICIgIiArIHNlcnZlcl91cmwrICIgIiArICJIVFRQLzEuMCIgKyBDUkxGICsgaW5taAogICAgICAgICAgICAgICAgICAgKyBDUkxGICsgcG9zdGRhdGErIENSTEYrQ1JMRjsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIlxuUE9TVCByZXF1ZXN0IHNlbnQgaXMgIiArIHBvc3QpOwogICAgICAgICAgICAgICAgICAgYnl0ZSBmaWxlYnVmW109cG9zdC5nZXRCeXRlcygpOwogICAgICAgICAgICAgICAgICAgZm9yKCBpPTA7aTxmaWxlYnVmLmxlbmd0aDtpKyspCkBAIC0yMjUsNyArMjI1LDcgQEAKIAogICAgICAgICAgICAgICAgICAgICBmaXJzdD1TeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJpbmcoc2VydmVyX291dCxwb3N0KTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJhd19yZXF1ZXN0PWdldFJhd1JlcXVlc3Qoc2VydmVyX2luKTsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiXG4gU2VydmVyIFJlc3BvbnNlIEhlYWRlciBpcy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIiArIHJhd19yZXF1ZXN0ICsgIlxuIik7CiAKQEAgLTIzMywyNCArMjMzLDI0IEBACiAgICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyaW5nKG91dCxzZXJ2ZXJfcmVzcG9uc2UudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgIGVuZD1TeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50KCJcbiBTZXJ2ZXIgUmVzcG9uc2UgSGVhZGVyIGlzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAiICsgc2VydmVyX3Jlc3BvbnNlLnN0YXR1c0NvZGUgKyAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYoc2VydmVyX3Jlc3BvbnNlLnN0YXR1c0NvZGU9PTIwMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAgIFRlbXBTdG9yZSB1Y2U9bG9hZEZpbGUoc2VydmVyX2luLHVybCxzZXJ2ZXJfcmVzcG9uc2UubWgpOwogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlKHVjZS5kYXRhLDAsdWNlLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvKiAgICBieXRlIGZpbGVidWZbXT1wb3N0LmdldEJ5dGVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoIGk9MDtpPGZpbGVidWYubGVuZ3RoO2krKykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlb3V0LndyaXRlKGZpbGVidWZbaV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAKKworCiAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdG9rZW49IiEiKyJcbiIrIiEiOwogICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSB0b2tlbmJ5dGVzW109dG9rZW4uZ2V0Qnl0ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTA7aTx0b2tlbmJ5dGVzLmxlbmd0aDtpKyspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW91dC53cml0ZSh0b2tlbmJ5dGVzW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlb3V0LmNsb3NlKCk7Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICAgICBsb2dFbnRyeSgiUE9TVCIsc2l0ZSArIHNlcnZlcl91cmwsMjAwLHVjZS5sZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoc2VydmVyX3Jlc3BvbnNlLnN0YXR1c0NvZGU9PTMwMiB8fCBzZXJ2ZXJfcmVzcG9uc2Uuc3RhdHVzQ29kZT09MzA3KSB7CkBAIC0yNzQsNTkgKzI3NCw1OSBAQAogICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDaGtpbmcgcmVkaXJlY3RlZCByZXF1ZXN0IHJlc3BvbnNlIGNvZGUiKyIqKioqKioqKioqKioqKioqKioqIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVtcFN0b3JlIHVjZTE9bG9hZEZpbGUocmVfaW4sSG9zdCxyZV9yZXNwb25zZS5taCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlKHVjZTEuZGF0YSwwLHVjZTEubGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0VudHJ5KCJHRVQiLEhvc3QsMjAwLHVjZTEubGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qYnl0ZSBmaWxlYnVmW109cmVkaXJlY3RyZXEuZ2V0Qnl0ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoIGk9MDtpPGZpbGVidWYubGVuZ3RoO2krKykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW91dC53cml0ZShmaWxlYnVmW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0b2tlbj0iISIrIlxuIisiISI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZSB0b2tlbmJ5dGVzW109dG9rZW4uZ2V0Qnl0ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0wO2k8dG9rZW5ieXRlcy5sZW5ndGg7aSsrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlb3V0LndyaXRlKHRva2VuYnl0ZXNbaV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW91dC5jbG9zZSgpOyovCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2VydmVyX3Jlc3BvbnNlLnN0YXR1c0NvZGU9PTMwNCkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqMzA0IHN0YXR1cyBjb2RlKioqKioqKioqKioqKioqKioqKioqKioqIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmVxPW1ldGhvZFN1cHBvcnRlZCArICIgIiAgKyBzZXJ2ZXJfdXJsICsgIiAiICsiSFRUUC8xLjAiICsgQ1JMRiArIGlubWggKyBDUkxGICsgQ1JMRjsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiXG4gUmVxdWVzdCBzdHJpbmcgc2VudCB0byBzZXJ2ZXJcbiIgKyByZXEgKTsKICAgICAgICAgICAgICAgICAgICAgYnl0ZSBmaWxlYnVmMltdPXJlcS5nZXRCeXRlcygpOwogICAgICAgICAgICAgICAgICAgICBmb3IoaW50IGk9MDtpPGZpbGVidWYyLmxlbmd0aDtpKyspCiAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlb3V0LndyaXRlKGZpbGVidWYyW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5ld3Rva2VuPSIhIisiXG4iKyIhIjsKICAgICAgICAgICAgICAgICAgICAgYnl0ZSB0b2tlbmJ5dGVzMVtdPW5ld3Rva2VuLmdldEJ5dGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgaT0wO2k8dG9rZW5ieXRlczEubGVuZ3RoO2krKykKICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVvdXQud3JpdGUodG9rZW5ieXRlczFbaV0pOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBmaWxlb3V0LmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyaW5nKHNlcnZlcl9vdXQscmVxKTsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJhd19yZXF1ZXN0PWdldFJhd1JlcXVlc3Qoc2VydmVyX2luKTsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiXG4gU2VydmVyIFJlc3BvbnNlIGlzICIgKyByYXdfcmVxdWVzdCArICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBIdHRwUmVzcG9uc2Ugc2VydmVyX3Jlc3BvbnNlPW5ldyBIdHRwUmVzcG9uc2UocmF3X3JlcXVlc3QpOwogICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmluZyhvdXQsc2VydmVyX3Jlc3BvbnNlLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnQoIlxuIFNlcnZlciBSZXNwb25zZSBpcyAiICsgc2VydmVyX3Jlc3BvbnNlLnN0YXR1c0NvZGUgKyAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYoc2VydmVyX3Jlc3BvbnNlLnN0YXR1c0NvZGU9PTIwMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgVGVtcFN0b3JlIHVjZT1sb2FkRmlsZShzZXJ2ZXJfaW4sdXJsLHNlcnZlcl9yZXNwb25zZS5taCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGUodWNlLmRhdGEsMCx1Y2UubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBpZihzZXJ2ZXJfcmVzcG9uc2Uuc3RhdHVzQ29kZT09MzAyIHx8IHNlcnZlcl9yZXNwb25zZS5zdGF0dXNDb2RlPT0zMDcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCIqKioqKipJbnNpZGUgUmVkaXJlY3Rpb24qKioqKioqKioiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBIb3N0PXNlcnZlcl9yZXNwb25zZS5taC5nZXQoIkxvY2F0aW9uIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiTmV3IGhvc3QgaXMiK0hvc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAgIFVSTCBuZXd1cmw9bmV3IFVSTChIb3N0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBhY3R1YWxob3N0PW5ld3VybC5nZXRIb3N0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBTb2NrZXQgc2VydmVyc29ja2V0PW5ldyBTb2NrZXQoYWN0dWFsaG9zdCw4MCk7CkBAIC0zNTIsMTIgKzM1MiwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUgZmlsZWJ1ZltdPXJlZGlyZWN0cmVxLmdldEJ5dGVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCBpPTA7aTxmaWxlYnVmLmxlbmd0aDtpKyspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVvdXQud3JpdGUoZmlsZWJ1ZltpXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdG9rZW49IiEiKyJcbiIrIiEiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUgdG9rZW5ieXRlc1tdPXRva2VuLmdldEJ5dGVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCBpPTA7aTx0b2tlbmJ5dGVzLmxlbmd0aDtpKyspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVvdXQud3JpdGUodG9rZW5ieXRlc1tpXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlb3V0LmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTM2NSw5ICszNjUsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqMzA0IHN0YXR1cyBjb2RlKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgc2VydmVyX291dC5jbG9zZSgpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXRjaChJT0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgbG9nLmxvZygiRXhjZXB0aW9uIiArIGUpOwpAQCAtMzg2LDkgKzM4Niw5IEBACiAgICAgICAgICoKICAgICAgICAgKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCiAgICAgICAgICoKLSAgICAgICAgKiBAcGFyYW0JCXMJU29ja2V0Ci0gICAgICAgICogQHJldHVybgkJdm9pZAotICAgICAgICAqIEB0aHJvd3MgCQlJT0V4Y2VwdGlvbgorICAgICAgICAqIEBwYXJhbSAgICAgICAgcyAgICBTb2NrZXQKKyAgICAgICAgKiBAcmV0dXJuICAgICAgICB2b2lkCisgICAgICAgICogQHRocm93cyAgICAgICAgIElPRXhjZXB0aW9uCiAgICAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGRvUmVxdWVzdChTb2NrZXQgcykgdGhyb3dzIElPRXhjZXB0aW9uCiAgICAgICAgIHsKQEAgLTQzMCw3ICs0MzAsNyBAQAogICAgICAgICAqCiAgICAgICAgICogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQogICAgICAgICAqCi0gICAgICAgICogQHJldHVybgkJdm9pZAorICAgICAgICAqIEByZXR1cm4gICAgICAgIHZvaWQKICAgICAgICAgKgogICAgICAgICAqLwogICAgICAgICBwdWJsaWMgdm9pZCBydW4oKQpAQCAtNDY1LDcgKzQ2NSw3IEBACiAgICAgICAgICoKICAgICAgICAgKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCiAgICAgICAgICoKLSAgICAgICAgKiBAcmV0dXJuCQl2b2lkCisgICAgICAgICogQHJldHVybiAgICAgICAgdm9pZAogICAgICAgICAqCiAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzdGFydCgpCkBAIC00ODMsNyArNDgzLDcgQEAKICAgICAgICAgKgogICAgICAgICAqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKICAgICAgICAgKgotICAgICAgICAqIEByZXR1cm4JCXZvaWQKKyAgICAgICAgKiBAcmV0dXJuICAgICAgICB2b2lkCiAgICAgICAgICoKICAgICAgICAgKi8KICAgICAgICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHN0b3AoKQpAQCAtNDk4LDcgKzQ5OCw3IEBACiAgICAgICAgICoKICAgICAgICAgKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCiAgICAgICAgICoKLSAgICAgICAgKiBAcmV0dXJuCQl2b2lkCisgICAgICAgICogQHJldHVybiAgICAgICAgdm9pZAogICAgICAgICAqCiAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBodHRwZChpbnQgcCwgTG9nTWVzc2FnZSBsbSkKQEAgLTUxMyw3ICs1MTMsNyBAQAogICAgICAgICAqCiAgICAgICAgICogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQogICAgICAgICAqCi0gICAgICAgICogQHJldHVybgkJdm9pZAorICAgICAgICAqIEByZXR1cm4gICAgICAgIHZvaWQKICAgICAgICAgKgogICAgICAgICAqLwogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKQpAQCAtNTM2LDcgKzUzNiw3IEBACiAgICAgICAgICoKICAgICAgICAgKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCiAgICAgICAgICoKLSAgICAgICAgKiBAcmV0dXJuCQl2b2lkCisgICAgICAgICogQHJldHVybiAgICAgICAgdm9pZAogICAgICAgICAqCiAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyB2b2lkIGxvZyhTdHJpbmcgbSkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL3dlYnRlc3QvSHR0cFJlc3BvbnNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci93ZWJ0ZXN0L0h0dHBSZXNwb25zZS5qYXZhCmluZGV4IDlhMjlhMDIuLjlhMzFkMDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL3dlYnRlc3QvSHR0cFJlc3BvbnNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvd2VidGVzdC9IdHRwUmVzcG9uc2UuamF2YQpAQCAtMTgsMzcgKzE4LDM3IEBACiAKIHB1YmxpYyBjbGFzcyBIdHRwUmVzcG9uc2UKIHsKLQlpbnQgc3RhdHVzQ29kZTsKLQlTdHJpbmcgcmVhc29uUGhyYXNlOwotCU1pbWVIZWFkZXIgbWg7Ci0Jc3RhdGljIFN0cmluZyBDUkxGPSJcclxuIjsKKyAgICBpbnQgc3RhdHVzQ29kZTsKKyAgICBTdHJpbmcgcmVhc29uUGhyYXNlOworICAgIE1pbWVIZWFkZXIgbWg7CisgICAgc3RhdGljIFN0cmluZyBDUkxGPSJcclxuIjsKIAotCXZvaWQgcGFyc2UoU3RyaW5nIHJlcXVlc3QpCi0JewotCQlpbnQgZnNwPXJlcXVlc3QuaW5kZXhPZignICcpOwotCQlpbnQgbnNwPXJlcXVlc3QuaW5kZXhPZignICcsZnNwKzEpOwotCQlpbnQgZW9sPXJlcXVlc3QuaW5kZXhPZignXG4nKTsKLQkJU3RyaW5nIHByb3RvY29sPXJlcXVlc3Quc3Vic3RyaW5nKDAsZnNwKTsKLQkJc3RhdHVzQ29kZT1JbnRlZ2VyLnBhcnNlSW50KHJlcXVlc3Quc3Vic3RyaW5nKGZzcCsxLG5zcCkpOwotCQlyZWFzb25QaHJhc2U9cmVxdWVzdC5zdWJzdHJpbmcobnNwKzEsZW9sKTsKLQkJU3RyaW5nIHJhd19taW1lX2hlYWRlcj1yZXF1ZXN0LnN1YnN0cmluZyhlb2wrMSk7Ci0JCW1oPW5ldyBNaW1lSGVhZGVyKHJhd19taW1lX2hlYWRlcik7Ci0JfQorICAgIHZvaWQgcGFyc2UoU3RyaW5nIHJlcXVlc3QpCisgICAgeworICAgICAgICBpbnQgZnNwPXJlcXVlc3QuaW5kZXhPZignICcpOworICAgICAgICBpbnQgbnNwPXJlcXVlc3QuaW5kZXhPZignICcsZnNwKzEpOworICAgICAgICBpbnQgZW9sPXJlcXVlc3QuaW5kZXhPZignXG4nKTsKKyAgICAgICAgU3RyaW5nIHByb3RvY29sPXJlcXVlc3Quc3Vic3RyaW5nKDAsZnNwKTsKKyAgICAgICAgc3RhdHVzQ29kZT1JbnRlZ2VyLnBhcnNlSW50KHJlcXVlc3Quc3Vic3RyaW5nKGZzcCsxLG5zcCkpOworICAgICAgICByZWFzb25QaHJhc2U9cmVxdWVzdC5zdWJzdHJpbmcobnNwKzEsZW9sKTsKKyAgICAgICAgU3RyaW5nIHJhd19taW1lX2hlYWRlcj1yZXF1ZXN0LnN1YnN0cmluZyhlb2wrMSk7CisgICAgICAgIG1oPW5ldyBNaW1lSGVhZGVyKHJhd19taW1lX2hlYWRlcik7CisgICAgfQogCi0JSHR0cFJlc3BvbnNlKFN0cmluZyByZXF1ZXN0KQotCXsKLQkJcGFyc2UocmVxdWVzdCk7Ci0JfQorICAgIEh0dHBSZXNwb25zZShTdHJpbmcgcmVxdWVzdCkKKyAgICB7CisgICAgICAgIHBhcnNlKHJlcXVlc3QpOworICAgIH0KIAotCUh0dHBSZXNwb25zZShpbnQgY29kZSxTdHJpbmcgcmVhc29uLE1pbWVIZWFkZXIgbSkKLQl7Ci0JCXN0YXR1c0NvZGU9Y29kZTsKLQkJcmVhc29uUGhyYXNlPXJlYXNvbjsKLQkJbWg9bTsKLQl9CisgICAgSHR0cFJlc3BvbnNlKGludCBjb2RlLFN0cmluZyByZWFzb24sTWltZUhlYWRlciBtKQorICAgIHsKKyAgICAgICAgc3RhdHVzQ29kZT1jb2RlOworICAgICAgICByZWFzb25QaHJhc2U9cmVhc29uOworICAgICAgICBtaD1tOworICAgIH0KIAotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotCXsKLQkJcmV0dXJuICJIVFRQLzEuMCAiKyBzdGF0dXNDb2RlICsiICIgKyByZWFzb25QaHJhc2UgKyBDUkxGICsgbWggKyBDUkxGOworICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJIVFRQLzEuMCAiKyBzdGF0dXNDb2RlICsiICIgKyByZWFzb25QaHJhc2UgKyBDUkxGICsgbWggKyBDUkxGOwogICAgICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci93ZWJ0ZXN0L01pbWVIZWFkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL3dlYnRlc3QvTWltZUhlYWRlci5qYXZhCmluZGV4IDE2ODgwZDIuLmQ1YWY5ZTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL3dlYnRlc3QvTWltZUhlYWRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL3dlYnRlc3QvTWltZUhlYWRlci5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKICAqQ29tcGFueTogU3VuIE1pY3Jvc3lzdGVtcyBJbmMKICAqQHNlZSBjb20uc3VuLmVqdGUuY2NsLndlYnJ1bm5lci5wcm94eS5NaW1lSGVhZGVyCi0qIAorKgogKi8KIAogcHVibGljIGNsYXNzIE1pbWVIZWFkZXIgZXh0ZW5kcyBIYXNodGFibGUKQEAgLTM1LDggKzM1LDggQEAKICAgICBwcml2YXRlIGJvb2xlYW4gcmVxdWVzdFBPU1Q9ZmFsc2U7CiAgICAgcHJpdmF0ZSBib29sZWFuIGNvb2tpZVNldD1mYWxzZTsKICAgICBwcml2YXRlIFN0cmluZyBwb3N0ZGF0YT1uZXcgU3RyaW5nKCk7Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIFRha2VzIGEgU3RyaW5nIGFzIGEgcGFyYW1ldGVyIGFuZCBwYXJzZXMgaXQuVGFrZXMgYSByYXcgTUlNRS1mb3JtYXR0ZWQgU3RyaW5nIGFuZCBlbnRlciBpdHMga2V5L3ZhbHVlIHBhaXJzIGludG8gYSBnaXZlbiBpbnN0YW5jZSBvZiBNaW1lSGVhZGVyLlVzZXMKICAgICAgKlN0cmluZ1Rva2VuaXplciB0byBzcGxpdCB0aGUgaW5wdXQgZGF0YSBpbnRvIGluZGl2aWR1YWwgbGluZXMgbWFya2VkIGJ5IENSTEYoXHJcbikgc2VxdWVuY2UuCkBAIC00NCwxNiArNDQsMTYgQEAKICAgICAgKklmIGl0IGlzIFBPU1QgdGhlbiBzdG9yZXMgdGhlIHBvc3QgZGF0YSB0byBiZSBzZW50IHRvIGV4dGVybmFsIHdlYiBzZXJ2ZXIuCiAgICAgICogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQogICAgICAqIEByZXR1cm4gICAgICAgdm9pZAotICAgICAqIEBwYXJhbQkJZGF0YQlUaGUgc3RyaW5nIHRvIGJlIHBhcnNlZAorICAgICAqIEBwYXJhbSAgICAgICAgZGF0YSAgICBUaGUgc3RyaW5nIHRvIGJlIHBhcnNlZAogICAgICAqKkBzZWUgY29tLnN1bi5lanRlLmNjbC53ZWJydW5uZXIucHJveHkuTWltZUhlYWRlcgogICAgICovCiAgICAgdm9pZCBwYXJzZShTdHJpbmcgZGF0YSkKICAgICB7Ci0JU3RyaW5nVG9rZW5pemVyIHN0PW5ldyBTdHJpbmdUb2tlbml6ZXIoZGF0YSwiXHJcbiIpOwotCXdoaWxlKHN0Lmhhc01vcmVUb2tlbnMoKSkKLQl7CisgICAgU3RyaW5nVG9rZW5pemVyIHN0PW5ldyBTdHJpbmdUb2tlbml6ZXIoZGF0YSwiXHJcbiIpOworICAgIHdoaWxlKHN0Lmhhc01vcmVUb2tlbnMoKSkKKyAgICB7CiAgICAgICAgICAgICBTdHJpbmcgcz1zdC5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvL2ZpcnN0IGNoZWNrIGZvciBDb29raWUgYXMgdGhleSBhcmUgY29udGFpbmVkIGluIHNjcmlwdCBmaWxlLlRoaXMgbmVlZHMgdG8gYmUgc3RyaXBwZWQgZnJvbSB0aGUgbmV3IHJlcXVlc3Qgc3RyaW5nIHNlbnQgdG8gc2VydmVyCiAgICAgICAgICAgICBpZihzLnN0YXJ0c1dpdGgoIkNvb2tpZSIpKQogICAgICAgICAgICAgewpAQCAtOTIsMTAgKzkyLDEwIEBACiAgICAgICAgICAgICAgICAgZWxzZSBpZigoUmVxdWVzdEhlYWRlci5pbmRleE9mKCJQT1NUIikpIT0tMSkKICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBPU1Q9dHJ1ZTsKICAgICAgICAgICAgIH0KLQl9CisgICAgfQogICAgIH0KIAotCU1pbWVIZWFkZXIoKXt9CisgICAgTWltZUhlYWRlcigpe30KICAgICAgICAgcHVibGljIGJvb2xlYW4gaWZHRVRSZXF1ZXN0KCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdEdFVDsKQEAgLTEwOCw3OCArMTA4LDc4IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiB0aGlzLlJlcXVlc3RIZWFkZXI7CiAgICAgICAgIH0KLQlNaW1lSGVhZGVyKFN0cmluZyBkKQotCXsKLQkJcGFyc2UoZCk7Ci0JfQorICAgIE1pbWVIZWFkZXIoU3RyaW5nIGQpCisgICAgeworICAgICAgICBwYXJzZShkKTsKKyAgICB9CiAKLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLQl7Ci0JCVN0cmluZyByZXQ9IiI7Ci0JCUVudW1lcmF0aW9uIGU9a2V5cygpOwotCQl3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKQotCQl7Ci0JCVN0cmluZyBrZXk9KFN0cmluZyllLm5leHRFbGVtZW50KCk7Ci0JCVN0cmluZyB2YWw9KFN0cmluZylnZXQoa2V5KTsKLQkJcmV0Kz1rZXkgKyAiOiAiICsgdmFsICsgIlxyXG4iOwotCQl9Ci0JcmV0dXJuIHJldDsKLQl9Ci0gICAgICAgIAorICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAgU3RyaW5nIHJldD0iIjsKKyAgICAgICAgRW51bWVyYXRpb24gZT1rZXlzKCk7CisgICAgICAgIHdoaWxlKGUuaGFzTW9yZUVsZW1lbnRzKCkpCisgICAgICAgIHsKKyAgICAgICAgU3RyaW5nIGtleT0oU3RyaW5nKWUubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgU3RyaW5nIHZhbD0oU3RyaW5nKWdldChrZXkpOworICAgICAgICByZXQrPWtleSArICI6ICIgKyB2YWwgKyAiXHJcbiI7CisgICAgICAgIH0KKyAgICByZXR1cm4gcmV0OworICAgIH0KKwogICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFBvc3REYXRhKCkKICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBwb3N0ZGF0YS50cmltKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICB9Ci0gICAgICAgIAogCiAKLQkvKioKLQkqVG8gcmVtb3ZlIHRoZSBkaXNjcmVwYW5jeSBpbiBNSU1FIHNwZWNpZmljYXRpb24gZm9yICJDb250ZW50LVR5cGUiIGFuZCAiY29udGVudC10eXBlIiBhbmQgIkNvbnRlbnQtTGVuZ3RoIiB0byAiY29udGVudC1sZW5ndGgiCi0gICAgICAgICAqVG8gYXZvaWQgcHJvYmxlbXMsIGFsbCBpbmNvbWluZyBhbmQgb3V0Z29pbmcgTWltZUhlYWRlciBrZXlzIGFyZSBjb252ZXJ0ZWQgdG8gY2Fub25pY2FsIGZvcm0uIAotCSogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQotCSogQHJldHVybiAgICAgICBTdHJpbmcKLQkqIEBwYXJhbQkJbXMJU3RyaW5nIHRvIGJlIG9wZXJhdGVkIHVwb24KLQkqLworCisgICAgLyoqCisgICAgKlRvIHJlbW92ZSB0aGUgZGlzY3JlcGFuY3kgaW4gTUlNRSBzcGVjaWZpY2F0aW9uIGZvciAiQ29udGVudC1UeXBlIiBhbmQgImNvbnRlbnQtdHlwZSIgYW5kICJDb250ZW50LUxlbmd0aCIgdG8gImNvbnRlbnQtbGVuZ3RoIgorICAgICAgICAgKlRvIGF2b2lkIHByb2JsZW1zLCBhbGwgaW5jb21pbmcgYW5kIG91dGdvaW5nIE1pbWVIZWFkZXIga2V5cyBhcmUgY29udmVydGVkIHRvIGNhbm9uaWNhbCBmb3JtLgorICAgICogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQorICAgICogQHJldHVybiAgICAgICBTdHJpbmcKKyAgICAqIEBwYXJhbSAgICAgICAgbXMgICAgU3RyaW5nIHRvIGJlIG9wZXJhdGVkIHVwb24KKyAgICAqLwogICAgICAgICBwcml2YXRlIFN0cmluZyBmaXgoU3RyaW5nIG1zKQotCXsKLQljaGFyIGNoYXJzW109bXMudG9Mb3dlckNhc2UoKS50b0NoYXJBcnJheSgpOwotCWJvb2xlYW4gdXBjYXNlTmV4dD10cnVlOwotCWZvcihpbnQgaT0wO2k8Y2hhcnMubGVuZ3RoLTE7aSsrKQotCXsKLQkJY2hhciBjaD1jaGFyc1tpXTsKLQkJaWYodXBjYXNlTmV4dCAmJiAnYScgPD1jaCAmJiBjaCA8PSd6JykKLQkJewotCQkJY2hhcnNbaV09KGNoYXIpKGNoLSgnYSctJ0EnKSk7Ci0JCX0KLQkJdXBjYXNlTmV4dD1jaD09Jy0nOwotCX0KLQlyZXR1cm4gbmV3IFN0cmluZyhjaGFycyk7Ci0JfQorICAgIHsKKyAgICBjaGFyIGNoYXJzW109bXMudG9Mb3dlckNhc2UoKS50b0NoYXJBcnJheSgpOworICAgIGJvb2xlYW4gdXBjYXNlTmV4dD10cnVlOworICAgIGZvcihpbnQgaT0wO2k8Y2hhcnMubGVuZ3RoLTE7aSsrKQorICAgIHsKKyAgICAgICAgY2hhciBjaD1jaGFyc1tpXTsKKyAgICAgICAgaWYodXBjYXNlTmV4dCAmJiAnYScgPD1jaCAmJiBjaCA8PSd6JykKKyAgICAgICAgeworICAgICAgICAgICAgY2hhcnNbaV09KGNoYXIpKGNoLSgnYSctJ0EnKSk7CisgICAgICAgIH0KKyAgICAgICAgdXBjYXNlTmV4dD1jaD09Jy0nOworICAgIH0KKyAgICByZXR1cm4gbmV3IFN0cmluZyhjaGFycyk7CisgICAgfQogCiAKLQkvKgorICAgIC8qCiAgICAgICAgICogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQogICAgICAgICogQHJldHVybiAgICAgICAgU3RyaW5nCi0gICAgICAgKiBAcGFyYW0JCVN0cmluZyBrZXkgTUlNRSBoZWFkZXIgZS5nIENvbnRlbnQtVHlwZQotICAgICAgICAKKyAgICAgICAqIEBwYXJhbSAgICAgICAgU3RyaW5nIGtleSBNSU1FIGhlYWRlciBlLmcgQ29udGVudC1UeXBlCisKICAgICAgICAqKkBzZWUgY29tLnN1bi5lanRlLmNjbC53ZWJydW5uZXIucHJveHkuTWltZUhlYWRlcgogICAgICAgICovCiAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0KFN0cmluZyBrZXkpCi0JewotCXJldHVybiAoU3RyaW5nKXN1cGVyLmdldChmaXgoa2V5KSk7Ci0JfQorICAgIHsKKyAgICByZXR1cm4gKFN0cmluZylzdXBlci5nZXQoZml4KGtleSkpOworICAgIH0KIAotICAgICAKKwogICAgICAgIC8qCiAgICAgICAgICogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQogICAgICAgICogQHJldHVybiAgICAgICB2b2lkCi0gICAgICAgKiBAcGFyYW0JCVN0cmluZyBrZXkgTUlNRSBoZWFkZXIgZS5nIENvbnRlbnQtVHlwZQorICAgICAgICogQHBhcmFtICAgICAgICBTdHJpbmcga2V5IE1JTUUgaGVhZGVyIGUuZyBDb250ZW50LVR5cGUKICAgICAgICAgKkBwYXJhbSAgICAgICAgIFN0cmluZyB2YWx1ZSB2YWx1ZSBvZiBNSU1FIGhlYWRlcgogICAgICAgICoqQHNlZSBjb20uc3VuLmVqdGUuY2NsLndlYnJ1bm5lci5wcm94eS5NaW1lSGVhZGVyCiAgICAgICAgKi8KICAgICAgICAgcHVibGljIHZvaWQgcHV0KFN0cmluZyBrZXksU3RyaW5nIHZhbCkKLQl7Ci0Jc3VwZXIucHV0KGZpeChrZXkpLHZhbCk7Ci0JfQorICAgIHsKKyAgICBzdXBlci5wdXQoZml4KGtleSksdmFsKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci93ZWJ0ZXN0L1NlbmRSZXF1ZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci93ZWJ0ZXN0L1NlbmRSZXF1ZXN0LmphdmEKaW5kZXggNDkzNWUxOC4uMjdkNjQ4ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvd2VidGVzdC9TZW5kUmVxdWVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL3dlYnRlc3QvU2VuZFJlcXVlc3QuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogICoKICAqLwogcHVibGljIGNsYXNzIFNlbmRSZXF1ZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgaW50IG5UaHJlYWRzOwogICAgIHByaXZhdGUgaW50IGlkIDsKICAgICBwcml2YXRlIGJ5dGVbXSBmaWxlYnVmOwpAQCAtNDAsMTEgKzQwLDExIEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgY29va2llX3ZhbHVlOwogICAgIHByaXZhdGUgU3RyaW5nIGNvb2tpZV9wYXRoOwogICAgIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKCJiYW5rLmFkbWluIik7Ci0gICAgQ29uc29sZUhhbmRsZXIgY2ggPSBuZXcgQ29uc29sZUhhbmRsZXIoKTsgICAgCisgICAgQ29uc29sZUhhbmRsZXIgY2ggPSBuZXcgQ29uc29sZUhhbmRsZXIoKTsKICAgICBwcml2YXRlIFN0cmluZyBURVNUX1NVSVRFX0lEID0gIldFQkNMSUVOVCI7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgQ1JMRj0iXHJcbiI7Ci0gICAgCisKICAgICBpbnQgc3RhdHVzLE9LPTA7CiAgICAgaW50IG5vdE9LPTA7CiAgICAgaW50IHVybF9zaXplOwpAQCAtNTcsMjAgKzU3LDIwIEBACiAgICAgcHJpdmF0ZSBpbnQgbV9wb3J0PTgwOwogICAgIGludCBwb3J0OwogICAgIHByaXZhdGUgU3RyaW5nIG1faG9zdD1uZXcgU3RyaW5nKCJsb2NhbCIpOwotICAgIGJvb2xlYW4gc2VydmVyU2V0PWZhbHNlOyAgICAKKyAgICBib29sZWFuIHNlcnZlclNldD1mYWxzZTsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgYnVmZmVyX3NpemU9ODE5MjsKICAgICBwcml2YXRlIFN0cmluZyB3c19yb290OwogICAgIFJlcG9ydGVyIHJlcG9ydGVyPW51bGw7Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyBTZW5kUmVxdWVzdChTdHJpbmcgd3Nfcm9vdCxTdHJpbmcgdGVzdHN1aXRlX2lkKQogICAgIHsKICAgICAgICAgdGhpcy53c19yb290PXdzX3Jvb3Q7CiAgICAgICAgIHRoaXMuVEVTVF9TVUlURV9JRD10ZXN0c3VpdGVfaWQ7CiAgICAgICAgIHJlcG9ydGVyID0gUmVwb3J0ZXIuZ2V0SW5zdGFuY2Uod3Nfcm9vdCk7CiAgICAgfQotICAgIAotICAgIAorCisKIAogCiAKQEAgLTc5LDkgKzc5LDkgQEAKICAgICAgICAgdGhpcy5tX3BvcnQ9cG9ydDsKICAgICAgICAgc2VydmVyU2V0PXRydWU7CiAgICAgfQotICAgIAotICAgIAotICAgIAorCisKKwogICAgIC8qKlRoaXMgaXMgYSB0aHJlYWQgc2FmZSBtZXRob2Qgc28gdGhhdCBtdWx0aXBsZSBzZXNzaW9uIG9mIHdlYiBhcHBsaWNhdGlvbiBjYW4gYmUgZ2VuZXJhdGVkIHNpbXVsYXRhbmVvc2x5LgogICAgICAqSXQgcGFyc2VzIHRoZSBieXRlIGFycmF5IGFuZCBleHRyYWN0IGluZGl2aWR1YWwgcmVxdWVzdHMuVXNlcyBNaW1lSGVhZGVyIGNsYXNzIGZvciBwYXJzaW5nIE1JTUUgaGVhZGVycy5IYW5kbGVzIHNlc3Npb24gbWFuYWdlbWVudCBieSBjaGVja2luZyBpZiBzZXJ2ZXIgaGFzIHNldCAiU2V0LUNvb2tpZSIgaW4gaXQncyByZXNwb25zZSBoZWFkZXIuCiAgICAgICpAcGFyYW0gaG9zdCBTdHJpbmcgaG9zdCBuYW1lIG9mIHRoZSB3ZWIgc2VydmVyIHdoZXJlIHdlYiBhcHBsaWNhdGlvbiBpcyB0byBiZSBydW4gZS5nLiBkc2luZ2guc2ZiYXkuc3VuLmNvbQpAQCAtODksMTYwICs4OSwxNjAgQEAKICAgICAgKkByZXR1cm4gaW50IFN0YXR1cyBDb2RlIG9mIHdlYiBzZXJ2ZXIgcmVzcG9uc2UuCiAgICAgICoKICAgICAgKi8KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIGludCBwcm9jZXNzVXJsKGJ5dGVbXSBmaWxlYnVmKSB7ICAgICAgICAKLQkgICAgaW50IHJlc3BvbnNlQ29kZT0wOwotCSAgICBpbnQgblJlcXVlc3Q9MDsKLQkgICAgaW50IGNvZGU9MDsKLQkgICAgcmVwb3J0ZXIuc2V0VGVzdFN1aXRlKFRFU1RfU1VJVEVfSUQsICJKMkVFIFdlYiBDbGllbnQiLCJUaGlzIHRlc3Qgc3VpdGUgaW50ZWdyYXRlcyB3ZWIgYW5kIGVqYiIpOworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgaW50IHByb2Nlc3NVcmwoYnl0ZVtdIGZpbGVidWYpIHsKKyAgICAgICAgaW50IHJlc3BvbnNlQ29kZT0wOworICAgICAgICBpbnQgblJlcXVlc3Q9MDsKKyAgICAgICAgaW50IGNvZGU9MDsKKyAgICAgICAgcmVwb3J0ZXIuc2V0VGVzdFN1aXRlKFRFU1RfU1VJVEVfSUQsICJKMkVFIFdlYiBDbGllbnQiLCJUaGlzIHRlc3Qgc3VpdGUgaW50ZWdyYXRlcyB3ZWIgYW5kIGVqYiIpOwogCiAKLQkgICAgdHJ5IHsKLQkJICAgIFNvY2tldCBzZXJ2ZXI9bnVsbDsKLQkJICAgIEluZXRBZGRyZXNzIHNlcnZlckFkZHJlc3M9bnVsbDsKLQkJICAgIEJ1ZmZlcmVkUmVhZGVyIGJ1ZmZlcmVkU3RyZWFtPW51bGw7Ci0JCSAgICBEYXRhT3V0cHV0U3RyZWFtIHNlcnZlcl9vdXQ9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTb2NrZXQgc2VydmVyPW51bGw7CisgICAgICAgICAgICBJbmV0QWRkcmVzcyBzZXJ2ZXJBZGRyZXNzPW51bGw7CisgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBidWZmZXJlZFN0cmVhbT1udWxsOworICAgICAgICAgICAgRGF0YU91dHB1dFN0cmVhbSBzZXJ2ZXJfb3V0PSBudWxsOwogCi0JCSAgICBpbnQgcG9zPTA7Ci0JCSAgICBpbnQgcmV0VmFsPTA7Ci0JCSAgICBkb3VibGUgY3VycmVudHN0YXJ0LGN1cnJlbnRzdG9wOwotCQkgICAgZG91YmxlIHRlbXA9MDsKLQkJICAgIGRvdWJsZSB0aW1lPTA7Ci0JCSAgICBjaGFyIGM7Ci0JCSAgICBTdHJpbmcgaG9zdE5hbWUgPSBuZXcgU3RyaW5nKCIiKTsKKyAgICAgICAgICAgIGludCBwb3M9MDsKKyAgICAgICAgICAgIGludCByZXRWYWw9MDsKKyAgICAgICAgICAgIGRvdWJsZSBjdXJyZW50c3RhcnQsY3VycmVudHN0b3A7CisgICAgICAgICAgICBkb3VibGUgdGVtcD0wOworICAgICAgICAgICAgZG91YmxlIHRpbWU9MDsKKyAgICAgICAgICAgIGNoYXIgYzsKKyAgICAgICAgICAgIFN0cmluZyBob3N0TmFtZSA9IG5ldyBTdHJpbmcoIiIpOwogCi0JCSAgICBpbnQgaT0wLGo9MDsKLQkJICAgIE1pbWVIZWFkZXIgbWg7Ci0JCSAgICB3aGlsZShpPGZpbGVidWYubGVuZ3RoKSB7Ci0JCQkgICAgYz0oY2hhcilmaWxlYnVmW2ldOworICAgICAgICAgICAgaW50IGk9MCxqPTA7CisgICAgICAgICAgICBNaW1lSGVhZGVyIG1oOworICAgICAgICAgICAgd2hpbGUoaTxmaWxlYnVmLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGM9KGNoYXIpZmlsZWJ1ZltpXTsKIAotCQkJICAgIHN3aXRjaChjKSB7Ci0JCQkJICAgIGNhc2UgJyEnOgorICAgICAgICAgICAgICAgIHN3aXRjaChjKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJyEnOgogCi0JCQkJCSAgICBpZihmaWxlYnVmW2krMV0gPT0nXG4nICYmIGZpbGVidWZbaSsyXT09JyEnKSB7Ci0JCQkJCQkgICAgblJlcXVlc3Q9blJlcXVlc3QrMTsKLQkJCQkJCSAgICBTdHJpbmcgdGVtcDE9bmV3IFN0cmluZyhmaWxlYnVmLGosaS0xLWopOwotCQkJCQkJICAgIG1oPW5ldyBNaW1lSGVhZGVyKHRlbXAxKTsKLQkJCQkJCSAgICBpZihzZXRDb29raWUpIHsKLQkJCQkJCQkgICAgLy9Db29raWU6IEpTRVNTSU9OSUQ9NDY1OUI2MjYzN0FDMTIzMjQ5NzJFQTUwNzIwNjQ0NjkKLQkJCQkJCQkgICAgLy9TdHJpbmcgZnVsbF9jb29raWVfdmFsdWU9IkpTRVNTSU9OSUQ9Iitjb29raWVfdmFsdWUrIjtQYXRoPSIrY29va2llX3BhdGg7Ci0JCQkJCQkJICAgIC8vU3RyaW5nIGZ1bGxfY29va2llX3ZhbHVlPSJKU0VTU0lPTklEPSIrY29va2llX3ZhbHVlOwotCQkJCQkJCSAgICBTdHJpbmcgZnVsbF9jb29raWVfdmFsdWU9Y29va2llX25hbWUrIj0iK2Nvb2tpZV92YWx1ZTsKLQkJCQkJCQkgICAgZnVsbF9jb29raWVfdmFsdWU9ZnVsbF9jb29raWVfdmFsdWUudHJpbSgpOwotCQkJCQkJCSAgICBTdHJpbmcgb2xkY29va2llPW1oLmdldCgiQ29va2llIik7Ci0JCQkJCQkJICAgIC8vICBTeXN0ZW0ub3V0LnByaW50bG4oIk9sZCBDb29raWUgdmFsdWUiK29sZGNvb2tpZSk7Ci0JCQkJCQkJICAgIG1oLnB1dCgiQ29va2llIixmdWxsX2Nvb2tpZV92YWx1ZSk7Ci0JCQkJCQkgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYoZmlsZWJ1ZltpKzFdID09J1xuJyAmJiBmaWxlYnVmW2krMl09PSchJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5SZXF1ZXN0PW5SZXF1ZXN0KzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRlbXAxPW5ldyBTdHJpbmcoZmlsZWJ1ZixqLGktMS1qKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaD1uZXcgTWltZUhlYWRlcih0ZW1wMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2V0Q29va2llKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQ29va2llOiBKU0VTU0lPTklEPTQ2NTlCNjI2MzdBQzEyMzI0OTcyRUE1MDcyMDY0NDY5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vU3RyaW5nIGZ1bGxfY29va2llX3ZhbHVlPSJKU0VTU0lPTklEPSIrY29va2llX3ZhbHVlKyI7UGF0aD0iK2Nvb2tpZV9wYXRoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1N0cmluZyBmdWxsX2Nvb2tpZV92YWx1ZT0iSlNFU1NJT05JRD0iK2Nvb2tpZV92YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGZ1bGxfY29va2llX3ZhbHVlPWNvb2tpZV9uYW1lKyI9Iitjb29raWVfdmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxfY29va2llX3ZhbHVlPWZ1bGxfY29va2llX3ZhbHVlLnRyaW0oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG9sZGNvb2tpZT1taC5nZXQoIkNvb2tpZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgU3lzdGVtLm91dC5wcmludGxuKCJPbGQgQ29va2llIHZhbHVlIitvbGRjb29raWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaC5wdXQoIkNvb2tpZSIsZnVsbF9jb29raWVfdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotCQkJCQkJICAgIGludCBzdElkeCA9IHRlbXAxLmluZGV4T2YoIkhvc3Q6ICIpOwotCQkJCQkJICAgIHN0SWR4Kz01OwotCQkJCQkJICAgIFN0cmluZyB0cCA9IHRlbXAxLnN1YnN0cmluZyhzdElkeCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0SWR4ID0gdGVtcDEuaW5kZXhPZigiSG9zdDogIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RJZHgrPTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRwID0gdGVtcDEuc3Vic3RyaW5nKHN0SWR4KTsKIAotCQkJCQkJICAgIGludCBlbmRJZHggPSB0cC5pbmRleE9mKCdcbicpOwotCQkJCQkJICAgIGVuZElkeCs9c3RJZHg7Ci0JCQkJCQkgICAgaG9zdE5hbWUgPSB0ZW1wMS5zdWJzdHJpbmcoc3RJZHgsIGVuZElkeCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVuZElkeCA9IHRwLmluZGV4T2YoJ1xuJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kSWR4Kz1zdElkeDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0TmFtZSA9IHRlbXAxLnN1YnN0cmluZyhzdElkeCwgZW5kSWR4KTsKIAotCQkJCQkJICAgIGludCBwb3J0SWR4PWhvc3ROYW1lLmluZGV4T2YoJzonKTsKLQkJCQkJCSAgICBTdHJpbmcgc3RycG9ydD1uZXcgU3RyaW5nKCk7Ci0JCQkJCQkgICAgaWYocG9ydElkeCA+IDApewotCQkJCQkJICAgIHN0cnBvcnQ9aG9zdE5hbWUuc3Vic3RyaW5nKHBvcnRJZHgrMSkudHJpbSgpOwotCQkJCQkJCSAgICBob3N0TmFtZT1ob3N0TmFtZS5zdWJzdHJpbmcoMCxwb3J0SWR4KTsKLQkJCQkJCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigicG9ydCBpcyIrc3RycG9ydCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnRJZHg9aG9zdE5hbWUuaW5kZXhPZignOicpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdHJwb3J0PW5ldyBTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihwb3J0SWR4ID4gMCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RycG9ydD1ob3N0TmFtZS5zdWJzdHJpbmcocG9ydElkeCsxKS50cmltKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3ROYW1lPWhvc3ROYW1lLnN1YnN0cmluZygwLHBvcnRJZHgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJwb3J0IGlzIitzdHJwb3J0KTsKIH0KLQkJCQkJCSAgICBob3N0TmFtZSA9IGhvc3ROYW1lLnRyaW0oKTsKLQkJCQkJCSAgICBwb3J0PW5ldyBJbnRlZ2VyKHN0cnBvcnQpLmludFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdE5hbWUgPSBob3N0TmFtZS50cmltKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydD1uZXcgSW50ZWdlcihzdHJwb3J0KS5pbnRWYWx1ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHNlcnZlclNldCBpcyB0cnVlLHRoZW4gdXNlIG1faG9zdCBhbmQgbV9wb3J0IGZyb20gdGhlIGNvbW1hbmRsaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9vdGhlcndpc2UgcmVhZCBob3N0IGFuZCBwb3J0IGZyb20gdGhlIHNjcmlwdC50eHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzZXJ2ZXJTZXQpewotCQkJCQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSFRUUCBwb3J0IDoiK21fcG9ydCk7Ci0JCQkJCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJIVFRQIGhvc3RuYW1lIDoiK21faG9zdCk7Ci0JCQkJCQkgICAgc2VydmVyPW5ldyBTb2NrZXQobV9ob3N0LG1fcG9ydCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIVFRQIHBvcnQgOiIrbV9wb3J0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhUVFAgaG9zdG5hbWUgOiIrbV9ob3N0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXI9bmV3IFNvY2tldChtX2hvc3QsbV9wb3J0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcj1uZXcgU29ja2V0KGhvc3ROYW1lLHBvcnQpOwotCQkJCQkJICAgIHNlcnZlckFkZHJlc3M9c2VydmVyLmdldEluZXRBZGRyZXNzKCk7Ci0JCQkJCQkgICAgYnVmZmVyZWRTdHJlYW09bmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihzZXJ2ZXIuZ2V0SW5wdXRTdHJlYW0oKSkpOwotCQkJCQkJICAgIHNlcnZlcl9vdXQ9IG5ldyBEYXRhT3V0cHV0U3RyZWFtKHNlcnZlci5nZXRPdXRwdXRTdHJlYW0oKSk7Ci0JCQkJCQkgICAgU3RyaW5nIHJlcT1uZXcgU3RyaW5nKCk7Ci0JCQkJCQkgICAgaWYobWguaWZQT1NUUmVxdWVzdCgpKSB7Ci0JCQkJCQkJICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJQT1NUIFJFUVVFU1QiKTsKLQkJCQkJCQkgICAgcmVxPW1oLmdldFJlcXVlc3RIZWFkZXIoKSsgQ1JMRiArIG1oK0NSTEYrIG1oLmdldFBvc3REYXRhKCkrQ1JMRitDUkxGOwotCQkJCQkJCSAgICAvL1N0cmluZyBwb3N0PSJQT1NUIiArICIgIiArIHNlcnZlcl91cmwrICIgIiArICJIVFRQLzEuMCIgKyBDUkxGICsgaW5taAotCQkJCQkJCSAgICAvLysgQ1JMRiArIHBvc3RkYXRhKyBDUkxGK0NSTEY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQWRkcmVzcz1zZXJ2ZXIuZ2V0SW5ldEFkZHJlc3MoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJlZFN0cmVhbT1uZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKHNlcnZlci5nZXRJbnB1dFN0cmVhbSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX291dD0gbmV3IERhdGFPdXRwdXRTdHJlYW0oc2VydmVyLmdldE91dHB1dFN0cmVhbSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmVxPW5ldyBTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihtaC5pZlBPU1RSZXF1ZXN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBPU1QgUkVRVUVTVCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXE9bWguZ2V0UmVxdWVzdEhlYWRlcigpKyBDUkxGICsgbWgrQ1JMRisgbWguZ2V0UG9zdERhdGEoKStDUkxGK0NSTEY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vU3RyaW5nIHBvc3Q9IlBPU1QiICsgIiAiICsgc2VydmVyX3VybCsgIiAiICsgIkhUVFAvMS4wIiArIENSTEYgKyBpbm1oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vKyBDUkxGICsgcG9zdGRhdGErIENSTEYrQ1JMRjsKIAotCQkJCQkJICAgIH0KLQkJCQkJCSAgICBlbHNlCi0JCQkJCQkJICAgIHJlcT1taC5nZXRSZXF1ZXN0SGVhZGVyKCkrIENSTEYgKyBtaCArIENSTEYgKyBDUkxGOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcT1taC5nZXRSZXF1ZXN0SGVhZGVyKCkrIENSTEYgKyBtaCArIENSTEYgKyBDUkxGOwogCi0JCQkJCQkgICAgU3RyaW5nIHJlcXVlc3RMaW5lPW1oLmdldFJlcXVlc3RIZWFkZXIoKTsKLQkJCQkJCSAgICBpbnQgZnNwPXJlcXVlc3RMaW5lLmluZGV4T2YoJyAnKTsKLQkJCQkJCSAgICBpbnQgbnNwPXJlcXVlc3RMaW5lLmluZGV4T2YoJyAnLGZzcCsxKTsKLQkJCQkJCSAgICBpbnQgZW9sPXJlcXVlc3RMaW5lLmluZGV4T2YoJ1xuJyk7Ci0JCQkJCQkgICAgcmVxdWVzdExpbmU9cmVxdWVzdExpbmUuc3Vic3RyaW5nKGZzcCsxLG5zcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlcXVlc3RMaW5lPW1oLmdldFJlcXVlc3RIZWFkZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnNwPXJlcXVlc3RMaW5lLmluZGV4T2YoJyAnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnNwPXJlcXVlc3RMaW5lLmluZGV4T2YoJyAnLGZzcCsxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW9sPXJlcXVlc3RMaW5lLmluZGV4T2YoJ1xuJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdExpbmU9cmVxdWVzdExpbmUuc3Vic3RyaW5nKGZzcCsxLG5zcCk7CiAKLQkJCQkJCSAgICAvL0ZvbGxvd2luZyBhcmUgZGVidWcgb3V0cHV0IHN0YXRlbWVudHMKLQkJCQkJCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiJSUlJSUlJSUlJSUlJSUlJSUlJSUlJVJlcXVlc3QgU3RyaW5nIFNlbnQgdG8gU2VydmVyJSUlJSUlJSUlJSUlJSUlJSUlJSIpOwotCQkJCQkJICAgIC8vU3lzdGVtLm91dC5wcmludGxuKG1oLmdldFJlcXVlc3RIZWFkZXIoKSk7Ci0JCQkJCQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4obWgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vRm9sbG93aW5nIGFyZSBkZWJ1ZyBvdXRwdXQgc3RhdGVtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCIlJSUlJSUlJSUlJSUlJSUlJSUlJSUlUmVxdWVzdCBTdHJpbmcgU2VudCB0byBTZXJ2ZXIlJSUlJSUlJSUlJSUlJSUlJSUlIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4obWguZ2V0UmVxdWVzdEhlYWRlcigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihtaCk7CiAKLQkJCQkJCSAgICB0cnkgewotCQkJCQkJCSAgICBpZihzZXJ2ZXJfb3V0IT1udWxsKQotCQkJCQkJCQkgICAgc2VydmVyX291dC53cml0ZShyZXEuZ2V0Qnl0ZXMoKSk7Ci0JCQkJCQkJICAgIGVsc2UgU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2ZXJfb3V0IGlzIG51bGwiKTsKLQkJCQkJCSAgICB9Ci0JCQkJCQkgICAgY2F0Y2goSU9FeGNlcHRpb24gZSkgewotCQkJCQkJCSAgICBTdHJpbmcgZXJyTXNnPWUuZ2V0TWVzc2FnZSgpOwotCQkJCQkJCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oZS5nZXRNZXNzYWdlKCkpOwotCQkJCQkJICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzZXJ2ZXJfb3V0IT1udWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX291dC53cml0ZShyZXEuZ2V0Qnl0ZXMoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2ZXJfb3V0IGlzIG51bGwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2goSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZXJyTXNnPWUuZ2V0TWVzc2FnZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotCQkJCQkJICAgIGNvZGUgPSByZWFkSGVhZGVyKGJ1ZmZlcmVkU3RyZWFtKTsKLQkJCQkJCSAgICByZXBvcnRlci5hZGRUZXN0KFRFU1RfU1VJVEVfSUQscmVxdWVzdExpbmUgKTsKLQkJCQkJCSAgICByZXBvcnRlci5hZGRUZXN0Q2FzZShURVNUX1NVSVRFX0lELHJlcXVlc3RMaW5lLCByZXF1ZXN0TGluZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSByZWFkSGVhZGVyKGJ1ZmZlcmVkU3RyZWFtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlci5hZGRUZXN0KFRFU1RfU1VJVEVfSUQscmVxdWVzdExpbmUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlci5hZGRUZXN0Q2FzZShURVNUX1NVSVRFX0lELHJlcXVlc3RMaW5lLCByZXF1ZXN0TGluZSApOwogCiAKLQkJCQkJCSAgICBpZihjb2RlPT01MDAgfHwgY29kZT09NDA0KSB7Ci0JCQkJCQkJICAgIGlmKGNvZGU9PTQwNCl7Ci0JCQkJCQkJCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldlYlNlcnZlciByZXR1cm5lZCBlcnJvciBjb2RlIDQwNCIpOwotCQkJCQkJCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXF1ZXN0IFJlc291cmNlIG5vdCBhdmFpbGFibGUiKTsKLQkJCQkJCQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlcmUgaXMgc29tZSBkZXBsb3ltZW50IGVycm9yIik7Ci0JCQkJCQkJICAgIH0KLQkJCQkJCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIhIVNlcnZlciByZXR1cm5lZCBlcnJvci4uQXBwbGljYXRpb24gRXhpdGluZyIpOwotCQkJCQkJCSAgICByZXBvcnRlci5zZXRUZXN0Q2FzZVN0YXR1cyhURVNUX1NVSVRFX0lELHJlcXVlc3RMaW5lLHJlcXVlc3RMaW5lLFJlcG9ydGVyQ29uc3RhbnRzLkZBSUwpOwotCQkJCQkJCSAgICAvL3N0YXQuYWRkU3RhdHVzKCJXRUJDTElFTlQgIisgcmVxdWVzdExpbmUsc3RhdC5GQUlMKTsKLQkJCQkJCQkgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfU1VJVEVfSUQrIlx0IityZXF1ZXN0TGluZSsiXHQgRkFJTCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvZGU9PTUwMCB8fCBjb2RlPT00MDQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29kZT09NDA0KXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2ViU2VydmVyIHJldHVybmVkIGVycm9yIGNvZGUgNDA0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlcXVlc3QgUmVzb3VyY2Ugbm90IGF2YWlsYWJsZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGVyZSBpcyBzb21lIGRlcGxveW1lbnQgZXJyb3IiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiEhU2VydmVyIHJldHVybmVkIGVycm9yLi5BcHBsaWNhdGlvbiBFeGl0aW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVyLnNldFRlc3RDYXNlU3RhdHVzKFRFU1RfU1VJVEVfSUQscmVxdWVzdExpbmUscmVxdWVzdExpbmUsUmVwb3J0ZXJDb25zdGFudHMuRkFJTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vc3RhdC5hZGRTdGF0dXMoIldFQkNMSUVOVCAiKyByZXF1ZXN0TGluZSxzdGF0LkZBSUwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9TVUlURV9JRCsiXHQiK3JlcXVlc3RMaW5lKyJcdCBGQUlMIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlci5nZW5lcmF0ZVZhbGlkUmVwb3J0KCk7Ci0JCQkJCQkJICAgIHJldHVybiAwOwotCQkJCQkJICAgIH0KLQkJCQkJCSAgICBpZiAoY29kZT09MjAwKXsKLQkJCQkJCQkgICAgcmVwb3J0ZXIuc2V0VGVzdENhc2VTdGF0dXMoVEVTVF9TVUlURV9JRCxyZXF1ZXN0TGluZSxyZXF1ZXN0TGluZSxSZXBvcnRlckNvbnN0YW50cy5QQVNTKTsKLQkJCQkJCQkgICAgLy9zdGF0LmFkZFN0YXR1cygiV0VCQ0xJRU5UIisiICIrIHJlcXVlc3RMaW5lLHN0YXQuUEFTUyk7Ci0JCQkJCQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX1NVSVRFX0lEKyJcdCIrcmVxdWVzdExpbmUrIlx0IisiUEFTUyIpOwotCQkJCQkJICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlPT0yMDApeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlci5zZXRUZXN0Q2FzZVN0YXR1cyhURVNUX1NVSVRFX0lELHJlcXVlc3RMaW5lLHJlcXVlc3RMaW5lLFJlcG9ydGVyQ29uc3RhbnRzLlBBU1MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3N0YXQuYWRkU3RhdHVzKCJXRUJDTElFTlQiKyIgIisgcmVxdWVzdExpbmUsc3RhdC5QQVNTKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfU1VJVEVfSUQrIlx0IityZXF1ZXN0TGluZSsiXHQiKyJQQVNTIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0JCQkJCSAgICB9Ci0JCQkJCSAgICBpPWkrMzsKLQkJCQkJICAgIGo9aTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGk9aSszOworICAgICAgICAgICAgICAgICAgICAgICAgaj1pOwogCi0JCQkJICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAKLQkJCQkJICAgIGk9aSsxOwotCQkJICAgIH0KLQkJCSAgICBpZih0aW1lPj10ZW1wKQotCQkJCSAgICB0ZW1wPXRpbWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpPWkrMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYodGltZT49dGVtcCkKKyAgICAgICAgICAgICAgICAgICAgdGVtcD10aW1lOwogCi0JCSAgICB9Ci0JCSAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIndoaWxlIGxvb3AgZW5kZWQiKTsKLQkJICAgIGJ1ZmZlcmVkU3RyZWFtLmNsb3NlKCk7Ci0JCSAgICBzZXJ2ZXJfb3V0LmNsb3NlKCk7Ci0JCSAgICByZXBvcnRlci5nZW5lcmF0ZVZhbGlkUmVwb3J0KCk7Ci0JCSAgICByZXR1cm4gY29kZTsKLQkgICAgfQotCSAgICBjYXRjaChFeGNlcHRpb24gZSkgewotCQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJICAgIFN0cmluZyBtc2c9ZS5nZXRNZXNzYWdlKCk7Ci0JICAgIH0KLQkgICAgcmV0dXJuIGNvZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIndoaWxlIGxvb3AgZW5kZWQiKTsKKyAgICAgICAgICAgIGJ1ZmZlcmVkU3RyZWFtLmNsb3NlKCk7CisgICAgICAgICAgICBzZXJ2ZXJfb3V0LmNsb3NlKCk7CisgICAgICAgICAgICByZXBvcnRlci5nZW5lcmF0ZVZhbGlkUmVwb3J0KCk7CisgICAgICAgICAgICByZXR1cm4gY29kZTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIFN0cmluZyBtc2c9ZS5nZXRNZXNzYWdlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN5bmNocm9uaXplZCBpbnQgcmVhZEhlYWRlcihCdWZmZXJlZFJlYWRlciBpblN0cmVhbSkgewogICAgICAgICBpbnQgc3RhdHVzPTA7CiAgICAgICAgIFN0cmluZyByZWFzb25QaHJhc2UgPSBuZXcgU3RyaW5nKCIiKTsKQEAgLTI1Miw3ICsyNTIsNyBAQAogICAgICAgICAgICAgc3Q9aW5TdHJlYW0ucmVhZExpbmUoKTsKICAgICAgICAgICAgICAgICAvKmlmKHN0IT1udWxsKQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKipTZXJ2ZXIgUmVzcG9uc2UgU3RhcnRzICoqKioqXG4iK3N0ICk7Ki8KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvL3N0IHNob3VsZCBiZSBvZiBmb3JtIEhUVFAvMS4xIDIwMCBPSwogICAgICAgICAgICAgaW50IGZzcD1zdC5pbmRleE9mKCcgJyk7CiAgICAgICAgICAgICBpbnQgbnNwPXN0LmluZGV4T2YoJyAnLGZzcCsxKTsKQEAgLTI2MCw3ICsyNjAsNyBAQAogICAgICAgICAgICAgc3RhdHVzPUludGVnZXIucGFyc2VJbnQoc3Quc3Vic3RyaW5nKGZzcCsxLG5zcCkpOwogICAgICAgICAgICAgU3RyaW5nIGxpbmU7CiAgICAgICAgICAgICB3aGlsZSgobGluZT1pblN0cmVhbS5yZWFkTGluZSgpKSE9bnVsbCkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy9UcnlpbmcgdG8gcGFyc2UKICAgICAgICAgICAgICAgICAvL1NldC1Db29raWU6IEpTRVNTSU9OSUQ9RTY0OUE5NDk2MEVCMDMwNENGQTk4NTA2N0VGOTA4OTM7UGF0aD0vYm9va3N0b3JlMQogICAgICAgICAgICAgICAgIGlmKGxpbmUuc3RhcnRzV2l0aCgiU2V0LUNvb2tpZToiKSAmJiAhc2V0Q29va2llKSB7CkBAIC0yNjgsNyArMjY4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXR0aW5nIGNvb2tpZSBmcm9tIHNlcnZlciIpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gIFN5c3RlbS5vdXQucHJpbnRsbigiQ09PS0lFU1x0IitsaW5lKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBpbnQgY29sb249bGluZS5pbmRleE9mKCc6Jyk7CiAgICAgICAgICAgICAgICAgICAgIGludCBmaXJzdEVxdWFscz1saW5lLmluZGV4T2YoJz0nKTsKICAgICAgICAgICAgICAgICAgICAgaW50IHNlbWljb2xvbj1saW5lLmluZGV4T2YoJzsnKTsKQEAgLTI4MSwyNCArMjgxLDI0IEBACiAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBzZXJ2ZXJfcmVzcG9uc2U9bmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfcmVzcG9uc2UuYXBwZW5kKGxpbmUpOwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmVzcG9uc2U9c2VydmVyX3Jlc3BvbnNlLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAKKworCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqU2VydmVyIFJlc3BvbnNlIEVuZHMqKioqKioqKioqKioqKioqKiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgfQogICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLSBSZWFkIEhlYWRlciBGYWlsLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yIGRldGFpbHM6IiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvd2VidGVzdC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci93ZWJ0ZXN0L1dlYlRlc3QuamF2YQppbmRleCAyMjBkMDkyLi5iNDUwNjI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci93ZWJ0ZXN0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci93ZWJ0ZXN0L1dlYlRlc3QuamF2YQpAQCAtMzIsMTYgKzMyLDE2IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgdGVzdHN1aXRlX2lkPSIiOwogCiAgICAgV2ViVGVzdCgpe30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RTdWl0ZUlEKFN0cmluZyB0ZXN0c3VpdGVpZCkKICAgICB7CiAgICAgICAgIHRoaXMudGVzdHN1aXRlX2lkPXRlc3RzdWl0ZWlkOwotICAgIH0gICAgCisgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0UmVzdWx0RmlsZUxvY2F0aW9uKFN0cmluZyB3b3Jrc3BhY2Vfcm9vdCkKICAgICB7CiAgICAgICAgIHRoaXMud3Nfcm9vdD13b3Jrc3BhY2Vfcm9vdDsKLSAgICB9ICAgIAorICAgIH0KIAogICAgIC8qKgogICAgICAqUmVhZHMgc2NyaXB0IGZpbGUgYW5kIGNvbnZlcnRzIGludG8gYSBieXRlIGFycmF5LlNlbmRzIGJ5dGUgYXJyYXkgdG8gU2VuZFJlcXVlc3QgY2xhc3MuCkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgICAgICBmaW4uY2xvc2UoKTsKICAgICAgICAgICAgIFNlbmRSZXF1ZXN0IHNlbmRSZXF1ZXN0PW5ldyBTZW5kUmVxdWVzdCh3c19yb290LHRlc3RzdWl0ZV9pZCk7CiAgICAgICAgICAgICBpbnQgcG9ydD1uZXcgSW50ZWdlcihzX3BvcnQpLmludFZhbHVlKCk7Ci0JICAgIHNlbmRSZXF1ZXN0LnNldFNlcnZlclByb3BlcnRpZXMoc19ob3N0LHBvcnQpOworICAgICAgICBzZW5kUmVxdWVzdC5zZXRTZXJ2ZXJQcm9wZXJ0aWVzKHNfaG9zdCxwb3J0KTsKICAgICAgICAgICAgIHNlbmRSZXF1ZXN0LnByb2Nlc3NVcmwoYnVmZmVyKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkKQEAgLTg0LDExICs4NCwxMSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBbXSBhcmdzKQogICAgIHsKLSAgICAgICAgCisKICAgICAgICAgaWYoYXJncy5sZW5ndGg8NCkKICAgICAgICAgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJ1c2FnZTpcdCBXZWJUZXN0IDw8ZnVsbF9maWxlX25hbWU+PiA8PHdlYl9zZXJ2ZXJfaG9zdF9uYW1lPj4gPDx3ZWJfc2VydmVyX3BvcnQ+PiA8PG91dHB1dGZpbGU+PiA8PHRlc3RzdWl0ZWlkPj4iKTsKQEAgLTEwMCwxMiArMTAwLDEyIEBACiAgICAgICAgIFN0cmluZyB3c19yb290PWFyZ3NbM107CiAgICAgICAgIFN0cmluZyB0ZXN0c3VpdGVpZD1hcmdzWzRdOwogCi0gICAgICAgIFdlYlRlc3Qgd2ViVGVzdD1uZXcgV2ViVGVzdCgpOyAgICAgICAgCisgICAgICAgIFdlYlRlc3Qgd2ViVGVzdD1uZXcgV2ViVGVzdCgpOwogICAgICAgICB3ZWJUZXN0LnNldFJlc3VsdEZpbGVMb2NhdGlvbih3c19yb290KTsKICAgICAgICAgd2ViVGVzdC5zZXRUZXN0U3VpdGVJRCh0ZXN0c3VpdGVpZCk7CiAgICAgICAgIHdlYlRlc3QucmVhZEZpbGUoZmlsZSxzZXJ2ZXJob3N0LHNlcnZlcnBvcnQpOwotICAgICAgICAKKwogICAgIH0KIH0KIAotICAgICAgICAgICAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvbXVsdGlCZWFuc1htbC9lamIxL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL211bHRpQmVhbnNYbWwvZWpiMS9wb20ueG1sCmluZGV4IDM4OWU4YWQuLjM5YWUzNjAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvbXVsdGlCZWFuc1htbC9lamIxL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9tdWx0aUJlYW5zWG1sL2VqYjEvcG9tLnhtbApAQCAtMzEsNyArMzEsNyBAQAogICAgIDxhcnRpZmFjdElkPmVqYjE8L2FydGlmYWN0SWQ+CiAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAKLSAgICA8bmFtZT5HbGFzc0Zpc2ggRWpiMSBXaXRoIFNwZWNpZmljIGJlYW5zLnhtbDwvbmFtZT4gIAorICAgIDxuYW1lPkdsYXNzRmlzaCBFamIxIFdpdGggU3BlY2lmaWMgYmVhbnMueG1sPC9uYW1lPgogCiAgICAgPGRlcGVuZGVuY2llcz4KICAgICAgICAgPGRlcGVuZGVuY3k+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL211bHRpQmVhbnNYbWwvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvY2RpL2Nhc2VzL2RldnRlc3RzL211bHRpZWpiMS9JbnRlcmNlcHRlZEVqYjEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvbXVsdGlCZWFuc1htbC9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9jZGkvY2FzZXMvZGV2dGVzdHMvbXVsdGllamIxL0ludGVyY2VwdGVkRWpiMS5qYXZhCmluZGV4IGQwNTkwOTguLmZmM2UyODMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvbXVsdGlCZWFuc1htbC9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9jZGkvY2FzZXMvZGV2dGVzdHMvbXVsdGllamIxL0ludGVyY2VwdGVkRWpiMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvbXVsdGlCZWFuc1htbC9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9jZGkvY2FzZXMvZGV2dGVzdHMvbXVsdGllamIxL0ludGVyY2VwdGVkRWpiMS5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgamFrYXJ0YS5pbmplY3QuSW5qZWN0OwogCiAvKioKLSAqIAorICoKICAqIEBhdXRob3IgandlbGxzCiAgKgogICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL211bHRpQmVhbnNYbWwvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvY2RpL2Nhc2VzL2RldnRlc3RzL211bHRpZWpiMS9JbnRlcmNlcHRvcjEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvbXVsdGlCZWFuc1htbC9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9jZGkvY2FzZXMvZGV2dGVzdHMvbXVsdGllamIxL0ludGVyY2VwdG9yMS5qYXZhCmluZGV4IDQ0MjFiNTMuLmJlODc0YjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvbXVsdGlCZWFuc1htbC9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9jZGkvY2FzZXMvZGV2dGVzdHMvbXVsdGllamIxL0ludGVyY2VwdG9yMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvbXVsdGlCZWFuc1htbC9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9jZGkvY2FzZXMvZGV2dGVzdHMvbXVsdGllamIxL0ludGVyY2VwdG9yMS5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiBASW50ZXJjZXB0b3IKIEBSZWNvcmRpbmdJbnRlcmNlcHRvcgogcHVibGljIGNsYXNzIEludGVyY2VwdG9yMSB7Ci0gICAgCisKICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBpbnRlcmNlcHQoSW52b2NhdGlvbkNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC0zNywxMCArMzcsMTAgQEAKICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT0gMSB8fCAhKHBhcmFtc1swXSBpbnN0YW5jZW9mIExpc3QpKSB7CiAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5wcm9jZWVkKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgTGlzdDxTdHJpbmc+IHBhcmFtID0gKExpc3Q8U3RyaW5nPikgcGFyYW1zWzBdOwogICAgICAgICBwYXJhbS5hZGQoTXVsdGlCZWFuc1htbEVqYjEuSU5URVJDRVBUT1IxKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNvbnRleHQucHJvY2VlZCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9tdWx0aUJlYW5zWG1sL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2NkaS9jYXNlcy9kZXZ0ZXN0cy9tdWx0aWVqYjEvTXVsdGlCZWFuc1htbEVqYjEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvbXVsdGlCZWFuc1htbC9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9jZGkvY2FzZXMvZGV2dGVzdHMvbXVsdGllamIxL011bHRpQmVhbnNYbWxFamIxLmphdmEKaW5kZXggOWRmMzQzYS4uZGM4MmY5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9tdWx0aUJlYW5zWG1sL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2NkaS9jYXNlcy9kZXZ0ZXN0cy9tdWx0aWVqYjEvTXVsdGlCZWFuc1htbEVqYjEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL211bHRpQmVhbnNYbWwvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvY2RpL2Nhc2VzL2RldnRlc3RzL211bHRpZWpiMS9NdWx0aUJlYW5zWG1sRWpiMS5qYXZhCkBAIC0yNSwxMCArMjUsMTAgQEAKIHB1YmxpYyBpbnRlcmZhY2UgTXVsdGlCZWFuc1htbEVqYjEgewogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIElOVEVSQ0VQVE9SMSA9ICJJbnRlcmNlcHRvcjEiOwogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIENBTExfTUUxID0gIkNhbGxNZTEiOwotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2Qgc2hvdWxkIGhhdmUgYWxsIGludGVyY2VwdG9ycyBsaXN0ZWQgaW4gdGhlIHJldHVybiBsaXN0Ci0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gY2FsbGVyTGlzdCBBbiBlbXB0eSwgbm9uLW51bGwgbGlzdAogICAgICAqIEByZXR1cm4gVGhlIGxpc3Qgb2YgYWxsIHRoZSBjbGFzc2VzIHRoYXQgaW50ZXJjZXB0ZWQgKGFuZCB0aGUgZmluYWwgaW1wbCBjbGFzcykgdGhpcyBjYWxsCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL211bHRpQmVhbnNYbWwvZWpiMS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvYmVhbnMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9tdWx0aUJlYW5zWG1sL2VqYjEvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL2JlYW5zLnhtbAppbmRleCA4YWZkYzMyLi5iNGQ3MzRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL211bHRpQmVhbnNYbWwvZWpiMS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvYmVhbnMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvbXVsdGlCZWFuc1htbC9lamIxL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9iZWFucy54bWwKQEAgLTIyLDUgKzIyLDUgQEAKICAgICAgICA8aW50ZXJjZXB0b3JzPgogICAgICAgICAgICA8Y2xhc3M+Y29tLm9yYWNsZS5jZGkuY2FzZXMuZGV2dGVzdHMubXVsdGllamIxLkludGVyY2VwdG9yMTwvY2xhc3M+CiAgICAgICAgPC9pbnRlcmNlcHRvcnM+Ci0gICAgICAgCisKIDwvYmVhbnM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL211bHRpQmVhbnNYbWwvZWpiMi9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9tdWx0aUJlYW5zWG1sL2VqYjIvcG9tLnhtbAppbmRleCAxYzkyNWU3Li4zMjk4YzQxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL211bHRpQmVhbnNYbWwvZWpiMi9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvbXVsdGlCZWFuc1htbC9lamIyL3BvbS54bWwKQEAgLTMxLDcgKzMxLDcgQEAKICAgICA8YXJ0aWZhY3RJZD5lamIyPC9hcnRpZmFjdElkPgogICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogCi0gICAgPG5hbWU+R2xhc3NGaXNoIEVqYjIgV2l0aCBTcGVjaWZpYyBiZWFucy54bWw8L25hbWU+ICAKKyAgICA8bmFtZT5HbGFzc0Zpc2ggRWpiMiBXaXRoIFNwZWNpZmljIGJlYW5zLnhtbDwvbmFtZT4KIAogICAgIDxkZXBlbmRlbmNpZXM+CiAgICAgICAgIDxkZXBlbmRlbmN5PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9tdWx0aUJlYW5zWG1sL2VqYjIvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2NkaS9jYXNlcy9kZXZ0ZXN0cy9tdWx0aWVqYjIvSW50ZXJjZXB0ZWRFamIyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL211bHRpQmVhbnNYbWwvZWpiMi9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvY2RpL2Nhc2VzL2RldnRlc3RzL211bHRpZWpiMi9JbnRlcmNlcHRlZEVqYjIuamF2YQppbmRleCBkYzBjYzBhLi4yMmQwZTkyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL211bHRpQmVhbnNYbWwvZWpiMi9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvY2RpL2Nhc2VzL2RldnRlc3RzL211bHRpZWpiMi9JbnRlcmNlcHRlZEVqYjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL211bHRpQmVhbnNYbWwvZWpiMi9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvY2RpL2Nhc2VzL2RldnRlc3RzL211bHRpZWpiMi9JbnRlcmNlcHRlZEVqYjIuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogaW1wb3J0IGpha2FydGEuaW5qZWN0LkluamVjdDsKIAogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIGp3ZWxscwogICovCiBAU3RhdGVsZXNzCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL211bHRpQmVhbnNYbWwvZWpiMi9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvY2RpL2Nhc2VzL2RldnRlc3RzL211bHRpZWpiMi9JbnRlcmNlcHRvcjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvbXVsdGlCZWFuc1htbC9lamIyL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9jZGkvY2FzZXMvZGV2dGVzdHMvbXVsdGllamIyL0ludGVyY2VwdG9yMi5qYXZhCmluZGV4IDEwNGQyOWYuLjMwMGJmZmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvbXVsdGlCZWFuc1htbC9lamIyL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9jZGkvY2FzZXMvZGV2dGVzdHMvbXVsdGllamIyL0ludGVyY2VwdG9yMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvbXVsdGlCZWFuc1htbC9lamIyL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9jZGkvY2FzZXMvZGV2dGVzdHMvbXVsdGllamIyL0ludGVyY2VwdG9yMi5qYXZhCkBAIC0zNiwxMCArMzYsMTAgQEAKICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT0gMSB8fCAhKHBhcmFtc1swXSBpbnN0YW5jZW9mIExpc3QpKSB7CiAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5wcm9jZWVkKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgTGlzdDxTdHJpbmc+IHBhcmFtID0gKExpc3Q8U3RyaW5nPikgcGFyYW1zWzBdOwogICAgICAgICBwYXJhbS5hZGQoTXVsdGlCZWFuc1htbEVqYjIuSU5URVJDRVBUT1IyKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNvbnRleHQucHJvY2VlZCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9tdWx0aUJlYW5zWG1sL2VqYjIvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2NkaS9jYXNlcy9kZXZ0ZXN0cy9tdWx0aWVqYjIvTXVsdGlCZWFuc1htbEVqYjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvbXVsdGlCZWFuc1htbC9lamIyL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9jZGkvY2FzZXMvZGV2dGVzdHMvbXVsdGllamIyL011bHRpQmVhbnNYbWxFamIyLmphdmEKaW5kZXggNzUzOTQ2NC4uZTVmNDA2YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9tdWx0aUJlYW5zWG1sL2VqYjIvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2NkaS9jYXNlcy9kZXZ0ZXN0cy9tdWx0aWVqYjIvTXVsdGlCZWFuc1htbEVqYjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL211bHRpQmVhbnNYbWwvZWpiMi9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvY2RpL2Nhc2VzL2RldnRlc3RzL211bHRpZWpiMi9NdWx0aUJlYW5zWG1sRWpiMi5qYXZhCkBAIC0yNSwxMCArMjUsMTAgQEAKIHB1YmxpYyBpbnRlcmZhY2UgTXVsdGlCZWFuc1htbEVqYjIgewogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIElOVEVSQ0VQVE9SMiA9ICJJbnRlcmNlcHRvcjIiOwogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIENBTExfTUUyID0gIkNhbGxNZTIiOwotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2Qgc2hvdWxkIGhhdmUgYWxsIGludGVyY2VwdG9ycyBsaXN0ZWQgaW4gdGhlIHJldHVybiBsaXN0Ci0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gY2FsbGVyTGlzdCBBbiBlbXB0eSwgbm9uLW51bGwgbGlzdAogICAgICAqIEByZXR1cm4gVGhlIGxpc3Qgb2YgYWxsIHRoZSBjbGFzc2VzIHRoYXQgaW50ZXJjZXB0ZWQgKGFuZCB0aGUgZmluYWwgaW1wbCBjbGFzcykgdGhpcyBjYWxsCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL211bHRpQmVhbnNYbWwvbXVsdGlCZWFuc0FwcC9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9tdWx0aUJlYW5zWG1sL211bHRpQmVhbnNBcHAvcG9tLnhtbAppbmRleCA1YjEzMGUxLi5iYjcyMjhiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL211bHRpQmVhbnNYbWwvbXVsdGlCZWFuc0FwcC9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvbXVsdGlCZWFuc1htbC9tdWx0aUJlYW5zQXBwL3BvbS54bWwKQEAgLTMxLDcgKzMxLDcgQEAKICAgICA8cGFja2FnaW5nPmVhcjwvcGFja2FnaW5nPgogCiAgICAgPG5hbWU+SEsyIENESSBNdWx0aUJlYW5zQXBwIEVBUjwvbmFtZT4KLSAgICAKKwogICAgIDxidWlsZD4KICAgICAgICAgPHBsdWdpbnM+CiAgICAgICAgICAgICA8cGx1Z2luPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9tdWx0aUJlYW5zWG1sL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL211bHRpQmVhbnNYbWwvcG9tLnhtbAppbmRleCAwNjZhY2ViLi4zYWNlYjc3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL211bHRpQmVhbnNYbWwvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL211bHRpQmVhbnNYbWwvcG9tLnhtbApAQCAtMzIsNyArMzIsNyBAQAogICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CiAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAKLSAgICA8bmFtZT5HbGFzc0Zpc2ggQ0RJIE11bHRpQmVhblhtbCBUZXN0PC9uYW1lPiAgCisgICAgPG5hbWU+R2xhc3NGaXNoIENESSBNdWx0aUJlYW5YbWwgVGVzdDwvbmFtZT4KICAgICA8bW9kdWxlcz4KICAgICAgICAgPG1vZHVsZT5lamIxPC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+ZWpiMjwvbW9kdWxlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9wb20ueG1sCmluZGV4IGJiODE3ODQuLjllN2Y0NjkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL3BvbS54bWwKQEAgLTMyLDcgKzMyLDcgQEAKICAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgogICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogCi0gICAgPG5hbWU+R2xhc3NGaXNoIENESSBUZXN0IENhc2VzPC9uYW1lPiAgCisgICAgPG5hbWU+R2xhc3NGaXNoIENESSBUZXN0IENhc2VzPC9uYW1lPgogICAgIDxtb2R1bGVzPgogICAgICAgICA8bW9kdWxlPm11bHRpQmVhbnNYbWw8L21vZHVsZT4KICAgICAgICAgPG1vZHVsZT5wcmVEZXN0cm95U2NvcGluZzwvbW9kdWxlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9wcmVEZXN0cm95U2NvcGluZy9lYXIvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvcHJlRGVzdHJveVNjb3BpbmcvZWFyL3BvbS54bWwKaW5kZXggOTNiOWE1Mi4uMDk2ZmU1MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9wcmVEZXN0cm95U2NvcGluZy9lYXIvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL3ByZURlc3Ryb3lTY29waW5nL2Vhci9wb20ueG1sCkBAIC0zMSw3ICszMSw3IEBACiAgICAgPHBhY2thZ2luZz5lYXI8L3BhY2thZ2luZz4KIAogICAgIDxuYW1lPkNESSBQcmVEZXN0cm95U2NvcGluZyBFQVI8L25hbWU+Ci0gICAgCisKICAgICA8YnVpbGQ+CiAgICAgICAgIDxwbHVnaW5zPgogICAgICAgICAgICAgPHBsdWdpbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvcHJlRGVzdHJveVNjb3BpbmcvbGliL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL3ByZURlc3Ryb3lTY29waW5nL2xpYi9wb20ueG1sCmluZGV4IGI0MmM5MWYuLjVlOGFlZjkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvcHJlRGVzdHJveVNjb3BpbmcvbGliL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9wcmVEZXN0cm95U2NvcGluZy9saWIvcG9tLnhtbApAQCAtMzEsNyArMzEsNyBAQAogICAgIDxhcnRpZmFjdElkPmxpYjwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KIAotICAgIDxuYW1lPkdsYXNzRmlzaCBsaWJyYXJ5IGZvciBQcmVEZXN0cm95U2NvcGluZyB0ZXN0PC9uYW1lPiAgCisgICAgPG5hbWU+R2xhc3NGaXNoIGxpYnJhcnkgZm9yIFByZURlc3Ryb3lTY29waW5nIHRlc3Q8L25hbWU+CiAKICAgICA8ZGVwZW5kZW5jaWVzPgogICAgICAgICA8ZGVwZW5kZW5jeT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvcHJlRGVzdHJveVNjb3BpbmcvbGliL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9iZWFucy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL3ByZURlc3Ryb3lTY29waW5nL2xpYi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvYmVhbnMueG1sCmluZGV4IDdkNjNmNjYuLjUzZjJiOWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvcHJlRGVzdHJveVNjb3BpbmcvbGliL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9iZWFucy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9wcmVEZXN0cm95U2NvcGluZy9saWIvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL2JlYW5zLnhtbApAQCAtMTksNSArMTksNSBAQAogPGJlYW5zIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvYmVhbnNfMV8wLnhzZCI+Ci0gICAgICAgCisKIDwvYmVhbnM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL3ByZURlc3Ryb3lTY29waW5nL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL3ByZURlc3Ryb3lTY29waW5nL3BvbS54bWwKaW5kZXggMTlkNWNjYi4uZmQ2NzFmMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9wcmVEZXN0cm95U2NvcGluZy9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvcHJlRGVzdHJveVNjb3BpbmcvcG9tLnhtbApAQCAtMzIsNyArMzIsNyBAQAogICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CiAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAKLSAgICA8bmFtZT5HbGFzc0Zpc2ggQ0RJIFByZURlc3Ryb3lTY29waW5nIFRlc3Q8L25hbWU+ICAKKyAgICA8bmFtZT5HbGFzc0Zpc2ggQ0RJIFByZURlc3Ryb3lTY29waW5nIFRlc3Q8L25hbWU+CiAgICAgPG1vZHVsZXM+CiAgICAgICAgIDxtb2R1bGU+bGliPC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+d2ViPC9tb2R1bGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL3ByZURlc3Ryb3lTY29waW5nL3dlYi9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9wcmVEZXN0cm95U2NvcGluZy93ZWIvcG9tLnhtbAppbmRleCBiNmE5ZjAwLi44NzNmOGQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL3ByZURlc3Ryb3lTY29waW5nL3dlYi9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvcHJlRGVzdHJveVNjb3Bpbmcvd2ViL3BvbS54bWwKQEAgLTMxLDcgKzMxLDcgQEAKICAgICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgogCiAgICAgPG5hbWU+Q0RJIFByZSBEZXN0cm95IFNjb3BpbmcgQ2FzZSBXZWJBcHA8L25hbWU+Ci0gICAgCisKICAgICA8YnVpbGQ+CiAgICAgICA8cGx1Z2lucz4KICAgICAgICAgICA8cGx1Z2luPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9wcmVEZXN0cm95U2NvcGluZy93ZWIvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvYmVhbnMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9wcmVEZXN0cm95U2NvcGluZy93ZWIvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvYmVhbnMueG1sCmluZGV4IDdkNjNmNjYuLjUzZjJiOWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvcHJlRGVzdHJveVNjb3Bpbmcvd2ViL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2JlYW5zLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL3ByZURlc3Ryb3lTY29waW5nL3dlYi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9iZWFucy54bWwKQEAgLTE5LDUgKzE5LDUgQEAKIDxiZWFucyB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2JlYW5zXzFfMC54c2QiPgotICAgICAgIAorCiA8L2JlYW5zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9wcmVEZXN0cm95U2NvcGluZy93ZWIvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvcHJlRGVzdHJveVNjb3Bpbmcvd2ViL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKaW5kZXggODU3ZDNhNC4uOGMzMjE2MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9wcmVEZXN0cm95U2NvcGluZy93ZWIvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL3ByZURlc3Ryb3lTY29waW5nL3dlYi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCkBAIC0yMSw2ICsyMSw2IEBACiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgotICAKKwogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL3J1bm5lci9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9ydW5uZXIvcG9tLnhtbAppbmRleCA5YWY5MDhmLi5jMzI2NjEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL3J1bm5lci9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jZGkvY2FzZXMvcnVubmVyL3BvbS54bWwKQEAgLTMwLDcgKzMwLDcgQEAKICAgICA8YXJ0aWZhY3RJZD5ydW5uZXI8L2FydGlmYWN0SWQ+CiAKICAgICA8bmFtZT5DREkgVGVzdCBDYXNlIFJ1bm5lcjwvbmFtZT4KLSAgICAKKwogICAgIDxidWlsZD4KICAgICAgICAgPHBsdWdpbnM+CiAgICAgICAgICAgICA8cGx1Z2luPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9ydW5uZXIvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2NkaS9kZXZ0ZXN0cy9ydW5uZXIvbWFpbi9NYWluLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL3J1bm5lci9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvY2RpL2RldnRlc3RzL3J1bm5lci9tYWluL01haW4uamF2YQppbmRleCBkMTZhMzY4Li5kMThlYzMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL3J1bm5lci9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvY2RpL2RldnRlc3RzL3J1bm5lci9tYWluL01haW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL3J1bm5lci9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvY2RpL2RldnRlc3RzL3J1bm5lci9tYWluL01haW4uamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20ub3JhY2xlLmNkaS5kZXZ0ZXN0cy5ydW5uZXIubWFpbjsKIAogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIGp3ZWxscwogICoKICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NkaS9jYXNlcy9ydW5uZXIvc3JjL3Rlc3QvamF2YS9jb20vb3JhY2xlL2NkaS9kZXZ0ZXN0cy9jYXNlcy9ydW5uZXIvQ2FzZXNUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL3J1bm5lci9zcmMvdGVzdC9qYXZhL2NvbS9vcmFjbGUvY2RpL2RldnRlc3RzL2Nhc2VzL3J1bm5lci9DYXNlc1Rlc3QuamF2YQppbmRleCAxYzRiMGVlLi41NGQ5NzI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL3J1bm5lci9zcmMvdGVzdC9qYXZhL2NvbS9vcmFjbGUvY2RpL2RldnRlc3RzL2Nhc2VzL3J1bm5lci9DYXNlc1Rlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY2RpL2Nhc2VzL3J1bm5lci9zcmMvdGVzdC9qYXZhL2NvbS9vcmFjbGUvY2RpL2RldnRlc3RzL2Nhc2VzL3J1bm5lci9DYXNlc1Rlc3QuamF2YQpAQCAtMzYsNDUgKzM2LDQ1IEBACiBpbXBvcnQgY29tLm9yYWNsZS5jZGkuY2FzZXMuZGV2dGVzdHMucHJlZGVzdHJveS5saWIuUHJlRGVzdHJveUNvbnN0YW50czsKIAogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIGp3ZWxscwogICovCiBwdWJsaWMgY2xhc3MgQ2FzZXNUZXN0IGV4dGVuZHMgTnVjbGV1c1N0YXJ0U3RvcFRlc3QgewogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBTT1VSQ0VfSE9NRSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgic291cmNlLmhvbWUiLCAiJCIpOwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBTT1VSQ0VfSE9NRV9DREkgPSAiL2FwcHNlcnZlci90ZXN0cy9jZGkvIjsKLSAgICAKKwogICAgIHByaXZhdGUgQ29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgQEJlZm9yZVRlc3QKICAgICBwdWJsaWMgdm9pZCBiZWZvcmVUZXN0KCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0RGVwbG95YWJsZVBhdGgoU3RyaW5nIGVuZFBhdGgpIHsKICAgICAgICAgaWYgKCFTT1VSQ0VfSE9NRS5zdGFydHNXaXRoKCIkIikpIHsKICAgICAgICAgICAgIHJldHVybiBTT1VSQ0VfSE9NRSArIFNPVVJDRV9IT01FX0NESSArIGVuZFBhdGg7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGVuZFBhdGg7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkZXBsb3koU3RyaW5nIGRlcGxveVBhdGgpIHsKICAgICAgICAgU3RyaW5nIGRwID0gZ2V0RGVwbG95YWJsZVBhdGgoZGVwbG95UGF0aCk7Ci0gICAgICAgIAorCiAgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IE51Y2xldXNUZXN0VXRpbHMubmFkbWluKCJkZXBsb3kiLCBkcCk7CiAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKHN1Y2Nlc3MpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgdW5kZXBsb3koU3RyaW5nIGFwcE5hbWUpIHsKICAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gTnVjbGV1c1Rlc3RVdGlscy5uYWRtaW4oInVuZGVwbG95IiwgYXBwTmFtZSk7CiAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKHN1Y2Nlc3MpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBNVUxUSV9CRUFOU19YTUxfSkFSID0gImNhc2VzL211bHRpQmVhbnNYbWwvbXVsdGlCZWFuc0FwcC90YXJnZXQvbXVsdGlCZWFuc0FwcC5lYXIiOwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBNVUxUSV9CRUFOU19YTUxfQVBQID0gIm11bHRpQmVhbnNBcHAiOwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBNVUxUSV9CRUFOU19FSkIxX0pOREkgPSAiamF2YTpnbG9iYWwvbXVsdGlCZWFuc0FwcC9lamIxL0ludGVyY2VwdGVkRWpiMSFjb20ub3JhY2xlLmNkaS5jYXNlcy5kZXZ0ZXN0cy5tdWx0aWVqYjEuTXVsdGlCZWFuc1htbEVqYjEiOwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBNVUxUSV9CRUFOU19FSkIyX0pOREkgPSAiamF2YTpnbG9iYWwvbXVsdGlCZWFuc0FwcC9lamIyL0ludGVyY2VwdGVkRWpiMiFjb20ub3JhY2xlLmNkaS5jYXNlcy5kZXZ0ZXN0cy5tdWx0aWVqYjIuTXVsdGlCZWFuc1htbEVqYjIiOwotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0TXVsdGlCZWFuc1htbCgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewogICAgICAgICBkZXBsb3koTVVMVElfQkVBTlNfWE1MX0pBUik7CkBAIC04Miw2MCArODIsNjAgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBNdWx0aUJlYW5zWG1sRWpiMSBlamIxID0gKE11bHRpQmVhbnNYbWxFamIxKSBjb250ZXh0Lmxvb2t1cChNVUxUSV9CRUFOU19FSkIxX0pOREkpOwogICAgICAgICAgICAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKGVqYjEpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgTGlzdDxTdHJpbmc+IGVqYjFMaXN0ID0gZWpiMS5jYWxsTWUobmV3IExpbmtlZExpc3Q8U3RyaW5nPigpKTsKICAgICAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChlamIxTGlzdCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIGVqYjFMaXN0LnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBTdHJpbmcgaW50ZXJjZXB0b3IxID0gZWpiMUxpc3QuZ2V0KDApOwogICAgICAgICAgICAgICAgIFN0cmluZyBjYWxsTWUxID0gZWpiMUxpc3QuZ2V0KDEpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhNdWx0aUJlYW5zWG1sRWpiMS5JTlRFUkNFUFRPUjEsIGludGVyY2VwdG9yMSk7CiAgICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhNdWx0aUJlYW5zWG1sRWpiMS5DQUxMX01FMSwgY2FsbE1lMSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIE11bHRpQmVhbnNYbWxFamIyIGVqYjIgPSAoTXVsdGlCZWFuc1htbEVqYjIpIGNvbnRleHQubG9va3VwKE1VTFRJX0JFQU5TX0VKQjJfSk5ESSk7CiAgICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoZWpiMik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIExpc3Q8U3RyaW5nPiBlamIyTGlzdCA9IGVqYjIuY2FsbE1lKG5ldyBMaW5rZWRMaXN0PFN0cmluZz4oKSk7CiAgICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoZWpiMkxpc3QpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBlamIyTGlzdC5zaXplKCkpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgU3RyaW5nIGludGVyY2VwdG9yMiA9IGVqYjJMaXN0LmdldCgwKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgY2FsbE1lMiA9IGVqYjJMaXN0LmdldCgxKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoTXVsdGlCZWFuc1htbEVqYjIuSU5URVJDRVBUT1IyLCBpbnRlcmNlcHRvcjIpOwogICAgICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoTXVsdGlCZWFuc1htbEVqYjIuQ0FMTF9NRTIsIGNhbGxNZTIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfQogICAgICAgICBmaW5hbGx5IHsKICAgICAgICAgICAgIHVuZGVwbG95KE1VTFRJX0JFQU5TX1hNTF9BUFApOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFBSRV9ERVNUUk9ZX1NDT1BJTkdfSkFSID0gImNhc2VzL3ByZURlc3Ryb3lTY29waW5nL2Vhci90YXJnZXQvcHJlRGVzdHJveVNjb3BpbmcuZWFyIjsKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJFX0RFU1RST1lfU0NPUElOR19BUFAgPSAicHJlRGVzdHJveVNjb3BpbmciOwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBCRUFOX1VSTCA9ICJodHRwOi8vbG9jYWxob3N0OjgwODAvd2ViL2JlYW4iOwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBMT0dPVVRfQkFTRV9VUkwgPSAiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3dlYi9sb2dvdXQ7anNlc3Npb25pZD0iOwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBFVkVOVFNfVVJMID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC93ZWIvZXZlbnRzIjsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExpc3Q8U3RyaW5nPiBnZXRMaW5lcyhTdHJpbmcgbGluZXMpIHsKICAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihsaW5lcywgIlxuIik7Ci0gICAgICAgIAorCiAgICAgICAgIExpc3Q8U3RyaW5nPiByZXRWYWwgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLSAgICAgICAgCisKICAgICAgICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgewogICAgICAgICAgICAgcmV0VmFsLmFkZChzdC5uZXh0VG9rZW4oKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHJldFZhbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIHRlc3QgY2FzZSBpcyBmcm9tIGh0dHBzOi8vamF2YS5uZXQvamlyYS9icm93c2UvR0xBU1NGSVNILTE4NDM1CiAgICAgICovCkBAIC0xNDQsMjAgKzE0NCwyMCBAQAogICAgICAgICBkZXBsb3koUFJFX0RFU1RST1lfU0NPUElOR19KQVIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3RyaW5nIGxpbmVzID0gTnVjbGV1c1Rlc3RVdGlscy5nZXRVUkwoQkVBTl9VUkwpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIExpc3Q8U3RyaW5nPiBhc0FycmF5ID0gZ2V0TGluZXMobGluZXMpOwogICAgICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhhc0FycmF5LnNpemUoKSwgMiwgIkRpZCBub3QgZ2V0IHRoZSBwcm9wZXIgbnVtYmVyIG9mIHN0cmluZ3MgZnJvbSBnZXRVUkwgcmV0dXJuIG9mICIgKyBsaW5lcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3RyaW5nIHV1aWQgPSBhc0FycmF5LmdldCgxKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBOdWNsZXVzVGVzdFV0aWxzLmdldFVSTChMT0dPVVRfQkFTRV9VUkwgKyB1dWlkKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBsaW5lcyA9IE51Y2xldXNUZXN0VXRpbHMuZ2V0VVJMKEVWRU5UU19VUkwpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIExpc3Q8U3RyaW5nPiByZXN1bHRzID0gZ2V0TGluZXMobGluZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVzdWx0cy5zaXplKCksIDMpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVzdWx0cy5nZXQoMCksIFByZURlc3Ryb3lDb25zdGFudHMuQ1JFQVRFRCArIGFzQXJyYXkuZ2V0KDApKTsKICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVzdWx0cy5nZXQoMSksIFByZURlc3Ryb3lDb25zdGFudHMuUFJPRFVDRVJfUFJFX0RFU1RST1lfSU4pOwogICAgICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhyZXN1bHRzLmdldCgyKSwgUHJlRGVzdHJveUNvbnN0YW50cy5FWFBFQ1RFRF9FWENFUFRJT04pOwpAQCAtMTY1LDYgKzE2NSw2IEBACiAgICAgICAgIGZpbmFsbHkgewogICAgICAgICAgICAgdW5kZXBsb3koUFJFX0RFU1RST1lfU0NPUElOR19BUFApOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NkaS9uZWdhdGl2ZS9ub3JtYWxTY29wZVdpdGhGaW5hbC9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2NkaS9uZWdhdGl2ZS9ub3JtYWxTY29wZVdpdGhGaW5hbC9wb20ueG1sCmluZGV4IGU4OTFiMzIuLjgwMDAyODYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9jZGkvbmVnYXRpdmUvbm9ybWFsU2NvcGVXaXRoRmluYWwvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY2RpL25lZ2F0aXZlL25vcm1hbFNjb3BlV2l0aEZpbmFsL3BvbS54bWwKQEAgLTMxLDcgKzMxLDcgQEAKICAgICA8YXJ0aWZhY3RJZD5ub3JtYWxTY29wZVdpdGhGaW5hbDwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KIAotICAgIDxuYW1lPkdsYXNzRmlzaCBOb3JtYWwgU2NvcGVkIEJlYW4gV2l0aCBGaW5hbCBNZXRob2RzPC9uYW1lPiAgCisgICAgPG5hbWU+R2xhc3NGaXNoIE5vcm1hbCBTY29wZWQgQmVhbiBXaXRoIEZpbmFsIE1ldGhvZHM8L25hbWU+CiAKICAgICA8YnVpbGQ+CiAgICAgICAgIDxwbHVnaW5zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NkaS9uZWdhdGl2ZS9ub3JtYWxTY29wZVdpdGhGaW5hbC9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvY2RpL2RldnRlc3QvbmVnYXRpdmUvbm9ybWFsU2NvcGVkL0lFeHRlbmRBQ2xhc3NXaXRoRmluYWxNZXRob2RzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvY2RpL25lZ2F0aXZlL25vcm1hbFNjb3BlV2l0aEZpbmFsL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9jZGkvZGV2dGVzdC9uZWdhdGl2ZS9ub3JtYWxTY29wZWQvSUV4dGVuZEFDbGFzc1dpdGhGaW5hbE1ldGhvZHMuamF2YQppbmRleCBhMGE4NzdmLi43MDU2ZGE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL25lZ2F0aXZlL25vcm1hbFNjb3BlV2l0aEZpbmFsL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9jZGkvZGV2dGVzdC9uZWdhdGl2ZS9ub3JtYWxTY29wZWQvSUV4dGVuZEFDbGFzc1dpdGhGaW5hbE1ldGhvZHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY2RpL25lZ2F0aXZlL25vcm1hbFNjb3BlV2l0aEZpbmFsL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9jZGkvZGV2dGVzdC9uZWdhdGl2ZS9ub3JtYWxTY29wZWQvSUV4dGVuZEFDbGFzc1dpdGhGaW5hbE1ldGhvZHMuamF2YQpAQCAtMjEsMTAgKzIxLDEwIEBACiAvKioKICAqIFRoaXMgY2xhc3MgZXh0ZW5kcyBhIGNsYXNzIHdpdGggZmluYWwgbWV0aG9kcywgYnV0IGRvZXMgbm90IGhhdmUgYW55IGZpbmFsCiAgKiBtZXRob2RzIGl0c2VsZi4gIEhvd2V2ZXIsIGl0IHN0aWxsIGNhbm5vdCBiZSBwcm94aWVkIGJlY2F1c2Ugb2YgdGhlIGZpbmFsLgotICogCisgKgogICogVGhpcyBzaG91bGQgY2F1c2UgYSBkZXBsb3ltZW50IGZhaWx1cmUKICAqIG1ldGhvZHMgaW4gdGhlIHN1cGVyY2xhc3MKLSAqIAorICoKICAqIEBhdXRob3IgandlbGxzCiAgKgogICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL25lZ2F0aXZlL25vcm1hbFNjb3BlV2l0aEZpbmFsL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9jZGkvZGV2dGVzdC9uZWdhdGl2ZS9ub3JtYWxTY29wZWQvSUhhdmVGaW5hbE1ldGhvZHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9jZGkvbmVnYXRpdmUvbm9ybWFsU2NvcGVXaXRoRmluYWwvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2NkaS9kZXZ0ZXN0L25lZ2F0aXZlL25vcm1hbFNjb3BlZC9JSGF2ZUZpbmFsTWV0aG9kcy5qYXZhCmluZGV4IDVmZWUyYmIuLjlhYmMxYjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9jZGkvbmVnYXRpdmUvbm9ybWFsU2NvcGVXaXRoRmluYWwvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2NkaS9kZXZ0ZXN0L25lZ2F0aXZlL25vcm1hbFNjb3BlZC9JSGF2ZUZpbmFsTWV0aG9kcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jZGkvbmVnYXRpdmUvbm9ybWFsU2NvcGVXaXRoRmluYWwvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2NkaS9kZXZ0ZXN0L25lZ2F0aXZlL25vcm1hbFNjb3BlZC9JSGF2ZUZpbmFsTWV0aG9kcy5qYXZhCkBAIC0xOSwxMyArMTksMTMgQEAKIC8qKgogICogVGhpcyBjbGFzcyBoYXMgZmluYWwgbWV0aG9kcywgYW5kIGhlbmNlIGNhbm5vdAogICogYmUgcHJveGllZAotICogCisgKgogICogQGF1dGhvciBqd2VsbHMKICAqCiAgKi8KIHB1YmxpYyBjbGFzcyBJSGF2ZUZpbmFsTWV0aG9kcyB7Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyBmaW5hbCB2b2lkIGlBbUFGaW5hbE1ldGhvZCgpIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9jZGkvbmVnYXRpdmUvbm9ybWFsU2NvcGVXaXRoRmluYWwvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2NkaS9kZXZ0ZXN0L25lZ2F0aXZlL25vcm1hbFNjb3BlZC9TdGF0ZWxlc3NFamJXaXRoSW5qZWN0aW9uUG9pbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9jZGkvbmVnYXRpdmUvbm9ybWFsU2NvcGVXaXRoRmluYWwvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2NkaS9kZXZ0ZXN0L25lZ2F0aXZlL25vcm1hbFNjb3BlZC9TdGF0ZWxlc3NFamJXaXRoSW5qZWN0aW9uUG9pbnQuamF2YQppbmRleCBjNWQ0NGUxLi5jMDgzMjEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL25lZ2F0aXZlL25vcm1hbFNjb3BlV2l0aEZpbmFsL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9jZGkvZGV2dGVzdC9uZWdhdGl2ZS9ub3JtYWxTY29wZWQvU3RhdGVsZXNzRWpiV2l0aEluamVjdGlvblBvaW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2NkaS9uZWdhdGl2ZS9ub3JtYWxTY29wZVdpdGhGaW5hbC9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvY2RpL2RldnRlc3QvbmVnYXRpdmUvbm9ybWFsU2NvcGVkL1N0YXRlbGVzc0VqYldpdGhJbmplY3Rpb25Qb2ludC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAvKioKICAqIFRoaXMgaXMgYSBzdGF0bGVzcyBFSkIgdGhhdCBpcyBpbmplY3RlZCB3aXRoIGEgc2VydmljZQogICogdGhhdCBoYXMgZmluYWwgbWV0aG9kcyBpbiBpdHMgc3VwZXJjbGFzcwotICogCisgKgogICogQGF1dGhvciBqd2VsbHMKICAqCiAgKi8KQEAgLTMxLDcgKzMxLDcgQEAKIHB1YmxpYyBjbGFzcyBTdGF0ZWxlc3NFamJXaXRoSW5qZWN0aW9uUG9pbnQgewogICAgIEBJbmplY3QKICAgICBwcml2YXRlIElFeHRlbmRBQ2xhc3NXaXRoRmluYWxNZXRob2RzIGV4dGVuZGVyOwotICAgIAorCiAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgcG9zdENvbnN0cnVjdCgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9jZGkvbmVnYXRpdmUvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9jZGkvbmVnYXRpdmUvcG9tLnhtbAppbmRleCA2ZDNjODFmLi5hY2Y1NWFhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL25lZ2F0aXZlL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2NkaS9uZWdhdGl2ZS9wb20ueG1sCkBAIC0zMiw3ICszMiw3IEBACiAgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KIAotICAgIDxuYW1lPkdsYXNzRmlzaCBDREkgTmVnYXRpdmUgVGVzdHM8L25hbWU+ICAKKyAgICA8bmFtZT5HbGFzc0Zpc2ggQ0RJIE5lZ2F0aXZlIFRlc3RzPC9uYW1lPgogICAgIDxtb2R1bGVzPgogICAgICAgICA8bW9kdWxlPm5vcm1hbFNjb3BlV2l0aEZpbmFsPC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+cnVubmVyPC9tb2R1bGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL25lZ2F0aXZlL3J1bm5lci9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2NkaS9uZWdhdGl2ZS9ydW5uZXIvcG9tLnhtbAppbmRleCA1ODY1YmQ4Li5lMzE2NjRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL25lZ2F0aXZlL3J1bm5lci9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jZGkvbmVnYXRpdmUvcnVubmVyL3BvbS54bWwKQEAgLTMwLDcgKzMwLDcgQEAKICAgICA8YXJ0aWZhY3RJZD5ydW5uZXI8L2FydGlmYWN0SWQ+CiAKICAgICA8bmFtZT5DREkgTmVnYXRpdmUgVGVzdHMgUnVubmVyPC9uYW1lPgotICAgIAorCiAgICAgPGJ1aWxkPgogICAgICAgICA8cGx1Z2lucz4KICAgICAgICAgICAgIDxwbHVnaW4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL25lZ2F0aXZlL3J1bm5lci9zcmMvdGVzdC9qYXZhL2NvbS9vcmFjbGUvY2RpL2RldnRlc3QvcnVubmVyL3Rlc3QvTmVnYXRpdmVUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvY2RpL25lZ2F0aXZlL3J1bm5lci9zcmMvdGVzdC9qYXZhL2NvbS9vcmFjbGUvY2RpL2RldnRlc3QvcnVubmVyL3Rlc3QvTmVnYXRpdmVUZXN0LmphdmEKaW5kZXggNjY3NmYzZi4uY2NmNWQ5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NkaS9uZWdhdGl2ZS9ydW5uZXIvc3JjL3Rlc3QvamF2YS9jb20vb3JhY2xlL2NkaS9kZXZ0ZXN0L3J1bm5lci90ZXN0L05lZ2F0aXZlVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jZGkvbmVnYXRpdmUvcnVubmVyL3NyYy90ZXN0L2phdmEvY29tL29yYWNsZS9jZGkvZGV2dGVzdC9ydW5uZXIvdGVzdC9OZWdhdGl2ZVRlc3QuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogCiAvKioKICAqIFRoaXMgdGVzdHMgZmFpbHVyZSBjYXNlcwotICogCisgKgogICogQGF1dGhvciBqd2VsbHMKICAqCiAgKi8KQEAgLTMxLDI1ICszMSwyNSBAQAogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBOT1JNQUxfV0lUSF9GSU5BTFNfSkFSID0gIm5lZ2F0aXZlL25vcm1hbFNjb3BlV2l0aEZpbmFsL3RhcmdldC9ub3JtYWxTY29wZVdpdGhGaW5hbC5qYXIiOwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBTT1VSQ0VfSE9NRSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgic291cmNlLmhvbWUiLCAiJCIpOwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBTT1VSQ0VfSE9NRV9DREkgPSAiL2FwcHNlcnZlci90ZXN0cy9jZGkvIjsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXREZXBsb3lhYmxlUGF0aChTdHJpbmcgZW5kUGF0aCkgewogICAgICAgICBpZiAoIVNPVVJDRV9IT01FLnN0YXJ0c1dpdGgoIiQiKSkgewogICAgICAgICAgICAgcmV0dXJuIFNPVVJDRV9IT01FICsgU09VUkNFX0hPTUVfQ0RJICsgZW5kUGF0aDsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gZW5kUGF0aDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIHRlc3QgY3VycmVudGx5IGZhaWxzIGR1ZSB0byBhIHBvc3NpYmxlIGJ1ZyBpbiBXZWxkCiAgICAgICovCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsU2NvcGVXaXRoRmluYWxzRG9lc05vdERlcGxveSgpIHsKICAgICAgICAgU3RyaW5nIGRlcGxveVBhdGggPSBnZXREZXBsb3lhYmxlUGF0aChOT1JNQUxfV0lUSF9GSU5BTFNfSkFSKTsKLSAgICAgICAgCisKICAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gTnVjbGV1c1Rlc3RVdGlscy5uYWRtaW4oImRlcGxveSIsIGRlcGxveVBhdGgpOwotICAgICAgICAKKwogICAgICAgICAvLyBTaG91bGQgaGF2ZSBmYWlsZWQKLSAgICAgICAgQXNzZXJ0LmFzc2VydEZhbHNlKHN1Y2Nlc3MpOyAKKyAgICAgICAgQXNzZXJ0LmFzc2VydEZhbHNlKHN1Y2Nlc3MpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9jZGkvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9jZGkvcG9tLnhtbAppbmRleCA3OWE2ZTNhLi5mYjY3YTMwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY2RpL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2NkaS9wb20ueG1sCkBAIC0zMCw3ICszMCw3IEBACiAgICAgPGFydGlmYWN0SWQ+Y2RpPC9hcnRpZmFjdElkPgogICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CiAKLSAgICA8bmFtZT5HbGFzc0Zpc2ggQ0RJIFRlc3RzPC9uYW1lPiAgCisgICAgPG5hbWU+R2xhc3NGaXNoIENESSBUZXN0czwvbmFtZT4KICAgICA8bW9kdWxlcz4KICAgICAgICAgPG1vZHVsZT5uZWdhdGl2ZTwvbW9kdWxlPgogICAgICAgICA8bW9kdWxlPmNhc2VzPC9tb2R1bGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY29tbW9uX3Rlc3Quc2ggYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbW9uX3Rlc3Quc2gKaW5kZXggM2JjMjc1OS4uMzZlMjdmMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW1vbl90ZXN0LnNoCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jb21tb25fdGVzdC5zaApAQCAtNTEsNyArNTEsNyBAQAogICBqYXZhIC12ZXJzaW9uCiAgIGFudCAtdmVyc2lvbgogICBta2RpciAtcCAke1dPUktTUEFDRX0vcmVzdWx0cy9qdW5pdHJlcG9ydHMKLSAgcHJpbnRmICJcblxuIiAKKyAgcHJpbnRmICJcblxuIgogfQogCiB6aXBfdGVzdF9yZXN1bHRzKCl7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L2FkbWlud2ViL2Jhc2ljL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvYWRtaW53ZWIvYmFzaWMvYnVpbGQueG1sCmluZGV4IDM5ZDIwMGIuLjM3OGRjZGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvYWRtaW53ZWIvYmFzaWMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvYWRtaW53ZWIvYmFzaWMvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImFkbWlud2ViIiBkZWZhdWx0PSJ1c2FnZSIgYmFzZWRpcj0iLiI+CiAgICAgPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiLz4KLSAgICAKKwogIDxkZXNjcmlwdGlvbj5CdWlsZHMsIHRlc3RzLCBhbmQgcnVucyB0aGUgR2xhc3NGaXNoIEFkbWluIEdVSTwvZGVzY3JpcHRpb24+CiA8IS0tIDxpbXBvcnQgZmlsZT0ibmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+LS0+CiAKQEAgLTQ0LDEzICs0NCwxMyBAQAogPHBhdGggaWQ9InBhdGgydGVzdG5nIj4KICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249Ii4uL2xpYi90ZXN0bmctNS4wLWpkazE1LmphciIvPgogPC9wYXRoPgotICAgICAgCi0gICAgCisKKwogCiA8cGF0aCBpZD0iY2xhc3MucGF0aCI+CiAgICAgPGZpbGVzZXQgZGlyPSIke2luc3RhbGwuZGlyfS9saWIiPgogICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIvPgotICAgIDwvZmlsZXNldD4gICAgICAKKyAgICA8L2ZpbGVzZXQ+CiAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJjbGFzc2VzIi8+CiA8L3BhdGg+CiAKQEAgLTYwLDcgKzYwLDcgQEAKICAgICA8L2ZpbGVzZXQ+LS0+CiAgICAgPGZpbGVzZXQgZGlyPSIuLi8uLi9saWIiPgogICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIvPgotICAgIDwvZmlsZXNldD4gICAgCisgICAgPC9maWxlc2V0PgogICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iLi9jbGFzc2VzL3Rlc3QiLz4KIDwvcGF0aD4KIApAQCAtNjgsNyArNjgsNyBAQAogPHRhc2tkZWYgbmFtZT0idGVzdG5nIgogICAgICAgICAgY2xhc3NwYXRocmVmPSJwYXRoMnRlc3RuZyIKICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLnRlc3RuZy5UZXN0TkdBbnRUYXNrIi8+Ci0gICAgICAgICAKKwogCiA8IS0tIEdlbmVyYXRlIHRoZSBUZXN0TkcgcmVwb3J0IC0tPgogPHRhcmdldCBuYW1lPSJyZXBvcnQiPgpAQCAtOTcsMjYgKzk3LDI2IEBACiAKIDx0YXJnZXQgbmFtZT0ic3RhcnQiPgogICA8ZWNobyBtZXNzYWdlPSJTdGFydGluZyBTZWxlbml1bSBTZXJ2ZXIiLz4KLSAgPGphdmEgamFyPSIuLi8uLi9saWIvc2VsZW5pdW0vc2VsZW5pdW0tc2VydmVyLmphciIgZm9yaz0idHJ1ZSI+ICAKKyAgPGphdmEgamFyPSIuLi8uLi9saWIvc2VsZW5pdW0vc2VsZW5pdW0tc2VydmVyLmphciIgZm9yaz0idHJ1ZSI+CiAgICAgICA8YXJnIGxpbmU9Ii1pbnRlcmFjdGl2ZSIvPgogICA8L2phdmE+Ci0gICAgICAKKwogPC90YXJnZXQ+CiAKLTx0YXJnZXQgIG5hbWU9InJ1biI+ICAgIAotICAgIAotICAgIDxlY2hvIG1lc3NhZ2U9Ij09PT09PT09PT09PT1TdGFydGluZyBTZWxlbml1bSBUZXN0TkcgdGVzdCBhdCBcbiAke2Jhc2VkaXJ9ICA9PT09PT09PT09PT0iLz4gIAotICAKKzx0YXJnZXQgIG5hbWU9InJ1biI+CisKKyAgICA8ZWNobyBtZXNzYWdlPSI9PT09PT09PT09PT09U3RhcnRpbmcgU2VsZW5pdW0gVGVzdE5HIHRlc3QgYXQgXG4gJHtiYXNlZGlyfSAgPT09PT09PT09PT09Ii8+CisKICAgICA8bWtkaXIgZGlyPSIuLi90ZXN0LW91dHB1dCIvPgogICAgIDx0ZXN0bmcgb3V0cHV0ZGlyPSIuLi90ZXN0LW91dHB1dCIKICAgICAgICAgICAgIGNsYXNzcGF0aHJlZj0idGVzdC5jbGFzc3BhdGgiIGdyb3Vwcz0iIj4KICAgICAgICAgIDxjbGFzc2ZpbGVzZXQgZGlyPSJjbGFzc2VzL3Rlc3QiIGluY2x1ZGVzPSIqKi9TZWxlbml1bVRlc3QuY2xhc3MiLz4KICAgICAgICAgPCEtLTx4bWxmaWxlc2V0IGRpcj0iLi4vLi4vLi4vIiBpbmNsdWRlcz0idGVzdG5nLnhtbCIvPi0tPgogICAgIDwvdGVzdG5nPgotICAgIAorCiAgICAgPCEtLTxhbnRjYWxsIHRhcmdldD0iLXBvc3QtdGVzdC1ydW4iLz4gICAgLS0+Ci0gICAgCi08L3RhcmdldD4gICAgCisKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InN0b3AiPgogICAgICAgICA8Z2V0IHRhc2tuYW1lPSJzZWxlbml1bS1zaHV0ZG93biIKQEAgLTEzNCwxMSArMTM0LDExIEBACiA8dGFyZ2V0IG5hbWU9Il9zdGFydC1zZWxlbml1bSI+CiAgPGphdmEgamFyPSIuLi9saWIvc2VsZW5pdW0vJHtzZWxlbml1bS1zcnZyLWphcn0iIGZvcms9InRydWUiIHNwYXduPSJ0cnVlIiAvPgogIDxhbnRjYWxsIHRhcmdldD0iX3J1bi11YS10ZXN0cyIgLz4KLSA8Z2V0IGRlc3Q9IiR7dGVzdHJlcG9ydGRpcn0vcmVzdWx0cy50eHQiIAorIDxnZXQgZGVzdD0iJHt0ZXN0cmVwb3J0ZGlyfS9yZXN1bHRzLnR4dCIKICAgICAgICAgc3JjPSIke3NlbGVuaXVtLXNydnItbG9jfS9zZWxlbml1bS1zZXJ2ZXIvZHJpdmVyLz9jbWQ9c2h1dERvd24iIC8+CiA8L3RhcmdldD4KIAogCi0gICAgCisKIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9hZG1pbndlYi9iYXNpYy9zcmMvdGVzdC9TZWxlbml1bVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvYWRtaW53ZWIvYmFzaWMvc3JjL3Rlc3QvU2VsZW5pdW1UZXN0LmphdmEKaW5kZXggYmQ0MDVmMi4uNDM4MzMxYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9hZG1pbndlYi9iYXNpYy9zcmMvdGVzdC9TZWxlbml1bVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L2FkbWlud2ViL2Jhc2ljL3NyYy90ZXN0L1NlbGVuaXVtVGVzdC5qYXZhCkBAIC0yMSwzMyArMjEsMzMgQEAKIGltcG9ydCBvcmcub3BlbnFhLnNlbGVuaXVtLnNlcnZlci5TZWxlbml1bVNlcnZlcjsKIAogcHVibGljIGNsYXNzIFNlbGVuaXVtVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIERlZmF1bHRTZWxlbml1bSBzZWxlbml1bTsKLSAgICAKKwogICAgIC8vQFBhcmFtZXRlcnMoeyJzZWxlbi1zdnItYWRkciIsImJyd3NyLXBhdGgiLCJhdXQtYWRkciJ9KQogICAgIEBCZWZvcmVDbGFzcwogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnRpbmcgU2VsZW5pdW0gTGF1bmNoZXItLS0+Iik7CiAgICAgICAgIHNlbGVuaXVtID0gbmV3IERlZmF1bHRTZWxlbml1bSgibG9jYWxob3N0IiwKICAgICAgICAgICAgICAgICBTZWxlbml1bVNlcnZlci5nZXREZWZhdWx0UG9ydCgpLCAiKmlleHBsb3JlIiwgImh0dHA6Ly9sb2NhbGhvc3Q6NDg0OCIpOwotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAorCisKKwogICAgIC8qIHNlbGVuaXVtID0gbmV3IERlZmF1bHRTZWxlbml1bShzZWxlblNydnJBZGRyLAogICAgICAgICAgICAgIFNlbGVuaXVtU2VydmVyLmdldERlZmF1bHRQb3J0KCksIGJwYXRoLCBhcHBQYXRoKTsqLwotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAvKnNlbENsaWVudCA9IG5ldyBEZWZhdWx0U2VsZW5pdW0oImxvY2FsaG9zdCIsIDQ0NDQsCiAgICAgICAgICAgICAiKmZpcmVmb3giLCAiaHR0cDovL2xvY2FsaG9zdDoiICsgUE9SVCk7Ki8KLSAgICAgICAgCisKICAgICAgICAgc2VsZW5pdW0uc3RhcnQoKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3QxKCl7CiAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKHRydWUsIlBhc3MiKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIEBQYXJhbWV0ZXJzKHsiYXV0LWFkZHIifSkKICAgICBwdWJsaWMgdm9pZCB0ZXN0TG9naW5TY3JlZW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTYyLDE0ICs2MiwxNCBAQAogICAgICAgICBzZWxlbml1bS53YWl0Rm9yUGFnZVRvTG9hZCgiMzAwMDAiKTsKICAgICAgICAgLy92ZXJpZnlUcnVlKHNlbGVuaXVtLmlzVGV4dFByZXNlbnQoIkpSdWJ5IikpOwogICAgICAgICAvL3ZlcmlmeUVxdWFscygiZ2xhc3NmaXNoOiBHbGFzc0Zpc2ggQ29tbXVuaXR5Iiwgc2VsZW5pdW0uZ2V0VGl0bGUoKSk7Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIC8vQXNzZXJ0LmFzc2VydEVxdWFscygiIiwgc2VsZW5pdW0uZ2V0VGV4dCgiLy9pbWdbQGFsdD0nR2xhc3NGaXNoIFYyJ10iKSk7Ci0gICAgICAgIAorCiAgICAgICAgIHNlbGVuaXVtLm9wZW4oIi9sb2dpbi5qc2YiKTsKICAgICAgICAgc2VsZW5pdW0ud2FpdEZvclBhZ2VUb0xvYWQoIjMwMDAwIik7CiAgICAgICAgIC8vc2VsZW5pdW0udHlwZSgiTG9naW4udXNlcm5hbWUiLCAiYWRtaW4iKTsKLSAgICAgICAgc2VsZW5pdW0udHlwZSgial91c2VybmFtZSIsICJhZG1pbiIpOyAgICAgICAgCisgICAgICAgIHNlbGVuaXVtLnR5cGUoImpfdXNlcm5hbWUiLCAiYWRtaW4iKTsKICAgICAgICAgLy9zZWxlbml1bS53YWl0Rm9yUGFnZVRvTG9hZCgiMzAwMDAiKTsKICAgICAgICAgLy9zZWxlbml1bS50eXBlKCJMb2dpbi5wYXNzd29yZCIsICJhZG1pbmFkbWluIik7CiAgICAgICAgIHNlbGVuaXVtLnR5cGUoImpfcGFzc3dvcmQiLCAiYWRtaW5hZG1pbiIpOwpAQCAtODAsMTQgKzgwLDE0IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihlKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgCisKKwogICAgIH0KLSAgICAKKwogICAgIEBBZnRlckNsYXNzCiAgICAgcHJpdmF0ZSB2b2lkIHN0b3AoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgc2VsZW5pdW0uc3RvcCgpOwotICAgIH0gICAgCi0gICAgCi0gICAgCisgICAgfQorCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvYWRtaW53ZWIvYmFzaWMvdGVzdG5nLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvYWRtaW53ZWIvYmFzaWMvdGVzdG5nLnhtbAppbmRleCA0NGU5ZTUzLi4yMGJlZjYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L2FkbWlud2ViL2Jhc2ljL3Rlc3RuZy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9hZG1pbndlYi9iYXNpYy90ZXN0bmcueG1sCkBAIC0xNywyMCArMTcsMjAgQEAKIC0tPgogCiA8c3VpdGUgbmFtZT0iVXNlciBBY2NlcHRhbmNlIFRlc3RzIiB2ZXJib3NlPSIxIiA+Ci0gCisKICA8IS0tIHJlcXVpcmVkIGZvciBEYlVuaXQgZml4dHVyZSAgIC0tPgotIDxwYXJhbWV0ZXIgbmFtZT0ic2VlZC1wYXRoIiB2YWx1ZT0idGVzdC9jb25mL2d0MTUtc2VlZC54bWwiLz4gCisgPHBhcmFtZXRlciBuYW1lPSJzZWVkLXBhdGgiIHZhbHVlPSJ0ZXN0L2NvbmYvZ3QxNS1zZWVkLnhtbCIvPgogIDxwYXJhbWV0ZXIgbmFtZT0iZGItZHJpdmVyIiB2YWx1ZT0ib3JnLmhzcWxkYi5qZGJjRHJpdmVyIi8+CiAgPHBhcmFtZXRlciBuYW1lPSJkYi11cmwiIHZhbHVlPSJqZGJjOmhzcWxkYjpoc3FsOi8vMTI3LjAuMC4xIi8+CiAgPHBhcmFtZXRlciBuYW1lPSJkYi11c2VyIiB2YWx1ZT0ic2EiLz4KICA8cGFyYW1ldGVyIG5hbWU9ImRiLXBzc3dyZCIgdmFsdWU9IiIvPgotIAotIDwhLS0gcmVxdWlyZWQgZm9yIFNlbGVuaXVtIGZpeHR1cmUgLS0+Ci0gPHBhcmFtZXRlciBuYW1lPSJzZWxlbi1zdnItYWRkciIgdmFsdWU9ImxvY2FsaG9zdCIvPiAKLSA8cGFyYW1ldGVyIG5hbWU9ImF1dC1hZGRyIiB2YWx1ZT0iaHR0cDovL2xvY2FsaG9zdDo4MDgwL2d0MTUvIi8+IAkKIAotIDx0ZXN0IG5hbWU9IkdUMTUgQ1JVRHMtIEZpcmVmb3giID4gCi0gCisgPCEtLSByZXF1aXJlZCBmb3IgU2VsZW5pdW0gZml4dHVyZSAtLT4KKyA8cGFyYW1ldGVyIG5hbWU9InNlbGVuLXN2ci1hZGRyIiB2YWx1ZT0ibG9jYWxob3N0Ii8+CisgPHBhcmFtZXRlciBuYW1lPSJhdXQtYWRkciIgdmFsdWU9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9ndDE1LyIvPgorCisgPHRlc3QgbmFtZT0iR1QxNSBDUlVEcy0gRmlyZWZveCIgPgorCiAgIDxwYXJhbWV0ZXIgbmFtZT0iYnJ3c3ItcGF0aCIgdmFsdWU9IipmaXJlZm94Ii8+CiAKICAgPHBhY2thZ2VzPgpAQCAtMzksMTMgKzM5LDEzIEBACiAgIDwvcGFja2FnZXM+CiAgPC90ZXN0PgogCi0gPHRlc3QgbmFtZT0iR1QxNSBDUlVEcy0gSUUiID4gCi0gIAorIDx0ZXN0IG5hbWU9IkdUMTUgQ1JVRHMtIElFIiA+CisKICAgPHBhcmFtZXRlciBuYW1lPSJicndzci1wYXRoIiB2YWx1ZT0iKmlleHBsb3JlIi8+CiAKICAgPHBhY2thZ2VzPgogICAgPHBhY2thZ2UgbmFtZT0idGVzdC5jb20uYWNtZS5ndDE1LldlYi5zZWxlbml1bSIgLz4KICAgIDxwYWNrYWdlIG5hbWU9InRlc3QuY29tLmFjbWUuZ3QxNS5XZWIuc2VsZW5pdW0uZml4dHVyZXMiIC8+Ci0gIDwvcGFja2FnZXM+IAorICA8L3BhY2thZ2VzPgogIDwvdGVzdD4KIDwvc3VpdGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvYnVpbGQueG1sCmluZGV4IDYxZTU2N2UuLmNiNzlkMmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvYnVpbGQueG1sCkBAIC0yMSwzNCArMjEsMzQgQEAKICAgICA8cHJvcGVydHkgZmlsZT0iYnVpbGQucHJvcGVydGllcyIvPgogICAgICA8cHJvcGVydHkgZmlsZT0iJHtiYXNlZGlyfS9nZnByb2plY3QvZGVyYnkucHJvcGVydGllcyIvPgogICAgICA8aW1wb3J0IGZpbGU9IiR7YmFzZWRpcn0vZ2Zwcm9qZWN0L2RiLXRhcmdldHMueG1sIi8+Ci0gICAgCisKICAgICA8ZGVzY3JpcHRpb24+QnVpbGRzLCB0ZXN0cywgYW5kIHJ1bnMgdGhlIHByb2plY3QgVjMgUXVpY2tsb29rPC9kZXNjcmlwdGlvbj4KICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8cmVjb3JkIG5hbWU9ImFsbHJ1bi5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KLQk8IS0tIHJlc29sdmVBcnRpZmFjdCBhcnRpZmFjdElkPSJ0ZXN0bmciIHByb3BlcnR5PSJ0ZXN0bmcuamFyIi8+CisgICAgPCEtLSByZXNvbHZlQXJ0aWZhY3QgYXJ0aWZhY3RJZD0idGVzdG5nIiBwcm9wZXJ0eT0idGVzdG5nLmphciIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0bmcgamFyIHZhbHVlOiAke3Rlc3RuZy5qYXJ9Ii8gLS0+CiAgICAgICAgIDwhLS0gYW50Y2FsbCB0YXJnZXQ9InNldHVwLnRvcGxpbmsiLyAtLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydC1zZXJ2ZXIiLz4KLSAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydERlcmJ5Ii8+ICAgICAgICAKKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydERlcmJ5Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3kiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW50ZXN0Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3kiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wLXNlcnZlciIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0b3BEZXJieSIvPgotICAgICAgICA8IS0tIGFudGNhbGwgdGFyZ2V0PSJyZXBvcnQiLyAtLT4gICAgICAgIAorICAgICAgICA8IS0tIGFudGNhbGwgdGFyZ2V0PSJyZXBvcnQiLyAtLT4KICAgICAgICAgPHJlY29yZCBuYW1lPSJhbGxydW4ub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAgCisKICAgICA8IS0tIDxpbXBvcnQgZmlsZT0ibmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+LS0+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvcHlKQVJTIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQ29weWluZyB0ZXN0bmcuamFyIHRvICR7YW50LmhvbWV9L2xpYiIvPgogICAgICAgICA8Y29weSB0b2Rpcj0iJHthbnQuaG9tZX0vbGliIiB2ZXJib3NlPSJ0cnVlIj4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfS9saWIiPgogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqL3Rlc3RuZyouKiIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgotICAgICAgICA8L2NvcHk+ICAgICAgCisgICAgICAgIDwvY29weT4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9ImRlZmF1bHQiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJBTlQuSE9NRSBpcyAke2FudC5ob21lfSIvPgpAQCAtNjEsOCArNjEsOCBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJhbnQgYXJjaGl2ZSAoQ3JlYXRlcyB6aXAgb2YgdGVzdGJhc2V9Ii8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiPiAgCisKKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIj4KICAgICAgICAgPHJlY29yZCBuYW1lPSJidWlsZC5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQU5UIFBST0pFQ1QgJHthbnQucHJvamVjdC5uYW1lfSIvPgogICAgICAgICA8YW50IGRpcj0id2ViL2hlbGxvd29ybGQiIHRhcmdldD0iYnVpbGQiLz4KQEAgLTc1LDkgKzc1LDkgQEAKICAgICAgICAgPGFudCBkaXI9ImFkbWlud2ViL2Jhc2ljIiB0YXJnZXQ9ImJ1aWxkIi8+LS0+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0iYnVpbGQub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtdGVzdHMiPiAgICAgICAgICAgIAorCisKKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtdGVzdHMiPgogICAgICAgICA8cmVjb3JkIG5hbWU9ImNvbXBpbGV0ZXN0cy5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KICAgICAgICAgPGFudCBkaXI9IndlYi9oZWxsb3dvcmxkIiB0YXJnZXQ9ImNvbXBpbGUtdGVzdHMiLz4KICAgICAgICAgPGFudCBkaXI9IndlYi9qc2Zhc3Ryb2xvZ2VyIiB0YXJnZXQ9ImNvbXBpbGUtdGVzdHMiLz4KQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgPCEtLSBhbnQgZGlyPSJwZXJzaXN0ZW5jZS9zZXJ2bGV0LWpwYS1hcHAiIHRhcmdldD0iY29tcGlsZS10ZXN0cyIvIC0tPgogICAgICAgICA8cmVjb3JkIG5hbWU9ImNvbXBpbGV0ZXN0cy5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiPgogICAgICAgICA8cmVjb3JkIG5hbWU9ImRlcGxveS5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KICAgICAgICAgPGFudCBkaXI9IndlYi9oZWxsb3dvcmxkIiB0YXJnZXQ9ImRlcGxveSIvPgpAQCAtOTUsMTAgKzk1LDEwIEBACiAgICAgICAgIDxhbnQgZGlyPSJ3ZWIvanNmaW5qZWN0aW9uIiB0YXJnZXQ9ImRlcGxveSIvPgogICAgICAgICA8YW50IGRpcj0iamRiYy9qZGJjdXNlcnR4IiB0YXJnZXQ9ImRlcGxveSIvPgogICAgICAgICA8IS0tIGFudCBkaXI9IndlYi9zdHJ1dHNiYXNpYyIgdGFyZ2V0PSJkZXBsb3kiLyAtLT4KLSAgICAgICAgPCEtLSBhbnQgZGlyPSJwZXJzaXN0ZW5jZS9zZXJ2bGV0LWpwYS1hcHAiIHRhcmdldD0iZGVwbG95Ii8gLS0+ICAgCisgICAgICAgIDwhLS0gYW50IGRpcj0icGVyc2lzdGVuY2Uvc2VydmxldC1qcGEtYXBwIiB0YXJnZXQ9ImRlcGxveSIvIC0tPgogICAgICAgICA8cmVjb3JkIG5hbWU9ImRlcGxveS5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0idW5kZXBsb3kub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+CiAgICAgICAgIDxhbnQgZGlyPSJ3ZWIvaGVsbG93b3JsZCIgdGFyZ2V0PSJ1bmRlcGxveSIvPgpAQCAtMTA2LDMzICsxMDYsMzMgQEAKICAgICAgICAgPGFudCBkaXI9IndlYi9qc2ZpbmplY3Rpb24iIHRhcmdldD0idW5kZXBsb3kiLz4KICAgICAgICAgPGFudCBkaXI9ImpkYmMvamRiY3VzZXJ0eCIgdGFyZ2V0PSJ1bmRlcGxveSIvPgogICAgICAgICA8IS0tIGFudCBkaXI9IndlYi9zdHJ1dHNiYXNpYyIgdGFyZ2V0PSJ1bmRlcGxveSIvIC0tPgotICAgICAgICA8IS0tIGFudCBkaXI9InBlcnNpc3RlbmNlL3NlcnZsZXQtanBhLWFwcCIgdGFyZ2V0PSJ1bmRlcGxveSIvIC0tPiAgIAorICAgICAgICA8IS0tIGFudCBkaXI9InBlcnNpc3RlbmNlL3NlcnZsZXQtanBhLWFwcCIgdGFyZ2V0PSJ1bmRlcGxveSIvIC0tPgogICAgICAgICA8cmVjb3JkIG5hbWU9InVuZGVwbG95Lm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9Im5vcHJvamVjdCI+Ci0JICAgIDxkZWxldGUgaW5jbHVkZWVtcHR5ZGlycz0idHJ1ZSI+Ci0JCTxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfSI+Ci0JCQk8aW5jbHVkZSBuYW1lPSIqKi9uYnByb2plY3QiLz4KLQkJPC9maWxlc2V0PgotCTwvZGVsZXRlPgorICAgICAgICA8ZGVsZXRlIGluY2x1ZGVlbXB0eWRpcnM9InRydWUiPgorICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0iPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovbmJwcm9qZWN0Ii8+CisgICAgICAgIDwvZmlsZXNldD4KKyAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgIAorCisKICAgICA8IS0tIFRhcmdldCBpcyByZS1kZWZpbnRlZCBoZXJlIGFzIGRpZG4ndCB3YW50IHRvIHNwZWNpZnkgd3Mucm9vdCBwcm9wZXJ0eSAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YmFzZWRpcn0vY2xhc3NlcyIvPgotCTxkZWxldGUgdmVyYm9zZT0idHJ1ZSIgaW5jbHVkZWVtcHR5ZGlycz0idHJ1ZSI+Ci0JCTxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfSIgaW5jbHVkZXM9IioqL2NsYXNzZXMiLz4KLQk8L2RlbGV0ZT4KKyAgICA8ZGVsZXRlIHZlcmJvc2U9InRydWUiIGluY2x1ZGVlbXB0eWRpcnM9InRydWUiPgorICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0iIGluY2x1ZGVzPSIqKi9jbGFzc2VzIi8+CisgICAgPC9kZWxldGU+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2Jhc2VkaXJ9L3Rlc3Qtb3V0cHV0IiBpbmNsdWRlZW1wdHlkaXJzPSJ0cnVlIi8+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2Jhc2VkaXJ9L2Rpc3QiIGluY2x1ZGVlbXB0eWRpcnM9InRydWUiLz4KLQk8ZGVsZXRlIGluY2x1ZGVlbXB0eWRpcnM9InRydWUiPgotCQk8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0iPgotCQkJPGluY2x1ZGUgbmFtZT0iKiovKi5vdXRwdXQiLz4KLQkJCTxpbmNsdWRlIG5hbWU9IioqLyoubG9nIi8+Ci0JCTwvZmlsZXNldD4KLQk8L2RlbGV0ZT4KKyAgICA8ZGVsZXRlIGluY2x1ZGVlbXB0eWRpcnM9InRydWUiPgorICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0iPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5vdXRwdXQiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyoubG9nIi8+CisgICAgICAgIDwvZmlsZXNldD4KKyAgICA8L2RlbGV0ZT4KICAgICAgICAgPGRlbGV0ZT4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfSIgaW5jbHVkZXM9IiouemlwIi8+CiAgICAgICAgIDwvZGVsZXRlPgpAQCAtMTQyLDUxICsxNDIsNTEgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IioqLyoud2FyIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAKLSAgICAKKworCiAgICAgPHRhcmdldCBuYW1lPSItcG9zdC10ZXN0LXJ1biI+CiAgICAgICAgIDxsb2FkZmlsZSBwcm9wZXJ0eT0ic3RhcnRzZXJ2ZXIubG9nIiBzcmNGaWxlPSIke2dsYXNzZmlzaC5ob21lfS9kb21haW5zL2RvbWFpbjEvbG9ncy9zZXJ2ZXIubG9nIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IiR7c3RhcnRzZXJ2ZXIubG9nfSIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHBhdGggaWQ9InBhdGgydGVzdG5nIj4KICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIuL2xpYi90ZXN0bmctNS4wLWpkazE1LmphciIvPgogICAgIDwvcGF0aD4KLSAgICAKKwogICAgIDx0YXNrZGVmIG5hbWU9InRlc3RuZyIgY2xhc3NuYW1lPSJvcmcudGVzdG5nLlRlc3ROR0FudFRhc2siPgogICAgICAgICA8Y2xhc3NwYXRoPgotCSAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtwbHVnaW5fY2xhc3NwYXRofSIvPgorICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtwbHVnaW5fY2xhc3NwYXRofSIvPgogICAgICAgICA8L2NsYXNzcGF0aD4KICAgICA8L3Rhc2tkZWY+Ci0gICAgCisKICAgICA8IS0tIFRhcmdldCBpcyByZS1kZWZpbnRlZCBoZXJlIGFzIGRpZG4ndCB3YW50IHRvIHNwZWNpZnkgd3Mucm9vdCBwcm9wZXJ0eSAtLT4KLSAgICA8dGFyZ2V0ICBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJjb21waWxlLXRlc3RzLGluaXRwcm9wcyI+ICAgIAorICAgIDx0YXJnZXQgIG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImNvbXBpbGUtdGVzdHMsaW5pdHByb3BzIj4KICAgICAgICAgPHJlY29yZCBuYW1lPSJydW50ZXN0bmcub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+Ci0gICAgICAgIDxlY2hvIG1lc3NhZ2U9Ij09PT09PT09PT09PT1TdGFydGluZyBUZXN0TkcgZnVuY3Rpb25hbCB0ZXN0cyBmcm9tIHRlc3RuZy54bWwgPT09PT09PT09PT09Ii8+ICAgIAorICAgICAgICA8ZWNobyBtZXNzYWdlPSI9PT09PT09PT09PT09U3RhcnRpbmcgVGVzdE5HIGZ1bmN0aW9uYWwgdGVzdHMgZnJvbSB0ZXN0bmcueG1sID09PT09PT09PT09PSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzVGVzdE5HWE1MIiB2YWx1ZT0idHJ1ZSIvPgotICAgICAgICAKLSAgICAgICAgPG1rZGlyIGRpcj0iJHt0ZXN0LnJlcG9ydH0iLz4gICAgCisKKyAgICAgICAgPG1rZGlyIGRpcj0iJHt0ZXN0LnJlcG9ydH0iLz4KICAgICAgICAgPHRlc3RuZyBvdXRwdXRkaXI9IiR7dGVzdC5yZXBvcnR9IgogICAgICAgICAgICAgICAgIGNsYXNzcGF0aHJlZj0icnVuLnRlc3RuZy5jbGFzc3BhdGgiPgogICAgICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURqYXZhLmNvbXBpbGVyPU5PTkUiLz4KICAgICAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1EaHR0cC5ob3N0PSR7Z2xhc3NmaXNoLmh0dHAuaG9zdH0iLz4KICAgICAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1EaHR0cC5wb3J0PSR7Z2xhc3NmaXNoLmh0dHAucG9ydH0iLz4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9ImJhc2VkaXIiIHZhbHVlPSIke2Jhc2VkaXJ9Ii8+Ci0gICAgICAgICAgICA8IS0tPGNsYXNzZmlsZXNldCBkaXI9ImNsYXNzZXMvdGVzdCIgaW5jbHVkZXM9IioqL1NlbGVuaXVtVGVzdC5jbGFzcyIvPi0tPiAgICAgICAgIAorICAgICAgICAgICAgPCEtLTxjbGFzc2ZpbGVzZXQgZGlyPSJjbGFzc2VzL3Rlc3QiIGluY2x1ZGVzPSIqKi9TZWxlbml1bVRlc3QuY2xhc3MiLz4tLT4KICAgICAgICAgICAgIDx4bWxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9InRlc3RuZy54bWwiLz4KLSAgICAgICAgICAgIAorCiAgICAgICAgIDwvdGVzdG5nPgotICAgICAgICAKKwogICAgICAgICA8cmVjb3JkIG5hbWU9InJ1bnRlc3RuZy5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICA8IS0tIDxhbnRjYWxsIHRhcmdldD0iLXBvc3QtdGVzdC1ydW4iLz4tLT4KLSAgICAgICAgCi0gICAgPC90YXJnZXQ+ICAKLSAgICAKLSAgICAKKworICAgIDwvdGFyZ2V0PgorCisKICAgICA8IS0tIEdlbmVyYXRlIHRoZSBUZXN0TkcgcmVwb3J0IC0tPgotICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0IiBkZXBlbmRzPSJpbml0cHJvcHMiPiAgICAgICAgCisgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQiIGRlcGVuZHM9ImluaXRwcm9wcyI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkdlbmVyYXRpbmcgcmVwb3J0IGF0ICR7dGVzdC5yZXBvcnR9Ii8+CiAgICAgICAgIDxqdW5pdHJlcG9ydCB0b2Rpcj0iJHt0ZXN0LnJlcG9ydH0iPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIj4KQEAgLTE5Nyw3ICsxOTcsNyBAQAogICAgICAgICA8L2p1bml0cmVwb3J0PgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IFJlcG9ydCBhdmFpbGFibGUgYXQgJHt0ZXN0LnJlcG9ydH0vaW5kZXguaHRtbCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJpbml0cHJvcHMiPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQuY2xhc3MuZGlyIiB2YWx1ZT0iJHtiYXNlZGlyfS9jbGFzc2VzL3Rlc3QiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRlc3QucmVwb3J0IiB2YWx1ZT0iJHtiYXNlZGlyfS90ZXN0LW91dHB1dCIvPgpAQCAtMjA2LDEyICsyMDYsMTIgQEAKICAgICAgICAgICAgIDwhLS0gZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0vbGliIj4KICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIvPgogICAgICAgICAgICAgPC9maWxlc2V0IC0tPgotCSAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtwbHVnaW5fY2xhc3NwYXRofSIvPgorICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtwbHVnaW5fY2xhc3NwYXRofSIvPgogICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2J1aWxkLmNsYXNzLmRpcn0iLz4KICAgICAgICAgPC9wYXRoPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIAorCisKICAgICA8dGFyZ2V0IG5hbWU9ImFyY2hpdmUiIGRlcGVuZHM9ImluaXRwcm9wcyxjbGVhbiI+CiAgICAgICAgIDx0c3RhbXA+CiAgICAgICAgICAgICA8IS0tPGZvcm1hdCBwcm9wZXJ0eT0iVE9EQVlfVUsiIHBhdHRlcm49ImQtTU1NTS15eXl5IiBsb2NhbGU9ImVuLFVLIi8+LS0+CkBAIC0yMjEsOSArMjIxLDkgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfSIgaW5jbHVkZXM9IiouemlwIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8ZGVsZXRlIGZpbGU9IntmaW5hbC5zcmMubmFtZX0iIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICAgICAgICAKKwogICAgICAgICA8emlwIHppcGZpbGU9IiR7ZmluYWwuc3JjLm5hbWV9IiBiYXNlZGlyPSIuIj4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8ZXhjbHVkZSBuYW1lPSIke3Rlc3QucmVwb3J0fS8qKiIvPgogICAgICAgICAgICAgPGV4Y2x1ZGUgbmFtZT0iJHtidWlsZC5jbGFzcy5kaXJ9LyoqIi8+CiAgICAgICAgICAgICA8ZXhjbHVkZSBuYW1lPSIqKi8qLmxvZyIvPgpAQCAtMjMyLDkgKzIzMiw5IEBACiAgICAgICAgICAgICA8ZXhjbHVkZSBuYW1lPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgICAgICA8ZXhjbHVkZSBuYW1lPSIqKi9DVlMiLz4KICAgICAgICAgICAgIDxleGNsdWRlIG5hbWU9IioqL25icHJvamVjdCIvPgotICAgICAgICAgICAgCisKICAgICAgICAgPC96aXA+Ci0gICAgICAgIAorCiAgICAgPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0ic2V0T1NDb25kaXRpb25zIj4KQEAgLTI0NywyNyArMjQ3LDI3IEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJzdGFydC1zZXJ2ZXIiIGRlcGVuZHM9InNldE9TQ29uZGl0aW9ucyIgaWY9InYzIj4KLSAgIAorCiAgICAgPGVjaG8+Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKzwvZWNobz4KICAgICA8ZWNobz58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8PC9lY2hvPgogICAgIDxlY2hvPnwgUyBUIEEgUiBUIEkgTiBHICAgR0xBU1NGSVNIIHw8L2VjaG8+CiAgICAgPGVjaG8+fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfDwvZWNobz4KICAgICA8ZWNobz4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rPC9lY2hvPgotICAgIAorCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydC1zZXJ2ZXItdW5peCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnQtc2VydmVyLXdpbmRvd3MiLz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InN0YXJ0LXNlcnZlci13aW5kb3dzIiBpZj0iaXNXaW5kb3dzIj4KLSAgICA8ZXhlYyBleGVjdXRhYmxlPSJjbWQiIHNwYXduPSJ0cnVlIj4JCisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iY21kIiBzcGF3bj0idHJ1ZSI+CiAgICAgICAgIDxhcmcgdmFsdWU9Ii9jIi8+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7Z2xhc3NmaXNoLmhvbWV9L2Jpbi9hc2FkbWluLmJhdCIvPgogICAgICAgICA8YXJnIHZhbHVlPSJzdGFydC1kb21haW4iLz4KICAgICA8L2V4ZWM+CiA8L3RhcmdldD4KLSAgICAKKwogPHRhcmdldCBuYW1lPSJzdGFydC1zZXJ2ZXItdW5peCIgaWY9ImlzVW5peCI+Ci0gICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtnbGFzc2Zpc2guaG9tZX0vYmluL2FzYWRtaW4iPiAgICAgICAgCisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtnbGFzc2Zpc2guaG9tZX0vYmluL2FzYWRtaW4iPgogICAgICAgICA8YXJnIHZhbHVlPSJzdGFydC1kb21haW4iLz4KICAgICA8L2V4ZWM+CiA8L3RhcmdldD4KQEAgLTI3NywxNyArMjc3LDE3IEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wLXNlcnZlci11bml4Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wLXNlcnZlci13aW5kb3dzIi8+CiA8L3RhcmdldD4KLSAgICAKKwogPHRhcmdldCBuYW1lPSJzdG9wLXNlcnZlci13aW5kb3dzIiBpZj0iaXNXaW5kb3dzIj4KLSAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iY21kIj4JCisgICAgIDxleGVjIGV4ZWN1dGFibGU9ImNtZCI+CiAgICAgICAgICA8YXJnIHZhbHVlPSIvYyIvPgogICAgICAgICAgPGFyZyB2YWx1ZT0iJHtnbGFzc2Zpc2guaG9tZX0vYmluL2FzYWRtaW4uYmF0Ii8+CiAgICAgICAgICA8YXJnIHZhbHVlPSJzdG9wLWRvbWFpbiIvPgogICAgICA8L2V4ZWM+CiA8L3RhcmdldD4KLSAgICAgICAgIAorCiA8dGFyZ2V0IG5hbWU9InN0b3Atc2VydmVyLXVuaXgiIGlmPSJpc1VuaXgiPgotICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2dsYXNzZmlzaC5ob21lfS9iaW4vYXNhZG1pbiI+ICAgICAgICAKKyAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtnbGFzc2Zpc2guaG9tZX0vYmluL2FzYWRtaW4iPgogICAgICAgICA8YXJnIHZhbHVlPSJzdG9wLWRvbWFpbiIvPgogICAgIDwvZXhlYz4KIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9lamIzMC9zZXNzaW9uL2hlbGxvL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvZWpiMzAvc2Vzc2lvbi9oZWxsby9idWlsZC54bWwKaW5kZXggNDgyMDk2YS4uMGU2ZjJiMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9lamIzMC9zZXNzaW9uL2hlbGxvL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L2VqYjMwL3Nlc3Npb24vaGVsbG8vYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImVqYjMwLXNlc3Npb24taGVsbG8iIGRlZmF1bHQ9ImRlZmF1bHQiIGJhc2VkaXI9Ii4iPgogICAgIDxwcm9wZXJ0eSBmaWxlPSJidWlsZC5wcm9wZXJ0aWVzIi8+Ci0gICAgCisKICA8ZGVzY3JpcHRpb24+QnVpbGRzLCB0ZXN0cywgYW5kIHJ1bnMgdGhlIHByb2plY3QgSGVsbG8gSlNQIEFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KIDwhLS0gPGltcG9ydCBmaWxlPSJuYnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4tLT4KIApAQCAtNDQsMTMgKzQ0LDEzIEBACiA8cGF0aCBpZD0icGF0aDJ0ZXN0bmciPgogICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0idGVzdG5nLTUuMC1qZGsxNS5qYXIiLz4KIDwvcGF0aD4KLSAgICAgIAotICAgIAorCisKIAogPHBhdGggaWQ9ImNsYXNzLnBhdGgiPgogICAgIDxmaWxlc2V0IGRpcj0iJHtpbnN0YWxsLmRpcn0vbGliIj4KICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qYXIiLz4KLSAgICA8L2ZpbGVzZXQ+ICAgICAgCisgICAgPC9maWxlc2V0PgogICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iY2xhc3NlcyIvPgogPC9wYXRoPgogCkBAIC02Nyw3ICs2Nyw3IEBACiAKIDwhLS0gVGVzdE5HIGNsYXNzIGZpbGVzZXQgLS0+CiAKLTx0YXJnZXQgbmFtZT0iYnVpbGQiPiAgICAKKzx0YXJnZXQgbmFtZT0iYnVpbGQiPgogICAgIDxkZWxldGUgZGlyPSJjbGFzc2VzIi8+CiAgICAgPG1rZGlyIGRpcj0iY2xhc3Nlcy9hcHAiLz4KICAgICA8amF2YWMgICBkZWJ1Zz0idHJ1ZSIKQEAgLTc2LDIwICs3NiwyMCBAQAogICAgIGNsYXNzcGF0aHJlZj0iY2xhc3MucGF0aCIKICAgICBzcmNkaXI9InNyYy9lamIiCiAgICAgZGVzdGRpcj0iY2xhc3Nlcy9hcHAiLz4KLSAgICAKKwogICAgIDxkZWxldGUgZGlyPSJkaXN0IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgICAKKwogICAgIDxta2RpciBkaXI9ImRpc3QiLz4KLSAgICAKLSAgICAKLSAgICA8amFyIGRlc3RmaWxlPSJkaXN0LyR7ZWpiamFyLmZpbGV9Ij4gICAgICAgIAorCisKKyAgICA8amFyIGRlc3RmaWxlPSJkaXN0LyR7ZWpiamFyLmZpbGV9Ij4KICAgICAgICAgPGZpbGVzZXQgIGRpcj0iY2xhc3Nlcy9hcHAiPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgICAgPG1ldGFpbmYgZGlyPSJkZXNjcmlwdG9yIj4gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLnhtbCIvPiAgICAgICAgICAgIAorICAgICAgIDxtZXRhaW5mIGRpcj0iZGVzY3JpcHRvciI+CisgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi54bWwiLz4KICAgICAgICAgPC9tZXRhaW5mPgotICAgIDwvamFyPiAgICAKKyAgICA8L2phcj4KICAgICA8ZWNobyBtZXNzYWdlPSI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ii8+CiAgICAgPGVjaG8gbWVzc2FnZT0iUGFja2FnZWQgQXJjaGl2ZSBhdCAuL2Rpc3QvJHtlamJqYXIuZmlsZX0iLz4KICAgICA8ZWNobyBtZXNzYWdlPSI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ii8+CkBAIC05OCw3ICs5OCw3IEBACiA8dGFza2RlZiBuYW1lPSJ0ZXN0bmciCiAgICAgICAgICBjbGFzc3BhdGhyZWY9InBhdGgydGVzdG5nIgogICAgICAgICAgY2xhc3NuYW1lPSJvcmcudGVzdG5nLlRlc3ROR0FudFRhc2siLz4KLSAgICAgICAgIAorCiAKIDwhLS0gR2VuZXJhdGUgdGhlIFRlc3RORyByZXBvcnQgLS0+CiA8dGFyZ2V0IG5hbWU9InJlcG9ydCI+CkBAIC0xMjUsOSArMTI1LDkgQEAKICAgICAgICAvPgogPC90YXJnZXQ+CiAKLTx0YXJnZXQgIG5hbWU9InJ1biI+ICAgIAotICAgIAotICAgIDxlY2hvIG1lc3NhZ2U9Ij09PT09PT09PT09PT1TdGFydGluZyBUZXN0TkcgdGVzdCBhdCBcbiAke2Jhc2VkaXJ9ICA9PT09PT09PT09PT0iLz4gICAgCis8dGFyZ2V0ICBuYW1lPSJydW4iPgorCisgICAgPGVjaG8gbWVzc2FnZT0iPT09PT09PT09PT09PVN0YXJ0aW5nIFRlc3RORyB0ZXN0IGF0IFxuICR7YmFzZWRpcn0gID09PT09PT09PT09PSIvPgogICAgIDxta2RpciBkaXI9Ii4uLy4uL3Rlc3Qtb3V0cHV0Ii8+CiAgICAgPHRlc3RuZyBvdXRwdXRkaXI9Ii4uLy4uLy4uL3Rlc3Qtb3V0cHV0IgogICAgICAgICAgICAgY2xhc3NwYXRocmVmPSJ0ZXN0LmNsYXNzcGF0aCIgZ3JvdXBzPSIiPgpAQCAtMTM1LDcgKzEzNSw3IEBACiAgICAgICAgIDwhLS08eG1sZmlsZXNldCBkaXI9Ii4uLy4uLy4uLyIgaW5jbHVkZXM9InRlc3RuZy54bWwiLz4tLT4KICAgICA8L3Rlc3RuZz4KIDwvdGFyZ2V0PgotICAgIAorCiA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0ic3VuLXRhc2tkZWYiPgogICAgICAgPGVjaG8gbWVzc2FnZT0iJHtzdW4uYXBwc2VydmVyLmFudGphcn0iLz4KIApAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgcGFzc3dvcmRmaWxlPSIke2luc3RhbGwuZGlyfS9wYXNzLnR4dCIKICAgICBob3N0PSIke2FkbWluLmhvc3R9IgogICAgIHBvcnQ9IiR7YWRtaW4ucG9ydH0iCi0gICAgYXNpbnN0YWxsZGlyPSIke2luc3RhbGwuZGlyfSIgLz4gICAgICAgICAgICAKKyAgICBhc2luc3RhbGxkaXI9IiR7aW5zdGFsbC5kaXJ9IiAvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iZGlzdCI+CkBAIC0xNTksMTMgKzE1OSwxMyBAQAogPHRhcmdldCBuYW1lPSJfc3RhcnQtc2VsZW5pdW0iPgogIDxqYXZhIGphcj0iLi4vbGliL3NlbGVuaXVtLyR7c2VsZW5pdW0tc3J2ci1qYXJ9IiBmb3JrPSJ0cnVlIiBzcGF3bj0idHJ1ZSIgLz4KICA8YW50Y2FsbCB0YXJnZXQ9Il9ydW4tdWEtdGVzdHMiIC8+Ci0gPGdldCBkZXN0PSIke3Rlc3RyZXBvcnRkaXJ9L3Jlc3VsdHMudHh0IiAKKyA8Z2V0IGRlc3Q9IiR7dGVzdHJlcG9ydGRpcn0vcmVzdWx0cy50eHQiCiAgICAgICAgIHNyYz0iJHtzZWxlbml1bS1zcnZyLWxvY30vc2VsZW5pdW0tc2VydmVyL2RyaXZlci8/Y21kPXNodXREb3duIiAvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0icnVuIj4KICA8dGFza2RlZiBjbGFzc3BhdGhyZWY9ImJ1aWxkLmNsYXNzcGF0aCIgcmVzb3VyY2U9InRlc3RuZ3Rhc2tzIiAvPgotIDx0ZXN0bmcgb3V0cHV0RGlyPSIke3Rlc3RyZXBvcnRkaXJ9IiAKKyA8dGVzdG5nIG91dHB1dERpcj0iJHt0ZXN0cmVwb3J0ZGlyfSIKICAgICAgICAgIGNsYXNzcGF0aD0iJHt0ZXN0Y2xhc3Nlc2Rpcn07JHtjbGFzc2VzZGlyfSIgaGFsdG9uZmFpbHVyZT0idHJ1ZSI+CiAgIDx4bWxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9InRlc3RuZy54bWwiIC8+CiAgIDxjbGFzc3BhdGg+CkBAIC0xNzMsNyArMTczLDcgQEAKICAgPC9jbGFzc3BhdGg+CiAgPC90ZXN0bmc+CiA8L3RhcmdldD4KLSAgICAKLSAgICAKKworCiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwKaW5kZXggN2ZlMTU1ZC4uOGRhYTU1ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwKQEAgLTE4LDcgKzE4LDcgQEAKIC0tPgogCiA8cHJvamVjdCBuYW1lPSJjb21tb24taW1wbCIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KLSAgICAKKwogICAgIDxwcm9wZXJ0eSBmaWxlPSIke3dzLnJvb3R9L2J1aWxkLnByb3BlcnRpZXMiLz4KICAgICA8cHJvcGVydHkgZW52aXJvbm1lbnQ9ImVudiIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJjb25maWcuZGlyIiB2YWx1ZT0iJHthbnQuZmlsZX0iLz4KQEAgLTMxLDcgKzMxLDcgQEAKICAgICA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGFzcy5vdXRwdXQiIHZhbHVlPSIke3dzLnJvb3R9L2NsYXNzZXMvdGVzdCIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJkaXN0LmRpciIgdmFsdWU9IiR7d3Mucm9vdH0vZGlzdC8ke3Rlc3RzdWl0ZS5uYW1lfSIvPgogCi0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7d3Mucm9vdH0vY2xhc3NlcyIvPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtyZXN1bHQub3V0cHV0fSIvPgpAQCAtNDIsMTUgKzQyLDE1IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqKi8qLndhciIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDxwYXRoIGlkPSJydW4udGVzdG5nLmNsYXNzcGF0aCI+Ci0JICAgIDxmaWxlc2V0IGRpcj0iJHt3cy5yb290fS9saWIiPgorICAgICAgICA8ZmlsZXNldCBkaXI9IiR7d3Mucm9vdH0vbGliIj4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouamFyIi8+CiAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2NsYXNzLm91dHB1dH0iLz4KICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke3Rlc3QuY2xhc3Mub3V0cHV0fSIvPgogICAgIDwvcGF0aD4KLSAgICAKKwogICAgIDxwYXRoIGlkPSJjbGFzcy5wYXRoIj4KICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2dsYXNzZmlzaC5ob21lfSI+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qamF2YWVlKi5qYXIiLz4KQEAgLTU5LDIzICs1OSwyMyBAQAogICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7dGVzdC5jbGFzcy5vdXRwdXR9Ii8+CiAgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke3BsdWdpbl9jbGFzc3BhdGh9Ii8+CiAgICAgPC9wYXRoPgotICAgIAorCiAgICAgPCEtLSBUZXN0TkcgY2xhc3MgZmlsZXNldCAtLT4KLSAgICAKKwogICAgIDxwYXRoIGlkPSJwYXRoMnRlc3RuZyI+Ci0JICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHt3cy5yb290fS9saWIvdGVzdG5nLTUuMC1qZGsxNS5qYXIiLz4KKyAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke3dzLnJvb3R9L2xpYi90ZXN0bmctNS4wLWpkazE1LmphciIvPgogICAgIDwvcGF0aD4KLSAgICAKKwogICAgIDx0YXNrZGVmIG5hbWU9InRlc3RuZyIgY2xhc3NuYW1lPSJvcmcudGVzdG5nLlRlc3ROR0FudFRhc2siPgogICAgICAgICA8Y2xhc3NwYXRoPgotCSAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtwbHVnaW5fY2xhc3NwYXRofSIvPgorICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtwbHVnaW5fY2xhc3NwYXRofSIvPgogICAgICAgICA8L2NsYXNzcGF0aD4KICAgICA8L3Rhc2tkZWY+Ci0gICAgCi0gICAgCisKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS10ZXN0cyIKLQkgICAgZGVzY3JpcHRpb249ImNvbXBpbGUgdGhlIHRlc3QgbmcgZXhhbXBsZSIgZGVwZW5kcz0iIj4KLQkgICAgPGVjaG8gbWVzc2FnZT0iY29tcGlsaW5nIHRlc3QgY2xpZW50IHRvICR7dGVzdC5jbGFzcy5vdXRwdXR9Ii8+CisgICAgICAgIGRlc2NyaXB0aW9uPSJjb21waWxlIHRoZSB0ZXN0IG5nIGV4YW1wbGUiIGRlcGVuZHM9IiI+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImNvbXBpbGluZyB0ZXN0IGNsaWVudCB0byAke3Rlc3QuY2xhc3Mub3V0cHV0fSIvPgogCiAgICAgICAgIDxta2RpciBkaXI9IiR7dGVzdC5jbGFzcy5vdXRwdXR9Ii8+CiAgICAgICAgIDxqYXZhYyAgIGRlYnVnPSJ0cnVlIgpAQCAtODMsMTUgKzgzLDE1IEBACiAgICAgICAgICAgICAgICAgIHNvdXJjZT0iMS41IgogICAgICAgICAgICAgICAgICBzcmNkaXI9InNyYy90ZXN0IgogICAgICAgICAgICAgICAgICBkZXN0ZGlyPSIke3Rlc3QuY2xhc3Mub3V0cHV0fSI+Ci0JCSA8Y2xhc3NwYXRoPgotCQkgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtwbHVnaW5fY2xhc3NwYXRofSIvPgotICAgICAgCQkgPC9jbGFzc3BhdGg+CisgICAgICAgICA8Y2xhc3NwYXRoPgorICAgICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtwbHVnaW5fY2xhc3NwYXRofSIvPgorICAgICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YWM+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgCi0gICAgCi0gICAgCisKKworCisKICAgICA8IS0tIEdlbmVyYXRlIHRoZSBUZXN0TkcgcmVwb3J0IC0tPgogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0Ij4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7cmVzdWx0Lm91dHB1dH0iLz4KQEAgLTEwNCw3ICsxMDQsNyBAQAogICAgICAgICAgICAgPHJlcG9ydCBmb3JtYXQ9Im5vZnJhbWVzIiB0b2Rpcj0idGVzdC1yZXBvcnQiLz4KICAgICAgICAgPC9qdW5pdHJlcG9ydD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYXJjaGl2ZS10eXBlIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iYXJjaGl2ZS10eXBlIGlzICR7YXJjaGl2ZS50eXBlfSIvPgogICAgICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJhcmNoaXZlLndhciI+CkBAIC0xMTQsMzIgKzExNCwzMiBAQAogICAgICAgICAgICAgPGVxdWFscyBwYXR0ZXJuPSJlYXIiIHN0cmluZz0iJHthcmNoaXZlLnR5cGV9Ii8+CiAgICAgICAgIDwvY29uZGl0aW9uPgogICAgICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJhcmNoaXZlLmphciI+Ci0gICAgICAgICAgICA8ZXF1YWxzIHBhdHRlcm49ImphciIgc3RyaW5nPSIke2FyY2hpdmUudHlwZX0iLz4gICAgICAgICAgICAKKyAgICAgICAgICAgIDxlcXVhbHMgcGF0dGVybj0iamFyIiBzdHJpbmc9IiR7YXJjaGl2ZS50eXBlfSIvPgogICAgICAgICA8L2NvbmRpdGlvbiAtLT4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtaW1wbCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtd2FyIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtamFyIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtc2luZ2xlIj4KLQkgICAgPGRlbGV0ZSBkaXI9IiRjbGFzcy5vdXRwdXR9Ii8+Ci0JICAgIDxta2RpciBkaXI9IiR7Y2xhc3Mub3V0cHV0fSIvPgorICAgICAgICA8ZGVsZXRlIGRpcj0iJGNsYXNzLm91dHB1dH0iLz4KKyAgICAgICAgPG1rZGlyIGRpcj0iJHtjbGFzcy5vdXRwdXR9Ii8+CiAgICAgICAgIDxqYXZhYyAgIGRlYnVnPSJ0cnVlIgogICAgICAgICAgICAgICAgICBmb3JrPSJ0cnVlIgogICAgICAgICAgICAgICAgICBzb3VyY2U9IjEuNSIKICAgICAgICAgICAgICAgICAgY2xhc3NwYXRocmVmPSJjbGFzcy5wYXRoIgogICAgICAgICAgICAgICAgICBzcmNkaXI9InNyYyIKICAgICAgICAgICAgICAgICAgZGVzdGRpcj0iJHtjbGFzcy5vdXRwdXR9Ii8+Ci0gICAgICAgIAotICAgIDwvdGFyZ2V0PgotICAgIAogCi08dGFyZ2V0IG5hbWU9ImJ1aWxkLXdhciIgZGVwZW5kcz0iYXJjaGl2ZS10eXBlIiBpZj0iYXJjaGl2ZS53YXIiPiAgCisgICAgPC90YXJnZXQ+CisKKworPHRhcmdldCBuYW1lPSJidWlsZC13YXIiIGRlcGVuZHM9ImFyY2hpdmUtdHlwZSIgaWY9ImFyY2hpdmUud2FyIj4KICAgICA8ZWNobyBtZXNzYWdlPSJOb3cgY3JlYXRpbmcgYSB3YXIgZmlsZSAke2Rpc3QuZGlyfS8ke3dhci5maWxlLmV4dH0iLz4KLSAgICAKKwogICAgIDxkZWxldGUgZGlyPSIke2NsYXNzLm91dHB1dH0iLz4KICAgICA8ZGVsZXRlIGRpcj0iJHtkaXN0LmRpcn0iLz4KICAgICA8ZGVsZXRlIGZpbGU9IiR7d2FyLmZpbGUuZXh0fSIvPgpAQCAtMTUyLDI5ICsxNTIsMjkgQEAKICAgICBjbGFzc3BhdGhyZWY9ImNsYXNzLnBhdGgiCiAgICAgc3JjZGlyPSJzcmMvamF2YSIKICAgICBkZXN0ZGlyPSIke2NsYXNzLm91dHB1dH0iLz4KLSAgICAKKwogICAgIDxta2RpciBkaXI9IiR7Y2xhc3Mub3V0cHV0fS9NRVRBLUlORiIvPgotICAgIDxjb3B5IGZpbGU9Im1ldGFkYXRhL3BlcnNpc3RlbmNlLnhtbCIgdG9kaXI9IiR7Y2xhc3Mub3V0cHV0fS9NRVRBLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAorICAgIDxjb3B5IGZpbGU9Im1ldGFkYXRhL3BlcnNpc3RlbmNlLnhtbCIgdG9kaXI9IiR7Y2xhc3Mub3V0cHV0fS9NRVRBLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgPGNvcHkgZmlsZT0ic3JjL2phdmEvQXBwbGljYXRpb25SZXNvdXJjZS5wcm9wZXJ0aWVzIiB0b2Rpcj0iJHtjbGFzcy5vdXRwdXR9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgICAKLSAgICAKKworCiAgICAgPHdhciBkZXN0ZmlsZT0iJHtkaXN0LmRpcn0vJHt3YXIuZmlsZS5leHR9IiB3ZWJ4bWw9Im1ldGFkYXRhL3dlYi54bWwiPgogICAgICAgICA8ZmlsZXNldCBkaXI9IndlYi9odG1sIi8+CiAgICAgICAgIDxmaWxlc2V0IGRpcj0id2ViL2pzcCIvPgogICAgICAgICA8IS0tPGxpYiBkaXI9InRoaXJkcGFydHkvbGlicyI+CiAgICAgICAgIDxleGNsdWRlIG5hbWU9ImpkYmMxLmphciIvPgogICAgICAgICA8L2xpYj4tLT4KLSAgICAgICAgPGNsYXNzZXMgZGlyPSIke2NsYXNzLm91dHB1dH0iPiAgICAgICAgCisgICAgICAgIDxjbGFzc2VzIGRpcj0iJHtjbGFzcy5vdXRwdXR9Ij4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouY2xhc3MiLz4KLQkgICAgPGluY2x1ZGUgbmFtZT0iKiovcGVyc2lzdGVuY2UueG1sIi8+Ci0JICAgIDxpbmNsdWRlIG5hbWU9IioqLyoucHJvcGVydGllcyIvPgorICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi9wZXJzaXN0ZW5jZS54bWwiLz4KKyAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5wcm9wZXJ0aWVzIi8+CiAgICAgICAgIDwvY2xhc3Nlcz4KICAgICAgICAgPCEtLTx6aXBmaWxlc2V0IGRpcj0ic3JjL2dyYXBoaWNzL2ltYWdlcy9naWZzIgogICAgICAgICBwcmVmaXg9ImltYWdlcyIvPi0tPgotICAgICAgICA8d2ViaW5mIGRpcj0ibWV0YWRhdGEiPiAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi54bWwiLz4gICAgICAgICAgICAgICAgICAKKyAgICAgICAgPHdlYmluZiBkaXI9Im1ldGFkYXRhIj4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyoueG1sIi8+CiAgICAgICAgICAgICA8ZXhjbHVkZSBuYW1lPSIqKi9wZXJzaXN0ZW5jZS54bWwiLz4KLSAgICAgICAgPC93ZWJpbmY+ICAgICAgICAKKyAgICAgICAgPC93ZWJpbmY+CiAgICAgPC93YXI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1cGRhdGUtd2FyLXN0cnV0cyIvPgogICAgIDxjb3B5IGZpbGU9IiR7ZGlzdC5kaXJ9LyR7d2FyLmZpbGUuZXh0fSIgdG9maWxlPSIuLyR7d2FyLmZpbGUuZXh0fSIvPgpAQCAtMTg0LDE2ICsxODQsMTYgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InVwZGF0ZS13YXItc3RydXRzIiBpZj0iYWRkLnN0cnV0cy5qYXIiPgotCTxlY2hvIG1lc3NhZ2U9IkFkZGluZyBzdHJ1dHMgamFyIHRvIFdFQi1JTkYvbGliIi8+CisgICAgPGVjaG8gbWVzc2FnZT0iQWRkaW5nIHN0cnV0cyBqYXIgdG8gV0VCLUlORi9saWIiLz4KIDx3YXIgZGVzdGZpbGU9IiR7ZGlzdC5kaXJ9LyR7d2FyLmZpbGUuZXh0fSIgdXBkYXRlPSJ0cnVlIj4KLQk8bGliIGRpcj0iJHt3cy5yb290fS93ZWIvbGliL3N0cnV0cy0xLjIuOSI+Ci0JCTxpbmNsdWRlIG5hbWU9IioqLyouamFyIi8+Ci0JPC9saWI+CisgICAgPGxpYiBkaXI9IiR7d3Mucm9vdH0vd2ViL2xpYi9zdHJ1dHMtMS4yLjkiPgorICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIvPgorICAgIDwvbGliPgogPC93YXI+Ci0JCisKIDwvdGFyZ2V0PgogCi08dGFyZ2V0IG5hbWU9ImJ1aWxkLWphciIgZGVwZW5kcz0iYXJjaGl2ZS10eXBlIiBpZj0iYXJjaGl2ZS5qYXIiPiAgICAKKzx0YXJnZXQgbmFtZT0iYnVpbGQtamFyIiBkZXBlbmRzPSJhcmNoaXZlLXR5cGUiIGlmPSJhcmNoaXZlLmphciI+CiAgICAgPGRlbGV0ZSBkaXI9IiR7Y2xhc3Mub3V0cHV0fSIvPgogICAgIDxkZWxldGUgZGlyPSIke2Rpc3QuZGlyfSIvPgogICAgIDxta2RpciBkaXI9IiR7Y2xhc3Mub3V0cHV0fSIvPgpAQCAtMjA3LDE4ICsyMDcsMTggQEAKICAgICBkZXN0ZGlyPSIke2NsYXNzLm91dHB1dH0vYXBwIi8+CiAgICAgPGVjaG8gbWVzc2FnZT0iTm93IGNyZWF0aW5nIGEgd2FyIGZpbGUgJHtkaXN0LmRpcn0vJHt3YXIuZmlsZS5leHR9Ii8+CiAgICAgPHdhciBkZXN0ZmlsZT0iJHtkaXN0LmRpcn0vJHt3YXIuZmlsZS5leHR9IiB3ZWJ4bWw9Im1ldGFkYXRhL3dlYi54bWwiIG5lZWR4bWxmaWxlPSJ0cnVlIj4KLQkgICAgPGZpbGVzZXQgZGlyPSJzcmMvamF2YS9odG1sIi8+CisgICAgICAgIDxmaWxlc2V0IGRpcj0ic3JjL2phdmEvaHRtbCIvPgogICAgICAgICA8ZmlsZXNldCBkaXI9InNyYy9teWFwcC9qc3AiLz4KICAgICAgICAgPCEtLTxsaWIgZGlyPSJ0aGlyZHBhcnR5L2xpYnMiPgogICAgICAgICA8ZXhjbHVkZSBuYW1lPSJqZGJjMS5qYXIiLz4KICAgICAgICAgPC9saWI+LS0+Ci0gICAgICAgIDxjbGFzc2VzIGRpcj0iJHtjbGFzcy5vdXRwdXR9L2FwcCI+ICAgICAgICAKLSAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouY2xhc3MiLz4gICAgICAgIAorICAgICAgICA8Y2xhc3NlcyBkaXI9IiR7Y2xhc3Mub3V0cHV0fS9hcHAiPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2NsYXNzZXM+CiAgICAgICAgIDwhLS08emlwZmlsZXNldCBkaXI9InNyYy9ncmFwaGljcy9pbWFnZXMvZ2lmcyIKICAgICAgICAgcHJlZml4PSJpbWFnZXMiLz4tLT4KLSAgICAgICAgPCEtLTx3ZWJpbmYgZGlyPSJtZXRhZGF0YSI+ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLnhtbCIvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgPCEtLTx3ZWJpbmYgZGlyPSJtZXRhZGF0YSI+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLnhtbCIvPgogICAgICAgICA8L3dlYmluZj4tLT4KICAgICA8L3dhcj4KICAgICA8Y29weSBmaWxlPSIke2Rpc3QuZGlyfS8ke3dhci5maWxlLmV4dH0iIHRvZmlsZT0iLi8ke3dhci5maWxlLmV4dH0iLz4KQEAgLTIyOCw3ICsyMjgsNyBAQAogPC90YXJnZXQ+CiAKIAotPHRhcmdldCBuYW1lPSJidWlsZC1lYXIiIGRlcGVuZHM9ImFyY2hpdmUtdHlwZSIgaWY9ImFyY2hpdmUuZWFyIj4gICAgCis8dGFyZ2V0IG5hbWU9ImJ1aWxkLWVhciIgZGVwZW5kcz0iYXJjaGl2ZS10eXBlIiBpZj0iYXJjaGl2ZS5lYXIiPgogICAgIDxkZWxldGUgZGlyPSIke2NsYXNzLm91dHB1dH0vYXBwIi8+CiAgICAgPGRlbGV0ZSBkaXI9IiR7ZGlzdC5kaXJ9Ii8+CiAgICAgPG1rZGlyIGRpcj0iJHtjbGFzcy5vdXRwdXR9L2FwcCIvPgpAQCAtMjQ3LDEzICsyNDcsMTMgQEAKICAgICAgICAgPCEtLTxsaWIgZGlyPSJ0aGlyZHBhcnR5L2xpYnMiPgogICAgICAgICA8ZXhjbHVkZSBuYW1lPSJqZGJjMS5qYXIiLz4KICAgICAgICAgPC9saWI+LS0+Ci0gICAgICAgIDxjbGFzc2VzIGRpcj0iJHtjbGFzcy5vdXRwdXR9L2FwcCI+ICAgICAgICAKLSAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqL0hlbGxvLmNsYXNzIi8+ICAgICAgICAKKyAgICAgICAgPGNsYXNzZXMgZGlyPSIke2NsYXNzLm91dHB1dH0vYXBwIj4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqL0hlbGxvLmNsYXNzIi8+CiAgICAgICAgIDwvY2xhc3Nlcz4KICAgICAgICAgPCEtLTx6aXBmaWxlc2V0IGRpcj0ic3JjL2dyYXBoaWNzL2ltYWdlcy9naWZzIgogICAgICAgICBwcmVmaXg9ImltYWdlcyIvPi0tPgotICAgICAgICA8IS0tPHdlYmluZiBkaXI9Im1ldGFkYXRhIj4gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyoueG1sIi8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICA8IS0tPHdlYmluZiBkaXI9Im1ldGFkYXRhIj4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyoueG1sIi8+CiAgICAgICAgIDwvd2ViaW5mPi0tPgogICAgIDwvd2FyPgogICAgIDxjb3B5IGZpbGU9IiR7ZGlzdC5kaXJ9LyR7d2FyLmZpbGUuZXh0fSIgdG9maWxlPSIuLyR7d2FyLmZpbGUuZXh0fSIvPgpAQCAtMjY5LDEyICsyNjksMTIgQEAKIAogCiA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QtaW1wbCI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJydW50ZXN0LWltcGwtY2xhc3MiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1bnRlc3QtaW1wbC14bWwiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bnRlc3QtaW1wbC1jbGFzcyIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icnVudGVzdC1pbXBsLXhtbCIvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0icnVudGVzdC1pbXBsLWNsYXNzIiBkZXBlbmRzPSJjb21waWxlLXRlc3RzLGNoZWNrVGVzdE5HWE1MIiB1bmxlc3M9InRlc3RuZy54bWwucHJlc2VudCI+Ci0gICAgPGVjaG8gbWVzc2FnZT0iPT09PT09PT09PT09PVN0YXJ0aW5nIFRlc3RORyB0ZXN0IGF0ICR7dGVzdC5jbGFzcy5vdXRwdXR9ICA9PT09PT09PT09PT0iLz4gICAgCisgICAgPGVjaG8gbWVzc2FnZT0iPT09PT09PT09PT09PVN0YXJ0aW5nIFRlc3RORyB0ZXN0IGF0ICR7dGVzdC5jbGFzcy5vdXRwdXR9ICA9PT09PT09PT09PT0iLz4KICAgICA8bWtkaXIgZGlyPSIke3Jlc3VsdC5vdXRwdXR9Ii8+CiAgICAgPHRlc3RuZyBvdXRwdXRkaXI9IiR7cmVzdWx0Lm91dHB1dH0iCiAgICAgc3VpdGVuYW1lPSIke3Rlc3RzdWl0ZS5uYW1lfSIKQEAgLTI4Nyw3ICsyODcsNyBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0icnVudGVzdC1pbXBsLXhtbCIgZGVwZW5kcz0iY2hlY2tUZXN0TkdYTUwiIGlmPSJ0ZXN0bmcueG1sLnByZXNlbnQiPgotICAgIDxlY2hvIG1lc3NhZ2U9Ij09PT09PT09PT09PT1TdGFydGluZyBUZXN0TkcgdGVzdCBhdCAke3Rlc3QuY2xhc3Mub3V0cHV0fSBmcm9tIHRlc3RuZy54bWwgID09PT09PT09PT09PSIvPiAgICAKKyAgICA8ZWNobyBtZXNzYWdlPSI9PT09PT09PT09PT09U3RhcnRpbmcgVGVzdE5HIHRlc3QgYXQgJHt0ZXN0LmNsYXNzLm91dHB1dH0gZnJvbSB0ZXN0bmcueG1sICA9PT09PT09PT09PT0iLz4KICAgICA8bWtkaXIgZGlyPSIke3Jlc3VsdC5vdXRwdXR9Ii8+CiAgICAgPHRlc3RuZyBvdXRwdXRkaXI9IiR7cmVzdWx0Lm91dHB1dH0iCiAgICAgc3VpdGVuYW1lPSIke3Rlc3RzdWl0ZS5uYW1lfSIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvZ2Zwcm9qZWN0L2RiLXRhcmdldHMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9nZnByb2plY3QvZGItdGFyZ2V0cy54bWwKaW5kZXggY2ZmNmJhYi4uNGQ0MGI3ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9nZnByb2plY3QvZGItdGFyZ2V0cy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9nZnByb2plY3QvZGItdGFyZ2V0cy54bWwKQEAgLTE5LDQzICsxOSw0MyBAQAogCiA8cHJvamVjdCBuYW1lPSJkYi10YXJnZXRzIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogPHRhcmdldCBuYW1lPSJzdGFydERlcmJ5IiBkZXBlbmRzPSJpbml0cHJvcCI+Ci0gICAgPGVjaG8gbWVzc2FnZT0iU3RhcnRpbmcgRGVyYnkgREIgc2VydmVycyBpbiB0aGUgTmV0d29yayBNb2RlIi8+ICAgIAotICAgIAorICAgIDxlY2hvIG1lc3NhZ2U9IlN0YXJ0aW5nIERlcmJ5IERCIHNlcnZlcnMgaW4gdGhlIE5ldHdvcmsgTW9kZSIvPgorCiAgICAgPGphdmEgY2xhc3NuYW1lPSJvcmcuYXBhY2hlLmRlcmJ5LmRyZGEuTmV0d29ya1NlcnZlckNvbnRyb2wiCiAgICAgICAgICAgY2xhc3NwYXRocmVmPSJkYi5jbGFzcy5wYXRoIiBmb3JrPSJ0cnVlIiBzcGF3bj0idHJ1ZSI+CiAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9ImRlcmJ5LnN5c3RlbS5ob21lIiB2YWx1ZT0iJHtkZXJieS5zeXN0ZW0uaG9tZX0iLz4KICAgICAgICAgPGFyZyBsaW5lPSItaCBsb2NhbGhvc3QgLXAgJHtkYi5wb3J0fSBzdGFydCIvPgotICAgIDwvamF2YT4gCisgICAgPC9qYXZhPgogICAgIDxlY2hvIG1lc3NhZ2U9IkZpbmlzaGVkIHN0YXJ0aW5nIGRhdGJhc2UiLz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InN0b3BEZXJieSIgZGVwZW5kcz0iaW5pdHByb3AiPgogICAgIDxlY2hvIG1lc3NhZ2U9IlN0b3BpbmcgRGVyYnkgREIgc2VydmVycyBpbiB0aGUgTmV0d29yayBNb2RlIi8+Ci0gICAgCisKICAgICA8amF2YSBjbGFzc25hbWU9Im9yZy5hcGFjaGUuZGVyYnkuZHJkYS5OZXR3b3JrU2VydmVyQ29udHJvbCIKICAgICAgICAgICBjbGFzc3BhdGhyZWY9ImRiLmNsYXNzLnBhdGgiIGZvcms9InRydWUiPgogICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJkZXJieS5zeXN0ZW0uaG9tZSIgdmFsdWU9IiR7ZGVyYnkuc3lzdGVtLmhvbWV9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0ic2h1dGRvd24gLWggbG9jYWxob3N0IC1wICR7ZGIucG9ydH0iLz4KLSAgICA8L2phdmE+IAorICAgIDwvamF2YT4KICAgICA8ZWNobyBtZXNzYWdlPSJGaW5pc2hlZCBzdG9wcGluZyBkYXRiYXNlIi8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJzZXR1cC50b3BsaW5rIiBpZj0idjMiPgogICAgIDwhLS08cHJvcGVydHkgbmFtZT0iZG93bmxvYWQuZGlyIiB2YWx1ZT0iLiIvPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BsaW5rLnVybCIgCisgICAgPHByb3BlcnR5IG5hbWU9InRvcGxpbmsudXJsIgogICAgIHZhbHVlPSJodHRwOi8vZG93bmxvYWQuamF2YS5uZXQvamF2YWVlNS92Ml9icmFuY2gvcHJvbW90ZWQvc2hhcmVkL2dsYXNzZmlzaC1wZXJzaXN0ZW5jZS9nbGFzc2Zpc2gtcGVyc2lzdGVuY2UtaW5zdGFsbGVyLXYyLWI1OGcuamFyIi8+Ci0gICAgPGdldCBzcmM9IiR7dG9wbGluay51cmx9IiAgICAKLSAgICAgICAgIGRlc3Q9IiR7ZG93bmxvYWQuZGlyfS90b3BsaW5rLmphciIgCisgICAgPGdldCBzcmM9IiR7dG9wbGluay51cmx9IgorICAgICAgICAgZGVzdD0iJHtkb3dubG9hZC5kaXJ9L3RvcGxpbmsuamFyIgogICAgICAgICAgdmVyYm9zZT0idHJ1ZSIKICAgICAgICAgIHVzZXRpbWVzdGFtcD0idHJ1ZSIvPi0tPgotICAgICAgICAgCisKICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImFzIGEgdGVtcG9yYXJ5IG1lYXN1cmUsdG9wbGluayBpcyBjaGVja2VkIGluIGF0ICR7YmFzZWRpcn0vbGliIi8+CiAgICAgICAgICA8Y29weSB0b2Rpcj0iJHtnbGFzc2Zpc2guaG9tZX0vbGliIiB2ZXJib3NlPSJ0cnVlIj4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfS9saWIvdG9wbGluayI+CiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovdG9wbGluayouamFyIi8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgICAgIDwvY29weT4gCi0gICAgCisgICAgICAgIDwvY29weT4KKwogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWRiIiBkZXBlbmRzPSJpbml0cHJvcCxkZWxldGUtZGIiCkBAIC02Niw3ICs2Niw3IEBACiAgICAgPGVjaG8+dXNlcj0ke2RiLnVzZXJ9PC9lY2hvPgogICAgIDxlY2hvPnBhc3N3b3JkPSR7ZGIucGFzc3dvcmR9PC9lY2hvPgogICAgIDxlY2hvPmRiLmNsYXNzLnBhdGg9ZGIuY2xhc3MucGF0aDwvZWNobz4KLSAgICAKKwogICAgIDxzcWwgZHJpdmVyPSIke2RiLmRyaXZlcn0iCiAgICAgICAgICBlbmNvZGluZz0idXRmLTgiCiAgICAgICAgICB1cmw9IiR7ZGIudXJsfSIKQEAgLTc5LDE5ICs3OSwxOSBAQAogICAgICAgICAgb25lcnJvcj0iYWJvcnQiID4KICAgICAgICAgPHRyYW5zYWN0aW9uIHNyYz0ic3FsL2NyZWF0ZV8ke2RiLnR5cGV9LnNxbCIvPgogICAgICAgICA8IS0tPHRyYW5zYWN0aW9uPgotCQkgICAgc2VsZWN0IGNpdHkgZnJvbSB3ZWJfY3VzdG9tZXIgd2hlcmUgY3VzdF9pZD0xOwotCQkgICAgc2VsZWN0ICogZnJvbSB3ZWJfY3VzdG9tZXIgd2hlcmUgY3VzdG5hbWUgTGlrZSAnQWxpY2VfMSc7Ci0JICAgIDwvdHJhbnNhY3Rpb24+LS0+Ci0JICAgIAorICAgICAgICAgICAgc2VsZWN0IGNpdHkgZnJvbSB3ZWJfY3VzdG9tZXIgd2hlcmUgY3VzdF9pZD0xOworICAgICAgICAgICAgc2VsZWN0ICogZnJvbSB3ZWJfY3VzdG9tZXIgd2hlcmUgY3VzdG5hbWUgTGlrZSAnQWxpY2VfMSc7CisgICAgICAgIDwvdHJhbnNhY3Rpb24+LS0+CisKICAgICA8L3NxbD4KLSAgICAKKwogPC90YXJnZXQ+Ci08dGFyZ2V0IG5hbWU9ImRlbGV0ZS1kYiIgIAorPHRhcmdldCBuYW1lPSJkZWxldGUtZGIiCiAgICAgICAgIGRlc2NyaXB0aW9uPSJEZWxldGVzIHRoZSBkYXRhYmFzZSB0YWJsZXMuIiBkZXBlbmRzPSJpbml0cHJvcCI+CiAgICAgPGVjaG8+ZHJpdmVyPSR7ZGIuZHJpdmVyfTwvZWNobz4KICAgICA8ZWNobz51cmw9JHtkYi51cmx9PC9lY2hvPgogICAgIDxlY2hvPnVzZXI9JHtkYi51c2VyfTwvZWNobz4KLSAgICA8ZWNobz5wYXNzd29yZD0ke2RiLnBhc3N3b3JkfTwvZWNobz4gICAgICAgCisgICAgPGVjaG8+cGFzc3dvcmQ9JHtkYi5wYXNzd29yZH08L2VjaG8+CiAgICAgPHNxbCBkcml2ZXI9IiR7ZGIuZHJpdmVyfSIKICAgICAgICAgIGVuY29kaW5nPSJ1dGYtOCIKICAgICAgICAgIHVybD0iJHtkYi51cmx9IgpAQCAtMTAwLDE4ICsxMDAsMTggQEAKICAgICAgICAgIGNsYXNzcGF0aHJlZj0iZGIuY2xhc3MucGF0aCIKICAgICAgICAgIGRlbGltaXRlcj0iJHtkYi5kZWxpbWl0ZXJ9IgogICAgICAgICAgYXV0b2NvbW1pdD0idHJ1ZSIKLSAgICAgICAgIG9uZXJyb3I9ImNvbnRpbnVlIj4gICAgICAgCisgICAgICAgICBvbmVycm9yPSJjb250aW51ZSI+CiAgICAgICAgIDx0cmFuc2FjdGlvbiBzcmM9InNxbC9kcm9wXyR7ZGIudHlwZX0uc3FsIi8+CiAgICAgPC9zcWw+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJpbml0cHJvcCIgPgotCTxwcm9wZXJ0eSBuYW1lPSJkYi5yb290IiB2YWx1ZT0iJHtnbGFzc2Zpc2guaG9tZX0vamF2YWRiIi8+CisgICAgPHByb3BlcnR5IG5hbWU9ImRiLnJvb3QiIHZhbHVlPSIke2dsYXNzZmlzaC5ob21lfS9qYXZhZGIiLz4KICAgICA8ZWNobyBtZXNzYWdlPSJKYXZhREIgRGF0YWJhc2UgTG9jYXRpb246ICR7ZGIucm9vdH0iIC8+CiAgICAgPHBhdGggaWQ9ImRiLmNsYXNzLnBhdGgiPgogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7Z2xhc3NmaXNoLmhvbWV9L2phdmFkYi9saWIiPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgICAgPC9maWxlc2V0PgotICAgIDwvcGF0aD4gCisgICAgPC9wYXRoPgogPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L2dmcHJvamVjdC92Mi10YXJnZXRzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvZ2Zwcm9qZWN0L3YyLXRhcmdldHMueG1sCmluZGV4IDFkZjY3ZTQuLjZiYjVjODggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvZ2Zwcm9qZWN0L3YyLXRhcmdldHMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvZ2Zwcm9qZWN0L3YyLXRhcmdldHMueG1sCkBAIC0yMCwxNCArMjAsMTQgQEAKIDxwcm9qZWN0IG5hbWU9InYyLXRhcmdldHMiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAgICAgPHByb3BlcnR5IG5hbWU9Indhci5maWxlLmV4dCIgdmFsdWU9IiR7d2FyLmZpbGV9LndhciIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3llZC5hcHAiIHZhbHVlPSIiLz4KLSAgICAKKwogICAgIDxwcm9wZXJ0eSBuYW1lPSJhcy5wcm9wcyIKICAgICAgICAgICAgICAgdmFsdWU9Ii0tdXNlciAke2FkbWluLnVzZXJ9IC0tcGFzc3dvcmRmaWxlICR7YWRtaW4ucGFzc3dvcmQuZmlsZX0gLS1lY2hvPXRydWUgLS10ZXJzZT10cnVlIC0tcG9ydD0ke2FkbWluLnBvcnR9Ii8+CiAgICA8IS0tPGVjaG8gZmlsZT0iJHthZG1pbi5wYXNzd29yZC5maWxlfSIgYXBwZW5kPSJmYWxzZSI+CiAgICAgIEFTX0FETUlOX1BBU1NXT1JEPSR7YWRtaW4ucGFzc3dvcmR9CiAgICAgQVNfQURNSU5fQURNSU5QQVNTV09SRD0ke2FkbWluLnBhc3N3b3JkfQogICAgIEFTX0FETUlOX01BU1RFUlBBU1NXT1JEPSR7bWFzdGVyLnBhc3N3b3JkfTwvZWNobz4tLT4KLSAgICAKKwogICAgPCEtLTx0YXJnZXQgbmFtZT0ic2V0dXAiIHVubGVzcz0iYkluaXRpYWxpc2VkIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iJHtjb25maWcuZGlyfSIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSIke2NvbmZpZy5kaXJ9LyR7YWRtaW4ucGFzc3dvcmQuZmlsZX0iLz4KQEAgLTM2LDE0ICszNiwxNCBAQAogICAgICAgICA8cmVwbGFjZSBmaWxlPSIke2NvbmZpZy5kaXJ9LyR7YWRtaW4ucGFzc3dvcmQuZmlsZX0iIHRva2VuPSJAQEFETUlOX01BU1RFUl9QQVNTV09SREBAIiB2YWx1ZT0iJHttYXN0ZXIucGFzc3dvcmR9Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJiSW5pdGlhbGlzZWQiIHZhbHVlPSIiLz4KICAgICA8L3RhcmdldD4tLT4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LXYyLWltcGwiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSIke2RlcGxveWVkLmFwcH0iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iUGxlYXNlIHNldCBwcm9wZXJ0eSAke2RlcGxveWVkLmFwcH0gYmVmb3JlIGNhbGxpbmcgdGhpcyB0YXJnZXQiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iZ2xhc3NmaXNoLmhvbWUgaXMgJHtnbGFzc2Zpc2guaG9tZX0iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iZGVwbG95aW5nIGluIHYyIG1vZGUiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iLi8ke3dhci5maWxlLmV4dH0iLz4KLSAgICAgICAgPGVjaG8gbWVzc2FnZT0iT1MgaXMgJHtvcy5uYW1lfSIvPiAKKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iT1MgaXMgJHtvcy5uYW1lfSIvPgogICAgICAgICA8cmVjb3JkIG5hbWU9ImRlcGxveS5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iY21kIiBvc2ZhbWlseT0iV2luZG93cyI+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIvYyIvPgpAQCAtNTIsMzUgKzUyLDM1IEBACiAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7ZGVwbG95ZWQuYXBwfSIvPgogICAgICAgICA8L2V4ZWM+Ci0gICAgICAgIAorCiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7Z2xhc3NmaXNoLmhvbWV9L2Jpbi9hc2FkbWluIiBvc2ZhbWlseT0idW5peCI+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSJkZXBsb3kiLz4KICAgICAgICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICAgICAgICAgIDxhcmcgbGluZT0iJHtkZXBsb3llZC5hcHB9Ii8+CiAgICAgICAgIDwvZXhlYz4KLSAgICAgICAgCisKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVVJMIG9mIGRlcGxveWVkIGFwcCA6IGh0dHA6Ly8ke2dsYXNzZmlzaC5odHRwLmhvc3R9OiR7Z2xhc3NmaXNoLmh0dHAucG9ydH0vJHtjb250ZXh0cm9vdH0iLz4KICAgICAgICAgPHJlY29yZCBuYW1lPSJkZXBsb3kub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICAKKworCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS12Mi1pbXBsIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0idW5kZXBsb3lpbmcgaW4gdjMgbW9kZSIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSIuLyR7d2FyLmZpbGUuZXh0fSIvPgotICAgICAgICAKKwogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSJjbWQiIG9zZmFtaWx5PSJXaW5kb3dzIj4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii9jIi8+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2dsYXNzZmlzaC5ob21lfS9iaW4vYXNhZG1pbi5iYXQiLz4KLSAgICAgICAgICAgIDxhcmcgbGluZT0idW5kZXBsb3kiLz4gICAgCisgICAgICAgICAgICA8YXJnIGxpbmU9InVuZGVwbG95Ii8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7d2FyLmZpbGV9Ii8+Ci0gICAgICAgIDwvZXhlYz4gIAotICAgICAgICAKKyAgICAgICAgPC9leGVjPgorCiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7Z2xhc3NmaXNoLmhvbWV9L2Jpbi9hc2FkbWluIiBvc2ZhbWlseT0idW5peCI+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSJ1bmRlcGxveSIvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHt3YXIuZmlsZX0iLz4KLSAgICAgICAgPC9leGVjPiAgICAgIAorICAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InN0YXJ0LXNlcnZlciI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IiR7YXMucHJvcHN9Ii8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9ImNtZCIgb3NmYW1pbHk9IldpbmRvd3MiPgpAQCAtODgsMTYgKzg4LDE2IEBACiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2dsYXNzZmlzaC5ob21lfS9iaW4vYXNhZG1pbi5iYXQiLz4KICAgICAgICAgICAgIDxhcmcgbGluZT0ic3RhcnQtZG9tYWluIi8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tdXNlciAke2FkbWluLnVzZXJ9Ii8+Ci0gICAgICAgICAgICA8YXJnIGxpbmU9Ii0tcGFzc3dvcmRmaWxlICR7YWRtaW4ucGFzc3dvcmQuZmlsZX0gIi8+ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FkbWluLmRvbWFpbn0iLz4gCisgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tcGFzc3dvcmRmaWxlICR7YWRtaW4ucGFzc3dvcmQuZmlsZX0gIi8+CisgICAgICAgICAgICA8YXJnIGxpbmU9IiR7YWRtaW4uZG9tYWlufSIvPgogICAgICAgICA8L2V4ZWM+Ci0gICAgICAgIAorCiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7Z2xhc3NmaXNoLmhvbWV9L2Jpbi9hc2FkbWluIiBvc2ZhbWlseT0idW5peCI+Ci0gICAgICAgICAgICA8YXJnIGxpbmU9InN0YXJ0LWRvbWFpbiIvPiAgICAKKyAgICAgICAgICAgIDxhcmcgbGluZT0ic3RhcnQtZG9tYWluIi8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+Ci0gICAgICAgICAgICA8YXJnIGxpbmU9IiR7YWRtaW4uZG9tYWlufSIvPiAKKyAgICAgICAgICAgIDxhcmcgbGluZT0iJHthZG1pbi5kb21haW59Ii8+CiAgICAgICAgIDwvZXhlYz4KLSAgICAgICAgCisKICAgICA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJzdG9wLXNlcnZlciI+CkBAIC0xMDYsMjIgKzEwNiwyMiBAQAogICAgICAgICA8YXJnIHZhbHVlPSIke2dsYXNzZmlzaC5ob21lfS9iaW4vYXNhZG1pbi5iYXQiLz4KICAgICAgICAgPGFyZyBsaW5lPSJzdG9wLWRvbWFpbiIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+Ci0gICAgICAgIDxhcmcgbGluZT0iJHthZG1pbi5kb21haW59Ii8+ICAgCi0gICAgICAgIAorICAgICAgICA8YXJnIGxpbmU9IiR7YWRtaW4uZG9tYWlufSIvPgorCiAgICAgPC9leGVjPgotICAgIAorCiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtnbGFzc2Zpc2guaG9tZX0vYmluL2FzYWRtaW4iIG9zZmFtaWx5PSJ1bml4Ij4KICAgICAgICAgPGFyZyBsaW5lPSJzdG9wLWRvbWFpbiIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+Ci0gICAgICAgIDxhcmcgbGluZT0iJHthZG1pbi5kb21haW59Ii8+ICAgICAgIAorICAgICAgICA8YXJnIGxpbmU9IiR7YWRtaW4uZG9tYWlufSIvPgogICAgIDwvZXhlYz4KLSAgICAKKwogPC90YXJnZXQ+CiAKIAogPHRhcmdldCBuYW1lPSJjcmVhdGUtamRiYy1jb25ucG9vbCI+CiAgICAgPHByb3BlcnR5IG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0ic2FtcGxlLWRlcmJ5LXBvb2wiLz4KLTxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgamRiYyBjb25uZWN0aW9uIHBvb2wgJHtqZGJjLmNvbnBvb2wubmFtZX0iIAorPGVjaG8gbWVzc2FnZT0iY3JlYXRlZCBqZGJjIGNvbm5lY3Rpb24gcG9vbCAke2pkYmMuY29ucG9vbC5uYW1lfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9ImNtZCIgb3NmYW1pbHk9IldpbmRvd3MiPgogICAgIDxhcmcgdmFsdWU9Ii9jIi8+CkBAIC0xMzIsNyArMTMyLDcgQEAKICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHtqZGJjLmNvbnBvb2wubmFtZX0iLz4KLSAgICA8L2V4ZWM+ICAKKyAgICA8L2V4ZWM+CiA8L3RhcmdldD4KIAogCkBAIC0xNDAsNyArMTQwLDcgQEAKIDwhLS0gVGFyZ2V0IHRvIGNyZWF0ZSBKREJDIHJlc291cmNlICAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWpkYmMtcmVzb3VyY2UiPgotICAgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIGpkYmMgcmVzb3VyY2UgcG9vbCAke2pkYmMucmVzb3VyY2UubmFtZX0iIAorICAgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIGpkYmMgcmVzb3VyY2UgcG9vbCAke2pkYmMucmVzb3VyY2UubmFtZX0iCiAgICAgICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgICA8ZWNobyBtZXNzYWdlPSJhc2FkbWluIGNyZWF0ZS1qZGJjLXJlc291cmNlICR7YXMucHJvcHN9IC0tY29ubmVjdGlvbnBvb2xpZCAke2pkYmMuY29ucG9vbC5uYW1lfSAtLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSAke2pkYmMucmVzb3VyY2UubmFtZX0iLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSJjbWQiIG9zZmFtaWx5PSJXaW5kb3dzIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvZ2Zwcm9qZWN0L3YzLXRhcmdldHMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9nZnByb2plY3QvdjMtdGFyZ2V0cy54bWwKaW5kZXggNjc5MjQ1NS4uZDEwNjQ0ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9nZnByb2plY3QvdjMtdGFyZ2V0cy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9nZnByb2plY3QvdjMtdGFyZ2V0cy54bWwKQEAgLTE4LDcgKzE4LDcgQEAKIC0tPgogCiA8cHJvamVjdCBuYW1lPSJ2My10YXJnZXRzIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgotICAgIAorCiAgICAgPHByb3BlcnR5IG5hbWU9ImRiLnJvb3QiIHZhbHVlPSIke2dsYXNzZmlzaC5ob21lfS9qYXZhZGIiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iZGIuY2xhc3NwYXRoIiB2YWx1ZT0iJHtkYi5yb290fS9saWIiLz4KICAgICA8cHJvcGVydHkgbmFtZT0id2FyLmZpbGUuZXh0IiB2YWx1ZT0iJHt3YXIuZmlsZX0ud2FyIi8+CkBAIC00OCwyMCArNDgsMjAgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InN0YXJ0LXNlcnZlci11bml4IiBpZj0iaXNVbml4Ij4KLSAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2dsYXNzZmlzaC5ob21lfS9iaW4vYXNhZG1pbiI+ICAgICAgICAKKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2dsYXNzZmlzaC5ob21lfS9iaW4vYXNhZG1pbiI+CiAgICAgICAgIDxhcmcgdmFsdWU9InN0YXJ0LWRvbWFpbiIvPgogICAgIDwvZXhlYz4KIAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0ic3RhcnQtc2VydmVyLXdpbmRvd3MiIGlmPSJpc1dpbmRvd3MiPgotICAgIAotICAgIDxleGVjIGV4ZWN1dGFibGU9ImNtZCI+CQorCisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iY21kIj4KICAgICAgICAgPGFyZyB2YWx1ZT0iL2MiLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtnbGFzc2Zpc2guaG9tZX0vYmluL2FzYWRtaW4iLz4KICAgICAgICAgPGFyZyB2YWx1ZT0ic3RhcnQtZG9tYWluIi8+CiAgICAgPC9leGVjPgotICAgIAorCiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJzdG9wLXNlcnZlciIgZGVwZW5kcz0ic2V0T1NDb25kaXRpb25zIj4KQEAgLTcxLDcgKzcxLDcgQEAKIAogPHRhcmdldCBuYW1lPSJzdG9wLXNlcnZlci11bml4IiBpZj0iaXNVbml4Ij4KICAgICA8ZWNobyBtZXNzYWdlPSJzdG9wcGluZyBzZXJ2ZXIgb24gdW5peCAuLi4iLz4KLSAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2dsYXNzZmlzaC5ob21lfS9iaW4vYXNhZG1pbiI+ICAgICAgICAKKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2dsYXNzZmlzaC5ob21lfS9iaW4vYXNhZG1pbiI+CiAgICAgICAgIDxhcmcgdmFsdWU9InN0b3AtZG9tYWluIi8+CiAgICAgPC9leGVjPgogPC90YXJnZXQ+CkBAIC04NCwxMyArODQsMTMgQEAKICAgICAgICAgPGFyZyB2YWx1ZT0ic3RvcC1kb21haW4iLz4KICAgICA8L2V4ZWM+CiA8L3RhcmdldD4KLSAgICAKLSAgICAgIAorCisKIDx0YXJnZXQgbmFtZT0iZGVwbG95LXYzLWltcGwiIGRlcGVuZHM9InNldE9TQ29uZGl0aW9ucyI+CiAgICAgPGVjaG8gbWVzc2FnZT0iZ2xhc3NmaXNoLmhvbWUgaXMgJHtnbGFzc2Zpc2guaG9tZX0iLz4KICAgICA8ZWNobyBtZXNzYWdlPSJkZXBsb3lpbmcgaW4gdjMgbW9kZSIvPgogICAgIDxlY2hvIG1lc3NhZ2U9Ii4vJHt3YXIuZmlsZX0iLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJPUyBpcyAke29zLm5hbWV9Ii8+ICAgIAorICAgIDxlY2hvIG1lc3NhZ2U9Ik9TIGlzICR7b3MubmFtZX0iLz4KIAogICAgIDxlY2hvIG1lc3NhZ2U9IlBsZWFzZSBhY2Nlc3MgVVJMIGh0dHA6Ly8ke2dsYXNzZmlzaC5odHRwLmhvc3R9OiR7Z2xhc3NmaXNoLmh0dHAucG9ydH0vJHtjb250ZXh0cm9vdH0iLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS12My1pbXBsLXVuaXgiLz4KQEAgLTEwNCwxMCArMTA0LDEwIEBACiAgICAgPGFyZyB2YWx1ZT0iZGVwbG95Ii8+CiAgICAgPGFyZyB2YWx1ZT0iLS1wYXRoIi8+CiAgICAgPGFyZyB2YWx1ZT0iLS11cGxvYWQ9ZmFsc2UiLz4KLSAgICA8YXJnIGxpbmU9IiR7ZGVwbG95ZWQuYXBwfSIvPiAgIAotICAgPC9leGVjPiAgCisgICAgPGFyZyBsaW5lPSIke2RlcGxveWVkLmFwcH0iLz4KKyAgIDwvZXhlYz4KIDwvdGFyZ2V0PgotICAKKwogPHRhcmdldCBuYW1lPSJkZXBsb3ktdjMtaW1wbC11bml4IiBpZj0iaXNVbml4Ij4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtnbGFzc2Zpc2guaG9tZX0vYmluL2FzYWRtaW4iPgogICAgIDxhcmcgdmFsdWU9ImRlcGxveSIvPgpAQCAtMTE5LDcgKzExOSw3IEBACiA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LXYzLWltcGwiIGRlcGVuZHM9InNldE9TQ29uZGl0aW9ucyI+CiAgICAgPGVjaG8gbWVzc2FnZT0idW5kZXBsb3lpbmcgaW4gdjMgbW9kZSIvPgogICAgIDxlY2hvIG1lc3NhZ2U9Ii4vJHt3YXIuZmlsZX0iLz4KLSAgICAKKwogICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktdjMtaW1wbC11bml4Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS12My1pbXBsLXdpbmRvd3MiLz4KIDwvdGFyZ2V0PgpAQCAtMTI4LDE2ICsxMjgsMTYgQEAKICAgICA8ZXhlYyBleGVjdXRhYmxlPSJjbWQiPgogICAgIDxhcmcgdmFsdWU9Ii9jIi8+CiAgICAgPGFyZyB2YWx1ZT0iJHtnbGFzc2Zpc2guaG9tZX0vYmluL2FzYWRtaW4uYmF0Ii8+Ci0gICAgPGFyZyB2YWx1ZT0idW5kZXBsb3kiLz4gICAgCisgICAgPGFyZyB2YWx1ZT0idW5kZXBsb3kiLz4KICAgICA8YXJnIHZhbHVlPSIke3dhci5maWxlfSIvPgotICA8L2V4ZWM+ICAKKyAgPC9leGVjPgogPC90YXJnZXQ+Ci0gIAorCiA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LXYzLWltcGwtdW5peCIgaWY9ImlzVW5peCI+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7Z2xhc3NmaXNoLmhvbWV9L2Jpbi9hc2FkbWluIj4KICAgICA8YXJnIHZhbHVlPSJ1bmRlcGxveSIvPgogICAgIDxhcmcgdmFsdWU9IiR7d2FyLmZpbGV9Ii8+Ci0gIDwvZXhlYz4gICAgICAKKyAgPC9leGVjPgogPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvamRiYy9qZGJjdXNlcnR4L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvamRiYy9qZGJjdXNlcnR4L2J1aWxkLnhtbAppbmRleCBmYTg4ZGM4Li4yZDFmYWI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L2pkYmMvamRiY3VzZXJ0eC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9qZGJjL2pkYmN1c2VydHgvYnVpbGQueG1sCkBAIC0yMCwzOCArMjAsMzggQEAKIDxwcm9qZWN0IG5hbWU9ImpkYmN1c2VydHgiIGRlZmF1bHQ9ImRlZmF1bHQiIGJhc2VkaXI9Ii4iPgogICAgIDxwcm9wZXJ0eSBmaWxlPSJidWlsZC5wcm9wZXJ0aWVzIi8+CiAgICAgPHByb3BlcnR5IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS1jb25maWcucHJvcGVydGllcyIvPgotICAgCi0gICAgCisKKwogICAgIDxkZXNjcmlwdGlvbj5CdWlsZHMsIHRlc3RzLCBhbmQgcnVucyB0aGUgcHJvamVjdCBKZGJjVXNlclR4IEFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KLSAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+ICAgCisgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LXRhcmdldHMueG1sIi8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIvPgotICAgIAotICAgCisKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiPgogICAgICAgICAgPHByb3BlcnR5IG5hbWU9Indhci5maWxlLmV4dCIgdmFsdWU9IiR7d2FyLmZpbGV9LndhciIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWltcGwiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktJHtkZXBsb3kucGxhdGZvcm19LWltcGwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRlcGxveWVkLmFwcCIgdmFsdWU9IiR7d2FyLmZpbGV9LndhciIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+IAorCisgICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudGVzdC1pbXBsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iJHt0ZXN0bmcudGVzdC5uYW1lfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0idGVzdG5nLnRlc3QubmFtZSIgdmFsdWU9IiR7dGVzdG5nLnRlc3QubmFtZX0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RuZy50ZXN0Y2xpZW50IiB2YWx1ZT0iSmRiY1VzZXJUeFRlc3RORyIvPgogICAgICA8L2FudGNhbGw+Ci0gICAgICAgIAorCiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS0ke2RlcGxveS5wbGF0Zm9ybX0taW1wbCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiA8L3Byb2plY3Q+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvamRiYy9qZGJjdXNlcnR4L21ldGFkYXRhL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9qZGJjL2pkYmN1c2VydHgvbWV0YWRhdGEvc3VuLXdlYi54bWwKaW5kZXggNjg5MDdmOC4uZjAxOWQyMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9qZGJjL2pkYmN1c2VydHgvbWV0YWRhdGEvc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9qZGJjL2pkYmN1c2VydHgvbWV0YWRhdGEvc3VuLXdlYi54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIAogLS0+CiAKLTwhRE9DVFlQRSBzdW4td2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOS4wIFNlcnZsZXQgMi41Ly9FTiIgCis8IURPQ1RZUEUgc3VuLXdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDkuMCBTZXJ2bGV0IDIuNS8vRU4iCiAgICJodHRwOi8vd3d3LnN1bi5jb20vc29mdHdhcmUvYXBwc2VydmVyL2R0ZHMvc3VuLXdlYi1hcHBfMl81LTAuZHRkIj4KIDxzdW4td2ViLWFwcCBlcnJvci11cmw9IiI+CiAgIDwhLS0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvamRiYy9qZGJjdXNlcnR4L21ldGFkYXRhL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L2pkYmMvamRiY3VzZXJ0eC9tZXRhZGF0YS93ZWIueG1sCmluZGV4IDA1Y2M1MTUuLjdiZjE2OTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvamRiYy9qZGJjdXNlcnR4L21ldGFkYXRhL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9qZGJjL2pkYmN1c2VydHgvbWV0YWRhdGEvd2ViLnhtbApAQCAtMTcsOSArMTcsOSBAQAogCiAtLT4KIAotPHdlYi1hcHAgdmVyc2lvbj0iMi41IiAKLSAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgCi0gIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorPHdlYi1hcHAgdmVyc2lvbj0iMi41IgorICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5NeVNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvamRiYy9qZGJjdXNlcnR4L3NyYy9qYXZhL015U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9qZGJjL2pkYmN1c2VydHgvc3JjL2phdmEvTXlTZXJ2bGV0LmphdmEKaW5kZXggY2JjMzFkMC4uNTZlYmI1MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9qZGJjL2pkYmN1c2VydHgvc3JjL2phdmEvTXlTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9qZGJjL2pkYmN1c2VydHgvc3JjL2phdmEvTXlTZXJ2bGV0LmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKICAgICBAUmVzb3VyY2UobmFtZSA9ICJqZGJjL19fZGVmYXVsdCIsIG1hcHBlZE5hbWUgPSAiamRiYy9fX2RlZmF1bHQiKQogICAgIERhdGFTb3VyY2UgZHMxOwogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIFByb2Nlc3NlcyByZXF1ZXN0cyBmb3IgYm90aCBIVFRQIDxjb2RlPkdFVDwvY29kZT4gYW5kIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZHMuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTYwLDExICs2MCwxMSBAQAogICAgICAgICAgIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKIAogICAgICAgICAgIHRyeSB7Ci0JICAgIGlmICgidXNlcnR4Ii5lcXVhbHModGVzdGNhc2UpKSB7CisgICAgICAgIGlmICgidXNlcnR4Ii5lcXVhbHModGVzdGNhc2UpKSB7CiAgICAgICAgICAgICAgICAgIHRlc3RzID0gaW5pdGlhbGl6ZVVzZXJUeFRlc3QoKTsKLQkgICAgfSBlbHNlIGlmICgibm9sZWFrIi5lcXVhbHModGVzdGNhc2UpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoIm5vbGVhayIuZXF1YWxzKHRlc3RjYXNlKSkgewogICAgICAgICAgICAgICAgICB0ZXN0cyA9IGluaXRpYWxpemVMZWFrVGVzdCgpOwotCSAgICB9CisgICAgICAgIH0KICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgSHRtbFV0aWwucHJpbnRFeGNlcHRpb24oZSwgb3V0KTsKICAgICAgICAgICB9CkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKICAgICAgICAgICAgICAgIG91dC5mbHVzaCgpOwogICAgICAgICAgICB9Ci0JfQorICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIFNpbXBsZVRlc3RbXSBpbml0aWFsaXplVXNlclR4VGVzdCgpIHRocm93cyBFeGNlcHRpb24gewpAQCAtMTIzLDcgKzEyMyw3IEBACiAgICAgfQogCiAgICAgLy8gPGVkaXRvci1mb2xkIGRlZmF1bHRzdGF0ZT0iY29sbGFwc2VkIiBkZXNjPSJIdHRwU2VydmxldCBtZXRob2RzLiBDbGljayBvbiB0aGUgKyBzaWduIG9uIHRoZSBsZWZ0IHRvIGVkaXQgdGhlIGNvZGUuIj4KLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtMTMzLDcgKzEzMyw3IEBACiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTE0Myw3ICsxNDMsNyBAQAogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIFJldHVybnMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgc2VydmxldC4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNlcnZsZXRJbmZvKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9qZGJjL2pkYmN1c2VydHgvc3JjL2phdmEvdGVzdC9MZWFrVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9qZGJjL2pkYmN1c2VydHgvc3JjL2phdmEvdGVzdC9MZWFrVGVzdC5qYXZhCmluZGV4IDFhZDMyYjMuLjA2YTBmOGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvamRiYy9qZGJjdXNlcnR4L3NyYy9qYXZhL3Rlc3QvTGVha1Rlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L2pkYmMvamRiY3VzZXJ0eC9zcmMvamF2YS90ZXN0L0xlYWtUZXN0LmphdmEKQEAgLTM0LDcgKzM0LDcgQEAKICAqLwogcHVibGljIGNsYXNzIExlYWtUZXN0IGltcGxlbWVudHMgU2ltcGxlVGVzdHsKIAotICAgIAorCiAgICAgICAgTWFwPFN0cmluZywgQm9vbGVhbj4gcmVzdWx0c01hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgQm9vbGVhbj4oKTsKIAogICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBCb29sZWFuPiBydW5UZXN0KERhdGFTb3VyY2UgZHMxLCBQcmludFdyaXRlciBvdXQpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvamRiYy9qZGJjdXNlcnR4L3NyYy9qYXZhL3V0aWwvVGFibGVzVXRpbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9qZGJjL2pkYmN1c2VydHgvc3JjL2phdmEvdXRpbC9UYWJsZXNVdGlsLmphdmEKaW5kZXggNjg3ZWRjYS4uYmVlZTNjZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9qZGJjL2pkYmN1c2VydHgvc3JjL2phdmEvdXRpbC9UYWJsZXNVdGlsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9qZGJjL2pkYmN1c2VydHgvc3JjL2phdmEvdXRpbC9UYWJsZXNVdGlsLmphdmEKQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAgICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgZGVsZXRlVGFibGVzKERhdGFTb3VyY2UgZHMxLCBQcmludFdyaXRlciBvdXQsIFN0cmluZyB0YWJsZU5hbWUpIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwogICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L2pkYmMvamRiY3VzZXJ0eC9zcmMvdGVzdC9KZGJjVXNlclR4VGVzdE5HLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L2pkYmMvamRiY3VzZXJ0eC9zcmMvdGVzdC9KZGJjVXNlclR4VGVzdE5HLmphdmEKaW5kZXggNWY4Zjk2NC4uYTQ3MzExMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9qZGJjL2pkYmN1c2VydHgvc3JjL3Rlc3QvSmRiY1VzZXJUeFRlc3RORy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvamRiYy9qZGJjdXNlcnR4L3NyYy90ZXN0L0pkYmNVc2VyVHhUZXN0TkcuamF2YQpAQCAtMzQsMTMgKzM0LDEzIEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0KICAgICAgICAgImpkYmMtamRiY3VzZXJ0eCI7Ci0gICAKKwogICAgIHByaXZhdGUgU3RyaW5nIHN0ckNvbnRleHRSb290PSJqZGJjdXNlcnR4IjsKIAogICAgIHN0YXRpYyBTdHJpbmcgcmVzdWx0ID0gIiI7CiAgICAgU3RyaW5nIGhvc3Q9U3lzdGVtLmdldFByb3BlcnR5KCJodHRwLmhvc3QiKTsKICAgICBTdHJpbmcgcG9ydD1TeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucG9ydCIpOwotICAgICAgICAgICAKKwogICAgIC8qCiAgICAgICpJZiB0d28gYXNzZXJ0cyBhcmUgbWVudGlvbmVkIGluIG9uZSBtZXRob2QsIHRoZW4gbGFzdCBhc3NlcnQgaXMgdGFrZW4gaW4KICAgICAgKnRvIGFjY291bnQuCkBAIC01MCw3NyArNTAsNzcgQEAKIAogICAgIEBUZXN0KGdyb3VwcyA9eyAicHVsc2UifSApIC8vIHRlc3QgbWV0aG9kCiAgICAgcHVibGljIHZvaWQgdGVzdFVzZXJUeCgpIHRocm93cyBFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIHRyeXsKIAotICAgICAgICAgIFN0cmluZyB0ZXN0dXJsID0gImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgIi8iKyAKLQkgICAgc3RyQ29udGV4dFJvb3QgKyAiL015U2VydmxldD90ZXN0Y2FzZT11c2VydHgiOwotCSAgVVJMIHVybCA9IG5ldyBVUkwodGVzdHVybCk7Ci0JICBlY2hvKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwotCSAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7Ci0JICBjb25uLmNvbm5lY3QoKTsKLQkgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOworICAgICAgICAgIFN0cmluZyB0ZXN0dXJsID0gImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgIi8iKworICAgICAgICBzdHJDb250ZXh0Um9vdCArICIvTXlTZXJ2bGV0P3Rlc3RjYXNlPXVzZXJ0eCI7CisgICAgICBVUkwgdXJsID0gbmV3IFVSTCh0ZXN0dXJsKTsKKyAgICAgIGVjaG8oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CisgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKKyAgICAgIGNvbm4uY29ubmVjdCgpOworICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7CiAKLQkgIElucHV0U3RyZWFtIGlzID0gY29ubi5nZXRJbnB1dFN0cmVhbSgpOwotCSAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CisgICAgICBJbnB1dFN0cmVhbSBpcyA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsKKyAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCi0JICBTdHJpbmcgbGluZSA9IG51bGw7Ci0JICBib29sZWFuIHJlc3VsdD1mYWxzZTsKLQkgIFN0cmluZyB0ZXN0TGluZSA9IG51bGw7ICAgICAgICAKLQkgIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRSA9InVzZXItdHgtY29tbWl0OnRydWUiOwotCSAgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFMiA9InVzZXItdHgtcm9sbGJhY2s6dHJ1ZSI7Ci0JICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0JICAgIC8vIGVjaG8obGluZSk7CisgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CisgICAgICBib29sZWFuIHJlc3VsdD1mYWxzZTsKKyAgICAgIFN0cmluZyB0ZXN0TGluZSA9IG51bGw7CisgICAgICBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSJ1c2VyLXR4LWNvbW1pdDp0cnVlIjsKKyAgICAgIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRTIgPSJ1c2VyLXR4LXJvbGxiYWNrOnRydWUiOworICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgICAvLyBlY2hvKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKEVYUEVDVEVEX1JFU1BPTlNFKSE9LTEgJiYKICAgICAgICAgICAgICAgIGxpbmUuaW5kZXhPZihFWFBFQ1RFRF9SRVNQT05TRTIpIT0tMSl7Ci0JICAgICAgdGVzdExpbmUgPSBsaW5lOwotCSAgICAgIGVjaG8odGVzdExpbmUpOwotCSAgICAgIHJlc3VsdD10cnVlOwotCSAgICAgIGJyZWFrOworICAgICAgICAgIHRlc3RMaW5lID0gbGluZTsKKyAgICAgICAgICBlY2hvKHRlc3RMaW5lKTsKKyAgICAgICAgICByZXN1bHQ9dHJ1ZTsKKyAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLQkgIH0gICAgICAgIAotICAgICAgICAgICAgICAgIAotCSAgQXNzZXJ0LmFzc2VydEVxdWFscyhyZXN1bHQsIHRydWUsIlVuZXhwZWN0ZWQgUmVzdWx0cyIpOwotICAgICAgICAKKyAgICAgIH0KKworICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhyZXN1bHQsIHRydWUsIlVuZXhwZWN0ZWQgUmVzdWx0cyIpOworCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7Ci0JICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgdGhyb3cgbmV3IEV4Y2VwdGlvbihlKTsKKyAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGUpOwogICAgICAgICB9CiAKICAgICB9CiAKICAgICBAVGVzdChncm91cHMgPXsgInB1bHNlIn0gKSAvLyB0ZXN0IG1ldGhvZAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb0xlYWsoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICB0cnl7CiAKLSAgICAgICAgICBTdHJpbmcgdGVzdHVybCA9ICJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArICIvIisgCi0JICAgIHN0ckNvbnRleHRSb290ICsgIi9NeVNlcnZsZXQ/dGVzdGNhc2U9bm9sZWFrIjsKLQkgIFVSTCB1cmwgPSBuZXcgVVJMKHRlc3R1cmwpOwotCSAgZWNobygiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKLQkgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwotCSAgY29ubi5jb25uZWN0KCk7Ci0JICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKKyAgICAgICAgICBTdHJpbmcgdGVzdHVybCA9ICJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArICIvIisKKyAgICAgICAgc3RyQ29udGV4dFJvb3QgKyAiL015U2VydmxldD90ZXN0Y2FzZT1ub2xlYWsiOworICAgICAgVVJMIHVybCA9IG5ldyBVUkwodGVzdHVybCk7CisgICAgICBlY2hvKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOworICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CisgICAgICBjb25uLmNvbm5lY3QoKTsKKyAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwogCi0JICBJbnB1dFN0cmVhbSBpcyA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsKLQkgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOworICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjb25uLmdldElucHV0U3RyZWFtKCk7CisgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIAotCSAgU3RyaW5nIGxpbmUgPSBudWxsOwotCSAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7Ci0JICBTdHJpbmcgdGVzdExpbmUgPSBudWxsOyAgICAgICAgCi0JICBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSJuby1sZWFrLXRlc3Q6dHJ1ZSI7Ci0JICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0JICAgIC8vIGVjaG8obGluZSk7Ci0gICAJICAgIGlmKGxpbmUuaW5kZXhPZihFWFBFQ1RFRF9SRVNQT05TRSkhPS0xKXsKLQkgICAgICB0ZXN0TGluZSA9IGxpbmU7Ci0JICAgICAgZWNobyh0ZXN0TGluZSk7Ci0JICAgICAgcmVzdWx0PXRydWU7Ci0JICAgICAgYnJlYWs7CisgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CisgICAgICBib29sZWFuIHJlc3VsdD1mYWxzZTsKKyAgICAgIFN0cmluZyB0ZXN0TGluZSA9IG51bGw7CisgICAgICBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSJuby1sZWFrLXRlc3Q6dHJ1ZSI7CisgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CisgICAgICAgIC8vIGVjaG8obGluZSk7CisgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZihFWFBFQ1RFRF9SRVNQT05TRSkhPS0xKXsKKyAgICAgICAgICB0ZXN0TGluZSA9IGxpbmU7CisgICAgICAgICAgZWNobyh0ZXN0TGluZSk7CisgICAgICAgICAgcmVzdWx0PXRydWU7CisgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0JICB9ICAgICAgICAKLSAgICAgICAgICAgICAgICAKLQkgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVzdWx0LCB0cnVlLCJVbmV4cGVjdGVkIFJlc3VsdHMiKTsKLSAgICAgICAgICAgICAgIAorICAgICAgfQorCisgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHJlc3VsdCwgdHJ1ZSwiVW5leHBlY3RlZCBSZXN1bHRzIik7CisKICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9wZXJzaXN0ZW5jZS9zZXJ2bGV0LWpwYS1hcHAvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvcGVyc2lzdGVuY2Uvc2VydmxldC1qcGEtYXBwL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjMwZWY3NC4uZmM0OWU0MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9wZXJzaXN0ZW5jZS9zZXJ2bGV0LWpwYS1hcHAvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3BlcnNpc3RlbmNlL3NlcnZsZXQtanBhLWFwcC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0yMyw3ICsyMyw3IEBACiAjc3BlY2lmeSBvbmx5IGlmIHJ1bm5pbmcgbG9jYWxseS5QYXRoIHRvICR7d29ya3NwYWNlX3Jvb3R9L3Rlc3Qtb3V0cHV0CiB3cy5yb290PS4uLy4uLwogCi0gICAgCisKIAogI0RlZmluaXRlbHkgbmVlZCB0byBzZXQgdGhpcyBhdCBsb2NhbCBsZXZlbAogZGVwbG95LnBsYXRmb3JtPXYzCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3BlcnNpc3RlbmNlL3NlcnZsZXQtanBhLWFwcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3BlcnNpc3RlbmNlL3NlcnZsZXQtanBhLWFwcC9idWlsZC54bWwKaW5kZXggYTVlM2FiNC4uZDRiNDEyNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9wZXJzaXN0ZW5jZS9zZXJ2bGV0LWpwYS1hcHAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvcGVyc2lzdGVuY2Uvc2VydmxldC1qcGEtYXBwL2J1aWxkLnhtbApAQCAtMjEsNDQgKzIxLDQ0IEBACiAgICAgPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiLz4KICAgICA8cHJvcGVydHkgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LWNvbmZpZy5wcm9wZXJ0aWVzIi8+CiAgICAgPHByb3BlcnR5IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGIudHlwZX0ucHJvcGVydGllcyIvPgotICAgIAorCiAgICAgPGRlc2NyaXB0aW9uPkJ1aWxkcywgdGVzdHMsIGFuZCBydW5zIHRoZSBwcm9qZWN0IEhlbGxvIEpTUCBBcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+Ci0gICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPiAgIAorICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS10YXJnZXRzLnhtbCIvPgogICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvZGItdGFyZ2V0cy54bWwiLz4KLSAgICAKLSAgICAKKworCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLHNldHVwLGRlcGxveSxydW50ZXN0LHVuZGVwbG95Ii8+Ci0gICAgCi0gICAgICAgCisKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiPgogICAgICAgICAgPHByb3BlcnR5IG5hbWU9Indhci5maWxlLmV4dCIgdmFsdWU9IiR7d2FyLmZpbGV9LndhciIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWltcGwiLz4KLSAgICA8L3RhcmdldD4gIAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWRiIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9InVzaW5nIGRlZmF1bHQgSmF2YURCIGNvbm5lY3Rpb24gcG9vbCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIAorCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0ic2V0dXAiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS0ke2RlcGxveS5wbGF0Zm9ybX0taW1wbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGVwbG95ZWQuYXBwIiB2YWx1ZT0iJHt3YXIuZmlsZX0ud2FyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICA8dGFyZ2V0ICBuYW1lPSJydW50ZXN0Ij4gCisKKyAgICA8dGFyZ2V0ICBuYW1lPSJydW50ZXN0Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW50ZXN0LWltcGwiPgogICAgICAgICA8cGFyYW0gbmFtZT0idGVzdG5nLnRlc3QubmFtZSIgdmFsdWU9IiR7dGVzdG5nLnRlc3QubmFtZX0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RuZy50ZXN0Y2xpZW50IiB2YWx1ZT0iUGVyc2lzdGVuY2VUZXN0TkciLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgICAgICAKKwogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktJHtkZXBsb3kucGxhdGZvcm19LWltcGwiLz4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICAKKworCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3BlcnNpc3RlbmNlL3NlcnZsZXQtanBhLWFwcC9tZXRhZGF0YS93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9wZXJzaXN0ZW5jZS9zZXJ2bGV0LWpwYS1hcHAvbWV0YWRhdGEvd2ViLnhtbAppbmRleCBjYjcyMDRhLi5lZjlmZWJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3BlcnNpc3RlbmNlL3NlcnZsZXQtanBhLWFwcC9tZXRhZGF0YS93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvcGVyc2lzdGVuY2Uvc2VydmxldC1qcGEtYXBwL21ldGFkYXRhL3dlYi54bWwKQEAgLTMyLDcgKzMyLDcgQEAKICAgICAgICAgPC9zZXNzaW9uLXRpbWVvdXQ+CiAgICAgPC9zZXNzaW9uLWNvbmZpZz4KICAgICA8d2VsY29tZS1maWxlLWxpc3Q+Ci0JPHdlbGNvbWUtZmlsZT4KKyAgICA8d2VsY29tZS1maWxlPgogICAgICAgICAgICAgaW5kZXguanNwCiAgICAgICAgIDwvd2VsY29tZS1maWxlPgogICAgIDwvd2VsY29tZS1maWxlLWxpc3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3BlcnNpc3RlbmNlL3NlcnZsZXQtanBhLWFwcC9zcmMvamF2YS9wZXJzaXN0ZW5jZS9XZWJDdXN0b21lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9wZXJzaXN0ZW5jZS9zZXJ2bGV0LWpwYS1hcHAvc3JjL2phdmEvcGVyc2lzdGVuY2UvV2ViQ3VzdG9tZXIuamF2YQppbmRleCAxZDcwODFmLi4zYWQxNGI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3BlcnNpc3RlbmNlL3NlcnZsZXQtanBhLWFwcC9zcmMvamF2YS9wZXJzaXN0ZW5jZS9XZWJDdXN0b21lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvcGVyc2lzdGVuY2Uvc2VydmxldC1qcGEtYXBwL3NyYy9qYXZhL3BlcnNpc3RlbmNlL1dlYkN1c3RvbWVyLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKIAogLyoqCiAgKiBFbnRpdHkgY2xhc3MgV2ViQ3VzdG9tZXIKLSAqIAorICoKICAqIEBhdXRob3IgYWRtaW51c2VyCiAgKi8KIEBFbnRpdHkKQEAgLTU3LDcgKzU3LDcgQEAKIAogICAgIEBDb2x1bW4obmFtZSA9ICJDVVNUTkFNRSIpCiAgICAgcHJpdmF0ZSBTdHJpbmcgY3VzdG5hbWU7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBXZWJDdXN0b21lciAqLwogICAgIHB1YmxpYyBXZWJDdXN0b21lcigpIHsKICAgICB9CkBAIC0xMTksNyArMTE5LDcgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgaGFzaCBjb2RlIHZhbHVlIGZvciB0aGUgb2JqZWN0LiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBjb21wdXRlcyAKKyAgICAgKiBSZXR1cm5zIGEgaGFzaCBjb2RlIHZhbHVlIGZvciB0aGUgb2JqZWN0LiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBjb21wdXRlcwogICAgICAqIGEgaGFzaCBjb2RlIHZhbHVlIGJhc2VkIG9uIHRoZSBpZCBmaWVsZHMgaW4gdGhpcyBvYmplY3QuCiAgICAgICogQHJldHVybiBhIGhhc2ggY29kZSB2YWx1ZSBmb3IgdGhpcyBvYmplY3QuCiAgICAgICovCkBAIC0xMzEsOCArMTMxLDggQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgYW5vdGhlciBvYmplY3QgaXMgZXF1YWwgdG8gdGhpcyBXZWJDdXN0b21lci4gIFRoZSByZXN1bHQgaXMgCi0gICAgICogPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYW5kIG9ubHkgaWYgdGhlIGFyZ3VtZW50IGlzIG5vdCBudWxsIGFuZCBpcyBhIFdlYkN1c3RvbWVyIG9iamVjdCB0aGF0IAorICAgICAqIERldGVybWluZXMgd2hldGhlciBhbm90aGVyIG9iamVjdCBpcyBlcXVhbCB0byB0aGlzIFdlYkN1c3RvbWVyLiAgVGhlIHJlc3VsdCBpcworICAgICAqIDxjb2RlPnRydWU8L2NvZGU+IGlmIGFuZCBvbmx5IGlmIHRoZSBhcmd1bWVudCBpcyBub3QgbnVsbCBhbmQgaXMgYSBXZWJDdXN0b21lciBvYmplY3QgdGhhdAogICAgICAqIGhhcyB0aGUgc2FtZSBpZCBmaWVsZCB2YWx1ZXMgYXMgdGhpcyBvYmplY3QuCiAgICAgICogQHBhcmFtIG9iamVjdCB0aGUgcmVmZXJlbmNlIG9iamVjdCB3aXRoIHdoaWNoIHRvIGNvbXBhcmUKICAgICAgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSBhcmd1bWVudDsKQEAgLTE1MCw3ICsxNTAsNyBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdC4gIFRoaXMgaW1wbGVtZW50YXRpb24gY29uc3RydWN0cyAKKyAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QuICBUaGlzIGltcGxlbWVudGF0aW9uIGNvbnN0cnVjdHMKICAgICAgKiB0aGF0IHJlcHJlc2VudGF0aW9uIGJhc2VkIG9uIHRoZSBpZCBmaWVsZHMuCiAgICAgICogQHJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0LgogICAgICAqLwpAQCAtMTU4LDUgKzE1OCw1IEBACiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgcmV0dXJuICJwZXJzaXN0ZW5jZS5XZWJDdXN0b21lcltjdXN0SWQ9IiArIGN1c3RJZCArICJdIjsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvcGVyc2lzdGVuY2Uvc2VydmxldC1qcGEtYXBwL3NyYy9qYXZhL3dlYi9DdXN0b21lckRldGFpbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvcGVyc2lzdGVuY2Uvc2VydmxldC1qcGEtYXBwL3NyYy9qYXZhL3dlYi9DdXN0b21lckRldGFpbHMuamF2YQppbmRleCAxZDAxOWEwLi42MzU4Y2UzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3BlcnNpc3RlbmNlL3NlcnZsZXQtanBhLWFwcC9zcmMvamF2YS93ZWIvQ3VzdG9tZXJEZXRhaWxzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9wZXJzaXN0ZW5jZS9zZXJ2bGV0LWpwYS1hcHAvc3JjL2phdmEvd2ViL0N1c3RvbWVyRGV0YWlscy5qYXZhCkBAIC00Nyw3ICs0Nyw3IEBACiAKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIFVzZXJUcmFuc2FjdGlvbiB1dHg7Ci0gICAgCisKICAgICAvKiogUHJvY2Vzc2VzIHJlcXVlc3RzIGZvciBib3RoIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBhbmQgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kcy4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8aDE+U2VydmxldCBDdXN0b21lckRldGFpbHMgYXQgIiArIHJlcXVlc3QuZ2V0Q29udGV4dFBhdGggKCkgKyAiPC9oMT4iKTsKLSAgICAgICAgCisKICAgICAgICAgb3V0LnByaW50bG4oIjxoMj5TZWFyY2ggQ3VzdG9tZXIgSW5mb3JtYXRpb248L2gyPiIpOwogICAgICAgICBvdXQucHJpbnRsbigiPHA+UGwuIHNlbGVjdCBmcm9tIDEsMiwzLDQsNSBhcyBhIGN1c3RvbWVyIG51bWJlcjwvcD4iKTsKICAgICAgICAgU3RyaW5nIGN1c3RvbWVyTnIgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiY3VzdG9tZXJfbnIiKTsKQEAgLTgwLDE0ICs4MCwxNCBAQAogICAgICAgICBvdXQucHJpbnRsbigiQ3VzdG9tZXIgbnVtYmVyOiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nY3VzdG9tZXJfbnInIC8+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9U2VsZWN0IC8+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8L2Zvcm0+Iik7Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIG91dC5wcmludGxuKCI8L2JvZHk+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8L2h0bWw+Iik7Ci0gICAgICAgIAorCiAgICAgICAgIG91dC5jbG9zZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8vIDxlZGl0b3ItZm9sZCBkZWZhdWx0c3RhdGU9ImNvbGxhcHNlZCIgZGVzYz0iSHR0cFNlcnZsZXQgbWV0aG9kcy4gQ2xpY2sgb24gdGhlICsgc2lnbiBvbiB0aGUgbGVmdCB0byBlZGl0IHRoZSBjb2RlLiI+CiAgICAgLyoqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KLSAgICAKKwogICAgIC8qKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KLSAgICAKKwogICAgIC8qKiBSZXR1cm5zIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIHNlcnZsZXQuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTZXJ2bGV0SW5mbygpIHsKQEAgLTEyMiwxNyArMTIyLDE3IEBACiAgICAgICAgICAgICBFbnRpdHlNYW5hZ2VyIGVtID0gIChFbnRpdHlNYW5hZ2VyKSBjdHgubG9va3VwKCJwZXJzaXN0ZW5jZS9Mb2dpY2FsTmFtZSIpOwogICAgICAgICAgICAgY3VzdG9tZXIgPSBlbS5maW5kKFdlYkN1c3RvbWVyLmNsYXNzLCBjdXN0b21lck5yKTsKICAgICAgICAgICAgIHV0eC5jb21taXQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgCisKKwogICAgICAgICAgICAgLy8gVE9ETzoKICAgICAgICAgICAgIC8vIGVtLnBlcnNpc3Qob2JqZWN0KTsgICAgdXR4LmNvbW1pdCgpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKGdldENsYXNzKCkuZ2V0TmFtZSgpKS5sb2coTGV2ZWwuU0VWRVJFLCJleGNlcHRpb24gY2F1Z2h0IiwgZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY3VzdG9tZXI7CiAgICAgfQotICAgIAotICAgIAorCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvcGVyc2lzdGVuY2Uvc2VydmxldC1qcGEtYXBwL3NyYy90ZXN0L1BlcnNpc3RlbmNlVGVzdE5HLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3BlcnNpc3RlbmNlL3NlcnZsZXQtanBhLWFwcC9zcmMvdGVzdC9QZXJzaXN0ZW5jZVRlc3RORy5qYXZhCmluZGV4IDY1OGRkODAuLmMwZjY3NWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvcGVyc2lzdGVuY2Uvc2VydmxldC1qcGEtYXBwL3NyYy90ZXN0L1BlcnNpc3RlbmNlVGVzdE5HLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9wZXJzaXN0ZW5jZS9zZXJ2bGV0LWpwYS1hcHAvc3JjL3Rlc3QvUGVyc2lzdGVuY2VUZXN0TkcuamF2YQpAQCAtNDIsMjMgKzQyLDIzIEBACiAKIAogcHVibGljIGNsYXNzIFBlcnNpc3RlbmNlVGVzdE5HIHsKLSAgICAKKwogICAgcHJpdmF0ZSBTdHJpbmcgc3RyQ29udGV4dFJvb3Q9InBlcnNpc3RlbmNlIjsKIAogICAgIHN0YXRpYyBTdHJpbmcgcmVzdWx0ID0gIiI7CiAgICAgU3RyaW5nIG1faG9zdD1TeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAuaG9zdCIpOwotICAgIFN0cmluZyBtX3BvcnQ9U3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKTsgCisgICAgU3RyaW5nIG1fcG9ydD1TeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucG9ydCIpOwogICAgIEh0dHBDbGllbnQgaHR0cGNsaWVudCA9IG5ldyBIdHRwQ2xpZW50KCk7Ci0gICAgCi0gICAgCisKKwogICAgIC8vQFBhcmFtZXRlcnMoeyJob3N0IiwicG9ydCJ9KQogICAgIEBCZWZvcmVNZXRob2QKICAgICBwdWJsaWMgdm9pZCBiZWZvcmVUZXN0KCl7CiAgICAgICAgIG1faG9zdD1TeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAuaG9zdCIpOwogICAgICAgICBtX3BvcnQ9U3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKTsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBAVGVzdChncm91cHM9eyJwdWxzZSJ9KQogICAgIHB1YmxpYyB2b2lkIHRlc3RJbmRleFBhZ2UoKSB0aHJvd3MgRXhjZXB0aW9uewogICAgICAgICBHZXRNZXRob2QgbWV0aG9kPW51bGw7CkBAIC02Nyw3NCArNjcsNzQgQEAKICAgICAgICAgdHJ5ewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSdW5uaW5nIG1ldGhvZCB0ZXN0UmVxdWVzdFJlc3BvbnNlIik7CiAgICAgICAgICAgICBTdHJpbmcgdGVzdHVybCA9ICJodHRwOi8vIiArIG1faG9zdCAgKyAiOiIgKyBtX3BvcnQgKwotICAgICAgICAgICAgICAgICAgICAiLyIrIHN0ckNvbnRleHRSb290ICsgIi9pbmRleC5qc3AiOyAgICAKLSAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAiLyIrIHN0ckNvbnRleHRSb290ICsgIi9pbmRleC5qc3AiOworCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJ1bm5pbmcgVVJMLS0+Iit0ZXN0dXJsKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgCisKKwogICAgICAgICAgICAgbWV0aG9kID0gbmV3IEdldE1ldGhvZCh0ZXN0dXJsKTsKLSAgICAgICAgICAgCi0gICAgICAgICAgICAKKworCiAgICAgICAgICAgICBpbnQgc3RhdHVzQ29kZSA9IGh0dHBjbGllbnQuZXhlY3V0ZU1ldGhvZChtZXRob2QpOwogICAgICAgICAgICAgaWYgKHN0YXR1c0NvZGUgIT0gSHR0cFN0YXR1cy5TQ19PSykgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTWV0aG9kIGZhaWxlZDogIiArIG1ldGhvZC5nZXRTdGF0dXNMaW5lKCkpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwcmludCBzdGF0dXMgb2sgIitzdGF0dXNDb2RlKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBSZWFkIHRoZSByZXNwb25zZSBib2R5LgogICAgICAgICAgICAgYnl0ZVtdIHJlc3BvbnNlQm9keSA9IG1ldGhvZC5nZXRSZXNwb25zZUJvZHkoKTsKICAgICAgICAgICAgIFN0cmluZyByZXNwb25zZUhUTUw9bmV3IFN0cmluZyhyZXNwb25zZUJvZHkpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJlc3BvbnNlSFRNTCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYocmVzcG9uc2VIVE1MLmluZGV4T2YoY29tcGFyZWRTdHJpbmcpIT0tMSl7Ci0gICAgICAgICAgICAgICAgcmVzdWx0PXRydWU7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlc3VsdD10cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdEluZGV4UGFnZSByZXN1bHQgOiIrcmVzdWx0KTsKICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVzdWx0LHRydWUpOwotICAgICAgICAgICAgCisKICAgICAgICAgfWNhdGNoIChIdHRwRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRmF0YWwgcHJvdG9jb2wgdmlvbGF0aW9uOiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJGYXRhbCB0cmFuc3BvcnQgZXJyb3I6ICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgICAgIGZpbmFsbHkgewogICAgICAgICAgICAgLy8gUmVsZWFzZSB0aGUgY29ubmVjdGlvbi4KICAgICAgICAgICAgIG1ldGhvZC5yZWxlYXNlQ29ubmVjdGlvbigpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QoZ3JvdXBzPXsicHVsc2UifSkKICAgICBwdWJsaWMgdm9pZCB0ZXN0U2VydmxldEZvcm1NZXRob2QoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICBHZXRNZXRob2QgbWV0aG9kPW51bGw7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdGluZyBDdXN0b21lciBEZXRhaWxzIFBhZ2UuLiIpOwogICAgICAgICBTdHJpbmcgY29tcGFyZWRTdHJpbmc9IlNlYXJjaCBDdXN0b21lciBJbmZvcm1hdGlvbiI7CiAgICAgICAgIHRyeXsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHRlc3R1cmwgPSAiaHR0cDovLyIgKyBtX2hvc3QgICsgIjoiICsgbV9wb3J0ICsKICAgICAgICAgICAgICAgICAgICAgIi8iKyBzdHJDb250ZXh0Um9vdCArICIvZGV0YWlscyI7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVVJMIGlzOiIrdGVzdHVybCk7CiAgICAgICAgIG1ldGhvZCA9IG5ldyBHZXRNZXRob2QodGVzdHVybCk7Ci0gICAgICAgICAgIAotICAgICAgICAgICAgCisKKwogICAgICAgICAgICAgaW50IHN0YXR1c0NvZGUgPSBodHRwY2xpZW50LmV4ZWN1dGVNZXRob2QobWV0aG9kKTsKICAgICAgICAgICAgIGlmIChzdGF0dXNDb2RlICE9IEh0dHBTdGF0dXMuU0NfT0spIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk1ldGhvZCBmYWlsZWQ6ICIgKyBtZXRob2QuZ2V0U3RhdHVzTGluZSgpKTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicHJpbnQgc3RhdHVzIG9rICIrc3RhdHVzQ29kZSk7Ci0gICAgICAgIAorCiAgICAgICAgIGJ5dGVbXSByZXNwb25zZUJvZHkgPSBtZXRob2QuZ2V0UmVzcG9uc2VCb2R5KCk7CiAgICAgICAgICAgICBTdHJpbmcgcmVzcG9uc2VIVE1MPW5ldyBTdHJpbmcocmVzcG9uc2VCb2R5KTsKICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKHJlc3BvbnNlSFRNTCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYocmVzcG9uc2VIVE1MLmluZGV4T2YoY29tcGFyZWRTdHJpbmcpIT0tMSl7CiAgICAgICAgICAgICAgICAgcmVzdWx0PXRydWU7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJlc3VsdCk7CkBAIC0xNDcsNjMgKzE0Nyw2MyBAQAogICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkZhdGFsIHRyYW5zcG9ydCBlcnJvcjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICAgICAgZmluYWxseSB7CiAgICAgICAgICAgICAvLyBSZWxlYXNlIHRoZSBjb25uZWN0aW9uLgogICAgICAgICAgICAgbWV0aG9kLnJlbGVhc2VDb25uZWN0aW9uKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBAVGVzdChncm91cHM9eyJwdWxzZSJ9KQogICAgIHB1YmxpYyB2b2lkIHRlc3RGaW5kZXJNZXRob2QoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICBHZXRNZXRob2QgbWV0aG9kPW51bGw7CiAgICAgICAgIFN0cmluZyBjb21wYXJlZFN0cmluZz0iQWxpY2VfMSI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdGluZyBGaW5kZXIgSlBBIG1ldGhvZC4uIik7CiAgICAgICAgIHRyeXsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTdHJpbmcgdGVzdHVybCA9ICJodHRwOi8vIiArIG1faG9zdCAgKyAiOiIgKyBtX3BvcnQgKwogICAgICAgICAgICAgICAgICAgICAiLyIrIHN0ckNvbnRleHRSb290ICsgIi9kZXRhaWxzP2N1c3RvbWVyX25yPTEiOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaW5kaW5nIGRldGFpbHMgb2YgY3VzdG9tZXIgMS4uIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVSTCBpczoiK3Rlc3R1cmwpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBzaG91bGQgYmUgQWxpY2VfMSIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIG1ldGhvZCA9IG5ldyBHZXRNZXRob2QodGVzdHVybCk7Ci0gICAgICAgICAgIAotICAgICAgICAgICAgCisKKwogICAgICAgICAgICAgaW50IHN0YXR1c0NvZGUgPSBodHRwY2xpZW50LmV4ZWN1dGVNZXRob2QobWV0aG9kKTsKICAgICAgICAgICAgIGlmIChzdGF0dXNDb2RlICE9IEh0dHBTdGF0dXMuU0NfT0spIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk1ldGhvZCBmYWlsZWQ6ICIgKyBtZXRob2QuZ2V0U3RhdHVzTGluZSgpKTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicHJpbnQgc3RhdHVzIG9rICIrc3RhdHVzQ29kZSk7ICAKLSAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicHJpbnQgc3RhdHVzIG9rICIrc3RhdHVzQ29kZSk7CisKICAgICAgICAgICAgIGJ5dGVbXSByZXNwb25zZUJvZHkgPSBtZXRob2QuZ2V0UmVzcG9uc2VCb2R5KCk7CiAgICAgICAgICAgICBTdHJpbmcgcmVzcG9uc2VIVE1MPW5ldyBTdHJpbmcocmVzcG9uc2VCb2R5KTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXNwb25zZUhUTUwpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKHJlc3BvbnNlSFRNTC5pbmRleE9mKGNvbXBhcmVkU3RyaW5nKSE9LTEpewogICAgICAgICAgICAgICAgIHJlc3VsdD10cnVlOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXN1bHQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0RmluZGVyTWV0aG9kIHJlc3VsdCA6IityZXN1bHQpOwogICAgICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhyZXN1bHQsdHJ1ZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9Y2F0Y2ggKEh0dHBFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJGYXRhbCBwcm90b2NvbCB2aW9sYXRpb246ICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkZhdGFsIHRyYW5zcG9ydCBlcnJvcjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICAgICAgZmluYWxseSB7CiAgICAgICAgICAgICAvLyBSZWxlYXNlIHRoZSBjb25uZWN0aW9uLgogICAgICAgICAgICAgbWV0aG9kLnJlbGVhc2VDb25uZWN0aW9uKCk7CiAgICAgICAgIH0KICAgICB9CiB9Ci0gICAgICAgICAgICAKKwogIC8qICAgICAgICAgICBTdHJpbmcgbmFtZT0idGVzdHVzZXIiOwogICAgICAgICAgICAgU3RyaW5nIGJpcnRoZGF5PSIxMjEyMTIiOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVUkwgaXM6ICIrdGVzdHVybCk7CkBAIC0yMTIsMzggKzIxMiwzOCBAQAogICAgICAgICAgICAgaHR0cGdldCA9IG5ldyBHZXRNZXRob2QodGVzdHVybCk7CiAgICAgICAgICAgICBwb3N0PW5ldyBQb3N0TWV0aG9kKCJodHRwOi8vbG9jYWxob3N0OjgwODAvanNmYXN0cm9sb2dlci9mYWNlcy9ncmVldGluZ3MuanNwIik7CiAKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBOYW1lVmFsdWVQYWlyW10gbXlkYXRhID0gewogICAgICAgICAgICAgICAgIC8vIG5ldyBOYW1lVmFsdWVQYWlyKCJsb2dpbklEIiwgaXRVc2VyKSwKICAgICAgICAgICAgICAgICAvLyBuZXcgTmFtZVZhbHVlUGFpcigicGFzc3dvcmQiLCBpdFB3ZCksIE5vdCB3b3JraW5nIGZvciBlZGl0aW5nIG9mIGJ1ZwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgbmV3IE5hbWVWYWx1ZVBhaXIoIm5hbWUiLG5hbWUpLAogICAgICAgICAgICAgICAgIG5ldyBOYW1lVmFsdWVQYWlyKCJiaXJ0aGRheSIsYmlydGhkYXkpCiAgICAgICAgICAgICB9OwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHBvc3Quc2V0UmVxdWVzdEJvZHkobXlkYXRhKTsKICAgICAgICAgICAgIGludCBzdGF0dXNDb2RlID0gaHR0cGNsaWVudC5leGVjdXRlTWV0aG9kKHBvc3QpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwcmludCBzdGF0dXMgb2sgIitzdGF0dXNDb2RlKTsKICAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHN0YXR1c0NvZGUsIDIwMCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKHN0YXR1c0NvZGUgIT0gSHR0cFN0YXR1cy5TQ19PSykgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTWV0aG9kIGZhaWxlZDogIiArIHBvc3QuZ2V0U3RhdHVzTGluZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHBvc3QuZ2V0U3RhdHVzTGluZSgpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgcmVzcG9uc2U9cG9zdC5nZXRSZXNwb25zZUJvZHlBc1N0cmluZygpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmVzcG9uc2UpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAKKworCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KIAogfQotICAgIAotICAgIAotICAgIAorCisKKwogfSovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3BvbS54bWwKaW5kZXggZDZiZmRhZS4uMDM3YzcwNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvcG9tLnhtbApAQCAtMzQsNTEgKzM0LDUxIEBACiAgICAgPGJ1aWxkPgogICAgICAgICA8cGx1Z2lucz4KICAgICAgICAgICAgIDxwbHVnaW4+Ci0JCTxncm91cElkPm9yZy5qdm5ldC5tYXZlbi1hbnRydW4tZXh0ZW5kZWQtcGx1Z2luPC9ncm91cElkPgorICAgICAgICA8Z3JvdXBJZD5vcmcuanZuZXQubWF2ZW4tYW50cnVuLWV4dGVuZGVkLXBsdWdpbjwvZ3JvdXBJZD4KICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1hbnRydW4tZXh0ZW5kZWQtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgCQk8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgPGV4ZWN1dGlvbnM+CiAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT50ZXN0PC9waGFzZT4KICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8dGFza3M+Ci0JCQkgPHByb3BlcnR5IG5hbWU9ImNvbXBpbGVfY2xhc3NwYXRoIiByZWZpZD0ibWF2ZW4uY29tcGlsZS5jbGFzc3BhdGgiLz4KLSAgICAgICAgICAgICAgICAJPHByb3BlcnR5IG5hbWU9InBsdWdpbl9jbGFzc3BhdGgiIHJlZmlkPSJtYXZlbi5wbHVnaW4uY2xhc3NwYXRoIi8+CisgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNvbXBpbGVfY2xhc3NwYXRoIiByZWZpZD0ibWF2ZW4uY29tcGlsZS5jbGFzc3BhdGgiLz4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbl9jbGFzc3BhdGgiIHJlZmlkPSJtYXZlbi5wbHVnaW4uY2xhc3NwYXRoIi8+CiAKLSAgICAgICAgICAgICAgICAJPGVjaG8gbWVzc2FnZT0iY29tcGlsZSBjbGFzc3BhdGg6ICR7Y29tcGlsZV9jbGFzc3BhdGh9Ii8+Ci0gICAgICAgICAgICAgICAgCTxlY2hvIG1lc3NhZ2U9InBsdWdpbiBjbGFzc3BhdGg6ICAke3BsdWdpbl9jbGFzc3BhdGh9Ii8+CisgICAgICAgICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImNvbXBpbGUgY2xhc3NwYXRoOiAke2NvbXBpbGVfY2xhc3NwYXRofSIvPgorICAgICAgICAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4gY2xhc3NwYXRoOiAgJHtwbHVnaW5fY2xhc3NwYXRofSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgPGFudCBkaXI9Ii4iIGFudGZpbGU9ImJ1aWxkLnhtbCIgdGFyZ2V0PSJhbGwiPgotCQkJICAgPHByb3BlcnR5IG5hbWU9ImdsYXNzZmlzaC5ob21lIiB2YWx1ZT0iJHtnbGFzc2Zpc2guaG9tZX0iLz4KLQkJCTwvYW50PgorICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImdsYXNzZmlzaC5ob21lIiB2YWx1ZT0iJHtnbGFzc2Zpc2guaG9tZX0iLz4KKyAgICAgICAgICAgIDwvYW50PgogICAgICAgICAgICAgICAgICAgICAgICA8L3Rhc2tzPgogICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotCQkgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICA8Z29hbHM+CiAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5ydW48L2dvYWw+CiAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgogICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CiAgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgotCSAgICAgICAgPGRlcGVuZGVuY2llcz4KLQkJICAgICA8ZGVwZW5kZW5jeT4KLSAgICAJCQk8Z3JvdXBJZD5jb21tb25zLWNvZGVjPC9ncm91cElkPgotICAgIAkJCTxhcnRpZmFjdElkPmNvbW1vbnMtY29kZWM8L2FydGlmYWN0SWQ+Ci0gICAgCQkJPHZlcnNpb24+MS4zPC92ZXJzaW9uPgotCQkgICAgIDwvZGVwZW5kZW5jeT4KLQkJICAgICA8ZGVwZW5kZW5jeT4KLSAgICAJCQk8Z3JvdXBJZD5jb21tb25zLWh0dHBjbGllbnQ8L2dyb3VwSWQ+Ci0gICAgCQkJPGFydGlmYWN0SWQ+Y29tbW9ucy1odHRwY2xpZW50PC9hcnRpZmFjdElkPgotICAgIAkJCTx2ZXJzaW9uPjMuMC4xPC92ZXJzaW9uPgotCQkgICAgIDwvZGVwZW5kZW5jeT4KLQkJICAgICA8ZGVwZW5kZW5jeT4KLSAgICAJCQk8Z3JvdXBJZD5vcmcudGVzdG5nPC9ncm91cElkPgotICAgIAkJCTxhcnRpZmFjdElkPnRlc3RuZzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tbW9ucy1jb2RlYzwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWNvZGVjPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMzwvdmVyc2lvbj4KKyAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tbW9ucy1odHRwY2xpZW50PC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvbW1vbnMtaHR0cGNsaWVudDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4zLjAuMTwvdmVyc2lvbj4KKyAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnRlc3RuZzwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50ZXN0bmc8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj42LjExPC92ZXJzaW9uPgotCQkgICAgIDwvZGVwZW5kZW5jeT4KLQkJICAgICA8IS0tIGRlcGVuZGVuY3k+Ci0gCSAgICAgIAkJPGdyb3VwSWQ+b3JnLnRlc3RuZzwvZ3JvdXBJZD4KLSAJICAgICAgCQk8YXJ0aWZhY3RJZD50ZXN0bmc8L2FydGlmYWN0SWQ+Ci0gCSAgICAgIAkJPHZlcnNpb24+NS43PC92ZXJzaW9uPgotIAkgICAgICAJCTxjbGFzc2lmaWVyPmpkazE1PC9jbGFzc2lmaWVyPgotIAkgICAgICAJCTxzY29wZT5jb21waWxlPC9zY29wZT4KLSAJICAgIAkgICAgIDwvZGVwZW5kZW5jeSAtLT4KKyAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgICAgPCEtLSBkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy50ZXN0bmc8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dGVzdG5nPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjUuNzwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICA8Y2xhc3NpZmllcj5qZGsxNTwvY2xhc3NpZmllcj4KKyAgICAgICAgICAgICAgICAgICA8c2NvcGU+Y29tcGlsZTwvc2NvcGU+CisgICAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3kgLS0+CiAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmNpZXM+CiAgICAgICAgICAgICAgPC9wbHVnaW4+CiAgICAgICAgIDwvcGx1Z2lucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvcnVuLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvcnVuLnhtbAppbmRleCA3ZmMxY2ExLi44OWZhMWE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3J1bi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS9ydW4ueG1sCkBAIC0yMSwxNCArMjEsMTQgQEAKICAgICA8cHJvcGVydHkgZmlsZT0iYnVpbGQucHJvcGVydGllcyIvPgogICAgIDxwcm9wZXJ0eSBmaWxlPSIuL2dmcHJvamVjdC8ke2RlcGxveS5wbGF0Zm9ybX0tY29uZmlnLnByb3BlcnRpZXMiLz4KICAgICA8cHJvcGVydHkgZmlsZT0iLi9nZnByb2plY3QvJHtkYi50eXBlfS5wcm9wZXJ0aWVzIi8+Ci0gICAgCisKICAgICA8ZGVzY3JpcHRpb24+QnVpbGRzLCB0ZXN0cywgYW5kIHJ1bnMgdGhlIHByb2plY3QgSGVsbG8gSlNQIEFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KLSAgICA8aW1wb3J0IGZpbGU9Ii4vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+ICAgCisgICAgPGltcG9ydCBmaWxlPSIuL2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDxpbXBvcnQgZmlsZT0iLi9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LXRhcmdldHMueG1sIi8+Ci0gICAgPGltcG9ydCBmaWxlPSIuL2dmcHJvamVjdC9kYi10YXJnZXRzLnhtbCIvPiAgICAKLSAgICAKLSAgIAotICAgIAorICAgIDxpbXBvcnQgZmlsZT0iLi9nZnByb2plY3QvZGItdGFyZ2V0cy54bWwiLz4KKworCisKICA8ZGVzY3JpcHRpb24+QnVpbGRzLCB0ZXN0cywgYW5kIHJ1bnMgdGhlIHByb2plY3QgSGVsbG8gSlNQIEFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KIDwhLS0gPGltcG9ydCBmaWxlPSJuYnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4tLT4KIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJzdGFydC1zZXJ2ZXIiLz4KQEAgLTM5LDcgKzM5LDcgQEAKICAgICA8ZWNobyBtZXNzYWdlPSJhbnQgLWYgcnVuLnhtbCBzdG9wLXNlcnZlciBmb3Igc3RvcHBpbmcgIHNlcnZlciIvPgogICAgIDxlY2hvIG1lc3NhZ2U9ImFudCAtZiBydW4ueG1sIHN0YXJ0RGVyYnkgZm9yIHN0YXJ0aW5nIGRhdGFiYXNlIi8+CiAgICAgPGVjaG8gbWVzc2FnZT0iYW50IC1mIHJ1bi54bWwgc3RvcERlcmJ5IGZvciBzdG9waW5nIGRhdGFiYXNlIi8+Ci0gICAgCisKIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3Rlc3RuZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3Rlc3RuZy54bWwKaW5kZXggZmFkNzFmYi4uMjEyNTgwMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS90ZXN0bmcueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvdGVzdG5nLnhtbApAQCAtMTcsMTMgKzE3LDEzIEBACiAtLT4KIAogPCFET0NUWVBFIHN1aXRlIFNZU1RFTSAiaHR0cDovL3Rlc3RuZy5vcmcvdGVzdG5nLTEuMC5kdGQiID4KLSAKKwogPHN1aXRlIG5hbWU9IkZ1bmN0aW9uYWxUZXN0cyIgdmVyYm9zZT0iMiIgPgogICA8dGVzdCBuYW1lPSJ3ZWJfanNwc2VydmxldF93YXIiPgogICA8IS0tPGdyb3Vwcz4KICAgICAgIDxydW4+Ci0JPGluY2x1ZGUgbmFtZT0icHVsc2UiLz4KLQk8L3J1bj4KKyAgICA8aW5jbHVkZSBuYW1lPSJwdWxzZSIvPgorICAgIDwvcnVuPgogICA8L2dyb3Vwcz4tLT4KICAgICA8Y2xhc3Nlcz4KICAgICAgICA8Y2xhc3MgbmFtZT0idGVzdC53ZWIuanNwLmhlbGxvLkhlbGxvSlNQVGVzdE5HIiAvPgpAQCAtNTgsNiArNTgsNiBAQAogICAgIDxjbGFzc2VzPgogICAgICAgIDxjbGFzcyBuYW1lPSJlamIzMC5zZXNzaW9uLmhlbGxvLnRlc3QuVGVzdENsaWVudCIgLz4KICAgICA8L2NsYXNzZXM+Ci0gIDwvdGVzdD4tLT4gCisgIDwvdGVzdD4tLT4KIDwvc3VpdGU+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvd2ViL2hlbGxvd29ybGQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvaGVsbG93b3JsZC9idWlsZC54bWwKaW5kZXggYTIxYmY0MS4uNzZlYmZjZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvaGVsbG93b3JsZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvaGVsbG93b3JsZC9idWlsZC54bWwKQEAgLTIwLDM4ICsyMCwzOCBAQAogPHByb2plY3QgbmFtZT0iaGVsbG8tanNwIiBkZWZhdWx0PSJkZWZhdWx0IiBiYXNlZGlyPSIuIj4KICAgICA8cHJvcGVydHkgZmlsZT0iYnVpbGQucHJvcGVydGllcyIvPgogICAgIDxwcm9wZXJ0eSBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC8ke2RlcGxveS5wbGF0Zm9ybX0tY29uZmlnLnByb3BlcnRpZXMiLz4KLSAgIAotICAgIAorCisKICAgICA8ZGVzY3JpcHRpb24+QnVpbGRzLCB0ZXN0cywgYW5kIHJ1bnMgdGhlIHByb2plY3QgSGVsbG8gSlNQIEFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KLSAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+ICAgCisgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LXRhcmdldHMueG1sIi8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIvPgotICAgIAotICAgCisKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiPgogICAgICAgICAgPHByb3BlcnR5IG5hbWU9Indhci5maWxlLmV4dCIgdmFsdWU9IiR7d2FyLmZpbGV9LndhciIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWltcGwiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktJHtkZXBsb3kucGxhdGZvcm19LWltcGwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRlcGxveWVkLmFwcCIgdmFsdWU9IiR7d2FyLmZpbGV9LndhciIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+IAorCisgICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudGVzdC1pbXBsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iaGVsbG9qc3AiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RuZy50ZXN0Lm5hbWUiIHZhbHVlPSIke3Rlc3RuZy50ZXN0Lm5hbWV9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0bmcudGVzdGNsaWVudCIgdmFsdWU9IkhlbGxvSlNQVGVzdE5HIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAgCisKICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgCisKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvaGVsbG93b3JsZC9tZXRhZGF0YS93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvaGVsbG93b3JsZC9tZXRhZGF0YS93ZWIueG1sCmluZGV4IDA4MzMwMWYuLmEyM2JhMGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvd2ViL2hlbGxvd29ybGQvbWV0YWRhdGEvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3dlYi9oZWxsb3dvcmxkL21ldGFkYXRhL3dlYi54bWwKQEAgLTMyLDcgKzMyLDcgQEAKICAgICA8dXJsLXBhdHRlcm4+L3NpbXBsZXNlcnZsZXQ8L3VybC1wYXR0ZXJuPgogICA8L3NlcnZsZXQtbWFwcGluZz4KICAgPHdlbGNvbWUtZmlsZS1saXN0PgotCTx3ZWxjb21lLWZpbGU+aGVsbG8uanNwPC93ZWxjb21lLWZpbGU+CisgICAgPHdlbGNvbWUtZmlsZT5oZWxsby5qc3A8L3dlbGNvbWUtZmlsZT4KICAgICA8L3dlbGNvbWUtZmlsZS1saXN0PgogICA8bG9naW4tY29uZmlnPgogICAgIDxhdXRoLW1ldGhvZD5CQVNJQzwvYXV0aC1tZXRob2Q+CkBAIC00Miw2ICs0Miw2IEBACiAgICAgICA8Zm9ybS1lcnJvci1wYWdlPjwvZm9ybS1lcnJvci1wYWdlPgogICAgIDwvZm9ybS1sb2dpbi1jb25maWc+CiAgIDwvbG9naW4tY29uZmlnPgotICAKKwogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3dlYi9oZWxsb3dvcmxkL3NyYy9qYXZhL0hlbGxvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvaGVsbG93b3JsZC9zcmMvamF2YS9IZWxsb1NlcnZsZXQuamF2YQppbmRleCA2MWY0Mjg4Li44ODgxYTc1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3dlYi9oZWxsb3dvcmxkL3NyYy9qYXZhL0hlbGxvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvd2ViL2hlbGxvd29ybGQvc3JjL2phdmEvSGVsbG9TZXJ2bGV0LmphdmEKQEAgLTUxLDQ1ICs1MSw0NSBAQAogICAgICAgICAgICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewogCi0JICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2bGV0IHByb2Nlc3NpbmcgZG8gZ2V0Li4iKTsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlcnZsZXQgcHJvY2Vzc2luZyBkbyBnZXQuLiIpOwogCi0JcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwotCVByaW50V3JpdGVyIHdyaXRlciA9IHJlc3BvbnNlLmdldFdyaXRlcigpOworICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICBQcmludFdyaXRlciB3cml0ZXIgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKIAotCXdyaXRlci5wcmludGxuKCI8aHRtbD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPGhlYWQ+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjx0aXRsZT5TYW1wbGUgQXBwbGljYXRpb24gU2VydmxldCBQYWdlPC90aXRsZT4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC9oZWFkPiIpOwotCXdyaXRlci5wcmludGxuKCI8Ym9keSBiZ2NvbG9yPXdoaXRlPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8aHRtbD4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPGhlYWQ+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjx0aXRsZT5TYW1wbGUgQXBwbGljYXRpb24gU2VydmxldCBQYWdlPC90aXRsZT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPC9oZWFkPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8Ym9keSBiZ2NvbG9yPXdoaXRlPiIpOwogCi0Jd3JpdGVyLnByaW50bG4oIjx0YWJsZSBib3JkZXI9XCIwXCI+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKLQl3cml0ZXIucHJpbnRsbigiPHRkPiIpOwotCS8vd3JpdGVyLnByaW50bG4oIjxpbWcgc3JjPVwiaW1hZ2VzL3RvbWNhdC5naWZcIj4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC90ZD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPHRkPiIpOwotCXdyaXRlci5wcmludGxuKCI8aDE+U2FtcGxlIEFwcGxpY2F0aW9uIFNlcnZsZXQ8L2gxPiIpOwotCXdyaXRlci5wcmludGxuKCJUaGlzIGlzIHRoZSBvdXRwdXQgb2YgYSBzZXJ2bGV0IHRoYXQgaXMgcGFydCBvZiIpOwotCXdyaXRlci5wcmludGxuKCJ0aGUgSGVsbG8sIFdvcmxkIGFwcGxpY2F0aW9uLiAgSXQgZGlzcGxheXMgdGhlIik7Ci0Jd3JpdGVyLnByaW50bG4oInJlcXVlc3QgaGVhZGVycyBmcm9tIHRoZSByZXF1ZXN0IHdlIGFyZSBjdXJyZW50bHkiKTsKLQl3cml0ZXIucHJpbnRsbigicHJvY2Vzc2luZy4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC90ZD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC90cj4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC90YWJsZT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPHRhYmxlIGJvcmRlcj1cIjBcIj4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPHRyPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8dGQ+Iik7CisgICAgLy93cml0ZXIucHJpbnRsbigiPGltZyBzcmM9XCJpbWFnZXMvdG9tY2F0LmdpZlwiPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L3RkPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8dGQ+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjxoMT5TYW1wbGUgQXBwbGljYXRpb24gU2VydmxldDwvaDE+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIlRoaXMgaXMgdGhlIG91dHB1dCBvZiBhIHNlcnZsZXQgdGhhdCBpcyBwYXJ0IG9mIik7CisgICAgd3JpdGVyLnByaW50bG4oInRoZSBIZWxsbywgV29ybGQgYXBwbGljYXRpb24uICBJdCBkaXNwbGF5cyB0aGUiKTsKKyAgICB3cml0ZXIucHJpbnRsbigicmVxdWVzdCBoZWFkZXJzIGZyb20gdGhlIHJlcXVlc3Qgd2UgYXJlIGN1cnJlbnRseSIpOworICAgIHdyaXRlci5wcmludGxuKCJwcm9jZXNzaW5nLiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L3RkPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L3RyPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L3RhYmxlPiIpOwogCi0Jd3JpdGVyLnByaW50bG4oIjx0YWJsZSBib3JkZXI9XCIwXCIgd2lkdGg9XCIxMDAlXCI+Iik7Ci0JRW51bWVyYXRpb24gbmFtZXMgPSByZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7Ci0Jd2hpbGUgKG5hbWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JICAgIFN0cmluZyBuYW1lID0gKFN0cmluZykgbmFtZXMubmV4dEVsZW1lbnQoKTsKLQkgICAgd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKLQkgICAgd3JpdGVyLnByaW50bG4oIiAgPHRoIGFsaWduPVwicmlnaHRcIj4iICsgbmFtZSArICI6PC90aD4iKTsKLQkgICAgd3JpdGVyLnByaW50bG4oIiAgPHRkPiIgKyByZXF1ZXN0LmdldEhlYWRlcihuYW1lKSArICI8L3RkPiIpOwotCSAgICB3cml0ZXIucHJpbnRsbigiPC90cj4iKTsKLQl9Ci0Jd3JpdGVyLnByaW50bG4oIjwvdGFibGU+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjx0YWJsZSBib3JkZXI9XCIwXCIgd2lkdGg9XCIxMDAlXCI+Iik7CisgICAgRW51bWVyYXRpb24gbmFtZXMgPSByZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisgICAgd2hpbGUgKG5hbWVzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZykgbmFtZXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIiAgPHRoIGFsaWduPVwicmlnaHRcIj4iICsgbmFtZSArICI6PC90aD4iKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIiAgPHRkPiIgKyByZXF1ZXN0LmdldEhlYWRlcihuYW1lKSArICI8L3RkPiIpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiPC90cj4iKTsKKyAgICB9CisgICAgd3JpdGVyLnByaW50bG4oIjwvdGFibGU+Iik7CiAKLQl3cml0ZXIucHJpbnRsbigiPC9ib2R5PiIpOwotCXdyaXRlci5wcmludGxuKCI8L2h0bWw+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjwvYm9keT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPC9odG1sPiIpOwogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3dlYi9oZWxsb3dvcmxkL3NyYy90ZXN0L0hlbGxvSlNQVGVzdE5HLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3dlYi9oZWxsb3dvcmxkL3NyYy90ZXN0L0hlbGxvSlNQVGVzdE5HLmphdmEKaW5kZXggYjM0MGRkMS4uYjE0ZTM5YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvaGVsbG93b3JsZC9zcmMvdGVzdC9IZWxsb0pTUFRlc3RORy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvd2ViL2hlbGxvd29ybGQvc3JjL3Rlc3QvSGVsbG9KU1BUZXN0TkcuamF2YQpAQCAtMzQsMTMgKzM0LDEzIEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0KICAgICAgICAgInNpbXBsZS13ZWJhcHAtanNwc2VydmxldC1ub3Jlc291cmNlIjsKLSAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgc3RyQ29udGV4dFJvb3Q9ImhlbGxvanNwIjsKIAogICAgIHN0YXRpYyBTdHJpbmcgcmVzdWx0ID0gIiI7CiAgICAgU3RyaW5nIGhvc3Q9U3lzdGVtLmdldFByb3BlcnR5KCJodHRwLmhvc3QiKTsKICAgICBTdHJpbmcgcG9ydD1TeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucG9ydCIpOwotICAgICAgICAgICAKKwogICAgIC8qCiAgICAgICpJZiB0d28gYXNzZXJ0cyBhcmUgbWVudGlvbmVkIGluIG9uZSBtZXRob2QsIHRoZW4gbGFzdCBhc3NlcnQgaXMgdGFrZW4gaW4KICAgICAgKnRvIGFjY291bnQuCkBAIC01Miw5ICs1Miw5IEBACiAgICAgQFRlc3QoZ3JvdXBzID17ICJwdWxzZSJ9ICkgLy8gdGVzdCBtZXRob2QKICAgICAvL3B1YmxpYyB2b2lkIHdlYnRlc3QoU3RyaW5nIGhvc3QsIFN0cmluZyBwb3J0LCBTdHJpbmcgY29udGV4dHJvb3QpIHRocm93cyBFeGNlcHRpb257CiAgICAgcHVibGljIHZvaWQgc2ltcGxlSlNQVGVzdFBhZ2UoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICB0cnl7Ci0gICAgICAgICAKKwogCiAgICAgICAgIFN0cmluZyB0ZXN0dXJsID0gImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgIi8iKyBzdHJDb250ZXh0Um9vdCArICIvaGVsbG8uanNwIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVUkwgaXM6ICIrdGVzdHVybCk7CkBAIC03MCwyMCArNzAsMjAgQEAKIAogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CiAgICAgICAgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOwotICAgICAgICBTdHJpbmcgdGVzdExpbmUgPSBudWxsOyAgICAgICAgCi0JU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0iSlNQIFRlc3QgUGFnZSI7CisgICAgICAgIFN0cmluZyB0ZXN0TGluZSA9IG51bGw7CisgICAgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0iSlNQIFRlc3QgUGFnZSI7CiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZihFWFBFQ1RFRF9SRVNQT05TRSkhPS0xKXsKICAgICAgICAgICAgICAgICByZXN1bHQ9dHJ1ZTsKICAgICAgICAgICAgICB0ZXN0TGluZSA9IGxpbmU7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0TGluZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgIH0gICAgICAgIAotICAgICAgICAgICAgICAgIAorCisgICAgICAgIH0KKwogICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHJlc3VsdCwgdHJ1ZSwiVW5leHBlY3RlZCBIVE1MIik7Ci0gICAgICAgICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oZSk7CkBAIC05Myw5ICs5Myw5IEBACiAKICAgICBAVGVzdChncm91cHM9eyJwdWxzZSJ9KSAvL3Rlc3QgbWV0aG9kIGZvciBzZXJ2ZXIKICAgICBwdWJsaWMgdm9pZCB0ZXN0U2VydmVyUnVubmluZygpIHRocm93cyBFeGNlcHRpb257Ci0JICAgIC8vWW91ciBzZXJ2ZXIgaXMgdXAgYW5kIHJ1bm5pbmchCi0JICAgIC8vCi0JU3RyaW5nIHRlc3R1cmwgPSAiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQ7CisgICAgICAgIC8vWW91ciBzZXJ2ZXIgaXMgdXAgYW5kIHJ1bm5pbmchCisgICAgICAgIC8vCisgICAgU3RyaW5nIHRlc3R1cmwgPSAiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQ7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVVJMIGlzOiAiK3Rlc3R1cmwpOwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCh0ZXN0dXJsKTsKICAgICAgICAgZWNobygiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTEwMywxMiArMTAzLDEyIEBACiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKIAotCUlucHV0U3RyZWFtIGlzID0gY29ubi5nZXRJbnB1dFN0cmVhbSgpOworICAgIElucHV0U3RyZWFtIGlzID0gY29ubi5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIAogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CiAgICAgICAgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOwotICAgICAgICBTdHJpbmcgdGVzdExpbmUgPSBudWxsOyAgICAgICAgCisgICAgICAgIFN0cmluZyB0ZXN0TGluZSA9IG51bGw7CiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgZWNobyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiWW91ciBBcHBsaWNhdGlvbiBTZXJ2ZXIgaXMgbm93IHJ1bm5pbmciKSE9LTEpewpAQCAtMTE2LDE3ICsxMTYsMTcgQEAKICAgICAgICAgICAgICB0ZXN0TGluZSA9IGxpbmU7CiAgICAgICAgICAgIGVjaG8odGVzdExpbmUpOwogICAgICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICB9ICAgICAgICAKLSAgICAgICAgICAgICAgICAKKworICAgICAgICB9CisKICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhyZXN1bHQsIHRydWUsIlVuZXhwZWN0ZWQgSFRNTCIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgQFRlc3QoZ3JvdXBzID17ICJwdWxzZSJ9ICkgLy8gdGVzdCBtZXRob2QKICAgICBwdWJsaWMgdm9pZCBzdGF0aWNIVE1MUGFnZVRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uewogICAgICAgICAgdHJ5ewotICAgICAgICAgCisKIAogICAgICAgICBTdHJpbmcgdGVzdHVybCA9ICJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArICIvIisgc3RyQ29udGV4dFJvb3QgKyAiL2ZpcnN0Lmh0bWwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVSTCBpczogIit0ZXN0dXJsKTsKQEAgLTE0MywzMCArMTQzLDMwIEBACiAKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwogICAgICAgICBib29sZWFuIHJlc3VsdD1mYWxzZTsKLSAgICAgICAgU3RyaW5nIHRlc3RMaW5lID0gbnVsbDsgICAgICAgIAorICAgICAgICBTdHJpbmcgdGVzdExpbmUgPSBudWxsOwogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIldlbGNvbWUgdG8gSFRNTCBUZXN0IFByb2dyYW0iKSE9LTEpewogICAgICAgICAgICAgICAgIHJlc3VsdD10cnVlOwogICAgICAgICAgICAgIHRlc3RMaW5lID0gbGluZTsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3RMaW5lKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgfSAgICAgICAgCi0gICAgICAgICAgICAgICAgCisKKyAgICAgICAgfQorCiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVzdWx0LCB0cnVlLCJVbmV4cGVjdGVkIEhUTUwiKTsKLSAgICAgICAgICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0KGdyb3VwcyA9eyAicHVsc2UifSApIC8vIHRlc3QgbWV0aG9kCiAgICAgcHVibGljIHZvaWQgc2ltcGxlU2VydmxldFRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uewogICAgICAgICAgdHJ5ewotICAgICAgICAgCisKIAogICAgICAgICBTdHJpbmcgdGVzdHVybCA9ICJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArICIvIisgc3RyQ29udGV4dFJvb3QgKyAiL3NpbXBsZXNlcnZsZXQiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVSTCBpczogIit0ZXN0dXJsKTsKQEAgLTE4MiwyNCArMTgyLDI0IEBACiAKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwogICAgICAgICBib29sZWFuIHJlc3VsdD1mYWxzZTsKLSAgICAgICAgU3RyaW5nIHRlc3RMaW5lID0gbnVsbDsgICAgICAgIAorICAgICAgICBTdHJpbmcgdGVzdExpbmUgPSBudWxsOwogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNhbXBsZSBBcHBsaWNhdGlvbiBTZXJ2bGV0IikhPS0xKXsKICAgICAgICAgICAgICAgICByZXN1bHQ9dHJ1ZTsKICAgICAgICAgICAgICB0ZXN0TGluZSA9IGxpbmU7CiAgICAgICAgICAgIGVjaG8odGVzdExpbmUpOwogICAgICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICB9ICAgICAgICAKLSAgICAgICAgICAgICAgICAKKworICAgICAgICB9CisKICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhyZXN1bHQsIHRydWUsIlVuZXhwZWN0ZWQgSFRNTCIpOwotICAgICAgICAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGUpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIGVjaG8oU3RyaW5nIG1zZykgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvanNmYXN0cm9sb2dlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3dlYi9qc2Zhc3Ryb2xvZ2VyL2J1aWxkLnhtbAppbmRleCA5OTYwYTU1Li5lNjNmNzA0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3dlYi9qc2Zhc3Ryb2xvZ2VyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3dlYi9qc2Zhc3Ryb2xvZ2VyL2J1aWxkLnhtbApAQCAtMTgsMzcgKzE4LDM3IEBACiAtLT4KIAogPHByb2plY3QgbmFtZT0ianNmYmFzaWMtanNwIiBkZWZhdWx0PSJkZWZhdWx0IiBiYXNlZGlyPSIuIj4KLSAgICAKKwogICAgIDxwcm9wZXJ0eSBmaWxlPSJidWlsZC5wcm9wZXJ0aWVzIi8+CiAgICAgPHByb3BlcnR5IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS1jb25maWcucHJvcGVydGllcyIvPgotICAgIAotICAgIAorCisKICAgICA8ZGVzY3JpcHRpb24+QnVpbGRzLCB0ZXN0cywgYW5kIHJ1bnMgdGhlIHByb2plY3QgSGVsbG8gSlNQIEFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KLSAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+ICAgCisgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LXRhcmdldHMueG1sIi8+Ci0gICAgCisKICAgICA8ZGVzY3JpcHRpb24+QnVpbGRzLCB0ZXN0cywgYW5kIHJ1bnMgdGhlIHByb2plY3QgSGVsbG8gSlNQIEFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgICA8IS0tIDxpbXBvcnQgZmlsZT0ibmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+LS0+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIj4KICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ3YXIuZmlsZS5leHQiIHZhbHVlPSIke3dhci5maWxlfS53YXIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1pbXBsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXBsb3llZC5hcHAiIHZhbHVlPSIke3dhci5maWxlfS53YXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQgIG5hbWU9InJ1bnRlc3QiPiAKKworICAgIDx0YXJnZXQgIG5hbWU9InJ1bnRlc3QiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bnRlc3QtaW1wbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0bmcudGVzdC5uYW1lIiB2YWx1ZT0iJHt0ZXN0bmcudGVzdC5uYW1lfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0idGVzdG5nLnRlc3RjbGllbnQiIHZhbHVlPSJKU0ZXZWJUZXN0TkciLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgICAgICAKKwogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktJHtkZXBsb3kucGxhdGZvcm19LWltcGwiLz4KICAgICA8L3RhcmdldD4KQEAgLTU3LDUgKzU3LDUgQEAKIAogCiAKLSAgICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvanNmYXN0cm9sb2dlci9tZXRhZGF0YS9mYWNlcy1jb25maWcueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvanNmYXN0cm9sb2dlci9tZXRhZGF0YS9mYWNlcy1jb25maWcueG1sCmluZGV4IDI5OWNkNGQuLmNiOWJiMjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvd2ViL2pzZmFzdHJvbG9nZXIvbWV0YWRhdGEvZmFjZXMtY29uZmlnLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3dlYi9qc2Zhc3Ryb2xvZ2VyL21ldGFkYXRhL2ZhY2VzLWNvbmZpZy54bWwKQEAgLTQyLDUgKzQyLDUgQEAKICAgICAgICAgPG1hbmFnZWQtYmVhbi1jbGFzcz53ZWIuanNmLmJlYW4uVXNlckJlYW48L21hbmFnZWQtYmVhbi1jbGFzcz4KICAgICAgICAgPG1hbmFnZWQtYmVhbi1zY29wZT5yZXF1ZXN0PC9tYW5hZ2VkLWJlYW4tc2NvcGU+CiAgICAgPC9tYW5hZ2VkLWJlYW4+Ci0gICAgCisKIDwvZmFjZXMtY29uZmlnPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvanNmYXN0cm9sb2dlci9tZXRhZGF0YS93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvanNmYXN0cm9sb2dlci9tZXRhZGF0YS93ZWIueG1sCmluZGV4IDY3NTA0ZDYuLmU3YTc4ZWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvd2ViL2pzZmFzdHJvbG9nZXIvbWV0YWRhdGEvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3dlYi9qc2Zhc3Ryb2xvZ2VyL21ldGFkYXRhL3dlYi54bWwKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgPC9zZXNzaW9uLXRpbWVvdXQ+CiAgICAgPC9zZXNzaW9uLWNvbmZpZz4KICAgICA8d2VsY29tZS1maWxlLWxpc3Q+Ci0JPHdlbGNvbWUtZmlsZT4KKyAgICA8d2VsY29tZS1maWxlPgogICAgICAgICAgICAgaW5kZXguanNwCiAgICAgICAgIDwvd2VsY29tZS1maWxlPgogICAgICAgICA8d2VsY29tZS1maWxlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvanNmYXN0cm9sb2dlci9zcmMvamF2YS93ZWIvanNmL2JlYW4vVXNlckJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvd2ViL2pzZmFzdHJvbG9nZXIvc3JjL2phdmEvd2ViL2pzZi9iZWFuL1VzZXJCZWFuLmphdmEKaW5kZXggZTEzZTlhYi4uOTY0MDU1OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvanNmYXN0cm9sb2dlci9zcmMvamF2YS93ZWIvanNmL2JlYW4vVXNlckJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3dlYi9qc2Zhc3Ryb2xvZ2VyL3NyYy9qYXZhL3dlYi9qc2YvYmVhbi9Vc2VyQmVhbi5qYXZhCkBAIC0yNiwxMCArMjYsMTAgQEAKIHBhY2thZ2Ugd2ViLmpzZi5iZWFuOwogCiBwdWJsaWMgY2xhc3MgVXNlckJlYW4gewotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKICAgICBwcml2YXRlIFN0cmluZyBiaXJ0aGRheTsKLSAgICAKKwogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFVzZXJCZWFuICovCiAgICAgcHVibGljIFVzZXJCZWFuKCkgewogICAgIH0KQEAgLTQ5LDUgKzQ5LDUgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRCaXJ0aGRheShTdHJpbmcgYmlydGhkYXkpIHsKICAgICAgICAgdGhpcy5iaXJ0aGRheSA9IGJpcnRoZGF5OwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvanNmYXN0cm9sb2dlci9zcmMvdGVzdC9KU0ZXZWJUZXN0TkcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvd2ViL2pzZmFzdHJvbG9nZXIvc3JjL3Rlc3QvSlNGV2ViVGVzdE5HLmphdmEKaW5kZXggOTRkYjIyZS4uNWIzYzQyNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvanNmYXN0cm9sb2dlci9zcmMvdGVzdC9KU0ZXZWJUZXN0TkcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3dlYi9qc2Zhc3Ryb2xvZ2VyL3NyYy90ZXN0L0pTRldlYlRlc3RORy5qYXZhCkBAIC0zOSwyMSArMzksMjEgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRSA9CiAgICAgICAgICJKU1AgUGFnZSBUZXN0IjsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIHN0ckNvbnRleHRSb290PSJqc2Zhc3Ryb2xvZ2VyIjsKIAogICAgIHN0YXRpYyBTdHJpbmcgcmVzdWx0ID0gIiI7CiAgICAgU3RyaW5nIG1faG9zdD0iIjsKLSAgICBTdHJpbmcgbV9wb3J0PSIiOyAgICAKKyAgICBTdHJpbmcgbV9wb3J0PSIiOwogICAgIC8vSHR0cENsaWVudCBodHRwY2xpZW50ID0gbmV3IEh0dHBDbGllbnQoKTsKLSAgICAKKwogICAgIC8vQFBhcmFtZXRlcnMoeyJob3N0IiwicG9ydCJ9KQogICAgIEBCZWZvcmVNZXRob2QKICAgICBwdWJsaWMgdm9pZCBiZWZvcmVUZXN0KCl7CiAgICAgICAgIG1faG9zdD1TeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAuaG9zdCIpOwogICAgICAgICBtX3BvcnQ9U3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKTsKICAgICB9Ci0gICAgICAgICAgICAKKwogICAgIC8qCiAgICAgICpJZiB0dwogICAgICBvIGFzc2VydHMgYXJlIG1lbnRpb25lZCBpbiBvbmUgbWV0aG9kLCB0aGVuIGxhc3QgYXNzZXJ0IGlzIHRha2VuIGluCkBAIC02NSw3ICs2NSw3IEBACiAgICAgQFRlc3QoZ3JvdXBzID17ICJwdWxzZSJ9ICkgLy8gdGVzdCBtZXRob2QKICAgICAvL3B1YmxpYyB2b2lkIHdlYnRlc3QoU3RyaW5nIGhvc3QsIFN0cmluZyBwb3J0LCBTdHJpbmcgY29udGV4dHJvb3QpIHRocm93cyBFeGNlcHRpb257CiAgICAgcHVibGljIHZvaWQganNmQXBwRGVwbG95ZWRGaXJzdFBhZ2V0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgdHJ5ewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJ1bm5pbmcgVGVzdE1ldGhvZCB3ZWJ0ZXN0Iik7CiAKQEAgLTgzLDMzICs4MywzMyBAQAogCiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKICAgICAgICAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7Ci0gICAgICAgIFN0cmluZyB0ZXN0TGluZSA9IG51bGw7ICAgICAgICAKKyAgICAgICAgU3RyaW5nIHRlc3RMaW5lID0gbnVsbDsKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJXZWxjb21lIHRvIGpBc3Ryb2xvZ2VyIikhPS0xKXsKLSAgICAgICAgICAgICAgICByZXN1bHQ9dHJ1ZTsgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXN1bHQ9dHJ1ZTsKICAgICAgICAgICAgICAgICB0ZXN0TGluZSA9IGxpbmU7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIH0gICAgIAotICAgICAgICAgICAgICAgIAorCisgICAgICAgIH0KKwogICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHJlc3VsdCwgdHJ1ZSwiVW5leHBlY3RlZCBIVE1MIik7Ci0gICAgICAgICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KIAogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgQFRlc3QoZ3JvdXBzID17ICJwdWxzZSJ9ICkgLy8gdGVzdCBtZXRob2QKICAgICBwdWJsaWMgdm9pZCBqc2ZJbmRleFBhZ2VCYXNpY1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uewogICAgICAgICAgdHJ5ewotICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSdW5uaW5nIFRlc3RNZXRob2QgU2ltcGxlSFRNTFRlc3QiKTsKLSAgICAgICAgIAorCiAKICAgICAgICAgU3RyaW5nIHRlc3R1cmwgPSAiaHR0cDovLyIgKyBtX2hvc3QgICsgIjoiICsgbV9wb3J0ICsgIi8iKyBzdHJDb250ZXh0Um9vdCArICIvaW5kZXguanNwIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVUkwgaXM6ICIrdGVzdHVybCk7CkBAIC0xMTksMzYgKzExOSwzNiBAQAogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7CiAKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjb25uLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKICAgICAgICAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7Ci0gICAgICAgIFN0cmluZyB0ZXN0TGluZSA9IG51bGw7ICAgICAgICAKKyAgICAgICAgU3RyaW5nIHRlc3RMaW5lID0gbnVsbDsKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJKYXZhU2VydmVyIEZhY2VzIEdyZWV0aW5ncyBQYWdlIikhPS0xKXsKICAgICAgICAgICAgICAgICByZXN1bHQ9dHJ1ZTsKICAgICAgICAgICAgICB0ZXN0TGluZSA9IGxpbmU7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0TGluZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgIH0gICAgICAgIAotICAgICAgICAgICAgICAgIAorCisgICAgICAgIH0KKwogICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHJlc3VsdCwgdHJ1ZSk7Ci0gICAgICAgIAorCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBlY2hvKFN0cmluZyBtc2cpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1zZyk7CiAgICAgfQotICAgIAotICAgIAorCisKIC8qCiAgICAgQFRlc3QoZ3JvdXBzPXsicHVsc2UifSkKICAgICBwdWJsaWMgdm9pZCB0ZXN0UmVxdWVzdFJlc3BvbnNlKCkgdGhyb3dzIEV4Y2VwdGlvbnsKQEAgLTE2NCwzNCArMTY0LDM0IEBACiAgICAgICAgICAgICBodHRwZ2V0ID0gbmV3IEdldE1ldGhvZCh0ZXN0dXJsKTsKICAgICAgICAgICAgIHBvc3Q9bmV3IFBvc3RNZXRob2QoImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9qc2Zhc3Ryb2xvZ2VyL2ZhY2VzL2dyZWV0aW5ncy5qc3AiKTsKIAotICAgICAgICAgICAgCisKICAgICAgICAgICAgIE5hbWVWYWx1ZVBhaXJbXSBteWRhdGEgPSB7CiAgICAgICAgICAgICAgICAgLy8gbmV3IE5hbWVWYWx1ZVBhaXIoImxvZ2luSUQiLCBpdFVzZXIpLAogICAgICAgICAgICAgICAgIC8vIG5ldyBOYW1lVmFsdWVQYWlyKCJwYXNzd29yZCIsIGl0UHdkKSwgTm90IHdvcmtpbmcgZm9yIGVkaXRpbmcgb2YgYnVnCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBuZXcgTmFtZVZhbHVlUGFpcigibmFtZSIsbmFtZSksCiAgICAgICAgICAgICAgICAgbmV3IE5hbWVWYWx1ZVBhaXIoImJpcnRoZGF5IixiaXJ0aGRheSkKICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcG9zdC5zZXRSZXF1ZXN0Qm9keShteWRhdGEpOwogICAgICAgICAgICAgaW50IHN0YXR1c0NvZGUgPSBodHRwY2xpZW50LmV4ZWN1dGVNZXRob2QocG9zdCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInByaW50IHN0YXR1cyBvayAiK3N0YXR1c0NvZGUpOwogICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoc3RhdHVzQ29kZSwgMjAwKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoc3RhdHVzQ29kZSAhPSBIdHRwU3RhdHVzLlNDX09LKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJNZXRob2QgZmFpbGVkOiAiICsgcG9zdC5nZXRTdGF0dXNMaW5lKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcG9zdC5nZXRTdGF0dXNMaW5lKCk7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyByZXNwb25zZT1wb3N0LmdldFJlc3BvbnNlQm9keUFzU3RyaW5nKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXNwb25zZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIAorCisKICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGUpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgfQogKi8KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvanNmaW5qZWN0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvd2ViL2pzZmluamVjdGlvbi9idWlsZC54bWwKaW5kZXggMTZkMmY5OS4uZTY4YzMyYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvanNmaW5qZWN0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3dlYi9qc2ZpbmplY3Rpb24vYnVpbGQueG1sCkBAIC0yMCwzOSArMjAsMzkgQEAKIDxwcm9qZWN0IG5hbWU9ImpzZmluamVjdGlvbiIgZGVmYXVsdD0iZGVmYXVsdCIgYmFzZWRpcj0iLiI+CiAgICAgPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiLz4KICAgICA8cHJvcGVydHkgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LWNvbmZpZy5wcm9wZXJ0aWVzIi8+Ci0gICAKLSAgICAKKworCiAgICAgPGRlc2NyaXB0aW9uPkJ1aWxkcywgdGVzdHMsIGFuZCBydW5zIHRoZSBwcm9qZWN0IEhlbGxvIEpTUCBBcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+Ci0gICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPiAgIAorICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS10YXJnZXRzLnhtbCIvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiLz4KLSAgICAKLSAgIAorCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIj4KICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ3YXIuZmlsZS5leHQiIHZhbHVlPSIke3dhci5maWxlfS53YXIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1pbXBsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXBsb3llZC5hcHAiIHZhbHVlPSIke3dhci5maWxlfS53YXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQgIG5hbWU9InJ1bnRlc3QiPiAKKworICAgIDx0YXJnZXQgIG5hbWU9InJ1bnRlc3QiPgogICAgICAgICA8IS0tICBBREQgaHRtbHVuaXQgQ0xBU1NQQVRIIC0tPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bnRlc3QtaW1wbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9ImhlbGxvbXkiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RuZy50ZXN0Lm5hbWUiIHZhbHVlPSIke3Rlc3RuZy50ZXN0Lm5hbWV9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0bmcudGVzdGNsaWVudCIgdmFsdWU9IkpTRkluamVjdGlvblRlc3RORyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgIAorCiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS0ke2RlcGxveS5wbGF0Zm9ybX0taW1wbCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIAorCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvd2ViL2pzZmluamVjdGlvbi9tZXRhZGF0YS9mYWNlcy1jb25maWcueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvanNmaW5qZWN0aW9uL21ldGFkYXRhL2ZhY2VzLWNvbmZpZy54bWwKaW5kZXggOTVlZTVjNC4uZDcwZWNkOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvanNmaW5qZWN0aW9uL21ldGFkYXRhL2ZhY2VzLWNvbmZpZy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvanNmaW5qZWN0aW9uL21ldGFkYXRhL2ZhY2VzLWNvbmZpZy54bWwKQEAgLTI3LDUgKzI3LDUgQEAKICAgICA8bWFuYWdlZC1iZWFuLWNsYXNzPmpzZmluamVjdGlvbi5UZXN0QmVhbjwvbWFuYWdlZC1iZWFuLWNsYXNzPgogICAgIDxtYW5hZ2VkLWJlYW4tc2NvcGU+cmVxdWVzdDwvbWFuYWdlZC1iZWFuLXNjb3BlPgogICA8L21hbmFnZWQtYmVhbj4KLSAgCisKIDwvZmFjZXMtY29uZmlnPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvanNmaW5qZWN0aW9uL3NyYy9qYXZhL0ZpbHRlclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvd2ViL2pzZmluamVjdGlvbi9zcmMvamF2YS9GaWx0ZXJUZXN0LmphdmEKaW5kZXggODk4MjQwYS4uMGU4MDEyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvanNmaW5qZWN0aW9uL3NyYy9qYXZhL0ZpbHRlclRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3dlYi9qc2ZpbmplY3Rpb24vc3JjL2phdmEvRmlsdGVyVGVzdC5qYXZhCkBAIC0yMywxNSArMjMsMTUgQEAKIGltcG9ydCBqYXZheC5uYW1pbmcuKjsKIAogcHVibGljIGNsYXNzIEZpbHRlclRlc3QgaW1wbGVtZW50cyBGaWx0ZXJ7Ci0gICAgCisKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7CiAgICAgcHJpdmF0ZSBAUmVzb3VyY2UobmFtZT0iamRiYy9fX2RlZmF1bHQiKSBEYXRhU291cmNlIGRzOwogLy8gICAgcHJpdmF0ZSBEYXRhU291cmNlIGRzOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmRlc3Ryb3ldIik7Ci0gICAgfSAgICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIEZpbHRlckNoYWluIGZpbHRlckNoYWluKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuZG9GaWx0ZXJdIik7CiAKQEAgLTU4LDEzICs1OCwxMyBAQAogCiAgICAgICAgICgoSHR0cFNlcnZsZXRSZXF1ZXN0KXJlcXVlc3QpLmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsIG1zZyk7CiAgICAgICAgIGZpbHRlckNoYWluLmRvRmlsdGVyKHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICAgICAgCi0gICAgfSAgICAKLSAgICAKLSAgICAKKworICAgIH0KKworCiAgICAgcHVibGljIHZvaWQgaW5pdChqYWthcnRhLnNlcnZsZXQuRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmluaXRdIik7CiAgICAgICAgIGNvbnRleHQgPSBmaWx0ZXJDb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvd2ViL2pzZmluamVjdGlvbi9zcmMvdGVzdC9KU0ZJbmplY3Rpb25UZXN0TkcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvd2ViL2pzZmluamVjdGlvbi9zcmMvdGVzdC9KU0ZJbmplY3Rpb25UZXN0TkcuamF2YQppbmRleCA0MDI0ZTM3Li40MjBiNWQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3dlYi9qc2ZpbmplY3Rpb24vc3JjL3Rlc3QvSlNGSW5qZWN0aW9uVGVzdE5HLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvanNmaW5qZWN0aW9uL3NyYy90ZXN0L0pTRkluamVjdGlvblRlc3RORy5qYXZhCkBAIC0zNCwxMyArMzQsMTMgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPQogICAgICAgICAic2ltcGxlLXdlYmFwcC1qc2YtaW5qZWN0aW9uIjsKLSAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgc3RyQ29udGV4dFJvb3Q9ImpzZmluamVjdGlvbiI7CiAKICAgICBzdGF0aWMgU3RyaW5nIHJlc3VsdCA9ICIiOwogICAgIFN0cmluZyBob3N0PVN5c3RlbS5nZXRQcm9wZXJ0eSgiaHR0cC5ob3N0Iik7CiAgICAgU3RyaW5nIHBvcnQ9U3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKTsKLSAgICAgICAgICAgCisKICAgICAvKgogICAgICAqSWYgdHdvIGFzc2VydHMgYXJlIG1lbnRpb25lZCBpbiBvbmUgbWV0aG9kLCB0aGVuIGxhc3QgYXNzZXJ0IGlzIHRha2VuIGluCiAgICAgICp0byBhY2NvdW50LgpAQCAtNTEsNyArNTEsNyBAQAogICAgIC8vQFBhcmFtZXRlcnMoeyAiaG9zdCIsICJwb3J0IiwgImNvbnRleHRyb290IiB9KQogICAgIEBUZXN0KGdyb3VwcyA9eyAicHVsc2UifSApIC8vIHRlc3QgbWV0aG9kCiAgICAgcHVibGljIHZvaWQgaW5qZWN0ZWRWYWx1ZXNUZXN0UGFnZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgdHJ5IHsKIAogICAgICAgICBTdHJpbmcgZXJyb3JUZXh0ID0gIiI7CkBAIC03Nyw4ICs3Nyw4IEBACiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGxpbmUyID0gbnVsbDsKICAgICAgICAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7Ci0JU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0gIkluamVjdGVkIGVudHJ5IjsKLQlTdHJpbmcgRElWSURFUiA9ICI9PT0iOworICAgIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRSA9ICJJbmplY3RlZCBlbnRyeSI7CisgICAgU3RyaW5nIERJVklERVIgPSAiPT09IjsKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgIC8vZWNobyAobGluZSk7CiAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZihFWFBFQ1RFRF9SRVNQT05TRSkhPSAtMSkgewpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgICAgU3RyaW5nIGluamVjdGVkTnVtYmVyID0gaW5qZWN0aW9uMkFycmF5WzFdLnRyaW0oKTsKICAgICAgICAgICBlY2hvKCJpbmplY3RlZE51bWJlciA9ICIgKyBpbmplY3RlZE51bWJlcik7CiAgICAgICAgICAgaW50IG51bSA9IEludGVnZXIucGFyc2VJbnQoaW5qZWN0ZWROdW1iZXIpOwotICAKKwogICAgICAgICAgIGlmICggbnVtIDwgMCApIHsKICAgICAgICAgICAgIGVjaG8oIkVSUk9SOiBpbmplY3Rpb24gMiBpcyBsZXNzIHRoYW4gemVyby4iKTsKICAgICAgICAgICAgIGVycm9yVGV4dCA9IGVycm9yVGV4dCArICJFUlJPUjogaW5qZWN0aW9uIDIgaXMgbGVzcyB0aGFuIHplcm8iOwpAQCAtMTE2LDcgKzExNiw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHRlc3RQYXNzLCB0cnVlLCBlcnJvclRleHQpOwotICAgICAgICAKKwogICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgZWNobygiRVJST1I6IGNhdWdodCBleGNlcHRpb24hIik7CiAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3dlYi9zdHJ1dHNiYXNpYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3dlYi9zdHJ1dHNiYXNpYy9idWlsZC54bWwKaW5kZXggZjcxNjM0ZS4uN2FkNGIzZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvc3RydXRzYmFzaWMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvd2ViL3N0cnV0c2Jhc2ljL2J1aWxkLnhtbApAQCAtMTksMTQgKzE5LDE0IEBACiAKIDxwcm9qZWN0IG5hbWU9InN0cnV0cy1qc3AiIGRlZmF1bHQ9ImRlZmF1bHQiIGJhc2VkaXI9Ii4iPgogICAgIDxwcm9wZXJ0eSBmaWxlPSJidWlsZC5wcm9wZXJ0aWVzIi8+Ci0gICAgCisKICAgICA8cHJvcGVydHkgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LWNvbmZpZy5wcm9wZXJ0aWVzIi8+Ci0gICAgCi0gICAgCisKKwogICAgIDxkZXNjcmlwdGlvbj5CdWlsZHMsIHRlc3RzLCBhbmQgcnVucyB0aGUgcHJvamVjdCBIZWxsbyBKU1AgQXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgotICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4gICAKKyAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC8ke2RlcGxveS5wbGF0Zm9ybX0tdGFyZ2V0cy54bWwiLz4KLSAgICAKKwogICAgIDxkZXNjcmlwdGlvbj5CdWlsZHMsIHRlc3RzLCBhbmQgcnVucyB0aGUgcHJvamVjdCBIZWxsbyBKU1AgQXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICAgIDwhLS0gPGltcG9ydCBmaWxlPSJuYnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4tLT4KIApAQCAtMzUsMjEgKzM1LDIxIEBACiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhZGQuc3RydXRzLmphciIgdmFsdWU9InRydWUiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1pbXBsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXBsb3llZC5hcHAiIHZhbHVlPSIke3dhci5maWxlfS53YXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQgIG5hbWU9InJ1bnRlc3QiPiAKKworICAgIDx0YXJnZXQgIG5hbWU9InJ1bnRlc3QiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bnRlc3QtaW1wbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0bmcudGVzdC5uYW1lIiB2YWx1ZT0iJHt0ZXN0bmcudGVzdC5uYW1lfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0idGVzdG5nLnRlc3RjbGllbnQiIHZhbHVlPSJTdHJ1dHNXZWJUZXN0TkciLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgICAgICAKKwogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktJHtkZXBsb3kucGxhdGZvcm19LWltcGwiLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvd2ViL3N0cnV0c2Jhc2ljL21ldGFkYXRhL3N0cnV0cy1jb25maWcueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvc3RydXRzYmFzaWMvbWV0YWRhdGEvc3RydXRzLWNvbmZpZy54bWwKaW5kZXggYWZmZGVkMS4uMDQzMTgyOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvc3RydXRzYmFzaWMvbWV0YWRhdGEvc3RydXRzLWNvbmZpZy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvc3RydXRzYmFzaWMvbWV0YWRhdGEvc3RydXRzLWNvbmZpZy54bWwKQEAgLTI0LDExICsyNCwxMSBAQAogCiA8c3RydXRzLWNvbmZpZz4KICAgICA8Zm9ybS1iZWFucz4KLSAgICAKKwogICAgIDwvZm9ybS1iZWFucz4KLSAgICAKKwogICAgIDxnbG9iYWwtZXhjZXB0aW9ucz4KLSAgICAKKwogICAgIDwvZ2xvYmFsLWV4Y2VwdGlvbnM+CiAKICAgICA8Z2xvYmFsLWZvcndhcmRzPgpAQCAtMzgsMTEgKzM4LDExIEBACiAgICAgPGFjdGlvbi1tYXBwaW5ncz4KICAgICAgICAgPGFjdGlvbiBwYXRoPSIvV2VsY29tZSIgZm9yd2FyZD0iL3dlbGNvbWVTdHJ1dHMuanNwIi8+CiAgICAgPC9hY3Rpb24tbWFwcGluZ3M+Ci0gICAgCisKICAgICA8Y29udHJvbGxlciBwcm9jZXNzb3JDbGFzcz0ib3JnLmFwYWNoZS5zdHJ1dHMudGlsZXMuVGlsZXNSZXF1ZXN0UHJvY2Vzc29yIi8+CiAKLSAgICA8bWVzc2FnZS1yZXNvdXJjZXMgcGFyYW1ldGVyPSJBcHBsaWNhdGlvblJlc291cmNlIi8+ICAgIAotICAgIAorICAgIDxtZXNzYWdlLXJlc291cmNlcyBwYXJhbWV0ZXI9IkFwcGxpY2F0aW9uUmVzb3VyY2UiLz4KKwogICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PSBUaWxlcyBwbHVnaW4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPgogICAgIDwhLS0KICAgICBUaGlzIHBsdWdpbiBpbml0aWFsaXplIFRpbGVzIGRlZmluaXRpb24gZmFjdG9yeS4gVGhpcyBsYXRlciBjYW4gdGFrZXMgc29tZQpAQCAtNzEsMTUgKzcxLDE1IEBACiAgICAgUGF0aHMgZm91bmQgaW4gVGlsZXMgZGVmaW5pdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBtYWluIGNvbnRleHQuCiAgICAgLS0+CiAgICAgPHBsdWctaW4gY2xhc3NOYW1lPSJvcmcuYXBhY2hlLnN0cnV0cy50aWxlcy5UaWxlc1BsdWdpbiIgPgotICAgICAgICA8c2V0LXByb3BlcnR5IHByb3BlcnR5PSJkZWZpbml0aW9ucy1jb25maWciIHZhbHVlPSIvV0VCLUlORi90aWxlcy1kZWZzLnhtbCIgLz4gICAgICAKKyAgICAgICAgPHNldC1wcm9wZXJ0eSBwcm9wZXJ0eT0iZGVmaW5pdGlvbnMtY29uZmlnIiB2YWx1ZT0iL1dFQi1JTkYvdGlsZXMtZGVmcy54bWwiIC8+CiAgICAgICAgIDxzZXQtcHJvcGVydHkgcHJvcGVydHk9Im1vZHVsZUF3YXJlIiB2YWx1ZT0idHJ1ZSIgLz4KICAgICA8L3BsdWctaW4+Ci0gICAgCisKICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT0gVmFsaWRhdG9yIHBsdWdpbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgICAgPHBsdWctaW4gY2xhc3NOYW1lPSJvcmcuYXBhY2hlLnN0cnV0cy52YWxpZGF0b3IuVmFsaWRhdG9yUGx1Z0luIj4KICAgICAgICAgPHNldC1wcm9wZXJ0eQogICAgICAgICAgICAgcHJvcGVydHk9InBhdGhuYW1lcyIKICAgICAgICAgICAgIHZhbHVlPSIvV0VCLUlORi92YWxpZGF0b3ItcnVsZXMueG1sLC9XRUItSU5GL3ZhbGlkYXRpb24ueG1sIi8+CiAgICAgPC9wbHVnLWluPgotICAKKwogPC9zdHJ1dHMtY29uZmlnPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvc3RydXRzYmFzaWMvbWV0YWRhdGEvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9jb21tdW5pdHkvd2ViL3N0cnV0c2Jhc2ljL21ldGFkYXRhL3dlYi54bWwKaW5kZXggYTdhOTdhZi4uNThlMzcyNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvc3RydXRzYmFzaWMvbWV0YWRhdGEvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3dlYi9zdHJ1dHNiYXNpYy9tZXRhZGF0YS93ZWIueG1sCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIDwvc2Vzc2lvbi10aW1lb3V0PgogICAgIDwvc2Vzc2lvbi1jb25maWc+CiAgICAgPHdlbGNvbWUtZmlsZS1saXN0PgotCTx3ZWxjb21lLWZpbGU+CisgICAgPHdlbGNvbWUtZmlsZT4KICAgICAgICAgICAgIGluZGV4LmpzcAogICAgICAgICA8L3dlbGNvbWUtZmlsZT4KICAgICA8L3dlbGNvbWUtZmlsZS1saXN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2NvbW11bml0eS93ZWIvc3RydXRzYmFzaWMvc3JjL3Rlc3QvU3RydXRzV2ViVGVzdE5HLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3dlYi9zdHJ1dHNiYXNpYy9zcmMvdGVzdC9TdHJ1dHNXZWJUZXN0TkcuamF2YQppbmRleCAwNzhmNzI5Li5kOTg1NDA2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3dlYi9zdHJ1dHNiYXNpYy9zcmMvdGVzdC9TdHJ1dHNXZWJUZXN0TkcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvY29tbXVuaXR5L3dlYi9zdHJ1dHNiYXNpYy9zcmMvdGVzdC9TdHJ1dHNXZWJUZXN0TkcuamF2YQpAQCAtMzQsNyArMzQsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0KICAgICAgICAgIkpTUCBQYWdlIFRlc3QiOwotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgc3RyQ29udGV4dFJvb3Q9InN0cnV0c2Jhc2ljIjsKIAogICAgIHN0YXRpYyBTdHJpbmcgcmVzdWx0ID0gIiI7CkBAIC00Miw3ICs0Miw3IEBACiAgICAgU3RyaW5nIG1fcG9ydD0iIjsKICAgICBTdHJpbmcgaG9zdD1TeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAuaG9zdCIpOwogICAgIFN0cmluZyBwb3J0PVN5c3RlbS5nZXRQcm9wZXJ0eSgiaHR0cC5wb3J0Iik7Ci0gICAgCisKICAgICAvL0BQYXJhbWV0ZXJzKHsiaG9zdCIsInBvcnQifSkKICAgICBAQmVmb3JlTWV0aG9kCiAgICAgLy9wdWJsaWMgdm9pZCBiZWZvcmVUZXN0KFN0cmluZyBodHRwSG9zdCxTdHJpbmcgaHR0cFBvcnQpewpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhvc3QgaXMtLT4iK21faG9zdCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUG9ydCBpcy0tPiIrbV9wb3J0KTsKICAgICB9Ci0gICAgICAgICAgICAKKwogICAgIC8qCiAgICAgICpJZiB0d28gYXNzZXJ0cyBhcmUgbWVudGlvbmVkIGluIG9uZSBtZXRob2QsIHRoZW4gbGFzdCBhc3NlcnQgaXMgdGFrZW4gaW4KICAgICAgKnRvIGFjY291bnQuCkBAIC02Myw5ICs2Myw5IEBACiAgICAgQFRlc3QoZ3JvdXBzID17ICJwdWxzZSJ9ICkgLy8gdGVzdCBtZXRob2QKICAgICAvL3B1YmxpYyB2b2lkIHdlYnRlc3QoU3RyaW5nIGhvc3QsIFN0cmluZyBwb3J0LCBTdHJpbmcgY29udGV4dHJvb3QpIHRocm93cyBFeGNlcHRpb257CiAgICAgcHVibGljIHZvaWQgc3RydXRzQXBwRGVwbG95ZWR0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgdHJ5ewotICAgICAgICAgCisKIAogICAgICAgICBTdHJpbmcgdGVzdHVybCA9ICJodHRwOi8vIiArIG1faG9zdCAgKyAiOiIgKyBtX3BvcnQgKyAiLyIrIHN0ckNvbnRleHRSb290ICsgIi9pbmRleC5qc3AiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVSTCBpczogIit0ZXN0dXJsKTsKQEAgLTgwLDMxICs4MCwzMSBAQAogCiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKICAgICAgICAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7Ci0gICAgICAgIFN0cmluZyB0ZXN0TGluZSA9IG51bGw7ICAgICAgICAKKyAgICAgICAgU3RyaW5nIHRlc3RMaW5lID0gbnVsbDsKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTdHJ1dHMgV2VsY29tZSBQYWdlIikhPS0xKXsKICAgICAgICAgICAgICAgICByZXN1bHQ9dHJ1ZTsKICAgICAgICAgICAgICB0ZXN0TGluZSA9IGxpbmU7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0TGluZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgIH0gICAgICAgIAotICAgICAgICAgICAgICAgIAorCisgICAgICAgIH0KKwogICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHJlc3VsdCwgdHJ1ZSwiVW5leHBlY3RlZCBIVE1MIik7Ci0gICAgICAgICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KIAogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgQFRlc3QoZ3JvdXBzID17ICJwdWxzZSJ9ICkgLy8gdGVzdCBtZXRob2QKICAgICBwdWJsaWMgdm9pZCBzdHJ1dHNCYXNpY0hUTUxUZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbnsKICAgICAgICAgIHRyeXsKLSAgICAgICAgIAorCiAKICAgICAgICAgU3RyaW5nIHRlc3R1cmwgPSAiaHR0cDovLyIgKyBtX2hvc3QgICsgIjoiICsgbV9wb3J0ICsgIi8iKyBzdHJDb250ZXh0Um9vdCArICIvV2VsY29tZS5kbyI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVVJMIGlzOiAiK3Rlc3R1cmwpOwpAQCAtMTE5LDI0ICsxMTksMjQgQEAKIAogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CiAgICAgICAgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOwotICAgICAgICBTdHJpbmcgdGVzdExpbmUgPSBudWxsOyAgICAgICAgCisgICAgICAgIFN0cmluZyB0ZXN0TGluZSA9IG51bGw7CiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU3RydXRzIEFwcGxpY2F0aW9ucyBpbiBOZXRiZWFucyEiKSE9LTEpewogICAgICAgICAgICAgICAgIHJlc3VsdD10cnVlOwogICAgICAgICAgICAgIHRlc3RMaW5lID0gbGluZTsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3RMaW5lKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgfSAgICAgICAgCi0gICAgICAgICAgICAgICAgCisKKyAgICAgICAgfQorCiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVzdWx0LCB0cnVlLCJVbmV4cGVjdGVkIEhUTUwiKTsKLSAgICAgICAgICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBlY2hvKFN0cmluZyBtc2cpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9jdHNfc21va2UvcnVuX3Rlc3Quc2ggYi9hcHBzZXJ2ZXIvdGVzdHMvY3RzX3Ntb2tlL3J1bl90ZXN0LnNoCmluZGV4IDU3NjBjZTEuLjI5ZjM0ZTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9jdHNfc21va2UvcnVuX3Rlc3Quc2gKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2N0c19zbW9rZS9ydW5fdGVzdC5zaApAQCAtMjY2LDcgKzI2Niw3IEBACiAgICAgcm0gJHtXT1JLU1BBQ0V9L3NlcnZsZXR0Y2suemlwID4gL2Rldi9udWxsIHx8IHRydWUKICAgICBybSAtcmYgJHtXT1JLU1BBQ0V9L2phdmFlZS1zbW9rZSA+IC9kZXYvbnVsbCB8fCB0cnVlCiAgICAgcm0gJHtXT1JLU1BBQ0V9L2phdmFlZS1zbW9rZS03LjBfbGF0ZXN0LnppcCA+IC9kZXYvbnVsbCB8fCB0cnVlCi19IAorfQogCiBPUFQ9JHsxfQogVEVTVF9JRD0kezJ9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvY3RzcnEuc2ggYi9hcHBzZXJ2ZXIvdGVzdHMvY3RzcnEuc2gKaW5kZXggYTZiZWU4Zi4uYjMyY2UxYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2N0c3JxLnNoCisrKyBiL2FwcHNlcnZlci90ZXN0cy9jdHNycS5zaApAQCAtMzEsMjIgKzMxLDIyIEBACiAgNC4gY3RzcnEuc2ggLWIgPEdsYXNzZmlzaF9CcmFuY2g+IC1hIFstZSAiPGVtYWlsLWlkMT4gPGVtYWlsLWlkMj4gLi4iXQogICAgICAgICAgICAgICAgICAtLS0+ICBSdW4gYWxsIHRoZSBhdmFpbGFibGUgdG9wLWxldmVsIENUUyB0ZXN0IGlkZW50aWZpZXJzCiAgICAgICAgICAgICAgICAgICAgICAgIGFnYWluc3QgdGhlIHNwZWNpZmllZCBsb2NhbCBHbGFzc2Zpc2ggYnJhbmNoIGFuZCBlbWFpbAotCQkgICAgICAgdGhlIHJlc3VsdHMgdG8gdGhlIHNwZWNpZmllZCBlbWFpbC1pZHMKKyAgICAgICAgICAgICAgIHRoZSByZXN1bHRzIHRvIHRoZSBzcGVjaWZpZWQgZW1haWwtaWRzCiAgNS4gY3RzcnEuc2ggLWIgPEdsYXNzZmlzaF9CcmFuY2g+IC10ICI8dGVzdF9pZDE+IDx0ZXN0X2lkMj4gPHRlc3RfaWQzPiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLWUgImVtYWlsLWlkMSBlbWFpbC1pZDIgLi4iXQogICAgICAgICAgICAgICAgICAtLS0+ICBSdW4gdGhlIHNwZWNpZmllZCBDVFMgdGVzdCBpZGVudGlmaWVycyBhZ2FpbnN0IHRoZQogICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgbG9jYWwgR2xhc3NmaXNoIGJyYW5jaCBhbmQgZW1haWwgdGhlIHJlc3VsdHMKLQkJICAgICAgIHRvIHRoZSBzcGVjaWZpZWQgZW1haWwtaWRzLiBOb3RlIHRoYXQgZG91YmxlIHF1b3RlcyBhcmUKKyAgICAgICAgICAgICAgIHRvIHRoZSBzcGVjaWZpZWQgZW1haWwtaWRzLiBOb3RlIHRoYXQgZG91YmxlIHF1b3RlcyBhcmUKICAgICAgICAgICAgICAgICAgICAgICAgbmVjZXNzYXJ5IGlmIHByb3ZpZGluZyBtdWx0aXBsZSB0ZXN0LWlkcy4KICA2LiBjdHNycS5zaCAtYiA8R2xhc3NmaXNoX0JyYW5jaD4gLWF8LXQKLQkgICAgICAgICAgICAgICAgICAgICAtYyAiPC9uZXQvPEhvc3RfbmFtZT4vPGN0c19idW5kbGVfbG9jYXRpb24+LyouemlwIgotCQkgLS0tPiAgUnVuIHRoZSBzcGVjaWZpZWQgQ1RTIHRlc3QgaWRlbnRpZmllcnMgYWdhaW5zdCBzcGVjaWZpZWQKLQkJICAgICAgIGJyYW5jaCB1c2luZyB0aGUgbG9jYWxseSBidWlsdCBDVFMgYnVuZGxlLiBOb3RlIHRoYXQgQ1RTCi0JCSAgICAgICBidW5kbGUgbG9jYXRpb24gc2hvdWxkIGJlIG5ldHdvcmsgYWNjZXNzaWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAtYyAiPC9uZXQvPEhvc3RfbmFtZT4vPGN0c19idW5kbGVfbG9jYXRpb24+LyouemlwIgorICAgICAgICAgLS0tPiAgUnVuIHRoZSBzcGVjaWZpZWQgQ1RTIHRlc3QgaWRlbnRpZmllcnMgYWdhaW5zdCBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgIGJyYW5jaCB1c2luZyB0aGUgbG9jYWxseSBidWlsdCBDVFMgYnVuZGxlLiBOb3RlIHRoYXQgQ1RTCisgICAgICAgICAgICAgICBidW5kbGUgbG9jYXRpb24gc2hvdWxkIGJlIG5ldHdvcmsgYWNjZXNzaWJsZS4KICA3LiBjdHNycS5zaCAtdSA8Z2xhc3NmaXNoIGJpbmFyeSB1cmw+ICAtYXwtdAotCQkgLS0tPiAgRm9yIHJ1bm5pbmcgYWxsIHRlc3RzIG9yIHNwZWNpZmllZCB0ZXN0cyB3aXRoIEdsYXNzRmlzaAotCQkgICAgICAgYmluYXJ5IHByb3ZpZGVkIGluIHRoZSBodHRwIHVybC4gTm90ZSB0aGF0IC11IG9wdGlvbgotCQkgICAgICAgd29ya3Mgd2l0aCAtYSBhbmQgLXQgb3B0aW9ucyBhcyB3ZWxsLgorICAgICAgICAgLS0tPiAgRm9yIHJ1bm5pbmcgYWxsIHRlc3RzIG9yIHNwZWNpZmllZCB0ZXN0cyB3aXRoIEdsYXNzRmlzaAorICAgICAgICAgICAgICAgYmluYXJ5IHByb3ZpZGVkIGluIHRoZSBodHRwIHVybC4gTm90ZSB0aGF0IC11IG9wdGlvbgorICAgICAgICAgICAgICAgd29ya3Mgd2l0aCAtYSBhbmQgLXQgb3B0aW9ucyBhcyB3ZWxsLgogIDguIGN0c3JxLnNoIFstaF0tLS0+ICBTaG93IHRoaXMgbWVzc2FnZQogRU9GCiApCkBAIC03MiwxMyArNzIsMTMgQEAKICAgICAgICAgY2FzZSAiJG9wdCIgaW4KICAgICAgICAgICAgIGIpIGdmc19icmFuY2g9JE9QVEFSRzs7CiAgICAgICAgICAgICB0KSB0ZXN0X2lkcz0oJE9QVEFSRyk7OwotCSAgICBjKSBjdHNfYnVuZGxlX2xvY2F0aW9uPSRPUFRBUkc7OworICAgICAgICBjKSBjdHNfYnVuZGxlX2xvY2F0aW9uPSRPUFRBUkc7OwogICAgICAgICAgICAgYSkgdGVzdF9pZHM9KGBsaXN0X3RvcF9sZXZlbF90ZXN0X2lkc2ApOzsKICAgICAgICAgICAgIGwpIHByaW50X3Rlc3RfaWRzICIke3ZhbGlkX3Rlc3RfaWRzfSI7OwogICAgICAgICAgICAgcykgcHJpbnRfdGVzdF9pZHMgIiQobGlzdF90b3BfbGV2ZWxfdGVzdF9pZHMpIjs7CiAgICAgICAgICAgICBpKSBwcmludF90ZXN0X2lkcyAiJChsaXN0X2lubmVyX2xldmVsX3Rlc3RfaWRzICRPUFRBUkcpIjs7CiAgICAgICAgICAgICBlKSBlbWFpbF9pZHM9JE9QVEFSRzs7Ci0JICAgIHUpIGdmc191cmw9JE9QVEFSRzs7CisgICAgICAgIHUpIGdmc191cmw9JE9QVEFSRzs7CiAgICAgICAgICAgICBoKSBlY2hvIC1lICIke1VTQUdFfSI7IGV4aXQgMDs7CiAgICAgICAgICAgIFw/KSBlY2hvICJJbnZhbGlkIG9wdGlvbiAtJE9QVEFSRyBpcyBzcGVjaWZpZWQiOyBleGl0IDE7OwogICAgICAgICAgICAgOikgY2FzZSAiJE9QVEFSRyIgaW4KQEAgLTk4LDEzICs5OCwxMyBAQAogICAgIHZhbGlkYXRlX2dpdmVuX3Rlc3RfaWRzICR7dGVzdF9pZHNbQF19CiAKICAgICBmb3JrX29yaWdpbj1gZ2l0IGNvbmZpZyAtLWdldCByZW1vdGUub3JpZ2luLnVybGAKLSAgICB0ZXN0X2lkc19lbmNvZGVkPWBlY2hvICR7dGVzdF9pZHNbQF19IHwgdHIgJyAnICcrJ2AgICAgCisgICAgdGVzdF9pZHNfZW5jb2RlZD1gZWNobyAke3Rlc3RfaWRzW0BdfSB8IHRyICcgJyAnKydgCiAgICAgZW1haWxfaWRzX2VuY29kZWQ9YGVjaG8gJHtlbWFpbF9pZHN9IHwgdHIgJyAnICcrJ2AKICAgICAjIEdlbmVyYXRlIGEgdW5pcXVlIGlkIGZvciB0aGUgam9iIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgaWRlbnRpZnlpbmcgdGhlIGpvYiBpZCBsYXRlcgotCXVuaXF1ZV9pZD0kUkFORE9NCisgICAgdW5pcXVlX2lkPSRSQU5ET00KIAogICAgIHBhcmFtcz0iQlJBTkNIPSR7Z2ZzX2JyYW5jaH0mVEVTVF9JRFM9JHt0ZXN0X2lkc19lbmNvZGVkfSZGT1JLX09SSUdJTj0ke2Zvcmtfb3JpZ2lufSZVTklRVUVfSUQ9JHt1bmlxdWVfaWR9JkVNQUlMX0lEUz0ke2VtYWlsX2lkc19lbmNvZGVkfSZDVFNfQlVORExFX0xPQ0FUSU9OPSR7Y3RzX2J1bmRsZV9sb2NhdGlvbn0mR0xBU1NGSVNIX1VSTD0ke2dmc191cmx9IgotICAgIGxhc3RfYnVpbGQ9YGdldF9sYXN0X2J1aWxkX251bWJlcmAgICAgICAgIAorICAgIGxhc3RfYnVpbGQ9YGdldF9sYXN0X2J1aWxkX251bWJlcmAKIAogICAgICMgVHJpZ2dlciB0aGUgYnVpbGQKICAgICBjdXJsIC1nIC1YIFBPU1QgIiR7Q1RTX1JFTU9URV9RVUVVRV9VUkx9L2J1aWxkV2l0aFBhcmFtZXRlcnM/JHtwYXJhbXN9JmRlbGF5PTBzZWMiIDI+IC9kZXYvbnVsbApAQCAtMTYwLDcgKzE2MCw3IEBACiAgICAgZm9yIHZhbGlkX3Rlc3RfaWQgaW4gJHt2YWxpZF90ZXN0X2lkc1tAXX07IGRvCiAgICAgICAgIFtbICIkZ2l2ZW5fdGVzdF9pZCIgPSAiJHZhbGlkX3Rlc3RfaWQiIF1dICYmICB7IGVjaG8gdHJ1ZTsgcmV0dXJuIDA7IH0KICAgICBkb25lCi0gICAgZWNobyBmYWxzZSAKKyAgICBlY2hvIGZhbHNlCiB9CiAKICMgRmluZCB0aGUgam9iIGlkIHVzaW5nIHRoZSB1bmlxdWUgaWQgdGhhdCBpcyBnZW5lcmF0ZWQgd2hpbGUgc3VibWl0dGluZyB0aGUgam9iCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvYmFzaWMvbGlmZWN5Y2xlL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvYmFzaWMvbGlmZWN5Y2xlL3BvbS54bWwKaW5kZXggNGU3NGMxOS4uZGY2ODY1NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2Jhc2ljL2xpZmVjeWNsZS9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9iYXNpYy9saWZlY3ljbGUvcG9tLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXN1cmVmaXJlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjQuMjwvdmVyc2lvbj4KICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPGZvcmtDb3VudD4xPC9mb3JrQ291bnQ+IAorICAgICAgICAgICAgICAgICAgICA8Zm9ya0NvdW50PjE8L2ZvcmtDb3VudD4KICAgICAgICAgICAgICAgICAgICAgPHJldXNlRm9ya3M+ZmFsc2U8L3JldXNlRm9ya3M+CiAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgogICAgICAgICAgICAgPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvYmFzaWMvbGlmZWN5Y2xlL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9iYXNpYy9saWZlY3ljbGUvTGlmZUN5Y2xlVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2Jhc2ljL2xpZmVjeWNsZS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvYmFzaWMvbGlmZWN5Y2xlL0xpZmVDeWNsZVRlc3QuamF2YQppbmRleCA1NjgyNDFmLi5jZmRkMDc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvYmFzaWMvbGlmZWN5Y2xlL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9iYXNpYy9saWZlY3ljbGUvTGlmZUN5Y2xlVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9iYXNpYy9saWZlY3ljbGUvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2Jhc2ljL2xpZmVjeWNsZS9MaWZlQ3ljbGVUZXN0LmphdmEKQEAgLTQzLDEyICs0MywxMiBAQAogICAgICAgICBsb2dnZXIuaW5mbygiSW5zdGFuY2UxIGNyZWF0ZWQiICsgaW5zdGFuY2UxKTsKICAgICAgICAgaW5zdGFuY2UxLnN0YXJ0KCk7CiAgICAgICAgIGxvZ2dlci5pbmZvKCJJbnN0YW5jZTEgc3RhcnRlZCAjMSIpOwotCXNsZWVwKCk7CisgICAgc2xlZXAoKTsKICAgICAgICAgaW5zdGFuY2UxLnN0b3AoKTsKICAgICAgICAgbG9nZ2VyLmluZm8oIkluc3RhbmNlMSBzdG9wcGVkICMxIik7CiAgICAgICAgIGluc3RhbmNlMS5zdGFydCgpOwogICAgICAgICBsb2dnZXIuaW5mbygiSW5zdGFuY2UxIHN0YXJ0ZWQgIzIiKTsKLQlzbGVlcCgpOworICAgIHNsZWVwKCk7CiAgICAgICAgIGluc3RhbmNlMS5zdG9wKCk7CiAgICAgICAgIGxvZ2dlci5pbmZvKCJJbnN0YW5jZTEgc3RvcHBlZCAjMiIpOwogICAgICAgICBpbnN0YW5jZTEuZGlzcG9zZSgpOwpAQCAtNjIsMTIgKzYyLDEyIEBACiAgICAgICAgIGxvZ2dlci5pbmZvKCJpbnN0YW5jZTIgY3JlYXRlZCIgKyBpbnN0YW5jZTIpOwogICAgICAgICBpbnN0YW5jZTIuc3RhcnQoKTsKICAgICAgICAgbG9nZ2VyLmluZm8oIkluc3RhbmNlMiBzdGFydGVkICMxIik7Ci0Jc2xlZXAoKTsKKyAgICBzbGVlcCgpOwogICAgICAgICBpbnN0YW5jZTIuc3RvcCgpOwogICAgICAgICBsb2dnZXIuaW5mbygiSW5zdGFuY2UyIHN0b3BwZWQgIzEiKTsKICAgICAgICAgaW5zdGFuY2UyLnN0YXJ0KCk7CiAgICAgICAgIGxvZ2dlci5pbmZvKCJJbnN0YW5jZTIgc3RhcnRlZCAjMiIpOwotCXNsZWVwKCk7CisgICAgc2xlZXAoKTsKICAgICAgICAgaW5zdGFuY2UyLnN0b3AoKTsKICAgICAgICAgbG9nZ2VyLmluZm8oIkluc3RhbmNlMiBzdG9wcGVkICMyIik7CiAgICAgICAgIGluc3RhbmNlMi5kaXNwb3NlKCk7CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgc2xlZXAoKSB7Ci0JdHJ5IHsKLQkgIFRocmVhZC5zbGVlcCgxMDAwKTsKLQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewotCX0KKyAgICB0cnkgeworICAgICAgVGhyZWFkLnNsZWVwKDEwMDApOworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgfQogICAgIH0KICAgICAvLyB0aHJvd3MgZXhjZXB0aW9uIGlmIHRoZSB0ZW1wIGRpciBpcyBub3QgY2xlYW5lZCBvdXQuCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9iYXNpYy9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2Jhc2ljL3BvbS54bWwKaW5kZXggODA3YTgzYy4uOTAzYzhhMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2Jhc2ljL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2Jhc2ljL3BvbS54bWwKQEAgLTI2LDYgKzI2LDYgQEAKICAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgogICAgIDxuYW1lPkJhc2ljIHRlc3RzIGZvciB0ZXN0aW5nIG9yZy5nbGFzc2Zpc2guZW1iZWRkYWJsZSBBUElzPC9uYW1lPgogICAgIDxtb2R1bGVzPgotICAgIAk8bW9kdWxlPmxpZmVjeWNsZTwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmxpZmVjeWNsZTwvbW9kdWxlPgogICAgIDwvbW9kdWxlcz4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9jZGlfYmFzaWMvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9jZGlfYmFzaWMvcG9tLnhtbAppbmRleCA1MGVjMjY1Li40ZGRhNWNlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvY2RpX2Jhc2ljL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2NkaV9iYXNpYy9wb20ueG1sCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc3VyZWZpcmUtcGx1Z2luPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuNC4yPC92ZXJzaW9uPgogICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8Zm9ya0NvdW50PjE8L2ZvcmtDb3VudD4gCisgICAgICAgICAgICAgICAgICAgIDxmb3JrQ291bnQ+MTwvZm9ya0NvdW50PgogICAgICAgICAgICAgICAgICAgICA8cmV1c2VGb3Jrcz5mYWxzZTwvcmV1c2VGb3Jrcz4KICAgICAgICAgICAgICAgICAgICAgPHVzZVN5c3RlbUNsYXNzTG9hZGVyPmZhbHNlPC91c2VTeXN0ZW1DbGFzc0xvYWRlcj4KICAgICAgICAgICAgICAgICAgICAgPHVzZU1hbmlmZXN0T25seUphcj5mYWxzZTwvdXNlTWFuaWZlc3RPbmx5SmFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2NkaV9iYXNpYy9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvY2RpX2Jhc2ljL0Jhc2ljQ0RJVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9jZGlfYmFzaWMvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2NkaV9iYXNpYy9CYXNpY0NESVRlc3RTZXJ2bGV0LmphdmEKaW5kZXggMDlkYTVjZS4uOGZmZTliOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2NkaV9iYXNpYy9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvY2RpX2Jhc2ljL0Jhc2ljQ0RJVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvY2RpX2Jhc2ljL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9jZGlfYmFzaWMvQmFzaWNDRElUZXN0U2VydmxldC5qYXZhCkBAIC0zOSwxNSArMzksMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIGh0dHBTZXJ2bGV0UmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IGh0dHBTZXJ2bGV0UmVzcG9uc2UuZ2V0V3JpdGVyKCk7CiAgICAgICAgIG91dC5wcmludGxuKCJIaSBmcm9tIEJhc2ljQ0RJVGVzdFNlcnZsZXQiKTsKLQlpZih0YiA9PSBudWxsKSB7Ci0JICBvdXQucHJpbnRsbigiVGVzdEJlYW4gbm90IGluamVjdGVkLiIpOwotCX0gZWxzZSBpZih0cnNiID09IG51bGwpIHsKLQkgIG91dC5wcmludGxuKCJUZXN0UmVxdWVzdFNjb3BlQmVhbiBub3QgaW5qZWN0ZWQuIik7Ci0JfSBlbHNlIHsKLQkgIG91dC5wcmludGxuKCJUZXN0QmVhbiBpbmplY3RlZC4gWyIgKyB0YiArICJdIik7Ci0JICBvdXQucHJpbnRsbigiVGVzdFJlcXVlc3RTY29wZUJlYW4gaW5qZWN0ZWQuIFsgIiArIHRyc2IgKyAiXSIpOwotCSAgb3V0LnByaW50bG4oIkFsbCBDREkgYmVhbnMgaGF2ZSBiZWVuIGluamVjdGVkLiIpOwotCX0KKyAgICBpZih0YiA9PSBudWxsKSB7CisgICAgICBvdXQucHJpbnRsbigiVGVzdEJlYW4gbm90IGluamVjdGVkLiIpOworICAgIH0gZWxzZSBpZih0cnNiID09IG51bGwpIHsKKyAgICAgIG91dC5wcmludGxuKCJUZXN0UmVxdWVzdFNjb3BlQmVhbiBub3QgaW5qZWN0ZWQuIik7CisgICAgfSBlbHNlIHsKKyAgICAgIG91dC5wcmludGxuKCJUZXN0QmVhbiBpbmplY3RlZC4gWyIgKyB0YiArICJdIik7CisgICAgICBvdXQucHJpbnRsbigiVGVzdFJlcXVlc3RTY29wZUJlYW4gaW5qZWN0ZWQuIFsgIiArIHRyc2IgKyAiXSIpOworICAgICAgb3V0LnByaW50bG4oIkFsbCBDREkgYmVhbnMgaGF2ZSBiZWVuIGluamVjdGVkLiIpOworICAgIH0KICAgICAgICAgb3V0LmZsdXNoKCk7CiAgICAgICAgIG91dC5jbG9zZSgpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9jZGlfYmFzaWMvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2NkaV9iYXNpYy9UZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2NkaV9iYXNpYy9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvY2RpX2Jhc2ljL1Rlc3RCZWFuLmphdmEKaW5kZXggMWQ4MTljNC4uOTVmZjY4NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2NkaV9iYXNpYy9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvY2RpX2Jhc2ljL1Rlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2NkaV9iYXNpYy9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvY2RpX2Jhc2ljL1Rlc3RCZWFuLmphdmEKQEAgLTE2LDcgKzE2LDcgQEAKIAogcGFja2FnZSBvcmcuZ2xhc3NmaXNoLnRlc3RzLmVtYmVkZGVkLmNkaV9iYXNpYzsKIAotLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuIAorLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuCiAvL1RoaXMgYmVhbiBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSBhcyBpdCBuZWVkcyB0byBiZSBwbGFjZWQgaW50byBhIFN0YXRlZnVsIEJlYW4KIHB1YmxpYyBjbGFzcyBUZXN0QmVhbgoge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9jZGlfYmFzaWMvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2NkaV9iYXNpYy9UZXN0UmVxdWVzdFNjb3BlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9jZGlfYmFzaWMvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2NkaV9iYXNpYy9UZXN0UmVxdWVzdFNjb3BlZEJlYW4uamF2YQppbmRleCAyMTFmMDdlLi4zNTUzYjFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvY2RpX2Jhc2ljL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9jZGlfYmFzaWMvVGVzdFJlcXVlc3RTY29wZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2NkaV9iYXNpYy9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvY2RpX2Jhc2ljL1Rlc3RSZXF1ZXN0U2NvcGVkQmVhbi5qYXZhCkBAIC0xNiw3ICsxNiw3IEBACiAKIHBhY2thZ2Ugb3JnLmdsYXNzZmlzaC50ZXN0cy5lbWJlZGRlZC5jZGlfYmFzaWM7CiAKLS8vU2ltcGxlIFJlcXVlc3RTY29wZWQgVGVzdEJlYW4gdG8gdGVzdCBDREkuIAorLy9TaW1wbGUgUmVxdWVzdFNjb3BlZCBUZXN0QmVhbiB0byB0ZXN0IENESS4KIC8vVGhpcyBiZWFuIGltcGxlbWVudHMgU2VyaWFsaXphYmxlIGFzIGl0IG5lZWRzIHRvIGJlIHBsYWNlZCBpbnRvIGEgU3RhdGVmdWwgQmVhbgogQGpha2FydGEuZW50ZXJwcmlzZS5jb250ZXh0LlJlcXVlc3RTY29wZWQKIHB1YmxpYyBjbGFzcyBUZXN0UmVxdWVzdFNjb3BlZEJlYW4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9jZGlfYmFzaWMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvY2RpX2Jhc2ljL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCmluZGV4IDY3ZDdiZmMuLjY0YTY5OWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9jZGlfYmFzaWMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2NkaV9iYXNpYy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbApAQCAtMTksNSArMTksNSBAQAogCiA8IURPQ1RZUEUgc3VuLXdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDguMSBTZXJ2bGV0IDIuNC8vRU4iICJodHRwOi8vd3d3LnN1bi5jb20vc29mdHdhcmUvYXBwc2VydmVyL2R0ZHMvc3VuLXdlYi1hcHBfMl80LTEuZHRkIj4KIDxzdW4td2ViLWFwcD4KLSAgPGNvbnRleHQtcm9vdD4vY2RpX2Jhc2ljPC9jb250ZXh0LXJvb3Q+IAorICA8Y29udGV4dC1yb290Pi9jZGlfYmFzaWM8L2NvbnRleHQtcm9vdD4KIDwvc3VuLXdlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvY2RpX2Jhc2ljL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvY2RpX2Jhc2ljL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKaW5kZXggYWY3MTc3OC4uNDhlZDliNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2NkaV9iYXNpYy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9jZGlfYmFzaWMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApAQCAtMTgsNiArMTgsNiBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjMuMCIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCI+Ci0gIDxkaXNwbGF5LW5hbWU+Y2RpX2Jhc2ljPC9kaXNwbGF5LW5hbWU+ICAKKyAgPGRpc3BsYXktbmFtZT5jZGlfYmFzaWM8L2Rpc3BsYXktbmFtZT4KICAgPGRpc3RyaWJ1dGFibGUvPgogPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2NkaV9lamJfanBhL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvY2RpX2VqYl9qcGEvcG9tLnhtbAppbmRleCBjMjBiMzZkLi43YzY0Y2RmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvY2RpX2VqYl9qcGEvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvY2RpX2VqYl9qcGEvcG9tLnhtbApAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXN1cmVmaXJlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjQuMjwvdmVyc2lvbj4KICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPGZvcmtDb3VudD4xPC9mb3JrQ291bnQ+IAorICAgICAgICAgICAgICAgICAgICA8Zm9ya0NvdW50PjE8L2ZvcmtDb3VudD4KICAgICAgICAgICAgICAgICAgICAgPHJldXNlRm9ya3M+ZmFsc2U8L3JldXNlRm9ya3M+CiAgICAgICAgICAgICAgICAgICAgIDx1c2VTeXN0ZW1DbGFzc0xvYWRlcj5mYWxzZTwvdXNlU3lzdGVtQ2xhc3NMb2FkZXI+CiAgICAgICAgICAgICAgICAgICAgIDx1c2VNYW5pZmVzdE9ubHlKYXI+ZmFsc2U8L3VzZU1hbmlmZXN0T25seUphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9jZGlfZWpiX2pwYS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvY2RpX2VqYl9qcGEvVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9jZGlfZWpiX2pwYS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvY2RpX2VqYl9qcGEvVGVzdEJlYW4uamF2YQppbmRleCA0NDIzZTE4Li5jNDliMTRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvY2RpX2VqYl9qcGEvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2NkaV9lamJfanBhL1Rlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2NkaV9lamJfanBhL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9jZGlfZWpiX2pwYS9UZXN0QmVhbi5qYXZhCkBAIC0xNiw3ICsxNiw3IEBACiAKIHBhY2thZ2Ugb3JnLmdsYXNzZmlzaC50ZXN0cy5lbWJlZGRlZC5jZGlfZWpiX2pwYTsKIAotLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuIAorLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuCiBpbXBvcnQgamFrYXJ0YS5lamIuU3RhdGVsZXNzOwogaW1wb3J0IGpha2FydGEucGVyc2lzdGVuY2UuRW50aXR5TWFuYWdlcjsKIGltcG9ydCBqYWthcnRhLnBlcnNpc3RlbmNlLlBlcnNpc3RlbmNlQ29udGV4dDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9jZGlfZWpiX2pwYS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvY2RpX2VqYl9qcGEvVGVzdFJlcXVlc3RTY29wZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvY2RpX2VqYl9qcGEvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2NkaV9lamJfanBhL1Rlc3RSZXF1ZXN0U2NvcGVkQmVhbi5qYXZhCmluZGV4IDA1ZTRhNDcuLjc1ZWE4MjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9jZGlfZWpiX2pwYS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvY2RpX2VqYl9qcGEvVGVzdFJlcXVlc3RTY29wZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2NkaV9lamJfanBhL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9jZGlfZWpiX2pwYS9UZXN0UmVxdWVzdFNjb3BlZEJlYW4uamF2YQpAQCAtMTYsNyArMTYsNyBAQAogCiBwYWNrYWdlIG9yZy5nbGFzc2Zpc2gudGVzdHMuZW1iZWRkZWQuY2RpX2VqYl9qcGE7CiAKLS8vU2ltcGxlIFJlcXVlc3RTY29wZWQgVGVzdEJlYW4gdG8gdGVzdCBDREkuIAorLy9TaW1wbGUgUmVxdWVzdFNjb3BlZCBUZXN0QmVhbiB0byB0ZXN0IENESS4KIC8vVGhpcyBiZWFuIGltcGxlbWVudHMgU2VyaWFsaXphYmxlIGFzIGl0IG5lZWRzIHRvIGJlIHBsYWNlZCBpbnRvIGEgU3RhdGVmdWwgQmVhbgogQGpha2FydGEuZW50ZXJwcmlzZS5jb250ZXh0LlJlcXVlc3RTY29wZWQKIHB1YmxpYyBjbGFzcyBUZXN0UmVxdWVzdFNjb3BlZEJlYW4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9jZGlfZWpiX2pwYS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9jZGlfZWpiX2pwYS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbAppbmRleCAwMTA1YTA3Li5jYTUxMzY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvY2RpX2VqYl9qcGEvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2NkaV9lamJfanBhL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCkBAIC0xOSw1ICsxOSw1IEBACiAKIDwhRE9DVFlQRSBzdW4td2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOC4xIFNlcnZsZXQgMi40Ly9FTiIgImh0dHA6Ly93d3cuc3VuLmNvbS9zb2Z0d2FyZS9hcHBzZXJ2ZXIvZHRkcy9zdW4td2ViLWFwcF8yXzQtMS5kdGQiPgogPHN1bi13ZWItYXBwPgotICA8Y29udGV4dC1yb290Pi9jZGlfZWpiX2pwYTwvY29udGV4dC1yb290PiAKKyAgPGNvbnRleHQtcm9vdD4vY2RpX2VqYl9qcGE8L2NvbnRleHQtcm9vdD4KIDwvc3VuLXdlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvY2RpX2VqYl9qcGEvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9jZGlfZWpiX2pwYS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmluZGV4IDZjMGUzMTMuLjNlYTczMzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9jZGlfZWpiX2pwYS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9jZGlfZWpiX2pwYS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCkBAIC0xOCw2ICsxOCw2IEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMy4wIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8zXzAueHNkIj4KLSAgPGRpc3BsYXktbmFtZT5jZGlfZWpiX2pwYTwvZGlzcGxheS1uYW1lPiAgCisgIDxkaXNwbGF5LW5hbWU+Y2RpX2VqYl9qcGE8L2Rpc3BsYXktbmFtZT4KICAgPGRpc3RyaWJ1dGFibGUvPgogPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2VqYi9iYXNpYy9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2VqYi9iYXNpYy9wb20ueG1sCmluZGV4IDY4NDI3ZTcuLjM0MTU1OTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9lamIvYmFzaWMvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvZWpiL2Jhc2ljL3BvbS54bWwKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICA8L2V4ZWN1dGlvbnM+CiAgICAgIDwvcGx1Z2luPgogICAgIDwvcGx1Z2lucz4KLSAgPC9idWlsZD4gICAgCisgIDwvYnVpbGQ+CiAgIDxwcm9maWxlcz4KICAgICAgICAgPHByb2ZpbGU+CiAgICAgICAgICAgICA8aWQ+cnVuLXdpdGgtdWJlci1qYXI8L2lkPgpAQCAtNzgsMTMgKzc4LDEzIEBACiAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICAgICAgPC9kZXBlbmRlbmNpZXM+CiAgICAgICAgIDwvcHJvZmlsZT4KLSAgICA8L3Byb2ZpbGVzPiAgICAKLQk8ZGVwZW5kZW5jaWVzPgorICAgIDwvcHJvZmlsZXM+CisgICAgPGRlcGVuZGVuY2llcz4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+NC4xMy4yPC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPC9kZXBlbmRlbmNpZXM+ICAgIAorICAgIDwvZGVwZW5kZW5jaWVzPgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvZWpiL2Jhc2ljL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9lamIvYmFzaWMvdGVzdC9FbWJlZGRlZFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9lamIvYmFzaWMvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2VqYi9iYXNpYy90ZXN0L0VtYmVkZGVkVGVzdC5qYXZhCmluZGV4IDFkMjFjYmYuLjNlZmE5ODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9lamIvYmFzaWMvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2VqYi9iYXNpYy90ZXN0L0VtYmVkZGVkVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9lamIvYmFzaWMvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2VqYi9iYXNpYy90ZXN0L0VtYmVkZGVkVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBFbWJlZGRlZFRlc3QgdGVzdCA9IG5ldyBFbWJlZGRlZFRlc3QoKTsKICAgICAgICAgU3lzdGVtLnNldFByb3BlcnR5KCJiYXNlZGlyIiwgU3lzdGVtLmdldFByb3BlcnR5KCkpOwotICAgICAgICB0ZXN0LnRlc3QoKTsgICAgICAgIAorICAgICAgICB0ZXN0LnRlc3QoKTsKICAgICB9CiAqLwogCkBAIC03NSw3ICs3NSw3IEBACiAKICAgICAgICAgZ2xhc3NmaXNoLnN0b3AoKTsKICAgICAgICAgZ2xhc3NmaXNoLmRpc3Bvc2UoKTsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbWJlZGRlZFRlc3QgY29tcGxldGVkLiIpOwogCiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2VqYi9lamItYXBpL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvZWpiL2VqYi1hcGkvcG9tLnhtbAppbmRleCA1YmZkMzljLi44NTM1N2IxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvZWpiL2VqYi1hcGkvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvZWpiL2VqYi1hcGkvcG9tLnhtbApAQCAtNDgsNyArNDgsNyBAQAogICAgICAgIDwvZXhlY3V0aW9ucz4KICAgICAgPC9wbHVnaW4+CiAgICAgPC9wbHVnaW5zPgotICA8L2J1aWxkPiAgICAKKyAgPC9idWlsZD4KICAgPHByb2ZpbGVzPgogICAgICAgICA8cHJvZmlsZT4KICAgICAgICAgICAgIDxpZD5ydW4td2l0aC11YmVyLWphcjwvaWQ+CkBAIC04MywxMiArODMsMTIgQEAKICAgICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgogICAgICAgICA8L3Byb2ZpbGU+CiAgICAgPC9wcm9maWxlcz4KLQk8ZGVwZW5kZW5jaWVzPgorICAgIDxkZXBlbmRlbmNpZXM+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjQuMTMuMjwvdmVyc2lvbj4KICAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgIDwvZGVwZW5kZW5jaWVzPiAgICAKKyAgICA8L2RlcGVuZGVuY2llcz4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2VqYi9lamItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9lamIvdGVzdC9FbWJlZGRlZFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9lamIvZWpiLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvZWpiL3Rlc3QvRW1iZWRkZWRUZXN0LmphdmEKaW5kZXggYTYwZTkxNi4uNzNjZjMzMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2VqYi9lamItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9lamIvdGVzdC9FbWJlZGRlZFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvZWpiL2VqYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2VqYi90ZXN0L0VtYmVkZGVkVGVzdC5qYXZhCkBAIC0zNiwxMiArMzYsMTIgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIEVtYmVkZGVkVGVzdCB0ZXN0ID0gbmV3IEVtYmVkZGVkVGVzdCgpOwogICAgICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoImJhc2VkaXIiLCBTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIuZGlyIikpOwotICAgICAgICB0ZXN0LnRlc3QoKTsgICAgICAgIAorICAgICAgICB0ZXN0LnRlc3QoKTsKICAgICB9CiAKICAgICBwdWJsaWMgRmlsZSBnZXREZXBsb3lhYmxlQXJ0aWZhY3QoKSB7CiAgICAgICAgIEZpbGUgZiA9IG5ldyBGaWxlKFN5c3RlbS5nZXRQcm9wZXJ0eSgiYmFzZWRpciIpLCAidGFyZ2V0Iik7Ci0gICAgICAgIGYgPSBuZXcgRmlsZShmLCAiY2xhc3NlcyIpOyAgICAgICAgCisgICAgICAgIGYgPSBuZXcgRmlsZShmLCAiY2xhc3NlcyIpOwogICAgICAgICByZXR1cm4gZjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9lamIvZWpiLW1haW4vcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9lamIvZWpiLW1haW4vcG9tLnhtbAppbmRleCA2YWU4ZDIxLi4xYWFkZjgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvZWpiL2VqYi1tYWluL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2VqYi9lamItbWFpbi9wb20ueG1sCkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgogICAgICAgICAgICAgICAgIDxjbGFzc2lmaWVyPnRlc3RzPC9jbGFzc2lmaWVyPgogICAgICAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgICAgICAgIAorICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CiAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CkBAIC04MSw1ICs4MSw1IEBACiAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgogICAgICAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgICA8L2RlcGVuZGVuY2llcz4gCisgICAgICAgICAgPC9kZXBlbmRlbmNpZXM+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvZWpiL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvZWpiL3BvbS54bWwKaW5kZXggNTE1ODAwMy4uMTQwZDc4NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2VqYi9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9lamIvcG9tLnhtbApAQCAtMjQsOSArMjQsOSBAQAogICAgIDxhcnRpZmFjdElkPmVqYjwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgotICAgIDxuYW1lPkVKQiByZWxhdGVkIEVtYmVkZGVkIFRlc3RzPC9uYW1lPiAgCisgICAgPG5hbWU+RUpCIHJlbGF0ZWQgRW1iZWRkZWQgVGVzdHM8L25hbWU+CiAgICAgPG1vZHVsZXM+Ci0gICAgCTxtb2R1bGU+YmFzaWM8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5iYXNpYzwvbW9kdWxlPgogICAgICAgICA8bW9kdWxlPmVqYi1hcGk8L21vZHVsZT4KICAgICAgICAgPG1vZHVsZT5yZW1vdGVlamI8L21vZHVsZT4KICAgICA8L21vZHVsZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvZWpiL3JlbW90ZWVqYi9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2VqYi9yZW1vdGVlamIvcG9tLnhtbAppbmRleCAyNDZiOTE2Li44ZTRlZTdiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvZWpiL3JlbW90ZWVqYi9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9lamIvcmVtb3RlZWpiL3BvbS54bWwKQEAgLTkwLDEzICs5MCwxMyBAQAogICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgogICAgICAgICA8L3Byb2ZpbGU+Ci0gICAgPC9wcm9maWxlcz4gICAgCi0JPGRlcGVuZGVuY2llcz4KKyAgICA8L3Byb2ZpbGVzPgorICAgIDxkZXBlbmRlbmNpZXM+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjQuMTMuMjwvdmVyc2lvbj4KICAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgIDwvZGVwZW5kZW5jaWVzPiAgICAKKyAgICA8L2RlcGVuZGVuY2llcz4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2VqYi9yZW1vdGVlamIvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2VqYi9yZW1vdGVlamIvdGVzdC9FSkJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvZWpiL3JlbW90ZWVqYi9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvZWpiL3JlbW90ZWVqYi90ZXN0L0VKQlRlc3QuamF2YQppbmRleCBmMDY3YWQzLi42MTVlMTM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvZWpiL3JlbW90ZWVqYi9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvZWpiL3JlbW90ZWVqYi90ZXN0L0VKQlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvZWpiL3JlbW90ZWVqYi9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvZWpiL3JlbW90ZWVqYi90ZXN0L0VKQlRlc3QuamF2YQpAQCAtODUsNyArODUsNyBAQAogLy8gICAgICAgIH0gZmluYWxseSB7CiAvLyAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKG9sZENMKTsKIC8vICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGdsYXNzZmlzaC5zdG9wKCk7CiAgICAgICAgIGdsYXNzZmlzaC5kaXNwb3NlKCk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9nbGFzc2Zpc2hfcmVzb3VyY2VzX3htbC9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2dsYXNzZmlzaF9yZXNvdXJjZXNfeG1sL3BvbS54bWwKaW5kZXggODdkZmFhZC4uYTk4NTlmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2dsYXNzZmlzaF9yZXNvdXJjZXNfeG1sL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2dsYXNzZmlzaF9yZXNvdXJjZXNfeG1sL3BvbS54bWwKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zdXJlZmlyZS1wbHVnaW48L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi40LjI8L3ZlcnNpb24+CiAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxmb3JrQ291bnQ+MTwvZm9ya0NvdW50PiAKKyAgICAgICAgICAgICAgICAgICAgPGZvcmtDb3VudD4xPC9mb3JrQ291bnQ+CiAgICAgICAgICAgICAgICAgICAgIDxyZXVzZUZvcmtzPmZhbHNlPC9yZXVzZUZvcmtzPgogICAgICAgICAgICAgICAgICAgICA8dXNlU3lzdGVtQ2xhc3NMb2FkZXI+ZmFsc2U8L3VzZVN5c3RlbUNsYXNzTG9hZGVyPgogICAgICAgICAgICAgICAgICAgICA8dXNlTWFuaWZlc3RPbmx5SmFyPmZhbHNlPC91c2VNYW5pZmVzdE9ubHlKYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvZ2xhc3NmaXNoX3Jlc291cmNlc194bWwvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2NkaV9lamJfanBhL1Rlc3RCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvZ2xhc3NmaXNoX3Jlc291cmNlc194bWwvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2NkaV9lamJfanBhL1Rlc3RCZWFuLmphdmEKaW5kZXggNDQyM2UxOC4uYzQ5YjE0YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2dsYXNzZmlzaF9yZXNvdXJjZXNfeG1sL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9jZGlfZWpiX2pwYS9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9nbGFzc2Zpc2hfcmVzb3VyY2VzX3htbC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvY2RpX2VqYl9qcGEvVGVzdEJlYW4uamF2YQpAQCAtMTYsNyArMTYsNyBAQAogCiBwYWNrYWdlIG9yZy5nbGFzc2Zpc2gudGVzdHMuZW1iZWRkZWQuY2RpX2VqYl9qcGE7CiAKLS8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLiAKKy8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLgogaW1wb3J0IGpha2FydGEuZWpiLlN0YXRlbGVzczsKIGltcG9ydCBqYWthcnRhLnBlcnNpc3RlbmNlLkVudGl0eU1hbmFnZXI7CiBpbXBvcnQgamFrYXJ0YS5wZXJzaXN0ZW5jZS5QZXJzaXN0ZW5jZUNvbnRleHQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvZ2xhc3NmaXNoX3Jlc291cmNlc194bWwvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2NkaV9lamJfanBhL1Rlc3RSZXF1ZXN0U2NvcGVkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2dsYXNzZmlzaF9yZXNvdXJjZXNfeG1sL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9jZGlfZWpiX2pwYS9UZXN0UmVxdWVzdFNjb3BlZEJlYW4uamF2YQppbmRleCAwNWU0YTQ3Li43NWVhODI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvZ2xhc3NmaXNoX3Jlc291cmNlc194bWwvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2NkaV9lamJfanBhL1Rlc3RSZXF1ZXN0U2NvcGVkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9nbGFzc2Zpc2hfcmVzb3VyY2VzX3htbC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvY2RpX2VqYl9qcGEvVGVzdFJlcXVlc3RTY29wZWRCZWFuLmphdmEKQEAgLTE2LDcgKzE2LDcgQEAKIAogcGFja2FnZSBvcmcuZ2xhc3NmaXNoLnRlc3RzLmVtYmVkZGVkLmNkaV9lamJfanBhOwogCi0vL1NpbXBsZSBSZXF1ZXN0U2NvcGVkIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLiAKKy8vU2ltcGxlIFJlcXVlc3RTY29wZWQgVGVzdEJlYW4gdG8gdGVzdCBDREkuCiAvL1RoaXMgYmVhbiBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSBhcyBpdCBuZWVkcyB0byBiZSBwbGFjZWQgaW50byBhIFN0YXRlZnVsIEJlYW4KIEBqYWthcnRhLmVudGVycHJpc2UuY29udGV4dC5SZXF1ZXN0U2NvcGVkCiBwdWJsaWMgY2xhc3MgVGVzdFJlcXVlc3RTY29wZWRCZWFuCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvZ2xhc3NmaXNoX3Jlc291cmNlc194bWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvZ2xhc3NmaXNoX3Jlc291cmNlc194bWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKaW5kZXggMDEwNWEwNy4uY2E1MTM2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2dsYXNzZmlzaF9yZXNvdXJjZXNfeG1sL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9nbGFzc2Zpc2hfcmVzb3VyY2VzX3htbC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbApAQCAtMTksNSArMTksNSBAQAogCiA8IURPQ1RZUEUgc3VuLXdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDguMSBTZXJ2bGV0IDIuNC8vRU4iICJodHRwOi8vd3d3LnN1bi5jb20vc29mdHdhcmUvYXBwc2VydmVyL2R0ZHMvc3VuLXdlYi1hcHBfMl80LTEuZHRkIj4KIDxzdW4td2ViLWFwcD4KLSAgPGNvbnRleHQtcm9vdD4vY2RpX2VqYl9qcGE8L2NvbnRleHQtcm9vdD4gCisgIDxjb250ZXh0LXJvb3Q+L2NkaV9lamJfanBhPC9jb250ZXh0LXJvb3Q+CiA8L3N1bi13ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2dsYXNzZmlzaF9yZXNvdXJjZXNfeG1sL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvZ2xhc3NmaXNoX3Jlc291cmNlc194bWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAppbmRleCA2YzBlMzEzLi4zZWE3MzMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvZ2xhc3NmaXNoX3Jlc291cmNlc194bWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvZ2xhc3NmaXNoX3Jlc291cmNlc194bWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApAQCAtMTgsNiArMTgsNiBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjMuMCIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCI+Ci0gIDxkaXNwbGF5LW5hbWU+Y2RpX2VqYl9qcGE8L2Rpc3BsYXktbmFtZT4gIAorICA8ZGlzcGxheS1uYW1lPmNkaV9lamJfanBhPC9kaXNwbGF5LW5hbWU+CiAgIDxkaXN0cmlidXRhYmxlLz4KIDwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9pbnBsYW50ZWQvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9pbnBsYW50ZWQvcG9tLnhtbAppbmRleCA1ZTg0Mzg3Li4xZmU5MTlmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvaW5wbGFudGVkL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2lucGxhbnRlZC9wb20ueG1sCkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXN1cmVmaXJlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KICAgICAgICAgPHZlcnNpb24+Mi40LjI8L3ZlcnNpb24+CiAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgIDxmb3JrQ291bnQ+MTwvZm9ya0NvdW50PiAKKyAgICAgICAgICA8Zm9ya0NvdW50PjE8L2ZvcmtDb3VudD4KICAgICAgICAgICA8cmV1c2VGb3Jrcz5mYWxzZTwvcmV1c2VGb3Jrcz4KICAgICAgICAgPC9jb25maWd1cmF0aW9uPgogICAgICAgPC9wbHVnaW4+CkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2gubWFpbi5leHRyYXM8L2dyb3VwSWQ+CiAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdsYXNzZmlzaC1lbWJlZGRlZC1hbGw8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgotICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICAgICAgPC9kZXBlbmRlbmNpZXM+CiAgICAgICAgIDwvcHJvZmlsZT4KICAgICAgICAgPHByb2ZpbGU+CkBAIC04OCw3ICs4OCw3IEBACiAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZT5zdGF0aWMtc2hlbGw8L3ZhbHVlPgogICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICAgICAgICA8L2FjdGl2YXRpb24+Ci0gICAgICAgICAgICA8ZGVwZW5kZW5jaWVzPiAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDxkZXBlbmRlbmNpZXM+CiAgICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2gubWFpbi5leHRyYXM8L2dyb3VwSWQ+CiAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdsYXNzZmlzaC1lbWJlZGRlZC1zdGF0aWMtc2hlbGw8L2FydGlmYWN0SWQ+CkBAIC05OSwxMyArOTksMTMgQEAKICAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgICAgICA8L2RlcGVuZGVuY2llcz4KICAgICAgICAgPC9wcm9maWxlPgotICAgIDwvcHJvZmlsZXM+ICAgIAorICAgIDwvcHJvZmlsZXM+CiAgICAgPGRlcGVuZGVuY2llcz4KLQkJPGRlcGVuZGVuY3k+Ci0JCQk8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KLQkJCTxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgotCQkJPHZlcnNpb24+NC4xMy4yPC92ZXJzaW9uPgotCQk8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuMTMuMjwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2gubWFpbi53ZWI8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD53ZWItZW1iZWQtYXBpPC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2lucGxhbnRlZC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvaW5wbGFudGVkL0V4aXN0aW5nRG9tYWluVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2lucGxhbnRlZC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvaW5wbGFudGVkL0V4aXN0aW5nRG9tYWluVGVzdC5qYXZhCmluZGV4IGJmNzkzYTAuLmU0OTkyOWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9pbnBsYW50ZWQvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2lucGxhbnRlZC9FeGlzdGluZ0RvbWFpblRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvaW5wbGFudGVkL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9pbnBsYW50ZWQvRXhpc3RpbmdEb21haW5UZXN0LmphdmEKQEAgLTcwLDUgKzcwLDUgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2h1dGRvd25TZXJ2ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgRW1iZWRkZWRTZXJ2ZXJVdGlscy5zaHV0ZG93blNlcnZlcihzZXJ2ZXIpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2lucGxhbnRlZC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvaW5wbGFudGVkL0lucGxhbnRlZFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9pbnBsYW50ZWQvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2lucGxhbnRlZC9JbnBsYW50ZWRUZXN0LmphdmEKaW5kZXggYTQ2ZDdhMi4uMjdhNGRkNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL2lucGxhbnRlZC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvaW5wbGFudGVkL0lucGxhbnRlZFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvaW5wbGFudGVkL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9pbnBsYW50ZWQvSW5wbGFudGVkVGVzdC5qYXZhCkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgIHNlcnZlci5hZGRDb250YWluZXIoYik7CiAgICAgICAgIEVtYmVkZGVkV2ViQ29udGFpbmVyIGVtYmVkZGVkID0gKEVtYmVkZGVkV2ViQ29udGFpbmVyKSBiLmNyZWF0ZShzZXJ2ZXIpOwogICAgICAgICBlbWJlZGRlZC5iaW5kKGh0dHAsICJodHRwIik7Ci0gICAgICAgIAorCiAgICAgICAgIERlcGxveUNvbW1hbmRQYXJhbWV0ZXJzIGRwID0gbmV3IERlcGxveUNvbW1hbmRQYXJhbWV0ZXJzKGYpOwogICAgICAgICBTdHJpbmcgYXBwTmFtZSA9IHNlcnZlci5nZXREZXBsb3llcigpLmRlcGxveSh3YXIsIGRwKTsKICAgICAgICAgV2ViQ2xpZW50IHdlYkNsaWVudCA9IG5ldyBXZWJDbGllbnQoKTsKQEAgLTkxLDYgKzkxLDYgQEAKIAogICAgIEBBZnRlckNsYXNzCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNodXRkb3duU2VydmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIEVtYmVkZGVkU2VydmVyVXRpbHMuc2h1dGRvd25TZXJ2ZXIoc2VydmVyKTsgICAgICAgICAgICAgICAgCisgICAgICAgIEVtYmVkZGVkU2VydmVyVXRpbHMuc2h1dGRvd25TZXJ2ZXIoc2VydmVyKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvaW5wbGFudGVkL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvSGVsbG9XZWIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9pbnBsYW50ZWQvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9IZWxsb1dlYi5qYXZhCmluZGV4IGRlOWE3NGYuLmUxNDQyMzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9pbnBsYW50ZWQvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9IZWxsb1dlYi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9pbnBsYW50ZWQvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9IZWxsb1dlYi5qYXZhCkBAIC0yOSwxNiArMjksMTYgQEAKICAgICBwdWJsaWMgSGVsbG9XZWIoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VydmxldCBXRUItSEVMTE8gaW5pdGlhbGl6ZWQiKTsKICAgICB9Ci0gICAKKwogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKIAogCiAgICAgICAgIFByaW50V3JpdGVyIHB3ID0gcmVzLmdldFdyaXRlcigpOwogICAgICAgICB0cnkgewotCQkJcHcucHJpbnRsbigiSGVsbG8gV29ybGQgISIpOwotICAJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgCWUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBwdy5wcmludGxuKCJIZWxsbyBXb3JsZCAhIik7CisgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vYXBwbGljYXRpb25EaXNwYXRjaGVyL3NyYy9tYWluL2phdmEvdGVzdC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9hcHBsaWNhdGlvbkRpc3BhdGNoZXIvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggNWRlYzE0Ny4uZGFlODg2MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9hcHBsaWNhdGlvbkRpc3BhdGNoZXIvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9hcHBsaWNhdGlvbkRpc3BhdGNoZXIvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTM0LDIzICszNCwyMyBAQAogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBzdGF0dXMgPSAiQXBwbGljYXRpb25EaXNwYXRjaGVyOjpQQVNTIjsKLSAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsKIAogICAgICAgICB0cnl7Ci0gICAgICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciByZXF1ZXN0RCA9IAorICAgICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmVxdWVzdEQgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi90ZXN0LmpzcCIpOwogCiAgICAgICAgICAgICBpZiAoIHJlcXVlc3REID09IG51bGwpewotICAgICAgICAgICAgICAgIHN0YXR1cyA9ICJBcHBsaWNhdGlvbkRpc3BhdGNoZXI6OkZBSUwiOyAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAiQXBwbGljYXRpb25EaXNwYXRjaGVyOjpGQUlMIjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuUmVxdWVzdERpc3BhdGNoZXI6ICIgKyByZXF1ZXN0RCArICJdIik7CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KXsKLSAgICAgICAgICAgICAgICBzdGF0dXMgPSAiQXBwbGljYXRpb25EaXNwYXRjaGVyOjpGQUlMIjsgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3RhdHVzID0gIkFwcGxpY2F0aW9uRGlzcGF0Y2hlcjo6RkFJTCI7CiAgICAgICAgIH0KLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzdGF0dXM6ICIgKyBzdGF0dXMpOyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzdGF0dXM6ICIgKyBzdGF0dXMpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpAQCAtNTgsNyArNTgsNyBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5kb1Bvc3RdIik7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL2FwcGxpY2F0aW9uRGlzcGF0Y2hlci9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9hcHBsaWNhdGlvbkRpc3BhdGNoZXIvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAppbmRleCA2NTVjMGNhLi4xMjU1NGYwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL2FwcGxpY2F0aW9uRGlzcGF0Y2hlci9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vYXBwbGljYXRpb25EaXNwYXRjaGVyL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTI4LDEyICsyOCwxMiBAQAogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+CiAgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MTAwMDwvbG9hZC1vbi1zdGFydHVwPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgotICAgIDwvc2VydmxldC1tYXBwaW5nPiAgICAKKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL2FwcGxpY2F0aW9uRGlzcGF0Y2hlci9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvYXBwbGljYXRpb25EaXNwYXRjaGVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vYXBwbGljYXRpb25EaXNwYXRjaGVyL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9hcHBsaWNhdGlvbkRpc3BhdGNoZXIvV2ViVGVzdC5qYXZhCmluZGV4IDYyYTQ1YTIuLjhlM2U2MmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vYXBwbGljYXRpb25EaXNwYXRjaGVyL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9hcHBsaWNhdGlvbkRpc3BhdGNoZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vYXBwbGljYXRpb25EaXNwYXRjaGVyL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9hcHBsaWNhdGlvbkRpc3BhdGNoZXIvV2ViVGVzdC5qYXZhCkBAIC0zMSwxMiArMzEsMTIgQEAKIGltcG9ydCBqYXZhLm5ldC5VUkxDb25uZWN0aW9uOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAxOwogCiAgICAgcHJpdmF0ZSBTdHJpbmcgY29udGV4dFBhdGggPSAidGVzdCI7Ci0gICAgCisKICAgICBAQmVmb3JlQ2xhc3MKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0dXAoKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vZGlyTGlzdGluZy9zcmMvbWFpbi9qYXZhL3Rlc3QvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vZGlyTGlzdGluZy9zcmMvbWFpbi9qYXZhL3Rlc3QvU2VydmxldFRlc3QuamF2YQppbmRleCA4NjBiY2M0Li5lN2E3YzA5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL2Rpckxpc3Rpbmcvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9kaXJMaXN0aW5nL3NyYy9tYWluL2phdmEvdGVzdC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCBpbXBsZW1lbnRzIEh0dHBTZXNzaW9uTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwogICAgIH0KIApAQCAtNTIsNyArNTIsNyBAQAogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25DcmVhdGVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25DcmVhdGVkXSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25EZXN0cm95ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkRlc3Ryb3llZF0iKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL2Rpckxpc3Rpbmcvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vZGlyTGlzdGluZy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmluZGV4IDZmNDNlMDguLjkzZTI1MTggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vZGlyTGlzdGluZy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vZGlyTGlzdGluZy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+CiAKLSAgICA8bGlzdGVuZXI+ICAgICAKKyAgICA8bGlzdGVuZXI+CiAgICAgICAgIDxsaXN0ZW5lci1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9saXN0ZW5lci1jbGFzcz4KICAgICA8L2xpc3RlbmVyPgogCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPmRlZmF1bHQ8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vZGlyTGlzdGluZy9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZGlyTGlzdGluZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL2Rpckxpc3Rpbmcvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2Rpckxpc3RpbmcvV2ViVGVzdC5qYXZhCmluZGV4IDU0ZWQ2ZTMuLjNjMTU5MDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vZGlyTGlzdGluZy9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZGlyTGlzdGluZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9kaXJMaXN0aW5nL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9kaXJMaXN0aW5nL1dlYlRlc3QuamF2YQpAQCAtMzEsMTIgKzMxLDEyIEBACiBpbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgICAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMTsKIAogICAgIHByaXZhdGUgU3RyaW5nIGNvbnRleHRQYXRoID0gInRlc3QiOwotICAgIAorCiAgICAgQEJlZm9yZUNsYXNzCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldHVwKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICB9CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICBVUkxDb25uZWN0aW9uIHljID0gc2VydmxldC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKAogICAgICAgICAgICAgICAgICAgICB5Yy5nZXRJbnB1dFN0cmVhbSgpKSk7Ci0gICAgICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7ICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CiAgICAgICAgICAgICBpbnQgaW5kZXg9MCwgbGluZU51bT0wOwogICAgICAgICAgICAgU3RyaW5nIGNvb2tpZXMgPSAiIjsKICAgICAgICAgICAgIHdoaWxlICgobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vZmlsdGVyVVJJTWFwcGluZy9zcmMvbWFpbi9qYXZhL3Rlc3QvRmlsdGVyVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9maWx0ZXJVUklNYXBwaW5nL3NyYy9tYWluL2phdmEvdGVzdC9GaWx0ZXJUZXN0LmphdmEKaW5kZXggZmNmMzYyNC4uZWVjOTU3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9maWx0ZXJVUklNYXBwaW5nL3NyYy9tYWluL2phdmEvdGVzdC9GaWx0ZXJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9maWx0ZXJVUklNYXBwaW5nL3NyYy9tYWluL2phdmEvdGVzdC9GaWx0ZXJUZXN0LmphdmEKQEAgLTE5LDI1ICsxOSwyNSBAQAogaW1wb3J0IGpha2FydGEuc2VydmxldC4qOwogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7CiBwdWJsaWMgY2xhc3MgRmlsdGVyVGVzdCBpbXBsZW1lbnRzIEZpbHRlcnsKLSAgICAKKwogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW0ZpbHRlci5kZXN0cm95XSIpOwotICAgIH0gICAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBGaWx0ZXJDaGFpbiBmaWx0ZXJDaGFpbikgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmRvRmlsdGVyXSIpOwotICAgICAgICAgIAorCiAgICAgICAgICgoSHR0cFNlcnZsZXRSZXF1ZXN0KXJlcXVlc3QpLmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJQQVNTIik7CiAgICAgICAgIGZpbHRlckNoYWluLmRvRmlsdGVyKHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICAgICAgCi0gICAgfSAgICAKLSAgICAKLSAgICAKKworICAgIH0KKworCiAgICAgcHVibGljIHZvaWQgaW5pdChqYWthcnRhLnNlcnZsZXQuRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmluaXRdIik7CiAgICAgICAgIGNvbnRleHQgPSBmaWx0ZXJDb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vZmlsdGVyVVJJTWFwcGluZy9zcmMvbWFpbi9qYXZhL3Rlc3QvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vZmlsdGVyVVJJTWFwcGluZy9zcmMvbWFpbi9qYXZhL3Rlc3QvU2VydmxldFRlc3QuamF2YQppbmRleCBhNzZmODgyLi5mMWY2MjdjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL2ZpbHRlclVSSU1hcHBpbmcvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9maWx0ZXJVUklNYXBwaW5nL3NyYy9tYWluL2phdmEvdGVzdC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0yNSwxMyArMjUsMTMgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0gIiArIGNvbnRleHQuZ2V0TWFqb3JWZXJzaW9uKCkpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpAQCAtMzksMTggKzM5LDE4IEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgT2JqZWN0IG9iaiA9IHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihvYmopOwogICAgICAgICBpZiAoKG9iaiAhPSBudWxsKSAmJiAob2JqLmVxdWFscygiUEFTUyIpKSkgewogICAgICAgICAgICAgb3V0LnByaW50bG4oIkZpbHRlciBpbnZva2VkIik7CiAgICAgICAgIH0KLSAgICAgICAgCQorCiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL2ZpbHRlclVSSU1hcHBpbmcvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vZmlsdGVyVVJJTWFwcGluZy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmluZGV4IGM5YjgxZmUuLjFkNzAyYjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vZmlsdGVyVVJJTWFwcGluZy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vZmlsdGVyVVJJTWFwcGluZy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCkBAIC0yNiwyMyArMjYsMjMgQEAKICAgICA8ZmlsdGVyPgogICAgICAgICA8ZmlsdGVyLW5hbWU+RmlsdGVyVGVzdDwvZmlsdGVyLW5hbWU+CiAgICAgICAgIDxmaWx0ZXItY2xhc3M+dGVzdC5GaWx0ZXJUZXN0PC9maWx0ZXItY2xhc3M+Ci0gICAgPC9maWx0ZXI+ICAgIAotICAgICAgICAKKyAgICA8L2ZpbHRlcj4KKwogICAgIDxmaWx0ZXItbWFwcGluZz4KICAgICAgICAgPGZpbHRlci1uYW1lPkZpbHRlclRlc3Q8L2ZpbHRlci1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KICAgICAgICAgPGRpc3BhdGNoZXI+UkVRVUVTVDwvZGlzcGF0Y2hlcj4KICAgICAgICAgPGRpc3BhdGNoZXI+SU5DTFVERTwvZGlzcGF0Y2hlcj4KLSAgICAgICAgPGRpc3BhdGNoZXI+Rk9SV0FSRDwvZGlzcGF0Y2hlcj4gIAotICAgICAgICA8ZGlzcGF0Y2hlcj5FUlJPUjwvZGlzcGF0Y2hlcj4gCisgICAgICAgIDxkaXNwYXRjaGVyPkZPUldBUkQ8L2Rpc3BhdGNoZXI+CisgICAgICAgIDxkaXNwYXRjaGVyPkVSUk9SPC9kaXNwYXRjaGVyPgogICAgIDwvZmlsdGVyLW1hcHBpbmc+CiAKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vZmlsdGVyVVJJTWFwcGluZy9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZmlsdGVyVVJJTWFwcGluZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL2ZpbHRlclVSSU1hcHBpbmcvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2ZpbHRlclVSSU1hcHBpbmcvV2ViVGVzdC5qYXZhCmluZGV4IDRmOGU0NGYuLjg2NDNjYWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vZmlsdGVyVVJJTWFwcGluZy9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZmlsdGVyVVJJTWFwcGluZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9maWx0ZXJVUklNYXBwaW5nL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9maWx0ZXJVUklNYXBwaW5nL1dlYlRlc3QuamF2YQpAQCAtMzEsMTIgKzMxLDEyIEBACiBpbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgICAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMTsKIAogICAgIHByaXZhdGUgU3RyaW5nIGNvbnRleHRQYXRoID0gInRlc3QiOwotICAgIAorCiAgICAgQEJlZm9yZUNsYXNzCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldHVwKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICB9CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CiAgICAgICAgICAgICAgICAgLy8gaWdub3JlCi0gICAgICAgICAgICB9ICAKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShwYXNzKTsKICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vZ2V0UmVxdWVzdFVSSS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9nZXRSZXF1ZXN0VVJJL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKaW5kZXggM2JjYmNjZC4uOGVkOTM0ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9nZXRSZXF1ZXN0VVJJL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9nZXRSZXF1ZXN0VVJJL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTIyLDEzICsyMiwxMyBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vaW5kZXgvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2luZGV4L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vaW5kZXgvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2luZGV4L1dlYlRlc3QuamF2YQppbmRleCA1NDg0ODYzLi4yMWE0MmU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL2luZGV4L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9pbmRleC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9pbmRleC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvaW5kZXgvV2ViVGVzdC5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiBpbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgQEJlZm9yZUNsYXNzCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldHVwKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL2pteFVuZGVwbG95RXZlbnQvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL2pteFVuZGVwbG95RXZlbnQvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggNzUwODYyYi4uNDNiYzkxMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9qbXhVbmRlcGxveUV2ZW50L3NyYy9tYWluL2phdmEvdGVzdC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vam14VW5kZXBsb3lFdmVudC9zcmMvbWFpbi9qYXZhL3Rlc3QvU2VydmxldFRlc3QuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogaW1wb3J0IGphdmEuc3FsLio7CiAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0ewotICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOwpAQCAtNDIsOSArNDIsOSBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5kb1Bvc3RdIik7Ci0gICAgICAgIAorCiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogICAgICAgICBvdXQucHJpbnRsbigiam14VW5kZXBsb3lFdmVudDo6RkFJTCIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vam14VW5kZXBsb3lFdmVudC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9qbXhVbmRlcGxveUV2ZW50L3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKaW5kZXggNmJlNDA3My4uM2RjZmY3ZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9qbXhVbmRlcGxveUV2ZW50L3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9qbXhVbmRlcGxveUV2ZW50L3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTI3LDE0ICsyNywxNCBAQAogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLSAgICAKKwogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vam14VW5kZXBsb3lFdmVudC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvam14VW5kZXBsb3lFdmVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL2pteFVuZGVwbG95RXZlbnQvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2pteFVuZGVwbG95RXZlbnQvV2ViVGVzdC5qYXZhCmluZGV4IDYwOWFlMGEuLjYwZjM0ZDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vam14VW5kZXBsb3lFdmVudC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvam14VW5kZXBsb3lFdmVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9qbXhVbmRlcGxveUV2ZW50L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9qbXhVbmRlcGxveUV2ZW50L1dlYlRlc3QuamF2YQpAQCAtMjcsOSArMjcsOSBAQAogaW1wb3J0IGphdmEubmV0Lkh0dHBVUkxDb25uZWN0aW9uOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgICAgICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgY29udGV4dFBhdGggPSAidGVzdCI7Ci0gICAgCisKICAgICBAQmVmb3JlQ2xhc3MKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0dXAoKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vanNmdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvanNmdGVzdC9KU0ZUZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9qc2Z0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9qc2Z0ZXN0L0pTRlRlc3RCZWFuLmphdmEKaW5kZXggNDhlZmQwYi4uZTE2Y2I2MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9qc2Z0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9qc2Z0ZXN0L0pTRlRlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9qc2Z0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9qc2Z0ZXN0L0pTRlRlc3RCZWFuLmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgICAgICAgIG5ldyBUZXN0VGFibGUoIk1yLiBYIiwgIisxMjIyMjIyMjIiLCAiU0ZPIiksCiAgICAgfTsKIAotICAgIAorCiAgICAgcHVibGljIGNsYXNzIFRlc3RUYWJsZSB7CiAgICAgICAgIFN0cmluZyBuYW1lOwogICAgICAgICBTdHJpbmcgbnVtYmVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9qc2Z0ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9qc2Z0ZXN0L0pTRlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vanNmdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvanNmdGVzdC9KU0ZUZXN0LmphdmEKaW5kZXggNzliMzQ2YS4uNWM5NWNmMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9qc2Z0ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9qc2Z0ZXN0L0pTRlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL2pzZnRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2pzZnRlc3QvSlNGVGVzdC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIGRpc2FibGVDZXJ0VmFsaWRhdGlvbigpOwogCiAgICAgICAgIGdvR2V0KCJodHRwOi8vbG9jYWxob3N0OjgwODAvdGVzdC9KU0ZUZXN0U2VydmxldCIsICJDcmVhdGVkIHZpZXdSb290Iik7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIHRlc3Qgbm9uIHNlY3VyZSBhY2Nlc3MuCiAgICAgICAgIGdvR2V0KCJodHRwOi8vbG9jYWxob3N0OjgwODAvdGVzdCIsICJCSEFWQU5JIiwgIlNIQU5LQVIiLCAiTXIuIFgiKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9qc3B0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9qc3B0ZXN0L0pzcFRlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL2pzcHRlc3Qvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2pzcHRlc3QvSnNwVGVzdFNlcnZsZXQuamF2YQppbmRleCBjNThhZDU5Li41NjQyYjJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL2pzcHRlc3Qvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2pzcHRlc3QvSnNwVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL2pzcHRlc3Qvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2pzcHRlc3QvSnNwVGVzdFNlcnZsZXQuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwcmludCgiXG5bT1VUUFVUIGZyb20gSnNwVGVzdFNlcnZsZXRdIiwgb3V0KTsKICAgICAgICAgcHJpbnQoIltIaSBmcm9tIEpzcFRlc3RTZXJ2bGV0XSIsIG91dCk7CiAgICAgICAgIHByaW50KCJbRW5kIG9mIE9VVFBVVCBmcm9tIFNlY3VyZVdlYkFwcFRlc3RTZXJ2bGV0XSIsIG91dCk7Ci0gICAgICAgIAorCiAgICAgICAgIG91dC5mbHVzaCgpOwogICAgICAgICBvdXQuY2xvc2UoKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL2pzcHRlc3Qvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL2pzcHRlc3Qvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKaW5kZXggNTE4N2M1NC4uMjEwOTA5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9qc3B0ZXN0L3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vanNwdGVzdC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbApAQCAtMTksNSArMTksNSBAQAogCiA8IURPQ1RZUEUgc3VuLXdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDguMSBTZXJ2bGV0IDIuNC8vRU4iICJodHRwOi8vd3d3LnN1bi5jb20vc29mdHdhcmUvYXBwc2VydmVyL2R0ZHMvc3VuLXdlYi1hcHBfMl80LTEuZHRkIj4KIDxzdW4td2ViLWFwcD4KLSAgPGNvbnRleHQtcm9vdD4vaGVsbG9qc3A8L2NvbnRleHQtcm9vdD4gCisgIDxjb250ZXh0LXJvb3Q+L2hlbGxvanNwPC9jb250ZXh0LXJvb3Q+CiA8L3N1bi13ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9qc3B0ZXN0L3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL2pzcHRlc3Qvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAppbmRleCBhY2U1Mjk3Li42MzQ3YzlmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL2pzcHRlc3Qvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL2pzcHRlc3Qvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApAQCAtMTgsNiArMTgsNiBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjMuMCIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCI+Ci0gIDxkaXNwbGF5LW5hbWU+anNwdGVzdDwvZGlzcGxheS1uYW1lPiAgCisgIDxkaXNwbGF5LW5hbWU+anNwdGVzdDwvZGlzcGxheS1uYW1lPgogICA8ZGlzdHJpYnV0YWJsZS8+CiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL211bHRpcGxlQXBwcy9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvanNwdGVzdC9Kc3BUZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9tdWx0aXBsZUFwcHMvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2pzcHRlc3QvSnNwVGVzdFNlcnZsZXQuamF2YQppbmRleCBjNThhZDU5Li41NjQyYjJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL211bHRpcGxlQXBwcy9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvanNwdGVzdC9Kc3BUZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vbXVsdGlwbGVBcHBzL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9qc3B0ZXN0L0pzcFRlc3RTZXJ2bGV0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcHJpbnQoIlxuW09VVFBVVCBmcm9tIEpzcFRlc3RTZXJ2bGV0XSIsIG91dCk7CiAgICAgICAgIHByaW50KCJbSGkgZnJvbSBKc3BUZXN0U2VydmxldF0iLCBvdXQpOwogICAgICAgICBwcmludCgiW0VuZCBvZiBPVVRQVVQgZnJvbSBTZWN1cmVXZWJBcHBUZXN0U2VydmxldF0iLCBvdXQpOwotICAgICAgICAKKwogICAgICAgICBvdXQuZmx1c2goKTsKICAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9tdWx0aXBsZUFwcHMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL211bHRpcGxlQXBwcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbAppbmRleCBiNDNhZWRmLi40MjU4MzY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL211bHRpcGxlQXBwcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL211bHRpcGxlQXBwcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbApAQCAtMTksNSArMTksNSBAQAogCiA8IURPQ1RZUEUgc3VuLXdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDguMSBTZXJ2bGV0IDIuNC8vRU4iICJodHRwOi8vd3d3LnN1bi5jb20vc29mdHdhcmUvYXBwc2VydmVyL2R0ZHMvc3VuLXdlYi1hcHBfMl80LTEuZHRkIj4KIDxzdW4td2ViLWFwcD4KLSAgPGNvbnRleHQtcm9vdD4vZmlyc3RhcHA8L2NvbnRleHQtcm9vdD4gCisgIDxjb250ZXh0LXJvb3Q+L2ZpcnN0YXBwPC9jb250ZXh0LXJvb3Q+CiA8L3N1bi13ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9tdWx0aXBsZUFwcHMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vbXVsdGlwbGVBcHBzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKaW5kZXggZjNmMjIzOC4uYTY5YzAwZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9tdWx0aXBsZUFwcHMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL211bHRpcGxlQXBwcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCkBAIC0xOCw2ICsxOCw2IEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMy4wIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8zXzAueHNkIj4KLSAgPGRpc3BsYXktbmFtZT5maXJzdGFwcDwvZGlzcGxheS1uYW1lPiAgCisgIDxkaXNwbGF5LW5hbWU+Zmlyc3RhcHA8L2Rpc3BsYXktbmFtZT4KICAgPGRpc3RyaWJ1dGFibGUvPgogPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9wb20ueG1sCmluZGV4IGZiYWQ3YjMuLjg1ZWIxNzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3BvbS54bWwKQEAgLTExNCw4ICsxMTQsOCBAQAogICAgICAgICAgICAgPC9tb2R1bGVzPgogICAgICAgICA8L3Byb2ZpbGU+CiAgICAgPC9wcm9maWxlcz4KLSAgICAKLSAgICAKKworCiAgICAgPGJ1aWxkPgogICAgICAgICA8ZGVmYXVsdEdvYWw+aW5zdGFsbDwvZGVmYXVsdEdvYWw+CiAgICAgICAgIDx0ZXN0U291cmNlRGlyZWN0b3J5PnNyYy90ZXN0L2phdmE8L3Rlc3RTb3VyY2VEaXJlY3Rvcnk+CkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4xMjwvdmVyc2lvbj4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICA8c2tpcD50cnVlPC9za2lwPgotICAgICAgICAgICAgICAgICAgICAgICAgPGZvcmtDb3VudD4wPC9mb3JrQ291bnQ+IAorICAgICAgICAgICAgICAgICAgICAgICAgPGZvcmtDb3VudD4wPC9mb3JrQ291bnQ+CiAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CiAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgpAQCAtMTc2LDI1ICsxNzYsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDxzZXJ2ZXJJRD5lbWJlZGRlZDwvc2VydmVySUQ+CiAgICAgICAgICAgICAgICAgICAgICAgICA8cG9ydHM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGh0dHBzLWxpc3RlbmVyPjgxODE8L2h0dHBzLWxpc3RlbmVyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wb3J0cz4gICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BvcnRzPgogICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgIDxkZXBlbmRlbmNpZXM+CiAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLm1haW4uY29tbW9uPC9ncm91cElkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNpbXBsZS1nbGFzc2Zpc2gtYXBpPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICAgICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5tYWluLmV4dHJhczwvZ3JvdXBJZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nbGFzc2Zpc2gtZW1iZWRkZWQtYWxsPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmNpZXM+Ci0gICAgICAgICAgICAgICAgPC9wbHVnaW4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPC9wbHVnaW4+CiAgICAgICAgICAgICA8L3BsdWdpbnM+CiAgICAgICAgIDwvcGx1Z2luTWFuYWdlbWVudD4KICAgICA8L2J1aWxkPgotICAgIAorCiAgICAgPGRlcGVuZGVuY3lNYW5hZ2VtZW50PgogICAgICAgICA8ZGVwZW5kZW5jaWVzPgogICAgICAgICAgICAgPGRlcGVuZGVuY3k+CkBAIC0yNDIsMTMgKzI0MiwxMyBAQAogICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdyaXp6bHktaHR0cC1zZXJ2bGV0PC9hcnRpZmFjdElkPgogICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuNC4zPC92ZXJzaW9uPgogICAgICAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+Ci0gICAgICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgICAgIDxncm91cElkPmpha2FydGEuam1zPC9ncm91cElkPgogICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpha2FydGEuam1zLWFwaTwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgogICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjMuMC4wLVJDMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8L2RlcGVuZGVuY2llcz4KICAgICA8L2RlcGVuZGVuY3lNYW5hZ2VtZW50PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9xdWVyeVN0cmluZy9zcmMvbWFpbi9qYXZhL3Rlc3QvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vcXVlcnlTdHJpbmcvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggZTQ5Mjg5Zi4uMDc0Y2Q1ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9xdWVyeVN0cmluZy9zcmMvbWFpbi9qYXZhL3Rlc3QvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3F1ZXJ5U3RyaW5nL3NyYy9tYWluL2phdmEvdGVzdC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0yNSwxMyArMjUsMTMgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzUmVkaXJlY3RlZCA9IGZhbHNlOwogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0gIiArIGNvbnRleHQuZ2V0TWFqb3JWZXJzaW9uKCkpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpAQCAtMzksMTQgKzM5LDE0IEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlcXVlc3RVcmk6ICIgKyByZXF1ZXN0LmdldFJlcXVlc3RVUkkoKSk7Ci0gICAgICAgCisKICAgICAgICAgaWYgKCFpc1JlZGlyZWN0ZWQpewogICAgICAgICAgICAgU3RyaW5nIHVybCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJ1cmwiKSArICI/VEVTVD1QQVNTIjsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1VSTF0gIiArIHVybCk7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgICAgICBvdXQuZmx1c2goKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgIAorCiAgICAgICAgIG91dC5wcmludGxuKCJURVNUOiIgKyByZXF1ZXN0LmdldFBhcmFtZXRlcigiVEVTVCIpKTsKICAgICAgICAgb3V0LmZsdXNoKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9xdWVyeVN0cmluZy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9xdWVyeVN0cmluZy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmluZGV4IDNkZmY5Y2IuLjRlYzYyZmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vcXVlcnlTdHJpbmcvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3F1ZXJ5U3RyaW5nL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTIyLDE4ICsyMiwxOCBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KICAgICA8L3NlcnZsZXQtbWFwcGluZz4KLSAgICAKKwogICAgIDxzZXNzaW9uLWNvbmZpZz4KICAgICAgICAgPHNlc3Npb24tdGltZW91dD4xMDwvc2Vzc2lvbi10aW1lb3V0PgogICAgIDwvc2Vzc2lvbi1jb25maWc+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3F1ZXJ5U3RyaW5nL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9xdWVyeVN0cmluZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3F1ZXJ5U3RyaW5nL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9xdWVyeVN0cmluZy9XZWJUZXN0LmphdmEKaW5kZXggNTQ0MmRlMi4uYTUxYzJhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9xdWVyeVN0cmluZy9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcXVlcnlTdHJpbmcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vcXVlcnlTdHJpbmcvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3F1ZXJ5U3RyaW5nL1dlYlRlc3QuamF2YQpAQCAtMzEsMTIgKzMxLDEyIEBACiBpbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgICAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMTsKIAogICAgIHByaXZhdGUgU3RyaW5nIGNvbnRleHRQYXRoID0gIi90ZXN0IjsKLSAgICAKKwogICAgIEBCZWZvcmVDbGFzcwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXR1cCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgfQpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAgICAgVVJMQ29ubmVjdGlvbiB5YyA9IHNlcnZsZXQub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcigKICAgICAgICAgICAgICAgICAgICAgeWMuZ2V0SW5wdXRTdHJlYW0oKSkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKICAgICAgICAgICAgIGludCBpbmRleDsKICAgICAgICAgICAgIHdoaWxlICgobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKQEAgLTg5LDcgKzg5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9yZW1vdGVlamJzL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9yZW1vdGVlamJzL0VqYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vcmVtb3RlZWpicy9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvcmVtb3RlZWpicy9FamJUZXN0LmphdmEKaW5kZXggMTM1ODBiZS4uMDVjZmUyNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9yZW1vdGVlamJzL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9yZW1vdGVlamJzL0VqYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3JlbW90ZWVqYnMvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3JlbW90ZWVqYnMvRWpiVGVzdC5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAgICAgcHVibGljIHZvaWQgdGVzdFRpbWVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgVGltZXJSZW1vdGUgZWpiID0gCisgICAgICAgICAgICBUaW1lclJlbW90ZSBlamIgPQogICAgICAgICAgICAgICAgICAgICAoVGltZXJSZW1vdGUpIGljLmxvb2t1cCgiamF2YTpnbG9iYWwvcmVtb3RlZWpicy9UaW1lckVqYiIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgWyIgKyBlamIgKyAiXSIpOwogICAgICAgICAgICAgZWpiLmNyZWF0ZVRpbWVyKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3NjYXR0ZXJlZC9zcmMvbWFpbi9qYXZhL3Rlc3QvRmlsdGVyVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zY2F0dGVyZWQvc3JjL21haW4vamF2YS90ZXN0L0ZpbHRlclRlc3QuamF2YQppbmRleCBmY2YzNjI0Li5lZWM5NTdlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3NjYXR0ZXJlZC9zcmMvbWFpbi9qYXZhL3Rlc3QvRmlsdGVyVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vc2NhdHRlcmVkL3NyYy9tYWluL2phdmEvdGVzdC9GaWx0ZXJUZXN0LmphdmEKQEAgLTE5LDI1ICsxOSwyNSBAQAogaW1wb3J0IGpha2FydGEuc2VydmxldC4qOwogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7CiBwdWJsaWMgY2xhc3MgRmlsdGVyVGVzdCBpbXBsZW1lbnRzIEZpbHRlcnsKLSAgICAKKwogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW0ZpbHRlci5kZXN0cm95XSIpOwotICAgIH0gICAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBGaWx0ZXJDaGFpbiBmaWx0ZXJDaGFpbikgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmRvRmlsdGVyXSIpOwotICAgICAgICAgIAorCiAgICAgICAgICgoSHR0cFNlcnZsZXRSZXF1ZXN0KXJlcXVlc3QpLmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJQQVNTIik7CiAgICAgICAgIGZpbHRlckNoYWluLmRvRmlsdGVyKHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICAgICAgCi0gICAgfSAgICAKLSAgICAKLSAgICAKKworICAgIH0KKworCiAgICAgcHVibGljIHZvaWQgaW5pdChqYWthcnRhLnNlcnZsZXQuRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmluaXRdIik7CiAgICAgICAgIGNvbnRleHQgPSBmaWx0ZXJDb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vc2NhdHRlcmVkL3NyYy9tYWluL2phdmEvdGVzdC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zY2F0dGVyZWQvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggZDRhMzE3NC4uZGFhODA1MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zY2F0dGVyZWQvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zY2F0dGVyZWQvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTQ2LDEzICs0NiwxMyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgaW1wbGVtZW50cyBIdHRwU2Vzc2lvbkxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0gIiArIGNvbnRleHQuZ2V0TWFqb3JWZXJzaW9uKCkpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpAQCAtNjAsMjMgKzYwLDIzIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVItUkVRVUVTVCIsIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSIikpOwotICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7ICAgICAgICAKLSAgICAgICAgCQorICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7CisKICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmQgPSBjb250ZXh0LmdldFJlcXVlc3REaXNwYXRjaGVyKCIvU2VydmxldFRlc3QyIik7Ci0gICAgICAgIHJkLmZvcndhcmQocmVxdWVzdCwgcmVzcG9uc2UpOyAgICAgICAKKyAgICAgICAgcmQuZm9yd2FyZChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkNyZWF0ZWRdIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkRlc3Ryb3llZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uRGVzdHJveWVkXSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF0dHJpYnV0ZXM6ICIgKyBodHRwU2Vzc2lvbkV2ZW50LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoInRlc3QiKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3NjYXR0ZXJlZC9zcmMvbWFpbi9qYXZhL3Rlc3QvU2VydmxldFRlc3QyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3NjYXR0ZXJlZC9zcmMvbWFpbi9qYXZhL3Rlc3QvU2VydmxldFRlc3QyLmphdmEKaW5kZXggZGIyY2I1MC4uMDA3NzVhNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zY2F0dGVyZWQvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXRUZXN0Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vc2NhdHRlcmVkL3NyYy9tYWluL2phdmEvdGVzdC9TZXJ2bGV0VGVzdDIuamF2YQpAQCAtMjUsMTAgKzI1LDEwIEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QyIGV4dGVuZHMgSHR0cFNlcnZsZXQgaW1wbGVtZW50cyBIdHRwU2Vzc2lvbkxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0Mi5pbml0XSIpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQyLmluaXRdIik7CiAgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICB9CiAKQEAgLTM3LDIzICszNywyMyBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDIuZG9Qb3N0XSIpOwotICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVItRk9SV0FSRCIscmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVIiKSk7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIkZBSUwiKTsgICAgICAgIAotICAgICAgICAKKyAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiRkFJTCIpOworCiAgICAgICAgIFJlcXVlc3REaXNwYXRjaGVyIHJkID0gcmVxdWVzdC5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL1NlcnZsZXRUZXN0MyIpOwotICAgICAgICByZC5pbmNsdWRlKHJlcXVlc3QsIHJlc3BvbnNlKTsgICAgIAorICAgICAgICByZC5pbmNsdWRlKHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9Ci0gCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uQ3JlYXRlZF0iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uRGVzdHJveWVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25EZXN0cm95ZWRdIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXR0cmlidXRlczogIiArIGh0dHBTZXNzaW9uRXZlbnQuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgidGVzdCIpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vc2NhdHRlcmVkL3NyYy9tYWluL2phdmEvdGVzdC9TZXJ2bGV0VGVzdDMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vc2NhdHRlcmVkL3NyYy9tYWluL2phdmEvdGVzdC9TZXJ2bGV0VGVzdDMuamF2YQppbmRleCAzZThkMjViLi5lNzhmZWMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3NjYXR0ZXJlZC9zcmMvbWFpbi9qYXZhL3Rlc3QvU2VydmxldFRlc3QzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zY2F0dGVyZWQvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXRUZXN0My5qYXZhCkBAIC00NiwxMSArNDYsMTEgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdDMgZXh0ZW5kcyBIdHRwU2VydmxldHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0My5pbml0XSIpOyAgICAgICAgCi0gICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0My5pbml0XSIpOworICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CkBAIC01OCwxMiArNTgsMTIgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQzLmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgb3V0LnByaW50bG4oIkZJTFRFUi1SRVFVRVNUOiIgKyByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUi1SRVFVRVNUIikpOwogICAgICAgICBvdXQucHJpbnRsbigiRklMVEVSLUZPUldBUkQ6IiArIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSLUZPUldBUkQiKSk7CiAgICAgICAgIG91dC5wcmludGxuKCJGSUxURVItSU5DTFVERToiICsgcmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVIiKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3NjYXR0ZXJlZC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zY2F0dGVyZWQvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAppbmRleCBmOTg2MWRmLi4xZjg0Y2VlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3NjYXR0ZXJlZC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vc2NhdHRlcmVkL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTIyLDM3ICsyMiwzNyBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPGZpbHRlcj4KICAgICAgICAgPGZpbHRlci1uYW1lPkZpbHRlclRlc3Q8L2ZpbHRlci1uYW1lPgogICAgICAgICA8ZmlsdGVyLWNsYXNzPnRlc3QuRmlsdGVyVGVzdDwvZmlsdGVyLWNsYXNzPgotICAgIDwvZmlsdGVyPiAgICAKLSAgICAgICAgCisgICAgPC9maWx0ZXI+CisKICAgICA8ZmlsdGVyLW1hcHBpbmc+CiAgICAgICAgIDxmaWx0ZXItbmFtZT5GaWx0ZXJUZXN0PC9maWx0ZXItbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KICAgICAgICAgPGRpc3BhdGNoZXI+UkVRVUVTVDwvZGlzcGF0Y2hlcj4KICAgICAgICAgPGRpc3BhdGNoZXI+SU5DTFVERTwvZGlzcGF0Y2hlcj4KLSAgICAgICAgPGRpc3BhdGNoZXI+Rk9SV0FSRDwvZGlzcGF0Y2hlcj4gIAotICAgICAgICA8ZGlzcGF0Y2hlcj5FUlJPUjwvZGlzcGF0Y2hlcj4gCisgICAgICAgIDxkaXNwYXRjaGVyPkZPUldBUkQ8L2Rpc3BhdGNoZXI+CisgICAgICAgIDxkaXNwYXRjaGVyPkVSUk9SPC9kaXNwYXRjaGVyPgogICAgIDwvZmlsdGVyLW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0MjwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mjwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0Mjwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3QzPC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QzPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3QzPC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDM8L3VybC1wYXR0ZXJuPgogICAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlc3Npb24tY29uZmlnPgogICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjEwPC9zZXNzaW9uLXRpbWVvdXQ+CiAgICAgPC9zZXNzaW9uLWNvbmZpZz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vc2VjdXJlV2ViQXBwL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3NlY3VyZVdlYkFwcC9wb20ueG1sCmluZGV4IDQwMzI5ZTUuLjI4NTQ4YzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vc2VjdXJlV2ViQXBwL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zZWN1cmVXZWJBcHAvcG9tLnhtbApAQCAtMzcsMTggKzM3LDE4IEBACiAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5lbWJlZGRlZDwvZ3JvdXBJZD4KICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1lbWJlZGRlZC1nbGFzc2Zpc2gtcGx1Z2luPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotCQkgICAgPGJvb3RzdHJhcFByb3BlcnRpZXM+Ci0JCQk8cHJvcGVydHk+dGVzdF9rZXk9dGVzdF92YWx1ZTwvcHJvcGVydHk+Ci0JCSAgICA8L2Jvb3RzdHJhcFByb3BlcnRpZXM+Ci0JCSAgICA8Ym9vdHN0cmFwUHJvcGVydGllc0ZpbGU+Ym9vdHN0cmFwLnByb3BlcnRpZXM8L2Jvb3RzdHJhcFByb3BlcnRpZXNGaWxlPgotCQkgICAgPGdsYXNzZmlzaFByb3BlcnRpZXM+Ci0JCQk8cHJvcGVydHk+ZW1iZWRkZWQtZ2xhc3NmaXNoLWNvbmZpZy5zZXJ2ZXIuam1zLXNlcnZpY2Uuam1zLWhvc3QuZGVmYXVsdF9KTVNfaG9zdC5wb3J0PTE3Njc2PC9wcm9wZXJ0eT4KLQkJICAgIDwvZ2xhc3NmaXNoUHJvcGVydGllcz4KLQkJICAgIDxnbGFzc2Zpc2hQcm9wZXJ0aWVzRmlsZT5nbGFzc2Zpc2gucHJvcGVydGllczwvZ2xhc3NmaXNoUHJvcGVydGllc0ZpbGU+Ci0JCSAgICA8c3lzdGVtUHJvcGVydGllcz4KLQkJCTxwcm9wZXJ0eT5BTlRMUl9VU0VfRElSRUNUX0NMQVNTX0xPQURJTkc9dHJ1ZTwvcHJvcGVydHk+Ci0JCSAgICA8L3N5c3RlbVByb3BlcnRpZXM+Ci0JCSAgICA8c3lzdGVtUHJvcGVydGllc0ZpbGU+c3lzdGVtLnByb3BlcnRpZXM8L3N5c3RlbVByb3BlcnRpZXNGaWxlPgorICAgICAgICAgICAgPGJvb3RzdHJhcFByb3BlcnRpZXM+CisgICAgICAgICAgICA8cHJvcGVydHk+dGVzdF9rZXk9dGVzdF92YWx1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICA8L2Jvb3RzdHJhcFByb3BlcnRpZXM+CisgICAgICAgICAgICA8Ym9vdHN0cmFwUHJvcGVydGllc0ZpbGU+Ym9vdHN0cmFwLnByb3BlcnRpZXM8L2Jvb3RzdHJhcFByb3BlcnRpZXNGaWxlPgorICAgICAgICAgICAgPGdsYXNzZmlzaFByb3BlcnRpZXM+CisgICAgICAgICAgICA8cHJvcGVydHk+ZW1iZWRkZWQtZ2xhc3NmaXNoLWNvbmZpZy5zZXJ2ZXIuam1zLXNlcnZpY2Uuam1zLWhvc3QuZGVmYXVsdF9KTVNfaG9zdC5wb3J0PTE3Njc2PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDwvZ2xhc3NmaXNoUHJvcGVydGllcz4KKyAgICAgICAgICAgIDxnbGFzc2Zpc2hQcm9wZXJ0aWVzRmlsZT5nbGFzc2Zpc2gucHJvcGVydGllczwvZ2xhc3NmaXNoUHJvcGVydGllc0ZpbGU+CisgICAgICAgICAgICA8c3lzdGVtUHJvcGVydGllcz4KKyAgICAgICAgICAgIDxwcm9wZXJ0eT5BTlRMUl9VU0VfRElSRUNUX0NMQVNTX0xPQURJTkc9dHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICA8L3N5c3RlbVByb3BlcnRpZXM+CisgICAgICAgICAgICA8c3lzdGVtUHJvcGVydGllc0ZpbGU+c3lzdGVtLnByb3BlcnRpZXM8L3N5c3RlbVByb3BlcnRpZXNGaWxlPgogICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KICAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vc2VjdXJlV2ViQXBwL3NyYy9tYWluL2phdmEvdGVzdC9TZWN1cmVXZWJBcHBUZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zZWN1cmVXZWJBcHAvc3JjL21haW4vamF2YS90ZXN0L1NlY3VyZVdlYkFwcFRlc3RTZXJ2bGV0LmphdmEKaW5kZXggMjU5MDRhMS4uZmJiNzkyNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zZWN1cmVXZWJBcHAvc3JjL21haW4vamF2YS90ZXN0L1NlY3VyZVdlYkFwcFRlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zZWN1cmVXZWJBcHAvc3JjL21haW4vamF2YS90ZXN0L1NlY3VyZVdlYkFwcFRlc3RTZXJ2bGV0LmphdmEKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBwcmludCgiW0VuZCBvZiBPVVRQVVQgZnJvbSBTZWN1cmVXZWJBcHBUZXN0U2VydmxldF0iLCBvdXQpOwotICAgICAgICAKKwogICAgICAgICBvdXQuZmx1c2goKTsKICAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zZXNzaW9uRGVzdHJveWVkL3NyYy9tYWluL2phdmEvdGVzdC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zZXNzaW9uRGVzdHJveWVkL3NyYy9tYWluL2phdmEvdGVzdC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDVlZGNmZjAuLmVlY2ZmZDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vc2Vzc2lvbkRlc3Ryb3llZC9zcmMvbWFpbi9qYXZhL3Rlc3QvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3Nlc3Npb25EZXN0cm95ZWQvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTM0LDcgKzM0LDcgQEAKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgc3RhdHVzID0gIkRFU1RST1lFRDpGQUlMIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7CkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKIAogICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoInRlc3QiLCJERVNUUk9ZRUQ6UEFTUyIpOwpAQCAtNjAsMTAgKzYwLDEwIEBACiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkNyZWF0ZWRdIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkRlc3Ryb3llZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uRGVzdHJveWVkXSIpOwotICAgICAgICBzdGF0dXMgPSAoU3RyaW5nKWh0dHBTZXNzaW9uRXZlbnQuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgidGVzdCIpOyAKKyAgICAgICAgc3RhdHVzID0gKFN0cmluZylodHRwU2Vzc2lvbkV2ZW50LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoInRlc3QiKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vc2Vzc2lvbkRlc3Ryb3llZC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zZXNzaW9uRGVzdHJveWVkL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKaW5kZXggN2ViNWVjMC4uNDJmNDkyOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zZXNzaW9uRGVzdHJveWVkL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zZXNzaW9uRGVzdHJveWVkL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTIzLDcgKzIzLDcgQEAKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KIAotICAgIDxsaXN0ZW5lcj4gICAgIAorICAgIDxsaXN0ZW5lcj4KICAgICAgICAgPGxpc3RlbmVyLWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L2xpc3RlbmVyLWNsYXNzPgogICAgIDwvbGlzdGVuZXI+CiAKQEAgLTMxLDE0ICszMSwxNCBAQAogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLSAgICAKKwogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vc2Vzc2lvbkRlc3Ryb3llZC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvc2Vzc2lvbkRlc3Ryb3llZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3Nlc3Npb25EZXN0cm95ZWQvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3Nlc3Npb25EZXN0cm95ZWQvV2ViVGVzdC5qYXZhCmluZGV4IDk1NzU2MjkuLmUzNWI1MjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vc2Vzc2lvbkRlc3Ryb3llZC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvc2Vzc2lvbkRlc3Ryb3llZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zZXNzaW9uRGVzdHJveWVkL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9zZXNzaW9uRGVzdHJveWVkL1dlYlRlc3QuamF2YQpAQCAtMzEsMTIgKzMxLDEyIEBACiBpbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgICAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMTsKIAogICAgIHByaXZhdGUgU3RyaW5nIGNvbnRleHRQYXRoID0gInRlc3QiOwotICAgIAorCiAgICAgQEJlZm9yZUNsYXNzCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldHVwKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3NpbXBsZS9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zaW1wbGUvcG9tLnhtbAppbmRleCA1OTg0NGFmLi43YmZkYmYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3NpbXBsZS9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vc2ltcGxlL3BvbS54bWwKQEAgLTIzLDcgKzIzLDcgQEAKICAgICAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC50ZXN0cy5lbWJlZGRlZDwvZ3JvdXBJZD4KICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgogICAgICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KLSAgICA8L3BhcmVudD4gICAgCisgICAgPC9wYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1nbGFzc2Zpc2gtcGx1Z2luLXRlc3Rlci1kZXBsb3k8L2FydGlmYWN0SWQ+CiAgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgPGdvYWxQcmVmaXg+Z2xhc3NmaXNoPC9nb2FsUHJlZml4PgogICAgICAgICAgICAgICAgICAgICA8YXBwPmhlbGxvLndhcjwvYXBwPgotICAgICAgICAgICAgICAgICAgICA8cG9ydD44MDgwPC9wb3J0PiAgCisgICAgICAgICAgICAgICAgICAgIDxwb3J0PjgwODA8L3BvcnQ+CiAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgogICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgogICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zdGFuZGFsb25ld2FyL3NyYy9tYWluL2phdmEvdGVzdC9GaWx0ZXJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3N0YW5kYWxvbmV3YXIvc3JjL21haW4vamF2YS90ZXN0L0ZpbHRlclRlc3QuamF2YQppbmRleCBmY2YzNjI0Li5lZWM5NTdlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3N0YW5kYWxvbmV3YXIvc3JjL21haW4vamF2YS90ZXN0L0ZpbHRlclRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3N0YW5kYWxvbmV3YXIvc3JjL21haW4vamF2YS90ZXN0L0ZpbHRlclRlc3QuamF2YQpAQCAtMTksMjUgKzE5LDI1IEBACiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIHB1YmxpYyBjbGFzcyBGaWx0ZXJUZXN0IGltcGxlbWVudHMgRmlsdGVyewotICAgIAorCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmRlc3Ryb3ldIik7Ci0gICAgfSAgICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIEZpbHRlckNoYWluIGZpbHRlckNoYWluKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuZG9GaWx0ZXJdIik7Ci0gICAgICAgICAgCisKICAgICAgICAgKChIdHRwU2VydmxldFJlcXVlc3QpcmVxdWVzdCkuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIlBBU1MiKTsKICAgICAgICAgZmlsdGVyQ2hhaW4uZG9GaWx0ZXIocmVxdWVzdCwgcmVzcG9uc2UpOwotICAgICAgICAKLSAgICB9ICAgIAotICAgIAotICAgIAorCisgICAgfQorCisKICAgICBwdWJsaWMgdm9pZCBpbml0KGpha2FydGEuc2VydmxldC5GaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGZpbHRlckNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zdGFuZGFsb25ld2FyL3NyYy9tYWluL2phdmEvdGVzdC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zdGFuZGFsb25ld2FyL3NyYy9tYWluL2phdmEvdGVzdC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IGQ0YTMxNzQuLmRhYTgwNTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vc3RhbmRhbG9uZXdhci9zcmMvbWFpbi9qYXZhL3Rlc3QvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3N0YW5kYWxvbmV3YXIvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTQ2LDEzICs0NiwxMyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgaW1wbGVtZW50cyBIdHRwU2Vzc2lvbkxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0gIiArIGNvbnRleHQuZ2V0TWFqb3JWZXJzaW9uKCkpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpAQCAtNjAsMjMgKzYwLDIzIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVItUkVRVUVTVCIsIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSIikpOwotICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7ICAgICAgICAKLSAgICAgICAgCQorICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7CisKICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmQgPSBjb250ZXh0LmdldFJlcXVlc3REaXNwYXRjaGVyKCIvU2VydmxldFRlc3QyIik7Ci0gICAgICAgIHJkLmZvcndhcmQocmVxdWVzdCwgcmVzcG9uc2UpOyAgICAgICAKKyAgICAgICAgcmQuZm9yd2FyZChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkNyZWF0ZWRdIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkRlc3Ryb3llZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uRGVzdHJveWVkXSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF0dHJpYnV0ZXM6ICIgKyBodHRwU2Vzc2lvbkV2ZW50LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoInRlc3QiKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3N0YW5kYWxvbmV3YXIvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXRUZXN0Mi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zdGFuZGFsb25ld2FyL3NyYy9tYWluL2phdmEvdGVzdC9TZXJ2bGV0VGVzdDIuamF2YQppbmRleCBkYjJjYjUwLi4wMDc3NWE2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3N0YW5kYWxvbmV3YXIvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXRUZXN0Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vc3RhbmRhbG9uZXdhci9zcmMvbWFpbi9qYXZhL3Rlc3QvU2VydmxldFRlc3QyLmphdmEKQEAgLTI1LDEwICsyNSwxMCBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0MiBleHRlbmRzIEh0dHBTZXJ2bGV0IGltcGxlbWVudHMgSHR0cFNlc3Npb25MaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDIuaW5pdF0iKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0Mi5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgfQogCkBAIC0zNywyMyArMzcsMjMgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQyLmRvUG9zdF0iKTsKLSAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSLUZPUldBUkQiLHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSIikpOwotICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7ICAgICAgICAKLSAgICAgICAgCisgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIkZBSUwiKTsKKwogICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciByZCA9IHJlcXVlc3QuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9TZXJ2bGV0VGVzdDMiKTsKLSAgICAgICAgcmQuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7ICAgICAKKyAgICAgICAgcmQuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQotIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkNyZWF0ZWRdIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkRlc3Ryb3llZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uRGVzdHJveWVkXSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF0dHJpYnV0ZXM6ICIgKyBodHRwU2Vzc2lvbkV2ZW50LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoInRlc3QiKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3N0YW5kYWxvbmV3YXIvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXRUZXN0My5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zdGFuZGFsb25ld2FyL3NyYy9tYWluL2phdmEvdGVzdC9TZXJ2bGV0VGVzdDMuamF2YQppbmRleCAzZThkMjViLi5lNzhmZWMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3N0YW5kYWxvbmV3YXIvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXRUZXN0My5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vc3RhbmRhbG9uZXdhci9zcmMvbWFpbi9qYXZhL3Rlc3QvU2VydmxldFRlc3QzLmphdmEKQEAgLTQ2LDExICs0NiwxMSBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0MyBleHRlbmRzIEh0dHBTZXJ2bGV0ewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQzLmluaXRdIik7ICAgICAgICAKLSAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOyAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQzLmluaXRdIik7CisgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKQEAgLTU4LDEyICs1OCwxMiBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDMuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICBvdXQucHJpbnRsbigiRklMVEVSLVJFUVVFU1Q6IiArIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSLVJFUVVFU1QiKSk7CiAgICAgICAgIG91dC5wcmludGxuKCJGSUxURVItRk9SV0FSRDoiICsgcmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVItRk9SV0FSRCIpKTsKICAgICAgICAgb3V0LnByaW50bG4oIkZJTFRFUi1JTkNMVURFOiIgKyByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUiIpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vc3RhbmRhbG9uZXdhci9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zdGFuZGFsb25ld2FyL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKaW5kZXggZjk4NjFkZi4uMWY4NGNlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zdGFuZGFsb25ld2FyL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zdGFuZGFsb25ld2FyL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTIyLDM3ICsyMiwzNyBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPGZpbHRlcj4KICAgICAgICAgPGZpbHRlci1uYW1lPkZpbHRlclRlc3Q8L2ZpbHRlci1uYW1lPgogICAgICAgICA8ZmlsdGVyLWNsYXNzPnRlc3QuRmlsdGVyVGVzdDwvZmlsdGVyLWNsYXNzPgotICAgIDwvZmlsdGVyPiAgICAKLSAgICAgICAgCisgICAgPC9maWx0ZXI+CisKICAgICA8ZmlsdGVyLW1hcHBpbmc+CiAgICAgICAgIDxmaWx0ZXItbmFtZT5GaWx0ZXJUZXN0PC9maWx0ZXItbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KICAgICAgICAgPGRpc3BhdGNoZXI+UkVRVUVTVDwvZGlzcGF0Y2hlcj4KICAgICAgICAgPGRpc3BhdGNoZXI+SU5DTFVERTwvZGlzcGF0Y2hlcj4KLSAgICAgICAgPGRpc3BhdGNoZXI+Rk9SV0FSRDwvZGlzcGF0Y2hlcj4gIAotICAgICAgICA8ZGlzcGF0Y2hlcj5FUlJPUjwvZGlzcGF0Y2hlcj4gCisgICAgICAgIDxkaXNwYXRjaGVyPkZPUldBUkQ8L2Rpc3BhdGNoZXI+CisgICAgICAgIDxkaXNwYXRjaGVyPkVSUk9SPC9kaXNwYXRjaGVyPgogICAgIDwvZmlsdGVyLW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0MjwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mjwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0Mjwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3QzPC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QzPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3QzPC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDM8L3VybC1wYXR0ZXJuPgogICAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlc3Npb24tY29uZmlnPgogICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjEwPC9zZXNzaW9uLXRpbWVvdXQ+CiAgICAgPC9zZXNzaW9uLWNvbmZpZz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vc3RhbmRhbG9uZXdhci9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvc3RhbmRhbG9uZXdhci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3N0YW5kYWxvbmV3YXIvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3N0YW5kYWxvbmV3YXIvV2ViVGVzdC5qYXZhCmluZGV4IDA5MDkyMjYuLmRkODBhMDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vc3RhbmRhbG9uZXdhci9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvc3RhbmRhbG9uZXdhci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zdGFuZGFsb25ld2FyL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9zdGFuZGFsb25ld2FyL1dlYlRlc3QuamF2YQpAQCAtMzEsMTIgKzMxLDEyIEBACiBpbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgICAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMzsKIAogICAgIHByaXZhdGUgU3RyaW5nIGNvbnRleHRQYXRoID0gInRlc3QiOwotICAgIAorCiAgICAgQEJlZm9yZUNsYXNzCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldHVwKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3N0YXRpYy1zaGVsbC1pbml0L3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3N0YXRpYy1zaGVsbC1pbml0L3BvbS54bWwKaW5kZXggZTkwOTc4Ny4uZTdlMzg1ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi9zdGF0aWMtc2hlbGwtaW5pdC9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vc3RhdGljLXNoZWxsLWluaXQvcG9tLnhtbApAQCAtMzksOSArMzksOSBAQAogICAgICAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2gubWFpbi5leHRyYXM8L2dyb3VwSWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nbGFzc2Zpc2gtZW1iZWRkZWQtc3RhdGljLXNoZWxsPC9hcnRpZmFjdElkPgotCQkJPHNjb3BlPnN5c3RlbTwvc2NvcGU+Ci0JCQk8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+Ci0JCQk8c3lzdGVtUGF0aD4ke2Vudi5TMUFTX0hPTUV9L2xpYi9lbWJlZGRlZC9nbGFzc2Zpc2gtZW1iZWRkZWQtc3RhdGljLXNoZWxsLmphcjwvc3lzdGVtUGF0aD4KKyAgICAgICAgICAgIDxzY29wZT5zeXN0ZW08L3Njb3BlPgorICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgPHN5c3RlbVBhdGg+JHtlbnYuUzFBU19IT01FfS9saWIvZW1iZWRkZWQvZ2xhc3NmaXNoLWVtYmVkZGVkLXN0YXRpYy1zaGVsbC5qYXI8L3N5c3RlbVBhdGg+CiAgICAgICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY2llcz4KICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vd2Vic2VydmljZS9zcmMvbWFpbi9qYXZhL3Rlc3QvU2ltcGxlV2ViU2VydmljZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi93ZWJzZXJ2aWNlL3NyYy9tYWluL2phdmEvdGVzdC9TaW1wbGVXZWJTZXJ2aWNlLmphdmEKaW5kZXggNmMyMzc3Mi4uY2NmN2M1MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi93ZWJzZXJ2aWNlL3NyYy9tYWluL2phdmEvdGVzdC9TaW1wbGVXZWJTZXJ2aWNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi93ZWJzZXJ2aWNlL3NyYy9tYWluL2phdmEvdGVzdC9TaW1wbGVXZWJTZXJ2aWNlLmphdmEKQEAgLTIxLDE4ICsyMSwxOCBAQAogQFdlYlNlcnZpY2UKIHB1YmxpYyBjbGFzcyBTaW1wbGVXZWJTZXJ2aWNlIHsKIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0iYWRkIikKLQlwdWJsaWMgaW50IGFkZChpbnQgaSwgaW50IGopIHRocm93cyBFeGNlcHRpb24gewotCQlpbnQgayA9IGkgK2ogOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oaSArICIrIiArIGogKyIgPSAiICsgayk7IAotCQlyZXR1cm4gazsKLQl9CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiKQorICAgIHB1YmxpYyBpbnQgYWRkKGludCBpLCBpbnQgaikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGludCBrID0gaSAraiA7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpICsgIisiICsgaiArIiA9ICIgKyBrKTsKKyAgICAgICAgcmV0dXJuIGs7CisgICAgfQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIaSIpCi0JcHVibGljIFN0cmluZyBzYXlIaSgpIHRocm93cyBFeGNlcHRpb24gewotCSAgU3lzdGVtLm91dC5wcmludGxuKCJoaSBmcm9tIFNpbXBsZVdlYlNlcnZpY2UiKTsKLQkgIHJldHVybiAiaGkgZnJvbSBTaW1wbGVXZWJTZXJ2aWNlIjsKLQl9CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIaSIpCisgICAgcHVibGljIFN0cmluZyBzYXlIaSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJoaSBmcm9tIFNpbXBsZVdlYlNlcnZpY2UiKTsKKyAgICAgIHJldHVybiAiaGkgZnJvbSBTaW1wbGVXZWJTZXJ2aWNlIjsKKyAgICB9CiAKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi93ZWJzZXJ2aWNlL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3dlYnNlcnZpY2Uvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAppbmRleCAxYjlhMjkxLi45YzBjZDY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3dlYnNlcnZpY2Uvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3dlYnNlcnZpY2Uvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICAgdmVyc2lvbj0iMy4wIj4KLSAgICAgCisKICAgICA8c2Vzc2lvbi1jb25maWc+CiAgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+MTA8L3Nlc3Npb24tdGltZW91dD4KICAgICA8L3Nlc3Npb24tY29uZmlnPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi93ZWJzZXJ2aWNlL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9zdGFuZGFsb25ld2FyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vd2Vic2VydmljZS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvc3RhbmRhbG9uZXdhci9XZWJUZXN0LmphdmEKaW5kZXggOTNlYWUzYi4uZmY4OWZiYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi93ZWJzZXJ2aWNlL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9zdGFuZGFsb25ld2FyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3dlYnNlcnZpY2Uvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3N0YW5kYWxvbmV3YXIvV2ViVGVzdC5qYXZhCkBAIC0zMiwxMiArMzIsMTIgQEAKIGltcG9ydCBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQ7CiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAgICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDM7CiAKICAgICBwcml2YXRlIFN0cmluZyBjb250ZXh0UGF0aCA9ICJ0ZXN0IjsKLSAgICAKKwogICAgIEBCZWZvcmVDbGFzcwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXR1cCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi93ZWJzb2NrZXRzL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9zdGFuZGFsb25ld2FyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9tYXZlbi1wbHVnaW4vd2Vic29ja2V0cy9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvc3RhbmRhbG9uZXdhci9XZWJUZXN0LmphdmEKaW5kZXggZjcyYTZhZi4uZjdiZDlhZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL21hdmVuLXBsdWdpbi93ZWJzb2NrZXRzL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9zdGFuZGFsb25ld2FyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvbWF2ZW4tcGx1Z2luL3dlYnNvY2tldHMvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3N0YW5kYWxvbmV3YXIvV2ViVGVzdC5qYXZhCkBAIC0zMSwxMiArMzEsMTIgQEAKIGltcG9ydCBqYXZhLm5ldC5VUkxDb25uZWN0aW9uOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAzOwogCiAgICAgcHJpdmF0ZSBTdHJpbmcgY29udGV4dFBhdGggPSAidGVzdCI7Ci0gICAgCisKICAgICBAQmVmb3JlQ2xhc3MKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0dXAoKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9teXNxbC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL1BlcnNvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL215c3FsL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvUGVyc29uLmphdmEKaW5kZXggYmM0NzBiYy4uMGQyZjU4OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL215c3FsL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvUGVyc29uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL215c3FsL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvUGVyc29uLmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICBwcml2YXRlIFN0cmluZyBwcm9mZXNzaW9uOwogCiAgICAgcHVibGljIFBlcnNvbigpIHt9Ci0gICAgCisKICAgICBwdWJsaWMgUGVyc29uKFN0cmluZyB1dWlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHByb2Zlc3Npb24pIHsKICAgICAgICAgc2V0VXVpZCh1dWlkKTsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3BvbS54bWwKaW5kZXggYTQyYmU1Ny4uMDkwNmE3NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3BvbS54bWwKQEAgLTI0LDE1ICsyNCwxNSBAQAogICAgIDxhcnRpZmFjdElkPmVtYmVkZGVkPC9hcnRpZmFjdElkPgogICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+Ci0gICAgPG5hbWU+R2xhc3NGaXNoIEVtYmVkZGVkIFRlc3RzPC9uYW1lPiAgCisgICAgPG5hbWU+R2xhc3NGaXNoIEVtYmVkZGVkIFRlc3RzPC9uYW1lPgogCiAgICAgPG1vZHVsZXM+Ci0gICAgCTxtb2R1bGU+YmFzaWM8L21vZHVsZT4KLSAgICAJPG1vZHVsZT5jZGlfYmFzaWM8L21vZHVsZT4KLSAgICAJPG1vZHVsZT5jZGlfZWpiX2pwYTwvbW9kdWxlPgotICAgIAk8bW9kdWxlPmdsYXNzZmlzaF9yZXNvdXJjZXNfeG1sPC9tb2R1bGU+Ci0gICAgCTxtb2R1bGU+ZWpiPC9tb2R1bGU+Ci0gICAgCTxtb2R1bGU+c2NhdHRlcmVkYXJjaGl2ZTwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmJhc2ljPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+Y2RpX2Jhc2ljPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+Y2RpX2VqYl9qcGE8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5nbGFzc2Zpc2hfcmVzb3VyY2VzX3htbDwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmVqYjwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPnNjYXR0ZXJlZGFyY2hpdmU8L21vZHVsZT4KICAgICAgICAgPG1vZHVsZT5tYXZlbi1wbHVnaW48L21vZHVsZT4KICAgICAgICAgPG1vZHVsZT53ZWI8L21vZHVsZT4KICAgICA8L21vZHVsZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvcnVuX3Rlc3Quc2ggYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvcnVuX3Rlc3Quc2gKaW5kZXggY2ZlZWJkNS4uNmU1NmI0YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3J1bl90ZXN0LnNoCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9ydW5fdGVzdC5zaApAQCAtNDIsNyArNDIsNyBAQAogICBlY2hvICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz4iID4gJHtKVUR9CiAgIGVjaG8gIjx0ZXN0c3VpdGVzPiIgPj4gJHtKVUR9CiAgIGZvciBpIGluIGBmaW5kIC4gLXR5cGUgZCAtbmFtZSAic3VyZWZpcmUtcmVwb3J0cyJgCi0gIGRvICAgIAorICBkbwogICAgIGxzIC1kIC0xICR7aX0vKi54bWwgfCB4YXJncyBjYXQgfCAke1NFRH0gJ3MvPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIiAqPz4vL2cnID4+ICR7SlVEfQogICBkb25lCiAgIGVjaG8gIjwvdGVzdHN1aXRlcz4iID4+ICR7SlVEfQpAQCAtNTQsMTIgKzU0LDEyIEBACiAgIGNhc2UgJHtURVNUX0lEfSBpbgogICAgIGVtYmVkZGVkX2FsbCkKICAgICAgIHVuemlwX3Rlc3RfcmVzb3VyY2VzICR7V09SS1NQQUNFfS9idW5kbGVzL2dsYXNzZmlzaC56aXAKLSAgIAkgIHRlc3RfcnVuX2VtYmVkZGVkOzsKKyAgICAgICAgIHRlc3RfcnVuX2VtYmVkZGVkOzsKICAgZXNhYwogfQogCiBsaXN0X3Rlc3RfaWRzKCl7Ci0JZWNobyBlbWJlZGRlZF9hbGwKKyAgICBlY2hvIGVtYmVkZGVkX2FsbAogfQogCiBPUFQ9JHsxfQpAQCAtNjcsOSArNjcsOSBAQAogc291cmNlIGBkaXJuYW1lICR7MH1gLy4uL2NvbW1vbl90ZXN0LnNoCiAKIGNhc2UgJHtPUFR9IGluCi0JbGlzdF90ZXN0X2lkcyApCi0JCWxpc3RfdGVzdF9pZHM7OwotCXJ1bl90ZXN0X2lkICkKLQkJdHJhcCAiY29weV90ZXN0X2FydGlmYWN0cyAke1RFU1RfSUR9IiBFWElUCisgICAgbGlzdF90ZXN0X2lkcyApCisgICAgICAgIGxpc3RfdGVzdF9pZHM7OworICAgIHJ1bl90ZXN0X2lkICkKKyAgICAgICAgdHJhcCAiY29weV90ZXN0X2FydGlmYWN0cyAke1RFU1RfSUR9IiBFWElUCiAgICAgcnVuX3Rlc3RfaWQgJHtURVNUX0lEfSA7OwogZXNhYwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3NjYXR0ZXJlZGFyY2hpdmUvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9zY2F0dGVyZWRhcmNoaXZlL3BvbS54bWwKaW5kZXggZGFmM2FhOS4uOGJlYTc2YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3NjYXR0ZXJlZGFyY2hpdmUvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvc2NhdHRlcmVkYXJjaGl2ZS9wb20ueG1sCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPG5hbWU+U2NhdHRlcmVkIEFyY2hpdmUgVGVzdDwvbmFtZT4KICAgICA8YnVpbGQ+Ci0JPGZpbmFsTmFtZT5zY2F0dGVyZWRhcmNoaXZlPC9maW5hbE5hbWU+CisgICAgPGZpbmFsTmFtZT5zY2F0dGVyZWRhcmNoaXZlPC9maW5hbE5hbWU+CiAgICAgICAgIDxwbHVnaW5zPgogICAgICAgICAgICAgPHBsdWdpbj4KICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CkBAIC00MSwxNSArNDEsMTUgQEAKICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zdXJlZmlyZS1wbHVnaW48L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi40LjI8L3ZlcnNpb24+CiAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxmb3JrQ291bnQ+MTwvZm9ya0NvdW50PiAKKyAgICAgICAgICAgICAgICAgICAgPGZvcmtDb3VudD4xPC9mb3JrQ291bnQ+CiAgICAgICAgICAgICAgICAgICAgIDxyZXVzZUZvcmtzPmZhbHNlPC9yZXVzZUZvcmtzPgotCQkgICAgICAgICAgICA8dXNlU3lzdGVtQ2xhc3NMb2FkZXI+ZmFsc2U8L3VzZVN5c3RlbUNsYXNzTG9hZGVyPgotCQkgICAgICAgICAgICA8dXNlTWFuaWZlc3RPbmx5SmFyPmZhbHNlPC91c2VNYW5pZmVzdE9ubHlKYXI+CisgICAgICAgICAgICAgICAgICAgIDx1c2VTeXN0ZW1DbGFzc0xvYWRlcj5mYWxzZTwvdXNlU3lzdGVtQ2xhc3NMb2FkZXI+CisgICAgICAgICAgICAgICAgICAgIDx1c2VNYW5pZmVzdE9ubHlKYXI+ZmFsc2U8L3VzZU1hbmlmZXN0T25seUphcj4KICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICA8L3BsdWdpbj4KICAgICAgICAgPC9wbHVnaW5zPgogICAgIDwvYnVpbGQ+Ci0JPHByb2ZpbGVzPgorICAgIDxwcm9maWxlcz4KICAgICAgICAgPHByb2ZpbGU+CiAgICAgICAgICAgICA8aWQ+cnVuLXdpdGgtdWJlci1qYXI8L2lkPgogICAgICAgICAgICAgPGFjdGl2YXRpb24+CkBAIC04MiwxMiArODIsMTIgQEAKICAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgICAgICA8L2RlcGVuZGVuY2llcz4KICAgICAgICAgPC9wcm9maWxlPgotICAgIDwvcHJvZmlsZXM+CQotCTxkZXBlbmRlbmNpZXM+CisgICAgPC9wcm9maWxlcz4KKyAgICA8ZGVwZW5kZW5jaWVzPgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj40LjEzLjI8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICA8L2RlcGVuZGVuY2llcz4gICAgCisgICAgPC9kZXBlbmRlbmNpZXM+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvc2NhdHRlcmVkYXJjaGl2ZS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvc2NhdHRlcmVkYXJjaGl2ZS9TY2F0dGVyZWRBcmNoaXZlVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9zY2F0dGVyZWRhcmNoaXZlL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9zY2F0dGVyZWRhcmNoaXZlL1NjYXR0ZXJlZEFyY2hpdmVUZXN0U2VydmxldC5qYXZhCmluZGV4IDhmMDFiNzQuLjQ5NjBiMTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9zY2F0dGVyZWRhcmNoaXZlL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9zY2F0dGVyZWRhcmNoaXZlL1NjYXR0ZXJlZEFyY2hpdmVUZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9zY2F0dGVyZWRhcmNoaXZlL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9zY2F0dGVyZWRhcmNoaXZlL1NjYXR0ZXJlZEFyY2hpdmVUZXN0U2VydmxldC5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiBAV2ViU2VydmxldChuYW1lID0gIlNjYXR0ZXJlZEFyY2hpdmVUZXN0U2VydmxldCIsCiAgICAgICAgIHVybFBhdHRlcm5zID0gIi9TY2F0dGVyZWRBcmNoaXZlVGVzdFNlcnZsZXQiKQogcHVibGljIGNsYXNzIFNjYXR0ZXJlZEFyY2hpdmVUZXN0U2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCBodHRwU2VydmxldFJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgSHR0cFNlcnZsZXRSZXNwb25zZSBodHRwU2VydmxldFJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3NjYXR0ZXJlZGFyY2hpdmUvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvc2NhdHRlcmVkYXJjaGl2ZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbAppbmRleCBiZjlhMWUyLi4wMWYxOTk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvc2NhdHRlcmVkYXJjaGl2ZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvc2NhdHRlcmVkYXJjaGl2ZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbApAQCAtMTksNSArMTksNSBAQAogCiA8IURPQ1RZUEUgc3VuLXdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDguMSBTZXJ2bGV0IDIuNC8vRU4iICJodHRwOi8vd3d3LnN1bi5jb20vc29mdHdhcmUvYXBwc2VydmVyL2R0ZHMvc3VuLXdlYi1hcHBfMl80LTEuZHRkIj4KIDxzdW4td2ViLWFwcD4KLSAgPGNvbnRleHQtcm9vdD4vc2F0ZXN0PC9jb250ZXh0LXJvb3Q+IAorICA8Y29udGV4dC1yb290Pi9zYXRlc3Q8L2NvbnRleHQtcm9vdD4KIDwvc3VuLXdlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvc2NhdHRlcmVkYXJjaGl2ZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3NjYXR0ZXJlZGFyY2hpdmUvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAppbmRleCBhY2U1Mjk3Li42MzQ3YzlmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvc2NhdHRlcmVkYXJjaGl2ZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9zY2F0dGVyZWRhcmNoaXZlL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTE4LDYgKzE4LDYgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIzLjAiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiPgotICA8ZGlzcGxheS1uYW1lPmpzcHRlc3Q8L2Rpc3BsYXktbmFtZT4gIAorICA8ZGlzcGxheS1uYW1lPmpzcHRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgPGRpc3RyaWJ1dGFibGUvPgogPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3NlcnZsZXRfcnVuc19hZG1pbl9jbWRzL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvc2VydmxldF9ydW5zX2FkbWluX2NtZHMvcG9tLnhtbAppbmRleCAwMzZhNDVlLi44OGQxZjFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvc2VydmxldF9ydW5zX2FkbWluX2NtZHMvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvc2VydmxldF9ydW5zX2FkbWluX2NtZHMvcG9tLnhtbApAQCAtMjYsNyArMjYsNyBAQAogICAgIDxuYW1lPlNlcnZsZXQgUnVubmluZyBBZG1pbiBDb21tYW5kcyB1c2luZyBvcmcuZ2xhc3NmaXNoLmVtYmVkZGFibGUuQ29tbWFuZFJ1bm5lcjwvbmFtZT4KICAgICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgogICAgIDxidWlsZD4KLQk8ZmluYWxOYW1lPnNlcnZsZXRfcnVuc19hZG1pbl9jbWRzPC9maW5hbE5hbWU+CisgICAgPGZpbmFsTmFtZT5zZXJ2bGV0X3J1bnNfYWRtaW5fY21kczwvZmluYWxOYW1lPgogICAgICAgICA8cGx1Z2lucz4KICAgICAgICAgICAgIDxwbHVnaW4+CiAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgpAQCAtNTcsNyArNTcsNyBAQAogICAgICAgICAgICAgPC9wbHVnaW4+CiAgICAgICAgIDwvcGx1Z2lucz4KICAgICA8L2J1aWxkPgotCTxwcm9maWxlcz4KKyAgICA8cHJvZmlsZXM+CiAgICAgICAgIDxwcm9maWxlPgogICAgICAgICAgICAgPGlkPnJ1bi13aXRoLTMuMS4xPC9pZD4KICAgICAgICAgICAgIDxhY3RpdmF0aW9uPgpAQCAtOTEsOCArOTEsOCBAQAogICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgogICAgICAgICA8L3Byb2ZpbGU+Ci0gICAgPC9wcm9maWxlcz4JCi0JPGRlcGVuZGVuY2llcz4KKyAgICA8L3Byb2ZpbGVzPgorICAgIDxkZXBlbmRlbmNpZXM+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KQEAgLTExMSw2ICsxMTEsNiBAQAogICAgICAgICAgICAgPHZlcnNpb24+NC4wLjA8L3ZlcnNpb24+CiAgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPC9kZXBlbmRlbmNpZXM+ICAgIAorICAgIDwvZGVwZW5kZW5jaWVzPgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvc3RhdGljL2VqYi9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3N0YXRpYy9lamIvcG9tLnhtbAppbmRleCA5MjMxNDg3Li5hMzMzZDRkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvc3RhdGljL2VqYi9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9zdGF0aWMvZWpiL3BvbS54bWwKQEAgLTI5LDggKzI5LDggQEAKICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLnRlc3RzLmVtYmVkZGVkLnN0YXRpYzwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5lamI8L2FydGlmYWN0SWQ+CiAgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KLSAgICA8bmFtZT5HbGFzc0Zpc2ggU3RhdGljIEVtYmVkZGVkIEVKQiBUZXN0czwvbmFtZT4gIAorICAgIDxuYW1lPkdsYXNzRmlzaCBTdGF0aWMgRW1iZWRkZWQgRUpCIFRlc3RzPC9uYW1lPgogICAgIDxtb2R1bGVzPgotICAgIAk8bW9kdWxlPnNpbXBsZTwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPnNpbXBsZTwvbW9kdWxlPgogICAgIDwvbW9kdWxlcz4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9zdGF0aWMvZWpiL3NpbXBsZS9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3N0YXRpYy9lamIvc2ltcGxlL3BvbS54bWwKaW5kZXggMDA2YjIzOC4uY2RmNDVlOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3N0YXRpYy9lamIvc2ltcGxlL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3N0YXRpYy9lamIvc2ltcGxlL3BvbS54bWwKQEAgLTI4LDcgKzI4LDcgQEAKICAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC50ZXN0cy5lbWJlZGRlZC5zdGF0aWMuZWpiPC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPnNpbXBsZTwvYXJ0aWZhY3RJZD4KLQk8bmFtZT5FSkIgc3RhdGljIHNpbXBsZSB0ZXN0PC9uYW1lPgorICAgIDxuYW1lPkVKQiBzdGF0aWMgc2ltcGxlIHRlc3Q8L25hbWU+CiAgICAgPGRlcGVuZGVuY2llcz4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5qYWthcnRhLmVqYjwvZ3JvdXBJZD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9zdGF0aWMvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9zdGF0aWMvcG9tLnhtbAppbmRleCBkMjUzMDRhLi5mY2E4ZGUwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvc3RhdGljL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3N0YXRpYy9wb20ueG1sCkBAIC0yOSw5ICsyOSw5IEBACiAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC50ZXN0cy5lbWJlZGRlZDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5zdGF0aWM8L2FydGlmYWN0SWQ+CiAgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KLSAgICA8bmFtZT5HbGFzc0Zpc2ggU3RhdGljIEVtYmVkZGVkIFRlc3RzPC9uYW1lPiAgCisgICAgPG5hbWU+R2xhc3NGaXNoIFN0YXRpYyBFbWJlZGRlZCBUZXN0czwvbmFtZT4KICAgICA8bW9kdWxlcz4KLSAgICAJPG1vZHVsZT5lamI8L21vZHVsZT4KLSAgICAgICAgPG1vZHVsZT53ZWI8L21vZHVsZT4gICAgICAKKyAgICAgICAgPG1vZHVsZT5lamI8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT53ZWI8L21vZHVsZT4KICAgICA8L21vZHVsZXM+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvc3RhdGljL3dlYi9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3N0YXRpYy93ZWIvcG9tLnhtbAppbmRleCA0ZGFlODUwLi4wMjRmZWY5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvc3RhdGljL3dlYi9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9zdGF0aWMvd2ViL3BvbS54bWwKQEAgLTYwLDEzICs2MCwxMyBAQAogICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zdXJlZmlyZS1wbHVnaW48L2FydGlmYWN0SWQ+CiAgICAgICAgIDx2ZXJzaW9uPjIuNC4yPC92ZXJzaW9uPgogICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICA8Zm9ya0NvdW50PjE8L2ZvcmtDb3VudD4gCisgICAgICAgICAgPGZvcmtDb3VudD4xPC9mb3JrQ291bnQ+CiAgICAgICAgICAgPHJldXNlRm9ya3M+ZmFsc2U8L3JldXNlRm9ya3M+CiAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgIDwvcGx1Z2luPgogICAgIDwvcGx1Z2lucz4KICAgPC9idWlsZD4KLSAgICAKKwogICAgIDxkZXBlbmRlbmNpZXM+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5tYWluLmV4dHJhczwvZ3JvdXBJZD4KQEAgLTc5LDEwICs3OSwxMCBAQAogICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgCTxncm91cElkPm9yZy5nbGFzc2Zpc2guYWRtaW48L2dyb3VwSWQ+Ci0gICAgICAgIAk8YXJ0aWZhY3RJZD5jb25maWctYXBpPC9hcnRpZmFjdElkPgotICAgICAgICAJPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAgICAgCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLmFkbWluPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29uZmlnLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvc3RhdGljL3dlYi9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvY29va2VkL0V4aXN0aW5nRG9tYWluVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3N0YXRpYy93ZWIvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2Nvb2tlZC9FeGlzdGluZ0RvbWFpblRlc3QuamF2YQppbmRleCBjM2NlMjRlLi5iMDQwZGQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvc3RhdGljL3dlYi9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvY29va2VkL0V4aXN0aW5nRG9tYWluVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9zdGF0aWMvd2ViL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9jb29rZWQvRXhpc3RpbmdEb21haW5UZXN0LmphdmEKQEAgLTExNSw1ICsxMTUsNSBAQAogCiAKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9zdGF0aWMvd2ViL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC9jb29rZWQvSW5wbGFudGVkVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3N0YXRpYy93ZWIvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2Nvb2tlZC9JbnBsYW50ZWRUZXN0LmphdmEKaW5kZXggNGJmNDUxNi4uMGQ2MjJkOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3N0YXRpYy93ZWIvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2Nvb2tlZC9JbnBsYW50ZWRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3N0YXRpYy93ZWIvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL2Nvb2tlZC9JbnBsYW50ZWRUZXN0LmphdmEKQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGNhdGNoIHN0YXRlbWVudCB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCiAgICAgICAgIH0gY2F0Y2ggKExpZmVjeWNsZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOyAgLy9UbyBjaGFuZ2UgYm9keSBvZiBjYXRjaCBzdGF0ZW1lbnQgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgotICAgICAgICB9IAorICAgICAgICB9CiAgICAgfQogCiAgICAgQFRlc3QKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvc3RhdGljL3dlYi9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0hlbGxvV2ViLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvc3RhdGljL3dlYi9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0hlbGxvV2ViLmphdmEKaW5kZXggZGU5YTc0Zi4uZTE0NDIzNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3N0YXRpYy93ZWIvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9IZWxsb1dlYi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC9zdGF0aWMvd2ViL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvSGVsbG9XZWIuamF2YQpAQCAtMjksMTYgKzI5LDE2IEBACiAgICAgcHVibGljIEhlbGxvV2ViKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlcnZsZXQgV0VCLUhFTExPIGluaXRpYWxpemVkIik7CiAgICAgfQotICAgCisKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAKIAogICAgICAgICBQcmludFdyaXRlciBwdyA9IHJlcy5nZXRXcml0ZXIoKTsKICAgICAgICAgdHJ5IHsKLQkJCXB3LnByaW50bG4oIkhlbGxvIFdvcmxkICEiKTsKLSAgCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIAllLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgcHcucHJpbnRsbigiSGVsbG8gV29ybGQgISIpOworICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvdXRpbHMvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC91dGlscy9wb20ueG1sCmluZGV4IDMzMjZhOTMuLmIxOGVhMTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC91dGlscy9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC91dGlscy9wb20ueG1sCkBAIC0zOSw2ICszOSw2IEBACiAgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+NC4xMy4yPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAKKyAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgIDwvZGVwZW5kZW5jaWVzPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3V0aWxzL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC91dGlscy9FbWJlZGRlZFNlcnZlclV0aWxzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvdXRpbHMvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3V0aWxzL0VtYmVkZGVkU2VydmVyVXRpbHMuamF2YQppbmRleCAxZTliYWY4Li45ZDYzMzA2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvdXRpbHMvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3V0aWxzL0VtYmVkZGVkU2VydmVyVXRpbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvdXRpbHMvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3V0aWxzL0VtYmVkZGVkU2VydmVyVXRpbHMuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgIHB1YmxpYyBzdGF0aWMgRmlsZSBnZXREb21haW5Mb2NhdGlvbihGaWxlIHNlcnZlckxvY2F0aW9uKSB7CiAgICAgICAgIHJldHVybiBnZXREb21haW5Mb2NhdGlvbihzZXJ2ZXJMb2NhdGlvbiwgImRvbWFpbjEiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIEZpbGUgZ2V0RG9tYWluTG9jYXRpb24oRmlsZSBzZXJ2ZXJMb2NhdGlvbiwgU3RyaW5nIGRvbWFpbk5hbWUpIHsKIAogICAgICAgIC8vIGZpbmQgdGhlIGRvbWFpbiByb290LgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi9hdXRvZGVsZXRlL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL2F1dG9kZWxldGUvcG9tLnhtbAppbmRleCBkOGM0Njk5Li43NmUzODA0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL2F1dG9kZWxldGUvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL2F1dG9kZWxldGUvcG9tLnhtbApAQCAtNzIsNyArNzIsNyBAQAogICAgICAgICAgICAgICA8Y2xhc3NwYXRoU2NvcGU+dGVzdDwvY2xhc3NwYXRoU2NvcGU+CiAgICAgICAgICAgICAgIDxpbmNsdWRlUHJvamVjdERlcGVuZGVuY2llcz50cnVlPC9pbmNsdWRlUHJvamVjdERlcGVuZGVuY2llcz4KICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICA8L3BsdWdpbj4gICAgICAgICAgICAKKyAgICAgIDwvcGx1Z2luPgogICAgICAgICA8L3BsdWdpbnM+CiAgICAgPC9idWlsZD4KICAgICA8ZGVwZW5kZW5jaWVzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi9hdXRvZGVsZXRlL3NyYy9tYWluL2phdmEvSGVsbG9Xb3JsZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi9hdXRvZGVsZXRlL3NyYy9tYWluL2phdmEvSGVsbG9Xb3JsZC5qYXZhCmluZGV4IGQwYWQ1YWUuLmUxMjhkNGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvYXV0b2RlbGV0ZS9zcmMvbWFpbi9qYXZhL0hlbGxvV29ybGQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL2F1dG9kZWxldGUvc3JjL21haW4vamF2YS9IZWxsb1dvcmxkLmphdmEKQEAgLTE2LDIyICsxNiwyMiBAQAogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGpha2FydGEuc2VydmxldC5hbm5vdGF0aW9uLldlYlNlcnZsZXQ7IAoraW1wb3J0IGpha2FydGEuc2VydmxldC5hbm5vdGF0aW9uLldlYlNlcnZsZXQ7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIAogQFdlYlNlcnZsZXQodXJsUGF0dGVybnM9eyIvaGVsbG8ifSkKIHB1YmxpYyBjbGFzcyBIZWxsb1dvcmxkIGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCi0gIAorCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBQcmludFdyaXRlciBwdyA9IHJlcy5nZXRXcml0ZXIoKTsKICAgICAgICAgdHJ5IHsKLQkJCXB3LnByaW50bG4oIkhlbGxvIFdvcmxkICE8YnI+Iik7Ci0gIAkJfSBjYXRjaChFeGNlcHRpb24gZSkgewotICAgICAgICAJZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIHB3LnByaW50bG4oIkhlbGxvIFdvcmxkICE8YnI+Iik7CisgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvYXV0b2RlbGV0ZS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL2F1dG9kZWxldGUvU2VydmxldE1haW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvYXV0b2RlbGV0ZS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL2F1dG9kZWxldGUvU2VydmxldE1haW4uamF2YQppbmRleCBjN2FlZGJjLi4zMmY1NzFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL2F1dG9kZWxldGUvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9hdXRvZGVsZXRlL1NlcnZsZXRNYWluLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi9hdXRvZGVsZXRlL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvYXV0b2RlbGV0ZS9TZXJ2bGV0TWFpbi5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOyAgLy9UbyBjaGFuZ2UgYm9keSBvZiBjYXRjaCBzdGF0ZW1lbnQgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvcG9tLnhtbAppbmRleCAwNDFiNTY4Li42MjNjYjM1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi9wb20ueG1sCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgPGFydGlmYWN0SWQ+d2ViPC9hcnRpZmFjdElkPgogICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CiAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+Ci0gICAgPG5hbWU+R2xhc3NGaXNoIFdlYiBFbWJlZGRlZCBUZXN0czwvbmFtZT4gIAorICAgIDxuYW1lPkdsYXNzRmlzaCBXZWIgRW1iZWRkZWQgVGVzdHM8L25hbWU+CiAgICAgPG1vZHVsZXM+CiAgICAgICAgIDxtb2R1bGU+d2ViLWFwaTwvbW9kdWxlPgogICAgIDwvbW9kdWxlcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvc2VydmxldC9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi9zZXJ2bGV0L3BvbS54bWwKaW5kZXggZjRjMThmZC4uYmYxMTc2YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi9zZXJ2bGV0L3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi9zZXJ2bGV0L3BvbS54bWwKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgICAgICAgPGNsYXNzcGF0aFNjb3BlPnRlc3Q8L2NsYXNzcGF0aFNjb3BlPgogICAgICAgICAgICAgICA8aW5jbHVkZVByb2plY3REZXBlbmRlbmNpZXM+dHJ1ZTwvaW5jbHVkZVByb2plY3REZXBlbmRlbmNpZXM+CiAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgPC9wbHVnaW4+ICAgICAgICAgICAgCisgICAgICA8L3BsdWdpbj4KICAgICAgICAgPC9wbHVnaW5zPgogICAgIDwvYnVpbGQ+CiAgICAgPGRlcGVuZGVuY2llcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvc2VydmxldC9zcmMvbWFpbi9qYXZhL0hlbGxvV29ybGQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvc2VydmxldC9zcmMvbWFpbi9qYXZhL0hlbGxvV29ybGQuamF2YQppbmRleCBkMGFkNWFlLi5lMTI4ZDRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3NlcnZsZXQvc3JjL21haW4vamF2YS9IZWxsb1dvcmxkLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi9zZXJ2bGV0L3NyYy9tYWluL2phdmEvSGVsbG9Xb3JsZC5qYXZhCkBAIC0xNiwyMiArMTYsMjIgQEAKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYWthcnRhLnNlcnZsZXQuYW5ub3RhdGlvbi5XZWJTZXJ2bGV0OyAKK2ltcG9ydCBqYWthcnRhLnNlcnZsZXQuYW5ub3RhdGlvbi5XZWJTZXJ2bGV0OwogaW1wb3J0IGpha2FydGEuc2VydmxldC4qOwogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7CiAKIEBXZWJTZXJ2bGV0KHVybFBhdHRlcm5zPXsiL2hlbGxvIn0pCiBwdWJsaWMgY2xhc3MgSGVsbG9Xb3JsZCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAotICAKKwogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgUHJpbnRXcml0ZXIgcHcgPSByZXMuZ2V0V3JpdGVyKCk7CiAgICAgICAgIHRyeSB7Ci0JCQlwdy5wcmludGxuKCJIZWxsbyBXb3JsZCAhPGJyPiIpOwotICAJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgCWUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBwdy5wcmludGxuKCJIZWxsbyBXb3JsZCAhPGJyPiIpOworICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3NlcnZsZXQvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9zZXJ2bGV0L1NlcnZsZXRNYWluLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3NlcnZsZXQvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9zZXJ2bGV0L1NlcnZsZXRNYWluLmphdmEKaW5kZXggNjMwODNhMC4uOGU0OThlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi9zZXJ2bGV0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvc2VydmxldC9TZXJ2bGV0TWFpbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvc2VydmxldC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL3NlcnZsZXQvU2VydmxldE1haW4uamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsgIC8vVG8gY2hhbmdlIGJvZHkgb2YgY2F0Y2ggc3RhdGVtZW50IHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24gewogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hbGwvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFsbC9wb20ueG1sCmluZGV4IGNmMjU1ZWMuLjE3OGI4MmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFsbC9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFsbC9wb20ueG1sCkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAgICAgICAgIDwvcGx1Z2luPgogICAgICAgICA8L3BsdWdpbnM+CiAgICAgPC9idWlsZD4KLQk8cHJvZmlsZXM+CisgICAgPHByb2ZpbGVzPgogICAgICAgICA8cHJvZmlsZT4KICAgICAgICAgICAgIDxpZD5ydW4td2l0aC11YmVyLWphcjwvaWQ+CiAgICAgICAgICAgICA8YWN0aXZhdGlvbj4KQEAgLTEyMiw3ICsxMjIsNyBAQAogICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLmV4dHJhczwvZ3JvdXBJZD4KICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2xhc3NmaXNoLWVtYmVkZGVkLWFsbDwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgICAgICA8L2RlcGVuZGVuY2llcz4KICAgICAgICAgPC9wcm9maWxlPgogICAgICAgICA8cHJvZmlsZT4KQEAgLTE0NSwxMyArMTQ1LDEzIEBACiAgICAgICAgICAgICA8L2RlcGVuZGVuY2llcz4KICAgICAgICAgPC9wcm9maWxlPgogICAgIDwvcHJvZmlsZXM+Ci0JPGRlcGVuZGVuY2llcz4KKyAgICA8ZGVwZW5kZW5jaWVzPgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj40LjEzLjI8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICA8L2RlcGVuZGVuY2llcz4gICAgCisgICAgPC9kZXBlbmRlbmNpZXM+CiAgICAgPGxpY2Vuc2VzPgogICAgICAgICA8bGljZW5zZT4KICAgICAgICAgICAgIDxuYW1lPkVQTCAyLjA8L25hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hbGwvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3dlYmFsbC9XZWJIZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYWxsL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy93ZWJhbGwvV2ViSGVsbG8uamF2YQppbmRleCBiYzBkZTJjLi5jNGM4ZDViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hbGwvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3dlYmFsbC9XZWJIZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFsbC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvd2ViYWxsL1dlYkhlbGxvLmphdmEKQEAgLTM5LDkgKzM5LDkgQEAKIAogICAgICAgICBQcmludFdyaXRlciBwdyA9IHJlcy5nZXRXcml0ZXIoKTsKICAgICAgICAgdHJ5IHsKLQkJCXB3LnByaW50bG4oIkhlbGxvIFdvcmxkISIpOwotICAJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgCWUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBwdy5wcmludGxuKCJIZWxsbyBXb3JsZCEiKTsKKyAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYWxsL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy93ZWJhbGwvV2ViQWxsVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYWxsL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy93ZWJhbGwvV2ViQWxsVGVzdC5qYXZhCmluZGV4IGE1NjQ1OWUuLmRkY2I2MDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFsbC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvd2ViYWxsL1dlYkFsbFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hbGwvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3dlYmFsbC9XZWJBbGxUZXN0LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKIHB1YmxpYyBjbGFzcyBXZWJBbGxUZXN0IHsKICAgICBwcml2YXRlIHN0YXRpYyBTZXJ2ZXIgc2VydmVyID0gbnVsbDsKICAgICBwcml2YXRlIHN0YXRpYyBQb3J0IGh0dHA9bnVsbDsKLSAgICAKKwogICAgIEBCZWZvcmVDbGFzcwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXR1cCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAKQEAgLTUyLDcgKzUyLDcgQEAKIAogICAgICAgICBFbWJlZGRlZEZpbGVTeXN0ZW0gZnMgPSBmc0J1aWxkZXIuaW5zdGFuY2VSb290KHJvb3QpLmJ1aWxkKCk7CiAgICAgICAgIFNlcnZlci5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU2VydmVyLkJ1aWxkZXIoIldlYkFsbFRlc3QiKTsKLSAgICAgICAgYnVpbGRlci5lbWJlZGRlZEZpbGVTeXN0ZW0oZnMpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgYnVpbGRlci5lbWJlZGRlZEZpbGVTeXN0ZW0oZnMpOwogICAgICAgICBzZXJ2ZXIgPSBidWlsZGVyLmJ1aWxkKCk7CiAgICAgICAgIHNlcnZlci5nZXRIYWJpdGF0KCkuZ2V0U2VydmljZShOZXR3b3JrQ29uZmlnLmNsYXNzLAogICAgICAgICAgICAgICAgIFNlcnZlckVudmlyb25tZW50LkRFRkFVTFRfSU5TVEFOQ0VfTkFNRSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9wb20ueG1sCmluZGV4IDM2ODc5OTAuLmVmNWNlYzggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9wb20ueG1sCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc3VyZWZpcmUtcGx1Z2luPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuNC4yPC92ZXJzaW9uPgogICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8Zm9ya0NvdW50PjE8L2ZvcmtDb3VudD4gCisgICAgICAgICAgICAgICAgICAgIDxmb3JrQ291bnQ+MTwvZm9ya0NvdW50PgogICAgICAgICAgICAgICAgICAgICA8cmV1c2VGb3Jrcz5mYWxzZTwvcmV1c2VGb3Jrcz4KICAgICAgICAgICAgICAgICAgICAgPHVzZVN5c3RlbUNsYXNzTG9hZGVyPmZhbHNlPC91c2VTeXN0ZW1DbGFzc0xvYWRlcj4KICAgICAgICAgICAgICAgICAgICAgPHVzZU1hbmlmZXN0T25seUphcj5mYWxzZTwvdXNlTWFuaWZlc3RPbmx5SmFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy93ZWJhcGkvSGVsbG9XZWIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvd2ViYXBpL0hlbGxvV2ViLmphdmEKaW5kZXggOWFkMDk5Ni4uOTVhZjgzNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy93ZWJhcGkvSGVsbG9XZWIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3dlYmFwaS9IZWxsb1dlYi5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgcHVibGljIEhlbGxvV2ViKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlcnZsZXQgV0VCLUhFTExPIGluaXRpYWxpemVkIik7CiAgICAgfQotICAgCisKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvd2ViYXBpL1Rlc3RMaXN0ZW5lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy93ZWJhcGkvVGVzdExpc3RlbmVyLmphdmEKaW5kZXggZTEzOGQ4Yi4uZGNhMGY3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy93ZWJhcGkvVGVzdExpc3RlbmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy93ZWJhcGkvVGVzdExpc3RlbmVyLmphdmEKQEAgLTI0LDE2ICsyNCwxNiBAQAogICBpbXBsZW1lbnRzIFNlcnZsZXRDb250ZXh0TGlzdGVuZXIKIHsKICAgcHVibGljIHN0YXRpYyBTdHJpbmcgbXNnID0gIkNvbnRleHQgbm90IFlFVCBpbml0aWFsaXplZCI7Ci0gIAorCiAgIHB1YmxpYyB2b2lkIGNvbnRleHRJbml0aWFsaXplZChTZXJ2bGV0Q29udGV4dEV2ZW50IGV2ZW50KQogICB7CiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0TGlzdGVuZXIgOiBjb250ZXh0SW5pdGlhbGl6ZWQgY2FsbGVkIik7CiAgICAgdHJ5CiAgICAgewogICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0TGlzdGVuZXIgOiBUcnlpbmcgdG8gbG9hZCBUZXN0Q2FjYW9MaXN0Iik7Ci0gICAgICAKKwogICAgICAgQ2xhc3MgYyA9IENsYXNzLmZvck5hbWUoIlRlc3RDYWNhb0xpc3QiKTsKLSAgICAgIAorCiAgICAgICBtc2cgPSAiQ2xhc3MgVGVzdENhY2FvTGlzdCBsb2FkZWQgc3VjY2Vzc2Z1bGx5IGZyb20gbGlzdGVuZXIiOwogICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1zZyk7CiAgICAgfQpAQCAtNDQsNiArNDQsNiBAQAogICAgIH0KICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RMaXN0ZW5lciA6IGNvbnRleHRJbml0aWFsaXplZCBET05FIik7CiAgIH0KLSAgCisKICAgcHVibGljIHZvaWQgY29udGV4dERlc3Ryb3llZChTZXJ2bGV0Q29udGV4dEV2ZW50IGV2ZW50KSB7fQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy93ZWJhcGkvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvd2ViYXBpL1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggMTY4MjA3Yi4uNjZkZDVjYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy93ZWJhcGkvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3dlYmFwaS9UZXN0U2VydmxldC5qYXZhCkBAIC0yOSwyMCArMjksMjAgQEAKICAgZXh0ZW5kcyBIdHRwU2VydmxldAogewogICBwdWJsaWMgU3RyaW5nIG1zZ19saXN0ZW5lciA9IG51bGw7Ci0gIAorCiAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24KICAgewogICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAKKwogICAgIHRoaXMubXNnX2xpc3RlbmVyID0gVGVzdExpc3RlbmVyLm1zZzsKICAgfQotICAKKwogICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgaHR0cFNlcnZsZXRSZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIGh0dHBTZXJ2bGV0UmVzcG9uc2UpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uCiAgIHsKICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlcnZsZXQgVGVzdFNlcnZsZXQgZG9HZXQgY2FsbGVkIik7Ci0gICAgCisKICAgICBTdHJpbmcgbXNnX3NlcnZsZXQgPSBudWxsOwogICAgIHRyeQogICAgIHsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICBvdXQucHJpbnRsbigiU2VydmxldCBNc2cgPSAiICsgbXNnX3NlcnZsZXQpOwogICAgIG91dC5mbHVzaCgpOwogICAgIG91dC5jbG9zZSgpOwotICAgIAorCiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2bGV0IFRlc3RTZXJ2bGV0IGRvR2V0IERPTkUiKTsKICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3dlYmFwaS9kb21haW4ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3dlYmFwaS9kb21haW4ueG1sCmluZGV4IGRiZTIwMDQuLjhkYTg4OTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2dsYXNzZmlzaC90ZXN0cy93ZWJhcGkvZG9tYWluLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL21haW4vcmVzb3VyY2VzL29yZy9nbGFzc2Zpc2gvdGVzdHMvd2ViYXBpL2RvbWFpbi54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8L2pkYmMtY29ubmVjdGlvbi1wb29sPgogICA8L3Jlc291cmNlcz4KICAgPHNlcnZlcnM+Ci0gICAgPHNlcnZlciBuYW1lPSJzZXJ2ZXIiIGNvbmZpZy1yZWY9InNlcnZlci1jb25maWciPiAKKyAgICA8c2VydmVyIG5hbWU9InNlcnZlciIgY29uZmlnLXJlZj0ic2VydmVyLWNvbmZpZyI+CiAgICAgICA8cmVzb3VyY2UtcmVmIHJlZj0iamRiYy9fX1RpbWVyUG9vbCIgLz4KICAgICAgIDxyZXNvdXJjZS1yZWYgcmVmPSJqZGJjL19fZGVmYXVsdCIgLz4KICAgICA8L3NlcnZlcj4KQEAgLTEzMSw3ICsxMzEsNyBAQAogICAgICAgPC9zZWN1cml0eS1zZXJ2aWNlPgogICAgICAgPG1vbml0b3Jpbmctc2VydmljZT4KICAgICAgICAgPG1vZHVsZS1tb25pdG9yaW5nLWxldmVscyAvPgotICAgICAgPC9tb25pdG9yaW5nLXNlcnZpY2U+ICAgICAgCisgICAgICA8L21vbml0b3Jpbmctc2VydmljZT4KICAgICAgIDx0cmFuc2FjdGlvbi1zZXJ2aWNlIHR4LWxvZy1kaXI9IiR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9sb2dzIiA+CiAgICAgICA8L3RyYW5zYWN0aW9uLXNlcnZpY2U+CiAgICAgICA8bmV0d29yay1jb25maWc+CkBAIC0xNDIsMTIgKzE0MiwxMiBAQAogICAgICAgICA8dHJhbnNwb3J0cz4KICAgICAgICAgICA8dHJhbnNwb3J0IG5hbWU9InRjcCI+PC90cmFuc3BvcnQ+CiAgICAgICAgIDwvdHJhbnNwb3J0cz4KLSAgICAgIDwvbmV0d29yay1jb25maWc+ICAgICAgIAorICAgICAgPC9uZXR3b3JrLWNvbmZpZz4KICAgICAgIDx0aHJlYWQtcG9vbHM+CiAgICAgICAgICAgPHRocmVhZC1wb29sIG5hbWU9Imh0dHAtdGhyZWFkLXBvb2wiIG1heC1xdWV1ZS1zaXplPSI0MDk2Ij48L3RocmVhZC1wb29sPgogICAgICAgICAgIDx0aHJlYWQtcG9vbCBuYW1lPSJ0aHJlYWQtcG9vbC0xIiBtYXgtdGhyZWFkLXBvb2wtc2l6ZT0iMjAwIi8+CiAgICAgICA8L3RocmVhZC1wb29scz4KLSAgICA8L2NvbmZpZz4gCisgICAgPC9jb25maWc+CiAgIDwvY29uZmlncz4KICAgPHByb3BlcnR5IG5hbWU9ImFkbWluaXN0cmF0aXZlLmRvbWFpbi5uYW1lIiB2YWx1ZT0iZG9tYWluMSIvPgogPC9kb21haW4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL21haW4vcmVzb3VyY2VzL29yZy9nbGFzc2Zpc2gvdGVzdHMvd2ViYXBpL215LWRlZmF1bHQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2dsYXNzZmlzaC90ZXN0cy93ZWJhcGkvbXktZGVmYXVsdC13ZWIueG1sCmluZGV4IGMyYmVlOWEuLjYzMDYwZjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2dsYXNzZmlzaC90ZXN0cy93ZWJhcGkvbXktZGVmYXVsdC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2dsYXNzZmlzaC90ZXN0cy93ZWJhcGkvbXktZGVmYXVsdC13ZWIueG1sCkBAIC0zMiw3ICszMiw3IEBACiAgIDwhLS0gPT09PT09PT09PT09IEJ1aWx0IEluIENvbnRleHQgSW5pdCBQYXJhbWV0ZXIgRGVmaW5pdGlvbnMgPT09PT09PT09PT0gLS0+CiAKIAotICA8IS0tIEluaXQgcGFyYW1ldGVyIHRvIGZvcmNlIHRoZSBYTUwgdmFsaWRhdGlvbiBvZiBKU0YgY29uZmlndXJhdGlvbiAgLS0+IAorICA8IS0tIEluaXQgcGFyYW1ldGVyIHRvIGZvcmNlIHRoZSBYTUwgdmFsaWRhdGlvbiBvZiBKU0YgY29uZmlndXJhdGlvbiAgLS0+CiAgIDwhLS0gcmVzb3VyY2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KIAogICA8Y29udGV4dC1wYXJhbT4KQEAgLTQxLDE0ICs0MSwxNCBAQAogICA8L2NvbnRleHQtcGFyYW0+CiAKICAgPCEtLSBJbml0IHBhcmFtZXRlciB3aWxsIGNhdXNlIHRoZSBKU0YgaW1wbGVtZW50YXRpb24gdG8gYnlwYXNzICAgICAgLS0+Ci0gIDwhLS0gcHJvY2Vzc2luZyB0aGUgd2ViLnhtbCB0byBkZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIGNvbnRpbnVlICAgICAgIC0tPiAKKyAgPCEtLSBwcm9jZXNzaW5nIHRoZSB3ZWIueG1sIHRvIGRldGVybWluZSBpZiB3ZSBzaG91bGQgY29udGludWUgICAgICAgLS0+CiAgIDwhLS0gYm9vdHN0cmFwcGluZyBKU0YgZm9yIHRoZSB3ZWIgYXBwbGljYXRpb24uICAgICAgICAgICAgICAgICAgICAgIC0tPgogCiAgIDxjb250ZXh0LXBhcmFtPgogICAgICAgPHBhcmFtLW5hbWU+Y29tLnN1bi5mYWNlcy5mb3JjZUxvYWRDb25maWd1cmF0aW9uPC9wYXJhbS1uYW1lPgogICAgICAgPHBhcmFtLXZhbHVlPnRydWU8L3BhcmFtLXZhbHVlPgotICA8L2NvbnRleHQtcGFyYW0+IAotICAgICAgCisgIDwvY29udGV4dC1wYXJhbT4KKwogCiAgIDwhLS0gPT09PT09PT09PT09PT09PT09IEJ1aWx0IEluIFNlcnZsZXQgRGVmaW5pdGlvbnMgPT09PT09PT09PT09PT09PT09PT0gLS0+CiAKQEAgLTI3NSw3ICsyNzUsNyBAQAogICAgIDwvaW5pdC1wYXJhbT4KICAgICA8bG9hZC1vbi1zdGFydHVwPjM8L2xvYWQtb24tc3RhcnR1cD4KICAgPC9zZXJ2bGV0PgotICAKKwogCiAgIDwhLS0gTk9URTogQW4gU1NJIEZpbHRlciBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhbiBhbHRlcm5hdGl2ZSBTU0kgICAgICAgICAgLS0+CiAgIDwhLS0gaW1wbGVtZW50YXRpb24uIFVzZSBlaXRoZXIgdGhlIFNlcnZsZXQgb3IgdGhlIEZpbHRlciBidXQgTk9UIGJvdGguICAgLS0+CkBAIC03MjEsNyArNzIxLDcgQEAKICAgPC9taW1lLW1hcHBpbmc+CiAgIDxtaW1lLW1hcHBpbmc+CiAgICAgPGV4dGVuc2lvbj5tYXRobWw8L2V4dGVuc2lvbj4KLSAgICA8bWltZS10eXBlPmFwcGxpY2F0aW9uL21hdGhtbCt4bWw8L21pbWUtdHlwZT4gCisgICAgPG1pbWUtdHlwZT5hcHBsaWNhdGlvbi9tYXRobWwreG1sPC9taW1lLXR5cGU+CiAgIDwvbWltZS1tYXBwaW5nPgogICA8bWltZS1tYXBwaW5nPgogICAgIDxleHRlbnNpb24+bWU8L2V4dGVuc2lvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKaW5kZXggMWIxMzdlNS4uZjNlOWFmNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTE4LDExICsxOCwxMSBAQAogCiAtLT4KIAotPHdlYi1hcHA+IAorPHdlYi1hcHA+CiAKICAgICA8ZGlzcGxheS1uYW1lPnRvdG88L2Rpc3BsYXktbmFtZT4KICAgICA8ZGVzY3JpcHRpb24+dGhpcyBhIGR1bW15IHdlYiBhcHA8L2Rlc2NyaXB0aW9uPgotICAgICAgICAKKwogICAgIDxsaXN0ZW5lcj4KICAgICAgICAgPGxpc3RlbmVyLWNsYXNzPm9yZy5nbGFzc2Zpc2gudGVzdHMud2ViYXBpLlRlc3RMaXN0ZW5lcjwvbGlzdGVuZXItY2xhc3M+CiAgICAgPC9saXN0ZW5lcj4KQEAgLTM4LDE1ICszOCwxNSBAQAogICAgICAgICA8ZGVzY3JpcHRpb24+VGVzdCBHRiBzZWNvbmRhcnkgc2VydmxldDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPm9yZy5nbGFzc2Zpc2gudGVzdHMud2ViYXBpLlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgogICAgIDwvc2VydmxldD4KLSAgICAKKwogICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdEdGPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vdGVzdGdmPC91cmwtcGF0dGVybj4KICAgICA8L3NlcnZsZXQtbWFwcGluZz4KLSAgICAgICAgICAgIAorCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0R0YyPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vdG90by90ZXN0Z2YyPC91cmwtcGF0dGVybj4KLSAgICA8L3NlcnZsZXQtbWFwcGluZz4gICAgICAgIAotICAgIAorICAgIDwvc2VydmxldC1tYXBwaW5nPgorCiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZEFkZENvbnRleHRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZEFkZENvbnRleHRUZXN0LmphdmEKaW5kZXggNWFjMjEzOC4uNjk1YzVmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRBZGRDb250ZXh0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkQWRkQ29udGV4dFRlc3QuamF2YQpAQCAtMzQsMTQgKzM0LDE0IEBACiAKIC8qKgogICogVGVzdHMgV2ViQ29udGFpbmVyI2NyZWF0ZUNvbnRleHQKLSAqIAorICoKICAqIEBhdXRob3IgQW15IFJvaAogICovCiBwdWJsaWMgY2xhc3MgRW1iZWRkZWRBZGRDb250ZXh0VGVzdCB7CiAKICAgICBzdGF0aWMgR2xhc3NGaXNoIGdsYXNzZmlzaDsKICAgICBzdGF0aWMgV2ViQ29udGFpbmVyIGVtYmVkZGVkOwotICAgIHN0YXRpYyBGaWxlIHJvb3Q7ICAgICAgICAgICAgICAgIAorICAgIHN0YXRpYyBGaWxlIHJvb3Q7CiAgICAgc3RhdGljIFN0cmluZyBjb250ZXh0Um9vdCA9ICJ0ZXN0IjsKIAogICAgIEBCZWZvcmVDbGFzcwpAQCAtNjAsNyArNjAsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFkZGVkIFdlYiB3aXRoIGJhc2UgZGlyZWN0b3J5ICIrcm9vdC5nZXRBYnNvbHV0ZVBhdGgoKSk7CiAgICAgICAgIGVtYmVkZGVkLnNldENvbmZpZ3VyYXRpb24oY29uZmlnKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIApAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICBpbi5jbG9zZSgpOwogCiAgICAgICAgIGVtYmVkZGVkLnJlbW92ZUNvbnRleHQoY29udGV4dCk7Ci0gICAgfSAKKyAgICB9CiAKICAgICBAQWZ0ZXJDbGFzcwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzaHV0ZG93blNlcnZlcigpIHRocm93cyBHbGFzc0Zpc2hFeGNlcHRpb24gewpAQCAtMTA0LDUgKzEwNCw1IEBACiAgICAgICAgICAgICBnbGFzc2Zpc2ggPSBudWxsOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZEFkZEh0dHBzTGlzdGVuZXJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZEFkZEh0dHBzTGlzdGVuZXJUZXN0LmphdmEKaW5kZXggNmQyMTkzOC4uZWE0NzNjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRBZGRIdHRwc0xpc3RlbmVyVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkQWRkSHR0cHNMaXN0ZW5lclRlc3QuamF2YQpAQCAtMzcsMTQgKzM3LDE0IEBACiAKIC8qKgogICogVGVzdHMgV2ViQ29udGFpbmVyI2FkZFdlYkxpc3RlbmVyKEh0dHBzTGlzdGVuZXIpCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEFteSBSb2gKICAqLwogcHVibGljIGNsYXNzIEVtYmVkZGVkQWRkSHR0cHNMaXN0ZW5lclRlc3QgewogCiAgICAgc3RhdGljIEdsYXNzRmlzaCBnbGFzc2Zpc2g7CiAgICAgc3RhdGljIFdlYkNvbnRhaW5lciBlbWJlZGRlZDsKLSAgICBzdGF0aWMgRmlsZSByb290OyAgICAgICAgICAgICAgICAKKyAgICBzdGF0aWMgRmlsZSByb290OwogICAgIHN0YXRpYyBTdHJpbmcgY29udGV4dFJvb3QgPSAidGVzdCI7CiAKICAgICBAQmVmb3JlQ2xhc3MKQEAgLTEzNCwxMCArMTM0LDEwIEBACiAgICAgICAgIHZlcmlmeSg5MTkxKTsKICAgICAgICAgLy92ZXJpZnkoOTI5Mik7CiAgICAgICAgIC8vdmVyaWZ5KDkzOTMpOwotICAgICAgICAKKwogICAgICAgICBpZiAoYXBwTmFtZSE9bnVsbCkKICAgICAgICAgICAgIGRlcGxveWVyLnVuZGVwbG95KGFwcE5hbWUpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBkaXNhYmxlQ2VydFZhbGlkYXRpb24oKSB7CkBAIC0xNzQsNSArMTc0LDUgQEAKICAgICAgICAgICAgIGdsYXNzZmlzaCA9IG51bGw7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkQWRkTGlzdGVuZXJEZWZhdWx0VlNUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZEFkZExpc3RlbmVyRGVmYXVsdFZTVGVzdC5qYXZhCmluZGV4IDc3MzkxNWEuLjEyOTE3YzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkQWRkTGlzdGVuZXJEZWZhdWx0VlNUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRBZGRMaXN0ZW5lckRlZmF1bHRWU1Rlc3QuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogCiAvKioKICAqIFRlc3RzIGZvciBDb250ZXh0I2FkZExpc3RlbmVyIHRvIGRlZmF1bHQgdmlydHVhbCBzZXJ2ZXIKLSAqIAorICoKICAqIEBhdXRob3IgQW15IFJvaAogICovCiBwdWJsaWMgY2xhc3MgRW1iZWRkZWRBZGRMaXN0ZW5lckRlZmF1bHRWU1Rlc3QgewpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFkZGVkIFdlYiB3aXRoIGJhc2UgZGlyZWN0b3J5ICIrcm9vdC5nZXRBYnNvbHV0ZVBhdGgoKSk7CiAgICAgICAgIGVtYmVkZGVkLnNldENvbmZpZ3VyYXRpb24oY29uZmlnKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZEFkZFNlcnZsZXREZWZhdWx0VlMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIApAQCAtODksNyArODksNyBAQAogICAgICAgICBpbi5jbG9zZSgpOwogCiAgICAgICAgIHZzLnJlbW92ZUNvbnRleHQoY29udGV4dCk7Ci0gICAgICAgIAorCiAgICAgIH0KIAogICAgIEBBZnRlckNsYXNzCkBAIC0xMDEsNiArMTAxLDYgQEAKICAgICAgICAgICAgIGdsYXNzZmlzaCA9IG51bGw7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgCisKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzc05hbWVUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzTmFtZVRlc3QuamF2YQppbmRleCAyODE4NTI2Li41MTE4MzhlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzTmFtZVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzTmFtZVRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogCiAvKioKICAqIFRlc3RzIGZvciBDb250ZXh0IGFkZFNlcnZsZXQgJiBhZGRGaWx0ZXIgdXNpbmcgY2xhc3MgbmFtZSB0byBkZWZhdWx0IHZpcnR1YWwgc2VydmVyCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEFteSBSb2gKICAqLwogcHVibGljIGNsYXNzIEVtYmVkZGVkQWRkU2VydmxldEFuZEZpbHRlckJ5Q2xhc3NOYW1lVGVzdCB7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWRkZWQgV2ViIHdpdGggYmFzZSBkaXJlY3RvcnkgIityb290LmdldEFic29sdXRlUGF0aCgpKTsKICAgICAgICAgZW1iZWRkZWQuc2V0Q29uZmlndXJhdGlvbihjb25maWcpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEVtYmVkZGVkQWRkU2VydmxldERlZmF1bHRWUygpIHRocm93cyBFeGNlcHRpb24gewogCkBAIC05OSw3ICs5OSw3IEBACiAgICAgICAgIGluLmNsb3NlKCk7CiAKICAgICAgICAgdnMucmVtb3ZlQ29udGV4dChjb250ZXh0KTsKLSAgICAgICAgCisKICAgICAgfQogCiAgICAgQEFmdGVyQ2xhc3MKQEAgLTExMSw2ICsxMTEsNiBAQAogICAgICAgICAgICAgZ2xhc3NmaXNoID0gbnVsbDsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICAKKworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzc1Rlc3QuamF2YQppbmRleCBhYTY1ZjZmLi42NThiOWNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkQWRkU2VydmxldEFuZEZpbHRlckJ5Q2xhc3NUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKIAogLyoqCiAgKiBUZXN0cyBmb3IgQ29udGV4dCBhZGRTZXJ2bGV0ICYgYWRkRmlsdGVyIHVzaW5nIGNsYXNzIHRvIGRlZmF1bHQgdmlydHVhbCBzZXJ2ZXIKLSAqIAorICoKICAqIEBhdXRob3IgQW15IFJvaAogICovCiBwdWJsaWMgY2xhc3MgRW1iZWRkZWRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzc1Rlc3QgewpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFkZGVkIFdlYiB3aXRoIGJhc2UgZGlyZWN0b3J5ICIrcm9vdC5nZXRBYnNvbHV0ZVBhdGgoKSk7CiAgICAgICAgIGVtYmVkZGVkLnNldENvbmZpZ3VyYXRpb24oY29uZmlnKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZEFkZFNlcnZsZXREZWZhdWx0VlMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIApAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgICAgIGluLmNsb3NlKCk7CiAKICAgICAgICAgdnMucmVtb3ZlQ29udGV4dChjb250ZXh0KTsKLSAgICAgICAgCisKICAgICAgfQogCiAgICAgQEFmdGVyQ2xhc3MKQEAgLTExNiw2ICsxMTYsNiBAQAogICAgICAgICAgICAgZ2xhc3NmaXNoID0gbnVsbDsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICAKKworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZEFkZFNlcnZsZXREZWZhdWx0VlNUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZEFkZFNlcnZsZXREZWZhdWx0VlNUZXN0LmphdmEKaW5kZXggM2I1YjBmNS4uNjZhYmQ1ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRBZGRTZXJ2bGV0RGVmYXVsdFZTVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkQWRkU2VydmxldERlZmF1bHRWU1Rlc3QuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogCiAvKioKICAqIFRlc3RzIGZvciBDb250ZXh0I2FkZFNlcnZsZXQgdG8gZGVmYXVsdCB2aXJ0dWFsIHNlcnZlcgotICogCisgKgogICogQGF1dGhvciBBbXkgUm9oCiAgKi8KIHB1YmxpYyBjbGFzcyBFbWJlZGRlZEFkZFNlcnZsZXREZWZhdWx0VlNUZXN0IHsKQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZGRlZCBXZWIgd2l0aCBiYXNlIGRpcmVjdG9yeSAiK3Jvb3QuZ2V0QWJzb2x1dGVQYXRoKCkpOwogICAgICAgICBlbWJlZGRlZC5zZXRDb25maWd1cmF0aW9uKGNvbmZpZyk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0RW1iZWRkZWRBZGRTZXJ2bGV0RGVmYXVsdFZTKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKQEAgLTg4LDcgKzg4LDcgQEAKICAgICAgICAgaW4uY2xvc2UoKTsKIAogICAgICAgICB2cy5yZW1vdmVDb250ZXh0KGNvbnRleHQpOwotICAgICAgICAKKwogICAgICB9CiAKICAgICBAQWZ0ZXJDbGFzcwpAQCAtMTAwLDYgKzEwMCw2IEBACiAgICAgICAgICAgICBnbGFzc2Zpc2ggPSBudWxsOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIAorCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkQWRkU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkQWRkU2VydmxldFRlc3QuamF2YQppbmRleCAwYjBhMGQ2Li4xYjY3N2FiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZEFkZFNlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRBZGRTZXJ2bGV0VGVzdC5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAKIC8qKgogICogVGVzdHMgZm9yIENvbnRleHQjYWRkU2VydmxldCwgZW1iZWRkZWQuY3JlYXRlVmlydHVhbFNlcnZlcgotICogCisgKgogICogQGF1dGhvciBBbXkgUm9oCiAgKi8KIHB1YmxpYyBjbGFzcyBFbWJlZGRlZEFkZFNlcnZsZXRUZXN0IHsKQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZGRlZCBXZWIgd2l0aCBiYXNlIGRpcmVjdG9yeSAiK3Jvb3QuZ2V0QWJzb2x1dGVQYXRoKCkpOwogICAgICAgICBlbWJlZGRlZC5zZXRDb25maWd1cmF0aW9uKGNvbmZpZyk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0RW1iZWRkZWRXZWJBUElDb25maWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgV2ViTGlzdGVuZXIgdGVzdExpc3RlbmVyID0gZW1iZWRkZWQuY3JlYXRlV2ViTGlzdGVuZXIoInRlc3QtbGlzdGVuZXIiLCBIdHRwTGlzdGVuZXIuY2xhc3MpOwpAQCAtODQsNyArODQsNyBAQAogICAgICAgICAgICAgICAgIHRlc3R2cz10cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKHRlc3R2cyk7ICAgIAorICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSh0ZXN0dnMpOwogICAgICAgICBDb250ZXh0IGNvbnRleHQgPSAoQ29udGV4dCkgZW1iZWRkZWQuY3JlYXRlQ29udGV4dChyb290KTsKICAgICAgICAgU2VydmxldFJlZ2lzdHJhdGlvbiBzciA9IGNvbnRleHQuYWRkU2VydmxldCgiTmV3U2VydmxldCIsICJvcmcuZ2xhc3NmaXNoLnRlc3RzLmVtYmVkZGVkLndlYi5OZXdTZXJ2bGV0Iik7CiAgICAgICAgIHNyLmFkZE1hcHBpbmcobmV3IFN0cmluZ1tdIHsiL25ld3NlcnZsZXQifSk7CkBAIC0xMDMsNyArMTAzLDcgQEAKICAgICAgICAgfQogICAgICAgICBpbi5jbG9zZSgpOwogICAgICAgICB2cy5yZW1vdmVDb250ZXh0KGNvbnRleHQpOwotICAgICAgICAKKwogICAgICB9CiAKICAgICBAQWZ0ZXJDbGFzcwpAQCAtMTE1LDYgKzExNSw2IEBACiAgICAgICAgICAgICBnbGFzc2Zpc2ggPSBudWxsOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIAorCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkQWRkV2ViTGlzdGVuZXJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZEFkZFdlYkxpc3RlbmVyVGVzdC5qYXZhCmluZGV4IGIyY2QzZGEuLjM4Mjg0NTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkQWRkV2ViTGlzdGVuZXJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRBZGRXZWJMaXN0ZW5lclRlc3QuamF2YQpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKIC8qKgogICogVGVzdHMgV2ViQ29udGFpbmVyI2FkZFdlYkxpc3RlbmVyKEh0dHBMaXN0ZW5lcikgJiBIdHRwTGlzdGVuZXIuc2V0Q29uZmlnCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEFteSBSb2gKICAqLwogcHVibGljIGNsYXNzIEVtYmVkZGVkQWRkV2ViTGlzdGVuZXJUZXN0IHsKIAogICAgIHN0YXRpYyBHbGFzc0Zpc2ggZ2xhc3NmaXNoOwogICAgIHN0YXRpYyBXZWJDb250YWluZXIgZW1iZWRkZWQ7Ci0gICAgc3RhdGljIEZpbGUgcm9vdDsgICAgICAgICAgICAgICAgCisgICAgc3RhdGljIEZpbGUgcm9vdDsKICAgICBzdGF0aWMgU3RyaW5nIGNvbnRleHRSb290ID0gInRlc3QiOwogICAgIHN0YXRpYyBpbnQgcG9ydCA9IDkwOTA7CiAgICAgc3RhdGljIGludCBuZXdQb3J0ID0gOTI5MjsKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGFydGluZyBXZWIgIitlbWJlZGRlZCk7CiAgICAgICAgIGVtYmVkZGVkLnNldExvZ0xldmVsKExldmVsLklORk8pOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24gewogCkBAIC0xMTgsMTAgKzExOCwxMCBAQAogICAgICAgICBpbi5jbG9zZSgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaW5wdXRMaW5lKTsKICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiSGVsbG8gV29ybGQhIiwgc2IudG9TdHJpbmcoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChhcHBOYW1lIT1udWxsKQogICAgICAgICAgICAgZGVwbG95ZXIudW5kZXBsb3koYXBwTmFtZSk7Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgQEFmdGVyQ2xhc3MKQEAgLTEzMyw1ICsxMzMsNSBAQAogICAgICAgICAgICAgZ2xhc3NmaXNoID0gbnVsbDsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRDbGFzc0xvYWRlclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkQ2xhc3NMb2FkZXJUZXN0LmphdmEKaW5kZXggNzlhOTUzOS4uM2FjYTU0YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRDbGFzc0xvYWRlclRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZENsYXNzTG9hZGVyVGVzdC5qYXZhCkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgVVJMW10gdXJscyA9IG5ldyBVUkxbMV07CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICAgICAgaW4uY2xvc2UoKTsKIAogICAgICAgICB3Yy5yZW1vdmVDb250ZXh0KGNvbnRleHQpOwotICAgIH0gCisgICAgfQogCiAgICAgQEFmdGVyQ2xhc3MKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2h1dGRvd25TZXJ2ZXIoKSB0aHJvd3MgR2xhc3NGaXNoRXhjZXB0aW9uIHsKQEAgLTExMyw1ICsxMTMsNSBAQAogICAgICAgICAgICAgZ2xhc3NmaXNoID0gbnVsbDsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRDcmVhdGVDb250ZXh0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRDcmVhdGVDb250ZXh0VGVzdC5qYXZhCmluZGV4IDE1OTc4OTMuLmIxODg2N2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkQ3JlYXRlQ29udGV4dFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZENyZWF0ZUNvbnRleHRUZXN0LmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKIAogLyoqCiAgKiBUZXN0cyBXZWJDb250YWluZXIjY3JlYXRlQ29udGV4dAotICogCisgKgogICogQGF1dGhvciBBbXkgUm9oCiAgKi8KIHB1YmxpYyBjbGFzcyBFbWJlZGRlZENyZWF0ZUNvbnRleHRUZXN0IHsKQEAgLTUxLDEwICs1MSwxMCBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXJ0aW5nIFdlYiAiK2VtYmVkZGVkKTsKICAgICAgICAgZW1iZWRkZWQuc2V0TG9nTGV2ZWwoTGV2ZWwuSU5GTyk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIEh0dHBMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBIdHRwTGlzdGVuZXIoKTsKICAgICAgICAgbGlzdGVuZXIuc2V0UG9ydCg4MDgwKTsKICAgICAgICAgbGlzdGVuZXIuc2V0SWQoImVtYmVkZGVkLWxpc3RlbmVyLTEiKTsKQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgICAgICAgIHNiLmFwcGVuZChpbnB1dExpbmUpOwogICAgICAgICB9CiAgICAgICAgIGluLmNsb3NlKCk7Ci0gICAgfSAKKyAgICB9CiAKICAgICBAQWZ0ZXJDbGFzcwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzaHV0ZG93blNlcnZlcigpIHRocm93cyBHbGFzc0Zpc2hFeGNlcHRpb24gewpAQCAtODYsNSArODYsNSBAQAogICAgICAgICAgICAgZ2xhc3NmaXNoID0gbnVsbDsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRDcmVhdGVTZXJ2bGV0QW5kRmlsdGVyVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRDcmVhdGVTZXJ2bGV0QW5kRmlsdGVyVGVzdC5qYXZhCmluZGV4IDMzYzcyMTIuLjIzZTZmNzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkQ3JlYXRlU2VydmxldEFuZEZpbHRlclRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZENyZWF0ZVNlcnZsZXRBbmRGaWx0ZXJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKIAogLyoqCiAgKiBUZXN0cyBmb3IgQ29udGV4dCBjcmVhdGVTZXJ2bGV0ICYgY3JlYXRlRmlsdGVyIHVzaW5nIGNsYXNzIHRvIGRlZmF1bHQgdmlydHVhbCBzZXJ2ZXIKLSAqIAorICoKICAqIEBhdXRob3IgQW15IFJvaAogICovCiBwdWJsaWMgY2xhc3MgRW1iZWRkZWRDcmVhdGVTZXJ2bGV0QW5kRmlsdGVyVGVzdCB7CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWRkZWQgV2ViIHdpdGggYmFzZSBkaXJlY3RvcnkgIityb290LmdldEFic29sdXRlUGF0aCgpKTsKICAgICAgICAgZW1iZWRkZWQuc2V0Q29uZmlndXJhdGlvbihjb25maWcpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEVtYmVkZGVkQWRkU2VydmxldERlZmF1bHRWUygpIHRocm93cyBFeGNlcHRpb24gewogCkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICAgICAgaW4uY2xvc2UoKTsKIAogICAgICAgICB2cy5yZW1vdmVDb250ZXh0KGNvbnRleHQpOwotICAgICAgICAKKwogICAgICB9CiAKICAgICBAQWZ0ZXJDbGFzcwpAQCAtMTE4LDYgKzExOCw2IEBACiAgICAgICAgICAgICBnbGFzc2Zpc2ggPSBudWxsOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIAorCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkQ3JlYXRlVmlydHVhbFNlcnZlclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkQ3JlYXRlVmlydHVhbFNlcnZlclRlc3QuamF2YQppbmRleCA4YTJiNWMzLi5kM2MwNTQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZENyZWF0ZVZpcnR1YWxTZXJ2ZXJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRDcmVhdGVWaXJ0dWFsU2VydmVyVGVzdC5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBvcmcuZ2xhc3NmaXNoLmVtYmVkZGFibGUuKjsKLWltcG9ydCBvcmcuZ2xhc3NmaXNoLmVtYmVkZGFibGUud2ViLio7ICAKK2ltcG9ydCBvcmcuZ2xhc3NmaXNoLmVtYmVkZGFibGUud2ViLio7CiBpbXBvcnQgb3JnLmdsYXNzZmlzaC5lbWJlZGRhYmxlLndlYi5jb25maWcuKjsKIGltcG9ydCBvcmcuanVuaXQuQWZ0ZXJDbGFzczsKIGltcG9ydCBvcmcuanVuaXQuQXNzZXJ0OwpAQCAtMzQsNyArMzQsNyBAQAogCiAvKioKICAqIFRlc3RzIFdlYkNvbnRhaW5lciNjcmVhdGVWaXJ0dWFsU2VydmVyVGVzdAotICogCisgKgogICogQGF1dGhvciBBbXkgUm9oCiAgKi8KIHB1YmxpYyBjbGFzcyBFbWJlZGRlZENyZWF0ZVZpcnR1YWxTZXJ2ZXJUZXN0IHsKQEAgLTQzLDcgKzQzLDcgQEAKICAgICBzdGF0aWMgV2ViQ29udGFpbmVyIGVtYmVkZGVkOwogICAgIHN0YXRpYyBpbnQgbmV3UG9ydCA9IDkwOTA7CiAgICAgc3RhdGljIFN0cmluZyBjb250ZXh0Um9vdCA9ICJ0ZXN0IjsKLSAgICAKKwogICAgIEBCZWZvcmVDbGFzcwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXR1cFNlcnZlcigpIHRocm93cyBHbGFzc0Zpc2hFeGNlcHRpb24gewogICAgICAgICBnbGFzc2Zpc2ggPSBHbGFzc0Zpc2hSdW50aW1lLmJvb3RzdHJhcCgpLm5ld0dsYXNzRmlzaCgpOwpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXJ0aW5nIFdlYiAiK2VtYmVkZGVkKTsKICAgICAgICAgZW1iZWRkZWQuc2V0TG9nTGV2ZWwoTGV2ZWwuSU5GTyk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKQEAgLTYxLDcgKzYxLDcgQEAKICAgICAgICAgaHR0cExpc3RlbmVyLnNldFBvcnQoODA4MCk7CiAgICAgICAgIGh0dHBMaXN0ZW5lci5zZXRJZCgiZW1iZWRkZWQtbGlzdGVuZXItMSIpOwogICAgICAgICBlbWJlZGRlZC5hZGRXZWJMaXN0ZW5lcihodHRwTGlzdGVuZXIpOwotICAgICAgICAKKwogICAgICAgICBMaXN0PFdlYkxpc3RlbmVyPiBsaXN0ZW5lckxpc3QgPSBuZXcgQXJyYXlMaXN0KGVtYmVkZGVkLmdldFdlYkxpc3RlbmVycygpKTsKICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUobGlzdGVuZXJMaXN0LnNpemUoKT09MSk7CiAgICAgICAgIGZvciAoV2ViTGlzdGVuZXIgbGlzdGVuZXIgOiBlbWJlZGRlZC5nZXRXZWJMaXN0ZW5lcnMoKSkKQEAgLTcxLDExICs3MSwxMSBAQAogICAgICAgICB0ZXN0TGlzdGVuZXIuc2V0UG9ydChuZXdQb3J0KTsKICAgICAgICAgV2ViTGlzdGVuZXJbXSB3ZWJMaXN0ZW5lcnMgPSBuZXcgSHR0cExpc3RlbmVyWzFdOwogICAgICAgICB3ZWJMaXN0ZW5lcnNbMF0gPSB0ZXN0TGlzdGVuZXI7Ci0gICAgICAgIAorCiAgICAgICAgIEZpbGUgZiA9IG5ldyBGaWxlKCJ0YXJnZXQvY2xhc3NlcyIpOwogICAgICAgICBTdHJpbmcgdmlydHVhbFNlcnZlcklkID0gImVtYmVkZGVkLXNlcnZlciI7CiAgICAgICAgIFZpcnR1YWxTZXJ2ZXIgdmlydHVhbFNlcnZlciA9IChWaXJ0dWFsU2VydmVyKQotICAgICAgICAgICAgICAgIGVtYmVkZGVkLmNyZWF0ZVZpcnR1YWxTZXJ2ZXIodmlydHVhbFNlcnZlcklkLCBmLCB3ZWJMaXN0ZW5lcnMpOyAgICAgICAgIAorICAgICAgICAgICAgICAgIGVtYmVkZGVkLmNyZWF0ZVZpcnR1YWxTZXJ2ZXIodmlydHVhbFNlcnZlcklkLCBmLCB3ZWJMaXN0ZW5lcnMpOwogICAgICAgICBWaXJ0dWFsU2VydmVyQ29uZmlnIGNvbmZpZyA9IG5ldyBWaXJ0dWFsU2VydmVyQ29uZmlnKCk7CiAgICAgICAgIGNvbmZpZy5zZXRIb3N0TmFtZXMoImxvY2FsaG9zdCIpOwogICAgICAgICB2aXJ0dWFsU2VydmVyLnNldENvbmZpZyhjb25maWcpOwpAQCAtMTA4LDE0ICsxMDgsMTQgQEAKIAogICAgICAgICB2cy5yZW1vdmVDb250ZXh0KGNvbnRleHQpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlbW92aW5nIHdlYiBsaXN0ZW5lciAiK3Rlc3RMaXN0ZW5lci5nZXRJZCgpKTsKLSAgICAgICAgZW1iZWRkZWQucmVtb3ZlV2ViTGlzdGVuZXIodGVzdExpc3RlbmVyKTsgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBlbWJlZGRlZC5yZW1vdmVXZWJMaXN0ZW5lcih0ZXN0TGlzdGVuZXIpOwogCiAgICAgICAgIGxpc3RlbmVyTGlzdCA9IG5ldyBBcnJheUxpc3QoZW1iZWRkZWQuZ2V0V2ViTGlzdGVuZXJzKCkpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5ldHdvcmsgbGlzdGVuZXIgc2l6ZSBhZnRlciBkZWxldGlvbiAiICsgbGlzdGVuZXJMaXN0LnNpemUoKSk7CiAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGxpc3RlbmVyTGlzdC5zaXplKCk9PTEpOwogICAgICAgICBmb3IgKFdlYkxpc3RlbmVyIGxpc3RlbmVyIDogZW1iZWRkZWQuZ2V0V2ViTGlzdGVuZXJzKCkpCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldlYiBsaXN0ZW5lciAiK2xpc3RlbmVyLmdldElkKCkrIiAiK2xpc3RlbmVyLmdldFBvcnQoKSk7Ci0gICAgfSAKKyAgICB9CiAKICAgICBAQWZ0ZXJDbGFzcwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzaHV0ZG93blNlcnZlcigpIHRocm93cyBHbGFzc0Zpc2hFeGNlcHRpb24gewpAQCAtMTI2LDUgKzEyNiw1IEBACiAgICAgICAgICAgICBnbGFzc2Zpc2ggPSBudWxsOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZEdldENvbnRleHRzVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRHZXRDb250ZXh0c1Rlc3QuamF2YQppbmRleCA0NzMwZmY2Li45MTQ5YTU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZEdldENvbnRleHRzVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkR2V0Q29udGV4dHNUZXN0LmphdmEKQEAgLTM0LDE0ICszNCwxNCBAQAogCiAvKioKICAqIFRlc3RzIFZpcnR1YWxTZXJ2ZXIjZ2V0Q29udGV4dHMgYWZ0ZXIgZGVwbG95Ci0gKiAKKyAqCiAgKiBAYXV0aG9yIEFteSBSb2gKICAqLwogcHVibGljIGNsYXNzIEVtYmVkZGVkR2V0Q29udGV4dHNUZXN0IHsKIAogICAgIHN0YXRpYyBHbGFzc0Zpc2ggZ2xhc3NmaXNoOwogICAgIHN0YXRpYyBXZWJDb250YWluZXIgZW1iZWRkZWQ7Ci0gICAgc3RhdGljIEZpbGUgcm9vdDsgICAgICAgICAgICAgICAgCisgICAgc3RhdGljIEZpbGUgcm9vdDsKICAgICBzdGF0aWMgU3RyaW5nIGNvbnRleHRSb290ID0gInRlc3QiOwogCiAgICAgQEJlZm9yZUNsYXNzCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnRpbmcgV2ViICIrZW1iZWRkZWQpOwogICAgICAgICBlbWJlZGRlZC5zZXRMb2dMZXZlbChMZXZlbC5JTkZPKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIApAQCAtMTE4LDcgKzExOCw3IEBACiAgICAgICAgIGlmIChhcHBOYW1lIT1udWxsKQogICAgICAgICAgICAgZGVwbG95ZXIudW5kZXBsb3koYXBwTmFtZSk7CiAKLSAgICB9IAorICAgIH0KIAogICAgIEBBZnRlckNsYXNzCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNodXRkb3duU2VydmVyKCkgdGhyb3dzIEdsYXNzRmlzaEV4Y2VwdGlvbiB7CkBAIC0xMjksNSArMTI5LDUgQEAKICAgICAgICAgICAgIGdsYXNzZmlzaCA9IG51bGw7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkSlNQVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRKU1BUZXN0LmphdmEKaW5kZXggOTcyNWM4Ni4uNWRlNTI4ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRKU1BUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRKU1BUZXN0LmphdmEKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgZ2xhc3NmaXNoLnN0YXJ0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPT09PT09PT09PT09PT09PSBFbWJlZGRlZCBKU1AgVGVzdCIpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdERlZmF1bHRTdGFydCgpIHRocm93cyBFeGNlcHRpb24gewogCkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICAgIGluLmNsb3NlKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpbnB1dExpbmUpOwogICAgICAgICAqLwotICAgICAgICAKKwogICAgICAgICBpZiAoYXBwTmFtZSE9bnVsbCkKICAgICAgICAgICAgIGRlcGxveWVyLnVuZGVwbG95KGFwcE5hbWUpOwogCkBAIC0xMDMsNSArMTAzLDUgQEAKICAgICAgICAgICAgIGdsYXNzZmlzaCA9IG51bGw7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkUmVkZXBsb3lUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZFJlZGVwbG95VGVzdC5qYXZhCmluZGV4IDdjMDFkZGQuLjI5ZDU5ZDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkUmVkZXBsb3lUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRSZWRlcGxveVRlc3QuamF2YQpAQCAtMzQsMTQgKzM0LDE0IEBACiAKIC8qKgogICogVGVzdHMgcmVkZXBsb3kgc2NlbmFyaW8KLSAqIAorICoKICAqIEBhdXRob3IgQW15IFJvaAogICovCiBwdWJsaWMgY2xhc3MgRW1iZWRkZWRSZWRlcGxveVRlc3QgewogCiAgICAgc3RhdGljIEdsYXNzRmlzaCBnbGFzc2Zpc2g7CiAgICAgc3RhdGljIFdlYkNvbnRhaW5lciBlbWJlZGRlZDsKLSAgICBzdGF0aWMgRmlsZSByb290OyAgICAgICAgICAgICAgICAKKyAgICBzdGF0aWMgRmlsZSByb290OwogICAgIHN0YXRpYyBTdHJpbmcgY29udGV4dFJvb3QgPSAiL2VtYmVkZGVkLXJlZGVwbG95IjsKIAogICAgIEBCZWZvcmVDbGFzcwpAQCAtNjAsNyArNjAsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFkZGVkIFdlYiB3aXRoIGJhc2UgZGlyZWN0b3J5ICIrcm9vdC5nZXRBYnNvbHV0ZVBhdGgoKSk7CiAgICAgICAgIGVtYmVkZGVkLnNldENvbmZpZ3VyYXRpb24oY29uZmlnKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIApAQCAtMTEwLDUgKzExMCw1IEBACiAgICAgICAgICAgICBnbGFzc2Zpc2ggPSBudWxsOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZFJlbW92ZUNvbnRleHRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZFJlbW92ZUNvbnRleHRUZXN0LmphdmEKaW5kZXggMDNhODEyZi4uODNkZTE2MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRSZW1vdmVDb250ZXh0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkUmVtb3ZlQ29udGV4dFRlc3QuamF2YQpAQCAtMzQsMTQgKzM0LDE0IEBACiAKIC8qKgogICogVGVzdHMgV2ViQ29udGFpbmVyI3JlbW92ZUNvbnRleHQKLSAqIAorICoKICAqIEBhdXRob3IgQW15IFJvaAogICovCiBwdWJsaWMgY2xhc3MgRW1iZWRkZWRSZW1vdmVDb250ZXh0VGVzdCB7CiAKICAgICBzdGF0aWMgR2xhc3NGaXNoIGdsYXNzZmlzaDsKICAgICBzdGF0aWMgV2ViQ29udGFpbmVyIGVtYmVkZGVkOwotICAgIHN0YXRpYyBGaWxlIHJvb3Q7ICAgICAgICAgICAgICAgIAorICAgIHN0YXRpYyBGaWxlIHJvb3Q7CiAgICAgc3RhdGljIFN0cmluZyBjb250ZXh0Um9vdCA9ICJ0ZXN0IjsKIAogICAgIEBCZWZvcmVDbGFzcwpAQCAtNjAsNyArNjAsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFkZGVkIFdlYiB3aXRoIGJhc2UgZGlyZWN0b3J5ICIrcm9vdC5nZXRBYnNvbHV0ZVBhdGgoKSk7CiAgICAgICAgIGVtYmVkZGVkLnNldENvbmZpZ3VyYXRpb24oY29uZmlnKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIApAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgIGluLmNsb3NlKCk7CiAKICAgICAgICAgZW1iZWRkZWQucmVtb3ZlQ29udGV4dChjb250ZXh0KTsKLSAgICB9IAorICAgIH0KIAogICAgIEBBZnRlckNsYXNzCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNodXRkb3duU2VydmVyKCkgdGhyb3dzIEdsYXNzRmlzaEV4Y2VwdGlvbiB7CkBAIC0xMzYsNSArMTM2LDUgQEAKICAgICAgICAgICAgIGdsYXNzZmlzaCA9IG51bGw7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkUmVzdGFydFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkUmVzdGFydFRlc3QuamF2YQppbmRleCA4YTJjNTQxLi5jNGFlNzAxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZFJlc3RhcnRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRSZXN0YXJ0VGVzdC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIGdsYXNzZmlzaC5zdGFydCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT09PT09PT09PT09PT0gRW1iZWRkZWQgUmVzdGFydCBUZXN0Iik7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0RW1iZWRkZWRXZWJBUEkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIApAQCAtMTA0LDUgKzEwNCw1IEBACiAgICAgICAgICAgICBnbGFzc2Zpc2ggPSBudWxsOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZFNldENvbmZpZ3VyYXRpb25UZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZFNldENvbmZpZ3VyYXRpb25UZXN0LmphdmEKaW5kZXggNmRiM2U0NS4uNjZlMzFhNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRTZXRDb25maWd1cmF0aW9uVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkU2V0Q29uZmlndXJhdGlvblRlc3QuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogCiAvKioKICAqIFRlc3RzIFdlYkNvbnRhaW5lciNzZXRDb25maWd1cmF0aW9uKFdlYkNvbnRhaW5lckNvbmZpZykKLSAqIAorICoKICAqIEBhdXRob3IgQW15IFJvaAogICovCiBwdWJsaWMgY2xhc3MgRW1iZWRkZWRTZXRDb25maWd1cmF0aW9uVGVzdCB7CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWRkZWQgV2ViIHdpdGggYmFzZSBkaXJlY3RvcnkgIityb290LmdldEFic29sdXRlUGF0aCgpKTsKICAgICAgICAgZW1iZWRkZWQuc2V0Q29uZmlndXJhdGlvbihjb25maWcpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEVtYmVkZGVkV2ViQVBJQ29uZmlnKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIENvbnRleHQgY29udGV4dCA9IGVtYmVkZGVkLmNyZWF0ZUNvbnRleHQocm9vdCk7CkBAIC05Miw2ICs5Miw2IEBACiAgICAgICAgICAgICBnbGFzc2Zpc2ggPSBudWxsOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIAorCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkU2V0RGVmYXVsdFdlYlhtbFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkU2V0RGVmYXVsdFdlYlhtbFRlc3QuamF2YQppbmRleCBiZWZiZjU3Li5lZGQ1OTkyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZFNldERlZmF1bHRXZWJYbWxUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRTZXREZWZhdWx0V2ViWG1sVGVzdC5qYXZhCkBAIC0zNSw3ICszNSw3IEBACiAvKioKICAqIFRlc3RzIEVtYmVkZGVkRmlsZVN5c3RlbS5jb25maWd1cmF0aW9uRmlsZSBhbmQgV2ViQnVpbGRlci5zZXREZWZhdWx0V2ViWG1sCiAgKiBDaGVja3MgaWYgZGlyZWN0b3J5IGxpc3RpbmdzIGlzIGNvcnJlY3RseSBnZXR0aW5nIHBpY2tlZCB1cCBmcm9tIHRoZSBkZWZhdWx0LXdlYi54bWwKLSAqIAorICoKICAqIEBhdXRob3IgQW15IFJvaAogICovCiBwdWJsaWMgY2xhc3MgRW1iZWRkZWRTZXREZWZhdWx0V2ViWG1sVGVzdCB7CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWRkZWQgV2ViIHdpdGggYmFzZSBkaXJlY3RvcnkgIityb290LmdldEFic29sdXRlUGF0aCgpKTsKICAgICAgICAgZW1iZWRkZWQuc2V0Q29uZmlndXJhdGlvbihjb25maWcpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEVtYmVkZGVkV2ViQVBJQ29uZmlnKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKQEAgLTgzLDkgKzgzLDkgQEAKICAgICAgICAgICAgIHNiLmFwcGVuZChpbnB1dExpbmUpOwogICAgICAgICB9CiAgICAgICAgIGluLmNsb3NlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGVtYmVkZGVkLnJlbW92ZUNvbnRleHQoY29udGV4dCk7Ci0gICAgICAgIAorCiAgICAgIH0KIAogICAgIEBBZnRlckNsYXNzCkBAIC05Nyw1ICs5Nyw1IEBACiAgICAgICAgICAgICBnbGFzc2Zpc2ggPSBudWxsOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZFNldERvY1Jvb3RUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZFNldERvY1Jvb3RUZXN0LmphdmEKaW5kZXggMThjM2U1MC4uYTFkMzQxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRTZXREb2NSb290VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkU2V0RG9jUm9vdFRlc3QuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogCiAvKioKICAqIFRlc3RzIFdlYkJ1aWxkaW5nI3NldExpc3RpbmdzIGZvciBkaXJlY3RvcnkgbGlzdGluZyBmZWF0dXJlCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEFteSBSb2gKICAqLwogcHVibGljIGNsYXNzIEVtYmVkZGVkU2V0RG9jUm9vdFRlc3QgewpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFkZGVkIFdlYiB3aXRoIGJhc2UgZGlyZWN0b3J5ICIrcm9vdC5nZXRBYnNvbHV0ZVBhdGgoKSk7CiAgICAgICAgIGVtYmVkZGVkLnNldENvbmZpZ3VyYXRpb24oY29uZmlnKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZFdlYkFQSUNvbmZpZygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBWaXJ0dWFsU2VydmVyIHZzID0gKFZpcnR1YWxTZXJ2ZXIpCkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgICAgICBzYi5hcHBlbmQoaW5wdXRMaW5lKTsKICAgICAgICAgfQogICAgICAgICBpbi5jbG9zZSgpOwotICAgICAgICAKKwogICAgICB9CiAKICAgICBAQWZ0ZXJDbGFzcwpAQCAtOTcsNiArOTcsNiBAQAogICAgICAgICAgICAgZ2xhc3NmaXNoID0gbnVsbDsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICAKKworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZFNldFNlY3VyaXR5VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRTZXRTZWN1cml0eVRlc3QuamF2YQppbmRleCAxNzlmYmFiLi5jOWZiZTcyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZFNldFNlY3VyaXR5VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkU2V0U2VjdXJpdHlUZXN0LmphdmEKQEAgLTM2LDE0ICszNiwxNCBAQAogCiAvKioKICAqIFRlc3RzIENvbnRleHQjc2V0U2VjdXJpdHkKLSAqIAorICoKICAqIEBhdXRob3IgQW15IFJvaAogICovCiBwdWJsaWMgY2xhc3MgRW1iZWRkZWRTZXRTZWN1cml0eVRlc3QgewogCiAgICAgc3RhdGljIEdsYXNzRmlzaCBnbGFzc2Zpc2g7CiAgICAgc3RhdGljIFdlYkNvbnRhaW5lciBlbWJlZGRlZDsKLSAgICBzdGF0aWMgRmlsZSByb290OyAgICAgICAgICAgICAgICAKKyAgICBzdGF0aWMgRmlsZSByb290OwogICAgIHN0YXRpYyBTdHJpbmcgY29udGV4dFJvb3QgPSAic2VjdXJpdHkiOwogCiAgICAgQEJlZm9yZUNsYXNzCkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWRkZWQgV2ViIHdpdGggYmFzZSBkaXJlY3RvcnkgIityb290LmdldEFic29sdXRlUGF0aCgpKTsKICAgICAgICAgZW1iZWRkZWQuc2V0Q29uZmlndXJhdGlvbihjb25maWcpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24gewogCkBAIC0xMjcsNyArMTI3LDcgQEAKICAgICAgICAgICAgIC8vZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KIAotICAgIH0gCisgICAgfQogCiAgICAgQEFmdGVyQ2xhc3MKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2h1dGRvd25TZXJ2ZXIoKSB0aHJvd3MgR2xhc3NGaXNoRXhjZXB0aW9uIHsKQEAgLTEzOCw1ICsxMzgsNSBAQAogICAgICAgICAgICAgZ2xhc3NmaXNoID0gbnVsbDsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRWaXJ0dWFsU2VydmVySG9zdE5hbWVUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZFZpcnR1YWxTZXJ2ZXJIb3N0TmFtZVRlc3QuamF2YQppbmRleCBiZjU5MDk1Li5mNDA0YTc1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZFZpcnR1YWxTZXJ2ZXJIb3N0TmFtZVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZFZpcnR1YWxTZXJ2ZXJIb3N0TmFtZVRlc3QuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgb3JnLmdsYXNzZmlzaC5lbWJlZGRhYmxlLio7Ci1pbXBvcnQgb3JnLmdsYXNzZmlzaC5lbWJlZGRhYmxlLndlYi4qOyAgCitpbXBvcnQgb3JnLmdsYXNzZmlzaC5lbWJlZGRhYmxlLndlYi4qOwogaW1wb3J0IG9yZy5nbGFzc2Zpc2guZW1iZWRkYWJsZS53ZWIuY29uZmlnLio7CiBpbXBvcnQgb3JnLmp1bml0LkFmdGVyQ2xhc3M7CiBpbXBvcnQgb3JnLmp1bml0LkFzc2VydDsKQEAgLTM0LDcgKzM0LDcgQEAKIAogLyoqCiAgKiBUZXN0IGZvciBWaXJ0dWFsU2VydmVyQ29uZmlnI3NldEhvc3ROYW1lcwotICogCisgKgogICogQGF1dGhvciBBbXkgUm9oCiAgKi8KIHB1YmxpYyBjbGFzcyBFbWJlZGRlZFZpcnR1YWxTZXJ2ZXJIb3N0TmFtZVRlc3QgewpAQCAtNDMsNyArNDMsNyBAQAogICAgIHN0YXRpYyBXZWJDb250YWluZXIgZW1iZWRkZWQ7CiAgICAgc3RhdGljIFN0cmluZyBjb250ZXh0Um9vdCA9ICJob3N0IjsKICAgICBzdGF0aWMgaW50IG5ld1BvcnQgPSA5MDkwOwotICAgIAorCiAgICAgQEJlZm9yZUNsYXNzCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldHVwU2VydmVyKCkgdGhyb3dzIEdsYXNzRmlzaEV4Y2VwdGlvbiB7CiAKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgZW1iZWRkZWQgPSBnbGFzc2Zpc2guZ2V0U2VydmljZShXZWJDb250YWluZXIuY2xhc3MpOwogCiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGlucHV0TGluZSk7CiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIkhlbGxvIFdvcmxkISIsIHNiLnRvU3RyaW5nKCkpOwogCi0gICAgfSAKKyAgICB9CiAKICAgICBAQWZ0ZXJDbGFzcwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzaHV0ZG93blNlcnZlcigpIHRocm93cyBHbGFzc0Zpc2hFeGNlcHRpb24gewpAQCAtOTgsNSArOTgsNSBAQAogICAgICAgICAgICAgZ2xhc3NmaXNoID0gbnVsbDsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRXZWJBUElEZWZhdWx0U3RhcnRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZFdlYkFQSURlZmF1bHRTdGFydFRlc3QuamF2YQppbmRleCBmMDhhOGE2Li4yY2FhZGY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZFdlYkFQSURlZmF1bHRTdGFydFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZFdlYkFQSURlZmF1bHRTdGFydFRlc3QuamF2YQpAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXJ0aW5nIFdlYiAiK2VtYmVkZGVkKTsKICAgICAgICAgZW1iZWRkZWQuc2V0TG9nTGV2ZWwoTGV2ZWwuSU5GTyk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0RGVmYXVsdFN0YXJ0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJIZWxsbyBXb3JsZCEiLCBzYi50b1N0cmluZygpKTsKIAogICAgICAgICBUaHJlYWQuc2xlZXAoMTAwMCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChhcHBOYW1lIT1udWxsKQogICAgICAgICAgICAgZGVwbG95ZXIudW5kZXBsb3koYXBwTmFtZSk7CiAgICAgfQpAQCAtMTIwLDUgKzEyMCw1IEBACiAgICAgICAgICAgICBnbGFzc2Zpc2ggPSBudWxsOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9FbWJlZGRlZFdlYkFQSVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkV2ViQVBJVGVzdC5qYXZhCmluZGV4IGEzYmU3Y2QuLjA2NGYwNjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkV2ViQVBJVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkV2ViQVBJVGVzdC5qYXZhCkBAIC01NSw3ICs1NSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnRpbmcgV2ViICIrZW1iZWRkZWQpOwogICAgICAgICBlbWJlZGRlZC5zZXRMb2dMZXZlbChMZXZlbC5JTkZPKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZFdlYkFQSSgpIHRocm93cyBFeGNlcHRpb24gewogCkBAIC0xNTMsNSArMTUzLDUgQEAKICAgICAgICAgICAgIGdsYXNzZmlzaCA9IG51bGw7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL0VtYmVkZGVkV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRXZWJUZXN0LmphdmEKaW5kZXggYjAwOGRmYi4uNTIzOTg3OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRXZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvRW1iZWRkZWRXZWJUZXN0LmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IG9yZy5nbGFzc2Zpc2guZW1iZWRkYWJsZS4qOwotaW1wb3J0IG9yZy5nbGFzc2Zpc2guZW1iZWRkYWJsZS53ZWIuKjsgIAoraW1wb3J0IG9yZy5nbGFzc2Zpc2guZW1iZWRkYWJsZS53ZWIuKjsKIGltcG9ydCBvcmcuZ2xhc3NmaXNoLmVtYmVkZGFibGUud2ViLmNvbmZpZy4qOwogaW1wb3J0IG9yZy5qdW5pdC5BZnRlckNsYXNzOwogaW1wb3J0IG9yZy5qdW5pdC5Bc3NlcnQ7CkBAIC0zNCw3ICszNCw3IEBACiAKIC8qKgogICogVGVzdHMgV2ViQ29udGFpbmVyCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEFteSBSb2gKICAqLwogcHVibGljIGNsYXNzIEVtYmVkZGVkV2ViVGVzdCB7CkBAIC00NSw3ICs0NSw3IEBACiAgICAgc3RhdGljIFN0cmluZyBjb250ZXh0Um9vdCA9ICJ0ZXN0IjsKICAgICBzdGF0aWMgRmlsZSByb290OwogICAgIHN0YXRpYyBXZWJDb250YWluZXJDb25maWcgY29uZmlnOwotICAgIAorCiAgICAgQEJlZm9yZUNsYXNzCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldHVwU2VydmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGFydGluZyBXZWIgIitlbWJlZGRlZCk7CiAgICAgICAgIHJvb3QgPSBuZXcgRmlsZSgidGFyZ2V0L2NsYXNzZXMiKTsKICAgICAgICAgY29uZmlndXJlKCk7Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjb25maWd1cmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTk5LDEyICs5OSwxMiBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXZWIgbGlzdGVuZXIgIitsaXN0ZW5lci5nZXRJZCgpKyIgIitsaXN0ZW5lci5nZXRQb3J0KCkpOwogCiAgICAgICAgIFZpcnR1YWxTZXJ2ZXIgdnMgPSBlbWJlZGRlZC5nZXRWaXJ0dWFsU2VydmVyKHZpcnR1YWxTZXJ2ZXJJZCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHModmlydHVhbFNlcnZlcklkLHZzLmdldElEKCkpOyAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHZpcnR1YWxTZXJ2ZXJJZCx2cy5nZXRJRCgpKTsKIAogICAgICAgICBDb250ZXh0IGNvbnRleHQgPSAoQ29udGV4dCkgZW1iZWRkZWQuY3JlYXRlQ29udGV4dChyb290KTsKICAgICAgICAgLy9lbWJlZGRlZC5hZGRDb250ZXh0KGNvbnRleHQsIGNvbnRleHRSb290KTsKICAgICAgICAgdmlydHVhbFNlcnZlci5hZGRDb250ZXh0KGNvbnRleHQsIGNvbnRleHRSb290KTsKLSAKKwogICAgICAgICBVUkwgc2VydmxldCA9IG5ldyBVUkwoImh0dHA6Ly9sb2NhbGhvc3Q6IituZXdQb3J0KyIvIitjb250ZXh0Um9vdCsiL2hlbGxvIik7CiAgICAgICAgIFVSTENvbm5lY3Rpb24geWMgPSBzZXJ2bGV0Lm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcih5Yy5nZXRJbnB1dFN0cmVhbSgpKSk7CkBAIC0xMTgsNyArMTE4LDcgQEAKICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiSGVsbG8gV29ybGQhIiwgc2IudG9TdHJpbmcoKSk7CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZW1vdmluZyB3ZWIgbGlzdGVuZXIgIit0ZXN0TGlzdGVuZXIuZ2V0SWQoKSk7Ci0gICAgICAgIGVtYmVkZGVkLnJlbW92ZVdlYkxpc3RlbmVyKHRlc3RMaXN0ZW5lcik7ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgZW1iZWRkZWQucmVtb3ZlV2ViTGlzdGVuZXIodGVzdExpc3RlbmVyKTsKIAogICAgICAgICBsaXN0ZW5lckxpc3QgPSBuZXcgQXJyYXlMaXN0KGVtYmVkZGVkLmdldFdlYkxpc3RlbmVycygpKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOZXR3b3JrIGxpc3RlbmVyIHNpemUgYWZ0ZXIgZGVsZXRpb24gIiArIGxpc3RlbmVyTGlzdC5zaXplKCkpOwpAQCAtMTI4LDcgKzEyOCw3IEBACiAKICAgICAgICAgdmlydHVhbFNlcnZlci5yZW1vdmVDb250ZXh0KGNvbnRleHQpOwogCi0gICAgfSAKKyAgICB9CiAKICAgICBAQWZ0ZXJDbGFzcwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzaHV0ZG93blNlcnZlcigpIHRocm93cyBHbGFzc0Zpc2hFeGNlcHRpb24gewpAQCAtMTM5LDUgKzEzOSw1IEBACiAgICAgICAgICAgICBnbGFzc2Zpc2ggPSBudWxsOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9XZWJIZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItYXBpL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWIvV2ViSGVsbG8uamF2YQppbmRleCBmZGJjMjA4Li5mMDYxNGJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYi9XZWJIZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLWFwaS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2ViL1dlYkhlbGxvLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKICAgICBwdWJsaWMgV2ViSGVsbG8oKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VydmxldCBXRUItSEVMTE8gaW5pdGlhbGl6ZWQiKTsKICAgICB9Ci0gICAKKwogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItd2FyL3Rlc3QvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLXdhci90ZXN0L3BvbS54bWwKaW5kZXggMDA0OGM1MS4uM2Y2MzQwZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItd2FyL3Rlc3QvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi13YXIvdGVzdC9wb20ueG1sCkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc3VyZWZpcmUtcGx1Z2luPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuNC4yPC92ZXJzaW9uPgogICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8Zm9ya0NvdW50PjE8L2ZvcmtDb3VudD4gCisgICAgICAgICAgICAgICAgICAgIDxmb3JrQ291bnQ+MTwvZm9ya0NvdW50PgogICAgICAgICAgICAgICAgICAgICA8cmV1c2VGb3Jrcz5mYWxzZTwvcmV1c2VGb3Jrcz4KICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICA8L3BsdWdpbj4KQEAgLTExNCwxMyArMTE0LDEzIEBACiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5rZXJuZWw8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CiAgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAKKyAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guc2VjdXJpdHk8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5pbm1lbW9yeS5qYWNjLnByb3ZpZGVyPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgogICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAKKyAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guYWRtaW48L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb25maWctYXBpPC9hcnRpZmFjdElkPgpAQCAtMTM5LDEzICsxMzksMTMgQEAKICAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KICAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KICAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgCisgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLnRyYW5zYWN0aW9uPC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+anRhPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIAorICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC53ZWI8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD53ZWItZW1iZWQtaW1wbDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLXdhci90ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWJ3YXIvRW1iZWRkZWRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi13YXIvdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2Vid2FyL0VtYmVkZGVkVGVzdC5qYXZhCmluZGV4IDlmYTU4NWQuLjE5NDMwODQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLXdhci90ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWJ3YXIvRW1iZWRkZWRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItd2FyL3Rlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYndhci9FbWJlZGRlZFRlc3QuamF2YQpAQCAtODksNyArODksNyBAQAogICAgICAgICB9CiAKICAgICAgICAgc2VydmVyLmFkZENvbnRhaW5lcihDb250YWluZXJCdWlsZGVyLlR5cGUuYWxsKTsKLSAgICB9ICAgIAorICAgIH0KIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFdlYigpIHRocm93cyBFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItd2FyL3dlYi1mcmFnbWVudDEvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYndhci93ZWJmcmFnbWVudDEvV0ZUZXN0RmlsdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi13YXIvd2ViLWZyYWdtZW50MS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2Vid2FyL3dlYmZyYWdtZW50MS9XRlRlc3RGaWx0ZXIuamF2YQppbmRleCA1NTRjZTU4Li42ZDRiM2Q3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi13YXIvd2ViLWZyYWdtZW50MS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2Vid2FyL3dlYmZyYWdtZW50MS9XRlRlc3RGaWx0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi13YXIvd2ViLWZyYWdtZW50MS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2Vid2FyL3dlYmZyYWdtZW50MS9XRlRlc3RGaWx0ZXIuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogcHVibGljIGNsYXNzIFdGVGVzdEZpbHRlciBpbXBsZW1lbnRzIEZpbHRlciB7CiAgICAgcHVibGljIHZvaWQgaW5pdChGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IFdGVGVzdEZpbHRlci5pbml0Iik7Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywKICAgICAgICAgICAgIEZpbHRlckNoYWluIGNoYWluKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItd2FyL3dlYi1mcmFnbWVudDIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYndhci93ZWJmcmFnbWVudDIvV0ZUZXN0RmlsdGVyMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItd2FyL3dlYi1mcmFnbWVudDIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYndhci93ZWJmcmFnbWVudDIvV0ZUZXN0RmlsdGVyMi5qYXZhCmluZGV4IDQ1ZTdhZDcuLmJiNDZkOWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLXdhci93ZWItZnJhZ21lbnQyL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWJ3YXIvd2ViZnJhZ21lbnQyL1dGVGVzdEZpbHRlcjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi13YXIvd2ViLWZyYWdtZW50Mi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2Vid2FyL3dlYmZyYWdtZW50Mi9XRlRlc3RGaWx0ZXIyLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIHB1YmxpYyBjbGFzcyBXRlRlc3RGaWx0ZXIyIGltcGxlbWVudHMgRmlsdGVyIHsKICAgICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gV0ZUZXN0RmlsdGVyMi5pbml0Iik7Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywKICAgICAgICAgICAgIEZpbHRlckNoYWluIGNoYWluKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItd2FyL3dlYi1mcmFnbWVudDIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYndhci93ZWJmcmFnbWVudDIvV0ZUZXN0RmlsdGVyMkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLXdhci93ZWItZnJhZ21lbnQyL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWJ3YXIvd2ViZnJhZ21lbnQyL1dGVGVzdEZpbHRlcjJCLmphdmEKaW5kZXggNTY3MzA1ZC4uZWVmNWJjMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItd2FyL3dlYi1mcmFnbWVudDIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYndhci93ZWJmcmFnbWVudDIvV0ZUZXN0RmlsdGVyMkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi13YXIvd2ViLWZyYWdtZW50Mi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2Vid2FyL3dlYmZyYWdtZW50Mi9XRlRlc3RGaWx0ZXIyQi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiBwdWJsaWMgY2xhc3MgV0ZUZXN0RmlsdGVyMkIgaW1wbGVtZW50cyBGaWx0ZXIgewogICAgIHB1YmxpYyB2b2lkIGluaXQoRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBXRlRlc3RGaWx0ZXIyQi5pbml0Iik7Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywKICAgICAgICAgICAgIEZpbHRlckNoYWluIGNoYWluKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItd2FyL3dlYi1mcmFnbWVudDMvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYndhci93ZWJmcmFnbWVudDMvV0ZUZXN0RmlsdGVyMy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2VtYmVkZGVkL3dlYi93ZWItd2FyL3dlYi1mcmFnbWVudDMvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL2VtYmVkZGVkL3dlYndhci93ZWJmcmFnbWVudDMvV0ZUZXN0RmlsdGVyMy5qYXZhCmluZGV4IGQ0NzY4NWEuLjllMTNiNDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9lbWJlZGRlZC93ZWIvd2ViLXdhci93ZWItZnJhZ21lbnQzL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9lbWJlZGRlZC93ZWJ3YXIvd2ViZnJhZ21lbnQzL1dGVGVzdEZpbHRlcjMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZW1iZWRkZWQvd2ViL3dlYi13YXIvd2ViLWZyYWdtZW50My9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvZW1iZWRkZWQvd2Vid2FyL3dlYmZyYWdtZW50My9XRlRlc3RGaWx0ZXIzLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIHB1YmxpYyBjbGFzcyBXRlRlc3RGaWx0ZXIzIGltcGxlbWVudHMgRmlsdGVyIHsKICAgICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gV0ZUZXN0RmlsdGVyMy5pbml0Iik7Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywKICAgICAgICAgICAgIEZpbHRlckNoYWluIGNoYWluKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2dmdGVzdC5zaCBiL2FwcHNlcnZlci90ZXN0cy9nZnRlc3Quc2gKaW5kZXggYzdiMjk1Yy4uY2Q2NGJlMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2dmdGVzdC5zaAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvZ2Z0ZXN0LnNoCkBAIC0xNiwyNCArMTYsMjQgQEAKICMKIAogcnVuX3Rlc3QoKXsKLQlsb2NhbCB0ZXN0aWQ9JHsxfQotCWxvY2FsIGZvdW5kPWZhbHNlCi0JZm9yIHJ1bnRlc3QgaW4gYGZpbmQgLiAtbmFtZSBydW5fdGVzdFwuc2hgOyBkbwotCQlmb3IgaWQgaW4gYCR7cnVudGVzdH0gbGlzdF90ZXN0X2lkc2A7IGRvCi0JCQlpZiBbWyAiJHtpZH0iID0gIiR7dGVzdGlkfSIgXV07IHRoZW4KLQkJCQlmb3VuZD10cnVlCi0JCQkJYnJlYWsKLQkJCWZpCi0JCWRvbmUKLQkJaWYgW1sgIiR7Zm91bmR9IiA9IHRydWUgXV07IHRoZW4KLQkJCSR7cnVudGVzdH0gcnVuX3Rlc3RfaWQgJHt0ZXN0aWR9Ci0JCQlicmVhawotCQlmaQotCWRvbmUKLQlpZiBbWyAiJHtmb3VuZH0iID0gZmFsc2UgXV07IHRoZW4KLQkJZWNobyBJbnZhbGlkIFRlc3QgSWQuCi0JCWV4aXQgMQotCWZpCisgICAgbG9jYWwgdGVzdGlkPSR7MX0KKyAgICBsb2NhbCBmb3VuZD1mYWxzZQorICAgIGZvciBydW50ZXN0IGluIGBmaW5kIC4gLW5hbWUgcnVuX3Rlc3RcLnNoYDsgZG8KKyAgICAgICAgZm9yIGlkIGluIGAke3J1bnRlc3R9IGxpc3RfdGVzdF9pZHNgOyBkbworICAgICAgICAgICAgaWYgW1sgIiR7aWR9IiA9ICIke3Rlc3RpZH0iIF1dOyB0aGVuCisgICAgICAgICAgICAgICAgZm91bmQ9dHJ1ZQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmaQorICAgICAgICBkb25lCisgICAgICAgIGlmIFtbICIke2ZvdW5kfSIgPSB0cnVlIF1dOyB0aGVuCisgICAgICAgICAgICAke3J1bnRlc3R9IHJ1bl90ZXN0X2lkICR7dGVzdGlkfQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICBkb25lCisgICAgaWYgW1sgIiR7Zm91bmR9IiA9IGZhbHNlIF1dOyB0aGVuCisgICAgICAgIGVjaG8gSW52YWxpZCBUZXN0IElkLgorICAgICAgICBleGl0IDEKKyAgICBmaQogfQogCiBpZiBbICEgLXogIiR7SkVOS0lOU19IT01FfSIgXSA7IHRoZW4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvcG9tLnhtbAppbmRleCBmNDBkNzFhLi45NjZjNzJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9wb20ueG1sCkBAIC0zMCw3ICszMCw3IEBACiAgICAgPGFydGlmYWN0SWQ+ZWpiMTwvYXJ0aWZhY3RJZD4KIAogICAgIDxuYW1lPkhLMiBDREkgQmFzaWMgVGVzdCBFSkIxPC9uYW1lPgotICAgIAorCiAgICAgPGJ1aWxkPgogICAgICAgPHBsdWdpbnM+CiAgICAgICAgICAgPHBsdWdpbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lamIxL0Jhc2ljRWpiLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWpiMS9CYXNpY0VqYi5qYXZhCmluZGV4IDk1OWQ0ZjQuLmYyNDZiMTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lamIxL0Jhc2ljRWpiLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2VqYjEvQmFzaWNFamIuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogLyoqCiAgKiBUaGlzIGlzIGEgc2ltcGxlIEVKQiBpbnRlcmZhY2UgdGhhdCBoYXMgbWV0aG9kcyB1c2VkIGJ5IHRoZSBjbGllbnQKICAqIHRvIGVuc3VyZSB0aGF0IGVhY2ggdGVzdCBoYXMgcGFzc2VkCi0gKiAKKyAqCiAgKiBAYXV0aG9yIGp3ZWxscwogICoKICAqLwpAQCAtMzAsMjkgKzMwLDI5IEBACiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBDREkgbWFuYWdlciB3YXMgcHJvcGVybHkgaW5qZWN0ZWQKICAgICAgKiBpbnRvIHRoZSBFSkIgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlCi0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIENESSBiZWFuIG1hbmFnZXIgd2FzIGluamVjdGVkIGludG8gdGhpcyBFSkIKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBjZGlNYW5hZ2VySW5qZWN0ZWQoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiBhbiBISzIgc2VydmljZUxvY2F0b3Igd2FzIHByb3Blcmx5IGluamVjdGVkCiAgICAgICogaW50byB0aGUgRUpCIHRoYXQgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZQogICAgICAqIDxwPgogICAgICAqIFRoaXMgZGVtb25zdHJhdGVzIHRoYXQgSEsyIHNlcnZpY2VzIGFyZSBiZWluZyBpbmplY3RlZCBpbnRvCiAgICAgICogQ0RJIGNyZWF0ZWQgYmVhbnMKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgRUpCIHdhcyBpbmplY3RlZCB3aXRoIGFuIEhLMiBzZXJ2aWNlIGxvY2F0b3IKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBzZXJ2aWNlTG9jYXRvckluamVjdGVkKCk7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIHVzZXMgdGhlIEhLMiBTZXJ2aWNlTG9jYXRvciB0byBpbnN0YWxsIHRoZQogICAgICAqIEJhc2ljU2VydmljZSBkZXNjcmlwdG9yIGludG8gdGhlIGluamVjdGVkIEhLMgogICAgICAqIFNlcnZpY2VMb2NhdG9yCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgaW5zdGFsbEhLMlNlcnZpY2UoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGVuc3VyZXMgdGhhdCB0aGUgSEsyIHNlcnZpY2UgaW5zdGFsbGVkIHdpdGgKICAgICAgKiB7QGxpbmsgI2luc3RhbGxISzJTZXJ2aWNlKCl9IGNhbiBiZSBpbmplY3RlZCB3aXRoCkBAIC02MCw0NCArNjAsNDQgQEAKICAgICAgKiA8cD4KICAgICAgKiBUaGlzIGRlbW9uc3RyYXRlcyB0aGF0IHNlcnZpY2VzIGNyZWF0ZWQgd2l0aCBISzIgY2FuIGJlCiAgICAgICogaW5qZWN0ZWQgd2l0aCBiZWFucyBjcmVhdGVkIHdpdGggQ0RJCi0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIEJhc2ljU2VydmljZSBISzIgc2VydmljZSB3YXMgaW5qZWN0ZWQKICAgICAgKiB3aXRoIGEgQ0RJIGJlYW4gaW5zdGFuY2UKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBoazJTZXJ2aWNlSW5qZWN0ZWRXaXRoRWpiKCk7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHdpdGhvdXQgdGhyb3dpbmcgYW4gZXJyb3IgaWYgYWxsIG9mIHRoZSBDREkgZXh0ZW5zaW9uCiAgICAgICogZXZlbnRzIGhhZCBwcm9wZXIgYWNjZXNzIHRvIHRoZSBTZXJ2aWNlTG9jYXRvciBpbiBKTkRJCi0gICAgICogCisgICAgICoKICAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkVycm9yIGlmIGFueSBvZiB0aGUgZXh0ZW5zaW9uIHBvaW50cyBkaWQgbm90IGhhdmUKICAgICAgKiBhY2Nlc3MgdG8gdGhlIFNlcnZpY2VMb2NhdG9yCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgaXNTZXJ2aWNlTG9jYXRvckF2YWlsYWJsZUluQWxsQ0RJRXh0ZW5zaW9uRXZlbnRzKCk7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBlbnN1cmVzIHRoYXQgdGhlIEN1c3RvbVNjb3BlZEVKQiBnZXRzIHByb3Blcmx5IGluamVjdGVkCiAgICAgICogd2l0aCB0aGUgSEsyIHNlcnZpY2UKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBpc0VKQldpdGhDdXN0b21ISzJTY29wZVByb3Blcmx5SW5qZWN0ZWQoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFRlc3RzIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gb2YgUG9wdWxhdG9yUG9zdFByb2Nlc3NvciBwdXQgaW50bwogICAgICAqIE1FVEEtSU5GL3NlcnZpY2VzIHJ1bnMgcHJvcGVybHkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBkb2VzQXBwbGljYXRpb25EZWZpbmVkUG9wdWxhdG9yUG9zdFByb2Nlc3NvclJ1bigpOwotICAgIAorCiAgICAgLyoqCiAgICAgICogVGVzdHMgdGhhdCBhIHNlcnZpY2UgYWRkZWQgdmlhIGFuIEhLMiB7QGxpbmsgSnVzdEluVGltZVJlc29sdmVyfQogICAgICAqIGlzIHByb3Blcmx5IGFkZGVkIHRvIHRoZSBDREkgYnJpZGdlCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgaXNTZXJ2aWNlQWRkZWRXaXRoSklUUmVzb2x2ZXJBZGRlZCgpOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIHRoYXQgYW4gQXBwbGljYXRpb25TY29wZWQgQ0RJIHNlcnZpY2UgY2FuIGJlIGluamVjdGVkIGludG8KICAgICAgKiBhbiBISzIgc2VydmljZQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNoZWNrQXBwbGljYXRpb25TY29wZWRTZXJ2aWNlSW5qZWN0ZWRJbnRvSGsyU2VydmljZSgpOwotICAgIAorCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lamIxL0VqYkluamVjdGVkV2l0aFNlcnZpY2VMb2NhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWpiMS9FamJJbmplY3RlZFdpdGhTZXJ2aWNlTG9jYXRvci5qYXZhCmluZGV4IDIxZDA3NzMuLmM2M2FkNjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lamIxL0VqYkluamVjdGVkV2l0aFNlcnZpY2VMb2NhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2VqYjEvRWpiSW5qZWN0ZWRXaXRoU2VydmljZUxvY2F0b3IuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogCiAvKioKICAqIFNpbXBsZSBFSkIgY3JlYXRlZCBieSBDREkgdGhhdCBpbmplY3RzIGEgSEsyIFNlcnZpY2VMb2NhdG9yIQotICogCisgKgogICogQGF1dGhvciBqd2VsbHMKICAqLwogQFN0YXRlbGVzcwpAQCAtNDksMTMgKzQ5LDEzIEBACiBwdWJsaWMgY2xhc3MgRWpiSW5qZWN0ZWRXaXRoU2VydmljZUxvY2F0b3IgaW1wbGVtZW50cyBCYXNpY0VqYiB7CiAgICAgQEluamVjdAogICAgIHByaXZhdGUgQmVhbk1hbmFnZXIgYmVhbk1hbmFnZXI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSBTZXJ2aWNlTG9jYXRvciBsb2NhdG9yOwotICAgIAorCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgQ3VzdG9tU2NvcGVkRWpiIGN1c3RvbVNjb3BlZEVqYjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwcml2YXRlIENESVNlcnZpY2VJbmplY3RlZFdpdGhISzJTZXJ2aWNlIGNkaUluamVjdGVkV2l0aEhLMlNlcnZpY2U7CiAKQEAgLTczLDEwICs3MywxMCBAQAogICAgIHB1YmxpYyB2b2lkIGluc3RhbGxISzJTZXJ2aWNlKCkgewogICAgICAgICBEeW5hbWljQ29uZmlndXJhdGlvblNlcnZpY2UgZGNzID0gbG9jYXRvci5nZXRTZXJ2aWNlKER5bmFtaWNDb25maWd1cmF0aW9uU2VydmljZS5jbGFzcyk7CiAgICAgICAgIER5bmFtaWNDb25maWd1cmF0aW9uIGNvbmZpZyA9IGRjcy5jcmVhdGVEeW5hbWljQ29uZmlndXJhdGlvbigpOwotICAgICAgICAKKwogICAgICAgICBjb25maWcuYWRkQWN0aXZlRGVzY3JpcHRvcihCYXNpY1NlcnZpY2UuY2xhc3MpOwotICAgICAgICAKLSAgICAgICAgY29uZmlnLmNvbW1pdCgpOyAKKworICAgICAgICBjb25maWcuY29tbWl0KCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgIGlmIChicyA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ291bGQgbm90IGZpbmQgQmFzaWNTZXJ2aWNlIGluIGxvY2F0b3IgIiArIGxvY2F0b3IpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGJvb2xlYW4gcmV0VmFsID0gYnMuZ290SW5qZWN0ZWRXaXRoQmVhbk1hbmFnZXIoKTsKICAgICAgICAgcmV0dXJuIHJldFZhbDsKICAgICB9CkBAIC05MywyMSArOTMsMjEgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBpc1NlcnZpY2VMb2NhdG9yQXZhaWxhYmxlSW5BbGxDRElFeHRlbnNpb25FdmVudHMoKSB7CiAgICAgICAgIEhLMkV4dGVuc2lvblZlcmlmaWVyIHZlcmlmaWVyID0gbG9jYXRvci5nZXRTZXJ2aWNlKEhLMkV4dGVuc2lvblZlcmlmaWVyLmNsYXNzKTsKLSAgICAgICAgCisKICAgICAgICAgdmVyaWZpZXIudmFsaWRhdGUoKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBpc0VKQldpdGhDdXN0b21ISzJTY29wZVByb3Blcmx5SW5qZWN0ZWQoKSB7CiAgICAgICAgIGN1c3RvbVNjb3BlZEVqYi5jaGVja01lKCk7Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgZG9lc0FwcGxpY2F0aW9uRGVmaW5lZFBvcHVsYXRvclBvc3RQcm9jZXNzb3JSdW4oKSB7CiAgICAgICAgIEFjdGl2ZURlc2NyaXB0b3I8Pz4gZGVzY3JpcHRvciA9IGxvY2F0b3IuZ2V0QmVzdERlc2NyaXB0b3IoQnVpbGRlckhlbHBlci5jcmVhdGVDb250cmFjdEZpbHRlcihISzJTZXJ2aWNlLmNsYXNzLmdldE5hbWUoKSkpOwogICAgICAgICBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IG1ldGFkYXRhID0gZGVzY3JpcHRvci5nZXRNZXRhZGF0YSgpOyAgLy8gQW4gTlBFIG1lYW5zIHdlIGRvbid0IGhhdmUgdGhlIGRlc2NyaXB0b3IKLSAgICAgICAgCisKICAgICAgICAgTGlzdDxTdHJpbmc+IHZhbHVlcyA9IG1ldGFkYXRhLmdldChBcHBsaWNhdGlvblBvcHVsYXRvclBvc3RQcm9jZXNzb3IuS0VZKTsKICAgICAgICAgaWYgKCF2YWx1ZXMuZ2V0KDApLmVxdWFscyhBcHBsaWNhdGlvblBvcHVsYXRvclBvc3RQcm9jZXNzb3IuVkFMVUUpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIkluY29ycmVjdCB2YWx1ZSAwOiAiICsgdmFsdWVzLmdldCgwKSk7CkBAIC0xMjksMTUgKzEyOSwxNSBAQAogICAgICAgICAgICAgICAgIEhLMlBlckxvb2t1cEluamVjdGVkV2l0aENESUFwcGxpY2F0aW9uU2NvcGVkLmNsYXNzKTsKICAgICAgICAgSEsyUGVyTG9va3VwSW5qZWN0ZWRXaXRoQ0RJQXBwbGljYXRpb25TY29wZWQgaGsyU2VydmljZTMgPSBsb2NhdG9yLmdldFNlcnZpY2UoCiAgICAgICAgICAgICAgICAgSEsyUGVyTG9va3VwSW5qZWN0ZWRXaXRoQ0RJQXBwbGljYXRpb25TY29wZWQuY2xhc3MpOwotICAgICAgICAKKwogICAgICAgICBDb3VudGluZ0FwcGxpY2F0aW9uU2NvcGVkQ0RJU2VydmljZSBjZGlTZXJ2aWNlMSA9IGhrMlNlcnZpY2UxLmdldENvdW50aW5nQ0RJU2VydmljZSgpOwogICAgICAgICBDb3VudGluZ0FwcGxpY2F0aW9uU2NvcGVkQ0RJU2VydmljZSBjZGlTZXJ2aWNlMiA9IGhrMlNlcnZpY2UyLmdldENvdW50aW5nQ0RJU2VydmljZSgpOwogICAgICAgICBDb3VudGluZ0FwcGxpY2F0aW9uU2NvcGVkQ0RJU2VydmljZSBjZGlTZXJ2aWNlMyA9IGhrMlNlcnZpY2UzLmdldENvdW50aW5nQ0RJU2VydmljZSgpOwotICAgICAgICAKKwogICAgICAgICBpZiAoMSAhPSBjZGlTZXJ2aWNlMS5nZXROdW1iZXJPZlRpbWVzTWV0aG9kQ2FsbGVkKCkpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigiRGlkIG5vdCBnZXQgMSBmb3IgZmlyc3QgY2FsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmICgyICE9IGNkaVNlcnZpY2UyLmdldE51bWJlck9mVGltZXNNZXRob2RDYWxsZWQoKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCJEaWQgbm90IGdldCAyIGZvciBzZWNvbmQgY2FsbCAobm90IHRoZSBzYW1lIGluc3RhbmNlKSAiICsgY2RpU2VydmljZTEgKyAiLyIgKyBjZGlTZXJ2aWNlMiArICIvIiArIGNkaVNlcnZpY2UzKTsKICAgICAgICAgfQpAQCAtMTQ1LDIwICsxNDUsMjAgQEAKICAgICAgICAgaWYgKDMgIT0gY2RpU2VydmljZTMuZ2V0TnVtYmVyT2ZUaW1lc01ldGhvZENhbGxlZCgpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIkRpZCBub3QgZ2V0IDMgZm9yIHNlY29uZCBjYWxsIChub3QgdGhlIHNhbWUgaW5zdGFuY2UpICIgKyBjZGlTZXJ2aWNlMSArICIvIiArIGNkaVNlcnZpY2UyICsgIi8iICsgY2RpU2VydmljZTMpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGludCBjb25zdHJ1Y3RvckNvdW50MSA9IGNkaVNlcnZpY2UxLmdldENvbnN0cnVjdGVkQ291bnQoKTsKICAgICAgICAgaWYgKGNvbnN0cnVjdG9yQ291bnQxID4gMikgeyAgLy8gT25lIGZvciB0aGUgcHJveHksIG9uZSBmb3IgdGhlIHRydWUgb2JqZWN0CiAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoImNvdW5zdHJ1Y3RvckNvdW50MT0iICsgY29uc3RydWN0b3JDb3VudDEgKyAiIGl0IHNob3VsZCBsZXNzIHRoYW4gMiIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGludCBjb25zdHJ1Y3RvckNvdW50MiA9IGNkaVNlcnZpY2UyLmdldENvbnN0cnVjdGVkQ291bnQoKTsKICAgICAgICAgaWYgKGNvbnN0cnVjdG9yQ291bnQxID4gMikgeyAgLy8gT25lIGZvciB0aGUgcHJveHksIG9uZSBmb3IgdGhlIHRydWUgb2JqZWN0CiAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoImNvdW5zdHJ1Y3RvckNvdW50Mj0iICsgY29uc3RydWN0b3JDb3VudDIgKyAiIGl0IHNob3VsZCBiZSBsZXNzIHRoYW4gMiIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGludCBjb25zdHJ1Y3RvckNvdW50MyA9IGNkaVNlcnZpY2UzLmdldENvbnN0cnVjdGVkQ291bnQoKTsKICAgICAgICAgaWYgKGNvbnN0cnVjdG9yQ291bnQxID4gMikgeyAgLy8gT25lIGZvciB0aGUgcHJveHksIG9uZSBmb3IgdGhlIHRydWUgb2JqZWN0CiAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoImNvdW5zdHJ1Y3RvckNvdW50Mz0iICsgY29uc3RydWN0b3JDb3VudDMgKyAiIGl0IHNob3VsZCBiZSBsZXNzIHRoYW4gMiIpOwogICAgICAgICB9Ci0gICAgfSAgICAKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWpiMS9wcHAvQXBwbGljYXRpb25Qb3B1bGF0b3JQb3N0UHJvY2Vzc29yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWpiMS9wcHAvQXBwbGljYXRpb25Qb3B1bGF0b3JQb3N0UHJvY2Vzc29yLmphdmEKaW5kZXggZTI5YjBhNy4uNWNmZGU3MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2VqYjEvcHBwL0FwcGxpY2F0aW9uUG9wdWxhdG9yUG9zdFByb2Nlc3Nvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lamIxL3BwcC9BcHBsaWNhdGlvblBvcHVsYXRvclBvc3RQcm9jZXNzb3IuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogICogVGhpcyBwb3N0LXByb2Nlc3NvciB3aWxsIGJlIHBsYWNlZCBpbnRvIHRoZSBNRVRBLUlORi9zZXJ2aWNlcwogICogb2YgdGhlIGFwcGxpY2F0aW9uLiAgVGhlIHRlc3Qgd2lsbCBlbnN1cmUgdGhhdCBpdCBoYXMKICAqIGJlZW4gcHJvcGVybHkgcnVuCi0gKiAKKyAqCiAgKiBAYXV0aG9yIGp3ZWxscwogICoKICAqLwpAQCAtNDIsNyArNDIsNyBAQAogICAgIHB1YmxpYyBEZXNjcmlwdG9ySW1wbCBwcm9jZXNzKFNlcnZpY2VMb2NhdG9yIHNlcnZpY2VMb2NhdG9yLAogICAgICAgICAgICAgRGVzY3JpcHRvckltcGwgZGVzY3JpcHRvckltcGwpIHsKICAgICAgICAgaWYgKCFkZXNjcmlwdG9ySW1wbC5nZXRBZHZlcnRpc2VkQ29udHJhY3RzKCkuY29udGFpbnMoSEsyU2VydmljZS5jbGFzcy5nZXROYW1lKCkpKSByZXR1cm4gZGVzY3JpcHRvckltcGw7Ci0gICAgICAgIAorCiAgICAgICAgIGRlc2NyaXB0b3JJbXBsLmFkZE1ldGFkYXRhKEtFWSwgVkFMVUUpOwogICAgICAgICByZXR1cm4gZGVzY3JpcHRvckltcGw7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2VqYjEvc2NvcGVkL0NvdW50aW5nQXBwbGljYXRpb25TY29wZWRDRElTZXJ2aWNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWpiMS9zY29wZWQvQ291bnRpbmdBcHBsaWNhdGlvblNjb3BlZENESVNlcnZpY2UuamF2YQppbmRleCBiOTZlOWZlLi41ZWEwYzE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWpiMS9zY29wZWQvQ291bnRpbmdBcHBsaWNhdGlvblNjb3BlZENESVNlcnZpY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWpiMS9zY29wZWQvQ291bnRpbmdBcHBsaWNhdGlvblNjb3BlZENESVNlcnZpY2UuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogLyoqCiAgKiBUaGlzIGlzIGEgQ0RJIEFwcGxpY2F0aW9uU2NvcGVkIChhIE5vcm1hbFNjb3BlKSBjbGFzcyB0aGF0IHdpbGwgYmUgaW5qZWN0ZWQKICAqIGludG8gYW4gSEsyIHNlcnZpY2UKLSAqIAorICoKICAqIEBhdXRob3IgandlbGxzCiAgKgogICovCkBAIC0zMCwyMSArMzAsMjEgQEAKIEBNYW5hZ2VkQmVhbgogcHVibGljIGNsYXNzIENvdW50aW5nQXBwbGljYXRpb25TY29wZWRDRElTZXJ2aWNlIHsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY29uc3RydWN0ZWRDb3VudDsgIC8vIHN0YXRpYyB0byBiZSBjbGFzcyB3aWRlCi0gICAgCisKICAgICBwcml2YXRlIGludCBtZXRob2RDYWxsZWRDb3VudDsgIC8vIG5vdCBzdGF0aWMsIHRvIGJlIGluc3RhbmNlIHdpZGUKLSAgICAKKwogICAgIHB1YmxpYyBDb3VudGluZ0FwcGxpY2F0aW9uU2NvcGVkQ0RJU2VydmljZSgpIHsKICAgICAgICAgc3luY2hyb25pemVkIChDb3VudGluZ0FwcGxpY2F0aW9uU2NvcGVkQ0RJU2VydmljZS5jbGFzcykgewogICAgICAgICAgICAgY29uc3RydWN0ZWRDb3VudCsrOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGludCBnZXRDb25zdHJ1Y3RlZENvdW50KCkgewogICAgICAgICBzeW5jaHJvbml6ZWQgKENvdW50aW5nQXBwbGljYXRpb25TY29wZWRDRElTZXJ2aWNlLmNsYXNzKSB7CiAgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0ZWRDb3VudDsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBpbnQgZ2V0TnVtYmVyT2ZUaW1lc01ldGhvZENhbGxlZCgpIHsKICAgICAgICAgcmV0dXJuICsrbWV0aG9kQ2FsbGVkQ291bnQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2VqYjEvc2NvcGVkL0N1c3RvbVNjb3BlQ29udGV4dC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2VqYjEvc2NvcGVkL0N1c3RvbVNjb3BlQ29udGV4dC5qYXZhCmluZGV4IDgzNDhjNmEuLmY5NjYyMzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lamIxL3Njb3BlZC9DdXN0b21TY29wZUNvbnRleHQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWpiMS9zY29wZWQvQ3VzdG9tU2NvcGVDb250ZXh0LmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKICAqIFRoZSBjb250ZXh0IGltcGxlbWVudGF0aW9uIGZvciBDdXN0b21TY29wZS4gIERvZXMgYWxsb3cgbnVsbCB2YWx1ZQogICogcmV0dXJucy4gIFdvcmtzIG1vcmUgbGlrZSBTaW5nbGV0b24gdGhhbiBhbnl0aGluZyBlbHNlLCB0aG91Z2ggaXQKICAqIGRvZXMga2VlcCBpdHMgb3duIG1hcCwgYW5kIGhlbmNlIGNhbiBkbyBiZXR0ZXIgYXQgc2h1dGRvd24KLSAqIAorICoKICAqIEBhdXRob3IgandlbGxzCiAgKgogICovCkBAIC01OCw4ICs1OCw4IEBACiAgICAgICAgIGlmICh2YWx1ZXMuY29udGFpbnNLZXkoYWN0aXZlRGVzY3JpcHRvcikpIHsKICAgICAgICAgICAgIHJldHVybiAoVSkgdmFsdWVzLmdldChhY3RpdmVEZXNjcmlwdG9yKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBVIHJldFZhbCA9IGFjdGl2ZURlc2NyaXB0b3IuY3JlYXRlKHJvb3QpOwogICAgICAgICB2YWx1ZXMucHV0KGFjdGl2ZURlc2NyaXB0b3IsIHJldFZhbCk7CiAgICAgICAgIHJldHVybiByZXRWYWw7CkBAIC03OSw3ICs3OSw3IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgZGVzdHJveU9uZShBY3RpdmVEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKICAgICAgICAgaWYgKCF2YWx1ZXMuY29udGFpbnNLZXkoZGVzY3JpcHRvcikpIHJldHVybjsKLSAgICAgICAgCisKICAgICAgICAgT2JqZWN0IHUgPSB2YWx1ZXMuZ2V0KGRlc2NyaXB0b3IpOwogICAgICAgICBkZXNjcmlwdG9yLmRpc3Bvc2UodSk7CiAgICAgfQpAQCAtMTA4LDEwICsxMDgsMTAgQEAKICAgICAgICAgZm9yIChNYXAuRW50cnk8QWN0aXZlRGVzY3JpcHRvciwgT2JqZWN0PiBlbnRyeSA6IHZhbHVlcy5lbnRyeVNldCgpKSB7CiAgICAgICAgICAgICBBY3RpdmVEZXNjcmlwdG9yIGFkID0gZW50cnkuZ2V0S2V5KCk7CiAgICAgICAgICAgICBPYmplY3QgdmFsdWUgPSBlbnRyeS5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGFkLmRpc3Bvc2UodmFsdWUpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHZhbHVlcy5jbGVhcigpOwogCiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2VqYjEvc2NvcGVkL0N1c3RvbVNjb3BlZEVqYi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2VqYjEvc2NvcGVkL0N1c3RvbVNjb3BlZEVqYi5qYXZhCmluZGV4IGU2M2FjY2QuLmQ5MzhiZmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lamIxL3Njb3BlZC9DdXN0b21TY29wZWRFamIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWpiMS9zY29wZWQvQ3VzdG9tU2NvcGVkRWpiLmphdmEKQEAgLTI4LDI1ICsyOCwyNSBAQAogcHVibGljIGNsYXNzIEN1c3RvbVNjb3BlZEVqYiB7CiAgICAgQEluamVjdAogICAgIHByaXZhdGUgSEsyU2VydmljZSBoazJTZXJ2aWNlOwotICAgIAorCiAgICAgQEluamVjdCBATmFtZWQKICAgICBwcml2YXRlIEhLMk5hbWVkU2VydmljZSBydW1wbGVzdGlsdHNraW47Ci0gICAgCisKICAgICBASW5qZWN0IEBOYW1lZChISzJOYW1lZFNlcnZpY2VGYWN0b3J5Mi5OQU1FKQogICAgIHByaXZhdGUgSEsyTmFtZWRTZXJ2aWNlIGNhcm9sOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgY2hlY2tNZSgpIHsKICAgICAgICAgaW50IGpvYlZhbHVlID0gaGsyU2VydmljZS5kb0FKb2IoKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGpvYlZhbHVlICE9IEhLMlNlcnZpY2UuUkVUVVJOX1ZBTFVFKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIlRoZSBkb0FKb2IgbWV0aG9kIHNob3VsZCBoYXZlIHJldHVybmVkICIgKyBISzJTZXJ2aWNlLlJFVFVSTl9WQUxVRSArCiAgICAgICAgICAgICAgICAgICAgICIgYnV0IHJldHVybmVkICIgKyBqb2JWYWx1ZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKCFydW1wbGVzdGlsdHNraW4uZ2V0TmFtZSgpLmVxdWFscyhISzJOYW1lZFNlcnZpY2VGYWN0b3J5Lk5BTUVEX1NFUlZJQ0VfTkFNRSkpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigiVGhlIG5ha2VkIEBOYW1lZCBISzJOYW1lZFNlcnZpY2Ugd2FzIG5vdCBzZXQgb3IgaGFkIHRoZSB3cm9uZyBuYW1lOiAiICsgcnVtcGxlc3RpbHRza2luLmdldE5hbWUoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKCFjYXJvbC5nZXROYW1lKCkuZXF1YWxzKEhLMk5hbWVkU2VydmljZUZhY3RvcnkyLk5BTUUpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIlRoZSBzcGVjaWZpYyBATmFtZWQgSEsyTmFtZWRTZXJ2aWNlIHdhcyBub3Qgc2V0IG9yIGhhZCB0aGUgd3JvbmcgbmFtZTogIiArIGNhcm9sLmdldE5hbWUoKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lamIxL3Njb3BlZC9ISzJOYW1lZFNlcnZpY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lamIxL3Njb3BlZC9ISzJOYW1lZFNlcnZpY2UuamF2YQppbmRleCA2NTNkMzJmLi40MmE1MDg0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWpiMS9zY29wZWQvSEsyTmFtZWRTZXJ2aWNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2VqYjEvc2NvcGVkL0hLMk5hbWVkU2VydmljZS5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiAKIC8qKgogICogVGhpcyBzZXJ2aWNlIHdpbGwgYmUgbmFtZWQgYW5kIGluamVjdGVkIGludG8gYSBmaWVsZCB3aXRoIGEgbmFrZWQgTmFtZWQgYW5ub3RhdGlvbgotICogCisgKgogICogQGF1dGhvciBqd2VsbHMKICAqLwogQENvbnRyYWN0CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWpiMS9zY29wZWQvSEsyTmFtZWRTZXJ2aWNlRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2VqYjEvc2NvcGVkL0hLMk5hbWVkU2VydmljZUZhY3RvcnkuamF2YQppbmRleCAyODk1M2RjLi5lYWFjNTQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWpiMS9zY29wZWQvSEsyTmFtZWRTZXJ2aWNlRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lamIxL3Njb3BlZC9ISzJOYW1lZFNlcnZpY2VGYWN0b3J5LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIAogLyoqCiAgKiBUaGVyZSBhcmUgdHdvIGZhY3RvcmllcyBwcm9kdWNpbmcgdGhpcyB0eXBlLCBib3RoIHdpdGggZGlmZmVyZW50IG5hbWVzCi0gKiAKKyAqCiAgKiBAYXV0aG9yIGp3ZWxscwogICoKICAqLwpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICAgICAgICAgIHJldHVybiBOQU1FRF9TRVJWSUNFX05BTUU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2VqYjEvc2NvcGVkL0hLMk5hbWVkU2VydmljZUZhY3RvcnkyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWpiMS9zY29wZWQvSEsyTmFtZWRTZXJ2aWNlRmFjdG9yeTIuamF2YQppbmRleCA3ZjQ3NGJlLi40OWM1NWZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWpiMS9zY29wZWQvSEsyTmFtZWRTZXJ2aWNlRmFjdG9yeTIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWpiMS9zY29wZWQvSEsyTmFtZWRTZXJ2aWNlRmFjdG9yeTIuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICAgICAgICAgIHJldHVybiBOQU1FOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lamIxL3Njb3BlZC9ISzJQZXJMb29rdXBJbmplY3RlZFdpdGhDRElBcHBsaWNhdGlvblNjb3BlZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2VqYjEvc2NvcGVkL0hLMlBlckxvb2t1cEluamVjdGVkV2l0aENESUFwcGxpY2F0aW9uU2NvcGVkLmphdmEKaW5kZXggMzA4NWUyYy4uNTdkMzY1MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2VqYjEvc2NvcGVkL0hLMlBlckxvb2t1cEluamVjdGVkV2l0aENESUFwcGxpY2F0aW9uU2NvcGVkLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2VqYjEvc2NvcGVkL0hLMlBlckxvb2t1cEluamVjdGVkV2l0aENESUFwcGxpY2F0aW9uU2NvcGVkLmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKICAqIFRoaXMgaXMgYSBwZXItbG9va3VwIGhrMiBjZGkgc2VydmljZSBpbmplY3RlZCB3aXRoIGFuIGFwcGxpY2F0aW9uIHNjb3BlZCBDREkKICAqIHNlcnZpY2UsIGluIG9yZGVyIHRvIHRlc3Qgd2hldGhlciBvciBub3QgYSBub3JtYWwgc2NvcGVkIENESSBzZXJ2aWNlIGNhbgogICogcHJvcGVybHkgYmUgaW5qZWN0ZWQgaW50byBhbiBoazIgc2VydmljZQotICogCisgKgogICogQGF1dGhvciBqd2VsbHMKICAqCiAgKi8KQEAgLTMzLDcgKzMzLDcgQEAKIHB1YmxpYyBjbGFzcyBISzJQZXJMb29rdXBJbmplY3RlZFdpdGhDRElBcHBsaWNhdGlvblNjb3BlZCB7CiAgICAgQEluamVjdAogICAgIHByaXZhdGUgQ291bnRpbmdBcHBsaWNhdGlvblNjb3BlZENESVNlcnZpY2UgY2RpQXBwbGljYXRpb25TY29wZWRTZXJ2aWNlOwotICAgIAorCiAgICAgcHVibGljIENvdW50aW5nQXBwbGljYXRpb25TY29wZWRDRElTZXJ2aWNlIGdldENvdW50aW5nQ0RJU2VydmljZSgpIHsKICAgICAgICAgcmV0dXJuIGNkaUFwcGxpY2F0aW9uU2NvcGVkU2VydmljZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWpiMS9zY29wZWQvSEsyU2VydmljZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2VqYjEvc2NvcGVkL0hLMlNlcnZpY2UuamF2YQppbmRleCAyOTY0MDBiLi40ZGM5YzJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWpiMS9zY29wZWQvSEsyU2VydmljZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lamIxL3Njb3BlZC9ISzJTZXJ2aWNlLmphdmEKQEAgLTIxLDE3ICsyMSwxNyBAQAogLyoqCiAgKiBUaGlzIHNlcnZpY2UgaXMgY3JlYXRlZCBieSBoazIgYW5kIHRoZSBpbXBsZW1ldGF0aW9uCiAgKiB3aWxsIGJlIGluIGEgY3VzdG9taXplZCBzY29wZQotICogCisgKgogICogQGF1dGhvciBqd2VsbHMKICAqCiAgKi8KIEBDb250cmFjdAogcHVibGljIGludGVyZmFjZSBISzJTZXJ2aWNlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRVRVUk5fVkFMVUUgPSAzODE7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgYWx3YXlzIHJldHVybiBSRVRVUk5fVkFMVUUKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4gVGhpcyBtZXRob2Qgd2lsbCBhbHdheXMgcmV0dXJuIFJFVFVSTl9WQUxVRQogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZG9BSm9iKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWpiMS9zY29wZWQvSEsyU2VydmljZUZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lamIxL3Njb3BlZC9ISzJTZXJ2aWNlRmFjdG9yeS5qYXZhCmluZGV4IDY3ZTQ5ODcuLmJiZjg3MjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lamIxL3Njb3BlZC9ISzJTZXJ2aWNlRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lamIxL3Njb3BlZC9ISzJTZXJ2aWNlRmFjdG9yeS5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAgKiBUaGlzIGlzIGFuIEhLMiBmYWN0b3J5IGZvciBhbiBISzJTZXJ2aWNlLiAgQSBGYWN0b3J5IGlzIHVzZWQKICAqIGZvciB0aGUgSEsyU2VydmljZSBzbyB0aGF0IHdlIGNhbiBGT1JDRSBISzJTZXJ2aWNlIHRvIE5PVAogICogYmUgYSByZWNvZ25pemFibGUgYmVhbiB0byBDREkKLSAqIAorICoKICAqIEBhdXRob3IgandlbGxzCiAgKgogICovCkBAIC00MCw3ICs0MCw3IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKEhLMlNlcnZpY2UgaW5zdGFuY2UpIHsKLSAgICAgICAgCisKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lamIxL3Njb3BlZC9ISzJTZXJ2aWNlSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2VqYjEvc2NvcGVkL0hLMlNlcnZpY2VJbXBsLmphdmEKaW5kZXggOTY4NDU2YS4uZDc2Mzc4NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2VqYjEvc2NvcGVkL0hLMlNlcnZpY2VJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2VqYjEvc2NvcGVkL0hLMlNlcnZpY2VJbXBsLmphdmEKQEAgLTIwLDE2ICsyMCwxNiBAQAogICogU2luY2UgdGhpcyBzZXJ2aWNlIGRvZXMgTk9UIGhhdmUgYSBjb25zdHJ1Y3RvciBtYXJrZWQKICAqIHdpdGgge0BsaW5rIEluamVjdH0gYW5kIGRvZXMgTk9UIGhhdmUgYSB6ZXJvLWFyZyBjb25zdHJ1Y3RvcgogICogQ0RJIHdpbGwgTk9UIGNvbnNpZGVyIHRoaXMgdG8gYmUgb25lIG9mIGl0cyBvd24gYmVhbnMKLSAqIAorICoKICAqIEBhdXRob3IgandlbGxzCiAgKgogICovCiBwdWJsaWMgY2xhc3MgSEsyU2VydmljZUltcGwgaW1wbGVtZW50cyBISzJTZXJ2aWNlIHsKICAgICBwcml2YXRlIGZpbmFsIGludCBqb2JWYWx1ZTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIERvaW5nIFRISVMgbWFrZXMgdGhpcyBOT1QgYSBDREkgc2VydmljZSEKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBqb2JWYWx1ZQogICAgICAqLwogICAgIHB1YmxpYyBISzJTZXJ2aWNlSW1wbChpbnQgam9iVmFsdWUpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9leHRlbnNpb24vQ0RJRXh0ZW5zaW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZXh0ZW5zaW9uL0NESUV4dGVuc2lvbi5qYXZhCmluZGV4IGRlNDA0NmYuLjNhMDcyNmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9leHRlbnNpb24vQ0RJRXh0ZW5zaW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2V4dGVuc2lvbi9DRElFeHRlbnNpb24uamF2YQpAQCAtNDgsNyArNDgsNyBAQAogLyoqCiAgKiBUaGlzIGV4dGVuc2lvbiBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IHRoZSBTZXJ2aWNlTG9jYXRvcgogICogaXMgYXZhaWxibGUgdmlhIEpOREkgaW4gYWxsIG9mIHRoZSBleHRlbnNpb24gY2FsbGJhY2tzCi0gKiAKKyAqCiAgKiBAYXV0aG9yIGp3ZWxscwogICoKICAqLwpAQCAtNTcsOTcgKzU3LDk3IEBACiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIEZJTEVfUE9TVEZJWCA9ICIudHh0IjsKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgSk5ESV9BUFBfTkFNRSA9ICJqYXZhOmFwcC9BcHBOYW1lIjsKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgSk5ESV9MT0NBVE9SX05BTUUgPSAiamF2YTphcHAvaGsyL1NlcnZpY2VMb2NhdG9yIjsKLSAgICAKKwogICAgIHByaXZhdGUgRmlsZSBjcmVhdGVEZXN0cnVjdGlvbkZpbGVPYmplY3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTdHJpbmcgYXBwTmFtZSA9IChTdHJpbmcpIGNvbnRleHQubG9va3VwKEpORElfQVBQX05BTUUpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZShGSUxFX1BSRUZJWCArIGFwcE5hbWUgKyBGSUxFX1BPU1RGSVgpOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChOYW1pbmdFeGNlcHRpb24gbmUpIHsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBTZXJ2aWNlTG9jYXRvciBnZXRTZXJ2aWNlTG9jYXRvcigpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgY29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHJldHVybiAoU2VydmljZUxvY2F0b3IpIGNvbnRleHQubG9va3VwKEpORElfTE9DQVRPUl9OQU1FKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIG5lKSB7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGZpbGUgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlCiAgICAgICogYXBwbGljYXRpb24gaGFzIHNodXQgZG93biBwcm9wZXJseSBoYXMgYmVlbiByZW1vdmVkIGFuZCB0aGVuCiAgICAgICogYWRkcyB0aGUgSEsyIHNlcnZpY2UgdG8gdGhlIHN5c3RlbQotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIGJlZm9yZUJlYW5EaXNjb3ZlcnkKICAgICAgKi8KICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICBwcml2YXRlIHZvaWQgYmVmb3JlQmVhbkRpc2NvdmVyeShAT2JzZXJ2ZXMgQmVmb3JlQmVhbkRpc2NvdmVyeSBiZWZvcmVCZWFuRGlzY292ZXJ5KSB7CiAgICAgICAgIEZpbGUgZGVzdHJ1Y3RvRmlsZSA9IGNyZWF0ZURlc3RydWN0aW9uRmlsZU9iamVjdCgpOwogICAgICAgICBpZiAoZGVzdHJ1Y3RvRmlsZSA9PSBudWxsKSByZXR1cm47Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChkZXN0cnVjdG9GaWxlLmV4aXN0cygpKSB7CiAgICAgICAgICAgICBpZiAoZGVzdHJ1Y3RvRmlsZS5kZWxldGUoKSA9PSBmYWxzZSkgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFNlcnZpY2VMb2NhdG9yIGxvY2F0b3IgPSBnZXRTZXJ2aWNlTG9jYXRvcigpOwogICAgICAgICBpZiAobG9jYXRvciA9PSBudWxsKSByZXR1cm47Ci0gICAgICAgIAorCiAgICAgICAgIERlc2NyaXB0b3IgZCA9IEJ1aWxkZXJIZWxwZXIubGluayhISzJFeHRlbnNpb25WZXJpZmllci5jbGFzcykuCiAgICAgICAgICAgICAgICAgaW4oU2luZ2xldG9uLmNsYXNzLmdldE5hbWUoKSkuCiAgICAgICAgICAgICAgICAgYW5kTG9hZFdpdGgobmV3IEhLMkxvYWRlckltcGwoKSkuCiAgICAgICAgICAgICAgICAgYnVpbGQoKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gSnVzdCBoYXZpbmcgdGhlIHNlcnZpY2UgcHJlc2VudCBpcyBlbm91Z2ggZm9yIHRoZSBmaXJzdCBjYWxsYmFjawogICAgICAgICBTZXJ2aWNlTG9jYXRvclV0aWxpdGllcy5hZGRPbmVEZXNjcmlwdG9yKGxvY2F0b3IsIGQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGZpbGUgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlCiAgICAgICogYXBwbGljYXRpb24gaGFzIHNodXQgZG93biBwcm9wZXJseSBoYXMgYmVlbiByZW1vdmVkIGFuZCB0aGVuCiAgICAgICogYWRkcyB0aGUgSEsyIHNlcnZpY2UgdG8gdGhlIHN5c3RlbQotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIGJlZm9yZUJlYW5EaXNjb3ZlcnkKICAgICAgKi8KICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICBwcml2YXRlIHZvaWQgYWZ0ZXJCZWFuRGlzY292ZXJ5KEBPYnNlcnZlcyBBZnRlckJlYW5EaXNjb3ZlcnkgYWZ0ZXJCZWFuRGlzY292ZXJ5KSB7CiAgICAgICAgIFNlcnZpY2VMb2NhdG9yIGxvY2F0b3IgPSBnZXRTZXJ2aWNlTG9jYXRvcigpOwogICAgICAgICBpZiAobG9jYXRvciA9PSBudWxsKSByZXR1cm47Ci0gICAgICAgIAorCiAgICAgICAgIEhLMkV4dGVuc2lvblZlcmlmaWVyIHZlcmlmaWVyID0gbG9jYXRvci5nZXRTZXJ2aWNlKEhLMkV4dGVuc2lvblZlcmlmaWVyLmNsYXNzKTsKICAgICAgICAgdmVyaWZpZXIuYWZ0ZXJCZWFuRGlzY292ZXJ5Q2FsbGVkKCk7CiAgICAgfQotICAgIAorCiAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgcHJpdmF0ZSB2b2lkIGFmdGVyRGVwbG95bWVudFZhbGlkYXRpb24oQE9ic2VydmVzIEFmdGVyRGVwbG95bWVudFZhbGlkYXRpb24gYWZ0ZXJEZXBsb3ltZW50VmFsaWRhdGlvbikgewogICAgICAgICBTZXJ2aWNlTG9jYXRvciBsb2NhdG9yID0gZ2V0U2VydmljZUxvY2F0b3IoKTsKICAgICAgICAgaWYgKGxvY2F0b3IgPT0gbnVsbCkgcmV0dXJuOwotICAgICAgICAKKwogICAgICAgICBISzJFeHRlbnNpb25WZXJpZmllciB2ZXJpZmllciA9IGxvY2F0b3IuZ2V0U2VydmljZShISzJFeHRlbnNpb25WZXJpZmllci5jbGFzcyk7CiAgICAgICAgIHZlcmlmaWVyLmFmdGVyRGVwbG95bWVudFZhbGlkYXRpb25DYWxsZWQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG9uZSBpcyBhIGxpdHRsZSBkaWZmZXJlbnQsIGFzIGl0IGNhbm5vdCB1c2UgdGhlIGFwcGxpY2F0aW9uIHRvCiAgICAgICogY29tbXVuaWNhdGUgc3VjY2VzcyBvciBmYWlsdXJlLiAgSW5zdGVhZCBpdCB3cml0ZXMgb3V0IGEgZmlsZSB0aGF0CiAgICAgICogdGhlIHRlc3Qgd2lsbCBsb29rIGZvciBhZnRlciB0aGUgYXBwbGljYXRpb24gaGFzIGJlZW4gdW5kZXBsb3llZAotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIGJlZm9yZVNodXRkb3duCiAgICAgICovCiAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgcHJpdmF0ZSB2b2lkIGJlZm9yZVNodXRkb3duKEBPYnNlcnZlcyBCZWZvcmVTaHV0ZG93biBiZWZvcmVTaHV0ZG93bikgewogICAgICAgICBTZXJ2aWNlTG9jYXRvciBsb2NhdG9yID0gZ2V0U2VydmljZUxvY2F0b3IoKTsKICAgICAgICAgaWYgKGxvY2F0b3IgPT0gbnVsbCkgcmV0dXJuOwotICAgICAgICAKKwogICAgICAgICBGaWxlIGRlc3RydWN0b0ZpbGUgPSBjcmVhdGVEZXN0cnVjdGlvbkZpbGVPYmplY3QoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGRlc3RydWN0b0ZpbGUuY3JlYXRlTmV3RmlsZSgpOwpAQCAtMTU3LDc5ICsxNTcsNzkgQEAKICAgICAgICAgICAgIGlvZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgIHByaXZhdGUgPFQ+IHZvaWQgcHJvY2Vzc0Fubm90YXRlZFR5cGUoQE9ic2VydmVzIFByb2Nlc3NBbm5vdGF0ZWRUeXBlPFQ+IHByb2Nlc3NBbm5vdGF0ZWRUeXBlKSB7CiAgICAgICAgIFNlcnZpY2VMb2NhdG9yIGxvY2F0b3IgPSBnZXRTZXJ2aWNlTG9jYXRvcigpOwogICAgICAgICBpZiAobG9jYXRvciA9PSBudWxsKSByZXR1cm47Ci0gICAgICAgIAorCiAgICAgICAgIEhLMkV4dGVuc2lvblZlcmlmaWVyIHZlcmlmaWVyID0gbG9jYXRvci5nZXRTZXJ2aWNlKEhLMkV4dGVuc2lvblZlcmlmaWVyLmNsYXNzKTsKICAgICAgICAgdmVyaWZpZXIucHJvY2Vzc0Fubm90YXRlZFR5cGVDYWxsZWQoKTsKICAgICB9Ci0gICAgCisKICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICBwcml2YXRlIDxUPiB2b2lkIHByb2Nlc3NJbmplY3Rpb25UYXJnZXQoQE9ic2VydmVzIFByb2Nlc3NJbmplY3Rpb25UYXJnZXQ8VD4gcHJvY2Vzc0luamVjdGlvblRhcmdldCkgewogICAgICAgICBTZXJ2aWNlTG9jYXRvciBsb2NhdG9yID0gZ2V0U2VydmljZUxvY2F0b3IoKTsKICAgICAgICAgaWYgKGxvY2F0b3IgPT0gbnVsbCkgcmV0dXJuOwotICAgICAgICAKKwogICAgICAgICBISzJFeHRlbnNpb25WZXJpZmllciB2ZXJpZmllciA9IGxvY2F0b3IuZ2V0U2VydmljZShISzJFeHRlbnNpb25WZXJpZmllci5jbGFzcyk7CiAgICAgICAgIHZlcmlmaWVyLnByb2Nlc3NJbmplY3Rpb25UYXJnZXRDYWxsZWQoKTsKICAgICB9Ci0gICAgCisKICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICBwcml2YXRlIDxULCBYPiB2b2lkIHByb2Nlc3NQcm9kdWNlcihAT2JzZXJ2ZXMgUHJvY2Vzc1Byb2R1Y2VyPFQsIFg+IHByb2Nlc3NQcm9kdWNlcikgewogICAgICAgICBTZXJ2aWNlTG9jYXRvciBsb2NhdG9yID0gZ2V0U2VydmljZUxvY2F0b3IoKTsKICAgICAgICAgaWYgKGxvY2F0b3IgPT0gbnVsbCkgcmV0dXJuOwotICAgICAgICAKKwogICAgICAgICBISzJFeHRlbnNpb25WZXJpZmllciB2ZXJpZmllciA9IGxvY2F0b3IuZ2V0U2VydmljZShISzJFeHRlbnNpb25WZXJpZmllci5jbGFzcyk7CiAgICAgICAgIHZlcmlmaWVyLnByb2Nlc3NQcm9kdWNlckNhbGxlZCgpOwogICAgIH0KLSAgICAKKwogICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgIHByaXZhdGUgPFQ+IHZvaWQgcHJvY2Vzc01hbmFnZWRCZWFuKEBPYnNlcnZlcyBQcm9jZXNzTWFuYWdlZEJlYW48VD4gcHJvY2Vzc01hbmFnZWRCZWFuKSB7CiAgICAgICAgIFNlcnZpY2VMb2NhdG9yIGxvY2F0b3IgPSBnZXRTZXJ2aWNlTG9jYXRvcigpOwogICAgICAgICBpZiAobG9jYXRvciA9PSBudWxsKSByZXR1cm47Ci0gICAgICAgIAorCiAgICAgICAgIEhLMkV4dGVuc2lvblZlcmlmaWVyIHZlcmlmaWVyID0gbG9jYXRvci5nZXRTZXJ2aWNlKEhLMkV4dGVuc2lvblZlcmlmaWVyLmNsYXNzKTsKICAgICAgICAgdmVyaWZpZXIucHJvY2Vzc01hbmFnZWRCZWFuQ2FsbGVkKCk7CiAgICAgfQotICAgIAorCiAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgcHJpdmF0ZSA8VD4gdm9pZCBwcm9jZXNzU2Vzc2lvbkJlYW4oQE9ic2VydmVzIFByb2Nlc3NTZXNzaW9uQmVhbjxUPiBwcm9jZXNzU2Vzc2lvbkJlYW4pIHsKICAgICAgICAgU2VydmljZUxvY2F0b3IgbG9jYXRvciA9IGdldFNlcnZpY2VMb2NhdG9yKCk7CiAgICAgICAgIGlmIChsb2NhdG9yID09IG51bGwpIHJldHVybjsKLSAgICAgICAgCisKICAgICAgICAgSEsyRXh0ZW5zaW9uVmVyaWZpZXIgdmVyaWZpZXIgPSBsb2NhdG9yLmdldFNlcnZpY2UoSEsyRXh0ZW5zaW9uVmVyaWZpZXIuY2xhc3MpOwogICAgICAgICB2ZXJpZmllci5wcm9jZXNzU2Vzc2lvbkJlYW5DYWxsZWQoKTsKICAgICB9Ci0gICAgCisKICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICBwcml2YXRlIDxULCBYPiB2b2lkIHByb2Nlc3NQcm9kdWNlck1ldGhvZChAT2JzZXJ2ZXMgUHJvY2Vzc1Byb2R1Y2VyTWV0aG9kPFQsIFg+IHByb2Nlc3NQcm9kdWNlck1ldGhvZCkgewogICAgICAgICBTZXJ2aWNlTG9jYXRvciBsb2NhdG9yID0gZ2V0U2VydmljZUxvY2F0b3IoKTsKICAgICAgICAgaWYgKGxvY2F0b3IgPT0gbnVsbCkgcmV0dXJuOwotICAgICAgICAKKwogICAgICAgICBISzJFeHRlbnNpb25WZXJpZmllciB2ZXJpZmllciA9IGxvY2F0b3IuZ2V0U2VydmljZShISzJFeHRlbnNpb25WZXJpZmllci5jbGFzcyk7CiAgICAgICAgIHZlcmlmaWVyLnByb2Nlc3NQcm9kdWNlck1ldGhvZENhbGxlZCgpOwogICAgIH0KLSAgICAKKwogICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgIHByaXZhdGUgPFQsIFg+IHZvaWQgcHJvY2Vzc1Byb2R1Y2VyRmllbGQoQE9ic2VydmVzIFByb2Nlc3NQcm9kdWNlckZpZWxkPFQsIFg+IHByb2Nlc3NQcm9kdWNlckZpZWxkKSB7CiAgICAgICAgIFNlcnZpY2VMb2NhdG9yIGxvY2F0b3IgPSBnZXRTZXJ2aWNlTG9jYXRvcigpOwogICAgICAgICBpZiAobG9jYXRvciA9PSBudWxsKSByZXR1cm47Ci0gICAgICAgIAorCiAgICAgICAgIEhLMkV4dGVuc2lvblZlcmlmaWVyIHZlcmlmaWVyID0gbG9jYXRvci5nZXRTZXJ2aWNlKEhLMkV4dGVuc2lvblZlcmlmaWVyLmNsYXNzKTsKICAgICAgICAgdmVyaWZpZXIucHJvY2Vzc1Byb2R1Y2VyRmllbGRDYWxsZWQoKTsKICAgICB9Ci0gICAgCisKICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICBwcml2YXRlIDxULCBYPiB2b2lkIHByb2Nlc3NPYnNlcnZlck1ldGhvZChAT2JzZXJ2ZXMgUHJvY2Vzc09ic2VydmVyTWV0aG9kPFQsIFg+IHByb2Nlc3NPYnNlcnZlck1ldGhvZCkgewogICAgICAgICBTZXJ2aWNlTG9jYXRvciBsb2NhdG9yID0gZ2V0U2VydmljZUxvY2F0b3IoKTsKICAgICAgICAgaWYgKGxvY2F0b3IgPT0gbnVsbCkgcmV0dXJuOwotICAgICAgICAKKwogICAgICAgICBISzJFeHRlbnNpb25WZXJpZmllciB2ZXJpZmllciA9IGxvY2F0b3IuZ2V0U2VydmljZShISzJFeHRlbnNpb25WZXJpZmllci5jbGFzcyk7CiAgICAgICAgIHZlcmlmaWVyLnByb2Nlc3NPYnNlcnZlck1ldGhvZENhbGxlZCgpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgY2xhc3MgSEsyTG9hZGVySW1wbCBpbXBsZW1lbnRzIEhLMkxvYWRlciB7CiAgICAgICAgIHByaXZhdGUgZmluYWwgQ2xhc3NMb2FkZXIgbG9hZGVyID0gZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpOwogCkBAIC0yNDIsNyArMjQyLDcgQEAKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTXVsdGlFeGNlcHRpb24odGgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZXh0ZW5zaW9uL0V2ZW50T2JzZXJ2ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9leHRlbnNpb24vRXZlbnRPYnNlcnZlci5qYXZhCmluZGV4IGUwY2JiODcuLmVkMWI5NGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9leHRlbnNpb24vRXZlbnRPYnNlcnZlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9leHRlbnNpb24vRXZlbnRPYnNlcnZlci5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiAgKgogICovCiBwdWJsaWMgY2xhc3MgRXZlbnRPYnNlcnZlciB7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpT2JzZXJ2ZShAT2JzZXJ2ZXMgQW5FdmVudCBldmVudCkgewotICAgICAgICAKKwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2V4dGVuc2lvbi9GaWVsZFByb2R1Y2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZXh0ZW5zaW9uL0ZpZWxkUHJvZHVjZXIuamF2YQppbmRleCBiYzg5NzJmLi41OGIwYThiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZXh0ZW5zaW9uL0ZpZWxkUHJvZHVjZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZXh0ZW5zaW9uL0ZpZWxkUHJvZHVjZXIuamF2YQpAQCAtMjAsNyArMjAsNyBAQAogCiAvKioKICAqIFRoaXMgcHJvZHVjZXMgYSBzZXJ2aWNlIHdpdGggYSBmaWVsZAotICogCisgKgogICogQGF1dGhvciBqd2VsbHMKICAqCiAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9leHRlbnNpb24vSEsyRXh0ZW5zaW9uVmVyaWZpZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9leHRlbnNpb24vSEsyRXh0ZW5zaW9uVmVyaWZpZXIuamF2YQppbmRleCAwOWFlOWVhLi5jODA1YTMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZXh0ZW5zaW9uL0hLMkV4dGVuc2lvblZlcmlmaWVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2V4dGVuc2lvbi9ISzJFeHRlbnNpb25WZXJpZmllci5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAvKioKICAqIFRoaXMgaXMgYSBzZXJ2aWNlIHRoYXQgaGFzIGZpZWxkcyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90CiAgKiB0aGUgdmFyaW91cyBDREkgZXh0ZW5zaW9uIHBvaW50cyB3ZXJlIHByb3Blcmx5IHJlYWNoZWQKLSAqIAorICoKICAqIEBhdXRob3IgandlbGxzCiAgKgogICovCkBAIC0zNyw4NCArMzcsODQgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc1Byb2R1Y2VyTWV0aG9kQ2FsbGVkID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NQcm9kdWNlckZpZWxkQ2FsbGVkID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NPYnNlcnZlck1ldGhvZENhbGxlZCA9IGZhbHNlOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWZ0ZXJCZWFuRGlzY292ZXJ5Q2FsbGVkKCkgewogICAgICAgICBhZnRlckJlYW5EaXNjb3ZlcnlDYWxsZWQgPSB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFmdGVyRGVwbG95bWVudFZhbGlkYXRpb25DYWxsZWQoKSB7CiAgICAgICAgIGFmdGVyRGVwbG95bWVudFZhbGlkYXRpb25DYWxsZWQgPSB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHByb2Nlc3NBbm5vdGF0ZWRUeXBlQ2FsbGVkKCkgewogICAgICAgICBwcm9jZXNzQW5ub3RhdGVkVHlwZUNhbGxlZCA9IHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgcHJvY2Vzc0luamVjdGlvblRhcmdldENhbGxlZCgpIHsKICAgICAgICAgcHJvY2Vzc0luamVjdGlvblRhcmdldENhbGxlZCA9IHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgcHJvY2Vzc1Byb2R1Y2VyQ2FsbGVkKCkgewogICAgICAgICBwcm9jZXNzUHJvZHVjZXJDYWxsZWQgPSB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHByb2Nlc3NNYW5hZ2VkQmVhbkNhbGxlZCgpIHsKICAgICAgICAgcHJvY2Vzc01hbmFnZWRCZWFuQ2FsbGVkID0gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBwcm9jZXNzU2Vzc2lvbkJlYW5DYWxsZWQoKSB7CiAgICAgICAgIHByb2Nlc3NTZXNzaW9uQmVhbkNhbGxlZCA9IHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgcHJvY2Vzc1Byb2R1Y2VyTWV0aG9kQ2FsbGVkKCkgewogICAgICAgICBwcm9jZXNzUHJvZHVjZXJNZXRob2RDYWxsZWQgPSB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHByb2Nlc3NQcm9kdWNlckZpZWxkQ2FsbGVkKCkgewogICAgICAgICBwcm9jZXNzUHJvZHVjZXJGaWVsZENhbGxlZCA9IHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgcHJvY2Vzc09ic2VydmVyTWV0aG9kQ2FsbGVkKCkgewogICAgICAgICBwcm9jZXNzT2JzZXJ2ZXJNZXRob2RDYWxsZWQgPSB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHZhbGlkYXRlKCkgewogICAgICAgICBpZiAoIWFmdGVyQmVhbkRpc2NvdmVyeUNhbGxlZCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCJBZnRlckJlYW5EaXNjb3Zlcnkgd2FzIG5vdCBhYmxlIHRvIGdldCB0aGUgU2VydmljZUxvY2F0b3IiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoIWFmdGVyRGVwbG95bWVudFZhbGlkYXRpb25DYWxsZWQpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigiQWZ0ZXJEZXBsb3ltZW50VmFsaWRhdGlvbiB3YXMgbm90IGFibGUgdG8gZ2V0IHRoZSBTZXJ2aWNlTG9jYXRvciIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghcHJvY2Vzc0Fubm90YXRlZFR5cGVDYWxsZWQpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigiUHJvY2Vzc0Fubm90YXRlZFR5cGUgd2FzIG5vdCBhYmxlIHRvIGdldCB0aGUgU2VydmljZUxvY2F0b3IiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoIXByb2Nlc3NJbmplY3Rpb25UYXJnZXRDYWxsZWQpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigiUHJvY2Vzc0luamVjdGlvblRhcmdldCB3YXMgbm90IGFibGUgdG8gZ2V0IHRoZSBTZXJ2aWNlTG9jYXRvciIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghcHJvY2Vzc1Byb2R1Y2VyQ2FsbGVkKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIlByb2Nlc3NQcm9kdWNlciB3YXMgbm90IGFibGUgdG8gZ2V0IHRoZSBTZXJ2aWNlTG9jYXRvciIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghcHJvY2Vzc01hbmFnZWRCZWFuQ2FsbGVkKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIlByb2Nlc3NNYW5hZ2VkQmVhbiB3YXMgbm90IGFibGUgdG8gZ2V0IHRoZSBTZXJ2aWNlTG9jYXRvciIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghcHJvY2Vzc1Nlc3Npb25CZWFuQ2FsbGVkKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIlByb2Nlc3NTZXNzaW9uQmVhbiB3YXMgbm90IGFibGUgdG8gZ2V0IHRoZSBTZXJ2aWNlTG9jYXRvciIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghcHJvY2Vzc1Byb2R1Y2VyTWV0aG9kQ2FsbGVkKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIlByb2Nlc3NQcm9kdWNlck1ldGhvZCB3YXMgbm90IGFibGUgdG8gZ2V0IHRoZSBTZXJ2aWNlTG9jYXRvciIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghcHJvY2Vzc1Byb2R1Y2VyRmllbGRDYWxsZWQpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigiUHJvY2Vzc1Byb2R1Y2VyRmllbGQgd2FzIG5vdCBhYmxlIHRvIGdldCB0aGUgU2VydmljZUxvY2F0b3IiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoIXByb2Nlc3NPYnNlcnZlck1ldGhvZENhbGxlZCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCJQcm9jZXNzT2JzZXJ2ZXJNZXRob2Qgd2FzIG5vdCBhYmxlIHRvIGdldCB0aGUgU2VydmljZUxvY2F0b3IiKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2V4dGVuc2lvbi9NZXRob2RQcm9kdWNlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2V4dGVuc2lvbi9NZXRob2RQcm9kdWNlci5qYXZhCmluZGV4IDBlOGVmOWUuLjA1NGRjNTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9leHRlbnNpb24vTWV0aG9kUHJvZHVjZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZXh0ZW5zaW9uL01ldGhvZFByb2R1Y2VyLmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIAogLyoqCiAgKiBUaGlzIHByb2R1Y2VzIGEgc2VydmljZSB3aXRoIGEgcHJvZHVjZXIgbWV0aG9kCi0gKiAKKyAqCiAgKiBAYXV0aG9yIGp3ZWxscwogICoKICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2V4dGVuc2lvbi9Qcm9kdWNlZFNlcnZpY2VBLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZXh0ZW5zaW9uL1Byb2R1Y2VkU2VydmljZUEuamF2YQppbmRleCBlOTUyMjNjLi5hZDI4N2YwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZXh0ZW5zaW9uL1Byb2R1Y2VkU2VydmljZUEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZXh0ZW5zaW9uL1Byb2R1Y2VkU2VydmljZUEuamF2YQpAQCAtMTksNyArMTksNyBAQAogLyoqCiAgKiBUaGlzIGlzIGEgc2VydmljZSB0aGF0IGlzIHByb2R1Y2VkLCBpbiBvcmRlciB0byB0ZXN0IHRoYXQgdGhlCiAgKiBleHRlbnNpb24gbWV0aG9kcyBmb3IgcHJvZHVjZXJzIGhhdmUgYWNjZXNzIHRvIHRoZSBTZXJ2aWNlTG9jYXRvcgotICogCisgKgogICogQGF1dGhvciBqd2VsbHMKICAqCiAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9leHRlbnNpb24vUHJvZHVjZWRTZXJ2aWNlQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2V4dGVuc2lvbi9Qcm9kdWNlZFNlcnZpY2VCLmphdmEKaW5kZXggYTgxYWY4ZC4uNGEzYWY5YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2V4dGVuc2lvbi9Qcm9kdWNlZFNlcnZpY2VCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2V4dGVuc2lvbi9Qcm9kdWNlZFNlcnZpY2VCLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIC8qKgogICogVGhpcyBpcyBhIHNlcnZpY2UgdGhhdCBpcyBwcm9kdWNlcyB0byB0ZXN0IHRoYXQgcHJvZHVjZXIKICAqIGV2ZW50cyBoYXZlIGFjY2VzcyB0byB0aGUgU2VydmljZUxvY2F0b3IKLSAqIAorICoKICAqIEBhdXRob3IgandlbGxzCiAgKgogICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvaml0L0NESVNlcnZpY2VJbmplY3RlZFdpdGhISzJTZXJ2aWNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvaml0L0NESVNlcnZpY2VJbmplY3RlZFdpdGhISzJTZXJ2aWNlLmphdmEKaW5kZXggOTdlMTE3MS4uZjJhZGFjMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2ppdC9DRElTZXJ2aWNlSW5qZWN0ZWRXaXRoSEsyU2VydmljZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9qaXQvQ0RJU2VydmljZUluamVjdGVkV2l0aEhLMlNlcnZpY2UuamF2YQpAQCAtMjEsMTQgKzIxLDE0IEBACiAvKioKICAqIFRoaXMgaXMgYSBDREkgc2VydmljZSBpbmplY3RlZCB3aXRoIHRoZSBISzJTZXJ2aWNlCiAgKiB0aGF0IGlzIGdlbmVyYXRlZCBieSB0aGUgSklUIHJlc29sdmVyCi0gKiAKKyAqCiAgKiBAYXV0aG9yIGp3ZWxscwogICoKICAqLwogcHVibGljIGNsYXNzIENESVNlcnZpY2VJbmplY3RlZFdpdGhISzJTZXJ2aWNlIHsKICAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSBISzJTZXJ2aWNlIGhrMlNlcnZpY2U7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYXNISzJTZXJ2aWNlKCkgewogICAgICAgICByZXR1cm4gaGsyU2VydmljZSAhPSBudWxsOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9qaXQvSEsyU2VydmljZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2ppdC9ISzJTZXJ2aWNlLmphdmEKaW5kZXggODBiMDUyZS4uNmIxMjIyOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2ppdC9ISzJTZXJ2aWNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2ppdC9ISzJTZXJ2aWNlLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIC8qKgogICogVGhpcyB3aWxsIGJlIGFuIEhLMiBzZXJ2aWNlIHRoYXQgaXMgZ2VuZXJhdGVkIHdpdGggdGhlCiAgKiBKSVQgcmVzb2x2ZXIKLSAqIAorICoKICAqIEBhdXRob3IgandlbGxzCiAgKgogICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvaml0L0pJVFJlc29sdmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvaml0L0pJVFJlc29sdmVyLmphdmEKaW5kZXggZTVjNjVlNy4uYWRiMGNkZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2ppdC9KSVRSZXNvbHZlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9qaXQvSklUUmVzb2x2ZXIuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogLyoqCiAgKiBUaGlzIGlzIHRoZSBKSVQgcmVzb2x2ZXIgdGhhdCBjcmVhdGVzIGltcGxlbWVudGF0aW9ucwogICogb2YgSEsyU2VydmljZQotICogCisgKgogICogQGF1dGhvciBqd2VsbHMKICAqCiAgKi8KQEAgLTM5LDEwICszOSwxMCBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIGp1c3RJblRpbWVSZXNvbHV0aW9uKEluamVjdGVlIGZhaWxlZEluamVjdGlvblBvaW50KSB7CiAgICAgICAgIGlmICghZmFpbGVkSW5qZWN0aW9uUG9pbnQuZ2V0UmVxdWlyZWRUeXBlKCkuZXF1YWxzKEhLMlNlcnZpY2UuY2xhc3MpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAgICAgIEhLMlNlcnZpY2UgaGsyU2VydmljZSA9IG5ldyBISzJTZXJ2aWNlKCkge307CiAgICAgICAgIFNlcnZpY2VMb2NhdG9yVXRpbGl0aWVzLmFkZE9uZUNvbnN0YW50KGxvY2F0b3IsIGhrMlNlcnZpY2UpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9sb2NhdG9yL0Jhc2ljU2VydmljZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2xvY2F0b3IvQmFzaWNTZXJ2aWNlLmphdmEKaW5kZXggMGYxYjJiMi4uMGYwYTM0ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2xvY2F0b3IvQmFzaWNTZXJ2aWNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2xvY2F0b3IvQmFzaWNTZXJ2aWNlLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIC8qKgogICogVGhpcyBzZXJ2aWNlIHdpbGwgYmUgY3JlYXRlZCB3aXRoIEhLMiBidXQgd2lsbAogICogaGF2ZSB0aGUgQ0RJIEJlYW5NYW5hZ2VyIGluamVjdGVkIGludG8gaXQKLSAqIAorICoKICAqIEBhdXRob3IgandlbGxzCiAgKgogICovCkBAIC0zMSwxMiArMzEsMTIgQEAKIHB1YmxpYyBjbGFzcyBCYXNpY1NlcnZpY2UgewogICAgIEBJbmplY3QKICAgICBwcml2YXRlIEJlYW5NYW5hZ2VyIGJlYW5NYW5hZ2VyOwotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0cnVlIGlmIHRoZSBCZWFuTWFuYWdlciB3YXMgaW5qZWN0ZWQuICBUaGlzIHNlcnZpY2UKICAgICAgKiBpcyBjcmVhdGVkIHdpdGggSEsyIGJ1dCBzdGlsbCBoYXMgdGhlIENESSBjcmVhdGVkIG9iamVjdCBpbmplY3RlZCBpbnRvCiAgICAgICogaXQKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIEhLMiBjcmVhdGVkIHNlcnZpY2Ugd2FzIGluamVjdGVkIHdpdGggYSBDREkgYmVhbgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGdvdEluamVjdGVkV2l0aEJlYW5NYW5hZ2VyKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL3BvbS54bWwKaW5kZXggZTk3ODRjZS4uZjI2NmRiZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9wb20ueG1sCkBAIC0zMCw3ICszMCw3IEBACiAgICAgPGFydGlmYWN0SWQ+YmFzaWM8L2FydGlmYWN0SWQ+CiAgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KIAotICAgIDxuYW1lPkdsYXNzRmlzaCBISzIgQmFzaWMgQ0RJIHRlc3Q8L25hbWU+ICAKKyAgICA8bmFtZT5HbGFzc0Zpc2ggSEsyIEJhc2ljIENESSB0ZXN0PC9uYW1lPgogICAgIDxtb2R1bGVzPgogICAgICAgICA8bW9kdWxlPmVqYjE8L21vZHVsZT4KICAgICAgICAgPG1vZHVsZT5ydW5uZXI8L21vZHVsZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL3J1bm5lci9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvcnVubmVyL3BvbS54bWwKaW5kZXggMTIwNTFmNi4uYWVmMDBjMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvcnVubmVyL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvcnVubmVyL3BvbS54bWwKQEAgLTMwLDcgKzMwLDcgQEAKICAgICA8YXJ0aWZhY3RJZD5ydW5uZXI8L2FydGlmYWN0SWQ+CiAKICAgICA8bmFtZT5ISzIgQ0RJIEJhc2ljIFRlc3QgUnVubmVyPC9uYW1lPgotICAgIAorCiAgICAgPGJ1aWxkPgogICAgICAgICA8cGx1Z2lucz4KICAgICAgICAgICAgIDxwbHVnaW4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9ydW5uZXIvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L01haW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL3J1bm5lci9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvTWFpbi5qYXZhCmluZGV4IGE5NTNiZTQuLjg5YjMwMjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL3J1bm5lci9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvTWFpbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL3J1bm5lci9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvTWFpbi5qYXZhCkBAIC0yNCwyNiArMjQsMjYgQEAKIAogLyoqCiAgKiBIYXMgYSBtYWluIHNvIGl0IGNhbiBiZSB1c2VkIHRvIGludm9rZSB0aGUgRUpCIGZyb20gYSBjbGllbnQKLSAqIAorICoKICAqIEBhdXRob3IgandlbGxzCiAgKgogICovCiBwdWJsaWMgY2xhc3MgTWFpbiB7CiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIEJBU0lDX0VKQl9KTkRJX05BTUUgPSAiamF2YTpnbG9iYWwvZWpiMS9FamJJbmplY3RlZFdpdGhTZXJ2aWNlTG9jYXRvciEiICsKICAgICAgICAgICAgIEJhc2ljRWpiLmNsYXNzLmdldE5hbWUoKTsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBnbygpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewogICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgCisKICAgICAgICAgQmFzaWNFamIgYmFzaWMgPSAoQmFzaWNFamIpIGNvbnRleHQubG9va3VwKEJBU0lDX0VKQl9KTkRJX05BTUUpOwotICAgICAgICAKKwogICAgICAgICBib29sZWFuIHJldCA9IGJhc2ljLmNkaU1hbmFnZXJJbmplY3RlZCgpOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVKQiNjZGlNYW5hZ2VySW5qZWN0ZWQgaW52b2tlZCB3aXRoIHJlc3VsdCAiICsgcmV0KTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ2NbXSkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgZ28oKTsKQEAgLTUzLDYgKzUzLDYgQEAKICAgICAgICAgICAgIHRoLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9ydW5uZXIvc3JjL3Rlc3QvamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9ydW5uZXIvQmFzaWNDRElUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9iYXNpYy9ydW5uZXIvc3JjL3Rlc3QvamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9ydW5uZXIvQmFzaWNDRElUZXN0LmphdmEKaW5kZXggNjlkNmFiZS4uYmRiZGE1NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvYmFzaWMvcnVubmVyL3NyYy90ZXN0L2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvcnVubmVyL0Jhc2ljQ0RJVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Jhc2ljL3J1bm5lci9zcmMvdGVzdC9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL3J1bm5lci9CYXNpY0NESVRlc3QuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogaW1wb3J0IGNvbS5vcmFjbGUuaGsyLmRldnRlc3QuY2RpLmVqYjEuQmFzaWNFamI7CiAKIC8qKgotICogCisgKgogICogQGF1dGhvciBqd2VsbHMKICAqCiAgKi8KQEAgLTQ1LDEyOCArNDUsMTI4IEBACiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFNPVVJDRV9IT01FX0VKQiA9ICIvYXBwc2VydmVyL3Rlc3RzL2hrMi8iICsgRUpCMV9KQVI7CiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIEdMQVNTRklTSF9IT01FID0gU3lzdGVtLmdldFByb3BlcnR5KCJnbGFzc2Zpc2guaG9tZSIpOwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBSRUxBVElWRV9GSUxFX1BBVEggPSAiZG9tYWlucy9kb21haW4xL2NvbmZpZy9kZXN0cm95ZWQtZWpiMS50eHQiOwotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGRlcGxveWVkMTsKICAgICBwcml2YXRlIENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIEBCZWZvcmVUZXN0CiAgICAgcHVibGljIHZvaWQgYmVmb3JlVGVzdCgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewogICAgICAgICBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBlamIxSmFyID0gRUpCMV9KQVI7CiAgICAgICAgIGlmICghU09VUkNFX0hPTUUuc3RhcnRzV2l0aCgiJCIpKSB7CiAgICAgICAgICAgICBlamIxSmFyID0gU09VUkNFX0hPTUUgKyBTT1VSQ0VfSE9NRV9FSkI7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVwbG95ZWQxID0gTnVjbGV1c1Rlc3RVdGlscy5uYWRtaW4oImRlcGxveSIsIGVqYjFKYXIpOwogICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShkZXBsb3llZDEpOwotICAgICAgICAKKwogICAgICAgICBGaWxlIGRlc3Ryb3llZEZpbGUgPSBuZXcgRmlsZShHTEFTU0ZJU0hfSE9NRSk7CiAgICAgICAgIGRlc3Ryb3llZEZpbGUgPSBuZXcgRmlsZShkZXN0cm95ZWRGaWxlLCBSRUxBVElWRV9GSUxFX1BBVEgpOwotICAgICAgICAKKwogICAgICAgICBpZiAoZGVzdHJveWVkRmlsZS5leGlzdHMoKSkgewogICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoZGVzdHJveWVkRmlsZS5kZWxldGUoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBAQWZ0ZXJUZXN0CiAgICAgcHVibGljIHZvaWQgYWZ0ZXJUZXN0KCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIGlmIChkZXBsb3llZDEpIHsKICAgICAgICAgICAgIE51Y2xldXNUZXN0VXRpbHMubmFkbWluKCJ1bmRlcGxveSIsIEVKQjFfQVBQX05BTUUpOwogICAgICAgICAgICAgZGVwbG95ZWQxID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKGNvbnRleHQgIT0gbnVsbCkgewogICAgICAgICAgICAgY29udGV4dC5jbG9zZSgpOwogICAgICAgICAgICAgY29udGV4dCA9IG51bGw7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gQWZ0ZXIgdGhlIHVuZGVwbG95bWVudCB0aGUgZmlsZSBpbmRpY2F0aW5nIHRoZSBwcm9wZXIgZGVzdHJ1Y3Rpb24gc2hvdWxkIGJlIHRoZXJlCiAgICAgICAgIEZpbGUgZGVzdHJveWVkRmlsZSA9IG5ldyBGaWxlKEdMQVNTRklTSF9IT01FKTsKICAgICAgICAgZGVzdHJveWVkRmlsZSA9IG5ldyBGaWxlKGRlc3Ryb3llZEZpbGUsIFJFTEFUSVZFX0ZJTEVfUEFUSCk7Ci0gICAgICAgIAorCiAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGRlc3Ryb3llZEZpbGUuZXhpc3RzKCkpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVuc3VyZXMgdGhhdCBhIFNlcnZpY2VMb2NhdG9yIGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgQ0RJIGJlYW4KLSAgICAgKiBAdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiAKKyAgICAgKiBAdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbgogICAgICAqLwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEJhc2ljSEsyQ0RJSW5qZWN0aW9uKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIEJhc2ljRWpiIGJhc2ljID0gKEJhc2ljRWpiKSBjb250ZXh0Lmxvb2t1cChCQVNJQ19FSkJfSk5ESV9OQU1FKTsKICAgICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoYmFzaWMpOwotICAgICAgICAgICAgCisKICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoYmFzaWMuY2RpTWFuYWdlckluamVjdGVkKCkpOwogICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShiYXNpYy5zZXJ2aWNlTG9jYXRvckluamVjdGVkKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgYmFzaWMuaW5zdGFsbEhLMlNlcnZpY2UoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGJhc2ljLmhrMlNlcnZpY2VJbmplY3RlZFdpdGhFamIoKSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW5zdXJlcyB0aGF0IHRoZSBTZXJ2aWNlTG9jYXRvciBpcyBhdmFpbGFibGUgaW4gYWxsIENESSBldmVudHMKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uCiAgICAgICovCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Q0RJRXh0ZW5zaW9uSGFzQWNjZXNzVG9TZXJ2aWNlTG9jYXRvclZpYUpOREkoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKICAgICAgICAgQmFzaWNFamIgYmFzaWMgPSAoQmFzaWNFamIpIGNvbnRleHQubG9va3VwKEJBU0lDX0VKQl9KTkRJX05BTUUpOwogICAgICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChiYXNpYyk7Ci0gICAgICAgIAorCiAgICAgICAgIGJhc2ljLmlzU2VydmljZUxvY2F0b3JBdmFpbGFibGVJbkFsbENESUV4dGVuc2lvbkV2ZW50cygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRlc3RzIHRoYXQgYW4gSEsyIHNlcnZpY2Ugd2l0aCBpdHMgb3duIHNjb3BlIHdvcmtzIHByb3Blcmx5Ci0gICAgICogCisgICAgICoKICAgICAgKiBAdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbgogICAgICAqLwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEN1c3RvbVNjb3BlZEhLMlNlcnZpY2VXb3JrcygpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewogICAgICAgICBCYXNpY0VqYiBiYXNpYyA9IChCYXNpY0VqYikgY29udGV4dC5sb29rdXAoQkFTSUNfRUpCX0pORElfTkFNRSk7CiAgICAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKGJhc2ljKTsKLSAgICAgICAgCisKICAgICAgICAgYmFzaWMuaXNFSkJXaXRoQ3VzdG9tSEsyU2NvcGVQcm9wZXJseUluamVjdGVkKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGVzdHMgdGhhdCBhbiBhcHBsaWNhdGlvbiBjcmVhdGVkIHBvc3QgcHJvY2Vzc29yIHdvcmtzCi0gICAgICogCisgICAgICoKICAgICAgKiBAdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbgogICAgICAqLwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEFwcGxpY2F0aW9uRGVmaW5lZFBvc3RQcm9jZXNzb3JSdW5zKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIEJhc2ljRWpiIGJhc2ljID0gKEJhc2ljRWpiKSBjb250ZXh0Lmxvb2t1cChCQVNJQ19FSkJfSk5ESV9OQU1FKTsKICAgICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoYmFzaWMpOwotICAgICAgICAKKwogICAgICAgICBiYXNpYy5kb2VzQXBwbGljYXRpb25EZWZpbmVkUG9wdWxhdG9yUG9zdFByb2Nlc3NvclJ1bigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRlc3RzIHRoYXQgYSBzZXJ2aWNlIGFkZGVkIHZpYSBKSVQgcmVzb2x1dGlvbiB3b3JrcwotICAgICAqIAorICAgICAqCiAgICAgICogQHRocm93cyBOYW1pbmdFeGNlcHRpb24KICAgICAgKi8KICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RKSVRSZXNvbHV0aW9uKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIEJhc2ljRWpiIGJhc2ljID0gKEJhc2ljRWpiKSBjb250ZXh0Lmxvb2t1cChCQVNJQ19FSkJfSk5ESV9OQU1FKTsKICAgICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoYmFzaWMpOwotICAgICAgICAKKwogICAgICAgICBiYXNpYy5pc1NlcnZpY2VBZGRlZFdpdGhKSVRSZXNvbHZlckFkZGVkKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGVzdHMgdGhhdCBhIHNlcnZpY2UgYWRkZWQgdmlhIEpJVCByZXNvbHV0aW9uIHdvcmtzCi0gICAgICogCisgICAgICoKICAgICAgKiBAdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbgogICAgICAqLwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEFwcGxpY2F0aW9uU2NvcGVkQ0RJU2VydmljZUludG9ISzJTZXJ2aWNlKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIEJhc2ljRWpiIGJhc2ljID0gKEJhc2ljRWpiKSBjb250ZXh0Lmxvb2t1cChCQVNJQ19FSkJfSk5ESV9OQU1FKTsKICAgICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoYmFzaWMpOwotICAgICAgICAKKwogICAgICAgICBiYXNpYy5jaGVja0FwcGxpY2F0aW9uU2NvcGVkU2VydmljZUluamVjdGVkSW50b0hrMlNlcnZpY2UoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvYXBwL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvYXBwL3BvbS54bWwKaW5kZXggY2U5OTYyZC4uYzljMzMyNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL2FwcC9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9hcHAvcG9tLnhtbApAQCAtMzEsNyArMzEsNyBAQAogICAgIDxwYWNrYWdpbmc+ZWFyPC9wYWNrYWdpbmc+CiAKICAgICA8bmFtZT5ISzIgQ0RJIEVBUiBUZXN0IEVBUjwvbmFtZT4KLSAgICAKKwogICAgIDxidWlsZD4KICAgICAgICAgPHBsdWdpbnM+CiAgICAgICAgICAgICA8cGx1Z2luPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL2VqYjEvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9lamIxL3BvbS54bWwKaW5kZXggMDI4MDQ0OS4uNDMwNGY1NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL2VqYjEvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvZWpiMS9wb20ueG1sCkBAIC0zMCw3ICszMCw3IEBACiAgICAgPGFydGlmYWN0SWQ+ZWpiMTwvYXJ0aWZhY3RJZD4KIAogICAgIDxuYW1lPkhLMiBDREkgRUFSIFRlc3QgRWpiMTwvbmFtZT4KLSAgICAKKwogICAgIDxidWlsZD4KICAgICAgIDxwbHVnaW5zPgogICAgICAgICAgIDxwbHVnaW4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2Vhci9lamIxL0VqYjEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWFyL2VqYjEvRWpiMS5qYXZhCmluZGV4IDZiNjliMzAuLjcyMzM2ZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWFyL2VqYjEvRWpiMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWFyL2VqYjEvRWpiMS5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgY29tLm9yYWNsZS5oazIuZGV2dGVzdC5jZGkuZWFyLmxpYjEuTGliMUhLMlNlcnZpY2U7CiAKIC8qKgotICogCisgKgogICogQGF1dGhvciBqd2VsbHMKICAqCiAgKi8KQEAgLTMzLDcgKzMzLDcgQEAKIHB1YmxpYyBjbGFzcyBFamIxIGltcGxlbWVudHMgRWpiMVJlbW90ZSB7CiAgICAgQEluamVjdAogICAgIHByaXZhdGUgRWpiMUhLMlNlcnZpY2UgZWpiMVNlcnZpY2U7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSBMaWIxSEsyU2VydmljZSBsaWIxU2VydmljZTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lYXIvZWpiMS9FamIxSEsyU2VydmljZUZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWFyL2VqYjEvRWpiMUhLMlNlcnZpY2VGYWN0b3J5LmphdmEKaW5kZXggNTY3MTk4Yi4uMjc0YzBiMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lYXIvZWpiMS9FamIxSEsyU2VydmljZUZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvZWpiMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2Vhci9lamIxL0VqYjFISzJTZXJ2aWNlRmFjdG9yeS5qYXZhCkBAIC0zNiwxMyArMzYsMTMgQEAKICAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gSEsyU2VydmljZS5FSkIxOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKEVqYjFISzJTZXJ2aWNlIGluc3RhbmNlKSB7Ci0gICAgICAgIAorCiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9lamIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWFyL2VqYjEvRWpiMVJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lYXIvZWpiMS9FamIxUmVtb3RlLmphdmEKaW5kZXggZDc2NjZjNS4uZWEwZTIzZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lYXIvZWpiMS9FamIxUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL2VqYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lYXIvZWpiMS9FamIxUmVtb3RlLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKICAqLwogcHVibGljIGludGVyZmFjZSBFamIxUmVtb3RlIHsKICAgICBwdWJsaWMgYm9vbGVhbiBpc0VqYjFISzJTZXJ2aWNlQXZhaWxhYmxlKCk7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBpc0xpYjFISzJTZXJ2aWNlQXZhaWxhYmxlKCk7CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9lamIyL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvZWpiMi9wb20ueG1sCmluZGV4IDBkMmRmOTUuLmQ0MDE1ZDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9lamIyL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL2VqYjIvcG9tLnhtbApAQCAtMzAsNyArMzAsNyBAQAogICAgIDxhcnRpZmFjdElkPmVqYjI8L2FydGlmYWN0SWQ+CiAKICAgICA8bmFtZT5ISzIgQ0RJIEVBUiBUZXN0IEVqYjI8L25hbWU+Ci0gICAgCisKICAgICA8YnVpbGQ+CiAgICAgICA8cGx1Z2lucz4KICAgICAgICAgICA8cGx1Z2luPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL2VqYjIvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lYXIvZWpiMi9FamIyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvZWpiMi9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2Vhci9lamIyL0VqYjIuamF2YQppbmRleCBmZDBmNWI1Li4wMWFkNzNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvZWpiMi9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2Vhci9lamIyL0VqYjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvZWpiMi9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2Vhci9lamIyL0VqYjIuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogaW1wb3J0IGNvbS5vcmFjbGUuaGsyLmRldnRlc3QuY2RpLmVhci5saWIxLkxpYjFISzJTZXJ2aWNlOwogCiAvKioKLSAqIAorICoKICAqIEBhdXRob3IgandlbGxzCiAgKgogICovCkBAIC0zMywxMCArMzMsMTAgQEAKIHB1YmxpYyBjbGFzcyBFamIyIGltcGxlbWVudHMgRWpiMlJlbW90ZSB7CiAgICAgQEluamVjdAogICAgIHByaXZhdGUgRWpiMUhLMlNlcnZpY2UgZWpiMVNlcnZpY2U7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSBMaWIxSEsyU2VydmljZSBsaWIxU2VydmljZTsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwcml2YXRlIEVqYjJISzJTZXJ2aWNlIGVqYjJTZXJ2aWNlOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvZWpiMi9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2Vhci9lamIyL0VqYjJISzJTZXJ2aWNlRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL2VqYjIvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lYXIvZWpiMi9FamIySEsyU2VydmljZUZhY3RvcnkuamF2YQppbmRleCA2ZjdlMmU3Li5mMzQ1MGFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvZWpiMi9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2Vhci9lamIyL0VqYjJISzJTZXJ2aWNlRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9lamIyL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWFyL2VqYjIvRWpiMkhLMlNlcnZpY2VGYWN0b3J5LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gSEsyU2VydmljZS5FSkIyOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSA7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvZWpiMi9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2Vhci9lamIyL0VqYjJSZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9lamIyL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWFyL2VqYjIvRWpiMlJlbW90ZS5qYXZhCmluZGV4IDViZTk3YzQuLmViMDYyZTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9lamIyL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWFyL2VqYjIvRWpiMlJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9lamIyL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWFyL2VqYjIvRWpiMlJlbW90ZS5qYXZhCkBAIC0yMiw5ICsyMiw5IEBACiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgRWpiMlJlbW90ZSB7CiAgICAgcHVibGljIGJvb2xlYW4gaXNFamIySEsyU2VydmljZUF2YWlsYWJsZSgpOwotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaXNFamIxSEsyU2VydmljZUF2YWlsYWJsZSgpOwotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaXNMaWIxSEsyU2VydmljZUF2YWlsYWJsZSgpOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvbGliMS9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL2xpYjEvcG9tLnhtbAppbmRleCBjNzhjYzg0Li5mNDIwZTFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvbGliMS9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9saWIxL3BvbS54bWwKQEAgLTMwLDcgKzMwLDcgQEAKICAgICA8YXJ0aWZhY3RJZD5saWIxPC9hcnRpZmFjdElkPgogCiAgICAgPG5hbWU+SEsyIENESSBFQVIgVGVzdCBMaWIxPC9uYW1lPgotICAgIAorCiAgICAgPGJ1aWxkPgogICAgICAgPHBsdWdpbnM+CiAgICAgICAgICAgPHBsdWdpbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9saWIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWFyL2xpYjEvSEsyU2VydmljZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL2xpYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lYXIvbGliMS9ISzJTZXJ2aWNlLmphdmEKaW5kZXggN2RmNzY5OC4uMDI2NDAxNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL2xpYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lYXIvbGliMS9ISzJTZXJ2aWNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL2xpYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lYXIvbGliMS9ISzJTZXJ2aWNlLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKICAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBFSkIyID0gImVqYjIiOwogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdBUjEgPSAid2FyMSI7CiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV0FSMiA9ICJ3YXIyIjsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvbGliMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2Vhci9saWIxL0xpYjEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9saWIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWFyL2xpYjEvTGliMS5qYXZhCmluZGV4IDI5ZTJlNzYuLmFiYmQyMTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9saWIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWFyL2xpYjEvTGliMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9saWIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWFyL2xpYjEvTGliMS5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5vcmFjbGUuaGsyLmRldnRlc3QuY2RpLmVhci5saWIxOwogCiAvKioKLSAqIAorICoKICAqIEBhdXRob3IgandlbGxzCiAgKgogICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvbGliMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2Vhci9saWIxL0xpYjFIazJTZXJ2aWNlRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL2xpYjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lYXIvbGliMS9MaWIxSGsyU2VydmljZUZhY3RvcnkuamF2YQppbmRleCBlMDEzNmRkLi5kYzY2NGI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvbGliMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2Vhci9saWIxL0xpYjFIazJTZXJ2aWNlRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9saWIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWFyL2xpYjEvTGliMUhrMlNlcnZpY2VGYWN0b3J5LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gSEsyU2VydmljZS5MSUIxOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL3BvbS54bWwKaW5kZXggNWZkZTc5OC4uZjIzZDQ4MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL3BvbS54bWwKQEAgLTMwLDcgKzMwLDcgQEAKICAgICA8YXJ0aWZhY3RJZD5lYXI8L2FydGlmYWN0SWQ+CiAgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KIAotICAgIDxuYW1lPkdsYXNzRmlzaCBISzIgQ0RJIEVBUiB0ZXN0PC9uYW1lPiAgCisgICAgPG5hbWU+R2xhc3NGaXNoIEhLMiBDREkgRUFSIHRlc3Q8L25hbWU+CiAgICAgPG1vZHVsZXM+CiAgICAgICAgIDxtb2R1bGU+bGliMTwvbW9kdWxlPgogICAgICAgICA8bW9kdWxlPmVqYjE8L21vZHVsZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9ydW5uZXIvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9ydW5uZXIvcG9tLnhtbAppbmRleCBkODgwZTQzLi43YzViMzA2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvcnVubmVyL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL3J1bm5lci9wb20ueG1sCkBAIC0zMCw3ICszMCw3IEBACiAgICAgPGFydGlmYWN0SWQ+cnVubmVyPC9hcnRpZmFjdElkPgogCiAgICAgPG5hbWU+SEsyIENESSBFQVIgVGVzdCBSdW5uZXI8L25hbWU+Ci0gICAgCisKICAgICA8YnVpbGQ+CiAgICAgICAgIDxwbHVnaW5zPgogICAgICAgICAgICAgPHBsdWdpbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9ydW5uZXIvc3JjL3Rlc3QvamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lYXIvcnVubmVyL0NESUVhclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci9ydW5uZXIvc3JjL3Rlc3QvamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lYXIvcnVubmVyL0NESUVhclRlc3QuamF2YQppbmRleCA2ODBlNDNmLi44NjViZjViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvcnVubmVyL3NyYy90ZXN0L2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWFyL3J1bm5lci9DRElFYXJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL3J1bm5lci9zcmMvdGVzdC9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2Vhci9ydW5uZXIvQ0RJRWFyVGVzdC5qYXZhCkBAIC0zMSw1NiArMzEsNTYgQEAKIGltcG9ydCBjb20ub3JhY2xlLmhrMi5kZXZ0ZXN0LmNkaS5lYXIuZWpiMi5FamIyUmVtb3RlOwogCiAvKioKLSAqIAorICoKICAqIEBhdXRob3IgandlbGxzCiAgKgogICovCiBwdWJsaWMgY2xhc3MgQ0RJRWFyVGVzdCBleHRlbmRzIE51Y2xldXNTdGFydFN0b3BUZXN0IHsKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgQVBQX0pBUiA9ICJjZGkvZWFyL2FwcC90YXJnZXQvYXBwLmVhciI7CiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIEFQUF9OQU1FID0gImFwcCI7Ci0gICAgCisKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgU09VUkNFX0hPTUUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInNvdXJjZS5ob21lIiwgIiQiKTsKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgU09VUkNFX0hPTUVfQVBQID0gIi9hcHBzZXJ2ZXIvdGVzdHMvaGsyLyIgKyBBUFBfSkFSOwotICAgIAorCiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIEVKQjFfSk5ESV9OQU1FID0gImphdmE6Z2xvYmFsL2FwcC9lamIxL0VqYjEiOwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBFSkIyX0pORElfTkFNRSA9ICJqYXZhOmdsb2JhbC9hcHAvZWpiMi9FamIyIjsKLSAgICAKKwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBXQVIxX1VSTCA9ICJodHRwOi8vbG9jYWxob3N0OjgwODAvd2FyMS93YXIxIjsKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgV0FSMl9VUkwgPSAiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3dhcjIvd2FyMiI7Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gZGVwbG95ZWQxOwogICAgIHByaXZhdGUgQ29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgQEJlZm9yZVRlc3QKICAgICBwdWJsaWMgdm9pZCBiZWZvcmVUZXN0KCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGFwcEphciA9IEFQUF9KQVI7CiAgICAgICAgIGlmICghU09VUkNFX0hPTUUuc3RhcnRzV2l0aCgiJCIpKSB7CiAgICAgICAgICAgICBhcHBKYXIgPSBTT1VSQ0VfSE9NRSArIFNPVVJDRV9IT01FX0FQUDsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZXBsb3llZDEgPSBOdWNsZXVzVGVzdFV0aWxzLm5hZG1pbigiZGVwbG95IiwgYXBwSmFyKTsKICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoZGVwbG95ZWQxKTsKICAgICB9Ci0gICAgCisKICAgICBAQWZ0ZXJUZXN0CiAgICAgcHVibGljIHZvaWQgYWZ0ZXJUZXN0KCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIGlmIChkZXBsb3llZDEpIHsKICAgICAgICAgICAgIE51Y2xldXNUZXN0VXRpbHMubmFkbWluKCJ1bmRlcGxveSIsIEFQUF9OQU1FKTsKICAgICAgICAgICAgIGRlcGxveWVkMSA9IGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChjb250ZXh0ICE9IG51bGwpIHsKICAgICAgICAgICAgIGNvbnRleHQuY2xvc2UoKTsKICAgICAgICAgICAgIGNvbnRleHQgPSBudWxsOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBPYmplY3QgbG9va3VwV2l0aEZpdmVTZWNvbmRTbGVlcChTdHJpbmcgam5kaU5hbWUpIHRocm93cyBOYW1pbmdFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsKICAgICAgICAgbG9uZyBzbGVlcFRpbWUgPSA1TCAqIDEwMDBMOwogICAgICAgICBsb25nIGludGVydmFsID0gMTAwTDsKLSAgICAgICAgCisKICAgICAgICAgd2hpbGUgKHNsZWVwVGltZSA+IDApIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQubG9va3VwKGpuZGlOYW1lKTsKQEAgLTkwLDY3ICs5MCw2NyBAQAogICAgICAgICAgICAgICAgIGlmIChzbGVlcFRpbWUgPD0gMCkgewogICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAoKHNsZWVwVGltZSAlIDEwMDBMKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2xlZXBpbmcgYW5vdGhlciAiICsgKHNsZWVwVGltZSAvIDEwMDApICsgIiBzZWNvbmRzLi4uIik7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgVGhyZWFkLnNsZWVwKGludGVydmFsKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCJTaG91bGQgbmV2ZXIgZ2V0IGhlcmUiKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RJbmplY3RGcm9tTGliMUludG9FamIxKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24gewogICAgICAgICBFamIxUmVtb3RlIGVqYjEgPSAoRWpiMVJlbW90ZSkgbG9va3VwV2l0aEZpdmVTZWNvbmRTbGVlcChFSkIxX0pORElfTkFNRSk7Ci0gICAgICAgIAotICAgICAgICBlamIxLmlzTGliMUhLMlNlcnZpY2VBdmFpbGFibGUoKTsgCisKKyAgICAgICAgZWpiMS5pc0xpYjFISzJTZXJ2aWNlQXZhaWxhYmxlKCk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0SW5qZWN0RnJvbUVqYjFJbnRvRWpiMSgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsKICAgICAgICAgRWpiMVJlbW90ZSBlamIxID0gKEVqYjFSZW1vdGUpIGxvb2t1cFdpdGhGaXZlU2Vjb25kU2xlZXAoRUpCMV9KTkRJX05BTUUpOwotICAgICAgICAKKwogICAgICAgICBlamIxLmlzRWpiMUhLMlNlcnZpY2VBdmFpbGFibGUoKTsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RJbmplY3RlZExpYjFFamIxV2FyMUludG9XYXIxKCkgewogICAgICAgICBTdHJpbmcgZnJvbVdhcjEgPSBOdWNsZXVzVGVzdFV0aWxzLmdldFVSTChXQVIxX1VSTCk7Ci0gICAgICAgIAorCiAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGZyb21XYXIxLmNvbnRhaW5zKCJzdWNjZXNzIiksCiAgICAgICAgICAgICAgICAgIkRvZXMgbm90IGNvbnRhaW4gdGhlIHdvcmQgc3VjY2VzczogIiArIGZyb21XYXIxKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RJbmplY3RGcm9tTGliMUludG9FamIyKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24gewogICAgICAgICBFamIyUmVtb3RlIGVqYjIgPSAoRWpiMlJlbW90ZSkgbG9va3VwV2l0aEZpdmVTZWNvbmRTbGVlcChFSkIyX0pORElfTkFNRSk7Ci0gICAgICAgIAotICAgICAgICBlamIyLmlzTGliMUhLMlNlcnZpY2VBdmFpbGFibGUoKTsgCisKKyAgICAgICAgZWpiMi5pc0xpYjFISzJTZXJ2aWNlQXZhaWxhYmxlKCk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0SW5qZWN0RnJvbUVqYjFJbnRvRWpiMigpIHRocm93cyBOYW1pbmdFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsKICAgICAgICAgRWpiMlJlbW90ZSBlamIyID0gKEVqYjJSZW1vdGUpIGxvb2t1cFdpdGhGaXZlU2Vjb25kU2xlZXAoRUpCMl9KTkRJX05BTUUpOwotICAgICAgICAKLSAgICAgICAgZWpiMi5pc0VqYjFISzJTZXJ2aWNlQXZhaWxhYmxlKCk7IAorCisgICAgICAgIGVqYjIuaXNFamIxSEsyU2VydmljZUF2YWlsYWJsZSgpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEluamVjdEZyb21FamIySW50b0VqYjIoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIEVqYjJSZW1vdGUgZWpiMiA9IChFamIyUmVtb3RlKSBsb29rdXBXaXRoRml2ZVNlY29uZFNsZWVwKEVKQjJfSk5ESV9OQU1FKTsKLSAgICAgICAgCi0gICAgICAgIGVqYjIuaXNFamIySEsyU2VydmljZUF2YWlsYWJsZSgpOyAKKworICAgICAgICBlamIyLmlzRWpiMkhLMlNlcnZpY2VBdmFpbGFibGUoKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RJbmplY3RlZExpYjFFamIxRWpiMldhcjJJbnRvV2FyMigpIHsKICAgICAgICAgU3RyaW5nIGZyb21XYXIyID0gTnVjbGV1c1Rlc3RVdGlscy5nZXRVUkwoV0FSMl9VUkwpOwotICAgICAgICAKKwogICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShmcm9tV2FyMi5jb250YWlucygic3VjY2VzcyIpLAogICAgICAgICAgICAgICAgICJEb2VzIG5vdCBjb250YWluIHRoZSB3b3JkIHN1Y2Nlc3M6ICIgKyBmcm9tV2FyMik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL3dhcjEvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci93YXIxL3BvbS54bWwKaW5kZXggMjVlNThmZC4uMzhiNDEyMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL3dhcjEvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvd2FyMS9wb20ueG1sCkBAIC0zMSw3ICszMSw3IEBACiAgICAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KIAogICAgIDxuYW1lPkhLMiBDREkgRUFSIFRlc3QgV2FyMTwvbmFtZT4KLSAgICAKKwogICAgIDxidWlsZD4KICAgICAgIDxwbHVnaW5zPgogICAgICAgICAgIDxwbHVnaW4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvd2FyMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2Vhci93YXIxL1dhcjEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci93YXIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWFyL3dhcjEvV2FyMS5qYXZhCmluZGV4IGE4Njc4NjkuLjEwMzc2OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci93YXIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWFyL3dhcjEvV2FyMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci93YXIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWFyL3dhcjEvV2FyMS5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiBpbXBvcnQgY29tLm9yYWNsZS5oazIuZGV2dGVzdC5jZGkuZWFyLmxpYjEuTGliMUhLMlNlcnZpY2U7CiAKIC8qKgotICogCisgKgogICogQGF1dGhvciBqd2VsbHMKICAqCiAgKi8KQEAgLTQyLDEzICs0MiwxMyBAQAogCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgTGliMUhLMlNlcnZpY2UgbGliMUhrMlNlcnZpY2U7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSBFamIxSEsyU2VydmljZSBlamIxSGsyU2VydmljZTsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwcml2YXRlIFdhcjFISzJTZXJ2aWNlIHdhcjFIazJTZXJ2aWNlOwotICAgIAorCiAgICAgLyoqCiAgICAgICogSnVzdCBwcmludHMgb3V0IHRoZSB2YWx1ZSBvZiB0aGUgU2VydmljZUxvY2F0b3IgZ2V0TmFtZQogICAgICAqLwpAQCAtNTYsMjggKzU2LDI4IEBACiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsCiAgICAgICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBpZiAobGliMUhrMlNlcnZpY2UgPT0gbnVsbCB8fCAhbGliMUhrMlNlcnZpY2UuZ2V0Q29tcG9uZW50TmFtZSgpLmVxdWFscyhISzJTZXJ2aWNlLkxJQjEpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbigibGliMUhLMlNlcnZpY2UgZnJvbSBsaWIxIHdhcyBpbnZhbGlkOiAiICsgbGliMUhrMlNlcnZpY2UpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChlamIxSGsyU2VydmljZSA9PSBudWxsIHx8ICFlamIxSGsyU2VydmljZS5nZXRDb21wb25lbnROYW1lKCkuZXF1YWxzKEhLMlNlcnZpY2UuRUpCMSkpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJlamIxSEsyU2VydmljZSBmcm9tIGVqYjEgd2FzIGludmFsaWQ6ICIgKyBlamIxSGsyU2VydmljZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKHdhcjFIazJTZXJ2aWNlID09IG51bGwgfHwgIXdhcjFIazJTZXJ2aWNlLmdldENvbXBvbmVudE5hbWUoKS5lcXVhbHMoSEsyU2VydmljZS5XQVIxKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIndhcjFISzJTZXJ2aWNlIGZyb20gd2FyMSB3YXMgaW52YWxpZDogIiArIHdhcjFIazJTZXJ2aWNlKTsKICAgICAgICAgfQogCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgd3JpdGVyID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHdyaXRlci5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgd3JpdGVyLnByaW50bG4oIjxoZWFkPiIpOwogICAgICAgICB3cml0ZXIucHJpbnRsbigiPHRpdGxlPklzbzEgV2ViQXBwPC90aXRsZT4iKTsKICAgICAgICAgd3JpdGVyLnByaW50bG4oIjwvaGVhZD4iKTsKICAgICAgICAgd3JpdGVyLnByaW50bG4oIjxib2R5PiIpOwotICAgICAgICAKKwogICAgICAgICB3cml0ZXIucHJpbnRsbigic3VjY2VzcyIpOwogCiAgICAgICAgIHdyaXRlci5wcmludGxuKCI8L2JvZHk+Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvd2FyMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2Vhci93YXIxL1dhcjFISzJTZXJ2aWNlRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL3dhcjEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lYXIvd2FyMS9XYXIxSEsyU2VydmljZUZhY3RvcnkuamF2YQppbmRleCA5NjhmNDg2Li4xN2I3MzhiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvd2FyMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2Vhci93YXIxL1dhcjFISzJTZXJ2aWNlRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci93YXIxL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWFyL3dhcjEvV2FyMUhLMlNlcnZpY2VGYWN0b3J5LmphdmEKQEAgLTM2LDE0ICszNiwxNCBAQAogICAgICAgICAgICAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkgewogICAgICAgICAgICAgICAgIHJldHVybiBISzJTZXJ2aWNlLldBUjE7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IDsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKFdhcjFISzJTZXJ2aWNlIGluc3RhbmNlKSB7CiAgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgCisKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci93YXIxL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvd2FyMS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmluZGV4IGVjMzZlMDMuLjQ1NWI4YzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci93YXIxL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL3dhcjEvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApAQCAtMjYsNyArMjYsNyBAQAogICAgIDxzZXJ2bGV0LW5hbWU+d2FyMTwvc2VydmxldC1uYW1lPgogICAgIDxzZXJ2bGV0LWNsYXNzPmNvbS5vcmFjbGUuaGsyLmRldnRlc3QuY2RpLmVhci53YXIxLldhcjE8L3NlcnZsZXQtY2xhc3M+CiAgIDwvc2VydmxldD4KLSAgCisKICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICA8c2VydmxldC1uYW1lPndhcjE8L3NlcnZsZXQtbmFtZT4KICAgICA8dXJsLXBhdHRlcm4+L3dhcjE8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL3dhcjIvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci93YXIyL3BvbS54bWwKaW5kZXggMjUyYjgzNi4uYTljNDY5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL3dhcjIvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvd2FyMi9wb20ueG1sCkBAIC0zMSw3ICszMSw3IEBACiAgICAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KIAogICAgIDxuYW1lPkhLMiBDREkgRUFSIFRlc3QgV2FyMjwvbmFtZT4KLSAgICAKKwogICAgIDxidWlsZD4KICAgICAgIDxwbHVnaW5zPgogICAgICAgICAgIDxwbHVnaW4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvd2FyMi9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2Vhci93YXIyL1dhcjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci93YXIyL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWFyL3dhcjIvV2FyMi5qYXZhCmluZGV4IDllOGQ5ODguLjlmNDQzOWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci93YXIyL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWFyL3dhcjIvV2FyMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci93YXIyL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWFyL3dhcjIvV2FyMi5qYXZhCkBAIC0zMSwyOCArMzEsMjggQEAKIGltcG9ydCBjb20ub3JhY2xlLmhrMi5kZXZ0ZXN0LmNkaS5lYXIubGliMS5MaWIxSEsyU2VydmljZTsKIAogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIGp3ZWxscwogICoKICAqLwogcHVibGljIGNsYXNzIFdhcjIgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKi8KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtMjE1MTkxMjE1OTI5NzkzMTg4Mkw7CiAKICAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSBMaWIxSEsyU2VydmljZSBsaWIxSGsyU2VydmljZTsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwcml2YXRlIEVqYjFISzJTZXJ2aWNlIGVqYjFIazJTZXJ2aWNlOwotICAgIAorCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgRWpiMkhLMlNlcnZpY2UgZWpiMkhrMlNlcnZpY2U7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSBXYXIySEsyU2VydmljZSB3YXIySGsyU2VydmljZTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIEp1c3QgcHJpbnRzIG91dCB0aGUgdmFsdWUgb2YgdGhlIFNlcnZpY2VMb2NhdG9yIGdldE5hbWUKICAgICAgKi8KQEAgLTYwLDMyICs2MCwzMiBAQAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LAogICAgICAgICAgICAgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGxpYjFIazJTZXJ2aWNlID09IG51bGwgfHwgIWxpYjFIazJTZXJ2aWNlLmdldENvbXBvbmVudE5hbWUoKS5lcXVhbHMoSEsyU2VydmljZS5MSUIxKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oImxpYjFISzJTZXJ2aWNlIGZyb20gbGliMSB3YXMgaW52YWxpZDogIiArIGxpYjFIazJTZXJ2aWNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoZWpiMUhrMlNlcnZpY2UgPT0gbnVsbCB8fCAhZWpiMUhrMlNlcnZpY2UuZ2V0Q29tcG9uZW50TmFtZSgpLmVxdWFscyhISzJTZXJ2aWNlLkVKQjEpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbigiZWpiMkhLMlNlcnZpY2UgZnJvbSBlamIyIHdhcyBpbnZhbGlkOiAiICsgZWpiMkhrMlNlcnZpY2UpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChlamIySGsyU2VydmljZSA9PSBudWxsIHx8ICFlamIySGsyU2VydmljZS5nZXRDb21wb25lbnROYW1lKCkuZXF1YWxzKEhLMlNlcnZpY2UuRUpCMikpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJlamIxSEsyU2VydmljZSBmcm9tIGVqYjEgd2FzIGludmFsaWQ6ICIgKyBlamIxSGsyU2VydmljZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKHdhcjJIazJTZXJ2aWNlID09IG51bGwgfHwgIXdhcjJIazJTZXJ2aWNlLmdldENvbXBvbmVudE5hbWUoKS5lcXVhbHMoSEsyU2VydmljZS5XQVIyKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIndhcjJISzJTZXJ2aWNlIGZyb20gd2FyMiB3YXMgaW52YWxpZDogIiArIHdhcjJIazJTZXJ2aWNlKTsKICAgICAgICAgfQogCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgd3JpdGVyID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHdyaXRlci5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgd3JpdGVyLnByaW50bG4oIjxoZWFkPiIpOwogICAgICAgICB3cml0ZXIucHJpbnRsbigiPHRpdGxlPklzbzEgV2ViQXBwPC90aXRsZT4iKTsKICAgICAgICAgd3JpdGVyLnByaW50bG4oIjwvaGVhZD4iKTsKICAgICAgICAgd3JpdGVyLnByaW50bG4oIjxib2R5PiIpOwotICAgICAgICAKKwogICAgICAgICB3cml0ZXIucHJpbnRsbigic3VjY2VzcyIpOwogCiAgICAgICAgIHdyaXRlci5wcmludGxuKCI8L2JvZHk+Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvd2FyMi9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2Vhci93YXIyL1dhcjJISzJTZXJ2aWNlRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL3dhcjIvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2NkaS9lYXIvd2FyMi9XYXIySEsyU2VydmljZUZhY3RvcnkuamF2YQppbmRleCA3MGVjYTk3Li5hNjBlOWY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvd2FyMi9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvY2RpL2Vhci93YXIyL1dhcjJISzJTZXJ2aWNlRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci93YXIyL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9jZGkvZWFyL3dhcjIvV2FyMkhLMlNlcnZpY2VGYWN0b3J5LmphdmEKQEAgLTM2LDEzICszNiwxMyBAQAogICAgICAgICAgICAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkgewogICAgICAgICAgICAgICAgIHJldHVybiBISzJTZXJ2aWNlLldBUjI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IDsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKFdhcjJISzJTZXJ2aWNlIGluc3RhbmNlKSB7Ci0gICAgICAgIAorCiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvd2FyMi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvZWFyL3dhcjIvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAppbmRleCA1NTYyZGYxLi40ZDZmMmZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9lYXIvd2FyMi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2Vhci93YXIyL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTI2LDcgKzI2LDcgQEAKICAgICA8c2VydmxldC1uYW1lPndhcjI8L3NlcnZsZXQtbmFtZT4KICAgICA8c2VydmxldC1jbGFzcz5jb20ub3JhY2xlLmhrMi5kZXZ0ZXN0LmNkaS5lYXIud2FyMi5XYXIyPC9zZXJ2bGV0LWNsYXNzPgogICA8L3NlcnZsZXQ+Ci0gIAorCiAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgPHNlcnZsZXQtbmFtZT53YXIyPC9zZXJ2bGV0LW5hbWU+CiAgICAgPHVybC1wYXR0ZXJuPi93YXIyPC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2plcnNleS9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvamVyc2V5L3BvbS54bWwKaW5kZXggYzU2NDE5Mi4uYWUwOWNiOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvamVyc2V5L3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvamVyc2V5L3BvbS54bWwKQEAgLTMwLDcgKzMwLDcgQEAKICAgICA8YXJ0aWZhY3RJZD5qZXJzZXk8L2FydGlmYWN0SWQ+CiAgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KIAotICAgIDxuYW1lPkdsYXNzRmlzaCBISzIgSmVyc2V5IENESSB0ZXN0PC9uYW1lPiAgCisgICAgPG5hbWU+R2xhc3NGaXNoIEhLMiBKZXJzZXkgQ0RJIHRlc3Q8L25hbWU+CiAgICAgPG1vZHVsZXM+CiAgICAgICAgIDxtb2R1bGU+d2FyPC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+cnVubmVyPC9tb2R1bGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9qZXJzZXkvcnVubmVyL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9qZXJzZXkvcnVubmVyL3BvbS54bWwKaW5kZXggN2E2NGY5YS4uMDE5YTM4YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvamVyc2V5L3J1bm5lci9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2plcnNleS9ydW5uZXIvcG9tLnhtbApAQCAtMzAsNyArMzAsNyBAQAogICAgIDxhcnRpZmFjdElkPnJ1bm5lcjwvYXJ0aWZhY3RJZD4KIAogICAgIDxuYW1lPkhLMiBDREkgSmVyc2V5IFRlc3QgUnVubmVyPC9uYW1lPgotICAgIAorCiAgICAgPGJ1aWxkPgogICAgICAgICA8cGx1Z2lucz4KICAgICAgICAgICAgIDxwbHVnaW4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9qZXJzZXkvcnVubmVyL3NyYy90ZXN0L2phdmEvY29tL3N1bi9qZXJzZXkvc2FtcGxlcy9qZXJzZXlfY2RpL3Rlc3QvSmVyc2V5VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvamVyc2V5L3J1bm5lci9zcmMvdGVzdC9qYXZhL2NvbS9zdW4vamVyc2V5L3NhbXBsZXMvamVyc2V5X2NkaS90ZXN0L0plcnNleVRlc3QuamF2YQppbmRleCBiOGVmOGMxLi42YWMyZWQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9qZXJzZXkvcnVubmVyL3NyYy90ZXN0L2phdmEvY29tL3N1bi9qZXJzZXkvc2FtcGxlcy9qZXJzZXlfY2RpL3Rlc3QvSmVyc2V5VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2plcnNleS9ydW5uZXIvc3JjL3Rlc3QvamF2YS9jb20vc3VuL2plcnNleS9zYW1wbGVzL2plcnNleV9jZGkvdGVzdC9KZXJzZXlUZXN0LmphdmEKQEAgLTMwLDM2ICszMCwzNiBAQAogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBKRVJTRVlfV0FSID0gImNkaS9qZXJzZXkvd2FyL3RhcmdldC9qZXJzZXktY2RpLndhciI7CiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFNPVVJDRV9IT01FX1dBUiA9ICIvYXBwc2VydmVyL3Rlc3RzL2hrMi8iICsgSkVSU0VZX1dBUjsKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgSkVSU0VZX1dBUl9BUFBfTkFNRSA9ICJqZXJzZXktY2RpIjsKLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBkZXBsb3llZDE7CiAgICAgcHJpdmF0ZSBDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBAQmVmb3JlVGVzdAogICAgIHB1YmxpYyB2b2lkIGJlZm9yZVRlc3QoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKICAgICAgICAgY29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgamVyc2V5V2FyID0gSkVSU0VZX1dBUjsKICAgICAgICAgaWYgKCFTT1VSQ0VfSE9NRS5zdGFydHNXaXRoKCIkIikpIHsKICAgICAgICAgICAgIGplcnNleVdhciA9IFNPVVJDRV9IT01FICsgU09VUkNFX0hPTUVfV0FSOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlcGxveWVkMSA9IE51Y2xldXNUZXN0VXRpbHMubmFkbWluKCJkZXBsb3kiLCBqZXJzZXlXYXIpOwogICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShkZXBsb3llZDEpOwogICAgIH0KLSAgICAKKwogICAgIEBBZnRlclRlc3QKICAgICBwdWJsaWMgdm9pZCBhZnRlclRlc3QoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKICAgICAgICAgaWYgKGRlcGxveWVkMSkgewogICAgICAgICAgICAgTnVjbGV1c1Rlc3RVdGlscy5uYWRtaW4oInVuZGVwbG95IiwgSkVSU0VZX1dBUl9BUFBfTkFNRSk7CiAgICAgICAgICAgICBkZXBsb3llZDEgPSBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoY29udGV4dCAhPSBudWxsKSB7CiAgICAgICAgICAgICBjb250ZXh0LmNsb3NlKCk7CiAgICAgICAgICAgICBjb250ZXh0ID0gbnVsbDsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEp1c3RBVGVzdCgpIHsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9qZXJzZXkvd2FyL25iLWNvbmZpZ3VyYXRpb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvamVyc2V5L3dhci9uYi1jb25maWd1cmF0aW9uLnhtbAppbmRleCBmNjkzZmI2Li5iZTMzNDNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9qZXJzZXkvd2FyL25iLWNvbmZpZ3VyYXRpb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2plcnNleS93YXIvbmItY29uZmlndXJhdGlvbi54bWwKQEAgLTI2LDcgKzI2LDcgQEAKIC0tPgogICAgIDxwcm9wZXJ0aWVzIHhtbG5zPSJodHRwOi8vd3d3Lm5ldGJlYW5zLm9yZy9ucy9tYXZlbi1wcm9wZXJ0aWVzLWRhdGEvMSI+CiAgICAgICAgIDwhLS0KLVByb3BlcnRpZXMgdGhhdCBpbmZsdWVuY2UgdmFyaW91cyBwYXJ0cyBvZiB0aGUgSURFLCBlc3BlY2lhbGx5IGNvZGUgZm9ybWF0dGluZyBhbmQgdGhlIGxpa2UuIAorUHJvcGVydGllcyB0aGF0IGluZmx1ZW5jZSB2YXJpb3VzIHBhcnRzIG9mIHRoZSBJREUsIGVzcGVjaWFsbHkgY29kZSBmb3JtYXR0aW5nIGFuZCB0aGUgbGlrZS4KIFlvdSBjYW4gY29weSBhbmQgcGFzdGUgdGhlIHNpbmdsZSBwcm9wZXJ0aWVzLCBpbnRvIHRoZSBwb20ueG1sIGZpbGUgYW5kIHRoZSBJREUgd2lsbCBwaWNrIHRoZW0gdXAuCiBUaGF0IHdheSBtdWx0aXBsZSBwcm9qZWN0cyBjYW4gc2hhcmUgdGhlIHNhbWUgc2V0dGluZ3MgKHVzZWZ1bCBmb3IgZm9ybWF0dGluZyBydWxlcyBmb3IgZXhhbXBsZSkuCiBBbnkgdmFsdWUgZGVmaW5lZCBoZXJlIHdpbGwgb3ZlcnJpZGUgdGhlIHBvbS54bWwgZmlsZSB2YWx1ZSBidXQgaXMgb25seSBhcHBsaWNhYmxlIHRvIHRoZSBjdXJyZW50IHByb2plY3QuCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9qZXJzZXkvd2FyL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9qZXJzZXkvd2FyL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKaW5kZXggZTMwYzZhYy4uOTc5MDAyOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvamVyc2V5L3dhci9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL2plcnNleS93YXIvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApAQCAtMjEsNyArMjEsNyBAQAogeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiCiAgICAgICB2ZXJzaW9uPSIzLjAiPgotICAgICAgPCEtLSAgCisgICAgICA8IS0tCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+Y29tLnN1bi5qZXJzZXkuc2FtcGxlcy5qZXJzZXlfY2RpLnJlc291cmNlcy5NeUFwcGxpY2F0aW9uPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MTwvbG9hZC1vbi1zdGFydHVwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9oazIvY2RpL3BvbS54bWwKaW5kZXggYjdhYmJlYi4uZWJlOWNkOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9jZGkvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2NkaS9wb20ueG1sCkBAIC0zMCw3ICszMCw3IEBACiAgICAgPGFydGlmYWN0SWQ+Y2RpPC9hcnRpZmFjdElkPgogICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CiAKLSAgICA8bmFtZT5HbGFzc0Zpc2ggSEsyIENESSBUZXN0czwvbmFtZT4gIAorICAgIDxuYW1lPkdsYXNzRmlzaCBISzIgQ0RJIFRlc3RzPC9uYW1lPgogICAgIDxtb2R1bGVzPgogICAgICAgICA8bW9kdWxlPmJhc2ljPC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+ZWFyPC9tb2R1bGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2lzb2xhdGlvbi9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9pc29sYXRpb24vcG9tLnhtbAppbmRleCAwMDZmODBhLi4xM2Y4OTBhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2lzb2xhdGlvbi9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvaXNvbGF0aW9uL3BvbS54bWwKQEAgLTMyLDcgKzMyLDcgQEAKICAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgogICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogCi0gICAgPG5hbWU+R2xhc3NGaXNoIEhLMiBJc29sYXRpb24gVGVzdHM8L25hbWU+ICAKKyAgICA8bmFtZT5HbGFzc0Zpc2ggSEsyIElzb2xhdGlvbiBUZXN0czwvbmFtZT4KICAgICA8bW9kdWxlcz4KICAgICAgICAgPG1vZHVsZT53ZWI8L21vZHVsZT4KICAgICAgICAgPG1vZHVsZT5ydW5uZXI8L21vZHVsZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9oazIvaXNvbGF0aW9uL3J1bm5lci9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9pc29sYXRpb24vcnVubmVyL3BvbS54bWwKaW5kZXggODBlZjY4Mi4uMzAxOGExNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9pc29sYXRpb24vcnVubmVyL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9pc29sYXRpb24vcnVubmVyL3BvbS54bWwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KIAogICAgIDxuYW1lPkdsYXNzRmlzaCBISzIgSXNvbGF0aW9uIFRlc3QgUnVubmVyPC9uYW1lPgotICAgIAorCiAgICAgPGJ1aWxkPgogICAgICAgICA8cGx1Z2lucz4KICAgICAgICAgICAgIDxwbHVnaW4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2lzb2xhdGlvbi9ydW5uZXIvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2lzb2xhdGlvbi9ydW5uZXIvZHVtbXkvRHVtbXkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9oazIvaXNvbGF0aW9uL3J1bm5lci9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvaXNvbGF0aW9uL3J1bm5lci9kdW1teS9EdW1teS5qYXZhCmluZGV4IGMwODZjOTcuLjFjOWI3ZTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9oazIvaXNvbGF0aW9uL3J1bm5lci9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvaXNvbGF0aW9uL3J1bm5lci9kdW1teS9EdW1teS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvaXNvbGF0aW9uL3J1bm5lci9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvaXNvbGF0aW9uL3J1bm5lci9kdW1teS9EdW1teS5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIC8qKgogICogT25seSBoZXJlIHRvIG1ha2UgbWF2ZW4gaGFwcHkKLSAqIAorICoKICAqIEBhdXRob3IgandlbGxzCiAgKgogICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2lzb2xhdGlvbi9ydW5uZXIvc3JjL3Rlc3QvamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2lzb2xhdGlvbi9ydW5uZXIvSXNvbGF0aW9uVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9pc29sYXRpb24vcnVubmVyL3NyYy90ZXN0L2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9pc29sYXRpb24vcnVubmVyL0lzb2xhdGlvblRlc3QuamF2YQppbmRleCA5MmFiOWI0Li40Y2U4NDljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2lzb2xhdGlvbi9ydW5uZXIvc3JjL3Rlc3QvamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2lzb2xhdGlvbi9ydW5uZXIvSXNvbGF0aW9uVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvaXNvbGF0aW9uL3J1bm5lci9zcmMvdGVzdC9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvaXNvbGF0aW9uL3J1bm5lci9Jc29sYXRpb25UZXN0LmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIAogLyoqCiAgKiBFbnN1cmVzIHRoYXQgZGlmZmVyZW50IGFwcHMgZ2V0IGRpZmZlcmVudCBzZXJ2aWNlIGxvY2F0b3JzCi0gKiAKKyAqCiAgKiBAYXV0aG9yIGp3ZWxscwogICoKICAqLwpAQCAtMzcsNjMgKzM3LDYzIEBACiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIElTTzFfV0FSID0gImlzb2xhdGlvbi93ZWIvaXNvMS90YXJnZXQvaGsyLWlzb2xhdGlvbi13ZWItaXNvMS53YXIiOwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBJU08xX0FQUF9OQU1FID0gImhrMi1pc29sYXRpb24td2ViLWlzbzEiOwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBJU08xX1VSTCA9ICJodHRwOi8vbG9jYWxob3N0OjgwODAvaGsyLWlzb2xhdGlvbi13ZWItaXNvMS9pc28xIjsKLSAgICAKKwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBJU08yX1dBUiA9ICJpc29sYXRpb24vd2ViL2lzbzIvdGFyZ2V0L2hrMi1pc29sYXRpb24td2ViLWlzbzIud2FyIjsKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgSVNPMl9BUFBfTkFNRSA9ICJoazItaXNvbGF0aW9uLXdlYi1pc28yIjsKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgSVNPMl9VUkwgPSAiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2hrMi1pc29sYXRpb24td2ViLWlzbzIvaXNvMiI7Ci0gICAgCisKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgU09VUkNFX0hPTUUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInNvdXJjZS5ob21lIiwgIiQiKTsKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgU09VUkNFX0hPTUVfSVNPMV9XQVIgPSAiL2FwcHNlcnZlci90ZXN0cy9oazIvIiArIElTTzFfV0FSOwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBTT1VSQ0VfSE9NRV9JU08yX1dBUiA9ICIvYXBwc2VydmVyL3Rlc3RzL2hrMi8iICsgSVNPMl9XQVI7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VSVkxFVF9DT05URVhUX0xPQ0FUT1IgPSAiU2VydmxldENvbnRleHRMb2NhdG9yIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSk5ESV9BUFBfTE9DQVRPUiA9ICJKbmRpQXBwTG9jYXRvciI7Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gZGVwbG95ZWQxOwogICAgIHByaXZhdGUgYm9vbGVhbiBkZXBsb3llZDI7Ci0gICAgCisKICAgICBwcml2YXRlIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0TmFtZXMoU3RyaW5nIHJhd0hUTUwpIHsKICAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiByZXRWYWwgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihyYXdIVE1MLCAiXG4iKTsKICAgICAgICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgewogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpbnQgZXF1YWxzSW5kZXggPSBsaW5lLmluZGV4T2YoJz0nKTsKICAgICAgICAgICAgIGlmIChlcXVhbHNJbmRleCA8IDApIGNvbnRpbnVlOyAgLy8gU2tpcCBsaW5lcyB0aGF0IGRvIG5vdCBoYXZlID0gaW4gaXQKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTdHJpbmcga2V5ID0gbGluZS5zdWJzdHJpbmcoMCwgZXF1YWxzSW5kZXgpOwogICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gbGluZS5zdWJzdHJpbmcoZXF1YWxzSW5kZXggKyAxLCBsaW5lLmxlbmd0aCgpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICByZXRWYWwucHV0KGtleSwgdmFsdWUpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiByZXRWYWw7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0TmFtZShTdHJpbmcgcmF3SFRNTCwgU3RyaW5nIGtleSkgewogICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IG5hbWVzID0gZ2V0TmFtZXMocmF3SFRNTCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBuYW1lcy5nZXQoa2V5KTsKICAgICB9Ci0gICAgCisKICAgICBAQmVmb3JlVGVzdAogICAgIHB1YmxpYyB2b2lkIGJlZm9yZVRlc3QoKSB7CiAgICAgICAgIFN0cmluZyBpc28xV2FyID0gSVNPMV9XQVI7CiAgICAgICAgIFN0cmluZyBpc28yV2FyID0gSVNPMl9XQVI7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghU09VUkNFX0hPTUUuc3RhcnRzV2l0aCgiJCIpKSB7CiAgICAgICAgICAgICBpc28xV2FyID0gU09VUkNFX0hPTUUgKyBTT1VSQ0VfSE9NRV9JU08xX1dBUjsKICAgICAgICAgICAgIGlzbzJXYXIgPSBTT1VSQ0VfSE9NRSArIFNPVVJDRV9IT01FX0lTTzJfV0FSOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlcGxveWVkMSA9IE51Y2xldXNUZXN0VXRpbHMubmFkbWluKCJkZXBsb3kiLCBpc28xV2FyKTsKICAgICAgICAgZGVwbG95ZWQyID0gTnVjbGV1c1Rlc3RVdGlscy5uYWRtaW4oImRlcGxveSIsIGlzbzJXYXIpOwotICAgICAgICAKKwogICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShkZXBsb3llZDEpOwogICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShkZXBsb3llZDIpOwogICAgIH0KLSAgICAKKwogICAgIEBBZnRlclRlc3QKICAgICBwdWJsaWMgdm9pZCBhZnRlclRlc3QoKSB7CiAgICAgICAgIGlmIChkZXBsb3llZDEpIHsKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgICAgICAgICAgTnVjbGV1c1Rlc3RVdGlscy5uYWRtaW4oInVuZGVwbG95IiwgSVNPMl9BUFBfTkFNRSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbnN1cmVzIHRoYXQgdGhlIHNlcnZpY2UgbG9jYXRvcnMgaW4gdHdvIHdlYi1hcHBzIGFyZSBkaWZmZXJlbnQKICAgICAgKi8KQEAgLTExMywxMyArMTEzLDEzIEBACiAgICAgcHVibGljIHZvaWQgdGVzdFdlYkFwcHNBcmVJc29sYXRlZCgpIHsKICAgICAgICAgU3RyaW5nIGZyb21VUkwxID0gTnVjbGV1c1Rlc3RVdGlscy5nZXRVUkwoSVNPMV9VUkwpOwogICAgICAgICBTdHJpbmcgZnJvbVVSTDIgPSBOdWNsZXVzVGVzdFV0aWxzLmdldFVSTChJU08yX1VSTCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICBTdHJpbmcgaXNvMU5hbWUgPSBnZXROYW1lKGZyb21VUkwxLCBTRVJWTEVUX0NPTlRFWFRfTE9DQVRPUik7CiAgICAgICAgIFN0cmluZyBpc28yTmFtZSA9IGdldE5hbWUoZnJvbVVSTDIsIFNFUlZMRVRfQ09OVEVYVF9MT0NBVE9SKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIEFzc2VydC5hc3NlcnROb3RFcXVhbHMoaXNvMU5hbWUsIGlzbzJOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbnN1cmVzIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHNlcnZpY2UgbG9jYXRvcnMgaW4gdHdvIHdlYi1hcHBzIGFyZSBkaWZmZXJlbnQKICAgICAgKi8KQEAgLTEyNywxMCArMTI3LDEwIEBACiAgICAgcHVibGljIHZvaWQgdGVzdFdlYkFwcHNBcHBsaWNhdGlvblNlcnZpY2VMb2NhdG9yc0FyZUlzb2xhdGVkKCkgewogICAgICAgICBTdHJpbmcgZnJvbVVSTDEgPSBOdWNsZXVzVGVzdFV0aWxzLmdldFVSTChJU08xX1VSTCk7CiAgICAgICAgIFN0cmluZyBmcm9tVVJMMiA9IE51Y2xldXNUZXN0VXRpbHMuZ2V0VVJMKElTTzJfVVJMKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIFN0cmluZyBpc28xTmFtZSA9IGdldE5hbWUoZnJvbVVSTDEsIEpORElfQVBQX0xPQ0FUT1IpOwogICAgICAgICBTdHJpbmcgaXNvMk5hbWUgPSBnZXROYW1lKGZyb21VUkwyLCBKTkRJX0FQUF9MT0NBVE9SKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIEFzc2VydC5hc3NlcnROb3RFcXVhbHMoaXNvMU5hbWUsIGlzbzJOYW1lKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2lzb2xhdGlvbi93ZWIvaXNvMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvaXNvbGF0aW9uL3dlYi9pc28xL0lzbzFTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2lzb2xhdGlvbi93ZWIvaXNvMS9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvaXNvbGF0aW9uL3dlYi9pc28xL0lzbzFTZXJ2bGV0LmphdmEKaW5kZXggMWUzNTg1Ny4uNTc1MzA2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9pc29sYXRpb24vd2ViL2lzbzEvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2lzb2xhdGlvbi93ZWIvaXNvMS9Jc28xU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvaXNvbGF0aW9uL3dlYi9pc28xL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9pc29sYXRpb24vd2ViL2lzbzEvSXNvMVNlcnZsZXQuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogCiAvKioKICAqIFNpbXBsZSByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBIQUJJVEFUIHByb3BlcnR5Ci0gKiAKKyAqCiAgKiBAYXV0aG9yIGp3ZWxscwogICovCiBwdWJsaWMgY2xhc3MgSXNvMVNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CkBAIC00MCwyMCArNDAsMjAgQEAKICAgICAgKiBGb3Igc2VyaWFsaXphdGlvbgogICAgICAqLwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC05MTc3NTQwNDMxMjY3MDA1OTQ2TDsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIQUJJVEFUX0FUVFJJQlVURSA9ICJvcmcuZ2xhc3NmaXNoLnNlcnZsZXQuaGFiaXRhdCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEpORElfQVBQX0xPT0tVUCA9ICJqYXZhOmFwcC9oazIvU2VydmljZUxvY2F0b3IiOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZMRVRfQ09OVEVYVF9MT0NBVE9SID0gIlNlcnZsZXRDb250ZXh0TG9jYXRvcj0iOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBKTkRJX0FQUF9MT0NBVE9SID0gIkpuZGlBcHBMb2NhdG9yPSI7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBnZXRKbmRpQXBwTG9jYXRvck5hbWUoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgQ29udGV4dCBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgCisKICAgICAgICAgICBTZXJ2aWNlTG9jYXRvciByZXRWYWwgPSAoU2VydmljZUxvY2F0b3IpIGNvbnRleHQubG9va3VwKEpORElfQVBQX0xPT0tVUCk7Ci0gICAgICAgICAgCisKICAgICAgICAgICByZXR1cm4gcmV0VmFsLmdldE5hbWUoKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIG5lKSB7CkBAIC02OCwyMCArNjgsMjAgQEAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwKICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIFNlcnZsZXRDb250ZXh0IGNvbnRleHQgPSBnZXRTZXJ2bGV0Q29udGV4dCgpOwotICAgICAgICAKKwogICAgICAgICBTZXJ2aWNlTG9jYXRvciBsb2NhdG9yID0gKFNlcnZpY2VMb2NhdG9yKSBjb250ZXh0LmdldEF0dHJpYnV0ZShIQUJJVEFUX0FUVFJJQlVURSk7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyByZXBseTEgPSBTRVJWTEVUX0NPTlRFWFRfTE9DQVRPUiArICgobG9jYXRvciA9PSBudWxsKSA/ICJudWxsIiA6IGxvY2F0b3IuZ2V0TmFtZSgpKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGpuZGlBcHBMb2NhdG9yTmFtZSA9IGdldEpuZGlBcHBMb2NhdG9yTmFtZSgpOwogICAgICAgICBTdHJpbmcgcmVwbHkyID0gSk5ESV9BUFBfTE9DQVRPUiArICgoam5kaUFwcExvY2F0b3JOYW1lID09IG51bGwpID8gIm51bGwiIDogam5kaUFwcExvY2F0b3JOYW1lKTsKIAogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIHdyaXRlciA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICB3cml0ZXIucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgIHdyaXRlci5wcmludGxuKCI8aGVhZD4iKTsKICAgICAgICAgd3JpdGVyLnByaW50bG4oIjx0aXRsZT5Jc28xIFdlYkFwcDwvdGl0bGU+Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2lzb2xhdGlvbi93ZWIvaXNvMS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9pc29sYXRpb24vd2ViL2lzbzEvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAppbmRleCA2YTkzYjA1Li45NGFlYmVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2lzb2xhdGlvbi93ZWIvaXNvMS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvaXNvbGF0aW9uL3dlYi9pc28xL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTI2LDcgKzI2LDcgQEAKICAgICA8c2VydmxldC1uYW1lPmlzbzE8L3NlcnZsZXQtbmFtZT4KICAgICA8c2VydmxldC1jbGFzcz5jb20ub3JhY2xlLmhrMi5kZXZ0ZXN0Lmlzb2xhdGlvbi53ZWIuaXNvMS5Jc28xU2VydmxldDwvc2VydmxldC1jbGFzcz4KICAgPC9zZXJ2bGV0PgotICAKKwogICA8c2VydmxldC1tYXBwaW5nPgogICAgIDxzZXJ2bGV0LW5hbWU+aXNvMTwvc2VydmxldC1uYW1lPgogICAgIDx1cmwtcGF0dGVybj4vaXNvMTwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2lzb2xhdGlvbi93ZWIvaXNvMi9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvaXNvbGF0aW9uL3dlYi9pc28yL0lzbzJTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2lzb2xhdGlvbi93ZWIvaXNvMi9zcmMvbWFpbi9qYXZhL2NvbS9vcmFjbGUvaGsyL2RldnRlc3QvaXNvbGF0aW9uL3dlYi9pc28yL0lzbzJTZXJ2bGV0LmphdmEKaW5kZXggZDA5M2ZjYi4uNTgxYWQxNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9pc29sYXRpb24vd2ViL2lzbzIvc3JjL21haW4vamF2YS9jb20vb3JhY2xlL2hrMi9kZXZ0ZXN0L2lzb2xhdGlvbi93ZWIvaXNvMi9Jc28yU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvaXNvbGF0aW9uL3dlYi9pc28yL3NyYy9tYWluL2phdmEvY29tL29yYWNsZS9oazIvZGV2dGVzdC9pc29sYXRpb24vd2ViL2lzbzIvSXNvMlNlcnZsZXQuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogCiAvKioKICAqIFNpbXBsZSByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBIQUJJVEFUIHByb3BlcnR5Ci0gKiAKKyAqCiAgKiBAYXV0aG9yIGp3ZWxscwogICovCiBwdWJsaWMgY2xhc3MgSXNvMlNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CkBAIC00MCwyMCArNDAsMjAgQEAKICAgICAgKiBGb3Igc2VyaWFsaXphdGlvbgogICAgICAqLwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC05MTc3NTQwNDMxMjY3MDA1OTQ2TDsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIQUJJVEFUX0FUVFJJQlVURSA9ICJvcmcuZ2xhc3NmaXNoLnNlcnZsZXQuaGFiaXRhdCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEpORElfQVBQX0xPT0tVUCA9ICJqYXZhOmFwcC9oazIvU2VydmljZUxvY2F0b3IiOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZMRVRfQ09OVEVYVF9MT0NBVE9SID0gIlNlcnZsZXRDb250ZXh0TG9jYXRvcj0iOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBKTkRJX0FQUF9MT0NBVE9SID0gIkpuZGlBcHBMb2NhdG9yPSI7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBnZXRKbmRpQXBwTG9jYXRvck5hbWUoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgQ29udGV4dCBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgCisKICAgICAgICAgICBTZXJ2aWNlTG9jYXRvciByZXRWYWwgPSAoU2VydmljZUxvY2F0b3IpIGNvbnRleHQubG9va3VwKEpORElfQVBQX0xPT0tVUCk7Ci0gICAgICAgICAgCisKICAgICAgICAgICByZXR1cm4gcmV0VmFsLmdldE5hbWUoKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIG5lKSB7CkBAIC02OSwxNyArNjksMTcgQEAKICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFNlcnZsZXRDb250ZXh0IGNvbnRleHQgPSBnZXRTZXJ2bGV0Q29udGV4dCgpOwotICAgICAgICAKKwogICAgICAgICBTZXJ2aWNlTG9jYXRvciBsb2NhdG9yID0gKFNlcnZpY2VMb2NhdG9yKSBjb250ZXh0LmdldEF0dHJpYnV0ZShIQUJJVEFUX0FUVFJJQlVURSk7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyByZXBseTEgPSBTRVJWTEVUX0NPTlRFWFRfTE9DQVRPUiArICgobG9jYXRvciA9PSBudWxsKSA/ICJudWxsIiA6IGxvY2F0b3IuZ2V0TmFtZSgpKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGpuZGlBcHBMb2NhdG9yTmFtZSA9IGdldEpuZGlBcHBMb2NhdG9yTmFtZSgpOwogICAgICAgICBTdHJpbmcgcmVwbHkyID0gSk5ESV9BUFBfTE9DQVRPUiArICgoam5kaUFwcExvY2F0b3JOYW1lID09IG51bGwpID8gIm51bGwiIDogam5kaUFwcExvY2F0b3JOYW1lKTsKIAogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIHdyaXRlciA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICB3cml0ZXIucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgIHdyaXRlci5wcmludGxuKCI8aGVhZD4iKTsKICAgICAgICAgd3JpdGVyLnByaW50bG4oIjx0aXRsZT5Jc28yIFdlYkFwcDwvdGl0bGU+Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2lzb2xhdGlvbi93ZWIvaXNvMi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2hrMi9pc29sYXRpb24vd2ViL2lzbzIvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAppbmRleCBmNjAzMzllLi5mMGMwMTdkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2lzb2xhdGlvbi93ZWIvaXNvMi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvaXNvbGF0aW9uL3dlYi9pc28yL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTI2LDcgKzI2LDcgQEAKICAgICA8c2VydmxldC1uYW1lPmlzbzI8L3NlcnZsZXQtbmFtZT4KICAgICA8c2VydmxldC1jbGFzcz5jb20ub3JhY2xlLmhrMi5kZXZ0ZXN0Lmlzb2xhdGlvbi53ZWIuaXNvMi5Jc28yU2VydmxldDwvc2VydmxldC1jbGFzcz4KICAgPC9zZXJ2bGV0PgotICAKKwogICA8c2VydmxldC1tYXBwaW5nPgogICAgIDxzZXJ2bGV0LW5hbWU+aXNvMjwvc2VydmxldC1uYW1lPgogICAgIDx1cmwtcGF0dGVybj4vaXNvMjwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL2lzb2xhdGlvbi93ZWIvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9oazIvaXNvbGF0aW9uL3dlYi9wb20ueG1sCmluZGV4IDQ5NjcxMzAuLmJmYmFkMjQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9oazIvaXNvbGF0aW9uL3dlYi9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvaXNvbGF0aW9uL3dlYi9wb20ueG1sCkBAIC0zMiw3ICszMiw3IEBACiAgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KIAotICAgIDxuYW1lPkdsYXNzRmlzaCBISzIgSXNvbGF0aW9uIFdlYkFwcHM8L25hbWU+ICAKKyAgICA8bmFtZT5HbGFzc0Zpc2ggSEsyIElzb2xhdGlvbiBXZWJBcHBzPC9uYW1lPgogICAgIDxtb2R1bGVzPgogICAgICAgICA8bW9kdWxlPmlzbzE8L21vZHVsZT4KICAgICAgICAgPG1vZHVsZT5pc28yPC9tb2R1bGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvaGsyL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvaGsyL3BvbS54bWwKaW5kZXggZGVkY2JmNS4uYmUwNzBlYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2hrMi9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9oazIvcG9tLnhtbApAQCAtMzAsNyArMzAsNyBAQAogICAgIDxhcnRpZmFjdElkPmhrMjwvYXJ0aWZhY3RJZD4KICAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgogCi0gICAgPG5hbWU+R2xhc3NGaXNoIEhLMiBUZXN0czwvbmFtZT4gIAorICAgIDxuYW1lPkdsYXNzRmlzaCBISzIgVGVzdHM8L25hbWU+CiAgICAgPG1vZHVsZXM+CiAgICAgICAgIDxtb2R1bGU+aXNvbGF0aW9uPC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+Y2RpPC9tb2R1bGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvbG9nbW9uaXRvci9GaWx0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9sb2dtb25pdG9yL0ZpbHRlci5qYXZhCmluZGV4IDA5NTlmYjIuLmQwNjc0OTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9sb2dtb25pdG9yL0ZpbHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9sb2dtb25pdG9yL0ZpbHRlci5qYXZhCkBAIC0xODgsOCArMTg4LDggQEAKICAgICAgICAgYm9vbGVhbiBpc0dmSG9tZSA9IHRydWU7CiAgICAgICAgIFN0cmluZyBnZkhvbWUgPSAiIjsKIAotICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAyIHx8IGFyZ3NbMF09PW51bGwgfHwgYXJnc1sxXSA9PW51bGwgfHwgKCIke2dsYXNzZmlzaF9ob21lfSIpLmVxdWFscyhhcmdzWzBdKSB8fCAoIiR7b3B0aW9uc30iKS5lcXVhbHMoYXJnc1sxXSkgCi0JCQkJfHwgKCIiKS5lcXVhbHMoYXJnc1swXSkgfHwgKCIiKS5lcXVhbHMoYXJnc1sxXSkgKSB7CisgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDIgfHwgYXJnc1swXT09bnVsbCB8fCBhcmdzWzFdID09bnVsbCB8fCAoIiR7Z2xhc3NmaXNoX2hvbWV9IikuZXF1YWxzKGFyZ3NbMF0pIHx8ICgiJHtvcHRpb25zfSIpLmVxdWFscyhhcmdzWzFdKQorICAgICAgICAgICAgICAgIHx8ICgiIikuZXF1YWxzKGFyZ3NbMF0pIHx8ICgiIikuZXF1YWxzKGFyZ3NbMV0pICkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNaXNzaW5nIElucHV0cy4uLlxuIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzYWdlOiBqYXZhIEZpbHRlciA8Z2xhc3NmaXNoIGhvbWU+IDxtaXNzaW5nSWQvbWFzdGVySWQ+XG4iKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVscDogbWlzc2luZ0lkIGZvciBnZW5lcmF0ZSBsaXN0IG9mIElkcyB3aGljaCBoYXMgZGlhZ25vc3RpYyBpbmZvIG1pc3NpbmcuXG4iKTsKQEAgLTIxMSwxMSArMjExLDExIEBACiAgICAgICAgICAgICAgICAgbWFzdGVySWRzID0gdHJ1ZTsKICAgICAgICAgICAgIH0KIAotCQkJaWYgKCFtYXN0ZXJJZHMgJiYgIW1pc3NpbmdJZHMpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIk1pc3NpbmcgSW5wdXRzLi4uPG1pc3NpbmdJZC9tYXN0ZXJJZD4gdmFsdWUgaXMgbWlzc2luZyBhcyBzZWNvbmQgYXJndW1lbnQuIik7Ci0JCQl9IGVsc2UKKyAgICAgICAgICAgIGlmICghbWFzdGVySWRzICYmICFtaXNzaW5nSWRzKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNaXNzaW5nIElucHV0cy4uLjxtaXNzaW5nSWQvbWFzdGVySWQ+IHZhbHVlIGlzIG1pc3NpbmcgYXMgc2Vjb25kIGFyZ3VtZW50LiIpOworICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBpZiAoIWlzR2ZIb21lKSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNaXNzaW5nIElucHV0cy4uLjxnbGFzc2Zpc2ggaG9tZT4gdmFsdWUgaXMgbm90IHByb3BlciBhcyBmaXJzdCBhcmd1bWVudC4iKTsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNaXNzaW5nIElucHV0cy4uLjxnbGFzc2Zpc2ggaG9tZT4gdmFsdWUgaXMgbm90IHByb3BlciBhcyBmaXJzdCBhcmd1bWVudC4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAKICAgICAgICAgICAgICAgICBGaWxlbmFtZUZpbHRlciBmbm0gPSBuZXcgRmlsZW5hbWVGaWx0ZXIoKSB7CkBAIC0yMzIsNyArMjMyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWx0ZXIoKS5yZWFkRmlsZVRvR2V0TWVzc2FnZUlkcyhteUZpbGUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWx0ZXIoKS53cml0ZUtleVRvRmlsZShteU1lc3NhZ2VJZHMsICJtYXN0ZXItbGlzdC1tZXNzYWdlLWlkcy50eHQiKTsKLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChtaXNzaW5nSWRzKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoRmlsZSBteUZpbGUgOiBteUNvbGxlY3Rpb24pIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9sb2dtb25pdG9yL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9sb2dtb25pdG9yL2J1aWxkLnhtbAppbmRleCBlM2Y0NTliLi5mZGFlZjE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvbG9nbW9uaXRvci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2xvZ21vbml0b3IvYnVpbGQueG1sCkBAIC0xOSwzOCArMTksMzggQEAKIAogPHByb2plY3QgbmFtZT0iVmVyaWZ5IE1lc3NhZ2VkSWRzIGluIEdsYXNzRmlzaCIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KICAgICA8IS0tIGluaXQuIEluaXRpYWxpemF0aW9uIGludm9sdmVzIGNyZWF0aW5nIHB1Ymxpc2hpbmcgZGlyZWN0b3JpZXMgYW5kCi0gICAgICAgICBPUyBzcGVjaWZpYyB0YXJnZXRzLiAtLT4gCisgICAgICAgICBPUyBzcGVjaWZpYyB0YXJnZXRzLiAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImluaXQiIGRlc2NyaXB0aW9uPSJpbml0aWFsaXphdGlvbiI+CiAgICAgICAgIDx0c3RhbXA+CiAgICAgICAgICAgICA8Zm9ybWF0IHByb3BlcnR5PSJzdGFydC50aW1lIiBwYXR0ZXJuPSJNTS9kZC95eXl5IGhoOm1tIGFhIi8+Ci0gICAgICAgIDwvdHN0YW1wPiAgICAKKyAgICAgICAgPC90c3RhbXA+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8cGF0aCBpZD0iY29tcGlsZS5jbGFzc3BhdGgiPgogICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIuIi8+Ci0gICAgPC9wYXRoPiAKKyAgICA8L3BhdGg+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIAorICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIKICAgICAgICAgZGVwZW5kcz0iaW5pdCIKICAgICAgICAgZGVzY3JpcHRpb249IkJ1aWxkcyBKYXZhIGZpbGVzIj4KLQkgICAgIDxqYXZhYyBzcmNkaXI9Ii4iICAgICAKLSAgICAgICAgICAgICAgZGVzdGRpcj0iLiIgICAKLQkgICAgICAgICAgZm9yaz0idHJ1ZSIgCi0gCQkgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+CisgICAgICAgICA8amF2YWMgc3JjZGlyPSIuIgorICAgICAgICAgICAgICBkZXN0ZGlyPSIuIgorICAgICAgICAgICAgICBmb3JrPSJ0cnVlIgorICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICAgICAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJjb21waWxlLmNsYXNzcGF0aCIvPgotICAgICAgICA8L2phdmFjPiAgICAKLSAgICA8L3RhcmdldD4gCisgICAgICAgIDwvamF2YWM+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InJ1biI+Ci0JIDxlY2hvIG1lc3NhZ2U9IlZlcmlmeWluZyBHbGFzc0Zpc2ggQ29kZSB1bmRlciAke2dsYXNzZmlzaF9ob21lfSBmb3IgJHtvcHRpb25zfS4iLz4KLQkgPGphdmEgY2xhc3NuYW1lPSJGaWx0ZXIiCisgICAgPHRhcmdldCBuYW1lPSJydW4iPgorICAgICA8ZWNobyBtZXNzYWdlPSJWZXJpZnlpbmcgR2xhc3NGaXNoIENvZGUgdW5kZXIgJHtnbGFzc2Zpc2hfaG9tZX0gZm9yICR7b3B0aW9uc30uIi8+CisgICAgIDxqYXZhIGNsYXNzbmFtZT0iRmlsdGVyIgogICAgICAgICAgICBmb3JrPSJ0cnVlIgogICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+Ci0JIAkgICA8YXJnIHZhbHVlPSIke2dsYXNzZmlzaF9ob21lfSIvPgotCQkgICA8YXJnIHZhbHVlPSIke29wdGlvbnN9Ii8+CQotICAgICA8L2phdmE+CQkgCi0JPC90YXJnZXQ+CSAgICAgICAKLSAgIAorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtnbGFzc2Zpc2hfaG9tZX0iLz4KKyAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtvcHRpb25zfSIvPgorICAgICA8L2phdmE+CisgICAgPC90YXJnZXQ+CisKICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjb21waWxlLHJ1biIvPgogCiAgICA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL2J1aWxkLnhtbAppbmRleCA0OWQwMDRmLi5iYzliOWNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi11bnNldHVwIi8+CiAgICAgICAgIDxhbnQgZGlyPSJmcmFtZXdvcmstY29udHJvbGxlciIgdGFyZ2V0PSJ1bnNldHVwIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiPgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7VGVzdFJlc3VsdEZpbGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvY29tbW9uL0J1bmRsZVV0aWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi9jb21tb24vQnVuZGxlVXRpbC5qYXZhCmluZGV4IDA2NDM5MzUuLmQ0Zjg2MjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi9jb21tb24vQnVuZGxlVXRpbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi9jb21tb24vQnVuZGxlVXRpbC5qYXZhCkBAIC00Niw4ICs0Niw4IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogICAgICAgICBCdW5kbGVVdGlsIGJ1bmRsZVV0aWwgPSBuZXcgQnVuZGxlVXRpbCgpOwogICAgICAgICBpZihhcmdzLmxlbmd0aCA9PSAyKSB7Ci0JICAgIHRlc3ROYW1lID0gYXJnc1swXTsKLSAgICAgICAgICAgIHJlcG9ydGVyID0gbmV3IFJlcG9ydGVyKGFyZ3NbMV0pOwkgICAgCisgICAgICAgIHRlc3ROYW1lID0gYXJnc1swXTsKKyAgICAgICAgICAgIHJlcG9ydGVyID0gbmV3IFJlcG9ydGVyKGFyZ3NbMV0pOwogICAgICAgICAgICAgLy91bmluc3RhbGwgdGhlIHByZXZpb3VzbHkgaW5zdGFsbGVkIGJ1bmRsZQogICAgICAgICAgICAgYnVuZGxlVXRpbC51bmluc3RhbGwoKTsKICAgICAgICAgfSBlbHNlIGlmKGFyZ3MubGVuZ3RoID09IDMpIHsKQEAgLTk1LDkgKzk1LDkgQEAKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKICAgICAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2cobGluZSk7Ci0JCWlmKGxpbmUuY29udGFpbnMoIkZBSUwiKSl7Ci0gCQkgICAgZmFpbCgpOwotICAJCX0KKyAgICAgICAgaWYobGluZS5jb250YWlucygiRkFJTCIpKXsKKyAgICAgICAgICAgICBmYWlsKCk7CisgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoY29kZSAhPSAyMDApIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi9jb21tb24vUmVwb3J0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi9jb21tb24vUmVwb3J0ZXIuamF2YQppbmRleCA1ZDc0Yjk1Li5hOTRjODIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvY29tbW9uL1JlcG9ydGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL2NvbW1vbi9SZXBvcnRlci5qYXZhCkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlKCJcbiIgKyBsaW5lU2VwYXRhcnRvciArICJcbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpbi5jbG9zZSgpOwotCQlvdXQuY2xvc2UoKTsKKyAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJFUE9SVEVSOiBFcnJvciBnZW5lcmF0aW5nIFRlc3RTdW1tYXJ5Iik7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvY29tbW9uL1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi9jb21tb24vVGVzdENsaWVudC5qYXZhCmluZGV4IGZlZmU1NTkuLjdiMWRjMjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi9jb21tb24vVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi9jb21tb24vVGVzdENsaWVudC5qYXZhCkBAIC0yOSwxMiArMjksMTIgQEAKICAgICBpbnQgZmFpbENvZGUgPSAzOyAvLyBGYWlsIGNvZGUgZm9yIHJ1bnRpbWUgZmFpbHVyZS4KIAogICAgIHByaXZhdGUgc3RhdGljIFJlcG9ydGVyIHJlcG9ydGVyOwotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0TmFtZTsgCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3ROYW1lOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgVGVzdENsaWVudCBjbGllbnQgPSBuZXcgVGVzdENsaWVudCgpOwotCXJlcG9ydGVyID0gbmV3IFJlcG9ydGVyKGFyZ3NbMl0pOyAvL2FyZ3NbMl0gaGFzIHRlc3RSZXN1bHQgZmlsZW5hbWUKLQl0ZXN0TmFtZSA9IGFyZ3NbMV07CisgICAgcmVwb3J0ZXIgPSBuZXcgUmVwb3J0ZXIoYXJnc1syXSk7IC8vYXJnc1syXSBoYXMgdGVzdFJlc3VsdCBmaWxlbmFtZQorICAgIHRlc3ROYW1lID0gYXJnc1sxXTsKICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKICAgICB9CiAKQEAgLTQ0LDggKzQ0LDggQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGZhaWwoKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5jb250YWlucygiZmFpbGVkIikpCi0JCWZhaWxlZCA9IHRydWU7CisgICAgICAgIGZhaWxlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpAQCAtNjksMTIgKzY5LDEyIEBACiAgICAgICAgIGlmKGNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICBsb2coIkluY29ycmVjdCByZXR1cm4gY29kZTogIiArIGNvZGUpOwogICAgICAgICAgICAgZmFpbCgpOwotICAgICAgICAgICAgcmV0dXJuOyAKLQl9CisgICAgICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICBpZihmYWlsZWQpIHsKICAgICAgICAgICAgIGZhaWwoKTsKLSAgICAgICAgICAgIHJldHVybjsgCi0JfQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAgICAgcGFzcygpOwogICAgIH0KIApAQCAtODQsMTEgKzg0LDExIEBACiAKICAgICBwcml2YXRlIHZvaWQgcGFzcygpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbVGVzdENsaWVudF06OiBUZXN0UGFzc2VkIik7Ci0JcmVwb3J0ZXIucHJpbnRTdGF0dXModGVzdE5hbWUsIHBhc3NDb2RlKTsKKyAgICByZXBvcnRlci5wcmludFN0YXR1cyh0ZXN0TmFtZSwgcGFzc0NvZGUpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBmYWlsKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltUZXN0Q2xpZW50XTo6IFRlc3RGYWlsZWQiKTsKLQlyZXBvcnRlci5wcmludFN0YXR1cyh0ZXN0TmFtZSwgZmFpbENvZGUpOworICAgIHJlcG9ydGVyLnByaW50U3RhdHVzKHRlc3ROYW1lLCBmYWlsQ29kZSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL2NvbmZpZy9idW5kbGVfY29tbW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi9jb25maWcvYnVuZGxlX2NvbW1vbi54bWwKaW5kZXggNGViMjlhZS4uZjM5NmZkNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL2NvbmZpZy9idW5kbGVfY29tbW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvY29uZmlnL2J1bmRsZV9jb21tb24ueG1sCkBAIC0zMiw3ICszMiw3IEBACiAgICA8YW50Y2FsbCB0YXJnZXQ9Imluc3RhbGwtYnVuZGxlIj4KICAgICAgIDxwYXJhbSBuYW1lPSJpbnN0YWxsQ29kZSIgdmFsdWU9IiR7d2ViYnVuZGxlLWluc3RhbGwuY29kZX0iIC8+CiAgICA8L2FudGNhbGw+Ci08L3RhcmdldD4gCis8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJpbnN0YWxsLWJ1bmRsZSI+CiAgICA8amF2YSBjbGFzc25hbWU9IkJ1bmRsZVV0aWwiPgpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgPGFyZyB2YWx1ZT0iJHtUZXN0UmVzdWx0RmlsZX0iLz4KICAgICAgIDxhcmcgdmFsdWU9IiR7aW5zdGFsbENvZGV9JHtpbnN0YWxsUGF0aH0iLz4KICAgIDwvamF2YT4KLTwvdGFyZ2V0PiAKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InVuaW5zdGFsbC1idW5kbGUiPgogICAgPGphdmEgY2xhc3NuYW1lPSJCdW5kbGVVdGlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi9jb25maWcvY29tbW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi9jb25maWcvY29tbW9uLnhtbAppbmRleCBiNjUzMGE3Li42ODg2MGFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvY29uZmlnL2NvbW1vbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL2NvbmZpZy9jb21tb24ueG1sCkBAIC01OSwyMiArNTksMjIgQEAKICAgPGFudGNhbGwgdGFyZ2V0PSJyZXBvcnQiLz4KIDwvdGFyZ2V0PgogCi08dGFyZ2V0IG5hbWU9InBhY2thZ2Utd2FyIj4gIAorPHRhcmdldCBuYW1lPSJwYWNrYWdlLXdhciI+CiAgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nICR7YXBwbmFtZX0ud2FyIGZpbGUiLz4KICAgPGNvcHkgdG9EaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYvY2xhc3NlcyIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmJhc2UuZGlyfSIvPgogICA8L2NvcHk+CiAgIDxqYXIgZGVzdGZpbGU9IiR7ZGVzdGZpbGV9IiBtYW5pZmVzdD0iJHttYW5pZmVzdC5tZn0iPgotCTxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCi0JICAgICBleGNsdWRlcz0iKiovbWFpbi8qKiIKLQkvPgorICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCisgICAgICAgICBleGNsdWRlcz0iKiovbWFpbi8qKiIKKyAgICAvPgogICA8L2phcj4KICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYvY2xhc3NlcyIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJkZXBsb3ktYXBwbGljYXRpb24iPgogICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBEZXBsb3lpbmcgQXBwbGljYXRpb24gOiAke2FwcC5wYXRofSIKLQlsZXZlbD0idmVyYm9zZSIvPgorICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxhbnRjYWxsIHRhcmdldD0iYXV0b2RlcGxveS1hcHAiLz4KIDwhLS0gIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1kZXBsb3ktYXBwIi8gLS0+CiA8L3RhcmdldD4KQEAgLTEwNyw3ICsxMDcsNyBAQAogCiA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LWFwcGxpY2F0aW9uIj4KICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogVW5kZXBsb3lpbmcgQXBwbGljYXRpb24gOiAke2FwcG5hbWV9IgotCWxldmVsPSJ2ZXJib3NlIi8+CisgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGFudGNhbGwgdGFyZ2V0PSJhdXRvdW5kZXBsb3ktYXBwIi8+CiA8IS0tICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tdW5kZXBsb3ktYXBwIi8gLS0+CiA8L3RhcmdldD4KQEAgLTExNSw3ICsxMTUsNyBAQAogPHRhcmdldCBuYW1lPSJhdXRvdW5kZXBsb3ktYXBwIj4KICAgPGRlbGV0ZSBmaWxlPSIke2RlcGxveS5kaXJ9LyR7YXBwbmFtZX0ud2FyIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgPHNsZWVwIHNlY29uZHM9IjciLz4KLTwvdGFyZ2V0PiAKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImFzYWRtaW4tdW5kZXBsb3ktYXBwIj4KICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke2FwcG5hbWV9IiBsZXZlbD0idmVyYm9zZSIvPgpAQCAtMTM3LDcgKzEzNyw3IEBACiAgIDxhbnRjYWxsIHRhcmdldD0icmVwb3J0Ii8+CiA8L3RhcmdldD4KIAotPHRhcmdldCBuYW1lPSJyZXBvcnQiIGlmPSJGYWlsU3RhdHVzIj4gCis8dGFyZ2V0IG5hbWU9InJlcG9ydCIgaWY9IkZhaWxTdGF0dXMiPgogICAgPGphdmEgY2xhc3NuYW1lPSJSZXBvcnRlciI+CiAgICAgICA8Y2xhc3NwYXRoPgogICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtURVNUX0hPTUVfV0VCfS9jb21tb24vY2xhc3NlcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL2ZyYW1ld29yay1jb250cm9sbGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi9mcmFtZXdvcmstY29udHJvbGxlci9idWlsZC54bWwKaW5kZXggNzRlZDNmMi4uZjU0MTkzZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL2ZyYW1ld29yay1jb250cm9sbGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvZnJhbWV3b3JrLWNvbnRyb2xsZXIvYnVpbGQueG1sCkBAIC02MSwxNCArNjEsMTQgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1hcHBsaWNhdGlvbiI+Ci0JICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7YXBwbmFtZX0iLz4KLQk8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1hcHBsaWNhdGlvbiI+CisgICAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7YXBwbmFtZX0iLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiPgotCTxhbnRjYWxsIHRhcmdldD0idGVzdCI+Ci0JICA8cGFyYW0gbmFtZT0idGVzdFVSTCIgdmFsdWU9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC90ZXN0UkVTVCIgLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InRlc3QiPgorICAgICAgPHBhcmFtIG5hbWU9InRlc3RVUkwiIHZhbHVlPSJodHRwOi8vbG9jYWxob3N0OjgwODAvdGVzdFJFU1QiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL2ZyYW1ld29yay1jb250cm9sbGVyL3NyYy9tYWluL2phdmEvdGVzdC9CdW5kbGVDb250cm9sbGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvZnJhbWV3b3JrLWNvbnRyb2xsZXIvc3JjL21haW4vamF2YS90ZXN0L0J1bmRsZUNvbnRyb2xsZXIuamF2YQppbmRleCA3MjIzMGYwLi5kZjAwOTFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvZnJhbWV3b3JrLWNvbnRyb2xsZXIvc3JjL21haW4vamF2YS90ZXN0L0J1bmRsZUNvbnRyb2xsZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvZnJhbWV3b3JrLWNvbnRyb2xsZXIvc3JjL21haW4vamF2YS90ZXN0L0J1bmRsZUNvbnRyb2xsZXIuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogCiAgICAgQENvbnRleHQgU2VydmxldENvbnRleHQgY3R4OwogICAgIEBDb250ZXh0IEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcDsKLSAgICAKKwogICAgIEBQT1NUCiAgICAgcHVibGljIHZvaWQgYnVuZGxlQ29udHJvbGxlcihARm9ybVBhcmFtKCJpZCIpIFN0cmluZyBidW5kbGVJZCwgQEZvcm1QYXJhbSgiYnN1Ym1pdCIpIFN0cmluZyByZXF1ZXN0VHlwZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbnRyb2xsZXIgOiIgKyByZXF1ZXN0VHlwZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvZnJhbWV3b3JrLWNvbnRyb2xsZXIvc3JjL21haW4vamF2YS90ZXN0L0J1bmRsZVZpZXdlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL2ZyYW1ld29yay1jb250cm9sbGVyL3NyYy9tYWluL2phdmEvdGVzdC9CdW5kbGVWaWV3ZXIuamF2YQppbmRleCA4MzkwYTA4Li5hZmJhNGQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvZnJhbWV3b3JrLWNvbnRyb2xsZXIvc3JjL21haW4vamF2YS90ZXN0L0J1bmRsZVZpZXdlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi9mcmFtZXdvcmstY29udHJvbGxlci9zcmMvbWFpbi9qYXZhL3Rlc3QvQnVuZGxlVmlld2VyLmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKIAogICAgIEBDb250ZXh0IFNlcnZsZXRDb250ZXh0IGN0eDsKICAgICBAQ29udGV4dCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3A7Ci0gICAgCisKICAgICBAR0VUCiAgICAgcHVibGljIHZvaWQgZ2V0QnVuZGxlcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IG51bGw7CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICI8dGQgZm9udCBjb2xvcj1cImJsYWNrXCIgc3R5bGU9XCJmb250LXdlaWdodDpib2xkXCI+QlVORExFSUQ8L3RkPiIgKwogICAgICAgICAgICAgICAgICAgICAiPHRkIGZvbnQgY29sb3I9XCJibGFja1wiIHN0eWxlPVwiZm9udC13ZWlnaHQ6Ym9sZFwiPlNUQVRFPC90ZD4iICsKICAgICAgICAgICAgICAgICAgICAgIjx0ZCBmb250IGNvbG9yPVwiYmxhY2tcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OmJvbGRcIj5CVU5ETEUgU1lNQk9MSUMgTkFNRTwvdGQ+PC90cj4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGZvcihpbnQgaT0wOyBpPGJ1bmRsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0ciBiZ2NvbG9yPVwiIisgYmdjb2xvcnNbaSUyXSArIlwiPiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL2h5YnJpZGFwcDEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL2h5YnJpZGFwcDEvYnVpbGQueG1sCmluZGV4IDY4YTFhY2EuLjNmNDMyY2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi9oeWJyaWRhcHAxL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvaHlicmlkYXBwMS9idWlsZC54bWwKQEAgLTU2LDE0ICs1NiwxNCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1hcHBsaWNhdGlvbiI+Ci0JICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7YXBwbmFtZX0iLz4KLQk8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1hcHBsaWNhdGlvbiI+CisgICAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7YXBwbmFtZX0iLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiPgotCTxhbnRjYWxsIHRhcmdldD0idGVzdCI+Ci0JICA8cGFyYW0gbmFtZT0idGVzdFVSTCIgdmFsdWU9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9oeWJyaWRhcHAxIiAvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idGVzdCI+CisgICAgICA8cGFyYW0gbmFtZT0idGVzdFVSTCIgdmFsdWU9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9oeWJyaWRhcHAxIiAvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi90ZXN0MS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvdGVzdDEvYnVpbGQueG1sCmluZGV4IDIzNjI5ZjUuLmI0OWUwNjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi90ZXN0MS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL3Rlc3QxL2J1aWxkLnhtbApAQCAtNjEsMTQgKzYxLDE0IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWFwcGxpY2F0aW9uIj4KLQkgIDxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHthcHBuYW1lfSIvPgotCTwvYW50Y2FsbD4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWFwcGxpY2F0aW9uIj4KKyAgICAgIDxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHthcHBuYW1lfSIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ0ZXN0Ij4KLQkgIDxwYXJhbSBuYW1lPSJ0ZXN0VVJMIiB2YWx1ZT0iaHR0cDovL2xvY2FsaG9zdDo4MDgwL3Rlc3QxIiAvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idGVzdCI+CisgICAgICA8cGFyYW0gbmFtZT0idGVzdFVSTCIgdmFsdWU9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC90ZXN0MSIgLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvdGVzdDIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL3Rlc3QyL2J1aWxkLnhtbAppbmRleCAwNjg5YmE5Li4yZmZlZGJkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvdGVzdDIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi90ZXN0Mi9idWlsZC54bWwKQEAgLTYxLDE0ICs2MSwxNCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1hcHBsaWNhdGlvbiI+Ci0JICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7YXBwbmFtZX0iLz4KLQk8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1hcHBsaWNhdGlvbiI+CisgICAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7YXBwbmFtZX0iLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiPgotCTxhbnRjYWxsIHRhcmdldD0idGVzdCI+Ci0JICA8cGFyYW0gbmFtZT0idGVzdFVSTCIgdmFsdWU9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC90ZXN0MiIgLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InRlc3QiPgorICAgICAgPHBhcmFtIG5hbWU9InRlc3RVUkwiIHZhbHVlPSJodHRwOi8vbG9jYWxob3N0OjgwODAvdGVzdDIiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL3Rlc3QyL3NyYy9XRUItSU5GL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvdGVzdDIvc3JjL1dFQi1JTkYvd2ViLnhtbAppbmRleCA1YjQ5ZDFiLi5lMGZmZDM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvdGVzdDIvc3JjL1dFQi1JTkYvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvdGVzdDIvc3JjL1dFQi1JTkYvd2ViLnhtbApAQCAtMTgsOCArMTgsOCBAQAogLS0+CiAKIDx3ZWItYXBwIHZlcnNpb249IjIuNSIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLSAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPHNlcnZsZXQ+CiAgICAgPHNlcnZsZXQtbmFtZT5Mb2dpblNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi90ZXN0Mi9zcmMvbWFpbi9qYXZhL2V4YW1wbGUvTG9naW5TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvdGVzdDIvc3JjL21haW4vamF2YS9leGFtcGxlL0xvZ2luU2VydmxldC5qYXZhCmluZGV4IDc4MjgyYjEuLjMxMzQ0YjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi90ZXN0Mi9zcmMvbWFpbi9qYXZhL2V4YW1wbGUvTG9naW5TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL3Rlc3QyL3NyYy9tYWluL2phdmEvZXhhbXBsZS9Mb2dpblNlcnZsZXQuamF2YQpAQCAtMjAsNyArMjAsNyBAQAogaW1wb3J0IGpha2FydGEuc2VydmxldC4qOwogCiBwdWJsaWMgY2xhc3MgTG9naW5TZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewotICBwdWJsaWMgdm9pZCBzZXJ2aWNlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKSAKKyAgcHVibGljIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7CiAgICAgU3lzdGVtLm91dC5wcmludGxuKHRoaXMpOwogICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvdGVzdDIvc3JjL21haW4vamF2YS9leGFtcGxlL1JlZ2lzdHJhdGlvblNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi90ZXN0Mi9zcmMvbWFpbi9qYXZhL2V4YW1wbGUvUmVnaXN0cmF0aW9uU2VydmxldC5qYXZhCmluZGV4IGRiYTMzOTQuLjA2ZmVkZWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi90ZXN0Mi9zcmMvbWFpbi9qYXZhL2V4YW1wbGUvUmVnaXN0cmF0aW9uU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi90ZXN0Mi9zcmMvbWFpbi9qYXZhL2V4YW1wbGUvUmVnaXN0cmF0aW9uU2VydmxldC5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7CiAKIHB1YmxpYyBjbGFzcyBSZWdpc3RyYXRpb25TZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewotICBwdWJsaWMgdm9pZCBzZXJ2aWNlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKSAKKyAgcHVibGljIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7CiAgICAgU3lzdGVtLm91dC5wcmludGxuKHRoaXMpOwogICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvdGVzdDQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL3Rlc3Q0L2J1aWxkLnhtbAppbmRleCBjOTQ1MzcwLi4wNzNlZTIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvdGVzdDQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi90ZXN0NC9idWlsZC54bWwKQEAgLTYxLDE0ICs2MSwxNCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1hcHBsaWNhdGlvbiI+Ci0JICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7YXBwbmFtZX0iLz4KLQk8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1hcHBsaWNhdGlvbiI+CisgICAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7YXBwbmFtZX0iLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiPgotCTxhbnRjYWxsIHRhcmdldD0idGVzdCI+Ci0JICA8cGFyYW0gbmFtZT0idGVzdFVSTCIgdmFsdWU9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC90ZXN0NCIgLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InRlc3QiPgorICAgICAgPHBhcmFtIG5hbWU9InRlc3RVUkwiIHZhbHVlPSJodHRwOi8vbG9jYWxob3N0OjgwODAvdGVzdDQiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL3Rlc3Q0L3NyYy9XRUItSU5GL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL3Rlc3Q0L3NyYy9XRUItSU5GL3N1bi13ZWIueG1sCmluZGV4IDRlM2QxYzcuLjkwNDRiMTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi90ZXN0NC9zcmMvV0VCLUlORi9zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvdGVzdDQvc3JjL1dFQi1JTkYvc3VuLXdlYi54bWwKQEAgLTE5LDUgKzE5LDUgQEAKIAogPCFET0NUWVBFIHN1bi13ZWItYXBwIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEFwcGxpY2F0aW9uIFNlcnZlciA4LjEgU2VydmxldCAyLjQvL0VOIiAiaHR0cDovL3d3dy5zdW4uY29tL3NvZnR3YXJlL2FwcHNlcnZlci9kdGRzL3N1bi13ZWItYXBwXzJfNC0xLmR0ZCI+CiA8c3VuLXdlYi1hcHA+Ci0gIDxjb250ZXh0LXJvb3Q+dGVzdDQ8L2NvbnRleHQtcm9vdD4gCisgIDxjb250ZXh0LXJvb3Q+dGVzdDQ8L2NvbnRleHQtcm9vdD4KIDwvc3VuLXdlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvdGVzdDQvc3JjL1dFQi1JTkYvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi90ZXN0NC9zcmMvV0VCLUlORi93ZWIueG1sCmluZGV4IDRiZjBiZDguLjk4ZjAwMzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi90ZXN0NC9zcmMvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi90ZXN0NC9zcmMvV0VCLUlORi93ZWIueG1sCkBAIC0xOCw2ICsxOCw2IEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLSAgPGRpc3BsYXktbmFtZT5oZWxsbzwvZGlzcGxheS1uYW1lPiAgCisgIDxkaXNwbGF5LW5hbWU+aGVsbG88L2Rpc3BsYXktbmFtZT4KICAgPGRpc3RyaWJ1dGFibGUvPgogPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL3Rlc3Q2L1dFQi1JTkYvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi90ZXN0Ni9XRUItSU5GL3dlYi54bWwKaW5kZXggNGFjYmJkNS4uZDFkNmY1YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL3Rlc3Q2L1dFQi1JTkYvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvdGVzdDYvV0VCLUlORi93ZWIueG1sCkBAIC0xOCw4ICsxOCw4IEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMi41IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0gICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8c2VydmxldD4KICAgICA8c2VydmxldC1uYW1lPkxvZ2luU2VydmxldDwvc2VydmxldC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL3Rlc3Q2L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi90ZXN0Ni9idWlsZC54bWwKaW5kZXggOTU3MTIxNy4uMzU5ZTFlMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL3Rlc3Q2L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvdGVzdDYvYnVpbGQueG1sCkBAIC00NSwxMiArNDUsMTIgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSI+Ci0gIAk8bWtkaXIgZGlyPSIke2Jhc2VkaXJ9L1dFQi1JTkYvY2xhc3NlcyIvPgotICAJPGphdmFjIHNyY2Rpcj0iJHtiYXNlZGlyfS9zcmMiCi0gICAgCWRlc3RkaXI9IiR7YmFzZWRpcn0vV0VCLUlORi9jbGFzc2VzIgorICAgICAgPG1rZGlyIGRpcj0iJHtiYXNlZGlyfS9XRUItSU5GL2NsYXNzZXMiLz4KKyAgICAgIDxqYXZhYyBzcmNkaXI9IiR7YmFzZWRpcn0vc3JjIgorICAgICAgICBkZXN0ZGlyPSIke2Jhc2VkaXJ9L1dFQi1JTkYvY2xhc3NlcyIKICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMvamFrYXJ0YS5zZXJ2bGV0LmphciIKLSAgICAJZGVidWc9Im9uIgotCWZhaWxvbmVycm9yPSJ0cnVlIi8+CisgICAgICAgIGRlYnVnPSJvbiIKKyAgICBmYWlsb25lcnJvcj0idHJ1ZSIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImNvbXBpbGUiPgpAQCAtNjAsMTIgKzYwLDEyIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuaW5zdGFsbC1idW5kbGUiIC8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmluc3RhbGwtYnVuZGxlIiAvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0Ij4KLQk8YW50Y2FsbCB0YXJnZXQ9InRlc3QiPgotCSAgPHBhcmFtIG5hbWU9InRlc3RVUkwiIHZhbHVlPSJodHRwOi8vbG9jYWxob3N0OjgwODAvdGVzdDYvbG9naW4uaHRtbCIgLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InRlc3QiPgorICAgICAgPHBhcmFtIG5hbWU9InRlc3RVUkwiIHZhbHVlPSJodHRwOi8vbG9jYWxob3N0OjgwODAvdGVzdDYvbG9naW4uaHRtbCIgLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvdGVzdDYvc3JjL21haW4vamF2YS9leGFtcGxlL0xvZ2luU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL3Rlc3Q2L3NyYy9tYWluL2phdmEvZXhhbXBsZS9Mb2dpblNlcnZsZXQuamF2YQppbmRleCA3ODI4MmIxLi4zMTM0NGIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvdGVzdDYvc3JjL21haW4vamF2YS9leGFtcGxlL0xvZ2luU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi90ZXN0Ni9zcmMvbWFpbi9qYXZhL2V4YW1wbGUvTG9naW5TZXJ2bGV0LmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsKIAogcHVibGljIGNsYXNzIExvZ2luU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgcHVibGljIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykgCisgIHB1YmxpYyB2b2lkIHNlcnZpY2UoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewogICAgIFN5c3RlbS5vdXQucHJpbnRsbih0aGlzKTsKICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL3Rlc3Q2L3NyYy9tYWluL2phdmEvZXhhbXBsZS9SZWdpc3RyYXRpb25TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvdGVzdDYvc3JjL21haW4vamF2YS9leGFtcGxlL1JlZ2lzdHJhdGlvblNlcnZsZXQuamF2YQppbmRleCBkYmEzMzk0Li4wNmZlZGVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvdGVzdDYvc3JjL21haW4vamF2YS9leGFtcGxlL1JlZ2lzdHJhdGlvblNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvdGVzdDYvc3JjL21haW4vamF2YS9leGFtcGxlL1JlZ2lzdHJhdGlvblNlcnZsZXQuamF2YQpAQCAtMjAsNyArMjAsNyBAQAogaW1wb3J0IGpha2FydGEuc2VydmxldC4qOwogCiBwdWJsaWMgY2xhc3MgUmVnaXN0cmF0aW9uU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgcHVibGljIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykgCisgIHB1YmxpYyB2b2lkIHNlcnZpY2UoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewogICAgIFN5c3RlbS5vdXQucHJpbnRsbih0aGlzKTsKICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL3Rlc3Q3L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9vc2dpLWphdmFlZS9vc2dpLXdlYi90ZXN0Ny9idWlsZC54bWwKaW5kZXggZTk3ZDQzNy4uMjY2ZTE4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL3Rlc3Q3L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvdGVzdDcvYnVpbGQueG1sCkBAIC02MywxMiArNjMsMTIgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgotCTxhbnRjYWxsIHRhcmdldD0idW5pbnN0YWxsLWJ1bmRsZSIgLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuaW5zdGFsbC1idW5kbGUiIC8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiPgotCTxhbnRjYWxsIHRhcmdldD0idGVzdCI+Ci0JICA8cGFyYW0gbmFtZT0idGVzdFVSTCIgdmFsdWU9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC90ZXN0NyIgLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InRlc3QiPgorICAgICAgPHBhcmFtIG5hbWU9InRlc3RVUkwiIHZhbHVlPSJodHRwOi8vbG9jYWxob3N0OjgwODAvdGVzdDciIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL29zZ2ktamF2YWVlL29zZ2ktd2ViL3Rlc3Q3L3NyYy9XRUItSU5GL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvdGVzdDcvc3JjL1dFQi1JTkYvd2ViLnhtbAppbmRleCA1ZDVlMmQ5Li41ZjE5MDczIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvdGVzdDcvc3JjL1dFQi1JTkYvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvb3NnaS1qYXZhZWUvb3NnaS13ZWIvdGVzdDcvc3JjL1dFQi1JTkYvd2ViLnhtbApAQCAtMTgsOCArMTgsOCBAQAogLS0+CiAKIDx3ZWItYXBwIHZlcnNpb249IjIuNSIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLSAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPHdlbGNvbWUtZmlsZS1saXN0PgogICAgICA8d2VsY29tZS1maWxlPmluZGV4Lmh0bWw8L3dlbGNvbWUtZmlsZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2FwcHNjb3BlZC1kYi13aXRoLXJlc291cmNlcy14bWwvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2FwcHNjb3BlZC1kYi13aXRoLXJlc291cmNlcy14bWwvcG9tLnhtbAppbmRleCBiMzA0OTViLi5jZTE0Mjk2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9hcHBzY29wZWQtZGItd2l0aC1yZXNvdXJjZXMteG1sL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYXBwc2NvcGVkLWRiLXdpdGgtcmVzb3VyY2VzLXhtbC9wb20ueG1sCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgogICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNraXA+ZmFsc2U8L3NraXA+Ci0JCQkgICAgPGVuYWJsZUFzc2VydGlvbnM+ZmFsc2U8L2VuYWJsZUFzc2VydGlvbnM+CisgICAgICAgICAgICAgICAgPGVuYWJsZUFzc2VydGlvbnM+ZmFsc2U8L2VuYWJsZUFzc2VydGlvbnM+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgogICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2FwcHNjb3BlZC1kYi13aXRoLXJlc291cmNlcy14bWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9hcHBzY29wZWQtZGItd2l0aC1yZXNvdXJjZXMteG1sL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCmluZGV4IGZjYWE0MjcuLjlhMzYwODIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2FwcHNjb3BlZC1kYi13aXRoLXJlc291cmNlcy14bWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYXBwc2NvcGVkLWRiLXdpdGgtcmVzb3VyY2VzLXhtbC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbApAQCAtMTcsNyArMTcsNyBAQAogCiAtLT4KIAotPCFET0NUWVBFIHN1bi13ZWItYXBwIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEFwcGxpY2F0aW9uIFNlcnZlciA5LjAgU2VydmxldCAyLjUvL0VOIiAKKzwhRE9DVFlQRSBzdW4td2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOS4wIFNlcnZsZXQgMi41Ly9FTiIKICAgImh0dHA6Ly93d3cuc3VuLmNvbS9zb2Z0d2FyZS9hcHBzZXJ2ZXIvZHRkcy9zdW4td2ViLWFwcF8yXzUtMC5kdGQiPgogPHN1bi13ZWItYXBwIGVycm9yLXVybD0iIj4KIDwvc3VuLXdlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9hcHBzY29wZWQtZGItd2l0aC1yZXNvdXJjZXMteG1sL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9hcHBzY29wZWQtZGItd2l0aC1yZXNvdXJjZXMteG1sL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKaW5kZXggYjI2ZjE3YS4uNzA0ODhkYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYXBwc2NvcGVkLWRiLXdpdGgtcmVzb3VyY2VzLXhtbC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2FwcHNjb3BlZC1kYi13aXRoLXJlc291cmNlcy14bWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApAQCAtMTcsOSArMTcsOSBAQAogCiAtLT4KIAotPHdlYi1hcHAgdmVyc2lvbj0iMi41IiAKLSAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgCi0gIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorPHdlYi1hcHAgdmVyc2lvbj0iMi41IgorICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5Db2ZmZWVTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1ib29rc3RvcmUtZG5zL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1ib29rc3RvcmUtZG5zL3BvbS54bWwKaW5kZXggMTY1ZjI5Yi4uMDM3Y2NmYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtYm9va3N0b3JlLWRucy9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWJvb2tzdG9yZS1kbnMvcG9tLnhtbApAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxza2lwPmZhbHNlPC9za2lwPgotCQkJICAgPGVuYWJsZUFzc2VydGlvbnM+ZmFsc2U8L2VuYWJsZUFzc2VydGlvbnM+CisgICAgICAgICAgICAgICA8ZW5hYmxlQXNzZXJ0aW9ucz5mYWxzZTwvZW5hYmxlQXNzZXJ0aW9ucz4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CiAgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICAgICAgPHZlcnNpb24+NC4xMy4yPC92ZXJzaW9uPgogICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+Ci0JPGRlcGVuZGVuY3k+CisgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLnRlc3RzLnBhYXMuYmFzZXRlc3Q8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5iYXNlLXRlc3Q8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1ib29rc3RvcmUtZG5zL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtYm9va3N0b3JlLWRucy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbAppbmRleCBlOWVlZDQ0Li5lNDVlMTQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1ib29rc3RvcmUtZG5zL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWJvb2tzdG9yZS1kbnMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIAogLS0+CiAKLTwhRE9DVFlQRSBzdW4td2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOS4wIFNlcnZsZXQgMi41Ly9FTiIgCis8IURPQ1RZUEUgc3VuLXdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDkuMCBTZXJ2bGV0IDIuNS8vRU4iCiAgICJodHRwOi8vd3d3LnN1bi5jb20vc29mdHdhcmUvYXBwc2VydmVyL2R0ZHMvc3VuLXdlYi1hcHBfMl81LTAuZHRkIj4KIDxzdW4td2ViLWFwcCBlcnJvci11cmw9IiI+CiA8L3N1bi13ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtYm9va3N0b3JlLWRucy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtYm9va3N0b3JlLWRucy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmluZGV4IGY1Y2UzNWMuLmYwNmFiYjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWJvb2tzdG9yZS1kbnMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1ib29rc3RvcmUtZG5zL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTE3LDkgKzE3LDkgQEAKIAogLS0+CiAKLTx3ZWItYXBwIHZlcnNpb249IjIuNSIgCi0gIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIAotICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKzx3ZWItYXBwIHZlcnNpb249IjIuNSIKKyAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+QmFzaWNQYWFTU2VydmxldDwvc2VydmxldC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtYm9va3N0b3JlLWRucy9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9kbnMvQmFzaWNib29rc3RvcmVEbnNQYWFzVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtYm9va3N0b3JlLWRucy9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9kbnMvQmFzaWNib29rc3RvcmVEbnNQYWFzVGVzdC5qYXZhCmluZGV4IGNlOTZlYTguLjVjZTM2OTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWJvb2tzdG9yZS1kbnMvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvZG5zL0Jhc2ljYm9va3N0b3JlRG5zUGFhc1Rlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1ib29rc3RvcmUtZG5zL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2Rucy9CYXNpY2Jvb2tzdG9yZURuc1BhYXNUZXN0LmphdmEKQEAgLTQ2LDE2NSArNDYsMTY1IEBACiAKIHB1YmxpYyBjbGFzcyBCYXNpY2Jvb2tzdG9yZURuc1BhYXNUZXN0IHsKIAotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24gewogCi0JCS8vIEJvb3RzdHJhcCBHbGFzc0Zpc2ggREFTIGluIGVtYmVkZGVkIG1vZGUuCi0JCUdsYXNzRmlzaCBnbGFzc2Zpc2ggPSBib290c3RyYXAoKTsKKyAgICAgICAgLy8gQm9vdHN0cmFwIEdsYXNzRmlzaCBEQVMgaW4gZW1iZWRkZWQgbW9kZS4KKyAgICAgICAgR2xhc3NGaXNoIGdsYXNzZmlzaCA9IGJvb3RzdHJhcCgpOwogCi0JCS8vIERlcGxveSB0aGUgQmFzaWMgYW5kIGJvb2tzdG9yZSAgYXBwIGFuZCB2ZXJpZnkgaXQuCi0JCXJ1blRlc3RzKGdsYXNzZmlzaCk7CisgICAgICAgIC8vIERlcGxveSB0aGUgQmFzaWMgYW5kIGJvb2tzdG9yZSAgYXBwIGFuZCB2ZXJpZnkgaXQuCisgICAgICAgIHJ1blRlc3RzKGdsYXNzZmlzaCk7CiAKLQkJCiAKLQkJLy8gNS4gU3RvcCB0aGUgR2xhc3NGaXNoIERBUwotCQlnbGFzc2Zpc2guZGlzcG9zZSgpOwotCX0KIAotCXByaXZhdGUgdm9pZCBnZXQoU3RyaW5nIHVybFN0ciwgU3RyaW5nIHJlc3VsdCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVVSTCB1cmwgPSBuZXcgVVJMKHVybFN0cik7Ci0JCVVSTENvbm5lY3Rpb24geWMgPSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKLQkJQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKAotCQkJCXljLmdldElucHV0U3RyZWFtKCkpKTsKLQkJU3RyaW5nIGxpbmUgPSBudWxsOwotCQlib29sZWFuIGZvdW5kID0gZmFsc2U7Ci0JCXdoaWxlICgobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKLQkJCWlmIChsaW5lLmluZGV4T2YocmVzdWx0KSAhPSAtMSkgewotCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQlBc3NlcnQuYXNzZXJ0VHJ1ZShmb3VuZCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiXG4qKioqKiBTVUNDRVNTICoqKiogRm91bmQgWyIgKyByZXN1bHQKLQkJCQkrICJdIGluIHRoZSByZXNwb25zZS4qKioqKlxuIik7Ci0JfQorICAgICAgICAvLyA1LiBTdG9wIHRoZSBHbGFzc0Zpc2ggREFTCisgICAgICAgIGdsYXNzZmlzaC5kaXNwb3NlKCk7CisgICAgfQogCi0JcHJpdmF0ZSB2b2lkIHJ1blRlc3RzKEdsYXNzRmlzaCBnbGFzc2Zpc2gpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyAyLiBEZXBsb3kgdGhlIFBhYVMgYXBwbGljYXRpb24uCi0JCUZpbGUgYmFzaWNBcmNoaXZlID0gbmV3IEZpbGUoU3lzdGVtLmdldFByb3BlcnR5KCJiYXNlZGlyIikKLQkJCQkrICIvYmFzaWNfcGFhc19zYW1wbGUud2FyIik7IC8vIFRPRE8gOjogdXNlIG12biBhcGlzIHRvCi0JCQotCQlGaWxlIGJvb2tBcmNoaXZlID0gbmV3IEZpbGUoU3lzdGVtLmdldFByb3BlcnR5KCJiYXNlZGlyIikKLQkJCQkrICIvYm9va3N0b3JlLndhciIpOwotCQkKLQkJQXNzZXJ0LmFzc2VydFRydWUoYmFzaWNBcmNoaXZlLmV4aXN0cygpKTsKLQkJQXNzZXJ0LmFzc2VydFRydWUoYm9va0FyY2hpdmUuZXhpc3RzKCkpOwotCQlEZXBsb3llciBkZXBsb3llciA9IG51bGw7Ci0JCVN0cmluZyBmaXJzdGFwcE5hbWUgPSBudWxsOwotCQlTdHJpbmcgc2Vjb25kYXBwTmFtZSA9IG51bGw7Ci0JCUJhc2VUZXN0IGZpcnN0QmFzZVRlc3QgPSBuZXcgQmFzZVRlc3QoZ2xhc3NmaXNoKTsKLQkJQmFzZVRlc3Qgc2Vjb25kQmFzZVRlc3QgPSBuZXcgQmFzZVRlc3QoZ2xhc3NmaXNoKTsKLQkJdHJ5IHsKLQkJICAgIAlDcmVhdGVETlNFeHRlcm5hbFNlcnZpY2UoKTsKLQkJICAgIAlDcmVhdGVMYlNoYXJlZFNlcnZpY2UoZ2xhc3NmaXNoKTsKLQkJCWZpcnN0YXBwTmFtZSA9IGZpcnN0QmFzZVRlc3QuZGVwbG95KGJhc2ljQXJjaGl2ZSwiYmFzaWNfcGFhc19zYW1wbGUiLG51bGwpOwotCQkJCisgICAgcHJpdmF0ZSB2b2lkIGdldChTdHJpbmcgdXJsU3RyLCBTdHJpbmcgcmVzdWx0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwodXJsU3RyKTsKKyAgICAgICAgVVJMQ29ubmVjdGlvbiB5YyA9IHVybC5vcGVuQ29ubmVjdGlvbigpOworICAgICAgICBCdWZmZXJlZFJlYWRlciBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoCisgICAgICAgICAgICAgICAgeWMuZ2V0SW5wdXRTdHJlYW0oKSkpOworICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CisgICAgICAgIGJvb2xlYW4gZm91bmQgPSBmYWxzZTsKKyAgICAgICAgd2hpbGUgKChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOworICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZihyZXN1bHQpICE9IC0xKSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGZvdW5kKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbioqKioqIFNVQ0NFU1MgKioqKiBGb3VuZCBbIiArIHJlc3VsdAorICAgICAgICAgICAgICAgICsgIl0gaW4gdGhlIHJlc3BvbnNlLioqKioqXG4iKTsKKyAgICB9CiAKLQkJCVN5c3RlbS5lcnIucHJpbnRsbigiRGVwbG95ZWQgWyIgKyBmaXJzdGFwcE5hbWUgKyAiXSIpOwotCQkJQXNzZXJ0LmFzc2VydE5vdE51bGwoZmlyc3RhcHBOYW1lKTsKKyAgICBwcml2YXRlIHZvaWQgcnVuVGVzdHMoR2xhc3NGaXNoIGdsYXNzZmlzaCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIC8vIDIuIERlcGxveSB0aGUgUGFhUyBhcHBsaWNhdGlvbi4KKyAgICAgICAgRmlsZSBiYXNpY0FyY2hpdmUgPSBuZXcgRmlsZShTeXN0ZW0uZ2V0UHJvcGVydHkoImJhc2VkaXIiKQorICAgICAgICAgICAgICAgICsgIi9iYXNpY19wYWFzX3NhbXBsZS53YXIiKTsgLy8gVE9ETyA6OiB1c2UgbXZuIGFwaXMgdG8KIAotCQkJQ29tbWFuZFJ1bm5lciBjb21tYW5kUnVubmVyID0gZ2xhc3NmaXNoLmdldENvbW1hbmRSdW5uZXIoKTsKLQkJCUNvbW1hbmRSZXN1bHQgcmVzdWx0ID0gY29tbWFuZFJ1bm5lci5ydW4oImxpc3Qtc2VydmljZXMiKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5saXN0LXNlcnZpY2VzIGNvbW1hbmQgb3V0cHV0IFsgIgotCQkJCQkrIHJlc3VsdC5nZXRPdXRwdXQoKSArICJdIik7CisgICAgICAgIEZpbGUgYm9va0FyY2hpdmUgPSBuZXcgRmlsZShTeXN0ZW0uZ2V0UHJvcGVydHkoImJhc2VkaXIiKQorICAgICAgICAgICAgICAgICsgIi9ib29rc3RvcmUud2FyIik7CiAKLQkJCS8vIDMuIEFjY2VzcyB0aGUgYXBwIHRvIG1ha2Ugc3VyZSBQYWFTIGFwcCBpcyBjb3JyZWN0bHkgcHJvdmlzaW9uZWQuCi0JCQlmaXJzdGFwcE5hbWUgPSBmaXJzdGFwcE5hbWUucmVwbGFjZUFsbCgiXyIsIi0iKTsKLQkJCVN0cmluZyBIVFRQX1BPUlQgPSAoU3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKSAhPSBudWxsKSA/IFN5c3RlbQotCQkgICAgICAgICAgICAgICAgICAgIC5nZXRQcm9wZXJ0eSgiaHR0cC5wb3J0IikgOiAiMjgwODAiOwotCQkJCi0JCQlnZXQoImh0dHA6Ly8iICsgZmlyc3RhcHBOYW1lICsiLmh1ZHNvbi5jb206IiArIEhUVFBfUE9SVAotCQkJCQkrICIvQmFzaWNQYWFTU2VydmxldCIsCi0JCQkJCSJSZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGUgcmVxdWVzdDoiKTsKLQkJCQotCQkJCi0JCQlzZWNvbmRhcHBOYW1lID0gc2Vjb25kQmFzZVRlc3QuZGVwbG95KGJvb2tBcmNoaXZlLCJib29rc3RvcmUiLG51bGwpOwotCQkJU3lzdGVtLmVyci5wcmludGxuKCJEZXBsb3llZCBbIiArIHNlY29uZGFwcE5hbWUgKyAiXSIpOwotCQkJQXNzZXJ0LmFzc2VydE5vdE51bGwoc2Vjb25kYXBwTmFtZSk7Ci0JCQlzZWNvbmRhcHBOYW1lID0gc2Vjb25kYXBwTmFtZS5yZXBsYWNlQWxsKCJfIiwiLSIpOwotCQkJZ2V0KCJodHRwOi8vIiArIHNlY29uZGFwcE5hbWUgKyIuaHVkc29uLmNvbToiICsgSFRUUF9QT1JUCi0JCSAgICAgICAgICAgICAgICAgICAgKyAiL0Jvb2tTdG9yZVNlcnZsZXQiLAotCQkgICAgICAgICAgICAgICAgICAgICJQbGVhc2Ugd2FpdCB3aGlsZSBhY2Nlc3NpbmcgdGhlIGJvb2tzdG9yZSBkYXRhYmFzZS4uLi4uIik7CisgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGJhc2ljQXJjaGl2ZS5leGlzdHMoKSk7CisgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGJvb2tBcmNoaXZlLmV4aXN0cygpKTsKKyAgICAgICAgRGVwbG95ZXIgZGVwbG95ZXIgPSBudWxsOworICAgICAgICBTdHJpbmcgZmlyc3RhcHBOYW1lID0gbnVsbDsKKyAgICAgICAgU3RyaW5nIHNlY29uZGFwcE5hbWUgPSBudWxsOworICAgICAgICBCYXNlVGVzdCBmaXJzdEJhc2VUZXN0ID0gbmV3IEJhc2VUZXN0KGdsYXNzZmlzaCk7CisgICAgICAgIEJhc2VUZXN0IHNlY29uZEJhc2VUZXN0ID0gbmV3IEJhc2VUZXN0KGdsYXNzZmlzaCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgQ3JlYXRlRE5TRXh0ZXJuYWxTZXJ2aWNlKCk7CisgICAgICAgICAgICAgICAgQ3JlYXRlTGJTaGFyZWRTZXJ2aWNlKGdsYXNzZmlzaCk7CisgICAgICAgICAgICBmaXJzdGFwcE5hbWUgPSBmaXJzdEJhc2VUZXN0LmRlcGxveShiYXNpY0FyY2hpdmUsImJhc2ljX3BhYXNfc2FtcGxlIixudWxsKTsKIAotCQkgICAgICAgICAgICBnZXQoImh0dHA6Ly8iCi0JCSAgICAgICAgICAgICAgICAgICAgKyBzZWNvbmRhcHBOYW1lICsiLmh1ZHNvbi5jb206IgotCQkgICAgICAgICAgICAgICAgICAgICsgSFRUUF9QT1JUCi0JCSAgICAgICAgICAgICAgICAgICAgKyAiL0Jvb2tTdG9yZVNlcnZsZXQ/dGl0bGU9QWR2YW5jZWQrZ3VpZGUrZm9yK2RldmVsb3BpbmcrUGFhUytjb21wb25lbnRzJmF1dGhvcnM9U2hhbGluaStNJnByaWNlPTEwMCUyNCIsCi0JCSAgICAgICAgICAgICAgICAgICAgIkhlcmUgYXJlIHRoZSBsaXN0IG9mIGJvb2tzIGF2YWlsYWJsZSBpbiBvdXIgc3RvcmU6Iik7CiAKLQkJICAgICAgICAgICAgZ2V0KCJodHRwOi8vIiArIHNlY29uZGFwcE5hbWUrIi5odWRzb24uY29tOiIgKyBIVFRQX1BPUlQKLQkJICAgICAgICAgICAgICAgICAgICArICIvQm9va1N0b3JlU2VydmxldCIsCi0JCSAgICAgICAgICAgICAgICAgICAgIkFkdmFuY2VkIGd1aWRlIGZvciBkZXZlbG9waW5nIFBhYVMgY29tcG9uZW50cyIpOwotCQkgICAgICAgICAgICBnZXQoImh0dHA6Ly8iICsgZmlyc3RhcHBOYW1lICsiLmh1ZHNvbi5jb206IiArIEhUVFBfUE9SVAotCQkJCQkrICIvQmFzaWNQYWFTU2VydmxldCIsCi0JCQkJCSJSZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGUgcmVxdWVzdDoiKTsgCi0JCSAgICAgICAgICAgIGlmIChzZWNvbmRhcHBOYW1lICE9IG51bGwpIHsKLQkJCQlzZWNvbmRCYXNlVGVzdC51bmRlcGxveSgpOwotCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiVW5kZXBsb3llZCBbIiArIHNlY29uZGFwcE5hbWUgKyAiXSIpOwotCQkgICAgICAgICAgICB9CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkRlcGxveWVkIFsiICsgZmlyc3RhcHBOYW1lICsgIl0iKTsKKyAgICAgICAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKGZpcnN0YXBwTmFtZSk7CiAKLQkJICAgICAgICAgICAgZ2V0KCJodHRwOi8vIiArIGZpcnN0YXBwTmFtZSArIi5odWRzb24uY29tOiIgKyBIVFRQX1BPUlQKLQkJCQkJKyAiL0Jhc2ljUGFhU1NlcnZsZXQiLAotCQkJCQkiUmVxdWVzdCBoZWFkZXJzIGZyb20gdGhlIHJlcXVlc3Q6Iik7IAorICAgICAgICAgICAgQ29tbWFuZFJ1bm5lciBjb21tYW5kUnVubmVyID0gZ2xhc3NmaXNoLmdldENvbW1hbmRSdW5uZXIoKTsKKyAgICAgICAgICAgIENvbW1hbmRSZXN1bHQgcmVzdWx0ID0gY29tbWFuZFJ1bm5lci5ydW4oImxpc3Qtc2VydmljZXMiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5saXN0LXNlcnZpY2VzIGNvbW1hbmQgb3V0cHV0IFsgIgorICAgICAgICAgICAgICAgICAgICArIHJlc3VsdC5nZXRPdXRwdXQoKSArICJdIik7CiAKLQkJCS8vIDQuIFVuZGVwbG95IHRoZSBQYWFTIGFwcGxpY2F0aW9uIC4gVE9ETyA6OiB1c2UgY2xvdWQtdW5kZXBsb3k/PwotCQl9IGZpbmFsbHkgewotCQkJaWYgKGZpcnN0YXBwTmFtZSAhPSBudWxsKSB7Ci0JCQkJZmlyc3RhcHBOYW1lID0gZmlyc3RhcHBOYW1lLnJlcGxhY2VBbGwoIi0iLCJfIik7CisgICAgICAgICAgICAvLyAzLiBBY2Nlc3MgdGhlIGFwcCB0byBtYWtlIHN1cmUgUGFhUyBhcHAgaXMgY29ycmVjdGx5IHByb3Zpc2lvbmVkLgorICAgICAgICAgICAgZmlyc3RhcHBOYW1lID0gZmlyc3RhcHBOYW1lLnJlcGxhY2VBbGwoIl8iLCItIik7CisgICAgICAgICAgICBTdHJpbmcgSFRUUF9QT1JUID0gKFN5c3RlbS5nZXRQcm9wZXJ0eSgiaHR0cC5wb3J0IikgIT0gbnVsbCkgPyBTeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0UHJvcGVydHkoImh0dHAucG9ydCIpIDogIjI4MDgwIjsKIAotCQkJCWZpcnN0QmFzZVRlc3QudW5kZXBsb3koKTsKLQkJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlVuZGVwbG95ZWQgWyIgKyBmaXJzdGFwcE5hbWUgKyAiXSIpOwotCQkJCWRlbGV0ZVNoYXJlZExiYW5kRE5TZXh0ZXJuYWxTZXJpdmNlKCk7Ci0JCQkJdHJ5IHsKLQkJCQkJYm9vbGVhbiB1bmRlcGxveUNsZWFuID0gZmFsc2U7Ci0JCQkJCUNvbW1hbmRSZXN1bHQgY29tbWFuZFJlc3VsdCA9IGdsYXNzZmlzaC5nZXRDb21tYW5kUnVubmVyKCkKLQkJCQkJCQkucnVuKCJsaXN0LXNlcnZpY2VzIik7Ci0JCQkJCWlmIChjb21tYW5kUmVzdWx0LmdldE91dHB1dCgpLmNvbnRhaW5zKCJOb3RoaW5nIHRvIGxpc3QuIikpIHsKLQkJCQkJCXVuZGVwbG95Q2xlYW4gPSB0cnVlOwotCQkJCQl9Ci0JCQkJCUFzc2VydC5hc3NlcnRUcnVlKHVuZGVwbG95Q2xlYW4pOwotCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCVN5c3RlbS5lcnIKLQkJCQkJCQkucHJpbnRsbigiQ291bGRuJ3QgdmFyaWZ5IHdoZXRoZXIgdW5kZXBsb3kgc3VjY2VlZGVkIik7Ci0JCQkJfQorICAgICAgICAgICAgZ2V0KCJodHRwOi8vIiArIGZpcnN0YXBwTmFtZSArIi5odWRzb24uY29tOiIgKyBIVFRQX1BPUlQKKyAgICAgICAgICAgICAgICAgICAgKyAiL0Jhc2ljUGFhU1NlcnZsZXQiLAorICAgICAgICAgICAgICAgICAgICAiUmVxdWVzdCBoZWFkZXJzIGZyb20gdGhlIHJlcXVlc3Q6Iik7CiAKLQkJCX0KLQkJCQotCQkJCi0JCX0KIAotCX0KKyAgICAgICAgICAgIHNlY29uZGFwcE5hbWUgPSBzZWNvbmRCYXNlVGVzdC5kZXBsb3koYm9va0FyY2hpdmUsImJvb2tzdG9yZSIsbnVsbCk7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkRlcGxveWVkIFsiICsgc2Vjb25kYXBwTmFtZSArICJdIik7CisgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChzZWNvbmRhcHBOYW1lKTsKKyAgICAgICAgICAgIHNlY29uZGFwcE5hbWUgPSBzZWNvbmRhcHBOYW1lLnJlcGxhY2VBbGwoIl8iLCItIik7CisgICAgICAgICAgICBnZXQoImh0dHA6Ly8iICsgc2Vjb25kYXBwTmFtZSArIi5odWRzb24uY29tOiIgKyBIVFRQX1BPUlQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIvQm9va1N0b3JlU2VydmxldCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsZWFzZSB3YWl0IHdoaWxlIGFjY2Vzc2luZyB0aGUgYm9va3N0b3JlIGRhdGFiYXNlLi4uLi4iKTsKIAotCXByaXZhdGUgR2xhc3NGaXNoIGJvb3RzdHJhcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlHbGFzc0Zpc2hQcm9wZXJ0aWVzIGdsYXNzRmlzaFByb3BlcnRpZXMgPSBuZXcgR2xhc3NGaXNoUHJvcGVydGllcygpOwotCQlnbGFzc0Zpc2hQcm9wZXJ0aWVzLnNldEluc3RhbmNlUm9vdChTeXN0ZW0uZ2V0ZW52KCJTMUFTX0hPTUUiKQotCQkJCSsgIi9kb21haW5zL2RvbWFpbjEiKTsKLQkJZ2xhc3NGaXNoUHJvcGVydGllcy5zZXRDb25maWdGaWxlUmVhZE9ubHkoZmFsc2UpOwotCQlHbGFzc0Zpc2ggZ2xhc3NmaXNoID0gR2xhc3NGaXNoUnVudGltZS5ib290c3RyYXAoKS5uZXdHbGFzc0Zpc2goCi0JCQkJZ2xhc3NGaXNoUHJvcGVydGllcyk7Ci0JCVByaW50U3RyZWFtIHN5c291dCA9IFN5c3RlbS5vdXQ7Ci0JCWdsYXNzZmlzaC5zdGFydCgpOwotCQlTeXN0ZW0uc2V0T3V0KHN5c291dCk7Ci0JCXJldHVybiBnbGFzc2Zpc2g7Ci0JfQorICAgICAgICAgICAgICAgICAgICBnZXQoImh0dHA6Ly8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzZWNvbmRhcHBOYW1lICsiLmh1ZHNvbi5jb206IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgSFRUUF9QT1JUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiL0Jvb2tTdG9yZVNlcnZsZXQ/dGl0bGU9QWR2YW5jZWQrZ3VpZGUrZm9yK2RldmVsb3BpbmcrUGFhUytjb21wb25lbnRzJmF1dGhvcnM9U2hhbGluaStNJnByaWNlPTEwMCUyNCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlcmUgYXJlIHRoZSBsaXN0IG9mIGJvb2tzIGF2YWlsYWJsZSBpbiBvdXIgc3RvcmU6Iik7CisKKyAgICAgICAgICAgICAgICAgICAgZ2V0KCJodHRwOi8vIiArIHNlY29uZGFwcE5hbWUrIi5odWRzb24uY29tOiIgKyBIVFRQX1BPUlQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIvQm9va1N0b3JlU2VydmxldCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFkdmFuY2VkIGd1aWRlIGZvciBkZXZlbG9waW5nIFBhYVMgY29tcG9uZW50cyIpOworICAgICAgICAgICAgICAgICAgICBnZXQoImh0dHA6Ly8iICsgZmlyc3RhcHBOYW1lICsiLmh1ZHNvbi5jb206IiArIEhUVFBfUE9SVAorICAgICAgICAgICAgICAgICAgICArICIvQmFzaWNQYWFTU2VydmxldCIsCisgICAgICAgICAgICAgICAgICAgICJSZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGUgcmVxdWVzdDoiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNlY29uZGFwcE5hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNlY29uZEJhc2VUZXN0LnVuZGVwbG95KCk7CisgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVbmRlcGxveWVkIFsiICsgc2Vjb25kYXBwTmFtZSArICJdIik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBnZXQoImh0dHA6Ly8iICsgZmlyc3RhcHBOYW1lICsiLmh1ZHNvbi5jb206IiArIEhUVFBfUE9SVAorICAgICAgICAgICAgICAgICAgICArICIvQmFzaWNQYWFTU2VydmxldCIsCisgICAgICAgICAgICAgICAgICAgICJSZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGUgcmVxdWVzdDoiKTsKKworICAgICAgICAgICAgLy8gNC4gVW5kZXBsb3kgdGhlIFBhYVMgYXBwbGljYXRpb24gLiBUT0RPIDo6IHVzZSBjbG91ZC11bmRlcGxveT8/CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBpZiAoZmlyc3RhcHBOYW1lICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmaXJzdGFwcE5hbWUgPSBmaXJzdGFwcE5hbWUucmVwbGFjZUFsbCgiLSIsIl8iKTsKKworICAgICAgICAgICAgICAgIGZpcnN0QmFzZVRlc3QudW5kZXBsb3koKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVuZGVwbG95ZWQgWyIgKyBmaXJzdGFwcE5hbWUgKyAiXSIpOworICAgICAgICAgICAgICAgIGRlbGV0ZVNoYXJlZExiYW5kRE5TZXh0ZXJuYWxTZXJpdmNlKCk7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB1bmRlcGxveUNsZWFuID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIENvbW1hbmRSZXN1bHQgY29tbWFuZFJlc3VsdCA9IGdsYXNzZmlzaC5nZXRDb21tYW5kUnVubmVyKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAucnVuKCJsaXN0LXNlcnZpY2VzIik7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb21tYW5kUmVzdWx0LmdldE91dHB1dCgpLmNvbnRhaW5zKCJOb3RoaW5nIHRvIGxpc3QuIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVwbG95Q2xlYW4gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKHVuZGVwbG95Q2xlYW4pOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJpbnRsbigiQ291bGRuJ3QgdmFyaWZ5IHdoZXRoZXIgdW5kZXBsb3kgc3VjY2VlZGVkIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CisKKworICAgICAgICB9CisKKyAgICB9CisKKyAgICBwcml2YXRlIEdsYXNzRmlzaCBib290c3RyYXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgR2xhc3NGaXNoUHJvcGVydGllcyBnbGFzc0Zpc2hQcm9wZXJ0aWVzID0gbmV3IEdsYXNzRmlzaFByb3BlcnRpZXMoKTsKKyAgICAgICAgZ2xhc3NGaXNoUHJvcGVydGllcy5zZXRJbnN0YW5jZVJvb3QoU3lzdGVtLmdldGVudigiUzFBU19IT01FIikKKyAgICAgICAgICAgICAgICArICIvZG9tYWlucy9kb21haW4xIik7CisgICAgICAgIGdsYXNzRmlzaFByb3BlcnRpZXMuc2V0Q29uZmlnRmlsZVJlYWRPbmx5KGZhbHNlKTsKKyAgICAgICAgR2xhc3NGaXNoIGdsYXNzZmlzaCA9IEdsYXNzRmlzaFJ1bnRpbWUuYm9vdHN0cmFwKCkubmV3R2xhc3NGaXNoKAorICAgICAgICAgICAgICAgIGdsYXNzRmlzaFByb3BlcnRpZXMpOworICAgICAgICBQcmludFN0cmVhbSBzeXNvdXQgPSBTeXN0ZW0ub3V0OworICAgICAgICBnbGFzc2Zpc2guc3RhcnQoKTsKKyAgICAgICAgU3lzdGVtLnNldE91dChzeXNvdXQpOworICAgICAgICByZXR1cm4gZ2xhc3NmaXNoOworICAgIH0KIAogICAgIC8qIENyZWF0ZXMgTEIgYXMgYSBzaGFyZWQgc2VydmljZSAqLwogICAgIHB1YmxpYyB2b2lkIENyZWF0ZUxiU2hhcmVkU2VydmljZShHbGFzc0Zpc2ggZ2xhc3NmaXNoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTZXJ2aWNlTG9jYXRvciBoYWJpdGF0ID0gR2xvYmFscy5nZXREZWZhdWx0SGFiaXRhdCgpOwotCW9yZy5nbGFzc2Zpc2guYXBpLmFkbWluLkNvbW1hbmRSdW5uZXIgY29tbWFuZFJ1bm5lciA9IGhhYml0YXQKLQkJLmdldFNlcnZpY2Uob3JnLmdsYXNzZmlzaC5hcGkuYWRtaW4uQ29tbWFuZFJ1bm5lci5jbGFzcyk7Ci0JQWN0aW9uUmVwb3J0IHJlcG9ydCA9IGhhYml0YXQuZ2V0U2VydmljZShBY3Rpb25SZXBvcnQuY2xhc3MpOwotCVN0cmluZyB0ZW1wbGF0ZSA9IGNoZWNrTW9kZShnbGFzc2Zpc2gpOwotCWlmKHRlbXBsYXRlLmVxdWFsc0lnbm9yZUNhc2UoIk5hdGl2ZSIpKXsKLQkgICAgdGVtcGxhdGUgPSAiTEJOYXRpdmUiOwotCX1lbHNlIGlmKHRlbXBsYXRlLmVxdWFsc0lnbm9yZUNhc2UoImt2bSIpKXsKLQkgICAgdGVtcGxhdGUgPSAiYXBhY2hlbW9kamsiOwotCX1lbHNlewotCSAgICB0ZW1wbGF0ZSA9ICJvdGQtbmV3IjsKLQl9Ci0Jb3JnLmdsYXNzZmlzaC5hcGkuYWRtaW4uQ29tbWFuZFJ1bm5lci5Db21tYW5kSW52b2NhdGlvbiBpbnZvY2F0aW9uID0gY29tbWFuZFJ1bm5lcgotCQkuZ2V0Q29tbWFuZEludm9jYXRpb24oImNyZWF0ZS1zaGFyZWQtc2VydmljZSIsIHJlcG9ydCk7Ci0JUGFyYW1ldGVyTWFwIHBhcmFtZXRlck1hcCA9IG5ldyBQYXJhbWV0ZXJNYXAoKTsKKyAgICBTZXJ2aWNlTG9jYXRvciBoYWJpdGF0ID0gR2xvYmFscy5nZXREZWZhdWx0SGFiaXRhdCgpOworICAgIG9yZy5nbGFzc2Zpc2guYXBpLmFkbWluLkNvbW1hbmRSdW5uZXIgY29tbWFuZFJ1bm5lciA9IGhhYml0YXQKKyAgICAgICAgLmdldFNlcnZpY2Uob3JnLmdsYXNzZmlzaC5hcGkuYWRtaW4uQ29tbWFuZFJ1bm5lci5jbGFzcyk7CisgICAgQWN0aW9uUmVwb3J0IHJlcG9ydCA9IGhhYml0YXQuZ2V0U2VydmljZShBY3Rpb25SZXBvcnQuY2xhc3MpOworICAgIFN0cmluZyB0ZW1wbGF0ZSA9IGNoZWNrTW9kZShnbGFzc2Zpc2gpOworICAgIGlmKHRlbXBsYXRlLmVxdWFsc0lnbm9yZUNhc2UoIk5hdGl2ZSIpKXsKKyAgICAgICAgdGVtcGxhdGUgPSAiTEJOYXRpdmUiOworICAgIH1lbHNlIGlmKHRlbXBsYXRlLmVxdWFsc0lnbm9yZUNhc2UoImt2bSIpKXsKKyAgICAgICAgdGVtcGxhdGUgPSAiYXBhY2hlbW9kamsiOworICAgIH1lbHNleworICAgICAgICB0ZW1wbGF0ZSA9ICJvdGQtbmV3IjsKKyAgICB9CisgICAgb3JnLmdsYXNzZmlzaC5hcGkuYWRtaW4uQ29tbWFuZFJ1bm5lci5Db21tYW5kSW52b2NhdGlvbiBpbnZvY2F0aW9uID0gY29tbWFuZFJ1bm5lcgorICAgICAgICAuZ2V0Q29tbWFuZEludm9jYXRpb24oImNyZWF0ZS1zaGFyZWQtc2VydmljZSIsIHJlcG9ydCk7CisgICAgUGFyYW1ldGVyTWFwIHBhcmFtZXRlck1hcCA9IG5ldyBQYXJhbWV0ZXJNYXAoKTsKICAgICAgICAgcGFyYW1ldGVyTWFwLmFkZCgidGVtcGxhdGUiLCB0ZW1wbGF0ZSk7CiAgICAgICAgIHBhcmFtZXRlck1hcC5hZGQoImNvbmZpZ3VyYXRpb24iLCAiaHR0cC1wb3J0PTUwMDgwOmh0dHBzLXBvcnQ9NTAwODE6c3NsLWVuYWJsZWQ9dHJ1ZTpoZWFsdGgtY2hlY2staW50ZXJ2YWw9NjA6aGVhbHRoLWNoZWNrLXRpbWVvdXQ9MTAiKTsKICAgICAgICAgcGFyYW1ldGVyTWFwLmFkZCgic2VydmljZXR5cGUiLCAiTEIiKTsKQEAgLTIxNSw1NCArMjE1LDU0IEBACiAgICAgICAgIEFzc2VydC5hc3NlcnRGYWxzZShyZXBvcnQuaGFzRmFpbHVyZXMoKSk7CiAKICAgICB9Ci0gICAgCisKICAgICAvKkNyZWF0ZSBETlMgZXh0ZXJuYWwgc2hhcmVkIHNlcnZpY2UqLwotICAgIAorCiAgICAgcHVibGljIHZvaWQgQ3JlYXRlRE5TRXh0ZXJuYWxTZXJ2aWNlKCl7Ci0JCi0JU2VydmljZUxvY2F0b3IgaGFiaXRhdCA9IEdsb2JhbHMuZ2V0RGVmYXVsdEhhYml0YXQoKTsKLQlvcmcuZ2xhc3NmaXNoLmFwaS5hZG1pbi5Db21tYW5kUnVubmVyIGNvbW1hbmRSdW5uZXIgPSBoYWJpdGF0Ci0JCS5nZXRTZXJ2aWNlKG9yZy5nbGFzc2Zpc2guYXBpLmFkbWluLkNvbW1hbmRSdW5uZXIuY2xhc3MpOwotCUFjdGlvblJlcG9ydCByZXBvcnQgPSBoYWJpdGF0LmdldFNlcnZpY2UoQWN0aW9uUmVwb3J0LmNsYXNzKTsKLQlvcmcuZ2xhc3NmaXNoLmFwaS5hZG1pbi5Db21tYW5kUnVubmVyLkNvbW1hbmRJbnZvY2F0aW9uIGludm9jYXRpb24gPSBjb21tYW5kUnVubmVyCi0JCS5nZXRDb21tYW5kSW52b2NhdGlvbigiY3JlYXRlLWV4dGVybmFsLXNlcnZpY2UiLCByZXBvcnQpOwotCVBhcmFtZXRlck1hcCBwYXJhbWV0ZXJNYXAgPSBuZXcgUGFyYW1ldGVyTWFwKCk7Ci0JcGFyYW1ldGVyTWFwLmFkZCgic2VydmljZXR5cGUiLCAiRE5TIik7Ci0JcGFyYW1ldGVyTWFwLmFkZCgiY29uZmlndXJhdGlvbiIsICJkb21haW4tbmFtZT1odWRzb24uY29tOmRucy1pcD0xMC4xNzguMjE0LjE3MzpkbnMtcHJpdmF0ZS1rZXktZmlsZS1sb2M9IitTeXN0ZW0uZ2V0ZW52KCJQQUFTX1RFU1RTX0hPTUUiKSsiL2Jhc2ljLWJvb2tzdG9yZS1kbnMvS2tleS1nbGFzc2Zpc2guKzE1NyswNTA5NC5wcml2YXRlIik7Ci0JcGFyYW1ldGVyTWFwLmFkZCgiREVGQVVMVCIsImh1ZHNvbi1kbnMtZXh0ZXJuYWwtc2VydmljZXMiKTsKLQlpbnZvY2F0aW9uLnBhcmFtZXRlcnMocGFyYW1ldGVyTWFwKS5leGVjdXRlKCk7CisKKyAgICBTZXJ2aWNlTG9jYXRvciBoYWJpdGF0ID0gR2xvYmFscy5nZXREZWZhdWx0SGFiaXRhdCgpOworICAgIG9yZy5nbGFzc2Zpc2guYXBpLmFkbWluLkNvbW1hbmRSdW5uZXIgY29tbWFuZFJ1bm5lciA9IGhhYml0YXQKKyAgICAgICAgLmdldFNlcnZpY2Uob3JnLmdsYXNzZmlzaC5hcGkuYWRtaW4uQ29tbWFuZFJ1bm5lci5jbGFzcyk7CisgICAgQWN0aW9uUmVwb3J0IHJlcG9ydCA9IGhhYml0YXQuZ2V0U2VydmljZShBY3Rpb25SZXBvcnQuY2xhc3MpOworICAgIG9yZy5nbGFzc2Zpc2guYXBpLmFkbWluLkNvbW1hbmRSdW5uZXIuQ29tbWFuZEludm9jYXRpb24gaW52b2NhdGlvbiA9IGNvbW1hbmRSdW5uZXIKKyAgICAgICAgLmdldENvbW1hbmRJbnZvY2F0aW9uKCJjcmVhdGUtZXh0ZXJuYWwtc2VydmljZSIsIHJlcG9ydCk7CisgICAgUGFyYW1ldGVyTWFwIHBhcmFtZXRlck1hcCA9IG5ldyBQYXJhbWV0ZXJNYXAoKTsKKyAgICBwYXJhbWV0ZXJNYXAuYWRkKCJzZXJ2aWNldHlwZSIsICJETlMiKTsKKyAgICBwYXJhbWV0ZXJNYXAuYWRkKCJjb25maWd1cmF0aW9uIiwgImRvbWFpbi1uYW1lPWh1ZHNvbi5jb206ZG5zLWlwPTEwLjE3OC4yMTQuMTczOmRucy1wcml2YXRlLWtleS1maWxlLWxvYz0iK1N5c3RlbS5nZXRlbnYoIlBBQVNfVEVTVFNfSE9NRSIpKyIvYmFzaWMtYm9va3N0b3JlLWRucy9La2V5LWdsYXNzZmlzaC4rMTU3KzA1MDk0LnByaXZhdGUiKTsKKyAgICBwYXJhbWV0ZXJNYXAuYWRkKCJERUZBVUxUIiwiaHVkc29uLWRucy1leHRlcm5hbC1zZXJ2aWNlcyIpOworICAgIGludm9jYXRpb24ucGFyYW1ldGVycyhwYXJhbWV0ZXJNYXApLmV4ZWN1dGUoKTsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgZXh0ZXJuYWwgc2VydmljZSAnaHVkc29uLWRucy1leHRlcm5hbC1zZXJ2aWNlcycgOiIgKyAhcmVwb3J0Lmhhc0ZhaWx1cmVzKCkpOwogICAgICAgICBBc3NlcnQuYXNzZXJ0RmFsc2UocmVwb3J0Lmhhc0ZhaWx1cmVzKCkpOwotCQotICAgIH0KLSAgICAKLSAgICAvKiBDaGVjayB0aGUgbW9kZSBvZiB0ZXN0IGV4ZWN1dGlvbiAqLwotICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNb2RlKEdsYXNzRmlzaCBnbGFzc2Zpc2gpIHRocm93cyBFeGNlcHRpb24gewotCUFycmF5TGlzdCBwYXJhbXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JQ29tbWFuZFJlc3VsdCByZXN1bHQgPSBudWxsOwotCUNvbW1hbmRSdW5uZXIgY29tbWFuZFJ1bm5lciA9IGdsYXNzZmlzaC5nZXRDb21tYW5kUnVubmVyKCk7Ci0JcGFyYW1zLmNsZWFyKCk7Ci0JcGFyYW1zLmFkZCgiLS12aXJ0dWFsaXphdGlvbiIpOwotCXBhcmFtcy5hZGQoIk5hdGl2ZSIpOwotCXJlc3VsdCA9IGNvbW1hbmRSdW5uZXIucnVuKCJsaXN0LXRlbXBsYXRlcyIsCi0JCShTdHJpbmdbXSkgcGFyYW1zLnRvQXJyYXkobmV3IFN0cmluZ1twYXJhbXMuc2l6ZSgpXSkpOwotCWlmIChyZXN1bHQuZ2V0T3V0cHV0KCkuY29udGFpbnMoIk5hdGl2ZSIpKSB7Ci0JICAgIHJldHVybiAiTmF0aXZlIjsKLQl9Ci0JcGFyYW1zLmNsZWFyKCk7Ci0JcGFyYW1zLmFkZCgiLS12aXJ0dWFsaXphdGlvbiIpOwotCXBhcmFtcy5hZGQoImt2bSIpOwotCXJlc3VsdCA9IGNvbW1hbmRSdW5uZXIucnVuKCJsaXN0LXRlbXBsYXRlcyIsCi0JCShTdHJpbmdbXSkgcGFyYW1zLnRvQXJyYXkobmV3IFN0cmluZ1twYXJhbXMuc2l6ZSgpXSkpOwotCWlmIChyZXN1bHQuZ2V0T3V0cHV0KCkuY29udGFpbnMoImFwYWNoZW1vZGprIikpIHsKLQkgICAgcmV0dXJuICJrdm0iOwotCX0gZWxzZSB7Ci0JICAgIHJldHVybiAib3ZtIjsKLQl9CiAKICAgICB9Ci0JCisKKyAgICAvKiBDaGVjayB0aGUgbW9kZSBvZiB0ZXN0IGV4ZWN1dGlvbiAqLworICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNb2RlKEdsYXNzRmlzaCBnbGFzc2Zpc2gpIHRocm93cyBFeGNlcHRpb24geworICAgIEFycmF5TGlzdCBwYXJhbXMgPSBuZXcgQXJyYXlMaXN0KCk7CisgICAgQ29tbWFuZFJlc3VsdCByZXN1bHQgPSBudWxsOworICAgIENvbW1hbmRSdW5uZXIgY29tbWFuZFJ1bm5lciA9IGdsYXNzZmlzaC5nZXRDb21tYW5kUnVubmVyKCk7CisgICAgcGFyYW1zLmNsZWFyKCk7CisgICAgcGFyYW1zLmFkZCgiLS12aXJ0dWFsaXphdGlvbiIpOworICAgIHBhcmFtcy5hZGQoIk5hdGl2ZSIpOworICAgIHJlc3VsdCA9IGNvbW1hbmRSdW5uZXIucnVuKCJsaXN0LXRlbXBsYXRlcyIsCisgICAgICAgIChTdHJpbmdbXSkgcGFyYW1zLnRvQXJyYXkobmV3IFN0cmluZ1twYXJhbXMuc2l6ZSgpXSkpOworICAgIGlmIChyZXN1bHQuZ2V0T3V0cHV0KCkuY29udGFpbnMoIk5hdGl2ZSIpKSB7CisgICAgICAgIHJldHVybiAiTmF0aXZlIjsKKyAgICB9CisgICAgcGFyYW1zLmNsZWFyKCk7CisgICAgcGFyYW1zLmFkZCgiLS12aXJ0dWFsaXphdGlvbiIpOworICAgIHBhcmFtcy5hZGQoImt2bSIpOworICAgIHJlc3VsdCA9IGNvbW1hbmRSdW5uZXIucnVuKCJsaXN0LXRlbXBsYXRlcyIsCisgICAgICAgIChTdHJpbmdbXSkgcGFyYW1zLnRvQXJyYXkobmV3IFN0cmluZ1twYXJhbXMuc2l6ZSgpXSkpOworICAgIGlmIChyZXN1bHQuZ2V0T3V0cHV0KCkuY29udGFpbnMoImFwYWNoZW1vZGprIikpIHsKKyAgICAgICAgcmV0dXJuICJrdm0iOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAib3ZtIjsKKyAgICB9CisKKyAgICB9CisKICAgICAvKkRlbGV0ZSBzaGFyZWQgTEIgc2VydmljZSovCiAgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVNoYXJlZExiYW5kRE5TZXh0ZXJuYWxTZXJpdmNlKCkgewogICAgICAgICBTZXJ2aWNlTG9jYXRvciBoYWJpdGF0ID0gR2xvYmFscy5nZXREZWZhdWx0SGFiaXRhdCgpOwpAQCAtMjc2LDcgKzI3Niw3IEBACiAgICAgICAgIGludm9jYXRpb24ucGFyYW1ldGVycyhwYXJhbWV0ZXJNYXApLmV4ZWN1dGUoKTsKIAogICAgICAgICBBc3NlcnQuYXNzZXJ0RmFsc2UocmVwb3J0Lmhhc0ZhaWx1cmVzKCkpOwotICAgICAgICAKKwogICAgICAgICBpbnZvY2F0aW9uID0gY29tbWFuZFJ1bm5lci5nZXRDb21tYW5kSW52b2NhdGlvbigiZGVsZXRlLWV4dGVybmFsLXNlcnZpY2UiLCByZXBvcnQpOwogICAgICAgICBwYXJhbWV0ZXJNYXAgPSBuZXcgUGFyYW1ldGVyTWFwKCk7CiAgICAgICAgIHBhcmFtZXRlck1hcC5hZGQoIkRFRkFVTFQiLCAiaHVkc29uLWRucy1leHRlcm5hbC1zZXJ2aWNlcyIpOwpAQCAtMjg1LDcgKzI4NSw3IEBACiAgICAgICAgIEFzc2VydC5hc3NlcnRGYWxzZShyZXBvcnQuaGFzRmFpbHVyZXMoKSk7CiAKICAgICB9Ci0JCi0JCisKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi1pbml0c3FsL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi1pbml0c3FsL3BvbS54bWwKaW5kZXggOTQyZjhlNS4uNTc1YmFlMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGItaW5pdHNxbC9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWRiLWluaXRzcWwvcG9tLnhtbApAQCAtNTAsMTIgKzUwLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgogICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNraXA+ZmFsc2U8L3NraXA+Ci0JCQkgICAgPGVuYWJsZUFzc2VydGlvbnM+ZmFsc2U8L2VuYWJsZUFzc2VydGlvbnM+CisgICAgICAgICAgICAgICAgPGVuYWJsZUFzc2VydGlvbnM+ZmFsc2U8L2VuYWJsZUFzc2VydGlvbnM+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgogICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KICAgICAgICAgICAgIDwvcGx1Z2luPgotCSAgIDxwbHVnaW4+CisgICAgICAgPHBsdWdpbj4KICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYW50cnVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CiAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWRiLWluaXRzcWwvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvYmFzaWNkYmluaXRzcWwvQmFzaWNEQkluaXRTcWxTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi1pbml0c3FsL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2Jhc2ljZGJpbml0c3FsL0Jhc2ljREJJbml0U3FsU2VydmxldC5qYXZhCmluZGV4IGJiMzVmNzMuLjc2N2M0NjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWRiLWluaXRzcWwvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvYmFzaWNkYmluaXRzcWwvQmFzaWNEQkluaXRTcWxTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGItaW5pdHNxbC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9iYXNpY2RiaW5pdHNxbC9CYXNpY0RCSW5pdFNxbFNlcnZsZXQuamF2YQpAQCAtOTAsOSArOTAsOSBAQAogICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8dHI+Iik7CiAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIiAgPHRoIGFsaWduPVwibGVmdFwiIGNvbHNwYW49XCIyXCI+IiArICJEYXRhIHJldHJpZXZlZCBmcm9tIHRhYmxlIFwiY3VzdG9tZXJcIiIgKyAiPC90aD4iKTsKICAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiPC90cj4iKTsKLQkJd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKLQkJd3JpdGVyLnByaW50bG4oIjx0ZD4iICsgIkN1c3RvbWVyIElEIiArICI8L3RkPiIpOwotCQl3cml0ZXIucHJpbnRsbigiPHRkPiIgKyAiQ3VzdG9tZXIgTmFtZSIgKyAiPC90ZD4iKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIjx0ZD4iICsgIkN1c3RvbWVyIElEIiArICI8L3RkPiIpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiPHRkPiIgKyAiQ3VzdG9tZXIgTmFtZSIgKyAiPC90ZD4iKTsKICAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiPC90cj4iKTsKICAgICAgICAgICAgICAgICB3aGlsZSAocnMubmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8dHI+Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi1pbml0c3FsL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGItaW5pdHNxbC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbAppbmRleCBmYTBhN2UyLi5kOGY4ZWMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi1pbml0c3FsL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWRiLWluaXRzcWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIAogLS0+CiAKLTwhRE9DVFlQRSBzdW4td2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOS4wIFNlcnZsZXQgMi41Ly9FTiIgCis8IURPQ1RZUEUgc3VuLXdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDkuMCBTZXJ2bGV0IDIuNS8vRU4iCiAgICJodHRwOi8vd3d3LnN1bi5jb20vc29mdHdhcmUvYXBwc2VydmVyL2R0ZHMvc3VuLXdlYi1hcHBfMl81LTAuZHRkIj4KIDxzdW4td2ViLWFwcCBlcnJvci11cmw9IiI+CiAgIDxyZXNvdXJjZS1yZWY+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi1pbml0c3FsL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi1pbml0c3FsL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKaW5kZXggZTBkZDcxNi4uMjcwMWNiNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGItaW5pdHNxbC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWRiLWluaXRzcWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApAQCAtMTcsOSArMTcsOSBAQAogCiAtLT4KIAotPHdlYi1hcHAgdmVyc2lvbj0iMi41IiAKLSAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgCi0gIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorPHdlYi1hcHAgdmVyc2lvbj0iMi41IgorICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5CYXNpY0RCSW5pdFNxbFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWRiLWluaXRzcWwvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvYmFzaWNkYmluaXRzcWwvQmFzaWNEQkluaXRTcWxUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi1pbml0c3FsL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2Jhc2ljZGJpbml0c3FsL0Jhc2ljREJJbml0U3FsVGVzdC5qYXZhCmluZGV4IGQ1YjcwMDguLjk5MDMzYjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWRiLWluaXRzcWwvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvYmFzaWNkYmluaXRzcWwvQmFzaWNEQkluaXRTcWxUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGItaW5pdHNxbC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9iYXNpY2RiaW5pdHNxbC9CYXNpY0RCSW5pdFNxbFRlc3QuamF2YQpAQCAtNDAsMTM3ICs0MCwxMzcgQEAKIAogcHVibGljIGNsYXNzIEJhc2ljREJJbml0U3FsVGVzdCB7CiAKLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAotCQkvLyAxLiBCb290c3RyYXAgR2xhc3NGaXNoIERBUyBpbiBlbWJlZGRlZCBtb2RlLgotCQlHbGFzc0Zpc2hQcm9wZXJ0aWVzIGdsYXNzRmlzaFByb3BlcnRpZXMgPSBuZXcgR2xhc3NGaXNoUHJvcGVydGllcygpOwotCQlnbGFzc0Zpc2hQcm9wZXJ0aWVzLnNldEluc3RhbmNlUm9vdChTeXN0ZW0uZ2V0ZW52KCJTMUFTX0hPTUUiKQotCQkJCSsgIi9kb21haW5zL2RvbWFpbjEiKTsKLQkJZ2xhc3NGaXNoUHJvcGVydGllcy5zZXRDb25maWdGaWxlUmVhZE9ubHkoZmFsc2UpOwotCQlHbGFzc0Zpc2ggZ2xhc3NmaXNoID0gR2xhc3NGaXNoUnVudGltZS5ib290c3RyYXAoKS5uZXdHbGFzc0Zpc2goCi0JCQkJZ2xhc3NGaXNoUHJvcGVydGllcyk7Ci0JCVByaW50U3RyZWFtIHN5c291dCA9IFN5c3RlbS5vdXQ7Ci0JCWdsYXNzZmlzaC5zdGFydCgpOwotCQlTeXN0ZW0uc2V0T3V0KHN5c291dCk7CisgICAgICAgIC8vIDEuIEJvb3RzdHJhcCBHbGFzc0Zpc2ggREFTIGluIGVtYmVkZGVkIG1vZGUuCisgICAgICAgIEdsYXNzRmlzaFByb3BlcnRpZXMgZ2xhc3NGaXNoUHJvcGVydGllcyA9IG5ldyBHbGFzc0Zpc2hQcm9wZXJ0aWVzKCk7CisgICAgICAgIGdsYXNzRmlzaFByb3BlcnRpZXMuc2V0SW5zdGFuY2VSb290KFN5c3RlbS5nZXRlbnYoIlMxQVNfSE9NRSIpCisgICAgICAgICAgICAgICAgKyAiL2RvbWFpbnMvZG9tYWluMSIpOworICAgICAgICBnbGFzc0Zpc2hQcm9wZXJ0aWVzLnNldENvbmZpZ0ZpbGVSZWFkT25seShmYWxzZSk7CisgICAgICAgIEdsYXNzRmlzaCBnbGFzc2Zpc2ggPSBHbGFzc0Zpc2hSdW50aW1lLmJvb3RzdHJhcCgpLm5ld0dsYXNzRmlzaCgKKyAgICAgICAgICAgICAgICBnbGFzc0Zpc2hQcm9wZXJ0aWVzKTsKKyAgICAgICAgUHJpbnRTdHJlYW0gc3lzb3V0ID0gU3lzdGVtLm91dDsKKyAgICAgICAgZ2xhc3NmaXNoLnN0YXJ0KCk7CisgICAgICAgIFN5c3RlbS5zZXRPdXQoc3lzb3V0KTsKIAotCQkvLyAyLiBEZXBsb3kgdGhlIFBhYVMgYXBwbGljYXRpb24uCi0JCUZpbGUgYXJjaGl2ZSA9IG5ldyBGaWxlKFN5c3RlbS5nZXRQcm9wZXJ0eSgiYmFzZWRpciIpCi0JCQkJKyAiL3RhcmdldC9iYXNpY19kYl9pbml0c3FsX3BhYXNfc2FtcGxlLndhciIpOyAvLyBUT0RPIDo6IHVzZQotCQkJCQkJCQkJCQkJCQkJCS8vIG12biBhcGlzIHRvCi0JCQkJCQkJCQkJCQkJCQkJLy8gZ2V0IHRoZQotCQkJCQkJCQkJCQkJCQkJCS8vIGFyY2hpdmUKLQkJCQkJCQkJCQkJCQkJCQkvLyBsb2NhdGlvbi4KLQkJQXNzZXJ0LmFzc2VydFRydWUoYXJjaGl2ZS5leGlzdHMoKSk7CisgICAgICAgIC8vIDIuIERlcGxveSB0aGUgUGFhUyBhcHBsaWNhdGlvbi4KKyAgICAgICAgRmlsZSBhcmNoaXZlID0gbmV3IEZpbGUoU3lzdGVtLmdldFByb3BlcnR5KCJiYXNlZGlyIikKKyAgICAgICAgICAgICAgICArICIvdGFyZ2V0L2Jhc2ljX2RiX2luaXRzcWxfcGFhc19zYW1wbGUud2FyIik7IC8vIFRPRE8gOjogdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbXZuIGFwaXMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJjaGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvY2F0aW9uLgorICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShhcmNoaXZlLmV4aXN0cygpKTsKIAotCQlEZXBsb3llciBkZXBsb3llciA9IG51bGw7Ci0JCVN0cmluZyBhcHBOYW1lID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWRlcGxveWVyID0gZ2xhc3NmaXNoLmdldERlcGxveWVyKCk7Ci0JCQlhcHBOYW1lID0gZGVwbG95ZXIuZGVwbG95KGFyY2hpdmUpOworICAgICAgICBEZXBsb3llciBkZXBsb3llciA9IG51bGw7CisgICAgICAgIFN0cmluZyBhcHBOYW1lID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGRlcGxveWVyID0gZ2xhc3NmaXNoLmdldERlcGxveWVyKCk7CisgICAgICAgICAgICBhcHBOYW1lID0gZGVwbG95ZXIuZGVwbG95KGFyY2hpdmUpOwogCi0JCQlTeXN0ZW0uZXJyLnByaW50bG4oIkRlcGxveWVkIFsiICsgYXBwTmFtZSArICJdIik7Ci0JCQlBc3NlcnQuYXNzZXJ0Tm90TnVsbChhcHBOYW1lKTsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRGVwbG95ZWQgWyIgKyBhcHBOYW1lICsgIl0iKTsKKyAgICAgICAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKGFwcE5hbWUpOwogCi0JCQlDb21tYW5kUnVubmVyIGNvbW1hbmRSdW5uZXIgPSBnbGFzc2Zpc2guZ2V0Q29tbWFuZFJ1bm5lcigpOwotCQkJQ29tbWFuZFJlc3VsdCByZXN1bHQgPSBjb21tYW5kUnVubmVyLnJ1bigibGlzdC1zZXJ2aWNlcyIpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJcbmxpc3Qtc2VydmljZXMgY29tbWFuZCBvdXRwdXQgWyAiCi0JCQkJCSsgcmVzdWx0LmdldE91dHB1dCgpICsgIl0iKTsKKyAgICAgICAgICAgIENvbW1hbmRSdW5uZXIgY29tbWFuZFJ1bm5lciA9IGdsYXNzZmlzaC5nZXRDb21tYW5kUnVubmVyKCk7CisgICAgICAgICAgICBDb21tYW5kUmVzdWx0IHJlc3VsdCA9IGNvbW1hbmRSdW5uZXIucnVuKCJsaXN0LXNlcnZpY2VzIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxubGlzdC1zZXJ2aWNlcyBjb21tYW5kIG91dHB1dCBbICIKKyAgICAgICAgICAgICAgICAgICAgKyByZXN1bHQuZ2V0T3V0cHV0KCkgKyAiXSIpOwogCi0JCQkvLyAzLiBBY2Nlc3MgdGhlIGFwcCB0byBtYWtlIHN1cmUgUGFhUyBhcHAgaXMgY29ycmVjdGx5IHByb3Zpc2lvbmVkLgotCQkJU3RyaW5nIEhUVFBfUE9SVCA9IChTeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucG9ydCIpICE9IG51bGwpID8gU3lzdGVtCi0JCQkJCS5nZXRQcm9wZXJ0eSgiaHR0cC5wb3J0IikgOiAiMjgwODAiOwotCQkJU3RyaW5nIGluc3RhbmNlSVAgPSBnZXRMQklQQWRkcmVzcyhnbGFzc2Zpc2gpOworICAgICAgICAgICAgLy8gMy4gQWNjZXNzIHRoZSBhcHAgdG8gbWFrZSBzdXJlIFBhYVMgYXBwIGlzIGNvcnJlY3RseSBwcm92aXNpb25lZC4KKyAgICAgICAgICAgIFN0cmluZyBIVFRQX1BPUlQgPSAoU3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKSAhPSBudWxsKSA/IFN5c3RlbQorICAgICAgICAgICAgICAgICAgICAuZ2V0UHJvcGVydHkoImh0dHAucG9ydCIpIDogIjI4MDgwIjsKKyAgICAgICAgICAgIFN0cmluZyBpbnN0YW5jZUlQID0gZ2V0TEJJUEFkZHJlc3MoZ2xhc3NmaXNoKTsKIAotCQkJZ2V0KCJodHRwOi8vIiArIGluc3RhbmNlSVAgKyAiOiIgKyBIVFRQX1BPUlQKLQkJCQkJKyAiL2Jhc2ljX2RiX2luaXRzcWxfcGFhc19zYW1wbGUvQmFzaWNEQkluaXRTcWxTZXJ2bGV0IiwKLQkJCQkJIkN1c3RvbWVyIElEIik7CisgICAgICAgICAgICBnZXQoImh0dHA6Ly8iICsgaW5zdGFuY2VJUCArICI6IiArIEhUVFBfUE9SVAorICAgICAgICAgICAgICAgICAgICArICIvYmFzaWNfZGJfaW5pdHNxbF9wYWFzX3NhbXBsZS9CYXNpY0RCSW5pdFNxbFNlcnZsZXQiLAorICAgICAgICAgICAgICAgICAgICAiQ3VzdG9tZXIgSUQiKTsKIAogICAgICAgICAgICAgdGVzdExpc3RTZXJ2aWNlcygpOwogCi0JCQkvLyA0LiBVbmRlcGxveSB0aGUgUGFhUyBhcHBsaWNhdGlvbiAuCi0JCX0gZmluYWxseSB7Ci0JCQlpZiAoYXBwTmFtZSAhPSBudWxsKSB7Ci0JCQkJZGVwbG95ZXIudW5kZXBsb3koYXBwTmFtZSk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJEZXN0cm95aW5nIHRoZSByZXNvdXJjZXMgY3JlYXRlZCIpOwotCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiVW5kZXBsb3llZCBbIiArIGFwcE5hbWUgKyAiXSIpOwotCQkJCXRyeSB7Ci0JCQkJCWJvb2xlYW4gdW5kZXBsb3lDbGVhbiA9IGZhbHNlOwotCQkJCQlDb21tYW5kUmVzdWx0IGNvbW1hbmRSZXN1bHQgPSBnbGFzc2Zpc2guZ2V0Q29tbWFuZFJ1bm5lcigpCi0JCQkJCQkJLnJ1bigibGlzdC1zZXJ2aWNlcyIpOwotCQkJCQlpZiAoY29tbWFuZFJlc3VsdC5nZXRPdXRwdXQoKS5jb250YWlucygiTm90aGluZyB0byBsaXN0LiIpKSB7Ci0JCQkJCQl1bmRlcGxveUNsZWFuID0gdHJ1ZTsKLQkJCQkJfQotCQkJCQlBc3NlcnQuYXNzZXJ0VHJ1ZSh1bmRlcGxveUNsZWFuKTsKLQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCQlTeXN0ZW0uZXJyCi0JCQkJCQkJLnByaW50bG4oIkNvdWxkbid0IHZhcmlmeSB3aGV0aGVyIHVuZGVwbG95IHN1Y2NlZWRlZCIpOwotCQkJCX0KLQkJCX0KLQkJfQorICAgICAgICAgICAgLy8gNC4gVW5kZXBsb3kgdGhlIFBhYVMgYXBwbGljYXRpb24gLgorICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgaWYgKGFwcE5hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGRlcGxveWVyLnVuZGVwbG95KGFwcE5hbWUpOworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVzdHJveWluZyB0aGUgcmVzb3VyY2VzIGNyZWF0ZWQiKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVuZGVwbG95ZWQgWyIgKyBhcHBOYW1lICsgIl0iKTsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBib29sZWFuIHVuZGVwbG95Q2xlYW4gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFJlc3VsdCBjb21tYW5kUmVzdWx0ID0gZ2xhc3NmaXNoLmdldENvbW1hbmRSdW5uZXIoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5ydW4oImxpc3Qtc2VydmljZXMiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRSZXN1bHQuZ2V0T3V0cHV0KCkuY29udGFpbnMoIk5vdGhpbmcgdG8gbGlzdC4iKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXBsb3lDbGVhbiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUodW5kZXBsb3lDbGVhbik7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVycgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wcmludGxuKCJDb3VsZG4ndCB2YXJpZnkgd2hldGhlciB1bmRlcGxveSBzdWNjZWVkZWQiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotCX0KKyAgICB9CiAKLQlwcml2YXRlIHZvaWQgZ2V0KFN0cmluZyB1cmxTdHIsIFN0cmluZyByZXN1bHQpIHRocm93cyBFeGNlcHRpb24gewotCQlVUkwgdXJsID0gbmV3IFVSTCh1cmxTdHIpOwotCQlVUkxDb25uZWN0aW9uIHljID0gdXJsLm9wZW5Db25uZWN0aW9uKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiXG5VUkxDb25uZWN0aW9uIFsiICsgeWMgKyAiXSA6ICIpOwotCQlCdWZmZXJlZFJlYWRlciBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoCi0JCQkJeWMuZ2V0SW5wdXRTdHJlYW0oKSkpOwotCQlTdHJpbmcgbGluZSA9IG51bGw7Ci0JCWJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLQkJd2hpbGUgKChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOwotCQkJaWYgKGxpbmUuaW5kZXhPZihyZXN1bHQpICE9IC0xKSB7Ci0JCQkJZm91bmQgPSB0cnVlOwotCQkJfQotCQl9Ci0JCUFzc2VydC5hc3NlcnRUcnVlKGZvdW5kKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJcbioqKioqIFNVQ0NFU1MgKioqKiBGb3VuZCBbIiArIHJlc3VsdAotCQkJCSsgIl0gaW4gdGhlIHJlc3BvbnNlLioqKioqXG4iKTsKLQl9CisgICAgcHJpdmF0ZSB2b2lkIGdldChTdHJpbmcgdXJsU3RyLCBTdHJpbmcgcmVzdWx0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwodXJsU3RyKTsKKyAgICAgICAgVVJMQ29ubmVjdGlvbiB5YyA9IHVybC5vcGVuQ29ubmVjdGlvbigpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuVVJMQ29ubmVjdGlvbiBbIiArIHljICsgIl0gOiAiKTsKKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKAorICAgICAgICAgICAgICAgIHljLmdldElucHV0U3RyZWFtKCkpKTsKKyAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOworICAgICAgICBib29sZWFuIGZvdW5kID0gZmFsc2U7CisgICAgICAgIHdoaWxlICgobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKKyAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YocmVzdWx0KSAhPSAtMSkgeworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShmb3VuZCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG4qKioqKiBTVUNDRVNTICoqKiogRm91bmQgWyIgKyByZXN1bHQKKyAgICAgICAgICAgICAgICArICJdIGluIHRoZSByZXNwb25zZS4qKioqKlxuIik7CisgICAgfQogCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0TEJJUEFkZHJlc3MoR2xhc3NGaXNoIGdsYXNzZmlzaCkgewotCQlTdHJpbmcgbGJJUCA9IG51bGw7Ci0JCVN0cmluZyBJUEFkZHJlc3NQYXR0ZXJuID0gIklQLUFERFJFU1NcXHMqXG4qKC4qKVxccypcbigoWzAxXT9cXGQqfDJbMC00XVxcZHwyNVswLTVdKVxcLiIKLQkJCQkrICIoWzAxXT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKVxcLiIKLQkJCQkrICIoWzAxXT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKVxcLiIKLQkJCQkrICIoWzAtOV0/XFxkXFxkP3wyWzAtNF1cXGR8MjVbMC01XSkpIjsKLQkJdHJ5IHsKLQkJCUNvbW1hbmRSdW5uZXIgY29tbWFuZFJ1bm5lciA9IGdsYXNzZmlzaC5nZXRDb21tYW5kUnVubmVyKCk7Ci0JCQlTdHJpbmcgcmVzdWx0ID0gY29tbWFuZFJ1bm5lcgotCQkJCQkucnVuKCJsaXN0LXNlcnZpY2VzIiwgIi0tdHlwZSIsICJMQiIsCi0JCQkJCQkJIi0tb3V0cHV0IiwgIklQLUFERFJFU1MiKS5nZXRPdXRwdXQoKS50b1N0cmluZygpOwotCQkJaWYgKHJlc3VsdC5jb250YWlucygiTm90aGluZyB0byBsaXN0LiIpKSB7Ci0JCQkJcmVzdWx0ID0gY29tbWFuZFJ1bm5lcgotCQkJCQkJLnJ1bigibGlzdC1zZXJ2aWNlcyIsICItLXR5cGUiLCAiSmF2YUVFIiwgIi0tb3V0cHV0IiwKLQkJCQkJCQkJIklQLUFERFJFU1MiKS5nZXRPdXRwdXQoKS50b1N0cmluZygpOworICAgIHByaXZhdGUgU3RyaW5nIGdldExCSVBBZGRyZXNzKEdsYXNzRmlzaCBnbGFzc2Zpc2gpIHsKKyAgICAgICAgU3RyaW5nIGxiSVAgPSBudWxsOworICAgICAgICBTdHJpbmcgSVBBZGRyZXNzUGF0dGVybiA9ICJJUC1BRERSRVNTXFxzKlxuKiguKilcXHMqXG4oKFswMV0/XFxkKnwyWzAtNF1cXGR8MjVbMC01XSlcXC4iCisgICAgICAgICAgICAgICAgKyAiKFswMV0/XFxkXFxkP3wyWzAtNF1cXGR8MjVbMC01XSlcXC4iCisgICAgICAgICAgICAgICAgKyAiKFswMV0/XFxkXFxkP3wyWzAtNF1cXGR8MjVbMC01XSlcXC4iCisgICAgICAgICAgICAgICAgKyAiKFswLTldP1xcZFxcZD98MlswLTRdXFxkfDI1WzAtNV0pKSI7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDb21tYW5kUnVubmVyIGNvbW1hbmRSdW5uZXIgPSBnbGFzc2Zpc2guZ2V0Q29tbWFuZFJ1bm5lcigpOworICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGNvbW1hbmRSdW5uZXIKKyAgICAgICAgICAgICAgICAgICAgLnJ1bigibGlzdC1zZXJ2aWNlcyIsICItLXR5cGUiLCAiTEIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLW91dHB1dCIsICJJUC1BRERSRVNTIikuZ2V0T3V0cHV0KCkudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuY29udGFpbnMoIk5vdGhpbmcgdG8gbGlzdC4iKSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbW1hbmRSdW5uZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIC5ydW4oImxpc3Qtc2VydmljZXMiLCAiLS10eXBlIiwgIkphdmFFRSIsICItLW91dHB1dCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJUC1BRERSRVNTIikuZ2V0T3V0cHV0KCkudG9TdHJpbmcoKTsKIAotCQkJCVBhdHRlcm4gcCA9IFBhdHRlcm4uY29tcGlsZShJUEFkZHJlc3NQYXR0ZXJuKTsKLQkJCQlNYXRjaGVyIG0gPSBwLm1hdGNoZXIocmVzdWx0KTsKLQkJCQlpZiAobS5maW5kKCkpIHsKLQkJCQkJbGJJUCA9IG0uZ3JvdXAoMik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbGJJUCA9ICJsb2NhbGhvc3QiOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJUGF0dGVybiBwID0gUGF0dGVybi5jb21waWxlKElQQWRkcmVzc1BhdHRlcm4pOwotCQkJCU1hdGNoZXIgbSA9IHAubWF0Y2hlcihyZXN1bHQpOwotCQkJCWlmIChtLmZpbmQoKSkgewotCQkJCQlsYklQID0gbS5ncm91cCgyKTsKLQkJCQl9IGVsc2UgewotCQkJCQlsYklQID0gImxvY2FsaG9zdCI7Ci0JCQkJfQorICAgICAgICAgICAgICAgIFBhdHRlcm4gcCA9IFBhdHRlcm4uY29tcGlsZShJUEFkZHJlc3NQYXR0ZXJuKTsKKyAgICAgICAgICAgICAgICBNYXRjaGVyIG0gPSBwLm1hdGNoZXIocmVzdWx0KTsKKyAgICAgICAgICAgICAgICBpZiAobS5maW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbGJJUCA9IG0uZ3JvdXAoMik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbGJJUCA9ICJsb2NhbGhvc3QiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgUGF0dGVybiBwID0gUGF0dGVybi5jb21waWxlKElQQWRkcmVzc1BhdHRlcm4pOworICAgICAgICAgICAgICAgIE1hdGNoZXIgbSA9IHAubWF0Y2hlcihyZXN1bHQpOworICAgICAgICAgICAgICAgIGlmIChtLmZpbmQoKSkgeworICAgICAgICAgICAgICAgICAgICBsYklQID0gbS5ncm91cCgyKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsYklQID0gImxvY2FsaG9zdCI7CisgICAgICAgICAgICAgICAgfQogCi0JCQl9CisgICAgICAgICAgICB9CiAKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiUmVnZXggaGFzIHRocm93biBhbiBleGNlcHRpb24gIgotCQkJCQkrIGUuZ2V0TWVzc2FnZSgpKTsKLQkJCXJldHVybiAibG9jYWxob3N0IjsKLQkJfQotCQlyZXR1cm4gbGJJUDsKLQl9CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlZ2V4IGhhcyB0aHJvd24gYW4gZXhjZXB0aW9uICIKKyAgICAgICAgICAgICAgICAgICAgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICByZXR1cm4gImxvY2FsaG9zdCI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxiSVA7CisgICAgfQogCiBwcml2YXRlIHZvaWQgdGVzdExpc3RTZXJ2aWNlcygpIHsKICAgICAgICAgU2VydmljZUxvY2F0b3IgaGFiaXRhdCA9IEdsb2JhbHMuZ2V0RGVmYXVsdEhhYml0YXQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWRiLXRlYXJkb3duLXNxbC9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGItdGVhcmRvd24tc3FsL3BvbS54bWwKaW5kZXggZmEyN2U3Yy4uNGY4NWJmMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGItdGVhcmRvd24tc3FsL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGItdGVhcmRvd24tc3FsL3BvbS54bWwKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CiAgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2tpcD5mYWxzZTwvc2tpcD4KLQkJCSAgICA8ZW5hYmxlQXNzZXJ0aW9ucz5mYWxzZTwvZW5hYmxlQXNzZXJ0aW9ucz4KKyAgICAgICAgICAgICAgICA8ZW5hYmxlQXNzZXJ0aW9ucz5mYWxzZTwvZW5hYmxlQXNzZXJ0aW9ucz4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CiAgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGItdGVhcmRvd24tc3FsL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2Jhc2ljZGJ0ZWFyZG93bnNxbC9EYkNvbm5lY3Rpb25EZXRhaWxzU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGItdGVhcmRvd24tc3FsL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2Jhc2ljZGJ0ZWFyZG93bnNxbC9EYkNvbm5lY3Rpb25EZXRhaWxzU2VydmxldC5qYXZhCmluZGV4IGZlNjRlNjUuLjRkMDkwNjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWRiLXRlYXJkb3duLXNxbC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9iYXNpY2RidGVhcmRvd25zcWwvRGJDb25uZWN0aW9uRGV0YWlsc1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi10ZWFyZG93bi1zcWwvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvYmFzaWNkYnRlYXJkb3duc3FsL0RiQ29ubmVjdGlvbkRldGFpbHNTZXJ2bGV0LmphdmEKQEAgLTYzLDkgKzYzLDkgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgc3RtdCA9IGRzLmdldENvbm5lY3Rpb24oKS5jcmVhdGVTdGF0ZW1lbnQoKTsKIAotCSAgICAgICAgRGF0YWJhc2VNZXRhRGF0YSBkYk1ldGFkYXRhID0gc3RtdC5nZXRDb25uZWN0aW9uKCkuZ2V0TWV0YURhdGEoKTsKKyAgICAgICAgICAgIERhdGFiYXNlTWV0YURhdGEgZGJNZXRhZGF0YSA9IHN0bXQuZ2V0Q29ubmVjdGlvbigpLmdldE1ldGFEYXRhKCk7CiAKLQkgICAgICAgIHdyaXRlci5wcmludGxuKGRiTWV0YWRhdGEuZ2V0VVJMKCkpOworICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oZGJNZXRhZGF0YS5nZXRVUkwoKSk7CiAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oZGJNZXRhZGF0YS5nZXRVc2VyTmFtZSgpKTsKICAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbih1c2VyQ3JlZGVudGlhbHMuZ2V0KGRiTWV0YWRhdGEuZ2V0VXNlck5hbWUoKSkpOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi10ZWFyZG93bi1zcWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi10ZWFyZG93bi1zcWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKaW5kZXggODkzMWEyYi4uYjk2MDMzNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGItdGVhcmRvd24tc3FsL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWRiLXRlYXJkb3duLXNxbC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPCFET0NUWVBFIHJlc291cmNlcyBQVUJMSUMgIi0vL0dsYXNzRmlzaC5vcmcvL0RURCBHbGFzc0Zpc2ggQXBwbGljYXRpb24gU2VydmVyIDMuMSBSZXNvdXJjZSBEZWZpbml0aW9ucy8vRU4iICJodHRwOi8vZ2xhc3NmaXNoLm9yZy9kdGRzL2dsYXNzZmlzaC1yZXNvdXJjZXNfMV81LmR0ZCI+CiAKIDxyZXNvdXJjZXM+Ci0JPGpkYmMtY29ubmVjdGlvbi1wb29sIHJlcy10eXBlPSJqYXZheC5zcWwuRGF0YVNvdXJjZSIgbmFtZT0iamF2YTphcHAvamRiYy90ZWFyZG93bl9zcWxfdGVzdF9wb29sIj4KKyAgICA8amRiYy1jb25uZWN0aW9uLXBvb2wgcmVzLXR5cGU9ImphdmF4LnNxbC5EYXRhU291cmNlIiBuYW1lPSJqYXZhOmFwcC9qZGJjL3RlYXJkb3duX3NxbF90ZXN0X3Bvb2wiPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2VydmljZS1uYW1lIiB2YWx1ZT0iY29mZmVlLXNlcnZpY2UiLz4KICAgICA8L2pkYmMtY29ubmVjdGlvbi1wb29sPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi10ZWFyZG93bi1zcWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi10ZWFyZG93bi1zcWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKaW5kZXggZmNhYTQyNy4uOWEzNjA4MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGItdGVhcmRvd24tc3FsL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWRiLXRlYXJkb3duLXNxbC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbApAQCAtMTcsNyArMTcsNyBAQAogCiAtLT4KIAotPCFET0NUWVBFIHN1bi13ZWItYXBwIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEFwcGxpY2F0aW9uIFNlcnZlciA5LjAgU2VydmxldCAyLjUvL0VOIiAKKzwhRE9DVFlQRSBzdW4td2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOS4wIFNlcnZsZXQgMi41Ly9FTiIKICAgImh0dHA6Ly93d3cuc3VuLmNvbS9zb2Z0d2FyZS9hcHBzZXJ2ZXIvZHRkcy9zdW4td2ViLWFwcF8yXzUtMC5kdGQiPgogPHN1bi13ZWItYXBwIGVycm9yLXVybD0iIj4KIDwvc3VuLXdlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi10ZWFyZG93bi1zcWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWRiLXRlYXJkb3duLXNxbC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmluZGV4IDYxNTNhZDYuLjdkNmMwZTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWRiLXRlYXJkb3duLXNxbC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWRiLXRlYXJkb3duLXNxbC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCkBAIC0xNyw5ICsxNyw5IEBACiAKIC0tPgogCi08d2ViLWFwcCB2ZXJzaW9uPSIyLjUiIAotICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiAKLSAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCis8d2ViLWFwcCB2ZXJzaW9uPSIyLjUiCisgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPkNvZmZlZVNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWRiLXRlYXJkb3duLXNxbC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9iYXNpY2RidGVhcmRvd25zcWwvQ29mZmVlVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGItdGVhcmRvd24tc3FsL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2Jhc2ljZGJ0ZWFyZG93bnNxbC9Db2ZmZWVUZXN0LmphdmEKaW5kZXggNjA5ZDVjNi4uM2Q3MGJlNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGItdGVhcmRvd24tc3FsL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2Jhc2ljZGJ0ZWFyZG93bnNxbC9Db2ZmZWVUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGItdGVhcmRvd24tc3FsL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2Jhc2ljZGJ0ZWFyZG93bnNxbC9Db2ZmZWVUZXN0LmphdmEKQEAgLTExMSw3ICsxMTEsNyBAQAogICAgICAgICAgICAgaWYgKGFwcE5hbWUgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGRlcGxveWVyLnVuZGVwbG95KGFwcE5hbWUpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVW5kZXBsb3llZCBbIiArIGFwcE5hbWUgKyAiXSIpOwotCQkgICAgICAgIHRlc3RUZWFyRG93blNxbChkYkNvbm5lY3Rpb25EZXRhaWxzKTsKKyAgICAgICAgICAgICAgICB0ZXN0VGVhckRvd25TcWwoZGJDb25uZWN0aW9uRGV0YWlscyk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZXN0cm95aW5nIHRoZSByZXNvdXJjZXMgY3JlYXRlZCIpOwogICAgICAgICAgICAgICAgIC8vNC4xLiBEZWxldGUgU2hhcmVkIERCIFNlcnZpY2UuCiAgICAgICAgICAgICAgICAgQ29tbWFuZFJlc3VsdCBkZWxldGVSZXN1bHQgPSBjb21tYW5kUnVubmVyLnJ1bigKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWRiLXdpdGgtcmVzb3VyY2VzLXhtbC9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGItd2l0aC1yZXNvdXJjZXMteG1sL3BvbS54bWwKaW5kZXggNTIwNGRjNS4uZTE5MmE5ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGItd2l0aC1yZXNvdXJjZXMteG1sL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGItd2l0aC1yZXNvdXJjZXMteG1sL3BvbS54bWwKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CiAgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2tpcD5mYWxzZTwvc2tpcD4KLQkJCSAgICA8ZW5hYmxlQXNzZXJ0aW9ucz5mYWxzZTwvZW5hYmxlQXNzZXJ0aW9ucz4KKyAgICAgICAgICAgICAgICA8ZW5hYmxlQXNzZXJ0aW9ucz5mYWxzZTwvZW5hYmxlQXNzZXJ0aW9ucz4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CiAgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGItd2l0aC1yZXNvdXJjZXMteG1sL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGItd2l0aC1yZXNvdXJjZXMteG1sL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCmluZGV4IGZjYWE0MjcuLjlhMzYwODIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWRiLXdpdGgtcmVzb3VyY2VzLXhtbC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi13aXRoLXJlc291cmNlcy14bWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIAogLS0+CiAKLTwhRE9DVFlQRSBzdW4td2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOS4wIFNlcnZsZXQgMi41Ly9FTiIgCis8IURPQ1RZUEUgc3VuLXdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDkuMCBTZXJ2bGV0IDIuNS8vRU4iCiAgICJodHRwOi8vd3d3LnN1bi5jb20vc29mdHdhcmUvYXBwc2VydmVyL2R0ZHMvc3VuLXdlYi1hcHBfMl81LTAuZHRkIj4KIDxzdW4td2ViLWFwcCBlcnJvci11cmw9IiI+CiA8L3N1bi13ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGItd2l0aC1yZXNvdXJjZXMteG1sL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi13aXRoLXJlc291cmNlcy14bWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAppbmRleCBlOWI4MjRiLi43YmYyYTFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi13aXRoLXJlc291cmNlcy14bWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi13aXRoLXJlc291cmNlcy14bWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApAQCAtMTcsOSArMTcsOSBAQAogCiAtLT4KIAotPHdlYi1hcHAgdmVyc2lvbj0iMi41IiAKLSAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgCi0gIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorPHdlYi1hcHAgdmVyc2lvbj0iMi41IgorICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5Db2ZmZWVTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGIvcG9tLnhtbAppbmRleCA0YWU0Mjk0Li4wN2QzNWU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWRiL3BvbS54bWwKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CiAgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2tpcD5mYWxzZTwvc2tpcD4KLQkJCSAgIDxlbmFibGVBc3NlcnRpb25zPmZhbHNlPC9lbmFibGVBc3NlcnRpb25zPgorICAgICAgICAgICAgICAgPGVuYWJsZUFzc2VydGlvbnM+ZmFsc2U8L2VuYWJsZUFzc2VydGlvbnM+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgogICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWRiL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGIvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKaW5kZXggOTZkY2MzNy4uYWI5OWEzMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGIvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGIvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIAogLS0+CiAKLTwhRE9DVFlQRSBzdW4td2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOS4wIFNlcnZsZXQgMi41Ly9FTiIgCis8IURPQ1RZUEUgc3VuLXdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDkuMCBTZXJ2bGV0IDIuNS8vRU4iCiAgICJodHRwOi8vd3d3LnN1bi5jb20vc29mdHdhcmUvYXBwc2VydmVyL2R0ZHMvc3VuLXdlYi1hcHBfMl81LTAuZHRkIj4KIDxzdW4td2ViLWFwcCBlcnJvci11cmw9IiI+CiAgIDxyZXNvdXJjZS1yZWY+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGIvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAppbmRleCA5MWMwM2EzLi42NzJjMTVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWRiL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTE3LDkgKzE3LDkgQEAKIAogLS0+CiAKLTx3ZWItYXBwIHZlcnNpb249IjIuNSIgCi0gIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIAotICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKzx3ZWItYXBwIHZlcnNpb249IjIuNSIKKyAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+QmFzaWNEQlBhYVNTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9iYXNpY2RiL0Jhc2ljREJQYWFTVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtZGIvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvYmFzaWNkYi9CYXNpY0RCUGFhU1Rlc3QuamF2YQppbmRleCBjYjRiNWE1Li5jNWEyMjMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1kYi9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9iYXNpY2RiL0Jhc2ljREJQYWFTVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWRiL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2Jhc2ljZGIvQmFzaWNEQlBhYVNUZXN0LmphdmEKQEAgLTQ4LDEzNiArNDgsMTM2IEBACiAKIHB1YmxpYyBjbGFzcyBCYXNpY0RCUGFhU1Rlc3QgewogCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLQkJLy8gMS4gQm9vdHN0cmFwIEdsYXNzRmlzaCBEQVMgaW4gZW1iZWRkZWQgbW9kZS4KLQkJR2xhc3NGaXNoUHJvcGVydGllcyBnbGFzc0Zpc2hQcm9wZXJ0aWVzID0gbmV3IEdsYXNzRmlzaFByb3BlcnRpZXMoKTsKLQkJZ2xhc3NGaXNoUHJvcGVydGllcy5zZXRJbnN0YW5jZVJvb3QoU3lzdGVtLmdldGVudigiUzFBU19IT01FIikKLQkJCQkrICIvZG9tYWlucy9kb21haW4xIik7Ci0JCWdsYXNzRmlzaFByb3BlcnRpZXMuc2V0Q29uZmlnRmlsZVJlYWRPbmx5KGZhbHNlKTsKLQkJR2xhc3NGaXNoIGdsYXNzZmlzaCA9IEdsYXNzRmlzaFJ1bnRpbWUuYm9vdHN0cmFwKCkubmV3R2xhc3NGaXNoKAotCQkJCWdsYXNzRmlzaFByb3BlcnRpZXMpOwotCQlQcmludFN0cmVhbSBzeXNvdXQgPSBTeXN0ZW0ub3V0OwotCQlnbGFzc2Zpc2guc3RhcnQoKTsKLQkJU3lzdGVtLnNldE91dChzeXNvdXQpOworICAgICAgICAvLyAxLiBCb290c3RyYXAgR2xhc3NGaXNoIERBUyBpbiBlbWJlZGRlZCBtb2RlLgorICAgICAgICBHbGFzc0Zpc2hQcm9wZXJ0aWVzIGdsYXNzRmlzaFByb3BlcnRpZXMgPSBuZXcgR2xhc3NGaXNoUHJvcGVydGllcygpOworICAgICAgICBnbGFzc0Zpc2hQcm9wZXJ0aWVzLnNldEluc3RhbmNlUm9vdChTeXN0ZW0uZ2V0ZW52KCJTMUFTX0hPTUUiKQorICAgICAgICAgICAgICAgICsgIi9kb21haW5zL2RvbWFpbjEiKTsKKyAgICAgICAgZ2xhc3NGaXNoUHJvcGVydGllcy5zZXRDb25maWdGaWxlUmVhZE9ubHkoZmFsc2UpOworICAgICAgICBHbGFzc0Zpc2ggZ2xhc3NmaXNoID0gR2xhc3NGaXNoUnVudGltZS5ib290c3RyYXAoKS5uZXdHbGFzc0Zpc2goCisgICAgICAgICAgICAgICAgZ2xhc3NGaXNoUHJvcGVydGllcyk7CisgICAgICAgIFByaW50U3RyZWFtIHN5c291dCA9IFN5c3RlbS5vdXQ7CisgICAgICAgIGdsYXNzZmlzaC5zdGFydCgpOworICAgICAgICBTeXN0ZW0uc2V0T3V0KHN5c291dCk7CiAKLQkJLy8gMi4gRGVwbG95IHRoZSBQYWFTIGFwcGxpY2F0aW9uLgotCQlGaWxlIGFyY2hpdmUgPSBuZXcgRmlsZShTeXN0ZW0uZ2V0UHJvcGVydHkoImJhc2VkaXIiKQotCQkJCSsgIi90YXJnZXQvYmFzaWNfZGJfcGFhc19zYW1wbGUud2FyIik7IC8vIFRPRE8gOjogdXNlIG12biBhcGlzCi0JCQkJCQkJCQkJCQkJCS8vIHRvIGdldCB0aGUgYXJjaGl2ZQotCQkJCQkJCQkJCQkJCQkvLyBsb2NhdGlvbi4KLQkJQXNzZXJ0LmFzc2VydFRydWUoYXJjaGl2ZS5leGlzdHMoKSk7CisgICAgICAgIC8vIDIuIERlcGxveSB0aGUgUGFhUyBhcHBsaWNhdGlvbi4KKyAgICAgICAgRmlsZSBhcmNoaXZlID0gbmV3IEZpbGUoU3lzdGVtLmdldFByb3BlcnR5KCJiYXNlZGlyIikKKyAgICAgICAgICAgICAgICArICIvdGFyZ2V0L2Jhc2ljX2RiX3BhYXNfc2FtcGxlLndhciIpOyAvLyBUT0RPIDo6IHVzZSBtdm4gYXBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBnZXQgdGhlIGFyY2hpdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9jYXRpb24uCisgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGFyY2hpdmUuZXhpc3RzKCkpOwogCi0JCURlcGxveWVyIGRlcGxveWVyID0gbnVsbDsKLQkJU3RyaW5nIGFwcE5hbWUgPSBudWxsOwotCQl0cnkgeworICAgICAgICBEZXBsb3llciBkZXBsb3llciA9IG51bGw7CisgICAgICAgIFN0cmluZyBhcHBOYW1lID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKIAotCQkJZGVwbG95ZXIgPSBnbGFzc2Zpc2guZ2V0RGVwbG95ZXIoKTsKLQkJCWFwcE5hbWUgPSBkZXBsb3llci5kZXBsb3koYXJjaGl2ZSk7CisgICAgICAgICAgICBkZXBsb3llciA9IGdsYXNzZmlzaC5nZXREZXBsb3llcigpOworICAgICAgICAgICAgYXBwTmFtZSA9IGRlcGxveWVyLmRlcGxveShhcmNoaXZlKTsKIAotCQkJU3lzdGVtLmVyci5wcmludGxuKCJEZXBsb3llZCBbIiArIGFwcE5hbWUgKyAiXSIpOwotCQkJQXNzZXJ0LmFzc2VydE5vdE51bGwoYXBwTmFtZSk7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkRlcGxveWVkIFsiICsgYXBwTmFtZSArICJdIik7CisgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChhcHBOYW1lKTsKIAotCQkJQ29tbWFuZFJ1bm5lciBjb21tYW5kUnVubmVyID0gZ2xhc3NmaXNoLmdldENvbW1hbmRSdW5uZXIoKTsKLQkJCUNvbW1hbmRSZXN1bHQgcmVzdWx0ID0gY29tbWFuZFJ1bm5lci5ydW4oImxpc3Qtc2VydmljZXMiKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5saXN0LXNlcnZpY2VzIGNvbW1hbmQgb3V0cHV0IFsgIgotCQkJCQkrIHJlc3VsdC5nZXRPdXRwdXQoKSArICJdIik7CisgICAgICAgICAgICBDb21tYW5kUnVubmVyIGNvbW1hbmRSdW5uZXIgPSBnbGFzc2Zpc2guZ2V0Q29tbWFuZFJ1bm5lcigpOworICAgICAgICAgICAgQ29tbWFuZFJlc3VsdCByZXN1bHQgPSBjb21tYW5kUnVubmVyLnJ1bigibGlzdC1zZXJ2aWNlcyIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbmxpc3Qtc2VydmljZXMgY29tbWFuZCBvdXRwdXQgWyAiCisgICAgICAgICAgICAgICAgICAgICsgcmVzdWx0LmdldE91dHB1dCgpICsgIl0iKTsKIAotCQkJLy8gMy4gQWNjZXNzIHRoZSBhcHAgdG8gbWFrZSBzdXJlIFBhYVMgYXBwIGlzIGNvcnJlY3RseSBwcm92aXNpb25lZC4KKyAgICAgICAgICAgIC8vIDMuIEFjY2VzcyB0aGUgYXBwIHRvIG1ha2Ugc3VyZSBQYWFTIGFwcCBpcyBjb3JyZWN0bHkgcHJvdmlzaW9uZWQuCiAKLQkJCVN0cmluZyBIVFRQX1BPUlQgPSAoU3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKSAhPSBudWxsKSA/IFN5c3RlbQotCQkJCQkuZ2V0UHJvcGVydHkoImh0dHAucG9ydCIpIDogIjI4MDgwIjsKKyAgICAgICAgICAgIFN0cmluZyBIVFRQX1BPUlQgPSAoU3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKSAhPSBudWxsKSA/IFN5c3RlbQorICAgICAgICAgICAgICAgICAgICAuZ2V0UHJvcGVydHkoImh0dHAucG9ydCIpIDogIjI4MDgwIjsKIAotCQkJLyoqCi0JCQkgKiBMb29rIGZvciBhIHRhYmxlIGVudHJ5IGJ5IG5hbWUgU1lTRklMRVMgaW4gdGhlIG91dHB1dCB0byBlbnN1cmUKLQkJCSAqIERCIGlzIHByb3Zpc2lvbmVkCi0JCQkgKiAKLQkJCSAqLwotCQkJU3RyaW5nIGluc3RhbmNlSVAgPSBnZXRMQklQQWRkcmVzcyhnbGFzc2Zpc2gpOworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBMb29rIGZvciBhIHRhYmxlIGVudHJ5IGJ5IG5hbWUgU1lTRklMRVMgaW4gdGhlIG91dHB1dCB0byBlbnN1cmUKKyAgICAgICAgICAgICAqIERCIGlzIHByb3Zpc2lvbmVkCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBTdHJpbmcgaW5zdGFuY2VJUCA9IGdldExCSVBBZGRyZXNzKGdsYXNzZmlzaCk7CiAKLQkJCWdldCgiaHR0cDovLyIgKyBpbnN0YW5jZUlQICsgIjoiICsgSFRUUF9QT1JUCi0JCQkJCSsgIi9iYXNpY19kYl9wYWFzX3NhbXBsZS9CYXNpY0RCUGFhU1NlcnZsZXQiLCAiU1lTRklMRVMiKTsKLQkJCS8vIDQuIFVuZGVwbG95IHRoZSBQYWFTLURCIGFwcGxpY2F0aW9uIHVzaW5nIHVuZGVwbG95LgotCQl9IGZpbmFsbHkgewotCQkJaWYgKGFwcE5hbWUgIT0gbnVsbCkgewotCQkJCWRlcGxveWVyLnVuZGVwbG95KGFwcE5hbWUpOwotCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiVW5kZXBsb3llZCBbIiArIGFwcE5hbWUgKyAiXSIpOwotCQkJCXRyeSB7Ci0JCQkJCWJvb2xlYW4gdW5kZXBsb3lDbGVhbiA9IGZhbHNlOwotCQkJCQlDb21tYW5kUmVzdWx0IGNvbW1hbmRSZXN1bHQgPSBnbGFzc2Zpc2guZ2V0Q29tbWFuZFJ1bm5lcigpCi0JCQkJCQkJLnJ1bigibGlzdC1zZXJ2aWNlcyIpOwotCQkJCQlpZiAoY29tbWFuZFJlc3VsdC5nZXRPdXRwdXQoKS5jb250YWlucygiTm90aGluZyB0byBsaXN0LiIpKSB7Ci0JCQkJCQl1bmRlcGxveUNsZWFuID0gdHJ1ZTsKLQkJCQkJfQotCQkJCQlBc3NlcnQuYXNzZXJ0VHJ1ZSh1bmRlcGxveUNsZWFuKTsKLQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCQlTeXN0ZW0uZXJyCi0JCQkJCQkJLnByaW50bG4oIkNvdWxkbid0IHZhcmlmeSB3aGV0aGVyIHVuZGVwbG95IHN1Y2NlZWRlZCIpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KKyAgICAgICAgICAgIGdldCgiaHR0cDovLyIgKyBpbnN0YW5jZUlQICsgIjoiICsgSFRUUF9QT1JUCisgICAgICAgICAgICAgICAgICAgICsgIi9iYXNpY19kYl9wYWFzX3NhbXBsZS9CYXNpY0RCUGFhU1NlcnZsZXQiLCAiU1lTRklMRVMiKTsKKyAgICAgICAgICAgIC8vIDQuIFVuZGVwbG95IHRoZSBQYWFTLURCIGFwcGxpY2F0aW9uIHVzaW5nIHVuZGVwbG95LgorICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgaWYgKGFwcE5hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGRlcGxveWVyLnVuZGVwbG95KGFwcE5hbWUpOworICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVW5kZXBsb3llZCBbIiArIGFwcE5hbWUgKyAiXSIpOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gdW5kZXBsb3lDbGVhbiA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBDb21tYW5kUmVzdWx0IGNvbW1hbmRSZXN1bHQgPSBnbGFzc2Zpc2guZ2V0Q29tbWFuZFJ1bm5lcigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJ1bigibGlzdC1zZXJ2aWNlcyIpOworICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZFJlc3VsdC5nZXRPdXRwdXQoKS5jb250YWlucygiTm90aGluZyB0byBsaXN0LiIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bmRlcGxveUNsZWFuID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSh1bmRlcGxveUNsZWFuKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnByaW50bG4oIkNvdWxkbid0IHZhcmlmeSB3aGV0aGVyIHVuZGVwbG95IHN1Y2NlZWRlZCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIAotCXByaXZhdGUgdm9pZCBnZXQoU3RyaW5nIHVybFN0ciwgU3RyaW5nIHJlc3VsdCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVVSTCB1cmwgPSBuZXcgVVJMKHVybFN0cik7Ci0JCVVSTENvbm5lY3Rpb24geWMgPSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJcblVSTENvbm5lY3Rpb24gWyIgKyB5YyArICJdIDogIik7Ci0JCUJ1ZmZlcmVkUmVhZGVyIGluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcigKLQkJCQl5Yy5nZXRJbnB1dFN0cmVhbSgpKSk7Ci0JCVN0cmluZyBsaW5lID0gbnVsbDsKLQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQl3aGlsZSAoKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7Ci0JCQlpZiAobGluZS5pbmRleE9mKHJlc3VsdCkgIT0gLTEpIHsKLQkJCQlmb3VuZCA9IHRydWU7Ci0JCQl9Ci0JCX0KLQkJQXNzZXJ0LmFzc2VydFRydWUoZm91bmQpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuKioqKiogU1VDQ0VTUyAqKioqIEZvdW5kIFsiICsgcmVzdWx0Ci0JCQkJKyAiXSBpbiB0aGUgcmVzcG9uc2UuKioqKipcbiIpOwotCX0KKyAgICBwcml2YXRlIHZvaWQgZ2V0KFN0cmluZyB1cmxTdHIsIFN0cmluZyByZXN1bHQpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCh1cmxTdHIpOworICAgICAgICBVUkxDb25uZWN0aW9uIHljID0gdXJsLm9wZW5Db25uZWN0aW9uKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5VUkxDb25uZWN0aW9uIFsiICsgeWMgKyAiXSA6ICIpOworICAgICAgICBCdWZmZXJlZFJlYWRlciBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoCisgICAgICAgICAgICAgICAgeWMuZ2V0SW5wdXRTdHJlYW0oKSkpOworICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CisgICAgICAgIGJvb2xlYW4gZm91bmQgPSBmYWxzZTsKKyAgICAgICAgd2hpbGUgKChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOworICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZihyZXN1bHQpICE9IC0xKSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGZvdW5kKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbioqKioqIFNVQ0NFU1MgKioqKiBGb3VuZCBbIiArIHJlc3VsdAorICAgICAgICAgICAgICAgICsgIl0gaW4gdGhlIHJlc3BvbnNlLioqKioqXG4iKTsKKyAgICB9CiAKLQlwcml2YXRlIFN0cmluZyBnZXRMQklQQWRkcmVzcyhHbGFzc0Zpc2ggZ2xhc3NmaXNoKSB7Ci0JCVN0cmluZyBsYklQID0gbnVsbDsKLQkJU3RyaW5nIElQQWRkcmVzc1BhdHRlcm4gPSAiSVAtQUREUkVTU1xccypcbiooLiopXFxzKlxuKChbMDFdP1xcZCp8MlswLTRdXFxkfDI1WzAtNV0pXFwuIgotCQkJCSsgIihbMDFdP1xcZFxcZD98MlswLTRdXFxkfDI1WzAtNV0pXFwuIgotCQkJCSsgIihbMDFdP1xcZFxcZD98MlswLTRdXFxkfDI1WzAtNV0pXFwuIgotCQkJCSsgIihbMC05XT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKSkiOwotCQl0cnkgewotCQkJQ29tbWFuZFJ1bm5lciBjb21tYW5kUnVubmVyID0gZ2xhc3NmaXNoLmdldENvbW1hbmRSdW5uZXIoKTsKLQkJCVN0cmluZyByZXN1bHQgPSBjb21tYW5kUnVubmVyCi0JCQkJCS5ydW4oImxpc3Qtc2VydmljZXMiLCAiLS10eXBlIiwgIkxCIiwKLQkJCQkJCQkiLS1vdXRwdXQiLCAiSVAtQUREUkVTUyIpLmdldE91dHB1dCgpLnRvU3RyaW5nKCk7Ci0JCQlpZiAocmVzdWx0LmNvbnRhaW5zKCJOb3RoaW5nIHRvIGxpc3QuIikpIHsKLQkJCQlyZXN1bHQgPSBjb21tYW5kUnVubmVyCi0JCQkJCQkucnVuKCJsaXN0LXNlcnZpY2VzIiwgIi0tdHlwZSIsICJKYXZhRUUiLCAiLS1vdXRwdXQiLAotCQkJCQkJCQkiSVAtQUREUkVTUyIpLmdldE91dHB1dCgpLnRvU3RyaW5nKCk7CisgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0TEJJUEFkZHJlc3MoR2xhc3NGaXNoIGdsYXNzZmlzaCkgeworICAgICAgICBTdHJpbmcgbGJJUCA9IG51bGw7CisgICAgICAgIFN0cmluZyBJUEFkZHJlc3NQYXR0ZXJuID0gIklQLUFERFJFU1NcXHMqXG4qKC4qKVxccypcbigoWzAxXT9cXGQqfDJbMC00XVxcZHwyNVswLTVdKVxcLiIKKyAgICAgICAgICAgICAgICArICIoWzAxXT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKVxcLiIKKyAgICAgICAgICAgICAgICArICIoWzAxXT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKVxcLiIKKyAgICAgICAgICAgICAgICArICIoWzAtOV0/XFxkXFxkP3wyWzAtNF1cXGR8MjVbMC01XSkpIjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENvbW1hbmRSdW5uZXIgY29tbWFuZFJ1bm5lciA9IGdsYXNzZmlzaC5nZXRDb21tYW5kUnVubmVyKCk7CisgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gY29tbWFuZFJ1bm5lcgorICAgICAgICAgICAgICAgICAgICAucnVuKCJsaXN0LXNlcnZpY2VzIiwgIi0tdHlwZSIsICJMQiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tb3V0cHV0IiwgIklQLUFERFJFU1MiKS5nZXRPdXRwdXQoKS50b1N0cmluZygpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5jb250YWlucygiTm90aGluZyB0byBsaXN0LiIpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tbWFuZFJ1bm5lcgorICAgICAgICAgICAgICAgICAgICAgICAgLnJ1bigibGlzdC1zZXJ2aWNlcyIsICItLXR5cGUiLCAiSmF2YUVFIiwgIi0tb3V0cHV0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklQLUFERFJFU1MiKS5nZXRPdXRwdXQoKS50b1N0cmluZygpOwogCi0JCQkJUGF0dGVybiBwID0gUGF0dGVybi5jb21waWxlKElQQWRkcmVzc1BhdHRlcm4pOwotCQkJCU1hdGNoZXIgbSA9IHAubWF0Y2hlcihyZXN1bHQpOwotCQkJCWlmIChtLmZpbmQoKSkgewotCQkJCQlsYklQID0gbS5ncm91cCgyKTsKLQkJCQl9IGVsc2UgewotCQkJCQlsYklQID0gImxvY2FsaG9zdCI7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlQYXR0ZXJuIHAgPSBQYXR0ZXJuLmNvbXBpbGUoSVBBZGRyZXNzUGF0dGVybik7Ci0JCQkJTWF0Y2hlciBtID0gcC5tYXRjaGVyKHJlc3VsdCk7Ci0JCQkJaWYgKG0uZmluZCgpKSB7Ci0JCQkJCWxiSVAgPSBtLmdyb3VwKDIpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWxiSVAgPSAibG9jYWxob3N0IjsKLQkJCQl9CisgICAgICAgICAgICAgICAgUGF0dGVybiBwID0gUGF0dGVybi5jb21waWxlKElQQWRkcmVzc1BhdHRlcm4pOworICAgICAgICAgICAgICAgIE1hdGNoZXIgbSA9IHAubWF0Y2hlcihyZXN1bHQpOworICAgICAgICAgICAgICAgIGlmIChtLmZpbmQoKSkgeworICAgICAgICAgICAgICAgICAgICBsYklQID0gbS5ncm91cCgyKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsYklQID0gImxvY2FsaG9zdCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBQYXR0ZXJuIHAgPSBQYXR0ZXJuLmNvbXBpbGUoSVBBZGRyZXNzUGF0dGVybik7CisgICAgICAgICAgICAgICAgTWF0Y2hlciBtID0gcC5tYXRjaGVyKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgaWYgKG0uZmluZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGxiSVAgPSBtLmdyb3VwKDIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxiSVAgPSAibG9jYWxob3N0IjsKKyAgICAgICAgICAgICAgICB9CiAKLQkJCX0KKyAgICAgICAgICAgIH0KIAotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJSZWdleCBoYXMgdGhyb3duIGFuIGV4Y2VwdGlvbiAiCi0JCQkJCSsgZS5nZXRNZXNzYWdlKCkpOwotCQkJcmV0dXJuICJsb2NhbGhvc3QiOwotCQl9Ci0JCXJldHVybiBsYklQOwotCX0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVnZXggaGFzIHRocm93biBhbiBleGNlcHRpb24gIgorICAgICAgICAgICAgICAgICAgICArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIHJldHVybiAibG9jYWxob3N0IjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGJJUDsKKyAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWpwYS9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtanBhL3BvbS54bWwKaW5kZXggOTM5MmQ3ZC4uZGNlMGMyMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtanBhL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtanBhL3BvbS54bWwKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CiAgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2tpcD5mYWxzZTwvc2tpcD4KLQkJCSAgICA8ZW5hYmxlQXNzZXJ0aW9ucz5mYWxzZTwvZW5hYmxlQXNzZXJ0aW9ucz4KKyAgICAgICAgICAgICAgICA8ZW5hYmxlQXNzZXJ0aW9ucz5mYWxzZTwvZW5hYmxlQXNzZXJ0aW9ucz4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CiAgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICAgICAgPHZlcnNpb24+My4xPC92ZXJzaW9uPgogICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KICAgICAgICAgPC9kZXBlbmRlbmN5PgotCTxkZXBlbmRlbmN5PgorICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjQuMTMuMjwvdmVyc2lvbj4KQEAgLTg0LDggKzg0LDggQEAKICAgICAgICAgICAgIDwvc3lzdGVtUGF0aD4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgIAkgICAgPGdyb3VwSWQ+amFrYXJ0YS50cmFuc2FjdGlvbjwvZ3JvdXBJZD4KLSAgICAgIAkgICAgPGFydGlmYWN0SWQ+anRhPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICA8Z3JvdXBJZD5qYWthcnRhLnRyYW5zYWN0aW9uPC9ncm91cElkPgorICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdGE8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgPC9kZXBlbmRlbmNpZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1qcGEvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvYmFzaWNqcGEvQW5pbWFsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1qcGEvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvYmFzaWNqcGEvQW5pbWFsLmphdmEKaW5kZXggODE0MzBmNS4uZDk3NDI3NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtanBhL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2Jhc2ljanBhL0FuaW1hbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWpwYS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9iYXNpY2pwYS9BbmltYWwuamF2YQpAQCAtMjQsMjUgKzI0LDI1IEBACiBpbXBvcnQgamFrYXJ0YS5wZXJzaXN0ZW5jZS5JZENsYXNzOwogaW1wb3J0IGpha2FydGEucGVyc2lzdGVuY2UuVGFibGU7CiAKLSAgIAorCiAKIC8qKgogICoKICAqIEBhdXRob3IgaXNoYW4udmlzaG5vaUBqYXZhLm5ldAogICovCi1ARW50aXR5IAorQEVudGl0eQogQFRhYmxlKG5hbWUgPSAiWk9PX0RJUkVDVE9SWSIpCiBwdWJsaWMgY2xhc3MgQW5pbWFsIGltcGxlbWVudHMgU2VyaWFsaXphYmxlIHsKLSAgICAKKwogICAgIEBJZAogICAgIHByaXZhdGUgaW50IElEOwotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIHNwZWNpZXM7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBjYWdlTnVtYmVyOwotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgeWVhck9mQmlydGg7CiAKICAgICBwdWJsaWMgaW50IGdldElEKCkgewpAQCAtNTEsNyArNTEsNyBAQAogCiAgICAgcHVibGljIHZvaWQgc2V0SUQoaW50IElEKSB7CiAgICAgICAgIHRoaXMuSUQgPSBJRDsKLSAgICB9ICAgIAorICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2FnZU51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIGNhZ2VOdW1iZXI7CkBAIC04NCw3ICs4NCw3IEBACiAgICAgcHVibGljIHZvaWQgc2V0WWVhck9mQmlydGgoU3RyaW5nIHllYXJPZkJpcnRoKSB7CiAgICAgICAgIHRoaXMueWVhck9mQmlydGggPSB5ZWFyT2ZCaXJ0aDsKICAgICB9Ci0gIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgcmV0dXJuICJlbnRpdHkuTmV3RW50aXR5W2lkPSIgKyBJRCArICJdIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWpwYS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9iYXNpY2pwYS9CYXNpY0pQQVBhYVNUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1qcGEvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvYmFzaWNqcGEvQmFzaWNKUEFQYWFTVGVzdC5qYXZhCmluZGV4IDdiNjM4OWEuLjlkYzljZGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLWpwYS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9iYXNpY2pwYS9CYXNpY0pQQVBhYVNUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtanBhL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2Jhc2ljanBhL0Jhc2ljSlBBUGFhU1Rlc3QuamF2YQpAQCAtNDgsMTMzICs0OCwxMzMgQEAKIAogcHVibGljIGNsYXNzIEJhc2ljSlBBUGFhU1Rlc3QgewogCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLQkJLy8gMS4gQm9vdHN0cmFwIEdsYXNzRmlzaCBEQVMgaW4gZW1iZWRkZWQgbW9kZS4KLQkJR2xhc3NGaXNoUHJvcGVydGllcyBnbGFzc0Zpc2hQcm9wZXJ0aWVzID0gbmV3IEdsYXNzRmlzaFByb3BlcnRpZXMoKTsKLQkJZ2xhc3NGaXNoUHJvcGVydGllcy5zZXRJbnN0YW5jZVJvb3QoU3lzdGVtLmdldGVudigiUzFBU19IT01FIikKLQkJCQkrICIvZG9tYWlucy9kb21haW4xIik7Ci0JCWdsYXNzRmlzaFByb3BlcnRpZXMuc2V0Q29uZmlnRmlsZVJlYWRPbmx5KGZhbHNlKTsKLQkJR2xhc3NGaXNoIGdsYXNzZmlzaCA9IEdsYXNzRmlzaFJ1bnRpbWUuYm9vdHN0cmFwKCkubmV3R2xhc3NGaXNoKAotCQkJCWdsYXNzRmlzaFByb3BlcnRpZXMpOwotCQlQcmludFN0cmVhbSBzeXNvdXQgPSBTeXN0ZW0ub3V0OwotCQlnbGFzc2Zpc2guc3RhcnQoKTsKLQkJU3lzdGVtLnNldE91dChzeXNvdXQpOworICAgICAgICAvLyAxLiBCb290c3RyYXAgR2xhc3NGaXNoIERBUyBpbiBlbWJlZGRlZCBtb2RlLgorICAgICAgICBHbGFzc0Zpc2hQcm9wZXJ0aWVzIGdsYXNzRmlzaFByb3BlcnRpZXMgPSBuZXcgR2xhc3NGaXNoUHJvcGVydGllcygpOworICAgICAgICBnbGFzc0Zpc2hQcm9wZXJ0aWVzLnNldEluc3RhbmNlUm9vdChTeXN0ZW0uZ2V0ZW52KCJTMUFTX0hPTUUiKQorICAgICAgICAgICAgICAgICsgIi9kb21haW5zL2RvbWFpbjEiKTsKKyAgICAgICAgZ2xhc3NGaXNoUHJvcGVydGllcy5zZXRDb25maWdGaWxlUmVhZE9ubHkoZmFsc2UpOworICAgICAgICBHbGFzc0Zpc2ggZ2xhc3NmaXNoID0gR2xhc3NGaXNoUnVudGltZS5ib290c3RyYXAoKS5uZXdHbGFzc0Zpc2goCisgICAgICAgICAgICAgICAgZ2xhc3NGaXNoUHJvcGVydGllcyk7CisgICAgICAgIFByaW50U3RyZWFtIHN5c291dCA9IFN5c3RlbS5vdXQ7CisgICAgICAgIGdsYXNzZmlzaC5zdGFydCgpOworICAgICAgICBTeXN0ZW0uc2V0T3V0KHN5c291dCk7CiAKLQkJLy8gMi4gRGVwbG95IHRoZSBQYWFTLWJvb2tzdG9yZSBhcHBsaWNhdGlvbi4KLQkJRmlsZSBhcmNoaXZlID0gbmV3IEZpbGUoU3lzdGVtLmdldFByb3BlcnR5KCJiYXNlZGlyIikKLQkJCQkrICIvdGFyZ2V0L2Jhc2ljLWpwYS53YXIiKTsgLy8gVE9ETyA6OiB1c2UgbXZuIGFwaXMgdG8gZ2V0IHRoZQotCQkJCQkJCQkJCQkvLyBhcmNoaXZlIGxvY2F0aW9uLgotCQlBc3NlcnQuYXNzZXJ0VHJ1ZShhcmNoaXZlLmV4aXN0cygpKTsKKyAgICAgICAgLy8gMi4gRGVwbG95IHRoZSBQYWFTLWJvb2tzdG9yZSBhcHBsaWNhdGlvbi4KKyAgICAgICAgRmlsZSBhcmNoaXZlID0gbmV3IEZpbGUoU3lzdGVtLmdldFByb3BlcnR5KCJiYXNlZGlyIikKKyAgICAgICAgICAgICAgICArICIvdGFyZ2V0L2Jhc2ljLWpwYS53YXIiKTsgLy8gVE9ETyA6OiB1c2UgbXZuIGFwaXMgdG8gZ2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcmNoaXZlIGxvY2F0aW9uLgorICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShhcmNoaXZlLmV4aXN0cygpKTsKIAotCQlEZXBsb3llciBkZXBsb3llciA9IG51bGw7Ci0JCVN0cmluZyBhcHBOYW1lID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWRlcGxveWVyID0gZ2xhc3NmaXNoLmdldERlcGxveWVyKCk7Ci0JCQlhcHBOYW1lID0gZGVwbG95ZXIuZGVwbG95KGFyY2hpdmUpOworICAgICAgICBEZXBsb3llciBkZXBsb3llciA9IG51bGw7CisgICAgICAgIFN0cmluZyBhcHBOYW1lID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGRlcGxveWVyID0gZ2xhc3NmaXNoLmdldERlcGxveWVyKCk7CisgICAgICAgICAgICBhcHBOYW1lID0gZGVwbG95ZXIuZGVwbG95KGFyY2hpdmUpOwogCi0JCQlTeXN0ZW0uZXJyLnByaW50bG4oIkRlcGxveWVkIFsiICsgYXBwTmFtZSArICJdIik7Ci0JCQlBc3NlcnQuYXNzZXJ0Tm90TnVsbChhcHBOYW1lKTsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRGVwbG95ZWQgWyIgKyBhcHBOYW1lICsgIl0iKTsKKyAgICAgICAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKGFwcE5hbWUpOwogCi0JCQlDb21tYW5kUnVubmVyIGNvbW1hbmRSdW5uZXIgPSBnbGFzc2Zpc2guZ2V0Q29tbWFuZFJ1bm5lcigpOwotCQkJQ29tbWFuZFJlc3VsdCByZXN1bHQgPSBjb21tYW5kUnVubmVyLnJ1bigibGlzdC1zZXJ2aWNlcyIpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJcbmxpc3Qtc2VydmljZXMgY29tbWFuZCBvdXRwdXQgWyAiCi0JCQkJCSsgcmVzdWx0LmdldE91dHB1dCgpICsgIl0iKTsKKyAgICAgICAgICAgIENvbW1hbmRSdW5uZXIgY29tbWFuZFJ1bm5lciA9IGdsYXNzZmlzaC5nZXRDb21tYW5kUnVubmVyKCk7CisgICAgICAgICAgICBDb21tYW5kUmVzdWx0IHJlc3VsdCA9IGNvbW1hbmRSdW5uZXIucnVuKCJsaXN0LXNlcnZpY2VzIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxubGlzdC1zZXJ2aWNlcyBjb21tYW5kIG91dHB1dCBbICIKKyAgICAgICAgICAgICAgICAgICAgKyByZXN1bHQuZ2V0T3V0cHV0KCkgKyAiXSIpOwogCi0JCQkvLyAzLiBBY2Nlc3MgdGhlIGFwcCB0byBtYWtlIHN1cmUgUGFhUy1iYXNpYy1qcGEgYXBwIGlzIGNvcnJlY3RseQotCQkJLy8gcHJvdmlzaW9uZWQuCisgICAgICAgICAgICAvLyAzLiBBY2Nlc3MgdGhlIGFwcCB0byBtYWtlIHN1cmUgUGFhUy1iYXNpYy1qcGEgYXBwIGlzIGNvcnJlY3RseQorICAgICAgICAgICAgLy8gcHJvdmlzaW9uZWQuCiAKLQkJCVN0cmluZyBIVFRQX1BPUlQgPSAoU3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKSAhPSBudWxsKSA/IFN5c3RlbQotCQkJCQkuZ2V0UHJvcGVydHkoImh0dHAucG9ydCIpIDogIjI4MDgwIjsKKyAgICAgICAgICAgIFN0cmluZyBIVFRQX1BPUlQgPSAoU3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKSAhPSBudWxsKSA/IFN5c3RlbQorICAgICAgICAgICAgICAgICAgICAuZ2V0UHJvcGVydHkoImh0dHAucG9ydCIpIDogIjI4MDgwIjsKIAotCQkgICAgICAgICAgICBTdHJpbmcgaW5zdGFuY2VJUCA9IGdldExCSVBBZGRyZXNzKGdsYXNzZmlzaCk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpbnN0YW5jZUlQID0gZ2V0TEJJUEFkZHJlc3MoZ2xhc3NmaXNoKTsKIAotCQkJCQlnZXQoImh0dHA6Ly8iICsgaW5zdGFuY2VJUCArICI6IiArIEhUVFBfUE9SVAotCQkJCQkrICIvYmFzaWMtanBhL2xpc3QiLCJIZXJlIGlzIGEgbGlzdCBvZiBhbmltYWxzIGluIHRoZSB6b28uIik7CisgICAgICAgICAgICAgICAgICAgIGdldCgiaHR0cDovLyIgKyBpbnN0YW5jZUlQICsgIjoiICsgSFRUUF9QT1JUCisgICAgICAgICAgICAgICAgICAgICsgIi9iYXNpYy1qcGEvbGlzdCIsIkhlcmUgaXMgYSBsaXN0IG9mIGFuaW1hbHMgaW4gdGhlIHpvby4iKTsKIAotCQkJLy8gNC4gVW5kZXBsb3kgdGhlIFpvbyBjYXRhbG9ndWUgYXBwbGljYXRpb24gLgorICAgICAgICAgICAgLy8gNC4gVW5kZXBsb3kgdGhlIFpvbyBjYXRhbG9ndWUgYXBwbGljYXRpb24gLgogCi0JCX0gZmluYWxseSB7Ci0JCQlpZiAoYXBwTmFtZSAhPSBudWxsKSB7Ci0JCQkJZGVwbG95ZXIudW5kZXBsb3koYXBwTmFtZSk7Ci0JCQkJU3lzdGVtLmVyci5wcmludGxuKCJVbmRlcGxveWVkIFsiICsgYXBwTmFtZSArICJdIik7Ci0JCQkJdHJ5IHsKLQkJCQkJYm9vbGVhbiB1bmRlcGxveUNsZWFuID0gZmFsc2U7Ci0JCQkJCUNvbW1hbmRSZXN1bHQgY29tbWFuZFJlc3VsdCA9IGdsYXNzZmlzaC5nZXRDb21tYW5kUnVubmVyKCkKLQkJCQkJCQkucnVuKCJsaXN0LXNlcnZpY2VzIik7Ci0JCQkJCWlmIChjb21tYW5kUmVzdWx0LmdldE91dHB1dCgpLmNvbnRhaW5zKCJOb3RoaW5nIHRvIGxpc3QuIikpIHsKLQkJCQkJCXVuZGVwbG95Q2xlYW4gPSB0cnVlOwotCQkJCQl9Ci0JCQkJCUFzc2VydC5hc3NlcnRUcnVlKHVuZGVwbG95Q2xlYW4pOwotCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCVN5c3RlbS5lcnIKLQkJCQkJCQkucHJpbnRsbigiQ291bGRuJ3QgdmFyaWZ5IHdoZXRoZXIgdW5kZXBsb3kgc3VjY2VlZGVkIik7Ci0JCQkJfQotCQkJfQotCQl9CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBpZiAoYXBwTmFtZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgZGVwbG95ZXIudW5kZXBsb3koYXBwTmFtZSk7CisgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVbmRlcGxveWVkIFsiICsgYXBwTmFtZSArICJdIik7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB1bmRlcGxveUNsZWFuID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIENvbW1hbmRSZXN1bHQgY29tbWFuZFJlc3VsdCA9IGdsYXNzZmlzaC5nZXRDb21tYW5kUnVubmVyKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAucnVuKCJsaXN0LXNlcnZpY2VzIik7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb21tYW5kUmVzdWx0LmdldE91dHB1dCgpLmNvbnRhaW5zKCJOb3RoaW5nIHRvIGxpc3QuIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVwbG95Q2xlYW4gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKHVuZGVwbG95Q2xlYW4pOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJpbnRsbigiQ291bGRuJ3QgdmFyaWZ5IHdoZXRoZXIgdW5kZXBsb3kgc3VjY2VlZGVkIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CiAKLQl9CisgICAgfQogCi0JcHJpdmF0ZSB2b2lkIGdldChTdHJpbmcgdXJsU3RyLCBTdHJpbmcgcmVzdWx0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJVVJMIHVybCA9IG5ldyBVUkwodXJsU3RyKTsKLQkJVVJMQ29ubmVjdGlvbiB5YyA9IHVybC5vcGVuQ29ubmVjdGlvbigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuVVJMQ29ubmVjdGlvbiBbIiArIHljICsgIl0gOiAiKTsKLQkJQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKAotCQkJCXljLmdldElucHV0U3RyZWFtKCkpKTsKLQkJU3RyaW5nIGxpbmUgPSBudWxsOwotCQlib29sZWFuIGZvdW5kID0gZmFsc2U7Ci0JCXdoaWxlICgobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKLQkJCWlmIChsaW5lLmluZGV4T2YocmVzdWx0KSAhPSAtMSkgewotCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQlBc3NlcnQuYXNzZXJ0VHJ1ZShmb3VuZCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiXG4qKioqKiBTVUNDRVNTICoqKiogRm91bmQgWyIgKyByZXN1bHQKLQkJCQkrICJdIGluIHRoZSByZXNwb25zZS4qKioqKlxuIik7Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nIGdldExCSVBBZGRyZXNzKEdsYXNzRmlzaCBnbGFzc2Zpc2gpIHsKLQkJU3RyaW5nIGxiSVAgPSBudWxsOwotCQlTdHJpbmcgSVBBZGRyZXNzUGF0dGVybiA9ICJJUC1BRERSRVNTXFxzKlxuKiguKilcXHMqXG4oKFswMV0/XFxkKnwyWzAtNF1cXGR8MjVbMC01XSlcXC4iCi0JCQkJKyAiKFswMV0/XFxkXFxkP3wyWzAtNF1cXGR8MjVbMC01XSlcXC4iCi0JCQkJKyAiKFswMV0/XFxkXFxkP3wyWzAtNF1cXGR8MjVbMC01XSlcXC4iCi0JCQkJKyAiKFswLTldP1xcZFxcZD98MlswLTRdXFxkfDI1WzAtNV0pKSI7Ci0JCXRyeSB7Ci0JCQlDb21tYW5kUnVubmVyIGNvbW1hbmRSdW5uZXIgPSBnbGFzc2Zpc2guZ2V0Q29tbWFuZFJ1bm5lcigpOwotCQkJU3RyaW5nIHJlc3VsdCA9IGNvbW1hbmRSdW5uZXIKLQkJCQkJLnJ1bigibGlzdC1zZXJ2aWNlcyIsICItLXR5cGUiLCAiTEIiLAotCQkJCQkJCSItLW91dHB1dCIsICJJUC1BRERSRVNTIikuZ2V0T3V0cHV0KCkudG9TdHJpbmcoKTsKLQkJCWlmIChyZXN1bHQuY29udGFpbnMoIk5vdGhpbmcgdG8gbGlzdC4iKSkgewotCQkJCXJlc3VsdCA9IGNvbW1hbmRSdW5uZXIKLQkJCQkJCS5ydW4oImxpc3Qtc2VydmljZXMiLCAiLS10eXBlIiwgIkphdmFFRSIsICItLW91dHB1dCIsCi0JCQkJCQkJCSJJUC1BRERSRVNTIikuZ2V0T3V0cHV0KCkudG9TdHJpbmcoKTsKKyAgICBwcml2YXRlIHZvaWQgZ2V0KFN0cmluZyB1cmxTdHIsIFN0cmluZyByZXN1bHQpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCh1cmxTdHIpOworICAgICAgICBVUkxDb25uZWN0aW9uIHljID0gdXJsLm9wZW5Db25uZWN0aW9uKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5VUkxDb25uZWN0aW9uIFsiICsgeWMgKyAiXSA6ICIpOworICAgICAgICBCdWZmZXJlZFJlYWRlciBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoCisgICAgICAgICAgICAgICAgeWMuZ2V0SW5wdXRTdHJlYW0oKSkpOworICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CisgICAgICAgIGJvb2xlYW4gZm91bmQgPSBmYWxzZTsKKyAgICAgICAgd2hpbGUgKChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOworICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZihyZXN1bHQpICE9IC0xKSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGZvdW5kKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbioqKioqIFNVQ0NFU1MgKioqKiBGb3VuZCBbIiArIHJlc3VsdAorICAgICAgICAgICAgICAgICsgIl0gaW4gdGhlIHJlc3BvbnNlLioqKioqXG4iKTsKKyAgICB9CiAKLQkJCQlQYXR0ZXJuIHAgPSBQYXR0ZXJuLmNvbXBpbGUoSVBBZGRyZXNzUGF0dGVybik7Ci0JCQkJTWF0Y2hlciBtID0gcC5tYXRjaGVyKHJlc3VsdCk7Ci0JCQkJaWYgKG0uZmluZCgpKSB7Ci0JCQkJCWxiSVAgPSBtLmdyb3VwKDIpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWxiSVAgPSAibG9jYWxob3N0IjsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCVBhdHRlcm4gcCA9IFBhdHRlcm4uY29tcGlsZShJUEFkZHJlc3NQYXR0ZXJuKTsKLQkJCQlNYXRjaGVyIG0gPSBwLm1hdGNoZXIocmVzdWx0KTsKLQkJCQlpZiAobS5maW5kKCkpIHsKLQkJCQkJbGJJUCA9IG0uZ3JvdXAoMik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbGJJUCA9ICJsb2NhbGhvc3QiOwotCQkJCX0KKyAgICBwcml2YXRlIFN0cmluZyBnZXRMQklQQWRkcmVzcyhHbGFzc0Zpc2ggZ2xhc3NmaXNoKSB7CisgICAgICAgIFN0cmluZyBsYklQID0gbnVsbDsKKyAgICAgICAgU3RyaW5nIElQQWRkcmVzc1BhdHRlcm4gPSAiSVAtQUREUkVTU1xccypcbiooLiopXFxzKlxuKChbMDFdP1xcZCp8MlswLTRdXFxkfDI1WzAtNV0pXFwuIgorICAgICAgICAgICAgICAgICsgIihbMDFdP1xcZFxcZD98MlswLTRdXFxkfDI1WzAtNV0pXFwuIgorICAgICAgICAgICAgICAgICsgIihbMDFdP1xcZFxcZD98MlswLTRdXFxkfDI1WzAtNV0pXFwuIgorICAgICAgICAgICAgICAgICsgIihbMC05XT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKSkiOworICAgICAgICB0cnkgeworICAgICAgICAgICAgQ29tbWFuZFJ1bm5lciBjb21tYW5kUnVubmVyID0gZ2xhc3NmaXNoLmdldENvbW1hbmRSdW5uZXIoKTsKKyAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBjb21tYW5kUnVubmVyCisgICAgICAgICAgICAgICAgICAgIC5ydW4oImxpc3Qtc2VydmljZXMiLCAiLS10eXBlIiwgIkxCIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1vdXRwdXQiLCAiSVAtQUREUkVTUyIpLmdldE91dHB1dCgpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAocmVzdWx0LmNvbnRhaW5zKCJOb3RoaW5nIHRvIGxpc3QuIikpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21tYW5kUnVubmVyCisgICAgICAgICAgICAgICAgICAgICAgICAucnVuKCJsaXN0LXNlcnZpY2VzIiwgIi0tdHlwZSIsICJKYXZhRUUiLCAiLS1vdXRwdXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSVAtQUREUkVTUyIpLmdldE91dHB1dCgpLnRvU3RyaW5nKCk7CiAKLQkJCX0KKyAgICAgICAgICAgICAgICBQYXR0ZXJuIHAgPSBQYXR0ZXJuLmNvbXBpbGUoSVBBZGRyZXNzUGF0dGVybik7CisgICAgICAgICAgICAgICAgTWF0Y2hlciBtID0gcC5tYXRjaGVyKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgaWYgKG0uZmluZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGxiSVAgPSBtLmdyb3VwKDIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxiSVAgPSAibG9jYWxob3N0IjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFBhdHRlcm4gcCA9IFBhdHRlcm4uY29tcGlsZShJUEFkZHJlc3NQYXR0ZXJuKTsKKyAgICAgICAgICAgICAgICBNYXRjaGVyIG0gPSBwLm1hdGNoZXIocmVzdWx0KTsKKyAgICAgICAgICAgICAgICBpZiAobS5maW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbGJJUCA9IG0uZ3JvdXAoMik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbGJJUCA9ICJsb2NhbGhvc3QiOworICAgICAgICAgICAgICAgIH0KIAotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJSZWdleCBoYXMgdGhyb3duIGFuIGV4Y2VwdGlvbiAiCi0JCQkJCSsgZS5nZXRNZXNzYWdlKCkpOwotCQkJcmV0dXJuICJsb2NhbGhvc3QiOwotCQl9Ci0JCXJldHVybiBsYklQOwotCX0KKyAgICAgICAgICAgIH0KKworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWdleCBoYXMgdGhyb3duIGFuIGV4Y2VwdGlvbiAiCisgICAgICAgICAgICAgICAgICAgICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgcmV0dXJuICJsb2NhbGhvc3QiOworICAgICAgICB9CisgICAgICAgIHJldHVybiBsYklQOworICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtc2VydmljZS1kaXNjb3ZlcnkvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLXNlcnZpY2UtZGlzY292ZXJ5L3BvbS54bWwKaW5kZXggNjVlYTY4NS4uNjIyNWYzZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtc2VydmljZS1kaXNjb3ZlcnkvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1zZXJ2aWNlLWRpc2NvdmVyeS9wb20ueG1sCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgogICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNraXA+ZmFsc2U8L3NraXA+Ci0JCQkgICA8ZW5hYmxlQXNzZXJ0aW9ucz5mYWxzZTwvZW5hYmxlQXNzZXJ0aW9ucz4KKyAgICAgICAgICAgICAgIDxlbmFibGVBc3NlcnRpb25zPmZhbHNlPC9lbmFibGVBc3NlcnRpb25zPgogICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgogICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1zZXJ2aWNlLWRpc2NvdmVyeS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLXNlcnZpY2UtZGlzY292ZXJ5L3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCmluZGV4IDA1ZTc4YWMuLmI2MGUzMmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLXNlcnZpY2UtZGlzY292ZXJ5L3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLXNlcnZpY2UtZGlzY292ZXJ5L3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAKIC0tPgogCi08IURPQ1RZUEUgc3VuLXdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDkuMCBTZXJ2bGV0IDIuNS8vRU4iIAorPCFET0NUWVBFIHN1bi13ZWItYXBwIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEFwcGxpY2F0aW9uIFNlcnZlciA5LjAgU2VydmxldCAyLjUvL0VOIgogICAiaHR0cDovL3d3dy5zdW4uY29tL3NvZnR3YXJlL2FwcHNlcnZlci9kdGRzL3N1bi13ZWItYXBwXzJfNS0wLmR0ZCI+CiA8c3VuLXdlYi1hcHAgZXJyb3ItdXJsPSIiPgogICA8cmVzb3VyY2UtcmVmPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtc2VydmljZS1kaXNjb3Zlcnkvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLXNlcnZpY2UtZGlzY292ZXJ5L3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKaW5kZXggNzc0YTZkMC4uMzhjNGExMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtc2VydmljZS1kaXNjb3Zlcnkvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1zZXJ2aWNlLWRpc2NvdmVyeS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCkBAIC0xNyw5ICsxNyw5IEBACiAKIC0tPgogCi08d2ViLWFwcCB2ZXJzaW9uPSIyLjUiIAotICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiAKLSAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCis8d2ViLWFwcCB2ZXJzaW9uPSIyLjUiCisgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPkJhc2ljU0RQYWFTU2VydmxldDwvc2VydmxldC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtc2hhcmVkLXNlcnZpY2UtdGVzdC9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtc2hhcmVkLXNlcnZpY2UtdGVzdC9wb20ueG1sCmluZGV4IDFiYTM2MGIuLmQyOWI3OTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLXNoYXJlZC1zZXJ2aWNlLXRlc3QvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1zaGFyZWQtc2VydmljZS10ZXN0L3BvbS54bWwKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CiAgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2tpcD5mYWxzZTwvc2tpcD4KLQkJCSAgICA8ZW5hYmxlQXNzZXJ0aW9ucz5mYWxzZTwvZW5hYmxlQXNzZXJ0aW9ucz4KKyAgICAgICAgICAgICAgICA8ZW5hYmxlQXNzZXJ0aW9ucz5mYWxzZTwvZW5hYmxlQXNzZXJ0aW9ucz4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CiAgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICAgICAgPHZlcnNpb24+My4xPC92ZXJzaW9uPgogICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KICAgICAgICAgPC9kZXBlbmRlbmN5PgotCTxkZXBlbmRlbmN5PgorICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjQuMTMuMjwvdmVyc2lvbj4KQEAgLTg0LDggKzg0LDggQEAKICAgICAgICAgICAgIDwvc3lzdGVtUGF0aD4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgIAkgICAgPGdyb3VwSWQ+amFrYXJ0YS50cmFuc2FjdGlvbjwvZ3JvdXBJZD4KLSAgICAgIAkgICAgPGFydGlmYWN0SWQ+anRhPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICA8Z3JvdXBJZD5qYWthcnRhLnRyYW5zYWN0aW9uPC9ncm91cElkPgorICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdGE8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgPC9kZXBlbmRlbmNpZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1zaGFyZWQtc2VydmljZS10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2Jhc2ljanBhL0FuaW1hbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMtc2hhcmVkLXNlcnZpY2UtdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9iYXNpY2pwYS9BbmltYWwuamF2YQppbmRleCAxYTA2ZjRmLi40ZDUzNzA1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy1zaGFyZWQtc2VydmljZS10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2Jhc2ljanBhL0FuaW1hbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljLXNoYXJlZC1zZXJ2aWNlLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvYmFzaWNqcGEvQW5pbWFsLmphdmEKQEAgLTI2LDE5ICsyNiwxOSBAQAogICoKICAqIEBhdXRob3IgaXNoYW4udmlzaG5vaUBqYXZhLm5ldAogICovCi1ARW50aXR5IAorQEVudGl0eQogQFRhYmxlKG5hbWUgPSAiWk9PX0RJUkVDVE9SWSIpCiBwdWJsaWMgY2xhc3MgQW5pbWFsIGltcGxlbWVudHMgU2VyaWFsaXphYmxlIHsKLSAgICAKKwogICAgIEBJZAogICAgIHByaXZhdGUgaW50IElEOwotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIHNwZWNpZXM7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBjYWdlTnVtYmVyOwotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgeWVhck9mQmlydGg7CiAKICAgICBwdWJsaWMgaW50IGdldElEKCkgewpAQCAtNDcsNyArNDcsNyBAQAogCiAgICAgcHVibGljIHZvaWQgc2V0SUQoaW50IElEKSB7CiAgICAgICAgIHRoaXMuSUQgPSBJRDsKLSAgICB9ICAgIAorICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2FnZU51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIGNhZ2VOdW1iZXI7CkBAIC04MCw3ICs4MCw3IEBACiAgICAgcHVibGljIHZvaWQgc2V0WWVhck9mQmlydGgoU3RyaW5nIHllYXJPZkJpcnRoKSB7CiAgICAgICAgIHRoaXMueWVhck9mQmlydGggPSB5ZWFyT2ZCaXJ0aDsKICAgICB9Ci0gIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgcmV0dXJuICJlbnRpdHkuTmV3RW50aXR5W2lkPSIgKyBJRCArICJdIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljL25hdGl2ZV9zZXR1cC5zaCBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljL25hdGl2ZV9zZXR1cC5zaAppbmRleCAzYmRiYzY5Li45YzgyYjc4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy9uYXRpdmVfc2V0dXAuc2gKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMvbmF0aXZlX3NldHVwLnNoCkBAIC0xOSw2ICsxOSw2IEBACiAkR0ZfSE9NRS9iaW4vYXNhZG1pbiBzdGFydC1kb21haW4gLS1kZWJ1ZwogJEdGX0hPTUUvYmluL2FzYWRtaW4gY3JlYXRlLWltcy1jb25maWctbmF0aXZlCiAjJEdGX0hPTUUvYmluL2FzYWRtaW4gY3JlYXRlLXNlcnZlci1wb29sIC0tdmlydHVhbGl6YXRpb24gTmF0aXZlIC0tc3VibmV0IDE5Mi4xNjguMS4xMDIvMjUwIC0tcG9ydE5hbWUgImJyMCIgTmF0aXZlCi0kR0ZfSE9NRS9iaW4vYXNhZG1pbiBzdG9wLWRvbWFpbiAKKyRHRl9IT01FL2Jpbi9hc2FkbWluIHN0b3AtZG9tYWluCiAjJEdGX0hPTUUvYmluL2FzYWRtaW4gY3JlYXRlLXRlbXBsYXRlIC0taW5kZXhlcyBTZXJ2aWNlVHlwZT1KYXZhRUUsVmlydHVhbGl6YXRpb25UeXBlPU5hdGl2ZSBOYXRpdmUKICMkR0ZfSE9NRS9iaW4vYXNhZG1pbiBjcmVhdGUtdGVtcGxhdGUgLS1pbmRleGVzIFNlcnZpY2VUeXBlPURhdGFiYXNlLFZpcnR1YWxpemF0aW9uVHlwZT1OYXRpdmUgREJOYXRpdmUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy9wb20ueG1sCmluZGV4IDU3ZTk1MjMuLmU0NmZmZjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMvcG9tLnhtbApAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxza2lwPmZhbHNlPC9za2lwPgotCQkJICAgPGVuYWJsZUFzc2VydGlvbnM+ZmFsc2U8L2VuYWJsZUFzc2VydGlvbnM+CisgICAgICAgICAgICAgICA8ZW5hYmxlQXNzZXJ0aW9ucz5mYWxzZTwvZW5hYmxlQXNzZXJ0aW9ucz4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CiAgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbAppbmRleCBlOWVlZDQ0Li5lNDVlMTQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbApAQCAtMTcsNyArMTcsNyBAQAogCiAtLT4KIAotPCFET0NUWVBFIHN1bi13ZWItYXBwIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEFwcGxpY2F0aW9uIFNlcnZlciA5LjAgU2VydmxldCAyLjUvL0VOIiAKKzwhRE9DVFlQRSBzdW4td2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOS4wIFNlcnZsZXQgMi41Ly9FTiIKICAgImh0dHA6Ly93d3cuc3VuLmNvbS9zb2Z0d2FyZS9hcHBzZXJ2ZXIvZHRkcy9zdW4td2ViLWFwcF8yXzUtMC5kdGQiPgogPHN1bi13ZWItYXBwIGVycm9yLXVybD0iIj4KIDwvc3VuLXdlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAppbmRleCBmNWNlMzVjLi5mMDZhYmI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTE3LDkgKzE3LDkgQEAKIAogLS0+CiAKLTx3ZWItYXBwIHZlcnNpb249IjIuNSIgCi0gIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIAotICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKzx3ZWItYXBwIHZlcnNpb249IjIuNSIKKyAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+QmFzaWNQYWFTU2VydmxldDwvc2VydmxldC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvYmFzaWMvQmFzaWNQYWFTVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYmFzaWMvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvYmFzaWMvQmFzaWNQYWFTVGVzdC5qYXZhCmluZGV4IGYyYzYzMmMuLjBlMGMxZGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jhc2ljL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2Jhc2ljL0Jhc2ljUGFhU1Rlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9iYXNpYy9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9iYXNpYy9CYXNpY1BhYVNUZXN0LmphdmEKQEAgLTM5LDE1MSArMzksMTUxIEBACiAKIHB1YmxpYyBjbGFzcyBCYXNpY1BhYVNUZXN0IHsKIAotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24gewogCi0JCS8vIEJvb3RzdHJhcCBHbGFzc0Zpc2ggREFTIGluIGVtYmVkZGVkIG1vZGUuCi0JCUdsYXNzRmlzaCBnbGFzc2Zpc2ggPSBib290c3RyYXAoKTsKKyAgICAgICAgLy8gQm9vdHN0cmFwIEdsYXNzRmlzaCBEQVMgaW4gZW1iZWRkZWQgbW9kZS4KKyAgICAgICAgR2xhc3NGaXNoIGdsYXNzZmlzaCA9IGJvb3RzdHJhcCgpOwogCi0JCS8vIERlcGxveSB0aGUgUGFhUyBhcHAgYW5kIHZlcmlmeSBpdC4KLQkJcnVuVGVzdHMoZ2xhc3NmaXNoKTsKKyAgICAgICAgLy8gRGVwbG95IHRoZSBQYWFTIGFwcCBhbmQgdmVyaWZ5IGl0LgorICAgICAgICBydW5UZXN0cyhnbGFzc2Zpc2gpOwogCi0JCS8vIFJlLWRlcGxveSB0aGUgUGFhUyBhcHAgYW5kIHZlcmlmeSBpdC4KLQkJU3RyaW5nIHRlc3RTY2VuYXJpb3MgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInRlc3Quc2NlbmFyaW9zIik7Ci0JCWlmICh0ZXN0U2NlbmFyaW9zID09IG51bGwKLQkJCQl8fCAiYWxsIi5jb250YWlucyh0ZXN0U2NlbmFyaW9zLnRvTG93ZXJDYXNlKCkpKSB7Ci0JCQlydW5UZXN0cyhnbGFzc2Zpc2gpOwotCQl9CisgICAgICAgIC8vIFJlLWRlcGxveSB0aGUgUGFhUyBhcHAgYW5kIHZlcmlmeSBpdC4KKyAgICAgICAgU3RyaW5nIHRlc3RTY2VuYXJpb3MgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInRlc3Quc2NlbmFyaW9zIik7CisgICAgICAgIGlmICh0ZXN0U2NlbmFyaW9zID09IG51bGwKKyAgICAgICAgICAgICAgICB8fCAiYWxsIi5jb250YWlucyh0ZXN0U2NlbmFyaW9zLnRvTG93ZXJDYXNlKCkpKSB7CisgICAgICAgICAgICBydW5UZXN0cyhnbGFzc2Zpc2gpOworICAgICAgICB9CiAKLQkJLy8gNS4gU3RvcCB0aGUgR2xhc3NGaXNoIERBUwotCQlnbGFzc2Zpc2guZGlzcG9zZSgpOwotCX0KKyAgICAgICAgLy8gNS4gU3RvcCB0aGUgR2xhc3NGaXNoIERBUworICAgICAgICBnbGFzc2Zpc2guZGlzcG9zZSgpOworICAgIH0KIAotCXByaXZhdGUgdm9pZCBnZXQoU3RyaW5nIHVybFN0ciwgU3RyaW5nIHJlc3VsdCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVVSTCB1cmwgPSBuZXcgVVJMKHVybFN0cik7Ci0JCVVSTENvbm5lY3Rpb24geWMgPSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJcblVSTENvbm5lY3Rpb24gWyIgKyB5YyArICJdIDogIik7Ci0JCUJ1ZmZlcmVkUmVhZGVyIGluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcigKLQkJCQl5Yy5nZXRJbnB1dFN0cmVhbSgpKSk7Ci0JCVN0cmluZyBsaW5lID0gbnVsbDsKLQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQl3aGlsZSAoKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7Ci0JCQlpZiAobGluZS5pbmRleE9mKHJlc3VsdCkgIT0gLTEpIHsKLQkJCQlmb3VuZCA9IHRydWU7Ci0JCQl9Ci0JCX0KLQkJQXNzZXJ0LmFzc2VydFRydWUoZm91bmQpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuKioqKiogU1VDQ0VTUyAqKioqIEZvdW5kIFsiICsgcmVzdWx0Ci0JCQkJKyAiXSBpbiB0aGUgcmVzcG9uc2UuKioqKipcbiIpOwotCX0KKyAgICBwcml2YXRlIHZvaWQgZ2V0KFN0cmluZyB1cmxTdHIsIFN0cmluZyByZXN1bHQpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCh1cmxTdHIpOworICAgICAgICBVUkxDb25uZWN0aW9uIHljID0gdXJsLm9wZW5Db25uZWN0aW9uKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5VUkxDb25uZWN0aW9uIFsiICsgeWMgKyAiXSA6ICIpOworICAgICAgICBCdWZmZXJlZFJlYWRlciBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoCisgICAgICAgICAgICAgICAgeWMuZ2V0SW5wdXRTdHJlYW0oKSkpOworICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CisgICAgICAgIGJvb2xlYW4gZm91bmQgPSBmYWxzZTsKKyAgICAgICAgd2hpbGUgKChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOworICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZihyZXN1bHQpICE9IC0xKSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGZvdW5kKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbioqKioqIFNVQ0NFU1MgKioqKiBGb3VuZCBbIiArIHJlc3VsdAorICAgICAgICAgICAgICAgICsgIl0gaW4gdGhlIHJlc3BvbnNlLioqKioqXG4iKTsKKyAgICB9CiAKLQlwcml2YXRlIHZvaWQgcnVuVGVzdHMoR2xhc3NGaXNoIGdsYXNzZmlzaCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIDIuIERlcGxveSB0aGUgUGFhUyBhcHBsaWNhdGlvbi4KLQkJRmlsZSBhcmNoaXZlID0gbmV3IEZpbGUoU3lzdGVtLmdldFByb3BlcnR5KCJiYXNlZGlyIikKLQkJCQkrICIvdGFyZ2V0L2Jhc2ljX3BhYXNfc2FtcGxlLndhciIpOyAvLyBUT0RPIDo6IHVzZSBtdm4gYXBpcyB0bwotCQkJCQkJCQkJCQkJCS8vIGdldCB0aGUgYXJjaGl2ZSBsb2NhdGlvbi4KLQkJQXNzZXJ0LmFzc2VydFRydWUoYXJjaGl2ZS5leGlzdHMoKSk7Ci0JCURlcGxveWVyIGRlcGxveWVyID0gbnVsbDsKLQkJU3RyaW5nIGFwcE5hbWUgPSBudWxsOwotCQl0cnkgewotCQkJZGVwbG95ZXIgPSBnbGFzc2Zpc2guZ2V0RGVwbG95ZXIoKTsKLQkJCWFwcE5hbWUgPSBkZXBsb3llci5kZXBsb3koYXJjaGl2ZSk7CisgICAgcHJpdmF0ZSB2b2lkIHJ1blRlc3RzKEdsYXNzRmlzaCBnbGFzc2Zpc2gpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAvLyAyLiBEZXBsb3kgdGhlIFBhYVMgYXBwbGljYXRpb24uCisgICAgICAgIEZpbGUgYXJjaGl2ZSA9IG5ldyBGaWxlKFN5c3RlbS5nZXRQcm9wZXJ0eSgiYmFzZWRpciIpCisgICAgICAgICAgICAgICAgKyAiL3RhcmdldC9iYXNpY19wYWFzX3NhbXBsZS53YXIiKTsgLy8gVE9ETyA6OiB1c2UgbXZuIGFwaXMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIGFyY2hpdmUgbG9jYXRpb24uCisgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGFyY2hpdmUuZXhpc3RzKCkpOworICAgICAgICBEZXBsb3llciBkZXBsb3llciA9IG51bGw7CisgICAgICAgIFN0cmluZyBhcHBOYW1lID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGRlcGxveWVyID0gZ2xhc3NmaXNoLmdldERlcGxveWVyKCk7CisgICAgICAgICAgICBhcHBOYW1lID0gZGVwbG95ZXIuZGVwbG95KGFyY2hpdmUpOwogCi0JCQlTeXN0ZW0uZXJyLnByaW50bG4oIkRlcGxveWVkIFsiICsgYXBwTmFtZSArICJdIik7Ci0JCQlBc3NlcnQuYXNzZXJ0Tm90TnVsbChhcHBOYW1lKTsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRGVwbG95ZWQgWyIgKyBhcHBOYW1lICsgIl0iKTsKKyAgICAgICAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKGFwcE5hbWUpOwogCi0JCQlDb21tYW5kUnVubmVyIGNvbW1hbmRSdW5uZXIgPSBnbGFzc2Zpc2guZ2V0Q29tbWFuZFJ1bm5lcigpOwotCQkJQ29tbWFuZFJlc3VsdCByZXN1bHQgPSBjb21tYW5kUnVubmVyLnJ1bigibGlzdC1zZXJ2aWNlcyIpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJcbmxpc3Qtc2VydmljZXMgY29tbWFuZCBvdXRwdXQgWyAiCi0JCQkJCSsgcmVzdWx0LmdldE91dHB1dCgpICsgIl0iKTsKKyAgICAgICAgICAgIENvbW1hbmRSdW5uZXIgY29tbWFuZFJ1bm5lciA9IGdsYXNzZmlzaC5nZXRDb21tYW5kUnVubmVyKCk7CisgICAgICAgICAgICBDb21tYW5kUmVzdWx0IHJlc3VsdCA9IGNvbW1hbmRSdW5uZXIucnVuKCJsaXN0LXNlcnZpY2VzIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxubGlzdC1zZXJ2aWNlcyBjb21tYW5kIG91dHB1dCBbICIKKyAgICAgICAgICAgICAgICAgICAgKyByZXN1bHQuZ2V0T3V0cHV0KCkgKyAiXSIpOwogCi0JCQkvLyAzLiBBY2Nlc3MgdGhlIGFwcCB0byBtYWtlIHN1cmUgUGFhUyBhcHAgaXMgY29ycmVjdGx5IHByb3Zpc2lvbmVkLgotCQkJU3RyaW5nIEhUVFBfUE9SVCA9IChTeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucG9ydCIpICE9IG51bGwpID8gU3lzdGVtCi0JCQkJCS5nZXRQcm9wZXJ0eSgiaHR0cC5wb3J0IikgOiAiMjgwODAiOworICAgICAgICAgICAgLy8gMy4gQWNjZXNzIHRoZSBhcHAgdG8gbWFrZSBzdXJlIFBhYVMgYXBwIGlzIGNvcnJlY3RseSBwcm92aXNpb25lZC4KKyAgICAgICAgICAgIFN0cmluZyBIVFRQX1BPUlQgPSAoU3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKSAhPSBudWxsKSA/IFN5c3RlbQorICAgICAgICAgICAgICAgICAgICAuZ2V0UHJvcGVydHkoImh0dHAucG9ydCIpIDogIjI4MDgwIjsKIAotCQkJU3RyaW5nIGluc3RhbmNlSVAgPSBnZXRMQklQQWRkcmVzcyhnbGFzc2Zpc2gpOworICAgICAgICAgICAgU3RyaW5nIGluc3RhbmNlSVAgPSBnZXRMQklQQWRkcmVzcyhnbGFzc2Zpc2gpOwogCi0JCQlnZXQoImh0dHA6Ly8iICsgaW5zdGFuY2VJUCArICI6IiArIEhUVFBfUE9SVAotCQkJCQkrICIvYmFzaWNfcGFhc19zYW1wbGUvQmFzaWNQYWFTU2VydmxldCIsCi0JCQkJCSJSZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGUgcmVxdWVzdDoiKTsKKyAgICAgICAgICAgIGdldCgiaHR0cDovLyIgKyBpbnN0YW5jZUlQICsgIjoiICsgSFRUUF9QT1JUCisgICAgICAgICAgICAgICAgICAgICsgIi9iYXNpY19wYWFzX3NhbXBsZS9CYXNpY1BhYVNTZXJ2bGV0IiwKKyAgICAgICAgICAgICAgICAgICAgIlJlcXVlc3QgaGVhZGVycyBmcm9tIHRoZSByZXF1ZXN0OiIpOwogCi0JCQkvLyA0LiBVbmRlcGxveSB0aGUgUGFhUyBhcHBsaWNhdGlvbiAuIFRPRE8gOjogdXNlIGNsb3VkLXVuZGVwbG95Pz8KLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChhcHBOYW1lICE9IG51bGwpIHsKLQkJCQlkZXBsb3llci51bmRlcGxveShhcHBOYW1lKTsKLQkJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlVuZGVwbG95ZWQgWyIgKyBhcHBOYW1lICsgIl0iKTsKLQkJCQl0cnkgewotCQkJCQlib29sZWFuIHVuZGVwbG95Q2xlYW4gPSBmYWxzZTsKLQkJCQkJQ29tbWFuZFJlc3VsdCBjb21tYW5kUmVzdWx0ID0gZ2xhc3NmaXNoLmdldENvbW1hbmRSdW5uZXIoKQotCQkJCQkJCS5ydW4oImxpc3Qtc2VydmljZXMiKTsKLQkJCQkJaWYgKGNvbW1hbmRSZXN1bHQuZ2V0T3V0cHV0KCkuY29udGFpbnMoIk5vdGhpbmcgdG8gbGlzdC4iKSkgewotCQkJCQkJdW5kZXBsb3lDbGVhbiA9IHRydWU7Ci0JCQkJCX0KLQkJCQkJQXNzZXJ0LmFzc2VydFRydWUodW5kZXBsb3lDbGVhbik7Ci0JCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkJU3lzdGVtLmVycgotCQkJCQkJCS5wcmludGxuKCJDb3VsZG4ndCB2YXJpZnkgd2hldGhlciB1bmRlcGxveSBzdWNjZWVkZWQiKTsKLQkJCQl9CisgICAgICAgICAgICAvLyA0LiBVbmRlcGxveSB0aGUgUGFhUyBhcHBsaWNhdGlvbiAuIFRPRE8gOjogdXNlIGNsb3VkLXVuZGVwbG95Pz8KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGlmIChhcHBOYW1lICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBkZXBsb3llci51bmRlcGxveShhcHBOYW1lKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVuZGVwbG95ZWQgWyIgKyBhcHBOYW1lICsgIl0iKTsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBib29sZWFuIHVuZGVwbG95Q2xlYW4gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFJlc3VsdCBjb21tYW5kUmVzdWx0ID0gZ2xhc3NmaXNoLmdldENvbW1hbmRSdW5uZXIoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5ydW4oImxpc3Qtc2VydmljZXMiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRSZXN1bHQuZ2V0T3V0cHV0KCkuY29udGFpbnMoIk5vdGhpbmcgdG8gbGlzdC4iKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXBsb3lDbGVhbiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUodW5kZXBsb3lDbGVhbik7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVycgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wcmludGxuKCJDb3VsZG4ndCB2YXJpZnkgd2hldGhlciB1bmRlcGxveSBzdWNjZWVkZWQiKTsKKyAgICAgICAgICAgICAgICB9CiAKLQkJCX0KLQkJfQorICAgICAgICAgICAgfQorICAgICAgICB9CiAKLQl9CisgICAgfQogCi0JcHJpdmF0ZSBHbGFzc0Zpc2ggYm9vdHN0cmFwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUdsYXNzRmlzaFByb3BlcnRpZXMgZ2xhc3NGaXNoUHJvcGVydGllcyA9IG5ldyBHbGFzc0Zpc2hQcm9wZXJ0aWVzKCk7Ci0JCWdsYXNzRmlzaFByb3BlcnRpZXMuc2V0SW5zdGFuY2VSb290KFN5c3RlbS5nZXRlbnYoIlMxQVNfSE9NRSIpCi0JCQkJKyAiL2RvbWFpbnMvZG9tYWluMSIpOwotCQlnbGFzc0Zpc2hQcm9wZXJ0aWVzLnNldENvbmZpZ0ZpbGVSZWFkT25seShmYWxzZSk7Ci0JCUdsYXNzRmlzaCBnbGFzc2Zpc2ggPSBHbGFzc0Zpc2hSdW50aW1lLmJvb3RzdHJhcCgpLm5ld0dsYXNzRmlzaCgKLQkJCQlnbGFzc0Zpc2hQcm9wZXJ0aWVzKTsKLQkJUHJpbnRTdHJlYW0gc3lzb3V0ID0gU3lzdGVtLm91dDsKLQkJZ2xhc3NmaXNoLnN0YXJ0KCk7Ci0JCVN5c3RlbS5zZXRPdXQoc3lzb3V0KTsKLQkJcmV0dXJuIGdsYXNzZmlzaDsKLQl9CisgICAgcHJpdmF0ZSBHbGFzc0Zpc2ggYm9vdHN0cmFwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIEdsYXNzRmlzaFByb3BlcnRpZXMgZ2xhc3NGaXNoUHJvcGVydGllcyA9IG5ldyBHbGFzc0Zpc2hQcm9wZXJ0aWVzKCk7CisgICAgICAgIGdsYXNzRmlzaFByb3BlcnRpZXMuc2V0SW5zdGFuY2VSb290KFN5c3RlbS5nZXRlbnYoIlMxQVNfSE9NRSIpCisgICAgICAgICAgICAgICAgKyAiL2RvbWFpbnMvZG9tYWluMSIpOworICAgICAgICBnbGFzc0Zpc2hQcm9wZXJ0aWVzLnNldENvbmZpZ0ZpbGVSZWFkT25seShmYWxzZSk7CisgICAgICAgIEdsYXNzRmlzaCBnbGFzc2Zpc2ggPSBHbGFzc0Zpc2hSdW50aW1lLmJvb3RzdHJhcCgpLm5ld0dsYXNzRmlzaCgKKyAgICAgICAgICAgICAgICBnbGFzc0Zpc2hQcm9wZXJ0aWVzKTsKKyAgICAgICAgUHJpbnRTdHJlYW0gc3lzb3V0ID0gU3lzdGVtLm91dDsKKyAgICAgICAgZ2xhc3NmaXNoLnN0YXJ0KCk7CisgICAgICAgIFN5c3RlbS5zZXRPdXQoc3lzb3V0KTsKKyAgICAgICAgcmV0dXJuIGdsYXNzZmlzaDsKKyAgICB9CiAKLQlwcml2YXRlIFN0cmluZyBnZXRMQklQQWRkcmVzcyhHbGFzc0Zpc2ggZ2xhc3NmaXNoKSB7Ci0JCVN0cmluZyBsYklQID0gbnVsbDsKLQkJU3RyaW5nIElQQWRkcmVzc1BhdHRlcm4gPSAiSVAtQUREUkVTU1xccypcbiooLiopXFxzKlxuKChbMDFdP1xcZCp8MlswLTRdXFxkfDI1WzAtNV0pXFwuIgotCQkJCSsgIihbMDFdP1xcZFxcZD98MlswLTRdXFxkfDI1WzAtNV0pXFwuIgotCQkJCSsgIihbMDFdP1xcZFxcZD98MlswLTRdXFxkfDI1WzAtNV0pXFwuIgotCQkJCSsgIihbMC05XT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKSkiOwotCQl0cnkgewotCQkJQ29tbWFuZFJ1bm5lciBjb21tYW5kUnVubmVyID0gZ2xhc3NmaXNoLmdldENvbW1hbmRSdW5uZXIoKTsKLQkJCVN0cmluZyByZXN1bHQgPSBjb21tYW5kUnVubmVyCi0JCQkJCS5ydW4oImxpc3Qtc2VydmljZXMiLCAiLS10eXBlIiwgIkxCIiwKLQkJCQkJCQkiLS1vdXRwdXQiLCAiSVAtQUREUkVTUyIpLmdldE91dHB1dCgpLnRvU3RyaW5nKCk7Ci0JCQlpZiAocmVzdWx0LmNvbnRhaW5zKCJOb3RoaW5nIHRvIGxpc3QuIikpIHsKLQkJCQlyZXN1bHQgPSBjb21tYW5kUnVubmVyCi0JCQkJCQkucnVuKCJsaXN0LXNlcnZpY2VzIiwgIi0tdHlwZSIsICJKYXZhRUUiLCAiLS1vdXRwdXQiLAotCQkJCQkJCQkiSVAtQUREUkVTUyIpLmdldE91dHB1dCgpLnRvU3RyaW5nKCk7CisgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0TEJJUEFkZHJlc3MoR2xhc3NGaXNoIGdsYXNzZmlzaCkgeworICAgICAgICBTdHJpbmcgbGJJUCA9IG51bGw7CisgICAgICAgIFN0cmluZyBJUEFkZHJlc3NQYXR0ZXJuID0gIklQLUFERFJFU1NcXHMqXG4qKC4qKVxccypcbigoWzAxXT9cXGQqfDJbMC00XVxcZHwyNVswLTVdKVxcLiIKKyAgICAgICAgICAgICAgICArICIoWzAxXT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKVxcLiIKKyAgICAgICAgICAgICAgICArICIoWzAxXT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKVxcLiIKKyAgICAgICAgICAgICAgICArICIoWzAtOV0/XFxkXFxkP3wyWzAtNF1cXGR8MjVbMC01XSkpIjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENvbW1hbmRSdW5uZXIgY29tbWFuZFJ1bm5lciA9IGdsYXNzZmlzaC5nZXRDb21tYW5kUnVubmVyKCk7CisgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gY29tbWFuZFJ1bm5lcgorICAgICAgICAgICAgICAgICAgICAucnVuKCJsaXN0LXNlcnZpY2VzIiwgIi0tdHlwZSIsICJMQiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tb3V0cHV0IiwgIklQLUFERFJFU1MiKS5nZXRPdXRwdXQoKS50b1N0cmluZygpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5jb250YWlucygiTm90aGluZyB0byBsaXN0LiIpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tbWFuZFJ1bm5lcgorICAgICAgICAgICAgICAgICAgICAgICAgLnJ1bigibGlzdC1zZXJ2aWNlcyIsICItLXR5cGUiLCAiSmF2YUVFIiwgIi0tb3V0cHV0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklQLUFERFJFU1MiKS5nZXRPdXRwdXQoKS50b1N0cmluZygpOwogCi0JCQkJUGF0dGVybiBwID0gUGF0dGVybi5jb21waWxlKElQQWRkcmVzc1BhdHRlcm4pOwotCQkJCU1hdGNoZXIgbSA9IHAubWF0Y2hlcihyZXN1bHQpOwotCQkJCWlmIChtLmZpbmQoKSkgewotCQkJCQlsYklQID0gbS5ncm91cCgyKTsKLQkJCQl9IGVsc2UgewotCQkJCQlsYklQID0gImxvY2FsaG9zdCI7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlQYXR0ZXJuIHAgPSBQYXR0ZXJuLmNvbXBpbGUoSVBBZGRyZXNzUGF0dGVybik7Ci0JCQkJTWF0Y2hlciBtID0gcC5tYXRjaGVyKHJlc3VsdCk7Ci0JCQkJaWYgKG0uZmluZCgpKSB7Ci0JCQkJCWxiSVAgPSBtLmdyb3VwKDIpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWxiSVAgPSAibG9jYWxob3N0IjsKLQkJCQl9CisgICAgICAgICAgICAgICAgUGF0dGVybiBwID0gUGF0dGVybi5jb21waWxlKElQQWRkcmVzc1BhdHRlcm4pOworICAgICAgICAgICAgICAgIE1hdGNoZXIgbSA9IHAubWF0Y2hlcihyZXN1bHQpOworICAgICAgICAgICAgICAgIGlmIChtLmZpbmQoKSkgeworICAgICAgICAgICAgICAgICAgICBsYklQID0gbS5ncm91cCgyKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsYklQID0gImxvY2FsaG9zdCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBQYXR0ZXJuIHAgPSBQYXR0ZXJuLmNvbXBpbGUoSVBBZGRyZXNzUGF0dGVybik7CisgICAgICAgICAgICAgICAgTWF0Y2hlciBtID0gcC5tYXRjaGVyKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgaWYgKG0uZmluZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGxiSVAgPSBtLmdyb3VwKDIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxiSVAgPSAibG9jYWxob3N0IjsKKyAgICAgICAgICAgICAgICB9CiAKLQkJCX0KKyAgICAgICAgICAgIH0KIAotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJSZWdleCBoYXMgdGhyb3duIGFuIGV4Y2VwdGlvbiAiCi0JCQkJCSsgZS5nZXRNZXNzYWdlKCkpOwotCQkJcmV0dXJuICJsb2NhbGhvc3QiOwotCQl9Ci0JCXJldHVybiBsYklQOwotCX0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVnZXggaGFzIHRocm93biBhbiBleGNlcHRpb24gIgorICAgICAgICAgICAgICAgICAgICArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIHJldHVybiAibG9jYWxob3N0IjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGJJUDsKKyAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jvb2tzdG9yZS9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYm9va3N0b3JlL3BvbS54bWwKaW5kZXggNzViYjIwZS4uZGZhZmFmNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYm9va3N0b3JlL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYm9va3N0b3JlL3BvbS54bWwKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CiAgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2tpcD5mYWxzZTwvc2tpcD4KLQkJCSAgICA8ZW5hYmxlQXNzZXJ0aW9ucz5mYWxzZTwvZW5hYmxlQXNzZXJ0aW9ucz4KKyAgICAgICAgICAgICAgICA8ZW5hYmxlQXNzZXJ0aW9ucz5mYWxzZTwvZW5hYmxlQXNzZXJ0aW9ucz4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CiAgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYm9va3N0b3JlL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2Jhc2ljL0Jvb2tTdG9yZVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jvb2tzdG9yZS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9iYXNpYy9Cb29rU3RvcmVTZXJ2bGV0LmphdmEKaW5kZXggZjgxZjAwMC4uOGY2MGQ1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYm9va3N0b3JlL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2Jhc2ljL0Jvb2tTdG9yZVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9ib29rc3RvcmUvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvYmFzaWMvQm9va1N0b3JlU2VydmxldC5qYXZhCkBAIC04OCw3ICs4OCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJhdXRob3JzIiksIHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJwcmljZSIpKTsKICAgICAgICAgICAgIG9wZXJhdGlvbnMucHJpbnRCb29rc1RhYmxlKGRzLCB3cml0ZXIpOwogICAgICAgICAgICAgZ2VuZXJhdGVOZXdCb29rRm9ybSh3cml0ZXIpOwotICAgICAgICAgICAgCisKICAgICAgICAgfQogCiAgICAgICAgIHdyaXRlci5wcmludGxuKCI8cC8+PGEgaHJlZj1cJ0Jvb2tTdG9yZVNlcnZsZXRcJz5NeSBIb21lPC9hPiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYm9va3N0b3JlL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2Jhc2ljL0RhdGFiYXNlT3BlcmF0aW9ucy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYm9va3N0b3JlL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2Jhc2ljL0RhdGFiYXNlT3BlcmF0aW9ucy5qYXZhCmluZGV4IDExZDI5M2MuLmE5YzUzODMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jvb2tzdG9yZS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9iYXNpYy9EYXRhYmFzZU9wZXJhdGlvbnMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9ib29rc3RvcmUvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvYmFzaWMvRGF0YWJhc2VPcGVyYXRpb25zLmphdmEKQEAgLTIyMiw3ICsyMjIsNyBAQAogICAgICAgICAgICAgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9ICJTRUxFQ1QgKiBmcm9tIEJPT0tTX1RBQkxFIjsKICAgICAgICAgICAgIFJlc3VsdFNldCBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBib29sZWFuIHByaW50SGVhZGVycyA9IHRydWU7CiAKICAgICAgICAgICAgIHdoaWxlKHJzLm5leHQoKSkgewpAQCAtMjM5LDcgKzIzOSw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L3RyPiIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKCFwcmludEhlYWRlcnMpIHsgLy8gYXRsZWFzdCBvbmUgcm93IHdhcyB0aGVyZS4KICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC90YWJsZT4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yNjIsNyArMjYyLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBleGVjdXRlKERhdGFTb3VyY2UgZHMxLCBTdHJpbmcgc3FsKSB7CiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYm9va3N0b3JlL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvYm9va3N0b3JlL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCmluZGV4IDJjYTUwMDguLjBjYWEyMzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jvb2tzdG9yZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9ib29rc3RvcmUvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIAogLS0+CiAKLTwhRE9DVFlQRSBzdW4td2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOS4wIFNlcnZsZXQgMi41Ly9FTiIgCis8IURPQ1RZUEUgc3VuLXdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDkuMCBTZXJ2bGV0IDIuNS8vRU4iCiAgICJodHRwOi8vd3d3LnN1bi5jb20vc29mdHdhcmUvYXBwc2VydmVyL2R0ZHMvc3VuLXdlYi1hcHBfMl81LTAuZHRkIj4KIDxzdW4td2ViLWFwcCBlcnJvci11cmw9IiI+CiAgIDxyZXNvdXJjZS1yZWY+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9ib29rc3RvcmUvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jvb2tzdG9yZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmluZGV4IDZkMDlmNDIuLjU5MzRlZDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jvb2tzdG9yZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2Jvb2tzdG9yZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCkBAIC0xNyw5ICsxNyw5IEBACiAKIC0tPgogCi08d2ViLWFwcCB2ZXJzaW9uPSIyLjUiIAotICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiAKLSAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCis8d2ViLWFwcCB2ZXJzaW9uPSIyLjUiCisgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPkJvb2tTdG9yZVNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2RlcGxveW1lbnQtcm9sbGJhY2svcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2RlcGxveW1lbnQtcm9sbGJhY2svcG9tLnhtbAppbmRleCAxZWFlN2I3Li4xZTg0Yjk3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9kZXBsb3ltZW50LXJvbGxiYWNrL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZGVwbG95bWVudC1yb2xsYmFjay9wb20ueG1sCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgogICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNraXA+ZmFsc2U8L3NraXA+Ci0JCQkgICA8ZW5hYmxlQXNzZXJ0aW9ucz5mYWxzZTwvZW5hYmxlQXNzZXJ0aW9ucz4KKyAgICAgICAgICAgICAgIDxlbmFibGVBc3NlcnRpb25zPmZhbHNlPC9lbmFibGVBc3NlcnRpb25zPgogICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgogICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9kZXBsb3ltZW50LXJvbGxiYWNrL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZGVwbG95bWVudC1yb2xsYmFjay9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbAppbmRleCBmMjBjZmY3Li5jNjlmYjFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9kZXBsb3ltZW50LXJvbGxiYWNrL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2RlcGxveW1lbnQtcm9sbGJhY2svc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIAogLS0+CiAKLTwhRE9DVFlQRSBzdW4td2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOS4wIFNlcnZsZXQgMi41Ly9FTiIgCis8IURPQ1RZUEUgc3VuLXdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDkuMCBTZXJ2bGV0IDIuNS8vRU4iCiAgICJodHRwOi8vd3d3LnN1bi5jb20vc29mdHdhcmUvYXBwc2VydmVyL2R0ZHMvc3VuLXdlYi1hcHBfMl81LTAuZHRkIj4KIDxzdW4td2ViLWFwcCBlcnJvci11cmw9IiI+CiAgIDxyZXNvdXJjZS1yZWY+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9kZXBsb3ltZW50LXJvbGxiYWNrL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9kZXBsb3ltZW50LXJvbGxiYWNrL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKaW5kZXggZWRjYTEwYy4uNjI0Y2E5OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZGVwbG95bWVudC1yb2xsYmFjay9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2RlcGxveW1lbnQtcm9sbGJhY2svc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApAQCAtMTcsOSArMTcsOSBAQAogCiAtLT4KIAotPHdlYi1hcHAgdmVyc2lvbj0iMi41IiAKLSAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgCi0gIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorPHdlYi1hcHAgdmVyc2lvbj0iMi41IgorICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5Sb2xsYmFja1Rlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9lbmFibGUtZGlzYWJsZS10ZXN0L3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9lbmFibGUtZGlzYWJsZS10ZXN0L3BvbS54bWwKaW5kZXggODA4NzE3Ni4uNTU4NWZkMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZW5hYmxlLWRpc2FibGUtdGVzdC9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2VuYWJsZS1kaXNhYmxlLXRlc3QvcG9tLnhtbApAQCAtNTAsMTIgKzUwLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgogICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNraXA+ZmFsc2U8L3NraXA+Ci0JCQkgICAgPGVuYWJsZUFzc2VydGlvbnM+ZmFsc2U8L2VuYWJsZUFzc2VydGlvbnM+CisgICAgICAgICAgICAgICAgPGVuYWJsZUFzc2VydGlvbnM+ZmFsc2U8L2VuYWJsZUFzc2VydGlvbnM+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgogICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KICAgICAgICAgICAgIDwvcGx1Z2luPgotCSAgIDxwbHVnaW4+CisgICAgICAgPHBsdWdpbj4KICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYW50cnVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CiAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2VuYWJsZS1kaXNhYmxlLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvZW5hYmxlX2Rpc2FibGVfdGVzdC9FbmFibGVEaXNhYmxlU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZW5hYmxlLWRpc2FibGUtdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9lbmFibGVfZGlzYWJsZV90ZXN0L0VuYWJsZURpc2FibGVTZXJ2bGV0LmphdmEKaW5kZXggOGU5MTNkYS4uNTY3MWY3YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZW5hYmxlLWRpc2FibGUtdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9lbmFibGVfZGlzYWJsZV90ZXN0L0VuYWJsZURpc2FibGVTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZW5hYmxlLWRpc2FibGUtdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9lbmFibGVfZGlzYWJsZV90ZXN0L0VuYWJsZURpc2FibGVTZXJ2bGV0LmphdmEKQEAgLTkwLDkgKzkwLDkgQEAKICAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiPHRyPiIpOwogICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCIgIDx0aCBhbGlnbj1cImxlZnRcIiBjb2xzcGFuPVwiMlwiPiIgKyAiRGF0YSByZXRyaWV2ZWQgZnJvbSB0YWJsZSBcImN1c3RvbWVyXCIiICsgIjwvdGg+Iik7CiAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIjwvdHI+Iik7Ci0JCXdyaXRlci5wcmludGxuKCI8dHI+Iik7Ci0JCXdyaXRlci5wcmludGxuKCI8dGQ+IiArICJDdXN0b21lciBJRCIgKyAiPC90ZD4iKTsKLQkJd3JpdGVyLnByaW50bG4oIjx0ZD4iICsgIkN1c3RvbWVyIE5hbWUiICsgIjwvdGQ+Iik7CisgICAgICAgIHdyaXRlci5wcmludGxuKCI8dHI+Iik7CisgICAgICAgIHdyaXRlci5wcmludGxuKCI8dGQ+IiArICJDdXN0b21lciBJRCIgKyAiPC90ZD4iKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIjx0ZD4iICsgIkN1c3RvbWVyIE5hbWUiICsgIjwvdGQ+Iik7CiAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIjwvdHI+Iik7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHJzLm5leHQoKSkgewogICAgICAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiPHRyPiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZW5hYmxlLWRpc2FibGUtdGVzdC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2VuYWJsZS1kaXNhYmxlLXRlc3Qvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKaW5kZXggODgxMzMzOS4uOWEyNmZmOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZW5hYmxlLWRpc2FibGUtdGVzdC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9lbmFibGUtZGlzYWJsZS10ZXN0L3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAKIC0tPgogCi08IURPQ1RZUEUgc3VuLXdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDkuMCBTZXJ2bGV0IDIuNS8vRU4iIAorPCFET0NUWVBFIHN1bi13ZWItYXBwIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEFwcGxpY2F0aW9uIFNlcnZlciA5LjAgU2VydmxldCAyLjUvL0VOIgogICAiaHR0cDovL3d3dy5zdW4uY29tL3NvZnR3YXJlL2FwcHNlcnZlci9kdGRzL3N1bi13ZWItYXBwXzJfNS0wLmR0ZCI+CiA8c3VuLXdlYi1hcHAgZXJyb3ItdXJsPSIiPgogICA8cmVzb3VyY2UtcmVmPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZW5hYmxlLWRpc2FibGUtdGVzdC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZW5hYmxlLWRpc2FibGUtdGVzdC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmluZGV4IDkzY2QxMmYuLjJhYzgyMzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2VuYWJsZS1kaXNhYmxlLXRlc3Qvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9lbmFibGUtZGlzYWJsZS10ZXN0L3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTE3LDkgKzE3LDkgQEAKIAogLS0+CiAKLTx3ZWItYXBwIHZlcnNpb249IjIuNSIgCi0gIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIAotICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKzx3ZWItYXBwIHZlcnNpb249IjIuNSIKKyAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+RW5hYmxlRGlzYWJsZVNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2VuYWJsZS1kaXNhYmxlLXRlc3Qvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvZW5hYmxlX2Rpc2FibGVfdGVzdC9FbmFibGVEaXNhYmxlVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZW5hYmxlLWRpc2FibGUtdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9lbmFibGVfZGlzYWJsZV90ZXN0L0VuYWJsZURpc2FibGVUZXN0LmphdmEKaW5kZXggNGM2MDNhNy4uN2VhZjMxYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZW5hYmxlLWRpc2FibGUtdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9lbmFibGVfZGlzYWJsZV90ZXN0L0VuYWJsZURpc2FibGVUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZW5hYmxlLWRpc2FibGUtdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9lbmFibGVfZGlzYWJsZV90ZXN0L0VuYWJsZURpc2FibGVUZXN0LmphdmEKQEAgLTM3LDUzICszNyw1MyBAQAogCiBwdWJsaWMgY2xhc3MgRW5hYmxlRGlzYWJsZVRlc3QgewogCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLQkJLy8gMS4gQm9vdHN0cmFwIEdsYXNzRmlzaCBEQVMgaW4gZW1iZWRkZWQgbW9kZS4KLQkJR2xhc3NGaXNoUHJvcGVydGllcyBnbGFzc0Zpc2hQcm9wZXJ0aWVzID0gbmV3IEdsYXNzRmlzaFByb3BlcnRpZXMoKTsKLQkJZ2xhc3NGaXNoUHJvcGVydGllcy5zZXRJbnN0YW5jZVJvb3QoU3lzdGVtLmdldGVudigiUzFBU19IT01FIikKLQkJCQkrICIvZG9tYWlucy9kb21haW4xIik7Ci0JCWdsYXNzRmlzaFByb3BlcnRpZXMuc2V0Q29uZmlnRmlsZVJlYWRPbmx5KGZhbHNlKTsKLQkJR2xhc3NGaXNoIGdsYXNzZmlzaCA9IEdsYXNzRmlzaFJ1bnRpbWUuYm9vdHN0cmFwKCkubmV3R2xhc3NGaXNoKAotCQkJCWdsYXNzRmlzaFByb3BlcnRpZXMpOwotCQlQcmludFN0cmVhbSBzeXNvdXQgPSBTeXN0ZW0ub3V0OwotCQlnbGFzc2Zpc2guc3RhcnQoKTsKLQkJU3lzdGVtLnNldE91dChzeXNvdXQpOworICAgICAgICAvLyAxLiBCb290c3RyYXAgR2xhc3NGaXNoIERBUyBpbiBlbWJlZGRlZCBtb2RlLgorICAgICAgICBHbGFzc0Zpc2hQcm9wZXJ0aWVzIGdsYXNzRmlzaFByb3BlcnRpZXMgPSBuZXcgR2xhc3NGaXNoUHJvcGVydGllcygpOworICAgICAgICBnbGFzc0Zpc2hQcm9wZXJ0aWVzLnNldEluc3RhbmNlUm9vdChTeXN0ZW0uZ2V0ZW52KCJTMUFTX0hPTUUiKQorICAgICAgICAgICAgICAgICsgIi9kb21haW5zL2RvbWFpbjEiKTsKKyAgICAgICAgZ2xhc3NGaXNoUHJvcGVydGllcy5zZXRDb25maWdGaWxlUmVhZE9ubHkoZmFsc2UpOworICAgICAgICBHbGFzc0Zpc2ggZ2xhc3NmaXNoID0gR2xhc3NGaXNoUnVudGltZS5ib290c3RyYXAoKS5uZXdHbGFzc0Zpc2goCisgICAgICAgICAgICAgICAgZ2xhc3NGaXNoUHJvcGVydGllcyk7CisgICAgICAgIFByaW50U3RyZWFtIHN5c291dCA9IFN5c3RlbS5vdXQ7CisgICAgICAgIGdsYXNzZmlzaC5zdGFydCgpOworICAgICAgICBTeXN0ZW0uc2V0T3V0KHN5c291dCk7CiAKLQkJLy8gMi4gRGVwbG95IHRoZSBQYWFTIGFwcGxpY2F0aW9uLgotCQlGaWxlIGFyY2hpdmUgPSBuZXcgRmlsZShTeXN0ZW0uZ2V0UHJvcGVydHkoImJhc2VkaXIiKQotCQkJCSsgIi90YXJnZXQvZW5hYmxlLWRpc2FibGUtc2FtcGxlLndhciIpOyAvLyBUT0RPIDo6IHVzZQotCQkvLyBtdm4gYXBpcyB0bwotCQkvLyBnZXQgdGhlCi0JCS8vIGFyY2hpdmUKLQkJLy8gbG9jYXRpb24uCi0JCUFzc2VydC5hc3NlcnRUcnVlKGFyY2hpdmUuZXhpc3RzKCkpOworICAgICAgICAvLyAyLiBEZXBsb3kgdGhlIFBhYVMgYXBwbGljYXRpb24uCisgICAgICAgIEZpbGUgYXJjaGl2ZSA9IG5ldyBGaWxlKFN5c3RlbS5nZXRQcm9wZXJ0eSgiYmFzZWRpciIpCisgICAgICAgICAgICAgICAgKyAiL3RhcmdldC9lbmFibGUtZGlzYWJsZS1zYW1wbGUud2FyIik7IC8vIFRPRE8gOjogdXNlCisgICAgICAgIC8vIG12biBhcGlzIHRvCisgICAgICAgIC8vIGdldCB0aGUKKyAgICAgICAgLy8gYXJjaGl2ZQorICAgICAgICAvLyBsb2NhdGlvbi4KKyAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoYXJjaGl2ZS5leGlzdHMoKSk7CiAKLQkJRGVwbG95ZXIgZGVwbG95ZXIgPSBudWxsOwotCQlTdHJpbmcgYXBwTmFtZSA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlkZXBsb3llciA9IGdsYXNzZmlzaC5nZXREZXBsb3llcigpOwotCQkJYXBwTmFtZSA9IGRlcGxveWVyLmRlcGxveShhcmNoaXZlKTsKKyAgICAgICAgRGVwbG95ZXIgZGVwbG95ZXIgPSBudWxsOworICAgICAgICBTdHJpbmcgYXBwTmFtZSA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBkZXBsb3llciA9IGdsYXNzZmlzaC5nZXREZXBsb3llcigpOworICAgICAgICAgICAgYXBwTmFtZSA9IGRlcGxveWVyLmRlcGxveShhcmNoaXZlKTsKIAotCQkJU3lzdGVtLmVyci5wcmludGxuKCJEZXBsb3llZCBbIiArIGFwcE5hbWUgKyAiXSIpOwotCQkJQXNzZXJ0LmFzc2VydE5vdE51bGwoYXBwTmFtZSk7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkRlcGxveWVkIFsiICsgYXBwTmFtZSArICJdIik7CisgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChhcHBOYW1lKTsKIAotCQkJQ29tbWFuZFJlc3VsdCByZXN1bHQgPSBudWxsOwotCQkJQ29tbWFuZFJ1bm5lciBjb21tYW5kUnVubmVyID0gZ2xhc3NmaXNoLmdldENvbW1hbmRSdW5uZXIoKTsKLQkJCXsKLQkJCQlyZXN1bHQgPSBjb21tYW5kUnVubmVyLnJ1bigibGlzdC1zZXJ2aWNlcyIsICJhcHBuYW1lPSIKLQkJCQkJCSsgYXBwTmFtZSwgIm91dHB1dD1TVEFURSIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5saXN0LXNlcnZpY2VzIGNvbW1hbmQgb3V0cHV0IFsgIgotCQkJCQkJKyByZXN1bHQuZ2V0T3V0cHV0KCkgKyAiXSIpOworICAgICAgICAgICAgQ29tbWFuZFJlc3VsdCByZXN1bHQgPSBudWxsOworICAgICAgICAgICAgQ29tbWFuZFJ1bm5lciBjb21tYW5kUnVubmVyID0gZ2xhc3NmaXNoLmdldENvbW1hbmRSdW5uZXIoKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21tYW5kUnVubmVyLnJ1bigibGlzdC1zZXJ2aWNlcyIsICJhcHBuYW1lPSIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgYXBwTmFtZSwgIm91dHB1dD1TVEFURSIpOworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5saXN0LXNlcnZpY2VzIGNvbW1hbmQgb3V0cHV0IFsgIgorICAgICAgICAgICAgICAgICAgICAgICAgKyByZXN1bHQuZ2V0T3V0cHV0KCkgKyAiXSIpOwogCi0JCQkJYm9vbGVhbiBub3RSdW5uaW5nID0gcmVzdWx0LmdldE91dHB1dCgpLnRvTG93ZXJDYXNlKCkKLQkJCQkJCS5jb250YWlucygibm90cnVubmluZyIpOwotCQkJCUFzc2VydC5hc3NlcnRUcnVlKCFub3RSdW5uaW5nKTsKLQkJCQlib29sZWFuIHN0b3BwZWQgPSByZXN1bHQuZ2V0T3V0cHV0KCkudG9Mb3dlckNhc2UoKQotCQkJCQkJLmNvbnRhaW5zKCJzdG9wcGVkIik7Ci0JCQkJQXNzZXJ0LmFzc2VydFRydWUoIXN0b3BwZWQpOwotCQkJfQorICAgICAgICAgICAgICAgIGJvb2xlYW4gbm90UnVubmluZyA9IHJlc3VsdC5nZXRPdXRwdXQoKS50b0xvd2VyQ2FzZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAuY29udGFpbnMoIm5vdHJ1bm5pbmciKTsKKyAgICAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSghbm90UnVubmluZyk7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBzdG9wcGVkID0gcmVzdWx0LmdldE91dHB1dCgpLnRvTG93ZXJDYXNlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5jb250YWlucygic3RvcHBlZCIpOworICAgICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCFzdG9wcGVkKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8yLmEuQ2hlY2sgaWYgYWxsIHNlcnZpY2VzIG9mIHRoZSBhcHBsaWNhdGlvbiBhcmUgaW4gT05MWSBydW5uaW5nIHN0YXRlLgogCkBAIC0xMTMsMTUgKzExMywxNSBAQAogICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoc2VydmljZXNSdW5uaW5nKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWxsIHNlcnZpY2VzIGluIFJVTk5JTkcgc3RhdGUiKTsKIAotCQkJLy8gMy4gQWNjZXNzIHRoZSBhcHAgdG8gbWFrZSBzdXJlIFBhYVMgYXBwIGlzIGNvcnJlY3RseSBwcm92aXNpb25lZC4KLQkJCVN0cmluZyBIVFRQX1BPUlQgPSAoU3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKSAhPSBudWxsKSA/IFN5c3RlbQotCQkJCQkuZ2V0UHJvcGVydHkoImh0dHAucG9ydCIpIDogIjI4MDgwIjsKKyAgICAgICAgICAgIC8vIDMuIEFjY2VzcyB0aGUgYXBwIHRvIG1ha2Ugc3VyZSBQYWFTIGFwcCBpcyBjb3JyZWN0bHkgcHJvdmlzaW9uZWQuCisgICAgICAgICAgICBTdHJpbmcgSFRUUF9QT1JUID0gKFN5c3RlbS5nZXRQcm9wZXJ0eSgiaHR0cC5wb3J0IikgIT0gbnVsbCkgPyBTeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKSA6ICIyODA4MCI7CiAKLQkJCVN0cmluZyBpbnN0YW5jZUlQID0gZ2V0TEJJUEFkZHJlc3MoZ2xhc3NmaXNoKTsKKyAgICAgICAgICAgIFN0cmluZyBpbnN0YW5jZUlQID0gZ2V0TEJJUEFkZHJlc3MoZ2xhc3NmaXNoKTsKIAotCQkJZ2V0KCJodHRwOi8vIiArIGluc3RhbmNlSVAgKyAiOiIgKyBIVFRQX1BPUlQKLQkJCQkJKyAiL2VuYWJsZS1kaXNhYmxlLXNhbXBsZS9FbmFibGVEaXNhYmxlU2VydmxldCIsCi0JCQkJCSJDdXN0b21lciBJRCIpOworICAgICAgICAgICAgZ2V0KCJodHRwOi8vIiArIGluc3RhbmNlSVAgKyAiOiIgKyBIVFRQX1BPUlQKKyAgICAgICAgICAgICAgICAgICAgKyAiL2VuYWJsZS1kaXNhYmxlLXNhbXBsZS9FbmFibGVEaXNhYmxlU2VydmxldCIsCisgICAgICAgICAgICAgICAgICAgICJDdXN0b21lciBJRCIpOwogCiAKICAgICAgICAgICAgIC8vNC5EaXNhYmxlIGFwcGxpY2F0aW9uCkBAIC0xNjEsOTIgKzE2MSw5MiBAQAogICAgICAgICAgICAgQXNzZXJ0LmFzc2VydEZhbHNlKHJlcG9ydC5oYXNGYWlsdXJlcygpKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW5hYmxlZCBhcHBsaWNhdGlvbiAnICIrYXBwTmFtZSsiICcgIik7CiAKLQkJCWdldCgiaHR0cDovLyIgKyBpbnN0YW5jZUlQICsgIjoiICsgSFRUUF9QT1JUCi0JCQkJCSsgIi9lbmFibGUtZGlzYWJsZS1zYW1wbGUvRW5hYmxlRGlzYWJsZVNlcnZsZXQiLAotCQkJCQkiQ3VzdG9tZXIgSUQiKTsKKyAgICAgICAgICAgIGdldCgiaHR0cDovLyIgKyBpbnN0YW5jZUlQICsgIjoiICsgSFRUUF9QT1JUCisgICAgICAgICAgICAgICAgICAgICsgIi9lbmFibGUtZGlzYWJsZS1zYW1wbGUvRW5hYmxlRGlzYWJsZVNlcnZsZXQiLAorICAgICAgICAgICAgICAgICAgICAiQ3VzdG9tZXIgSUQiKTsKIAotCQkJLy8gOC4uIFVuZGVwbG95IHRoZSBQYWFTIGFwcGxpY2F0aW9uIC4KLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChhcHBOYW1lICE9IG51bGwpIHsKLQkJCQlkZXBsb3llci51bmRlcGxveShhcHBOYW1lKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRlc3Ryb3lpbmcgdGhlIHJlc291cmNlcyBjcmVhdGVkIik7Ci0JCQkJU3lzdGVtLmVyci5wcmludGxuKCJVbmRlcGxveWVkIFsiICsgYXBwTmFtZSArICJdIik7Ci0JCQkJdHJ5IHsKLQkJCQkJYm9vbGVhbiB1bmRlcGxveUNsZWFuID0gZmFsc2U7Ci0JCQkJCUNvbW1hbmRSZXN1bHQgY29tbWFuZFJlc3VsdCA9IGdsYXNzZmlzaC5nZXRDb21tYW5kUnVubmVyKCkKLQkJCQkJCQkucnVuKCJsaXN0LXNlcnZpY2VzIik7Ci0JCQkJCWlmIChjb21tYW5kUmVzdWx0LmdldE91dHB1dCgpLmNvbnRhaW5zKCJOb3RoaW5nIHRvIGxpc3QuIikpIHsKLQkJCQkJCXVuZGVwbG95Q2xlYW4gPSB0cnVlOwotCQkJCQl9Ci0JCQkJCUFzc2VydC5hc3NlcnRUcnVlKHVuZGVwbG95Q2xlYW4pOwotCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCVN5c3RlbS5lcnIKLQkJCQkJCQkucHJpbnRsbigiQ291bGRuJ3QgdmFyaWZ5IHdoZXRoZXIgdW5kZXBsb3kgc3VjY2VlZGVkIik7Ci0JCQkJfQotCQkJfQotCQkJZ2xhc3NmaXNoLmRpc3Bvc2UoKTsKLQkJfQorICAgICAgICAgICAgLy8gOC4uIFVuZGVwbG95IHRoZSBQYWFTIGFwcGxpY2F0aW9uIC4KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGlmIChhcHBOYW1lICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBkZXBsb3llci51bmRlcGxveShhcHBOYW1lKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlc3Ryb3lpbmcgdGhlIHJlc291cmNlcyBjcmVhdGVkIik7CisgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVbmRlcGxveWVkIFsiICsgYXBwTmFtZSArICJdIik7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB1bmRlcGxveUNsZWFuID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIENvbW1hbmRSZXN1bHQgY29tbWFuZFJlc3VsdCA9IGdsYXNzZmlzaC5nZXRDb21tYW5kUnVubmVyKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAucnVuKCJsaXN0LXNlcnZpY2VzIik7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb21tYW5kUmVzdWx0LmdldE91dHB1dCgpLmNvbnRhaW5zKCJOb3RoaW5nIHRvIGxpc3QuIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVwbG95Q2xlYW4gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKHVuZGVwbG95Q2xlYW4pOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJpbnRsbigiQ291bGRuJ3QgdmFyaWZ5IHdoZXRoZXIgdW5kZXBsb3kgc3VjY2VlZGVkIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2xhc3NmaXNoLmRpc3Bvc2UoKTsKKyAgICAgICAgfQogCi0JfQorICAgIH0KIAotCXByaXZhdGUgdm9pZCBnZXQoU3RyaW5nIHVybFN0ciwgU3RyaW5nIHJlc3VsdCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVVSTCB1cmwgPSBuZXcgVVJMKHVybFN0cik7Ci0JCVVSTENvbm5lY3Rpb24geWMgPSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJcblVSTENvbm5lY3Rpb24gWyIgKyB5YyArICJdIDogIik7Ci0JCUJ1ZmZlcmVkUmVhZGVyIGluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcigKLQkJCQl5Yy5nZXRJbnB1dFN0cmVhbSgpKSk7Ci0JCVN0cmluZyBsaW5lID0gbnVsbDsKLQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQl3aGlsZSAoKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7Ci0JCQlpZiAobGluZS5jb250YWlucyhyZXN1bHQpKSB7Ci0JCQkJZm91bmQgPSB0cnVlOwotCQkJfQotCQl9Ci0JCUFzc2VydC5hc3NlcnRUcnVlKGZvdW5kKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJcbioqKioqIFNVQ0NFU1MgKioqKiBGb3VuZCBbIiArIHJlc3VsdAotCQkJCSsgIl0gaW4gdGhlIHJlc3BvbnNlLioqKioqXG4iKTsKLQl9CisgICAgcHJpdmF0ZSB2b2lkIGdldChTdHJpbmcgdXJsU3RyLCBTdHJpbmcgcmVzdWx0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwodXJsU3RyKTsKKyAgICAgICAgVVJMQ29ubmVjdGlvbiB5YyA9IHVybC5vcGVuQ29ubmVjdGlvbigpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuVVJMQ29ubmVjdGlvbiBbIiArIHljICsgIl0gOiAiKTsKKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKAorICAgICAgICAgICAgICAgIHljLmdldElucHV0U3RyZWFtKCkpKTsKKyAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOworICAgICAgICBib29sZWFuIGZvdW5kID0gZmFsc2U7CisgICAgICAgIHdoaWxlICgobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKKyAgICAgICAgICAgIGlmIChsaW5lLmNvbnRhaW5zKHJlc3VsdCkpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoZm91bmQpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuKioqKiogU1VDQ0VTUyAqKioqIEZvdW5kIFsiICsgcmVzdWx0CisgICAgICAgICAgICAgICAgKyAiXSBpbiB0aGUgcmVzcG9uc2UuKioqKipcbiIpOworICAgIH0KIAotCXByaXZhdGUgU3RyaW5nIGdldExCSVBBZGRyZXNzKEdsYXNzRmlzaCBnbGFzc2Zpc2gpIHsKLQkJU3RyaW5nIGxiSVAgPSBudWxsOwotCQlTdHJpbmcgSVBBZGRyZXNzUGF0dGVybiA9ICJJUC1BRERSRVNTXFxzKlxuKiguKilcXHMqXG4oKFswMV0/XFxkKnwyWzAtNF1cXGR8MjVbMC01XSlcXC4iCi0JCQkJKyAiKFswMV0/XFxkXFxkP3wyWzAtNF1cXGR8MjVbMC01XSlcXC4iCi0JCQkJKyAiKFswMV0/XFxkXFxkP3wyWzAtNF1cXGR8MjVbMC01XSlcXC4iCi0JCQkJKyAiKFswLTldP1xcZFxcZD98MlswLTRdXFxkfDI1WzAtNV0pKSI7Ci0JCXRyeSB7Ci0JCQlDb21tYW5kUnVubmVyIGNvbW1hbmRSdW5uZXIgPSBnbGFzc2Zpc2guZ2V0Q29tbWFuZFJ1bm5lcigpOwotCQkJU3RyaW5nIHJlc3VsdCA9IGNvbW1hbmRSdW5uZXIKLQkJCQkJLnJ1bigibGlzdC1zZXJ2aWNlcyIsICItLXR5cGUiLCAiTEIiLAotCQkJCQkJCSItLW91dHB1dCIsICJJUC1BRERSRVNTIikuZ2V0T3V0cHV0KCkudG9TdHJpbmcoKTsKLQkJCWlmIChyZXN1bHQuY29udGFpbnMoIk5vdGhpbmcgdG8gbGlzdC4iKSkgewotCQkJCXJlc3VsdCA9IGNvbW1hbmRSdW5uZXIKLQkJCQkJCS5ydW4oImxpc3Qtc2VydmljZXMiLCAiLS10eXBlIiwgIkphdmFFRSIsICItLW91dHB1dCIsCi0JCQkJCQkJCSJJUC1BRERSRVNTIikuZ2V0T3V0cHV0KCkudG9TdHJpbmcoKTsKKyAgICBwcml2YXRlIFN0cmluZyBnZXRMQklQQWRkcmVzcyhHbGFzc0Zpc2ggZ2xhc3NmaXNoKSB7CisgICAgICAgIFN0cmluZyBsYklQID0gbnVsbDsKKyAgICAgICAgU3RyaW5nIElQQWRkcmVzc1BhdHRlcm4gPSAiSVAtQUREUkVTU1xccypcbiooLiopXFxzKlxuKChbMDFdP1xcZCp8MlswLTRdXFxkfDI1WzAtNV0pXFwuIgorICAgICAgICAgICAgICAgICsgIihbMDFdP1xcZFxcZD98MlswLTRdXFxkfDI1WzAtNV0pXFwuIgorICAgICAgICAgICAgICAgICsgIihbMDFdP1xcZFxcZD98MlswLTRdXFxkfDI1WzAtNV0pXFwuIgorICAgICAgICAgICAgICAgICsgIihbMC05XT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKSkiOworICAgICAgICB0cnkgeworICAgICAgICAgICAgQ29tbWFuZFJ1bm5lciBjb21tYW5kUnVubmVyID0gZ2xhc3NmaXNoLmdldENvbW1hbmRSdW5uZXIoKTsKKyAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBjb21tYW5kUnVubmVyCisgICAgICAgICAgICAgICAgICAgIC5ydW4oImxpc3Qtc2VydmljZXMiLCAiLS10eXBlIiwgIkxCIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1vdXRwdXQiLCAiSVAtQUREUkVTUyIpLmdldE91dHB1dCgpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAocmVzdWx0LmNvbnRhaW5zKCJOb3RoaW5nIHRvIGxpc3QuIikpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21tYW5kUnVubmVyCisgICAgICAgICAgICAgICAgICAgICAgICAucnVuKCJsaXN0LXNlcnZpY2VzIiwgIi0tdHlwZSIsICJKYXZhRUUiLCAiLS1vdXRwdXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSVAtQUREUkVTUyIpLmdldE91dHB1dCgpLnRvU3RyaW5nKCk7CiAKLQkJCQlQYXR0ZXJuIHAgPSBQYXR0ZXJuLmNvbXBpbGUoSVBBZGRyZXNzUGF0dGVybik7Ci0JCQkJTWF0Y2hlciBtID0gcC5tYXRjaGVyKHJlc3VsdCk7Ci0JCQkJaWYgKG0uZmluZCgpKSB7Ci0JCQkJCWxiSVAgPSBtLmdyb3VwKDIpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWxiSVAgPSAibG9jYWxob3N0IjsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCVBhdHRlcm4gcCA9IFBhdHRlcm4uY29tcGlsZShJUEFkZHJlc3NQYXR0ZXJuKTsKLQkJCQlNYXRjaGVyIG0gPSBwLm1hdGNoZXIocmVzdWx0KTsKLQkJCQlpZiAobS5maW5kKCkpIHsKLQkJCQkJbGJJUCA9IG0uZ3JvdXAoMik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbGJJUCA9ICJsb2NhbGhvc3QiOwotCQkJCX0KKyAgICAgICAgICAgICAgICBQYXR0ZXJuIHAgPSBQYXR0ZXJuLmNvbXBpbGUoSVBBZGRyZXNzUGF0dGVybik7CisgICAgICAgICAgICAgICAgTWF0Y2hlciBtID0gcC5tYXRjaGVyKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgaWYgKG0uZmluZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGxiSVAgPSBtLmdyb3VwKDIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxiSVAgPSAibG9jYWxob3N0IjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFBhdHRlcm4gcCA9IFBhdHRlcm4uY29tcGlsZShJUEFkZHJlc3NQYXR0ZXJuKTsKKyAgICAgICAgICAgICAgICBNYXRjaGVyIG0gPSBwLm1hdGNoZXIocmVzdWx0KTsKKyAgICAgICAgICAgICAgICBpZiAobS5maW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbGJJUCA9IG0uZ3JvdXAoMik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbGJJUCA9ICJsb2NhbGhvc3QiOworICAgICAgICAgICAgICAgIH0KIAotCQkJfQorICAgICAgICAgICAgfQogCi0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJlZ2V4IGhhcyB0aHJvd24gYW4gZXhjZXB0aW9uICIKLQkJCQkJKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCQlyZXR1cm4gImxvY2FsaG9zdCI7Ci0JCX0KLQkJcmV0dXJuIGxiSVA7Ci0JfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWdleCBoYXMgdGhyb3duIGFuIGV4Y2VwdGlvbiAiCisgICAgICAgICAgICAgICAgICAgICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgcmV0dXJuICJsb2NhbGhvc3QiOworICAgICAgICB9CisgICAgICAgIHJldHVybiBsYklQOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2V4dC1zaGFyZWQtc2VydmljZS1lbmFibGUtZGlzYWJsZS10ZXN0L3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9leHQtc2hhcmVkLXNlcnZpY2UtZW5hYmxlLWRpc2FibGUtdGVzdC9wb20ueG1sCmluZGV4IDM0NmFjYWQuLjkyZGU3ZjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2V4dC1zaGFyZWQtc2VydmljZS1lbmFibGUtZGlzYWJsZS10ZXN0L3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZXh0LXNoYXJlZC1zZXJ2aWNlLWVuYWJsZS1kaXNhYmxlLXRlc3QvcG9tLnhtbApAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxza2lwPmZhbHNlPC9za2lwPgotCQkJICAgIDxlbmFibGVBc3NlcnRpb25zPmZhbHNlPC9lbmFibGVBc3NlcnRpb25zPgorICAgICAgICAgICAgICAgIDxlbmFibGVBc3NlcnRpb25zPmZhbHNlPC9lbmFibGVBc3NlcnRpb25zPgogICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgogICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgICAgICA8dmVyc2lvbj4zLjE8L3ZlcnNpb24+CiAgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+Ci0JPGRlcGVuZGVuY3k+CisgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+NC4xMy4yPC92ZXJzaW9uPgpAQCAtODQsOCArODQsOCBAQAogICAgICAgICAgICAgPC9zeXN0ZW1QYXRoPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgCSAgICA8Z3JvdXBJZD5qYWthcnRhLnRyYW5zYWN0aW9uPC9ncm91cElkPgotICAgICAgCSAgICA8YXJ0aWZhY3RJZD5qdGE8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgIDxncm91cElkPmpha2FydGEudHJhbnNhY3Rpb248L2dyb3VwSWQ+CisgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmp0YTwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogICA8L2RlcGVuZGVuY2llcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2V4dC1zaGFyZWQtc2VydmljZS1lbmFibGUtZGlzYWJsZS10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2VuYWJsZWRpc2FibGUvQW5pbWFsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9leHQtc2hhcmVkLXNlcnZpY2UtZW5hYmxlLWRpc2FibGUtdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9lbmFibGVkaXNhYmxlL0FuaW1hbC5qYXZhCmluZGV4IGJjNjIzM2IuLjM4NzU3ZmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2V4dC1zaGFyZWQtc2VydmljZS1lbmFibGUtZGlzYWJsZS10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2VuYWJsZWRpc2FibGUvQW5pbWFsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZXh0LXNoYXJlZC1zZXJ2aWNlLWVuYWJsZS1kaXNhYmxlLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvZW5hYmxlZGlzYWJsZS9BbmltYWwuamF2YQpAQCAtMjYsMTkgKzI2LDE5IEBACiAgKgogICogQGF1dGhvciBpc2hhbi52aXNobm9pQGphdmEubmV0CiAgKi8KLUBFbnRpdHkgCitARW50aXR5CiBAVGFibGUobmFtZSA9ICJaT09fRElSRUNUT1JZIikKIHB1YmxpYyBjbGFzcyBBbmltYWwgaW1wbGVtZW50cyBTZXJpYWxpemFibGUgewotICAgIAorCiAgICAgQElkCiAgICAgcHJpdmF0ZSBpbnQgSUQ7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgc3BlY2llczsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIGNhZ2VOdW1iZXI7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyB5ZWFyT2ZCaXJ0aDsKIAogICAgIHB1YmxpYyBpbnQgZ2V0SUQoKSB7CkBAIC00Nyw3ICs0Nyw3IEBACiAKICAgICBwdWJsaWMgdm9pZCBzZXRJRChpbnQgSUQpIHsKICAgICAgICAgdGhpcy5JRCA9IElEOwotICAgIH0gICAgCisgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBnZXRDYWdlTnVtYmVyKCkgewogICAgICAgICByZXR1cm4gY2FnZU51bWJlcjsKQEAgLTgwLDcgKzgwLDcgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRZZWFyT2ZCaXJ0aChTdHJpbmcgeWVhck9mQmlydGgpIHsKICAgICAgICAgdGhpcy55ZWFyT2ZCaXJ0aCA9IHllYXJPZkJpcnRoOwogICAgIH0KLSAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgICByZXR1cm4gImVudGl0eS5OZXdFbnRpdHlbaWQ9IiArIElEICsgIl0iOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZXh0ZXJuYWwtYW5kLXNoYXJlZC1zZXJ2aWNlL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9leHRlcm5hbC1hbmQtc2hhcmVkLXNlcnZpY2UvcG9tLnhtbAppbmRleCA4OWY2OTZmLi43MWY0MjFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9leHRlcm5hbC1hbmQtc2hhcmVkLXNlcnZpY2UvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9leHRlcm5hbC1hbmQtc2hhcmVkLXNlcnZpY2UvcG9tLnhtbApAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxza2lwPmZhbHNlPC9za2lwPgotCQkJICAgIDxlbmFibGVBc3NlcnRpb25zPmZhbHNlPC9lbmFibGVBc3NlcnRpb25zPgorICAgICAgICAgICAgICAgIDxlbmFibGVBc3NlcnRpb25zPmZhbHNlPC9lbmFibGVBc3NlcnRpb25zPgogICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgogICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgICAgICA8dmVyc2lvbj4zLjE8L3ZlcnNpb24+CiAgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+Ci0JPGRlcGVuZGVuY3k+CisgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+NC4xMy4yPC92ZXJzaW9uPgpAQCAtODQsOCArODQsOCBAQAogICAgICAgICAgICAgPC9zeXN0ZW1QYXRoPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgCSAgICA8Z3JvdXBJZD5qYWthcnRhLnRyYW5zYWN0aW9uPC9ncm91cElkPgotICAgICAgCSAgICA8YXJ0aWZhY3RJZD5qdGE8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgIDxncm91cElkPmpha2FydGEudHJhbnNhY3Rpb248L2dyb3VwSWQ+CisgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmp0YTwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogICA8L2RlcGVuZGVuY2llcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2V4dGVybmFsLWFuZC1zaGFyZWQtc2VydmljZS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9leHRlcm5hbF9hbmRfc2hhcmVkX3NlcnZpY2UvQW5pbWFsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9leHRlcm5hbC1hbmQtc2hhcmVkLXNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvZXh0ZXJuYWxfYW5kX3NoYXJlZF9zZXJ2aWNlL0FuaW1hbC5qYXZhCmluZGV4IDZmM2JjMmMuLmNkODA5Y2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2V4dGVybmFsLWFuZC1zaGFyZWQtc2VydmljZS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9leHRlcm5hbF9hbmRfc2hhcmVkX3NlcnZpY2UvQW5pbWFsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZXh0ZXJuYWwtYW5kLXNoYXJlZC1zZXJ2aWNlL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2V4dGVybmFsX2FuZF9zaGFyZWRfc2VydmljZS9BbmltYWwuamF2YQpAQCAtMjYsMTkgKzI2LDE5IEBACiAgKgogICogQGF1dGhvciBpc2hhbi52aXNobm9pQGphdmEubmV0CiAgKi8KLUBFbnRpdHkgCitARW50aXR5CiBAVGFibGUobmFtZSA9ICJaT09fRElSRUNUT1JZIikKIHB1YmxpYyBjbGFzcyBBbmltYWwgaW1wbGVtZW50cyBTZXJpYWxpemFibGUgewotICAgIAorCiAgICAgQElkCiAgICAgcHJpdmF0ZSBpbnQgSUQ7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgc3BlY2llczsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIGNhZ2VOdW1iZXI7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyB5ZWFyT2ZCaXJ0aDsKIAogICAgIHB1YmxpYyBpbnQgZ2V0SUQoKSB7CkBAIC00Nyw3ICs0Nyw3IEBACiAKICAgICBwdWJsaWMgdm9pZCBzZXRJRChpbnQgSUQpIHsKICAgICAgICAgdGhpcy5JRCA9IElEOwotICAgIH0gICAgCisgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBnZXRDYWdlTnVtYmVyKCkgewogICAgICAgICByZXR1cm4gY2FnZU51bWJlcjsKQEAgLTgwLDcgKzgwLDcgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRZZWFyT2ZCaXJ0aChTdHJpbmcgeWVhck9mQmlydGgpIHsKICAgICAgICAgdGhpcy55ZWFyT2ZCaXJ0aCA9IHllYXJPZkJpcnRoOwogICAgIH0KLSAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgICByZXR1cm4gImVudGl0eS5OZXdFbnRpdHlbaWQ9IiArIElEICsgIl0iOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZXh0ZXJuYWwtZGItc2VydmljZS9nZW5lcmF0ZWRlcmJ5dm0vcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2V4dGVybmFsLWRiLXNlcnZpY2UvZ2VuZXJhdGVkZXJieXZtL3BvbS54bWwKaW5kZXggMjA1OTFmMS4uZTNhOGYwNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZXh0ZXJuYWwtZGItc2VydmljZS9nZW5lcmF0ZWRlcmJ5dm0vcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9leHRlcm5hbC1kYi1zZXJ2aWNlL2dlbmVyYXRlZGVyYnl2bS9wb20ueG1sCkBAIC0yNiw3ICsyNiw3IEBACiAgICAgPC9wYXJlbnQ+CiAgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgogICAgIDxhcnRpZmFjdElkPmdlbmVyYXRlZGVyYnl2bTwvYXJ0aWZhY3RJZD4KLSAgICAKKwogICAgIDxuYW1lPkdlbmVyYXRlRGVyYnlWTTwvbmFtZT4KICAgICA8YnVpbGQ+CiAgICAgICAgIDxwbHVnaW5zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZXh0ZXJuYWwtZGItc2VydmljZS90ZXN0L3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9leHRlcm5hbC1kYi1zZXJ2aWNlL3Rlc3QvcG9tLnhtbAppbmRleCAyZGIyNzNhLi5iMTMxNGQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9leHRlcm5hbC1kYi1zZXJ2aWNlL3Rlc3QvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9leHRlcm5hbC1kYi1zZXJ2aWNlL3Rlc3QvcG9tLnhtbApAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxza2lwPmZhbHNlPC9za2lwPgotCQkJICAgIDxlbmFibGVBc3NlcnRpb25zPmZhbHNlPC9lbmFibGVBc3NlcnRpb25zPgorICAgICAgICAgICAgICAgIDxlbmFibGVBc3NlcnRpb25zPmZhbHNlPC9lbmFibGVBc3NlcnRpb25zPgogICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgogICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9leHRlcm5hbC1kYi1zZXJ2aWNlL3Rlc3Qvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9leHRlcm5hbC1kYi1zZXJ2aWNlL3Rlc3Qvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKaW5kZXggZmNhYTQyNy4uOWEzNjA4MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZXh0ZXJuYWwtZGItc2VydmljZS90ZXN0L3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2V4dGVybmFsLWRiLXNlcnZpY2UvdGVzdC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbApAQCAtMTcsNyArMTcsNyBAQAogCiAtLT4KIAotPCFET0NUWVBFIHN1bi13ZWItYXBwIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEFwcGxpY2F0aW9uIFNlcnZlciA5LjAgU2VydmxldCAyLjUvL0VOIiAKKzwhRE9DVFlQRSBzdW4td2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOS4wIFNlcnZsZXQgMi41Ly9FTiIKICAgImh0dHA6Ly93d3cuc3VuLmNvbS9zb2Z0d2FyZS9hcHBzZXJ2ZXIvZHRkcy9zdW4td2ViLWFwcF8yXzUtMC5kdGQiPgogPHN1bi13ZWItYXBwIGVycm9yLXVybD0iIj4KIDwvc3VuLXdlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9leHRlcm5hbC1kYi1zZXJ2aWNlL3Rlc3Qvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2V4dGVybmFsLWRiLXNlcnZpY2UvdGVzdC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmluZGV4IDkwOTZhY2YuLjNjYjY0MmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2V4dGVybmFsLWRiLXNlcnZpY2UvdGVzdC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2V4dGVybmFsLWRiLXNlcnZpY2UvdGVzdC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCkBAIC0xNyw5ICsxNyw5IEBACiAKIC0tPgogCi08d2ViLWFwcCB2ZXJzaW9uPSIyLjUiIAotICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiAKLSAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCis8d2ViLWFwcCB2ZXJzaW9uPSIyLjUiCisgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPkNvZmZlZVNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2V4dGVybmFsLWRiLXNlcnZpY2UvdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9leHRlcm5hbGRic2VydmljZXRlc3QvQ29mZmVlVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZXh0ZXJuYWwtZGItc2VydmljZS90ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2V4dGVybmFsZGJzZXJ2aWNldGVzdC9Db2ZmZWVUZXN0LmphdmEKaW5kZXggNTRlNmM2OS4uNDI2ZWZjMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZXh0ZXJuYWwtZGItc2VydmljZS90ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2V4dGVybmFsZGJzZXJ2aWNldGVzdC9Db2ZmZWVUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvZXh0ZXJuYWwtZGItc2VydmljZS90ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2V4dGVybmFsZGJzZXJ2aWNldGVzdC9Db2ZmZWVUZXN0LmphdmEKQEAgLTgwLDE0ICs4MCwxNCBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbmNyZWF0ZS1kZXJieS12bSBjb21tYW5kIG91dHB1dCBbICIgKwogICAgICAgICAgICAgICAgICAgICBjcmVhdGVEZXJieVZNUmVzdWx0LmdldE91dHB1dCgpICsgIl0iKTsKIAotCSAgICBTdHJpbmcgZGVyYnlJUCA9IChjcmVhdGVEZXJieVZNUmVzdWx0LmdldE91dHB1dCgpLnNwbGl0KCJcbiIpKVsxXTsKKyAgICAgICAgU3RyaW5nIGRlcmJ5SVAgPSAoY3JlYXRlRGVyYnlWTVJlc3VsdC5nZXRPdXRwdXQoKS5zcGxpdCgiXG4iKSlbMV07CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVyYnkgSVAgPSAiICsgZGVyYnlJUCk7CiAKICAgICAgICAgICAgIC8vMi4yLiBDcmVhdGUgdGhlIHNoYXJlZCBEQiBzZXJ2aWNlCiAgICAgICAgICAgICBDb21tYW5kUmVzdWx0IGNyZWF0ZUV4dGVybmFsU2VydmljZVJlc3VsdCA9IGNvbW1hbmRSdW5uZXIucnVuKAogICAgICAgICAgICAgICAgICAgICAiY3JlYXRlLWV4dGVybmFsLXNlcnZpY2UiLCAiLS1jb25maWd1cmF0aW9uIiwgImlwLWFkZHJlc3M9IiArIGRlcmJ5SVAgKyAiOmRhdGFiYXNlbmFtZT1mb286Y29ubmVjdGlvbkF0dHJpYnV0ZXM9OydjcmVhdGU9dHJ1ZSc6cG9ydD0xNTI3OnVzZXI9QVBQOnBhc3N3b3JkPUFQUDpob3N0PSIgKyBkZXJieUlQICsgIjpjbGFzc25hbWU9b3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudFhBRGF0YVNvdXJjZTpyZXNvdXJjZXR5cGU9amF2YXguc3FsLlhBRGF0YVNvdXJjZSIsCi0JCSAgICAiLS1zZXJ2aWNldHlwZSIsCisgICAgICAgICAgICAiLS1zZXJ2aWNldHlwZSIsCiAgICAgICAgICAgICAgICAgICAgICJEYXRhYmFzZSIsICJjb2ZmZWUtc2VydmljZSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbmNyZWF0ZS1leHRlcm5hbC1zZXJ2aWNlIGNvbW1hbmQgb3V0cHV0IFsgIiArCiAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUV4dGVybmFsU2VydmljZVJlc3VsdC5nZXRPdXRwdXQoKSArICJdIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9oZWxsb3dvcmxkL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9oZWxsb3dvcmxkL3BvbS54bWwKaW5kZXggNDQ1NDNjOS4uZWY3NzJiOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvaGVsbG93b3JsZC9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2hlbGxvd29ybGQvcG9tLnhtbApAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxza2lwPmZhbHNlPC9za2lwPgotCQkJICAgPGVuYWJsZUFzc2VydGlvbnM+ZmFsc2U8L2VuYWJsZUFzc2VydGlvbnM+CisgICAgICAgICAgICAgICA8ZW5hYmxlQXNzZXJ0aW9ucz5mYWxzZTwvZW5hYmxlQXNzZXJ0aW9ucz4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CiAgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvaGVsbG93b3JsZC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2hlbGxvd29ybGQvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKaW5kZXggZmNhYTQyNy4uOWEzNjA4MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvaGVsbG93b3JsZC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9oZWxsb3dvcmxkL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAKIC0tPgogCi08IURPQ1RZUEUgc3VuLXdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDkuMCBTZXJ2bGV0IDIuNS8vRU4iIAorPCFET0NUWVBFIHN1bi13ZWItYXBwIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEFwcGxpY2F0aW9uIFNlcnZlciA5LjAgU2VydmxldCAyLjUvL0VOIgogICAiaHR0cDovL3d3dy5zdW4uY29tL3NvZnR3YXJlL2FwcHNlcnZlci9kdGRzL3N1bi13ZWItYXBwXzJfNS0wLmR0ZCI+CiA8c3VuLXdlYi1hcHAgZXJyb3ItdXJsPSIiPgogPC9zdW4td2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2hlbGxvd29ybGQvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2hlbGxvd29ybGQvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAppbmRleCA0ZThkYTc1Li5jN2I2ZDk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9oZWxsb3dvcmxkL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvaGVsbG93b3JsZC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCkBAIC0xNyw5ICsxNyw5IEBACiAKIC0tPgogCi08d2ViLWFwcCB2ZXJzaW9uPSIyLjUiIAotICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiAKLSAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCis8d2ViLWFwcCB2ZXJzaW9uPSIyLjUiCisgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGlzcGxheS1uYW1lPkhlbGxvIFdvcmxkPC9kaXNwbGF5LW5hbWU+CiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9oZWxsb3dvcmxkL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2hlbGxvd29ybGQvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkVGVzdC5qYXZhCmluZGV4IDc4MGMwZWMuLmQ3ZmJiZTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2hlbGxvd29ybGQvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2hlbGxvd29ybGQvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkVGVzdC5qYXZhCkBAIC00MSw3MCArNDEsNzAgQEAKIAogcHVibGljIGNsYXNzIEhlbGxvV29ybGRUZXN0IHsKIAotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24gewogCi0JCS8vIEJvb3RzdHJhcCBHbGFzc0Zpc2ggREFTIGluIGVtYmVkZGVkIG1vZGUuCi0JCUdsYXNzRmlzaCBnbGFzc2Zpc2ggPSBib290c3RyYXAoKTsKKyAgICAgICAgLy8gQm9vdHN0cmFwIEdsYXNzRmlzaCBEQVMgaW4gZW1iZWRkZWQgbW9kZS4KKyAgICAgICAgR2xhc3NGaXNoIGdsYXNzZmlzaCA9IGJvb3RzdHJhcCgpOwogCi0JCS8vIERlcGxveSB0aGUgUGFhUyBhcHAgYW5kIHZlcmlmeSBpdC4KLQkJcnVuVGVzdHMoZ2xhc3NmaXNoKTsKKyAgICAgICAgLy8gRGVwbG95IHRoZSBQYWFTIGFwcCBhbmQgdmVyaWZ5IGl0LgorICAgICAgICBydW5UZXN0cyhnbGFzc2Zpc2gpOwogCi0JCS8vIFJlLWRlcGxveSB0aGUgUGFhUyBhcHAgYW5kIHZlcmlmeSBpdC4KLQkJU3RyaW5nIHRlc3RTY2VuYXJpb3MgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInRlc3Quc2NlbmFyaW9zIik7Ci0JCWlmICh0ZXN0U2NlbmFyaW9zID09IG51bGwKLQkJCQl8fCAiYWxsIi5jb250YWlucyh0ZXN0U2NlbmFyaW9zLnRvTG93ZXJDYXNlKCkpKSB7Ci0JCQlydW5UZXN0cyhnbGFzc2Zpc2gpOwotCQl9CisgICAgICAgIC8vIFJlLWRlcGxveSB0aGUgUGFhUyBhcHAgYW5kIHZlcmlmeSBpdC4KKyAgICAgICAgU3RyaW5nIHRlc3RTY2VuYXJpb3MgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInRlc3Quc2NlbmFyaW9zIik7CisgICAgICAgIGlmICh0ZXN0U2NlbmFyaW9zID09IG51bGwKKyAgICAgICAgICAgICAgICB8fCAiYWxsIi5jb250YWlucyh0ZXN0U2NlbmFyaW9zLnRvTG93ZXJDYXNlKCkpKSB7CisgICAgICAgICAgICBydW5UZXN0cyhnbGFzc2Zpc2gpOworICAgICAgICB9CiAKLQkJLy8gNS4gU3RvcCB0aGUgR2xhc3NGaXNoIERBUwotCQlnbGFzc2Zpc2guZGlzcG9zZSgpOwotCX0KKyAgICAgICAgLy8gNS4gU3RvcCB0aGUgR2xhc3NGaXNoIERBUworICAgICAgICBnbGFzc2Zpc2guZGlzcG9zZSgpOworICAgIH0KIAotCXByaXZhdGUgdm9pZCBnZXQoU3RyaW5nIHVybFN0ciwgU3RyaW5nIHJlc3VsdCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVVSTCB1cmwgPSBuZXcgVVJMKHVybFN0cik7Ci0JCVVSTENvbm5lY3Rpb24geWMgPSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJcblVSTENvbm5lY3Rpb24gWyIgKyB5YyArICJdIDogIik7Ci0JCUJ1ZmZlcmVkUmVhZGVyIGluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcigKLQkJCQl5Yy5nZXRJbnB1dFN0cmVhbSgpKSk7Ci0JCVN0cmluZyBsaW5lID0gbnVsbDsKLQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQl3aGlsZSAoKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7Ci0JCQlpZiAobGluZS5pbmRleE9mKHJlc3VsdCkgIT0gLTEpIHsKLQkJCQlmb3VuZCA9IHRydWU7Ci0JCQl9Ci0JCX0KLQkJQXNzZXJ0LmFzc2VydFRydWUoZm91bmQpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuKioqKiogU1VDQ0VTUyAqKioqIEZvdW5kIFsiICsgcmVzdWx0Ci0JCQkJKyAiXSBpbiB0aGUgcmVzcG9uc2UuKioqKipcbiIpOwotCX0KKyAgICBwcml2YXRlIHZvaWQgZ2V0KFN0cmluZyB1cmxTdHIsIFN0cmluZyByZXN1bHQpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCh1cmxTdHIpOworICAgICAgICBVUkxDb25uZWN0aW9uIHljID0gdXJsLm9wZW5Db25uZWN0aW9uKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5VUkxDb25uZWN0aW9uIFsiICsgeWMgKyAiXSA6ICIpOworICAgICAgICBCdWZmZXJlZFJlYWRlciBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoCisgICAgICAgICAgICAgICAgeWMuZ2V0SW5wdXRTdHJlYW0oKSkpOworICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CisgICAgICAgIGJvb2xlYW4gZm91bmQgPSBmYWxzZTsKKyAgICAgICAgd2hpbGUgKChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOworICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZihyZXN1bHQpICE9IC0xKSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGZvdW5kKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbioqKioqIFNVQ0NFU1MgKioqKiBGb3VuZCBbIiArIHJlc3VsdAorICAgICAgICAgICAgICAgICsgIl0gaW4gdGhlIHJlc3BvbnNlLioqKioqXG4iKTsKKyAgICB9CiAKLQlwcml2YXRlIHZvaWQgcnVuVGVzdHMoR2xhc3NGaXNoIGdsYXNzZmlzaCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIDIuIERlcGxveSB0aGUgUGFhUyBhcHBsaWNhdGlvbi4KLQkJRmlsZSBhcmNoaXZlID0gbmV3IEZpbGUoU3lzdGVtLmdldFByb3BlcnR5KCJiYXNlZGlyIikKLQkJCQkrICIvdGFyZ2V0L2hlbGxvd29ybGQud2FyIik7CisgICAgcHJpdmF0ZSB2b2lkIHJ1blRlc3RzKEdsYXNzRmlzaCBnbGFzc2Zpc2gpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAvLyAyLiBEZXBsb3kgdGhlIFBhYVMgYXBwbGljYXRpb24uCisgICAgICAgIEZpbGUgYXJjaGl2ZSA9IG5ldyBGaWxlKFN5c3RlbS5nZXRQcm9wZXJ0eSgiYmFzZWRpciIpCisgICAgICAgICAgICAgICAgKyAiL3RhcmdldC9oZWxsb3dvcmxkLndhciIpOwogCi0JCUFzc2VydC5hc3NlcnRUcnVlKGFyY2hpdmUuZXhpc3RzKCkpOwotCQlEZXBsb3llciBkZXBsb3llciA9IG51bGw7Ci0JCVN0cmluZyBhcHBOYW1lID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWRlcGxveWVyID0gZ2xhc3NmaXNoLmdldERlcGxveWVyKCk7Ci0JCQlhcHBOYW1lID0gZGVwbG95ZXIuZGVwbG95KGFyY2hpdmUpOworICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShhcmNoaXZlLmV4aXN0cygpKTsKKyAgICAgICAgRGVwbG95ZXIgZGVwbG95ZXIgPSBudWxsOworICAgICAgICBTdHJpbmcgYXBwTmFtZSA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBkZXBsb3llciA9IGdsYXNzZmlzaC5nZXREZXBsb3llcigpOworICAgICAgICAgICAgYXBwTmFtZSA9IGRlcGxveWVyLmRlcGxveShhcmNoaXZlKTsKIAotCQkJU3lzdGVtLmVyci5wcmludGxuKCJEZXBsb3llZCBbIiArIGFwcE5hbWUgKyAiXSIpOwotCQkJQXNzZXJ0LmFzc2VydE5vdE51bGwoYXBwTmFtZSk7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkRlcGxveWVkIFsiICsgYXBwTmFtZSArICJdIik7CisgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChhcHBOYW1lKTsKIAotCQkJQ29tbWFuZFJ1bm5lciBjb21tYW5kUnVubmVyID0gZ2xhc3NmaXNoLmdldENvbW1hbmRSdW5uZXIoKTsKLQkJCUNvbW1hbmRSZXN1bHQgcmVzdWx0ID0gY29tbWFuZFJ1bm5lci5ydW4oImxpc3Qtc2VydmljZXMiKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5saXN0LXNlcnZpY2VzIGNvbW1hbmQgb3V0cHV0IFsgIgotCQkJCQkrIHJlc3VsdC5nZXRPdXRwdXQoKSArICJdIik7CisgICAgICAgICAgICBDb21tYW5kUnVubmVyIGNvbW1hbmRSdW5uZXIgPSBnbGFzc2Zpc2guZ2V0Q29tbWFuZFJ1bm5lcigpOworICAgICAgICAgICAgQ29tbWFuZFJlc3VsdCByZXN1bHQgPSBjb21tYW5kUnVubmVyLnJ1bigibGlzdC1zZXJ2aWNlcyIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbmxpc3Qtc2VydmljZXMgY29tbWFuZCBvdXRwdXQgWyAiCisgICAgICAgICAgICAgICAgICAgICsgcmVzdWx0LmdldE91dHB1dCgpICsgIl0iKTsKIAotCQkJLy8gMy4gQWNjZXNzIHRoZSBhcHAgdG8gbWFrZSBzdXJlIFBhYVMgYXBwIGlzIGNvcnJlY3RseSBwcm92aXNpb25lZC4KLQkJCVN0cmluZyBIVFRQX1BPUlQgPSAoU3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKSAhPSBudWxsKSA/IFN5c3RlbQotCQkJCQkuZ2V0UHJvcGVydHkoImh0dHAucG9ydCIpIDogIjI4MDgwIjsKKyAgICAgICAgICAgIC8vIDMuIEFjY2VzcyB0aGUgYXBwIHRvIG1ha2Ugc3VyZSBQYWFTIGFwcCBpcyBjb3JyZWN0bHkgcHJvdmlzaW9uZWQuCisgICAgICAgICAgICBTdHJpbmcgSFRUUF9QT1JUID0gKFN5c3RlbS5nZXRQcm9wZXJ0eSgiaHR0cC5wb3J0IikgIT0gbnVsbCkgPyBTeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKSA6ICIyODA4MCI7CiAKLQkJCUxpc3Q8U3RyaW5nPiBpcHMgPSBnZXRMQklQQWRkcmVzcyhnbGFzc2Zpc2gpOworICAgICAgICAgICAgTGlzdDxTdHJpbmc+IGlwcyA9IGdldExCSVBBZGRyZXNzKGdsYXNzZmlzaCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2FpdCBmb3IgaW5zdGFuY2VzIHRvIGNvbWUgdXAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vVGhyZWFkLnNsZWVwKDYwMDAwKTsKQEAgLTExMiw4NCArMTEyLDg0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBpcDppcHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQoImh0dHA6Ly8iICsgaXAgKyAiOiIgKyBIVFRQX1BPUlQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIvaGVsbG93b3JsZC9oaS5qc3AiLAotCQkJCQkiUGFhUyBzYXlzIEhlbGxvIFdvcmxkISIpOworICAgICAgICAgICAgICAgICAgICAiUGFhUyBzYXlzIEhlbGxvIFdvcmxkISIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0JCQkvLyA0LiBVbmRlcGxveSB0aGUgUGFhUyBhcHBsaWNhdGlvbi4KLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChhcHBOYW1lICE9IG51bGwpIHsKLQkJCQlkZXBsb3llci51bmRlcGxveShhcHBOYW1lKTsKLQkJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlVuZGVwbG95ZWQgWyIgKyBhcHBOYW1lICsgIl0iKTsKLQkJCQl0cnkgewotCQkJCQlib29sZWFuIHVuZGVwbG95Q2xlYW4gPSBmYWxzZTsKLQkJCQkJQ29tbWFuZFJlc3VsdCBjb21tYW5kUmVzdWx0ID0gZ2xhc3NmaXNoLmdldENvbW1hbmRSdW5uZXIoKQotCQkJCQkJCS5ydW4oImxpc3Qtc2VydmljZXMiKTsKLQkJCQkJaWYgKGNvbW1hbmRSZXN1bHQuZ2V0T3V0cHV0KCkuY29udGFpbnMoIk5vdGhpbmcgdG8gbGlzdC4iKSkgewotCQkJCQkJdW5kZXBsb3lDbGVhbiA9IHRydWU7Ci0JCQkJCX0KLQkJCQkJQXNzZXJ0LmFzc2VydFRydWUodW5kZXBsb3lDbGVhbik7Ci0JCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkJU3lzdGVtLmVyci5wcmludGxuKCJDb3VsZG4ndCB2ZXJpZnkgd2hldGhlciB1bmRlcGxveSBzdWNjZWVkZWQiKTsKLQkJCQl9CisgICAgICAgICAgICAvLyA0LiBVbmRlcGxveSB0aGUgUGFhUyBhcHBsaWNhdGlvbi4KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGlmIChhcHBOYW1lICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBkZXBsb3llci51bmRlcGxveShhcHBOYW1lKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVuZGVwbG95ZWQgWyIgKyBhcHBOYW1lICsgIl0iKTsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBib29sZWFuIHVuZGVwbG95Q2xlYW4gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFJlc3VsdCBjb21tYW5kUmVzdWx0ID0gZ2xhc3NmaXNoLmdldENvbW1hbmRSdW5uZXIoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5ydW4oImxpc3Qtc2VydmljZXMiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRSZXN1bHQuZ2V0T3V0cHV0KCkuY29udGFpbnMoIk5vdGhpbmcgdG8gbGlzdC4iKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXBsb3lDbGVhbiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUodW5kZXBsb3lDbGVhbik7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDb3VsZG4ndCB2ZXJpZnkgd2hldGhlciB1bmRlcGxveSBzdWNjZWVkZWQiKTsKKyAgICAgICAgICAgICAgICB9CiAKLQkJCX0KLQkJfQorICAgICAgICAgICAgfQorICAgICAgICB9CiAKLQl9CisgICAgfQogCi0JcHJpdmF0ZSBHbGFzc0Zpc2ggYm9vdHN0cmFwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUdsYXNzRmlzaFByb3BlcnRpZXMgZ2xhc3NGaXNoUHJvcGVydGllcyA9IG5ldyBHbGFzc0Zpc2hQcm9wZXJ0aWVzKCk7Ci0JCWdsYXNzRmlzaFByb3BlcnRpZXMuc2V0SW5zdGFuY2VSb290KFN5c3RlbS5nZXRlbnYoIlMxQVNfSE9NRSIpCi0JCQkJKyAiL2RvbWFpbnMvZG9tYWluMSIpOwotCQlnbGFzc0Zpc2hQcm9wZXJ0aWVzLnNldENvbmZpZ0ZpbGVSZWFkT25seShmYWxzZSk7Ci0JCUdsYXNzRmlzaCBnbGFzc2Zpc2ggPSBHbGFzc0Zpc2hSdW50aW1lLmJvb3RzdHJhcCgpLm5ld0dsYXNzRmlzaCgKLQkJCQlnbGFzc0Zpc2hQcm9wZXJ0aWVzKTsKLQkJUHJpbnRTdHJlYW0gc3lzb3V0ID0gU3lzdGVtLm91dDsKLQkJZ2xhc3NmaXNoLnN0YXJ0KCk7Ci0JCVN5c3RlbS5zZXRPdXQoc3lzb3V0KTsKLQkJcmV0dXJuIGdsYXNzZmlzaDsKLQl9CisgICAgcHJpdmF0ZSBHbGFzc0Zpc2ggYm9vdHN0cmFwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIEdsYXNzRmlzaFByb3BlcnRpZXMgZ2xhc3NGaXNoUHJvcGVydGllcyA9IG5ldyBHbGFzc0Zpc2hQcm9wZXJ0aWVzKCk7CisgICAgICAgIGdsYXNzRmlzaFByb3BlcnRpZXMuc2V0SW5zdGFuY2VSb290KFN5c3RlbS5nZXRlbnYoIlMxQVNfSE9NRSIpCisgICAgICAgICAgICAgICAgKyAiL2RvbWFpbnMvZG9tYWluMSIpOworICAgICAgICBnbGFzc0Zpc2hQcm9wZXJ0aWVzLnNldENvbmZpZ0ZpbGVSZWFkT25seShmYWxzZSk7CisgICAgICAgIEdsYXNzRmlzaCBnbGFzc2Zpc2ggPSBHbGFzc0Zpc2hSdW50aW1lLmJvb3RzdHJhcCgpLm5ld0dsYXNzRmlzaCgKKyAgICAgICAgICAgICAgICBnbGFzc0Zpc2hQcm9wZXJ0aWVzKTsKKyAgICAgICAgUHJpbnRTdHJlYW0gc3lzb3V0ID0gU3lzdGVtLm91dDsKKyAgICAgICAgZ2xhc3NmaXNoLnN0YXJ0KCk7CisgICAgICAgIFN5c3RlbS5zZXRPdXQoc3lzb3V0KTsKKyAgICAgICAgcmV0dXJuIGdsYXNzZmlzaDsKKyAgICB9CiAKLQlwcml2YXRlIExpc3Q8U3RyaW5nPiBnZXRMQklQQWRkcmVzcyhHbGFzc0Zpc2ggZ2xhc3NmaXNoKSB7CisgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gZ2V0TEJJUEFkZHJlc3MoR2xhc3NGaXNoIGdsYXNzZmlzaCkgewogICAgICAgICAgICAgICAgIExpc3Q8U3RyaW5nPiBsYklQcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotCQlTdHJpbmcgSVBBZGRyZXNzUGF0dGVybiA9ICIoKFswMV0/XFxkKnwyWzAtNF1cXGR8MjVbMC01XSlcXC4iCi0JCQkJICAgICAgICArICIoWzAxXT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKVxcLiIKLQkJCQkgICAgICAgICsgIihbMDFdP1xcZFxcZD98MlswLTRdXFxkfDI1WzAtNV0pXFwuIgotCQkJCSAgICAgICAgKyAiKFswLTldP1xcZFxcZD98MlswLTRdXFxkfDI1WzAtNV0pKSI7Ci0JCXRyeSB7Ci0JCQlDb21tYW5kUnVubmVyIGNvbW1hbmRSdW5uZXIgPSBnbGFzc2Zpc2guZ2V0Q29tbWFuZFJ1bm5lcigpOwotCQkJU3RyaW5nIHJlc3VsdCA9IGNvbW1hbmRSdW5uZXIKLQkJCQkJLnJ1bigibGlzdC1zZXJ2aWNlcyIsICItLXR5cGUiLCAiTE9BRF9CQUxBTkNFUiIsCi0JCQkJCQkJIi0tb3V0cHV0IiwgIklQLUFERFJFU1MiKS5nZXRPdXRwdXQoKS50b1N0cmluZygpOwotCQkJaWYgKHJlc3VsdC5jb250YWlucygiTm90aGluZyB0byBsaXN0LiIpKSB7Ci0JCQkJcmVzdWx0ID0gY29tbWFuZFJ1bm5lcgotCQkJCQkJLnJ1bigibGlzdC1zZXJ2aWNlcyIsICItLXR5cGUiLCAiSmF2YUVFIiwgIi0tb3V0cHV0IiwKLQkJCQkJCQkJIklQLUFERFJFU1MiKS5nZXRPdXRwdXQoKS50b1N0cmluZygpOworICAgICAgICBTdHJpbmcgSVBBZGRyZXNzUGF0dGVybiA9ICIoKFswMV0/XFxkKnwyWzAtNF1cXGR8MjVbMC01XSlcXC4iCisgICAgICAgICAgICAgICAgICAgICAgICArICIoWzAxXT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKVxcLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIihbMDFdP1xcZFxcZD98MlswLTRdXFxkfDI1WzAtNV0pXFwuIgorICAgICAgICAgICAgICAgICAgICAgICAgKyAiKFswLTldP1xcZFxcZD98MlswLTRdXFxkfDI1WzAtNV0pKSI7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDb21tYW5kUnVubmVyIGNvbW1hbmRSdW5uZXIgPSBnbGFzc2Zpc2guZ2V0Q29tbWFuZFJ1bm5lcigpOworICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGNvbW1hbmRSdW5uZXIKKyAgICAgICAgICAgICAgICAgICAgLnJ1bigibGlzdC1zZXJ2aWNlcyIsICItLXR5cGUiLCAiTE9BRF9CQUxBTkNFUiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tb3V0cHV0IiwgIklQLUFERFJFU1MiKS5nZXRPdXRwdXQoKS50b1N0cmluZygpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5jb250YWlucygiTm90aGluZyB0byBsaXN0LiIpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tbWFuZFJ1bm5lcgorICAgICAgICAgICAgICAgICAgICAgICAgLnJ1bigibGlzdC1zZXJ2aWNlcyIsICItLXR5cGUiLCAiSmF2YUVFIiwgIi0tb3V0cHV0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklQLUFERFJFU1MiKS5nZXRPdXRwdXQoKS50b1N0cmluZygpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIyMjIyMiICsgcmVzdWx0KTsKLQkJCQlQYXR0ZXJuIHAgPSBQYXR0ZXJuLmNvbXBpbGUoSVBBZGRyZXNzUGF0dGVybik7Ci0JCQkJTWF0Y2hlciBtID0gcC5tYXRjaGVyKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgUGF0dGVybiBwID0gUGF0dGVybi5jb21waWxlKElQQWRkcmVzc1BhdHRlcm4pOworICAgICAgICAgICAgICAgIE1hdGNoZXIgbSA9IHAubWF0Y2hlcihyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobS5maW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxiSVBzLmFkZChtLmdyb3VwKDEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTEIgSVBzID0gIiArIGxiSVBzLnRvU3RyaW5nKCkpOwotCQkJfSBlbHNlIHsKLQkJCQlQYXR0ZXJuIHAgPSBQYXR0ZXJuLmNvbXBpbGUoSVBBZGRyZXNzUGF0dGVybik7Ci0JCQkJTWF0Y2hlciBtID0gcC5tYXRjaGVyKHJlc3VsdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFBhdHRlcm4gcCA9IFBhdHRlcm4uY29tcGlsZShJUEFkZHJlc3NQYXR0ZXJuKTsKKyAgICAgICAgICAgICAgICBNYXRjaGVyIG0gPSBwLm1hdGNoZXIocmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG0uZmluZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYklQcy5hZGQobS5ncm91cCgxKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxCIElQcyA9ICIgKyBsYklQcy50b1N0cmluZygpKTsKLQkJCX0KKyAgICAgICAgICAgIH0KIAotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJSZWdleCBoYXMgdGhyb3duIGFuIGV4Y2VwdGlvbiAiCi0JCQkJCSsgZS5nZXRNZXNzYWdlKCkpOwotCQkJbGJJUHMuYWRkKCJsb2NhbGhvc3QiKTsKLQkJfQotCQlyZXR1cm4gbGJJUHM7Ci0JfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWdleCBoYXMgdGhyb3duIGFuIGV4Y2VwdGlvbiAiCisgICAgICAgICAgICAgICAgICAgICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgbGJJUHMuYWRkKCJsb2NhbGhvc3QiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGJJUHM7CisgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9qYXZhZWVfc2hhcmVkX3NlcnZpY2UvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2phdmFlZV9zaGFyZWRfc2VydmljZS9wb20ueG1sCmluZGV4IDdmODhhN2EuLmEwOGVkYzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2phdmFlZV9zaGFyZWRfc2VydmljZS9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2phdmFlZV9zaGFyZWRfc2VydmljZS9wb20ueG1sCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgogICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNraXA+ZmFsc2U8L3NraXA+Ci0JCQkgICAgPGVuYWJsZUFzc2VydGlvbnM+ZmFsc2U8L2VuYWJsZUFzc2VydGlvbnM+CisgICAgICAgICAgICAgICAgPGVuYWJsZUFzc2VydGlvbnM+ZmFsc2U8L2VuYWJsZUFzc2VydGlvbnM+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgogICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2phdmFlZV9zaGFyZWRfc2VydmljZS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9qYXZhZWVfc2hhcmVkX3NlcnZpY2UvQm9va1N0b3JlU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvamF2YWVlX3NoYXJlZF9zZXJ2aWNlL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2phdmFlZV9zaGFyZWRfc2VydmljZS9Cb29rU3RvcmVTZXJ2bGV0LmphdmEKaW5kZXggNDk5NTk2Ni4uMDZiZTFjMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvamF2YWVlX3NoYXJlZF9zZXJ2aWNlL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2phdmFlZV9zaGFyZWRfc2VydmljZS9Cb29rU3RvcmVTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvamF2YWVlX3NoYXJlZF9zZXJ2aWNlL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2phdmFlZV9zaGFyZWRfc2VydmljZS9Cb29rU3RvcmVTZXJ2bGV0LmphdmEKQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5nZXRQYXJhbWV0ZXIoImF1dGhvcnMiKSwgcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInByaWNlIikpOwogICAgICAgICAgICAgb3BlcmF0aW9ucy5wcmludEJvb2tzVGFibGUoZHMsIHdyaXRlcik7CiAgICAgICAgICAgICBnZW5lcmF0ZU5ld0Jvb2tGb3JtKHdyaXRlcik7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9CiAKICAgICAgICAgd3JpdGVyLnByaW50bG4oIjxwLz48YSBocmVmPVwnQm9va1N0b3JlU2VydmxldFwnPk15IEhvbWU8L2E+Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9qYXZhZWVfc2hhcmVkX3NlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvamF2YWVlX3NoYXJlZF9zZXJ2aWNlL0RhdGFiYXNlT3BlcmF0aW9ucy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvamF2YWVlX3NoYXJlZF9zZXJ2aWNlL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2phdmFlZV9zaGFyZWRfc2VydmljZS9EYXRhYmFzZU9wZXJhdGlvbnMuamF2YQppbmRleCA4NWY5ODI4Li5kYjgxZGMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9qYXZhZWVfc2hhcmVkX3NlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvamF2YWVlX3NoYXJlZF9zZXJ2aWNlL0RhdGFiYXNlT3BlcmF0aW9ucy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2phdmFlZV9zaGFyZWRfc2VydmljZS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9qYXZhZWVfc2hhcmVkX3NlcnZpY2UvRGF0YWJhc2VPcGVyYXRpb25zLmphdmEKQEAgLTIyMiw3ICsyMjIsNyBAQAogICAgICAgICAgICAgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9ICJTRUxFQ1QgKiBmcm9tIEJPT0tTX1RBQkxFIjsKICAgICAgICAgICAgIFJlc3VsdFNldCBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBib29sZWFuIHByaW50SGVhZGVycyA9IHRydWU7CiAKICAgICAgICAgICAgIHdoaWxlKHJzLm5leHQoKSkgewpAQCAtMjM5LDcgKzIzOSw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L3RyPiIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKCFwcmludEhlYWRlcnMpIHsgLy8gYXRsZWFzdCBvbmUgcm93IHdhcyB0aGVyZS4KICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC90YWJsZT4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yNjIsNyArMjYyLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBleGVjdXRlKERhdGFTb3VyY2UgZHMxLCBTdHJpbmcgc3FsKSB7CiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvamF2YWVlX3NoYXJlZF9zZXJ2aWNlL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvamF2YWVlX3NoYXJlZF9zZXJ2aWNlL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCmluZGV4IDIxNTM2YWIuLjhiZmJkNjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2phdmFlZV9zaGFyZWRfc2VydmljZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9qYXZhZWVfc2hhcmVkX3NlcnZpY2Uvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIAogLS0+CiAKLTwhRE9DVFlQRSBzdW4td2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOS4wIFNlcnZsZXQgMi41Ly9FTiIgCis8IURPQ1RZUEUgc3VuLXdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDkuMCBTZXJ2bGV0IDIuNS8vRU4iCiAgICJodHRwOi8vd3d3LnN1bi5jb20vc29mdHdhcmUvYXBwc2VydmVyL2R0ZHMvc3VuLXdlYi1hcHBfMl81LTAuZHRkIj4KIDxzdW4td2ViLWFwcCBlcnJvci11cmw9IiI+CiAgIDxyZXNvdXJjZS1yZWY+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9qYXZhZWVfc2hhcmVkX3NlcnZpY2Uvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2phdmFlZV9zaGFyZWRfc2VydmljZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmluZGV4IGI5NDE3ZmEuLjA2NTM2ZDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2phdmFlZV9zaGFyZWRfc2VydmljZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2phdmFlZV9zaGFyZWRfc2VydmljZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCkBAIC0xNyw5ICsxNyw5IEBACiAKIC0tPgogCi08d2ViLWFwcCB2ZXJzaW9uPSIyLjUiIAotICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiAKLSAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCis8d2ViLWFwcCB2ZXJzaW9uPSIyLjUiCisgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPkJvb2tTdG9yZVNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL2xhenktc2hhcmVkLXNlcnZpY2UtdGVzdC9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbGF6eS1zaGFyZWQtc2VydmljZS10ZXN0L3BvbS54bWwKaW5kZXggMmUxOTFjOC4uMDBjMTc0ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbGF6eS1zaGFyZWQtc2VydmljZS10ZXN0L3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbGF6eS1zaGFyZWQtc2VydmljZS10ZXN0L3BvbS54bWwKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CiAgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2tpcD5mYWxzZTwvc2tpcD4KLQkJCSAgICA8ZW5hYmxlQXNzZXJ0aW9ucz5mYWxzZTwvZW5hYmxlQXNzZXJ0aW9ucz4KKyAgICAgICAgICAgICAgICA8ZW5hYmxlQXNzZXJ0aW9ucz5mYWxzZTwvZW5hYmxlQXNzZXJ0aW9ucz4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CiAgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICAgICAgPHZlcnNpb24+My4xPC92ZXJzaW9uPgogICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KICAgICAgICAgPC9kZXBlbmRlbmN5PgotCTxkZXBlbmRlbmN5PgorICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjQuMTMuMjwvdmVyc2lvbj4KQEAgLTg0LDggKzg0LDggQEAKICAgICAgICAgICAgIDwvc3lzdGVtUGF0aD4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgIAkgICAgPGdyb3VwSWQ+amFrYXJ0YS50cmFuc2FjdGlvbjwvZ3JvdXBJZD4KLSAgICAgIAkgICAgPGFydGlmYWN0SWQ+anRhPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICA8Z3JvdXBJZD5qYWthcnRhLnRyYW5zYWN0aW9uPC9ncm91cElkPgorICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdGE8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgPC9kZXBlbmRlbmNpZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9sYXp5LXNoYXJlZC1zZXJ2aWNlLXRlc3Qvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9sYXp5LXNoYXJlZC1zZXJ2aWNlLXRlc3Qvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKaW5kZXggMTc3M2E3Mi4uYjc3NTAyYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbGF6eS1zaGFyZWQtc2VydmljZS10ZXN0L3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL2xhenktc2hhcmVkLXNlcnZpY2UtdGVzdC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPCFET0NUWVBFIHJlc291cmNlcyBQVUJMSUMgIi0vL0dsYXNzRmlzaC5vcmcvL0RURCBHbGFzc0Zpc2ggQXBwbGljYXRpb24gU2VydmVyIDMuMSBSZXNvdXJjZSBEZWZpbml0aW9ucy8vRU4iICJodHRwOi8vZ2xhc3NmaXNoLm9yZy9kdGRzL2dsYXNzZmlzaC1yZXNvdXJjZXNfMV81LmR0ZCI+CiAKIDxyZXNvdXJjZXM+Ci0JPGpkYmMtY29ubmVjdGlvbi1wb29sIGRhdGFzb3VyY2UtY2xhc3NuYW1lPSJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50WEFEYXRhU291cmNlIiByZXMtdHlwZT0iamF2YXguc3FsLkRhdGFTb3VyY2UiIG5hbWU9ImphdmE6YXBwL2pkYmMvbGF6eV9pbml0X3NoYXJlZF9zZXJ2aWNlIj4KKyAgICA8amRiYy1jb25uZWN0aW9uLXBvb2wgZGF0YXNvdXJjZS1jbGFzc25hbWU9Im9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnRYQURhdGFTb3VyY2UiIHJlcy10eXBlPSJqYXZheC5zcWwuRGF0YVNvdXJjZSIgbmFtZT0iamF2YTphcHAvamRiYy9sYXp5X2luaXRfc2hhcmVkX3NlcnZpY2UiPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2VydmljZS1uYW1lIiB2YWx1ZT0ibXktc2hhcmVkLWRiLXNlcnZpY2UiLz4KICAgICA8L2pkYmMtY29ubmVjdGlvbi1wb29sPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tcS1zaGFyZWQtc2VydmljZS10ZXN0L21xLWFwcC9lamIvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL21xLXNoYXJlZC1zZXJ2aWNlLXRlc3QvbXEtYXBwL2VqYi9wb20ueG1sCmluZGV4IGJmMDUxYjkuLmRhYTBjNzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL21xLXNoYXJlZC1zZXJ2aWNlLXRlc3QvbXEtYXBwL2VqYi9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL21xLXNoYXJlZC1zZXJ2aWNlLXRlc3QvbXEtYXBwL2VqYi9wb20ueG1sCkBAIC0yNSwxOSArMjUsMTkgQEAKICAgICA8dmVyc2lvbj4xLjA8L3ZlcnNpb24+CiAgICAgPG5hbWU+RUpCPC9uYW1lPgogICAgIDxwYWNrYWdpbmc+ZWpiPC9wYWNrYWdpbmc+Ci0JPGJ1aWxkPgotCTxmaW5hbE5hbWU+ZWpiMzAtaGVsbG8tbWRiLWVqYjwvZmluYWxOYW1lPgotCTxwbHVnaW5zPgotCSAgICAgPHBsdWdpbj4KLQkJPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotCQk8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+Ci0JCTx2ZXJzaW9uPjIuMy4yPC92ZXJzaW9uPgotCQk8Y29uZmlndXJhdGlvbj4KLQkJICAgIDxzb3VyY2U+MS42PC9zb3VyY2U+Ci0JCSAgICA8dGFyZ2V0PjEuNjwvdGFyZ2V0PgotCQk8L2NvbmZpZ3VyYXRpb24+Ci0JICAgIDwvcGx1Z2luPgotCTxwbHVnaW4+CisgICAgPGJ1aWxkPgorICAgIDxmaW5hbE5hbWU+ZWpiMzAtaGVsbG8tbWRiLWVqYjwvZmluYWxOYW1lPgorICAgIDxwbHVnaW5zPgorICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMy4yPC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDxzb3VyY2U+MS42PC9zb3VyY2U+CisgICAgICAgICAgICA8dGFyZ2V0PjEuNjwvdGFyZ2V0PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgIDwvcGx1Z2luPgorICAgIDxwbHVnaW4+CiAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZWpiLXBsdWdpbjwvYXJ0aWZhY3RJZD4KICAgICAgICAgPHZlcnNpb24+Mi4zPC92ZXJzaW9uPgpAQCAtNDUsMTggKzQ1LDE4IEBACiAgICAgICAgICAgPGVqYlZlcnNpb24+My4wPC9lamJWZXJzaW9uPgogICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CiAgICAgICA8L3BsdWdpbj4KLQk8L3BsdWdpbnM+Ci0JPC9idWlsZD4KLQk8ZGVwZW5kZW5jaWVzPgotCTxkZXBlbmRlbmN5PgotCSAgICAgIDxncm91cElkPmpha2FydGEuam1zPC9ncm91cElkPgotCSAgICAgIDxhcnRpZmFjdElkPmpha2FydGEuam1zLWFwaTwvYXJ0aWZhY3RJZD4KLQkgICAgICA8dmVyc2lvbj4zLjAuMC1SQzE8L3ZlcnNpb24+Ci0JPC9kZXBlbmRlbmN5PgotCTxkZXBlbmRlbmN5PgotCSAgICAgIDxncm91cElkPmpha2FydGEuZWpiPC9ncm91cElkPgotCSAgICAgIDxhcnRpZmFjdElkPmpha2FydGEuZWpiLWFwaTwvYXJ0aWZhY3RJZD4KLQkgICAgICA8dmVyc2lvbj4zLjIuNTwvdmVyc2lvbj4KLQk8L2RlcGVuZGVuY3k+Ci0JPC9kZXBlbmRlbmNpZXM+CisgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisgICAgPGRlcGVuZGVuY2llcz4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICA8Z3JvdXBJZD5qYWthcnRhLmptczwvZ3JvdXBJZD4KKyAgICAgICAgICA8YXJ0aWZhY3RJZD5qYWthcnRhLmptcy1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgPHZlcnNpb24+My4wLjAtUkMxPC92ZXJzaW9uPgorICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICA8Z3JvdXBJZD5qYWthcnRhLmVqYjwvZ3JvdXBJZD4KKyAgICAgICAgICA8YXJ0aWZhY3RJZD5qYWthcnRhLmVqYi1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgPHZlcnNpb24+My4yLjU8L3ZlcnNpb24+CisgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXEtc2hhcmVkLXNlcnZpY2UtdGVzdC9tcS1hcHAvZWpiL3NyYy9tYWluL2phdmEvY29tL3N1bi9zMWFzZGV2L2VqYi9lamIzMC9oZWxsby9tZGIvTWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL21xLXNoYXJlZC1zZXJ2aWNlLXRlc3QvbXEtYXBwL2VqYi9zcmMvbWFpbi9qYXZhL2NvbS9zdW4vczFhc2Rldi9lamIvZWpiMzAvaGVsbG8vbWRiL01lc3NhZ2VCZWFuLmphdmEKaW5kZXggN2U2MTMwOC4uMmE5ODFkYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXEtc2hhcmVkLXNlcnZpY2UtdGVzdC9tcS1hcHAvZWpiL3NyYy9tYWluL2phdmEvY29tL3N1bi9zMWFzZGV2L2VqYi9lamIzMC9oZWxsby9tZGIvTWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tcS1zaGFyZWQtc2VydmljZS10ZXN0L21xLWFwcC9lamIvc3JjL21haW4vamF2YS9jb20vc3VuL3MxYXNkZXYvZWpiL2VqYjMwL2hlbGxvL21kYi9NZXNzYWdlQmVhbi5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiBATWVzc2FnZURyaXZlbihtYXBwZWROYW1lPSJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9JblF1ZXVlIikKICBwdWJsaWMgY2xhc3MgTWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogCi0gICAgQFJlc291cmNlKG1hcHBlZE5hbWU9Imptcy9lamJfZWpiMzBfaGVsbG9fbWRiX1FDRiIpIAorICAgIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9RQ0YiKQogICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNGYWN0b3J5OwotICAgIAorCiAgICAgLy9EZXN0aW5hdGlvbiBRdWV1ZQogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9PdXRRdWV1ZSIpCiAgICAgUXVldWUgcmVwbHlRdWV1ZTsKQEAgLTM1LDE0ICszNSwxNCBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1lc3NhZ2VCZWFuOjogIG9uTWVzc2FnZSA6OiBHb3QgbWVzc2FnZSEhISIgKyBtZXNzYWdlKTsKIAogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IG51bGw7Ci0JUXVldWVTZXNzaW9uIHNlc3Npb24gPSBudWxsOworICAgIFF1ZXVlU2Vzc2lvbiBzZXNzaW9uID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBxY0ZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBzZXNzaW9uID0gY29ubmVjdGlvbi5jcmVhdGVRdWV1ZVNlc3Npb24oZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CiAgICAgICAgICAgICBRdWV1ZVNlbmRlciBzZW5kZXIgPSBzZXNzaW9uLmNyZWF0ZVNlbmRlcihyZXBseVF1ZXVlKTsKICAgICAgICAgICAgIFRleHRNZXNzYWdlIHRtZXNzYWdlID0gc2Vzc2lvbi5jcmVhdGVUZXh0TWVzc2FnZSgpOwotCSAgICBTdHJpbmcgbXNnVGV4dCA9ICAiUmVwbHkgZm9yICIgKyAoKFRleHRNZXNzYWdlKSBtZXNzYWdlKS5nZXRUZXh0KCk7CisgICAgICAgIFN0cmluZyBtc2dUZXh0ID0gICJSZXBseSBmb3IgIiArICgoVGV4dE1lc3NhZ2UpIG1lc3NhZ2UpLmdldFRleHQoKTsKICAgICAgICAgICAgIHRtZXNzYWdlLnNldFRleHQobXNnVGV4dCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgIiArIG1zZ1RleHQpOwogICAgICAgICAgICAgc2VuZGVyLnNlbmQodG1lc3NhZ2UpOwpAQCAtNTAsOSArNTAsOSBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7Ci0JCWlmIChzZXNzaW9uICE9IG51bGwpIHsKLQkJICAgIHNlc3Npb24uY2xvc2UoKTsKLQkJfQorICAgICAgICBpZiAoc2Vzc2lvbiAhPSBudWxsKSB7CisgICAgICAgICAgICBzZXNzaW9uLmNsb3NlKCk7CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZihjb25uZWN0aW9uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5jbG9zZSgpOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL21xLXNoYXJlZC1zZXJ2aWNlLXRlc3QvbXEtYXBwL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tcS1zaGFyZWQtc2VydmljZS10ZXN0L21xLWFwcC9wb20ueG1sCmluZGV4IGUzYmQ4NDcuLjdlMjgwYmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL21xLXNoYXJlZC1zZXJ2aWNlLXRlc3QvbXEtYXBwL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXEtc2hhcmVkLXNlcnZpY2UtdGVzdC9tcS1hcHAvcG9tLnhtbApAQCAtMjYsOCArMjYsOCBAQAogICAgIDxuYW1lPk1RPC9uYW1lPgogICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CiAgICAgPG1vZHVsZXM+Ci0JPG1vZHVsZT5lamI8L21vZHVsZT4KLQk8bW9kdWxlPndlYjwvbW9kdWxlPgotCTxtb2R1bGU+ZWFyPC9tb2R1bGU+Ci0gICAgPC9tb2R1bGVzPgkKKyAgICA8bW9kdWxlPmVqYjwvbW9kdWxlPgorICAgIDxtb2R1bGU+d2ViPC9tb2R1bGU+CisgICAgPG1vZHVsZT5lYXI8L21vZHVsZT4KKyAgICA8L21vZHVsZXM+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tcS1zaGFyZWQtc2VydmljZS10ZXN0L21xLWFwcC93ZWIvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL21xLXNoYXJlZC1zZXJ2aWNlLXRlc3QvbXEtYXBwL3dlYi9wb20ueG1sCmluZGV4IDZmMjA0NjAuLmZhYWUwYWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL21xLXNoYXJlZC1zZXJ2aWNlLXRlc3QvbXEtYXBwL3dlYi9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL21xLXNoYXJlZC1zZXJ2aWNlLXRlc3QvbXEtYXBwL3dlYi9wb20ueG1sCkBAIC0yNiw3ICsyNiw3IEBACiAgICAgPG5hbWU+V2ViU2VydmxldDwvbmFtZT4KICAgICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgogICAgIDxidWlsZD4KLQk8ZmluYWxOYW1lPmVqYjMwLWhlbGxvLW1kYi13ZWI8L2ZpbmFsTmFtZT4KKyAgICA8ZmluYWxOYW1lPmVqYjMwLWhlbGxvLW1kYi13ZWI8L2ZpbmFsTmFtZT4KICAgICAgICAgPHBsdWdpbnM+CiAgICAgICAgICAgICAgPHBsdWdpbj4KICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CkBAIC00NSwxMCArNDUsMTAgQEAKICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpha2FydGEuam1zLWFwaTwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjMuMC4wLVJDMTwvdmVyc2lvbj4KICAgICAgICAgPC9kZXBlbmRlbmN5PgotCTxkZXBlbmRlbmN5PgotCSAgICA8Z3JvdXBJZD5qYWthcnRhLnNlcnZsZXQ8L2dyb3VwSWQ+Ci0JICAgIDxhcnRpZmFjdElkPmpha2FydGEuc2VydmxldC1hcGk8L2FydGlmYWN0SWQ+Ci0JICAgIDx2ZXJzaW9uPjQuMC4wPC92ZXJzaW9uPgorICAgIDxkZXBlbmRlbmN5PgorICAgICAgICA8Z3JvdXBJZD5qYWthcnRhLnNlcnZsZXQ8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmpha2FydGEuc2VydmxldC1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMC4wPC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPC9kZXBlbmRlbmNpZXM+ICAgICAgIAkKKyAgICA8L2RlcGVuZGVuY2llcz4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL21xLXNoYXJlZC1zZXJ2aWNlLXRlc3QvbXEtYXBwL3dlYi9zcmMvbWFpbi9qYXZhL2NvbS9zdW4vczFhc2Rldi9lamIvZWpiMzAvaGVsbG8vbWRiL3dlYi9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXEtc2hhcmVkLXNlcnZpY2UtdGVzdC9tcS1hcHAvd2ViL3NyYy9tYWluL2phdmEvY29tL3N1bi9zMWFzZGV2L2VqYi9lamIzMC9oZWxsby9tZGIvd2ViL1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggNGZiMTg5ZC4uMjM3NDUxZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXEtc2hhcmVkLXNlcnZpY2UtdGVzdC9tcS1hcHAvd2ViL3NyYy9tYWluL2phdmEvY29tL3N1bi9zMWFzZGV2L2VqYi9lamIzMC9oZWxsby9tZGIvd2ViL1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXEtc2hhcmVkLXNlcnZpY2UtdGVzdC9tcS1hcHAvd2ViL3NyYy9tYWluL2phdmEvY29tL3N1bi9zMWFzZGV2L2VqYi9lamIzMC9oZWxsby9tZGIvd2ViL1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxdWV1ZUNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICAvL1RhcmdldCBRdWV1ZQogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9JblF1ZXVlIikKICAgICBwcml2YXRlIGpha2FydGEuam1zLlF1ZXVlIG1zZ0JlYW5RdWV1ZTsKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZyllbi5uZXh0RWxlbWVudCgpOwogICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gZ2V0SW5pdFBhcmFtZXRlcihuYW1lKTsKICAgICAgICAgICAgIG1zZyArPSBuYW1lICsgIj0iICsgdmFsdWUgKyAiLCAiOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgICAgIHdyaXRlci53cml0ZSgiLCBpbml0UGFyYW1zOiAiICsgbXNnICsgIlxuIik7CiAgICAgICAgIGRvVGVzdCh3cml0ZXIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLWFwcC1zY29wZWQtc2VydmljZXMvYWR2YW5jZWQvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLWFwcC1zY29wZWQtc2VydmljZXMvYWR2YW5jZWQvcG9tLnhtbAppbmRleCAzOTY2MjBjLi4wMjVjMzA2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1hcHAtc2NvcGVkLXNlcnZpY2VzL2FkdmFuY2VkL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItYXBwLXNjb3BlZC1zZXJ2aWNlcy9hZHZhbmNlZC9wb20ueG1sCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgogICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNraXA+ZmFsc2U8L3NraXA+Ci0JCQkgICAgPGVuYWJsZUFzc2VydGlvbnM+ZmFsc2U8L2VuYWJsZUFzc2VydGlvbnM+CisgICAgICAgICAgICAgICAgPGVuYWJsZUFzc2VydGlvbnM+ZmFsc2U8L2VuYWJsZUFzc2VydGlvbnM+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgogICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLWFwcC1zY29wZWQtc2VydmljZXMvYWR2YW5jZWQvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvbXVsdGlwbGVhcHBzY29wZWRzZXJ2aWNldGVzdC9FbXBsb3llZVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLWFwcC1zY29wZWQtc2VydmljZXMvYWR2YW5jZWQvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvbXVsdGlwbGVhcHBzY29wZWRzZXJ2aWNldGVzdC9FbXBsb3llZVNlcnZsZXQuamF2YQppbmRleCBmMTIxNjMxLi4xNjQ0NDM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1hcHAtc2NvcGVkLXNlcnZpY2VzL2FkdmFuY2VkL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL211bHRpcGxlYXBwc2NvcGVkc2VydmljZXRlc3QvRW1wbG95ZWVTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItYXBwLXNjb3BlZC1zZXJ2aWNlcy9hZHZhbmNlZC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9tdWx0aXBsZWFwcHNjb3BlZHNlcnZpY2V0ZXN0L0VtcGxveWVlU2VydmxldC5qYXZhCkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICAgIHdyaXRlci5wcmludGxuKCI8L3RhYmxlPiIpOwogICAgICAgICBpZiAoaHJEcyAhPSBudWxsICYmIHNhbERzICE9IG51bGwpIHsKICAgICAgICAgICAgIFN0YXRlbWVudCBzdG10MSA9IG51bGw7Ci0JICAgIFByZXBhcmVkU3RhdGVtZW50IHN0bXQyID0gbnVsbDsKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdDIgPSBudWxsOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBzdG10MSA9IGhyRHMuZ2V0Q29ubmVjdGlvbigpLmNyZWF0ZVN0YXRlbWVudCgpOwogCkBAIC0xMDAsMzQgKzEwMCwzNCBAQAogCiAKICAgICAgICAgICAgICAgICBSZXN1bHRTZXQgcnMxID0gc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgZW1wX2lkLCBlbXBfbmFtZSBmcm9tIEhSIik7Ci0JCVN0cmluZyBzYWxRdWVyeSA9ICJTRUxFQ1QgZW1wX3NhbCBmcm9tIFNBTEFSWSBXSEVSRSBlbXBfaWQgPSA/ICI7Ci0JCXN0bXQyID0gc2FsRHMuZ2V0Q29ubmVjdGlvbigpLnByZXBhcmVTdGF0ZW1lbnQoc2FsUXVlcnkpOwotICAgICAgICAgICAgICAgIAotCQlEYXRhYmFzZU1ldGFEYXRhIGRiTWV0YWRhdGEyID0gc3RtdDIuZ2V0Q29ubmVjdGlvbigpLmdldE1ldGFEYXRhKCk7CisgICAgICAgIFN0cmluZyBzYWxRdWVyeSA9ICJTRUxFQ1QgZW1wX3NhbCBmcm9tIFNBTEFSWSBXSEVSRSBlbXBfaWQgPSA/ICI7CisgICAgICAgIHN0bXQyID0gc2FsRHMuZ2V0Q29ubmVjdGlvbigpLnByZXBhcmVTdGF0ZW1lbnQoc2FsUXVlcnkpOworCisgICAgICAgIERhdGFiYXNlTWV0YURhdGEgZGJNZXRhZGF0YTIgPSBzdG10Mi5nZXRDb25uZWN0aW9uKCkuZ2V0TWV0YURhdGEoKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgZGJVcmwyID0gZGJNZXRhZGF0YTIuZ2V0VVJMKCk7CiAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIkRCIFVSTCA6ICIgKyBkYlVybDIgKyAiXG4iKTsKICAgICAgICAgICAgICAgICBpZiAoZGJVcmwyLmluZGV4T2YoInNhbGFyeV9kYXRhYmFzZSIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkN1c3RvbSBEYXRhYmFzZSBbc2FsYXJ5X2RhdGFiYXNlXSBpcyBub3QgY3JlYXRlZCB3aGlsZSBwcm92aXNpb25pbmcuIik7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotCQl3cml0ZXIucHJpbnRsbigiPHRhYmxlIGJvcmRlcj1cIjFcIiB3aWR0aD1cIjEwMCVcIj4iKTsKKworICAgICAgICB3cml0ZXIucHJpbnRsbigiPHRhYmxlIGJvcmRlcj1cIjFcIiB3aWR0aD1cIjEwMCVcIj4iKTsKICAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiPHRyPiIpOwogICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCIgIDx0aCBhbGlnbj1cImxlZnRcIiBjb2xzcGFuPVwiMlwiPiIgKyAiRW1wbG95ZWUgSW5mb3JtYXRpb24gcmV0cmlldmVkIiArICI8L3RoPiIpOwogICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8L3RyPiIpOwogICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8dHI+Iik7CiAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIjx0ZD4iICsgIkVtcGxveWVlIElEIiArICI8L3RkPiIpOwogICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8dGQ+IiArICJFbXBsb3llZSBOYW1lIiArICI8L3RkPiIpOwotCQl3cml0ZXIucHJpbnRsbigiPHRkPiIgKyAiRW1wbG95ZWUgU2FsYXJ5IiArICI8L3RkPiIpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiPHRkPiIgKyAiRW1wbG95ZWUgU2FsYXJ5IiArICI8L3RkPiIpOwogICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8L3RyPiIpOwogICAgICAgICAgICAgICAgIHdoaWxlIChyczEubmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8dHI+Iik7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCIgIDx0ZD4iICsgcnMxLmdldE9iamVjdCgxKSArICI8L3RkPiIpOwogICAgICAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiICA8dGQ+IiArIHJzMS5nZXRPYmplY3QoMikgKyAiPC90ZD4iKTsKLQkJICAgIHN0bXQyLnNldEludCgxLCAoSW50ZWdlcikgcnMxLmdldE9iamVjdCgxKSk7Ci0JCSAgICBSZXN1bHRTZXQgcnMyID0gc3RtdDIuZXhlY3V0ZVF1ZXJ5KCk7Ci0JCSAgICB3aGlsZShyczIubmV4dCgpKSB7Ci0JCQl3cml0ZXIucHJpbnRsbigiICA8dGQ+IiArIHJzMi5nZXRPYmplY3QoMSkgKyAiPC90ZD4iKTsKLQkJICAgIH0JCisgICAgICAgICAgICBzdG10Mi5zZXRJbnQoMSwgKEludGVnZXIpIHJzMS5nZXRPYmplY3QoMSkpOworICAgICAgICAgICAgUmVzdWx0U2V0IHJzMiA9IHN0bXQyLmV4ZWN1dGVRdWVyeSgpOworICAgICAgICAgICAgd2hpbGUocnMyLm5leHQoKSkgeworICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIiAgPHRkPiIgKyByczIuZ2V0T2JqZWN0KDEpICsgIjwvdGQ+Iik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8L3RyPiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiPC90YWJsZT4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLWFwcC1zY29wZWQtc2VydmljZXMvYWR2YW5jZWQvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvaW5pdC5zYWxhcnktc2VydmljZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1hcHAtc2NvcGVkLXNlcnZpY2VzL2FkdmFuY2VkL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2luaXQuc2FsYXJ5LXNlcnZpY2Uuc3FsCmluZGV4IDljN2E0MmMuLjdlM2U1ZWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLWFwcC1zY29wZWQtc2VydmljZXMvYWR2YW5jZWQvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvaW5pdC5zYWxhcnktc2VydmljZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItYXBwLXNjb3BlZC1zZXJ2aWNlcy9hZHZhbmNlZC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9pbml0LnNhbGFyeS1zZXJ2aWNlLnNxbApAQCAtMTUsOCArMTUsOCBAQAogICovCiAKIENSRUFURSBUQUJMRSBTQUxBUlkgKAotCWVtcF9pZCAgICBpbnRlZ2VyIG5vdCBudWxsLCAKLQllbXBfc2FsICAgZmxvYXQoNywgMikKKyAgICBlbXBfaWQgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBlbXBfc2FsICAgZmxvYXQoNywgMikKICk7CiAKIElOU0VSVCBJTlRPIFNBTEFSWSBWQUxVRVMoMTAxLCAxMTExMS4xMik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1hcHAtc2NvcGVkLXNlcnZpY2VzL2FkdmFuY2VkL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItYXBwLXNjb3BlZC1zZXJ2aWNlcy9hZHZhbmNlZC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbAppbmRleCBmY2FhNDI3Li45YTM2MDgyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1hcHAtc2NvcGVkLXNlcnZpY2VzL2FkdmFuY2VkL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLWFwcC1zY29wZWQtc2VydmljZXMvYWR2YW5jZWQvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIAogLS0+CiAKLTwhRE9DVFlQRSBzdW4td2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOS4wIFNlcnZsZXQgMi41Ly9FTiIgCis8IURPQ1RZUEUgc3VuLXdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDkuMCBTZXJ2bGV0IDIuNS8vRU4iCiAgICJodHRwOi8vd3d3LnN1bi5jb20vc29mdHdhcmUvYXBwc2VydmVyL2R0ZHMvc3VuLXdlYi1hcHBfMl81LTAuZHRkIj4KIDxzdW4td2ViLWFwcCBlcnJvci11cmw9IiI+CiA8L3N1bi13ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItYXBwLXNjb3BlZC1zZXJ2aWNlcy9hZHZhbmNlZC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItYXBwLXNjb3BlZC1zZXJ2aWNlcy9hZHZhbmNlZC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmluZGV4IDMzMDA5YzcuLmUyOGFmMjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLWFwcC1zY29wZWQtc2VydmljZXMvYWR2YW5jZWQvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1hcHAtc2NvcGVkLXNlcnZpY2VzL2FkdmFuY2VkL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTE3LDkgKzE3LDkgQEAKIAogLS0+CiAKLTx3ZWItYXBwIHZlcnNpb249IjIuNSIgCi0gIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIAotICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKzx3ZWItYXBwIHZlcnNpb249IjIuNSIKKyAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+RW1wbG95ZWVTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1hcHAtc2NvcGVkLXNlcnZpY2VzL2FkdmFuY2VkL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL211bHRpcGxlYXBwc2NvcGVkc2VydmljZXRlc3QvRW1wbG95ZWVUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1hcHAtc2NvcGVkLXNlcnZpY2VzL2FkdmFuY2VkL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL211bHRpcGxlYXBwc2NvcGVkc2VydmljZXRlc3QvRW1wbG95ZWVUZXN0LmphdmEKaW5kZXggZTY0ZDMyMS4uM2MzODgxNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItYXBwLXNjb3BlZC1zZXJ2aWNlcy9hZHZhbmNlZC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9tdWx0aXBsZWFwcHNjb3BlZHNlcnZpY2V0ZXN0L0VtcGxveWVlVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLWFwcC1zY29wZWQtc2VydmljZXMvYWR2YW5jZWQvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvbXVsdGlwbGVhcHBzY29wZWRzZXJ2aWNldGVzdC9FbXBsb3llZVRlc3QuamF2YQpAQCAtNTIsNyArNTIsNyBAQAogICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICAvLyAxLiBCb290c3RyYXAgR2xhc3NGaXNoIERBUyBpbiBlbWJlZGRlZCBtb2RlLgotCUdsYXNzRmlzaFByb3BlcnRpZXMgZ2xhc3NGaXNoUHJvcGVydGllcyA9IG5ldyBHbGFzc0Zpc2hQcm9wZXJ0aWVzKCk7CisgICAgR2xhc3NGaXNoUHJvcGVydGllcyBnbGFzc0Zpc2hQcm9wZXJ0aWVzID0gbmV3IEdsYXNzRmlzaFByb3BlcnRpZXMoKTsKICAgICAgICAgZ2xhc3NGaXNoUHJvcGVydGllcy5zZXRJbnN0YW5jZVJvb3QoU3lzdGVtLmdldGVudigiUzFBU19IT01FIikKICAgICAgICAgICAgICAgICArICIvZG9tYWlucy9kb21haW4xIik7CiAgICAgICAgIGdsYXNzRmlzaFByb3BlcnRpZXMuc2V0Q29uZmlnRmlsZVJlYWRPbmx5KGZhbHNlKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLWFwcC1zY29wZWQtc2VydmljZXMvYmFzaWMvaW5pdC5zYWxhcnktc2VydmljZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1hcHAtc2NvcGVkLXNlcnZpY2VzL2Jhc2ljL2luaXQuc2FsYXJ5LXNlcnZpY2Uuc3FsCmluZGV4IDljN2E0MmMuLjdlM2U1ZWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLWFwcC1zY29wZWQtc2VydmljZXMvYmFzaWMvaW5pdC5zYWxhcnktc2VydmljZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItYXBwLXNjb3BlZC1zZXJ2aWNlcy9iYXNpYy9pbml0LnNhbGFyeS1zZXJ2aWNlLnNxbApAQCAtMTUsOCArMTUsOCBAQAogICovCiAKIENSRUFURSBUQUJMRSBTQUxBUlkgKAotCWVtcF9pZCAgICBpbnRlZ2VyIG5vdCBudWxsLCAKLQllbXBfc2FsICAgZmxvYXQoNywgMikKKyAgICBlbXBfaWQgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBlbXBfc2FsICAgZmxvYXQoNywgMikKICk7CiAKIElOU0VSVCBJTlRPIFNBTEFSWSBWQUxVRVMoMTAxLCAxMTExMS4xMik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1hcHAtc2NvcGVkLXNlcnZpY2VzL2Jhc2ljL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1hcHAtc2NvcGVkLXNlcnZpY2VzL2Jhc2ljL3BvbS54bWwKaW5kZXggMjQ4OTdiNS4uZmE1NzM1OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItYXBwLXNjb3BlZC1zZXJ2aWNlcy9iYXNpYy9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLWFwcC1zY29wZWQtc2VydmljZXMvYmFzaWMvcG9tLnhtbApAQCAtNTAsMTIgKzUwLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgogICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNraXA+ZmFsc2U8L3NraXA+Ci0JCQkgICAgPGVuYWJsZUFzc2VydGlvbnM+ZmFsc2U8L2VuYWJsZUFzc2VydGlvbnM+CisgICAgICAgICAgICAgICAgPGVuYWJsZUFzc2VydGlvbnM+ZmFsc2U8L2VuYWJsZUFzc2VydGlvbnM+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgogICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KICAgICAgICAgICAgIDwvcGx1Z2luPgotCSAgIDxwbHVnaW4+CisgICAgICAgPHBsdWdpbj4KICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYW50cnVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CiAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLWFwcC1zY29wZWQtc2VydmljZXMvYmFzaWMvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvbXVsdGlwbGVhcHBzY29wZWRzZXJ2aWNldGVzdC9FbXBsb3llZVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLWFwcC1zY29wZWQtc2VydmljZXMvYmFzaWMvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvbXVsdGlwbGVhcHBzY29wZWRzZXJ2aWNldGVzdC9FbXBsb3llZVNlcnZsZXQuamF2YQppbmRleCAwNWYxNGJmLi5mYWRlZDFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1hcHAtc2NvcGVkLXNlcnZpY2VzL2Jhc2ljL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL211bHRpcGxlYXBwc2NvcGVkc2VydmljZXRlc3QvRW1wbG95ZWVTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItYXBwLXNjb3BlZC1zZXJ2aWNlcy9iYXNpYy9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9tdWx0aXBsZWFwcHNjb3BlZHNlcnZpY2V0ZXN0L0VtcGxveWVlU2VydmxldC5qYXZhCkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICAgIHdyaXRlci5wcmludGxuKCI8L3RhYmxlPiIpOwogICAgICAgICBpZiAoaHJEcyAhPSBudWxsICYmIHNhbERzICE9IG51bGwpIHsKICAgICAgICAgICAgIFN0YXRlbWVudCBzdG10MSA9IG51bGw7Ci0JICAgIFByZXBhcmVkU3RhdGVtZW50IHN0bXQyID0gbnVsbDsKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdDIgPSBudWxsOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBzdG10MSA9IGhyRHMuZ2V0Q29ubmVjdGlvbigpLmNyZWF0ZVN0YXRlbWVudCgpOwogCkBAIC0xMDAsMzUgKzEwMCwzNSBAQAogCiAKICAgICAgICAgICAgICAgICBSZXN1bHRTZXQgcnMxID0gc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgZW1wX2lkLCBlbXBfbmFtZSBmcm9tIEhSIik7Ci0JCVN0cmluZyBzYWxRdWVyeSA9ICJTRUxFQ1QgZW1wX3NhbCBmcm9tIFNBTEFSWSBXSEVSRSBlbXBfaWQgPSA/ICI7Ci0JCXN0bXQyID0gc2FsRHMuZ2V0Q29ubmVjdGlvbigpLnByZXBhcmVTdGF0ZW1lbnQoc2FsUXVlcnkpOwotICAgICAgICAgICAgICAgIAotCQlEYXRhYmFzZU1ldGFEYXRhIGRiTWV0YWRhdGEyID0gc3RtdDIuZ2V0Q29ubmVjdGlvbigpLmdldE1ldGFEYXRhKCk7CisgICAgICAgIFN0cmluZyBzYWxRdWVyeSA9ICJTRUxFQ1QgZW1wX3NhbCBmcm9tIFNBTEFSWSBXSEVSRSBlbXBfaWQgPSA/ICI7CisgICAgICAgIHN0bXQyID0gc2FsRHMuZ2V0Q29ubmVjdGlvbigpLnByZXBhcmVTdGF0ZW1lbnQoc2FsUXVlcnkpOworCisgICAgICAgIERhdGFiYXNlTWV0YURhdGEgZGJNZXRhZGF0YTIgPSBzdG10Mi5nZXRDb25uZWN0aW9uKCkuZ2V0TWV0YURhdGEoKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgZGJVcmwyID0gZGJNZXRhZGF0YTIuZ2V0VVJMKCk7CiAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIkRCIFVSTCA6ICIgKyBkYlVybDIgKyAiXG4iKTsKICAgICAgICAgICAgICAgICBpZiAoZGJVcmwyLmluZGV4T2YoInNhbGFyeV9kYXRhYmFzZSIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkN1c3RvbSBEYXRhYmFzZSBbc2FsYXJ5X2RhdGFiYXNlXSBpcyBub3QgY3JlYXRlZCB3aGlsZSBwcm92aXNpb25pbmcuIik7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotCQl3cml0ZXIucHJpbnRsbigiPHRhYmxlIGJvcmRlcj1cIjFcIiB3aWR0aD1cIjEwMCVcIj4iKTsKKworICAgICAgICB3cml0ZXIucHJpbnRsbigiPHRhYmxlIGJvcmRlcj1cIjFcIiB3aWR0aD1cIjEwMCVcIj4iKTsKICAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiPHRyPiIpOwogICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCIgIDx0aCBhbGlnbj1cImxlZnRcIiBjb2xzcGFuPVwiMlwiPiIgKyAiRW1wbG95ZWUgSW5mb3JtYXRpb24gcmV0cmlldmVkIiArICI8L3RoPiIpOwogICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8L3RyPiIpOwogICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8dHI+Iik7CiAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIjx0ZD4iICsgIkVtcGxveWVlIElEIiArICI8L3RkPiIpOwogICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8dGQ+IiArICJFbXBsb3llZSBOYW1lIiArICI8L3RkPiIpOwotCQl3cml0ZXIucHJpbnRsbigiPHRkPiIgKyAiRW1wbG95ZWUgU2FsYXJ5IiArICI8L3RkPiIpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiPHRkPiIgKyAiRW1wbG95ZWUgU2FsYXJ5IiArICI8L3RkPiIpOwogICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8L3RyPiIpOwogICAgICAgICAgICAgICAgIHdoaWxlIChyczEubmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8dHI+Iik7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCIgIDx0ZD4iICsgcnMxLmdldE9iamVjdCgxKSArICI8L3RkPiIpOwogICAgICAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiICA8dGQ+IiArIHJzMS5nZXRPYmplY3QoMikgKyAiPC90ZD4iKTsKLQkJICAgIHN0bXQyLnNldEludCgxLCAoSW50ZWdlcikgcnMxLmdldE9iamVjdCgxKSk7Ci0JCSAgICBSZXN1bHRTZXQgcnMyID0gc3RtdDIuZXhlY3V0ZVF1ZXJ5KCk7Ci0JCSAgICB3aGlsZShyczIubmV4dCgpKSB7Ci0JCQl3cml0ZXIucHJpbnRsbigiICA8dGQ+IiArIHJzMi5nZXRPYmplY3QoMSkgKyAiPC90ZD4iKTsKKyAgICAgICAgICAgIHN0bXQyLnNldEludCgxLCAoSW50ZWdlcikgcnMxLmdldE9iamVjdCgxKSk7CisgICAgICAgICAgICBSZXN1bHRTZXQgcnMyID0gc3RtdDIuZXhlY3V0ZVF1ZXJ5KCk7CisgICAgICAgICAgICB3aGlsZShyczIubmV4dCgpKSB7CisgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiICA8dGQ+IiArIHJzMi5nZXRPYmplY3QoMSkgKyAiPC90ZD4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8L3RyPiIpOwotCQkgICAgfQkKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIjwvdGFibGU+Iik7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLWFwcC1zY29wZWQtc2VydmljZXMvYmFzaWMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1hcHAtc2NvcGVkLXNlcnZpY2VzL2Jhc2ljL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCmluZGV4IGZjYWE0MjcuLjlhMzYwODIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLWFwcC1zY29wZWQtc2VydmljZXMvYmFzaWMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItYXBwLXNjb3BlZC1zZXJ2aWNlcy9iYXNpYy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbApAQCAtMTcsNyArMTcsNyBAQAogCiAtLT4KIAotPCFET0NUWVBFIHN1bi13ZWItYXBwIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEFwcGxpY2F0aW9uIFNlcnZlciA5LjAgU2VydmxldCAyLjUvL0VOIiAKKzwhRE9DVFlQRSBzdW4td2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOS4wIFNlcnZsZXQgMi41Ly9FTiIKICAgImh0dHA6Ly93d3cuc3VuLmNvbS9zb2Z0d2FyZS9hcHBzZXJ2ZXIvZHRkcy9zdW4td2ViLWFwcF8yXzUtMC5kdGQiPgogPHN1bi13ZWItYXBwIGVycm9yLXVybD0iIj4KIDwvc3VuLXdlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1hcHAtc2NvcGVkLXNlcnZpY2VzL2Jhc2ljL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1hcHAtc2NvcGVkLXNlcnZpY2VzL2Jhc2ljL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKaW5kZXggMzMwMDljNy4uZTI4YWYyNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItYXBwLXNjb3BlZC1zZXJ2aWNlcy9iYXNpYy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLWFwcC1zY29wZWQtc2VydmljZXMvYmFzaWMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApAQCAtMTcsOSArMTcsOSBAQAogCiAtLT4KIAotPHdlYi1hcHAgdmVyc2lvbj0iMi41IiAKLSAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgCi0gIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorPHdlYi1hcHAgdmVyc2lvbj0iMi41IgorICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5FbXBsb3llZVNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLWFwcC1zY29wZWQtc2VydmljZXMvYmFzaWMvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvbXVsdGlwbGVhcHBzY29wZWRzZXJ2aWNldGVzdC9FbXBsb3llZVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLWFwcC1zY29wZWQtc2VydmljZXMvYmFzaWMvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvbXVsdGlwbGVhcHBzY29wZWRzZXJ2aWNldGVzdC9FbXBsb3llZVRlc3QuamF2YQppbmRleCBlNjRkMzIxLi4zYzM4ODE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1hcHAtc2NvcGVkLXNlcnZpY2VzL2Jhc2ljL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL211bHRpcGxlYXBwc2NvcGVkc2VydmljZXRlc3QvRW1wbG95ZWVUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItYXBwLXNjb3BlZC1zZXJ2aWNlcy9iYXNpYy9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9tdWx0aXBsZWFwcHNjb3BlZHNlcnZpY2V0ZXN0L0VtcGxveWVlVGVzdC5qYXZhCkBAIC01Miw3ICs1Miw3IEBACiAgICAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIC8vIDEuIEJvb3RzdHJhcCBHbGFzc0Zpc2ggREFTIGluIGVtYmVkZGVkIG1vZGUuCi0JR2xhc3NGaXNoUHJvcGVydGllcyBnbGFzc0Zpc2hQcm9wZXJ0aWVzID0gbmV3IEdsYXNzRmlzaFByb3BlcnRpZXMoKTsKKyAgICBHbGFzc0Zpc2hQcm9wZXJ0aWVzIGdsYXNzRmlzaFByb3BlcnRpZXMgPSBuZXcgR2xhc3NGaXNoUHJvcGVydGllcygpOwogICAgICAgICBnbGFzc0Zpc2hQcm9wZXJ0aWVzLnNldEluc3RhbmNlUm9vdChTeXN0ZW0uZ2V0ZW52KCJTMUFTX0hPTUUiKQogICAgICAgICAgICAgICAgICsgIi9kb21haW5zL2RvbWFpbjEiKTsKICAgICAgICAgZ2xhc3NGaXNoUHJvcGVydGllcy5zZXRDb25maWdGaWxlUmVhZE9ubHkoZmFsc2UpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItc2hhcmVkLXNlcnZpY2VzL2FkdmFuY2VkL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1zaGFyZWQtc2VydmljZXMvYWR2YW5jZWQvcG9tLnhtbAppbmRleCAzZTBhMDQ2Li4xZjQ2MTcyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1zaGFyZWQtc2VydmljZXMvYWR2YW5jZWQvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1zaGFyZWQtc2VydmljZXMvYWR2YW5jZWQvcG9tLnhtbApAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxza2lwPmZhbHNlPC9za2lwPgotCQkJICAgIDxlbmFibGVBc3NlcnRpb25zPmZhbHNlPC9lbmFibGVBc3NlcnRpb25zPgorICAgICAgICAgICAgICAgIDxlbmFibGVBc3NlcnRpb25zPmZhbHNlPC9lbmFibGVBc3NlcnRpb25zPgogICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgogICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1zaGFyZWQtc2VydmljZXMvYWR2YW5jZWQvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvbXVsdGlwbGVzaGFyZWRkYnNlcnZpY2V0ZXN0L0VtcGxveWVlU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItc2hhcmVkLXNlcnZpY2VzL2FkdmFuY2VkL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL211bHRpcGxlc2hhcmVkZGJzZXJ2aWNldGVzdC9FbXBsb3llZVNlcnZsZXQuamF2YQppbmRleCA0YTNiMTkzLi43M2I3NWRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1zaGFyZWQtc2VydmljZXMvYWR2YW5jZWQvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvbXVsdGlwbGVzaGFyZWRkYnNlcnZpY2V0ZXN0L0VtcGxveWVlU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLXNoYXJlZC1zZXJ2aWNlcy9hZHZhbmNlZC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9tdWx0aXBsZXNoYXJlZGRic2VydmljZXRlc3QvRW1wbG95ZWVTZXJ2bGV0LmphdmEKQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgd3JpdGVyLnByaW50bG4oIjwvdGFibGU+Iik7CiAgICAgICAgIGlmIChockRzICE9IG51bGwgJiYgc2FsRHMgIT0gbnVsbCkgewogICAgICAgICAgICAgU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKLQkgICAgUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdDIgPSBudWxsOworICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBzdG10MiA9IG51bGw7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHN0bXQxID0gaHJEcy5nZXRDb25uZWN0aW9uKCkuY3JlYXRlU3RhdGVtZW50KCk7CiAKQEAgLTEwMCwzNCArMTAwLDM0IEBACiAKIAogICAgICAgICAgICAgICAgIFJlc3VsdFNldCByczEgPSBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCBlbXBfaWQsIGVtcF9uYW1lIGZyb20gSFIiKTsKLQkJU3RyaW5nIHNhbFF1ZXJ5ID0gIlNFTEVDVCBlbXBfc2FsIGZyb20gU0FMQVJZIFdIRVJFIGVtcF9pZCA9ID8gIjsKLQkJc3RtdDIgPSBzYWxEcy5nZXRDb25uZWN0aW9uKCkucHJlcGFyZVN0YXRlbWVudChzYWxRdWVyeSk7Ci0gICAgICAgICAgICAgICAgCi0JCURhdGFiYXNlTWV0YURhdGEgZGJNZXRhZGF0YTIgPSBzdG10Mi5nZXRDb25uZWN0aW9uKCkuZ2V0TWV0YURhdGEoKTsKKyAgICAgICAgU3RyaW5nIHNhbFF1ZXJ5ID0gIlNFTEVDVCBlbXBfc2FsIGZyb20gU0FMQVJZIFdIRVJFIGVtcF9pZCA9ID8gIjsKKyAgICAgICAgc3RtdDIgPSBzYWxEcy5nZXRDb25uZWN0aW9uKCkucHJlcGFyZVN0YXRlbWVudChzYWxRdWVyeSk7CisKKyAgICAgICAgRGF0YWJhc2VNZXRhRGF0YSBkYk1ldGFkYXRhMiA9IHN0bXQyLmdldENvbm5lY3Rpb24oKS5nZXRNZXRhRGF0YSgpOwogICAgICAgICAgICAgICAgIFN0cmluZyBkYlVybDIgPSBkYk1ldGFkYXRhMi5nZXRVUkwoKTsKICAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiREIgVVJMIDogIiArIGRiVXJsMiArICJcbiIpOwogICAgICAgICAgICAgICAgIGlmIChkYlVybDIuaW5kZXhPZigic2FsYXJ5X2RhdGFiYXNlIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQ3VzdG9tIERhdGFiYXNlIFtzYWxhcnlfZGF0YWJhc2VdIGlzIG5vdCBjcmVhdGVkIHdoaWxlIHByb3Zpc2lvbmluZy4iKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0JCXdyaXRlci5wcmludGxuKCI8dGFibGUgYm9yZGVyPVwiMVwiIHdpZHRoPVwiMTAwJVwiPiIpOworCisgICAgICAgIHdyaXRlci5wcmludGxuKCI8dGFibGUgYm9yZGVyPVwiMVwiIHdpZHRoPVwiMTAwJVwiPiIpOwogICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8dHI+Iik7CiAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIiAgPHRoIGFsaWduPVwibGVmdFwiIGNvbHNwYW49XCIyXCI+IiArICJFbXBsb3llZSBJbmZvcm1hdGlvbiByZXRyaWV2ZWQiICsgIjwvdGg+Iik7CiAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIjwvdHI+Iik7CiAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKICAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiPHRkPiIgKyAiRW1wbG95ZWUgSUQiICsgIjwvdGQ+Iik7CiAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIjx0ZD4iICsgIkVtcGxveWVlIE5hbWUiICsgIjwvdGQ+Iik7Ci0JCXdyaXRlci5wcmludGxuKCI8dGQ+IiArICJFbXBsb3llZSBTYWxhcnkiICsgIjwvdGQ+Iik7CisgICAgICAgIHdyaXRlci5wcmludGxuKCI8dGQ+IiArICJFbXBsb3llZSBTYWxhcnkiICsgIjwvdGQ+Iik7CiAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIjwvdHI+Iik7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHJzMS5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIiAgPHRkPiIgKyByczEuZ2V0T2JqZWN0KDEpICsgIjwvdGQ+Iik7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCIgIDx0ZD4iICsgcnMxLmdldE9iamVjdCgyKSArICI8L3RkPiIpOwotCQkgICAgc3RtdDIuc2V0SW50KDEsIChJbnRlZ2VyKSByczEuZ2V0T2JqZWN0KDEpKTsKLQkJICAgIFJlc3VsdFNldCByczIgPSBzdG10Mi5leGVjdXRlUXVlcnkoKTsKLQkJICAgIHdoaWxlKHJzMi5uZXh0KCkpIHsKLQkJCXdyaXRlci5wcmludGxuKCIgIDx0ZD4iICsgcnMyLmdldE9iamVjdCgxKSArICI8L3RkPiIpOwotCQkgICAgfQkKKyAgICAgICAgICAgIHN0bXQyLnNldEludCgxLCAoSW50ZWdlcikgcnMxLmdldE9iamVjdCgxKSk7CisgICAgICAgICAgICBSZXN1bHRTZXQgcnMyID0gc3RtdDIuZXhlY3V0ZVF1ZXJ5KCk7CisgICAgICAgICAgICB3aGlsZShyczIubmV4dCgpKSB7CisgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiICA8dGQ+IiArIHJzMi5nZXRPYmplY3QoMSkgKyAiPC90ZD4iKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIjwvdHI+Iik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8L3RhYmxlPiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItc2hhcmVkLXNlcnZpY2VzL2FkdmFuY2VkL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2luaXQuc2FsYXJ5LXNlcnZpY2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItc2hhcmVkLXNlcnZpY2VzL2FkdmFuY2VkL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2luaXQuc2FsYXJ5LXNlcnZpY2Uuc3FsCmluZGV4IDY5ZWM5ZmIuLjk2MDZlYWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLXNoYXJlZC1zZXJ2aWNlcy9hZHZhbmNlZC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9pbml0LnNhbGFyeS1zZXJ2aWNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1zaGFyZWQtc2VydmljZXMvYWR2YW5jZWQvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvaW5pdC5zYWxhcnktc2VydmljZS5zcWwKQEAgLTE1LDggKzE1LDggQEAKICAqLwogCiBDUkVBVEUgVEFCTEUgU0FMQVJZICgKLQllbXBfaWQgICAgaW50ZWdlciBub3QgbnVsbCwgCi0JZW1wX3NhbCAgIGZsb2F0KDcsIDIpCisgICAgZW1wX2lkICAgIGludGVnZXIgbm90IG51bGwsCisgICAgZW1wX3NhbCAgIGZsb2F0KDcsIDIpCiApOwogCiBJTlNFUlQgSU5UTyBTQUxBUlkgVkFMVUVTKDEwMSwgMTExMTEuMTIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItc2hhcmVkLXNlcnZpY2VzL2FkdmFuY2VkL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItc2hhcmVkLXNlcnZpY2VzL2FkdmFuY2VkL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCmluZGV4IGZjYWE0MjcuLjlhMzYwODIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLXNoYXJlZC1zZXJ2aWNlcy9hZHZhbmNlZC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1zaGFyZWQtc2VydmljZXMvYWR2YW5jZWQvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIAogLS0+CiAKLTwhRE9DVFlQRSBzdW4td2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOS4wIFNlcnZsZXQgMi41Ly9FTiIgCis8IURPQ1RZUEUgc3VuLXdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDkuMCBTZXJ2bGV0IDIuNS8vRU4iCiAgICJodHRwOi8vd3d3LnN1bi5jb20vc29mdHdhcmUvYXBwc2VydmVyL2R0ZHMvc3VuLXdlYi1hcHBfMl81LTAuZHRkIj4KIDxzdW4td2ViLWFwcCBlcnJvci11cmw9IiI+CiA8L3N1bi13ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItc2hhcmVkLXNlcnZpY2VzL2FkdmFuY2VkL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1zaGFyZWQtc2VydmljZXMvYWR2YW5jZWQvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAppbmRleCA2OGViZDE0Li4yNjBjMmMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1zaGFyZWQtc2VydmljZXMvYWR2YW5jZWQvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1zaGFyZWQtc2VydmljZXMvYWR2YW5jZWQvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApAQCAtMTcsOSArMTcsOSBAQAogCiAtLT4KIAotPHdlYi1hcHAgdmVyc2lvbj0iMi41IiAKLSAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgCi0gIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorPHdlYi1hcHAgdmVyc2lvbj0iMi41IgorICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5FbXBsb3llZVNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLXNoYXJlZC1zZXJ2aWNlcy9hZHZhbmNlZC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9tdWx0aXBsZXNoYXJlZGRic2VydmljZXRlc3QvRW1wbG95ZWVUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1zaGFyZWQtc2VydmljZXMvYWR2YW5jZWQvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvbXVsdGlwbGVzaGFyZWRkYnNlcnZpY2V0ZXN0L0VtcGxveWVlVGVzdC5qYXZhCmluZGV4IGZlZmU4MDkuLjcwNDZlNjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLXNoYXJlZC1zZXJ2aWNlcy9hZHZhbmNlZC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9tdWx0aXBsZXNoYXJlZGRic2VydmljZXRlc3QvRW1wbG95ZWVUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItc2hhcmVkLXNlcnZpY2VzL2FkdmFuY2VkL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL211bHRpcGxlc2hhcmVkZGJzZXJ2aWNldGVzdC9FbXBsb3llZVRlc3QuamF2YQpAQCAtMTMzLDcgKzEzMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRlLXNoYXJlZC1zZXJ2aWNlIiwgInNhbGFyeS1zZXJ2aWNlIik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbmRlbGV0ZS1zaGFyZWQtc2VydmljZSBzYWxhcnktc2VydmljZSBjb21tYW5kIG91dHB1dCBbIiArCiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVJlc3VsdC5nZXRPdXRwdXQoKSArICJdIik7Ci0gICAgICAgICAgICB9IAorICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1zaGFyZWQtc2VydmljZXMvYmFzaWMvaW5pdC5zYWxhcnktc2VydmljZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1zaGFyZWQtc2VydmljZXMvYmFzaWMvaW5pdC5zYWxhcnktc2VydmljZS5zcWwKaW5kZXggOWM3YTQyYy4uN2UzZTVlYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItc2hhcmVkLXNlcnZpY2VzL2Jhc2ljL2luaXQuc2FsYXJ5LXNlcnZpY2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLXNoYXJlZC1zZXJ2aWNlcy9iYXNpYy9pbml0LnNhbGFyeS1zZXJ2aWNlLnNxbApAQCAtMTUsOCArMTUsOCBAQAogICovCiAKIENSRUFURSBUQUJMRSBTQUxBUlkgKAotCWVtcF9pZCAgICBpbnRlZ2VyIG5vdCBudWxsLCAKLQllbXBfc2FsICAgZmxvYXQoNywgMikKKyAgICBlbXBfaWQgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBlbXBfc2FsICAgZmxvYXQoNywgMikKICk7CiAKIElOU0VSVCBJTlRPIFNBTEFSWSBWQUxVRVMoMTAxLCAxMTExMS4xMik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1zaGFyZWQtc2VydmljZXMvYmFzaWMvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLXNoYXJlZC1zZXJ2aWNlcy9iYXNpYy9wb20ueG1sCmluZGV4IGUyNjliYjkuLmZkZjhmMDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLXNoYXJlZC1zZXJ2aWNlcy9iYXNpYy9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLXNoYXJlZC1zZXJ2aWNlcy9iYXNpYy9wb20ueG1sCkBAIC01MCwxMiArNTAsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CiAgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2tpcD5mYWxzZTwvc2tpcD4KLQkJCSAgICA8ZW5hYmxlQXNzZXJ0aW9ucz5mYWxzZTwvZW5hYmxlQXNzZXJ0aW9ucz4KKyAgICAgICAgICAgICAgICA8ZW5hYmxlQXNzZXJ0aW9ucz5mYWxzZTwvZW5hYmxlQXNzZXJ0aW9ucz4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CiAgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgogICAgICAgICAgICAgPC9wbHVnaW4+Ci0JICAgPHBsdWdpbj4KKyAgICAgICA8cGx1Z2luPgogICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1hbnRydW4tcGx1Z2luPC9hcnRpZmFjdElkPgogICAgICAgICAgICA8ZXhlY3V0aW9ucz4KICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItc2hhcmVkLXNlcnZpY2VzL2Jhc2ljL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL211bHRpcGxlc2hhcmVkZGJzZXJ2aWNldGVzdC9FbXBsb3llZVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLXNoYXJlZC1zZXJ2aWNlcy9iYXNpYy9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9tdWx0aXBsZXNoYXJlZGRic2VydmljZXRlc3QvRW1wbG95ZWVTZXJ2bGV0LmphdmEKaW5kZXggNGEzYjE5My4uNzNiNzVkYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItc2hhcmVkLXNlcnZpY2VzL2Jhc2ljL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL211bHRpcGxlc2hhcmVkZGJzZXJ2aWNldGVzdC9FbXBsb3llZVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1zaGFyZWQtc2VydmljZXMvYmFzaWMvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvbXVsdGlwbGVzaGFyZWRkYnNlcnZpY2V0ZXN0L0VtcGxveWVlU2VydmxldC5qYXZhCkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICAgIHdyaXRlci5wcmludGxuKCI8L3RhYmxlPiIpOwogICAgICAgICBpZiAoaHJEcyAhPSBudWxsICYmIHNhbERzICE9IG51bGwpIHsKICAgICAgICAgICAgIFN0YXRlbWVudCBzdG10MSA9IG51bGw7Ci0JICAgIFByZXBhcmVkU3RhdGVtZW50IHN0bXQyID0gbnVsbDsKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdDIgPSBudWxsOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBzdG10MSA9IGhyRHMuZ2V0Q29ubmVjdGlvbigpLmNyZWF0ZVN0YXRlbWVudCgpOwogCkBAIC0xMDAsMzQgKzEwMCwzNCBAQAogCiAKICAgICAgICAgICAgICAgICBSZXN1bHRTZXQgcnMxID0gc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgZW1wX2lkLCBlbXBfbmFtZSBmcm9tIEhSIik7Ci0JCVN0cmluZyBzYWxRdWVyeSA9ICJTRUxFQ1QgZW1wX3NhbCBmcm9tIFNBTEFSWSBXSEVSRSBlbXBfaWQgPSA/ICI7Ci0JCXN0bXQyID0gc2FsRHMuZ2V0Q29ubmVjdGlvbigpLnByZXBhcmVTdGF0ZW1lbnQoc2FsUXVlcnkpOwotICAgICAgICAgICAgICAgIAotCQlEYXRhYmFzZU1ldGFEYXRhIGRiTWV0YWRhdGEyID0gc3RtdDIuZ2V0Q29ubmVjdGlvbigpLmdldE1ldGFEYXRhKCk7CisgICAgICAgIFN0cmluZyBzYWxRdWVyeSA9ICJTRUxFQ1QgZW1wX3NhbCBmcm9tIFNBTEFSWSBXSEVSRSBlbXBfaWQgPSA/ICI7CisgICAgICAgIHN0bXQyID0gc2FsRHMuZ2V0Q29ubmVjdGlvbigpLnByZXBhcmVTdGF0ZW1lbnQoc2FsUXVlcnkpOworCisgICAgICAgIERhdGFiYXNlTWV0YURhdGEgZGJNZXRhZGF0YTIgPSBzdG10Mi5nZXRDb25uZWN0aW9uKCkuZ2V0TWV0YURhdGEoKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgZGJVcmwyID0gZGJNZXRhZGF0YTIuZ2V0VVJMKCk7CiAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIkRCIFVSTCA6ICIgKyBkYlVybDIgKyAiXG4iKTsKICAgICAgICAgICAgICAgICBpZiAoZGJVcmwyLmluZGV4T2YoInNhbGFyeV9kYXRhYmFzZSIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkN1c3RvbSBEYXRhYmFzZSBbc2FsYXJ5X2RhdGFiYXNlXSBpcyBub3QgY3JlYXRlZCB3aGlsZSBwcm92aXNpb25pbmcuIik7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotCQl3cml0ZXIucHJpbnRsbigiPHRhYmxlIGJvcmRlcj1cIjFcIiB3aWR0aD1cIjEwMCVcIj4iKTsKKworICAgICAgICB3cml0ZXIucHJpbnRsbigiPHRhYmxlIGJvcmRlcj1cIjFcIiB3aWR0aD1cIjEwMCVcIj4iKTsKICAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiPHRyPiIpOwogICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCIgIDx0aCBhbGlnbj1cImxlZnRcIiBjb2xzcGFuPVwiMlwiPiIgKyAiRW1wbG95ZWUgSW5mb3JtYXRpb24gcmV0cmlldmVkIiArICI8L3RoPiIpOwogICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8L3RyPiIpOwogICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8dHI+Iik7CiAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIjx0ZD4iICsgIkVtcGxveWVlIElEIiArICI8L3RkPiIpOwogICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8dGQ+IiArICJFbXBsb3llZSBOYW1lIiArICI8L3RkPiIpOwotCQl3cml0ZXIucHJpbnRsbigiPHRkPiIgKyAiRW1wbG95ZWUgU2FsYXJ5IiArICI8L3RkPiIpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiPHRkPiIgKyAiRW1wbG95ZWUgU2FsYXJ5IiArICI8L3RkPiIpOwogICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8L3RyPiIpOwogICAgICAgICAgICAgICAgIHdoaWxlIChyczEubmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8dHI+Iik7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCIgIDx0ZD4iICsgcnMxLmdldE9iamVjdCgxKSArICI8L3RkPiIpOwogICAgICAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiICA8dGQ+IiArIHJzMS5nZXRPYmplY3QoMikgKyAiPC90ZD4iKTsKLQkJICAgIHN0bXQyLnNldEludCgxLCAoSW50ZWdlcikgcnMxLmdldE9iamVjdCgxKSk7Ci0JCSAgICBSZXN1bHRTZXQgcnMyID0gc3RtdDIuZXhlY3V0ZVF1ZXJ5KCk7Ci0JCSAgICB3aGlsZShyczIubmV4dCgpKSB7Ci0JCQl3cml0ZXIucHJpbnRsbigiICA8dGQ+IiArIHJzMi5nZXRPYmplY3QoMSkgKyAiPC90ZD4iKTsKLQkJICAgIH0JCisgICAgICAgICAgICBzdG10Mi5zZXRJbnQoMSwgKEludGVnZXIpIHJzMS5nZXRPYmplY3QoMSkpOworICAgICAgICAgICAgUmVzdWx0U2V0IHJzMiA9IHN0bXQyLmV4ZWN1dGVRdWVyeSgpOworICAgICAgICAgICAgd2hpbGUocnMyLm5leHQoKSkgeworICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIiAgPHRkPiIgKyByczIuZ2V0T2JqZWN0KDEpICsgIjwvdGQ+Iik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8L3RyPiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiPC90YWJsZT4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLXNoYXJlZC1zZXJ2aWNlcy9iYXNpYy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLXNoYXJlZC1zZXJ2aWNlcy9iYXNpYy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbAppbmRleCBmY2FhNDI3Li45YTM2MDgyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1kYi1zaGFyZWQtc2VydmljZXMvYmFzaWMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItc2hhcmVkLXNlcnZpY2VzL2Jhc2ljL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAKIC0tPgogCi08IURPQ1RZUEUgc3VuLXdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDkuMCBTZXJ2bGV0IDIuNS8vRU4iIAorPCFET0NUWVBFIHN1bi13ZWItYXBwIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEFwcGxpY2F0aW9uIFNlcnZlciA5LjAgU2VydmxldCAyLjUvL0VOIgogICAiaHR0cDovL3d3dy5zdW4uY29tL3NvZnR3YXJlL2FwcHNlcnZlci9kdGRzL3N1bi13ZWItYXBwXzJfNS0wLmR0ZCI+CiA8c3VuLXdlYi1hcHAgZXJyb3ItdXJsPSIiPgogPC9zdW4td2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLWRiLXNoYXJlZC1zZXJ2aWNlcy9iYXNpYy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItc2hhcmVkLXNlcnZpY2VzL2Jhc2ljL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKaW5kZXggNjhlYmQxNC4uMjYwYzJjMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItc2hhcmVkLXNlcnZpY2VzL2Jhc2ljL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtZGItc2hhcmVkLXNlcnZpY2VzL2Jhc2ljL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTE3LDkgKzE3LDkgQEAKIAogLS0+CiAKLTx3ZWItYXBwIHZlcnNpb249IjIuNSIgCi0gIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIAotICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKzx3ZWItYXBwIHZlcnNpb249IjIuNSIKKyAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+RW1wbG95ZWVTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1zcGUtdGVzdC9teWRiLXBsdWdpbi9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtc3BlLXRlc3QvbXlkYi1wbHVnaW4vcG9tLnhtbAppbmRleCBlMjVhMDdjLi44N2Y2MDkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1zcGUtdGVzdC9teWRiLXBsdWdpbi9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLXNwZS10ZXN0L215ZGItcGx1Z2luL3BvbS54bWwKQEAgLTI3LDcgKzI3LDcgQEAKICAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5wYWFzLm15ZGJwbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgCisKICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8bmFtZT5NeURCIFBsdWdpbjwvbmFtZT4KICAgICA8YnVpbGQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1zcGUtdGVzdC9zcGV0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL3NwZXRlc3QvQW5pbWFsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9tdWx0aXBsZS1zcGUtdGVzdC9zcGV0ZXN0L3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL3NwZXRlc3QvQW5pbWFsLmphdmEKaW5kZXggODY2ZGI2NS4uZWE1ODcwNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbXVsdGlwbGUtc3BlLXRlc3Qvc3BldGVzdC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9zcGV0ZXN0L0FuaW1hbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL211bHRpcGxlLXNwZS10ZXN0L3NwZXRlc3Qvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvc3BldGVzdC9BbmltYWwuamF2YQpAQCAtMjYsMTkgKzI2LDE5IEBACiAgKgogICogQGF1dGhvciBpc2hhbi52aXNobm9pQGphdmEubmV0CiAgKi8KLUBFbnRpdHkgCitARW50aXR5CiBAVGFibGUobmFtZSA9ICJaT09fRElSRUNUT1JZIikKIHB1YmxpYyBjbGFzcyBBbmltYWwgaW1wbGVtZW50cyBTZXJpYWxpemFibGUgewotICAgIAorCiAgICAgQElkCiAgICAgcHJpdmF0ZSBpbnQgSUQ7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgc3BlY2llczsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIGNhZ2VOdW1iZXI7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyB5ZWFyT2ZCaXJ0aDsKIAogICAgIHB1YmxpYyBpbnQgZ2V0SUQoKSB7CkBAIC00Nyw3ICs0Nyw3IEBACiAKICAgICBwdWJsaWMgdm9pZCBzZXRJRChpbnQgSUQpIHsKICAgICAgICAgdGhpcy5JRCA9IElEOwotICAgIH0gICAgCisgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBnZXRDYWdlTnVtYmVyKCkgewogICAgICAgICByZXR1cm4gY2FnZU51bWJlcjsKQEAgLTgwLDcgKzgwLDcgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRZZWFyT2ZCaXJ0aChTdHJpbmcgeWVhck9mQmlydGgpIHsKICAgICAgICAgdGhpcy55ZWFyT2ZCaXJ0aCA9IHllYXJPZkJpcnRoOwogICAgIH0KLSAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgICByZXR1cm4gImVudGl0eS5OZXdFbnRpdHlbaWQ9IiArIElEICsgIl0iOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbmF0aXZlX2xiX3NldHVwLnNoIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbmF0aXZlX2xiX3NldHVwLnNoCmluZGV4IDBkZGNlMmYuLjNlYWMwODUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL25hdGl2ZV9sYl9zZXR1cC5zaAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9uYXRpdmVfbGJfc2V0dXAuc2gKQEAgLTIxLDQgKzIxLDQgQEAKICRHRl9IT01FL2Jpbi9hc2FkbWluIGNyZWF0ZS10ZW1wbGF0ZSAtLWluZGV4ZXMgU2VydmljZVR5cGU9TEIsVmlydHVhbGl6YXRpb25UeXBlPU5hdGl2ZSBMQk5hdGl2ZQogJEdGX0hPTUUvYmluL2FzYWRtaW4gY3JlYXRlLXRlbXBsYXRlIC0taW5kZXhlcyBTZXJ2aWNlVHlwZT1NUSxWaXJ0dWFsaXphdGlvblR5cGU9TmF0aXZlIE1RTmF0aXZlCiAkR0ZfSE9NRS9iaW4vYXNhZG1pbiBzdG9wLWRvbWFpbgotIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9uYXRpdmVfc2V0dXAuc2ggYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9uYXRpdmVfc2V0dXAuc2gKaW5kZXggZmZkNWMyNi4uZGJjNWNmMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvbmF0aXZlX3NldHVwLnNoCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL25hdGl2ZV9zZXR1cC5zaApAQCAtMTgsNCArMTgsNCBAQAogZWNobyAiWW91ciBHbGFzc0Zpc2ggaXMgYXQgJEdGX0hPTUUiCiAkR0ZfSE9NRS9iaW4vYXNhZG1pbiBzdGFydC1kb21haW4gLS1kZWJ1ZwogJEdGX0hPTUUvYmluL2FzYWRtaW4gY3JlYXRlLWltcy1jb25maWctbmF0aXZlCi0kR0ZfSE9NRS9iaW4vYXNhZG1pbiBzdG9wLWRvbWFpbiAKKyRHRl9IT01FL2Jpbi9hc2FkbWluIHN0b3AtZG9tYWluCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvcG9tLnhtbAppbmRleCAyMTMyNmQ1Li5jZmUwMTdmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL3BvbS54bWwKQEAgLTI1LDE3NSArMjUsMTc1IEBACiAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPG5hbWU+UGFhUyBzYW1wbGVzPC9uYW1lPgogICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+Ci0gICAgCisKIAogICAgIDxwcm9maWxlcz4KICAgICAgICAgPHByb2ZpbGU+CiAgICAgICAgICAgICA8aWQ+bmF0aXZlPC9pZD4KLSAgICAgICAgCTxhY3RpdmF0aW9uPgotCQkgICAgICAgIDxhY3RpdmVCeURlZmF1bHQ+dHJ1ZTwvYWN0aXZlQnlEZWZhdWx0PgorICAgICAgICAgICAgPGFjdGl2YXRpb24+CisgICAgICAgICAgICAgICAgPGFjdGl2ZUJ5RGVmYXVsdD50cnVlPC9hY3RpdmVCeURlZmF1bHQ+CiAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uPgotCQk8bW9kdWxlcz4KLSAgICAgICAgCQk8bW9kdWxlPmJhc2ljPC9tb2R1bGU+Ci0gICAgICAgIAkJPG1vZHVsZT5zZXJ2aWNlX21ldGFkYXRhPC9tb2R1bGU+Ci0gICAgICAgIAkJPG1vZHVsZT5iYXNpYy1kYjwvbW9kdWxlPgotICAgICAgICAJCTxtb2R1bGU+Ym9va3N0b3JlPC9tb2R1bGU+Ci0gICAgICAgIAkJPG1vZHVsZT5iYXNpYy1kYi1pbml0c3FsPC9tb2R1bGU+Ci0gICAgICAgIAkJPG1vZHVsZT5zY2FsZV9zZXJ2aWNlPC9tb2R1bGU+Ci0gICAgICAgIAkJPG1vZHVsZT5kZXBsb3ltZW50LXJvbGxiYWNrPC9tb2R1bGU+Ci0gICAgICAgIAkJPG1vZHVsZT5lbmFibGUtZGlzYWJsZS10ZXN0PC9tb2R1bGU+Ci0gICAgICAgIAkJPG1vZHVsZT5iYXNpYy1qcGE8L21vZHVsZT4KLSAgICAgICAgCQk8bW9kdWxlPmJhc2ljLXNoYXJlZC1zZXJ2aWNlLXRlc3Q8L21vZHVsZT4KLSAgICAgICAgCQk8bW9kdWxlPmV4dGVybmFsLWFuZC1zaGFyZWQtc2VydmljZTwvbW9kdWxlPgotICAgICAgICAJCTxtb2R1bGU+ZXh0LXNoYXJlZC1zZXJ2aWNlLWVuYWJsZS1kaXNhYmxlLXRlc3Q8L21vZHVsZT4KLSAgICAgICAgCQk8bW9kdWxlPm11bHRpcGxlLXNwZS10ZXN0PC9tb2R1bGU+Ci0gICAgICAgIAkJPG1vZHVsZT5iYXNpYy1kYi13aXRoLXJlc291cmNlcy14bWw8L21vZHVsZT4KLSAgICAgICAgCQk8bW9kdWxlPmJhc2ljLWRiLXRlYXJkb3duLXNxbDwvbW9kdWxlPgotICAgICAgICAJCTxtb2R1bGU+YmFzaWMtc2VydmljZS1kaXNjb3Zlcnk8L21vZHVsZT4KLSAgICAgICAgCQk8bW9kdWxlPmphdmFlZV9zaGFyZWRfc2VydmljZTwvbW9kdWxlPgotICAgICAgICAJCTxtb2R1bGU+bGF6eS1zaGFyZWQtc2VydmljZS10ZXN0PC9tb2R1bGU+Ci0JCQk8bW9kdWxlPmV4dGVybmFsLWRiLXNlcnZpY2U8L21vZHVsZT4KLQkJCTxtb2R1bGU+YXBwc2NvcGVkLWRiLXdpdGgtcmVzb3VyY2VzLXhtbDwvbW9kdWxlPgotCQkJPG1vZHVsZT5iYXNpYy1ib29rc3RvcmUtZG5zPC9tb2R1bGU+Ci0JPCEtLSAgICAgICAgPG1vZHVsZT5tcS1zaGFyZWQtc2VydmljZS10ZXN0PC9tb2R1bGU+LS0+CisgICAgICAgIDxtb2R1bGVzPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+YmFzaWM8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPnNlcnZpY2VfbWV0YWRhdGE8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmJhc2ljLWRiPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5ib29rc3RvcmU8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmJhc2ljLWRiLWluaXRzcWw8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPnNjYWxlX3NlcnZpY2U8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmRlcGxveW1lbnQtcm9sbGJhY2s8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmVuYWJsZS1kaXNhYmxlLXRlc3Q8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmJhc2ljLWpwYTwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+YmFzaWMtc2hhcmVkLXNlcnZpY2UtdGVzdDwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+ZXh0ZXJuYWwtYW5kLXNoYXJlZC1zZXJ2aWNlPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5leHQtc2hhcmVkLXNlcnZpY2UtZW5hYmxlLWRpc2FibGUtdGVzdDwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+bXVsdGlwbGUtc3BlLXRlc3Q8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmJhc2ljLWRiLXdpdGgtcmVzb3VyY2VzLXhtbDwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+YmFzaWMtZGItdGVhcmRvd24tc3FsPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5iYXNpYy1zZXJ2aWNlLWRpc2NvdmVyeTwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+amF2YWVlX3NoYXJlZF9zZXJ2aWNlPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5sYXp5LXNoYXJlZC1zZXJ2aWNlLXRlc3Q8L21vZHVsZT4KKyAgICAgICAgICAgIDxtb2R1bGU+ZXh0ZXJuYWwtZGItc2VydmljZTwvbW9kdWxlPgorICAgICAgICAgICAgPG1vZHVsZT5hcHBzY29wZWQtZGItd2l0aC1yZXNvdXJjZXMteG1sPC9tb2R1bGU+CisgICAgICAgICAgICA8bW9kdWxlPmJhc2ljLWJvb2tzdG9yZS1kbnM8L21vZHVsZT4KKyAgICA8IS0tICAgICAgICA8bW9kdWxlPm1xLXNoYXJlZC1zZXJ2aWNlLXRlc3Q8L21vZHVsZT4tLT4KIAotICAgIAkJPC9tb2R1bGVzPgotICAgIAkJCi0JPC9wcm9maWxlPgotCTxwcm9maWxlPgotCQk8aWQ+a3ZtLWRlcmJ5PC9pZD4KLSAgICAgICAgCQotCQk8bW9kdWxlcz4KLSAgICAgICAgCQk8bW9kdWxlPmJhc2ljPC9tb2R1bGU+Ci0gICAgICAgIAkJPG1vZHVsZT5zZXJ2aWNlX21ldGFkYXRhL2N1c3RvbV9kYl9uYW1lPC9tb2R1bGU+Ci0gICAgICAgIAkJPG1vZHVsZT5iYXNpYy1kYjwvbW9kdWxlPgotICAgICAgICAJCTxtb2R1bGU+Ym9va3N0b3JlPC9tb2R1bGU+Ci0gICAgICAgIAkJPG1vZHVsZT5iYXNpYy1kYi1pbml0c3FsPC9tb2R1bGU+Ci0gICAgICAgIAkJPG1vZHVsZT5iYXNpYy1qcGE8L21vZHVsZT4KLSAgICAgICAgCQk8bW9kdWxlPmJhc2ljLWRiLXdpdGgtcmVzb3VyY2VzLXhtbDwvbW9kdWxlPgotICAgICAgICAJCTxtb2R1bGU+YmFzaWMtZGItdGVhcmRvd24tc3FsPC9tb2R1bGU+Ci0JCQk8bW9kdWxlPm11bHRpcGxlLWRiLWFwcC1zY29wZWQtc2VydmljZXMvYmFzaWM8L21vZHVsZT4KLQkJCTxtb2R1bGU+ZXh0ZXJuYWwtZGItc2VydmljZTwvbW9kdWxlPgotCQkJPG1vZHVsZT5hcHBzY29wZWQtZGItd2l0aC1yZXNvdXJjZXMteG1sPC9tb2R1bGU+Ci0JCQk8bW9kdWxlPmphdmFlZV9zaGFyZWRfc2VydmljZTwvbW9kdWxlPgotCQkJPG1vZHVsZT5zY2FsZV9zZXJ2aWNlPC9tb2R1bGU+Ci0gICAgCQk8L21vZHVsZXM+Ci0JCQotCTwvcHJvZmlsZT4KLQk8cHJvZmlsZT4KLQkJPGlkPmt2bS1teXNxbDwvaWQ+Ci0gICAgICAgIAk8bW9kdWxlcz4KLSAgICAgICAgCQk8bW9kdWxlPmJhc2ljPC9tb2R1bGU+Ci0gICAgICAgIAkJPG1vZHVsZT5zZXJ2aWNlX21ldGFkYXRhL2N1c3RvbV9kYl9uYW1lPC9tb2R1bGU+Ci0gICAgICAgIAkJPG1vZHVsZT5ib29rc3RvcmU8L21vZHVsZT4KLSAgICAgICAgCQk8bW9kdWxlPmJhc2ljLWRiLWluaXRzcWw8L21vZHVsZT4KLSAgICAgICAgCQk8bW9kdWxlPmJhc2ljLWpwYTwvbW9kdWxlPgotICAgICAgICAJCTxtb2R1bGU+YmFzaWMtZGItd2l0aC1yZXNvdXJjZXMteG1sPC9tb2R1bGU+Ci0gICAgICAgIAkJPG1vZHVsZT5iYXNpYy1kYi10ZWFyZG93bi1zcWw8L21vZHVsZT4KLQkJCTxtb2R1bGU+bXVsdGlwbGUtZGItYXBwLXNjb3BlZC1zZXJ2aWNlcy9iYXNpYzwvbW9kdWxlPgotCQkJPG1vZHVsZT5leHRlcm5hbC1kYi1zZXJ2aWNlPC9tb2R1bGU+Ci0JCQk8bW9kdWxlPmFwcHNjb3BlZC1kYi13aXRoLXJlc291cmNlcy14bWw8L21vZHVsZT4KLQkJCTxtb2R1bGU+amF2YWVlX3NoYXJlZF9zZXJ2aWNlPC9tb2R1bGU+Ci0JCQk8bW9kdWxlPnNjYWxlX3NlcnZpY2U8L21vZHVsZT4KLSAgICAJCTwvbW9kdWxlcz4KLQkJCi0JPC9wcm9maWxlPgotCTxwcm9maWxlPgotCQk8aWQ+b3ZtLWRlcmJ5PC9pZD4KKyAgICAgICAgICAgIDwvbW9kdWxlcz4KIAotCQk8bW9kdWxlcz4KLSAgICAgICAgCQk8bW9kdWxlPmJhc2ljPC9tb2R1bGU+Ci0gICAgICAgIAkJPG1vZHVsZT5zZXJ2aWNlX21ldGFkYXRhL2N1c3RvbV9kYl9uYW1lPC9tb2R1bGU+Ci0JCQk8bW9kdWxlPmJhc2ljLWRiPC9tb2R1bGU+Ci0gICAgICAgIAkJPG1vZHVsZT5ib29rc3RvcmU8L21vZHVsZT4KLSAgICAgICAgCQk8bW9kdWxlPmJhc2ljLWRiLWluaXRzcWw8L21vZHVsZT4KLSAgICAgICAgCQk8bW9kdWxlPmJhc2ljLWpwYTwvbW9kdWxlPgotCQkJPG1vZHVsZT5iYXNpYy1kYi13aXRoLXJlc291cmNlcy14bWw8L21vZHVsZT4KLSAgICAgICAgCQk8bW9kdWxlPmJhc2ljLWRiLXRlYXJkb3duLXNxbDwvbW9kdWxlPgotCQkJPG1vZHVsZT5hcHBzY29wZWQtZGItd2l0aC1yZXNvdXJjZXMteG1sPC9tb2R1bGU+Ci0JCQk8bW9kdWxlPmV4dGVybmFsLWRiLXNlcnZpY2U8L21vZHVsZT4KLQkJCTxtb2R1bGU+amF2YWVlX3NoYXJlZF9zZXJ2aWNlPC9tb2R1bGU+Ci0JCQk8bW9kdWxlPnNjYWxlX3NlcnZpY2U8L21vZHVsZT4KLSAgICAgICAgCTwvbW9kdWxlcz4KLQkJCi0JPC9wcm9maWxlPgotCTxwcm9maWxlPgotCQk8aWQ+b3ZtLW9kYjwvaWQ+CisgICAgPC9wcm9maWxlPgorICAgIDxwcm9maWxlPgorICAgICAgICA8aWQ+a3ZtLWRlcmJ5PC9pZD4KIAotCQk8bW9kdWxlcz4KLSAgICAgICAgCQk8bW9kdWxlPmJhc2ljPC9tb2R1bGU+Ci0gICAgICAgIAkJPG1vZHVsZT5zZXJ2aWNlX21ldGFkYXRhL2N1c3RvbV9kYl9uYW1lPC9tb2R1bGU+Ci0JCQk8bW9kdWxlPmJvb2tzdG9yZTwvbW9kdWxlPgotICAgICAgICAJCTxtb2R1bGU+YmFzaWMtZGItaW5pdHNxbDwvbW9kdWxlPgotICAgICAgICAJCTxtb2R1bGU+YmFzaWMtanBhPC9tb2R1bGU+Ci0JCQk8bW9kdWxlPmJhc2ljLWRiLXdpdGgtcmVzb3VyY2VzLXhtbDwvbW9kdWxlPgotICAgICAgICAJCTxtb2R1bGU+YmFzaWMtZGItdGVhcmRvd24tc3FsPC9tb2R1bGU+Ci0JCQk8bW9kdWxlPmFwcHNjb3BlZC1kYi13aXRoLXJlc291cmNlcy14bWw8L21vZHVsZT4KLQkJCTxtb2R1bGU+ZXh0ZXJuYWwtZGItc2VydmljZTwvbW9kdWxlPgotCQkJPG1vZHVsZT5qYXZhZWVfc2hhcmVkX3NlcnZpY2U8L21vZHVsZT4KLQkJCTxtb2R1bGU+c2NhbGVfc2VydmljZTwvbW9kdWxlPgotICAgICAgICAJPC9tb2R1bGVzPgotCQkKLQk8L3Byb2ZpbGU+CisgICAgICAgIDxtb2R1bGVzPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+YmFzaWM8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPnNlcnZpY2VfbWV0YWRhdGEvY3VzdG9tX2RiX25hbWU8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmJhc2ljLWRiPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5ib29rc3RvcmU8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmJhc2ljLWRiLWluaXRzcWw8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmJhc2ljLWpwYTwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+YmFzaWMtZGItd2l0aC1yZXNvdXJjZXMteG1sPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5iYXNpYy1kYi10ZWFyZG93bi1zcWw8L21vZHVsZT4KKyAgICAgICAgICAgIDxtb2R1bGU+bXVsdGlwbGUtZGItYXBwLXNjb3BlZC1zZXJ2aWNlcy9iYXNpYzwvbW9kdWxlPgorICAgICAgICAgICAgPG1vZHVsZT5leHRlcm5hbC1kYi1zZXJ2aWNlPC9tb2R1bGU+CisgICAgICAgICAgICA8bW9kdWxlPmFwcHNjb3BlZC1kYi13aXRoLXJlc291cmNlcy14bWw8L21vZHVsZT4KKyAgICAgICAgICAgIDxtb2R1bGU+amF2YWVlX3NoYXJlZF9zZXJ2aWNlPC9tb2R1bGU+CisgICAgICAgICAgICA8bW9kdWxlPnNjYWxlX3NlcnZpY2U8L21vZHVsZT4KKyAgICAgICAgICAgIDwvbW9kdWxlcz4KKworICAgIDwvcHJvZmlsZT4KKyAgICA8cHJvZmlsZT4KKyAgICAgICAgPGlkPmt2bS1teXNxbDwvaWQ+CisgICAgICAgICAgICA8bW9kdWxlcz4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmJhc2ljPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5zZXJ2aWNlX21ldGFkYXRhL2N1c3RvbV9kYl9uYW1lPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5ib29rc3RvcmU8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmJhc2ljLWRiLWluaXRzcWw8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmJhc2ljLWpwYTwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+YmFzaWMtZGItd2l0aC1yZXNvdXJjZXMteG1sPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5iYXNpYy1kYi10ZWFyZG93bi1zcWw8L21vZHVsZT4KKyAgICAgICAgICAgIDxtb2R1bGU+bXVsdGlwbGUtZGItYXBwLXNjb3BlZC1zZXJ2aWNlcy9iYXNpYzwvbW9kdWxlPgorICAgICAgICAgICAgPG1vZHVsZT5leHRlcm5hbC1kYi1zZXJ2aWNlPC9tb2R1bGU+CisgICAgICAgICAgICA8bW9kdWxlPmFwcHNjb3BlZC1kYi13aXRoLXJlc291cmNlcy14bWw8L21vZHVsZT4KKyAgICAgICAgICAgIDxtb2R1bGU+amF2YWVlX3NoYXJlZF9zZXJ2aWNlPC9tb2R1bGU+CisgICAgICAgICAgICA8bW9kdWxlPnNjYWxlX3NlcnZpY2U8L21vZHVsZT4KKyAgICAgICAgICAgIDwvbW9kdWxlcz4KKworICAgIDwvcHJvZmlsZT4KKyAgICA8cHJvZmlsZT4KKyAgICAgICAgPGlkPm92bS1kZXJieTwvaWQ+CisKKyAgICAgICAgPG1vZHVsZXM+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5iYXNpYzwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+c2VydmljZV9tZXRhZGF0YS9jdXN0b21fZGJfbmFtZTwvbW9kdWxlPgorICAgICAgICAgICAgPG1vZHVsZT5iYXNpYy1kYjwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+Ym9va3N0b3JlPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5iYXNpYy1kYi1pbml0c3FsPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5iYXNpYy1qcGE8L21vZHVsZT4KKyAgICAgICAgICAgIDxtb2R1bGU+YmFzaWMtZGItd2l0aC1yZXNvdXJjZXMteG1sPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5iYXNpYy1kYi10ZWFyZG93bi1zcWw8L21vZHVsZT4KKyAgICAgICAgICAgIDxtb2R1bGU+YXBwc2NvcGVkLWRiLXdpdGgtcmVzb3VyY2VzLXhtbDwvbW9kdWxlPgorICAgICAgICAgICAgPG1vZHVsZT5leHRlcm5hbC1kYi1zZXJ2aWNlPC9tb2R1bGU+CisgICAgICAgICAgICA8bW9kdWxlPmphdmFlZV9zaGFyZWRfc2VydmljZTwvbW9kdWxlPgorICAgICAgICAgICAgPG1vZHVsZT5zY2FsZV9zZXJ2aWNlPC9tb2R1bGU+CisgICAgICAgICAgICA8L21vZHVsZXM+CisKKyAgICA8L3Byb2ZpbGU+CisgICAgPHByb2ZpbGU+CisgICAgICAgIDxpZD5vdm0tb2RiPC9pZD4KKworICAgICAgICA8bW9kdWxlcz4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmJhc2ljPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5zZXJ2aWNlX21ldGFkYXRhL2N1c3RvbV9kYl9uYW1lPC9tb2R1bGU+CisgICAgICAgICAgICA8bW9kdWxlPmJvb2tzdG9yZTwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+YmFzaWMtZGItaW5pdHNxbDwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+YmFzaWMtanBhPC9tb2R1bGU+CisgICAgICAgICAgICA8bW9kdWxlPmJhc2ljLWRiLXdpdGgtcmVzb3VyY2VzLXhtbDwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+YmFzaWMtZGItdGVhcmRvd24tc3FsPC9tb2R1bGU+CisgICAgICAgICAgICA8bW9kdWxlPmFwcHNjb3BlZC1kYi13aXRoLXJlc291cmNlcy14bWw8L21vZHVsZT4KKyAgICAgICAgICAgIDxtb2R1bGU+ZXh0ZXJuYWwtZGItc2VydmljZTwvbW9kdWxlPgorICAgICAgICAgICAgPG1vZHVsZT5qYXZhZWVfc2hhcmVkX3NlcnZpY2U8L21vZHVsZT4KKyAgICAgICAgICAgIDxtb2R1bGU+c2NhbGVfc2VydmljZTwvbW9kdWxlPgorICAgICAgICAgICAgPC9tb2R1bGVzPgorCisgICAgPC9wcm9maWxlPgogICAgIDwvcHJvZmlsZXM+Ci0JCTxyZXBvcnRpbmc+Ci0gICAgICAgCQkgICAgICA8cGx1Z2lucz4KKyAgICAgICAgPHJlcG9ydGluZz4KKyAgICAgICAgICAgICAgICAgICAgIDxwbHVnaW5zPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgCQkJIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgIAkJCSA8YXJ0aWZhY3RJZD5tYXZlbi1zdXJlZmlyZS1yZXBvcnQtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIAkJIDx2ZXJzaW9uPjIuOTwvdmVyc2lvbj4KLSAgICAgICAgICAgICAgICAJCSA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAJCQkgPG91dHB1dERpcmVjdG9yeT4ke2Vudi5QQUFTX1RFU1RTX0hPTUV9L3JlcG9ydHM8L291dHB1dERpcmVjdG9yeT4KLSAgICAgICAgICAgICAgICAgICAJCQkgPG91dHB1dE5hbWU+UGFhc1Rlc3RSZXBvcnQ8L291dHB1dE5hbWU+Ci0gICAgICAgICAgICAgICAgICAgCQkgPHJlcG9ydHNEaXJlY3Rvcmllcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIAkJPHJlcG9ydHNEaXJlY3Rvcnk+JHtlbnYuUEFBU19URVNUU19IT01FfS9iYXNpYy90YXJnZXQvc3VyZWZpcmUtcmVwb3J0czwvcmVwb3J0c0RpcmVjdG9yeT4KLSAgICAgICAgICAgICAgICAgICAgICAgIAkJPHJlcG9ydHNEaXJlY3Rvcnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCSAgJHtlbnYuUEFBU19URVNUU19IT01FfS9zZXJ2aWNlX21ldGFkYXRhL3Byb3Zpc2lvbl91c2luZ19zcGVjaWZpZWRfdGVtcGxhdGUvdGFyZ2V0L3N1cmVmaXJlLXJlcG9ydHMKLSAgICAgICAgICAgICAgICAgICAgICAgCQkgICAgICAgIDwvcmVwb3J0c0RpcmVjdG9yeT4KLSAgICAgICAgICAgICAgICAgICAgICAgIAkJPHJlcG9ydHNEaXJlY3Rvcnk+JHtlbnYuUEFBU19URVNUU19IT01FfS9zZXJ2aWNlX21ldGFkYXRhL2N1c3RvbV9kYl9uYW1lL3RhcmdldC9zdXJlZmlyZS1yZXBvcnRzCi0gICAgICAgICAgICAgICAgICAgICAgICAJCTwvcmVwb3J0c0RpcmVjdG9yeT4KLSAgICAgICAgICAgICAgICAgICAgICAgIAkJPHJlcG9ydHNEaXJlY3Rvcnk+JHtlbnYuUEFBU19URVNUU19IT01FfS9iYXNpYy1kYi90YXJnZXQvc3VyZWZpcmUtcmVwb3J0czwvcmVwb3J0c0RpcmVjdG9yeT4KLSAgICAgICAgICAgICAgICAgICAgICAgIAkJPHJlcG9ydHNEaXJlY3Rvcnk+JHtlbnYuUEFBU19URVNUU19IT01FfS9ib29rc3RvcmUvdGFyZ2V0L3N1cmVmaXJlLXJlcG9ydHM8L3JlcG9ydHNEaXJlY3Rvcnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAJCTxyZXBvcnRzRGlyZWN0b3J5PiR7ZW52LlBBQVNfVEVTVFNfSE9NRX0vYmFzaWMtZGItaW5pdHNxbC90YXJnZXQvc3VyZWZpcmUtcmVwb3J0cwotICAgICAgICAgICAgICAgICAgICAgICAgCQk8L3JlcG9ydHNEaXJlY3Rvcnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAJCTxyZXBvcnRzRGlyZWN0b3J5PiR7ZW52LlBBQVNfVEVTVFNfSE9NRX0vc2NhbGVfc2VydmljZS90YXJnZXQvc3VyZWZpcmUtcmVwb3J0cwotICAgICAgICAgICAgICAgICAgICAgICAgCQk8L3JlcG9ydHNEaXJlY3Rvcnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAJCTxyZXBvcnRzRGlyZWN0b3J5PiR7ZW52LlBBQVNfVEVTVFNfSE9NRX0vZGVwbG95bWVudC1yb2xsYmFjay90YXJnZXQvc3VyZWZpcmUtcmVwb3J0cwotICAgICAgICAgICAgICAgICAgICAgICAJCSAJPC9yZXBvcnRzRGlyZWN0b3J5PgotICAgICAgICAgICAgICAgICAgICAgICAgCQk8cmVwb3J0c0RpcmVjdG9yeT4ke2Vudi5QQUFTX1RFU1RTX0hPTUV9L2VuYWJsZS1kaXNhYmxlLXRlc3QvdGFyZ2V0L3N1cmVmaXJlLXJlcG9ydHMKLSAgICAgICAgICAgICAgICAgICAgICAgIAkJPC9yZXBvcnRzRGlyZWN0b3J5PgotICAgICAgICAgICAgICAgICAgICAgICAgCQk8cmVwb3J0c0RpcmVjdG9yeT4ke2Vudi5QQUFTX1RFU1RTX0hPTUV9L2Jhc2ljLWpwYS90YXJnZXQvc3VyZWZpcmUtcmVwb3J0czwvcmVwb3J0c0RpcmVjdG9yeT4KLSAgICAgICAgICAgICAgICAgICAgICAgCQkJPHJlcG9ydHNEaXJlY3Rvcnk+JHtlbnYuUEFBU19URVNUU19IT01FfS9iYXNpYy1zaGFyZWQtc2VydmljZS10ZXN0L3RhcmdldC9zdXJlZmlyZS1yZXBvcnRzCi0gICAgICAgICAgICAgICAgICAgICAgICAJCTwvcmVwb3J0c0RpcmVjdG9yeT4KLSAgICAgICAgICAgICAgICAgICAgICAgIAkJPHJlcG9ydHNEaXJlY3Rvcnk+JHtlbnYuUEFBU19URVNUU19IT01FfS9leHRlcm5hbC1hbmQtc2hhcmVkLXNlcnZpY2UvdGFyZ2V0L3N1cmVmaXJlLXJlcG9ydHMKLSAgICAgICAgICAgICAgICAgICAgICAgCQkJPC9yZXBvcnRzRGlyZWN0b3J5PgotICAgICAgICAgICAgICAgICAgICAgICAgCQk8cmVwb3J0c0RpcmVjdG9yeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJIAkJICAke2Vudi5QQUFTX1RFU1RTX0hPTUV9L2V4dC1zaGFyZWQtc2VydmljZS1lbmFibGUtZGlzYWJsZS10ZXN0L3RhcmdldC9zdXJlZmlyZS1yZXBvcnRzCi0gICAgICAgICAgICAgICAgICAgICAgIAkJCTwvcmVwb3J0c0RpcmVjdG9yeT4KLSAgICAgICAgICAgICAgICAgICAgICAgIAkJPHJlcG9ydHNEaXJlY3Rvcnk+JHtlbnYuUEFBU19URVNUU19IT01FfS9tdWx0aXBsZS1zcGUtdGVzdC90YXJnZXQvc3VyZWZpcmUtcmVwb3J0cwotICAgICAgICAgICAgICAgICAgICAgICAJCQk8L3JlcG9ydHNEaXJlY3Rvcnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAJCTxyZXBvcnRzRGlyZWN0b3J5PiR7ZW52LlBBQVNfVEVTVFNfSE9NRX0vYmFzaWMtZGItd2l0aC1yZXNvdXJjZXMteG1sL3RhcmdldC9zdXJlZmlyZS1yZXBvcnRzCi0gICAgICAgICAgICAgICAgICAgICAgICAJCTwvcmVwb3J0c0RpcmVjdG9yeT4KLSAgICAgICAgICAgICAgICAgICAgICAgIAkJPHJlcG9ydHNEaXJlY3Rvcnk+JHtlbnYuUEFBU19URVNUU19IT01FfS9iYXNpYy1kYi10ZWFyZG93bi1zcWwvdGFyZ2V0L3N1cmVmaXJlLXJlcG9ydHMKLSAgICAgICAgICAgICAgICAgICAgICAgIAkJPC9yZXBvcnRzRGlyZWN0b3J5PgotICAgICAgICAgICAgICAgICAgICAgICAgCQk8cmVwb3J0c0RpcmVjdG9yeT4ke2Vudi5QQUFTX1RFU1RTX0hPTUV9L2Jhc2ljLXNlcnZpY2UtZGlzY292ZXJ5L3RhcmdldC9zdXJlZmlyZS1yZXBvcnRzCi0gICAgICAgICAgICAgICAgICAgICAgICAJCTwvcmVwb3J0c0RpcmVjdG9yeT4KLSAgICAgICAgICAgICAgICAgICAgICAgIAkJPHJlcG9ydHNEaXJlY3Rvcnk+JHtlbnYuUEFBU19URVNUU19IT01FfS9qYXZhZWVfc2hhcmVkX3NlcnZpY2UvdGFyZ2V0L3N1cmVmaXJlLXJlcG9ydHMKLSAgICAgICAgICAgICAgICAgICAgICAgIAkJPC9yZXBvcnRzRGlyZWN0b3J5PgotICAgICAgICAgICAgICAgICAgICAgICAJCQk8cmVwb3J0c0RpcmVjdG9yeT4ke2Vudi5QQUFTX1RFU1RTX0hPTUV9L2xhenktc2hhcmVkLXNlcnZpY2UtdGVzdC90YXJnZXQvc3VyZWZpcmUtcmVwb3J0cwotICAgICAgICAgICAgICAgICAgICAgICAgCQk8L3JlcG9ydHNEaXJlY3Rvcnk+Ci0JCQkJCTxyZXBvcnRzRGlyZWN0b3J5PiR7ZW52LlBBQVNfVEVTVFNfSE9NRX0vYXBwc2NvcGVkLWRiLXdpdGgtcmVzb3VyY2VzLXhtbC90YXJnZXQvc3VyZWZpcmUtcmVwb3J0cwotICAgICAgICAgICAgICAgICAgICAgICAgCQk8L3JlcG9ydHNEaXJlY3Rvcnk+Ci0JCQkJCTxyZXBvcnRzRGlyZWN0b3J5PiR7ZW52LlBBQVNfVEVTVFNfSE9NRX0vZXh0ZXJuYWwtZGItc2VydmljZS90YXJnZXQvc3VyZWZpcmUtcmVwb3J0cwotICAgICAgICAgICAgICAgICAgICAgICAgCQk8L3JlcG9ydHNEaXJlY3Rvcnk+Ci0gICAgICAgICAgICAgICAgICAgICAgIAkJCTxyZXBvcnRzRGlyZWN0b3J5PiR7ZW52LlBBQVNfVEVTVFNfSE9NRX0vbXEtc2hhcmVkLXNlcnZpY2UtdGVzdC90YXJnZXQvc3VyZWZpcmUtcmVwb3J0cwotICAgICAgICAgICAgICAgICAgICAgICAJCQk8L3JlcG9ydHNEaXJlY3Rvcnk+Ci0JCQkJCTxyZXBvcnRzRGlyZWN0b3J5PiR7ZW52LlBBQVNfVEVTVFNfSE9NRX0vYmFzaWMtYm9va3N0b3JlLWRucy90YXJnZXQvc3VyZWZpcmUtcmVwb3J0cwotCQkJCQk8L3JlcG9ydHNEaXJlY3Rvcnk+Ci0gICAgICAgICAgICAgICAgICAgIAkJPC9yZXBvcnRzRGlyZWN0b3JpZXM+Ci0gICAgICAgICAgICAgICAgCQk8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgIAkJICAgPC9wbHVnaW4+Ci0gICAgICAgCQkgICAgIDwvcGx1Z2lucz4KLSAgIAkgICAgICAgPC9yZXBvcnRpbmc+Ci0JCQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zdXJlZmlyZS1yZXBvcnQtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuOTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4ke2Vudi5QQUFTX1RFU1RTX0hPTUV9L3JlcG9ydHM8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG91dHB1dE5hbWU+UGFhc1Rlc3RSZXBvcnQ8L291dHB1dE5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcG9ydHNEaXJlY3Rvcmllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcG9ydHNEaXJlY3Rvcnk+JHtlbnYuUEFBU19URVNUU19IT01FfS9iYXNpYy90YXJnZXQvc3VyZWZpcmUtcmVwb3J0czwvcmVwb3J0c0RpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcG9ydHNEaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtlbnYuUEFBU19URVNUU19IT01FfS9zZXJ2aWNlX21ldGFkYXRhL3Byb3Zpc2lvbl91c2luZ19zcGVjaWZpZWRfdGVtcGxhdGUvdGFyZ2V0L3N1cmVmaXJlLXJlcG9ydHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVwb3J0c0RpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcG9ydHNEaXJlY3Rvcnk+JHtlbnYuUEFBU19URVNUU19IT01FfS9zZXJ2aWNlX21ldGFkYXRhL2N1c3RvbV9kYl9uYW1lL3RhcmdldC9zdXJlZmlyZS1yZXBvcnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVwb3J0c0RpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcG9ydHNEaXJlY3Rvcnk+JHtlbnYuUEFBU19URVNUU19IT01FfS9iYXNpYy1kYi90YXJnZXQvc3VyZWZpcmUtcmVwb3J0czwvcmVwb3J0c0RpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcG9ydHNEaXJlY3Rvcnk+JHtlbnYuUEFBU19URVNUU19IT01FfS9ib29rc3RvcmUvdGFyZ2V0L3N1cmVmaXJlLXJlcG9ydHM8L3JlcG9ydHNEaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBvcnRzRGlyZWN0b3J5PiR7ZW52LlBBQVNfVEVTVFNfSE9NRX0vYmFzaWMtZGItaW5pdHNxbC90YXJnZXQvc3VyZWZpcmUtcmVwb3J0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlcG9ydHNEaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBvcnRzRGlyZWN0b3J5PiR7ZW52LlBBQVNfVEVTVFNfSE9NRX0vc2NhbGVfc2VydmljZS90YXJnZXQvc3VyZWZpcmUtcmVwb3J0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlcG9ydHNEaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBvcnRzRGlyZWN0b3J5PiR7ZW52LlBBQVNfVEVTVFNfSE9NRX0vZGVwbG95bWVudC1yb2xsYmFjay90YXJnZXQvc3VyZWZpcmUtcmVwb3J0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZXBvcnRzRGlyZWN0b3J5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVwb3J0c0RpcmVjdG9yeT4ke2Vudi5QQUFTX1RFU1RTX0hPTUV9L2VuYWJsZS1kaXNhYmxlLXRlc3QvdGFyZ2V0L3N1cmVmaXJlLXJlcG9ydHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZXBvcnRzRGlyZWN0b3J5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVwb3J0c0RpcmVjdG9yeT4ke2Vudi5QQUFTX1RFU1RTX0hPTUV9L2Jhc2ljLWpwYS90YXJnZXQvc3VyZWZpcmUtcmVwb3J0czwvcmVwb3J0c0RpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcG9ydHNEaXJlY3Rvcnk+JHtlbnYuUEFBU19URVNUU19IT01FfS9iYXNpYy1zaGFyZWQtc2VydmljZS10ZXN0L3RhcmdldC9zdXJlZmlyZS1yZXBvcnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVwb3J0c0RpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcG9ydHNEaXJlY3Rvcnk+JHtlbnYuUEFBU19URVNUU19IT01FfS9leHRlcm5hbC1hbmQtc2hhcmVkLXNlcnZpY2UvdGFyZ2V0L3N1cmVmaXJlLXJlcG9ydHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZXBvcnRzRGlyZWN0b3J5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVwb3J0c0RpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2Vudi5QQUFTX1RFU1RTX0hPTUV9L2V4dC1zaGFyZWQtc2VydmljZS1lbmFibGUtZGlzYWJsZS10ZXN0L3RhcmdldC9zdXJlZmlyZS1yZXBvcnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVwb3J0c0RpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcG9ydHNEaXJlY3Rvcnk+JHtlbnYuUEFBU19URVNUU19IT01FfS9tdWx0aXBsZS1zcGUtdGVzdC90YXJnZXQvc3VyZWZpcmUtcmVwb3J0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlcG9ydHNEaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBvcnRzRGlyZWN0b3J5PiR7ZW52LlBBQVNfVEVTVFNfSE9NRX0vYmFzaWMtZGItd2l0aC1yZXNvdXJjZXMteG1sL3RhcmdldC9zdXJlZmlyZS1yZXBvcnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVwb3J0c0RpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcG9ydHNEaXJlY3Rvcnk+JHtlbnYuUEFBU19URVNUU19IT01FfS9iYXNpYy1kYi10ZWFyZG93bi1zcWwvdGFyZ2V0L3N1cmVmaXJlLXJlcG9ydHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZXBvcnRzRGlyZWN0b3J5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVwb3J0c0RpcmVjdG9yeT4ke2Vudi5QQUFTX1RFU1RTX0hPTUV9L2Jhc2ljLXNlcnZpY2UtZGlzY292ZXJ5L3RhcmdldC9zdXJlZmlyZS1yZXBvcnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVwb3J0c0RpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcG9ydHNEaXJlY3Rvcnk+JHtlbnYuUEFBU19URVNUU19IT01FfS9qYXZhZWVfc2hhcmVkX3NlcnZpY2UvdGFyZ2V0L3N1cmVmaXJlLXJlcG9ydHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZXBvcnRzRGlyZWN0b3J5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVwb3J0c0RpcmVjdG9yeT4ke2Vudi5QQUFTX1RFU1RTX0hPTUV9L2xhenktc2hhcmVkLXNlcnZpY2UtdGVzdC90YXJnZXQvc3VyZWZpcmUtcmVwb3J0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlcG9ydHNEaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgICAgIDxyZXBvcnRzRGlyZWN0b3J5PiR7ZW52LlBBQVNfVEVTVFNfSE9NRX0vYXBwc2NvcGVkLWRiLXdpdGgtcmVzb3VyY2VzLXhtbC90YXJnZXQvc3VyZWZpcmUtcmVwb3J0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlcG9ydHNEaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgICAgIDxyZXBvcnRzRGlyZWN0b3J5PiR7ZW52LlBBQVNfVEVTVFNfSE9NRX0vZXh0ZXJuYWwtZGItc2VydmljZS90YXJnZXQvc3VyZWZpcmUtcmVwb3J0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlcG9ydHNEaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBvcnRzRGlyZWN0b3J5PiR7ZW52LlBBQVNfVEVTVFNfSE9NRX0vbXEtc2hhcmVkLXNlcnZpY2UtdGVzdC90YXJnZXQvc3VyZWZpcmUtcmVwb3J0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlcG9ydHNEaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgICAgIDxyZXBvcnRzRGlyZWN0b3J5PiR7ZW52LlBBQVNfVEVTVFNfSE9NRX0vYmFzaWMtYm9va3N0b3JlLWRucy90YXJnZXQvc3VyZWZpcmUtcmVwb3J0cworICAgICAgICAgICAgICAgICAgICA8L3JlcG9ydHNEaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZXBvcnRzRGlyZWN0b3JpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICAgICAgICAgIDwvcGx1Z2lucz4KKyAgICAgICAgICAgICAgPC9yZXBvcnRpbmc+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL3NjYWxlX3NlcnZpY2Uvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvc2NhbGVfc2VydmljZS9TY2FsZVNlcnZpY2VQYWFTVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvc2NhbGVfc2VydmljZS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9zY2FsZV9zZXJ2aWNlL1NjYWxlU2VydmljZVBhYVNUZXN0LmphdmEKaW5kZXggNTRlYTRhNi4uN2UxZWYwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvc2NhbGVfc2VydmljZS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9zY2FsZV9zZXJ2aWNlL1NjYWxlU2VydmljZVBhYVNUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvc2NhbGVfc2VydmljZS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9zY2FsZV9zZXJ2aWNlL1NjYWxlU2VydmljZVBhYVNUZXN0LmphdmEKQEAgLTEwNSw3ICsxMDUsNyBAQAogCiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpbnN0YW5jZUlQID0gZ2V0TEJJUEFkZHJlc3MoZ2xhc3NmaXNoKTsKIAotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBnZXQoImh0dHA6Ly8iICsgaW5zdGFuY2VJUCArIjoiICsgSFRUUF9QT1JUCiAgICAgICAgICAgICAgICAgICAgICsgIi9zY2FsZV9zZXJ2aWNlL1NjYWxlU2VydmljZVBhYVNTZXJ2bGV0IiwKICAgICAgICAgICAgICAgICAgICAgIlJlcXVlc3QgaGVhZGVycyBmcm9tIHRoZSByZXF1ZXN0OiIpOwpAQCAtMTM2LDE3ICsxMzYsMTcgQEAKICAgICAgICAgICAgICAgICBkZXBsb3llci51bmRlcGxveShhcHBOYW1lKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVuZGVwbG95ZWQgWyIgKyBhcHBOYW1lICsgIl0iKTsKICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAJCQlib29sZWFuIHVuZGVwbG95Q2xlYW4gPSBmYWxzZTsKLSAgICAgICAgCQkJQ29tbWFuZFJlc3VsdCBjb21tYW5kUmVzdWx0ID0gZ2xhc3NmaXNoLmdldENvbW1hbmRSdW5uZXIoKQotICAgICAgICAJCQkJCS5ydW4oImxpc3Qtc2VydmljZXMiKTsKLSAgICAgICAgCQkJaWYgKGNvbW1hbmRSZXN1bHQuZ2V0T3V0cHV0KCkuY29udGFpbnMoIk5vdGhpbmcgdG8gbGlzdC4iKSkgewotICAgICAgICAJCQkJdW5kZXBsb3lDbGVhbiA9IHRydWU7Ci0gICAgICAgIAkJCX0KLSAgICAgICAgCQkJQXNzZXJ0LmFzc2VydFRydWUodW5kZXBsb3lDbGVhbik7Ci0gICAgICAgIAkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgCQkJU3lzdGVtLmVycgotICAgICAgICAJCQkJCS5wcmludGxuKCJDb3VsZG4ndCB2YXJpZnkgd2hldGhlciB1bmRlcGxveSBzdWNjZWVkZWQiKTsKLSAgICAgICAgCQl9CisgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gdW5kZXBsb3lDbGVhbiA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBDb21tYW5kUmVzdWx0IGNvbW1hbmRSZXN1bHQgPSBnbGFzc2Zpc2guZ2V0Q29tbWFuZFJ1bm5lcigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJ1bigibGlzdC1zZXJ2aWNlcyIpOworICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZFJlc3VsdC5nZXRPdXRwdXQoKS5jb250YWlucygiTm90aGluZyB0byBsaXN0LiIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bmRlcGxveUNsZWFuID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSh1bmRlcGxveUNsZWFuKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnByaW50bG4oIkNvdWxkbid0IHZhcmlmeSB3aGV0aGVyIHVuZGVwbG95IHN1Y2NlZWRlZCIpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xNjQsNDYgKzE2NCw0NiBAQAogICAgICAgICBTeXN0ZW0uc2V0T3V0KHN5c291dCk7CiAgICAgICAgIHJldHVybiBnbGFzc2Zpc2g7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0TEJJUEFkZHJlc3MoR2xhc3NGaXNoIGdsYXNzZmlzaCkgewotCQlTdHJpbmcgbGJJUCA9IG51bGw7Ci0JCVN0cmluZyBJUEFkZHJlc3NQYXR0ZXJuID0gIklQLUFERFJFU1NcXHMqXG4qKC4qKVxccypcbigoWzAxXT9cXGQqfDJbMC00XVxcZHwyNVswLTVdKVxcLiIKLQkJCQkrICIoWzAxXT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKVxcLiIKLQkJCQkrICIoWzAxXT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKVxcLiIKLQkJCQkrICIoWzAtOV0/XFxkXFxkP3wyWzAtNF1cXGR8MjVbMC01XSkpIjsKLQkJdHJ5IHsKLQkJCUNvbW1hbmRSdW5uZXIgY29tbWFuZFJ1bm5lciA9IGdsYXNzZmlzaC5nZXRDb21tYW5kUnVubmVyKCk7Ci0JCQlTdHJpbmcgcmVzdWx0ID0gY29tbWFuZFJ1bm5lcgotCQkJCQkucnVuKCJsaXN0LXNlcnZpY2VzIiwgIi0tdHlwZSIsICJMQiIsCi0JCQkJCQkJIi0tb3V0cHV0IiwgIklQLUFERFJFU1MiKS5nZXRPdXRwdXQoKS50b1N0cmluZygpOwotCQkJaWYgKHJlc3VsdC5jb250YWlucygiTm90aGluZyB0byBsaXN0LiIpKSB7Ci0JCQkJcmVzdWx0ID0gY29tbWFuZFJ1bm5lcgotCQkJCQkJLnJ1bigibGlzdC1zZXJ2aWNlcyIsICItLXR5cGUiLCAiSmF2YUVFIiwgIi0tb3V0cHV0IiwKLQkJCQkJCQkJIklQLUFERFJFU1MiKS5nZXRPdXRwdXQoKS50b1N0cmluZygpOworICAgICAgICBTdHJpbmcgbGJJUCA9IG51bGw7CisgICAgICAgIFN0cmluZyBJUEFkZHJlc3NQYXR0ZXJuID0gIklQLUFERFJFU1NcXHMqXG4qKC4qKVxccypcbigoWzAxXT9cXGQqfDJbMC00XVxcZHwyNVswLTVdKVxcLiIKKyAgICAgICAgICAgICAgICArICIoWzAxXT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKVxcLiIKKyAgICAgICAgICAgICAgICArICIoWzAxXT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKVxcLiIKKyAgICAgICAgICAgICAgICArICIoWzAtOV0/XFxkXFxkP3wyWzAtNF1cXGR8MjVbMC01XSkpIjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENvbW1hbmRSdW5uZXIgY29tbWFuZFJ1bm5lciA9IGdsYXNzZmlzaC5nZXRDb21tYW5kUnVubmVyKCk7CisgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gY29tbWFuZFJ1bm5lcgorICAgICAgICAgICAgICAgICAgICAucnVuKCJsaXN0LXNlcnZpY2VzIiwgIi0tdHlwZSIsICJMQiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tb3V0cHV0IiwgIklQLUFERFJFU1MiKS5nZXRPdXRwdXQoKS50b1N0cmluZygpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5jb250YWlucygiTm90aGluZyB0byBsaXN0LiIpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tbWFuZFJ1bm5lcgorICAgICAgICAgICAgICAgICAgICAgICAgLnJ1bigibGlzdC1zZXJ2aWNlcyIsICItLXR5cGUiLCAiSmF2YUVFIiwgIi0tb3V0cHV0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklQLUFERFJFU1MiKS5nZXRPdXRwdXQoKS50b1N0cmluZygpOwogCi0JCQkJUGF0dGVybiBwID0gUGF0dGVybi5jb21waWxlKElQQWRkcmVzc1BhdHRlcm4pOwotCQkJCU1hdGNoZXIgbSA9IHAubWF0Y2hlcihyZXN1bHQpOwotCQkJCWlmIChtLmZpbmQoKSkgewotCQkJCQlsYklQID0gbS5ncm91cCgyKTsKLQkJCQl9IGVsc2UgewotCQkJCQlsYklQID0gImxvY2FsaG9zdCI7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlQYXR0ZXJuIHAgPSBQYXR0ZXJuLmNvbXBpbGUoSVBBZGRyZXNzUGF0dGVybik7Ci0JCQkJTWF0Y2hlciBtID0gcC5tYXRjaGVyKHJlc3VsdCk7Ci0JCQkJaWYgKG0uZmluZCgpKSB7Ci0JCQkJCWxiSVAgPSBtLmdyb3VwKDIpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWxiSVAgPSAibG9jYWxob3N0IjsKLQkJCQl9CisgICAgICAgICAgICAgICAgUGF0dGVybiBwID0gUGF0dGVybi5jb21waWxlKElQQWRkcmVzc1BhdHRlcm4pOworICAgICAgICAgICAgICAgIE1hdGNoZXIgbSA9IHAubWF0Y2hlcihyZXN1bHQpOworICAgICAgICAgICAgICAgIGlmIChtLmZpbmQoKSkgeworICAgICAgICAgICAgICAgICAgICBsYklQID0gbS5ncm91cCgyKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsYklQID0gImxvY2FsaG9zdCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBQYXR0ZXJuIHAgPSBQYXR0ZXJuLmNvbXBpbGUoSVBBZGRyZXNzUGF0dGVybik7CisgICAgICAgICAgICAgICAgTWF0Y2hlciBtID0gcC5tYXRjaGVyKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgaWYgKG0uZmluZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGxiSVAgPSBtLmdyb3VwKDIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxiSVAgPSAibG9jYWxob3N0IjsKKyAgICAgICAgICAgICAgICB9CiAKLQkJCX0KKyAgICAgICAgICAgIH0KIAotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJSZWdleCBoYXMgdGhyb3duIGFuIGV4Y2VwdGlvbiAiCi0JCQkJCSsgZS5nZXRNZXNzYWdlKCkpOwotCQkJcmV0dXJuICJsb2NhbGhvc3QiOwotCQl9Ci0JCXJldHVybiBsYklQOwotCX0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVnZXggaGFzIHRocm93biBhbiBleGNlcHRpb24gIgorICAgICAgICAgICAgICAgICAgICArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIHJldHVybiAibG9jYWxob3N0IjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGJJUDsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9zZXJ2aWNlX21ldGFkYXRhL2N1c3RvbV9kYl9uYW1lL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9zZXJ2aWNlX21ldGFkYXRhL2N1c3RvbV9kYl9uYW1lL3BvbS54bWwKaW5kZXggMzlkZDNmYS4uYWQ2OTgzYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvc2VydmljZV9tZXRhZGF0YS9jdXN0b21fZGJfbmFtZS9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL3NlcnZpY2VfbWV0YWRhdGEvY3VzdG9tX2RiX25hbWUvcG9tLnhtbApAQCAtNTAsMTIgKzUwLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgogICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNraXA+ZmFsc2U8L3NraXA+Ci0JCQkgICAgPGVuYWJsZUFzc2VydGlvbnM+ZmFsc2U8L2VuYWJsZUFzc2VydGlvbnM+CisgICAgICAgICAgICAgICAgPGVuYWJsZUFzc2VydGlvbnM+ZmFsc2U8L2VuYWJsZUFzc2VydGlvbnM+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgogICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KICAgICAgICAgICAgIDwvcGx1Z2luPgotCSAgIDxwbHVnaW4+CisgICAgICAgPHBsdWdpbj4KICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYW50cnVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CiAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL3NlcnZpY2VfbWV0YWRhdGEvY3VzdG9tX2RiX25hbWUvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvY3VzdG9tZGJuYW1lL0N1c3RvbURCTmFtZVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL3NlcnZpY2VfbWV0YWRhdGEvY3VzdG9tX2RiX25hbWUvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvY3VzdG9tZGJuYW1lL0N1c3RvbURCTmFtZVNlcnZsZXQuamF2YQppbmRleCBlNWRlYjE4Li4xOTYyMDNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9zZXJ2aWNlX21ldGFkYXRhL2N1c3RvbV9kYl9uYW1lL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2N1c3RvbWRibmFtZS9DdXN0b21EQk5hbWVTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvc2VydmljZV9tZXRhZGF0YS9jdXN0b21fZGJfbmFtZS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9jdXN0b21kYm5hbWUvQ3VzdG9tREJOYW1lU2VydmxldC5qYXZhCkBAIC04NywyMiArODcsMjIgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgc3RtdCA9IGRzLmdldENvbm5lY3Rpb24oKS5jcmVhdGVTdGF0ZW1lbnQoKTsKIAotCQlEYXRhYmFzZU1ldGFEYXRhIGRiTWV0YWRhdGEgPSBzdG10LmdldENvbm5lY3Rpb24oKS5nZXRNZXRhRGF0YSgpOwotCQlTdHJpbmcgZGJVcmwgPSBkYk1ldGFkYXRhLmdldFVSTCgpOwotCQl3cml0ZXIucHJpbnRsbigiREIgVVJMIDogIiArIGRiVXJsICsgIlxuIik7Ci0JCWlmKGRiVXJsLmluZGV4T2YoImZvb2JhciIpID09IC0xKSB7Ci0JCSAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQ3VzdG9tIERhdGFiYXNlIFtmb29iYXJdIGlzIG5vdCBjcmVhdGVkIHdoaWxlIHByb3Zpc2lvbmluZy4iKTsKLQkJfQotCQkKKyAgICAgICAgRGF0YWJhc2VNZXRhRGF0YSBkYk1ldGFkYXRhID0gc3RtdC5nZXRDb25uZWN0aW9uKCkuZ2V0TWV0YURhdGEoKTsKKyAgICAgICAgU3RyaW5nIGRiVXJsID0gZGJNZXRhZGF0YS5nZXRVUkwoKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIkRCIFVSTCA6ICIgKyBkYlVybCArICJcbiIpOworICAgICAgICBpZihkYlVybC5pbmRleE9mKCJmb29iYXIiKSA9PSAtMSkgeworICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkN1c3RvbSBEYXRhYmFzZSBbZm9vYmFyXSBpcyBub3QgY3JlYXRlZCB3aGlsZSBwcm92aXNpb25pbmcuIik7CisgICAgICAgIH0KKwogCiAgICAgICAgICAgICAgICAgUmVzdWx0U2V0IHJzID0gc3RtdC5leGVjdXRlUXVlcnkoIlNFTEVDVCBjX2lkLCBjX25hbWUgZnJvbSBjdXN0b21lciIpOwogICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8dGFibGUgYm9yZGVyPVwiMVwiIHdpZHRoPVwiMTAwJVwiPiIpOwogICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8dHI+Iik7CiAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIiAgPHRoIGFsaWduPVwibGVmdFwiIGNvbHNwYW49XCIyXCI+IiArICJEYXRhIHJldHJpZXZlZCBmcm9tIHRhYmxlIFwiY3VzdG9tZXJcIiIgKyAiPC90aD4iKTsKICAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiPC90cj4iKTsKLQkJd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKLQkJd3JpdGVyLnByaW50bG4oIjx0ZD4iICsgIkN1c3RvbWVyIElEIiArICI8L3RkPiIpOwotCQl3cml0ZXIucHJpbnRsbigiPHRkPiIgKyAiQ3VzdG9tZXIgTmFtZSIgKyAiPC90ZD4iKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIjx0ZD4iICsgIkN1c3RvbWVyIElEIiArICI8L3RkPiIpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiPHRkPiIgKyAiQ3VzdG9tZXIgTmFtZSIgKyAiPC90ZD4iKTsKICAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiPC90cj4iKTsKICAgICAgICAgICAgICAgICB3aGlsZSAocnMubmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8dHI+Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9zZXJ2aWNlX21ldGFkYXRhL2N1c3RvbV9kYl9uYW1lL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvc2VydmljZV9tZXRhZGF0YS9jdXN0b21fZGJfbmFtZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbAppbmRleCBlZjdlNDRiLi5iY2I3Nzc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9zZXJ2aWNlX21ldGFkYXRhL2N1c3RvbV9kYl9uYW1lL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL3NlcnZpY2VfbWV0YWRhdGEvY3VzdG9tX2RiX25hbWUvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIAogLS0+CiAKLTwhRE9DVFlQRSBzdW4td2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOS4wIFNlcnZsZXQgMi41Ly9FTiIgCis8IURPQ1RZUEUgc3VuLXdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDkuMCBTZXJ2bGV0IDIuNS8vRU4iCiAgICJodHRwOi8vd3d3LnN1bi5jb20vc29mdHdhcmUvYXBwc2VydmVyL2R0ZHMvc3VuLXdlYi1hcHBfMl81LTAuZHRkIj4KIDxzdW4td2ViLWFwcCBlcnJvci11cmw9IiI+CiAgIDxyZXNvdXJjZS1yZWY+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9zZXJ2aWNlX21ldGFkYXRhL2N1c3RvbV9kYl9uYW1lL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9zZXJ2aWNlX21ldGFkYXRhL2N1c3RvbV9kYl9uYW1lL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKaW5kZXggZjRmNzljMS4uMzc4Nzk0ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvc2VydmljZV9tZXRhZGF0YS9jdXN0b21fZGJfbmFtZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL3NlcnZpY2VfbWV0YWRhdGEvY3VzdG9tX2RiX25hbWUvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApAQCAtMTcsOSArMTcsOSBAQAogCiAtLT4KIAotPHdlYi1hcHAgdmVyc2lvbj0iMi41IiAKLSAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgCi0gIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorPHdlYi1hcHAgdmVyc2lvbj0iMi41IgorICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5DdXN0b21EQk5hbWVTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9zZXJ2aWNlX21ldGFkYXRhL2N1c3RvbV9kYl9uYW1lL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2N1c3RvbWRibmFtZS9DdXN0b21EQk5hbWVUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9zZXJ2aWNlX21ldGFkYXRhL2N1c3RvbV9kYl9uYW1lL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2N1c3RvbWRibmFtZS9DdXN0b21EQk5hbWVUZXN0LmphdmEKaW5kZXggNDE3Y2MwMi4uN2RlZDc3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvc2VydmljZV9tZXRhZGF0YS9jdXN0b21fZGJfbmFtZS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9jdXN0b21kYm5hbWUvQ3VzdG9tREJOYW1lVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL3NlcnZpY2VfbWV0YWRhdGEvY3VzdG9tX2RiX25hbWUvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvY3VzdG9tZGJuYW1lL0N1c3RvbURCTmFtZVRlc3QuamF2YQpAQCAtNDgsMTIwICs0OCwxMjAgQEAKIAogcHVibGljIGNsYXNzIEN1c3RvbURCTmFtZVRlc3QgewogCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLQkJLy8gMS4gQm9vdHN0cmFwIEdsYXNzRmlzaCBEQVMgaW4gZW1iZWRkZWQgbW9kZS4KLQkJR2xhc3NGaXNoUHJvcGVydGllcyBnbGFzc0Zpc2hQcm9wZXJ0aWVzID0gbmV3IEdsYXNzRmlzaFByb3BlcnRpZXMoKTsKLQkJZ2xhc3NGaXNoUHJvcGVydGllcy5zZXRJbnN0YW5jZVJvb3QoU3lzdGVtLmdldGVudigiUzFBU19IT01FIikKLQkJCQkrICIvZG9tYWlucy9kb21haW4xIik7Ci0JCWdsYXNzRmlzaFByb3BlcnRpZXMuc2V0Q29uZmlnRmlsZVJlYWRPbmx5KGZhbHNlKTsKLQkJR2xhc3NGaXNoIGdsYXNzZmlzaCA9IEdsYXNzRmlzaFJ1bnRpbWUuYm9vdHN0cmFwKCkubmV3R2xhc3NGaXNoKAotCQkJCWdsYXNzRmlzaFByb3BlcnRpZXMpOwotCQlQcmludFN0cmVhbSBzeXNvdXQgPSBTeXN0ZW0ub3V0OwotCQlnbGFzc2Zpc2guc3RhcnQoKTsKLQkJU3lzdGVtLnNldE91dChzeXNvdXQpOworICAgICAgICAvLyAxLiBCb290c3RyYXAgR2xhc3NGaXNoIERBUyBpbiBlbWJlZGRlZCBtb2RlLgorICAgICAgICBHbGFzc0Zpc2hQcm9wZXJ0aWVzIGdsYXNzRmlzaFByb3BlcnRpZXMgPSBuZXcgR2xhc3NGaXNoUHJvcGVydGllcygpOworICAgICAgICBnbGFzc0Zpc2hQcm9wZXJ0aWVzLnNldEluc3RhbmNlUm9vdChTeXN0ZW0uZ2V0ZW52KCJTMUFTX0hPTUUiKQorICAgICAgICAgICAgICAgICsgIi9kb21haW5zL2RvbWFpbjEiKTsKKyAgICAgICAgZ2xhc3NGaXNoUHJvcGVydGllcy5zZXRDb25maWdGaWxlUmVhZE9ubHkoZmFsc2UpOworICAgICAgICBHbGFzc0Zpc2ggZ2xhc3NmaXNoID0gR2xhc3NGaXNoUnVudGltZS5ib290c3RyYXAoKS5uZXdHbGFzc0Zpc2goCisgICAgICAgICAgICAgICAgZ2xhc3NGaXNoUHJvcGVydGllcyk7CisgICAgICAgIFByaW50U3RyZWFtIHN5c291dCA9IFN5c3RlbS5vdXQ7CisgICAgICAgIGdsYXNzZmlzaC5zdGFydCgpOworICAgICAgICBTeXN0ZW0uc2V0T3V0KHN5c291dCk7CiAKLQkJLy8gMi4gRGVwbG95IHRoZSBQYWFTIGFwcGxpY2F0aW9uLgotCQlGaWxlIGFyY2hpdmUgPSBuZXcgRmlsZShTeXN0ZW0uZ2V0UHJvcGVydHkoImJhc2VkaXIiKQotCQkJCSsgIi90YXJnZXQvY3VzdG9tX2RiX25hbWVfcGFhc19zYW1wbGUud2FyIik7IC8vIFRPRE8gOjogdXNlIG12bgotCQkJCQkJCQkJCQkJCQkJCS8vIGFwaXMgdG8gZ2V0Ci0JCQkJCQkJCQkJCQkJCQkJLy8gdGhlIGFyY2hpdmUKLQkJCQkJCQkJCQkJCQkJCQkvLyBsb2NhdGlvbi4KLQkJQXNzZXJ0LmFzc2VydFRydWUoYXJjaGl2ZS5leGlzdHMoKSk7CisgICAgICAgIC8vIDIuIERlcGxveSB0aGUgUGFhUyBhcHBsaWNhdGlvbi4KKyAgICAgICAgRmlsZSBhcmNoaXZlID0gbmV3IEZpbGUoU3lzdGVtLmdldFByb3BlcnR5KCJiYXNlZGlyIikKKyAgICAgICAgICAgICAgICArICIvdGFyZ2V0L2N1c3RvbV9kYl9uYW1lX3BhYXNfc2FtcGxlLndhciIpOyAvLyBUT0RPIDo6IHVzZSBtdm4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcGlzIHRvIGdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhcmNoaXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9jYXRpb24uCisgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGFyY2hpdmUuZXhpc3RzKCkpOwogCi0JCURlcGxveWVyIGRlcGxveWVyID0gbnVsbDsKLQkJU3RyaW5nIGFwcE5hbWUgPSBudWxsOwotCQl0cnkgewotCQkJZGVwbG95ZXIgPSBnbGFzc2Zpc2guZ2V0RGVwbG95ZXIoKTsKLQkJCWFwcE5hbWUgPSBkZXBsb3llci5kZXBsb3koYXJjaGl2ZSk7CisgICAgICAgIERlcGxveWVyIGRlcGxveWVyID0gbnVsbDsKKyAgICAgICAgU3RyaW5nIGFwcE5hbWUgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgZGVwbG95ZXIgPSBnbGFzc2Zpc2guZ2V0RGVwbG95ZXIoKTsKKyAgICAgICAgICAgIGFwcE5hbWUgPSBkZXBsb3llci5kZXBsb3koYXJjaGl2ZSk7CiAKLQkJCVN5c3RlbS5lcnIucHJpbnRsbigiRGVwbG95ZWQgWyIgKyBhcHBOYW1lICsgIl0iKTsKLQkJCUFzc2VydC5hc3NlcnROb3ROdWxsKGFwcE5hbWUpOworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJEZXBsb3llZCBbIiArIGFwcE5hbWUgKyAiXSIpOworICAgICAgICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoYXBwTmFtZSk7CiAKLQkJCUNvbW1hbmRSdW5uZXIgY29tbWFuZFJ1bm5lciA9IGdsYXNzZmlzaC5nZXRDb21tYW5kUnVubmVyKCk7Ci0JCQlDb21tYW5kUmVzdWx0IHJlc3VsdCA9IGNvbW1hbmRSdW5uZXIucnVuKCJsaXN0LXNlcnZpY2VzIik7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxubGlzdC1zZXJ2aWNlcyBjb21tYW5kIG91dHB1dCBbICIKLQkJCQkJKyByZXN1bHQuZ2V0T3V0cHV0KCkgKyAiXSIpOworICAgICAgICAgICAgQ29tbWFuZFJ1bm5lciBjb21tYW5kUnVubmVyID0gZ2xhc3NmaXNoLmdldENvbW1hbmRSdW5uZXIoKTsKKyAgICAgICAgICAgIENvbW1hbmRSZXN1bHQgcmVzdWx0ID0gY29tbWFuZFJ1bm5lci5ydW4oImxpc3Qtc2VydmljZXMiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5saXN0LXNlcnZpY2VzIGNvbW1hbmQgb3V0cHV0IFsgIgorICAgICAgICAgICAgICAgICAgICArIHJlc3VsdC5nZXRPdXRwdXQoKSArICJdIik7CiAKLQkJCS8vIDMuIEFjY2VzcyB0aGUgYXBwIHRvIG1ha2Ugc3VyZSBQYWFTIGFwcCBpcyBjb3JyZWN0bHkgcHJvdmlzaW9uZWQuCi0JCQlTdHJpbmcgSFRUUF9QT1JUID0gKFN5c3RlbS5nZXRQcm9wZXJ0eSgiaHR0cC5wb3J0IikgIT0gbnVsbCkgPyBTeXN0ZW0KLQkJCQkJLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKSA6ICIyODA4MCI7CisgICAgICAgICAgICAvLyAzLiBBY2Nlc3MgdGhlIGFwcCB0byBtYWtlIHN1cmUgUGFhUyBhcHAgaXMgY29ycmVjdGx5IHByb3Zpc2lvbmVkLgorICAgICAgICAgICAgU3RyaW5nIEhUVFBfUE9SVCA9IChTeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucG9ydCIpICE9IG51bGwpID8gU3lzdGVtCisgICAgICAgICAgICAgICAgICAgIC5nZXRQcm9wZXJ0eSgiaHR0cC5wb3J0IikgOiAiMjgwODAiOwogCi0JCQlTdHJpbmcgaW5zdGFuY2VJUCA9IGdldExCSVBBZGRyZXNzKGdsYXNzZmlzaCk7Ci0JCQlnZXQoImh0dHA6Ly8iICsgaW5zdGFuY2VJUCArICI6IiArIEhUVFBfUE9SVAotCQkJCQkrICIvY3VzdG9tX2RiX25hbWVfcGFhc19zYW1wbGUvQ3VzdG9tREJOYW1lU2VydmxldCIsCi0JCQkJCSJDdXN0b21lciBJRCIpOworICAgICAgICAgICAgU3RyaW5nIGluc3RhbmNlSVAgPSBnZXRMQklQQWRkcmVzcyhnbGFzc2Zpc2gpOworICAgICAgICAgICAgZ2V0KCJodHRwOi8vIiArIGluc3RhbmNlSVAgKyAiOiIgKyBIVFRQX1BPUlQKKyAgICAgICAgICAgICAgICAgICAgKyAiL2N1c3RvbV9kYl9uYW1lX3BhYXNfc2FtcGxlL0N1c3RvbURCTmFtZVNlcnZsZXQiLAorICAgICAgICAgICAgICAgICAgICAiQ3VzdG9tZXIgSUQiKTsKIAotCQkJLy8gNC4gVW5kZXBsb3kgdGhlIFBhYVMgYXBwbGljYXRpb24gLgotCQl9IGZpbmFsbHkgewotCQkJaWYgKGFwcE5hbWUgIT0gbnVsbCkgewotCQkJCWRlcGxveWVyLnVuZGVwbG95KGFwcE5hbWUpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRGVzdHJveWluZyB0aGUgcmVzb3VyY2VzIGNyZWF0ZWQiKTsKLQkJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlVuZGVwbG95ZWQgWyIgKyBhcHBOYW1lICsgIl0iKTsKLQkJCX0KLQkJfQorICAgICAgICAgICAgLy8gNC4gVW5kZXBsb3kgdGhlIFBhYVMgYXBwbGljYXRpb24gLgorICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgaWYgKGFwcE5hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGRlcGxveWVyLnVuZGVwbG95KGFwcE5hbWUpOworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVzdHJveWluZyB0aGUgcmVzb3VyY2VzIGNyZWF0ZWQiKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVuZGVwbG95ZWQgWyIgKyBhcHBOYW1lICsgIl0iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0JfQorICAgIH0KIAotCXByaXZhdGUgdm9pZCBnZXQoU3RyaW5nIHVybFN0ciwgU3RyaW5nIHJlc3VsdCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVVSTCB1cmwgPSBuZXcgVVJMKHVybFN0cik7Ci0JCVVSTENvbm5lY3Rpb24geWMgPSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJcblVSTENvbm5lY3Rpb24gWyIgKyB5YyArICJdIDogIik7Ci0JCUJ1ZmZlcmVkUmVhZGVyIGluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcigKLQkJCQl5Yy5nZXRJbnB1dFN0cmVhbSgpKSk7Ci0JCVN0cmluZyBsaW5lID0gbnVsbDsKLQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQl3aGlsZSAoKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7Ci0JCQlpZiAobGluZS5pbmRleE9mKHJlc3VsdCkgIT0gLTEpIHsKLQkJCQlmb3VuZCA9IHRydWU7Ci0JCQl9Ci0JCX0KLQkJQXNzZXJ0LmFzc2VydFRydWUoZm91bmQpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuKioqKiogU1VDQ0VTUyAqKioqIEZvdW5kIFsiICsgcmVzdWx0Ci0JCQkJKyAiXSBpbiB0aGUgcmVzcG9uc2UuKioqKipcbiIpOwotCX0KKyAgICBwcml2YXRlIHZvaWQgZ2V0KFN0cmluZyB1cmxTdHIsIFN0cmluZyByZXN1bHQpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCh1cmxTdHIpOworICAgICAgICBVUkxDb25uZWN0aW9uIHljID0gdXJsLm9wZW5Db25uZWN0aW9uKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5VUkxDb25uZWN0aW9uIFsiICsgeWMgKyAiXSA6ICIpOworICAgICAgICBCdWZmZXJlZFJlYWRlciBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoCisgICAgICAgICAgICAgICAgeWMuZ2V0SW5wdXRTdHJlYW0oKSkpOworICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CisgICAgICAgIGJvb2xlYW4gZm91bmQgPSBmYWxzZTsKKyAgICAgICAgd2hpbGUgKChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOworICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZihyZXN1bHQpICE9IC0xKSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGZvdW5kKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbioqKioqIFNVQ0NFU1MgKioqKiBGb3VuZCBbIiArIHJlc3VsdAorICAgICAgICAgICAgICAgICsgIl0gaW4gdGhlIHJlc3BvbnNlLioqKioqXG4iKTsKKyAgICB9CiAKLQlwcml2YXRlIFN0cmluZyBnZXRMQklQQWRkcmVzcyhHbGFzc0Zpc2ggZ2xhc3NmaXNoKSB7Ci0JCVN0cmluZyBsYklQID0gbnVsbDsKLQkJU3RyaW5nIElQQWRkcmVzc1BhdHRlcm4gPSAiSVAtQUREUkVTU1xccypcbiooLiopXFxzKlxuKChbMDFdP1xcZCp8MlswLTRdXFxkfDI1WzAtNV0pXFwuIgotCQkJCSsgIihbMDFdP1xcZFxcZD98MlswLTRdXFxkfDI1WzAtNV0pXFwuIgotCQkJCSsgIihbMDFdP1xcZFxcZD98MlswLTRdXFxkfDI1WzAtNV0pXFwuIgotCQkJCSsgIihbMC05XT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKSkiOwotCQl0cnkgewotCQkJQ29tbWFuZFJ1bm5lciBjb21tYW5kUnVubmVyID0gZ2xhc3NmaXNoLmdldENvbW1hbmRSdW5uZXIoKTsKLQkJCVN0cmluZyByZXN1bHQgPSBjb21tYW5kUnVubmVyCi0JCQkJCS5ydW4oImxpc3Qtc2VydmljZXMiLCAiLS10eXBlIiwgIkxCIiwKLQkJCQkJCQkiLS1vdXRwdXQiLCAiSVAtQUREUkVTUyIpLmdldE91dHB1dCgpLnRvU3RyaW5nKCk7Ci0JCQlpZiAocmVzdWx0LmNvbnRhaW5zKCJOb3RoaW5nIHRvIGxpc3QuIikpIHsKLQkJCQlyZXN1bHQgPSBjb21tYW5kUnVubmVyCi0JCQkJCQkucnVuKCJsaXN0LXNlcnZpY2VzIiwgIi0tdHlwZSIsICJKYXZhRUUiLCAiLS1vdXRwdXQiLAotCQkJCQkJCQkiSVAtQUREUkVTUyIpLmdldE91dHB1dCgpLnRvU3RyaW5nKCk7CisgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0TEJJUEFkZHJlc3MoR2xhc3NGaXNoIGdsYXNzZmlzaCkgeworICAgICAgICBTdHJpbmcgbGJJUCA9IG51bGw7CisgICAgICAgIFN0cmluZyBJUEFkZHJlc3NQYXR0ZXJuID0gIklQLUFERFJFU1NcXHMqXG4qKC4qKVxccypcbigoWzAxXT9cXGQqfDJbMC00XVxcZHwyNVswLTVdKVxcLiIKKyAgICAgICAgICAgICAgICArICIoWzAxXT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKVxcLiIKKyAgICAgICAgICAgICAgICArICIoWzAxXT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKVxcLiIKKyAgICAgICAgICAgICAgICArICIoWzAtOV0/XFxkXFxkP3wyWzAtNF1cXGR8MjVbMC01XSkpIjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENvbW1hbmRSdW5uZXIgY29tbWFuZFJ1bm5lciA9IGdsYXNzZmlzaC5nZXRDb21tYW5kUnVubmVyKCk7CisgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gY29tbWFuZFJ1bm5lcgorICAgICAgICAgICAgICAgICAgICAucnVuKCJsaXN0LXNlcnZpY2VzIiwgIi0tdHlwZSIsICJMQiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tb3V0cHV0IiwgIklQLUFERFJFU1MiKS5nZXRPdXRwdXQoKS50b1N0cmluZygpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5jb250YWlucygiTm90aGluZyB0byBsaXN0LiIpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tbWFuZFJ1bm5lcgorICAgICAgICAgICAgICAgICAgICAgICAgLnJ1bigibGlzdC1zZXJ2aWNlcyIsICItLXR5cGUiLCAiSmF2YUVFIiwgIi0tb3V0cHV0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklQLUFERFJFU1MiKS5nZXRPdXRwdXQoKS50b1N0cmluZygpOwogCi0JCQkJUGF0dGVybiBwID0gUGF0dGVybi5jb21waWxlKElQQWRkcmVzc1BhdHRlcm4pOwotCQkJCU1hdGNoZXIgbSA9IHAubWF0Y2hlcihyZXN1bHQpOwotCQkJCWlmIChtLmZpbmQoKSkgewotCQkJCQlsYklQID0gbS5ncm91cCgyKTsKLQkJCQl9IGVsc2UgewotCQkJCQlsYklQID0gImxvY2FsaG9zdCI7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlQYXR0ZXJuIHAgPSBQYXR0ZXJuLmNvbXBpbGUoSVBBZGRyZXNzUGF0dGVybik7Ci0JCQkJTWF0Y2hlciBtID0gcC5tYXRjaGVyKHJlc3VsdCk7Ci0JCQkJaWYgKG0uZmluZCgpKSB7Ci0JCQkJCWxiSVAgPSBtLmdyb3VwKDIpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWxiSVAgPSAibG9jYWxob3N0IjsKLQkJCQl9CisgICAgICAgICAgICAgICAgUGF0dGVybiBwID0gUGF0dGVybi5jb21waWxlKElQQWRkcmVzc1BhdHRlcm4pOworICAgICAgICAgICAgICAgIE1hdGNoZXIgbSA9IHAubWF0Y2hlcihyZXN1bHQpOworICAgICAgICAgICAgICAgIGlmIChtLmZpbmQoKSkgeworICAgICAgICAgICAgICAgICAgICBsYklQID0gbS5ncm91cCgyKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsYklQID0gImxvY2FsaG9zdCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBQYXR0ZXJuIHAgPSBQYXR0ZXJuLmNvbXBpbGUoSVBBZGRyZXNzUGF0dGVybik7CisgICAgICAgICAgICAgICAgTWF0Y2hlciBtID0gcC5tYXRjaGVyKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgaWYgKG0uZmluZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGxiSVAgPSBtLmdyb3VwKDIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxiSVAgPSAibG9jYWxob3N0IjsKKyAgICAgICAgICAgICAgICB9CiAKLQkJCX0KKyAgICAgICAgICAgIH0KIAotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJSZWdleCBoYXMgdGhyb3duIGFuIGV4Y2VwdGlvbiAiCi0JCQkJCSsgZS5nZXRNZXNzYWdlKCkpOwotCQkJcmV0dXJuICJsb2NhbGhvc3QiOwotCQl9Ci0JCXJldHVybiBsYklQOwotCX0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVnZXggaGFzIHRocm93biBhbiBleGNlcHRpb24gIgorICAgICAgICAgICAgICAgICAgICArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIHJldHVybiAibG9jYWxob3N0IjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGJJUDsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9zZXJ2aWNlX21ldGFkYXRhL3Byb3Zpc2lvbl91c2luZ19zcGVjaWZpZWRfdGVtcGxhdGUvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL3NlcnZpY2VfbWV0YWRhdGEvcHJvdmlzaW9uX3VzaW5nX3NwZWNpZmllZF90ZW1wbGF0ZS9wb20ueG1sCmluZGV4IDMxMWE1OTkuLmU2YjE1ZTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL3NlcnZpY2VfbWV0YWRhdGEvcHJvdmlzaW9uX3VzaW5nX3NwZWNpZmllZF90ZW1wbGF0ZS9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL3NlcnZpY2VfbWV0YWRhdGEvcHJvdmlzaW9uX3VzaW5nX3NwZWNpZmllZF90ZW1wbGF0ZS9wb20ueG1sCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgogICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNraXA+ZmFsc2U8L3NraXA+Ci0JCQkgICAgPGVuYWJsZUFzc2VydGlvbnM+ZmFsc2U8L2VuYWJsZUFzc2VydGlvbnM+CisgICAgICAgICAgICAgICAgPGVuYWJsZUFzc2VydGlvbnM+ZmFsc2U8L2VuYWJsZUFzc2VydGlvbnM+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgogICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL3NlcnZpY2VfbWV0YWRhdGEvcHJvdmlzaW9uX3VzaW5nX3NwZWNpZmllZF90ZW1wbGF0ZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9nbGFzc2Zpc2gtc2VydmljZXMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvc2VydmljZV9tZXRhZGF0YS9wcm92aXNpb25fdXNpbmdfc3BlY2lmaWVkX3RlbXBsYXRlL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dsYXNzZmlzaC1zZXJ2aWNlcy54bWwKaW5kZXggNjM0ZGMxMi4uNjRhZDgxNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvc2VydmljZV9tZXRhZGF0YS9wcm92aXNpb25fdXNpbmdfc3BlY2lmaWVkX3RlbXBsYXRlL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dsYXNzZmlzaC1zZXJ2aWNlcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvc2VydmljZV9tZXRhZGF0YS9wcm92aXNpb25fdXNpbmdfc3BlY2lmaWVkX3RlbXBsYXRlL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dsYXNzZmlzaC1zZXJ2aWNlcy54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGdsYXNzZmlzaC1zZXJ2aWNlcz4KIDxzZXJ2aWNlLWRlc2NyaXB0aW9uIG5hbWU9ImJhc2ljIiBpbml0LXR5cGU9ImxhenkiPgotICA8dGVtcGxhdGUgaWQ9Ik5hdGl2ZSIvPiAKKyAgPHRlbXBsYXRlIGlkPSJOYXRpdmUiLz4KICAgPGNvbmZpZ3VyYXRpb25zPgogICAgIDxjb25maWd1cmF0aW9uIG5hbWU9Im1pbi5jbHVzdGVyc2l6ZSIgdmFsdWU9IjIiLz4KICAgICA8Y29uZmlndXJhdGlvbiBuYW1lPSJtYXguY2x1c3RlcnNpemUiIHZhbHVlPSI0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9zZXJ2aWNlX21ldGFkYXRhL3Byb3Zpc2lvbl91c2luZ19zcGVjaWZpZWRfdGVtcGxhdGUvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9zZXJ2aWNlX21ldGFkYXRhL3Byb3Zpc2lvbl91c2luZ19zcGVjaWZpZWRfdGVtcGxhdGUvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc3VuLXdlYi54bWwKaW5kZXggZTllZWQ0NC4uZTQ1ZTE0NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3BhYXMvc2VydmljZV9tZXRhZGF0YS9wcm92aXNpb25fdXNpbmdfc3BlY2lmaWVkX3RlbXBsYXRlL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3N1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL3NlcnZpY2VfbWV0YWRhdGEvcHJvdmlzaW9uX3VzaW5nX3NwZWNpZmllZF90ZW1wbGF0ZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9zdW4td2ViLnhtbApAQCAtMTcsNyArMTcsNyBAQAogCiAtLT4KIAotPCFET0NUWVBFIHN1bi13ZWItYXBwIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEFwcGxpY2F0aW9uIFNlcnZlciA5LjAgU2VydmxldCAyLjUvL0VOIiAKKzwhRE9DVFlQRSBzdW4td2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOS4wIFNlcnZsZXQgMi41Ly9FTiIKICAgImh0dHA6Ly93d3cuc3VuLmNvbS9zb2Z0d2FyZS9hcHBzZXJ2ZXIvZHRkcy9zdW4td2ViLWFwcF8yXzUtMC5kdGQiPgogPHN1bi13ZWItYXBwIGVycm9yLXVybD0iIj4KIDwvc3VuLXdlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9zZXJ2aWNlX21ldGFkYXRhL3Byb3Zpc2lvbl91c2luZ19zcGVjaWZpZWRfdGVtcGxhdGUvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL3NlcnZpY2VfbWV0YWRhdGEvcHJvdmlzaW9uX3VzaW5nX3NwZWNpZmllZF90ZW1wbGF0ZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmluZGV4IGY1Y2UzNWMuLmYwNmFiYjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL3NlcnZpY2VfbWV0YWRhdGEvcHJvdmlzaW9uX3VzaW5nX3NwZWNpZmllZF90ZW1wbGF0ZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL3NlcnZpY2VfbWV0YWRhdGEvcHJvdmlzaW9uX3VzaW5nX3NwZWNpZmllZF90ZW1wbGF0ZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCkBAIC0xNyw5ICsxNyw5IEBACiAKIC0tPgogCi08d2ViLWFwcCB2ZXJzaW9uPSIyLjUiIAotICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiAKLSAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCis8d2ViLWFwcCB2ZXJzaW9uPSIyLjUiCisgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPkJhc2ljUGFhU1NlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL3NlcnZpY2VfbWV0YWRhdGEvcHJvdmlzaW9uX3VzaW5nX3NwZWNpZmllZF90ZW1wbGF0ZS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9iYXNpYy9CYXNpY1BhYVNTZXJ2aWNlTWV0YWRhdGFUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9zZXJ2aWNlX21ldGFkYXRhL3Byb3Zpc2lvbl91c2luZ19zcGVjaWZpZWRfdGVtcGxhdGUvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3Rlc3RzL3BhYXMvYmFzaWMvQmFzaWNQYWFTU2VydmljZU1ldGFkYXRhVGVzdC5qYXZhCmluZGV4IDAxZmNhYzYuLjJlZGFjYmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL3NlcnZpY2VfbWV0YWRhdGEvcHJvdmlzaW9uX3VzaW5nX3NwZWNpZmllZF90ZW1wbGF0ZS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvdGVzdHMvcGFhcy9iYXNpYy9CYXNpY1BhYVNTZXJ2aWNlTWV0YWRhdGFUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3BhYXMvc2VydmljZV9tZXRhZGF0YS9wcm92aXNpb25fdXNpbmdfc3BlY2lmaWVkX3RlbXBsYXRlL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC90ZXN0cy9wYWFzL2Jhc2ljL0Jhc2ljUGFhU1NlcnZpY2VNZXRhZGF0YVRlc3QuamF2YQpAQCAtNDAsMTQxICs0MCwxNDEgQEAKIAogcHVibGljIGNsYXNzIEJhc2ljUGFhU1NlcnZpY2VNZXRhZGF0YVRlc3QgewogCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLQkJLy8gQm9vdHN0cmFwIEdsYXNzRmlzaCBEQVMgaW4gZW1iZWRkZWQgbW9kZS4KLQkJR2xhc3NGaXNoIGdsYXNzZmlzaCA9IGJvb3RzdHJhcCgpOworICAgICAgICAvLyBCb290c3RyYXAgR2xhc3NGaXNoIERBUyBpbiBlbWJlZGRlZCBtb2RlLgorICAgICAgICBHbGFzc0Zpc2ggZ2xhc3NmaXNoID0gYm9vdHN0cmFwKCk7CiAKLQkJLy8gRGVwbG95IHRoZSBQYWFTIGFwcCBhbmQgdmVyaWZ5IGl0LgotCQlydW5UZXN0cyhnbGFzc2Zpc2gpOworICAgICAgICAvLyBEZXBsb3kgdGhlIFBhYVMgYXBwIGFuZCB2ZXJpZnkgaXQuCisgICAgICAgIHJ1blRlc3RzKGdsYXNzZmlzaCk7CiAKLQkJLy8gUmUtZGVwbG95IHRoZSBQYWFTIGFwcCBhbmQgdmVyaWZ5IGl0LgotCQlTdHJpbmcgdGVzdFNjZW5hcmlvcyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgidGVzdC5zY2VuYXJpb3MiKTsKLQkJaWYgKHRlc3RTY2VuYXJpb3MgPT0gbnVsbAotCQkJCXx8ICJhbGwiLmNvbnRhaW5zKHRlc3RTY2VuYXJpb3MudG9Mb3dlckNhc2UoKSkpIHsKLQkJCXJ1blRlc3RzKGdsYXNzZmlzaCk7Ci0JCX0KKyAgICAgICAgLy8gUmUtZGVwbG95IHRoZSBQYWFTIGFwcCBhbmQgdmVyaWZ5IGl0LgorICAgICAgICBTdHJpbmcgdGVzdFNjZW5hcmlvcyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgidGVzdC5zY2VuYXJpb3MiKTsKKyAgICAgICAgaWYgKHRlc3RTY2VuYXJpb3MgPT0gbnVsbAorICAgICAgICAgICAgICAgIHx8ICJhbGwiLmNvbnRhaW5zKHRlc3RTY2VuYXJpb3MudG9Mb3dlckNhc2UoKSkpIHsKKyAgICAgICAgICAgIHJ1blRlc3RzKGdsYXNzZmlzaCk7CisgICAgICAgIH0KIAotCQkvLyA1LiBTdG9wIHRoZSBHbGFzc0Zpc2ggREFTCi0JCWdsYXNzZmlzaC5kaXNwb3NlKCk7Ci0JfQorICAgICAgICAvLyA1LiBTdG9wIHRoZSBHbGFzc0Zpc2ggREFTCisgICAgICAgIGdsYXNzZmlzaC5kaXNwb3NlKCk7CisgICAgfQogCi0JcHJpdmF0ZSB2b2lkIGdldChTdHJpbmcgdXJsU3RyLCBTdHJpbmcgcmVzdWx0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJVVJMIHVybCA9IG5ldyBVUkwodXJsU3RyKTsKLQkJVVJMQ29ubmVjdGlvbiB5YyA9IHVybC5vcGVuQ29ubmVjdGlvbigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuVVJMQ29ubmVjdGlvbiBbIiArIHljICsgIl0gOiAiKTsKLQkJQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKAotCQkJCXljLmdldElucHV0U3RyZWFtKCkpKTsKLQkJU3RyaW5nIGxpbmUgPSBudWxsOwotCQlib29sZWFuIGZvdW5kID0gZmFsc2U7Ci0JCXdoaWxlICgobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKLQkJCWlmIChsaW5lLmluZGV4T2YocmVzdWx0KSAhPSAtMSkgewotCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQlBc3NlcnQuYXNzZXJ0VHJ1ZShmb3VuZCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiXG4qKioqKiBTVUNDRVNTICoqKiogRm91bmQgWyIgKyByZXN1bHQKLQkJCQkrICJdIGluIHRoZSByZXNwb25zZS4qKioqKlxuIik7Ci0JfQorICAgIHByaXZhdGUgdm9pZCBnZXQoU3RyaW5nIHVybFN0ciwgU3RyaW5nIHJlc3VsdCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKHVybFN0cik7CisgICAgICAgIFVSTENvbm5lY3Rpb24geWMgPSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblVSTENvbm5lY3Rpb24gWyIgKyB5YyArICJdIDogIik7CisgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcigKKyAgICAgICAgICAgICAgICB5Yy5nZXRJbnB1dFN0cmVhbSgpKSk7CisgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKKyAgICAgICAgYm9vbGVhbiBmb3VuZCA9IGZhbHNlOworICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7CisgICAgICAgICAgICBpZiAobGluZS5pbmRleE9mKHJlc3VsdCkgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoZm91bmQpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuKioqKiogU1VDQ0VTUyAqKioqIEZvdW5kIFsiICsgcmVzdWx0CisgICAgICAgICAgICAgICAgKyAiXSBpbiB0aGUgcmVzcG9uc2UuKioqKipcbiIpOworICAgIH0KIAotCXByaXZhdGUgdm9pZCBydW5UZXN0cyhHbGFzc0Zpc2ggZ2xhc3NmaXNoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gMi4gRGVwbG95IHRoZSBQYWFTIGFwcGxpY2F0aW9uLgotCQlGaWxlIGFyY2hpdmUgPSBuZXcgRmlsZShTeXN0ZW0uZ2V0UHJvcGVydHkoImJhc2VkaXIiKQotCQkJCSsgIi90YXJnZXQvYmFzaWNfcGFhc19zYW1wbGUyLndhciIpOyAvLyBUT0RPIDo6IHVzZSBtdm4gYXBpcyB0bwotCQkJCQkJCQkJCQkJCQkvLyBnZXQgdGhlIGFyY2hpdmUKLQkJCQkJCQkJCQkJCQkJLy8gbG9jYXRpb24uCi0JCUFzc2VydC5hc3NlcnRUcnVlKGFyY2hpdmUuZXhpc3RzKCkpOworICAgIHByaXZhdGUgdm9pZCBydW5UZXN0cyhHbGFzc0Zpc2ggZ2xhc3NmaXNoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgLy8gMi4gRGVwbG95IHRoZSBQYWFTIGFwcGxpY2F0aW9uLgorICAgICAgICBGaWxlIGFyY2hpdmUgPSBuZXcgRmlsZShTeXN0ZW0uZ2V0UHJvcGVydHkoImJhc2VkaXIiKQorICAgICAgICAgICAgICAgICsgIi90YXJnZXQvYmFzaWNfcGFhc19zYW1wbGUyLndhciIpOyAvLyBUT0RPIDo6IHVzZSBtdm4gYXBpcyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIGFyY2hpdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9jYXRpb24uCisgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGFyY2hpdmUuZXhpc3RzKCkpOwogCi0JCURlcGxveWVyIGRlcGxveWVyID0gZ2xhc3NmaXNoLmdldERlcGxveWVyKCk7Ci0JCVN0cmluZyBhcHBOYW1lID0gZGVwbG95ZXIuZGVwbG95KGFyY2hpdmUpOworICAgICAgICBEZXBsb3llciBkZXBsb3llciA9IGdsYXNzZmlzaC5nZXREZXBsb3llcigpOworICAgICAgICBTdHJpbmcgYXBwTmFtZSA9IGRlcGxveWVyLmRlcGxveShhcmNoaXZlKTsKIAotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkRlcGxveWVkIFsiICsgYXBwTmFtZSArICJdIik7Ci0JCUFzc2VydC5hc3NlcnROb3ROdWxsKGFwcE5hbWUpOworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkRlcGxveWVkIFsiICsgYXBwTmFtZSArICJdIik7CisgICAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKGFwcE5hbWUpOwogCi0JCUNvbW1hbmRSdW5uZXIgY29tbWFuZFJ1bm5lciA9IGdsYXNzZmlzaC5nZXRDb21tYW5kUnVubmVyKCk7Ci0JCUNvbW1hbmRSZXN1bHQgcmVzdWx0ID0gY29tbWFuZFJ1bm5lci5ydW4oImxpc3Qtc2VydmljZXMiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJcbmxpc3Qtc2VydmljZXMgY29tbWFuZCBvdXRwdXQgWyAiCi0JCQkJKyByZXN1bHQuZ2V0T3V0cHV0KCkgKyAiXSIpOworICAgICAgICBDb21tYW5kUnVubmVyIGNvbW1hbmRSdW5uZXIgPSBnbGFzc2Zpc2guZ2V0Q29tbWFuZFJ1bm5lcigpOworICAgICAgICBDb21tYW5kUmVzdWx0IHJlc3VsdCA9IGNvbW1hbmRSdW5uZXIucnVuKCJsaXN0LXNlcnZpY2VzIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5saXN0LXNlcnZpY2VzIGNvbW1hbmQgb3V0cHV0IFsgIgorICAgICAgICAgICAgICAgICsgcmVzdWx0LmdldE91dHB1dCgpICsgIl0iKTsKIAotCQkvLyAzLiBBY2Nlc3MgdGhlIGFwcCB0byBtYWtlIHN1cmUgUGFhUyBhcHAgaXMgY29ycmVjdGx5IHByb3Zpc2lvbmVkLgotCQlTdHJpbmcgSFRUUF9QT1JUID0gKFN5c3RlbS5nZXRQcm9wZXJ0eSgiaHR0cC5wb3J0IikgIT0gbnVsbCkgPyBTeXN0ZW0KLQkJCQkuZ2V0UHJvcGVydHkoImh0dHAucG9ydCIpIDogIjI4MDgwIjsKKyAgICAgICAgLy8gMy4gQWNjZXNzIHRoZSBhcHAgdG8gbWFrZSBzdXJlIFBhYVMgYXBwIGlzIGNvcnJlY3RseSBwcm92aXNpb25lZC4KKyAgICAgICAgU3RyaW5nIEhUVFBfUE9SVCA9IChTeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucG9ydCIpICE9IG51bGwpID8gU3lzdGVtCisgICAgICAgICAgICAgICAgLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKSA6ICIyODA4MCI7CiAKLQkJU3RyaW5nIGluc3RhbmNlSVAgPSBnZXRMQklQQWRkcmVzcyhnbGFzc2Zpc2gpOwotCQlnZXQoImh0dHA6Ly8iICsgaW5zdGFuY2VJUCArICI6IiArIEhUVFBfUE9SVAotCQkJCSsgIi9iYXNpY19wYWFzX3NhbXBsZTIvQmFzaWNQYWFTU2VydmxldCIsCi0JCQkJIlJlcXVlc3QgaGVhZGVycyBmcm9tIHRoZSByZXF1ZXN0OiIpOworICAgICAgICBTdHJpbmcgaW5zdGFuY2VJUCA9IGdldExCSVBBZGRyZXNzKGdsYXNzZmlzaCk7CisgICAgICAgIGdldCgiaHR0cDovLyIgKyBpbnN0YW5jZUlQICsgIjoiICsgSFRUUF9QT1JUCisgICAgICAgICAgICAgICAgKyAiL2Jhc2ljX3BhYXNfc2FtcGxlMi9CYXNpY1BhYVNTZXJ2bGV0IiwKKyAgICAgICAgICAgICAgICAiUmVxdWVzdCBoZWFkZXJzIGZyb20gdGhlIHJlcXVlc3Q6Iik7CiAKLQkJLy8gNC4gVW5kZXBsb3kgdGhlIFBhYVMgYXBwbGljYXRpb24gLiBUT0RPIDo6IHVzZSBjbG91ZC11bmRlcGxveT8/Ci0JCWRlcGxveWVyLnVuZGVwbG95KGFwcE5hbWUpOwotCQlTeXN0ZW0uZXJyLnByaW50bG4oIlVuZGVwbG95ZWQgWyIgKyBhcHBOYW1lICsgIl0iKTsKLQkJdHJ5IHsKLQkJCWJvb2xlYW4gdW5kZXBsb3lDbGVhbiA9IGZhbHNlOwotCQkJQ29tbWFuZFJlc3VsdCBjb21tYW5kUmVzdWx0ID0gZ2xhc3NmaXNoLmdldENvbW1hbmRSdW5uZXIoKS5ydW4oCi0JCQkJCSJsaXN0LXNlcnZpY2VzIik7Ci0JCQlpZiAoY29tbWFuZFJlc3VsdC5nZXRPdXRwdXQoKS5jb250YWlucygiTm90aGluZyB0byBsaXN0LiIpKSB7Ci0JCQkJdW5kZXBsb3lDbGVhbiA9IHRydWU7Ci0JCQl9Ci0JCQlBc3NlcnQuYXNzZXJ0VHJ1ZSh1bmRlcGxveUNsZWFuKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5lcnIucHJpbnRsbigiQ291bGRuJ3QgdmFyaWZ5IHdoZXRoZXIgdW5kZXBsb3kgc3VjY2VlZGVkIik7Ci0JCX0KLQl9CisgICAgICAgIC8vIDQuIFVuZGVwbG95IHRoZSBQYWFTIGFwcGxpY2F0aW9uIC4gVE9ETyA6OiB1c2UgY2xvdWQtdW5kZXBsb3k/PworICAgICAgICBkZXBsb3llci51bmRlcGxveShhcHBOYW1lKTsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVbmRlcGxveWVkIFsiICsgYXBwTmFtZSArICJdIik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBib29sZWFuIHVuZGVwbG95Q2xlYW4gPSBmYWxzZTsKKyAgICAgICAgICAgIENvbW1hbmRSZXN1bHQgY29tbWFuZFJlc3VsdCA9IGdsYXNzZmlzaC5nZXRDb21tYW5kUnVubmVyKCkucnVuKAorICAgICAgICAgICAgICAgICAgICAibGlzdC1zZXJ2aWNlcyIpOworICAgICAgICAgICAgaWYgKGNvbW1hbmRSZXN1bHQuZ2V0T3V0cHV0KCkuY29udGFpbnMoIk5vdGhpbmcgdG8gbGlzdC4iKSkgeworICAgICAgICAgICAgICAgIHVuZGVwbG95Q2xlYW4gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUodW5kZXBsb3lDbGVhbik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNvdWxkbid0IHZhcmlmeSB3aGV0aGVyIHVuZGVwbG95IHN1Y2NlZWRlZCIpOworICAgICAgICB9CisgICAgfQogCi0JcHJpdmF0ZSBHbGFzc0Zpc2ggYm9vdHN0cmFwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUdsYXNzRmlzaFByb3BlcnRpZXMgZ2xhc3NGaXNoUHJvcGVydGllcyA9IG5ldyBHbGFzc0Zpc2hQcm9wZXJ0aWVzKCk7Ci0JCWdsYXNzRmlzaFByb3BlcnRpZXMuc2V0SW5zdGFuY2VSb290KFN5c3RlbS5nZXRlbnYoIlMxQVNfSE9NRSIpCi0JCQkJKyAiL2RvbWFpbnMvZG9tYWluMSIpOwotCQlnbGFzc0Zpc2hQcm9wZXJ0aWVzLnNldENvbmZpZ0ZpbGVSZWFkT25seShmYWxzZSk7Ci0JCUdsYXNzRmlzaCBnbGFzc2Zpc2ggPSBHbGFzc0Zpc2hSdW50aW1lLmJvb3RzdHJhcCgpLm5ld0dsYXNzRmlzaCgKLQkJCQlnbGFzc0Zpc2hQcm9wZXJ0aWVzKTsKLQkJUHJpbnRTdHJlYW0gc3lzb3V0ID0gU3lzdGVtLm91dDsKLQkJZ2xhc3NmaXNoLnN0YXJ0KCk7Ci0JCVN5c3RlbS5zZXRPdXQoc3lzb3V0KTsKLQkJcmV0dXJuIGdsYXNzZmlzaDsKLQl9CisgICAgcHJpdmF0ZSBHbGFzc0Zpc2ggYm9vdHN0cmFwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIEdsYXNzRmlzaFByb3BlcnRpZXMgZ2xhc3NGaXNoUHJvcGVydGllcyA9IG5ldyBHbGFzc0Zpc2hQcm9wZXJ0aWVzKCk7CisgICAgICAgIGdsYXNzRmlzaFByb3BlcnRpZXMuc2V0SW5zdGFuY2VSb290KFN5c3RlbS5nZXRlbnYoIlMxQVNfSE9NRSIpCisgICAgICAgICAgICAgICAgKyAiL2RvbWFpbnMvZG9tYWluMSIpOworICAgICAgICBnbGFzc0Zpc2hQcm9wZXJ0aWVzLnNldENvbmZpZ0ZpbGVSZWFkT25seShmYWxzZSk7CisgICAgICAgIEdsYXNzRmlzaCBnbGFzc2Zpc2ggPSBHbGFzc0Zpc2hSdW50aW1lLmJvb3RzdHJhcCgpLm5ld0dsYXNzRmlzaCgKKyAgICAgICAgICAgICAgICBnbGFzc0Zpc2hQcm9wZXJ0aWVzKTsKKyAgICAgICAgUHJpbnRTdHJlYW0gc3lzb3V0ID0gU3lzdGVtLm91dDsKKyAgICAgICAgZ2xhc3NmaXNoLnN0YXJ0KCk7CisgICAgICAgIFN5c3RlbS5zZXRPdXQoc3lzb3V0KTsKKyAgICAgICAgcmV0dXJuIGdsYXNzZmlzaDsKKyAgICB9CiAKLQlwcml2YXRlIFN0cmluZyBnZXRMQklQQWRkcmVzcyhHbGFzc0Zpc2ggZ2xhc3NmaXNoKSB7Ci0JCVN0cmluZyBsYklQID0gbnVsbDsKLQkJU3RyaW5nIElQQWRkcmVzc1BhdHRlcm4gPSAiSVAtQUREUkVTU1xccypcbiooLiopXFxzKlxuKChbMDFdP1xcZCp8MlswLTRdXFxkfDI1WzAtNV0pXFwuIgotCQkJCSsgIihbMDFdP1xcZFxcZD98MlswLTRdXFxkfDI1WzAtNV0pXFwuIgotCQkJCSsgIihbMDFdP1xcZFxcZD98MlswLTRdXFxkfDI1WzAtNV0pXFwuIgotCQkJCSsgIihbMC05XT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKSkiOwotCQl0cnkgewotCQkJQ29tbWFuZFJ1bm5lciBjb21tYW5kUnVubmVyID0gZ2xhc3NmaXNoLmdldENvbW1hbmRSdW5uZXIoKTsKLQkJCVN0cmluZyByZXN1bHQgPSBjb21tYW5kUnVubmVyCi0JCQkJCS5ydW4oImxpc3Qtc2VydmljZXMiLCAiLS10eXBlIiwgIkxCIiwKLQkJCQkJCQkiLS1vdXRwdXQiLCAiSVAtQUREUkVTUyIpLmdldE91dHB1dCgpLnRvU3RyaW5nKCk7Ci0JCQlpZiAocmVzdWx0LmNvbnRhaW5zKCJOb3RoaW5nIHRvIGxpc3QuIikpIHsKLQkJCQlyZXN1bHQgPSBjb21tYW5kUnVubmVyCi0JCQkJCQkucnVuKCJsaXN0LXNlcnZpY2VzIiwgIi0tdHlwZSIsICJKYXZhRUUiLCAiLS1vdXRwdXQiLAotCQkJCQkJCQkiSVAtQUREUkVTUyIpLmdldE91dHB1dCgpLnRvU3RyaW5nKCk7CisgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0TEJJUEFkZHJlc3MoR2xhc3NGaXNoIGdsYXNzZmlzaCkgeworICAgICAgICBTdHJpbmcgbGJJUCA9IG51bGw7CisgICAgICAgIFN0cmluZyBJUEFkZHJlc3NQYXR0ZXJuID0gIklQLUFERFJFU1NcXHMqXG4qKC4qKVxccypcbigoWzAxXT9cXGQqfDJbMC00XVxcZHwyNVswLTVdKVxcLiIKKyAgICAgICAgICAgICAgICArICIoWzAxXT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKVxcLiIKKyAgICAgICAgICAgICAgICArICIoWzAxXT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKVxcLiIKKyAgICAgICAgICAgICAgICArICIoWzAtOV0/XFxkXFxkP3wyWzAtNF1cXGR8MjVbMC01XSkpIjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENvbW1hbmRSdW5uZXIgY29tbWFuZFJ1bm5lciA9IGdsYXNzZmlzaC5nZXRDb21tYW5kUnVubmVyKCk7CisgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gY29tbWFuZFJ1bm5lcgorICAgICAgICAgICAgICAgICAgICAucnVuKCJsaXN0LXNlcnZpY2VzIiwgIi0tdHlwZSIsICJMQiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tb3V0cHV0IiwgIklQLUFERFJFU1MiKS5nZXRPdXRwdXQoKS50b1N0cmluZygpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5jb250YWlucygiTm90aGluZyB0byBsaXN0LiIpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tbWFuZFJ1bm5lcgorICAgICAgICAgICAgICAgICAgICAgICAgLnJ1bigibGlzdC1zZXJ2aWNlcyIsICItLXR5cGUiLCAiSmF2YUVFIiwgIi0tb3V0cHV0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklQLUFERFJFU1MiKS5nZXRPdXRwdXQoKS50b1N0cmluZygpOwogCi0JCQkJUGF0dGVybiBwID0gUGF0dGVybi5jb21waWxlKElQQWRkcmVzc1BhdHRlcm4pOwotCQkJCU1hdGNoZXIgbSA9IHAubWF0Y2hlcihyZXN1bHQpOwotCQkJCWlmIChtLmZpbmQoKSkgewotCQkJCQlsYklQID0gbS5ncm91cCgyKTsKLQkJCQl9IGVsc2UgewotCQkJCQlsYklQID0gImxvY2FsaG9zdCI7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlQYXR0ZXJuIHAgPSBQYXR0ZXJuLmNvbXBpbGUoSVBBZGRyZXNzUGF0dGVybik7Ci0JCQkJTWF0Y2hlciBtID0gcC5tYXRjaGVyKHJlc3VsdCk7Ci0JCQkJaWYgKG0uZmluZCgpKSB7Ci0JCQkJCWxiSVAgPSBtLmdyb3VwKDIpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWxiSVAgPSAibG9jYWxob3N0IjsKLQkJCQl9CisgICAgICAgICAgICAgICAgUGF0dGVybiBwID0gUGF0dGVybi5jb21waWxlKElQQWRkcmVzc1BhdHRlcm4pOworICAgICAgICAgICAgICAgIE1hdGNoZXIgbSA9IHAubWF0Y2hlcihyZXN1bHQpOworICAgICAgICAgICAgICAgIGlmIChtLmZpbmQoKSkgeworICAgICAgICAgICAgICAgICAgICBsYklQID0gbS5ncm91cCgyKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsYklQID0gImxvY2FsaG9zdCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBQYXR0ZXJuIHAgPSBQYXR0ZXJuLmNvbXBpbGUoSVBBZGRyZXNzUGF0dGVybik7CisgICAgICAgICAgICAgICAgTWF0Y2hlciBtID0gcC5tYXRjaGVyKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgaWYgKG0uZmluZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGxiSVAgPSBtLmdyb3VwKDIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxiSVAgPSAibG9jYWxob3N0IjsKKyAgICAgICAgICAgICAgICB9CiAKLQkJCX0KKyAgICAgICAgICAgIH0KIAotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJSZWdleCBoYXMgdGhyb3duIGFuIGV4Y2VwdGlvbiAiCi0JCQkJCSsgZS5nZXRNZXNzYWdlKCkpOwotCQkJcmV0dXJuICJsb2NhbGhvc3QiOwotCQl9Ci0JCXJldHVybiBsYklQOwotCX0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVnZXggaGFzIHRocm93biBhbiBleGNlcHRpb24gIgorICAgICAgICAgICAgICAgICAgICArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIHJldHVybiAibG9jYWxob3N0IjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGJJUDsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcGFhcy9zZXR1cC5zaCBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL3NldHVwLnNoCmluZGV4IDAxZGI3NTQuLjhkNmM0YTYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wYWFzL3NldHVwLnNoCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wYWFzL3NldHVwLnNoCkBAIC0xMjEsNyArMTIxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgICAgICAgKikgZXJyICJJZ25vcmluZyB1bmtub3duIHNlcnZpY2UgJHMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgZXNhYyAKKyAgICAgICAgZXNhYwogICAgIGRvbmUKICAgICBJRlM9JElGU19UTVAKIApAQCAtMTQyLDcgKzE0Miw3IEBACiAgICAgWyAteiAiJFNVQk5FVCIgXSAmJiBlY2hvICJQbGVhc2Ugc3BlY2lmeSBzdWJuZXQgdXNpbmcgLW4gPHN1Ym5ldD4gb3B0aW9uLiIgJiYgZXhpdCAxOwogCiAgICAgIyBQYXJzZSB0aGUgb2xkIHN0eWxlIGNvbm5lY3Rpb24gc3RyaW5nIGludG8gdmFyaWFibGVzIHdlIGNhbiB1c2Ugd2l0aCB0aGUKLSAgICAjIG5ldyBjb21tYW5kcy4gQXQgc29tZSBwb2ludCB3ZSBzaG91bGQgcHJvYmFibHkgYWxsb3cgdGhlc2UgdG8gYmUgCisgICAgIyBuZXcgY29tbWFuZHMuIEF0IHNvbWUgcG9pbnQgd2Ugc2hvdWxkIHByb2JhYmx5IGFsbG93IHRoZXNlIHRvIGJlCiAgICAgIyBzcGVjaWZpZWQgdmlhIENMSSBvcHRpb25zLCBidXQgZm9yIG5vdyB0aGlzIGtlZXBzIHVzIGNvbXBhdGlibGUgd2l0aAogICAgICMgY3VycmVudCB1c2VzIG9mIHRoaXMgc2NyaXB0LgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9wb20ueG1sCmluZGV4IGI4ZGNlY2UuLjFiZmYyZTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9wb20ueG1sCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5tYWluLnRlc3RzPC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPnRlc3RzPC9hcnRpZmFjdElkPgogICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+Ci0gICAgPG5hbWU+R2xhc3NGaXNoIFRlc3RzIHJlbGF0ZWQgbW9kdWxlczwvbmFtZT4gIAorICAgIDxuYW1lPkdsYXNzRmlzaCBUZXN0cyByZWxhdGVkIG1vZHVsZXM8L25hbWU+CiAgICAgPG1vZHVsZXM+CiAgICAgICAgIDwhLS0gbW9kdWxlPnF1aWNrbG9vazwvbW9kdWxlIC0tPgogICAgIDwvbW9kdWxlcz4KQEAgLTQ5LDE1ICs0OSwxNSBAQAogICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgICAgICAgIDwvcGx1Z2luPgogICAgICAgICA8L3BsdWdpbnM+Ci0JPHBsdWdpbk1hbmFnZW1lbnQ+Ci0JICAgIDxwbHVnaW5zPgotCQk8cGx1Z2luPgotCQkgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+Ci0JCSAgICA8YXJ0aWZhY3RJZD5maW5kYnVncy1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+Ci0JCSAgICA8Y29uZmlndXJhdGlvbj4KLQkJCTxza2lwPnRydWU8L3NraXA+Ci0JCSAgICA8L2NvbmZpZ3VyYXRpb24+Ci0JCTwvcGx1Z2luPgorICAgIDxwbHVnaW5NYW5hZ2VtZW50PgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy5tb2pvPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZmluZGJ1Z3MtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8c2tpcD50cnVlPC9za2lwPgorICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICA8L3BsdWdpbj4KICAgICAgICAgPHBsdWdpbj4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guY29weXJpZ2h0PC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2xhc3NmaXNoLWNvcHlyaWdodC1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CkBAIC0xMDUsMTcgKzEwNSwxNyBAQAogICAgICAgICAgICAgICAgICAgICA8cGF0dGVybj5hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9yZXNvdXJjZXMvc3NoL2lkZW50aXR5PC9wYXR0ZXJuPgogICAgICAgICAgICAgICAgICAgICA8cGF0dGVybj5hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dlYi1tdXR1YWwtc3NsL2NlcnRpZmljYXRlL3Rlc3RjZXJ0MS5wMTI8L3BhdHRlcm4+CiAgICAgICAgICAgICAgICAgICAgIDxwYXR0ZXJuPmFwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplckFkZFJlc3RyaWN0ZWRTZXJ2bGV0Q29udGV4dExpc3RlbmVyL2Rlc2NyaXB0b3Ivc2VydmljZXMvamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRDb250YWluZXJJbml0aWFsaXplcjwvcGF0dGVybj4KLSAgICAgICAgICAgICAgICAgICAgPHBhdHRlcm4+YXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL0pkYmNDb21tb24ucHJvcGVydGllczwvcGF0dGVybj4gCi0JCSAgICA8cGF0dGVybj5hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90ZXN0ZGI8L3BhdHRlcm4+Ci0JCSAgICA8cGF0dGVybj5hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjLyR7YWRtaW4ucGFzc3dvcmQuZmlsZX08L3BhdHRlcm4+Ci0JCSAgICA8cGF0dGVybj5hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvJHthZG1pbi5wYXNzd29yZC5maWxlfTwvcGF0dGVybj4KLQkJICAgIDxwYXR0ZXJuPmFwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9hcHAvc3JjLyR7YWRtaW4ucGFzc3dvcmQuZmlsZX08L3BhdHRlcm4+Ci0JCSAgICA8cGF0dGVybj5hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvYXBwLyR7YWRtaW4ucGFzc3dvcmQuZmlsZX08L3BhdHRlcm4+Ci0gICAgICAgICAgICAgICAgPC9leGNsdWRlPiAKKyAgICAgICAgICAgICAgICAgICAgPHBhdHRlcm4+YXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL0pkYmNDb21tb24ucHJvcGVydGllczwvcGF0dGVybj4KKyAgICAgICAgICAgIDxwYXR0ZXJuPmFwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3Rlc3RkYjwvcGF0dGVybj4KKyAgICAgICAgICAgIDxwYXR0ZXJuPmFwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvJHthZG1pbi5wYXNzd29yZC5maWxlfTwvcGF0dGVybj4KKyAgICAgICAgICAgIDxwYXR0ZXJuPmFwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS8ke2FkbWluLnBhc3N3b3JkLmZpbGV9PC9wYXR0ZXJuPgorICAgICAgICAgICAgPHBhdHRlcm4+YXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2FwcC9zcmMvJHthZG1pbi5wYXNzd29yZC5maWxlfTwvcGF0dGVybj4KKyAgICAgICAgICAgIDxwYXR0ZXJuPmFwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9hcHAvJHthZG1pbi5wYXNzd29yZC5maWxlfTwvcGF0dGVybj4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1ZGU+CiAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CiAgICAgICAgIDwvcGx1Z2luPgotCSAgICA8L3BsdWdpbnM+Ci0JPC9wbHVnaW5NYW5hZ2VtZW50PgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9wbHVnaW5NYW5hZ2VtZW50PgogICAgIDwvYnVpbGQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYWRtaW4vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hZG1pbi9idWlsZC54bWwKaW5kZXggMWZmMDFkMS4uOThhZjEyZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hZG1pbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hZG1pbi9idWlsZC54bWwKQEAgLTIwLDE4ICsyMCwxOCBAQAogPHByb2plY3QgbmFtZT0iYWRtaW4iIGRlZmF1bHQ9ImRlZmF1bHQiIGJhc2VkaXI9Ii4iPgogICAgIDxwcm9wZXJ0eSBmaWxlPSJidWlsZC5wcm9wZXJ0aWVzIi8+CiAgICAgPHByb3BlcnR5IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS1jb25maWcucHJvcGVydGllcyIvPgotICAgIAorCiAgICAgPGRlc2NyaXB0aW9uPkJ1aWxkcywgdGVzdHMsIGFuZCBydW5zIHRoZSBwcm9qZWN0IEhlbGxvIEpTUCBBcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+Ci0gICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPiAgIAorICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS10YXJnZXRzLnhtbCIvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLHJ1bnRlc3QiLz4KICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS10ZXN0cyI+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+IAorCisgICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudGVzdC1pbXBsIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdG5nLnRlc3QubmFtZSIgdmFsdWU9IiR7dGVzdG5nLnRlc3QubmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hZG1pbi9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hZG1pbi9wb20ueG1sCmluZGV4IGNiNmNiYTMuLjMyZDNlN2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYWRtaW4vcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FkbWluL3BvbS54bWwKQEAgLTMxLDcgKzMxLDcgQEAKICAgICA8L3BhcmVudD4KICAgICA8ZGVzY3JpcHRpb24+UnVucyB0aGUgdGVzdHMgb24gYWRtaW4vYXNhZG1pbiBjb2RlPC9kZXNjcmlwdGlvbj4KICAgICA8YnVpbGQ+Ci0gICAgICA8dGVzdFNvdXJjZURpcmVjdG9yeT5zcmM8L3Rlc3RTb3VyY2VEaXJlY3Rvcnk+ICAKKyAgICAgIDx0ZXN0U291cmNlRGlyZWN0b3J5PnNyYzwvdGVzdFNvdXJjZURpcmVjdG9yeT4KICAgICAgIDxwbHVnaW5zPgogICAgICAgICA8cGx1Z2luPgogICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNvbXBpbGVyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYWRtaW4vc3JjL3Rlc3QvYWRtaW4vQmFzZUFzYWRtaW5UZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FkbWluL3NyYy90ZXN0L2FkbWluL0Jhc2VBc2FkbWluVGVzdC5qYXZhCmluZGV4IDlhNGE2MDAuLmViZDBmNDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYWRtaW4vc3JjL3Rlc3QvYWRtaW4vQmFzZUFzYWRtaW5UZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hZG1pbi9zcmMvdGVzdC9hZG1pbi9CYXNlQXNhZG1pblRlc3QuamF2YQpAQCAtMzAsMTEgKzMwLDExIEBACiAgKiBAc2luY2UgR2xhc3NGaXNoIHYzIFByZWx1ZGUKICAqLwogcHVibGljIGNsYXNzIEJhc2VBc2FkbWluVGVzdCB7Ci0gICAgCisKICAgICBTdHJpbmcgYWRtaW5Vcmw7CiAgICAgU3RyaW5nIGFkbWluVXNlcjsKICAgICBTdHJpbmcgYWRtaW5QYXNzd29yZDsKLSAgICAKKwogICAgIEBCZWZvcmVDbGFzcwogICAgIEBQYXJhbWV0ZXJzKHsiYWRtaW4udXJsIiwgImFkbWluLnVzZXIiLCAiYWRtaW4ucGFzc3dvcmQifSkKICAgICB2b2lkIHNldFVwRW52aXJvbm1lbnQoU3RyaW5nIHVybCwgU3RyaW5nIGFkbWluVXNlciwgU3RyaW5nIGFkbWluUGFzc3dvcmQpIHsKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgdGhpcy5hZG1pblVzZXIgICAgID0gYWRtaW5Vc2VyOwogICAgICAgICB0aGlzLmFkbWluUGFzc3dvcmQgPSBhZG1pblBhc3N3b3JkOwogICAgIH0KLSAgICAKKwogICAgIHByb3RlY3RlZCBNYW5pZmVzdCBpbnZva2VVUkxBbmRHZXRNYW5pZmVzdChTdHJpbmcgdXJscykgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwodXJscyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FkbWluL3NyYy90ZXN0L2FkbWluL0pkYmNDb25uZWN0aW9uUG9vbFRlc3RzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FkbWluL3NyYy90ZXN0L2FkbWluL0pkYmNDb25uZWN0aW9uUG9vbFRlc3RzLmphdmEKaW5kZXggMDM3YjdkNy4uZGFiMjVhZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hZG1pbi9zcmMvdGVzdC9hZG1pbi9KZGJjQ29ubmVjdGlvblBvb2xUZXN0cy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYWRtaW4vc3JjL3Rlc3QvYWRtaW4vSmRiY0Nvbm5lY3Rpb25Qb29sVGVzdHMuamF2YQpAQCAtMzUsNyArMzUsNyBAQAogICAgIHByaXZhdGUgRmlsZSBwYXRoOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBKQVZBREJfUE9PTCA9ICJqYXZhZGJfcG9vbCI7IC8vc2FtZSBhcyBpbiByZXNvdXJjZXMueG1sCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFERF9SRVMgICAgID0gImFkZC1yZXNvdXJjZXMiOwotICAgIAorCiAgICAgQFBhcmFtZXRlcnMoeyJyZXNvdXJjZXMueG1sLnJlbGF0aXZlLnBhdGgifSkKICAgICBAQmVmb3JlQ2xhc3MKICAgICBwdWJsaWMgdm9pZCBzZXR1cEVudmlyb25tZW50KFN0cmluZyByZWxhdGl2ZSkgewpAQCAtNzAsOSArNzAsOSBAQAogICAgICAgICBTdHJpbmcgY2hpbGRyZW4gPSBHZW5lcmFsVXRpbHMuZ2V0VmFsdWVGb3JUeXBlRnJvbU1hbmlmZXN0KG1hbiwgR2VuZXJhbFV0aWxzLkFzYWRtaW5NYW5pZmVzdEtleVR5cGUuQ0hJTERSRU4pOwogICAgICAgICBpZiAoIWNoaWxkcmVuLmNvbnRhaW5zKEpBVkFEQl9QT09MKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImRlbGV0ZWQgaHR0cCBsaXN0ZW5lcjogIiArIEpBVkFEQl9QT09MICsgIiBleGlzdHMgaW4gdGhlIGxpc3Q6ICIgKyBjaGlsZHJlbik7Ci0gICAgICAgIH0gICAgICAgIAorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QoZ3JvdXBzPXsicHVsc2UifSwgZGVwZW5kc09uTWV0aG9kcz17ImVuc3VyZUNyZWF0ZWRQb29sRXhpc3RzIn0pCiAgICAgcHVibGljIHZvaWQgZGVsZXRlUG9vbCgpIHsKICAgICAgICAgU3RyaW5nIENNRCA9ICJkZWxldGUtamRiYy1jb25uZWN0aW9uLXBvb2wiOwpAQCAtODEsNyArODEsNyBAQAogICAgICAgICBTdHJpbmcgdXAgPSBHZW5lcmFsVXRpbHMudG9GaW5hbFVSTChhZG1pblVybCwgQ01ELCBvcHRpb25zLCBvcGVyYW5kKTsKIC8vICAgICAgICBSZXBvcnRlci5sb2coInVybDogIiArIHVwKTsKICAgICAgICAgTWFuaWZlc3QgbWFuID0gc3VwZXIuaW52b2tlVVJMQW5kR2V0TWFuaWZlc3QodXApOwotICAgICAgICBHZW5lcmFsVXRpbHMuaGFuZGxlTWFuaWZlc3RGYWlsdXJlKG1hbik7ICAgICAgICAKKyAgICAgICAgR2VuZXJhbFV0aWxzLmhhbmRsZU1hbmlmZXN0RmFpbHVyZShtYW4pOwogICAgIH0KIAogICAgIEBUZXN0KGdyb3Vwcz17InB1bHNlIn0sIGRlcGVuZHNPbk1ldGhvZHM9eyJkZWxldGVQb29sIn0pCkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgIFN0cmluZyBjaGlsZHJlbiA9IEdlbmVyYWxVdGlscy5nZXRWYWx1ZUZvclR5cGVGcm9tTWFuaWZlc3QobWFuLCBHZW5lcmFsVXRpbHMuQXNhZG1pbk1hbmlmZXN0S2V5VHlwZS5DSElMRFJFTik7CiAgICAgICAgIGlmIChjaGlsZHJlbi5jb250YWlucyhKQVZBREJfUE9PTCkpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJkZWxldGVkIGh0dHAgbGlzdGVuZXI6ICIgKyBKQVZBREJfUE9PTCArICIgZXhpc3RzIGluIHRoZSBsaXN0OiAiICsgY2hpbGRyZW4pOwotICAgICAgICB9ICAgICAgICAgCisgICAgICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIE1hbmlmZXN0IHJ1bkxpc3RQb29sc0NvbW1hbmQoKSB7CkBAIC0xMDMsNSArMTAzLDUgQEAKIC8vICAgICAgICBSZXBvcnRlci5sb2coInVybDogIiArIHVwKTsKICAgICAgICAgTWFuaWZlc3QgbWFuID0gc3VwZXIuaW52b2tlVVJMQW5kR2V0TWFuaWZlc3QodXApOwogICAgICAgICByZXR1cm4gKCBtYW4gKTsKLSAgICB9ICAgIAorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYWRtaW4vc3JjL3Rlc3QvYWRtaW4vSnZtT3B0aW9uVGVzdHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYWRtaW4vc3JjL3Rlc3QvYWRtaW4vSnZtT3B0aW9uVGVzdHMuamF2YQppbmRleCAxMjJkZDg1Li5kNGU4NjE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FkbWluL3NyYy90ZXN0L2FkbWluL0p2bU9wdGlvblRlc3RzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hZG1pbi9zcmMvdGVzdC9hZG1pbi9Kdm1PcHRpb25UZXN0cy5qYXZhCkBAIC0zNCw3ICszNCw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENKICAgICAgICAgID0gImNyZWF0ZS1qdm0tb3B0aW9ucyI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERKICAgICAgICAgID0gImRlbGV0ZS1qdm0tb3B0aW9ucyI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExKICAgICAgICAgID0gImxpc3QtanZtLW9wdGlvbnMiOwotICAgIAorCiAgICAgQFRlc3QoZ3JvdXBzPXsicHVsc2UifSkgLy8gdGVzdCBtZXRob2QKICAgICBwdWJsaWMgdm9pZCBjcmVhdGVKb2UoKSB7CiAgICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gb3B0aW9ucyA9IENvbGxlY3Rpb25zLkVNUFRZX01BUDsKQEAgLTU0LDEyICs1NCwxMiBAQAogICAgICAgICAgICAgU3RyaW5nIGNoaWxkcmVuID0gVVJMRGVjb2Rlci5kZWNvZGUoR2VuZXJhbFV0aWxzLmdldFZhbHVlRm9yVHlwZUZyb21NYW5pZmVzdChtYW4sIEdlbmVyYWxVdGlscy5Bc2FkbWluTWFuaWZlc3RLZXlUeXBlLkNISUxEUkVOKSwgIlVURi04Iik7CiAgICAgICAgICAgICBpZiAoIWNoaWxkcmVuLmNvbnRhaW5zKFRFU1RfSk9FKSkgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJhZGRlZCBKVk0gb3B0aW9uOiAiICsgVEVTVF9KT0UgKyAiIGRvZXMgbm90IGV4aXN0IGluIHRoZSBsaXN0OiAiICsgY2hpbGRyZW4pOwotICAgICAgICAgICAgfSAgIAorICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBAVGVzdChncm91cHM9eyJwdWxzZSJ9LCBkZXBlbmRzT25NZXRob2RzPXsiZW5zdXJlQ3JlYXRlZEpvZUV4aXN0cyJ9KQogICAgIHB1YmxpYyB2b2lkIGRlbGV0ZUpvZSgpIHsKICAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBvcHRpb25zID0gQ29sbGVjdGlvbnMuRU1QVFlfTUFQOwpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICBTdHJpbmcgdXAgPSBHZW5lcmFsVXRpbHMudG9GaW5hbFVSTChhZG1pblVybCwgREosIG9wdGlvbnMsIG9wZXJhbmQpOwogLy8gICAgICAgIFJlcG9ydGVyLmxvZygidXJsOiAiICsgdXApOwogICAgICAgICBNYW5pZmVzdCBtYW4gPSBzdXBlci5pbnZva2VVUkxBbmRHZXRNYW5pZmVzdCh1cCk7Ci0gICAgICAgIEdlbmVyYWxVdGlscy5oYW5kbGVNYW5pZmVzdEZhaWx1cmUobWFuKTsgICAgICAgIAorICAgICAgICBHZW5lcmFsVXRpbHMuaGFuZGxlTWFuaWZlc3RGYWlsdXJlKG1hbik7CiAgICAgfQogCiAgICAgQFRlc3QoZ3JvdXBzPXsicHVsc2UifSwgZGVwZW5kc09uTWV0aG9kcz17ImRlbGV0ZUpvZSJ9KQpAQCAtNzksMTEgKzc5LDExIEBACiAgICAgICAgICAgICBTdHJpbmcgY2hpbGRyZW4gPSBVUkxEZWNvZGVyLmRlY29kZShHZW5lcmFsVXRpbHMuZ2V0VmFsdWVGb3JUeXBlRnJvbU1hbmlmZXN0KG1hbiwgR2VuZXJhbFV0aWxzLkFzYWRtaW5NYW5pZmVzdEtleVR5cGUuQ0hJTERSRU4pLCAiVVRGLTgiKTsKICAgICAgICAgICAgIGlmIChjaGlsZHJlbi5jb250YWlucyhURVNUX0pPRSkpIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiZGVsZXRlZCBKVk0gb3B0aW9uOiAiICsgVEVTVF9KT0UgKyAiIGV4aXN0cyBpbiB0aGUgbGlzdDogIiArIGNoaWxkcmVuKTsKLSAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICB9CiAKICAgICBwcml2YXRlIE1hbmlmZXN0IHJ1bkxpc3RKb2VzQ29tbWFuZCgpIHsKQEAgLTkzLDUgKzkzLDUgQEAKIC8vICAgICAgICBSZXBvcnRlci5sb2coInVybDogIiArIHVwKTsKICAgICAgICAgTWFuaWZlc3QgbWFuID0gc3VwZXIuaW52b2tlVVJMQW5kR2V0TWFuaWZlc3QodXApOwogICAgICAgICByZXR1cm4gKCBtYW4gKTsKLSAgICB9ICAgIAorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYWRtaW4vc3JjL3Rlc3QvYWRtaW4vV2VidGllclRlc3RzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FkbWluL3NyYy90ZXN0L2FkbWluL1dlYnRpZXJUZXN0cy5qYXZhCmluZGV4IDQ0YjRkYzMuLmNmZDk1YWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYWRtaW4vc3JjL3Rlc3QvYWRtaW4vV2VidGllclRlc3RzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hZG1pbi9zcmMvdGVzdC9hZG1pbi9XZWJ0aWVyVGVzdHMuamF2YQpAQCAtNjAsNyArNjAsNyBAQAogICAgICAgICAgICAgU3RyaW5nIENNRCA9ICJjcmVhdGUtaHR0cC1saXN0ZW5lciI7CiAgICAgICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IG9wdGlvbnMgPSBnZXRDcmVhdGVPcHRpb25zKCk7CiAgICAgICAgICAgICBvcHRpb25zLnB1dCgiZGVmYXVsdHZzIiwgb3B0aW9ucy5nZXQoImRlZmF1bHQtdmlydHVhbC1zZXJ2ZXIiKSk7Ci0JCQkJb3B0aW9ucy5yZW1vdmUoImRlZmF1bHQtdmlydHVhbC1zZXJ2ZXIiKTsKKyAgICAgICAgICAgICAgICBvcHRpb25zLnJlbW92ZSgiZGVmYXVsdC12aXJ0dWFsLXNlcnZlciIpOwogICAgICAgICAgICAgU3RyaW5nIHVwID0gR2VuZXJhbFV0aWxzLnRvRmluYWxVUkwoYWRtaW5VcmwsIENNRCwgb3B0aW9ucywgb3BlcmFuZCk7CiAgICAgICAgICAgICAvL1JlcG9ydGVyLmxvZygidXJsOiAiICsgdXApOwogICAgICAgICAgICAgTWFuaWZlc3QgbWFuID0gc3VwZXIuaW52b2tlVVJMQW5kR2V0TWFuaWZlc3QodXApOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hZG1pbi9zcmMvdGVzdC9hZG1pbi91dGlsL0dlbmVyYWxVdGlscy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hZG1pbi9zcmMvdGVzdC9hZG1pbi91dGlsL0dlbmVyYWxVdGlscy5qYXZhCmluZGV4IDU1YWU0MGQuLmU5M2EzYjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYWRtaW4vc3JjL3Rlc3QvYWRtaW4vdXRpbC9HZW5lcmFsVXRpbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FkbWluL3NyYy90ZXN0L2FkbWluL3V0aWwvR2VuZXJhbFV0aWxzLmphdmEKQEAgLTMwLDE0ICszMCwxNCBAQAogICogQHNpbmNlIEdsYXNzRmlzaCB2MyBQcmVsdWRlCiAgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBHZW5lcmFsVXRpbHMgewotICAgIAorCiAgICAgcHVibGljIGVudW0gQXNhZG1pbk1hbmlmZXN0S2V5VHlwZSB7CiAgICAgICAgIEVYSVRfQ09ERSgiZXhpdC1jb2RlIiksCiAgICAgICAgIENISUxEUkVOICgiY2hpbGRyZW4iKSwKICAgICAgICAgTUVTU0FHRSAgKCJtZXNzYWdlIiksCiAgICAgICAgIENBVVNFICAgICgiY2F1c2UiKTsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbmFtZTsKLSAgICAgICAgCisKICAgICAgICAgQXNhZG1pbk1hbmlmZXN0S2V5VHlwZShTdHJpbmcgbmFtZSkgewogICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICAgfQpAQCAtNDYsMTQgKzQ2LDE0IEBACiAgICAgICAgICAgICByZXR1cm4gbmFtZTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQ0NFU1MgPSAiU1VDQ0VTUyI7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkFJTFVSRSA9ICJGQUlMVVJFIjsKLSAgICAKKwogICAgIC8qIFRoZXNlIGNhbid0IGNoYW5nZS4gVGhleSBhcmUgYnVyaWVkIGluIENMSSBjb2RlIG9uIHNlcnZlciBzaWRlISAqLwotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgdGhlIGZpbmFsIGFzYWRtaW4gVVJMIHdpdGggY29tbWFuZCdzIGJlbGxzIGFuZCB3aGlzdGxlcy4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBhZG1pblVybAogICAgICAqIEBwYXJhbSBjbWQKICAgICAgKiBAcGFyYW0gb3B0aW9ucwpAQCAtODksNyArODksNyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiAoIGJ1ZmZlci50b1N0cmluZygpKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRWYWx1ZUZvclR5cGVGcm9tTWFuaWZlc3QoTWFuaWZlc3QgbWFuLCBBc2FkbWluTWFuaWZlc3RLZXlUeXBlIGtleSkgewogICAgICAgICBpZiAobWFuID09IG51bGwpCiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJudWxsIG1hbmlmZXN0IHJlY2VpdmVkIik7CkBAIC0xMTUsOSArMTE1LDkgQEAKICAgICAgICAgICAgIFN0cmluZyBjYXVzZSA9IEdlbmVyYWxVdGlscy5nZXRWYWx1ZUZvclR5cGVGcm9tTWFuaWZlc3QobWFuLCBHZW5lcmFsVXRpbHMuQXNhZG1pbk1hbmlmZXN0S2V5VHlwZS5DQVVTRSk7CiAgICAgICAgICAgICBSZXBvcnRlci5sb2coIkNhdXNlOiAiICsgY2F1c2UpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIiIgKyBjYXVzZSk7Ci0gICAgICAgIH0gICAgICAgIAorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLy8vLy8gcHJpdmF0ZSBtZXRob2RzIC8vLy8vCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGVuY29kZVBhaXIoU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkgewogICAgICAgICB0cnkgewpAQCAtMTI3LDUgKzEyNyw1IEBACiAgICAgICAgIH0gY2F0Y2goVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiB1ZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24odWUpOwogICAgICAgICB9Ci0gICAgfSAgICAKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FkbWluL3Rlc3RuZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FkbWluL3Rlc3RuZy54bWwKaW5kZXggZWU5MjlkMy4uMWExNGMwOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hZG1pbi90ZXN0bmcueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYWRtaW4vdGVzdG5nLnhtbApAQCAtMTcsMTQgKzE3LDE0IEBACiAtLT4KIAogPCFET0NUWVBFIHN1aXRlIFNZU1RFTSAiaHR0cDovL3Rlc3RuZy5vcmcvdGVzdG5nLTEuMC5kdGQiID4KLSAKKwogPHN1aXRlIG5hbWU9IlF1aWNrTG9va1Rlc3RzIiB2ZXJib3NlPSIyIiA+CiAgIDxwYXJhbWV0ZXIgbmFtZT0iYWRtaW4udXJsIiB2YWx1ZT0iaHR0cDovL2xvY2FsaG9zdDo0ODQ4L19fYXNhZG1pbiIvPgogICA8cGFyYW1ldGVyIG5hbWU9ImFkbWluLnVzZXIiIHZhbHVlPSJhZG1pbiIvPgogICA8cGFyYW1ldGVyIG5hbWU9ImFkbWluLnBhc3N3b3JkIiB2YWx1ZT0iIi8+CiAgIDxwYXJhbWV0ZXIgbmFtZT0iYWRtaW4uY29uc29sZS51cmwiIHZhbHVlPSJodHRwOi8vbG9jYWxob3N0OjQ4NDgvIi8+CiAgIDxwYXJhbWV0ZXIgbmFtZT0icmVzb3VyY2VzLnhtbC5yZWxhdGl2ZS5wYXRoIiB2YWx1ZT0icmVzb3VyY2VzL3Jlc291cmNlcy54bWwiLz4KLSAgCisKICAgPHRlc3QgbmFtZT0iYXNhZG1pbl90ZXN0cyI+CiAgICAgPGNsYXNzZXM+CiAgICAgICA8Y2xhc3MgbmFtZT0idGVzdC5hZG1pbi5Kdm1PcHRpb25UZXN0cyIvPgpAQCAtMzMsNiArMzMsNiBAQAogICAgICAgPGNsYXNzIG5hbWU9InRlc3QuYWRtaW4uT3NnaUFzYWRtaW5UZXN0Ii8+CiAgICAgPC9jbGFzc2VzPgogICA8L3Rlc3Q+Ci0gCisKIDwvc3VpdGU+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYWRtaW5jbGkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hZG1pbmNsaS9idWlsZC54bWwKaW5kZXggZGQ1MzQwOS4uODc3YzFmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hZG1pbmNsaS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hZG1pbmNsaS9idWlsZC54bWwKQEAgLTIxLDcgKzIxLDcgQEAKIAogPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiLz4KIDxwcm9wZXJ0eSBmaWxlPSIke3dzLnJvb3R9L2J1aWxkLnByb3BlcnRpZXMiLz4KLSAKKwogPGRlc2NyaXB0aW9uPkJ1aWxkcywgdGVzdHMsIGFuZCBydW5zIHRoZSBhc2FkbWluIENMSSByZXN0YXJ0LCBKREJDIGNvbm5lY3Rpb24gcG9vbCB0ZXN0cy48L2Rlc2NyaXB0aW9uPgogICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L3YzLXRhcmdldHMueG1sIi8+CkBAIC0zMiw3ICszMiw3IEBACiA8dGFyZ2V0IG5hbWU9ImJ1aWxkIj4KICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS10ZXN0cyIvPgogICAgPHJlY29yZCBuYW1lPSJhZG1pbmNsaS1yZXN0YXJ0Lm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgotCTxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyIi8+CiAgICA8cmVjb3JkIG5hbWU9ImFkbWluY2xpLXJlc3RhcnQub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FkbWluY2xpL3NyYy90ZXN0L2FkbWluY2xpL1Jlc3RhcnREb21haW5UZXN0cy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hZG1pbmNsaS9zcmMvdGVzdC9hZG1pbmNsaS9SZXN0YXJ0RG9tYWluVGVzdHMuamF2YQppbmRleCBiMzk5M2EzLi42YTVkYWY3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FkbWluY2xpL3NyYy90ZXN0L2FkbWluY2xpL1Jlc3RhcnREb21haW5UZXN0cy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYWRtaW5jbGkvc3JjL3Rlc3QvYWRtaW5jbGkvUmVzdGFydERvbWFpblRlc3RzLmphdmEKQEAgLTMyLDEwICszMiwxMCBAQAogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCByZXN0YXJ0RG9tYWluVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotCW91dFB1dEZpbGUgPSAiYWRtaW5jbGktcmVzdGFydC5vdXRwdXQiOwotCWV4cGVjdGVkT3V0UHV0ID0gIkNvbW1hbmQgcmVzdGFydC1kb21haW4gZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LiI7Ci0JdGVzdEVyciA9ICJSZXN0YXJ0IGRvbWFpbiBmYWlsZWQuIjsKLQlwYXJzZVRlc3RSZXN1bHRzKG91dFB1dEZpbGUsIGV4cGVjdGVkT3V0UHV0LCB0ZXN0RXJyKTsgICAgCisgICAgb3V0UHV0RmlsZSA9ICJhZG1pbmNsaS1yZXN0YXJ0Lm91dHB1dCI7CisgICAgZXhwZWN0ZWRPdXRQdXQgPSAiQ29tbWFuZCByZXN0YXJ0LWRvbWFpbiBleGVjdXRlZCBzdWNjZXNzZnVsbHkuIjsKKyAgICB0ZXN0RXJyID0gIlJlc3RhcnQgZG9tYWluIGZhaWxlZC4iOworICAgIHBhcnNlVGVzdFJlc3VsdHMob3V0UHV0RmlsZSwgZXhwZWN0ZWRPdXRQdXQsIHRlc3RFcnIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHBhcnNlVGVzdFJlc3VsdHMoU3RyaW5nIG91dFB1dEZpbGUsIFN0cmluZyBleHBlY3RlZE91dFB1dCwgU3RyaW5nIHRlc3RFcnIpIHRocm93cyBFeGNlcHRpb24gewpAQCAtNjAsOSArNjAsOSBAQAogICAgICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZihleHBlY3RlZE91dFB1dCkhPS0xKXsKICAgICAgICAgICAgICAgICAgIHJlc3VsdD10cnVlOwogICAgICAgICAgICAgICAgICAgdGVzdExpbmUgPSBsaW5lOwotICAgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4odGVzdExpbmUpOyAKLQkJfSAKLQkgICAgICB9CisgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbih0ZXN0TGluZSk7CisgICAgICAgIH0KKyAgICAgICAgICB9CiAgICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVzdWx0LCB0cnVlLCB0ZXN0RXJyKTsKICAgICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYWRtaW5jbGkvdGVzdG5nLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYWRtaW5jbGkvdGVzdG5nLnhtbAppbmRleCAyNzYzNGM2Li45Y2QxYjM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FkbWluY2xpL3Rlc3RuZy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hZG1pbmNsaS90ZXN0bmcueG1sCkBAIC0xNywxNCArMTcsMTQgQEAKIC0tPgogCiA8IURPQ1RZUEUgc3VpdGUgU1lTVEVNICJodHRwOi8vdGVzdG5nLm9yZy90ZXN0bmctMS4wLmR0ZCIgPgotIAorCiA8c3VpdGUgbmFtZT0iUXVpY2tMb29rVGVzdHMiIHZlcmJvc2U9IjIiID4KICAgPHBhcmFtZXRlciBuYW1lPSJhZG1pbi51cmwiIHZhbHVlPSJodHRwOi8vbG9jYWxob3N0OjQ4NDgvX19hc2FkbWluIi8+CiAgIDxwYXJhbWV0ZXIgbmFtZT0iYWRtaW4udXNlciIgdmFsdWU9ImFkbWluIi8+CiAgIDxwYXJhbWV0ZXIgbmFtZT0iYWRtaW4ucGFzc3dvcmQiIHZhbHVlPSIiLz4KICAgPHBhcmFtZXRlciBuYW1lPSJhZG1pbi5jb25zb2xlLnVybCIgdmFsdWU9Imh0dHA6Ly9sb2NhbGhvc3Q6NDg0OC8iLz4KICAgPHBhcmFtZXRlciBuYW1lPSJyZXNvdXJjZXMueG1sLnJlbGF0aXZlLnBhdGgiIHZhbHVlPSJhZG1pbi9yZXNvdXJjZXMvcmVzb3VyY2VzLnhtbCIvPgotICAKKwogCiAgIDx0ZXN0IG5hbWU9ImFkbWluY2xpX3Rlc3RzIj4KICAgICA8Y2xhc3Nlcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYWRtaW5jb25zb2xlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYWRtaW5jb25zb2xlL2J1aWxkLnhtbAppbmRleCBjY2E0ZWM0Li4wZDI3NDc3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FkbWluY29uc29sZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hZG1pbmNvbnNvbGUvYnVpbGQueG1sCkBAIC0yMCwxOCArMjAsMTggQEAKIDxwcm9qZWN0IG5hbWU9ImFkbWluY29uc29sZSIgZGVmYXVsdD0iZGVmYXVsdCIgYmFzZWRpcj0iLiI+CiAgICAgPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiLz4KICAgICA8cHJvcGVydHkgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LWNvbmZpZy5wcm9wZXJ0aWVzIi8+Ci0gICAgCisKICAgICA8ZGVzY3JpcHRpb24+VGVzdHMgdGhlIEFkbWluIENvbnNvbGU8L2Rlc2NyaXB0aW9uPgotICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4gICAKKyAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC8ke2RlcGxveS5wbGF0Zm9ybX0tdGFyZ2V0cy54bWwiLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIi8+CiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtdGVzdHMiPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQgIG5hbWU9InJ1bnRlc3QiPiAKKworICAgIDx0YXJnZXQgIG5hbWU9InJ1bnRlc3QiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bnRlc3QtaW1wbCI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RuZy50ZXN0Lm5hbWUiIHZhbHVlPSIke3Rlc3RuZy50ZXN0Lm5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYWRtaW5jb25zb2xlL3NyYy90ZXN0L2FkbWluL0Jhc2VBZG1pbkNvbnNvbGVUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FkbWluY29uc29sZS9zcmMvdGVzdC9hZG1pbi9CYXNlQWRtaW5Db25zb2xlVGVzdC5qYXZhCmluZGV4IGZmYTA5M2UuLjRiY2MyOGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYWRtaW5jb25zb2xlL3NyYy90ZXN0L2FkbWluL0Jhc2VBZG1pbkNvbnNvbGVUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hZG1pbmNvbnNvbGUvc3JjL3Rlc3QvYWRtaW4vQmFzZUFkbWluQ29uc29sZVRlc3QuamF2YQpAQCAtNTgsNyArNTgsNyBAQAogICAgIHByaXZhdGUgdm9sYXRpbGUgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIG1NQmVhblNlcnZlckNvbm5lY3Rpb247CiAgICAgcHJpdmF0ZSB2b2xhdGlsZSBEb21haW5Sb290IG1Eb21haW5Sb290OwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGSUxFX1NFUCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiZmlsZS5zZXBhcmF0b3IiKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OU09MRV9ESVJfUEFUSCA9IEZJTEVfU0VQICsgImxpYiIgKyBGSUxFX1NFUCArIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT05TT0xFX0RJUl9QQVRIID0gRklMRV9TRVAgKyAibGliIiArIEZJTEVfU0VQICsKICAgICAgICAgICAgICJpbnN0YWxsIiArIEZJTEVfU0VQICsgImFwcGxpY2F0aW9ucyIgKyBGSUxFX1NFUCArICJfX2FkbWluZ3VpIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgR0xBU1NGSVNIX0RJUiA9IEZJTEVfU0VQICsgIi4uIiArIEZJTEVfU0VQICsiZ2xhc3NmaXNoIjsKIApAQCAtMjM2LDcgKzIzNiw3IEBACiAKICAgICAgICAgZmluYWwgSk1YQ29ubmVjdG9yIGpteENvbm4gPSBKTVhDb25uZWN0b3JGYWN0b3J5LmNvbm5lY3QodXJsKTsKICAgICAgICAgZmluYWwgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIGNvbm4gPSBqbXhDb25uLmdldE1CZWFuU2VydmVyQ29ubmVjdGlvbigpOwotICAgICAgICBjb25uLmdldERvbWFpbnMoKTsJLy8gc2FuaXR5IGNoZWNrCisgICAgICAgIGNvbm4uZ2V0RG9tYWlucygpOyAgICAvLyBzYW5pdHkgY2hlY2sKICAgICAgICAgcmV0dXJuIGNvbm47CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hZG1pbndlYi9iYXNpYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FkbWlud2ViL2Jhc2ljL2J1aWxkLnhtbAppbmRleCA5YjE1MTA5Li5lYTVjNzU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FkbWlud2ViL2Jhc2ljL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FkbWlud2ViL2Jhc2ljL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJhZG1pbndlYiIgZGVmYXVsdD0iZGVmYXVsdCIgYmFzZWRpcj0iLiI+CiAgICAgPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiLz4KLSAgICAKKwogIDxkZXNjcmlwdGlvbj5CdWlsZHMsIHRlc3RzLCBhbmQgcnVucyB0aGUgR2xhc3NGaXNoIEFkbWluIEdVSTwvZGVzY3JpcHRpb24+CiA8IS0tIDxpbXBvcnQgZmlsZT0ibmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+LS0+CiAKQEAgLTQ0LDEzICs0NCwxMyBAQAogPHBhdGggaWQ9InBhdGgydGVzdG5nIj4KICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249Ii4uL2xpYi90ZXN0bmctNS4wLWpkazE1LmphciIvPgogPC9wYXRoPgotICAgICAgCi0gICAgCisKKwogCiA8cGF0aCBpZD0iY2xhc3MucGF0aCI+CiAgICAgPGZpbGVzZXQgZGlyPSIke2luc3RhbGwuZGlyfS9saWIiPgogICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIvPgotICAgIDwvZmlsZXNldD4gICAgICAKKyAgICA8L2ZpbGVzZXQ+CiAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJjbGFzc2VzIi8+CiA8L3BhdGg+CiAKQEAgLTYwLDcgKzYwLDcgQEAKICAgICA8L2ZpbGVzZXQ+LS0+CiAgICAgPGZpbGVzZXQgZGlyPSIuLi8uLi9saWIiPgogICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIvPgotICAgIDwvZmlsZXNldD4gICAgCisgICAgPC9maWxlc2V0PgogICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iLi9jbGFzc2VzL3Rlc3QiLz4KIDwvcGF0aD4KIApAQCAtNjgsNyArNjgsNyBAQAogPHRhc2tkZWYgbmFtZT0idGVzdG5nIgogICAgICAgICAgY2xhc3NwYXRocmVmPSJwYXRoMnRlc3RuZyIKICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLnRlc3RuZy5UZXN0TkdBbnRUYXNrIi8+Ci0gICAgICAgICAKKwogCiA8IS0tIEdlbmVyYXRlIHRoZSBUZXN0TkcgcmVwb3J0IC0tPgogPHRhcmdldCBuYW1lPSJyZXBvcnQiPgpAQCAtOTcsMjYgKzk3LDI2IEBACiAKIDx0YXJnZXQgbmFtZT0ic3RhcnQiPgogICA8ZWNobyBtZXNzYWdlPSJTdGFydGluZyBTZWxlbml1bSBTZXJ2ZXIiLz4KLSAgPGphdmEgamFyPSIuLi8uLi9saWIvc2VsZW5pdW0vc2VsZW5pdW0tc2VydmVyLmphciIgZm9yaz0idHJ1ZSI+ICAKKyAgPGphdmEgamFyPSIuLi8uLi9saWIvc2VsZW5pdW0vc2VsZW5pdW0tc2VydmVyLmphciIgZm9yaz0idHJ1ZSI+CiAgICAgICA8YXJnIGxpbmU9Ii1pbnRlcmFjdGl2ZSIvPgogICA8L2phdmE+Ci0gICAgICAKKwogPC90YXJnZXQ+CiAKLTx0YXJnZXQgIG5hbWU9InJ1biI+ICAgIAotICAgIAotICAgIDxlY2hvIG1lc3NhZ2U9Ij09PT09PT09PT09PT1TdGFydGluZyBTZWxlbml1bSBUZXN0TkcgdGVzdCBhdCBcbiAke2Jhc2VkaXJ9ICA9PT09PT09PT09PT0iLz4gIAotICAKKzx0YXJnZXQgIG5hbWU9InJ1biI+CisKKyAgICA8ZWNobyBtZXNzYWdlPSI9PT09PT09PT09PT09U3RhcnRpbmcgU2VsZW5pdW0gVGVzdE5HIHRlc3QgYXQgXG4gJHtiYXNlZGlyfSAgPT09PT09PT09PT09Ii8+CisKICAgICA8bWtkaXIgZGlyPSIuLi90ZXN0LW91dHB1dCIvPgogICAgIDx0ZXN0bmcgb3V0cHV0ZGlyPSIuLi90ZXN0LW91dHB1dCIKICAgICAgICAgICAgIGNsYXNzcGF0aHJlZj0idGVzdC5jbGFzc3BhdGgiIGdyb3Vwcz0iIj4KICAgICAgICAgIDxjbGFzc2ZpbGVzZXQgZGlyPSJjbGFzc2VzL3Rlc3QiIGluY2x1ZGVzPSIqKi9TZWxlbml1bVRlc3QuY2xhc3MiLz4KICAgICAgICAgPCEtLTx4bWxmaWxlc2V0IGRpcj0iLi4vLi4vLi4vIiBpbmNsdWRlcz0idGVzdG5nLnhtbCIvPi0tPgogICAgIDwvdGVzdG5nPgotICAgIAorCiAgICAgPCEtLTxhbnRjYWxsIHRhcmdldD0iLXBvc3QtdGVzdC1ydW4iLz4gICAgLS0+Ci0gICAgCi08L3RhcmdldD4gICAgCisKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InN0b3AiPgogICAgICAgICA8Z2V0IHRhc2tuYW1lPSJzZWxlbml1bS1zaHV0ZG93biIKQEAgLTEzNCwxMSArMTM0LDExIEBACiA8dGFyZ2V0IG5hbWU9Il9zdGFydC1zZWxlbml1bSI+CiAgPGphdmEgamFyPSIuLi9saWIvc2VsZW5pdW0vJHtzZWxlbml1bS1zcnZyLWphcn0iIGZvcms9InRydWUiIHNwYXduPSJ0cnVlIiAvPgogIDxhbnRjYWxsIHRhcmdldD0iX3J1bi11YS10ZXN0cyIgLz4KLSA8Z2V0IGRlc3Q9IiR7dGVzdHJlcG9ydGRpcn0vcmVzdWx0cy50eHQiIAorIDxnZXQgZGVzdD0iJHt0ZXN0cmVwb3J0ZGlyfS9yZXN1bHRzLnR4dCIKICAgICAgICAgc3JjPSIke3NlbGVuaXVtLXNydnItbG9jfS9zZWxlbml1bS1zZXJ2ZXIvZHJpdmVyLz9jbWQ9c2h1dERvd24iIC8+CiA8L3RhcmdldD4KIAogCi0gICAgCisKIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hZG1pbndlYi9iYXNpYy9zcmMvdGVzdC9TZWxlbml1bVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYWRtaW53ZWIvYmFzaWMvc3JjL3Rlc3QvU2VsZW5pdW1UZXN0LmphdmEKaW5kZXggYmQ0MDVmMi4uNDM4MzMxYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hZG1pbndlYi9iYXNpYy9zcmMvdGVzdC9TZWxlbml1bVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FkbWlud2ViL2Jhc2ljL3NyYy90ZXN0L1NlbGVuaXVtVGVzdC5qYXZhCkBAIC0yMSwzMyArMjEsMzMgQEAKIGltcG9ydCBvcmcub3BlbnFhLnNlbGVuaXVtLnNlcnZlci5TZWxlbml1bVNlcnZlcjsKIAogcHVibGljIGNsYXNzIFNlbGVuaXVtVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIERlZmF1bHRTZWxlbml1bSBzZWxlbml1bTsKLSAgICAKKwogICAgIC8vQFBhcmFtZXRlcnMoeyJzZWxlbi1zdnItYWRkciIsImJyd3NyLXBhdGgiLCJhdXQtYWRkciJ9KQogICAgIEBCZWZvcmVDbGFzcwogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnRpbmcgU2VsZW5pdW0gTGF1bmNoZXItLS0+Iik7CiAgICAgICAgIHNlbGVuaXVtID0gbmV3IERlZmF1bHRTZWxlbml1bSgibG9jYWxob3N0IiwKICAgICAgICAgICAgICAgICBTZWxlbml1bVNlcnZlci5nZXREZWZhdWx0UG9ydCgpLCAiKmlleHBsb3JlIiwgImh0dHA6Ly9sb2NhbGhvc3Q6NDg0OCIpOwotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAorCisKKwogICAgIC8qIHNlbGVuaXVtID0gbmV3IERlZmF1bHRTZWxlbml1bShzZWxlblNydnJBZGRyLAogICAgICAgICAgICAgIFNlbGVuaXVtU2VydmVyLmdldERlZmF1bHRQb3J0KCksIGJwYXRoLCBhcHBQYXRoKTsqLwotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAvKnNlbENsaWVudCA9IG5ldyBEZWZhdWx0U2VsZW5pdW0oImxvY2FsaG9zdCIsIDQ0NDQsCiAgICAgICAgICAgICAiKmZpcmVmb3giLCAiaHR0cDovL2xvY2FsaG9zdDoiICsgUE9SVCk7Ki8KLSAgICAgICAgCisKICAgICAgICAgc2VsZW5pdW0uc3RhcnQoKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3QxKCl7CiAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKHRydWUsIlBhc3MiKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIEBQYXJhbWV0ZXJzKHsiYXV0LWFkZHIifSkKICAgICBwdWJsaWMgdm9pZCB0ZXN0TG9naW5TY3JlZW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTYyLDE0ICs2MiwxNCBAQAogICAgICAgICBzZWxlbml1bS53YWl0Rm9yUGFnZVRvTG9hZCgiMzAwMDAiKTsKICAgICAgICAgLy92ZXJpZnlUcnVlKHNlbGVuaXVtLmlzVGV4dFByZXNlbnQoIkpSdWJ5IikpOwogICAgICAgICAvL3ZlcmlmeUVxdWFscygiZ2xhc3NmaXNoOiBHbGFzc0Zpc2ggQ29tbXVuaXR5Iiwgc2VsZW5pdW0uZ2V0VGl0bGUoKSk7Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIC8vQXNzZXJ0LmFzc2VydEVxdWFscygiIiwgc2VsZW5pdW0uZ2V0VGV4dCgiLy9pbWdbQGFsdD0nR2xhc3NGaXNoIFYyJ10iKSk7Ci0gICAgICAgIAorCiAgICAgICAgIHNlbGVuaXVtLm9wZW4oIi9sb2dpbi5qc2YiKTsKICAgICAgICAgc2VsZW5pdW0ud2FpdEZvclBhZ2VUb0xvYWQoIjMwMDAwIik7CiAgICAgICAgIC8vc2VsZW5pdW0udHlwZSgiTG9naW4udXNlcm5hbWUiLCAiYWRtaW4iKTsKLSAgICAgICAgc2VsZW5pdW0udHlwZSgial91c2VybmFtZSIsICJhZG1pbiIpOyAgICAgICAgCisgICAgICAgIHNlbGVuaXVtLnR5cGUoImpfdXNlcm5hbWUiLCAiYWRtaW4iKTsKICAgICAgICAgLy9zZWxlbml1bS53YWl0Rm9yUGFnZVRvTG9hZCgiMzAwMDAiKTsKICAgICAgICAgLy9zZWxlbml1bS50eXBlKCJMb2dpbi5wYXNzd29yZCIsICJhZG1pbmFkbWluIik7CiAgICAgICAgIHNlbGVuaXVtLnR5cGUoImpfcGFzc3dvcmQiLCAiYWRtaW5hZG1pbiIpOwpAQCAtODAsMTQgKzgwLDE0IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihlKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgCisKKwogICAgIH0KLSAgICAKKwogICAgIEBBZnRlckNsYXNzCiAgICAgcHJpdmF0ZSB2b2lkIHN0b3AoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgc2VsZW5pdW0uc3RvcCgpOwotICAgIH0gICAgCi0gICAgCi0gICAgCisgICAgfQorCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYWRtaW53ZWIvYmFzaWMvdGVzdG5nLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYWRtaW53ZWIvYmFzaWMvdGVzdG5nLnhtbAppbmRleCA0NGU5ZTUzLi4yMGJlZjYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FkbWlud2ViL2Jhc2ljL3Rlc3RuZy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hZG1pbndlYi9iYXNpYy90ZXN0bmcueG1sCkBAIC0xNywyMCArMTcsMjAgQEAKIC0tPgogCiA8c3VpdGUgbmFtZT0iVXNlciBBY2NlcHRhbmNlIFRlc3RzIiB2ZXJib3NlPSIxIiA+Ci0gCisKICA8IS0tIHJlcXVpcmVkIGZvciBEYlVuaXQgZml4dHVyZSAgIC0tPgotIDxwYXJhbWV0ZXIgbmFtZT0ic2VlZC1wYXRoIiB2YWx1ZT0idGVzdC9jb25mL2d0MTUtc2VlZC54bWwiLz4gCisgPHBhcmFtZXRlciBuYW1lPSJzZWVkLXBhdGgiIHZhbHVlPSJ0ZXN0L2NvbmYvZ3QxNS1zZWVkLnhtbCIvPgogIDxwYXJhbWV0ZXIgbmFtZT0iZGItZHJpdmVyIiB2YWx1ZT0ib3JnLmhzcWxkYi5qZGJjRHJpdmVyIi8+CiAgPHBhcmFtZXRlciBuYW1lPSJkYi11cmwiIHZhbHVlPSJqZGJjOmhzcWxkYjpoc3FsOi8vMTI3LjAuMC4xIi8+CiAgPHBhcmFtZXRlciBuYW1lPSJkYi11c2VyIiB2YWx1ZT0ic2EiLz4KICA8cGFyYW1ldGVyIG5hbWU9ImRiLXBzc3dyZCIgdmFsdWU9IiIvPgotIAotIDwhLS0gcmVxdWlyZWQgZm9yIFNlbGVuaXVtIGZpeHR1cmUgLS0+Ci0gPHBhcmFtZXRlciBuYW1lPSJzZWxlbi1zdnItYWRkciIgdmFsdWU9ImxvY2FsaG9zdCIvPiAKLSA8cGFyYW1ldGVyIG5hbWU9ImF1dC1hZGRyIiB2YWx1ZT0iaHR0cDovL2xvY2FsaG9zdDo4MDgwL2d0MTUvIi8+IAkKIAotIDx0ZXN0IG5hbWU9IkdUMTUgQ1JVRHMtIEZpcmVmb3giID4gCi0gCisgPCEtLSByZXF1aXJlZCBmb3IgU2VsZW5pdW0gZml4dHVyZSAtLT4KKyA8cGFyYW1ldGVyIG5hbWU9InNlbGVuLXN2ci1hZGRyIiB2YWx1ZT0ibG9jYWxob3N0Ii8+CisgPHBhcmFtZXRlciBuYW1lPSJhdXQtYWRkciIgdmFsdWU9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9ndDE1LyIvPgorCisgPHRlc3QgbmFtZT0iR1QxNSBDUlVEcy0gRmlyZWZveCIgPgorCiAgIDxwYXJhbWV0ZXIgbmFtZT0iYnJ3c3ItcGF0aCIgdmFsdWU9IipmaXJlZm94Ii8+CiAKICAgPHBhY2thZ2VzPgpAQCAtMzksMTMgKzM5LDEzIEBACiAgIDwvcGFja2FnZXM+CiAgPC90ZXN0PgogCi0gPHRlc3QgbmFtZT0iR1QxNSBDUlVEcy0gSUUiID4gCi0gIAorIDx0ZXN0IG5hbWU9IkdUMTUgQ1JVRHMtIElFIiA+CisKICAgPHBhcmFtZXRlciBuYW1lPSJicndzci1wYXRoIiB2YWx1ZT0iKmlleHBsb3JlIi8+CiAKICAgPHBhY2thZ2VzPgogICAgPHBhY2thZ2UgbmFtZT0idGVzdC5jb20uYWNtZS5ndDE1LldlYi5zZWxlbml1bSIgLz4KICAgIDxwYWNrYWdlIG5hbWU9InRlc3QuY29tLmFjbWUuZ3QxNS5XZWIuc2VsZW5pdW0uZml4dHVyZXMiIC8+Ci0gIDwvcGFja2FnZXM+IAorICA8L3BhY2thZ2VzPgogIDwvdGVzdD4KIDwvc3VpdGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FteC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FteC9idWlsZC54bWwKaW5kZXggYzVhNTQ1Yi4uMDc2NDk0MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hbXgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYW14L2J1aWxkLnhtbApAQCAtMjEsMjAgKzIxLDIwIEBACiAgICAgPHByb3BlcnR5IGZpbGU9IiR7d3Mucm9vdH0vYnVpbGQucHJvcGVydGllcyIvPgogICAgIDxwcm9wZXJ0eSBmaWxlPSJidWlsZC5wcm9wZXJ0aWVzIi8+CiAgICAgPHByb3BlcnR5IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS1jb25maWcucHJvcGVydGllcyIvPgotICAgIAorCiAgICAgPGRlc2NyaXB0aW9uPmFteCA8L2Rlc2NyaXB0aW9uPgotICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4gICAKKyAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC8ke2RlcGxveS5wbGF0Zm9ybX0tdGFyZ2V0cy54bWwiLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbixzdGFydC1zZXJ2ZXIsYnVpbGQscnVudGVzdCIvPgogICAgIDx0YXJnZXQgbmFtZT0iZGVmYXVsdCIgZGVwZW5kcz0iYWxsIi8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS10ZXN0cyI+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+IAorCisgICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudGVzdC1pbXBsIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdG5nLnRlc3QubmFtZSIgdmFsdWU9IiR7dGVzdG5nLnRlc3QubmFtZX0iLz4KICAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdG5nLnRlc3RjbGllbnQiIHZhbHVlPSJBTVhDb3JlVGVzdHMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYW14L3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FteC9wb20ueG1sCmluZGV4IDdkYTQwZDUuLmQ4Njc5NTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYW14L3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hbXgvcG9tLnhtbApAQCAtMzEsMTQgKzMxLDE0IEBACiAgICAgPC9wYXJlbnQ+CiAgICAgPGRlc2NyaXB0aW9uPlJ1bnMgdGhlIHRlc3RzIG9uIGFkbWluL2FzYWRtaW4gY29kZTwvZGVzY3JpcHRpb24+CiAgICAgPGJ1aWxkPgotICAgICAgPHRlc3RTb3VyY2VEaXJlY3Rvcnk+c3JjPC90ZXN0U291cmNlRGlyZWN0b3J5PiAgCisgICAgICA8dGVzdFNvdXJjZURpcmVjdG9yeT5zcmM8L3Rlc3RTb3VyY2VEaXJlY3Rvcnk+CiAgICAgICA8cGx1Z2lucz4KICAgICAgICAgPHBsdWdpbj4KICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+CiAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICA8ZW5jb2Rpbmc+aXNvLTg4NTktMTwvZW5jb2Rpbmc+CiAgICAgICAgICAgICA8c291cmNlPjEuNTwvc291cmNlPgotICAgICAgICAgICAgPHRhcmdldD4xLjU8L3RhcmdldD4gICAKKyAgICAgICAgICAgIDx0YXJnZXQ+MS41PC90YXJnZXQ+CiAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgogICAgICAgICA8L3BsdWdpbj4KICAgICAgIDwvcGx1Z2lucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYW14L3NyYy90ZXN0L2FteC9BTVhDb25maWdQcm94eVRlc3RzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FteC9zcmMvdGVzdC9hbXgvQU1YQ29uZmlnUHJveHlUZXN0cy5qYXZhCmluZGV4IDNmMmY2MzguLjMwOTBhNWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYW14L3NyYy90ZXN0L2FteC9BTVhDb25maWdQcm94eVRlc3RzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hbXgvc3JjL3Rlc3QvYW14L0FNWENvbmZpZ1Byb3h5VGVzdHMuamF2YQpAQCAtNDcsNyArNDcsNyBAQAogaW1wb3J0IG9yZy5nbGFzc2Zpc2guYWRtaW4uYW14LmFubm90YXRpb24uKjsKIAogCi0vKiogCisvKioKICAgICBNaXNjZWxsYW5lb3VzIHRlc3RzIHNob3VsZCBnbyBpbnRvIHRoaXMgZmlsZSwgb3IgYW5vdGhlciBvbmUgbGlrZSBpdC4KICAqLwogQFRlc3QoCkBAIC02MywzMyArNjMsMzMgQEAKICAgICBwdWJsaWMgQU1YQ29uZmlnUHJveHlUZXN0cygpCiAgICAgewogICAgIH0KLSAgICAKKwogICAgICAvKiogdGVzdCBhbGwgTUJlYW5zIGdlbmVyaWNhbGx5ICovCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Rm9yQm9ndXNDb25maWdBbm5vdGF0aW9ucygpCiAgICAgewogICAgICAgICBmaW5hbCBMaXN0PENsYXNzPD8gZXh0ZW5kcyBBTVhQcm94eT4+IGludGVyZmFjZXMgPSBnZXRJbnRlcmZhY2VzKCkuYWxsKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIEFNWENvbmZpZ1Byb3h5IHN1Yi1pbnRlcmZhY2VzIHNob3VsZCBub3QgdXNlIEBNYW5hZ2VkQXR0cmlidXRlIG9yIEBNYW5hZ2VkT3BlcmF0aW9uOwogICAgICAgICAvLyBhbGwgc3VjaCBpbmZvIGlzIGRlcml2ZWQgb25seSBmcm9tIHRoZSBDb25maWdCZWFuLgogICAgICAgICBmb3IoIGZpbmFsIENsYXNzPD8gZXh0ZW5kcyBBTVhQcm94eT4gIGludGYgOiBpbnRlcmZhY2VzICkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCAhIEFNWENvbmZpZ1Byb3h5LmNsYXNzLmlzQXNzaWduYWJsZUZyb20oaW50ZikgKSBjb250aW51ZTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBmaW5hbCBNZXRob2RbXSBtZXRob2RzID0gaW50Zi5nZXREZWNsYXJlZE1ldGhvZHMoKTsgLy8gZGVjbGFyZWQgbWV0aG9kcyBvbmx5CiAgICAgICAgICAgICBmb3IoIGZpbmFsIE1ldGhvZCBtIDogbWV0aG9kcyApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZmluYWwgTWFuYWdlZEF0dHJpYnV0ZSBtYSA9IG0uZ2V0QW5ub3RhdGlvbihNYW5hZ2VkQXR0cmlidXRlLmNsYXNzKTsKICAgICAgICAgICAgICAgICBmaW5hbCBNYW5hZ2VkT3BlcmF0aW9uIG1vID0gbS5nZXRBbm5vdGF0aW9uKE1hbmFnZWRPcGVyYXRpb24uY2xhc3MpOwogICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBkZXNjID0gaW50Zi5nZXROYW1lKCkgKyAiLiIgKyBtLmdldE5hbWUoKSArICIoKSI7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBhc3NlcnQgbWEgPT0gbnVsbCA6ICAiQ29uZmlnIE1CZWFucyBkbyBub3Qgc3VwcG9ydCBATWFuYWdlZEF0dHJpYnV0ZTogIiArIGRlc2M7CiAgICAgICAgICAgICAgICAgYXNzZXJ0IG1vID09IG51bGwgOiAgIkNvbmZpZyBNQmVhbnMgZG8gbm90IHN1cHBvcnQgQE1hbmFnZWRPcGVyYXRpb246ICIgKyBkZXNjOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwcml2YXRlIHZvaWQgX2NoZWNrRGVmYXVsdFZhbHVlcyhmaW5hbCBBTVhDb25maWdQcm94eSBhbXhDb25maWcpCiAgICAgewogICAgICAgICBmaW5hbCBTdHJpbmcgb2JqZWN0TmFtZSA9IGFteENvbmZpZy5vYmplY3ROYW1lKCkudG9TdHJpbmcoKTsKQEAgLTE0NCwxOSArMTQ0LDE5IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHByaXZhdGUgTWFwPFN0cmluZyxPYmplY3Q+IG5ld1Byb3BlcnR5TWFwKGZpbmFsIFN0cmluZyBuYW1lKQogICAgIHsKICAgICAgICAgZmluYWwgTWFwPFN0cmluZyxPYmplY3Q+ICAgIG0gPSBNYXBVdGlsLm5ld01hcCgpOwotICAgICAgICAKKwogICAgICAgICBtLnB1dCggIk5hbWUiLCBuYW1lICk7CiAgICAgICAgIG0ucHV0KCAiVmFsdWUiLCBuYW1lICsgIi12YWx1ZSIgKTsKICAgICAgICAgbS5wdXQoICJEZXNjcmlwdGlvbiIsICJkZXNjLmZvci4iICsgbmFtZSApOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIE1hcDxTdHJpbmcsT2JqZWN0PltdIG5ld1Byb3BlcnR5TWFwcyhmaW5hbCBTdHJpbmcgYmFzZU5hbWUsIGZpbmFsIGludCBjb3VudCkKICAgICB7CiAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsT2JqZWN0PltdIG1hcHMgPSBUeXBlQ2FzdC5hc0FycmF5KCBuZXcgTWFwW2NvdW50XSApOwpAQCAtMTY2LDEwICsxNjYsMTAgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbWFwczsKICAgICB9Ci0gICAgCisKIAogICAgIHByaXZhdGUgdm9pZCByZW1vdmVDaGlsZFNpbGVudGx5KCBmaW5hbCBBTVhDb25maWdQcm94eSBhbXgsIGZpbmFsIFN0cmluZyB0eXBlLCBmaW5hbCBTdHJpbmcgbmFtZSApCi0gICAgeyAgIAorICAgIHsKICAgICAgICAgaWYgKCBuYW1lID09IG51bGwgKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIGFteC5jaGlsZCh0eXBlKSAhPSBudWxsICkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYW14L3NyYy90ZXN0L2FteC9BTVhDb3JlVGVzdHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYW14L3NyYy90ZXN0L2FteC9BTVhDb3JlVGVzdHMuamF2YQppbmRleCBlMDNjYzkxLi5iY2FkOTFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FteC9zcmMvdGVzdC9hbXgvQU1YQ29yZVRlc3RzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hbXgvc3JjL3Rlc3QvYW14L0FNWENvcmVUZXN0cy5qYXZhCkBAIC0zNSw3ICszNSw3IEBACiBpbXBvcnQgb3JnLmdsYXNzZmlzaC5hZG1pbi5hbXgudXRpbC5qbXguSk1YVXRpbDsKIGltcG9ydCBvcmcuZ2xhc3NmaXNoLmFkbWluLmFteC51dGlsLkV4Y2VwdGlvblV0aWw7CiAKLS8qKiAKKy8qKgogQmFzaWMgQU1YUHJveHkgdGVzdHMgdGhhdCB2ZXJpZnkgY29ubmVjdGl2aXR5IGFuZCBhYmlsaXR5IHRvCiB0cmF2ZXJzZSB0aGUgQU1YUHJveHkgaGllcmFyY2h5IGFuZCBmZXRjaCBhbGwgYXR0cmlidXRlcy4KICAqLwpAQCAtODgsNyArODgsNyBAQAogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKCAiTUJlYW4gdmFsaWQoKT1mYWxzZSBkdXJpbmcgdGVzdGluZywgaWdub3Jpbmc6ICIgKyBhbXgub2JqZWN0TmFtZSgpICk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC05OSw3ICs5OSw3IEBACiAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKiogSUYgVEhJUyBURVNUIEZBSUxTLCBETyBOT1QgUkVNT1ZFLCBqdXN0IGNvbW1lbnQgaXQgb3V0IGlmIHRoZSBuZWVkIG1hbmRhdGVzLCBidXQgb25seSB0ZW1wb3JhcmlseSAqLwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEFNWENvbXBsaWFuY2VNb25pdG9yRmFpbHVyZUNvdW50KCkKQEAgLTEwNyw3ICsxMDcsNyBAQAogICAgICAgICB0cnkKICAgICAgICAgewogICAgICAgICBmaW5hbCBNYXA8T2JqZWN0TmFtZSwgTGlzdDxTdHJpbmc+PiBmYWlsdXJlcyA9IGdldERvbWFpblJvb3RQcm94eSgpLmdldENvbXBsaWFuY2VGYWlsdXJlcygpOwotICAgICAgICAKKwogICAgICAgICBhc3NlcnQgZmFpbHVyZXMuc2l6ZSgpID09IDAgOgogICAgICAgICAgICAgIlNlcnZlciBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBhcmUgbm9uLWNvbXBsaWFudCBBTVggTUJlYW4gdmFsaWRhdG9yIGZhaWx1cmVzLCBmYWlsdXJlIGNvdW50ID0gIiArIGZhaWx1cmVzLnNpemUoKSArICJcbiIgKyBmYWlsdXJlczsKICAgICAgICAgfQpAQCAtMTE3LDcgKzExNyw3IEBACiAgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgIH0KLSAgICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3REZW1vKCkKICAgICB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FteC9zcmMvdGVzdC9hbXgvQU1YT3RoZXJUZXN0cy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hbXgvc3JjL3Rlc3QvYW14L0FNWE90aGVyVGVzdHMuamF2YQppbmRleCBlZTA2ZTJjLi44YmFkMDMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FteC9zcmMvdGVzdC9hbXgvQU1YT3RoZXJUZXN0cy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYW14L3NyYy90ZXN0L2FteC9BTVhPdGhlclRlc3RzLmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKIGltcG9ydCBvcmcuZ2xhc3NmaXNoLmFkbWluLmFteC5sb2dnaW5nLkxvZ2dpbmc7CiBpbXBvcnQgb3JnLmdsYXNzZmlzaC5hZG1pbi5hbXguYW5ub3RhdGlvbi4qOwogCi0vKiogCisvKioKICAqLwogLy9AVGVzdChncm91cHM9eyJhbXgifSwgZGVzY3JpcHRpb249IkFNWFByb3h5IHRlc3RzIiwgc2VxdWVudGlhbD1mYWxzZSwgdGhyZWFkUG9vbFNpemU9NSkKIEBUZXN0KApAQCAtNTYsMTQgKzU2LDE0IEBACiAgICAgcHVibGljIEFNWE90aGVyVGVzdHMoKQogICAgIHsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RWYXJpb3VzR2V0dGVycygpCiAgICAgewogICAgICAgICBmaW5hbCBSdW50aW1lUm9vdCBydW50aW1lUm9vdCA9IGdldERvbWFpblJvb3RQcm94eSgpLmdldFJ1bnRpbWUoKTsKICAgICAgICAgZmluYWwgTWFwPFN0cmluZyxTZXJ2ZXJSdW50aW1lPiAgc2VydmVyUnVudGltZXMgPSBydW50aW1lUm9vdC5nZXRTZXJ2ZXJSdW50aW1lKCk7CiAgICAgfQotICAgIAorCiB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hbXgvc3JjL3Rlc3QvYW14L0FNWFByb3h5VGVzdHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYW14L3NyYy90ZXN0L2FteC9BTVhQcm94eVRlc3RzLmphdmEKaW5kZXggYmFmMTc0ZC4uNzU0ZDc2MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hbXgvc3JjL3Rlc3QvYW14L0FNWFByb3h5VGVzdHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FteC9zcmMvdGVzdC9hbXgvQU1YUHJveHlUZXN0cy5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiBpbXBvcnQgb3JnLmdsYXNzZmlzaC5hZG1pbi5hbXguYW5ub3RhdGlvbi4qOwogCiAKLS8qKiAKKy8qKgogICAgIFRoZXNlIHRlc3RzIGFyZSBkZXNpZ25lZCB0byBleGVyY2lzZSB0aGUgQU1YUHJveHlIYW5kbGVyIGNvZGUuCiAgKi8KIC8vQFRlc3QoZ3JvdXBzPXsiYW14In0sIGRlc2NyaXB0aW9uPSJBTVhQcm94eSB0ZXN0cyIsIHNlcXVlbnRpYWw9ZmFsc2UsIHRocmVhZFBvb2xTaXplPTUpCkBAIC01OSwzMyArNTksMzMgQEAKICAgICBwdWJsaWMgQU1YUHJveHlUZXN0cygpCiAgICAgewogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIGF0dHJOYW1lKCBmaW5hbCBNZXRob2QgbSApCiAgICAgewogICAgICAgICBpZiAoICEgSk1YVXRpbC5pc0lzT3JHZXR0ZXIobSkgKSByZXR1cm4gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIEpNWFV0aWwuZ2V0QXR0cmlidXRlTmFtZShtKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHByaXZhdGUgPFQgZXh0ZW5kcyBBTVhQcm94eT4gdm9pZCB0ZXN0UHJveHlJbnRlcmZhY2UoZmluYWwgQU1YUHJveHkgYW14LCBDbGFzczxUPiBjbGF6eikKICAgICB7CiAgICAgICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBwcm9ibGVtcyA9IF90ZXN0UHJveHlJbnRlcmZhY2UoYW14LCBjbGF6eik7CiAgICAgICAgIGFzc2VydCBwcm9ibGVtcy5zaXplKCkgPT0gMCA6IENvbGxlY3Rpb25VdGlsLnRvU3RyaW5nKCBwcm9ibGVtcywgIlxuIiApOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgcHJpdmF0ZSA8VCBleHRlbmRzIEFNWFByb3h5PiBMaXN0PFN0cmluZz4gX3Rlc3RQcm94eUludGVyZmFjZShmaW5hbCBBTVhQcm94eSBhbXhJbiwgQ2xhc3M8VD4gY2xhenopCiAgICAgewogICAgICAgICBhc3NlcnQgYW14SW4gIT0gbnVsbCA6ICJfdGVzdFByb3h5SW50ZXJmYWNlKCk6IG51bGwgcHJveHkgZm9yIGNsYXNzICIgKyBjbGF6ei5nZXROYW1lKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBwcm9ibGVtcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotICAgICAgICAKKwogICAgICAgICBmaW5hbCBUIGFteCA9IGFteEluLmFzKGNsYXp6KTsKLSAgICAgICAgCisKICAgICAgICAgZmluYWwgU3RyaW5nIG5hbWVQcm9wID0gYW14Lm5hbWVQcm9wKCk7CiAgICAgICAgIGFzc2VydCBVdGlsLmdldE5hbWVQcm9wKGFteC5vYmplY3ROYW1lKCkpID09IG5hbWVQcm9wOwotICAgICAgICAKKwogICAgICAgICBhc3NlcnQgYW14LnBhcmVudFBhdGgoKSAhPSBudWxsOwogICAgICAgICBhc3NlcnQgYW14LnR5cGUoKSAhPSBudWxsOwogICAgICAgICBhc3NlcnQgYW14LnZhbGlkKCk7CkBAIC05NywxMiArOTcsMTIgQEAKICAgICAgICAgZmluYWwgT2JqZWN0TmFtZSBvYmplY3ROYW1lID0gYW14Lm9iamVjdE5hbWUoKTsKICAgICAgICAgYXNzZXJ0IG9iamVjdE5hbWUgIT0gbnVsbDsKICAgICAgICAgYXNzZXJ0IGFteC5leHRyYSgpICE9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIGZpbmFsIEV4dHJhIGV4dHJhID0gYW14LmV4dHJhKCk7CiAgICAgICAgIC8vYXNzZXJ0IGV4dHJhLm1iZWFuU2VydmVyQ29ubmVjdGlvbigpID09IGdldE1CZWFuU2VydmVyQ29ubmVjdGlvbigpOwogICAgICAgICBhc3NlcnQgZXh0cmEucHJveHlGYWN0b3J5KCkgPT0gZ2V0UHJveHlGYWN0b3J5KCk7CiAgICAgICAgIGFzc2VydCBleHRyYS5qYXZhKCkubGVuZ3RoKCkgPj0gMTAwOwotICAgICAgICAKKwogICAgICAgICBhc3NlcnQgZXh0cmEubWJlYW5JbmZvKCkgIT0gbnVsbDsKICAgICAgICAgYXNzZXJ0IGV4dHJhLmludGVyZmFjZU5hbWUoKSAhPSBudWxsOwogICAgICAgICBhc3NlcnQgZXh0cmEuZ2VuZXJpY0ludGVyZmFjZSgpICE9IG51bGw7CkBAIC0xMTUsOCArMTE1LDggQEAKICAgICAgICAgewogICAgICAgICAgICAgYXNzZXJ0IGV4dHJhLnNpbmdsZXRvbigpOwogICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBmaW5hbCBNZXRob2RbXSBtZXRob2RzID0gY2xhenouZ2V0TWV0aG9kcygpOwogICAgICAgICBmaW5hbCBTZXQ8U3RyaW5nPiBhdHRyTmFtZXNGcm9tTWV0aG9kcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKICAgICAgICAgZm9yKCBmaW5hbCBNZXRob2QgbSA6IG1ldGhvZHMgKQpAQCAtMTMwLDExICsxMzAsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgcHJpbnRsbiggIldhcm5pbmc6IEF0dHJpYnV0ZSAiICsgYXR0ck5hbWUgKwogICAgICAgICAgICAgICAgICAgICAgICAgIiBleGlzdHMgaW4gIiArIG9iamVjdE5hbWUgKyAiLCBidXQgaGFzIHN1cGVyZmx1b3VzIEBDaGlsZEdldHRlciBhbm5vdGF0aW9uIiApOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0IHJlc3VsdCA9IG0uaW52b2tlKCBhbXgsIChPYmplY3RbXSludWxsKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgYXR0ck5hbWVzRnJvbU1ldGhvZHMuYWRkKCBhdHRyTmFtZShtKSApOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjYXRjaCggZmluYWwgRXhjZXB0aW9uIGUgKQpAQCAtMTYyLDcgKzE2Miw3IEBACiAgICAgewogICAgICAgICBmaW5hbCBEb21haW5Sb290IGRyID0gZ2V0RG9tYWluUm9vdFByb3h5KCk7CiAgICAgICAgIHRlc3RQcm94eUludGVyZmFjZSggZHIsIERvbWFpblJvb3QuY2xhc3MgKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gc2FuaXR5IGNoZWNrOiAgc2VlIHRoYXQgdGhlIHZhcmlvdXMgYXR0cmlidXRlcyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggaXRzIHByb3h5CiAgICAgICAgIGFzc2VydCBkci5nZXRBTVhSZWFkeSgpOwogICAgICAgICBhc3NlcnQgZHIuZ2V0RGVidWdQb3J0KCkgIT0gbnVsbDsKQEAgLTI0Niw3ICsyNDYsNyBAQAogICAgIHB1YmxpYyB2b2lkIHRlc3RGb3JCb2d1c0Fubm90YXRpb25zKCkKICAgICB7CiAgICAgICAgIGZpbmFsIExpc3Q8Q2xhc3M8PyBleHRlbmRzIEFNWFByb3h5Pj4gaW50ZXJmYWNlcyA9IGdldEludGVyZmFjZXMoKS5hbGwoKTsKLSAgICAgICAgCisKICAgICAgICAgZm9yKCBmaW5hbCBDbGFzczw/IGV4dGVuZHMgQU1YUHJveHk+ICBpbnRmIDogaW50ZXJmYWNlcyApCiAgICAgICAgIHsKICAgICAgICAgICAgIGZpbmFsIE1ldGhvZFtdIG1ldGhvZHMgPSBpbnRmLmdldE1ldGhvZHMoKTsKQEAgLTI1Nyw3ICsyNTcsNyBAQAogICAgICAgICAgICAgICAgIGZpbmFsIE1hbmFnZWRPcGVyYXRpb24gbW8gPSBtLmdldEFubm90YXRpb24oTWFuYWdlZE9wZXJhdGlvbi5jbGFzcyk7CiAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGRlc2MgPSBpbnRmLmdldE5hbWUoKSArICIuIiArIG0uZ2V0TmFtZSgpICsgIigpIjsKICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbnVtQXJncyA9IG0uZ2V0UGFyYW1ldGVyVHlwZXMoKS5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBhc3NlcnQgbWEgPT0gbnVsbCB8fCBtbyA9PSBudWxsIDoKICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGhhdmUgYm90aCBATWFuYWdlZEF0dHJpYnV0ZSBhbmQgQE1hbmFnZWRPcGVyYXRpb246ICIgKyBkZXNjOwogCkBAIC0yNjUsMTEgKzI2NSwxMSBAQAogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG51bUFyZ3MgPT0gMCA6CiAgICAgICAgICAgICAgICAgICAgICAgICAiQENoaWxkR2V0dGVyIGNhbm5vdCBiZSBhcHBsaWVkIHRvIG1ldGhvZCB3aXRoIGFyZ3VtZW50czogIiArIGRlc2M7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBhc3NlcnQgbWEgPT0gbnVsbCAmJiBtbyA9PSBudWxsIDoKICAgICAgICAgICAgICAgICAgICAgICAgICJATWFuYWdlZEF0dHJpYnV0ZS9ATWFuYWdlZE9wZXJhdGlvbiBub3QgYXBwbGljYWJsZSB3aXRoIEBDaGlsZEdldHRlcjogIiArIGRlc2M7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgaWYgKCBtbyAhPSBudWxsICkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIC8vIG9wZXJhdGlvbnMgdGhhdCBtaW1pYyBnZXR0ZXJzIGFyZSBiYWQuIFdlIGNhbid0IHByZXZlbnQgYWxsIHN1Y2ggdGhpbmdzCkBAIC0yODIsOSArMjgyLDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKIAotICAgIAorCisKICAgICAvKiogdGVzdCBhbGwgTUJlYW5zIGdlbmVyaWNhbGx5ICovCiAgICAgQFRlc3QoLyogR0xBU1NGSVNILTIxMjE0ICovZW5hYmxlZD1mYWxzZSkKICAgICBwdWJsaWMgdm9pZCB0ZXN0QWxsR2VuZXJpY2FsbHkoKQpAQCAtMzEzLDcgKzMxMyw3IEBACiAgICAgICAgICAgICBhc3NlcnQgZmFsc2UgOiAiIiArIHByb2JsZW1zOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0SjJFRURvbWFpbigpIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uCiAgICAgewpAQCAtMzIyLDcgKzMyMiw3IEBACiAgICAgICAgICAgICB0ZXN0UHJveHlJbnRlcmZhY2UoIGdldERvbWFpblJvb3RQcm94eSgpLmdldEoyRUVEb21haW4oKSwgZ2V0SjJFRURvbWFpbkNsYXNzKCkgKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYW14L3NyYy90ZXN0L2FteC9BTVhUZXN0QmFzZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hbXgvc3JjL3Rlc3QvYW14L0FNWFRlc3RCYXNlLmphdmEKaW5kZXggYjFlOWFjNC4uOTM2YTE1MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hbXgvc3JjL3Rlc3QvYW14L0FNWFRlc3RCYXNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hbXgvc3JjL3Rlc3QvYW14L0FNWFRlc3RCYXNlLmphdmEKQEAgLTg3LDEzICs4NywxMyBAQAogICAgIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiICsgcyk7CiAgICAgfQotICAgIAorCiAgICAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHByaW50bG4oZmluYWwgU3RyaW5nIHMpCiAgICAgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyBzKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHByb3RlY3RlZCBzdGF0aWMgdm9pZCB3YXJuaW5nKGZpbmFsIFN0cmluZyBzKQogICAgIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiICsgcyk7CkBAIC0xMzYsMTAgKzEzNiwxMCBAQAogICAgIHsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBNQmVhblNlcnZlckNvbm5lY3Rpb24gbVNlcnZlcjsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgICAgICAgICAgICAgICAgbURvbWFpbjsKLSAgICAgICAgCisKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBMaXN0PE9iamVjdE5hbWU+IG1SZWdpc3RlcmVkID0gQ29sbGVjdGlvbnMuc3luY2hyb25pemVkTGlzdChuZXcgQXJyYXlMaXN0PE9iamVjdE5hbWU+KCkpOwogICAgICAgICBwcml2YXRlIGZpbmFsIExpc3Q8T2JqZWN0TmFtZT4gbVVucmVnaXN0ZXJlZCA9IENvbGxlY3Rpb25zLnN5bmNocm9uaXplZExpc3QobmV3IEFycmF5TGlzdDxPYmplY3ROYW1lPigpKTsKLSAgICAgICAgCisKICAgICAgICAgcHVibGljIE1CZWFuc0xpc3RlbmVyKGZpbmFsIE1CZWFuU2VydmVyQ29ubmVjdGlvbiBzZXJ2ZXIsIGZpbmFsIFN0cmluZyBkb21haW4pCiAgICAgICAgIHsKICAgICAgICAgICAgIG1TZXJ2ZXIgID0gc2VydmVyOwpAQCAtMTU3LDEwICsxNTcsMTAgQEAKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVOb3RpZmljYXRpb24oCiAgICAgICAgICAgICBmaW5hbCBOb3RpZmljYXRpb24gbm90aWYsCi0gICAgICAgICAgICBmaW5hbCBPYmplY3QgaGFuZGJhY2spIAorICAgICAgICAgICAgZmluYWwgT2JqZWN0IGhhbmRiYWNrKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoICEgKG5vdGlmIGluc3RhbmNlb2YgTUJlYW5TZXJ2ZXJOb3RpZmljYXRpb24pICkKICAgICAgICAgICAgIHsKQEAgLTE4Myw3ICsxODMsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTUJlYW5zTGlzdGVuZXIgc01CZWFuc0xpc3RlbmVyID0gbnVsbDsKICAgICBwcm90ZWN0ZWQgc3luY2hyb25pemVkIHZvaWQgZ2V0TUJlYW5zTGlzdGVuZXIoKSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewpAQCAtMTkzLDkgKzE5Myw5IEBACiAgICAgICAgICAgICBzTUJlYW5zTGlzdGVuZXIuc3RhcnRMaXN0ZW5pbmcoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gc0VuYWJsZWRNb25pdG9yaW5nID0gZmFsc2U7Ci0gICAgCisKICAgICAvKioKICAgICBTdWJjbGFzc2VzIG1heSBvdmVycmlkZSBpZiBkZXNpcmVkLiAgQU1YIHdpbGwgaGF2ZSBiZWVuIHN0YXJ0ZWQKICAgICBhbmQgaW5pdGlhbGl6ZWQgYWxyZWFkeS4KQEAgLTIxNyw3ICsyMTcsNyBAQAogICAgICAgICAgICAgLy9kZWJ1ZyggIkFNWFRlc3RCYXNlLnNldHVwKCk6IG1pbGxpcyB0byBib290IEFNWDogIiArIHRpbWluZy5lbGFwc2VkTWlsbGlzKCkgKTsKICAgICAgICAgICAgIG1RdWVyeU1nciA9IGdldERvbWFpblJvb3RQcm94eSgpLmdldFF1ZXJ5TWdyKCk7CiAgICAgICAgICAgICAvL2RlYnVnKCAiQU1YVGVzdEJhc2Uuc2V0dXAoKTogbWlsbGlzIHRvIGdldCBRdWVyeU1ncjogIiArIHRpbWluZy5lbGFwc2VkTWlsbGlzKCkgKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBnZXRNQmVhbnNMaXN0ZW5lcigpOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKQEAgLTIzOSw3ICsyMzksNyBAQAogICAgIHsKICAgICAgICAgZmluYWwgU2V0PEFNWFByb3h5PiBhbGxBTVggPSBnZXRRdWVyeU1ncigpLnF1ZXJ5QWxsKCk7CiAgICAgICAgIGFzc2VydCBhbGxBTVguc2l6ZSgpID49IDMwOwotICAgICAgICByZXR1cm4gYWxsQU1YOyAgCisgICAgICAgIHJldHVybiBhbGxBTVg7CiAgICAgfQogCiAgICAgcHJvdGVjdGVkIDxUPiBTZXQ8VD4gZ2V0QWxsKGZpbmFsIENsYXNzPFQ+IGludGYpCkBAIC0yNjgsNyArMjY4LDcgQEAKIAogCiAgICAgcHJvdGVjdGVkIFByb3h5RmFjdG9yeSBnZXRQcm94eUZhY3RvcnkoKSB7IHJldHVybiBtUHJveHlGYWN0b3J5OyB9Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgZmluYWwgRG9tYWluUm9vdCBfZ2V0RG9tYWluUm9vdChmaW5hbCBNQmVhblNlcnZlckNvbm5lY3Rpb24gY29ubikKICAgICAgICAgICAgIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb24KICAgICB7CkBAIC0yNzgsNyArMjc4LDcgQEAKICAgICB9CiAKICAgICBwcm90ZWN0ZWQgZmluYWwgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIGdldE1CZWFuU2VydmVyQ29ubmVjdGlvbigpIHsgcmV0dXJuIG1NQmVhblNlcnZlckNvbm5lY3Rpb247IH0KLSAgICAKKwogICAgIHByaXZhdGUgZmluYWwgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIF9nZXRNQmVhblNlcnZlckNvbm5lY3Rpb24oKQogICAgICAgICAgICAgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KICAgICB7CkBAIC0yODgsNyArMjg4LDcgQEAKICAgICAgICAgLy8KICAgICAgICAgLy8gZmluYWwgU3RyaW5nIHVybFN0ciA9ICJzZXJ2aWNlOmpteDpqbXhtcDovLyIgKyBtSG9zdCArICI6IiArIG1Qb3J0OwogICAgICAgICBmaW5hbCBTdHJpbmcgdXJsU3RyID0gInNlcnZpY2U6am14OnJtaTovLy9qbmRpL3JtaTovLyIgKyBtSG9zdCArICI6IiArIG1Qb3J0ICsgIi9qbXhybWkiOwotICAgICAgICAKKwogICAgICAgICBmaW5hbCBsb25nIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAKICAgICAgICAgZmluYWwgSk1YU2VydmljZVVSTCB1cmwgPSBuZXcgSk1YU2VydmljZVVSTCh1cmxTdHIpOwpAQCAtMjk2LDcgKzI5Niw3IEBACiAgICAgICAgIGZpbmFsIEpNWENvbm5lY3RvciBqbXhDb25uID0gSk1YQ29ubmVjdG9yRmFjdG9yeS5jb25uZWN0KHVybCk7CiAgICAgICAgIC8vZGVidWcoICJCYXNlQU1YVGVzdDogY29ubmVjdGluZyB0bzogIiArIHVybCApOwogICAgICAgICBmaW5hbCBNQmVhblNlcnZlckNvbm5lY3Rpb24gY29ubiA9IGpteENvbm4uZ2V0TUJlYW5TZXJ2ZXJDb25uZWN0aW9uKCk7Ci0gICAgICAgIGNvbm4uZ2V0RG9tYWlucygpOwkvLyBzYW5pdHkgY2hlY2sKKyAgICAgICAgY29ubi5nZXREb21haW5zKCk7ICAgIC8vIHNhbml0eSBjaGVjawogICAgICAgICB0cnkKICAgICAgICAgewogICAgICAgICAgICAgZmluYWwgT2JqZWN0TmFtZSBkb21haW5Sb290T2JqZWN0TmFtZSA9IEFNWEdsYXNzZmlzaC5ERUZBVUxULmJvb3RBTVgoY29ubik7CkBAIC0zMjUsOCArMzI1LDggQEAKICAgICAgICAgZmluYWwgU3RyaW5nIHJlc3VsdCA9IGJ1Zi50b1N0cmluZygpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICAKLSAgICAKKworCiAKICAgICAvKiogc3ViY2xhc3MgY2FuIG92ZXJyaWRlIHRvIGFkZCBtb3JlICovCiAgICAgcHJvdGVjdGVkIEludGVyZmFjZXMgZ2V0SW50ZXJmYWNlcygpCkBAIC0zMzQsMTQgKzMzNCwxNCBAQAogICAgICAgICByZXR1cm4gaGF2ZUpTUjc3KCkgPyBuZXcgSW50ZXJmYWNlc0dsYXNzZmlzaCgpIDogbmV3IEludGVyZmFjZXMoKTsKICAgICB9CiAKLSAgICAKKwogICAgIC8qKiBtdXN0IGJlIGNoZWNrZWQgZHluYW1pY2FsbHkgYmVjYXVzZSBpdCdzIG5vdCBpbiB0aGUgd2ViIGRpc3RyaWJ1dGlvbiAqLwogICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgQ2xhc3M8PyBleHRlbmRzIEFNWFByb3h5PiBnZXRKMkVFRG9tYWluQ2xhc3MoKQogICAgICAgICB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIENsYXNzLmZvck5hbWUoICJvcmcuZ2xhc3NmaXNoLmFkbWluLmFteC5qMmVlLkoyRUVEb21haW4iICkuYXNTdWJjbGFzcyhBTVhQcm94eS5jbGFzcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqIHJldHVybiB0cnVlIGlmIHdlIGhhdmUgdGhlIEpTUiA3NyBjbGFzc2VzICovCiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gaGF2ZUpTUjc3KCkKICAgICB7CkBAIC0zNTcsOCArMzU3LDggQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwcm90ZWN0ZWQgU2V0PEFNWFByb3h5PiBmaW5kQWxsQ29udGFpbmluZ1R5cGUoIGZpbmFsIFN0cmluZyB0eXBlICkKICAgICB7CiAgICAgICAgIGZpbmFsIFNldDxBTVhQcm94eT4gYWxsID0gZ2V0UXVlcnlNZ3IoKS5xdWVyeUFsbCgpOwpAQCAtMzczLDE1ICszNzMsMTUgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcGFyZW50c1dpdGg7CiAgICAgfQotICAgIAorCiAgICAgcHJvdGVjdGVkIDxUIGV4dGVuZHMgQU1YUHJveHk+IExpc3Q8VD4gZ2V0QWxsRGVzY2VuZGVudHMoIGZpbmFsIEFNWFByb3h5IHRvcCwgZmluYWwgQ2xhc3M8VD4gY2xhenopCiAgICAgewogICAgICAgICBmaW5hbCBBTVhQcm94eVtdICBhID0gZ2V0UXVlcnlNZ3IoKS5xdWVyeURlc2NlbmRhbnRzKCB0b3Aub2JqZWN0TmFtZSgpICk7CiAgICAgICAgIGZpbmFsIExpc3Q8QU1YUHJveHk+ICBsaXN0ID0gTGlzdFV0aWwubmV3TGlzdEZyb21BcnJheShhKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIFV0aWwuYXNQcm94eUxpc3QoIGxpc3QsIGNsYXp6ICk7CiAgICAgfQotICAgIAorCiAgICAgTGlzdDxBTVhQcm94eT4gZ2V0QWxsTW9uaXRvcmluZygpCiAgICAgewogICAgICAgICByZXR1cm4gZ2V0QWxsRGVzY2VuZGVudHMoIGdldERvbWFpblJvb3RQcm94eSgpLmdldE1vbml0b3JpbmdSb290KCksIEFNWFByb3h5LmNsYXNzKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYW14L3NyYy90ZXN0L2FteC9EZW1vLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FteC9zcmMvdGVzdC9hbXgvRGVtby5qYXZhCmluZGV4IGUzZjA4ZjIuLjNmNjNkYzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYW14L3NyYy90ZXN0L2FteC9EZW1vLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hbXgvc3JjL3Rlc3QvYW14L0RlbW8uamF2YQpAQCAtNjMsOSArNjMsOSBAQAogCiAgICAgcHJpdmF0ZSBmaW5hbCBQcm94eUZhY3RvcnkgbVByb3h5RmFjdG9yeTsKICAgICBwcml2YXRlIGZpbmFsIERvbWFpblJvb3QgICBtRG9tYWluUm9vdDsKLSAgICAKKwogICAgIHByaXZhdGUgZmluYWwgTUJlYW5zTGlzdGVuZXIgIG1MaXN0ZW5lcjsKLSAgICAKKwogICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiAgIG1QcmludGxuOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBRdWVyeSBtUXVlcnlNZ3I7CkBAIC04MSwzMiArODEsMzIgQEAKICAgICAgICAgZmluYWwgU3RyaW5nIHBhc3N3b3JkICkgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgbVByaW50bG4gPSBlbWl0TWVzc2FnZXM7Ci0gICAgICAgIAorCiAgICAgICAgIG1EZWJ1ZyA9IHRydWU7CiAgICAgICAgIG1Ib3N0ID0gaG9zdDsKICAgICAgICAgbVBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KHBvcnQpOwogICAgICAgICBtQWRtaW5Vc2VyICAgICA9IHVzZXI7CiAgICAgICAgIG1BZG1pblBhc3N3b3JkID0gcGFzc3dvcmQ7Ci0gICAgICAgIAorCiAgICAgICAgIG1NQmVhblNlcnZlckNvbm5lY3Rpb24gPSBfZ2V0TUJlYW5TZXJ2ZXJDb25uZWN0aW9uKG1Ib3N0LCBtUG9ydCk7Ci0gICAgICAgIAorCiAgICAgICAgIG1Qcm94eUZhY3RvcnkgPSBQcm94eUZhY3RvcnkuZ2V0SW5zdGFuY2UobU1CZWFuU2VydmVyQ29ubmVjdGlvbik7CiAgICAgICAgIG1Eb21haW5Sb290ICAgPSBtUHJveHlGYWN0b3J5LmdldERvbWFpblJvb3RQcm94eSgpOwogICAgICAgICBtUXVlcnlNZ3IgICAgID0gbURvbWFpblJvb3QuZ2V0UXVlcnlNZ3IoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIG1MaXN0ZW5lciA9IG5ldyBNQmVhbnNMaXN0ZW5lcihtTUJlYW5TZXJ2ZXJDb25uZWN0aW9uLCBtRG9tYWluUm9vdC5vYmplY3ROYW1lKCkuZ2V0RG9tYWluKCkpOwogICAgICAgICBtTGlzdGVuZXIuc3RhcnRMaXN0ZW5pbmcoKTsKLSAgICAgICAgCisKICAgICAgICAgcHJpbnRsbiggIkRlbW86ICIgKyBob3N0ICsgIjoiICsgcG9ydCArICIgYXMgeyIgKyB1c2VyICsgIiwiICsgcGFzc3dvcmQgKyAifSIgKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0QXJnKGZpbmFsIFN0cmluZyBuYW1lLCBmaW5hbCBTdHJpbmcgZGVmYXVsdFZhbHVlLCBmaW5hbCBTdHJpbmdbXSBhcmdzICkKICAgICB7CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IGRlZmF1bHRWYWx1ZTsKICAgICAgICAgZm9yKCBmaW5hbCBTdHJpbmcgYXJnIDogYXJncyApCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICggYXJnID09IG51bGwgKSBjb250aW51ZTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoIGFyZy5zdGFydHNXaXRoKG5hbWUpIHx8IGFyZy5zdGFydHNXaXRoKCItLSIgKyBuYW1lKSApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZmluYWwgaW50IGlkeCA9IGFyZy5pbmRleE9mKCI9Iik7CkBAIC0xMTYsNyArMTE2LDcgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICAgIFJ1biB0aGUgZGVtby4KICAgICAgKi8KQEAgLTEyNiwxMSArMTI2LDExIEBACiAgICAgICAgIGZpbmFsIFN0cmluZyBwb3J0ID0gZ2V0QXJnKCJwb3J0IiwgIjg2ODYiLCBhcmdzKTsKICAgICAgICAgZmluYWwgU3RyaW5nIHVzZXIgPSBnZXRBcmcoInVzZXIiLCAiYWRtaW4iLCBhcmdzKTsKICAgICAgICAgZmluYWwgU3RyaW5nIHBhc3N3b3JkID0gZ2V0QXJnKCJwYXNzd29yZCIsICJjaGFuZ2VpdCIsIGFyZ3MpOwotICAgICAgICAKKwogICAgICAgICB0cnkKICAgICAgICAgewogICAgICAgICAgICAgZmluYWwgRGVtbyBkZW1vID0gbmV3IERlbW8oZW1pdE1lc3NhZ2VzLCBob3N0LCBwb3J0LCB1c2VyLCBwYXNzd29yZCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZGVtby5ydW4oKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCggZmluYWwgVGhyb3dhYmxlIHQgKQpAQCAtMTM4LDI3ICsxMzgsMjcgQEAKICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiggZmluYWwgU3RyaW5nW10gYXJncyApCiAgICAgewogICAgICAgICBydW5EZW1vKCB0cnVlLCBhcmdzICk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHJ1bigpCiAgICAgewogICAgICAgICBmaW5hbCBTZXQ8QU1YUHJveHk+ICBhbXhNQmVhbnMgPSBtUXVlcnlNZ3IucXVlcnlBbGwoKTsKICAgICAgICAgcHJpbnRsbiggIkFNWCBNQmVhbnM6ICIgKyBhbXhNQmVhbnMuc2l6ZSgpICk7CiAgICAgICAgIHByaW50bG4oICJBTVggY29uZmlnIE1CZWFuczogIiArIGdldEFsbENvbmZpZygpLnNpemUoKSApOwotICAgICAgICAKLSAgICB9ICAgIAotICAgICAgICAgICAgCisKKyAgICB9CisKICAgICAvKiogZ2V0IGFsbCBBTVggTUJlYW5zIHRoYXQgd2VyZSBmb3VuZCB3aGVuIHRoZSB0ZXN0IHN0YXJ0ZWQKICAgICBDYWxsZXIgc2hvdWxkIHVzZSB0aGUgUXVlcnlNZ3IgaWYgYSBmcmVzaCBzZXQgaXMgbmVlZGVkICovCiAgICAgcHJvdGVjdGVkIFNldDxBTVhQcm94eT4gZ2V0QWxsQU1YKCkKICAgICB7CiAgICAgICAgIGZpbmFsIFNldDxBTVhQcm94eT4gYWxsQU1YID0gbVF1ZXJ5TWdyLnF1ZXJ5QWxsKCk7CiAgICAgICAgIGFzc2VydCBhbGxBTVguc2l6ZSgpID49IDMwOwotICAgICAgICByZXR1cm4gYWxsQU1YOyAgCisgICAgICAgIHJldHVybiBhbGxBTVg7CiAgICAgfQogCiAgICAgLyoqIGdldCBhbGwgQU1YIE1CZWFucyB3aXRoIHRoZSBzcGVjaWZpZWQgaW50ZXJmYWNlICovCkBAIC0xODAsMTkgKzE4MCwxOSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIF9nZXRNQmVhblNlcnZlckNvbm5lY3Rpb24oZmluYWwgU3RyaW5nIGhvc3QsIGZpbmFsIGludCBwb3J0KQogICAgICAgICAgICAgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KICAgICB7CiAgICAgICAgIGZpbmFsIGxvbmcgc3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgCisKICAgICAgICAgZmluYWwgU3RyaW5nIHVybFN0ciA9ICJzZXJ2aWNlOmpteDpybWk6Ly8vam5kaS9ybWk6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyAiL2pteHJtaSI7CiAgICAgICAgIGZpbmFsIEpNWFNlcnZpY2VVUkwgdXJsID0gbmV3IEpNWFNlcnZpY2VVUkwodXJsU3RyKTsKIAogICAgICAgICBmaW5hbCBKTVhDb25uZWN0b3Igam14Q29ubiA9IEpNWENvbm5lY3RvckZhY3RvcnkuY29ubmVjdCh1cmwpOwogICAgICAgICAvL2RlYnVnKCAiRGVtbzogY29ubmVjdGluZyB0bzogIiArIHVybCApOwogICAgICAgICBmaW5hbCBNQmVhblNlcnZlckNvbm5lY3Rpb24gY29ubiA9IGpteENvbm4uZ2V0TUJlYW5TZXJ2ZXJDb25uZWN0aW9uKCk7Ci0gICAgICAgIGNvbm4uZ2V0RG9tYWlucygpOwkvLyBzYW5pdHkgY2hlY2sKKyAgICAgICAgY29ubi5nZXREb21haW5zKCk7ICAgIC8vIHNhbml0eSBjaGVjawogICAgICAgICB0cnkKICAgICAgICAgewogICAgICAgICAgICAgZmluYWwgT2JqZWN0TmFtZSBkb21haW5Sb290T2JqZWN0TmFtZSA9IEFNWEdsYXNzZmlzaC5ERUZBVUxULmJvb3RBTVgoY29ubik7CkBAIC0yMjAsMjIgKzIyMCwyMiBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBwYXJlbnRzV2l0aDsKICAgICB9Ci0gICAgCisKICAgICAvKiogR2V0IGFsbCBBTVggTUJlYW5zIHRoYXQgYXJlIGRlc2NlbmRlbmR0cyBvZiB0aGUgc3BlY2lmaWVkIE1CZWFuICovCiAgICAgcHJvdGVjdGVkIDxUIGV4dGVuZHMgQU1YUHJveHk+IExpc3Q8VD4gZ2V0QWxsRGVzY2VuZGVudHMoIGZpbmFsIEFNWFByb3h5IHRvcCwgZmluYWwgQ2xhc3M8VD4gY2xhenopCiAgICAgewogICAgICAgICBmaW5hbCBBTVhQcm94eVtdICBhID0gbVF1ZXJ5TWdyLnF1ZXJ5RGVzY2VuZGFudHMoIHRvcC5vYmplY3ROYW1lKCkgKTsKICAgICAgICAgZmluYWwgTGlzdDxBTVhQcm94eT4gIGxpc3QgPSBMaXN0VXRpbC5uZXdMaXN0RnJvbUFycmF5KGEpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gVXRpbC5hc1Byb3h5TGlzdCggbGlzdCwgY2xhenogKTsKICAgICB9Ci0gICAgCisKICAgICAvKiogR2V0IGFsbCBjb25maWcgTUJlYW5zICovCiAgICAgTGlzdDxBTVhDb25maWdQcm94eT4gZ2V0QWxsQ29uZmlnKCkKICAgICB7CiAgICAgICAgIHJldHVybiBnZXRBbGxEZXNjZW5kZW50cyggbURvbWFpblJvb3QsIEFNWENvbmZpZ1Byb3h5LmNsYXNzKTsKICAgICB9Ci0gICAgCisKICAgICAvKiogR2V0IGFsbCBtb25pdG9yaW5nIE1CZWFucyAqLwogICAgIExpc3Q8QU1YUHJveHk+IGdldEFsbE1vbml0b3JpbmcoKQogICAgIHsKQEAgLTI1MCwxMCArMjUwLDEwIEBACiAgICAgewogICAgICAgICBwcml2YXRlIGZpbmFsIE1CZWFuU2VydmVyQ29ubmVjdGlvbiBtU2VydmVyOwogICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyAgICAgICAgICAgICAgICBtRG9tYWluOwotICAgICAgICAKKwogICAgICAgICBwcml2YXRlIGZpbmFsIExpc3Q8T2JqZWN0TmFtZT4gbVJlZ2lzdGVyZWQgPSBDb2xsZWN0aW9ucy5zeW5jaHJvbml6ZWRMaXN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0TmFtZT4oKSk7CiAgICAgICAgIHByaXZhdGUgZmluYWwgTGlzdDxPYmplY3ROYW1lPiBtVW5yZWdpc3RlcmVkID0gQ29sbGVjdGlvbnMuc3luY2hyb25pemVkTGlzdChuZXcgQXJyYXlMaXN0PE9iamVjdE5hbWU+KCkpOwotICAgICAgICAKKwogICAgICAgICBwdWJsaWMgTUJlYW5zTGlzdGVuZXIoZmluYWwgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIHNlcnZlciwgZmluYWwgU3RyaW5nIGRvbWFpbikKICAgICAgICAgewogICAgICAgICAgICAgbVNlcnZlciAgPSBzZXJ2ZXI7CkBAIC0yNzEsMTAgKzI3MSwxMCBAQAogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZU5vdGlmaWNhdGlvbigKICAgICAgICAgICAgIGZpbmFsIE5vdGlmaWNhdGlvbiBub3RpZiwKLSAgICAgICAgICAgIGZpbmFsIE9iamVjdCBoYW5kYmFjaykgCisgICAgICAgICAgICBmaW5hbCBPYmplY3QgaGFuZGJhY2spCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICggISAobm90aWYgaW5zdGFuY2VvZiBNQmVhblNlcnZlck5vdGlmaWNhdGlvbikgKQogICAgICAgICAgICAgewpAQCAtMjk3LDE5ICsyOTcsMTkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICAKKworCiAKICAgICBwcm90ZWN0ZWQgdm9pZCBkZWJ1ZyhmaW5hbCBTdHJpbmcgcykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyBzKTsKICAgICB9Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgdm9pZCBwcmludGxuKGZpbmFsIFN0cmluZyBzKSB7CiAgICAgICAgIGlmICggbVByaW50bG4gKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyBzKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByb3RlY3RlZCB2b2lkIHdhcm5pbmcoZmluYWwgU3RyaW5nIHMpIHsKICAgICAgICAgaWYgKCBtUHJpbnRsbiApIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArIHMpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hbXgvc3JjL3Rlc3QvYW14L0ludGVyZmFjZXMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYW14L3NyYy90ZXN0L2FteC9JbnRlcmZhY2VzLmphdmEKaW5kZXggNDFmMTQ3MC4uMTNjNTM2MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hbXgvc3JjL3Rlc3QvYW14L0ludGVyZmFjZXMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FteC9zcmMvdGVzdC9hbXgvSW50ZXJmYWNlcy5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgcHVibGljIEludGVyZmFjZXMoKQogICAgIHsKICAgICAgICAgbUludGVyZmFjZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIENsYXNzPD8gZXh0ZW5kcyBBTVhQcm94eT4+KCk7Ci0gICAgICAgIAorCiAgICAgICAgIGFkZCgKICAgICAgICAgICAgIERvbWFpblJvb3QuY2xhc3MsCiAgICAgICAgICAgICBFeHQuY2xhc3MsCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgICAgICBhZGQoIGNsYXp6ICk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgZmluYWwgdm9pZCBhZGQoIGZpbmFsIENsYXNzPD8gZXh0ZW5kcyBBTVhQcm94eT4gY2xhenogKQogICAgIHsKICAgICAgICAgZmluYWwgU3RyaW5nIHR5cGUgPSBVdGlsLmRlZHVjZVR5cGUoY2xhenopOwpAQCAtNzAsMjYgKzcwLDI2IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludGVyZmFjZSBhbHJlYWR5IGV4aXN0cyBmb3IgdHlwZSAiICsgdHlwZSApOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG1JbnRlcmZhY2VzLnB1dCggdHlwZSwgY2xhenogKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgTGlzdDxDbGFzczw/IGV4dGVuZHMgQU1YUHJveHk+PiBhbGwoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3QoIG1JbnRlcmZhY2VzLnZhbHVlcygpICk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIENsYXNzPD8gZXh0ZW5kcyBBTVhQcm94eT4gZ2V0KGZpbmFsIFN0cmluZyB0eXBlKQogICAgIHsKICAgICAgICAgQ2xhc3M8PyBleHRlbmRzIEFNWFByb3h5PiBpbnRmID0gbUludGVyZmFjZXMuZ2V0KHR5cGUpOwotICAgICAgICAKKwogICAgICAgICBpZiAoIGludGYgPT0gbnVsbCApCiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIGEgdHlwZSBpcyBub3QgcmVxdWlyZWQgdG8gaGF2ZSBhbiBpbnRlcmZhY2UKICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCAiTm8gQU1YUHJveHkgaW50ZXJmYWNlIGZvciB0eXBlOiAiICsgdHlwZSArICIgKHVuZGVzaXJhYmxlLCBidXQgT0spIiApOwogICAgICAgICAgICAgaW50ZiA9IEFNWFByb3h5LmNsYXNzOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBpbnRmOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYW14L3NyYy90ZXN0L2FteC9JbnRlcmZhY2VzR2xhc3NmaXNoLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FteC9zcmMvdGVzdC9hbXgvSW50ZXJmYWNlc0dsYXNzZmlzaC5qYXZhCmluZGV4IDRkODIxM2MuLjg2MzQ5NjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYW14L3NyYy90ZXN0L2FteC9JbnRlcmZhY2VzR2xhc3NmaXNoLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hbXgvc3JjL3Rlc3QvYW14L0ludGVyZmFjZXNHbGFzc2Zpc2guamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBpbXBvcnQgb3JnLmdsYXNzZmlzaC5hZG1pbi5hbXguajJlZS4qOwogCi0vKiogQWRkcyBnbGFzc2Zpc2ggaW50ZXJmYWNlcyAodGhvc2UgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgZ2xhc3NmaXNoIGRpc3RyaWJ1dGlvbiAKKy8qKiBBZGRzIGdsYXNzZmlzaCBpbnRlcmZhY2VzICh0aG9zZSB0aGF0IGFyZSBwcmVzZW50IGluIHRoZSBnbGFzc2Zpc2ggZGlzdHJpYnV0aW9uCiAgIGFzIG9wcG9zZWQgdG8gdGhlIGJhc2ljIHdlYiBkaXN0cmlidXRpb24gKi8KIGZpbmFsIGNsYXNzIEludGVyZmFjZXNHbGFzc2Zpc2ggZXh0ZW5kcyBJbnRlcmZhY2VzIHsKICAgICBwdWJsaWMgSW50ZXJmYWNlc0dsYXNzZmlzaCgpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FteC90ZXN0bmcueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9hbXgvdGVzdG5nLnhtbAppbmRleCBlOTk2MmUzLi45YmY2YmRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2FteC90ZXN0bmcueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYW14L3Rlc3RuZy54bWwKQEAgLTE3LDEyICsxNywxMiBAQAogLS0+CiAKIDwhRE9DVFlQRSBzdWl0ZSBTWVNURU0gImh0dHA6Ly90ZXN0bmcub3JnL3Rlc3RuZy0xLjAuZHRkIiA+Ci0gCisKIDxzdWl0ZSBuYW1lPSJRdWlja0xvb2tUZXN0cyIgdmVyYm9zZT0iMiIgPgogICA8cGFyYW1ldGVyIG5hbWU9ImFteC5kZWJ1ZyIgdmFsdWU9InRydWUiLz4KICAgPHBhcmFtZXRlciBuYW1lPSJhbXgucm1pcG9ydCIgdmFsdWU9Ijg2ODYiLz4KICAgPHBhcmFtZXRlciBuYW1lPSJyZXNvdXJjZXMueG1sLnJlbGF0aXZlLnBhdGgiIHZhbHVlPSJyZXNvdXJjZXMvcmVzb3VyY2VzLnhtbCIvPgotICAKKwogICA8dGVzdCBuYW1lPSJhbXhfdGVzdHMiPgogICAgIDxjbGFzc2VzPgogICAgICAgPGNsYXNzIG5hbWU9ImFteHRlc3QuQU1YQ29yZVRlc3RzIi8+CkBAIC0zMSw2ICszMSw2IEBACiAgICAgICA8Y2xhc3MgbmFtZT0iYW14dGVzdC5BTVhPdGhlclRlc3RzIi8+CiAgICAgPC9jbGFzc2VzPgogICA8L3Rlc3Q+Ci0gCisKIDwvc3VpdGU+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYmVhbi12YWxpZGF0b3IvaW50ZWdyYXRpb24tdGVzdC1zZXJ2bGV0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2JlYW4tdmFsaWRhdG9yL2ludGVncmF0aW9uLXRlc3Qtc2VydmxldC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk2ZjhmNWQuLmZjNzE2NDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYmVhbi12YWxpZGF0b3IvaW50ZWdyYXRpb24tdGVzdC1zZXJ2bGV0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9iZWFuLXZhbGlkYXRvci9pbnRlZ3JhdGlvbi10ZXN0LXNlcnZsZXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTYsMTMgKzE2LDEzIEBACiAKIGFwcC5maWxlPWludGVncmF0aW9uLXRlc3Qtc2VydmxldAogCi0jIFBhc3NlZCBhcyBhIHBhcmFtZXRlciB0byBnZnByb2plY3QvYnVpbGQtaW1wbC54bWwgdGFyZ2V0IHJ1bnRlc3QtaW1wbC4gCi0jIFVsdGltYXRlbHksIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IGlzIHBhc3NlZCBhcyB0aGUgdmFsdWUgb2YgdGhlIAorIyBQYXNzZWQgYXMgYSBwYXJhbWV0ZXIgdG8gZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIHRhcmdldCBydW50ZXN0LWltcGwuCisjIFVsdGltYXRlbHksIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IGlzIHBhc3NlZCBhcyB0aGUgdmFsdWUgb2YgdGhlCiAjICJzdWl0ZW5hbWUiIGF0dHJpYnV0ZSBvbiB0aGUgPHRlc3RuZz4gYW50IHRhc2ssIGRvY3VtZW50ZWQgYXQKICMgPGh0dHA6Ly90ZXN0bmcub3JnL2FudC5odG1sPi4KIHRlc3RzdWl0ZS5uYW1lPWJ2CiAKLSMgVWx0aW1hdGVseSwgdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgaXMgcGFzc2VkIGFzIHRoZSB2YWx1ZSBvZiB0aGUgCisjIFVsdGltYXRlbHksIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IGlzIHBhc3NlZCBhcyB0aGUgdmFsdWUgb2YgdGhlCiAjICJ0ZXN0bmFtZSIgYXR0cmlidXRlIG9uIHRoZSA8dGVzdG5nPiBhbnQgdGFzay4KIHRlc3RuZy50ZXN0Lm5hbWU9YnZfc2VydmxldF9pbnRlZ3JhdGlvbgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2JlYW4tdmFsaWRhdG9yL2ludGVncmF0aW9uLXRlc3Qtc2VydmxldC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2JlYW4tdmFsaWRhdG9yL2ludGVncmF0aW9uLXRlc3Qtc2VydmxldC9idWlsZC54bWwKaW5kZXggMWMyOWY0Ny4uMmYyZWU5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9iZWFuLXZhbGlkYXRvci9pbnRlZ3JhdGlvbi10ZXN0LXNlcnZsZXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYmVhbi12YWxpZGF0b3IvaW50ZWdyYXRpb24tdGVzdC1zZXJ2bGV0L2J1aWxkLnhtbApAQCAtMjAsOCArMjAsOCBAQAogPHByb2plY3QgbmFtZT0iaGVsbG8tanNwIiBkZWZhdWx0PSJkZWZhdWx0IiBiYXNlZGlyPSIuIj4KICAgICA8cHJvcGVydHkgZmlsZT0iYnVpbGQucHJvcGVydGllcyIvPgogICAgIDxwcm9wZXJ0eSBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC8ke2RlcGxveS5wbGF0Zm9ybX0tY29uZmlnLnByb3BlcnRpZXMiLz4KLSAgIAotICAgIAorCisKICAgICA8ZGVzY3JpcHRpb24+CiAKIEJ1aWxkcywgdGVzdHMsIGFuZCBydW5zIGFuIGludGVncmF0aW9uIHRlc3QgdG8gdmVyaWZ5IHRoYXQgdGhlIHdheQpAQCAtMzcsNyArMzcsNyBAQAogICBhIGpha2FydGEudmFsaWRhdGlvbi5WYWxpZGF0b3IgaW5zdGFuY2UsIHdoaWNoIGl0IHRoZW4gcHV0cyBpbiB0aGUKICAgQ29ubmVjdG9yUmVnaXN0cnkuCiAKLSAgSW4gbWV0aG9kIHJlZ2lzdGVyQmVhblZhbGlkYXRvcigpLCAKKyAgSW4gbWV0aG9kIHJlZ2lzdGVyQmVhblZhbGlkYXRvcigpLAogCiAgVmFsaWRhdG9yIGJlYW5WYWxpZGF0b3IgPSBudWxsOwogICAgICAgICAgICAgVmFsaWRhdG9yRmFjdG9yeSB2YWxpZGF0b3JGYWN0b3J5ID0gbnVsbDsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvckNvbnRleHQgdmFsaWRhdG9yQ29udGV4dCA9IHZhbGlkYXRvckZhY3RvcnkudXNpbmdDb250ZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBiZWFuVmFsaWRhdG9yID0gdmFsaWRhdG9yQ29udGV4dC5nZXRWYWxpZGF0b3IoKTsKIAotICBmaWxlTmFtZSBpcyB0aGUgbmFtZSBvZiBhIGZpbGUgY29uZm9ybWluZyB0byAKKyAgZmlsZU5hbWUgaXMgdGhlIG5hbWUgb2YgYSBmaWxlIGNvbmZvcm1pbmcgdG8KIAogICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYm9zcy5vcmcveG1sL25zL2phdmF4L3ZhbGlkYXRpb24vbWFwcGluZyB2YWxpZGF0aW9uLW1hcHBpbmctMS4wLnhzZCIKIApAQCAtODYsNyArODYsNyBAQAogCiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0cmFpbnRWaW9sYXRpb25zICE9IG51bGwgQU5ELnNpemUoKSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgQ29uc3RyYWludFZpb2xhdGlvbkV4Y2VwdGlvbiBjdmUgPSBuZXcgQ29uc3RyYWludFZpb2xhdGlvbkV4Y2VwdGlvbihjb25zdHJhaW50VmlvbGF0aW9ucyk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBtc2cgPSBuZXcgU3RyaW5nQnVmZmVyKCk7ICAgIAorICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgbXNnID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogCiAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yIGl0ID0gY29uc3RyYWludFZpb2xhdGlvbnMuaXRlcmF0b3IoKTsKICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewpAQCAtMTA2LDM2ICsxMDYsMzYgQEAKICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5GSU5FU1QsICJObyBCZWFuIFZhbGlkYXRvciBpcyBhdmFpbGFibGUgZm9yIFJBUiBbICIgKyByYXJOYW1lICsgIiBdIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9ICAKKyAgICAgICAgfQogCiAKICAgICA8L2Rlc2NyaXB0aW9uPgotICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4gICAKKyAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC8ke2RlcGxveS5wbGF0Zm9ybX0tdGFyZ2V0cy54bWwiLz4KLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJ1bnRlc3QsdW5kZXBsb3kiIC8+ICAgICAgICAKKworICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxkZXBsb3kscnVudGVzdCx1bmRlcGxveSIgLz4KICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWRlcGxveSIgZGVwZW5kcz0iYnVpbGQsZGVwbG95IiAvPgotICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlLXRlc3RzIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1pbXBsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+IAorCisgICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudGVzdC1pbXBsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RuZy50ZXN0Lm5hbWUiIHZhbHVlPSIke3Rlc3RuZy50ZXN0Lm5hbWV9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0bmcudGVzdGNsaWVudCIgdmFsdWU9IkludGVncmF0aW9uQlZTZXJ2bGV0VGVzdE5HIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAgCisKICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgCisKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9iZWFuLXZhbGlkYXRvci9pbnRlZ3JhdGlvbi10ZXN0LXNlcnZsZXQvbWV0YWRhdGEvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYmVhbi12YWxpZGF0b3IvaW50ZWdyYXRpb24tdGVzdC1zZXJ2bGV0L21ldGFkYXRhL3dlYi54bWwKaW5kZXggY2FkNTc1NS4uYjA4MzQzNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9iZWFuLXZhbGlkYXRvci9pbnRlZ3JhdGlvbi10ZXN0LXNlcnZsZXQvbWV0YWRhdGEvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2JlYW4tdmFsaWRhdG9yL2ludGVncmF0aW9uLXRlc3Qtc2VydmxldC9tZXRhZGF0YS93ZWIueG1sCkBAIC0xOCw3ICsxOCw3IEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMy4wIiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCI+CiAgICAgPHNlcnZsZXQ+CiAgICAgICA8c2VydmxldC1uYW1lPkJWSW50ZWdyYXRpb25UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgpAQCAtNDMsNyArNDMsNyBAQAogICAgICZsdDtyZXNvdXJjZS1lbnYtcmVmLW5hbWUmZ3Q7amF2YTpjb21wL1ZhbGlkYXRvciZsdDsvcmVzb3VyY2UtZW52LXJlZi1uYW1lJmd0OwogICAgICZsdDtyZXNvdXJjZS1lbnYtcmVmLXR5cGUmZ3Q7amFrYXJ0YS52YWxpZGF0aW9uLlZhbGlkYXRvciZsdDsvcmVzb3VyY2UtZW52LXJlZi10eXBlJmd0OwogICAmbHQ7L3Jlc291cmNlLWVudi1yZWYmZ3Q7Ci0gIAorCiAgICZsdDtyZXNvdXJjZS1lbnYtcmVmJmd0OwogICAgICZsdDtyZXNvdXJjZS1lbnYtcmVmLW5hbWUmZ3Q7amF2YTpjb21wL1ZhbGlkYXRvckZhY3RvcnkmbHQ7L3Jlc291cmNlLWVudi1yZWYtbmFtZSZndDsKICAgICAmbHQ7cmVzb3VyY2UtZW52LXJlZi10eXBlJmd0O2pha2FydGEudmFsaWRhdGlvbi5WYWxpZGF0b3JGYWN0b3J5Jmx0Oy9yZXNvdXJjZS1lbnYtcmVmLXR5cGUmZ3Q7CkBAIC01MSw1ICs1MSw1IEBACiAKIC0tPgogCi0gICAgCisKIDwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYmVhbi12YWxpZGF0b3IvaW50ZWdyYXRpb24tdGVzdC1zZXJ2bGV0L3NyYy9qYXZhL2ludGVncmF0aW9uX3Rlc3Rfc2VydmxldC9CVkludGVncmF0aW9uVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYmVhbi12YWxpZGF0b3IvaW50ZWdyYXRpb24tdGVzdC1zZXJ2bGV0L3NyYy9qYXZhL2ludGVncmF0aW9uX3Rlc3Rfc2VydmxldC9CVkludGVncmF0aW9uVGVzdFNlcnZsZXQuamF2YQppbmRleCA0N2NkZWIwLi41NTcyNWQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2JlYW4tdmFsaWRhdG9yL2ludGVncmF0aW9uLXRlc3Qtc2VydmxldC9zcmMvamF2YS9pbnRlZ3JhdGlvbl90ZXN0X3NlcnZsZXQvQlZJbnRlZ3JhdGlvblRlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9iZWFuLXZhbGlkYXRvci9pbnRlZ3JhdGlvbi10ZXN0LXNlcnZsZXQvc3JjL2phdmEvaW50ZWdyYXRpb25fdGVzdF9zZXJ2bGV0L0JWSW50ZWdyYXRpb25UZXN0U2VydmxldC5qYXZhCkBAIC02MiwxMyArNjIsMTMgQEAKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKICAgICAgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIG91dC5wcmludCgiPGh0bWw+PGhlYWQ+PHRpdGxlPlNpbXBsZUJWU2VydmxldDwvdGl0bGU+PC9oZWFkPjxib2R5PiIpOwotICAgICAgICAKKwogICAgICAgICBqYWthcnRhLnZhbGlkYXRpb24uVmFsaWRhdG9yIGJlYW5WYWxpZGF0b3IgPSBjb25maWd1cmVWYWxpZGF0aW9uKHJlcSwgcmVzcCk7CiAKICAgICAgICAgb3V0LnByaW50KCI8aDE+Iik7CiAgICAgICAgIG91dC5wcmludCgiVmFsaWRhdGluZyBwZXJzb24gY2xhc3MgdXNpbmcgdmFsaWRhdGVWYWx1ZSB3aXRoIHZhbGlkIHByb3BlcnR5Iik7CiAgICAgICAgIG91dC5wcmludCgiPC9oMT4iKTsKLQkKKwogICAgICAgICBMaXN0PFN0cmluZz4gbGlzdE9mU3RyaW5nID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CiAgICAgICAgIGxpc3RPZlN0cmluZy5hZGQoIm9uZSIpOwogICAgICAgICBsaXN0T2ZTdHJpbmcuYWRkKCJ0d28iKTsKQEAgLTc2LDcgKzc2LDcgQEAKIAogICAgICAgICBTZXQ8Q29uc3RyYWludFZpb2xhdGlvbjxQZXJzb24+PiB2aW9sYXRpb25zID0KICAgICAgICAgICAgICAgICBiZWFuVmFsaWRhdG9yLnZhbGlkYXRlVmFsdWUoUGVyc29uLmNsYXNzLCAibGlzdE9mU3RyaW5nIiwgbGlzdE9mU3RyaW5nKTsKLSAgICAgICAgCisKICAgICAgICAgcHJpbnRDb25zdHJhaW50VmlvbGF0aW9ucyhvdXQsIHZpb2xhdGlvbnMsICJjYXNlMSIpOwogCiAgICAgICAgIG91dC5wcmludCgiPGgxPiIpOwpAQCAtOTMsMjggKzkzLDI4IEBACiAgICAgICAgICAgICBvdXQucHJpbnQoIjwvcD4iKTsKICAgICAgICAgfQogICAgICAgICBQZXJzb24gcGVyc29uID0gbmV3IFBlcnNvbigpOwotICAgICAgICAKKwogICAgICAgICBvdXQucHJpbnQoIjxoMT4iKTsKICAgICAgICAgb3V0LnByaW50KCJWYWxpZGF0aW5nIGludmFsaWQgcGVyc29uIGluc3RhbmNlIHVzaW5nIHZhbGlkYXRlLiIpOwogICAgICAgICBvdXQucHJpbnQoIjwvaDE+Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHZpb2xhdGlvbnMgPSBiZWFuVmFsaWRhdG9yLnZhbGlkYXRlKHBlcnNvbik7Ci0gICAgICAgIAorCiAgICAgICAgIHByaW50Q29uc3RyYWludFZpb2xhdGlvbnMob3V0LCB2aW9sYXRpb25zLCAiY2FzZTMiKTsKLSAgICAgICAgCisKICAgICAgICAgb3V0LnByaW50KCI8aDE+Iik7CiAgICAgICAgIG91dC5wcmludCgiVmFsaWRhdGluZyB2YWxpZCBwZXJzb24uIik7CiAgICAgICAgIG91dC5wcmludCgiPC9oMT4iKTsKLSAgICAgICAgCisKICAgICAgICAgcGVyc29uLnNldEZpcnN0TmFtZSgiSm9obiIpOwogICAgICAgICBwZXJzb24uc2V0TGFzdE5hbWUoIllheWEiKTsKICAgICAgICAgcGVyc29uLnNldExpc3RPZlN0cmluZyhsaXN0T2ZTdHJpbmcpOwotICAgICAgICAKKwogICAgICAgICB2aW9sYXRpb25zID0gYmVhblZhbGlkYXRvci52YWxpZGF0ZShwZXJzb24pOwogICAgICAgICBwcmludENvbnN0cmFpbnRWaW9sYXRpb25zKG91dCwgdmlvbGF0aW9ucywgImNhc2U0Iik7Ci0gICAgICAgIAorCiAgICAgICAgIG91dC5wcmludCgiPC9ib2R5PjwvaHRtbD4iKTsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcHJpbnRDb25zdHJhaW50VmlvbGF0aW9ucyhQcmludFdyaXRlciBvdXQsCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2JlYW4tdmFsaWRhdG9yL2ludGVncmF0aW9uLXRlc3Qtc2VydmxldC9zcmMvamF2YS9pbnRlZ3JhdGlvbl90ZXN0X3NlcnZsZXQvUGVyc29uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2JlYW4tdmFsaWRhdG9yL2ludGVncmF0aW9uLXRlc3Qtc2VydmxldC9zcmMvamF2YS9pbnRlZ3JhdGlvbl90ZXN0X3NlcnZsZXQvUGVyc29uLmphdmEKaW5kZXggMjMyZGM3My4uMjUyMmViYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9iZWFuLXZhbGlkYXRvci9pbnRlZ3JhdGlvbi10ZXN0LXNlcnZsZXQvc3JjL2phdmEvaW50ZWdyYXRpb25fdGVzdF9zZXJ2bGV0L1BlcnNvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYmVhbi12YWxpZGF0b3IvaW50ZWdyYXRpb24tdGVzdC1zZXJ2bGV0L3NyYy9qYXZhL2ludGVncmF0aW9uX3Rlc3Rfc2VydmxldC9QZXJzb24uamF2YQpAQCAtNTYsNiArNTYsNiBAQAogICAgIH0KIAogCi0gICAgCisKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9iZWFuLXZhbGlkYXRvci9pbnRlZ3JhdGlvbi10ZXN0LXNlcnZsZXQvc3JjL2phdmEvaW50ZWdyYXRpb25fdGVzdF9zZXJ2bGV0L1ZhbGlkYXRvckZhY3RvcnlJbmplY3Rpb25UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9iZWFuLXZhbGlkYXRvci9pbnRlZ3JhdGlvbi10ZXN0LXNlcnZsZXQvc3JjL2phdmEvaW50ZWdyYXRpb25fdGVzdF9zZXJ2bGV0L1ZhbGlkYXRvckZhY3RvcnlJbmplY3Rpb25UZXN0U2VydmxldC5qYXZhCmluZGV4IDA4NzU3NDQuLjdhMTFmNDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYmVhbi12YWxpZGF0b3IvaW50ZWdyYXRpb24tdGVzdC1zZXJ2bGV0L3NyYy9qYXZhL2ludGVncmF0aW9uX3Rlc3Rfc2VydmxldC9WYWxpZGF0b3JGYWN0b3J5SW5qZWN0aW9uVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2JlYW4tdmFsaWRhdG9yL2ludGVncmF0aW9uLXRlc3Qtc2VydmxldC9zcmMvamF2YS9pbnRlZ3JhdGlvbl90ZXN0X3NlcnZsZXQvVmFsaWRhdG9yRmFjdG9yeUluamVjdGlvblRlc3RTZXJ2bGV0LmphdmEKQEAgLTQ4LDExICs0OCwxMSBAQAogICAgICAgICBvdXQucHJpbnQoIjxwPiIpOwogICAgICAgICBvdXQucHJpbnQoIk9idGFpbmVkIFZhbGlkYXRvckZhY3Rvcnk6ICIgKyB2YWxpZGF0b3JGYWN0b3J5ICsgIi4iKTsKICAgICAgICAgb3V0LnByaW50KCI8L3A+Iik7Ci0gICAgICAgIAorCiAgICAgICAgIG91dC5wcmludCgiPGgxPiIpOwogICAgICAgICBvdXQucHJpbnQoIlZhbGlkYXRpbmcgcGVyc29uIGNsYXNzIHVzaW5nIHZhbGlkYXRlVmFsdWUgd2l0aCB2YWxpZCBwcm9wZXJ0eSIpOwogICAgICAgICBvdXQucHJpbnQoIjwvaDE+Iik7Ci0JCisKICAgICAgICAgTGlzdDxTdHJpbmc+IGxpc3RPZlN0cmluZyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwogICAgICAgICBsaXN0T2ZTdHJpbmcuYWRkKCJvbmUiKTsKICAgICAgICAgbGlzdE9mU3RyaW5nLmFkZCgidHdvIik7CkBAIC02MCw3ICs2MCw3IEBACiAKICAgICAgICAgU2V0PENvbnN0cmFpbnRWaW9sYXRpb248UGVyc29uPj4gdmlvbGF0aW9ucyA9CiAgICAgICAgICAgICAgICAgYmVhblZhbGlkYXRvci52YWxpZGF0ZVZhbHVlKFBlcnNvbi5jbGFzcywgImxpc3RPZlN0cmluZyIsIGxpc3RPZlN0cmluZyk7Ci0gICAgICAgIAorCiAgICAgICAgIHByaW50Q29uc3RyYWludFZpb2xhdGlvbnMob3V0LCB2aW9sYXRpb25zLCAiY2FzZTEiKTsKIAogICAgICAgICBvdXQucHJpbnQoIjxoMT4iKTsKQEAgLTc3LDI4ICs3NywyOCBAQAogICAgICAgICAgICAgb3V0LnByaW50KCI8L3A+Iik7CiAgICAgICAgIH0KICAgICAgICAgUGVyc29uIHBlcnNvbiA9IG5ldyBQZXJzb24oKTsKLSAgICAgICAgCisKICAgICAgICAgb3V0LnByaW50KCI8aDE+Iik7CiAgICAgICAgIG91dC5wcmludCgiVmFsaWRhdGluZyBpbnZhbGlkIHBlcnNvbiBpbnN0YW5jZSB1c2luZyB2YWxpZGF0ZS4iKTsKICAgICAgICAgb3V0LnByaW50KCI8L2gxPiIpOwotICAgICAgICAKKwogICAgICAgICB2aW9sYXRpb25zID0gYmVhblZhbGlkYXRvci52YWxpZGF0ZShwZXJzb24pOwotICAgICAgICAKKwogICAgICAgICBwcmludENvbnN0cmFpbnRWaW9sYXRpb25zKG91dCwgdmlvbGF0aW9ucywgImNhc2UzIik7Ci0gICAgICAgIAorCiAgICAgICAgIG91dC5wcmludCgiPGgxPiIpOwogICAgICAgICBvdXQucHJpbnQoIlZhbGlkYXRpbmcgdmFsaWQgcGVyc29uLiIpOwogICAgICAgICBvdXQucHJpbnQoIjwvaDE+Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHBlcnNvbi5zZXRGaXJzdE5hbWUoIkpvaG4iKTsKICAgICAgICAgcGVyc29uLnNldExhc3ROYW1lKCJZYXlhIik7CiAgICAgICAgIHBlcnNvbi5zZXRMaXN0T2ZTdHJpbmcobGlzdE9mU3RyaW5nKTsKLSAgICAgICAgCisKICAgICAgICAgdmlvbGF0aW9ucyA9IGJlYW5WYWxpZGF0b3IudmFsaWRhdGUocGVyc29uKTsKICAgICAgICAgcHJpbnRDb25zdHJhaW50VmlvbGF0aW9ucyhvdXQsIHZpb2xhdGlvbnMsICJjYXNlNCIpOwotICAgICAgICAKKwogICAgICAgICBvdXQucHJpbnQoIjwvYm9keT48L2h0bWw+Iik7Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHByaW50Q29uc3RyYWludFZpb2xhdGlvbnMoUHJpbnRXcml0ZXIgb3V0LApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9iZWFuLXZhbGlkYXRvci9pbnRlZ3JhdGlvbi10ZXN0LXNlcnZsZXQvc3JjL3Rlc3QvdGVzdC9idi9zZXJ2bGV0L2ludGVncmF0aW9uL0ludGVncmF0aW9uQlZTZXJ2bGV0VGVzdE5HLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2JlYW4tdmFsaWRhdG9yL2ludGVncmF0aW9uLXRlc3Qtc2VydmxldC9zcmMvdGVzdC90ZXN0L2J2L3NlcnZsZXQvaW50ZWdyYXRpb24vSW50ZWdyYXRpb25CVlNlcnZsZXRUZXN0TkcuamF2YQppbmRleCAzNzJlOWQ1Li5kYjllNzVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2JlYW4tdmFsaWRhdG9yL2ludGVncmF0aW9uLXRlc3Qtc2VydmxldC9zcmMvdGVzdC90ZXN0L2J2L3NlcnZsZXQvaW50ZWdyYXRpb24vSW50ZWdyYXRpb25CVlNlcnZsZXRUZXN0TkcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2JlYW4tdmFsaWRhdG9yL2ludGVncmF0aW9uLXRlc3Qtc2VydmxldC9zcmMvdGVzdC90ZXN0L2J2L3NlcnZsZXQvaW50ZWdyYXRpb24vSW50ZWdyYXRpb25CVlNlcnZsZXRUZXN0TkcuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9CiAgICAgICAgICJidi1zZXJ2bGV0LWludGVncmF0aW9uIjsKLSAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgc3RyQ29udGV4dFJvb3Q9ImludGVncmF0aW9uLXRlc3Qtc2VydmxldCI7CiAKICAgICBzdGF0aWMgU3RyaW5nIHJlc3VsdCA9ICIiOwpAQCAtMzYsOSArMzYsOSBAQAogICAgIHB1YmxpYyBJbnRlZ3JhdGlvbkJWU2VydmxldFRlc3RORygpIHsKICAgICAgICAgcmVzdWx0ID0gbnVsbDsKICAgICB9Ci0gICAgCi0gICAgCi0gICAgICAgICAgIAorCisKKwogICAgIC8qCiAgICAgICpJZiB0d28gYXNzZXJ0cyBhcmUgbWVudGlvbmVkIGluIG9uZSBtZXRob2QsIHRoZW4gbGFzdCBhc3NlcnQgaXMgdGFrZW4gaW4KICAgICAgKnRvIGFjY291bnQuCkBAIC01MCw3ICs1MCw3IEBACiAgICAgQFRlc3QoZ3JvdXBzID17ICJwdWxzZSJ9ICkgLy8gdGVzdCBtZXRob2QKICAgICAvL3B1YmxpYyB2b2lkIHdlYnRlc3QoU3RyaW5nIGhvc3QsIFN0cmluZyBwb3J0LCBTdHJpbmcgY29udGV4dHJvb3QpIHRocm93cyBFeGNlcHRpb257CiAgICAgcHVibGljIHZvaWQgZXhlY3V0ZVNlcnZsZXQoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICB0cnl7CiAKICAgICAgICAgICAgIFN0cmluZyB0ZXN0dXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyAiLyIgKyBzdHJDb250ZXh0Um9vdCArICIvdGVzdCI7CkBAIC04MSw3ICs4MSw3IEBACiAgICAgICAgICAgICBCb29sZWFuIHJlZ2V4ZXNGb3VuZFtdID0gbmV3IEJvb2xlYW5bbGVuXTsKIAogICAgICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGxpbmUgaW4gdGhlIGlucHV0LCBsb29wIHRocm91Z2ggZWFjaCBvZiB0aGUgCisgICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggbGluZSBpbiB0aGUgaW5wdXQsIGxvb3AgdGhyb3VnaCBlYWNoIG9mIHRoZQogICAgICAgICAgICAgICAgIC8vIGVsZW1lbnRzIG9mIHJlZ2V4ZXNUb0ZpbmQuICBBdCBsZWFzdCBvbmUgbXVzdCBtYXRjaC4KICAgICAgICAgICAgICAgICBib29sZWFuIGZvdW5kID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CkBAIC05MCwxOSArOTAsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBib29sZWFuIGZvdW5kTWlzc2luZ1JlZ2V4TWF0Y2ggPSBmYWxzZTsKICAgICAgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBudWxsOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT0gcmVnZXhlc0ZvdW5kW2ldIHx8CiAgICAgICAgICAgICAgICAgICAgIEJvb2xlYW4uRkFMU0UgPT0gcmVnZXhlc0ZvdW5kW2ldKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvdW5kTWlzc2luZ1JlZ2V4TWF0Y2ggPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAiVW5hYmxlIHRvIGZpbmQgbWF0Y2ggZm9yIHJlZ2V4ICIgKyAKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gIlVuYWJsZSB0byBmaW5kIG1hdGNoIGZvciByZWdleCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdleGVzVG9GaW5kW2ldICsgIiBpbiBvdXRwdXQgZnJvbSByZXF1ZXN0IHRvICIgKyB0ZXN0dXJsOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIWZvdW5kTWlzc2luZ1JlZ2V4TWF0Y2gsIGVycm9yTWVzc2FnZSk7CiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYmVhbi12YWxpZGF0b3Ivc2ltcGxlLWJ2LXNlcnZsZXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYmVhbi12YWxpZGF0b3Ivc2ltcGxlLWJ2LXNlcnZsZXQvYnVpbGQucHJvcGVydGllcwppbmRleCBjMzU1MjJlLi45ZTNiMDJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2JlYW4tdmFsaWRhdG9yL3NpbXBsZS1idi1zZXJ2bGV0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9iZWFuLXZhbGlkYXRvci9zaW1wbGUtYnYtc2VydmxldC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNiwxMyArMTYsMTMgQEAKIAogYXBwLmZpbGU9c2ltcGxlLWJ2LXNlcnZsZXQKIAotIyBQYXNzZWQgYXMgYSBwYXJhbWV0ZXIgdG8gZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIHRhcmdldCBydW50ZXN0LWltcGwuIAotIyBVbHRpbWF0ZWx5LCB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSBpcyBwYXNzZWQgYXMgdGhlIHZhbHVlIG9mIHRoZSAKKyMgUGFzc2VkIGFzIGEgcGFyYW1ldGVyIHRvIGdmcHJvamVjdC9idWlsZC1pbXBsLnhtbCB0YXJnZXQgcnVudGVzdC1pbXBsLgorIyBVbHRpbWF0ZWx5LCB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSBpcyBwYXNzZWQgYXMgdGhlIHZhbHVlIG9mIHRoZQogIyAic3VpdGVuYW1lIiBhdHRyaWJ1dGUgb24gdGhlIDx0ZXN0bmc+IGFudCB0YXNrLCBkb2N1bWVudGVkIGF0CiAjIDxodHRwOi8vdGVzdG5nLm9yZy9hbnQuaHRtbD4uCiB0ZXN0c3VpdGUubmFtZT1idgogCi0jIFVsdGltYXRlbHksIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IGlzIHBhc3NlZCBhcyB0aGUgdmFsdWUgb2YgdGhlIAorIyBVbHRpbWF0ZWx5LCB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSBpcyBwYXNzZWQgYXMgdGhlIHZhbHVlIG9mIHRoZQogIyAidGVzdG5hbWUiIGF0dHJpYnV0ZSBvbiB0aGUgPHRlc3RuZz4gYW50IHRhc2suCiB0ZXN0bmcudGVzdC5uYW1lPWJ2X3NlcnZsZXRfc2ltcGxlCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYmVhbi12YWxpZGF0b3Ivc2ltcGxlLWJ2LXNlcnZsZXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9iZWFuLXZhbGlkYXRvci9zaW1wbGUtYnYtc2VydmxldC9idWlsZC54bWwKaW5kZXggMjk5YTMyYi4uNzdmZTVkNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9iZWFuLXZhbGlkYXRvci9zaW1wbGUtYnYtc2VydmxldC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9iZWFuLXZhbGlkYXRvci9zaW1wbGUtYnYtc2VydmxldC9idWlsZC54bWwKQEAgLTIwLDM1ICsyMCwzNSBAQAogPHByb2plY3QgbmFtZT0iaGVsbG8tanNwIiBkZWZhdWx0PSJkZWZhdWx0IiBiYXNlZGlyPSIuIj4KICAgICA8cHJvcGVydHkgZmlsZT0iYnVpbGQucHJvcGVydGllcyIvPgogICAgIDxwcm9wZXJ0eSBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC8ke2RlcGxveS5wbGF0Zm9ybX0tY29uZmlnLnByb3BlcnRpZXMiLz4KLSAgIAotICAgIAorCisKICAgICA8ZGVzY3JpcHRpb24+QnVpbGRzLCB0ZXN0cywgYW5kIHJ1bnMgdGhlIHByb2plY3QgSGVsbG8gSlNQIEFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KLSAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+ICAgCisgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LXRhcmdldHMueG1sIi8+Ci0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW50ZXN0LHVuZGVwbG95IiAvPiAgICAgICAgCisKKyAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJ1bnRlc3QsdW5kZXBsb3kiIC8+CiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1kZXBsb3kiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSIgLz4KLSAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZS10ZXN0cyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtaW1wbCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS0ke2RlcGxveS5wbGF0Zm9ybX0taW1wbCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQgIG5hbWU9InJ1bnRlc3QiPiAKKworICAgIDx0YXJnZXQgIG5hbWU9InJ1bnRlc3QiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bnRlc3QtaW1wbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9IiR7Y29udGV4dHJvb3R9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0bmcudGVzdC5uYW1lIiB2YWx1ZT0iJHt0ZXN0bmcudGVzdC5uYW1lfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0idGVzdG5nLnRlc3RjbGllbnQiIHZhbHVlPSJTaW1wbGVCVlNlcnZsZXRUZXN0TkciLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgICAgICAKKwogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktJHtkZXBsb3kucGxhdGZvcm19LWltcGwiLz4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICAKKworCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2JlYW4tdmFsaWRhdG9yL3NpbXBsZS1idi1zZXJ2bGV0L21ldGFkYXRhL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2JlYW4tdmFsaWRhdG9yL3NpbXBsZS1idi1zZXJ2bGV0L21ldGFkYXRhL3dlYi54bWwKaW5kZXggY2I4NjYwOC4uZDgyZGQ5MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9iZWFuLXZhbGlkYXRvci9zaW1wbGUtYnYtc2VydmxldC9tZXRhZGF0YS93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYmVhbi12YWxpZGF0b3Ivc2ltcGxlLWJ2LXNlcnZsZXQvbWV0YWRhdGEvd2ViLnhtbApAQCAtMTgsNyArMTgsNyBAQAogLS0+CiAKIDx3ZWItYXBwIHZlcnNpb249IjIuNSIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICAgIDxzZXJ2bGV0PgogICAgICAgPHNlcnZsZXQtbmFtZT5TaW1wbGVCVlNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KQEAgLTI4LDUgKzI4LDUgQEAKICAgICAgICAgPHNlcnZsZXQtbmFtZT5TaW1wbGVCVlNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi90ZXN0Lyo8L3VybC1wYXR0ZXJuPgogICAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgIAorCiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2JlYW4tdmFsaWRhdG9yL3NpbXBsZS1idi1zZXJ2bGV0L3NyYy9qYXZhL3NpbXBsZV9idl9zZXJ2bGV0L1BlcnNvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9iZWFuLXZhbGlkYXRvci9zaW1wbGUtYnYtc2VydmxldC9zcmMvamF2YS9zaW1wbGVfYnZfc2VydmxldC9QZXJzb24uamF2YQppbmRleCBmZmQ1OWM0Li45MDBmMzZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2JlYW4tdmFsaWRhdG9yL3NpbXBsZS1idi1zZXJ2bGV0L3NyYy9qYXZhL3NpbXBsZV9idl9zZXJ2bGV0L1BlcnNvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYmVhbi12YWxpZGF0b3Ivc2ltcGxlLWJ2LXNlcnZsZXQvc3JjL2phdmEvc2ltcGxlX2J2X3NlcnZsZXQvUGVyc29uLmphdmEKQEAgLTU3LDYgKzU3LDYgQEAKICAgICB9CiAKIAotICAgIAorCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYmVhbi12YWxpZGF0b3Ivc2ltcGxlLWJ2LXNlcnZsZXQvc3JjL2phdmEvc2ltcGxlX2J2X3NlcnZsZXQvU2ltcGxlQlZTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2JlYW4tdmFsaWRhdG9yL3NpbXBsZS1idi1zZXJ2bGV0L3NyYy9qYXZhL3NpbXBsZV9idl9zZXJ2bGV0L1NpbXBsZUJWU2VydmxldC5qYXZhCmluZGV4IGQ4YTk5ZDkuLjhmN2EyZmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYmVhbi12YWxpZGF0b3Ivc2ltcGxlLWJ2LXNlcnZsZXQvc3JjL2phdmEvc2ltcGxlX2J2X3NlcnZsZXQvU2ltcGxlQlZTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9iZWFuLXZhbGlkYXRvci9zaW1wbGUtYnYtc2VydmxldC9zcmMvamF2YS9zaW1wbGVfYnZfc2VydmxldC9TaW1wbGVCVlNlcnZsZXQuamF2YQpAQCAtMTA0LDEwICsxMDQsMTAgQEAKICAgICAgICAgICAgIG91dC5wcmludCgiY2FzZTI6IGNhdWdodCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uICBNZXNzYWdlOiAiICsKICAgICAgICAgICAgICAgICAgICAgaWFlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICBvdXQucHJpbnQoIjwvcD4iKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uOiBtdXN0IHBhc3MgdGVzdCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb246IG11c3QgcGFzcyB0ZXN0Iik7CiAgICAgICAgIH1jYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNoZWNrOiBpZiBhbnkgb3RoZXIgZXhjZXB0aW9uPyIpOwotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICAgICAgUGVyc29uIHBlcnNvbiA9IG5ldyBQZXJzb24oKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9iZWFuLXZhbGlkYXRvci9zaW1wbGUtYnYtc2VydmxldC9zcmMvdGVzdC90ZXN0L2J2L3NlcnZsZXQvc2ltcGxlL1NpbXBsZUJWU2VydmxldFRlc3RORy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9iZWFuLXZhbGlkYXRvci9zaW1wbGUtYnYtc2VydmxldC9zcmMvdGVzdC90ZXN0L2J2L3NlcnZsZXQvc2ltcGxlL1NpbXBsZUJWU2VydmxldFRlc3RORy5qYXZhCmluZGV4IDQ5NjM4MGIuLjg0NWE5ZTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYmVhbi12YWxpZGF0b3Ivc2ltcGxlLWJ2LXNlcnZsZXQvc3JjL3Rlc3QvdGVzdC9idi9zZXJ2bGV0L3NpbXBsZS9TaW1wbGVCVlNlcnZsZXRUZXN0TkcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2JlYW4tdmFsaWRhdG9yL3NpbXBsZS1idi1zZXJ2bGV0L3NyYy90ZXN0L3Rlc3QvYnYvc2VydmxldC9zaW1wbGUvU2ltcGxlQlZTZXJ2bGV0VGVzdE5HLmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPQogICAgICAgICAiYnYtc2VydmxldC1zaW1wbGUiOwotICAgCisKICAgICBwcml2YXRlIFN0cmluZyBzdHJDb250ZXh0Um9vdD0ic2ltcGxlLWJ2LXNlcnZsZXQiOwogCiAgICAgc3RhdGljIFN0cmluZyByZXN1bHQgPSAiIjsKQEAgLTM2LDkgKzM2LDkgQEAKICAgICBwdWJsaWMgU2ltcGxlQlZTZXJ2bGV0VGVzdE5HKCkgewogICAgICAgICByZXN1bHQgPSBudWxsOwogICAgIH0KLSAgICAKLSAgICAKLSAgICAgICAgICAgCisKKworCiAgICAgLyoKICAgICAgKklmIHR3byBhc3NlcnRzIGFyZSBtZW50aW9uZWQgaW4gb25lIG1ldGhvZCwgdGhlbiBsYXN0IGFzc2VydCBpcyB0YWtlbiBpbgogICAgICAqdG8gYWNjb3VudC4KQEAgLTUwLDcgKzUwLDcgQEAKICAgICBAVGVzdChncm91cHMgPXsgInB1bHNlIn0gKSAvLyB0ZXN0IG1ldGhvZAogICAgIC8vcHVibGljIHZvaWQgd2VidGVzdChTdHJpbmcgaG9zdCwgU3RyaW5nIHBvcnQsIFN0cmluZyBjb250ZXh0cm9vdCkgdGhyb3dzIEV4Y2VwdGlvbnsKICAgICBwdWJsaWMgdm9pZCB0ZXN0X0JWXzEwKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgdHJ5ewogCiAgICAgICAgICAgICBTdHJpbmcgdGVzdHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgIi8iICsgc3RyQ29udGV4dFJvb3QgKyAiL3Rlc3QvYnZfMTAiOwpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgIFN0cmluZyB0ZXN0TGluZSA9IG51bGw7CiAgICAgICAgICAgICBTdHJpbmdbXSByZWdleGVzVG9GaW5kID0gewotCQkiKD9zKSg/bSkuKk9idGFpbmVkIFZhbGlkYXRvckZhY3Rvcnk6IG9yZy5oaWJlcm5hdGUudmFsaWRhdG9yLihpbnRlcm5hbC4pKmVuZ2luZS5WYWxpZGF0b3JGYWN0b3J5SW1wbC4qIiwKKyAgICAgICAgIig/cykoP20pLipPYnRhaW5lZCBWYWxpZGF0b3JGYWN0b3J5OiBvcmcuaGliZXJuYXRlLnZhbGlkYXRvci4oaW50ZXJuYWwuKSplbmdpbmUuVmFsaWRhdG9yRmFjdG9yeUltcGwuKiIsCiAgICAgICAgICAgICAgICAgIig/cykoP20pLipjYXNlMTogTm8gQ29uc3RyYWludFZpb2xhdGlvbnMgZm91bmQuKiIsCiAgICAgICAgICAgICAgICAgIig/cykoP20pLipjYXNlMjogY2F1Z2h0IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi4qIiwKICAgICAgICAgICAgICAgICAiKD9zKSg/bSkuKmNhc2UzOiBDb25zdHJhaW50VmlvbGF0aW9uOiBtZXNzYWdlOiBtdXN0IG5vdCBiZSBudWxsIHByb3BlcnR5UGF0aDogbGlzdE9mU3RyaW5nLioiLApAQCAtODUsNyArODUsNyBAQAogICAgICAgICAgICAgICAgIHJzcENvbnRlbnQuYXBwZW5kKGxpbmUpOwogICAgICAgICAgICAgICAgIHJzcENvbnRlbnQuYXBwZW5kKCJcbiAiKTsKIAotICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGxpbmUgaW4gdGhlIGlucHV0LCBsb29wIHRocm91Z2ggZWFjaCBvZiB0aGUgCisgICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggbGluZSBpbiB0aGUgaW5wdXQsIGxvb3AgdGhyb3VnaCBlYWNoIG9mIHRoZQogICAgICAgICAgICAgICAgIC8vIGVsZW1lbnRzIG9mIHJlZ2V4ZXNUb0ZpbmQuICBBdCBsZWFzdCBvbmUgbXVzdCBtYXRjaC4KICAgICAgICAgICAgICAgICBib29sZWFuIGZvdW5kID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CkBAIC05NCwxNiArOTQsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAKKwogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlOiAiICsgcnNwQ29udGVudC50b1N0cmluZygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBib29sZWFuIGZvdW5kTWlzc2luZ1JlZ2V4TWF0Y2ggPSBmYWxzZTsKICAgICAgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBudWxsOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT0gcmVnZXhlc0ZvdW5kW2ldIHx8CiAgICAgICAgICAgICAgICAgICAgIEJvb2xlYW4uRkFMU0UgPT0gcmVnZXhlc0ZvdW5kW2ldKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvdW5kTWlzc2luZ1JlZ2V4TWF0Y2ggPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAiVW5hYmxlIHRvIGZpbmQgbWF0Y2ggZm9yIHJlZ2V4ICIgKyAKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gIlVuYWJsZSB0byBmaW5kIG1hdGNoIGZvciByZWdleCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdleGVzVG9GaW5kW2ldICsgIiBpbiBvdXRwdXQgZnJvbSByZXF1ZXN0IHRvICIgKyB0ZXN0dXJsOwogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvbnRlbnQ6ICIpOwogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocnNwQ29udGVudC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9idWlsZC54bWwKaW5kZXggNWExNzBiNy4uMDllNzM0MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9idWlsZC54bWwKQEAgLTQwMiw3ICs0MDIsNyBAQAogICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2J1aWxkLmNsYXNzLmRpcn0vLi4vRUpCX0VtYmVkZGVkL2FwcCIgLz4KICAgICAgICAgPC9wYXRoPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPCEtLSBhZGRlZCBmZXcgbWVzc2FnZXMgaW4gb3JkZXIgdG8gc2hvdyB0ZXN0bmcgc3VtbWFyeSBvZiB3c2l0IHJlbGF0ZWQgdGVzdHMgYWxvbmcgd2l0aCBmaW5hbCBzdW1tYXJ5IGFzIHdzaXQgdGVzdHMgYXJlIHJhbiBzZXBlcmF0ZWx5IGFzIGEgd29ya2Fyb3VuZCBmb3IgR0xBU1NGSVNILTIxNjcyIC0tPgogICAgIDx0YXJnZXQgbmFtZT0idGVzdG5nLXN1bW1hcnkiPgogICAgICAgICA8bG9hZGZpbGUgc3JjZmlsZT0icnVudGVzdG5nLm91dHB1dCIgcHJvcGVydHk9InRlc3RuZ19vdXRwdXQiPgpAQCAtNDIwLDE0ICs0MjAsMTQgQEAKICAgICAgICAgICAgICAgICA8dGFpbGZpbHRlciBsaW5lcz0iMyIgLz4KICAgICAgICAgICAgIDwvZmlsdGVyY2hhaW4+CiAgICAgICAgIDwvbG9hZGZpbGU+Ci0gICAgICAgIAorCiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IiAgICAgICAgICAgICAgSmF4d3NGcm9tV3NkbCBUZXN0cyIgLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iJHt0ZXN0bmcxX291dHB1dH0iIC8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IiAgICAgICAgICAgICAgSnNyMTA5dGVzdGVyIFRlc3RzIiAvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSIke3Rlc3RuZzJfb3V0cHV0fSIgLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iJHt0ZXN0bmdfb3V0cHV0fSIgLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDwhLS0gY3JlYXRlZCBuZXcgdGFyZ2V0IGZvciB3ZWItZGlzdHJpYnV0aW9uIHN1bW1hcnkgYXMgaXQgaXMgZGlmZmVyZW50IGZyb20gZ2xhc3NmaXNoIGRpc3RyaWJ1dGlvbiBzdW1tYXJ5LS0+CiAgICAgPHRhcmdldCBuYW1lPSJ0ZXN0bmctc3VtbWFyeV93ZCI+CiAgICAgICAgIDxsb2FkZmlsZSBzcmNmaWxlPSJydW50ZXN0bmcub3V0cHV0IiBwcm9wZXJ0eT0idGVzdG5nX291dHB1dCI+CkBAIC00MzcsNyArNDM3LDcgQEAKICAgICAgICAgPC9sb2FkZmlsZT4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iJHt0ZXN0bmdfb3V0cHV0fSIgLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDwhLS0gYWRkZWQgZmV3IG1lc3NhZ2VzIGluIG9yZGVyIHRvIHNob3cgdGVzdG5nIHN1bW1hcnkgb2Ygd3NpdCByZWxhdGVkIHRlc3RzIGFsb25nIHdpdGggZmluYWwgc3VtbWFyeSBhcyB3c2l0IHRlc3RzIGFyZSByYW4gc2VwZXJhdGVseSBhcyBhIHdvcmthcm91bmQgZm9yIEdMQVNTRklTSC0yMTY3MiAtLT4KICAgICA8dGFyZ2V0IG5hbWU9InF1aWNrbG9vay1zdW1tYXJ5Ij4KICAgICAgICAgPHRzdGFtcD4KQEAgLTQ4MCw3ICs0ODAsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InF1aWNrbG9vay1yZXBvcnQiIC8+CiAgICAgICAgIDxkZWxldGUgZmlsZT0idmVyc2lvbi5vdXRwdXQiIC8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InF1aWNrbG9vay1zdW1tYXJ5X3dkIj4KICAgICAgICAgPHRzdGFtcD4KICAgICAgICAgICAgIDxmb3JtYXQgcHJvcGVydHk9ImVuZC50aW1lc3RhbXAiIHBhdHRlcm49IkVFIE1NL2RkL3l5eXkgSEg6bW06c3MgenoiIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2NsYXNzbG9hZGVyL2hlbGxvanNmL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svY2xhc3Nsb2FkZXIvaGVsbG9qc2YvYnVpbGQueG1sCmluZGV4IDc5MWU1NDguLmJmYmZhNjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svY2xhc3Nsb2FkZXIvaGVsbG9qc2YvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svY2xhc3Nsb2FkZXIvaGVsbG9qc2YvYnVpbGQueG1sCkBAIC0xOCwxNyArMTgsMTcgQEAKIC0tPgogCiA8cHJvamVjdCBuYW1lPSJoZWxsb2pzZiIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KLSAgICAKKwogICAgIDxwcm9wZXJ0eSBmaWxlPSIke3dzLnJvb3R9L2J1aWxkLnByb3BlcnRpZXMiLz4KICAgICA8cHJvcGVydHkgZmlsZT0iYnVpbGQucHJvcGVydGllcyIvPgogICAgIDxwcm9wZXJ0eSBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC8ke2RlcGxveS5wbGF0Zm9ybX0tY29uZmlnLnByb3BlcnRpZXMiLz4KLSAgICAKKwogICAgIDxkZXNjcmlwdGlvbj5CdWlsZHMsIHRlc3RzLCBhbmQgcnVucyB0aGUgcHJvamVjdCBIZWxsbyBKU1AgQXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgotICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4gICAKKyAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC8ke2RlcGxveS5wbGF0Zm9ybX0tdGFyZ2V0cy54bWwiLz4KLSAgICAKKwogICAgIDxkZXNjcmlwdGlvbj5CdWlsZHMsIHRlc3RzLCBhbmQgcnVucyB0aGUgcHJvamVjdCBIZWxsbyBKU1AgQXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgotICAgIAorCiA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJ1bnRlc3QsdW5kZXBsb3kiIC8+CiA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWRlcGxveSIgZGVwZW5kcz0iYnVpbGQsZGVwbG95IiAvPgogCkBAIC00NSwyMSArNDUsMjEgQEAKICAgICA8L3dhcj4KICAgICA8IS0tIGNvcHkgZmlsZT0iJHtkaXN0LmRpcn0vJHthcHAuZmlsZS5leHR9IiB0b2ZpbGU9Ii4vJHthcHAuZmlsZS5leHR9Ii8gLS0+CiA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktJHtkZXBsb3kucGxhdGZvcm19LWltcGwiLz4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICA8dGFyZ2V0ICBuYW1lPSJydW50ZXN0Ij4gCisKKyAgICA8dGFyZ2V0ICBuYW1lPSJydW50ZXN0Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW50ZXN0LWltcGwiPgogICAgICAgICA8cGFyYW0gbmFtZT0idGVzdG5nLnRlc3QubmFtZSIgdmFsdWU9IiR7dGVzdG5nLnRlc3QubmFtZX0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RuZy50ZXN0Y2xpZW50IiB2YWx1ZT0iaGVsbG9KU0ZUZXN0TkciLz4KICAgICA8L2FudGNhbGw+Ci0gICAgICAgIAorCiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS0ke2RlcGxveS5wbGF0Zm9ybX0taW1wbCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2NsYXNzbG9hZGVyL2hlbGxvanNmL21ldGFkYXRhL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2NsYXNzbG9hZGVyL2hlbGxvanNmL21ldGFkYXRhL3dlYi54bWwKaW5kZXggMDkwZDYwZC4uOWM4MmMzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9jbGFzc2xvYWRlci9oZWxsb2pzZi9tZXRhZGF0YS93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svY2xhc3Nsb2FkZXIvaGVsbG9qc2YvbWV0YWRhdGEvd2ViLnhtbApAQCAtMzQsOCArMzQsOCBAQAogICAgIDxzZXJ2bGV0LWNsYXNzPmpha2FydGEuZmFjZXMud2ViYXBwLkZhY2VzU2VydmxldDwvc2VydmxldC1jbGFzcz4KICAgICA8IS0tIEZvciBEeW5hbWljIEZhY2VzOiAtLT4KICAgICA8aW5pdC1wYXJhbT4KLQk8cGFyYW0tbmFtZT5qYWthcnRhLmZhY2VzLkxJRkVDWUNMRV9JRDwvcGFyYW0tbmFtZT4KLQk8cGFyYW0tdmFsdWU+Y29tLnN1bi5mYWNlcy5saWZlY3ljbGUuUEFSVElBTDwvcGFyYW0tdmFsdWU+CisgICAgPHBhcmFtLW5hbWU+amFrYXJ0YS5mYWNlcy5MSUZFQ1lDTEVfSUQ8L3BhcmFtLW5hbWU+CisgICAgPHBhcmFtLXZhbHVlPmNvbS5zdW4uZmFjZXMubGlmZWN5Y2xlLlBBUlRJQUw8L3BhcmFtLXZhbHVlPgogICAgIDwvaW5pdC1wYXJhbT4KICAgICA8bG9hZC1vbi1zdGFydHVwPjE8L2xvYWQtb24tc3RhcnR1cD4KICAgPC9zZXJ2bGV0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9jbGFzc2xvYWRlci9oZWxsb2pzZi9zcmMvdGVzdC9oZWxsb0pTRlRlc3RORy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9jbGFzc2xvYWRlci9oZWxsb2pzZi9zcmMvdGVzdC9oZWxsb0pTRlRlc3RORy5qYXZhCmluZGV4IGExMmY0YTQuLmRkZmVmYTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svY2xhc3Nsb2FkZXIvaGVsbG9qc2Yvc3JjL3Rlc3QvaGVsbG9KU0ZUZXN0TkcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2NsYXNzbG9hZGVyL2hlbGxvanNmL3NyYy90ZXN0L2hlbGxvSlNGVGVzdE5HLmphdmEKQEAgLTM5LDIxICszOSwyMSBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0KICAgICAgICAgIlNVQ0NFU1NGVUwiOwotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgc3RyQ29udGV4dFJvb3Q9ImhlbGxvanNmIjsKIAogICAgIHN0YXRpYyBTdHJpbmcgcmVzdWx0ID0gIiI7CiAgICAgU3RyaW5nIG1faG9zdD0iIjsKLSAgICBTdHJpbmcgbV9wb3J0PSIiOyAgICAKKyAgICBTdHJpbmcgbV9wb3J0PSIiOwogICAgIC8vSHR0cENsaWVudCBodHRwY2xpZW50ID0gbmV3IEh0dHBDbGllbnQoKTsKLSAgICAKKwogICAgIC8vQFBhcmFtZXRlcnMoeyJob3N0IiwicG9ydCJ9KQogICAgIEBCZWZvcmVNZXRob2QKICAgICBwdWJsaWMgdm9pZCBiZWZvcmVUZXN0KCl7CiAgICAgICAgIG1faG9zdD1TeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAuaG9zdCIpOwogICAgICAgICBtX3BvcnQ9U3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKTsKICAgICB9Ci0gICAgICAgICAgICAKKwogICAgIC8qCiAgICAgICpJZiB0dwogICAgICBvIGFzc2VydHMgYXJlIG1lbnRpb25lZCBpbiBvbmUgbWV0aG9kLCB0aGVuIGxhc3QgYXNzZXJ0IGlzIHRha2VuIGluCkBAIC02NSw3ICs2NSw3IEBACiAgICAgQFRlc3QoZ3JvdXBzID17ICJwdWxzZSJ9ICkgLy8gdGVzdCBtZXRob2QKICAgICAvL3B1YmxpYyB2b2lkIHdlYnRlc3QoU3RyaW5nIGhvc3QsIFN0cmluZyBwb3J0LCBTdHJpbmcgY29udGV4dHJvb3QpIHRocm93cyBFeGNlcHRpb257CiAgICAgcHVibGljIHZvaWQganNmQXBwRGVwbG95ZWRGaXJzdFBhZ2V0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgdHJ5ewogICAgICAgICBTdHJpbmcgdGVzdHVybCA9ICJodHRwOi8vIiArIG1faG9zdCAgKyAiOiIgKyBtX3BvcnQgKyAiLyIrIHN0ckNvbnRleHRSb290ICsgIi9pbmRleC5qc3AiOwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCh0ZXN0dXJsKTsKQEAgLTgwLDMxICs4MCwzMSBAQAogCiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKICAgICAgICAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7Ci0gICAgICAgIFN0cmluZyB0ZXN0TGluZSA9IG51bGw7ICAgICAgICAKKyAgICAgICAgU3RyaW5nIHRlc3RMaW5lID0gbnVsbDsKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIpOwogICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4obGluZSk7CiAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoRVhQRUNURURfUkVTUE9OU0UpIT0tMSl7Ci0gICAgICAgICAgICAgICAgcmVzdWx0PXRydWU7ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmVzdWx0PXRydWU7CiAgICAgICAgICAgICAgICAgdGVzdExpbmUgPSBsaW5lOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIH0gICAgIAotICAgICAgICAgICAgICAgIAorCisgICAgICAgIH0KKwogICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHJlc3VsdCwgdHJ1ZSwiVW5leHBlY3RlZCBIVE1MIik7Ci0gICAgICAgICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KIAogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIGVjaG8oU3RyaW5nIG1zZykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obXNnKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svY2x1c3Rlci9jbHVzdGVyc2V0dXAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9jbHVzdGVyL2NsdXN0ZXJzZXR1cC9idWlsZC54bWwKaW5kZXggOWQzOGRkNy4uMWVjYjEwMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9jbHVzdGVyL2NsdXN0ZXJzZXR1cC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9jbHVzdGVyL2NsdXN0ZXJzZXR1cC9idWlsZC54bWwKQEAgLTIxLDcgKzIxLDcgQEAKIAogPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiLz4KIDxwcm9wZXJ0eSBmaWxlPSIke3dzLnJvb3R9L2J1aWxkLnByb3BlcnRpZXMiLz4KLSAKKwogPGRlc2NyaXB0aW9uPkJ1aWxkcywgdGVzdHMsIGFuZCBydW5zIHRoZSBhc2FkbWluIENMSSByZXN0YXJ0LCBKREJDIGNvbm5lY3Rpb24gcG9vbCB0ZXN0cy48L2Rlc2NyaXB0aW9uPgogICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L3YzLXRhcmdldHMueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2NsdXN0ZXIvY2x1c3RlcnNldHVwL3NyYy90ZXN0L2NsdXN0ZXJzZXR1cC9DbHVzdGVyU2V0dXBUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2NsdXN0ZXIvY2x1c3RlcnNldHVwL3NyYy90ZXN0L2NsdXN0ZXJzZXR1cC9DbHVzdGVyU2V0dXBUZXN0LmphdmEKaW5kZXggNjYxYTk1My4uNDFlZTMyMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9jbHVzdGVyL2NsdXN0ZXJzZXR1cC9zcmMvdGVzdC9jbHVzdGVyc2V0dXAvQ2x1c3RlclNldHVwVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svY2x1c3Rlci9jbHVzdGVyc2V0dXAvc3JjL3Rlc3QvY2x1c3RlcnNldHVwL0NsdXN0ZXJTZXR1cFRlc3QuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICBmaW5hbCBTdHJpbmcgaTJuYW1lID0gImVlaW4yIjsKICAgICAgICAgU3RyaW5nIGkxdXJsID0gImh0dHA6Ly9sb2NhbGhvc3Q6Iitwb3J0MTsKICAgICAgICAgU3RyaW5nIGkydXJsID0gImh0dHA6Ly9sb2NhbGhvc3Q6Iitwb3J0MjsKLSAgICAgICAgCisKICAgICAgICAgcHVibGljIGJvb2xlYW4gcmV0U3RhdHVzID0gZmFsc2UsIHJldDEgPSBmYWxzZSxyZXQyID0gZmFsc2U7CiAKICAgICBAVGVzdApAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICByZXBvcnQodG4gKyAic3RhcnQtbG9jYWwtaW5zdGFuY2UxIiwgYXNhZG1pbigic3RhcnQtbG9jYWwtaW5zdGFuY2UiLCBpMW5hbWUpKTsKICAgICAgICAgcmVwb3J0KHRuICsgInN0YXJ0LWxvY2FsLWluc3RhbmNlMiIsIGFzYWRtaW4oInN0YXJ0LWxvY2FsLWluc3RhbmNlIiwgaTJuYW1lKSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgNSBzZWMuLi4iKTsKLQlUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDUwMDApOworICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoNTAwMCk7CiAgICAgICAgIC8vIGNoZWNrIHRoYXQgdGhlIGluc3RhbmNlcyBhcmUgdGhlcmUKICAgICAgICAgcmVwb3J0KHRuICsgImxpc3QtaW5zdGFuY2VzIiwgYXNhZG1pbigibGlzdC1pbnN0YW5jZXMiKSk7CiAgICAgICAgIHJlcG9ydCh0biArICJnZXRpbmRleDEiLCBtYXRjaFN0cmluZygiR2xhc3NGaXNoIFNlcnZlciIsIGdldFVSTChpMXVybCkpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svY2x1c3Rlci9jbHVzdGVydGVhcmRvd24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9jbHVzdGVyL2NsdXN0ZXJ0ZWFyZG93bi9idWlsZC54bWwKaW5kZXggZDUxNmM5Zi4uYWYyNThhYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9jbHVzdGVyL2NsdXN0ZXJ0ZWFyZG93bi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9jbHVzdGVyL2NsdXN0ZXJ0ZWFyZG93bi9idWlsZC54bWwKQEAgLTIxLDcgKzIxLDcgQEAKIAogPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiLz4KIDxwcm9wZXJ0eSBmaWxlPSIke3dzLnJvb3R9L2J1aWxkLnByb3BlcnRpZXMiLz4KLSAKKwogPGRlc2NyaXB0aW9uPkJ1aWxkcywgdGVzdHMsIGFuZCBydW5zIHRoZSBhc2FkbWluIENMSSByZXN0YXJ0LCBKREJDIGNvbm5lY3Rpb24gcG9vbCB0ZXN0cy48L2Rlc2NyaXB0aW9uPgogICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L3YzLXRhcmdldHMueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2NsdXN0ZXIvY2x1c3RlcnRlYXJkb3duL3NyYy90ZXN0L2NsdXN0ZXJ0ZWFyZG93bi9DbHVzdGVyVGVhcmRvd25UZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2NsdXN0ZXIvY2x1c3RlcnRlYXJkb3duL3NyYy90ZXN0L2NsdXN0ZXJ0ZWFyZG93bi9DbHVzdGVyVGVhcmRvd25UZXN0LmphdmEKaW5kZXggMjQ4NmYwOS4uMDQ5NDkwMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9jbHVzdGVyL2NsdXN0ZXJ0ZWFyZG93bi9zcmMvdGVzdC9jbHVzdGVydGVhcmRvd24vQ2x1c3RlclRlYXJkb3duVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svY2x1c3Rlci9jbHVzdGVydGVhcmRvd24vc3JjL3Rlc3QvY2x1c3RlcnRlYXJkb3duL0NsdXN0ZXJUZWFyZG93blRlc3QuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogICAgICAgICBmaW5hbCBTdHJpbmcgY25hbWUgPSAiZWVjMSI7CiAgICAgICAgIGZpbmFsIFN0cmluZyBpMW5hbWUgPSAiZWVpbjEtd2l0aC1hLXZlcnktdmVyeS12ZXJ5LWxvbmctbmFtZSI7CiAgICAgICAgIGZpbmFsIFN0cmluZyBpMm5hbWUgPSAiZWVpbjIiOwotICAgICAgICAKKwogICAgICAgICBwdWJsaWMgYm9vbGVhbiByZXRTdGF0dXM7CiAKICAgICAgICAgLy8gQnlyb24gTmV2aW5zIE5vdiA0LDIwMTAgLS0gQWRkIHBsZW50eSBvZiBvdXRwdXQgaWYgdGhlcmUgYXJlIHByb2JsZW1zLgpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShhcjMucmV0dXJuVmFsdWUsICJFcnJvciBkZWxldGluZyBpbnN0YW5jZSAiICsgaTFuYW1lICsgIjogIiArIGFyMy5vdXRBbmRFcnIpOwogICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShhcjQucmV0dXJuVmFsdWUsICJFcnJvciBkZWxldGluZyBpbnN0YW5jZSAiICsgaTJuYW1lICsgIjogIiArIGFyNC5vdXRBbmRFcnIpOwogICAgIH0KLSAgICAgICAgCisKICAgICBAVGVzdChkZXBlbmRzT25NZXRob2RzID0geyAiZGVsZXRlSW5zdGFuY2VUZXN0IiB9KQogICAgIHB1YmxpYyB2b2lkIGRlbGV0ZUNsdXN0ZXJUZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbnsKICAgICAgICAgQXNhZG1pblJldHVybiBhcjEgPSBhc2FkbWluV2l0aE91dHB1dCgiZGVsZXRlLWNsdXN0ZXIiLCBjbmFtZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2NsdXN0ZXIvaGVsbG93b3JsZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2NsdXN0ZXIvaGVsbG93b3JsZC9idWlsZC54bWwKaW5kZXggZDllM2EwZC4uMzE2NDIzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9jbHVzdGVyL2hlbGxvd29ybGQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svY2x1c3Rlci9oZWxsb3dvcmxkL2J1aWxkLnhtbApAQCAtMjEsNyArMjEsNyBAQAogCiA8cHJvcGVydHkgZmlsZT0iYnVpbGQucHJvcGVydGllcyIvPgogPHByb3BlcnR5IGZpbGU9IiR7d3Mucm9vdH0vYnVpbGQucHJvcGVydGllcyIvPgotIAorCiA8ZGVzY3JpcHRpb24+QnVpbGRzLCB0ZXN0cywgYW5kIHJ1bnMgdGhlIGFzYWRtaW4gQ0xJIHJlc3RhcnQsIEpEQkMgY29ubmVjdGlvbiBwb29sIHRlc3RzLjwvZGVzY3JpcHRpb24+CiAgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvdjMtdGFyZ2V0cy54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svY2x1c3Rlci9oZWxsb3dvcmxkL3NyYy90ZXN0L2hlbGxvY2x1c3Rlci9DbHVzdGVySGVsbG93b3JsZFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svY2x1c3Rlci9oZWxsb3dvcmxkL3NyYy90ZXN0L2hlbGxvY2x1c3Rlci9DbHVzdGVySGVsbG93b3JsZFRlc3QuamF2YQppbmRleCBjZWM4MGQzLi43ZDliMGVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2NsdXN0ZXIvaGVsbG93b3JsZC9zcmMvdGVzdC9oZWxsb2NsdXN0ZXIvQ2x1c3RlckhlbGxvd29ybGRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9jbHVzdGVyL2hlbGxvd29ybGQvc3JjL3Rlc3QvaGVsbG9jbHVzdGVyL0NsdXN0ZXJIZWxsb3dvcmxkVGVzdC5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgIFN0cmluZyBpMXVybCA9ICJodHRwOi8vbG9jYWxob3N0OiIrcG9ydDE7CiAgICAgICAgIFN0cmluZyBpMnVybCA9ICJodHRwOi8vbG9jYWxob3N0OiIrcG9ydDI7CiAgICAgICAgIHN0YXRpYyBTdHJpbmcgQkFTRURJUiA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiQkFTRURJUiIpOwotICAgICAgICAKKwogICAgICAgICBwdWJsaWMgYm9vbGVhbiByZXRTdGF0dXMgPSBmYWxzZSwgcmV0MSA9IGZhbHNlLHJldDIgPSBmYWxzZTsKIAogCkBAIC01MSw3ICs1MSw3IEBACiAgICAgQFRlc3QoZGVwZW5kc09uTWV0aG9kcyA9IHsgImNsdXN0ZXJEZXBsb3lUZXN0IiB9KQogICAgIHB1YmxpYyB2b2lkIGNsdXN0ZXJIZWxsb1dvcmxkVGVzdCgpIHRocm93cyBFeGNlcHRpb257CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdCBleHRyYSA1IHNlYyBmb3IgR0YgdG8gZ2VuZXJhdGUgaGVsbG93b3JsZCBhcHAuIik7Ci0JVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCg1MDAwKTsKKyAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDUwMDApOwogICAgICAgICByZXBvcnQodG4gKyAiZ2V0YXBwMSIsIG1hdGNoU3RyaW5nKCJIZWxsbyIsIGdldFVSTChpMXVybCArICIvaGVsbG93b3JsZC9oaS5qc3AiKSkpOwogICAgICAgICBTdHJpbmcgczEgPSBnZXRVUkwoaTJ1cmwgKyAiL2hlbGxvd29ybGQvaGkuanNwIik7CiAvLyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvdXRwdXQgZnJvbSBpbnN0YW5jZSAyOiIgKyBzMSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9jbXAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL2J1aWxkLnhtbAppbmRleCA1N2ZhZDJiLi5iMWE0MzZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9jbXAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9idWlsZC54bWwKQEAgLTIwLDkgKzIwLDkgQEAKIDxwcm9qZWN0IG5hbWU9ImNtcCIgZGVmYXVsdD0iZGVmYXVsdCIgYmFzZWRpcj0iLiI+CiAgICAgPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiLz4KICAgICA8cHJvcGVydHkgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LWNvbmZpZy5wcm9wZXJ0aWVzIi8+Ci0gICAgCisKICAgICA8ZGVzY3JpcHRpb24+QnVpbGRzLCB0ZXN0cywgYW5kIHJ1bnMgdGhlIHByb2plY3QgQ01QIFJvc3RlciBBcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+Ci0gICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPiAgIAorICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS10YXJnZXRzLnhtbCIvPgogICAgIDxwcm9wZXJ0eSBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9kZXJieS5wcm9wZXJ0aWVzIi8+CiAgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9kYi10YXJnZXRzLnhtbCIvPgpAQCAtMzIsMzQgKzMyLDM0IEBACiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9Sb3N0ZXJBcHBfZGVyYnkuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJ1bnRlc3QsdW5kZXBsb3kiIC8+ICAgIAorCisgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW50ZXN0LHVuZGVwbG95IiAvPgogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtZGVwbG95IiBkZXBlbmRzPSJidWlsZCxkZXBsb3kiIC8+CiAKLSAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZS10ZXN0cyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtaW1wbCI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIiB2YWx1ZT0iKiovKlNlcnZsZXQuY2xhc3MsKiovUm9zdGVyLmNsYXNzLCoqL1Jvc3RlckhvbWUuY2xhc3MsKiovKkRldGFpbHMuY2xhc3MsKiovRGVidWcuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImNyZWF0ZS10YWJsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+IAorCisgICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudGVzdC1pbXBsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iJHt0ZXN0bmcudGVzdC5uYW1lfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0idGVzdG5nLnRlc3QubmFtZSIgdmFsdWU9IiR7dGVzdG5nLnRlc3QubmFtZX0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RuZy50ZXN0Y2xpZW50IiB2YWx1ZT0iQ21wUm9zdGVyVGVzdE5HIi8+CiAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAgCisKICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKIDwvcHJvamVjdD4KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9jbXAvbWV0YWRhdGEvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9jbXAvbWV0YWRhdGEvZWpiLWphci54bWwKaW5kZXggY2MxMjc0OC4uMDczODY3OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL21ldGFkYXRhL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9tZXRhZGF0YS9lamItamFyLnhtbApAQCAtMjI4LDcgKzIyOCw3IEBACiAgICAgICAgICAgPC9tZXRob2QtcGFyYW1zPgogICAgICAgICA8L3F1ZXJ5LW1ldGhvZD4KICAgICAgICAgPGVqYi1xbD5zZWxlY3QgZGlzdGluY3QgdC5uYW1lIGZyb20gVGVhbSB0IHdoZXJlIExPQ0FURSg/MSwgdC5uYW1lKSAmZ3Q7IDAgQU5EIExPQ0FURSg/MSwgdC5uYW1lKSAmbHQ7IExFTkdUSCh0Lm5hbWUpPC9lamItcWw+Ci0gICAgICA8L3F1ZXJ5PiAgICAgIAorICAgICAgPC9xdWVyeT4KICAgICA8L2VudGl0eT4KICAgICA8ZW50aXR5PgogICAgICAgPGRpc3BsYXktbmFtZT5QbGF5ZXJFSkI8L2Rpc3BsYXktbmFtZT4KQEAgLTI2OCw3ICsyNjgsNyBAQAogICAgICAgICAgIDxtZXRob2QtbmFtZT5maW5kTm90T25UZWFtPC9tZXRob2QtbmFtZT4KICAgICAgICAgICA8bWV0aG9kLXBhcmFtcyAvPgogICAgICAgICA8L3F1ZXJ5LW1ldGhvZD4KLSAgICAgICAgPGVqYi1xbD5zZWxlY3Qgb2JqZWN0KHApIGZyb20gUGxheWVyIHAgCisgICAgICAgIDxlamItcWw+c2VsZWN0IG9iamVjdChwKSBmcm9tIFBsYXllciBwCiB3aGVyZSBwLnRlYW1zIGlzIGVtcHR5PC9lamItcWw+CiAgICAgICA8L3F1ZXJ5PgogICAgICAgPHF1ZXJ5PgpAQCAtNDU0LDcgKzQ1NCw3IEBACiAgICAgICAgICAgPC9tZXRob2QtcGFyYW1zPgogICAgICAgICA8L3F1ZXJ5LW1ldGhvZD4KICAgICAgICAgPGVqYi1xbD5zZWxlY3Qgb2JqZWN0KHApIGZyb20gUGxheWVyIHAgd2hlcmUgcC5zYWxhcnkgPSBTUVJUKD8xKTwvZWpiLXFsPgotICAgICAgPC9xdWVyeT4gICAgICAKKyAgICAgIDwvcXVlcnk+CiAgICAgPC9lbnRpdHk+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KICAgPHJlbGF0aW9uc2hpcHM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9jbXAvc3FsL1Jvc3RlckFwcF9kZXJieS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9jbXAvc3FsL1Jvc3RlckFwcF9kZXJieS5zcWwKaW5kZXggYzY5M2JmNC4uN2I0MjljZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL3NxbC9Sb3N0ZXJBcHBfZGVyYnkuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9zcWwvUm9zdGVyQXBwX2RlcmJ5LnNxbApAQCAtMywzNSArMywzNSBAQAogRFJPUCBUQUJMRSBUZWFtIDsKIERST1AgVEFCTEUgTGVhZ3VlIDsKIAotQ1JFQVRFIFRBQkxFIFBsYXllciAKK0NSRUFURSBUQUJMRSBQbGF5ZXIKICgKLQlwbGF5ZXJfSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLQluYW1lIFZBUkNIQVIoMjU1KSwgCi0JcG9zaXRpb24gVkFSQ0hBUigyNTUpLCAKLQlzYWxhcnkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTAorICAgIHBsYXllcl9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgbmFtZSBWQVJDSEFSKDI1NSksCisgICAgcG9zaXRpb24gVkFSQ0hBUigyNTUpLAorICAgIHNhbGFyeSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMCiApOwogCi1DUkVBVEUgVEFCTEUgTGVhZ3VlIAorQ1JFQVRFIFRBQkxFIExlYWd1ZQogKAotCWxlYWd1ZV9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAotCW5hbWUgVkFSQ0hBUigyNTUpLCAKLQlzcG9ydCBWQVJDSEFSKDI1NSkKKyAgICBsZWFndWVfSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgIG5hbWUgVkFSQ0hBUigyNTUpLAorICAgIHNwb3J0IFZBUkNIQVIoMjU1KQogKTsKIAotQ1JFQVRFIFRBQkxFIFRlYW0gCitDUkVBVEUgVEFCTEUgVGVhbQogKAotCXRlYW1fSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLQljaXR5IFZBUkNIQVIoMjU1KSwgCi0JbmFtZSBWQVJDSEFSKDI1NSksCi0JbGVhZ3VlX0lkIFZBUkNIQVIoMjU1KSwKLQlGT1JFSUdOIEtFWSAobGVhZ3VlX0lkKSAgIFJFRkVSRU5DRVMgTGVhZ3VlIChsZWFndWVfSWQpCisgICAgdGVhbV9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgY2l0eSBWQVJDSEFSKDI1NSksCisgICAgbmFtZSBWQVJDSEFSKDI1NSksCisgICAgbGVhZ3VlX0lkIFZBUkNIQVIoMjU1KSwKKyAgICBGT1JFSUdOIEtFWSAobGVhZ3VlX0lkKSAgIFJFRkVSRU5DRVMgTGVhZ3VlIChsZWFndWVfSWQpCiApOwogCi1DUkVBVEUgVEFCTEUgVGVhbVBsYXllciAKK0NSRUFURSBUQUJMRSBUZWFtUGxheWVyCiAoCi0JcGxheWVyX0lkIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCwgCi0gICAgICAgIHRlYW1fSWQgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLCAKKyAgICBwbGF5ZXJfSWQgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAorICAgICAgICB0ZWFtX0lkIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCwKICAgICAgICAgQ09OU1RSQUlOVCBwa19UZWFtUGxheWVyIFBSSU1BUlkgS0VZIChwbGF5ZXJfSWQsIHRlYW1fSWQpLAotCUZPUkVJR04gS0VZICh0ZWFtX0lkKSAgIFJFRkVSRU5DRVMgVGVhbSAodGVhbV9JZCksCi0JRk9SRUlHTiBLRVkgKHBsYXllcl9JZCkgICBSRUZFUkVOQ0VTIFBsYXllciAocGxheWVyX0lkKQorICAgIEZPUkVJR04gS0VZICh0ZWFtX0lkKSAgIFJFRkVSRU5DRVMgVGVhbSAodGVhbV9JZCksCisgICAgRk9SRUlHTiBLRVkgKHBsYXllcl9JZCkgICBSRUZFUkVOQ0VTIFBsYXllciAocGxheWVyX0lkKQogKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9zcmMvamF2YS9jbGllbnQvUm9zdGVyU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL3NyYy9qYXZhL2NsaWVudC9Sb3N0ZXJTZXJ2bGV0LmphdmEKaW5kZXggYmNhNjIyZi4uZGM2OWQ5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL3NyYy9qYXZhL2NsaWVudC9Sb3N0ZXJTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL3NyYy9qYXZhL2NsaWVudC9Sb3N0ZXJTZXJ2bGV0LmphdmEKQEAgLTkyLDcgKzkyLDcgQEAKIC8vU3lzdGVtLmVyci5wcmludGxuKCJYWFhYLTEiKTsKICAgICAgICAgICAgUm9zdGVyIG15Um9zdGVyID0gaG9tZS5jcmVhdGUoKTsKIC8vU3lzdGVtLmVyci5wcmludGxuKCJYWFhYLTIiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgIC8vIGRlbGV0aW5nIGFsbCBleGlzaXRpbmcgREItZW50cmllcwogICAgICAgICAgICBteVJvc3Rlci5jbGVhblVwKCk7CiAvL1N5c3RlbS5lcnIucHJpbnRsbigiWFhYWC0zIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9jbXAvc3JjL2phdmEvcm9zdGVyL1Jvc3Rlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL3NyYy9qYXZhL3Jvc3Rlci9Sb3N0ZXIuamF2YQppbmRleCAyYjJlOTVjLi5jYjVhMTRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9jbXAvc3JjL2phdmEvcm9zdGVyL1Jvc3Rlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9zcmMvamF2YS9yb3N0ZXIvUm9zdGVyLmphdmEKQEAgLTI2LDU1ICsyNiw1NSBAQAogaW1wb3J0IGphdmEudXRpbC5TZXQ7CiAKIHB1YmxpYyBpbnRlcmZhY2UgUm9zdGVyIGV4dGVuZHMgRUpCTG9jYWxPYmplY3QgewotIAorCiAgICAgLy8gUGxheWVycwogCi0gICAgcHVibGljIHZvaWQgY3JlYXRlUGxheWVyKFBsYXllckRldGFpbHMgZGV0YWlscykgCisgICAgcHVibGljIHZvaWQgY3JlYXRlUGxheWVyKFBsYXllckRldGFpbHMgZGV0YWlscykKICAgICAgICAgOwogCi0gICAgcHVibGljIHZvaWQgYWRkUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkgCisgICAgcHVibGljIHZvaWQgYWRkUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkKICAgICAgICAgOwogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkKICAgICAgICAgOwogCi0gICAgcHVibGljIHZvaWQgZHJvcFBsYXllcihTdHJpbmcgcGxheWVySWQsIFN0cmluZyB0ZWFtSWQpIAorICAgIHB1YmxpYyB2b2lkIGRyb3BQbGF5ZXIoU3RyaW5nIHBsYXllcklkLCBTdHJpbmcgdGVhbUlkKQogICAgICAgICA7CiAKLSAgICBwdWJsaWMgUGxheWVyRGV0YWlscyBnZXRQbGF5ZXIoU3RyaW5nIHBsYXllcklkKSAKKyAgICBwdWJsaWMgUGxheWVyRGV0YWlscyBnZXRQbGF5ZXIoU3RyaW5nIHBsYXllcklkKQogICAgICAgICA7CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNPZlRlYW0oU3RyaW5nIHRlYW1JZCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtKFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIDsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbUNvcHkoU3RyaW5nIHRlYW1JZCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtQ29weShTdHJpbmcgdGVhbUlkKQogICAgICAgICA7CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVBvc2l0aW9uKFN0cmluZyBwb3NpdGlvbikgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlQb3NpdGlvbihTdHJpbmcgcG9zaXRpb24pCiAgICAgICAgIDsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5SGlnaGVyU2FsYXJ5KFN0cmluZyBuYW1lKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkKICAgICAgICAgOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTYWxhcnlSYW5nZShkb3VibGUgbG93LCBkb3VibGUgaGlnaCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTYWxhcnlSYW5nZShkb3VibGUgbG93LCBkb3VibGUgaGlnaCkKICAgICAgICAgOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlMZWFndWVJZChTdHJpbmcgbGVhZ3VlSWQpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5TGVhZ3VlSWQoU3RyaW5nIGxlYWd1ZUlkKQogICAgICAgICA7CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVNwb3J0KFN0cmluZyBzcG9ydCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTcG9ydChTdHJpbmcgc3BvcnQpCiAgICAgICAgIDsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5Q2l0eShTdHJpbmcgY2l0eSkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlDaXR5KFN0cmluZyBjaXR5KQogICAgICAgICA7CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldEFsbFBsYXllcnMoKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldEFsbFBsYXllcnMoKQogICAgICAgICA7CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNOb3RPblRlYW0oKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNOb3RPblRlYW0oKQogICAgICAgICA7CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVBvc2l0aW9uQW5kTmFtZShTdHJpbmcgcG9zaXRpb24sIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lKFN0cmluZyBwb3NpdGlvbiwKICAgICAgICAgU3RyaW5nIG5hbWUpIDsKIAogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0TGVhZ3Vlc09mUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkKQEAgLTgyLDgyICs4Miw4MiBAQAogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRTcG9ydHNPZlBsYXllcihTdHJpbmcgcGxheWVySWQpCiAgICAgICAgIDsKLSAgICAgICAgCisKICAgICBwdWJsaWMgZG91YmxlIGdldFNhbGFyeU9mUGxheWVyRnJvbVRlYW0oU3RyaW5nIHRlYW1JRCwgU3RyaW5nIHBsYXllck5hbWUpCiAgICAgICAgIDsKIAogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkKLSAgICAgICAgOyAgIAotICAgICAgICAKKyAgICAgICAgOworCiAKICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNXaXRoUG9zaXRpb25zR29hbGtlZXBlck9yRGVmZW5kZXIoKQotICAgICAgICA7ICAgCisgICAgICAgIDsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhOYW1lRW5kaW5nV2l0aE9OKCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aE5hbWVFbmRpbmdXaXRoT04oKQogICAgICAgICA7CiAKICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNXaXRoTnVsbE5hbWUoKQotICAgICAgICA7ICAgCisgICAgICAgIDsKIAogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhUZWFtKFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIDsKLSAgICAgICAgCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nQUJTKGRvdWJsZSBzYWxhcnkpCi0gICAgICAgIDsgCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNXaXRoU2FsYXJ5VXNpbmdTUVJUKGRvdWJsZSBzYWxhcnkpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhTYWxhcnlVc2luZ0FCUyhkb3VibGUgc2FsYXJ5KQogICAgICAgICA7Ci0gICAgCi0gICAgICAgICAgIAorCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nU1FSVChkb3VibGUgc2FsYXJ5KQorICAgICAgICA7CisKKwogICAgIC8vIFRlYW1zCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFRlYW1zT2ZMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFRlYW1zT2ZMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKQogICAgICAgICA7CiAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVUZWFtSW5MZWFndWUoVGVhbURldGFpbHMgZGV0YWlscywgU3RyaW5nIGxlYWd1ZUlkKSAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVUZWFtSW5MZWFndWUoVGVhbURldGFpbHMgZGV0YWlscywgU3RyaW5nIGxlYWd1ZUlkKQogICAgICAgICA7CiAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVUZWFtKFN0cmluZyB0ZWFtSWQpIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVRlYW0oU3RyaW5nIHRlYW1JZCkKICAgICAgICAgOwogCi0gICAgcHVibGljIFRlYW1EZXRhaWxzIGdldFRlYW0oU3RyaW5nIHRlYW1JZCkgCisgICAgcHVibGljIFRlYW1EZXRhaWxzIGdldFRlYW0oU3RyaW5nIHRlYW1JZCkKICAgICAgICAgOwogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRUZWFtc0J5UGxheWVyQW5kTGVhZ3VlKFN0cmluZyBwbGF5ZXJLZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBsZWFndWVLZXkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsJCi0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKwogICAgIHB1YmxpYyBTZXQgZ2V0Q2l0aWVzT2ZMZWFndWUoU3RyaW5nIGxlYWd1ZUtleSkgOwogCiAgICAgcHVibGljIFRlYW1EZXRhaWxzIGdldFRlYW1PZkxlYWd1ZUJ5Q2l0eShTdHJpbmcgbGVhZ3VlS2V5LCBTdHJpbmcgY2l0eSkKLSAgICAgICAgOwkgICAKKyAgICAgICAgOwogCiAgICAgcHVibGljIFN0cmluZyBnZXRUZWFtc05hbWVPZkxlYWd1ZUJ5Q2l0eShTdHJpbmcgbGVhZ3VlS2V5LCBTdHJpbmcgY2l0eSkKLSAgICAgICAgOwkgICAKKyAgICAgICAgOwogCiAgICAgcHVibGljICBTdHJpbmcgZ2V0VGVhbU5hbWVWYXJpYXRpb25zKFN0cmluZyB0ZWFtSWQpIDsKIAogICAgIC8vIExlYWd1ZXMKIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUxlYWd1ZShMZWFndWVEZXRhaWxzIGRldGFpbHMpIAorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUxlYWd1ZShMZWFndWVEZXRhaWxzIGRldGFpbHMpCiAgICAgICAgIDsKIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZUxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZUxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpCiAgICAgICAgIDsKIAotICAgIHB1YmxpYyBMZWFndWVEZXRhaWxzIGdldExlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIAorICAgIHB1YmxpYyBMZWFndWVEZXRhaWxzIGdldExlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpCiAgICAgICAgIDsKIAogICAgIHB1YmxpYyBMZWFndWVEZXRhaWxzIGdldExlYWd1ZUJ5TmFtZShTdHJpbmcgbmFtZSkKICAgICAgICAgOwotICAgICAgICAKKwogICAgIC8vIFRlc3QKIAogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5TGVhZ3VlSWRXaXRoTlVMTChTdHJpbmcgbGVhZ3VlSWQpICA7CiAKICAgICBwdWJsaWMgQXJyYXlMaXN0IHRlc3RGaW5kZXIoU3RyaW5nIHBhcm0xLCBTdHJpbmcgcGFybTIsIFN0cmluZyBwYXJtMykKICAgICAgICAgOwotICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNsZWFuVXAoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdmVFeGNlcHRpb247Ci0gICAgICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9jbXAvc3JjL2phdmEvcm9zdGVyL1Jvc3RlckJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9zcmMvamF2YS9yb3N0ZXIvUm9zdGVyQmVhbi5qYXZhCmluZGV4IGRmNDgyMTMuLmViOTQzMDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9zcmMvamF2YS9yb3N0ZXIvUm9zdGVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9zcmMvamF2YS9yb3N0ZXIvUm9zdGVyQmVhbi5qYXZhCkBAIC00NiwxOSArNDYsMTkgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVBsYXllcihQbGF5ZXJEZXRhaWxzIGRldGFpbHMpIHsgCi0gCisgICAgcHVibGljIHZvaWQgY3JlYXRlUGxheWVyKFBsYXllckRldGFpbHMgZGV0YWlscykgeworCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGNyZWF0ZVBsYXllciIpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgTG9jYWxQbGF5ZXIgcGxheWVyID0gcGxheWVySG9tZS5jcmVhdGUoZGV0YWlscy5nZXRJZCgpLCAKKyAgICAgICAgICAgIExvY2FsUGxheWVyIHBsYXllciA9IHBsYXllckhvbWUuY3JlYXRlKGRldGFpbHMuZ2V0SWQoKSwKICAgICAgICAgICAgICAgICBkZXRhaWxzLmdldE5hbWUoKSwgZGV0YWlscy5nZXRQb3NpdGlvbigpLCBkZXRhaWxzLmdldFNhbGFyeSgpKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gCi0gICAgcHVibGljIHZvaWQgYWRkUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkgeyAKLSAKKworICAgIHB1YmxpYyB2b2lkIGFkZFBsYXllcihTdHJpbmcgcGxheWVySWQsIFN0cmluZyB0ZWFtSWQpIHsKKwogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBhZGRQbGF5ZXIiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIExvY2FsVGVhbSB0ZWFtID0gdGVhbUhvbWUuZmluZEJ5UHJpbWFyeUtleSh0ZWFtSWQpOwpAQCAtNjksNyArNjksNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgeyAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVQbGF5ZXIoU3RyaW5nIHBsYXllcklkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gcmVtb3ZlUGxheWVyIik7CiAgICAgICAgIHRyeSB7CkBAIC03OSw3ICs3OSw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gCisKICAgICBwdWJsaWMgdm9pZCBkcm9wUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGRyb3BQbGF5ZXIiKTsKQEAgLTEwNyw3ICsxMDcsNyBAQAogICAgIH0gLy8gZ2V0UGxheWVyCiAKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbShTdHJpbmcgdGVhbUlkKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbShTdHJpbmcgdGVhbUlkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc09mVGVhbSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwpAQCAtMTIyLDcgKzEyMiw3IEBACiAgICAgfSAvLyBnZXRQbGF5ZXJzT2ZUZWFtCiAKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbUNvcHkoU3RyaW5nIHRlYW1JZCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNPZlRlYW1Db3B5KFN0cmluZyB0ZWFtSWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzT2ZUZWFtQ29weSIpOwogICAgICAgICBBcnJheUxpc3QgcGxheWVyc0xpc3QgPSBudWxsOwpAQCAtMTM5LDcgKzEzOSw3IEBACiAgICAgfSAvLyBnZXRQbGF5ZXJzT2ZUZWFtQ29weQogCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFRlYW1zT2ZMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0VGVhbXNPZkxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRUZWFtc09mTGVhZ3VlIik7CiAKQEAgLTE4MCw3ICsxODAsNyBAQAogICAgIH0gLy8gZ2V0UGxheWVyc0J5UG9zaXRpb24KIAogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlIaWdoZXJTYWxhcnkoU3RyaW5nIG5hbWUpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlIaWdoZXJTYWxhcnkoU3RyaW5nIG5hbWUpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzQnlCeUhpZ2hlclNhbGFyeSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwpAQCAtMTk0LDcgKzE5NCw3IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldFBsYXllcnNCeUhpZ2hlclNhbGFyeQogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTYWxhcnlSYW5nZShkb3VibGUgbG93LCBkb3VibGUgaGlnaCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVNhbGFyeVJhbmdlKGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc0J5U2FsYXJ5UmFuZ2UiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKQEAgLTIwOCw3ICsyMDgsNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlTYWxhcnlSYW5nZQogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlMZWFndWVJZChTdHJpbmcgbGVhZ3VlSWQpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlMZWFndWVJZChTdHJpbmcgbGVhZ3VlSWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzQnlMZWFndWVJZCIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwpAQCAtMjIzLDcgKzIyMyw3IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldFBsYXllcnNCeUxlYWd1ZUlkCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVNwb3J0KFN0cmluZyBzcG9ydCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVNwb3J0KFN0cmluZyBzcG9ydCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNCeVNwb3J0Iik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CkBAIC0yMzcsNyArMjM3LDcgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0UGxheWVyc0J5U3BvcnQKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5Q2l0eShTdHJpbmcgY2l0eSkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUNpdHkoU3RyaW5nIGNpdHkpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzQnlDaXR5Iik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CkBAIC0yNTEsNyArMjUxLDcgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0UGxheWVyc0J5Q2l0eQogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRBbGxQbGF5ZXJzKCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldEFsbFBsYXllcnMoKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0QWxsUGxheWVycyIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwpAQCAtMjY1LDcgKzI2NSw3IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldEFsbFBsYXllcnMKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc05vdE9uVGVhbSgpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzTm90T25UZWFtKCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNOb3RPblRlYW0iKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKQEAgLTI3OSw4ICsyNzksOCBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzTm90T25UZWFtCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVBvc2l0aW9uQW5kTmFtZShTdHJpbmcgcG9zaXRpb24sIAotICAgICAgICBTdHJpbmcgbmFtZSkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVBvc2l0aW9uQW5kTmFtZShTdHJpbmcgcG9zaXRpb24sCisgICAgICAgIFN0cmluZyBuYW1lKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CkBAIC0yOTQsNyArMjk0LDcgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldExlYWd1ZXNPZlBsYXllcihTdHJpbmcgcGxheWVySWQpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRMZWFndWVzT2ZQbGF5ZXIoU3RyaW5nIHBsYXllcklkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0TGVhZ3Vlc09mUGxheWVyIik7CiAgICAgICAgIEFycmF5TGlzdCBkZXRhaWxzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKQEAgLTMwNiw3ICszMDYsNyBAQAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgCisKICAgICAgICAgSXRlcmF0b3IgaSA9IGxlYWd1ZXMuaXRlcmF0b3IoKTsKICAgICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWUgPSAoTG9jYWxMZWFndWUpIGkubmV4dCgpOwpAQCAtMzE3LDcgKzMxNyw3IEBACiAgICAgICAgIHJldHVybiBkZXRhaWxzTGlzdDsKICAgICB9IC8vIGdldExlYWd1ZXNPZlBsYXllcgogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRTcG9ydHNPZlBsYXllcihTdHJpbmcgcGxheWVySWQpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRTcG9ydHNPZlBsYXllcihTdHJpbmcgcGxheWVySWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRTcG9ydHNPZlBsYXllciIpOwogICAgICAgICBBcnJheUxpc3Qgc3BvcnRzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKQEAgLTMyOSw3ICszMjksNyBAQAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgCisKICAgICAgICAgSXRlcmF0b3IgaSA9IHNwb3J0cy5pdGVyYXRvcigpOwogICAgICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgIFN0cmluZyBzcG9ydCA9IChTdHJpbmcpIGkubmV4dCgpOwpAQCAtMzQwLDggKzM0MCw4IEBACiAKICAgICAvLyBUZWFtIGJ1c2luZXNzIG1ldGhvZHMKIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRlYW1JbkxlYWd1ZShUZWFtRGV0YWlscyBkZXRhaWxzLCBTdHJpbmcgbGVhZ3VlSWQpIHsgCi0gCisgICAgcHVibGljIHZvaWQgY3JlYXRlVGVhbUluTGVhZ3VlKFRlYW1EZXRhaWxzIGRldGFpbHMsIFN0cmluZyBsZWFndWVJZCkgeworCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGNyZWF0ZVRlYW1JbkxlYWd1ZSIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gbGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUlkKTsKQEAgLTM1Myw4ICszNTMsOCBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVRlYW0oU3RyaW5nIHRlYW1JZCkgeyAKKworICAgIHB1YmxpYyB2b2lkIHJlbW92ZVRlYW0oU3RyaW5nIHRlYW1JZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIHJlbW92ZVRlYW0iKTsKICAgICAgICAgdHJ5IHsKQEAgLTM2NCw3ICszNjQsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotIAorCiAgICAgcHVibGljIFRlYW1EZXRhaWxzIGdldFRlYW0oU3RyaW5nIHRlYW1JZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFRlYW0iKTsKQEAgLTM4MiwxOSArMzgyLDE5IEBACiAKICAgICAvLyBMZWFndWUgYnVzaW5lc3MgbWV0aG9kcwogCi0gICAgcHVibGljIHZvaWQgY3JlYXRlTGVhZ3VlKExlYWd1ZURldGFpbHMgZGV0YWlscykgeyAKLSAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVMZWFndWUoTGVhZ3VlRGV0YWlscyBkZXRhaWxzKSB7CisKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gY3JlYXRlTGVhZ3VlIik7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWUgPSBsZWFndWVIb21lLmNyZWF0ZShkZXRhaWxzLmdldElkKCksIAorICAgICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gbGVhZ3VlSG9tZS5jcmVhdGUoZGV0YWlscy5nZXRJZCgpLAogICAgICAgICAgICAgICAgIGRldGFpbHMuZ2V0TmFtZSgpLCBkZXRhaWxzLmdldFNwb3J0KCkpOwogU3lzdGVtLmVyci5wcmludGxuKCI9PT09IDogIiArIGxlYWd1ZSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZUxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIHsgCisKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gcmVtb3ZlTGVhZ3VlIik7CiAgICAgICAgIHRyeSB7CkBAIC00MDQsNyArNDA0LDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAKKwogICAgIHB1YmxpYyBMZWFndWVEZXRhaWxzIGdldExlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRMZWFndWUiKTsKQEAgLTQxOCw3ICs0MTgsNyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBsZWFndWVEZXRhaWxzOwogICAgIH0KLSAKKwogICAgIC8vIFNlc3Npb25CZWFuIG1ldGhvZHMKIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewpAQCAtNDU1LDI1ICs0NTUsMjUgQEAKICAgICBwdWJsaWMgUm9zdGVyQmVhbigpIHt9CiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykge30KLSAKKwogICAgIC8vIFByaXZhdGUgbWV0aG9kcwogCiAgICAgcHJpdmF0ZSBMb2NhbFBsYXllckhvbWUgbG9va3VwUGxheWVyKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7Ci0gICAgICAgCisKICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlUGxheWVyIik7CiAgICAgICAgIHJldHVybiAoTG9jYWxQbGF5ZXJIb21lKSBvYmpyZWY7CiAgICB9CiAKICAgICBwcml2YXRlIExvY2FsVGVhbUhvbWUgbG9va3VwVGVhbSgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewotICAgICAgIAorCiAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVRlYW0iKTsKICAgICAgICAgcmV0dXJuIChMb2NhbFRlYW1Ib21lKSBvYmpyZWY7CiAgICB9CiAKICAgICBwcml2YXRlIExvY2FsTGVhZ3VlSG9tZSBsb29rdXBMZWFndWUoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKLSAgICAgICAKKwogICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVMZWFndWUiKTsKICAgICAgICAgcmV0dXJuIChMb2NhbExlYWd1ZUhvbWUpIG9ianJlZjsKQEAgLTQ5NSwxMyArNDk1LDEzIEBACiAgICB9IC8vIGNvcHlQbGF5ZXJzVG9EZXRhaWxzCiAKICAgIC8qKgotICAgICogZGlydHkgY2xlYW5VcCBtZXRob2Qgb25seSBFSkJzIHdpdGggaGFyZGNvZGVkIFBLIHdpbGwgYmUgcmVtb3ZlZCAgCisgICAgKiBkaXJ0eSBjbGVhblVwIG1ldGhvZCBvbmx5IEVKQnMgd2l0aCBoYXJkY29kZWQgUEsgd2lsbCBiZSByZW1vdmVkCiAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjbGVhblVwKCkgewotICAgICAgICBEZWJ1Zy5wcmludCgiQ2xlYW5pbmcgdXAgdGhlIGRhdGFiYXNlIik7ICAgCisgICAgICAgIERlYnVnLnByaW50KCJDbGVhbmluZyB1cCB0aGUgZGF0YWJhc2UiKTsKICAgICAgICAgQ29sbGVjdGlvbiB0b0NsZWFuID0gbnVsbDsKICAgICAgICAgSXRlcmF0b3IgaXQgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9yZW1vdmluZyB0aGUgcGxheWVyIEVKQnMKICAgICAgICAgICAgIHRvQ2xlYW4gPSBwbGF5ZXJIb21lLmZpbmRBbGwoKTsKQEAgLTUwOSwzNCArNTA5LDM0IEBACiAgICAgICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgKChMb2NhbFBsYXllcilpdC5uZXh0KCkpLnJlbW92ZSgpOwogICAgICAgICAgICAgfQotICAgIAorCiAgICAgICAgICAgICAvLyByZW1vdmluZyB0aGUgdGVhbSBFSkJzCiAgICAgICAgICAgICB0b0NsZWFuID0gdGVhbUhvbWUuZmluZEFsbCgpOwogICAgICAgICAgICAgaXQgPSB0b0NsZWFuLml0ZXJhdG9yKCk7CiAgICAgICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgKChMb2NhbFRlYW0paXQubmV4dCgpKS5yZW1vdmUoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gcmVtb3ZpbmcgdGhlIGxlYWd1ZSBFSkJzCiAgICAgICAgICAgICB0b0NsZWFuID0gbGVhZ3VlSG9tZS5maW5kQWxsKCk7CiAgICAgICAgICAgICBpdCA9IHRvQ2xlYW4uaXRlcmF0b3IoKTsKICAgICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICAoKExvY2FsTGVhZ3VlKWl0Lm5leHQoKSkucmVtb3ZlKCk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgRGVidWcucHJpbnQoIkNsZWFuaW5nIHVwIHRoZSBkYXRhYmFzZSAuLi4gZG9uZSEiKTsJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCisgICAgICAgICAgICB9CisgICAgICAgIERlYnVnLnByaW50KCJDbGVhbmluZyB1cCB0aGUgZGF0YWJhc2UgLi4uIGRvbmUhIik7CiAgICAgICAgIH0gIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgICAgCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBuYW1lCiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIHB1YmxpYyBMZWFndWVEZXRhaWxzIGdldExlYWd1ZUJ5TmFtZShTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgCisKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0TGVhZ3VlQnlOYW1lIChTaW5nbGVPYmplY3RGaW5kZXIpIik7CiAgICAgICAgIExlYWd1ZURldGFpbHMgbGVhZ3VlRGV0YWlscyA9IG51bGw7CiAgICAgICAgIHRyeSB7CkBAIC01NDgsMTIgKzU0OCwxMiBAQAogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGxlYWd1ZURldGFpbHM7Ci0gICAgfSAgICAgICAgCisgICAgfQogICAgIC8vIGdldExlYWd1ZUJ5TmFtZSgpCiAKLSAgICAKKwogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIHBsYXllcktleQogICAgICAqIEBwYXJhbSBsZWFndWVLZXkKICAgICAgKiBAcmV0dXJuCkBAIC01NjIsMTMgKzU2MiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbGVhZ3VlS2V5KSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0VGVhbXNCeVBsYXllckFuZExlYWd1ZSIpOwotICAgICAgICBBcnJheUxpc3QgZGV0YWlsc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CQkJCQkJCQkJICAgCisgICAgICAgIEFycmF5TGlzdCBkZXRhaWxzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKICAgICAgICAgQ29sbGVjdGlvbiB0ZWFtc0NvbGwgPSBudWxsOwogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBMb2NhbFBsYXllciBwbGF5ZXIgPSBwbGF5ZXJIb21lLmZpbmRCeVByaW1hcnlLZXkocGxheWVyS2V5KTsKLSAgICAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9IGxlYWd1ZUhvbWUuZmluZEJ5UHJpbWFyeUtleShsZWFndWVLZXkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICB0ZWFtc0NvbGwgPSB0ZWFtSG9tZS5maW5kQnlQbGF5ZXJBbmRMZWFndWUocGxheWVyLCBsZWFndWUpOwkJCQorICAgICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gbGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUtleSk7CisgICAgICAgICAgICB0ZWFtc0NvbGwgPSB0ZWFtSG9tZS5maW5kQnlQbGF5ZXJBbmRMZWFndWUocGxheWVyLCBsZWFndWUpOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKQEAgLTU4MiwzNCArNTgyLDM0IEBACiAgICAgICAgICAgICBkZXRhaWxzTGlzdC5hZGQoZGV0YWlscyk7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gZGV0YWlsc0xpc3Q7CQotICAgIH0JCisgICAgICAgIHJldHVybiBkZXRhaWxzTGlzdDsKKyAgICB9CiAKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBjaXR5CiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIHB1YmxpYyBTZXQgZ2V0Q2l0aWVzT2ZMZWFndWUoU3RyaW5nIGxlYWd1ZUtleSkgewotICAgICAgICAKKwogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRDaXRpZXNPZkxlYWd1ZShsZWFndWVLZXkpIik7Ci0gICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZTsgCisgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZTsKICAgICAgICAgU2V0IGNpdGllczsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGxlYWd1ZSA9IGxlYWd1ZUhvbWUuZmluZEJ5UHJpbWFyeUtleShsZWFndWVLZXkpOwotICAgICAgICAgICAgY2l0aWVzID0gbGVhZ3VlLmdldENpdGllc09mVGhpc0xlYWd1ZSgpOwkKKyAgICAgICAgICAgIGNpdGllcyA9IGxlYWd1ZS5nZXRDaXRpZXNPZlRoaXNMZWFndWUoKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CQkJCisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNpdGllczsKICAgICB9Ly8gZ2V0Q2l0aWVzT2ZMZWFndWUoKQogCiAKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBsZWFndWVLZXkKICAgICAgKiBAcGFyYW0gY2l0eQogICAgICAqIEByZXR1cm4KQEAgLTYxOCw3ICs2MTgsNyBAQAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRUZWFtT2ZMZWFndWVCeUNpdHkobGVhZ3VlS2V5LCBjaXR5KSIpOwogICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWU7CiAgICAgICAgIExvY2FsVGVhbSB0ZWFtOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgbGVhZ3VlID0gbGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUtleSk7CiAgICAgICAgICAgICB0ZWFtID0gbGVhZ3VlLmdldFRlYW1CeUNpdHkoY2l0eSk7CkBAIC02MjYsMTMgKzYyNiwxMyBAQAogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG5ldyBUZWFtRGV0YWlscyh0ZWFtLmdldFRlYW1JZCgpLCB0ZWFtLmdldE5hbWUoKSwgdGVhbS5nZXRDaXR5KCkpOwogICAgIH0vLyBnZXRUZWFtT2ZMZWFndWVCeUNpdHkoKQogCi0gICAgCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBsZWFndWVLZXkKICAgICAgKiBAcGFyYW0gY2l0eQogICAgICAqIEByZXR1cm4KQEAgLTY0MSw3ICs2NDEsNyBAQAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRUZWFtc05hbWVPZkxlYWd1ZUJ5Q2l0eShsZWFndWVLZXksIGNpdHkpIik7CiAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZTsKICAgICAgICAgU3RyaW5nIHRlYW1OYW1lOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgbGVhZ3VlID0gbGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUtleSk7CiAgICAgICAgICAgICB0ZWFtTmFtZSA9IGxlYWd1ZS5nZXRUZWFtc05hbWVCeUNpdHkoY2l0eSk7CkBAIC02NDksMTQgKzY0OSwxNCBAQAogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHRlYW1OYW1lOwogCiAgICAgfS8vIGdldFRlYW1zTmFtZU9mTGVhZ3VlQnlDaXR5KCkKLSAgICAKLSAgICAKKworCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gdGVhbUlECiAgICAgICogQHBhcmFtIHBsYXllck5hbWUKICAgICAgKiBAcmV0dXJuCkBAIC02NjUsMjEgKzY2NSwyMSBAQAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRTYWxhcnlPZlBsYXllckZyb21UZWFtKHRlYW1LZXksIHBsYXllcktleSkiKTsKICAgICAgICAgTG9jYWxUZWFtIHRlYW07CiAgICAgICAgIGRvdWJsZSBzYWxhcnk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB0ZWFtID0gdGVhbUhvbWUuZmluZEJ5UHJpbWFyeUtleSh0ZWFtSUQpOwkJCi0gICAgICAgICAgICBzYWxhcnkgPSB0ZWFtLmdldFNhbGFyeU9mUGxheWVyKHBsYXllck5hbWUpOwkJCQorICAgICAgICAgICAgdGVhbSA9IHRlYW1Ib21lLmZpbmRCeVByaW1hcnlLZXkodGVhbUlEKTsKKyAgICAgICAgICAgIHNhbGFyeSA9IHRlYW0uZ2V0U2FsYXJ5T2ZQbGF5ZXIocGxheWVyTmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gc2FsYXJ5OyAgICAgICAKKworICAgICAgICByZXR1cm4gc2FsYXJ5OwogICAgIH0vLyBnZXRTYWxhcnlPZlBsYXllckZyb21UZWFtKCkKLSAgICAKLSAgICAKKworCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gbGVhZ3VlSWQKICAgICAgKiBAcmV0dXJuCiAgICAgICovCkBAIC02ODcsNyArNjg3LDcgQEAKICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzT2ZMZWFndWUobGVhZ3VlSWQpIik7CiAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlOwogICAgICAgIFNldCBwbGF5ZXJzOwotICAgICAgIAorCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgbGVhZ3VlID0gbGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUlkKTsKICAgICAgICAgICAgcGxheWVycyA9IGxlYWd1ZS5nZXRQbGF5ZXJzRnJvbUxlYWd1ZSgpOwpAQCAtNjk1LDY4ICs2OTUsNjggQEAKICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICB9Ci0gICAgICAgCi0gICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOyAgICAgCisKKyAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfS8vIGdldFBsYXllcnNPZkxlYWd1ZSgpCi0gICAgCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4KICAgICAgKi8KICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNXaXRoUG9zaXRpb25zR29hbGtlZXBlck9yRGVmZW5kZXIoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNXaXRoUG9zaXRpb25zR29hbGtlZXBlck9yRGVmZW5kZXIoKSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcGxheWVycyA9IHBsYXllckhvbWUuZmluZEJ5UG9zaXRpb25zR29hbGtlZXBlck9yRGVmZW5kZXIoKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0vLyBnZXRQbGF5ZXJzV2l0aFBvc2l0aW9uc0dvYWxrZWVwZXJPckRlZmVuZGVyKCkKLSAgICAKKwogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhOYW1lRW5kaW5nV2l0aE9OKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzV2l0aE5hbWVFbmRpbmdXaXRoT04oKSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcGxheWVycyA9IHBsYXllckhvbWUuZmluZEJ5TmFtZUVuZGluZ1dpdGhPTigpOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfS8vIGdldFBsYXllcnNXaXRoTmFtZUVuZGluZ1dpdGhPTigpCiAKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4KICAgICAgKi8KICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNXaXRoTnVsbE5hbWUoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNXaXRoTnVsbE5hbWUoKSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcGxheWVycyA9IHBsYXllckhvbWUuZmluZEJ5TnVsbE5hbWUoKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0vLyBnZXRQbGF5ZXJzV2l0aE51bGxOYW1lKCkKIAogCiAKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSB0ZWFtSWQKICAgICAgKiBAcmV0dXJuCiAgICAgICovCkBAIC03NjQsNyArNzY0LDcgQEAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc1dpdGhUZWFtKHRlYW1JZCkiKTsKICAgICAgICAgTG9jYWxUZWFtIHRlYW07CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB0ZWFtID0gdGVhbUhvbWUuZmluZEJ5UHJpbWFyeUtleSh0ZWFtSWQpOwogICAgICAgICAgICAgcGxheWVycyA9IHBsYXllckhvbWUuZmluZEJ5VGVhbSh0ZWFtKTsKQEAgLTc3MiwxMyArNzcyLDEzIEBACiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfS8vIGdldFBsYXllcnNXaXRoVGVhbSgpCi0gICAgCi0gICAgCisKKwogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIHRlYW1JZAogICAgICAqIEByZXR1cm4KICAgICAgKi8KQEAgLTc4Niw3ICs3ODYsNyBAQAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRUZWFtTmFtZVZhcmlhdGlvbnModGVhbUlkKSIpOwogICAgICAgICBMb2NhbFRlYW0gdGVhbTsKICAgICAgICAgU3RyaW5nQnVmZmVyIG91dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRlYW0gPSB0ZWFtSG9tZS5maW5kQnlQcmltYXJ5S2V5KHRlYW1JZCk7CiAgICAgICAgICAgICBEZWJ1Zy5wcmludCgiLS0tIENPTkNBVCIpOwpAQCAtNzk0LDU4ICs3OTQsNTggQEAKICAgICAgICAgICAgIERlYnVnLnByaW50KCItLS0gU1VCU1RSSU5HIik7CiAgICAgICAgICAgICBvdXQuYXBwZW5kKHRlYW0uZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czIoKSk7CiAgICAgICAgICAgICBEZWJ1Zy5wcmludCgiLS0tIExPQ0FURSBBTkQgTEVOR1RIIik7Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKHRlYW0uZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czMoKSk7CQkJCisgICAgICAgICAgICBvdXQuYXBwZW5kKHRlYW0uZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czMoKSk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwkJCQorICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBvdXQudG9TdHJpbmcoKTsKICAgICB9Ly8gZ2V0VGVhbU5hbWVWYXJpYXRpb25zKCkKLSAgICAKLSAgICAKKworCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gc2FsYXJ5CiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhTYWxhcnlVc2luZ0FCUyhkb3VibGUgc2FsYXJ5KSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNXaXRoU2FsYXJ5VXNpbmdBQlMoc2FsYXJ5KSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcGxheWVycyA9IHBsYXllckhvbWUuZmluZEJ5U2FsYXJheVdpdGhBcml0aG1ldGljRnVuY3Rpb25BQlMoc2FsYXJ5KTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0vLyBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nQUJTKCkKIAogCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gc2FsYXJ5CiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhTYWxhcnlVc2luZ1NRUlQoZG91YmxlIHNhbGFyeSkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nU1FSVChzYWxhcnkpIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBwbGF5ZXJzID0gcGxheWVySG9tZS5maW5kQnlTYWxhcmF5V2l0aEFyaXRobWV0aWNGdW5jdGlvblNRUlQoc2FsYXJ5KTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0vLyBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nU1FSVCgpCi0gICAgCi0gICAgCi0gICAgCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlMZWFndWVJZFdpdGhOVUxMKFN0cmluZyBsZWFndWVJZCkgeyAKKworCisKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUxlYWd1ZUlkV2l0aE5VTEwoU3RyaW5nIGxlYWd1ZUlkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc0J5TGVhZ3VlSWQiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKQEAgLTg2MCw1ICs4NjAsNSBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlMZWFndWVJZAogCi0gICAgCi19IC8vIFJvc3RlckJlYW4gCisKK30gLy8gUm9zdGVyQmVhbgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL3NyYy9qYXZhL3Jvc3Rlci9Sb3N0ZXJIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9jbXAvc3JjL2phdmEvcm9zdGVyL1Jvc3RlckhvbWUuamF2YQppbmRleCAzYTY4YjM1Li5lYzAyMTE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9jbXAvc3JjL2phdmEvcm9zdGVyL1Jvc3RlckhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9jbXAvc3JjL2phdmEvcm9zdGVyL1Jvc3RlckhvbWUuamF2YQpAQCAtMjEsNiArMjEsNiBAQAogaW1wb3J0IGpha2FydGEuZWpiLkVKQkxvY2FsSG9tZTsKIAogcHVibGljIGludGVyZmFjZSBSb3N0ZXJIb21lIGV4dGVuZHMgRUpCTG9jYWxIb21lIHsKLSAKKwogICAgIFJvc3RlciBjcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL3NyYy9qYXZhL3RlYW0vTGVhZ3VlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL3NyYy9qYXZhL3RlYW0vTGVhZ3VlQmVhbi5qYXZhCmluZGV4IDE1ODBlNTcuLjQwZmVhOGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9zcmMvamF2YS90ZWFtL0xlYWd1ZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9jbXAvc3JjL2phdmEvdGVhbS9MZWFndWVCZWFuLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIAogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0TGVhZ3VlSWQoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRMZWFndWVJZChTdHJpbmcgaWQpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXROYW1lKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7CiAKQEAgLTUzLDM5ICs1MywzOSBAQAogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZWpiU2VsZWN0VGVhbXNOYW1lQnlDaXR5KFN0cmluZyBjaXR5KQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IFNldCBlamJTZWxlY3RQbGF5ZXJzQnlMZWFndWUoTG9jYWxMZWFndWUgbGVhZ3VlKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgLy8gQnVzaW5lc3MgbWV0aG9kcwogCiAgICAgcHVibGljIFNldCBnZXRDaXRpZXNPZlRoaXNMZWFndWUoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKLSAgICAgICAgIAotICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gCisKKyAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9CiAgICAgICAgICAgICAgKHRlYW0uTG9jYWxMZWFndWUpY29udGV4dC5nZXRFSkJMb2NhbE9iamVjdCgpOwotICAgICAgICAgCi0gICAgICAgICByZXR1cm4gZWpiU2VsZWN0VGVhbXNDaXR5KGxlYWd1ZSk7IAorCisgICAgICAgICByZXR1cm4gZWpiU2VsZWN0VGVhbXNDaXR5KGxlYWd1ZSk7CiAgICAgfQogCiAKICAgICBwdWJsaWMgTG9jYWxUZWFtIGdldFRlYW1CeUNpdHkoU3RyaW5nIGNpdHkpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICByZXR1cm4gZWpiU2VsZWN0VGVhbUJ5Q2l0eShjaXR5KTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1zTmFtZUJ5Q2l0eShTdHJpbmcgY2l0eSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBlamJTZWxlY3RUZWFtc05hbWVCeUNpdHkoY2l0eSk7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgU2V0IGdldFBsYXllcnNGcm9tTGVhZ3VlKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gKHRlYW0uTG9jYWxMZWFndWUpY29udGV4dC5nZXRFSkJMb2NhbE9iamVjdCgpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gZWpiU2VsZWN0UGxheWVyc0J5TGVhZ3VlKGxlYWd1ZSk7Ci0gICAgfSAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBhZGRUZWFtKExvY2FsVGVhbSB0ZWFtKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlRlYW1CZWFuIGFkZFRlYW0iKTsKQEAgLTEyMCwzMiArMTIwLDMyIEBACiAgICAgICAgIHNldFNwb3J0KHNwb3J0KTsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgc3BvcnQpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24geyB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgY3R4KSB7CiAgICAgICAgIGNvbnRleHQgPSBjdHg7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgewogICAgICAgICBjb250ZXh0ID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJMZWFndWVCZWFuIGVqYlJlbW92ZSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJMZWFndWVCZWFuIGVqYkxvYWQiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsKICAgICAgICAgRGVidWcucHJpbnQoIkxlYWd1ZUJlYW4gZWpiU3RvcmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7IH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgeyB9CiAKIH0gLy8gTGVhZ3VlQmVhbiBjbGFzcwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL3NyYy9qYXZhL3RlYW0vTG9jYWxMZWFndWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9zcmMvamF2YS90ZWFtL0xvY2FsTGVhZ3VlLmphdmEKaW5kZXggZjJlYjA0Ni4uYTE0NDYxNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL3NyYy9qYXZhL3RlYW0vTG9jYWxMZWFndWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9jbXAvc3JjL2phdmEvdGVhbS9Mb2NhbExlYWd1ZS5qYXZhCkBAIC0zMyw1ICszMyw1IEBACiAgICAgcHVibGljIExvY2FsVGVhbSBnZXRUZWFtQnlDaXR5KFN0cmluZyBjaXR5KSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVhbXNOYW1lQnlDaXR5KFN0cmluZyBjaXR5KSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogICAgIHB1YmxpYyBTZXQgZ2V0UGxheWVyc0Zyb21MZWFndWUoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9jbXAvc3JjL2phdmEvdGVhbS9Mb2NhbExlYWd1ZUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9zcmMvamF2YS90ZWFtL0xvY2FsTGVhZ3VlSG9tZS5qYXZhCmluZGV4IGVjMTc2ZGEuLmMxOWFmNzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9zcmMvamF2YS90ZWFtL0xvY2FsTGVhZ3VlSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9zcmMvamF2YS90ZWFtL0xvY2FsTGVhZ3VlSG9tZS5qYXZhCkBAIC0yMCwxNyArMjAsMTcgQEAKIGltcG9ydCBqYWthcnRhLmVqYi4qOwogCiBwdWJsaWMgaW50ZXJmYWNlIExvY2FsTGVhZ3VlSG9tZSBleHRlbmRzIEVKQkxvY2FsSG9tZSB7Ci0gICAgCisKICAgICBwdWJsaWMgTG9jYWxMZWFndWUgY3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgc3BvcnQpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgTG9jYWxMZWFndWUgZmluZEJ5UHJpbWFyeUtleSAoU3RyaW5nIGlkKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEFsbCgpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgcHVibGljIExvY2FsTGVhZ3VlIGZpbmRCeU5hbWUoU3RyaW5nIG5hbWUpCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CQkJCQkKLSAgICAgICAgCisgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9zcmMvamF2YS90ZWFtL0xvY2FsUGxheWVySG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL3NyYy9qYXZhL3RlYW0vTG9jYWxQbGF5ZXJIb21lLmphdmEKaW5kZXggOTA0NThlMy4uNTc3NzA3MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL3NyYy9qYXZhL3RlYW0vTG9jYWxQbGF5ZXJIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL3NyYy9qYXZhL3RlYW0vTG9jYWxQbGF5ZXJIb21lLmphdmEKQEAgLTIwLDYwICsyMCw2MCBAQAogaW1wb3J0IGpha2FydGEuZWpiLio7CiAKIHB1YmxpYyBpbnRlcmZhY2UgTG9jYWxQbGF5ZXJIb21lIGV4dGVuZHMgRUpCTG9jYWxIb21lIHsKLSAgICAKKwogICAgIHB1YmxpYyBMb2NhbFBsYXllciBjcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBwb3NpdGlvbiwKICAgICAgICAgZG91YmxlIHNhbGFyeSkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBMb2NhbFBsYXllciBmaW5kQnlQcmltYXJ5S2V5IChTdHJpbmcgaWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247Ci0gICAgCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UG9zaXRpb24oU3RyaW5nIHBvc2l0aW9uKSAKKworICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBvc2l0aW9uKFN0cmluZyBwb3NpdGlvbikKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5SGlnaGVyU2FsYXJ5KFN0cmluZyBuYW1lKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U2FsYXJ5UmFuZ2UoZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVNhbGFyeVJhbmdlKGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5TGVhZ3VlKExvY2FsTGVhZ3VlIGxlYWd1ZSkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5TGVhZ3VlKExvY2FsTGVhZ3VlIGxlYWd1ZSkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVNwb3J0KFN0cmluZyBzcG9ydCkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U3BvcnQoU3RyaW5nIHNwb3J0KQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5Q2l0eShTdHJpbmcgY2l0eSkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5Q2l0eShTdHJpbmcgY2l0eSkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmROb3RPblRlYW0oKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kTm90T25UZWFtKCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBvc2l0aW9uQW5kTmFtZShTdHJpbmcgcG9zaXRpb24sIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBvc2l0aW9uQW5kTmFtZShTdHJpbmcgcG9zaXRpb24sCiAgICAgICAgIFN0cmluZyBuYW1lKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5VGVzdCAoU3RyaW5nIHBhcm0xLCBTdHJpbmcgcGFybTIsIFN0cmluZyBwYXJtMykKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBvc2l0aW9uc0dvYWxrZWVwZXJPckRlZmVuZGVyKCkKLSAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsgICAJCi0gICAgICAgIAorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOworCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5TmFtZUVuZGluZ1dpdGhPTigpCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247ICAgCQorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5TnVsbE5hbWUoKQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOyAgIAkKKyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVRlYW0oTG9jYWxUZWFtIHRlYW0pCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247ICAgCSAgICAgICAgCi0gICAgICAgIAorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOworCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U2FsYXJheVdpdGhBcml0aG1ldGljRnVuY3Rpb25BQlMoZG91YmxlIHNhbGFyYXkpCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247ICAgICAgIAorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U2FsYXJheVdpdGhBcml0aG1ldGljRnVuY3Rpb25TUVJUKGRvdWJsZSBzYWxhcmF5KQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOyAgICAgICAKLSAgICAgICAgCisgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9zcmMvamF2YS90ZWFtL0xvY2FsVGVhbS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL3NyYy9qYXZhL3RlYW0vTG9jYWxUZWFtLmphdmEKaW5kZXggOTE0YTRjYi4uZjg3ZjVlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL3NyYy9qYXZhL3RlYW0vTG9jYWxUZWFtLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL3NyYy9qYXZhL3RlYW0vTG9jYWxUZWFtLmphdmEKQEAgLTMxLDggKzMxLDggQEAKICAgICBwdWJsaWMgdm9pZCBhZGRQbGF5ZXIoTG9jYWxQbGF5ZXIgcGxheWVyKTsKICAgICBwdWJsaWMgdm9pZCBkcm9wUGxheWVyKExvY2FsUGxheWVyIHBsYXllcik7CiAgICAgcHVibGljIGRvdWJsZSBnZXRTYWxhcnlPZlBsYXllcihTdHJpbmcgcGxheWVyTmFtZSk7Ci0gICAgcHVibGljIFN0cmluZyBnZXRUZWFtTmFtZVdpdGhTdHJpbmdmdW5jdGlvblRlc3RzMSgpOyAKLSAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1OYW1lV2l0aFN0cmluZ2Z1bmN0aW9uVGVzdHMyKCk7IAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czMoKTsgCi0gICAgCisgICAgcHVibGljIFN0cmluZyBnZXRUZWFtTmFtZVdpdGhTdHJpbmdmdW5jdGlvblRlc3RzMSgpOworICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czIoKTsKKyAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1OYW1lV2l0aFN0cmluZ2Z1bmN0aW9uVGVzdHMzKCk7CisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9zcmMvamF2YS90ZWFtL0xvY2FsVGVhbUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9zcmMvamF2YS90ZWFtL0xvY2FsVGVhbUhvbWUuamF2YQppbmRleCA4ODQ2NTdlLi5jOWUyYTFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9jbXAvc3JjL2phdmEvdGVhbS9Mb2NhbFRlYW1Ib21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL3NyYy9qYXZhL3RlYW0vTG9jYWxUZWFtSG9tZS5qYXZhCkBAIC0yMiwxNyArMjIsMTcgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247CiAKIHB1YmxpYyBpbnRlcmZhY2UgTG9jYWxUZWFtSG9tZSBleHRlbmRzIEVKQkxvY2FsSG9tZSB7Ci0gICAgCisKICAgICBwdWJsaWMgTG9jYWxUZWFtIGNyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGNpdHkpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgTG9jYWxUZWFtIGZpbmRCeVByaW1hcnlLZXkgKFN0cmluZyBpZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKLSAgICAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQbGF5ZXJBbmRMZWFndWUoTG9jYWxQbGF5ZXIgcGxheWVyLCAKKworICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBsYXllckFuZExlYWd1ZShMb2NhbFBsYXllciBwbGF5ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9zcmMvamF2YS90ZWFtL1BsYXllckJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9zcmMvamF2YS90ZWFtL1BsYXllckJlYW4uamF2YQppbmRleCA0NGIwYThlLi43Y2QyODkwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9jbXAvc3JjL2phdmEvdGVhbS9QbGF5ZXJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL3NyYy9qYXZhL3RlYW0vUGxheWVyQmVhbi5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFBsYXllcklkKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0UGxheWVySWQoU3RyaW5nIGlkKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0TmFtZSgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOwogCkBAIC01MiwyMCArNTIsMjAgQEAKICAgICBwdWJsaWMgYWJzdHJhY3QgQ29sbGVjdGlvbiBlamJTZWxlY3RTcG9ydHMoTG9jYWxQbGF5ZXIgcGxheWVyKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgICAgICAgICAgICAgCi0gICAgICAgIAorCisKICAgICAvLyBCdXNpbmVzcyBtZXRob2RzCiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRMZWFndWVzKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7CiAKLSAgICAgICAgIExvY2FsUGxheWVyIHBsYXllciA9IAorICAgICAgICAgTG9jYWxQbGF5ZXIgcGxheWVyID0KICAgICAgICAgICAgICAodGVhbS5Mb2NhbFBsYXllciljb250ZXh0LmdldEVKQkxvY2FsT2JqZWN0KCk7CiAgICAgICAgICByZXR1cm4gZWpiU2VsZWN0TGVhZ3VlcyhwbGF5ZXIpOwogICAgIH0KIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGdldFNwb3J0cygpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewogCi0gICAgICAgICBMb2NhbFBsYXllciBwbGF5ZXIgPSAKKyAgICAgICAgIExvY2FsUGxheWVyIHBsYXllciA9CiAgICAgICAgICAgICAgKHRlYW0uTG9jYWxQbGF5ZXIpY29udGV4dC5nZXRFSkJMb2NhbE9iamVjdCgpOwogICAgICAgICAgcmV0dXJuIGVqYlNlbGVjdFNwb3J0cyhwbGF5ZXIpOwogICAgIH0KQEAgLTgyLDMyICs4MiwzMiBAQAogICAgICAgICBzZXRTYWxhcnkoc2FsYXJ5KTsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgcG9zaXRpb24sCiAgICAgICAgIGRvdWJsZSBzYWxhcnkpIHRocm93cyBDcmVhdGVFeGNlcHRpb24geyB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgY3R4KSB7CiAgICAgICAgIGNvbnRleHQgPSBjdHg7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgewogICAgICAgICBjb250ZXh0ID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJQbGF5ZXJCZWFuIGVqYlJlbW92ZSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJQbGF5ZXJCZWFuIGVqYkxvYWQiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsKICAgICAgICAgRGVidWcucHJpbnQoIlBsYXllckJlYW4gZWpiU3RvcmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7IH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgeyB9CiAKIH0gLy8gUGxheWVyQmVhbiBjbGFzcwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL3NyYy9qYXZhL3RlYW0vVGVhbUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9zcmMvamF2YS90ZWFtL1RlYW1CZWFuLmphdmEKaW5kZXggNzRmYTRkNy4uYjg1MmVjMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL3NyYy9qYXZhL3RlYW0vVGVhbUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9jbXAvc3JjL2phdmEvdGVhbS9UZWFtQmVhbi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFRlYW1JZCgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFRlYW1JZChTdHJpbmcgaWQpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXROYW1lKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7CiAKQEAgLTM5LDcgKzM5LDcgQEAKIAogCiAgICAgLy8gQWNjZXNzIG1ldGhvZHMgZm9yIHJlbGF0aW9uc2hpcCBmaWVsZHMKLSAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBDb2xsZWN0aW9uIGdldFBsYXllcnMoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRQbGF5ZXJzKENvbGxlY3Rpb24gcGxheWVycyk7CiAKQEAgLTUyLDU1ICs1Miw1NSBAQAogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBlamJTZWxlY3RCeU5hbWVXaXRoQ09OQ0FUKFN0cmluZyBwYXJ0MSwgU3RyaW5nIHBhcnQyKQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZWpiU2VsZWN0QnlOYW1lU3Vic3RyaW5nKFN0cmluZyBzdWJzdHJpbmcpCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CQorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBlamJTZWxlY3ROYW1lTG9jYXRlKFN0cmluZyBzdWJzdHJpbmcpCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CQorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAvLyBCdXNpbmVzcyBtZXRob2RzCiAKICAgICBwdWJsaWMgZG91YmxlIGdldFNhbGFyeU9mUGxheWVyKFN0cmluZyBwbGF5ZXJOYW1lKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKICAgICAgICAgTG9jYWxUZWFtIHRlYW0gPSAodGVhbS5Mb2NhbFRlYW0pY29udGV4dC5nZXRFSkJMb2NhbE9iamVjdCgpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gZWpiU2VsZWN0U2FsYXJ5T2ZQbGF5ZXJJblRlYW0odGVhbSwgcGxheWVyTmFtZSk7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1OYW1lV2l0aFN0cmluZ2Z1bmN0aW9uVGVzdHMxKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIFN0cmluZ0J1ZmZlciBvdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAvLyAgICAgICAgTG9jYWxUZWFtIHRlYW0gPSAodGVhbS5Mb2NhbFRlYW0pIGNvbnRleHQuZ2V0RUpCTG9jYWxPYmplY3QoKTsKIC8vICAgICAgICBvdXQuYXBwZW5kKCI8QlI+TmFtZSBvZiBUZWFtIDogIiArIHRlYW0uZ2V0TmFtZSgpKTsKLSAgICAgICAgb3V0LmFwcGVuZCgiPEJSPiIpOwkJCisgICAgICAgIG91dC5hcHBlbmQoIjxCUj4iKTsKICAgICAgICAgb3V0LmFwcGVuZChlamJTZWxlY3RCeU5hbWVXaXRoQ09OQ0FUKCJDciIsICJvd3MiKSk7CiAgICAgICAgIG91dC5hcHBlbmQoIjxCUj4iKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG91dC50b1N0cmluZygpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czIoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgU3RyaW5nQnVmZmVyIG91dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgICAgb3V0LmFwcGVuZChlamJTZWxlY3RCeU5hbWVTdWJzdHJpbmcoImFhYWFDcm93c2FhYWFhIikpOwogICAgICAgICBvdXQuYXBwZW5kKCI8QlI+Iik7CiAKICAgICAgICAgcmV0dXJuIG91dC50b1N0cmluZygpOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1OYW1lV2l0aFN0cmluZ2Z1bmN0aW9uVGVzdHMzKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIFN0cmluZ0J1ZmZlciBvdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgIG91dC5hcHBlbmQoZWpiU2VsZWN0TmFtZUxvY2F0ZSgicm93IikpOwogICAgICAgICBvdXQuYXBwZW5kKCI8QlI+Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBvdXQudG9TdHJpbmcoKTsKICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0Q29weU9mUGxheWVycygpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiVGVhbUJlYW4gZ2V0Q29weU9mUGxheWVycyIpOwpAQCAtMTUxLDMwICsxNTEsMzAgQEAKICAgICAgICAgc2V0Q2l0eShjaXR5KTsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgY2l0eSkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7IH0KIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBjdHgpIHsKICAgICAgICAgY29udGV4dCA9IGN0eDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKSB7CiAgICAgICAgIGNvbnRleHQgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKICAgICAgICAgRGVidWcucHJpbnQoIlRlYW1CZWFuIGVqYlJlbW92ZSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJUZWFtQmVhbiBlamJMb2FkIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJUZWFtQmVhbiBlamJTdG9yZSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsgfQogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgeyB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9zcmMvamF2YS91dGlsL1BsYXllckRldGFpbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9zcmMvamF2YS91dGlsL1BsYXllckRldGFpbHMuamF2YQppbmRleCA4MTA0MWMyLi40NzY1YmNlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9jbXAvc3JjL2phdmEvdXRpbC9QbGF5ZXJEZXRhaWxzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL3NyYy9qYXZhL3V0aWwvUGxheWVyRGV0YWlscy5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgcG9zaXRpb247CiAgICAgcHJpdmF0ZSBkb3VibGUgc2FsYXJ5OwogCi0gICAgcHVibGljIFBsYXllckRldGFpbHMgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBwb3NpdGlvbiwgCisgICAgcHVibGljIFBsYXllckRldGFpbHMgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBwb3NpdGlvbiwKICAgICAgICAgZG91YmxlIHNhbGFyeSkgewogCiAgICAgICAgIHRoaXMuaWQgPSBpZDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9zcmMvdGVzdC9DbXBSb3N0ZXJUZXN0TkcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2NtcC9zcmMvdGVzdC9DbXBSb3N0ZXJUZXN0TkcuamF2YQppbmRleCAyNmMwY2IzLi43ZjgzMzIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9jbXAvc3JjL3Rlc3QvQ21wUm9zdGVyVGVzdE5HLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvY21wL3NyYy90ZXN0L0NtcFJvc3RlclRlc3RORy5qYXZhCkBAIC0zMCwxMyArMzAsMTMgQEAKIHB1YmxpYyBjbGFzcyBDbXBSb3N0ZXJUZXN0TkcgewogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9ICJSb3N0ZXIiOwotICAgCisKICAgICBwcml2YXRlIFN0cmluZyBzdHJDb250ZXh0Um9vdD0icm9zdGVyIjsKIAogICAgIHN0YXRpYyBTdHJpbmcgcmVzdWx0ID0gIiI7CiAgICAgU3RyaW5nIGhvc3Q9U3lzdGVtLmdldFByb3BlcnR5KCJodHRwLmhvc3QiKTsKICAgICBTdHJpbmcgcG9ydD1TeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucG9ydCIpOwotICAgICAgICAgICAKKwogICAgIC8qCiAgICAgICpJZiB0d28gYXNzZXJ0cyBhcmUgbWVudGlvbmVkIGluIG9uZSBtZXRob2QsIHRoZW4gbGFzdCBhc3NlcnQgaXMgdGFrZW4gaW4KICAgICAgKnRvIGFjY291bnQuCkBAIC00Niw0MCArNDYsNDAgQEAKIAogICAgIEBUZXN0KGdyb3VwcyA9eyAicHVsc2UifSApIC8vIHRlc3QgbWV0aG9kCiAgICAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIHRyeXsKIAotICAgICAgICAgIFN0cmluZyB0ZXN0dXJsID0gImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgIi8iKyAKLQkgICAgc3RyQ29udGV4dFJvb3QgKyAiLyIgKyBURVNUX05BTUU7CisgICAgICAgICAgU3RyaW5nIHRlc3R1cmwgPSAiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyAiLyIrCisgICAgICAgIHN0ckNvbnRleHRSb290ICsgIi8iICsgVEVTVF9OQU1FOwogCi0JICBVUkwgdXJsID0gbmV3IFVSTCh0ZXN0dXJsKTsKLQkgIC8vZWNobygiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKLQkgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwotCSAgY29ubi5jb25uZWN0KCk7Ci0JICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKKyAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKHRlc3R1cmwpOworICAgICAgLy9lY2hvKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOworICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CisgICAgICBjb25uLmNvbm5lY3QoKTsKKyAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwogCi0JICBJbnB1dFN0cmVhbSBpcyA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsKLQkgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOworICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjb25uLmdldElucHV0U3RyZWFtKCk7CisgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIAotCSAgU3RyaW5nIGxpbmUgPSBudWxsOwotCSAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7Ci0JICBTdHJpbmcgdGVzdExpbmUgPSBudWxsOyAgICAgICAgCi0JICBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSJST1NURVItRklOSVNIRUQtT0siOwotCSAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewotCSAgICAvLyBlY2hvKGxpbmUpOworICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOworICAgICAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7CisgICAgICBTdHJpbmcgdGVzdExpbmUgPSBudWxsOworICAgICAgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0iUk9TVEVSLUZJTklTSEVELU9LIjsKKyAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKKyAgICAgICAgLy8gZWNobyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZihFWFBFQ1RFRF9SRVNQT05TRSkhPS0xKXsKLQkgICAgICB0ZXN0TGluZSA9IGxpbmU7Ci0JICAgICAgLy9lY2hvKHRlc3RMaW5lKTsKLQkgICAgICByZXN1bHQ9dHJ1ZTsKLQkgICAgICBicmVhazsKKyAgICAgICAgICB0ZXN0TGluZSA9IGxpbmU7CisgICAgICAgICAgLy9lY2hvKHRlc3RMaW5lKTsKKyAgICAgICAgICByZXN1bHQ9dHJ1ZTsKKyAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLQkgIH0gICAgICAgIAotICAgICAgICAgICAgICAgIAotCSAgQXNzZXJ0LmFzc2VydEVxdWFscyhyZXN1bHQsIHRydWUsIlVuZXhwZWN0ZWQgUmVzdWx0cyIpOwotICAgICAgICAKKyAgICAgIH0KKworICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhyZXN1bHQsIHRydWUsIlVuZXhwZWN0ZWQgUmVzdWx0cyIpOworCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7Ci0JICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgdGhyb3cgbmV3IEV4Y2VwdGlvbihlKTsKKyAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGUpOwogICAgICAgICB9CiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9lbWJlZGRlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9lbWJlZGRlZC9idWlsZC54bWwKaW5kZXggNTJlZmFhNy4uZGUxZTA4ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvZW1iZWRkZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL2VtYmVkZGVkL2J1aWxkLnhtbApAQCAtMjAsMjUgKzIwLDI1IEBACiA8cHJvamVjdCBuYW1lPSJlbWJlZGRlZCIgZGVmYXVsdD0iZGVmYXVsdCIgYmFzZWRpcj0iLiI+CiAgICAgPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiLz4KICAgICA8cHJvcGVydHkgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LWNvbmZpZy5wcm9wZXJ0aWVzIi8+Ci0gICAgCisKICAgICA8ZGVzY3JpcHRpb24+QnVpbGRzLCB0ZXN0cywgYW5kIHJ1bnMgdGhlIHByb2plY3QgSmRiY1VzZXJUeCBBcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+Ci0gICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPiAgIAorICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS10YXJnZXRzLnhtbCIvPgotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbixidWlsZCxydW50ZXN0IiAvPiAgICAKLSAgIAorCisgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLGJ1aWxkLHJ1bnRlc3QiIC8+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1qYXIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLXRlc3RzIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+IAorCisgICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudGVzdC1lbWJlZGRlZC1jbGFzcyI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9IiR7dGVzdG5nLnRlc3QubmFtZX0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RuZy50ZXN0Lm5hbWUiIHZhbHVlPSIke3Rlc3RuZy50ZXN0Lm5hbWV9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0bmcudGVzdGNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogICAgICA8L2FudGNhbGw+Ci0gICAgICAgIAorCiAgICAgPC90YXJnZXQ+Ci0gICAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL21kYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9tZGIvYnVpbGQueG1sCmluZGV4IDBhYjYyMDMuLjQ4YjdiYTQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL21kYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvbWRiL2J1aWxkLnhtbApAQCAtMjEsNyArMjEsNyBAQAogCiA8cHJvcGVydHkgZmlsZT0iYnVpbGQucHJvcGVydGllcyIvPgogPHByb3BlcnR5IGZpbGU9IiR7d3Mucm9vdH0vYnVpbGQucHJvcGVydGllcyIvPgotIAorCiA8ZGVzY3JpcHRpb24+QnVpbGRzLCB0ZXN0cywgYW5kIHJ1bnMgdGhlIGFzYWRtaW4gQ0xJIHJlc3RhcnQsIEpEQkMgY29ubmVjdGlvbiBwb29sIHRlc3RzLjwvZGVzY3JpcHRpb24+CiAgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvdjMtdGFyZ2V0cy54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL21kYi9zcmMvY29tL3N1bi9tZGIvSGVsbG8xLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9tZGIvc3JjL2NvbS9zdW4vbWRiL0hlbGxvMS5qYXZhCmluZGV4IDQ3NWNjNWMuLjAxNGI5NTAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL21kYi9zcmMvY29tL3N1bi9tZGIvSGVsbG8xLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvbWRiL3NyYy9jb20vc3VuL21kYi9IZWxsbzEuamF2YQpAQCAtMTksNSArMTksNSBAQAogcHVibGljIGludGVyZmFjZSBIZWxsbzEgewogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oU3RyaW5nIHMpOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9tZGIvc3JjL2NvbS9zdW4vbWRiL0hlbGxvU3RhdGVmdWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL21kYi9zcmMvY29tL3N1bi9tZGIvSGVsbG9TdGF0ZWZ1bC5qYXZhCmluZGV4IDY1YjY1MDguLjNlYTQ5NzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL21kYi9zcmMvY29tL3N1bi9tZGIvSGVsbG9TdGF0ZWZ1bC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL21kYi9zcmMvY29tL3N1bi9tZGIvSGVsbG9TdGF0ZWZ1bC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cpOwogICAgIH0KICAgICBAUHJlRGVzdHJveSBwdWJsaWMgdm9pZCBteVByZURlc3Ryb3lNZXRob2QoKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUFJFLURFU1RST1kgY2FsbGJhY2sgcmVjZWl2ZWQgaW4gIiArIG1zZyk7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQUkUtREVTVFJPWSBjYWxsYmFjayByZWNlaXZlZCBpbiAiICsgbXNnKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL21kYi9zcmMvY29tL3N1bi9tZGIvSGVsbG9TdGF0ZWxlc3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL21kYi9zcmMvY29tL3N1bi9tZGIvSGVsbG9TdGF0ZWxlc3MuamF2YQppbmRleCBjOWJhMzRiLi4zYmE0ZGRmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9tZGIvc3JjL2NvbS9zdW4vbWRiL0hlbGxvU3RhdGVsZXNzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvbWRiL3NyYy9jb20vc3VuL21kYi9IZWxsb1N0YXRlbGVzcy5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAvLyBIZWxsbzEgaW50ZXJmYWNlIGlzIG5vdCBhbm5vdGF0ZWQgd2l0aCBATG9jYWwuIElmIHRoZQogLy8gYmVhbiBvbmx5IGltcGxlbWVudHMgb25lIGludGVyZmFjZSBpdCBpcyBhc3N1bWVkIHRvIGJlCiAvLyBhIGxvY2FsIGJ1c2luZXNzIGludGVyZmFjZS4KLUBTdGF0ZWxlc3MoZGVzY3JpcHRpb249Im15IHN0YXRlbGVzcyBiZWFuIGRlc2NyaXB0aW9uIikgCitAU3RhdGVsZXNzKGRlc2NyaXB0aW9uPSJteSBzdGF0ZWxlc3MgYmVhbiBkZXNjcmlwdGlvbiIpCiBwdWJsaWMgY2xhc3MgSGVsbG9TdGF0ZWxlc3MgaW1wbGVtZW50cyBIZWxsbzEgewogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oU3RyaW5nIHMpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL21kYi9zcmMvY29tL3N1bi9tZGIvTWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL21kYi9zcmMvY29tL3N1bi9tZGIvTWVzc2FnZUJlYW4uamF2YQppbmRleCAyOTExNGNhLi5jYjIwZjA0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9tZGIvc3JjL2NvbS9zdW4vbWRiL01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvbWRiL3NyYy9jb20vc3VuL21kYi9NZXNzYWdlQmVhbi5qYXZhCkBAIC00MCw4ICs0MCw4IEBACiAgICAgQEVKQiBwcml2YXRlIEhlbGxvMSBoZWxsbzE7CiAgICAgQEVKQiBwcml2YXRlIEhlbGxvMiBoZWxsbzI7CiAKLSAgICBAUmVzb3VyY2UobmFtZT0iam1zL015UXVldWVDb25uZWN0aW9uRmFjdG9yeSIsIAotICAgICAgICAgICAgICBtYXBwZWROYW1lPSJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9RQ0YiKSAKKyAgICBAUmVzb3VyY2UobmFtZT0iam1zL015UXVldWVDb25uZWN0aW9uRmFjdG9yeSIsCisgICAgICAgICAgICAgIG1hcHBlZE5hbWU9Imptcy9lamJfZWpiMzBfaGVsbG9fbWRiX1FDRiIpCiAgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY0ZhY3Rvcnk7CiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZT0iam1zL2VqYl9lamIzMF9oZWxsb19tZGJfT3V0UXVldWUiKSBRdWV1ZSBjbGllbnRRdWV1ZTsKQEAgLTUxLDcgKzUxLDcgQEAKIAogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIGhlbGxvMSBzdGF0ZWxlc3MgYmVhbiIpOwogICAgICAgICAgICAgaGVsbG8xLmhlbGxvKCJsb2NhbCBlamIzLjAgc3RhdGVsZXNzIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgaGVsbG8yIHN0YXRlZnVsIGJlYW4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL21kYi9zcmMvY29tL3N1bi9tZGIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvbWRiL3NyYy9jb20vc3VuL21kYi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYWVjNmI1Zi4uNzg0MmE0NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvbWRiL3NyYy9jb20vc3VuL21kYi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvbWRiL3NyYy9jb20vc3VuL21kYi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKICAgICB9CiAKIAotICAgIEBSZXNvdXJjZShuYW1lPSJGb29DRiIsIG1hcHBlZE5hbWU9Imptcy9lamJfZWpiMzBfaGVsbG9fbWRiX1FDRiIpIAorICAgIEBSZXNvdXJjZShuYW1lPSJGb29DRiIsIG1hcHBlZE5hbWU9Imptcy9lamJfZWpiMzBfaGVsbG9fbWRiX1FDRiIpCiAgICAgcHJpdmF0ZSBzdGF0aWMgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxdWV1ZUNvbkZhY3Rvcnk7CiAKICAgICBAUmVzb3VyY2UobmFtZT0iTXNnQmVhblF1ZXVlIiwgbWFwcGVkTmFtZT0iam1zL2VqYl9lamIzMF9oZWxsb19tZGJfSW5RdWV1ZSIpCkBAIC01Miw3ICs1Miw3IEBACiAKICAgICBwcml2YXRlIGludCBudW1NZXNzYWdlcyA9IDI7CiAgICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKCBhcmdzLmxlbmd0aCA9PSAxICkgewogICAgICAgICAgICAgbnVtTWVzc2FnZXMgPSBuZXcgSW50ZWdlcihhcmdzWzBdKS5pbnRWYWx1ZSgpOwogICAgICAgICB9CkBAIC02MSwxNSArNjEsMTUgQEAKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKICAgICAgICAgdHJ5IHsKLQkgICAgaWYoIHF1ZXVlQ29uRmFjdG9yeSA9PSBudWxsICkgeworICAgICAgICBpZiggcXVldWVDb25GYWN0b3J5ID09IG51bGwgKSB7CiAKLQkJU3lzdGVtLm91dC5wcmludGxuKCJKYXZhIFNFIG1vZGUuLi4iKTsKLQkJSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkJcXVldWVDb25GYWN0b3J5ID0gKGpha2FydGEuam1zLlF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpIGljLmxvb2t1cCgiam1zL2VqYl9lamIzMF9oZWxsb19tZGJfUUNGIik7Ci0JCW1zZ0JlYW5RdWV1ZSA9IChqYWthcnRhLmptcy5RdWV1ZSkgaWMubG9va3VwKCJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9JblF1ZXVlIik7Ci0JCWNsaWVudFF1ZXVlID0gKGpha2FydGEuam1zLlF1ZXVlKSBpYy5sb29rdXAoImptcy9lamJfZWpiMzBfaGVsbG9fbWRiX091dFF1ZXVlIik7Ci0JCQotCSAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSmF2YSBTRSBtb2RlLi4uIik7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIHF1ZXVlQ29uRmFjdG9yeSA9IChqYWthcnRhLmptcy5RdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KSBpYy5sb29rdXAoImptcy9lamJfZWpiMzBfaGVsbG9fbWRiX1FDRiIpOworICAgICAgICBtc2dCZWFuUXVldWUgPSAoamFrYXJ0YS5qbXMuUXVldWUpIGljLmxvb2t1cCgiam1zL2VqYl9lamIzMF9oZWxsb19tZGJfSW5RdWV1ZSIpOworICAgICAgICBjbGllbnRRdWV1ZSA9IChqYWthcnRhLmptcy5RdWV1ZSkgaWMubG9va3VwKCJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9PdXRRdWV1ZSIpOworCisgICAgICAgIH0KIAogICAgICAgICAgICAgc2V0dXAoKTsKICAgICAgICAgICAgIGRvVGVzdChudW1NZXNzYWdlcyk7CkBAIC04MSwxMyArODEsMTMgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBxdWV1ZUNvbiA9IHF1ZXVlQ29uRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKIAogICAgICAgICBxdWV1ZVNlc3Npb24gPSBxdWV1ZUNvbi5jcmVhdGVRdWV1ZVNlc3Npb24KLSAgICAgICAgICAgIChmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsgCisgICAgICAgICAgICAoZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CiAKLSAgICAgICAgcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKG51bGwpOyAgICAgICAgCisgICAgICAgIHF1ZXVlU2VuZGVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVNlbmRlcihudWxsKTsKIAogICAgICAgICBxdWV1ZVJlY2VpdmVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVJlY2VpdmVyKGNsaWVudFF1ZXVlKTsKIApAQCAtMTA1LDE4ICsxMDUsMTggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHNlbmRNc2dzKGpha2FydGEuam1zLlF1ZXVlIHF1ZXVlLCBNZXNzYWdlIG1zZywgaW50IG51bSkgCisgICAgcHVibGljIHZvaWQgc2VuZE1zZ3MoamFrYXJ0YS5qbXMuUXVldWUgcXVldWUsIE1lc3NhZ2UgbXNnLCBpbnQgbnVtKQogICAgICAgICB0aHJvd3MgSk1TRXhjZXB0aW9uIHsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGF0IHRpbWUgIiArIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKICAgICAgICAgICAgIHF1ZXVlU2VuZGVyLnNlbmQocXVldWUsIG1zZyk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGF0IHRpbWUgIiArIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdChpbnQgbnVtKSAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoaW50IG51bSkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgRGVzdGluYXRpb24gZGVzdCA9IG1zZ0JlYW5RdWV1ZTsKQEAgLTEzMCw3ICsxMzAsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIHF1ZXVlIG1lc3NhZ2UiKTsKICAgICAgICAgTWVzc2FnZSByZWN2ZG1lc3NhZ2UgPSBxdWV1ZVJlY2VpdmVyLnJlY2VpdmUoVElNRU9VVCk7CiAgICAgICAgIGlmKCByZWN2ZG1lc3NhZ2UgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgbWVzc2FnZSA6ICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgbWVzc2FnZSA6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRleHRNZXNzYWdlKXJlY3ZkbWVzc2FnZSkuZ2V0VGV4dCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGltZW91dCBhZnRlciAiICsgVElNRU9VVCArICIgc2Vjb25kcyIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvbWRiL3NyYy90ZXN0L21kYi9NREJUZXN0cy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvbWRiL3NyYy90ZXN0L21kYi9NREJUZXN0cy5qYXZhCmluZGV4IGRhOTczM2MuLjIyNGU1MzIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL21kYi9zcmMvdGVzdC9tZGIvTURCVGVzdHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9tZGIvc3JjL3Rlc3QvbWRiL01EQlRlc3RzLmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgZXhlY1JldHVybiA9IFJ0RXhlYy5leGVjdXRlKGNtZCk7CiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoZXhlY1JldHVybiwgdHJ1ZSwgIkNyZWF0ZSBKTVMgcmVzb3VyY2UgZmFpbGVkIC4uLiIpOwogICAgIH0KLSAgICAKKwogICAgIEBQYXJhbWV0ZXJzKHsgIk1EQl9BUFBfRElSIiB9KQogICAgIEBUZXN0KGRlcGVuZHNPbk1ldGhvZHMgPSB7ICJjcmVhdGVKTVNSc2NUZXN0IiB9KQogICAgIHB1YmxpYyB2b2lkIGRlcGxveUpNU0FwcFRlc3QoU3RyaW5nIG1kYkFwcERpcikgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC03MSw1ICs3MSw1IEBACiAgICAgICAgIGV4ZWNSZXR1cm4gPSBSdEV4ZWMuZXhlY3V0ZShjbWQpOwogICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKGV4ZWNSZXR1cm4sIHRydWUsICJEZWxldGUgSk1EIFJlc291cmNlIGZhaWxlZCAuLi4iKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL21kYi90ZXN0bmcueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvbWRiL3Rlc3RuZy54bWwKaW5kZXggZDJiMGJmMC4uMTZlMjgyOCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvbWRiL3Rlc3RuZy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvbWRiL3Rlc3RuZy54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIC0tPgogCiA8IURPQ1RZUEUgc3VpdGUgU1lTVEVNICJodHRwOi8vdGVzdG5nLm9yZy90ZXN0bmctMS4wLmR0ZCIgPgotIAorCiA8c3VpdGUgbmFtZT0iUXVpY2tMb29rVGVzdHMiIHZlcmJvc2U9IjIiPgogICA8cGFyYW1ldGVyIG5hbWU9Ik1EQl9BUFBfRElSIiB2YWx1ZT0iLi4vLi4vZGlzdC9tZGIvIi8+CiAgIDxwYXJhbWV0ZXIgbmFtZT0iQkFUQ0hfRklMRTEiIHZhbHVlPSIuL2NyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvcmVtb3Rldmlldy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9yZW1vdGV2aWV3L2J1aWxkLnhtbAppbmRleCBlYjFmOTQ2Li44Nzg4NDFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9yZW1vdGV2aWV3L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9yZW1vdGV2aWV3L2J1aWxkLnhtbApAQCAtMjAsMzQgKzIwLDM0IEBACiA8cHJvamVjdCBuYW1lPSJyZW1vdGV2aWV3IiBkZWZhdWx0PSJkZWZhdWx0IiBiYXNlZGlyPSIuIj4KICAgICA8cHJvcGVydHkgZmlsZT0iYnVpbGQucHJvcGVydGllcyIvPgogICAgIDxwcm9wZXJ0eSBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC8ke2RlcGxveS5wbGF0Zm9ybX0tY29uZmlnLnByb3BlcnRpZXMiLz4KLSAgICAKKwogICAgIDxkZXNjcmlwdGlvbj5CdWlsZHMsIHRlc3RzLCBhbmQgcnVucyB0aGUgcHJvamVjdCBKZGJjVXNlclR4IEFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KLSAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+ICAgCisgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LXRhcmdldHMueG1sIi8+Ci0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW50ZXN0LHVuZGVwbG95IiAvPiAgICAKKworICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxkZXBsb3kscnVudGVzdCx1bmRlcGxveSIgLz4KICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWRlcGxveSIgZGVwZW5kcz0iYnVpbGQsZGVwbG95IiAvPgogCi0gICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWltcGwiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLXRlc3RzIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJydW50ZXN0Ij4gCisKKyAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bnRlc3QtaW1wbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIke3Rlc3RuZy50ZXN0Lm5hbWV9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdG5nLnRlc3QubmFtZSIgdmFsdWU9IiR7dGVzdG5nLnRlc3QubmFtZX0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0bmcudGVzdGNsaWVudCIgdmFsdWU9IlJlbW90ZVZpZXdUZXN0TkciLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktJHtkZXBsb3kucGxhdGZvcm19LWltcGwiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvcmVtb3Rldmlldy9zcmMvamF2YS9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvcmVtb3Rldmlldy9zcmMvamF2YS9IZWxsby5qYXZhCmluZGV4IDU4YWUyNzUuLjY4YzkxZmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL3JlbW90ZXZpZXcvc3JjL2phdmEvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9yZW1vdGV2aWV3L3NyYy9qYXZhL0hlbGxvLmphdmEKQEAgLTI5LDEwICsyOSwxMCBAQAogICAgIEZ1dHVyZTxTdHJpbmc+IGFzeW5jQmxvY2soaW50IHNlY29uZHMpOwogCiAgICAgdm9pZCBmaXJlQW5kRm9yZ2V0KCk7Ci0JCisKICAgICBGdXR1cmU8U3RyaW5nPiBhc3luY1Rocm93RXhjZXB0aW9uKFN0cmluZyBleGNlcHRpb25UeXBlKTsKIAogICAgIEZ1dHVyZTxTdHJpbmc+IGFzeW5jQ2FuY2VsKGludCBzZWNvbmRzKSB0aHJvd3MgRXhjZXB0aW9uOwotICAgIAorCiAgICAgdm9pZCB0aHJvd0V4Y2VwdGlvbihTdHJpbmcgZXhjZXB0aW9uVHlwZSk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9yZW1vdGV2aWV3L3NyYy9qYXZhL0hlbGxvQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvcmVtb3Rldmlldy9zcmMvamF2YS9IZWxsb0JlYW4uamF2YQppbmRleCBmMmRjYjIzLi5lODdmY2EzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9yZW1vdGV2aWV3L3NyYy9qYXZhL0hlbGxvQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL3JlbW90ZXZpZXcvc3JjL2phdmEvSGVsbG9CZWFuLmphdmEKQEAgLTI3LDg3ICsyNyw4NyBAQAogcHVibGljIGNsYXNzIEhlbGxvQmVhbiB7CiAKICAgICBAUmVzb3VyY2UKLQlwcml2YXRlIFNlc3Npb25Db250ZXh0IHNlc3Npb25DdHg7CisgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzZXNzaW9uQ3R4OwogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjppbml0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6aW5pdCgpIik7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6aGVsbG8oKSIpOwotCXJldHVybiAiaGVsbG8sIHdvcmxkXG4iOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjpoZWxsbygpIik7CisgICAgcmV0dXJuICJoZWxsbywgd29ybGRcbiI7CiAgICAgfQogCiAgICAgQEFzeW5jaHJvbm91cwogICAgIHB1YmxpYyBGdXR1cmU8U3RyaW5nPiBoZWxsb0FzeW5jKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjpoZWxsb0FzeW5jKCkiKTsKLQlyZXR1cm4gbmV3IEFzeW5jUmVzdWx0PFN0cmluZz4oImhlbG8sIGFzeW5jIHdvcmxkIVxuIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmhlbGxvQXN5bmMoKSIpOworICAgIHJldHVybiBuZXcgQXN5bmNSZXN1bHQ8U3RyaW5nPigiaGVsbywgYXN5bmMgd29ybGQhXG4iKTsKICAgICB9CiAKICAgICBAQXN5bmNocm9ub3VzCiAgICAgcHVibGljIEZ1dHVyZTxTdHJpbmc+IGFzeW5jQmxvY2soaW50IHNlY29uZHMpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6YXN5bmNCbG9jayIpOwotCXNsZWVwKHNlY29uZHMpOwotCXJldHVybiBuZXcgQXN5bmNSZXN1bHQ8U3RyaW5nPigiYmxvY2tlZCBzdWNjZXNzZnVsbHkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6YXN5bmNCbG9jayIpOworICAgIHNsZWVwKHNlY29uZHMpOworICAgIHJldHVybiBuZXcgQXN5bmNSZXN1bHQ8U3RyaW5nPigiYmxvY2tlZCBzdWNjZXNzZnVsbHkiKTsKICAgICB9CiAKLSAgICBAQXN5bmNocm9ub3VzIAorICAgIEBBc3luY2hyb25vdXMKICAgICBwdWJsaWMgdm9pZCBmaXJlQW5kRm9yZ2V0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjpmaXJlQW5kRm9yZ2V0KCkiKTsKLQlzbGVlcCg1KTsKLSAgICB9Ci0JCi0gICAgQEFzeW5jaHJvbm91cyAKLSAgICBwdWJsaWMgRnV0dXJlPFN0cmluZz4gYXN5bmNUaHJvd0V4Y2VwdGlvbihTdHJpbmcgZXhjZXB0aW9uVHlwZSkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjphc3luY1Rocm93RXhjZXB0aW9uIik7Ci0JdGhyb3dFeGNlcHRpb24oZXhjZXB0aW9uVHlwZSk7Ci0JcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KCJzaG91bGQgaGF2ZSB0aHJvd24gZXhjZXB0aW9uIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmZpcmVBbmRGb3JnZXQoKSIpOworICAgIHNsZWVwKDUpOwogICAgIH0KIAotICAgIEBBc3luY2hyb25vdXMgCisgICAgQEFzeW5jaHJvbm91cworICAgIHB1YmxpYyBGdXR1cmU8U3RyaW5nPiBhc3luY1Rocm93RXhjZXB0aW9uKFN0cmluZyBleGNlcHRpb25UeXBlKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmFzeW5jVGhyb3dFeGNlcHRpb24iKTsKKyAgICB0aHJvd0V4Y2VwdGlvbihleGNlcHRpb25UeXBlKTsKKyAgICByZXR1cm4gbmV3IEFzeW5jUmVzdWx0PFN0cmluZz4oInNob3VsZCBoYXZlIHRocm93biBleGNlcHRpb24iKTsKKyAgICB9CisKKyAgICBAQXN5bmNocm9ub3VzCiAgICAgcHVibGljIEZ1dHVyZTxTdHJpbmc+IGFzeW5jQ2FuY2VsKGludCBzZWNvbmRzKSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjphc3luY0NhbmNlbCIpOwotCXNsZWVwKHNlY29uZHMpOwotCWlmKCBzZXNzaW9uQ3R4Lndhc0NhbmNlbENhbGxlZCgpICkgewotCSAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJDYW5jZWxlZCBhZnRlciAiICsgc2Vjb25kcyArICIgc2Vjb25kcyIpOwotCX0KLQlyZXR1cm4gbmV3IEFzeW5jUmVzdWx0PFN0cmluZz4oImFzeW5jQ2FuY2VsKCkgc2hvdWxkIGhhdmUgYmVlbiBjYW5jZWxsZWQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6YXN5bmNDYW5jZWwiKTsKKyAgICBzbGVlcChzZWNvbmRzKTsKKyAgICBpZiggc2Vzc2lvbkN0eC53YXNDYW5jZWxDYWxsZWQoKSApIHsKKyAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQ2FuY2VsZWQgYWZ0ZXIgIiArIHNlY29uZHMgKyAiIHNlY29uZHMiKTsKKyAgICB9CisgICAgcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KCJhc3luY0NhbmNlbCgpIHNob3VsZCBoYXZlIGJlZW4gY2FuY2VsbGVkIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGhyb3dFeGNlcHRpb24oU3RyaW5nIGV4Y2VwdGlvblR5cGUpIHsKLQlpZiggZXhjZXB0aW9uVHlwZS5lcXVhbHMoImpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbiIpICkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4Y2VwdGlvblR5cGUpOwotCX0gZWxzZSBpZiggZXhjZXB0aW9uVHlwZS5lcXVhbHMoImpha2FydGEuZWpiLkNvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24iKSApIHsKLQkgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24oZXhjZXB0aW9uVHlwZSk7Ci0JfSBlbHNlIGlmKCBleGNlcHRpb25UeXBlLmVxdWFscygiamFrYXJ0YS5lamIuQ29uY3VycmVudEFjY2Vzc1RpbWVvdXRFeGNlcHRpb24iKSApIHsKLQkgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRBY2Nlc3NUaW1lb3V0RXhjZXB0aW9uKGV4Y2VwdGlvblR5cGUpOwotCX0gZWxzZSBpZiggZXhjZXB0aW9uVHlwZS5lcXVhbHMoImpha2FydGEuZWpiLklsbGVnYWxMb29wYmFja0V4Y2VwdGlvbiIpICkgewotCSAgICB0aHJvdyBuZXcgSWxsZWdhbExvb3BiYWNrRXhjZXB0aW9uKGV4Y2VwdGlvblR5cGUpOwotCX0KKyAgICBpZiggZXhjZXB0aW9uVHlwZS5lcXVhbHMoImpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbiIpICkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4Y2VwdGlvblR5cGUpOworICAgIH0gZWxzZSBpZiggZXhjZXB0aW9uVHlwZS5lcXVhbHMoImpha2FydGEuZWpiLkNvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24iKSApIHsKKyAgICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24oZXhjZXB0aW9uVHlwZSk7CisgICAgfSBlbHNlIGlmKCBleGNlcHRpb25UeXBlLmVxdWFscygiamFrYXJ0YS5lamIuQ29uY3VycmVudEFjY2Vzc1RpbWVvdXRFeGNlcHRpb24iKSApIHsKKyAgICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRBY2Nlc3NUaW1lb3V0RXhjZXB0aW9uKGV4Y2VwdGlvblR5cGUpOworICAgIH0gZWxzZSBpZiggZXhjZXB0aW9uVHlwZS5lcXVhbHMoImpha2FydGEuZWpiLklsbGVnYWxMb29wYmFja0V4Y2VwdGlvbiIpICkgeworICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbExvb3BiYWNrRXhjZXB0aW9uKGV4Y2VwdGlvblR5cGUpOworICAgIH0KIAotCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oZXhjZXB0aW9uVHlwZSk7CisgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihleGNlcHRpb25UeXBlKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgc2xlZXAoaW50IHNlY29uZHMpIHsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjpzbGVlcGluZyBmb3IgIiArIHNlY29uZHMgKyAKLQkJCSAgICJzZWNvbmRzIik7Ci0JdHJ5IHsKLQkgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcChzZWNvbmRzICogMTAwMCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjp3b2tlIHVwIGZyb20gIiArIHNlY29uZHMgKyAKLQkJCSAgICAgICAic2Vjb25kIHNsZWVwIik7Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6c2xlZXBpbmcgZm9yICIgKyBzZWNvbmRzICsKKyAgICAgICAgICAgICAgICJzZWNvbmRzIik7CisgICAgdHJ5IHsKKyAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcChzZWNvbmRzICogMTAwMCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjp3b2tlIHVwIGZyb20gIiArIHNlY29uZHMgKworICAgICAgICAgICAgICAgICAgICJzZWNvbmQgc2xlZXAiKTsKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogCiAgICAgfQogCiAKICAgICBAUHJlRGVzdHJveQogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjpkZXN0cm95KCkiKTsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvcmVtb3Rldmlldy9zcmMvamF2YS9TaW5nbGV0b25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9yZW1vdGV2aWV3L3NyYy9qYXZhL1NpbmdsZXRvbkJlYW4uamF2YQppbmRleCBmODIzMGQxLi5mNTUyNGZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9yZW1vdGV2aWV3L3NyYy9qYXZhL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9yZW1vdGV2aWV3L3NyYy9qYXZhL1NpbmdsZXRvbkJlYW4uamF2YQpAQCAtMzAsMTQgKzMwLDE0IEBACiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjppbml0KCkiKTsKIAotCXRyeSB7Ci0JICAgIEhlbGxvUmVtb3RlIGhyID0gaGVsbG9Ib21lLmNyZWF0ZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvaGVsbG9SZW1vdGUuaGVsbG8oKSBzYXlzICIgKyBoci5oZWxsbygpKTsKKyAgICB0cnkgeworICAgICAgICBIZWxsb1JlbW90ZSBociA9IGhlbGxvSG9tZS5jcmVhdGUoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb2hlbGxvUmVtb3RlLmhlbGxvKCkgc2F5cyAiICsgaHIuaGVsbG8oKSk7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsby5oZWxsbygpIHNheXMgIiArIGhlbGxvLmhlbGxvKCkpOwotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8uaGVsbG8oKSBzYXlzICIgKyBoZWxsby5oZWxsbygpKTsKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9yZW1vdGV2aWV3L3NyYy90ZXN0L1JlbW90ZVZpZXdUZXN0TkcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL3JlbW90ZXZpZXcvc3JjL3Rlc3QvUmVtb3RlVmlld1Rlc3RORy5qYXZhCmluZGV4IGY2YmVjZjAuLjEzZDAzNDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL3JlbW90ZXZpZXcvc3JjL3Rlc3QvUmVtb3RlVmlld1Rlc3RORy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL3JlbW90ZXZpZXcvc3JjL3Rlc3QvUmVtb3RlVmlld1Rlc3RORy5qYXZhCkBAIC00NCwxMiArNDQsMTIgQEAKICAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBmdXR1cmUuZ2V0KCk7CiAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiaGVsbG9Bc3luYygpIHNheXMgOiAiICsgcmVzdWx0KTsKICAgICAgICAgICAgIHRlc3RfcmVzdWx0ID0gdHJ1ZTsKLQkgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZSkgeworICAgICAgICB9IGNhdGNoKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB0ZXN0X3Jlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgYXN5bmMgRXhlY3V0aW9uRXhjZXB0aW9uLiBDYXVzZSBpcyAiICsKICAgICAgICAgICAgICAgICBlLmdldENhdXNlKCkuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgICAgICBlLmdldENhdXNlKCkucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0KKyAgICAgICAgfQogICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHRlc3RfcmVzdWx0LCB0cnVlLCJVbmV4cGVjdGVkIFJlc3VsdHMiKTsKICAgICB9CiAKQEAgLTk0LDcgKzk0LDcgQEAKICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIjIueCBIZWxsb1JlbW90ZS5oZWxsbygpIHNheXMgIiArIGhyLmhlbGxvKCkpOwogICAgIH0KICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGNhbGxCdXNIb21lKEhlbGxvIGgpIHsKLQlTdHJpbmcgaHJldCA9IGguaGVsbG8oKTsKKyAgICBTdHJpbmcgaHJldCA9IGguaGVsbG8oKTsKICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvLmhlbGxvKCkgc2F5cyAiICsgaC5oZWxsbygpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9zZnVsbm9pL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL3NmdWxub2kvYnVpbGQueG1sCmluZGV4IDYxNzA3MmQuLmZlNThiMDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL3NmdWxub2kvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL3NmdWxub2kvYnVpbGQueG1sCkBAIC0yMCwzNiArMjAsMzYgQEAKIDxwcm9qZWN0IG5hbWU9InNmdWxub2kiIGRlZmF1bHQ9ImRlZmF1bHQiIGJhc2VkaXI9Ii4iPgogICAgIDxwcm9wZXJ0eSBmaWxlPSJidWlsZC5wcm9wZXJ0aWVzIi8+CiAgICAgPHByb3BlcnR5IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS1jb25maWcucHJvcGVydGllcyIvPgotICAgIAorCiAgICAgPGRlc2NyaXB0aW9uPkJ1aWxkcywgdGVzdHMsIGFuZCBydW5zIHRoZSBwcm9qZWN0IEpkYmNVc2VyVHggQXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgotICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4gICAKKyAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC8ke2RlcGxveS5wbGF0Zm9ybX0tdGFyZ2V0cy54bWwiLz4KLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJ1bnRlc3QsdW5kZXBsb3kiIC8+ICAgIAorCisgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW50ZXN0LHVuZGVwbG95IiAvPgogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtZGVwbG95IiBkZXBlbmRzPSJidWlsZCxkZXBsb3kiIC8+CiAKLSAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZS10ZXN0cyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtaW1wbCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS0ke2RlcGxveS5wbGF0Zm9ybX0taW1wbCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQgIG5hbWU9InJ1bnRlc3QiPiAKKworICAgIDx0YXJnZXQgIG5hbWU9InJ1bnRlc3QiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bnRlc3QtaW1wbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9IiR7dGVzdG5nLnRlc3QubmFtZX0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RuZy50ZXN0Lm5hbWUiIHZhbHVlPSIke3Rlc3RuZy50ZXN0Lm5hbWV9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0bmcudGVzdGNsaWVudCIgdmFsdWU9IlNmdWxub2lUZXN0TkciLz4KICAgICAgPC9hbnRjYWxsPgotICAgICAgICAKKwogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktJHtkZXBsb3kucGxhdGZvcm19LWltcGwiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogPC9wcm9qZWN0PgogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL3NmdWxub2kvc3JjL2phdmEvU2Z1bFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL3NmdWxub2kvc3JjL2phdmEvU2Z1bFNlcnZsZXQuamF2YQppbmRleCAxYWJmMzVlLi44NmI3MmQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9zZnVsbm9pL3NyYy9qYXZhL1NmdWxTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2Z1bG5vaS9zcmMvamF2YS9TZnVsU2VydmxldC5qYXZhCkBAIC0yMiwxOCArMjIsMTggQEAKIGltcG9ydCBqYWthcnRhLmVqYi5FSkI7CiAKIHB1YmxpYyBjbGFzcyBTZnVsU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgIAorCiAgICAgQEVKQgogICAgIHByaXZhdGUgU2Z1bEJlYW4gc2ltcGxlRUpCOwotICAgIAorCiAgICAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1JlcXVlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvcGxhaW4iKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CiAgICAgICAgIGJvb2xlYW4gc3RhdHVzID0gZmFsc2U7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCItLS0tLS0tU2Z1bFNlcnZsZXQtLS0tLS0tLSIpOyAgCisKKyAgICAgICAgICAgIG91dC5wcmludGxuKCItLS0tLS0tU2Z1bFNlcnZsZXQtLS0tLS0tLSIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIlNmdWxTZXJ2bGV0IGF0ICIgKyByZXF1ZXN0LmdldENvbnRleHRQYXRoICgpKTsKIAogICAgICAgICAgICAgU3RyaW5nIHRlc3RjYXNlID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInRjIik7CkBAIC00MSwxMSArNDEsMTEgQEAKICAgICAgICAgICAgIGlmICh0ZXN0Y2FzZSAhPSBudWxsKSB7CiAKICAgICAgICAgaWYgKCJTZXROYW1lIi5lcXVhbHModGVzdGNhc2UpKXsKLQkJb3V0LnByaW50bG4oIlNpbXBsZSBFSkI6Iik7Ci0JCW91dC5wcmludGxuKCJARUpCIEluamVjdGlvbj0iK3NpbXBsZUVKQik7CisgICAgICAgIG91dC5wcmludGxuKCJTaW1wbGUgRUpCOiIpOworICAgICAgICBvdXQucHJpbnRsbigiQEVKQiBJbmplY3Rpb249IitzaW1wbGVFSkIpOwogCi0JCWlmIChzaW1wbGVFSkIgIT0gbnVsbCkgewotCQkgIG91dC5wcmludGxuKCJTZXROYW1lIGluIGEgc3RhdGVmdWwgc2Vzc2lvbiBiZWFuLiIpOworICAgICAgICBpZiAoc2ltcGxlRUpCICE9IG51bGwpIHsKKyAgICAgICAgICBvdXQucHJpbnRsbigiU2V0TmFtZSBpbiBhIHN0YXRlZnVsIHNlc3Npb24gYmVhbi4iKTsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgc2ltcGxlRUpCLnNldE5hbWUoIkR1a2UiKTsKICAgICAgICAgICAgICAgICBzdGF0dXMgPSB0cnVlOwpAQCAtNTMsNDMgKzUzLDQzIEBACiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICBzdGF0dXMgPSBmYWxzZTsKICAgICAgICAgICAgIH0KLQkJfQorICAgICAgICB9CiAKLQkgICAgICB9IGVsc2UgaWYgKCJHZXROYW1lIi5lcXVhbHModGVzdGNhc2UpKXsKKyAgICAgICAgICB9IGVsc2UgaWYgKCJHZXROYW1lIi5lcXVhbHModGVzdGNhc2UpKXsKIAotCQlTdHJpbmcgc2ltcGxlRUpCTmFtZSA9IG51bGw7Ci0JCQotCQlpZiAoc2ltcGxlRUpCICE9IG51bGwpIHsKLQkJICBzaW1wbGVFSkJOYW1lID0gc2ltcGxlRUpCLmdldE5hbWUoKTsKLQkJICBvdXQucHJpbnRsbigiQEVKQi5nZXROYW1lKCk9IiArIHNpbXBsZUVKQk5hbWUpOwotCQl9CisgICAgICAgIFN0cmluZyBzaW1wbGVFSkJOYW1lID0gbnVsbDsKIAotCQlpZiAoc2ltcGxlRUpCICE9IG51bGwgJiYKLQkJICAgICJEdWtlIi5lcXVhbHMoc2ltcGxlRUpCTmFtZSkpewotCQkgIHN0YXR1cyA9IHRydWU7Ci0JCX0KKyAgICAgICAgaWYgKHNpbXBsZUVKQiAhPSBudWxsKSB7CisgICAgICAgICAgc2ltcGxlRUpCTmFtZSA9IHNpbXBsZUVKQi5nZXROYW1lKCk7CisgICAgICAgICAgb3V0LnByaW50bG4oIkBFSkIuZ2V0TmFtZSgpPSIgKyBzaW1wbGVFSkJOYW1lKTsKKyAgICAgICAgfQogCi0JICAgICAgfSBlbHNlIHsKLQkJb3V0LnByaW50bG4oIk5vIHN1Y2ggdGVzdGNhc2UiKTsKLQkgICAgICB9Ci0JICB9CisgICAgICAgIGlmIChzaW1wbGVFSkIgIT0gbnVsbCAmJgorICAgICAgICAgICAgIkR1a2UiLmVxdWFscyhzaW1wbGVFSkJOYW1lKSl7CisgICAgICAgICAgc3RhdHVzID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgb3V0LnByaW50bG4oIk5vIHN1Y2ggdGVzdGNhc2UiKTsKKyAgICAgICAgICB9CisgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCApIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzZXJ2bGV0IHRlc3QgZmFpbGVkIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihleCk7Ci0gICAgICAgIH0gZmluYWxseSB7IAotICAgICAgICAgICAgaWYgKHN0YXR1cykgCi0JICAgICAgb3V0LnByaW50bG4oIlRlc3Q6UGFzcyIpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgaWYgKHN0YXR1cykKKyAgICAgICAgICBvdXQucHJpbnRsbigiVGVzdDpQYXNzIik7CiAgICAgICAgICAgICBlbHNlCi0JICAgICAgb3V0LnByaW50bG4oIlRlc3Q6RmFpbCIpOworICAgICAgICAgIG91dC5wcmludGxuKCJUZXN0OkZhaWwiKTsKICAgICAgICAgICAgIG91dC5jbG9zZSgpOwogICAgICAgICB9Ci0gICAgfSAKKyAgICB9CiAKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgfSAKKyAgICB9CiAKIAogICAgIHByb3RlY3RlZCB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL3NmdWxub2kvc3JjL3Rlc3QvU2Z1bG5vaVRlc3RORy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2Z1bG5vaS9zcmMvdGVzdC9TZnVsbm9pVGVzdE5HLmphdmEKaW5kZXggMzI4YTE0ZS4uNGJiMWFjYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2Z1bG5vaS9zcmMvdGVzdC9TZnVsbm9pVGVzdE5HLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2Z1bG5vaS9zcmMvdGVzdC9TZnVsbm9pVGVzdE5HLmphdmEKQEAgLTI1LDE3ICsyNSwxNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9CiAgICAgICAgICJlamItc2Z1bG5vaSI7Ci0gICAKKwogICAgIHByaXZhdGUgU3RyaW5nIHN0ckNvbnRleHRSb290PSIvc2Z1bG5vaSI7CiAKIC8vICAgIHN0YXRpYyBTdHJpbmcgcmVzdWx0ID0gIiI7CiAgICAgU3RyaW5nIGhvc3Q9U3lzdGVtLmdldFByb3BlcnR5KCJodHRwLmhvc3QiKTsKICAgICBTdHJpbmcgcG9ydD1TeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucG9ydCIpOwotICAgICAgICAgICAKKwogCiAgICAgQFRlc3QoZ3JvdXBzID0geyAiaW5pdCIgfSkKICAgICBwdWJsaWMgdm9pZCBTZXROYW1lKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7ICAgICAgIAorICAgICAgICBib29sZWFuIHJlc3VsdD1mYWxzZTsKICAgICAgICAgdHJ5ewogICAgICAgICAgICAgcmVzdWx0ID0gdGVzdCgiU2V0TmFtZSIpOwogICAgICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhyZXN1bHQsIHRydWUsIlVuZXhwZWN0ZWQgUmVzdWx0cyIpOwpAQCAtNjEsNyArNjEsNyBAQAogICAgICAgICBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSAiVGVzdDpQYXNzIjsKICAgICAgICAgU3RyaW5nIFRFU1RfQ0FTRSA9IFRFU1RfTkFNRSArICI6IiArIGM7CiAgICAgICAgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOwotICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBzdHJDb250ZXh0Um9vdCArIAorICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBzdHJDb250ZXh0Um9vdCArCiAgICAgICAgICAgICAgICAgICAgICAiL3Rlc3Q/dGM9IiArIGM7CiAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJ1cmw9Iit1cmwpOwogCkBAIC03NCwxMSArNzQsMTEgQEAKICAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gY29ubi5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0JICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKKyAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKGxpbmUuY29udGFpbnMoRVhQRUNURURfUkVTUE9OU0UpKSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0JICAgIAorICAgICAgICAgICAgfQogICAgICAgICB9ICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2luZ2xldG9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL3NpbmdsZXRvbi9idWlsZC54bWwKaW5kZXggNWU5ZmQwNy4uNDZmZDAxZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2luZ2xldG9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9zaW5nbGV0b24vYnVpbGQueG1sCkBAIC0yMCwyMSArMjAsMjEgQEAKIDxwcm9qZWN0IG5hbWU9InNpbmdsZXRvbiIgZGVmYXVsdD0iZGVmYXVsdCIgYmFzZWRpcj0iLiI+CiAgICAgPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiLz4KICAgICA8cHJvcGVydHkgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LWNvbmZpZy5wcm9wZXJ0aWVzIi8+Ci0gICAgCisKICAgICA8ZGVzY3JpcHRpb24+QnVpbGRzLCB0ZXN0cywgYW5kIHJ1bnMgdGhlIHByb2plY3QgSmRiY1VzZXJUeCBBcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+Ci0gICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPiAgIAorICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS10YXJnZXRzLnhtbCIvPgotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxkZXBsb3kscmVkZXBsb3kscnVudGVzdCx1bmRlcGxveSIgLz4gICAgCisKKyAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJlZGVwbG95LHJ1bnRlc3QsdW5kZXBsb3kiIC8+CiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1kZXBsb3kiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxyZWRlcGxveSIgLz4KIAotICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlLXRlc3RzIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1pbXBsIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qU2VydmxldC5jbGFzcywqKi8qSW50ZXJmYWNlLmNsYXNzIi8+Ci0JPC9hbnRjYWxsPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktJHtkZXBsb3kucGxhdGZvcm19LWltcGwiLz4KICAgICA8L3RhcmdldD4KQEAgLTQyLDIwICs0MiwyMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icmVkZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlLWRlcGxveS0ke2RlcGxveS5wbGF0Zm9ybX0iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZWRlcGxveSIgdmFsdWU9Ii0tZm9yY2U9dHJ1ZSIvPgotCTwvYW50Y2FsbD4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+IAorCisgICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudGVzdC1pbXBsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iJHt0ZXN0bmcudGVzdC5uYW1lfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0idGVzdG5nLnRlc3QubmFtZSIgdmFsdWU9IiR7dGVzdG5nLnRlc3QubmFtZX0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RuZy50ZXN0Y2xpZW50IiB2YWx1ZT0iU2luZ2xldG9uVGVzdE5HIi8+CiAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAgCisKICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL3NpbmdsZXRvbi9tZXRhZGF0YS93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2luZ2xldG9uL21ldGFkYXRhL3dlYi54bWwKaW5kZXggYzliZTZjMy4uNmI0YzAyNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2luZ2xldG9uL21ldGFkYXRhL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2luZ2xldG9uL21ldGFkYXRhL3dlYi54bWwKQEAgLTE3LDkgKzE3LDkgQEAKIAogLS0+CiAKLTx3ZWItYXBwIHZlcnNpb249IjIuNSIgCi0gIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIAotICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKzx3ZWItYXBwIHZlcnNpb249IjIuNSIKKyAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL3NpbmdsZXRvbi9zcmMvamF2YS9CZWFuTGVhZi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2luZ2xldG9uL3NyYy9qYXZhL0JlYW5MZWFmLmphdmEKaW5kZXggODQzNGU0ZS4uZDFhNDE3OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2luZ2xldG9uL3NyYy9qYXZhL0JlYW5MZWFmLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2luZ2xldG9uL3NyYy9qYXZhL0JlYW5MZWFmLmphdmEKQEAgLTMwLDE5ICszMCwxOSBAQAogCiAgICAgU3RyaW5nIE1FU1NBR0VfUE9TVCA9ICJQb3N0QmVhbkxlYWYiOwogICAgIFN0cmluZyBNRVNTQUdFX0hFTExPID0gIkhlbGxvQmVhbkxlYWYiOwotICAgIAorCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBhZnRlckNvbnN0cnVjdCgpIHsKICAgICAgICAgaWYgKG1zZyAhPSBudWxsICYmICFtc2cuZ2V0TWVzc2FnZSgpLmNvbnRhaW5zKE1FU1NBR0VfUE9TVCkpewotCSAgbXNnLmFwcGVuZE1lc3NhZ2UoTUVTU0FHRV9QT1NUKTsKLQl9CisgICAgICBtc2cuYXBwZW5kTWVzc2FnZShNRVNTQUdFX1BPU1QpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKCkgewogICAgICAgICBpZiAobXNnICE9IG51bGwgJiYgIW1zZy5nZXRNZXNzYWdlKCkuY29udGFpbnMoTUVTU0FHRV9IRUxMTykpewotCSAgbXNnLmFwcGVuZE1lc3NhZ2UoTUVTU0FHRV9IRUxMTyk7Ci0JfQorICAgICAgbXNnLmFwcGVuZE1lc3NhZ2UoTUVTU0FHRV9IRUxMTyk7CisgICAgfQogICAgICAgICByZXR1cm4gIkhlbGxvIGZyb206ICIgKyB0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIjsgIiArIFN5c3RlbS5pZGVudGl0eUhhc2hDb2RlKHRoaXMpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2luZ2xldG9uL3NyYy9qYXZhL0JlYW5NZXNzYWdlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9zaW5nbGV0b24vc3JjL2phdmEvQmVhbk1lc3NhZ2UuamF2YQppbmRleCA0YmZkMGZhLi5kZGZiYjI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9zaW5nbGV0b24vc3JjL2phdmEvQmVhbk1lc3NhZ2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9zaW5nbGV0b24vc3JjL2phdmEvQmVhbk1lc3NhZ2UuamF2YQpAQCAtNDAsOSArNDAsOSBAQAogICAgICAgICB0aGlzLm1lc3NhZ2UgKz0gbWVzc2FnZTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWFuTWVzc2FnZTogYXBwZW5kTWVzc2FnZT0iK3RoaXMubWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbygpIHsKICAgICAgICAgcmV0dXJuICJIZWxsbyBmcm9tOiAiICsgdGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSArICI7ICIgKyBTeXN0ZW0uaWRlbnRpdHlIYXNoQ29kZSh0aGlzKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL3NpbmdsZXRvbi9zcmMvamF2YS9CZWFuUm9vdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2luZ2xldG9uL3NyYy9qYXZhL0JlYW5Sb290LmphdmEKaW5kZXggMjE2MjBmOC4uZWQ1MDI5ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2luZ2xldG9uL3NyYy9qYXZhL0JlYW5Sb290LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2luZ2xldG9uL3NyYy9qYXZhL0JlYW5Sb290LmphdmEKQEAgLTM1LDIxICszNSwyMSBAQAogCiAgICAgU3RyaW5nIE1FU1NBR0VfUE9TVCA9ICJQb3N0QmVhblJvb3QiOwogICAgIFN0cmluZyBNRVNTQUdFX0hFTExPID0gIkhlbGxvQmVhblJvb3QiOwotICAgIAorCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBhZnRlckNvbnN0cnVjdCgpIHsKICAgICAgICAgaWYgKG1zZyAhPSBudWxsICYmICFtc2cuZ2V0TWVzc2FnZSgpLmNvbnRhaW5zKE1FU1NBR0VfUE9TVCkpewotCSAgbXNnLmFwcGVuZE1lc3NhZ2UoTUVTU0FHRV9QT1NUKTsKLQl9CisgICAgICBtc2cuYXBwZW5kTWVzc2FnZShNRVNTQUdFX1BPU1QpOworICAgIH0KICAgICAgICAgU3RyaW5nIGggPSBibC5zYXlIZWxsbygpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqIEJlYW5Sb290OiBIZWxsbyBmcm9tIGJlYW5MZWFmOiAiICsgaCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbygpIHsKICAgICAgICAgaWYgKG1zZyAhPSBudWxsICYmICFtc2cuZ2V0TWVzc2FnZSgpLmNvbnRhaW5zKE1FU1NBR0VfSEVMTE8pKXsKLQkgIG1zZy5hcHBlbmRNZXNzYWdlKE1FU1NBR0VfSEVMTE8pOwotCX0KKyAgICAgIG1zZy5hcHBlbmRNZXNzYWdlKE1FU1NBR0VfSEVMTE8pOworICAgIH0KICAgICAgICAgcmV0dXJuICJIZWxsbyBmcm9tOiAiICsgdGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSArICI7ICIgKyBTeXN0ZW0uaWRlbnRpdHlIYXNoQ29kZSh0aGlzKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL3NpbmdsZXRvbi9zcmMvamF2YS9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2luZ2xldG9uL3NyYy9qYXZhL1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggZTczZDJlMi4uNjdlOTc5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2luZ2xldG9uL3NyYy9qYXZhL1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2luZ2xldG9uL3NyYy9qYXZhL1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogCiBwdWJsaWMgY2xhc3MgVGVzdFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7Ci0gICAKKwogICAgIEBFSkIKICAgICBwcml2YXRlIEJlYW5Sb290SW50ZXJmYWNlIHJvb3Q7CiAKQEAgLTQwLDcgKzQwLDcgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiAgewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAgICAgICAgIHNjID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7Ci0JbWVzc2FnZSA9IG1zZy5nZXRNZXNzYWdlKCk7CisgICAgbWVzc2FnZSA9IG1zZy5nZXRNZXNzYWdlKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic2VydmxldCBpbml0OiBtZXNzYWdlPSIrbWVzc2FnZSk7CiAgICAgfQogCkBAIC00OCw2NCArNDgsNjQgQEAKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9wbGFpbiIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLQlTdHJpbmcgRVhQRUNURURfUkVTVUxUID0iUG9zdEJlYW5Sb290UG9zdEJlYW5MZWFmSGVsbG9CZWFuTGVhZiI7CisgICAgU3RyaW5nIEVYUEVDVEVEX1JFU1VMVCA9IlBvc3RCZWFuUm9vdFBvc3RCZWFuTGVhZkhlbGxvQmVhbkxlYWYiOwogICAgICAgICBib29sZWFuIHN0YXR1cyA9IGZhbHNlOwogCi0JdHJ5IHsKKyAgICB0cnkgewogCi0JICBTdHJpbmcgdGVzdGNhc2UgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigidGMiKTsKLQkgIG91dC5wcmludGxuKCJ0ZXN0Y2FzZSA9ICIgKyB0ZXN0Y2FzZSk7Ci0JICBvdXQucHJpbnRsbigiVGVzdFNlcnZsZXQiKTsgIAotCSAgb3V0LnByaW50bG4oImNvbnRleHRQYXRoPSIgKyByZXF1ZXN0LmdldENvbnRleHRQYXRoICgpKTsKKyAgICAgIFN0cmluZyB0ZXN0Y2FzZSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJ0YyIpOworICAgICAgb3V0LnByaW50bG4oInRlc3RjYXNlID0gIiArIHRlc3RjYXNlKTsKKyAgICAgIG91dC5wcmludGxuKCJUZXN0U2VydmxldCIpOworICAgICAgb3V0LnByaW50bG4oImNvbnRleHRQYXRoPSIgKyByZXF1ZXN0LmdldENvbnRleHRQYXRoICgpKTsKIAotCSAgaWYgKHRlc3RjYXNlICE9IG51bGwpIHsKKyAgICAgIGlmICh0ZXN0Y2FzZSAhPSBudWxsKSB7CiAKLQkgICAgaWYgKCJJbmplY3RMb29rdXAiLmVxdWFscyh0ZXN0Y2FzZSkpewotCSAgICAgIC8vIEVKQiBpbmplY3Rpb24gY2hlY2sKLQkgICAgICAvLyBvdXQucHJpbnRsbigiaW5qZWN0ZWQgcm9vdDogIiArIHJvb3QpOwotCSAgICAgIFN0cmluZyBoZWxsbyA9IHJvb3Quc2F5SGVsbG8oKTsKLQkgICAgICBvdXQucHJpbnRsbigiSGVsbG8gZnJvbSBpbmplY3RlZCBiZWFuOiAiICsgaGVsbG8pOwotICAgICAgICAgICAgCi0JICAgICAgLy8gRUpCIGxvb2t1cCBjaGVjawotCSAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgICAgLy8gImphdmEiZ2xhYmFsWy88YXBwLW5hbWU+XS88bW9kdWxlLW5hbWU+LzxiZWFuLW5hbWU+IiAKKyAgICAgICAgaWYgKCJJbmplY3RMb29rdXAiLmVxdWFscyh0ZXN0Y2FzZSkpeworICAgICAgICAgIC8vIEVKQiBpbmplY3Rpb24gY2hlY2sKKyAgICAgICAgICAvLyBvdXQucHJpbnRsbigiaW5qZWN0ZWQgcm9vdDogIiArIHJvb3QpOworICAgICAgICAgIFN0cmluZyBoZWxsbyA9IHJvb3Quc2F5SGVsbG8oKTsKKyAgICAgICAgICBvdXQucHJpbnRsbigiSGVsbG8gZnJvbSBpbmplY3RlZCBiZWFuOiAiICsgaGVsbG8pOworCisgICAgICAgICAgLy8gRUpCIGxvb2t1cCBjaGVjaworICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgICAgLy8gImphdmEiZ2xhYmFsWy88YXBwLW5hbWU+XS88bW9kdWxlLW5hbWU+LzxiZWFuLW5hbWU+IgogICAgICAgICAgICAgICAvLyBhcHAtbmFtZSAtLSBuYW1lIG9mIGVhciBmaWxlIChvcHRpb24pCiAgICAgICAgICAgICAgIC8vIG1vZHVsZS1uYW1lIC0tIG5hbWUgb2Ygd2FyIG9yIGphciBmaWxlCiAgICAgICAgICAgICAgIC8vIGJlYW4tbmFtZSAtLSBuYW1lIG9mIGVqYgotCSAgICAgIEJlYW5Sb290SW50ZXJmYWNlIHJvb3QyID0gKEJlYW5Sb290SW50ZXJmYWNlKSBpYy5sb29rdXAoImphdmE6Z2xvYmFsL3NpbmdsZXRvbi9zaW5nbGV0b25FSkIvQmVhblJvb3QiKTsKKyAgICAgICAgICBCZWFuUm9vdEludGVyZmFjZSByb290MiA9IChCZWFuUm9vdEludGVyZmFjZSkgaWMubG9va3VwKCJqYXZhOmdsb2JhbC9zaW5nbGV0b24vc2luZ2xldG9uRUpCL0JlYW5Sb290Iik7CiAKLQkgICAgICAvLyBvdXQucHJpbnRsbigiZ2xvYmFsIHJvb3Q6ICIgKyByb290Mik7Ci0JICAgICAgU3RyaW5nIGhlbGxvMiA9IHJvb3QyLnNheUhlbGxvKCk7Ci0JICAgICAgb3V0LnByaW50bG4oIkhlbGxvIGZyb20gbG9va3VwIGJlYW46ICIgKyBoZWxsbzIpOworICAgICAgICAgIC8vIG91dC5wcmludGxuKCJnbG9iYWwgcm9vdDogIiArIHJvb3QyKTsKKyAgICAgICAgICBTdHJpbmcgaGVsbG8yID0gcm9vdDIuc2F5SGVsbG8oKTsKKyAgICAgICAgICBvdXQucHJpbnRsbigiSGVsbG8gZnJvbSBsb29rdXAgYmVhbjogIiArIGhlbGxvMik7CiAKLQkgICAgICBpZiAoaGVsbG8uZXF1YWxzKGhlbGxvMikpewotCQlzdGF0dXMgPSB0cnVlOwotCSAgICAgIH0KLQkgICAgfSBlbHNlIGlmICgiU3RhcnR1cCIuZXF1YWxzKHRlc3RjYXNlKSl7CisgICAgICAgICAgaWYgKGhlbGxvLmVxdWFscyhoZWxsbzIpKXsKKyAgICAgICAgc3RhdHVzID0gdHJ1ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoIlN0YXJ0dXAiLmVxdWFscyh0ZXN0Y2FzZSkpewogICAgICAgICAgICAgICAvLyBkZXBsb3ltZW50IGNoZWNrIGZvciBzdGFydHVwCi0JICAgICAgb3V0LnByaW50bG4oIm1lc3NhZ2UgYnkgZGVwbG95bWVudDogIiArIG1lc3NhZ2UpOwotCSAgICAgIGlmIChtZXNzYWdlICE9IG51bGwgJiYgbWVzc2FnZS5lcXVhbHMoRVhQRUNURURfUkVTVUxUKSl7Ci0JCXN0YXR1cyA9IHRydWU7Ci0JICAgICAgfQotCSAgICB9Ci0JICB9CisgICAgICAgICAgb3V0LnByaW50bG4oIm1lc3NhZ2UgYnkgZGVwbG95bWVudDogIiArIG1lc3NhZ2UpOworICAgICAgICAgIGlmIChtZXNzYWdlICE9IG51bGwgJiYgbWVzc2FnZS5lcXVhbHMoRVhQRUNURURfUkVTVUxUKSl7CisgICAgICAgIHN0YXR1cyA9IHRydWU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CiAKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRoKSB7CiAgICAgICAgICAgICB0aC5wcmludFN0YWNrVHJhY2Uob3V0KTsKLSAgICAgICAgfSBmaW5hbGx5IHsgCi0JICAgIGlmIChzdGF0dXMpewotCSAgICAgIG91dC5wcmludGxuKCJUZXN0OlBhc3MiKTsKLQkgICAgfSBlbHNlIHsKLQkgICAgICBvdXQucHJpbnRsbigiVGVzdDpGYWlsIik7Ci0JICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKHN0YXR1cyl7CisgICAgICAgICAgb3V0LnByaW50bG4oIlRlc3Q6UGFzcyIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIG91dC5wcmludGxuKCJUZXN0OkZhaWwiKTsKKyAgICAgICAgfQogICAgICAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgICAgIH0KLSAgICB9IAorICAgIH0KIAogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICB9IAorICAgIH0KIAogICAgIHByb3RlY3RlZCB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2luZ2xldG9uL3NyYy90ZXN0L1NpbmdsZXRvblRlc3RORy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2luZ2xldG9uL3NyYy90ZXN0L1NpbmdsZXRvblRlc3RORy5qYXZhCmluZGV4IDZiZDc1M2QuLmE4ZjE2NjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL3NpbmdsZXRvbi9zcmMvdGVzdC9TaW5nbGV0b25UZXN0TkcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9zaW5nbGV0b24vc3JjL3Rlc3QvU2luZ2xldG9uVGVzdE5HLmphdmEKQEAgLTI5LDM5ICsyOSwzOSBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9CiAgICAgICAgICJlamItc2luZ2xldG9uIjsKLSAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgc3RyQ29udGV4dFJvb3Q9Ii9zaW5nbGV0b24iOwogCiAgICAgc3RhdGljIFN0cmluZyByZXN1bHQgPSAiIjsKICAgICBTdHJpbmcgaG9zdD1TeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAuaG9zdCIpOwogICAgIFN0cmluZyBwb3J0PVN5c3RlbS5nZXRQcm9wZXJ0eSgiaHR0cC5wb3J0Iik7Ci0gICAgICAgICAgIAorCiAKICAgICBAVGVzdChncm91cHMgPSB7ICJpbml0IiB9KQogICAgIHB1YmxpYyB2b2lkIHNpbmdsZXRvblN0YXJ0dXAoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICBib29sZWFuIHJlc3VsdD1mYWxzZTsgICAgICAgCisgICAgICAgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOwogCiAgICAgICAgIHRyeXsKIAogICAgICAgICAgIHJlc3VsdCA9IHRlc3QoIlN0YXJ0dXAiKTsKLQkgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVzdWx0LCB0cnVlLCJVbmV4cGVjdGVkIFJlc3VsdHMiKTsKKyAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVzdWx0LCB0cnVlLCJVbmV4cGVjdGVkIFJlc3VsdHMiKTsKIAogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogCi0JICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgdGhyb3cgbmV3IEV4Y2VwdGlvbihlKTsKKyAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGUpOwogCiAgICAgICAgIH0KICAgICB9CiAKICAgICBAVGVzdChkZXBlbmRzT25Hcm91cHMgPSB7ICJpbml0LioiIH0pCiAgICAgcHVibGljIHZvaWQgc2luZ2xldG9uSW5qZWN0TG9va3VwKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7ICAgICAgICAKKyAgICAgICAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7CiAKICAgICAgICAgdHJ5ewogCi0gICAgICAgICAgICByZXN1bHQgPSB0ZXN0KCJJbmplY3RMb29rdXAiKTsgICAgICAgICAgICAgICAKLSAgCSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHJlc3VsdCwgdHJ1ZSwiVW5leHBlY3RlZCBSZXN1bHRzIik7CisgICAgICAgICAgICByZXN1bHQgPSB0ZXN0KCJJbmplY3RMb29rdXAiKTsKKyAgICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHJlc3VsdCwgdHJ1ZSwiVW5leHBlY3RlZCBSZXN1bHRzIik7CiAKICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRSA9ICJUZXN0OlBhc3MiOwogICAgICAgICBTdHJpbmcgVEVTVF9DQVNFID0gVEVTVF9OQU1FICsgIjoiICsgYzsKICAgICAgICAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7Ci0gICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIHN0ckNvbnRleHRSb290ICsgCisgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIHN0ckNvbnRleHRSb290ICsKICAgICAgICAgICAgICAgICAgICAgICIvdGVzdD90Yz0iICsgYzsKICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oInVybD0iK3VybCk7CiAKQEAgLTgzLDE5ICs4MywxOSBAQAogICAgICAgICBpbnQgY29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7CiAgICAgICAgIGlmIChjb2RlICE9IDIwMCkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVbmV4cGVjdGVkIHJldHVybiBjb2RlOiAiICsgY29kZSk7Ci0JfSBlbHNlIHsKKyAgICB9IGVsc2UgewogICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjb25uLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKLQkgICAgU3RyaW5nIGxpbmUgPSBudWxsOwotCSAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0JICAgICAgaWYgKGxpbmUuY29udGFpbnMoRVhQRUNURURfUkVTUE9OU0UpKSB7CisgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKKyAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgICAgIGlmIChsaW5lLmNvbnRhaW5zKEVYUEVDVEVEX1JFU1BPTlNFKSkgewogICAgICAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigibGluZT0iK2xpbmUpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7Ci0JCWJyZWFrOwotCSAgICAgIH0KLQkgICAgfQotICAgICAgICB9ICAgIAotCXJldHVybiByZXN1bHQ7CisgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgZWNobyhTdHJpbmcgbXNnKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9zbHNibmljbXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2xzYm5pY210L2J1aWxkLnhtbAppbmRleCA3YjM4NTRiLi40ZDEwMTI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9zbHNibmljbXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL3Nsc2JuaWNtdC9idWlsZC54bWwKQEAgLTIwLDM2ICsyMCwzNiBAQAogPHByb2plY3QgbmFtZT0ic2xzYm5pY210IiBkZWZhdWx0PSJkZWZhdWx0IiBiYXNlZGlyPSIuIj4KICAgICA8cHJvcGVydHkgZmlsZT0iYnVpbGQucHJvcGVydGllcyIvPgogICAgIDxwcm9wZXJ0eSBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC8ke2RlcGxveS5wbGF0Zm9ybX0tY29uZmlnLnByb3BlcnRpZXMiLz4KLSAgICAKKwogICAgIDxkZXNjcmlwdGlvbj5CdWlsZHMsIHRlc3RzLCBhbmQgcnVucyB0aGUgcHJvamVjdCBKZGJjVXNlclR4IEFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KLSAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+ICAgCisgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LXRhcmdldHMueG1sIi8+Ci0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW50ZXN0LHVuZGVwbG95IiAvPiAgICAKKworICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxkZXBsb3kscnVudGVzdCx1bmRlcGxveSIgLz4KICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWRlcGxveSIgZGVwZW5kcz0iYnVpbGQsZGVwbG95IiAvPgogCi0gICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUtdGVzdHMiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWltcGwiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktJHtkZXBsb3kucGxhdGZvcm19LWltcGwiLz4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICA8dGFyZ2V0ICBuYW1lPSJydW50ZXN0Ij4gCisKKyAgICA8dGFyZ2V0ICBuYW1lPSJydW50ZXN0Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW50ZXN0LWltcGwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIke3Rlc3RuZy50ZXN0Lm5hbWV9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0bmcudGVzdC5uYW1lIiB2YWx1ZT0iJHt0ZXN0bmcudGVzdC5uYW1lfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0idGVzdG5nLnRlc3RjbGllbnQiIHZhbHVlPSJTbHNibmljbXRUZXN0TkciLz4KICAgICAgPC9hbnRjYWxsPgotICAgICAgICAKKwogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktJHtkZXBsb3kucGxhdGZvcm19LWltcGwiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogPC9wcm9qZWN0PgogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL3Nsc2JuaWNtdC9zcmMvamF2YS9Bbm5vdGF0ZWRFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL3Nsc2JuaWNtdC9zcmMvamF2YS9Bbm5vdGF0ZWRFSkIuamF2YQppbmRleCA5MWE3ODk4Li45NjAwNzgwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9zbHNibmljbXQvc3JjL2phdmEvQW5ub3RhdGVkRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2xzYm5pY210L3NyYy9qYXZhL0Fubm90YXRlZEVKQi5qYXZhCkBAIC0zOSw0MiArMzksNDIgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBwZXJzaXN0RW50aXR5KCl7CiAgICAgICAgIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwogICAgICAgICB0cnkgewotCSAgSnBhQmVhbiBqcGFCZWFuID0gbmV3IEpwYUJlYW4oKTsKLQkgIGpwYUJlYW4uc2V0TmFtZSgiSnBhQmVhbiIpOworICAgICAgSnBhQmVhbiBqcGFCZWFuID0gbmV3IEpwYUJlYW4oKTsKKyAgICAgIGpwYUJlYW4uc2V0TmFtZSgiSnBhQmVhbiIpOwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUGVyc2lzdGluZyAuLi4uIik7Ci0JICBlbS5wZXJzaXN0KGpwYUJlYW4pOworICAgICAgZW0ucGVyc2lzdChqcGFCZWFuKTsKICAgICAgICAgICBwYXNzID0gdHJ1ZTsKLQl9IGNhdGNoIChUaHJvd2FibGUgZSkgeworICAgIH0gY2F0Y2ggKFRocm93YWJsZSBlKSB7CiAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIH0KICAgICAgICAgcmV0dXJuIHBhc3M7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gcmVtb3ZlRW50aXR5KCl7CiAgICAgICAgIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwogICAgICAgICB0cnkgewotCSAgUXVlcnkgcXVlcnkgPSBlbS5jcmVhdGVRdWVyeSgiU0VMRUNUIGogRlJPTSBKcGFCZWFuIGogV0hFUkUgai5uYW1lPSdKcGFCZWFuJyIpOwotCSAgSnBhQmVhbiBqcGFCZWFuID0gKEpwYUJlYW4pIHF1ZXJ5LmdldFNpbmdsZVJlc3VsdCgpOwotCSAgU3lzdGVtLm91dC5wcmludGxuKCJMb2FkZWQgIiArIGpwYUJlYW4pOwotCSAgZW0ucmVtb3ZlKGpwYUJlYW4pOworICAgICAgUXVlcnkgcXVlcnkgPSBlbS5jcmVhdGVRdWVyeSgiU0VMRUNUIGogRlJPTSBKcGFCZWFuIGogV0hFUkUgai5uYW1lPSdKcGFCZWFuJyIpOworICAgICAgSnBhQmVhbiBqcGFCZWFuID0gKEpwYUJlYW4pIHF1ZXJ5LmdldFNpbmdsZVJlc3VsdCgpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb2FkZWQgIiArIGpwYUJlYW4pOworICAgICAgZW0ucmVtb3ZlKGpwYUJlYW4pOwogICAgICAgICAgIHBhc3MgPSB0cnVlOwotCX0gY2F0Y2ggKFRocm93YWJsZSBlKSB7CisgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgfQogICAgICAgICByZXR1cm4gcGFzczsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB2ZXJpZnlSZW1vdmUoKXsKICAgICAgICAgYm9vbGVhbiBwYXNzID0gZmFsc2U7CiAgICAgICAgIHRyeSB7Ci0JICBRdWVyeSBxdWVyeSA9IGVtLmNyZWF0ZVF1ZXJ5KCJTRUxFQ1QgY291bnQoaikgRlJPTSBKcGFCZWFuIGogV0hFUkUgai5uYW1lPSdKcGFCZWFuJyIpOwotCSAgaW50IGNvdW50ID0gKChOdW1iZXIpIHF1ZXJ5LmdldFNpbmdsZVJlc3VsdCgpKS5pbnRWYWx1ZSgpOwotCSAgaWYgKGNvdW50ID09IDApIHsKKyAgICAgIFF1ZXJ5IHF1ZXJ5ID0gZW0uY3JlYXRlUXVlcnkoIlNFTEVDVCBjb3VudChqKSBGUk9NIEpwYUJlYW4gaiBXSEVSRSBqLm5hbWU9J0pwYUJlYW4nIik7CisgICAgICBpbnQgY291bnQgPSAoKE51bWJlcikgcXVlcnkuZ2V0U2luZ2xlUmVzdWx0KCkpLmludFZhbHVlKCk7CisgICAgICBpZiAoY291bnQgPT0gMCkgewogICAgICAgICAgICAgcGFzcyA9IHRydWU7Ci0JICB9Ci0JfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKKyAgICAgIH0KKyAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgewogICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB9CiAgICAgICAgIHJldHVybiBwYXNzOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2xzYm5pY210L3NyYy9qYXZhL0Fubm90YXRlZFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL3Nsc2JuaWNtdC9zcmMvamF2YS9Bbm5vdGF0ZWRTZXJ2bGV0LmphdmEKaW5kZXggMmZiMDY1Mi4uOWQ3N2ViNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2xzYm5pY210L3NyYy9qYXZhL0Fubm90YXRlZFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9zbHNibmljbXQvc3JjL2phdmEvQW5ub3RhdGVkU2VydmxldC5qYXZhCkBAIC0yNyw4MiArMjcsODIgQEAKIGltcG9ydCBqYXZheC5uYW1pbmcuTmFtaW5nRXhjZXB0aW9uOwogCiBwdWJsaWMgY2xhc3MgQW5ub3RhdGVkU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgIAorCiAgICAgQEVKQgogICAgIHByaXZhdGUgQW5ub3RhdGVkRUpCIHNpbXBsZUVKQjsKLSAgICAKKwogICAgIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NSZXF1ZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L3BsYWluIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogICAgICAgICBib29sZWFuIHN0YXR1cyA9IGZhbHNlOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiLS0tLS0tLUFubm90YXRlZFNlcnZsZXQtLS0tLS0tLSIpOyAgCisKKyAgICAgICAgICAgIG91dC5wcmludGxuKCItLS0tLS0tQW5ub3RhdGVkU2VydmxldC0tLS0tLS0tIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiQW5udGF0ZWRTZXJ2bGV0IGF0ICIgKyByZXF1ZXN0LmdldENvbnRleHRQYXRoICgpKTsKIAogICAgICAgICAgICAgU3RyaW5nIHRlc3RjYXNlID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInRjIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigidGVzdGNhc2UgPSAiICsgdGVzdGNhc2UpOwogICAgICAgICAgICAgaWYgKHRlc3RjYXNlICE9IG51bGwpIHsKIAotCSAgICAgIGlmICgiRUpCSW5qZWN0Ii5lcXVhbHModGVzdGNhc2UpKXsKKyAgICAgICAgICBpZiAoIkVKQkluamVjdCIuZXF1YWxzKHRlc3RjYXNlKSl7CiAKLQkJb3V0LnByaW50bG4oIlNpbXBsZSBFSkI6Iik7Ci0JCW91dC5wcmludGxuKCJARUpCIEluamVjdGlvbj0iK3NpbXBsZUVKQik7Ci0JCVN0cmluZyBzaW1wbGVFSkJOYW1lID0gbnVsbDsKLQkJCi0JCWlmIChzaW1wbGVFSkIgIT0gbnVsbCkgewotCQkgIHNpbXBsZUVKQk5hbWUgPSBzaW1wbGVFSkIuZ2V0TmFtZSgpOwotCQkgIG91dC5wcmludGxuKCJARUpCLmdldE5hbWUoKT0iICsgc2ltcGxlRUpCTmFtZSk7Ci0JCX0KKyAgICAgICAgb3V0LnByaW50bG4oIlNpbXBsZSBFSkI6Iik7CisgICAgICAgIG91dC5wcmludGxuKCJARUpCIEluamVjdGlvbj0iK3NpbXBsZUVKQik7CisgICAgICAgIFN0cmluZyBzaW1wbGVFSkJOYW1lID0gbnVsbDsKIAotCQlpZiAoc2ltcGxlRUpCICE9IG51bGwgJiYKLQkJICAgICJmb28iLmVxdWFscyhzaW1wbGVFSkJOYW1lKSl7Ci0JCSAgc3RhdHVzID0gdHJ1ZTsKLQkJfQorICAgICAgICBpZiAoc2ltcGxlRUpCICE9IG51bGwpIHsKKyAgICAgICAgICBzaW1wbGVFSkJOYW1lID0gc2ltcGxlRUpCLmdldE5hbWUoKTsKKyAgICAgICAgICBvdXQucHJpbnRsbigiQEVKQi5nZXROYW1lKCk9IiArIHNpbXBsZUVKQk5hbWUpOworICAgICAgICB9CiAKLQkgICAgICB9IGVsc2UgaWYgKCJKcGFQZXJzaXN0Ii5lcXVhbHModGVzdGNhc2UpKXsKLQkJCi0JCWlmIChzaW1wbGVFSkIgIT0gbnVsbCkgewotCQkgIG91dC5wcmludGxuKCJQZXJzaXN0IEVudGl0eSIpOwotCQkgIHN0YXR1cyAgPSBzaW1wbGVFSkIucGVyc2lzdEVudGl0eSgpOwotCQl9CisgICAgICAgIGlmIChzaW1wbGVFSkIgIT0gbnVsbCAmJgorICAgICAgICAgICAgImZvbyIuZXF1YWxzKHNpbXBsZUVKQk5hbWUpKXsKKyAgICAgICAgICBzdGF0dXMgPSB0cnVlOworICAgICAgICB9CiAKLQkgICAgICB9IGVsc2UgaWYgKCJKcGFSZW1vdmUiLmVxdWFscyh0ZXN0Y2FzZSkpeworICAgICAgICAgIH0gZWxzZSBpZiAoIkpwYVBlcnNpc3QiLmVxdWFscyh0ZXN0Y2FzZSkpewogCi0JCWlmIChzaW1wbGVFSkIgIT0gbnVsbCkgewotCQkgIG91dC5wcmludGxuKCJWZXJpZnkgUGVyc2lzdGVkIEVudGl0eSBhbmQgUmVtb3ZlIEVudGl0eSIpOwotCQkgIHN0YXR1cyAgPSBzaW1wbGVFSkIucmVtb3ZlRW50aXR5KCk7Ci0JCX0KKyAgICAgICAgaWYgKHNpbXBsZUVKQiAhPSBudWxsKSB7CisgICAgICAgICAgb3V0LnByaW50bG4oIlBlcnNpc3QgRW50aXR5Iik7CisgICAgICAgICAgc3RhdHVzICA9IHNpbXBsZUVKQi5wZXJzaXN0RW50aXR5KCk7CisgICAgICAgIH0KIAotCSAgICAgIH0gZWxzZSBpZiAoIkpwYVZlcmlmeSIuZXF1YWxzKHRlc3RjYXNlKSl7CisgICAgICAgICAgfSBlbHNlIGlmICgiSnBhUmVtb3ZlIi5lcXVhbHModGVzdGNhc2UpKXsKIAotCQlpZiAoc2ltcGxlRUpCICE9IG51bGwpIHsKLQkJICBvdXQucHJpbnRsbigiVmVyaWZ5IFJlbW92ZWQgRW5pdGl0eSIpOwotCQkgIHN0YXR1cyAgPSBzaW1wbGVFSkIudmVyaWZ5UmVtb3ZlKCk7Ci0JCX0KKyAgICAgICAgaWYgKHNpbXBsZUVKQiAhPSBudWxsKSB7CisgICAgICAgICAgb3V0LnByaW50bG4oIlZlcmlmeSBQZXJzaXN0ZWQgRW50aXR5IGFuZCBSZW1vdmUgRW50aXR5Iik7CisgICAgICAgICAgc3RhdHVzICA9IHNpbXBsZUVKQi5yZW1vdmVFbnRpdHkoKTsKKyAgICAgICAgfQogCi0JICAgICAgfSBlbHNlIHsKLQkJb3V0LnByaW50bG4oIk5vIHN1Y2ggdGVzdGNhc2UiKTsKLQkgICAgICB9Ci0JICB9CisgICAgICAgICAgfSBlbHNlIGlmICgiSnBhVmVyaWZ5Ii5lcXVhbHModGVzdGNhc2UpKXsKKworICAgICAgICBpZiAoc2ltcGxlRUpCICE9IG51bGwpIHsKKyAgICAgICAgICBvdXQucHJpbnRsbigiVmVyaWZ5IFJlbW92ZWQgRW5pdGl0eSIpOworICAgICAgICAgIHN0YXR1cyAgPSBzaW1wbGVFSkIudmVyaWZ5UmVtb3ZlKCk7CisgICAgICAgIH0KKworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgIG91dC5wcmludGxuKCJObyBzdWNoIHRlc3RjYXNlIik7CisgICAgICAgICAgfQorICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXggKSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic2VydmxldCB0ZXN0IGZhaWxlZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZXgpOwotICAgICAgICB9IGZpbmFsbHkgeyAKLSAgICAgICAgICAgIGlmIChzdGF0dXMpIAotCSAgICAgIG91dC5wcmludGxuKCJUZXN0OlBhc3MiKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGlmIChzdGF0dXMpCisgICAgICAgICAgb3V0LnByaW50bG4oIlRlc3Q6UGFzcyIpOwogICAgICAgICAgICAgZWxzZQotCSAgICAgIG91dC5wcmludGxuKCJUZXN0OkZhaWwiKTsKKyAgICAgICAgICBvdXQucHJpbnRsbigiVGVzdDpGYWlsIik7CiAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKICAgICAgICAgfQotICAgIH0gCisgICAgfQogCiAgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwotICAgIH0gCisgICAgfQogCiAKICAgICBwcm90ZWN0ZWQgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9zbHNibmljbXQvc3JjL3Rlc3QvU2xzYm5pY210VGVzdE5HLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2VqYi9zbHNibmljbXQvc3JjL3Rlc3QvU2xzYm5pY210VGVzdE5HLmphdmEKaW5kZXggN2Q4MjYyNy4uY2ZlYmQ1MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9lamIvc2xzYm5pY210L3NyYy90ZXN0L1Nsc2JuaWNtdFRlc3RORy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZWpiL3Nsc2JuaWNtdC9zcmMvdGVzdC9TbHNibmljbXRUZXN0TkcuamF2YQpAQCAtMjUsMTcgKzI1LDE3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0KICAgICAgICAgImVqYi1zbHNibmljbXQiOwotICAgCisKICAgICBwcml2YXRlIFN0cmluZyBzdHJDb250ZXh0Um9vdD0iL3Nsc2JuaWNtdCI7CiAKIC8vICAgIHN0YXRpYyBTdHJpbmcgcmVzdWx0ID0gIiI7CiAgICAgU3RyaW5nIGhvc3Q9U3lzdGVtLmdldFByb3BlcnR5KCJodHRwLmhvc3QiKTsKICAgICBTdHJpbmcgcG9ydD1TeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucG9ydCIpOwotICAgICAgICAgICAKKwogCiAgICAgQFRlc3QoZ3JvdXBzID0geyAiaW5pdCIgfSkKICAgICBwdWJsaWMgdm9pZCBFSkJJbmplY3QoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICBib29sZWFuIHJlc3VsdD1mYWxzZTsgICAgICAgCisgICAgICAgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOwogICAgICAgICB0cnl7CiAgICAgICAgICAgICByZXN1bHQgPSB0ZXN0KCJFSkJJbmplY3QiKTsKICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVzdWx0LCB0cnVlLCJVbmV4cGVjdGVkIFJlc3VsdHMiKTsKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgICAgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0gIlRlc3Q6UGFzcyI7CiAgICAgICAgIFN0cmluZyBURVNUX0NBU0UgPSBURVNUX05BTUUgKyAiOiIgKyBjOwogICAgICAgICBib29sZWFuIHJlc3VsdD1mYWxzZTsKLSAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgc3RyQ29udGV4dFJvb3QgKyAKKyAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgc3RyQ29udGV4dFJvb3QgKwogICAgICAgICAgICAgICAgICAgICAgIi90ZXN0P3RjPSIgKyBjOwogICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigidXJsPSIrdXJsKTsKIApAQCAtOTgsMTEgKzk4LDExIEBACiAgICAgICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwotCSAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CisgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGlmIChsaW5lLmNvbnRhaW5zKEVYUEVDVEVEX1JFU1BPTlNFKSkgewogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CSAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgfSAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwKaW5kZXggMTdhNzdlNC4uOThlZGUyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwKQEAgLTE4LDcgKzE4LDcgQEAKIC0tPgogCiA8cHJvamVjdCBuYW1lPSJjb21tb24taW1wbCIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KLSAgICAKKwogICAgIDxwcm9wZXJ0eSBmaWxlPSIke3dzLnJvb3R9L2J1aWxkLnByb3BlcnRpZXMiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iYXBwLmZpbGUuZXh0IiB2YWx1ZT0iJHthcHAuZmlsZX0uJHthcmNoaXZlLnR5cGV9Ii8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImNvbmZpZy5kaXIiIHZhbHVlPSIke2FudC5maWxlfSIvPgpAQCAtMzAsNyArMzAsNyBAQAogICAgIDwhLS08cHJvcGVydHkgbmFtZT0idGVzdC5jbGFzcy5vdXRwdXQiIHZhbHVlPSIke3dzLnJvb3R9L2NsYXNzZXMvJHt0ZXN0c3VpdGUubmFtZX0vdGVzdCIvPi0tPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsYXNzLm91dHB1dCIgdmFsdWU9IiR7d3Mucm9vdH0vY2xhc3Nlcy90ZXN0Ii8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImRpc3QuZGlyIiB2YWx1ZT0iJHt3cy5yb290fS9kaXN0LyR7dGVzdHN1aXRlLm5hbWV9Ii8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7d3Mucm9vdH0vY2xhc3NlcyIvPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtyZXN1bHQub3V0cHV0fSIvPgpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKiovKi53YXIiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8IS0tIGNsYXNzcGF0aCBhdCBRTCBydW50aW1lIChpLmUuIG5vdCBmb3IgYnVpbGRpbmcgb2YgdGVzdGluZyBhcHBzKSAtLT4KICAgICA8cGF0aCBpZD0icnVuLnRlc3RuZy5jbGFzc3BhdGgiPgogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7Z2xhc3NmaXNoLmhvbWV9L21vZHVsZXMiPgpAQCAtNTEsOSArNTEsOSBAQAogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovYW14LWphdmFlZS5qYXIiLz4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqL2dmLWNsaWVudC1tb2R1bGUuamFyIi8+CiAgICAgICAgIDwvZmlsZXNldD4KLQk8ZmlsZXNldCBkaXI9IiR7bWF2ZW4ucmVwby5sb2NhbH0vY29tL2JldXN0L2pjb21tYW5kZXIiPgotCSAgICA8aW5jbHVkZSBuYW1lPSIqKi8xLjcyL2pjb21tYW5kZXItMS43Mi5qYXIiLz4KLQk8L2ZpbGVzZXQ+CisgICAgPGZpbGVzZXQgZGlyPSIke21hdmVuLnJlcG8ubG9jYWx9L2NvbS9iZXVzdC9qY29tbWFuZGVyIj4KKyAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovMS43Mi9qY29tbWFuZGVyLTEuNzIuamFyIi8+CisgICAgPC9maWxlc2V0PgogICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7Y2xhc3Mub3V0cHV0fSIvPgogICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7dGVzdC5jbGFzcy5vdXRwdXR9Ii8+CiAgICAgPC9wYXRoPgpAQCAtODAsMjggKzgwLDI4IEBACiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHt0ZXN0LmNsYXNzLm91dHB1dH0iLz4KICAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7cGx1Z2luX2NsYXNzcGF0aH0iLz4KICAgICA8L3BhdGg+Ci0gICAgCisKICAgICA8IS0tIFRlc3RORyBjbGFzcyBmaWxlc2V0IC0tPgotICAgIAorCiAgICAgPHBhdGggaWQ9InBhdGgydGVzdG5nIj4KLQkgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke3dzLnJvb3R9L2xpYi90ZXN0bmctNS4wLWpkazE1LmphciIvPgorICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7d3Mucm9vdH0vbGliL3Rlc3RuZy01LjAtamRrMTUuamFyIi8+CiAgICAgPC9wYXRoPgotICAgIAorCiAgICAgPHRhc2tkZWYgbmFtZT0idGVzdG5nIiBjbGFzc25hbWU9Im9yZy50ZXN0bmcuVGVzdE5HQW50VGFzayI+CiAgICAgICAgIDxjbGFzc3BhdGg+Ci0JICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke3BsdWdpbl9jbGFzc3BhdGh9Ii8+CisgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke3BsdWdpbl9jbGFzc3BhdGh9Ii8+CiAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgIDwvdGFza2RlZj4KLSAgICAKLSAgICAKKworCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLXRlc3RzIiBkZXNjcmlwdGlvbj0iY29tcGlsZSB0aGUgdGVzdCBuZyBleGFtcGxlIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iY29tcGlsaW5nIHRlc3QgY2xpZW50IHRvICR7dGVzdC5jbGFzcy5vdXRwdXR9Ii8+CiAKLSAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Jhc2VkaXJ9L3NyYy90ZXN0IiBpZD0iamF2YS5zb3VyY2UuaWQiPiAKLSAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouamF2YSIvPiAKKyAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Jhc2VkaXJ9L3NyYy90ZXN0IiBpZD0iamF2YS5zb3VyY2UuaWQiPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qYXZhIi8+CiAgICAgICAgIDwvZmlsZXNldD4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9InNvdXJjZS5maWxlLmxpc3QiIHJlZmlkPSJqYXZhLnNvdXJjZS5pZCIvPiAKLSAgICAgICAgPGVjaG8gbWVzc2FnZT0iTGlzdGluZyBvZiBzb3VyY2UgZmlsZXM6ICR7c291cmNlLmZpbGUubGlzdH0iLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzb3VyY2UuZmlsZS5saXN0IiByZWZpZD0iamF2YS5zb3VyY2UuaWQiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iTGlzdGluZyBvZiBzb3VyY2UgZmlsZXM6ICR7c291cmNlLmZpbGUubGlzdH0iLz4KIAogICAgICAgICA8bWtkaXIgZGlyPSIke3Rlc3QuY2xhc3Mub3V0cHV0fSIvPgogICAgICAgICA8amF2YWMgICBkZWJ1Zz0idHJ1ZSIKQEAgLTExMSwyMiArMTExLDIyIEBACiAgICAgICAgICAgICAgICAgIHNyY2Rpcj0iJHtiYXNlZGlyfS9zcmMvdGVzdCIKICAgICAgICAgICAgICAgICAgc291cmNlcGF0aD0iIgogICAgICAgICAgICAgICAgICBkZXN0ZGlyPSIke3Rlc3QuY2xhc3Mub3V0cHV0fSI+Ci0gICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphdmEiLz4gCisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphdmEiLz4KICAgICAgICAgPC9qYXZhYz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS11dGlsIgotCSAgICBkZXNjcmlwdGlvbj0iY29tcGlsZSB0aGUgdGVzdCBuZyB1dGlsIj4KKyAgICAgICAgZGVzY3JpcHRpb249ImNvbXBpbGUgdGhlIHRlc3QgbmcgdXRpbCI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7dGVzdC5jbGFzcy5vdXRwdXR9Ii8+CiAgICAgICAgIDxqYXZhYyAgIGRlYnVnPSJ0cnVlIgogICAgICAgICAgICAgICAgICBzb3VyY2U9IjEuOCIKLQkJIHRhcmdldD0iMS44IgotCQkgY2xhc3NwYXRocmVmPSJjbGFzcy5wYXRoIgorICAgICAgICAgdGFyZ2V0PSIxLjgiCisgICAgICAgICBjbGFzc3BhdGhyZWY9ImNsYXNzLnBhdGgiCiAgICAgICAgICAgICAgICAgIHNyY2Rpcj0iJHt3cy5yb290fS9hZG1pbmNsaS9zcmMvdGVzdC9hZG1pbmNsaS91dGlsOiR7d3Mucm9vdH0vdXRpbHMiCiAgICAgICAgICAgICAgICAgIGRlc3RkaXI9IiR7dGVzdC5jbGFzcy5vdXRwdXR9Ij4KICAgICAgICAgPC9qYXZhYz4KLSAgICA8L3RhcmdldD4gICAgCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8IS0tIEdlbmVyYXRlIHRoZSBUZXN0TkcgcmVwb3J0IC0tPgogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0Ij4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7cmVzdWx0Lm91dHB1dH0iLz4KQEAgLTEzOSw3ICsxMzksNyBAQAogICAgICAgICAgICAgPHJlcG9ydCBmb3JtYXQ9Im5vZnJhbWVzIiB0b2Rpcj0idGVzdC1yZXBvcnQiLz4KICAgICAgICAgPC9qdW5pdHJlcG9ydD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYXJjaGl2ZS10eXBlIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iYXJjaGl2ZS10eXBlIGlzICR7YXJjaGl2ZS50eXBlfSIvPgogICAgICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJhcmNoaXZlLndhciI+CkBAIC0xNTIsMzEgKzE1MiwzMSBAQAogICAgICAgICAgICAgPGVxdWFscyBhcmcxPSJhcHBjbGllbnRfZWFyIiBhcmcyPSIke2FyY2hpdmUudHlwZX0iLz4KICAgICAgICAgPC9jb25kaXRpb24+CiAgICAgICAgIDxjb25kaXRpb24gcHJvcGVydHk9ImFyY2hpdmUuamFyIj4KLSAgICAgICAgICAgIDxlcXVhbHMgYXJnMT0iamFyIiBhcmcyPSIke2FyY2hpdmUudHlwZX0iLz4gICAgICAgICAgICAKKyAgICAgICAgICAgIDxlcXVhbHMgYXJnMT0iamFyIiBhcmcyPSIke2FyY2hpdmUudHlwZX0iLz4KICAgICAgICAgPC9jb25kaXRpb24+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWltcGwiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLXdhciIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhciIvPgotCTxhbnRjYWxsIHRhcmdldD0iYnVpbGQtYXBwY2xpZW50LWVhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtYXBwY2xpZW50LWVhciIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWphciIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLXNpbmdsZSI+Ci0JICAgIDxkZWxldGUgZGlyPSIkY2xhc3Mub3V0cHV0fSIvPgotCSAgICA8bWtkaXIgZGlyPSIke2NsYXNzLm91dHB1dH0iLz4KKyAgICAgICAgPGRlbGV0ZSBkaXI9IiRjbGFzcy5vdXRwdXR9Ii8+CisgICAgICAgIDxta2RpciBkaXI9IiR7Y2xhc3Mub3V0cHV0fSIvPgogICAgICAgICA8amF2YWMgICBkZWJ1Zz0idHJ1ZSIKICAgICAgICAgICAgICAgICAgc291cmNlPSIxLjgiCi0JCSB0YXJnZXQ9IjEuOCIKKyAgICAgICAgIHRhcmdldD0iMS44IgogICAgICAgICAgICAgICAgICBjbGFzc3BhdGhyZWY9ImNsYXNzLnBhdGgiCiAgICAgICAgICAgICAgICAgIHNyY2Rpcj0ic3JjIgogICAgICAgICAgICAgICAgICBkZXN0ZGlyPSIke2NsYXNzLm91dHB1dH0iLz4KLSAgICAgICAgCi0gICAgPC90YXJnZXQ+Ci0gICAgCiAKLTx0YXJnZXQgbmFtZT0iYnVpbGQtd2FyIiBkZXBlbmRzPSJhcmNoaXZlLXR5cGUiIGlmPSJhcmNoaXZlLndhciI+ICAKKyAgICA8L3RhcmdldD4KKworCis8dGFyZ2V0IG5hbWU9ImJ1aWxkLXdhciIgZGVwZW5kcz0iYXJjaGl2ZS10eXBlIiBpZj0iYXJjaGl2ZS53YXIiPgogICAgIDxlY2hvIG1lc3NhZ2U9Ik5vdyBjcmVhdGluZyBhIHdhciBmaWxlICR7ZGlzdC5kaXJ9LyR7YXBwLmZpbGUuZXh0fSIvPgogICAgIDxkZWxldGUgZGlyPSIke2NsYXNzLm91dHB1dH0iLz4KICAgICA8ZGVsZXRlIGRpcj0iJHtkaXN0LmRpcn0iLz4KQEAgLTE5Myw0MCArMTkzLDQwIEBACiAgICAgc3JjZGlyPSJzcmMvamF2YSIKICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCiAgICAgZGVzdGRpcj0iJHtjbGFzcy5vdXRwdXR9Ii8+Ci0gICAgCisKICAgICA8bWtkaXIgZGlyPSIke2NsYXNzLm91dHB1dH0vTUVUQS1JTkYiLz4KLSAgICA8Y29weSBmaWxlPSJtZXRhZGF0YS9wZXJzaXN0ZW5jZS54bWwiIHRvZGlyPSIke2NsYXNzLm91dHB1dH0vTUVUQS1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgICAKKyAgICA8Y29weSBmaWxlPSJtZXRhZGF0YS9wZXJzaXN0ZW5jZS54bWwiIHRvZGlyPSIke2NsYXNzLm91dHB1dH0vTUVUQS1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorCiAgICAgPHdhciBkZXN0ZmlsZT0iJHtkaXN0LmRpcn0vJHthcHAuZmlsZS5leHR9IiB3ZWJ4bWw9Im1ldGFkYXRhL3dlYi54bWwiPgogICAgICAgICA8ZmlsZXNldCBkaXI9IndlYi9odG1sIi8+CiAgICAgICAgIDxmaWxlc2V0IGRpcj0id2ViL2pzcCIvPgotICAgICAgICA8Y2xhc3NlcyBkaXI9IiR7Y2xhc3Mub3V0cHV0fSI+ICAgICAgICAKKyAgICAgICAgPGNsYXNzZXMgZGlyPSIke2NsYXNzLm91dHB1dH0iPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5jbGFzcyIvPgotCSAgICA8aW5jbHVkZSBuYW1lPSIqKi9wZXJzaXN0ZW5jZS54bWwiLz4KLQkgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5wcm9wZXJ0aWVzIi8+CisgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqL3BlcnNpc3RlbmNlLnhtbCIvPgorICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLnByb3BlcnRpZXMiLz4KICAgICAgICAgPC9jbGFzc2VzPgogICAgICAgICA8IS0tPHppcGZpbGVzZXQgZGlyPSJzcmMvZ3JhcGhpY3MvaW1hZ2VzL2dpZnMiCiAgICAgICAgIHByZWZpeD0iaW1hZ2VzIi8+LS0+Ci0gICAgICAgIDx3ZWJpbmYgZGlyPSJtZXRhZGF0YSI+ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLnhtbCIvPiAgICAgICAgICAgICAgICAgIAorICAgICAgICA8d2ViaW5mIGRpcj0ibWV0YWRhdGEiPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi54bWwiLz4KICAgICAgICAgICAgIDxleGNsdWRlIG5hbWU9IioqL3BlcnNpc3RlbmNlLnhtbCIvPgotICAgICAgICA8L3dlYmluZj4gICAgICAgIAorICAgICAgICA8L3dlYmluZj4KICAgICA8L3dhcj4KICAgICA8IS0tIGFudGNhbGwgdGFyZ2V0PSJ1cGRhdGUtd2FyLXN0cnV0cyIvIC0tPgogICAgIDwhLS0gY29weSBmaWxlPSIke2Rpc3QuZGlyfS8ke2FwcC5maWxlLmV4dH0iIHRvZmlsZT0iLi8ke2FwcC5maWxlLmV4dH0iLyAtLT4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InVwZGF0ZS13YXItc3RydXRzIiBpZj0iYWRkLnN0cnV0cy5qYXIiPgotCTxlY2hvIG1lc3NhZ2U9IkFkZGluZyBzdHJ1dHMgamFyIHRvIFdFQi1JTkYvbGliIi8+CisgICAgPGVjaG8gbWVzc2FnZT0iQWRkaW5nIHN0cnV0cyBqYXIgdG8gV0VCLUlORi9saWIiLz4KIDx3YXIgZGVzdGZpbGU9IiR7ZGlzdC5kaXJ9LyR7YXBwLmZpbGUuZXh0fSIgdXBkYXRlPSJ0cnVlIj4KLQk8bGliIGRpcj0iJHt3cy5yb290fS93ZWIvbGliL3N0cnV0cy0xLjIuOSI+Ci0JCTxpbmNsdWRlIG5hbWU9IioqLyouamFyIi8+Ci0JPC9saWI+CisgICAgPGxpYiBkaXI9IiR7d3Mucm9vdH0vd2ViL2xpYi9zdHJ1dHMtMS4yLjkiPgorICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIvPgorICAgIDwvbGliPgogPC93YXI+Ci0JCisKIDwvdGFyZ2V0PgogCi08dGFyZ2V0IG5hbWU9ImJ1aWxkLWphciIgZGVwZW5kcz0iYXJjaGl2ZS10eXBlIiBpZj0iYXJjaGl2ZS5qYXIiPiAgICAKKzx0YXJnZXQgbmFtZT0iYnVpbGQtamFyIiBkZXBlbmRzPSJhcmNoaXZlLXR5cGUiIGlmPSJhcmNoaXZlLmphciI+CiAgICAgPGVjaG8gbWVzc2FnZT0iTm93IGNyZWF0aW5nIGEgamFyIGZpbGUgJHtkaXN0LmRpcn0vJHthcHAuZmlsZS5leHR9Ii8+CiAgICAgPGRlbGV0ZSBkaXI9IiR7Y2xhc3Mub3V0cHV0fSIvPgogICAgIDxkZWxldGUgZGlyPSIke2Rpc3QuZGlyfSIvPgpAQCAtMjQwLDExICsyNDAsMTEgQEAKICAgICBzcmNkaXI9InNyYy9qYXZhIgogICAgIGRlc3RkaXI9IiR7Y2xhc3Mub3V0cHV0fSIvPgogICAgIDxlY2hvIG1lc3NhZ2U9Ik5vdyBjcmVhdGluZyBhIHdhciBmaWxlICR7ZGlzdC5kaXJ9LyR7YXBwLmZpbGUuZXh0fSIvPgotICAgIDxqYXIgZGVzdGZpbGU9IiR7ZGlzdC5kaXJ9LyR7YXBwLmZpbGUuZXh0fSIgdXBkYXRlPSJ0cnVlIiAKLQliYXNlZGlyPSIke2NsYXNzLm91dHB1dH0iLz4gICAgICAgIAorICAgIDxqYXIgZGVzdGZpbGU9IiR7ZGlzdC5kaXJ9LyR7YXBwLmZpbGUuZXh0fSIgdXBkYXRlPSJ0cnVlIgorICAgIGJhc2VkaXI9IiR7Y2xhc3Mub3V0cHV0fSIvPgogPC90YXJnZXQ+CiAKLTx0YXJnZXQgbmFtZT0iYnVpbGQtZWFyIiBkZXBlbmRzPSJhcmNoaXZlLXR5cGUiIGlmPSJhcmNoaXZlLmVhciI+ICAgIAorPHRhcmdldCBuYW1lPSJidWlsZC1lYXIiIGRlcGVuZHM9ImFyY2hpdmUtdHlwZSIgaWY9ImFyY2hpdmUuZWFyIj4KICAgICA8ZGVsZXRlIGRpcj0iJHtjbGFzcy5vdXRwdXR9Ii8+CiAgICAgPGRlbGV0ZSBkaXI9IiR7ZGlzdC5kaXJ9Ii8+CiAgICAgPGRlbGV0ZSBmaWxlPSIke2FwcC5maWxlLmV4dH0iLz4KQEAgLTMxNywyOSArMzE3LDI5IEBACiAKIAogPHRhcmdldCBuYW1lPSJydW50ZXN0LWltcGwiPgotCTxhbnRjYWxsIHRhcmdldD0icnVudGVzdC1pbXBsLWNsYXNzIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJydW50ZXN0LWltcGwteG1sIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW50ZXN0LWltcGwtY2xhc3MiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bnRlc3QtaW1wbC14bWwiLz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QtaW1wbC1jbGFzcyIgZGVwZW5kcz0ic2V0T1NDb25kaXRpb25zLGFzZW52LXVuaXgsYXNlbnYtd2luZG93cyxjaGVja1Rlc3ROR1hNTCIgdW5sZXNzPSJ0ZXN0bmcueG1sLnByZXNlbnQiPgotCTxlY2hvIG1lc3NhZ2U9Ij09PT09PT09PT09PT1TdGFydGluZyBUZXN0TkcgdGVzdCBhdCAke3Rlc3QuY2xhc3Mub3V0cHV0fSAgPT09PT09PT09PT09Ii8+ICAgIAotICAgIAorICAgIDxlY2hvIG1lc3NhZ2U9Ij09PT09PT09PT09PT1TdGFydGluZyBUZXN0TkcgdGVzdCBhdCAke3Rlc3QuY2xhc3Mub3V0cHV0fSAgPT09PT09PT09PT09Ii8+CisKICAgICA8bWtkaXIgZGlyPSIke3Jlc3VsdC5vdXRwdXR9Ii8+CiAgICAgPHRlc3RuZyBvdXRwdXRkaXI9IiR7cmVzdWx0Lm91dHB1dH0iIHZlcmJvc2U9IjIiCi0gICAgCXN1aXRlbmFtZT0iJHt0ZXN0c3VpdGUubmFtZX0iIHRlc3RuYW1lPSIke3Rlc3RuZy50ZXN0Lm5hbWV9IiBjbGFzc3BhdGhyZWY9InJ1bi50ZXN0bmcuY2xhc3NwYXRoIj4KLQkgICAgPHN5c3Byb3BlcnR5IGtleT0iZ2xhc3NmaXNoLmhvbWUiIHZhbHVlPSIke2dsYXNzZmlzaC5ob21lfSIvPgotCSAgICA8c3lzcHJvcGVydHkga2V5PSJCQVNFRElSIiB2YWx1ZT0iJHt3cy5yb290fSIvPgorICAgICAgICBzdWl0ZW5hbWU9IiR7dGVzdHN1aXRlLm5hbWV9IiB0ZXN0bmFtZT0iJHt0ZXN0bmcudGVzdC5uYW1lfSIgY2xhc3NwYXRocmVmPSJydW4udGVzdG5nLmNsYXNzcGF0aCI+CisgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9ImdsYXNzZmlzaC5ob21lIiB2YWx1ZT0iJHtnbGFzc2Zpc2guaG9tZX0iLz4KKyAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0iQkFTRURJUiIgdmFsdWU9IiR7d3Mucm9vdH0iLz4KICAgICAgICAgPGNsYXNzZmlsZXNldCBkaXI9IiR7dGVzdC5jbGFzcy5vdXRwdXR9IiBpbmNsdWRlcz0iKiovJHt0ZXN0bmcudGVzdGNsaWVudH0uY2xhc3MiLz4KICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURodHRwLmhvc3Q9JHtnbGFzc2Zpc2guaHR0cC5ob3N0fSIgLz4KICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURodHRwLnBvcnQ9JHtnbGFzc2Zpc2guaHR0cC5wb3J0fSIgLz4KICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLS1hZGQtb3BlbnM9amF2YS5iYXNlL2phdmEubGFuZz1BTEwtVU5OQU1FRCIgLz4KLQkJPGp2bWFyZyB2YWx1ZT0iLURBU0FETUlOPSR7QVNBRE1JTn0iIC8+CisgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1EQVNBRE1JTj0ke0FTQURNSU59IiAvPgogICAgIDwvdGVzdG5nPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0icnVudGVzdC1pbXBsLXhtbCIgZGVwZW5kcz0ic2V0T1NDb25kaXRpb25zLGFzZW52LXVuaXgsYXNlbnYtd2luZG93cyxjaGVja1Rlc3ROR1hNTCIgaWY9InRlc3RuZy54bWwucHJlc2VudCI+Ci0gICAgPGVjaG8gbWVzc2FnZT0iPT09PT09PT09PT09PVN0YXJ0aW5nIFRlc3RORyB0ZXN0IGF0ICR7dGVzdC5jbGFzcy5vdXRwdXR9IGZyb20gdGVzdG5nLnhtbCAgPT09PT09PT09PT09Ii8+ICAgIAotICAgIAorICAgIDxlY2hvIG1lc3NhZ2U9Ij09PT09PT09PT09PT1TdGFydGluZyBUZXN0TkcgdGVzdCBhdCAke3Rlc3QuY2xhc3Mub3V0cHV0fSBmcm9tIHRlc3RuZy54bWwgID09PT09PT09PT09PSIvPgorCiAgICAgPG1rZGlyIGRpcj0iJHtyZXN1bHQub3V0cHV0fSIvPgogICAgIDx0ZXN0bmcgb3V0cHV0ZGlyPSIke3Jlc3VsdC5vdXRwdXR9IgogICAgICAgICBzdWl0ZW5hbWU9IiR7dGVzdHN1aXRlLm5hbWV9IgpAQCAtMzQ4LDggKzM0OCw4IEBACiAgICAgICAgIDx4bWxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9InRlc3RuZy54bWwiLz4KICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURodHRwLmhvc3Q9JHtnbGFzc2Zpc2guaHR0cC5ob3N0fSIgLz4KICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURodHRwLnBvcnQ9JHtnbGFzc2Zpc2guaHR0cC5wb3J0fSIgLz4KLQkgICAgPGp2bWFyZyB2YWx1ZT0iLURBU0FETUlOPSR7QVNBRE1JTn0iIC8+Ci0JICAgIDxqdm1hcmcgdmFsdWU9Ii1EQVBQQ0xJRU5UPSR7QVBQQ0xJRU5UfSIgLz4KKyAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURBU0FETUlOPSR7QVNBRE1JTn0iIC8+CisgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1EQVBQQ0xJRU5UPSR7QVBQQ0xJRU5UfSIgLz4KICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLS1hZGQtb3BlbnM9amF2YS5iYXNlL2phdmEubGFuZz1BTEwtVU5OQU1FRCIgLz4KICAgICA8L3Rlc3RuZz4KIDwvdGFyZ2V0PgpAQCAtMzc4LDcgKzM3OCw3IEBACiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtjbGFzcy5vdXRwdXR9Ii8+CiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHt0ZXN0LmNsYXNzLm91dHB1dH0iLz4KICAgICA8L3BhdGg+Ci0gICAgCisKIAogPCEtLSB0aGUgZm9sbG93aW5nIHRhcmdldHMgYXJlIGZvciBydW5uaW5nIHRoZSB3c2l0IHRlc3RzIC0tPgogICAgIDxwYXRoIGlkPSJ3c2l0LmNsYXNzcGF0aCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2dmcHJvamVjdC9kYi10YXJnZXRzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZ2Zwcm9qZWN0L2RiLXRhcmdldHMueG1sCmluZGV4IDdmZjA0ZDAuLjVlM2IxZGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZ2Zwcm9qZWN0L2RiLXRhcmdldHMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZ2Zwcm9qZWN0L2RiLXRhcmdldHMueG1sCkBAIC0xMDUsOSArMTA1LDkgQEAKICAgPGNvbmNhdCBhcHBlbmQ9InRydWUiCiAgICAgICAgICAgZGVzdGZpbGU9IiR7Z2xhc3NmaXNoLmhvbWV9L2RvbWFpbnMvZG9tYWluMS9jb25maWcvc2VydmVyLnBvbGljeSI+CiAgICAgPGZpbGVzZXQgZmlsZT0iJHtnbGFzc2Zpc2guaG9tZX0vZG9tYWlucy9kb21haW4xL2NvbmZpZy9zZXJ2ZXJfcG9saWN5Lm9yaWciLz4KLSAgICA8ZmlsZXNldCBmaWxlPSIke2Jhc2VkaXJ9L3dlbGQvbnVtYmVyZ3Vlc3MvbnVtYmVyZ3Vlc3MucG9saWN5Ii8+ICAgCi0gICAgPGZpbGVzZXQgZmlsZT0iJHtiYXNlZGlyfS93ZWxkL2V4dGVuc2lvbnMvZXh0ZW5zaW9ucy5wb2xpY3kiLz4gICAKLSAgICA8ZmlsZXNldCBmaWxlPSIke2Jhc2VkaXJ9L29zZ2l0ZXN0L2Jhc2ljb3NnaS9zZWN1cml0eS5wb2xpY3kiLz4gICAKKyAgICA8ZmlsZXNldCBmaWxlPSIke2Jhc2VkaXJ9L3dlbGQvbnVtYmVyZ3Vlc3MvbnVtYmVyZ3Vlc3MucG9saWN5Ii8+CisgICAgPGZpbGVzZXQgZmlsZT0iJHtiYXNlZGlyfS93ZWxkL2V4dGVuc2lvbnMvZXh0ZW5zaW9ucy5wb2xpY3kiLz4KKyAgICA8ZmlsZXNldCBmaWxlPSIke2Jhc2VkaXJ9L29zZ2l0ZXN0L2Jhc2ljb3NnaS9zZWN1cml0eS5wb2xpY3kiLz4KICAgPC9jb25jYXQ+CiA8L3RhcmdldD4KIApAQCAtMTE4LDI0ICsxMTgsMjQgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InN0YXJ0RGVyYnkiIGRlcGVuZHM9ImluaXRwcm9wIj4KLSAgICA8ZWNobyBtZXNzYWdlPSJTdGFydGluZyBEZXJieSBEQiBzZXJ2ZXJzIGluIHRoZSBOZXR3b3JrIE1vZGUiLz4gICAgCi0gICAgCisgICAgPGVjaG8gbWVzc2FnZT0iU3RhcnRpbmcgRGVyYnkgREIgc2VydmVycyBpbiB0aGUgTmV0d29yayBNb2RlIi8+CisKICAgICA8amF2YSBjbGFzc25hbWU9Im9yZy5hcGFjaGUuZGVyYnkuZHJkYS5OZXR3b3JrU2VydmVyQ29udHJvbCIKICAgICAgICAgICBjbGFzc3BhdGhyZWY9ImRiLmNsYXNzLnBhdGgiIGZvcms9InRydWUiIHNwYXduPSJ0cnVlIj4KICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0iZGVyYnkuc3lzdGVtLmhvbWUiIHZhbHVlPSIke2RlcmJ5LmhvbWV9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iLWggbG9jYWxob3N0IC1wICR7ZGIucG9ydH0gc3RhcnQiLz4KLSAgICA8L2phdmE+IAorICAgIDwvamF2YT4KICAgICA8ZWNobyBtZXNzYWdlPSJGaW5pc2hlZCBzdGFydGluZyBkYXRiYXNlIi8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJzdG9wRGVyYnkiIGRlcGVuZHM9ImluaXRwcm9wIj4KICAgICA8ZWNobyBtZXNzYWdlPSJTdG9wcGluZyBEZXJieSBEQiBzZXJ2ZXJzIGluIHRoZSBOZXR3b3JrIE1vZGUiLz4KLSAgICAKKwogICAgIDxqYXZhIGNsYXNzbmFtZT0ib3JnLmFwYWNoZS5kZXJieS5kcmRhLk5ldHdvcmtTZXJ2ZXJDb250cm9sIgogICAgICAgICAgIGNsYXNzcGF0aHJlZj0iZGIuY2xhc3MucGF0aCIgZm9yaz0idHJ1ZSI+CiAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9ImRlcmJ5LnN5c3RlbS5ob21lIiB2YWx1ZT0iJHtkZXJieS5ob21lfSIvPgogICAgICAgICA8YXJnIGxpbmU9InNodXRkb3duIC1oIGxvY2FsaG9zdCAtcCAke2RiLnBvcnR9Ii8+Ci0gICAgPC9qYXZhPiAKKyAgICA8L2phdmE+CiAgICAgPGVjaG8gbWVzc2FnZT0iRmluaXNoZWQgc3RvcHBpbmcgZGF0YmFzZSIvPgogPC90YXJnZXQ+CiAKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgIG9uZXJyb3I9ImNvbnRpbnVlIgogICAgIHByaW50PSJ5ZXMiCiAgICAgY2xhc3NwYXRoPSIke2RiLmNsYXNzLnBhdGh9Ij4KLSAgPC9zcWw+IAorICA8L3NxbD4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1kYiIgZGVwZW5kcz0iaW5pdHByb3AsZGVsZXRlLWRiIgpAQCAtMTYyLDcgKzE2Miw3IEBACiAgICAgPGVjaG8+dXNlcj0ke2RiLnVzZXJ9PC9lY2hvPgogICAgIDxlY2hvPnBhc3N3b3JkPSR7ZGIucGFzc3dvcmR9PC9lY2hvPgogICAgIDxlY2hvPmRiLmNsYXNzLnBhdGg9ZGIuY2xhc3MucGF0aDwvZWNobz4KLSAgICAKKwogICAgIDxzcWwgZHJpdmVyPSIke2RiLmRyaXZlcn0iCiAgICAgICAgICBlbmNvZGluZz0idXRmLTgiCiAgICAgICAgICB1cmw9IiR7ZGIudXJsfSIKQEAgLTE3NSwxOSArMTc1LDE5IEBACiAgICAgICAgICBvbmVycm9yPSJhYm9ydCIgPgogICAgICAgICA8dHJhbnNhY3Rpb24gc3JjPSJzcWwvY3JlYXRlXyR7ZGIudHlwZX0uc3FsIi8+CiAgICAgICAgIDx0cmFuc2FjdGlvbj4KLQkJICAgIHNlbGVjdCBjaXR5IGZyb20gd2ViX2N1c3RvbWVyIHdoZXJlIGN1c3RfaWQ9MTsKLQkJICAgIHNlbGVjdCAqIGZyb20gd2ViX2N1c3RvbWVyIHdoZXJlIGN1c3RuYW1lIExpa2UgJ0FsaWNlXzEnOwotCSAgICA8L3RyYW5zYWN0aW9uPgotCSAgICAKKyAgICAgICAgICAgIHNlbGVjdCBjaXR5IGZyb20gd2ViX2N1c3RvbWVyIHdoZXJlIGN1c3RfaWQ9MTsKKyAgICAgICAgICAgIHNlbGVjdCAqIGZyb20gd2ViX2N1c3RvbWVyIHdoZXJlIGN1c3RuYW1lIExpa2UgJ0FsaWNlXzEnOworICAgICAgICA8L3RyYW5zYWN0aW9uPgorCiAgICAgPC9zcWw+Ci0gICAgCisKIDwvdGFyZ2V0PgotPHRhcmdldCBuYW1lPSJkZWxldGUtZGIiICAKKzx0YXJnZXQgbmFtZT0iZGVsZXRlLWRiIgogICAgICAgICBkZXNjcmlwdGlvbj0iRGVsZXRlcyB0aGUgZGF0YWJhc2UgdGFibGVzLiIgZGVwZW5kcz0iaW5pdHByb3AiPgogICAgIDxlY2hvPmRyaXZlcj0ke2RiLmRyaXZlcn08L2VjaG8+CiAgICAgPGVjaG8+dXJsPSR7ZGIudXJsfTwvZWNobz4KICAgICA8ZWNobz51c2VyPSR7ZGIudXNlcn08L2VjaG8+Ci0gICAgPGVjaG8+cGFzc3dvcmQ9JHtkYi5wYXNzd29yZH08L2VjaG8+ICAgICAgIAorICAgIDxlY2hvPnBhc3N3b3JkPSR7ZGIucGFzc3dvcmR9PC9lY2hvPgogICAgIDxzcWwgZHJpdmVyPSIke2RiLmRyaXZlcn0iCiAgICAgICAgICBlbmNvZGluZz0idXRmLTgiCiAgICAgICAgICB1cmw9IiR7ZGIudXJsfSIKQEAgLTE5Niw3ICsxOTYsNyBAQAogICAgICAgICAgY2xhc3NwYXRocmVmPSJkYi5jbGFzcy5wYXRoIgogICAgICAgICAgZGVsaW1pdGVyPSIke2RiLmRlbGltaXRlcn0iCiAgICAgICAgICBhdXRvY29tbWl0PSJ0cnVlIgotICAgICAgICAgb25lcnJvcj0iY29udGludWUiPiAgICAgICAKKyAgICAgICAgIG9uZXJyb3I9ImNvbnRpbnVlIj4KICAgICAgICAgPHRyYW5zYWN0aW9uIHNyYz0ic3FsL2Ryb3BfJHtkYi50eXBlfS5zcWwiLz4KICAgICA8L3NxbD4KIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9nZnByb2plY3QvdXRpbHMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9nZnByb2plY3QvdXRpbHMueG1sCmluZGV4IDJiODMzYWUuLjgwZGU1NjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZ2Zwcm9qZWN0L3V0aWxzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2dmcHJvamVjdC91dGlscy54bWwKQEAgLTE0NCwxMCArMTQ0LDEwIEBACiAgICAgJHtyZW1haW5pbmdfbWVzc2FnZXN9CiAgICAgPC9lY2hvPgogCi0JPGNvbmRpdGlvbiBwcm9wZXJ0eT0iY29uZC1pcy10cnVlIj4KLSAgICAJPG5vdD4KLSAgICAJCTxhbmQ+Ci0gICAgCQkJPGVxdWFscyBhcmcxPSIobm9uZSkiIGFyZzI9IiR7bGluZXNfd2l0aF9tc2dfa2V5fSIvPgorICAgIDxjb25kaXRpb24gcHJvcGVydHk9ImNvbmQtaXMtdHJ1ZSI+CisgICAgICAgIDxub3Q+CisgICAgICAgICAgICA8YW5kPgorICAgICAgICAgICAgICAgIDxlcXVhbHMgYXJnMT0iKG5vbmUpIiBhcmcyPSIke2xpbmVzX3dpdGhfbXNnX2tleX0iLz4KICAgICAgICAgICAgICAgICA8ZXF1YWxzIGFyZzE9Iihub25lKSIgYXJnMj0iJHtsaW5lc193aXRoX21zZ191bnN1YnN0X3BhcmFtfSIvPgogICAgICAgICAgICAgICAgIDxlcXVhbHMgYXJnMT0iKG5vbmUpIiBhcmcyPSIke2xpbmVzX3dpdGhfYnVuZGxlX25vdF9mb3VuZF9tc2d9Ii8+CiAgICAgICAgICAgICAgICAgPGVxdWFscyBhcmcxPSIobm9uZSkiIGFyZzI9IiR7bGluZXNfd2l0aF9udWxsX29yX2VtcHR5X21zZ30iLz4KQEAgLTE1NSwyOSArMTU1LDI5IEBACiAgICAgICAgICAgICAgICAgPGVxdWFscyBhcmcxPSIobm9uZSkiIGFyZzI9IiR7bGluZXNfd2l0aF9tc2dfY29tbW9uX3R5cG9zfSIvPgogICAgICAgICAgICAgICAgIDxlcXVhbHMgYXJnMT0iKG5vbmUpIiBhcmcyPSIke2xpbmVzX3dpdGhfbXNnX2RvdWJsZV9hcG9zfSIvPgogICAgICAgICAgICAgICAgIDxlcXVhbHMgYXJnMT0iKG5vbmUpIiBhcmcyPSIke3JlbWFpbmluZ19tZXNzYWdlc30iLz4KLSAgICAJICAgIDwvYW5kPgotICAgIAk8L25vdD4KKyAgICAgICAgICAgIDwvYW5kPgorICAgICAgICA8L25vdD4KICAgICA8L2NvbmRpdGlvbj4KIAotCTxhbnRjYWxsIHRhcmdldD0icGFzcyIvPgotCTxhbnRjYWxsIHRhcmdldD0iZmFpbCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icGFzcyIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZmFpbCIvPgogPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InBhc3MiIHVubGVzcz0iY29uZC1pcy10cnVlIj4KLQkJPGVjaG8gbWVzc2FnZT0iPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIvPgotCQk8ZWNobyBtZXNzYWdlPSJQQVNTRUQ6IGNoZWNrLWxvZ2dlZC1tZXNzYWdlcyIvPgotCQk8ZWNobyBtZXNzYWdlPSI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ii8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJwYXNzIiB1bmxlc3M9ImNvbmQtaXMtdHJ1ZSI+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9Ij09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iUEFTU0VEOiBjaGVjay1sb2dnZWQtbWVzc2FnZXMiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJmYWlsIiAgaWY9ImNvbmQtaXMtdHJ1ZSI+Ci0JCTxlY2hvIG1lc3NhZ2U9Ij09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iLz4KLQkJPGVjaG8gbWVzc2FnZT0iRkFJTEVEOiBjaGVjay1sb2dnZWQtbWVzc2FnZXMiLz4KLQkJPGVjaG8gbWVzc2FnZT0iSXNzdWVzIGZvdW5kIGluIG9uZSBvciBtb3JlIG1lc3NhZ2VzIChzZWUgcmVzdWx0cyBhYm92ZSkuIi8+Ci0JCTxlY2hvIG1lc3NhZ2U9IlBsZWFzZSBhZGRyZXNzIHRoZW0sIG9yIGlmIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBsZWZ0IGFzLWlzLCIvPgotCQk8ZWNobyBtZXNzYWdlPSJhZGQgaXQgdG8gdGhlIGV4Y2x1c2lvbiBsaXN0IHdpdGggZGV0YWlscyB3aHkgaXQgc2hvdWxkIGJlIGV4Y2x1ZGVkOiIvPgotCQk8ZWNobyBtZXNzYWdlPSIke2xvZy5tc2cuZXhjbC5wYXRofSIvPgotCQk8ZWNobyBtZXNzYWdlPSI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ii8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJmYWlsIiAgaWY9ImNvbmQtaXMtdHJ1ZSI+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9Ij09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iRkFJTEVEOiBjaGVjay1sb2dnZWQtbWVzc2FnZXMiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iSXNzdWVzIGZvdW5kIGluIG9uZSBvciBtb3JlIG1lc3NhZ2VzIChzZWUgcmVzdWx0cyBhYm92ZSkuIi8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlBsZWFzZSBhZGRyZXNzIHRoZW0sIG9yIGlmIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBsZWZ0IGFzLWlzLCIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJhZGQgaXQgdG8gdGhlIGV4Y2x1c2lvbiBsaXN0IHdpdGggZGV0YWlscyB3aHkgaXQgc2hvdWxkIGJlIGV4Y2x1ZGVkOiIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSIke2xvZy5tc2cuZXhjbC5wYXRofSIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ii8+CisgICAgPC90YXJnZXQ+CiAKIAogICAgIDxtYWNyb2RlZiBuYW1lPSJmaWx0ZXItbG9nLWZpbGUiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9nZnByb2plY3QvdjItdGFyZ2V0cy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2dmcHJvamVjdC92Mi10YXJnZXRzLnhtbAppbmRleCAxZGY2N2U0Li42YmI1Yzg4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2dmcHJvamVjdC92Mi10YXJnZXRzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2dmcHJvamVjdC92Mi10YXJnZXRzLnhtbApAQCAtMjAsMTQgKzIwLDE0IEBACiA8cHJvamVjdCBuYW1lPSJ2Mi10YXJnZXRzIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJ3YXIuZmlsZS5leHQiIHZhbHVlPSIke3dhci5maWxlfS53YXIiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95ZWQuYXBwIiB2YWx1ZT0iIi8+Ci0gICAgCisKICAgICA8cHJvcGVydHkgbmFtZT0iYXMucHJvcHMiCiAgICAgICAgICAgICAgIHZhbHVlPSItLXVzZXIgJHthZG1pbi51c2VyfSAtLXBhc3N3b3JkZmlsZSAke2FkbWluLnBhc3N3b3JkLmZpbGV9IC0tZWNobz10cnVlIC0tdGVyc2U9dHJ1ZSAtLXBvcnQ9JHthZG1pbi5wb3J0fSIvPgogICAgPCEtLTxlY2hvIGZpbGU9IiR7YWRtaW4ucGFzc3dvcmQuZmlsZX0iIGFwcGVuZD0iZmFsc2UiPgogICAgICBBU19BRE1JTl9QQVNTV09SRD0ke2FkbWluLnBhc3N3b3JkfQogICAgIEFTX0FETUlOX0FETUlOUEFTU1dPUkQ9JHthZG1pbi5wYXNzd29yZH0KICAgICBBU19BRE1JTl9NQVNURVJQQVNTV09SRD0ke21hc3Rlci5wYXNzd29yZH08L2VjaG8+LS0+Ci0gICAgCisKICAgIDwhLS08dGFyZ2V0IG5hbWU9InNldHVwIiB1bmxlc3M9ImJJbml0aWFsaXNlZCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IiR7Y29uZmlnLmRpcn0iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iJHtjb25maWcuZGlyfS8ke2FkbWluLnBhc3N3b3JkLmZpbGV9Ii8+CkBAIC0zNiwxNCArMzYsMTQgQEAKICAgICAgICAgPHJlcGxhY2UgZmlsZT0iJHtjb25maWcuZGlyfS8ke2FkbWluLnBhc3N3b3JkLmZpbGV9IiB0b2tlbj0iQEBBRE1JTl9NQVNURVJfUEFTU1dPUkRAQCIgdmFsdWU9IiR7bWFzdGVyLnBhc3N3b3JkfSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iYkluaXRpYWxpc2VkIiB2YWx1ZT0iIi8+CiAgICAgPC90YXJnZXQ+LS0+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS12Mi1pbXBsIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iJHtkZXBsb3llZC5hcHB9Ii8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlBsZWFzZSBzZXQgcHJvcGVydHkgJHtkZXBsb3llZC5hcHB9IGJlZm9yZSBjYWxsaW5nIHRoaXMgdGFyZ2V0Ii8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImdsYXNzZmlzaC5ob21lIGlzICR7Z2xhc3NmaXNoLmhvbWV9Ii8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImRlcGxveWluZyBpbiB2MiBtb2RlIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9Ii4vJHt3YXIuZmlsZS5leHR9Ii8+Ci0gICAgICAgIDxlY2hvIG1lc3NhZ2U9Ik9TIGlzICR7b3MubmFtZX0iLz4gCisgICAgICAgIDxlY2hvIG1lc3NhZ2U9Ik9TIGlzICR7b3MubmFtZX0iLz4KICAgICAgICAgPHJlY29yZCBuYW1lPSJkZXBsb3kub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9ImNtZCIgb3NmYW1pbHk9IldpbmRvd3MiPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iL2MiLz4KQEAgLTUyLDM1ICs1MiwzNSBAQAogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2RlcGxveWVkLmFwcH0iLz4KICAgICAgICAgPC9leGVjPgotICAgICAgICAKKwogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2dsYXNzZmlzaC5ob21lfS9iaW4vYXNhZG1pbiIgb3NmYW1pbHk9InVuaXgiPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iZGVwbG95Ii8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7ZGVwbG95ZWQuYXBwfSIvPgogICAgICAgICA8L2V4ZWM+Ci0gICAgICAgIAorCiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlVSTCBvZiBkZXBsb3llZCBhcHAgOiBodHRwOi8vJHtnbGFzc2Zpc2guaHR0cC5ob3N0fToke2dsYXNzZmlzaC5odHRwLnBvcnR9LyR7Y29udGV4dHJvb3R9Ii8+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0iZGVwbG95Lm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgCisKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktdjItaW1wbCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9InVuZGVwbG95aW5nIGluIHYzIG1vZGUiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iLi8ke3dhci5maWxlLmV4dH0iLz4KLSAgICAgICAgCisKICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iY21kIiBvc2ZhbWlseT0iV2luZG93cyI+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIvYyIvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtnbGFzc2Zpc2guaG9tZX0vYmluL2FzYWRtaW4uYmF0Ii8+Ci0gICAgICAgICAgICA8YXJnIGxpbmU9InVuZGVwbG95Ii8+ICAgIAorICAgICAgICAgICAgPGFyZyBsaW5lPSJ1bmRlcGxveSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSIke3dhci5maWxlfSIvPgotICAgICAgICA8L2V4ZWM+ICAKLSAgICAgICAgCisgICAgICAgIDwvZXhlYz4KKwogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2dsYXNzZmlzaC5ob21lfS9iaW4vYXNhZG1pbiIgb3NmYW1pbHk9InVuaXgiPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0idW5kZXBsb3kiLz4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7d2FyLmZpbGV9Ii8+Ci0gICAgICAgIDwvZXhlYz4gICAgICAKKyAgICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzdGFydC1zZXJ2ZXIiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSIke2FzLnByb3BzfSIvPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSJjbWQiIG9zZmFtaWx5PSJXaW5kb3dzIj4KQEAgLTg4LDE2ICs4OCwxNiBAQAogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtnbGFzc2Zpc2guaG9tZX0vYmluL2FzYWRtaW4uYmF0Ii8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9InN0YXJ0LWRvbWFpbiIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItLXVzZXIgJHthZG1pbi51c2VyfSIvPgotICAgICAgICAgICAgPGFyZyBsaW5lPSItLXBhc3N3b3JkZmlsZSAke2FkbWluLnBhc3N3b3JkLmZpbGV9ICIvPiAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIDxhcmcgbGluZT0iJHthZG1pbi5kb21haW59Ii8+IAorICAgICAgICAgICAgPGFyZyBsaW5lPSItLXBhc3N3b3JkZmlsZSAke2FkbWluLnBhc3N3b3JkLmZpbGV9ICIvPgorICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FkbWluLmRvbWFpbn0iLz4KICAgICAgICAgPC9leGVjPgotICAgICAgICAKKwogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2dsYXNzZmlzaC5ob21lfS9iaW4vYXNhZG1pbiIgb3NmYW1pbHk9InVuaXgiPgotICAgICAgICAgICAgPGFyZyBsaW5lPSJzdGFydC1kb21haW4iLz4gICAgCisgICAgICAgICAgICA8YXJnIGxpbmU9InN0YXJ0LWRvbWFpbiIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgotICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FkbWluLmRvbWFpbn0iLz4gCisgICAgICAgICAgICA8YXJnIGxpbmU9IiR7YWRtaW4uZG9tYWlufSIvPgogICAgICAgICA8L2V4ZWM+Ci0gICAgICAgIAorCiAgICAgPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0ic3RvcC1zZXJ2ZXIiPgpAQCAtMTA2LDIyICsxMDYsMjIgQEAKICAgICAgICAgPGFyZyB2YWx1ZT0iJHtnbGFzc2Zpc2guaG9tZX0vYmluL2FzYWRtaW4uYmF0Ii8+CiAgICAgICAgIDxhcmcgbGluZT0ic3RvcC1kb21haW4iLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgotICAgICAgICA8YXJnIGxpbmU9IiR7YWRtaW4uZG9tYWlufSIvPiAgIAotICAgICAgICAKKyAgICAgICAgPGFyZyBsaW5lPSIke2FkbWluLmRvbWFpbn0iLz4KKwogICAgIDwvZXhlYz4KLSAgICAKKwogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7Z2xhc3NmaXNoLmhvbWV9L2Jpbi9hc2FkbWluIiBvc2ZhbWlseT0idW5peCI+CiAgICAgICAgIDxhcmcgbGluZT0ic3RvcC1kb21haW4iLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgotICAgICAgICA8YXJnIGxpbmU9IiR7YWRtaW4uZG9tYWlufSIvPiAgICAgICAKKyAgICAgICAgPGFyZyBsaW5lPSIke2FkbWluLmRvbWFpbn0iLz4KICAgICA8L2V4ZWM+Ci0gICAgCisKIDwvdGFyZ2V0PgogCiAKIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWpkYmMtY29ubnBvb2wiPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9InNhbXBsZS1kZXJieS1wb29sIi8+Ci08ZWNobyBtZXNzYWdlPSJjcmVhdGVkIGpkYmMgY29ubmVjdGlvbiBwb29sICR7amRiYy5jb25wb29sLm5hbWV9IiAKKzxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgamRiYyBjb25uZWN0aW9uIHBvb2wgJHtqZGJjLmNvbnBvb2wubmFtZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSJjbWQiIG9zZmFtaWx5PSJXaW5kb3dzIj4KICAgICA8YXJnIHZhbHVlPSIvYyIvPgpAQCAtMTMyLDcgKzEzMiw3IEBACiAgICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7amRiYy5jb25wb29sLm5hbWV9Ii8+Ci0gICAgPC9leGVjPiAgCisgICAgPC9leGVjPgogPC90YXJnZXQ+CiAKIApAQCAtMTQwLDcgKzE0MCw3IEBACiA8IS0tIFRhcmdldCB0byBjcmVhdGUgSkRCQyByZXNvdXJjZSAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLXJlc291cmNlIj4KLSAgICA8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBqZGJjIHJlc291cmNlIHBvb2wgJHtqZGJjLnJlc291cmNlLm5hbWV9IiAKKyAgICA8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBqZGJjIHJlc291cmNlIHBvb2wgJHtqZGJjLnJlc291cmNlLm5hbWV9IgogICAgICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgPGVjaG8gbWVzc2FnZT0iYXNhZG1pbiBjcmVhdGUtamRiYy1yZXNvdXJjZSAke2FzLnByb3BzfSAtLWNvbm5lY3Rpb25wb29saWQgJHtqZGJjLmNvbnBvb2wubmFtZX0gLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gJHtqZGJjLnJlc291cmNlLm5hbWV9Ii8+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iY21kIiBvc2ZhbWlseT0iV2luZG93cyI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2dmcHJvamVjdC92My10YXJnZXRzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZ2Zwcm9qZWN0L3YzLXRhcmdldHMueG1sCmluZGV4IGVlMzk0MmIuLjI2YjFmZDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZ2Zwcm9qZWN0L3YzLXRhcmdldHMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svZ2Zwcm9qZWN0L3YzLXRhcmdldHMueG1sCkBAIC0xOCw3ICsxOCw3IEBACiAtLT4KIAogPHByb2plY3QgbmFtZT0idjMtdGFyZ2V0cyIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KLSAgICAKKwogICAgIDxwcm9wZXJ0eSBuYW1lPSJkYi5yb290IiB2YWx1ZT0iJHtnbGFzc2Zpc2guaG9tZX0vamF2YWRiIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImRiLmNsYXNzcGF0aCIgdmFsdWU9IiR7ZGIucm9vdH0vbGliIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImRpc3QuZGlyIiB2YWx1ZT0iJHt3cy5yb290fS9kaXN0LyR7dGVzdHN1aXRlLm5hbWV9Ii8+CkBAIC02OSw3ICs2OSw3IEBACiAKIDx0YXJnZXQgbmFtZT0icmVzdGFydC1zZXJ2ZXItd2luZG93cyIgaWY9ImlzV2luZG93cyI+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iY21kIiBvdXRwdXRwcm9wZXJ0eT0ibWVzc2FnZTEiPgotCTxlbnYga2V5PSJHbGFzc0Zpc2hfUGxhdGZvcm0iIHZhbHVlPSJGZWxpeCIvPgorICAgIDxlbnYga2V5PSJHbGFzc0Zpc2hfUGxhdGZvcm0iIHZhbHVlPSJGZWxpeCIvPgogICAgICAgICA8YXJnIHZhbHVlPSIvYyIvPgogICAgICAgICA8YXJnIHZhbHVlPSIke2dsYXNzZmlzaC5ob21lfVxiaW5cYXNhZG1pbi5iYXQiLz4KICAgICAgICAgPGFyZyB2YWx1ZT0icmVzdGFydC1kb21haW4iLz4KQEAgLTgwLDcgKzgwLDcgQEAKIAogPHRhcmdldCBuYW1lPSJjcmVhdGUtamRiYy1jb25uZWN0aW9uLXBvb2wiIGRlcGVuZHM9InNldE9TQ29uZGl0aW9ucyxhc2Vudi11bml4LGFzZW52LXdpbmRvd3MiPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIG91dHB1dHByb3BlcnR5PSJtZXNzYWdlIj4KLQk8YXJnIGxpbmU9ImNyZWF0ZS1qZGJjLWNvbm5lY3Rpb24tcG9vbCAtLWRhdGFzb3VyY2VjbGFzc25hbWU9b3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERhdGFTb3VyY2UgLS1wcm9wZXJ0eSBEYXRhYmFzZU5hbWU9c3VuLWFwcHNlcnYtc2FtcGxlczpQb3J0TnVtYmVyPTE1Mjc6c2VydmVyTmFtZT1sb2NhbGhvc3Q6Y29ubmVjdGlvbkF0dHJpYnV0ZXM9XDtjcmVhdGVcPXRydWU6UGFzc3dvcmQ9QVBQOlVzZXI9QVBQIFFMSmRiY1Bvb2wiLz4KKyAgICA8YXJnIGxpbmU9ImNyZWF0ZS1qZGJjLWNvbm5lY3Rpb24tcG9vbCAtLWRhdGFzb3VyY2VjbGFzc25hbWU9b3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERhdGFTb3VyY2UgLS1wcm9wZXJ0eSBEYXRhYmFzZU5hbWU9c3VuLWFwcHNlcnYtc2FtcGxlczpQb3J0TnVtYmVyPTE1Mjc6c2VydmVyTmFtZT1sb2NhbGhvc3Q6Y29ubmVjdGlvbkF0dHJpYnV0ZXM9XDtjcmVhdGVcPXRydWU6UGFzc3dvcmQ9QVBQOlVzZXI9QVBQIFFMSmRiY1Bvb2wiLz4KICAgICA8L2V4ZWM+CiAgICAgPGVjaG8gbWVzc2FnZT0iJHttZXNzYWdlfSIvPgogPC90YXJnZXQ+CkBAIC05NCw3ICs5NCw3IEBACiAKIDx0YXJnZXQgbmFtZT0iZGVsZXRlLWpkYmMtY29ubmVjdGlvbi1wb29sIiBkZXBlbmRzPSJzZXRPU0NvbmRpdGlvbnMsYXNlbnYtdW5peCxhc2Vudi13aW5kb3dzIj4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBvdXRwdXRwcm9wZXJ0eT0ibWVzc2FnZTEiPgotCTxhcmcgbGluZT0iZGVsZXRlLWpkYmMtY29ubmVjdGlvbi1wb29sIFFMSmRiY1Bvb2wiLz4KKyAgICA8YXJnIGxpbmU9ImRlbGV0ZS1qZGJjLWNvbm5lY3Rpb24tcG9vbCBRTEpkYmNQb29sIi8+CiAgICAgPC9leGVjPgogICAgIDxlY2hvIG1lc3NhZ2U9IiR7bWVzc2FnZTF9Ii8+CiA8L3RhcmdldD4KQEAgLTEyMSwxMiArMTIxLDEyIEBACiAKIDx0YXJnZXQgbmFtZT0ic3RhcnQtc2VydmVyLXdpbmRvd3MiIGlmPSJpc1dpbmRvd3MiPgogICAgIDxleGVjIGV4ZWN1dGFibGU9ImNtZCIgc3Bhd249InRydWUiPgotCTxlbnYga2V5PSJHbGFzc0Zpc2hfUGxhdGZvcm0iIHZhbHVlPSJGZWxpeCIvPgorICAgIDxlbnYga2V5PSJHbGFzc0Zpc2hfUGxhdGZvcm0iIHZhbHVlPSJGZWxpeCIvPgogICAgICAgICA8YXJnIHZhbHVlPSIvYyIvPgogICAgICAgICA8YXJnIHZhbHVlPSIke2dsYXNzZmlzaC5ob21lfVxiaW5cYXNhZG1pbi5iYXQiLz4KICAgICAgICAgPGFyZyB2YWx1ZT0ic3RhcnQtZG9tYWluIi8+CiAgICAgPC9leGVjPgotICAgIDwhLS0gSlJ1YnkgZGVwbHltZW50IG5lZWRzIEdGIHN0YXJ0IHNlcnZlciB0byBiZSBmdWxseSBkb25lLiAKKyAgICA8IS0tIEpSdWJ5IGRlcGx5bWVudCBuZWVkcyBHRiBzdGFydCBzZXJ2ZXIgdG8gYmUgZnVsbHkgZG9uZS4KICAgICAgICAgIEludHJvZHVjZSBhIGRlbGF5IGZvciBub3cgYW5kIHdpbGwgaW52ZXN0aWdhdGUgZnV0aGVyLiAgLS0+CiAgICAgPHNsZWVwIHNlY29uZHM9IjEwIi8+CiA8L3RhcmdldD4KQEAgLTEzOCw3ICsxMzgsNyBAQAogCiA8dGFyZ2V0IG5hbWU9InN0b3Atc2VydmVyLXVuaXgiIGlmPSJpc1VuaXgiPgogICAgIDxlY2hvIG1lc3NhZ2U9InN0b3BwaW5nIHNlcnZlciBvbiB1bml4IC4uLiIvPgotICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7Z2xhc3NmaXNoLmhvbWV9L2Jpbi9hc2FkbWluIj4gICAgICAgIAorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7Z2xhc3NmaXNoLmhvbWV9L2Jpbi9hc2FkbWluIj4KICAgICAgICAgPGFyZyB2YWx1ZT0ic3RvcC1kb21haW4iLz4KICAgICA8L2V4ZWM+CiA8L3RhcmdldD4KQEAgLTE1MSw4ICsxNTEsOCBAQAogICAgICAgICA8YXJnIHZhbHVlPSJzdG9wLWRvbWFpbiIvPgogICAgIDwvZXhlYz4KIDwvdGFyZ2V0PgotICAgIAotICAgICAgCisKKwogPHRhcmdldCBuYW1lPSJkZXBsb3ktdjMtaW1wbCIgZGVwZW5kcz0ic2V0T1NDb25kaXRpb25zIj4KICAgICA8ZWNobyBtZXNzYWdlPSJkZXBsb3lpbmcgJHthcHAuZmlsZS5leHR9Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktdjMtaW1wbC11bml4Ii8+CkBAIC0xNjQsMTAgKzE2NCwxMCBAQAogICAgIDxhcmcgdmFsdWU9Ii9jIi8+CiAgICAgPGFyZyB2YWx1ZT0iJHtnbGFzc2Zpc2guaG9tZX1cYmluXGFzYWRtaW4uYmF0Ii8+CiAgICAgPGFyZyB2YWx1ZT0iZGVwbG95Ii8+Ci0gICAgPGFyZyBsaW5lPSIke2Rpc3QuZGlyfS8ke2FwcC5maWxlLmV4dH0iLz4gICAKLSAgIDwvZXhlYz4gIAorICAgIDxhcmcgbGluZT0iJHtkaXN0LmRpcn0vJHthcHAuZmlsZS5leHR9Ii8+CisgICA8L2V4ZWM+CiA8L3RhcmdldD4KLSAgCisKIDx0YXJnZXQgbmFtZT0iZGVwbG95LXYzLWltcGwtdW5peCIgaWY9ImlzVW5peCI+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7Z2xhc3NmaXNoLmhvbWV9L2Jpbi9hc2FkbWluIiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgIDxhcmcgdmFsdWU9ImRlcGxveSIvPgpAQCAtMTg3LDEwICsxODcsMTAgQEAKICAgICA8YXJnIHZhbHVlPSIke2dsYXNzZmlzaC5ob21lfVxiaW5cYXNhZG1pbi5iYXQiLz4KICAgICA8YXJnIHZhbHVlPSJkZXBsb3kiLz4KICAgICA8YXJnIHZhbHVlPSItLXVwbG9hZCIvPgotICAgIDxhcmcgbGluZT0iJHtkaXN0LmRpcn0vJHthcHAuZmlsZS5leHR9Ii8+ICAgCi0gICA8L2V4ZWM+ICAKKyAgICA8YXJnIGxpbmU9IiR7ZGlzdC5kaXJ9LyR7YXBwLmZpbGUuZXh0fSIvPgorICAgPC9leGVjPgogPC90YXJnZXQ+Ci0gIAorCiA8dGFyZ2V0IG5hbWU9ImRlcGxveS11cGxvYWQtdjMtaW1wbC11bml4IiBpZj0iaXNVbml4Ij4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtnbGFzc2Zpc2guaG9tZX0vYmluL2FzYWRtaW4iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgPGFyZyB2YWx1ZT0iZGVwbG95Ii8+CkBAIC0yMTIsOSArMjEyLDkgQEAKICAgICA8YXJnIHZhbHVlPSJkZXBsb3kiLz4KICAgICA8YXJnIHZhbHVlPSItLWZvcmNlPXRydWUiLz4KICAgICA8YXJnIGxpbmU9IiR7ZGlzdC5kaXJ9LyR7YXBwLmZpbGUuZXh0fSIvPgotICAgPC9leGVjPiAKKyAgIDwvZXhlYz4KIDwvdGFyZ2V0PgotIAorCiA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveS12My11bml4IiBpZj0iaXNVbml4Ij4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtnbGFzc2Zpc2guaG9tZX0vYmluL2FzYWRtaW4iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgPGFyZyB2YWx1ZT0iZGVwbG95Ii8+CkBAIC0yMjUsNyArMjI1LDcgQEAKIAogPHRhcmdldCBuYW1lPSJ1bmRlcGxveS12My1pbXBsIiBkZXBlbmRzPSJzZXRPU0NvbmRpdGlvbnMiPgogICAgIDxlY2hvIG1lc3NhZ2U9IiR7YXBwLmZpbGV9Ii8+Ci0gICAgCisKICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXYzLWltcGwtdW5peCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktdjMtaW1wbC13aW5kb3dzIi8+CiA8L3RhcmdldD4KQEAgLTIzNCwyOSArMjM0LDI5IEBACiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iY21kIj4KICAgICA8YXJnIHZhbHVlPSIvYyIvPgogICAgIDxhcmcgdmFsdWU9IiR7Z2xhc3NmaXNoLmhvbWV9XGJpblxhc2FkbWluLmJhdCIvPgotICAgIDxhcmcgdmFsdWU9InVuZGVwbG95Ii8+ICAgIAorICAgIDxhcmcgdmFsdWU9InVuZGVwbG95Ii8+CiAgICAgPGFyZyB2YWx1ZT0iJHthcHAuZmlsZX0iLz4KLSAgPC9leGVjPiAgCisgIDwvZXhlYz4KIDwvdGFyZ2V0PgotICAKKwogPHRhcmdldCBuYW1lPSJ1bmRlcGxveS12My1pbXBsLXVuaXgiIGlmPSJpc1VuaXgiPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke2dsYXNzZmlzaC5ob21lfS9iaW4vYXNhZG1pbiI+CiAgICAgPGFyZyB2YWx1ZT0idW5kZXBsb3kiLz4KICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0IHNlcnZlciIvPgogICAgIDxhcmcgdmFsdWU9IiR7YXBwLmZpbGV9Ii8+Ci0gIDwvZXhlYz4gICAgICAKKyAgPC9leGVjPgogPC90YXJnZXQ+CiAKIAogPHRhcmdldCBuYW1lPSJjcmVhdGUtdXNlci1jb21tb24tdjMtaW1wbCIgZGVwZW5kcz0ic2V0T1NDb25kaXRpb25zIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS11c2VyLWNvbW1vbi12My1pbXBsLXVuaXgiLz4KLSAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS11c2VyLWNvbW1vbi12My1pbXBsLXdpbmRvd3MiLz4gICAgCisgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtdXNlci1jb21tb24tdjMtaW1wbC13aW5kb3dzIi8+CiA8L3RhcmdldD4KIAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLSBUYXJnZXQgdG8gY3JlYXRlIHRoZSB1c2VyIGluIGZpbGUgcmVhbG0gdGhlIEFwcFNlcnYgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPHRhcmdldCBuYW1lPSJjcmVhdGUtdXNlci1jb21tb24tdjMtaW1wbC11bml4IiBpZj0iaXNVbml4Ij4gICAgCis8dGFyZ2V0IG5hbWU9ImNyZWF0ZS11c2VyLWNvbW1vbi12My1pbXBsLXVuaXgiIGlmPSJpc1VuaXgiPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VyLnBhc3N3b3JkLmZpbGUiIHZhbHVlPSJhc2FkbWludXNlcnBhc3N3b3JkLnR4dCIvPgogICAgIDxlY2hvIGZpbGU9IiR7dXNlci5wYXNzd29yZC5maWxlfSIgYXBwZW5kPSJmYWxzZSI+CiAgICAgICAgIEFTX0FETUlOX1VTRVJQQVNTV09SRD0ke3Bhc3N3b3JkfQpAQCAtMjcxLDEwICsyNzEsMTAgQEAKICAgICAgICAgPGFyZyBsaW5lPSItLWF1dGhyZWFsbW5hbWUgJHthdXRocmVhbG1uYW1lfSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7dXNlcn0iLz4KICAgICA8L2V4ZWM+Ci0gICAgPGRlbGV0ZSBmaWxlPSIke3VzZXIucGFzc3dvcmQuZmlsZX0iIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAgICAKKyAgICA8ZGVsZXRlIGZpbGU9IiR7dXNlci5wYXNzd29yZC5maWxlfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiA8L3RhcmdldD4KIAotPHRhcmdldCBuYW1lPSJjcmVhdGUtdXNlci1jb21tb24tdjMtaW1wbC13aW5kb3dzIiBpZj0iaXNXaW5kb3dzIj4gICAKKzx0YXJnZXQgbmFtZT0iY3JlYXRlLXVzZXItY29tbW9uLXYzLWltcGwtd2luZG93cyIgaWY9ImlzV2luZG93cyI+CiAgICAgPHByb3BlcnR5IG5hbWU9InVzZXIucGFzc3dvcmQuZmlsZSIgdmFsdWU9ImFzYWRtaW51c2VycGFzc3dvcmQudHh0Ii8+CiAgICAgPGVjaG8gZmlsZT0iJHt1c2VyLnBhc3N3b3JkLmZpbGV9IiBhcHBlbmQ9ImZhbHNlIj4KICAgICAgICAgQVNfQURNSU5fVVNFUlBBU1NXT1JEPSR7cGFzc3dvcmR9CkBAIC0yOTEsMzAgKzI5MSwzMCBAQAogICAgICAgICA8YXJnIGxpbmU9Ii0tYXV0aHJlYWxtbmFtZSAke2F1dGhyZWFsbW5hbWV9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHt1c2VyfSIvPgogICAgIDwvZXhlYz4KLSAgICA8ZGVsZXRlIGZpbGU9IiR7dXNlci5wYXNzd29yZC5maWxlfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+ICAgICAgICAKKyAgICA8ZGVsZXRlIGZpbGU9IiR7dXNlci5wYXNzd29yZC5maWxlfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJkZWxldGUtdXNlci1jb21tb24tdjMtaW1wbCIgZGVwZW5kcz0ic2V0T1NDb25kaXRpb25zIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbi12My1pbXBsLXVuaXgiLz4KLSAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbi12My1pbXBsLXdpbmRvd3MiLz4gICAgCisgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtdXNlci1jb21tb24tdjMtaW1wbC13aW5kb3dzIi8+CiA8L3RhcmdldD4KIAotPHRhcmdldCBuYW1lPSJkZWxldGUtdXNlci1jb21tb24tdjMtaW1wbC11bml4IiBpZj0iaXNVbml4Ij4gICAgCis8dGFyZ2V0IG5hbWU9ImRlbGV0ZS11c2VyLWNvbW1vbi12My1pbXBsLXVuaXgiIGlmPSJpc1VuaXgiPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7Z2xhc3NmaXNoLmhvbWV9L2Jpbi9hc2FkbWluIj4KICAgICAgICAgPGFyZyBsaW5lPSJkZWxldGUtZmlsZS11c2VyIi8+CiAgICAgICAgIDxhcmcgbGluZT0iLS11c2VyICR7YWRtaW4udXNlcn0gLS1ob3N0ICR7YWRtaW4uaG9zdH0gLS1wb3J0ICR7YWRtaW4ucG9ydH0gLS1lY2hvPXRydWUgLS10ZXJzZT10cnVlIi8+CiAgICAgICAgIDxhcmcgbGluZT0iLS1hdXRocmVhbG1uYW1lICR7YXV0aHJlYWxtbmFtZX0iLz4KICAgICAgICAgPGFyZyBsaW5lPSIke3VzZXJ9Ii8+Ci0gICAgPC9leGVjPiAgICAKKyAgICA8L2V4ZWM+CiA8L3RhcmdldD4KIAotPHRhcmdldCBuYW1lPSJkZWxldGUtdXNlci1jb21tb24tdjMtaW1wbC13aW5kb3dzIiBpZj0iaXNXaW5kb3dzIj4gICAgCis8dGFyZ2V0IG5hbWU9ImRlbGV0ZS11c2VyLWNvbW1vbi12My1pbXBsLXdpbmRvd3MiIGlmPSJpc1dpbmRvd3MiPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7Z2xhc3NmaXNoLmhvbWV9XGJpblxhc2FkbWluLmJhdCI+CiAgICAgICAgIDxhcmcgbGluZT0iZGVsZXRlLWZpbGUtdXNlciIvPgogICAgICAgICA8YXJnIGxpbmU9Ii0tdXNlciAke2FkbWluLnVzZXJ9IC0taG9zdCAke2FkbWluLmhvc3R9IC0tcG9ydCAke2FkbWluLnBvcnR9IC0tZWNobz10cnVlIC0tdGVyc2U9dHJ1ZSIvPgogICAgICAgICA8YXJnIGxpbmU9Ii0tYXV0aHJlYWxtbmFtZSAke2F1dGhyZWFsbW5hbWV9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHt1c2VyfSIvPgotICAgIDwvZXhlYz4gICAgCisgICAgPC9leGVjPgogPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svamRiYy9qZGJjdXNlcnR4L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svamRiYy9qZGJjdXNlcnR4L2J1aWxkLnhtbAppbmRleCAwY2FjNWZlLi40MmQ5MmRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2pkYmMvamRiY3VzZXJ0eC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9qZGJjL2pkYmN1c2VydHgvYnVpbGQueG1sCkBAIC0yMCwzNSArMjAsMzUgQEAKIDxwcm9qZWN0IG5hbWU9ImpkYmN1c2VydHgiIGRlZmF1bHQ9ImRlZmF1bHQiIGJhc2VkaXI9Ii4iPgogICAgIDxwcm9wZXJ0eSBmaWxlPSJidWlsZC5wcm9wZXJ0aWVzIi8+CiAgICAgPHByb3BlcnR5IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS1jb25maWcucHJvcGVydGllcyIvPgotICAgCi0gICAgCisKKwogICAgIDxkZXNjcmlwdGlvbj5CdWlsZHMsIHRlc3RzLCBhbmQgcnVucyB0aGUgcHJvamVjdCBKZGJjVXNlclR4IEFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KLSAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+ICAgCisgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LXRhcmdldHMueG1sIi8+Ci0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW50ZXN0LHVuZGVwbG95IiAvPiAgICAgICAgCisKKyAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJ1bnRlc3QsdW5kZXBsb3kiIC8+CiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1kZXBsb3kiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSIgLz4KLSAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZS10ZXN0cyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtaW1wbCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS0ke2RlcGxveS5wbGF0Zm9ybX0taW1wbCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQgIG5hbWU9InJ1bnRlc3QiPiAKKworICAgIDx0YXJnZXQgIG5hbWU9InJ1bnRlc3QiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bnRlc3QtaW1wbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9IiR7dGVzdG5nLnRlc3QubmFtZX0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RuZy50ZXN0Lm5hbWUiIHZhbHVlPSIke3Rlc3RuZy50ZXN0Lm5hbWV9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0bmcudGVzdGNsaWVudCIgdmFsdWU9IkpkYmNVc2VyVHhUZXN0TkciLz4KICAgICAgPC9hbnRjYWxsPgotICAgICAgICAKKwogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktJHtkZXBsb3kucGxhdGZvcm19LWltcGwiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogPC9wcm9qZWN0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2pkYmMvamRiY3VzZXJ0eC9tZXRhZGF0YS9zdW4td2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svamRiYy9qZGJjdXNlcnR4L21ldGFkYXRhL3N1bi13ZWIueG1sCmluZGV4IDY4OTA3ZjguLmYwMTlkMjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svamRiYy9qZGJjdXNlcnR4L21ldGFkYXRhL3N1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svamRiYy9qZGJjdXNlcnR4L21ldGFkYXRhL3N1bi13ZWIueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAKIC0tPgogCi08IURPQ1RZUEUgc3VuLXdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDkuMCBTZXJ2bGV0IDIuNS8vRU4iIAorPCFET0NUWVBFIHN1bi13ZWItYXBwIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEFwcGxpY2F0aW9uIFNlcnZlciA5LjAgU2VydmxldCAyLjUvL0VOIgogICAiaHR0cDovL3d3dy5zdW4uY29tL3NvZnR3YXJlL2FwcHNlcnZlci9kdGRzL3N1bi13ZWItYXBwXzJfNS0wLmR0ZCI+CiA8c3VuLXdlYi1hcHAgZXJyb3ItdXJsPSIiPgogICA8IS0tCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2pkYmMvamRiY3VzZXJ0eC9tZXRhZGF0YS93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9qZGJjL2pkYmN1c2VydHgvbWV0YWRhdGEvd2ViLnhtbAppbmRleCAwNWNjNTE1Li43YmYxNjkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2pkYmMvamRiY3VzZXJ0eC9tZXRhZGF0YS93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svamRiYy9qZGJjdXNlcnR4L21ldGFkYXRhL3dlYi54bWwKQEAgLTE3LDkgKzE3LDkgQEAKIAogLS0+CiAKLTx3ZWItYXBwIHZlcnNpb249IjIuNSIgCi0gIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIAotICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKzx3ZWItYXBwIHZlcnNpb249IjIuNSIKKyAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+TXlTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2pkYmMvamRiY3VzZXJ0eC9zcmMvamF2YS9NeVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svamRiYy9qZGJjdXNlcnR4L3NyYy9qYXZhL015U2VydmxldC5qYXZhCmluZGV4IGNiYzMxZDAuLjU2ZWJiNTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svamRiYy9qZGJjdXNlcnR4L3NyYy9qYXZhL015U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svamRiYy9qZGJjdXNlcnR4L3NyYy9qYXZhL015U2VydmxldC5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAgICAgQFJlc291cmNlKG5hbWUgPSAiamRiYy9fX2RlZmF1bHQiLCBtYXBwZWROYW1lID0gImpkYmMvX19kZWZhdWx0IikKICAgICBEYXRhU291cmNlIGRzMTsKIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBQcm9jZXNzZXMgcmVxdWVzdHMgZm9yIGJvdGggSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IGFuZCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2RzLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC02MCwxMSArNjAsMTEgQEAKICAgICAgICAgICBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAKICAgICAgICAgICB0cnkgewotCSAgICBpZiAoInVzZXJ0eCIuZXF1YWxzKHRlc3RjYXNlKSkgeworICAgICAgICBpZiAoInVzZXJ0eCIuZXF1YWxzKHRlc3RjYXNlKSkgewogICAgICAgICAgICAgICAgICB0ZXN0cyA9IGluaXRpYWxpemVVc2VyVHhUZXN0KCk7Ci0JICAgIH0gZWxzZSBpZiAoIm5vbGVhayIuZXF1YWxzKHRlc3RjYXNlKSkgeworICAgICAgICB9IGVsc2UgaWYgKCJub2xlYWsiLmVxdWFscyh0ZXN0Y2FzZSkpIHsKICAgICAgICAgICAgICAgICAgdGVzdHMgPSBpbml0aWFsaXplTGVha1Rlc3QoKTsKLQkgICAgfQorICAgICAgICB9CiAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgIEh0bWxVdGlsLnByaW50RXhjZXB0aW9uKGUsIG91dCk7CiAgICAgICAgICAgfQpAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgICAgICAgICAgICBvdXQuZmx1c2goKTsKICAgICAgICAgICAgfQotCX0KKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBTaW1wbGVUZXN0W10gaW5pdGlhbGl6ZVVzZXJUeFRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgIH0KIAogICAgIC8vIDxlZGl0b3ItZm9sZCBkZWZhdWx0c3RhdGU9ImNvbGxhcHNlZCIgZGVzYz0iSHR0cFNlcnZsZXQgbWV0aG9kcy4gQ2xpY2sgb24gdGhlICsgc2lnbiBvbiB0aGUgbGVmdCB0byBlZGl0IHRoZSBjb2RlLiI+Ci0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTEzMyw3ICsxMzMsNyBAQAogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC0xNDMsNyArMTQzLDcgQEAKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBSZXR1cm5zIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIHNlcnZsZXQuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTZXJ2bGV0SW5mbygpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svamRiYy9qZGJjdXNlcnR4L3NyYy9qYXZhL3Rlc3QvTGVha1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svamRiYy9qZGJjdXNlcnR4L3NyYy9qYXZhL3Rlc3QvTGVha1Rlc3QuamF2YQppbmRleCAxYWQzMmIzLi4wNmEwZjhmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2pkYmMvamRiY3VzZXJ0eC9zcmMvamF2YS90ZXN0L0xlYWtUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9qZGJjL2pkYmN1c2VydHgvc3JjL2phdmEvdGVzdC9MZWFrVGVzdC5qYXZhCkBAIC0zNCw3ICszNCw3IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBMZWFrVGVzdCBpbXBsZW1lbnRzIFNpbXBsZVRlc3R7CiAKLSAgICAKKwogICAgICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IHJlc3VsdHNNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+KCk7CiAKICAgICBwdWJsaWMgTWFwPFN0cmluZywgQm9vbGVhbj4gcnVuVGVzdChEYXRhU291cmNlIGRzMSwgUHJpbnRXcml0ZXIgb3V0KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2pkYmMvamRiY3VzZXJ0eC9zcmMvamF2YS91dGlsL1RhYmxlc1V0aWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svamRiYy9qZGJjdXNlcnR4L3NyYy9qYXZhL3V0aWwvVGFibGVzVXRpbC5qYXZhCmluZGV4IDY4N2VkY2EuLmJlZWUzY2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svamRiYy9qZGJjdXNlcnR4L3NyYy9qYXZhL3V0aWwvVGFibGVzVXRpbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svamRiYy9qZGJjdXNlcnR4L3NyYy9qYXZhL3V0aWwvVGFibGVzVXRpbC5qYXZhCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIGRlbGV0ZVRhYmxlcyhEYXRhU291cmNlIGRzMSwgUHJpbnRXcml0ZXIgb3V0LCBTdHJpbmcgdGFibGVOYW1lKSB7CiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9qZGJjL2pkYmN1c2VydHgvc3JjL3Rlc3QvSmRiY1VzZXJUeFRlc3RORy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9qZGJjL2pkYmN1c2VydHgvc3JjL3Rlc3QvSmRiY1VzZXJUeFRlc3RORy5qYXZhCmluZGV4IDUxMmU3N2EuLjA3M2EzZGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svamRiYy9qZGJjdXNlcnR4L3NyYy90ZXN0L0pkYmNVc2VyVHhUZXN0TkcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2pkYmMvamRiY3VzZXJ0eC9zcmMvdGVzdC9KZGJjVXNlclR4VGVzdE5HLmphdmEKQEAgLTM0LDEzICszNCwxMyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9CiAgICAgICAgICJqZGJjLWpkYmN1c2VydHgiOwotICAgCisKICAgICBwcml2YXRlIFN0cmluZyBzdHJDb250ZXh0Um9vdD0iamRiY3VzZXJ0eCI7CiAKICAgICBzdGF0aWMgU3RyaW5nIHJlc3VsdCA9ICIiOwogICAgIFN0cmluZyBob3N0PVN5c3RlbS5nZXRQcm9wZXJ0eSgiaHR0cC5ob3N0Iik7CiAgICAgU3RyaW5nIHBvcnQ9U3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKTsKLSAgICAgICAgICAgCisKICAgICAvKgogICAgICAqSWYgdHdvIGFzc2VydHMgYXJlIG1lbnRpb25lZCBpbiBvbmUgbWV0aG9kLCB0aGVuIGxhc3QgYXNzZXJ0IGlzIHRha2VuIGluCiAgICAgICp0byBhY2NvdW50LgpAQCAtNTAsNzcgKzUwLDc3IEBACiAKICAgICBAVGVzdChncm91cHMgPXsgInB1bHNlIn0gKSAvLyB0ZXN0IG1ldGhvZAogICAgIHB1YmxpYyB2b2lkIHRlc3RVc2VyVHgoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICB0cnl7CiAKLSAgICAgICAgICBTdHJpbmcgdGVzdHVybCA9ICJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArICIvIisgCi0JICAgIHN0ckNvbnRleHRSb290ICsgIi9NeVNlcnZsZXQ/dGVzdGNhc2U9dXNlcnR4IjsKLQkgIFVSTCB1cmwgPSBuZXcgVVJMKHRlc3R1cmwpOwotCSAgLy9lY2hvKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwotCSAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7Ci0JICBjb25uLmNvbm5lY3QoKTsKLQkgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOworICAgICAgICAgIFN0cmluZyB0ZXN0dXJsID0gImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgIi8iKworICAgICAgICBzdHJDb250ZXh0Um9vdCArICIvTXlTZXJ2bGV0P3Rlc3RjYXNlPXVzZXJ0eCI7CisgICAgICBVUkwgdXJsID0gbmV3IFVSTCh0ZXN0dXJsKTsKKyAgICAgIC8vZWNobygiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKKyAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOworICAgICAgY29ubi5jb25uZWN0KCk7CisgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKIAotCSAgSW5wdXRTdHJlYW0gaXMgPSBjb25uLmdldElucHV0U3RyZWFtKCk7Ci0JICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKKyAgICAgIElucHV0U3RyZWFtIGlzID0gY29ubi5nZXRJbnB1dFN0cmVhbSgpOworICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKLQkgIFN0cmluZyBsaW5lID0gbnVsbDsKLQkgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOwotCSAgU3RyaW5nIHRlc3RMaW5lID0gbnVsbDsgICAgICAgIAotCSAgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0idXNlci10eC1jb21taXQ6dHJ1ZSI7Ci0JICBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UyID0idXNlci10eC1yb2xsYmFjazp0cnVlIjsKLQkgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKLQkgICAgLy8gZWNobyhsaW5lKTsKKyAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKKyAgICAgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOworICAgICAgU3RyaW5nIHRlc3RMaW5lID0gbnVsbDsKKyAgICAgIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRSA9InVzZXItdHgtY29tbWl0OnRydWUiOworICAgICAgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFMiA9InVzZXItdHgtcm9sbGJhY2s6dHJ1ZSI7CisgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CisgICAgICAgIC8vIGVjaG8obGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoRVhQRUNURURfUkVTUE9OU0UpIT0tMSAmJgogICAgICAgICAgICAgICAgbGluZS5pbmRleE9mKEVYUEVDVEVEX1JFU1BPTlNFMikhPS0xKXsKLQkgICAgICB0ZXN0TGluZSA9IGxpbmU7Ci0JICAgICAgLy9lY2hvKHRlc3RMaW5lKTsKLQkgICAgICByZXN1bHQ9dHJ1ZTsKLQkgICAgICBicmVhazsKKyAgICAgICAgICB0ZXN0TGluZSA9IGxpbmU7CisgICAgICAgICAgLy9lY2hvKHRlc3RMaW5lKTsKKyAgICAgICAgICByZXN1bHQ9dHJ1ZTsKKyAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLQkgIH0gICAgICAgIAotICAgICAgICAgICAgICAgIAotCSAgQXNzZXJ0LmFzc2VydEVxdWFscyhyZXN1bHQsIHRydWUsIlVuZXhwZWN0ZWQgUmVzdWx0cyIpOwotICAgICAgICAKKyAgICAgIH0KKworICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhyZXN1bHQsIHRydWUsIlVuZXhwZWN0ZWQgUmVzdWx0cyIpOworCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7Ci0JICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgdGhyb3cgbmV3IEV4Y2VwdGlvbihlKTsKKyAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGUpOwogICAgICAgICB9CiAKICAgICB9CiAKICAgICBAVGVzdChncm91cHMgPXsgInB1bHNlIn0gKSAvLyB0ZXN0IG1ldGhvZAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb0xlYWsoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICB0cnl7CiAKLSAgICAgICAgICBTdHJpbmcgdGVzdHVybCA9ICJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArICIvIisgCi0JICAgIHN0ckNvbnRleHRSb290ICsgIi9NeVNlcnZsZXQ/dGVzdGNhc2U9bm9sZWFrIjsKLQkgIFVSTCB1cmwgPSBuZXcgVVJMKHRlc3R1cmwpOwotCSAgLy9lY2hvKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwotCSAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7Ci0JICBjb25uLmNvbm5lY3QoKTsKLQkgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOworICAgICAgICAgIFN0cmluZyB0ZXN0dXJsID0gImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgIi8iKworICAgICAgICBzdHJDb250ZXh0Um9vdCArICIvTXlTZXJ2bGV0P3Rlc3RjYXNlPW5vbGVhayI7CisgICAgICBVUkwgdXJsID0gbmV3IFVSTCh0ZXN0dXJsKTsKKyAgICAgIC8vZWNobygiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKKyAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOworICAgICAgY29ubi5jb25uZWN0KCk7CisgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKIAotCSAgSW5wdXRTdHJlYW0gaXMgPSBjb25uLmdldElucHV0U3RyZWFtKCk7Ci0JICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKKyAgICAgIElucHV0U3RyZWFtIGlzID0gY29ubi5nZXRJbnB1dFN0cmVhbSgpOworICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKLQkgIFN0cmluZyBsaW5lID0gbnVsbDsKLQkgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOwotCSAgU3RyaW5nIHRlc3RMaW5lID0gbnVsbDsgICAgICAgIAotCSAgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0ibm8tbGVhay10ZXN0OnRydWUiOwotCSAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewotCSAgICAvLyBlY2hvKGxpbmUpOwotICAgCSAgICBpZihsaW5lLmluZGV4T2YoRVhQRUNURURfUkVTUE9OU0UpIT0tMSl7Ci0JICAgICAgdGVzdExpbmUgPSBsaW5lOwotCSAgICAgIC8vZWNobyh0ZXN0TGluZSk7Ci0JICAgICAgcmVzdWx0PXRydWU7Ci0JICAgICAgYnJlYWs7CisgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CisgICAgICBib29sZWFuIHJlc3VsdD1mYWxzZTsKKyAgICAgIFN0cmluZyB0ZXN0TGluZSA9IG51bGw7CisgICAgICBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSJuby1sZWFrLXRlc3Q6dHJ1ZSI7CisgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CisgICAgICAgIC8vIGVjaG8obGluZSk7CisgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZihFWFBFQ1RFRF9SRVNQT05TRSkhPS0xKXsKKyAgICAgICAgICB0ZXN0TGluZSA9IGxpbmU7CisgICAgICAgICAgLy9lY2hvKHRlc3RMaW5lKTsKKyAgICAgICAgICByZXN1bHQ9dHJ1ZTsKKyAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLQkgIH0gICAgICAgIAotICAgICAgICAgICAgICAgIAotCSAgQXNzZXJ0LmFzc2VydEVxdWFscyhyZXN1bHQsIHRydWUsIlVuZXhwZWN0ZWQgUmVzdWx0cyIpOwotICAgICAgICAgICAgICAgCisgICAgICB9CisKKyAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVzdWx0LCB0cnVlLCJVbmV4cGVjdGVkIFJlc3VsdHMiKTsKKwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2ptcy9pbmplY3Rpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9qbXMvaW5qZWN0aW9uL2J1aWxkLnhtbAppbmRleCBlM2UzZTY1Li42NzVlYTc3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2ptcy9pbmplY3Rpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svam1zL2luamVjdGlvbi9idWlsZC54bWwKQEAgLTIyLDEwICsyMiwxMCBAQAogICAgIDxwcm9wZXJ0eSBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC8ke2RlcGxveS5wbGF0Zm9ybX0tY29uZmlnLnByb3BlcnRpZXMiLz4KIAogICAgIDxkZXNjcmlwdGlvbj5CdWlsZHMsIHRlc3RzLCBhbmQgcnVucyB0aGUgcHJvamVjdCBKTVMgSW5qZWN0aW9uIEFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KLSAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+ICAgCisgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LXRhcmdldHMueG1sIi8+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sYnVpbGQsZGVwbG95LHJ1bnRlc3QsdW5kZXBsb3kiIC8+ICAgIAorICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbixidWlsZCxkZXBsb3kscnVudGVzdCx1bmRlcGxveSIgLz4KICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWRlcGxveSIgZGVwZW5kcz0iYnVpbGQsZGVwbG95IiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCI+CkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIi8+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0ICBuYW1lPSJydW50ZXN0Ij4gCisgICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudGVzdC1pbXBsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9IiR7dGVzdG5nLnRlc3QubmFtZX0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0bmcudGVzdC5uYW1lIiB2YWx1ZT0iJHt0ZXN0bmcudGVzdC5uYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9qbXMvaW5qZWN0aW9uL21ldGFkYXRhL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2ptcy9pbmplY3Rpb24vbWV0YWRhdGEvd2ViLnhtbAppbmRleCA5MTE2ZGZkLi5iYmJmMTg5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2ptcy9pbmplY3Rpb24vbWV0YWRhdGEvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2ptcy9pbmplY3Rpb24vbWV0YWRhdGEvd2ViLnhtbApAQCAtMTcsOSArMTcsOSBAQAogCiAtLT4KIAotPHdlYi1hcHAgdmVyc2lvbj0iMi41IiAKLSAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgCi0gIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorPHdlYi1hcHAgdmVyc2lvbj0iMi41IgorICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9qbXMvaW5qZWN0aW9uL3NyYy9qYXZhL1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2ptcy9pbmplY3Rpb24vc3JjL2phdmEvVGVzdFNlcnZsZXQuamF2YQppbmRleCBlN2Q2ZTI1Li4zYTM0N2Y2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2ptcy9pbmplY3Rpb24vc3JjL2phdmEvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL2ptcy9pbmplY3Rpb24vc3JjL2phdmEvVGVzdFNlcnZsZXQuamF2YQpAQCAtNDUsMTAgKzQ1LDEwIEBACiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogICAgICAgICBib29sZWFuIHN0YXR1cyA9IGZhbHNlOwogCi0JICAgIHRyeSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTdHJpbmcgdGVzdGNhc2UgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigidGMiKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJ0ZXN0Y2FzZSA9ICIgKyB0ZXN0Y2FzZSk7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiVGVzdFNlcnZsZXQiKTsgIAorICAgICAgICAgICAgb3V0LnByaW50bG4oIlRlc3RTZXJ2bGV0Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiY29udGV4dFBhdGg9IiArIHJlcXVlc3QuZ2V0Q29udGV4dFBhdGggKCkpOwogCiAgICAgICAgICAgICBpZiAodGVzdGNhc2UgIT0gbnVsbCkgewpAQCAtNjAsNyArNjAsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdGgpIHsKICAgICAgICAgICAgIHRoLnByaW50U3RhY2tUcmFjZShvdXQpOwotICAgICAgICB9IGZpbmFsbHkgeyAKKyAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGlmIChzdGF0dXMpewogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJUZXN0OlBhc3MiKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC02OCwxMiArNjgsMTIgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG91dC5jbG9zZSgpOwogICAgICAgICB9Ci0gICAgfSAKKyAgICB9CiAKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgfSAKKyAgICB9CiAKICAgICBwcm90ZWN0ZWQgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svb3NnaXRlc3QvYmFzaWNvc2dpL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svb3NnaXRlc3QvYmFzaWNvc2dpL2J1aWxkLnhtbAppbmRleCBlMmU3NWMwLi5kZjVmMDI1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL29zZ2l0ZXN0L2Jhc2ljb3NnaS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9vc2dpdGVzdC9iYXNpY29zZ2kvYnVpbGQueG1sCkBAIC0yMSwxNCArMjEsMTQgQEAKICAgICA8cHJvcGVydHkgZmlsZT0iYnVpbGQucHJvcGVydGllcyIvPgogICAgIDxwcm9wZXJ0eSBmaWxlPSIke3dzLnJvb3R9L2J1aWxkLnByb3BlcnRpZXMiLz4KICAgICA8cHJvcGVydHkgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LWNvbmZpZy5wcm9wZXJ0aWVzIi8+Ci0gICAKLSAgICAKKworCiAgICAgPGRlc2NyaXB0aW9uPkJ1aWxkcywgdGVzdHMsIGFuZCBydW5zIHRoZSBwcm9qZWN0IG9zZ2l0ZXN0ICBBcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvdjMtdGFyZ2V0cy54bWwiLz4KICAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS10YXJnZXRzLnhtbCIvPgogCi0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQscnVudGVzdCIgLz4KIAogCkBAIC00MSwxMyArNDEsMTMgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICAgIAotICAgIDx0YXJnZXQgIG5hbWU9InJ1bnRlc3QiPiAKKworCisgICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudGVzdC1pbXBsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RuZy50ZXN0Lm5hbWUiIHZhbHVlPSIke3Rlc3RuZy50ZXN0Lm5hbWV9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0bmcudGVzdGNsaWVudCIgdmFsdWU9IkhlbGxvT1NHSVRlc3RORyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svb3NnaXRlc3QvYmFzaWNvc2dpL21ldGFkYXRhL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL29zZ2l0ZXN0L2Jhc2ljb3NnaS9tZXRhZGF0YS93ZWIueG1sCmluZGV4IDJjOGM0ZDUuLjk2OTcxYmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svb3NnaXRlc3QvYmFzaWNvc2dpL21ldGFkYXRhL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9vc2dpdGVzdC9iYXNpY29zZ2kvbWV0YWRhdGEvd2ViLnhtbApAQCAtMzIsNyArMzIsNyBAQAogICAgIDx1cmwtcGF0dGVybj4vc2ltcGxlc2VydmxldDwvdXJsLXBhdHRlcm4+CiAgIDwvc2VydmxldC1tYXBwaW5nPgogICA8d2VsY29tZS1maWxlLWxpc3Q+Ci0JPHdlbGNvbWUtZmlsZT5oZWxsby5qc3A8L3dlbGNvbWUtZmlsZT4KKyAgICA8d2VsY29tZS1maWxlPmhlbGxvLmpzcDwvd2VsY29tZS1maWxlPgogICAgIDwvd2VsY29tZS1maWxlLWxpc3Q+CiAgIDxsb2dpbi1jb25maWc+CiAgICAgPGF1dGgtbWV0aG9kPkJBU0lDPC9hdXRoLW1ldGhvZD4KQEAgLTQyLDYgKzQyLDYgQEAKICAgICAgIDxmb3JtLWVycm9yLXBhZ2U+PC9mb3JtLWVycm9yLXBhZ2U+CiAgICAgPC9mb3JtLWxvZ2luLWNvbmZpZz4KICAgPC9sb2dpbi1jb25maWc+Ci0gIAorCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svb3NnaXRlc3QvYmFzaWNvc2dpL3NyYy9qYXZhL0hlbGxvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9vc2dpdGVzdC9iYXNpY29zZ2kvc3JjL2phdmEvSGVsbG9TZXJ2bGV0LmphdmEKaW5kZXggN2E2NDUxYy4uZDY2ZTEyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9vc2dpdGVzdC9iYXNpY29zZ2kvc3JjL2phdmEvSGVsbG9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9vc2dpdGVzdC9iYXNpY29zZ2kvc3JjL2phdmEvSGVsbG9TZXJ2bGV0LmphdmEKQEAgLTUxLDQ1ICs1MSw0NSBAQAogICAgICAgICAgICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewogCi0JICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2bGV0IHByb2Nlc3NpbmcgZG8gZ2V0Li4iKTsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlcnZsZXQgcHJvY2Vzc2luZyBkbyBnZXQuLiIpOwogCi0JcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwotCVByaW50V3JpdGVyIHdyaXRlciA9IHJlc3BvbnNlLmdldFdyaXRlcigpOworICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICBQcmludFdyaXRlciB3cml0ZXIgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKIAotCXdyaXRlci5wcmludGxuKCI8aHRtbD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPGhlYWQ+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjx0aXRsZT5TYW1wbGUgQXBwbGljYXRpb24gU2VydmxldCBQYWdlPC90aXRsZT4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC9oZWFkPiIpOwotCXdyaXRlci5wcmludGxuKCI8Ym9keSBiZ2NvbG9yPXdoaXRlPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8aHRtbD4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPGhlYWQ+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjx0aXRsZT5TYW1wbGUgQXBwbGljYXRpb24gU2VydmxldCBQYWdlPC90aXRsZT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPC9oZWFkPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8Ym9keSBiZ2NvbG9yPXdoaXRlPiIpOwogCi0Jd3JpdGVyLnByaW50bG4oIjx0YWJsZSBib3JkZXI9XCIwXCI+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKLQl3cml0ZXIucHJpbnRsbigiPHRkPiIpOwotCS8vd3JpdGVyLnByaW50bG4oIjxpbWcgc3JjPVwiaW1hZ2VzL3RvbWNhdC5naWZcIj4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC90ZD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPHRkPiIpOwotCXdyaXRlci5wcmludGxuKCI8aDE+U2FtcGxlIEFwcGxpY2F0aW9uIFNlcnZsZXQ8L2gxPiIpOwotCXdyaXRlci5wcmludGxuKCJUaGlzIGlzIHRoZSBvdXRwdXQgb2YgYSBzZXJ2bGV0IHRoYXQgaXMgcGFydCBvZiIpOwotCXdyaXRlci5wcmludGxuKCJ0aGUgSGVsbG8sIFdvcmxkIGFwcGxpY2F0aW9uLiAgSXQgZGlzcGxheXMgdGhlIik7Ci0Jd3JpdGVyLnByaW50bG4oInJlcXVlc3QgaGVhZGVycyBmcm9tIHRoZSByZXF1ZXN0IHdlIGFyZSBjdXJyZW50bHkiKTsKLQl3cml0ZXIucHJpbnRsbigicHJvY2Vzc2luZy4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC90ZD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC90cj4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC90YWJsZT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPHRhYmxlIGJvcmRlcj1cIjBcIj4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPHRyPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8dGQ+Iik7CisgICAgLy93cml0ZXIucHJpbnRsbigiPGltZyBzcmM9XCJpbWFnZXMvdG9tY2F0LmdpZlwiPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L3RkPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8dGQ+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjxoMT5TYW1wbGUgQXBwbGljYXRpb24gU2VydmxldDwvaDE+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIlRoaXMgaXMgdGhlIG91dHB1dCBvZiBhIHNlcnZsZXQgdGhhdCBpcyBwYXJ0IG9mIik7CisgICAgd3JpdGVyLnByaW50bG4oInRoZSBIZWxsbywgV29ybGQgYXBwbGljYXRpb24uICBJdCBkaXNwbGF5cyB0aGUiKTsKKyAgICB3cml0ZXIucHJpbnRsbigicmVxdWVzdCBoZWFkZXJzIGZyb20gdGhlIHJlcXVlc3Qgd2UgYXJlIGN1cnJlbnRseSIpOworICAgIHdyaXRlci5wcmludGxuKCJwcm9jZXNzaW5nLiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L3RkPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L3RyPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L3RhYmxlPiIpOwogCi0Jd3JpdGVyLnByaW50bG4oIjx0YWJsZSBib3JkZXI9XCIwXCIgd2lkdGg9XCIxMDAlXCI+Iik7Ci0JRW51bWVyYXRpb24gbmFtZXMgPSByZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7Ci0Jd2hpbGUgKG5hbWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JICAgIFN0cmluZyBuYW1lID0gKFN0cmluZykgbmFtZXMubmV4dEVsZW1lbnQoKTsKLQkgICAgd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKLQkgICAgd3JpdGVyLnByaW50bG4oIiAgPHRoIGFsaWduPVwicmlnaHRcIj4iICsgbmFtZSArICI6PC90aD4iKTsKLQkgICAgd3JpdGVyLnByaW50bG4oIiAgPHRkPiIgKyByZXF1ZXN0LmdldEhlYWRlcihuYW1lKSArICI8L3RkPiIpOwotCSAgICB3cml0ZXIucHJpbnRsbigiPC90cj4iKTsKLQl9Ci0Jd3JpdGVyLnByaW50bG4oIjwvdGFibGU+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjx0YWJsZSBib3JkZXI9XCIwXCIgd2lkdGg9XCIxMDAlXCI+Iik7CisgICAgRW51bWVyYXRpb24gbmFtZXMgPSByZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisgICAgd2hpbGUgKG5hbWVzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZykgbmFtZXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIiAgPHRoIGFsaWduPVwicmlnaHRcIj4iICsgbmFtZSArICI6PC90aD4iKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIiAgPHRkPiIgKyByZXF1ZXN0LmdldEhlYWRlcihuYW1lKSArICI8L3RkPiIpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiPC90cj4iKTsKKyAgICB9CisgICAgd3JpdGVyLnByaW50bG4oIjwvdGFibGU+Iik7CiAKLQl3cml0ZXIucHJpbnRsbigiPC9ib2R5PiIpOwotCXdyaXRlci5wcmludGxuKCI8L2h0bWw+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjwvYm9keT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPC9odG1sPiIpOwogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL29zZ2l0ZXN0L2Jhc2ljb3NnaS9zcmMvdGVzdC9IZWxsb09TR0lUZXN0TkcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svb3NnaXRlc3QvYmFzaWNvc2dpL3NyYy90ZXN0L0hlbGxvT1NHSVRlc3RORy5qYXZhCmluZGV4IDUxZjlmYjguLmE3YjhjMWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svb3NnaXRlc3QvYmFzaWNvc2dpL3NyYy90ZXN0L0hlbGxvT1NHSVRlc3RORy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svb3NnaXRlc3QvYmFzaWNvc2dpL3NyYy90ZXN0L0hlbGxvT1NHSVRlc3RORy5qYXZhCkBAIC00OSw3ICs0OSw3IEBACiAgICAgc3RhdGljIFN0cmluZyByZXN1bHQgPSAiIjsKICAgICBTdHJpbmcgaG9zdD1TeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAuaG9zdCIpOwogICAgIFN0cmluZyBwb3J0PVN5c3RlbS5nZXRQcm9wZXJ0eSgiaHR0cC5wb3J0Iik7Ci0gICAgICAgICAgIAorCiAKICAgICBAVGVzdChncm91cHMgPXsgIm9zZ2kifSApIC8vIHRlc3QgbWV0aG9kCiAgICAgcHVibGljIHZvaWQgc2ltcGxlT1NHSURlcGxveVRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uewpAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CiAgICAgICAgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOwogICAgICAgICBTdHJpbmcgdGVzdExpbmUgPSBudWxsOwotCSAgICBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSJKU1AgVGVzdCBQYWdlIjsKKyAgICAgICAgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0iSlNQIFRlc3QgUGFnZSI7CiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZihFWFBFQ1RFRF9SRVNQT05TRSkhPS0xKXsKICAgICAgICAgICAgICAgICByZXN1bHQ9dHJ1ZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcGVyc2lzdGVuY2UvanBhaW5qZWN0ZW1mL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcGVyc2lzdGVuY2UvanBhaW5qZWN0ZW1mL2J1aWxkLnhtbAppbmRleCAxYWM4MjExLi4zYWY3MWNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3BlcnNpc3RlbmNlL2pwYWluamVjdGVtZi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9wZXJzaXN0ZW5jZS9qcGFpbmplY3RlbWYvYnVpbGQueG1sCkBAIC0yMCwzNSArMjAsMzUgQEAKIDxwcm9qZWN0IG5hbWU9ImpwYWluamVjdGVtZiIgZGVmYXVsdD0iZGVmYXVsdCIgYmFzZWRpcj0iLiI+CiAgICAgPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiLz4KICAgICA8cHJvcGVydHkgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LWNvbmZpZy5wcm9wZXJ0aWVzIi8+Ci0gICAgCisKICAgICA8ZGVzY3JpcHRpb24+QnVpbGRzLCB0ZXN0cywgYW5kIHJ1bnMgdGhlIHByb2plY3QgSmRiY1VzZXJUeCBBcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+Ci0gICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPiAgIAorICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS10YXJnZXRzLnhtbCIvPgotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxkZXBsb3kscnVudGVzdCx1bmRlcGxveSIgLz4gICAgCisKKyAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJ1bnRlc3QsdW5kZXBsb3kiIC8+CiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1kZXBsb3kiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSIgLz4KLSAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZS10ZXN0cyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtaW1wbCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS0ke2RlcGxveS5wbGF0Zm9ybX0taW1wbCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQgIG5hbWU9InJ1bnRlc3QiPiAKKworICAgIDx0YXJnZXQgIG5hbWU9InJ1bnRlc3QiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bnRlc3QtaW1wbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9IiR7dGVzdG5nLnRlc3QubmFtZX0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RuZy50ZXN0Lm5hbWUiIHZhbHVlPSIke3Rlc3RuZy50ZXN0Lm5hbWV9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0bmcudGVzdGNsaWVudCIgdmFsdWU9IkpwYUluamVjdEVNRlRlc3RORyIvPgogICAgICA8L2FudGNhbGw+Ci0gICAgICAgIAorCiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS0ke2RlcGxveS5wbGF0Zm9ybX0taW1wbCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiA8L3Byb2plY3Q+CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9wZXJzaXN0ZW5jZS9qcGFpbmplY3RlbWYvbWV0YWRhdGEvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcGVyc2lzdGVuY2UvanBhaW5qZWN0ZW1mL21ldGFkYXRhL3dlYi54bWwKaW5kZXggM2NhM2I2Mi4uMGY1NDE1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9wZXJzaXN0ZW5jZS9qcGFpbmplY3RlbWYvbWV0YWRhdGEvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3BlcnNpc3RlbmNlL2pwYWluamVjdGVtZi9tZXRhZGF0YS93ZWIueG1sCkBAIC0xNyw5ICsxNyw5IEBACiAKIC0tPgogCi08d2ViLWFwcCB2ZXJzaW9uPSIyLjUiIAotICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiAKLSAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCis8d2ViLWFwcCB2ZXJzaW9uPSIyLjUiCisgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPkpwYVNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcGVyc2lzdGVuY2UvanBhaW5qZWN0ZW1mL3NyYy9qYXZhL0RlcGFydG1lbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcGVyc2lzdGVuY2UvanBhaW5qZWN0ZW1mL3NyYy9qYXZhL0RlcGFydG1lbnQuamF2YQppbmRleCA0MmQ1YWIzLi42NTE0NGY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3BlcnNpc3RlbmNlL2pwYWluamVjdGVtZi9zcmMvamF2YS9EZXBhcnRtZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9wZXJzaXN0ZW5jZS9qcGFpbmplY3RlbWYvc3JjL2phdmEvRGVwYXJ0bWVudC5qYXZhCkBAIC02MCw3ICs2MCw3IEBACiAKICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIC8vIGdldHRlcnMgYW5kIHNldHRlcnMgZm9yIHRoZSBhc3NvY2lhdGlvbiBmaWVsZHMKLSAgICBAT25lVG9NYW55KGNhc2NhZGU9Q2FzY2FkZVR5cGUuQUxMLCBtYXBwZWRCeT0iZGVwYXJ0bWVudCIpICAgCisgICAgQE9uZVRvTWFueShjYXNjYWRlPUNhc2NhZGVUeXBlLkFMTCwgbWFwcGVkQnk9ImRlcGFydG1lbnQiKQogICAgIHB1YmxpYyBTZXQ8RW1wbG95ZWU+IGdldEVtcGxveWVlcygpIHsKICAgICAgICAgcmV0dXJuIGVtcGxveWVlczsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3BlcnNpc3RlbmNlL2pwYWluamVjdGVtZi9zcmMvamF2YS9FbXBsb3llZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9wZXJzaXN0ZW5jZS9qcGFpbmplY3RlbWYvc3JjL2phdmEvRW1wbG95ZWUuamF2YQppbmRleCA5MTU3MjkzLi5kMDViNzAxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3BlcnNpc3RlbmNlL2pwYWluamVjdGVtZi9zcmMvamF2YS9FbXBsb3llZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcGVyc2lzdGVuY2UvanBhaW5qZWN0ZW1mL3NyYy9qYXZhL0VtcGxveWVlLmphdmEKQEAgLTIyLDkgKzIyLDkgQEAKIEBUYWJsZShuYW1lPSJFTVBMT1lFRSIpCiBwdWJsaWMgY2xhc3MgRW1wbG95ZWUgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKLSAgICBwcml2YXRlIGludAkgICAgIAkgICAgIGlkOwotICAgIHByaXZhdGUgU3RyaW5nCSAgICAgZmlyc3ROYW1lOwotICAgIHByaXZhdGUgU3RyaW5nCSAgICAgbGFzdE5hbWU7CisgICAgcHJpdmF0ZSBpbnQgICAgICAgICAgICAgICAgICBpZDsKKyAgICBwcml2YXRlIFN0cmluZyAgICAgICAgIGZpcnN0TmFtZTsKKyAgICBwcml2YXRlIFN0cmluZyAgICAgICAgIGxhc3ROYW1lOwogICAgIHByaXZhdGUgRGVwYXJ0bWVudCAgICAgICBkZXBhcnRtZW50OwogCiAgICAgcHVibGljIEVtcGxveWVlKCkgewpAQCAtMzIsMTggKzMyLDE4IEBACiAKICAgICBwdWJsaWMgRW1wbG95ZWUoaW50IGlkLCBTdHJpbmcgZmlyc3ROYW1lLCBTdHJpbmcgbGFzdE5hbWUpCiAgICAgewotICAgICAgICAJdGhpcy5pZCA9IGlkOwotICAgICAgICAJdGhpcy5maXJzdE5hbWUgPSBmaXJzdE5hbWU7Ci0gICAgICAgIAl0aGlzLmxhc3ROYW1lID0gbGFzdE5hbWU7CisgICAgICAgICAgICB0aGlzLmlkID0gaWQ7CisgICAgICAgICAgICB0aGlzLmZpcnN0TmFtZSA9IGZpcnN0TmFtZTsKKyAgICAgICAgICAgIHRoaXMubGFzdE5hbWUgPSBsYXN0TmFtZTsKICAgICB9CiAKLSAgICBwdWJsaWMgRW1wbG95ZWUoaW50IGlkLCBTdHJpbmcgZmlyc3ROYW1lLCBTdHJpbmcgbGFzdE5hbWUsIAotCQkgICAgRGVwYXJ0bWVudCBkZXBhcnRtZW50KQorICAgIHB1YmxpYyBFbXBsb3llZShpbnQgaWQsIFN0cmluZyBmaXJzdE5hbWUsIFN0cmluZyBsYXN0TmFtZSwKKyAgICAgICAgICAgIERlcGFydG1lbnQgZGVwYXJ0bWVudCkKICAgICB7Ci0gICAgICAgIAl0aGlzLmlkID0gaWQ7Ci0gICAgICAgIAl0aGlzLmZpcnN0TmFtZSA9IGZpcnN0TmFtZTsKLSAgICAgICAgCXRoaXMubGFzdE5hbWUgPSBsYXN0TmFtZTsKLSAgICAgICAgCXRoaXMuZGVwYXJ0bWVudCA9IGRlcGFydG1lbnQ7CisgICAgICAgICAgICB0aGlzLmlkID0gaWQ7CisgICAgICAgICAgICB0aGlzLmZpcnN0TmFtZSA9IGZpcnN0TmFtZTsKKyAgICAgICAgICAgIHRoaXMubGFzdE5hbWUgPSBsYXN0TmFtZTsKKyAgICAgICAgICAgIHRoaXMuZGVwYXJ0bWVudCA9IGRlcGFydG1lbnQ7CiAgICAgfQogCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTAwLDkgKzEwMCw5IEBACiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuICJFbXBsb3llZSBpZD0iICsgZ2V0SWQoKSAKLSAgICAgICAgICAgICAgICArICIsIGZpcnN0TmFtZT0iICsgZ2V0Rmlyc3ROYW1lKCkgCi0gICAgICAgICAgICAgICAgKyAiLCBsYXN0TmFtZT0iICsgZ2V0TGFzdE5hbWUoKSAKKyAgICAgICAgcmV0dXJuICJFbXBsb3llZSBpZD0iICsgZ2V0SWQoKQorICAgICAgICAgICAgICAgICsgIiwgZmlyc3ROYW1lPSIgKyBnZXRGaXJzdE5hbWUoKQorICAgICAgICAgICAgICAgICsgIiwgbGFzdE5hbWU9IiArIGdldExhc3ROYW1lKCkKICAgICAgICAgICAgICAgICArICIsIGRlcGFydG1lbnQ9IiArIGdldERlcGFydG1lbnQoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcGVyc2lzdGVuY2UvanBhaW5qZWN0ZW1mL3NyYy9qYXZhL0pwYVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcGVyc2lzdGVuY2UvanBhaW5qZWN0ZW1mL3NyYy9qYXZhL0pwYVNlcnZsZXQuamF2YQppbmRleCA5ZjhmZjRmLi43M2NjZmY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3BlcnNpc3RlbmNlL2pwYWluamVjdGVtZi9zcmMvamF2YS9KcGFTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9wZXJzaXN0ZW5jZS9qcGFpbmplY3RlbWYvc3JjL2phdmEvSnBhU2VydmxldC5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAgICAgcHJpdmF0ZSBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBlbWY7CiAgICAgcHJpdmF0ZSBFbnRpdHlNYW5hZ2VyIGVtOwogICAgIHByaXZhdGUgQFJlc291cmNlIFVzZXJUcmFuc2FjdGlvbiB1dHg7Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvcGxhaW4iKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CkBAIC00NywyNSArNDcsMjUgQEAKICAgICAgICAgaWYgKHRlc3RjYXNlICE9IG51bGwpIHsKICAgICAgICAgICBKcGFUZXN0IGp0ID0gbmV3IEpwYVRlc3QoZW1mLCBlbSwgdXR4LCBvdXQpOwogCi0JICB0cnkgeworICAgICAgdHJ5IHsKIAotCSAgICBpZiAoImxsaW5pdCIuZXF1YWxzKHRlc3RjYXNlKSkgeworICAgICAgICBpZiAoImxsaW5pdCIuZXF1YWxzKHRlc3RjYXNlKSkgewogICAgICAgICAgICAgICAgICBzdGF0dXMgPSBqdC5sYXp5TG9hZGluZ0luaXQoKTsKLQkgICAgfSBlbHNlIGlmICgibGxmaW5kIi5lcXVhbHModGVzdGNhc2UpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoImxsZmluZCIuZXF1YWxzKHRlc3RjYXNlKSkgewogICAgICAgICAgICAgICAgICBzdGF0dXMgPSBqdC5sYXp5TG9hZGluZ0J5RmluZCgxKTsKLQkgICAgfSBlbHNlIGlmICgibGxxdWVyeSIuZXF1YWxzKHRlc3RjYXNlKSkgeworICAgICAgICB9IGVsc2UgaWYgKCJsbHF1ZXJ5Ii5lcXVhbHModGVzdGNhc2UpKSB7CiAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IGp0LmxhenlMb2FkaW5nQnlRdWVyeSgiQ2FybGEiKTsKLQkgICAgfSAKKyAgICAgICAgfQogICAgICAgICAgICAgaWYgKHN0YXR1cykgewotCSAgICAgIG91dC5wcmludGxuKHRlc3RjYXNlKyI6cGFzcyIpOwotCSAgICB9IGVsc2UgewotCSAgICAgIG91dC5wcmludGxuKHRlc3RjYXNlKyI6ZmFpbCIpOwotCSAgICB9Ci0JICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICBvdXQucHJpbnRsbih0ZXN0Y2FzZSsiOnBhc3MiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBvdXQucHJpbnRsbih0ZXN0Y2FzZSsiOmZhaWwiKTsKKyAgICAgICAgfQorICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic2VydmxldCB0ZXN0IGZhaWxlZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZXgpOwotCSAgfSAKLQl9CisgICAgICB9CisgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcGVyc2lzdGVuY2UvanBhaW5qZWN0ZW1mL3NyYy9qYXZhL0pwYVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcGVyc2lzdGVuY2UvanBhaW5qZWN0ZW1mL3NyYy9qYXZhL0pwYVRlc3QuamF2YQppbmRleCBjODI2N2NkLi5hMjM1YjA3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3BlcnNpc3RlbmNlL2pwYWluamVjdGVtZi9zcmMvamF2YS9KcGFUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9wZXJzaXN0ZW5jZS9qcGFpbmplY3RlbWYvc3JjL2phdmEvSnBhVGVzdC5qYXZhCkBAIC0yOSw4OCArMjksODggQEAKICAgICBwcml2YXRlIHN0YXRpYyBEZXBhcnRtZW50IGRlcHRSZWZbXSA9IG5ldyBEZXBhcnRtZW50WzJdOwogICAgIHByaXZhdGUgc3RhdGljIEVtcGxveWVlIGVtcFJlZltdID0gbmV3IEVtcGxveWVlWzVdOwogCi0gICAgcHVibGljIEpwYVRlc3QoKXt9ICAgIAorICAgIHB1YmxpYyBKcGFUZXN0KCl7fQogCi0gICAgcHVibGljIEpwYVRlc3QoRW50aXR5TWFuYWdlckZhY3RvcnkgZW1mLCBFbnRpdHlNYW5hZ2VyIGVtLCAKLQkgICAgVXNlclRyYW5zYWN0aW9uIHV0eCwgUHJpbnRXcml0ZXIgb3V0KXsKKyAgICBwdWJsaWMgSnBhVGVzdChFbnRpdHlNYW5hZ2VyRmFjdG9yeSBlbWYsIEVudGl0eU1hbmFnZXIgZW0sCisgICAgICAgIFVzZXJUcmFuc2FjdGlvbiB1dHgsIFByaW50V3JpdGVyIG91dCl7CiAgICAgICAgdGhpcy5lbWYgPSBlbWY7CiAgICAgICAgdGhpcy5lbSA9IGVtOwogICAgICAgIHRoaXMudXR4ID0gdXR4OwogICAgICAgIHRoaXMub3V0ID0gb3V0OwotICAgIH0gICAgCisgICAgfQogCiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gbGF6eUxvYWRpbmdJbml0KCl7CiAgICAgICAgYm9vbGVhbiBzdGF0dXMgPSBmYWxzZTsKICAgICAgICBvdXQucHJpbnRsbigiLS0tLS1sYXplTG9hZGluZ0luaXQoKS0tLS0tLS0tLSIpOwotICAgICAgIHRyeSB7ICAgICAgICAKLQkgZGVwdFJlZlswXSA9IG5ldyBEZXBhcnRtZW50KDEsICJFbmdpbmVlcmluZyIpOwotCSBkZXB0UmVmWzFdID0gbmV3IERlcGFydG1lbnQoMiwgIk1hcmtldGluZyIpOwotCSB1dHguYmVnaW4oKTsKLQkgZW0uam9pblRyYW5zYWN0aW9uKCk7IAotCSBmb3IgKGludCBpPTA7IGkgPCAyOyBpKysgKSB7Ci0JICAgZW0ucGVyc2lzdChkZXB0UmVmW2ldKTsKLQkgfQotCSB1dHguY29tbWl0KCk7CisgICAgICAgdHJ5IHsKKyAgICAgZGVwdFJlZlswXSA9IG5ldyBEZXBhcnRtZW50KDEsICJFbmdpbmVlcmluZyIpOworICAgICBkZXB0UmVmWzFdID0gbmV3IERlcGFydG1lbnQoMiwgIk1hcmtldGluZyIpOworICAgICB1dHguYmVnaW4oKTsKKyAgICAgZW0uam9pblRyYW5zYWN0aW9uKCk7CisgICAgIGZvciAoaW50IGk9MDsgaSA8IDI7IGkrKyApIHsKKyAgICAgICBlbS5wZXJzaXN0KGRlcHRSZWZbaV0pOworICAgICB9CisgICAgIHV0eC5jb21taXQoKTsKIAotCSBlbXBSZWZbMF0gPSBuZXcgRW1wbG95ZWUoMSwgIkFsYW4iLCAiRnJlY2hldHRlIiwgZGVwdFJlZlswXSk7Ci0JIGVtcFJlZlsxXSA9IG5ldyBFbXBsb3llZSgyLCAiQXJ0aHVyIiwgIldlc2xleSIsIGRlcHRSZWZbMF0pOwotCSBlbXBSZWZbMl0gPSBuZXcgRW1wbG95ZWUoMywgIkFiZSIsICJXaGl0ZSIsIGRlcHRSZWZbMF0pOwotCSBlbXBSZWZbM10gPSBuZXcgRW1wbG95ZWUoNCwgIlBhdWwiLCAiSGlueiIsIGRlcHRSZWZbMV0pOwotCSBlbXBSZWZbNF0gPSBuZXcgRW1wbG95ZWUoNSwgIkNhcmxhIiwgIkNhbHJzb24iLCBkZXB0UmVmWzFdKTsKLQkgdXR4LmJlZ2luKCk7Ci0JIGVtLmpvaW5UcmFuc2FjdGlvbigpOyAKLQkgZm9yIChpbnQgaT0wOyBpPDU7IGkrKyApIHsKLQkgICBlbS5wZXJzaXN0KGVtcFJlZltpXSk7Ci0JIH0KLQkgdXR4LmNvbW1pdCgpOwotCSBzdGF0dXMgPSB0cnVlOworICAgICBlbXBSZWZbMF0gPSBuZXcgRW1wbG95ZWUoMSwgIkFsYW4iLCAiRnJlY2hldHRlIiwgZGVwdFJlZlswXSk7CisgICAgIGVtcFJlZlsxXSA9IG5ldyBFbXBsb3llZSgyLCAiQXJ0aHVyIiwgIldlc2xleSIsIGRlcHRSZWZbMF0pOworICAgICBlbXBSZWZbMl0gPSBuZXcgRW1wbG95ZWUoMywgIkFiZSIsICJXaGl0ZSIsIGRlcHRSZWZbMF0pOworICAgICBlbXBSZWZbM10gPSBuZXcgRW1wbG95ZWUoNCwgIlBhdWwiLCAiSGlueiIsIGRlcHRSZWZbMV0pOworICAgICBlbXBSZWZbNF0gPSBuZXcgRW1wbG95ZWUoNSwgIkNhcmxhIiwgIkNhbHJzb24iLCBkZXB0UmVmWzFdKTsKKyAgICAgdXR4LmJlZ2luKCk7CisgICAgIGVtLmpvaW5UcmFuc2FjdGlvbigpOworICAgICBmb3IgKGludCBpPTA7IGk8NTsgaSsrICkgeworICAgICAgIGVtLnBlcnNpc3QoZW1wUmVmW2ldKTsKKyAgICAgfQorICAgICB1dHguY29tbWl0KCk7CisgICAgIHN0YXR1cyA9IHRydWU7CiAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpewotCSBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgfQogICAgICAgIG91dC5wcmludGxuKCItLS0tLXN0YXR1cyA9ICIgKyBzdGF0dXMgKyAiLS0tLS0tLS0tIik7CiAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBsYXp5TG9hZGluZ0J5RmluZChpbnQgZW1wbG95ZWVJRCkgewotICAgICAgICAKKwogICAgICAgYm9vbGVhbiBzdGF0dXM9dHJ1ZTsKICAgICAgIG91dC5wcmludGxuKCItLS0tLS0tLS0tLS1sYXp5TG9hZGluZ0FmdGVyRmluZCAtLS0tLS0tLS0tLSIpOwogICAgICAgb3V0LnByaW50bG4oImVtcGxveWVlSUQgPSAiKyBlbXBsb3llZUlEKTsKICAgICAgIEVtcGxveWVlIGVtcCA9IGVtLmZpbmQoRW1wbG95ZWUuY2xhc3MsIGVtcGxveWVlSUQpOwogCi0gICAgICBvdXQucHJpbnRsbigiZm91bmQ6IGVtcC5pZD0iICsgZW1wLmdldElkKCkpOyAgICAgICAgCisgICAgICBvdXQucHJpbnRsbigiZm91bmQ6IGVtcC5pZD0iICsgZW1wLmdldElkKCkpOwogCiAgICAgICB0cnkgewotCS8vIDEuIGdldCBEZXBhcnRtZW50IGJlZm9yZSBsb2FkaW5nCi0JRGVwYXJ0bWVudCBkZXB0QkwgPSBlbXAuZ2V0RGVwYXJ0bWVudE5vV2VhdmluZygpOwotCW91dC5wcmludGxuKCIxLiBiZWZvcmUgbG9hZGluZzogZGVwdEJMPSIrZGVwdEJMKTsKLQlTdHJpbmcgZGVwdE5hbWVCTCA9IG51bGw7Ci0JaWYgKGRlcHRCTCAhPSBudWxsKSB7Ci0JICBkZXB0TmFtZUJMID0gZGVwdEJMLmdldE5hbWUoKTsKLQkgIG91dC5wcmludGxuKCJkZXB0TmFtZUJMPSIrZGVwdE5hbWVCTCk7Ci0JfQotCS8vIGFzc2VydCBkZXB0QkwgPT0gbnVsbDsKKyAgICAvLyAxLiBnZXQgRGVwYXJ0bWVudCBiZWZvcmUgbG9hZGluZworICAgIERlcGFydG1lbnQgZGVwdEJMID0gZW1wLmdldERlcGFydG1lbnROb1dlYXZpbmcoKTsKKyAgICBvdXQucHJpbnRsbigiMS4gYmVmb3JlIGxvYWRpbmc6IGRlcHRCTD0iK2RlcHRCTCk7CisgICAgU3RyaW5nIGRlcHROYW1lQkwgPSBudWxsOworICAgIGlmIChkZXB0QkwgIT0gbnVsbCkgeworICAgICAgZGVwdE5hbWVCTCA9IGRlcHRCTC5nZXROYW1lKCk7CisgICAgICBvdXQucHJpbnRsbigiZGVwdE5hbWVCTD0iK2RlcHROYW1lQkwpOworICAgIH0KKyAgICAvLyBhc3NlcnQgZGVwdEJMID09IG51bGw7CiAgICAgICAgIGlmIChkZXB0QkwgIT0gbnVsbCkgewogICAgICAgICAgICAgc3RhdHVzID0gZmFsc2U7Ci0JfQorICAgIH0KIAotCS8vIDIuIGxvYWRpbmcKLQlTdHJpbmcgZGVwdE5hbWUgPSBlbXAuZ2V0RGVwYXJ0bWVudCgpLmdldE5hbWUoKTsgCi0Jb3V0LnByaW50bG4oIjIuIGxvYWRpbmcsIGRlcHROYW1lID0gIiArIGRlcHROYW1lKTsKKyAgICAvLyAyLiBsb2FkaW5nCisgICAgU3RyaW5nIGRlcHROYW1lID0gZW1wLmdldERlcGFydG1lbnQoKS5nZXROYW1lKCk7CisgICAgb3V0LnByaW50bG4oIjIuIGxvYWRpbmcsIGRlcHROYW1lID0gIiArIGRlcHROYW1lKTsKIAotCS8vIDMuIGdldCBEZXBhcnRtZW50IGFmdGVyIGxvYWRpbmcKLQlEZXBhcnRtZW50IGRlcHRBTCA9IGVtcC5nZXREZXBhcnRtZW50Tm9XZWF2aW5nKCk7Ci0Jb3V0LnByaW50bG4oIjMuIGFmdGVyIGxvYWRpbmc6IGRlcHRBTD0iK2RlcHRBTCk7Ci0JU3RyaW5nIGRlcHROYW1lQUwgPSBkZXB0QUwuZ2V0TmFtZSgpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiZGVwdE5hbWVBTD0iK2RlcHROYW1lQUwpOwotCS8vICAgYXNzZXJ0IGRlcHRBTCAhPSBudWxsCi0JLy8gICBhc3NlcnQgZGVwdEFMLmdldE5hbWUgPT0gZGVwdE5hbWU7IAorICAgIC8vIDMuIGdldCBEZXBhcnRtZW50IGFmdGVyIGxvYWRpbmcKKyAgICBEZXBhcnRtZW50IGRlcHRBTCA9IGVtcC5nZXREZXBhcnRtZW50Tm9XZWF2aW5nKCk7CisgICAgb3V0LnByaW50bG4oIjMuIGFmdGVyIGxvYWRpbmc6IGRlcHRBTD0iK2RlcHRBTCk7CisgICAgU3RyaW5nIGRlcHROYW1lQUwgPSBkZXB0QUwuZ2V0TmFtZSgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZGVwdE5hbWVBTD0iK2RlcHROYW1lQUwpOworICAgIC8vICAgYXNzZXJ0IGRlcHRBTCAhPSBudWxsCisgICAgLy8gICBhc3NlcnQgZGVwdEFMLmdldE5hbWUgPT0gZGVwdE5hbWU7CiAgICAgICAgIGlmIChkZXB0QUwgPT0gbnVsbCB8fCAgZGVwdE5hbWVBTCAhPSBkZXB0TmFtZSkgewotCSAgICBzdGF0dXMgPSBmYWxzZTsKLQl9CisgICAgICAgIHN0YXR1cyA9IGZhbHNlOworICAgIH0KICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KXsKLQlzdGF0dXMgPSBmYWxzZTsKLQlleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICBzdGF0dXMgPSBmYWxzZTsKKyAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgIH0KIAogICAgICAgb3V0LnByaW50bG4oIi0tLS0tc3RhdHVzID0gIiArIHN0YXR1cyArICItLS0tLS0tLS0iKTsKQEAgLTExOCw0OCArMTE4LDQ4IEBACiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gbGF6eUxvYWRpbmdCeVF1ZXJ5KFN0cmluZyBmTmFtZSkgewotICAgICAgICAKKwogICAgICAgYm9vbGVhbiBzdGF0dXM9dHJ1ZTsKICAgICAgIG91dC5wcmludGxuKCItLS0tLS0tLS0tLS1sYXp5TG9hZGluZ0J5UXVlcnkgLS0tLS0tLS0tLS0iKTsKICAgICAgIG91dC5wcmludGxuKCJmTmFtZSA9ICIrIGZOYW1lKTsKICAgICAgIFF1ZXJ5IHF1ZXJ5ID0gZW0uY3JlYXRlUXVlcnkoCi0JIlNFTEVDVCBlIEZST00gRW1wbG95ZWUgZSBXSEVSRSBlLmZpcnN0TmFtZSBsaWtlIDpmaXJzdE5hbWUiKQotCS5zZXRQYXJhbWV0ZXIoImZpcnN0TmFtZSIsIGZOYW1lKTs7CisgICAgIlNFTEVDVCBlIEZST00gRW1wbG95ZWUgZSBXSEVSRSBlLmZpcnN0TmFtZSBsaWtlIDpmaXJzdE5hbWUiKQorICAgIC5zZXRQYXJhbWV0ZXIoImZpcnN0TmFtZSIsIGZOYW1lKTs7CiAgICAgICBFbXBsb3llZSBlbXAgPSAoRW1wbG95ZWUpIHF1ZXJ5LmdldFNpbmdsZVJlc3VsdCgpOwotICAgIAorCiAgICAgICBvdXQucHJpbnRsbigicXVlcmllZDogZW1wLmZpcnN0TmFtZT0iICsgZW1wLmdldEZpcnN0TmFtZSgpKTsKIAogICAgICAgdHJ5IHsKLQkvLyAxLiBnZXQgRGVwYXJ0bWVudCBiZWZvcmUgbG9hZGluZwotCURlcGFydG1lbnQgZGVwdEJMID0gZW1wLmdldERlcGFydG1lbnROb1dlYXZpbmcoKTsKLQlvdXQucHJpbnRsbigiMS4gYmVmb3JlIGxvYWRpbmc6IGRlcHRCTD0iK2RlcHRCTCk7Ci0JU3RyaW5nIGRlcHROYW1lQkwgPSBudWxsOwotCWlmIChkZXB0QkwgIT0gbnVsbCkgewotCSAgZGVwdE5hbWVCTCA9IGRlcHRCTC5nZXROYW1lKCk7Ci0JICBvdXQucHJpbnRsbigiZGVwdE5hbWVCTD0iK2RlcHROYW1lQkwpOwotCX0KLQkvLyBhc3NlcnQgZGVwdEJMID09IG51bGw7CisgICAgLy8gMS4gZ2V0IERlcGFydG1lbnQgYmVmb3JlIGxvYWRpbmcKKyAgICBEZXBhcnRtZW50IGRlcHRCTCA9IGVtcC5nZXREZXBhcnRtZW50Tm9XZWF2aW5nKCk7CisgICAgb3V0LnByaW50bG4oIjEuIGJlZm9yZSBsb2FkaW5nOiBkZXB0Qkw9IitkZXB0QkwpOworICAgIFN0cmluZyBkZXB0TmFtZUJMID0gbnVsbDsKKyAgICBpZiAoZGVwdEJMICE9IG51bGwpIHsKKyAgICAgIGRlcHROYW1lQkwgPSBkZXB0QkwuZ2V0TmFtZSgpOworICAgICAgb3V0LnByaW50bG4oImRlcHROYW1lQkw9IitkZXB0TmFtZUJMKTsKKyAgICB9CisgICAgLy8gYXNzZXJ0IGRlcHRCTCA9PSBudWxsOwogICAgICAgICBpZiAoZGVwdEJMICE9IG51bGwpIHsKICAgICAgICAgICAgIHN0YXR1cyA9IGZhbHNlOwotCX0KKyAgICB9CiAKLQkvLyAyLiBsb2FkaW5nCi0JU3RyaW5nIGRlcHROYW1lID0gZW1wLmdldERlcGFydG1lbnQoKS5nZXROYW1lKCk7IAotCVN5c3RlbS5vdXQucHJpbnRsbigiMi4gbG9hZGluZywgZGVwdE5hbWUgPSAiICsgZGVwdE5hbWUpOworICAgIC8vIDIuIGxvYWRpbmcKKyAgICBTdHJpbmcgZGVwdE5hbWUgPSBlbXAuZ2V0RGVwYXJ0bWVudCgpLmdldE5hbWUoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjIuIGxvYWRpbmcsIGRlcHROYW1lID0gIiArIGRlcHROYW1lKTsKIAotCS8vIDMuIGdldCBEZXBhcnRtZW50IGFmdGVyIGxvYWRpbmcKLQlEZXBhcnRtZW50IGRlcHRBTCA9IGVtcC5nZXREZXBhcnRtZW50Tm9XZWF2aW5nKCk7Ci0Jb3V0LnByaW50bG4oIjMuIGFmdGVyIGxvYWRpbmc6IGRlcHRBTD0iK2RlcHRBTCk7Ci0JU3RyaW5nIGRlcHROYW1lQUwgPSBkZXB0QUwuZ2V0TmFtZSgpOwotCW91dC5wcmludGxuKCJkZXB0TmFtZUFMPSIrZGVwdE5hbWVBTCk7Ci0JLy8gICBhc3NlcnQgZGVwdEFMICE9IG51bGwKLQkvLyAgIGFzc2VydCBkZXB0QUwuZ2V0TmFtZSA9PSBkZXB0TmFtZTsgCisgICAgLy8gMy4gZ2V0IERlcGFydG1lbnQgYWZ0ZXIgbG9hZGluZworICAgIERlcGFydG1lbnQgZGVwdEFMID0gZW1wLmdldERlcGFydG1lbnROb1dlYXZpbmcoKTsKKyAgICBvdXQucHJpbnRsbigiMy4gYWZ0ZXIgbG9hZGluZzogZGVwdEFMPSIrZGVwdEFMKTsKKyAgICBTdHJpbmcgZGVwdE5hbWVBTCA9IGRlcHRBTC5nZXROYW1lKCk7CisgICAgb3V0LnByaW50bG4oImRlcHROYW1lQUw9IitkZXB0TmFtZUFMKTsKKyAgICAvLyAgIGFzc2VydCBkZXB0QUwgIT0gbnVsbAorICAgIC8vICAgYXNzZXJ0IGRlcHRBTC5nZXROYW1lID09IGRlcHROYW1lOwogICAgICAgICBpZiAoZGVwdEFMID09IG51bGwgfHwgIGRlcHROYW1lQUwgIT0gZGVwdE5hbWUpIHsKLQkgICAgc3RhdHVzID0gZmFsc2U7Ci0JfQorICAgICAgICBzdGF0dXMgPSBmYWxzZTsKKyAgICB9CiAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCl7Ci0Jc3RhdHVzID0gZmFsc2U7Ci0JZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgc3RhdHVzID0gZmFsc2U7CisgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICB9CiAgICAgICBvdXQucHJpbnRsbigiLS0tLS1zdGF0dXMgPSAiICsgc3RhdHVzICsgIi0tLS0tLS0tLSIpOwogICAgICAgcmV0dXJuIHN0YXR1czsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcGVyc2lzdGVuY2UvanBhaW5qZWN0ZW1mL3NyYy90ZXN0L0pwYUluamVjdEVNRlRlc3RORy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9wZXJzaXN0ZW5jZS9qcGFpbmplY3RlbWYvc3JjL3Rlc3QvSnBhSW5qZWN0RU1GVGVzdE5HLmphdmEKaW5kZXggYzlmMjEzZC4uOTM3NjU0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9wZXJzaXN0ZW5jZS9qcGFpbmplY3RlbWYvc3JjL3Rlc3QvSnBhSW5qZWN0RU1GVGVzdE5HLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9wZXJzaXN0ZW5jZS9qcGFpbmplY3RlbWYvc3JjL3Rlc3QvSnBhSW5qZWN0RU1GVGVzdE5HLmphdmEKQEAgLTMzLDMzICszMywzMyBAQAogICAgIHN0YXRpYyBTdHJpbmcgcmVzdWx0ID0gIiI7CiAgICAgU3RyaW5nIGhvc3Q9U3lzdGVtLmdldFByb3BlcnR5KCJodHRwLmhvc3QiKTsKICAgICBTdHJpbmcgcG9ydD1TeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucG9ydCIpOwotICAgICAgICAgICAKKwogCiAgICAgQFRlc3QoZ3JvdXBzID0geyAiaW5pdCIgfSkKICAgICBwdWJsaWMgdm9pZCBwZXJzaXN0V2l0aEluamVjdEVNRigpIHRocm93cyBFeGNlcHRpb257Ci0gICAgICAgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOyAgICAgICAKKyAgICAgICAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7CiAKICAgICAgICAgdHJ5ewogCiAgICAgICAgICAgcmVzdWx0ID0gdGVzdCgibGxpbml0Iik7Ci0JICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHJlc3VsdCwgdHJ1ZSwiVW5leHBlY3RlZCBSZXN1bHRzIik7CisgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHJlc3VsdCwgdHJ1ZSwiVW5leHBlY3RlZCBSZXN1bHRzIik7CiAKICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKIAotCSAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgIHRocm93IG5ldyBFeGNlcHRpb24oZSk7CisgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihlKTsKIAogICAgICAgICB9CiAgICAgfQogCiAgICAgQFRlc3QoZGVwZW5kc09uR3JvdXBzID0geyAiaW5pdC4qIiB9KQogICAgIHB1YmxpYyB2b2lkIGxhenlMb2FkaW5nQnlRdWVyeSgpIHRocm93cyBFeGNlcHRpb257Ci0gICAgICAgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOyAgICAgICAgCisgICAgICAgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOwogCiAgICAgICAgIHRyeXsKIAotICAgICAgICAgICAgcmVzdWx0ID0gdGVzdCgibGxxdWVyeSIpOyAgICAgICAgICAgICAgIAotICAJICAgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVzdWx0LCB0cnVlLCJVbmV4cGVjdGVkIFJlc3VsdHMiKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHRlc3QoImxscXVlcnkiKTsKKyAgICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHJlc3VsdCwgdHJ1ZSwiVW5leHBlY3RlZCBSZXN1bHRzIik7CiAKICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CkBAIC03MSw3ICs3MSw3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIHRlc3QoU3RyaW5nIGMpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSBjICsgIjpwYXNzIjsKICAgICAgICAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7Ci0gICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIHN0ckNvbnRleHRSb290ICsgCisgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIHN0ckNvbnRleHRSb290ICsKICAgICAgICAgICAgICAgICAgICAgICIvanBhP3Rlc3RjYXNlPSIgKyBjOwogICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigidXJsPSIrdXJsKTsKIApAQCAtODAsMTkgKzgwLDE5IEBACiAgICAgICAgIGludCBjb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgaWYgKGNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVuZXhwZWN0ZWQgcmV0dXJuIGNvZGU6ICIgKyBjb2RlKTsKLQl9IGVsc2UgeworICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwotCSAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0JICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKLQkgICAgICBpZiAobGluZS5jb250YWlucyhFWFBFQ1RFRF9SRVNQT05TRSkpIHsKKyAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOworICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CisgICAgICAgICAgaWYgKGxpbmUuY29udGFpbnMoRVhQRUNURURfUkVTUE9OU0UpKSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLQkJYnJlYWs7Ci0JICAgICAgfQotCSAgICB9Ci0JICAgIAotICAgICAgICB9ICAgIAotCXJldHVybiByZXN1bHQ7CisgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBlY2hvKFN0cmluZyBtc2cpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcGVyc2lzdGVuY2UvanBhdmFsaWRhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3BlcnNpc3RlbmNlL2pwYXZhbGlkYXRpb24vYnVpbGQueG1sCmluZGV4IGFjNzEzNGMuLjc5NDA5MzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcGVyc2lzdGVuY2UvanBhdmFsaWRhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9wZXJzaXN0ZW5jZS9qcGF2YWxpZGF0aW9uL2J1aWxkLnhtbApAQCAtMjAsMzUgKzIwLDM1IEBACiA8cHJvamVjdCBuYW1lPSJqcGFpbmplY3RlbWYiIGRlZmF1bHQ9ImRlZmF1bHQiIGJhc2VkaXI9Ii4iPgogICAgIDxwcm9wZXJ0eSBmaWxlPSJidWlsZC5wcm9wZXJ0aWVzIi8+CiAgICAgPHByb3BlcnR5IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS1jb25maWcucHJvcGVydGllcyIvPgotICAgIAorCiAgICAgPGRlc2NyaXB0aW9uPkJ1aWxkcywgdGVzdHMsIGFuZCBydW5zIHRoZSBwcm9qZWN0IEpkYmNVc2VyVHggQXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgotICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4gICAKKyAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC8ke2RlcGxveS5wbGF0Zm9ybX0tdGFyZ2V0cy54bWwiLz4KLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJ1bnRlc3QsdW5kZXBsb3kiIC8+ICAgIAorCisgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW50ZXN0LHVuZGVwbG95IiAvPgogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtZGVwbG95IiBkZXBlbmRzPSJidWlsZCxkZXBsb3kiIC8+Ci0gICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUtdGVzdHMiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWltcGwiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktJHtkZXBsb3kucGxhdGZvcm19LWltcGwiLz4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICA8dGFyZ2V0ICBuYW1lPSJydW50ZXN0Ij4gCisKKyAgICA8dGFyZ2V0ICBuYW1lPSJydW50ZXN0Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW50ZXN0LWltcGwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIke3Rlc3RuZy50ZXN0Lm5hbWV9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0bmcudGVzdC5uYW1lIiB2YWx1ZT0iJHt0ZXN0bmcudGVzdC5uYW1lfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0idGVzdG5nLnRlc3RjbGllbnQiIHZhbHVlPSJKcGFWYWxpZGF0aW9uVGVzdE5HIi8+CiAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAgCisKICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKIDwvcHJvamVjdD4KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3BlcnNpc3RlbmNlL2pwYXZhbGlkYXRpb24vbWV0YWRhdGEvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcGVyc2lzdGVuY2UvanBhdmFsaWRhdGlvbi9tZXRhZGF0YS93ZWIueG1sCmluZGV4IGM5YmU2YzMuLjZiNGMwMjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcGVyc2lzdGVuY2UvanBhdmFsaWRhdGlvbi9tZXRhZGF0YS93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcGVyc2lzdGVuY2UvanBhdmFsaWRhdGlvbi9tZXRhZGF0YS93ZWIueG1sCkBAIC0xNyw5ICsxNyw5IEBACiAKIC0tPgogCi08d2ViLWFwcCB2ZXJzaW9uPSIyLjUiIAotICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiAKLSAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCis8d2ViLWFwcCB2ZXJzaW9uPSIyLjUiCisgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3BlcnNpc3RlbmNlL2pwYXZhbGlkYXRpb24vc3JjL2phdmEvRW1wbG95ZWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcGVyc2lzdGVuY2UvanBhdmFsaWRhdGlvbi9zcmMvamF2YS9FbXBsb3llZS5qYXZhCmluZGV4IDMyMzBkZDcuLjJlOGUzNjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcGVyc2lzdGVuY2UvanBhdmFsaWRhdGlvbi9zcmMvamF2YS9FbXBsb3llZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcGVyc2lzdGVuY2UvanBhdmFsaWRhdGlvbi9zcmMvamF2YS9FbXBsb3llZS5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBAVGFibGUobmFtZT0iQlZfRU1QTCIpCiBwdWJsaWMgY2xhc3MgRW1wbG95ZWUgewogCi0gICAgcHJpdmF0ZSBpbnQJICAgICBpZDsKKyAgICBwcml2YXRlIGludCAgICAgICAgIGlkOwogICAgIHByaXZhdGUgU3RyaW5nICBuYW1lOwogICAgIHByaXZhdGUgbG9uZyBzYWxhcnk7CiAgICAgcHJpdmF0ZSBDb2xsZWN0aW9uPFByb2plY3Q+IHByb2plY3RzOwpAQCAtOTUsNyArOTUsNyBAQAogICAgIH0KIAogICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgQE92ZXJyaWRlIAorICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgIHJldHVybiAiRW1wbG95ZWUge0lkOiIgKyAgaWQgKyAiIG5hbWU6IiArIG5hbWUgKyAifSI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9wZXJzaXN0ZW5jZS9qcGF2YWxpZGF0aW9uL3NyYy9qYXZhL1Byb2plY3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcGVyc2lzdGVuY2UvanBhdmFsaWRhdGlvbi9zcmMvamF2YS9Qcm9qZWN0LmphdmEKaW5kZXggYjIxMDk0Yi4uNGMyZDU4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9wZXJzaXN0ZW5jZS9qcGF2YWxpZGF0aW9uL3NyYy9qYXZhL1Byb2plY3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3BlcnNpc3RlbmNlL2pwYXZhbGlkYXRpb24vc3JjL2phdmEvUHJvamVjdC5qYXZhCkBAIC0yNCw4ICsyNCw4IEBACiBAVGFibGUobmFtZT0iQlZfUFJPSiIpCiBwdWJsaWMgY2xhc3MgUHJvamVjdCB7CiAKLSAgICBwcml2YXRlIGludAkgICAgaWQ7Ci0gICAgcHJpdmF0ZSBTdHJpbmcJbmFtZTsKKyAgICBwcml2YXRlIGludCAgICAgICAgaWQ7CisgICAgcHJpdmF0ZSBTdHJpbmcgICAgbmFtZTsKICAgICBwcml2YXRlIENvbGxlY3Rpb248RW1wbG95ZWU+IGVtcGxveWVlczsKIAogICAgIHB1YmxpYyBQcm9qZWN0KCkge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcGVyc2lzdGVuY2UvanBhdmFsaWRhdGlvbi9zcmMvamF2YS9UZXN0RUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3BlcnNpc3RlbmNlL2pwYXZhbGlkYXRpb24vc3JjL2phdmEvVGVzdEVKQi5qYXZhCmluZGV4IDJkOGMyZjkuLmE5NTA1MmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcGVyc2lzdGVuY2UvanBhdmFsaWRhdGlvbi9zcmMvamF2YS9UZXN0RUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9wZXJzaXN0ZW5jZS9qcGF2YWxpZGF0aW9uL3NyYy9qYXZhL1Rlc3RFSkIuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiBAU3RhdGVsZXNzCiBwdWJsaWMgY2xhc3MgVGVzdEVKQiB7Ci0gICAgCisKICAgICBAUGVyc2lzdGVuY2VDb250ZXh0IEVudGl0eU1hbmFnZXIgZW07CiAKICAgICBwdWJsaWMgVGVzdEVKQigpIHsKQEAgLTMyLDI2ICszMiwyNiBAQAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgewogICAgICAgICBib29sZWFuIHBhc3M9IGZhbHNlOwogCi0JRW1wbG95ZWUgZTEgPSBuZXcgRW1wbG95ZWUoMSwgImVtcDEiLCAxMDAwKTsKLQlFbXBsb3llZSBlMiA9IG5ldyBFbXBsb3llZSgyLCAiZW1wMiIsIDIwMDApOwotCUVtcGxveWVlIGUzID0gbmV3IEVtcGxveWVlKDMsICJlbXAzIiwgMzAwMCk7Ci0JRW1wbG95ZWUgZTQgPSBuZXcgRW1wbG95ZWUoNCwgImVtcDQiLCA0MDAwKTsKLQlQcm9qZWN0IHAxID0gbmV3IFByb2plY3QoMSwgInByb2oxIik7Ci0JQ29sbGVjdGlvbjxFbXBsb3llZT4gZW1wbG95ZWVzID0gbmV3IEFycmF5TGlzdDxFbXBsb3llZT4oKTsKLQllbXBsb3llZXMuYWRkKGUxKTsKLQllbXBsb3llZXMuYWRkKGUyKTsKLQllbXBsb3llZXMuYWRkKGUzKTsKLQllbXBsb3llZXMuYWRkKGU0KTsKLQlwMS5zZXRFbXBsb3llZXMoZW1wbG95ZWVzKTsKLSAgICAgCi0JLy8gUGVyc2lzdCBDYXNjYWRlIHdpdGhvdXQgbG9uZyBuYW1lCi0JdHJ5IHsKLQkgIFN5c3RlbS5vdXQucHJpbnRsbigiMS4gUGVyc2lzdGluZyBwcm9qZWN0Li4uLiIpOwotCSAgZW0ucGVyc2lzdChwMSk7CisgICAgRW1wbG95ZWUgZTEgPSBuZXcgRW1wbG95ZWUoMSwgImVtcDEiLCAxMDAwKTsKKyAgICBFbXBsb3llZSBlMiA9IG5ldyBFbXBsb3llZSgyLCAiZW1wMiIsIDIwMDApOworICAgIEVtcGxveWVlIGUzID0gbmV3IEVtcGxveWVlKDMsICJlbXAzIiwgMzAwMCk7CisgICAgRW1wbG95ZWUgZTQgPSBuZXcgRW1wbG95ZWUoNCwgImVtcDQiLCA0MDAwKTsKKyAgICBQcm9qZWN0IHAxID0gbmV3IFByb2plY3QoMSwgInByb2oxIik7CisgICAgQ29sbGVjdGlvbjxFbXBsb3llZT4gZW1wbG95ZWVzID0gbmV3IEFycmF5TGlzdDxFbXBsb3llZT4oKTsKKyAgICBlbXBsb3llZXMuYWRkKGUxKTsKKyAgICBlbXBsb3llZXMuYWRkKGUyKTsKKyAgICBlbXBsb3llZXMuYWRkKGUzKTsKKyAgICBlbXBsb3llZXMuYWRkKGU0KTsKKyAgICBwMS5zZXRFbXBsb3llZXMoZW1wbG95ZWVzKTsKKworICAgIC8vIFBlcnNpc3QgQ2FzY2FkZSB3aXRob3V0IGxvbmcgbmFtZQorICAgIHRyeSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjEuIFBlcnNpc3RpbmcgcHJvamVjdC4uLi4iKTsKKyAgICAgIGVtLnBlcnNpc3QocDEpOwogICAgICAgICAgIGVtLmZsdXNoKCk7Ci0JICBwYXNzID0gdHJ1ZTsKKyAgICAgIHBhc3MgPSB0cnVlOwogICAgICAgICB9IGNhdGNoKFRocm93YWJsZSBlKXsKLQkgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBwYXNzOwogICAgIH0KQEAgLTU5LDIwICs1OSwyMCBAQAogICAgIC8vIHBlcnNpc3QgRW1wbG95ZWUgd2l0aCBhIGxvbmcgbmFtZQogICAgIHB1YmxpYyBib29sZWFuIHRlc3QyKCkgewogICAgICAgICBib29sZWFuIHBhc3M9IGZhbHNlOwotCUVtcGxveWVlIGU1ID0gbmV3IEVtcGxveWVlKDUsICJteUxvbmdOYW1lNSIsIDUwMDApOwotCXRyeSB7Ci0JICBTeXN0ZW0ub3V0LnByaW50bG4oIjIuIFBlcnNpc3RpbmcgZW1wbG95ZWUgd2l0aCBsb25nIG5hbWUuLi4uIik7Ci0JICBlbS5wZXJzaXN0KGU1KTsKKyAgICBFbXBsb3llZSBlNSA9IG5ldyBFbXBsb3llZSg1LCAibXlMb25nTmFtZTUiLCA1MDAwKTsKKyAgICB0cnkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIyLiBQZXJzaXN0aW5nIGVtcGxveWVlIHdpdGggbG9uZyBuYW1lLi4uLiIpOworICAgICAgZW0ucGVyc2lzdChlNSk7CiAgICAgICAgICAgZW0uZmx1c2goKTsKLQkgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3I6IG5vdCBnZXQgQlYgZXggZm9yIHBlcnNpc3QiKTsKLQl9IGNhdGNoKGpha2FydGEudmFsaWRhdGlvbi5Db25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uIGV4KXsKLQkgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhwZWN0ZWQgQlYgRXgiKTsKLQkgIHBhc3M9IHRydWU7Ci0JICBTdHJpbmcgbXNnID0gZXguZ2V0TWVzc2FnZSgpOwotCSAgU3lzdGVtLm91dC5wcmludGxuKCJtc2c9Iittc2cpOwotCX0gY2F0Y2goVGhyb3dhYmxlIGUpewotCSAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIEV4Iik7Ci0JICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvcjogbm90IGdldCBCViBleCBmb3IgcGVyc2lzdCIpOworICAgIH0gY2F0Y2goamFrYXJ0YS52YWxpZGF0aW9uLkNvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb24gZXgpeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeHBlY3RlZCBCViBFeCIpOworICAgICAgcGFzcz0gdHJ1ZTsKKyAgICAgIFN0cmluZyBtc2cgPSBleC5nZXRNZXNzYWdlKCk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm1zZz0iK21zZyk7CisgICAgfSBjYXRjaChUaHJvd2FibGUgZSl7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgRXgiKTsKKyAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHBhc3M7CiAgICAgfQpAQCAtODEsMjAgKzgxLDIwIEBACiAgICAgLy8gdXBkYXRlIEVtcGxveWVlIHdpdGggYSBsb25nIG5hbWUKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MygpIHsKICAgICAgICAgYm9vbGVhbiBwYXNzPSBmYWxzZTsKLQl0cnkgewotCSAgU3lzdGVtLm91dC5wcmludGxuKCIzLiBVcGRhdGluZyBlbXBsb3llZSB3aXRoIGxvbmcgbmFtZS4uLi4iKTsKLQkgIEVtcGxveWVlIGUgPSBlbS5maW5kKEVtcGxveWVlLmNsYXNzLCAzKTsKLQkgIGUuc2V0TmFtZSgibXlMb25nTmFtZTMiKTsKLQkgIGVtLmZsdXNoKCk7Ci0JICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yOiBub3QgZ2V0IEJWIGV4IGZvciB1cGRhdGUiKTsKLQl9IGNhdGNoIChqYWthcnRhLnZhbGlkYXRpb24uQ29uc3RyYWludFZpb2xhdGlvbkV4Y2VwdGlvbiBleCkgewotCSAgU3lzdGVtLm91dC5wcmludGxuKCJFeHBlY3RlZCBCViBFeCIpOwotCSAgcGFzcz0gdHJ1ZTsKLQkgIFN0cmluZyBtc2cgPSBleC5nZXRNZXNzYWdlKCk7Ci0JICBTeXN0ZW0ub3V0LnByaW50bG4oIm1zZz0iK21zZyk7Ci0JfSBjYXRjaChUaHJvd2FibGUgZSl7Ci0JICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgRXgiKTsKLQkgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgdHJ5IHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMy4gVXBkYXRpbmcgZW1wbG95ZWUgd2l0aCBsb25nIG5hbWUuLi4uIik7CisgICAgICBFbXBsb3llZSBlID0gZW0uZmluZChFbXBsb3llZS5jbGFzcywgMyk7CisgICAgICBlLnNldE5hbWUoIm15TG9uZ05hbWUzIik7CisgICAgICBlbS5mbHVzaCgpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvcjogbm90IGdldCBCViBleCBmb3IgdXBkYXRlIik7CisgICAgfSBjYXRjaCAoamFrYXJ0YS52YWxpZGF0aW9uLkNvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb24gZXgpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhwZWN0ZWQgQlYgRXgiKTsKKyAgICAgIHBhc3M9IHRydWU7CisgICAgICBTdHJpbmcgbXNnID0gZXguZ2V0TWVzc2FnZSgpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtc2c9Iittc2cpOworICAgIH0gY2F0Y2goVGhyb3dhYmxlIGUpeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIEV4Iik7CisgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBwYXNzOwogICAgIH0KQEAgLTEwMywyMCArMTAzLDIwIEBACiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDQoKSB7CiAgICAgICAgIGJvb2xlYW4gcGFzcz0gZmFsc2U7CiAgICAgICAgIHRyeSB7Ci0JICBTeXN0ZW0ub3V0LnByaW50bG4oIjQuIFJlbW92aW5nIGVtcGxveWVlIHdpdGggbG9uZyBuYW1lLi4uLiIpOwotCSAgRW1wbG95ZWUgZSA9IGVtLmZpbmQoRW1wbG95ZWUuY2xhc3MsIDEpOwotCSAgZS5zZXROYW1lKCJteUxvbmdOYW1lMSIpOwotCSAgZW0ucmVtb3ZlKGUpOwotCSAgZW0uZmx1c2goKTsKLQkgIFN5c3RlbS5vdXQucHJpbnRsbigiT0s6IG5vdCBnZXQgQlYgZXggZm9yIHJlbW92ZSIpOwotCSAgcGFzcz0gdHJ1ZTsKLQl9IGNhdGNoIChqYWthcnRhLnZhbGlkYXRpb24uQ29uc3RyYWludFZpb2xhdGlvbkV4Y2VwdGlvbiBleCkgewotCSAgU3lzdGVtLm91dC5wcmludGxuKCJCViBFeCIpOwotCSAgU3RyaW5nIG1zZyA9IGV4LmdldE1lc3NhZ2UoKTsKLQkgIFN5c3RlbS5vdXQucHJpbnRsbigibXNnPSIrbXNnKTsKLQl9IGNhdGNoKFRocm93YWJsZSBlKXsKLQkgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBFeCIpOwotCSAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiNC4gUmVtb3ZpbmcgZW1wbG95ZWUgd2l0aCBsb25nIG5hbWUuLi4uIik7CisgICAgICBFbXBsb3llZSBlID0gZW0uZmluZChFbXBsb3llZS5jbGFzcywgMSk7CisgICAgICBlLnNldE5hbWUoIm15TG9uZ05hbWUxIik7CisgICAgICBlbS5yZW1vdmUoZSk7CisgICAgICBlbS5mbHVzaCgpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJPSzogbm90IGdldCBCViBleCBmb3IgcmVtb3ZlIik7CisgICAgICBwYXNzPSB0cnVlOworICAgIH0gY2F0Y2ggKGpha2FydGEudmFsaWRhdGlvbi5Db25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uIGV4KSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJWIEV4Iik7CisgICAgICBTdHJpbmcgbXNnID0gZXguZ2V0TWVzc2FnZSgpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtc2c9Iittc2cpOworICAgIH0gY2F0Y2goVGhyb3dhYmxlIGUpeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIEV4Iik7CisgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBwYXNzOwogICAgIH0KQEAgLTEyNSwyNyArMTI1LDI3IEBACiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDUoKSB7CiAgICAgICAgIGJvb2xlYW4gcGFzcz0gZmFsc2U7CiAgICAgICAgIGJvb2xlYW4gYnZzaXplID0gdHJ1ZTsKLQl0cnkgewotCSAgU3lzdGVtLm91dC5wcmludGxuKCI1LiBWZXJpZnlpbmcgZW1wbG95ZWUgLi4uLiIpOwotCSAgRW1wbG95ZWUgZW1wID0gbnVsbDsKLQkgIFF1ZXJ5IHE9IGVtLmNyZWF0ZVF1ZXJ5KCJTRUxFQ1QgZSBGUk9NIEVtcGxveWVlIGUiKTsKLQkgIExpc3QgcmVzdWx0ID0gcS5nZXRSZXN1bHRMaXN0KCk7Ci0JICBpbnQgc2l6ZSA9IHJlc3VsdC5zaXplKCk7Ci0JICBmb3IgKGludCBpID0gMCA7IGkgPCBzaXplIDsgaSsrKSB7Ci0JICAgIGVtcCA9IChFbXBsb3llZSkgcmVzdWx0LmdldChpKTsgICAgICAgICAgCi0JICAgIFN0cmluZyBuYW1lID0gZW1wLmdldE5hbWUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJpPSIgKyBpICsgIiwgbmFtZT0iICsgbmFtZSk7Ci0JICAgIGlmIChuYW1lLmxlbmd0aCgpID4gNSkgewotCSAgICAgIGJ2c2l6ZSA9IGZhbHNlOwotCSAgICB9Ci0JICB9Ci0JICBTeXN0ZW0ub3V0LnByaW50bG4oInNpemUgPSIgK3NpemUrIiwgYnZzaXplPSIrYnZzaXplKTsKLQkgIGlmIChzaXplID09IDMgJiYgYnZzaXplKXsKLQkgICAgcGFzcyA9IHRydWU7Ci0JICB9Ci0JfSBjYXRjaChUaHJvd2FibGUgZSl7Ci0JICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgRXgiKTsKLQkgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgdHJ5IHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiNS4gVmVyaWZ5aW5nIGVtcGxveWVlIC4uLi4iKTsKKyAgICAgIEVtcGxveWVlIGVtcCA9IG51bGw7CisgICAgICBRdWVyeSBxPSBlbS5jcmVhdGVRdWVyeSgiU0VMRUNUIGUgRlJPTSBFbXBsb3llZSBlIik7CisgICAgICBMaXN0IHJlc3VsdCA9IHEuZ2V0UmVzdWx0TGlzdCgpOworICAgICAgaW50IHNpemUgPSByZXN1bHQuc2l6ZSgpOworICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgc2l6ZSA7IGkrKykgeworICAgICAgICBlbXAgPSAoRW1wbG95ZWUpIHJlc3VsdC5nZXQoaSk7CisgICAgICAgIFN0cmluZyBuYW1lID0gZW1wLmdldE5hbWUoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpPSIgKyBpICsgIiwgbmFtZT0iICsgbmFtZSk7CisgICAgICAgIGlmIChuYW1lLmxlbmd0aCgpID4gNSkgeworICAgICAgICAgIGJ2c2l6ZSA9IGZhbHNlOworICAgICAgICB9CisgICAgICB9CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNpemUgPSIgK3NpemUrIiwgYnZzaXplPSIrYnZzaXplKTsKKyAgICAgIGlmIChzaXplID09IDMgJiYgYnZzaXplKXsKKyAgICAgICAgcGFzcyA9IHRydWU7CisgICAgICB9CisgICAgfSBjYXRjaChUaHJvd2FibGUgZSl7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgRXgiKTsKKyAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHBhc3M7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9wZXJzaXN0ZW5jZS9qcGF2YWxpZGF0aW9uL3NyYy9qYXZhL1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3BlcnNpc3RlbmNlL2pwYXZhbGlkYXRpb24vc3JjL2phdmEvVGVzdFNlcnZsZXQuamF2YQppbmRleCAxYWIxY2YzLi4yMzhmZjdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3BlcnNpc3RlbmNlL2pwYXZhbGlkYXRpb24vc3JjL2phdmEvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3BlcnNpc3RlbmNlL2pwYXZhbGlkYXRpb24vc3JjL2phdmEvVGVzdFNlcnZsZXQuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgb3V0LnByaW50bG4oIlRlc3RTZXJ2bGV0IGF0ICIgKyByZXF1ZXN0LmdldENvbnRleHRQYXRoKCkpOwogICAgICAgICAgICAgdGVzdGNhc2UgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigidGMiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0Y2FzZSA9ICIgKyB0ZXN0Y2FzZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdGNhc2UgPSAiICsgdGVzdGNhc2UpOwogCiAgICAgICAgICAgICBpZiAoImluaXRpYWxpemUiLmVxdWFscyh0ZXN0Y2FzZSkpIHsKIApAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWx1cmUgaW4gVGVzdFNlcnZsZXQiKTsKLQkgICAgb3V0LnByaW50bG4oIkZhaWx1cmUgaW4gVGVzdFNlcnZsZXQiKTsKKyAgICAgICAgb3V0LnByaW50bG4oIkZhaWx1cmUgaW4gVGVzdFNlcnZsZXQiKTsKIAogICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgaWYgKHN0YXR1cykgCisgICAgICAgICAgICBpZiAoc3RhdHVzKQogICAgICAgICAgICAgICBvdXQucHJpbnRsbih0ZXN0Y2FzZSsiOnBhc3MiKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgb3V0LnByaW50bG4odGVzdGNhc2UrIjpmYWlsIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3BlcnNpc3RlbmNlL2pwYXZhbGlkYXRpb24vc3JjL3Rlc3QvSnBhVmFsaWRhdGlvblRlc3RORy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9wZXJzaXN0ZW5jZS9qcGF2YWxpZGF0aW9uL3NyYy90ZXN0L0pwYVZhbGlkYXRpb25UZXN0TkcuamF2YQppbmRleCBmODAzYjRiLi5kMTBhZDg0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3BlcnNpc3RlbmNlL2pwYXZhbGlkYXRpb24vc3JjL3Rlc3QvSnBhVmFsaWRhdGlvblRlc3RORy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcGVyc2lzdGVuY2UvanBhdmFsaWRhdGlvbi9zcmMvdGVzdC9KcGFWYWxpZGF0aW9uVGVzdE5HLmphdmEKQEAgLTM1LDMxICszNSwzMSBAQAogICAgIFN0cmluZyBob3N0PVN5c3RlbS5nZXRQcm9wZXJ0eSgiaHR0cC5ob3N0Iik7CiAgICAgU3RyaW5nIHBvcnQ9U3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKTsKIAotICAgIEBUZXN0KGdyb3VwcyA9IHsgImluaXQiIH0pICAgICAgICAgICAKKyAgICBAVGVzdChncm91cHMgPSB7ICJpbml0IiB9KQogICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICBib29sZWFuIHJlc3VsdD1mYWxzZTsgICAgICAgCisgICAgICAgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOwogCiAgICAgICAgIHRyeXsKIAogICAgICAgICAgIHJlc3VsdCA9IHRlc3QoImluaXRpYWxpemUiKTsKLQkgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVzdWx0LCB0cnVlLCAiVW5leHBlY3RlZCBSZXN1bHRzIik7CisgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHJlc3VsdCwgdHJ1ZSwgIlVuZXhwZWN0ZWQgUmVzdWx0cyIpOwogCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAKLQkgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICB0aHJvdyBuZXcgRXhjZXB0aW9uKGUpOworICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oZSk7CiAKICAgICAgICAgfQogICAgIH0KIAogICAgIEBUZXN0KGRlcGVuZHNPbkdyb3VwcyA9IHsgImluaXQuKiIgfSkKICAgICBwdWJsaWMgdm9pZCB2YWxpZGF0ZVBlcnNpc3QoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICBib29sZWFuIHJlc3VsdD1mYWxzZTsgICAgICAgIAorICAgICAgICBib29sZWFuIHJlc3VsdD1mYWxzZTsKIAogICAgICAgICB0cnl7CiAKLSAgICAgICAgICAgIHJlc3VsdCA9IHRlc3QoInZhbGlkYXRlUGVyc2lzdCIpOyAgICAgICAgICAgICAgIAotICAJICAgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVzdWx0LCB0cnVlLCJVbmV4cGVjdGVkIFJlc3VsdHMiKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHRlc3QoInZhbGlkYXRlUGVyc2lzdCIpOworICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVzdWx0LCB0cnVlLCJVbmV4cGVjdGVkIFJlc3VsdHMiKTsKIAogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTcwLDEyICs3MCwxMiBAQAogCiAgICAgQFRlc3QoZGVwZW5kc09uTWV0aG9kcyA9IHsgInZhbGlkYXRlUGVyc2lzdCIgfSkKICAgICBwdWJsaWMgdm9pZCB2YWxpZGF0ZVVwZGF0ZSgpIHRocm93cyBFeGNlcHRpb257Ci0gICAgICAgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOyAgICAgICAgCisgICAgICAgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOwogCiAgICAgICAgIHRyeXsKIAotICAgICAgICAgICAgcmVzdWx0ID0gdGVzdCgidmFsaWRhdGVVcGRhdGUiKTsgICAgICAgICAgICAgICAKLSAgCSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHJlc3VsdCwgdHJ1ZSwiVW5leHBlY3RlZCBSZXN1bHRzIik7CisgICAgICAgICAgICByZXN1bHQgPSB0ZXN0KCJ2YWxpZGF0ZVVwZGF0ZSIpOworICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVzdWx0LCB0cnVlLCJVbmV4cGVjdGVkIFJlc3VsdHMiKTsKIAogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTg2LDEyICs4NiwxMiBAQAogCiAgICAgQFRlc3QoZGVwZW5kc09uTWV0aG9kcyA9IHsgInZhbGlkYXRlVXBkYXRlIiB9KQogICAgIHB1YmxpYyB2b2lkIHZhbGlkYXRlUmVtb3ZlKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7ICAgICAgICAKKyAgICAgICAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7CiAKICAgICAgICAgdHJ5ewogCi0gICAgICAgICAgICByZXN1bHQgPSB0ZXN0KCJ2YWxpZGF0ZVJlbW92ZSIpOyAgICAgICAgICAgICAgIAotICAJICAgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVzdWx0LCB0cnVlLCJVbmV4cGVjdGVkIFJlc3VsdHMiKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHRlc3QoInZhbGlkYXRlUmVtb3ZlIik7CisgICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhyZXN1bHQsIHRydWUsIlVuZXhwZWN0ZWQgUmVzdWx0cyIpOwogCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTAyLDEyICsxMDIsMTIgQEAKIAogICAgIEBUZXN0KGRlcGVuZHNPbk1ldGhvZHMgPSB7ICJ2YWxpZGF0ZVJlbW92ZSIgfSkKICAgICBwdWJsaWMgdm9pZCB2ZXJpZnkoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICBib29sZWFuIHJlc3VsdD1mYWxzZTsgICAgICAgIAorICAgICAgICBib29sZWFuIHJlc3VsdD1mYWxzZTsKIAogICAgICAgICB0cnl7CiAKLSAgICAgICAgICAgIHJlc3VsdCA9IHRlc3QoInZlcmlmeSIpOyAgICAgICAgICAgICAgIAotICAJICAgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVzdWx0LCB0cnVlLCJVbmV4cGVjdGVkIFJlc3VsdHMiKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHRlc3QoInZlcmlmeSIpOworICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVzdWx0LCB0cnVlLCJVbmV4cGVjdGVkIFJlc3VsdHMiKTsKIAogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTExOSw3ICsxMTksNyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiB0ZXN0KFN0cmluZyBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0gYyArICI6cGFzcyI7CiAgICAgICAgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOwotICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBzdHJDb250ZXh0Um9vdCArIAorICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBzdHJDb250ZXh0Um9vdCArCiAgICAgICAgICAgICAgICAgICAgICAiL3Rlc3Q/dGM9IiArIGM7CiAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigidXJsPSIrdXJsKTsKIApAQCAtMTI4LDE5ICsxMjgsMTkgQEAKICAgICAgICAgaW50IGNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwogICAgICAgICBpZiAoY29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVW5leHBlY3RlZCByZXR1cm4gY29kZTogIiArIGNvZGUpOwotCX0gZWxzZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gY29ubi5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7Ci0JICAgIFN0cmluZyBsaW5lID0gbnVsbDsKLQkgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewotCSAgICAgIGlmIChsaW5lLmNvbnRhaW5zKEVYUEVDVEVEX1JFU1BPTlNFKSkgeworICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CisgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKKyAgICAgICAgICBpZiAobGluZS5jb250YWlucyhFWFBFQ1RFRF9SRVNQT05TRSkpIHsKICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwotCQlicmVhazsKLQkgICAgICB9Ci0JICAgIH0KLQkgICAgCi0gICAgICAgIH0gICAgCi0JcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgfQorICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIGVjaG8oU3RyaW5nIG1zZykgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9wb20ueG1sCmluZGV4IGVjMzE5MjIuLmEzOGM1MjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3BvbS54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgIDxwbHVnaW4+CiAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgogICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWFudHJ1bi1wbHVnaW48L2FydGlmYWN0SWQ+Ci0JCSAgICAgICAgPHZlcnNpb24+My4wLjA8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgPHZlcnNpb24+My4wLjA8L3ZlcnNpb24+CiAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CiAgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+ZGVmYXVsdC10ZXN0PC9pZD4KQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NwYXRocmVmPSJtYXZlbi5wbHVnaW4uY2xhc3NwYXRoIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY29tcGlsZV9jbGFzc3BhdGgiIHJlZmlkPSJtYXZlbi5jb21waWxlLmNsYXNzcGF0aCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luX2NsYXNzcGF0aCIgcmVmaWQ9Im1hdmVuLnBsdWdpbi5jbGFzc3BhdGgiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iY29tcGlsZSBjbGFzc3BhdGg6ICR7Y29tcGlsZV9jbGFzc3BhdGh9Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbiBjbGFzc3BhdGg6ICAke3BsdWdpbl9jbGFzc3BhdGh9Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZj4KQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbnQgZGlyPSIuIiBhbnRmaWxlPSJidWlsZC54bWwiIHRhcmdldD0iYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImdsYXNzZmlzaC5ob21lIiB2YWx1ZT0iJHtnbGFzc2Zpc2guaG9tZX0iLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FudD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hbnQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaWY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZj4KQEAgLTE4OCwxMiArMTg4LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbnM+CiAgICAgICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgICAgICAgICAgICAgCi0JCSAgICA8ZGVwZW5kZW5jeT4KLQkJCTxncm91cElkPmNvbS5iZXVzdDwvZ3JvdXBJZD4KLQkJCTxhcnRpZmFjdElkPmpjb21tYW5kZXI8L2FydGlmYWN0SWQ+Ci0JCQk8dmVyc2lvbj4xLjcyPC92ZXJzaW9uPgotCQkgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmNvbS5iZXVzdDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmpjb21tYW5kZXI8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4xLjcyPC92ZXJzaW9uPgorICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgogICAgICAgICAgICAgPC9wbHVnaW4+CiAgICAgICAgIDwvcGx1Z2lucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcmVzdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3Jlc3QvYnVpbGQueG1sCmluZGV4IDJhZjYwN2YuLjAzOWNkMWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcmVzdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9yZXN0L2J1aWxkLnhtbApAQCAtMjAsMTggKzIwLDE4IEBACiA8cHJvamVjdCBuYW1lPSJhZG1pbmNvbnNvbGUiIGRlZmF1bHQ9ImRlZmF1bHQiIGJhc2VkaXI9Ii4iPgogICAgIDxwcm9wZXJ0eSBmaWxlPSJidWlsZC5wcm9wZXJ0aWVzIi8+CiAgICAgPHByb3BlcnR5IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS1jb25maWcucHJvcGVydGllcyIvPgotICAgIAorCiAgICAgPGRlc2NyaXB0aW9uPlRlc3RzIHRoZSBBZG1pbiBDb25zb2xlPC9kZXNjcmlwdGlvbj4KLSAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+ICAgCisgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LXRhcmdldHMueG1sIi8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQscnVudGVzdCIvPgogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLXRlc3RzIj4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICA8dGFyZ2V0ICBuYW1lPSJydW50ZXN0Ij4gCisKKyAgICA8dGFyZ2V0ICBuYW1lPSJydW50ZXN0Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW50ZXN0LWltcGwiPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0bmcudGVzdC5uYW1lIiB2YWx1ZT0iJHt0ZXN0bmcudGVzdC5uYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3Jlc3QvdGVzdG5nLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcmVzdC90ZXN0bmcueG1sCmluZGV4IDQxYWMwYWUuLmU4MzE2MWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcmVzdC90ZXN0bmcueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcmVzdC90ZXN0bmcueG1sCkBAIC0xNywxNCArMTcsMTQgQEAKIC0tPgogCiA8IURPQ1RZUEUgc3VpdGUgU1lTVEVNICJodHRwOi8vdGVzdG5nLm9yZy90ZXN0bmctMS4wLmR0ZCIgPgotIAorCiA8c3VpdGUgbmFtZT0iUXVpY2tMb29rVGVzdHMiIHZlcmJvc2U9IjIiID4KICAgPHBhcmFtZXRlciBuYW1lPSJhZG1pbi51cmwiIHZhbHVlPSJodHRwOi8vbG9jYWxob3N0OjQ4NDgvX19hc2FkbWluIi8+CiAgIDxwYXJhbWV0ZXIgbmFtZT0iYWRtaW4udXNlciIgdmFsdWU9ImFkbWluIi8+CiAgIDxwYXJhbWV0ZXIgbmFtZT0iYWRtaW4ucGFzc3dvcmQiIHZhbHVlPSIiLz4KICAgPHBhcmFtZXRlciBuYW1lPSJhZG1pbi5jb25zb2xlLnVybCIgdmFsdWU9Imh0dHA6Ly9sb2NhbGhvc3Q6NDg0OC8iLz4KICAgPHBhcmFtZXRlciBuYW1lPSJyZXNvdXJjZXMueG1sLnJlbGF0aXZlLnBhdGgiIHZhbHVlPSJhZG1pbi9yZXNvdXJjZXMvcmVzb3VyY2VzLnhtbCIvPgotICAKKwogCiAgIDx0ZXN0IG5hbWU9InJlc3RfdGVzdHMiPgogICAgIDxjbGFzc2VzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9ydW5fdGVzdC5zaCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcnVuX3Rlc3Quc2gKaW5kZXggNWY4Y2E1My4uZWZmYTg2ZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9ydW5fdGVzdC5zaAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3J1bl90ZXN0LnNoCkBAIC0xNiw2NiArMTYsNjYgQEAKICMKIAogY29weV9xbF9yZXN1bHRzKCl7Ci0JaWYgW1sgJHsxfSA9ICJxbF9nZl93ZWJfcHJvZmlsZV9hbGwiIHx8ICR7MX0gPSAicWxfZ2ZfZnVsbF9wcm9maWxlX2FsbCIgfHwgInFsX2dmX2VtYmVkZGVkX3Byb2ZpbGVfYWxsIiA9ICR7MX0gXV07IHRoZW4KLQkJdGFyIC1jZiAke1dPUktTUEFDRX0vcmVzdWx0cy9kb21haW5BcmNoaXZlLnRhci5neiAke1dPUktTUEFDRX0vZ2xhc3NmaXNoNi9nbGFzc2Zpc2gvZG9tYWlucwotCQljcCAke1dPUktTUEFDRX0vZ2xhc3NmaXNoNi9nbGFzc2Zpc2gvZG9tYWlucy9kb21haW4xL2xvZ3Mvc2VydmVyLmxvZyogJHtXT1JLU1BBQ0V9L3Jlc3VsdHMvIHx8IHRydWUKLQkJY3AgLXIgJHtXT1JLU1BBQ0V9L2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svdGVzdC1vdXRwdXQvKiAke1dPUktTUEFDRX0vcmVzdWx0cy8KLQkJY3AgJHtXT1JLU1BBQ0V9L2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svdGVzdC1vdXRwdXQvVEVTVFMtVGVzdFN1aXRlcy54bWwgJHtXT1JLU1BBQ0V9L3Jlc3VsdHMvanVuaXRyZXBvcnRzL3Rlc3RfcmVzdWx0c19qdW5pdC54bWwKLQkJY3AgJHtXT1JLU1BBQ0V9L2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svcXVpY2tsb29rX3N1bW1hcnkudHh0ICR7V09SS1NQQUNFfS9yZXN1bHRzIHx8IHRydWUKLQllbHNlCi0JCWNwICR7V09SS1NQQUNFfS9udWNsZXVzL2RvbWFpbnMvZG9tYWluMS9sb2dzL3NlcnZlci5sb2cqICR7V09SS1NQQUNFfS9yZXN1bHRzCi0JZmkKLQljcCAke1RFU1RfUlVOX0xPR30gJHtXT1JLU1BBQ0V9L3Jlc3VsdHMvCi0JdGFyIC1jZiAke1dPUktTUEFDRX0vJHsxfS1yZXN1bHRzLnRhci5neiAke1dPUktTUEFDRX0vcmVzdWx0cwotCWNoYW5nZV9qdW5pdF9yZXBvcnRfY2xhc3NfbmFtZXMKKyAgICBpZiBbWyAkezF9ID0gInFsX2dmX3dlYl9wcm9maWxlX2FsbCIgfHwgJHsxfSA9ICJxbF9nZl9mdWxsX3Byb2ZpbGVfYWxsIiB8fCAicWxfZ2ZfZW1iZWRkZWRfcHJvZmlsZV9hbGwiID0gJHsxfSBdXTsgdGhlbgorICAgICAgICB0YXIgLWNmICR7V09SS1NQQUNFfS9yZXN1bHRzL2RvbWFpbkFyY2hpdmUudGFyLmd6ICR7V09SS1NQQUNFfS9nbGFzc2Zpc2g2L2dsYXNzZmlzaC9kb21haW5zCisgICAgICAgIGNwICR7V09SS1NQQUNFfS9nbGFzc2Zpc2g2L2dsYXNzZmlzaC9kb21haW5zL2RvbWFpbjEvbG9ncy9zZXJ2ZXIubG9nKiAke1dPUktTUEFDRX0vcmVzdWx0cy8gfHwgdHJ1ZQorICAgICAgICBjcCAtciAke1dPUktTUEFDRX0vYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay90ZXN0LW91dHB1dC8qICR7V09SS1NQQUNFfS9yZXN1bHRzLworICAgICAgICBjcCAke1dPUktTUEFDRX0vYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay90ZXN0LW91dHB1dC9URVNUUy1UZXN0U3VpdGVzLnhtbCAke1dPUktTUEFDRX0vcmVzdWx0cy9qdW5pdHJlcG9ydHMvdGVzdF9yZXN1bHRzX2p1bml0LnhtbAorICAgICAgICBjcCAke1dPUktTUEFDRX0vYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9xdWlja2xvb2tfc3VtbWFyeS50eHQgJHtXT1JLU1BBQ0V9L3Jlc3VsdHMgfHwgdHJ1ZQorICAgIGVsc2UKKyAgICAgICAgY3AgJHtXT1JLU1BBQ0V9L251Y2xldXMvZG9tYWlucy9kb21haW4xL2xvZ3Mvc2VydmVyLmxvZyogJHtXT1JLU1BBQ0V9L3Jlc3VsdHMKKyAgICBmaQorICAgIGNwICR7VEVTVF9SVU5fTE9HfSAke1dPUktTUEFDRX0vcmVzdWx0cy8KKyAgICB0YXIgLWNmICR7V09SS1NQQUNFfS8kezF9LXJlc3VsdHMudGFyLmd6ICR7V09SS1NQQUNFfS9yZXN1bHRzCisgICAgY2hhbmdlX2p1bml0X3JlcG9ydF9jbGFzc19uYW1lcwogfQogCiBydW5fdGVzdF9pZCgpewotCWlmIFtbICR7MX0gPSAicWxfZ2ZfZnVsbF9wcm9maWxlX2FsbCIgXV07IHRoZW4KLQkgICAgCi0JICAgICMgUnVuIHF1aWNrIGxvb2sgZnVsbCBwcm9maWxlIHRlc3RzIHVzaW5nIHRoZSBmdWxsIGdsYXNzZmlzaCBkaXN0cmlidXRpb24gKEdEKSBidWlsZAotCQotCQl1bnppcF90ZXN0X3Jlc291cmNlcyAke1dPUktTUEFDRX0vYnVuZGxlcy9nbGFzc2Zpc2guemlwCi0JCQotCQljZCAke1dPUktTUEFDRX0vYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay8KLQkJCi0JCW12biAtRGdsYXNzZmlzaC5ob21lPSR7UzFBU19IT01FfSAtUHRlc3RfZ2Rfc2VjdXJpdHkscmVwb3J0IHRlc3QgfCB0ZWUgJHtURVNUX1JVTl9MT0d9Ci0JZWxpZiBbWyAkezF9ID0gInFsX2dmX251Y2xldXNfYWxsIiB8fCAkezF9ID0gIm51Y2xldXNfYWRtaW5fYWxsIiBdXTsgdGhlbgotCSAgICAKLQkgICAgIyBSdW4gcXVpY2sgbG9vayBudWNsZXVzIHRlc3RzIHVzaW5nIHRoZSBudWNsZXVzIGJ1aWxkCi0JCi0JCXVuemlwX3Rlc3RfcmVzb3VyY2VzICR7V09SS1NQQUNFfS9idW5kbGVzL251Y2xldXMtbmV3LnppcAotCQkKLQkJaWYgW1sgJHsxfSA9ICJxbF9nZl9udWNsZXVzX2FsbCIgXV07IHRoZW4KLQkJCWNkICR7V09SS1NQQUNFfS9udWNsZXVzL3Rlc3RzL3F1aWNrbG9vawotCQllbGlmIFtbICR7MX0gPSAibnVjbGV1c19hZG1pbl9hbGwiICBdXTsgdGhlbgotCQkJY2QgJHtXT1JLU1BBQ0V9L251Y2xldXMvdGVzdHMvYWRtaW4KLQkJZmkKLQkJCi0JCW12biAtRG1hdmVuLnRlc3QuZmFpbHVyZS5pZ25vcmU9dHJ1ZSAtRG51Y2xldXMuaG9tZT0ke1dPUktTUEFDRX0vbnVjbGV1cyBjbGVhbiB0ZXN0IHwgdGVlICR7VEVTVF9SVU5fTE9HfQotCQkKLQkJaWYgW1sgJHsxfSA9ICJxbF9nZl9udWNsZXVzX2FsbCIgXV07IHRoZW4KLQkJCW1lcmdlX2p1bml0X3htbHMgJHtXT1JLU1BBQ0V9L251Y2xldXMvdGVzdHMvcXVpY2tsb29rL3RhcmdldC9zdXJlZmlyZS1yZXBvcnRzL2p1bml0cmVwb3J0cwotCQllbGlmIFtbICR7MX0gPSAibnVjbGV1c19hZG1pbl9hbGwiICBdXTsgdGhlbgotCQkJbWVyZ2VfanVuaXRfeG1scyAke1dPUktTUEFDRX0vbnVjbGV1cy90ZXN0cy9hZG1pbi90YXJnZXQvc3VyZWZpcmUtcmVwb3J0cy9qdW5pdHJlcG9ydHMKLQkJZmkKLQllbGlmIFtbICR7MX0gPSAicWxfZ2Zfd2ViX3Byb2ZpbGVfYWxsIiB8fCAkMSA9ICJxbF9nZl9lbWJlZGRlZF9wcm9maWxlX2FsbCIgXV07IHRoZW4KLQkgICAgCi0JICAgICMgUnVuIHF1aWNrIGxvb2sgRUUgd2ViIHByb2ZpbGUgdGVzdHMgdXNpbmcgdGhlIHdlYiBwcm9maWxlIGdsYXNzZmlzaCBkaXN0cmlidXRpb24gKFdELCBXZWIgRGlzdHJpYnV0aW9uKSBidWlsZCAKLQkKKyAgICBpZiBbWyAkezF9ID0gInFsX2dmX2Z1bGxfcHJvZmlsZV9hbGwiIF1dOyB0aGVuCisKKyAgICAgICAgIyBSdW4gcXVpY2sgbG9vayBmdWxsIHByb2ZpbGUgdGVzdHMgdXNpbmcgdGhlIGZ1bGwgZ2xhc3NmaXNoIGRpc3RyaWJ1dGlvbiAoR0QpIGJ1aWxkCisKKyAgICAgICAgdW56aXBfdGVzdF9yZXNvdXJjZXMgJHtXT1JLU1BBQ0V9L2J1bmRsZXMvZ2xhc3NmaXNoLnppcAorCisgICAgICAgIGNkICR7V09SS1NQQUNFfS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rLworCisgICAgICAgIG12biAtRGdsYXNzZmlzaC5ob21lPSR7UzFBU19IT01FfSAtUHRlc3RfZ2Rfc2VjdXJpdHkscmVwb3J0IHRlc3QgfCB0ZWUgJHtURVNUX1JVTl9MT0d9CisgICAgZWxpZiBbWyAkezF9ID0gInFsX2dmX251Y2xldXNfYWxsIiB8fCAkezF9ID0gIm51Y2xldXNfYWRtaW5fYWxsIiBdXTsgdGhlbgorCisgICAgICAgICMgUnVuIHF1aWNrIGxvb2sgbnVjbGV1cyB0ZXN0cyB1c2luZyB0aGUgbnVjbGV1cyBidWlsZAorCisgICAgICAgIHVuemlwX3Rlc3RfcmVzb3VyY2VzICR7V09SS1NQQUNFfS9idW5kbGVzL251Y2xldXMtbmV3LnppcAorCisgICAgICAgIGlmIFtbICR7MX0gPSAicWxfZ2ZfbnVjbGV1c19hbGwiIF1dOyB0aGVuCisgICAgICAgICAgICBjZCAke1dPUktTUEFDRX0vbnVjbGV1cy90ZXN0cy9xdWlja2xvb2sKKyAgICAgICAgZWxpZiBbWyAkezF9ID0gIm51Y2xldXNfYWRtaW5fYWxsIiAgXV07IHRoZW4KKyAgICAgICAgICAgIGNkICR7V09SS1NQQUNFfS9udWNsZXVzL3Rlc3RzL2FkbWluCisgICAgICAgIGZpCisKKyAgICAgICAgbXZuIC1EbWF2ZW4udGVzdC5mYWlsdXJlLmlnbm9yZT10cnVlIC1EbnVjbGV1cy5ob21lPSR7V09SS1NQQUNFfS9udWNsZXVzIGNsZWFuIHRlc3QgfCB0ZWUgJHtURVNUX1JVTl9MT0d9CisKKyAgICAgICAgaWYgW1sgJHsxfSA9ICJxbF9nZl9udWNsZXVzX2FsbCIgXV07IHRoZW4KKyAgICAgICAgICAgIG1lcmdlX2p1bml0X3htbHMgJHtXT1JLU1BBQ0V9L251Y2xldXMvdGVzdHMvcXVpY2tsb29rL3RhcmdldC9zdXJlZmlyZS1yZXBvcnRzL2p1bml0cmVwb3J0cworICAgICAgICBlbGlmIFtbICR7MX0gPSAibnVjbGV1c19hZG1pbl9hbGwiICBdXTsgdGhlbgorICAgICAgICAgICAgbWVyZ2VfanVuaXRfeG1scyAke1dPUktTUEFDRX0vbnVjbGV1cy90ZXN0cy9hZG1pbi90YXJnZXQvc3VyZWZpcmUtcmVwb3J0cy9qdW5pdHJlcG9ydHMKKyAgICAgICAgZmkKKyAgICBlbGlmIFtbICR7MX0gPSAicWxfZ2Zfd2ViX3Byb2ZpbGVfYWxsIiB8fCAkMSA9ICJxbF9nZl9lbWJlZGRlZF9wcm9maWxlX2FsbCIgXV07IHRoZW4KKworICAgICAgICAjIFJ1biBxdWljayBsb29rIEVFIHdlYiBwcm9maWxlIHRlc3RzIHVzaW5nIHRoZSB3ZWIgcHJvZmlsZSBnbGFzc2Zpc2ggZGlzdHJpYnV0aW9uIChXRCwgV2ViIERpc3RyaWJ1dGlvbikgYnVpbGQKKwogICAgICAgICB1bnppcF90ZXN0X3Jlc291cmNlcyAke1dPUktTUEFDRX0vYnVuZGxlcy93ZWIuemlwCi0JCQotCQljZCAke1dPUktTUEFDRX0vYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay8KLQkJCi0JCWlmIFtbICR7MX0gPSAicWxfZ2Zfd2ViX3Byb2ZpbGVfYWxsIiBdXTsgdGhlbgotCQkJbXZuIC1EZ2xhc3NmaXNoLmhvbWU9JHtTMUFTX0hPTUV9IC1QdGVzdF93ZF9zZWN1cml0eSxyZXBvcnQgdGVzdCB8IHRlZSAke1RFU1RfUlVOX0xPR30KLQkJZWxpZiBbWyAkezF9ID0gInFsX2dmX2VtYmVkZGVkX3Byb2ZpbGVfYWxsIiBdXTsgdGhlbgotCQkJbXZuIC1EZ2xhc3NmaXNoLmhvbWU9JHtTMUFTX0hPTUV9IC1QdGVzdF9lbSxyZXBvcnQgdGVzdCB8IHRlZSAke1RFU1RfUlVOX0xPR30KLQkJZmkKLQllbHNlCi0JCWVjaG8gIkludmFsaWQgVGVzdCBJZCEiCi0JCWV4aXQgMQotCWZpCisKKyAgICAgICAgY2QgJHtXT1JLU1BBQ0V9L2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svCisKKyAgICAgICAgaWYgW1sgJHsxfSA9ICJxbF9nZl93ZWJfcHJvZmlsZV9hbGwiIF1dOyB0aGVuCisgICAgICAgICAgICBtdm4gLURnbGFzc2Zpc2guaG9tZT0ke1MxQVNfSE9NRX0gLVB0ZXN0X3dkX3NlY3VyaXR5LHJlcG9ydCB0ZXN0IHwgdGVlICR7VEVTVF9SVU5fTE9HfQorICAgICAgICBlbGlmIFtbICR7MX0gPSAicWxfZ2ZfZW1iZWRkZWRfcHJvZmlsZV9hbGwiIF1dOyB0aGVuCisgICAgICAgICAgICBtdm4gLURnbGFzc2Zpc2guaG9tZT0ke1MxQVNfSE9NRX0gLVB0ZXN0X2VtLHJlcG9ydCB0ZXN0IHwgdGVlICR7VEVTVF9SVU5fTE9HfQorICAgICAgICBmaQorICAgIGVsc2UKKyAgICAgICAgZWNobyAiSW52YWxpZCBUZXN0IElkISIKKyAgICAgICAgZXhpdCAxCisgICAgZmkKIH0KIAogbWVyZ2VfanVuaXRfeG1scygpewpAQCAtODksNyArODksNyBAQAogfQogCiBsaXN0X3Rlc3RfaWRzKCl7Ci0JZWNobyBxbF9nZl9mdWxsX3Byb2ZpbGVfYWxsIHFsX2dmX251Y2xldXNfYWxsIHFsX2dmX3dlYl9wcm9maWxlX2FsbCBxbF9nZl9lbWJlZGRlZF9wcm9maWxlX2FsbCBudWNsZXVzX2FkbWluX2FsbAorICAgIGVjaG8gcWxfZ2ZfZnVsbF9wcm9maWxlX2FsbCBxbF9nZl9udWNsZXVzX2FsbCBxbF9nZl93ZWJfcHJvZmlsZV9hbGwgcWxfZ2ZfZW1iZWRkZWRfcHJvZmlsZV9hbGwgbnVjbGV1c19hZG1pbl9hbGwKIH0KIAogT1BUPSR7MX0KQEAgLTk4LDkgKzk4LDkgQEAKIG1rZGlyIC1wICR7V09SS1NQQUNFfS9yZXN1bHRzL2p1bml0cmVwb3J0cwogCiBjYXNlICR7T1BUfSBpbgotCWxpc3RfdGVzdF9pZHMgKQotCQlsaXN0X3Rlc3RfaWRzOzsKLQlydW5fdGVzdF9pZCApCisgICAgbGlzdF90ZXN0X2lkcyApCisgICAgICAgIGxpc3RfdGVzdF9pZHM7OworICAgIHJ1bl90ZXN0X2lkICkKICAgICB0cmFwICJjb3B5X3FsX3Jlc3VsdHMgJHtURVNUX0lEfSIgRVhJVAotCQlydW5fdGVzdF9pZCAke1RFU1RfSUR9IDs7CisgICAgICAgIHJ1bl90ZXN0X2lkICR7VEVTVF9JRH0gOzsKIGVzYWMKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svc2VjdXJpdHkvYXBwcGVybXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9zZWN1cml0eS9hcHBwZXJtcy9idWlsZC54bWwKaW5kZXggYmUzOTRjNC4uZDg4ZWViMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9zZWN1cml0eS9hcHBwZXJtcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9zZWN1cml0eS9hcHBwZXJtcy9idWlsZC54bWwKQEAgLTIwLDIyICsyMCwyMiBAQAogPHByb2plY3QgbmFtZT0iYXBwcGVybXMiIGRlZmF1bHQ9ImRlZmF1bHQiIGJhc2VkaXI9Ii4iPgogICAgIDxwcm9wZXJ0eSBmaWxlPSJidWlsZC5wcm9wZXJ0aWVzIi8+CiAgICAgPHByb3BlcnR5IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS1jb25maWcucHJvcGVydGllcyIvPgotICAgIAorCiAgICAgPGRlc2NyaXB0aW9uPkJ1aWxkcywgdGVzdHMsIGFuZCBydW5zIHRoZSBwcm9qZWN0IEFwcGxpY2F0aW9uIHBhY2thZ2VkIHBlcm1pc3Npb25zPC9kZXNjcmlwdGlvbj4KLSAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+ICAgCisgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LXRhcmdldHMueG1sIi8+Ci0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxyZWRlcGxveSxydW50ZXN0LHVuZGVwbG95IiAvPiAgICAKKworICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxkZXBsb3kscmVkZXBsb3kscnVudGVzdCx1bmRlcGxveSIgLz4KICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWRlcGxveSIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJlZGVwbG95IiAvPgogCi0gICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUtdGVzdHMiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWltcGwiPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIgdmFsdWU9IioqLypTZXJ2bGV0LmNsYXNzLCoqLypJbnRlcmZhY2UuY2xhc3MiLz4KLQk8L2FudGNhbGw+CisgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVwZGF0ZWVhciIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS0ke2RlcGxveS5wbGF0Zm9ybX0taW1wbCIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNDMsMjkgKzQzLDI5IEBACiAgICAgPHRhcmdldCBuYW1lPSJyZWRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmUtZGVwbG95LSR7ZGVwbG95LnBsYXRmb3JtfSI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlZGVwbG95IiB2YWx1ZT0iLS1mb3JjZT10cnVlIi8+Ci0JPC9hbnRjYWxsPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICA8dGFyZ2V0ICBuYW1lPSJydW50ZXN0Ij4gCisKKyAgICA8dGFyZ2V0ICBuYW1lPSJydW50ZXN0Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW50ZXN0LWltcGwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIke3Rlc3RuZy50ZXN0Lm5hbWV9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0bmcudGVzdC5uYW1lIiB2YWx1ZT0iJHt0ZXN0bmcudGVzdC5uYW1lfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0idGVzdG5nLnRlc3RjbGllbnQiIHZhbHVlPSJBcHBwZXJtc1Rlc3RORyIvPgogICAgICA8L2FudGNhbGw+Ci0gICAgICAgIAorCiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS0ke2RlcGxveS5wbGF0Zm9ybX0taW1wbCIvPgogCiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJ1cGRhdGVlYXIiPiAKKworICAgIDx0YXJnZXQgbmFtZT0idXBkYXRlZWFyIj4KICAgICAgICA8ZWNobyBtZXNzYWdlPSJ1cGRhdGUgZmlsZSAke2Rpc3QuZGlyfS8ke2FwcC5maWxlLmV4dH0gd2l0aCBwZXJtaXNzaW9ucy54bWwiIC8+CiAKICAgICAgICAgPGphciBqYXJmaWxlPSIke2Rpc3QuZGlyfS8ke2FwcC5maWxlLmV4dH0iICB1cGRhdGU9InRydWUiID4KLSAgICAgICAgICAgIDxtZXRhaW5mICBkaXI9Im1ldGFkYXRhIiAgaW5jbHVkZXM9InBlcm1pc3Npb25zLnhtbCIgLz4gCi0gICAgICAgIDwvamFyPiAgIAorICAgICAgICAgICAgPG1ldGFpbmYgIGRpcj0ibWV0YWRhdGEiICBpbmNsdWRlcz0icGVybWlzc2lvbnMueG1sIiAvPgorICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3NlY3VyaXR5L2FwcHBlcm1zL21ldGFkYXRhL3Blcm1pc3Npb25zLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svc2VjdXJpdHkvYXBwcGVybXMvbWV0YWRhdGEvcGVybWlzc2lvbnMueG1sCmluZGV4IDc4N2RlNjMuLmExZTJjMTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svc2VjdXJpdHkvYXBwcGVybXMvbWV0YWRhdGEvcGVybWlzc2lvbnMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svc2VjdXJpdHkvYXBwcGVybXMvbWV0YWRhdGEvcGVybWlzc2lvbnMueG1sCkBAIC0xOCw5ICsxOCw5IEBACiAtLT4KIAogPHBlcm1pc3Npb25zIHhtbG5zPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIgotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotICAgIHhtbG5zOnhtbD0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiAKLSAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4bWxuczp4bWw9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUKICAgICAgIGh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvcGVybWlzc2lvbnNfNy54c2QiCiAgICAgdmVyc2lvbj0iNyI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svc2VjdXJpdHkvYXBwcGVybXMvbWV0YWRhdGEvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svc2VjdXJpdHkvYXBwcGVybXMvbWV0YWRhdGEvd2ViLnhtbAppbmRleCBjOWJlNmMzLi42YjRjMDI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3NlY3VyaXR5L2FwcHBlcm1zL21ldGFkYXRhL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9zZWN1cml0eS9hcHBwZXJtcy9tZXRhZGF0YS93ZWIueG1sCkBAIC0xNyw5ICsxNyw5IEBACiAKIC0tPgogCi08d2ViLWFwcCB2ZXJzaW9uPSIyLjUiIAotICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiAKLSAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCis8d2ViLWFwcCB2ZXJzaW9uPSIyLjUiCisgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3NlY3VyaXR5L2FwcHBlcm1zL3NyYy9qYXZhL0JlYW5MZWFmLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3NlY3VyaXR5L2FwcHBlcm1zL3NyYy9qYXZhL0JlYW5MZWFmLmphdmEKaW5kZXggZmFhMzU3Zi4uYzk4ODUwYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9zZWN1cml0eS9hcHBwZXJtcy9zcmMvamF2YS9CZWFuTGVhZi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svc2VjdXJpdHkvYXBwcGVybXMvc3JjL2phdmEvQmVhbkxlYWYuamF2YQpAQCAtMzAsMTkgKzMwLDE5IEBACiAKICAgICBTdHJpbmcgTUVTU0FHRV9QT1NUID0gIlBvc3RCZWFuTGVhZiI7CiAgICAgU3RyaW5nIE1FU1NBR0VfSEVMTE8gPSAiSGVsbG9CZWFuTGVhZiI7Ci0gICAgCisKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHB1YmxpYyB2b2lkIGFmdGVyQ29uc3RydWN0KCkgewogICAgICAgICBpZiAobXNnICE9IG51bGwgJiYgIW1zZy5nZXRNZXNzYWdlKCkuY29udGFpbnMoTUVTU0FHRV9QT1NUKSl7Ci0JICBtc2cuYXBwZW5kTWVzc2FnZShNRVNTQUdFX1BPU1QpOwotCX0KKyAgICAgIG1zZy5hcHBlbmRNZXNzYWdlKE1FU1NBR0VfUE9TVCk7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oKSB7CiAgICAgICAgIGlmIChtc2cgIT0gbnVsbCAmJiAhbXNnLmdldE1lc3NhZ2UoKS5jb250YWlucyhNRVNTQUdFX0hFTExPKSl7Ci0JICBtc2cuYXBwZW5kTWVzc2FnZShNRVNTQUdFX0hFTExPKTsKLQl9CisgICAgICBtc2cuYXBwZW5kTWVzc2FnZShNRVNTQUdFX0hFTExPKTsKKyAgICB9CiAgICAgICAgIHJldHVybiAiSGVsbG8gZnJvbTogIiArIHRoaXMuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiOyAiICsgU3lzdGVtLmlkZW50aXR5SGFzaENvZGUodGhpcyk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3NlY3VyaXR5L2FwcHBlcm1zL3NyYy9qYXZhL0JlYW5NZXNzYWdlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3NlY3VyaXR5L2FwcHBlcm1zL3NyYy9qYXZhL0JlYW5NZXNzYWdlLmphdmEKaW5kZXggYjdlM2ZhNi4uMTJhMjc1MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9zZWN1cml0eS9hcHBwZXJtcy9zcmMvamF2YS9CZWFuTWVzc2FnZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svc2VjdXJpdHkvYXBwcGVybXMvc3JjL2phdmEvQmVhbk1lc3NhZ2UuamF2YQpAQCAtNDAsOSArNDAsOSBAQAogICAgICAgICB0aGlzLm1lc3NhZ2UgKz0gbWVzc2FnZTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWFuTWVzc2FnZTogYXBwZW5kTWVzc2FnZT0iK3RoaXMubWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbygpIHsKICAgICAgICAgcmV0dXJuICJIZWxsbyBmcm9tOiAiICsgdGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSArICI7ICIgKyBTeXN0ZW0uaWRlbnRpdHlIYXNoQ29kZSh0aGlzKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svc2VjdXJpdHkvYXBwcGVybXMvc3JjL2phdmEvQmVhblJvb3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svc2VjdXJpdHkvYXBwcGVybXMvc3JjL2phdmEvQmVhblJvb3QuamF2YQppbmRleCBkOTM0ZmQxLi41YmJmYzEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3NlY3VyaXR5L2FwcHBlcm1zL3NyYy9qYXZhL0JlYW5Sb290LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9zZWN1cml0eS9hcHBwZXJtcy9zcmMvamF2YS9CZWFuUm9vdC5qYXZhCkBAIC01Nyw3ICs1Nyw3IEBACiAKICAgICAgICAgU3RyaW5nQnVmZmVyIGNoZWNrID0gbmV3IFN0cmluZ0J1ZmZlcigiIC1FSkIgdGVzdC0iKTsKIAotICAgICAgICAKKwogICAgICAgICBGaWxlUGVybWlzc2lvbiBmcCA9IG5ldyBGaWxlUGVybWlzc2lvbigKICAgICAgICAgICAgICAgICAiL3NjcmF0Y2gvc3BlaS9idWcvdGVzdC93YXIudHh0IiwgImRlbGV0ZSIpOwogICAgICAgICB0cnkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9zZWN1cml0eS9hcHBwZXJtcy9zcmMvamF2YS9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9zZWN1cml0eS9hcHBwZXJtcy9zcmMvamF2YS9UZXN0U2VydmxldC5qYXZhCmluZGV4IDIwY2Q2N2EuLmRiZGUwY2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svc2VjdXJpdHkvYXBwcGVybXMvc3JjL2phdmEvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3NlY3VyaXR5L2FwcHBlcm1zL3NyYy9qYXZhL1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogCiBwdWJsaWMgY2xhc3MgVGVzdFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7Ci0gICAKKwogICAgIEBFSkIKICAgICBwcml2YXRlIEJlYW5Sb290SW50ZXJmYWNlIHJvb3Q7CiAKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1JlcG9ydC5hcHBlbmQoInNlcnZsZXQgLSBzdWNjZXNzIGZvciBXQVIudHh0OyAiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrUmVwb3J0LmFwcGVuZCgic2VydmxldCAtIGJ5cGFzcyBmb3IgV0FSLnR4dDsgIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChBY2Nlc3NDb250cm9sRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrUmVwb3J0LmFwcGVuZCgic2VydmxldCAtIGZhaWxlZCBmb3IgV0FSLnR4dDsgIik7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTEyMiw5ICsxMjIsOSBAQAogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY3JTdHIgPSBjaGVja1JlcG9ydC50b1N0cmluZygpOwogICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigidGVzdDogIiArIGNyU3RyKTsKIAotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChoZWxsby5lcXVhbHMoaGVsbG8yKSAmJiAKKworCisgICAgICAgICAgICAgICAgICAgIGlmIChoZWxsby5lcXVhbHMoaGVsbG8yKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgIWNyU3RyLmNvbnRhaW5zKCJmYWlsZWQiKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgIWhlbGxvLmNvbnRhaW5zKCJmYWlsZWQiKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svc2VjdXJpdHkvYXBwcGVybXMvc3JjL3Rlc3QvQXBwcGVybXNUZXN0TkcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svc2VjdXJpdHkvYXBwcGVybXMvc3JjL3Rlc3QvQXBwcGVybXNUZXN0TkcuamF2YQppbmRleCA5YTMwMzE2Li4zMjQyZmFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3NlY3VyaXR5L2FwcHBlcm1zL3NyYy90ZXN0L0FwcHBlcm1zVGVzdE5HLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9zZWN1cml0eS9hcHBwZXJtcy9zcmMvdGVzdC9BcHBwZXJtc1Rlc3RORy5qYXZhCkBAIC0yOSwzOSArMjksMzkgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPQogICAgICAgICAiYXBwLXBlcm1zIjsKLSAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgc3RyQ29udGV4dFJvb3Q9Ii9hcHBwZXJtcyI7CiAKICAgICBzdGF0aWMgU3RyaW5nIHJlc3VsdCA9ICIiOwogICAgIFN0cmluZyBob3N0PVN5c3RlbS5nZXRQcm9wZXJ0eSgiaHR0cC5ob3N0Iik7CiAgICAgU3RyaW5nIHBvcnQ9U3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKTsKLSAgICAgICAgICAgCisKIAogICAgIEBUZXN0KGdyb3VwcyA9IHsgImluaXQiIH0pCiAgICAgcHVibGljIHZvaWQgc2luZ2xldG9uU3RhcnR1cCgpIHRocm93cyBFeGNlcHRpb257Ci0gICAgICAgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOyAgICAgICAKKyAgICAgICAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7CiAKICAgICAgICAgdHJ5ewogCiAgICAgICAgICAgcmVzdWx0ID0gdGVzdCgiU3RhcnR1cCIpOwotCSAgQXNzZXJ0LmFzc2VydEVxdWFscyhyZXN1bHQsIHRydWUsIlVuZXhwZWN0ZWQgUmVzdWx0cyIpOworICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhyZXN1bHQsIHRydWUsIlVuZXhwZWN0ZWQgUmVzdWx0cyIpOwogCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAKLQkgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICB0aHJvdyBuZXcgRXhjZXB0aW9uKGUpOworICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oZSk7CiAKICAgICAgICAgfQogICAgIH0KIAogICAgIEBUZXN0KGRlcGVuZHNPbkdyb3VwcyA9IHsgImluaXQuKiIgfSkKICAgICBwdWJsaWMgdm9pZCBzaW5nbGV0b25JbmplY3RMb29rdXAoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICBib29sZWFuIHJlc3VsdD1mYWxzZTsgICAgICAgIAorICAgICAgICBib29sZWFuIHJlc3VsdD1mYWxzZTsKIAogICAgICAgICB0cnl7CiAKLSAgICAgICAgICAgIHJlc3VsdCA9IHRlc3QoIkluamVjdExvb2t1cCIpOyAgICAgICAgICAgICAgIAotICAJICAgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVzdWx0LCB0cnVlLCJVbmV4cGVjdGVkIFJlc3VsdHMiKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHRlc3QoIkluamVjdExvb2t1cCIpOworICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVzdWx0LCB0cnVlLCJVbmV4cGVjdGVkIFJlc3VsdHMiKTsKIAogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0gIlRlc3Q6UGFzcyI7CiAgICAgICAgIFN0cmluZyBURVNUX0NBU0UgPSBURVNUX05BTUUgKyAiOiIgKyBjOwogICAgICAgICBib29sZWFuIHJlc3VsdD1mYWxzZTsKLSAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgc3RyQ29udGV4dFJvb3QgKyAKKyAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgc3RyQ29udGV4dFJvb3QgKwogICAgICAgICAgICAgICAgICAgICAgIi90ZXN0P3RjPSIgKyBjOwogICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigidXJsPSIrdXJsKTsKIApAQCAtODMsMTkgKzgzLDE5IEBACiAgICAgICAgIGludCBjb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgaWYgKGNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVuZXhwZWN0ZWQgcmV0dXJuIGNvZGU6ICIgKyBjb2RlKTsKLQl9IGVsc2UgeworICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwotCSAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0JICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKLQkgICAgICBpZiAobGluZS5jb250YWlucyhFWFBFQ1RFRF9SRVNQT05TRSkpIHsKKyAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOworICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CisgICAgICAgICAgaWYgKGxpbmUuY29udGFpbnMoRVhQRUNURURfUkVTUE9OU0UpKSB7CiAgICAgICAgICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCJsaW5lPSIrbGluZSk7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLQkJYnJlYWs7Ci0JICAgICAgfQotCSAgICB9Ci0gICAgICAgIH0gICAgCi0JcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBlY2hvKFN0cmluZyBtc2cpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svc2VjdXJpdHkvYmFzaWNhdXRoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svc2VjdXJpdHkvYmFzaWNhdXRoL2J1aWxkLnhtbAppbmRleCBhM2EyZmJkLi41MzE5YjU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3NlY3VyaXR5L2Jhc2ljYXV0aC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9zZWN1cml0eS9iYXNpY2F1dGgvYnVpbGQueG1sCkBAIC0yMCw0MCArMjAsNDAgQEAKIDxwcm9qZWN0IG5hbWU9InNlY3VyaXR5LWJhc2ljYXV0aCIgZGVmYXVsdD0iZGVmYXVsdCIgYmFzZWRpcj0iLiI+CiAgICAgPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiLz4KICAgICA8cHJvcGVydHkgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LWNvbmZpZy5wcm9wZXJ0aWVzIi8+Ci0gICAKLSAgICAKKworCiAgICAgPGRlc2NyaXB0aW9uPkJ1aWxkcywgdGVzdHMsIGFuZCBydW5zIHRoZSBwcm9qZWN0ICR7cHJvamVjdC5uYW1lfTwvZGVzY3JpcHRpb24+Ci0gICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPiAgIAorICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS10YXJnZXRzLnhtbCIvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW50ZXN0LHVuZGVwbG95Ii8+CiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1kZXBsb3kiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSIgLz4KLSAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1pbXBsIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS10ZXN0cyIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS0ke2RlcGxveS5wbGF0Zm9ybX0taW1wbCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQgIG5hbWU9InJ1bnRlc3QiPiAKKworICAgIDx0YXJnZXQgIG5hbWU9InJ1bnRlc3QiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bnRlc3QtaW1wbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9ImJhc2ljYXV0aCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0idGVzdG5nLnRlc3QubmFtZSIgdmFsdWU9IiR7dGVzdG5nLnRlc3QubmFtZX0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RuZy50ZXN0Y2xpZW50IiB2YWx1ZT0iQmFzaWNBdXRoVGVzdE5HIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAgCisKICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIAorCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXVzZXItY29tbW9uLSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJ0ZXN0dXNlcjMiLz4KQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9Imdyb3VwcyIgdmFsdWU9InRlc3Rncm91cDEwIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIj4KICAgICAgIDwhLS0gcmVtb3ZlIHRlc3QgdXNlcnMsIGp1c3QgY2xlYW51cC4gLS0+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbi0ke2RlcGxveS5wbGF0Zm9ybX0taW1wbCI+CkBAIC04Myw2ICs4Myw2IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbi0ke2RlcGxveS5wbGF0Zm9ybX0taW1wbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0iajJlZSIvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgICAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9zZWN1cml0eS9iYXNpY2F1dGgvc3JjL3Rlc3Qvc2VjdXJpdHkvQmFzaWNBdXRoVGVzdE5HLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3NlY3VyaXR5L2Jhc2ljYXV0aC9zcmMvdGVzdC9zZWN1cml0eS9CYXNpY0F1dGhUZXN0TkcuamF2YQppbmRleCA4OTVmNTY2Li41YTJiZTVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3NlY3VyaXR5L2Jhc2ljYXV0aC9zcmMvdGVzdC9zZWN1cml0eS9CYXNpY0F1dGhUZXN0TkcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3NlY3VyaXR5L2Jhc2ljYXV0aC9zcmMvdGVzdC9zZWN1cml0eS9CYXNpY0F1dGhUZXN0TkcuamF2YQpAQCAtMjgsOCArMjgsOCBAQAogICovCiBAVGVzdCAoZ3JvdXBzPXsicHVsc2UifSkKIHB1YmxpYyBjbGFzcyBCYXNpY0F1dGhUZXN0TkcgewotICAgIAotICAgIAorCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0KICAgICAgICAgInNlY3VyaXR5LWJhc2ljYXV0aC13ZWIiOwogCkBAIC00MSw3ICs0MSw3IEBACiAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0UykuaW50VmFsdWUoKTsKIAogICAgIFN0cmluZyB0ZXN0TmFtZTsKLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBNdXN0IGJlIGludm9rZWQgd2l0aCAoaG9zdCxwb3J0KSBhcmdzLgogICAgICAqIE5vdGhpbmcgZWxzZSBpcyBwYXJhbWV0ZXJpemVkLCB0aGlzIGlzIGludGVuZGVkIGFzCkBAIC02OSwxMCArNjksMTAgQEAKICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRGYWxzZSh0cnVlLCB0ZXN0TmFtZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBAVGVzdCAoZ3JvdXBzID0geyJwdWxzZSJ9KQogICAgIHB1YmxpYyB2b2lkIHRlc3RBdXRoR3JvdXBNYXBwZWRVc2VyKCkgewotICAgICAgICAKKwogICAgICAgICAvLyBHRVQgd2l0aCBhIHVzZXIgd2hvIG1hcHMgdGhyb3VnaCBncm91cAogICAgICAgICB0ZXN0TmFtZT0iQkFTSUMgYXV0aDogR3JvdXAgbWFwcGVkIHVzZXIsIHRlc3R1c2VyNDIiOwogICAgICAgICAvL2xvZyh0ZXN0TmFtZSk7CkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0RmFsc2UodHJ1ZSwgdGVzdE5hbWUpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QgKGdyb3VwcyA9IHsicHVsc2UifSkKICAgICBwdWJsaWMgdm9pZCB0ZXN0QXV0aE5vdEF1dGhvcml6ZWRVc2VyKCkgewogCkBAIC0xMDUsOCArMTA1LDggQEAKICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRGYWxzZSh0cnVlLCB0ZXN0TmFtZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgQFRlc3QgKGdyb3VwcyA9IHsicHVsc2UifSkgCisKKyAgICBAVGVzdCAoZ3JvdXBzID0geyJwdWxzZSJ9KQogICAgIHB1YmxpYyB2b2lkIHRlc3RBdXRoTm90VmFsaWRQYXNzd29yZCgpIHsKIAogICAgICAgICAvLyBHRVQgd2l0aCBhIHZhbGlkIHVzZXIsYmFkIHBhc3N3b3JkCkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICAgICAgb3Mud3JpdGUoIkdFVCAvYmFzaWNhdXRoL1Rlc3QuanNwIEhUVFAvMS4wXG4iLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZShhdXRoLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHMuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CkBAIC0xNTcsOSArMTU3LDkgQEAKICAgICAgICAgcy5jbG9zZSgpOwogICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJTdHJpbmcgbm90IGZvdW5kOiAiK3Jlc3VsdCk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGxvZyhTdHJpbmcgbWVzZykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obWVzZyk7CiAgICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9zZWN1cml0eS9oZWxsb3dvcmxkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svc2VjdXJpdHkvaGVsbG93b3JsZC9idWlsZC54bWwKaW5kZXggNjkwZWFhMC4uOGNlMjIxZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9zZWN1cml0eS9oZWxsb3dvcmxkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3NlY3VyaXR5L2hlbGxvd29ybGQvYnVpbGQueG1sCkBAIC0yMCwzNCArMjAsMzQgQEAKIDxwcm9qZWN0IG5hbWU9ImhlbGxvLWpzcC1zZWN1cmUiIGRlZmF1bHQ9ImRlZmF1bHQiIGJhc2VkaXI9Ii4iPgogICAgIDxwcm9wZXJ0eSBmaWxlPSJidWlsZC5wcm9wZXJ0aWVzIi8+CiAgICAgPHByb3BlcnR5IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS1jb25maWcucHJvcGVydGllcyIvPgotICAgCi0gICAgCisKKwogICAgIDxkZXNjcmlwdGlvbj5CdWlsZHMsIHRlc3RzLCBhbmQgcnVucyB0aGUgcHJvamVjdCBIZWxsbyBKU1AgQXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgotICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4gICAKKyAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC8ke2RlcGxveS5wbGF0Zm9ybX0tdGFyZ2V0cy54bWwiLz4KLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJ1bnRlc3QsdW5kZXBsb3kiIC8+ICAgICAgICAKKworICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxkZXBsb3kscnVudGVzdCx1bmRlcGxveSIgLz4KICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWRlcGxveSIgZGVwZW5kcz0iYnVpbGQsZGVwbG95IiAvPgotICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlLXRlc3RzIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1pbXBsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+IAorCisgICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudGVzdC1pbXBsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iaGVsbG9qc3BzZWN1cmUiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RuZy50ZXN0Lm5hbWUiIHZhbHVlPSIke3Rlc3RuZy50ZXN0Lm5hbWV9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0bmcudGVzdGNsaWVudCIgdmFsdWU9IkhlbGxvU2VjdXJpdHlUZXN0TkciLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgICAgICAgCisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgCisKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9zZWN1cml0eS9oZWxsb3dvcmxkL21ldGFkYXRhL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3NlY3VyaXR5L2hlbGxvd29ybGQvbWV0YWRhdGEvd2ViLnhtbAppbmRleCAwMGRkNzVhLi4xNGRhNzExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3NlY3VyaXR5L2hlbGxvd29ybGQvbWV0YWRhdGEvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3NlY3VyaXR5L2hlbGxvd29ybGQvbWV0YWRhdGEvd2ViLnhtbApAQCAtMzIsNyArMzIsNyBAQAogICAgIDx1cmwtcGF0dGVybj4vc2ltcGxlc2VydmxldDwvdXJsLXBhdHRlcm4+CiAgIDwvc2VydmxldC1tYXBwaW5nPgogICA8d2VsY29tZS1maWxlLWxpc3Q+Ci0JPHdlbGNvbWUtZmlsZT5oZWxsby5qc3A8L3dlbGNvbWUtZmlsZT4KKyAgICA8d2VsY29tZS1maWxlPmhlbGxvLmpzcDwvd2VsY29tZS1maWxlPgogICAgIDwvd2VsY29tZS1maWxlLWxpc3Q+CiAgIDxzZWN1cml0eS1jb25zdHJhaW50PgogICAgICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CkBAIC02MCw2ICs2MCw2IEBACiAgICAgICAgIDxkZXNjcmlwdGlvbi8+CiAgICAgICAgIDxyb2xlLW5hbWU+cm9sZTE8L3JvbGUtbmFtZT4KICAgICA8L3NlY3VyaXR5LXJvbGU+Ci0gIAorCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svc2VjdXJpdHkvaGVsbG93b3JsZC9zcmMvamF2YS9IZWxsb1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svc2VjdXJpdHkvaGVsbG93b3JsZC9zcmMvamF2YS9IZWxsb1NlcnZsZXQuamF2YQppbmRleCA2MWY0Mjg4Li44ODgxYTc1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3NlY3VyaXR5L2hlbGxvd29ybGQvc3JjL2phdmEvSGVsbG9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9zZWN1cml0eS9oZWxsb3dvcmxkL3NyYy9qYXZhL0hlbGxvU2VydmxldC5qYXZhCkBAIC01MSw0NSArNTEsNDUgQEAKICAgICAgICAgICAgICAgICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKIAotCSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VydmxldCBwcm9jZXNzaW5nIGRvIGdldC4uIik7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2bGV0IHByb2Nlc3NpbmcgZG8gZ2V0Li4iKTsKIAotCXJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKLQlQcmludFdyaXRlciB3cml0ZXIgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKKyAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisgICAgUHJpbnRXcml0ZXIgd3JpdGVyID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CiAKLQl3cml0ZXIucHJpbnRsbigiPGh0bWw+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjxoZWFkPiIpOwotCXdyaXRlci5wcmludGxuKCI8dGl0bGU+U2FtcGxlIEFwcGxpY2F0aW9uIFNlcnZsZXQgUGFnZTwvdGl0bGU+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjwvaGVhZD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPGJvZHkgYmdjb2xvcj13aGl0ZT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPGh0bWw+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjxoZWFkPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8dGl0bGU+U2FtcGxlIEFwcGxpY2F0aW9uIFNlcnZsZXQgUGFnZTwvdGl0bGU+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjwvaGVhZD4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPGJvZHkgYmdjb2xvcj13aGl0ZT4iKTsKIAotCXdyaXRlci5wcmludGxuKCI8dGFibGUgYm9yZGVyPVwiMFwiPiIpOwotCXdyaXRlci5wcmludGxuKCI8dHI+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjx0ZD4iKTsKLQkvL3dyaXRlci5wcmludGxuKCI8aW1nIHNyYz1cImltYWdlcy90b21jYXQuZ2lmXCI+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjwvdGQ+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjx0ZD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPGgxPlNhbXBsZSBBcHBsaWNhdGlvbiBTZXJ2bGV0PC9oMT4iKTsKLQl3cml0ZXIucHJpbnRsbigiVGhpcyBpcyB0aGUgb3V0cHV0IG9mIGEgc2VydmxldCB0aGF0IGlzIHBhcnQgb2YiKTsKLQl3cml0ZXIucHJpbnRsbigidGhlIEhlbGxvLCBXb3JsZCBhcHBsaWNhdGlvbi4gIEl0IGRpc3BsYXlzIHRoZSIpOwotCXdyaXRlci5wcmludGxuKCJyZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGUgcmVxdWVzdCB3ZSBhcmUgY3VycmVudGx5Iik7Ci0Jd3JpdGVyLnByaW50bG4oInByb2Nlc3NpbmcuIik7Ci0Jd3JpdGVyLnByaW50bG4oIjwvdGQ+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjwvdHI+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjwvdGFibGU+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjx0YWJsZSBib3JkZXI9XCIwXCI+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPHRkPiIpOworICAgIC8vd3JpdGVyLnByaW50bG4oIjxpbWcgc3JjPVwiaW1hZ2VzL3RvbWNhdC5naWZcIj4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPC90ZD4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPHRkPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8aDE+U2FtcGxlIEFwcGxpY2F0aW9uIFNlcnZsZXQ8L2gxPiIpOworICAgIHdyaXRlci5wcmludGxuKCJUaGlzIGlzIHRoZSBvdXRwdXQgb2YgYSBzZXJ2bGV0IHRoYXQgaXMgcGFydCBvZiIpOworICAgIHdyaXRlci5wcmludGxuKCJ0aGUgSGVsbG8sIFdvcmxkIGFwcGxpY2F0aW9uLiAgSXQgZGlzcGxheXMgdGhlIik7CisgICAgd3JpdGVyLnByaW50bG4oInJlcXVlc3QgaGVhZGVycyBmcm9tIHRoZSByZXF1ZXN0IHdlIGFyZSBjdXJyZW50bHkiKTsKKyAgICB3cml0ZXIucHJpbnRsbigicHJvY2Vzc2luZy4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPC90ZD4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPC90cj4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPC90YWJsZT4iKTsKIAotCXdyaXRlci5wcmludGxuKCI8dGFibGUgYm9yZGVyPVwiMFwiIHdpZHRoPVwiMTAwJVwiPiIpOwotCUVudW1lcmF0aW9uIG5hbWVzID0gcmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOwotCXdoaWxlIChuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSkgewotCSAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpIG5hbWVzLm5leHRFbGVtZW50KCk7Ci0JICAgIHdyaXRlci5wcmludGxuKCI8dHI+Iik7Ci0JICAgIHdyaXRlci5wcmludGxuKCIgIDx0aCBhbGlnbj1cInJpZ2h0XCI+IiArIG5hbWUgKyAiOjwvdGg+Iik7Ci0JICAgIHdyaXRlci5wcmludGxuKCIgIDx0ZD4iICsgcmVxdWVzdC5nZXRIZWFkZXIobmFtZSkgKyAiPC90ZD4iKTsKLQkgICAgd3JpdGVyLnByaW50bG4oIjwvdHI+Iik7Ci0JfQotCXdyaXRlci5wcmludGxuKCI8L3RhYmxlPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8dGFibGUgYm9yZGVyPVwiMFwiIHdpZHRoPVwiMTAwJVwiPiIpOworICAgIEVudW1lcmF0aW9uIG5hbWVzID0gcmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworICAgIHdoaWxlIChuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpIG5hbWVzLm5leHRFbGVtZW50KCk7CisgICAgICAgIHdyaXRlci5wcmludGxuKCI8dHI+Iik7CisgICAgICAgIHdyaXRlci5wcmludGxuKCIgIDx0aCBhbGlnbj1cInJpZ2h0XCI+IiArIG5hbWUgKyAiOjwvdGg+Iik7CisgICAgICAgIHdyaXRlci5wcmludGxuKCIgIDx0ZD4iICsgcmVxdWVzdC5nZXRIZWFkZXIobmFtZSkgKyAiPC90ZD4iKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIjwvdHI+Iik7CisgICAgfQorICAgIHdyaXRlci5wcmludGxuKCI8L3RhYmxlPiIpOwogCi0Jd3JpdGVyLnByaW50bG4oIjwvYm9keT4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC9odG1sPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L2JvZHk+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjwvaHRtbD4iKTsKIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9zZWN1cml0eS9oZWxsb3dvcmxkL3NyYy90ZXN0L0hlbGxvU2VjdXJpdHlUZXN0TkcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svc2VjdXJpdHkvaGVsbG93b3JsZC9zcmMvdGVzdC9IZWxsb1NlY3VyaXR5VGVzdE5HLmphdmEKaW5kZXggNjA0M2I5Yy4uYzIwMjc5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay9zZWN1cml0eS9oZWxsb3dvcmxkL3NyYy90ZXN0L0hlbGxvU2VjdXJpdHlUZXN0TkcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3NlY3VyaXR5L2hlbGxvd29ybGQvc3JjL3Rlc3QvSGVsbG9TZWN1cml0eVRlc3RORy5qYXZhCkBAIC03OCw3ICs3OCw3IEBACiAvLyAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwogLy8gICAgICAgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOwogLy8gICAgICAgIFN0cmluZyB0ZXN0TGluZSA9IG51bGw7Ci0vLwlTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSJKU1AgVGVzdCBQYWdlIjsKKy8vICAgIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRSA9IkpTUCBUZXN0IFBhZ2UiOwogLy8gICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKIC8vICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKEVYUEVDVEVEX1JFU1BPTlNFKSE9LTEpewogLy8gICAgICAgICAgICAgICAgcmVzdWx0PXRydWU7CkBAIC0xMDEsOSArMTAxLDkgQEAKIC8qCiAgICAgQFRlc3QoZ3JvdXBzPXsicHVsc2UifSkgLy90ZXN0IG1ldGhvZCBmb3Igc2VydmVyCiAgICAgcHVibGljIHZvaWQgdGVzdFNlcnZlclJ1bm5pbmcoKSB0aHJvd3MgRXhjZXB0aW9uewotCSAgICAvL1lvdXIgc2VydmVyIGlzIHVwIGFuZCBydW5uaW5nIQotCSAgICAvLwotCVN0cmluZyB0ZXN0dXJsID0gImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0OworICAgICAgICAvL1lvdXIgc2VydmVyIGlzIHVwIGFuZCBydW5uaW5nIQorICAgICAgICAvLworICAgIFN0cmluZyB0ZXN0dXJsID0gImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0OwogICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiVVJMIGlzOiAiK3Rlc3R1cmwpOwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCh0ZXN0dXJsKTsKICAgICAgICAgLy9lY2hvKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpAQCAtMTExLDcgKzExMSw3IEBACiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKIAotCUlucHV0U3RyZWFtIGlzID0gY29ubi5nZXRJbnB1dFN0cmVhbSgpOworICAgIElucHV0U3RyZWFtIGlzID0gY29ubi5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIAogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3Rlc3RuZy90ZXN0bmdfY2x1c3Rlci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3Rlc3RuZy90ZXN0bmdfY2x1c3Rlci54bWwKaW5kZXggMTNmMzUxYi4uMjE3ZWVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay90ZXN0bmcvdGVzdG5nX2NsdXN0ZXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svdGVzdG5nL3Rlc3RuZ19jbHVzdGVyLnhtbApAQCAtMTcsNyArMTcsNyBAQAogLS0+CiAKIDwhRE9DVFlQRSBzdWl0ZSBTWVNURU0gImh0dHA6Ly90ZXN0bmcub3JnL3Rlc3RuZy0xLjAuZHRkIiA+Ci0gCisKIDxzdWl0ZSBuYW1lPSJRdWlja0xvb2tDbHVzdGVyVGVzdHMiIHZlcmJvc2U9IjIiID4KICAgPHRlc3QgbmFtZT0iY2x1c3Rlcl9zZXR1cCI+CiAgICAgPGNsYXNzZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3Rlc3RuZy90ZXN0bmdfZGVidWcueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay90ZXN0bmcvdGVzdG5nX2RlYnVnLnhtbAppbmRleCBkNDkzYTUwLi42OGE5MDBmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3Rlc3RuZy90ZXN0bmdfZGVidWcueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svdGVzdG5nL3Rlc3RuZ19kZWJ1Zy54bWwKQEAgLTE3LDE0ICsxNywxNCBAQAogLS0+CiAKIDwhRE9DVFlQRSBzdWl0ZSBTWVNURU0gImh0dHA6Ly90ZXN0bmcub3JnL3Rlc3RuZy0xLjAuZHRkIiA+Ci0gCisKIDxzdWl0ZSBuYW1lPSJRdWlja0xvb2tUZXN0cyIgdmVyYm9zZT0iMiIgPgogICA8cGFyYW1ldGVyIG5hbWU9ImFkbWluLnVybCIgdmFsdWU9Imh0dHA6Ly9sb2NhbGhvc3Q6NDg0OC9fX2FzYWRtaW4iLz4KICAgPHBhcmFtZXRlciBuYW1lPSJhZG1pbi51c2VyIiB2YWx1ZT0iYWRtaW4iLz4KICAgPHBhcmFtZXRlciBuYW1lPSJhZG1pbi5wYXNzd29yZCIgdmFsdWU9IiIvPgogICA8cGFyYW1ldGVyIG5hbWU9ImFkbWluLmNvbnNvbGUudXJsIiB2YWx1ZT0iaHR0cDovL2xvY2FsaG9zdDo0ODQ4LyIvPgogICA8cGFyYW1ldGVyIG5hbWU9InJlc291cmNlcy54bWwucmVsYXRpdmUucGF0aCIgdmFsdWU9ImFkbWluL3Jlc291cmNlcy9yZXNvdXJjZXMueG1sIi8+Ci0gIAorCiA8IS0tIEFNWCAtLT4KICAgPHBhcmFtZXRlciBuYW1lPSJhbXguZGVidWciIHZhbHVlPSJ0cnVlIi8+CiA8IS0tIEFNWDogcG9ydCBvZiB0aGUgSk1YIFJNSSAtLT4KQEAgLTM5LDExICszOSwxMSBAQAogICAgICAgPGNsYXNzIG5hbWU9ImFteHRlc3QuQU1YT3RoZXJUZXN0cyIvPgogICAgICAgPC9jbGFzc2VzPgogICA8L3Rlc3Q+Ci0gIAorCiAgIDx0ZXN0IG5hbWU9ImFkbWluY29uc29sZV90ZXN0cyI+Ci0JPGNsYXNzZXM+Ci0JCTxjbGFzcyBuYW1lPSJ0ZXN0LmFkbWluLkFkbWluQ29uc29sZVRlc3RzIi8+Ci0JPC9jbGFzc2VzPgorICAgIDxjbGFzc2VzPgorICAgICAgICA8Y2xhc3MgbmFtZT0idGVzdC5hZG1pbi5BZG1pbkNvbnNvbGVUZXN0cyIvPgorICAgIDwvY2xhc3Nlcz4KICAgPC90ZXN0PgogCiAgIDx0ZXN0IG5hbWU9ImNsYXNzbG9hZGVyX2pzZiI+CkBAIC05NSw3ICs5NSw3IEBACiAgICAgPGNsYXNzZXM+CiAgICAgICAgPGNsYXNzIG5hbWU9ImVqYjMwLnNlc3Npb24uaGVsbG8udGVzdC5UZXN0Q2xpZW50IiAvPgogICAgIDwvY2xhc3Nlcz4KLSAgPC90ZXN0Pi0tPiAKKyAgPC90ZXN0Pi0tPgogICA8dGVzdCBuYW1lPSJhc2FkbWluX3Rlc3RzIj4KICAgICA8Y2xhc3Nlcz4KICAgICAgIDxjbGFzcyBuYW1lPSJ0ZXN0LmFkbWluLkp2bU9wdGlvblRlc3RzIi8+CkBAIC0xMDMsNiArMTAzLDYgQEAKICAgICAgIDxjbGFzcyBuYW1lPSJ0ZXN0LmFkbWluLldlYnRpZXJUZXN0cyIvPgogICAgIDwvY2xhc3Nlcz4KICAgPC90ZXN0PgotIAorCiA8L3N1aXRlPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3Rlc3RuZy90ZXN0bmdfZW0ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay90ZXN0bmcvdGVzdG5nX2VtLnhtbAppbmRleCA1ZDRjZDU5Li43MjJhZDRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3Rlc3RuZy90ZXN0bmdfZW0ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svdGVzdG5nL3Rlc3RuZ19lbS54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIC0tPgogCiA8IURPQ1RZUEUgc3VpdGUgU1lTVEVNICJodHRwOi8vdGVzdG5nLm9yZy90ZXN0bmctMS4wLmR0ZCIgPgotIAorCiA8c3VpdGUgbmFtZT0iR0ZfUUxfRW1iZWRkZWRfVGVzdHMiIHZlcmJvc2U9IjIiID4KICAgPHRlc3QgbmFtZT0iZW1iZWRkZWRfdGVzdHMiPgogICAgICAgICA8Y2xhc3Nlcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svdGVzdG5nL3Rlc3RuZ19nZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3Rlc3RuZy90ZXN0bmdfZ2QueG1sCmluZGV4IDkyNThjN2MuLmNhNDA4OWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svdGVzdG5nL3Rlc3RuZ19nZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay90ZXN0bmcvdGVzdG5nX2dkLnhtbApAQCAtMTcsOSArMTcsOSBAQAogLS0+CiAKIDwhRE9DVFlQRSBzdWl0ZSBTWVNURU0gImh0dHA6Ly90ZXN0bmcub3JnL3Rlc3RuZy0xLjAuZHRkIiA+Ci0gCisKIDxzdWl0ZSBuYW1lPSJRdWlja0xvb2tUZXN0cyIgdmVyYm9zZT0iMiI+Ci0gICAgCisKICAgICA8cGFyYW1ldGVyIG5hbWU9ImFkbWluLnVybCIgdmFsdWU9Imh0dHA6Ly9sb2NhbGhvc3Q6NDg0OC9fX2FzYWRtaW4iIC8+CiAgICAgPHBhcmFtZXRlciBuYW1lPSJhZG1pbi51c2VyIiB2YWx1ZT0iYWRtaW4iIC8+CiAgICAgPHBhcmFtZXRlciBuYW1lPSJhZG1pbi5wYXNzd29yZCIgdmFsdWU9IiIgLz4KQEAgLTUzLDYzICs1Myw2MyBAQAogICAgICAgICAgICAgPGNsYXNzIG5hbWU9InRlc3QuYWRtaW4uQWRtaW5Db25zb2xlVGVzdHMiIC8+CiAgICAgICAgIDwvY2xhc3Nlcz4KICAgICA8L3Rlc3Q+Ci0gICAgCisKICAgICA8dGVzdCBuYW1lPSJyZXN0X3Rlc3RzIj4KICAgICAgICAgPGNsYXNzZXM+CiAgICAgICAgICAgICA8Y2xhc3MgbmFtZT0idGVzdC5hZG1pbi5SZXN0VGVzdHMiIC8+CiAgICAgICAgIDwvY2xhc3Nlcz4KICAgICA8L3Rlc3Q+Ci0gICAgCisKICAgICA8dGVzdCBuYW1lPSJkZXBsb3lfdXBsb2FkX3Rlc3QiPgogICAgICAgICA8Y2xhc3Nlcz4KICAgICAgICAgICAgIDxjbGFzcyBuYW1lPSJ0ZXN0LndlYi5qc3AuaGVsbG8uSGVsbG9KU1BUZXN0TkciIC8+CiAgICAgICAgIDwvY2xhc3Nlcz4KICAgICA8L3Rlc3Q+Ci0gICAgCisKICAgICA8dGVzdCBuYW1lPSJqc2ZfaGVsbG9fd29ybGQiPgogICAgICAgICA8Y2xhc3Nlcz4KICAgICAgICAgICAgIDxjbGFzcyBuYW1lPSJ0ZXN0LmpzZi5hc3Ryb2xvZ2VyLkpTRldlYlRlc3RORyIgLz4KICAgICAgICAgPC9jbGFzc2VzPgogICAgIDwvdGVzdD4KLSAgICAKKwogICAgIDx0ZXN0IG5hbWU9ImpzZl9pbmplY3Rpb24iPgogICAgICAgICA8Y2xhc3Nlcz4KICAgICAgICAgICAgIDxjbGFzcyBuYW1lPSJ0ZXN0LndlYi5qc2ZpbmplY3Rpb24uSlNGSW5qZWN0aW9uVGVzdE5HIiAvPgogICAgICAgICA8L2NsYXNzZXM+CiAgICAgPC90ZXN0PgotICAgIAorCiAgICAgPHRlc3QgbmFtZT0iamRiY191c2VyX3R4Ij4KICAgICAgICAgPGNsYXNzZXM+CiAgICAgICAgICAgICA8Y2xhc3MgbmFtZT0idGVzdC5qZGJjLmpkYmN1c2VydHguSmRiY1VzZXJUeFRlc3RORyIgLz4KICAgICAgICAgPC9jbGFzc2VzPgogICAgIDwvdGVzdD4KLSAgICAKKwogICAgIDx0ZXN0IG5hbWU9ImpwYV9pbmplY3RfZW1mIj4KICAgICAgICAgPGNsYXNzZXM+CiAgICAgICAgICAgICA8Y2xhc3MgbmFtZT0idGVzdC5qcGEuanBhaW5qZWN0ZW1mLkpwYUluamVjdEVNRlRlc3RORyIgLz4KICAgICAgICAgPC9jbGFzc2VzPgogICAgIDwvdGVzdD4KLSAgICAKKwogICAgIDx0ZXN0IG5hbWU9ImpwYV92YWxpZGF0aW9uIj4KICAgICAgICAgPGNsYXNzZXM+CiAgICAgICAgICAgICA8Y2xhc3MKICAgICAgICAgICAgICAgICBuYW1lPSJ0ZXN0LmpwYS5qcGF2YWxpZGF0aW9uLkpwYVZhbGlkYXRpb25UZXN0TkciIC8+CiAgICAgICAgIDwvY2xhc3Nlcz4KICAgICA8L3Rlc3Q+Ci0gICAgCisKICAgICA8dGVzdCBuYW1lPSJzZWN1cml0eV9oZWxsb19qc3AiPgogICAgICAgICA8Y2xhc3Nlcz4KICAgICAgICAgICAgIDxjbGFzcwogICAgICAgICAgICAgICAgIG5hbWU9InRlc3Quc2VjdXJpdHkuaGVsbG9qc3AuSGVsbG9TZWN1cml0eVRlc3RORyIgLz4KICAgICAgICAgPC9jbGFzc2VzPgogICAgIDwvdGVzdD4KLSAgICAKKwogICAgIDx0ZXN0IG5hbWU9InNlY3VyaXR5X2hlbGxvX2Jhc2ljYXV0aCI+CiAgICAgICAgIDxjbGFzc2VzPgogICAgICAgICAgICAgPGNsYXNzIG5hbWU9InRlc3Quc2VjdXJpdHkuYmFzaWNhdXRoLkJhc2ljQXV0aFRlc3RORyIgLz4KICAgICAgICAgPC9jbGFzc2VzPgogICAgIDwvdGVzdD4KLSAgICAKKwogICAgIDx0ZXN0IG5hbWU9InNlY3VyaXR5X2FwcF9wZXJtaXNzaW9ucyI+CiAgICAgICAgIDxjbGFzc2VzPgogICAgICAgICAgICAgPGNsYXNzIG5hbWU9InRlc3Quc2VjdXJpdHkuYXBwcGVybXMuQXBwcGVybXNUZXN0TkciIC8+CkBAIC0xMjAsMjYgKzEyMCwyNiBAQAogICAgICAgICAgICAgPGNsYXNzIG5hbWU9InRlc3QuZWpiLnJlbW90ZXZpZXcuUmVtb3RlVmlld1Rlc3RORyIgLz4KICAgICAgICAgPC9jbGFzc2VzPgogICAgIDwvdGVzdD4KLSAgICAKKwogICAgIDx0ZXN0IG5hbWU9ImVqYl9zaW5nbGV0b25fZWFyX3JlZGVwbG95Ij4KICAgICAgICAgPGNsYXNzZXM+CiAgICAgICAgICAgICA8Y2xhc3MgbmFtZT0idGVzdC5lamIuc2luZ2xldG9uLlNpbmdsZXRvblRlc3RORyIgLz4KICAgICAgICAgPC9jbGFzc2VzPgogICAgIDwvdGVzdD4KLSAgICAKKwogICAgIDx0ZXN0IG5hbWU9ImVqYl9zdGF0ZWZ1bF9jbXRfbmlfd2FyIj4KICAgICAgICAgPGNsYXNzZXM+CiAgICAgICAgICAgICA8Y2xhc3MgbmFtZT0idGVzdC5lamIuc2xzYm5pY210LlNsc2JuaWNtdFRlc3RORyIgLz4KICAgICAgICAgICAgIDxjbGFzcyBuYW1lPSJ0ZXN0LmVqYi5zZnVsbm9pLlNmdWxub2lUZXN0TkciIC8+CiAgICAgICAgIDwvY2xhc3Nlcz4KICAgICA8L3Rlc3Q+Ci0gICAgCisKICAgICA8dGVzdCBuYW1lPSJlamJfY21wX2VhciI+CiAgICAgICAgIDxjbGFzc2VzPgogICAgICAgICAgICAgPGNsYXNzIG5hbWU9InRlc3QuQ21wUm9zdGVyVGVzdE5HIiAvPgogICAgICAgICA8L2NsYXNzZXM+CiAgICAgPC90ZXN0PgotICAgIAorCiAgICAgPCEtLSBNREIgdGVzdHMgcGFyYW1ldGVycyAtLT4KICAgICA8cGFyYW1ldGVyIG5hbWU9Ik1EQl9BUFBfRElSIiB2YWx1ZT0iLi9kaXN0L21kYi8iIC8+CiAgICAgPHBhcmFtZXRlciBuYW1lPSJCQVRDSF9GSUxFMSIgdmFsdWU9ImVqYi9tZGIvY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIiAvPgpAQCAtMTQ5LDE0ICsxNDksMTQgQEAKICAgICAgICAgICAgIDxjbGFzcyBuYW1lPSJ0ZXN0Lm1kYi5NREJUZXN0cyIgLz4KICAgICAgICAgPC9jbGFzc2VzPgogICAgIDwvdGVzdD4KLSAgICAKKwogICAgIDx0ZXN0IG5hbWU9ImJ2X3NlcnZsZXRfc2ltcGxlIj4KICAgICAgICAgPGNsYXNzZXM+CiAgICAgICAgICAgICA8Y2xhc3MKICAgICAgICAgICAgICAgICBuYW1lPSJ0ZXN0LmJ2LnNlcnZsZXQuc2ltcGxlLlNpbXBsZUJWU2VydmxldFRlc3RORyIgLz4KICAgICAgICAgPC9jbGFzc2VzPgogICAgIDwvdGVzdD4KLSAgICAKKwogICAgIDx0ZXN0IG5hbWU9IndlbGRfdGVzdHMiPgogICAgICAgICA8Y2xhc3Nlcz4KICAgICAgICAgICAgIDxjbGFzcyBuYW1lPSJ0ZXN0LndlYi5udW1iZXJndWVzcy5OdW1iZXJHdWVzc1Rlc3RORyIgLz4KQEAgLTE2NCw3ICsxNjQsNyBAQAogICAgICAgICAgICAgPGNsYXNzIG5hbWU9InRlc3Qud2ViLmV4dGVuc2lvbnMuRXh0ZW5zaW9uc1Rlc3RORyIgLz4KICAgICAgICAgPC9jbGFzc2VzPgogICAgIDwvdGVzdD4KLSAgICAKKwogICAgIDx0ZXN0IG5hbWU9ImFzYWRtaW5fdGVzdHMiPgogICAgICAgICA8Y2xhc3Nlcz4KICAgICAgICAgICAgIDxjbGFzcyBuYW1lPSJ0ZXN0LmFkbWluLkp2bU9wdGlvblRlc3RzIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay90ZXN0bmcvdGVzdG5nX2dkX3NlY3VyaXR5LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svdGVzdG5nL3Rlc3RuZ19nZF9zZWN1cml0eS54bWwKaW5kZXggMDIxOWI1Ni4uOGMyZmViZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay90ZXN0bmcvdGVzdG5nX2dkX3NlY3VyaXR5LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3Rlc3RuZy90ZXN0bmdfZ2Rfc2VjdXJpdHkueG1sCkBAIC0xNywxNCArMTcsMTQgQEAKIC0tPgogCiA8IURPQ1RZUEUgc3VpdGUgU1lTVEVNICJodHRwOi8vdGVzdG5nLm9yZy90ZXN0bmctMS4wLmR0ZCIgPgotIAorCiA8c3VpdGUgbmFtZT0iUXVpY2tMb29rVGVzdHMiIHZlcmJvc2U9IjIiID4KICAgPHBhcmFtZXRlciBuYW1lPSJhZG1pbi51cmwiIHZhbHVlPSJodHRwOi8vbG9jYWxob3N0OjQ4NDgvX19hc2FkbWluIi8+CiAgIDxwYXJhbWV0ZXIgbmFtZT0iYWRtaW4udXNlciIgdmFsdWU9ImFkbWluIi8+CiAgIDxwYXJhbWV0ZXIgbmFtZT0iYWRtaW4ucGFzc3dvcmQiIHZhbHVlPSIiLz4KICAgPHBhcmFtZXRlciBuYW1lPSJhZG1pbi5jb25zb2xlLnVybCIgdmFsdWU9Imh0dHA6Ly9sb2NhbGhvc3Q6NDg0OC8iLz4KICAgPHBhcmFtZXRlciBuYW1lPSJyZXNvdXJjZXMueG1sLnJlbGF0aXZlLnBhdGgiIHZhbHVlPSJhZG1pbi9yZXNvdXJjZXMvcmVzb3VyY2VzLnhtbCIvPgotICAKKwogICA8dGVzdCBuYW1lPSJhZG1pbmNsaV90ZXN0cyI+CiAgICAgICAgIDxjbGFzc2VzPgogICAgICAgICAgICAgICAgIDxjbGFzcyBuYW1lPSJ0ZXN0LmFkbWluY2xpLlJlc3RhcnREb21haW5UZXN0cyIvPgpAQCAtNDYsMTEgKzQ2LDExIEBACiAgICAgICA8Y2xhc3MgbmFtZT0iYW14dGVzdC5BTVhPdGhlclRlc3RzIi8+CiAgICAgPC9jbGFzc2VzPgogICA8L3Rlc3Q+Ci0gIAorCiAgIDx0ZXN0IG5hbWU9ImFkbWluY29uc29sZV90ZXN0cyI+Ci0JPGNsYXNzZXM+Ci0JCTxjbGFzcyBuYW1lPSJ0ZXN0LmFkbWluLkFkbWluQ29uc29sZVRlc3RzIi8+Ci0JPC9jbGFzc2VzPgorICAgIDxjbGFzc2VzPgorICAgICAgICA8Y2xhc3MgbmFtZT0idGVzdC5hZG1pbi5BZG1pbkNvbnNvbGVUZXN0cyIvPgorICAgIDwvY2xhc3Nlcz4KICAgPC90ZXN0PgogICA8dGVzdCBuYW1lPSJyZXN0X3Rlc3RzIj4KICAgICA8Y2xhc3Nlcz4KQEAgLTEwOSwxNSArMTA5LDE1IEBACiAgIDwvdGVzdD4KICAgPHRlc3QgbmFtZT0iZWpiX3NpbmdsZXRvbl9lYXJfcmVkZXBsb3kiPgogICAgIDxjbGFzc2VzPgotCTxjbGFzcyBuYW1lPSJ0ZXN0LmVqYi5zaW5nbGV0b24uU2luZ2xldG9uVGVzdE5HIiAvPgorICAgIDxjbGFzcyBuYW1lPSJ0ZXN0LmVqYi5zaW5nbGV0b24uU2luZ2xldG9uVGVzdE5HIiAvPgogICAgIDwvY2xhc3Nlcz4KICAgPC90ZXN0PgogICA8dGVzdCBuYW1lPSJlamJfc3RhdGVmdWxfY210X25pX3dhciI+CiAgICAgPGNsYXNzZXM+Ci0JPGNsYXNzIG5hbWU9InRlc3QuZWpiLnNsc2JuaWNtdC5TbHNibmljbXRUZXN0TkciIC8+Ci0JPGNsYXNzIG5hbWU9InRlc3QuZWpiLnNmdWxub2kuU2Z1bG5vaVRlc3RORyIgLz4KKyAgICA8Y2xhc3MgbmFtZT0idGVzdC5lamIuc2xzYm5pY210LlNsc2JuaWNtdFRlc3RORyIgLz4KKyAgICA8Y2xhc3MgbmFtZT0idGVzdC5lamIuc2Z1bG5vaS5TZnVsbm9pVGVzdE5HIiAvPgogICAgIDwvY2xhc3Nlcz4KLSAgPC90ZXN0PiAKKyAgPC90ZXN0PgogICA8dGVzdCBuYW1lPSJlamJfY21wX2VhciI+CiAgICAgPGNsYXNzZXM+CiAgICAgICAgIDxjbGFzcyBuYW1lPSJ0ZXN0LkNtcFJvc3RlclRlc3RORyIgLz4KQEAgLTE1NSw2ICsxNTUsNiBAQAogICAgICAgPGNsYXNzIG5hbWU9ImZyb21qYXZhLmNsaWVudC5DaGVja1Rlc3RlclVJVGVzdE5HIi8+CiAgICAgPC9jbGFzc2VzPgogICA8L3Rlc3Q+Ci0gCisKIDwvc3VpdGU+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svdGVzdG5nL3Rlc3RuZ193ZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3Rlc3RuZy90ZXN0bmdfd2QueG1sCmluZGV4IDM0MTJjZjAuLjZlOWMwNjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svdGVzdG5nL3Rlc3RuZ193ZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay90ZXN0bmcvdGVzdG5nX3dkLnhtbApAQCAtMTcsMjAgKzE3LDIwIEBACiAtLT4KIAogPCFET0NUWVBFIHN1aXRlIFNZU1RFTSAiaHR0cDovL3Rlc3RuZy5vcmcvdGVzdG5nLTEuMC5kdGQiID4KLSAKLTwhLS0gCisKKzwhLS0KIAogICAgIFRlc3RzIGZvciAiV0QiIChXZWIgRGlzdHJpYnV0aW9uLCBha2EgSmFrYXJ0YSBFRSBXZWIgUHJvZmlsZSkKIAogIC0tPgogPHN1aXRlIG5hbWU9IlF1aWNrTG9va1Rlc3RzIiB2ZXJib3NlPSIyIj4KLSAgICAKKwogICAgIDxwYXJhbWV0ZXIgbmFtZT0iYWRtaW4udXJsIiB2YWx1ZT0iaHR0cDovL2xvY2FsaG9zdDo0ODQ4L19fYXNhZG1pbiIgLz4KICAgICA8cGFyYW1ldGVyIG5hbWU9ImFkbWluLnVzZXIiIHZhbHVlPSJhZG1pbiIgLz4KICAgICA8cGFyYW1ldGVyIG5hbWU9ImFkbWluLnBhc3N3b3JkIiB2YWx1ZT0iIiAvPgogICAgIDxwYXJhbWV0ZXIgbmFtZT0iYWRtaW4uY29uc29sZS51cmwiIHZhbHVlPSJodHRwOi8vbG9jYWxob3N0OjQ4NDgvIiAvPgogICAgIDxwYXJhbWV0ZXIgbmFtZT0icmVzb3VyY2VzLnhtbC5yZWxhdGl2ZS5wYXRoIiB2YWx1ZT0iYWRtaW4vcmVzb3VyY2VzL3Jlc291cmNlcy54bWwiIC8+Ci0gICAgCisKICAgICA8dGVzdCBuYW1lPSJhZG1pbmNsaV90ZXN0cyI+CiAgICAgICAgIDxjbGFzc2VzPgogICAgICAgICAgICAgPGNsYXNzIG5hbWU9InRlc3QuYWRtaW5jbGkuUmVzdGFydERvbWFpblRlc3RzIiAvPgpAQCAtNTgsMzcgKzU4LDM3IEBACiAgICAgICAgICAgICA8Y2xhc3MgbmFtZT0idGVzdC5hZG1pbi5BZG1pbkNvbnNvbGVUZXN0cyIgLz4KICAgICAgICAgPC9jbGFzc2VzPgogICAgIDwvdGVzdD4KLSAgICAKKwogICAgIDx0ZXN0IG5hbWU9InJlc3RfdGVzdHMiPgogICAgICAgICA8Y2xhc3Nlcz4KICAgICAgICAgICAgIDxjbGFzcyBuYW1lPSJ0ZXN0LmFkbWluLlJlc3RUZXN0cyIgLz4KICAgICAgICAgPC9jbGFzc2VzPgogICAgIDwvdGVzdD4KLSAgICAKKwogICAgIDx0ZXN0IG5hbWU9ImRlcGxveV91cGxvYWRfdGVzdCI+CiAgICAgICAgIDxjbGFzc2VzPgogICAgICAgICAgICAgPGNsYXNzIG5hbWU9InRlc3Qud2ViLmpzcC5oZWxsby5IZWxsb0pTUFRlc3RORyIgLz4KICAgICAgICAgPC9jbGFzc2VzPgogICAgIDwvdGVzdD4KLSAgICAKKwogICAgIDx0ZXN0IG5hbWU9ImpzZl9oZWxsb193b3JsZCI+CiAgICAgICAgIDxjbGFzc2VzPgogICAgICAgICAgICAgPGNsYXNzIG5hbWU9InRlc3QuanNmLmFzdHJvbG9nZXIuSlNGV2ViVGVzdE5HIiAvPgogICAgICAgICA8L2NsYXNzZXM+CiAgICAgPC90ZXN0PgotICAgIAorCiAgICAgPHRlc3QgbmFtZT0ianNmX2luamVjdGlvbiI+CiAgICAgICAgIDxjbGFzc2VzPgogICAgICAgICAgICAgPGNsYXNzIG5hbWU9InRlc3Qud2ViLmpzZmluamVjdGlvbi5KU0ZJbmplY3Rpb25UZXN0TkciIC8+CiAgICAgICAgIDwvY2xhc3Nlcz4KICAgICA8L3Rlc3Q+Ci0gICAgCisKICAgICA8dGVzdCBuYW1lPSJqZGJjX3VzZXJfdHgiPgogICAgICAgICA8Y2xhc3Nlcz4KICAgICAgICAgICAgIDxjbGFzcyBuYW1lPSJ0ZXN0LmpkYmMuamRiY3VzZXJ0eC5KZGJjVXNlclR4VGVzdE5HIiAvPgogICAgICAgICA8L2NsYXNzZXM+CiAgICAgPC90ZXN0PgotICAgIAorCiAgICAgPHRlc3QgbmFtZT0ianBhX2luamVjdF9lbWYiPgogICAgICAgICA8Y2xhc3Nlcz4KICAgICAgICAgICAgIDxjbGFzcyBuYW1lPSJ0ZXN0LmpwYS5qcGFpbmplY3RlbWYuSnBhSW5qZWN0RU1GVGVzdE5HIiAvPgpAQCAtMTAwLDM0ICsxMDAsMzQgQEAKICAgICAgICAgICAgICAgICBuYW1lPSJ0ZXN0LmpwYS5qcGF2YWxpZGF0aW9uLkpwYVZhbGlkYXRpb25UZXN0TkciIC8+CiAgICAgICAgIDwvY2xhc3Nlcz4KICAgICA8L3Rlc3Q+Ci0gICAgCisKICAgICA8dGVzdCBuYW1lPSJzZWN1cml0eV9oZWxsb19qc3AiPgogICAgICAgICA8Y2xhc3Nlcz4KICAgICAgICAgICAgIDxjbGFzcwogICAgICAgICAgICAgICAgIG5hbWU9InRlc3Quc2VjdXJpdHkuaGVsbG9qc3AuSGVsbG9TZWN1cml0eVRlc3RORyIgLz4KICAgICAgICAgPC9jbGFzc2VzPgogICAgIDwvdGVzdD4KLSAgICAKKwogICAgIDx0ZXN0IG5hbWU9InNlY3VyaXR5X2hlbGxvX2Jhc2ljYXV0aCI+CiAgICAgICAgIDxjbGFzc2VzPgogICAgICAgICAgICAgPGNsYXNzIG5hbWU9InRlc3Quc2VjdXJpdHkuYmFzaWNhdXRoLkJhc2ljQXV0aFRlc3RORyIgLz4KICAgICAgICAgPC9jbGFzc2VzPgogICAgIDwvdGVzdD4KLSAgICAKKwogICAgIDx0ZXN0IG5hbWU9ImVqYl9zdGF0ZWZ1bF9jbXRfbmlfd2FyIj4KICAgICAgICAgPGNsYXNzZXM+CiAgICAgICAgICAgICA8Y2xhc3MgbmFtZT0idGVzdC5lamIuc2xzYm5pY210LlNsc2JuaWNtdFRlc3RORyIgLz4KICAgICAgICAgICAgIDxjbGFzcyBuYW1lPSJ0ZXN0LmVqYi5zZnVsbm9pLlNmdWxub2lUZXN0TkciIC8+CiAgICAgICAgIDwvY2xhc3Nlcz4KICAgICA8L3Rlc3Q+Ci0gICAgCisKICAgICA8dGVzdCBuYW1lPSJidl9zZXJ2bGV0X3NpbXBsZSI+CiAgICAgICAgIDxjbGFzc2VzPgogICAgICAgICAgICAgPGNsYXNzCiAgICAgICAgICAgICAgICAgbmFtZT0idGVzdC5idi5zZXJ2bGV0LnNpbXBsZS5TaW1wbGVCVlNlcnZsZXRUZXN0TkciIC8+CiAgICAgICAgIDwvY2xhc3Nlcz4KICAgICA8L3Rlc3Q+Ci0gICAgCisKICAgICA8dGVzdCBuYW1lPSJ3ZWxkX3Rlc3RzIj4KICAgICAgICAgPGNsYXNzZXM+CiAgICAgICAgICAgICA8Y2xhc3MgbmFtZT0idGVzdC53ZWIubnVtYmVyZ3Vlc3MuTnVtYmVyR3Vlc3NUZXN0TkciIC8+CkBAIC0xMzUsNyArMTM1LDcgQEAKICAgICAgICAgICAgIDxjbGFzcyBuYW1lPSJ0ZXN0LndlYi5leHRlbnNpb25zLkV4dGVuc2lvbnNUZXN0TkciIC8+CiAgICAgICAgIDwvY2xhc3Nlcz4KICAgICA8L3Rlc3Q+Ci0gICAgCisKICAgICA8dGVzdCBuYW1lPSJhc2FkbWluX3Rlc3RzIj4KICAgICAgICAgPGNsYXNzZXM+CiAgICAgICAgICAgICA8Y2xhc3MgbmFtZT0idGVzdC5hZG1pbi5Kdm1PcHRpb25UZXN0cyIgLz4KQEAgLTE0NCw3ICsxNDQsNyBAQAogICAgICAgICAgICAgPGNsYXNzIG5hbWU9InRlc3QuYWRtaW4uT3NnaUFzYWRtaW5UZXN0IiAvPgogICAgICAgICA8L2NsYXNzZXM+CiAgICAgPC90ZXN0PgotICAgIAorCiA8IS0tIFVuY29tbWVudCB3aGVuL2lmIGZpZ2h0ZXJmaXNoIGlzIHJlZW5hYmxlZAogICAgIDx0ZXN0IG5hbWU9Im9zZ2lfdGVzdCI+CiAgICAgICAgIDxjbGFzc2VzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay91dGlscy9zcmMvY29tL3N1bi9hcHBzZXJ2L3Rlc3QvQWRtaW5CYXNlRGV2VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay91dGlscy9zcmMvY29tL3N1bi9hcHBzZXJ2L3Rlc3QvQWRtaW5CYXNlRGV2VGVzdC5qYXZhCmluZGV4IDg3YzljMjQuLjJiMGRjODIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svdXRpbHMvc3JjL2NvbS9zdW4vYXBwc2Vydi90ZXN0L0FkbWluQmFzZURldlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3V0aWxzL3NyYy9jb20vc3VuL2FwcHNlcnYvdGVzdC9BZG1pbkJhc2VEZXZUZXN0LmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsKIAogcHVibGljIGFic3RyYWN0IGNsYXNzIEFkbWluQmFzZURldlRlc3QgZXh0ZW5kcyBCYXNlRGV2VGVzdCB7Ci0gICAgCisKICAgICBwdWJsaWMgQWRtaW5CYXNlRGV2VGVzdCgpIHsKICAgICAgICAgYm9vbGVhbiB2ZXJib3NlID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CkBAIC04OSw3ICs4OSw3IEBACiAgICAgICAgICAgICBuYW1lMiArPSBEQVNIRVMuc3Vic3RyaW5nKDAsIG51bXBhZHMpOwogCiAgICAgICAgIHN1cGVyLnJlcG9ydChuYW1lMiwgc3VjY2Vzcyk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKCFzdWNjZXNzICYmICFpc1ZlcmJvc2UoKSkKICAgICAgICAgICAgIHdyaXRlRmFpbHVyZSgpOwogICAgICAgICByZXR1cm4gc3VjY2VzczsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svdXRpbHMvc3JjL2NvbS9zdW4vYXBwc2Vydi90ZXN0L3V0aWwvcHJvY2Vzcy9Qcm9jZXNzTWFuYWdlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay91dGlscy9zcmMvY29tL3N1bi9hcHBzZXJ2L3Rlc3QvdXRpbC9wcm9jZXNzL1Byb2Nlc3NNYW5hZ2VyLmphdmEKaW5kZXggZWFmOTgyOC4uOTIwZjBhMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay91dGlscy9zcmMvY29tL3N1bi9hcHBzZXJ2L3Rlc3QvdXRpbC9wcm9jZXNzL1Byb2Nlc3NNYW5hZ2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay91dGlscy9zcmMvY29tL3N1bi9hcHBzZXJ2L3Rlc3QvdXRpbC9wcm9jZXNzL1Byb2Nlc3NNYW5hZ2VyLmphdmEKQEAgLTIzOSw3ICsyMzksNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBsaW5lID0gcmVhZGVyLnJlYWRMaW5lKCk7IGxpbmUgIT0gbnVsbDsgbGluZSA9IHJlYWRlci5yZWFkTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZChsaW5lKS5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmKGVjaG8pCiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWIvaGVsbG93b3JsZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9oZWxsb3dvcmxkL2J1aWxkLnhtbAppbmRleCA0MWJkMjY3Li4xMTllNTFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9oZWxsb3dvcmxkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9oZWxsb3dvcmxkL2J1aWxkLnhtbApAQCAtMjAsMTIgKzIwLDEyIEBACiA8cHJvamVjdCBuYW1lPSJoZWxsby1qc3AiIGRlZmF1bHQ9ImRlZmF1bHQiIGJhc2VkaXI9Ii4iPgogICAgIDxwcm9wZXJ0eSBmaWxlPSJidWlsZC5wcm9wZXJ0aWVzIi8+CiAgICAgPHByb3BlcnR5IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS1jb25maWcucHJvcGVydGllcyIvPgotICAgCi0gICAgCisKKwogICAgIDxkZXNjcmlwdGlvbj5CdWlsZHMsIHRlc3RzLCBhbmQgcnVucyB0aGUgcHJvamVjdCBIZWxsbyBKU1AgQXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgotICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4gICAKKyAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC8ke2RlcGxveS5wbGF0Zm9ybX0tdGFyZ2V0cy54bWwiLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxkZXBsb3ktdXBsb2FkLHJ1bnRlc3QsdW5kZXBsb3kiIC8+CiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1kZXBsb3kiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveS11cGxvYWQiIC8+CiAKQEAgLTM4LDcgKzM4LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlLXRlc3RzIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1pbXBsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIi8+CiAgICAgPC90YXJnZXQ+CkBAIC00NywxOCArNDcsMTggQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktdXBsb2FkLSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIi8+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0ICBuYW1lPSJydW50ZXN0Ij4gCisgICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudGVzdC1pbXBsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iaGVsbG9qc3AiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RuZy50ZXN0Lm5hbWUiIHZhbHVlPSIke3Rlc3RuZy50ZXN0Lm5hbWV9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0bmcudGVzdGNsaWVudCIgdmFsdWU9IkhlbGxvSlNQVGVzdE5HIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAgCisKICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgCisKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWIvaGVsbG93b3JsZC9tZXRhZGF0YS93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWIvaGVsbG93b3JsZC9tZXRhZGF0YS93ZWIueG1sCmluZGV4IDA4MzMwMWYuLmEyM2JhMGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL2hlbGxvd29ybGQvbWV0YWRhdGEvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9oZWxsb3dvcmxkL21ldGFkYXRhL3dlYi54bWwKQEAgLTMyLDcgKzMyLDcgQEAKICAgICA8dXJsLXBhdHRlcm4+L3NpbXBsZXNlcnZsZXQ8L3VybC1wYXR0ZXJuPgogICA8L3NlcnZsZXQtbWFwcGluZz4KICAgPHdlbGNvbWUtZmlsZS1saXN0PgotCTx3ZWxjb21lLWZpbGU+aGVsbG8uanNwPC93ZWxjb21lLWZpbGU+CisgICAgPHdlbGNvbWUtZmlsZT5oZWxsby5qc3A8L3dlbGNvbWUtZmlsZT4KICAgICA8L3dlbGNvbWUtZmlsZS1saXN0PgogICA8bG9naW4tY29uZmlnPgogICAgIDxhdXRoLW1ldGhvZD5CQVNJQzwvYXV0aC1tZXRob2Q+CkBAIC00Miw2ICs0Miw2IEBACiAgICAgICA8Zm9ybS1lcnJvci1wYWdlPjwvZm9ybS1lcnJvci1wYWdlPgogICAgIDwvZm9ybS1sb2dpbi1jb25maWc+CiAgIDwvbG9naW4tY29uZmlnPgotICAKKwogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9oZWxsb3dvcmxkL3NyYy9qYXZhL0hlbGxvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWIvaGVsbG93b3JsZC9zcmMvamF2YS9IZWxsb1NlcnZsZXQuamF2YQppbmRleCA2MWY0Mjg4Li44ODgxYTc1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9oZWxsb3dvcmxkL3NyYy9qYXZhL0hlbGxvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL2hlbGxvd29ybGQvc3JjL2phdmEvSGVsbG9TZXJ2bGV0LmphdmEKQEAgLTUxLDQ1ICs1MSw0NSBAQAogICAgICAgICAgICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewogCi0JICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2bGV0IHByb2Nlc3NpbmcgZG8gZ2V0Li4iKTsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlcnZsZXQgcHJvY2Vzc2luZyBkbyBnZXQuLiIpOwogCi0JcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwotCVByaW50V3JpdGVyIHdyaXRlciA9IHJlc3BvbnNlLmdldFdyaXRlcigpOworICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICBQcmludFdyaXRlciB3cml0ZXIgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKIAotCXdyaXRlci5wcmludGxuKCI8aHRtbD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPGhlYWQ+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjx0aXRsZT5TYW1wbGUgQXBwbGljYXRpb24gU2VydmxldCBQYWdlPC90aXRsZT4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC9oZWFkPiIpOwotCXdyaXRlci5wcmludGxuKCI8Ym9keSBiZ2NvbG9yPXdoaXRlPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8aHRtbD4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPGhlYWQ+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjx0aXRsZT5TYW1wbGUgQXBwbGljYXRpb24gU2VydmxldCBQYWdlPC90aXRsZT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPC9oZWFkPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8Ym9keSBiZ2NvbG9yPXdoaXRlPiIpOwogCi0Jd3JpdGVyLnByaW50bG4oIjx0YWJsZSBib3JkZXI9XCIwXCI+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKLQl3cml0ZXIucHJpbnRsbigiPHRkPiIpOwotCS8vd3JpdGVyLnByaW50bG4oIjxpbWcgc3JjPVwiaW1hZ2VzL3RvbWNhdC5naWZcIj4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC90ZD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPHRkPiIpOwotCXdyaXRlci5wcmludGxuKCI8aDE+U2FtcGxlIEFwcGxpY2F0aW9uIFNlcnZsZXQ8L2gxPiIpOwotCXdyaXRlci5wcmludGxuKCJUaGlzIGlzIHRoZSBvdXRwdXQgb2YgYSBzZXJ2bGV0IHRoYXQgaXMgcGFydCBvZiIpOwotCXdyaXRlci5wcmludGxuKCJ0aGUgSGVsbG8sIFdvcmxkIGFwcGxpY2F0aW9uLiAgSXQgZGlzcGxheXMgdGhlIik7Ci0Jd3JpdGVyLnByaW50bG4oInJlcXVlc3QgaGVhZGVycyBmcm9tIHRoZSByZXF1ZXN0IHdlIGFyZSBjdXJyZW50bHkiKTsKLQl3cml0ZXIucHJpbnRsbigicHJvY2Vzc2luZy4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC90ZD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC90cj4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC90YWJsZT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPHRhYmxlIGJvcmRlcj1cIjBcIj4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPHRyPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8dGQ+Iik7CisgICAgLy93cml0ZXIucHJpbnRsbigiPGltZyBzcmM9XCJpbWFnZXMvdG9tY2F0LmdpZlwiPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L3RkPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8dGQ+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjxoMT5TYW1wbGUgQXBwbGljYXRpb24gU2VydmxldDwvaDE+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIlRoaXMgaXMgdGhlIG91dHB1dCBvZiBhIHNlcnZsZXQgdGhhdCBpcyBwYXJ0IG9mIik7CisgICAgd3JpdGVyLnByaW50bG4oInRoZSBIZWxsbywgV29ybGQgYXBwbGljYXRpb24uICBJdCBkaXNwbGF5cyB0aGUiKTsKKyAgICB3cml0ZXIucHJpbnRsbigicmVxdWVzdCBoZWFkZXJzIGZyb20gdGhlIHJlcXVlc3Qgd2UgYXJlIGN1cnJlbnRseSIpOworICAgIHdyaXRlci5wcmludGxuKCJwcm9jZXNzaW5nLiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L3RkPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L3RyPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L3RhYmxlPiIpOwogCi0Jd3JpdGVyLnByaW50bG4oIjx0YWJsZSBib3JkZXI9XCIwXCIgd2lkdGg9XCIxMDAlXCI+Iik7Ci0JRW51bWVyYXRpb24gbmFtZXMgPSByZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7Ci0Jd2hpbGUgKG5hbWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JICAgIFN0cmluZyBuYW1lID0gKFN0cmluZykgbmFtZXMubmV4dEVsZW1lbnQoKTsKLQkgICAgd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKLQkgICAgd3JpdGVyLnByaW50bG4oIiAgPHRoIGFsaWduPVwicmlnaHRcIj4iICsgbmFtZSArICI6PC90aD4iKTsKLQkgICAgd3JpdGVyLnByaW50bG4oIiAgPHRkPiIgKyByZXF1ZXN0LmdldEhlYWRlcihuYW1lKSArICI8L3RkPiIpOwotCSAgICB3cml0ZXIucHJpbnRsbigiPC90cj4iKTsKLQl9Ci0Jd3JpdGVyLnByaW50bG4oIjwvdGFibGU+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjx0YWJsZSBib3JkZXI9XCIwXCIgd2lkdGg9XCIxMDAlXCI+Iik7CisgICAgRW51bWVyYXRpb24gbmFtZXMgPSByZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisgICAgd2hpbGUgKG5hbWVzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZykgbmFtZXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIiAgPHRoIGFsaWduPVwicmlnaHRcIj4iICsgbmFtZSArICI6PC90aD4iKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIiAgPHRkPiIgKyByZXF1ZXN0LmdldEhlYWRlcihuYW1lKSArICI8L3RkPiIpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiPC90cj4iKTsKKyAgICB9CisgICAgd3JpdGVyLnByaW50bG4oIjwvdGFibGU+Iik7CiAKLQl3cml0ZXIucHJpbnRsbigiPC9ib2R5PiIpOwotCXdyaXRlci5wcmludGxuKCI8L2h0bWw+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjwvYm9keT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPC9odG1sPiIpOwogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9oZWxsb3dvcmxkL3NyYy90ZXN0L0hlbGxvSlNQVGVzdE5HLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9oZWxsb3dvcmxkL3NyYy90ZXN0L0hlbGxvSlNQVGVzdE5HLmphdmEKaW5kZXggYzg0ZTUyYi4uMjMzOWE5NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWIvaGVsbG93b3JsZC9zcmMvdGVzdC9IZWxsb0pTUFRlc3RORy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL2hlbGxvd29ybGQvc3JjL3Rlc3QvSGVsbG9KU1BUZXN0TkcuamF2YQpAQCAtMzQsMTMgKzM0LDEzIEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0KICAgICAgICAgInNpbXBsZS13ZWJhcHAtanNwc2VydmxldC1ub3Jlc291cmNlIjsKLSAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgc3RyQ29udGV4dFJvb3Q9ImhlbGxvanNwIjsKIAogICAgIHN0YXRpYyBTdHJpbmcgcmVzdWx0ID0gIiI7CiAgICAgU3RyaW5nIGhvc3Q9U3lzdGVtLmdldFByb3BlcnR5KCJodHRwLmhvc3QiKTsKICAgICBTdHJpbmcgcG9ydD1TeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucG9ydCIpOwotICAgICAgICAgICAKKwogICAgIC8qCiAgICAgICpJZiB0d28gYXNzZXJ0cyBhcmUgbWVudGlvbmVkIGluIG9uZSBtZXRob2QsIHRoZW4gbGFzdCBhc3NlcnQgaXMgdGFrZW4gaW4KICAgICAgKnRvIGFjY291bnQuCkBAIC01Miw5ICs1Miw5IEBACiAgICAgQFRlc3QoZ3JvdXBzID17ICJwdWxzZSJ9ICkgLy8gdGVzdCBtZXRob2QKICAgICAvL3B1YmxpYyB2b2lkIHdlYnRlc3QoU3RyaW5nIGhvc3QsIFN0cmluZyBwb3J0LCBTdHJpbmcgY29udGV4dHJvb3QpIHRocm93cyBFeGNlcHRpb257CiAgICAgcHVibGljIHZvaWQgc2ltcGxlSlNQVGVzdFBhZ2UoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICB0cnl7Ci0gICAgICAgICAKKwogCiAgICAgICAgIFN0cmluZyB0ZXN0dXJsID0gImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgIi8iKyBzdHJDb250ZXh0Um9vdCArICIvaGVsbG8uanNwIjsKICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlVSTCBpczogIit0ZXN0dXJsKTsKQEAgLTcwLDIwICs3MCwyMCBAQAogCiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKICAgICAgICAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7Ci0gICAgICAgIFN0cmluZyB0ZXN0TGluZSA9IG51bGw7ICAgICAgICAKLQlTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSJKU1AgVGVzdCBQYWdlIjsKKyAgICAgICAgU3RyaW5nIHRlc3RMaW5lID0gbnVsbDsKKyAgICBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSJKU1AgVGVzdCBQYWdlIjsKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKEVYUEVDVEVEX1JFU1BPTlNFKSE9LTEpewogICAgICAgICAgICAgICAgIHJlc3VsdD10cnVlOwogICAgICAgICAgICAgIHRlc3RMaW5lID0gbGluZTsKICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4odGVzdExpbmUpOwogICAgICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICB9ICAgICAgICAKLSAgICAgICAgICAgICAgICAKKworICAgICAgICB9CisKICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhyZXN1bHQsIHRydWUsIlVuZXhwZWN0ZWQgSFRNTCIpOwotICAgICAgICAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGUpOwpAQCAtOTMsOSArOTMsOSBAQAogCiAgICAgQFRlc3QoZ3JvdXBzPXsicHVsc2UifSkgLy90ZXN0IG1ldGhvZCBmb3Igc2VydmVyCiAgICAgcHVibGljIHZvaWQgdGVzdFNlcnZlclJ1bm5pbmcoKSB0aHJvd3MgRXhjZXB0aW9uewotCSAgICAvL1lvdXIgc2VydmVyIGlzIHVwIGFuZCBydW5uaW5nIQotCSAgICAvLwotCVN0cmluZyB0ZXN0dXJsID0gImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0OworICAgICAgICAvL1lvdXIgc2VydmVyIGlzIHVwIGFuZCBydW5uaW5nIQorICAgICAgICAvLworICAgIFN0cmluZyB0ZXN0dXJsID0gImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0OwogICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiVVJMIGlzOiAiK3Rlc3R1cmwpOwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCh0ZXN0dXJsKTsKICAgICAgICAgLy9lY2hvKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpAQCAtMTAzLDI5ICsxMDMsMjkgQEAKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwogCi0JSW5wdXRTdHJlYW0gaXMgPSBjb25uLmdldElucHV0U3RyZWFtKCk7CisgICAgSW5wdXRTdHJlYW0gaXMgPSBjb25uLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKICAgICAgICAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7Ci0gICAgICAgIFN0cmluZyB0ZXN0TGluZSA9IG51bGw7ICAgICAgICAKKyAgICAgICAgU3RyaW5nIHRlc3RMaW5lID0gbnVsbDsKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJub3cgcnVubmluZyIpIT0tMSl7CiAgICAgICAgICAgICAgICAgcmVzdWx0PXRydWU7CiAgICAgICAgICAgICAgdGVzdExpbmUgPSBsaW5lOwogICAgICAgICAgICAvL2VjaG8odGVzdExpbmUpOwogICAgICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICB9ICAgICAgICAKLSAgICAgICAgICAgICAgICAKKworICAgICAgICB9CisKICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhyZXN1bHQsIHRydWUsIlVuZXhwZWN0ZWQgSFRNTCIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgQFRlc3QoZ3JvdXBzID17ICJwdWxzZSJ9ICkgLy8gdGVzdCBtZXRob2QKICAgICBwdWJsaWMgdm9pZCBzdGF0aWNIVE1MUGFnZVRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uewogICAgICAgICAgdHJ5ewotICAgICAgICAgCisKIAogICAgICAgICBTdHJpbmcgdGVzdHVybCA9ICJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArICIvIisgc3RyQ29udGV4dFJvb3QgKyAiL2ZpcnN0Lmh0bWwiOwogICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiVVJMIGlzOiAiK3Rlc3R1cmwpOwpAQCAtMTQyLDMwICsxNDIsMzAgQEAKIAogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CiAgICAgICAgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOwotICAgICAgICBTdHJpbmcgdGVzdExpbmUgPSBudWxsOyAgICAgICAgCisgICAgICAgIFN0cmluZyB0ZXN0TGluZSA9IG51bGw7CiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiV2VsY29tZSB0byBIVE1MIFRlc3QgUHJvZ3JhbSIpIT0tMSl7CiAgICAgICAgICAgICAgICAgcmVzdWx0PXRydWU7CiAgICAgICAgICAgICAgdGVzdExpbmUgPSBsaW5lOwogICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbih0ZXN0TGluZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgIH0gICAgICAgIAotICAgICAgICAgICAgICAgIAorCisgICAgICAgIH0KKwogICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHJlc3VsdCwgdHJ1ZSwiVW5leHBlY3RlZCBIVE1MIik7Ci0gICAgICAgICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBAVGVzdChncm91cHMgPXsgInB1bHNlIn0gKSAvLyB0ZXN0IG1ldGhvZAogICAgIHB1YmxpYyB2b2lkIHNpbXBsZVNlcnZsZXRUZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbnsKICAgICAgICAgIHRyeXsKLSAgICAgICAgIAorCiAKICAgICAgICAgU3RyaW5nIHRlc3R1cmwgPSAiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyAiLyIrIHN0ckNvbnRleHRSb290ICsgIi9zaW1wbGVzZXJ2bGV0IjsKICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlVSTCBpczogIit0ZXN0dXJsKTsKQEAgLTE4MSwyNCArMTgxLDI0IEBACiAKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwogICAgICAgICBib29sZWFuIHJlc3VsdD1mYWxzZTsKLSAgICAgICAgU3RyaW5nIHRlc3RMaW5lID0gbnVsbDsgICAgICAgIAorICAgICAgICBTdHJpbmcgdGVzdExpbmUgPSBudWxsOwogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNhbXBsZSBBcHBsaWNhdGlvbiBTZXJ2bGV0IikhPS0xKXsKICAgICAgICAgICAgICAgICByZXN1bHQ9dHJ1ZTsKICAgICAgICAgICAgICB0ZXN0TGluZSA9IGxpbmU7CiAgICAgICAgICAgIC8vZWNobyh0ZXN0TGluZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgIH0gICAgICAgIAotICAgICAgICAgICAgICAgIAorCisgICAgICAgIH0KKwogICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHJlc3VsdCwgdHJ1ZSwiVW5leHBlY3RlZCBIVE1MIik7Ci0gICAgICAgICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgZWNobyhTdHJpbmcgbXNnKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9qc2Zhc3Ryb2xvZ2VyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL2pzZmFzdHJvbG9nZXIvYnVpbGQueG1sCmluZGV4IDc3OTY3ZDQuLjcxNzMxNDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL2pzZmFzdHJvbG9nZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL2pzZmFzdHJvbG9nZXIvYnVpbGQueG1sCkBAIC0xOCwzOCArMTgsMzggQEAKIC0tPgogCiA8cHJvamVjdCBuYW1lPSJqc2ZiYXNpYy1qc3AiIGRlZmF1bHQ9ImRlZmF1bHQiIGJhc2VkaXI9Ii4iPgotICAgIAorCiAgICAgPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiLz4KICAgICA8cHJvcGVydHkgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LWNvbmZpZy5wcm9wZXJ0aWVzIi8+Ci0gICAgCi0gICAgCisKKwogICAgIDxkZXNjcmlwdGlvbj5CdWlsZHMsIHRlc3RzLCBhbmQgcnVucyB0aGUgcHJvamVjdCBIZWxsbyBKU1AgQXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgotICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4gICAKKyAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC8ke2RlcGxveS5wbGF0Zm9ybX0tdGFyZ2V0cy54bWwiLz4KLSAgICAKKwogICAgIDxkZXNjcmlwdGlvbj5CdWlsZHMsIHRlc3RzLCBhbmQgcnVucyB0aGUgcHJvamVjdCBIZWxsbyBKU1AgQXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogCi0gICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW50ZXN0LHVuZGVwbG95IiAvPiAgICAKKyAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJ1bnRlc3QsdW5kZXBsb3kiIC8+CiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1kZXBsb3kiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUtdGVzdHMiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWltcGwiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktJHtkZXBsb3kucGxhdGZvcm19LWltcGwiLz4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICA8dGFyZ2V0ICBuYW1lPSJydW50ZXN0Ij4gCisKKyAgICA8dGFyZ2V0ICBuYW1lPSJydW50ZXN0Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW50ZXN0LWltcGwiPgogICAgICAgICA8cGFyYW0gbmFtZT0idGVzdG5nLnRlc3QubmFtZSIgdmFsdWU9IiR7dGVzdG5nLnRlc3QubmFtZX0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RuZy50ZXN0Y2xpZW50IiB2YWx1ZT0iSlNGV2ViVGVzdE5HIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAgCisKICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL2pzZmFzdHJvbG9nZXIvbWV0YWRhdGEvZmFjZXMtY29uZmlnLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL2pzZmFzdHJvbG9nZXIvbWV0YWRhdGEvZmFjZXMtY29uZmlnLnhtbAppbmRleCAyOTljZDRkLi5jYjliYjI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9qc2Zhc3Ryb2xvZ2VyL21ldGFkYXRhL2ZhY2VzLWNvbmZpZy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWIvanNmYXN0cm9sb2dlci9tZXRhZGF0YS9mYWNlcy1jb25maWcueG1sCkBAIC00Miw1ICs0Miw1IEBACiAgICAgICAgIDxtYW5hZ2VkLWJlYW4tY2xhc3M+d2ViLmpzZi5iZWFuLlVzZXJCZWFuPC9tYW5hZ2VkLWJlYW4tY2xhc3M+CiAgICAgICAgIDxtYW5hZ2VkLWJlYW4tc2NvcGU+cmVxdWVzdDwvbWFuYWdlZC1iZWFuLXNjb3BlPgogICAgIDwvbWFuYWdlZC1iZWFuPgotICAgIAorCiA8L2ZhY2VzLWNvbmZpZz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL2pzZmFzdHJvbG9nZXIvbWV0YWRhdGEvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL2pzZmFzdHJvbG9nZXIvbWV0YWRhdGEvd2ViLnhtbAppbmRleCA2NzUwNGQ2Li5lN2E3OGVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9qc2Zhc3Ryb2xvZ2VyL21ldGFkYXRhL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWIvanNmYXN0cm9sb2dlci9tZXRhZGF0YS93ZWIueG1sCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIDwvc2Vzc2lvbi10aW1lb3V0PgogICAgIDwvc2Vzc2lvbi1jb25maWc+CiAgICAgPHdlbGNvbWUtZmlsZS1saXN0PgotCTx3ZWxjb21lLWZpbGU+CisgICAgPHdlbGNvbWUtZmlsZT4KICAgICAgICAgICAgIGluZGV4LmpzcAogICAgICAgICA8L3dlbGNvbWUtZmlsZT4KICAgICAgICAgPHdlbGNvbWUtZmlsZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL2pzZmFzdHJvbG9nZXIvc3JjL2phdmEvd2ViL2pzZi9iZWFuL1VzZXJCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9qc2Zhc3Ryb2xvZ2VyL3NyYy9qYXZhL3dlYi9qc2YvYmVhbi9Vc2VyQmVhbi5qYXZhCmluZGV4IGUxM2U5YWIuLjk2NDA1NTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL2pzZmFzdHJvbG9nZXIvc3JjL2phdmEvd2ViL2pzZi9iZWFuL1VzZXJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWIvanNmYXN0cm9sb2dlci9zcmMvamF2YS93ZWIvanNmL2JlYW4vVXNlckJlYW4uamF2YQpAQCAtMjYsMTAgKzI2LDEwIEBACiBwYWNrYWdlIHdlYi5qc2YuYmVhbjsKIAogcHVibGljIGNsYXNzIFVzZXJCZWFuIHsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CiAgICAgcHJpdmF0ZSBTdHJpbmcgYmlydGhkYXk7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBVc2VyQmVhbiAqLwogICAgIHB1YmxpYyBVc2VyQmVhbigpIHsKICAgICB9CkBAIC00OSw1ICs0OSw1IEBACiAgICAgcHVibGljIHZvaWQgc2V0QmlydGhkYXkoU3RyaW5nIGJpcnRoZGF5KSB7CiAgICAgICAgIHRoaXMuYmlydGhkYXkgPSBiaXJ0aGRheTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL2pzZmFzdHJvbG9nZXIvc3JjL3Rlc3QvSlNGV2ViVGVzdE5HLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9qc2Zhc3Ryb2xvZ2VyL3NyYy90ZXN0L0pTRldlYlRlc3RORy5qYXZhCmluZGV4IGI1NDViYTcuLmUyNzc4YzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL2pzZmFzdHJvbG9nZXIvc3JjL3Rlc3QvSlNGV2ViVGVzdE5HLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWIvanNmYXN0cm9sb2dlci9zcmMvdGVzdC9KU0ZXZWJUZXN0TkcuamF2YQpAQCAtMzksMjEgKzM5LDIxIEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPQogICAgICAgICAiSlNQIFBhZ2UgVGVzdCI7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBzdHJDb250ZXh0Um9vdD0ianNmYXN0cm9sb2dlciI7CiAKICAgICBzdGF0aWMgU3RyaW5nIHJlc3VsdCA9ICIiOwogICAgIFN0cmluZyBtX2hvc3Q9IiI7Ci0gICAgU3RyaW5nIG1fcG9ydD0iIjsgICAgCisgICAgU3RyaW5nIG1fcG9ydD0iIjsKICAgICAvL0h0dHBDbGllbnQgaHR0cGNsaWVudCA9IG5ldyBIdHRwQ2xpZW50KCk7Ci0gICAgCisKICAgICAvL0BQYXJhbWV0ZXJzKHsiaG9zdCIsInBvcnQifSkKICAgICBAQmVmb3JlTWV0aG9kCiAgICAgcHVibGljIHZvaWQgYmVmb3JlVGVzdCgpewogICAgICAgICBtX2hvc3Q9U3lzdGVtLmdldFByb3BlcnR5KCJodHRwLmhvc3QiKTsKICAgICAgICAgbV9wb3J0PVN5c3RlbS5nZXRQcm9wZXJ0eSgiaHR0cC5wb3J0Iik7CiAgICAgfQotICAgICAgICAgICAgCisKICAgICAvKgogICAgICAqSWYgdHcKICAgICAgbyBhc3NlcnRzIGFyZSBtZW50aW9uZWQgaW4gb25lIG1ldGhvZCwgdGhlbiBsYXN0IGFzc2VydCBpcyB0YWtlbiBpbgpAQCAtNjUsNyArNjUsNyBAQAogICAgIEBUZXN0KGdyb3VwcyA9eyAicHVsc2UifSApIC8vIHRlc3QgbWV0aG9kCiAgICAgLy9wdWJsaWMgdm9pZCB3ZWJ0ZXN0KFN0cmluZyBob3N0LCBTdHJpbmcgcG9ydCwgU3RyaW5nIGNvbnRleHRyb290KSB0aHJvd3MgRXhjZXB0aW9uewogICAgIHB1YmxpYyB2b2lkIGpzZkFwcERlcGxveWVkRmlyc3RQYWdldGVzdCgpIHRocm93cyBFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIHRyeXsKICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlJ1bm5pbmcgVGVzdE1ldGhvZCB3ZWJ0ZXN0Iik7CiAKQEAgLTgzLDMzICs4MywzMyBAQAogCiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKICAgICAgICAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7Ci0gICAgICAgIFN0cmluZyB0ZXN0TGluZSA9IG51bGw7ICAgICAgICAKKyAgICAgICAgU3RyaW5nIHRlc3RMaW5lID0gbnVsbDsKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJXZWxjb21lIHRvIGpBc3Ryb2xvZ2VyIikhPS0xKXsKLSAgICAgICAgICAgICAgICByZXN1bHQ9dHJ1ZTsgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXN1bHQ9dHJ1ZTsKICAgICAgICAgICAgICAgICB0ZXN0TGluZSA9IGxpbmU7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIH0gICAgIAotICAgICAgICAgICAgICAgIAorCisgICAgICAgIH0KKwogICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHJlc3VsdCwgdHJ1ZSwiVW5leHBlY3RlZCBIVE1MIik7Ci0gICAgICAgICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KIAogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgQFRlc3QoZ3JvdXBzID17ICJwdWxzZSJ9ICkgLy8gdGVzdCBtZXRob2QKICAgICBwdWJsaWMgdm9pZCBqc2ZJbmRleFBhZ2VCYXNpY1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uewogICAgICAgICAgdHJ5ewotICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlJ1bm5pbmcgVGVzdE1ldGhvZCBTaW1wbGVIVE1MVGVzdCIpOwotICAgICAgICAgCisKIAogICAgICAgICBTdHJpbmcgdGVzdHVybCA9ICJodHRwOi8vIiArIG1faG9zdCAgKyAiOiIgKyBtX3BvcnQgKyAiLyIrIHN0ckNvbnRleHRSb290ICsgIi9pbmRleC5qc3AiOwogICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiVVJMIGlzOiAiK3Rlc3R1cmwpOwpAQCAtMTE5LDM2ICsxMTksMzYgQEAKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwogCi0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gY29ubi5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIAogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CiAgICAgICAgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOwotICAgICAgICBTdHJpbmcgdGVzdExpbmUgPSBudWxsOyAgICAgICAgCisgICAgICAgIFN0cmluZyB0ZXN0TGluZSA9IG51bGw7CiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiSmF2YVNlcnZlciBGYWNlcyBHcmVldGluZ3MgUGFnZSIpIT0tMSl7CiAgICAgICAgICAgICAgICAgcmVzdWx0PXRydWU7CiAgICAgICAgICAgICAgdGVzdExpbmUgPSBsaW5lOwogICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbih0ZXN0TGluZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgIH0gICAgICAgIAotICAgICAgICAgICAgICAgIAorCisgICAgICAgIH0KKwogICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHJlc3VsdCwgdHJ1ZSk7Ci0gICAgICAgIAorCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBlY2hvKFN0cmluZyBtc2cpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1zZyk7CiAgICAgfQotICAgIAotICAgIAorCisKIC8qCiAgICAgQFRlc3QoZ3JvdXBzPXsicHVsc2UifSkKICAgICBwdWJsaWMgdm9pZCB0ZXN0UmVxdWVzdFJlc3BvbnNlKCkgdGhyb3dzIEV4Y2VwdGlvbnsKQEAgLTE2NCwzNCArMTY0LDM0IEBACiAgICAgICAgICAgICBodHRwZ2V0ID0gbmV3IEdldE1ldGhvZCh0ZXN0dXJsKTsKICAgICAgICAgICAgIHBvc3Q9bmV3IFBvc3RNZXRob2QoImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9qc2Zhc3Ryb2xvZ2VyL2ZhY2VzL2dyZWV0aW5ncy5qc3AiKTsKIAotICAgICAgICAgICAgCisKICAgICAgICAgICAgIE5hbWVWYWx1ZVBhaXJbXSBteWRhdGEgPSB7CiAgICAgICAgICAgICAgICAgLy8gbmV3IE5hbWVWYWx1ZVBhaXIoImxvZ2luSUQiLCBpdFVzZXIpLAogICAgICAgICAgICAgICAgIC8vIG5ldyBOYW1lVmFsdWVQYWlyKCJwYXNzd29yZCIsIGl0UHdkKSwgTm90IHdvcmtpbmcgZm9yIGVkaXRpbmcgb2YgYnVnCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBuZXcgTmFtZVZhbHVlUGFpcigibmFtZSIsbmFtZSksCiAgICAgICAgICAgICAgICAgbmV3IE5hbWVWYWx1ZVBhaXIoImJpcnRoZGF5IixiaXJ0aGRheSkKICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcG9zdC5zZXRSZXF1ZXN0Qm9keShteWRhdGEpOwogICAgICAgICAgICAgaW50IHN0YXR1c0NvZGUgPSBodHRwY2xpZW50LmV4ZWN1dGVNZXRob2QocG9zdCk7CiAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigicHJpbnQgc3RhdHVzIG9rICIrc3RhdHVzQ29kZSk7CiAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhzdGF0dXNDb2RlLCAyMDApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChzdGF0dXNDb2RlICE9IEh0dHBTdGF0dXMuU0NfT0spIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk1ldGhvZCBmYWlsZWQ6ICIgKyBwb3N0LmdldFN0YXR1c0xpbmUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBwb3N0LmdldFN0YXR1c0xpbmUoKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHJlc3BvbnNlPXBvc3QuZ2V0UmVzcG9uc2VCb2R5QXNTdHJpbmcoKTsKICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4ocmVzcG9uc2UpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAKKworCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KICovCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL2pzZmluamVjdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9qc2ZpbmplY3Rpb24vYnVpbGQueG1sCmluZGV4IGYxYjFjM2QuLjJjYzkwODUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL2pzZmluamVjdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWIvanNmaW5qZWN0aW9uL2J1aWxkLnhtbApAQCAtMjAsMzYgKzIwLDM2IEBACiA8cHJvamVjdCBuYW1lPSJqc2ZpbmplY3Rpb24iIGRlZmF1bHQ9ImRlZmF1bHQiIGJhc2VkaXI9Ii4iPgogICAgIDxwcm9wZXJ0eSBmaWxlPSJidWlsZC5wcm9wZXJ0aWVzIi8+CiAgICAgPHByb3BlcnR5IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS1jb25maWcucHJvcGVydGllcyIvPgotICAgCi0gICAgCisKKwogICAgIDxkZXNjcmlwdGlvbj5CdWlsZHMsIHRlc3RzLCBhbmQgcnVucyB0aGUgcHJvamVjdCBIZWxsbyBKU1AgQXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgotICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4gICAKKyAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC8ke2RlcGxveS5wbGF0Zm9ybX0tdGFyZ2V0cy54bWwiLz4KLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJ1bnRlc3QsdW5kZXBsb3kiIC8+ICAgICAgICAKKworICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxkZXBsb3kscnVudGVzdCx1bmRlcGxveSIgLz4KICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWRlcGxveSIgZGVwZW5kcz0iYnVpbGQsZGVwbG95IiAvPgotICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlLXRlc3RzIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1pbXBsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+IAorCisgICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+CiAgICAgICAgIDwhLS0gIEFERCBodG1sdW5pdCBDTEFTU1BBVEggLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudGVzdC1pbXBsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iaGVsbG9teSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0idGVzdG5nLnRlc3QubmFtZSIgdmFsdWU9IiR7dGVzdG5nLnRlc3QubmFtZX0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RuZy50ZXN0Y2xpZW50IiB2YWx1ZT0iSlNGSW5qZWN0aW9uVGVzdE5HIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAgCisKICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgCisKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWIvanNmaW5qZWN0aW9uL21ldGFkYXRhL2ZhY2VzLWNvbmZpZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9qc2ZpbmplY3Rpb24vbWV0YWRhdGEvZmFjZXMtY29uZmlnLnhtbAppbmRleCA5NWVlNWM0Li5kNzBlY2Q4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9qc2ZpbmplY3Rpb24vbWV0YWRhdGEvZmFjZXMtY29uZmlnLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9qc2ZpbmplY3Rpb24vbWV0YWRhdGEvZmFjZXMtY29uZmlnLnhtbApAQCAtMjcsNSArMjcsNSBAQAogICAgIDxtYW5hZ2VkLWJlYW4tY2xhc3M+anNmaW5qZWN0aW9uLlRlc3RCZWFuPC9tYW5hZ2VkLWJlYW4tY2xhc3M+CiAgICAgPG1hbmFnZWQtYmVhbi1zY29wZT5yZXF1ZXN0PC9tYW5hZ2VkLWJlYW4tc2NvcGU+CiAgIDwvbWFuYWdlZC1iZWFuPgotICAKKwogPC9mYWNlcy1jb25maWc+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9qc2ZpbmplY3Rpb24vc3JjL2phdmEvRmlsdGVyVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWIvanNmaW5qZWN0aW9uL3NyYy9qYXZhL0ZpbHRlclRlc3QuamF2YQppbmRleCA4OTgyNDBhLi4wZTgwMTI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9qc2ZpbmplY3Rpb24vc3JjL2phdmEvRmlsdGVyVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL2pzZmluamVjdGlvbi9zcmMvamF2YS9GaWx0ZXJUZXN0LmphdmEKQEAgLTIzLDE1ICsyMywxNSBAQAogaW1wb3J0IGphdmF4Lm5hbWluZy4qOwogCiBwdWJsaWMgY2xhc3MgRmlsdGVyVGVzdCBpbXBsZW1lbnRzIEZpbHRlcnsKLSAgICAKKwogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKICAgICBwcml2YXRlIEBSZXNvdXJjZShuYW1lPSJqZGJjL19fZGVmYXVsdCIpIERhdGFTb3VyY2UgZHM7CiAvLyAgICBwcml2YXRlIERhdGFTb3VyY2UgZHM7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuZGVzdHJveV0iKTsKLSAgICB9ICAgIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwgRmlsdGVyQ2hhaW4gZmlsdGVyQ2hhaW4pIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLCBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW0ZpbHRlci5kb0ZpbHRlcl0iKTsKIApAQCAtNTgsMTMgKzU4LDEzIEBACiAKICAgICAgICAgKChIdHRwU2VydmxldFJlcXVlc3QpcmVxdWVzdCkuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgbXNnKTsKICAgICAgICAgZmlsdGVyQ2hhaW4uZG9GaWx0ZXIocmVxdWVzdCwgcmVzcG9uc2UpOwotICAgICAgICAKLSAgICB9ICAgIAotICAgIAotICAgIAorCisgICAgfQorCisKICAgICBwdWJsaWMgdm9pZCBpbml0KGpha2FydGEuc2VydmxldC5GaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGZpbHRlckNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWIvanNmaW5qZWN0aW9uL3NyYy90ZXN0L0pTRkluamVjdGlvblRlc3RORy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWIvanNmaW5qZWN0aW9uL3NyYy90ZXN0L0pTRkluamVjdGlvblRlc3RORy5qYXZhCmluZGV4IDljM2YwOWYuLjI4NzA3NGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL2pzZmluamVjdGlvbi9zcmMvdGVzdC9KU0ZJbmplY3Rpb25UZXN0TkcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9qc2ZpbmplY3Rpb24vc3JjL3Rlc3QvSlNGSW5qZWN0aW9uVGVzdE5HLmphdmEKQEAgLTM0LDEzICszNCwxMyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9CiAgICAgICAgICJzaW1wbGUtd2ViYXBwLWpzZi1pbmplY3Rpb24iOwotICAgCisKICAgICBwcml2YXRlIFN0cmluZyBzdHJDb250ZXh0Um9vdD0ianNmaW5qZWN0aW9uIjsKIAogICAgIHN0YXRpYyBTdHJpbmcgcmVzdWx0ID0gIiI7CiAgICAgU3RyaW5nIGhvc3Q9U3lzdGVtLmdldFByb3BlcnR5KCJodHRwLmhvc3QiKTsKICAgICBTdHJpbmcgcG9ydD1TeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucG9ydCIpOwotICAgICAgICAgICAKKwogICAgIC8qCiAgICAgICpJZiB0d28gYXNzZXJ0cyBhcmUgbWVudGlvbmVkIGluIG9uZSBtZXRob2QsIHRoZW4gbGFzdCBhc3NlcnQgaXMgdGFrZW4gaW4KICAgICAgKnRvIGFjY291bnQuCkBAIC01MSw3ICs1MSw3IEBACiAgICAgLy9AUGFyYW1ldGVycyh7ICJob3N0IiwgInBvcnQiLCAiY29udGV4dHJvb3QiIH0pCiAgICAgQFRlc3QoZ3JvdXBzID17ICJwdWxzZSJ9ICkgLy8gdGVzdCBtZXRob2QKICAgICBwdWJsaWMgdm9pZCBpbmplY3RlZFZhbHVlc1Rlc3RQYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICB0cnkgewogCiAgICAgICAgIFN0cmluZyBlcnJvclRleHQgPSAiIjsKQEAgLTc4LDggKzc4LDggQEAKICAgICAgICAgU3RyaW5nIGxpbmUyID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGxpbmUzID0gbnVsbDsKICAgICAgICAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7Ci0JU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0gIkluamVjdGVkIGVudHJ5IjsKLQlTdHJpbmcgRElWSURFUiA9ICI9PT0iOworICAgIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRSA9ICJJbmplY3RlZCBlbnRyeSI7CisgICAgU3RyaW5nIERJVklERVIgPSAiPT09IjsKICAgICAgICAgU3RyaW5nIFBDID0gIlBvc3Rjb25zdHJ1Y3QiOwogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgLy9lY2hvICgiTElORToiK2xpbmUpOwpAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgICAgICAgU3RyaW5nIGluamVjdGVkTnVtYmVyID0gaW5qZWN0aW9uMkFycmF5WzFdLnRyaW0oKTsKICAgICAgICAgICAvL2VjaG8oImluamVjdGVkTnVtYmVyID0gIiArIGluamVjdGVkTnVtYmVyKTsKICAgICAgICAgICBpbnQgbnVtID0gSW50ZWdlci5wYXJzZUludChpbmplY3RlZE51bWJlcik7Ci0gIAorCiAgICAgICAgICAgaWYgKCBudW0gPCAwICkgewogICAgICAgICAgICAgZWNobygiRVJST1I6IGluamVjdGlvbiAyIGlzIGxlc3MgdGhhbiB6ZXJvLiIpOwogICAgICAgICAgICAgZXJyb3JUZXh0ID0gZXJyb3JUZXh0ICsgIkVSUk9SOiBpbmplY3Rpb24gMiBpcyBsZXNzIHRoYW4gemVybyI7CkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICAgICAgICAgICAgICBlY2hvKCJFUlJPUjpAUG9zdENvbnN0cnVjdCBmYWlsZWQiKTsKICAgICAgICAgICAgICAgICBlcnJvclRleHQgPSBlcnJvclRleHQgKyAiRVJST1I6IEBQb3N0Q29uc3RydWN0IGZhaWxlZCI7CiAgICAgICAgICAgICAgICAgdGVzdFBhc3MgPSBmYWxzZTsKLSAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgZWNobygiRVJST1I6IGxpbmUgd2l0aCAiICsgUEMgKyAiIG5vdCBmb3VuZC4iKTsKICAgICAgICAgICBlcnJvclRleHQgPSBlcnJvclRleHQgKyAiRVJST1I6IGxpbmUgd2l0aCAiICsgUEMgKyAiIG5vdCBmb3VuZCI7CkBAIC0xMzYsNyArMTM2LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHModGVzdFBhc3MsIHRydWUsIGVycm9yVGV4dCk7Ci0gICAgICAgIAorCiAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICBlY2hvKCJFUlJPUjogY2F1Z2h0IGV4Y2VwdGlvbiEiKTsKICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL3N0cnV0c2Jhc2ljL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL3N0cnV0c2Jhc2ljL2J1aWxkLnhtbAppbmRleCBmNzE2MzRlLi43YWQ0YjNlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9zdHJ1dHNiYXNpYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWIvc3RydXRzYmFzaWMvYnVpbGQueG1sCkBAIC0xOSwxNCArMTksMTQgQEAKIAogPHByb2plY3QgbmFtZT0ic3RydXRzLWpzcCIgZGVmYXVsdD0iZGVmYXVsdCIgYmFzZWRpcj0iLiI+CiAgICAgPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiLz4KLSAgICAKKwogICAgIDxwcm9wZXJ0eSBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC8ke2RlcGxveS5wbGF0Zm9ybX0tY29uZmlnLnByb3BlcnRpZXMiLz4KLSAgICAKLSAgICAKKworCiAgICAgPGRlc2NyaXB0aW9uPkJ1aWxkcywgdGVzdHMsIGFuZCBydW5zIHRoZSBwcm9qZWN0IEhlbGxvIEpTUCBBcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+Ci0gICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPiAgIAorICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS10YXJnZXRzLnhtbCIvPgotICAgIAorCiAgICAgPGRlc2NyaXB0aW9uPkJ1aWxkcywgdGVzdHMsIGFuZCBydW5zIHRoZSBwcm9qZWN0IEhlbGxvIEpTUCBBcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgPCEtLSA8aW1wb3J0IGZpbGU9Im5icHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPi0tPgogCkBAIC0zNSwyMSArMzUsMjEgQEAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImFkZC5zdHJ1dHMuamFyIiB2YWx1ZT0idHJ1ZSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWltcGwiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktJHtkZXBsb3kucGxhdGZvcm19LWltcGwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRlcGxveWVkLmFwcCIgdmFsdWU9IiR7d2FyLmZpbGV9LndhciIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+IAorCisgICAgPHRhcmdldCAgbmFtZT0icnVudGVzdCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudGVzdC1pbXBsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RuZy50ZXN0Lm5hbWUiIHZhbHVlPSIke3Rlc3RuZy50ZXN0Lm5hbWV9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0bmcudGVzdGNsaWVudCIgdmFsdWU9IlN0cnV0c1dlYlRlc3RORyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgIAorCiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS0ke2RlcGxveS5wbGF0Zm9ybX0taW1wbCIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWIvc3RydXRzYmFzaWMvbWV0YWRhdGEvc3RydXRzLWNvbmZpZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9zdHJ1dHNiYXNpYy9tZXRhZGF0YS9zdHJ1dHMtY29uZmlnLnhtbAppbmRleCBhZmZkZWQxLi4wNDMxODI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9zdHJ1dHNiYXNpYy9tZXRhZGF0YS9zdHJ1dHMtY29uZmlnLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9zdHJ1dHNiYXNpYy9tZXRhZGF0YS9zdHJ1dHMtY29uZmlnLnhtbApAQCAtMjQsMTEgKzI0LDExIEBACiAKIDxzdHJ1dHMtY29uZmlnPgogICAgIDxmb3JtLWJlYW5zPgotICAgIAorCiAgICAgPC9mb3JtLWJlYW5zPgotICAgIAorCiAgICAgPGdsb2JhbC1leGNlcHRpb25zPgotICAgIAorCiAgICAgPC9nbG9iYWwtZXhjZXB0aW9ucz4KIAogICAgIDxnbG9iYWwtZm9yd2FyZHM+CkBAIC0zOCwxMSArMzgsMTEgQEAKICAgICA8YWN0aW9uLW1hcHBpbmdzPgogICAgICAgICA8YWN0aW9uIHBhdGg9Ii9XZWxjb21lIiBmb3J3YXJkPSIvd2VsY29tZVN0cnV0cy5qc3AiLz4KICAgICA8L2FjdGlvbi1tYXBwaW5ncz4KLSAgICAKKwogICAgIDxjb250cm9sbGVyIHByb2Nlc3NvckNsYXNzPSJvcmcuYXBhY2hlLnN0cnV0cy50aWxlcy5UaWxlc1JlcXVlc3RQcm9jZXNzb3IiLz4KIAotICAgIDxtZXNzYWdlLXJlc291cmNlcyBwYXJhbWV0ZXI9IkFwcGxpY2F0aW9uUmVzb3VyY2UiLz4gICAgCi0gICAgCisgICAgPG1lc3NhZ2UtcmVzb3VyY2VzIHBhcmFtZXRlcj0iQXBwbGljYXRpb25SZXNvdXJjZSIvPgorCiAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09IFRpbGVzIHBsdWdpbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+CiAgICAgPCEtLQogICAgIFRoaXMgcGx1Z2luIGluaXRpYWxpemUgVGlsZXMgZGVmaW5pdGlvbiBmYWN0b3J5LiBUaGlzIGxhdGVyIGNhbiB0YWtlcyBzb21lCkBAIC03MSwxNSArNzEsMTUgQEAKICAgICBQYXRocyBmb3VuZCBpbiBUaWxlcyBkZWZpbml0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIG1haW4gY29udGV4dC4KICAgICAtLT4KICAgICA8cGx1Zy1pbiBjbGFzc05hbWU9Im9yZy5hcGFjaGUuc3RydXRzLnRpbGVzLlRpbGVzUGx1Z2luIiA+Ci0gICAgICAgIDxzZXQtcHJvcGVydHkgcHJvcGVydHk9ImRlZmluaXRpb25zLWNvbmZpZyIgdmFsdWU9Ii9XRUItSU5GL3RpbGVzLWRlZnMueG1sIiAvPiAgICAgIAorICAgICAgICA8c2V0LXByb3BlcnR5IHByb3BlcnR5PSJkZWZpbml0aW9ucy1jb25maWciIHZhbHVlPSIvV0VCLUlORi90aWxlcy1kZWZzLnhtbCIgLz4KICAgICAgICAgPHNldC1wcm9wZXJ0eSBwcm9wZXJ0eT0ibW9kdWxlQXdhcmUiIHZhbHVlPSJ0cnVlIiAvPgogICAgIDwvcGx1Zy1pbj4KLSAgICAKKwogICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PSBWYWxpZGF0b3IgcGx1Z2luID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICAgICA8cGx1Zy1pbiBjbGFzc05hbWU9Im9yZy5hcGFjaGUuc3RydXRzLnZhbGlkYXRvci5WYWxpZGF0b3JQbHVnSW4iPgogICAgICAgICA8c2V0LXByb3BlcnR5CiAgICAgICAgICAgICBwcm9wZXJ0eT0icGF0aG5hbWVzIgogICAgICAgICAgICAgdmFsdWU9Ii9XRUItSU5GL3ZhbGlkYXRvci1ydWxlcy54bWwsL1dFQi1JTkYvdmFsaWRhdGlvbi54bWwiLz4KICAgICA8L3BsdWctaW4+Ci0gIAorCiA8L3N0cnV0cy1jb25maWc+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9zdHJ1dHNiYXNpYy9tZXRhZGF0YS93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWIvc3RydXRzYmFzaWMvbWV0YWRhdGEvd2ViLnhtbAppbmRleCBhN2E5N2FmLi41OGUzNzI1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9zdHJ1dHNiYXNpYy9tZXRhZGF0YS93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL3N0cnV0c2Jhc2ljL21ldGFkYXRhL3dlYi54bWwKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgPC9zZXNzaW9uLXRpbWVvdXQ+CiAgICAgPC9zZXNzaW9uLWNvbmZpZz4KICAgICA8d2VsY29tZS1maWxlLWxpc3Q+Ci0JPHdlbGNvbWUtZmlsZT4KKyAgICA8d2VsY29tZS1maWxlPgogICAgICAgICAgICAgaW5kZXguanNwCiAgICAgICAgIDwvd2VsY29tZS1maWxlPgogICAgIDwvd2VsY29tZS1maWxlLWxpc3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlYi9zdHJ1dHNiYXNpYy9zcmMvdGVzdC9TdHJ1dHNXZWJUZXN0TkcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL3N0cnV0c2Jhc2ljL3NyYy90ZXN0L1N0cnV0c1dlYlRlc3RORy5qYXZhCmluZGV4IDA3OGY3MjkuLmQ5ODU0MDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL3N0cnV0c2Jhc2ljL3NyYy90ZXN0L1N0cnV0c1dlYlRlc3RORy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2ViL3N0cnV0c2Jhc2ljL3NyYy90ZXN0L1N0cnV0c1dlYlRlc3RORy5qYXZhCkBAIC0zNCw3ICszNCw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPQogICAgICAgICAiSlNQIFBhZ2UgVGVzdCI7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBzdHJDb250ZXh0Um9vdD0ic3RydXRzYmFzaWMiOwogCiAgICAgc3RhdGljIFN0cmluZyByZXN1bHQgPSAiIjsKQEAgLTQyLDcgKzQyLDcgQEAKICAgICBTdHJpbmcgbV9wb3J0PSIiOwogICAgIFN0cmluZyBob3N0PVN5c3RlbS5nZXRQcm9wZXJ0eSgiaHR0cC5ob3N0Iik7CiAgICAgU3RyaW5nIHBvcnQ9U3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKTsKLSAgICAKKwogICAgIC8vQFBhcmFtZXRlcnMoeyJob3N0IiwicG9ydCJ9KQogICAgIEBCZWZvcmVNZXRob2QKICAgICAvL3B1YmxpYyB2b2lkIGJlZm9yZVRlc3QoU3RyaW5nIGh0dHBIb3N0LFN0cmluZyBodHRwUG9ydCl7CkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSG9zdCBpcy0tPiIrbV9ob3N0KTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQb3J0IGlzLS0+IittX3BvcnQpOwogICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgLyoKICAgICAgKklmIHR3byBhc3NlcnRzIGFyZSBtZW50aW9uZWQgaW4gb25lIG1ldGhvZCwgdGhlbiBsYXN0IGFzc2VydCBpcyB0YWtlbiBpbgogICAgICAqdG8gYWNjb3VudC4KQEAgLTYzLDkgKzYzLDkgQEAKICAgICBAVGVzdChncm91cHMgPXsgInB1bHNlIn0gKSAvLyB0ZXN0IG1ldGhvZAogICAgIC8vcHVibGljIHZvaWQgd2VidGVzdChTdHJpbmcgaG9zdCwgU3RyaW5nIHBvcnQsIFN0cmluZyBjb250ZXh0cm9vdCkgdGhyb3dzIEV4Y2VwdGlvbnsKICAgICBwdWJsaWMgdm9pZCBzdHJ1dHNBcHBEZXBsb3llZHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICB0cnl7Ci0gICAgICAgICAKKwogCiAgICAgICAgIFN0cmluZyB0ZXN0dXJsID0gImh0dHA6Ly8iICsgbV9ob3N0ICArICI6IiArIG1fcG9ydCArICIvIisgc3RyQ29udGV4dFJvb3QgKyAiL2luZGV4LmpzcCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVVJMIGlzOiAiK3Rlc3R1cmwpOwpAQCAtODAsMzEgKzgwLDMxIEBACiAKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwogICAgICAgICBib29sZWFuIHJlc3VsdD1mYWxzZTsKLSAgICAgICAgU3RyaW5nIHRlc3RMaW5lID0gbnVsbDsgICAgICAgIAorICAgICAgICBTdHJpbmcgdGVzdExpbmUgPSBudWxsOwogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlN0cnV0cyBXZWxjb21lIFBhZ2UiKSE9LTEpewogICAgICAgICAgICAgICAgIHJlc3VsdD10cnVlOwogICAgICAgICAgICAgIHRlc3RMaW5lID0gbGluZTsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3RMaW5lKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgfSAgICAgICAgCi0gICAgICAgICAgICAgICAgCisKKyAgICAgICAgfQorCiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVzdWx0LCB0cnVlLCJVbmV4cGVjdGVkIEhUTUwiKTsKLSAgICAgICAgICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihlKTsKICAgICAgICAgfQogCiAgICAgfQotICAgIAotICAgIAorCisKICAgICBAVGVzdChncm91cHMgPXsgInB1bHNlIn0gKSAvLyB0ZXN0IG1ldGhvZAogICAgIHB1YmxpYyB2b2lkIHN0cnV0c0Jhc2ljSFRNTFRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uewogICAgICAgICAgdHJ5ewotICAgICAgICAgCisKIAogICAgICAgICBTdHJpbmcgdGVzdHVybCA9ICJodHRwOi8vIiArIG1faG9zdCAgKyAiOiIgKyBtX3BvcnQgKyAiLyIrIHN0ckNvbnRleHRSb290ICsgIi9XZWxjb21lLmRvIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVUkwgaXM6ICIrdGVzdHVybCk7CkBAIC0xMTksMjQgKzExOSwyNCBAQAogCiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKICAgICAgICAgYm9vbGVhbiByZXN1bHQ9ZmFsc2U7Ci0gICAgICAgIFN0cmluZyB0ZXN0TGluZSA9IG51bGw7ICAgICAgICAKKyAgICAgICAgU3RyaW5nIHRlc3RMaW5lID0gbnVsbDsKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTdHJ1dHMgQXBwbGljYXRpb25zIGluIE5ldGJlYW5zISIpIT0tMSl7CiAgICAgICAgICAgICAgICAgcmVzdWx0PXRydWU7CiAgICAgICAgICAgICAgdGVzdExpbmUgPSBsaW5lOwogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVzdExpbmUpOwogICAgICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICB9ICAgICAgICAKLSAgICAgICAgICAgICAgICAKKworICAgICAgICB9CisKICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhyZXN1bHQsIHRydWUsIlVuZXhwZWN0ZWQgSFRNTCIpOwotICAgICAgICAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGUpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIGVjaG8oU3RyaW5nIG1zZykgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL2V4dGVuc2lvbnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL2V4dGVuc2lvbnMvYnVpbGQueG1sCmluZGV4IGNiMTkzZDQuLjE0YzkxODUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2VsZC9leHRlbnNpb25zL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlbGQvZXh0ZW5zaW9ucy9idWlsZC54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDxwcm9qZWN0IG5hbWU9ImV4dGVuc2lvbnMiIGRlZmF1bHQ9ImRlZmF1bHQiIGJhc2VkaXI9Ii4iPgogICAgIDxwcm9wZXJ0eSBmaWxlPSJidWlsZC5wcm9wZXJ0aWVzIi8+CiAgICAgPHByb3BlcnR5IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS1jb25maWcucHJvcGVydGllcyIvPgotICAgCisKICAgICA8ZGVzY3JpcHRpb24+QnVpbGRzLCB0ZXN0cywgYW5kIHJ1bnMgdGhlIFdlbGQgZXh0ZW5zaW9uIHRlc3RzPC9kZXNjcmlwdGlvbj4KIAogICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KQEAgLTI4LDE1ICsyOCwxNSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW50ZXN0LHVuZGVwbG95IiAvPgogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtZGVwbG95IiBkZXBlbmRzPSJidWlsZCxkZXBsb3kiIC8+Ci0gICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUtdGVzdHMiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWltcGwiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktJHtkZXBsb3kucGxhdGZvcm19LWltcGwiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgIG5hbWU9InJ1bnRlc3QiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bnRlc3QtaW1wbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSJleHRlbnNpb25zIi8+CkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdG5nLnRlc3RjbGllbnQiIHZhbHVlPSJFeHRlbnNpb25zVGVzdE5HIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlbGQvZXh0ZW5zaW9ucy9zcmMvamF2YS9leHRlbnNpb25zL0V4dGVuc2lvbkJlYW5TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlbGQvZXh0ZW5zaW9ucy9zcmMvamF2YS9leHRlbnNpb25zL0V4dGVuc2lvbkJlYW5TZXJ2bGV0LmphdmEKaW5kZXggMjBjZTAyMS4uMzI4MWVkMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL2V4dGVuc2lvbnMvc3JjL2phdmEvZXh0ZW5zaW9ucy9FeHRlbnNpb25CZWFuU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2VsZC9leHRlbnNpb25zL3NyYy9qYXZhL2V4dGVuc2lvbnMvRXh0ZW5zaW9uQmVhblNlcnZsZXQuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogLyoqCiAgKiBDaGVjayB0aGF0IFRlc3RFeHRlbnNpb25CZWFuIGlzIGRlcGxveWVkIGFuZCBhY2Nlc3NpYmxlLAogICogYW5kIHRoYXQgYWxsIGV2ZW50IGFyZSBiZWluZyBvYnNlcnZlZC4KLSAqIAorICoKICAqIEBhdXRob3IgcGF1bHNhbmRvegogICogQGF1dGhvciBTYW50aWFnby5QZXJpY2FzR2VlcnRzZW5Ac3VuLmNvbQogICovCkBAIC02Myw3ICs2Myw3IEBACiAgICAgfQogCiAgICAgLy8gPGVkaXRvci1mb2xkIGRlZmF1bHRzdGF0ZT0iY29sbGFwc2VkIiBkZXNjPSJIdHRwU2VydmxldCBtZXRob2RzLiBDbGljayBvbiB0aGUgKyBzaWduIG9uIHRoZSBsZWZ0IHRvIGVkaXQgdGhlIGNvZGUuIj4KLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC04OSw3ICs4OSw3IEBACiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogUmV0dXJucyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2bGV0LgogICAgICAqIEByZXR1cm4gYSBTdHJpbmcgY29udGFpbmluZyBzZXJ2bGV0IGRlc2NyaXB0aW9uCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlbGQvZXh0ZW5zaW9ucy9zcmMvamF2YS9leHRlbnNpb25zL0phckV4dGVuc2lvbkJlYW5TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlbGQvZXh0ZW5zaW9ucy9zcmMvamF2YS9leHRlbnNpb25zL0phckV4dGVuc2lvbkJlYW5TZXJ2bGV0LmphdmEKaW5kZXggMWM5NGQyNi4uMGViYTY0MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL2V4dGVuc2lvbnMvc3JjL2phdmEvZXh0ZW5zaW9ucy9KYXJFeHRlbnNpb25CZWFuU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2VsZC9leHRlbnNpb25zL3NyYy9qYXZhL2V4dGVuc2lvbnMvSmFyRXh0ZW5zaW9uQmVhblNlcnZsZXQuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogLyoqCiAgKiBDaGVjayB0aGF0IEV4dGVuc2lvbkJlYW4gaXMgZGVwbG95ZWQgYW5kIGFjY2Vzc2libGUKICAqIGluIEpBUiBmaWxlLgotICogCisgKgogICogQGF1dGhvciBwYXVsc2FuZG96CiAgKiBAYXV0aG9yIFNhbnRpYWdvLlBlcmljYXNHZWVydHNlbkBzdW4uY29tCiAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2VsZC9leHRlbnNpb25zL3NyYy9qYXZhL2V4dGVuc2lvbnMvV2ViQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL2V4dGVuc2lvbnMvc3JjL2phdmEvZXh0ZW5zaW9ucy9XZWJCZWFuLmphdmEKaW5kZXggY2FlZWM4ZS4uN2RiN2Q2ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL2V4dGVuc2lvbnMvc3JjL2phdmEvZXh0ZW5zaW9ucy9XZWJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL2V4dGVuc2lvbnMvc3JjL2phdmEvZXh0ZW5zaW9ucy9XZWJCZWFuLmphdmEKQEAgLTM1LDYgKzM1LDYgQEAKICAgICBwdWJsaWMgaW50IGdldEkoKSB7CiAgICAgICAgIHJldHVybiBpbmplY3RlZFJlc291cmNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0KCkgeyByZXR1cm4gIkJFQU4iICsgaW5qZWN0ZWRSZXNvdXJjZTsgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL2V4dGVuc2lvbnMvc3JjL2phdmEvZXh0ZW5zaW9ucy9XZWJCZWFuU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL2V4dGVuc2lvbnMvc3JjL2phdmEvZXh0ZW5zaW9ucy9XZWJCZWFuU2VydmxldC5qYXZhCmluZGV4IGUyYmEyNzkuLmI2NjBhNzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2VsZC9leHRlbnNpb25zL3NyYy9qYXZhL2V4dGVuc2lvbnMvV2ViQmVhblNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlbGQvZXh0ZW5zaW9ucy9zcmMvamF2YS9leHRlbnNpb25zL1dlYkJlYW5TZXJ2bGV0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKIAogLyoqCiAgKiBUZXN0IHRoYXQgV2ViQmVhbiBpcyBkZXBsb3llZCBhbmQgYWNjZXNzaWJsZS4KLSAqIAorICoKICAqIEBhdXRob3IgcGF1bHNhbmRvegogICovCiBwdWJsaWMgY2xhc3MgV2ViQmVhblNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CkBAIC05OSwxMyArOTksMTMgQEAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+IiArIGluamVjdCArICIgIiArIHBvc3RDb25zdHJ1Y3QgKyAiPC9oMT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2JvZHk+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9odG1sPiIpOwotICAgICAgICB9IGZpbmFsbHkgeyAKKyAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIG91dC5jbG9zZSgpOwogICAgICAgICB9Ci0gICAgfSAKKyAgICB9CiAKICAgICAvLyA8ZWRpdG9yLWZvbGQgZGVmYXVsdHN0YXRlPSJjb2xsYXBzZWQiIGRlc2M9Ikh0dHBTZXJ2bGV0IG1ldGhvZHMuIENsaWNrIG9uIHRoZSArIHNpZ24gb24gdGhlIGxlZnQgdG8gZWRpdCB0aGUgY29kZS4iPgotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPkdFVDwvY29kZT4gbWV0aG9kLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC0xMTYsOSArMTE2LDkgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgfSAKKyAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTEzMSw3ICsxMzEsNyBAQAogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIFJldHVybnMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgc2VydmxldC4KICAgICAgKiBAcmV0dXJuIGEgU3RyaW5nIGNvbnRhaW5pbmcgc2VydmxldCBkZXNjcmlwdGlvbgogICAgICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL251bWJlcmd1ZXNzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2VsZC9udW1iZXJndWVzcy9idWlsZC54bWwKaW5kZXggYjY2NzEwZS4uY2Y2NGYzMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL251bWJlcmd1ZXNzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlbGQvbnVtYmVyZ3Vlc3MvYnVpbGQueG1sCkBAIC0yMCwzNSArMjAsMzUgQEAKIDxwcm9qZWN0IG5hbWU9Im51bWJlcmd1ZXNzIiBkZWZhdWx0PSJkZWZhdWx0IiBiYXNlZGlyPSIuIj4KICAgICA8cHJvcGVydHkgZmlsZT0iYnVpbGQucHJvcGVydGllcyIvPgogICAgIDxwcm9wZXJ0eSBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC8ke2RlcGxveS5wbGF0Zm9ybX0tY29uZmlnLnByb3BlcnRpZXMiLz4KLSAgIAotICAgIAorCisKICAgICA8ZGVzY3JpcHRpb24+QnVpbGRzLCB0ZXN0cywgYW5kIHJ1bnMgdGhlIHByb2plY3QgSGVsbG8gSlNQIEFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KLSAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+ICAgCisgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LXRhcmdldHMueG1sIi8+Ci0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW50ZXN0LHVuZGVwbG95IiAvPiAgICAgICAgCisKKyAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJ1bnRlc3QsdW5kZXBsb3kiIC8+CiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1kZXBsb3kiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSIgLz4KLSAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZS10ZXN0cyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtaW1wbCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS0ke2RlcGxveS5wbGF0Zm9ybX0taW1wbCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQgIG5hbWU9InJ1bnRlc3QiPiAKKworICAgIDx0YXJnZXQgIG5hbWU9InJ1bnRlc3QiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bnRlc3QtaW1wbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Im51bWJlcmd1ZXNzIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0bmcudGVzdC5uYW1lIiB2YWx1ZT0iJHt0ZXN0bmcudGVzdC5uYW1lfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0idGVzdG5nLnRlc3RjbGllbnQiIHZhbHVlPSJOdW1iZXJHdWVzc1Rlc3RORyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgIAorCiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS0ke2RlcGxveS5wbGF0Zm9ybX0taW1wbCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIAorCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2VsZC9udW1iZXJndWVzcy9tZXRhZGF0YS9mYWNlcy1jb25maWcueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL251bWJlcmd1ZXNzL21ldGFkYXRhL2ZhY2VzLWNvbmZpZy54bWwKaW5kZXggMzI4ODJiNS4uYzA3N2UyNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL251bWJlcmd1ZXNzL21ldGFkYXRhL2ZhY2VzLWNvbmZpZy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL251bWJlcmd1ZXNzL21ldGFkYXRhL2ZhY2VzLWNvbmZpZy54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGZhY2VzLWNvbmZpZyB2ZXJzaW9uPSIyLjAiCiAgICAgICAgICAgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0gICAgICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgICAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWZhY2VzY29uZmlnXzIuMC54c2QiPgotICAgICAKKwogPC9mYWNlcy1jb25maWc+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlbGQvbnVtYmVyZ3Vlc3MvbWV0YWRhdGEvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2VsZC9udW1iZXJndWVzcy9tZXRhZGF0YS93ZWIueG1sCmluZGV4IDc0MjU3MjMuLjJjYmNkMmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2VsZC9udW1iZXJndWVzcy9tZXRhZGF0YS93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2VsZC9udW1iZXJndWVzcy9tZXRhZGF0YS93ZWIueG1sCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgotICAgCisKICAgIDxkaXNwbGF5LW5hbWU+V2ViIEJlYW5zIE51bWJlcmd1ZXNzIGV4YW1wbGU8L2Rpc3BsYXktbmFtZT4KIAogICAgPCEtLSBKU0YgLS0+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlbGQvbnVtYmVyZ3Vlc3Mvc3JjL2phdmEvbnVtYmVyZ3Vlc3MvR2FtZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL251bWJlcmd1ZXNzL3NyYy9qYXZhL251bWJlcmd1ZXNzL0dhbWUuamF2YQppbmRleCBmYzJjZmQzLi42NDc4ZmI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlbGQvbnVtYmVyZ3Vlc3Mvc3JjL2phdmEvbnVtYmVyZ3Vlc3MvR2FtZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2VsZC9udW1iZXJndWVzcy9zcmMvamF2YS9udW1iZXJndWVzcy9HYW1lLmphdmEKQEAgLTM3LDIxICszNywyMSBAQAogICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CiAKICAgIHByaXZhdGUgaW50IG51bWJlcjsKLSAgIAorCiAgICBwcml2YXRlIGludCBndWVzczsKICAgIHByaXZhdGUgaW50IHNtYWxsZXN0OwogCi0gICBASW5qZWN0IAorICAgQEluamVjdAogICAgcHJpdmF0ZSBTdGF0ZWZ1bEJlYW4gc2I7CiAKICAgIEBNYXhOdW1iZXIgQEluamVjdAogICAgcHJpdmF0ZSBpbnQgbWF4TnVtYmVyOwotICAgCisKICAgIHByaXZhdGUgaW50IGJpZ2dlc3Q7CiAgICBwcml2YXRlIGludCByZW1haW5pbmdHdWVzc2VzOwotICAgCisKICAgIEBSYW5kb20gQEluamVjdCBJbnN0YW5jZTxJbnRlZ2VyPiByYW5kb21OdW1iZXI7Ci0gICAKKwogICAgcHVibGljIEdhbWUoKQogICAgewogICAgfQpAQCAtNjAsMzIgKzYwLDMyIEBACiAgICB7CiAgICAgICByZXR1cm4gbnVtYmVyOwogICAgfQotICAgCisKICAgIHB1YmxpYyBpbnQgZ2V0R3Vlc3MoKQogICAgewogICAgICAgcmV0dXJuIGd1ZXNzOwogICAgfQotICAgCisKICAgIHB1YmxpYyB2b2lkIHNldEd1ZXNzKGludCBndWVzcykKICAgIHsKICAgICAgIHRoaXMuZ3Vlc3MgPSBndWVzczsKICAgIH0KLSAgIAorCiAgICBwdWJsaWMgaW50IGdldFNtYWxsZXN0KCkKICAgIHsKICAgICAgIHJldHVybiBzbWFsbGVzdDsKICAgIH0KLSAgIAorCiAgICBwdWJsaWMgaW50IGdldEJpZ2dlc3QoKQogICAgewogICAgICAgcmV0dXJuIGJpZ2dlc3Q7CiAgICB9Ci0gICAKKwogICAgcHVibGljIGludCBnZXRSZW1haW5pbmdHdWVzc2VzKCkKICAgIHsKICAgICAgIHJldHVybiByZW1haW5pbmdHdWVzc2VzOwogICAgfQotICAgCisKICAgIHB1YmxpYyBTdHJpbmcgY2hlY2soKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24KICAgIHsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEdhbWU6OmNoZWNrIik7CkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICAgIHJlbWFpbmluZ0d1ZXNzZXMtLTsKICAgICAgIHJldHVybiBudWxsOwogICAgfQotICAgCisKICAgIEBQb3N0Q29uc3RydWN0CiAgICBwdWJsaWMgdm9pZCByZXNldCgpCiAgICB7CkBAIC0xMTksNyArMTE5LDcgQEAKICAgICAgIHRoaXMuYmlnZ2VzdCA9IG1heE51bWJlcjsKICAgICAgIHRoaXMubnVtYmVyID0gcmFuZG9tTnVtYmVyLmdldCgpOwogICAgfQotICAgCisKICAgIHB1YmxpYyB2b2lkIHZhbGlkYXRlTnVtYmVyUmFuZ2UoRmFjZXNDb250ZXh0IGNvbnRleHQsICBVSUNvbXBvbmVudCB0b1ZhbGlkYXRlLCBPYmplY3QgdmFsdWUpCiAgICB7CiAgICAgICBpZiAocmVtYWluaW5nR3Vlc3NlcyA8PSAwKQpAQCAtMTMxLDggKzEzMSw4IEBACiAgICAgICB9CiAgICAgICBpbnQgaW5wdXQgPSAoSW50ZWdlcikgdmFsdWU7CiAKLSAgICAgIGlmIChpbnB1dCA8IHNtYWxsZXN0IHx8IGlucHV0ID4gYmlnZ2VzdCkgCi0JICAgeworICAgICAgaWYgKGlucHV0IDwgc21hbGxlc3QgfHwgaW5wdXQgPiBiaWdnZXN0KQorICAgICAgIHsKICAgICAgICAgICgoVUlJbnB1dCl0b1ZhbGlkYXRlKS5zZXRWYWxpZChmYWxzZSk7CiAKICAgICAgICAgIEZhY2VzTWVzc2FnZSBtZXNzYWdlID0gbmV3IEZhY2VzTWVzc2FnZSgiSW52YWxpZCBndWVzcyIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL251bWJlcmd1ZXNzL3NyYy9qYXZhL251bWJlcmd1ZXNzL0dlbmVyYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL251bWJlcmd1ZXNzL3NyYy9qYXZhL251bWJlcmd1ZXNzL0dlbmVyYXRvci5qYXZhCmluZGV4IGQ5ZTRmNjUuLmVmNjI5NDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2VsZC9udW1iZXJndWVzcy9zcmMvamF2YS9udW1iZXJndWVzcy9HZW5lcmF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlbGQvbnVtYmVyZ3Vlc3Mvc3JjL2phdmEvbnVtYmVyZ3Vlc3MvR2VuZXJhdG9yLmphdmEKQEAgLTIzLDI3ICsyMywyNyBAQAogaW1wb3J0IGpha2FydGEuZW50ZXJwcmlzZS5pbmplY3QuUHJvZHVjZXM7CiAKIEBBcHBsaWNhdGlvblNjb3BlZAotcHVibGljIGNsYXNzIEdlbmVyYXRvciBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSAKK3B1YmxpYyBjbGFzcyBHZW5lcmF0b3IgaW1wbGVtZW50cyBTZXJpYWxpemFibGUKIHsKLSAgIAorCiAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtNzIxMzY3MzQ2NTExODA0MTg4Mkw7CiAKICAgIHByaXZhdGUgamF2YS51dGlsLlJhbmRvbSByYW5kb20gPSBuZXcgamF2YS51dGlsLlJhbmRvbSggU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKTsKLSAgIAorCiAgICBwcml2YXRlIGludCBtYXhOdW1iZXIgPSAxMDA7Ci0gICAKKwogICAgamF2YS51dGlsLlJhbmRvbSBnZXRSYW5kb20oKQogICAgewogICAgICAgcmV0dXJuIHJhbmRvbTsKICAgIH0KLSAgIAotICAgQFByb2R1Y2VzIEBSYW5kb20gaW50IG5leHQoKSB7IAotICAgICAgcmV0dXJuIGdldFJhbmRvbSgpLm5leHRJbnQobWF4TnVtYmVyKTsgCisKKyAgIEBQcm9kdWNlcyBAUmFuZG9tIGludCBuZXh0KCkgeworICAgICAgcmV0dXJuIGdldFJhbmRvbSgpLm5leHRJbnQobWF4TnVtYmVyKTsKICAgIH0KLSAgIAorCiAgICBAUHJvZHVjZXMgQE1heE51bWJlciBpbnQgZ2V0TWF4TnVtYmVyKCkKICAgIHsKICAgICAgIHJldHVybiBtYXhOdW1iZXI7CiAgICB9CiAKLX0gCit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlbGQvbnVtYmVyZ3Vlc3Mvc3JjL2phdmEvbnVtYmVyZ3Vlc3MvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL251bWJlcmd1ZXNzL3NyYy9qYXZhL251bWJlcmd1ZXNzL1NpbmdsZXRvbkJlYW4uamF2YQppbmRleCA3NmM3YzEyLi4wM2M0ZGU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlbGQvbnVtYmVyZ3Vlc3Mvc3JjL2phdmEvbnVtYmVyZ3Vlc3MvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2VsZC9udW1iZXJndWVzcy9zcmMvamF2YS9udW1iZXJndWVzcy9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTM5LDI0ICszOSwyNCBAQAogICAgIHByaXZhdGUgU3RhdGVsZXNzTG9jYWwgc3RhdGVsZXNzTG9jYWw7CiAKICAgICBAUG9zdENvbnN0cnVjdAotCXB1YmxpYyB2b2lkIGluaXQoKSB7Ci0gICAgCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aW5pdCgpIik7Ci0gICAgCVN5c3RlbS5vdXQucHJpbnRsbigic2Vzc2lvbkN0eCA9ICIgKyBzZXNzaW9uQ3R4KTsKLSAgICAJaWYoIHNlc3Npb25DdHggPT0gbnVsbCApIHsKLSAgICAJICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkVFIGluamVjdGlvbiBlcnJvciIpOwotICAgIAl9CisgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjppbml0KCkiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzZXNzaW9uQ3R4ID0gIiArIHNlc3Npb25DdHgpOworICAgICAgICBpZiggc2Vzc2lvbkN0eCA9PSBudWxsICkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRUUgaW5qZWN0aW9uIGVycm9yIik7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpIHsKLSAgICAJU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpoZWxsbygpIik7Ci0gICAgCXN0YXRlbGVzc0xvY2FsLmhlbGxvKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aGVsbG8oKSIpOworICAgICAgICBzdGF0ZWxlc3NMb2NhbC5oZWxsbygpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95Ci0JcHVibGljIHZvaWQgZGVzdHJveSgpIHsKLSAgICAJU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpkZXN0cm95KCkiKTsKKyAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmRlc3Ryb3koKSIpOwogICAgIH0KIAotICAgIAorCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2VsZC9udW1iZXJndWVzcy9zcmMvamF2YS9udW1iZXJndWVzcy9TdGF0ZWZ1bEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2VsZC9udW1iZXJndWVzcy9zcmMvamF2YS9udW1iZXJndWVzcy9TdGF0ZWZ1bEJlYW4uamF2YQppbmRleCAyZjQ0NzUwLi44YzhmNmQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlbGQvbnVtYmVyZ3Vlc3Mvc3JjL2phdmEvbnVtYmVyZ3Vlc3MvU3RhdGVmdWxCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL251bWJlcmd1ZXNzL3NyYy9qYXZhL251bWJlcmd1ZXNzL1N0YXRlZnVsQmVhbi5qYXZhCkBAIC0zNCwyNyArMzQsMjcgQEAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNlc3Npb25DdHg7CiAKICAgICBARUpCCi0JcHJpdmF0ZSBTaW5nbGV0b25CZWFuIHNpbmdsZXRvbjsKKyAgICBwcml2YXRlIFNpbmdsZXRvbkJlYW4gc2luZ2xldG9uOwogCiAgICAgQFBvc3RDb25zdHJ1Y3QKLQlwdWJsaWMgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuOjppbml0KCkiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oInNlc3Npb25DdHggPSAiICsgc2Vzc2lvbkN0eCk7Ci0JaWYoIHNlc3Npb25DdHggPT0gbnVsbCApIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRUUgaW5qZWN0aW9uIGVycm9yIik7Ci0JfQotCXNpbmdsZXRvbi5oZWxsbygpOworICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW46OmluaXQoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigic2Vzc2lvbkN0eCA9ICIgKyBzZXNzaW9uQ3R4KTsKKyAgICBpZiggc2Vzc2lvbkN0eCA9PSBudWxsICkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJFRSBpbmplY3Rpb24gZXJyb3IiKTsKKyAgICB9CisgICAgc2luZ2xldG9uLmhlbGxvKCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW46OmhlbGxvKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjo6aGVsbG8oKSIpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95Ci0JcHVibGljIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjo6ZGVzdHJveSgpIik7CisgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjo6ZGVzdHJveSgpIik7CiAgICAgfQogCi0gICAgCisKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL251bWJlcmd1ZXNzL3NyYy9qYXZhL251bWJlcmd1ZXNzL1N0YXRlbGVzc0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2VsZC9udW1iZXJndWVzcy9zcmMvamF2YS9udW1iZXJndWVzcy9TdGF0ZWxlc3NCZWFuLmphdmEKaW5kZXggZjI1MWI1Mi4uNDE4NmY0YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL251bWJlcmd1ZXNzL3NyYy9qYXZhL251bWJlcmd1ZXNzL1N0YXRlbGVzc0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlbGQvbnVtYmVyZ3Vlc3Mvc3JjL2phdmEvbnVtYmVyZ3Vlc3MvU3RhdGVsZXNzQmVhbi5qYXZhCkBAIC0yNCwyNSArMjQsMjUgQEAKIEBTdGF0ZWxlc3MKIHB1YmxpYyBjbGFzcyBTdGF0ZWxlc3NCZWFuIGltcGxlbWVudHMgU3RhdGVsZXNzTG9jYWwgewogCi0gICAgQEVKQiAKLQlwcml2YXRlIFNpbmdsZXRvbkJlYW4gc2luZ2xldG9uOwotICAgIAorICAgIEBFSkIKKyAgICBwcml2YXRlIFNpbmdsZXRvbkJlYW4gc2luZ2xldG9uOworCiAKICAgICBAUG9zdENvbnN0cnVjdAotCXB1YmxpYyB2b2lkIGluaXQoKSB7Ci0gICAgCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjo6aW5pdCgpIik7Ci0gICAgCVN5c3RlbS5vdXQucHJpbnRsbigic2luZ2xldG9uID0gIiArIHNpbmdsZXRvbik7CisgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuOjppbml0KCkiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzaW5nbGV0b24gPSAiICsgc2luZ2xldG9uKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpIHsKLSAgICAJU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuOjpoZWxsbygpIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjo6aGVsbG8oKSIpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95Ci0JcHVibGljIHZvaWQgZGVzdHJveSgpIHsKLSAgICAJU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuOjpkZXN0cm95KCkiKTsKKyAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW46OmRlc3Ryb3koKSIpOwogICAgIH0KIAotICAgIAorCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2VsZC9udW1iZXJndWVzcy9zcmMvdGVzdC9OdW1iZXJHdWVzc1Rlc3RORy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL251bWJlcmd1ZXNzL3NyYy90ZXN0L051bWJlckd1ZXNzVGVzdE5HLmphdmEKaW5kZXggYmM2YzU4Yy4uNjNlM2UxNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL251bWJlcmd1ZXNzL3NyYy90ZXN0L051bWJlckd1ZXNzVGVzdE5HLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL251bWJlcmd1ZXNzL3NyYy90ZXN0L051bWJlckd1ZXNzVGVzdE5HLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuKjsKIAogLyoqCi0gKiBTaW1wbGUgVGVzdE5HIGNsaWVudCBmb3IgYmFzaWMgV0FSIAorICogU2ltcGxlIFRlc3RORyBjbGllbnQgZm9yIGJhc2ljIFdBUgogICoKICAqLwogcHVibGljIGNsYXNzIE51bWJlckd1ZXNzVGVzdE5HIHsKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgdHJ5ewogICAgICAgICAgICAgU3RyaW5nIHRlc3R1cmwgPSAiaHR0cDovLyIgKyBtX2hvc3QgICsgIjoiICsgbV9wb3J0ICsKICAgICAgICAgICAgICAgICAgICAgIi8iKyBzdHJDb250ZXh0Um9vdCsiL2hvbWUuanNmIjsKLSAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKHRlc3R1cmwpOyAKKyAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKHRlc3R1cmwpOwogICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwpAQCAtNjEsMTMgKzYxLDEzIEBACiAKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKICAgICAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgICBTdHJpbmcgdGVzdExpbmUgPSBudWxsOyAKKyAgICAgICAgICAgIFN0cmluZyB0ZXN0TGluZSA9IG51bGw7CiAgICAgICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJ0aGlua2luZyBvZiBhIG51bWJlciBiZXR3ZWVuIikhPS0xKXsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgdGVzdExpbmUgPSBsaW5lOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gICAgIAorICAgICAgICAgICAgfQogICAgICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhyZXN1bHQsIHRydWUsIlVuZXhwZWN0ZWQgSFRNTCIpOwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2VsZC9vc2dpd2VsZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlbGQvb3NnaXdlbGQvYnVpbGQueG1sCmluZGV4IDQ0NzlkN2EuLmI2YTRiMzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2VsZC9vc2dpd2VsZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL29zZ2l3ZWxkL2J1aWxkLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHByb2plY3QgbmFtZT0iZXh0ZW5zaW9ucyIgZGVmYXVsdD0iZGVmYXVsdCIgYmFzZWRpcj0iLiI+CiAgICAgPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiLz4KICAgICA8cHJvcGVydHkgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvJHtkZXBsb3kucGxhdGZvcm19LWNvbmZpZy5wcm9wZXJ0aWVzIi8+Ci0gICAKKwogICAgIDxkZXNjcmlwdGlvbj5CdWlsZHMsIHRlc3RzLCBhbmQgcnVucyB0aGUgV2VsZCBNb2R1bGU8L2Rlc2NyaXB0aW9uPgogCiAgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgpAQCAtMjgsNyArMjgsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW50ZXN0LHVuZGVwbG95IiAvPgogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtZGVwbG95IiBkZXBlbmRzPSJidWlsZCxkZXBsb3kiIC8+Ci0gICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUtdGVzdHMiPgogICAgICAgICA8Y29weSB0b2Rpcj0iJHt0ZXN0LmNsYXNzLm91dHB1dH0vdGVzdC93ZWxkL29zZ2kiPgogICAgICAgICAgIDxmaWxlc2V0IGRpcj0ibWV0YWRhdGEiPgpAQCAtMzcsMTEgKzM3LDExIEBACiAgICAgICAgIDwvY29weT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1pbXBsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LSR7ZGVwbG95LnBsYXRmb3JtfS1pbXBsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0ICBuYW1lPSJydW50ZXN0Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW50ZXN0LWltcGwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iZXh0ZW5zaW9ucyIvPgpAQCAtNDksOSArNDksOSBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3RuZy50ZXN0Y2xpZW50IiB2YWx1ZT0iT3NnaVdlbGRUZXN0TkciLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktJHtkZXBsb3kucGxhdGZvcm19LWltcGwiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL29zZ2l3ZWxkL3NyYy9qYXZhL29zZ2l3ZWxkL09zZ2lXZWxkU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93ZWxkL29zZ2l3ZWxkL3NyYy9qYXZhL29zZ2l3ZWxkL09zZ2lXZWxkU2VydmxldC5qYXZhCmluZGV4IDM1YWFiMzcuLjYyY2M3MWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2VsZC9vc2dpd2VsZC9zcmMvamF2YS9vc2dpd2VsZC9Pc2dpV2VsZFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlbGQvb3NnaXdlbGQvc3JjL2phdmEvb3NnaXdlbGQvT3NnaVdlbGRTZXJ2bGV0LmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKIAogLyoqCiAgKiBUZXN0IGludGVncml0eSBvZiBPU0dpIFdlbGQgTW9kdWxlLgotICogCisgKgogICogQGF1dGhvciBTYW50aWFnby5QZXJpY2FzR2VlcnRzZW5Ac3VuLmNvbQogICovCiBwdWJsaWMgY2xhc3MgT3NnaVdlbGRTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewpAQCAtNDAsNyArNDAsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIExpc3Q8QXR0cmlidXRlcy5OYW1lPiBBVFRSUyA9CiAgICAgICAgICAgICBBcnJheXMuYXNMaXN0KG5ldyBBdHRyaWJ1dGVzLk5hbWUoIkV4cG9ydC1QYWNrYWdlIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBdHRyaWJ1dGVzLk5hbWUoIkltcG9ydC1QYWNrYWdlIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAvL25ldyBBdHRyaWJ1dGVzLk5hbWUoIlByaXZhdGUtUGFja2FnZSIpKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbmV3IEF0dHJpYnV0ZXMuTmFtZSgiUHJpdmF0ZS1QYWNrYWdlIikpOwogICAgICAgICAgICAgLy9Gcm9tIFdlbGQgMS4xLCBQcml2YXRlLVBhY2thZ2UgaXMgbm90IHBhcnQgb2YgdGhlIE9TR2kgaGVhZGVycwogCiAgICAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1JlcXVlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsCkBAIC0xMDcsNyArMTA3LDcgQEAKICAgICAgICAgcmV0dXJuIG5hbWUuZXF1YWxzKCJvcmcuamJvc3Mud2VsZC5vc2dpLWJ1bmRsZSIpOwogICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPkdFVDwvY29kZT4gbWV0aG9kLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC0xMjAsNyArMTIwLDcgQEAKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtMTMzLDcgKzEzMyw3IEBACiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogUmV0dXJucyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2bGV0LgogICAgICAqIEByZXR1cm4gYSBTdHJpbmcgY29udGFpbmluZyBzZXJ2bGV0IGRlc2NyaXB0aW9uCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dlbGQvb3NnaXdlbGQvc3JjL3Rlc3QvT3NnaVdlbGRUZXN0TkcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2VsZC9vc2dpd2VsZC9zcmMvdGVzdC9Pc2dpV2VsZFRlc3RORy5qYXZhCmluZGV4IDhlODk1ODQuLmUxMzYyMDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2VsZC9vc2dpd2VsZC9zcmMvdGVzdC9Pc2dpV2VsZFRlc3RORy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd2VsZC9vc2dpd2VsZC9zcmMvdGVzdC9Pc2dpV2VsZFRlc3RORy5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiBpbXBvcnQgamF2YS51dGlsLio7CiAKIC8qKgotICogVGVzdCBXZWxkIE9zZ2kgQnVuZGxlIEludGVncml0eSAKKyAqIFRlc3QgV2VsZCBPc2dpIEJ1bmRsZSBJbnRlZ3JpdHkKICAqCiAgKiBAYXV0aG9yIFNhbnRpYWdvLlBlcmljYXNHZWVydHNlbkBvcmFjbGUuY29tCiAgKiBAYXV0aG9yIFJvZ2VyLktpdGFpbkBvcmFjbGUuY29tCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dzaXQvSmF4d3NGcm9tV3NkbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dzaXQvSmF4d3NGcm9tV3NkbC9idWlsZC54bWwKaW5kZXggNjJkMWVhMC4uZDQ2ZjkwMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93c2l0L0pheHdzRnJvbVdzZGwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd3NpdC9KYXh3c0Zyb21Xc2RsL2J1aWxkLnhtbApAQCAtMjEsOSArMjEsOSBAQAogCiAgICAgPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiIC8+CiAgICAgPHByb3BlcnR5IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0LyR7ZGVwbG95LnBsYXRmb3JtfS1jb25maWcucHJvcGVydGllcyIvPgotICAgIAorCiAgICAgPGRlc2NyaXB0aW9uPndzaXQgdGVzdHM8L2Rlc2NyaXB0aW9uPgotICAgIDxpbXBvcnQgZmlsZT0iJHt3cy5yb290fS9nZnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4gICAKKyAgICA8aW1wb3J0IGZpbGU9IiR7d3Mucm9vdH0vZ2Zwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPGltcG9ydCBmaWxlPSIke3dzLnJvb3R9L2dmcHJvamVjdC8ke2RlcGxveS5wbGF0Zm9ybX0tdGFyZ2V0cy54bWwiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtZGVwbG95IiBkZXBlbmRzPSJzZXJ2ZXIsY2xpZW50LCBydW50ZXN0LCB1bmRlcGxveSIgLz4KQEAgLTYzLDEzICs2MywxMyBAQAogICAgICAgICAgICAgICAgIGRpcj0iJHtiYXNlZGlyfS9ldGMiCiAgICAgICAgICAgICAgICAgaW5jbHVkZXM9Iioud3NkbCwgKi54c2QiCiAgICAgICAgICAgICAgICAgcHJlZml4PSJXRUItSU5GL3dzZGwiLz4KLSAgICAgICAgICAgPGNsYXNzZXMgZGlyPSIke2J1aWxkLmNsYXNzZXMuaG9tZX0iPiAgICAgICAgCisgICAgICAgICAgIDxjbGFzc2VzIGRpcj0iJHtidWlsZC5jbGFzc2VzLmhvbWV9Ij4KICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovamF4d3Nmcm9td3NkbC9zZXJ2ZXIvKiovKi5jbGFzcyIvPgogICAgICAgICAgICA8L2NsYXNzZXM+CiAgICAgICAgIDwvd2FyPgogICAgICAgICA8Y29weSBmaWxlPSIke2FwcC5maWxlLmV4dH0iIHRvZmlsZT0iJHtkaXN0LmRpcn0vJHthcHAuZmlsZS5leHR9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJnZW5lcmF0ZS1jbGllbnQiIGRlcGVuZHM9ImRlY2xhcmUtd3NpbXBvcnQsYnVpbGQtc2V0dXAiIGlmPSJ3c2phci5hdmFpbGFibGUiPgogICAgICAgICA8d3NpbXBvcnQKICAgICAgICAgICAgIGRlYnVnPSIke2RlYnVnfSIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd3NpdC9KYXh3c0Zyb21Xc2RsL3NyYy9qYXh3c2Zyb213c2RsL2NsaWVudC9BZGROdW1iZXJzQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dzaXQvSmF4d3NGcm9tV3NkbC9zcmMvamF4d3Nmcm9td3NkbC9jbGllbnQvQWRkTnVtYmVyc0NsaWVudC5qYXZhCmluZGV4IDVkYzZjYzEuLjM1MjIxODQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd3NpdC9KYXh3c0Zyb21Xc2RsL3NyYy9qYXh3c2Zyb213c2RsL2NsaWVudC9BZGROdW1iZXJzQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93c2l0L0pheHdzRnJvbVdzZGwvc3JjL2pheHdzZnJvbXdzZGwvY2xpZW50L0FkZE51bWJlcnNDbGllbnQuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3RBZGROdW1iZXJzKCkgewotICAgICAgICAKKwogICAgICAgICBib29sZWFuIHN0YXR1cz1mYWxzZTsKICAgICAgICAgQWRkTnVtYmVyc1BvcnRUeXBlIHBvcnQgPSBudWxsOwogCkBAIC0zMSwyMiArMzEsMjIgQEAKICAgICAgICAgICAgIGludCBudW1iZXIxID0gMTA7CiAgICAgICAgICAgICBpbnQgbnVtYmVyMiA9IDIwOwogICAgICAgICAgICAgaW50IG51bWJlcjMgPSAzMDsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50ZiAoIkludm9raW5nIGFkZE51bWJlcnMoJWQsICVkKVxuIiwgbnVtYmVyMSwgbnVtYmVyMik7CiAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gcG9ydC5hZGROdW1iZXJzIChudW1iZXIxLCBudW1iZXIyKTsKICAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRmICgiVGhlIHJlc3VsdCBvZiBhZGRpbmcgJWQgYW5kICVkIGlzICVkLlxuXG4iLCBudW1iZXIxLCBudW1iZXIyLCByZXN1bHQpOwogICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBudW1iZXIzKQotCSAgICAgIHN0YXR1cyA9IHRydWU7CisgICAgICAgICAgc3RhdHVzID0gdHJ1ZTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiR290IHVuZXhwZWN0ZWQgZXhjZXB0aW9uIik7CiAgICAgICAgICAgICAvLyBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9IAorICAgIH0KICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0QWRkTnVtYmVyc0V4Y2VwdGlvbigpIHsKLSAgICAgICAgCisKICAgICAgICAgYm9vbGVhbiBzdGF0dXM9ZmFsc2U7CiAgICAgICAgIEFkZE51bWJlcnNQb3J0VHlwZSBwb3J0ID0gbnVsbDsKIApAQCAtNTQsMjMgKzU0LDIzIEBACiAgICAgICAgICAgICBwb3J0ID0gbmV3IEFkZE51bWJlcnNTZXJ2aWNlKCkuZ2V0QWRkTnVtYmVyc1BvcnQgKCk7CiAgICAgICAgICAgICBpbnQgbnVtYmVyMSA9IC0xMDsKICAgICAgICAgICAgIGludCBudW1iZXIyID0gMjA7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGYgKCJJbnZva2luZyBhZGROdW1iZXJzKCVkLCAlZClcbiIsIG51bWJlcjEsIG51bWJlcjIpOwogICAgICAgICAgICAgaW50IHJlc3VsdCA9IHBvcnQuYWRkTnVtYmVycyAobnVtYmVyMSwgbnVtYmVyMik7CiAgICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50ZiAoIlRoZSByZXN1bHQgb2YgYWRkaW5nICVkIGFuZCAlZCBpcyAlZC5cblxuIiwgbnVtYmVyMSwgbnVtYmVyMiwgcmVzdWx0KTsKICAgICAgICAgfSBjYXRjaCAoQWRkTnVtYmVyc0ZhdWx0X0V4Y2VwdGlvbiBleCkgewotCSAgICAvLyBTeXN0ZW0ub3V0LnByaW50KCJHb3QgZXhwZWN0ZWQgZXhjZXB0aW9uIik7Ci0gIAkgICAgLy8gU3lzdGVtLm91dC5wcmludGYgKCJDYXVnaHQgQWRkTnVtYmVyc0ZhdWx0X0V4Y2VwdGlvbjogJXNcbiIsIGV4LmdldEZhdWx0SW5mbygpLmdldEZhdWx0SW5mbyAoKSk7CisgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnQoIkdvdCBleHBlY3RlZCBleGNlcHRpb24iKTsKKyAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50ZiAoIkNhdWdodCBBZGROdW1iZXJzRmF1bHRfRXhjZXB0aW9uOiAlc1xuIiwgZXguZ2V0RmF1bHRJbmZvKCkuZ2V0RmF1bHRJbmZvICgpKTsKICAgICAgICAgICAgIFN0cmluZyBpbmZvMSA9IGV4LmdldEZhdWx0SW5mbygpLmdldEZhdWx0SW5mbygpOwotCSAgICAvLyBTeXN0ZW0ub3V0LnByaW50KCJpbmZvMT0iK2luZm8xKyItLS0iKTsgICAgIAorICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50KCJpbmZvMT0iK2luZm8xKyItLS0iKTsKICAgICAgICAgICAgIFN0cmluZyBpbmZvMiA9IGV4LmdldEZhdWx0SW5mbygpLmdldE1lc3NhZ2UoKTsKLQkgICAgLy8gU3lzdGVtLm91dC5wcmludCgiaW5mbzI9IitpbmZvMisiLS0tIik7ICAgICAKLSAgICAgICAgICAgIGlmIChpbmZvMi5jb250YWlucygiTmVnYXRpdmUgbnVtYmVyIGNhbnQgYmUgYWRkZWQhIikpIAotCQlzdGF0dXMgPSB0cnVlOwotCX0gCisgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnQoImluZm8yPSIraW5mbzIrIi0tLSIpOworICAgICAgICAgICAgaWYgKGluZm8yLmNvbnRhaW5zKCJOZWdhdGl2ZSBudW1iZXIgY2FudCBiZSBhZGRlZCEiKSkKKyAgICAgICAgc3RhdHVzID0gdHJ1ZTsKKyAgICB9CiAKICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtODAsNyArODAsNyBAQAogICAgICAgICByZXN1bHQgPSBjbGllbnQudGVzdEFkZE51bWJlcnMoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZXN1bHQxPSIrcmVzdWx0KTsKICAgICAgICAgcmVzdWx0ID0gY2xpZW50LnRlc3RBZGROdW1iZXJzRXhjZXB0aW9uKCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmVzdWx0Mj0iK3Jlc3VsdCk7IAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlc3VsdDI9IityZXN1bHQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93c2l0L0pheHdzRnJvbVdzZGwvc3JjL2pheHdzZnJvbXdzZGwvc2VydmVyL0FkZE51bWJlcnNJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dzaXQvSmF4d3NGcm9tV3NkbC9zcmMvamF4d3Nmcm9td3NkbC9zZXJ2ZXIvQWRkTnVtYmVyc0ltcGwuamF2YQppbmRleCAzZGVkMGQ2Li5kZDNmZjUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dzaXQvSmF4d3NGcm9tV3NkbC9zcmMvamF4d3Nmcm9td3NkbC9zZXJ2ZXIvQWRkTnVtYmVyc0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dzaXQvSmF4d3NGcm9tV3NkbC9zcmMvamF4d3Nmcm9td3NkbC9zZXJ2ZXIvQWRkTnVtYmVyc0ltcGwuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBAamFrYXJ0YS5qd3MuV2ViU2VydmljZSAoZW5kcG9pbnRJbnRlcmZhY2U9ImpheHdzZnJvbXdzZGwuc2VydmVyLkFkZE51bWJlcnNQb3J0VHlwZSIpCiBwdWJsaWMgY2xhc3MgQWRkTnVtYmVyc0ltcGx7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAcGFyYW0gbnVtYmVyMQogICAgICAqIEBwYXJhbSBudW1iZXIyCkBAIC0zOCwxMiArMzgsMTIgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVtYmVyMSArIG51bWJlcjI7CiAgICAgfQotICAgIAorCiAgICAgLyoKICAgICAgKiBTaW1wbGUgb25lLXdheSBtZXRob2QgdGhhdCB0YWtlcyBhbiBpbnRlZ2VyLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIG9uZVdheUludChpbnQgbnVtYmVyKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VydmljZSByZWNlaXZlZDogIiArIG51bWJlcik7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dzaXQvSmF4d3NGcm9tV3NkbC9zcmMvdGVzdC9qYXh3c2Zyb213c2RsL2NsaWVudC9KYXh3c0Zyb21Xc2RsVGVzdE5HLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dzaXQvSmF4d3NGcm9tV3NkbC9zcmMvdGVzdC9qYXh3c2Zyb213c2RsL2NsaWVudC9KYXh3c0Zyb21Xc2RsVGVzdE5HLmphdmEKaW5kZXggODQ1ZDhkMy4uNzM1NzIwYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93c2l0L0pheHdzRnJvbVdzZGwvc3JjL3Rlc3QvamF4d3Nmcm9td3NkbC9jbGllbnQvSmF4d3NGcm9tV3NkbFRlc3RORy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd3NpdC9KYXh3c0Zyb21Xc2RsL3NyYy90ZXN0L2pheHdzZnJvbXdzZGwvY2xpZW50L0pheHdzRnJvbVdzZGxUZXN0TkcuamF2YQpAQCAtMzEsMTIgKzMxLDEyIEBACiAgICAgQEJlZm9yZVRlc3QKICAgICBwdWJsaWMgdm9pZCBsb2FkQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgIHRyeSB7Ci0JY2xzID0gQ2xhc3MuZm9yTmFtZSAoImpheHdzZnJvbXdzZGwuY2xpZW50LkFkZE51bWJlcnNDbGllbnQiKTsKKyAgICBjbHMgPSBDbGFzcy5mb3JOYW1lICgiamF4d3Nmcm9td3NkbC5jbGllbnQuQWRkTnVtYmVyc0NsaWVudCIpOwogICAgICAgICBjdCA9IGNscy5nZXRDb25zdHJ1Y3RvcigpOwogICAgICAgICBvYmogPSBjdC5uZXdJbnN0YW5jZSgpOwotCS8vIFN5c3RlbS5vdXQucHJpbnRsbiAoImNsYXNzIGlzIGxvYWRlZCIpOworICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbiAoImNsYXNzIGlzIGxvYWRlZCIpOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JU3lzdGVtLm91dC5wcmludGxuICgiR290IGV4LCBjbGFzcyBpcyBub3QgbG9hZGVkLiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkdvdCBleCwgY2xhc3MgaXMgbm90IGxvYWRlZC4iKTsKICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihleCk7CiAgICAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZG9uZSBmb3IgaW5pdCIpOwpAQCAtNDQsMTYgKzQ0LDE2IEBACiAKICAgICBAVGVzdChncm91cHMgPXsiZnVuY3Rpb25hbCJ9KQogICAgIHB1YmxpYyB2b2lkIHRlc3RBZGROdW1iZXJzX0pheHdzRnJvbVdzZGwoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsgCisgICAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwogICAgICAgdHJ5IHsKICAgICAgICAgbWV0aCA9IGNscy5nZXRNZXRob2QoInRlc3RBZGROdW1iZXJzIik7CiAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigibWV0aD0iKyBtZXRoLnRvU3RyaW5nKCkpOwogICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oImNscz0iKyBjbHMpOwogICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oImN0PSIrIGN0KTsKICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCJvYmo9Iisgb2JqKTsKLQlyZXN1bHQgPSAoQm9vbGVhbikgbWV0aC5pbnZva2Uob2JqLCAoT2JqZWN0W10pbnVsbCk7ICAgICAKKyAgICByZXN1bHQgPSAoQm9vbGVhbikgbWV0aC5pbnZva2Uob2JqLCAoT2JqZWN0W10pbnVsbCk7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4gKCJnb3QgdW5leHBlY3RlZCBleGNlcHRpb24uIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuICgiZ290IHVuZXhwZWN0ZWQgZXhjZXB0aW9uLiIpOwogICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGV4KTsKICAgICAgIH0KICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKHJlc3VsdCk7CkBAIC02MiwxMiArNjIsMTIgQEAKIAogICAgIEBUZXN0KGRlcGVuZHNPbk1ldGhvZHMgPSB7ICJ0ZXN0QWRkTnVtYmVyc19KYXh3c0Zyb21Xc2RsIiB9KQogICAgIHB1YmxpYyB2b2lkIHRlc3RBZGROdW1iZXJzRXhjZXB0aW9uX0pheHdzRnJvbVdzZGwoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsgCisgICAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwogICAgICAgdHJ5IHsKICAgICAgICAgbWV0aCA9IGNscy5nZXRNZXRob2QoInRlc3RBZGROdW1iZXJzRXhjZXB0aW9uIik7Ci0JcmVzdWx0ID0gKEJvb2xlYW4pIG1ldGguaW52b2tlKG9iaiwgKE9iamVjdFtdKW51bGwpOyAgICAgCisgICAgcmVzdWx0ID0gKEJvb2xlYW4pIG1ldGguaW52b2tlKG9iaiwgKE9iamVjdFtdKW51bGwpOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JU3lzdGVtLm91dC5wcmludGxuICgiZ290IHVuZXhwZWN0ZWQgZXhjZXB0aW9uIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuICgiZ290IHVuZXhwZWN0ZWQgZXhjZXB0aW9uIik7CiAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oZXgpOwogICAgICAgfQogICAgICAgQXNzZXJ0LmFzc2VydFRydWUocmVzdWx0KTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd3NpdC9KYXh3c0Zyb21Xc2RsL3Rlc3RuZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dzaXQvSmF4d3NGcm9tV3NkbC90ZXN0bmcueG1sCmluZGV4IGViMDRjOGEuLmEwMTdlM2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd3NpdC9KYXh3c0Zyb21Xc2RsL3Rlc3RuZy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93c2l0L0pheHdzRnJvbVdzZGwvdGVzdG5nLnhtbApAQCAtMTcsNyArMTcsNyBAQAogLS0+CiAKIDwhRE9DVFlQRSBzdWl0ZSBTWVNURU0gImh0dHA6Ly90ZXN0bmcub3JnL3Rlc3RuZy0xLjAuZHRkIiA+Ci0gCisKIDxzdWl0ZSBuYW1lPSJRdWlja0xvb2tUZXN0cyIgdmVyYm9zZT0iMiIgPgogICA8dGVzdCBuYW1lPSJ3c2l0X2pheHdzX3dzZGxfdGVzdHMiPgogICAgIDxjbGFzc2VzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93c2l0L2pzcjEwOXRlc3Rlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dzaXQvanNyMTA5dGVzdGVyL2J1aWxkLnhtbAppbmRleCA1MmEyMjEzLi44Y2UwMzczIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dzaXQvanNyMTA5dGVzdGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dzaXQvanNyMTA5dGVzdGVyL2J1aWxkLnhtbApAQCAtMTAyLDEyICsxMDIsMTIgQEAKIAogCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0Ij4KLQk8cmVjb3JkIG5hbWU9IiR7YmFzZWRpcn0vd3NpdDJydW4ub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+CisgICAgPHJlY29yZCBuYW1lPSIke2Jhc2VkaXJ9L3dzaXQycnVuLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bnRlc3QtaW1wbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdG5nLnRlc3QubmFtZSIgdmFsdWU9IiR7dGVzdG5nLnRlc3QubmFtZX0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0bmcudGVzdGNsaWVudCIgdmFsdWU9ImpzcjEwOXRlc3RlciIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPHJlY29yZCBuYW1lPSIke2Jhc2VkaXJ9L3dzaXQycnVuLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CisgICAgPHJlY29yZCBuYW1lPSIke2Jhc2VkaXJ9L3dzaXQycnVuLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dzaXQvanNyMTA5dGVzdGVyL3NyYy9mcm9tamF2YS9zZXJ2ZXIvQWRkTnVtYmVycy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3F1aWNrbG9vay93c2l0L2pzcjEwOXRlc3Rlci9zcmMvZnJvbWphdmEvc2VydmVyL0FkZE51bWJlcnMuamF2YQppbmRleCBmYmY1ODc5Li5jZTJjYWVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvcXVpY2tsb29rL3dzaXQvanNyMTA5dGVzdGVyL3NyYy9mcm9tamF2YS9zZXJ2ZXIvQWRkTnVtYmVycy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9xdWlja2xvb2svd3NpdC9qc3IxMDl0ZXN0ZXIvc3JjL2Zyb21qYXZhL3NlcnZlci9BZGROdW1iZXJzLmphdmEKQEAgLTIzLDE1ICsyMywxNSBAQAogICovCiBAamFrYXJ0YS5qd3MuV2ViU2VydmljZQogcHVibGljIGNsYXNzIEFkZE51bWJlcnMgewotICAgIAorCiAgICAgcHVibGljIGludCBhZGROdW1iZXJzIChpbnQgbnVtYmVyMSwgaW50IG51bWJlcjIpIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gdmVyaWZ5IHRoZSBzdGF4IHRjayBwcm9wZXJ0eSBpcyBzZXQgb24gd29vZHN0b3ggYnkgZGVmYXVsdAogICAgICAgICBpZiAoIShCb29sZWFuKVhNTElucHV0RmFjdG9yeS5uZXdGYWN0b3J5KCkuZ2V0UHJvcGVydHkoImNvbS5jdGMud3N0eC5yZXR1cm5OdWxsRm9yRGVmYXVsdE5hbWVzcGFjZSIpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJXb29kc3RveCBkb2VzIG5vdCBoYXZlIHJlcXVpcmVkIHN0YXggdGNrIGNvbS5jdGMud3N0eC5yZXR1cm5OdWxsRm9yRGVmYXVsdE5hbWVzcGFjZSBwcm9wZXJ0eSBzZXQuIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG51bWJlcjEgKyBudW1iZXIyOwotICAgIH0gICAgCisgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvc3FlX3Ntb2tlL3J1bl90ZXN0LnNoIGIvYXBwc2VydmVyL3Rlc3RzL3NxZV9zbW9rZS9ydW5fdGVzdC5zaAppbmRleCA3MDNhZjZkLi4xNDM3MzI4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvc3FlX3Ntb2tlL3J1bl90ZXN0LnNoCisrKyBiL2FwcHNlcnZlci90ZXN0cy9zcWVfc21va2UvcnVuX3Rlc3Quc2gKQEAgLTE1Miw3ICsxNTIsNyBAQAogfQogCiBraWxsX2NsZWFuKCl7Ci0gIGlmIFsgJHsjMX0gLW5lIDAgXSA7IHRoZW4ga2lsbCAtOSAkMSA7IGZpIAorICBpZiBbICR7IzF9IC1uZSAwIF0gOyB0aGVuIGtpbGwgLTkgJDEgOyBmaQogfQogCiBwb3N0X3Rlc3RfcnVuKCl7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9idWlsZC54bWwKaW5kZXggMjM3OGRkYy4uYzExNjcxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgICZydW47CiAgICAgJm1haWw7CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImFsbCI+IAorICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzcWV0ZXN0cyIvPgogICAgIDwvdGFyZ2V0PgogCkBAIC02OCw4ICs2OCw4IEBACiAgICAgICAgICAgICA8YW50IGRpcj0ic3FldGVzdHMiIHRhcmdldD0icnVuLWVlc3FlLXRhcmdldCIvPgogICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wZWUiLz4KICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RvcERlcmJ5Ii8+Ci0JICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXJlcG9ydCIvPgotCSAgICA8YW50Y2FsbCB0YXJnZXQ9Im1haWwiLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtcmVwb3J0Ii8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibWFpbCIvPgogICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXBvcnQtamF2YSIvPgogICAgICAgICA8cmVjb3JkIG5hbWU9InJ1bnRlc3Qub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KICAgICA8cmVjb3JkIG5hbWU9ImFwcHNlcnYtdGVzdHMubG9nIiBhY3Rpb249InN0b3AiLz4KQEAgLTExOCw3ICsxMTgsNyBAQAogICAgICAgICAgRXhlY3V0aW5nIHdlYi9zdWJjbGFzc2luZyBbVG90YWwgOjNdCiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgIDwvZWNobz4KLSAgICAgICAgCisKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic3FldGVzdHMiPgpAQCAtMTMwLDExICsxMzAsMTEgQEAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwTVEiIGRlcGVuZHM9InNldHVwLW1xLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBzcWV0ZXN0cyAoRXhlY3V0ZXMgYWxsIHNxZXRlc3RzIHRlc3RzKQotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHNxZXRlc3RzKQorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBzcWV0ZXN0cyAoRXhlY3V0ZXMgYWxsIHNxZXRlc3RzIHRlc3RzKQorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHNxZXRlc3RzKQogICAgICAgICAgICAgYW50IHNob3ctbGlzdCAoTGlzdHMgYWxsIHRlc3Qgc3VpdGVzKQotCTwvZWNobz4KKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb21tdW5pdHkvYWRtaW53ZWIvYmFzaWMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbW11bml0eS9hZG1pbndlYi9iYXNpYy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDdhMjk2OWUuLjU4MDJlNGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbW11bml0eS9hZG1pbndlYi9iYXNpYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbW11bml0eS9hZG1pbndlYi9iYXNpYy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNCw3ICsxNCw3IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogIwogCi0gCisKIAogYWRtaW4uZG9tYWluPWRvbWFpbjEKIGluc3RhbGwuZGlyPWM6L3N1bi9nbGFzc2Zpc2gKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbW11bml0eS9hZG1pbndlYi9iYXNpYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb21tdW5pdHkvYWRtaW53ZWIvYmFzaWMvYnVpbGQueG1sCmluZGV4IGRhMGQzYTEuLmM5NGQwNzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbW11bml0eS9hZG1pbndlYi9iYXNpYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29tbXVuaXR5L2FkbWlud2ViL2Jhc2ljL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJhZG1pbndlYiIgZGVmYXVsdD0iZGVmYXVsdCIgYmFzZWRpcj0iLiI+CiAgICAgPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiLz4KLSAgICAKKwogIDxkZXNjcmlwdGlvbj5CdWlsZHMsIHRlc3RzLCBhbmQgcnVucyB0aGUgR2xhc3NGaXNoIEFkbWluIEdVSTwvZGVzY3JpcHRpb24+CiA8IS0tIDxpbXBvcnQgZmlsZT0ibmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+LS0+CiAKQEAgLTQ0LDEzICs0NCwxMyBAQAogPHBhdGggaWQ9InBhdGgydGVzdG5nIj4KICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249Ii4uL2xpYi90ZXN0bmctNS4wLWpkazE1LmphciIvPgogPC9wYXRoPgotICAgICAgCi0gICAgCisKKwogCiA8cGF0aCBpZD0iY2xhc3MucGF0aCI+CiAgICAgPGZpbGVzZXQgZGlyPSIke2luc3RhbGwuZGlyfS9saWIiPgogICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIvPgotICAgIDwvZmlsZXNldD4gICAgICAKKyAgICA8L2ZpbGVzZXQ+CiAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJjbGFzc2VzIi8+CiA8L3BhdGg+CiAKQEAgLTYwLDcgKzYwLDcgQEAKICAgICA8L2ZpbGVzZXQ+LS0+CiAgICAgPGZpbGVzZXQgZGlyPSIuLi8uLi9saWIiPgogICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIvPgotICAgIDwvZmlsZXNldD4gICAgCisgICAgPC9maWxlc2V0PgogICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iLi9jbGFzc2VzL3Rlc3QiLz4KIDwvcGF0aD4KIApAQCAtNjgsNyArNjgsNyBAQAogPHRhc2tkZWYgbmFtZT0idGVzdG5nIgogICAgICAgICAgY2xhc3NwYXRocmVmPSJwYXRoMnRlc3RuZyIKICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLnRlc3RuZy5UZXN0TkdBbnRUYXNrIi8+Ci0gICAgICAgICAKKwogCiA8IS0tIEdlbmVyYXRlIHRoZSBUZXN0TkcgcmVwb3J0IC0tPgogPHRhcmdldCBuYW1lPSJyZXBvcnQiPgpAQCAtOTcsMjYgKzk3LDI2IEBACiAKIDx0YXJnZXQgbmFtZT0ic3RhcnQiPgogICA8ZWNobyBtZXNzYWdlPSJTdGFydGluZyBTZWxlbml1bSBTZXJ2ZXIiLz4KLSAgPGphdmEgamFyPSIuLi8uLi9saWIvc2VsZW5pdW0vc2VsZW5pdW0tc2VydmVyLmphciIgZm9yaz0idHJ1ZSI+ICAKKyAgPGphdmEgamFyPSIuLi8uLi9saWIvc2VsZW5pdW0vc2VsZW5pdW0tc2VydmVyLmphciIgZm9yaz0idHJ1ZSI+CiAgICAgICA8YXJnIGxpbmU9Ii1pbnRlcmFjdGl2ZSIvPgogICA8L2phdmE+Ci0gICAgICAKKwogPC90YXJnZXQ+CiAKLTx0YXJnZXQgIG5hbWU9InJ1biI+ICAgIAotICAgIAotICAgIDxlY2hvIG1lc3NhZ2U9Ij09PT09PT09PT09PT1TdGFydGluZyBTZWxlbml1bSBUZXN0TkcgdGVzdCBhdCBcbiAke2Jhc2VkaXJ9ICA9PT09PT09PT09PT0iLz4gIAotICAKKzx0YXJnZXQgIG5hbWU9InJ1biI+CisKKyAgICA8ZWNobyBtZXNzYWdlPSI9PT09PT09PT09PT09U3RhcnRpbmcgU2VsZW5pdW0gVGVzdE5HIHRlc3QgYXQgXG4gJHtiYXNlZGlyfSAgPT09PT09PT09PT09Ii8+CisKICAgICA8bWtkaXIgZGlyPSIuLi90ZXN0LW91dHB1dCIvPgogICAgIDx0ZXN0bmcgb3V0cHV0ZGlyPSIuLi90ZXN0LW91dHB1dCIKICAgICAgICAgICAgIGNsYXNzcGF0aHJlZj0idGVzdC5jbGFzc3BhdGgiIGdyb3Vwcz0iIj4KICAgICAgICAgIDxjbGFzc2ZpbGVzZXQgZGlyPSJjbGFzc2VzL3Rlc3QiIGluY2x1ZGVzPSIqKi9TZWxlbml1bVRlc3QuY2xhc3MiLz4KICAgICAgICAgPCEtLTx4bWxmaWxlc2V0IGRpcj0iLi4vLi4vLi4vIiBpbmNsdWRlcz0idGVzdG5nLnhtbCIvPi0tPgogICAgIDwvdGVzdG5nPgotICAgIAorCiAgICAgPCEtLTxhbnRjYWxsIHRhcmdldD0iLXBvc3QtdGVzdC1ydW4iLz4gICAgLS0+Ci0gICAgCi08L3RhcmdldD4gICAgCisKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InN0b3AiPgogICAgICAgICA8Z2V0IHRhc2tuYW1lPSJzZWxlbml1bS1zaHV0ZG93biIKQEAgLTEzNCwxMSArMTM0LDExIEBACiA8dGFyZ2V0IG5hbWU9Il9zdGFydC1zZWxlbml1bSI+CiAgPGphdmEgamFyPSIuLi9saWIvc2VsZW5pdW0vJHtzZWxlbml1bS1zcnZyLWphcn0iIGZvcms9InRydWUiIHNwYXduPSJ0cnVlIiAvPgogIDxhbnRjYWxsIHRhcmdldD0iX3J1bi11YS10ZXN0cyIgLz4KLSA8Z2V0IGRlc3Q9IiR7dGVzdHJlcG9ydGRpcn0vcmVzdWx0cy50eHQiIAorIDxnZXQgZGVzdD0iJHt0ZXN0cmVwb3J0ZGlyfS9yZXN1bHRzLnR4dCIKICAgICAgICAgc3JjPSIke3NlbGVuaXVtLXNydnItbG9jfS9zZWxlbml1bS1zZXJ2ZXIvZHJpdmVyLz9jbWQ9c2h1dERvd24iIC8+CiA8L3RhcmdldD4KIAogCi0gICAgCisKIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29tbXVuaXR5L2FkbWlud2ViL2Jhc2ljL3NyYy90ZXN0L1NlbGVuaXVtVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29tbXVuaXR5L2FkbWlud2ViL2Jhc2ljL3NyYy90ZXN0L1NlbGVuaXVtVGVzdC5qYXZhCmluZGV4IDg0MDJlMTEuLjJhZDZkYjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbW11bml0eS9hZG1pbndlYi9iYXNpYy9zcmMvdGVzdC9TZWxlbml1bVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb21tdW5pdHkvYWRtaW53ZWIvYmFzaWMvc3JjL3Rlc3QvU2VsZW5pdW1UZXN0LmphdmEKQEAgLTIxLDMzICsyMSwzMyBAQAogaW1wb3J0IG9yZy5vcGVucWEuc2VsZW5pdW0uc2VydmVyLlNlbGVuaXVtU2VydmVyOwogCiBwdWJsaWMgY2xhc3MgU2VsZW5pdW1UZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgRGVmYXVsdFNlbGVuaXVtIHNlbGVuaXVtOwotICAgIAorCiAgICAgLy9AUGFyYW1ldGVycyh7InNlbGVuLXN2ci1hZGRyIiwiYnJ3c3ItcGF0aCIsImF1dC1hZGRyIn0pCiAgICAgQEJlZm9yZUNsYXNzCiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGFydGluZyBTZWxlbml1bSBMYXVuY2hlci0tLT4iKTsKICAgICAgICAgc2VsZW5pdW0gPSBuZXcgRGVmYXVsdFNlbGVuaXVtKCJsb2NhbGhvc3QiLAogICAgICAgICAgICAgICAgIFNlbGVuaXVtU2VydmVyLmdldERlZmF1bHRQb3J0KCksICIqaWV4cGxvcmUiLCAiaHR0cDovL2xvY2FsaG9zdDo0ODQ4Iik7Ci0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCisKKworCiAgICAgLyogc2VsZW5pdW0gPSBuZXcgRGVmYXVsdFNlbGVuaXVtKHNlbGVuU3J2ckFkZHIsCiAgICAgICAgICAgICAgU2VsZW5pdW1TZXJ2ZXIuZ2V0RGVmYXVsdFBvcnQoKSwgYnBhdGgsIGFwcFBhdGgpOyovCi0gICAgICAgIAotICAgICAgICAKKworCiAgICAgIC8qc2VsQ2xpZW50ID0gbmV3IERlZmF1bHRTZWxlbml1bSgibG9jYWxob3N0IiwgNDQ0NCwKICAgICAgICAgICAgICIqZmlyZWZveCIsICJodHRwOi8vbG9jYWxob3N0OiIgKyBQT1JUKTsqLwotICAgICAgICAKKwogICAgICAgICBzZWxlbml1bS5zdGFydCgpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdDEoKXsKICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUodHJ1ZSwiUGFzcyIpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgQFBhcmFtZXRlcnMoeyJhdXQtYWRkciJ9KQogICAgIHB1YmxpYyB2b2lkIHRlc3RMb2dpblNjcmVlbigpIHRocm93cyBFeGNlcHRpb24gewpAQCAtNjIsMTQgKzYyLDE0IEBACiAgICAgICAgIHNlbGVuaXVtLndhaXRGb3JQYWdlVG9Mb2FkKCIzMDAwMCIpOwogICAgICAgICAvL3ZlcmlmeVRydWUoc2VsZW5pdW0uaXNUZXh0UHJlc2VudCgiSlJ1YnkiKSk7CiAgICAgICAgIC8vdmVyaWZ5RXF1YWxzKCJnbGFzc2Zpc2g6IEdsYXNzRmlzaCBDb21tdW5pdHkiLCBzZWxlbml1bS5nZXRUaXRsZSgpKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy9Bc3NlcnQuYXNzZXJ0RXF1YWxzKCIiLCBzZWxlbml1bS5nZXRUZXh0KCIvL2ltZ1tAYWx0PSdHbGFzc0Zpc2ggVjInXSIpKTsKLSAgICAgICAgCisKICAgICAgICAgc2VsZW5pdW0ub3BlbigiL2xvZ2luLmpzZiIpOwogICAgICAgICBzZWxlbml1bS53YWl0Rm9yUGFnZVRvTG9hZCgiMzAwMDAiKTsKICAgICAgICAgLy9zZWxlbml1bS50eXBlKCJMb2dpbi51c2VybmFtZSIsICJhZG1pbiIpOwotICAgICAgICBzZWxlbml1bS50eXBlKCJqX3VzZXJuYW1lIiwgImFkbWluIik7ICAgICAgICAKKyAgICAgICAgc2VsZW5pdW0udHlwZSgial91c2VybmFtZSIsICJhZG1pbiIpOwogICAgICAgICAvL3NlbGVuaXVtLndhaXRGb3JQYWdlVG9Mb2FkKCIzMDAwMCIpOwogICAgICAgICAvL3NlbGVuaXVtLnR5cGUoIkxvZ2luLnBhc3N3b3JkIiwgImFkbWluYWRtaW4iKTsKICAgICAgICAgc2VsZW5pdW0udHlwZSgial9wYXNzd29yZCIsICJhZG1pbmFkbWluIik7CkBAIC04MCwxNCArODAsMTQgQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGUpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgfQotICAgIAorCiAgICAgQEFmdGVyQ2xhc3MKICAgICBwcml2YXRlIHZvaWQgc3RvcCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBzZWxlbml1bS5zdG9wKCk7Ci0gICAgfSAgICAKLSAgICAKLSAgICAKKyAgICB9CisKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29tbXVuaXR5L2FkbWlud2ViL2Jhc2ljL3Rlc3RuZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb21tdW5pdHkvYWRtaW53ZWIvYmFzaWMvdGVzdG5nLnhtbAppbmRleCBkZTE2OTZmLi44ODVhYWExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb21tdW5pdHkvYWRtaW53ZWIvYmFzaWMvdGVzdG5nLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb21tdW5pdHkvYWRtaW53ZWIvYmFzaWMvdGVzdG5nLnhtbApAQCAtMTcsMjAgKzE3LDIwIEBACiAtLT4KIAogPHN1aXRlIG5hbWU9IlVzZXIgQWNjZXB0YW5jZSBUZXN0cyIgdmVyYm9zZT0iMSIgPgotIAorCiAgPCEtLSByZXF1aXJlZCBmb3IgRGJVbml0IGZpeHR1cmUgICAtLT4KLSA8cGFyYW1ldGVyIG5hbWU9InNlZWQtcGF0aCIgdmFsdWU9InRlc3QvY29uZi9ndDE1LXNlZWQueG1sIi8+IAorIDxwYXJhbWV0ZXIgbmFtZT0ic2VlZC1wYXRoIiB2YWx1ZT0idGVzdC9jb25mL2d0MTUtc2VlZC54bWwiLz4KICA8cGFyYW1ldGVyIG5hbWU9ImRiLWRyaXZlciIgdmFsdWU9Im9yZy5oc3FsZGIuamRiY0RyaXZlciIvPgogIDxwYXJhbWV0ZXIgbmFtZT0iZGItdXJsIiB2YWx1ZT0iamRiYzpoc3FsZGI6aHNxbDovLzEyNy4wLjAuMSIvPgogIDxwYXJhbWV0ZXIgbmFtZT0iZGItdXNlciIgdmFsdWU9InNhIi8+CiAgPHBhcmFtZXRlciBuYW1lPSJkYi1wc3N3cmQiIHZhbHVlPSIiLz4KLSAKLSA8IS0tIHJlcXVpcmVkIGZvciBTZWxlbml1bSBmaXh0dXJlIC0tPgotIDxwYXJhbWV0ZXIgbmFtZT0ic2VsZW4tc3ZyLWFkZHIiIHZhbHVlPSJsb2NhbGhvc3QiLz4gCi0gPHBhcmFtZXRlciBuYW1lPSJhdXQtYWRkciIgdmFsdWU9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9ndDE1LyIvPiAJCiAKLSA8dGVzdCBuYW1lPSJHVDE1IENSVURzLSBGaXJlZm94IiA+IAotIAorIDwhLS0gcmVxdWlyZWQgZm9yIFNlbGVuaXVtIGZpeHR1cmUgLS0+CisgPHBhcmFtZXRlciBuYW1lPSJzZWxlbi1zdnItYWRkciIgdmFsdWU9ImxvY2FsaG9zdCIvPgorIDxwYXJhbWV0ZXIgbmFtZT0iYXV0LWFkZHIiIHZhbHVlPSJodHRwOi8vbG9jYWxob3N0OjgwODAvZ3QxNS8iLz4KKworIDx0ZXN0IG5hbWU9IkdUMTUgQ1JVRHMtIEZpcmVmb3giID4KKwogICA8cGFyYW1ldGVyIG5hbWU9ImJyd3NyLXBhdGgiIHZhbHVlPSIqZmlyZWZveCIvPgogCiAgIDxwYWNrYWdlcz4KQEAgLTM5LDEzICszOSwxMyBAQAogICA8L3BhY2thZ2VzPgogIDwvdGVzdD4KIAotIDx0ZXN0IG5hbWU9IkdUMTUgQ1JVRHMtIElFIiA+IAotICAKKyA8dGVzdCBuYW1lPSJHVDE1IENSVURzLSBJRSIgPgorCiAgIDxwYXJhbWV0ZXIgbmFtZT0iYnJ3c3ItcGF0aCIgdmFsdWU9IippZXhwbG9yZSIvPgogCiAgIDxwYWNrYWdlcz4KICAgIDxwYWNrYWdlIG5hbWU9InRlc3QuY29tLmFjbWUuZ3QxNS5XZWIuc2VsZW5pdW0iIC8+CiAgICA8cGFja2FnZSBuYW1lPSJ0ZXN0LmNvbS5hY21lLmd0MTUuV2ViLnNlbGVuaXVtLmZpeHR1cmVzIiAvPgotICA8L3BhY2thZ2VzPiAKKyAgPC9wYWNrYWdlcz4KICA8L3Rlc3Q+CiA8L3N1aXRlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29tbXVuaXR5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbW11bml0eS9idWlsZC54bWwKaW5kZXggOTcxZjdlZC4uMzA3NjMzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29tbXVuaXR5L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb21tdW5pdHkvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImdmLWNvbW11bml0eSIgZGVmYXVsdD0iZGVmYXVsdCIgYmFzZWRpcj0iLiI+CiAgICAgPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiLz4KLSAgICAKKwogICAgIDxwYXRoIGlkPSJwYXRoMnRlc3RuZyI+CiAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJsaWIvdGVzdG5nLTUuMC1qZGsxNS5qYXIiLz4KIDwvcGF0aD4KQEAgLTI4LDcgKzI4LDcgQEAKIDxwYXRoIGlkPSJjbGFzcy5wYXRoIj4KICAgICA8ZmlsZXNldCBkaXI9IiR7aW5zdGFsbC5kaXJ9L2xpYiI+CiAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouamFyIi8+Ci0gICAgPC9maWxlc2V0PiAgICAgIAorICAgIDwvZmlsZXNldD4KICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImNsYXNzZXMiLz4KIDwvcGF0aD4KIDxwYXRoIGlkPSJ0ZXN0LmNsYXNzcGF0aCI+CkBAIC0zNywxNCArMzcsMTQgQEAKICAgICA8L2ZpbGVzZXQ+CiAgICAgPGZpbGVzZXQgZGlyPSIuL2xpYiI+CiAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouamFyIi8+Ci0gICAgPC9maWxlc2V0PiAgICAKKyAgICA8L2ZpbGVzZXQ+CiAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke3Rlc3QuY2xhc3Mub3V0cHV0fSIvPgogPC9wYXRoPgogCiA8dGFza2RlZiBuYW1lPSJ0ZXN0bmciCiAgICAgICAgICBjbGFzc3BhdGhyZWY9InBhdGgydGVzdG5nIgogICAgICAgICAgY2xhc3NuYW1lPSJvcmcudGVzdG5nLlRlc3ROR0FudFRhc2siLz4KLSAgICAKKwogIDxkZXNjcmlwdGlvbj5CdWlsZHMsIHRlc3RzLCBhbmQgcnVucyB0aGUgcHJvamVjdCBIZWxsbyBKU1AgQXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogPCEtLSA8aW1wb3J0IGZpbGU9Im5icHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPi0tPgogCkBAIC01MiwyNCArNTIsMjQgQEAKICAgICA8ZWNobyBtZXNzYWdlPSJIZWxsbyBDb21tdW5pdHkiLz4KIDwvdGFyZ2V0PgogCi08dGFyZ2V0IG5hbWU9ImJ1aWxkIj4gICAgCi0gICAgPGFudCBkaXI9IndlYi9oZWxsb3dvcmxkIiB0YXJnZXQ9ImJ1aWxkIi8+ICAgIAorPHRhcmdldCBuYW1lPSJidWlsZCI+CisgICAgPGFudCBkaXI9IndlYi9oZWxsb3dvcmxkIiB0YXJnZXQ9ImJ1aWxkIi8+CiAgICAgIDxhbnQgZGlyPSJlamIzMC9oZWxsbyIgdGFyZ2V0PSJidWlsZCIvPgogICAgICA8YW50IGRpcj0iYWRtaW53ZWIvYmFzaWMiIHRhcmdldD0iYnVpbGQiLz4KIDwvdGFyZ2V0PgogCiAKLTx0YXJnZXQgbmFtZT0iY29tcGlsZS10ZXN0cyI+ICAgICAgICAgICAgCi0gICAgPGFudCBkaXI9IndlYi9oZWxsb3dvcmxkIiB0YXJnZXQ9ImNvbXBpbGUtdGVzdHMiIGluaGVyaXRBbGw9ImZhbHNlIi8+ICAgIAorPHRhcmdldCBuYW1lPSJjb21waWxlLXRlc3RzIj4KKyAgICA8YW50IGRpcj0id2ViL2hlbGxvd29ybGQiIHRhcmdldD0iY29tcGlsZS10ZXN0cyIgaW5oZXJpdEFsbD0iZmFsc2UiLz4KICAgICA8YW50IGRpcj0iZWpiMzAvc2Vzc2lvbi9oZWxsbyIgdGFyZ2V0PSJjb21waWxlLXRlc3RzIiBpbmhlcml0QWxsPSJmYWxzZSIvPgogPC90YXJnZXQ+CiAKLTwhLS08dGFyZ2V0ICBuYW1lPSJydW4iPiAgIAotICAgIDxhbnQgZGlyPSJ3ZWIvaGVsbG93b3JsZCIgdGFyZ2V0PSJydW4iLz4gICAgCis8IS0tPHRhcmdldCAgbmFtZT0icnVuIj4KKyAgICA8YW50IGRpcj0id2ViL2hlbGxvd29ybGQiIHRhcmdldD0icnVuIi8+CiA8L3RhcmdldD4tLT4KLSAgICAKKwogPHRhcmdldCBuYW1lPSJkZXBsb3kiID4KLSAgICA8YW50IGRpcj0id2ViL2hlbGxvd29ybGQiIHRhcmdldD0iZGVwbG95IiBpbmhlcml0QWxsPSJmYWxzZSIvPiAgICAKKyAgICA8YW50IGRpcj0id2ViL2hlbGxvd29ybGQiIHRhcmdldD0iZGVwbG95IiBpbmhlcml0QWxsPSJmYWxzZSIvPgogICAgICA8YW50IGRpcj0iZWpiMzAvaGVsbG8iIHRhcmdldD0iZGVwbG95IiBpbmhlcml0QWxsPSJmYWxzZSIvPgogICAgIDwhLS0gPGFudCBkaXI9ImFkbWlud2ViL2Jhc2ljIiB0YXJnZXQ9ImRlcGxveSIvPi0tPgogPC90YXJnZXQ+CkBAIC04MCwzNCArODAsMzQgQEAKIDwvdGFyZ2V0PgogCiA8IS0tPHRhcmdldCBuYW1lPSJydW4iPgotICAgIDxhbnQgZGlyPSJ3ZWIvaGVsbG93b3JsZCIgdGFyZ2V0PSJydW4iLz4gICAgCisgICAgPGFudCBkaXI9IndlYi9oZWxsb3dvcmxkIiB0YXJnZXQ9InJ1biIvPgogICAgICA8YW50IGRpcj0iZWpiMzAvaGVsbG8iIHRhcmdldD0icnVuIi8+CiAgICAgIDxhbnQgZGlyPSJhZG1pbndlYi9iYXNpYyIgdGFyZ2V0PSJydW4iLz4KIDwvdGFyZ2V0Pi0tPgotICAgICAgCisKIAogPCEtLTx0YXJnZXQgbmFtZT0iZGlzdCI+CiAgICAgPGVjaG8gbWVzc2FnZT0iU2F2ZSBFQVIvV0FSL0pBUiBmaWxlIi8+Ci0gICAgPGFudCBkaXI9IndlYi9oZWxsb3dvcmxkIiB0YXJnZXQ9ImRpc3QiLz4gICAgCisgICAgPGFudCBkaXI9IndlYi9oZWxsb3dvcmxkIiB0YXJnZXQ9ImRpc3QiLz4KIDwvdGFyZ2V0Pi0tPgogCi08dGFyZ2V0ICBuYW1lPSJydW4iPiAgICAKLSAgICA8ZWNobyBtZXNzYWdlPSI9PT09PT09PT09PT09U3RhcnRpbmcgVGVzdE5HIGZ1bmN0aW9uYWwgdGVzdHMgID09PT09PT09PT09PSIvPiAgICAKLSAgICA8bWtkaXIgZGlyPSIke3Rlc3QucmVwb3J0fSIvPiAgICAKKzx0YXJnZXQgIG5hbWU9InJ1biI+CisgICAgPGVjaG8gbWVzc2FnZT0iPT09PT09PT09PT09PVN0YXJ0aW5nIFRlc3RORyBmdW5jdGlvbmFsIHRlc3RzICA9PT09PT09PT09PT0iLz4KKyAgICA8bWtkaXIgZGlyPSIke3Rlc3QucmVwb3J0fSIvPgogICAgIDx0ZXN0bmcgb3V0cHV0ZGlyPSIke3Rlc3QucmVwb3J0fSIKICAgICAgICAgICAgIGNsYXNzcGF0aHJlZj0idGVzdC5jbGFzc3BhdGgiPgogICAgICAgICA8anZtYXJnIHZhbHVlPSItRGphdmEuY29tcGlsZXI9Tk9ORSIvPgogICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJiYXNlZGlyIiB2YWx1ZT0iJHtiYXNlZGlyfSIvPgotICAgICAgICAgPCEtLTxjbGFzc2ZpbGVzZXQgZGlyPSJjbGFzc2VzL3Rlc3QiIGluY2x1ZGVzPSIqKi9TZWxlbml1bVRlc3QuY2xhc3MiLz4tLT4gICAgICAgICAKKyAgICAgICAgIDwhLS08Y2xhc3NmaWxlc2V0IGRpcj0iY2xhc3Nlcy90ZXN0IiBpbmNsdWRlcz0iKiovU2VsZW5pdW1UZXN0LmNsYXNzIi8+LS0+CiAgICAgICAgIDx4bWxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9InRlc3RuZy54bWwiLz4KICAgICA8L3Rlc3RuZz4KLSAgICAKKwogICAgIDwhLS08YW50Y2FsbCB0YXJnZXQ9Ii1wb3N0LXRlc3QtcnVuIi8+ICAgIC0tPgotICAgIAotPC90YXJnZXQ+ICAKKworPC90YXJnZXQ+CiAKIDwhLS0gR2VuZXJhdGUgdGhlIFRlc3RORyByZXBvcnQgLS0+Ci08dGFyZ2V0IG5hbWU9InJlcG9ydCI+ICAgICAgICAKKzx0YXJnZXQgbmFtZT0icmVwb3J0Ij4KICAgICA8anVuaXRyZXBvcnQgdG9kaXI9IiR7dGVzdC5yZXBvcnR9Ij4KICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIj4KICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovdGVzdC1vdXRwdXQvKiovKi54bWwiLz4KQEAgLTEzNyw2ICsxMzcsNiBAQAogICAgICAgICA8L3ppcD4KIAogICAgIDwvdGFyZ2V0PgotICAgIAorCiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbW11bml0eS9lamIzMC9zZXNzaW9uL2hlbGxvL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbW11bml0eS9lamIzMC9zZXNzaW9uL2hlbGxvL2J1aWxkLnhtbAppbmRleCA1MWViY2M1Li5lYjJkNTczIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb21tdW5pdHkvZWpiMzAvc2Vzc2lvbi9oZWxsby9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29tbXVuaXR5L2VqYjMwL3Nlc3Npb24vaGVsbG8vYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImVqYjMwLXNlc3Npb24taGVsbG8iIGRlZmF1bHQ9ImRlZmF1bHQiIGJhc2VkaXI9Ii4iPgogICAgIDxwcm9wZXJ0eSBmaWxlPSJidWlsZC5wcm9wZXJ0aWVzIi8+Ci0gICAgCisKICA8ZGVzY3JpcHRpb24+QnVpbGRzLCB0ZXN0cywgYW5kIHJ1bnMgdGhlIHByb2plY3QgSGVsbG8gSlNQIEFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KIDwhLS0gPGltcG9ydCBmaWxlPSJuYnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4tLT4KIApAQCAtNDQsMTMgKzQ0LDEzIEBACiA8cGF0aCBpZD0icGF0aDJ0ZXN0bmciPgogICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0idGVzdG5nLTUuMC1qZGsxNS5qYXIiLz4KIDwvcGF0aD4KLSAgICAgIAotICAgIAorCisKIAogPHBhdGggaWQ9ImNsYXNzLnBhdGgiPgogICAgIDxmaWxlc2V0IGRpcj0iJHtpbnN0YWxsLmRpcn0vbGliIj4KICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qYXIiLz4KLSAgICA8L2ZpbGVzZXQ+ICAgICAgCisgICAgPC9maWxlc2V0PgogICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iY2xhc3NlcyIvPgogPC9wYXRoPgogCkBAIC02Nyw3ICs2Nyw3IEBACiAKIDwhLS0gVGVzdE5HIGNsYXNzIGZpbGVzZXQgLS0+CiAKLTx0YXJnZXQgbmFtZT0iYnVpbGQiPiAgICAKKzx0YXJnZXQgbmFtZT0iYnVpbGQiPgogICAgIDxkZWxldGUgZGlyPSJjbGFzc2VzIi8+CiAgICAgPG1rZGlyIGRpcj0iY2xhc3Nlcy9hcHAiLz4KICAgICA8amF2YWMgICBkZWJ1Zz0idHJ1ZSIKQEAgLTc2LDIwICs3NiwyMCBAQAogICAgIGNsYXNzcGF0aHJlZj0iY2xhc3MucGF0aCIKICAgICBzcmNkaXI9InNyYy9lamIiCiAgICAgZGVzdGRpcj0iY2xhc3Nlcy9hcHAiLz4KLSAgICAKKwogICAgIDxkZWxldGUgZGlyPSJkaXN0IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgICAKKwogICAgIDxta2RpciBkaXI9ImRpc3QiLz4KLSAgICAKLSAgICAKLSAgICA8amFyIGRlc3RmaWxlPSJkaXN0LyR7ZWpiamFyLmZpbGV9Ij4gICAgICAgIAorCisKKyAgICA8amFyIGRlc3RmaWxlPSJkaXN0LyR7ZWpiamFyLmZpbGV9Ij4KICAgICAgICAgPGZpbGVzZXQgIGRpcj0iY2xhc3Nlcy9hcHAiPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgICAgPG1ldGFpbmYgZGlyPSJkZXNjcmlwdG9yIj4gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLnhtbCIvPiAgICAgICAgICAgIAorICAgICAgIDxtZXRhaW5mIGRpcj0iZGVzY3JpcHRvciI+CisgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi54bWwiLz4KICAgICAgICAgPC9tZXRhaW5mPgotICAgIDwvamFyPiAgICAKKyAgICA8L2phcj4KICAgICA8ZWNobyBtZXNzYWdlPSI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ii8+CiAgICAgPGVjaG8gbWVzc2FnZT0iUGFja2FnZWQgQXJjaGl2ZSBhdCAuL2Rpc3QvJHtlamJqYXIuZmlsZX0iLz4KICAgICA8ZWNobyBtZXNzYWdlPSI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ii8+CkBAIC05OCw3ICs5OCw3IEBACiA8dGFza2RlZiBuYW1lPSJ0ZXN0bmciCiAgICAgICAgICBjbGFzc3BhdGhyZWY9InBhdGgydGVzdG5nIgogICAgICAgICAgY2xhc3NuYW1lPSJvcmcudGVzdG5nLlRlc3ROR0FudFRhc2siLz4KLSAgICAgICAgIAorCiAKIDwhLS0gR2VuZXJhdGUgdGhlIFRlc3RORyByZXBvcnQgLS0+CiA8dGFyZ2V0IG5hbWU9InJlcG9ydCI+CkBAIC0xMjUsOSArMTI1LDkgQEAKICAgICAgICAvPgogPC90YXJnZXQ+CiAKLTx0YXJnZXQgIG5hbWU9InJ1biI+ICAgIAotICAgIAotICAgIDxlY2hvIG1lc3NhZ2U9Ij09PT09PT09PT09PT1TdGFydGluZyBUZXN0TkcgdGVzdCBhdCBcbiAke2Jhc2VkaXJ9ICA9PT09PT09PT09PT0iLz4gICAgCis8dGFyZ2V0ICBuYW1lPSJydW4iPgorCisgICAgPGVjaG8gbWVzc2FnZT0iPT09PT09PT09PT09PVN0YXJ0aW5nIFRlc3RORyB0ZXN0IGF0IFxuICR7YmFzZWRpcn0gID09PT09PT09PT09PSIvPgogICAgIDxta2RpciBkaXI9Ii4uLy4uL3Rlc3Qtb3V0cHV0Ii8+CiAgICAgPHRlc3RuZyBvdXRwdXRkaXI9Ii4uLy4uLy4uL3Rlc3Qtb3V0cHV0IgogICAgICAgICAgICAgY2xhc3NwYXRocmVmPSJ0ZXN0LmNsYXNzcGF0aCIgZ3JvdXBzPSIiPgpAQCAtMTM1LDcgKzEzNSw3IEBACiAgICAgICAgIDwhLS08eG1sZmlsZXNldCBkaXI9Ii4uLy4uLy4uLyIgaW5jbHVkZXM9InRlc3RuZy54bWwiLz4tLT4KICAgICA8L3Rlc3RuZz4KIDwvdGFyZ2V0PgotICAgIAorCiA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0ic3VuLXRhc2tkZWYiPgogICAgICAgPGVjaG8gbWVzc2FnZT0iJHtzdW4uYXBwc2VydmVyLmFudGphcn0iLz4KIApAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgcGFzc3dvcmRmaWxlPSIke2luc3RhbGwuZGlyfS9wYXNzLnR4dCIKICAgICBob3N0PSIke2FkbWluLmhvc3R9IgogICAgIHBvcnQ9IiR7YWRtaW4ucG9ydH0iCi0gICAgYXNpbnN0YWxsZGlyPSIke2luc3RhbGwuZGlyfSIgLz4gICAgICAgICAgICAKKyAgICBhc2luc3RhbGxkaXI9IiR7aW5zdGFsbC5kaXJ9IiAvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iZGlzdCI+CkBAIC0xNTksMTMgKzE1OSwxMyBAQAogPHRhcmdldCBuYW1lPSJfc3RhcnQtc2VsZW5pdW0iPgogIDxqYXZhIGphcj0iLi4vbGliL3NlbGVuaXVtLyR7c2VsZW5pdW0tc3J2ci1qYXJ9IiBmb3JrPSJ0cnVlIiBzcGF3bj0idHJ1ZSIgLz4KICA8YW50Y2FsbCB0YXJnZXQ9Il9ydW4tdWEtdGVzdHMiIC8+Ci0gPGdldCBkZXN0PSIke3Rlc3RyZXBvcnRkaXJ9L3Jlc3VsdHMudHh0IiAKKyA8Z2V0IGRlc3Q9IiR7dGVzdHJlcG9ydGRpcn0vcmVzdWx0cy50eHQiCiAgICAgICAgIHNyYz0iJHtzZWxlbml1bS1zcnZyLWxvY30vc2VsZW5pdW0tc2VydmVyL2RyaXZlci8/Y21kPXNodXREb3duIiAvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0icnVuIj4KICA8dGFza2RlZiBjbGFzc3BhdGhyZWY9ImJ1aWxkLmNsYXNzcGF0aCIgcmVzb3VyY2U9InRlc3RuZ3Rhc2tzIiAvPgotIDx0ZXN0bmcgb3V0cHV0RGlyPSIke3Rlc3RyZXBvcnRkaXJ9IiAKKyA8dGVzdG5nIG91dHB1dERpcj0iJHt0ZXN0cmVwb3J0ZGlyfSIKICAgICAgICAgIGNsYXNzcGF0aD0iJHt0ZXN0Y2xhc3Nlc2Rpcn07JHtjbGFzc2VzZGlyfSIgaGFsdG9uZmFpbHVyZT0idHJ1ZSI+CiAgIDx4bWxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9InRlc3RuZy54bWwiIC8+CiAgIDxjbGFzc3BhdGg+CkBAIC0xNzMsNyArMTczLDcgQEAKICAgPC9jbGFzc3BhdGg+CiAgPC90ZXN0bmc+CiA8L3RhcmdldD4KLSAgICAKLSAgICAKKworCiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbW11bml0eS90ZXN0bmcueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29tbXVuaXR5L3Rlc3RuZy54bWwKaW5kZXggYzkxYTRlNS4uMmU2MGRkZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29tbXVuaXR5L3Rlc3RuZy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29tbXVuaXR5L3Rlc3RuZy54bWwKQEAgLTMwLDYgKzMwLDYgQEAKICAgICA8Y2xhc3Nlcz4KICAgICAgICA8Y2xhc3MgbmFtZT0iZWpiMzAuc2Vzc2lvbi5oZWxsby50ZXN0LlRlc3RDbGllbnQiIC8+CiAgICAgPC9jbGFzc2VzPgotICA8L3Rlc3Q+IAorICA8L3Rlc3Q+CiA8L3N1aXRlPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb21tdW5pdHkvd2ViL2hlbGxvd29ybGQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29tbXVuaXR5L3dlYi9oZWxsb3dvcmxkL2J1aWxkLnhtbAppbmRleCAzOTk4NTc0Li5hOTVkN2QwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb21tdW5pdHkvd2ViL2hlbGxvd29ybGQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbW11bml0eS93ZWIvaGVsbG93b3JsZC9idWlsZC54bWwKQEAgLTE5LDMyICsxOSwzMiBAQAogCiA8cHJvamVjdCBuYW1lPSJoZWxsby1qc3AiIGRlZmF1bHQ9ImRlZmF1bHQiIGJhc2VkaXI9Ii4iPgogICAgIDxwcm9wZXJ0eSBmaWxlPSJidWlsZC5wcm9wZXJ0aWVzIi8+Ci0gICAgCisKICA8ZGVzY3JpcHRpb24+QnVpbGRzLCB0ZXN0cywgYW5kIHJ1bnMgdGhlIHByb2plY3QgSGVsbG8gSlNQIEFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KIDwhLS0gPGltcG9ydCBmaWxlPSJuYnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4tLT4KIAogPHBhdGggaWQ9InN1bi5hcHBzZXJ2ZXIuYW50amFyIj4KICAgICA8ZmlsZXNldCBkaXI9IiR7aW5zdGFsbC5kaXJ9L2xpYiI+CiAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouamFyIi8+Ci0gICAgPC9maWxlc2V0PiAgICAgICAgICAKKyAgICA8L2ZpbGVzZXQ+CiA8L3BhdGg+CiAKIAogPHRhcmdldCBuYW1lPSJzdW4tdGFza2RlZiI+CiAgICAgPHRhc2tkZWYgbmFtZT0ic3VuLWFwcHNlcnYtZGVwbG95IgotIGNsYXNzbmFtZT0ib3JnLmFwYWNoZS50b29scy5hbnQudGFza2RlZnMub3B0aW9uYWwuc3VuLmFwcHNlcnYuRGVwbG95VGFzayI+ICAgICAgICAKLSAgICAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9InN1bi5hcHBzZXJ2ZXIuYW50amFyIiAvPiAgICAgICAgCisgY2xhc3NuYW1lPSJvcmcuYXBhY2hlLnRvb2xzLmFudC50YXNrZGVmcy5vcHRpb25hbC5zdW4uYXBwc2Vydi5EZXBsb3lUYXNrIj4KKyAgICAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9InN1bi5hcHBzZXJ2ZXIuYW50amFyIiAvPgogICAgIDwvdGFza2RlZj4KLSAgICA8dGFza2RlZiBuYW1lPSJzdW4tYXBwc2Vydi11bmRlcGxveSIgCisgICAgPHRhc2tkZWYgbmFtZT0ic3VuLWFwcHNlcnYtdW5kZXBsb3kiCiAgY2xhc3NuYW1lPSJvcmcuYXBhY2hlLnRvb2xzLmFudC50YXNrZGVmcy5vcHRpb25hbC5zdW4uYXBwc2Vydi5VbmRlcGxveVRhc2siPgotICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9InN1bi5hcHBzZXJ2ZXIuYW50amFyIiAvPiAgICAKKyAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJzdW4uYXBwc2VydmVyLmFudGphciIgLz4KICAgICA8L3Rhc2tkZWY+CiA8L3RhcmdldD4KIAogPHBhdGggaWQ9ImNsYXNzLnBhdGgiPgogICAgIDxmaWxlc2V0IGRpcj0iJHtpbnN0YWxsLmRpcn0vbGliIj4KICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qYXIiLz4KLSAgICA8L2ZpbGVzZXQ+ICAgICAgCisgICAgPC9maWxlc2V0PgogICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtjbGFzcy5vdXRwdXR9L2FwcCIvPgogPC9wYXRoPgogCkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgICAgICAgaW5jbHVkZXM9IioqLyouY2xhc3MiPgogICAgIDwvZmlsZXNldD4KIAotPHRhcmdldCBuYW1lPSJidWlsZCI+ICAgIAorPHRhcmdldCBuYW1lPSJidWlsZCI+CiAgICAgPGRlbGV0ZSBkaXI9IiR7Y2xhc3Mub3V0cHV0fS9hcHAiLz4KICAgICA8ZGVsZXRlIGRpcj0iJHtkaXN0LmRpcn0iLz4KICAgICA8bWtkaXIgZGlyPSIke2NsYXNzLm91dHB1dH0vYXBwIi8+CkBAIC04NCwxMyArODQsMTMgQEAKICAgICAgICAgPCEtLTxsaWIgZGlyPSJ0aGlyZHBhcnR5L2xpYnMiPgogICAgICAgICA8ZXhjbHVkZSBuYW1lPSJqZGJjMS5qYXIiLz4KICAgICAgICAgPC9saWI+LS0+Ci0gICAgICAgIDxjbGFzc2VzIGRpcj0iJHtjbGFzcy5vdXRwdXR9L2FwcCI+ICAgICAgICAKLSAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqL0hlbGxvLmNsYXNzIi8+ICAgICAgICAKKyAgICAgICAgPGNsYXNzZXMgZGlyPSIke2NsYXNzLm91dHB1dH0vYXBwIj4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqL0hlbGxvLmNsYXNzIi8+CiAgICAgICAgIDwvY2xhc3Nlcz4KICAgICAgICAgPCEtLTx6aXBmaWxlc2V0IGRpcj0ic3JjL2dyYXBoaWNzL2ltYWdlcy9naWZzIgogICAgICAgICBwcmVmaXg9ImltYWdlcyIvPi0tPgotICAgICAgICA8IS0tPHdlYmluZiBkaXI9Im1ldGFkYXRhIj4gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyoueG1sIi8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICA8IS0tPHdlYmluZiBkaXI9Im1ldGFkYXRhIj4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyoueG1sIi8+CiAgICAgICAgIDwvd2ViaW5mPi0tPgogICAgIDwvd2FyPgogICAgIDxjb3B5IGZpbGU9IiR7ZGlzdC5kaXJ9LyR7d2FyLmZpbGV9IiB0b2ZpbGU9Ii4vJHt3YXIuZmlsZX0iLz4KQEAgLTEwNiw3ICsxMDYsNyBAQAogPHRhc2tkZWYgbmFtZT0idGVzdG5nIgogICAgICAgICAgY2xhc3NwYXRocmVmPSJwYXRoMnRlc3RuZyIKICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLnRlc3RuZy5UZXN0TkdBbnRUYXNrIi8+Ci0gICAgICAgICAKKwogCiA8IS0tIEdlbmVyYXRlIHRoZSBUZXN0TkcgcmVwb3J0IC0tPgogPHRhcmdldCBuYW1lPSJyZXBvcnQiPgpAQCAtMTIyLDcgKzEyMiw3IEBACiA8L3RhcmdldD4KIDx0YXJnZXQgbmFtZT0iY29tcGlsZS10ZXN0cyIKICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJjb21waWxlIHRoZSB0ZXN0IG5nIGV4YW1wbGUiIGRlcGVuZHM9IiI+Ci0gICAgICAgCisKICAgICAgICA8bWtkaXIgZGlyPSIke3Rlc3QuY2xhc3Mub3V0cHV0fSIvPgogICAgICAgIDxqYXZhYyAgIGRlYnVnPSJ0cnVlIgogICAgICAgICAgICAgICBmb3JrPSJ0cnVlIgpAQCAtMTMzLDggKzEzMyw4IEBACiAgICAgICAgLz4KIDwvdGFyZ2V0PgogCi08dGFyZ2V0ICBuYW1lPSJydW4iPiAgICAgIAotICAgIDxlY2hvIG1lc3NhZ2U9Ij09PT09PT09PT09PT1TdGFydGluZyBUZXN0TkcgdGVzdCBhdCAke2NsYXNzLm91dHB1dH0vdGVzdCAgPT09PT09PT09PT09Ii8+ICAgIAorPHRhcmdldCAgbmFtZT0icnVuIj4KKyAgICA8ZWNobyBtZXNzYWdlPSI9PT09PT09PT09PT09U3RhcnRpbmcgVGVzdE5HIHRlc3QgYXQgJHtjbGFzcy5vdXRwdXR9L3Rlc3QgID09PT09PT09PT09PSIvPgogICAgIDxta2RpciBkaXI9IiR7cmVzdWx0Lm91dHB1dH0iLz4KICAgICA8dGVzdG5nIG91dHB1dGRpcj0iJHtyZXN1bHQub3V0cHV0fSIKICAgICBzdWl0ZW5hbWU9IlYzIFRlc3RTdWl0ZSIKQEAgLTE0OSwxNSArMTQ5LDE1IEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJzdG9wIj4KLSAgICAKKwogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iZGVwbG95Ij4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS12MiIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXYzIi8+CiA8L3RhcmdldD4KLSAgICAKLTx0YXJnZXQgbmFtZT0iZGVwbG95LXYyIiBkZXBlbmRzPSJzdW4tdGFza2RlZiIgdW5sZXNzPSJ2MyI+ICAgICAKKworPHRhcmdldCBuYW1lPSJkZXBsb3ktdjIiIGRlcGVuZHM9InN1bi10YXNrZGVmIiB1bmxlc3M9InYzIj4KIAogICAgIDxzdW4tYXBwc2Vydi1kZXBsb3kgZmlsZT0iJHtkaXN0LmRpcn0vJHt3YXIuZmlsZX0iCiAgICAgbmFtZT0iaGVsbG93b3JsZCIKQEAgLTE3MCwyNSArMTcwLDI1IEBACiAgICAgaG9zdD0iJHthZG1pbi5ob3N0fSIKICAgICBwb3J0PSIke2FkbWluLnBvcnR9IgogICAgIGFzaW5zdGFsbGRpcj0iJHtpbnN0YWxsLmRpcn0iIC8+Ci08L3RhcmdldD4gICAKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImRlcGxveS12MyIgaWY9InYzIj4KICAgICA8ZWNobyBtZXNzYWdlPSJkZXBsb3lpbmcgaW4gdjMgbW9kZSIvPgogICAgIDxlY2hvIG1lc3NhZ2U9Ii4vJHt3YXIuZmlsZX0iLz4KICAgICA8Y29weSBmaWxlPSIke2Rpc3QuZGlyfS8ke3dhci5maWxlfSIgdG9kaXI9IiR7Z2xhc3NmaXNoLmhvbWV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95Ii8+CiA8IS0tPGdldCBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9fYXNhZG1pbi9kZXBsb3k/cGF0aD0ke3dhci5maWxlfSIgZGVzdD0idGVzdC5odG1sIi8+LS0+Ci0gICAgCisKIDwvdGFyZ2V0PgotIAotPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0ic3VuLXRhc2tkZWYiPiAgICAgIAorCis8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJzdW4tdGFza2RlZiI+CiAKICAgICA8c3VuLWFwcHNlcnYtdW5kZXBsb3kgZmlsZT0iJHtkaXN0LmRpcn0vJHt3YXIuZmlsZX0iCi0gICAgbmFtZT0iaGVsbG93b3JsZCIgICAgICAgICAgIAorICAgIG5hbWU9ImhlbGxvd29ybGQiCiAgICAgdXNlcj0iJHthZG1pbi51c2VyfSIKICAgICBwYXNzd29yZGZpbGU9IiR7aW5zdGFsbC5kaXJ9L3Bhc3MudHh0IgogICAgIGhvc3Q9IiR7YWRtaW4uaG9zdH0iCiAgICAgcG9ydD0iJHthZG1pbi5wb3J0fSIKLSAgICBhc2luc3RhbGxkaXI9IiR7aW5zdGFsbC5kaXJ9IiAvPiAgICAgICAgICAgIAorICAgIGFzaW5zdGFsbGRpcj0iJHtpbnN0YWxsLmRpcn0iIC8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJzb3VyY2UiPgpAQCAtMjA0LDUgKzIwNCw1IEBACiAgICAgICAgIDwvemlwPgogCiAgICAgPC90YXJnZXQ+Ci0gICAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbW11bml0eS93ZWIvaGVsbG93b3JsZC9zcmMvbXlhcHAvamF2YS9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29tbXVuaXR5L3dlYi9oZWxsb3dvcmxkL3NyYy9teWFwcC9qYXZhL0hlbGxvLmphdmEKaW5kZXggYzYxNjRkYy4uZTdlMzU5ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29tbXVuaXR5L3dlYi9oZWxsb3dvcmxkL3NyYy9teWFwcC9qYXZhL0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29tbXVuaXR5L3dlYi9oZWxsb3dvcmxkL3NyYy9teWFwcC9qYXZhL0hlbGxvLmphdmEKQEAgLTUxLDQzICs1MSw0MyBAQAogICAgICAgICAgICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewogCi0JcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwotCVByaW50V3JpdGVyIHdyaXRlciA9IHJlc3BvbnNlLmdldFdyaXRlcigpOworICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICBQcmludFdyaXRlciB3cml0ZXIgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKIAotCXdyaXRlci5wcmludGxuKCI8aHRtbD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPGhlYWQ+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjx0aXRsZT5TYW1wbGUgQXBwbGljYXRpb24gU2VydmxldCBQYWdlPC90aXRsZT4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC9oZWFkPiIpOwotCXdyaXRlci5wcmludGxuKCI8Ym9keSBiZ2NvbG9yPXdoaXRlPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8aHRtbD4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPGhlYWQ+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjx0aXRsZT5TYW1wbGUgQXBwbGljYXRpb24gU2VydmxldCBQYWdlPC90aXRsZT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPC9oZWFkPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8Ym9keSBiZ2NvbG9yPXdoaXRlPiIpOwogCi0Jd3JpdGVyLnByaW50bG4oIjx0YWJsZSBib3JkZXI9XCIwXCI+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKLQl3cml0ZXIucHJpbnRsbigiPHRkPiIpOwotCS8vd3JpdGVyLnByaW50bG4oIjxpbWcgc3JjPVwiaW1hZ2VzL3RvbWNhdC5naWZcIj4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC90ZD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPHRkPiIpOwotCXdyaXRlci5wcmludGxuKCI8aDE+U2FtcGxlIEFwcGxpY2F0aW9uIFNlcnZsZXQ8L2gxPiIpOwotCXdyaXRlci5wcmludGxuKCJUaGlzIGlzIHRoZSBvdXRwdXQgb2YgYSBzZXJ2bGV0IHRoYXQgaXMgcGFydCBvZiIpOwotCXdyaXRlci5wcmludGxuKCJ0aGUgSGVsbG8sIFdvcmxkIGFwcGxpY2F0aW9uLiAgSXQgZGlzcGxheXMgdGhlIik7Ci0Jd3JpdGVyLnByaW50bG4oInJlcXVlc3QgaGVhZGVycyBmcm9tIHRoZSByZXF1ZXN0IHdlIGFyZSBjdXJyZW50bHkiKTsKLQl3cml0ZXIucHJpbnRsbigicHJvY2Vzc2luZy4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC90ZD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC90cj4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC90YWJsZT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPHRhYmxlIGJvcmRlcj1cIjBcIj4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPHRyPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8dGQ+Iik7CisgICAgLy93cml0ZXIucHJpbnRsbigiPGltZyBzcmM9XCJpbWFnZXMvdG9tY2F0LmdpZlwiPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L3RkPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8dGQ+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjxoMT5TYW1wbGUgQXBwbGljYXRpb24gU2VydmxldDwvaDE+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIlRoaXMgaXMgdGhlIG91dHB1dCBvZiBhIHNlcnZsZXQgdGhhdCBpcyBwYXJ0IG9mIik7CisgICAgd3JpdGVyLnByaW50bG4oInRoZSBIZWxsbywgV29ybGQgYXBwbGljYXRpb24uICBJdCBkaXNwbGF5cyB0aGUiKTsKKyAgICB3cml0ZXIucHJpbnRsbigicmVxdWVzdCBoZWFkZXJzIGZyb20gdGhlIHJlcXVlc3Qgd2UgYXJlIGN1cnJlbnRseSIpOworICAgIHdyaXRlci5wcmludGxuKCJwcm9jZXNzaW5nLiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L3RkPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L3RyPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L3RhYmxlPiIpOwogCi0Jd3JpdGVyLnByaW50bG4oIjx0YWJsZSBib3JkZXI9XCIwXCIgd2lkdGg9XCIxMDAlXCI+Iik7Ci0JRW51bWVyYXRpb24gbmFtZXMgPSByZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7Ci0Jd2hpbGUgKG5hbWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JICAgIFN0cmluZyBuYW1lID0gKFN0cmluZykgbmFtZXMubmV4dEVsZW1lbnQoKTsKLQkgICAgd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKLQkgICAgd3JpdGVyLnByaW50bG4oIiAgPHRoIGFsaWduPVwicmlnaHRcIj4iICsgbmFtZSArICI6PC90aD4iKTsKLQkgICAgd3JpdGVyLnByaW50bG4oIiAgPHRkPiIgKyByZXF1ZXN0LmdldEhlYWRlcihuYW1lKSArICI8L3RkPiIpOwotCSAgICB3cml0ZXIucHJpbnRsbigiPC90cj4iKTsKLQl9Ci0Jd3JpdGVyLnByaW50bG4oIjwvdGFibGU+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjx0YWJsZSBib3JkZXI9XCIwXCIgd2lkdGg9XCIxMDAlXCI+Iik7CisgICAgRW51bWVyYXRpb24gbmFtZXMgPSByZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisgICAgd2hpbGUgKG5hbWVzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZykgbmFtZXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIiAgPHRoIGFsaWduPVwicmlnaHRcIj4iICsgbmFtZSArICI6PC90aD4iKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIiAgPHRkPiIgKyByZXF1ZXN0LmdldEhlYWRlcihuYW1lKSArICI8L3RkPiIpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiPC90cj4iKTsKKyAgICB9CisgICAgd3JpdGVyLnByaW50bG4oIjwvdGFibGU+Iik7CiAKLQl3cml0ZXIucHJpbnRsbigiPC9ib2R5PiIpOwotCXdyaXRlci5wcmludGxuKCI8L2h0bWw+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjwvYm9keT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPC9odG1sPiIpOwogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb21tdW5pdHkvd2ViL2hlbGxvd29ybGQvc3JjL3Rlc3QvV2ViVGVzdE5HLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb21tdW5pdHkvd2ViL2hlbGxvd29ybGQvc3JjL3Rlc3QvV2ViVGVzdE5HLmphdmEKaW5kZXggZThiNjFjNS4uMzFhYzJmZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29tbXVuaXR5L3dlYi9oZWxsb3dvcmxkL3NyYy90ZXN0L1dlYlRlc3RORy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbW11bml0eS93ZWIvaGVsbG93b3JsZC9zcmMvdGVzdC9XZWJUZXN0TkcuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0KICAgICAgICAgIkpTUCBUZXN0IFBhZ2UiOwotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgc3RyQ29udGV4dFJvb3Q9ImhlbGxvanNwIjsKIAogICAgIHN0YXRpYyBTdHJpbmcgcmVzdWx0ID0gIiI7CkBAIC00OCw3ICs0OCw3IEBACiAgICAgQFRlc3QoZ3JvdXBzID17ICJwdWxzZSJ9ICkgLy8gdGVzdCBtZXRob2QKICAgICAvL3B1YmxpYyB2b2lkIHdlYnRlc3QoU3RyaW5nIGhvc3QsIFN0cmluZyBwb3J0LCBTdHJpbmcgY29udGV4dHJvb3QpIHRocm93cyBFeGNlcHRpb257CiAgICAgcHVibGljIHZvaWQgd2VidGVzdCgpIHRocm93cyBFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIFN0cmluZyBob3N0PVN5c3RlbS5nZXRQcm9wZXJ0eSgiaG9zdCIpOwogICAgICAgICAgICAgU3RyaW5nIHBvcnQ9U3lzdGVtLmdldFByb3BlcnR5KCJwb3J0Iik7CkBAIC02OSwzMCArNjksMzAgQEAKIAogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CiAgICAgICAgIGJvb2xlYW4gcmVzdWx0PWZhbHNlOwotICAgICAgICBTdHJpbmcgdGVzdExpbmUgPSBudWxsOyAgICAgICAgCisgICAgICAgIFN0cmluZyB0ZXN0TGluZSA9IG51bGw7CiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZihFWFBFQ1RFRF9SRVNQT05TRSkhPS0xKXsKICAgICAgICAgICAgICAgICByZXN1bHQ9dHJ1ZTsKICAgICAgICAgICAgICB0ZXN0TGluZSA9IGxpbmU7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0TGluZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgIH0gICAgICAgIAotICAgICAgICAgICAgICAgIAorCisgICAgICAgIH0KKwogICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHJlc3VsdCwgdHJ1ZSwiVW5leHBlY3RlZCBIVE1MIik7Ci0gICAgICAgICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KIAogICAgIH0KLSAgICAKKwogICAgIEBUZXN0KGdyb3VwcyA9eyAicHVsc2UifSApIC8vIHRlc3QgbWV0aG9kCiAgICAgcHVibGljIHZvaWQgZHVtbXlUZXN0KCl7CiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoZmFsc2UsIHRydWUsIkR1bW15IEZhaWx1cmUiKTsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgZWNobyhTdHJpbmcgbXNnKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvY29tbW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9jb21tb24ueG1sCmluZGV4IGE5ZWU1ZGUuLjdkNDYwMDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9jb21tb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9jb21tb24ueG1sCkBAIC0xNywyNCArMTcsMjQgQEAKIC0tPgogCiA8IS0tCi0gICAgVGhpcyBpcyB0aGUgdG9wIGxldmVsIGJ1aWxkIGZpbGUgdGhhdCBzaG91bGQgYmUgCi0gICAgaW1wb3J0ZWQgaW50byBhbGwgdGhlIGxlYWYgbGV2ZWwgYnVpbGQgZmlsZXMgCisgICAgVGhpcyBpcyB0aGUgdG9wIGxldmVsIGJ1aWxkIGZpbGUgdGhhdCBzaG91bGQgYmUKKyAgICBpbXBvcnRlZCBpbnRvIGFsbCB0aGUgbGVhZiBsZXZlbCBidWlsZCBmaWxlcwogLS0+CiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDwhLS0gVGFyZ2V0cyB0byBjbGVhbiBjbGFzcyBmaWxlcyBhbmQgamFycyBmaWxlcyAtLT4KLTwhLS0gCi1WYXJpYWJsZXMgdXNlZDogCi0gICAgJHtidWlsZC5jbGFzc2VzLmRpcn0gCis8IS0tCitWYXJpYWJsZXMgdXNlZDoKKyAgICAke2J1aWxkLmNsYXNzZXMuZGlyfQogICAgICR7YXNzZW1ibGUuZGlyfQogLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImNsZWFuLWNsYXNzZXMtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogQ2xlYW5pbmcgdGVzdCBzb3VyY2UgZmlsZXM6ICR7YnVpbGQuYmFzZS5kaXJ9IiAKKyAgICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBDbGVhbmluZyB0ZXN0IHNvdXJjZSBmaWxlczogJHtidWlsZC5iYXNlLmRpcn0iCiAgICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmJhc2UuZGlyfSIvPgogPC90YXJnZXQ+Ci0gICAgCisKIDx0YXJnZXQgbmFtZT0iY2xlYW4tamFycy1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgPGRlbGV0ZSBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogPC90YXJnZXQ+CkBAIC00Niw5ICs0Niw5IEBACiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDwhLS0gVGFyZ2V0IHRvIGNvbXBpbGUgdGhlIGphdmEgc291cmNlIGZpbGVzIC0tPgotPCEtLSAKLVZhcmlhYmxlcyB1c2VkOiAKLSAgICAke2J1aWxkLmNsYXNzZXMuZGlyfSAKKzwhLS0KK1ZhcmlhYmxlcyB1c2VkOgorICAgICR7YnVpbGQuY2xhc3Nlcy5kaXJ9CiAgICAgJHtzMWFzdGVzdC5jbGFzc3BhdGh9CiAgICAgJHtzcmN9CiAtLT4KQEAgLTkxLDcgKzkxLDcgQEAKIFZhcmlhYmxlcyBVc2VkOgogICAgICR7d2FyLmZpbGV9CiAgICAgJHtidWlsZC5jbGFzc2VzLmRpcn0KLSAgICAke2FwcG5hbWV9ICAgIAorICAgICR7YXBwbmFtZX0KICAgICAke2Fzc2VtYmxlLmRpcn0KICAgICAke3dlYi54bWx9CiAgICAgJHtiZWFucy54bWx9CkBAIC0xMTMsMTcgKzExMywxNyBAQAogCiA8dGFyZ2V0IG5hbWU9InB1Ymxpc2gtd2FyLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8bWtkaXIgZGlyPSIke2J1aWxkLndlYmFwcHMuZGlyfSIvPgotICA8Y29weSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIiAKLSAgICAgICAgdG9maWxlPSIke2J1aWxkLndlYmFwcHMuZGlyfS8ke2FwcG5hbWV9LndhciIgCisgIDxjb3B5IGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiCisgICAgICAgIHRvZmlsZT0iJHtidWlsZC53ZWJhcHBzLmRpcn0vJHthcHBuYW1lfS53YXIiCiAgICAgICAgIG92ZXJ3cml0ZT0idHJ1ZSIgLz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNsZWFuLXdlYmFwcHMtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQud2ViYXBwcy5kaXJ9IiBxdWlldD0idHJ1ZSIgLz4gIAorICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLndlYmFwcHMuZGlyfSIgcXVpZXQ9InRydWUiIC8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJjbGVhciI+Ci0gICAgPGRlbGV0ZSBmaWxlPSIke3dhci5maWxlfSIvPiAgCisgICAgPGRlbGV0ZSBmaWxlPSIke3dhci5maWxlfSIvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iY29weS10bGRzIiBpZj0idGxkcy1leGlzdCIgZGVwZW5kcz0iY2xlYXIsdGVzdC10bGRzLWV4aXN0Ij4KQEAgLTE1MiwxNyArMTUyLDE3IEBACiAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMiLz4KICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvbGliIi8+CiAgIDxta2RpciBkaXI9ImxpYiIvPgotICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC13ZWIueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXdlYi54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7c3VuLXdlYi54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHtzdW4td2ViLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3N1bi13ZWIueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtZWpiLWphci54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtZWpiLWphci54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9nbGFzc2Zpc2gtZWpiLWphci54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3N1bi1lamItamFyLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3N1bi1lamItamFyLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3N1bi1lamItamFyLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7d2VibG9naWMueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7d2VibG9naWMueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd2VibG9naWMueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbH0iIAorICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvbGliIiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgPGZpbGVzZXQgZGlyPSJsaWIiPgpAQCAtMTcwLDMyICsxNzAsMzIgQEAKICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLnppcCIvPgogICAgICAgPC9maWxlc2V0PgogICA8L2NvcHk+Ci0gIDxjb3B5IGZpbGU9IiR7d2Vic2VydmljZXMueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7d2Vic2VydmljZXMueG1sfSIKICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93ZWJzZXJ2aWNlcy54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke21hcHBpbmdmaWxlLmxvY2F0aW9ufS8ke21hcHBpbmdmaWxlLm5hbWV9IiAKKyAgPGNvcHkgZmlsZT0iJHttYXBwaW5nZmlsZS5sb2NhdGlvbn0vJHttYXBwaW5nZmlsZS5uYW1lfSIKICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvJHttYXBwaW5nZmlsZS5uYW1lfSIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7d3NkbGZpbGUubG9jYXRpb259LyR7d3NkbGZpbGUubmFtZX0iIAorICA8Y29weSBmaWxlPSIke3dzZGxmaWxlLmxvY2F0aW9ufS8ke3dzZGxmaWxlLm5hbWV9IgogICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dzZGwvJHt3c2RsZmlsZS5uYW1lfSIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7dGFnUGx1Z2lucy54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHt0YWdQbHVnaW5zLnhtbH0iCiAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvdGFnUGx1Z2lucy54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3dlYi54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHt3ZWIueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd2ViLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gICAgPGNvcHkgZmlsZT0iJHtwZXJzaXN0ZW5jZS54bWx9IiAKKyAgICA8Y29weSBmaWxlPSIke3BlcnNpc3RlbmNlLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvcGVyc2lzdGVuY2UueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgIDxjb3B5IGZpbGU9IiR7YmVhbnMueG1sfSIgCisgICA8Y29weSBmaWxlPSIke2JlYW5zLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2JlYW5zLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgIDxjb3B5IGZpbGU9IiR7Y29udGV4dC54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvTUVUQS1JTkYvY29udGV4dC54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSBmaWxlPSIke2NkaS1leHRlbnNpb24uc2VydmljZX0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvc2VydmljZXMvamFrYXJ0YS5lbnRlcnByaXNlLmluamVjdC5zcGkuRXh0ZW5zaW9uIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgICAgIAorCiAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9jbGFzc2VzIj4KICAgICAgIDxmaWxlc2V0IGRpcj0iJHt3YXIuY2xhc3Nlc30iPgogICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouY2xhc3MiLz4KQEAgLTI0MywxMCArMjQzLDEwIEBACiAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvc2VydmljZXMvamFrYXJ0YS5lbnRlcnByaXNlLmluamVjdC5zcGkuRXh0ZW5zaW9uIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvcGVyc2lzdGVuY2UueG1sIi8+CiAgICAgPC9maWxlc2V0PgotICA8L2phcj4gICAgICAgCisgIDwvamFyPgogICA8ZWNobyBtZXNzYWdlPSJjcmVhdGVkIHdhciBmaWxlICR7d2FyLmZpbGV9IiBsZXZlbD0idmVyYm9zZSIvPgotICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgPGVjaG8gbWVzc2FnZT0ibXkgd2ViY2xpZW50IHdhciBjbGFzc2VzIGFyZToke3dlYmNsaWVudC53YXIuY2xhc3Nlc30iIAorICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICA8ZWNobyBtZXNzYWdlPSJteSB3ZWJjbGllbnQgd2FyIGNsYXNzZXMgYXJlOiR7d2ViY2xpZW50Lndhci5jbGFzc2VzfSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiA8L3RhcmdldD4KIApAQCAtMjY0LDM5ICsyNjQsMzkgQEAKIFZhcmlhYmxlcyBVc2VkOgogICAgICR7ZWpiLmphcn0KICAgICAke2J1aWxkLmNsYXNzZXMuZGlyfQotICAgICR7ZWpiLWphci54bWx9ICAgIAorICAgICR7ZWpiLWphci54bWx9CiAgICAgJHtiZWFucy54bWx9Ci0gICAgJHtwZXJzaXN0ZW5jZS1vcm0ueG1sfSAgICAKLSAgICAke3BlcnNpc3RlbmNlLnhtbH0gICAgCi0gICAgJHtzdW4tZWpiLWphci54bWx9ICAgIAotICAgICR7Z2xhc3NmaXNoLWVqYi1qYXIueG1sfSAgICAKLSAgICAke3N1bi1jbXAtbWFwcGluZ3MueG1sfSAgICAKLSAgICAke21ldGFpbmYuZGlyfSAgICAKKyAgICAke3BlcnNpc3RlbmNlLW9ybS54bWx9CisgICAgJHtwZXJzaXN0ZW5jZS54bWx9CisgICAgJHtzdW4tZWpiLWphci54bWx9CisgICAgJHtnbGFzc2Zpc2gtZWpiLWphci54bWx9CisgICAgJHtzdW4tY21wLW1hcHBpbmdzLnhtbH0KKyAgICAke21ldGFpbmYuZGlyfQogICAgICR7ZWpiamFyLmZpbGVzfQogICAgICR7ZGJzY2hlbWF9CiAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0icGFja2FnZS1lamJqYXItY29tbW9uIj4KICAgPGRlbGV0ZSBmaWxlPSIke2VqYi5qYXJ9Ii8+Ci0gIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IEdlbmVyYXRpbmcgZWpiLWphciBpbnNpZGUgYnVpbGQgZGlyZWN0b3J5IiAKKyAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogR2VuZXJhdGluZyBlamItamFyIGluc2lkZSBidWlsZCBkaXJlY3RvcnkiCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgotICA8Y29weSBmaWxlPSIke2VqYi1qYXIueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7ZWpiLWphci54bWx9IgogICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZWpiLWphci54bWwiCiAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7cGVyc2lzdGVuY2UueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7cGVyc2lzdGVuY2UueG1sfSIKICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3BlcnNpc3RlbmNlLnhtbCIKICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHtwZXJzaXN0ZW5jZS1vcm0ueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7cGVyc2lzdGVuY2Utb3JtLnhtbH0iCiAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9wZXJzaXN0ZW5jZS1vcm0ueG1sIgogICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3dlYnNlcnZpY2VzLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3dlYnNlcnZpY2VzLnhtbH0iCiAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93ZWJzZXJ2aWNlcy54bWwiCiAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7c3VuLWVqYi1qYXIueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7c3VuLWVqYi1qYXIueG1sfSIKICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1lamItamFyLnhtbCIKICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtZWpiLWphci54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtZWpiLWphci54bWx9IgogICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLWVqYi1qYXIueG1sIgogICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sfSIKQEAgLTMxMiw3ICszMTIsNyBAQAogICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYmF0Y2gueG1sIgogICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYmF0Y2gtam9icyIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KLSAgCTxmaWxlc2V0IGRpcj0iJHtiYXRjaC5qb2JzLmRpcn0iLz4KKyAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXRjaC5qb2JzLmRpcn0iLz4KICAgPC9jb3B5PgogICA8Y29weSBmaWxlPSIke2Ric2NoZW1hfSIgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgPGphciBqYXJmaWxlPSIke2VqYi5qYXJ9IiBiYXNlZGlyPSIke2VqYmphci5maWxlc30iIHVwZGF0ZT0idHJ1ZSIKQEAgLTMzMCw0NiArMzMwLDQ2IEBACiAgICAgICA8aW5jbHVkZSBuYW1lPSJiYXRjaC1qb2JzLyoqLyoueG1sIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSJiYXRjaC54bWwiLz4KICAgICA8L21ldGFpbmY+Ci0gIDwvamFyPiAgICAgICAKKyAgPC9qYXI+CiAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgIDxkZWxldGUgZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vKi5kYnNjaGVtYSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci08L3RhcmdldD4gIAorPC90YXJnZXQ+CiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDwhLS0gVGFyZ2V0IHRvIHBhY2thZ2UgdGhlIGFwcGNsaWVudCBhcHBsaWNhdGlvbiB0byBqYXIgZmlsZSAtLT4KIDwhLS0KIFZhcmlhYmxlcyBVc2VkOgogICAgICR7YXBwY2xpZW50Lmphcn0KLSAgICAke2FwcGNsaWVudGphci5jbGFzc2VzfSAgICAKLSAgICAke2FwcGNsaWVudGphci5maWxlc30gICAgCisgICAgJHthcHBjbGllbnRqYXIuY2xhc3Nlc30KKyAgICAke2FwcGNsaWVudGphci5maWxlc30KICAgICAke2J1aWxkLmNsYXNzZXMuZGlyfQotICAgICR7YXBwbGljYXRpb24tY2xpZW50LnhtbH0gICAgCi0gICAgJHtnbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbH0gICAgCi0gICAgJHtzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbH0gICAgCisgICAgJHthcHBsaWNhdGlvbi1jbGllbnQueG1sfQorICAgICR7Z2xhc3NmaXNoLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9CisgICAgJHtzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbH0KIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJwYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iPgogICA8ZGVsZXRlIGZpbGU9IiR7YXBwY2xpZW50Lmphcn0iLz4KLSAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogR2VuZXJhdGluZyBhcHBjbGllbnQtamFyIGluc2lkZSBidWlsZCBkaXJlY3RvcnkiIAorICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBHZW5lcmF0aW5nIGFwcGNsaWVudC1qYXIgaW5zaWRlIGJ1aWxkIGRpcmVjdG9yeSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24tY2xpZW50LnhtbH0iCi0gICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCisgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24tY2xpZW50LnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1hcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIgCi0gICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IiR7YXBwY2xpZW50amFyLmNsYXNzZXN9IiAKLSAgICBtYW5pZmVzdD0iLi9jbGllbnQvTUFOSUZFU1QuTUYiPiAgICAgICAgIAorICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIKKyAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iJHthcHBjbGllbnRqYXIuY2xhc3Nlc30iCisgICAgbWFuaWZlc3Q9Ii4vY2xpZW50L01BTklGRVNULk1GIj4KICAgICA8bWV0YWluZiBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIj4KICAgICAgIDxpbmNsdWRlIG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9ImdsYXNzZmlzaC1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgIDwvbWV0YWluZj4KLSAgPC9qYXI+ICAgICAgIAotPC90YXJnZXQ+IAorICA8L2phcj4KKzwvdGFyZ2V0PgogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldCB0byBjcmVhdGUgdGhlIGVqYiBhcHBsaWNhdGlvbiBqYXIgZmlsZSAtLT4KQEAgLTM4MCw3ICszODAsNyBAQAogICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgIDxwYXJhbSBuYW1lPSJlamIuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIvPgogICA8L2FudGNhbGw+Ci08L3RhcmdldD4gICAgIAorPC90YXJnZXQ+CiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDwhLS0gVGFyZ2V0IHRvIGNyZWF0ZSB0aGUgYXBwY2xpZW50IGphciBmaWxlIC0tPgpAQCAtMzg4LDkgKzM4OCw5IEBACiA8dGFyZ2V0IG5hbWU9ImFwcGNsaWVudC1qYXItY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+Ci0gICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgCisgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIKICAgICAgIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuamFyIiAKKyAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIKICAgICAgIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiAgIDwvYW50Y2FsbD4KIDwvdGFyZ2V0PgpAQCAtNDE5LDIyICs0MTksMjIgQEAKIDx0YXJnZXQgbmFtZT0iYnVpbGQtZWFyLWNvbW1vbiIgZGVwZW5kcz0iZml4RmlsZXMscGFja2FnZS1wZXJzaXN0ZW5jZS1jb21tb24sZWpiLWphci1jb21tb24sYXBwY2xpZW50LWphci1jb21tb24sd2ViY2xpZW50LXdhci1jb21tb24iPgogICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gICAKLSAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAgCWZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgIAlmYWlsb25lcnJvcj0iZmFsc2UiLz4gCisgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CisgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLWVhci54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiICBmaWx0ZXJpbmc9InRydWUiLz4KLSAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPiAKKyAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgogICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgogICAgIDwvZmlsZXNldD4KICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KLQk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci0JPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgorICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIvPgogICAgIDwvZmlsZXNldD4KICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9ImxpYi9yZXBvcnRlci5qYXIiLz4KLSAgPC9qYXI+ICAgICAgICAKKyAgPC9qYXI+CiA8L3RhcmdldD4KIAogCkBAIC00NDQsMjEgKzQ0NCwyMSBAQAogPHRhcmdldCBuYW1lPSJlYXItY29tbW9uIiBkZXBlbmRzPSJmaXhGaWxlcyxpbml0LWNvbW1vbiI+CiAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgICAKLSAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAgCWZhaWxvbmVycm9yPSJmYWxzZSIvPiAKKyAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMtZWFyLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIgIGZpbHRlcmluZz0idHJ1ZSIvPgotICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgCisgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIgogICAgIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KICAgICA8L2ZpbGVzZXQ+CiAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+Ci0JPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgorICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiLz4KICAgICA8L2ZpbGVzZXQ+CiAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0iIGluY2x1ZGVzPSJsaWIvcmVwb3J0ZXIuamFyIi8+Ci0gIDwvZWFyPiAgICAgICAgCisgIDwvZWFyPgogPC90YXJnZXQ+CiAKIApAQCAtNDg4LDE3ICs0ODgsMTcgQEAKICAgPGVjaG8gbWVzc2FnZT0iT3BlcmFuZCAke29wZXJhbmQucHJvcHN9IiAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGVjaG8gbWVzc2FnZT0iYXNhZG1pbiAke2FkbWluLmNvbW1hbmR9ICR7YXMucHJvcHN9ICR7b3BlcmFuZC5wcm9wc30iLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0idHJ1ZSI+Ci0gICAgICAgIDxhcmcgbGluZT0iJHthZG1pbi5jb21tYW5kfSAke2FzLnByb3BzfSAke29wZXJhbmQucHJvcHN9IiAvPiAgICAgICAgCisgICAgICAgIDxhcmcgbGluZT0iJHthZG1pbi5jb21tYW5kfSAke2FzLnByb3BzfSAke29wZXJhbmQucHJvcHN9IiAvPgogICAgIDwvZXhlYz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KLSAgPGVjaG8gbWVzc2FnZT0iRG9pbmcgYWRtaW4gdGFzayAke2FkbWluLmNvbW1hbmR9IChpZ25vcmUgZmFpbHVyZXMpIiAKKyAgPGVjaG8gbWVzc2FnZT0iRG9pbmcgYWRtaW4gdGFzayAke2FkbWluLmNvbW1hbmR9IChpZ25vcmUgZmFpbHVyZXMpIgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGVjaG8gbWVzc2FnZT0iT3BlcmFuZCAke29wZXJhbmQucHJvcHN9IiAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGVjaG8gbWVzc2FnZT0iYXNhZG1pbiAke2FkbWluLmNvbW1hbmR9ICR7YXMucHJvcHN9ICR7b3BlcmFuZC5wcm9wc30iLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgotICAgICAgICA8YXJnIGxpbmU9IiR7YWRtaW4uY29tbWFuZH0gJHthcy5wcm9wc30gJHtvcGVyYW5kLnByb3BzfSIgLz4gICAgICAgIAorICAgICAgICA8YXJnIGxpbmU9IiR7YWRtaW4uY29tbWFuZH0gJHthcy5wcm9wc30gJHtvcGVyYW5kLnByb3BzfSIgLz4KICAgICA8L2V4ZWM+CiA8L3RhcmdldD4KIApAQCAtNTA2LDcgKzUwNiw3IEBACiA8IS0tIFRhcmdldCB0byBleGVjdXRlIGEgYmF0Y2hmaWxlIG9mIGFzYWRtaW4gY29tbWFuZHMgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+Ci0gIDxlY2hvIG1lc3NhZ2U9IkRvaW5nIGFkbWluIGJhdGNoIHRhc2sgJHthZG1pbi5jb21tYW5kfSAtLWZpbGUiIAorICA8ZWNobyBtZXNzYWdlPSJEb2luZyBhZG1pbiBiYXRjaCB0YXNrICR7YWRtaW4uY29tbWFuZH0gLS1maWxlIgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ1c2VyLnBhc3N3b3JkLmZpbGUiIHZhbHVlPSJhc2FkbWludXNlcnBhc3N3b3JkLnR4dCIvPgogPGVjaG8gZmlsZT0iJHt1c2VyLnBhc3N3b3JkLmZpbGV9IiBhcHBlbmQ9ImZhbHNlIj4KQEAgLTUxNywxMSArNTE3LDExIEBACiA8L2VjaG8+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJ0cnVlIj4KICAgICAgPGFyZyBsaW5lPSItLXVzZXIgJHthZG1pbi51c2VyfSAtLXBhc3N3b3JkZmlsZSAke3VzZXIucGFzc3dvcmQuZmlsZX0gLS1ob3N0ICR7YWRtaW4uaG9zdH0gLS1wb3J0ICR7YWRtaW4ucG9ydH0gLS1lY2hvPXRydWUgLS10ZXJzZT10cnVlIi8+Ci0gICAgIDxhcmcgbGluZT0ibXVsdGltb2RlIC0tZmlsZSAke2FzYWRtaW4uZmlsZX0iIC8+ICAgICAgICAKKyAgICAgPGFyZyBsaW5lPSJtdWx0aW1vZGUgLS1maWxlICR7YXNhZG1pbi5maWxlfSIgLz4KICAgPC9leGVjPgogICA8ZGVsZXRlIGZpbGU9IiR7dXNlci5wYXNzd29yZC5maWxlfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiA8L3RhcmdldD4KLSAKKwogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CkBAIC01NDUsNyArNTQ1LDcgQEAKICAgPC9leGVjPgogICA8ZGVsZXRlIGZpbGU9IiR7dXNlci5wYXNzd29yZC5maWxlfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiA8L3RhcmdldD4KLSAgICAgCisKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDwhLS0gVGFyZ2V0IHRvIGRlbGV0ZSB0aGUgdXNlciBpbiBmaWxlIHJlYWxtIHRoZSBBcHBTZXJ2ICAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KQEAgLTU2MSw3ICs1NjEsNyBAQAogPC90YXJnZXQ+CiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gSjJFRSBDb25uZWN0b3IgcmVsYXRlZCB0YXJnZXRzIAkJCSAgICAgCSAgLS0+Cis8IS0tIEoyRUUgQ29ubmVjdG9yIHJlbGF0ZWQgdGFyZ2V0cyAgICAgICAgICAgICAgICAgICAgICAgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogCiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1jb25uZWN0b3ItY29ubnBvb2wtY29tbW9uIgpAQCAtNjQ4LDcgKzY0OCw3IEBACiA8IS0tIFRhcmdldCB0byBjcmVhdGUgSkRCQyBjb25uZWN0aW9uIHBvb2wgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLTxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgamRiYyBjb25uZWN0aW9uIHBvb2wgJHtqZGJjLmNvbnBvb2wubmFtZX0iIAorPGVjaG8gbWVzc2FnZT0iY3JlYXRlZCBqZGJjIGNvbm5lY3Rpb24gcG9vbCAke2pkYmMuY29ucG9vbC5uYW1lfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYS1wYXJhbXMiIHZhbHVlPSIiLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgpAQCAtNjY0LDcgKzY2NCw3IEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJjcmVhdGUtamRiYy1kcml2ZXItY29ubnBvb2wtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci08ZWNobyBtZXNzYWdlPSJjcmVhdGVkIGpkYmMgY29ubmVjdGlvbiBwb29sICR7amRiYy5jb25wb29sLm5hbWV9IiAKKzxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgamRiYyBjb25uZWN0aW9uIHBvb2wgJHtqZGJjLmNvbnBvb2wubmFtZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmEtcGFyYW1zIiB2YWx1ZT0iIi8+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KQEAgLTcwMSw3ICs3MDEsNyBAQAogICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKLQkgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke2pkYmMuY29ucG9vbC5uYW1lfS5wcm9wZXJ0eS5VUkw9JHtkYi51cmx9O3VzZXI9JHtkYi51c2VyfTtwYXNzd29yZD0ke2RiLnB3ZH0iLz4KKyAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke2pkYmMuY29ucG9vbC5uYW1lfS5wcm9wZXJ0eS5VUkw9JHtkYi51cmx9O3VzZXI9JHtkYi51c2VyfTtwYXNzd29yZD0ke2RiLnB3ZH0iLz4KICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+CiAKQEAgLTc1Miw3ICs3NTIsNyBAQAogICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKLQkgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke2pkYmMuY29ucG9vbC5uYW1lfS5wcm9wZXJ0eS5VUkw9JHtkYi51cmx9O3VzZXI9JHtkYi51c2VyfTtwYXNzd29yZD0ke2RiLnB3ZH0iLz4KKyAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke2pkYmMuY29ucG9vbC5uYW1lfS5wcm9wZXJ0eS5VUkw9JHtkYi51cmx9O3VzZXI9JHtkYi51c2VyfTtwYXNzd29yZD0ke2RiLnB3ZH0iLz4KICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+CiAKQEAgLTc2OCwxNCArNzY4LDE0IEBACiAgICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2pkYmMuY29ucG9vbC5uYW1lfSIvPgogICAgIDwvZXhlYz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbWQgZXhlY3V0ZWQgZm9yICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+ICAKKyAgICA8ZWNobyBtZXNzYWdlPSJjbWQgZXhlY3V0ZWQgZm9yICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiA8L3RhcmdldD4KIAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLSBUYXJnZXQgdG8gY3JlYXRlIEpEQkMgcmVzb3VyY2UgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLTxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIGpkYmMgcmVzb3VyY2UgcG9vbCAke2pkYmMucmVzb3VyY2UubmFtZX0iIAorPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgamRiYyByZXNvdXJjZSBwb29sICR7amRiYy5yZXNvdXJjZS5uYW1lfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8ZWNobyBtZXNzYWdlPSJhc2FkbWluIGNyZWF0ZS1qZGJjLXJlc291cmNlICR7YXMucHJvcHN9IC0tY29ubmVjdGlvbnBvb2xpZCAke2pkYmMuY29ucG9vbC5uYW1lfSAtLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSAke2pkYmMucmVzb3VyY2UubmFtZX0iLz4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KQEAgLTgyNyw3ICs4MjcsNyBAQAogPCEtLSBUYXJnZXQgdG8gY3JlYXRlIHBlcnNpc3RlbmNlIHJlc291cmNlICAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXBlcnNpc3RlbmNlLXJlc291cmNlLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgcG0gcmVzb3VyY2UgYXQgJHtwbS5yZXNvdXJjZS5uYW1lfSIgCis8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBwbSByZXNvdXJjZSBhdCAke3BtLnJlc291cmNlLm5hbWV9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgPGVjaG8gbWVzc2FnZT0iYXNhZG1pbiBjcmVhdGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UgJHthcy5wcm9wc30gLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gJHtwbS5yZXNvdXJjZS5uYW1lfSIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CkBAIC04MzcsNyArODM3LDcgQEAKICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7cG0ucmVzb3VyY2UubmFtZX0iLz4KICAgICA8L2V4ZWM+Ci0gICAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRlZCAke3BtLnJlc291cmNlLm5hbWV9IC0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+IAorICAgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0ZWQgJHtwbS5yZXNvdXJjZS5uYW1lfSAtLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgpAQCAtODU2LDE0ICs4NTYsMTQgQEAKIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXBlcnNpc3RlbmNlLXJlc291cmNlLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIKLSAgICAgIHZhbHVlPSJkZWxldGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UgCisgICAgICB2YWx1ZT0iZGVsZXRlLXBlcnNpc3RlbmNlLXJlc291cmNlCiAgICAgICAgIC0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IiAvPgogICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtwbS5yZXNvdXJjZS5uYW1lfSIgLz4KICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iZXhlY3V0ZS1zcWwtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci08ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgc3FsIHN0YXRlbWVudCBhdCAke2Jhc2VkaXJ9IGZyb20gJHtzcWwuZmlsZX0iIAorPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIHNxbCBzdGF0ZW1lbnQgYXQgJHtiYXNlZGlyfSBmcm9tICR7c3FsLmZpbGV9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxzcWwKICAgICBkcml2ZXI9IiR7ZGIuZHJpdmVyfSIKQEAgLTg3OCw3ICs4NzgsNyBAQAogCiAKIDx0YXJnZXQgbmFtZT0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIHNxbCBzdGF0ZW1lbnQgYXQgJHtiYXNlZGlyfSBmcm9tICR7c3FsLmZpbGV9IiAKKzxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBzcWwgc3RhdGVtZW50IGF0ICR7YmFzZWRpcn0gZnJvbSAke3NxbC5maWxlfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8c3FsCiAgICAgZHJpdmVyPSIke2RiLmRyaXZlcn0iCkBAIC04OTQsOCArODk0LDggQEAKIAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLSBUYXJnZXQgdG8gY3JlYXRlL2RlbGV0ZSBtYWlsIHJlc291cmNlcyAgLS0+Ci08IS0tIAotICAgIFByb3BlcnRpZXMgcmVxdWlyZWQ6IAorPCEtLQorICAgIFByb3BlcnRpZXMgcmVxdWlyZWQ6CiAgICAgbWFpbGhvc3QKICAgICBmcm9tYWRkcmVzcwogICAgIGRlYnVnCkBAIC05MzYsNyArOTM2LDcgQEAKIDwhLS0gVGFyZ2V0IHRvIGNyZWF0ZSBkYXRhYmFzZSB0YWJsZSB0aHJvdWdoIFNRTCBmaWxlICAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXNxbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLTxlY2hvIG1lc3NhZ2U9ImNyZWF0aW5nIHRhYmxlcyBmcm9tICR7YmFzZWRpcn0vc3FsLyR7ZGIuY3JlYXRlfSIgCis8ZWNobyBtZXNzYWdlPSJjcmVhdGluZyB0YWJsZXMgZnJvbSAke2Jhc2VkaXJ9L3NxbC8ke2RiLmNyZWF0ZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPHNxbAogICAgIGRyaXZlcj0iJHtkYi5kcml2ZXJ9IgpAQCAtOTU1LDcgKzk1NSw3IEBACiA8IS0tIFRhcmdldCB0byBkZWxldGUgZGF0YWJhc2UgdGFibGUgdGhyb3VnaCBTUUwgZmlsZSAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1zcWwtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci08ZWNobyBtZXNzYWdlPSJkcm9wcGluZyB0YWJsZXMgZnJvbSAke2Jhc2VkaXJ9L3NxbC8ke2RiLmRyb3B9IiAKKzxlY2hvIG1lc3NhZ2U9ImRyb3BwaW5nIHRhYmxlcyBmcm9tICR7YmFzZWRpcn0vc3FsLyR7ZGIuZHJvcH0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPHNxbAogICAgIGRyaXZlcj0iJHtkYi5kcml2ZXJ9IgpAQCAtOTc0LDExICs5NzQsMTEgQEAKIDwhLS0gVGFnZXQgdG8gY3JlYXRlIEpNUyBDb25uZWN0aW9uICAgICAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qbXMtY29ubmVjdGlvbi1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgSk1TIGNvbm5lY3Rpb24gZmFjdG9yeSB3aXRoIG5hbWUgJHtqbXMuZmFjdG9yeS5uYW1lfSIgCisgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIEpNUyBjb25uZWN0aW9uIGZhY3Rvcnkgd2l0aCBuYW1lICR7am1zLmZhY3RvcnkubmFtZX0iCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KICAgICA8YXJnIGxpbmU9ImNyZWF0ZS1qbXMtcmVzb3VyY2UgIi8+Ci0gICAgPGFyZyBsaW5lPSItLXJlc3R5cGUgJHtqbXMuZmFjdG9yeS50eXBlfSIvPiAgICAKKyAgICA8YXJnIGxpbmU9Ii0tcmVzdHlwZSAke2ptcy5mYWN0b3J5LnR5cGV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7am1zLmZhY3RvcnkubmFtZX0iIC8+CkBAIC05ODksMjMgKzk4OSwyMyBAQAogPCEtLSBUYWdldCB0byBkZWxldGUgSk1TIENvbm5lY3Rpb24gICAgICAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0iZGVsZXRlLWptcy1jb25uZWN0aW9uLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICA8ZWNobyBtZXNzYWdlPSJEZWxldGUgSk1TIGNvbm5lY3Rpb24gZmFjdG9yeSB3aXRoIG5hbWUgJHtqbXMuZmFjdG9yeS5uYW1lfSIgCisgIDxlY2hvIG1lc3NhZ2U9IkRlbGV0ZSBKTVMgY29ubmVjdGlvbiBmYWN0b3J5IHdpdGggbmFtZSAke2ptcy5mYWN0b3J5Lm5hbWV9IgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+Ci0gICAgPGFyZyBsaW5lPSJkZWxldGUtam1zLXJlc291cmNlICIvPiAgICAKKyAgICA8YXJnIGxpbmU9ImRlbGV0ZS1qbXMtcmVzb3VyY2UgIi8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4gICAgCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHtqbXMuZmFjdG9yeS5uYW1lfSIvPgogICA8L2V4ZWM+CiA8L3RhcmdldD4KIAogPCEtLSBKTVM6IGNyZWF0ZS9kZWxldGUgRGVzdGluYXRpb24gUmVzb3VyY2UgVGFyZ2V0cyAtLT4KIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWptcy1yZXNvdXJjZS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgSk1TIHJlc291cmNlIHdpdGggbmFtZSAke2ptcy5yZXNvdXJjZS5uYW1lfSIgCisgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIEpNUyByZXNvdXJjZSB3aXRoIG5hbWUgJHtqbXMucmVzb3VyY2UubmFtZX0iCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogCiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgotICAgIDxhcmcgbGluZT0iY3JlYXRlLWptc2Rlc3QgLS1kZXN0dHlwZSAke2Rlc3QudHlwZX0gIi8+ICAgIAorICAgIDxhcmcgbGluZT0iY3JlYXRlLWptc2Rlc3QgLS1kZXN0dHlwZSAke2Rlc3QudHlwZX0gIi8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgIDxhcmcgbGluZT0iJHtkZXN0Lm5hbWV9Ii8+CiAgIDwvZXhlYz4KQEAgLTEwMTQsMjQgKzEwMTQsMjQgQEAKICAgICA8YXJnIGxpbmU9ImNyZWF0ZS1qbXMtcmVzb3VyY2UgIi8+CiAgICAgPGFyZyBsaW5lPSItLXJlc3R5cGUgJHtqbXMucmVzb3VyY2UudHlwZX0iLz4KICAgICA8YXJnIGxpbmU9Ii0tcHJvcGVydHkgaW1xRGVzdGluYXRpb25OYW1lPSR7ZGVzdC5uYW1lfSIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4gICAgCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICA8YXJnIGxpbmU9IiR7am1zLnJlc291cmNlLm5hbWV9Ii8+CiAgIDwvZXhlYz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1qbXMtcmVzb3VyY2UtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gIDxlY2hvIG1lc3NhZ2U9IkRlbGV0ZSBKTVMgcmVzb3VyY2Ugd2l0aCBuYW1lICR7am1zLnJlc291cmNlLm5hbWV9IiAKKyAgPGVjaG8gbWVzc2FnZT0iRGVsZXRlIEpNUyByZXNvdXJjZSB3aXRoIG5hbWUgJHtqbXMucmVzb3VyY2UubmFtZX0iCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogCiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgogICAgIDxhcmcgbGluZT0iZGVsZXRlLWptcy1yZXNvdXJjZSAiLz4KLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+ICAgIAorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9ICR7am1zLnJlc291cmNlLm5hbWV9Ii8+CiAgIDwvZXhlYz4KIAogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KLSAgICA8YXJnIGxpbmU9ImRlbGV0ZS1qbXNkZXN0IC0tZGVzdHR5cGUgJHtkZXN0LnR5cGV9ICIvPiAgICAKKyAgICA8YXJnIGxpbmU9ImRlbGV0ZS1qbXNkZXN0IC0tZGVzdHR5cGUgJHtkZXN0LnR5cGV9ICIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30gJHtkZXN0Lm5hbWV9Ii8+CiAgIDwvZXhlYz4KIDwvdGFyZ2V0PgpAQCAtMTA3NSwyMCArMTA3NSwyMCBAQAogPHRhcmdldCBuYW1lPSJkZXBsb3ktY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uLXBlIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uLWVlIi8+Ci08L3RhcmdldD4gICAgICAgCis8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJkZXBsb3ktdmVyaWZ5LWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXZlcmlmeS1jb21tb24tcGUiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS12ZXJpZnktY29tbW9uLWVlIi8+Ci08L3RhcmdldD4gICAgICAgCis8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJkZXBsb3ktY29tbW9uLXBlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgdW5sZXNzPSJlZSI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3llZC5hcHAiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiLz4KICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYS1wYXJhbXMiIHZhbHVlPSIiLz4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICA8YXJnIGxpbmU9ImRlcGxveSIvPgotICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4gICAgCi0gICAgPGFyZyBsaW5lPSIke2V4dHJhLXBhcmFtc30iLz4gICAgCisgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgorICAgIDxhcmcgbGluZT0iJHtleHRyYS1wYXJhbXN9Ii8+CiAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iLS1yZXRyaWV2ZSAke2Fzc2VtYmxlLmRpcn0iLz4KIDwhLS0gZGVwbG95ZWQuYXBwIGRlZmF1bHRzIHRvICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciBkZWZpbmVkIGluIHByb3BlcnRpZXMueG1sLS0+CkBAIC0xMDk3LDcgKzEwOTcsNyBAQAogICA8ZWNobyBtZXNzYWdlPSJEZXBsb3ltZW50IG9uIHRhcmdldCBzZXJ2ZXIgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gc3VjY2Vzc2Z1bCIvPgogICAgPC90YXJnZXQ+CiAKLTx0YXJnZXQgbmFtZT0iZGVwbG95LWNvbW1vbi1lZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJlZSI+ICAgICAgCis8dGFyZ2V0IG5hbWU9ImRlcGxveS1jb21tb24tZWUiIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0iZWUiPgogICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgaW4gRUUuLi4iLz4KICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveWVkLmFwcCIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgpAQCAtMTExMSw3ICsxMTExLDcgQEAKICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95bWVudCBvbiB0YXJnZXQgc2VydmVyICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IHN1Y2Nlc3NmdWwiLz4KIDwvdGFyZ2V0PgogCi08dGFyZ2V0IG5hbWU9ImRlcGxveS1jb21tb24tbGlicmFyaWVzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+ICAgICAgCis8dGFyZ2V0IG5hbWU9ImRlcGxveS1jb21tb24tbGlicmFyaWVzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyB3aXRoIGxpYnJhcmllcy4uLiIvPgogICA8cHJvcGVydHkgbmFtZT0iZGVwbG95ZWQuYXBwIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIi8+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CkBAIC0xMTYzLDkgKzExNjMsOSBAQAogICAgIDxhcmcgbGluZT0iLS1wcmVjb21waWxlanNwPSR7cHJlY29tcGlsZWpzcH0iLz4KICAgICA8YXJnIGxpbmU9Ii0tdXBsb2FkIHRydWUiLz4KICAgICA8YXJnIGxpbmU9Ii0tcmV0cmlldmUgJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgIDwvZXhlYz4KLTwvdGFyZ2V0PiAgICAKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImRlcGxveS13YXItbmFtZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHt3YXJuYW1lfSBmcm9tICR7YmFzZWRpcn0uIgpAQCAtMTE5MCw3ICsxMTkwLDcgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImRlcGxveS13YXItY29tbW9ucGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIiB1bmxlc3M9ImVlIj4KLSAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIgZnJvbSAke2Jhc2VkaXJ9LiIgCisgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIGZyb20gJHtiYXNlZGlyfS4iCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8cHJvcGVydHkgbmFtZT0icHJlY29tcGlsZWpzcCIgdmFsdWU9InRydWUiLz4KICAgPHByb3BlcnR5IG5hbWU9ImZvcmNlIiB2YWx1ZT0iZmFsc2UiLz4KQEAgLTEyMDEsMTAgKzEyMDEsMTAgQEAKICAgICA8YXJnIGxpbmU9Ii0tcHJlY29tcGlsZWpzcD0ke3ByZWNvbXBpbGVqc3B9Ii8+CiAgICAgPGFyZyBsaW5lPSItLWZvcmNlPSR7Zm9yY2V9Ii8+CiAgICAgPGFyZyBsaW5lPSItLXVwbG9hZD10cnVlIi8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CiAgIDwvZXhlYz4KLTwvdGFyZ2V0PiAKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImRlcGxveS13YXItbGlicmFyaWVzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgdW5sZXNzPSJlZSI+CiAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIGZyb20gJHtiYXNlZGlyfS4iCkBAIC0xMjUzLDcgKzEyNTMsNyBAQAogICAgIDxhcmcgbGluZT0iLS1wcmVjb21waWxlanNwPSR7cHJlY29tcGlsZWpzcH0iLz4KICAgICA8YXJnIGxpbmU9Ii0tZm9yY2U9JHtmb3JjZX0iLz4KICAgICA8YXJnIGxpbmU9Ii0tdXBsb2FkPXRydWUiLz4KLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KICAgPC9leGVjPgogPC90YXJnZXQ+CkBAIC0xMzAwLDEwICsxMzAwLDEwIEBACiAgICAgPGFyZyBsaW5lPSJkZXBsb3kiLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgPGFyZyBsaW5lPSItLXVwbG9hZD10cnVlIi8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIi8+CiAgIDwvZXhlYz4KLTwvdGFyZ2V0PiAKKzwvdGFyZ2V0PgogCiA8IS0tIGRlcGxveSB0aGUgc3RhbmRhbG9uZSBqYXIgaW4gQXBwU2VydiAgLS0+CiA8dGFyZ2V0IG5hbWU9ImRlcGxveS1jbGllbnQtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC0xMzExLDExICsxMzExLDExIEBACiAgICAgPGFyZyBsaW5lPSJkZXBsb3kiLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgPGFyZyBsaW5lPSItLXVwbG9hZD10cnVlIi8+Ci0gICAgPGFyZyBsaW5lPSItLXJldHJpZXZlICR7YXNzZW1ibGUuZGlyfSIvPiAgICAKLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgIDxhcmcgbGluZT0iLS1yZXRyaWV2ZSAke2Fzc2VtYmxlLmRpcn0iLz4KKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiAgIDwvZXhlYz4KLTwvdGFyZ2V0PiAKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LXdhci1uYW1lIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3llZGFwcC5uYW1lIiB2YWx1ZT0iJHt3YXJuYW1lfSIvPgpAQCAtMTMzNywyNyArMTMzNywyNyBAQAogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgIDxhcmcgbGluZT0idW5kZXBsb3kiLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+Ci08IS0tICAgIAotPGFyZyBsaW5lPXR5cGUgJHthcHB0eXBlfS8+IAorPCEtLQorPGFyZyBsaW5lPXR5cGUgJHthcHB0eXBlfS8+CiAtLT4KLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7ZXh0cmEtcGFyYW1zfSIvPgogPCEtLSBkZXBsb3llZGFwcC5uYW1lIGRlZmF1bHRzIHRvIHthcHBuYW1lfUFwcC5kZWNsYXJlZCBpbiBwcm9wZXJ0aWVzLnhtbC0tPgotICAgIDxhcmcgbGluZT0iJHtkZXBsb3llZGFwcC5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9IiR7ZGVwbG95ZWRhcHAubmFtZX0iLz4KICAgPC9leGVjPgogPC90YXJnZXQ+CiAKIDwhLS0gIHVuZGVwbG95IHRoZSBzdGFuZGFsb25lIHdhciBpbiBBcHBTZXJ2ICAtLT4KIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktd2FyLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgIDxlY2hvIG1lc3NhZ2U9IlVuZGVwbG95aW5nIHdhcmZpbGUgJHthcHBuYW1lfS13ZWIgZnJvbSAKKyAgICA8ZWNobyBtZXNzYWdlPSJVbmRlcGxveWluZyB3YXJmaWxlICR7YXBwbmFtZX0td2ViIGZyb20KICAgICAgICAgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciBmcm9tICR7YmFzZWRpcn0uIiBsZXZlbD0idmVyYm9zZSIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgIDxhcmcgbGluZT0idW5kZXBsb3kiLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FwcG5hbWV9LXdlYiIvPgogICA8L2V4ZWM+Ci08L3RhcmdldD4gCis8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJ1bmRlcGxveS13YXItaW5zdGFuY2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8ZWNobyBtZXNzYWdlPSJVbmRlcGxveWluZyB3YXJmaWxlICR7YXBwbmFtZX0td2ViIGZyb20KQEAgLTEzNzUsNyArMTM3NSw3IEBACiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgPGFyZyBsaW5lPSJ1bmRlcGxveSIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7YXBwbmFtZX0tZWpiIi8+CiAgIDwvZXhlYz4KIDwvdGFyZ2V0PgpAQCAtMTM4NSwxMCArMTM4NSwxMCBAQAogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgIDxhcmcgbGluZT0idW5kZXBsb3kiLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FwcG5hbWV9LWNsaWVudCIvPgogICA8L2V4ZWM+Ci08L3RhcmdldD4gIAorPC90YXJnZXQ+CiAKIAogPCEtLSBydW4gYXBwY2xpZW50IGluIEFwcFNlcnYgIC0tPgpAQCAtMTQzMSwxMSArMTQzMSwxMSBAQAogICAgIDxhcmcgdmFsdWU9IiR7dGVzdHN1aXRlLmlkfSIvPgogICA8L2phdmE+CiA8L3RhcmdldD4KLSAgCisKIDwhLS0gcHJlcGFyZSBQb2ludGJhc2Ugc2VydmVycyAtLT4KIDx0YXJnZXQgbmFtZT0icHJlcGFyZVBCIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxlY2hvIG1lc3NhZ2U9IlN0YXJ0aW5nIFBvaW50YmFzZSBzZXJ2ZXJzIiBsZXZlbD0idmVyYm9zZSIvPgotICA8Y29weSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vbGliL3BvaW50YmFzZS5pbmkiIAorICA8Y29weSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vbGliL3BvaW50YmFzZS5pbmkiCiAgICAgICB0b2ZpbGU9IiR7ZGIuZGlyfS9wb2ludGJhc2UuaW5pIi8+CiAgIDxyZXBsYWNlIGZpbGU9IiR7ZGIuZGlyfS9wb2ludGJhc2UuaW5pIiB0b2tlbj0iQEBAIiB2YWx1ZT0iJHtkYi5kaXJ9Ii8+CiA8L3RhcmdldD4KQEAgLTE0NTgsMTIgKzE0NTgsMTIgQEAKIAogPCEtLSB0YXJnZXQgbmFtZT0ic3RhcnRQQiIgZGVwZW5kcz0icHJlcGFyZVBCIj4KICAgPHBhcmFsbGVsPgotICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnBvaW50YmFzZS5uZXQubmV0U2VydmVyIiAKKyAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5wb2ludGJhc2UubmV0Lm5ldFNlcnZlciIKICAgICAgICAgY2xhc3NwYXRoPSIke2RiLmNsYXNzcGF0aH0iIGZhaWxvbmVycm9yPSJmYWxzZSIgZm9yaz0idHJ1ZSI+CiAgICAgICA8YXJnIGxpbmU9Ii9wb3J0OjkwOTIiLz4KICAgICAgIDxhcmcgbGluZT0iL3BvaW50YmFzZS5pbmk9JHtkYi5kaXJ9L3BvaW50YmFzZS5pbmkiLz4KICAgICA8L2phdmE+Ci0gICAgPGphdmEgY2xhc3NuYW1lPSJjb20ucG9pbnRiYXNlLm5ldC5uZXRTZXJ2ZXIiIAorICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnBvaW50YmFzZS5uZXQubmV0U2VydmVyIgogICAgICAgICBjbGFzc3BhdGg9IiR7ZGIuY2xhc3NwYXRofSIgZmFpbG9uZXJyb3I9InRydWUiIGZvcms9InRydWUiPgogICAgICAgPGFyZyBsaW5lPSIvcG9ydDo5MDkzIi8+CiAgICAgICA8YXJnIGxpbmU9Ii9wb2ludGJhc2UuaW5pPSR7ZGIuZGlyfS9wb2ludGJhc2UuaW5pIi8+CkBAIC0xNDgzLDcgKzE0ODMsNyBAQAogPCEtLSAgc3RhcnQgRGVyYnkgRGF0YWJhc2UgLS0+CiA8dGFyZ2V0IG5hbWU9InN0YXJ0RGVyYnkiPgogICA8Y29uZGl0aW9uIHByb3BlcnR5PSJkYXJ3aW4iPgotCTxvcyBuYW1lPSJNYWMgT1MgWCIvPgorICAgIDxvcyBuYW1lPSJNYWMgT1MgWCIvPgogICA8L2NvbmRpdGlvbj4KICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydERlcmJ5Tm9uTWFjIi8+CiAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnREZXJieU1hYyIvPgpAQCAtMTUwMCw3ICsxNTAwLDcgQEAKICAgICAgIGNsYXNzcGF0aD0iJHtkYi5jbGFzc3BhdGh9IiBmb3JrPSJ0cnVlIiBzcGF3bj0idHJ1ZSI+CiAgICAgICA8YXJnIGxpbmU9Ii1oIGxvY2FsaG9zdCAtcCAke2RiLnBvcnQuMn0gc3RhcnQiLz4KICAgICA8L2phdmE+Ci0gIDwvcGFyYWxsZWw+ICAgICAKKyAgPC9wYXJhbGxlbD4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InN0YXJ0RGVyYnlNYWMiIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0iZGFyd2luIj4KQEAgLTE1MTMsNyArMTUxMyw3IEBACiAgICAgPC9qYXZhPgogICAgIDxqYXZhIGNsYXNzbmFtZT0ib3JnLmFwYWNoZS5kZXJieS5kcmRhLk5ldHdvcmtTZXJ2ZXJDb250cm9sIgogICAgICAgY2xhc3NwYXRoPSIke2RiLmNsYXNzcGF0aH0iIGZvcms9InRydWUiIHNwYXduPSJ0cnVlIj4KLSAgICAgICA8c3lzcHJvcGVydHkga2V5PSJkZXJieS5zdG9yYWdlLmZpbGVTeW5jVHJhbnNhY3Rpb25Mb2ciIHZhbHVlPSJ0cnVlIi8+ICAgICAKKyAgICAgICA8c3lzcHJvcGVydHkga2V5PSJkZXJieS5zdG9yYWdlLmZpbGVTeW5jVHJhbnNhY3Rpb25Mb2ciIHZhbHVlPSJ0cnVlIi8+CiAgICAgICA8YXJnIGxpbmU9Ii1oIGxvY2FsaG9zdCAtcCAke2RiLnBvcnQuMn0gc3RhcnQiLz4KICAgICA8L2phdmE+CiAgIDwvcGFyYWxsZWw+CkBAIC0xNTQxLDEwICsxNTQxLDEwIEBACiAKIDwhLS0gc2V0dXAgSU1RIGZvciBSSSBCdWlsZCAtLT4KIDx0YXJnZXQgbmFtZT0ic2V0dXAtbXEtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIERhdGFzdG9yZSBzZXR1cCBmb3IgUzFNUS4gUmVxdWlyZWQgb25seSBmb3IgUkkiIAorICAgIDxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBEYXRhc3RvcmUgc2V0dXAgZm9yIFMxTVEuIFJlcXVpcmVkIG9ubHkgZm9yIFJJIgogICAgICAgICBsZXZlbD0idmVyYm9zZSIvPgotICAgIDxlY2hvIG1lc3NhZ2U9IiR7SU1RREJNR1J9IC1qYXZhaG9tZSAke2phdmEuaG9tZX0gCi0gICAgICAgIC1iICR7YWRtaW4uZG9tYWlufV8ke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSBjcmVhdGUgYWxsIiAKKyAgICA8ZWNobyBtZXNzYWdlPSIke0lNUURCTUdSfSAtamF2YWhvbWUgJHtqYXZhLmhvbWV9CisgICAgICAgIC1iICR7YWRtaW4uZG9tYWlufV8ke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSBjcmVhdGUgYWxsIgogICAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0lNUURCTUdSfSIgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICA8YXJnIGxpbmU9Ii1qYXZhaG9tZSAke2phdmEuaG9tZX0gLWIgJHthZG1pbi5kb21haW59XyR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IGNyZWF0ZSBhbGwiIC8+CkBAIC0xNjA1LDEzICsxNjA1LDEzIEBACiAKIDwhLS0gdXNhZ2UgIC0tPgogPHRhcmdldCBuYW1lPSJ1c2FnZS1jb21tb24iPgotICAgIDxlY2hvPiAgICAgICAgIAorICAgIDxlY2hvPgogICAgICAgICBhbnQgY2xlYW4gICAgICAgICAgIFJlbW92ZSBhbGwgY2xhc3NlcyBmaWxlcwogICAgICAgICBhbnQgYnVpbGQgICAgICAgICAgIEJ1aWxkIHRoZSBhcHBsaWNhdGlvbgogICAgICAgICBhbnQgZGVwbG95ICAgICAgICAgIERlcGxveSB0aGUgZWFyIGZpbGVzIHRvIFMxQVMKLSAgICAgICAgYW50IHJ1bgkgICAgICAgICAgICBSdW4gdGhlIGFwcGxpY2F0aW9uCisgICAgICAgIGFudCBydW4gICAgICAgICAgICAgICAgUnVuIHRoZSBhcHBsaWNhdGlvbgogICAgICAgICBhbnQgdW5kZXBsb3kgICAgICAgIFVuZGVwbG95IHRoZSBlYXIgZmlsZXMgZnJvbSBTMUFTCi0gICAgICAgIGFudCB1c2FnZSAgICAgICAgICAgRGlzcGxheSB0aGlzIG1lc3NhZ2UgICAgICAgICAgICAKKyAgICAgICAgYW50IHVzYWdlICAgICAgICAgICBEaXNwbGF5IHRoaXMgbWVzc2FnZQogICAgIDwvZWNobz4KIDwvdGFyZ2V0PgogCkBAIC0xNjM3LDEzICsxNjM3LDEzIEBACiAKIDx0YXJnZXQgbmFtZT0icmVzdGFydC1pbnN0YW5jZSI+CiAgICAgPGVjaG8gbWVzc2FnZT0iUmVzdGFydGluZyByZW1vdGUgc2VydmVyIGluc3RhbmNlLHVudGlsIHRoaXMgZ2V0cyBmaXhlZCIvPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgPGFyZyBsaW5lPSJzdG9wLWluc3RhbmNlIi8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDwvZXhlYz4KICAgICA8c2xlZXAgc2Vjb25kcz0iMzAiLz4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgIDxhcmcgbGluZT0ic3RhcnQtaW5zdGFuY2UiLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CkBAIC0xNjY2LDcgKzE2NjYsNyBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0ic2V0dXBUaW1lciIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJlZSI+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICA8YXJnIGxpbmU9ImNyZWF0ZS1yZXNvdXJjZS1yZWYiLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0IHNlcnZlciIvPgpAQCAtMTY5MywxMyArMTY5MywxMyBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0idW5zZXR1cFRpbWVyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgaWY9ImVlIj4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgIDxhcmcgbGluZT0iZGVsZXRlLXJlc291cmNlLXJlZiIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgc2VydmVyIi8+CiAgICAgICAgIDxhcmcgbGluZT0iJHtqZGJjLnJlc291cmNlLm5hbWV9Ii8+CiAgICAgPC9leGVjPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgPGFyZyBsaW5lPSJ1bnNldCIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9LWNvbmZpZy5lamItY29udGFpbmVyLmVqYi10aW1lci1zZXJ2aWNlLnRpbWVyLWRhdGFzb3VyY2UiLz4KICAgICA8L2V4ZWM+CkBAIC0xODkyLDcgKzE4OTIsNyBAQAogPCEtLSBUYXJnZXQgdG8gRmx1c2ggY29ubmVjdGlvbiBwb29sICAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0iZmx1c2gtY29ubnBvb2wtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci08ZWNobyBtZXNzYWdlPSJGbHVzaCBjb25uZWN0aW9uIHBvb2wgJHtqZGJjLmNvbnBvb2wubmFtZX0iIAorPGVjaG8gbWVzc2FnZT0iRmx1c2ggY29ubmVjdGlvbiBwb29sICR7amRiYy5jb25wb29sLm5hbWV9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgPGFyZyBsaW5lPSJmbHVzaC1jb25uZWN0aW9uLXBvb2wiLz4KQEAgLTE5MDYsNyArMTkwNiw3IEBACiA8IS0tIFRhcmdldCB0byBjcmVhdGUgcGFzc3dvcmQgYWxpYXMgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1wYXNzd29yZC1hbGlhcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iQ3JlYXRlIFBhc3N3b3JkIEFsaWFzICR7YWxpYXMubmFtZX0iIAorPGVjaG8gbWVzc2FnZT0iQ3JlYXRlIFBhc3N3b3JkIEFsaWFzICR7YWxpYXMubmFtZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICA8YXJnIGxpbmU9ImNyZWF0ZS1wYXNzd29yZC1hbGlhcyIvPgpAQCAtMTkyMSw3ICsxOTIxLDcgQEAKIDwhLS0gVGFyZ2V0IHRvIGRlbGV0ZSBwYXNzd29yZCBhbGlhcyAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXBhc3N3b3JkLWFsaWFzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci08ZWNobyBtZXNzYWdlPSJkZWxldGUgUGFzc3dvcmQgQWxpYXMgJHtwYXNzd29yZC5hbGlhcy5uYW1lfSIgCis8ZWNobyBtZXNzYWdlPSJkZWxldGUgUGFzc3dvcmQgQWxpYXMgJHtwYXNzd29yZC5hbGlhcy5uYW1lfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgIDxhcmcgbGluZT0iZGVsZXRlLXBhc3N3b3JkLWFsaWFzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvZWUtY29tbW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9lZS1jb21tb24ueG1sCmluZGV4IGFhMDQ5ODcuLjJlZjgyZjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9lZS1jb21tb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9lZS1jb21tb24ueG1sCkBAIC02Niw3ICs2Niw3IEBACiA8dGFyZ2V0IG5hbWU9InN0YXJ0LW5vZGVhZ2VudC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIDxlY2hvIG1lc3NhZ2U9IlN0YXJ0aW5nIG5vZGVhZ2VudCAke25vZGVhZ2VudC5uYW1lfSIgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+Ci0gICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIAorICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIgogICAgICAgdmFsdWU9InN0YXJ0LW5vZGUtYWdlbnQKICAgICAgICAgLS11c2VyICR7YWRtaW4udXNlcn0KICAgICAgICAgLS1wYXNzd29yZGZpbGUgJHthZG1pbi5wYXNzd29yZC5maWxlfQpAQCAtMTA3LDcgKzEwNyw3IEBACiA8dGFyZ2V0IG5hbWU9InN0b3Atbm9kZWFnZW50LWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogPGVjaG8gbWVzc2FnZT0iU3RvcHBpbmcgbm9kZWFnZW50ICR7bm9kZWFnZW50Lm5hbWV9IiBsZXZlbD0idmVyYm9zZSIvPgogICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KLSAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgCisgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiCiAgICAgICB2YWx1ZT0ic3RvcC1ub2RlLWFnZW50IiAvPgogICAgIDxwYXJhbSBuYW1lPSJhcy5wcm9wcyIgdmFsdWU9IiIvPgogICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgpAQCAtMTIxLDcgKzEyMSw3IEBACiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1jbHVzdGVyLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgY2x1c3RlciAke2NsdXN0ZXIubmFtZX0iIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgotICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiAKKyAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIKICAgICAgIHZhbHVlPSJjcmVhdGUtY2x1c3RlciIgLz4KICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgIHZhbHVlPSIke2NsdXN0ZXIubmFtZX0iIC8+CkBAIC0xNDYsNyArMTQ2LDcgQEAKIDx0YXJnZXQgbmFtZT0ic3RhcnQtY2x1c3Rlci1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIDxlY2hvIG1lc3NhZ2U9IlN0YXJ0aW5nIGNsdXN0ZXIgJHtjbHVzdGVyLm5hbWV9IiBsZXZlbD0idmVyYm9zZSIvPgogICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KLSAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgCisgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiCiAgICAgICB2YWx1ZT0ic3RhcnQtY2x1c3RlciIgLz4KICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgIHZhbHVlPSIke2NsdXN0ZXIubmFtZX0iIC8+CkBAIC0xNTksNyArMTU5LDcgQEAKIDx0YXJnZXQgbmFtZT0ic3RvcC1jbHVzdGVyLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogPGVjaG8gbWVzc2FnZT0iU3RvcHBpbmcgY2x1c3RlciAke2NsdXN0ZXIubmFtZX0iIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgotICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiAKKyAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIKICAgICAgIHZhbHVlPSJzdG9wLWNsdXN0ZXIiIC8+CiAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICB2YWx1ZT0iJHtjbHVzdGVyLm5hbWV9IiAvPgpAQCAtMzE1LDkgKzMxNSw5IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJvcmIubGlzdGVuZXIxLnBvcnQiIHZhbHVlPSIke29yYi5saXN0ZW5lcjEucG9ydC50d299Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzc2wucG9ydCIgdmFsdWU9IiR7c3NsLnBvcnQudHdvfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3NsLm11dHVhbGF1dGgucG9ydCIgdmFsdWU9IiR7c3NsLm11dHVhbGF1dGgucG9ydC50d299Ii8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJqbXguc3lzdGVtLmNvbm5lY3Rvci5wb3J0IiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImpteC5zeXN0ZW0uY29ubmVjdG9yLnBvcnQiCiAgICAgICAgICAgdmFsdWU9IiR7am14LnN5c3RlbS5jb25uZWN0b3IucG9ydC50d299Ii8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJjbHVzdGVyZWQuc2VydmVyLm5hbWUiIAorICAgICAgICA8cGFyYW0gbmFtZT0iY2x1c3RlcmVkLnNlcnZlci5uYW1lIgogICAgICAgICAgIHZhbHVlPSIke2NsdXN0ZXJlZC5zZXJ2ZXIubmFtZS50d299Ii8+CiAgICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+CkBAIC0zNDUsNyArMzQ1LDcgQEAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0icmVtb3ZlLWRlZmF1bHQtY2x1c3Rlci1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1jbHVzdGVyZWQtaW5zdGFuY2UtY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImNsdXN0ZXJlZC5zZXJ2ZXIubmFtZSIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJjbHVzdGVyZWQuc2VydmVyLm5hbWUiCiAgICAgICAgICAgdmFsdWU9IiR7Y2x1c3RlcmVkLnNlcnZlci5uYW1lLnR3b30iLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtY2x1c3RlcmVkLWluc3RhbmNlLWNvbW1vbiIvPgpAQCAtNDk5LDEwICs0OTksMTAgQEAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0iZWVzZXR1cC1hbnQiIGRlcGVuZHM9ImVudi1lZSI+CiAgICA8ZWNobyBmaWxlPSIke2FkbWluLnBhc3N3b3JkLmZpbGV9IiBhcHBlbmQ9ImZhbHNlIj4KLQlBU19BRE1JTl9VU0VSUEFTU1dPUkQ9JHtwYXNzd29yZH0KLQlBU19BRE1JTl9QQVNTV09SRD0ke2FkbWluLnBhc3N3b3JkfQotCUFTX0FETUlOX0FETUlOUEFTU1dPUkQ9JHthZG1pbi5wYXNzd29yZH0KLQlBU19BRE1JTl9NQVNURVJQQVNTV09SRD0ke21hc3Rlci5wYXNzd29yZH0KKyAgICBBU19BRE1JTl9VU0VSUEFTU1dPUkQ9JHtwYXNzd29yZH0KKyAgICBBU19BRE1JTl9QQVNTV09SRD0ke2FkbWluLnBhc3N3b3JkfQorICAgIEFTX0FETUlOX0FETUlOUEFTU1dPUkQ9JHthZG1pbi5wYXNzd29yZH0KKyAgICBBU19BRE1JTl9NQVNURVJQQVNTV09SRD0ke21hc3Rlci5wYXNzd29yZH0KICAgIDwvZWNobz4KICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlRG9tYWluIi8+CiAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0RG9tYWluIj4KQEAgLTUxMSw3ICs1MTEsNyBAQAogICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtbm9kZWFnZW50LWNvbW1vbiIvPgogICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtaW5zdGFuY2UtY29tbW9uIi8+CiAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0LW5vZGVhZ2VudCIvPgotICAgPHNsZWVwIHNlY29uZHM9IjMwIi8+ICAgCisgICA8c2xlZXAgc2Vjb25kcz0iMzAiLz4KICAgIDxlY2hvIG1lc3NhZ2U9IkRvbmUgZWVzZXR1cC1hbnQhIi8+CiA8L3RhcmdldD4KIApAQCAtNTcwLDcgKzU3MCw3IEBACiAgICAgICAgIDxhcmcgbGluZT0iLS1lY2hvPXRydWUgLS10ZXJzZT10cnVlIiAvPgogICAgICAgICA8YXJnIGxpbmU9Ii0tZG9tYWluZGlyICR7YWRtaW4uZG9tYWluLmRpcn0iLz4KICAgICAgICAgPGFyZyBsaW5lPSItLWFkbWlucG9ydCAke2FkbWluLnBvcnR9Ii8+Ci0gICAgICAgIDxhcmcgbGluZT0iLS1pbnN0YW5jZXBvcnQgJHthZG1pbi5odHRwLnBvcnR9Ii8+IAorICAgICAgICA8YXJnIGxpbmU9Ii0taW5zdGFuY2Vwb3J0ICR7YWRtaW4uaHR0cC5wb3J0fSIvPgogICAgICAgICA8YXJnIGxpbmU9Ii0tYWRtaW51c2VyICR7YWRtaW4udXNlcn0iLz4KICAgICAgICAgPGFyZyBsaW5lPSItLXBhc3N3b3JkZmlsZSAke2FkbWluLnBhc3N3b3JkLmZpbGV9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthZG1pbi5kb21haW59Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvZW1tYS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvZW1tYS54bWwKaW5kZXggNDFmMjI3My4uMmY2NDNmZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29uZmlnL2VtbWEueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9lbW1hLnhtbApAQCAtNTgsNyArNTgsNyBAQAogICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7Z2xhc3NmaXNoLXppcC1maWxlfSIgdHlwZT0iZmlsZSIgLz4KICAgICAgICAgPGFudHZlcnNpb24gYXRsZWFzdD0iMS44Ii8+CiAgICAgICA8L2FuZD4KLSAgICA8L2NvbmRpdGlvbj4gCisgICAgPC9jb25kaXRpb24+CiAgICAgPGZhaWwgbWVzc2FnZT0iUGxlYXNlIG1ha2Ugc3VyZSBhbnQgdmVyc2lvbiBpcyAxLjggb3IgaGlnaGVyLCBlbW1hLmVuYWJsZWQgcHJvcGVydHkgaXMgc2V0LCBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgR0xBU1NGSVNIX1pJUF9GSUxFIGlzIGV4cG9ydGVkLiI+CiAgICAgICA8Y29uZGl0aW9uPgogICAgICAgICA8bm90PgpAQCAtNzQsNyArNzQsNyBAQAogICAgIDxta2RpciBkaXI9IiR7Y292ZXJhZ2UuZGlyfSIvPgogICAgIDxjb3B5IGZpbGU9IiR7ZW1tYS5saWIuZGlyfS8ke2VtbWEuamFyLm5hbWV9IiB0b2Rpcj0iJHtnbGFzc2Zpc2guc2VydmVyLmRpcn0vZG9tYWlucy9kb21haW4xL2xpYi9leHQvIiBvdmVyd3JpdGU9InRydWUiIC8+CiAgIDwvdGFyZ2V0PgotIAorCiAgIDx0YXJnZXQgbmFtZT0iZW1tYS5pbnN0cnVtZW50IiBkZXBlbmRzPSJlbW1hLmluaXQiIGlmPSJlbW1hLnByZXJlcXVzaXRlLm1ldCIgZGVzY3JpcHRpb249Ikluc3RydW1lbnQgQ2xhc3NlcyBXaXRoIEVNTUEiPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJvcmlnaW5hbC5qYXIuZGlyIiB2YWx1ZT0iJHtnbGFzc2Zpc2guc2VydmVyLmRpcn0vbW9kdWxlcyIgLz4KICAgICA8ZWNobz5bRU1NQV0gOiBTdGFydCB0byBpbnN0cnVtZW50IHRoZSBKQVIgZmlsZXMgdW5kZXIgJHtvcmlnaW5hbC5qYXIuZGlyfS8uPC9lY2hvPgpAQCAtMTQzLDcgKzE0Myw3IEBACiAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5lbSIgLz4KICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmVjIiAvPgogICAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgICAgIDxodG1sIG91dGZpbGU9IiR7Y292ZXJhZ2UuZGlyfS9jb3ZlcmFnZS5odG1sIiAKKyAgICAgICAgPGh0bWwgb3V0ZmlsZT0iJHtjb3ZlcmFnZS5kaXJ9L2NvdmVyYWdlLmh0bWwiCiAgICAgICAgICAgICAgIGNvbHVtbnM9Im5hbWUsY2xhc3MsbWV0aG9kLGJsb2NrLGxpbmUiCiAgICAgICAgICAgICAgIGRlcHRoPSJtZXRob2QiCiAgICAgICAgIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvamF2YXdzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9qYXZhd3MueG1sCmluZGV4IDhhZGY0MDAuLjhkNDE0ZTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9qYXZhd3MueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9qYXZhd3MueG1sCkBAIC0xMzAsMTcgKzEzMCwxNyBAQAogICAgICAgICA8L3NlcXVlbnRpYWw+CiAgICAgPC9tYWNyb2RlZj4KIAotIAotICAgIAorCisKICAgICA8IS0tCiAgICAgICAgIEZvciB0aGUgU1FFIGZyYW1ld29yaywgbGF1bmNoZXMgdGhlIGFwcCBjbGllbnQgdXNpbmcgSmF2YSBXZWIgU3RhcnQuCiAgICAgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJsYXVuY2gtYXBwY2xpZW50LWphdmF3cyIgaWY9InVzZS5qYXZhd3MiPgotICAgICAgICAKKwogICAgICAgICA8ZWNobyBtZXNzYWdlPSJMYXVuY2hpbmcgYXBwIGNsaWVudCB1c2luZyBKYXZhIFdlYiBTdGFydCIvPgotICAgICAgICAKKwogICAgICAgICA8dGVtcGZpbGUgcHJvcGVydHk9ImNsaWVudE91dHB1dEZpbGUiIHByZWZpeD0iYXBwY2xpZW50IiBzdWZmaXg9Ii50eHQiLz4KLSAgCisKICAgICAgICAgPHByZXBhcmUtamF2YXdzLXNlY3VyaXR5Lz4KICAgICAgICAgPCEtLQogICAgICAgICAgICAgQ2hvb3NlIHRoZSBvdXRwdXQgZmlsZS4KQEAgLTE3OSw3ICsxNzksNyBAQAogICAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJhcHBuYW1lIiB2YWx1ZT0iJHthcHBuYW1lfSIvPgogICAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJjbGllbnRuYW1lIiB2YWx1ZT0iJHtjbGllbnRuYW1lfSIvPgogICAgICAgICA8L2phdmE+Ci0gICAgICAgIAorCiAgICAgICAgIDwhLS0KICAgICAgICAgICAgIE5vdyBsYXVuY2ggdGhlIGNsaWVudC4KICAgICAgICAgLS0+CkBAIC0yMDEsNyArMjAxLDcgQEAKICAgICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtqYXZhd3Muc3RhdHVzLmZpbGV9Ii8+CiAgICAgICAgIDwvd2FpdGZvcj4KICAgICAgICAgPGVjaG8+SmF2YSBXZWIgU3RhcnQgbGF1bmNoIGZpbmlzaGVkPC9lY2hvPgotICAgICAgICAKKwogICAgICAgICA8IS0tCiAgICAgICAgICAgICBSZWFkIHRoZSBvdXRwdXQgZmlsZSBpbnRvIGEgcHJvcGVydHksIGVjaG8gdGhlIG91dHB1dCB0byB0aGUKICAgICAgICAgICAgIG91dHB1dCBzbyBhbnkgaHVtYW4gd2F0Y2hpbmcgY2FuIHNlZSBpdCwgYW5kIHRoZW4gY2hlY2sgdGhlCkBAIC0yMTIsMTUgKzIxMiwxNSBAQAogICAgICAgICA8L2xvYWRyZXNvdXJjZT4KIAogICAgICAgICA8ZWNobyBmaWxlPSIke2NsaWVudE91dHB1dEZpbGV9IiBtZXNzYWdlPSIke2xhdW5jaE91dHB1dH0iLz4KLSAgICAgICAgCisKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iJHtsYXVuY2hPdXRwdXR9Ii8+Ci0gICAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2hlY2tSZXBvcnRpbmctY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0Lm5hbWUiIHZhbHVlPSIke2FwcG5hbWV9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdC5kZXNjcmlwdGlvbiIgdmFsdWU9IiR7dGVzdC5kZXNjcmlwdGlvbn0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0LmNvdW50IiB2YWx1ZT0iJHt0ZXN0LmNvdW50fSIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgCisKICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2phdmF3cy5yZXBvcnQuZmlsZX0iLz4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2phdmF3cy5zdGF0dXMuZmlsZX0iLz4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29uZmlnL21haWwueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29uZmlnL21haWwueG1sCmluZGV4IDhkYzg3NmIuLmJkNmFiN2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9tYWlsLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvbWFpbC54bWwKQEAgLTIwLDE5ICsyMCwxOSBAQAogPHByb3BlcnR5IG5hbWU9InJlc3VsdHMubWFpbGVlIiB2YWx1ZT0iIiAvPi0tPgogPHByb3BlcnR5IG5hbWU9Im1hY2hpbmUuY29uZmlnIiB2YWx1ZT0iZGVmYXVsdF8ke29zLm5hbWV9XyR7b3MuYXJjaH0iIC8+CiA8dGFyZ2V0IG5hbWU9Im1haWwiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8bWFpbCBmcm9tPSIke3Jlc3VsdHMubWFpbGVyfSIgdG9saXN0PSIke3Jlc3VsdHMubWFpbGVlfSIKLQkJc3ViamVjdD0iVGVzdCByZXN1bHRzIGZvciAke21hY2hpbmUuY29uZmlnfSIKLQkJbWFpbGhvc3Q9IiR7cmVzdWx0cy5tYWlsaG9zdH0iCi0JCW1lc3NhZ2U9IlF1aWNrIExvb2sgdGVzdCByZXN1bHRzLi4uIgotICAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSI+ICAgICAgICAgICAgICAgIAotCTxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiAgCisgICAgPG1haWwgZnJvbT0iJHtyZXN1bHRzLm1haWxlcn0iIHRvbGlzdD0iJHtyZXN1bHRzLm1haWxlZX0iCisgICAgICAgIHN1YmplY3Q9IlRlc3QgcmVzdWx0cyBmb3IgJHttYWNoaW5lLmNvbmZpZ30iCisgICAgICAgIG1haWxob3N0PSIke3Jlc3VsdHMubWFpbGhvc3R9IgorICAgICAgICBtZXNzYWdlPSJRdWljayBMb29rIHRlc3QgcmVzdWx0cy4uLiIKKyAgICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiPgorICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IgogICAgICAgICAgICAgaW5jbHVkZXM9ImNvdW50LnR4dCx0ZXN0X3Jlc3VsdHMuaHRtbCIvPgotCTwvbWFpbD4KKyAgICA8L21haWw+CiA8L3RhcmdldD4KIDx0YXJnZXQgbmFtZT0iY29weU1haWxKYXJzIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQ29weWluZyBtYWlsIGphcnMgaW50byAkQU5UX0hPTUUvbGliIi8+CiAgICAgICAgIDxjb3B5IHRvZGlyPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9hbnQvbGliIiBvdmVyd3JpdGU9InRydWUiIHZlcmJvc2U9InRydWUiPgotICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5TMUFTX0hPTUV9L2xpYiIgCisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vbGliIgogICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJhY3RpdmF0aW9uLmphcixtYWlsLmphciIvPgogICAgICAgICA8L2NvcHk+CiA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9wcm9wZXJ0aWVzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9wcm9wZXJ0aWVzLnhtbAppbmRleCA0MzYzMGQyLi4wOTkyN2ZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvcHJvcGVydGllcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29uZmlnL3Byb3BlcnRpZXMueG1sCkBAIC0xOSwxMCArMTksMTAgQEAKIDxwcm9wZXJ0eSBlbnZpcm9ubWVudD0iZW52Ii8+CiA8dGFyZ2V0IG5hbWU9ImluaXQtY29tbW9uIiBkZXBlbmRzPSJzZXRUb29sUHJvcGVydHksc2V0UzFBU2NsYXNzUGF0aCI+CiA8IS0tIEFwcHNlcnZlciBzZXR1cCBwcm9wZXJ0aWVzIC0tPgotPGVjaG8gbWVzc2FnZT0iTG9hZGluZyBwcm9wcyBmcm9tIGZpbGUgJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzIiAKKzxlY2hvIG1lc3NhZ2U9IkxvYWRpbmcgcHJvcHMgZnJvbSBmaWxlICR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcyIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgPHByb3BlcnR5IG5hbWU9InBlIiB2YWx1ZT0iUGxhdGZvcm0gRWRpdGlvbiBvZiBTMUFTIi8+Ci0gICA8cHJvcGVydHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzIi8+ICAgCisgICA8cHJvcGVydHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzIi8+CiAgICA8ZWNobyBtZXNzYWdlPSJhZG1pbi5kb21haW4gJHthZG1pbi5kb21haW59IiBsZXZlbD0idmVyYm9zZSIvPgogICAgPGVjaG8gbWVzc2FnZT0iYWRtaW4udXNlciAke2FkbWluLnVzZXJ9IiBsZXZlbD0idmVyYm9zZSIvPgogICAgPGVjaG8gbWVzc2FnZT0iYWRtaW4ucG9ydCAke2FkbWluLnBvcnR9IiBsZXZlbD0idmVyYm9zZSIvPgpAQCAtNjcsMjEgKzY3LDIxIEBACiAgICAgPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iIiAvPgogCiAgICAgPCEtLSBUZXN0IEhhcm5lcyBwcm9wZXJ0aWVzIC0tPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZC5iYXNlLmRpciIgCisgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkLmJhc2UuZGlyIgogICAgICAgICB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZSIvPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZC53ZWJhcHBzLmRpciIgCisgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkLndlYmFwcHMuZGlyIgogICAgICAgICB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL3dhcnMiLz4KLSAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIAorICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIKICAgICAgICAgdmFsdWU9IiR7YnVpbGQuYmFzZS5kaXJ9L2NsYXNzZXMiLz4KLSAgICA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUuZGlyIiAKKyAgICA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUuZGlyIgogICAgICAgICB2YWx1ZT0iJHtidWlsZC5iYXNlLmRpcn0vYXJjaGl2ZSIvPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXN1bHRzLmRpciIgCisgICAgPHByb3BlcnR5IG5hbWU9InJlc3VsdHMuZGlyIgogICAgICAgICB2YWx1ZT0iJHtidWlsZC5iYXNlLmRpcn0vcmVzdWx0cyIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJzMWFzdGVzdC5jbGFzc3BhdGgiCiAgICAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtzMWFzLmNsYXNzcGF0aH06JHtkYi5jbGFzc3BhdGh9OiR7RGVyYnkuY2xhc3NwYXRofSIvPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgPHByb3BlcnR5IG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgdmFsdWU9IioqLypMb2NhbCouY2xhc3MsKiovKlJlbW90ZSouY2xhc3MsKiovKkhvbWUqLmNsYXNzLCoqLypCZWFuKi5jbGFzcyIgLz4KLSAgICA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgIHZhbHVlPSIqKi8qTG9jYWwqLmNsYXNzLCoqLypIb21lKi5jbGFzcywqKi8qUmVtb3RlKi5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgPHByb3BlcnR5IG5hbWU9IndlYmNsaWVudC53YXIuZmlsZXMiCiAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KQEAgLTExOSwyMCArMTE5LDIwIEBACiAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMiIGluY2x1ZGVzPSIqKi8qLmphciIvPgogICAgIDwhLS0gZmlsZXNldCBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vaW1xL2xpYiIgaW5jbHVkZXM9IiouamFyIi8gLS0+CiAgIDwvcGF0aD4KLSAgPHBhdGhjb252ZXJ0IHBhdGhzZXA9IjoiIAotICAgIHByb3BlcnR5PSJzMWFzLmNsYXNzcGF0aCIgCisgIDxwYXRoY29udmVydCBwYXRoc2VwPSI6IgorICAgIHByb3BlcnR5PSJzMWFzLmNsYXNzcGF0aCIKICAgICByZWZpZD0iczFhc19jbGFzc3BhdGhfamFycyIvPgogPC90YXJnZXQ+CiAKLTx0YXJnZXQgbmFtZT0ic2V0VG9vbFByb3BlcnR5IiAKKzx0YXJnZXQgbmFtZT0ic2V0VG9vbFByb3BlcnR5IgogICBkZXBlbmRzPSJzZXRPU0NvbmRpdGlvbnMsc2V0VG9vbFdpbixzZXRUb29sVW5peCI+CiA8L3RhcmdldD4KIAogICAgIDwhLS0KLSAgICBUaGlzIHdhcyBuZWVkZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgY2FuIAotICAgIGRpZmZlcmVudGlhdGUgYmV0d2VlbiAuZXhlLy5iYXQgZm9yIHdpbmRvd3MgYW5kIC5zaCBmb3Igc29sYXJpcy4gCisgICAgVGhpcyB3YXMgbmVlZGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbgorICAgIGRpZmZlcmVudGlhdGUgYmV0d2VlbiAuZXhlLy5iYXQgZm9yIHdpbmRvd3MgYW5kIC5zaCBmb3Igc29sYXJpcy4KICAgICAtLT4KLTx0YXJnZXQgbmFtZT0ic2V0T1NDb25kaXRpb25zIj4gIAorPHRhcmdldCBuYW1lPSJzZXRPU0NvbmRpdGlvbnMiPgogICA8Y29uZGl0aW9uIHByb3BlcnR5PSJpc1VuaXgiPgogICAgIDxvcyBmYW1pbHk9InVuaXgiLz4KICAgPC9jb25kaXRpb24+CkBAIC0xNDIsMTYgKzE0MiwxNiBAQAogICA8L2NvbmRpdGlvbj4KIDwvdGFyZ2V0PgogCi08dGFyZ2V0IG5hbWU9InNldFRvb2xXaW4iIGlmPSJpc1dpbmRvd3MiPiAgCis8dGFyZ2V0IG5hbWU9InNldFRvb2xXaW4iIGlmPSJpc1dpbmRvd3MiPgogICA8IS0tCi0gICAgU29tZSB0ZXN0cyBsYXVuY2ggYXBwIGNsaWVudHMgYnkgZGlyZWN0bHkgcnVubmluZyB0aGUgYXBwY2xpZW50IHNjcmlwdCwgCisgICAgU29tZSB0ZXN0cyBsYXVuY2ggYXBwIGNsaWVudHMgYnkgZGlyZWN0bHkgcnVubmluZyB0aGUgYXBwY2xpZW50IHNjcmlwdCwKICAgICB1c2luZyB0aGUgQVBQQ0xJRU5UIHByb3BlcnR5LiAgT3RoZXJzIGRvIHNvIGJ5IGludm9raW5nIHRoZQotICAgIHJ1bmNsaWVudC1jb21tb24gdGFyZ2V0LiAgCi0gICAgCisgICAgcnVuY2xpZW50LWNvbW1vbiB0YXJnZXQuCisKICAgICBXZSB1c2UgdGhlIHRlc3Qgc2NyaXB0IChub3QgYXBwY2xpZW50KSBpZiB0aGUgdXNlciB3YW50cyB0byBsYXVuY2gKICAgICBhcHAgY2xpZW50cyB1c2luZyBKYXZhIFdlYiBTdGFydC4KICAgLS0+Ci0gIDxjb25kaXRpb24gcHJvcGVydHk9IkFQUENMSUVOVCIgCisgIDxjb25kaXRpb24gcHJvcGVydHk9IkFQUENMSUVOVCIKICAgICB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy9qd3MtYXBwY2xpZW50LmJhdCIKICAgICBlbHNlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hcHBjbGllbnQuYmF0Ij4KICAgICAgICAgPGlzc2V0IHByb3BlcnR5PSJ1c2UuamF2YXdzIi8+CkBAIC0xNTksMTMgKzE1OSwxMyBAQAogICA8cHJvcGVydHkgbmFtZT0iQVNBRE1JTiIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2FzYWRtaW4uYmF0Ii8+CiAgIDwhLS08cHJvcGVydHkgbmFtZT0iQVNBRE1JTiIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2FzYWRtaW4iLz4tLT4KICAgPHByb3BlcnR5IG5hbWU9IkFTQU5UIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXNhbnQuYmF0Ii8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJDQVBUVVJFU0NIRU1BIiAKKyAgPHByb3BlcnR5IG5hbWU9IkNBUFRVUkVTQ0hFTUEiCiAgICAgICB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vY2FwdHVyZS1zY2hlbWEuYmF0Ii8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJDSEVDS1BBVENIIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vY2hlY2twYXRjaC5iYXQiLz4KICAgPHByb3BlcnR5IG5hbWU9IklOU1RBTExQQVRDSCIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2luc3RhbGxwYXRjaC5iYXQiLz4KICAgPHByb3BlcnR5IG5hbWU9IkpTUEMiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9qc3BjLmJhdCIvPgogICA8cHJvcGVydHkgbmFtZT0iTElTVFBBVENIIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vbGlzdHBhdGNoLmJhdCIvPgotICA8cHJvcGVydHkgbmFtZT0iUEFDS0FHRS1BUFBDTElFTlQiIAorICA8cHJvcGVydHkgbmFtZT0iUEFDS0FHRS1BUFBDTElFTlQiCiAgICAgICB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vcGFja2FnZS1hcHBjbGllbnQuYmF0Ii8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJWRVJJRklFUiIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3ZlcmlmaWVyLmJhdCIvPgogICA8cHJvcGVydHkgbmFtZT0iUk1JQyIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vamRrL2Jpbi9ybWljLmV4ZSIvPgpAQCAtMTc0LDE3ICsxNzQsMTcgQEAKICAgPHByb3BlcnR5IG5hbWU9IldTQ09NUElMRSIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzY29tcGlsZS5iYXQiLz4KICAgPHByb3BlcnR5IG5hbWU9IldTR0VOIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3NnZW4uYmF0Ii8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJXU0lNUE9SVCIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzaW1wb3J0LmJhdCIvPgotICA8cHJvcGVydHkgbmFtZT0icGIuc3RhcnQuc2VydmVyIiAKKyAgPHByb3BlcnR5IG5hbWU9InBiLnN0YXJ0LnNlcnZlciIKICAgICAgIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L3BvaW50YmFzZS9zZXJ2ZXIvU3RhcnRTZXJ2ZXIuYmF0Ii8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJwYi5zdGFydC5zZXJ2ZXIxIiAKKyAgPHByb3BlcnR5IG5hbWU9InBiLnN0YXJ0LnNlcnZlcjEiCiAgICAgICB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9wb2ludGJhc2Uvc2VydmVyL1N0YXJ0U2VydmVyMS5iYXQiLz4KICAgPHByb3BlcnR5IG5hbWU9IklNUURCTUdSIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9pbXEvYmluL2ltcWRibWdyLmJhdCIvPgogIDxwcm9wZXJ0eSBuYW1lPSJsZC5saWJyYXJ5LnBhdGgiIGxvY2F0aW9uPSIke2Vudi5TMUFTX0hPTUV9L2xpYjske2Vudi5TMUFTX0hPTUV9L2JpbiIvPgogPC90YXJnZXQ+CiAKLTx0YXJnZXQgbmFtZT0ic2V0VG9vbFVuaXgiIGlmPSJpc1VuaXgiPiAgCi0gIDxjb25kaXRpb24gcHJvcGVydHk9IkFQUENMSUVOVCIgCi0gICAgdmFsdWU9IiR7ZW52LkFQU19IT01FfS9jb25maWcvandzLWFwcGNsaWVudCIgCis8dGFyZ2V0IG5hbWU9InNldFRvb2xVbml4IiBpZj0iaXNVbml4Ij4KKyAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0iQVBQQ0xJRU5UIgorICAgIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnL2p3cy1hcHBjbGllbnQiCiAgICAgZWxzZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXBwY2xpZW50Ij4KICAgICAgICAgPGlzc2V0IHByb3BlcnR5PSJ1c2UuamF2YXdzIi8+CiAgIDwvY29uZGl0aW9uPgpAQCAtMTk1LDcgKzE5NSw3IEBACiAgIDxwcm9wZXJ0eSBuYW1lPSJJTlNUQUxMUEFUQ0giIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9pbnN0YWxscGF0Y2giLz4KICAgPHByb3BlcnR5IG5hbWU9IkpTUEMiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9qc3BjIi8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJMSVNUUEFUQ0giIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9saXN0cGF0Y2giLz4KLSAgPHByb3BlcnR5IG5hbWU9IlBBQ0tBR0UtQVBQQ0xJRU5UIiAKKyAgPHByb3BlcnR5IG5hbWU9IlBBQ0tBR0UtQVBQQ0xJRU5UIgogICAgICAgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3BhY2thZ2UtYXBwY2xpZW50Ii8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJWRVJJRklFUiIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3ZlcmlmaWVyIi8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJSTUlDIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9qZGsvYmluL3JtaWMiLz4KQEAgLTIwMywxNiArMjAzLDE2IEBACiAgIDxwcm9wZXJ0eSBuYW1lPSJXU0NPTVBJTEUiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi93c2NvbXBpbGUiLz4KICAgPHByb3BlcnR5IG5hbWU9IldTR0VOIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3NnZW4iLz4KICAgPHByb3BlcnR5IG5hbWU9IldTSU1QT1JUIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3NpbXBvcnQiLz4KLSAgPHByb3BlcnR5IG5hbWU9InBiLnN0YXJ0LnNlcnZlciIgCisgIDxwcm9wZXJ0eSBuYW1lPSJwYi5zdGFydC5zZXJ2ZXIiCiAgICAgICB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9wb2ludGJhc2Uvc2VydmVyL1N0YXJ0U2VydmVyIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJwYi5zdGFydC5zZXJ2ZXIxIiAKKyAgPHByb3BlcnR5IG5hbWU9InBiLnN0YXJ0LnNlcnZlcjEiCiAgICAgICB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9wb2ludGJhc2Uvc2VydmVyL1N0YXJ0U2VydmVyMSIvPgogICA8cHJvcGVydHkgbmFtZT0iSU1RREJNR1IiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2ltcS9iaW4vaW1xZGJtZ3IiLz4KICA8cHJvcGVydHkgbmFtZT0ibGQubGlicmFyeS5wYXRoIiBsb2NhdGlvbj0iJHtlbnYuUzFBU19IT01FfS9saWI6JHtlbnYuUzFBU19IT01FfS9iaW4iLz4KIDwvdGFyZ2V0PgogCiA8IS0tCi10aGUgZml4RmlsZXMgdGFyZ2V0IHJlbW92ZXMgYWxsIF5NIGNoYXJlY3RhcnMgZnJvbSB0aGUgZW5kIG9mIAordGhlIGZpeEZpbGVzIHRhcmdldCByZW1vdmVzIGFsbCBeTSBjaGFyZWN0YXJzIGZyb20gdGhlIGVuZCBvZgogbGluZXMgb2YgTUFOSUZFU1QuTUYgZmlsZXMgc2luY2UgdGhleSBhcmUgdmVyeSBzZW5zaXRpdmUgdG8gaXQuCiAtLT4KIDx0YXJnZXQgbmFtZT0iZml4RmlsZXMiIGRlcGVuZHM9InNldE9TQ29uZGl0aW9ucyIgPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29uZmlnL3JlcG9ydC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvcmVwb3J0LnhtbAppbmRleCBmZjczYjNmLi5lOTkzOGQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvcmVwb3J0LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvcmVwb3J0LnhtbApAQCAtMjMsNyArMjMsNyBAQAogPHRhcmdldCBuYW1lPSJyZXBvcnQiPgogPGVjaG8gbWVzc2FnZT0iQ29tcGFyaW5nIHJlc3VsdHMgd2l0aCBleHBlY3RlZCByZXN1bHRzIi8+CiAKLSAKKwogICAgIDx4c2x0IHN0eWxlPSIke3N0eWxlc2hlZXR9IgogICAgICAgICAgICAgaW49IiR7eG1sZmlsZX0iIG91dD0iJHtodG1sZmlsZX0iCiAgICAgICAgICAgICBiYXNlZGlyPSIuIiBkZXN0ZGlyPSIuIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29uZmlnL3J1bi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvcnVuLnhtbAppbmRleCBhN2FiN2U4Li5iZmFiZTE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvcnVuLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvcnVuLnhtbApAQCAtMzMsMTAgKzMzLDEwIEBACiAgICAgICAgICAgICAgICAgPC9vcj4KICAgICAgICAgICAgIDwvd2FpdGZvcj4KICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iJHt0YXJnZXQtdG8tcnVufSIvPgotCSAgICA8YW50Y2FsbCB0YXJnZXQ9InJlcG9ydCIvPgotCSAgICA8YW50Y2FsbCB0YXJnZXQ9Im1haWwiLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXBvcnQiLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJtYWlsIi8+CiA8IS0tCi0JICAgIDxhbnRjYWxsIHRhcmdldD0ic3RvcEFTIi8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RvcEFTIi8+CiAtLT4KICAgICAgICAgPC9zZXF1ZW50aWFsPgogICAgIDwvcGFyYWxsZWw+CkBAIC05Niw3ICs5Niw3IEBACiAgICAgICAgIDxmaWx0ZXJjaGFpbj4KICAgICAgICAgICAgIDxsaW5lY29udGFpbnM+CiAgICAgICAgICAgICAgIDxjb250YWlucyB2YWx1ZT0iQVNNYWluIi8+Ci0JICAgICAgPGNvbnRhaW5zIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9Ii8+CisgICAgICAgICAgPGNvbnRhaW5zIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9Ii8+CiAgICAgICAgICAgICA8L2xpbmVjb250YWlucz4KICAgICAgICAgICAgIDx0b2tlbmZpbHRlcj4KICAgICAgICAgICAgICAgICA8cmVwbGFjZXJlZ2V4IHBhdHRlcm49Il4oXGQrKSBBU01haW4gKC4qKSIgcmVwbGFjZT0iXDEiLz4KQEAgLTE1NywxNyArMTU3LDE3IEBACiAKIDx0YXJnZXQgbmFtZT0icmVzdGFydC1pbnN0YW5jZS1jb21tb24iPgogPGVjaG8gbWVzc2FnZT0iUmVzdGFydGluZyByZW1vdGUgc2VydmVyIGluc3RhbmNlLHVudGlsIHRoaXMgZ2V0cyBmaXhlZCIvPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+Ci0JPGFyZyBsaW5lPSJzdG9wLWluc3RhbmNlIi8+Ci0JPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgotCTxhcmcgbGluZT0iJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgorICAgIDxhcmcgbGluZT0ic3RvcC1pbnN0YW5jZSIvPgorICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KKyAgICA8YXJnIGxpbmU9IiR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiA8L2V4ZWM+CiAKIDxzbGVlcCBzZWNvbmRzPSIzMCIvPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+Ci0JPGFyZyBsaW5lPSJzdGFydC1pbnN0YW5jZSIvPgotCTxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KLQk8YXJnIGxpbmU9IiR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KKyAgICA8YXJnIGxpbmU9InN0YXJ0LWluc3RhbmNlIi8+CisgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgorICAgIDxhcmcgbGluZT0iJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KIDwvZXhlYz4KIAogPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvc3RvcFBCLnNoIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29uZmlnL3N0b3BQQi5zaAppbmRleCBmMmM4YjQ0Li5iZWY3YzM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb25maWcvc3RvcFBCLnNoCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvbmZpZy9zdG9wUEIuc2gKQEAgLTMwLDE4ICszMCwxOCBAQAogaWYgWyAkT1MgPSAid2luMzIiIF07IHRoZW4KICAgICBmb3IgeCBpbiBgcHN8Z3JlcCAic3RhcnRQQiJ8Y3V0IC1kJyAnIC1mIDJgCiAgICAgZG8KLSAgICAgICAgZWNobyAia2lsbGluZyBzdGFydFBCIHByb2Nlc3Mgd2l0aCBwcm9jZXNzaWQ6ICR4IjsgCisgICAgICAgIGVjaG8gImtpbGxpbmcgc3RhcnRQQiBwcm9jZXNzIHdpdGggcHJvY2Vzc2lkOiAkeCI7CiAgICAgICAgIGtpbGwgLTkgJHgKICAgICBkb25lCiAgICAgZm9yIHggaW4gYHBzfGdyZXAgInBvaW50YmFzZSJ8Y3V0IC1kJyAnIC1mIDJgCiAgICAgZG8KLSAgICAgICAgZWNobyAia2lsbGluZyBwb2ludGJhc2UgcHJvY2VzcyB3aXRoIHByb2Nlc3NpZDogJHgiOyAKKyAgICAgICAgZWNobyAia2lsbGluZyBwb2ludGJhc2UgcHJvY2VzcyB3aXRoIHByb2Nlc3NpZDogJHgiOwogICAgICAgICBraWxsIC05ICR4CiAgICAgZG9uZQogZWxzZQogICAgIGZvciB4IGluIGBwcyAtZWZ8Z3JlcCAiamF2YSJ8Y3V0IC1kJyAnIC1mIDNgCiAgICAgZG8KLSAgICAgICAgZWNobyAia2lsbGluZyBqYXZhIHByb2Nlc3Mgd2l0aCBwcm9jZXNzaWQ6ICR4IjsgCisgICAgICAgIGVjaG8gImtpbGxpbmcgamF2YSBwcm9jZXNzIHdpdGggcHJvY2Vzc2lkOiAkeCI7CiAgICAgICAgIGtpbGwgLTkgJHgKICAgICBkb25lCiBmaQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29weW9mcGFyZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvcHlvZnBhcmVudC9idWlsZC54bWwKaW5kZXggMjM3OGRkYy4uYzExNjcxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29weW9mcGFyZW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb3B5b2ZwYXJlbnQvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgJnJ1bjsKICAgICAmbWFpbDsKIAotICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4gCisgICAgPHRhcmdldCBuYW1lPSJhbGwiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNxZXRlc3RzIi8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTY4LDggKzY4LDggQEAKICAgICAgICAgICAgIDxhbnQgZGlyPSJzcWV0ZXN0cyIgdGFyZ2V0PSJydW4tZWVzcWUtdGFyZ2V0Ii8+CiAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0b3BlZSIvPgogICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wRGVyYnkiLz4KLQkgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtcmVwb3J0Ii8+Ci0JICAgIDxhbnRjYWxsIHRhcmdldD0ibWFpbCIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1yZXBvcnQiLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJtYWlsIi8+CiAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlcG9ydC1qYXZhIi8+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0icnVudGVzdC5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgogICAgIDxyZWNvcmQgbmFtZT0iYXBwc2Vydi10ZXN0cy5sb2ciIGFjdGlvbj0ic3RvcCIvPgpAQCAtMTE4LDcgKzExOCw3IEBACiAgICAgICAgICBFeGVjdXRpbmcgd2ViL3N1YmNsYXNzaW5nIFtUb3RhbCA6M10KICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgPC9lY2hvPgotICAgICAgICAKKwogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzcWV0ZXN0cyI+CkBAIC0xMzAsMTEgKzEzMCwxMSBAQAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXBNUSIgZGVwZW5kcz0ic2V0dXAtbXEtY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IHNxZXRlc3RzIChFeGVjdXRlcyBhbGwgc3FldGVzdHMgdGVzdHMpCi0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgc3FldGVzdHMpCisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IHNxZXRlc3RzIChFeGVjdXRlcyBhbGwgc3FldGVzdHMgdGVzdHMpCisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgc3FldGVzdHMpCiAgICAgICAgICAgICBhbnQgc2hvdy1saXN0IChMaXN0cyBhbGwgdGVzdCBzdWl0ZXMpCi0JPC9lY2hvPgorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvcHlvZnBhcmVudC9ydW4uc2ggYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb3B5b2ZwYXJlbnQvcnVuLnNoCmluZGV4IDViMzU2N2IuLmQxMjdmYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvcHlvZnBhcmVudC9ydW4uc2gKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29weW9mcGFyZW50L3J1bi5zaApAQCAtMTE0LDcgKzExNCw3IEBACiAgICAgZWxpZiBbICIkMSIgPSAiYWxsIiBdOyB0aGVuCiAgICAgICAgIFRFU1RfVEFSR0VUPSJhbGwiOwogICAgIGVsc2UKLSAgICAgICAgdXNhZ2U7IAorICAgICAgICB1c2FnZTsKICAgICBmaQogICAgIGVjaG8gImdyYW50aW5nIHBlcm1pc3Npb25zLi4uIjsKICAgICBlY2hvICJncmFudCBjb2RlQmFzZSBcImZpbGU6JHtBUFNfSE9NRX0vLVwiIHtwZXJtaXNzaW9uIGphdmEuc2VjdXJpdHkuQWxsUGVybWlzc2lvbjt9OyIgPj4gJFMxQVNfSE9NRS9saWIvYXBwY2xpZW50L2NsaWVudC5wb2xpY3k7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb3B5b2ZwYXJlbnQvc3RhcnQtZG9tYWluLnNoIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvY29weW9mcGFyZW50L3N0YXJ0LWRvbWFpbi5zaAppbmRleCA3ODdiYTY0Li42NDYwZDIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9jb3B5b2ZwYXJlbnQvc3RhcnQtZG9tYWluLnNoCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2NvcHlvZnBhcmVudC9zdGFydC1kb21haW4uc2gKQEAgLTI0LDcgKzI0LDcgQEAKICAgICB0aGVuCiAgICAgICAgIEFTX0FETUlOX1VTRVI9YGVjaG8gJHggfGN1dCAtZCc9JyAtZjJgCiAgICAgZmkKLSAgIAorCiAgICAgaWYgWyAkdmFydmFsID0gImFkbWluLnBhc3N3b3JkIiBdOwogICAgIHRoZW4KICAgICAgICAgQVNfQURNSU5fUEFTU1dPUkQ9YGVjaG8gJHggfGN1dCAtZCc9JyAtZjJgCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9WZXJzaW9uUHJpbnRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vVmVyc2lvblByaW50ZXIuamF2YQppbmRleCAyNjJlMmJlLi5mOWUyYTIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9WZXJzaW9uUHJpbnRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL1ZlcnNpb25QcmludGVyLmphdmEKQEAgLTIwLDEyICsyMCwxMiBAQAogCiAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGZpbmFsIFN0cmluZ1tdIGFyZykgewogICAgIHRyeSB7Ci0gICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGdWxsIFZlcnNpb246ICIgKyBWZXJzaW9uLmdldEZ1bGxWZXJzaW9uKCkpOyAgIAotICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWJicmV2aWF0ZWQgVmVyc2lvbjogIiArIFZlcnNpb24uZ2V0QWJicmV2aWF0ZWRWZXJzaW9uKCkpOyAgIAotICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQnVpbGQgVmVyc2lvbjogIiArIFZlcnNpb24uZ2V0QnVpbGRWZXJzaW9uKCkpOyAgIAotICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWFqb3IgVmVyc2lvbjogIiArIFZlcnNpb24uZ2V0TWFqb3JWZXJzaW9uKCkpOyAgIAotICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWlub3IgVmVyc2lvbjogIiArIFZlcnNpb24uZ2V0TWlub3JWZXJzaW9uKCkpOyAgIAotICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHJvZHVjdCBOYW1lOiAiICsgVmVyc2lvbi5nZXRQcm9kdWN0TmFtZSgpKTsgICAKKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZ1bGwgVmVyc2lvbjogIiArIFZlcnNpb24uZ2V0RnVsbFZlcnNpb24oKSk7CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBYmJyZXZpYXRlZCBWZXJzaW9uOiAiICsgVmVyc2lvbi5nZXRBYmJyZXZpYXRlZFZlcnNpb24oKSk7CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCdWlsZCBWZXJzaW9uOiAiICsgVmVyc2lvbi5nZXRCdWlsZFZlcnNpb24oKSk7CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNYWpvciBWZXJzaW9uOiAiICsgVmVyc2lvbi5nZXRNYWpvclZlcnNpb24oKSk7CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNaW5vciBWZXJzaW9uOiAiICsgVmVyc2lvbi5nZXRNaW5vclZlcnNpb24oKSk7CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQcm9kdWN0IE5hbWU6ICIgKyBWZXJzaW9uLmdldFByb2R1Y3ROYW1lKCkpOwogICAgICB9IGNhdGNoIChmaW5hbCBOb0NsYXNzRGVmRm91bmRFcnJvciBlKSB7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQbGVhc2UgcnVuIHRoaXMgY2xhc3MgYXM6IGphdmEgLWNwIC46e2luc3RhbGwtZGlyfS9saWIvYXBwc2Vydi1leHQuamFyOiR7aW5zdGFsbC1kaXJ9L2xpYi9hcHBzZXJ2LXNlLmphcjoke2luc3RhbGwtZGlyfS9saWIvYXBwc2Vydi1ydC5qYXJcbndoZXJlICR7aW5zdGFsbC1kaXJ9IGlzIHRoZSBpbnN0YWxsYXRpb24gbG9jYXRpb24iKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9hc2FudC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vYXNhbnQvYnVpbGQucHJvcGVydGllcwppbmRleCA2MDY5NmVhLi5mZDU3MjIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9hc2FudC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2FzYW50L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE0LDcgKzE0LDcgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAjCiAKLSAKKwogCiBzdW5vbmUuaG9tZT0vZXhwb3J0L2FzOHBlCiByZXRyaWV2ZS5kaXJlY3Rvcnk9L2V4cG9ydC9hczhwZS9iaW4vcmV0cmlldmUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2FzYW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2FzYW50L2J1aWxkLnhtbAppbmRleCBiN2YxM2RmLi41YzJiN2VjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9hc2FudC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vYXNhbnQvYnVpbGQueG1sCkBAIC0yNCw3ICsyNCw3IEBACiA8IS0tIGFsbCAtLT4KIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJkZXBsb3ktcmFyLCBkZXBsb3ktd2FyLCBkZXBsb3ktZWFyLCBkZXBsb3ktcmV0cmlldmUsIHVuZGVwbG95LWFsbCIvPgogCi08dGFyZ2V0IG5hbWU9ImRlcGxveS1yYXIiIAorPHRhcmdldCBuYW1lPSJkZXBsb3ktcmFyIgogICAgIGRlc2NyaXB0aW9uPSJEZXBsb3kgdGhlIENvbm5lY3RvciI+CiAgICAgIDxzdW4tYXBwc2Vydi1kZXBsb3kKICAgICAgICAgIGZpbGU9IiR7cmFyQXBwLmZpbGV9IgpAQCAtMzgsMTAgKzM4LDEwIEBACiAgICAgICAgICBwYXNzd29yZD0iJHthZG1pbi5wYXNzd29yZH0iCiAgICAgICAgICBob3N0PSIke2FkbWluLmhvc3R9IgogICAgICAgICAgcG9ydD0iNDg0OCIKLSAgICAgIHN1bm9uZWhvbWU9IiR7c3Vub25lLmhvbWV9IiAvPiAgICAgCi08L3RhcmdldD4gCisgICAgICBzdW5vbmVob21lPSIke3N1bm9uZS5ob21lfSIgLz4KKzwvdGFyZ2V0PgogCi08dGFyZ2V0IG5hbWU9ImRlcGxveS13YXIiIAorPHRhcmdldCBuYW1lPSJkZXBsb3ktd2FyIgogICAgIGRlc2NyaXB0aW9uPSJEZXBsb3kgdGhlICBXZWJBcHAiPgogICAgICA8c3VuLWFwcHNlcnYtZGVwbG95CiAgICAgICAgICBmaWxlPSIke3dhckFwcC5maWxlfSIKQEAgLTU1LDEwICs1NSwxMCBAQAogICAgICAgICAgcGFzc3dvcmQ9IiR7YWRtaW4ucGFzc3dvcmR9IgogICAgICAgICAgaG9zdD0iJHthZG1pbi5ob3N0fSIKICAgICAgICAgIHBvcnQ9IiR7YWRtaW4ucG9ydH0iCi0gICAgICAgICBzdW5vbmVob21lPSIke3N1bm9uZS5ob21lfSIgLz4gICAgIAotPC90YXJnZXQ+IAorICAgICAgICAgc3Vub25laG9tZT0iJHtzdW5vbmUuaG9tZX0iIC8+Cis8L3RhcmdldD4KIAotPHRhcmdldCBuYW1lPSJkZXBsb3ktZWFyIiAKKzx0YXJnZXQgbmFtZT0iZGVwbG95LWVhciIKICAgICBkZXNjcmlwdGlvbj0iRGVwbG95IHRoZSBlYXJBcHAiPgogICAgICA8c3VuLWFwcHNlcnYtZGVwbG95CiAgICAgICAgICBmaWxlPSIke2VhckFwcC5maWxlfSIKQEAgLTcyLDEwICs3MiwxMCBAQAogICAgICAgICAgcGFzc3dvcmQ9IiR7YWRtaW4ucGFzc3dvcmR9IgogICAgICAgICAgaG9zdD0iJHthZG1pbi5ob3N0fSIKICAgICAgICAgIHBvcnQ9IiR7YWRtaW4ucG9ydH0iCi0gICAgICAgICBzdW5vbmVob21lPSIke3N1bm9uZS5ob21lfSIgLz4gICAgIAotPC90YXJnZXQ+IAorICAgICAgICAgc3Vub25laG9tZT0iJHtzdW5vbmUuaG9tZX0iIC8+Cis8L3RhcmdldD4KIAotPHRhcmdldCBuYW1lPSJkZXBsb3ktcmV0cmlldmUiIAorPHRhcmdldCBuYW1lPSJkZXBsb3ktcmV0cmlldmUiCiAgICAgZGVzY3JpcHRpb249IkRlcGxveSB0aGUgIEVBUiI+CiAgICAgIDxzdW4tYXBwc2Vydi1kZXBsb3kKICAgICAgICAgIGZpbGU9IiR7cmV0cmlldmVBcHAuZmlsZX0iCkBAIC04OCwxMiArODgsMTIgQEAKICAgICAgICAgIHVzZXI9IiR7YWRtaW4udXNlcn0iCiAgICAgICAgICBwYXNzd29yZD0iJHthZG1pbi5wYXNzd29yZH0iCiAgICAgICAgICBob3N0PSIke2FkbWluLmhvc3R9IgotICAgICAgICAgcG9ydD0iJHthZG1pbi5wb3J0fSIgICAgICAgICAKLQkgcmV0cmlldmVzdHVicz0iJHtyZXRyaWV2ZS5kaXJlY3Rvcnl9IgotICAgICAgICAgc3Vub25laG9tZT0iJHtzdW5vbmUuaG9tZX0iIC8+ICAgICAKLTwvdGFyZ2V0PiAKKyAgICAgICAgIHBvcnQ9IiR7YWRtaW4ucG9ydH0iCisgICAgIHJldHJpZXZlc3R1YnM9IiR7cmV0cmlldmUuZGlyZWN0b3J5fSIKKyAgICAgICAgIHN1bm9uZWhvbWU9IiR7c3Vub25lLmhvbWV9IiAvPgorPC90YXJnZXQ+CiAKLTx0YXJnZXQgbmFtZT0idW5kZXBsb3ktYWxsIiAKKzx0YXJnZXQgbmFtZT0idW5kZXBsb3ktYWxsIgogICAgIGRlc2NyaXB0aW9uPSJVbmRlcGxveSBhbGwgYXBwcyI+CiAgICAgIDxzdW4tYXBwc2Vydi11bmRlcGxveQogICAgICAgbmFtZT0iaW5ib3VuZCIKQEAgLTEyMyw2ICsxMjMsNiBAQAogICAgICAgaG9zdD0iJHthZG1pbi5ob3N0fSIKICAgICAgIHBvcnQ9IiR7YWRtaW4ucG9ydH0iCiAgICAgICBzdW5vbmVob21lPSIke3N1bm9uZS5ob21lfSIgLz4KLTwvdGFyZ2V0PiAKKzwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9kZWJ1Zy9KbXhVdGlscy9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9kZWJ1Zy9KbXhVdGlscy9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKaW5kZXggNDFlOWNkMy4uNjU3OGRmMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vZGVidWcvSm14VXRpbHMvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2RlYnVnL0pteFV0aWxzL25icHJvamVjdC9idWlsZC1pbXBsLnhtbApAQCAtMzksOSArMzksOSBAQAogLS0+CiA8cHJvamVjdCBuYW1lPSJKbXhVdGlscy1pbXBsIiBkZWZhdWx0PSJkZWZhdWx0IiBiYXNlZGlyPSIuLiIgeG1sbnM6ajJzZXByb2plY3QzPSJodHRwOi8vd3d3Lm5ldGJlYW5zLm9yZy9ucy9qMnNlLXByb2plY3QvMyIgeG1sbnM6ajJzZXByb2plY3QyPSJodHRwOi8vd3d3Lm5ldGJlYW5zLm9yZy9ucy9qMnNlLXByb2plY3QvMiIgeG1sbnM6ajJzZXByb2plY3QxPSJodHRwOi8vd3d3Lm5ldGJlYW5zLm9yZy9ucy9qMnNlLXByb2plY3QvMSI+CiAgICAgPHRhcmdldCBuYW1lPSJkZWZhdWx0IiBkZXBlbmRzPSJ0ZXN0LGphcixqYXZhZG9jIiBkZXNjcmlwdGlvbj0iQnVpbGQgYW5kIHRlc3Qgd2hvbGUgcHJvamVjdC4iLz4KLSAgICA8IS0tIAorICAgIDwhLS0KICAgICA9PT09PT09PT09PT09PT09PT09PT09Ci0gICAgSU5JVElBTElaQVRJT04gU0VDVElPTiAKKyAgICBJTklUSUFMSVpBVElPTiBTRUNUSU9OCiAgICAgPT09PT09PT09PT09PT09PT09PT09PQogICAgIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iLXByZS1pbml0Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2RlYnVnL0pteFV0aWxzL3NyYy9vcmcvZ2Yvam14L3V0aWxzL0p1c3RDb25uZWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9kZWJ1Zy9KbXhVdGlscy9zcmMvb3JnL2dmL2pteC91dGlscy9KdXN0Q29ubmVjdC5qYXZhCmluZGV4IDA3ZWM2YTAuLjJhNzU3MDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2RlYnVnL0pteFV0aWxzL3NyYy9vcmcvZ2Yvam14L3V0aWxzL0p1c3RDb25uZWN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vZGVidWcvSm14VXRpbHMvc3JjL29yZy9nZi9qbXgvdXRpbHMvSnVzdENvbm5lY3QuamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICBKTVhDb25uZWN0b3Igam14YyA9IEpNWENvbm5lY3RvckZhY3RvcnkuY29ubmVjdCh1cmwsIGVudik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGVkLCB0byB1cmw6ICIgKyB1cmxzICsgICIsIGNvbm5lY3Rpb24gaWQgPSAiICsgam14Yy5nZXRDb25uZWN0aW9uSWQoKSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oZmluYWwgU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmIChhcmdzID09IG51bGwgfHwgYXJncy5sZW5ndGggIT0gMykgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVc2FnZTogamF2YSBvcmcuam0uam14LnV0aWxzLkp1c3RDb25uZWN0IGpteHNlcnZpY2V1cmwgdXNlcm5hbWUgcGFzc3dvcmQiICsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2RlYnVnL0pteFV0aWxzL3NyYy9vcmcvZ2Yvam14L3V0aWxzL1JlYWRNZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vZGVidWcvSm14VXRpbHMvc3JjL29yZy9nZi9qbXgvdXRpbHMvUmVhZE1lLmphdmEKaW5kZXggNDc1NTI1MC4uMjY1ODc0ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vZGVidWcvSm14VXRpbHMvc3JjL29yZy9nZi9qbXgvdXRpbHMvUmVhZE1lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vZGVidWcvSm14VXRpbHMvc3JjL29yZy9nZi9qbXgvdXRpbHMvUmVhZE1lLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKICAqIEBhdXRob3IgQWRtaW5pc3RyYXRvcgogICovCiBwdWJsaWMgY2xhc3MgUmVhZE1lIHsKLSAgICAKKwogICAgIHByaXZhdGUgUmVhZE1lKCkgewogICAgIH0KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihmaW5hbCBTdHJpbmcgYXJnc1tdKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9mcmFtZXdvcmsvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vZnJhbWV3b3JrL2J1aWxkLnhtbAppbmRleCA3MWEzZmE3Li45ZmI4NTZiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9mcmFtZXdvcmsvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2ZyYW1ld29yay9idWlsZC54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIAogLS0+CiAKLTxwcm9qZWN0IG5hbWU9IkFkbWluIEZyYW1ld29yayBEZXZ0ZXN0cyIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4gIAorPHByb2plY3QgbmFtZT0iQWRtaW4gRnJhbWV3b3JrIERldnRlc3RzIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCiA8IS0tID09PT09PT09PT0gSW5pdGlhbGl6ZSBQcm9wZXJ0aWVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHthcHBzZXJ2LWFkbWluLmphcn0iLz4KICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2oyZWUuamFyfSIvPgogICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7anVuaXQuamFyfSIvPgotICAgIDwvcGF0aD4gCisgICAgPC9wYXRoPgogICAgIDxwYXRoIGlkPSJ0ZXN0LnJ1bi5jbGFzc3BhdGgiPgogICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHt0ZXN0cy53b3JrZmlsZXMuZGlyfS90ZXN0c2VydmVyYmVhbnMuamFyIi8+CiAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2NvbXBvbmVudC50ZXN0cy5jbGFzc2VzLmRpcn0iLz4KQEAgLTM5LDExICszOSwxMSBAQAogCiAKICAgICA8IS0tIGluaXQuIEluaXRpYWxpemF0aW9uIGludm9sdmVzIGNyZWF0aW5nIHB1Ymxpc2hpbmcgZGlyZWN0b3JpZXMgYW5kCi0gICAgICAgICBPUyBzcGVjaWZpYyB0YXJnZXRzLiAtLT4gCisgICAgICAgICBPUyBzcGVjaWZpYyB0YXJnZXRzLiAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImluaXQtdGVzdHMiIGRlc2NyaXB0aW9uPSIke2NvbXBvbmVudC5uYW1lfSBpbml0aWFsaXphdGlvbiI+CiAgICAgICAgIDx0c3RhbXA+CiAgICAgICAgICAgICA8Zm9ybWF0IHByb3BlcnR5PSJzdGFydC50aW1lIiBwYXR0ZXJuPSJNTS9kZC95eXl5IGhoOm1tIGFhIi8+Ci0gICAgICAgIDwvdHN0YW1wPiAgICAKKyAgICAgICAgPC90c3RhbXA+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkJ1aWxkaW5nIGNvbXBvbmVudCAke2NvbXBvbmVudC5uYW1lfSIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2NvbXBvbmVudC50ZXN0cy5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7dGVzdHMud29ya2ZpbGVzLmRpcn0iLz4KQEAgLTY4LDExICs2OCwxMSBAQAogCiA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtdGVzdHMiPgogICA8ZWNobyBtZXNzYWdlPSJDb21waWxpbmcge2NvbXBvbmVudC5uYW1lfSIvPgotICA8amF2YWMgc3JjZGlyPSIke3Rlc3RzcmMuZGlyfSIgCisgIDxqYXZhYyBzcmNkaXI9IiR7dGVzdHNyYy5kaXJ9IgogICAgICAgICAgZGVzdGRpcj0iJHtjb21wb25lbnQudGVzdHMuY2xhc3Nlcy5kaXJ9IgotICAgICAgICAgZGVidWc9IiR7amF2YWMuZGVidWd9IiAKKyAgICAgICAgIGRlYnVnPSIke2phdmFjLmRlYnVnfSIKICAgICAgICAgIG9wdGltaXplPSIke2phdmFjLm9wdGltaXplfSIKLSAgICAgICAgIHNvdXJjZT0iJHtqYXZhYy5zb3VyY2V9IiAKKyAgICAgICAgIHNvdXJjZT0iJHtqYXZhYy5zb3VyY2V9IgogICAgICAgICAgZGVwcmVjYXRpb249IiR7amF2YWMuZGVwcmVjYXRpb259IgogICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICBjbGFzc3BhdGhyZWY9InRlc3QuY29tcGlsZS5jbGFzc3BhdGgiPgpAQCAtODAsMTQgKzgwLDE0IEBACiAgIDwhLS0gICA8aW5jbHVkZSBuYW1lPSIqKi8qVGVzdC5qYXZhIi8+CiAgICAgIDxpbmNsdWRlIG5hbWU9IioqLypUZXN0cy5qYXZhIi8+ICAgICAgICAgICAgLS0+CiAgIDwvamF2YWM+Ci0JCisKIDwvdGFyZ2V0PgogCiAKIDx0YXJnZXQgbmFtZT0icnVuLXRlc3RzIiBkZXBlbmRzPSJpbml0LXRlc3RzLGNvbXBpbGUtdGVzdHMiPgotICA8amF2YSBmb3JrPSJ0cnVlIiBmYWlsb25lcnJvcj0idHJ1ZSIgCisgIDxqYXZhIGZvcms9InRydWUiIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgY2xhc3NuYW1lPSJjb20uc3VuLmVudGVycHJpc2UuYWRtaW4uQWRtaW5JbmZyYVRlc3QiID4KLTwhLS0JPGp2bWFyZyB2YWx1ZT0iLURqY292LmZpbGU9JHtqY292LmZpbGV9Ii8+IAorPCEtLSAgICA8anZtYXJnIHZhbHVlPSItRGpjb3YuZmlsZT0ke2pjb3YuZmlsZX0iLz4KIC0tPgogICAgICAgPGFyZyBsaW5lPSItdGVzdHBhdGggJHt0ZXN0cy53b3JrZmlsZXMuZGlyfSIgLz4KICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9InRlc3QucnVuLmNsYXNzcGF0aCIvPgpAQCAtOTksMTcgKzk5LDE3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7dGVzdHMud29ya2ZpbGVzLmRpcn0vc2FtcGxlcyIgaW5jbHVkZXM9IioiLz4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHt0ZXN0ZmlsZXMuZGlyfS9zYW1wbGVzIiBpbmNsdWRlcz0iKiIvPgogICA8L2RlbGV0ZT4KLSAgPGphdmEgZm9yaz0idHJ1ZSIgZmFpbG9uZXJyb3I9InRydWUiIAorICA8amF2YSBmb3JrPSJ0cnVlIiBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgIGNsYXNzbmFtZT0iY29tLnN1bi5lbnRlcnByaXNlLmFkbWluLkFkbWluSW5mcmFUZXN0IiA+CiAKIDwhLS0KLQk8anZtYXJnIHZhbHVlPSItWGRlYnVnIi8+Ci0JPGp2bWFyZyB2YWx1ZT0iLVhydW5qZHdwOnRyYW5zcG9ydD1kdF9zb2NrZXQsc2VydmVyPXksc3VzcGVuZD15LGFkZHJlc3M9OTAwOSIvPgorICAgIDxqdm1hcmcgdmFsdWU9Ii1YZGVidWciLz4KKyAgICA8anZtYXJnIHZhbHVlPSItWHJ1bmpkd3A6dHJhbnNwb3J0PWR0X3NvY2tldCxzZXJ2ZXI9eSxzdXNwZW5kPXksYWRkcmVzcz05MDA5Ii8+CiAgICAgICA8anZtYXJnIHZhbHVlPSItRGpjb3Yuc2VydmVyX3BvcnQ9MzMzMCIvPgogICAgICAgPGp2bWFyZyB2YWx1ZT0iLVhib290Y2xhc3NwYXRoL3A6L2V4cG9ydC9pYXMvc3FlLXBlL2NvZGVjb3ZlcmFnZS9qY292L2xpYi9qY292LmphciIvPgogLS0+CiAgICAgICA8YXJnIGxpbmU9Ii10ZXN0cGF0aCAke3Rlc3RzLndvcmtmaWxlcy5kaXJ9IGNyZWF0ZSIgLz4KLQk8Y2xhc3NwYXRoIHJlZmlkPSJ0ZXN0LnJ1bi5jbGFzc3BhdGgiLz4KKyAgICA8Y2xhc3NwYXRoIHJlZmlkPSJ0ZXN0LnJ1bi5jbGFzc3BhdGgiLz4KICAgPC9qYXZhPgogICAgIDxjb3B5ICB0b2Rpcj0iJHt0ZXN0ZmlsZXMuZGlyfSI+CiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHt0ZXN0cy53b3JrZmlsZXMuZGlyfSIgaW5jbHVkZXM9InNhbXBsZXMvKiIvPgpAQCAtMTE3LDE0ICsxMTcsMTQgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0cy1wcmludCIgZGVwZW5kcz0iaW5pdC10ZXN0cyxjb21waWxlLXRlc3RzIj4KLSAgPGphdmEgZm9yaz0idHJ1ZSIgZmFpbG9uZXJyb3I9InRydWUiIAkKKyAgPGphdmEgZm9yaz0idHJ1ZSIgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICBjbGFzc25hbWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5hZG1pbi5BZG1pbkluZnJhVGVzdCIgPgogICAgICAgPGFyZyBsaW5lPSItdGVzdHBhdGggJHt0ZXN0cy53b3JrZmlsZXMuZGlyfSBwcmludCIgLz4KIDwhLS0KLQk8anZtYXJnIHZhbHVlPSItWGRlYnVnIi8+Ci0JPGp2bWFyZyB2YWx1ZT0iLVhydW5qZHdwOnRyYW5zcG9ydD1kdF9zb2NrZXQsc2VydmVyPXksc3VzcGVuZD15LGFkZHJlc3M9MTA0NCIvPgorICAgIDxqdm1hcmcgdmFsdWU9Ii1YZGVidWciLz4KKyAgICA8anZtYXJnIHZhbHVlPSItWHJ1bmpkd3A6dHJhbnNwb3J0PWR0X3NvY2tldCxzZXJ2ZXI9eSxzdXNwZW5kPXksYWRkcmVzcz0xMDQ0Ii8+CiAtLT4KLQk8Y2xhc3NwYXRoIHJlZmlkPSJ0ZXN0LnJ1bi5jbGFzc3BhdGgiLz4KKyAgICA8Y2xhc3NwYXRoIHJlZmlkPSJ0ZXN0LnJ1bi5jbGFzc3BhdGgiLz4KICAgPC9qYXZhPgogPC90YXJnZXQ+CiAKQEAgLTE0Niw0ICsxNDYsNCBAQAogPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KLQkKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vZnJhbWV3b3JrL3Rlc3RmaWxlcy9kZXNjcmlwdG9ycy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9mcmFtZXdvcmsvdGVzdGZpbGVzL2Rlc2NyaXB0b3JzLnhtbAppbmRleCA5MDlhNTYwLi5kNDQ5ZjJmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9mcmFtZXdvcmsvdGVzdGZpbGVzL2Rlc2NyaXB0b3JzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9mcmFtZXdvcmsvdGVzdGZpbGVzL2Rlc2NyaXB0b3JzLnhtbApAQCAtNTMsNyArNTMsNyBAQAogPCEtLSArKysrKysrKysgIDQuIGoyZWUtYXBwbGljYXRpb24gICsrKysrKysrKysrIC0tPgogPG1iZWFuIG5hbWU9ImoyZWUtYXBwbGljYXRpb24iIGdyb3VwPSJjb25maWciID4KICAgIDxkZXNjcmlwdG9yPgotICAgICAgPGZpZWxkIG5hbWU9ImVsZW1lbnRDaGFuZ2VFdmVudCIgdmFsdWU9IkFwcGxpY2F0aW9uRGVwbG95RXZlbnQiIC8+IAorICAgICAgPGZpZWxkIG5hbWU9ImVsZW1lbnRDaGFuZ2VFdmVudCIgdmFsdWU9IkFwcGxpY2F0aW9uRGVwbG95RXZlbnQiIC8+CiAgICAgICA8ZmllbGQgbmFtZT0iT2JqZWN0TmFtZSIgdmFsdWU9InswfTp0eXBlPWoyZWUtYXBwbGljYXRpb24sbmFtZT17MX0sY2F0ZWdvcnk9Y29uZmlnIiAvPgogICAgICAgPGZpZWxkIG5hbWU9InhwYXRoIiB2YWx1ZT0iL2RvbWFpbi9hcHBsaWNhdGlvbnMvajJlZS1hcHBsaWNhdGlvbltAbmFtZT0nezF9J10iIC8+CiAgICAgICA8ZmllbGQgbmFtZT0iQ0xJTmFtZSIgdmFsdWU9ImRvbWFpbi5hcHBsaWNhdGlvbnMuajJlZS1hcHBsaWNhdGlvbi57MX0iIC8+CkBAIC02Miw3ICs2Miw3IEBACiA8IS0tICsrKysrKysrKyAgNS4gZWpiLW1vZHVsZSAgKysrKysrKysrKysgLS0+CiA8bWJlYW4gbmFtZT0iZWpiLW1vZHVsZSIgZ3JvdXA9ImNvbmZpZyIgPgogICAgPGRlc2NyaXB0b3I+Ci0gICAgICA8ZmllbGQgbmFtZT0iZWxlbWVudENoYW5nZUV2ZW50IiB2YWx1ZT0iTW9kdWxlRGVwbG95RXZlbnQiIC8+IAorICAgICAgPGZpZWxkIG5hbWU9ImVsZW1lbnRDaGFuZ2VFdmVudCIgdmFsdWU9Ik1vZHVsZURlcGxveUV2ZW50IiAvPgogICAgICAgPGZpZWxkIG5hbWU9Ik9iamVjdE5hbWUiIHZhbHVlPSJ7MH06dHlwZT1lamItbW9kdWxlLG5hbWU9ezF9LGNhdGVnb3J5PWNvbmZpZyIgLz4KICAgICAgIDxmaWVsZCBuYW1lPSJ4cGF0aCIgdmFsdWU9Ii9kb21haW4vYXBwbGljYXRpb25zL2VqYi1tb2R1bGVbQG5hbWU9J3sxfSddIiAvPgogICAgICAgPGZpZWxkIG5hbWU9IkNMSU5hbWUiIHZhbHVlPSJkb21haW4uYXBwbGljYXRpb25zLmVqYi1tb2R1bGUuezF9IiAvPgpAQCAtNzEsNyArNzEsNyBAQAogPCEtLSArKysrKysrKysgIDYuIHdlYi1tb2R1bGUgICsrKysrKysrKysrIC0tPgogPG1iZWFuIG5hbWU9IndlYi1tb2R1bGUiIGdyb3VwPSJjb25maWciID4KICAgIDxkZXNjcmlwdG9yPgotICAgICAgPGZpZWxkIG5hbWU9ImVsZW1lbnRDaGFuZ2VFdmVudCIgdmFsdWU9Ik1vZHVsZURlcGxveUV2ZW50IiAvPiAKKyAgICAgIDxmaWVsZCBuYW1lPSJlbGVtZW50Q2hhbmdlRXZlbnQiIHZhbHVlPSJNb2R1bGVEZXBsb3lFdmVudCIgLz4KICAgICAgIDxmaWVsZCBuYW1lPSJPYmplY3ROYW1lIiB2YWx1ZT0iezB9OnR5cGU9d2ViLW1vZHVsZSxuYW1lPXsxfSxjYXRlZ29yeT1jb25maWciIC8+CiAgICAgICA8ZmllbGQgbmFtZT0ieHBhdGgiIHZhbHVlPSIvZG9tYWluL2FwcGxpY2F0aW9ucy93ZWItbW9kdWxlW0BuYW1lPSd7MX0nXSIgLz4KICAgICAgIDxmaWVsZCBuYW1lPSJDTElOYW1lIiB2YWx1ZT0iZG9tYWluLmFwcGxpY2F0aW9ucy53ZWItbW9kdWxlLnsxfSIgLz4KQEAgLTgwLDcgKzgwLDcgQEAKIDwhLS0gKysrKysrKysrICA3LiBjb25uZWN0b3ItbW9kdWxlICArKysrKysrKysrKyAtLT4KIDxtYmVhbiBuYW1lPSJjb25uZWN0b3ItbW9kdWxlIiBncm91cD0iY29uZmlnIiA+CiAgICA8ZGVzY3JpcHRvcj4KLSAgICAgIDxmaWVsZCBuYW1lPSJlbGVtZW50Q2hhbmdlRXZlbnQiIHZhbHVlPSJNb2R1bGVEZXBsb3lFdmVudCIgLz4gCisgICAgICA8ZmllbGQgbmFtZT0iZWxlbWVudENoYW5nZUV2ZW50IiB2YWx1ZT0iTW9kdWxlRGVwbG95RXZlbnQiIC8+CiAgICAgICA8ZmllbGQgbmFtZT0iT2JqZWN0TmFtZSIgdmFsdWU9InswfTp0eXBlPWNvbm5lY3Rvci1tb2R1bGUsbmFtZT17MX0sY2F0ZWdvcnk9Y29uZmlnIiAvPgogICAgICAgPGZpZWxkIG5hbWU9InhwYXRoIiB2YWx1ZT0iL2RvbWFpbi9hcHBsaWNhdGlvbnMvY29ubmVjdG9yLW1vZHVsZVtAbmFtZT0nezF9J10iIC8+CiAgICAgICA8ZmllbGQgbmFtZT0iQ0xJTmFtZSIgdmFsdWU9ImRvbWFpbi5hcHBsaWNhdGlvbnMuY29ubmVjdG9yLW1vZHVsZS57MX0iIC8+CkBAIC04OSwxNCArODksMTQgQEAKIDwhLS0gKysrKysrKysrICA4LiBhcHBjbGllbnQtbW9kdWxlICArKysrKysrKysrKyAtLT4KIDxtYmVhbiBuYW1lPSJhcHBjbGllbnQtbW9kdWxlIiBncm91cD0iY29uZmlnIiA+CiAgICA8ZGVzY3JpcHRvcj4KLSAgICAgIDxmaWVsZCBuYW1lPSJlbGVtZW50Q2hhbmdlRXZlbnQiIHZhbHVlPSJNb2R1bGVEZXBsb3lFdmVudCIgLz4gCisgICAgICA8ZmllbGQgbmFtZT0iZWxlbWVudENoYW5nZUV2ZW50IiB2YWx1ZT0iTW9kdWxlRGVwbG95RXZlbnQiIC8+CiAgICAgICA8ZmllbGQgbmFtZT0iT2JqZWN0TmFtZSIgdmFsdWU9InswfTp0eXBlPWFwcGNsaWVudC1tb2R1bGUsbmFtZT17MX0sY2F0ZWdvcnk9Y29uZmlnIiAvPgogICAgICAgPGZpZWxkIG5hbWU9InhwYXRoIiB2YWx1ZT0iL2RvbWFpbi9hcHBsaWNhdGlvbnMvYXBwY2xpZW50LW1vZHVsZVtAbmFtZT0nezF9J10iIC8+CiAgICAgICA8ZmllbGQgbmFtZT0iQ0xJTmFtZSIgdmFsdWU9ImRvbWFpbi5hcHBsaWNhdGlvbnMuYXBwY2xpZW50LW1vZHVsZS57MX0iIC8+CiAgICA8L2Rlc2NyaXB0b3I+CiA8L21iZWFuPgogPCEtLSArKysrKysrKysgIDkuIHJlc291cmNlcyAgKysrKysrKysrKysgLS0+Ci08bWJlYW4gbmFtZT0icmVzb3VyY2VzIiBncm91cD0iY29uZmlnIiAKKzxtYmVhbiBuYW1lPSJyZXNvdXJjZXMiIGdyb3VwPSJjb25maWciCiAgICBjbGFzc05hbWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5hZG1pbi5tYmVhbnMuUmVzb3VyY2VzTUJlYW4iPgogICAgPGRlc2NyaXB0b3I+CiAgICAgICA8ZmllbGQgbmFtZT0iT2JqZWN0TmFtZSIgdmFsdWU9InswfTp0eXBlPXJlc291cmNlcyxjYXRlZ29yeT1jb25maWciIC8+CkBAIC0xNjcsNyArMTY3LDcgQEAKICAgICAgIDxmaWVsZCBuYW1lPSJDTElOYW1lIiB2YWx1ZT0iZG9tYWluLnJlc291cmNlcy5jb25uZWN0b3ItcmVzb3VyY2UuezF9IiAvPgogICAgPC9kZXNjcmlwdG9yPgogPC9tYmVhbj4KLTwhLS0gKysrKysrKysrICAxNy4gcmVzb3VyY2UtYWRhcHRlci1jb25maWcgICsrKysrKysrKysrIE1BTlVBTExZIE1PRElGSUVEIC0tPiAgCis8IS0tICsrKysrKysrKyAgMTcuIHJlc291cmNlLWFkYXB0ZXItY29uZmlnICArKysrKysrKysrKyBNQU5VQUxMWSBNT0RJRklFRCAtLT4KIDxtYmVhbiBuYW1lPSJyZXNvdXJjZS1hZGFwdGVyLWNvbmZpZyIgZ3JvdXA9ImNvbmZpZyI+CiAgICA8ZGVzY3JpcHRvcj4KICAgICAgIDxmaWVsZCBuYW1lPSJlbGVtZW50Q2hhbmdlRXZlbnQiIHZhbHVlPSJSZXNvdXJjZURlcGxveUV2ZW50IiAvPgpAQCAtOTU4LDcgKzk1OCw3IEBACiA8IS0tICsrKysrKysrKyAgMTMxLiBub2RlYWdlbnQtYXV0aC1yZWFsbSAgKysrKysrKysrKysgLS0+CiA8bWJlYW4gbmFtZT0ibm9kZWFnZW50LWF1dGgtcmVhbG0iIGdyb3VwPSJjb25maWciIGNsYXNzTmFtZT0iY29tLnN1bi5lbnRlcnByaXNlLmFkbWluLm1iZWFucy5BdXRoUmVhbG1NQmVhbiI+CiAgICA8ZGVzY3JpcHRvcj4KLSAgICAgIDxmaWVsZCBuYW1lPSJlbGVtZW50Q2hhbmdlRXZlbnQiIHZhbHVlPSJBdXRoUmVhbG1FdmVudCIgLz4gCisgICAgICA8ZmllbGQgbmFtZT0iZWxlbWVudENoYW5nZUV2ZW50IiB2YWx1ZT0iQXV0aFJlYWxtRXZlbnQiIC8+CiAgICAgICA8ZmllbGQgbmFtZT0iT2JqZWN0TmFtZSIgdmFsdWU9InswfTp0eXBlPWF1dGgtcmVhbG0sbm9kZS1hZ2VudD17MX0sY2F0ZWdvcnk9Y29uZmlnIiAvPgogICAgICAgPGZpZWxkIG5hbWU9InhwYXRoIiB2YWx1ZT0iL2RvbWFpbi9ub2RlLWFnZW50cy9ub2RlLWFnZW50W0BuYW1lPSd7MX0nXS9hdXRoLXJlYWxtIiAvPgogICAgICAgPGZpZWxkIG5hbWU9IkNMSU5hbWUiIHZhbHVlPSJkb21haW4ubm9kZS1hZ2VudC57MX0uYXV0aC1yZWFsbSIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2ZyYW1ld29yay90ZXN0c3JjL0FkbWluSW5mcmFUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9mcmFtZXdvcmsvdGVzdHNyYy9BZG1pbkluZnJhVGVzdC5qYXZhCmluZGV4IDkxYTFjMzkuLmI4MjkwZDEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2ZyYW1ld29yay90ZXN0c3JjL0FkbWluSW5mcmFUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vZnJhbWV3b3JrL3Rlc3RzcmMvQWRtaW5JbmZyYVRlc3QuamF2YQpAQCAtNTcsNyArNTcsNyBAQAogICAgIHByaXZhdGUgTGluZU51bWJlclJlYWRlciBfY29tcGFyZVN0cmVhbTsgLy9mb3IgQ09NUEFSRV9NT0RFIG9ubHkKICAgICBwcml2YXRlIEFkbWluVGVzdGVyIF90ZXN0ZXI7IC8vID0gbmV3IEFkbWluVGVzdGVyKF9tb2RlLCBfcmVnaXN0cnksIF9jb25maWdDb250ZXh0KTsKIAotICAgIAorCiAgICAgcHVibGljIEFkbWluSW5mcmFUZXN0KFN0cmluZyBuYW1lKSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewogICAgICAgICBzdXBlcihuYW1lKTsKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgICAgICB9CiAgICAgICAgIFRFU1RfRElSID0gYXJnc1sxXTsKICAgICAgICAgaWYobGVuZ3RoPjIpCi0gICAgICAgIHsgICAgCisgICAgICAgIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTU9ERT0iK2FyZ3NbMl0pOwogICAgICAgICAgICAgaWYoYXJnc1syXS50cmltKCkuZXF1YWxzKCJwcmludCIpKQogICAgICAgICAgICAgICAgIF9tb2RlPTI7CkBAIC0xMjYsMTcgKzEyNiwxNyBAQAogICAgICAgICBTeXN0ZW0uZXhpdChyZXN1bHQuZXJyb3JDb3VudCgpICsgcmVzdWx0LmZhaWx1cmVDb3VudCgpKTsKICAgICB9CiAKLSAgICAKKwogCiAgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAvLyoqKioqKioqKioqKioqKioqKk1CZWFuU2VydmVyIGVtdWxhdGlvbioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgcHJpdmF0ZSBPYmplY3QgZ2V0QXR0cmlidXRlKFN0cmluZyBvbk5hbWUsIFN0cmluZyBhdHRyKSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotICAgICAgICBtYmVhbiA9IF9yZWdpc3RyeS5pbnN0YW50aWF0ZUNvbmZpZ01CZWFuKG5ldyBPYmplY3ROYW1lKG9uTmFtZSksIG51bGwsIF9jb25maWdDb250ZXh0KTsgCisgICAgICAgIG1iZWFuID0gX3JlZ2lzdHJ5Lmluc3RhbnRpYXRlQ29uZmlnTUJlYW4obmV3IE9iamVjdE5hbWUob25OYW1lKSwgbnVsbCwgX2NvbmZpZ0NvbnRleHQpOwogICAgICAgICByZXR1cm4gbWJlYW4uZ2V0QXR0cmlidXRlKGF0dHIpOwogICAgIH0KLSAgICAKKwogICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgLy8qKioqKioqKioqKioqKioqKipUIEUgUyBUIFMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTYyLDI4ICsxNjIsMjggQEAKICAgICB7CiAgICAgICAgIHJ1blRlc3RDYXNlKCJ0ZXN0TUJlYW5SZWdpc3RyeSIpOwogICAgIH0KLSAgICAKKwogICAgIFN0cmluZ1tdIGxvY2F0aW9uOwogICAgIEJhc2VBZG1pbk1CZWFuIG1iZWFuOwogICAgIEF0dHJpYnV0ZUxpc3QgYXR0cnM7CiAgICAgT2JqZWN0IHJldE9iamVjdDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHRlc3RNQmVhbnNJbnN0YW50aWF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICBsb2NhdGlvbiA9IG5ldyBTdHJpbmdbXXsidGVzdGRvbWFpbiIsICJzZXJ2ZXItY29uZmlnIn07Ci0gICAgICAgIG1iZWFuID0gX3JlZ2lzdHJ5Lmluc3RhbnRpYXRlTUJlYW4oImVqYi1jb250YWluZXIiLCBsb2NhdGlvbiwgbnVsbCwgX2NvbmZpZ0NvbnRleHQpOyAKKyAgICAgICAgbWJlYW4gPSBfcmVnaXN0cnkuaW5zdGFudGlhdGVNQmVhbigiZWpiLWNvbnRhaW5lciIsIGxvY2F0aW9uLCBudWxsLCBfY29uZmlnQ29udGV4dCk7CiAgICAgICAgIGFzc2VydE5vdE51bGwoImVqYi1jb250YWluZXIgSU5TVEFOVElBVElPTiAodHlwZStsb2NhdGlvbik6IG1iZWFuPT1udWxsIiwgbWJlYW4pOwogICAgICAgICBhc3NlcnRFcXVhbHMoImNhY2hlX3Jlc2l6ZV9xdWFudGl0eSBub3QgZXF1YWwgMzIiLCBtYmVhbi5nZXRBdHRyaWJ1dGUoImNhY2hlX3Jlc2l6ZV9xdWFudGl0eSIpLCAiMzIiKTsKIAogICAgICAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgICAgIG1iZWFuID0gX3JlZ2lzdHJ5Lmluc3RhbnRpYXRlQ29uZmlnTUJlYW4obmV3IE9iamVjdE5hbWUoInRlc3Rkb21haW46dHlwZT1lamItY29udGFpbmVyLGNvbmZpZz1zZXJ2ZXItY29uZmlnLGNhdGVnb3J5PWNvbmZpZyIpLCAKLSAgICAgICAgICAgICAgICAgICAgbnVsbCwgX2NvbmZpZ0NvbnRleHQpOyAKKyAgICAgICAgbWJlYW4gPSBfcmVnaXN0cnkuaW5zdGFudGlhdGVDb25maWdNQmVhbihuZXcgT2JqZWN0TmFtZSgidGVzdGRvbWFpbjp0eXBlPWVqYi1jb250YWluZXIsY29uZmlnPXNlcnZlci1jb25maWcsY2F0ZWdvcnk9Y29uZmlnIiksCisgICAgICAgICAgICAgICAgICAgIG51bGwsIF9jb25maWdDb250ZXh0KTsKICAgICAgICAgYXNzZXJ0Tm90TnVsbCgiZWpiLWNvbnRhaW5lciBJTlNUQU5USUFUSU9OIChPYmplY3ROYW1lKTogbWJlYW49PW51bGwiLCBtYmVhbik7Ci0gICAgICAgIAorCiAgICAgICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgICAgbWJlYW4gPSBfcmVnaXN0cnkuaW5zdGFudGlhdGVDb25maWdNQmVhbihuZXcgT2JqZWN0TmFtZSgidGVzdGRvbWFpbjp0eXBlPWNvbmZpZyxuYW1lPXNlcnZlci1jb25maWcsY2F0ZWdvcnk9Y29uZmlnIiksIAotICAgICAgICAgICAgICAgICAgICBudWxsLCBfY29uZmlnQ29udGV4dCk7IAorICAgICAgICBtYmVhbiA9IF9yZWdpc3RyeS5pbnN0YW50aWF0ZUNvbmZpZ01CZWFuKG5ldyBPYmplY3ROYW1lKCJ0ZXN0ZG9tYWluOnR5cGU9Y29uZmlnLG5hbWU9c2VydmVyLWNvbmZpZyxjYXRlZ29yeT1jb25maWciKSwKKyAgICAgICAgICAgICAgICAgICAgbnVsbCwgX2NvbmZpZ0NvbnRleHQpOwogICAgICAgICBhc3NlcnROb3ROdWxsKCJjb25maWcgSU5TVEFOVElBVElPTiBCeSBPYmplY3ROYW1lOiBtYmVhbj09bnVsbCIsIG1iZWFuKTsKIC8vX3Rlc3Rlci50ZXN0TUJlYW5zSW5zdGFudGlhdGlvbigpOwogLy9ydW5UZXN0Q2FzZSgidGVzdE1CZWFuc0luc3RhbnRpYXRpb24iKTsKQEAgLTE5MywyMiArMTkzLDIyIEBACiAgICAgewogICAgICAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgIGxvY2F0aW9uID0gbmV3IFN0cmluZ1tdeyJ0ZXN0ZG9tYWluIiwgInNlcnZlci1jb25maWcifTsKLSAgICAgICAgbWJlYW4gPSBfcmVnaXN0cnkuaW5zdGFudGlhdGVNQmVhbigiZWpiLWNvbnRhaW5lciIsIGxvY2F0aW9uLCBudWxsLCBfY29uZmlnQ29udGV4dCk7IAorICAgICAgICBtYmVhbiA9IF9yZWdpc3RyeS5pbnN0YW50aWF0ZU1CZWFuKCJlamItY29udGFpbmVyIiwgbG9jYXRpb24sIG51bGwsIF9jb25maWdDb250ZXh0KTsKICAgICAgICAgYXNzZXJ0Tm90TnVsbCgiZWpiLWNvbnRhaW5lciBJTlNUQU5USUFUSU9OICh0eXBlK2xvY2F0aW9uKTogbWJlYW49PW51bGwiLCBtYmVhbik7Ci0gICAgICAgIAorCiAgICAgICAgIGFzc2VydEVxdWFscygiY2FjaGVfcmVzaXplX3F1YW50aXR5IG5vdCBlcXVhbCAzMiIsIG1iZWFuLmdldEF0dHJpYnV0ZSgiY2FjaGVfcmVzaXplX3F1YW50aXR5IiksICAiMzIiKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJjYWNoZV9pZGxlX3RpbWVvdXRfaW5fc2Vjb25kcyBub3QgZXF1YWwgNjAwIiwgbWJlYW4uZ2V0QXR0cmlidXRlKCJjYWNoZV9pZGxlX3RpbWVvdXRfaW5fc2Vjb25kcyIpLCAiNjAwIik7CiAgICAgICAgIC8vZW51bWVyYXRpb24KICAgICAgICAgYXNzZXJ0RXF1YWxzKCJjb21taXQtb3B0aW9uICE9IEIiLCBtYmVhbi5nZXRBdHRyaWJ1dGUoImNvbW1pdF9vcHRpb24iKSwgIkIiKTsKLSAgICAgICAgCi0gICAgICAgIHRyeSAKKworICAgICAgICB0cnkKICAgICAgICAgewogICAgICAgICAgICAgbWJlYW4uZ2V0QXR0cmlidXRlKCJ3cm9uZ19hdHRyaWJ1dGUiKTsKICAgICAgICAgICAgIGZhaWwoIndyb25nX2F0dHJpYnV0ZSBkaWQgbm90IGNhdXNlIGV4Y2VwdGlvbiIpOwogICAgICAgICB9IGNhdGNoIChBdHRyaWJ1dGVOb3RGb3VuZEV4Y2VwdGlvbiBhbmZlKQogICAgICAgICB7CiAgICAgICAgIH0KLSAgICAgICAgdHJ5IAorICAgICAgICB0cnkKICAgICAgICAgewogICAgICAgICAgICAgLy9zY2FzZSBzZW5zaWJpbGl0eSB0ZXN0CiAgICAgICAgICAgICBtYmVhbi5nZXRBdHRyaWJ1dGUoImNvbW1pdF9PcHRpb24iKTsKQEAgLTIxNiw3ICsyMTYsNyBAQAogICAgICAgICB9IGNhdGNoIChBdHRyaWJ1dGVOb3RGb3VuZEV4Y2VwdGlvbiBhbmZlKQogICAgICAgICB7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICB9CiAKIC8qICAgIHB1YmxpYyB2b2lkIHRlc3RNQmVhbnNDcmVhdGVDaGlsZCgpIHRocm93cyBFeGNlcHRpb24KQEAgLTIyNiwxNCArMjI2LDE0IEBACiAgICAgewogICAgICAgICBydW5UZXN0Q2FzZShuZXcgU3RyaW5nW117InRlc3RNQmVhbnNHZXR0ZXJzU2V0dGVycyJ9LCAiR2V0dGVyc1NldHRlcnMiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB0ZXN0TUJlYW5zU2V0QXR0cmlidWUoKSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewogICAgICAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgIGxvY2F0aW9uID0gbmV3IFN0cmluZ1tdeyJ0ZXN0ZG9tYWluIiwgInNlcnZlci1jb25maWcifTsKLSAgICAgICAgbWJlYW4gPSBfcmVnaXN0cnkuaW5zdGFudGlhdGVNQmVhbigiZWpiLWNvbnRhaW5lciIsIGxvY2F0aW9uLCBudWxsLCBfY29uZmlnQ29udGV4dCk7IAorICAgICAgICBtYmVhbiA9IF9yZWdpc3RyeS5pbnN0YW50aWF0ZU1CZWFuKCJlamItY29udGFpbmVyIiwgbG9jYXRpb24sIG51bGwsIF9jb25maWdDb250ZXh0KTsKICAgICAgICAgYXNzZXJ0Tm90TnVsbCgiZWpiLWNvbnRhaW5lciBJTlNUQU5USUFUSU9OICh0eXBlK2xvY2F0aW9uKTogbWJlYW49PW51bGwiLCBtYmVhbik7Ci0gICAgICAgIAorCiAgICAgICAgIG1iZWFuLnNldEF0dHJpYnV0ZShuZXcgQXR0cmlidXRlKCJjYWNoZV9yZXNpemVfcXVhbnRpdHkiLCAgIjM1IikpOwogICAgICAgICBhc3NlcnRFcXVhbHMoImNhY2hlX3Jlc2l6ZV9xdWFudGl0eSBub3QgZXF1YWwgMzUiLCBtYmVhbi5nZXRBdHRyaWJ1dGUoImNhY2hlX3Jlc2l6ZV9xdWFudGl0eSIpLCAgIjM1Iik7CiAgICAgICAgIG1iZWFuLnNldEF0dHJpYnV0ZShuZXcgQXR0cmlidXRlKCJjYWNoZV9yZXNpemVfcXVhbnRpdHkiLCAgIjM2IikpOwpAQCAtMjY0LDcgKzI2NCw3IEBACiAgICAgewogICAgICAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgIGxvY2F0aW9uID0gbmV3IFN0cmluZ1tdeyJ0ZXN0ZG9tYWluIiwgInNlcnZlci1jb25maWcifTsKLSAgICAgICAgbWJlYW4gPSBfcmVnaXN0cnkuaW5zdGFudGlhdGVNQmVhbigiaHR0cC1zZXJ2aWNlIiwgbG9jYXRpb24sIG51bGwsIF9jb25maWdDb250ZXh0KTsgCisgICAgICAgIG1iZWFuID0gX3JlZ2lzdHJ5Lmluc3RhbnRpYXRlTUJlYW4oImh0dHAtc2VydmljZSIsIGxvY2F0aW9uLCBudWxsLCBfY29uZmlnQ29udGV4dCk7CiAgICAgICAgIGFzc2VydE5vdE51bGwoImh0dHAtc2VydmljZSBJTlNUQU5USUFUSU9OICh0eXBlK2xvY2F0aW9uKTogbWJlYW49PW51bGwiLCBtYmVhbik7CiAgICAgICAgIGF0dHJzID0gbmV3IEF0dHJpYnV0ZUxpc3QoKTsKICAgICAgICAgYXR0cnMuYWRkKG5ldyBBdHRyaWJ1dGUoImFkZHJlc3MiLCIwLjAuMC4wIikpOwpAQCAtMjc5LDExICsyNzksMTEgQEAKICAgICAgICAgYXNzZXJ0Tm90TnVsbCgiY3JlYXRlSHR0cExpc3RlbmVyOiByZXRPYmplY3Q9PW51bGwiLCByZXRPYmplY3QpOwogICAgICAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgIGxvY2F0aW9uID0gbmV3IFN0cmluZ1tdeyJ0ZXN0ZG9tYWluIiwgInNlcnZlci1jb25maWciLCAidGVzdC1saXN0ZW5lciJ9OwotICAgICAgICBtYmVhbiA9IF9yZWdpc3RyeS5pbnN0YW50aWF0ZU1CZWFuKCJodHRwLWxpc3RlbmVyIiwgbG9jYXRpb24sIG51bGwsIF9jb25maWdDb250ZXh0KTsgCisgICAgICAgIG1iZWFuID0gX3JlZ2lzdHJ5Lmluc3RhbnRpYXRlTUJlYW4oImh0dHAtbGlzdGVuZXIiLCBsb2NhdGlvbiwgbnVsbCwgX2NvbmZpZ0NvbnRleHQpOwogICAgICAgICBhc3NlcnROb3ROdWxsKCJodHRwLWxpc3RlbmVyIElOU1RBTlRJQVRJT04gKHR5cGUrbG9jYXRpb24pOiBtYmVhbj09bnVsbCIsIG1iZWFuKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJzZXJ2ZXItbmFtZSBhdHRyaWJ1dGUgdmFsdWUgaXMgbm90IFwiZW1wdHlcIiBhcyBleHBlY3RlZCIsIG1iZWFuLmdldEF0dHJpYnV0ZSgic2VydmVyLW5hbWUiKSwiIik7CiAgICAgICAgIGFzc2VydE51bGwoInNlcnZlci1uYW1lIGF0dHJpYnV0ZSB2YWx1ZSBpcyBub3QgbnVsbCBhcyBleHBlY3RlZCIsIG1iZWFuLmdldEF0dHJpYnV0ZSgicmVkaXJlY3QtcG9ydCIpKTsKLSAgICAgICAgX2NvbmZpZ0NvbnRleHQuZmx1c2goKTsgICAgICAgCisgICAgICAgIF9jb25maWdDb250ZXh0LmZsdXNoKCk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9mcmFtZXdvcmsvdGVzdHNyYy9BZG1pblRlc3RFeGNlcHRpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2ZyYW1ld29yay90ZXN0c3JjL0FkbWluVGVzdEV4Y2VwdGlvbi5qYXZhCmluZGV4IDU4NjQwMTEuLjhlMDY1MDggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2ZyYW1ld29yay90ZXN0c3JjL0FkbWluVGVzdEV4Y2VwdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2ZyYW1ld29yay90ZXN0c3JjL0FkbWluVGVzdEV4Y2VwdGlvbi5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgLyoqCiAgICAgICAgIENyZWF0ZXMgbmV3IDxjb2RlPk1CZWFuQ29uZmlnRXhjZXB0aW9uPC9jb2RlPiB3aXRob3V0IGRldGFpbCBtZXNzYWdlLgogICAgICovCi0gICAgCisKICAgICBwdWJsaWMgQWRtaW5UZXN0RXhjZXB0aW9uKGludCBpTGluZSwgU3RyaW5nIHN0ckxpbmUsIFN0cmluZyBzYW1wbGVMaW5lKQogICAgIHsKICAgICAgICAgc3VwZXIoIkFkbWluVGVzdCBDb21wYXJlIEV4Y2VwdGlvbjogbGluZT0iICsgaUxpbmUgKyAiXG48PCIgKyBzdHJMaW5lICsgIj4+XG48PCIgKyBzYW1wbGVMaW5lICsgIj4+IHtzYW1wbGV9IiApOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vZnJhbWV3b3JrL3Rlc3RzcmMvQWRtaW5UZXN0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2ZyYW1ld29yay90ZXN0c3JjL0FkbWluVGVzdGVyLmphdmEKaW5kZXggMDcyMGExZi4uYzZjOTZjYSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vZnJhbWV3b3JrL3Rlc3RzcmMvQWRtaW5UZXN0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9mcmFtZXdvcmsvdGVzdHNyYy9BZG1pblRlc3Rlci5qYXZhCkBAIC0zNCwxNiArMzQsMTYgQEAKICAgIHN0YXRpYyBpbnQgQ09NUEFSRVNBTVBMRVNfTU9ERSAgID0gMDsKICAgIHN0YXRpYyBpbnQgQ1JFQVRFU0FNUExFU19NT0RFICAgID0gMTsKICAgIHN0YXRpYyBpbnQgUFJJTlRfTU9ERSAgICAgICAgICAgID0gMjsKLSAgIAorCiAgICBzdGF0aWMgaW50IF9tb2RlID0gQ09NUEFSRVNBTVBMRVNfTU9ERTsKICAgIHN0YXRpYyBTdHJpbmcgU0FNUExFU19ESVIgPSAic2FtcGxlcyI7Ci0gICAKKwogICAgIFRlc3RDYXNlIF9jYWxsZXI7CiAgICAgTUJlYW5SZWdpc3RyeSBfcmVnaXN0cnk7CiAgICAgQ29uZmlnQ29udGV4dCBfY29uZmlnQ29udGV4dDsKICAgICBzdGF0aWMgUHJpbnRXcml0ZXIgICAgICBfcHJpbnRTdHJlYW07IC8vZm9yIENSRUFURVNBTVBMRVNfTU9ERSBvbmx5CiAgICAgc3RhdGljIExpbmVOdW1iZXJSZWFkZXIgX2NvbXBhcmVTdHJlYW07IC8vZm9yIENPTVBBUkVfTU9ERSBvbmx5Ci0gCisKICAgICBwdWJsaWMgQWRtaW5UZXN0ZXIoVGVzdENhc2UgY2FsbGVyLCBpbnQgbW9kZSwgTUJlYW5SZWdpc3RyeSByZWdpc3RyeSwgQ29uZmlnQ29udGV4dCBjb25maWdDb250ZXh0LCBTdHJpbmcgdGVzdHBhdGgpCiAgICAgewogICAgICAgICBfY2FsbGVyID0gY2FsbGVyOwpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICAgICBfcHJpbnRTdHJlYW0ucHJpbnRsbihzdHIpOwogICAgICAgIGVsc2UgaWYoX21vZGU9PVBSSU5UX01PREUpCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc3RyKTsKLSAgICAgICBpZihfbW9kZT09Q09NUEFSRVNBTVBMRVNfTU9ERSkgICAgCisgICAgICAgaWYoX21vZGU9PUNPTVBBUkVTQU1QTEVTX01PREUpCiAgICAgICAgewogaWYoX2NvbXBhcmVTdHJlYW09PW51bGwpCiB7CkBAIC04OCwxMyArODgsMTMgQEAKICAgICB7CiAgICAgICAgIHByaW50bG4oIlxuXG4qKioqKioqKioqKioqICIgKyBzdHIgKyAiICoqKioqKioqKioqKioqKioqKioiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRPYmooU3RyaW5nIHRpdGxlLCBTdHJpbmcgcHJlZiwgT2JqZWN0IG9iaikgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgICAgIHByaW50bG4odGl0bGUpOwogICAgICAgICAgICAgcHJpbnRPYmoocHJlZiwgb2JqKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRPYmooU3RyaW5nIHByZWYsIE9iamVjdCBvYmopIHRocm93cyBFeGNlcHRpb24KICAgICB7CiAgICAgICAgIGlmKHByZWY9PW51bGwpCkBAIC0xNDQsMjAgKzE0NCwyMCBAQAogICAgIHsKICAgICAgICAgICAgIHByaW50T2JqKHRpdGxlLCBwcmVmLCBtYmVhbi5nZXRBdHRyaWJ1dGVzKG5ldyBTdHJpbmdbXXsiIn0pKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRBbGxQcm9wZXJ0aWVzKFN0cmluZyB0aXRsZSwgU3RyaW5nIHByZWYsIER5bmFtaWNNQmVhbiBtYmVhbikgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLSAgICAgICAgT2JqZWN0IHJldCA9IG1iZWFuLmludm9rZSgiZ2V0UHJvcGVydGllcyIsIG51bGwsIG51bGwpOyAgICAKKyAgICAgICAgT2JqZWN0IHJldCA9IG1iZWFuLmludm9rZSgiZ2V0UHJvcGVydGllcyIsIG51bGwsIG51bGwpOwogLy8gICAgICAgICAgICByZXRPYmplY3QgPSBtYmVhbi5pbnZva2UoImRlcGxveUFwcGxpY2F0aW9uIiwgbmV3IE9iamVjdFtdeyJ0ZXN0TmFtZSIsICJ0ZXN0TG9jYXRpb24iLCBudWxsLCBudWxsLCBudWxsfSwgbmV3IFN0cmluZ1tdeyJqYXZhLmxhbmcuU3RyaW5nIiwgImphdmEubGFuZy5TdHJpbmciLCAiamF2YS5sYW5nLlN0cmluZyIsICJqYXZhLmxhbmcuU3RyaW5nIiwgImphdmEubGFuZy5TdHJpbmcifSk7CiAgICAgICAgIHByaW50T2JqKHRpdGxlLCBwcmVmLCByZXQpOwogICAgIH0KICAgICBwdWJsaWMgc3RhdGljIE9iamVjdCBnZXRDb25maWdNYmVhblByb3BlcnR5KFN0cmluZyBuYW1lLCBEeW5hbWljTUJlYW4gbWJlYW4pIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0gICAgICAgIHJldHVybiBtYmVhbi5pbnZva2UoImdldFByb3BlcnR5VmFsdWUiLCBuZXcgT2JqZWN0W117bmFtZX0sIG5ldyBTdHJpbmdbXXsiamF2YS5sYW5nLlN0cmluZyJ9KTsgICAgCisgICAgICAgIHJldHVybiBtYmVhbi5pbnZva2UoImdldFByb3BlcnR5VmFsdWUiLCBuZXcgT2JqZWN0W117bmFtZX0sIG5ldyBTdHJpbmdbXXsiamF2YS5sYW5nLlN0cmluZyJ9KTsKICAgICB9CiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldENvbmZpZ01iZWFuUHJvcGVydHkoU3RyaW5nIG5hbWUsIE9iamVjdCB2YWx1ZSwgRHluYW1pY01CZWFuIG1iZWFuKSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotICAgICAgICBPYmplY3QgcmV0ID0gbWJlYW4uaW52b2tlKCJzZXRQcm9wZXJ0eSIsIG5ldyBPYmplY3RbXXtuZXcgQXR0cmlidXRlKG5hbWUsIHZhbHVlKX0sIG5ldyBTdHJpbmdbXXsiamF2YXgubWFuYWdlbWVudC5BdHRyaWJ1dGUifSk7ICAgIAorICAgICAgICBPYmplY3QgcmV0ID0gbWJlYW4uaW52b2tlKCJzZXRQcm9wZXJ0eSIsIG5ldyBPYmplY3RbXXtuZXcgQXR0cmlidXRlKG5hbWUsIHZhbHVlKX0sIG5ldyBTdHJpbmdbXXsiamF2YXgubWFuYWdlbWVudC5BdHRyaWJ1dGUifSk7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBydW5UZXN0Q2FzZShTdHJpbmcgdGVzdE5hbWUsIFN0cmluZyBzYW1wbGVOYW1lKSB0aHJvd3MgRXhjZXB0aW9uCkBAIC0yMjUsNyArMjI1LDcgQEAKICAgICBCYXNlQWRtaW5NQmVhbiBtYmVhbjsKICAgICBBdHRyaWJ1dGVMaXN0IGF0dHJzOwogICAgIE9iamVjdCByZXRPYmplY3Q7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB0ZXN0TUJlYW5SZWdpc3RyeSgpIHRocm93cyBFeGNlcHRpb24KICAgICB7CiAgICAgICAgIF9yZWdpc3RyeS5zb3J0UmVnaXN0cnlFbnRyaWVzKF9yZWdpc3RyeS5TT1JUX0JZX05BTUUpOwpAQCAtMjQ1LDMxICsyNDUsMzEgQEAKICAgICAgICAgICAgIF9jYWxsZXIuYXNzZXJ0RXF1YWxzKHN0ciwgb2JqLCBzYW1wbGUpOwogICAgIH0KICAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkIHRlc3RNQmVhbnNJbnN0YW50aWF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICB0aXRsZSgiZWpiLWNvbnRhaW5lciBJTlNUQU5USUFUSU9OICh0eXBlK2xvY2F0aW9uKSIpOwogICAgICAgICBsb2NhdGlvbiA9IG5ldyBTdHJpbmdbXXsidGVzdGRvbWFpbiIsICJzZXJ2ZXItY29uZmlnIn07Ci0gICAgICAgIG1iZWFuID0gX3JlZ2lzdHJ5Lmluc3RhbnRpYXRlTUJlYW4oImVqYi1jb250YWluZXIiLCBsb2NhdGlvbiwgbnVsbCwgX2NvbmZpZ0NvbnRleHQpOyAKKyAgICAgICAgbWJlYW4gPSBfcmVnaXN0cnkuaW5zdGFudGlhdGVNQmVhbigiZWpiLWNvbnRhaW5lciIsIGxvY2F0aW9uLCBudWxsLCBfY29uZmlnQ29udGV4dCk7CiAgICAgICAgIGFzc2VydE51bGwoIk1CZWFuIEluc3RhbmlhdGlvbjogbWJlYW49PW51bGwiLCBtYmVhbik7CiAgICAgICAgIHByaW50bG4oIiIrbWJlYW4uZ2V0QXR0cmlidXRlKCJjYWNoZV9yZXNpemVfcXVhbnRpdHkiKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygibm90IGVxdWFsIiwgbWJlYW4uZ2V0QXR0cmlidXRlKCJjYWNoZV9yZXNpemVfcXVhbnRpdHkiKSwgbmV3IEludGVnZXIoMzMpKTsKICAgICAgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICB0aXRsZSgiZWpiLWNvbnRhaW5lciBJTlNUQU5USUFUSU9OIChPYmplY3ROYW1lKSIpOwotICAgICAgICBtYmVhbiA9IF9yZWdpc3RyeS5pbnN0YW50aWF0ZUNvbmZpZ01CZWFuKG5ldyBPYmplY3ROYW1lKCJ0ZXN0ZG9tYWluOnR5cGU9ZWpiLWNvbnRhaW5lcixjb25maWc9c2VydmVyLWNvbmZpZyxjYXRlZ29yeT1jb25maWciKSwgCi0gICAgICAgICAgICAgICAgICAgIG51bGwsIF9jb25maWdDb250ZXh0KTsgCisgICAgICAgIG1iZWFuID0gX3JlZ2lzdHJ5Lmluc3RhbnRpYXRlQ29uZmlnTUJlYW4obmV3IE9iamVjdE5hbWUoInRlc3Rkb21haW46dHlwZT1lamItY29udGFpbmVyLGNvbmZpZz1zZXJ2ZXItY29uZmlnLGNhdGVnb3J5PWNvbmZpZyIpLAorICAgICAgICAgICAgICAgICAgICBudWxsLCBfY29uZmlnQ29udGV4dCk7CiAgICAgICAgIHByaW50bG4oIiIrbWJlYW4uZ2V0QXR0cmlidXRlKCJjYWNoZV9yZXNpemVfcXVhbnRpdHkiKSk7CiAgICAgICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgICAgdGl0bGUoImVqYi1jb250YWluZXIgSU5TVEFOVElBVElPTiAoT2JqZWN0TmFtZSkiKTsKLSAgICAgICAgbWJlYW4gPSBfcmVnaXN0cnkuaW5zdGFudGlhdGVDb25maWdNQmVhbihuZXcgT2JqZWN0TmFtZSgidGVzdGRvbWFpbjp0eXBlPWVqYi1jb250YWluZXIsY29uZmlnPXNlcnZlci1jb25maWcsY2F0ZWdvcnk9Y29uZmlnIiksIAotICAgICAgICAgICAgICAgICAgICBudWxsLCBfY29uZmlnQ29udGV4dCk7IAorICAgICAgICBtYmVhbiA9IF9yZWdpc3RyeS5pbnN0YW50aWF0ZUNvbmZpZ01CZWFuKG5ldyBPYmplY3ROYW1lKCJ0ZXN0ZG9tYWluOnR5cGU9ZWpiLWNvbnRhaW5lcixjb25maWc9c2VydmVyLWNvbmZpZyxjYXRlZ29yeT1jb25maWciKSwKKyAgICAgICAgICAgICAgICAgICAgbnVsbCwgX2NvbmZpZ0NvbnRleHQpOwogICAgICAgICBwcmludGxuKCIiK21iZWFuLmdldEF0dHJpYnV0ZSgiY2FjaGVfcmVzaXplX3F1YW50aXR5IikpOwogICAgICAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgIHRpdGxlKCJjb25maWcgSU5TVEFOVElBVElPTiBCeSBPYmplY3ROYW1lIik7Ci0gICAgICAgIG1iZWFuID0gX3JlZ2lzdHJ5Lmluc3RhbnRpYXRlQ29uZmlnTUJlYW4obmV3IE9iamVjdE5hbWUoInRlc3Rkb21haW46dHlwZT1jb25maWcsbmFtZT1zZXJ2ZXItY29uZmlnLGNhdGVnb3J5PWNvbmZpZyIpLCAKLSAgICAgICAgICAgICAgICAgICAgbnVsbCwgX2NvbmZpZ0NvbnRleHQpOyAKKyAgICAgICAgbWJlYW4gPSBfcmVnaXN0cnkuaW5zdGFudGlhdGVDb25maWdNQmVhbihuZXcgT2JqZWN0TmFtZSgidGVzdGRvbWFpbjp0eXBlPWNvbmZpZyxuYW1lPXNlcnZlci1jb25maWcsY2F0ZWdvcnk9Y29uZmlnIiksCisgICAgICAgICAgICAgICAgICAgIG51bGwsIF9jb25maWdDb250ZXh0KTsKICAgICAgICAgcHJpbnRsbigiIiArICgobWJlYW4hPW51bGwpPyJvayI6ImZhaWxlZCIpKTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgdGVzdE1CZWFuc0luZm8oKSB0aHJvd3MgRXhjZXB0aW9uCkBAIC0yODAsNyArMjgwLDcgQEAKICAgICAgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICB0aXRsZSgiZWpiLWNvbnRhaW5lciBJTlNUQU5USUFUSU9OIik7CiAgICAgICAgIGxvY2F0aW9uID0gbmV3IFN0cmluZ1tdeyJ0ZXN0ZG9tYWluIiwgInNlcnZlci1jb25maWcifTsKLSAgICAgICAgbWJlYW4gPSBfcmVnaXN0cnkuaW5zdGFudGlhdGVNQmVhbigiZWpiLWNvbnRhaW5lciIsIGxvY2F0aW9uLCBudWxsLCBfY29uZmlnQ29udGV4dCk7IAorICAgICAgICBtYmVhbiA9IF9yZWdpc3RyeS5pbnN0YW50aWF0ZU1CZWFuKCJlamItY29udGFpbmVyIiwgbG9jYXRpb24sIG51bGwsIF9jb25maWdDb250ZXh0KTsKICAgICAgICAgcHJpbnRsbigiIittYmVhbi5nZXRBdHRyaWJ1dGUoImNhY2hlX3Jlc2l6ZV9xdWFudGl0eSIpKTsKIAogICAgICAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yOTUsOCArMjk1LDggQEAKICAgICAgICAgICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgICAgICAgIHRpdGxlKCJyZXNvdXJjZXMgSW5zdGFudGlhdGUoKSIpOwogICAgICAgICAgICAgbG9jYXRpb24gPSBuZXcgU3RyaW5nW117InRlc3Rkb21haW4ifTsKLSAgICAgICAgICAgIG1iZWFuID0gX3JlZ2lzdHJ5Lmluc3RhbnRpYXRlTUJlYW4oInJlc291cmNlcyIsIGxvY2F0aW9uLCBudWxsLCBfY29uZmlnQ29udGV4dCk7IAotICAgICAgICAgICAgCisgICAgICAgICAgICBtYmVhbiA9IF9yZWdpc3RyeS5pbnN0YW50aWF0ZU1CZWFuKCJyZXNvdXJjZXMiLCBsb2NhdGlvbiwgbnVsbCwgX2NvbmZpZ0NvbnRleHQpOworCiAgICAgICAgICAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICB0aXRsZSgicmVzb3VyY2VzLT4gZ2V0Q3VzdG9tUmVzb3VyY2UoKSIpOwogICAgICAgICAgICAgcmV0T2JqZWN0ID0gbWJlYW4uaW52b2tlKCJnZXRDdXN0b21SZXNvdXJjZSIsIG51bGwsIG51bGwpOyAvL25ldyBPYmplY3RbXXt9LCBuZXcgU3RyaW5nW117fSk7CkBAIC0zMDksMTUgKzMwOSwxNSBAQAogICAgICAgICAgICAgYXR0cnMuYWRkKG5ldyBBdHRyaWJ1dGUoInJlc190eXBlIiwgInRlc3RSZXNUeXBlMiIpKTsKICAgICAgICAgICAgIGF0dHJzLmFkZChuZXcgQXR0cmlidXRlKCJmYWN0b3J5X2NsYXNzIiwgInRlc3RGYWN0b3J5Q2xhc3MyIikpOwogICAgICAgICAgICAgcHJpbnRPYmooIklucHV0IEF0dHJpYnV0ZXM6IiwgIiAgICIsIGF0dHJzKTsKLS8vICAgICAgICAgIHJldE9iamVjdCA9IG1iZWFuLmludm9rZSgiY3JlYXRlQ3VzdG9tUmVzb3VyY2UiLCBuZXcgT2JqZWN0W117YXR0cnMsIG51bGwsIG51bGx9LCAKLS8vICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXXthdHRycy5nZXRDbGFzcygpLmdldE5hbWUoKSwiamF2YS51dGlsLlByb3BlcnRpZXMiLCJqYXZhLmxhbmcuU3RyaW5nIn0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAgICAgICAgICByZXRPYmplY3QgPSBtYmVhbi5pbnZva2UoImNyZWF0ZUN1c3RvbVJlc291cmNlIiwgbmV3IE9iamVjdFtde2F0dHJzLCBudWxsLCBudWxsfSwKKy8vICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXXthdHRycy5nZXRDbGFzcygpLmdldE5hbWUoKSwiamF2YS51dGlsLlByb3BlcnRpZXMiLCJqYXZhLmxhbmcuU3RyaW5nIn0pOwogICAgICAgICAgICAgcmV0T2JqZWN0ID0gbWJlYW4uaW52b2tlKCJjcmVhdGVDdXN0b21SZXNvdXJjZSIsIG5ldyBPYmplY3RbXXthdHRyc30sIG5ldyBTdHJpbmdbXXthdHRycy5nZXRDbGFzcygpLmdldE5hbWUoKX0pOwogICAgICAgICAgICAgcHJpbnRPYmooIlJldHVybmVkIG9iamVjdDoiLCAiICAgICAgIiwgcmV0T2JqZWN0KTsKICAgICAgICAgICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgICAgICAgIHRpdGxlKCJyZXNvdXJjZXMtPiBnZXRDdXN0b21SZXNvdXJjZUJ5Sm5kaU5hbWUodGVzdEpuZGlOYW1lMikiKTsKICAgICAgICAgICAgIHJldE9iamVjdCA9IG1iZWFuLmludm9rZSgiZ2V0Q3VzdG9tUmVzb3VyY2VCeUpuZGlOYW1lIiwgbmV3IE9iamVjdFtdeyJ0ZXN0Sm5kaU5hbWUyIn0sIG5ldyBTdHJpbmdbXXsiamF2YS5sYW5nLlN0cmluZyJ9KTsKICAgICAgICAgICAgIHByaW50T2JqKCJSZXR1cm5lZCBvYmplY3Q6IiwgIiAgICAgICIsIHJldE9iamVjdCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAgdGl0bGUoInJlc291cmNlcy0+IGdldEN1c3RvbVJlc291cmNlKCkiKTsKICAgICAgICAgICAgIHJldE9iamVjdCA9IG1iZWFuLmludm9rZSgiZ2V0Q3VzdG9tUmVzb3VyY2UiLCBudWxsLCBudWxsKTsgLy9uZXcgT2JqZWN0W117fSwgbmV3IFN0cmluZ1tde30pOwpAQCAtMzI1LDUxICszMjUsNTEgQEAKIAogICAgICAgICAgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAgdGl0bGUoImN1c3RvbS1yZXNvdXJjZS0+IEluc3RhbnRpYXRlKHRlc3RKbmRpTmFtZTIpIik7Ci0gICAgICAgICAgICBtYmVhbiA9IF9yZWdpc3RyeSAuaW5zdGFudGlhdGVNQmVhbigiY3VzdG9tLXJlc291cmNlIiwgbmV3IFN0cmluZ1tdeyJ0ZXN0ZG9tYWluIiwidGVzdEpuZGlOYW1lMiJ9LCBudWxsLCBfY29uZmlnQ29udGV4dCk7IAorICAgICAgICAgICAgbWJlYW4gPSBfcmVnaXN0cnkgLmluc3RhbnRpYXRlTUJlYW4oImN1c3RvbS1yZXNvdXJjZSIsIG5ldyBTdHJpbmdbXXsidGVzdGRvbWFpbiIsInRlc3RKbmRpTmFtZTIifSwgbnVsbCwgX2NvbmZpZ0NvbnRleHQpOwogICAgICAgICAgICAgcHJpbnRPYmooInJldHVybmVkIGN1c3RvbS1yZXNvdXJjZVt0ZXN0Sm5kaU5hbWUyXSBtYmVhbjoiLG1iZWFuKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICB0aXRsZSgiY3VzdG9tLXJlc291cmNlW3Rlc3RKbmRpTmFtZTJdLT4gZ2V0QXR0cmlidXRlcygpIik7CiAgICAgICAgICAgICBwcmludEFsbEF0dHJpYnV0ZXMoIkF0dHJpYnV0ZXM6IiwgIiAgICIsIG1iZWFuKTsKIAogICAgICAgICAgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAgdGl0bGUoImN1c3RvbS1yZXNvdXJjZS0+IEluc3RhbnRpYXRlKHRlc3RKbmRpTmFtZTIpIHVzaW5nIE9iamVjdE5hbWUiKTsKLSAgICAgICAgICAgIG1iZWFuID0gX3JlZ2lzdHJ5IC5pbnN0YW50aWF0ZUNvbmZpZ01CZWFuKG5ldyBPYmplY3ROYW1lKCJ0ZXN0ZG9tYWluOnR5cGU9Y3VzdG9tLXJlc291cmNlLGpuZGktbmFtZT10ZXN0Sm5kaU5hbWUyLGNhdGVnb3J5PWNvbmZpZyIpLCBudWxsLCBfY29uZmlnQ29udGV4dCk7IAorICAgICAgICAgICAgbWJlYW4gPSBfcmVnaXN0cnkgLmluc3RhbnRpYXRlQ29uZmlnTUJlYW4obmV3IE9iamVjdE5hbWUoInRlc3Rkb21haW46dHlwZT1jdXN0b20tcmVzb3VyY2Usam5kaS1uYW1lPXRlc3RKbmRpTmFtZTIsY2F0ZWdvcnk9Y29uZmlnIiksIG51bGwsIF9jb25maWdDb250ZXh0KTsKICAgICAgICAgICAgIHByaW50T2JqKCJyZXR1cm5lZCBjdXN0b20tcmVzb3VyY2VbdGVzdEpuZGlOYW1lMl0gbWJlYW46IixtYmVhbik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAgdGl0bGUoImN1c3RvbS1yZXNvdXJjZVt0ZXN0Sm5kaU5hbWUyXS0+IGdldEF0dHJpYnV0ZXMoKSIpOwogICAgICAgICAgICAgcHJpbnRBbGxBdHRyaWJ1dGVzKCJBdHRyaWJ1dGVzOiIsICIgICAiLCBtYmVhbik7CiAgICAgICAgICAgICB0aXRsZSgicmVzb3VyY2VzLT4gZ2V0Q3VzdG9tUmVzb3VyY2UoKSIpOwogICAgICAgICAgICAgbG9jYXRpb24gPSBuZXcgU3RyaW5nW117InRlc3Rkb21haW4ifTsKLSAgICAgICAgICAgIG1iZWFuID0gX3JlZ2lzdHJ5IC5pbnN0YW50aWF0ZU1CZWFuKCJyZXNvdXJjZXMiLCBsb2NhdGlvbiwgbnVsbCwgX2NvbmZpZ0NvbnRleHQpOyAKKyAgICAgICAgICAgIG1iZWFuID0gX3JlZ2lzdHJ5IC5pbnN0YW50aWF0ZU1CZWFuKCJyZXNvdXJjZXMiLCBsb2NhdGlvbiwgbnVsbCwgX2NvbmZpZ0NvbnRleHQpOwogICAgICAgICAgICAgcmV0T2JqZWN0ID0gbWJlYW4uaW52b2tlKCJnZXRDdXN0b21SZXNvdXJjZSIsIG51bGwsIG51bGwpOyAvL25ldyBPYmplY3RbXXt9LCBuZXcgU3RyaW5nW117fSk7CiAgICAgICAgICAgICBwcmludE9iaigiUmV0dXJuZWQgb2JqZWN0OiIsIiAgIixyZXRPYmplY3QpOwogICAgICAgICAgICAgdGl0bGUoInJlc291cmNlcy0+IHJlbW92ZUN1c3RvbVJlc291cmNlQnlKbmRpTmFtZSh0ZXN0Sm5kaU5hbWUyKSIpOwogICAgICAgICAgICAgcmV0T2JqZWN0ID0gbWJlYW4uaW52b2tlKCJyZW1vdmVDdXN0b21SZXNvdXJjZUJ5Sm5kaU5hbWUiLCBuZXcgT2JqZWN0W117InRlc3RKbmRpTmFtZTIifSwgbmV3IFN0cmluZ1tdeyJqYXZhLmxhbmcuU3RyaW5nIn0pOwogICAgICAgICAgICAgcHJpbnRPYmooIlJldHVybmVkIG9iamVjdDoiLCAiICAgICAgIiwgcmV0T2JqZWN0KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICB0aXRsZSgicmVzb3VyY2VzLT4gZ2V0Q3VzdG9tUmVzb3VyY2UoKSIpOwogICAgICAgICAgICAgbG9jYXRpb24gPSBuZXcgU3RyaW5nW117InRlc3Rkb21haW4ifTsKLSAgICAgICAgICAgIG1iZWFuID0gX3JlZ2lzdHJ5IC5pbnN0YW50aWF0ZU1CZWFuKCJyZXNvdXJjZXMiLCBsb2NhdGlvbiwgbnVsbCwgX2NvbmZpZ0NvbnRleHQpOyAKKyAgICAgICAgICAgIG1iZWFuID0gX3JlZ2lzdHJ5IC5pbnN0YW50aWF0ZU1CZWFuKCJyZXNvdXJjZXMiLCBsb2NhdGlvbiwgbnVsbCwgX2NvbmZpZ0NvbnRleHQpOwogICAgICAgICAgICAgcmV0T2JqZWN0ID0gbWJlYW4uaW52b2tlKCJnZXRDdXN0b21SZXNvdXJjZSIsIG51bGwsIG51bGwpOyAvL25ldyBPYmplY3RbXXt9LCBuZXcgU3RyaW5nW117fSk7CiAgICAgICAgICAgICBwcmludE9iaigiUmV0dXJuZWQgb2JqZWN0OiIsIiAgIixyZXRPYmplY3QpOwotICAgICAgICAgICAgCisKICAgICB9CiAgICAgcHVibGljIHZvaWQgdGVzdFByb3BlcnRpZXNPcGVyYXRpb25zKCkgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgICAgICAgIHRpdGxlKCJEb21haW4gTUJlYW4gSW5zdGFudGlhdGUoKSIpOwogICAgICAgICAgICAgbG9jYXRpb24gPSBuZXcgU3RyaW5nW117InRlc3Rkb21haW4ifTsKLSAgICAgICAgICAgIG1iZWFuID0gX3JlZ2lzdHJ5Lmluc3RhbnRpYXRlTUJlYW4oImRvbWFpbiIsIGxvY2F0aW9uLCBudWxsLCBfY29uZmlnQ29udGV4dCk7IAorICAgICAgICAgICAgbWJlYW4gPSBfcmVnaXN0cnkuaW5zdGFudGlhdGVNQmVhbigiZG9tYWluIiwgbG9jYXRpb24sIG51bGwsIF9jb25maWdDb250ZXh0KTsKICAgICAgICAgICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgICAgICAgIHRpdGxlKCJEb21haW4gLT4gc2V0UHJvcGVydHkoKSIpOwogICAgICAgICAgICAgc2V0Q29uZmlnTWJlYW5Qcm9wZXJ0eSgidGVzdFByb3BOYW1lMSIsICJ0ZXN0UHJvcFZhbHVlMSIsIG1iZWFuKTsKICAgICAgICAgICAgIHNldENvbmZpZ01iZWFuUHJvcGVydHkoInRlc3RQcm9wTmFtZTIiLCAidGVzdFByb3BWYWx1ZTIiLCBtYmVhbik7CiAgICAgICAgICAgICBzZXRDb25maWdNYmVhblByb3BlcnR5KCJ0ZXN0UHJvcE5hbWUzIiwgInRlc3RQcm9wVmFsdWUzIiwgbWJlYW4pOwogICAgICAgICAgICAgc2V0Q29uZmlnTWJlYW5Qcm9wZXJ0eSgidGVzdFByb3BOYW1lNCIsICJ0ZXN0UHJvcFZhbHVlNCIsIG1iZWFuKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICB0aXRsZSgiRG9tYWluIC0+IGdldFByb3BlcnRpZXMoKSIpOwogICAgICAgICAgICAgcHJpbnRBbGxQcm9wZXJ0aWVzKCJQcm9wZXJ0aWVzOiIsICIgICAgICAiLCBtYmVhbik7CkBAIC0zODMsNyArMzgzLDcgQEAKICAgICAgICAgICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgICAgICAgIHRpdGxlKCJEb21haW4gTUJlYW4gSW5zdGFudGlhdGUoKSIpOwogICAgICAgICAgICAgbG9jYXRpb24gPSBuZXcgU3RyaW5nW117InRlc3Rkb21haW4ifTsKLSAgICAgICAgICAgIG1iZWFuID0gX3JlZ2lzdHJ5Lmluc3RhbnRpYXRlTUJlYW4oImRvbWFpbiIsIGxvY2F0aW9uLCBudWxsLCBfY29uZmlnQ29udGV4dCk7IAorICAgICAgICAgICAgbWJlYW4gPSBfcmVnaXN0cnkuaW5zdGFudGlhdGVNQmVhbigiZG9tYWluIiwgbG9jYXRpb24sIG51bGwsIF9jb25maWdDb250ZXh0KTsKIC8qIE5FRURTIFRPIEJFIElOVkVTVElHQVRFRCBmb3IgRkNTIHdoeSBub3Qgd29ya2luZwogICAgICAgICAgICAgcHJpbnRPYmooIlJldHVybmVkIG9iamVjdDoiLCIgICIsbWJlYW4pOwogICAgICAgICAgICAgdGl0bGUoImdldERlZmF1bHRBdHRyaWJ1dGVWYWx1ZXMoJ2h0dHAtbGlzdGVuZXInLCBudWxsKSB0ZXN0Iik7CkBAIC0zOTksNyArMzk5LDcgQEAKICAgICAgICAgICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgICAgICAgIHRpdGxlKCJ0aHJlYWQtcG9vbHMgSW5zdGFudGlhdGUoKSIpOwogICAgICAgICAgICAgbG9jYXRpb24gPSBuZXcgU3RyaW5nW117InRlc3Rkb21haW4iLCAic2VydmVyLWNvbmZpZyJ9OwotICAgICAgICAgICAgbWJlYW4gPSBfcmVnaXN0cnkuaW5zdGFudGlhdGVNQmVhbigidGhyZWFkLXBvb2xzIiwgbG9jYXRpb24sIG51bGwsIF9jb25maWdDb250ZXh0KTsgCisgICAgICAgICAgICBtYmVhbiA9IF9yZWdpc3RyeS5pbnN0YW50aWF0ZU1CZWFuKCJ0aHJlYWQtcG9vbHMiLCBsb2NhdGlvbiwgbnVsbCwgX2NvbmZpZ0NvbnRleHQpOwogICAgICAgICAgICAgcHJpbnRPYmooIlJldHVybmVkIG9iamVjdDoiLCIgICIsbWJlYW4pOwogICAgICAgICAgICAgdGl0bGUoInRocmVhZC1wb29scy0+IGNyZWF0ZVRocmVhZFBvb2wiKTsKICAgICAgICAgICAgIGF0dHJzID0gbmV3IEF0dHJpYnV0ZUxpc3QoKTsKQEAgLTQxMiw1ICs0MTIsNSBAQAogICAgICAgICAgICAgcmV0T2JqZWN0ID0gbWJlYW4uaW52b2tlKCJjcmVhdGVUaHJlYWRQb29sIiwgbmV3IE9iamVjdFtde2F0dHJzfSwgbmV3IFN0cmluZ1tde2F0dHJzLmdldENsYXNzKCkuZ2V0TmFtZSgpfSk7CiAgICAgICAgICAgICBwcmludE9iaigiUmV0dXJuZWQgb2JqZWN0OiIsICIgICAgICAiLCByZXRPYmplY3QpOwogICAgIH0KLSAgICAgICAgICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9vZmZsaW5lY29uZmlnL0NvbmZpZ1ZpZXdlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9vZmZsaW5lY29uZmlnL0NvbmZpZ1ZpZXdlci9idWlsZC54bWwKaW5kZXggNTAwNzRjMC4uNjBkY2Y2ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vb2ZmbGluZWNvbmZpZy9Db25maWdWaWV3ZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL29mZmxpbmVjb25maWcvQ29uZmlnVmlld2VyL2J1aWxkLnhtbApAQCAtMjUsOSArMjUsOSBAQAogICAgIDxpbXBvcnQgZmlsZT0ibmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPCEtLQogCi0gICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUgCi0gICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQgCi0gICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6IAorICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlCisgICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQKKyAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZToKIAogICAgICAgLXByZS1pbml0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKICAgICAgIC1wb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKQEAgLTUzLDEyICs1MywxMiBAQAogICAgICAgICAgICAgPC9vYmZ1c2NhdGU+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQKKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogCiAgICAgQW5vdGhlciB3YXkgdG8gY3VzdG9taXplIHRoZSBidWlsZCBpcyBieSBvdmVycmlkaW5nIGV4aXN0aW5nIG1haW4gdGFyZ2V0cy4KLSAgICBUaGUgdGFyZ2V0cyBvZiBpbnRlcmVzdCBhcmU6IAorICAgIFRoZSB0YXJnZXRzIG9mIGludGVyZXN0IGFyZToKIAogICAgICAgLWluaXQtbWFjcm9kZWYtamF2YWM6ICAgICBkZWZpbmVzIG1hY3JvIGZvciBqYXZhYyBjb21waWxhdGlvbgogICAgICAgLWluaXQtbWFjcm9kZWYtanVuaXQ6ICAgICBkZWZpbmVzIG1hY3JvIGZvciBqdW5pdCBleGVjdXRpb24KQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgIC1pbml0LW1hY3JvZGVmLWphdmE6ICAgICAgZGVmaW5lcyBtYWNybyBmb3IgY2xhc3MgZXhlY3V0aW9uCiAgICAgICAtZG8tamFyLXdpdGgtbWFuaWZlc3Q6ICAgIEpBUiBidWlsZGluZyAoaWYgeW91IGFyZSB1c2luZyBhIG1hbmlmZXN0KQogICAgICAgLWRvLWphci13aXRob3V0LW1hbmlmZXN0OiBKQVIgYnVpbGRpbmcgKGlmIHlvdSBhcmUgbm90IHVzaW5nIGEgbWFuaWZlc3QpCi0gICAgICBydW46ICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0IAorICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdAogICAgICAgLWphdmFkb2MtYnVpbGQ6ICAgICAgICAgICBKYXZhZG9jIGdlbmVyYXRpb24KICAgICAgIHRlc3QtcmVwb3J0OiAgICAgICAgICAgICAgSlVuaXQgcmVwb3J0IGdlbmVyYXRpb24KIApAQCAtNzgsMTAgKzc4LDEwIEBACiAgICAgICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgTm90aWNlIHRoYXQgdGhlIG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gdGhlIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uIAotICAgIHRoZSBjb21waWxlIHRhcmdldCBhcyB0aGUgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSAKKyAgICBOb3RpY2UgdGhhdCB0aGUgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiB0aGUgamFyIHRhcmdldCBhbmQgbm90IG9ubHkgb24KKyAgICB0aGUgY29tcGlsZSB0YXJnZXQgYXMgdGhlIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGEgbGlzdCBvZiBhdmFpbGFibGUKICAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlLCBjaGVjayB0aGUgdGFyZ2V0IHlvdSBhcmUgb3ZlcnJpZGluZyBpbiB0aGUKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKICAgICAtLT4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL29mZmxpbmVjb25maWcvQ29uZmlnVmlld2VyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL29mZmxpbmVjb25maWcvQ29uZmlnVmlld2VyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbAppbmRleCAzMzMxNTAyLi44ZmQ2OWJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9vZmZsaW5lY29uZmlnL0NvbmZpZ1ZpZXdlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vb2ZmbGluZWNvbmZpZy9Db25maWdWaWV3ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCkBAIC0zOSw5ICszOSw5IEBACiAtLT4KIDxwcm9qZWN0IG5hbWU9IkNvbmZpZ1ZpZXdlci1pbXBsIiBkZWZhdWx0PSJkZWZhdWx0IiBiYXNlZGlyPSIuLiIgeG1sbnM6ajJzZXByb2plY3QzPSJodHRwOi8vd3d3Lm5ldGJlYW5zLm9yZy9ucy9qMnNlLXByb2plY3QvMyIgeG1sbnM6ajJzZXByb2plY3QyPSJodHRwOi8vd3d3Lm5ldGJlYW5zLm9yZy9ucy9qMnNlLXByb2plY3QvMiIgeG1sbnM6ajJzZXByb2plY3QxPSJodHRwOi8vd3d3Lm5ldGJlYW5zLm9yZy9ucy9qMnNlLXByb2plY3QvMSI+CiAgICAgPHRhcmdldCBuYW1lPSJkZWZhdWx0IiBkZXBlbmRzPSJ0ZXN0LGphcixqYXZhZG9jIiBkZXNjcmlwdGlvbj0iQnVpbGQgYW5kIHRlc3Qgd2hvbGUgcHJvamVjdC4iLz4KLSAgICA8IS0tIAorICAgIDwhLS0KICAgICA9PT09PT09PT09PT09PT09PT09PT09Ci0gICAgSU5JVElBTElaQVRJT04gU0VDVElPTiAKKyAgICBJTklUSUFMSVpBVElPTiBTRUNUSU9OCiAgICAgPT09PT09PT09PT09PT09PT09PT09PQogICAgIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iLXByZS1pbml0Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL29mZmxpbmVjb25maWcvQ29uZmlnVmlld2VyL3NyYy9Eb3R0ZWROYW1lSW5mby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vb2ZmbGluZWNvbmZpZy9Db25maWdWaWV3ZXIvc3JjL0RvdHRlZE5hbWVJbmZvLmphdmEKaW5kZXggOWRkYTRhMS4uNTY5NGYzOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vb2ZmbGluZWNvbmZpZy9Db25maWdWaWV3ZXIvc3JjL0RvdHRlZE5hbWVJbmZvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vb2ZmbGluZWNvbmZpZy9Db25maWdWaWV3ZXIvc3JjL0RvdHRlZE5hbWVJbmZvLmphdmEKQEAgLTMxLDE1ICszMSwxNSBAQAogewogICAgIFN0cmluZyBfbmFtZTsKICAgICBTdHJpbmcgX3BhcmVudDsKLSAgICAKLSAgICAKKworCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgRG90dGVkTmFtZUluZm8gKi8KICAgICBwdWJsaWMgRG90dGVkTmFtZUluZm8oU3RyaW5nIG5hbWUsIFN0cmluZyBwYXJlbnROYW1lKQogICAgIHsKICAgICAgICAgX25hbWUgPSBuYW1lOwogICAgICAgICBfcGFyZW50ID0gcGFyZW50TmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgaWYoX25hbWUuc3RhcnRzV2l0aChfcGFyZW50KyIuIikpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9vZmZsaW5lY29uZmlnL0NvbmZpZ1ZpZXdlci9zcmMvSlNldEFycmF5RGlhbG9nLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9vZmZsaW5lY29uZmlnL0NvbmZpZ1ZpZXdlci9zcmMvSlNldEFycmF5RGlhbG9nLmphdmEKaW5kZXggMzIxZGUzNy4uNDM5ZmQ2MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vb2ZmbGluZWNvbmZpZy9Db25maWdWaWV3ZXIvc3JjL0pTZXRBcnJheURpYWxvZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL29mZmxpbmVjb25maWcvQ29uZmlnVmlld2VyL3NyYy9KU2V0QXJyYXlEaWFsb2cuamF2YQpAQCAtMzYsOCArMzYsOCBAQAogICAgIE5hbWVIZWxwZXIgX25hbWVIZWxwZXI7CiAgICAgRG90dGVkTmFtZUluZm8gX2RvdHRlZE5hbWVJbmZvOwogICAgIC8qKiBDcmVhdGVzIG5ldyBmb3JtIEpTZXRBcnJheURpYWxvZyAqLwotICAgIHB1YmxpYyBKU2V0QXJyYXlEaWFsb2coamF2YS5hd3QuRnJhbWUgcGFyZW50LCBib29sZWFuIG1vZGFsLCAKLSAgICAgICAgICAgIE5hbWVIZWxwZXIgbmFtZUhlbHBlciwgRG90dGVkTmFtZUluZm8gZG90dGVkTmFtZUluZm8sIAorICAgIHB1YmxpYyBKU2V0QXJyYXlEaWFsb2coamF2YS5hd3QuRnJhbWUgcGFyZW50LCBib29sZWFuIG1vZGFsLAorICAgICAgICAgICAgTmFtZUhlbHBlciBuYW1lSGVscGVyLCBEb3R0ZWROYW1lSW5mbyBkb3R0ZWROYW1lSW5mbywKICAgICAgICAgICAgIFN0cmluZyBhdHRyTmFtZSwgT2JqZWN0W10gdmFsdWVzKSB7CiAgICAgICAgIHN1cGVyKHBhcmVudCwgbW9kYWwpOwogICAgICAgICBpbml0Q29tcG9uZW50cygpOwpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICB9CiAgICAgICAgIGZpbGxBcnJheVRhYmxlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgY29uc3RydWN0b3IgdG8KICAgICAgKiBpbml0aWFsaXplIHRoZSBmb3JtLgogICAgICAqIFdBUk5JTkc6IERvIE5PVCBtb2RpZnkgdGhpcyBjb2RlLiBUaGUgY29udGVudCBvZiB0aGlzIG1ldGhvZCBpcwpAQCAtMTUzLDEyICsxNTMsMTIgQEAKIAogICAgIHByaXZhdGUgdm9pZCBqT2tCdXR0b25BY3Rpb25QZXJmb3JtZWQoamF2YS5hd3QuZXZlbnQuQWN0aW9uRXZlbnQgZXZ0KSB7Ly9HRU4tRklSU1Q6ZXZlbnRfak9rQnV0dG9uQWN0aW9uUGVyZm9ybWVkCiAgICAgICAgIGlmKGpBcnJheVRhYmxlLmlzRWRpdGluZygpKSB7Ci0gICAgICAgICAgICBKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyh0aGlzLCAKKyAgICAgICAgICAgIEpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKHRoaXMsCiAgICAgICAgICAgICAgICAgIlBsZWFzZSBjb21wbGV0ZSB0YWJsZSBlZGl0aW5nIGJlZm9yZSBzdWJtaXQiLCAiIiwKICAgICAgICAgICAgICAgICAgICAgSk9wdGlvblBhbmUuSU5GT1JNQVRJT05fTUVTU0FHRSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIERlZmF1bHRUYWJsZU1vZGVsIG1vZGVsID0gKChEZWZhdWx0VGFibGVNb2RlbClqQXJyYXlUYWJsZS5nZXRNb2RlbCgpKTsKICAgICAgICAgVmVjdG9yPFZlY3Rvcj4gdmVjdG9ycyA9IG1vZGVsLmdldERhdGFWZWN0b3IoKTsKICAgICAgICAgU3RyaW5nW10gc3RycyA9IG5ldyBTdHJpbmdbdmVjdG9ycy5zaXplKCldOwpAQCAtMTY3LDkgKzE2Nyw5IEBACiAgICAgICAgICAgICBzdHJzW2ldID0gKFN0cmluZykodmVjdG9ycy5lbGVtZW50QXQoaSkuZWxlbWVudEF0KDApKTsKICAgICAgICAgfQogICAgICAgICB0cnkgewotICAgICAgICAgICAgX25hbWVIZWxwZXIuc2V0VmFsdWUoX2RvdHRlZE5hbWVJbmZvLCAKLSAgICAgICAgICAgICAgICAgICAgKFN0cmluZylfYXR0ck5hbWUsIAotICAgICAgICAgICAgICAgICAgICAoT2JqZWN0KXN0cnMsIAorICAgICAgICAgICAgX25hbWVIZWxwZXIuc2V0VmFsdWUoX2RvdHRlZE5hbWVJbmZvLAorICAgICAgICAgICAgICAgICAgICAoU3RyaW5nKV9hdHRyTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgKE9iamVjdClzdHJzLAogICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMjA3LDE0ICsyMDcsMTQgQEAKIC8vakFycmF5VGFibGUuZ2V0U2VsZWN0aW9uTW9kZWwoKS5zZXRTZWxlY3Rpb25JbnRlcnZhbChpU2VsZWN0ZWQsaVNlbGVjdGVkKTsKICAgICAgICAgakFycmF5VGFibGUuY2hhbmdlU2VsZWN0aW9uKG5Sb3dzLCBuUm93cywgZmFsc2UsIGZhbHNlKTsKICAgICB9Ly9HRU4tTEFTVDpldmVudF9qQWRkQnV0dG9uQWN0aW9uUGVyZm9ybWVkCi0gICAgCisKICAgICAvKioKICAgICAgKiBAcGFyYW0gYXJncyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKICAgICAgICAgamF2YS5hd3QuRXZlbnRRdWV1ZS5pbnZva2VMYXRlcihuZXcgUnVubmFibGUoKSB7CiAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICAgICAgbmV3IEpTZXRBcnJheURpYWxvZyhuZXcgamF2YXguc3dpbmcuSkZyYW1lKCksIAorICAgICAgICAgICAgICAgIG5ldyBKU2V0QXJyYXlEaWFsb2cobmV3IGphdmF4LnN3aW5nLkpGcmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCIsbnVsbCkuc2V0VmlzaWJsZSh0cnVlKTsKQEAgLTIyNiw3ICsyMjYsNyBAQAogICAgIHsKICAgICAgICAgZmlsbEFycmF5VGFibGUoakFycmF5VGFibGUsIF9hdHRyTmFtZSwgX3ZhbHVlcyk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGZpbGxBcnJheVRhYmxlKEpUYWJsZSB0YWJsZSwgU3RyaW5nIGhlYWRlciwgQXJyYXlMaXN0IGxpbmVzKQogICAgIHsKICAgICAgICAgdGFibGUucmVtb3ZlQWxsKCk7CkBAIC0yNDMsOSArMjQzLDkgQEAKICAgICAgICAgdGFibGUuc2V0U2VsZWN0aW9uTW9kZShMaXN0U2VsZWN0aW9uTW9kZWwuU0lOR0xFX0lOVEVSVkFMX1NFTEVDVElPTik7CiAgICAgfQogCi0gICAgCiAKLSAgICAKKworCiAgICAgLy8gVmFyaWFibGVzIGRlY2xhcmF0aW9uIC0gZG8gbm90IG1vZGlmeS8vR0VOLUJFR0lOOnZhcmlhYmxlcwogICAgIHByaXZhdGUgamF2YXguc3dpbmcuSkJ1dHRvbiBqQWRkQnV0dG9uOwogICAgIHByaXZhdGUgamF2YXguc3dpbmcuSlRhYmxlIGpBcnJheVRhYmxlOwpAQCAtMjU0LDUgKzI1NCw1IEBACiAgICAgcHJpdmF0ZSBqYXZheC5zd2luZy5KQnV0dG9uIGpSZW1vdmVCdXR0b247CiAgICAgcHJpdmF0ZSBqYXZheC5zd2luZy5KU2Nyb2xsUGFuZSBqU2Nyb2xsUGFuZTI7CiAgICAgLy8gRW5kIG9mIHZhcmlhYmxlcyBkZWNsYXJhdGlvbi8vR0VOLUVORDp2YXJpYWJsZXMKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vb2ZmbGluZWNvbmZpZy9Db25maWdWaWV3ZXIvc3JjL015VGFibGVFZGl0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL29mZmxpbmVjb25maWcvQ29uZmlnVmlld2VyL3NyYy9NeVRhYmxlRWRpdG9yLmphdmEKaW5kZXggZmJhZmMyZC4uY2Y4MzM0NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vb2ZmbGluZWNvbmZpZy9Db25maWdWaWV3ZXIvc3JjL015VGFibGVFZGl0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9vZmZsaW5lY29uZmlnL0NvbmZpZ1ZpZXdlci9zcmMvTXlUYWJsZUVkaXRvci5qYXZhCkBAIC0zMywxNiArMzMsMTYgQEAKICAqIEBhdXRob3Iga3JhdnRjaAogICovCiBwdWJsaWMgY2xhc3MgTXlUYWJsZUVkaXRvcnsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgTXlUYWJsZUVkaXRvcgogICAgICAqLwogICAgIERlZmF1bHRDZWxsRWRpdG9yIHRleHRFZGl0b3IgID0gbmV3IERlZmF1bHRDZWxsRWRpdG9yKG5ldyBKVGV4dEZpZWxkKCkpOwogICAgIHB1YmxpYyBNeVRhYmxlRWRpdG9yKCkgewogICAgIH0KLSAgICAKKwogICAgIC8qcHVibGljIENvbXBvbmVudCBnZXRUYWJsZUNlbGxFZGl0b3JDb21wb25lbnQoSlRhYmxlIHRhYmxlLCBPYmplY3QgdmFsdWUsCi0gICAgICAgICAgICAgIGJvb2xlYW4gaXNTZWxlY3RlZCwgaW50IHJvdywgaW50IGNvbHVtbikgeyAgICAKKyAgICAgICAgICAgICAgYm9vbGVhbiBpc1NlbGVjdGVkLCBpbnQgcm93LCBpbnQgY29sdW1uKSB7CiAgICAgICAgIHJldHVybiB0ZXh0RWRpdG9yLmdldFRhYmxlQ2VsbEVkaXRvckNvbXBvbmVudCgKICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUsIHZhbHVlLCBpc1NlbGVjdGVkLCByb3csIGNvbHVtbik7CiAgICAgfSovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9vZmZsaW5lY29uZmlnL0NvbmZpZ1ZpZXdlci9zcmMvTXlUYWJsZUxpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9vZmZsaW5lY29uZmlnL0NvbmZpZ1ZpZXdlci9zcmMvTXlUYWJsZUxpc3RlbmVyLmphdmEKaW5kZXggNjZlYjdhNS4uYWI3OWY4NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vb2ZmbGluZWNvbmZpZy9Db25maWdWaWV3ZXIvc3JjL015VGFibGVMaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL29mZmxpbmVjb25maWcvQ29uZmlnVmlld2VyL3NyYy9NeVRhYmxlTGlzdGVuZXIuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogICovCiBwdWJsaWMgY2xhc3MgTXlUYWJsZUxpc3RlbmVyIGltcGxlbWVudHMgVGFibGVNb2RlbExpc3RlbmVyCiB7Ci0gTm9kZVZpZXdGcmFtZSBfZnJhbWU7ICAgCisgTm9kZVZpZXdGcmFtZSBfZnJhbWU7CiAgYm9vbGVhbiBfYlByb3BlcnR5OwogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIE15VGFibGVMaXN0ZW5lciAqLwogICAgIHB1YmxpYyBNeVRhYmxlTGlzdGVuZXIoTm9kZVZpZXdGcmFtZSBmcmFtZSwgYm9vbGVhbiBiUHJvcGVydHkpCkBAIC0zOCwxMCArMzgsMTAgQEAKICAgICAgICAgX2ZyYW1lID0gZnJhbWU7CiAgICAgICAgIF9iUHJvcGVydHkgPSBiUHJvcGVydHk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdGFibGVDaGFuZ2VkKFRhYmxlTW9kZWxFdmVudCBlKSB7CiAgICAgICAgIHRoaXMuCiAgICAgICAgIF9mcmFtZS50YWJsZUNoYW5nZWQoZSwgX2JQcm9wZXJ0eSk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9vZmZsaW5lY29uZmlnL0NvbmZpZ1ZpZXdlci9zcmMvTmFtZUhlbHBlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vb2ZmbGluZWNvbmZpZy9Db25maWdWaWV3ZXIvc3JjL05hbWVIZWxwZXIuamF2YQppbmRleCA4NjJjNDYxLi5iYWQxZTdmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9vZmZsaW5lY29uZmlnL0NvbmZpZ1ZpZXdlci9zcmMvTmFtZUhlbHBlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL29mZmxpbmVjb25maWcvQ29uZmlnVmlld2VyL3NyYy9OYW1lSGVscGVyLmphdmEKQEAgLTM1LDIwICszNSwyMCBAQAogcHVibGljIGNsYXNzIE5hbWVIZWxwZXIKIHsKICAgICBPZmZsaW5lQ29uZmlnTWdyIF9tZ3I7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBOYW1lSGVscGVyICovCiAgICAgcHVibGljIE5hbWVIZWxwZXIoU3RyaW5nIGZpbGVOYW1lKSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewogICAgICAgIF9tZ3IgPSBuZXcgT2ZmbGluZUNvbmZpZ01ncihmaWxlTmFtZSk7CiAgICAgfQotICAgIAotICAgIHZvaWQgZmlsbERvdHRlZE5hbWVzVHJlZShEZWZhdWx0TXV0YWJsZVRyZWVOb2RlIHJvb3QpIAorCisgICAgdm9pZCBmaWxsRG90dGVkTmFtZXNUcmVlKERlZmF1bHRNdXRhYmxlVHJlZU5vZGUgcm9vdCkKICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotICAgICAgIGZpbGxBZGROb2RlQ2hpbGRyZW4ocm9vdCwgIiIpOyAKKyAgICAgICBmaWxsQWRkTm9kZUNoaWxkcmVuKHJvb3QsICIiKTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBmaWxsQWRkTm9kZUNoaWxkcmVuKERlZmF1bHRNdXRhYmxlVHJlZU5vZGUgcGFyZW50Tm9kZSwgCisKKyAgICB2b2lkIGZpbGxBZGROb2RlQ2hpbGRyZW4oRGVmYXVsdE11dGFibGVUcmVlTm9kZSBwYXJlbnROb2RlLAogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGFyZW50RG90dGVkTmFtZSkKICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewpAQCAtNTYsMTMgKzU2LDEzIEBACiAgICAgICAgIGZvciAoaW50IGk9MDsgaTxjaGlsZExpc3Quc2l6ZSgpOyBpKyspCiAgICAgICAgIHsKICAgICAgICAgICAgIFN0cmluZyBjaGlsZE5hbWUgPSAoU3RyaW5nKWNoaWxkTGlzdC5nZXQoaSk7Ci0gICAgICAgICAgICBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlIGNoaWxkTm9kZSA9IAorICAgICAgICAgICAgRGVmYXVsdE11dGFibGVUcmVlTm9kZSBjaGlsZE5vZGUgPQogICAgICAgICAgICAgICAgICAgICBuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZShuZXcgRG90dGVkTmFtZUluZm8oY2hpbGROYW1lLHBhcmVudERvdHRlZE5hbWUpKTsKICAgICAgICAgICAgIGZpbGxBZGROb2RlQ2hpbGRyZW4oY2hpbGROb2RlLCBjaGlsZE5hbWUpOwogICAgICAgICAgICAgcGFyZW50Tm9kZS5hZGQoY2hpbGROb2RlKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogCiAgICAgT2JqZWN0W11bXSBnZXRBdHRyaWJ1dGVzRm9yTm9kZUluUHJpbnRGb3JtKERlZmF1bHRNdXRhYmxlVHJlZU5vZGUgbm9kZSwgYm9vbGVhbiBiUHJvcGVydGllcykgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKQEAgLTc5LDcgKzc5LDcgQEAKICAgICAgICAgaW50IGlPZmZzZXQgPSBuYW1lLmxlbmd0aCgpKzE7CiAgICAgICAgIGlmKGJQcm9wZXJ0aWVzKQogICAgICAgICAgICAgaU9mZnNldCArPSAicHJvcGVydHkuIi5sZW5ndGgoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIGZvciAoaW50IGk9MDsgaTxsaXN0LnNpemUoKTsgaSsrKQogICAgICAgICB7CiAgICAgICAgICAgICBBdHRyaWJ1dGUgYXR0ciA9IChBdHRyaWJ1dGUpbGlzdC5nZXQoaSk7CkBAIC0xMDEsNyArMTAxLDcgQEAKICAgICAgICAgRG90dGVkTmFtZUluZm8gaW5mbyA9IChEb3R0ZWROYW1lSW5mbylub2RlLmdldFVzZXJPYmplY3QoKTsKICAgICAgICAgc2V0VmFsdWUoaW5mbywgbmFtZSwgdmFsdWUsIGJQcm9wZXJ0aWVzKTsKICAgICB9Ci0gICAgCisKICAgICB2b2lkIHNldFZhbHVlKERvdHRlZE5hbWVJbmZvIGluZm8sIFN0cmluZyBuYW1lLCBPYmplY3QgdmFsdWUsIGJvb2xlYW4gYlByb3BlcnRpZXMpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9vZmZsaW5lY29uZmlnL0NvbmZpZ1ZpZXdlci9zcmMvTmV3UHJvcERpYWxvZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vb2ZmbGluZWNvbmZpZy9Db25maWdWaWV3ZXIvc3JjL05ld1Byb3BEaWFsb2cuamF2YQppbmRleCA1YjQyYzA3Li5jNmI2MDQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9vZmZsaW5lY29uZmlnL0NvbmZpZ1ZpZXdlci9zcmMvTmV3UHJvcERpYWxvZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL29mZmxpbmVjb25maWcvQ29uZmlnVmlld2VyL3NyYy9OZXdQcm9wRGlhbG9nLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nW117X25hbWUsIF92YWx1ZX07CiAgICAgfQotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgbmV3IGZvcm0gTmV3UHJvcERpYWxvZyAqLwogICAgIHB1YmxpYyBOZXdQcm9wRGlhbG9nKGphdmEuYXd0LkZyYW1lIHBhcmVudCwgYm9vbGVhbiBtb2RhbCkgewogICAgICAgICBzdXBlcihwYXJlbnQsIG1vZGFsKTsKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgdGhpcy5zZXRUaXRsZSgiQWRkIG5ldyBwcm9wZXJ0eSIpOwogICAgICAgICBqUHJvcFZhbHVlLnNldFRleHQoIiIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGNvbnN0cnVjdG9yIHRvCiAgICAgICogaW5pdGlhbGl6ZSB0aGUgZm9ybS4KICAgICAgKiBXQVJOSU5HOiBEbyBOT1QgbW9kaWZ5IHRoaXMgY29kZS4gVGhlIGNvbnRlbnQgb2YgdGhpcyBtZXRob2QgaXMKQEAgLTEyOCw3ICsxMjgsNyBAQAogICAgICAgICBfdmFsdWUgPSBqUHJvcFZhbHVlLmdldFRleHQoKTsKICAgICAgICAgdGhpcy5kaXNwb3NlKCk7CiAgICAgfS8vR0VOLUxBU1Q6ZXZlbnRfak9rQnV0dG9uQWN0aW9uUGVyZm9ybWVkCi0gICAgCisKICAgICAvKioKICAgICAgKiBAcGFyYW0gYXJncyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwogICAgICAqLwpAQCAtMTM5LDcgKzEzOSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogICAgIH0KLSAgICAKKwogICAgIC8vIFZhcmlhYmxlcyBkZWNsYXJhdGlvbiAtIGRvIG5vdCBtb2RpZnkvL0dFTi1CRUdJTjp2YXJpYWJsZXMKICAgICBwcml2YXRlIGphdmF4LnN3aW5nLkpCdXR0b24gakNhbmNlbEJ1dHRvbjsKICAgICBwcml2YXRlIGphdmF4LnN3aW5nLkpMYWJlbCBqTGFiZWwxOwpAQCAtMTQ4LDUgKzE0OCw1IEBACiAgICAgcHJpdmF0ZSBqYXZheC5zd2luZy5KVGV4dEZpZWxkIGpQcm9wTmFtZTsKICAgICBwcml2YXRlIGphdmF4LnN3aW5nLkpUZXh0RmllbGQgalByb3BWYWx1ZTsKICAgICAvLyBFbmQgb2YgdmFyaWFibGVzIGRlY2xhcmF0aW9uLy9HRU4tRU5EOnZhcmlhYmxlcwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9vZmZsaW5lY29uZmlnL0NvbmZpZ1ZpZXdlci9zcmMvTm9kZVZpZXdGcmFtZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vb2ZmbGluZWNvbmZpZy9Db25maWdWaWV3ZXIvc3JjL05vZGVWaWV3RnJhbWUuamF2YQppbmRleCBlYTMxZTQyLi42YjAwMzgyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9vZmZsaW5lY29uZmlnL0NvbmZpZ1ZpZXdlci9zcmMvTm9kZVZpZXdGcmFtZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL29mZmxpbmVjb25maWcvQ29uZmlnVmlld2VyL3NyYy9Ob2RlVmlld0ZyYW1lLmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICBTdHJpbmcgX2ZpbGVOYW1lOwogICAgIFN0cmluZyBfY3VycmVudDsKICAgICBOYW1lSGVscGVyIF9uYW1lSGVscGVyOwotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgbmV3IGZvcm0gTm9kZVZpZXdGcmFtZSAqLwogICAgIHB1YmxpYyBOb2RlVmlld0ZyYW1lKCkgewogICAgICAgICBpbml0Q29tcG9uZW50cygpOwpAQCAtNTAsMTEgKzUwLDExIEBACiAgICAgICAgIHJvb3Quc2V0VXNlck9iamVjdCgiR2xhc3NGaXNoIENvbmZpZ3VyYXRpb24iKTsKICAgICAgICAgbW9kZWwucmVsb2FkKCk7CiAgICAgICAgIGpUcmVlMS5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgCisKICAgICAgICAgaW5pdFRhYmxlcygpOwotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGNvbnN0cnVjdG9yIHRvCiAgICAgICogaW5pdGlhbGl6ZSB0aGUgZm9ybS4KICAgICAgKiBXQVJOSU5HOiBEbyBOT1QgbW9kaWZ5IHRoaXMgY29kZS4gVGhlIGNvbnRlbnQgb2YgdGhpcyBtZXRob2QgaXMKQEAgLTI1NCw3ICsyNTQsNyBAQAogCiAgICAgICAgIH0KIC8vICAgICAgICBmaWxsQXJyYXlUYWJsZSgpOwotICAgICAgICBzZXRUYWJsZXNGb3JDdXJyZW50Tm9kZSgpOyAgICAgICAgCisgICAgICAgIHNldFRhYmxlc0ZvckN1cnJlbnROb2RlKCk7CiAgICAgICAgIGpQcm9wc1RhYmxlLmNoYW5nZVNlbGVjdGlvbihpU2VsZWN0ZWQsIGlTZWxlY3RlZCwgZmFsc2UsIGZhbHNlKTsKICAgICB9Ly9HRU4tTEFTVDpldmVudF9qRGVsZXRlUHJvcGVyeUFjdGlvblBlcmZvcm1lZAogCkBAIC0yNzIsNyArMjcyLDcgQEAKICAgICAgICAgakJ1dHRvbjIuc2V0RW5hYmxlZCgobmV3IEZpbGUoalRleHRGaWVsZDEuZ2V0VGV4dCgpKSkuZXhpc3RzKCkpOwogICAgIH0vL0dFTi1MQVNUOmV2ZW50X2pUZXh0RmllbGQxSW5wdXRNZXRob2RUZXh0Q2hhbmdlZAogCi0gICAgcHJpdmF0ZSB2b2lkIHNldFRhYmxlc0ZvckN1cnJlbnROb2RlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBwcml2YXRlIHZvaWQgc2V0VGFibGVzRm9yQ3VycmVudE5vZGUoKQogICAgIHsKICAgICAgICAgRGVmYXVsdE11dGFibGVUcmVlTm9kZSBub2RlID0gKERlZmF1bHRNdXRhYmxlVHJlZU5vZGUpCiAgICAgICAgICAgICAgICAgICAgICAgIGpUcmVlMS5nZXRMYXN0U2VsZWN0ZWRQYXRoQ29tcG9uZW50KCk7CkBAIC0zMDUsOCArMzA1LDggQEAKICAgICAgICAgalByb3BzVGFibGUuZ2V0TW9kZWwoKS5hZGRUYWJsZU1vZGVsTGlzdGVuZXIobmV3IE15VGFibGVMaXN0ZW5lcih0aGlzLCB0cnVlKSk7CiAgICAgICAgIGpQcm9wc1RhYmxlLmdldFNlbGVjdGlvbk1vZGVsKCkuYWRkTGlzdFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwogICAgICAgICBqRGVsZXRlUHJvcGVyeS5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKworICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBqVHJlZTFWYWx1ZUNoYW5nZWQoamF2YXguc3dpbmcuZXZlbnQuVHJlZVNlbGVjdGlvbkV2ZW50IGV2dCkvL0dFTi1GSVJTVDpldmVudF9qVHJlZTFWYWx1ZUNoYW5nZWQKICAgICB7Ly9HRU4tSEVBREVSRU5EOmV2ZW50X2pUcmVlMVZhbHVlQ2hhbmdlZApAQCAtMzIzLDcgKzMyMyw3IEBACiAgICAgICAgIFRhYmxlTW9kZWwgbW9kZWwgPSAoVGFibGVNb2RlbClldmVudC5nZXRTb3VyY2UoKTsKICAgICAgICAgT2JqZWN0IGRhdGEgPSBtb2RlbC5nZXRWYWx1ZUF0KHJvdywgY29sdW1uKTsKICAgICAgICAgT2JqZWN0IG5hbWUgPSBtb2RlbC5nZXRWYWx1ZUF0KHJvdywgMCk7Ci0gICAgICAgIAorCiAgICAgICAgIERlZmF1bHRNdXRhYmxlVHJlZU5vZGUgbm9kZSA9IChEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKQogICAgICAgICAgICAgICAgICAgICAgICBqVHJlZTEuZ2V0TGFzdFNlbGVjdGVkUGF0aENvbXBvbmVudCgpOwogICAgICAgICBpZighKG5vZGUuZ2V0VXNlck9iamVjdCgpIGluc3RhbmNlb2YgRG90dGVkTmFtZUluZm8pKQpAQCAtMzM3LDkgKzMzNyw5IEBACiAgICAgICAgICAgICBKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyh0aGlzLCAiRXhjZXB0aW9uOlxuIitlLmdldE1lc3NhZ2UoKSwiIiwgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CiAgICAgICAgICAgICBzZXRUYWJsZXNGb3JDdXJyZW50Tm9kZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGluaXRUYWJsZXMoKQogICAgIHsKICAgICAgICAgZmlsbFRhYmxlKGpBdHRyc1RhYmxlLCBuZXcgU3RyaW5nW117IkF0dHJpYnV0ZSIsIlZhbHVlIn0sIG51bGwpOwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAgICAgICAgIGpEZWxldGVQcm9wZXJ5LnNldEVuYWJsZWQoZmFsc2UpOwogCiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGZpbGxUYWJsZShKVGFibGUgdGFibGUsIFN0cmluZ1tdIGhlYWRlciwgT2JqZWN0W11bXSBsaW5lcykKICAgICB7CiAgICAgICAgIFN0cmluZ1tdIGxvbmdWYWx1ZXMgPSB7aGVhZGVyWzBdLCBoZWFkZXJbMV19OwpAQCAtMzgwLDcgKzM4MCw3IEBACiAgICAgICAgICAgICBjb2x1bW4uc2V0UHJlZmVycmVkV2lkdGgoY29tcC5nZXRQcmVmZXJyZWRTaXplKCkud2lkdGgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGpCdXR0b24xQWN0aW9uUGVyZm9ybWVkKGphdmEuYXd0LmV2ZW50LkFjdGlvbkV2ZW50IGV2dCkgey8vR0VOLUZJUlNUOmV2ZW50X2pCdXR0b24xQWN0aW9uUGVyZm9ybWVkCiAgICAgICAgIEpGaWxlQ2hvb3NlciBjaG9vc2VyID0gbmV3IEpGaWxlQ2hvb3NlcigpOwogICAgICAgICBzd2l0Y2goY2hvb3Nlci5zaG93T3BlbkRpYWxvZyh0aGlzKSkKQEAgLTQwOCw3ICs0MDgsNyBAQAogICAgICAgICBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlIHJvb3QgPSAoRGVmYXVsdE11dGFibGVUcmVlTm9kZSltb2RlbC5nZXRSb290KCk7CiAgICAgICAgIHJvb3QucmVtb3ZlQWxsQ2hpbGRyZW4oKTsKICAgICAgICAgcm9vdC5zZXRVc2VyT2JqZWN0KCJHbGFzc0Zpc2ggQ29uZmlndXJhdGlvbiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgX25hbWVIZWxwZXIgPSBuZXcgTmFtZUhlbHBlcihfZmlsZU5hbWUpOwogICAgICAgICAgICAgX25hbWVIZWxwZXIuZmlsbERvdHRlZE5hbWVzVHJlZShyb290KTsKQEAgLTQxNiwxMiArNDE2LDEyIEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2codGhpcywgIkZpbGUgY29ycnVwdGVkOlxuRXhjZXB0aW9uOlxuIitlLmdldE1lc3NhZ2UoKSwiIiwgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgbW9kZWwucmVsb2FkKCk7CiAgICAgICAgIGpUcmVlMS5zZXRFbmFibGVkKHRydWUpOwogCiAgICAgfQotICAgICAgICAKKwogICAgIGNsYXNzIE15VGFibGVNb2RlbCBleHRlbmRzIERlZmF1bHRUYWJsZU1vZGVsIHsKICAgICAgICAgLyoKICAgICAgICAgICogRG9uJ3QgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdW5sZXNzIHlvdXIgdGFibGUncwpAQCAtNDUwLDcgKzQ1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgIEpTZXRBcnJheURpYWxvZyBkaWFsb2cgPSBuZXcgSlNldEFycmF5RGlhbG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEZyYW1lLCB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9uYW1lSGVscGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEb3R0ZWROYW1lSW5mbylub2RlLmdldFVzZXJPYmplY3QoKSwgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERvdHRlZE5hbWVJbmZvKW5vZGUuZ2V0VXNlck9iamVjdCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTdHJpbmcpdGhpcy5nZXRWYWx1ZUF0KHJvdywgY29sLTEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChPYmplY3RbXSlvYmopOwogICAgICAgICAgICAgICAgICAgICBkaWFsb2cuc2V0VmlzaWJsZSh0cnVlKTsKQEAgLTQ3Nyw3ICs0NzcsNyBAQAogICAgIHB1YmxpYyB2b2lkIHZhbHVlQ2hhbmdlZChMaXN0U2VsZWN0aW9uRXZlbnQgZSkgewogICAgICAgIGpEZWxldGVQcm9wZXJ5LnNldEVuYWJsZWQoalByb3BzVGFibGUuZ2V0U2VsZWN0ZWRSb3dDb3VudCgpPjApOwogICAgIH0KLSAgICAKKwogICAgIC8vIFZhcmlhYmxlcyBkZWNsYXJhdGlvbiAtIGRvIG5vdCBtb2RpZnkvL0dFTi1CRUdJTjp2YXJpYWJsZXMKICAgICBwcml2YXRlIGphdmF4LnN3aW5nLkJ1dHRvbkdyb3VwIGJ1dHRvbkdyb3VwMTsKICAgICBwcml2YXRlIGphdmF4LnN3aW5nLkpCdXR0b24gakFkZFByb3Blcnk7CkBAIC00OTcsNSArNDk3LDUgQEAKICAgICBwcml2YXRlIGphdmF4LnN3aW5nLkpUZXh0RmllbGQgalRleHRGaWVsZDE7CiAgICAgcHJpdmF0ZSBqYXZheC5zd2luZy5KVHJlZSBqVHJlZTE7CiAgICAgLy8gRW5kIG9mIHZhcmlhYmxlcyBkZWNsYXJhdGlvbi8vR0VOLUVORDp2YXJpYWJsZXMKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vb2ZmbGluZWNvbmZpZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9vZmZsaW5lY29uZmlnL2J1aWxkLnhtbAppbmRleCBlZWZjYzUyLi42ZGMzOTE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9vZmZsaW5lY29uZmlnL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9vZmZsaW5lY29uZmlnL2J1aWxkLnhtbApAQCAtMTcsNyArMTcsNyBAQAogCiAtLT4KIAotPHByb2plY3QgbmFtZT0iT2ZmbGluZUNvbmZpZyBhZG1pbiBkZXZ0ZXN0cyIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4gIAorPHByb2plY3QgbmFtZT0iT2ZmbGluZUNvbmZpZyBhZG1pbiBkZXZ0ZXN0cyIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAogPCEtLSA9PT09PT09PT09IEluaXRpYWxpemUgUHJvcGVydGllcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIApAQCAtMzYsMjQgKzM2LDI0IEBACiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtqMmVlLmphcn0iLz4KICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2p1bml0Lmphcn0iLz4KICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7dGVzdG5nLmphcn0iLz4KLSAgICA8L3BhdGg+IAorICAgIDwvcGF0aD4KICAgICA8cGF0aCBpZD0idGVzdC5ydW4uY2xhc3NwYXRoIj4KICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7Y29tcG9uZW50LnRlc3RzLmNsYXNzZXMuZGlyfSIvPgogICAgICAgIDxwYXRoIHJlZmlkPSJ0ZXN0LmNvbXBpbGUuY2xhc3NwYXRoIi8+CiA8IS0tCiAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke3NjaGVtYTJiZWFucy5qYXJ9Ii8+Ci0gICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2pteHJpLmphcn0iLz4gCi0gICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIvZXhwb3J0L2lhcy9zcWUtcGUvY29kZWNvdmVyYWdlL2pjb3YvbGliL2pjb3YuamFyIi8+IAorICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtqbXhyaS5qYXJ9Ii8+CisgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIvZXhwb3J0L2lhcy9zcWUtcGUvY29kZWNvdmVyYWdlL2pjb3YvbGliL2pjb3YuamFyIi8+CiAtLT4KICAgICA8L3BhdGg+CiAKIAogICAgIDwhLS0gaW5pdC4gSW5pdGlhbGl6YXRpb24gaW52b2x2ZXMgY3JlYXRpbmcgcHVibGlzaGluZyBkaXJlY3RvcmllcyBhbmQKLSAgICAgICAgIE9TIHNwZWNpZmljIHRhcmdldHMuIC0tPiAKKyAgICAgICAgIE9TIHNwZWNpZmljIHRhcmdldHMuIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iaW5pdC10ZXN0cyIgZGVzY3JpcHRpb249IiR7Y29tcG9uZW50Lm5hbWV9IGluaXRpYWxpemF0aW9uIj4KICAgICAgICAgPHRzdGFtcD4KICAgICAgICAgICAgIDxmb3JtYXQgcHJvcGVydHk9InN0YXJ0LnRpbWUiIHBhdHRlcm49Ik1NL2RkL3l5eXkgaGg6bW0gYWEiLz4KLSAgICAgICAgPC90c3RhbXA+ICAgIAorICAgICAgICA8L3RzdGFtcD4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQnVpbGRpbmcgY29tcG9uZW50ICR7Y29tcG9uZW50Lm5hbWV9Ii8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LnRlc3RzLmNsYXNzZXMuZGlyfSIvPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHt0ZXN0cy53b3JrZmlsZXMuZGlyfSIvPgpAQCAtNzYsMTEgKzc2LDExIEBACiAKIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImluaXQtdGVzdHMiPgogICA8ZWNobyBtZXNzYWdlPSJDb21waWxpbmcge2NvbXBvbmVudC5uYW1lfSIvPgotICA8amF2YWMgc3JjZGlyPSIke3Rlc3RzcmMuZGlyfSIgCisgIDxqYXZhYyBzcmNkaXI9IiR7dGVzdHNyYy5kaXJ9IgogICAgICAgICAgZGVzdGRpcj0iJHtjb21wb25lbnQudGVzdHMuY2xhc3Nlcy5kaXJ9IgotICAgICAgICAgZGVidWc9IiR7amF2YWMuZGVidWd9IiAKKyAgICAgICAgIGRlYnVnPSIke2phdmFjLmRlYnVnfSIKICAgICAgICAgIG9wdGltaXplPSIke2phdmFjLm9wdGltaXplfSIKLSAgICAgICAgIHNvdXJjZT0iJHtqYXZhYy5zb3VyY2V9IiAKKyAgICAgICAgIHNvdXJjZT0iJHtqYXZhYy5zb3VyY2V9IgogICAgICAgICAgZGVwcmVjYXRpb249IiR7amF2YWMuZGVwcmVjYXRpb259IgogICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICBjbGFzc3BhdGhyZWY9InRlc3QuY29tcGlsZS5jbGFzc3BhdGgiPgpAQCAtODgsMzMgKzg4LDMzIEBACiAgIDwhLS0gICA8aW5jbHVkZSBuYW1lPSIqKi8qVGVzdC5qYXZhIi8+CiAgICAgIDxpbmNsdWRlIG5hbWU9IioqLypUZXN0cy5qYXZhIi8+ICAgICAgICAgICAgLS0+CiAgIDwvamF2YWM+Ci0JCisKIDwvdGFyZ2V0PgogCiAKIDx0YXJnZXQgbmFtZT0icnVuLXRlc3RzIiBkZXBlbmRzPSJidWlsZCI+Ci0gIDxqYXZhIGZvcms9InRydWUiIGZhaWxvbmVycm9yPSJ0cnVlIiAKKyAgPGphdmEgZm9yaz0idHJ1ZSIgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICBjbGFzc25hbWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5hZG1pbi5jb25maWcuT2ZmbGluZUNvbmZpZ1Rlc3QiID4KLTwhLS0JPGp2bWFyZyB2YWx1ZT0iLURqY292LmZpbGU9JHtqY292LmZpbGV9Ii8+IAorPCEtLSAgICA8anZtYXJnIHZhbHVlPSItRGpjb3YuZmlsZT0ke2pjb3YuZmlsZX0iLz4KIC0tPgogICAgICAgPGFyZyBsaW5lPSItdGVzdHBhdGggJHt0ZXN0cy53b3JrZmlsZXMuZGlyfSIgLz4KICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLVhkZWJ1ZyIvPgotCTxqdm1hcmcgdmFsdWU9Ii1Ybm9hZ2VudCIvPgotCTxqdm1hcmcgdmFsdWU9Ii1YcnVuamR3cDp0cmFuc3BvcnQ9ZHRfc29ja2V0LHNlcnZlcj15LHN1c3BlbmQ9bixhZGRyZXNzPTI1MDAxIi8+ICAKKyAgICA8anZtYXJnIHZhbHVlPSItWG5vYWdlbnQiLz4KKyAgICA8anZtYXJnIHZhbHVlPSItWHJ1bmpkd3A6dHJhbnNwb3J0PWR0X3NvY2tldCxzZXJ2ZXI9eSxzdXNwZW5kPW4sYWRkcmVzcz0yNTAwMSIvPgogICAgICAgPGNsYXNzcGF0aCByZWZpZD0idGVzdC5ydW4uY2xhc3NwYXRoIi8+CiAgIDwvamF2YT4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9Im9mZmxpbmUtY29tbWFuZGVyIiBkZXBlbmRzPSJidWlsZCI+Ci0gIDxqYXZhIGZvcms9InRydWUiIGZhaWxvbmVycm9yPSJ0cnVlIiAKKyAgPGphdmEgZm9yaz0idHJ1ZSIgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICBjbGFzc25hbWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5hZG1pbi5jb25maWcuT2ZmbGluZUNvbW1hbmRlciIgPgotPCEtLQk8anZtYXJnIHZhbHVlPSItRGpjb3YuZmlsZT0ke2pjb3YuZmlsZX0iLz4gCis8IS0tICAgIDxqdm1hcmcgdmFsdWU9Ii1EamNvdi5maWxlPSR7amNvdi5maWxlfSIvPgogLS0+CiAgICAgICA8YXJnIGxpbmU9Ii10ZXN0cGF0aCAke3Rlc3RzLndvcmtmaWxlcy5kaXJ9IiAvPgotICAgICAgCisKICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLVhkZWJ1ZyIvPgotCTxqdm1hcmcgdmFsdWU9Ii1Ybm9hZ2VudCIvPgotCTxqdm1hcmcgdmFsdWU9Ii1YcnVuamR3cDp0cmFuc3BvcnQ9ZHRfc29ja2V0LHNlcnZlcj15LHN1c3BlbmQ9bixhZGRyZXNzPTI1MDAxIi8+ICAKKyAgICA8anZtYXJnIHZhbHVlPSItWG5vYWdlbnQiLz4KKyAgICA8anZtYXJnIHZhbHVlPSItWHJ1bmpkd3A6dHJhbnNwb3J0PWR0X3NvY2tldCxzZXJ2ZXI9eSxzdXNwZW5kPW4sYWRkcmVzcz0yNTAwMSIvPgogCiAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJ0ZXN0LnJ1bi5jbGFzc3BhdGgiLz4KICAgPC9qYXZhPgpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgICAgIDxwYXRoIHJlZmlkPSJ0ZXN0LnJ1bi5jbGFzc3BhdGgiLz4KICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke3Rlc3RuZy5qYXJ9Ii8+CiAgICAgPC9wYXRoPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdHMtbmciCiAgICAgICAgICAgICBkZXNjcmlwdGlvbj0icnVuIGV4YW1wbGVzIHdpdGggamF2YSIKICAgICAgICAgICAgIGRlcGVuZHM9ImJ1aWxkIiA+CkBAIC0xMzcsNCArMTM3LDQgQEAKICAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgotCQorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9vZmZsaW5lY29uZmlnL3J1bnRlc3QuYmF0IGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vb2ZmbGluZWNvbmZpZy9ydW50ZXN0LmJhdAppbmRleCBkYmYxMjIxLi5iNmVjZDNkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9vZmZsaW5lY29uZmlnL3J1bnRlc3QuYmF0CisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL29mZmxpbmVjb25maWcvcnVudGVzdC5iYXQKQEAgLTEsMiArMSwyIEBACi1SRU0gLVhkZWJ1ZyAtWHJ1bmpkd3A6dHJhbnNwb3J0PWR0X3NvY2tldCxzZXJ2ZXI9eSxzdXNwZW5kPXksYWRkcmVzcz05MDA5CitSRU0gLVhkZWJ1ZyAtWHJ1bmpkd3A6dHJhbnNwb3J0PWR0X3NvY2tldCxzZXJ2ZXI9eSxzdXNwZW5kPXksYWRkcmVzcz05MDA5DQogamF2YSAtWGRlYnVnIC1YcnVuamR3cDp0cmFuc3BvcnQ9ZHRfc29ja2V0LHNlcnZlcj15LHN1c3BlbmQ9bixhZGRyZXNzPTkwMDkgLWNwIC9nZnJvb3QvcHVibGlzaC9nbGFzc2Zpc2gvbGliL2FwcHNlcnYtcnQuamFyOy9nZnJvb3QvcHVibGlzaC9nbGFzc2Zpc2gvbGliL2FwcHNlcnYtc2UuamFyOy9nZnJvb3QvcHVibGlzaC9nbGFzc2Zpc2gvbGliL2FwcHNlcnYtYWRtaW4uamFyO2J1aWxkL2ludGVybmFsL3Rlc3RjbGFzc2VzIGNvbS5zdW4uZW50ZXJwcmlzZS5hZG1pbi5jb25maWcuT2ZmbGluZUNvbW1hbmRlciAtdGVzdHBhdGggYnVpbGQvaW50ZXJuYWwvdGVzdGNsYXNzZXMvYXNhZG1pbnRlc3QKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9vZmZsaW5lY29uZmlnL3NyYy9PZmZsaW5lQ29tbWFuZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9vZmZsaW5lY29uZmlnL3NyYy9PZmZsaW5lQ29tbWFuZGVyLmphdmEKaW5kZXggZGFhZjhhZC4uYmE3NWQ4MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vb2ZmbGluZWNvbmZpZy9zcmMvT2ZmbGluZUNvbW1hbmRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL29mZmxpbmVjb25maWcvc3JjL09mZmxpbmVDb21tYW5kZXIuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgIHN0YXRpYyBTdHJpbmcgVEVTVF9ESVIgPSAiL3RtcC9hc2FkbWludGVzdCI7CiAKICAgICBwcml2YXRlIE9mZmxpbmVDb25maWdNZ3IgX21ncjsgLy8gPSBuZXcgQWRtaW5UZXN0ZXIoX21vZGUsIF9yZWdpc3RyeSwgX2NvbmZpZ0NvbnRleHQpOwotICAgIAorCiAgICAgcHVibGljIE9mZmxpbmVDb21tYW5kZXIoKSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewogICAgICAgICBfbWdyID0gbmV3IE9mZmxpbmVDb25maWdNZ3IoVEVTVF9ESVIrIi9kb21haW4ueG1sIik7CkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInVzYWdlOiBvZmZsaW5lY29uZmlndGVzdCAtdGVzdHBhdGggPHBhdGggdG8gdGVzdCBkaXJlY3Rvcnk+IFtwcmludHxjcmVhdGVdIik7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgfQotICAgICAgICBURVNUX0RJUiA9IGFyZ3NbMV07IAorICAgICAgICBURVNUX0RJUiA9IGFyZ3NbMV07CiAgICAgICAgIE9mZmxpbmVDb21tYW5kZXIgY29tbWFuZGVyID0gbmV3IE9mZmxpbmVDb21tYW5kZXIoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiPiIpOwogICAgICAgICBTdHJpbmcgY21kID0gIiI7CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgICAgICB7Ly9uZXcgY29tbWFuZAogICAgICAgICAgICAgICAgaWYoY21kLmVxdWFscygicSIpIHx8IGNtZC5lcXVhbHMoIlEiKSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIGlmKGNtZC5zdGFydHNXaXRoKCJsaXN0ICIpIHx8IGNtZC5lcXVhbHMoImxpc3QiKSkKICAgICAgICAgICAgICAgICAgICB7CkBAIC0xMTMsNyArMTEzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRVJST1IhIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAgICBhdHRycyA9IGNvbW1hbmRlci5fbWdyLmFkZFN1YnZhbHVlc1RvQXJyYXlBdHRyaWJ1dGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdC5zdWJzdHJpbmcoMCwgc3BhY2VJZHgpLnRyaW0oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0LnN1YnN0cmluZyhzcGFjZUlkeCkudHJpbSgpLnNwbGl0KCIsIikpOwpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SISIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnMgPSBjb21tYW5kZXIuX21nci5yZW1vdmVTdWJ2YWx1ZXNGcm9tQXJyYXlBdHRyaWJ1dGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdC5zdWJzdHJpbmcoMCwgc3BhY2VJZHgpLnRyaW0oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0LnN1YnN0cmluZyhzcGFjZUlkeCkudHJpbSgpLnNwbGl0KCIsIikpOwpAQCAtMTQ5LDkgKzE0OSw5IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG4gZmluaXNoZWQiKTsKICAgICB9CiAKLSAgICAKIAotICAgIAorCisKICAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgIC8vKioqKioqKioqKioqKioqKioqSEVMUEVSUyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNjQsMTggKzE2NCwxOCBAQAogICAgICAgICAgICAgQXR0cmlidXRlIGF0dHIgPSAoQXR0cmlidXRlKWF0dHJzLmdldChpKTsKICAgICAgICAgICAgIGlmKGF0dHIuZ2V0VmFsdWUoKSBpbnN0YW5jZW9mIE9iamVjdFtdKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICAgIisgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgICAgICAiKwogICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmdldE5hbWUoKSArICIgPSAiICk7CiAgICAgICAgICAgICAgICAgT2JqZWN0W10gc3ViX2F0dHJzPSAoT2JqZWN0W10pYXR0ci5nZXRWYWx1ZSgpOwogICAgICAgICAgICAgICAgIGZvcihpbnQgaj0wOyBqPHN1Yl9hdHRycy5sZW5ndGg7IGorKykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICAgICAgICAgIisgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICAgICAgICAgIisKICAgICAgICAgICAgICAgICAgICAgICAgIHN1Yl9hdHRyc1tqXSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICAgIisgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgICAgICAiKwogICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmdldE5hbWUoKSArICIgPSAiICsgYXR0ci5nZXRWYWx1ZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vb2ZmbGluZWNvbmZpZy9zcmMvT2ZmbGluZUNvbmZpZ1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL29mZmxpbmVjb25maWcvc3JjL09mZmxpbmVDb25maWdUZXN0LmphdmEKaW5kZXggMDhmMTdmMi4uYThlZTgzNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vb2ZmbGluZWNvbmZpZy9zcmMvT2ZmbGluZUNvbmZpZ1Rlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9vZmZsaW5lY29uZmlnL3NyYy9PZmZsaW5lQ29uZmlnVGVzdC5qYXZhCkBAIC00OCw3ICs0OCw3IEBACiAgICAgc3RhdGljIFN0cmluZyBURVNUX0RJUiA9ICJidWlsZC9pbnRlcm5hbC90ZXN0Y2xhc3Nlcy9hc2FkbWludGVzdCI7CiAKICAgICBwcml2YXRlIE9mZmxpbmVDb25maWdNZ3IgX21ncjsgLy8gPSBuZXcgQWRtaW5UZXN0ZXIoX21vZGUsIF9yZWdpc3RyeSwgX2NvbmZpZ0NvbnRleHQpOwotICAgIAorCiAgICAgcHVibGljIE9mZmxpbmVDb25maWdUZXN0KFN0cmluZyBuYW1lKSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewogICAgICAgICBzdXBlcihuYW1lKTsKQEAgLTk0LDE2ICs5NCwxNiBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ1c2FnZTogb2ZmbGluZWNvbmZpZ3Rlc3QgLXRlc3RwYXRoIDxwYXRoIHRvIHRlc3QgZGlyZWN0b3J5PiBbcHJpbnR8Y3JlYXRlXSIpOwogICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgIH0KLSAgICAgICAgVEVTVF9ESVIgPSBhcmdzWzFdOyAKLSBTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1RfRElSID0gIitURVNUX0RJUiApOyAgICAgICAKKyAgICAgICAgVEVTVF9ESVIgPSBhcmdzWzFdOworIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVF9ESVIgPSAiK1RFU1RfRElSICk7CiAgICAgICAgIGZpbmFsIFRlc3RSdW5uZXIgcnVubmVyPSBuZXcgVGVzdFJ1bm5lcigpOwogICAgICAgICBmaW5hbCBUZXN0UmVzdWx0IHJlc3VsdCA9IHJ1bm5lci5kb1J1bihPZmZsaW5lQ29uZmlnVGVzdC5zdWl0ZSgpLCBmYWxzZSk7CiAgICAgICAgIFN5c3RlbS5leGl0KHJlc3VsdC5lcnJvckNvdW50KCkgKyByZXN1bHQuZmFpbHVyZUNvdW50KCkpOwogICAgIH0KIAotICAgIAogCi0gICAgCisKKwogICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgLy8qKioqKioqKioqKioqKioqKipIRUxQRVJTKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEyMCw3ICsxMjAsNyBAQAogICAgICAgICBmb3IoaW50IGk9MDsgaTxhdHRycy5zaXplKCk7IGkrKykKICAgICAgICAgewogICAgICAgICAgICAgQXR0cmlidXRlIGF0dHIgPSAoQXR0cmlidXRlKWF0dHJzLmdldChpKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICAgIisgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAgICIrCiAgICAgICAgICAgICAgICAgICAgIGF0dHIuZ2V0TmFtZSgpICsgIiA9ICIgKyBhdHRyLmdldFZhbHVlKCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTQyLDcgKzE0Miw3IEBACiAgICAgewogICAgICAgICBhc3NlcnROb3ROdWxsKCJfbWdyPT1udWxsIiwgX21ncik7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QoZ3JvdXBzID0geyJPZmZsaW5lQ29uZmlnVGVzdHMifSkKICAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0V2lsZGNhcmRBdHRyaWJ1dGVzKCkgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKQEAgLTE2Niw3ICsxNjYsNyBAQAogICAgICAgICBhdHRycyA9IF9tZ3IuZ2V0QXR0cmlidXRlcygic2VydmVyLWNvbmZpZy5odHRwLXNlcnZpY2UudmlydHVhbC1zZXJ2ZXIuc2VydmVyLmlkIik7CiAgICAgICAgIHByaW50QXR0cmlidXRlcygiICAgICAtPT09PT09IHNlcnZlci1jb25maWcuaHR0cC1zZXJ2aWNlLnZpcnR1YWwtc2VydmVyLnNlcnZlci5pZCIsIGF0dHJzKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdChncm91cHMgPSB7Ik9mZmxpbmVDb25maWdUZXN0cyJ9KQogICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRQcm9wZXJ0aWVzKCkgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKQEAgLTE3Niw3ICsxNzYsNyBAQAogICAgICAgICBhdHRycyA9IF9tZ3IuZ2V0QXR0cmlidXRlcygic2VydmVyLWNvbmZpZy5odHRwLXNlcnZpY2UudmlydHVhbC1zZXJ2ZXIuc2VydmVyLnByb3BlcnR5LmNodWJha2EiKTsKICAgICAgICAgcHJpbnRBdHRyaWJ1dGVzKCIgICAgID09PT09PSBzZXJ2ZXItY29uZmlnLmh0dHAtc2VydmljZS52aXJ0dWFsLXNlcnZlci5zZXJ2ZXIucHJvcGVydHkuY2h1YmFrYSIsIGF0dHJzKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdChncm91cHMgPSB7Ik9mZmxpbmVDb25maWdUZXN0cyJ9KQogICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRXaWxkY2FyZFByb3BlcnRpZXMoKSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewpAQCAtMjI1LDcgKzIyNSw3IEBACiAgICAgICAgIGF0dHJzID0gX21nci5nZXRBdHRyaWJ1dGVzKCJzZXJ2ZXItY29uZmlnLmh0dHAtc2VydmljZS52aXJ0dWFsLXNlcnZlci5zZXJ2ZXIuc3RhdGUiKTsKICAgICAgICAgcHJpbnRBdHRyaWJ1dGVzKCIgICAgID09PT09PSBnZXQgYWZ0ZXIgc2V0IChieSBzZXJ2ZXItY29uZmlnKSIsIGF0dHJzKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdChncm91cHMgPSB7Ik9mZmxpbmVDb25maWdUZXN0cyJ9KQogICAgIHB1YmxpYyB2b2lkIHRlc3RBZGRQcm9wZXJ0eSgpIHRocm93cyBFeGNlcHRpb24KICAgICB7CkBAIC0yMzcsNyArMjM3LDcgQEAKICAgICAgICAgYXR0cnMgPSBfbWdyLmdldEF0dHJpYnV0ZXMoInNlcnZlci1jb25maWcuaHR0cC1zZXJ2aWNlLnZpcnR1YWwtc2VydmVyLnNlcnZlci5wcm9wZXJ0eS5xd2VydHkiKTsKICAgICAgICAgcHJpbnRBdHRyaWJ1dGVzKCIgICAgID09PT09PSBnZXQgYWZ0ZXIgc2V0IiwgYXR0cnMpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0KGdyb3VwcyA9IHsiT2ZmbGluZUNvbmZpZ1Rlc3RzIn0pCiAgICAgcHVibGljIHZvaWQgdGVzdERlbGV0ZVByb3BlcnR5KCkgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL2J1aWxkLnhtbAppbmRleCBmY2QyMDA4Li4xMTVlZDIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvYnVpbGQueG1sCkBAIC0yNSwxMTIgKzI1LDExMiBAQAogICAgICZwcm9wczsKICAgICAmY29tbW9uOwogICAgIDxwcm9wZXJ0eSBuYW1lPSJzcmMuZGlyIiB2YWx1ZT0ic3JjIi8+Ci0gICAgPHByb3BlcnR5IG5hbWU9InNyYy1uZy5kaXIiIHZhbHVlPSJ0ZXN0bmciLz4gCi0gICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIvPiAKKyAgICA8cHJvcGVydHkgbmFtZT0ic3JjLW5nLmRpciIgdmFsdWU9InRlc3RuZyIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iZGlzdC5kaXIiIHZhbHVlPSJkaXN0Ii8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImRvbWFpbi5kaXIiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMSIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJtYmVhbi1sb2FkaW5nLWZvbGRlciIgdmFsdWU9IiR7ZG9tYWluLmRpcn0vYXBwbGljYXRpb25zL21iZWFucyIvPgogCi0JPCEtLSAjIyMjIyMjIyMjICBhbGwgICMjIyMjIyMjIyMjIyMgLS0+CisgICAgPCEtLSAjIyMjIyMjIyMjICBhbGwgICMjIyMjIyMjIyMjIyMgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImRlcGxveSwgbWFrZWphciIgLz4KIAotCTwhLS0gIyMjIyMjIyMjIyAgc2V0dXAgICMjIyMjIyMjIyMjIyMgLS0+CisgICAgPCEtLSAjIyMjIyMjIyMjICBzZXR1cCAgIyMjIyMjIyMjIyMjIyAtLT4KICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7Y2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7ZGlzdC5kaXJ9Ii8+CiAgICAgPC90YXJnZXQ+CiAKLQk8IS0tICMjIyMjIyMjIyMgIGJ1aWxkICAjIyMjIyMjIyMjIyMjIC0tPgotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9InNldHVwIj4KLQkJPG1rZGlyIGRpcj0iJHtjbGFzc2VzLmRpcn0iLz4KLQkJPGphdmFjIAotCQkJc3JjZGlyPSIke3NyYy5kaXJ9IgotCQkJZGVzdGRpcj0iJHtjbGFzc2VzLmRpcn0iCi0JCQlkZWJ1Zz0ib24iPgotCQkJPGNsYXNzcGF0aD4KLQkJCQk8cGF0aGVsZW1lbnQgcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9Ii8+Ci0JCQkJPHBhdGhlbGVtZW50IHBhdGg9IiR7Y2xhc3Nlcy5kaXJ9Ii8+CisgICAgPCEtLSAjIyMjIyMjIyMjICBidWlsZCAgIyMjIyMjIyMjIyMjIyAtLT4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJzZXR1cCI+CisgICAgICAgIDxta2RpciBkaXI9IiR7Y2xhc3Nlcy5kaXJ9Ii8+CisgICAgICAgIDxqYXZhYworICAgICAgICAgICAgc3JjZGlyPSIke3NyYy5kaXJ9IgorICAgICAgICAgICAgZGVzdGRpcj0iJHtjbGFzc2VzLmRpcn0iCisgICAgICAgICAgICBkZWJ1Zz0ib24iPgorICAgICAgICAgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9Ii8+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7Y2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi90ZXN0bmcuamFyIi8+Ci0JCQk8L2NsYXNzcGF0aD4KLQkJPC9qYXZhYz4KLQkJPGNvcHkgdG9kaXI9IiR7Y2xhc3Nlcy5kaXJ9L3Rlc3QiIGZpbGU9IkxvY2FsU3RyaW5ncy5wcm9wZXJ0aWVzIi8+Ci0JPC90YXJnZXQ+CisgICAgICAgICAgICA8L2NsYXNzcGF0aD4KKyAgICAgICAgPC9qYXZhYz4KKyAgICAgICAgPGNvcHkgdG9kaXI9IiR7Y2xhc3Nlcy5kaXJ9L3Rlc3QiIGZpbGU9IkxvY2FsU3RyaW5ncy5wcm9wZXJ0aWVzIi8+CisgICAgPC90YXJnZXQ+CiAKLQk8IS0tICMjIyMjIyMjIyMgIHJ1biAgIyMjIyMjIyMjIyMjIyAtLT4KLQk8dGFyZ2V0IG5hbWU9InJ1biI+IAotCQk8YW50Y2FsbCB0YXJnZXQ9InJ1bm1haW4iLz4KLQk8L3RhcmdldD4KKyAgICA8IS0tICMjIyMjIyMjIyMgIHJ1biAgIyMjIyMjIyMjIyMjIyAtLT4KKyAgICA8dGFyZ2V0IG5hbWU9InJ1biI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVubWFpbiIvPgorICAgIDwvdGFyZ2V0PgogCiAKLQk8IS0tICMjIyMjIyMjIyMgIHJ1bm1haW4gIyMjIyMjIyMjIyMjIyAtLT4KKyAgICA8IS0tICMjIyMjIyMjIyMgIHJ1bm1haW4gIyMjIyMjIyMjIyMjIyAtLT4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVubWFpbiIgZGVwZW5kcz0iYnVpbGQiPgogICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5UZXN0RHJpdmVyIgotCSAgZGlyPSIuIgorICAgICAgZGlyPSIuIgogICAgICAgICAgIGZvcms9InllcyI+Ci0JIDwhLS0KLQkgPGFyZyB2YWx1ZT0iJHthZG1pbi51c2VyfSIvPgotCSAgPGFyZyB2YWx1ZT0iJHthZG1pbi5wYXNzd29yZH0iLz4KLQkgIDxhcmcgdmFsdWU9IiR7YWRtaW4uaG9zdH0iLz4KLQkgIDxhcmcgdmFsdWU9IiR7YWRtaW4ucG9ydH0iLz4KLQkgIDxhcmcgdmFsdWU9IiR7YWRtaW4uc2VjdXJlfSIvPgotCSAgPGFyZyB2YWx1ZT0idGVzdHMubGlzdCIvPgotCSAgLS0+Ci0JICAgIDxqdm1hcmcgbGluZT0iLVhkZWJ1ZyAtWG5vYWdlbnQgLVhydW5qZHdwOnRyYW5zcG9ydD1kdF9zb2NrZXQsYWRkcmVzcz0zMzMzLHN1c3BlbmQ9bixzZXJ2ZXI9eSAtRGphdmEuY29tcGlsZXI9Tk9ORSIvPgorICAgICA8IS0tCisgICAgIDxhcmcgdmFsdWU9IiR7YWRtaW4udXNlcn0iLz4KKyAgICAgIDxhcmcgdmFsdWU9IiR7YWRtaW4ucGFzc3dvcmR9Ii8+CisgICAgICA8YXJnIHZhbHVlPSIke2FkbWluLmhvc3R9Ii8+CisgICAgICA8YXJnIHZhbHVlPSIke2FkbWluLnBvcnR9Ii8+CisgICAgICA8YXJnIHZhbHVlPSIke2FkbWluLnNlY3VyZX0iLz4KKyAgICAgIDxhcmcgdmFsdWU9InRlc3RzLmxpc3QiLz4KKyAgICAgIC0tPgorICAgICAgICA8anZtYXJnIGxpbmU9Ii1YZGVidWcgLVhub2FnZW50IC1YcnVuamR3cDp0cmFuc3BvcnQ9ZHRfc29ja2V0LGFkZHJlc3M9MzMzMyxzdXNwZW5kPW4sc2VydmVyPXkgLURqYXZhLmNvbXBpbGVyPU5PTkUiLz4KICAgICAgICAgPGNsYXNzcGF0aD4KICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH0iLz4KLQkgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7Y2xhc3Nlcy5kaXJ9Ii8+Ci0JICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0LmphciIvPgorICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtjbGFzc2VzLmRpcn0iLz4KKyAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtcnQuamFyIi8+CiAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KIAogCi0JPCEtLSAjIyMjIyMjIyMjICBkZWJ1ZyAgIyMjIyMjIyMjIyMjIyAtLT4KKyAgICA8IS0tICMjIyMjIyMjIyMgIGRlYnVnICAjIyMjIyMjIyMjIyMjIC0tPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZWJ1ZyIgZGVwZW5kcz0iYnVpbGQiPgogICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5UZXN0RHJpdmVyIgotCSAgZGlyPSIuIgorICAgICAgZGlyPSIuIgogICAgICAgICAgIGZvcms9InllcyI+Ci0JICAgIDxqdm1hcmcgbGluZT0iLVhkZWJ1ZyAtWG5vYWdlbnQgLVhydW5qZHdwOnRyYW5zcG9ydD1kdF9zb2NrZXQsYWRkcmVzcz0zMzMzLHN1c3BlbmQ9eSxzZXJ2ZXI9eSAtRGphdmEuY29tcGlsZXI9Tk9ORSIvPgorICAgICAgICA8anZtYXJnIGxpbmU9Ii1YZGVidWcgLVhub2FnZW50IC1YcnVuamR3cDp0cmFuc3BvcnQ9ZHRfc29ja2V0LGFkZHJlc3M9MzMzMyxzdXNwZW5kPXksc2VydmVyPXkgLURqYXZhLmNvbXBpbGVyPU5PTkUiLz4KICAgICAgICAgPGNsYXNzcGF0aD4KICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH0iLz4KLQkgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7Y2xhc3Nlcy5kaXJ9Ii8+CisgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2NsYXNzZXMuZGlyfSIvPgogICAgICAgICA8L2NsYXNzcGF0aD4KICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+CiAKIAotCTwhLS0gIyMjIyMjIyMjIyAgY2xlYW4gIyMjIyMjIyMjIyMjIyAtLT4KKyAgICA8IS0tICMjIyMjIyMjIyMgIGNsZWFuICMjIyMjIyMjIyMjIyMgLS0+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KLQkgICAgPGRlbGV0ZSBkaXI9IiR7Y2xhc3Nlcy5kaXJ9Ii8+Ci0JICAgIDxkZWxldGUgZGlyPSIke2Rpc3QuZGlyfSIvPgotCSAgICA8ZGVsZXRlIGRpcj0iJHttYmVhbi1sb2FkaW5nLWZvbGRlcn0vdGVzdG1iZWFucyIvPgorICAgICAgICA8ZGVsZXRlIGRpcj0iJHtjbGFzc2VzLmRpcn0iLz4KKyAgICAgICAgPGRlbGV0ZSBkaXI9IiR7ZGlzdC5kaXJ9Ii8+CisgICAgICAgIDxkZWxldGUgZGlyPSIke21iZWFuLWxvYWRpbmctZm9sZGVyfS90ZXN0bWJlYW5zIi8+CiAgICAgPC90YXJnZXQ+CiAKLQk8IS0tICMjIyMjIyMjIyMgZGVwbG95ICAjIyMjIyMjIyMjIyMjIC0tPgorICAgIDwhLS0gIyMjIyMjIyMjIyBkZXBsb3kgICMjIyMjIyMjIyMjIyMgLS0+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iYnVpbGQiPgogICAgIDxjb3B5IHRvZGlyPSIke21iZWFuLWxvYWRpbmctZm9sZGVyfS90ZXN0bWJlYW5zIj4KLQkgICAgPGZpbGVzZXQgZGlyPSIke2NsYXNzZXMuZGlyfS90ZXN0bWJlYW5zIi8+CisgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtjbGFzc2VzLmRpcn0vdGVzdG1iZWFucyIvPgogICAgIDwvY29weT4KICAgICA8L3RhcmdldD4KIAotCTwhLS0gIyMjIyMjIyMjIyAgbWFrZWphciAjIyMjIyMjIyMjIyMjIC0tPgorICAgIDwhLS0gIyMjIyMjIyMjIyAgbWFrZWphciAjIyMjIyMjIyMjIyMjIC0tPgogCiAgICAgPHRhcmdldCBuYW1lPSJtYWtlamFyIiBkZXBlbmRzPSJidWlsZCI+Ci0JCTxqYXIgZGVzdGZpbGU9IiR7ZGlzdC5kaXJ9L3Rlc3RtYmVhbnMuamFyIiAKLQkJCWJhc2VkaXI9IiR7Y2xhc3Nlcy5kaXJ9IgotCQkJZXhjbHVkZXM9InRlc3QvKioiIC8+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7ZGlzdC5kaXJ9L3Rlc3RtYmVhbnMuamFyIgorICAgICAgICAgICAgYmFzZWRpcj0iJHtjbGFzc2VzLmRpcn0iCisgICAgICAgICAgICBleGNsdWRlcz0idGVzdC8qKiIgLz4KICAgICA8L3RhcmdldD4KIAotCTwhLS0gIyMjIyMjIyMjIyAgQVNQcm9iZSAjIyMjIyMjIyMjIyMjIC0tPgorICAgIDwhLS0gIyMjIyMjIyMjIyAgQVNQcm9iZSAjIyMjIyMjIyMjIyMjIC0tPgogCiAgICAgPHRhcmdldCBuYW1lPSJBU1Byb2JlIiBkZXBlbmRzPSJidWlsZCI+Ci0JCTxqYXIgZGVzdGZpbGU9IiR7ZGlzdC5kaXJ9L0FTUHJvYmUuamFyIiAKLQkJCWJhc2VkaXI9IiR7Y2xhc3Nlcy5kaXJ9IgotCQkJaW5jbHVkZXM9InRlc3RtYmVhbnMvQVNQcm9iZSoiLz4KKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtkaXN0LmRpcn0vQVNQcm9iZS5qYXIiCisgICAgICAgICAgICBiYXNlZGlyPSIke2NsYXNzZXMuZGlyfSIKKyAgICAgICAgICAgIGluY2x1ZGVzPSJ0ZXN0bWJlYW5zL0FTUHJvYmUqIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8cGF0aCBpZD0idG5nLXJ1bi5jcCI+CkBAIC0xNDEsMTEgKzE0MSwxMSBAQAogICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvdGVzdG5nLmphciIvPgogICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIi8+CiAgICAgPC9wYXRoPgotICAgIAorCiAgICAgPCEtLSAjIyMjIyMjIyMjICBidWlsZC1uZyAgIyMjIyMjIyMjIyMjIyAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLW5nIiBkZXBlbmRzPSJidWlsZCI+CiAgICAgICAgICAgICA8bWtkaXIgZGlyPSIke2NsYXNzZXMuZGlyfSIvPgotICAgICAgICAgICAgPGphdmFjIAorICAgICAgICAgICAgPGphdmFjCiAgICAgICAgICAgICAgICAgICAgIHNyY2Rpcj0iJHtzcmMtbmcuZGlyfSIKICAgICAgICAgICAgICAgICAgICAgZGVzdGRpcj0iJHtjbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgICAgICAgIGRlYnVnPSJvbiI+CkBAIC0xODIsNyArMTgyLDcgQEAKICAgICAgICAgICAgICA8anZtYXJnIHZhbHVlPSItRGphdmEuY29tcGlsZXI9Tk9ORSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0cy1uZy1kYXRhcHJvdmlkZXIiCiAgICAgICAgICAgICBkZXNjcmlwdGlvbj0icnVuIGV4YW1wbGVzIHdpdGggamF2YSIKICAgICAgICAgICAgIGRlcGVuZHM9InNldHVwLGRlcGxveSxidWlsZC1uZyIgPgpAQCAtMTk1LDcgKzE5NSw3IEBACiAgICAgICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURqYXZhLmNvbXBpbGVyPU5PTkUiLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3RzLW5nIiAKKyAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0cy1uZyIKICAgICAgICAgICAgIGRlcGVuZHM9InJ1bi10ZXN0cy1uZy1zZXBhcmF0ZSxydW4tdGVzdHMtbmctcGFyYW1zLHJ1bi10ZXN0cy1uZy1kYXRhcHJvdmlkZXIiPgogICAgIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9ybWkucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3JtaS5wcm9wZXJ0aWVzCmluZGV4IDk4OTI4ZGIuLjZlMGRmNmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3JtaS5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3JtaS5wcm9wZXJ0aWVzCkBAIC0xNCw3ICsxNCw3IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogIwogCi0gCisKICMgX19OQU1FX18ucHJvcGVydGllcwogIwogIyBDcmVhdGVkIG9uIF9fREFURQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc21mdGVzdC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc21mdGVzdC5wcm9wZXJ0aWVzCmluZGV4IDUyZWZkODEuLmEyMmM0ZjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NtZnRlc3QucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zbWZ0ZXN0LnByb3BlcnRpZXMKQEAgLTE0LDcgKzE0LDcgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAjCiAKLSAKKwogIyBfX05BTUVfXy5wcm9wZXJ0aWVzCiAjCiAjIENyZWF0ZWQgb24gX19EQVRFCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdC9BdHRyaWJ1dGVTbmlmZmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdC9BdHRyaWJ1dGVTbmlmZmVyLmphdmEKaW5kZXggMjQ2MjY3Zi4uZDIwNzdlMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvQXR0cmlidXRlU25pZmZlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0L0F0dHJpYnV0ZVNuaWZmZXIuamF2YQpAQCAtMzIsMTcgKzMyLDE3IEBACiAgICAgcHVibGljIEF0dHJpYnV0ZVNuaWZmZXIoKQogICAgIHsKICAgICB9Ci0gICAgCisKICAgICBTdHJpbmcgdGVzdEludGVybmFsKCkgdGhyb3dzIEpNRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgogICAgIHsKICAgICAgICAgdGl0bGUoIkF0dHJpYnV0ZVNuaWZmZXIiKTsKLSAgICAgICAKKwogICAgICAgICBmb3IoU3RyaW5nIGNsYXNzbmFtZSA6IGNsYXNzbmFtZXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjbGFzc25hbWUpOwogICAgICAgICAgICAgTUJlYW5JbmZvIGluZm8gPSBnZXRNQmVhbkluZm8oY2xhc3NuYW1lKTsKICAgICAgICAgICAgIE1CZWFuQXR0cmlidXRlSW5mb1tdIGF0dHMgPSBpbmZvLmdldEF0dHJpYnV0ZXMoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBmb3IoTUJlYW5BdHRyaWJ1dGVJbmZvIGFpbmZvIDogYXR0cykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFUVFJJQlVURSAtLT4gbmFtZT1bIiArIGFpbmZvLmdldE5hbWUoKSArICJdLCB0eXBlPVsiICsgYWluZm8uZ2V0VHlwZSgpICsgIl0sIElzIFdyaXRhYmxlOiAiICsgYWluZm8uaXNXcml0YWJsZSgpKTsKQEAgLTUyLDEyICs1MiwxMiBAQAogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIGNsYXNzbmFtZXMgPSB7Ci0gICAgICAgICAgICAidGVzdG1iZWFucy5PbmVDbGFzc0R5bmFtaWNNQmVhbiIsIAotICAgICAgICAgICAgInRlc3RtYmVhbnMuTWljcm93YXZlT3ZlbkltcGwiLCAKLSAgICAgICAgICAgICJ0ZXN0bWJlYW5zLlNpbXBsZVN0YW5kYXJkIiwgCi0gICAgICAgICAgICAidGVzdG1iZWFucy5QcmltaXRpdmVTdGFuZGFyZCIsIAorICAgICAgICAgICAgInRlc3RtYmVhbnMuT25lQ2xhc3NEeW5hbWljTUJlYW4iLAorICAgICAgICAgICAgInRlc3RtYmVhbnMuTWljcm93YXZlT3ZlbkltcGwiLAorICAgICAgICAgICAgInRlc3RtYmVhbnMuU2ltcGxlU3RhbmRhcmQiLAorICAgICAgICAgICAgInRlc3RtYmVhbnMuUHJpbWl0aXZlU3RhbmRhcmQiLAogICAgIH07Ci0gICAgCisKICAgICAvL3ByaXZhdGUgaW50IG51bUl0ZXIgPSA1MDA7CiAgICAgLy9wcml2YXRlIFN0cmluZyBuYW1lUHJlZml4OwogICAgIC8vcHJpdmF0ZSBTdHJpbmcgYWxwaGFiZXQgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvRGVwbG95TWFueU1CZWFucy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvRGVwbG95TWFueU1CZWFucy5qYXZhCmluZGV4IDhiZTg4MmMuLjljZWE4MTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0L0RlcGxveU1hbnlNQmVhbnMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdC9EZXBsb3lNYW55TUJlYW5zLmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgcm5kID0gbmV3IFJhbmRvbSgpOwogICAgICAgICBpbnQgbGVuID0gNCArIHJuZC5uZXh0SW50KDcpOwogICAgICAgICBjaGFyW10gY2hhcnMgPSBuZXcgY2hhcltsZW5dOwotICAgICAgICAKKwogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGNoYXJzW2ldID0gYWxwaGFiZXQuY2hhckF0KHJuZC5uZXh0SW50KDI2KSk7CkBAIC01MiwxMiArNTIsMTIgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKExvY2FsU3RyaW5ncy5nZXQoIkRlcGxveU1hbnlNQmVhbnMuTlVNX0JFQU5TIikpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oTG9jYWxTdHJpbmdzLmdldCgiZm9vIikpOwogICAgIH0KLSAgICAKKwogICAgIFN0cmluZyB0ZXN0SW50ZXJuYWwoKSB0aHJvd3MgSk1FeGNlcHRpb24sIElPRXhjZXB0aW9uCiAgICAgewogICAgICAgICB0aXRsZSgiRGVwbG95TWFueU1CZWFucyIpOwogICAgICAgICB0aXRsZSgiU3RhZ2UgSSAtLSBjcmVhdGUgIiArIG51bUl0ZXIgKyAiIE1CZWFucyIpOwotICAgICAgICAKKwogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtSXRlcjsgaSsrKQogICAgICAgICB7CiAgICAgICAgICAgICBsb25nIG1zZWMgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKQEAgLTY2LDEzICs2NiwxMyBAQAogICAgICAgICAgICAgU3RyaW5nIG9iam5hbWUgPSAidXNlcjpmb289IiArIG5hbWU7CiAgICAgICAgICAgICBjcmVhdGUoY2xhc3NuYW1lLCBvYmpuYW1lLCBuYW1lKTsKICAgICAgICAgICAgIG1zZWMgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIG1zZWM7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgQ01CLCBuYW1lOiAiICsgbmFtZSArICIsIGltcGwgY2xhc3M6ICIgCi0gICAgICAgICAgICAgICAgICAgICsgY2xhc3NuYW1lICsgIiwgb2JqLW5hbWU6ICIgKyBvYmpuYW1lICsgIiwgVGltZShtc2VjKTogIiAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBDTUIsIG5hbWU6ICIgKyBuYW1lICsgIiwgaW1wbCBjbGFzczogIgorICAgICAgICAgICAgICAgICAgICArIGNsYXNzbmFtZSArICIsIG9iai1uYW1lOiAiICsgb2JqbmFtZSArICIsIFRpbWUobXNlYyk6ICIKICAgICAgICAgICAgICAgICAgICAgKyBtc2VjICsgIiwgTWVtb3J5IFVzYWdlOiAiICsgZ2V0TWVtb3J5SW5mbygpKTsKLSAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICB9CiAKICAgICAgICAgdGl0bGUoIlN0YWdlIElJIC0tIGNoZWNrICIgKyBudW1JdGVyICsgIiBNQmVhbnMiKTsKLSAgICAgICAgCisKICAgICAgICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBsaXN0KCk7CiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1JdGVyOyBpKyspCiAgICAgICAgIHsKQEAgLTg0LDE5ICs4NCwxOSBAQAogICAgICAgICB0aXRsZSgiQWxsIE1CZWFucyB3ZXJlIHJlZ2lzdGVyZWQgT0siKTsKIAogICAgICAgICB0aXRsZSgiU3RhZ2UgSUlJIC0tIGRlbGV0ZSAiICsgbnVtSXRlciArICIgTUJlYW5zIik7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGludGVyYWN0aXZlKQogICAgICAgICAgICAgQ29uc29sZS5yZWFkTGluZSgiU2hhbGwgSSBkZWxldGUgYWxsIG9mIHRoZSBNQmVhbnM/IFt5XTogIik7Ci0gICAgICAgIAorCiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1JdGVyOyBpKyspCiAgICAgICAgIHsKICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gbmFtZVByZWZpeCArIGk7CiAgICAgICAgICAgICBkZWxldGUobmFtZSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlbGV0ZWQ6ICIgKyBuYW1lKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0aXRsZSgiU3RhZ2UgSVYgIC0tIGNoZWNrIGRlbGV0aW9uIG9mICIgKyBudW1JdGVyICsgIiBNQmVhbnMiKTsKLSAgICAgICAgCisKICAgICAgICAgbGlzdCA9IGxpc3QoKTsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bUl0ZXI7IGkrKykKICAgICAgICAgewpAQCAtMTA3LDE3ICsxMDcsMTcgQEAKICAgICAgICAgfQogCiAgICAgICAgIHRpdGxlKCJBbGwgRG9uZSEiKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuICggU2ltcGxlUmVwb3J0ZXJBZGFwdGVyLlBBU1MgKTsKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBjbGFzc25hbWVzID0gewotICAgICAgICAgICAgInRlc3RtYmVhbnMuT25lQ2xhc3NEeW5hbWljTUJlYW4iLCAKLSAgICAgICAgICAgICJ0ZXN0bWJlYW5zLk1pY3Jvd2F2ZU92ZW5JbXBsIiwgCi0gICAgICAgICAgICAidGVzdG1iZWFucy5TaW1wbGVTdGFuZGFyZCIsIAotICAgICAgICAgICAgInRlc3RtYmVhbnMuUHJpbWl0aXZlU3RhbmRhcmQiLCAKKyAgICAgICAgICAgICJ0ZXN0bWJlYW5zLk9uZUNsYXNzRHluYW1pY01CZWFuIiwKKyAgICAgICAgICAgICJ0ZXN0bWJlYW5zLk1pY3Jvd2F2ZU92ZW5JbXBsIiwKKyAgICAgICAgICAgICJ0ZXN0bWJlYW5zLlNpbXBsZVN0YW5kYXJkIiwKKyAgICAgICAgICAgICJ0ZXN0bWJlYW5zLlByaW1pdGl2ZVN0YW5kYXJkIiwKICAgICB9OwotICAgIAorCiAgICAgcHJpdmF0ZSBpbnQgbnVtSXRlciA9IDUwMDsKICAgICBwcml2YXRlIFN0cmluZyBuYW1lUHJlZml4OwogICAgIHByaXZhdGUgU3RyaW5nIGFscGhhYmV0ID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0L0dldFJlc291cmNlVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvR2V0UmVzb3VyY2VUZXN0LmphdmEKaW5kZXggMjQ0ZjZmMi4uYzMxMWMxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvR2V0UmVzb3VyY2VUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvR2V0UmVzb3VyY2VUZXN0LmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKICAgICBwdWJsaWMgR2V0UmVzb3VyY2VUZXN0KCkKICAgICB7CiAgICAgfQotICAgIAorCiAgICAgU3RyaW5nIHRlc3RJbnRlcm5hbCgpIHRocm93cyBKTUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KICAgICB7CiAgICAgICAgIGxvbmcgbXNlYyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwpAQCAtNDMsOCArNDMsOCBAQAogICAgICAgICBTdHJpbmcgb2JqbmFtZSA9ICJ1c2VyOmZvbz0iICsgbmFtZTsKICAgICAgICAgY3JlYXRlKGNsYXNzbmFtZSwgb2JqbmFtZSwgbmFtZSk7CiAgICAgICAgIG1zZWMgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIG1zZWM7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBDTUIsIG5hbWU6ICIgKyBuYW1lICsgIiwgaW1wbCBjbGFzczogIiAKLSAgICAgICAgICAgICAgICArIGNsYXNzbmFtZSArICIsIG9iai1uYW1lOiAiICsgb2JqbmFtZSArICIsIFRpbWUobXNlYyk6ICIgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBDTUIsIG5hbWU6ICIgKyBuYW1lICsgIiwgaW1wbCBjbGFzczogIgorICAgICAgICAgICAgICAgICsgY2xhc3NuYW1lICsgIiwgb2JqLW5hbWU6ICIgKyBvYmpuYW1lICsgIiwgVGltZShtc2VjKTogIgogICAgICAgICAgICAgICAgICsgbXNlYyArICIsIE1lbW9yeSBVc2FnZTogIiArIGdldE1lbW9yeUluZm8oKSk7CiAKICAgICAgICAgdGl0bGUoIlN0YWdlIElJIC0tIGNoZWNrICIpOwpAQCAtNTgsMTQgKzU4LDE0IEBACiAgICAgICAgICAgICBDb25zb2xlLnJlYWRMaW5lKCJHbyBsb29rIGF0IHRoZSBBV1Qgd2luZG93IGFuZCBoaXQgRU5URVI6ICIpOwogCiAgICAgICAgIHRpdGxlKCJTdGFnZSBJSUkgLS0gZGVsZXRlICIpOwotICAgICAgICAKKwogICAgICAgICBpZihpbnRlcmFjdGl2ZSkKICAgICAgICAgICAgIENvbnNvbGUucmVhZExpbmUoIlNoYWxsIEkgZGVsZXRlIHRoZSBNQmVhbnM/IFt5XTogIik7CiAgICAgICAgICAgICBkZWxldGUobmFtZSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlbGV0ZWQ6ICIgKyBuYW1lKTsKLSAgICAgICAgCisKICAgICAgICAgdGl0bGUoIlN0YWdlIElWICAtLSBjaGVjayBkZWxldGlvbiIpOwotICAgICAgICAKKwogICAgICAgICBsaXN0ID0gbGlzdCgpOwogICAgICAgICBpZihsaXN0LmNvbnRhaW5zKG5hbWUpKQogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24obmFtZSArICIgaXMgc3RpbGwgaW4gdGhlIGxpc3Qgb2YgZGVwbG95ZWQgTUJlYW5zIik7CkBAIC03NSwxMiArNzUsMTIgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBjbGFzc25hbWVzID0gewotICAgICAgICAgICAgInRlc3RtYmVhbnMuT25lQ2xhc3NEeW5hbWljTUJlYW4iLCAKLSAgICAgICAgICAgICJ0ZXN0bWJlYW5zLk1pY3Jvd2F2ZU92ZW5JbXBsIiwgCi0gICAgICAgICAgICAidGVzdG1iZWFucy5TaW1wbGVTdGFuZGFyZCIsIAotICAgICAgICAgICAgInRlc3RtYmVhbnMuUHJpbWl0aXZlU3RhbmRhcmQiLCAKKyAgICAgICAgICAgICJ0ZXN0bWJlYW5zLk9uZUNsYXNzRHluYW1pY01CZWFuIiwKKyAgICAgICAgICAgICJ0ZXN0bWJlYW5zLk1pY3Jvd2F2ZU92ZW5JbXBsIiwKKyAgICAgICAgICAgICJ0ZXN0bWJlYW5zLlNpbXBsZVN0YW5kYXJkIiwKKyAgICAgICAgICAgICJ0ZXN0bWJlYW5zLlByaW1pdGl2ZVN0YW5kYXJkIiwKICAgICB9OwotICAgIAorCiAgICAgcHJpdmF0ZSBpbnQgbnVtSXRlciA9IDUwMDsKICAgICBwcml2YXRlIFN0cmluZyBuYW1lUHJlZml4OwogICAgIHByaXZhdGUgU3RyaW5nIGFscGhhYmV0ID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0L0pWTUluZm9ybWF0aW9uVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvSlZNSW5mb3JtYXRpb25UZXN0LmphdmEKaW5kZXggOGQxZWY3ZC4uMzcwYjY3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvSlZNSW5mb3JtYXRpb25UZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvSlZNSW5mb3JtYXRpb25UZXN0LmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKIHB1YmxpYyBjbGFzcyBKVk1JbmZvcm1hdGlvblRlc3QgaW1wbGVtZW50cyBSZW1vdGVBZG1pblF1aWNrbG9va1Rlc3QgewogCiAgICAgcHJpdmF0ZSBNQmVhblNlcnZlckNvbm5lY3Rpb24gbWJzYzsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCQUNLRU5EX01CRUFOX09OID0gQWRtaW5TZXJ2aWNlLlBSSVZBVEVfTUJFQU5fRE9NQUlOX05BTUUgKyAiOiIgKyAiY2F0ZWdvcnk9bW9uaXRvcix0eXBlPUpWTUluZm9ybWF0aW9uQ29sbGVjdG9yLHNlcnZlcj1zZXJ2ZXIiOwogICAgIHByaXZhdGUgbG9uZyBzdGFydCwgZW5kOwogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIEpWTUluZm9ybWF0aW9uVGVzdCAqLwpAQCAtNjYsOCArNjYsOCBAQAogICAgIHB1YmxpYyBsb25nIGdldEV4ZWN1dGlvblRpbWUoKSB7CiAgICAgICAgIHJldHVybiAoIGVuZCAtIHN0YXJ0ICk7CiAgICAgfQotICAgIAotICAgIFN0cmluZyBnZXRNZW1vcnlJbmZvKCkgdGhyb3dzIEV4Y2VwdGlvbiAKKworICAgIFN0cmluZyBnZXRNZW1vcnlJbmZvKCkgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgZmluYWwgT2JqZWN0TmFtZSBvbiA9IG5ldyBPYmplY3ROYW1lKEJBQ0tFTkRfTUJFQU5fT04pOwogICAgICAgICBmaW5hbCBKVk1JbmZvcm1hdGlvbk1CZWFuIG1iZWFuID0gKEpWTUluZm9ybWF0aW9uTUJlYW4pTUJlYW5TZXJ2ZXJJbnZvY2F0aW9uSGFuZGxlci5uZXdQcm94eUluc3RhbmNlKG1ic2MsIG9uLCBjb20uc3VuLmVudGVycHJpc2UuYWRtaW4ubWJlYW5zLmp2bS5KVk1JbmZvcm1hdGlvbk1CZWFuLmNsYXNzLCBmYWxzZSk7CkBAIC04MCw2ICs4MCw2IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihtYmVhbi5nZXRNZW1vcnlJbmZvcm1hdGlvbihudWxsKSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihtYmVhbi5nZXRDbGFzc0luZm9ybWF0aW9uKG51bGwpKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1iZWFuLmdldFN1bW1hcnkobnVsbCkpOwotICAgICAgICAKKwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0L0xpZmVDeWNsZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvTGlmZUN5Y2xlLmphdmEKaW5kZXggM2IzYmQxYy4uNjAyNzYzZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvTGlmZUN5Y2xlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvTGlmZUN5Y2xlLmphdmEKQEAgLTI0LDQ4ICsyNCw0OCBAQAogaW1wb3J0IGphdmF4Lm1hbmFnZW1lbnQuT2JqZWN0TmFtZTsKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIGltcG9ydCBzdGF0aWMgY29tLnN1bi5lbnRlcnByaXNlLmFkbWluLm1iZWFucy5jdXN0b20uQ3VzdG9tTUJlYW5Db25zdGFudHMuKjsKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBMaWZlQ3ljbGUgaW1wbGVtZW50cyBSZW1vdGVBZG1pblF1aWNrbG9va1Rlc3QgCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTGlmZUN5Y2xlIGltcGxlbWVudHMgUmVtb3RlQWRtaW5RdWlja2xvb2tUZXN0CiB7CiAgICAgYWJzdHJhY3QgU3RyaW5nIHRlc3RJbnRlcm5hbCgpIHRocm93cyBKTUV4Y2VwdGlvbiwgSU9FeGNlcHRpb247CiAKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgICAgLy8vLy8vLy8vLy8vLy8gUmVtb3RlQWRtaW5RdWlja2xvb2tUZXN0ICBJbXBsIE1ldGhvZHMgICAvLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAKLSAgICBwdWJsaWMgbG9uZyBnZXRFeGVjdXRpb25UaW1lKCkgCisKKyAgICBwdWJsaWMgbG9uZyBnZXRFeGVjdXRpb25UaW1lKCkKICAgICB7CiAgICAgICAgIHJldHVybiAoIGVuZCAtIHN0YXJ0ICkgOwogICAgIH0KIAogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCiAgICAgewogICAgICAgICByZXR1cm4gKCBnZXRDbGFzcygpLmdldE5hbWUoKSApOwogICAgIH0KIAogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRNQmVhblNlcnZlckNvbm5lY3Rpb24oTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIGMpIAorCisgICAgcHVibGljIHZvaWQgc2V0TUJlYW5TZXJ2ZXJDb25uZWN0aW9uKE1CZWFuU2VydmVyQ29ubmVjdGlvbiBjKQogICAgIHsKICAgICAgICAgbWJzYyA9IGM7CiAgICAgfQogCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIAotICAgIHB1YmxpYyBTdHJpbmcgdGVzdCgpIAorCisgICAgcHVibGljIFN0cmluZyB0ZXN0KCkKICAgICB7Ci0gICAgICAgIHRyeSAKKyAgICAgICAgdHJ5CiAgICAgICAgIHsKICAgICAgICAgICAgIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgICAgICByZXR1cm4gKHRlc3RJbnRlcm5hbCgpKTsKLSAgICAgICAgfSAKLSAgICAgICAgY2F0Y2goZmluYWwgRXhjZXB0aW9uIGUpIAorICAgICAgICB9CisgICAgICAgIGNhdGNoKGZpbmFsIEV4Y2VwdGlvbiBlKQogICAgICAgICB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KLSAgICAgICAgZmluYWxseSAKKyAgICAgICAgZmluYWxseQogICAgICAgICB7CiAgICAgICAgICAgICBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgfQpAQCAtNzMsMTggKzczLDE4IEBACiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgIC8vLy8vLy8vLy8vLy8vLyAgIFRvb2wgTWV0aG9kcyAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgCisKICAgICBTdHJpbmcgY3JlYXRlKFN0cmluZyBjbGFzc05hbWUsIFN0cmluZyBvYmplY3ROYW1lLCBTdHJpbmcgbmFtZSkgdGhyb3dzIEpNRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgogICAgIHsKICAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBwYXJhbXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKICAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBhdHRyaWJzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CiAgICAgICAgIHBhcmFtcy5wdXQoSU1QTF9DTEFTU19OQU1FX0tFWSwgY2xhc3NOYW1lKTsKLSAgICAgICAgCisKICAgICAgICAgaWYob2sob2JqZWN0TmFtZSkpCiAgICAgICAgICAgICBwYXJhbXMucHV0KE9CSkVDVF9OQU1FX0tFWSwgb2JqZWN0TmFtZSk7CiAgICAgICAgIGlmKG9rKG5hbWUpKQogICAgICAgICAgICAgcGFyYW1zLnB1dChOQU1FX0tFWSwgbmFtZSk7Ci0gICAgICAgIAorCiAgICAgICAgIGZpbmFsIE9iamVjdE5hbWUgb24gICAgICAgICA9IG5ldyBPYmplY3ROYW1lKEJBQ0tFTkRfTUJFQU5fT04pOwogICAgICAgICBmaW5hbCBTdHJpbmcgb3BlciAgICAgICAgICAgPSAiY3JlYXRlTUJlYW4iOwogICAgICAgICBmaW5hbCBPYmplY3RbXSBvcGVyUGFyYW1zICAgPSBuZXcgT2JqZWN0W117IG51bGwsIHBhcmFtcywgYXR0cmlicyB9OwpAQCAtMTE1LDcgKzExNSw3IEBACiAgICAgfQogCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIAorCiAgICAgU3RyaW5nIGRlbGV0ZShTdHJpbmcgbmFtZSkgdGhyb3dzIEpNRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgogICAgIHsKICAgICAgICAgZmluYWwgT2JqZWN0TmFtZSBvbiAgICAgICAgID0gbmV3IE9iamVjdE5hbWUoQkFDS0VORF9NQkVBTl9PTik7CkBAIC0xMzksNyArMTM5LDcgQEAKICAgICAgICAgICAgIFN0cmluZyBzID0gaml0LmdldE1lbW9yeUluZm8oKTsKICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIHIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IFN0cmluZ1JlYWRlcihzKSk7CiAgICAgICAgICAgICBTdHJpbmcgbGluZTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB3aGlsZSgobGluZSA9IHIucmVhZExpbmUoKSkgIT0gbnVsbCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZihsaW5lLmVxdWFscygiSGVhcCBNZW1vcnkgVXNhZ2U6IikpCkBAIC0xNTAsMTMgKzE1MCwxMyBAQAogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9CiAgICAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBpZ25vcmUuLi4KICAgICAgICAgfQotICAgCisKICAgICAgICAgcmV0dXJuIG5ldyBNZW1vcnlVc2FnZShoZWFwLCBub25IZWFwKTsKICAgIH0KIApAQCAtMTY2LDE3ICsxNjYsMTcgQEAKICAgICB7CiAgICAgICAgIGludCBsZW4gPSBzLmxlbmd0aCgpOwogICAgICAgICBpbnQgc3ViID0gKHN0YXJzTGVuZ3RoIC0gMTAgLSBsZW4pIC8gMjsKLSAgICAgICAgCisKICAgICAgICAgaWYoc3ViIDwgNSkKICAgICAgICAgICAgIHN1YiA9IDU7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzdGFycyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzdGFycy5zdWJzdHJpbmcoMCwgc3ViKSArICIgICAgICIgKyBzICsgIiAgICAgIiArIHN0YXJzLnN1YnN0cmluZygwLCBzdWIpKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHN0YXJzKTsKICAgICB9CiAKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgCisKICAgICBwcml2YXRlIGludCBwYXJzZU1lbW9yeVVzYWdlKEJ1ZmZlcmVkUmVhZGVyIHIpCiAgICAgewogICAgICAgICAvKgpAQCAtMTg5LDcgKzE4OSw3IEBACiAgICAgICAgICAqKi8KICAgICAgICAgU3RyaW5nIHNlYXJjaFN0cmluZyA9ICJNZW1vcnkgdGhhdCBKYXZhIFZpcnR1YWwgTWFjaGluZSB1c2VzIGF0IHRoaXMgdGltZTogIjsKICAgICAgICAgU3RyaW5nIGxpbmU7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeQogICAgICAgICB7CiAgICAgICAgICAgICB3aGlsZSgobGluZSA9IHIucmVhZExpbmUoKSkgIT0gbnVsbCkKQEAgLTIwOSwyMCArMjA5LDIwIEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgcGFyc2VOdW1iZXIoU3RyaW5nIG51bSkKICAgICB7CiAgICAgICAgIFN0cmluZyBmaXhlZCA9ICIiOwogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtLmxlbmd0aCgpOyBpKyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGNoYXIgYyA9IG51bS5jaGFyQXQoaSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYoQ2hhcmFjdGVyLmlzRGlnaXQoYykpCiAgICAgICAgICAgICAgICAgZml4ZWQgKz0gYzsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKGZpeGVkKTsKQEAgLTIzMiwxNiArMjMyLDE2IEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gIG9rKFN0cmluZyBzKQogICAgIHsKICAgICAgICAgcmV0dXJuIHMgIT0gbnVsbCAmJiBzLmxlbmd0aCgpID4gMDsKICAgICB9CiAKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgCisKICAgICBwcml2YXRlIE1CZWFuU2VydmVyQ29ubmVjdGlvbiBtYnNjOwogICAgIHByaXZhdGUgbG9uZyBzdGFydCwgZW5kOwogICAgIHByaXZhdGUgZmluYWwgaW50IHN0YXJzTGVuZ3RoID0gc3RhcnMubGVuZ3RoKCk7CkBAIC0yNDksNyArMjQ5LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFDS0VORF9NQkVBTl9PTiA9ICJjb20uc3VuLmFwcHNlcnY6Y2F0ZWdvcnk9Y29uZmlnLHR5cGU9YXBwbGljYXRpb25zIjsKIAogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAKKwogICAgIGNsYXNzIE1lbW9yeVVzYWdlCiAgICAgewogICAgICAgICBNZW1vcnlVc2FnZShpbnQgSGVhcCwgaW50IE5vbkhlYXApCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdC9NQmVhblNlcnZlckNvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdC9NQmVhblNlcnZlckNvbm5lY3Rpb25GYWN0b3J5LmphdmEKaW5kZXggZGQxYzViYy4uNDAzZTA0MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvTUJlYW5TZXJ2ZXJDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0L01CZWFuU2VydmVyQ29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtMjUsMTQgKzI1LDE0IEBACiAvKiogQSBjbGFzcyB0byBjcmVhdGUgYW4gQHtsaW5rIE1CZWFuU2VydmVyQ29ubmVjdGlvbn0gdG8gYXBwc2VydmVyLgogICovCiBwdWJsaWMgY2xhc3MgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uRmFjdG9yeSB7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBNQmVhblNlcnZlckNvbm5lY3Rpb25GYWN0b3J5ICovCiAgICAgcHJpdmF0ZSBNQmVhblNlcnZlckNvbm5lY3Rpb25GYWN0b3J5KCkgewogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIE1CZWFuU2VydmVyQ29ubmVjdGlvbiBnZXRNQmVhblNlcnZlckNvbm5lY3Rpb25IVFRQT3JIVFRQUyhmaW5hbCBTdHJpbmcgYWRtaW5Vc2VyLCBmaW5hbCBTdHJpbmcgCisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIE1CZWFuU2VydmVyQ29ubmVjdGlvbiBnZXRNQmVhblNlcnZlckNvbm5lY3Rpb25IVFRQT3JIVFRQUyhmaW5hbCBTdHJpbmcgYWRtaW5Vc2VyLCBmaW5hbCBTdHJpbmcKICAgICAgICAgICAgIGFkbWluUGFzc3dvcmQsIGZpbmFsIFN0cmluZyBhZG1pbkhvc3QsIGZpbmFsIFN0cmluZyBhZG1pblBvcnQsIGZpbmFsIFN0cmluZyBpc1NlY3VyZSkgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBNQmVhblNlcnZlckNvbm5lY3Rpb24gbWJzYyA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcHJvdG9jb2wgPSBBcHBzZXJ2ZXJDb25uZWN0aW9uU291cmNlLlBST1RPQ09MX0hUVFA7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIGdldE1CZWFuU2VydmVyQ29ubmVjdGlvblJNSShmaW5hbCBTdHJpbmcgYWRtaW5Vc2VyLCBmaW5hbCBTdHJpbmcgYWRtaW5QYXNzd29yZCwKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBhZG1pbkhvc3QsIGZpbmFsIFN0cmluZyBybWlQb3J0LCBmaW5hbCBTdHJpbmcgaXNTZWN1cmUpIHRocm93cyBSdW50aW1lRXhjZXB0aW9uIHsKICAgICAgICAgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIG1ic2MgPSBudWxsOwpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBUTFNQYXJhbXMgZ2V0RHVtbXlUTFNQYXJhbXMoKSB7CiAgICAgICAgIGZpbmFsIFg1MDlUcnVzdE1hbmFnZXJbXSB0bXMgPSBUcnVzdEFueVRydXN0TWFuYWdlci5nZXRJbnN0YW5jZUFycmF5KCk7CiAgICAgICAgIHJldHVybiAoIG5ldyBUTFNQYXJhbXModG1zLCBudWxsKSApOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvT2JqZWN0TmFtZVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0L09iamVjdE5hbWVUZXN0LmphdmEKaW5kZXggOWViNTc4MS4uMmUwYzBjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvT2JqZWN0TmFtZVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdC9PYmplY3ROYW1lVGVzdC5qYXZhCkBAIC0zMiwxMSArMzIsMTEgQEAKIHB1YmxpYyBjbGFzcyBPYmplY3ROYW1lVGVzdCBpbXBsZW1lbnRzIFJlbW90ZUFkbWluUXVpY2tsb29rVGVzdCB7CiAKICAgICBwcml2YXRlIE1CZWFuU2VydmVyQ29ubmVjdGlvbiBtYnNjOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJBQ0tFTkRfTUJFQU5fT04gPSAiY29tLnN1bi5hcHBzZXJ2OmNhdGVnb3J5PWNvbmZpZyx0eXBlPWFwcGxpY2F0aW9ucyI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNTX0NVU1RPTV9NQkVBTl9DTEFTUyA9ICJ0ZXN0bWJlYW5zLlNpbXBsZVN0YW5kYXJkIjsKICAgICBwcml2YXRlIGxvbmcgc3RhcnQsIGVuZDsKLSAgICAKKwogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIE9iamVjdE5hbWVUZXN0ICovCiAgICAgcHVibGljIE9iamVjdE5hbWVUZXN0KCkgewogICAgIH0KQEAgLTczLDExICs3MywxMSBAQAogICAgICAgICBmaW5hbCBTdHJpbmcgdGFyZ2V0MSA9ICJzZXJ2ZXIiOyAvL3RoZSBEQVMKICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBwYXJhbXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gKCk7CiAgICAgICAgIHBhcmFtcy5wdXQoQ3VzdG9tTUJlYW5Db25zdGFudHMuSU1QTF9DTEFTU19OQU1FX0tFWSwgU1NfQ1VTVE9NX01CRUFOX0NMQVNTKTsKLSAgICAgICAgCisKICAgICAgICAgLy9pbnZhbGlkIGRvbWFpbgogICAgICAgICBTdHJpbmcgaW52YWxpZERvbWFpbk5hbWVPTiA9ICJmb286YmFyPWJheiI7CiAgICAgICAgIHBhcmFtcy5wdXQoQ3VzdG9tTUJlYW5Db25zdGFudHMuT0JKRUNUX05BTUVfS0VZLCBpbnZhbGlkRG9tYWluTmFtZU9OKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZUN1c3RvbU1CZWFuQ3JlYXRpb25NZXRob2QodGFyZ2V0MSwgcGFyYW1zLCBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gKCkpOwogICAgICAgICB9IGNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgewpAQCAtODcsNDEgKzg3LDQxIEBACiAgICAgICAgIC8vdXNlIG9mIHBhdHRlcm4KICAgICAgICAgaW52YWxpZERvbWFpbk5hbWVPTiA9ICJmb286YmFyPSosbmFtZT1iYXoiOwogICAgICAgICBwYXJhbXMucHV0KEN1c3RvbU1CZWFuQ29uc3RhbnRzLk9CSkVDVF9OQU1FX0tFWSwgaW52YWxpZERvbWFpbk5hbWVPTik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VDdXN0b21NQmVhbkNyZWF0aW9uTWV0aG9kKHRhcmdldDEsIHBhcmFtcywgbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+ICgpKTsKICAgICAgICAgfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIC8vZXhjZXB0aW9uIHNob3VsZCBiZSB0aHJvd24gYW5kIHNob3VsZCBiZSBzcXVlbGNoZWQgYXMgdGVzdCBwYXNzZXMgaW4gdGhhdCBjYXNlLgogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgfSAgICAgICAgCisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgdGVzdER1cGxpY2F0ZU9iamVjdE5hbWVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIFN0cmluZyB0YXJnZXQxID0gInNlcnZlciI7IC8vdGhlIERBUwogICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiAoKTsKICAgICAgICAgcGFyYW1zLnB1dChDdXN0b21NQmVhbkNvbnN0YW50cy5JTVBMX0NMQVNTX05BTUVfS0VZLCBTU19DVVNUT01fTUJFQU5fQ0xBU1MpOwotICAgICAgICAKKwogICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZSA9ICJjdXN0b20iICsgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIHBhcmFtcy5wdXQoQ3VzdG9tTUJlYW5Db25zdGFudHMuTkFNRV9LRVksIG5hbWUpOwogCiAgICAgICAgIFN0cmluZyBvbiA9ICJ1c2VyOmJhcj1iYXoiICsgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIHBhcmFtcy5wdXQoQ3VzdG9tTUJlYW5Db25zdGFudHMuT0JKRUNUX05BTUVfS0VZLCBvbik7Ci0gICAgICAgIAorCiAgICAgICAgIGludm9rZUN1c3RvbU1CZWFuQ3JlYXRpb25NZXRob2QodGFyZ2V0MSwgcGFyYW1zLCBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gKCkpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlQ3VzdG9tTUJlYW5DcmVhdGlvbk1ldGhvZCh0YXJnZXQxLCBwYXJhbXMsIG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiAoKSk7CiAgICAgICAgIH0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAvL2V4Y2VwdGlvbiBzaG91bGQgYmUgdGhyb3duIGFuZCBzaG91bGQgYmUgc3F1ZWxjaGVkIGFzIHRlc3QgcGFzc2VzIGluIHRoYXQgY2FzZS4KICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIH0gICAgICAgIAorICAgICAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3RFcXVpdmFsZW50T2JqZWN0TmFtZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgU3RyaW5nIHRhcmdldDEgPSAic2VydmVyIjsgLy90aGUgREFTCiAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1zID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+ICgpOwogICAgICAgICBwYXJhbXMucHV0KEN1c3RvbU1CZWFuQ29uc3RhbnRzLklNUExfQ0xBU1NfTkFNRV9LRVksIFNTX0NVU1RPTV9NQkVBTl9DTEFTUyk7Ci0gICAgICAgIAorCiAgICAgICAgIGZpbmFsIFN0cmluZyBuYW1lID0gImN1c3RvbSIgKyBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgcGFyYW1zLnB1dChDdXN0b21NQmVhbkNvbnN0YW50cy5OQU1FX0tFWSwgbmFtZSk7CiAKQEAgLTEyOSw5ICsxMjksOSBAQAogICAgICAgICBmaW5hbCBTdHJpbmcgcDIgPSAiYmF6PWJhciIgKyBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgU3RyaW5nIG9uID0gInVzZXI6IiArIHAxICsgIiwiICsgcDI7CiAgICAgICAgIHBhcmFtcy5wdXQoQ3VzdG9tTUJlYW5Db25zdGFudHMuT0JKRUNUX05BTUVfS0VZLCBvbik7Ci0gICAgICAgIAorCiAgICAgICAgIGludm9rZUN1c3RvbU1CZWFuQ3JlYXRpb25NZXRob2QodGFyZ2V0MSwgcGFyYW1zLCBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gKCkpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgb24gPSAidXNlcjoiKyBwMiArICIsIiArIHAxOyAvL3RoaXMgaXMgc2FtZSBhcyBwcmV2aW91cywgaGVuY2UgdGhlIGZvbGxvd2luZyBzaG91bGQgZmFpbAogICAgICAgICAgICAgcGFyYW1zLnB1dChDdXN0b21NQmVhbkNvbnN0YW50cy5PQkpFQ1RfTkFNRV9LRVksIG9uKTsKQEAgLTE0MCw3ICsxNDAsNyBAQAogICAgICAgICB9IGNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgLy9leGNlcHRpb24gc2hvdWxkIGJlIHRocm93biBhbmQgc2hvdWxkIGJlIHNxdWVsY2hlZCBhcyB0ZXN0IHBhc3NlcyBpbiB0aGF0IGNhc2UuCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICB9ICAgICAgICAKKyAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgU3RyaW5nIGludm9rZUN1c3RvbU1CZWFuQ3JlYXRpb25NZXRob2QoZmluYWwgU3RyaW5nIHRhcmdldCwgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBwYXJhbXMsIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gYXR0cmlidXRlcykgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC0xNjMsNyArMTYzLDcgQEAKICAgICAgICAgZmluYWwgT2JqZWN0W10gb3BlclBhcmFtcyAgID0gbmV3IE9iamVjdFtdeyB0YXJnZXQsIG5hbWUgfTsKICAgICAgICAgZmluYWwgU3RyaW5nW10gb3BlclNpZ24gICAgID0gbmV3IFN0cmluZ1tdeyBTdHJpbmcuY2xhc3MuZ2V0TmFtZSgpLCBTdHJpbmcuY2xhc3MuZ2V0TmFtZSgpIH07CiAgICAgICAgIHJldHVybiAoIChTdHJpbmcpIG1ic2MuaW52b2tlKG9uLCBvcGVyLCBvcGVyUGFyYW1zLCBvcGVyU2lnbikgKTsKLSAgICAgICAgCisKICAgICB9CiAgICAgLy8vLy8gUHJpdmF0ZSAvLy8vLwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvUHJpbWl0aXZlRGF0YVR5cGVNQmVhblRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0L1ByaW1pdGl2ZURhdGFUeXBlTUJlYW5UZXN0LmphdmEKaW5kZXggN2UzZTZjMi4uNzgxZWI3MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvUHJpbWl0aXZlRGF0YVR5cGVNQmVhblRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdC9QcmltaXRpdmVEYXRhVHlwZU1CZWFuVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiBpbXBvcnQgamF2YXgubWFuYWdlbWVudC5PYmplY3ROYW1lOwogCiBwdWJsaWMgY2xhc3MgUHJpbWl0aXZlRGF0YVR5cGVNQmVhblRlc3QgaW1wbGVtZW50cyBSZW1vdGVBZG1pblF1aWNrbG9va1Rlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBsb25nIHN0YXJ0LCBlbmQ7CiAgICAgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIG1ic2MgPSBudWxsOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTU19DVVNUT01fTUJFQU5fQ0xBU1MgPSAidGVzdG1iZWFucy5QcmltaXRpdmVTdGFuZGFyZCI7CkBAIC03MCw5ICs3MCw5IEBACiAgICAgICAgIH0KICAgICAgICAgZmluYWxseSB7CiAgICAgICAgICAgICBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKiBUaGlzIHRlc3QgdGVzdHMgdGhlIFByaW1pdGl2ZVN0YW5kYXJkTUJlYW4KICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgdGVzdENyZWF0ZVByaW1pdGl2ZURhdGFUeXBlTUJlYW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTkzLDU2ICs5Myw1NiBAQAogICAgICAgICB9CiAgICAgfQogICAgIC8vLy8vIFByaXZhdGUgLy8vLy8KLSAgICAKKwogICAgIHByaXZhdGUgTWFwPFN0cmluZywgU3RyaW5nPiBnZXRBdHRyaWJ1dGVNYXBGb3JQcmltaXRpdmVzKCkgewogICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGF0dHJpYnV0ZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gKCk7CiAgICAgICAgIGZpbmFsIFJhbmRvbSByID0gbmV3IFJhbmRvbSgpOwogICAgICAgICBTdHJpbmcgdiAgPSBCb29sZWFuLnRvU3RyaW5nKHIubmV4dEJvb2xlYW4oKSk7CiAgICAgICAgIFN0cmluZyBuICA9ICJTdGF0ZSI7CiAgICAgICAgIGF0dHJpYnV0ZXMucHV0KG4sIHYpOwotICAgICAgICAKKwogICAgICAgICB2ID0gSW50ZWdlci50b1N0cmluZyhyLm5leHRJbnQoKSk7CiAgICAgICAgIG4gPSAiUmFuayI7CiAgICAgICAgIGF0dHJpYnV0ZXMucHV0KG4sIHYpOwotICAgICAgICAKKwogICAgICAgICB2ID0gTG9uZy50b1N0cmluZyhyLm5leHRMb25nKCkpOwogICAgICAgICBuID0gIlRpbWUiOwogICAgICAgICBhdHRyaWJ1dGVzLnB1dChuLCB2KTsKLSAgICAgICAgCisKICAgICAgICAgZmluYWwgYnl0ZVtdIGJ5dGVzID0gbmV3IGJ5dGVbMV07CiAgICAgICAgIHIubmV4dEJ5dGVzKGJ5dGVzKTsKICAgICAgICAgdiA9IEJ5dGUudG9TdHJpbmcoYnl0ZXNbMF0pOwogICAgICAgICBuID0gIkxlbmd0aCI7CiAgICAgICAgIGF0dHJpYnV0ZXMucHV0KG4sIHYpOwotICAgICAgICAKKwogICAgICAgICAvKnYgPSBDaGFyYWN0ZXIudG9TdHJpbmcoKGNoYXIpci5uZXh0SW50KCkpOwogICAgICAgICBuID0gIkNvbG9yQ29kZSI7CiAgICAgICAgIGF0dHJpYnV0ZXMucHV0KG4sIHYpOyovCi0gICAgICAgIAorCiAgICAgICAgIHYgPSBGbG9hdC50b1N0cmluZyhyLm5leHRGbG9hdCgpKTsKICAgICAgICAgbiA9ICJBbm51YWxQZXJjZW50UmF0ZSI7CiAgICAgICAgIGF0dHJpYnV0ZXMucHV0KG4sIHYpOwotICAgICAgICAKKwogICAgICAgICB2ID0gRG91YmxlLnRvU3RyaW5nKHIubmV4dERvdWJsZSgpKTsKICAgICAgICAgbiA9ICJUZW1wZXJhdHVyZSI7CiAgICAgICAgIGF0dHJpYnV0ZXMucHV0KG4sIHYpOwotICAgICAgICAKKwogICAgICAgICB2ID0gU2hvcnQudG9TdHJpbmcoKHNob3J0KXIubmV4dEludCgpKTsKICAgICAgICAgbiA9ICJDaGFyYWN0ZXJzIjsKICAgICAgICAgYXR0cmlidXRlcy5wdXQobiwgdik7Ci0gICAgICAgIAorCiAgICAgICAgIHYgPSBnZW5lcmF0ZUEyWlJhbmRvbVN0cmluZygnYScsICd6Jyk7CiAgICAgICAgIG4gPSAiTmFtZSI7CiAgICAgICAgIGF0dHJpYnV0ZXMucHV0KG4sIHYpOwotICAgICAgICAKKwogICAgICAgICB2ID0gRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoKS5mb3JtYXQobmV3IERhdGUoKSk7CiAgICAgICAgIG4gPSAiU3RhcnREYXRlIjsKICAgICAgICAgYXR0cmlidXRlcy5wdXQobiwgdik7Ci0gICAgICAgIAorCiAgICAgICAgIHYgPSAiZm9vOiIgKyBnZW5lcmF0ZUEyWlJhbmRvbVN0cmluZygnYScsICdtJykgKyAiPSIgKyBnZW5lcmF0ZUEyWlJhbmRvbVN0cmluZygnbicsICd6Jyk7CiAgICAgICAgIG4gPSAiUmVzb3VyY2VPYmplY3ROYW1lIjsKICAgICAgICAgYXR0cmlidXRlcy5wdXQobiwgdik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiAoIGF0dHJpYnV0ZXMgKTsKICAgICB9CiAgICAgcHJpdmF0ZSBTdHJpbmcgZ2VuZXJhdGVBMlpSYW5kb21TdHJpbmcoZmluYWwgaW50IGxvLCBmaW5hbCBpbnQgaGkpIHsKQEAgLTE3OCw3ICsxNzgsNyBAQAogICAgICAgICBmaW5hbCBPYmplY3RbXSBvcGVyUGFyYW1zICAgPSBuZXcgT2JqZWN0W117IHRhcmdldCwgbmFtZSB9OwogICAgICAgICBmaW5hbCBTdHJpbmdbXSBvcGVyU2lnbiAgICAgPSBuZXcgU3RyaW5nW117IFN0cmluZy5jbGFzcy5nZXROYW1lKCksIFN0cmluZy5jbGFzcy5nZXROYW1lKCkgfTsKICAgICAgICAgcmV0dXJuICggKFN0cmluZykgbWJzYy5pbnZva2Uob24sIG9wZXIsIG9wZXJQYXJhbXMsIG9wZXJTaWduKSApOwotICAgICAgICAKKwogICAgIH0KICAgICAvLy8vLyBQcml2YXRlIC8vLy8vCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdC9RdWVyeU1CZWFuc1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0L1F1ZXJ5TUJlYW5zVGVzdC5qYXZhCmluZGV4IDJkNzQwYmQuLmZhMDk0MGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0L1F1ZXJ5TUJlYW5zVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0L1F1ZXJ5TUJlYW5zVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiBwdWJsaWMgY2xhc3MgUXVlcnlNQmVhbnNUZXN0IGltcGxlbWVudHMgUmVtb3RlQWRtaW5RdWlja2xvb2tUZXN0IHsKIAogICAgIHByaXZhdGUgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIG1ic2M7Ci0gICAgCisKICAgICBwcml2YXRlIGxvbmcgc3RhcnQsIGVuZDsKIAogICAgIHB1YmxpYyBRdWVyeU1CZWFuc1Rlc3QoKSB7fQpAQCAtNzAsMTggKzcwLDE4IEBACiAgICAgcHVibGljIGxvbmcgZ2V0RXhlY3V0aW9uVGltZSgpIHsKICAgICAgICAgcmV0dXJuICggZW5kIC0gc3RhcnQgKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIEZpbGUgZ2V0RmlsZSgpIHsKICAgICAgICAgU3RyaW5nIHBhdGggPSBudWxsOyAvL3NldCBpdCB0byB1c2VyIHBhc3NlZCBhcmcKLSAgICAgICAgaWYgKHBhdGggIT0gbnVsbCkgCisgICAgICAgIGlmIChwYXRoICE9IG51bGwpCiAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGUocGF0aCk7CiAgICAgICAgIGVsc2UgcmV0dXJuIG5ldyBGaWxlKCIuL0xpc3RPZk1iZWFucy50eHQiKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgcXVlcnlBbGxNQmVhbnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0TmFtZSBuYW1lID0gbnVsbDsKICAgICAgICAgUXVlcnlFeHAgcXVlcnkgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmdbXSBkb21haW5zID0gbWJzYy5nZXREb21haW5zKCk7CiAgICAgICAgIFByaW50V3JpdGVyIHB3ID0gbnVsbDsKICAgICAgICAgdHJ5IHsKQEAgLTkxLDIzICs5MSwyMyBAQAogICAgICAgICAgICAgICAgIFNldDxPYmplY3ROYW1lPiBtYmVhbk9iak5hbWVzID0gbWJzYy5xdWVyeU5hbWVzKG5hbWUsIHF1ZXJ5KTsKICAgICAgICAgICAgICAgICBsb2dEb21haW5NQmVhbnNUb2ZpbGUocHcsIGRvbWFpbiwgbWJlYW5PYmpOYW1lcyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBpZiAocHcgIT0gbnVsbCkgcHcuY2xvc2UoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgbG9nRG9tYWluTUJlYW5zVG9maWxlKFByaW50V3JpdGVyIHB3LCBTdHJpbmcgZG9tYWluLCBTZXQ8T2JqZWN0TmFtZT4gbWJlYW5PYmpOYW1lcykgCisKKyAgICBwcml2YXRlIHZvaWQgbG9nRG9tYWluTUJlYW5zVG9maWxlKFByaW50V3JpdGVyIHB3LCBTdHJpbmcgZG9tYWluLCBTZXQ8T2JqZWN0TmFtZT4gbWJlYW5PYmpOYW1lcykKICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgICBwdy5wcmludGxuKCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIik7CiAgICAgICAgIHB3LnByaW50bG4oIiAgICAgICAgICAgICAgICAgICAgICIgKyBkb21haW4gKyAiICAgICAgICAgICAgICAgICAgICAgICAgICIpOwogICAgICAgICBwdy5wcmludGxuKCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIik7Ci0gICAgICAgIAotICAgICAgICBmb3IgKE9iamVjdE5hbWUgb2JqTmFtZSA6IG1iZWFuT2JqTmFtZXMpIAorCisgICAgICAgIGZvciAoT2JqZWN0TmFtZSBvYmpOYW1lIDogbWJlYW5PYmpOYW1lcykKICAgICAgICAgICAgIHB3LnByaW50bG4ob2JqTmFtZS50b1N0cmluZygpKTsKICAgICAgICAgcHcuZmx1c2goKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0L1JlbW90ZUFkbWluUXVpY2tsb29rVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvUmVtb3RlQWRtaW5RdWlja2xvb2tUZXN0LmphdmEKaW5kZXggMDNmMjZhNWEuLmNlZGYwNDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0L1JlbW90ZUFkbWluUXVpY2tsb29rVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0L1JlbW90ZUFkbWluUXVpY2tsb29rVGVzdC5qYXZhCkBAIC0yMywxNiArMjMsMTYgQEAKICAgICAgKiBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlci5QQVNTIGFuZCBGQUlMLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgdGVzdCgpOwotICAgIAorCiAgICAgLyoqIFNldHMgdGhlIE1CZWFuU2VydmVyQ29ubmVjdGlvbiBmb3IgdGVzdGluZyB0aGUgc3R1ZmYgcmVtb3RlbHkuIFRoZSBwYXJhbWV0ZXIgbWF5CiAgICAgICogbm90IGJlIG51bGwuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TUJlYW5TZXJ2ZXJDb25uZWN0aW9uKGZpbmFsIE1CZWFuU2VydmVyQ29ubmVjdGlvbiBjKTsKLSAgICAKKwogICAgIC8qKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSB0ZXN0LgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpOwotICAgIAorCiAgICAgLyoqIFJldHVybnMgdGhlIHRpbWUgdGFrZW4gYnkgdGhlIHRlc3QgdG8gZXhlY3V0ZSBpbiBtaWxsaXNlY29uZHMKICAgICAgKiBAcmV0dXJuIGxvbmcgZGVub3RpbmcgdGhlIHRpbWUgdGFrZW4gZm9yIHRoaXMgdGVzdCB0byBleGVjdXRlCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdC9TTUZUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdC9TTUZUZXN0LmphdmEKaW5kZXggYWExZTYxMy4uNmRhYzkwZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvU01GVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0L1NNRlRlc3QuamF2YQpAQCAtMzUsNyArMzUsNyBAQAogcHVibGljIGNsYXNzIFNNRlRlc3QgaW1wbGVtZW50cyBSZW1vdGVBZG1pblF1aWNrbG9va1Rlc3QgewogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBDT05GSUdfRklMRT0ic21mdGVzdC5wcm9wZXJ0aWVzIjsKICAgICAvL2xvb2sgYXQgdGhpcyBmaWxlIGZpcnN0Ci0gICAgCisKICAgICBwcml2YXRlIGxvbmcgc3RhcnQsIGVuZDsKICAgICBwdWJsaWMgU01GVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBzZXRQcm9wZXJ0aWVzKCk7CkBAIC00NywxMCArNDcsMTAgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRNQmVhblNlcnZlckNvbm5lY3Rpb24oZmluYWwgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIGMpIHsKLQl9CisgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCSAgICByZXR1cm4gKCB0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpICk7CisgICAgICAgIHJldHVybiAoIHRoaXMuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIHRlc3QoKSB7CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgIGZpbmFsbHkgewogICAgICAgICAgICAgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICB9CiAgICAgcHJpdmF0ZSB2b2lkIHNldFByb3BlcnRpZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgUHJvcGVydGllcyBhZGRpdGlvbmFsID0gbmV3IFByb3BlcnRpZXMoKTsKQEAgLTgyLDEyICs4MiwxMiBAQAogICAgICAgICBmaW5hbCBTdHJpbmcgT1NfVkVSUyA9ICI1LjEwIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFN5c3RlbS5nZXRQcm9wZXJ0eSgib3MubmFtZSIpKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFN5c3RlbS5nZXRQcm9wZXJ0eSgib3MudmVyc2lvbiIpKTsKLSAgICAgICAgZmluYWwgYm9vbGVhbiBvayA9IE9TX05BTUUuZXF1YWxzKFN5c3RlbS5nZXRQcm9wZXJ0eSgib3MubmFtZSIpKSAmJiAKKyAgICAgICAgZmluYWwgYm9vbGVhbiBvayA9IE9TX05BTUUuZXF1YWxzKFN5c3RlbS5nZXRQcm9wZXJ0eSgib3MubmFtZSIpKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgT1NfVkVSUy5lcXVhbHMoU3lzdGVtLmdldFByb3BlcnR5KCJvcy52ZXJzaW9uIikpOwogICAgICAgICBpZiAoIW9rKQogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlJ1bnMgb25seSBvbiBTb2xhcmlzIDEwIik7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVNNRlNlcnZpY2UoKSB7CiAgICAgICAgIGZpbmFsIFNlcnZpY2VIYW5kbGVyIHNtZnNoID0gbmV3IFNNRlNlcnZpY2VIYW5kbGVyKCk7CiAgICAgICAgIGZpbmFsIFNNRlNlcnZpY2Ugc3MgPSBuZXcgU01GU2VydmljZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvU2ltcGxlU3RhbmRhcmRDdXN0b21NQmVhblRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0L1NpbXBsZVN0YW5kYXJkQ3VzdG9tTUJlYW5UZXN0LmphdmEKaW5kZXggMTA1ZDk0Ny4uMGQwNDEzZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvU2ltcGxlU3RhbmRhcmRDdXN0b21NQmVhblRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdC9TaW1wbGVTdGFuZGFyZEN1c3RvbU1CZWFuVGVzdC5qYXZhCkBAIC0zMywxMyArMzMsMTMgQEAKIHB1YmxpYyBjbGFzcyBTaW1wbGVTdGFuZGFyZEN1c3RvbU1CZWFuVGVzdCBpbXBsZW1lbnRzIFJlbW90ZUFkbWluUXVpY2tsb29rVGVzdCB7CiAKICAgICBwcml2YXRlIE1CZWFuU2VydmVyQ29ubmVjdGlvbiBtYnNjOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJBQ0tFTkRfTUJFQU5fT04gPSAiY29tLnN1bi5hcHBzZXJ2OmNhdGVnb3J5PWNvbmZpZyx0eXBlPWFwcGxpY2F0aW9ucyI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNTX0NVU1RPTV9NQkVBTl9DTEFTUyA9ICJ0ZXN0bWJlYW5zLlNpbXBsZVN0YW5kYXJkIjsKICAgICBwcml2YXRlIGxvbmcgc3RhcnQsIGVuZDsKLSAgICAKKwogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgU2ltcGxlU3RhbmRhcmRDdXN0b21NQmVhblRlc3QgCisgICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBTaW1wbGVTdGFuZGFyZEN1c3RvbU1CZWFuVGVzdAogICAgICAqLwogICAgIHB1YmxpYyBTaW1wbGVTdGFuZGFyZEN1c3RvbU1CZWFuVGVzdCgpIHsKICAgICB9CkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgICAgICBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCB0ZXN0Q3JlYXRlRGVsZXRlTGlzdEJhc2ljKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIFN0cmluZyB0YXJnZXQgPSBudWxsOwogICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiAoKTsKQEAgLTk4LDcgKzk4LDcgQEAKICAgICAgICAgfQogICAgIH0KICAgICAvLy8vLyBQcml2YXRlIC8vLy8vCi0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBpbnZva2VDdXN0b21NQmVhbkNyZWF0aW9uTWV0aG9kKGZpbmFsIFN0cmluZyB0YXJnZXQsIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1zLCBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGF0dHJpYnV0ZXMpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBmaW5hbCBPYmplY3ROYW1lIG9uICAgICAgICAgPSBuZXcgT2JqZWN0TmFtZShCQUNLRU5EX01CRUFOX09OKTsKICAgICAgICAgZmluYWwgU3RyaW5nIG9wZXIgICAgICAgICAgID0gImNyZWF0ZU1CZWFuIjsKQEAgLTExOSw3ICsxMTksNyBAQAogICAgICAgICBmaW5hbCBPYmplY3RbXSBvcGVyUGFyYW1zICAgPSBuZXcgT2JqZWN0W117IHRhcmdldCwgbmFtZSB9OwogICAgICAgICBmaW5hbCBTdHJpbmdbXSBvcGVyU2lnbiAgICAgPSBuZXcgU3RyaW5nW117IFN0cmluZy5jbGFzcy5nZXROYW1lKCksIFN0cmluZy5jbGFzcy5nZXROYW1lKCkgfTsKICAgICAgICAgcmV0dXJuICggKFN0cmluZykgbWJzYy5pbnZva2Uob24sIG9wZXIsIG9wZXJQYXJhbXMsIG9wZXJTaWduKSApOwotICAgICAgICAKKwogICAgIH0KICAgICAvLy8vLyBQcml2YXRlIC8vLy8vCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdC9TdHJpbmdUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdC9TdHJpbmdUZXN0LmphdmEKaW5kZXggNTBmMzBlNy4uOTI1NDk1NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvU3RyaW5nVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0L1N0cmluZ1Rlc3QuamF2YQpAQCAtMzMsMjEgKzMzLDIxIEBACiAgICAgcHVibGljIFN0cmluZ1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBsb25nIGdldEV4ZWN1dGlvblRpbWUoKQogICAgIHsKICAgICAgICAgcmV0dXJuICggZW5kIC0gc3RhcnQgKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRNQmVhblNlcnZlckNvbm5lY3Rpb24oZmluYWwgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIGMpCiAgICAgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCiAgICAgewogICAgICAgICByZXR1cm4gKCB0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpICk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyB0ZXN0KCkKICAgICB7CiAgICAgICAgIHRyeQpAQCAtNzgsMTQgKzc4LDE0IEBACiAKICAgICBwcml2YXRlIHZvaWQgbWFrZUxvZyhSZXNvdXJjZUJ1bmRsZSBidW5kbGUpCiAgICAgewotICAgICAgICAKKwogICAgICAgICBMaXN0PFByb3BlcnR5PiBwcm9wcyA9IG5ldyBBcnJheUxpc3Q8UHJvcGVydHk+KCk7CiAgICAgICAgIEVudW1lcmF0aW9uPFN0cmluZz4ga2V5cyA9IGJ1bmRsZS5nZXRLZXlzKCk7CiAKICAgICAgICAgd2hpbGUoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkKICAgICAgICAgewogICAgICAgICAgICAgU3RyaW5nIGtleSA9IGtleXMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgdmFsID0gYnVuZGxlLmdldFN0cmluZyhrZXkpOwpAQCAtOTcsNyArOTcsNyBAQAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRVhDRVBUSU9OIGdldHRpbmcgdmFsdWUgZm9yICIgKyBrZXkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfQogCiAgICAgICAgIC8vIG5vdyBjcmVhdGUgYSBsaXN0IG9mIExvZ1Byb3BlcnR5IGZyb20gdGhlIHByb3BzLi4uCkBAIC0xMDYsOCArMTA2LDggQEAKICAgICAgICAgICAgIGlmKHAuY2F1c2UgPT0gZmFsc2UpCiAgICAgICAgICAgICAgICAgbG9nbGlzdC5hZGQobmV3IExvZ1Byb3BlcnR5KHAsIHByb3BzKSk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICB9CiAgICAgcHJpdmF0ZSB2b2lkIGR1bXBMb2coKQogICAgIHsKQEAgLTExNywxMCArMTE3LDEwIEBACiAgICAgICAgIGZvcihMb2dQcm9wZXJ0eSBwIDogbG9nbGlzdCkKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwKTsKICAgICB9Ci0gICAgCisKICAgICBpbnQgcGFyc2VOdW0oU3RyaW5nIHMpCiAgICAgewotICAgICAgICB0cnkgCisgICAgICAgIHRyeQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gSW50ZWdlci5wYXJzZUludChzLnN1YnN0cmluZygzLCA3KSk7CiAgICAgICAgIH0KQEAgLTEzNiwxNCArMTM2LDE0IEBACiAgICAgcHJpdmF0ZSBMaXN0PFJlc291cmNlQnVuZGxlPiBidW5kbGVzOwogICAgIHByaXZhdGUgTGlzdDxMb2dQcm9wZXJ0eT4gbG9nbGlzdCA9IG5ldyBBcnJheUxpc3Q8TG9nUHJvcGVydHk+KCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIENNQl9QUkVGSVggPSAiQURNMTYiOwotICAgIAorCiAgICAgY2xhc3MgUHJvcGVydHkKICAgICB7CiAgICAgICAgIFByb3BlcnR5KFN0cmluZyBrLCBTdHJpbmcgdikKICAgICAgICAgewogICAgICAgICAgICAga2V5ID0gazsKICAgICAgICAgICAgIHZhbCA9IHY7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYoa2V5LnN0YXJ0c1dpdGgoQ01CX1BSRUZJWCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgbnVtID0gcGFyc2VOdW0oa2V5KTsKQEAgLTE3MSwyNCArMTcxLDI0IEBACiAgICAgICAgIGludCBudW07CiAgICAgICAgIGJvb2xlYW4gY2F1c2UgPSBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBjbGFzcyBMb2dQcm9wZXJ0eSBleHRlbmRzIFByb3BlcnR5CiAgICAgewogICAgICAgICBMb2dQcm9wZXJ0eShQcm9wZXJ0eSBtYWluUHJvcCwgTGlzdDxQcm9wZXJ0eT4gYWxsUHJvcHMpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN1cGVyKG1haW5Qcm9wKTsKICAgICAgICAgICAgIGFzc2VydCBjYXVzZSA9PSBmYWxzZTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBsb29rIGZvciBjYXVzZS4uLgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGZvcihQcm9wZXJ0eSBwcm9wIDogYWxsUHJvcHMpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYoIXByb3AuY2F1c2UpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZihudW0gIT0gcHJvcC5udW0pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgY2F1c2VzLmFkZChwcm9wKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTk2LDIxICsxOTYsMjEgQEAKICAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCiAgICAgICAgIHsKICAgICAgICAgICAgIFN0cmluZyByZXQgPSBzdXBlci50b1N0cmluZygpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKGNhdXNlcy5zaXplKCkgPD0gMCkKICAgICAgICAgICAgICAgICByZXR1cm4gcmV0ICsgIiAqKioqKiBNSVNTSU5HIERJQUcgTUVTU0FHRVMgKioqKioqKioqIiArICJcblxuIjsKIAogICAgICAgICAgICAgcmV0ICs9ICIqKioqKiogIEFTU09DSUFURUQgRElBRyBNRVNTQUdFUyAqKioqXG4iOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGZvcihQcm9wZXJ0eSBwIDogY2F1c2VzKQogICAgICAgICAgICAgICAgIHJldCArPSBwLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcmV0dXJuIHJldCArICJcbiI7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9CiAKICAgICAgICAgTGlzdDxQcm9wZXJ0eT4gY2F1c2VzID0gbmV3IEFycmF5TGlzdDxQcm9wZXJ0eT4oKTsKICAgICB9Ci0gICAgCisKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvVGVzdERyaXZlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3QvVGVzdERyaXZlci5qYXZhCmluZGV4IGMwZWI1ZTEuLjA5NTFjMDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0L1Rlc3REcml2ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdC9UZXN0RHJpdmVyLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIGltcG9ydCBqYXZheC5tYW5hZ2VtZW50Lk1CZWFuU2VydmVyQ29ubmVjdGlvbjsKIAogcHVibGljIGNsYXNzIFRlc3REcml2ZXIgewotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgYWRtaW5Vc2VyOwogICAgIHByaXZhdGUgU3RyaW5nIGFkbWluUGFzc3dvcmQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgYWRtaW5Ib3N0OwpAQCAtNDEsNyArNDEsNyBAQAogICAgIHByaXZhdGUgTGlzdDxSZW1vdGVBZG1pblF1aWNrbG9va1Rlc3Q+IHRlc3RzOwogICAgIHByaXZhdGUgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIG1ic2M7CiAgICAgcHJpdmF0ZSBTdHJpbmcgICAgICB0ZXN0ZmlsZU5hbWU7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NSSVBUX0NPTU1FTlQgPSAiIyI7IC8vdGhpcyBpcyBob3cgY29tbWVudCBpcyBkZW5vdGVkLCB0cmFkaXRpb25hbGx5CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHJlcG9ydGVyID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiZGV2dGVzdHMiKTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVTQyA9ICJBZG1pbiBJbmZyYXN0cnVjdHVyZSBEZXZ0ZXN0cyI7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgIHRlc3RzICAgICAgICAgICA9IG5ldyBBcnJheUxpc3Q8UmVtb3RlQWRtaW5RdWlja2xvb2tUZXN0PiAoKTsKICAgICAgICAgLy9sb2FkUHJvcGVydGllcygpOwogICAgICAgICBsb2FkUm1pUHJvcGVydGllcygpOwotCXRlc3RGaWxlID0gbmV3IEZpbGUodGVzdGZpbGVOYW1lKTsKKyAgICB0ZXN0RmlsZSA9IG5ldyBGaWxlKHRlc3RmaWxlTmFtZSk7CiAgICAgICAgIGluaXRpYWxpemVDb25uZWN0aW9uKCk7CiAgICAgICAgIGluaXRpYWxpemVUZXN0Q2xhc3NlcygpOwogICAgIH0KQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgICAgIH0gY2F0Y2goZmluYWwgRXhjZXB0aW9uIGUpIHt9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIFJlbW90ZUFkbWluUXVpY2tsb29rVGVzdCBjMlQoZmluYWwgU3RyaW5nIHRlc3RDbGFzcykgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgZmluYWwgQ2xhc3MgYyAgICAgICAgICAgICAgICAgICAgICAgPSBDbGFzcy5mb3JOYW1lKHRlc3RDbGFzcyk7CkBAIC0xMTMsNyArMTEzLDcgQEAKICAgICAgICAgICAgICAgICByZXBvcnRlci5hZGRTdGF0dXModC5nZXROYW1lKCksIHJlcG9ydGVyLlBBU1MpOwogICAgICAgICAgICAgfSBjYXRjaChmaW5hbCBFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICAgICAgcmVwb3J0ZXIuYWRkU3RhdHVzKHQuZ2V0TmFtZSgpLCByZXBvcnRlci5GQUlMKTsgICAKKyAgICAgICAgICAgICAgICByZXBvcnRlci5hZGRTdGF0dXModC5nZXROYW1lKCksIHJlcG9ydGVyLkZBSUwpOwogICAgICAgICAgICAgICAgIHRvdGFsICs9IHQuZ2V0RXhlY3V0aW9uVGltZSgpOwogICAgICAgICAgICAgICAgIHJlcG9ydGVyLnByaW50U3VtbWFyeShnZXRTdW1tYXJ5U3RyaW5nKHRvdGFsKSk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldFN1bW1hcnlTdHJpbmcodG90YWwpKTsKQEAgLTEzMyw3ICsxMzMsNyBAQAogICAgICAgICBmaW5hbCBTdHJpbmcgc3RhdHVzID0gdC50ZXN0KCk7CiAgICAgICAgIC8vcmVwb3J0ZXIuYWRkU3RhdHVzKHQuZ2V0TmFtZSgpLCBzdGF0dXMpOwogICAgIH0KLSAgICAKKwogCiAgICAgICBwcml2YXRlIHZvaWQgbG9hZFJtaVByb3BlcnRpZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgUHJvcGVydGllcyBybWlwID0gbmV3IFByb3BlcnRpZXMoKTsKQEAgLTE0OSw3ICsxNDksNyBAQAogICAgIH0KIC8qCiAgICAgcHJpdmF0ZSB2b2lkIGxvYWRQcm9wZXJ0aWVzKCkKLSAgICB7IAorICAgIHsKICAgICAgICAgTG9jYWxTdHJpbmdzSW1wbCBsc2kgICAgPSBuZXcgTG9jYWxTdHJpbmdzSW1wbCgpOwogICAgICAgICB1c2VSbWkgICAgICAgICAgICAgID0gbHNpLmdldEJvb2xlYW4oInVzZVJtaSIsICAgICAgICAgIHRydWUpOwogICAgICAgICBhZG1pblVzZXIgICAgICAgICAgID0gbHNpLmdldFN0cmluZygiYWRtaW5Vc2VyIiwgICAgICAgICJhZG1pbiIpOwpAQCAtMTYwLDYgKzE2MCw2IEBACiAgICAgICAgIHRlc3RmaWxlTmFtZSAgICAgICAgPSBsc2kuZ2V0U3RyaW5nKCJ0ZXN0ZmlsZSIsICAgICAgICAgInRlc3RzLmxpc3QiKTsKICAgICAgICAgaXNTZWN1cmUgICAgICAgICAgICA9IGJpc1NlY3VyZS50b1N0cmluZygpOwogICAgIH0KLSAqLyAgIAorICovCiAgICAgLy8vLy8gcHJpdmF0ZSBtZXRob2RzIC8vLy8vCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdG1iZWFucy9BU1Byb2JlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdG1iZWFucy9BU1Byb2JlLmphdmEKaW5kZXggOGVkYmIwYS4uNGU0OTI0YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3RtYmVhbnMvQVNQcm9iZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0bWJlYW5zL0FTUHJvYmUuamF2YQpAQCAtMzgsODEgKzM4LDgxIEBACiAgICAgewogICAgICAgICByZWZyZXNoKCk7CiAgICAgfQotICAgIAorCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgCisKICAgICBwdWJsaWMgbG9uZyBnZXRIZWFwVXNhZ2UoKQogICAgIHsKICAgICAgICAgcmVmcmVzaCgpOwogICAgICAgICByZXR1cm4gaGVhcFVzYWdlOwogICAgIH0KLSAgICAKKwogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIAorCiAgICAgcHVibGljIGxvbmcgZ2V0SGVhcE1heCgpCiAgICAgewogICAgICAgICByZWZyZXNoKCk7CiAgICAgICAgIHJldHVybiBoZWFwTWF4OwogICAgIH0KLSAgICAKKwogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIAorCiAgICAgcHVibGljIGludCBnZXRUaHJlYWRDb3VudCgpCiAgICAgewogICAgICAgICByZWZyZXNoKCk7CiAgICAgICAgIHJldHVybiB0aHJlYWRDb3VudDsKICAgICB9Ci0gICAgCisKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAKKwogICAgIHB1YmxpYyBpbnQgZ2V0UGVha1RocmVhZENvdW50KCkKICAgICB7CiAgICAgICAgIHJlZnJlc2goKTsKICAgICAgICAgcmV0dXJuIHBlYWtUaHJlYWRDb3VudDsKICAgICB9Ci0gICAgCisKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAKKwogICAgIHB1YmxpYyBpbnQgZ2V0TnVtQXBwcygpCiAgICAgewogICAgICAgICByZWZyZXNoKCk7CiAgICAgICAgIHJldHVybiBudW1BcHBzOwogICAgIH0KLSAgICAKKwogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIAorCiAgICAgcHVibGljIGludCBnZXROdW1FSkJNb2R1bGVzKCkKICAgICB7CiAgICAgICAgIHJlZnJlc2goKTsKICAgICAgICAgcmV0dXJuIG51bUVKQjsKICAgICB9Ci0gICAgCisKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAKKwogICAgIHB1YmxpYyBpbnQgZ2V0TnVtV2ViTW9kdWxlcygpCiAgICAgewogICAgICAgICByZWZyZXNoKCk7CiAgICAgICAgIHJldHVybiBudW1XZWI7CiAgICAgfQotICAgIAorCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgCisKICAgICBwdWJsaWMgaW50IGdldE51bUNvbXBvbmVudHMoKQogICAgIHsKICAgICAgICAgcmVmcmVzaCgpOwogICAgICAgICByZXR1cm4gbnVtQ29tcG9uZW50czsKICAgICB9Ci0gICAgCisKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRBcHBOYW1lcygpCiAgICAgewogICAgICAgICByZWZyZXNoKCk7CiAgICAgICAgIHJldHVybiBhcHBOYW1lczsKICAgICB9Ci0gICAgCisKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRXZWJNb2R1bGVOYW1lcygpCiAgICAgewogICAgICAgICByZWZyZXNoKCk7CkBAIC0xMjAsMzMgKzEyMCwzMyBAQAogICAgIH0KIAogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHJlZnJlc2goKQogICAgIHsKICAgICAgICAgbG9uZyBub3cgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgCisKICAgICAgICAgaWYobm93IC0gdGltZXN0YW1wIDwgMjAwMCkgLy8gbm8gbW9yZSBvZnRlbiB0aGFuIG9uY2UgcGVyIDIgc2Vjb25kcwogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgICAgICB0aW1lc3RhbXAgPSBub3c7CiAKICAgICAgICAgdHJ5CiAgICAgICAgIHsKICAgICAgICAgICAgIE1CZWFuU2VydmVyQ29ubmVjdGlvbiBtYnNjID0gTWFuYWdlbWVudEZhY3RvcnkuZ2V0UGxhdGZvcm1NQmVhblNlcnZlcigpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIE1lbW9yeU1YQmVhbiBtbWIgPSBNYW5hZ2VtZW50RmFjdG9yeS5uZXdQbGF0Zm9ybU1YQmVhblByb3h5KG1ic2MsCiAgICAgICAgICAgICAgICAgTWFuYWdlbWVudEZhY3RvcnkuTUVNT1JZX01YQkVBTl9OQU1FLCBNZW1vcnlNWEJlYW4uY2xhc3MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFRocmVhZE1YQmVhbiB0bWIgPSBNYW5hZ2VtZW50RmFjdG9yeS5uZXdQbGF0Zm9ybU1YQmVhblByb3h5KG1ic2MsCiAgICAgICAgICAgICAgICAgTWFuYWdlbWVudEZhY3RvcnkuVEhSRUFEX01YQkVBTl9OQU1FLCBUaHJlYWRNWEJlYW4uY2xhc3MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIE1lbW9yeVVzYWdlIG11ID0gbW1iLmdldEhlYXBNZW1vcnlVc2FnZSgpOwogICAgICAgICAgICAgaGVhcFVzYWdlID0gbXUuZ2V0Q29tbWl0dGVkKCk7CiAgICAgICAgICAgICBoZWFwTWF4ID0gbXUuZ2V0TWF4KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcGVha1RocmVhZENvdW50ID0gdG1iLmdldFBlYWtUaHJlYWRDb3VudCgpOwogICAgICAgICAgICAgdGhyZWFkQ291bnQgPSB0bWIuZ2V0VGhyZWFkQ291bnQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBmaW5hbCBPYmplY3ROYW1lIG9uICAgICAgICAgPSBuZXcgT2JqZWN0TmFtZShCQUNLRU5EX01CRUFOX09OKTsKICAgICAgICAgICAgIGZpbmFsIE9iamVjdFtdIG9wZXJQYXJhbXMgICA9IG5ldyBPYmplY3RbMF07CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmdbXSBvcGVyU2lnbiAgICAgPSBuZXcgU3RyaW5nWzBdOwpAQCAtMTU0LDE5ICsxNTQsMTkgQEAKICAgICAgICAgICAgIFN0cmluZyBvcGVyICAgICAgICAgICA9ICJnZXRBbGxEZXBsb3llZEoyRUVBcHBsaWNhdGlvbnMiOwogICAgICAgICAgICAgT2JqZWN0TmFtZVtdIG5hbWVzID0gKE9iamVjdE5hbWVbXSltYnNjLmludm9rZShvbiwgb3Blciwgb3BlclBhcmFtcywgb3BlclNpZ24pOwogICAgICAgICAgICAgbnVtQXBwcyA9IG5hbWVzLmxlbmd0aDsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBvcGVyID0gImdldEFsbERlcGxveWVkRUpCTW9kdWxlcyI7CiAgICAgICAgICAgICBuYW1lcyA9IChPYmplY3ROYW1lW10pbWJzYy5pbnZva2Uob24sIG9wZXIsIG9wZXJQYXJhbXMsIG9wZXJTaWduKTsKICAgICAgICAgICAgIG51bUVKQiA9IG5hbWVzLmxlbmd0aDsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBvcGVyID0gImdldEFsbERlcGxveWVkV2ViTW9kdWxlcyI7CiAgICAgICAgICAgICBuYW1lcyA9IChPYmplY3ROYW1lW10pbWJzYy5pbnZva2Uob24sIG9wZXIsIG9wZXJQYXJhbXMsIG9wZXJTaWduKTsKICAgICAgICAgICAgIG51bVdlYiA9IG5hbWVzLmxlbmd0aDsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBvcGVyID0gImdldEFsbERlcGxveWVkQ29tcG9uZW50cyI7CiAgICAgICAgICAgICBuYW1lcyA9IChPYmplY3ROYW1lW10pbWJzYy5pbnZva2Uob24sIG9wZXIsIG9wZXJQYXJhbXMsIG9wZXJTaWduKTsKICAgICAgICAgICAgIG51bUNvbXBvbmVudHMgPSBuYW1lcy5sZW5ndGg7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgb3BlciA9ICJnZXRKMmVlQXBwbGljYXRpb25OYW1lc0xpc3QiOwogICAgICAgICAgICAgYXBwTmFtZXMgPSAoU3RyaW5nW10pbWJzYy5pbnZva2Uob24sIG9wZXIsIG9wZXJQYXJhbXMsIG9wZXJTaWduKTsKIApAQCAtMTc5LDkgKzE3OSw5IEBACiAgICAgICAgICAgICBoZWFwVXNhZ2UgPSAtMTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIAorCiAgICAgcHJpdmF0ZSBsb25nICAgICAgICB0aW1lc3RhbXA7CiAgICAgcHJpdmF0ZSBpbnQgICAgICAgICBudW1BcHBzOwogICAgIHByaXZhdGUgaW50ICAgICAgICAgbnVtRUpCOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3RtYmVhbnMvQVdULmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdG1iZWFucy9BV1QuamF2YQppbmRleCBjZjM2NzE2Li42ZWViNTdmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdG1iZWFucy9BV1QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdG1iZWFucy9BV1QuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogCiBwdWJsaWMgY2xhc3MgQVdUIGltcGxlbWVudHMgQVdUTUJlYW4KIHsKLSAgICAKKwogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIEpNWF9NT05JVE9SX0dBVUdFX0xPVyA9ICJqbXgubW9uaXRvci5nYXVnZS5sb3ciOwogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIEpNWF9NT05JVE9SX0dBVUdFX0hJR0ggPSAiam14Lm1vbml0b3IuZ2F1Z2UuaGlnaCI7CiAgICAgLy9wcml2YXRlIGZpbmFsIFN0cmluZyBKTVhfTU9OSVRPUl9DT1VOVEVSX1RIUkVTSE9MRCA9ICJqbXgubW9uaXRvci5jb3VudGVyLnRocmVzaG9sZCI7CkBAIC00Miw4ICs0Miw4IEBACiAgICAgICAgICAgICAvLyB0ZXN0IHRoZSBnZXRSZXNvdXJjZSBpbiBNQmVhbkNsYXNzTG9hZGVyCiAgICAgICAgICAgICAvLyBhbHNvIHRlc3QgdGhpcyBBV1QgY29kZSB3aGljaCB3aWxsIGhhdmUgYSBmYWlsZWQKICAgICAgICAgICAgIC8vIHJlc291cmNlIGxvYWQgb2YgYSBsb2cgZmlsZQotICAgICAgICAgICAgCi0gICAgICAgICAgICBDbGFzcwljbGF6egk9IGdldENsYXNzKCk7CisKKyAgICAgICAgICAgIENsYXNzICAgIGNsYXp6ICAgID0gZ2V0Q2xhc3MoKTsKICAgICAgICAgICAgIFVSTCB1cmwgPSBjbGF6ei5nZXRSZXNvdXJjZSgiL3Rlc3RtYmVhbnMvQVdULmNsYXNzIik7CiAKICAgICAgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9ICJlcnJvciI7CkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgICAgICAgICAgdXJsID0gY2xhenouZ2V0UmVzb3VyY2UoIkFXVC5jbGFzcyIpOwogICAgICAgICAgICAgaWYodXJsICE9IG51bGwpCiAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSB1cmwuZ2V0UGF0aCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN0cmluZyBtZXNnID0gIklmIHlvdSBzZWUgYSBmaWxlbmFtZSAtLSBnZXRSZXNvdXJjZSBzdWNjZWVkZWQ6ICIgKyBmaWxlbmFtZTsKICAgICAgICAgICAgIEpGcmFtZS5zZXREZWZhdWx0TG9va0FuZEZlZWxEZWNvcmF0ZWQodHJ1ZSk7CiAgICAgICAgICAgICBKRnJhbWUgbXlGcmFtZSA9IG5ldyBKRnJhbWUoIkdsYXNzZmlzaCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3RtYmVhbnMvSW1wbGVtZW50c01CZWFuUmVnaXN0cmF0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdG1iZWFucy9JbXBsZW1lbnRzTUJlYW5SZWdpc3RyYXRpb24uamF2YQppbmRleCBmNTQ5OTg0Li4zZmEwMGJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdG1iZWFucy9JbXBsZW1lbnRzTUJlYW5SZWdpc3RyYXRpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdG1iZWFucy9JbXBsZW1lbnRzTUJlYW5SZWdpc3RyYXRpb24uamF2YQpAQCAtMzUsNyArMzUsNyBAQAogewogICAgICAgICBidWlsZER5bmFtaWNNQmVhbkluZm8oKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGF0dHJpYnV0ZSBvZiB0aGUgRHluYW1pY01CZWFuLgogICAgICAqIEBwYXJhbSBhdHRyaWJ1dGVOYW1lIFRoZSBhdHRyaWJ1dGUgbmFtZQpAQCAtNDYsMTYgKzQ2LDE2IEBACiAgICAgICAgICAgICBSZWZsZWN0aW9uRXhjZXB0aW9uICB7CiAKICAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUuZXF1YWxzKCJOYW1lIikpIHsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvL1RPRE8gcmV0dXJuIHZhbHVlIG9mIE5hbWUgYXR0cmlidXRlCi0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdGhyb3cgbmV3IEF0dHJpYnV0ZU5vdEZvdW5kRXhjZXB0aW9uKCJVbmtub3duIEF0dHJpYnV0ZSAiCiAgICAgICAgICAgICArIGF0dHJpYnV0ZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlIG9mIHRoZSBEeW5hbWljTUJlYW4uCiAgICAgICogQHBhcmFtIGF0dHJpYnV0ZSBUaGUgYXR0cmlidXRlIHRvIHNldApAQCAtNjcsMTQgKzY3LDE0IEBACiAgICAgICAgICAgICBSZWZsZWN0aW9uRXhjZXB0aW9uICB7CiAKICAgICAgICAgaWYgKGF0dHJpYnV0ZS5nZXROYW1lKCkuZXF1YWxzKCJOYW1lIikpIHsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvL1RPRE8gc2V0IHZhbHVlIG9mIE5hbWUgYXR0cmlidXRlCi0gICAgICAgICAgICAKLSAgICAgICAgfSBlbHNlIAorCisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgdGhyb3cgbmV3IEF0dHJpYnV0ZU5vdEZvdW5kRXhjZXB0aW9uKCJVbmtub3duIEF0dHJpYnV0ZSAiCiAgICAgICAgICAgICArIGF0dHJpYnV0ZS5nZXROYW1lKCkpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEFsbG93cyBhbiBvcGVyYXRpb24gdG8gYmUgaW52b2tlZCBvbiB0aGUgRHluYW1pY01CZWFuLgogICAgICAqLwpAQCAtODcsNyArODcsNyBAQAogICAgICAgICAgICAgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5rbm93biBPcGVyYXRpb24gIiArCiAgICAgICAgICAgICBvcGVyYXRpb25OYW1lKSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlIHRoZSBNQmVhbkluZm9Db25zdHJ1Y3RvcnMuCiAgICAgICogV0FSTklORyA6IGlmIHlvdSBhZGQgY29uc3RydWN0b3JzIHRvIEltcGxlbWVudHNNQmVhblJlZ2lzdHJhdGlvbiBjbGFzcywKQEAgLTk3LDE0ICs5NywxNCBAQAogICAgIHByaXZhdGUgTUJlYW5Db25zdHJ1Y3RvckluZm9bXSBjcmVhdGVDb25zdHJ1Y3RvcnMoKSB7CiAgICAgICAgIHJldHVybiBzdXBlci5jcmVhdGVDb25zdHJ1Y3RvcnMoZ2V0Q2xhc3MoKSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogeW91IHNob3VsZG4ndCB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb2RlLgogICAgICAqLwogICAgIHB1YmxpYyBNQmVhbkluZm8gZ2V0TUJlYW5JbmZvKCkgewogICAgICAgICByZXR1cm4gZE1CZWFuSW5mbzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBCdWlsZCB0aGUgcHJpdmF0ZSBkTUJlYW5JbmZvIGZpZWxkLAogICAgICAqIHdoaWNoIHJlcHJlc2VudHMgdGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlIGV4cG9zZWQgYnkgdGhlIE1CZWFuLApAQCAtMTM1LDExICsxMzUsMTEgQEAKICAgICAgICAgICAgIGdldE5vdGlmaWNhdGlvbkluZm8oKSk7CiAgICAgfQogICAgIC8vIDwvZWRpdG9yLWZvbGQ+Ci0gICAgCisKICAgICBwdWJsaWMgIE1CZWFuTm90aWZpY2F0aW9uSW5mb1tdIGdldE5vdGlmaWNhdGlvbkluZm8oKSB7CiAgICAgICAgIHJldHVybiBuZXcgTUJlYW5Ob3RpZmljYXRpb25JbmZvW10ge307CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBNQmVhbkluZm8gZE1CZWFuSW5mbzsKIAogICAgIC8qKgpAQCAtMTkzLDcgKzE5Myw3IEBACiAgICAgcHVibGljIHZvaWQgcG9zdERlcmVnaXN0ZXIoKSB7CiAgICAgICAgIC8vVE9ETyBwb3N0RGVyZWdpc3RlciBpbXBsZW1lbnRhdGlvbjsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHByaXZhdGUgT2JqZWN0TmFtZSBteU5hbWU7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdG1iZWFucy9JbXBsZW1lbnRzTUJlYW5SZWdpc3RyYXRpb25EeW5hbWljU3VwcG9ydC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3RtYmVhbnMvSW1wbGVtZW50c01CZWFuUmVnaXN0cmF0aW9uRHluYW1pY1N1cHBvcnQuamF2YQppbmRleCBkYzNjMzU1Li42YjBmZTFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdG1iZWFucy9JbXBsZW1lbnRzTUJlYW5SZWdpc3RyYXRpb25EeW5hbWljU3VwcG9ydC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0bWJlYW5zL0ltcGxlbWVudHNNQmVhblJlZ2lzdHJhdGlvbkR5bmFtaWNTdXBwb3J0LmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAvKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIEltcGxlbWVudHNNQmVhblJlZ2lzdHJhdGlvbkR5bmFtaWNTdXBwb3J0ICovCiAgICAgcHVibGljIEltcGxlbWVudHNNQmVhblJlZ2lzdHJhdGlvbkR5bmFtaWNTdXBwb3J0KCkgewogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlIG9mIHRoZSBEeW5hbWljTUJlYW4uCiAgICAgICogQHBhcmFtIGF0dHJpYnV0ZU5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lCkBAIC01MSw3ICs1MSw3IEBACiAgICAgdGhyb3dzIEF0dHJpYnV0ZU5vdEZvdW5kRXhjZXB0aW9uLAogICAgICAgICAgICAgTUJlYW5FeGNlcHRpb24sCiAgICAgICAgICAgICBSZWZsZWN0aW9uRXhjZXB0aW9uOwotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBhdHRyaWJ1dGUgb2YgdGhlIER5bmFtaWNNQmVhbi4KICAgICAgKiBAcGFyYW0gYXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgdG8gc2V0CkBAIC02MSw3ICs2MSw3IEBACiAgICAgICAgICAgICBJbnZhbGlkQXR0cmlidXRlVmFsdWVFeGNlcHRpb24sCiAgICAgICAgICAgICBNQmVhbkV4Y2VwdGlvbiwKICAgICAgICAgICAgIFJlZmxlY3Rpb25FeGNlcHRpb247Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGUgdGhlIE1CZWFuSW5mb0NvbnN0cnVjdG9ycy4KICAgICAgKi8KQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gaW5mb3M7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW5hYmxlcyB0aGUgZ2V0IHZhbHVlcyBvZiBzZXZlcmFsIGF0dHJpYnV0ZXMgb2YgdGhlIER5bmFtaWMgTUJlYW4uCiAgICAgICogQHBhcmFtIGF0dHJpYnV0ZU5hbWVzIEFycmF5IG9mIGF0dHJpYnV0ZSBuYW1lcwpAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHRMaXN0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHZhbHVlcyBvZiBzZXZlcmFsIGF0dHJpYnV0ZXMgb2YgdGhlIER5bmFtaWMgTUJlYW4KICAgICAgKiBhbmQgcmV0dXJucyB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBiZWVuIHNldC4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0bWJlYW5zL01pY3Jvd2F2ZU92ZW5JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdG1iZWFucy9NaWNyb3dhdmVPdmVuSW1wbC5qYXZhCmluZGV4IDRmNTJmZjcuLjM0YjI5MTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0bWJlYW5zL01pY3Jvd2F2ZU92ZW5JbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3RtYmVhbnMvTWljcm93YXZlT3ZlbkltcGwuamF2YQpAQCAtMjIzLDcgKzIyMyw3IEBACiAgICAgICAgdGhyb3dzIExpc3RlbmVyTm90Rm91bmRFeGNlcHRpb24gewogICAgICAgICAgYnJvYWRjYXN0ZXIucmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIobGlzdGVuZXIsIGZpbHRlciwgaGFuZGJhY2spOwogICAgIH0KLSAgICAvLyA8L2VkaXRvci1mb2xkPiAKKyAgICAvLyA8L2VkaXRvci1mb2xkPgogCiAgICAgcHJpdmF0ZSBzeW5jaHJvbml6ZWQgbG9uZyBnZXROZXh0U2VxTnVtYmVyKCkgewogICAgICAgICAgcmV0dXJuIHNlcU51bWJlcisrOwpAQCAtMjMyLDUgKzIzMiw1IEBACiAgICAgcHJpdmF0ZSBsb25nIHNlcU51bWJlcjsKICAgICBwcml2YXRlIGZpbmFsIE5vdGlmaWNhdGlvbkJyb2FkY2FzdGVyU3VwcG9ydCBicm9hZGNhc3RlciA9CiAgICAgICAgICAgICAgICBuZXcgTm90aWZpY2F0aW9uQnJvYWRjYXN0ZXJTdXBwb3J0KCk7Ci0gICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3RtYmVhbnMvT2JqZWN0TmFtZVNlbGZQcm92aWRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3RtYmVhbnMvT2JqZWN0TmFtZVNlbGZQcm92aWRlci5qYXZhCmluZGV4IGVkZjQ2OWUuLmExMzBiNWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0bWJlYW5zL09iamVjdE5hbWVTZWxmUHJvdmlkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdG1iZWFucy9PYmplY3ROYW1lU2VsZlByb3ZpZGVyLmphdmEKQEAgLTk4LDkgKzk4LDkgQEAKICAgIC8qKgogICAgICogQnVpbGQgdGhlIHByaXZhdGUgZE1CZWFuSW5mbyBmaWVsZCwKICAgICAqIHdoaWNoIHJlcHJlc2VudHMgdGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlIGV4cG9zZWQgYnkgdGhlIE1CZWFuLAotICAgICogdGhhdCBpcywgdGhlIHNldCBvZiBhdHRyaWJ1dGVzLCBjb25zdHJ1Y3RvcnMsIG9wZXJhdGlvbnMgYW5kIAorICAgICogdGhhdCBpcywgdGhlIHNldCBvZiBhdHRyaWJ1dGVzLCBjb25zdHJ1Y3RvcnMsIG9wZXJhdGlvbnMgYW5kCiAgICAgKiBub3RpZmljYXRpb25zIHdoaWNoIGFyZSBhdmFpbGFibGUgZm9yIG1hbmFnZW1lbnQuCi0gICAgKiAKKyAgICAqCiAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZE1CZWFuSW5mbyBvYmplY3QgaXMgcmV0dXJuZWQgYnkgdGhlIGdldE1CZWFuSW5mbygpCiAgICAgKiBtZXRob2Qgb2YgdGhlIER5bmFtaWNNQmVhbiBpbnRlcmZhY2UuIE5vdGUgdGhhdCwgb25jZSBjb25zdHJ1Y3RlZCwKICAgICAqIGFuIE1CZWFuSW5mbyBvYmplY3QgaXMgaW1tdXRhYmxlLgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3RtYmVhbnMvT2JqZWN0TmFtZVNlbGZQcm92aWRlckR5bmFtaWNTdXBwb3J0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdG1iZWFucy9PYmplY3ROYW1lU2VsZlByb3ZpZGVyRHluYW1pY1N1cHBvcnQuamF2YQppbmRleCBlYzQxYTYzLi5jYzg5ODlmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdG1iZWFucy9PYmplY3ROYW1lU2VsZlByb3ZpZGVyRHluYW1pY1N1cHBvcnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdG1iZWFucy9PYmplY3ROYW1lU2VsZlByb3ZpZGVyRHluYW1pY1N1cHBvcnQuamF2YQpAQCAtMTE2LDQgKzExNiw0IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdExpc3Q7CiAgICB9Ci19IC8vR0VOLUVORDpnZW5lcmF0ZWRDb2RlIAorfSAvL0dFTi1FTkQ6Z2VuZXJhdGVkQ29kZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3RtYmVhbnMvT25lQ2xhc3NEeW5hbWljTUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0bWJlYW5zL09uZUNsYXNzRHluYW1pY01CZWFuLmphdmEKaW5kZXggOTE4ZjY2NC4uNWQ1ZmFkNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3RtYmVhbnMvT25lQ2xhc3NEeW5hbWljTUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdG1iZWFucy9PbmVDbGFzc0R5bmFtaWNNQmVhbi5qYXZhCkBAIC0xMTEsOSArMTExLDkgQEAKICAgICAgICBtZXRob2RTaWduYXR1cmUgPSBuZXcgU3RyaW5nW10gewogICAgICAgIH07CiAgICAgICAgaWYgKG9wZXJhdGlvbk5hbWUuZXF1YWxzKCJzYXlIaSIpICYmIEFycmF5cy5lcXVhbHMoc2lnbmF0dXJlLCBtZXRob2RTaWduYXR1cmUpKSB7Ci0gICAgICAgICAgIAorCiAgICAgICAgICAgIC8vVE9ETyBhZGQgeW91ciBjb2RlIGhlcmUKLSAgICAgICAgICAgCisKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogCkBAIC0xNTAsOSArMTUwLDkgQEAKICAgIC8qKgogICAgICogQnVpbGQgdGhlIHByaXZhdGUgZE1CZWFuSW5mbyBmaWVsZCwKICAgICAqIHdoaWNoIHJlcHJlc2VudHMgdGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlIGV4cG9zZWQgYnkgdGhlIE1CZWFuLAotICAgICogdGhhdCBpcywgdGhlIHNldCBvZiBhdHRyaWJ1dGVzLCBjb25zdHJ1Y3RvcnMsIG9wZXJhdGlvbnMgYW5kIAorICAgICogdGhhdCBpcywgdGhlIHNldCBvZiBhdHRyaWJ1dGVzLCBjb25zdHJ1Y3RvcnMsIG9wZXJhdGlvbnMgYW5kCiAgICAgKiBub3RpZmljYXRpb25zIHdoaWNoIGFyZSBhdmFpbGFibGUgZm9yIG1hbmFnZW1lbnQuCi0gICAgKiAKKyAgICAqCiAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZE1CZWFuSW5mbyBvYmplY3QgaXMgcmV0dXJuZWQgYnkgdGhlIGdldE1CZWFuSW5mbygpCiAgICAgKiBtZXRob2Qgb2YgdGhlIER5bmFtaWNNQmVhbiBpbnRlcmZhY2UuIE5vdGUgdGhhdCwgb25jZSBjb25zdHJ1Y3RlZCwKICAgICAqIGFuIE1CZWFuSW5mbyBvYmplY3QgaXMgaW1tdXRhYmxlLgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3RtYmVhbnMvUHJpbWl0aXZlU3RhbmRhcmQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0bWJlYW5zL1ByaW1pdGl2ZVN0YW5kYXJkLmphdmEKaW5kZXggNDEyOWUxMi4uMjQyZGIxYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3RtYmVhbnMvUHJpbWl0aXZlU3RhbmRhcmQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdG1iZWFucy9QcmltaXRpdmVTdGFuZGFyZC5qYXZhCkBAIC01MywxNiArNTMsMTYgQEAKIAogICAgIC8qKiBBdHRyaWJ1dGUgOiBUZW1wZXJhdHVyZSAqLwogICAgIHByaXZhdGUgZG91YmxlIHRlbXBlcmF0dXJlID0gMC4wOwotICAgIAorCiAgICAgLyoqIEF0dHJpYnV0ZTogTmFtZSAqLwogICAgIHByaXZhdGUgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgIAorCiAgICAgLyoqIEF0dHJpYnV0ZTogU3RhcnREYXRlICovCiAgICAgcHJpdmF0ZSBEYXRlIHNkID0gbnVsbDsKLSAgICAKKwogICAgIC8qKiBBdHRyaWJ1dGUgUmVzb3VyY2VPYmplY3ROYW1lICovCiAgICBwcml2YXRlIE9iamVjdE5hbWUgcm9uID0gbnVsbDsKLSAgIAorCiAgICAvKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFByaW1pdGl2ZVN0YW5kYXJkICovCiAgICAgcHVibGljIFByaW1pdGl2ZVN0YW5kYXJkKCkKICAgICB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdG1iZWFucy9QcmltaXRpdmVTdGFuZGFyZE1CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdG1iZWFucy9QcmltaXRpdmVTdGFuZGFyZE1CZWFuLmphdmEKaW5kZXggODM1NjM1My4uMzc4ZGM2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3RtYmVhbnMvUHJpbWl0aXZlU3RhbmRhcmRNQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0bWJlYW5zL1ByaW1pdGl2ZVN0YW5kYXJkTUJlYW4uamF2YQpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUZW1wZXJhdHVyZShkb3VibGUgdmFsdWUpOwogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEdldCBOYW1lIGFzIHRoZSBTdHJpbmcKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKQEAgLTExOCwyMiArMTE4LDIyIEBACiAgICAgICogU2V0IHRoZSBOYW1lCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIFN0YXJ0RGF0ZSBhdHRyaWJ1dGUKICAgICAgKi8KICAgICBwdWJsaWMgRGF0ZSBnZXRTdGFydERhdGUoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgU3RhcnREYXRlIGF0dHJpYnV0ZQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFN0YXJ0RGF0ZShEYXRlIGRhdGUpOwotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSBPYmplY3ROYW1lIG9mIFJlc291cmNlCiAgICAgICovCiAgICAgcHVibGljIE9iamVjdE5hbWUgZ2V0UmVzb3VyY2VPYmplY3ROYW1lKCk7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIE9iamVjdE5hbWUgb2YgUmVzb3VyY2UKICAgICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0bWJlYW5zL1JlZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3RtYmVhbnMvUmVnLmphdmEKaW5kZXggNzY3ZGVhNi4uNjhjMjc3YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3RtYmVhbnMvUmVnLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3RtYmVhbnMvUmVnLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIHsKICAgICAgICAgYnVpbGREeW5hbWljTUJlYW5JbmZvKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBhdHRyaWJ1dGUgb2YgdGhlIER5bmFtaWNNQmVhbi4KICAgICAgKiBAcGFyYW0gYXR0cmlidXRlTmFtZSBUaGUgYXR0cmlidXRlIG5hbWUKQEAgLTQxLDE2ICs0MSwxNiBAQAogICAgICAgICAgICAgUmVmbGVjdGlvbkV4Y2VwdGlvbiAgewogCiAgICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lLmVxdWFscygiTmFtZSIpKSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy9UT0RPIHJldHVybiB2YWx1ZSBvZiBOYW1lIGF0dHJpYnV0ZQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRocm93IG5ldyBBdHRyaWJ1dGVOb3RGb3VuZEV4Y2VwdGlvbigiVW5rbm93biBBdHRyaWJ1dGUgIgogICAgICAgICAgICAgKyBhdHRyaWJ1dGVOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGF0dHJpYnV0ZSBvZiB0aGUgRHluYW1pY01CZWFuLgogICAgICAqIEBwYXJhbSBhdHRyaWJ1dGUgVGhlIGF0dHJpYnV0ZSB0byBzZXQKQEAgLTYyLDE0ICs2MiwxNCBAQAogICAgICAgICAgICAgUmVmbGVjdGlvbkV4Y2VwdGlvbiAgewogCiAgICAgICAgIGlmIChhdHRyaWJ1dGUuZ2V0TmFtZSgpLmVxdWFscygiTmFtZSIpKSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy9UT0RPIHNldCB2YWx1ZSBvZiBOYW1lIGF0dHJpYnV0ZQotICAgICAgICAgICAgCi0gICAgICAgIH0gZWxzZSAKKworICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHRocm93IG5ldyBBdHRyaWJ1dGVOb3RGb3VuZEV4Y2VwdGlvbigiVW5rbm93biBBdHRyaWJ1dGUgIgogICAgICAgICAgICAgKyBhdHRyaWJ1dGUuZ2V0TmFtZSgpKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBBbGxvd3MgYW4gb3BlcmF0aW9uIHRvIGJlIGludm9rZWQgb24gdGhlIER5bmFtaWNNQmVhbi4KICAgICAgKi8KQEAgLTgyLDcgKzgyLDcgQEAKICAgICAgICAgICAgIG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVua25vd24gT3BlcmF0aW9uICIgKwogICAgICAgICAgICAgb3BlcmF0aW9uTmFtZSkpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZSB0aGUgTUJlYW5JbmZvQ29uc3RydWN0b3JzLgogICAgICAqIFdBUk5JTkcgOiBpZiB5b3UgYWRkIGNvbnN0cnVjdG9ycyB0byBJbXBsZW1lbnRzTUJlYW5SZWdpc3RyYXRpb24gY2xhc3MsCkBAIC05MiwxNCArOTIsMTQgQEAKICAgICBwcml2YXRlIE1CZWFuQ29uc3RydWN0b3JJbmZvW10gY3JlYXRlQ29uc3RydWN0b3JzKCkgewogICAgICAgICByZXR1cm4gc3VwZXIuY3JlYXRlQ29uc3RydWN0b3JzKGdldENsYXNzKCkpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIHlvdSBzaG91bGRuJ3QgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29kZS4KICAgICAgKi8KICAgICBwdWJsaWMgTUJlYW5JbmZvIGdldE1CZWFuSW5mbygpIHsKICAgICAgICAgcmV0dXJuIGRNQmVhbkluZm87CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQnVpbGQgdGhlIHByaXZhdGUgZE1CZWFuSW5mbyBmaWVsZCwKICAgICAgKiB3aGljaCByZXByZXNlbnRzIHRoZSBtYW5hZ2VtZW50IGludGVyZmFjZSBleHBvc2VkIGJ5IHRoZSBNQmVhbiwKQEAgLTEzMCwxMSArMTMwLDExIEBACiAgICAgICAgICAgICBnZXROb3RpZmljYXRpb25JbmZvKCkpOwogICAgIH0KICAgICAvLyA8L2VkaXRvci1mb2xkPgotICAgIAorCiAgICAgcHVibGljICBNQmVhbk5vdGlmaWNhdGlvbkluZm9bXSBnZXROb3RpZmljYXRpb25JbmZvKCkgewogICAgICAgICByZXR1cm4gbmV3IE1CZWFuTm90aWZpY2F0aW9uSW5mb1tdIHt9OwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgTUJlYW5JbmZvIGRNQmVhbkluZm87CiAKICAgICAvKioKQEAgLTE4Nyw3ICsxODcsNyBAQAogICAgIHB1YmxpYyB2b2lkIHBvc3REZXJlZ2lzdGVyKCkgewogICAgICAgICAvL1RPRE8gcG9zdERlcmVnaXN0ZXIgaW1wbGVtZW50YXRpb247CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwcml2YXRlIE9iamVjdE5hbWUgbXlOYW1lOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3RtYmVhbnMvU2ltcGxlU3RhbmRhcmQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3NyYy90ZXN0bWJlYW5zL1NpbXBsZVN0YW5kYXJkLmphdmEKaW5kZXggODFmZDMzYy4uYWI5YmRhMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvc3JjL3Rlc3RtYmVhbnMvU2ltcGxlU3RhbmRhcmQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS9zcmMvdGVzdG1iZWFucy9TaW1wbGVTdGFuZGFyZC5qYXZhCkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICAgICB0aHJvd3MgTGlzdGVuZXJOb3RGb3VuZEV4Y2VwdGlvbiB7CiAgICAgICAgICBicm9hZGNhc3Rlci5yZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcihsaXN0ZW5lciwgZmlsdGVyLCBoYW5kYmFjayk7CiAgICAgfQotICAgIC8vIDwvZWRpdG9yLWZvbGQ+IAorICAgIC8vIDwvZWRpdG9yLWZvbGQ+CiAKICAgICBwcml2YXRlIHN5bmNocm9uaXplZCBsb25nIGdldE5leHRTZXFOdW1iZXIoKSB7CiAgICAgICAgICByZXR1cm4gc2VxTnVtYmVyKys7CkBAIC0xMTksNSArMTE5LDUgQEAKICAgICBwcml2YXRlIGxvbmcgc2VxTnVtYmVyOwogICAgIHByaXZhdGUgZmluYWwgTm90aWZpY2F0aW9uQnJvYWRjYXN0ZXJTdXBwb3J0IGJyb2FkY2FzdGVyID0KICAgICAgICAgICAgICAgIG5ldyBOb3RpZmljYXRpb25Ccm9hZGNhc3RlclN1cHBvcnQoKTsKLSAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS90ZXN0bmcvVGVzdE5HRHJpdmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9wZS90ZXN0bmcvVGVzdE5HRHJpdmVyLmphdmEKaW5kZXggNDQ1YWJjNS4uMzcxZTQ3MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vcGUvdGVzdG5nL1Rlc3ROR0RyaXZlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL3BlL3Rlc3RuZy9UZXN0TkdEcml2ZXIuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogaW1wb3J0IHRlc3QuKjsKIAogcHVibGljIGNsYXNzIFRlc3ROR0RyaXZlciB7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBhZG1pblVzZXI7CiAgICAgcHJpdmF0ZSBTdHJpbmcgYWRtaW5QYXNzd29yZDsKICAgICBwcml2YXRlIFN0cmluZyBhZG1pbkhvc3Q7CkBAIC00MSw3ICs0MSw3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIHVzZVJtaTsKICAgICBwcml2YXRlIE1CZWFuU2VydmVyQ29ubmVjdGlvbiBtYnNjOwogICAgIHByaXZhdGUgU3RyaW5nICAgICAgdGVzdGZpbGVOYW1lOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNDUklQVF9DT01NRU5UID0gIiMiOyAvL3RoaXMgaXMgaG93IGNvbW1lbnQgaXMgZGVub3RlZCwgdHJhZGl0aW9uYWxseQogCiAgICAgQENvbmZpZ3VyYXRpb24oYmVmb3JlVGVzdENsYXNzID0gdHJ1ZSkKQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVXNpbmcgSFRUUDogIiArIG1ic2MudG9TdHJpbmcoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIFJlbW90ZUFkbWluUXVpY2tsb29rVGVzdCBjMlQoZmluYWwgU3RyaW5nIHRlc3RDbGFzcykgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgZmluYWwgQ2xhc3MgYyAgICAgICAgICAgICAgICAgICAgICAgPSBDbGFzcy5mb3JOYW1lKHRlc3RDbGFzcyk7CkBAIC03Niw3MSArNzYsNzEgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHJ1blJlbW90ZUFkbWluVGVzdChTdHJpbmcgdGVzdENsYXNzKSB7CiAgICAgICAgIFJlbW90ZUFkbWluUXVpY2tsb29rVGVzdCB0ID0gYzJUKHRlc3RDbGFzcyk7CiAgICAgICAgIHQudGVzdCgpOwogICAgIH0KIAogICAgIEBUZXN0KGdyb3VwcyA9IHsiUmVtb3RlQWRtaW5UZXN0cyJ9KQotICAgIHB1YmxpYyB2b2lkIHJ1blNpbXBsZVN0YW5kYXJkQ3VzdG9tTUJlYW5UZXN0KCkgCisgICAgcHVibGljIHZvaWQgcnVuU2ltcGxlU3RhbmRhcmRDdXN0b21NQmVhblRlc3QoKQogICAgIHsKICAgICAgICAgcnVuUmVtb3RlQWRtaW5UZXN0KCJ0ZXN0LlNpbXBsZVN0YW5kYXJkQ3VzdG9tTUJlYW5UZXN0Iik7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QoZ3JvdXBzID0geyJSZW1vdGVBZG1pblRlc3RzIn0pCi0gICAgcHVibGljIHZvaWQgcnVuUHJpbWl0aXZlRGF0YVR5cGVNQmVhblRlc3QoKSAKKyAgICBwdWJsaWMgdm9pZCBydW5QcmltaXRpdmVEYXRhVHlwZU1CZWFuVGVzdCgpCiAgICAgewogICAgICAgICBydW5SZW1vdGVBZG1pblRlc3QoInRlc3QuUHJpbWl0aXZlRGF0YVR5cGVNQmVhblRlc3QiKTsKICAgICB9CiAKICAgICBAVGVzdChncm91cHMgPSB7IlJlbW90ZUFkbWluVGVzdHMifSkKLSAgICBwdWJsaWMgdm9pZCBydW5PYmplY3ROYW1lVGVzdCgpIAorICAgIHB1YmxpYyB2b2lkIHJ1bk9iamVjdE5hbWVUZXN0KCkKICAgICB7CiAgICAgICAgIHJ1blJlbW90ZUFkbWluVGVzdCgidGVzdC5PYmplY3ROYW1lVGVzdCIpOwogICAgIH0KIAogCi0gICAgQFRlc3QoZ3JvdXBzID0geyJSZW1vdGVBZG1pblRlc3RzIn0pIAotICAgIHB1YmxpYyB2b2lkIHJ1bkpWTUluZm9ybWF0aW9uVGVzdCgpIAorICAgIEBUZXN0KGdyb3VwcyA9IHsiUmVtb3RlQWRtaW5UZXN0cyJ9KQorICAgIHB1YmxpYyB2b2lkIHJ1bkpWTUluZm9ybWF0aW9uVGVzdCgpCiAgICAgewogICAgICAgICBydW5SZW1vdGVBZG1pblRlc3QoInRlc3QuSlZNSW5mb3JtYXRpb25UZXN0Iik7CiAgICAgfQogCiAKICAgICBAVGVzdChncm91cHMgPSB7IlJlbW90ZUFkbWluVGVzdHMifSkKLSAgICBwdWJsaWMgdm9pZCBydW5BdHRyaWJ1dGVTbmlmZmVyKCkgCisgICAgcHVibGljIHZvaWQgcnVuQXR0cmlidXRlU25pZmZlcigpCiAgICAgewogICAgICAgICBydW5SZW1vdGVBZG1pblRlc3QoInRlc3QuQXR0cmlidXRlU25pZmZlciIpOwogICAgIH0KIAogCi0gICAgQFRlc3QoZ3JvdXBzID0geyJSZW1vdGVBZG1pblRlc3RzIiwgImJyb2tlblRlc3RzIn0pIAotICAgIHB1YmxpYyB2b2lkIHJ1blNNRlRlc3QoKSAKKyAgICBAVGVzdChncm91cHMgPSB7IlJlbW90ZUFkbWluVGVzdHMiLCAiYnJva2VuVGVzdHMifSkKKyAgICBwdWJsaWMgdm9pZCBydW5TTUZUZXN0KCkKICAgICB7CiAgICAgICAgIHJ1blJlbW90ZUFkbWluVGVzdCgidGVzdC5TTUZUZXN0Iik7CiAgICAgfQogCiAgICAgQFRlc3QoZ3JvdXBzID0geyJSZW1vdGVBZG1pblRlc3RzIn0pCi0gICAgcHVibGljIHZvaWQgcnVuRGVwbG95TWFueU1CZWFucygpIAorICAgIHB1YmxpYyB2b2lkIHJ1bkRlcGxveU1hbnlNQmVhbnMoKQogICAgIHsKICAgICAgICAgcnVuUmVtb3RlQWRtaW5UZXN0KCJ0ZXN0LkRlcGxveU1hbnlNQmVhbnMiKTsKICAgICB9CiAKICAgICBAVGVzdChncm91cHMgPSB7IlJlbW90ZUFkbWluVGVzdHMifSkKLSAgICBwdWJsaWMgdm9pZCBydW5TdHJpbmdUZXN0KCkgCisgICAgcHVibGljIHZvaWQgcnVuU3RyaW5nVGVzdCgpCiAgICAgewogICAgICAgICBydW5SZW1vdGVBZG1pblRlc3QoInRlc3QuU3RyaW5nVGVzdCIpOwogICAgIH0KIAogICAgIEBUZXN0KGdyb3VwcyA9IHsiUmVtb3RlQWRtaW5UZXN0cyIsICJpbnRlcmFjdGl2ZVRlc3RzIn0pCi0gICAgcHVibGljIHZvaWQgcnVuR2V0UmVzb3VyY2VUZXN0KCkgCisgICAgcHVibGljIHZvaWQgcnVuR2V0UmVzb3VyY2VUZXN0KCkKICAgICB7CiAgICAgICAgIHJ1blJlbW90ZUFkbWluVGVzdCgidGVzdC5HZXRSZXNvdXJjZVRlc3QiKTsKICAgICB9CiAKIAotICAgICAgIAorCiAgICAgLyoqKgogICAgICAqIHByaXZhdGUgdm9pZCBsb2FkUm1pUHJvcGVydGllcygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBybWlwID0gbmV3IFByb3BlcnRpZXMoKTsKQEAgLTE1NCw3ICsxNTQsNyBAQAogICAgIH0KICovCiAgICAgcHJpdmF0ZSB2b2lkIGxvYWRQcm9wZXJ0aWVzKCkKLSAgICB7IAorICAgIHsKICAgICAgICAgTG9jYWxTdHJpbmdzSW1wbCBsc2kgICAgPSBuZXcgTG9jYWxTdHJpbmdzSW1wbCgpOwogICAgICAgICB1c2VSbWkgICAgICAgICAgICAgID0gbHNpLmdldEJvb2xlYW4oInVzZVJtaSIsICAgICAgICAgIHRydWUpOwogICAgICAgICBhZG1pblVzZXIgICAgICAgICAgID0gbHNpLmdldFN0cmluZygiYWRtaW5Vc2VyIiwgICAgICAgICJhZG1pbiIpOwpAQCAtMTY1LDYgKzE2NSw2IEBACiAgICAgICAgIHRlc3RmaWxlTmFtZSAgICAgICAgPSBsc2kuZ2V0U3RyaW5nKCJ0ZXN0ZmlsZSIsICAgICAgICAgInRlc3RzLmxpc3QiKTsKICAgICAgICAgaXNTZWN1cmUgICAgICAgICAgICA9IGJpc1NlY3VyZS50b1N0cmluZygpOwogICAgIH0KLSAgICAKKwogICAgIC8vLy8vIHByaXZhdGUgbWV0aG9kcyAvLy8vLwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2FwcGNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvYXBwY2xpZW50LnhtbAppbmRleCAwMmNiZWVhLi40ZDM3NzljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvYXBwY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvYXBwY2xpZW50LnhtbApAQCAtMjMsOSArMjMsOSBAQAogXT4KIDwhLS0KIAotICAgIEFsbCBhcHBjbGllbnQgZGV2dGVzdHMgY2FuIHVzZSB0aGUgYW50IGltcG9ydCB0YXNrIHRvIGluY2x1ZGUgdGhpcyBmaWxlLiAKKyAgICBBbGwgYXBwY2xpZW50IGRldnRlc3RzIGNhbiB1c2UgdGhlIGFudCBpbXBvcnQgdGFzayB0byBpbmNsdWRlIHRoaXMgZmlsZS4KICAgICBJdCBkZWZpbmVzIHNldmVyYWwgdXNlZnVsIHRhc2tzOgotICAgIAorCiAgICAgICAgIGFsbCAtIGNsZWFuLCBidWlsZCwgZGVwbG95LCBydW4sIHVuZGVwbG95CiAgICAgICAgIGNsZWFuCiAgICAgICAgIGNvbXBpbGUKQEAgLTMzLDEyICszMywxMiBAQAogICAgICAgICBkZXBsb3kKICAgICAgICAgdW5kZXBsb3kKICAgICAgICAgdGVzdAotICAgICAgICAKKwogICAgIFRoaXMgcHJvamVjdCBhc3N1bWVzIHRoYXQgYWxsIHRlc3RzIGluY2x1ZGUgYm90aCBhIHN0YW5kLWFsb25lIGNsaWVudCBqYXIKICAgICBhbmQgYW4gZW1iZWRkZWQgb25lLiAgSWYgYSBwYXJ0aWN1bGFyIHRlc3QgZG9lcyBub3QgaW5jbHVkZSBvbmUgb3IgdGhlIG90aGVyCiAgICAgb2YgdGhlc2UsIHRoYXQgdGVzdCdzIGJ1aWxkLnhtbCBjYW4gb3ZlcnJpZGUgYW55IG9mIHRoZSBmb2xsb3dpbmcgdGFyZ2V0cwogICAgIHRvIG1ha2UgdGhlbSBuby1vcHM6Ci0gICAgCisKICAgICAgICAgYnVpbGQuZWFyCiAgICAgICAgIGJ1aWxkLmNsaWVudAogICAgICAgICBkZXBsb3kuZWFyCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgIHVuZGVwbG95LmNsaWVudAogICAgICAgICB0ZXN0LnN0YW5kYWxvbmUuY2xpZW50CiAgICAgICAgIHRlc3QuZW1iZWRkZWQuY2xpZW50Ci0gICAgICAgIAorCiAKIC0tPgogPHByb2plY3QgbmFtZT0iaW1wb3J0ZWRBcHBjbGllbnQiIGRlZmF1bHQ9Ii4iPgpAQCAtNTYsOSArNTYsOSBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPCEtLSBJbiB0aGlzIGV4YW1wbGUgdGhlcmUgYXJlIG9ubHkgLmphdmEgZmlsZXMgZm9yIHRoZSBjbGllbnQgLS0+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+CkBAIC02NywyMSArNjcsMjEgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC5jbGllbnQiLz4KLSAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC5lYXIiLz4gCi08IS0tIAorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLmVhciIvPgorPCEtLQogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLmVqYiIvPgogLS0+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLmVhciI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPCEtLQogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQuZWpiIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0tLT4gICAgCistLT4KIAogPCEtLQogICAgIFRoZSBmb2xsb3dpbmcgaW1wbGVtZW50YXRpb24gYm9ycm93cyBoZWF2aWx5IGZyb20gdGhlIHNhbWUgdGFyZ2V0IGluCkBAIC05NCwyOSArOTQsMjkgQEAKICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiAgICAgICA8cHJvcGVydHkgbmFtZT0ibWFuaWZlc3QuZmlsZSIgdmFsdWU9Ii4vY2xpZW50L01BTklGRVNULk1GIi8+Ci0gICAgICAKLSAgICAgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IEdlbmVyYXRpbmcgYXBwY2xpZW50LWphciBpbnNpZGUgYnVpbGQgZGlyZWN0b3J5IiAKKworICAgICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogR2VuZXJhdGluZyBhcHBjbGllbnQtamFyIGluc2lkZSBidWlsZCBkaXJlY3RvcnkiCiAgICAgICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+Ci0gICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLWNsaWVudC54bWx9IiAKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCisgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLWNsaWVudC54bWx9IgorICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgogICAgICAgICAgICAgb3ZlcndyaXRlPSJ0cnVlIi8+CiAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIKICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKICAgICAgICAgICAgIG92ZXJ3cml0ZT0idHJ1ZSIvPgotICAgICAgPGphciBqYXJmaWxlPSIke2FwcGNsaWVudC5qYXJ9IiBiYXNlZGlyPSIke2FwcGNsaWVudGphci5maWxlc30iIAotICAgICAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iJHthcHBjbGllbnRqYXIuY2xhc3Nlc30iIAotICAgICAgICBtYW5pZmVzdD0iJHttYW5pZmVzdC5maWxlfSI+ICAgICAgICAgCisgICAgICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIKKyAgICAgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IiR7YXBwY2xpZW50amFyLmNsYXNzZXN9IgorICAgICAgICBtYW5pZmVzdD0iJHttYW5pZmVzdC5maWxlfSI+CiAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiPgogICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgICAgICA8L21ldGFpbmY+CiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9L2xpYiIgaW5jbHVkZXM9InJlcG9ydGVyLmphciIvPgotICAgICAgPC9qYXI+ICAgIAorICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LmVhciIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS5jbGllbnQiLz4KQEAgLTEyNSwxOCArMTI1LDE4IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kuZWFyIiBkZXBlbmRzPSJidWlsZC5lYXIiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LmNsaWVudCIgZGVwZW5kcz0iYnVpbGQuY2xpZW50Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXBsb3llZC5hcHAiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS5lYXIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS5jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kuZWFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC0xNDksNyArMTQ5LDcgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ0ZXN0LnN0YW5kYWxvbmUuY2xpZW50Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idGVzdC5lbWJlZGRlZC5jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idGVzdC5zdGFuZGFsb25lLmNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InRlc3QuY2xpZW50Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ1cmxwYXRoIiB2YWx1ZT0iLyR7Y2xpZW50bmFtZX0iLz4KQEAgLTE2OCw3ICsxNjgsNyBAQAogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZ2VuZXJhdGVkLmFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2FwcGNsaWVudC5qYXJ9Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idGVzdC5jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idGVzdC5jbGllbnQiPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImdlbmVyYXRlZC5hcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Q2xpZW50LmphciIvPgpAQCAtMTc4LDYgKzE3OCw2IEBACiAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3N9Ii8+CiAgICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogPC9wcm9qZWN0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvYXBwY3BhdGgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9hcHBjcGF0aC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGZhYmNlMGQuLmY5OWI2NTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9hcHBjcGF0aC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9hcHBjcGF0aC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJhcHBjcGF0aCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KQEAgLTI2LDcgKzI2LDcgQEAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iY2xpZW50L2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImNsaWVudC9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPCEtLQotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHtjbGllbnRuYW1lfS5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiAtLT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9hcHBjcGF0aC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvYXBwY3BhdGgvYnVpbGQueG1sCmluZGV4IDlhMGI5NDQuLmU1MTc1Y2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9hcHBjcGF0aC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2FwcGNwYXRoL2J1aWxkLnhtbApAQCAtMjYsMTEgKzI2LDExIEBACiA8IS0tCiAgICAgTWFrZXMgc3VyZSB0aGF0IHRoZSBzZXR0aW5nIG9mIEFQUENQQVRIIHByaW9yIHRvIHJ1bm5pbmcgdGhlIGFwcGNsaWVudAogICAgIHNjcmlwdCBiZWhhdmVzIGNvcnJlY3RseS4KLSAgICAKLSAgICBUaGlzIHNjcmlwdCBidWlsZHMgYW4gYXBwIGNsaWVudCBhbmQgYSBzZXBhcmF0ZSBsaWJyYXJ5IGphciB0aGF0IGlzIG5vdCAKKworICAgIFRoaXMgc2NyaXB0IGJ1aWxkcyBhbiBhcHAgY2xpZW50IGFuZCBhIHNlcGFyYXRlIGxpYnJhcnkgamFyIHRoYXQgaXMgbm90CiAgICAgYnVuZGxlZCB3aXRoIHRoZSBhcHAgY2xpZW50LiAgVGhlIHRlc3QgZG9lcyBub3QgZGVwbG95IHRoZSBhcHAgY2xpZW50IGJ1dAotICAgIHNpbXBseSBpbnZva2VzIHRoZSBhcHAgY2xpZW50IGphciBkaXJlY3RseS4gIAotICAgIAorICAgIHNpbXBseSBpbnZva2VzIHRoZSBhcHAgY2xpZW50IGphciBkaXJlY3RseS4KKwogLS0+CiA8cHJvamVjdCBuYW1lPSJhcHBjcGF0aCIgZGVmYXVsdD0idXNhZ2UiIGJhc2VkaXI9Ii4iPgogCkBAIC00NSw3ICs0NSw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8IS0tCi0gICAgICAgIE5vIG5lZWQgdG8gZGVwbG95IChvciB1bmRlcGxveSkgYmVjYXVzZSB3ZSBjYW4gdXNlIGFuIHVuZGVwbG95ZWQgc3RhbmQtYWxvbmUgYXBwIAorICAgICAgICBObyBuZWVkIHRvIGRlcGxveSAob3IgdW5kZXBsb3kpIGJlY2F1c2Ugd2UgY2FuIHVzZSBhbiB1bmRlcGxveWVkIHN0YW5kLWFsb25lIGFwcAogICAgICAgICBjbGllbnQgdG8gdGVzdCB0aGlzIGZlYXR1cmUuCiAgICAgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLHJ1biIvPgpAQCAtNTMsNyArNTMsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQiPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ibGliIi8+CkBAIC02MSw3ICs2MSw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9IiR7ZW52LkFQU19IT01FfS91dGlsL3JlcG9ydGVyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KQEAgLTcxLDI1ICs3MSwyNSBAQAogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgICAgICAgPCEtLSBCdWlsZCB0aGUgc3RhbmQtYWxvbmUgYXBwIGNsaWVudC4gLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiB2YWx1ZT0iKiovY2xpZW50LyouY2xhc3MgKiovcmVwb3J0ZXIvKi5jbGFzcyIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHtjbGllbnRuYW1lfS5qYXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0gICAgICAgIDwhLS0gQnVpbGQgdGhlIGxpYnJhcnkgamFyLiAtLT4gICAgICAgIAotICAgICAgICA8amFyIGphcmZpbGU9IiR7bGliLmphci5maWxlfSIgCi0gICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCi0gICAgICAgICAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iKiovbGliLyouY2xhc3MiIAorICAgICAgICA8IS0tIEJ1aWxkIHRoZSBsaWJyYXJ5IGphci4gLS0+CisgICAgICAgIDxqYXIgamFyZmlsZT0iJHtsaWIuamFyLmZpbGV9IgorICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCisgICAgICAgICAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iKiovbGliLyouY2xhc3MiCiAgICAgICAgICAgICAvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95Ij4KICAgICAgICAgPGVjaG8+VGhlICJkZXBsb3kiIHRhcmdldCBpcyBub3QgdXNlZCBpbiB0aGlzIHRlc3QuPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+CiAgICAgICAgIDxlY2hvPlRoZSAidW5kZXBsb3kiIHRhcmdldCBpcyBub3QgdXNlZCBpbiB0aGlzIHRlc3QuPC9lY2hvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQiPgogICAgICAgICA8ZWNobz5UZXN0aW5nIHN0YW5kLWFsb25lIGNsaWVudC4uLjwvZWNobz4KQEAgLTk4LDE4ICs5OCwxOCBAQAogICAgICAgICAgICAgVGhpcyB0ZXN0IHNob3VsZCBmYWlsLgogICAgICAgICAtLT4KICAgICAgICAgPHJ1bmNsaWVudCBhcHBjcGF0aC1zZXR0aW5nPSJuby13aGVyZSIgcmVzdWx0cHJvcGVydHk9ImV4cGVjdEZhaWx1cmUiIGV4cGVjdGVkT3V0Y29tZT0iZmFpbCIvPgotICAgICAgICAKKwogICAgICAgICA8IS0tCiAgICAgICAgICAgICBOb3cgcnVuIHdpdGggdGhlIGNvcnJlY3Qgc2V0dGluZyBmb3IgQVBQQ1BBVEggLSBwb2ludGluZyB0byB0aGUKICAgICAgICAgICAgIHByZXZpb3VzbHktYnVpbGQgbGlicmFyeSBqYXIuICBUaGlzIHRlc3Qgc2hvdWxkIHBhc3MuCiAgICAgICAgIC0tPgogICAgICAgICA8cnVuY2xpZW50IGFwcGNwYXRoLXNldHRpbmc9IiR7bGliLmphci5maWxlfSIgcmVzdWx0cHJvcGVydHk9ImV4cGVjdFN1Y2Nlc3MiIGV4cGVjdGVkT3V0Y29tZT0icGFzcyIvPgotICAgICAgICAKKwogICAgICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJyZXN1bHQiIHZhbHVlPSJwYXNzZWQiIGVsc2U9ImZhaWxlZCI+CiAgICAgICAgICAgICA8YW5kPgogICAgICAgICAgICAgICAgIDxlcXVhbHMgYXJnMT0iJHtleHBlY3RGYWlsdXJlfSIgYXJnMj0iMSIvPgogICAgICAgICAgICAgICAgIDxlcXVhbHMgYXJnMT0iJHtleHBlY3RTdWNjZXNzfSIgYXJnMj0iMCIvPgotICAgICAgICAgICAgPC9hbmQ+ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgPC9hbmQ+CiAgICAgICAgIDwvY29uZGl0aW9uPgogICAgICAgICA8ZWNobz5UZXN0IHJlc3VsdDogJHtyZXN1bHR9PC9lY2hvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTM0LDggKzEzNCw4IEBACiAgICAgICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDwvc2VxdWVudGlhbD4KICAgICA8L21hY3JvZGVmPgotICAgICAgICAKLSAgICAgICAgCisKKwogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvYXBwY3BhdGgvY2xpZW50L1Rlc3RBUFBDUEFUSC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2FwcGNwYXRoL2NsaWVudC9UZXN0QVBQQ1BBVEguamF2YQppbmRleCAxMDlkZjY2Li41Zjc0YzRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvYXBwY3BhdGgvY2xpZW50L1Rlc3RBUFBDUEFUSC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9hcHBjcGF0aC9jbGllbnQvVGVzdEFQUENQQVRILmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKICAqIEBhdXRob3IgdGpxdWlubgogICovCiBwdWJsaWMgY2xhc3MgVGVzdEFQUENQQVRIIHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC0zNSw3ICszNSw3IEBACiAgICAgICovCiAgICAgcHVibGljIFRlc3RBUFBDUEFUSCgpIHsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAcGFyYW0gYXJncyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwogICAgICAqLwpAQCAtNTMsOSArNTMsOSBAQAogICAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIkFQUENQQVRIIik7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdChzdGF0dXMpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHJ1bihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgVGhyb3dhYmxlIHsKICAgICAgICAgLyoKICAgICAgICAgICpVc2UgYSBjbGFzcyBpbiB0aGUgb3RoZXIgamFyIGZpbGUuICBUaGUgQVBQQ1BBVEggZW52LiB2YXIuCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvYXBwY3BhdGgvY2xpZW50L2FwcGxpY2F0aW9uLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvYXBwY3BhdGgvY2xpZW50L2FwcGxpY2F0aW9uLWNsaWVudC54bWwKaW5kZXggZDU5NDhhNi4uMDY3NDA0YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2FwcGNwYXRoL2NsaWVudC9hcHBsaWNhdGlvbi1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9hcHBjcGF0aC9jbGllbnQvYXBwbGljYXRpb24tY2xpZW50LnhtbApAQCAtMjgsOCArMjgsOCBAQAogPGFwcGxpY2F0aW9uLWNsaWVudCB4bWxucz0naHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlJwogICB4bWxuczp4c2k9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJwogICB4c2k6c2NoZW1hTG9jYXRpb249J2h0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvYXBwbGljYXRpb24tY2xpZW50XzUueHNkJwotICB2ZXJzaW9uPSI1Ij4gCi0gIAorICB2ZXJzaW9uPSI1Ij4KKwogICA8ZGlzcGxheS1uYW1lPllvdXIgQXBwIENsaWVudCBIZXJlPC9kaXNwbGF5LW5hbWU+CiAKIDwvYXBwbGljYXRpb24tY2xpZW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2FwcGNwYXRoL2xpYi9MaWJVdGlsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvYXBwY3BhdGgvbGliL0xpYlV0aWwuamF2YQppbmRleCAwMmJiZjdjLi41YjE0MjE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvYXBwY3BhdGgvbGliL0xpYlV0aWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvYXBwY3BhdGgvbGliL0xpYlV0aWwuamF2YQpAQCAtMjEsOSArMjEsOSBAQAogICogQGF1dGhvciB0anF1aW5uCiAgKi8KIHB1YmxpYyBjbGFzcyBMaWJVdGlsIHsKLSAgICAKKwogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIExpYlV0aWwgKi8KICAgICBwdWJsaWMgTGliVXRpbCgpIHsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9idWlsZC54bWwKaW5kZXggN2U4YzNhNC4uMTg2MWQzYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgPGFudCBkaXI9IiR7c3VidGVzdC5uYW1lfSIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPHJlY29yZCBuYW1lPSIke3N1YnRlc3QubmFtZX0ub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2hvd0FyZ3MiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bnN1YnRlc3QiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InN1YnRlc3QubmFtZSIgdmFsdWU9InNob3dBcmdzIi8+CkBAIC01NywxMiArNTcsMTIgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzdWJ0ZXN0Lm5hbWUiIHZhbHVlPSJzaG93QXJnc1dpdGhTaWduZWRMaWIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgc2hvd0FyZ3MgKEV4ZWN1dGVzIHNpbXBsZSBhcmd1bWVudC1wYXNzaW5nIHRlc3RzKQotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBqd3MgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBzaG93QXJncyAoRXhlY3V0ZXMgc2ltcGxlIGFyZ3VtZW50LXBhc3NpbmcgdGVzdHMpCisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGp3cyB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL2ZvcmNlRmFpbHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9mb3JjZUZhaWx1cmUvYnVpbGQucHJvcGVydGllcwppbmRleCBjZWUxNDYxLi4wMmY2NTg3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL2ZvcmNlRmFpbHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3MvZm9yY2VGYWlsdXJlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImZvcmNlRmFpbHVyZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KQEAgLTI1LDcgKzI1LDcgQEAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJlYXIvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImNsaWVudC9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8IS0tCi08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2NsaWVudG5hbWV9LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIC0tPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9mb3JjZUZhaWx1cmUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9mb3JjZUZhaWx1cmUvYnVpbGQueG1sCmluZGV4IGE2ZjZjNDIuLjE2Yzg2NTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3MvZm9yY2VGYWlsdXJlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL2ZvcmNlRmFpbHVyZS9idWlsZC54bWwKQEAgLTMxLDE2ICszMSwxNiBAQAogICAgICZ0ZXN0cHJvcGVydGllczsKICAgICAmandzU2V0dXA7CiAKLSAgICAgICAgCisKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxkZXBsb3kscnVuLHVuZGVwbG95Ii8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDwhLS0gSW4gdGhpcyBleGFtcGxlIHRoZXJlIGFyZSBvbmx5IC5qYXZhIGZpbGVzIGZvciB0aGUgY2xpZW50IC0tPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgpAQCAtNDgsMTcgKzQ4LDE3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIj4KLSAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC5jbGllbnQiLz4gCisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQuY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLmNsaWVudCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXBwY2xpZW50LWphci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJjbGllbnQvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS5jbGllbnQiLz4KICAgICA8L3RhcmdldD4KQEAgLTY4LDE1ICs2OCwxNSBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRlcGxveWVkLmFwcCIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LmNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS5jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InRlc3Quc3RhbmRhbG9uZS5jbGllbnQiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ0ZXN0LmVtYmVkZGVkLmNsaWVudCIvPgpAQCAtODksMjEgKzg5LDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InRlc3QuY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgCisKICAgICAgICAgPGZhaWwgdW5sZXNzPSJ1cmxwYXRoIj5QbGVhc2Ugc3BlY2lmeSB0aGUgYXJndW1lbnQgJ3VybHBhdGgnIHdoZW4gaW52b2tpbmcgdGVzdC5jbGllbnQ8L2ZhaWw+CiAgICAgICAgIDwhLS0KLSAgICAgICAgICAgIFRoZSB2ZXJ5IHNpbXBsZSBjbGllbnQgdW5kZXIgdGVzdCBqdXN0IHdyaXRlcyB0aGUgYXJndW1lbnRzIGl0IAotICAgICAgICAgICAgcmVjZWl2ZXMgb3V0IHRvIGEgZmlsZS4gIAorICAgICAgICAgICAgVGhlIHZlcnkgc2ltcGxlIGNsaWVudCB1bmRlciB0ZXN0IGp1c3Qgd3JpdGVzIHRoZSBhcmd1bWVudHMgaXQKKyAgICAgICAgICAgIHJlY2VpdmVzIG91dCB0byBhIGZpbGUuCiAgICAgICAgIC0tPgotICAgICAgICAKLSAgICAgICAgPHJ1bi1qd3MgCisKKyAgICAgICAgPHJ1bi1qd3MKICAgICAgICAgICAgIHVybHBhdGg9IiR7dXJscGF0aH0iCiAgICAgICAgICAgICByZXN1bHRwcm9wZXJ0eT0icmVzdWx0IgogICAgICAgICAgICAgLz4KIAotICAgICAgICA8ZWNobz5SZXN1bHQgcHJvcGVydHkgaXMgJHtyZXN1bHR9PC9lY2hvPiAgICAgICAgCisgICAgICAgIDxlY2hvPlJlc3VsdCBwcm9wZXJ0eSBpcyAke3Jlc3VsdH08L2VjaG8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3MvZm9yY2VGYWlsdXJlL2NsaWVudC9TaG93QXJnc0NsaWVudEZvcmNlZEZhaWx1cmUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3MvZm9yY2VGYWlsdXJlL2NsaWVudC9TaG93QXJnc0NsaWVudEZvcmNlZEZhaWx1cmUuamF2YQppbmRleCA0OGYzNDcyLi4xNDc1NWEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL2ZvcmNlRmFpbHVyZS9jbGllbnQvU2hvd0FyZ3NDbGllbnRGb3JjZWRGYWlsdXJlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9mb3JjZUZhaWx1cmUvY2xpZW50L1Nob3dBcmdzQ2xpZW50Rm9yY2VkRmFpbHVyZS5qYXZhCkBAIC0yOCwxMiArMjgsMTIgQEAKICAqIEBhdXRob3IgdGpxdWlubgogICovCiBwdWJsaWMgY2xhc3MgU2hvd0FyZ3NDbGllbnRGb3JjZWRGYWlsdXJlIHsKLSAgICAKLSAgICAKKworCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgU2hvd0FyZ3NDbGllbnQgKi8KICAgICBwdWJsaWMgU2hvd0FyZ3NDbGllbnRGb3JjZWRGYWlsdXJlKCkgewogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEBwYXJhbSBhcmdzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL2ZvcmNlRmFpbHVyZS9jbGllbnQvYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3MvZm9yY2VGYWlsdXJlL2NsaWVudC9hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IGI2OWJkYjkuLmRiZWIwYjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3MvZm9yY2VGYWlsdXJlL2NsaWVudC9hcHBsaWNhdGlvbi1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3MvZm9yY2VGYWlsdXJlL2NsaWVudC9hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC0yOCw4ICsyOCw4IEBACiA8YXBwbGljYXRpb24tY2xpZW50IHhtbG5zPSdodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUnCiAgIHhtbG5zOnhzaT0naHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UnCiAgIHhzaTpzY2hlbWFMb2NhdGlvbj0naHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9hcHBsaWNhdGlvbi1jbGllbnRfNS54c2QnCi0gIHZlcnNpb249IjUiPiAKLSAgCisgIHZlcnNpb249IjUiPgorCiAgIDxkaXNwbGF5LW5hbWU+Rm9yY2UgRmFpbHVyZTwvZGlzcGxheS1uYW1lPgogCiA8L2FwcGxpY2F0aW9uLWNsaWVudD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3MvandzU2V0dXAueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9qd3NTZXR1cC54bWwKaW5kZXggOTFlOGVlZS4uOGY4NTBiMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9qd3NTZXR1cC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9qd3NTZXR1cC54bWwKQEAgLTQ1LDQ4ICs0NSw0OCBAQAogICAgICAgICA8b3MgZmFtaWx5PSJ3aW5kb3dzIi8+CiAgICAgPC9jb25kaXRpb24+CiAKLSAgICAKKwogPCEtLSAgcnVuandzIG1hY3JvCi0gICAgCisKICAgICBBdHRyaWJ1dGVzIG9uIHRoZSA8cnVuandzPiBpbnZvY2F0aW9uIHRoYXQgY2FuL211c3QgYmUgcGFzc2VkIGluIGJ5IHRoZSBjYWxsZXI6CiAgICAgICAgIGFyZ3MKLSAgICAgICAgICAgIGxpc3Qgb2YgdGhlIHZhbHVlcyB0byBiZSBwYXNzZWQgdG8gdGhlIGFwcCBjbGllbnQgdmlhIHRoZSBVUkwncyBxdWVyeSBzdHJpbmcuICAgCisgICAgICAgICAgICBsaXN0IG9mIHRoZSB2YWx1ZXMgdG8gYmUgcGFzc2VkIHRvIHRoZSBhcHAgY2xpZW50IHZpYSB0aGUgVVJMJ3MgcXVlcnkgc3RyaW5nLgogCiAgICAgICAgICAgICBUbyB1c2UgYSBkaWZmZXJlbnQgZGVsaW1pdGVyLCBwYXNzIGFyZ2RlbGltaXRlciB3aXRoIHRoZSB2YWx1ZSBzZXQgdG8KICAgICAgICAgICAgIHRoZSBkZWxpbWl0ZXIgeW91IHdhbnQgdG8gdXNlLgotICAgICAgICAgICAgCisKICAgICAgICAgYXJnZGVsaW1pdGVyCiAgICAgICAgICAgICB0aGUgY2hhcmFjdGVyIHdoaWNoIHNlcGFyYXRlcyBhcmd1bWVudHMgaW4gdGhlIGFyZ3MgdmFsdWUKLSAgICAgICAgCisKICAgICAgICAgdXJscGF0aAogICAgICAgICAgICAgdGhlIHBhdGggcGFydCBvZiB0aGUgVVJMIHRvIGJlIHVzZWQgaW4gaW52b2tpbmcgdGhlIGFwcCBjbGllbnQKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBUaGVyZSBpcyBubyBkZWZhdWx0IHZhbHVlLiAgV2hlbiB5b3UgZGVwbG95IGEgc3RhbmQtYWxvbmUKICAgICAgICAgICAgIGFwcCBjbGllbnQsIHRoZSBkZWZhdWx0IHBhdGggdGhlIGFwcCBzZXJ2ZXIgd2lsbCByZWNvZ25pemUgaXMgdGhlCiAgICAgICAgICAgICBtb2R1bGUgSUQgb2YgdGhlIGFwcCBjbGllbnQuICBJbiB0ZXN0cywgdGhpcyBpcyBvZnRlbiAke2FwcG5hbWV9LWNsaWVudC4KLSAgICAgICAgICAgIEZvciBhbiBlbWJlZGRlZCBhcHAgY2xpZW50LCB0aGUgZGVmYXVsdCBwYXRoIHRoZSBhcHAgc2VydmVyIHdpbGwgCi0gICAgICAgICAgICByZWNvZ25pemUgaXMgCi0gICAgICAgICAgICAKKyAgICAgICAgICAgIEZvciBhbiBlbWJlZGRlZCBhcHAgY2xpZW50LCB0aGUgZGVmYXVsdCBwYXRoIHRoZSBhcHAgc2VydmVyIHdpbGwKKyAgICAgICAgICAgIHJlY29nbml6ZSBpcworCiAgICAgICAgICAgICAgICAgJHttb2R1bGUgSUQgb2YgdGhlIEphdmEgRUUgYXBwfS8ke1VSSSB0byB0aGUgYXBwY2xpZW50IGphcn0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgVGhlIFVSSSB0byB0aGUgYXBwIGNsaWVudCBqYXIgaXMgdGhlIHRleHQgdmFsdWUgb2YgdGhlIDxqYXZhPiBlbGVtZW50CiAgICAgICAgICAgICBmb3IgdGhpcyBhcHAgY2xpZW50IGluIHRoZSBlYXIncyBhcHBsaWNhdGlvbi54bWwuCi0gICAgICAgICAgICAKKwogICAgICAgICBrZWVwdGVtcGZpbGVzCi0gICAgICAgIAorCiAgICAgICAgICAgICBwYXNzICJ0cnVlIiB0byByZXRhaW4gdGVtcG9yYXJ5IGZpbGVzIGNyZWF0ZWQgdG8gcnVuIHRoZSBjbGllbnQ7IGRlZmF1bHQgaXMgImZhbHNlIgotICAgICAgICAgICAgCisKICAgICAgICAgc3VuYWNjZGlyCiAgICAgICAgIHN1bmFjY25hbWUKLSAgICAgICAgCisKICAgICAgICAgICAgIGRlZmluZSB0aGVzZSB0byBwb2ludCB0byB0aGUgZ2xhc3NmaXNoLWFjYy54bWwgZGlyZWN0b3J5IGFuZCB0aGUgZmlsZSB3aXRoaW4gdGhhdAotICAgICAgICAgICAgZGlyZWN0b3J5IHRvIGJlIHVzZWQgd2hlbiBpbnZva2luZyB0aGUgY2xpZW50IC0gdGhlc2UgZGVmYXVsdCB0byAKKyAgICAgICAgICAgIGRpcmVjdG9yeSB0byBiZSB1c2VkIHdoZW4gaW52b2tpbmcgdGhlIGNsaWVudCAtIHRoZXNlIGRlZmF1bHQgdG8KICAgICAgICAgICAgICR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnIGFuZCBnbGFzc2Zpc2gtYWNjLnhtbAotICAgICAgICAgICAgCisKICAgICAgICAgcmVzdWx0cHJvcGVydHkKICAgICAgICAgICAgIHRoZSBuYW1lIG9mIGFuIGFudCBwcm9wZXJ0eSB0byBiZSBzZXQgd2l0aCB0aGUgY29tcGxldGlvbiBzdGF0dXMKICAgICAgICAgICAgIG9mIHRoZSBqYXZhd3MgaW52b2NhdGlvbi4gIFRoZSBkZWZhdWx0IGlzIHRoZSBwcm9wZXJ0eSBuYW1lICJyZXN1bHQuIgotICAgICAgICAgICAgCisKICAgICAtLT4KIAogICAgIDxtYWNyb2RlZiBuYW1lPSJydW4tandzIj4KQEAgLTk3LDEwICs5NywxMCBAQAogICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImFyZ2RlbGltaXRlciIgZGVmYXVsdD0iICIvPgogICAgICAgICA8YXR0cmlidXRlIG5hbWU9InJlc3VsdHByb3BlcnR5IiBkZWZhdWx0PSJyZXN1bHQiLz4KICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJrZWVwdGVtcGZpbGVzIiBkZWZhdWx0PSJmYWxzZSIvPgotICAgIAorCiAgICAgICAgIDxzZXF1ZW50aWFsPgotICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIDwhLS0KICAgICAgICAgICAgIFRoZSBuZXh0IGZldyBsaW5lcyBjb252ZXJ0IHRoZSBjYWxsZXIncyBhcmd1bWVudCBsaXN0IGludG8gYQogICAgICAgICAgICAgZm9ybSBzdWl0YWJsZSBhcyBhIHF1ZXJ5IHN0cmluZyBpbiBhIFVSTCwgd2l0aCBhcmc9IHByZWNlZGluZwpAQCAtMTIxLDI0ICsxMjEsMjQgQEAKICAgICAgICAgICAgICAgICA8aXNzZXQgcHJvcGVydHk9InVzZXIuYXJncy5pbnRyb2R1Y2VyIi8+CiAgICAgICAgICAgICA8L25vdD4KICAgICAgICAgPC9jb25kaXRpb24+Ci0gICAgICAgIAorCiAKICAgICAgICAgPCEtLQogICAgICAgICAgICAgQ3JlYXRlIGEgcGxhdGZvcm0tbmV1dHJhbCByZXByZXNlbnRhdGlvbiBmb3IgdGhlIHN1bmFjYy54bWwgZmlsZS4KICAgICAgICAgLS0+CiAgICAgICAgIDxuZXV0cmFsaXplIHByb3BlcnR5PSJnbGFzc2Zpc2gtYWNjLnhtbC5uZXV0cmFsIiBmaWxlPSJAe3N1bmFjY2Rpcn0vQHtzdW5hY2NuYW1lfSIvPgotICAgICAgICAKKwogICAgICAgICA8cHJvcGVydHkgbmFtZT0idXJsIiB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH1Ae3VybHBhdGh9P2FyZz0teG1sJmFtcDthcmc9JHtnbGFzc2Zpc2gtYWNjLnhtbC5uZXV0cmFsfSR7dXNlci5hcmdzLmludHJvZHVjZXJ9JHt1c2VyLmFyZ3MucGFydC5vZi51cmx9Ii8+CiAgICAgICAgIDxlY2hvIGxldmVsPSJ2ZXJib3NlIj5VUkwgaXMgJHt1cmx9PC9lY2hvPgotICAgICAgICA8ZXhlYyAgIGV4ZWN1dGFibGU9IiR7amF2YXdzLmNtZH0iIAotICAgICAgICAgICAgICAgIHJlc3VsdHByb3BlcnR5PSJAe3Jlc3VsdHByb3BlcnR5fSIgCi0gICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIiAKKyAgICAgICAgPGV4ZWMgICBleGVjdXRhYmxlPSIke2phdmF3cy5jbWR9IgorICAgICAgICAgICAgICAgIHJlc3VsdHByb3BlcnR5PSJAe3Jlc3VsdHByb3BlcnR5fSIKKyAgICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCiAgICAgICAgICAgICAgICAgb3V0cHV0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9qYXZhd3MubG9nIgogICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7amF2YXdzLndhaXRPcHRpb259Ii8+ICA8IS0tIEFzayBKYXZhIFdlYiBTdGFydCB0byB3YWl0IHVudGlsIHRoZSBjbGllbnQgZmluaXNoZWQgYmVmb3JlIGV4aXRpbmcgLS0+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke3VybH0iLz4KLSAgICAgICAgPC9leGVjPiAgICAKLSAgICAgICAgCisgICAgICAgIDwvZXhlYz4KKwogICAgICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJkaXNjYXJkLnRlbXAuZmlsZXMiPgogICAgICAgICAgICAgPGlzZmFsc2UgdmFsdWU9IkB7a2VlcHRlbXBmaWxlc30iLz4KICAgICAgICAgPC9jb25kaXRpb24+CkBAIC0xNDYsMTEgKzE0NiwxMSBAQAogCiAgICAgICA8L3NlcXVlbnRpYWw+CiAgICAgPC9tYWNyb2RlZj4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLnJ1bmp3cy50ZW1wLmZpbGVzIiBpZj0iZGlzY2FyZC50ZW1wLmZpbGVzIj4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2FyZ3N0ZW1wLnRtcH0iIHF1aWV0PSJ0cnVlIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8bWFjcm9kZWYgbmFtZT0ibmV1dHJhbGl6ZSIgPgogICAgICAgICA8YXR0cmlidXRlIG5hbWU9InByb3BlcnR5Ii8+CiAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZmlsZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9zaG93QXJncy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9zaG93QXJncy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGMyMmFmMTcuLmI3ZjkyOTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3Mvc2hvd0FyZ3MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL3Nob3dBcmdzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNob3dBcmdzIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpAQCAtMjUsNyArMjUsNyBAQAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImVhci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iY2xpZW50L2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDwhLS0KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7Y2xpZW50bmFtZX0uamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogLS0+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL3Nob3dBcmdzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3Mvc2hvd0FyZ3MvYnVpbGQueG1sCmluZGV4IDU2NDIzOTcuLjU5Yzc4MjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3Mvc2hvd0FyZ3MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3Mvc2hvd0FyZ3MvYnVpbGQueG1sCkBAIC00Niw5ICs0Niw5IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8IS0tIEluIHRoaXMgZXhhbXBsZSB0aGVyZSBhcmUgb25seSAuamF2YSBmaWxlcyBmb3IgdGhlIGNsaWVudCAtLT4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KQEAgLTU4LDcgKzU4LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC5lYXIiLz4gPCEtLSBhbHNvIGJ1aWxkcyB0aGUgY2xpZW50IC0tPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC5lYXIiIGRlcGVuZHM9ImJ1aWxkLmNsaWVudHMsYnVpbGQub3RoZXIuamFyIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzcGMtZWFyLWNvbW1vbiI+CiA8IS0tCkBAIC02Niw3ICs2Niw3IEBACiAtLT4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJlYXIvYXBwbGljYXRpb24td2l0aC1jbGllbnQtMi1hdC1zdWJkaXIueG1sIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgIDwhLS0KICAgICAgICBvdGhlci5qYXIgY29udGFpbnMgYSBjbGFzcyB1c2VkIGZyb20gdGhlIGNsaWVudC4gIFdlIHBhY2thZ2UgaXQKQEAgLTE3Niw3ICsxNzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LmVhciIgZGVwZW5kcz0iYnVpbGQuZWFyIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS5jbGllbnQiIGRlcGVuZHM9ImJ1aWxkLmNsaWVudCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGVwbG95ZWQuYXBwIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgpAQCAtMTkzLDEyICsxOTMsMTIgQEAKICAgICA8YXJnIGxpbmU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudDIuamFyIi8+CiAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS5lYXIiLz4KIDwhLS0gICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3kuY2xpZW50cyIvPi0tPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS5lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTIxOSwxNyArMjE5LDE3IEBACiAgICAgPHRhcmdldCBuYW1lPSJpbml0LXJlcG9ydCI+CiAgICAgICAgIDxkZWxldGUgZmFpbG9uZXJyb3I9ImZhbHNlIiBmaWxlPSIke3N1bW1hcnlGaWxlUGF0aH0iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0Ij4KICAgICAgICAgPGNvbmNhdD4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiR7c3VtbWFyeUZpbGVQYXRofSIvPgogICAgICAgICA8L2NvbmNhdD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiA8IS0tICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InRlc3Quc3RhbmRhbG9uZS5jbGllbnQiLz4tLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ0ZXN0LmVtYmVkZGVkLmNsaWVudHMiLz4KLSAgICAgICAgCisKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idGVzdC5zdGFuZGFsb25lLmNsaWVudCI+CkBAIC0yNzUsOCArMjc1LDggQEAKICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2NsaWVudE91dHB1dEZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+CiAKLSAgICAKLSAgICAKKworCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL3Nob3dBcmdzL2NsaWVudC9PdGhlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9zaG93QXJncy9jbGllbnQvT3RoZXIuamF2YQppbmRleCBlN2YzNzg3Li44NTdiNDdkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL3Nob3dBcmdzL2NsaWVudC9PdGhlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3Mvc2hvd0FyZ3MvY2xpZW50L090aGVyLmphdmEKQEAgLTI0LDggKzI0LDggQEAKICAqIEBhdXRob3IgdGpxdWlubgogICovCiBwdWJsaWMgY2xhc3MgT3RoZXIgewotICAgCisKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBoaSgpIHsKICAgICAgICAgcmV0dXJuICJGcm9tIG90aGVyLk90aGVyIjsKLSAgICB9IAorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3Mvc2hvd0FyZ3MvY2xpZW50L1Nob3dBcmdzQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL3Nob3dBcmdzL2NsaWVudC9TaG93QXJnc0NsaWVudC5qYXZhCmluZGV4IDBkMjA2YzAuLmQ3MTcwYmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3Mvc2hvd0FyZ3MvY2xpZW50L1Nob3dBcmdzQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9zaG93QXJncy9jbGllbnQvU2hvd0FyZ3NDbGllbnQuamF2YQpAQCAtMzYsMjIgKzM2LDIyIEBACiAgKiBAYXV0aG9yIHRqcXVpbm4KICAqLwogcHVibGljIGNsYXNzIFNob3dBcmdzQ2xpZW50IHsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIG91dEZpbGVTcGVjID0gbnVsbDsKICAgICBwcml2YXRlIFByaW50U3RyZWFtIG91dFN0cmVhbSA9IG51bGw7CiAKICAgICBwcml2YXRlIFN0cmluZyBleHBlY3RlZEFyZ3NGaWxlU3BlYyA9IG51bGw7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgc3RhdHVzRmlsZVNwZWMgPSBudWxsOwotICAgIAorCiAgICAgcHJpdmF0ZSBWZWN0b3I8U3RyaW5nPiBvdGhlckFyZ3MgPSBuZXcgVmVjdG9yPFN0cmluZz4oKTsKLSAgICAKKwogICAgIHByaXZhdGUgTWFwPFN0cmluZyxTdHJpbmc+IG9wdGlvblZhbHVlcyA9IG5ldyBIYXNoTWFwPFN0cmluZyxTdHJpbmc+KCk7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBTaG93QXJnc0NsaWVudCAqLwogICAgIHB1YmxpYyBTaG93QXJnc0NsaWVudCgpIHsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAcGFyYW0gYXJncyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwogICAgICAqLwpAQCAtNzgsOSArNzgsOSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBydW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3VsdCBmcm9tIGludm9raW5nIG1ldGhvZCBpbiBvdGhlci5qYXI6ICIgKyBPdGhlci5oaSgpKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb21tYW5kIGxpbmUgYXJndW1lbnRzOiIpOwpAQCAtODksMjcgKzg5LDI3IEBACiAgICAgICAgIH0KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CiAgICAgICAgIHByZXBhcmVBcmd1bWVudHMoYXJncyk7Ci0gICAgICAgIAorCiAgICAgICAgIC8qCi0gICAgICAgICAqRGVmYXVsdCBpcyBmb3IgYWxsIG91dHB1dCB0byBnbyB0byBTeXN0ZW0ub3V0LCB3aGljaCB3aWxsIGJlIGEgCisgICAgICAgICAqRGVmYXVsdCBpcyBmb3IgYWxsIG91dHB1dCB0byBnbyB0byBTeXN0ZW0ub3V0LCB3aGljaCB3aWxsIGJlIGEKICAgICAgICAgICp0cmFjZSBmaWxlIGluIHRoZSBKYXZhIFdlYiBTdGFydCBkaXJlY3RvcnkgaWYgSmF2YSBXZWIgU3RhcnQgdHJhY2luZyBpcyBvbi4KICAgICAgICAgICovCiAgICAgICAgIGlmIChvdXRTdHJlYW0gPT0gbnVsbCkgewogICAgICAgICAgICAgb3V0U3RyZWFtID0gU3lzdGVtLm91dDsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBvdXRTdHJlYW0ucHJpbnRsbigiQ29tbWFuZCBsaW5lIGFyZ3VtZW50czoiKTsKICAgICAgICAgZm9yIChTdHJpbmcgYXJnIDogYXJncykgewogICAgICAgICAgICAgb3V0U3RyZWFtLnByaW50bG4oYXJnKTsKICAgICAgICAgfQotICAgICAgICAKKwogLy8gICAgICAgIC8qCiAvLyAgICAgICAgICpNYWtlIHN1cmUgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudCB2YWx1ZXMgZm9yIG90aGVyQXJncyBhZ3JlZSB3aXRoCiAvLyAgICAgICAgICp3aGF0IGlzIHN0b3JlZCBpbiB0aGUgdGVtcG9yYXJ5IGZpbGUuCiAvLyAgICAgICAgICovCiAvLyAgICAgICAgY2hlY2tBY3R1YWxBcmdzVnNFeHBlY3RlZCgpOwotLy8gICAgICAgIAotICAgICAgICAKKy8vCisKICAgICAgICAgb3V0U3RyZWFtLmZsdXNoKCk7CiAgICAgfQogCkBAIC0xMjgsMTIgKzEyOCwxMiBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgb3RoZXJBcmdzQXNMaW5lLmFwcGVuZChzKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoICEgb3RoZXJBcmdzQXNMaW5lLnRvU3RyaW5nKCkuZXF1YWxzKGV4cGVjdGVkQXJnVmFsdWVzKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQWN0dWFsIGFyZ3VtZW50cyB3ZXJlICIgKyBvdGhlckFyZ3NBc0xpbmUudG9TdHJpbmcoKSArICI7IGV4cGVjdGVkICIgKyBleHBlY3RlZEFyZ1ZhbHVlcyk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgcHJlcGFyZUFyZ3VtZW50cyhTdHJpbmdbXSBhcmdzKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLCBGaWxlTm90Rm91bmRFeGNlcHRpb24gewogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIGlmIChhcmdzW2ldLmNoYXJBdCgwKSA9PSAnLScpIHsKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgICAgICB9CiAvLyAgICAgICAgc3RhdHVzRmlsZVNwZWMgPSBvcHRpb25WYWx1ZXMuZ2V0KCJzdGF0dXNGaWxlIik7CiAvLyAgICAgICAgZXhwZWN0ZWRBcmdzRmlsZVNwZWMgPSBvcHRpb25WYWx1ZXMuZ2V0KCJleHBlY3RlZEFyZ3NGaWxlIik7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3V0ID0gIiArIG91dEZpbGVTcGVjKTsKICAgICAgICAgaWYgKG91dEZpbGUgIT0gbnVsbCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgIHdoaWNoIGlzIHRoZSBmaWxlICIgKyBvdXRGaWxlLmdldEFic29sdXRlUGF0aCgpKTsKQEAgLTE2MCw3ICsxNjAsNyBAQAogLy8gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXhwZWN0ZWRBcmdzRmlsZSA9ICIgKyBleHBlY3RlZEFyZ3NGaWxlU3BlYyk7CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJPdGhlciBhcmd1bWVudHM6ICIgKyBvdGhlckFyZ3MpOwotICAgICAgICAKKwogLy8gICAgICAgIGlmIChvdXRGaWxlU3BlYyA9PSBudWxsIHx8IHN0YXR1c0ZpbGVTcGVjID09IG51bGwgfHwgZXhwZWN0ZWRBcmdzRmlsZVNwZWMgPT0gbnVsbCkgewogLy8gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJBdCBsZWFzdCBvbmUgb2YgLW91dCwgLXN0YXR1c0ZpbGUsIGFuZCAtZXhwZWN0ZWRBcmdzRmlsZSBpcyBtaXNzaW5nIGFuZCBhbGwgYXJlIHJlcXVpcmVkIik7CiAvLyAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9zaG93QXJncy9jbGllbnQvU2hvd0FyZ3NDbGllbnQyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL3Nob3dBcmdzL2NsaWVudC9TaG93QXJnc0NsaWVudDIuamF2YQppbmRleCAwZmFkOTZlLi4yNTliY2U4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL3Nob3dBcmdzL2NsaWVudC9TaG93QXJnc0NsaWVudDIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL3Nob3dBcmdzL2NsaWVudC9TaG93QXJnc0NsaWVudDIuamF2YQpAQCAtMzcsMjAgKzM3LDIwIEBACiAgKiBAYXV0aG9yIHRqcXVpbm4KICAqLwogcHVibGljIGNsYXNzIFNob3dBcmdzQ2xpZW50MiB7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBvdXRGaWxlU3BlYyA9IG51bGw7CiAgICAgcHJpdmF0ZSBQcmludFN0cmVhbSBvdXRTdHJlYW0gPSBudWxsOwogCiAgICAgcHJpdmF0ZSBTdHJpbmcgZXhwZWN0ZWRBcmdzRmlsZVNwZWMgPSBudWxsOwotICAgIAorCiAgICAgcHJpdmF0ZSBWZWN0b3I8U3RyaW5nPiBvdGhlckFyZ3MgPSBuZXcgVmVjdG9yPFN0cmluZz4oKTsKLSAgICAKKwogICAgIHByaXZhdGUgTWFwPFN0cmluZyxTdHJpbmc+IG9wdGlvblZhbHVlcyA9IG5ldyBIYXNoTWFwPFN0cmluZyxTdHJpbmc+KCk7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBTaG93QXJnc0NsaWVudCAqLwogICAgIHB1YmxpYyBTaG93QXJnc0NsaWVudDIoKSB7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQHBhcmFtIGFyZ3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKICAgICAgKi8KQEAgLTY0LDkgKzY0LDkgQEAKICAgICAgICAgICAgIHN0YXR1cyA9IDE7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ2xpZW50IGRldGVjdGVkIHRoZSBmb2xsb3dpbmcgZXJyb3IiLCB0aHIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHJ1bihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmcm9tIGNsaWVudCAjMjoiKTsKICAgICAgICAgZm9yIChTdHJpbmcgYXJnIDogYXJncykgewpAQCAtNzQsMTUgKzc0LDE1IEBACiAgICAgICAgIH0KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CiAgICAgICAgIHByZXBhcmVBcmd1bWVudHMoYXJncyk7Ci0gICAgICAgIAorCiAgICAgICAgIC8qCi0gICAgICAgICAqRGVmYXVsdCBpcyBmb3IgYWxsIG91dHB1dCB0byBnbyB0byBTeXN0ZW0ub3V0LCB3aGljaCB3aWxsIGJlIGEgCisgICAgICAgICAqRGVmYXVsdCBpcyBmb3IgYWxsIG91dHB1dCB0byBnbyB0byBTeXN0ZW0ub3V0LCB3aGljaCB3aWxsIGJlIGEKICAgICAgICAgICp0cmFjZSBmaWxlIGluIHRoZSBKYXZhIFdlYiBTdGFydCBkaXJlY3RvcnkgaWYgSmF2YSBXZWIgU3RhcnQgdHJhY2luZyBpcyBvbi4KICAgICAgICAgICovCiAgICAgICAgIGlmIChvdXRTdHJlYW0gPT0gbnVsbCkgewogICAgICAgICAgICAgb3V0U3RyZWFtID0gU3lzdGVtLm91dDsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBvdXRTdHJlYW0ucHJpbnRsbigiQ29tbWFuZCBsaW5lIGFyZ3VtZW50czoiKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTsgaSsrKSB7CiAgICAgICAgICAgICBvdXRTdHJlYW0ucHJpbnRsbigiVGhpcyBpcyBhIHRlc3QgbGluZSB0byB1c2UgdXAgc29tZSBzcGFjZTogIiArIGkpOwpAQCAtOTAsMTQgKzkwLDE0IEBACiAgICAgICAgIGZvciAoU3RyaW5nIGFyZyA6IGFyZ3MpIHsKICAgICAgICAgICAgIG91dFN0cmVhbS5wcmludGxuKGFyZyk7CiAgICAgICAgIH0KLSAgICAgICAgCisKIC8vICAgICAgICAvKgogLy8gICAgICAgICAqTWFrZSBzdXJlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgdmFsdWVzIGZvciBvdGhlckFyZ3MgYWdyZWUgd2l0aAogLy8gICAgICAgICAqd2hhdCBpcyBzdG9yZWQgaW4gdGhlIHRlbXBvcmFyeSBmaWxlLgogLy8gICAgICAgICAqLwogLy8gICAgICAgIGNoZWNrQWN0dWFsQXJnc1ZzRXhwZWN0ZWQoKTsKLS8vICAgICAgICAKLSAgICAgICAgCisvLworCiAgICAgICAgIG91dFN0cmVhbS5mbHVzaCgpOwogICAgIH0KIApAQCAtMTE2LDEyICsxMTYsMTIgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG90aGVyQXJnc0FzTGluZS5hcHBlbmQocyk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKCAhIG90aGVyQXJnc0FzTGluZS50b1N0cmluZygpLmVxdWFscyhleHBlY3RlZEFyZ1ZhbHVlcykpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkFjdHVhbCBhcmd1bWVudHMgd2VyZSAiICsgb3RoZXJBcmdzQXNMaW5lLnRvU3RyaW5nKCkgKyAiOyBleHBlY3RlZCAiICsgZXhwZWN0ZWRBcmdWYWx1ZXMpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHByZXBhcmVBcmd1bWVudHMoU3RyaW5nW10gYXJncykgdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiwgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoYXJnc1tpXS5jaGFyQXQoMCkgPT0gJy0nKSB7CkBAIC0xMzksNyArMTM5LDcgQEAKICAgICAgICAgfQogLy8gICAgICAgIHN0YXR1c0ZpbGVTcGVjID0gb3B0aW9uVmFsdWVzLmdldCgic3RhdHVzRmlsZSIpOwogLy8gICAgICAgIGV4cGVjdGVkQXJnc0ZpbGVTcGVjID0gb3B0aW9uVmFsdWVzLmdldCgiZXhwZWN0ZWRBcmdzRmlsZSIpOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIm91dCA9ICIgKyBvdXRGaWxlU3BlYyk7CiAgICAgICAgIGlmIChvdXRGaWxlICE9IG51bGwpIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiICAgICB3aGljaCBpcyB0aGUgZmlsZSAiICsgb3V0RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSk7CkBAIC0xNDgsNyArMTQ4LDcgQEAKIC8vICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oImV4cGVjdGVkQXJnc0ZpbGUgPSAiICsgZXhwZWN0ZWRBcmdzRmlsZVNwZWMpOwogCiAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiT3RoZXIgYXJndW1lbnRzOiAiICsgb3RoZXJBcmdzKTsKLSAgICAgICAgCisKIC8vICAgICAgICBpZiAob3V0RmlsZVNwZWMgPT0gbnVsbCB8fCBzdGF0dXNGaWxlU3BlYyA9PSBudWxsIHx8IGV4cGVjdGVkQXJnc0ZpbGVTcGVjID09IG51bGwpIHsKIC8vICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQXQgbGVhc3Qgb25lIG9mIC1vdXQsIC1zdGF0dXNGaWxlLCBhbmQgLWV4cGVjdGVkQXJnc0ZpbGUgaXMgbWlzc2luZyBhbmQgYWxsIGFyZSByZXF1aXJlZCIpOwogLy8gICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3Mvc2hvd0FyZ3MvY2xpZW50L2FwcGxpY2F0aW9uLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL3Nob3dBcmdzL2NsaWVudC9hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IGFlODRhNTcuLmE0ZjM1ZGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3Mvc2hvd0FyZ3MvY2xpZW50L2FwcGxpY2F0aW9uLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9zaG93QXJncy9jbGllbnQvYXBwbGljYXRpb24tY2xpZW50LnhtbApAQCAtMjgsOCArMjgsOCBAQAogPGFwcGxpY2F0aW9uLWNsaWVudCB4bWxucz0naHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlJwogICB4bWxuczp4c2k9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJwogICB4c2k6c2NoZW1hTG9jYXRpb249J2h0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvYXBwbGljYXRpb24tY2xpZW50XzUueHNkJwotICB2ZXJzaW9uPSI1Ij4gCi0gIAorICB2ZXJzaW9uPSI1Ij4KKwogICA8ZGlzcGxheS1uYW1lPlNob3cgQXJndW1lbnRzPC9kaXNwbGF5LW5hbWU+CiAKIDwvYXBwbGljYXRpb24tY2xpZW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9zaG93QXJncy9jbGllbnQvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL3Nob3dBcmdzL2NsaWVudC9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbAppbmRleCBlNmNjZmYyLi5lYjE2MDM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL3Nob3dBcmdzL2NsaWVudC9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL3Nob3dBcmdzL2NsaWVudC9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbApAQCAtMjAsNiArMjAsNiBAQAogCiA8c3VuLWFwcGxpY2F0aW9uLWNsaWVudD4KICAgPGphdmEtd2ViLXN0YXJ0LWFjY2Vzcz4KLSAgICAgPGpubHAtZG9jPm15TGF1bmNoLmpubHA8L2pubHAtZG9jPiAKKyAgICAgPGpubHAtZG9jPm15TGF1bmNoLmpubHA8L2pubHAtZG9jPgogICA8L2phdmEtd2ViLXN0YXJ0LWFjY2Vzcz4KIDwvc3VuLWFwcGxpY2F0aW9uLWNsaWVudD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3Mvc2hvd0FyZ3MvZWFyL2FwcGxpY2F0aW9uLXdpdGgtY2xpZW50LWF0LXRvcC1sZXZlbC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL3Nob3dBcmdzL2Vhci9hcHBsaWNhdGlvbi13aXRoLWNsaWVudC1hdC10b3AtbGV2ZWwueG1sCmluZGV4IDZlY2IxMTUuLjRiNDgzNzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3Mvc2hvd0FyZ3MvZWFyL2FwcGxpY2F0aW9uLXdpdGgtY2xpZW50LWF0LXRvcC1sZXZlbC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9zaG93QXJncy9lYXIvYXBwbGljYXRpb24td2l0aC1jbGllbnQtYXQtdG9wLWxldmVsLnhtbApAQCAtMjksMTQgKzI5LDE0IEBACiAgIHhtbG5zOnhzaT0naHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UnCiAgIHhzaTpzY2hlbWFMb2NhdGlvbj0naHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9hcHBsaWNhdGlvbl81LnhzZCcKICAgdmVyc2lvbj0iNSI+Ci0gIAorCiAgIDwhLS0KLSAgICBXaXRoIHRoZSBmb2xsb3dpbmcgZWxlbWVudCBjb21tZW50ZWQgb3V0LCBkZXBsb3ltZW50IHRocm93cyBhbiAKKyAgICBXaXRoIHRoZSBmb2xsb3dpbmcgZWxlbWVudCBjb21tZW50ZWQgb3V0LCBkZXBsb3ltZW50IHRocm93cyBhbgogICAgIGV4Y2VwdGlvbi4KICAgICAtLT4KLSAgICAKKwogICA8ZGlzcGxheS1uYW1lPnNob3ctYXJnczwvZGlzcGxheS1uYW1lPgotICAKKwogICA8bW9kdWxlPgogICAgICA8amF2YT5zaG93QXJncy1jbGllbnQuamFyPC9qYXZhPgogICA8L21vZHVsZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3Mvc2hvd1dpdGhMaWIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3Mvc2hvd1dpdGhMaWIvYnVpbGQucHJvcGVydGllcwppbmRleCBhNjRhNmU5Li4xN2U0ZGU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL3Nob3dXaXRoTGliL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9zaG93V2l0aExpYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzaG93V2l0aExpYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KQEAgLTI1LDcgKzI1LDcgQEAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJlYXIvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImNsaWVudC9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8IS0tCi08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2NsaWVudG5hbWV9LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIC0tPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9zaG93V2l0aExpYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL3Nob3dXaXRoTGliL2J1aWxkLnhtbAppbmRleCBkZjFkNDQ4Li4zNGFjNTc1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL3Nob3dXaXRoTGliL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL3Nob3dXaXRoTGliL2J1aWxkLnhtbApAQCAtMzgsNyArMzgsNyBAQAogICAgIDxwcm9wZXJ0eSBuYW1lPSJsaWIuamFyLnBhdGgiIHZhbHVlPSJsaWIuamFyIi8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZC5lYXIiLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2lnbi5qYXIiIGRlcGVuZHM9ImJ1aWxkLmxpYiI+CiAgICAgICAgIDxzaWduamFyIHZlcmJvc2U9InRydWUiIGphcj0iJHthc3NlbWJsZS5kaXJ9L2xpYi9saWIuamFyIiBhbGlhcz0iczFhcyIgc3RvcmVwYXNzPSJjaGFuZ2VpdCIKICAgICAgICAgICAgICAgICAga2V5cGFzcz0iY2hhbmdlaXQiIGtleXN0b3JlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9jb25maWcva2V5c3RvcmUuamtzIgpAQCAtNjEsOCArNjEsOCBAQAogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8L2phcj4KLSAgICA8L3RhcmdldD4gCi0gICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQubGliIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS9saWIiLz4KQEAgLTcxLDggKzcxLDggQEAKICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi9saWIvKi5jbGFzcyIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8L2phcj4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iLiIvPgpAQCAtOTgsMTAgKzk4LDEwIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAtLT4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbix0ZXN0LmVtYmVkZGVkLmNsaWVudCIvPgogCi0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3Mvc2hvd1dpdGhMaWIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9zaG93V2l0aExpYi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNGIyM2QwMi4uMDIzYWVhMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9zaG93V2l0aExpYi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9zaG93V2l0aExpYi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTQwLDE1ICs0MCwxNSBAQAogICogQGF1dGhvciB0anF1aW5uCiAgKi8KIHB1YmxpYyBjbGFzcyBDbGllbnQgewotICAgIAorCiAgICAgcHJpdmF0ZSBWZWN0b3I8U3RyaW5nPiBvdGhlckFyZ3MgPSBuZXcgVmVjdG9yPFN0cmluZz4oKTsKLSAgICAKKwogICAgIHByaXZhdGUgTWFwPFN0cmluZyxTdHJpbmc+IG9wdGlvblZhbHVlcyA9IG5ldyBIYXNoTWFwPFN0cmluZyxTdHJpbmc+KCk7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBTaG93QXJnc0NsaWVudCAqLwogICAgIHB1YmxpYyBDbGllbnQoKSB7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQHBhcmFtIGFyZ3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKICAgICAgKi8KQEAgLTYxLDkgKzYxLDkgQEAKICAgICAgICAgICAgIHN0YXR1cyA9IDE7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ2xpZW50IGRldGVjdGVkIHRoZSBmb2xsb3dpbmcgZXJyb3IiLCB0aHIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHJ1bihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiSW4gQ2xpZW50Iik7CiAgICAgICAgIENsYXNzTG9hZGVyIGNsID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsKQEAgLTg0LDE2ICs4NCwxNiBAQAogICAgICAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwogICAgICAgICBwcmVwYXJlQXJndW1lbnRzKGFyZ3MpOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbW1hbmQgbGluZSBhcmd1bWVudHM6Iik7CiAgICAgICAgIGZvciAoU3RyaW5nIGFyZyA6IGFyZ3MpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhcmcpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQuZmx1c2goKTsKICAgICB9CiAKLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBwcmVwYXJlQXJndW1lbnRzKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24sIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgaWYgKGFyZ3NbaV0uY2hhckF0KDApID09ICctJykgewpAQCAtMTA0LDYgKzEwNCw2IEBACiAgICAgICAgIH0KIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk90aGVyIGFyZ3VtZW50czogIiArIG90aGVyQXJncyk7Ci0gICAgICAgIAorCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9zaG93V2l0aExpYi9lYXIvYXBwbGljYXRpb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9zaG93V2l0aExpYi9lYXIvYXBwbGljYXRpb24ueG1sCmluZGV4IDAzYTZjNDAuLjZlOGVmOGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3Mvc2hvd1dpdGhMaWIvZWFyL2FwcGxpY2F0aW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL3Nob3dXaXRoTGliL2Vhci9hcHBsaWNhdGlvbi54bWwKQEAgLTI5LDE0ICsyOSwxNCBAQAogICB4bWxuczp4c2k9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJwogICB4c2k6c2NoZW1hTG9jYXRpb249J2h0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvYXBwbGljYXRpb25fNS54c2QnCiAgIHZlcnNpb249IjUiPgotICAKKwogICA8IS0tCi0gICAgV2l0aCB0aGUgZm9sbG93aW5nIGVsZW1lbnQgY29tbWVudGVkIG91dCwgZGVwbG95bWVudCB0aHJvd3MgYW4gCisgICAgV2l0aCB0aGUgZm9sbG93aW5nIGVsZW1lbnQgY29tbWVudGVkIG91dCwgZGVwbG95bWVudCB0aHJvd3MgYW4KICAgICBleGNlcHRpb24uCiAgICAgLS0+Ci0gICAgCisKICAgPGRpc3BsYXktbmFtZT5zaG93LWFyZ3M8L2Rpc3BsYXktbmFtZT4KLSAgCisKICAgPG1vZHVsZT4KICAgICAgPGphdmE+c2hvd1dpdGhMaWItY2xpZW50LmphcjwvamF2YT4KICAgPC9tb2R1bGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL3Nob3dXaXRoU2lnbmVkTGliL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL3Nob3dXaXRoU2lnbmVkTGliL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTUzYWI2YS4uNzIyZWUwZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9zaG93V2l0aFNpZ25lZExpYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3Mvc2hvd1dpdGhTaWduZWRMaWIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2hvd1dpdGhTaWduZWRMaWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CkBAIC0yNSw3ICsyNSw3IEBACiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZWFyL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJjbGllbnQvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPCEtLQotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHtjbGllbnRuYW1lfS5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiAtLT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3Mvc2hvd1dpdGhTaWduZWRMaWIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9zaG93V2l0aFNpZ25lZExpYi9idWlsZC54bWwKaW5kZXggNDUyMjU5YS4uNTcwYTM4MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9zaG93V2l0aFNpZ25lZExpYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9zaG93V2l0aFNpZ25lZExpYi9idWlsZC54bWwKQEAgLTM3LDcgKzM3LDcgQEAKICAgICA8cHJvcGVydHkgbmFtZT0ibGliLmphci5wYXRoIiB2YWx1ZT0ic2lnbmVkbGliLmphciIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQuZWFyIi8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNpZ24uamFyIiBkZXBlbmRzPSJidWlsZC5saWIiPgogICAgICAgICA8c2lnbmphciB2ZXJib3NlPSJ0cnVlIiBqYXI9IiR7YXNzZW1ibGUuZGlyfS9saWIvbGliLmphciIgYWxpYXM9InMxYXMiIHN0b3JlcGFzcz0iY2hhbmdlaXQiCiAgICAgICAgICAgICAgICAgIGtleXBhc3M9ImNoYW5nZWl0IiBrZXlzdG9yZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvY29uZmlnL2tleXN0b3JlLmprcyIKQEAgLTYwLDggKzYwLDggQEAKICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgPC9qYXI+Ci0gICAgPC90YXJnZXQ+IAotICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLmxpYiIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0vbGliIi8+CkBAIC03MCw4ICs3MCw4IEBACiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovbGliLyouY2xhc3MiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgPC9qYXI+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9Ii4iLz4KQEAgLTk3LDEwICs5NywxMCBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogLS0+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24sdGVzdC5lbWJlZGRlZC5jbGllbnQiLz4KIAotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL3Nob3dXaXRoU2lnbmVkTGliL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3Mvc2hvd1dpdGhTaWduZWRMaWIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDRiMjNkMDIuLjAyM2FlYTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3Mvc2hvd1dpdGhTaWduZWRMaWIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3Mvc2hvd1dpdGhTaWduZWRMaWIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC00MCwxNSArNDAsMTUgQEAKICAqIEBhdXRob3IgdGpxdWlubgogICovCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICAKKwogICAgIHByaXZhdGUgVmVjdG9yPFN0cmluZz4gb3RoZXJBcmdzID0gbmV3IFZlY3RvcjxTdHJpbmc+KCk7Ci0gICAgCisKICAgICBwcml2YXRlIE1hcDxTdHJpbmcsU3RyaW5nPiBvcHRpb25WYWx1ZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsU3RyaW5nPigpOwotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgU2hvd0FyZ3NDbGllbnQgKi8KICAgICBwdWJsaWMgQ2xpZW50KCkgewogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEBwYXJhbSBhcmdzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCiAgICAgICovCkBAIC02MSw5ICs2MSw5IEBACiAgICAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNsaWVudCBkZXRlY3RlZCB0aGUgZm9sbG93aW5nIGVycm9yIiwgdGhyKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBydW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkluIENsaWVudCIpOwogICAgICAgICBDbGFzc0xvYWRlciBjbCA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7CkBAIC04NCwxNiArODQsMTYgQEAKICAgICAgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKICAgICAgICAgcHJlcGFyZUFyZ3VtZW50cyhhcmdzKTsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb21tYW5kIGxpbmUgYXJndW1lbnRzOiIpOwogICAgICAgICBmb3IgKFN0cmluZyBhcmcgOiBhcmdzKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYXJnKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LmZsdXNoKCk7CiAgICAgfQogCi0gICAgCisKICAgICBwcml2YXRlIHZvaWQgcHJlcGFyZUFyZ3VtZW50cyhTdHJpbmdbXSBhcmdzKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLCBGaWxlTm90Rm91bmRFeGNlcHRpb24gewogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIGlmIChhcmdzW2ldLmNoYXJBdCgwKSA9PSAnLScpIHsKQEAgLTEwNCw2ICsxMDQsNiBAQAogICAgICAgICB9CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJPdGhlciBhcmd1bWVudHM6ICIgKyBvdGhlckFyZ3MpOwotICAgICAgICAKKwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3Mvc2hvd1dpdGhTaWduZWRMaWIvZWFyL2FwcGxpY2F0aW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9qd3Mvc2hvd1dpdGhTaWduZWRMaWIvZWFyL2FwcGxpY2F0aW9uLnhtbAppbmRleCAwM2E2YzQwLi42ZThlZjhmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvandzL3Nob3dXaXRoU2lnbmVkTGliL2Vhci9hcHBsaWNhdGlvbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L2p3cy9zaG93V2l0aFNpZ25lZExpYi9lYXIvYXBwbGljYXRpb24ueG1sCkBAIC0yOSwxNCArMjksMTQgQEAKICAgeG1sbnM6eHNpPSdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZScKICAgeHNpOnNjaGVtYUxvY2F0aW9uPSdodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2FwcGxpY2F0aW9uXzUueHNkJwogICB2ZXJzaW9uPSI1Ij4KLSAgCisKICAgPCEtLQotICAgIFdpdGggdGhlIGZvbGxvd2luZyBlbGVtZW50IGNvbW1lbnRlZCBvdXQsIGRlcGxveW1lbnQgdGhyb3dzIGFuIAorICAgIFdpdGggdGhlIGZvbGxvd2luZyBlbGVtZW50IGNvbW1lbnRlZCBvdXQsIGRlcGxveW1lbnQgdGhyb3dzIGFuCiAgICAgZXhjZXB0aW9uLgogICAgIC0tPgotICAgIAorCiAgIDxkaXNwbGF5LW5hbWU+c2hvdy1hcmdzPC9kaXNwbGF5LW5hbWU+Ci0gIAorCiAgIDxtb2R1bGU+CiAgICAgIDxqYXZhPnNob3dXaXRoTGliLWNsaWVudC5qYXI8L2phdmE+CiAgIDwvbW9kdWxlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L21haW5jbGFzc29wdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2J1aWxkLnhtbAppbmRleCBiNmFmOTE1Li45MzQyOGY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2J1aWxkLnhtbApAQCAtNzYsMTYgKzc2LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4gVXNhZ2U6Ci0JCWFudCBlbnJvbGxlciAoRXhlY3V0ZXMgdGhlIGVucm9sbGVyIHRlc3RzKQotCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYiBibXAgdGVzdHMpCi0JCWFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgZWpiIGJtcCB0ZXN0cykKLQkJYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBlamIgYm1wIHRlc3RzKQotCQlhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgYm1wIHRlc3RzKQotCQlhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgZWpiIGJtcCBhcHBzKQotCQlhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGVqYiBibXAgdGVzdHMpCi0JCWFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgYm1wIGFwcHMpCi0JCWFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3IgYm1wIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4gVXNhZ2U6CisgICAgICAgIGFudCBlbnJvbGxlciAoRXhlY3V0ZXMgdGhlIGVucm9sbGVyIHRlc3RzKQorICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYiBibXAgdGVzdHMpCisgICAgICAgIGFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgZWpiIGJtcCB0ZXN0cykKKyAgICAgICAgYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBlamIgYm1wIHRlc3RzKQorICAgICAgICBhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgYm1wIHRlc3RzKQorICAgICAgICBhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgZWpiIGJtcCBhcHBzKQorICAgICAgICBhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGVqYiBibXAgdGVzdHMpCisgICAgICAgIGFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgYm1wIGFwcHMpCisgICAgICAgIGFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3IgYm1wIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9tYWluY2xhc3NvcHRpb24vZW5yb2xsZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9tYWluY2xhc3NvcHRpb24vZW5yb2xsZXIvYnVpbGQucHJvcGVydGllcwppbmRleCA5N2JkOTRjLi43OGM5ZjgxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2Vucm9sbGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L21haW5jbGFzc29wdGlvbi9lbnJvbGxlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWVucm9sbGVyIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1lbnJvbGxlciIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJkZWZhdWx0LWluc3RhbmNlIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9tYWluY2xhc3NvcHRpb24vZW5yb2xsZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L21haW5jbGFzc29wdGlvbi9lbnJvbGxlci9idWlsZC54bWwKaW5kZXggMmE4ZmY1Ny4uNzdkNmIxNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L21haW5jbGFzc29wdGlvbi9lbnJvbGxlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L21haW5jbGFzc29wdGlvbi9lbnJvbGxlci9idWlsZC54bWwKQEAgLTMyLDI1ICszMiwyNSBAQAogICAgICZydW47CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgotCTxhbnRjYWxsIHRhcmdldD0iYnVpbGQtc2luZ2xlLWFwcGNsaWVudGphciIvPgotCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJydW4tc2luZ2xlLWFwcGNsaWVudC1qYXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtc2luZ2xlLWFwcGNsaWVudGphciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tc2luZ2xlLWFwcGNsaWVudC1qYXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1tdWx0aS1hcHBjbGllbnRqYXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveSIvPgotCTxhbnRjYWxsIHRhcmdldD0icnVuLW11bHRpLWFwcGNsaWVudC1qYXIxIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJydW4tbXVsdGktYXBwY2xpZW50LWphcjIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1tdWx0aS1hcHBjbGllbnRqYXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLW11bHRpLWFwcGNsaWVudC1qYXIxIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tbXVsdGktYXBwY2xpZW50LWphcjIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC02Miw0OSArNjIsNDkgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtc2luZ2xlLWFwcGNsaWVudGphciIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLypTdHVkZW50Ki5jbGFzcywqKi8qRW5yb2xsZXIqLmNsYXNzLCoqLypDb3Vyc2UqLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL0NvdXJzZS5jbGFzcywqKi9FbnJvbGxlci5jbGFzcywqKi9TdHVkZW50LmNsYXNzLCoqLypIb21lKi5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLW11bHRpLWFwcGNsaWVudGphciIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnRqYXIiPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudDEuamFyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iKiovKlN0dWRlbnQqLmNsYXNzLCoqLypFbnJvbGxlciouY2xhc3MsKiovKkNvdXJzZSouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIqKi9Db3Vyc2UuY2xhc3MsKiovRW5yb2xsZXIuY2xhc3MsKiovU3R1ZGVudC5jbGFzcywqKi8qSG9tZSouY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiA8cGFyYW0gbmFtZT0iYXBwbGljYXRpb24ueG1sIgogdmFsdWU9Ii4vYXBwbGljYXRpb24ueG1sIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0icGFja2FnZS1hcHBjbGllbnRqYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgPGRlbGV0ZSBmaWxlPSIke2FwcGNsaWVudC5qYXJ9Ii8+Ci0gIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IEdlbmVyYXRpbmcgYXBwY2xpZW50LWphciBpbnNpZGUgYnVpbGQgZGlyZWN0b3J5IiAKKyAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogR2VuZXJhdGluZyBhcHBjbGllbnQtamFyIGluc2lkZSBidWlsZCBkaXJlY3RvcnkiCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci0gIDxqYXIgamFyZmlsZT0iJHthcHBjbGllbnQuamFyfSIgYmFzZWRpcj0iJHthcHBjbGllbnRqYXIuZmlsZXN9IiAKLSAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iJHthcHBjbGllbnRqYXIuY2xhc3Nlc30iIAotICAgIG1hbmlmZXN0PSIuL01BTklGRVNULk1GIj4gICAgICAgICAKKyAgPGphciBqYXJmaWxlPSIke2FwcGNsaWVudC5qYXJ9IiBiYXNlZGlyPSIke2FwcGNsaWVudGphci5maWxlc30iCisgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IiR7YXBwY2xpZW50amFyLmNsYXNzZXN9IgorICAgIG1hbmlmZXN0PSIuL01BTklGRVNULk1GIj4KICAgICA8bWV0YWluZiBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIj4KICAgICAgIDxpbmNsdWRlIG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgPC9tZXRhaW5mPgotICA8L2phcj4gICAgICAgCi08L3RhcmdldD4gCi0gICAgCisgIDwvamFyPgorPC90YXJnZXQ+CisKIAogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTE0LDE0ICsxMTQsMTQgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamRiYy1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iYm1wRW5yb2xsZXJQb29sIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9ibXAtZW5yb2xsZXJEQiIvPgotCTwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPgorICAgIDwvYW50Y2FsbD4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyB2aWEgYXNhZG1pbi4uLiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4tc2luZ2xlLWFwcGNsaWVudC1qYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIGFwcCBjbGllbnQgd2l0aCBubyAtbWFpbmNsYXNzIG9wdGlvbiBmb3IgYXBwIHdpdGggc2luZ2xlIGFwcCBjbGllbnQgamFyIi8+CkBAIC0xNjIsNyArMTYyLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1tdWx0aS1hcHBjbGllbnQtamFyMSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyBhcHAgY2xpZW50IHdpdGggLW1haW5jbGFzcyBvcHRpb24gZm9yIGFwcCB3aXRoIDIgYXBwIGNsaWVudCBqYXJzIi8+CiAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iIGZhaWxvbmVycm9yPSJ0cnVlIj4KQEAgLTE4OSw3ICsxODksNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgPCEtLSAgICA8ZWNobyBtZXNzYWdlPSJTSEVFVEFMIDogYnVnIGR1cmluZyB1bmRlcGxveW1lbnQuIFRoZSBnZW5lcmF0ZWQgZGlyIGRvZXMgbm90IGdldCBkZWxldGVkLiBIZW5jZSBmb3JjaW5nIGRlbGV0aW9uIGFzIGEgdGVtcG9yYXJ5IHNvbHV0aW9uLiIvPgogICAgICAgPGRlbGV0ZSBkaXI9IiR7ZGVwbG95ZWQtYXBwc30vJHthcHBuYW1lfUFwcF8xIi8+IC0tPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CkBAIC0xOTksNyArMTk5LDcgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iYm1wRW5yb2xsZXJQb29sIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2JtcC1lbnJvbGxlckRCIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KQEAgLTIxNiw3ICsyMTYsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJhdXRvZGVwbG95LWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJEcm9wcGluZyB0aGUgYXBwIHVuZGVyIHRoZSBhdXRvZGVwbG95IGRpci4uLiIvPgotCTxkZWxldGUgZmlsZT0iJHthdXRvZGVwbG95LmRpcn0vJHthcHBuYW1lfUFwcC5lYXJfZGVwbG95ZWQiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgIDxkZWxldGUgZmlsZT0iJHthdXRvZGVwbG95LmRpcn0vJHthcHBuYW1lfUFwcC5lYXJfZGVwbG95ZWQiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiCiAgICAgICAgICAgICB0b2Rpcj0iJHthdXRvZGVwbG95LmRpcn0iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9tYWluY2xhc3NvcHRpb24vZW5yb2xsZXIvY2xpZW50L0Vucm9sbGVyQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2Vucm9sbGVyL2NsaWVudC9FbnJvbGxlckNsaWVudC5qYXZhCmluZGV4IDkyNjY0ODQuLjUwNWQ2NGMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9tYWluY2xhc3NvcHRpb24vZW5yb2xsZXIvY2xpZW50L0Vucm9sbGVyQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L21haW5jbGFzc29wdGlvbi9lbnJvbGxlci9jbGllbnQvRW5yb2xsZXJDbGllbnQuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCiAvKioKLSAqIEEgc2ltcGxlIGphdmEgY2xpZW50IHdpbGw6IAorICogQSBzaW1wbGUgamF2YSBjbGllbnQgd2lsbDoKICAqIDx1bD4KICAqIDxsaT5Mb2NhdGVzIHRoZSBob21lIGludGVyZmFjZSBvZiB0aGUgZW50ZXJwcmlzZSBiZWFuCiAgKiA8bGk+R2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgcmVtb3RlIGludGVyZmFjZQpAQCAtMzYsMTEgKzM2LDExIEBACiAgICAgcHJpdmF0ZSBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsgCi0gICAgICAgIEVucm9sbGVyQ2xpZW50IGNsaWVudCA9IG5ldyBFbnJvbGxlckNsaWVudCgpOyAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIEVucm9sbGVyQ2xpZW50IGNsaWVudCA9IG5ldyBFbnJvbGxlckNsaWVudCgpOwogCiAgICAgICAgIC8vIHJ1biB0aGUgdGVzdHMKLSAgICAgICAgY2xpZW50LnJ1blRlc3RDbGllbnQoKTsgICAKKyAgICAgICAgY2xpZW50LnJ1blRlc3RDbGllbnQoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBydW5UZXN0Q2xpZW50KCkgewpAQCAtNTksMjIgKzU5LDIyIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU3R1ZGVudCIpOwotICAgICAgICAgICAgU3R1ZGVudEhvbWUgc0hvbWUgPSAKLSAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgU3R1ZGVudEhvbWUgc0hvbWUgPQorICAgICAgICAgICAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHVkZW50SG9tZS5jbGFzcyk7CiAKICAgICAgICAgICAgIFN0dWRlbnQgZGVuaXNlID0gc0hvbWUuY3JlYXRlKCI4MjMiLCAiRGVuaXNlIFNtaXRoIik7CiAKICAgICAgICAgICAgIG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVDb3Vyc2UiKTsKLSAgICAgICAgICAgIENvdXJzZUhvbWUgY0hvbWUgPSAKLSAgICAgICAgICAgICAgICAoQ291cnNlSG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgICBDb3Vyc2VIb21lIGNIb21lID0KKyAgICAgICAgICAgICAgICAoQ291cnNlSG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvdXJzZUhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgICBDb3Vyc2UgcG93ZXIgPSBjSG9tZS5jcmVhdGUoIjIyMCIsICJQb3dlciBKMkVFIFByb2dyYW1taW5nIik7CiAKICAgICAgICAgICAgIG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVFbnJvbGxlciIpOwotICAgICAgICAgICAgRW5yb2xsZXJIb21lIGVIb21lID0gCi0gICAgICAgICAgICAgICAgKEVucm9sbGVySG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgICBFbnJvbGxlckhvbWUgZUhvbWUgPQorICAgICAgICAgICAgICAgIChFbnJvbGxlckhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVucm9sbGVySG9tZS5jbGFzcyk7CiAKICAgICAgICAgICAgIEVucm9sbGVyIGVucm9sbGVyID0gZUhvbWUuY3JlYXRlKCk7CkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvdXJzZUlkICsgIiAiICsgY291cnNlLmdldE5hbWUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKLSAKKwogICAgICAgICAgICAgQ291cnNlIGludHJvID0gY0hvbWUuZmluZEJ5UHJpbWFyeUtleSgiNzc3Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaW50cm8uZ2V0TmFtZSgpICsgIjoiKTsKICAgICAgICAgICAgIGNvdXJzZXMgPSBpbnRyby5nZXRTdHVkZW50SWRzKCk7CkBAIC0xMDMsMTIgKzEwMywxMiBAQAogICAgICAgICAgICAgICAgIFN0dWRlbnQgc3R1ZGVudCA9IHNIb21lLmZpbmRCeVByaW1hcnlLZXkoc3R1ZGVudElkKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc3R1ZGVudElkICsgIiAiICsgc3R1ZGVudC5nZXROYW1lKCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgIAorCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZW5yb2xsZXIgYm1wIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZW5yb2xsZXIgYm1wIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uISIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICB9IAotfSAKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2Vucm9sbGVyL2NsaWVudC9FbnJvbGxlckNsaWVudHdpdGhNYW5pZmVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L21haW5jbGFzc29wdGlvbi9lbnJvbGxlci9jbGllbnQvRW5yb2xsZXJDbGllbnR3aXRoTWFuaWZlc3QuamF2YQppbmRleCA5NTUyZTkxLi5kMTE5MmZjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2Vucm9sbGVyL2NsaWVudC9FbnJvbGxlckNsaWVudHdpdGhNYW5pZmVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9tYWluY2xhc3NvcHRpb24vZW5yb2xsZXIvY2xpZW50L0Vucm9sbGVyQ2xpZW50d2l0aE1hbmlmZXN0LmphdmEKQEAgLTMwLDExICszMCwxMSBAQAogICAgIHByaXZhdGUgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7IAotICAgICAgICBFbnJvbGxlckNsaWVudHdpdGhNYW5pZmVzdCBjbGllbnQgPSBuZXcgRW5yb2xsZXJDbGllbnR3aXRoTWFuaWZlc3QoKTsgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBFbnJvbGxlckNsaWVudHdpdGhNYW5pZmVzdCBjbGllbnQgPSBuZXcgRW5yb2xsZXJDbGllbnR3aXRoTWFuaWZlc3QoKTsKIAogICAgICAgICAvLyBydW4gdGhlIHRlc3RzCi0gICAgICAgIGNsaWVudC5ydW5UZXN0Q2xpZW50KCk7ICAgCisgICAgICAgIGNsaWVudC5ydW5UZXN0Q2xpZW50KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuVGVzdENsaWVudCgpIHsKQEAgLTUzLDIyICs1MywyMiBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVN0dWRlbnQiKTsKLSAgICAgICAgICAgIFN0dWRlbnRIb21lIHNIb21lID0gCi0gICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgIFN0dWRlbnRIb21lIHNIb21lID0KKyAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R1ZGVudEhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgICBTdHVkZW50IGRlbmlzZSA9IHNIb21lLmNyZWF0ZSgiODIzIiwgIkpvZSBTb21lYm9keSIpOwogCiAgICAgICAgICAgICBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQ291cnNlIik7Ci0gICAgICAgICAgICBDb3Vyc2VIb21lIGNIb21lID0gCi0gICAgICAgICAgICAgICAgKENvdXJzZUhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgQ291cnNlSG9tZSBjSG9tZSA9CisgICAgICAgICAgICAgICAgKENvdXJzZUhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3Vyc2VIb21lLmNsYXNzKTsKIAogICAgICAgICAgICAgQ291cnNlIHBvd2VyID0gY0hvbWUuY3JlYXRlKCIyMjAiLCAiQm9vayA6IE1hbmlmZXN0Lk1GIHdpbnMiKTsKIAogICAgICAgICAgICAgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUVucm9sbGVyIik7Ci0gICAgICAgICAgICBFbnJvbGxlckhvbWUgZUhvbWUgPSAKLSAgICAgICAgICAgICAgICAoRW5yb2xsZXJIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgIEVucm9sbGVySG9tZSBlSG9tZSA9CisgICAgICAgICAgICAgICAgKEVucm9sbGVySG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5yb2xsZXJIb21lLmNsYXNzKTsKIAogICAgICAgICAgICAgRW5yb2xsZXIgZW5yb2xsZXIgPSBlSG9tZS5jcmVhdGUoKTsKQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY291cnNlSWQgKyAiICIgKyBjb3Vyc2UuZ2V0TmFtZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwotIAorCiAgICAgICAgICAgICBDb3Vyc2UgaW50cm8gPSBjSG9tZS5maW5kQnlQcmltYXJ5S2V5KCI3NzciKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpbnRyby5nZXROYW1lKCkgKyAiOiIpOwogICAgICAgICAgICAgY291cnNlcyA9IGludHJvLmdldFN0dWRlbnRJZHMoKTsKQEAgLTk3LDEyICs5NywxMiBAQAogICAgICAgICAgICAgICAgIFN0dWRlbnQgc3R1ZGVudCA9IHNIb21lLmZpbmRCeVByaW1hcnlLZXkoc3R1ZGVudElkKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc3R1ZGVudElkICsgIiAiICsgc3R1ZGVudC5nZXROYW1lKCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgIAorCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZW5yb2xsZXIgYm1wIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZW5yb2xsZXIgYm1wIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uISIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICB9IAotfSAKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2Vucm9sbGVyL2VqYi9Db3Vyc2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9tYWluY2xhc3NvcHRpb24vZW5yb2xsZXIvZWpiL0NvdXJzZS5qYXZhCmluZGV4IGQyYTQ2NzQuLjA1YjlmYzAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9tYWluY2xhc3NvcHRpb24vZW5yb2xsZXIvZWpiL0NvdXJzZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9tYWluY2xhc3NvcHRpb24vZW5yb2xsZXIvZWpiL0NvdXJzZS5qYXZhCkBAIC0yMiwyNCArMjIsMjQgQEAKIAogCiBwdWJsaWMgaW50ZXJmYWNlIENvdXJzZSBleHRlbmRzIEVKQk9iamVjdCB7Ci0gCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGFuIGFycmF5bGlzdCBvZiBTdHVkZW50SWRzIHRha2luZyB0aGUgY291cnNlLgotICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uIAorICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCiAgICAgICovCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRTdHVkZW50SWRzKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNvdXJzZS4KLSAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbiAKLSAgICAgKiAKKyAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgorICAgICAqCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIC8qKgogICAgICAqIFNldHMgdGhlIG5hbWUgb2YgdGhlIGNvdXJzZS4KLSAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbiAKLSAgICAgKiAKKyAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgorICAgICAqCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L21haW5jbGFzc29wdGlvbi9lbnJvbGxlci9lamIvQ291cnNlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L21haW5jbGFzc29wdGlvbi9lbnJvbGxlci9lamIvQ291cnNlQmVhbi5qYXZhCmluZGV4IGFhOGVlYzAuLjgyMmVhZjQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9tYWluY2xhc3NvcHRpb24vZW5yb2xsZXIvZWpiL0NvdXJzZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2Vucm9sbGVyL2VqYi9Db3Vyc2VCZWFuLmphdmEKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgICAgICAgICAgICAgIChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvamRiYy9ibXAtZW5yb2xsZXJEQiIpOwogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0Vucm9sbGVyIik7Ci0gICAgICAgICAgICBlbnJvbGxlckhvbWUgPSAKKyAgICAgICAgICAgIGVucm9sbGVySG9tZSA9CiAgICAgICAgICAgICAgICAgKEVucm9sbGVySG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5yb2xsZXJIb21lLmNsYXNzKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2Vucm9sbGVyL2VqYi9Db3Vyc2VIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2Vucm9sbGVyL2VqYi9Db3Vyc2VIb21lLmphdmEKaW5kZXggYTk2OWEzYi4uZGU4ZTRmYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L21haW5jbGFzc29wdGlvbi9lbnJvbGxlci9lamIvQ291cnNlSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9tYWluY2xhc3NvcHRpb24vZW5yb2xsZXIvZWpiL0NvdXJzZUhvbWUuamF2YQpAQCAtMzAsMTIgKzMwLDEyIEBACiAgICAgICovCiAgICAgcHVibGljIENvdXJzZSBjcmVhdGUoU3RyaW5nIGNvdXJzZUlkLCBTdHJpbmcgbmFtZSkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgcmVtb3RlIGludGVyZmFjZSB0byB0aGUgQ291cnNlQmVhbiBvYmplY3QgYnkgUHJpbWFyeSBLZXkuCiAgICAgICogQGV4Y2VwdGlvbiB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIGFuZCBSZW1vdGVFeGNlcHRpb24uCiAgICAgICoKICAgICAgKi8KLSAgICBwdWJsaWMgQ291cnNlIGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIGNvdXJzZUlkKSAKKyAgICBwdWJsaWMgQ291cnNlIGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIGNvdXJzZUlkKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2Vucm9sbGVyL2VqYi9FbnJvbGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L21haW5jbGFzc29wdGlvbi9lbnJvbGxlci9lamIvRW5yb2xsZXIuamF2YQppbmRleCAxZWQ4OGZkLi43Y2RlZWU4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2Vucm9sbGVyL2VqYi9FbnJvbGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9tYWluY2xhc3NvcHRpb24vZW5yb2xsZXIvZWpiL0Vucm9sbGVyLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIHB1YmxpYyBpbnRlcmZhY2UgRW5yb2xsZXIgZXh0ZW5kcyBFSkJPYmplY3QgewotIAorCiAgLyoqCiAgICogRW5yb2xscyBhIFN0dWRlbnQgaW4gYSBjb3Vyc2UKICAgKiBAcGFyYW0gc3R1ZGVudElkIHByaW1hcnkga2V5IG9mIHRoZSBzdHVkZW50IG9iamVjdApAQCAtNDAsNyArNDAsNyBAQAogICAgcHVibGljIHZvaWQgdW5FbnJvbGwoU3RyaW5nIHN0dWRlbnRJZCwgU3RyaW5nIGNvdXJzZUlkKQogICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKICAvKioKLSAgKiBEZWxldGVzIGEgU3R1ZGVudCAKKyAgKiBEZWxldGVzIGEgU3R1ZGVudAogICAqIEBwYXJhbSBzdHVkZW50SWQgcHJpbWFyeSBrZXkgb2YgdGhlIHN0dWRlbnQgb2JqZWN0CiAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KICAgKi8KQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAvKioKLSAgKiBEZWxldGVzIGEgQ291cnNlIAorICAqIERlbGV0ZXMgYSBDb3Vyc2UKICAgKiBAcGFyYW0gY291cnNlSWQgcHJpbWFyeSBrZXkgb2YgdGhlIGNvdXJzZSBvYmplY3QKICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgogICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L21haW5jbGFzc29wdGlvbi9lbnJvbGxlci9lamIvRW5yb2xsZXJCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2Vucm9sbGVyL2VqYi9FbnJvbGxlckJlYW4uamF2YQppbmRleCBjZTk4NzdmLi5hMGI4NDdhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2Vucm9sbGVyL2VqYi9FbnJvbGxlckJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2Vucm9sbGVyL2VqYi9FbnJvbGxlckJlYW4uamF2YQpAQCAtMTYsNyArMTYsNyBAQAogCiBwYWNrYWdlIGNvbS5zdW4uczFwZXFlLmVqYi5ibXAuZW5yb2xsZXIuZWpiOwogCi1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuKjsKIGltcG9ydCBqYXZhLnNxbC4qOwogaW1wb3J0IGphdmF4LnNxbC4qOwpAQCAtMjQsNyArMjQsNyBAQAogaW1wb3J0IGphdmF4Lm5hbWluZy4qOwogCiBwdWJsaWMgY2xhc3MgRW5yb2xsZXJCZWFuIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewotIAorCiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uIGNvbjsKICAgICBwcml2YXRlIFN0cmluZyBkYk5hbWUgPSAiamF2YTpjb21wL2Vudi9qZGJjL2JtcC1lbnJvbGxlckRCIjsKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGNvbnRleHQ7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogRGVsZXRlcyBhIFN0dWRlbnQgCisgICAgICogRGVsZXRlcyBhIFN0dWRlbnQKICAgICAgKiBAcGFyYW0gc3R1ZGVudElkIHByaW1hcnkga2V5IG9mIHRoZSBzdHVkZW50IG9iamVjdAogICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCiAgICAgICovCkBAIC03Miw3ICs3Miw3IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogRGVsZXRlcyBhIENvdXJzZSAKKyAgICAgKiBEZWxldGVzIGEgQ291cnNlCiAgICAgICogQHBhcmFtIGNvdXJzZUlkIHByaW1hcnkga2V5IG9mIHRoZSBjb3Vyc2Ugb2JqZWN0CiAgICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KICAgICAgKi8KQEAgLTE2Miw3ICsxNjIsNyBAQAogCiAgICAgICAgIFN0cmluZyBpbnNlcnRTdGF0ZW1lbnQgPQogICAgICAgICAgICAgImluc2VydCBpbnRvIGVucm9sbG1lbnQgdmFsdWVzICggPyAsID8gKSI7Ci0gICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0gCisgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0KICAgICAgICAgICAgIGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFN0YXRlbWVudCk7CiAKICAgICAgICAgcHJlcFN0bXQuc2V0U3RyaW5nKDEsIHN0dWRlbnRJZCk7CkBAIC0xNzIsNyArMTcyLDcgQEAKICAgICAgICAgcHJlcFN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlRW50cnkoU3RyaW5nIHN0dWRlbnRJZCwgU3RyaW5nIGNvdXJzZUlkKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlRW50cnkoU3RyaW5nIHN0dWRlbnRJZCwgU3RyaW5nIGNvdXJzZUlkKQogICAgICAgICB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKIAogICAgICAgICBTdHJpbmcgZGVsZXRlU3RhdGVtZW50ID0KQEAgLTIxNSwxMyArMjE1LDEzIEBACiAgICAgICAgIHByZXBTdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBBcnJheUxpc3Qgc2VsZWN0U3R1ZGVudChTdHJpbmcgY291cnNlSWQpIAorICAgIHByaXZhdGUgQXJyYXlMaXN0IHNlbGVjdFN0dWRlbnQoU3RyaW5nIGNvdXJzZUlkKQogICAgICAgICB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKIAogICAgICAgICBTdHJpbmcgc2VsZWN0U3RhdGVtZW50ID0KICAgICAgICAgICAgICJzZWxlY3Qgc3R1ZGVudGlkICIgKwogICAgICAgICAgICAgImZyb20gZW5yb2xsbWVudCB3aGVyZSBjb3Vyc2VpZCA9ID8gIjsKLSAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPSAKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPQogICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoc2VsZWN0U3RhdGVtZW50KTsKIAogICAgICAgICBwcmVwU3RtdC5zZXRTdHJpbmcoMSwgY291cnNlSWQpOwpAQCAtMjM3LDEzICsyMzcsMTMgQEAKICAgICAgICAgcmV0dXJuIGE7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBBcnJheUxpc3Qgc2VsZWN0Q291cnNlKFN0cmluZyBzdHVkZW50SWQpIAorICAgIHByaXZhdGUgQXJyYXlMaXN0IHNlbGVjdENvdXJzZShTdHJpbmcgc3R1ZGVudElkKQogICAgICAgICB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKIAogICAgICAgICBTdHJpbmcgc2VsZWN0U3RhdGVtZW50ID0KICAgICAgICAgICAgICJzZWxlY3QgY291cnNlaWQgIiArCiAgICAgICAgICAgICAiZnJvbSBlbnJvbGxtZW50IHdoZXJlIHN0dWRlbnRpZCA9ID8gIjsKLSAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPSAKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPQogICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoc2VsZWN0U3RhdGVtZW50KTsKIAogICAgICAgICBwcmVwU3RtdC5zZXRTdHJpbmcoMSwgc3R1ZGVudElkKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9tYWluY2xhc3NvcHRpb24vZW5yb2xsZXIvZWpiL1N0dWRlbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9tYWluY2xhc3NvcHRpb24vZW5yb2xsZXIvZWpiL1N0dWRlbnQuamF2YQppbmRleCA2YThiZDI5Li5jZTNjZWM0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2Vucm9sbGVyL2VqYi9TdHVkZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L21haW5jbGFzc29wdGlvbi9lbnJvbGxlci9lamIvU3R1ZGVudC5qYXZhCkBAIC0yMiw5ICsyMiw5IEBACiAKIAogcHVibGljIGludGVyZmFjZSBTdHVkZW50IGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAKKwogICAvKioKLSAgICogUmV0dXJucyB0aGUgQ291cnNlSWRzIHRoYXQgYSBzdHVkZW50IGlzIGVucm9sbGVkIGluLiAKKyAgICogUmV0dXJucyB0aGUgQ291cnNlSWRzIHRoYXQgYSBzdHVkZW50IGlzIGVucm9sbGVkIGluLgogICAgKiBAcGFyYW0gc3R1ZGVudElkIHByaW1hcnkga2V5IG9mIHRoZSBzdHVkZW50IG9iamVjdAogICAgKiBAcGFyYW0gY291cnNlSWQgcHJpbWFyeSBrZXkgb2YgdGhlIGNvdXJzZSBvYmplY3QKICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9tYWluY2xhc3NvcHRpb24vZW5yb2xsZXIvZWpiL1N0dWRlbnRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2Vucm9sbGVyL2VqYi9TdHVkZW50QmVhbi5qYXZhCmluZGV4IGI0NWU1MTcuLjA4NThiMGEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9tYWluY2xhc3NvcHRpb24vZW5yb2xsZXIvZWpiL1N0dWRlbnRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L21haW5jbGFzc29wdGlvbi9lbnJvbGxlci9lamIvU3R1ZGVudEJlYW4uamF2YQpAQCAtOTgsNyArOTgsNyBAQAogICAgICAgICBjb3Vyc2VJZHMgPSBuZXcgQXJyYXlMaXN0KCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgZGF0YVNvdXJjZSA9IAorICAgICAgICAgICAgZGF0YVNvdXJjZSA9CiAgICAgICAgICAgICAgICAgKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qZGJjL2JtcC1lbnJvbGxlckRCIik7CiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvRW5yb2xsZXIiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9tYWluY2xhc3NvcHRpb24vZW5yb2xsZXIvZWpiL1N0dWRlbnRIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2Vucm9sbGVyL2VqYi9TdHVkZW50SG9tZS5qYXZhCmluZGV4IDJhZTNkZTUuLmZjYTU0NDYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9tYWluY2xhc3NvcHRpb24vZW5yb2xsZXIvZWpiL1N0dWRlbnRIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L21haW5jbGFzc29wdGlvbi9lbnJvbGxlci9lamIvU3R1ZGVudEhvbWUuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAqIEBleGNlcHRpb24gdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiBhbmQgUmVtb3RlRXhjZXB0aW9uLgogICAgICAqCiAgICAgICovCi0gCi0gICAgcHVibGljIFN0dWRlbnQgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgc3R1ZGVudElkKSAKKworICAgIHB1YmxpYyBTdHVkZW50IGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHN0dWRlbnRJZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L21haW5jbGFzc29wdGlvbi9lbnJvbGxlci9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2Vucm9sbGVyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCAyMDVkNjBmLi45NjNhOTIzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2Vucm9sbGVyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2Vucm9sbGVyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSwzNyArMSwzNyBAQAotY3JlYXRlIHRhYmxlIHN0dWRlbnQgDQotKHN0dWRlbnRpZCB2YXJjaGFyKDMpIGNvbnN0cmFpbnQgcGtfc3R1ZGVudCBwcmltYXJ5IGtleSwgIA0KLW5hbWUgdmFyY2hhcigzNikpOw0KLQ0KLWluc2VydCBpbnRvIHN0dWRlbnQNCi12YWx1ZXMgKCcxMjMnLCAnU2FsIEpvbmVzJyk7DQotaW5zZXJ0IGludG8gc3R1ZGVudA0KLXZhbHVlcyAoJzIyMScsICdBbGljZSBTbWl0aCcpOw0KLWluc2VydCBpbnRvIHN0dWRlbnQNCi12YWx1ZXMgKCczODgnLCAnRWxpemFiZXRoIFdpbGxpcycpOw0KLWluc2VydCBpbnRvIHN0dWRlbnQNCi12YWx1ZXMgKCc0NTYnLCAnSm9lIFNtaXRoJyk7DQotDQotDQotY3JlYXRlIHRhYmxlIGNvdXJzZSANCi0oY291cnNlaWQgdmFyY2hhcigzKSBjb25zdHJhaW50IHBrX2NvdXJzZSBwcmltYXJ5IGtleSwgIA0KLW5hbWUgdmFyY2hhcigzNikpOw0KLQ0KLWluc2VydCBpbnRvIGNvdXJzZQ0KLXZhbHVlcyAoJzk5OScsICdBZHZhbmNlZCBKYXZhIFByb2dyYW1taW5nJyk7DQotaW5zZXJ0IGludG8gY291cnNlDQotdmFsdWVzICgnMTExJywgJ0oyRUUgZm9yIFNtYXJ0IFBlb3BsZScpOw0KLWluc2VydCBpbnRvIGNvdXJzZQ0KLXZhbHVlcyAoJzMzMycsICdYTUwgTWFkZSBFYXN5Jyk7DQotaW5zZXJ0IGludG8gY291cnNlDQotdmFsdWVzICgnNzc3JywgJ0FuIEludHJvZHVjdGlvbiB0byBKYXZhIFByb2dyYW1taW5nJyk7DQotDQotY3JlYXRlIHRhYmxlIGVucm9sbG1lbnQNCi0oc3R1ZGVudGlkIHZhcmNoYXIoMyksICANCi1jb3Vyc2VpZCB2YXJjaGFyKDMpLCAgDQotY29uc3RyYWludCBma19zdHVkZW50aWQNCi1mb3JlaWduIGtleSAoc3R1ZGVudGlkKQ0KLXJlZmVyZW5jZXMgc3R1ZGVudChzdHVkZW50aWQpLA0KLWNvbnN0cmFpbnQgZmtfY291cnNlaWQNCi1mb3JlaWduIGtleSAoY291cnNlaWQpDQotcmVmZXJlbmNlcyBjb3Vyc2UoY291cnNlaWQpKTsNCi0NCitjcmVhdGUgdGFibGUgc3R1ZGVudAorKHN0dWRlbnRpZCB2YXJjaGFyKDMpIGNvbnN0cmFpbnQgcGtfc3R1ZGVudCBwcmltYXJ5IGtleSwKK25hbWUgdmFyY2hhcigzNikpOworCitpbnNlcnQgaW50byBzdHVkZW50Cit2YWx1ZXMgKCcxMjMnLCAnU2FsIEpvbmVzJyk7CitpbnNlcnQgaW50byBzdHVkZW50Cit2YWx1ZXMgKCcyMjEnLCAnQWxpY2UgU21pdGgnKTsKK2luc2VydCBpbnRvIHN0dWRlbnQKK3ZhbHVlcyAoJzM4OCcsICdFbGl6YWJldGggV2lsbGlzJyk7CitpbnNlcnQgaW50byBzdHVkZW50Cit2YWx1ZXMgKCc0NTYnLCAnSm9lIFNtaXRoJyk7CisKKworY3JlYXRlIHRhYmxlIGNvdXJzZQorKGNvdXJzZWlkIHZhcmNoYXIoMykgY29uc3RyYWludCBwa19jb3Vyc2UgcHJpbWFyeSBrZXksCituYW1lIHZhcmNoYXIoMzYpKTsKKworaW5zZXJ0IGludG8gY291cnNlCit2YWx1ZXMgKCc5OTknLCAnQWR2YW5jZWQgSmF2YSBQcm9ncmFtbWluZycpOworaW5zZXJ0IGludG8gY291cnNlCit2YWx1ZXMgKCcxMTEnLCAnSjJFRSBmb3IgU21hcnQgUGVvcGxlJyk7CitpbnNlcnQgaW50byBjb3Vyc2UKK3ZhbHVlcyAoJzMzMycsICdYTUwgTWFkZSBFYXN5Jyk7CitpbnNlcnQgaW50byBjb3Vyc2UKK3ZhbHVlcyAoJzc3NycsICdBbiBJbnRyb2R1Y3Rpb24gdG8gSmF2YSBQcm9ncmFtbWluZycpOworCitjcmVhdGUgdGFibGUgZW5yb2xsbWVudAorKHN0dWRlbnRpZCB2YXJjaGFyKDMpLAorY291cnNlaWQgdmFyY2hhcigzKSwKK2NvbnN0cmFpbnQgZmtfc3R1ZGVudGlkCitmb3JlaWduIGtleSAoc3R1ZGVudGlkKQorcmVmZXJlbmNlcyBzdHVkZW50KHN0dWRlbnRpZCksCitjb25zdHJhaW50IGZrX2NvdXJzZWlkCitmb3JlaWduIGtleSAoY291cnNlaWQpCityZWZlcmVuY2VzIGNvdXJzZShjb3Vyc2VpZCkpOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2Vucm9sbGVyL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvbWFpbmNsYXNzb3B0aW9uL2Vucm9sbGVyL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggMmQwZWQxNS4uMDZlNTcwNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L21haW5jbGFzc29wdGlvbi9lbnJvbGxlci9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9tYWluY2xhc3NvcHRpb24vZW5yb2xsZXIvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSwzICsxLDMgQEAKLWRyb3AgdGFibGUgZW5yb2xsbWVudDsNCi1kcm9wIHRhYmxlIHN0dWRlbnQ7DQotZHJvcCB0YWJsZSBjb3Vyc2U7DQorZHJvcCB0YWJsZSBlbnJvbGxtZW50OworZHJvcCB0YWJsZSBzdHVkZW50OworZHJvcCB0YWJsZSBjb3Vyc2U7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvc2hvd2FyZ3NndWkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9zaG93YXJnc2d1aS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGFkNmU1NWUuLmUyNDE1ZTQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9zaG93YXJnc2d1aS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9zaG93YXJnc2d1aS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzaG93QXJnc0dVSSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KQEAgLTI1LDcgKzI1LDcgQEAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iY2xpZW50L2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImNsaWVudC9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPCEtLQotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHtjbGllbnRuYW1lfS5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiAtLT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9zaG93YXJnc2d1aS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvc2hvd2FyZ3NndWkvYnVpbGQueG1sCmluZGV4IGE1MGNhMDguLmM2ZGNmMzEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9zaG93YXJnc2d1aS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L3Nob3dhcmdzZ3VpL2J1aWxkLnhtbApAQCAtNDYsMzIgKzQ2LDMyIEBACiAKICAgICAgICAgPCEtLSBCdWlsZCB0aGUgYXBwIGNsaWVudC4gLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiB2YWx1ZT0iKiovY2xpZW50LyouY2xhc3MgKiovcmVwb3J0ZXIvKi5jbGFzcyIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2FwcGNsaWVudC5qYXIucGF0aH0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDwhLS0gYWRkIHRoZSBpbWFnZXMgYW5kIGN1c3RvbSBKTkxQIGZpbGUgLS0+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthcHBjbGllbnQuamFyLnBhdGh9IiBiYXNlZGlyPSIuIiAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2FwcGNsaWVudC5qYXIucGF0aH0iIGJhc2VkaXI9Ii4iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcz0iKiovKi5qcGcgKiovKi5naWYgKiovKi5qbmxwIi8+CiAKLSAgICAgICAgPCEtLSBCdWlsZCB0aGUgbGlicmFyeSBqYXIuIC0tPiAgICAgICAgCisgICAgICAgIDwhLS0gQnVpbGQgdGhlIGxpYnJhcnkgamFyLiAtLT4KIDwhLS0KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2xpYi5qYXIuZmlsZX0iIAotICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAotICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IioqL2xpYi8qLmNsYXNzIiAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2xpYi5qYXIuZmlsZX0iCisgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKKyAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIqKi9saWIvKi5jbGFzcyIKICAgICAgICAgICAgIC8+CiAtLT4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CiAKLSAgICAKKworCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGVjaG8+VGVzdGluZyBzdGFuZC1hbG9uZSBjbGllbnQuLi48L2VjaG8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idGVzdC5zdGFuZGFsb25lLmNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgogCi0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9zaG93YXJnc2d1aS9idWlsZFdpdGhJbWFnZXMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L3Nob3dhcmdzZ3VpL2J1aWxkV2l0aEltYWdlcy54bWwKaW5kZXggOWI1MDhkZC4uZDFlYjc2NCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L3Nob3dhcmdzZ3VpL2J1aWxkV2l0aEltYWdlcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L3Nob3dhcmdzZ3VpL2J1aWxkV2l0aEltYWdlcy54bWwKQEAgLTQ2LDMwICs0NiwzMCBAQAogCiAgICAgICAgIDwhLS0gQnVpbGQgdGhlIGFwcCBjbGllbnQuIC0tPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgdmFsdWU9IioqL2NsaWVudC8qLmNsYXNzICoqL3JlcG9ydGVyLyouY2xhc3MiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthcHBjbGllbnQuamFyLnBhdGh9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8IS0tIGFkZCB0aGUgaW1hZ2VzIC0tPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphci5wYXRofSIgYmFzZWRpcj0iLiIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthcHBjbGllbnQuamFyLnBhdGh9IiBiYXNlZGlyPSIuIgogICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXM9IioqLyouanBnICoqLyouZ2lmIi8+CiAKLSAgICAgICAgPCEtLSBCdWlsZCB0aGUgbGlicmFyeSBqYXIuIC0tPiAgICAgICAgCi0gICAgICAgIDxqYXIgamFyZmlsZT0iJHtsaWIuamFyLmZpbGV9IiAKLSAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKLSAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIqKi9saWIvKi5jbGFzcyIgCisgICAgICAgIDwhLS0gQnVpbGQgdGhlIGxpYnJhcnkgamFyLiAtLT4KKyAgICAgICAgPGphciBqYXJmaWxlPSIke2xpYi5qYXIuZmlsZX0iCisgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKKyAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIqKi9saWIvKi5jbGFzcyIKICAgICAgICAgICAgIC8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgogCi0gICAgCisKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxlY2hvPlRlc3Rpbmcgc3RhbmQtYWxvbmUgY2xpZW50Li4uPC9lY2hvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InRlc3Quc3RhbmRhbG9uZS5jbGllbnQiLz4KICAgICA8L3RhcmdldD4KIAotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvc2hvd2FyZ3NndWkvY2xpZW50L1NhbXBsZUNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L3Nob3dhcmdzZ3VpL2NsaWVudC9TYW1wbGVDbGllbnQuamF2YQppbmRleCA1ODE4MmRkLi5hYWNhM2M3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvc2hvd2FyZ3NndWkvY2xpZW50L1NhbXBsZUNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9zaG93YXJnc2d1aS9jbGllbnQvU2FtcGxlQ2xpZW50LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICBwdWJsaWMgU2FtcGxlQ2xpZW50KCkgewogICAgICAgICBpbml0Q29tcG9uZW50cygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGNvbnN0cnVjdG9yIHRvCiAgICAgICogaW5pdGlhbGl6ZSB0aGUgZm9ybS4KICAgICAgKiBXQVJOSU5HOiBEbyBOT1QgbW9kaWZ5IHRoaXMgY29kZS4gVGhlIGNvbnRlbnQgb2YgdGhpcyBtZXRob2QgaXMKQEAgLTc4LDcgKzc4LDcgQEAKIAogICAgICAgICBwYWNrKCk7CiAgICAgfS8vIDwvZWRpdG9yLWZvbGQ+Ly9HRU4tRU5EOmluaXRDb21wb25lbnRzCi0gICAgCisKICAgICAvKioKICAgICAgKiBAcGFyYW0gYXJncyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwogICAgICAqLwpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICAgICAgICAgIGNsaWVudC5zZXRWaXNpYmxlKHRydWUpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSnVzdCBzZXQgdmlzaWJsZSB0byBUUlVFIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcHVibGljIFJ1bm5hYmxlIGluaXQoU3RyaW5nIGFyZ3NbXSkgewogICAgICAgICAgICAgICAgIGNsaWVudCA9IG5ldyBTYW1wbGVDbGllbnQoKTsKICAgICAgICAgICAgICAgICBjbGllbnQuaW5pdEFyZ3MoYXJncyk7CkBAIC0xMDcsNyArMTA3LDcgQEAKICAgICAgICAgfS5pbml0KGFyZ3MpKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBYm91dCB0byByZXR1cm4gZnJvbSBzdGF0aWMgbWFpbiIpOwogICAgIH0KLSAgICAKKwogICAgIC8vIFZhcmlhYmxlcyBkZWNsYXJhdGlvbiAtIGRvIG5vdCBtb2RpZnkvL0dFTi1CRUdJTjp2YXJpYWJsZXMKICAgICBwcml2YXRlIGphdmF4LnN3aW5nLkpMaXN0IGFyZ1ZhbHVlTGlzdDsKICAgICBwcml2YXRlIGphdmF4LnN3aW5nLkpMYWJlbCBqTGFiZWwxOwpAQCAtMTE1LDcgKzExNSw3IEBACiAgICAgcHJpdmF0ZSBqYXZheC5zd2luZy5KU2Nyb2xsUGFuZSBqU2Nyb2xsUGFuZTE7CiAgICAgcHJpdmF0ZSBqYXZheC5zd2luZy5KVGV4dEFyZWEgalRleHRBcmVhMTsKICAgICAvLyBFbmQgb2YgdmFyaWFibGVzIGRlY2xhcmF0aW9uLy9HRU4tRU5EOnZhcmlhYmxlcwotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGluaXRBcmdzKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgYXJnVmFsdWVMaXN0LnNldExpc3REYXRhKGFyZ3MpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9zaG93YXJnc2d1aS9jbGllbnQvYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcGNsaWVudC9zaG93YXJnc2d1aS9jbGllbnQvYXBwbGljYXRpb24tY2xpZW50LnhtbAppbmRleCBhZTg0YTU3Li5hNGYzNWRkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBjbGllbnQvc2hvd2FyZ3NndWkvY2xpZW50L2FwcGxpY2F0aW9uLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwY2xpZW50L3Nob3dhcmdzZ3VpL2NsaWVudC9hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC0yOCw4ICsyOCw4IEBACiA8YXBwbGljYXRpb24tY2xpZW50IHhtbG5zPSdodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUnCiAgIHhtbG5zOnhzaT0naHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UnCiAgIHhzaTpzY2hlbWFMb2NhdGlvbj0naHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9hcHBsaWNhdGlvbi1jbGllbnRfNS54c2QnCi0gIHZlcnNpb249IjUiPiAKLSAgCisgIHZlcnNpb249IjUiPgorCiAgIDxkaXNwbGF5LW5hbWU+U2hvdyBBcmd1bWVudHM8L2Rpc3BsYXktbmFtZT4KIAogPC9hcHBsaWNhdGlvbi1jbGllbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBzZXJ2LWNvbW1vbnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwc2Vydi1jb21tb25zL2J1aWxkLnhtbAppbmRleCAwN2Q2OTRkLi5lMTZjNTEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBzZXJ2LWNvbW1vbnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcHNlcnYtY29tbW9ucy9idWlsZC54bWwKQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8anVuaXQ+CiAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJnbG9iYWxfY3AiLz4KICAgICAgIDx0ZXN0IG5hbWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5jb25maWcuc2VydmVyYmVhbnMudmFsaWRhdGlvbi50ZXN0cy5TeXN0ZW1OYW1lc3BhY2VUZXN0Ij4KLQk8Zm9ybWF0dGVyIHR5cGU9InBsYWluIi8+CisgICAgPGZvcm1hdHRlciB0eXBlPSJwbGFpbiIvPgogICAgICAgPC90ZXN0PgogICAgIDwvanVuaXQ+CiAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwc2Vydi1jb21tb25zL2NvbS9zdW4vZW50ZXJwcmlzZS9jb25maWcvQWRtaW5PYmplY3RSZXNvdXJjZURlbGV0ZVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcHNlcnYtY29tbW9ucy9jb20vc3VuL2VudGVycHJpc2UvY29uZmlnL0FkbWluT2JqZWN0UmVzb3VyY2VEZWxldGVUZXN0LmphdmEKaW5kZXggMGUxYWQ0Ni4uMmY1YTZjNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwc2Vydi1jb21tb25zL2NvbS9zdW4vZW50ZXJwcmlzZS9jb25maWcvQWRtaW5PYmplY3RSZXNvdXJjZURlbGV0ZVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBzZXJ2LWNvbW1vbnMvY29tL3N1bi9lbnRlcnByaXNlL2NvbmZpZy9BZG1pbk9iamVjdFJlc291cmNlRGVsZXRlVGVzdC5qYXZhCkBAIC00Nyw0MyArNDcsNDMgQEAKICAgICAgICAgYW9yLnNldFJlc0FkYXB0ZXIoImdlbmVyaWMtcmEiKTsKICAgICAgICAgYW9yLnNldFJlc1R5cGUoImNvbm5lY3Rvci5NeUFkbWluT2JqZWN0Iik7CiAgICAgICAgIGZpbmFsIENvbmZpZ0NvbnRleHQgY29uZmlnQ3R4ID1Db25maWdGYWN0b3J5LmNyZWF0ZUNvbmZpZ0NvbnRleHQoImRvbWFpbi54bWwiLCBuZXcgTXlIYW5kbGVyKCkpOwotICAgICAgICBmaW5hbCBSZXNvdXJjZXMgciA9IChSZXNvdXJjZXMpIFNlcnZlckJlYW5zRmFjdG9yeS5nZXREb21haW5CZWFuKGNvbmZpZ0N0eCkuZ2V0UmVzb3VyY2VzKCk7IAorICAgICAgICBmaW5hbCBSZXNvdXJjZXMgciA9IChSZXNvdXJjZXMpIFNlcnZlckJlYW5zRmFjdG9yeS5nZXREb21haW5CZWFuKGNvbmZpZ0N0eCkuZ2V0UmVzb3VyY2VzKCk7CiAgICAgICAgIGFzc2VydE5vdE51bGwoIlVuZXhwZWN0ZWQgbnVsbCBSZXNvdXJjZXMgb2JqZWN0Iiwgcik7CiAgICAgICAgIHIuYWRkQWRtaW5PYmplY3RSZXNvdXJjZShhb3IpOwogICAgICAgICBhc3NlcnRFcXVhbHMoYW9yLCByLmdldEFkbWluT2JqZWN0UmVzb3VyY2VCeUpuZGlOYW1lKCJ0b2J5L2FvciIpKTsKICAgICAgICAgY29uZmlnQ3R4LmZsdXNoKCk7CiAKICAgICAgICAgLy8gQ29uc3RydWN0IHRoZSBkZWxldGVyOgotICAgICAgICBmaW5hbCBTdHJpbmcgeHBhdGg9YW9yLmdldFhQYXRoKCk7ICAgICAgCisgICAgICAgIGZpbmFsIFN0cmluZyB4cGF0aD1hb3IuZ2V0WFBhdGgoKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCIvZG9tYWluL3Jlc291cmNlcy9hZG1pbi1vYmplY3QtcmVzb3VyY2VbQGpuZGktbmFtZT0ndG9ieS9hb3InXSIsIHhwYXRoKTsKLSAgICAgICAgQ29uZmlnRGVsZXRlIGNvbmZpZ0RlbGV0ZT1Db25maWdDaGFuZ2VGYWN0b3J5LmNyZWF0ZUNvbmZpZ0RlbGV0ZSh4cGF0aCk7IAorICAgICAgICBDb25maWdEZWxldGUgY29uZmlnRGVsZXRlPUNvbmZpZ0NoYW5nZUZhY3RvcnkuY3JlYXRlQ29uZmlnRGVsZXRlKHhwYXRoKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJkZWxldGUgeHBhdGg9L2RvbWFpbi9yZXNvdXJjZXMvYWRtaW4tb2JqZWN0LXJlc291cmNlW0BqbmRpLW5hbWU9J3RvYnkvYW9yJ10iLCAiIitjb25maWdEZWxldGUpOwotICAKKwogICAgICAgICBmaW5hbCBDb25maWdDb250ZXh0IGN0eDIgPSAoQ29uZmlnQ29udGV4dCljb25maWdDdHguY2xvbmUoKTsKICAgICAgICAgY3R4Mi51cGRhdGVGcm9tQ29uZmlnQ2hhbmdlKGNvbmZpZ0RlbGV0ZSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgLy8gRGVtb25zdHJhdGUgdGhhdCBpdHMgbm8gbG9uZ2VyIHRoZXJlIGZvciBjdHgyCi0gICAgICAgIFJlc291cmNlcyByMiA9IChSZXNvdXJjZXMpIFNlcnZlckJlYW5zRmFjdG9yeS5nZXREb21haW5CZWFuKGN0eDIpLmdldFJlc291cmNlcygpOyAKKyAgICAgICAgUmVzb3VyY2VzIHIyID0gKFJlc291cmNlcykgU2VydmVyQmVhbnNGYWN0b3J5LmdldERvbWFpbkJlYW4oY3R4MikuZ2V0UmVzb3VyY2VzKCk7CiAgICAgICAgIGFzc2VydE5vdE51bGwoIlVuZXhwZWN0ZWQgbnVsbCBSZXNvdXJjZXMgb2JqZWN0IiwgcjIpOwogICAgICAgICBhc3NlcnROdWxsKCJVbmV4cGVjdGVkIEFkbWluT2JqZWN0UmVzb3VyY2UgZnJvbSBjdHgyIiwgcjIuZ2V0QWRtaW5PYmplY3RSZXNvdXJjZUJ5Sm5kaU5hbWUoInRvYnkvYW9yIikpOwotIAorCiAgICAgICAgIC8vIElmIHdlIGRvbid0IGRvIGEgZmx1c2goKS9yZWZyZXNoKCkgd2UgZmluZCB0aGF0IHRoZSBBZG1pbk9iamVjdCBpcyBzdGlsbCBhdmFpbGFibGUKICAgICAgICAgLy8gZnJvbSB0aGUgb3JpZ2luYWwgY29udGV4dAotICAgICAgICAKLSAgICAgICAgcjIgPSAoUmVzb3VyY2VzKSBTZXJ2ZXJCZWFuc0ZhY3RvcnkuZ2V0RG9tYWluQmVhbihjb25maWdDdHgpLmdldFJlc291cmNlcygpOyAKKworICAgICAgICByMiA9IChSZXNvdXJjZXMpIFNlcnZlckJlYW5zRmFjdG9yeS5nZXREb21haW5CZWFuKGNvbmZpZ0N0eCkuZ2V0UmVzb3VyY2VzKCk7CiAgICAgICAgIGFzc2VydE5vdE51bGwoIlVuZXhwZWN0ZWQgbnVsbCBSZXNvdXJjZXMgb2JqZWN0IiwgcjIpOwotICAgICAgICAKKwogICAgICAgICAvLyBXRSBET05UIFdBTlQgVEhJUyAtIFRISVMgSVMgVEhFIFBST0JMRU0KICAgICAgICAgYXNzZXJ0Tm90TnVsbCgiVW5leHBlY3RlZCBBZG1pbk9iamVjdFJlc291cmNlIGZyb20gY29uZmlnQ3R4IiwgcjIuZ2V0QWRtaW5PYmplY3RSZXNvdXJjZUJ5Sm5kaU5hbWUoInRvYnkvYW9yIikpOwogCi0gICAgICAgIAorCiAgICAgICAgIC8vIFRoZSBmbHVzaCgpL3JlZnJlc2goKSBpcyBuZWNlc3NhcnkgdG8gZ2V0IHRoZSBjaGFuZ2VkIGNsb25lIHRvIHdyaXRlIHRvIGRpc2MKICAgICAgICAgLy8gYW5kIHRoZSBvcmlnaW5hbCB0byByZWFkIGZyb20gZGlzYywgdGh1cyBjb21tdW5pY2F0aW5nIHRoZSBjaGFuZ2UgYmV0d2VlbiB0aGVtCiAgICAgICAgIGN0eDIuZmx1c2goKTsKICAgICAgIGNvbmZpZ0N0eC5yZWZyZXNoKHRydWUpOwotICAgICAgICAKKwogICAgICAgICAgIC8vIGFuZCBub3cgaXRzIGdvbmUgYXdheSEKLSAgICAgICAgcjIgPSAoUmVzb3VyY2VzKSBTZXJ2ZXJCZWFuc0ZhY3RvcnkuZ2V0RG9tYWluQmVhbihjb25maWdDdHgpLmdldFJlc291cmNlcygpOyAKKyAgICAgICAgcjIgPSAoUmVzb3VyY2VzKSBTZXJ2ZXJCZWFuc0ZhY3RvcnkuZ2V0RG9tYWluQmVhbihjb25maWdDdHgpLmdldFJlc291cmNlcygpOwogICAgICAgICBhc3NlcnROb3ROdWxsKCJVbmV4cGVjdGVkIG51bGwgUmVzb3VyY2VzIG9iamVjdCIsIHIyKTsKICAgICAgICAgYXNzZXJ0TnVsbCgiVW5leHBlY3RlZCBBZG1pbk9iamVjdFJlc291cmNlIGZyb20gY29uZmlnQ3R4IiwgcjIuZ2V0QWRtaW5PYmplY3RSZXNvdXJjZUJ5Sm5kaU5hbWUoInRvYnkvYW9yIikpOwogICAgIH0KQEAgLTEyMCw1ICsxMjAsNSBAQAogICAgICAgICByZXR1cm4gdHM7CiAgICAgfQogCi0gICAgICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBzZXJ2LWNvbW1vbnMvY29tL3N1bi9lbnRlcnByaXNlL2NvbmZpZy9Db25maWdCZWFuVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwc2Vydi1jb21tb25zL2NvbS9zdW4vZW50ZXJwcmlzZS9jb25maWcvQ29uZmlnQmVhblRlc3QuamF2YQppbmRleCBiNTg0MDNiLi43ODZiMmI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBzZXJ2LWNvbW1vbnMvY29tL3N1bi9lbnRlcnByaXNlL2NvbmZpZy9Db25maWdCZWFuVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcHNlcnYtY29tbW9ucy9jb20vc3VuL2VudGVycHJpc2UvY29uZmlnL0NvbmZpZ0JlYW5UZXN0LmphdmEKQEAgLTcxLDEwICs3MSwxMCBAQAogICAgICAgICBhcy5hZGRKbXhDb25uZWN0b3IoamMpOwogICAgICAgICBhc3NlcnROb3ROdWxsKGpjLmJlYW5Qcm9wKCkpOwogICAgICAgICBhc3NlcnRUcnVlKGpjLmJlYW5Qcm9wKCkuaXNJbmRleGVkKCkpOwotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAgICAgCisKKwogICAgICAgICAvLyBUaGlzIHRlc3QgZGVtb25zdHJhdGVzIHRoYXQgYW4gZWxlbWVudCB0aGF0IGhhcyBkaWZmZXJlbnQKICAgICAgICAgLy8gY2FyZGluYWxpdHkgd2lsbCBoYXZlIGRpZmZlcmVudCB4cGF0aCBleHByZXNzaW9ucwogICAgIHB1YmxpYyB2b2lkIHRlc3RYUGF0aCgpIHRocm93cyBFeGNlcHRpb24gewpAQCAtOTQsNyArOTQsNyBAQAogICAgICAgICBqYy5zZXROYW1lKCJqYzEiKTsKICAgICAgICAgYXMuYWRkSm14Q29ubmVjdG9yKGpjKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCIvZG9tYWluL2NvbmZpZ3MvY29uZmlnW0BuYW1lPSdzZXJ2ZXItY29uZmlnJ10vYWRtaW4tc2VydmljZS9qbXgtY29ubmVjdG9yW0BuYW1lPSdqYzEnXSIsIGFzLmdldEpteENvbm5lY3RvckJ5TmFtZSgiamMxIikuZ2V0WFBhdGgoKSk7Ci0gICAgICAgIAorCiAKICAgICB9CiAKQEAgLTEzMCw1ICsxMzAsNSBAQAogICAgICAgICByZXR1cm4gdHM7CiAgICAgfQogCi0gICAgICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBzZXJ2LWNvbW1vbnMvY29tL3N1bi9lbnRlcnByaXNlL2NvbmZpZy9NeUhhbmRsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcHNlcnYtY29tbW9ucy9jb20vc3VuL2VudGVycHJpc2UvY29uZmlnL015SGFuZGxlci5qYXZhCmluZGV4IDU3YzNjYjQuLjBmOWFiNjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcHNlcnYtY29tbW9ucy9jb20vc3VuL2VudGVycHJpc2UvY29uZmlnL015SGFuZGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcHNlcnYtY29tbW9ucy9jb20vc3VuL2VudGVycHJpc2UvY29uZmlnL015SGFuZGxlci5qYXZhCkBAIC0zMCw2ICszMCw2IEBACiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBzZXJ2LWNvbW1vbnMvY29tL3N1bi9lbnRlcnByaXNlL2NvbmZpZy9kb21haW4ub3JpZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hcHBzZXJ2LWNvbW1vbnMvY29tL3N1bi9lbnRlcnByaXNlL2NvbmZpZy9kb21haW4ub3JpZy54bWwKaW5kZXggMzU2NDE1OC4uM2RkZTM5NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYXBwc2Vydi1jb21tb25zL2NvbS9zdW4vZW50ZXJwcmlzZS9jb25maWcvZG9tYWluLm9yaWcueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FwcHNlcnYtY29tbW9ucy9jb20vc3VuL2VudGVycHJpc2UvY29uZmlnL2RvbWFpbi5vcmlnLnhtbApAQCAtMTcsNyArMTcsNyBAQAogCiAtLT48IS0tIEdlbmVyYXRlZCBmcm9tIGRlZmF1bHQtZG9tYWluLnhtbC50ZW1wbGF0ZSAtLT48IURPQ1RZUEUgZG9tYWluIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcyBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDguMCBEb21haW4vL0VOIiAiaHR0cDovL3d3dy5zdW4uY29tL3NvZnR3YXJlL2FwcHNlcnZlci9kdGRzL3N1bi1kb21haW5fMV8xLmR0ZCI+CiAKLTxkb21haW4gYXBwbGljYXRpb24tcm9vdD0iJHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L2FwcGxpY2F0aW9ucyIgbG9nLXJvb3Q9IiR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9sb2dzIj4gCis8ZG9tYWluIGFwcGxpY2F0aW9uLXJvb3Q9IiR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9hcHBsaWNhdGlvbnMiIGxvZy1yb290PSIke2NvbS5zdW4uYWFzLmluc3RhbmNlUm9vdH0vbG9ncyI+CiAgIDxhcHBsaWNhdGlvbnM+CiAgICAgPHdlYi1tb2R1bGUgbmFtZT0iYWRtaW5hcHAiIGNvbnRleHQtcm9vdD0iL3dlYjEiIGxvY2F0aW9uPSIke2NvbS5zdW4uYWFzLmluc3RhbGxSb290fS9saWIvaW5zdGFsbC9hcHBsaWNhdGlvbnMvYWRtaW5hcHAvYWRtaW5hcHBfd2FyIiBvYmplY3QtdHlwZT0ic3lzdGVtLWFkbWluIiBlbmFibGVkPSJ0cnVlIiBkaXJlY3RvcnktZGVwbG95ZWQ9InRydWUiIGF2YWlsYWJpbGl0eS1lbmFibGVkPSJmYWxzZSI+CiAgICAgICA8IS0tIFN5c3RlbSBXZWIgTW9kdWxlIC0gRE8gTk9UIERFTEVURSEgLS0+CkBAIC01NCwyMDYgKzU0LDIwNiBAQAogICAgICAgPGh0dHAtbGlzdGVuZXIgaWQ9ImFkbWluLWxpc3RlbmVyVW5TZWN1cmUiIGFkZHJlc3M9IjAuMC4wLjAiIHBvcnQ9IjE2Mjg5IiBhY2NlcHRvci10aHJlYWRzPSIxMDAiIHNlY3VyaXR5LWVuYWJsZWQ9ImZhbHNlIiBkZWZhdWx0LXZpcnR1YWwtc2VydmVyPSJfX2FzYWRtaW5VblNlY3VyZSIgc2VydmVyLW5hbWU9IiIgeHBvd2VyZWQtYnk9InRydWUiIGVuYWJsZWQ9InRydWUiPgogICAgICAgPC9odHRwLWxpc3RlbmVyPgogICAgICAgPHZpcnR1YWwtc2VydmVyIGlkPSJzZXJ2ZXIiIGh0dHAtbGlzdGVuZXJzPSJodHRwLWxpc3RlbmVyLTEsaHR0cC1saXN0ZW5lci0yIiBob3N0cz0iJHtjb20uc3VuLmFhcy5ob3N0TmFtZX0iIHN0YXRlPSJvbiI+Ci0JPHByb3BlcnR5IG5hbWU9ImRvY3Jvb3QiIHZhbHVlPSIke2NvbS5zdW4uYWFzLmluc3RhbmNlUm9vdH0vZG9jcm9vdCIvPgotCTxwcm9wZXJ0eSBuYW1lPSJhY2Nlc3Nsb2ciIHZhbHVlPSIke2NvbS5zdW4uYWFzLmluc3RhbmNlUm9vdH0vbG9ncy9hY2Nlc3MiLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iZG9jcm9vdCIgdmFsdWU9IiR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9kb2Nyb290Ii8+CisgICAgPHByb3BlcnR5IG5hbWU9ImFjY2Vzc2xvZyIgdmFsdWU9IiR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9sb2dzL2FjY2VzcyIvPgogICAgICAgPC92aXJ0dWFsLXNlcnZlcj4KICAgICAgIDx2aXJ0dWFsLXNlcnZlciBpZD0iX19hc2FkbWluIiBodHRwLWxpc3RlbmVycz0iYWRtaW4tbGlzdGVuZXIiIGhvc3RzPSIke2NvbS5zdW4uYWFzLmhvc3ROYW1lfSIgc3RhdGU9Im9uIiBkZWZhdWx0LXdlYi1tb2R1bGU9ImFkbWluZ3VpIj4KLQk8cHJvcGVydHkgbmFtZT0iZG9jcm9vdCIgdmFsdWU9IiR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9kb2Nyb290Ii8+Ci0JPHByb3BlcnR5IG5hbWU9ImFjY2Vzc2xvZyIgdmFsdWU9IiR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9sb2dzL2FjY2VzcyIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJkb2Nyb290IiB2YWx1ZT0iJHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L2RvY3Jvb3QiLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iYWNjZXNzbG9nIiB2YWx1ZT0iJHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L2xvZ3MvYWNjZXNzIi8+CiAgICAgICA8L3ZpcnR1YWwtc2VydmVyPgogICAgICAgPHZpcnR1YWwtc2VydmVyIGlkPSJfX2FzYWRtaW5VblNlY3VyZSIgaHR0cC1saXN0ZW5lcnM9ImFkbWluLWxpc3RlbmVyVW5TZWN1cmUiIGhvc3RzPSIke2NvbS5zdW4uYWFzLmhvc3ROYW1lfSIgc3RhdGU9Im9uIiBkZWZhdWx0LXdlYi1tb2R1bGU9ImNvbV9zdW5fd2ViX3VpIj4KLQk8cHJvcGVydHkgbmFtZT0iZG9jcm9vdCIgdmFsdWU9IiR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9kb2Nyb290Ii8+Ci0JPHByb3BlcnR5IG5hbWU9ImFjY2Vzc2xvZyIgdmFsdWU9IiR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9sb2dzL2FjY2VzcyIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJkb2Nyb290IiB2YWx1ZT0iJHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L2RvY3Jvb3QiLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iYWNjZXNzbG9nIiB2YWx1ZT0iJHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L2xvZ3MvYWNjZXNzIi8+CiAgICAgICA8L3ZpcnR1YWwtc2VydmVyPjxodHRwLXByb3RvY29sIHNzbC1lbmFibGVkPSJ0cnVlIi8+PC9odHRwLXNlcnZpY2U+CiAgICAgICA8aWlvcC1zZXJ2aWNlIGNsaWVudC1hdXRoZW50aWNhdGlvbi1yZXF1aXJlZD0iZmFsc2UiPgotCTxvcmIgdXNlLXRocmVhZC1wb29sLWlkcz0idGhyZWFkLXBvb2wtMSIgbWVzc2FnZS1mcmFnbWVudC1zaXplPSIxMDI0IiBtYXgtY29ubmVjdGlvbnM9IjEwMjQiLz4KKyAgICA8b3JiIHVzZS10aHJlYWQtcG9vbC1pZHM9InRocmVhZC1wb29sLTEiIG1lc3NhZ2UtZnJhZ21lbnQtc2l6ZT0iMTAyNCIgbWF4LWNvbm5lY3Rpb25zPSIxMDI0Ii8+CiAKLQk8aWlvcC1saXN0ZW5lciBpZD0ib3JiLWxpc3RlbmVyLTEiIGFkZHJlc3M9IjAuMC4wLjAiIHBvcnQ9IjM3MDAiIGVuYWJsZWQ9InRydWUiIHNlY3VyaXR5LWVuYWJsZWQ9ImZhbHNlIi8+Ci0JPGlpb3AtbGlzdGVuZXIgaWQ9IlNTTCIgYWRkcmVzcz0iMC4wLjAuMCIgcG9ydD0iMTA2MCIgc2VjdXJpdHktZW5hYmxlZD0idHJ1ZSIgZW5hYmxlZD0idHJ1ZSI+Ci0JICA8c3NsIGNlcnQtbmlja25hbWU9InMxYXMiIGNsaWVudC1hdXRoLWVuYWJsZWQ9ImZhbHNlIiB0bHMtZW5hYmxlZD0idHJ1ZSIgc3NsMi1lbmFibGVkPSJmYWxzZSIgc3NsMy1lbmFibGVkPSJ0cnVlIiB0bHMtcm9sbGJhY2stZW5hYmxlZD0idHJ1ZSIvPgotCTwvaWlvcC1saXN0ZW5lcj4KLQk8aWlvcC1saXN0ZW5lciBpZD0iU1NMX01VVFVBTEFVVEgiIGFkZHJlc3M9IjAuMC4wLjAiIHBvcnQ9IjEwNjEiIHNlY3VyaXR5LWVuYWJsZWQ9InRydWUiIGVuYWJsZWQ9InRydWUiPgotCSAgPHNzbCBjZXJ0LW5pY2tuYW1lPSJzMWFzIiBjbGllbnQtYXV0aC1lbmFibGVkPSJ0cnVlIiB0bHMtZW5hYmxlZD0idHJ1ZSIgc3NsMi1lbmFibGVkPSJmYWxzZSIgc3NsMy1lbmFibGVkPSJ0cnVlIiB0bHMtcm9sbGJhY2stZW5hYmxlZD0idHJ1ZSIvPgotCTwvaWlvcC1saXN0ZW5lcj4KKyAgICA8aWlvcC1saXN0ZW5lciBpZD0ib3JiLWxpc3RlbmVyLTEiIGFkZHJlc3M9IjAuMC4wLjAiIHBvcnQ9IjM3MDAiIGVuYWJsZWQ9InRydWUiIHNlY3VyaXR5LWVuYWJsZWQ9ImZhbHNlIi8+CisgICAgPGlpb3AtbGlzdGVuZXIgaWQ9IlNTTCIgYWRkcmVzcz0iMC4wLjAuMCIgcG9ydD0iMTA2MCIgc2VjdXJpdHktZW5hYmxlZD0idHJ1ZSIgZW5hYmxlZD0idHJ1ZSI+CisgICAgICA8c3NsIGNlcnQtbmlja25hbWU9InMxYXMiIGNsaWVudC1hdXRoLWVuYWJsZWQ9ImZhbHNlIiB0bHMtZW5hYmxlZD0idHJ1ZSIgc3NsMi1lbmFibGVkPSJmYWxzZSIgc3NsMy1lbmFibGVkPSJ0cnVlIiB0bHMtcm9sbGJhY2stZW5hYmxlZD0idHJ1ZSIvPgorICAgIDwvaWlvcC1saXN0ZW5lcj4KKyAgICA8aWlvcC1saXN0ZW5lciBpZD0iU1NMX01VVFVBTEFVVEgiIGFkZHJlc3M9IjAuMC4wLjAiIHBvcnQ9IjEwNjEiIHNlY3VyaXR5LWVuYWJsZWQ9InRydWUiIGVuYWJsZWQ9InRydWUiPgorICAgICAgPHNzbCBjZXJ0LW5pY2tuYW1lPSJzMWFzIiBjbGllbnQtYXV0aC1lbmFibGVkPSJ0cnVlIiB0bHMtZW5hYmxlZD0idHJ1ZSIgc3NsMi1lbmFibGVkPSJmYWxzZSIgc3NsMy1lbmFibGVkPSJ0cnVlIiB0bHMtcm9sbGJhY2stZW5hYmxlZD0idHJ1ZSIvPgorICAgIDwvaWlvcC1saXN0ZW5lcj4KICAgICAgIDwvaWlvcC1zZXJ2aWNlPgogICAgICAgPGFkbWluLXNlcnZpY2Ugc3lzdGVtLWpteC1jb25uZWN0b3ItbmFtZT0ic3lzdGVtIiB0eXBlPSJkYXMtYW5kLXNlcnZlciI+Ci0JPCEtLSBUaGUgSlNSIDE2MCAic3lzdGVtLWpteC1jb25uZWN0b3IiIC0tPgotCTxqbXgtY29ubmVjdG9yIGFjY2VwdC1hbGw9ImZhbHNlIiBhZGRyZXNzPSIwLjAuMC4wIiBhdXRoLXJlYWxtLW5hbWU9ImFkbWluLXJlYWxtIiBlbmFibGVkPSJ0cnVlIiBuYW1lPSJzeXN0ZW0iIHBvcnQ9Ijg2ODYiIHByb3RvY29sPSJybWlfanJtcCIgc2VjdXJpdHktZW5hYmxlZD0idHJ1ZSI+PHNzbCBjZXJ0LW5pY2tuYW1lPSJzMWFzIiBzc2wzLWVuYWJsZWQ9InRydWUiIHRscy1lbmFibGVkPSJ0cnVlIiBjbGllbnQtYXV0aC1lbmFibGVkPSJmYWxzZSIvPjxwcm9wZXJ0eSBuYW1lPSJjbGllbnQtaG9zdG5hbWUiIHZhbHVlPSJ0b2J5LWNvbXBhcS5yZWQuaXBsYW5ldC5jb20iLz4KLQk8L2pteC1jb25uZWN0b3I+Ci0JPCEtLSBUaGUgSlNSIDE2MCAic3lzdGVtLWpteC1jb25uZWN0b3IiIC0tPgotCTxkYXMtY29uZmlnIGR5bmFtaWMtcmVsb2FkLWVuYWJsZWQ9InRydWUiIGR5bmFtaWMtcmVsb2FkLXBvbGwtaW50ZXJ2YWwtaW4tc2Vjb25kcz0iMiIgYXV0b2RlcGxveS1lbmFibGVkPSJ0cnVlIiBhdXRvZGVwbG95LXBvbGxpbmctaW50ZXJ2YWwtaW4tc2Vjb25kcz0iMiIgYXV0b2RlcGxveS1kaXI9IiR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9hdXRvZGVwbG95IiBhdXRvZGVwbG95LXZlcmlmaWVyLWVuYWJsZWQ9ImZhbHNlIiBhdXRvZGVwbG95LWpzcC1wcmVjb21waWxhdGlvbi1lbmFibGVkPSJmYWxzZSIgZGVwbG95LXhtbC12YWxpZGF0aW9uPSJmdWxsIiBhZG1pbi1zZXNzaW9uLXRpbWVvdXQtaW4tbWludXRlcz0iNjAiLz4KKyAgICA8IS0tIFRoZSBKU1IgMTYwICJzeXN0ZW0tam14LWNvbm5lY3RvciIgLS0+CisgICAgPGpteC1jb25uZWN0b3IgYWNjZXB0LWFsbD0iZmFsc2UiIGFkZHJlc3M9IjAuMC4wLjAiIGF1dGgtcmVhbG0tbmFtZT0iYWRtaW4tcmVhbG0iIGVuYWJsZWQ9InRydWUiIG5hbWU9InN5c3RlbSIgcG9ydD0iODY4NiIgcHJvdG9jb2w9InJtaV9qcm1wIiBzZWN1cml0eS1lbmFibGVkPSJ0cnVlIj48c3NsIGNlcnQtbmlja25hbWU9InMxYXMiIHNzbDMtZW5hYmxlZD0idHJ1ZSIgdGxzLWVuYWJsZWQ9InRydWUiIGNsaWVudC1hdXRoLWVuYWJsZWQ9ImZhbHNlIi8+PHByb3BlcnR5IG5hbWU9ImNsaWVudC1ob3N0bmFtZSIgdmFsdWU9InRvYnktY29tcGFxLnJlZC5pcGxhbmV0LmNvbSIvPgorICAgIDwvam14LWNvbm5lY3Rvcj4KKyAgICA8IS0tIFRoZSBKU1IgMTYwICJzeXN0ZW0tam14LWNvbm5lY3RvciIgLS0+CisgICAgPGRhcy1jb25maWcgZHluYW1pYy1yZWxvYWQtZW5hYmxlZD0idHJ1ZSIgZHluYW1pYy1yZWxvYWQtcG9sbC1pbnRlcnZhbC1pbi1zZWNvbmRzPSIyIiBhdXRvZGVwbG95LWVuYWJsZWQ9InRydWUiIGF1dG9kZXBsb3ktcG9sbGluZy1pbnRlcnZhbC1pbi1zZWNvbmRzPSIyIiBhdXRvZGVwbG95LWRpcj0iJHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L2F1dG9kZXBsb3kiIGF1dG9kZXBsb3ktdmVyaWZpZXItZW5hYmxlZD0iZmFsc2UiIGF1dG9kZXBsb3ktanNwLXByZWNvbXBpbGF0aW9uLWVuYWJsZWQ9ImZhbHNlIiBkZXBsb3kteG1sLXZhbGlkYXRpb249ImZ1bGwiIGFkbWluLXNlc3Npb24tdGltZW91dC1pbi1taW51dGVzPSI2MCIvPgogICAgICAgPC9hZG1pbi1zZXJ2aWNlPgogICAgICAgPHdlYi1jb250YWluZXI+Ci0JPHNlc3Npb24tY29uZmlnPgotCSAgPHNlc3Npb24tbWFuYWdlcj4KLQkgICAgPG1hbmFnZXItcHJvcGVydGllcy8+Ci0JICAgIDxzdG9yZS1wcm9wZXJ0aWVzLz4KLQkgIDwvc2Vzc2lvbi1tYW5hZ2VyPgotCSAgPHNlc3Npb24tcHJvcGVydGllcy8+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICA8c2Vzc2lvbi1tYW5hZ2VyPgorICAgICAgICA8bWFuYWdlci1wcm9wZXJ0aWVzLz4KKyAgICAgICAgPHN0b3JlLXByb3BlcnRpZXMvPgorICAgICAgPC9zZXNzaW9uLW1hbmFnZXI+CisgICAgICA8c2Vzc2lvbi1wcm9wZXJ0aWVzLz4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogICAgICAgPC93ZWItY29udGFpbmVyPgotICAgICAgPGVqYi1jb250YWluZXIgc3RlYWR5LXBvb2wtc2l6ZT0iMCIgcG9vbC1yZXNpemUtcXVhbnRpdHk9IjgiIG1heC1wb29sLXNpemU9IjMyIiBjYWNoZS1yZXNpemUtcXVhbnRpdHk9IjMyIiBtYXgtY2FjaGUtc2l6ZT0iNTEyIiBwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPSI2MDAiIGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPSI2MDAiIHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPSI1NDAwIiB2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT0ibnJ1IiBjb21taXQtb3B0aW9uPSJCIiBzZXNzaW9uLXN0b3JlPSIke2NvbS5zdW4uYWFzLmluc3RhbmNlUm9vdH0vc2Vzc2lvbi1zdG9yZSI+IAotCTxlamItdGltZXItc2VydmljZSBtYXgtcmVkZWxpdmVyaWVzPSIxIiByZWRlbGl2ZXJ5LWludGVydmFsLWludGVybmFsLWluLW1pbGxpcz0iNTAwMCIgbWluaW11bS1kZWxpdmVyeS1pbnRlcnZhbC1pbi1taWxsaXM9IjcwMDAiLz4KKyAgICAgIDxlamItY29udGFpbmVyIHN0ZWFkeS1wb29sLXNpemU9IjAiIHBvb2wtcmVzaXplLXF1YW50aXR5PSI4IiBtYXgtcG9vbC1zaXplPSIzMiIgY2FjaGUtcmVzaXplLXF1YW50aXR5PSIzMiIgbWF4LWNhY2hlLXNpemU9IjUxMiIgcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz0iNjAwIiBjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz0iNjAwIiByZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz0iNTQwMCIgdmljdGltLXNlbGVjdGlvbi1wb2xpY3k9Im5ydSIgY29tbWl0LW9wdGlvbj0iQiIgc2Vzc2lvbi1zdG9yZT0iJHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L3Nlc3Npb24tc3RvcmUiPgorICAgIDxlamItdGltZXItc2VydmljZSBtYXgtcmVkZWxpdmVyaWVzPSIxIiByZWRlbGl2ZXJ5LWludGVydmFsLWludGVybmFsLWluLW1pbGxpcz0iNTAwMCIgbWluaW11bS1kZWxpdmVyeS1pbnRlcnZhbC1pbi1taWxsaXM9IjcwMDAiLz4KICAgICAgIDwvZWpiLWNvbnRhaW5lcj4KICAgICAgIDxtZGItY29udGFpbmVyIHN0ZWFkeS1wb29sLXNpemU9IjAiIHBvb2wtcmVzaXplLXF1YW50aXR5PSI4IiBtYXgtcG9vbC1zaXplPSIzMiIgaWRsZS10aW1lb3V0LWluLXNlY29uZHM9IjYwMCIvPgogICAgICAgPGptcy1zZXJ2aWNlIGluaXQtdGltZW91dC1pbi1zZWNvbmRzPSI2MCIgdHlwZT0iTE9DQUwiIHJlY29ubmVjdC1pbnRlcnZhbC1pbi1zZWNvbmRzPSI2MCIgcmVjb25uZWN0LWF0dGVtcHRzPSIzIiByZWNvbm5lY3QtZW5hYmxlZD0idHJ1ZSIgYWRkcmVzc2xpc3QtYmVoYXZpb3I9InJhbmRvbSIgYWRkcmVzc2xpc3QtaXRlcmF0aW9ucz0iMyI+Ci0JPGptcy1ob3N0IG5hbWU9ImRlZmF1bHRfSk1TX2hvc3QiIGhvc3Q9InRvYnktY29tcGFxLnJlZC5pcGxhbmV0LmNvbSIgcG9ydD0iNzY3NiIgYWRtaW4tdXNlci1uYW1lPSJhZG1pbiIgYWRtaW4tcGFzc3dvcmQ9ImFkbWluIi8+CisgICAgPGptcy1ob3N0IG5hbWU9ImRlZmF1bHRfSk1TX2hvc3QiIGhvc3Q9InRvYnktY29tcGFxLnJlZC5pcGxhbmV0LmNvbSIgcG9ydD0iNzY3NiIgYWRtaW4tdXNlci1uYW1lPSJhZG1pbiIgYWRtaW4tcGFzc3dvcmQ9ImFkbWluIi8+CiAgICAgICA8L2ptcy1zZXJ2aWNlPgogICAgICAgPGxvZy1zZXJ2aWNlIGZpbGU9IiR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9sb2dzL3NlcnZlci5sb2ciIHVzZS1zeXN0ZW0tbG9nZ2luZz0iZmFsc2UiIGxvZy10by1jb25zb2xlPSJmYWxzZSIgYWxhcm1zPSJmYWxzZSIgbG9nLXJvdGF0aW9uLWxpbWl0LWluLWJ5dGVzPSIyMDAwMDAwMDAwIiBsb2ctcm90YXRpb24tdGltZWxpbWl0LWluLW1pbnV0ZXM9IjAiPgotCTxtb2R1bGUtbG9nLWxldmVscyByb290PSJJTkZPIiBzZXJ2ZXI9IklORk8iIGVqYi1jb250YWluZXI9IklORk8iIGNtcC1jb250YWluZXI9IklORk8iIG1kYi1jb250YWluZXI9IklORk8iIHdlYi1jb250YWluZXI9IklORk8iIGNsYXNzbG9hZGVyPSJJTkZPIiBjb25maWd1cmF0aW9uPSJJTkZPIiBuYW1pbmc9IklORk8iIHNlY3VyaXR5PSJJTkZPIiBhZG1pbj0iSU5GTyIganRzPSJJTkZPIiBqdGE9IklORk8iIGRlcGxveW1lbnQ9IklORk8iIHZlcmlmaWVyPSJJTkZPIiBqYXhyPSJJTkZPIiBqYXhycGM9IklORk8iIHNhYWo9IklORk8iIGNvcmJhPSJJTkZPIiBqYXZhbWFpbD0iSU5GTyIgam1zPSJJTkZPIiBjb25uZWN0b3I9IklORk8iIGpkbz0iSU5GTyIgY21wPSJJTkZPIiB1dGlsPSJJTkZPIiByZXNvdXJjZS1hZGFwdGVyPSJJTkZPIiBzeW5jaHJvbml6YXRpb249IklORk8iIG5vZGUtYWdlbnQ9IklORk8iLz4KKyAgICA8bW9kdWxlLWxvZy1sZXZlbHMgcm9vdD0iSU5GTyIgc2VydmVyPSJJTkZPIiBlamItY29udGFpbmVyPSJJTkZPIiBjbXAtY29udGFpbmVyPSJJTkZPIiBtZGItY29udGFpbmVyPSJJTkZPIiB3ZWItY29udGFpbmVyPSJJTkZPIiBjbGFzc2xvYWRlcj0iSU5GTyIgY29uZmlndXJhdGlvbj0iSU5GTyIgbmFtaW5nPSJJTkZPIiBzZWN1cml0eT0iSU5GTyIgYWRtaW49IklORk8iIGp0cz0iSU5GTyIganRhPSJJTkZPIiBkZXBsb3ltZW50PSJJTkZPIiB2ZXJpZmllcj0iSU5GTyIgamF4cj0iSU5GTyIgamF4cnBjPSJJTkZPIiBzYWFqPSJJTkZPIiBjb3JiYT0iSU5GTyIgamF2YW1haWw9IklORk8iIGptcz0iSU5GTyIgY29ubmVjdG9yPSJJTkZPIiBqZG89IklORk8iIGNtcD0iSU5GTyIgdXRpbD0iSU5GTyIgcmVzb3VyY2UtYWRhcHRlcj0iSU5GTyIgc3luY2hyb25pemF0aW9uPSJJTkZPIiBub2RlLWFnZW50PSJJTkZPIi8+CiAgICAgICA8L2xvZy1zZXJ2aWNlPgogICAgICAgPHNlY3VyaXR5LXNlcnZpY2UgZGVmYXVsdC1yZWFsbT0iZmlsZSIgYW5vbnltb3VzLXJvbGU9IkFOWU9ORSIgYXVkaXQtZW5hYmxlZD0iZmFsc2UiIGphY2M9ImRlZmF1bHQiIGF1ZGl0LW1vZHVsZXM9ImRlZmF1bHQiPgotCTwhLS0gQWxsIGFkbWluaXN0cmF0aXZlIHVzZXJzIHVzZSB0aGlzIHJlYWxtIGJ5IGRlZmF1bHQuIC0tPgotCTxhdXRoLXJlYWxtIG5hbWU9ImFkbWluLXJlYWxtIiBjbGFzc25hbWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5zZWN1cml0eS5hdXRoLnJlYWxtLmZpbGUuRmlsZVJlYWxtIj4KLQkgIDxwcm9wZXJ0eSBuYW1lPSJmaWxlIiB2YWx1ZT0iJHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L2NvbmZpZy9hZG1pbi1rZXlmaWxlIi8+Ci0JICA8cHJvcGVydHkgbmFtZT0iamFhcy1jb250ZXh0IiB2YWx1ZT0iZmlsZVJlYWxtIi8+Ci0JPC9hdXRoLXJlYWxtPgotCTwhLS0gQWxsIGFkbWluaXN0cmF0aXZlIHVzZXJzIHVzZSB0aGlzIHJlYWxtIGJ5IGRlZmF1bHQuIC0tPgotCTxhdXRoLXJlYWxtIG5hbWU9ImZpbGUiIGNsYXNzbmFtZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uZmlsZS5GaWxlUmVhbG0iPgotCSAgPHByb3BlcnR5IG5hbWU9ImZpbGUiIHZhbHVlPSIke2NvbS5zdW4uYWFzLmluc3RhbmNlUm9vdH0vY29uZmlnL2tleWZpbGUiLz4KLQkgIDxwcm9wZXJ0eSBuYW1lPSJqYWFzLWNvbnRleHQiIHZhbHVlPSJmaWxlUmVhbG0iLz4KLQk8L2F1dGgtcmVhbG0+Ci0JPGF1dGgtcmVhbG0gbmFtZT0iY2VydGlmaWNhdGUiIGNsYXNzbmFtZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uY2VydGlmaWNhdGUuQ2VydGlmaWNhdGVSZWFsbSI+Ci0JPC9hdXRoLXJlYWxtPgotCTxqYWNjLXByb3ZpZGVyIG5hbWU9ImRlZmF1bHQiIHBvbGljeS1wcm92aWRlcj0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmphY2MucHJvdmlkZXIuU2ltcGxlUG9saWN5UHJvdmlkZXIiIHBvbGljeS1jb25maWd1cmF0aW9uLWZhY3RvcnktcHJvdmlkZXI9ImNvbS5zdW4uZW50ZXJwcmlzZS5zZWN1cml0eS5qYWNjLnByb3ZpZGVyLlNpbXBsZVBvbGljeUNvbmZpZ3VyYXRpb25GYWN0b3J5Ij4KLQkgIDxwcm9wZXJ0eSBuYW1lPSJyZXBvc2l0b3J5IiB2YWx1ZT0iJHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L2dlbmVyYXRlZC9wb2xpY3kiLz4KLQk8L2phY2MtcHJvdmlkZXI+Ci0JPGF1ZGl0LW1vZHVsZSBuYW1lPSJkZWZhdWx0IiBjbGFzc25hbWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5zZWN1cml0eS5BdWRpdCI+Ci0JICA8cHJvcGVydHkgbmFtZT0iYXVkaXRPbiIgdmFsdWU9ImZhbHNlIi8+Ci0JPC9hdWRpdC1tb2R1bGU+CisgICAgPCEtLSBBbGwgYWRtaW5pc3RyYXRpdmUgdXNlcnMgdXNlIHRoaXMgcmVhbG0gYnkgZGVmYXVsdC4gLS0+CisgICAgPGF1dGgtcmVhbG0gbmFtZT0iYWRtaW4tcmVhbG0iIGNsYXNzbmFtZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uZmlsZS5GaWxlUmVhbG0iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImZpbGUiIHZhbHVlPSIke2NvbS5zdW4uYWFzLmluc3RhbmNlUm9vdH0vY29uZmlnL2FkbWluLWtleWZpbGUiLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJqYWFzLWNvbnRleHQiIHZhbHVlPSJmaWxlUmVhbG0iLz4KKyAgICA8L2F1dGgtcmVhbG0+CisgICAgPCEtLSBBbGwgYWRtaW5pc3RyYXRpdmUgdXNlcnMgdXNlIHRoaXMgcmVhbG0gYnkgZGVmYXVsdC4gLS0+CisgICAgPGF1dGgtcmVhbG0gbmFtZT0iZmlsZSIgY2xhc3NuYW1lPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5maWxlLkZpbGVSZWFsbSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0iZmlsZSIgdmFsdWU9IiR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9jb25maWcva2V5ZmlsZSIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImphYXMtY29udGV4dCIgdmFsdWU9ImZpbGVSZWFsbSIvPgorICAgIDwvYXV0aC1yZWFsbT4KKyAgICA8YXV0aC1yZWFsbSBuYW1lPSJjZXJ0aWZpY2F0ZSIgY2xhc3NuYW1lPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5jZXJ0aWZpY2F0ZS5DZXJ0aWZpY2F0ZVJlYWxtIj4KKyAgICA8L2F1dGgtcmVhbG0+CisgICAgPGphY2MtcHJvdmlkZXIgbmFtZT0iZGVmYXVsdCIgcG9saWN5LXByb3ZpZGVyPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuamFjYy5wcm92aWRlci5TaW1wbGVQb2xpY3lQcm92aWRlciIgcG9saWN5LWNvbmZpZ3VyYXRpb24tZmFjdG9yeS1wcm92aWRlcj0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmphY2MucHJvdmlkZXIuU2ltcGxlUG9saWN5Q29uZmlndXJhdGlvbkZhY3RvcnkiPgorICAgICAgPHByb3BlcnR5IG5hbWU9InJlcG9zaXRvcnkiIHZhbHVlPSIke2NvbS5zdW4uYWFzLmluc3RhbmNlUm9vdH0vZ2VuZXJhdGVkL3BvbGljeSIvPgorICAgIDwvamFjYy1wcm92aWRlcj4KKyAgICA8YXVkaXQtbW9kdWxlIG5hbWU9ImRlZmF1bHQiIGNsYXNzbmFtZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LkF1ZGl0Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhdWRpdE9uIiB2YWx1ZT0iZmFsc2UiLz4KKyAgICA8L2F1ZGl0LW1vZHVsZT4KICAgICAgIDwvc2VjdXJpdHktc2VydmljZT4KICAgICAgIDx0cmFuc2FjdGlvbi1zZXJ2aWNlIGF1dG9tYXRpYy1yZWNvdmVyeT0iZmFsc2UiIHRpbWVvdXQtaW4tc2Vjb25kcz0iMCIgdHgtbG9nLWRpcj0iJHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L2xvZ3MiIGhldXJpc3RpYy1kZWNpc2lvbj0icm9sbGJhY2siIGtleXBvaW50LWludGVydmFsPSIyMDQ4IiByZXRyeS10aW1lb3V0LWluLXNlY29uZHM9IjYwMCIvPgogICAgICAgPG1vbml0b3Jpbmctc2VydmljZT4KLQk8bW9kdWxlLW1vbml0b3JpbmctbGV2ZWxzIHRocmVhZC1wb29sPSJPRkYiIG9yYj0iT0ZGIiBlamItY29udGFpbmVyPSJPRkYiIHdlYi1jb250YWluZXI9Ik9GRiIgdHJhbnNhY3Rpb24tc2VydmljZT0iT0ZGIiBodHRwLXNlcnZpY2U9Ik9GRiIgamRiYy1jb25uZWN0aW9uLXBvb2w9Ik9GRiIgY29ubmVjdG9yLWNvbm5lY3Rpb24tcG9vbD0iT0ZGIiBjb25uZWN0b3Itc2VydmljZT0iT0ZGIiBqdm09Ik9GRiIgam1zLXNlcnZpY2U9Ik9GRiIvPgorICAgIDxtb2R1bGUtbW9uaXRvcmluZy1sZXZlbHMgdGhyZWFkLXBvb2w9Ik9GRiIgb3JiPSJPRkYiIGVqYi1jb250YWluZXI9Ik9GRiIgd2ViLWNvbnRhaW5lcj0iT0ZGIiB0cmFuc2FjdGlvbi1zZXJ2aWNlPSJPRkYiIGh0dHAtc2VydmljZT0iT0ZGIiBqZGJjLWNvbm5lY3Rpb24tcG9vbD0iT0ZGIiBjb25uZWN0b3ItY29ubmVjdGlvbi1wb29sPSJPRkYiIGNvbm5lY3Rvci1zZXJ2aWNlPSJPRkYiIGp2bT0iT0ZGIiBqbXMtc2VydmljZT0iT0ZGIi8+CiAgICAgICA8L21vbml0b3Jpbmctc2VydmljZT4KICAgICAgIDxqYXZhLWNvbmZpZyBqYXZhLWhvbWU9IiR7Y29tLnN1bi5hYXMuamF2YVJvb3R9IiBkZWJ1Zy1lbmFibGVkPSJmYWxzZSIgZGVidWctb3B0aW9ucz0iLVhkZWJ1ZyAtWHJ1bmpkd3A6dHJhbnNwb3J0PWR0X3NvY2tldCxzZXJ2ZXI9eSxzdXNwZW5kPW4sYWRkcmVzcz0xMDQ0IiBybWljLW9wdGlvbnM9Ii1paW9wIC1wb2EgLWFsd2F5c2dlbmVyYXRlIC1rZWVwZ2VuZXJhdGVkIC1nIiBqYXZhYy1vcHRpb25zPSItZyIgc2VydmVyLWNsYXNzcGF0aD0iJHtjb20uc3VuLmFhcy5qYXZhUm9vdH0vbGliL3Rvb2xzLmphciR7cGF0aC5zZXBhcmF0b3J9JHtjb20uc3VuLmFhcy5pbnN0YWxsUm9vdH0vbGliL2luc3RhbGwvYXBwbGljYXRpb25zL2ptc3JhL2ltcWptc3JhLmphciR7cGF0aC5zZXBhcmF0b3J9JHtjb20uc3VuLmFhcy5pbXFMaWJ9L2pheG0tYXBpLmphciR7cGF0aC5zZXBhcmF0b3J9JHtjb20uc3VuLmFhcy5pbXFMaWJ9L2ZzY29udGV4dC5qYXIke3BhdGguc2VwYXJhdG9yfSR7Y29tLnN1bi5hYXMuaW5zdGFsbFJvb3R9L2xpYi9hbnQvbGliL2FudC5qYXIke3BhdGguc2VwYXJhdG9yfSR7Y29tLnN1bi5hYXMuaGFkYlJvb3R9L2xpYi9oYWRiamRiYzQuamFyJHtwYXRoLnNlcGFyYXRvcn0vdXNyL2xpYi9hdWRpdC9BdWRpdC5qYXIke3BhdGguc2VwYXJhdG9yfSR7Y29tLnN1bi5hYXMuamRta0hvbWV9L2xpYi9qZG1rcnQuamFyIiBjbGFzc3BhdGgtc3VmZml4PSIke2NvbS5zdW4uYWFzLmluc3RhbGxSb290fS9wb2ludGJhc2UvbGliL3BiY2xpZW50LmphciR7cGF0aC5zZXBhcmF0b3J9JHtjb20uc3VuLmFhcy5pbnN0YWxsUm9vdH0vcG9pbnRiYXNlL2xpYi9wYmVtYmVkZGVkLmphciIgZW52LWNsYXNzcGF0aC1pZ25vcmVkPSJ0cnVlIj4KLQk8IS0tIHZhcmlvdXMgcmVxdWlyZWQganZtLW9wdGlvbnMgLS0+Ci0JPGp2bS1vcHRpb25zPi1jbGllbnQ8L2p2bS1vcHRpb25zPgotCTxqdm0tb3B0aW9ucz4tRGNvbS5zdW4uZW50ZXJwcmlzZS53ZWIuY29ubmVjdG9yLnVzZUNveW90ZUNvbm5lY3Rvcj10cnVlPC9qdm0tb3B0aW9ucz4gCi0JPGp2bS1vcHRpb25zPi1EamF2YS5zZWN1cml0eS5wb2xpY3k9JHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L2NvbmZpZy9zZXJ2ZXIucG9saWN5PC9qdm0tb3B0aW9ucz4KLQk8anZtLW9wdGlvbnM+LURqYXZhLnNlY3VyaXR5LmF1dGgubG9naW4uY29uZmlnPSR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9jb25maWcvbG9naW4uY29uZjwvanZtLW9wdGlvbnM+Ci0JPGp2bS1vcHRpb25zPi1Ec3VuLnJtaS5kZ2Muc2VydmVyLmdjSW50ZXJ2YWw9MzYwMDAwMDwvanZtLW9wdGlvbnM+Ci0JPGp2bS1vcHRpb25zPi1Ec3VuLnJtaS5kZ2MuY2xpZW50LmdjSW50ZXJ2YWw9MzYwMDAwMDwvanZtLW9wdGlvbnM+Ci0JPGp2bS1vcHRpb25zPi1EY29tLnN1bi53ZWIuY29uc29sZS5hcHBiYXNlPS8ke2NvbS5zdW4uYWFzLmluc3RhbGxSb290fS9saWIvaW5zdGFsbC9hcHBsaWNhdGlvbnMvY29tX3N1bl93ZWJfdWk8L2p2bS1vcHRpb25zPgotCTxqdm0tb3B0aW9ucz4tWG14NTEybTwvanZtLW9wdGlvbnM+Ci0JPGp2bS1vcHRpb25zPi1EamF2YXgubmV0LnNzbC5rZXlTdG9yZT0ke2NvbS5zdW4uYWFzLmluc3RhbmNlUm9vdH0vY29uZmlnL2tleXN0b3JlLmprczwvanZtLW9wdGlvbnM+Ci0JPGp2bS1vcHRpb25zPi1EamF2YXgubmV0LnNzbC50cnVzdFN0b3JlPSR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9jb25maWcvY2FjZXJ0cy5qa3M8L2p2bS1vcHRpb25zPgotCTxqdm0tb3B0aW9ucz4tRGphdmEuZXh0LmRpcnM9JHtjb20uc3VuLmFhcy5qYXZhUm9vdH0vanJlL2xpYi9leHQke3BhdGguc2VwYXJhdG9yfSR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9saWIvZXh0PC9qdm0tb3B0aW9ucz4KLQk8anZtLW9wdGlvbnM+IC1EamRiYy5kcml2ZXJzPWNvbS5wb2ludGJhc2UuamRiYy5qZGJjVW5pdmVyc2FsRHJpdmVyPC9qdm0tb3B0aW9ucz4KKyAgICA8IS0tIHZhcmlvdXMgcmVxdWlyZWQganZtLW9wdGlvbnMgLS0+CisgICAgPGp2bS1vcHRpb25zPi1jbGllbnQ8L2p2bS1vcHRpb25zPgorICAgIDxqdm0tb3B0aW9ucz4tRGNvbS5zdW4uZW50ZXJwcmlzZS53ZWIuY29ubmVjdG9yLnVzZUNveW90ZUNvbm5lY3Rvcj10cnVlPC9qdm0tb3B0aW9ucz4KKyAgICA8anZtLW9wdGlvbnM+LURqYXZhLnNlY3VyaXR5LnBvbGljeT0ke2NvbS5zdW4uYWFzLmluc3RhbmNlUm9vdH0vY29uZmlnL3NlcnZlci5wb2xpY3k8L2p2bS1vcHRpb25zPgorICAgIDxqdm0tb3B0aW9ucz4tRGphdmEuc2VjdXJpdHkuYXV0aC5sb2dpbi5jb25maWc9JHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L2NvbmZpZy9sb2dpbi5jb25mPC9qdm0tb3B0aW9ucz4KKyAgICA8anZtLW9wdGlvbnM+LURzdW4ucm1pLmRnYy5zZXJ2ZXIuZ2NJbnRlcnZhbD0zNjAwMDAwPC9qdm0tb3B0aW9ucz4KKyAgICA8anZtLW9wdGlvbnM+LURzdW4ucm1pLmRnYy5jbGllbnQuZ2NJbnRlcnZhbD0zNjAwMDAwPC9qdm0tb3B0aW9ucz4KKyAgICA8anZtLW9wdGlvbnM+LURjb20uc3VuLndlYi5jb25zb2xlLmFwcGJhc2U9LyR7Y29tLnN1bi5hYXMuaW5zdGFsbFJvb3R9L2xpYi9pbnN0YWxsL2FwcGxpY2F0aW9ucy9jb21fc3VuX3dlYl91aTwvanZtLW9wdGlvbnM+CisgICAgPGp2bS1vcHRpb25zPi1YbXg1MTJtPC9qdm0tb3B0aW9ucz4KKyAgICA8anZtLW9wdGlvbnM+LURqYXZheC5uZXQuc3NsLmtleVN0b3JlPSR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9jb25maWcva2V5c3RvcmUuamtzPC9qdm0tb3B0aW9ucz4KKyAgICA8anZtLW9wdGlvbnM+LURqYXZheC5uZXQuc3NsLnRydXN0U3RvcmU9JHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L2NvbmZpZy9jYWNlcnRzLmprczwvanZtLW9wdGlvbnM+CisgICAgPGp2bS1vcHRpb25zPi1EamF2YS5leHQuZGlycz0ke2NvbS5zdW4uYWFzLmphdmFSb290fS9qcmUvbGliL2V4dCR7cGF0aC5zZXBhcmF0b3J9JHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L2xpYi9leHQ8L2p2bS1vcHRpb25zPgorICAgIDxqdm0tb3B0aW9ucz4gLURqZGJjLmRyaXZlcnM9Y29tLnBvaW50YmFzZS5qZGJjLmpkYmNVbml2ZXJzYWxEcml2ZXI8L2p2bS1vcHRpb25zPgogCi0JPGp2bS1vcHRpb25zPi1EY29tLnN1bi5lbnRlcnByaXNlLmNvbmZpZy5jb25maWdfZW52aXJvbm1lbnRfZmFjdG9yeV9jbGFzcz1jb20uc3VuLmVudGVycHJpc2UuY29uZmlnLnNlcnZlcmJlYW5zLkFwcHNlcnZlckNvbmZpZ0Vudmlyb25tZW50RmFjdG9yeTwvanZtLW9wdGlvbnM+Ci0JPGp2bS1vcHRpb25zPi1EY29tLnN1bi5lbnRlcnByaXNlLnRhZ2xpYnM9YXBwc2Vydi1qc3RsLmphcixqc2YtaW1wbC5qYXI8L2p2bS1vcHRpb25zPgotCTxqdm0tb3B0aW9ucz4tRGNvbS5zdW4uZW50ZXJwcmlzZS50YWdsaXN0ZW5lcnM9anNmLWltcGwuamFyPC9qdm0tb3B0aW9ucz4KLQk8anZtLW9wdGlvbnM+LVhYOk5ld1JhdGlvPTI8L2p2bS1vcHRpb25zPgotCTxqdm0tb3B0aW9ucz4tRGphdmF4Lm1hbmFnZW1lbnQuYnVpbGRlci5pbml0aWFsPWNvbS5zdW4uZW50ZXJwcmlzZS5lZS5hZG1pbi5BcHBTZXJ2ZXJNQmVhblNlcnZlckJ1aWxkZXI8L2p2bS1vcHRpb25zPjxqdm0tb3B0aW9ucz4tRGNvbS5zdW4uYXBwc2Vydi5wbHVnZ2FibGUuZmVhdHVyZXM9Y29tLnN1bi5lbnRlcnByaXNlLmVlLnNlcnZlci5wbHVnZ2FibGUuRUVQbHVnZ2FibGVGZWF0dXJlSW1wbDwvanZtLW9wdGlvbnM+PGp2bS1vcHRpb25zPi1EY29tLnN1bi5hcHBzZXJ2Lm5zcy5kYj0ke2NvbS5zdW4uYWFzLmluc3RhbmNlUm9vdH0vY29uZmlnCi0JPC9qdm0tb3B0aW9ucz4KKyAgICA8anZtLW9wdGlvbnM+LURjb20uc3VuLmVudGVycHJpc2UuY29uZmlnLmNvbmZpZ19lbnZpcm9ubWVudF9mYWN0b3J5X2NsYXNzPWNvbS5zdW4uZW50ZXJwcmlzZS5jb25maWcuc2VydmVyYmVhbnMuQXBwc2VydmVyQ29uZmlnRW52aXJvbm1lbnRGYWN0b3J5PC9qdm0tb3B0aW9ucz4KKyAgICA8anZtLW9wdGlvbnM+LURjb20uc3VuLmVudGVycHJpc2UudGFnbGlicz1hcHBzZXJ2LWpzdGwuamFyLGpzZi1pbXBsLmphcjwvanZtLW9wdGlvbnM+CisgICAgPGp2bS1vcHRpb25zPi1EY29tLnN1bi5lbnRlcnByaXNlLnRhZ2xpc3RlbmVycz1qc2YtaW1wbC5qYXI8L2p2bS1vcHRpb25zPgorICAgIDxqdm0tb3B0aW9ucz4tWFg6TmV3UmF0aW89MjwvanZtLW9wdGlvbnM+CisgICAgPGp2bS1vcHRpb25zPi1EamF2YXgubWFuYWdlbWVudC5idWlsZGVyLmluaXRpYWw9Y29tLnN1bi5lbnRlcnByaXNlLmVlLmFkbWluLkFwcFNlcnZlck1CZWFuU2VydmVyQnVpbGRlcjwvanZtLW9wdGlvbnM+PGp2bS1vcHRpb25zPi1EY29tLnN1bi5hcHBzZXJ2LnBsdWdnYWJsZS5mZWF0dXJlcz1jb20uc3VuLmVudGVycHJpc2UuZWUuc2VydmVyLnBsdWdnYWJsZS5FRVBsdWdnYWJsZUZlYXR1cmVJbXBsPC9qdm0tb3B0aW9ucz48anZtLW9wdGlvbnM+LURjb20uc3VuLmFwcHNlcnYubnNzLmRiPSR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9jb25maWcKKyAgICA8L2p2bS1vcHRpb25zPgogICAgICAgPC9qYXZhLWNvbmZpZz4KICAgICAgIDxhdmFpbGFiaWxpdHktc2VydmljZSBhdmFpbGFiaWxpdHktZW5hYmxlZD0idHJ1ZSI+Ci0JPHdlYi1jb250YWluZXItYXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eS1lbmFibGVkPSJ0cnVlIiBodHRwLXNlc3Npb24tc3RvcmUtcG9vbC1uYW1lPSJqZGJjL2hhc3RvcmUiIHBlcnNpc3RlbmNlLWZyZXF1ZW5jeT0id2ViLW1ldGhvZCIgcGVyc2lzdGVuY2Utc2NvcGU9InNlc3Npb24iIHBlcnNpc3RlbmNlLXN0b3JlLWhlYWx0aC1jaGVjay1lbmFibGVkPSJmYWxzZSIgcGVyc2lzdGVuY2UtdHlwZT0iaGEiIHNzby1mYWlsb3Zlci1lbmFibGVkPSJmYWxzZSIvPgotCTxlamItY29udGFpbmVyLWF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHktZW5hYmxlZD0idHJ1ZSIgc2ZzYi1jaGVja3BvaW50LWVuYWJsZWQ9ImZhbHNlIiBzZnNiLWhhLXBlcnNpc3RlbmNlLXR5cGU9ImhhIiBzZnNiLXBlcnNpc3RlbmNlLXR5cGU9ImZpbGUiIHNmc2ItcXVpY2stY2hlY2twb2ludC1lbmFibGVkPSJmYWxzZSIgc2ZzYi1zdG9yZS1wb29sLW5hbWU9ImpkYmMvaGFzdG9yZSIvPgorICAgIDx3ZWItY29udGFpbmVyLWF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHktZW5hYmxlZD0idHJ1ZSIgaHR0cC1zZXNzaW9uLXN0b3JlLXBvb2wtbmFtZT0iamRiYy9oYXN0b3JlIiBwZXJzaXN0ZW5jZS1mcmVxdWVuY3k9IndlYi1tZXRob2QiIHBlcnNpc3RlbmNlLXNjb3BlPSJzZXNzaW9uIiBwZXJzaXN0ZW5jZS1zdG9yZS1oZWFsdGgtY2hlY2stZW5hYmxlZD0iZmFsc2UiIHBlcnNpc3RlbmNlLXR5cGU9ImhhIiBzc28tZmFpbG92ZXItZW5hYmxlZD0iZmFsc2UiLz4KKyAgICA8ZWpiLWNvbnRhaW5lci1hdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5LWVuYWJsZWQ9InRydWUiIHNmc2ItY2hlY2twb2ludC1lbmFibGVkPSJmYWxzZSIgc2ZzYi1oYS1wZXJzaXN0ZW5jZS10eXBlPSJoYSIgc2ZzYi1wZXJzaXN0ZW5jZS10eXBlPSJmaWxlIiBzZnNiLXF1aWNrLWNoZWNrcG9pbnQtZW5hYmxlZD0iZmFsc2UiIHNmc2Itc3RvcmUtcG9vbC1uYW1lPSJqZGJjL2hhc3RvcmUiLz4KICAgICAgIDwvYXZhaWxhYmlsaXR5LXNlcnZpY2U+CiAgICAgICA8dGhyZWFkLXBvb2xzPgotCTx0aHJlYWQtcG9vbCB0aHJlYWQtcG9vbC1pZD0idGhyZWFkLXBvb2wtMSIgbWluLXRocmVhZC1wb29sLXNpemU9IjAiIG1heC10aHJlYWQtcG9vbC1zaXplPSIyMDAiIGlkbGUtdGhyZWFkLXRpbWVvdXQtaW4tc2Vjb25kcz0iMTIwIiBudW0td29yay1xdWV1ZXM9IjEiLz4KKyAgICA8dGhyZWFkLXBvb2wgdGhyZWFkLXBvb2wtaWQ9InRocmVhZC1wb29sLTEiIG1pbi10aHJlYWQtcG9vbC1zaXplPSIwIiBtYXgtdGhyZWFkLXBvb2wtc2l6ZT0iMjAwIiBpZGxlLXRocmVhZC10aW1lb3V0LWluLXNlY29uZHM9IjEyMCIgbnVtLXdvcmstcXVldWVzPSIxIi8+CiAKICAgICAgIDwvdGhyZWFkLXBvb2xzPgogICAgIDwvY29uZmlnPiA8IS0tIGNvbmZpZyBtb2RlbCB3aXRoIG5hbWUgInNlcnZlci1jb25maWciIGVuZHMgLS0+CiAgICAgPGNvbmZpZyBuYW1lPSJkZWZhdWx0LWNvbmZpZyIgZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24tZW5hYmxlZD0idHJ1ZSI+CiAgICAgICA8aHR0cC1zZXJ2aWNlPgotCTxodHRwLWxpc3RlbmVyIGlkPSJodHRwLWxpc3RlbmVyLTEiIGFkZHJlc3M9IjAuMC4wLjAiIHBvcnQ9IiR7aHR0cC1saXN0ZW5lci0xLXBvcnR9IiBhY2NlcHRvci10aHJlYWRzPSIxMDAiIHNlY3VyaXR5LWVuYWJsZWQ9ImZhbHNlIiBkZWZhdWx0LXZpcnR1YWwtc2VydmVyPSJzZXJ2ZXIiIHNlcnZlci1uYW1lPSIiIHhwb3dlcmVkLWJ5PSJ0cnVlIiBlbmFibGVkPSJ0cnVlIj4KLQk8L2h0dHAtbGlzdGVuZXI+Ci0JPGh0dHAtbGlzdGVuZXIgaWQ9Imh0dHAtbGlzdGVuZXItMiIgYWRkcmVzcz0iMC4wLjAuMCIgcG9ydD0iJHtodHRwLWxpc3RlbmVyLTItcG9ydH0iIGFjY2VwdG9yLXRocmVhZHM9IjEwMCIgc2VjdXJpdHktZW5hYmxlZD0idHJ1ZSIgZGVmYXVsdC12aXJ0dWFsLXNlcnZlcj0ic2VydmVyIiBzZXJ2ZXItbmFtZT0iIiB4cG93ZXJlZC1ieT0idHJ1ZSIgZW5hYmxlZD0idHJ1ZSI+Ci0JPC9odHRwLWxpc3RlbmVyPgotCTx2aXJ0dWFsLXNlcnZlciBpZD0ic2VydmVyIiBodHRwLWxpc3RlbmVycz0iaHR0cC1saXN0ZW5lci0xLGh0dHAtbGlzdGVuZXItMiIgaG9zdHM9IiR7Y29tLnN1bi5hYXMuaG9zdE5hbWV9IiBzdGF0ZT0ib24iPgotCSAgPHByb3BlcnR5IG5hbWU9ImRvY3Jvb3QiIHZhbHVlPSIke2NvbS5zdW4uYWFzLmluc3RhbmNlUm9vdH0vZG9jcm9vdCIvPgotCSAgPHByb3BlcnR5IG5hbWU9ImFjY2Vzc2xvZyIgdmFsdWU9IiR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9sb2dzL2FjY2VzcyIvPgotCSAgPHByb3BlcnR5IG5hbWU9ImRlZmF1bHQtd2ViLXhtbCIgdmFsdWU9IiR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9jb25maWcvZGVmYXVsdC13ZWIueG1sIi8+Ci0JPC92aXJ0dWFsLXNlcnZlcj4KLQk8aHR0cC1wcm90b2NvbCBzc2wtZW5hYmxlZD0idHJ1ZSIvPgorICAgIDxodHRwLWxpc3RlbmVyIGlkPSJodHRwLWxpc3RlbmVyLTEiIGFkZHJlc3M9IjAuMC4wLjAiIHBvcnQ9IiR7aHR0cC1saXN0ZW5lci0xLXBvcnR9IiBhY2NlcHRvci10aHJlYWRzPSIxMDAiIHNlY3VyaXR5LWVuYWJsZWQ9ImZhbHNlIiBkZWZhdWx0LXZpcnR1YWwtc2VydmVyPSJzZXJ2ZXIiIHNlcnZlci1uYW1lPSIiIHhwb3dlcmVkLWJ5PSJ0cnVlIiBlbmFibGVkPSJ0cnVlIj4KKyAgICA8L2h0dHAtbGlzdGVuZXI+CisgICAgPGh0dHAtbGlzdGVuZXIgaWQ9Imh0dHAtbGlzdGVuZXItMiIgYWRkcmVzcz0iMC4wLjAuMCIgcG9ydD0iJHtodHRwLWxpc3RlbmVyLTItcG9ydH0iIGFjY2VwdG9yLXRocmVhZHM9IjEwMCIgc2VjdXJpdHktZW5hYmxlZD0idHJ1ZSIgZGVmYXVsdC12aXJ0dWFsLXNlcnZlcj0ic2VydmVyIiBzZXJ2ZXItbmFtZT0iIiB4cG93ZXJlZC1ieT0idHJ1ZSIgZW5hYmxlZD0idHJ1ZSI+CisgICAgPC9odHRwLWxpc3RlbmVyPgorICAgIDx2aXJ0dWFsLXNlcnZlciBpZD0ic2VydmVyIiBodHRwLWxpc3RlbmVycz0iaHR0cC1saXN0ZW5lci0xLGh0dHAtbGlzdGVuZXItMiIgaG9zdHM9IiR7Y29tLnN1bi5hYXMuaG9zdE5hbWV9IiBzdGF0ZT0ib24iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImRvY3Jvb3QiIHZhbHVlPSIke2NvbS5zdW4uYWFzLmluc3RhbmNlUm9vdH0vZG9jcm9vdCIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImFjY2Vzc2xvZyIgdmFsdWU9IiR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9sb2dzL2FjY2VzcyIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImRlZmF1bHQtd2ViLXhtbCIgdmFsdWU9IiR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9jb25maWcvZGVmYXVsdC13ZWIueG1sIi8+CisgICAgPC92aXJ0dWFsLXNlcnZlcj4KKyAgICA8aHR0cC1wcm90b2NvbCBzc2wtZW5hYmxlZD0idHJ1ZSIvPgogICAgICAgPC9odHRwLXNlcnZpY2U+CiAgICAgICA8aWlvcC1zZXJ2aWNlIGNsaWVudC1hdXRoZW50aWNhdGlvbi1yZXF1aXJlZD0iZmFsc2UiPgotCTxvcmIgdXNlLXRocmVhZC1wb29sLWlkcz0idGhyZWFkLXBvb2wtMSIgbWVzc2FnZS1mcmFnbWVudC1zaXplPSIxMDI0IiBtYXgtY29ubmVjdGlvbnM9IjEwMjQiLz4KKyAgICA8b3JiIHVzZS10aHJlYWQtcG9vbC1pZHM9InRocmVhZC1wb29sLTEiIG1lc3NhZ2UtZnJhZ21lbnQtc2l6ZT0iMTAyNCIgbWF4LWNvbm5lY3Rpb25zPSIxMDI0Ii8+CiAKLQk8aWlvcC1saXN0ZW5lciBpZD0ib3JiLWxpc3RlbmVyLTEiIGFkZHJlc3M9IjAuMC4wLjAiIHBvcnQ9IiR7b3JiLWxpc3RlbmVyLTEtcG9ydH0iIGVuYWJsZWQ9InRydWUiLz4KLQk8aWlvcC1saXN0ZW5lciBpZD0iU1NMIiBhZGRyZXNzPSIwLjAuMC4wIiBwb3J0PSIke1NTTC1wb3J0fSIgc2VjdXJpdHktZW5hYmxlZD0idHJ1ZSIgZW5hYmxlZD0idHJ1ZSI+Ci0JICA8c3NsIGNlcnQtbmlja25hbWU9InMxYXMiIGNsaWVudC1hdXRoLWVuYWJsZWQ9ImZhbHNlIi8+Ci0JPC9paW9wLWxpc3RlbmVyPgotCTxpaW9wLWxpc3RlbmVyIGlkPSJTU0xfTVVUVUFMQVVUSCIgYWRkcmVzcz0iMC4wLjAuMCIgcG9ydD0iJHtTU0xfTVVUVUFMQVVUSC1wb3J0fSIgc2VjdXJpdHktZW5hYmxlZD0idHJ1ZSIgZW5hYmxlZD0idHJ1ZSI+Ci0JICA8c3NsIGNlcnQtbmlja25hbWU9InMxYXMiIGNsaWVudC1hdXRoLWVuYWJsZWQ9InRydWUiLz4KLQk8L2lpb3AtbGlzdGVuZXI+CisgICAgPGlpb3AtbGlzdGVuZXIgaWQ9Im9yYi1saXN0ZW5lci0xIiBhZGRyZXNzPSIwLjAuMC4wIiBwb3J0PSIke29yYi1saXN0ZW5lci0xLXBvcnR9IiBlbmFibGVkPSJ0cnVlIi8+CisgICAgPGlpb3AtbGlzdGVuZXIgaWQ9IlNTTCIgYWRkcmVzcz0iMC4wLjAuMCIgcG9ydD0iJHtTU0wtcG9ydH0iIHNlY3VyaXR5LWVuYWJsZWQ9InRydWUiIGVuYWJsZWQ9InRydWUiPgorICAgICAgPHNzbCBjZXJ0LW5pY2tuYW1lPSJzMWFzIiBjbGllbnQtYXV0aC1lbmFibGVkPSJmYWxzZSIvPgorICAgIDwvaWlvcC1saXN0ZW5lcj4KKyAgICA8aWlvcC1saXN0ZW5lciBpZD0iU1NMX01VVFVBTEFVVEgiIGFkZHJlc3M9IjAuMC4wLjAiIHBvcnQ9IiR7U1NMX01VVFVBTEFVVEgtcG9ydH0iIHNlY3VyaXR5LWVuYWJsZWQ9InRydWUiIGVuYWJsZWQ9InRydWUiPgorICAgICAgPHNzbCBjZXJ0LW5pY2tuYW1lPSJzMWFzIiBjbGllbnQtYXV0aC1lbmFibGVkPSJ0cnVlIi8+CisgICAgPC9paW9wLWxpc3RlbmVyPgogICAgICAgPC9paW9wLXNlcnZpY2U+CiAgICAgICA8YWRtaW4tc2VydmljZSBzeXN0ZW0tam14LWNvbm5lY3Rvci1uYW1lPSJzeXN0ZW0iIHR5cGU9InNlcnZlciI+Ci0JPCEtLSBKU1IgMTYwICAic3lzdGVtLWpteC1jb25uZWN0b3IiIC0tPgotCTxqbXgtY29ubmVjdG9yIGFjY2VwdC1hbGw9ImZhbHNlIiBhZGRyZXNzPSIwLjAuMC4wIiBhdXRoLXJlYWxtLW5hbWU9ImFkbWluLXJlYWxtIiBuYW1lPSJzeXN0ZW0iIHBvcnQ9IiR7Sk1YX1NZU1RFTV9DT05ORUNUT1ItcG9ydH0iIHByb3RvY29sPSJybWlfanJtcCIgc2VjdXJpdHktZW5hYmxlZD0idHJ1ZSI+Ci0JICA8c3NsIGNlcnQtbmlja25hbWU9InMxYXMiIHNzbDMtZW5hYmxlZD0idHJ1ZSIgdGxzLWVuYWJsZWQ9InRydWUiIGNsaWVudC1hdXRoLWVuYWJsZWQ9ImZhbHNlIi8+Ci0JPC9qbXgtY29ubmVjdG9yPgotCTwhLS0gSlNSIDE2MCAgInN5c3RlbS1qbXgtY29ubmVjdG9yIiAtLT4KLQk8ZGFzLWNvbmZpZyBkeW5hbWljLXJlbG9hZC1lbmFibGVkPSJ0cnVlIiBkeW5hbWljLXJlbG9hZC1wb2xsLWludGVydmFsLWluLXNlY29uZHM9IjIiIGF1dG9kZXBsb3ktZW5hYmxlZD0idHJ1ZSIgYXV0b2RlcGxveS1wb2xsaW5nLWludGVydmFsLWluLXNlY29uZHM9IjIiIGF1dG9kZXBsb3ktZGlyPSIke2NvbS5zdW4uYWFzLmluc3RhbmNlUm9vdH0vYXV0b2RlcGxveSIgYXV0b2RlcGxveS12ZXJpZmllci1lbmFibGVkPSJmYWxzZSIgYXV0b2RlcGxveS1qc3AtcHJlY29tcGlsYXRpb24tZW5hYmxlZD0iZmFsc2UiIGRlcGxveS14bWwtdmFsaWRhdGlvbj0iZnVsbCIvPgorICAgIDwhLS0gSlNSIDE2MCAgInN5c3RlbS1qbXgtY29ubmVjdG9yIiAtLT4KKyAgICA8am14LWNvbm5lY3RvciBhY2NlcHQtYWxsPSJmYWxzZSIgYWRkcmVzcz0iMC4wLjAuMCIgYXV0aC1yZWFsbS1uYW1lPSJhZG1pbi1yZWFsbSIgbmFtZT0ic3lzdGVtIiBwb3J0PSIke0pNWF9TWVNURU1fQ09OTkVDVE9SLXBvcnR9IiBwcm90b2NvbD0icm1pX2pybXAiIHNlY3VyaXR5LWVuYWJsZWQ9InRydWUiPgorICAgICAgPHNzbCBjZXJ0LW5pY2tuYW1lPSJzMWFzIiBzc2wzLWVuYWJsZWQ9InRydWUiIHRscy1lbmFibGVkPSJ0cnVlIiBjbGllbnQtYXV0aC1lbmFibGVkPSJmYWxzZSIvPgorICAgIDwvam14LWNvbm5lY3Rvcj4KKyAgICA8IS0tIEpTUiAxNjAgICJzeXN0ZW0tam14LWNvbm5lY3RvciIgLS0+CisgICAgPGRhcy1jb25maWcgZHluYW1pYy1yZWxvYWQtZW5hYmxlZD0idHJ1ZSIgZHluYW1pYy1yZWxvYWQtcG9sbC1pbnRlcnZhbC1pbi1zZWNvbmRzPSIyIiBhdXRvZGVwbG95LWVuYWJsZWQ9InRydWUiIGF1dG9kZXBsb3ktcG9sbGluZy1pbnRlcnZhbC1pbi1zZWNvbmRzPSIyIiBhdXRvZGVwbG95LWRpcj0iJHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L2F1dG9kZXBsb3kiIGF1dG9kZXBsb3ktdmVyaWZpZXItZW5hYmxlZD0iZmFsc2UiIGF1dG9kZXBsb3ktanNwLXByZWNvbXBpbGF0aW9uLWVuYWJsZWQ9ImZhbHNlIiBkZXBsb3kteG1sLXZhbGlkYXRpb249ImZ1bGwiLz4KICAgICAgIDwvYWRtaW4tc2VydmljZT4KICAgICAgIDx3ZWItY29udGFpbmVyPjxzZXNzaW9uLWNvbmZpZz4KICAgICAgIDxzZXNzaW9uLW1hbmFnZXI+Ci0JPG1hbmFnZXItcHJvcGVydGllcy8+Ci0JPHN0b3JlLXByb3BlcnRpZXMvPgorICAgIDxtYW5hZ2VyLXByb3BlcnRpZXMvPgorICAgIDxzdG9yZS1wcm9wZXJ0aWVzLz4KICAgICAgIDwvc2Vzc2lvbi1tYW5hZ2VyPgogICAgICAgPHNlc3Npb24tcHJvcGVydGllcy8+CiAgICAgICA8L3Nlc3Npb24tY29uZmlnPjwvd2ViLWNvbnRhaW5lcj4KICAgICAgIDxlamItY29udGFpbmVyIHN0ZWFkeS1wb29sLXNpemU9IjAiIHBvb2wtcmVzaXplLXF1YW50aXR5PSI4IiBtYXgtcG9vbC1zaXplPSIzMiIgY2FjaGUtcmVzaXplLXF1YW50aXR5PSIzMiIgbWF4LWNhY2hlLXNpemU9IjUxMiIgcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz0iNjAwIiBjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz0iNjAwIiByZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz0iNTQwMCIgdmljdGltLXNlbGVjdGlvbi1wb2xpY3k9Im5ydSIgY29tbWl0LW9wdGlvbj0iQiIgc2Vzc2lvbi1zdG9yZT0iJHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L3Nlc3Npb24tc3RvcmUiPgotCTxlamItdGltZXItc2VydmljZS8+CisgICAgPGVqYi10aW1lci1zZXJ2aWNlLz4KICAgICAgIDwvZWpiLWNvbnRhaW5lcj4KICAgICAgIDxtZGItY29udGFpbmVyIHN0ZWFkeS1wb29sLXNpemU9IjAiIHBvb2wtcmVzaXplLXF1YW50aXR5PSI4IiBtYXgtcG9vbC1zaXplPSIzMiIgaWRsZS10aW1lb3V0LWluLXNlY29uZHM9IjYwMCIvPgogICAgICAgPGptcy1zZXJ2aWNlIGluaXQtdGltZW91dC1pbi1zZWNvbmRzPSI2MCIgdHlwZT0iUkVNT1RFIiByZWNvbm5lY3QtaW50ZXJ2YWwtaW4tc2Vjb25kcz0iNjAiIHJlY29ubmVjdC1hdHRlbXB0cz0iMyIgcmVjb25uZWN0LWVuYWJsZWQ9InRydWUiIGFkZHJlc3NsaXN0LWJlaGF2aW9yPSJyYW5kb20iIGFkZHJlc3NsaXN0LWl0ZXJhdGlvbnM9IjMiPgotCTxqbXMtaG9zdCBuYW1lPSJkZWZhdWx0X0pNU19ob3N0IiBob3N0PSJ0b2J5LWNvbXBhcS5yZWQuaXBsYW5ldC5jb20iIHBvcnQ9Ijc2NzYiIGFkbWluLXVzZXItbmFtZT0iYWRtaW4iIGFkbWluLXBhc3N3b3JkPSJhZG1pbiIvPgorICAgIDxqbXMtaG9zdCBuYW1lPSJkZWZhdWx0X0pNU19ob3N0IiBob3N0PSJ0b2J5LWNvbXBhcS5yZWQuaXBsYW5ldC5jb20iIHBvcnQ9Ijc2NzYiIGFkbWluLXVzZXItbmFtZT0iYWRtaW4iIGFkbWluLXBhc3N3b3JkPSJhZG1pbiIvPgogICAgICAgPC9qbXMtc2VydmljZT4KICAgICAgIDxsb2ctc2VydmljZSBmaWxlPSIke2NvbS5zdW4uYWFzLmluc3RhbmNlUm9vdH0vbG9ncy9zZXJ2ZXIubG9nIiB1c2Utc3lzdGVtLWxvZ2dpbmc9ImZhbHNlIiBsb2ctdG8tY29uc29sZT0iZmFsc2UiIGFsYXJtcz0iZmFsc2UiIGxvZy1yb3RhdGlvbi1saW1pdC1pbi1ieXRlcz0iMjAwMDAwMDAwMCI+Ci0JPG1vZHVsZS1sb2ctbGV2ZWxzIHJvb3Q9IklORk8iIHNlcnZlcj0iSU5GTyIgZWpiLWNvbnRhaW5lcj0iSU5GTyIgY21wLWNvbnRhaW5lcj0iSU5GTyIgbWRiLWNvbnRhaW5lcj0iSU5GTyIgd2ViLWNvbnRhaW5lcj0iSU5GTyIgY2xhc3Nsb2FkZXI9IklORk8iIGNvbmZpZ3VyYXRpb249IklORk8iIG5hbWluZz0iSU5GTyIgc2VjdXJpdHk9IklORk8iIGFkbWluPSJJTkZPIiBqdHM9IklORk8iIGp0YT0iSU5GTyIgZGVwbG95bWVudD0iSU5GTyIgdmVyaWZpZXI9IklORk8iIGpheHI9IklORk8iIGpheHJwYz0iSU5GTyIgc2Fhaj0iSU5GTyIgY29yYmE9IklORk8iIGphdmFtYWlsPSJJTkZPIiBqbXM9IklORk8iIGNvbm5lY3Rvcj0iSU5GTyIgamRvPSJJTkZPIiBjbXA9IklORk8iIHJlc291cmNlLWFkYXB0ZXI9IklORk8iLz4KKyAgICA8bW9kdWxlLWxvZy1sZXZlbHMgcm9vdD0iSU5GTyIgc2VydmVyPSJJTkZPIiBlamItY29udGFpbmVyPSJJTkZPIiBjbXAtY29udGFpbmVyPSJJTkZPIiBtZGItY29udGFpbmVyPSJJTkZPIiB3ZWItY29udGFpbmVyPSJJTkZPIiBjbGFzc2xvYWRlcj0iSU5GTyIgY29uZmlndXJhdGlvbj0iSU5GTyIgbmFtaW5nPSJJTkZPIiBzZWN1cml0eT0iSU5GTyIgYWRtaW49IklORk8iIGp0cz0iSU5GTyIganRhPSJJTkZPIiBkZXBsb3ltZW50PSJJTkZPIiB2ZXJpZmllcj0iSU5GTyIgamF4cj0iSU5GTyIgamF4cnBjPSJJTkZPIiBzYWFqPSJJTkZPIiBjb3JiYT0iSU5GTyIgamF2YW1haWw9IklORk8iIGptcz0iSU5GTyIgY29ubmVjdG9yPSJJTkZPIiBqZG89IklORk8iIGNtcD0iSU5GTyIgcmVzb3VyY2UtYWRhcHRlcj0iSU5GTyIvPgogICAgICAgPC9sb2ctc2VydmljZT4KICAgICAgIDxzZWN1cml0eS1zZXJ2aWNlIGRlZmF1bHQtcmVhbG09ImZpbGUiIGFub255bW91cy1yb2xlPSJBTllPTkUiIGF1ZGl0LWVuYWJsZWQ9ImZhbHNlIiBqYWNjPSJkZWZhdWx0IiBhdWRpdC1tb2R1bGVzPSJkZWZhdWx0Ij4KLQk8IS0tIEFsbCBhZG1pbmlzdHJhdGl2ZSB0YXNrcyB3aXRoaW4gYW55IHNlcnZlciBpbnN0YW5jZSB1c2UgdGhpcyBhZG1pbi1yZWFsbSBieSBkZWZhdWx0LiAtLT4KLQk8YXV0aC1yZWFsbSBuYW1lPSJhZG1pbi1yZWFsbSIgY2xhc3NuYW1lPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5maWxlLkZpbGVSZWFsbSI+Ci0JICA8cHJvcGVydHkgbmFtZT0iZmlsZSIgdmFsdWU9IiR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9jb25maWcvYWRtaW4ta2V5ZmlsZSIvPgotCSAgPHByb3BlcnR5IG5hbWU9ImphYXMtY29udGV4dCIgdmFsdWU9ImZpbGVSZWFsbSIvPgotCTwvYXV0aC1yZWFsbT4KLQk8IS0tIEFsbCBhZG1pbmlzdHJhdGl2ZSB0YXNrcyB3aXRoaW4gYW55IHNlcnZlciBpbnN0YW5jZSB1c2UgdGhpcyBhZG1pbi1yZWFsbSBieSBkZWZhdWx0LiAtLT4KLQk8YXV0aC1yZWFsbSBuYW1lPSJmaWxlIiBjbGFzc25hbWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5zZWN1cml0eS5hdXRoLnJlYWxtLmZpbGUuRmlsZVJlYWxtIj4KLQkgIDxwcm9wZXJ0eSBuYW1lPSJmaWxlIiB2YWx1ZT0iJHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L2NvbmZpZy9rZXlmaWxlIi8+Ci0JICA8cHJvcGVydHkgbmFtZT0iamFhcy1jb250ZXh0IiB2YWx1ZT0iZmlsZVJlYWxtIi8+Ci0JPC9hdXRoLXJlYWxtPgotCTxhdXRoLXJlYWxtIG5hbWU9ImNlcnRpZmljYXRlIiBjbGFzc25hbWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5zZWN1cml0eS5hdXRoLnJlYWxtLmNlcnRpZmljYXRlLkNlcnRpZmljYXRlUmVhbG0iPgotCTwvYXV0aC1yZWFsbT4KLQk8amFjYy1wcm92aWRlciBuYW1lPSJkZWZhdWx0IiBwb2xpY3ktcHJvdmlkZXI9ImNvbS5zdW4uZW50ZXJwcmlzZS5zZWN1cml0eS5qYWNjLnByb3ZpZGVyLlNpbXBsZVBvbGljeVByb3ZpZGVyIiBwb2xpY3ktY29uZmlndXJhdGlvbi1mYWN0b3J5LXByb3ZpZGVyPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuamFjYy5wcm92aWRlci5TaW1wbGVQb2xpY3lDb25maWd1cmF0aW9uRmFjdG9yeSI+Ci0JICA8cHJvcGVydHkgbmFtZT0icmVwb3NpdG9yeSIgdmFsdWU9IiR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9nZW5lcmF0ZWQvcG9saWN5Ii8+Ci0JPC9qYWNjLXByb3ZpZGVyPgotCTxhdWRpdC1tb2R1bGUgbmFtZT0iZGVmYXVsdCIgY2xhc3NuYW1lPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuQXVkaXQiPgotCSAgPHByb3BlcnR5IG5hbWU9ImF1ZGl0T24iIHZhbHVlPSJmYWxzZSIvPgotCTwvYXVkaXQtbW9kdWxlPgorICAgIDwhLS0gQWxsIGFkbWluaXN0cmF0aXZlIHRhc2tzIHdpdGhpbiBhbnkgc2VydmVyIGluc3RhbmNlIHVzZSB0aGlzIGFkbWluLXJlYWxtIGJ5IGRlZmF1bHQuIC0tPgorICAgIDxhdXRoLXJlYWxtIG5hbWU9ImFkbWluLXJlYWxtIiBjbGFzc25hbWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5zZWN1cml0eS5hdXRoLnJlYWxtLmZpbGUuRmlsZVJlYWxtIj4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmaWxlIiB2YWx1ZT0iJHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L2NvbmZpZy9hZG1pbi1rZXlmaWxlIi8+CisgICAgICA8cHJvcGVydHkgbmFtZT0iamFhcy1jb250ZXh0IiB2YWx1ZT0iZmlsZVJlYWxtIi8+CisgICAgPC9hdXRoLXJlYWxtPgorICAgIDwhLS0gQWxsIGFkbWluaXN0cmF0aXZlIHRhc2tzIHdpdGhpbiBhbnkgc2VydmVyIGluc3RhbmNlIHVzZSB0aGlzIGFkbWluLXJlYWxtIGJ5IGRlZmF1bHQuIC0tPgorICAgIDxhdXRoLXJlYWxtIG5hbWU9ImZpbGUiIGNsYXNzbmFtZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uZmlsZS5GaWxlUmVhbG0iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImZpbGUiIHZhbHVlPSIke2NvbS5zdW4uYWFzLmluc3RhbmNlUm9vdH0vY29uZmlnL2tleWZpbGUiLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJqYWFzLWNvbnRleHQiIHZhbHVlPSJmaWxlUmVhbG0iLz4KKyAgICA8L2F1dGgtcmVhbG0+CisgICAgPGF1dGgtcmVhbG0gbmFtZT0iY2VydGlmaWNhdGUiIGNsYXNzbmFtZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uY2VydGlmaWNhdGUuQ2VydGlmaWNhdGVSZWFsbSI+CisgICAgPC9hdXRoLXJlYWxtPgorICAgIDxqYWNjLXByb3ZpZGVyIG5hbWU9ImRlZmF1bHQiIHBvbGljeS1wcm92aWRlcj0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmphY2MucHJvdmlkZXIuU2ltcGxlUG9saWN5UHJvdmlkZXIiIHBvbGljeS1jb25maWd1cmF0aW9uLWZhY3RvcnktcHJvdmlkZXI9ImNvbS5zdW4uZW50ZXJwcmlzZS5zZWN1cml0eS5qYWNjLnByb3ZpZGVyLlNpbXBsZVBvbGljeUNvbmZpZ3VyYXRpb25GYWN0b3J5Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXBvc2l0b3J5IiB2YWx1ZT0iJHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L2dlbmVyYXRlZC9wb2xpY3kiLz4KKyAgICA8L2phY2MtcHJvdmlkZXI+CisgICAgPGF1ZGl0LW1vZHVsZSBuYW1lPSJkZWZhdWx0IiBjbGFzc25hbWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5zZWN1cml0eS5BdWRpdCI+CisgICAgICA8cHJvcGVydHkgbmFtZT0iYXVkaXRPbiIgdmFsdWU9ImZhbHNlIi8+CisgICAgPC9hdWRpdC1tb2R1bGU+CiAgICAgICA8L3NlY3VyaXR5LXNlcnZpY2U+CiAgICAgICA8dHJhbnNhY3Rpb24tc2VydmljZSBhdXRvbWF0aWMtcmVjb3Zlcnk9ImZhbHNlIiB0aW1lb3V0LWluLXNlY29uZHM9IjAiIHR4LWxvZy1kaXI9IiR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9sb2dzIiBoZXVyaXN0aWMtZGVjaXNpb249InJvbGxiYWNrIiBrZXlwb2ludC1pbnRlcnZhbD0iMjA0OCIgcmV0cnktdGltZW91dC1pbi1zZWNvbmRzPSI2MDAiLz4KICAgICAgIDxtb25pdG9yaW5nLXNlcnZpY2U+Ci0JPG1vZHVsZS1tb25pdG9yaW5nLWxldmVscyB0aHJlYWQtcG9vbD0iT0ZGIiBvcmI9Ik9GRiIgZWpiLWNvbnRhaW5lcj0iT0ZGIiB3ZWItY29udGFpbmVyPSJPRkYiIHRyYW5zYWN0aW9uLXNlcnZpY2U9Ik9GRiIgaHR0cC1zZXJ2aWNlPSJPRkYiIGpkYmMtY29ubmVjdGlvbi1wb29sPSJPRkYiIGNvbm5lY3Rvci1jb25uZWN0aW9uLXBvb2w9Ik9GRiIvPgorICAgIDxtb2R1bGUtbW9uaXRvcmluZy1sZXZlbHMgdGhyZWFkLXBvb2w9Ik9GRiIgb3JiPSJPRkYiIGVqYi1jb250YWluZXI9Ik9GRiIgd2ViLWNvbnRhaW5lcj0iT0ZGIiB0cmFuc2FjdGlvbi1zZXJ2aWNlPSJPRkYiIGh0dHAtc2VydmljZT0iT0ZGIiBqZGJjLWNvbm5lY3Rpb24tcG9vbD0iT0ZGIiBjb25uZWN0b3ItY29ubmVjdGlvbi1wb29sPSJPRkYiLz4KICAgICAgIDwvbW9uaXRvcmluZy1zZXJ2aWNlPgogICAgICAgPGphdmEtY29uZmlnIGphdmEtaG9tZT0iJHtjb20uc3VuLmFhcy5qYXZhUm9vdH0iIGRlYnVnLWVuYWJsZWQ9ImZhbHNlIiBkZWJ1Zy1vcHRpb25zPSItWGRlYnVnIC1YcnVuamR3cDp0cmFuc3BvcnQ9ZHRfc29ja2V0LHNlcnZlcj15LHN1c3BlbmQ9bixhZGRyZXNzPTEwNDQiIHJtaWMtb3B0aW9ucz0iLWlpb3AgLXBvYSAtYWx3YXlzZ2VuZXJhdGUgLWtlZXBnZW5lcmF0ZWQgLWciIGphdmFjLW9wdGlvbnM9Ii1nIiBzZXJ2ZXItY2xhc3NwYXRoPSIke2NvbS5zdW4uYWFzLmphdmFSb290fS9saWIvdG9vbHMuamFyJHtwYXRoLnNlcGFyYXRvcn0ke2NvbS5zdW4uYWFzLmluc3RhbGxSb290fS9saWIvaW5zdGFsbC9hcHBsaWNhdGlvbnMvam1zcmEvaW1xam1zcmEuamFyJHtwYXRoLnNlcGFyYXRvcn0ke2NvbS5zdW4uYWFzLmltcUxpYn0vamF4bS1hcGkuamFyJHtwYXRoLnNlcGFyYXRvcn0ke2NvbS5zdW4uYWFzLmltcUxpYn0vZnNjb250ZXh0LmphciR7cGF0aC5zZXBhcmF0b3J9JHtjb20uc3VuLmFhcy5pbnN0YWxsUm9vdH0vbGliL2FudC9saWIvYW50LmphciR7cGF0aC5zZXBhcmF0b3J9JHtjb20uc3VuLmFhcy5oYWRiUm9vdH0vbGliL2hhZGJqZGJjNC5qYXIke3BhdGguc2VwYXJhdG9yfS91c3IvbGliL2F1ZGl0L0F1ZGl0LmphciR7cGF0aC5zZXBhcmF0b3J9JHtjb20uc3VuLmFhcy5qZG1rSG9tZX0vbGliL2pkbWtydC5qYXIiIGNsYXNzcGF0aC1zdWZmaXg9IiR7Y29tLnN1bi5hYXMuaW5zdGFsbFJvb3R9L3BvaW50YmFzZS9saWIvcGJjbGllbnQuamFyJHtwYXRoLnNlcGFyYXRvcn0ke2NvbS5zdW4uYWFzLmluc3RhbGxSb290fS9wb2ludGJhc2UvbGliL3BiZW1iZWRkZWQuamFyIiBlbnYtY2xhc3NwYXRoLWlnbm9yZWQ9InRydWUiPgotCTwhLS0gdmFyaW91cyByZXF1aXJlZCBqdm0tb3B0aW9ucyAtLT4KLQk8anZtLW9wdGlvbnM+LWNsaWVudDwvanZtLW9wdGlvbnM+Ci0JPGp2bS1vcHRpb25zPi1EamF2YS5zZWN1cml0eS5wb2xpY3k9JHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L2NvbmZpZy9zZXJ2ZXIucG9saWN5PC9qdm0tb3B0aW9ucz4KLQk8anZtLW9wdGlvbnM+LURqYXZhLnNlY3VyaXR5LmF1dGgubG9naW4uY29uZmlnPSR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9jb25maWcvbG9naW4uY29uZjwvanZtLW9wdGlvbnM+Ci0JPGp2bS1vcHRpb25zPi1Ec3VuLnJtaS5kZ2Muc2VydmVyLmdjSW50ZXJ2YWw9MzYwMDAwMDwvanZtLW9wdGlvbnM+Ci0JPGp2bS1vcHRpb25zPi1Ec3VuLnJtaS5kZ2MuY2xpZW50LmdjSW50ZXJ2YWw9MzYwMDAwMDwvanZtLW9wdGlvbnM+Ci0JPGp2bS1vcHRpb25zPi1YbXg1MTJtPC9qdm0tb3B0aW9ucz4KLQk8anZtLW9wdGlvbnM+LURqYXZheC5uZXQuc3NsLmtleVN0b3JlPSR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9jb25maWcva2V5c3RvcmUuamtzPC9qdm0tb3B0aW9ucz4KLQk8anZtLW9wdGlvbnM+LURqYXZheC5uZXQuc3NsLnRydXN0U3RvcmU9JHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L2NvbmZpZy9jYWNlcnRzLmprczwvanZtLW9wdGlvbnM+Ci0JPGp2bS1vcHRpb25zPi1EamF2YS5leHQuZGlycz0ke2NvbS5zdW4uYWFzLmphdmFSb290fS9qcmUvbGliL2V4dCR7cGF0aC5zZXBhcmF0b3J9JHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L2NvbmZpZy8ke2NvbS5zdW4uYWFzLmNvbmZpZ05hbWV9L2xpYi9leHQke3BhdGguc2VwYXJhdG9yfSR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9saWIvZXh0PC9qdm0tb3B0aW9ucz4KLQk8anZtLW9wdGlvbnM+IC1EamRiYy5kcml2ZXJzPWNvbS5wb2ludGJhc2UuamRiYy5qZGJjVW5pdmVyc2FsRHJpdmVyPC9qdm0tb3B0aW9ucz4KLQk8anZtLW9wdGlvbnM+LURjb20uc3VuLmVudGVycHJpc2UuY29uZmlnLmNvbmZpZ19lbnZpcm9ubWVudF9mYWN0b3J5X2NsYXNzPWNvbS5zdW4uZW50ZXJwcmlzZS5jb25maWcuc2VydmVyYmVhbnMuQXBwc2VydmVyQ29uZmlnRW52aXJvbm1lbnRGYWN0b3J5PC9qdm0tb3B0aW9ucz4KLQk8anZtLW9wdGlvbnM+LURjb20uc3VuLmVudGVycHJpc2UudGFnbGlicz1hcHBzZXJ2LWpzdGwuamFyLGpzZi1pbXBsLmphcjwvanZtLW9wdGlvbnM+Ci0JPGp2bS1vcHRpb25zPi1EY29tLnN1bi5lbnRlcnByaXNlLnRhZ2xpc3RlbmVycz1qc2YtaW1wbC5qYXI8L2p2bS1vcHRpb25zPgotCTxqdm0tb3B0aW9ucz4tWFg6TmV3UmF0aW89MjwvanZtLW9wdGlvbnM+Ci0JPGp2bS1vcHRpb25zPi1EY29tLnN1bi5hcHBzZXJ2LnBsdWdnYWJsZS5mZWF0dXJlcz1jb20uc3VuLmVudGVycHJpc2UuZWUuc2VydmVyLnBsdWdnYWJsZS5FRVBsdWdnYWJsZUZlYXR1cmVJbXBsPC9qdm0tb3B0aW9ucz48anZtLW9wdGlvbnM+LURjb20uc3VuLmFwcHNlcnYubnNzLmRiPSR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9jb25maWc8L2p2bS1vcHRpb25zPgorICAgIDwhLS0gdmFyaW91cyByZXF1aXJlZCBqdm0tb3B0aW9ucyAtLT4KKyAgICA8anZtLW9wdGlvbnM+LWNsaWVudDwvanZtLW9wdGlvbnM+CisgICAgPGp2bS1vcHRpb25zPi1EamF2YS5zZWN1cml0eS5wb2xpY3k9JHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L2NvbmZpZy9zZXJ2ZXIucG9saWN5PC9qdm0tb3B0aW9ucz4KKyAgICA8anZtLW9wdGlvbnM+LURqYXZhLnNlY3VyaXR5LmF1dGgubG9naW4uY29uZmlnPSR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9jb25maWcvbG9naW4uY29uZjwvanZtLW9wdGlvbnM+CisgICAgPGp2bS1vcHRpb25zPi1Ec3VuLnJtaS5kZ2Muc2VydmVyLmdjSW50ZXJ2YWw9MzYwMDAwMDwvanZtLW9wdGlvbnM+CisgICAgPGp2bS1vcHRpb25zPi1Ec3VuLnJtaS5kZ2MuY2xpZW50LmdjSW50ZXJ2YWw9MzYwMDAwMDwvanZtLW9wdGlvbnM+CisgICAgPGp2bS1vcHRpb25zPi1YbXg1MTJtPC9qdm0tb3B0aW9ucz4KKyAgICA8anZtLW9wdGlvbnM+LURqYXZheC5uZXQuc3NsLmtleVN0b3JlPSR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9jb25maWcva2V5c3RvcmUuamtzPC9qdm0tb3B0aW9ucz4KKyAgICA8anZtLW9wdGlvbnM+LURqYXZheC5uZXQuc3NsLnRydXN0U3RvcmU9JHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L2NvbmZpZy9jYWNlcnRzLmprczwvanZtLW9wdGlvbnM+CisgICAgPGp2bS1vcHRpb25zPi1EamF2YS5leHQuZGlycz0ke2NvbS5zdW4uYWFzLmphdmFSb290fS9qcmUvbGliL2V4dCR7cGF0aC5zZXBhcmF0b3J9JHtjb20uc3VuLmFhcy5pbnN0YW5jZVJvb3R9L2NvbmZpZy8ke2NvbS5zdW4uYWFzLmNvbmZpZ05hbWV9L2xpYi9leHQke3BhdGguc2VwYXJhdG9yfSR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9saWIvZXh0PC9qdm0tb3B0aW9ucz4KKyAgICA8anZtLW9wdGlvbnM+IC1EamRiYy5kcml2ZXJzPWNvbS5wb2ludGJhc2UuamRiYy5qZGJjVW5pdmVyc2FsRHJpdmVyPC9qdm0tb3B0aW9ucz4KKyAgICA8anZtLW9wdGlvbnM+LURjb20uc3VuLmVudGVycHJpc2UuY29uZmlnLmNvbmZpZ19lbnZpcm9ubWVudF9mYWN0b3J5X2NsYXNzPWNvbS5zdW4uZW50ZXJwcmlzZS5jb25maWcuc2VydmVyYmVhbnMuQXBwc2VydmVyQ29uZmlnRW52aXJvbm1lbnRGYWN0b3J5PC9qdm0tb3B0aW9ucz4KKyAgICA8anZtLW9wdGlvbnM+LURjb20uc3VuLmVudGVycHJpc2UudGFnbGlicz1hcHBzZXJ2LWpzdGwuamFyLGpzZi1pbXBsLmphcjwvanZtLW9wdGlvbnM+CisgICAgPGp2bS1vcHRpb25zPi1EY29tLnN1bi5lbnRlcnByaXNlLnRhZ2xpc3RlbmVycz1qc2YtaW1wbC5qYXI8L2p2bS1vcHRpb25zPgorICAgIDxqdm0tb3B0aW9ucz4tWFg6TmV3UmF0aW89MjwvanZtLW9wdGlvbnM+CisgICAgPGp2bS1vcHRpb25zPi1EY29tLnN1bi5hcHBzZXJ2LnBsdWdnYWJsZS5mZWF0dXJlcz1jb20uc3VuLmVudGVycHJpc2UuZWUuc2VydmVyLnBsdWdnYWJsZS5FRVBsdWdnYWJsZUZlYXR1cmVJbXBsPC9qdm0tb3B0aW9ucz48anZtLW9wdGlvbnM+LURjb20uc3VuLmFwcHNlcnYubnNzLmRiPSR7Y29tLnN1bi5hYXMuaW5zdGFuY2VSb290fS9jb25maWc8L2p2bS1vcHRpb25zPgogICAgICAgPC9qYXZhLWNvbmZpZz4KICAgICAgIDxhdmFpbGFiaWxpdHktc2VydmljZSBhdmFpbGFiaWxpdHktZW5hYmxlZD0idHJ1ZSI+Ci0JPHdlYi1jb250YWluZXItYXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eS1lbmFibGVkPSJ0cnVlIiBodHRwLXNlc3Npb24tc3RvcmUtcG9vbC1uYW1lPSJqZGJjL2hhc3RvcmUiIHBlcnNpc3RlbmNlLWZyZXF1ZW5jeT0id2ViLW1ldGhvZCIgcGVyc2lzdGVuY2Utc2NvcGU9InNlc3Npb24iIHBlcnNpc3RlbmNlLXN0b3JlLWhlYWx0aC1jaGVjay1lbmFibGVkPSJmYWxzZSIgcGVyc2lzdGVuY2UtdHlwZT0iaGEiIHNzby1mYWlsb3Zlci1lbmFibGVkPSJmYWxzZSIvPgotCTxlamItY29udGFpbmVyLWF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHktZW5hYmxlZD0idHJ1ZSIgc2ZzYi1jaGVja3BvaW50LWVuYWJsZWQ9ImZhbHNlIiBzZnNiLWhhLXBlcnNpc3RlbmNlLXR5cGU9ImhhIiBzZnNiLXBlcnNpc3RlbmNlLXR5cGU9ImZpbGUiIHNmc2ItcXVpY2stY2hlY2twb2ludC1lbmFibGVkPSJmYWxzZSIgc2ZzYi1zdG9yZS1wb29sLW5hbWU9ImpkYmMvaGFzdG9yZSIvPgorICAgIDx3ZWItY29udGFpbmVyLWF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHktZW5hYmxlZD0idHJ1ZSIgaHR0cC1zZXNzaW9uLXN0b3JlLXBvb2wtbmFtZT0iamRiYy9oYXN0b3JlIiBwZXJzaXN0ZW5jZS1mcmVxdWVuY3k9IndlYi1tZXRob2QiIHBlcnNpc3RlbmNlLXNjb3BlPSJzZXNzaW9uIiBwZXJzaXN0ZW5jZS1zdG9yZS1oZWFsdGgtY2hlY2stZW5hYmxlZD0iZmFsc2UiIHBlcnNpc3RlbmNlLXR5cGU9ImhhIiBzc28tZmFpbG92ZXItZW5hYmxlZD0iZmFsc2UiLz4KKyAgICA8ZWpiLWNvbnRhaW5lci1hdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5LWVuYWJsZWQ9InRydWUiIHNmc2ItY2hlY2twb2ludC1lbmFibGVkPSJmYWxzZSIgc2ZzYi1oYS1wZXJzaXN0ZW5jZS10eXBlPSJoYSIgc2ZzYi1wZXJzaXN0ZW5jZS10eXBlPSJmaWxlIiBzZnNiLXF1aWNrLWNoZWNrcG9pbnQtZW5hYmxlZD0iZmFsc2UiIHNmc2Itc3RvcmUtcG9vbC1uYW1lPSJqZGJjL2hhc3RvcmUiLz4KICAgICAgIDwvYXZhaWxhYmlsaXR5LXNlcnZpY2U+CiAgICAgICA8dGhyZWFkLXBvb2xzPgotCTx0aHJlYWQtcG9vbCB0aHJlYWQtcG9vbC1pZD0idGhyZWFkLXBvb2wtMSIgbWluLXRocmVhZC1wb29sLXNpemU9IjAiIG1heC10aHJlYWQtcG9vbC1zaXplPSIyMDAiIGlkbGUtdGhyZWFkLXRpbWVvdXQtaW4tc2Vjb25kcz0iMTIwIiBudW0td29yay1xdWV1ZXM9IjEiLz4KKyAgICA8dGhyZWFkLXBvb2wgdGhyZWFkLXBvb2wtaWQ9InRocmVhZC1wb29sLTEiIG1pbi10aHJlYWQtcG9vbC1zaXplPSIwIiBtYXgtdGhyZWFkLXBvb2wtc2l6ZT0iMjAwIiBpZGxlLXRocmVhZC10aW1lb3V0LWluLXNlY29uZHM9IjEyMCIgbnVtLXdvcmstcXVldWVzPSIxIi8+CiAKICAgICAgIDwvdGhyZWFkLXBvb2xzPgogICAgICAgPHN5c3RlbS1wcm9wZXJ0eSBuYW1lPSJodHRwLWxpc3RlbmVyLTEtcG9ydCIgdmFsdWU9IjgwNzkiLz4KQEAgLTI2NSw3ICsyNjUsNyBAQAogICAgIDwvY29uZmlnPgogICA8L2NvbmZpZ3M+CiAgIDxzZXJ2ZXJzPgotICAgIDxzZXJ2ZXIgbmFtZT0ic2VydmVyIiBjb25maWctcmVmPSJzZXJ2ZXItY29uZmlnIj4gCisgICAgPHNlcnZlciBuYW1lPSJzZXJ2ZXIiIGNvbmZpZy1yZWY9InNlcnZlci1jb25maWciPgogICAgICAgPGFwcGxpY2F0aW9uLXJlZiBlbmFibGVkPSJ0cnVlIiByZWY9ImFkbWluYXBwIiB2aXJ0dWFsLXNlcnZlcnM9Il9fYXNhZG1pbiIgbGItZW5hYmxlZD0iZmFsc2UiIGRpc2FibGUtdGltZW91dC1pbi1taW51dGVzPSIzMCIvPgogICAgICAgPGFwcGxpY2F0aW9uLXJlZiBlbmFibGVkPSJ0cnVlIiByZWY9ImFkbWluZ3VpIiB2aXJ0dWFsLXNlcnZlcnM9Il9fYXNhZG1pbiIgbGItZW5hYmxlZD0iZmFsc2UiIGRpc2FibGUtdGltZW91dC1pbi1taW51dGVzPSIzMCIvPgogICAgICAgPGFwcGxpY2F0aW9uLXJlZiBlbmFibGVkPSJ0cnVlIiByZWY9ImNvbV9zdW5fd2ViX3VpIiB2aXJ0dWFsLXNlcnZlcnM9Il9fYXNhZG1pblVuU2VjdXJlLF9fYXNhZG1pbiIgbGItZW5hYmxlZD0iZmFsc2UiIGRpc2FibGUtdGltZW91dC1pbi1taW51dGVzPSIzMCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYnVpbGQueG1sCmluZGV4IGFjZDBmNGMuLjQ4OWYwZDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9idWlsZC54bWwKQEAgLTQyLDE2ICs0MiwxNiBAQAogICAgICAgICA8YW50IGRpcj0iZWpiIiB0YXJnZXQ9Im9yYl9pbnRlZ3JhdGlvbiIvPgogICAgICAgICA8cmVjb3JkIG5hbWU9Im9yYl9pbnRlZ3JhdGlvbi5vdXRwdXQiIGFjdGlvbj0ic3RvcCIgLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXBvcnQiPgotICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0X2NvdW50LnNoIiAKKyAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3VsdF9jb3VudC5zaCIKICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmJfaW50ZWdyYXRpb25fcmVzdWx0Q291bnQuc2giIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBvcmJfaW50ZWdyYXRpb24gKEV4ZWN1dGVzIHRoZSBvcmIgaW50ZWdyYXRpb24gdGVzdHMpCisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IG9yYl9pbnRlZ3JhdGlvbiAoRXhlY3V0ZXMgdGhlIG9yYiBpbnRlZ3JhdGlvbiB0ZXN0cykKIAotCTwvZWNobz4KKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jYWxsZmxvdy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jYWxsZmxvdy9idWlsZC54bWwKaW5kZXggMzBiMGQ0Ni4uN2IyMTUyNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2FsbGZsb3cvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NhbGxmbG93L2J1aWxkLnhtbApAQCAtMzcsOSArMzcsOSBAQAogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPHJlY29yZCBuYW1lPSJjYWxsZmxvdy5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiIC8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KLSAgICAgICAgPGFudCBkaXI9InNpbXBsZVNlcnZsZXQiIHRhcmdldD0iYWxsIi8+ICAKLSAgICAgICAgPGFudCBkaXI9InNpbXBsZUpzcCIgdGFyZ2V0PSJhbGwiLz4gIAotCTxhbnRjYWxsIHRhcmdldD0icmVwb3J0Ii8+IAorICAgICAgICA8YW50IGRpcj0ic2ltcGxlU2VydmxldCIgdGFyZ2V0PSJhbGwiLz4KKyAgICAgICAgPGFudCBkaXI9InNpbXBsZUpzcCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJlcG9ydCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAiLz4KICAgICA8L3RhcmdldD4KIApAQCAtNjcsOSArNjcsOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBjYWxsZmxvdyB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBjYWxsZmxvdyB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jYWxsZmxvdy9kYnJlYWRlci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jYWxsZmxvdy9kYnJlYWRlci9XZWJUZXN0LmphdmEKaW5kZXggY2RjNGU1My4uOGVmY2ZjOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2FsbGZsb3cvZGJyZWFkZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NhbGxmbG93L2RicmVhZGVyL1dlYlRlc3QuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAgICAgICAgIHRyeSB7CkBAIC01OSw4ICs1OSw4IEBACiAgICAgICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJDYWxsZmxvdyBEYXRhIDogIitsaW5lKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuIChpbnB1dC5yZWFkTGluZSgpKTsKLSAgICAgICAgfSAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiQ2FsbGZsb3cgRGF0YSA6ICIrbGluZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoaW5wdXQucmVhZExpbmUoKSk7CisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jYWxsZmxvdy9kYnJlYWRlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2FsbGZsb3cvZGJyZWFkZXIvYnVpbGQucHJvcGVydGllcwppbmRleCAwOGJmNjYwLi41OWNkNTYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jYWxsZmxvdy9kYnJlYWRlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NhbGxmbG93L2RicmVhZGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2FsbGZsb3ctZGJyZWFkZXIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQiLz4gCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0Ii8+XHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL2RiUmVhZGVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jYWxsZmxvdy9kYnJlYWRlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jYWxsZmxvdy9kYnJlYWRlci9idWlsZC54bWwKaW5kZXggMjk4M2M1OC4uMjJiNTM2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2FsbGZsb3cvZGJyZWFkZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NhbGxmbG93L2RicmVhZGVyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTUgKzQyLDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01OCw3ICs1OCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2FsbGZsb3cvZGJyZWFkZXIvc2VydmxldC9kYlJlYWRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2FsbGZsb3cvZGJyZWFkZXIvc2VydmxldC9kYlJlYWRlci5qYXZhCmluZGV4IDUyYmU3YmUuLjY5MTljY2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NhbGxmbG93L2RicmVhZGVyL3NlcnZsZXQvZGJSZWFkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jYWxsZmxvdy9kYnJlYWRlci9zZXJ2bGV0L2RiUmVhZGVyLmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAqIEB2ZXJzaW9uCiAgKi8KIHB1YmxpYyBjbGFzcyBkYlJlYWRlciBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICAKKwogICAgIC8qKiBQcm9jZXNzZXMgcmVxdWVzdHMgZm9yIGJvdGggSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IGFuZCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2RzLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC01MywzMCArNTMsMzAgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgX19ERUxFVEUgPSIgZGVsZXRlIGZyb20gIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVRVUVTVF9TVEFSVF9UQkxfX1NFUlZFUiA9ICJSRVFVRVNUX1NUQVJUX1RCTF9fU0VSVkVSIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUlMgPSBSRVFVRVNUX1NUQVJUX1RCTF9fU0VSVkVSOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUVVFU1RfRU5EX1RCTF9fU0VSVkVSID0gIlJFUVVFU1RfRU5EX1RCTF9fU0VSVkVSIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkUgPSBSRVFVRVNUX0VORF9UQkxfX1NFUlZFUjsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRIT0RfU1RBUlRfVEJMX19TRVJWRVIgPSAiTUVUSE9EX1NUQVJUX1RCTF9fU0VSVkVSIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTVMgPSBNRVRIT0RfU1RBUlRfVEJMX19TRVJWRVI7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVUSE9EX0VORF9UQkxfX1NFUlZFUiA9Ik1FVEhPRF9FTkRfVEJMX19TRVJWRVIiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNRSA9IE1FVEhPRF9FTkRfVEJMX19TRVJWRVI7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RBUlRfVElNRV9UQkxfX1NFUlZFUiA9IlNUQVJUX1RJTUVfVEJMX19TRVJWRVIiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVCA9IFNUQVJUX1RJTUVfVEJMX19TRVJWRVI7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5EX1RJTUVfVEJMX19TRVJWRVIgICA9IkVORF9USU1FX1RCTF9fU0VSVkVSIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVQgPSBFTkRfVElNRV9UQkxfX1NFUlZFUjsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBTkQgPSAiIEFORCAiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSSUQgPSAiLlJFUVVFU1RfSUQgIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09NTUEgPSAiLCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVRVUFMID0gIiA9ICI7Ci0gICAgCisKICAgIC8vIG5hbWUgb2YgdGhlIHNlcnZsZXQgd2hvc2UgZGIgdmFsdWUgaXMgdG8gYmUgcXVlcmllZAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTRVJWTEVUX05BTUUgPSAiIjsKLSAgIAorCiAgICAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1JlcXVlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDtjaGFyc2V0PVVURi04Iik7CkBAIC04NiwxMCArODYsMTAgQEAKICAgICAgICAgU3RyaW5nIGNsZWFuZGIgPSByZXF1ZXN0LmdldFBhcmFtZXRlciAoImNsZWFuZGIiKTsKICAgICAgICAgaWYgKGNsZWFuZGIgIT0gbnVsbCl7CiAgICAgICAgICAgICBkZWxldGVSb3dzIChjb24pOwotCSAgICBvdXQucHJpbnRsbiAoIkNsZWFuZWQgcm93cyBmcm9tIGFsbCB0YWJsZXMgaW4gZGIiKTsKKyAgICAgICAgb3V0LnByaW50bG4gKCJDbGVhbmVkIHJvd3MgZnJvbSBhbGwgdGFibGVzIGluIGRiIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgU3RyaW5nIHNlcnZsZXROYW1lID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIgKCJzZXJ2bGV0TmFtZSIpOyAgICAgICAgCisgICAgICAgIFN0cmluZyBzZXJ2bGV0TmFtZSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyICgic2VydmxldE5hbWUiKTsKICAgICAgICAgaWYgKHNlcnZsZXROYW1lID09IG51bGwpewogICAgICAgICAgICAgb3V0LnByaW50bG4gKCIgU3BlY2lmeSBzZXJ2bGV0IG5hbWUgd2hvc2UgZGF0YSBpcyB0byBiZSBsb29rZWQgdXAiKwogICAgICAgICAgICAgICAgICAgICAiIHZpYSBhIHJlcXVlc3QgcGFyYW1ldGVyIG5hbWUgPSIrc2VydmxldE5hbWUpOwpAQCAtMTIyLDE1ICsxMjIsMTUgQEAKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgfQotICAgICAKKwogICAgIHByaXZhdGUgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uICgpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uewotICAgIAorCiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGNvbiA9IGNhbGxmbG93RFMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24gKGV4KTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gY29uOwogICAgIH0KICAgICBwcml2YXRlIFN0cmluZyBnZXRSZXF1ZXN0SWQgKENvbm5lY3Rpb24gY29uICwgU3RyaW5nIHNxbCkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewpAQCAtMTU4LDI0ICsxNTgsMjQgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uIChleCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvdW50OwotICAgICAgICAKKwogICAgIH0KICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvd3MgKENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbnsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgc3RtdC5leGVjdXRlIChfX0RFTEVURSArIFJFUVVFU1RfU1RBUlRfVEJMX19TRVJWRVIpOyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RtdC5leGVjdXRlIChfX0RFTEVURSArIFJFUVVFU1RfU1RBUlRfVEJMX19TRVJWRVIpOwogICAgICAgICAgICAgc3RtdC5leGVjdXRlIChfX0RFTEVURSArIFJFUVVFU1RfRU5EX1RCTF9fU0VSVkVSKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzdG10LmV4ZWN1dGUgKF9fREVMRVRFICsgTUVUSE9EX1NUQVJUX1RCTF9fU0VSVkVSKTsKICAgICAgICAgICAgIHN0bXQuZXhlY3V0ZSAoX19ERUxFVEUgKyBNRVRIT0RfRU5EX1RCTF9fU0VSVkVSKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzdG10LmV4ZWN1dGUgKF9fREVMRVRFICsgU1RBUlRfVElNRV9UQkxfX1NFUlZFUik7CiAgICAgICAgICAgICBzdG10LmV4ZWN1dGUgKF9fREVMRVRFICsgRU5EX1RJTUVfVEJMX19TRVJWRVIpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbiAoZXgpOwogICAgICAgICB9Ci0gICAgfSAgICAKKyAgICB9CiAgICAgLy8gPGVkaXRvci1mb2xkIGRlZmF1bHRzdGF0ZT0iY29sbGFwc2VkIiBkZXNjPSJIdHRwU2VydmxldCBtZXRob2RzLiBDbGljayBvbiB0aGUgKyBzaWduIG9uIHRoZSBsZWZ0IHRvIGVkaXQgdGhlIGNvZGUuIj4KICAgICAvKiogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKQEAgLTE4NSw3ICsxODUsNyBAQAogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9Ci0gICAgCisKICAgICAvKiogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTE5NCw3ICsxOTQsNyBAQAogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9Ci0gICAgCisKICAgICAvKiogUmV0dXJucyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2bGV0LgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmxldEluZm8oKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jYWxsZmxvdy9yZXBvcnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2FsbGZsb3cvcmVwb3J0LnhtbAppbmRleCAxZWMyMTg0Li40YTc4NDdiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jYWxsZmxvdy9yZXBvcnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NhbGxmbG93L3JlcG9ydC54bWwKQEAgLTIzLDcgKzIzLDcgQEAKIDx0YXJnZXQgbmFtZT0icmVwb3J0Ij4KIDxlY2hvIG1lc3NhZ2U9IkNvbXBhcmluZyByZXN1bHRzIHdpdGggZXhwZWN0ZWQgcmVzdWx0cyIvPgogCi0gCisKICAgICA8eHNsdCBzdHlsZT0iJHtzdHlsZXNoZWV0fSIKICAgICAgICAgICAgIGluPSIke3htbGZpbGV9IiBvdXQ9IiR7aHRtbGZpbGV9IgogICAgICAgICAgICAgYmFzZWRpcj0iLiIgZGVzdGRpcj0iLiIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NhbGxmbG93L3NpbXBsZUpzcC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jYWxsZmxvdy9zaW1wbGVKc3AvV2ViVGVzdC5qYXZhCmluZGV4IDQ5MGQwNzkuLjQ0N2ViYzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NhbGxmbG93L3NpbXBsZUpzcC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2FsbGZsb3cvc2ltcGxlSnNwL1dlYlRlc3QuamF2YQpAQCAtMjEsMjIgKzIxLDIyIEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdAogICAgICAgICAgICAgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0gImNhbGxmbG93LXNpbXBsZS1qc3AiOwotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgaG9zdDsKICAgICBwcml2YXRlIFN0cmluZyBwb3J0OwogICAgIHByaXZhdGUgU3RyaW5nIGNvbnRleHRSb290OwotICAgIAorCiAgICAgcHVibGljIFdlYlRlc3QoU3RyaW5nW10gYXJncykgewogICAgICAgICBob3N0ID0gYXJnc1swXTsKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogICAgICAgICB0cnkgewpAQCAtNDUsMTIgKzQ1LDEyIEBACiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkNhbGxmbG93IFNpbXBsZSBKU1AgVGVzdCIpOwogICAgICAgICAgICAgICAgICAgICB3ZWJUZXN0LmFuYWx5c2VSZXN1bHQoYXJnc1s0XSk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfWVsc2UgaWYgKGFyZ3MubGVuZ3RoID09IDQpeyAKKyAgICAgICAgICAgIH1lbHNlIGlmIChhcmdzLmxlbmd0aCA9PSA0KXsKICAgICAgICAgICAgICAgICBpZiAoYXJnc1szXS5lcXVhbHNJZ25vcmVDYXNlICgiY2xlYW4tZGIiKSl7Ci0JCQl3ZWJUZXN0LmNsZWFuZGIgKCk7Ci0JCX0KKyAgICAgICAgICAgIHdlYlRlc3QuY2xlYW5kYiAoKTsKKyAgICAgICAgfQogICAgICAgICAgICAgfWVsc2UKICAgICAgICAgICAgICAgICB3ZWJUZXN0LmRvVGVzdCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTU4LDE3ICs1OCwxNyBAQAogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvaW5jbHVkaW5nLmpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVuZXhwZWN0ZWQgcmV0dXJuIGNvZGU6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpAQCAtNzcsMTkgKzc3LDE5IEBACiAgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKICAgICAgICAgfQotCWNvbm4uZGlzY29ubmVjdCAoKTsKKyAgICBjb25uLmRpc2Nvbm5lY3QgKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgYW5hbHlzZVJlc3VsdChTdHJpbmcgcmVzdWx0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgKyIvZGJSZWFkZXIvZGJSZWFkZXI/c2VydmxldE5hbWU9Y2FsbGZsb3ctc2ltcGxlLWpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFuYWx5c2luZyBSZXN1bHQgLi4uLiBDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwotICAgICAgICAKKwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAKKwogICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVbmV4cGVjdGVkIHJldHVybiBjb2RlOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKQEAgLTk3LDM3ICs5NywzNyBAQAogICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjb25uLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuICgiRXhwZWN0ZWQgUmVzdWx0IDoiICsgcmVzdWx0KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiRXhwZWN0ZWQgUmVzdWx0IDoiICsgcmVzdWx0KTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkFjdHVhbCBSZXN1bHQgICA6IiArIGxpbmUpOwotCSAgICBpZihyZXN1bHQuZXF1YWxzIChsaW5lKSkKLSAgICAgICAgICAgIAlzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7Ci0JICAgIGVsc2UKLQkJc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwkJCisgICAgICAgIGlmKHJlc3VsdC5lcXVhbHMgKGxpbmUpKQorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKKyAgICAgICAgZWxzZQorICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAKICAgICAgICAgfQotCWNvbm4uZGlzY29ubmVjdCAoKTsKKyAgICBjb25uLmRpc2Nvbm5lY3QgKCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgY2xlYW5kYigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICArIi9kYlJlYWRlci9kYlJlYWRlcj9jbGVhbmRiPXRydWUiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGVhbmluZyBEQiAuLi4uIENvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVuZXhwZWN0ZWQgcmV0dXJuIGNvZGU6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjb25uLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuIChsaW5lKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuIChpbnB1dC5yZWFkTGluZSgpKTsKLQl9Ci0JCi0JY29ubi5kaXNjb25uZWN0ICgpOwotICAgIH0gCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAobGluZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoaW5wdXQucmVhZExpbmUoKSk7CisgICAgfQorCisgICAgY29ubi5kaXNjb25uZWN0ICgpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NhbGxmbG93L3NpbXBsZUpzcC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2FsbGZsb3cvc2ltcGxlSnNwL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjU0OTg4My4uNmY5ZDdhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2FsbGZsb3cvc2ltcGxlSnNwL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2FsbGZsb3cvc2ltcGxlSnNwL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2FsbGZsb3ciLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNpbXBsZS1qc3AiLz4gCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zaW1wbGUtanNwIi8+XHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NhbGxmbG93L3NpbXBsZUpzcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jYWxsZmxvdy9zaW1wbGVKc3AvYnVpbGQueG1sCmluZGV4IDYxNDAyY2EuLmVjNTYyNGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NhbGxmbG93L3NpbXBsZUpzcC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2FsbGZsb3cvc2ltcGxlSnNwL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTUgKzQyLDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01OCw3ICs1OCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgICA8amF2YWMKICAgICAgICAgICAgIHNyY2Rpcj0iLiIKQEAgLTc3LDI2ICs3NywyNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICA8dGFyZ2V0IG5hbWU9Imp1c3QtcnVuIj4KLQk8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0LWNhbGxmbG93Ii8+Ci0JPCEtLSA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWRiIi8+IC0tPgotCTxhbnRjYWxsIHRhcmdldD0icnVuIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzdG9wLWNhbGxmbG93Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJydW4tcmVwb3J0Ii8+Ci0JPCEtLSA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWRiIi8+IC0tPgotICAgPC90YXJnZXQ+IAorICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnQtY2FsbGZsb3ciLz4KKyAgICA8IS0tIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tZGIiLz4gLS0+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InN0b3AtY2FsbGZsb3ciLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1yZXBvcnQiLz4KKyAgICA8IS0tIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tZGIiLz4gLS0+CisgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLXJlcG9ydCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgIDxqYXZhYwogICAgICAgICAgICAgc3JjZGlyPSIuIgogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLQk8c2xlZXAgc2Vjb25kcyA9IjEwIi8+CisgICAgPHNsZWVwIHNlY29uZHMgPSIxMCIvPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5wb3J0fSIvPgogICAgICAgICAgIDxhcmcgdmFsdWU9Ii9kYlJlYWRlciIvPgotCSAgPGFyZyB2YWx1ZT0icmVwb3J0Ii8+Ci0JICA8YXJnIHZhbHVlPSIke2V4cGVjdGVkcmVzdWx0fSIvPgorICAgICAgPGFyZyB2YWx1ZT0icmVwb3J0Ii8+CisgICAgICA8YXJnIHZhbHVlPSIke2V4cGVjdGVkcmVzdWx0fSIvPgogICAgICAgICAgIDxjbGFzc3BhdGg+CiAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIuIi8+CkBAIC0xMDksMTIgKzEwOSwxMiBAQAogICAgICAgICAgICAgc3JjZGlyPSIuIgogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLQk8c2xlZXAgc2Vjb25kcyA9IjQiLz4KKyAgICA8c2xlZXAgc2Vjb25kcyA9IjQiLz4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iLz4KICAgICAgICAgICA8YXJnIHZhbHVlPSIvZGJSZWFkZXIiLz4KLQkgIDxhcmcgdmFsdWU9ImNsZWFuLWRiIi8+CisgICAgICA8YXJnIHZhbHVlPSJjbGVhbi1kYiIvPgogICAgICAgICAgIDxjbGFzc3BhdGg+CiAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIuIi8+CkBAIC0xMjIsMjMgKzEyMiwyMyBAQAogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJzdGFydC1jYWxsZmxvdyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iID4KLQkJPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzdGFydC1jYWxsZmxvdy1tb25pdG9yaW5nIi8+Ci0JCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0ic2VydmVyIi8+Ci0JPC9hbnRjYWxsPgotCTxzbGVlcCBzZWNvbmRzPSI1IiAvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIiA+CisgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic3RhcnQtY2FsbGZsb3ctbW9uaXRvcmluZyIvPgorICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9InNlcnZlciIvPgorICAgIDwvYW50Y2FsbD4KKyAgICA8c2xlZXAgc2Vjb25kcz0iNSIgLz4KKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic3RvcC1jYWxsZmxvdyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iID4KLQkJPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzdG9wLWNhbGxmbG93LW1vbml0b3JpbmciLz4KLQkJPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSJzZXJ2ZXIiLz4KLQk8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iID4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzdG9wLWNhbGxmbG93LW1vbml0b3JpbmciLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSJzZXJ2ZXIiLz4KKyAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jYWxsZmxvdy9zaW1wbGVTZXJ2bGV0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NhbGxmbG93L3NpbXBsZVNlcnZsZXQvV2ViVGVzdC5qYXZhCmluZGV4IDU5ZTA1NzcuLjlhYjhlYzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NhbGxmbG93L3NpbXBsZVNlcnZsZXQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NhbGxmbG93L3NpbXBsZVNlcnZsZXQvV2ViVGVzdC5qYXZhCkBAIC0yMSwyMiArMjEsMjIgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0CiAgICAgICAgICAgICA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAiY2FsbGZsb3ctc2ltcGxlLXNlcnZsZXQiOwotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgaG9zdDsKICAgICBwcml2YXRlIFN0cmluZyBwb3J0OwogICAgIHByaXZhdGUgU3RyaW5nIGNvbnRleHRSb290OwotICAgIAorCiAgICAgcHVibGljIFdlYlRlc3QoU3RyaW5nW10gYXJncykgewogICAgICAgICBob3N0ID0gYXJnc1swXTsKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogICAgICAgICB0cnkgewpAQCAtNDUsMTIgKzQ1LDEyIEBACiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkNhbGxmbG93IFNpbXBsZSBTZXJ2bGV0IFRlc3QiKTsKICAgICAgICAgICAgICAgICAgICAgd2ViVGVzdC5hbmFseXNlUmVzdWx0KGFyZ3NbNF0pOwogICAgICAgICAgICAgICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH1lbHNlIGlmIChhcmdzLmxlbmd0aCA9PSA0KXsgCisgICAgICAgICAgICB9ZWxzZSBpZiAoYXJncy5sZW5ndGggPT0gNCl7CiAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbM10uZXF1YWxzSWdub3JlQ2FzZSAoImNsZWFuLWRiIikpewotCQkJd2ViVGVzdC5jbGVhbmRiICgpOwotCQl9CisgICAgICAgICAgICB3ZWJUZXN0LmNsZWFuZGIgKCk7CisgICAgICAgIH0KICAgICAgICAgICAgIH1lbHNlCiAgICAgICAgICAgICAgICAgd2ViVGVzdC5kb1Rlc3QoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC01OCwxNyArNTgsMTcgQEAKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1NpbXBsZVNlcnZsZXQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwotICAgICAgICAKKwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAKKwogICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVbmV4cGVjdGVkIHJldHVybiBjb2RlOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKQEAgLTc3LDE5ICs3NywxOSBAQAogICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7CiAgICAgICAgIH0KLQljb25uLmRpc2Nvbm5lY3QgKCk7CisgICAgY29ubi5kaXNjb25uZWN0ICgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFuYWx5c2VSZXN1bHQoU3RyaW5nIHJlc3VsdCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICsiL2RiUmVhZGVyL2RiUmVhZGVyP3NlcnZsZXROYW1lPWNhbGxmbG93LXNpbXBsZS1zZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQW5hbHlzaW5nIFJlc3VsdCAuLi4uIENvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVuZXhwZWN0ZWQgcmV0dXJuIGNvZGU6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpAQCAtOTcsMzYgKzk3LDM2IEBACiAgICAgICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJFeHBlY3RlZCBSZXN1bHQgOiIgKyByZXN1bHQpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJFeHBlY3RlZCBSZXN1bHQgOiIgKyByZXN1bHQpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiQWN0dWFsIFJlc3VsdCAgIDoiICsgbGluZSk7Ci0JICAgIGlmKHJlc3VsdC5lcXVhbHMgKGxpbmUpKQotICAgICAgICAgICAgCXN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKLQkgICAgZWxzZQotCQlzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CQkKKyAgICAgICAgaWYocmVzdWx0LmVxdWFscyAobGluZSkpCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOworICAgICAgICBlbHNlCisgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKIAogICAgICAgICB9Ci0JY29ubi5kaXNjb25uZWN0ICgpOworICAgIGNvbm4uZGlzY29ubmVjdCAoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBjbGVhbmRiKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICsiL2RiUmVhZGVyL2RiUmVhZGVyP2NsZWFuZGI9dHJ1ZSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsZWFuaW5nIERCIC4uLi4gQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKLSAgICAgICAgCisKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVW5leHBlY3RlZCByZXR1cm4gY29kZTogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4gKGxpbmUpOwotCX0KLQkKLQljb25uLmRpc2Nvbm5lY3QgKCk7Ci0gICAgfSAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuIChsaW5lKTsKKyAgICB9CisKKyAgICBjb25uLmRpc2Nvbm5lY3QgKCk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2FsbGZsb3cvc2ltcGxlU2VydmxldC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2FsbGZsb3cvc2ltcGxlU2VydmxldC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDBjNDNhOTUuLjUyYTRiMzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NhbGxmbG93L3NpbXBsZVNlcnZsZXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jYWxsZmxvdy9zaW1wbGVTZXJ2bGV0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2FsbGZsb3ciLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNpbXBsZS1zZXJ2bGV0Ii8+IAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2ltcGxlLXNlcnZsZXQiLz5cdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2FsbGZsb3cvc2ltcGxlU2VydmxldC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jYWxsZmxvdy9zaW1wbGVTZXJ2bGV0L2J1aWxkLnhtbAppbmRleCA0MGU5YmY2Li5jOWJiZDYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jYWxsZmxvdy9zaW1wbGVTZXJ2bGV0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jYWxsZmxvdy9zaW1wbGVTZXJ2bGV0L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTUgKzQyLDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01OCw3ICs1OCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgICA8amF2YWMKICAgICAgICAgICAgIHNyY2Rpcj0iLiIKQEAgLTc3LDI1ICs3NywyNSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICA8dGFyZ2V0IG5hbWU9Imp1c3QtcnVuIj4KLQk8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0LWNhbGxmbG93Ii8+IAotCTwhLS0gPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1kYiIvPi0tPgotCTxhbnRjYWxsIHRhcmdldD0icnVuIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzdG9wLWNhbGxmbG93Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJydW4tcmVwb3J0Ii8+Ci0gICA8L3RhcmdldD4gCisgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydC1jYWxsZmxvdyIvPgorICAgIDwhLS0gPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1kYiIvPi0tPgorICAgIDxhbnRjYWxsIHRhcmdldD0icnVuIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wLWNhbGxmbG93Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tcmVwb3J0Ii8+CisgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLXJlcG9ydCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgIDxqYXZhYwogICAgICAgICAgICAgc3JjZGlyPSIuIgogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLQk8c2xlZXAgc2Vjb25kcyA9IjQiLz4KKyAgICA8c2xlZXAgc2Vjb25kcyA9IjQiLz4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iLz4KICAgICAgICAgICA8YXJnIHZhbHVlPSIvZGJSZWFkZXIiLz4KLQkgIDxhcmcgdmFsdWU9InJlcG9ydCIvPgotCSAgPGFyZyB2YWx1ZT0iJHtleHBlY3RlZHJlc3VsdH0iLz4KKyAgICAgIDxhcmcgdmFsdWU9InJlcG9ydCIvPgorICAgICAgPGFyZyB2YWx1ZT0iJHtleHBlY3RlZHJlc3VsdH0iLz4KICAgICAgICAgICA8Y2xhc3NwYXRoPgogICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIi8+CiAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iLiIvPgpAQCAtMTA4LDEyICsxMDgsMTIgQEAKICAgICAgICAgICAgIHNyY2Rpcj0iLiIKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0JPHNsZWVwIHNlY29uZHMgPSI0Ii8+CisgICAgPHNsZWVwIHNlY29uZHMgPSI0Ii8+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9Ii8+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iL2RiUmVhZGVyIi8+Ci0JICA8YXJnIHZhbHVlPSJjbGVhbi1kYiIvPgorICAgICAgPGFyZyB2YWx1ZT0iY2xlYW4tZGIiLz4KICAgICAgICAgICA8Y2xhc3NwYXRoPgogICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIi8+CiAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iLiIvPgpAQCAtMTIxLDIyICsxMjEsMjIgQEAKICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0ic3RhcnQtY2FsbGZsb3ciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIiA+Ci0JCTxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic3RhcnQtY2FsbGZsb3ctbW9uaXRvcmluZyIvPgotCQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9InNlcnZlciIvPgotCTwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiIgPgorICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InN0YXJ0LWNhbGxmbG93LW1vbml0b3JpbmciLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSJzZXJ2ZXIiLz4KKyAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InN0b3AtY2FsbGZsb3ciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIiA+Ci0JCTxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic3RvcC1jYWxsZmxvdy1tb25pdG9yaW5nIi8+Ci0JCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0ic2VydmVyIi8+Ci0JPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIiA+CisgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic3RvcC1jYWxsZmxvdy1tb25pdG9yaW5nIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0ic2VydmVyIi8+CisgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2FsbGZsb3cvc2ltcGxlU2VydmxldC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jYWxsZmxvdy9zaW1wbGVTZXJ2bGV0L2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA5NTI1YjhiLi4wMmQ5ZGRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jYWxsZmxvdy9zaW1wbGVTZXJ2bGV0L2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jYWxsZmxvdy9zaW1wbGVTZXJ2bGV0L2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMTIgKzIyLDEyIEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TaW1wbGVTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPlNpbXBsZVNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TaW1wbGVTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2ltcGxlU2VydmxldDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jYWxsZmxvdy9zaW1wbGVTZXJ2bGV0L3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2FsbGZsb3cvc2ltcGxlU2VydmxldC9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQppbmRleCBiYjUzYWQyLi5iNjZmMDVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jYWxsZmxvdy9zaW1wbGVTZXJ2bGV0L3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NhbGxmbG93L3NpbXBsZVNlcnZsZXQvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogCiBwdWJsaWMgY2xhc3MgU2ltcGxlU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2xhc3Nsb2FkZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2xhc3Nsb2FkZXIvYnVpbGQueG1sCmluZGV4IDUyNjkzOGIuLjNmZTExYzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NsYXNzbG9hZGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbGFzc2xvYWRlci9idWlsZC54bWwKQEAgLTM5LDggKzM5LDggQEAKIAogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+IFVzYWdlOgotCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGNsYXNzbG9hZGVyIGRldnRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4gVXNhZ2U6CisgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgY2xhc3Nsb2FkZXIgZGV2dGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2xhc3Nsb2FkZXIvc2VydmxldC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2xhc3Nsb2FkZXIvc2VydmxldC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDJkYzYwY2YuLmQ1YjJiMWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NsYXNzbG9hZGVyL3NlcnZsZXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbGFzc2xvYWRlci9zZXJ2bGV0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1ib29rc3RvcmUiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWJvb2tzdG9yZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9ImJvb2tzdG9yZTMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NsYXNzbG9hZGVyL3NlcnZsZXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2xhc3Nsb2FkZXIvc2VydmxldC9idWlsZC54bWwKaW5kZXggNzI2NGQwNS4uMzBkNTZlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2xhc3Nsb2FkZXIvc2VydmxldC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2xhc3Nsb2FkZXIvc2VydmxldC9idWlsZC54bWwKQEAgLTMwLDEzICszMCwxMyBAQAogICAgICZjb21tb25CdWlsZDsKICAgICAmY29tbW9uUnVuOwogICAgICZ0ZXN0cHJvcGVydGllczsKLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxzZXR1cCxkZXBsb3ktd2FyLHJ1bi13YXIsIHVuc2V0dXAiLz4KICAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0IiBkZXBlbmRzPSJidWlsZCxkZXBsb3ktd2FyLHJ1bi13YXIsdW5kZXBsb3ktd2FyIi8+CiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfJHtkYi50eXBlfS5zcWwiLz4KQEAgLTQ0LDIyICs0NCwyMiBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamRiYy1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9IndlYi1ib29rc3RvcmUtcG9vbCIvPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL0Jvb2tEQiIvPgotICAgICAgPC9hbnRjYWxsPiAgICAKKyAgICAgIDwvYW50Y2FsbD4KIAogCiAgICAgICA8ZWNobyBtZXNzYWdlPSJjb3B5aW5nIGZvb2xpYi5qYXIgdG8gZG9tYWluJ3MgbGliL2FwcGxpYnMiLz4KICAgICAgIDxjb3B5IGZpbGU9ImxpYi9mb29saWIuamFyIiB0b2Rpcj0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vbGliL2FwcGxpYnMiLz4KIAogCi0gICAgPC90YXJnZXQ+ICAgCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InNxbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV8ke2RiLnR5cGV9LnNxbCIvPgogICAgIDwvYW50Y2FsbD4KLSAgICAKKwogICAgIDwvdGFyZ2V0PgotICAKKwogCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgpAQCAtNzIsMjcgKzcyLDI3IEBACiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAgICAgPGRlbGV0ZSBmaWxlPSIke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9saWIvYXBwbGlicy9mb29saWIuamFyIi8+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic3JjIi8+Ci0gICAgICAgIDwvYW50Y2FsbD4gICAgICAgIAorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAotICAgIDxwcm9wZXJ0eSBuYW1lPSJ0bGRzLWV4aXN0IiB2YWx1ZT0ieWVzIi8+IAorICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KKyAgICA8cHJvcGVydHkgbmFtZT0idGxkcy1leGlzdCIgdmFsdWU9InllcyIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29weS10bGRzIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb3B5LXRhZ2ZpbGVzIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAotICAgIDwvYW50Y2FsbD4gICAgICAgCi0gICAgCisgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KKyAgICA8L2FudGNhbGw+CisKICAgIDwhLS0gPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIi8+LS0+Ci0gICAgCi0gICAgPC90YXJnZXQ+IAotICAgIAorCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC0xMDksMjAgKzEwOSwyMCBAQAogICAgICAgICAgICAgPGFyZyBsaW5lPSItLWxpYnJhcmllcyBmb29saWIuamFyIi8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KICAgICAgICAgPC9leGVjPgotICAgIDwvdGFyZ2V0PiAgICAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktZWFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktd2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4td2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViY2xpZW50LWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9ImpzdGwtc2VydmxldCAoc3RhbmQtYWxvbmUgd2FyIGJhc2VkKSIvPgotCTwvYW50Y2FsbD4KKyAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0ianN0bC1zZXJ2bGV0IChzdGFuZC1hbG9uZSB3YXIgYmFzZWQpIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbGFzc2xvYWRlci9zZXJ2bGV0L3NxbC9jcmVhdGVfZGVyYnkuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2xhc3Nsb2FkZXIvc2VydmxldC9zcWwvY3JlYXRlX2RlcmJ5LnNxbAppbmRleCBhNGVjNmM5Li5hMDJiNTkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbGFzc2xvYWRlci9zZXJ2bGV0L3NxbC9jcmVhdGVfZGVyYnkuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NsYXNzbG9hZGVyL3NlcnZsZXQvc3FsL2NyZWF0ZV9kZXJieS5zcWwKQEAgLTEsMTMgKzEsMTMgQEAKIERST1AgVEFCTEUgYm9va3M7CiAKIENSRUFURSBUQUJMRSBib29rcyAoCi0JSUQgVkFSQ0hBUig4KSwKLQlTVVJOQU1FIFZBUkNIQVIoMjQpLAotCUZJUlNUX05BTUUgVkFSQ0hBUigyNCksCi0JVElUTEUgVkFSQ0hBUig5NiksCi0JUFJJQ0UgRkxPQVQsCi0JWUVBUjEgCQlJTlRFR0VSCQlOT1QgTlVMTCwKKyAgICBJRCBWQVJDSEFSKDgpLAorICAgIFNVUk5BTUUgVkFSQ0hBUigyNCksCisgICAgRklSU1RfTkFNRSBWQVJDSEFSKDI0KSwKKyAgICBUSVRMRSBWQVJDSEFSKDk2KSwKKyAgICBQUklDRSBGTE9BVCwKKyAgICBZRUFSMSAgICAgICAgIElOVEVHRVIgICAgICAgIE5PVCBOVUxMLAogICAgICAgICBERVNDUklQVElPTiBWQVJDSEFSKDMwKSwKLQlJTlZFTlRPUlkgSU5URUdFUiBOT1QgTlVMTAorICAgIElOVkVOVE9SWSBJTlRFR0VSIE5PVCBOVUxMCiApOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbGFzc2xvYWRlci9zZXJ2bGV0L3NyYy9tZXNzYWdlcy9Cb29rc3RvcmVNZXNzYWdlcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2xhc3Nsb2FkZXIvc2VydmxldC9zcmMvbWVzc2FnZXMvQm9va3N0b3JlTWVzc2FnZXMuamF2YQppbmRleCAzYjE4MTdlLi41ZjU4ZTczIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbGFzc2xvYWRlci9zZXJ2bGV0L3NyYy9tZXNzYWdlcy9Cb29rc3RvcmVNZXNzYWdlcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NsYXNzbG9hZGVyL3NlcnZsZXQvc3JjL21lc3NhZ2VzL0Jvb2tzdG9yZU1lc3NhZ2VzLmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgeyAiVGl0bGVDYXNoaWVyIiwgIkNhc2hpZXIiIH0sCiAgICAgICAgIHsgIlRpdGxlQm9va0Rlc2NyaXB0aW9uIiwgIkJvb2sgRGVzY3JpcHRpb24iIH0sCiAgICAgICAgIHsgIlZpc2l0b3IiLCAiWW91IGFyZSB2aXNpdG9yIG51bWJlciAiIH0sCi0gICAgICAgIAorCiAgICAgICAgIHsgIldoYXQiLCAiV2hhdCBXZVwncmUgUmVhZGluZyIgfSwKICAgICAgICAgewogICAgICAgICAgICAgIlRhbGsiLApAQCAtNzksMTQgKzc5LDE0IEBACiAgICAgICAgICAgICAiWW91ciBvcmRlciBjb3VsZCBub3QgYmUgY29tcGxldGVkIGR1ZSB0byBpbnN1ZmZpY2llbnQgaW52ZW50b3J5LiIKICAgICAgICAgfSwKICAgICAgICAgeyAiV2l0aCIsICJXaXRoIiB9LAotICAgICAgICAKKwogICAgICAgICB7ICJTaGlwcGluZyIsICJTaGlwcGluZzoiIH0sCiAgICAgICAgIHsgIlF1aWNrU2hpcCIsICJRdWljayBTaGlwcGluZyIgfSwKICAgICAgICAgeyAiTm9ybWFsU2hpcCIsICJOb3JtYWwgU2hpcHBpbmciIH0sCiAgICAgICAgIHsgIlNhdmVyU2hpcCIsICJTYXZlciBTaGlwcGluZyIgfSwKICAgICAgICAgeyAiU2hpcERhdGUiLCAiWW91ciBvcmRlciB3aWxsIGJlIHNoaXBwZWQgb24gIiB9LAogICAgICAgICB7ICJTaGlwRGF0ZUxDIiwgInlvdXIgb3JkZXIgd2lsbCBiZSBzaGlwcGVkIG9uICIgfSwKLSAgICAgICAgCisKICAgICAgICAgeyAiQ29uZmlybUFkZCIsICJZb3UganVzdCBhZGRlZCBcInswfVwiIHRvIHlvdXIgc2hvcHBpbmcgY2FydCIgfSwKICAgICAgICAgeyAiQ29uZmlybVJlbW92ZSIsICJZb3UganVzdCByZW1vdmVkIFwiezB9XCIgZnJvbSB5b3VyIHNob3BwaW5nIGNhcnQiIH0sCiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NsYXNzbG9hZGVyL3NlcnZsZXQvc3JjL21lc3NhZ2VzL0Jvb2tzdG9yZU1lc3NhZ2VzX2RlX0RFLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbGFzc2xvYWRlci9zZXJ2bGV0L3NyYy9tZXNzYWdlcy9Cb29rc3RvcmVNZXNzYWdlc19kZV9ERS5qYXZhCmluZGV4IGU4ZjdmNDEuLjFhOGFhMTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NsYXNzbG9hZGVyL3NlcnZsZXQvc3JjL21lc3NhZ2VzL0Jvb2tzdG9yZU1lc3NhZ2VzX2RlX0RFLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2xhc3Nsb2FkZXIvc2VydmxldC9zcmMvbWVzc2FnZXMvQm9va3N0b3JlTWVzc2FnZXNfZGVfREUuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogICAgICAgICB7ICJUaXRsZUNhc2hpZXIiLCAiS2Fzc2UiIH0sCiAgICAgICAgIHsgIlRpdGxlQm9va0Rlc2NyaXB0aW9uIiwgIkJ1Y2hiZXNjaHJlaWJ1bmciIH0sCiAgICAgICAgIHsgIlZpc2l0b3IiLCAiU2llIHNpbmQgQmVzdWNoZXIgTnVtbWVyICIgfSwKLSAgICAgICAgCisKICAgICAgICAgeyAiV2hhdCIsICJXYXMgd2lyIGdlcmFkZSBsZXNlbiIgfSwKICAgICAgICAgewogICAgICAgICAgICAgIlRhbGsiLApAQCAtNzksMTQgKzc5LDE0IEBACiAgICAgICAgICAgICAiSWhyZSBCZXN0ZWxsdW5nIGtvbm50ZSBhdWZncnVuZCB1bnp1cmVpY2hlbmRlbiBJbnZlbnRhcnMgbmljaHQgYXVzZ2VmdWVocnQgd2VyZGVuLiIKICAgICAgICAgfSwKICAgICAgICAgeyAiV2l0aCIsICJNaXQiIH0sCi0gICAgICAgIAorCiAgICAgICAgIHsgIlNoaXBwaW5nIiwgIlZlcnNhbmQ6IiB9LAogICAgICAgICB7ICJRdWlja1NoaXAiLCAiU2NobmVsbHZlcnNhbmQiIH0sCiAgICAgICAgIHsgIk5vcm1hbFNoaXAiLCAiTm9ybWFsdmVyc2FuZCIgfSwKICAgICAgICAgeyAiU2F2ZXJTaGlwIiwgIlNwYXItT3B0aW9uIFZlcnNhbmQiIH0sCiAgICAgICAgIHsgIlNoaXBEYXRlIiwgIklocmUgU2VuZHVuZyB3aXJkIGdlbGllZmVydCBhbSAiIH0sCiAgICAgICAgIHsgIlNoaXBEYXRlTEMiLCAiaWhyZSBzZW5kdW5nIHdpcmQgZ2VsaWVmZXJ0IGFtICIgfSwKLSAgICAgICAgCisKICAgICAgICAgeyAiQ29uZmlybUFkZCIsICJTaWUgaGFiZW4gZ2VyYWRlIFwiezB9XCIgaW4gSWhyZW4gRWlua2F1ZnN3YWdlbiBnZWxlZ3QiIH0sCiAgICAgICAgIHsKICAgICAgICAgICAgICJDb25maXJtUmVtb3ZlIiwKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NsYXNzbG9hZGVyL3NlcnZsZXQvc3JjL21lc3NhZ2VzL0Jvb2tzdG9yZU1lc3NhZ2VzX2VuX1VTLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbGFzc2xvYWRlci9zZXJ2bGV0L3NyYy9tZXNzYWdlcy9Cb29rc3RvcmVNZXNzYWdlc19lbl9VUy5qYXZhCmluZGV4IDlkOTY1YmQuLmE1NDNkYWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NsYXNzbG9hZGVyL3NlcnZsZXQvc3JjL21lc3NhZ2VzL0Jvb2tzdG9yZU1lc3NhZ2VzX2VuX1VTLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2xhc3Nsb2FkZXIvc2VydmxldC9zcmMvbWVzc2FnZXMvQm9va3N0b3JlTWVzc2FnZXNfZW5fVVMuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogICAgICAgICB7ICJUaXRsZUNhc2hpZXIiLCAiQ2FzaGllciIgfSwKICAgICAgICAgeyAiVGl0bGVCb29rRGVzY3JpcHRpb24iLCAiQm9vayBEZXNjcmlwdGlvbiIgfSwKICAgICAgICAgeyAiVmlzaXRvciIsICJZb3UgYXJlIHZpc2l0b3IgbnVtYmVyICIgfSwKLSAgICAgICAgCisKICAgICAgICAgeyAiV2hhdCIsICJXaGF0IFdlXCdyZSBSZWFkaW5nIiB9LAogICAgICAgICB7CiAgICAgICAgICAgICAiVGFsayIsCkBAIC03OSwxNCArNzksMTQgQEAKICAgICAgICAgICAgICJZb3VyIG9yZGVyIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgZHVlIHRvIGluc3VmZmljaWVudCBpbnZlbnRvcnkuIgogICAgICAgICB9LAogICAgICAgICB7ICJXaXRoIiwgIldpdGgiIH0sCi0gICAgICAgIAorCiAgICAgICAgIHsgIlNoaXBwaW5nIiwgIlNoaXBwaW5nOiIgfSwKICAgICAgICAgeyAiUXVpY2tTaGlwIiwgIlF1aWNrIFNoaXBwaW5nIiB9LAogICAgICAgICB7ICJOb3JtYWxTaGlwIiwgIk5vcm1hbCBTaGlwcGluZyIgfSwKICAgICAgICAgeyAiU2F2ZXJTaGlwIiwgIlNhdmVyIFNoaXBwaW5nIiB9LAogICAgICAgICB7ICJTaGlwRGF0ZSIsICJZb3VyIG9yZGVyIHdpbGwgYmUgc2hpcHBlZCBvbiAiIH0sCiAgICAgICAgIHsgIlNoaXBEYXRlTEMiLCAieW91ciBvcmRlciB3aWxsIGJlIHNoaXBwZWQgb24gIiB9LAotICAgICAgICAKKwogICAgICAgICB7ICJDb25maXJtQWRkIiwgIllvdSBqdXN0IGFkZGVkIFwiezB9XCIgdG8geW91ciBzaG9wcGluZyBjYXJ0IiB9LAogICAgICAgICB7ICJDb25maXJtUmVtb3ZlIiwgIllvdSBqdXN0IHJlbW92ZWQgXCJ7MH1cIiBmcm9tIHlvdXIgc2hvcHBpbmcgY2FydCIgfSwKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2xhc3Nsb2FkZXIvc2VydmxldC9zcmMvbWVzc2FnZXMvQm9va3N0b3JlTWVzc2FnZXNfZXNfTVguamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NsYXNzbG9hZGVyL3NlcnZsZXQvc3JjL21lc3NhZ2VzL0Jvb2tzdG9yZU1lc3NhZ2VzX2VzX01YLmphdmEKaW5kZXggYWM0YzYxZC4uODNkZjQ3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2xhc3Nsb2FkZXIvc2VydmxldC9zcmMvbWVzc2FnZXMvQm9va3N0b3JlTWVzc2FnZXNfZXNfTVguamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbGFzc2xvYWRlci9zZXJ2bGV0L3NyYy9tZXNzYWdlcy9Cb29rc3RvcmVNZXNzYWdlc19lc19NWC5qYXZhCkBAIC04MCw3ICs4MCw3IEBACiAgICAgICAgIHsgIkNhdGFsb2ciLCAiVm9sdmVyIGFsIENhdCIgKyAiXHUwMGUxIiArICJsb2dvIiB9LAogICAgICAgICB7ICJUaGFua1lvdSIsICJHcmFjaWFzIHBvciBzdSBjb21wcmEgIiB9LAogICAgICAgICB7ICJUaGFua1lvdVBhcmFtIiwgIkdyYWNpYXMsIHswfSBwb3IgY29tcHJhciBzdXMgbGlicm9zIGFxdWkiIH0sCi0gICAgICAgIAorCiAgICAgICAgIHsgIk9yZGVyRXJyb3IiLCAiTm8gc2UgcHVkbyBjb21wbGV0YXIgc3UgcGVkaWRvIGRlYmlkbyBhIGVzY2FzZXogZGUgaW52ZW50YXJpby4iIH0sCiAgICAgICAgIHsgIldpdGgiLCAiQ29uIiB9LAogICAgICAgICB7ICJTaGlwcGluZyIsICJFbnYiICsgIlx1MDBlZCIgKyAibzoiIH0sCkBAIC05NCw0NiArOTQsNDYgQEAKICAgICAgICAgICAgICJBY2FiYSBkZSBhIiArICJcdTAwZjEiICsgImFkaXIgXCJ7MH1cIiBhIHN1IGNlc3RhIGRlIGNvbXByYXMiCiAgICAgICAgIH0sCiAgICAgICAgIHsgIkNvbmZpcm1SZW1vdmUiLCAiQWNhYmEgZGUgc2FjYXIgXCJ7MH1cIiBkZSBzdSBjZXN0YSBkZSBjb21wcmFzIiB9LAotICAgICAgICAKKwogICAgICAgICB7CiAgICAgICAgICAgICAiQ2FydEl0ZW1Db3VudCIsCi0gICAgICAgICAgICAKKwogICAgICAgICAgICAgIlN1IGNlc3RhIGRlIGNvbXByYXMgY29udGllbmUgIiArICJ7MCxjaG9pY2UsMCNuaW5nIiArICJcdTAwZmEiICsKICAgICAgICAgICAgICJuIGFydGljdWxvfDEjdW4gYXJ0aWN1bG98MTwgezB9IGFydGljdWxvc30iCiAgICAgICAgIH0sCi0gICAgICAgIAorCiAgICAgICAgIHsKICAgICAgICAgICAgICJOZXdzbGV0dGVycyIsCiAgICAgICAgICAgICAiU3VzY3JpcGNpIiArICJcdTAwZjMiICsgIm4gZ3JhdHVpdGEgYSBudWVzdHJvIGJvbGV0IiArICJcdTAwZWQiICsKICAgICAgICAgICAgICJuOiIKICAgICAgICAgfSwKLSAgICAgICAgCisKICAgICAgICAgeyAiVGhhbmtzTXNnIiwgIkdyYWNpYXMuIFBvciBmYXZvciBjbGlxdWVlIGFxdWkgcGFyYSBjb21wcmFyIHN1cyBsaWJyb3MuIiB9LAotICAgICAgICAKKwogICAgICAgICB7CiAgICAgICAgICAgICAiRHVrZUZhbkNsdWIiLAogICAgICAgICAgICAgIkRlc2VhciIgKyAiXHUwMGVkIiArCiAgICAgICAgICAgICAiYSBoYWNlcm1lIG1pZW1icm8gZGVsIER1a2UgRmFuIENsdWIgZ3JhdHVpdGFtZW50ZSBjb24gbWkgY29tcHJhIGRlIG1hcyBkZSAxMDAiICsKICAgICAgICAgICAgICJcdTIwYTAiCiAgICAgICAgIH0sCi0gICAgICAgIAorCiAgICAgICAgIHsgIlVwZGF0ZVF1YW50aXRpZXMiLCAiQWN0dWFsaWNlIGxhcyBjYW50aWRhZGVzIiB9LAotICAgICAgICAKKwogICAgICAgICB7CiAgICAgICAgICAgICAiUXVhbnRpdGllc1VwZGF0ZWQiLAogICAgICAgICAgICAgIkFjYWJhIGRlIGFjdHVhbGl6YXIgbGFzIGNhbnRpZGFkZXMgZW4gc3UgY2VzdGEgZGUgY29tcHJhcyIKICAgICAgICAgfSwKLSAgICAgICAgCisKICAgICAgICAgeyAiUXVhbnRpdGllcyIsICJDb3BpYXMgZGVsIGxpYnJvIGVuIHN1IGNlc3RhIGRlIGNvbXByYXMiIH0sCi0gICAgICAgIAorCiAgICAgICAgIHsgIkNob29zZUxvY2FsZSIsICJFbGlqYSBzdSBJZGlvbWEgZW4gZWwgTWFwYSIgfSwKLSAgICAgICAgCisKICAgICAgICAgeyAiRW5nbGlzaCIsICJpbmdsIiArICJcdTAwZTkiICsgInMiIH0sCi0gICAgICAgIAorCiAgICAgICAgIHsgIkdlcm1hbiIsICJhbCIgKyAiXHUwMGU5IiArICJtYW4iIH0sCi0gICAgICAgIAorCiAgICAgICAgIHsgIlNwYW5pc2giLCAiZXNwYSIgKyAiXHUwMGYxIiArICJvbCIgfSwKLSAgICAgICAgCisKICAgICAgICAgeyAiRnJlbmNoIiwgImZyYW5jIiArICJcdTAwZTkiICsgImVzIiB9LAogICAgICAgICB7ICJDdXN0b21lckluZm8iLCAiSW5jb3Jwb3JlIHN1IGluZm9ybWFjaSIgKyAiXHUwMGYzIiArCiAgICAgICAgICAgICAibiBlbiBsYSBmb3JtYS4iIH0sCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbGFzc2xvYWRlci9zZXJ2bGV0L3NyYy90ZW1wbGF0ZS9JbnNlcnRUYWcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NsYXNzbG9hZGVyL3NlcnZsZXQvc3JjL3RlbXBsYXRlL0luc2VydFRhZy5qYXZhCmluZGV4IDMwYzY3YzYuLjYxMzllNjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NsYXNzbG9hZGVyL3NlcnZsZXQvc3JjL3RlbXBsYXRlL0luc2VydFRhZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NsYXNzbG9hZGVyL3NlcnZsZXQvc3JjL3RlbXBsYXRlL0luc2VydFRhZy5qYXZhCkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgICAgICAgICAgY29udGV4dC5nZXRPdXQoKQogICAgICAgICAgICAgICAgICAgICAgICAucHJpbnQocGFyYW1ldGVyLmdldFZhbHVlKCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gaWYgcGFyYW1ldGVyIGlzIGluZGlyZWN0LCBpbmNsdWRlIHJlc3VsdHMgb2YgZGlzcGF0Y2hpbmcgdG8gcGFnZSAKKyAgICAgICAgICAgIC8vIGlmIHBhcmFtZXRlciBpcyBpbmRpcmVjdCwgaW5jbHVkZSByZXN1bHRzIG9mIGRpc3BhdGNoaW5nIHRvIHBhZ2UKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGlmICgocGFyYW1ldGVyICE9IG51bGwpICYmIChwYXJhbWV0ZXIuZ2V0VmFsdWUoKSAhPSBudWxsKSkgewogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmluY2x1ZGUocGFyYW1ldGVyLmdldFZhbHVlKCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2xhc3Nsb2FkZXIvc3RhdGVsZXNzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NsYXNzbG9hZGVyL3N0YXRlbGVzcy9idWlsZC54bWwKaW5kZXggYWU3MmNlMS4uMWJjOTBhMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2xhc3Nsb2FkZXIvc3RhdGVsZXNzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbGFzc2xvYWRlci9zdGF0ZWxlc3MvYnVpbGQueG1sCkBAIC04MiwxNiArODIsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPiBVc2FnZToKLQkJYW50IGNvbnZlcnRlciAoRXhlY3V0ZXMgdGhlIGNvbnZlcnRlciB0ZXN0cykKLQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamIgc2Vzc2lvbiBzdGF0ZWxlc3MgdGVzdHMpCi0JCWFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgZWpiIHNlc3Npb24gc3RhdGVsZXNzIHRlc3RzKQotCQlhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGVqYiBzZXNzaW9uIHN0YXRlbGVzcyB0ZXN0cykKLQkJYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIHN0YXRlbGVzcyB0ZXN0cykKLQkJYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIGVqYiBzZXNzaW9uIHN0YXRlbGVzcyBhcHBzKQotCQlhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGVqYiBzZXNzaW9uIHN0YXRlbGVzcyB0ZXN0cykKLQkJYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSBzZXNzaW9uIHN0YXRlbGVzcyBhcHBzKQotCQlhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIHN0YXRlbGVzcyB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+IFVzYWdlOgorICAgICAgICBhbnQgY29udmVydGVyIChFeGVjdXRlcyB0aGUgY29udmVydGVyIHRlc3RzKQorICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYiBzZXNzaW9uIHN0YXRlbGVzcyB0ZXN0cykKKyAgICAgICAgYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBlamIgc2Vzc2lvbiBzdGF0ZWxlc3MgdGVzdHMpCisgICAgICAgIGFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgZWpiIHNlc3Npb24gc3RhdGVsZXNzIHRlc3RzKQorICAgICAgICBhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3Igc3RhdGVsZXNzIHRlc3RzKQorICAgICAgICBhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgZWpiIHNlc3Npb24gc3RhdGVsZXNzIGFwcHMpCisgICAgICAgIGFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgZWpiIHNlc3Npb24gc3RhdGVsZXNzIHRlc3RzKQorICAgICAgICBhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlIHNlc3Npb24gc3RhdGVsZXNzIGFwcHMpCisgICAgICAgIGFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3Igc3RhdGVsZXNzIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NsYXNzbG9hZGVyL3N0YXRlbGVzcy9jb252ZXJ0ZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NsYXNzbG9hZGVyL3N0YXRlbGVzcy9jb252ZXJ0ZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBlYWE0YjdjLi5mMjBjNjk5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbGFzc2xvYWRlci9zdGF0ZWxlc3MvY29udmVydGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2xhc3Nsb2FkZXIvc3RhdGVsZXNzL2NvbnZlcnRlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyOCArMTUsMjggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1zdGF0ZWxlc3MiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNvbnZlcnRlciIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY29udmVydGVyIi8+ICAgICAgICBcdTAwMjAKIAotPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiAKLQl2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCi08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgCi0JdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSJcdTAwMjAKKyAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIlx1MDAyMAorICAgIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+ICAgICAgICBcdTAwMjAKIAotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iY29tLnN1bi5zMXBlcWUuZWpiLnN0YXRlbGVzcy5jb252ZXJ0ZXIuY2xpZW50LkNvbnZlcnRlckNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJjb20uc3VuLnMxcGVxZS5lamIuc3RhdGVsZXNzLmNvbnZlcnRlci5jbGllbnQuQ29udmVydGVyQ2xpZW50Ii8+CiAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogCiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogCkBAIC00NSw4ICs0NSw4IEBACiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDwhLS0KIDxwcm9wZXJ0eSBuYW1lPSJqbmRpLm5hbWUiIHZhbHVlPSJjb252ZXJ0ZXIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJwcm92aWRlci51cmwiIHZhbHVlPSJpaW9wOi8vbG9jYWxob3N0OiR7b3JiLnBvcnR9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2UubmFtaW5nLlNlcmlhbEluaXRDb250ZXh0RmFjdG9yeSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IiB2YWx1ZT0iY29tLnN1bi5qbmRpLmNvc25hbWluZy5DTkN0eEZhY3RvcnkiLz4gCis8cHJvcGVydHkgbmFtZT0icHJvdmlkZXIudXJsIiB2YWx1ZT0iaWlvcDovL2xvY2FsaG9zdDoke29yYi5wb3J0fSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2UubmFtaW5nLlNlcmlhbEluaXRDb250ZXh0RmFjdG9yeSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiIHZhbHVlPSJjb20uc3VuLmpuZGkuY29zbmFtaW5nLkNOQ3R4RmFjdG9yeSIvPlx1MDAyMAogLS0+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NsYXNzbG9hZGVyL3N0YXRlbGVzcy9jb252ZXJ0ZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2xhc3Nsb2FkZXIvc3RhdGVsZXNzL2NvbnZlcnRlci9idWlsZC54bWwKaW5kZXggZmYwZGFmMy4uMzQ3ZTJjOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2xhc3Nsb2FkZXIvc3RhdGVsZXNzL2NvbnZlcnRlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2xhc3Nsb2FkZXIvc3RhdGVsZXNzL2NvbnZlcnRlci9idWlsZC54bWwKQEAgLTU3LDcgKzU3LDcgQEAKICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJzcWUtdGltZXItcG9vbCIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTY5LDggKzY5LDggQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8IS0tIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPiAtLT4KICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95ZWQuYXBwIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIi8+CkBAIC04Nyw3ICs4Nyw3IEBACiAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveW1lbnQgb24gdGFyZ2V0IHNlcnZlciAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSBzdWNjZXNzZnVsIi8+CiAKICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1zdGFuZGFsb25lLWNsaWVudCIvPgpAQCAtOTksMjcgKzk5LDI3IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4tc3RhbmRhbG9uZS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImpuZGkubmFtZSIgdmFsdWU9ImNvbnZlcnRlciIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0icHJvdmlkZXIudXJsIiB2YWx1ZT0iaWlvcDovLyR7YWRtaW4uaG9zdH06JHtvcmIucG9ydH0iLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiIAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIKICAgICAgICAgICAgIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2UubmFtaW5nLlNlcmlhbEluaXRDb250ZXh0RmFjdG9yeSIvPgogPCEtLQotCTxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IiAKLSAgICAgICAgICAgIAl2YWx1ZT0ib3JnLmdsYXNzZmlzaC5qbmRpLmNvc25hbWluZy5DTkN0eEZhY3RvcnkiLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIKKyAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmdsYXNzZmlzaC5qbmRpLmNvc25hbWluZy5DTkN0eEZhY3RvcnkiLz4KIC0tPgotCTxlY2hvIG1lc3NhZ2U9InByb3ZpZGVyLnVybCB1c2VkIGlzICR7cHJvdmlkZXIudXJsfSIvPgorICAgIDxlY2hvIG1lc3NhZ2U9InByb3ZpZGVyLnVybCB1c2VkIGlzICR7cHJvdmlkZXIudXJsfSIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSIke3Rlc3QuY2xpZW50fSIKICAgICAgICAgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH06JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIgogICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIgZm9yaz0idHJ1ZSI+Ci0JPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxIb3N0PSR7YWRtaW4uaG9zdH0iLz4KLQk8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iLz4KKyAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbEhvc3Q9JHthZG1pbi5ob3N0fSIvPgorICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydD0ke29yYi5wb3J0fSIvPgogICAgICAgICA8YXJnIHZhbHVlPSIke3Byb3ZpZGVyLnVybH0iLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjdHhmYWN0b3J5fSIvPgogICAgICAgICA8YXJnIHZhbHVlPSIke2puZGkubmFtZX0iLz4KICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2xhc3Nsb2FkZXIvc3RhdGVsZXNzL2NvbnZlcnRlci9jbGllbnQvQ29udmVydGVyQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbGFzc2xvYWRlci9zdGF0ZWxlc3MvY29udmVydGVyL2NsaWVudC9Db252ZXJ0ZXJDbGllbnQuamF2YQppbmRleCA3NWRiNzhlLi45NDMwYzVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbGFzc2xvYWRlci9zdGF0ZWxlc3MvY29udmVydGVyL2NsaWVudC9Db252ZXJ0ZXJDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbGFzc2xvYWRlci9zdGF0ZWxlc3MvY29udmVydGVyL2NsaWVudC9Db252ZXJ0ZXJDbGllbnQuamF2YQpAQCAtMjcsNDIgKzI3LDQyIEBACiAKIHB1YmxpYyBjbGFzcyBDb252ZXJ0ZXJDbGllbnQgewogCi0gICAgcHJpdmF0ZSBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgQ29udmVydGVyQ2xpZW50KCkgewogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQlDb252ZXJ0ZXJDbGllbnQgY2xpZW50ID0gbmV3IENvbnZlcnRlckNsaWVudCgpOwotCWNsaWVudC5ydW4oYXJncyk7CisgICAgQ29udmVydGVyQ2xpZW50IGNsaWVudCA9IG5ldyBDb252ZXJ0ZXJDbGllbnQoKTsKKyAgICBjbGllbnQucnVuKGFyZ3MpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBydW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBTdHJpbmcgdXJsID0gbnVsbDsKLQlTdHJpbmcgdGVzdElkID0gbnVsbDsKKyAgICBTdHJpbmcgdGVzdElkID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGpuZGlOYW1lID0gbnVsbDsKICAgICAgICAgQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGN0eEZhY3RvcnkgPSBudWxsOwotCWphdmEubGFuZy5PYmplY3Qgb2JqID0gbnVsbDsKKyAgICBqYXZhLmxhbmcuT2JqZWN0IG9iaiA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgcGFyc2VyIG92ZXJyaWRlYWJpbGl0eSBmb3IgRUpCIGphcnMiKTsKIAogICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09IDMpIHsKICAgICAgICAgICAgICAgICB1cmwgPSBhcmdzWzBdOwogICAgICAgICAgICAgICAgIGN0eEZhY3RvcnkgPSBhcmdzWzFdOwotCQlqbmRpTmFtZSA9IGFyZ3NbMl07CisgICAgICAgIGpuZGlOYW1lID0gYXJnc1syXTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCAodXJsID09IG51bGwpIHx8IChjdHhGYWN0b3J5ID09IG51bGwpICkgewotCQl0ZXN0SWQgPSAiUGFyc2VyT3ZlcnJpZGVhYmxpdHlFSkI6OlNhbXBsZSBBcHBDbGllbnQiOworICAgICAgICB0ZXN0SWQgPSAiUGFyc2VyT3ZlcnJpZGVhYmxpdHlFSkI6OlNhbXBsZSBBcHBDbGllbnQiOwogICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIENvbnRleHQgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMKICAgICAgICAgICAgICAgICBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWZhdWx0IENvbnRleHQgSW5pdGlhbGl6ZWQuLi4iKTsKICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgSG9tZSBvYmplY3QKICAgICAgICAgICAgICAgICBvYmogPSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQ29udmVydGVyIik7CiAgICAgICAgICAgICB9IGVsc2UgewotCQl0ZXN0SWQgPSAiUGFyc2VyT3ZlcnJpZGVhYmlsaXR5RUpCOjpTYW1wbGUgU3RhbmRhbG9uZS1DbGllbnQiOworICAgICAgICB0ZXN0SWQgPSAiUGFyc2VyT3ZlcnJpZGVhYmlsaXR5RUpCOjpTYW1wbGUgU3RhbmRhbG9uZS1DbGllbnQiOwogICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgZW52ID0gbmV3IFByb3BlcnRpZXMoKTsKICAgICAgICAgICAgICAgICBlbnYucHV0KCJqYXZhLm5hbWluZy5wcm92aWRlci51cmwiLCB1cmwpOwogICAgICAgICAgICAgICAgIGVudi5wdXQoImphdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbCIsIGN0eEZhY3RvcnkpOwpAQCAtODEsNyArODEsNyBAQAogICAgICAgICAgICAgQ29udmVydGVyUmVtb3RlIGN1cnJlbmN5Q29udmVydGVyID0gaG9tZS5jcmVhdGUoKTsKIAogICAgICAgICAgICAgU3RyaW5nIGV4cGVjdGVkUGFyc2VyID0gIm9yZy5hcGFjaGUueGVyY2VzLmpheHAuU0FYUGFyc2VyRmFjdG9yeUltcGwiOwotICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuXG5cbj09PT09PT09PT09QmVnaW5uaW5nIFNpbXBsZSBUZXN0PT09PT1cblxuIik7CiAgICAgICAgICAgICBTdHJpbmcgcGFyc2VyRmFjdG9yeUNsYXNzTmFtZSA9IGN1cnJlbmN5Q29udmVydGVyLmdldFBhcnNlckZhY3RvcnlDbGFzc05hbWUoKTsKIApAQCAtOTcsNyArOTcsNyBAQAogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gdW5leHBlY3RlZCBleGNlcHRpb24hIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfSBmaW5hbGx5IHsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdElkKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdElkKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NsYXNzbG9hZGVyL3N0YXRlbGVzcy9jb252ZXJ0ZXIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbGFzc2xvYWRlci9zdGF0ZWxlc3MvY29udmVydGVyL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCmluZGV4IGRjODU5ZmUuLmEwNzZkNjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NsYXNzbG9hZGVyL3N0YXRlbGVzcy9jb252ZXJ0ZXIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2xhc3Nsb2FkZXIvc3RhdGVsZXNzL2NvbnZlcnRlci9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbApAQCAtMjMsNyArMjMsNyBAQAogICAgIDxzbWFsbC1pY29uPjwvc21hbGwtaWNvbj4KICAgICA8bGFyZ2UtaWNvbj48L2xhcmdlLWljb24+CiAgIDwvaWNvbj4KLSAgPGRpc3BsYXktbmFtZT5Db252ZXJ0ZXJBcHA8L2Rpc3BsYXktbmFtZT4gIAorICA8ZGlzcGxheS1uYW1lPkNvbnZlcnRlckFwcDwvZGlzcGxheS1uYW1lPgogICA8bW9kdWxlPgogICAgIDxqYXZhPmVqYi1zdGF0ZWxlc3MtY29udmVydGVyLWNsaWVudC5qYXI8L2phdmE+CiAgIDwvbW9kdWxlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2xhc3Nsb2FkZXIvc3RhdGVsZXNzL2NvbnZlcnRlci9lamIvQ29udmVydGVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2xhc3Nsb2FkZXIvc3RhdGVsZXNzL2NvbnZlcnRlci9lamIvQ29udmVydGVyQmVhbi5qYXZhCmluZGV4IGM3M2FjMmYuLjJmYjA4ZDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NsYXNzbG9hZGVyL3N0YXRlbGVzcy9jb252ZXJ0ZXIvZWpiL0NvbnZlcnRlckJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbGFzc2xvYWRlci9zdGF0ZWxlc3MvY29udmVydGVyL2VqYi9Db252ZXJ0ZXJCZWFuLmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKICAqIEBzZWUgQ29udmVydGVySG9tZQogICovCiBwdWJsaWMgY2xhc3MgQ29udmVydGVyQmVhbiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuLCBUaW1lZE9iamVjdCB7Ci0gICAgCisKICAgICBTZXNzaW9uQ29udGV4dCBzZXNzaW9uQ29udGV4dF87CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldFBhcnNlckZhY3RvcnlDbGFzc05hbWUoKSB7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgICogTG9hZHMgdGhlIHN0YXRlIG9mIHRoZSBiZWFuIGZyb20gc2Vjb25kYXJ5IHN0b3JhZ2UuIFJlcXVpcmVkIGJ5IEVKQiBzcGVjLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KLSAgICAKKwogICAgIC8qKgogICAgICAqIEtlZXBzIHRoZSBzdGF0ZSBvZiB0aGUgYmVhbiB0byBzZWNvbmRhcnkgc3RvcmFnZS4gUmVxdWlyZWQgYnkgRUpCIHNwZWMuCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2IvYnVpbGQucHJvcGVydGllcwppbmRleCAyMGU0YTgzLi43MjQ2MDk5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iQmxvYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWNtcC1tYXBwaW5ncy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1jbXAtbWFwcGluZ3MueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYi9idWlsZC54bWwKaW5kZXggNzY5NTI2MS4uNzFmMzQwMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2IvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTQgKzQ4LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQmxvYiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQmxvYlRlc3RIb21lLmNsYXNzLCoqL0Jsb2JUZXN0LmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Jsb2JfZGVyYnkuc3FsIi8+CkBAIC03NCwyMiArNzQsMjIgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iJHtiYXNlZGlyfS8uLi9jb21tb24vZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9ibG9iX2RlcmJ5LnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBhbGwKICAgICAgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2IvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2IvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGIwMzVhNTEuLjkwMzY4NjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMyLDEzICszMiwxMyBAQAogICovCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKICAgICBwcml2YXRlIHN0YXRpYyB0ZXN0LkJsb2JUZXN0SG9tZSBiaG9tZSA9IG51bGw7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9Ci0JbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOworICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgYm9vbGVhbiBpc0phdmEyREJUZXN0ID0gYXJncy5sZW5ndGggPiAwOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1JlbW90ZUJsb2JUZXN0Iik7CkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBvYmpyZWYsIHRlc3QuQmxvYlRlc3RIb21lLmNsYXNzKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTVEFSVCIpOwotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJCbG9iIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkJsb2IiKTsKIAogICAgICAgICAgICAgdGVzdCgxMDAsICJGT08iLCBuZXcgYnl0ZVtdeydBJywgJ0InLCAnQyd9KTsKICAgICAgICAgICAgIHRlc3QoMjAwLCAiQkFSIiwgbmV3IGJ5dGVbXXsnTScsICdOJywgJ08nfSk7CkBAIC02MiwzMCArNjIsMzAgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgdGVzdCg0MCwgIkJBWiIsIG51bGwpOwotCQkgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBCbG9iIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgQmxvYiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBjYXRjaCBleHBlY3RlZCBleGNlcHRpb24gZm9yIGluc2VydCBvZiBudWxsIGJsb2IgdmFsdWUiKTsKICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYXVnaHQgZXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gaW5zZXJ0aW5nIG51bGwgYmxvYiB2YWx1ZSIpOwotCQkgICAgLy9zdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IEJsb2IiLCBzdGF0LlBBU1MpOworICAgICAgICAgICAgLy9zdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IEJsb2IiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotCSAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IEJsb2IiLCBzdGF0LlBBU1MpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IEJsb2IiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGSU5JU0giKTsKIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIGV4Y2VwdGlvbjoiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IEJsb2IiLCBzdGF0LkZBSUwpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IEJsb2IiLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0Jc3RhdC5wcmludFN1bW1hcnkoIkJsb2IiKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgiQmxvYiIpOwogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHRlc3QoaW50IGlkLCBTdHJpbmcgbmFtZSwgYnl0ZSBjaGFyc1tdKQogICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIEludGVnZXIgcGsgPSBuZXcgSW50ZWdlcihpZCk7CiAgICAgICAgIHRlc3QuQmxvYlRlc3QgYmVhbiA9IGJob21lLmNyZWF0ZShwaywgbmFtZSwgY2hhcnMpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQ6ICIgKyBiZWFuLmdldFByaW1hcnlLZXkoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYi9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDBlYjc0ZWYuLmQ5MGM5ZmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yNCwxNCArMjQsMTQgQEAKICAgPGVqYj4KICAgICAgIDxlamItbmFtZT5CbG9iVGVzdDwvZWpiLW5hbWU+CiAgICAgICA8am5kaS1uYW1lPlNpbXBsZUJsb2JUZXN0PC9qbmRpLW5hbWU+Ci0JPHJlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+NjAwPC9yZWZyZXNoLXBlcmlvZC1pbi1zZWNvbmRzPgotCTxiZWFuLWNhY2hlPgotCQk8bWF4LWNhY2hlLXNpemU+NjA8L21heC1jYWNoZS1zaXplPgotCQk8aXMtY2FjaGUtb3ZlcmZsb3ctYWxsb3dlZD50cnVlPC9pcy1jYWNoZS1vdmVyZmxvdy1hbGxvd2VkPgotCQk8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjAwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KLQkJPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjYwMDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgotCQk8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+RklGTzwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+Ci0JPC9iZWFuLWNhY2hlPgorICAgIDxyZWZyZXNoLXBlcmlvZC1pbi1zZWNvbmRzPjYwMDwvcmVmcmVzaC1wZXJpb2QtaW4tc2Vjb25kcz4KKyAgICA8YmVhbi1jYWNoZT4KKyAgICAgICAgPG1heC1jYWNoZS1zaXplPjYwPC9tYXgtY2FjaGUtc2l6ZT4KKyAgICAgICAgPGlzLWNhY2hlLW92ZXJmbG93LWFsbG93ZWQ+dHJ1ZTwvaXMtY2FjaGUtb3ZlcmZsb3ctYWxsb3dlZD4KKyAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwMDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICAgIDxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz42MDAwPC9yZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkZJRk88L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgorICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KIAogPHBtLWRlc2NyaXB0b3JzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2IvZWpiL0Jsb2JUZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2IvZWpiL0Jsb2JUZXN0QmVhbi5qYXZhCmluZGV4IDcwNmZkY2EuLmRiNDg3YWEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iL2VqYi9CbG9iVGVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYi9lamIvQmxvYlRlc3RCZWFuLmphdmEKQEAgLTI1LDY1ICsyNSw2NSBAQAogCiAKIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCbG9iVGVzdEJlYW4gaW1wbGVtZW50cyBqYWthcnRhLmVqYi5FbnRpdHlCZWFuIHsKLSAgICAKKwogICAgIHByaXZhdGUgamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCBjb250ZXh0OwotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jc2V0RW50aXR5Q29udGV4dChqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0KQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCBhQ29udGV4dCkgewogICAgICAgICBjb250ZXh0PWFDb250ZXh0OwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYkFjdGl2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJQYXNzaXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJSZW1vdmUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWJ1ZzogQmxvYlRlc3QgZWpiUmVtb3ZlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jdW5zZXRFbnRpdHlDb250ZXh0KCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKSB7CiAgICAgICAgIGNvbnRleHQ9bnVsbDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJMb2FkKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYlN0b3JlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgSW50ZWdlciBnZXRJZCgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldElkKEludGVnZXIgaWQpOwogCkBAIC0xMTMsOCArMTEzLDggQEAKIAogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKEludGVnZXIgaWQsIGphdmEubGFuZy5TdHJpbmcgbmFtZSwgYnl0ZVtdIGIpIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24gewogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2IvZWpiL0Jsb2JUZXN0SG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2IvZWpiL0Jsb2JUZXN0SG9tZS5qYXZhCmluZGV4IGU5ZTc3OTEuLmE0Y2RkZmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iL2VqYi9CbG9iVGVzdEhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYi9lamIvQmxvYlRlc3RIb21lLmphdmEKQEAgLTI0LDkgKzI0LDkgQEAKICAqLwogCiBwdWJsaWMgaW50ZXJmYWNlIEJsb2JUZXN0SG9tZSBleHRlbmRzIGpha2FydGEuZWpiLkVKQkhvbWUgewotICAgIAorCiAgICAgcHVibGljICBCbG9iVGVzdCBjcmVhdGUoSW50ZWdlciBpLCBqYXZhLmxhbmcuU3RyaW5nIG5hbWUsIGJ5dGVbXSBiKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgIEJsb2JUZXN0IGZpbmRCeVByaW1hcnlLZXkgKEludGVnZXIga2V5KSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iL3NxbC9ibG9iX2RiMi5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYi9zcWwvYmxvYl9kYjIuc3FsCmluZGV4IGQ5ZTU5NDIuLmZjYTk3N2EgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iL3NxbC9ibG9iX2RiMi5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2Ivc3FsL2Jsb2JfZGIyLnNxbApAQCAtMSwxOSArMSwxOSBAQAogZHJvcCB0YWJsZSBteWJsb2I7CiAKIGNyZWF0ZSB0YWJsZSBteWJsb2IgKAotCWlkIAlpbnQgcHJpbWFyeSBrZXkgTk9UIE5VTEwsCi0JbmFtZQlWQVJDSEFSKDEwMCksCi0JYmxiCUJMT0IsCi0JYnl0ZWJsYglCTE9CLAotCWJ5dGVibGIyCUJMT0IKKyAgICBpZCAgICAgaW50IHByaW1hcnkga2V5IE5PVCBOVUxMLAorICAgIG5hbWUgICAgVkFSQ0hBUigxMDApLAorICAgIGJsYiAgICBCTE9CLAorICAgIGJ5dGVibGIgICAgQkxPQiwKKyAgICBieXRlYmxiMiAgICBCTE9CCiApOwogCiBjb21taXQ7CiBpbnNlcnQgaW50byBteWJsb2IgdmFsdWVzICgKLQkxLAotCSdBQUEnLAotCUNBU1QoJzQ0NDQ0NDQ0NDQnIGFzIEJMT0IpLAotCUNBU1QoJzc3Nzc3Nzc3NzcnIGFzIEJMT0IpLAotCUNBU1QoJzk5OTk5OTk5OTknIGFzIEJMT0IpKTsKKyAgICAxLAorICAgICdBQUEnLAorICAgIENBU1QoJzQ0NDQ0NDQ0NDQnIGFzIEJMT0IpLAorICAgIENBU1QoJzc3Nzc3Nzc3NzcnIGFzIEJMT0IpLAorICAgIENBU1QoJzk5OTk5OTk5OTknIGFzIEJMT0IpKTsKIAogY29tbWl0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2Ivc3FsL2Jsb2JfZGVyYnkuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2Ivc3FsL2Jsb2JfZGVyYnkuc3FsCmluZGV4IDE5MDFhNDEuLjk5NjQyMDUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iL3NxbC9ibG9iX2RlcmJ5LnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYi9zcWwvYmxvYl9kZXJieS5zcWwKQEAgLTEsMTcgKzEsMTcgQEAKIGRyb3AgdGFibGUgTVlCTE9COwogCiBjcmVhdGUgdGFibGUgTVlCTE9CICgKLQlJRCAJaW50IHByaW1hcnkga2V5IE5PVCBOVUxMLAotCU5BTUUJVkFSQ0hBUigxMDApLAotCUJMQglCTE9CLAotCUJZVEVCTEIJQkxPQiwKLQlCWVRFQkxCMglCTE9CCisgICAgSUQgICAgIGludCBwcmltYXJ5IGtleSBOT1QgTlVMTCwKKyAgICBOQU1FICAgIFZBUkNIQVIoMTAwKSwKKyAgICBCTEIgICAgQkxPQiwKKyAgICBCWVRFQkxCICAgIEJMT0IsCisgICAgQllURUJMQjIgICAgQkxPQgogKTsKIAogaW5zZXJ0IGludG8gTVlCTE9CIHZhbHVlcyAoCi0JMSwKLQknQUFBJywKLQlDQVNUKFgnNDQ0NDQ0NDQ0NCcgYXMgQkxPQiksCi0JQ0FTVChYJzc3Nzc3Nzc3NzcnIGFzIEJMT0IpLAotCUNBU1QoWCc5OTk5OTk5OTk5JyBhcyBCTE9CKSk7CisgICAgMSwKKyAgICAnQUFBJywKKyAgICBDQVNUKFgnNDQ0NDQ0NDQ0NCcgYXMgQkxPQiksCisgICAgQ0FTVChYJzc3Nzc3Nzc3NzcnIGFzIEJMT0IpLAorICAgIENBU1QoWCc5OTk5OTk5OTk5JyBhcyBCTE9CKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iL3NxbC9ibG9iX2lmeC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYi9zcWwvYmxvYl9pZnguc3FsCmluZGV4IDJjZTYwMjMuLmJhZTQ4YzggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iL3NxbC9ibG9iX2lmeC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2Ivc3FsL2Jsb2JfaWZ4LnNxbApAQCAtMSwxOSArMSwxOSBAQAogZHJvcCB0YWJsZSBteWJsb2I7CiAKIGNyZWF0ZSB0YWJsZSBteWJsb2IgKAotCWlkIAlpbnQgcHJpbWFyeSBrZXksCi0JbmFtZQlWQVJDSEFSKDEwMCksCi0JYmxiCUJMT0IsCi0JYnl0ZWJsYglCTE9CLAotCWJ5dGVibGIyCUJMT0IKKyAgICBpZCAgICAgaW50IHByaW1hcnkga2V5LAorICAgIG5hbWUgICAgVkFSQ0hBUigxMDApLAorICAgIGJsYiAgICBCTE9CLAorICAgIGJ5dGVibGIgICAgQkxPQiwKKyAgICBieXRlYmxiMiAgICBCTE9CCiApOwogCiBjb21taXQ7CiBpbnNlcnQgaW50byBteWJsb2IgdmFsdWVzICgKLQkxLAotCSdBQUEnLAotCUNBU1QoJzQ0NDQ0NDQ0NDQnIEFTIEJMT0IpLAotCUNBU1QoJzc3Nzc3Nzc3NzcnIEFTIEJMT0IpLAotCUNBU1QoJzk5OTk5OTk5OTknIEFTIEJMT0IpKTsKKyAgICAxLAorICAgICdBQUEnLAorICAgIENBU1QoJzQ0NDQ0NDQ0NDQnIEFTIEJMT0IpLAorICAgIENBU1QoJzc3Nzc3Nzc3NzcnIEFTIEJMT0IpLAorICAgIENBU1QoJzk5OTk5OTk5OTknIEFTIEJMT0IpKTsKIAogY29tbWl0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2Ivc3FsL2Jsb2JfbXNzcWwuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2Ivc3FsL2Jsb2JfbXNzcWwuc3FsCmluZGV4IGY5ZjcwYzkuLmMyZDcwMjggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iL3NxbC9ibG9iX21zc3FsLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYi9zcWwvYmxvYl9tc3NxbC5zcWwKQEAgLTIsMTkgKzIsMTkgQEAKIGdvCiAKIGNyZWF0ZSB0YWJsZSBNWUJMT0IgKAotCUlEIAlJTlQgUFJJTUFSWSBLRVksCi0JTkFNRQlWQVJDSEFSKDEwMCksCi0JQkxCCUlNQUdFLAotCUJZVEVCTEIJSU1BR0UsCi0JQllURUJMQjIJSU1BR0UKKyAgICBJRCAgICAgSU5UIFBSSU1BUlkgS0VZLAorICAgIE5BTUUgICAgVkFSQ0hBUigxMDApLAorICAgIEJMQiAgICBJTUFHRSwKKyAgICBCWVRFQkxCICAgIElNQUdFLAorICAgIEJZVEVCTEIyICAgIElNQUdFCiApCiBnbwogCiBpbnNlcnQgaW50byBNWUJMT0IgdmFsdWVzICgKLQkxLAotCSdBQUEnLAotCSc0NDQ0NDQ0NDQ0JywKLQknNzc3Nzc3Nzc3NycsCi0JJzk5OTk5OTk5OTknKQorICAgIDEsCisgICAgJ0FBQScsCisgICAgJzQ0NDQ0NDQ0NDQnLAorICAgICc3Nzc3Nzc3Nzc3JywKKyAgICAnOTk5OTk5OTk5OScpCiAKIGdvCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYi9zcWwvYmxvYl9teXNxbC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYi9zcWwvYmxvYl9teXNxbC5zcWwKaW5kZXggNGUzMTc5OS4uMzNkOTNkYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2Ivc3FsL2Jsb2JfbXlzcWwuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iL3NxbC9ibG9iX215c3FsLnNxbApAQCAtMSwxOSArMSwxOSBAQAogZHJvcCB0YWJsZSBNWUJMT0I7CiAKIGNyZWF0ZSB0YWJsZSBNWUJMT0IgKAotCUlEIAlpbnQgcHJpbWFyeSBrZXksCi0JTkFNRQlWQVJDSEFSKDEwMCksCi0JQkxCCUJMT0IoMjU1KSwKLQlCWVRFQkxCCUJMT0IoMjU1KSwKLQlCWVRFQkxCMglCTE9CKDI1NSkKKyAgICBJRCAgICAgaW50IHByaW1hcnkga2V5LAorICAgIE5BTUUgICAgVkFSQ0hBUigxMDApLAorICAgIEJMQiAgICBCTE9CKDI1NSksCisgICAgQllURUJMQiAgICBCTE9CKDI1NSksCisgICAgQllURUJMQjIgICAgQkxPQigyNTUpCiApIEVOR0lORT1Jbm5vREI7CiAKIGNvbW1pdDsKIGluc2VydCBpbnRvIE1ZQkxPQiB2YWx1ZXMgKAotCTEsCi0JJ0FBQScsCi0JJzQ0NDQ0NDQ0NDQnLAotCSc3Nzc3Nzc3Nzc3JywKLQknOTk5OTk5OTk5OScpOworICAgIDEsCisgICAgJ0FBQScsCisgICAgJzQ0NDQ0NDQ0NDQnLAorICAgICc3Nzc3Nzc3Nzc3JywKKyAgICAnOTk5OTk5OTk5OScpOwogCiBjb21taXQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYi9zcWwvYmxvYl9vcmEuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2Ivc3FsL2Jsb2Jfb3JhLnNxbAppbmRleCAyMTI4YzA0Li5iMGU3YjEyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYi9zcWwvYmxvYl9vcmEuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iL3NxbC9ibG9iX29yYS5zcWwKQEAgLTEsMTkgKzEsMTkgQEAKIGRyb3AgdGFibGUgTVlCTE9COwogCiBjcmVhdGUgdGFibGUgTVlCTE9CICgKLQlJRCAJaW50IHByaW1hcnkga2V5LAotCU5BTUUJVkFSQ0hBUjIoMTAwKSwKLQlCTEIJUkFXKDI1NSksCi0JQllURUJMQglSQVcoMjU1KSwKLQlCWVRFQkxCMglSQVcoMjU1KQorICAgIElEICAgICBpbnQgcHJpbWFyeSBrZXksCisgICAgTkFNRSAgICBWQVJDSEFSMigxMDApLAorICAgIEJMQiAgICBSQVcoMjU1KSwKKyAgICBCWVRFQkxCICAgIFJBVygyNTUpLAorICAgIEJZVEVCTEIyICAgIFJBVygyNTUpCiApOwogCiBjb21taXQ7CiBpbnNlcnQgaW50byBNWUJMT0IgdmFsdWVzICgKLQkxLAotCSdBQUEnLAotCSc0NDQ0NDQ0NDQ0JywKLQknNzc3Nzc3Nzc3NycsCi0JJzk5OTk5OTk5OTknKTsKKyAgICAxLAorICAgICdBQUEnLAorICAgICc0NDQ0NDQ0NDQ0JywKKyAgICAnNzc3Nzc3Nzc3NycsCisgICAgJzk5OTk5OTk5OTknKTsKIAogY29tbWl0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2Ivc3FsL2Jsb2JfcGJzLnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iL3NxbC9ibG9iX3Bicy5zcWwKaW5kZXggOTkwNzY2Zi4uYmMwNTAxOCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2Ivc3FsL2Jsb2JfcGJzLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYi9zcWwvYmxvYl9wYnMuc3FsCkBAIC0xLDE5ICsxLDE5IEBACiBkcm9wIHRhYmxlIG15YmxvYjsKIAogY3JlYXRlIHRhYmxlIG15YmxvYiAoCi0JaWQgCWludCBwcmltYXJ5IGtleSwKLQluYW1lCVZBUkNIQVIyKDEwMCksCi0JYmxiCUJMT0IoMTBrKSwKLQlieXRlYmxiCUJMT0IoMTBrKSwKLQlieXRlYmxiMglCTE9CKDEwaykKKyAgICBpZCAgICAgaW50IHByaW1hcnkga2V5LAorICAgIG5hbWUgICAgVkFSQ0hBUjIoMTAwKSwKKyAgICBibGIgICAgQkxPQigxMGspLAorICAgIGJ5dGVibGIgICAgQkxPQigxMGspLAorICAgIGJ5dGVibGIyICAgIEJMT0IoMTBrKQogKTsKIAogY29tbWl0OwogaW5zZXJ0IGludG8gbXlibG9iIHZhbHVlcyAoCi0JMSwKLQknQUFBJywKLQlDQVNUKCc0NDQ0NDQ0NDQ0JyBhcyBCTE9CKSwKLQlDQVNUKCc3Nzc3Nzc3Nzc3JyBhcyBCTE9CKSwKLQlDQVNUKCc5OTk5OTk5OTk5JyBhcyBCTE9CKSk7CisgICAgMSwKKyAgICAnQUFBJywKKyAgICBDQVNUKCc0NDQ0NDQ0NDQ0JyBhcyBCTE9CKSwKKyAgICBDQVNUKCc3Nzc3Nzc3Nzc3JyBhcyBCTE9CKSwKKyAgICBDQVNUKCc5OTk5OTk5OTk5JyBhcyBCTE9CKSk7CiAKIGNvbW1pdDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iL3NxbC9ibG9iX3BzcWwuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2Ivc3FsL2Jsb2JfcHNxbC5zcWwKaW5kZXggNTY2NmFhZC4uMGFhYzhiMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2Ivc3FsL2Jsb2JfcHNxbC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2Ivc3FsL2Jsb2JfcHNxbC5zcWwKQEAgLTEsMTkgKzEsMTkgQEAKIGRyb3AgdGFibGUgTVlCTE9CIGNhc2NhZGU7CiAKIGNyZWF0ZSB0YWJsZSBNWUJMT0IgKAotCUlEIAlpbnQgcHJpbWFyeSBrZXksCi0JTkFNRQlWQVJDSEFSKDEwMCksCi0JQkxCCUJZVEVBLAotCUJZVEVCTEIJQllURUEsCi0JQllURUJMQjIJQllURUEKKyAgICBJRCAgICAgaW50IHByaW1hcnkga2V5LAorICAgIE5BTUUgICAgVkFSQ0hBUigxMDApLAorICAgIEJMQiAgICBCWVRFQSwKKyAgICBCWVRFQkxCICAgIEJZVEVBLAorICAgIEJZVEVCTEIyICAgIEJZVEVBCiApIDsKIAogY29tbWl0OwogaW5zZXJ0IGludG8gTVlCTE9CIHZhbHVlcyAoCi0JMSwKLQknQUFBJywKLQknNDQ0NDQ0NDQ0NCcsCi0JJzc3Nzc3Nzc3NzcnLAotCSc5OTk5OTk5OTk5Jyk7CisgICAgMSwKKyAgICAnQUFBJywKKyAgICAnNDQ0NDQ0NDQ0NCcsCisgICAgJzc3Nzc3Nzc3NzcnLAorICAgICc5OTk5OTk5OTk5Jyk7CiAKIGNvbW1pdDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iL3NxbC9ibG9iX3N5Yi5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYi9zcWwvYmxvYl9zeWIuc3FsCmluZGV4IDg2YjdmMzkuLjk4YTk1ZjUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iL3NxbC9ibG9iX3N5Yi5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2Ivc3FsL2Jsb2Jfc3liLnNxbApAQCAtMiwyMCArMiwyMCBAQAogZ28KIAogY3JlYXRlIHRhYmxlIE1ZQkxPQiAoCi0JSUQgCUlOVCBwcmltYXJ5IGtleSBOT1QgTlVMTCwKLQlOQU1FCVZBUkNIQVIoMTAwKSwKLQlCTEIJSU1BR0UsCi0JQllURUJMQglJTUFHRSwKLQlCWVRFQkxCMglJTUFHRQorICAgIElEICAgICBJTlQgcHJpbWFyeSBrZXkgTk9UIE5VTEwsCisgICAgTkFNRSAgICBWQVJDSEFSKDEwMCksCisgICAgQkxCICAgIElNQUdFLAorICAgIEJZVEVCTEIgICAgSU1BR0UsCisgICAgQllURUJMQjIgICAgSU1BR0UKICkKIGdvCiAKIGluc2VydCBpbnRvIE1ZQkxPQiB2YWx1ZXMgKAotCTEsCi0JJ0FBQScsCi0JJzQ0NDQ0NDQ0NDQnLAotCSc3Nzc3Nzc3Nzc3JywKLQknOTk5OTk5OTk5OScpCisgICAgMSwKKyAgICAnQUFBJywKKyAgICAnNDQ0NDQ0NDQ0NCcsCisgICAgJzc3Nzc3Nzc3NzcnLAorICAgICc5OTk5OTk5OTk5JykKIAogZ28KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2JKYXZhMkRCL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYkphdmEyREIvYnVpbGQucHJvcGVydGllcwppbmRleCA4NjQxYWZkLi4zOGU3YmM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYkphdmEyREIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYkphdmEyREIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjAgKzE1LDIwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJCbG9iSjJEQiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYkphdmEyREIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2JKYXZhMkRCL2J1aWxkLnhtbAppbmRleCAwYTZlMTczLi5lMjJkNTNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYkphdmEyREIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iSmF2YTJEQi9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkJsb2IqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0Jsb2JUZXN0SG9tZS5jbGFzcywqKi9CbG9iVGVzdC5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSIke2Jhc2VkaXJ9Ly4uL2NvbW1vbi9jcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTY2LDIzICs2NiwyMyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSIke2Jhc2VkaXJ9Ly4uL2NvbW1vbi9kZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CisgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9ibG9iX2RlcmJ5LnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImV4dHJhLXBhcmFtcyIKKyAgICA8cGFyYW0gbmFtZT0iZXh0cmEtcGFyYW1zIgogICAgICAgICAgICAgICB2YWx1ZT0iLS11bmlxdWV0YWJsZW5hbWVzPXRydWUgLS1kcm9wYW5kY3JlYXRldGFibGVzPXRydWUiLz4KLQk8L2FudGNhbGw+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KLQkJPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIgorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiCiAgICAgICAgICAgICAgIHZhbHVlPSJKYXZhMkRCVGVzdCIvPgotCTwvYW50Y2FsbD4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC05MSw3ICs5MSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBhbGwKICAgICAgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2JKYXZhMkRCL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iSmF2YTJEQi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYjAzNWE1MS4uOTAzNjg2MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2JKYXZhMkRCL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYkphdmEyREIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMiwxMyArMzIsMTMgQEAKICAqLwogcHVibGljIGNsYXNzIENsaWVudCB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgdGVzdC5CbG9iVGVzdEhvbWUgYmhvbWUgPSBudWxsOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQotCW5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKKyAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIGJvb2xlYW4gaXNKYXZhMkRCVGVzdCA9IGFyZ3MubGVuZ3RoID4gMDsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9SZW1vdGVCbG9iVGVzdCIpOwpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgb2JqcmVmLCB0ZXN0LkJsb2JUZXN0SG9tZS5jbGFzcyk7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1RBUlQiKTsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiQmxvYiIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJCbG9iIik7CiAKICAgICAgICAgICAgIHRlc3QoMTAwLCAiRk9PIiwgbmV3IGJ5dGVbXXsnQScsICdCJywgJ0MnfSk7CiAgICAgICAgICAgICB0ZXN0KDIwMCwgIkJBUiIsIG5ldyBieXRlW117J00nLCAnTicsICdPJ30pOwpAQCAtNjIsMzAgKzYyLDMwIEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgIHRlc3QoNDAsICJCQVoiLCBudWxsKTsKLQkJICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgQmxvYiIsIHN0YXQuRkFJTCk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IEJsb2IiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gY2F0Y2ggZXhwZWN0ZWQgZXhjZXB0aW9uIGZvciBpbnNlcnQgb2YgbnVsbCBibG9iIHZhbHVlIik7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2F1Z2h0IGV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuIGluc2VydGluZyBudWxsIGJsb2IgdmFsdWUiKTsKLQkJICAgIC8vc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBCbG9iIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgICAgIC8vc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBCbG9iIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLQkgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBCbG9iIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBCbG9iIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRklOSVNIIik7CiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiBleGNlcHRpb246Iik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBCbG9iIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBCbG9iIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotCXN0YXQucHJpbnRTdW1tYXJ5KCJCbG9iIik7CisgICAgc3RhdC5wcmludFN1bW1hcnkoIkJsb2IiKTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCB0ZXN0KGludCBpZCwgU3RyaW5nIG5hbWUsIGJ5dGUgY2hhcnNbXSkKICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBJbnRlZ2VyIHBrID0gbmV3IEludGVnZXIoaWQpOwogICAgICAgICB0ZXN0LkJsb2JUZXN0IGJlYW4gPSBiaG9tZS5jcmVhdGUocGssIG5hbWUsIGNoYXJzKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkOiAiICsgYmVhbi5nZXRQcmltYXJ5S2V5KCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2JKYXZhMkRCL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2JKYXZhMkRCL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDVkMDQ3YTguLmYwZWM4NGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iSmF2YTJEQi9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYkphdmEyREIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI0LDE0ICsyNCwxNCBAQAogICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPkJsb2JUZXN0PC9lamItbmFtZT4KICAgICAgIDxqbmRpLW5hbWU+U2ltcGxlQmxvYlRlc3Q8L2puZGktbmFtZT4KLQk8cmVmcmVzaC1wZXJpb2QtaW4tc2Vjb25kcz42MDA8L3JlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+Ci0JPGJlYW4tY2FjaGU+Ci0JCTxtYXgtY2FjaGUtc2l6ZT42MDwvbWF4LWNhY2hlLXNpemU+Ci0JCTxpcy1jYWNoZS1vdmVyZmxvdy1hbGxvd2VkPnRydWU8L2lzLWNhY2hlLW92ZXJmbG93LWFsbG93ZWQ+Ci0JCTxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgotCQk8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+NjAwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+Ci0JCTx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5GSUZPPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4KLQk8L2JlYW4tY2FjaGU+CisgICAgPHJlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+NjAwPC9yZWZyZXNoLXBlcmlvZC1pbi1zZWNvbmRzPgorICAgIDxiZWFuLWNhY2hlPgorICAgICAgICA8bWF4LWNhY2hlLXNpemU+NjA8L21heC1jYWNoZS1zaXplPgorICAgICAgICA8aXMtY2FjaGUtb3ZlcmZsb3ctYWxsb3dlZD50cnVlPC9pcy1jYWNoZS1vdmVyZmxvdy1hbGxvd2VkPgorICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjAwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjYwMDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+RklGTzwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+CisgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogCiA8cG0tZGVzY3JpcHRvcnM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYkphdmEyREIvZWpiL0Jsb2JUZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2JKYXZhMkRCL2VqYi9CbG9iVGVzdEJlYW4uamF2YQppbmRleCA3MDZmZGNhLi5kYjQ4N2FhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYkphdmEyREIvZWpiL0Jsb2JUZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iSmF2YTJEQi9lamIvQmxvYlRlc3RCZWFuLmphdmEKQEAgLTI1LDY1ICsyNSw2NSBAQAogCiAKIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCbG9iVGVzdEJlYW4gaW1wbGVtZW50cyBqYWthcnRhLmVqYi5FbnRpdHlCZWFuIHsKLSAgICAKKwogICAgIHByaXZhdGUgamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCBjb250ZXh0OwotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jc2V0RW50aXR5Q29udGV4dChqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0KQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCBhQ29udGV4dCkgewogICAgICAgICBjb250ZXh0PWFDb250ZXh0OwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYkFjdGl2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJQYXNzaXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJSZW1vdmUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWJ1ZzogQmxvYlRlc3QgZWpiUmVtb3ZlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jdW5zZXRFbnRpdHlDb250ZXh0KCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKSB7CiAgICAgICAgIGNvbnRleHQ9bnVsbDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJMb2FkKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYlN0b3JlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgSW50ZWdlciBnZXRJZCgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldElkKEludGVnZXIgaWQpOwogCkBAIC0xMTMsOCArMTEzLDggQEAKIAogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKEludGVnZXIgaWQsIGphdmEubGFuZy5TdHJpbmcgbmFtZSwgYnl0ZVtdIGIpIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24gewogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2JKYXZhMkRCL2VqYi9CbG9iVGVzdEhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iSmF2YTJEQi9lamIvQmxvYlRlc3RIb21lLmphdmEKaW5kZXggZTllNzc5MS4uYTRjZGRmYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2JKYXZhMkRCL2VqYi9CbG9iVGVzdEhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYkphdmEyREIvZWpiL0Jsb2JUZXN0SG9tZS5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBCbG9iVGVzdEhvbWUgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJIb21lIHsKLSAgICAKKwogICAgIHB1YmxpYyAgQmxvYlRlc3QgY3JlYXRlKEludGVnZXIgaSwgamF2YS5sYW5nLlN0cmluZyBuYW1lLCBieXRlW10gYikgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljICBCbG9iVGVzdCBmaW5kQnlQcmltYXJ5S2V5IChJbnRlZ2VyIGtleSkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYkphdmEyREIvc3FsL2Jsb2JfZGIyLnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iSmF2YTJEQi9zcWwvYmxvYl9kYjIuc3FsCmluZGV4IGQ5ZTU5NDIuLmZjYTk3N2EgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iSmF2YTJEQi9zcWwvYmxvYl9kYjIuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iSmF2YTJEQi9zcWwvYmxvYl9kYjIuc3FsCkBAIC0xLDE5ICsxLDE5IEBACiBkcm9wIHRhYmxlIG15YmxvYjsKIAogY3JlYXRlIHRhYmxlIG15YmxvYiAoCi0JaWQgCWludCBwcmltYXJ5IGtleSBOT1QgTlVMTCwKLQluYW1lCVZBUkNIQVIoMTAwKSwKLQlibGIJQkxPQiwKLQlieXRlYmxiCUJMT0IsCi0JYnl0ZWJsYjIJQkxPQgorICAgIGlkICAgICBpbnQgcHJpbWFyeSBrZXkgTk9UIE5VTEwsCisgICAgbmFtZSAgICBWQVJDSEFSKDEwMCksCisgICAgYmxiICAgIEJMT0IsCisgICAgYnl0ZWJsYiAgICBCTE9CLAorICAgIGJ5dGVibGIyICAgIEJMT0IKICk7CiAKIGNvbW1pdDsKIGluc2VydCBpbnRvIG15YmxvYiB2YWx1ZXMgKAotCTEsCi0JJ0FBQScsCi0JQ0FTVCgnNDQ0NDQ0NDQ0NCcgYXMgQkxPQiksCi0JQ0FTVCgnNzc3Nzc3Nzc3NycgYXMgQkxPQiksCi0JQ0FTVCgnOTk5OTk5OTk5OScgYXMgQkxPQikpOworICAgIDEsCisgICAgJ0FBQScsCisgICAgQ0FTVCgnNDQ0NDQ0NDQ0NCcgYXMgQkxPQiksCisgICAgQ0FTVCgnNzc3Nzc3Nzc3NycgYXMgQkxPQiksCisgICAgQ0FTVCgnOTk5OTk5OTk5OScgYXMgQkxPQikpOwogCiBjb21taXQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYkphdmEyREIvc3FsL2Jsb2JfZGVyYnkuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2JKYXZhMkRCL3NxbC9ibG9iX2RlcmJ5LnNxbAppbmRleCAxOTAxYTQxLi45OTY0MjA1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYkphdmEyREIvc3FsL2Jsb2JfZGVyYnkuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iSmF2YTJEQi9zcWwvYmxvYl9kZXJieS5zcWwKQEAgLTEsMTcgKzEsMTcgQEAKIGRyb3AgdGFibGUgTVlCTE9COwogCiBjcmVhdGUgdGFibGUgTVlCTE9CICgKLQlJRCAJaW50IHByaW1hcnkga2V5IE5PVCBOVUxMLAotCU5BTUUJVkFSQ0hBUigxMDApLAotCUJMQglCTE9CLAotCUJZVEVCTEIJQkxPQiwKLQlCWVRFQkxCMglCTE9CCisgICAgSUQgICAgIGludCBwcmltYXJ5IGtleSBOT1QgTlVMTCwKKyAgICBOQU1FICAgIFZBUkNIQVIoMTAwKSwKKyAgICBCTEIgICAgQkxPQiwKKyAgICBCWVRFQkxCICAgIEJMT0IsCisgICAgQllURUJMQjIgICAgQkxPQgogKTsKIAogaW5zZXJ0IGludG8gTVlCTE9CIHZhbHVlcyAoCi0JMSwKLQknQUFBJywKLQlDQVNUKFgnNDQ0NDQ0NDQ0NCcgYXMgQkxPQiksCi0JQ0FTVChYJzc3Nzc3Nzc3NzcnIGFzIEJMT0IpLAotCUNBU1QoWCc5OTk5OTk5OTk5JyBhcyBCTE9CKSk7CisgICAgMSwKKyAgICAnQUFBJywKKyAgICBDQVNUKFgnNDQ0NDQ0NDQ0NCcgYXMgQkxPQiksCisgICAgQ0FTVChYJzc3Nzc3Nzc3NzcnIGFzIEJMT0IpLAorICAgIENBU1QoWCc5OTk5OTk5OTk5JyBhcyBCTE9CKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iSmF2YTJEQi9zcWwvYmxvYl9pZnguc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2JKYXZhMkRCL3NxbC9ibG9iX2lmeC5zcWwKaW5kZXggMmNlNjAyMy4uYmFlNDhjOCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2JKYXZhMkRCL3NxbC9ibG9iX2lmeC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2JKYXZhMkRCL3NxbC9ibG9iX2lmeC5zcWwKQEAgLTEsMTkgKzEsMTkgQEAKIGRyb3AgdGFibGUgbXlibG9iOwogCiBjcmVhdGUgdGFibGUgbXlibG9iICgKLQlpZCAJaW50IHByaW1hcnkga2V5LAotCW5hbWUJVkFSQ0hBUigxMDApLAotCWJsYglCTE9CLAotCWJ5dGVibGIJQkxPQiwKLQlieXRlYmxiMglCTE9CCisgICAgaWQgICAgIGludCBwcmltYXJ5IGtleSwKKyAgICBuYW1lICAgIFZBUkNIQVIoMTAwKSwKKyAgICBibGIgICAgQkxPQiwKKyAgICBieXRlYmxiICAgIEJMT0IsCisgICAgYnl0ZWJsYjIgICAgQkxPQgogKTsKIAogY29tbWl0OwogaW5zZXJ0IGludG8gbXlibG9iIHZhbHVlcyAoCi0JMSwKLQknQUFBJywKLQlDQVNUKCc0NDQ0NDQ0NDQ0JyBBUyBCTE9CKSwKLQlDQVNUKCc3Nzc3Nzc3Nzc3JyBBUyBCTE9CKSwKLQlDQVNUKCc5OTk5OTk5OTk5JyBBUyBCTE9CKSk7CisgICAgMSwKKyAgICAnQUFBJywKKyAgICBDQVNUKCc0NDQ0NDQ0NDQ0JyBBUyBCTE9CKSwKKyAgICBDQVNUKCc3Nzc3Nzc3Nzc3JyBBUyBCTE9CKSwKKyAgICBDQVNUKCc5OTk5OTk5OTk5JyBBUyBCTE9CKSk7CiAKIGNvbW1pdDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iSmF2YTJEQi9zcWwvYmxvYl9tc3NxbC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYkphdmEyREIvc3FsL2Jsb2JfbXNzcWwuc3FsCmluZGV4IGY5ZjcwYzkuLmMyZDcwMjggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iSmF2YTJEQi9zcWwvYmxvYl9tc3NxbC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2JKYXZhMkRCL3NxbC9ibG9iX21zc3FsLnNxbApAQCAtMiwxOSArMiwxOSBAQAogZ28KIAogY3JlYXRlIHRhYmxlIE1ZQkxPQiAoCi0JSUQgCUlOVCBQUklNQVJZIEtFWSwKLQlOQU1FCVZBUkNIQVIoMTAwKSwKLQlCTEIJSU1BR0UsCi0JQllURUJMQglJTUFHRSwKLQlCWVRFQkxCMglJTUFHRQorICAgIElEICAgICBJTlQgUFJJTUFSWSBLRVksCisgICAgTkFNRSAgICBWQVJDSEFSKDEwMCksCisgICAgQkxCICAgIElNQUdFLAorICAgIEJZVEVCTEIgICAgSU1BR0UsCisgICAgQllURUJMQjIgICAgSU1BR0UKICkKIGdvCiAKIGluc2VydCBpbnRvIE1ZQkxPQiB2YWx1ZXMgKAotCTEsCi0JJ0FBQScsCi0JJzQ0NDQ0NDQ0NDQnLAotCSc3Nzc3Nzc3Nzc3JywKLQknOTk5OTk5OTk5OScpCisgICAgMSwKKyAgICAnQUFBJywKKyAgICAnNDQ0NDQ0NDQ0NCcsCisgICAgJzc3Nzc3Nzc3NzcnLAorICAgICc5OTk5OTk5OTk5JykKIAogZ28KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iSmF2YTJEQi9zcWwvYmxvYl9teXNxbC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYkphdmEyREIvc3FsL2Jsb2JfbXlzcWwuc3FsCmluZGV4IDRlMzE3OTkuLjMzZDkzZGIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iSmF2YTJEQi9zcWwvYmxvYl9teXNxbC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2JKYXZhMkRCL3NxbC9ibG9iX215c3FsLnNxbApAQCAtMSwxOSArMSwxOSBAQAogZHJvcCB0YWJsZSBNWUJMT0I7CiAKIGNyZWF0ZSB0YWJsZSBNWUJMT0IgKAotCUlEIAlpbnQgcHJpbWFyeSBrZXksCi0JTkFNRQlWQVJDSEFSKDEwMCksCi0JQkxCCUJMT0IoMjU1KSwKLQlCWVRFQkxCCUJMT0IoMjU1KSwKLQlCWVRFQkxCMglCTE9CKDI1NSkKKyAgICBJRCAgICAgaW50IHByaW1hcnkga2V5LAorICAgIE5BTUUgICAgVkFSQ0hBUigxMDApLAorICAgIEJMQiAgICBCTE9CKDI1NSksCisgICAgQllURUJMQiAgICBCTE9CKDI1NSksCisgICAgQllURUJMQjIgICAgQkxPQigyNTUpCiApIEVOR0lORT1Jbm5vREI7CiAKIGNvbW1pdDsKIGluc2VydCBpbnRvIE1ZQkxPQiB2YWx1ZXMgKAotCTEsCi0JJ0FBQScsCi0JJzQ0NDQ0NDQ0NDQnLAotCSc3Nzc3Nzc3Nzc3JywKLQknOTk5OTk5OTk5OScpOworICAgIDEsCisgICAgJ0FBQScsCisgICAgJzQ0NDQ0NDQ0NDQnLAorICAgICc3Nzc3Nzc3Nzc3JywKKyAgICAnOTk5OTk5OTk5OScpOwogCiBjb21taXQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYkphdmEyREIvc3FsL2Jsb2Jfb3JhLnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iSmF2YTJEQi9zcWwvYmxvYl9vcmEuc3FsCmluZGV4IDIxMjhjMDQuLmIwZTdiMTIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iSmF2YTJEQi9zcWwvYmxvYl9vcmEuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iSmF2YTJEQi9zcWwvYmxvYl9vcmEuc3FsCkBAIC0xLDE5ICsxLDE5IEBACiBkcm9wIHRhYmxlIE1ZQkxPQjsKIAogY3JlYXRlIHRhYmxlIE1ZQkxPQiAoCi0JSUQgCWludCBwcmltYXJ5IGtleSwKLQlOQU1FCVZBUkNIQVIyKDEwMCksCi0JQkxCCVJBVygyNTUpLAotCUJZVEVCTEIJUkFXKDI1NSksCi0JQllURUJMQjIJUkFXKDI1NSkKKyAgICBJRCAgICAgaW50IHByaW1hcnkga2V5LAorICAgIE5BTUUgICAgVkFSQ0hBUjIoMTAwKSwKKyAgICBCTEIgICAgUkFXKDI1NSksCisgICAgQllURUJMQiAgICBSQVcoMjU1KSwKKyAgICBCWVRFQkxCMiAgICBSQVcoMjU1KQogKTsKIAogY29tbWl0OwogaW5zZXJ0IGludG8gTVlCTE9CIHZhbHVlcyAoCi0JMSwKLQknQUFBJywKLQknNDQ0NDQ0NDQ0NCcsCi0JJzc3Nzc3Nzc3NzcnLAotCSc5OTk5OTk5OTk5Jyk7CisgICAgMSwKKyAgICAnQUFBJywKKyAgICAnNDQ0NDQ0NDQ0NCcsCisgICAgJzc3Nzc3Nzc3NzcnLAorICAgICc5OTk5OTk5OTk5Jyk7CiAKIGNvbW1pdDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iSmF2YTJEQi9zcWwvYmxvYl9wYnMuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2JKYXZhMkRCL3NxbC9ibG9iX3Bicy5zcWwKaW5kZXggOTkwNzY2Zi4uYmMwNTAxOCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2JKYXZhMkRCL3NxbC9ibG9iX3Bicy5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2JKYXZhMkRCL3NxbC9ibG9iX3Bicy5zcWwKQEAgLTEsMTkgKzEsMTkgQEAKIGRyb3AgdGFibGUgbXlibG9iOwogCiBjcmVhdGUgdGFibGUgbXlibG9iICgKLQlpZCAJaW50IHByaW1hcnkga2V5LAotCW5hbWUJVkFSQ0hBUjIoMTAwKSwKLQlibGIJQkxPQigxMGspLAotCWJ5dGVibGIJQkxPQigxMGspLAotCWJ5dGVibGIyCUJMT0IoMTBrKQorICAgIGlkICAgICBpbnQgcHJpbWFyeSBrZXksCisgICAgbmFtZSAgICBWQVJDSEFSMigxMDApLAorICAgIGJsYiAgICBCTE9CKDEwayksCisgICAgYnl0ZWJsYiAgICBCTE9CKDEwayksCisgICAgYnl0ZWJsYjIgICAgQkxPQigxMGspCiApOwogCiBjb21taXQ7CiBpbnNlcnQgaW50byBteWJsb2IgdmFsdWVzICgKLQkxLAotCSdBQUEnLAotCUNBU1QoJzQ0NDQ0NDQ0NDQnIGFzIEJMT0IpLAotCUNBU1QoJzc3Nzc3Nzc3NzcnIGFzIEJMT0IpLAotCUNBU1QoJzk5OTk5OTk5OTknIGFzIEJMT0IpKTsKKyAgICAxLAorICAgICdBQUEnLAorICAgIENBU1QoJzQ0NDQ0NDQ0NDQnIGFzIEJMT0IpLAorICAgIENBU1QoJzc3Nzc3Nzc3NzcnIGFzIEJMT0IpLAorICAgIENBU1QoJzk5OTk5OTk5OTknIGFzIEJMT0IpKTsKIAogY29tbWl0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2JKYXZhMkRCL3NxbC9ibG9iX3BzcWwuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2JKYXZhMkRCL3NxbC9ibG9iX3BzcWwuc3FsCmluZGV4IDU2NjZhYWQuLjBhYWM4YjEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iSmF2YTJEQi9zcWwvYmxvYl9wc3FsLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYmxvYkphdmEyREIvc3FsL2Jsb2JfcHNxbC5zcWwKQEAgLTEsMTkgKzEsMTkgQEAKIGRyb3AgdGFibGUgTVlCTE9CIGNhc2NhZGU7CiAKIGNyZWF0ZSB0YWJsZSBNWUJMT0IgKAotCUlEIAlpbnQgcHJpbWFyeSBrZXksCi0JTkFNRQlWQVJDSEFSKDEwMCksCi0JQkxCCUJZVEVBLAotCUJZVEVCTEIJQllURUEsCi0JQllURUJMQjIJQllURUEKKyAgICBJRCAgICAgaW50IHByaW1hcnkga2V5LAorICAgIE5BTUUgICAgVkFSQ0hBUigxMDApLAorICAgIEJMQiAgICBCWVRFQSwKKyAgICBCWVRFQkxCICAgIEJZVEVBLAorICAgIEJZVEVCTEIyICAgIEJZVEVBCiApIDsKIAogY29tbWl0OwogaW5zZXJ0IGludG8gTVlCTE9CIHZhbHVlcyAoCi0JMSwKLQknQUFBJywKLQknNDQ0NDQ0NDQ0NCcsCi0JJzc3Nzc3Nzc3NzcnLAotCSc5OTk5OTk5OTk5Jyk7CisgICAgMSwKKyAgICAnQUFBJywKKyAgICAnNDQ0NDQ0NDQ0NCcsCisgICAgJzc3Nzc3Nzc3NzcnLAorICAgICc5OTk5OTk5OTk5Jyk7CiAKIGNvbW1pdDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9ibG9iSmF2YTJEQi9zcWwvYmxvYl9zeWIuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2JKYXZhMkRCL3NxbC9ibG9iX3N5Yi5zcWwKaW5kZXggODZiN2YzOS4uOThhOTVmNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2JKYXZhMkRCL3NxbC9ibG9iX3N5Yi5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Jsb2JKYXZhMkRCL3NxbC9ibG9iX3N5Yi5zcWwKQEAgLTIsMjAgKzIsMjAgQEAKIGdvCiAKIGNyZWF0ZSB0YWJsZSBNWUJMT0IgKAotCUlEIAlJTlQgcHJpbWFyeSBrZXkgTk9UIE5VTEwsCi0JTkFNRQlWQVJDSEFSKDEwMCksCi0JQkxCCUlNQUdFLAotCUJZVEVCTEIJSU1BR0UsCi0JQllURUJMQjIJSU1BR0UKKyAgICBJRCAgICAgSU5UIHByaW1hcnkga2V5IE5PVCBOVUxMLAorICAgIE5BTUUgICAgVkFSQ0hBUigxMDApLAorICAgIEJMQiAgICBJTUFHRSwKKyAgICBCWVRFQkxCICAgIElNQUdFLAorICAgIEJZVEVCTEIyICAgIElNQUdFCiApCiBnbwogCiBpbnNlcnQgaW50byBNWUJMT0IgdmFsdWVzICgKLQkxLAotCSdBQUEnLAotCSc0NDQ0NDQ0NDQ0JywKLQknNzc3Nzc3Nzc3NycsCi0JJzk5OTk5OTk5OTknKQorICAgIDEsCisgICAgJ0FBQScsCisgICAgJzQ0NDQ0NDQ0NDQnLAorICAgICc3Nzc3Nzc3Nzc3JywKKyAgICAnOTk5OTk5OTk5OScpCiAKIGdvCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvYnVpbGQueG1sCmluZGV4IDU3YWM0YWUuLjA1ZTEwNTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2J1aWxkLnhtbApAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPHJlY29yZCBuYW1lPSJjbXAub3V0cHV0IiBhY3Rpb249InN0YXJ0IiAvPgogCi0JPGFudCBkaXI9ImJsb2IiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImJsb2IiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJjYXNjYWRlRGVsZXRlIiB0YXJnZXQ9ImFsbCIvPgogCiA8IS0tIE5lZWQgdG8gZml4IHRoZSBjbGllbnQgdG8gcmVwb3J0IHBhc3MvZmFpbCBzdGF0dXMKQEAgLTI2Niw5ICsyNjYsOSBAQAogCiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamIzMCB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWpiMzAgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggY2U3M2ZiMC4uYzg5N2QxMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwzMCArMTUsMzAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IkNhc2NhZGVEZWxldGUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1jbXAtbWFwcGluZ3MueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tY21wLW1hcHBpbmdzLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiCiAgICAgICAgIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIKICAgICAgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamIueG1sIgotCXZhbHVlPSJkZXNjcmlwdG9yL2VqYi54bWwiLz4KKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9lamIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY2RjbGllbnQueG1sIgotCXZhbHVlPSJkZXNjcmlwdG9yL2NkY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvY2RjbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0id2FyLmZpbGUiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jZGNsaWVudC53YXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9idWlsZC54bWwKaW5kZXggYmJiMTc5MS4uYzU2YmU3OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDIsMjAgKzQyLDIwIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgotCTwvYW50Y2FsbD4KKyAgICA8L2FudGNhbGw+CiAKLQkgPC90YXJnZXQ+CisgICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIgotCSAgICAgIHZhbHVlPSIqKi9TZXJ2bGV0LmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIgorICAgICAgICAgIHZhbHVlPSIqKi9TZXJ2bGV0LmNsYXNzIiAvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQSouY2xhc3MsKiovQiouY2xhc3MsKiovQyouY2xhc3MsKiovRCouY2xhc3MsKiovTG9jYWwqLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQUhvbWUuY2xhc3MsKiovQS5jbGFzcywqKi9CSG9tZS5jbGFzcywqKi9CLmNsYXNzLCoqL0NIb21lLmNsYXNzLCoqL0MuY2xhc3MsKiovREhvbWUuY2xhc3MsKiovRC5jbGFzcywqKi9Mb2NhbEFIb21lLmNsYXNzLCoqL0xvY2FsQS5jbGFzcywqKi9Mb2NhbEJIb21lLmNsYXNzLCoqL0xvY2FsQi5jbGFzcywqKi9Mb2NhbENIb21lLmNsYXNzLCoqL0xvY2FsQy5jbGFzcywqKi9Mb2NhbERIb21lLmNsYXNzLCoqL0xvY2FsRC5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgogCkBAIC02MywxNiArNjMsMTYgQEAKIAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJQcmVwYXJpbmcgZWFyIGZpbGUgd2l0aCBwcm9wZXIgeG1sIGZpbGVzIiAvPgogICAgICAgICA8dW5qYXIgc3JjPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIGRlc3Q9IiR7VEVNUERJUn0iIG92ZXJ3cml0ZT0idHJ1ZSIgLz4KLSAgICAJPGVjaG8gbWVzc2FnZT0iQ29weWluZyB4bWwgZmlsZSB0byB0aGUgZWFyIiAvPgotCTxjb3B5IGZpbGU9IiR7ZWpiLnhtbH0iIHRvZGlyPSIke1RFTVBESVJ9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLQk8Y29weSBmaWxlPSIke2NkY2xpZW50LnhtbH0iIHRvZGlyPSIke1RFTVBESVJ9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iQ29weWluZyB4bWwgZmlsZSB0byB0aGUgZWFyIiAvPgorICAgIDxjb3B5IGZpbGU9IiR7ZWpiLnhtbH0iIHRvZGlyPSIke1RFTVBESVJ9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICA8Y29weSBmaWxlPSIke2NkY2xpZW50LnhtbH0iIHRvZGlyPSIke1RFTVBESVJ9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+CiAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke1RFTVBESVJ9IiAvPgogICAgICAgIDwvamFyPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Nhc2NhZGVEZWxldGVfZGVyYnkuc3FsIi8+CkBAIC05MSwyMiArOTEsMjIgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iJHtiYXNlZGlyfS8uLi9jb21tb24vZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9jYXNjYWRlRGVsZXRlX2RlcmJ5LnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBhbGwKICAgICAgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGUwMjA2ODEuLjFiMmI4NjEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMzLDEyICszMywxMiBAQAogICogQHZlcnNpb24KICAqLwogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTVEFSVCIpOwogICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiY29weVNlbWFudGljcyIpOwpAQCAtMTA4LDEwICsxMDgsMTAgQEAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiBleGNlcHRpb246Iik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBjYXNjYWRlRGVsZXRlIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBjYXNjYWRlRGVsZXRlIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotCSAgc3RhdC5wcmludFN1bW1hcnkoImNhc2NhZGVEZWxldGUiKTsKKyAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJjYXNjYWRlRGVsZXRlIik7CiAKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggOTVlZGNlMi4uN2QzMDVmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTM2LDE0ICszNiwxNCBAQAogICAgICAgICAgICAgPGVqYi1yZWYtbmFtZT5lamIvU2ltcGxlRDwvZWpiLXJlZi1uYW1lPgogICAgICAgICAgICAgPGpuZGktbmFtZT5sb2NhbGVqYnMvU2ltcGxlRDwvam5kaS1uYW1lPgogICAgICAgICAgIDwvZWpiLXJlZj4KLQk8cmVmcmVzaC1wZXJpb2QtaW4tc2Vjb25kcz42MDA8L3JlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+Ci0JPGJlYW4tY2FjaGU+Ci0JCTxtYXgtY2FjaGUtc2l6ZT42MDwvbWF4LWNhY2hlLXNpemU+Ci0JCTxpcy1jYWNoZS1vdmVyZmxvdy1hbGxvd2VkPnRydWU8L2lzLWNhY2hlLW92ZXJmbG93LWFsbG93ZWQ+Ci0JCTxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgotCQk8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+NjAwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+Ci0JCTx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5GSUZPPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4KLQk8L2JlYW4tY2FjaGU+CisgICAgPHJlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+NjAwPC9yZWZyZXNoLXBlcmlvZC1pbi1zZWNvbmRzPgorICAgIDxiZWFuLWNhY2hlPgorICAgICAgICA8bWF4LWNhY2hlLXNpemU+NjA8L21heC1jYWNoZS1zaXplPgorICAgICAgICA8aXMtY2FjaGUtb3ZlcmZsb3ctYWxsb3dlZD50cnVlPC9pcy1jYWNoZS1vdmVyZmxvdy1hbGxvd2VkPgorICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjAwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjYwMDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+RklGTzwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+CisgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogICAgIDxlamI+CiAgICAgICAgIDxlamItbmFtZT5CPC9lamItbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9BLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvQS5qYXZhCmluZGV4IDhjNGE5MzcuLmI0N2UwM2QgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9BLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0EuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogICovCiAKIHB1YmxpYyBpbnRlcmZhY2UgQSBleHRlbmRzIGpha2FydGEuZWpiLkVKQk9iamVjdCB7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhZGRBbGwoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9BQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0FCZWFuLmphdmEKaW5kZXggZjY3MWM3NS4uZTVkMDBkZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0FCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0FCZWFuLmphdmEKQEAgLTI4LDE0ICsyOCwxNCBAQAogCiAKIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBQmVhbiBpbXBsZW1lbnRzIGpha2FydGEuZWpiLkVudGl0eUJlYW4gewotICAgIAorCiAgICAgcHJpdmF0ZSBqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0IGNvbnRleHQ7CiAgICAgTG9jYWxCSG9tZSBiaG9tZTsKICAgICBMb2NhbENIb21lIGNob21lOwogICAgIExvY2FsREhvbWUgZGhvbWU7CiAKLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI3NldEVudGl0eUNvbnRleHQoamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCkKICAgICAgKi8KQEAgLTQ5LDI0ICs0OSwyNCBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJBY3RpdmF0ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUGFzc2l2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUmVtb3ZlKCkKICAgICAgKi8KQEAgLTc5LDc5ICs3OSw3OSBAQAogICAgICAgICBmb3IgKGphdmEudXRpbC5JdGVyYXRvciBpdCA9IGJzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspIHsKICAgICAgICAgICAgICgoTG9jYWxCKWl0Lm5leHQoKSkuY2FzY2FkZURlbGV0ZUZyb21BKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiN1bnNldEVudGl0eUNvbnRleHQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsKICAgICAgICAgY29udGV4dD1udWxsOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYkxvYWQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7Ci0gICAgICAgIAorCiAgICAgfQogCi0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiU3RvcmUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuSW50ZWdlciBnZXRJZCgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldElkKGphdmEubGFuZy5JbnRlZ2VyIGlkKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuU3RyaW5nIGdldE5hbWUoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXROYW1lKGphdmEubGFuZy5TdHJpbmcgbmFtZSk7Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgamF2YS51dGlsLkNvbGxlY3Rpb24gZ2V0RHMoKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldERzKGphdmEudXRpbC5Db2xsZWN0aW9uIGRzKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBqYXZhLnV0aWwuQ29sbGVjdGlvbiBnZXRDcygpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0Q3MoamF2YS51dGlsLkNvbGxlY3Rpb24gY3MpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IGphdmEudXRpbC5Db2xsZWN0aW9uIGdldEJzKCk7Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRCcyhqYXZhLnV0aWwuQ29sbGVjdGlvbiBicyk7Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS5sYW5nLkludGVnZXIgZWpiQ3JlYXRlKGphdmEubGFuZy5JbnRlZ2VyIGlkLCBqYXZhLmxhbmcuU3RyaW5nIG5hbWUpIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24gewogICAgICAgICBzZXRJZChpZCk7CiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoamF2YS5sYW5nLkludGVnZXIgaWQsIGphdmEubGFuZy5TdHJpbmcgbmFtZSkgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWRkQWxsKCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWJ1ZzogQSBhZGRCIik7CiAgICAgICAgICAgICBDb2xsZWN0aW9uIGJzID0gYmhvbWUuZmluZEFsbCgpOwogICAgICAgICAgICAgZ2V0QnMoKS5hZGRBbGwoYnMpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVidWc6IEEgYWRkQyIpOwogICAgICAgICAgICAgQ29sbGVjdGlvbiBjcyA9IGNob21lLmZpbmRBbGwoKTsKICAgICAgICAgICAgIGdldENzKCkuYWRkQWxsKGNzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlYnVnOiBBIGFkZEQiKTsKICAgICAgICAgICAgIENvbGxlY3Rpb24gZHMgPSBkaG9tZS5maW5kQWxsKCk7CiAgICAgICAgICAgICBnZXREcygpLmFkZEFsbChkcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWJ1ZzogQSBhZGRPdGhlcnMiKTsKICAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBicy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KSB7CiAgICAgICAgICAgICAgICAgTG9jYWxCIGIgPSAoTG9jYWxCKWl0Lm5leHQoKTsKICAgICAgICAgICAgICAgICBJbnRlZ2VyIHBrID0gYi5nZXRJZCgpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWJ1ZzogQSBhZGQgdG8gQiAiICsgcGspOwogICAgICAgICAgICAgICAgIExvY2FsQyBjID0gY2hvbWUuZmluZEJ5UHJpbWFyeUtleShwayk7CiAgICAgICAgICAgICAgICAgYi5zZXRDKGMpOwpAQCAtMTY2LDIxICsxNjYsMjEgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBMb2NhbEJIb21lIGxvb2t1cEIoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWJ1ZzogQSBsb29rdXBCIik7CiAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUIiKTsKICAgICAgICAgcmV0dXJuIChMb2NhbEJIb21lKSBvYmpyZWY7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBMb2NhbENIb21lIGxvb2t1cEMoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWJ1ZzogQSBsb29rdXBDIik7CiAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUMiKTsKICAgICAgICAgcmV0dXJuIChMb2NhbENIb21lKSBvYmpyZWY7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBMb2NhbERIb21lIGxvb2t1cEQoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWJ1ZzogQSBsb29rdXBEIik7CiAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0FIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvQUhvbWUuamF2YQppbmRleCAwZGViYTI0Li5hMzMwYmQzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvQUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvQUhvbWUuamF2YQpAQCAtMjUsMTIgKzI1LDEyIEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBBSG9tZSBleHRlbmRzIGpha2FydGEuZWpiLkVKQkhvbWUgewotICAgIAorCiAgICAgcHVibGljIGNhc2NhZGVEZWxldGUuQSBmaW5kQnlQcmltYXJ5S2V5KGphdmEubGFuZy5JbnRlZ2VyIGFLZXkpCiAgICAgdGhyb3dzIGpha2FydGEuZWpiLkZpbmRlckV4Y2VwdGlvbiwgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIEEgY3JlYXRlKGphdmEubGFuZy5JbnRlZ2VyIGlkLCBqYXZhLmxhbmcuU3RyaW5nIG5hbWUpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLnV0aWwuQ29sbGVjdGlvbiBmaW5kQWxsKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0IuamF2YQppbmRleCA3MTEwYjhjLi5iYzk0YmUyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9CLmphdmEKQEAgLTI1LDYgKzI1LDYgQEAKICAqLwogCiBwdWJsaWMgaW50ZXJmYWNlIEIgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJPYmplY3QgewotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9CQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0JCZWFuLmphdmEKaW5kZXggYmM3NWYwZS4uNDZkZjlhNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0JCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0JCZWFuLmphdmEKQEAgLTI2LDM2ICsyNiwzNiBAQAogCiAKIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCQmVhbiBpbXBsZW1lbnRzIGpha2FydGEuZWpiLkVudGl0eUJlYW4gewotICAgIAorCiAgICAgcHJpdmF0ZSBqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0IGNvbnRleHQ7CiAgICAgcHJpdmF0ZSBib29sZWFuIGNhc2NhZGVEZWxldGVGcm9tQSA9IGZhbHNlOwogICAgIHByaXZhdGUgYm9vbGVhbiBjYXNjYWRlRGVsZXRlRnJvbUMgPSBmYWxzZTsKLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI3NldEVudGl0eUNvbnRleHQoamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQgYUNvbnRleHQpIHsKICAgICAgICAgY29udGV4dD1hQ29udGV4dDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJBY3RpdmF0ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUGFzc2l2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUmVtb3ZlKCkKICAgICAgKi8KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWJ1ZzogQiBlamJSZW1vdmUiKTsKICAgICAgICAgY2FzY2FkZURlbGV0ZS5Mb2NhbEEgYSA9IGdldEEoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBOiAiICsgKChhPT1udWxsKT8gIm51bGwiIDogYS5nZXROYW1lKCkpKTsKLSAgICAgICAgCisKICAgICAgICAgY2FzY2FkZURlbGV0ZS5Mb2NhbEMgYyA9IGdldEMoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDOiAiICsgKChjPT1udWxsKT8gIm51bGwiIDogYy5nZXROYW1lKCkpKTsKIApAQCAtODEsNjkgKzgxLDY5IEBACiAgICAgICAgIH0KIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRzOiAiICsgZ2V0RHMoKS5zaXplKCkpOwotICAgICAgICAKLSAgICAgICAgCisKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI3Vuc2V0RW50aXR5Q29udGV4dCgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgewogICAgICAgICBjb250ZXh0PW51bGw7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiTG9hZCgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKICAgICAgICAgY2FzY2FkZURlbGV0ZUZyb21BID0gZmFsc2U7CiAgICAgICAgIGNhc2NhZGVEZWxldGVGcm9tQyA9IGZhbHNlOwotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYlN0b3JlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLkludGVnZXIgZ2V0SWQoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRJZChqYXZhLmxhbmcuSW50ZWdlciBpZCk7Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLlN0cmluZyBnZXROYW1lKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nIG5hbWUpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IGphdmEudXRpbC5Db2xsZWN0aW9uIGdldERzKCk7Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXREcyhqYXZhLnV0aWwuQ29sbGVjdGlvbiBkcyk7Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgY2FzY2FkZURlbGV0ZS5Mb2NhbEMgZ2V0QygpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0QyhjYXNjYWRlRGVsZXRlLkxvY2FsQyBjKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBjYXNjYWRlRGVsZXRlLkxvY2FsQSBnZXRBKCk7Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRBKGNhc2NhZGVEZWxldGUuTG9jYWxBIGEpOwotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5JbnRlZ2VyIGVqYkNyZWF0ZShqYXZhLmxhbmcuSW50ZWdlciBpZCwgamF2YS5sYW5nLlN0cmluZyBuYW1lKSB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIHsKICAgICAgICAgc2V0SWQoaWQpOwogICAgICAgICBzZXROYW1lKG5hbWUpOwogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKGphdmEubGFuZy5JbnRlZ2VyIGlkLCBqYXZhLmxhbmcuU3RyaW5nIG5hbWUpIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24gewogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGNhc2NhZGVEZWxldGVGcm9tQSgpIHsKICAgICAgICAgY2FzY2FkZURlbGV0ZUZyb21BID0gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBjYXNjYWRlRGVsZXRlRnJvbUMoKSB7CiAgICAgICAgIGNhc2NhZGVEZWxldGVGcm9tQyA9IHRydWU7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvQkhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9CSG9tZS5qYXZhCmluZGV4IDJmNGMxMzIuLjQxNmJmNGEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9CSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9CSG9tZS5qYXZhCkBAIC0yNSwxMSArMjUsMTEgQEAKICAqLwogCiBwdWJsaWMgaW50ZXJmYWNlIEJIb21lIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCSG9tZSB7Ci0gICAgCisKICAgICBwdWJsaWMgY2FzY2FkZURlbGV0ZS5CIGZpbmRCeVByaW1hcnlLZXkoamF2YS5sYW5nLkludGVnZXIgYUtleSkgdGhyb3dzIGpha2FydGEuZWpiLkZpbmRlckV4Y2VwdGlvbiwgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIGphdmEudXRpbC5Db2xsZWN0aW9uIGZpbmRBbGwoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgQiBjcmVhdGUoamF2YS5sYW5nLkludGVnZXIgaWQsIGphdmEubGFuZy5TdHJpbmcgbmFtZSkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvQy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0MuamF2YQppbmRleCAxZDFkMzM3Li41NThlZGMzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvQy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9DLmphdmEKQEAgLTI1LDYgKzI1LDYgQEAKICAqLwogCiBwdWJsaWMgaW50ZXJmYWNlIEMgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJPYmplY3QgewotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9DQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0NCZWFuLmphdmEKaW5kZXggZDYwMGI5MS4uYTBiY2UzYyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0NCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0NCZWFuLmphdmEKQEAgLTI2LDQ3ICsyNiw0NyBAQAogCiAKIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBDQmVhbiBpbXBsZW1lbnRzIGpha2FydGEuZWpiLkVudGl0eUJlYW4gewotICAgIAorCiAgICAgcHJpdmF0ZSBqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0IGNvbnRleHQ7CiAgICAgcHJpdmF0ZSBib29sZWFuIGNhc2NhZGVEZWxldGVGcm9tQSA9IGZhbHNlOwogICAgIHByaXZhdGUgYm9vbGVhbiBjYXNjYWRlRGVsZXRlRnJvbUIgPSBmYWxzZTsKLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI3NldEVudGl0eUNvbnRleHQoamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQgYUNvbnRleHQpIHsKICAgICAgICAgY29udGV4dD1hQ29udGV4dDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJBY3RpdmF0ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUGFzc2l2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUmVtb3ZlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVidWc6IEMgZWpiUmVtb3ZlIik7Ci0gICAgICAgIAorCiAgICAgICAgIGNhc2NhZGVEZWxldGUuTG9jYWxBIGEgPSBnZXRBKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQTogIiArICgoYT09bnVsbCk/ICJudWxsIiA6IGEuZ2V0TmFtZSgpKSk7CiAgICAgICAgIGlmIChjYXNjYWRlRGVsZXRlRnJvbUEgJiYgKGEgIT0gbnVsbCkgKQogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiSW4gQyAtIGdldEEoKSBub3QgTlVMTCBpbiBDYXNjYWRlRGVsZXRlRnJvbUEhIik7Ci0gICAgICAgIAorCiAgICAgICAgIGNhc2NhZGVEZWxldGUuTG9jYWxCIGIgPSBnZXRCKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQjogIiArICgoYj09bnVsbCk/ICJudWxsIiA6IGIuZ2V0TmFtZSgpKSk7CiAgICAgICAgIGlmIChiICE9IG51bGwpIHsKQEAgLTc2LDY1ICs3Niw2NSBAQAogICAgICAgICAgICAgICAgIGIuY2FzY2FkZURlbGV0ZUZyb21DKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEczogIiArIGdldERzKCkuc2l6ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiN1bnNldEVudGl0eUNvbnRleHQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsKICAgICAgICAgY29udGV4dD1udWxsOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYkxvYWQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7CiAgICAgICAgIGNhc2NhZGVEZWxldGVGcm9tQSA9IGZhbHNlOwogICAgICAgICBjYXNjYWRlRGVsZXRlRnJvbUIgPSBmYWxzZTsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJTdG9yZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5JbnRlZ2VyIGdldElkKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0SWQoamF2YS5sYW5nLkludGVnZXIgaWQpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5TdHJpbmcgZ2V0TmFtZSgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldE5hbWUoamF2YS5sYW5nLlN0cmluZyBuYW1lKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBqYXZhLnV0aWwuQ29sbGVjdGlvbiBnZXREcygpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0RHMoamF2YS51dGlsLkNvbGxlY3Rpb24gZHMpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IGNhc2NhZGVEZWxldGUuTG9jYWxBIGdldEEoKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldEEoY2FzY2FkZURlbGV0ZS5Mb2NhbEEgYSk7Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgY2FzY2FkZURlbGV0ZS5Mb2NhbEIgZ2V0QigpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0QihjYXNjYWRlRGVsZXRlLkxvY2FsQiBiKTsKLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuSW50ZWdlciBlamJDcmVhdGUoamF2YS5sYW5nLkludGVnZXIgaWQsIGphdmEubGFuZy5TdHJpbmcgbmFtZSkgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIHNldElkKGlkKTsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZShqYXZhLmxhbmcuSW50ZWdlciBpZCwgamF2YS5sYW5nLlN0cmluZyBuYW1lKSB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBjYXNjYWRlRGVsZXRlRnJvbUEoKSB7CiAgICAgICAgIGNhc2NhZGVEZWxldGVGcm9tQSA9IHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0NIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvQ0hvbWUuamF2YQppbmRleCA3NTM3NmI4Li4xM2JiZjk0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvQ0hvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvQ0hvbWUuamF2YQpAQCAtMjUsMTEgKzI1LDExIEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBDSG9tZSBleHRlbmRzIGpha2FydGEuZWpiLkVKQkhvbWUgewotICAgIAorCiAgICAgcHVibGljIGNhc2NhZGVEZWxldGUuQyBmaW5kQnlQcmltYXJ5S2V5KGphdmEubGFuZy5JbnRlZ2VyIGFLZXkpIHRocm93cyBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb24sIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLnV0aWwuQ29sbGVjdGlvbiBmaW5kQWxsKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIEMgY3JlYXRlKGphdmEubGFuZy5JbnRlZ2VyIGlkLCBqYXZhLmxhbmcuU3RyaW5nIG5hbWUpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9ELmphdmEKaW5kZXggM2FkNDRhYS4uN2Y4NTQ3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvRC5qYXZhCkBAIC0yNSw2ICsyNSw2IEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBEIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCT2JqZWN0IHsKLSAgICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvREJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9EQmVhbi5qYXZhCmluZGV4IDMxMzYzNWEuLjgyNDYwMjUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9EQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9EQmVhbi5qYXZhCkBAIC0yNiwxMDAgKzI2LDEwMCBAQAogCiAKIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBEQmVhbiBpbXBsZW1lbnRzIGpha2FydGEuZWpiLkVudGl0eUJlYW4gewotICAgIAorCiAgICAgcHJpdmF0ZSBqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0IGNvbnRleHQ7Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNzZXRFbnRpdHlDb250ZXh0KGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0IGFDb250ZXh0KSB7CiAgICAgICAgIGNvbnRleHQ9YUNvbnRleHQ7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiQWN0aXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYlBhc3NpdmF0ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYlJlbW92ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlYnVnOiBEIGVqYlJlbW92ZSIpOwotICAgICAgICAKKwogICAgICAgICBjYXNjYWRlRGVsZXRlLkxvY2FsQSBhID0gZ2V0QSgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkE6ICIgKyAoKGE9PW51bGwpPyAibnVsbCIgOiBhLmdldE5hbWUoKSkpOwotICAgICAgICAKKwogICAgICAgICBjYXNjYWRlRGVsZXRlLkxvY2FsQiBiID0gZ2V0QigpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkI6ICIgKyAoKGI9PW51bGwpPyAibnVsbCIgOiBiLmdldE5hbWUoKSkpOwotICAgICAgICAKKwogICAgICAgICBjYXNjYWRlRGVsZXRlLkxvY2FsQyBjID0gZ2V0QygpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkM6ICIgKyAoKGM9PW51bGwpPyAibnVsbCIgOiBjLmdldE5hbWUoKSkpOwotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI3Vuc2V0RW50aXR5Q29udGV4dCgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgewogICAgICAgICBjb250ZXh0PW51bGw7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiTG9hZCgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJTdG9yZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5JbnRlZ2VyIGdldElkKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0SWQoamF2YS5sYW5nLkludGVnZXIgaWQpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5TdHJpbmcgZ2V0TmFtZSgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldE5hbWUoamF2YS5sYW5nLlN0cmluZyBuYW1lKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBjYXNjYWRlRGVsZXRlLkxvY2FsQSBnZXRBKCk7Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRBKGNhc2NhZGVEZWxldGUuTG9jYWxBIGEpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IGNhc2NhZGVEZWxldGUuTG9jYWxCIGdldEIoKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldEIoY2FzY2FkZURlbGV0ZS5Mb2NhbEIgYik7Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgY2FzY2FkZURlbGV0ZS5Mb2NhbEMgZ2V0QygpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0QyhjYXNjYWRlRGVsZXRlLkxvY2FsQyBjKTsKLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuSW50ZWdlciBlamJDcmVhdGUoamF2YS5sYW5nLkludGVnZXIgaWQsIGphdmEubGFuZy5TdHJpbmcgbmFtZSkgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIHNldElkKGlkKTsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZShqYXZhLmxhbmcuSW50ZWdlciBpZCwgamF2YS5sYW5nLlN0cmluZyBuYW1lKSB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIHsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9ESG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0RIb21lLmphdmEKaW5kZXggNWYwOWI4NS4uOWY4Zjg4MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0RIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0RIb21lLmphdmEKQEAgLTI1LDExICsyNSwxMSBAQAogICovCiAKIHB1YmxpYyBpbnRlcmZhY2UgREhvbWUgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJIb21lIHsKLSAgICAKKwogICAgIHB1YmxpYyBjYXNjYWRlRGVsZXRlLkQgZmluZEJ5UHJpbWFyeUtleShqYXZhLmxhbmcuSW50ZWdlciBhS2V5KSB0aHJvd3MgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uLCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS51dGlsLkNvbGxlY3Rpb24gZmluZEFsbCgpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sIGpha2FydGEuZWpiLkZpbmRlckV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBEIGNyZWF0ZShqYXZhLmxhbmcuSW50ZWdlciBpZCwgamF2YS5sYW5nLlN0cmluZyBuYW1lKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9Mb2NhbEEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9Mb2NhbEEuamF2YQppbmRleCA4MDgzOWVlLi4wOWE4OTU5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvTG9jYWxBLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0xvY2FsQS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBMb2NhbEEgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJMb2NhbE9iamVjdCB7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKLSAgICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvTG9jYWxBSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0xvY2FsQUhvbWUuamF2YQppbmRleCBkMGI5NTc5Li45YWNiODk0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvTG9jYWxBSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9Mb2NhbEFIb21lLmphdmEKQEAgLTI1LDEwICsyNSwxMCBAQAogICovCiAKIHB1YmxpYyBpbnRlcmZhY2UgTG9jYWxBSG9tZSBleHRlbmRzIGpha2FydGEuZWpiLkVKQkxvY2FsSG9tZSB7Ci0gICAgCisKICAgICBwdWJsaWMgY2FzY2FkZURlbGV0ZS5Mb2NhbEEgZmluZEJ5UHJpbWFyeUtleShqYXZhLmxhbmcuSW50ZWdlciBhS2V5KQogICAgIHRocm93cyBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS51dGlsLkNvbGxlY3Rpb24gZmluZEFsbCgpIHRocm93cyBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9Mb2NhbEIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9Mb2NhbEIuamF2YQppbmRleCAwODlmMGNhLi5iZDkxMGUzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvTG9jYWxCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0xvY2FsQi5qYXZhCkBAIC0yNSwxOCArMjUsMTggQEAKICAqLwogCiBwdWJsaWMgaW50ZXJmYWNlIExvY2FsQiBleHRlbmRzIGpha2FydGEuZWpiLkVKQkxvY2FsT2JqZWN0IHsKLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuSW50ZWdlciBnZXRJZCgpOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0QyhjYXNjYWRlRGVsZXRlLkxvY2FsQyBjKTsKLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLnV0aWwuQ29sbGVjdGlvbiBnZXREcygpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCk7CiAKICAgICBwdWJsaWMgdm9pZCBjYXNjYWRlRGVsZXRlRnJvbUEoKTsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNhc2NhZGVEZWxldGVGcm9tQygpOwotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9Mb2NhbEJIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvTG9jYWxCSG9tZS5qYXZhCmluZGV4IDEzY2RmYTMuLjE0ZTlkZjAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9Mb2NhbEJIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0xvY2FsQkhvbWUuamF2YQpAQCAtMjUsMTAgKzI1LDEwIEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBMb2NhbEJIb21lIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCTG9jYWxIb21lIHsKLSAgICAKKwogICAgIHB1YmxpYyBjYXNjYWRlRGVsZXRlLkxvY2FsQiBmaW5kQnlQcmltYXJ5S2V5KGphdmEubGFuZy5JbnRlZ2VyIGFLZXkpCiAgICAgdGhyb3dzIGpha2FydGEuZWpiLkZpbmRlckV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLnV0aWwuQ29sbGVjdGlvbiBmaW5kQWxsKCkgdGhyb3dzIGpha2FydGEuZWpiLkZpbmRlckV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0xvY2FsQy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0xvY2FsQy5qYXZhCmluZGV4IDQ0ZDM4YjkuLjU0ZTg1YjUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9Mb2NhbEMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvTG9jYWxDLmphdmEKQEAgLTI1LDE0ICsyNSwxNCBAQAogICovCiAKIHB1YmxpYyBpbnRlcmZhY2UgTG9jYWxDIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCTG9jYWxPYmplY3QgewotICAgIAorCiAgICAgcHVibGljIGphdmEudXRpbC5Db2xsZWN0aW9uIGdldERzKCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKIAogICAgIHB1YmxpYyB2b2lkIGNhc2NhZGVEZWxldGVGcm9tQSgpOwogCiAgICAgcHVibGljIHZvaWQgY2FzY2FkZURlbGV0ZUZyb21CKCk7Ci0gICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvTG9jYWxDSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0xvY2FsQ0hvbWUuamF2YQppbmRleCBiMjY2NzU2Li43OTYxNWI1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvTG9jYWxDSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9Mb2NhbENIb21lLmphdmEKQEAgLTI1LDEwICsyNSwxMCBAQAogICovCiAKIHB1YmxpYyBpbnRlcmZhY2UgTG9jYWxDSG9tZSBleHRlbmRzIGpha2FydGEuZWpiLkVKQkxvY2FsSG9tZSB7Ci0gICAgCisKICAgICBwdWJsaWMgY2FzY2FkZURlbGV0ZS5Mb2NhbEMgZmluZEJ5UHJpbWFyeUtleShqYXZhLmxhbmcuSW50ZWdlciBhS2V5KQogICAgIHRocm93cyBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS51dGlsLkNvbGxlY3Rpb24gZmluZEFsbCgpIHRocm93cyBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9Mb2NhbEQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9Mb2NhbEQuamF2YQppbmRleCA3ODUwMjJkLi5iY2RlY2IwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvTG9jYWxELmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0xvY2FsRC5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBMb2NhbEQgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJMb2NhbE9iamVjdCB7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKLSAgICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvTG9jYWxESG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvZWpiL0xvY2FsREhvbWUuamF2YQppbmRleCAzZWZjNGRlLi43ZmVhMDIxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9lamIvTG9jYWxESG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL2VqYi9Mb2NhbERIb21lLmphdmEKQEAgLTI1LDEyICsyNSwxMiBAQAogICovCiAKIHB1YmxpYyBpbnRlcmZhY2UgTG9jYWxESG9tZSBleHRlbmRzIGpha2FydGEuZWpiLkVKQkxvY2FsSG9tZSB7Ci0gICAgCisKICAgICBwdWJsaWMgY2FzY2FkZURlbGV0ZS5Mb2NhbEQgZmluZEJ5UHJpbWFyeUtleShqYXZhLmxhbmcuSW50ZWdlciBhS2V5KQogICAgIHRocm93cyBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS51dGlsLkNvbGxlY3Rpb24gZmluZEFsbCgpIHRocm93cyBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS51dGlsLkNvbGxlY3Rpb24gZmluZEluUmFuZ2UoamF2YS5sYW5nLkludGVnZXIgcDAsIGphdmEubGFuZy5JbnRlZ2VyIHAxKSB0aHJvd3MgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9zZXJ2bGV0L1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL3NlcnZsZXQvU2VydmxldC5qYXZhCmluZGV4IGI0Nzk2MmIuLmY3Mzk1MjcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL3NlcnZsZXQvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL3NlcnZsZXQvU2VydmxldC5qYXZhCkBAIC0zMCwyMCArMzAsMjAgQEAKICAqIEB2ZXJzaW9uCiAgKi8KIHB1YmxpYyBjbGFzcyBTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewotICAgIAorCiAgICAgLyoqIEluaXRpYWxpemVzIHRoZSBzZXJ2bGV0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKiBEZXN0cm95cyB0aGUgc2VydmxldC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKiBQcm9jZXNzZXMgcmVxdWVzdHMgZm9yIGJvdGggSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IGFuZCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2RzLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC01MiwxMyArNTIsMTMgQEAKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7CiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgamF2YS5pby5QcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAKKwogICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5TZXJ2bGV0PC90aXRsZT4iKTsKICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwotICAgICAgICAgCisKICAgICAgICAgb3V0LnByaW50bG4oIjwvYm9keT4iKTsKICAgICAgICAgb3V0LnByaW50bG4oIjwvaHRtbD4iKTsKICAgICAgICAgdHJ5IHsKQEAgLTc3LDcgKzc3LDcgQEAKICAgICAgICAgICAgIGNhc2NhZGVEZWxldGUuQ0hvbWUgY2hvbWUgPQogICAgICAgICAgICAgKGNhc2NhZGVEZWxldGUuQ0hvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgIGNhc2NhZGVEZWxldGUuQ0hvbWUuY2xhc3MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9SZW1vdGVEIik7CiAgICAgICAgICAgICBjYXNjYWRlRGVsZXRlLkRIb21lIGRob21lID0KICAgICAgICAgICAgIChjYXNjYWRlRGVsZXRlLkRIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCkBAIC04NSwyNyArODUsMjcgQEAKIAogCiAgICAgICAgICAgICBjYXNjYWRlRGVsZXRlLkEgYWJlYW4gPSBhaG9tZS5jcmVhdGUobmV3IEludGVnZXIoMSksICJBMSIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGNhc2NhZGVEZWxldGUuQiBiYmVhbiA9IGJob21lLmNyZWF0ZShuZXcgSW50ZWdlcigxMDApLCAiQjEwMCIpOwogICAgICAgICAgICAgYmJlYW4gPSBiaG9tZS5jcmVhdGUobmV3IEludGVnZXIoMjAwKSwgIkIyMDAiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjYXNjYWRlRGVsZXRlLkMgY2JlYW4gPSBjaG9tZS5jcmVhdGUobmV3IEludGVnZXIoMTAwKSwgIkMxMDAiKTsKICAgICAgICAgICAgIGNiZWFuID0gY2hvbWUuY3JlYXRlKG5ldyBJbnRlZ2VyKDIwMCksICJDMjAwIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgY2FzY2FkZURlbGV0ZS5EIGRiZWFuID0gZGhvbWUuY3JlYXRlKG5ldyBJbnRlZ2VyKDEwMDApLCAiRDEwMDAiKTsKICAgICAgICAgICAgIGRiZWFuID0gZGhvbWUuY3JlYXRlKG5ldyBJbnRlZ2VyKDExMDApLCAiRDExMDAiKTsKICAgICAgICAgICAgIGRiZWFuID0gZGhvbWUuY3JlYXRlKG5ldyBJbnRlZ2VyKDIwMDApLCAiRDIwMDAiKTsKICAgICAgICAgICAgIGRiZWFuID0gZGhvbWUuY3JlYXRlKG5ldyBJbnRlZ2VyKDIyMDApLCAiRDIyMDAiKTsKIAogICAgICAgICAgICAgYWJlYW4uYWRkQWxsKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxwcmU+Iik7CiAKICAgICAgICAgICAgIG91dC5wcmludGxuKCJDcmVhdGVkICIgKyBhaG9tZS5maW5kQWxsKCkuc2l6ZSgpICsgIiBBcy4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJDcmVhdGVkICIgKyBiaG9tZS5maW5kQWxsKCkuc2l6ZSgpICsgIiBCcy4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJDcmVhdGVkICIgKyBjaG9tZS5maW5kQWxsKCkuc2l6ZSgpICsgIiBDcy4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJDcmVhdGVkICIgKyBkaG9tZS5maW5kQWxsKCkuc2l6ZSgpICsgIiBEcy4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBvdXQucHJpbnRsbigiUmVtb3ZpbmcgbGFzdCBDLi4uIik7CiAgICAgICAgICAgICBjYmVhbi5yZW1vdmUoKTsKIApAQCAtMTEzLDggKzExMyw4IEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiTGVmdCAiICsgYmhvbWUuZmluZEFsbCgpLnNpemUoKSArICIgQnMuIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiTGVmdCAiICsgY2hvbWUuZmluZEFsbCgpLnNpemUoKSArICIgQ3MuIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiTGVmdCAiICsgZGhvbWUuZmluZEFsbCgpLnNpemUoKSArICIgRHMuIik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIAorCisKICAgICAgICAgICAgIG91dC5wcmludGxuKCJSZW1vdmluZyBBLi4uIik7CiAgICAgICAgICAgICBhYmVhbi5yZW1vdmUoKTsKIApAQCAtMTIyLDcgKzEyMiw3IEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiTGVmdCAiICsgYmhvbWUuZmluZEFsbCgpLnNpemUoKSArICIgQnMuIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiTGVmdCAiICsgY2hvbWUuZmluZEFsbCgpLnNpemUoKSArICIgQ3MuIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiTGVmdCAiICsgZGhvbWUuZmluZEFsbCgpLnNpemUoKSArICIgRHMuIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvcHJlPiIpOwogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtMTMyLDcgKzEzMiw3IEBACiAKICAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KLSAgICAKKwogICAgIC8qKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtMTUwLDExICsxNTAsMTEgQEAKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7CiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9Ci0gICAgCisKICAgICAvKiogUmV0dXJucyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2bGV0LgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmxldEluZm8oKSB7CiAgICAgICAgIHJldHVybiAiU2hvcnQgZGVzY3JpcHRpb24iOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvc3FsL2Nhc2NhZGVEZWxldGVfaWZ4LnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jYXNjYWRlRGVsZXRlL3NxbC9jYXNjYWRlRGVsZXRlX2lmeC5zcWwKaW5kZXggMDNjOTE4NC4uZjdiMTM5YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2Nhc2NhZGVEZWxldGUvc3FsL2Nhc2NhZGVEZWxldGVfaWZ4LnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY2FzY2FkZURlbGV0ZS9zcWwvY2FzY2FkZURlbGV0ZV9pZnguc3FsCkBAIC03LDcgKzcsNyBAQAogQ1JFQVRFIFRBQkxFIEEKICgKICAgICBpZCBJTlQgICAgICAgICAgUFJJTUFSWSBLRVksCi0gICAgbmFtZSAgIFZBUkNIQVIoMzIpIAorICAgIG5hbWUgICBWQVJDSEFSKDMyKQogKTsKIAogQ1JFQVRFIFRBQkxFIEIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb2xsZWdlYXBwL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29sbGVnZWFwcC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGU2MGVmZDMuLjgxYWM1NTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb2xsZWdlYXBwL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvbGxlZ2VhcHAvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJDb2xsZWdlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPCEtLSA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUuZGlyIiB2YWx1ZT0ie2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+IC0tPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ29sbGVnZUNsaWVudCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNvbGxlZ2VDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9ImFwcGNsaWVudF9jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvbGxlZ2VhcHAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvbGxlZ2VhcHAvYnVpbGQueG1sCmluZGV4IGU3NmExMjMuLmY4ZjlkMjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb2xsZWdlYXBwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29sbGVnZWFwcC9idWlsZC54bWwKQEAgLTM0LDE5ICszNCwxOSBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0JPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CisgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KKyAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iYXNzZW1ibGUuZGlyID0+ICR7YXNzZW1ibGUuZGlyfSAiIC8+Ci0JPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS9lYXIvQ29sbGVnZUFwcC5lYXIiIHRvZGlyPSIke2Fzc2VtYmxlLmRpcn0iIC8+CisgICAgPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS9lYXIvQ29sbGVnZUFwcC5lYXIiIHRvZGlyPSIke2Fzc2VtYmxlLmRpcn0iIC8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvQ29sbGVnZUFwcF9kZXJieS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0iJHtkZXBsb3llZC5hcHB9IiB2YWx1ZT0iJHtiYXNlZGlyfS9lYXIvQ29sbGVnZUFwcC5lYXIiLz4KLQk8L2FudGNhbGw+CisgICAgICAgIDxwYXJhbSBuYW1lPSIke2RlcGxveWVkLmFwcH0iIHZhbHVlPSIke2Jhc2VkaXJ9L2Vhci9Db2xsZWdlQXBwLmVhciIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02MCwyMiArNjAsMjIgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iJHtiYXNlZGlyfS8uLi9jb21tb24vZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9Db2xsZWdlQXBwX2RlcmJ5LnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBhbGwKICAgICAgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvbGxlZ2VhcHAvc3FsL0NvbGxlZ2VBcHAuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvbGxlZ2VhcHAvc3FsL0NvbGxlZ2VBcHAuc3FsCmluZGV4IGIyMmJkOTIuLjY2OTVlMGUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb2xsZWdlYXBwL3NxbC9Db2xsZWdlQXBwLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29sbGVnZWFwcC9zcWwvQ29sbGVnZUFwcC5zcWwKQEAgLTIxLDcgKzIxLDcgQEAKIGNyZWF0ZSB0YWJsZSBjb3Vyc2UgKGNvdXJzZUlkIE51bWJlciwgZGVwdElkIE51bWJlciwgY291cnNlTmFtZSBWYXJjaGFyMigyNTUpLCBzeWxhYnVzIEJMT0IgLGNvbnN0cmFpbnQgY291cnNlX2N0IHByaW1hcnkga2V5IChjb3Vyc2VJZCksCiBGT1JFSUdOIEtFWSAoZGVwdElkKSBSRUZFUkVOQ0VTIGRlcHQgKGRlcHRJZCkKICk7Ci0gCisKIGRyb3AgdGFibGUgc3R1ZF9jb3Vyc2UgQ0FTQ0FERSBDT05TVFJBSU5UUzsKIGNyZWF0ZSB0YWJsZSBzdHVkX2NvdXJzZSAoY291cnNlSWQgTnVtYmVyLCBzdHVkZW50SWQgTnVtYmVyLAogY29uc3RyYWludCBzdHVjX2MgcHJpbWFyeSBrZXkgKGNvdXJzZUlkLHN0dWRlbnRJZCksCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29sbGVnZWFwcC9zcWwvQ29sbGVnZUFwcF9kYjIuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvbGxlZ2VhcHAvc3FsL0NvbGxlZ2VBcHBfZGIyLnNxbAppbmRleCA1ZjUyMTJlLi5iY2YyODg2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29sbGVnZWFwcC9zcWwvQ29sbGVnZUFwcF9kYjIuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb2xsZWdlYXBwL3NxbC9Db2xsZWdlQXBwX2RiMi5zcWwKQEAgLTcsMzQgKzcsMzQgQEAKIAogCiBjcmVhdGUgdGFibGUgYWRkcmVzcyAoCi0gICAgYWRkcmVzc0lkIE5VTUVSSUMoMzApIE5PVCBOVUxMLCAKLSAgICBzdHJlZXQgVkFSQ0hBUigyNTUpLCAKLSAgICBjb2RlIE5VTUVSSUMoMzApLCAKLSAgICBjaXR5IFZBUkNIQVIoMjU1KSwgCi0gICAgc3RhdGUgVkFSQ0hBUigyNTUpLCAKKyAgICBhZGRyZXNzSWQgTlVNRVJJQygzMCkgTk9UIE5VTEwsCisgICAgc3RyZWV0IFZBUkNIQVIoMjU1KSwKKyAgICBjb2RlIE5VTUVSSUMoMzApLAorICAgIGNpdHkgVkFSQ0hBUigyNTUpLAorICAgIHN0YXRlIFZBUkNIQVIoMjU1KSwKICAgICBjb25zdHJhaW50IGFkZHJfY3QgcHJpbWFyeSBrZXkgKGFkZHJlc3NJZCkKICk7CiAKIGNyZWF0ZSB0YWJsZSBhY2NvdW50ICgKLSAgICBhY2NvdW50SWQgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLCAKLSAgICBmZWVzUGFpZCBOVU1FUklDKDMwLDIpLCAKLSAgICBmZWVzRHVlIE5VTUVSSUMoMzAsMiksIAotICAgIGR1ZURhdGUgREFURSwgCisgICAgYWNjb3VudElkIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCwKKyAgICBmZWVzUGFpZCBOVU1FUklDKDMwLDIpLAorICAgIGZlZXNEdWUgTlVNRVJJQygzMCwyKSwKKyAgICBkdWVEYXRlIERBVEUsCiAgICAgY29uc3RyYWludCBhY2NfY3QgcHJpbWFyeSBrZXkgKGFjY291bnRJZCkKICk7CiAKIGNyZWF0ZSB0YWJsZSBkZXB0ICgKLSAgICBkZXB0SWQgTlVNRVJJQygzMCkgTk9UIE5VTEwsIAotICAgIGRlcHROYW1lIFZBUkNIQVIoMjU1KSwgCisgICAgZGVwdElkIE5VTUVSSUMoMzApIE5PVCBOVUxMLAorICAgIGRlcHROYW1lIFZBUkNIQVIoMjU1KSwKICAgICBjb25zdHJhaW50IGRlcHRfY3QgcHJpbWFyeSBrZXkgKGRlcHRJZCkKICk7CiAKIGNyZWF0ZSB0YWJsZSBzdHVkZW50ICgKLSAgICBzdHVkZW50SWQgTlVNRVJJQygzMCkgTk9UIE5VTEwsIAotICAgIHN0dWRlbnROYW1lIFZBUkNIQVIoMjU1KSwgCi0gICAgZGVwdElkIE5VTUVSSUMoMzApLCAKLSAgICBhZGRyZXNzSWQgTlVNRVJJQygzMCksIAotICAgIGFjY291bnRJZCBWQVJDSEFSKDI1NSksIAorICAgIHN0dWRlbnRJZCBOVU1FUklDKDMwKSBOT1QgTlVMTCwKKyAgICBzdHVkZW50TmFtZSBWQVJDSEFSKDI1NSksCisgICAgZGVwdElkIE5VTUVSSUMoMzApLAorICAgIGFkZHJlc3NJZCBOVU1FUklDKDMwKSwKKyAgICBhY2NvdW50SWQgVkFSQ0hBUigyNTUpLAogICAgIGNvbnN0cmFpbnQgc3RfY3QgcHJpbWFyeSBrZXkgKHN0dWRlbnRJZCksCiAgICAgRk9SRUlHTiBLRVkgKGRlcHRJZCkgUkVGRVJFTkNFUyBkZXB0IChkZXB0SWQpLAogICAgIEZPUkVJR04gS0VZIChhZGRyZXNzSWQpIFJFRkVSRU5DRVMgYWRkcmVzcyAoYWRkcmVzc0lkKSwKQEAgLTQyLDE2ICs0MiwxNiBAQAogKTsKIAogY3JlYXRlIHRhYmxlIGNvdXJzZSAoCi0gICAgY291cnNlSWQgTlVNRVJJQygzMCkgTk9UIE5VTEwsIAotICAgIGRlcHRJZCBOVU1FUklDKDMwKSwgCi0gICAgY291cnNlTmFtZSBWQVJDSEFSKDI1NSksIAotICAgIHN5bGFidXMgQkxPQiwgCisgICAgY291cnNlSWQgTlVNRVJJQygzMCkgTk9UIE5VTEwsCisgICAgZGVwdElkIE5VTUVSSUMoMzApLAorICAgIGNvdXJzZU5hbWUgVkFSQ0hBUigyNTUpLAorICAgIHN5bGFidXMgQkxPQiwKICAgICBjb25zdHJhaW50IGNvdXJzZV9jdCBwcmltYXJ5IGtleSAoY291cnNlSWQpLAogICAgIEZPUkVJR04gS0VZIChkZXB0SWQpIFJFRkVSRU5DRVMgZGVwdCAoZGVwdElkKQogKTsKLSAKKwogY3JlYXRlIHRhYmxlIHN0dWRfY291cnNlICgKLSAgICBjb3Vyc2VJZCBOVU1FUklDKDMwKSBOT1QgTlVMTCwgCisgICAgY291cnNlSWQgTlVNRVJJQygzMCkgTk9UIE5VTEwsCiAgICAgc3R1ZGVudElkIE5VTUVSSUMoMzApIE5PVCBOVUxMLAogICAgIGNvbnN0cmFpbnQgc3Rjb19jdCBwcmltYXJ5IGtleSAoY291cnNlSWQsIHN0dWRlbnRJZCksCiAgICAgRk9SRUlHTiBLRVkgKGNvdXJzZUlkKSBSRUZFUkVOQ0VTIGNvdXJzZSAoY291cnNlSWQpLApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvbGxlZ2VhcHAvc3FsL0NvbGxlZ2VBcHBfZGVyYnkuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvbGxlZ2VhcHAvc3FsL0NvbGxlZ2VBcHBfZGVyYnkuc3FsCmluZGV4IDJiMjc5YTUuLjcwZjI3MmMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb2xsZWdlYXBwL3NxbC9Db2xsZWdlQXBwX2RlcmJ5LnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29sbGVnZWFwcC9zcWwvQ29sbGVnZUFwcF9kZXJieS5zcWwKQEAgLTcsMzQgKzcsMzQgQEAKIAogCiBjcmVhdGUgdGFibGUgYWRkcmVzcyAoCi0gICAgYWRkcmVzc0lkIE5VTUVSSUMoMzApIE5PVCBOVUxMLCAKLSAgICBzdHJlZXQgVkFSQ0hBUigyNTUpLCAKLSAgICBjb2RlIE5VTUVSSUMoMzApLCAKLSAgICBjaXR5IFZBUkNIQVIoMjU1KSwgCi0gICAgc3RhdGUgVkFSQ0hBUigyNTUpLCAKKyAgICBhZGRyZXNzSWQgTlVNRVJJQygzMCkgTk9UIE5VTEwsCisgICAgc3RyZWV0IFZBUkNIQVIoMjU1KSwKKyAgICBjb2RlIE5VTUVSSUMoMzApLAorICAgIGNpdHkgVkFSQ0hBUigyNTUpLAorICAgIHN0YXRlIFZBUkNIQVIoMjU1KSwKICAgICBjb25zdHJhaW50IGFkZHJfY3QgcHJpbWFyeSBrZXkgKGFkZHJlc3NJZCkKICk7CiAKIGNyZWF0ZSB0YWJsZSBhY2NvdW50ICgKLSAgICBhY2NvdW50SWQgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLCAKLSAgICBmZWVzUGFpZCBOVU1FUklDKDMwLDIpLCAKLSAgICBmZWVzRHVlIE5VTUVSSUMoMzAsMiksIAotICAgIGR1ZURhdGUgREFURSwgCisgICAgYWNjb3VudElkIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCwKKyAgICBmZWVzUGFpZCBOVU1FUklDKDMwLDIpLAorICAgIGZlZXNEdWUgTlVNRVJJQygzMCwyKSwKKyAgICBkdWVEYXRlIERBVEUsCiAgICAgY29uc3RyYWludCBhY2NfY3QgcHJpbWFyeSBrZXkgKGFjY291bnRJZCkKICk7CiAKIGNyZWF0ZSB0YWJsZSBkZXB0ICgKLSAgICBkZXB0SWQgTlVNRVJJQygzMCkgTk9UIE5VTEwsIAotICAgIGRlcHROYW1lIFZBUkNIQVIoMjU1KSwgCisgICAgZGVwdElkIE5VTUVSSUMoMzApIE5PVCBOVUxMLAorICAgIGRlcHROYW1lIFZBUkNIQVIoMjU1KSwKICAgICBjb25zdHJhaW50IGRlcHRfY3QgcHJpbWFyeSBrZXkgKGRlcHRJZCkKICk7CiAKIGNyZWF0ZSB0YWJsZSBzdHVkZW50ICgKLSAgICBzdHVkZW50SWQgTlVNRVJJQygzMCkgTk9UIE5VTEwsIAotICAgIHN0dWRlbnROYW1lIFZBUkNIQVIoMjU1KSwgCi0gICAgZGVwdElkIE5VTUVSSUMoMzApLCAKLSAgICBhZGRyZXNzSWQgTlVNRVJJQygzMCksIAotICAgIGFjY291bnRJZCBWQVJDSEFSKDI1NSksIAorICAgIHN0dWRlbnRJZCBOVU1FUklDKDMwKSBOT1QgTlVMTCwKKyAgICBzdHVkZW50TmFtZSBWQVJDSEFSKDI1NSksCisgICAgZGVwdElkIE5VTUVSSUMoMzApLAorICAgIGFkZHJlc3NJZCBOVU1FUklDKDMwKSwKKyAgICBhY2NvdW50SWQgVkFSQ0hBUigyNTUpLAogICAgIGNvbnN0cmFpbnQgc3RfY3QgcHJpbWFyeSBrZXkgKHN0dWRlbnRJZCksCiAgICAgRk9SRUlHTiBLRVkgKGRlcHRJZCkgUkVGRVJFTkNFUyBkZXB0IChkZXB0SWQpLAogICAgIEZPUkVJR04gS0VZIChhZGRyZXNzSWQpIFJFRkVSRU5DRVMgYWRkcmVzcyAoYWRkcmVzc0lkKSwKQEAgLTQyLDE2ICs0MiwxNiBAQAogKTsKIAogY3JlYXRlIHRhYmxlIGNvdXJzZSAoCi0gICAgY291cnNlSWQgTlVNRVJJQygzMCkgTk9UIE5VTEwsIAotICAgIGRlcHRJZCBOVU1FUklDKDMwKSwgCi0gICAgY291cnNlTmFtZSBWQVJDSEFSKDI1NSksIAotICAgIHN5bGFidXMgQkxPQiwgCisgICAgY291cnNlSWQgTlVNRVJJQygzMCkgTk9UIE5VTEwsCisgICAgZGVwdElkIE5VTUVSSUMoMzApLAorICAgIGNvdXJzZU5hbWUgVkFSQ0hBUigyNTUpLAorICAgIHN5bGFidXMgQkxPQiwKICAgICBjb25zdHJhaW50IGNvdXJzZV9jdCBwcmltYXJ5IGtleSAoY291cnNlSWQpLAogICAgIEZPUkVJR04gS0VZIChkZXB0SWQpIFJFRkVSRU5DRVMgZGVwdCAoZGVwdElkKQogKTsKLSAKKwogY3JlYXRlIHRhYmxlIHN0dWRfY291cnNlICgKLSAgICBjb3Vyc2VJZCBOVU1FUklDKDMwKSBOT1QgTlVMTCwgCisgICAgY291cnNlSWQgTlVNRVJJQygzMCkgTk9UIE5VTEwsCiAgICAgc3R1ZGVudElkIE5VTUVSSUMoMzApIE5PVCBOVUxMLAogICAgIGNvbnN0cmFpbnQgc3Rjb19jdCBwcmltYXJ5IGtleSAoY291cnNlSWQsIHN0dWRlbnRJZCksCiAgICAgRk9SRUlHTiBLRVkgKGNvdXJzZUlkKSBSRUZFUkVOQ0VTIGNvdXJzZSAoY291cnNlSWQpLApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvbGxlZ2VhcHAvc3FsL0NvbGxlZ2VBcHBfaWZ4LnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb2xsZWdlYXBwL3NxbC9Db2xsZWdlQXBwX2lmeC5zcWwKaW5kZXggYjM0OWMzZS4uNzEzMmQ4ZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvbGxlZ2VhcHAvc3FsL0NvbGxlZ2VBcHBfaWZ4LnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29sbGVnZWFwcC9zcWwvQ29sbGVnZUFwcF9pZnguc3FsCkBAIC03LDM0ICs3LDM0IEBACiAKIAogY3JlYXRlIHRhYmxlIGFkZHJlc3MgKAotICAgIGFkZHJlc3NJZCBERUNJTUFMKDMyKSwgCi0gICAgc3RyZWV0IFZBUkNIQVIoMTI3KSwgCi0gICAgY29kZSBERUNJTUFMKDMyKSwgCi0gICAgY2l0eSBWQVJDSEFSKDEyNyksIAotICAgIHN0YXRlIFZBUkNIQVIoMTI3KSwgCisgICAgYWRkcmVzc0lkIERFQ0lNQUwoMzIpLAorICAgIHN0cmVldCBWQVJDSEFSKDEyNyksCisgICAgY29kZSBERUNJTUFMKDMyKSwKKyAgICBjaXR5IFZBUkNIQVIoMTI3KSwKKyAgICBzdGF0ZSBWQVJDSEFSKDEyNyksCiAgICAgcHJpbWFyeSBrZXkgKGFkZHJlc3NJZCkKICk7CiAKIGNyZWF0ZSB0YWJsZSBhY2NvdW50ICgKLSAgICBhY2NvdW50SWQgVkFSQ0hBUigxMjcpLCAKLSAgICBmZWVzUGFpZCBERUNJTUFMKDMyLDIpLCAKLSAgICBmZWVzRHVlIERFQ0lNQUwoMzIsMiksIAotICAgIGR1ZURhdGUgREFURSwgCisgICAgYWNjb3VudElkIFZBUkNIQVIoMTI3KSwKKyAgICBmZWVzUGFpZCBERUNJTUFMKDMyLDIpLAorICAgIGZlZXNEdWUgREVDSU1BTCgzMiwyKSwKKyAgICBkdWVEYXRlIERBVEUsCiAgICAgcHJpbWFyeSBrZXkgKGFjY291bnRJZCkKICk7CiAKIGNyZWF0ZSB0YWJsZSBkZXB0ICgKLSAgICBkZXB0SWQgREVDSU1BTCgzMiksIAotICAgIGRlcHROYW1lIFZBUkNIQVIoMTI3KSwgCisgICAgZGVwdElkIERFQ0lNQUwoMzIpLAorICAgIGRlcHROYW1lIFZBUkNIQVIoMTI3KSwKICAgICBwcmltYXJ5IGtleSAoZGVwdElkKQogKTsKIAogY3JlYXRlIHRhYmxlIHN0dWRlbnQgKAotICAgIHN0dWRlbnRJZCBERUNJTUFMKDMyKSwgCi0gICAgc3R1ZGVudE5hbWUgVkFSQ0hBUigxMjcpLCAKLSAgICBkZXB0SWQgREVDSU1BTCgzMiksIAotICAgIGFkZHJlc3NJZCBERUNJTUFMKDMyKSwgCi0gICAgYWNjb3VudElkIFZBUkNIQVIoMTI3KSwgCisgICAgc3R1ZGVudElkIERFQ0lNQUwoMzIpLAorICAgIHN0dWRlbnROYW1lIFZBUkNIQVIoMTI3KSwKKyAgICBkZXB0SWQgREVDSU1BTCgzMiksCisgICAgYWRkcmVzc0lkIERFQ0lNQUwoMzIpLAorICAgIGFjY291bnRJZCBWQVJDSEFSKDEyNyksCiAgICAgcHJpbWFyeSBrZXkgKHN0dWRlbnRJZCksCiAgICAgRk9SRUlHTiBLRVkgKGRlcHRJZCkgUkVGRVJFTkNFUyBkZXB0IChkZXB0SWQpLAogICAgIEZPUkVJR04gS0VZIChhZGRyZXNzSWQpIFJFRkVSRU5DRVMgYWRkcmVzcyAoYWRkcmVzc0lkKSwKQEAgLTQyLDE2ICs0MiwxNiBAQAogKTsKIAogY3JlYXRlIHRhYmxlIGNvdXJzZSAoCi0gICAgY291cnNlSWQgREVDSU1BTCgzMiksIAotICAgIGRlcHRJZCBERUNJTUFMKDMyKSwgCi0gICAgY291cnNlTmFtZSBWQVJDSEFSKDEyNyksIAotICAgIHN5bGFidXMgQllURSwgCisgICAgY291cnNlSWQgREVDSU1BTCgzMiksCisgICAgZGVwdElkIERFQ0lNQUwoMzIpLAorICAgIGNvdXJzZU5hbWUgVkFSQ0hBUigxMjcpLAorICAgIHN5bGFidXMgQllURSwKICAgICBwcmltYXJ5IGtleSAoY291cnNlSWQpLAogICAgIEZPUkVJR04gS0VZIChkZXB0SWQpIFJFRkVSRU5DRVMgZGVwdCAoZGVwdElkKQogKTsKLSAKKwogY3JlYXRlIHRhYmxlIHN0dWRfY291cnNlICgKLSAgICBjb3Vyc2VJZCBERUNJTUFMKDMyKSwgCisgICAgY291cnNlSWQgREVDSU1BTCgzMiksCiAgICAgc3R1ZGVudElkIERFQ0lNQUwoMzIpLAogICAgIHByaW1hcnkga2V5IChjb3Vyc2VJZCwgc3R1ZGVudElkKSwKICAgICBGT1JFSUdOIEtFWSAoY291cnNlSWQpIFJFRkVSRU5DRVMgY291cnNlIChjb3Vyc2VJZCksCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29sbGVnZWFwcC9zcWwvQ29sbGVnZUFwcF9tc3NxbC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29sbGVnZWFwcC9zcWwvQ29sbGVnZUFwcF9tc3NxbC5zcWwKaW5kZXggNTBhYWI0NC4uYWEwNTVlNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvbGxlZ2VhcHAvc3FsL0NvbGxlZ2VBcHBfbXNzcWwuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb2xsZWdlYXBwL3NxbC9Db2xsZWdlQXBwX21zc3FsLnNxbApAQCAtNywzNCArNywzNCBAQAogZ28KIAogY3JlYXRlIHRhYmxlIEFERFJFU1MgKAotICAgIEFERFJFU1NJRCBOVU1FUklDKDM4KSwgCi0gICAgU1RSRUVUICAgIFZBUkNIQVIoMjU1KSwgCi0gICAgQ09ERSAgICAgIE5VTUVSSUMoMzgpLCAKLSAgICBDSVRZICAgICAgVkFSQ0hBUigyNTUpLCAKLSAgICBTVEFURSAgICAgVkFSQ0hBUigyNTUpLCAKKyAgICBBRERSRVNTSUQgTlVNRVJJQygzOCksCisgICAgU1RSRUVUICAgIFZBUkNIQVIoMjU1KSwKKyAgICBDT0RFICAgICAgTlVNRVJJQygzOCksCisgICAgQ0lUWSAgICAgIFZBUkNIQVIoMjU1KSwKKyAgICBTVEFURSAgICAgVkFSQ0hBUigyNTUpLAogICAgIENPTlNUUkFJTlQgQUREUl9DVCBQUklNQVJZIEtFWSAoQUREUkVTU0lEKQogKQogCiBjcmVhdGUgdGFibGUgQUNDT1VOVCAoCi0gICAgQUNDT1VOVElEIFZBUkNIQVIoMjU1KSwgCi0gICAgRkVFU1BBSUQgIE5VTUVSSUMoMzgsMiksIAotICAgIEZFRVNEVUUgICBOVU1FUklDKDM4LDIpLCAKLSAgICBEVUVEQVRFICAgREFURVRJTUUsIAorICAgIEFDQ09VTlRJRCBWQVJDSEFSKDI1NSksCisgICAgRkVFU1BBSUQgIE5VTUVSSUMoMzgsMiksCisgICAgRkVFU0RVRSAgIE5VTUVSSUMoMzgsMiksCisgICAgRFVFREFURSAgIERBVEVUSU1FLAogICAgIENPTlNUUkFJTlQgQUNDX0NUIFBSSU1BUlkgS0VZIChBQ0NPVU5USUQpCiApCiAKIGNyZWF0ZSB0YWJsZSBERVBUICgKLSAgICBERVBUSUQgICBOVU1FUklDKDM4KSwgCi0gICAgREVQVE5BTUUgVkFSQ0hBUigyNTUpLCAKKyAgICBERVBUSUQgICBOVU1FUklDKDM4KSwKKyAgICBERVBUTkFNRSBWQVJDSEFSKDI1NSksCiAgICAgQ09OU1RSQUlOVCBERVBUX0NUIFBSSU1BUlkgS0VZIChERVBUSUQpCiApCiAKIGNyZWF0ZSB0YWJsZSBTVFVERU5UICgKLSAgICBTVFVERU5USUQgICBOVU1FUklDKDM4KSwgCi0gICAgU1RVREVOVE5BTUUgVkFSQ0hBUigyNTUpLCAKLSAgICBERVBUSUQgICAgICBOVU1FUklDKDM4KSwgCi0gICAgQUREUkVTU0lEICAgTlVNRVJJQygzOCksIAotICAgIEFDQ09VTlRJRCAgIFZBUkNIQVIoMjU1KSwgCisgICAgU1RVREVOVElEICAgTlVNRVJJQygzOCksCisgICAgU1RVREVOVE5BTUUgVkFSQ0hBUigyNTUpLAorICAgIERFUFRJRCAgICAgIE5VTUVSSUMoMzgpLAorICAgIEFERFJFU1NJRCAgIE5VTUVSSUMoMzgpLAorICAgIEFDQ09VTlRJRCAgIFZBUkNIQVIoMjU1KSwKICAgICBDT05TVFJBSU5UIFNUX0NUIFBSSU1BUlkgS0VZIChTVFVERU5USUQpLAogICAgIEZPUkVJR04gS0VZIChERVBUSUQpIFJFRkVSRU5DRVMgREVQVCAoREVQVElEKSwKICAgICBGT1JFSUdOIEtFWSAoQUREUkVTU0lEKSBSRUZFUkVOQ0VTIEFERFJFU1MgKEFERFJFU1NJRCksCkBAIC00MiwxNiArNDIsMTYgQEAKICkKIAogY3JlYXRlIHRhYmxlIENPVVJTRSAoCi0gICAgQ09VUlNFSUQgICBOVU1FUklDKDM4KSwgCi0gICAgREVQVElEICAgICBOVU1FUklDKDM4KSwgCi0gICAgQ09VUlNFTkFNRSBWQVJDSEFSKDI1NSksIAotICAgIFNZTEFCVVMgICAgSU1BR0UsIAorICAgIENPVVJTRUlEICAgTlVNRVJJQygzOCksCisgICAgREVQVElEICAgICBOVU1FUklDKDM4KSwKKyAgICBDT1VSU0VOQU1FIFZBUkNIQVIoMjU1KSwKKyAgICBTWUxBQlVTICAgIElNQUdFLAogICAgIENPTlNUUkFJTlQgQ09VUlNFX0NUIFBSSU1BUlkgS0VZIChDT1VSU0VJRCksCiAgICAgRk9SRUlHTiBLRVkgKERFUFRJRCkgUkVGRVJFTkNFUyBERVBUIChERVBUSUQpCiApCi0gCisKIGNyZWF0ZSB0YWJsZSBTVFVEX0NPVVJTRSAoCi0gICAgQ09VUlNFSUQgIE5VTUVSSUMoMzgpLCAKKyAgICBDT1VSU0VJRCAgTlVNRVJJQygzOCksCiAgICAgU1RVREVOVElEIE5VTUVSSUMoMzgpLAogICAgIENPTlNUUkFJTlQgU1RDT19DVCBQUklNQVJZIEtFWSAoQ09VUlNFSUQsIFNUVURFTlRJRCksCiAgICAgRk9SRUlHTiBLRVkgKENPVVJTRUlEKSBSRUZFUkVOQ0VTIENPVVJTRSAoQ09VUlNFSUQpLApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvbGxlZ2VhcHAvc3FsL0NvbGxlZ2VBcHBfbXlzcWwuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvbGxlZ2VhcHAvc3FsL0NvbGxlZ2VBcHBfbXlzcWwuc3FsCmluZGV4IDhmYmU4MmQuLjdhYTI3ZjkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb2xsZWdlYXBwL3NxbC9Db2xsZWdlQXBwX215c3FsLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29sbGVnZWFwcC9zcWwvQ29sbGVnZUFwcF9teXNxbC5zcWwKQEAgLTcsMzQgKzcsMzQgQEAKIAogCiBDUkVBVEUgVEFCTEUgQUREUkVTUyAoCi0gICAgQUREUkVTU0lEIERFQ0lNQUwoMzgpLCAKLSAgICBTVFJFRVQgVkFSQ0hBUigyNTUpLCAKLSAgICBDT0RFIERFQ0lNQUwoMzgpLCAKLSAgICBDSVRZIFZBUkNIQVIoMjU1KSwgCi0gICAgU1RBVEUgVkFSQ0hBUigyNTUpLCAKKyAgICBBRERSRVNTSUQgREVDSU1BTCgzOCksCisgICAgU1RSRUVUIFZBUkNIQVIoMjU1KSwKKyAgICBDT0RFIERFQ0lNQUwoMzgpLAorICAgIENJVFkgVkFSQ0hBUigyNTUpLAorICAgIFNUQVRFIFZBUkNIQVIoMjU1KSwKICAgICBDT05TVFJBSU5UIEFERFJfQ1QgUFJJTUFSWSBLRVkgKEFERFJFU1NJRCkKICkgRU5HSU5FPUlOTk9EQjsKIAogQ1JFQVRFIFRBQkxFIEFDQ09VTlQgKAotICAgIEFDQ09VTlRJRCBWQVJDSEFSKDI1NSksIAotICAgIEZFRVNQQUlEIERFQ0lNQUwoMzgsMiksIAotICAgIEZFRVNEVUUgREVDSU1BTCgzOCwyKSwgCi0gICAgRFVFREFURSBEQVRFLCAKKyAgICBBQ0NPVU5USUQgVkFSQ0hBUigyNTUpLAorICAgIEZFRVNQQUlEIERFQ0lNQUwoMzgsMiksCisgICAgRkVFU0RVRSBERUNJTUFMKDM4LDIpLAorICAgIERVRURBVEUgREFURSwKICAgICBDT05TVFJBSU5UIEFDQ19DVCBQUklNQVJZIEtFWSAoQUNDT1VOVElEKQogKSBFTkdJTkU9SU5OT0RCOwogCiBDUkVBVEUgVEFCTEUgREVQVCAoCi0gICAgREVQVElEIERFQ0lNQUwoMzgpLCAKLSAgICBERVBUTkFNRSBWQVJDSEFSKDI1NSksIAorICAgIERFUFRJRCBERUNJTUFMKDM4KSwKKyAgICBERVBUTkFNRSBWQVJDSEFSKDI1NSksCiAgICAgQ09OU1RSQUlOVCBERVBUX0NUIFBSSU1BUlkgS0VZIChERVBUSUQpCiApIEVOR0lORT1JTk5PREI7CiAKIENSRUFURSBUQUJMRSBTVFVERU5UICgKLSAgICBTVFVERU5USUQgREVDSU1BTCgzOCksIAotICAgIFNUVURFTlROQU1FIFZBUkNIQVIoMjU1KSwgCi0gICAgREVQVElEIERFQ0lNQUwoMzgpLCAKLSAgICBBRERSRVNTSUQgREVDSU1BTCgzOCksIAotICAgIEFDQ09VTlRJRCBWQVJDSEFSKDI1NSksIAorICAgIFNUVURFTlRJRCBERUNJTUFMKDM4KSwKKyAgICBTVFVERU5UTkFNRSBWQVJDSEFSKDI1NSksCisgICAgREVQVElEIERFQ0lNQUwoMzgpLAorICAgIEFERFJFU1NJRCBERUNJTUFMKDM4KSwKKyAgICBBQ0NPVU5USUQgVkFSQ0hBUigyNTUpLAogICAgIENPTlNUUkFJTlQgc3RfQ1QgUFJJTUFSWSBLRVkgKFNUVURFTlRJRCksCiAgICAgRk9SRUlHTiBLRVkgKERFUFRJRCkgUkVGRVJFTkNFUyBERVBUIChERVBUSUQpLAogICAgIEZPUkVJR04gS0VZIChBRERSRVNTSUQpIFJFRkVSRU5DRVMgQUREUkVTUyAoQUREUkVTU0lEKSwKQEAgLTQyLDE2ICs0MiwxNiBAQAogKSBFTkdJTkU9SU5OT0RCOwogCiBDUkVBVEUgVEFCTEUgQ09VUlNFICgKLSAgICBDT1VSU0VJRCBERUNJTUFMKDM4KSwgCi0gICAgREVQVElEIERFQ0lNQUwoMzgpLCAKLSAgICBDT1VSU0VOQU1FIFZBUkNIQVIoMjU1KSwgCi0gICAgU1lMQUJVUyBCTE9CLCAKKyAgICBDT1VSU0VJRCBERUNJTUFMKDM4KSwKKyAgICBERVBUSUQgREVDSU1BTCgzOCksCisgICAgQ09VUlNFTkFNRSBWQVJDSEFSKDI1NSksCisgICAgU1lMQUJVUyBCTE9CLAogICAgIENPTlNUUkFJTlQgQ09VUlNFX0NUIFBSSU1BUlkgS0VZIChDT1VSU0VJRCksCiAgICAgRk9SRUlHTiBLRVkgKERFUFRJRCkgUkVGRVJFTkNFUyBERVBUIChERVBUSUQpCiApIEVOR0lORT1JTk5PREI7Ci0gCisKIENSRUFURSBUQUJMRSBTVFVEX0NPVVJTRSAoCi0gICAgQ09VUlNFSUQgREVDSU1BTCgzOCksIAorICAgIENPVVJTRUlEIERFQ0lNQUwoMzgpLAogICAgIFNUVURFTlRJRCBERUNJTUFMKDM4KSwKICAgICBDT05TVFJBSU5UIFNUQ09fQ1QgUFJJTUFSWSBLRVkgKENPVVJTRUlELCBTVFVERU5USUQpLAogICAgIEZPUkVJR04gS0VZIChDT1VSU0VJRCkgUkVGRVJFTkNFUyBDT1VSU0UgKENPVVJTRUlEKSwKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb2xsZWdlYXBwL3NxbC9Db2xsZWdlQXBwX29yYS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29sbGVnZWFwcC9zcWwvQ29sbGVnZUFwcF9vcmEuc3FsCmluZGV4IDkyYzA4MDEuLjRlMzFkMTQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb2xsZWdlYXBwL3NxbC9Db2xsZWdlQXBwX29yYS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvbGxlZ2VhcHAvc3FsL0NvbGxlZ2VBcHBfb3JhLnNxbApAQCAtNywzNCArNywzNCBAQAogCiAKIGNyZWF0ZSB0YWJsZSBhZGRyZXNzICgKLSAgICBhZGRyZXNzSWQgTlVNQkVSKDM4KSwgCi0gICAgc3RyZWV0IFZBUkNIQVIyKDI1NSksIAotICAgIGNvZGUgTlVNQkVSKDM4KSwgCi0gICAgY2l0eSBWQVJDSEFSMigyNTUpLCAKLSAgICBzdGF0ZSBWQVJDSEFSMigyNTUpLCAKKyAgICBhZGRyZXNzSWQgTlVNQkVSKDM4KSwKKyAgICBzdHJlZXQgVkFSQ0hBUjIoMjU1KSwKKyAgICBjb2RlIE5VTUJFUigzOCksCisgICAgY2l0eSBWQVJDSEFSMigyNTUpLAorICAgIHN0YXRlIFZBUkNIQVIyKDI1NSksCiAgICAgY29uc3RyYWludCBhZGRyX2N0IHByaW1hcnkga2V5IChhZGRyZXNzSWQpCiApOwogCiBjcmVhdGUgdGFibGUgYWNjb3VudCAoCi0gICAgYWNjb3VudElkIFZBUkNIQVIyKDI1NSksIAotICAgIGZlZXNQYWlkIE5VTUJFUigzOCwyKSwgCi0gICAgZmVlc0R1ZSBOVU1CRVIoMzgsMiksIAotICAgIGR1ZURhdGUgREFURSwgCisgICAgYWNjb3VudElkIFZBUkNIQVIyKDI1NSksCisgICAgZmVlc1BhaWQgTlVNQkVSKDM4LDIpLAorICAgIGZlZXNEdWUgTlVNQkVSKDM4LDIpLAorICAgIGR1ZURhdGUgREFURSwKICAgICBjb25zdHJhaW50IGFjY19jdCBwcmltYXJ5IGtleSAoYWNjb3VudElkKQogKTsKIAogY3JlYXRlIHRhYmxlIGRlcHQgKAotICAgIGRlcHRJZCBOVU1CRVIoMzgpLCAKLSAgICBkZXB0TmFtZSBWQVJDSEFSMigyNTUpLCAKKyAgICBkZXB0SWQgTlVNQkVSKDM4KSwKKyAgICBkZXB0TmFtZSBWQVJDSEFSMigyNTUpLAogICAgIGNvbnN0cmFpbnQgZGVwdF9jdCBwcmltYXJ5IGtleSAoZGVwdElkKQogKTsKIAogY3JlYXRlIHRhYmxlIHN0dWRlbnQgKAotICAgIHN0dWRlbnRJZCBOVU1CRVIoMzgpLCAKLSAgICBzdHVkZW50TmFtZSBWQVJDSEFSMigyNTUpLCAKLSAgICBkZXB0SWQgTlVNQkVSKDM4KSwgCi0gICAgYWRkcmVzc0lkIE5VTUJFUigzOCksIAotICAgIGFjY291bnRJZCBWQVJDSEFSMigyNTUpLCAKKyAgICBzdHVkZW50SWQgTlVNQkVSKDM4KSwKKyAgICBzdHVkZW50TmFtZSBWQVJDSEFSMigyNTUpLAorICAgIGRlcHRJZCBOVU1CRVIoMzgpLAorICAgIGFkZHJlc3NJZCBOVU1CRVIoMzgpLAorICAgIGFjY291bnRJZCBWQVJDSEFSMigyNTUpLAogICAgIGNvbnN0cmFpbnQgc3RfY3QgcHJpbWFyeSBrZXkgKHN0dWRlbnRJZCksCiAgICAgRk9SRUlHTiBLRVkgKGRlcHRJZCkgUkVGRVJFTkNFUyBkZXB0IChkZXB0SWQpLAogICAgIEZPUkVJR04gS0VZIChhZGRyZXNzSWQpIFJFRkVSRU5DRVMgYWRkcmVzcyAoYWRkcmVzc0lkKSwKQEAgLTQyLDE2ICs0MiwxNiBAQAogKTsKIAogY3JlYXRlIHRhYmxlIGNvdXJzZSAoCi0gICAgY291cnNlSWQgTlVNQkVSKDM4KSwgCi0gICAgZGVwdElkIE5VTUJFUigzOCksIAotICAgIGNvdXJzZU5hbWUgVkFSQ0hBUjIoMjU1KSwgCi0gICAgc3lsYWJ1cyBCTE9CLCAKKyAgICBjb3Vyc2VJZCBOVU1CRVIoMzgpLAorICAgIGRlcHRJZCBOVU1CRVIoMzgpLAorICAgIGNvdXJzZU5hbWUgVkFSQ0hBUjIoMjU1KSwKKyAgICBzeWxhYnVzIEJMT0IsCiAgICAgY29uc3RyYWludCBjb3Vyc2VfY3QgcHJpbWFyeSBrZXkgKGNvdXJzZUlkKSwKICAgICBGT1JFSUdOIEtFWSAoZGVwdElkKSBSRUZFUkVOQ0VTIGRlcHQgKGRlcHRJZCkKICk7Ci0gCisKIGNyZWF0ZSB0YWJsZSBzdHVkX2NvdXJzZSAoCi0gICAgY291cnNlSWQgTlVNQkVSKDM4KSwgCisgICAgY291cnNlSWQgTlVNQkVSKDM4KSwKICAgICBzdHVkZW50SWQgTlVNQkVSKDM4KSwKICAgICBjb25zdHJhaW50IHN0Y29fY3QgcHJpbWFyeSBrZXkgKGNvdXJzZUlkLCBzdHVkZW50SWQpLAogICAgIEZPUkVJR04gS0VZIChjb3Vyc2VJZCkgUkVGRVJFTkNFUyBjb3Vyc2UgKGNvdXJzZUlkKSwKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb2xsZWdlYXBwL3NxbC9Db2xsZWdlQXBwX3Bicy5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29sbGVnZWFwcC9zcWwvQ29sbGVnZUFwcF9wYnMuc3FsCmluZGV4IDU3YTAzNjIuLjVhMGEwNmYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb2xsZWdlYXBwL3NxbC9Db2xsZWdlQXBwX3Bicy5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvbGxlZ2VhcHAvc3FsL0NvbGxlZ2VBcHBfcGJzLnNxbApAQCAtNywzNCArNywzNCBAQAogCiAKIGNyZWF0ZSB0YWJsZSBhZGRyZXNzICgKLSAgICBhZGRyZXNzSWQgTlVNQkVSKDM4KSwgCi0gICAgc3RyZWV0IFZBUkNIQVIyKDI1NSksIAotICAgIGNvZGUgTlVNQkVSKDM4KSwgCi0gICAgY2l0eSBWQVJDSEFSMigyNTUpLCAKLSAgICBzdGF0ZSBWQVJDSEFSMigyNTUpLCAKKyAgICBhZGRyZXNzSWQgTlVNQkVSKDM4KSwKKyAgICBzdHJlZXQgVkFSQ0hBUjIoMjU1KSwKKyAgICBjb2RlIE5VTUJFUigzOCksCisgICAgY2l0eSBWQVJDSEFSMigyNTUpLAorICAgIHN0YXRlIFZBUkNIQVIyKDI1NSksCiAgICAgY29uc3RyYWludCBhZGRyX2N0IHByaW1hcnkga2V5IChhZGRyZXNzSWQpCiApOwogCiBjcmVhdGUgdGFibGUgYWNjb3VudCAoCi0gICAgYWNjb3VudElkIFZBUkNIQVIyKDI1NSksIAotICAgIGZlZXNQYWlkIE5VTUJFUigzOCwyKSwgCi0gICAgZmVlc0R1ZSBOVU1CRVIoMzgsMiksIAotICAgIGR1ZURhdGUgVElNRVNUQU1QLCAKKyAgICBhY2NvdW50SWQgVkFSQ0hBUjIoMjU1KSwKKyAgICBmZWVzUGFpZCBOVU1CRVIoMzgsMiksCisgICAgZmVlc0R1ZSBOVU1CRVIoMzgsMiksCisgICAgZHVlRGF0ZSBUSU1FU1RBTVAsCiAgICAgY29uc3RyYWludCBhY2NfY3QgcHJpbWFyeSBrZXkgKGFjY291bnRJZCkKICk7CiAKIGNyZWF0ZSB0YWJsZSBkZXB0ICgKLSAgICBkZXB0SWQgTlVNQkVSKDM4KSwgCi0gICAgZGVwdE5hbWUgVkFSQ0hBUjIoMjU1KSwgCisgICAgZGVwdElkIE5VTUJFUigzOCksCisgICAgZGVwdE5hbWUgVkFSQ0hBUjIoMjU1KSwKICAgICBjb25zdHJhaW50IGRlcHRfY3QgcHJpbWFyeSBrZXkgKGRlcHRJZCkKICk7CiAKIGNyZWF0ZSB0YWJsZSBzdHVkZW50ICgKLSAgICBzdHVkZW50SWQgTlVNQkVSKDM4KSwgCi0gICAgc3R1ZGVudE5hbWUgVkFSQ0hBUjIoMjU1KSwgCi0gICAgZGVwdElkIE5VTUJFUigzOCksIAotICAgIGFkZHJlc3NJZCBOVU1CRVIoMzgpLCAKLSAgICBhY2NvdW50SWQgVkFSQ0hBUjIoMjU1KSwgCisgICAgc3R1ZGVudElkIE5VTUJFUigzOCksCisgICAgc3R1ZGVudE5hbWUgVkFSQ0hBUjIoMjU1KSwKKyAgICBkZXB0SWQgTlVNQkVSKDM4KSwKKyAgICBhZGRyZXNzSWQgTlVNQkVSKDM4KSwKKyAgICBhY2NvdW50SWQgVkFSQ0hBUjIoMjU1KSwKICAgICBjb25zdHJhaW50IHN0X2N0IHByaW1hcnkga2V5IChzdHVkZW50SWQpLAogICAgIEZPUkVJR04gS0VZIChkZXB0SWQpIFJFRkVSRU5DRVMgZGVwdCAoZGVwdElkKSwKICAgICBGT1JFSUdOIEtFWSAoYWRkcmVzc0lkKSBSRUZFUkVOQ0VTIGFkZHJlc3MgKGFkZHJlc3NJZCksCkBAIC00MiwxNiArNDIsMTYgQEAKICk7CiAKIGNyZWF0ZSB0YWJsZSBjb3Vyc2UgKAotICAgIGNvdXJzZUlkIE5VTUJFUigzOCksIAotICAgIGRlcHRJZCBOVU1CRVIoMzgpLCAKLSAgICBjb3Vyc2VOYW1lIFZBUkNIQVIyKDI1NSksIAotICAgIHN5bGFidXMgQkxPQiAoMTBrKSwgCisgICAgY291cnNlSWQgTlVNQkVSKDM4KSwKKyAgICBkZXB0SWQgTlVNQkVSKDM4KSwKKyAgICBjb3Vyc2VOYW1lIFZBUkNIQVIyKDI1NSksCisgICAgc3lsYWJ1cyBCTE9CICgxMGspLAogICAgIGNvbnN0cmFpbnQgY291cnNlX2N0IHByaW1hcnkga2V5IChjb3Vyc2VJZCksCiAgICAgRk9SRUlHTiBLRVkgKGRlcHRJZCkgUkVGRVJFTkNFUyBkZXB0IChkZXB0SWQpCiApOwotIAorCiBjcmVhdGUgdGFibGUgc3R1ZF9jb3Vyc2UgKAotICAgIGNvdXJzZUlkIE5VTUJFUigzOCksIAorICAgIGNvdXJzZUlkIE5VTUJFUigzOCksCiAgICAgc3R1ZGVudElkIE5VTUJFUigzOCksCiAgICAgY29uc3RyYWludCBzdGNvX2N0IHByaW1hcnkga2V5IChjb3Vyc2VJZCwgc3R1ZGVudElkKSwKICAgICBGT1JFSUdOIEtFWSAoY291cnNlSWQpIFJFRkVSRU5DRVMgY291cnNlIChjb3Vyc2VJZCksCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29sbGVnZWFwcC9zcWwvQ29sbGVnZUFwcF9wc3FsLnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb2xsZWdlYXBwL3NxbC9Db2xsZWdlQXBwX3BzcWwuc3FsCmluZGV4IDYzNDI1ODcuLmJlMWZlNGIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb2xsZWdlYXBwL3NxbC9Db2xsZWdlQXBwX3BzcWwuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb2xsZWdlYXBwL3NxbC9Db2xsZWdlQXBwX3BzcWwuc3FsCkBAIC03LDM0ICs3LDM0IEBACiAKIAogQ1JFQVRFIFRBQkxFIEFERFJFU1MgKAotICAgIEFERFJFU1NJRCBERUNJTUFMKDM4KSwgCi0gICAgU1RSRUVUIFZBUkNIQVIoMjU1KSwgCi0gICAgQ09ERSBERUNJTUFMKDM4KSwgCi0gICAgQ0lUWSBWQVJDSEFSKDI1NSksIAotICAgIFNUQVRFIFZBUkNIQVIoMjU1KSwgCisgICAgQUREUkVTU0lEIERFQ0lNQUwoMzgpLAorICAgIFNUUkVFVCBWQVJDSEFSKDI1NSksCisgICAgQ09ERSBERUNJTUFMKDM4KSwKKyAgICBDSVRZIFZBUkNIQVIoMjU1KSwKKyAgICBTVEFURSBWQVJDSEFSKDI1NSksCiAgICAgQ09OU1RSQUlOVCBBRERSX0NUIFBSSU1BUlkgS0VZIChBRERSRVNTSUQpCiApOwogCiBDUkVBVEUgVEFCTEUgQUNDT1VOVCAoCi0gICAgQUNDT1VOVElEIFZBUkNIQVIoMjU1KSwgCi0gICAgRkVFU1BBSUQgREVDSU1BTCgzOCwyKSwgCi0gICAgRkVFU0RVRSBERUNJTUFMKDM4LDIpLCAKLSAgICBEVUVEQVRFIFRJTUVTVEFNUCwgCisgICAgQUNDT1VOVElEIFZBUkNIQVIoMjU1KSwKKyAgICBGRUVTUEFJRCBERUNJTUFMKDM4LDIpLAorICAgIEZFRVNEVUUgREVDSU1BTCgzOCwyKSwKKyAgICBEVUVEQVRFIFRJTUVTVEFNUCwKICAgICBDT05TVFJBSU5UIEFDQ19DVCBQUklNQVJZIEtFWSAoQUNDT1VOVElEKQogKTsKIAogQ1JFQVRFIFRBQkxFIERFUFQgKAotICAgIERFUFRJRCBERUNJTUFMKDM4KSwgCi0gICAgREVQVE5BTUUgVkFSQ0hBUigyNTUpLCAKKyAgICBERVBUSUQgREVDSU1BTCgzOCksCisgICAgREVQVE5BTUUgVkFSQ0hBUigyNTUpLAogICAgIENPTlNUUkFJTlQgREVQVF9DVCBQUklNQVJZIEtFWSAoREVQVElEKQogKTsKIAogQ1JFQVRFIFRBQkxFIFNUVURFTlQgKAotICAgIFNUVURFTlRJRCBERUNJTUFMKDM4KSwgCi0gICAgU1RVREVOVE5BTUUgVkFSQ0hBUigyNTUpLCAKLSAgICBERVBUSUQgREVDSU1BTCgzOCksIAotICAgIEFERFJFU1NJRCBERUNJTUFMKDM4KSwgCi0gICAgQUNDT1VOVElEIFZBUkNIQVIoMjU1KSwgCisgICAgU1RVREVOVElEIERFQ0lNQUwoMzgpLAorICAgIFNUVURFTlROQU1FIFZBUkNIQVIoMjU1KSwKKyAgICBERVBUSUQgREVDSU1BTCgzOCksCisgICAgQUREUkVTU0lEIERFQ0lNQUwoMzgpLAorICAgIEFDQ09VTlRJRCBWQVJDSEFSKDI1NSksCiAgICAgQ09OU1RSQUlOVCBzdF9DVCBQUklNQVJZIEtFWSAoU1RVREVOVElEKSwKICAgICBGT1JFSUdOIEtFWSAoREVQVElEKSBSRUZFUkVOQ0VTIERFUFQgKERFUFRJRCksCiAgICAgRk9SRUlHTiBLRVkgKEFERFJFU1NJRCkgUkVGRVJFTkNFUyBBRERSRVNTIChBRERSRVNTSUQpLApAQCAtNDIsMTYgKzQyLDE2IEBACiApOwogCiBDUkVBVEUgVEFCTEUgQ09VUlNFICgKLSAgICBDT1VSU0VJRCBERUNJTUFMKDM4KSwgCi0gICAgREVQVElEIERFQ0lNQUwoMzgpLCAKLSAgICBDT1VSU0VOQU1FIFZBUkNIQVIoMjU1KSwgCi0gICAgU1lMQUJVUyBCWVRFQSwgCisgICAgQ09VUlNFSUQgREVDSU1BTCgzOCksCisgICAgREVQVElEIERFQ0lNQUwoMzgpLAorICAgIENPVVJTRU5BTUUgVkFSQ0hBUigyNTUpLAorICAgIFNZTEFCVVMgQllURUEsCiAgICAgQ09OU1RSQUlOVCBDT1VSU0VfQ1QgUFJJTUFSWSBLRVkgKENPVVJTRUlEKSwKICAgICBGT1JFSUdOIEtFWSAoREVQVElEKSBSRUZFUkVOQ0VTIERFUFQgKERFUFRJRCkKICk7Ci0gCisKIENSRUFURSBUQUJMRSBTVFVEX0NPVVJTRSAoCi0gICAgQ09VUlNFSUQgREVDSU1BTCgzOCksIAorICAgIENPVVJTRUlEIERFQ0lNQUwoMzgpLAogICAgIFNUVURFTlRJRCBERUNJTUFMKDM4KSwKICAgICBDT05TVFJBSU5UIFNUQ09fQ1QgUFJJTUFSWSBLRVkgKENPVVJTRUlELCBTVFVERU5USUQpLAogICAgIEZPUkVJR04gS0VZIChDT1VSU0VJRCkgUkVGRVJFTkNFUyBDT1VSU0UgKENPVVJTRUlEKSwKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb3B5U2VtYW50aWNzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29weVNlbWFudGljcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGMyY2RiOTYuLmE5MTIwYTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb3B5U2VtYW50aWNzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJDb3B5U2VtYW50aWNzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tY21wLW1hcHBpbmdzLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWNtcC1tYXBwaW5ncy54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb3B5U2VtYW50aWNzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb3B5U2VtYW50aWNzL2J1aWxkLnhtbAppbmRleCBjYzc2MWM4Li5hNDI4NzliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29weVNlbWFudGljcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3MvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0EqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0FIb21lLmNsYXNzLCoqL0EuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY29weVNlbWFudGljc19kZXJieS5zcWwiLz4KQEAgLTcyLDIyICs3MiwyMiBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSIke2Jhc2VkaXJ9Ly4uL2NvbW1vbi9kZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX2NvcHlTZW1hbnRpY3NfZGVyYnkuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGFsbAogICAgICAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29weVNlbWFudGljcy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29weVNlbWFudGljcy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMzljMjNhYS4uNGE2Y2NiZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3MvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb3B5U2VtYW50aWNzL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzMsMzQgKzMzLDM0IEBACiAgKiBAdmVyc2lvbgogICovCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KLQluZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CisgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNUQVJUIik7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImNvcHlTZW1hbnRpY3MiKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiY29weVNlbWFudGljcyIpOwogCiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvUmVtb3RlQTEiKTsKICAgICAgICAgICAgIHRlc3QuQUhvbWUgYWhvbWUgPSAodGVzdC5BSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCB0ZXN0LkFIb21lLmNsYXNzKTsKIAotICAgICAgICAgICAgdGVzdC5BIGFiZWFuID0gYWhvbWUuY3JlYXRlKG5ldyBJbnRlZ2VyKDEpLCAiQTEiLCBuZXcgamF2YS51dGlsLkRhdGUoNjAwMDAwMDAwMDAwTCksIAorICAgICAgICAgICAgdGVzdC5BIGFiZWFuID0gYWhvbWUuY3JlYXRlKG5ldyBJbnRlZ2VyKDEpLCAiQTEiLCBuZXcgamF2YS51dGlsLkRhdGUoNjAwMDAwMDAwMDAwTCksCiAgICAgICAgICAgICAgICAgbmV3IGJ5dGVbXXsnQScsICdCJywgJ0MnfSk7CiAKICAgICAgICAgICAgIGFiZWFuLnRlc3QoKTsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBjb3B5U2VtYW50aWNzIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBjb3B5U2VtYW50aWNzIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRklOSVNIIik7CiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiBleGNlcHRpb246Iik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBjb3B5U2VtYW50aWNzIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBjb3B5U2VtYW50aWNzIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0JICBzdGF0LnByaW50U3VtbWFyeSgiY29weVNlbWFudGljcyIpOworICAgICAgc3RhdC5wcmludFN1bW1hcnkoImNvcHlTZW1hbnRpY3MiKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb3B5U2VtYW50aWNzL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3MvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggNDM0NmJjYy4uNDk0MWY2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3MvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3MvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTIzLDE0ICsyMywxNCBAQAogICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPkExPC9lamItbmFtZT4KICAgICAgIDxqbmRpLW5hbWU+U2ltcGxlQTE8L2puZGktbmFtZT4KLQk8cmVmcmVzaC1wZXJpb2QtaW4tc2Vjb25kcz42MDA8L3JlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+Ci0JPGJlYW4tY2FjaGU+Ci0JCTxtYXgtY2FjaGUtc2l6ZT42MDwvbWF4LWNhY2hlLXNpemU+Ci0JCTxpcy1jYWNoZS1vdmVyZmxvdy1hbGxvd2VkPnRydWU8L2lzLWNhY2hlLW92ZXJmbG93LWFsbG93ZWQ+Ci0JCTxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgotCQk8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+NjAwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+Ci0JCTx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5GSUZPPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4KLQk8L2JlYW4tY2FjaGU+CisgICAgPHJlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+NjAwPC9yZWZyZXNoLXBlcmlvZC1pbi1zZWNvbmRzPgorICAgIDxiZWFuLWNhY2hlPgorICAgICAgICA8bWF4LWNhY2hlLXNpemU+NjA8L21heC1jYWNoZS1zaXplPgorICAgICAgICA8aXMtY2FjaGUtb3ZlcmZsb3ctYWxsb3dlZD50cnVlPC9pcy1jYWNoZS1vdmVyZmxvdy1hbGxvd2VkPgorICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjAwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjYwMDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+RklGTzwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+CisgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogCiAgIDxjbXAtcmVzb3VyY2U+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29weVNlbWFudGljcy9lamIvQS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3MvZWpiL0EuamF2YQppbmRleCBmYjg3YWNkLi4zOTIwNzI1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29weVNlbWFudGljcy9lamIvQS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb3B5U2VtYW50aWNzL2VqYi9BLmphdmEKQEAgLTI0LDggKzI0LDggQEAKICAqLwogCiBwdWJsaWMgaW50ZXJmYWNlIEEgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJPYmplY3QgewotICAgIAorCiAgICAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgCisKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3MvZWpiL0FCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29weVNlbWFudGljcy9lamIvQUJlYW4uamF2YQppbmRleCBkODgxMjE4Li4wNDRlNjQwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29weVNlbWFudGljcy9lamIvQUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29weVNlbWFudGljcy9lamIvQUJlYW4uamF2YQpAQCAtMjUsNjUgKzI1LDY1IEBACiAKIAogcHVibGljIGFic3RyYWN0IGNsYXNzIEFCZWFuIGltcGxlbWVudHMgamFrYXJ0YS5lamIuRW50aXR5QmVhbiB7Ci0gICAgCisKICAgICBwcml2YXRlIGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQgY29udGV4dDsKLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI3NldEVudGl0eUNvbnRleHQoamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQgYUNvbnRleHQpIHsKICAgICAgICAgY29udGV4dD1hQ29udGV4dDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJBY3RpdmF0ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUGFzc2l2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUmVtb3ZlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVidWc6IEFCZWFuIGVqYlJlbW92ZSIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI3Vuc2V0RW50aXR5Q29udGV4dCgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgewogICAgICAgICBjb250ZXh0PW51bGw7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiTG9hZCgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJTdG9yZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IEludGVnZXIgZ2V0SWQoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRJZChJbnRlZ2VyIGlkKTsKIApAQCAtOTYsNyArOTYsNyBAQAogICAgIHB1YmxpYyBhYnN0cmFjdCBieXRlW10gZ2V0QmxiKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0QmxiKGJ5dGVbXSBiKTsKIAotICAgIHB1YmxpYyBqYXZhLmxhbmcuSW50ZWdlciBlamJDcmVhdGUoSW50ZWdlciBpZCwgamF2YS5sYW5nLlN0cmluZyBuYW1lLCBqYXZhLnV0aWwuRGF0ZSBkYXRlLCBieXRlW10gYikgCisgICAgcHVibGljIGphdmEubGFuZy5JbnRlZ2VyIGVqYkNyZWF0ZShJbnRlZ2VyIGlkLCBqYXZhLmxhbmcuU3RyaW5nIG5hbWUsIGphdmEudXRpbC5EYXRlIGRhdGUsIGJ5dGVbXSBiKQogICAgICAgICB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIHsKIAogICAgICAgICBzZXRJZChpZCk7CkBAIC0xMDYsMTQgKzEwNiwxNCBAQAogCiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKEludGVnZXIgaWQsIGphdmEubGFuZy5TdHJpbmcgbmFtZSwgamF2YS51dGlsLkRhdGUgZGF0ZSwgYnl0ZVtdIGIpIAorCisgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZShJbnRlZ2VyIGlkLCBqYXZhLmxhbmcuU3RyaW5nIG5hbWUsIGphdmEudXRpbC5EYXRlIGRhdGUsIGJ5dGVbXSBiKQogICAgICAgICB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIHsgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKICAgICAgICAgamF2YS51dGlsLkRhdGUgZDEgPSBnZXREYXRlKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVidWc6IEFCZWFuIGQxOiAiICsgZDEpOwotICAgICAgICAKKwogICAgICAgICBkMS5zZXRZZWFyKDIwMDApOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlYnVnOiBBQmVhbiBkMSBhZnRlciBzZXRZZWFyOiAiICsgZDEpOwogCkBAIC0xMjgsOCArMTI4LDggQEAKIAogICAgICAgICBkMSA9IGdldERhdGUoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWJ1ZzogQUJlYW4gZDE6ICIgKyBkMSk7Ci0gICAgICAgIGlmIChkMS5lcXVhbHMoZDIpKSAKLSAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNhbWUgZDEgYW5kIGQyIGFmdGVyIHNldCEiKTsgCisgICAgICAgIGlmIChkMS5lcXVhbHMoZDIpKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU2FtZSBkMSBhbmQgZDIgYWZ0ZXIgc2V0ISIpOwogCiAgICAgICAgIHNldERhdGUobnVsbCk7CiAgICAgICAgIGlmIChnZXREYXRlKCkgIT0gbnVsbCkKQEAgLTEzOSwyMSArMTM5LDIxIEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVidWc6IEFCZWFuIGJbMF06ICIgKyBiWzBdKTsKICAgICAgICAgYlswXSA9IDkwOwogCi0gICAgICAgIGJ5dGVbXSBiMSA9IGdldEJsYigpOyAKKyAgICAgICAgYnl0ZVtdIGIxID0gZ2V0QmxiKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVidWc6IEFCZWFuIGJbMF06ICIgKyBiWzBdKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWJ1ZzogQUJlYW4gYjFbMF06ICIgKyBiMVswXSk7CiAKICAgICAgICAgaWYgKGJbMF0gPT0gYjFbMF0pCi0gICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTYW1lIGIgYW5kIGIxISIpOyAKLSAKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNhbWUgYiBhbmQgYjEhIik7CisKICAgICAgICAgc2V0QmxiKGIpOwotICAgICAgICBiMVsxXSA9IDkwOyAKKyAgICAgICAgYjFbMV0gPSA5MDsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWJ1ZzogQUJlYW4gYlswXTogIiArIGJbMF0pOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlYnVnOiBBQmVhbiBiWzFdOiAiICsgYlsxXSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVidWc6IEFCZWFuIGIxWzBdOiAiICsgYjFbMF0pOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlYnVnOiBBQmVhbiBiMVsxXTogIiArIGIxWzFdKTsKIAotICAgICAgICBiID0gZ2V0QmxiKCk7ICAKKyAgICAgICAgYiA9IGdldEJsYigpOwogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVidWc6IEFCZWFuIGJbMF06ICIgKyBiWzBdKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWJ1ZzogQUJlYW4gYlsxXTogIiArIGJbMV0pOwpAQCAtMTYxLDcgKzE2MSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVidWc6IEFCZWFuIGIxWzFdOiAiICsgYjFbMV0pOwogCiAgICAgICAgIGlmIChiWzFdID09IGIxWzFdKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU2FtZSBiIGFuZCBiMSBhZnRlciBzZXQhIik7IAorICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU2FtZSBiIGFuZCBiMSBhZnRlciBzZXQhIik7CiAKICAgICAgICAgc2V0QmxiKG51bGwpOwogICAgICAgICBpZiAoZ2V0QmxiKCkgIT0gbnVsbCkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb3B5U2VtYW50aWNzL2VqYi9BSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3MvZWpiL0FIb21lLmphdmEKaW5kZXggODIyYjFjMC4uMDdjODQ4NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3MvZWpiL0FIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3MvZWpiL0FIb21lLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiBwdWJsaWMgaW50ZXJmYWNlIEFIb21lIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCSG9tZSB7Ci0gICAgCisKICAgICBwdWJsaWMgIEEgY3JlYXRlKEludGVnZXIgaSwgamF2YS5sYW5nLlN0cmluZyBuYW1lLCBqYXZhLnV0aWwuRGF0ZSBkLCBieXRlW10gYikgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29weVNlbWFudGljcy9zcWwvY29weVNlbWFudGljc19kYjIuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3Mvc3FsL2NvcHlTZW1hbnRpY3NfZGIyLnNxbAppbmRleCAwYzQyNWE0Li40NWZmYTRjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29weVNlbWFudGljcy9zcWwvY29weVNlbWFudGljc19kYjIuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb3B5U2VtYW50aWNzL3NxbC9jb3B5U2VtYW50aWNzX2RiMi5zcWwKQEAgLTEsMTAgKzEsMTAgQEAKIGRyb3AgdGFibGUgQ09QWVRFU1Q7CiAKIGNyZWF0ZSB0YWJsZSBDT1BZVEVTVCAoCi0JaWQgCWludCBwcmltYXJ5IGtleSBOT1QgTlVMTCwKLQluYW1lCVZBUkNIQVIoMTAwKSwKLQlteWRhdGUJVElNRVNUQU1QLAotCWJsYglCTE9CCisgICAgaWQgICAgIGludCBwcmltYXJ5IGtleSBOT1QgTlVMTCwKKyAgICBuYW1lICAgIFZBUkNIQVIoMTAwKSwKKyAgICBteWRhdGUgICAgVElNRVNUQU1QLAorICAgIGJsYiAgICBCTE9CCiApOwogCiBjb21taXQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29weVNlbWFudGljcy9zcWwvY29weVNlbWFudGljc19kZXJieS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29weVNlbWFudGljcy9zcWwvY29weVNlbWFudGljc19kZXJieS5zcWwKaW5kZXggODJmZGQwYS4uM2Q1MmQ3MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3Mvc3FsL2NvcHlTZW1hbnRpY3NfZGVyYnkuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb3B5U2VtYW50aWNzL3NxbC9jb3B5U2VtYW50aWNzX2RlcmJ5LnNxbApAQCAtMSw4ICsxLDggQEAKIGRyb3AgdGFibGUgQ09QWVRFU1Q7CiAKIGNyZWF0ZSB0YWJsZSBDT1BZVEVTVCAoCi0JaWQgCWludCBwcmltYXJ5IGtleSBOT1QgTlVMTCwKLQluYW1lCVZBUkNIQVIoMTAwKSwKLQlteWRhdGUJVElNRVNUQU1QLAotCWJsYglCTE9CCisgICAgaWQgICAgIGludCBwcmltYXJ5IGtleSBOT1QgTlVMTCwKKyAgICBuYW1lICAgIFZBUkNIQVIoMTAwKSwKKyAgICBteWRhdGUgICAgVElNRVNUQU1QLAorICAgIGJsYiAgICBCTE9CCiApOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3Mvc3FsL2NvcHlTZW1hbnRpY3NfaWZ4LnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb3B5U2VtYW50aWNzL3NxbC9jb3B5U2VtYW50aWNzX2lmeC5zcWwKaW5kZXggOWY5Mjc2Yy4uODg1Nzc4YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3Mvc3FsL2NvcHlTZW1hbnRpY3NfaWZ4LnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29weVNlbWFudGljcy9zcWwvY29weVNlbWFudGljc19pZnguc3FsCkBAIC0xLDEwICsxLDEwIEBACiBkcm9wIHRhYmxlIENPUFlURVNUOwogCiBjcmVhdGUgdGFibGUgQ09QWVRFU1QgKAotCWlkIAlpbnQgcHJpbWFyeSBrZXksCi0JbmFtZQlWQVJDSEFSKDEwMCksCi0JbXlkYXRlCURBVEUsCi0JYmxiCUJMT0IKKyAgICBpZCAgICAgaW50IHByaW1hcnkga2V5LAorICAgIG5hbWUgICAgVkFSQ0hBUigxMDApLAorICAgIG15ZGF0ZSAgICBEQVRFLAorICAgIGJsYiAgICBCTE9CCiApOwogCiBjb21taXQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29weVNlbWFudGljcy9zcWwvY29weVNlbWFudGljc19tc3NxbC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29weVNlbWFudGljcy9zcWwvY29weVNlbWFudGljc19tc3NxbC5zcWwKaW5kZXggYzJjZWQ3NC4uZmUyMWVmYSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3Mvc3FsL2NvcHlTZW1hbnRpY3NfbXNzcWwuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb3B5U2VtYW50aWNzL3NxbC9jb3B5U2VtYW50aWNzX21zc3FsLnNxbApAQCAtMiwxMCArMiwxMCBAQAogZ28KIAogY3JlYXRlIHRhYmxlIENPUFlURVNUICgKLQlJRCAJSU5UIFBSSU1BUlkgS0VZLAotCU5BTUUJVkFSQ0hBUigxMDApLAotCU1ZREFURQlEQVRFVElNRSwKLQlCTEIJSU1BR0UKKyAgICBJRCAgICAgSU5UIFBSSU1BUlkgS0VZLAorICAgIE5BTUUgICAgVkFSQ0hBUigxMDApLAorICAgIE1ZREFURSAgICBEQVRFVElNRSwKKyAgICBCTEIgICAgSU1BR0UKICkKIAogZ28KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb3B5U2VtYW50aWNzL3NxbC9jb3B5U2VtYW50aWNzX215c3FsLnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb3B5U2VtYW50aWNzL3NxbC9jb3B5U2VtYW50aWNzX215c3FsLnNxbAppbmRleCAxMTFmMjVlLi4yZTU2ZGU0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29weVNlbWFudGljcy9zcWwvY29weVNlbWFudGljc19teXNxbC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3Mvc3FsL2NvcHlTZW1hbnRpY3NfbXlzcWwuc3FsCkBAIC0xLDEwICsxLDEwIEBACiBEUk9QIFRBQkxFIENPUFlURVNUOwogCiBDUkVBVEUgVEFCTEUgQ09QWVRFU1QgKAotCUlEIAlJTlQgUFJJTUFSWSBLRVksCi0JTkFNRQlWQVJDSEFSKDEwMCksCi0JTVlEQVRFCURBVEUsCi0JQkxCCUJMT0IoMjU1KQorICAgIElEICAgICBJTlQgUFJJTUFSWSBLRVksCisgICAgTkFNRSAgICBWQVJDSEFSKDEwMCksCisgICAgTVlEQVRFICAgIERBVEUsCisgICAgQkxCICAgIEJMT0IoMjU1KQogKSBFTkdJTkU9SU5OT0RCOwogCiBjb21taXQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29weVNlbWFudGljcy9zcWwvY29weVNlbWFudGljc19vcmEuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3Mvc3FsL2NvcHlTZW1hbnRpY3Nfb3JhLnNxbAppbmRleCAzNDNkM2ZkLi5hMDU5ZmVkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29weVNlbWFudGljcy9zcWwvY29weVNlbWFudGljc19vcmEuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb3B5U2VtYW50aWNzL3NxbC9jb3B5U2VtYW50aWNzX29yYS5zcWwKQEAgLTEsMTAgKzEsMTAgQEAKIGRyb3AgdGFibGUgQ09QWVRFU1Q7CiAKIGNyZWF0ZSB0YWJsZSBDT1BZVEVTVCAoCi0JaWQgCWludCBwcmltYXJ5IGtleSwKLQluYW1lCVZBUkNIQVIyKDEwMCksCi0JbXlkYXRlCURBVEUsCi0JYmxiCVJBVygyNTUpCisgICAgaWQgICAgIGludCBwcmltYXJ5IGtleSwKKyAgICBuYW1lICAgIFZBUkNIQVIyKDEwMCksCisgICAgbXlkYXRlICAgIERBVEUsCisgICAgYmxiICAgIFJBVygyNTUpCiApOwogCiBjb21taXQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29weVNlbWFudGljcy9zcWwvY29weVNlbWFudGljc19wYnMuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3Mvc3FsL2NvcHlTZW1hbnRpY3NfcGJzLnNxbAppbmRleCAwYTFlZjhjLi4wOGEyZTdmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29weVNlbWFudGljcy9zcWwvY29weVNlbWFudGljc19wYnMuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb3B5U2VtYW50aWNzL3NxbC9jb3B5U2VtYW50aWNzX3Bicy5zcWwKQEAgLTEsMTAgKzEsMTAgQEAKIGRyb3AgdGFibGUgQ09QWVRFU1Q7CiAKIGNyZWF0ZSB0YWJsZSBDT1BZVEVTVCAoCi0JaWQgCWludCBwcmltYXJ5IGtleSwKLQluYW1lCVZBUkNIQVIyKDEwMCksCi0JbXlkYXRlCURBVEUsCi0JYmxiCUJMT0IoMTBrKQorICAgIGlkICAgICBpbnQgcHJpbWFyeSBrZXksCisgICAgbmFtZSAgICBWQVJDSEFSMigxMDApLAorICAgIG15ZGF0ZSAgICBEQVRFLAorICAgIGJsYiAgICBCTE9CKDEwaykKICk7CiAKIGNvbW1pdDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb3B5U2VtYW50aWNzL3NxbC9jb3B5U2VtYW50aWNzX3BzcWwuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3Mvc3FsL2NvcHlTZW1hbnRpY3NfcHNxbC5zcWwKaW5kZXggMmFjOGE4Ni4uMTU1NDNlOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3Mvc3FsL2NvcHlTZW1hbnRpY3NfcHNxbC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3Mvc3FsL2NvcHlTZW1hbnRpY3NfcHNxbC5zcWwKQEAgLTEsMTAgKzEsMTAgQEAKIERST1AgVEFCTEUgQ09QWVRFU1QgY2FzY2FkZTsKIAogQ1JFQVRFIFRBQkxFIENPUFlURVNUICgKLQlJRCAJSU5UIFBSSU1BUlkgS0VZLAotCU5BTUUJVkFSQ0hBUigxMDApLAotCU1ZREFURQlUSU1FU1RBTVAsCi0JQkxCCUJZVEVBCisgICAgSUQgICAgIElOVCBQUklNQVJZIEtFWSwKKyAgICBOQU1FICAgIFZBUkNIQVIoMTAwKSwKKyAgICBNWURBVEUgICAgVElNRVNUQU1QLAorICAgIEJMQiAgICBCWVRFQQogKTsKIAogY29tbWl0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3Mvc3FsL2NvcHlTZW1hbnRpY3Nfc3liLnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jb3B5U2VtYW50aWNzL3NxbC9jb3B5U2VtYW50aWNzX3N5Yi5zcWwKaW5kZXggMzRmOTAzYi4uM2RkNzQwZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NvcHlTZW1hbnRpY3Mvc3FsL2NvcHlTZW1hbnRpY3Nfc3liLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY29weVNlbWFudGljcy9zcWwvY29weVNlbWFudGljc19zeWIuc3FsCkBAIC0yLDEwICsyLDEwIEBACiBnbwogCiBjcmVhdGUgdGFibGUgQ09QWVRFU1QgKAotCUlEIAlJTlQgcHJpbWFyeSBrZXkgTk9UIE5VTEwsCi0JTkFNRQlWQVJDSEFSKDEwMCksCi0JTVlEQVRFCURBVEVUSU1FLAotCUJMQglJTUFHRQorICAgIElEICAgICBJTlQgcHJpbWFyeSBrZXkgTk9UIE5VTEwsCisgICAgTkFNRSAgICBWQVJDSEFSKDEwMCksCisgICAgTVlEQVRFICAgIERBVEVUSU1FLAorICAgIEJMQiAgICBJTUFHRQogKQogCiBnbwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NyZWF0ZUV4Y2VwdGlvbnNUZXN0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvYnVpbGQucHJvcGVydGllcwppbmRleCBiYWQ1YjU5Li5jOWQ3MjI1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJDcmVhdGVFeGNlcHRpb25zVGVzdCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWNtcC1tYXBwaW5ncy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1jbXAtbWFwcGluZ3MueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NyZWF0ZUV4Y2VwdGlvbnNUZXN0L2J1aWxkLnhtbAppbmRleCBmZjUwYTZmLi42ZGU3ZjFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jcmVhdGVFeGNlcHRpb25zVGVzdC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQSouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQTFIb21lLmNsYXNzLCoqL0ExLmNsYXNzLCoqL0ExVW5QS0hvbWUuY2xhc3MsKiovQTJVblBLSG9tZS5jbGFzcywqKi9BMkhvbWUuY2xhc3MsKiovQTIuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjksMTUgKzY5LDE1IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9IiR7YmFzZWRpcn0vLi4vY29tbW9uL2RlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAKIDwhLS0KQEAgLTg1LDEyICs4NSwxMiBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZGVsZXRlX3RhYmxlcy5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogLS0+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBhbGwKICAgICAgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NyZWF0ZUV4Y2VwdGlvbnNUZXN0L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jcmVhdGVFeGNlcHRpb25zVGVzdC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMTg5ZTNhZS4uNGNjYjMwNyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NyZWF0ZUV4Y2VwdGlvbnNUZXN0L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zOSwxMiArMzksMTIgQEAKICAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGUuQTFVblBLSG9tZSBhMXVuaG9tZTsKICAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGUuQTJIb21lIGEyaG9tZTsKICAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGUuQTJVblBLSG9tZSBhMnVuaG9tZTsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNUQVJUIik7CiAgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJjcmVhdGVFeGNlcHRpb25zVGVzdCIpOwpAQCAtNTQsMTMgKzU0LDEzIEBACiAgICAgICAgICAgICBydW5DcmVhdGVFeGNlcHRpb24xMVRlc3QoKTsKICAgICAgICAgICAgIHJ1bkJlYW5TdGF0ZVJlc2V0VGVzdCgpOwogCi0JICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgY3JlYXRlRXhjZXB0aW9uc1Rlc3QiLCBzdGF0LlBBU1MpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGNyZWF0ZUV4Y2VwdGlvbnNUZXN0Iiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRklOSVNIIik7CiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiBleGNlcHRpb246Iik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBjcmVhdGVFeGNlcHRpb25zVGVzdCIsIHN0YXQuRkFJTCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgY3JlYXRlRXhjZXB0aW9uc1Rlc3QiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJjcmVhdGVFeGNlcHRpb25zVGVzdCIpOwogICAgIH0KQEAgLTczLDE0ICs3MywxNCBAQAogICAgICAgICBhMmhvbWUgPSAoY3JlYXRlLkEySG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBjcmVhdGUuQTJIb21lLmNsYXNzKTsKIAogICAgICAgICBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvQ1JVTjIiKTsKLSAgICAgICAgYTJ1bmhvbWUgPSAoY3JlYXRlLkEyVW5QS0hvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgIGEydW5ob21lID0gKGNyZWF0ZS5BMlVuUEtIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgY3JlYXRlLkEyVW5QS0hvbWUuY2xhc3MpOwogCiAgICAgICAgIG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9DUjEiKTsKICAgICAgICAgYTFob21lID0gKGNyZWF0ZS5BMUhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgY3JlYXRlLkExSG9tZS5jbGFzcyk7CiAKICAgICAgICAgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0NSVU4xIik7Ci0gICAgICAgIGExdW5ob21lID0gKGNyZWF0ZS5BMVVuUEtIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICBhMXVuaG9tZSA9IChjcmVhdGUuQTFVblBLSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgIGNyZWF0ZS5BMVVuUEtIb21lLmNsYXNzKTsKIAogICAgIH0KQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgKiBJZiBlamJDcmVhdGUgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgdGhlIHRyYW5zYWN0aW9uIGlzIHJvbGxlZCBiYWNrLgogICAgICAqIElmIGVqYlBvc3RDcmVhdGUgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgdGhlIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZC4KICAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHJ1bkNyZWF0ZUV4Y2VwdGlvbjIwVGVzdCgpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sIAorICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcnVuQ3JlYXRlRXhjZXB0aW9uMjBUZXN0KCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwKICAgICAgICAgICAgIGpha2FydGEuZWpiLkZpbmRlckV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuUmVtb3ZlRXhjZXB0aW9uIHsKIAogICAgICAgICAvLyBUZXN0IENyZWF0ZUV4Y2VwdGlvbiBmcm9tIGVqYlBvc3RDcmVhdGUKQEAgLTEwNCw3ICsxMDQsNyBAQAogICAgICAgICBjcmVhdGUuQTIgYTJiZWFuID0gYTJob21lLmZpbmRCeVByaW1hcnlLZXkoIkEyIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRk9VTkQgQTIgQmVhbiBhZnRlciBmYWlsZWQgZWpiUG9zdENyZWF0ZSIpOwogCi0gICAgICAgIC8vIFRlc3QgQ3JlYXRlRXhjZXB0aW9uIGZyb20gZWpiQ3JlYXRlIAorICAgICAgICAvLyBUZXN0IENyZWF0ZUV4Y2VwdGlvbiBmcm9tIGVqYkNyZWF0ZQogICAgICAgICB0cnkgewogICAgICAgICAgICAgYTJob21lLmNyZWF0ZSgpOwogICAgICAgICB9IGNhdGNoIChqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24gZSkgewpAQCAtMTMwLDcgKzEzMCw3IEBACiAgICAgICAgIGlmIChjLnNpemUoKSA9PSAxKQogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGT1VORCBBMiBCZWFuIHdpdGggVW5rbm93biBQSyBhZnRlciBmYWlsZWQgZWpiUG9zdENyZWF0ZSIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SIGZvdW5kICIgKyBjLnNpemUoKSAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRVJST1IgZm91bmQgIiArIGMuc2l6ZSgpCiAgICAgICAgICAgICAgICAgKyAiIEEyIEJlYW5zIHdpdGggVW5rbm93biBQSyBhZnRlciBmYWlsZWQgZWpiUG9zdENyZWF0ZSIpOwogCiAgICAgfQpAQCAtMTQwLDcgKzE0MCw3IEBACiAgICAgICogSWYgZWpiQ3JlYXRlIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIHRoZSB0cmFuc2FjdGlvbiBpcyByb2xsZWQgYmFjay4KICAgICAgKiBJZiBlamJQb3N0Q3JlYXRlIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIHRoZSB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQuCiAgICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBydW5DcmVhdGVFeGNlcHRpb24xMVRlc3QoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCAKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHJ1bkNyZWF0ZUV4Y2VwdGlvbjExVGVzdCgpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sCiAgICAgICAgICAgICBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb24sIGpha2FydGEuZWpiLlJlbW92ZUV4Y2VwdGlvbiB7CiAKICAgICAgICAgLy8gVGVzdCBDcmVhdGVFeGNlcHRpb24gZnJvbSBlamJQb3N0Q3JlYXRlCkBAIC0xNTYsNyArMTU2LDcgQEAKIAogICAgICAgICAvLyBUZXN0IENyZWF0ZUV4Y2VwdGlvbiBmcm9tIGVqYlBvc3RDcmVhdGUgd2l0aG91dCBhIGNvbnRhaW5lciB0cmFuc2FjdGlvbi4KICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGExaG9tZS5jcmVhdGUoIkExMSIsIHRydWUpOyAKKyAgICAgICAgICAgIGExaG9tZS5jcmVhdGUoIkExMSIsIHRydWUpOwogICAgICAgICB9IGNhdGNoIChqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgZXhwZWN0ZWQgQ3JlYXRlRXhjZXB0aW9uOiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CkBAIC0xNjcsNyArMTY3LDcgQEAKIAogICAgICAgICAvLyBXZSB3aWxsIGFsc28gdGVzdCBub24tdHJhbnNhY3Rpb25hbCByZW1vdmUsIGFzIHRoZXJlIGFyZSBubyBvdGhlcgogICAgICAgICAvLyBDTVAgdW5pdCB0ZXN0IHRoYXQgdGVzdHMgdGhpcyBmZWF0dXJlLgotICAgICAgICBhMWJlYW4ucmVtb3ZlKCk7IAorICAgICAgICBhMWJlYW4ucmVtb3ZlKCk7CiAKICAgICAgICAgLy8gT25seSAxIEExIGJlYW4gc2hvdWxkIGJlIGxlZnQuCiAgICAgICAgIENvbGxlY3Rpb24gYyA9IGExaG9tZS5maW5kQWxsKCk7CkBAIC0xNzksNyArMTc5LDcgQEAKIAogICAgICAgICAvLyBUZXN0IENyZWF0ZUV4Y2VwdGlvbiBmcm9tIGVqYkNyZWF0ZSB3aXRob3V0IGEgY29udGFpbmVyIHRyYW5zYWN0aW9uLgogICAgICAgICB0cnkgewotICAgICAgICAgICAgYTFob21lLmNyZWF0ZSgiQTExMSIsIGZhbHNlKTsgCisgICAgICAgICAgICBhMWhvbWUuY3JlYXRlKCJBMTExIiwgZmFsc2UpOwogICAgICAgICB9IGNhdGNoIChqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgZXhwZWN0ZWQgQ3JlYXRlRXhjZXB0aW9uOiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CkBAIC0yMDQsNyArMjA0LDcgQEAKICAgICAgICAgaWYgKGMuc2l6ZSgpID09IDEpCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZPVU5EIEExIEJlYW4gd2l0aCBVbmtub3duIFBLIGFmdGVyIGZhaWxlZCBlamJQb3N0Q3JlYXRlIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRVJST1IgZm91bmQgIiArIGMuc2l6ZSgpIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFUlJPUiBmb3VuZCAiICsgYy5zaXplKCkKICAgICAgICAgICAgICAgICArICIgQTEgQmVhbnMgd2l0aCBVbmtub3duIFBLIGFmdGVyIGZhaWxlZCBlamJQb3N0Q3JlYXRlIik7CiAKICAgICB9CkBAIC0yNDIsNSArMjQyLDUgQEAKICAgICAgICAgfQogCiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvZWpiL0ExLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvZWpiL0ExLmphdmEKaW5kZXggM2RlMWY4Yy4uM2QzMmU5OSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NyZWF0ZUV4Y2VwdGlvbnNUZXN0L2VqYi9BMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jcmVhdGVFeGNlcHRpb25zVGVzdC9lamIvQTEuamF2YQpAQCAtMjQsNiArMjQsNiBAQAogICovCiAKIHB1YmxpYyBpbnRlcmZhY2UgQTEgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJPYmplY3QgewotIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jcmVhdGVFeGNlcHRpb25zVGVzdC9lamIvQTFCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvZWpiL0ExQmVhbi5qYXZhCmluZGV4IGRmYTg5YTguLjI2ZjQ3MDkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jcmVhdGVFeGNlcHRpb25zVGVzdC9lamIvQTFCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NyZWF0ZUV4Y2VwdGlvbnNUZXN0L2VqYi9BMUJlYW4uamF2YQpAQCAtMjAsNjQgKzIwLDY0IEBACiBpbXBvcnQgamF2YXgubmFtaW5nLio7CiAKIC8qKgotICogMS4xIGJlYW4uIAorICogMS4xIGJlYW4uCiAgKiBAYXV0aG9yIG12YXRraW5hCiAgKi8KIAogCiBwdWJsaWMgY2xhc3MgQTFCZWFuIGltcGxlbWVudHMgamFrYXJ0YS5lamIuRW50aXR5QmVhbiB7Ci0gICAgCisKICAgICBwcml2YXRlIGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQgY29udGV4dDsKLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI3NldEVudGl0eUNvbnRleHQoamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQgYUNvbnRleHQpIHsKICAgICAgICAgY29udGV4dD1hQ29udGV4dDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJBY3RpdmF0ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUGFzc2l2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUmVtb3ZlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVidWc6IEExQmVhbiBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiN1bnNldEVudGl0eUNvbnRleHQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsKICAgICAgICAgY29udGV4dD1udWxsOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYkxvYWQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiU3RvcmUoKQogICAgICAqLwpAQCAtOTQsMTEgKzk0LDExIEBACiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKGphdmEubGFuZy5TdHJpbmcgbmFtZSkgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiB7IAorCisgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZShqYXZhLmxhbmcuU3RyaW5nIG5hbWUpIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uKCJBMUJlYW4uZWpiUG9zdENyZWF0ZSIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKiBUaGlzIGVqYkNyZWF0ZS9lamJQb3N0Q3JlYXRlIGNvbWJpbmF0aW9uIHRlc3RzIENyZWF0ZUV4Y2VwdGlvbgogICAgICAqIHRocm93biBmcm9tIGVpdGhlciBlamJDcmVhdGUgKGlmIGIgaXMgZmFsc2UpIG9yIGVqYlBvc3RDcmVhdGUuCiAgICAgICogRXhlY3V0ZWQgaW4gYSBub24tdHJhbnNhY3Rpb25hbCBjb250ZXh0IHRvIHRlc3QgYm90aCBvcHRpb25zLgpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZWpiQ3JlYXRlKGphdmEubGFuZy5TdHJpbmcgbmFtZSwgYm9vbGVhbiBiKSAgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmIChiKSB7CiAgICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICAgICAgfSBlbHNlIHsgCisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbigiQTFCZWFuLmVqYkNyZWF0ZSIpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtMTIyLDcgKzEyMiw3IEBACiAgICAgICogcmVzZXQgcHJpb3IgdG8gY2FsbCB0byBlamJDcmVhdGUuCiAgICAgICovCiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZWpiQ3JlYXRlKGludCBpKSAgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmICh0aGlzLm5hbWUgIT0gbnVsbCkgeyAKKyAgICAgICAgaWYgKHRoaXMubmFtZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkExQmVhbi5lamJDcmVhdGUgbm90IHJlc2V0Iik7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NyZWF0ZUV4Y2VwdGlvbnNUZXN0L2VqYi9BMUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jcmVhdGVFeGNlcHRpb25zVGVzdC9lamIvQTFIb21lLmphdmEKaW5kZXggYjY4ZGNlOS4uOGViZTJiMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NyZWF0ZUV4Y2VwdGlvbnNUZXN0L2VqYi9BMUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvZWpiL0ExSG9tZS5qYXZhCkBAIC0yNCwxNSArMjQsMTUgQEAKICAqLwogCiBwdWJsaWMgaW50ZXJmYWNlIEExSG9tZSBleHRlbmRzIGpha2FydGEuZWpiLkVKQkhvbWUgewotICAgIAorCiAgICAgcHVibGljICBBMSBmaW5kQnlQcmltYXJ5S2V5KGphdmEubGFuZy5TdHJpbmcgcGspICB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgIGphdmEudXRpbC5Db2xsZWN0aW9uIGZpbmRBbGwoKSAgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljICBBMSBjcmVhdGUoamF2YS5sYW5nLlN0cmluZyBuYW1lKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgIEExIGNyZWF0ZShqYXZhLmxhbmcuU3RyaW5nIG5hbWUsIGJvb2xlYW4gYikgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljICBBMSBjcmVhdGUoaW50IGkpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NyZWF0ZUV4Y2VwdGlvbnNUZXN0L2VqYi9BMVVuUEtCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvZWpiL0ExVW5QS0JlYW4uamF2YQppbmRleCAyYzI3OWM5Li4xNmI4ZGEwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvZWpiL0ExVW5QS0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvZWpiL0ExVW5QS0JlYW4uamF2YQpAQCAtMjYsNTggKzI2LDU4IEBACiAKIAogcHVibGljIGNsYXNzIEExVW5QS0JlYW4gaW1wbGVtZW50cyBqYWthcnRhLmVqYi5FbnRpdHlCZWFuIHsKLSAgICAKKwogICAgIHByaXZhdGUgamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCBjb250ZXh0OwotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jc2V0RW50aXR5Q29udGV4dChqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0KQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCBhQ29udGV4dCkgewogICAgICAgICBjb250ZXh0PWFDb250ZXh0OwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYkFjdGl2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJQYXNzaXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJSZW1vdmUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWJ1ZzogQTFVblBLQmVhbiBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiN1bnNldEVudGl0eUNvbnRleHQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsKICAgICAgICAgY29udGV4dD1udWxsOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYkxvYWQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiU3RvcmUoKQogICAgICAqLwpAQCAtODYsMTkgKzg2LDE5IEBACiAKICAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBuYW1lOwogCi0gICAgLyoqIFRoaXMgZWpiQ3JlYXRlL2VqYlBvc3RDcmVhdGUgY29tYmluYXRpb24gdGVzdHMgQ3JlYXRlRXhjZXB0aW9uIAotICAgICAqIHRocm93biBmcm9tIGVqYlBvc3RDcmVhdGUuIAorICAgIC8qKiBUaGlzIGVqYkNyZWF0ZS9lamJQb3N0Q3JlYXRlIGNvbWJpbmF0aW9uIHRlc3RzIENyZWF0ZUV4Y2VwdGlvbgorICAgICAqIHRocm93biBmcm9tIGVqYlBvc3RDcmVhdGUuCiAgICAgICovCiAgICAgcHVibGljIGphdmEubGFuZy5PYmplY3QgZWpiQ3JlYXRlKGphdmEubGFuZy5TdHJpbmcgbmFtZSkgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiB7CiAKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoamF2YS5sYW5nLlN0cmluZyBuYW1lKSB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIHsgCisKKyAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKGphdmEubGFuZy5TdHJpbmcgbmFtZSkgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24oIkExVW5QS0JlYW4uZWpiUG9zdENyZWF0ZSIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKiBUaGlzIGVqYkNyZWF0ZS9lamJQb3N0Q3JlYXRlIGNvbWJpbmF0aW9uIHRlc3RzIHRoYXQgYmVhbiBzdGF0ZSBpcwogICAgICAqIHJlc2V0IHByaW9yIHRvIGNhbGwgdG8gZWpiQ3JlYXRlLgogICAgICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NyZWF0ZUV4Y2VwdGlvbnNUZXN0L2VqYi9BMVVuUEtIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvZWpiL0ExVW5QS0hvbWUuamF2YQppbmRleCAwZjg4Y2RjLi4zZGM2MjU5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvZWpiL0ExVW5QS0hvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvZWpiL0ExVW5QS0hvbWUuamF2YQpAQCAtMjQsMTEgKzI0LDExIEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBBMVVuUEtIb21lIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCSG9tZSB7Ci0gICAgCisKICAgICBwdWJsaWMgIGphdmEudXRpbC5Db2xsZWN0aW9uIGZpbmRBbGwoKSAgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljICBBMSBjcmVhdGUoamF2YS5sYW5nLlN0cmluZyBuYW1lKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgIEExIGNyZWF0ZShpbnQgaSkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvZWpiL0EyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvZWpiL0EyLmphdmEKaW5kZXggMDc5ZjBlYS4uZTI1YTA5YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NyZWF0ZUV4Y2VwdGlvbnNUZXN0L2VqYi9BMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jcmVhdGVFeGNlcHRpb25zVGVzdC9lamIvQTIuamF2YQpAQCAtMjQsNSArMjQsNSBAQAogICovCiAKIHB1YmxpYyBpbnRlcmZhY2UgQTIgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJPYmplY3QgewotIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvZWpiL0EyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NyZWF0ZUV4Y2VwdGlvbnNUZXN0L2VqYi9BMkJlYW4uamF2YQppbmRleCA4ZmQ0YmE1Li45NWQ3MTk3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvZWpiL0EyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jcmVhdGVFeGNlcHRpb25zVGVzdC9lamIvQTJCZWFuLmphdmEKQEAgLTIwLDY0ICsyMCw2NCBAQAogaW1wb3J0IGphdmF4Lm5hbWluZy4qOwogCiAvKioKLSAqIDIuMCBiZWFuLiAKKyAqIDIuMCBiZWFuLgogICogQGF1dGhvciBtdmF0a2luYQogICovCiAKIAogcHVibGljIGFic3RyYWN0IGNsYXNzIEEyQmVhbiBpbXBsZW1lbnRzIGpha2FydGEuZWpiLkVudGl0eUJlYW4gewotICAgIAorCiAgICAgcHJpdmF0ZSBqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0IGNvbnRleHQ7Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNzZXRFbnRpdHlDb250ZXh0KGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0IGFDb250ZXh0KSB7CiAgICAgICAgIGNvbnRleHQ9YUNvbnRleHQ7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiQWN0aXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYlBhc3NpdmF0ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYlJlbW92ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlYnVnOiBBMkJlYW4gZWpiUmVtb3ZlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jdW5zZXRFbnRpdHlDb250ZXh0KCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKSB7CiAgICAgICAgIGNvbnRleHQ9bnVsbDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJMb2FkKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYlN0b3JlKCkKICAgICAgKi8KQEAgLTg3LDIxICs4NywyMSBAQAogICAgIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuU3RyaW5nIGdldE5hbWUoKSA7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nIHMpIDsKIAotICAgIC8qKiBUaGlzIGVqYkNyZWF0ZS9lamJQb3N0Q3JlYXRlIGNvbWJpbmF0aW9uIHRlc3RzIENyZWF0ZUV4Y2VwdGlvbiAKLSAgICAgKiB0aHJvd24gZnJvbSBlamJQb3N0Q3JlYXRlLiAKKyAgICAvKiogVGhpcyBlamJDcmVhdGUvZWpiUG9zdENyZWF0ZSBjb21iaW5hdGlvbiB0ZXN0cyBDcmVhdGVFeGNlcHRpb24KKyAgICAgKiB0aHJvd24gZnJvbSBlamJQb3N0Q3JlYXRlLgogICAgICAqLwogICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGVqYkNyZWF0ZShqYXZhLmxhbmcuU3RyaW5nIG5hbWUpIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24gewogCiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKGphdmEubGFuZy5TdHJpbmcgbmFtZSkgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiB7IAorCisgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZShqYXZhLmxhbmcuU3RyaW5nIG5hbWUpIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uKCJBMkJlYW4uZWpiUG9zdENyZWF0ZSIpOwogICAgIH0KIAotICAgIC8qKiBUaGlzIGVqYkNyZWF0ZS9lamJQb3N0Q3JlYXRlIGNvbWJpbmF0aW9uIHRlc3RzIENyZWF0ZUV4Y2VwdGlvbiAKLSAgICAgKiB0aHJvd24gZnJvbSBlamJDcmVhdGUuIAorICAgIC8qKiBUaGlzIGVqYkNyZWF0ZS9lamJQb3N0Q3JlYXRlIGNvbWJpbmF0aW9uIHRlc3RzIENyZWF0ZUV4Y2VwdGlvbgorICAgICAqIHRocm93biBmcm9tIGVqYkNyZWF0ZS4KICAgICAgKi8KICAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBlamJDcmVhdGUoKSB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIHsKICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uKCJBMkJlYW4uZWpiQ3JlYXRlIik7CkBAIC0xMDksNyArMTA5LDcgQEAKIAogICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoKSB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIHsKICAgICB9Ci0gICAgCisKICAgICAvKiogVGhpcyBlamJDcmVhdGUvZWpiUG9zdENyZWF0ZSBjb21iaW5hdGlvbiB0ZXN0cyB0aGF0IGJlYW4gc3RhdGUgaXMKICAgICAgKiByZXNldCBwcmlvciB0byBjYWxsIHRvIGVqYkNyZWF0ZS4KICAgICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jcmVhdGVFeGNlcHRpb25zVGVzdC9lamIvQTJIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvZWpiL0EySG9tZS5qYXZhCmluZGV4IGNmYzllMzcuLjlhOGYxMWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jcmVhdGVFeGNlcHRpb25zVGVzdC9lamIvQTJIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NyZWF0ZUV4Y2VwdGlvbnNUZXN0L2VqYi9BMkhvbWUuamF2YQpAQCAtMjQsMTUgKzI0LDE1IEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBBMkhvbWUgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJIb21lIHsKLSAgICAKKwogICAgIHB1YmxpYyAgQTIgZmluZEJ5UHJpbWFyeUtleShqYXZhLmxhbmcuU3RyaW5nIHBrKSAgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljICBqYXZhLnV0aWwuQ29sbGVjdGlvbiBmaW5kQWxsKCkgIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sIGpha2FydGEuZWpiLkZpbmRlckV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyAgQTIgY3JlYXRlKGphdmEubGFuZy5TdHJpbmcgbmFtZSkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljICBBMiBjcmVhdGUoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgIEEyIGNyZWF0ZShpbnQgaSkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvZWpiL0EyVW5QS0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jcmVhdGVFeGNlcHRpb25zVGVzdC9lamIvQTJVblBLQmVhbi5qYXZhCmluZGV4IDNhZTNhYjguLmNiNGI0MjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jcmVhdGVFeGNlcHRpb25zVGVzdC9lamIvQTJVblBLQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9jcmVhdGVFeGNlcHRpb25zVGVzdC9lamIvQTJVblBLQmVhbi5qYXZhCkBAIC0yMCw2NCArMjAsNjQgQEAKIGltcG9ydCBqYXZheC5uYW1pbmcuKjsKIAogLyoqCi0gKiAyLjAgYmVhbiB3aXRoIHVua25vd24gUEsuIAorICogMi4wIGJlYW4gd2l0aCB1bmtub3duIFBLLgogICogQGF1dGhvciBtdmF0a2luYQogICovCiAKIAogcHVibGljIGFic3RyYWN0IGNsYXNzIEEyVW5QS0JlYW4gaW1wbGVtZW50cyBqYWthcnRhLmVqYi5FbnRpdHlCZWFuIHsKLSAgICAKKwogICAgIHByaXZhdGUgamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCBjb250ZXh0OwotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jc2V0RW50aXR5Q29udGV4dChqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0KQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCBhQ29udGV4dCkgewogICAgICAgICBjb250ZXh0PWFDb250ZXh0OwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYkFjdGl2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJQYXNzaXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJSZW1vdmUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWJ1ZzogQTJVblBLQmVhbiBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiN1bnNldEVudGl0eUNvbnRleHQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsKICAgICAgICAgY29udGV4dD1udWxsOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYkxvYWQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiU3RvcmUoKQogICAgICAqLwpAQCAtODcsMjUgKzg3LDI1IEBACiAgICAgcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5TdHJpbmcgZ2V0TmFtZSgpIDsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXROYW1lKGphdmEubGFuZy5TdHJpbmcgcykgOwogCi0gICAgLyoqIFRoaXMgZWpiQ3JlYXRlL2VqYlBvc3RDcmVhdGUgY29tYmluYXRpb24gdGVzdHMgQ3JlYXRlRXhjZXB0aW9uIAotICAgICAqIHRocm93biBmcm9tIGVqYlBvc3RDcmVhdGUuIAorICAgIC8qKiBUaGlzIGVqYkNyZWF0ZS9lamJQb3N0Q3JlYXRlIGNvbWJpbmF0aW9uIHRlc3RzIENyZWF0ZUV4Y2VwdGlvbgorICAgICAqIHRocm93biBmcm9tIGVqYlBvc3RDcmVhdGUuCiAgICAgICovCiAgICAgcHVibGljIGphdmEubGFuZy5PYmplY3QgZWpiQ3JlYXRlKGphdmEubGFuZy5TdHJpbmcgbmFtZSkgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiB7CiAKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoamF2YS5sYW5nLlN0cmluZyBuYW1lKSB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIHsgCisKKyAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKGphdmEubGFuZy5TdHJpbmcgbmFtZSkgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24oIkEyVW5QS0JlYW4uZWpiUG9zdENyZWF0ZSIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKiBUaGlzIGVqYkNyZWF0ZS9lamJQb3N0Q3JlYXRlIGNvbWJpbmF0aW9uIHRlc3RzIHRoYXQgYmVhbiBzdGF0ZSBpcwogICAgICAqIHJlc2V0IHByaW9yIHRvIGNhbGwgdG8gZWpiQ3JlYXRlLgogICAgICAqLwogICAgIHB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IGVqYkNyZWF0ZShpbnQgaSkgIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24gewogICAgICAgICBpZiAoZ2V0TmFtZSgpICE9IG51bGwpIHsKLSAgICAgICAgICAgICB0aHJvdyBuZXcgamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQTJVblBLQmVhbi5lamJDcmVhdGUgbm90IHJlc2V0Iik7IAorICAgICAgICAgICAgIHRocm93IG5ldyBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJBMlVuUEtCZWFuLmVqYkNyZWF0ZSBub3QgcmVzZXQiKTsKICAgICAgICAgfQogCiAgICAgICAgIHNldE5hbWUoIkEyVW5QS0JlYW5fIiArIGkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2NyZWF0ZUV4Y2VwdGlvbnNUZXN0L2VqYi9BMlVuUEtIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvZWpiL0EyVW5QS0hvbWUuamF2YQppbmRleCBlMzU1ZDkxLi5jMzU4NzFjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvZWpiL0EyVW5QS0hvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvY3JlYXRlRXhjZXB0aW9uc1Rlc3QvZWpiL0EyVW5QS0hvbWUuamF2YQpAQCAtMjQsMTEgKzI0LDExIEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBBMlVuUEtIb21lIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCSG9tZSB7Ci0gICAgCisKICAgICBwdWJsaWMgIGphdmEudXRpbC5Db2xsZWN0aW9uIGZpbmRBbGwoKSAgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljICBBMiBjcmVhdGUoamF2YS5sYW5nLlN0cmluZyBuYW1lKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgIEEyIGNyZWF0ZShpbnQgaSkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9lamJmbHVzaC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk1M2VjNzYuLjRiY2U5MGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9lamJmbHVzaC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9lamJmbHVzaC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IkVqYkZsdXNoIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tY21wLW1hcHBpbmdzLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWNtcC1tYXBwaW5ncy54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9lamJmbHVzaC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvYnVpbGQueG1sCmluZGV4IDkxYjY3OGIuLjk4NWVjM2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9lamJmbHVzaC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9BKi5jbGFzcywqKi9GbHVzaEV4Y2VwdGlvbi5jbGFzcywqKi9UZXN0Ki5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9BMUxvY2FsSG9tZS5jbGFzcywqKi9BMUxvY2FsLmNsYXNzLCoqL0EyTG9jYWxIb21lLmNsYXNzLCoqL0EyTG9jYWwuY2xhc3MsKiovVGVzdEhvbWUuY2xhc3MsKiovVGVzdC5jbGFzcywqKi9GbHVzaEV4Y2VwdGlvbi5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9lamJmbHVzaF9kZXJieS5zcWwiLz4KQEAgLTcyLDIyICs3MiwyMiBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSIke2Jhc2VkaXJ9Ly4uL2NvbW1vbi9kZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX2VqYmZsdXNoX2RlcmJ5LnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBhbGwKICAgICAgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9lamJmbHVzaC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggM2YwMjA5NC4uY2Q2NjE5MSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zNywxNSArMzcsMTUgQEAKICAqIEBhdXRob3IgIG12YXRraW5hCiAgKi8KIHB1YmxpYyBjbGFzcyBDbGllbnQgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1RBUlQiKTsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpiZmx1c2giKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpiZmx1c2giKTsKIAogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKQEAgLTc2LDM4ICs3NiwzOCBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQTIgT0siKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gUnVuIENNUDEuMSB0ZXN0IHdpdGggZmx1c2guIFRoaXMgdGVzdCBzaG91bGQgdGhyb3cgCisgICAgICAgICAgICAvLyBSdW4gQ01QMS4xIHRlc3Qgd2l0aCBmbHVzaC4gVGhpcyB0ZXN0IHNob3VsZCB0aHJvdwogICAgICAgICAgICAgLy8gYSBGbHVzaEV4Y2VwdGlvbi4KICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgdC50ZXN0QTFXaXRoRmx1c2goKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkExIEZBSUxFRCIpOwogICAgICAgICAgICAgfSBjYXRjaCAodGVzdC5GbHVzaEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBMSBPSyIpOwotICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgIAorICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkExIEZBSUxFRCAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBSdW4gQ01QMS4xIHRlc3Qgd2l0aCBmbHVzaC4gVGhpcyB0ZXN0IHNob3VsZCB0aHJvdyAKKyAgICAgICAgICAgIC8vIFJ1biBDTVAxLjEgdGVzdCB3aXRoIGZsdXNoLiBUaGlzIHRlc3Qgc2hvdWxkIHRocm93CiAgICAgICAgICAgICAvLyBhIEZsdXNoRXhjZXB0aW9uLgogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICB0LnRlc3RBMldpdGhGbHVzaCgpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQTIgRkFJTEVEIik7CiAgICAgICAgICAgICB9IGNhdGNoICh0ZXN0LkZsdXNoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkEyIE9LIik7Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeyAgCisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQTIgRkFJTEVEICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAKLQkgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBlamJmbHVzaCIsIHN0YXQuUEFTUyk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgZWpiZmx1c2giLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGSU5JU0giKTsKIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIGV4Y2VwdGlvbjoiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGVqYmZsdXNoIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBlamJmbHVzaCIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0KIAotCSAgc3RhdC5wcmludFN1bW1hcnkoImVqYmZsdXNoIik7CisgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiZmx1c2giKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9lamJmbHVzaC9lamIvQTFCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvZWpiL0ExQmVhbi5qYXZhCmluZGV4IGUzN2NkN2IuLjFiMTg0OGEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9lamJmbHVzaC9lamIvQTFCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL2VqYi9BMUJlYW4uamF2YQpAQCAtMTksNjQgKzE5LDY0IEBACiBpbXBvcnQgamFrYXJ0YS5lamIuKjsKIAogLyoqCi0gKiAxLjEgYmVhbi4gCisgKiAxLjEgYmVhbi4KICAqIEBhdXRob3IgbXZhdGtpbmEKICAqLwogCiAKIHB1YmxpYyBjbGFzcyBBMUJlYW4gaW1wbGVtZW50cyBFbnRpdHlCZWFuIHsKLSAgICAKKwogICAgIHByaXZhdGUgRW50aXR5Q29udGV4dCBjb250ZXh0OwotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIEVudGl0eUJlYW4jc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0KQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBhQ29udGV4dCkgewogICAgICAgICBjb250ZXh0PWFDb250ZXh0OwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBFbnRpdHlCZWFuI2VqYkFjdGl2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgRW50aXR5QmVhbiNlamJQYXNzaXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgRW50aXR5QmVhbiNlamJSZW1vdmUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKIAogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBFbnRpdHlCZWFuI3Vuc2V0RW50aXR5Q29udGV4dCgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgewogICAgICAgICBjb250ZXh0PW51bGw7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIEVudGl0eUJlYW4jZWpiTG9hZCgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgRW50aXR5QmVhbiNlamJTdG9yZSgpCiAgICAgICovCkBAIC05Miw4ICs5Miw4IEBACiAgICAgICAgIG5hbWUgPSAiQUJDIjsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoU3RyaW5nIGlkKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsgCisKKyAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKFN0cmluZyBpZCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgcykgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL2VqYi9BMUxvY2FsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvZWpiL0ExTG9jYWwuamF2YQppbmRleCAyNGE5M2FhLi5iYzVlYmU1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvZWpiL0ExTG9jYWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvZWpiL0ExTG9jYWwuamF2YQpAQCAtMjQsOSArMjQsOSBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEExTG9jYWwgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJMb2NhbE9iamVjdCB7CiAKLSAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsgCisgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7CiAKLSAgICBwdWJsaWMgdm9pZCBzZXROYW1lV2l0aEZsdXNoKFN0cmluZyBuYW1lKTsgCisgICAgcHVibGljIHZvaWQgc2V0TmFtZVdpdGhGbHVzaChTdHJpbmcgbmFtZSk7CiAKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL2VqYi9BMUxvY2FsSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL2VqYi9BMUxvY2FsSG9tZS5qYXZhCmluZGV4IGRmZTU0MTMuLjQxMmE0ZTQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9lamJmbHVzaC9lamIvQTFMb2NhbEhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvZWpiL0ExTG9jYWxIb21lLmphdmEKQEAgLTI0LDkgKzI0LDkgQEAKICAqLwogCiBwdWJsaWMgaW50ZXJmYWNlIEExTG9jYWxIb21lIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCTG9jYWxIb21lIHsKLSAgICAKKwogICAgIHB1YmxpYyAgQTFMb2NhbCBmaW5kQnlQcmltYXJ5S2V5KGphdmEubGFuZy5TdHJpbmcgcGspICB0aHJvd3MgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljICBBMUxvY2FsIGNyZWF0ZShqYXZhLmxhbmcuU3RyaW5nIGlkKSB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvZWpiL0EyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL2VqYi9BMkJlYW4uamF2YQppbmRleCA4MDY0MTkwLi4xMDY1MjZmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvZWpiL0EyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9lamJmbHVzaC9lamIvQTJCZWFuLmphdmEKQEAgLTE5LDY0ICsxOSw2NCBAQAogaW1wb3J0IGpha2FydGEuZWpiLio7CiAKIC8qKgotICogMi4wIGJlYW4uIAorICogMi4wIGJlYW4uCiAgKiBAYXV0aG9yIG12YXRraW5hCiAgKi8KIAogCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQTJCZWFuIGltcGxlbWVudHMgRW50aXR5QmVhbiB7Ci0gICAgCisKICAgICBwcml2YXRlIEVudGl0eUNvbnRleHQgY29udGV4dDsKLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBFbnRpdHlCZWFuI3NldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgYUNvbnRleHQpIHsKICAgICAgICAgY29udGV4dD1hQ29udGV4dDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgRW50aXR5QmVhbiNlamJBY3RpdmF0ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIEVudGl0eUJlYW4jZWpiUGFzc2l2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIEVudGl0eUJlYW4jZWpiUmVtb3ZlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgRW50aXR5QmVhbiN1bnNldEVudGl0eUNvbnRleHQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsKICAgICAgICAgY29udGV4dD1udWxsOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBFbnRpdHlCZWFuI2VqYkxvYWQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIEVudGl0eUJlYW4jZWpiU3RvcmUoKQogICAgICAqLwpAQCAtOTUsOCArOTUsOCBAQAogICAgICAgICBzZXROYW1lKCJBQkMiKTsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoU3RyaW5nIG5hbWUpIHRocm93cyBDcmVhdGVFeGNlcHRpb24geyAKKworICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoU3RyaW5nIG5hbWUpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldE5hbWVXaXRoRmx1c2goU3RyaW5nIHMpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9lamJmbHVzaC9lamIvQTJMb2NhbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL2VqYi9BMkxvY2FsLmphdmEKaW5kZXggYmUxNGI4Mi4uNDljNzFjZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL2VqYi9BMkxvY2FsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL2VqYi9BMkxvY2FsLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIAogcHVibGljIGludGVyZmFjZSBBMkxvY2FsIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCTG9jYWxPYmplY3QgewogCi0gICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7IAotIAotICAgIHB1YmxpYyB2b2lkIHNldE5hbWVXaXRoRmx1c2goU3RyaW5nIG5hbWUpOyAKLSAKKyAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKKworICAgIHB1YmxpYyB2b2lkIHNldE5hbWVXaXRoRmx1c2goU3RyaW5nIG5hbWUpOworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvZWpiL0EyTG9jYWxIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvZWpiL0EyTG9jYWxIb21lLmphdmEKaW5kZXggZDU0YjQ0NC4uNTkxZTZjZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL2VqYi9BMkxvY2FsSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9lamJmbHVzaC9lamIvQTJMb2NhbEhvbWUuamF2YQpAQCAtMjQsOSArMjQsOSBAQAogICovCiAKIHB1YmxpYyBpbnRlcmZhY2UgQTJMb2NhbEhvbWUgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJMb2NhbEhvbWUgewotICAgIAorCiAgICAgcHVibGljICBBMkxvY2FsIGZpbmRCeVByaW1hcnlLZXkoamF2YS5sYW5nLlN0cmluZyBwaykgIHRocm93cyBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgIEEyTG9jYWwgY3JlYXRlKGphdmEubGFuZy5TdHJpbmcgbmFtZSkgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL2VqYi9GbHVzaEV4Y2VwdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL2VqYi9GbHVzaEV4Y2VwdGlvbi5qYXZhCmluZGV4IGYzZDFjNDkuLjJkOWI2ODUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9lamJmbHVzaC9lamIvRmx1c2hFeGNlcHRpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvZWpiL0ZsdXNoRXhjZXB0aW9uLmphdmEKQEAgLTE4LDIzICsxOCwyMyBAQAogCiBwdWJsaWMgY2xhc3MgRmx1c2hFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24gewogCi0JU3RyaW5nIGZsdXNoRXg7CisgICAgU3RyaW5nIGZsdXNoRXg7CiAKLQlwdWJsaWMgRmx1c2hFeGNlcHRpb24oKSB7Ci0JCXN1cGVyKCk7ICAgICAgICAgICAgIC8vIGNhbGwgc3VwZXJjbGFzcyBjb25zdHJ1Y3RvcgotCX0KKyAgICBwdWJsaWMgRmx1c2hFeGNlcHRpb24oKSB7CisgICAgICAgIHN1cGVyKCk7ICAgICAgICAgICAgIC8vIGNhbGwgc3VwZXJjbGFzcyBjb25zdHJ1Y3RvcgorICAgIH0KIAotCXB1YmxpYyBGbHVzaEV4Y2VwdGlvbihTdHJpbmcgZmx1c2hFeGNlcHRpb24pIHsKLQkJc3VwZXIoZmx1c2hFeGNlcHRpb24pOwotCQlmbHVzaEV4ID0gZmx1c2hFeGNlcHRpb247Ci0JfQorICAgIHB1YmxpYyBGbHVzaEV4Y2VwdGlvbihTdHJpbmcgZmx1c2hFeGNlcHRpb24pIHsKKyAgICAgICAgc3VwZXIoZmx1c2hFeGNlcHRpb24pOworICAgICAgICBmbHVzaEV4ID0gZmx1c2hFeGNlcHRpb247CisgICAgfQogCi0JcHVibGljIFN0cmluZyBnZXRFcnJvcigpCi0gIAl7Ci0gICAgCQlyZXR1cm4gZmx1c2hFeDsKLSAgCX0KKyAgICBwdWJsaWMgU3RyaW5nIGdldEVycm9yKCkKKyAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmbHVzaEV4OworICAgICAgfQogCiB9CiAKLQkJCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL2VqYi9UZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvZWpiL1Rlc3QuamF2YQppbmRleCAzZTliZTVkLi5lMTJkODE1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvZWpiL1Rlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvZWpiL1Rlc3QuamF2YQpAQCAtMjAsMTUgKzIwLDE1IEBACiBpbXBvcnQgamF2YS5ybWkuKjsKIAogcHVibGljIGludGVyZmFjZSBUZXN0IGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAKKwogICAgIHB1YmxpYyB2b2lkIHRlc3RBMSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCB0ZXN0QTIoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247Ci0gICAgICAgIAotICAgIHB1YmxpYyB2b2lkIHRlc3RBMVdpdGhGbHVzaCgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIAorCisgICAgcHVibGljIHZvaWQgdGVzdEExV2l0aEZsdXNoKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwKICAgICAgICAgICAgIEZsdXNoRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247Ci0gICAgICAgIAotICAgIHB1YmxpYyB2b2lkIHRlc3RBMldpdGhGbHVzaCgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIAorCisgICAgcHVibGljIHZvaWQgdGVzdEEyV2l0aEZsdXNoKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwKICAgICAgICAgICAgIEZsdXNoRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247Ci0gICAgICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvZWpiL1Rlc3RCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvZWpiL1Rlc3RCZWFuLmphdmEKaW5kZXggOTM2Njc1ZS4uN2IyMzEwNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL2VqYi9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9lamJmbHVzaC9lamIvVGVzdEJlYW4uamF2YQpAQCAtMjAsMTIgKzIwLDEyIEBACiBpbXBvcnQgamF2YXgubmFtaW5nLio7CiAKIC8qKgotICogVGhpcyBTZXNzaW9uQmVhbiBpcyB1c2VkIHRvIHRlc3Qgc2V0dGluZyBDTVAgZmllbGQgJ25hbWUnIHRvIGEgdmFsdWUgCisgKiBUaGlzIFNlc3Npb25CZWFuIGlzIHVzZWQgdG8gdGVzdCBzZXR0aW5nIENNUCBmaWVsZCAnbmFtZScgdG8gYSB2YWx1ZQogICogdGhhdCBpcyB0b28gbGFyZ2UgZm9yIHRoZSBjb2x1bW4gc2l6ZSB0aGF0IGl0IGlzIG1hcHBlZCB0by4KLSAqIFRoZSB0ZXN0IGlzIGV4cGVjdGVkIHRvIGJlIGV4ZWN1dGVkIHdpdGggZmx1c2ggYWZ0ZXIgYnVzaW5lc3MgbWV0aG9kIAorICogVGhlIHRlc3QgaXMgZXhwZWN0ZWQgdG8gYmUgZXhlY3V0ZWQgd2l0aCBmbHVzaCBhZnRlciBidXNpbmVzcyBtZXRob2QKICAqIHNldCB0byB0cnVlIGZvciBzZXROYW1lV2l0aEZsdXNoKCkgYW5kIHRvIGZhbHNlIGZvciBzZXROYW1lKCkuCiAgKiBUaGUgdGVzdCBpcyBleGVjdXRlZCBmb3IgQ01QMS4xIGJlYW4gKEExKSBhbmQgQ01QMi54IGJlYW4gKEEyKS4KLSAqLyAKKyAqLwogcHVibGljIGNsYXNzIFRlc3RCZWFuIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewogCiAgICAgcHJpdmF0ZSAgQTFMb2NhbEhvbWUgYTFIb21lID0gbnVsbDsKQEAgLTM0LDIxICszNCwyMSBAQAogICAgIHByaXZhdGUgIEEyTG9jYWwgYTJiZWFuID0gbnVsbDsKIAogICAgIC8vIFNlc3Npb25CZWFuIG1ldGhvZHMKLSAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RCZWFuIGVqYkNyZWF0ZSIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgYTFIb21lID0gbG9va3VwQTEoKTsKICAgICAgICAgICAgIGEySG9tZSA9IGxvb2t1cEEyKCk7Ci0gCisKICAgICAgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICB9ICAgIAotIAorICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RCZWFuIGVqYkFjdGl2YXRlIik7Ci0gICAgfSAgICAKKyAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7CiAgICAgICAgICAgICBhMUhvbWUgPSBudWxsOwpAQCAtNTgsNyArNTgsNyBAQAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKIAogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7CiAKICAgICB9CkBAIC02NywzNSArNjcsMzUgQEAKICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvQTFGbHVzaCIpOwogICAgICAgICByZXR1cm4gKEExTG9jYWxIb21lKSBvYmpyZWY7Ci0gICAgfSAgICAKKyAgICB9CiAKICAgICBwcml2YXRlIEEyTG9jYWxIb21lIGxvb2t1cEEyKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0EyRmx1c2giKTsKICAgICAgICAgcmV0dXJuIChBMkxvY2FsSG9tZSkgb2JqcmVmOwotICAgIH0gICAgCisgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIFJ1biB0ZXN0IGZvciBDTVAxLjEgYmVhbiB3aXRob3V0IGZsdXNoIGFmdGVyIGJ1c2luZXNzCiAgICAgICogbWV0aG9kLiBUaGlzIG1ldGhvZCB3aWxsIGZhaWwgYXQgY29tbWl0IGFuZCB0aGUgY2xpZW50CiAgICAgICogd2lsbCBnZXQgYSBSdW50aW1lRXhjZXB0aW9uLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHRlc3RBMSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgICAgICBhMWJlYW4gPSBhMUhvbWUuY3JlYXRlKCJBMSIpOwotICAgICAgICBhMWJlYW4uc2V0TmFtZSgiQTEyMzQ1Njc4OTAxMjM0NTY3ODkwIik7IAorICAgICAgICBhMWJlYW4uc2V0TmFtZSgiQTEyMzQ1Njc4OTAxMjM0NTY3ODkwIik7CiAgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIFJ1biB0ZXN0IGZvciBDTVAyLnggYmVhbiB3aXRob3V0IGZsdXNoIGFmdGVyIGJ1c2luZXNzCiAgICAgICogbWV0aG9kLiBUaGlzIG1ldGhvZCB3aWxsIGZhaWwgYXQgY29tbWl0IGFuZCB0aGUgY2xpZW50CiAgICAgICogd2lsbCBnZXQgYSBSdW50aW1lRXhjZXB0aW9uLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHRlc3RBMigpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgICAgICBhMmJlYW4gPSBhMkhvbWUuY3JlYXRlKCJBMiIpOwotICAgICAgICBhMmJlYW4uc2V0TmFtZSgiQTEyMzQ1Njc4OTAxMjM0NTY3ODkwIik7IAorICAgICAgICBhMmJlYW4uc2V0TmFtZSgiQTEyMzQ1Njc4OTAxMjM0NTY3ODkwIik7CiAgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIFJ1biB0ZXN0IGZvciBDTVAxLjEgYmVhbiB3aXRoIGZsdXNoIGFmdGVyIGJ1c2luZXNzCiAgICAgICogbWV0aG9kLiBUaGlzIG1ldGhvZCB3aWxsIGZhaWwgYXQgZmx1c2ggYW5kIHRoZSBjbGllbnQKICAgICAgKiB3aWxsIGdldCBvdXIgRmx1c2hFeGNlcHRpb24uCkBAIC0xMDMsNyArMTAzLDcgQEAKICAgICBwdWJsaWMgdm9pZCB0ZXN0QTFXaXRoRmx1c2goKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBGbHVzaEV4Y2VwdGlvbiB7CiAgICAgICAgIGExYmVhbiA9IGExSG9tZS5jcmVhdGUoIkIxIik7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBhMWJlYW4uc2V0TmFtZVdpdGhGbHVzaCgiQTEyMzQ1Njc4OTAxMjM0NTY3ODkwIik7IAorICAgICAgICAgICAgYTFiZWFuLnNldE5hbWVXaXRoRmx1c2goIkExMjM0NTY3ODkwMTIzNDU2Nzg5MCIpOwogICAgICAgICB9IGNhdGNoIChFSkJFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgaWYgKGlzRXhwZWN0ZWRFeGNlcHRpb24oZSkpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZsdXNoRXhjZXB0aW9uKGUudG9TdHJpbmcoKSk7CkBAIC0xMTIsNyArMTEyLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBSdW4gdGVzdCBmb3IgQ01QMi54IGJlYW4gd2l0aCBmbHVzaCBhZnRlciBidXNpbmVzcwogICAgICAqIG1ldGhvZC4gVGhpcyBtZXRob2Qgd2lsbCBmYWlsIGF0IGZsdXNoIGFuZCB0aGUgY2xpZW50CiAgICAgICogd2lsbCBnZXQgb3VyIEZsdXNoRXhjZXB0aW9uLgpAQCAtMTIwLDcgKzEyMCw3IEBACiAgICAgcHVibGljIHZvaWQgdGVzdEEyV2l0aEZsdXNoKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgRmx1c2hFeGNlcHRpb24gewogICAgICAgICBhMmJlYW4gPSBhMkhvbWUuY3JlYXRlKCJCMiIpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgYTJiZWFuLnNldE5hbWVXaXRoRmx1c2goIkExMjM0NTY3ODkwMTIzNDU2Nzg5MCIpOyAKKyAgICAgICAgICAgIGEyYmVhbi5zZXROYW1lV2l0aEZsdXNoKCJBMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKTsKICAgICAgICAgfSBjYXRjaCAoRUpCRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGlmIChpc0V4cGVjdGVkRXhjZXB0aW9uKGUpKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBGbHVzaEV4Y2VwdGlvbihlLnRvU3RyaW5nKCkpOwpAQCAtMTM0LDcgKzEzNCw3IEBACiAgICAgICAgIGJvb2xlYW4gZXhwZWN0ZWQgPSBmYWxzZTsKIAogICAgICAgICBUaHJvd2FibGUgYyA9IGUuZ2V0Q2F1c2UoKTsKLSAgICAgICAgaWYgKGMgIT0gbnVsbCAmJiAKKyAgICAgICAgaWYgKGMgIT0gbnVsbCAmJgogICAgICAgICAgICAgICAgIChjIGluc3RhbmNlb2YgY29tLnN1bi5qZG8uYXBpLnBlcnNpc3RlbmNlLnN1cHBvcnQuSkRPRGF0YVN0b3JlRXhjZXB0aW9uKSkgewogCiAgICAgICAgICAgICBTdHJpbmcgbXNnID0gYy5nZXRNZXNzYWdlKCk7CkBAIC0xNDMsNCArMTQzLDQgQEAKIAogICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7CiAgICAgfQotfSAKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9lamJmbHVzaC9lamIvVGVzdEhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9lamJmbHVzaC9lamIvVGVzdEhvbWUuamF2YQppbmRleCA0OTk1NTAzLi43ZDNlM2I2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvZWpiL1Rlc3RIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL2VqYi9UZXN0SG9tZS5qYXZhCkBAIC0yMCw2ICsyMCw2IEBACiBpbXBvcnQgamF2YS5ybWkuKjsKIAogcHVibGljIGludGVyZmFjZSBUZXN0SG9tZSBleHRlbmRzIEVKQkhvbWUgewotIAorCiAgICAgVGVzdCBjcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBDcmVhdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvc3FsL2VqYmZsdXNoX2lmeC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvc3FsL2VqYmZsdXNoX2lmeC5zcWwKaW5kZXggNGRiZTcyMC4uZjVlYTQ3OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL3NxbC9lamJmbHVzaF9pZnguc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9lamJmbHVzaC9zcWwvZWpiZmx1c2hfaWZ4LnNxbApAQCAtMiwxMyArMiwxMyBAQAogRFJPUCBUQUJMRSBGTFVTSFRFU1QyOwogCiBDUkVBVEUgVEFCTEUgRkxVU0hURVNUMSAoCi0JSUQgVkFSQ0hBUigzKSBOT1QgTlVMTCBQUklNQVJZIEtFWSAsCi0JTkFNRSBWQVJDSEFSKDUpIAorICAgIElEIFZBUkNIQVIoMykgTk9UIE5VTEwgUFJJTUFSWSBLRVkgLAorICAgIE5BTUUgVkFSQ0hBUig1KQogKTsKIAogQ1JFQVRFIFRBQkxFIEZMVVNIVEVTVDIgKAotCUlEIFZBUkNIQVIoMykgTk9UIE5VTEwgUFJJTUFSWSBLRVkgLAotCU5BTUUgVkFSQ0hBUig1KSAKKyAgICBJRCBWQVJDSEFSKDMpIE5PVCBOVUxMIFBSSU1BUlkgS0VZICwKKyAgICBOQU1FIFZBUkNIQVIoNSkKICk7CiAKIGNvbW1pdDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9lamJmbHVzaC9zcWwvZWpiZmx1c2hfbXlzcWwuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL3NxbC9lamJmbHVzaF9teXNxbC5zcWwKaW5kZXggNzcwMDliOC4uOTMzYjUzZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL3NxbC9lamJmbHVzaF9teXNxbC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL3NxbC9lamJmbHVzaF9teXNxbC5zcWwKQEAgLTIsMTMgKzIsMTMgQEAKIERST1AgVEFCTEUgRkxVU0hURVNUMjsKIAogQ1JFQVRFIFRBQkxFIEZMVVNIVEVTVDEgKAotCUlEIFZBUkNIQVIoMykgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCi0JTkFNRSBWQVJDSEFSKDUpIE5VTEwKKyAgICBJRCBWQVJDSEFSKDMpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgIE5BTUUgVkFSQ0hBUig1KSBOVUxMCiApIGVuZ2luZT1Jbm5vREI7CiAKIENSRUFURSBUQUJMRSBGTFVTSFRFU1QyICgKLQlJRCBWQVJDSEFSKDMpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAotCU5BTUUgVkFSQ0hBUig1KSBOVUxMCisgICAgSUQgVkFSQ0hBUigzKSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKKyAgICBOQU1FIFZBUkNIQVIoNSkgTlVMTAogKSBlbmdpbmU9SW5ub0RCOwogCiBjb21taXQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvc3FsL2VqYmZsdXNoX29yYS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvc3FsL2VqYmZsdXNoX29yYS5zcWwKaW5kZXggNTRkMjY5YS4uYTRiMGRkZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL3NxbC9lamJmbHVzaF9vcmEuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9lamJmbHVzaC9zcWwvZWpiZmx1c2hfb3JhLnNxbApAQCAtMiwxMyArMiwxMyBAQAogRFJPUCBUQUJMRSBGTFVTSFRFU1QyOwogCiBDUkVBVEUgVEFCTEUgRkxVU0hURVNUMSAoCi0JSUQgVkFSQ0hBUigzKSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKLQlOQU1FIFZBUkNIQVIoNSkgTlVMTAorICAgIElEIFZBUkNIQVIoMykgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgTkFNRSBWQVJDSEFSKDUpIE5VTEwKICk7CiAKIENSRUFURSBUQUJMRSBGTFVTSFRFU1QyICgKLQlJRCBWQVJDSEFSKDMpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAotCU5BTUUgVkFSQ0hBUig1KSBOVUxMCisgICAgSUQgVkFSQ0hBUigzKSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKKyAgICBOQU1FIFZBUkNIQVIoNSkgTlVMTAogKTsKIAogY29tbWl0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL3NxbC9lamJmbHVzaF9wc3FsLnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9lamJmbHVzaC9zcWwvZWpiZmx1c2hfcHNxbC5zcWwKaW5kZXggNzA0ODhlYi4uNmJmMjFmMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2VqYmZsdXNoL3NxbC9lamJmbHVzaF9wc3FsLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZWpiZmx1c2gvc3FsL2VqYmZsdXNoX3BzcWwuc3FsCkBAIC0yLDEzICsyLDEzIEBACiBEUk9QIFRBQkxFIEZMVVNIVEVTVDIgY2FzY2FkZTsKIAogQ1JFQVRFIFRBQkxFIEZMVVNIVEVTVDEgKAotCUlEIFZBUkNIQVIoMykgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCi0JTkFNRSBWQVJDSEFSKDUpIE5VTEwKKyAgICBJRCBWQVJDSEFSKDMpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgIE5BTUUgVkFSQ0hBUig1KSBOVUxMCiApIDsKIAogQ1JFQVRFIFRBQkxFIEZMVVNIVEVTVDIgKAotCUlEIFZBUkNIQVIoMykgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCi0JTkFNRSBWQVJDSEFSKDUpIE5VTEwKKyAgICBJRCBWQVJDSEFSKDMpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgIE5BTUUgVkFSQ0hBUig1KSBOVUxMCiApIDsKIAogY29tbWl0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2ZpZWxkdGVzdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2ZpZWxkdGVzdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGNlODdjMWMuLjg1Y2Y2NjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9maWVsZHRlc3QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZmllbGR0ZXN0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iRmllbGRUZXN0Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tY21wLW1hcHBpbmdzLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWNtcC1tYXBwaW5ncy54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9maWVsZHRlc3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2ZpZWxkdGVzdC9idWlsZC54bWwKaW5kZXggYmU2N2IwMC4uZjJiNDJjZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2ZpZWxkdGVzdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2ZpZWxkdGVzdC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQSouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQTFIb21lLmNsYXNzLCoqL0ExLmNsYXNzLCoqL0EySG9tZS5jbGFzcywqKi9BMi5jbGFzcywqKi9BMVBLLmNsYXNzLCoqL0EyUEsuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjksMTkgKzY5LDE5IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9IiR7YmFzZWRpcn0vLi4vY29tbW9uL2RlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgYWxsCiAgICAgICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9maWVsZHRlc3QvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2ZpZWxkdGVzdC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNDAzMTE1My4uZjE5NjJhNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2ZpZWxkdGVzdC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2ZpZWxkdGVzdC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMzLDEyICszMywxMiBAQAogICogQHZlcnNpb24KICAqLwogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTVEFSVCIpOwogICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZmllbGR0ZXN0Iik7CkBAIC03NywxMiArNzcsMTIgQEAKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiV3JvbmcgcmVzdWx0IGFmdGVyIFVQREFURSAyLngiKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVUERBVEVEIDIueDogIiArIGEyYmVhbi5nZXRTcWxEYXRlKCkpOwotICAgICAgICAgICAgaWYoYTJiZWFuLmdldFNxbERhdGUoKS5nZXRZZWFyKCkgIT0gbmV3IGphdmEudXRpbC5EYXRlKCkuZ2V0WWVhcigpKSAKKyAgICAgICAgICAgIGlmKGEyYmVhbi5nZXRTcWxEYXRlKCkuZ2V0WWVhcigpICE9IG5ldyBqYXZhLnV0aWwuRGF0ZSgpLmdldFllYXIoKSkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiV3JvbmcgcmVzdWx0IGFmdGVyIFVQREFURSAyLngiKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVUERBVEVEIDIueDogIiArIGEyYmVhbi5nZXRCbGIoKVswXSArICIgIiArIGEyYmVhbi5nZXRCbGIoKVsxXSk7CiAgICAgICAgICAgICBpZihhMmJlYW4uZ2V0QmxiKCkubGVuZ3RoICE9IDIpIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJXcm9uZyByZXN1bHQgYWZ0ZXIgVVBEQVRFIDIueCIpOwotIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVQREFURUQgMi54OiAiICsgYTJiZWFuLmdldExpc3QoKSk7CiAgICAgICAgICAgICBpZihhMmJlYW4uZ2V0TGlzdCgpLnNpemUoKSAhPSAxIHx8ICFhMmJlYW4uZ2V0TGlzdCgpLmdldCgwKS5lcXVhbHMoIkEyIikpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIldyb25nIHJlc3VsdCBhZnRlciBVUERBVEUgMi54Iik7CkBAIC0xMTksMTIgKzExOSwxMiBAQAogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJXcm9uZyByZXN1bHQgYWZ0ZXIgVVBEQVRFIDEueCIpOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVQREFURUQgMS4xOiAiICsgYTFiZWFuLmdldFNxbERhdGUoKSk7Ci0gICAgICAgICAgICBpZihhMWJlYW4uZ2V0U3FsRGF0ZSgpLmdldFllYXIoKSAhPSBuZXcgamF2YS51dGlsLkRhdGUoKS5nZXRZZWFyKCkpIAorICAgICAgICAgICAgaWYoYTFiZWFuLmdldFNxbERhdGUoKS5nZXRZZWFyKCkgIT0gbmV3IGphdmEudXRpbC5EYXRlKCkuZ2V0WWVhcigpKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJXcm9uZyByZXN1bHQgYWZ0ZXIgVVBEQVRFIDEueCIpOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVQREFURUQgMS4xOiAiICsgYTFiZWFuLmdldEJsYigpWzBdICsgIiAiICsgYTFiZWFuLmdldEJsYigpWzFdKTsKICAgICAgICAgICAgIGlmKGExYmVhbi5nZXRCbGIoKS5sZW5ndGggIT0gMikgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIldyb25nIHJlc3VsdCBhZnRlciBVUERBVEUgMS54Iik7Ci0gCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVVBEQVRFRCAxLjE6ICIgKyBhMWJlYW4uZ2V0TGlzdCgpKTsKICAgICAgICAgICAgIGlmKGExYmVhbi5nZXRMaXN0KCkuc2l6ZSgpICE9IDEgfHwgIWExYmVhbi5nZXRMaXN0KCkuZ2V0KDApLmVxdWFscygiQTEiKSkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiV3JvbmcgcmVzdWx0IGFmdGVyIFVQREFURSAxLngiKTsKQEAgLTEzMiwxNiArMTMyLDE2IEBACiAgICAgICAgICAgICBhMWJlYW4gPSBhMWhvbWUuZmluZEJ5UHJpbWFyeUtleShwazEpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGT1VORCAxLjE6ICIgKyBhMWJlYW4uZ2V0TmFtZSgpKTsKIAotCSAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGZpZWxkdGVzdCIsIHN0YXQuUEFTUyk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgZmllbGR0ZXN0Iiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRklOSVNIIik7CiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiBleGNlcHRpb246Iik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBmaWVsZHRlc3QiLCBzdGF0LkZBSUwpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGZpZWxkdGVzdCIsIHN0YXQuRkFJTCk7CiAKICAgICAgICAgfQogICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJmaWVsZHRlc3QiKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9maWVsZHRlc3QvZWpiL0ExLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZmllbGR0ZXN0L2VqYi9BMS5qYXZhCmluZGV4IDYzZmZmZGYuLmE2MWJjNjQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9maWVsZHRlc3QvZWpiL0ExLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2ZpZWxkdGVzdC9lamIvQTEuamF2YQpAQCAtMjQsMTggKzI0LDE4IEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBBMSBleHRlbmRzIGpha2FydGEuZWpiLkVKQk9iamVjdCB7Ci0gCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGphdmEudXRpbC5EYXRlIGdldE15RGF0ZSgpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgamF2YS5zcWwuRGF0ZSBnZXRTcWxEYXRlKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBieXRlW10gZ2V0QmxiKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLnV0aWwuQXJyYXlMaXN0IGdldExpc3QoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgdXBkYXRlKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZmllbGR0ZXN0L2VqYi9BMUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9maWVsZHRlc3QvZWpiL0ExQmVhbi5qYXZhCmluZGV4IDY3OTk1MmIuLjkyNzUzZWQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9maWVsZHRlc3QvZWpiL0ExQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9maWVsZHRlc3QvZWpiL0ExQmVhbi5qYXZhCkBAIC0yMCw1NyArMjAsNTcgQEAKIGltcG9ydCBqYXZheC5uYW1pbmcuKjsKIAogLyoqCi0gKiAxLjEgYmVhbi4gCisgKiAxLjEgYmVhbi4KICAqIEBhdXRob3IgbXZhdGtpbmEKICAqLwogCiAKIHB1YmxpYyBjbGFzcyBBMUJlYW4gaW1wbGVtZW50cyBqYWthcnRhLmVqYi5FbnRpdHlCZWFuIHsKLSAgICAKKwogICAgIHByaXZhdGUgamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI3NldEVudGl0eUNvbnRleHQoamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQgYUNvbnRleHQpIHsKICAgICAgICAgY29udGV4dD1hQ29udGV4dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiQWN0aXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJQYXNzaXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUmVtb3ZlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVidWc6IEExQmVhbiBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jdW5zZXRFbnRpdHlDb250ZXh0KCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKSB7CiAgICAgICAgIGNvbnRleHQ9bnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiTG9hZCgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiU3RvcmUoKQogICAgICAqLwpAQCAtODIsNyArODIsNyBAQAogICAgICAgICBteWRhdGUuc2V0VGltZSgwKTsKICAgICAgICAgbGlzdC5hZGQobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQpAQCAtMTIyLDEwICsxMjIsMTAgQEAKIAogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZShqYXZhLmxhbmcuU3RyaW5nIG5hbWUpIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24geyAKKworICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoamF2YS5sYW5nLlN0cmluZyBuYW1lKSB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIHsKICAgICAgICAgYmxiID0gbmV3IGJ5dGVbXXsxLDJ9OwogICAgICAgICBsaXN0ID0gbmV3IGphdmEudXRpbC5BcnJheUxpc3QoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9maWVsZHRlc3QvZWpiL0ExSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2ZpZWxkdGVzdC9lamIvQTFIb21lLmphdmEKaW5kZXggOWQzZmEyMy4uYWU4YzE0ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2ZpZWxkdGVzdC9lamIvQTFIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2ZpZWxkdGVzdC9lamIvQTFIb21lLmphdmEKQEAgLTI0LDkgKzI0LDkgQEAKICAqLwogCiBwdWJsaWMgaW50ZXJmYWNlIEExSG9tZSBleHRlbmRzIGpha2FydGEuZWpiLkVKQkhvbWUgewotICAgIAorCiAgICAgcHVibGljICBBMSBmaW5kQnlQcmltYXJ5S2V5KEExUEsgcGspICB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgIEExIGNyZWF0ZShqYXZhLmxhbmcuU3RyaW5nIG5hbWUpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2ZpZWxkdGVzdC9lamIvQTFQSy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2ZpZWxkdGVzdC9lamIvQTFQSy5qYXZhCmluZGV4IGFiZWYyNTguLjA2NjczZTggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9maWVsZHRlc3QvZWpiL0ExUEsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZmllbGR0ZXN0L2VqYi9BMVBLLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKICAgICAgICAgcHVibGljIGphdmEudXRpbC5EYXRlIGlkZGF0ZTsKIAogICAgICAgICBwdWJsaWMgQTFQSygpIHt9Ci0gICAgICAgIAorCiAgICAgICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhqYXZhLmxhbmcuT2JqZWN0IG9iaikgewogICAgICAgICAgICAgaWYoIG9iaj09bnVsbCB8fAogICAgICAgICAgICAgIXRoaXMuZ2V0Q2xhc3MoKS5lcXVhbHMob2JqLmdldENsYXNzKCkpICkgcmV0dXJuKCBmYWxzZSApOwpAQCAtMzAsNyArMzAsNyBAQAogICAgICAgICAgICAgaWYoICF0aGlzLmlkMS5lcXVhbHMoby5pZDEpIHx8ICF0aGlzLmlkZGF0ZS5lcXVhbHMoby5pZGRhdGUpICkgcmV0dXJuKCBmYWxzZSApOwogICAgICAgICAgICAgcmV0dXJuKCB0cnVlICk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKICAgICAgICAgICAgIGludCBoYXNoQ29kZT0wOwogICAgICAgICAgICAgaGFzaENvZGUgKz0gaWQxLmhhc2hDb2RlKCkgKyBpZGRhdGUuaGFzaENvZGUoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9maWVsZHRlc3QvZWpiL0EyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZmllbGR0ZXN0L2VqYi9BMi5qYXZhCmluZGV4IGVkNWVmZTMuLjUxYmJkOTggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9maWVsZHRlc3QvZWpiL0EyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2ZpZWxkdGVzdC9lamIvQTIuamF2YQpAQCAtMjQsOSArMjQsOSBAQAogICovCiAKIHB1YmxpYyBpbnRlcmZhY2UgQTIgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJPYmplY3QgewotIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLnV0aWwuRGF0ZSBnZXRNeURhdGUoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGphdmEuc3FsLkRhdGUgZ2V0U3FsRGF0ZSgpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZmllbGR0ZXN0L2VqYi9BMkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9maWVsZHRlc3QvZWpiL0EyQmVhbi5qYXZhCmluZGV4IGVlOTU5YzguLjg2MzE0YzkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9maWVsZHRlc3QvZWpiL0EyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9maWVsZHRlc3QvZWpiL0EyQmVhbi5qYXZhCkBAIC0yMCw1NyArMjAsNTcgQEAKIGltcG9ydCBqYXZheC5uYW1pbmcuKjsKIAogLyoqCi0gKiAyLjAgYmVhbi4gCisgKiAyLjAgYmVhbi4KICAqIEBhdXRob3IgbXZhdGtpbmEKICAqLwogCiAKIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBMkJlYW4gaW1wbGVtZW50cyBqYWthcnRhLmVqYi5FbnRpdHlCZWFuIHsKLSAgICAKKwogICAgIHByaXZhdGUgamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI3NldEVudGl0eUNvbnRleHQoamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQgYUNvbnRleHQpIHsKICAgICAgICAgY29udGV4dD1hQ29udGV4dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiQWN0aXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJQYXNzaXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUmVtb3ZlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVidWc6IEEyQmVhbiBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jdW5zZXRFbnRpdHlDb250ZXh0KCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKSB7CiAgICAgICAgIGNvbnRleHQ9bnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiTG9hZCgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiU3RvcmUoKQogICAgICAqLwpAQCAtMTE5LDEwICsxMTksMTAgQEAKIAogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZShqYXZhLmxhbmcuU3RyaW5nIG5hbWUpIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24geyAKKworICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoamF2YS5sYW5nLlN0cmluZyBuYW1lKSB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIHsKICAgICAgICAgc2V0QmxiKG5ldyBieXRlW117MSwyfSk7CiAgICAgICAgIHNldExpc3QobmV3IGphdmEudXRpbC5BcnJheUxpc3QoKSk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZmllbGR0ZXN0L2VqYi9BMkhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9maWVsZHRlc3QvZWpiL0EySG9tZS5qYXZhCmluZGV4IDY3NjAyYWYuLmEwNmMyMmUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9maWVsZHRlc3QvZWpiL0EySG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9maWVsZHRlc3QvZWpiL0EySG9tZS5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBBMkhvbWUgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJIb21lIHsKLSAgICAKKwogICAgIHB1YmxpYyAgQTIgZmluZEJ5UHJpbWFyeUtleShBMlBLIHBrKSAgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljICBBMiBjcmVhdGUoamF2YS5sYW5nLlN0cmluZyBuYW1lKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9maWVsZHRlc3QvZWpiL0EyUEsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9maWVsZHRlc3QvZWpiL0EyUEsuamF2YQppbmRleCAzZTYwYTRlLi5kM2ZjNDk4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvZmllbGR0ZXN0L2VqYi9BMlBLLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2ZpZWxkdGVzdC9lamIvQTJQSy5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiAgICAgICAgIHB1YmxpYyBqYXZhLnV0aWwuRGF0ZSBpZGRhdGU7CiAKICAgICAgICAgcHVibGljIEEyUEsoKSB7fQotICAgICAgICAKKwogICAgICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoamF2YS5sYW5nLk9iamVjdCBvYmopIHsKICAgICAgICAgICAgIGlmKCBvYmo9PW51bGwgfHwKICAgICAgICAgICAgICF0aGlzLmdldENsYXNzKCkuZXF1YWxzKG9iai5nZXRDbGFzcygpKSApIHJldHVybiggZmFsc2UgKTsKQEAgLTMwLDcgKzMwLDcgQEAKICAgICAgICAgICAgIGlmKCAhdGhpcy5pZDEuZXF1YWxzKG8uaWQxKSB8fCAhdGhpcy5pZGRhdGUuZXF1YWxzKG8uaWRkYXRlKSApIHJldHVybiggZmFsc2UgKTsKICAgICAgICAgICAgIHJldHVybiggdHJ1ZSApOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CiAgICAgICAgICAgICBpbnQgaGFzaENvZGU9MDsKICAgICAgICAgICAgIGhhc2hDb2RlICs9IGlkMS5oYXNoQ29kZSgpICsgaWRkYXRlLmhhc2hDb2RlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGViNTYxMjcuLjNiOTRmMzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMiArMTUsMjIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IkluaGVyaXRlZHBrIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tY21wLW1hcHBpbmdzLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWNtcC1tYXBwaW5ncy54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJkYnNjaGVtYSIgdmFsdWU9ImVqYi90ZXN0LmRic2NoZW1hIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2luaGVyaXRlZHBrL2J1aWxkLnhtbAppbmRleCA3YmNjNmQ4Li44NDJiOWJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9idWlsZC54bWwKQEAgLTM0LDEyICszNCwxMiBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgIAorCiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkNvcHlpbmcgZGJzY2hlbWEgZmlsZSB0byBlamIgY2xhc3NlcyBkaXIiIC8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7ZGJzY2hlbWF9IiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vcGt2YWxpZGF0aW9uIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CkBAIC00OSwxNCArNDksMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0EqKi5jbGFzcywqKi9CKiouY2xhc3MsKiovQyoqLmNsYXNzLCoqL1QqKi5jbGFzcywqKi90ZXN0LmRic2NoZW1hIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0FIb21lLmNsYXNzLCoqL0EuY2xhc3MsKiovQkhvbWUuY2xhc3MsKiovQi5jbGFzcywqKi9DSG9tZS5jbGFzcywqKi9DLmNsYXNzLCoqL0FQSy5jbGFzcywqKi9DUEsuY2xhc3MsKiovVGVzdFBLU3VwZXIuY2xhc3MsKiovVGVzdE9pZFN1cGVyLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2luaGVyaXRlZHBrX2RlcmJ5LnNxbCIvPgpAQCAtNzUsMTggKzc1LDE4IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9IiR7YmFzZWRpcn0vLi4vY29tbW9uL2RlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfaW5oZXJpdGVkcGtfZGVyYnkuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogCiA8IS0tCkBAIC05NCwxMiArOTQsMTIgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2RlbGV0ZV90YWJsZXMuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIC0tPgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgYWxsCiAgICAgICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGM3ZGUwNjIuLjhmMWU0MDYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2luaGVyaXRlZHBrL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzMsMTUgKzMzLDE1IEBACiAgKiBAdmVyc2lvbgogICovCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICAKKwogICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTVEFSVCIpOwotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJpbmhlcml0ZWRwayIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJpbmhlcml0ZWRwayIpOwogCiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIApAQCAtNzksMTUgKzc5LDE1IEBACiAgICAgICAgICAgICBjYmVhbiA9IGNob21lLmZpbmRCeVByaW1hcnlLZXkoY3BrKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRk9VTkQgQzogIiArIGNiZWFuLmdldE5hbWUoKSk7CiAKLQkgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBpbmhlcml0ZWRwayIsIHN0YXQuUEFTUyk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgaW5oZXJpdGVkcGsiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGSU5JU0giKTsKIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIGV4Y2VwdGlvbjoiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGluaGVyaXRlZHBrIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBpbmhlcml0ZWRwayIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJpbmhlcml0ZWRwayIpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2luaGVyaXRlZHBrL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2luaGVyaXRlZHBrL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDE3NDkwNTEuLmFhNDVhOTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTIzLDM4ICsyMywzOCBAQAogICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPlBLQTwvZWpiLW5hbWU+CiAgICAgICA8am5kaS1uYW1lPlBLQTwvam5kaS1uYW1lPgotCTxyZWZyZXNoLXBlcmlvZC1pbi1zZWNvbmRzPjYwMDwvcmVmcmVzaC1wZXJpb2QtaW4tc2Vjb25kcz4KLQk8YmVhbi1jYWNoZT4KLQkJPG1heC1jYWNoZS1zaXplPjYwPC9tYXgtY2FjaGUtc2l6ZT4KLQkJPGlzLWNhY2hlLW92ZXJmbG93LWFsbG93ZWQ+dHJ1ZTwvaXMtY2FjaGUtb3ZlcmZsb3ctYWxsb3dlZD4KLQkJPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwMDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+Ci0JCTxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz42MDAwPC9yZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4KLQkJPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkZJRk88L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgotCTwvYmVhbi1jYWNoZT4KKyAgICA8cmVmcmVzaC1wZXJpb2QtaW4tc2Vjb25kcz42MDA8L3JlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+CisgICAgPGJlYW4tY2FjaGU+CisgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT42MDwvbWF4LWNhY2hlLXNpemU+CisgICAgICAgIDxpcy1jYWNoZS1vdmVyZmxvdy1hbGxvd2VkPnRydWU8L2lzLWNhY2hlLW92ZXJmbG93LWFsbG93ZWQ+CisgICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+NjAwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5GSUZPPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4KKyAgICA8L2JlYW4tY2FjaGU+CiAgICAgPC9lamI+CiAgIDxlamI+CiAgICAgICA8ZWpiLW5hbWU+UEtCPC9lamItbmFtZT4KICAgICAgIDxqbmRpLW5hbWU+UEtCPC9qbmRpLW5hbWU+Ci0JPHJlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+NjAwPC9yZWZyZXNoLXBlcmlvZC1pbi1zZWNvbmRzPgotCTxiZWFuLWNhY2hlPgotCQk8bWF4LWNhY2hlLXNpemU+NjA8L21heC1jYWNoZS1zaXplPgotCQk8aXMtY2FjaGUtb3ZlcmZsb3ctYWxsb3dlZD50cnVlPC9pcy1jYWNoZS1vdmVyZmxvdy1hbGxvd2VkPgotCQk8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjAwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KLQkJPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjYwMDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgotCQk8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+RklGTzwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+Ci0JPC9iZWFuLWNhY2hlPgorICAgIDxyZWZyZXNoLXBlcmlvZC1pbi1zZWNvbmRzPjYwMDwvcmVmcmVzaC1wZXJpb2QtaW4tc2Vjb25kcz4KKyAgICA8YmVhbi1jYWNoZT4KKyAgICAgICAgPG1heC1jYWNoZS1zaXplPjYwPC9tYXgtY2FjaGUtc2l6ZT4KKyAgICAgICAgPGlzLWNhY2hlLW92ZXJmbG93LWFsbG93ZWQ+dHJ1ZTwvaXMtY2FjaGUtb3ZlcmZsb3ctYWxsb3dlZD4KKyAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwMDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICAgIDxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz42MDAwPC9yZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkZJRk88L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgorICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KICAgPGVqYj4KICAgICAgIDxlamItbmFtZT5QS0M8L2VqYi1uYW1lPgogICAgICAgPGpuZGktbmFtZT5QS0M8L2puZGktbmFtZT4KLQk8cmVmcmVzaC1wZXJpb2QtaW4tc2Vjb25kcz42MDA8L3JlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+Ci0JPGJlYW4tY2FjaGU+Ci0JCTxtYXgtY2FjaGUtc2l6ZT42MDwvbWF4LWNhY2hlLXNpemU+Ci0JCTxpcy1jYWNoZS1vdmVyZmxvdy1hbGxvd2VkPnRydWU8L2lzLWNhY2hlLW92ZXJmbG93LWFsbG93ZWQ+Ci0JCTxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgotCQk8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+NjAwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+Ci0JCTx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5GSUZPPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4KLQk8L2JlYW4tY2FjaGU+CisgICAgPHJlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+NjAwPC9yZWZyZXNoLXBlcmlvZC1pbi1zZWNvbmRzPgorICAgIDxiZWFuLWNhY2hlPgorICAgICAgICA8bWF4LWNhY2hlLXNpemU+NjA8L21heC1jYWNoZS1zaXplPgorICAgICAgICA8aXMtY2FjaGUtb3ZlcmZsb3ctYWxsb3dlZD50cnVlPC9pcy1jYWNoZS1vdmVyZmxvdy1hbGxvd2VkPgorICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjAwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjYwMDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+RklGTzwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+CisgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogCiAgIDxjbXAtcmVzb3VyY2U+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvZWpiL0EuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvQS5qYXZhCmluZGV4IDBkZGM4ZDAuLmZlMmU0NTggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvQS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvQS5qYXZhCkBAIC0yNCw4ICsyNCw4IEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBBIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCT2JqZWN0IHsKLSAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFzdG5hbWUoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvQUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvQUJlYW4uamF2YQppbmRleCBmZjNiZDI0Li5jOWY2MzdiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvZWpiL0FCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2luaGVyaXRlZHBrL2VqYi9BQmVhbi5qYXZhCkBAIC0yNSw2NSArMjUsNjUgQEAKIAogCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQUJlYW4gaW1wbGVtZW50cyBqYWthcnRhLmVqYi5FbnRpdHlCZWFuIHsKLSAgICAKKwogICAgIHByaXZhdGUgamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCBjb250ZXh0OwotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jc2V0RW50aXR5Q29udGV4dChqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0KQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCBhQ29udGV4dCkgewogICAgICAgICBjb250ZXh0PWFDb250ZXh0OwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYkFjdGl2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJQYXNzaXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJSZW1vdmUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWJ1ZzogQUJlYW4gZWpiUmVtb3ZlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jdW5zZXRFbnRpdHlDb250ZXh0KCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKSB7CiAgICAgICAgIGNvbnRleHQ9bnVsbDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJMb2FkKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYlN0b3JlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgbG9uZyBnZXRJZCgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldElkKGxvbmcgaWQpOwogCkBAIC0xMDEsOCArMTAxLDggQEAKIAogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKGxvbmcgaWQsIGphdmEubGFuZy5TdHJpbmcgbmFtZSwgZG91YmxlIHMpCiAgICAgICAgIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24geyB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvQUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvQUhvbWUuamF2YQppbmRleCBhNTk2MWM4Li4xODg5MGExIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvZWpiL0FIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2luaGVyaXRlZHBrL2VqYi9BSG9tZS5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBBSG9tZSBleHRlbmRzIGpha2FydGEuZWpiLkVKQkhvbWUgewotICAgIAorCiAgICAgcHVibGljICBBIGZpbmRCeVByaW1hcnlLZXkoQVBLIHBrKSAgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljICBBIGNyZWF0ZShsb25nIGksIGphdmEubGFuZy5TdHJpbmcgbmFtZSwgZG91YmxlIHMpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2luaGVyaXRlZHBrL2VqYi9BUEsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvQVBLLmphdmEKaW5kZXggMTQyNTNjZC4uMGMyOGZmNyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2luaGVyaXRlZHBrL2VqYi9BUEsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvZWpiL0FQSy5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgICAgIC8vIHB1YmxpYyBsb25nIGlkOwogCiAgICAgICAgIHB1YmxpYyBBUEsoKSB7fQotICAgICAgICAKKwogICAgICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoamF2YS5sYW5nLk9iamVjdCBvYmopIHsKICAgICAgICAgICAgIGlmKCBvYmo9PW51bGwgfHwKICAgICAgICAgICAgICF0aGlzLmdldENsYXNzKCkuZXF1YWxzKG9iai5nZXRDbGFzcygpKSApIHJldHVybiggZmFsc2UgKTsKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgICAgIGlmKCB0aGlzLmlkIT1vLmlkICkgcmV0dXJuKCBmYWxzZSApOwogICAgICAgICAgICAgcmV0dXJuKCB0cnVlICk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKICAgICAgICAgICAgIGludCBoYXNoQ29kZT0wOwogICAgICAgICAgICAgaGFzaENvZGUgKz0gaWQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvZWpiL0IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvQi5qYXZhCmluZGV4IGNhOWFkODAuLjJmMDM2OGQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvQi5qYXZhCkBAIC0yNCw4ICsyNCw4IEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBCIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCT2JqZWN0IHsKLSAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gCisKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2luaGVyaXRlZHBrL2VqYi9CQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2luaGVyaXRlZHBrL2VqYi9CQmVhbi5qYXZhCmluZGV4IGUxNDJiYzguLjlkNDUxOWQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvQkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvZWpiL0JCZWFuLmphdmEKQEAgLTI1LDY1ICsyNSw2NSBAQAogCiAKIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCQmVhbiBpbXBsZW1lbnRzIGpha2FydGEuZWpiLkVudGl0eUJlYW4gewotICAgIAorCiAgICAgcHJpdmF0ZSBqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0IGNvbnRleHQ7Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNzZXRFbnRpdHlDb250ZXh0KGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0IGFDb250ZXh0KSB7CiAgICAgICAgIGNvbnRleHQ9YUNvbnRleHQ7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiQWN0aXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYlBhc3NpdmF0ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYlJlbW92ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlYnVnOiBCQmVhbiBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiN1bnNldEVudGl0eUNvbnRleHQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsKICAgICAgICAgY29udGV4dD1udWxsOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYkxvYWQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiU3RvcmUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBqYXZhLnNxbC5EYXRlIGdldElkKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0SWQoamF2YS5zcWwuRGF0ZSBpZCk7CiAKQEAgLTk3LDggKzk3LDggQEAKIAogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKGphdmEuc3FsLkRhdGUgaWQsIGphdmEubGFuZy5TdHJpbmcgbmFtZSkKICAgICAgICAgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiB7IH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2luaGVyaXRlZHBrL2VqYi9CSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2luaGVyaXRlZHBrL2VqYi9CSG9tZS5qYXZhCmluZGV4IGZjY2Q5ZDguLjk5NGUxMDUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvQkhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvZWpiL0JIb21lLmphdmEKQEAgLTI0LDkgKzI0LDkgQEAKICAqLwogCiBwdWJsaWMgaW50ZXJmYWNlIEJIb21lIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCSG9tZSB7Ci0gICAgCisKICAgICBwdWJsaWMgIEIgZmluZEJ5UHJpbWFyeUtleShqYXZhLnNxbC5EYXRlIHBrKSAgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljICBCIGNyZWF0ZShqYXZhLnNxbC5EYXRlIGksIGphdmEubGFuZy5TdHJpbmcgbmFtZSkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvZWpiL0MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvQy5qYXZhCmluZGV4IGNhNTljMGYuLmY5NTI5ZDYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvQy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvQy5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBDIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCT2JqZWN0IHsKLSAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvQ0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvQ0JlYW4uamF2YQppbmRleCAwZjg0MTBiLi4xYjM2MTdkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvZWpiL0NCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2luaGVyaXRlZHBrL2VqYi9DQmVhbi5qYXZhCkBAIC0yNSw2NSArMjUsNjUgQEAKIAogCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ0JlYW4gaW1wbGVtZW50cyBqYWthcnRhLmVqYi5FbnRpdHlCZWFuIHsKLSAgICAKKwogICAgIHByaXZhdGUgamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCBjb250ZXh0OwotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jc2V0RW50aXR5Q29udGV4dChqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0KQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCBhQ29udGV4dCkgewogICAgICAgICBjb250ZXh0PWFDb250ZXh0OwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYkFjdGl2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJQYXNzaXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJSZW1vdmUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWJ1ZzogQ0JlYW4gZWpiUmVtb3ZlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jdW5zZXRFbnRpdHlDb250ZXh0KCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKSB7CiAgICAgICAgIGNvbnRleHQ9bnVsbDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJMb2FkKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYlN0b3JlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgbG9uZyBnZXRJZCgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldElkKGxvbmcgaWQpOwogCkBAIC05Nyw4ICs5Nyw4IEBACiAKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZShsb25nIGlkLCBqYXZhLmxhbmcuU3RyaW5nIG5hbWUpCiAgICAgICAgIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24geyB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvQ0hvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvQ0hvbWUuamF2YQppbmRleCBhYmMyMDdlLi40ZDdhNTkwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvZWpiL0NIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2luaGVyaXRlZHBrL2VqYi9DSG9tZS5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBDSG9tZSBleHRlbmRzIGpha2FydGEuZWpiLkVKQkhvbWUgewotICAgIAorCiAgICAgcHVibGljICBDIGZpbmRCeVByaW1hcnlLZXkoQ1BLIHBrKSAgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljICBDIGNyZWF0ZShsb25nIGksIGphdmEubGFuZy5TdHJpbmcgbmFtZSkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvZWpiL0NQSy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2luaGVyaXRlZHBrL2VqYi9DUEsuamF2YQppbmRleCA3ZjVhOGZiLi4yZTNiYWI4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvZWpiL0NQSy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvQ1BLLmphdmEKQEAgLTE5LDUgKzE5LDUgQEAKIHB1YmxpYyBjbGFzcyBDUEsgZXh0ZW5kcyBUZXN0UEtTdXBlciBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgICAgICBwdWJsaWMgQ1BLKCkge30KLSAgICAgICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvVGVzdE9pZFN1cGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvZWpiL1Rlc3RPaWRTdXBlci5qYXZhCmluZGV4IGFmMjBhYTUuLjdkMWMxNjQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvVGVzdE9pZFN1cGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2luaGVyaXRlZHBrL2VqYi9UZXN0T2lkU3VwZXIuamF2YQpAQCAtMzQsNSArMzQsNSBAQAogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFRlc3RPaWRTdXBlciAqLwogICAgIHB1YmxpYyBUZXN0T2lkU3VwZXIoKSB7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvZWpiL1Rlc3RQS1N1cGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvZWpiL1Rlc3RQS1N1cGVyLmphdmEKaW5kZXggZTExZGUzNy4uNDgyYmQ3NCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2luaGVyaXRlZHBrL2VqYi9UZXN0UEtTdXBlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9lamIvVGVzdFBLU3VwZXIuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFRlc3RQS1N1cGVyICovCiAgICAgcHVibGljIFRlc3RQS1N1cGVyKCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhqYXZhLmxhbmcuT2JqZWN0IG9iaikgewogICAgICAgICBpZiggb2JqPT1udWxsIHx8CiAgICAgICAgICAgICAhdGhpcy5nZXRDbGFzcygpLmVxdWFscyhvYmouZ2V0Q2xhc3MoKSkgKSByZXR1cm4oIGZhbHNlICk7CkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIFRlc3RQS1N1cGVyIG89KFRlc3RQS1N1cGVyKSBvYmo7CiAgICAgICAgIHJldHVybiAoIHRoaXMuaWQgPT0gby5pZCApOwogICAgIH0KLSAgICAgICAgCisKICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewogICAgICAgICBpbnQgaGFzaENvZGU9MDsKICAgICAgICAgaGFzaENvZGUgKz0gaWQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvc3FsL2luaGVyaXRlZHBrX2RiMi5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvc3FsL2luaGVyaXRlZHBrX2RiMi5zcWwKaW5kZXggNzU1NGUxNi4uMjY5NjVmMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2luaGVyaXRlZHBrL3NxbC9pbmhlcml0ZWRwa19kYjIuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9zcWwvaW5oZXJpdGVkcGtfZGIyLnNxbApAQCAtMTcsMTMgKzE3LDEzIEBACiBDUkVBVEUgVEFCTEUgQgogKAogICAgIGlkIERBVEUgICAgICAgICAgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCi0gICAgbmFtZSAgIFZBUkNIQVIoMzIpIAorICAgIG5hbWUgICBWQVJDSEFSKDMyKQogKTsKIAogQ1JFQVRFIFRBQkxFIEMKICgKICAgICBpZCBJTlQgICAgICAgICAgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCi0gICAgbmFtZSAgIFZBUkNIQVIoMzIpIAorICAgIG5hbWUgICBWQVJDSEFSKDMyKQogKTsKIAogY29tbWl0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2luaGVyaXRlZHBrL3NxbC9pbmhlcml0ZWRwa19kZXJieS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvc3FsL2luaGVyaXRlZHBrX2RlcmJ5LnNxbAppbmRleCAyZTdlNTljLi4yY2ZiZDAwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvc3FsL2luaGVyaXRlZHBrX2RlcmJ5LnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvc3FsL2luaGVyaXRlZHBrX2RlcmJ5LnNxbApAQCAtMTYsMTIgKzE2LDEyIEBACiBDUkVBVEUgVEFCTEUgQgogKAogICAgIGlkIERBVEUgICAgICAgICAgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCi0gICAgbmFtZSAgIFZBUkNIQVIoMzIpIAorICAgIG5hbWUgICBWQVJDSEFSKDMyKQogKTsKIAogQ1JFQVRFIFRBQkxFIEMKICgKICAgICBpZCBJTlQgICAgICAgICAgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCi0gICAgbmFtZSAgIFZBUkNIQVIoMzIpIAorICAgIG5hbWUgICBWQVJDSEFSKDMyKQogKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2luaGVyaXRlZHBrL3NxbC9pbmhlcml0ZWRwa19pZnguc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2luaGVyaXRlZHBrL3NxbC9pbmhlcml0ZWRwa19pZnguc3FsCmluZGV4IGU1ODZlZGQuLjc2MzY2NjIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9pbmhlcml0ZWRway9zcWwvaW5oZXJpdGVkcGtfaWZ4LnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvaW5oZXJpdGVkcGsvc3FsL2luaGVyaXRlZHBrX2lmeC5zcWwKQEAgLTExLDE5ICsxMSwxOSBAQAogICAgIGZpcnN0TmFtZSBWQVJDSEFSKDMyKSAsCiAgICAgaGlyZURhdGUgIERBVEUgICAgICAgICAsCiAgICAgYmlydGhEYXRlIERBVEUgICAgICAgICAsCi0gICAgc2FsYXJ5ICAgIEZMT0FUICAgICAgICBOT1QgTlVMTCAKKyAgICBzYWxhcnkgICAgRkxPQVQgICAgICAgIE5PVCBOVUxMCiApOwogCiBDUkVBVEUgVEFCTEUgQgogKAogICAgIGlkIERBVEUgICAgICAgICAgUFJJTUFSWSBLRVksCi0gICAgbmFtZSAgIFZBUkNIQVIoMzIpIAorICAgIG5hbWUgICBWQVJDSEFSKDMyKQogKTsKIAogQ1JFQVRFIFRBQkxFIEMKICgKICAgICBpZCBJTlQgICAgICAgICAgUFJJTUFSWSBLRVksCi0gICAgbmFtZSAgIFZBUkNIQVIoMzIpIAorICAgIG5hbWUgICBWQVJDSEFSKDMyKQogKTsKIAogY29tbWl0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2oyZWVndWlkZV9wcm9kdWN0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvajJlZWd1aWRlX3Byb2R1Y3QvYnVpbGQucHJvcGVydGllcwppbmRleCAxODE5MmVhLi4yNGZmNjMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvajJlZWd1aWRlX3Byb2R1Y3QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvajJlZWd1aWRlX3Byb2R1Y3QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMzUgKzE1LDM1IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqMmVlZ3VpZGVfcHJvZHVjdCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi5qYXIiIHZhbHVlPSJqMmVlZ3VpZGVfcHJvZHVjdEVqYi5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1jbXAtbWFwcGluZ3MueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tY21wLW1hcHBpbmdzLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiCiAgICAgICAgIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIKICAgICAgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJqMmVlZ3VpZGVfcHJvZHVjdEVqYi54bWwiCi0JdmFsdWU9ImRlc2NyaXB0b3IvajJlZWd1aWRlX3Byb2R1Y3RFamIueG1sIi8+CisgICAgdmFsdWU9ImRlc2NyaXB0b3IvajJlZWd1aWRlX3Byb2R1Y3RFamIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0icHJvZHVjdFdlYlN0dWZmLnhtbCIKLQl2YWx1ZT0iZGVzY3JpcHRvci9wcm9kdWN0V2ViU3R1ZmYueG1sIi8+CisgICAgdmFsdWU9ImRlc2NyaXB0b3IvcHJvZHVjdFdlYlN0dWZmLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1qMmVlZ3VpZGVfcHJvZHVjdEVqYi54bWwiCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWoyZWVndWlkZV9wcm9kdWN0RWpiLnhtbCIvPgorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1qMmVlZ3VpZGVfcHJvZHVjdEVqYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tcHJvZHVjdFdlYlN0dWZmLnhtbCIKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tcHJvZHVjdFdlYlN0dWZmLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXByb2R1Y3RXZWJTdHVmZi54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS9wcm9kdWN0Q2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9Indhci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9L3Byb2R1Y3RXZWJTdHVmZi53YXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvajJlZWd1aWRlX3Byb2R1Y3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2oyZWVndWlkZV9wcm9kdWN0L2J1aWxkLnhtbAppbmRleCA3Zjc1ZWJkLi5lMzBhMzQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvajJlZWd1aWRlX3Byb2R1Y3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9qMmVlZ3VpZGVfcHJvZHVjdC9idWlsZC54bWwKQEAgLTM1LDkgKzM1LDkgQEAKICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgICAgPGRlbGV0ZSBkaXI9IiR7YmFzZWRpcn0vZG9jcm9vdCIgLz4KICAgICAgIDxkZWxldGUgZGlyPSIke2Jhc2VkaXJ9L2xpYiIgLz4KLSAgICAgIAorCiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NSwxMSArNDUsMTEgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+Ci0JPC9hbnRjYWxsPgorICAgIDwvYW50Y2FsbD4KIAotCSA8L3RhcmdldD4KKyAgICAgPC90YXJnZXQ+CiAKICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgICAgPCEtLSBUYXJnZXQgdG8gY3JlYXRlIHRoZSBlamIgYXBwbGljYXRpb24gamFyIGZpbGUgLS0+CkBAIC01Nyw0MyArNTcsNDMgQEAKIAogICAgICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UtZWpiLWphciIgPgogCi0JIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4KKyAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVqYmphci1jb21tb24iPgogCi0gICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1Byb2R1Y3RFSkIuY2xhc3MsKiovUHJvZHVjdC5jbGFzcywgKiovUHJvZHVjdEhvbWUuY2xhc3MscHJvZHVjdFNjaGVtYS5kYnNjaGVtYSwqKi9Qcm9kdWN0RUpCX0pET1N0YXRlLm1hcHBpbmciIC8+CiAKLQkgIDxwYXJhbSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9IiR7ZWpiLWphci54bWx9IiAvPgotCSAgPHBhcmFtIG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9IiR7c3VuLWVqYi1qYXIueG1sfSIgLz4KLQkgIDxwYXJhbSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgLz4KKyAgICAgIDxwYXJhbSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9IiR7ZWpiLWphci54bWx9IiAvPgorICAgICAgPHBhcmFtIG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9IiR7c3VuLWVqYi1qYXIueG1sfSIgLz4KKyAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgLz4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS9qMmVlZ3VpZGVfcHJvZHVjdEVqYi5qYXIiLz4KIAotCTwvYW50Y2FsbD4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLXdlYmNsaWVudC13YXIiID4KIAotCSA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KKyAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0idHJ1ZSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIgotCSAgICAgIHZhbHVlPSIqKi9TZXJ2bGV0LmNsYXNzIiAvPgorICAgICAgICAgIHZhbHVlPSIqKi9TZXJ2bGV0LmNsYXNzIiAvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9L3Byb2R1Y3RXZWJTdHVmZi53YXIiLz4KLQk8L2FudGNhbGw+CisgICAgPC9hbnRjYWxsPgogCiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UtYXBwY2xpZW50IiA+CiAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KIAotCSA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKKyAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iPgorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9Qcm9kdWN0Q2xpZW50LmNsYXNzLCAqKi9Qcm9kdWN0SG9tZS5jbGFzcywqKi9Qcm9kdWN0LmNsYXNzIiAvPgotCSAgICA8cGFyYW0gbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIKLQkJdmFsdWU9IiR7YXBwbGljYXRpb24tY2xpZW50LnhtbH0iIC8+Ci0JICAgIDxwYXJhbSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIKLQkJdmFsdWU9IiR7c3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9IiAvPgorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIKKyAgICAgICAgdmFsdWU9IiR7YXBwbGljYXRpb24tY2xpZW50LnhtbH0iIC8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIKKyAgICAgICAgdmFsdWU9IiR7c3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9IiAvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KLQkgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIC8+CisgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAvPgogCi0JIDwvYW50Y2FsbD4KKyAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgIDx0YXJnZXQgbmFtZT0icGFja2FnZS1lYXIiPgpAQCAtMTM0LDE0ICsxMzQsMTQgQEAKICAgICAgICAgPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS9kZXNjcmlwdG9yL2luZGV4Lmh0bWwiIHRvZGlyPSIke2Jhc2VkaXJ9L2RvY3Jvb3QiIC8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vZWpiL1Byb2R1Y3RFSkJfSkRPU3RhdGUubWFwcGluZyIgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2oyZWVndWlkZS9wcm9kdWN0IiAvPgogCi0JPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVqYi1qYXIiIC8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLXdlYmNsaWVudC13YXIiIC8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWFwcGNsaWVudCIgLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWFyIiAvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamItamFyIiAvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS13ZWJjbGllbnQtd2FyIiAvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnQiIC8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVhciIgLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9qMmVlZ3VpZGVfcHJvZHVjdF9kZXJieS5zcWwiLz4KQEAgLTE2MCwxOCArMTYwLDE4IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9IiR7YmFzZWRpcn0vLi4vY29tbW9uL2RlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfajJlZWd1aWRlX3Byb2R1Y3RfZGVyYnkuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogCiAKQEAgLTE4MCwxMiArMTgwLDEyIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kZWxldGVfdGFibGVzLnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAtLT4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGFsbAogICAgICAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvajJlZWd1aWRlX3Byb2R1Y3QvY2xpZW50L1Byb2R1Y3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9qMmVlZ3VpZGVfcHJvZHVjdC9jbGllbnQvUHJvZHVjdENsaWVudC5qYXZhCmluZGV4IGE5ZTY2NzkuLjViNjk4MDAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9qMmVlZ3VpZGVfcHJvZHVjdC9jbGllbnQvUHJvZHVjdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9qMmVlZ3VpZGVfcHJvZHVjdC9jbGllbnQvUHJvZHVjdENsaWVudC5qYXZhCkBAIC0zNSwxMCArMzUsMTAgQEAKICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeVByb2R1Y3QiKTsKIAotICAgICAgICAgICBQcm9kdWN0SG9tZSBob21lID0gCi0gICAgICAgICAgICAgICAoUHJvZHVjdEhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgIFByb2R1Y3RIb21lIGhvbWUgPQorICAgICAgICAgICAgICAgKFByb2R1Y3RIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RIb21lLmNsYXNzKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTVEFSVCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNUQVJUIik7CiAgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJqMmVlZ3VpZGVfcHJvZHVjdCIpOwogCiAgICAgICAgICAgIFByb2R1Y3QgZHVrZSA9IGhvbWUuY3JlYXRlKCIxMjMiLCAiQ2VyYW1pYyBEb2ciLCAxMC4wMCk7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgICAgICAgICAgIFByb2R1Y3QgcHJvZHVjdCA9IChQcm9kdWN0KWkubmV4dCgpOwogICAgICAgICAgICAgICBTdHJpbmcgcHJvZHVjdElkID0gKFN0cmluZylwcm9kdWN0LmdldFByaW1hcnlLZXkoKTsKICAgICAgICAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gcHJvZHVjdC5nZXREZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgICBkb3VibGUgcHJpY2UgPSBwcm9kdWN0LmdldFByaWNlKCk7IAorICAgICAgICAgICAgICBkb3VibGUgcHJpY2UgPSBwcm9kdWN0LmdldFByaWNlKCk7CiAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwcm9kdWN0SWQgKyAiOiAiICsgZGVzY3JpcHRpb24gKyAiICIgKyBwcmljZSk7CiAgICAgICAgICAgIH0KIApAQCAtNzEsNyArNzEsNyBAQAogICAgICAgICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgUHJvZHVjdCBwcm9kdWN0ID0gKFByb2R1Y3QpaS5uZXh0KCk7CiAgICAgICAgICAgICAgIFN0cmluZyBwcm9kdWN0SWQgPSAoU3RyaW5nKXByb2R1Y3QuZ2V0UHJpbWFyeUtleSgpOwotICAgICAgICAgICAgICBkb3VibGUgcHJpY2UgPSBwcm9kdWN0LmdldFByaWNlKCk7IAorICAgICAgICAgICAgICBkb3VibGUgcHJpY2UgPSBwcm9kdWN0LmdldFByaWNlKCk7CiAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwcm9kdWN0SWQgKyAiOiAiICsgcHJpY2UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGoyZWVndWlkZV9wcm9kdWN0Iiwgc3RhdC5QQVNTKTsKQEAgLTgzLDUgKzgzLDUgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgajJlZWd1aWRlX3Byb2R1Y3QiLCBzdGF0LkZBSUwpOwogICAgICAgIH0KICAgICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiajJlZWd1aWRlX3Byb2R1Y3QiKTsKLSAgIH0gCi19IAorICAgfQorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2oyZWVndWlkZV9wcm9kdWN0L2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2oyZWVndWlkZV9wcm9kdWN0L2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IGE0MzE4YmYuLjRlZjQyYWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9qMmVlZ3VpZGVfcHJvZHVjdC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvajJlZWd1aWRlX3Byb2R1Y3QvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTgxLDggKzgxLDggQEAKICAgICAgICAgPHBtLXZlcnNpb24+MS4wPC9wbS12ZXJzaW9uPgogICAgICAgPC9wbS1pbnVzZT4KICAgICA8L3BtLWRlc2NyaXB0b3JzPgotICAgIDxjbXAtcmVzb3VyY2U+IAotICAgICAgPGpuZGktbmFtZT5qZG8vcG1mPC9qbmRpLW5hbWU+IAorICAgIDxjbXAtcmVzb3VyY2U+CisgICAgICA8am5kaS1uYW1lPmpkby9wbWY8L2puZGktbmFtZT4KICAgICAgIDxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KICAgICAgICAgPG5hbWU+bXY8L25hbWU+CiAgICAgICAgIDxwYXNzd29yZD5tdjwvcGFzc3dvcmQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvajJlZWd1aWRlX3Byb2R1Y3QvZGVzY3JpcHRvci9zdW4tajJlZWd1aWRlX3Byb2R1Y3RFamIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2oyZWVndWlkZV9wcm9kdWN0L2Rlc2NyaXB0b3Ivc3VuLWoyZWVndWlkZV9wcm9kdWN0RWpiLnhtbAppbmRleCBkNmVkN2M2Li4zMTUwNWNlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvajJlZWd1aWRlX3Byb2R1Y3QvZGVzY3JpcHRvci9zdW4tajJlZWd1aWRlX3Byb2R1Y3RFamIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9qMmVlZ3VpZGVfcHJvZHVjdC9kZXNjcmlwdG9yL3N1bi1qMmVlZ3VpZGVfcHJvZHVjdEVqYi54bWwKQEAgLTgzLDggKzgzLDggQEAKICAgICAgICAgPHBtLXZlcnNpb24+MS4wPC9wbS12ZXJzaW9uPgogICAgICAgPC9wbS1pbnVzZT4KICAgICA8L3BtLWRlc2NyaXB0b3JzPgotICAgIDxjbXAtcmVzb3VyY2U+IAotICAgICAgPGpuZGktbmFtZT5qZG8vcG1mPC9qbmRpLW5hbWU+IAorICAgIDxjbXAtcmVzb3VyY2U+CisgICAgICA8am5kaS1uYW1lPmpkby9wbWY8L2puZGktbmFtZT4KICAgICAgIDxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KICAgICAgICAgPG5hbWU+bXY8L25hbWU+CiAgICAgICAgIDxwYXNzd29yZD5tdjwvcGFzc3dvcmQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvajJlZWd1aWRlX3Byb2R1Y3QvZWpiL1Byb2R1Y3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9qMmVlZ3VpZGVfcHJvZHVjdC9lamIvUHJvZHVjdC5qYXZhCmluZGV4IDFhMzFkMGUuLjU0NzFiZDQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9qMmVlZ3VpZGVfcHJvZHVjdC9lamIvUHJvZHVjdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9qMmVlZ3VpZGVfcHJvZHVjdC9lamIvUHJvZHVjdC5qYXZhCkBAIC0yMCwxMCArMjAsMTAgQEAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIHB1YmxpYyBpbnRlcmZhY2UgUHJvZHVjdCBleHRlbmRzIEVKQk9iamVjdCB7Ci0gCisKICAgIHB1YmxpYyB2b2lkIHNldFByaWNlKGRvdWJsZSBwcmljZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgcHVibGljIGRvdWJsZSBnZXRQcmljZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb247ICAKKyAgIHB1YmxpYyBkb3VibGUgZ2V0UHJpY2UoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9qMmVlZ3VpZGVfcHJvZHVjdC9lamIvUHJvZHVjdEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2oyZWVndWlkZV9wcm9kdWN0L2VqYi9Qcm9kdWN0RUpCLmphdmEKaW5kZXggMzk1ODQ0MS4uNzgyMmRkOCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2oyZWVndWlkZV9wcm9kdWN0L2VqYi9Qcm9kdWN0RUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2oyZWVndWlkZV9wcm9kdWN0L2VqYi9Qcm9kdWN0RUpCLmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKICAgIH0KIAotICAgcHVibGljIFN0cmluZyBlamJDcmVhdGUoU3RyaW5nIHByb2R1Y3RJZCwgU3RyaW5nIGRlc2NyaXB0aW9uLCAKKyAgIHB1YmxpYyBTdHJpbmcgZWpiQ3JlYXRlKFN0cmluZyBwcm9kdWN0SWQsIFN0cmluZyBkZXNjcmlwdGlvbiwKICAgICAgIGRvdWJsZSBwcmljZSkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAKICAgICAgIGlmIChwcm9kdWN0SWQgPT0gbnVsbCkgewpAQCAtNjEsNyArNjEsNyBAQAogICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsKICAgIH0KIAotICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7IAorICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7CiAKICAgICAgIHByb2R1Y3RJZCA9IChTdHJpbmcpY29udGV4dC5nZXRQcmltYXJ5S2V5KCk7CiAgICB9CkBAIC03Niw3ICs3Niw3IEBACiAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgeyB9CiAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsgfQogICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgeyB9Ci0gICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKFN0cmluZyBwcm9kdWN0SWQsIFN0cmluZyBkZXNjcmlwdGlvbiwgCisgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKFN0cmluZyBwcm9kdWN0SWQsIFN0cmluZyBkZXNjcmlwdGlvbiwKICAgICAgIGRvdWJsZSBiYWxhbmNlKSB7IH0KIAotfSAvLyBQcm9kdWN0RUpCIAorfSAvLyBQcm9kdWN0RUpCCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvajJlZWd1aWRlX3Byb2R1Y3QvZWpiL1Byb2R1Y3RIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvajJlZWd1aWRlX3Byb2R1Y3QvZWpiL1Byb2R1Y3RIb21lLmphdmEKaW5kZXggMjMxMDQ4OS4uZjcyYjdkYyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2oyZWVndWlkZV9wcm9kdWN0L2VqYi9Qcm9kdWN0SG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9qMmVlZ3VpZGVfcHJvZHVjdC9lamIvUHJvZHVjdEhvbWUuamF2YQpAQCAtMjIsMTIgKzIyLDEyIEBACiAKIHB1YmxpYyBpbnRlcmZhY2UgUHJvZHVjdEhvbWUgZXh0ZW5kcyBFSkJIb21lIHsKIAotICAgIHB1YmxpYyBQcm9kdWN0IGNyZWF0ZShTdHJpbmcgcHJvZHVjdElkLCBTdHJpbmcgZGVzY3JpcHRpb24sIAorICAgIHB1YmxpYyBQcm9kdWN0IGNyZWF0ZShTdHJpbmcgcHJvZHVjdElkLCBTdHJpbmcgZGVzY3JpcHRpb24sCiAgICAgICAgIGRvdWJsZSBiYWxhbmNlKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBDcmVhdGVFeGNlcHRpb247Ci0gICAgCi0gICAgcHVibGljIFByb2R1Y3QgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgcHJvZHVjdElkKSAKKworICAgIHB1YmxpYyBQcm9kdWN0IGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHByb2R1Y3RJZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5RGVzY3JpcHRpb24oU3RyaW5nIGRlc2NyaXB0aW9uKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9qMmVlZ3VpZGVfcHJvZHVjdC9zZXJ2bGV0L1Byb2R1Y3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvajJlZWd1aWRlX3Byb2R1Y3Qvc2VydmxldC9Qcm9kdWN0U2VydmxldC5qYXZhCmluZGV4IGM3NTg0MzUuLmZkNWQxZDMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9qMmVlZ3VpZGVfcHJvZHVjdC9zZXJ2bGV0L1Byb2R1Y3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL2oyZWVndWlkZV9wcm9kdWN0L3NlcnZsZXQvUHJvZHVjdFNlcnZsZXQuamF2YQpAQCAtNDAsMTUgKzQwLDE1IEBACiAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAKICAgICAgICB0cnkgewotCQkJCQkKLQkgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCi0JICAgU3lzdGVtLm91dC5wcmludGxuKCJsb29raW5nIHVwIGphdmE6Y29tcC9lbnYvZWpiL015UHJvZHVjdCIpOworICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisKKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxvb2tpbmcgdXAgamF2YTpjb21wL2Vudi9lamIvTXlQcm9kdWN0Iik7CiAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL015UHJvZHVjdCIpOwogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxvb2t1cCBvayIpOwogCi0gICAgICAgICAgIFByb2R1Y3RIb21lIGhvbWUgPSAKLSAgICAgICAgICAgICAgIChQcm9kdWN0SG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgUHJvZHVjdEhvbWUgaG9tZSA9CisgICAgICAgICAgICAgICAoUHJvZHVjdEhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdEhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgIFByb2R1Y3QgZHVrZSA9IGhvbWUuY3JlYXRlKCIxMjMiLCAiQ2VyYW1pYyBEb2ciLCAxMC4wMCk7CkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgICAgICAgIFByb2R1Y3QgcHJvZHVjdCA9IChQcm9kdWN0KWkubmV4dCgpOwogICAgICAgICAgICAgICBTdHJpbmcgcHJvZHVjdElkID0gKFN0cmluZylwcm9kdWN0LmdldFByaW1hcnlLZXkoKTsKICAgICAgICAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gcHJvZHVjdC5nZXREZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgICBkb3VibGUgcHJpY2UgPSBwcm9kdWN0LmdldFByaWNlKCk7IAorICAgICAgICAgICAgICBkb3VibGUgcHJpY2UgPSBwcm9kdWN0LmdldFByaWNlKCk7CiAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8QlI+IiArIHByb2R1Y3RJZCArICI6ICIgKyBkZXNjcmlwdGlvbiArICIgIiArIHByaWNlKTsKICAgICAgICAgICAgfQogCkBAIC04MSw3ICs4MSw3IEBACiAgICAgICAgICAgIHdoaWxlIChpLmhhc05leHQoKSkgewogICAgICAgICAgICAgICBQcm9kdWN0IHByb2R1Y3QgPSAoUHJvZHVjdClpLm5leHQoKTsKICAgICAgICAgICAgICAgU3RyaW5nIHByb2R1Y3RJZCA9IChTdHJpbmcpcHJvZHVjdC5nZXRQcmltYXJ5S2V5KCk7Ci0gICAgICAgICAgICAgIGRvdWJsZSBwcmljZSA9IHByb2R1Y3QuZ2V0UHJpY2UoKTsgCisgICAgICAgICAgICAgIGRvdWJsZSBwcmljZSA9IHByb2R1Y3QuZ2V0UHJpY2UoKTsKICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxCUj4iICsgcHJvZHVjdElkICsgIjogIiArIHByaWNlKTsKICAgICAgICAgICAgfQogCkBAIC05NCw0ICs5NCw0IEBACiAgICAgICBvdXQucHJpbnRsbigiPC9odG1sPiIpOwogICAgfQogCi19IAorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvb3JkZXJhcHAvYnVpbGQucHJvcGVydGllcwppbmRleCA5OWRjODA1Li5lYzg1ZDY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvb3JkZXJhcHAvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvb3JkZXJhcHAvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJPcmRlckFwcCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIApAQCAtMzIsMTAgKzMyLDEwIEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXItZGF0YXJlZ2lzdHJ5LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXItZGF0YXJlZ2lzdHJ5LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1jbXAtbWFwcGluZ3MueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tY21wLW1hcHBpbmdzLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1jbXAtbWFwcGluZ3MtZGF0YXJlZ2lzdHJ5LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWNtcC1tYXBwaW5ncy1kYXRhcmVnaXN0cnkueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvb3JkZXJhcHAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL2J1aWxkLnhtbAppbmRleCBkOWEzYTZhLi5jZWRhMGJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvb3JkZXJhcHAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9vcmRlcmFwcC9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgIDxkZWxldGUgZmlsZT0iJHtzdW4tY21wLW1hcHBpbmdzLnhtbH0iLz4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTksMTEgKzU5LDExIEBACiAKICAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLXJlcXVlc3QtamFyIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSIke2VqYi1qYXItcmVxdWVzdC54bWx9Ii8+Ci0JPHBhcmFtIG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9IiR7c3VuLWVqYi1qYXItcmVxdWVzdC54bWx9Ii8+Ci0JPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CisgICAgPHBhcmFtIG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iJHtlamItamFyLXJlcXVlc3QueG1sfSIvPgorICAgIDxwYXJhbSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSIke3N1bi1lamItamFyLXJlcXVlc3QueG1sfSIvPgorICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi8qKi8qUmVxdWVzdCouY2xhc3MiIC8+Ci0JPHBhcmFtIG5hbWU9ImVqYi5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vZWpiLWphci1pYy5qYXIiLz4KKyAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS9lamItamFyLWljLmphciIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSIke3N1bi1lamItamFyLWRhdGFyZWdpc3RyeS54bWx9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzdW4tY21wLW1hcHBpbmdzLnhtbCIgdmFsdWU9IiR7c3VuLWNtcC1tYXBwaW5ncy1kYXRhcmVnaXN0cnkueG1sfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLQk8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi9kYXRhcmVnaXN0cnkvKi5jbGFzcyIgLz4KKyAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi9kYXRhcmVnaXN0cnkvKi5jbGFzcyIgLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vZWpiLWphci1pYzEuamFyIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CkBAIC04MSwxNyArODEsMTcgQEAKICAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLWFwcGNsaWVudC1qYXIiID4KICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogCi0JIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgotCSAgICAgIHZhbHVlPSJjbGllbnQvQ2xpZW50LmNsYXNzLCByZXF1ZXN0L1JlcXVlc3RIb21lLmNsYXNzLCByZXF1ZXN0L1JlcXVlc3QuY2xhc3MsIHJlcXVlc3QvUGFydFJlcXVlc3QuY2xhc3MsIHJlcXVlc3QvT3JkZXIuY2xhc3MsIHJlcXVlc3QvT3JkZXJIb21lLmNsYXNzLCByZXF1ZXN0LyouY2xhc3MiIC8+Ci0JICAgIDxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIgotCSAgICAgICAgdmFsdWU9IiR7YXBwbGljYXRpb24tY2xpZW50LnhtbH0iIC8+Ci0JICAgIDxwYXJhbSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIKLQkgICAgICAgIHZhbHVlPSIke3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgLz4KLQkgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KLQkgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIC8+CisgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgorICAgICAgICAgIHZhbHVlPSJjbGllbnQvQ2xpZW50LmNsYXNzLCByZXF1ZXN0L1JlcXVlc3RIb21lLmNsYXNzLCByZXF1ZXN0L1JlcXVlc3QuY2xhc3MsIHJlcXVlc3QvUGFydFJlcXVlc3QuY2xhc3MsIHJlcXVlc3QvT3JkZXIuY2xhc3MsIHJlcXVlc3QvT3JkZXJIb21lLmNsYXNzLCByZXF1ZXN0LyouY2xhc3MiIC8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIgorICAgICAgICAgICAgdmFsdWU9IiR7YXBwbGljYXRpb24tY2xpZW50LnhtbH0iIC8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIKKyAgICAgICAgICAgIHZhbHVlPSIke3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KKyAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIC8+CiAKLQkgPC9hbnRjYWxsPgorICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKIApAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiCWZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAKICAgICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIiBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+CiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KQEAgLTExMCwxNSArMTEwLDE1IEBACiAKICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0vbGliIiBpbmNsdWRlcz0icmVwb3J0ZXIuamFyIi8+CiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotCTxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLQk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CiAgICAgPC9maWxlc2V0PgogCiAgICAgICA8L2Vhcj4KICAgICA8L3RhcmdldD4KIAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL29yZGVyYXBwX2RlcmJ5LnNxbCIvPgpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIgPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGVwbG95ZWQuYXBwIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAgICAKKwogICAgIDwvdGFyZ2V0PgogCiAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTE0MCwxMiArMTQwLDEyIEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9IiR7YmFzZWRpcn0vLi4vY29tbW9uL2RlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiI+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXBsb3llZGFwcC5uYW1lIiB2YWx1ZT0iT3JkZXJBcHAiLz4KQEAgLTE1MywxMiArMTUzLDEyIEBACiAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9vcmRlcmFwcF9kZXJieS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMSIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JPGNvcHkgIGZpbGU9IiR7c3VuLWVqYi1qYXItSjJEQi54bWx9IiB0b2ZpbGU9IiR7c3VuLWVqYi1qYXIueG1sfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0JPGRlbGV0ZSAgZmlsZT0iJHtzdW4tY21wLW1hcHBpbmdzLnhtbH0iIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgIDxjb3B5ICBmaWxlPSIke3N1bi1lamItamFyLUoyREIueG1sfSIgdG9maWxlPSIke3N1bi1lamItamFyLnhtbH0iIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgIDxkZWxldGUgIGZpbGU9IiR7c3VuLWNtcC1tYXBwaW5ncy54bWx9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypCbG9iKi5jbGFzcyIgLz4KQEAgLTE3MSwxNiArMTcxLDE2IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kxIgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJleHRyYS1wYXJhbXMiCisgICAgPHBhcmFtIG5hbWU9ImV4dHJhLXBhcmFtcyIKICAgICAgICAgICAgICAgdmFsdWU9Ii0tdW5pcXVldGFibGVuYW1lcz10cnVlIC0tY3JlYXRldGFibGVzPXRydWUiLz4KLQk8L2FudGNhbGw+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4xIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+Ci0JCTxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIgogICAgICAgICAgICAgICB2YWx1ZT0iSmF2YTJEQlRlc3QiLz4KLQk8L2FudGNhbGw+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveTEiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTE4OSw3ICsxODksNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgYWxsCiAgICAgICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9vcmRlcmFwcC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvb3JkZXJhcHAvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGZmYzQwOGUuLmUxZWYyNDcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9vcmRlcmFwcC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICB0cnkgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJPcmRlckFwcCIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJPcmRlckFwcCIpOwogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvUmVxdWVzdCIpOwpAQCAtNDksMTIgKzQ5LDEyIEBACiAKICAgICAgICAgICAgIGNyZWF0ZURhdGEocmVxdWVzdCk7CiAgICAgICAgICAgICBwcmludERhdGEocmVxdWVzdCk7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgT3JkZXJBcHAiLCBzdGF0LlBBU1MpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IE9yZGVyQXBwIiwgc3RhdC5QQVNTKTsKIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIGV4Y2VwdGlvbjoiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IE9yZGVyQXBwIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBPcmRlckFwcCIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJPcmRlckFwcCIpOwogICAgIH0KQEAgLTExNiwxMCArMTE2LDEwIEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gZXhjZXB0aW9uOiIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgT3JkZXJBcHAiLCBzdGF0LkZBSUwpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IE9yZGVyQXBwIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIE1lc3NhZ2VGb3JtYXQgbWYgPSBuZXcgTWVzc2FnZUZvcm1hdCgiOiB7MCwgbnVtYmVyLCAkIywjIzAuIyN9Iik7CiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHByaW50RGF0YShSZXF1ZXN0IHJlcXVlc3QpIHsKQEAgLTEzMyw3ICsxMzMsNyBAQAogICAgICAgICAgICAgICAgICAgICArIG1mLmZvcm1hdChuZXcgT2JqZWN0W10ge25ldyBEb3VibGUocHJpY2UpfSkpOwogCiAgICAgICAgICAgICBwcmludENvc3RPZk9yZGVycyhyZXF1ZXN0KTsKLSAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbkFkZGluZyA1JSBkaXNjb3VudCIpOwogICAgICAgICAgICAgcmVxdWVzdC5hZGp1c3RPcmRlckRpc2NvdW50KDUpOwogICAgICAgICAgICAgcHJpbnRDb3N0T2ZPcmRlcnMocmVxdWVzdCk7CkBAIC0xNDYsNyArMTQ2LDcgQEAKICAgICAgICAgICAgIGlmIChwcmljZTAgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5ObyBwYXJ0cyBmb3VuZCIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuQXZlcmFnZSBwcmljZSBvZiBhbGwgcGFydHMiIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5BdmVyYWdlIHByaWNlIG9mIGFsbCBwYXJ0cyIKICAgICAgICAgICAgICAgICAgICAgICAgICsgbWYuZm9ybWF0KG5ldyBPYmplY3RbXSB7cHJpY2UwfSkpOwogICAgICAgICAgICAgfQogCkBAIC0xNTYsOCArMTU2LDggQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuTm8gcGFydHMgZm91bmQgZm9yIFZlbmRvciAiCiAgICAgICAgICAgICAgICAgICAgICAgICArIHZlbmRvclJlcXVlc3QudmVuZG9ySWQpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuVG90YWwgcHJpY2Ugb2YgcGFydHMgZm9yIFZlbmRvciAiIAotICAgICAgICAgICAgICAgICAgICAgICAgKyB2ZW5kb3JSZXF1ZXN0LnZlbmRvcklkICsgIiIgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblRvdGFsIHByaWNlIG9mIHBhcnRzIGZvciBWZW5kb3IgIgorICAgICAgICAgICAgICAgICAgICAgICAgKyB2ZW5kb3JSZXF1ZXN0LnZlbmRvcklkICsgIiIKICAgICAgICAgICAgICAgICAgICAgICAgICsgbWYuZm9ybWF0KG5ldyBPYmplY3RbXSB7cHJpY2UwfSkpOwogICAgICAgICAgICAgfQogCkBAIC0xODcsMTkgKzE4NywxOSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcmludENvc3RPZk9yZGVycyhSZXF1ZXN0IHJlcXVlc3QpIAorICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRDb3N0T2ZPcmRlcnMoUmVxdWVzdCByZXF1ZXN0KQogICAgICAgICAgICAgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiB7CiAKICAgICAgICAgSW50ZWdlciBvcmRlcklkID0gbmV3IEludGVnZXIoMTExMSk7CiAgICAgICAgIGRvdWJsZSBwcmljZSA9IHJlcXVlc3QuZ2V0T3JkZXJQcmljZShvcmRlcklkKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3N0IG9mIE9yZGVyICIgKyBvcmRlcklkIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvc3Qgb2YgT3JkZXIgIiArIG9yZGVySWQKICAgICAgICAgICAgICAgICArIG1mLmZvcm1hdChuZXcgT2JqZWN0W10ge25ldyBEb3VibGUocHJpY2UpfSkpOwogCiAgICAgICAgIG9yZGVySWQgPSBuZXcgSW50ZWdlcig0MzEyKTsKICAgICAgICAgcHJpY2UgPSByZXF1ZXN0LmdldE9yZGVyUHJpY2Uob3JkZXJJZCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29zdCBvZiBPcmRlciAiICsgb3JkZXJJZCAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3N0IG9mIE9yZGVyICIgKyBvcmRlcklkCiAgICAgICAgICAgICAgICAgKyBtZi5mb3JtYXQobmV3IE9iamVjdFtdIHtuZXcgRG91YmxlKHByaWNlKX0pKTsKIAogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL2VqYi9kYXRhcmVnaXN0cnkvTG9jYWxWZW5kb3JQYXJ0SG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL2VqYi9kYXRhcmVnaXN0cnkvTG9jYWxWZW5kb3JQYXJ0SG9tZS5qYXZhCmluZGV4IGIzNjQwZGEuLmVlNmEyNDMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9vcmRlcmFwcC9lamIvZGF0YXJlZ2lzdHJ5L0xvY2FsVmVuZG9yUGFydEhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvb3JkZXJhcHAvZWpiL2RhdGFyZWdpc3RyeS9Mb2NhbFZlbmRvclBhcnRIb21lLmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIAogCiBwdWJsaWMgaW50ZXJmYWNlIExvY2FsVmVuZG9yUGFydEhvbWUgZXh0ZW5kcyBFSkJMb2NhbEhvbWUgewotIAorCiAgICAgcHVibGljIExvY2FsVmVuZG9yUGFydCBmaW5kQnlQcmltYXJ5S2V5KE9iamVjdCBhS2V5KQogICAgICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL2VqYi9yZXF1ZXN0L1JlcXVlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9vcmRlcmFwcC9lamIvcmVxdWVzdC9SZXF1ZXN0LmphdmEKaW5kZXggMGJhMTMxYy4uMGVjOTlkMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL2VqYi9yZXF1ZXN0L1JlcXVlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvb3JkZXJhcHAvZWpiL3JlcXVlc3QvUmVxdWVzdC5qYXZhCkBAIC0zOSwxMyArMzksMTMgQEAKICAgICBwdWJsaWMgZG91YmxlIGdldEJpbGxPZk1hdGVyaWFsUHJpY2UoQm9tUmVxdWVzdCBib21SZXF1ZXN0KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIERvdWJsZSBnZXRBdmdQcmljZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgRG91YmxlIGdldFRvdGFsUHJpY2VQZXJWZW5kb3IoVmVuZG9yUmVxdWVzdCB2ZW5kb3JSZXF1ZXN0KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIGRvdWJsZSBnZXRPcmRlclByaWNlKEludGVnZXIgb3JkZXJJZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFkanVzdE9yZGVyRGlzY291bnQoaW50IGFkanVzdG1lbnQpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBsb2NhdGVWZW5kb3JzQnlQYXJ0aWFsTmFtZShTdHJpbmcgbmFtZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBTdHJpbmcgcmVwb3J0VmVuZG9yc0J5T3JkZXIoSW50ZWdlciBvcmRlcklkKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL2VqYi9yZXF1ZXN0L1JlcXVlc3RCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvb3JkZXJhcHAvZWpiL3JlcXVlc3QvUmVxdWVzdEJlYW4uamF2YQppbmRleCBhZWJkNmU2Li5jNDA5NWE3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvb3JkZXJhcHAvZWpiL3JlcXVlc3QvUmVxdWVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvb3JkZXJhcHAvZWpiL3JlcXVlc3QvUmVxdWVzdEJlYW4uamF2YQpAQCAtMjksNTAgKzI5LDUwIEBACiBwdWJsaWMgY2xhc3MgUmVxdWVzdEJlYW4gaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7CiAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwcml2YXRlIExvY2FsTGluZUl0ZW1Ib21lIGxpbmVJdGVtSG9tZSA9IG51bGw7Ci0gICAgCisKICAgICBwcml2YXRlIExvY2FsT3JkZXJIb21lIG9yZGVySG9tZSA9IG51bGw7Ci0gICAgCisKICAgICBwcml2YXRlIExvY2FsUGFydEhvbWUgcGFydEhvbWUgPSBudWxsOwotICAgIAorCiAgICAgcHJpdmF0ZSBMb2NhbFZlbmRvckhvbWUgdmVuZG9ySG9tZSA9IG51bGw7Ci0gICAgCisKICAgICBwcml2YXRlIExvY2FsVmVuZG9yUGFydEhvbWUgdmVuZG9yUGFydEhvbWUgPSBudWxsOwotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIFNlc3Npb25CZWFuI3NldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0KQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IGFDb250ZXh0KSB7CiAgICAgICAgIGNvbnRleHQ9YUNvbnRleHQ7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIFNlc3Npb25CZWFuI2VqYkFjdGl2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgU2Vzc2lvbkJlYW4jZWpiUGFzc2l2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIFNlc3Npb25CZWFuI2VqYlJlbW92ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogU2VlIHNlY3Rpb24gNy4xMC4zIG9mIHRoZSBFSkIgMi4wIHNwZWNpZmljYXRpb24KICAgICAgKi8KQEAgLTg3LDU2ICs4Nyw1NiBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0KFBhcnRSZXF1ZXN0IHBhcnRSZXF1ZXN0KSB7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBMb2NhbFBhcnQgcGFydCA9IHBhcnRIb21lLmNyZWF0ZShwYXJ0UmVxdWVzdC5wYXJ0TnVtYmVyLCAKKyAgICAgICAgICAgIExvY2FsUGFydCBwYXJ0ID0gcGFydEhvbWUuY3JlYXRlKHBhcnRSZXF1ZXN0LnBhcnROdW1iZXIsCiAgICAgICAgICAgICAgICAgICAgIHBhcnRSZXF1ZXN0LnJldmlzaW9uLCBwYXJ0UmVxdWVzdC5kZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgcGFydFJlcXVlc3QucmV2aXNpb25EYXRlLCBwYXJ0UmVxdWVzdC5zcGVjaWZpY2F0aW9uLCAKKyAgICAgICAgICAgICAgICAgICAgcGFydFJlcXVlc3QucmV2aXNpb25EYXRlLCBwYXJ0UmVxdWVzdC5zcGVjaWZpY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICBwYXJ0UmVxdWVzdC5kcmF3aW5nKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWRkUGFydFRvQmlsbE9mTWF0ZXJpYWwoQm9tUmVxdWVzdCBib21SZXF1ZXN0KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBQYXJ0S2V5IGJvbWtleSA9IG5ldyBQYXJ0S2V5KCk7CiAgICAgICAgICAgICBib21rZXkucGFydE51bWJlciA9IGJvbVJlcXVlc3QuYm9tUGFydE51bWJlcjsKICAgICAgICAgICAgIGJvbWtleS5yZXZpc2lvbiA9IGJvbVJlcXVlc3QuYm9tUmV2aXNpb247Ci0gICAgCisKICAgICAgICAgICAgIExvY2FsUGFydCBib20gPSBwYXJ0SG9tZS5maW5kQnlQcmltYXJ5S2V5KGJvbWtleSk7Ci0gICAgCisKICAgICAgICAgICAgIFBhcnRLZXkgcGtleSA9IG5ldyBQYXJ0S2V5KCk7CiAgICAgICAgICAgICBwa2V5LnBhcnROdW1iZXIgPSBib21SZXF1ZXN0LnBhcnROdW1iZXI7CiAgICAgICAgICAgICBwa2V5LnJldmlzaW9uID0gYm9tUmVxdWVzdC5yZXZpc2lvbjsKLSAgICAKKwogICAgICAgICAgICAgTG9jYWxQYXJ0IHBhcnQgPSBwYXJ0SG9tZS5maW5kQnlQcmltYXJ5S2V5KHBrZXkpOwogICAgICAgICAgICAgcGFydC5zZXRCb21QYXJ0KGJvbSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVZlbmRvcihWZW5kb3JSZXF1ZXN0IHZlbmRvclJlcXVlc3QpIHsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIExvY2FsVmVuZG9yIHZlbmRvciA9IHZlbmRvckhvbWUuY3JlYXRlKHZlbmRvclJlcXVlc3QudmVuZG9ySWQsIAotICAgICAgICAgICAgICAgICAgICB2ZW5kb3JSZXF1ZXN0Lm5hbWUsIHZlbmRvclJlcXVlc3QuYWRkcmVzcywgCisgICAgICAgICAgICBMb2NhbFZlbmRvciB2ZW5kb3IgPSB2ZW5kb3JIb21lLmNyZWF0ZSh2ZW5kb3JSZXF1ZXN0LnZlbmRvcklkLAorICAgICAgICAgICAgICAgICAgICB2ZW5kb3JSZXF1ZXN0Lm5hbWUsIHZlbmRvclJlcXVlc3QuYWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgdmVuZG9yUmVxdWVzdC5jb250YWN0LCB2ZW5kb3JSZXF1ZXN0LnBob25lKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgY3JlYXRlVmVuZG9yUGFydChWZW5kb3JQYXJ0UmVxdWVzdCB2ZW5kb3JQYXJ0UmVxdWVzdCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgUGFydEtleSBwa2V5ID0gbmV3IFBhcnRLZXkoKTsKICAgICAgICAgICAgIHBrZXkucGFydE51bWJlciA9IHZlbmRvclBhcnRSZXF1ZXN0LnBhcnROdW1iZXI7CiAgICAgICAgICAgICBwa2V5LnJldmlzaW9uID0gdmVuZG9yUGFydFJlcXVlc3QucmV2aXNpb247Ci0gICAgCisKICAgICAgICAgICAgIExvY2FsUGFydCBwYXJ0ID0gcGFydEhvbWUuZmluZEJ5UHJpbWFyeUtleShwa2V5KTsKICAgICAgICAgICAgIExvY2FsVmVuZG9yUGFydCB2ZW5kb3JQYXJ0ID0gdmVuZG9yUGFydEhvbWUuY3JlYXRlKAotICAgICAgICAgICAgICAgICAgICB2ZW5kb3JQYXJ0UmVxdWVzdC5kZXNjcmlwdGlvbiwgdmVuZG9yUGFydFJlcXVlc3QucHJpY2UsIAorICAgICAgICAgICAgICAgICAgICB2ZW5kb3JQYXJ0UmVxdWVzdC5kZXNjcmlwdGlvbiwgdmVuZG9yUGFydFJlcXVlc3QucHJpY2UsCiAgICAgICAgICAgICAgICAgICAgIHBhcnQpOwogCiAgICAgICAgICAgICBWZW5kb3JLZXkgdmtleSA9IG5ldyBWZW5kb3JLZXkoKTsKQEAgLTE1MiwyNCArMTUyLDI0IEBACiAKICAgICBwdWJsaWMgdm9pZCBjcmVhdGVPcmRlcihPcmRlclJlcXVlc3Qgb3JkZXJSZXF1ZXN0KSB7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBMb2NhbE9yZGVyIG9yZGVyID0gb3JkZXJIb21lLmNyZWF0ZShvcmRlclJlcXVlc3Qub3JkZXJJZCwgCi0gICAgICAgICAgICAgICAgICAgIG9yZGVyUmVxdWVzdC5zdGF0dXMsIG9yZGVyUmVxdWVzdC5kaXNjb3VudCwgCisgICAgICAgICAgICBMb2NhbE9yZGVyIG9yZGVyID0gb3JkZXJIb21lLmNyZWF0ZShvcmRlclJlcXVlc3Qub3JkZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgb3JkZXJSZXF1ZXN0LnN0YXR1cywgb3JkZXJSZXF1ZXN0LmRpc2NvdW50LAogICAgICAgICAgICAgICAgICAgICBvcmRlclJlcXVlc3Quc2hpcG1lbnRJbmZvKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgYWRkTGluZUl0ZW0oTGluZUl0ZW1SZXF1ZXN0IGxpbmVJdGVtUmVxdWVzdCkgeyAKKyAgICBwdWJsaWMgdm9pZCBhZGRMaW5lSXRlbShMaW5lSXRlbVJlcXVlc3QgbGluZUl0ZW1SZXF1ZXN0KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBMb2NhbE9yZGVyIG9yZGVyID0gb3JkZXJIb21lLmZpbmRCeVByaW1hcnlLZXkobGluZUl0ZW1SZXF1ZXN0Lm9yZGVySWQpOwotICAgIAorCiAgICAgICAgICAgICBQYXJ0S2V5IHBrZXkgPSBuZXcgUGFydEtleSgpOwogICAgICAgICAgICAgcGtleS5wYXJ0TnVtYmVyID0gbGluZUl0ZW1SZXF1ZXN0LnBhcnROdW1iZXI7CiAgICAgICAgICAgICBwa2V5LnJldmlzaW9uID0gbGluZUl0ZW1SZXF1ZXN0LnJldmlzaW9uOwotICAgIAorCiAgICAgICAgICAgICBMb2NhbFBhcnQgcGFydCA9IHBhcnRIb21lLmZpbmRCeVByaW1hcnlLZXkocGtleSk7Ci0gICAgCisKICAgICAgICAgICAgIExvY2FsTGluZUl0ZW0gbGluZUl0ZW0gPSBsaW5lSXRlbUhvbWUuY3JlYXRlKG9yZGVyLCBsaW5lSXRlbVJlcXVlc3QucXVhbnRpdHksCiAgICAgICAgICAgICAgICAgICAgIHBhcnQuZ2V0VmVuZG9yUGFydCgpKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKQEAgLTE4Myw3ICsxODMsNyBAQAogICAgICAgICAgICAgUGFydEtleSBib21rZXkgPSBuZXcgUGFydEtleSgpOwogICAgICAgICAgICAgYm9ta2V5LnBhcnROdW1iZXIgPSBib21SZXF1ZXN0LmJvbVBhcnROdW1iZXI7CiAgICAgICAgICAgICBib21rZXkucmV2aXNpb24gPSBib21SZXF1ZXN0LmJvbVJldmlzaW9uOwotICAgIAorCiAgICAgICAgICAgICBMb2NhbFBhcnQgYm9tID0gcGFydEhvbWUuZmluZEJ5UHJpbWFyeUtleShib21rZXkpOwogICAgICAgICAgICAgQ29sbGVjdGlvbiBwYXJ0cyA9IGJvbS5nZXRQYXJ0cygpOwogICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IHBhcnRzLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspIHsKQEAgLTE5MSw3ICsxOTEsNyBAQAogICAgICAgICAgICAgICAgIExvY2FsVmVuZG9yUGFydCB2ZW5kb3JQYXJ0ID0gcGFydC5nZXRWZW5kb3JQYXJ0KCk7CiAgICAgICAgICAgICAgICAgcHJpY2UgKz0gdmVuZG9yUGFydC5nZXRQcmljZSgpOwogICAgICAgICAgICAgfQotICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQpAQCAtMjA0LDcgKzIwNCw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBMb2NhbE9yZGVyIG9yZGVyID0gb3JkZXJIb21lLmZpbmRCeVByaW1hcnlLZXkob3JkZXJJZCk7CiAgICAgICAgICAgICBwcmljZSA9IG9yZGVyLmNhbGN1bGF0ZUFtbW91bnQoKTsKLSAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KQEAgLTIzMyw3ICsyMzMsNyBAQAogICAgICAgICAgICAgICAgIExvY2FsVmVuZG9yIHZlbmRvciA9IChMb2NhbFZlbmRvcilpdGVyYXRvci5uZXh0KCk7CiAgICAgICAgICAgICAgICAgbmFtZXMuYWRkKHZlbmRvci5nZXROYW1lKCkpOwogICAgICAgICAgICAgfQotICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEZpbmRlckV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIH0KIApAQCAtMjY5LDcgKzI2OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZCh2ZW5kb3IuZ2V0TmFtZSgpKS5hcHBlbmQoJyAnKQogICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQodmVuZG9yLmdldENvbnRhY3QoKSkuYXBwZW5kKCdcbicpOwogICAgICAgICAgICAgfQotICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEZpbmRlckV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL3NxbC9vcmRlcmFwcF9kYjIuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL3NxbC9vcmRlcmFwcF9kYjIuc3FsCmluZGV4IDY4NWEzOWMuLmJkMmNjNWYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9vcmRlcmFwcC9zcWwvb3JkZXJhcHBfZGIyLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvb3JkZXJhcHAvc3FsL29yZGVyYXBwX2RiMi5zcWwKQEAgLTgsNzMgKzgsNzMgQEAKIGNvbW1pdDsKIAogY3JlYXRlIHRhYmxlIFBBUlQgKAotCVBBUlRfTlVNQkVSCQlWQVJDSEFSKDE1KQlOT1QgTlVMTCwKLQlSRVZJU0lPTgkJTlVNRVJJQygyKSAgICAgIE5PVCBOVUxMLAotCURFU0NSSVBUSU9OCQlWQVJDSEFSKDI1NSksCi0JUkVWSVNJT05fREFURQkJVElNRVNUQU1QICAgICAgIE5PVCBOVUxMLAotCUJPTV9QQVJUX05VTUJFUiAgICAgICAgIFZBUkNIQVIoMTUpLAotCUJPTV9SRVZJU0lPTgkJTlVNRVJJQygyKSwKLQlQUklNQVJZIEtFWSAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKQorICAgIFBBUlRfTlVNQkVSICAgICAgICBWQVJDSEFSKDE1KSAgICBOT1QgTlVMTCwKKyAgICBSRVZJU0lPTiAgICAgICAgTlVNRVJJQygyKSAgICAgIE5PVCBOVUxMLAorICAgIERFU0NSSVBUSU9OICAgICAgICBWQVJDSEFSKDI1NSksCisgICAgUkVWSVNJT05fREFURSAgICAgICAgVElNRVNUQU1QICAgICAgIE5PVCBOVUxMLAorICAgIEJPTV9QQVJUX05VTUJFUiAgICAgICAgIFZBUkNIQVIoMTUpLAorICAgIEJPTV9SRVZJU0lPTiAgICAgICAgTlVNRVJJQygyKSwKKyAgICBQUklNQVJZIEtFWSAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKQogKTsKIAogYWx0ZXIgdGFibGUgUEFSVAotCWFkZCBDT05TVFJBSU5UIEZLXzEgRk9SRUlHTiBLRVkgKEJPTV9QQVJUX05VTUJFUiwgQk9NX1JFVklTSU9OKSAKKyAgICBhZGQgQ09OU1RSQUlOVCBGS18xIEZPUkVJR04gS0VZIChCT01fUEFSVF9OVU1CRVIsIEJPTV9SRVZJU0lPTikKICAgICAgICAgICAgICAgICBSRUZFUkVOQ0VTIFBBUlQgKFBBUlRfTlVNQkVSLCBSRVZJU0lPTik7CiAKIGNvbW1pdDsKIAogY3JlYXRlIHRhYmxlIFBBUlRfREVUQUlMICgKLQlQQVJUX05VTUJFUglWQVJDSEFSKDE1KQlOT1QgTlVMTCwKLQlSRVZJU0lPTglOVU1FUklDKDIpICAgICAgTk9UIE5VTEwsCi0JU1BFQ0lGSUNBVElPTglDTE9CKDEwSyksCi0JRFJBV0lORwkJQkxPQigxMEspLAotCVBSSU1BUlkgS0VZIChQQVJUX05VTUJFUiwgUkVWSVNJT04pCisgICAgUEFSVF9OVU1CRVIgICAgVkFSQ0hBUigxNSkgICAgTk9UIE5VTEwsCisgICAgUkVWSVNJT04gICAgTlVNRVJJQygyKSAgICAgIE5PVCBOVUxMLAorICAgIFNQRUNJRklDQVRJT04gICAgQ0xPQigxMEspLAorICAgIERSQVdJTkcgICAgICAgIEJMT0IoMTBLKSwKKyAgICBQUklNQVJZIEtFWSAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKQogKTsKIAogY29tbWl0OwogCiBjcmVhdGUgdGFibGUgVkVORE9SICgKLQlWRU5ET1JfSUQgICAgICAgSU5URUdFUiAgICAgICAgCU5PVCBOVUxMIFBSSU1BUlkgS0VZLAotCU5BTUUJCVZBUkNIQVIoMzApCU5PVCBOVUxMLAotCUFERFJFU1MJCVZBUkNIQVIoMjU1KQlOT1QgTlVMTCwKLQlDT05UQUNUCQlWQVJDSEFSKDI1NSkJTk9UIE5VTEwsCi0JUEhPTkUJCVZBUkNIQVIoMzApCU5PVCBOVUxMCisgICAgVkVORE9SX0lEICAgICAgIElOVEVHRVIgICAgICAgICAgICBOT1QgTlVMTCBQUklNQVJZIEtFWSwKKyAgICBOQU1FICAgICAgICBWQVJDSEFSKDMwKSAgICBOT1QgTlVMTCwKKyAgICBBRERSRVNTICAgICAgICBWQVJDSEFSKDI1NSkgICAgTk9UIE5VTEwsCisgICAgQ09OVEFDVCAgICAgICAgVkFSQ0hBUigyNTUpICAgIE5PVCBOVUxMLAorICAgIFBIT05FICAgICAgICBWQVJDSEFSKDMwKSAgICBOT1QgTlVMTAogKTsKIAogY29tbWl0OwogCiBjcmVhdGUgdGFibGUgVkVORE9SX1BBUlQgKAotCVZFTkRPUl9QQVJUX05VTUJFUglCSUdJTlQgICBOT1QgTlVMTCAgICAgICAgICAgICAgIFBSSU1BUlkgS0VZLAotCURFU0NSSVBUSU9OCQlWQVJDSEFSKDI1NSksCi0JUFJJQ0UJCQlET1VCTEUgUFJFQ0lTSU9OICAgICAgICBOT1QgTlVMTCwKLQlWRU5ET1JfSUQJCUlOVEVHRVIgICAgICAgICAgICAgICAgIE5PVCBOVUxMLAotCVBBUlRfTlVNQkVSCQlWQVJDSEFSKDE1KQkJTk9UIE5VTEwsCi0JUEFSVF9SRVZJU0lPTgkJTlVNRVJJQygyKSAgICAgICAgICAgICAgTk9UIE5VTEwsCi0JQ09OU1RSQUlOVCBGS18yIEZPUkVJR04gS0VZIChWRU5ET1JfSUQpIFJFRkVSRU5DRVMgVkVORE9SIChWRU5ET1JfSUQpLAotCUNPTlNUUkFJTlQgRktfMyBGT1JFSUdOIEtFWSAoUEFSVF9OVU1CRVIsIFBBUlRfUkVWSVNJT04pIFJFRkVSRU5DRVMgUEFSVCAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKSwKLQlVTklRVUUgKFBBUlRfTlVNQkVSLCBQQVJUX1JFVklTSU9OKQorICAgIFZFTkRPUl9QQVJUX05VTUJFUiAgICBCSUdJTlQgICBOT1QgTlVMTCAgICAgICAgICAgICAgIFBSSU1BUlkgS0VZLAorICAgIERFU0NSSVBUSU9OICAgICAgICBWQVJDSEFSKDI1NSksCisgICAgUFJJQ0UgICAgICAgICAgICBET1VCTEUgUFJFQ0lTSU9OICAgICAgICBOT1QgTlVMTCwKKyAgICBWRU5ET1JfSUQgICAgICAgIElOVEVHRVIgICAgICAgICAgICAgICAgIE5PVCBOVUxMLAorICAgIFBBUlRfTlVNQkVSICAgICAgICBWQVJDSEFSKDE1KSAgICAgICAgTk9UIE5VTEwsCisgICAgUEFSVF9SRVZJU0lPTiAgICAgICAgTlVNRVJJQygyKSAgICAgICAgICAgICAgTk9UIE5VTEwsCisgICAgQ09OU1RSQUlOVCBGS18yIEZPUkVJR04gS0VZIChWRU5ET1JfSUQpIFJFRkVSRU5DRVMgVkVORE9SIChWRU5ET1JfSUQpLAorICAgIENPTlNUUkFJTlQgRktfMyBGT1JFSUdOIEtFWSAoUEFSVF9OVU1CRVIsIFBBUlRfUkVWSVNJT04pIFJFRkVSRU5DRVMgUEFSVCAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKSwKKyAgICBVTklRVUUgKFBBUlRfTlVNQkVSLCBQQVJUX1JFVklTSU9OKQogKTsKIAogY29tbWl0OwogCiBjcmVhdGUgdGFibGUgT1JERVJTICgKLQlPUkRFUl9JRAlJTlRFR0VSICAgTk9UIE5VTEwgUFJJTUFSWSBLRVksCi0JU1RBVFVTCQlDSEFSKDEpCQlOT1QgTlVMTCwKLQlMQVNUX1VQREFURQlUSU1FU1RBTVAgICAgICAgTk9UIE5VTEwsCi0JRElTQ09VTlQJTlVNRVJJQygyKSAgICAgIE5PVCBOVUxMLAotCVNISVBNRU5UX0lORk8JVkFSQ0hBUigyNTUpCisgICAgT1JERVJfSUQgICAgSU5URUdFUiAgIE5PVCBOVUxMIFBSSU1BUlkgS0VZLAorICAgIFNUQVRVUyAgICAgICAgQ0hBUigxKSAgICAgICAgTk9UIE5VTEwsCisgICAgTEFTVF9VUERBVEUgICAgVElNRVNUQU1QICAgICAgIE5PVCBOVUxMLAorICAgIERJU0NPVU5UICAgIE5VTUVSSUMoMikgICAgICBOT1QgTlVMTCwKKyAgICBTSElQTUVOVF9JTkZPICAgIFZBUkNIQVIoMjU1KQogKTsKIAogY29tbWl0OwogCiBjcmVhdGUgdGFibGUgTElORUlURU0gKAotCU9SREVSX0lECQlJTlRFR0VSICAgICAgICAgTk9UIE5VTEwsCi0JSVRFTV9JRAkJCU5VTUVSSUMoMykgICAgICBOT1QgTlVMTCwKLQlRVUFOVElUWQkJTlVNRVJJQygzKSAgICAgIE5PVCBOVUxMLAotCVZFTkRPUl9QQVJUX05VTUJFUglCSUdJTlQgICAgICAgICAgTk9UIE5VTEwsCi0JQ09OU1RSQUlOVCBGS180IEZPUkVJR04gS0VZIChPUkRFUl9JRCkgUkVGRVJFTkNFUyBPUkRFUlMgKE9SREVSX0lEKSwKLQlDT05TVFJBSU5UIEZLXzUgRk9SRUlHTiBLRVkgKFZFTkRPUl9QQVJUX05VTUJFUikgUkVGRVJFTkNFUyBWRU5ET1JfUEFSVCAoVkVORE9SX1BBUlRfTlVNQkVSKSwKLQlQUklNQVJZIEtFWSAoT1JERVJfSUQsIElURU1fSUQpCisgICAgT1JERVJfSUQgICAgICAgIElOVEVHRVIgICAgICAgICBOT1QgTlVMTCwKKyAgICBJVEVNX0lEICAgICAgICAgICAgTlVNRVJJQygzKSAgICAgIE5PVCBOVUxMLAorICAgIFFVQU5USVRZICAgICAgICBOVU1FUklDKDMpICAgICAgTk9UIE5VTEwsCisgICAgVkVORE9SX1BBUlRfTlVNQkVSICAgIEJJR0lOVCAgICAgICAgICBOT1QgTlVMTCwKKyAgICBDT05TVFJBSU5UIEZLXzQgRk9SRUlHTiBLRVkgKE9SREVSX0lEKSBSRUZFUkVOQ0VTIE9SREVSUyAoT1JERVJfSUQpLAorICAgIENPTlNUUkFJTlQgRktfNSBGT1JFSUdOIEtFWSAoVkVORE9SX1BBUlRfTlVNQkVSKSBSRUZFUkVOQ0VTIFZFTkRPUl9QQVJUIChWRU5ET1JfUEFSVF9OVU1CRVIpLAorICAgIFBSSU1BUlkgS0VZIChPUkRFUl9JRCwgSVRFTV9JRCkKICk7CiAKIGNvbW1pdDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9vcmRlcmFwcC9zcWwvb3JkZXJhcHBfZGVyYnkuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL3NxbC9vcmRlcmFwcF9kZXJieS5zcWwKaW5kZXggOGNkZTdlOC4uNTllY2RmYyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL3NxbC9vcmRlcmFwcF9kZXJieS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL3NxbC9vcmRlcmFwcF9kZXJieS5zcWwKQEAgLTYsNjIgKzYsNjIgQEAKIGRyb3AgdGFibGUgUEFSVDsKIAogY3JlYXRlIHRhYmxlIFBBUlQgKAotCVBBUlRfTlVNQkVSCQlWQVJDSEFSKDE1KQlOT1QgTlVMTCwKLQlSRVZJU0lPTgkJTlVNRVJJQygyKSAgICAgIE5PVCBOVUxMLAotCURFU0NSSVBUSU9OCQlWQVJDSEFSKDI1NSksCi0JUkVWSVNJT05fREFURQkJVElNRVNUQU1QICAgICAgIE5PVCBOVUxMLAotCUJPTV9QQVJUX05VTUJFUiAgICAgICAgIFZBUkNIQVIoMTUpLAotCUJPTV9SRVZJU0lPTgkJTlVNRVJJQygyKSwKLQlQUklNQVJZIEtFWSAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKQorICAgIFBBUlRfTlVNQkVSICAgICAgICBWQVJDSEFSKDE1KSAgICBOT1QgTlVMTCwKKyAgICBSRVZJU0lPTiAgICAgICAgTlVNRVJJQygyKSAgICAgIE5PVCBOVUxMLAorICAgIERFU0NSSVBUSU9OICAgICAgICBWQVJDSEFSKDI1NSksCisgICAgUkVWSVNJT05fREFURSAgICAgICAgVElNRVNUQU1QICAgICAgIE5PVCBOVUxMLAorICAgIEJPTV9QQVJUX05VTUJFUiAgICAgICAgIFZBUkNIQVIoMTUpLAorICAgIEJPTV9SRVZJU0lPTiAgICAgICAgTlVNRVJJQygyKSwKKyAgICBQUklNQVJZIEtFWSAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKQogKTsKIAogYWx0ZXIgdGFibGUgUEFSVAotCWFkZCBDT05TVFJBSU5UIEZLXzEgRk9SRUlHTiBLRVkgKEJPTV9QQVJUX05VTUJFUiwgQk9NX1JFVklTSU9OKSAKKyAgICBhZGQgQ09OU1RSQUlOVCBGS18xIEZPUkVJR04gS0VZIChCT01fUEFSVF9OVU1CRVIsIEJPTV9SRVZJU0lPTikKICAgICAgICAgICAgICAgICBSRUZFUkVOQ0VTIFBBUlQgKFBBUlRfTlVNQkVSLCBSRVZJU0lPTik7CiAKIGNyZWF0ZSB0YWJsZSBQQVJUX0RFVEFJTCAoCi0JUEFSVF9OVU1CRVIJVkFSQ0hBUigxNSkJTk9UIE5VTEwsCi0JUkVWSVNJT04JTlVNRVJJQygyKSAgICAgIE5PVCBOVUxMLAotCVNQRUNJRklDQVRJT04JQ0xPQigxMEspLAotCURSQVdJTkcJCUJMT0IoMTBLKSwKLQlQUklNQVJZIEtFWSAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKQorICAgIFBBUlRfTlVNQkVSICAgIFZBUkNIQVIoMTUpICAgIE5PVCBOVUxMLAorICAgIFJFVklTSU9OICAgIE5VTUVSSUMoMikgICAgICBOT1QgTlVMTCwKKyAgICBTUEVDSUZJQ0FUSU9OICAgIENMT0IoMTBLKSwKKyAgICBEUkFXSU5HICAgICAgICBCTE9CKDEwSyksCisgICAgUFJJTUFSWSBLRVkgKFBBUlRfTlVNQkVSLCBSRVZJU0lPTikKICk7CiAKIGNyZWF0ZSB0YWJsZSBWRU5ET1IgKAotCVZFTkRPUl9JRCAgICAgICBJTlRFR0VSICAgICAgICAJTk9UIE5VTEwgUFJJTUFSWSBLRVksCi0JTkFNRQkJVkFSQ0hBUigzMCkJTk9UIE5VTEwsCi0JQUREUkVTUwkJVkFSQ0hBUigyNTUpCU5PVCBOVUxMLAotCUNPTlRBQ1QJCVZBUkNIQVIoMjU1KQlOT1QgTlVMTCwKLQlQSE9ORQkJVkFSQ0hBUigzMCkJTk9UIE5VTEwKKyAgICBWRU5ET1JfSUQgICAgICAgSU5URUdFUiAgICAgICAgICAgIE5PVCBOVUxMIFBSSU1BUlkgS0VZLAorICAgIE5BTUUgICAgICAgIFZBUkNIQVIoMzApICAgIE5PVCBOVUxMLAorICAgIEFERFJFU1MgICAgICAgIFZBUkNIQVIoMjU1KSAgICBOT1QgTlVMTCwKKyAgICBDT05UQUNUICAgICAgICBWQVJDSEFSKDI1NSkgICAgTk9UIE5VTEwsCisgICAgUEhPTkUgICAgICAgIFZBUkNIQVIoMzApICAgIE5PVCBOVUxMCiApOwogCiBjcmVhdGUgdGFibGUgVkVORE9SX1BBUlQgKAotCVZFTkRPUl9QQVJUX05VTUJFUglCSUdJTlQgICBOT1QgTlVMTCAgICAgICAgICAgICAgIFBSSU1BUlkgS0VZLAotCURFU0NSSVBUSU9OCQlWQVJDSEFSKDI1NSksCi0JUFJJQ0UJCQlET1VCTEUgUFJFQ0lTSU9OICAgICAgICBOT1QgTlVMTCwKLQlWRU5ET1JfSUQJCUlOVEVHRVIgICAgICAgICAgICAgICAgIE5PVCBOVUxMLAotCVBBUlRfTlVNQkVSCQlWQVJDSEFSKDE1KQkJTk9UIE5VTEwsCi0JUEFSVF9SRVZJU0lPTgkJTlVNRVJJQygyKSAgICAgICAgICAgICAgTk9UIE5VTEwsCi0JQ09OU1RSQUlOVCBGS18yIEZPUkVJR04gS0VZIChWRU5ET1JfSUQpIFJFRkVSRU5DRVMgVkVORE9SIChWRU5ET1JfSUQpLAotCUNPTlNUUkFJTlQgRktfMyBGT1JFSUdOIEtFWSAoUEFSVF9OVU1CRVIsIFBBUlRfUkVWSVNJT04pIFJFRkVSRU5DRVMgUEFSVCAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKSwKLQlVTklRVUUgKFBBUlRfTlVNQkVSLCBQQVJUX1JFVklTSU9OKQorICAgIFZFTkRPUl9QQVJUX05VTUJFUiAgICBCSUdJTlQgICBOT1QgTlVMTCAgICAgICAgICAgICAgIFBSSU1BUlkgS0VZLAorICAgIERFU0NSSVBUSU9OICAgICAgICBWQVJDSEFSKDI1NSksCisgICAgUFJJQ0UgICAgICAgICAgICBET1VCTEUgUFJFQ0lTSU9OICAgICAgICBOT1QgTlVMTCwKKyAgICBWRU5ET1JfSUQgICAgICAgIElOVEVHRVIgICAgICAgICAgICAgICAgIE5PVCBOVUxMLAorICAgIFBBUlRfTlVNQkVSICAgICAgICBWQVJDSEFSKDE1KSAgICAgICAgTk9UIE5VTEwsCisgICAgUEFSVF9SRVZJU0lPTiAgICAgICAgTlVNRVJJQygyKSAgICAgICAgICAgICAgTk9UIE5VTEwsCisgICAgQ09OU1RSQUlOVCBGS18yIEZPUkVJR04gS0VZIChWRU5ET1JfSUQpIFJFRkVSRU5DRVMgVkVORE9SIChWRU5ET1JfSUQpLAorICAgIENPTlNUUkFJTlQgRktfMyBGT1JFSUdOIEtFWSAoUEFSVF9OVU1CRVIsIFBBUlRfUkVWSVNJT04pIFJFRkVSRU5DRVMgUEFSVCAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKSwKKyAgICBVTklRVUUgKFBBUlRfTlVNQkVSLCBQQVJUX1JFVklTSU9OKQogKTsKIAogY3JlYXRlIHRhYmxlIE9SREVSUyAoCi0JT1JERVJfSUQJSU5URUdFUiAgIE5PVCBOVUxMIFBSSU1BUlkgS0VZLAotCVNUQVRVUwkJQ0hBUigxKQkJTk9UIE5VTEwsCi0JTEFTVF9VUERBVEUJVElNRVNUQU1QICAgICAgIE5PVCBOVUxMLAotCURJU0NPVU5UCU5VTUVSSUMoMikgICAgICBOT1QgTlVMTCwKLQlTSElQTUVOVF9JTkZPCVZBUkNIQVIoMjU1KQorICAgIE9SREVSX0lEICAgIElOVEVHRVIgICBOT1QgTlVMTCBQUklNQVJZIEtFWSwKKyAgICBTVEFUVVMgICAgICAgIENIQVIoMSkgICAgICAgIE5PVCBOVUxMLAorICAgIExBU1RfVVBEQVRFICAgIFRJTUVTVEFNUCAgICAgICBOT1QgTlVMTCwKKyAgICBESVNDT1VOVCAgICBOVU1FUklDKDIpICAgICAgTk9UIE5VTEwsCisgICAgU0hJUE1FTlRfSU5GTyAgICBWQVJDSEFSKDI1NSkKICk7CiAKIGNyZWF0ZSB0YWJsZSBMSU5FSVRFTSAoCi0JT1JERVJfSUQJCUlOVEVHRVIgICAgICAgICBOT1QgTlVMTCwKLQlJVEVNX0lECQkJTlVNRVJJQygzKSAgICAgIE5PVCBOVUxMLAotCVFVQU5USVRZCQlOVU1FUklDKDMpICAgICAgTk9UIE5VTEwsCi0JVkVORE9SX1BBUlRfTlVNQkVSCUJJR0lOVCAgICAgICAgICBOT1QgTlVMTCwKLQlDT05TVFJBSU5UIEZLXzQgRk9SRUlHTiBLRVkgKE9SREVSX0lEKSBSRUZFUkVOQ0VTIE9SREVSUyAoT1JERVJfSUQpLAotCUNPTlNUUkFJTlQgRktfNSBGT1JFSUdOIEtFWSAoVkVORE9SX1BBUlRfTlVNQkVSKSBSRUZFUkVOQ0VTIFZFTkRPUl9QQVJUIChWRU5ET1JfUEFSVF9OVU1CRVIpLAotCVBSSU1BUlkgS0VZIChPUkRFUl9JRCwgSVRFTV9JRCkKKyAgICBPUkRFUl9JRCAgICAgICAgSU5URUdFUiAgICAgICAgIE5PVCBOVUxMLAorICAgIElURU1fSUQgICAgICAgICAgICBOVU1FUklDKDMpICAgICAgTk9UIE5VTEwsCisgICAgUVVBTlRJVFkgICAgICAgIE5VTUVSSUMoMykgICAgICBOT1QgTlVMTCwKKyAgICBWRU5ET1JfUEFSVF9OVU1CRVIgICAgQklHSU5UICAgICAgICAgIE5PVCBOVUxMLAorICAgIENPTlNUUkFJTlQgRktfNCBGT1JFSUdOIEtFWSAoT1JERVJfSUQpIFJFRkVSRU5DRVMgT1JERVJTIChPUkRFUl9JRCksCisgICAgQ09OU1RSQUlOVCBGS181IEZPUkVJR04gS0VZIChWRU5ET1JfUEFSVF9OVU1CRVIpIFJFRkVSRU5DRVMgVkVORE9SX1BBUlQgKFZFTkRPUl9QQVJUX05VTUJFUiksCisgICAgUFJJTUFSWSBLRVkgKE9SREVSX0lELCBJVEVNX0lEKQogKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL3NxbC9vcmRlcmFwcF9pZnguc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL3NxbC9vcmRlcmFwcF9pZnguc3FsCmluZGV4IDhlNjBjODcuLmMwNjRmMzkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9vcmRlcmFwcC9zcWwvb3JkZXJhcHBfaWZ4LnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvb3JkZXJhcHAvc3FsL29yZGVyYXBwX2lmeC5zcWwKQEAgLTYsNzEgKzYsNzEgQEAKIGRyb3AgdGFibGUgUEFSVDsKIAogLyogU2VsZi1yZWYgdG8gaWRlbnRpZnkgQmlsbCBvZiBNYXRlcmlhbCAoQk9NKQotICogQ29tcG91bmQgUEsgCisgKiBDb21wb3VuZCBQSwogICovCiBjcmVhdGUgdGFibGUgUEFSVCAoCi0JUEFSVF9OVU1CRVIJCVZBUkNIQVIoMTUpCU5PVCBOVUxMICwKLQlSRVZJU0lPTgkJTlVNRVJJQygyKQlOT1QgTlVMTCAsCi0JREVTQ1JJUFRJT04JCVZBUkNIQVIoMTI3KQksCi0JUkVWSVNJT05fREFURQkJREFURQkJTk9UIE5VTEwgLAotCUJPTV9QQVJUX05VTUJFUgkJVkFSQ0hBUigxNSkJLAotCUJPTV9SRVZJU0lPTgkJTlVNRVJJQygyKQksCi0JUFJJTUFSWSBLRVkgKFBBUlRfTlVNQkVSLCBSRVZJU0lPTiksCi0JRk9SRUlHTiBLRVkgKEJPTV9QQVJUX05VTUJFUiwgQk9NX1JFVklTSU9OKSBSRUZFUkVOQ0VTIFBBUlQgKFBBUlRfTlVNQkVSLCBSRVZJU0lPTikKKyAgICBQQVJUX05VTUJFUiAgICAgICAgVkFSQ0hBUigxNSkgICAgTk9UIE5VTEwgLAorICAgIFJFVklTSU9OICAgICAgICBOVU1FUklDKDIpICAgIE5PVCBOVUxMICwKKyAgICBERVNDUklQVElPTiAgICAgICAgVkFSQ0hBUigxMjcpICAgICwKKyAgICBSRVZJU0lPTl9EQVRFICAgICAgICBEQVRFICAgICAgICBOT1QgTlVMTCAsCisgICAgQk9NX1BBUlRfTlVNQkVSICAgICAgICBWQVJDSEFSKDE1KSAgICAsCisgICAgQk9NX1JFVklTSU9OICAgICAgICBOVU1FUklDKDIpICAgICwKKyAgICBQUklNQVJZIEtFWSAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKSwKKyAgICBGT1JFSUdOIEtFWSAoQk9NX1BBUlRfTlVNQkVSLCBCT01fUkVWSVNJT04pIFJFRkVSRU5DRVMgUEFSVCAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKQogKTsKIAogLyogQmVhbiB3aWxsIGJlIG1hcHBlZCB0byAyIHRhYmxlcyAoUEFSVCBhbmQgUEFSVF9ERVRBSUwpCiAgKiBCTE9CIGNvbHVtbiB0eXBlCiAgKiBDTE9CIGNvbHVtbiB0eXBlICovCiBjcmVhdGUgdGFibGUgUEFSVF9ERVRBSUwgKAotCVBBUlRfTlVNQkVSCVZBUkNIQVIoMTUpCU5PVCBOVUxMICwKLQlSRVZJU0lPTglOVU1FUklDKDIpCU5PVCBOVUxMICwKLQlTUEVDSUZJQ0FUSU9OCUNMT0IJCSwKLQlEUkFXSU5HCQlCTE9CCQksCi0JUFJJTUFSWSBLRVkgKFBBUlRfTlVNQkVSLCBSRVZJU0lPTikKKyAgICBQQVJUX05VTUJFUiAgICBWQVJDSEFSKDE1KSAgICBOT1QgTlVMTCAsCisgICAgUkVWSVNJT04gICAgTlVNRVJJQygyKSAgICBOT1QgTlVMTCAsCisgICAgU1BFQ0lGSUNBVElPTiAgICBDTE9CICAgICAgICAsCisgICAgRFJBV0lORyAgICAgICAgQkxPQiAgICAgICAgLAorICAgIFBSSU1BUlkgS0VZIChQQVJUX05VTUJFUiwgUkVWSVNJT04pCiApOwogCiAvKiBQSyBjYW4gYmUgbWFwcGVkIHRvIGEgcHJpbWl0aXZlIFBLIGZpZWxkIHR5cGUgKi8KIGNyZWF0ZSB0YWJsZSBWRU5ET1IgKAotCVZFTkRPUl9JRAlJTlRFR0VSCQlQUklNQVJZIEtFWSwKLQlOQU1FCQlWQVJDSEFSKDMwKQlOT1QgTlVMTCAsCi0JQUREUkVTUwkJVkFSQ0hBUigxMjcpCU5PVCBOVUxMICwKLQlDT05UQUNUCQlWQVJDSEFSKDEyNykJTk9UIE5VTEwgLAotCVBIT05FCQlWQVJDSEFSKDMwKQlOT1QgTlVMTCAKKyAgICBWRU5ET1JfSUQgICAgSU5URUdFUiAgICAgICAgUFJJTUFSWSBLRVksCisgICAgTkFNRSAgICAgICAgVkFSQ0hBUigzMCkgICAgTk9UIE5VTEwgLAorICAgIEFERFJFU1MgICAgICAgIFZBUkNIQVIoMTI3KSAgICBOT1QgTlVMTCAsCisgICAgQ09OVEFDVCAgICAgICAgVkFSQ0hBUigxMjcpICAgIE5PVCBOVUxMICwKKyAgICBQSE9ORSAgICAgICAgVkFSQ0hBUigzMCkgICAgTk9UIE5VTEwKICk7CiAKLS8qIENhbiBiZSB1c2VkIGZvciB1bmtub3duIFBLIAorLyogQ2FuIGJlIHVzZWQgZm9yIHVua25vd24gUEsKICAqIDEtMSB0byBQQVJUCiAgKiBDb21wb3VuZCBGSwogICovCiBjcmVhdGUgdGFibGUgVkVORE9SX1BBUlQgKAotCVZFTkRPUl9QQVJUX05VTUJFUglOVU1FUklDKDE5KQkJUFJJTUFSWSBLRVksCi0JREVTQ1JJUFRJT04JCVZBUkNIQVIoMTI3KQkJLAotCVBSSUNFCQkJRE9VQkxFIFBSRUNJU0lPTglOT1QgTlVMTCAsCi0JVkVORE9SX0lECQlJTlRFR0VSCQkJTk9UIE5VTEwgLAotCVBBUlRfTlVNQkVSCQlWQVJDSEFSKDE1KQkJTk9UIE5VTEwgLAotCVBBUlRfUkVWSVNJT04JCU5VTUVSSUMoMikJCU5PVCBOVUxMICwKLQlGT1JFSUdOIEtFWSAoVkVORE9SX0lEKSBSRUZFUkVOQ0VTIFZFTkRPUiAoVkVORE9SX0lEKSwKLQlGT1JFSUdOIEtFWSAoUEFSVF9OVU1CRVIsIFBBUlRfUkVWSVNJT04pIFJFRkVSRU5DRVMgUEFSVCAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKSwKLQlVTklRVUUgKFBBUlRfTlVNQkVSLCBQQVJUX1JFVklTSU9OKQorICAgIFZFTkRPUl9QQVJUX05VTUJFUiAgICBOVU1FUklDKDE5KSAgICAgICAgUFJJTUFSWSBLRVksCisgICAgREVTQ1JJUFRJT04gICAgICAgIFZBUkNIQVIoMTI3KSAgICAgICAgLAorICAgIFBSSUNFICAgICAgICAgICAgRE9VQkxFIFBSRUNJU0lPTiAgICBOT1QgTlVMTCAsCisgICAgVkVORE9SX0lEICAgICAgICBJTlRFR0VSICAgICAgICAgICAgTk9UIE5VTEwgLAorICAgIFBBUlRfTlVNQkVSICAgICAgICBWQVJDSEFSKDE1KSAgICAgICAgTk9UIE5VTEwgLAorICAgIFBBUlRfUkVWSVNJT04gICAgICAgIE5VTUVSSUMoMikgICAgICAgIE5PVCBOVUxMICwKKyAgICBGT1JFSUdOIEtFWSAoVkVORE9SX0lEKSBSRUZFUkVOQ0VTIFZFTkRPUiAoVkVORE9SX0lEKSwKKyAgICBGT1JFSUdOIEtFWSAoUEFSVF9OVU1CRVIsIFBBUlRfUkVWSVNJT04pIFJFRkVSRU5DRVMgUEFSVCAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKSwKKyAgICBVTklRVUUgKFBBUlRfTlVNQkVSLCBQQVJUX1JFVklTSU9OKQogKTsKIAogY3JlYXRlIHRhYmxlIE9SREVSUyAoCi0JT1JERVJfSUQJSU5URUdFUgkJUFJJTUFSWSBLRVksCi0JU1RBVFVTCQlDSEFSKDEpCQlOT1QgTlVMTCAsCi0JTEFTVF9VUERBVEUJREFURQkJTk9UIE5VTEwgLAotCURJU0NPVU5UCU5VTUVSSUMoMikJTk9UIE5VTEwgLAotCVNISVBNRU5UX0lORk8JVkFSQ0hBUigxMjcpCQorICAgIE9SREVSX0lEICAgIElOVEVHRVIgICAgICAgIFBSSU1BUlkgS0VZLAorICAgIFNUQVRVUyAgICAgICAgQ0hBUigxKSAgICAgICAgTk9UIE5VTEwgLAorICAgIExBU1RfVVBEQVRFICAgIERBVEUgICAgICAgIE5PVCBOVUxMICwKKyAgICBESVNDT1VOVCAgICBOVU1FUklDKDIpICAgIE5PVCBOVUxMICwKKyAgICBTSElQTUVOVF9JTkZPICAgIFZBUkNIQVIoMTI3KQogKTsKIAotLyogT3ZlcmxhcHBpbmcgUEstRksgCisvKiBPdmVybGFwcGluZyBQSy1GSwogICogVW5pLWRpcmVjdGlvbmFsIHRvIFZFTkRPUl9QQVJUICovCiBjcmVhdGUgdGFibGUgTElORUlURU0gKAotCU9SREVSX0lECQlJTlRFR0VSCQlOT1QgTlVMTCAsCi0JSVRFTV9JRAkJCU5VTUVSSUMoMykJTk9UIE5VTEwgLAotCVFVQU5USVRZCQlOVU1FUklDKDMpCU5PVCBOVUxMICwKLQlWRU5ET1JfUEFSVF9OVU1CRVIJTlVNRVJJQygxOSkJTk9UIE5VTEwgLAotCUZPUkVJR04gS0VZIChPUkRFUl9JRCkgUkVGRVJFTkNFUyBPUkRFUlMgKE9SREVSX0lEKSwKLQlGT1JFSUdOIEtFWSAoVkVORE9SX1BBUlRfTlVNQkVSKSBSRUZFUkVOQ0VTIFZFTkRPUl9QQVJUIChWRU5ET1JfUEFSVF9OVU1CRVIpLAotCVBSSU1BUlkgS0VZIChPUkRFUl9JRCwgSVRFTV9JRCkKKyAgICBPUkRFUl9JRCAgICAgICAgSU5URUdFUiAgICAgICAgTk9UIE5VTEwgLAorICAgIElURU1fSUQgICAgICAgICAgICBOVU1FUklDKDMpICAgIE5PVCBOVUxMICwKKyAgICBRVUFOVElUWSAgICAgICAgTlVNRVJJQygzKSAgICBOT1QgTlVMTCAsCisgICAgVkVORE9SX1BBUlRfTlVNQkVSICAgIE5VTUVSSUMoMTkpICAgIE5PVCBOVUxMICwKKyAgICBGT1JFSUdOIEtFWSAoT1JERVJfSUQpIFJFRkVSRU5DRVMgT1JERVJTIChPUkRFUl9JRCksCisgICAgRk9SRUlHTiBLRVkgKFZFTkRPUl9QQVJUX05VTUJFUikgUkVGRVJFTkNFUyBWRU5ET1JfUEFSVCAoVkVORE9SX1BBUlRfTlVNQkVSKSwKKyAgICBQUklNQVJZIEtFWSAoT1JERVJfSUQsIElURU1fSUQpCiApOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL3NxbC9vcmRlcmFwcF9tc3NxbC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvb3JkZXJhcHAvc3FsL29yZGVyYXBwX21zc3FsLnNxbAppbmRleCBjYTNkN2I3Li5hYmNhMGYwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvb3JkZXJhcHAvc3FsL29yZGVyYXBwX21zc3FsLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvb3JkZXJhcHAvc3FsL29yZGVyYXBwX21zc3FsLnNxbApAQCAtMjMsNyArMjMsNyBAQAogZ28KIAogYWx0ZXIgdGFibGUgUEFSVAotICAgICAgICBhZGQgQ09OU1RSQUlOVCBGS18xIEZPUkVJR04gS0VZIChCT01fUEFSVF9OVU1CRVIsIEJPTV9SRVZJU0lPTikgCisgICAgICAgIGFkZCBDT05TVFJBSU5UIEZLXzEgRk9SRUlHTiBLRVkgKEJPTV9QQVJUX05VTUJFUiwgQk9NX1JFVklTSU9OKQogICAgICAgICAgICAgICAgIFJFRkVSRU5DRVMgUEFSVCAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKQogCiBnbwpAQCAtNDMsNyArNDMsNyBAQAogCiAvKiBQSyBjYW4gYmUgbWFwcGVkIHRvIGEgcHJpbWl0aXZlIFBLIGZpZWxkIHR5cGUgKi8KIGNyZWF0ZSB0YWJsZSBWRU5ET1IgKAotICAgICAgICBWRU5ET1JfSUQgICAgICAgSU5URUdFUiAgICAgICAgIE5PVCBOVUxMLCAKKyAgICAgICAgVkVORE9SX0lEICAgICAgIElOVEVHRVIgICAgICAgICBOT1QgTlVMTCwKICAgICAgICAgTkFNRSAgICAgICAgICAgIFZBUkNIQVIoMzApICAgICBOT1QgTlVMTCwKICAgICAgICAgQUREUkVTUyAgICAgICAgIFZBUkNIQVIoMjU1KSAgICBOT1QgTlVMTCwKICAgICAgICAgQ09OVEFDVCAgICAgICAgIFZBUkNIQVIoMjU1KSAgICBOT1QgTlVMTCwKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9vcmRlcmFwcC9zcWwvb3JkZXJhcHBfbXlzcWwuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL3NxbC9vcmRlcmFwcF9teXNxbC5zcWwKaW5kZXggYzAzYTNmNC4uNzNmNDMwNyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL3NxbC9vcmRlcmFwcF9teXNxbC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL3NxbC9vcmRlcmFwcF9teXNxbC5zcWwKQEAgLTcsMTYgKzcsMTYgQEAKIERST1AgVEFCTEUgUEFSVDsKIAogLyogU2VsZi1yZWYgdG8gaWRlbnRpZnkgQmlsbCBvZiBNYXRlcmlhbCAoQk9NKQotICogQ29tcG91bmQgUEsgCisgKiBDb21wb3VuZCBQSwogICovCiBDUkVBVEUgVEFCTEUgUEFSVCAoCi0JUEFSVF9OVU1CRVIJCVZBUkNIQVIoMTUpCU5PVCBOVUxMLAotCVJFVklTSU9OCQlOVU1FUklDKDIpCU5PVCBOVUxMLAotCURFU0NSSVBUSU9OCQlWQVJDSEFSKDI1NSkJTlVMTCwKLQlSRVZJU0lPTl9EQVRFCQlEQVRFCQlOT1QgTlVMTCwKLQlCT01fUEFSVF9OVU1CRVIJCVZBUkNIQVIoMTUpCU5VTEwsCi0JQk9NX1JFVklTSU9OCQlOVU1FUklDKDIpCU5VTEwsCi0JUFJJTUFSWSBLRVkgKFBBUlRfTlVNQkVSLCBSRVZJU0lPTikKKyAgICBQQVJUX05VTUJFUiAgICAgICAgVkFSQ0hBUigxNSkgICAgTk9UIE5VTEwsCisgICAgUkVWSVNJT04gICAgICAgIE5VTUVSSUMoMikgICAgTk9UIE5VTEwsCisgICAgREVTQ1JJUFRJT04gICAgICAgIFZBUkNIQVIoMjU1KSAgICBOVUxMLAorICAgIFJFVklTSU9OX0RBVEUgICAgICAgIERBVEUgICAgICAgIE5PVCBOVUxMLAorICAgIEJPTV9QQVJUX05VTUJFUiAgICAgICAgVkFSQ0hBUigxNSkgICAgTlVMTCwKKyAgICBCT01fUkVWSVNJT04gICAgICAgIE5VTUVSSUMoMikgICAgTlVMTCwKKyAgICBQUklNQVJZIEtFWSAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKQogKSBFTkdJTkU9SU5OT0RCOwogCiAKQEAgLTI0LDUyICsyNCw1MiBAQAogICogQkxPQiBjb2x1bW4gdHlwZQogICogQ0xPQiBjb2x1bW4gdHlwZSAqLwogQ1JFQVRFIFRBQkxFIFBBUlRfREVUQUlMICgKLQlQQVJUX05VTUJFUglWQVJDSEFSKDE1KQlOT1QgTlVMTCwKLQlSRVZJU0lPTglOVU1FUklDKDIpCU5PVCBOVUxMLAotCVNQRUNJRklDQVRJT04JVEVYVAkJTlVMTCwKLQlEUkFXSU5HCQlCTE9CCQlOVUxMLAotCVBSSU1BUlkgS0VZIChQQVJUX05VTUJFUiwgUkVWSVNJT04pCisgICAgUEFSVF9OVU1CRVIgICAgVkFSQ0hBUigxNSkgICAgTk9UIE5VTEwsCisgICAgUkVWSVNJT04gICAgTlVNRVJJQygyKSAgICBOT1QgTlVMTCwKKyAgICBTUEVDSUZJQ0FUSU9OICAgIFRFWFQgICAgICAgIE5VTEwsCisgICAgRFJBV0lORyAgICAgICAgQkxPQiAgICAgICAgTlVMTCwKKyAgICBQUklNQVJZIEtFWSAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKQogKSBFTkdJTkU9SU5OT0RCOwogCiAvKiBQSyBjYW4gYmUgbWFwcGVkIHRvIGEgcHJpbWl0aXZlIFBLIGZpZWxkIHR5cGUgKi8KIENSRUFURSBUQUJMRSBWRU5ET1IgKAotCVZFTkRPUl9JRAlJTlRFR0VSCQlQUklNQVJZIEtFWSwKLQlOQU1FCQlWQVJDSEFSKDMwKQlOT1QgTlVMTCwKLQlBRERSRVNTCQlWQVJDSEFSKDI1NSkJTk9UIE5VTEwsCi0JQ09OVEFDVAkJVkFSQ0hBUigyNTUpCU5PVCBOVUxMLAotCVBIT05FCQlWQVJDSEFSKDMwKQlOT1QgTlVMTAorICAgIFZFTkRPUl9JRCAgICBJTlRFR0VSICAgICAgICBQUklNQVJZIEtFWSwKKyAgICBOQU1FICAgICAgICBWQVJDSEFSKDMwKSAgICBOT1QgTlVMTCwKKyAgICBBRERSRVNTICAgICAgICBWQVJDSEFSKDI1NSkgICAgTk9UIE5VTEwsCisgICAgQ09OVEFDVCAgICAgICAgVkFSQ0hBUigyNTUpICAgIE5PVCBOVUxMLAorICAgIFBIT05FICAgICAgICBWQVJDSEFSKDMwKSAgICBOT1QgTlVMTAogKSBFTkdJTkU9SU5OT0RCOwogCi0vKiBDYW4gYmUgdXNlZCBmb3IgdW5rbm93biBQSyAKKy8qIENhbiBiZSB1c2VkIGZvciB1bmtub3duIFBLCiAgKiAxLTEgdG8gUEFSVAogICogQ29tcG91bmQgRksKICAqLwogQ1JFQVRFIFRBQkxFIFZFTkRPUl9QQVJUICgKLQlWRU5ET1JfUEFSVF9OVU1CRVIJTlVNRVJJQygxOSkJCVBSSU1BUlkgS0VZLAotCURFU0NSSVBUSU9OCQlWQVJDSEFSKDI1NSkJCU5VTEwsCi0JUFJJQ0UJCQlET1VCTEUgUFJFQ0lTSU9OCU5PVCBOVUxMLAotCVZFTkRPUl9JRAkJSU5URUdFUgkJCU5PVCBOVUxMLAotCVBBUlRfTlVNQkVSCQlWQVJDSEFSKDE1KQkJTk9UIE5VTEwsCi0JUEFSVF9SRVZJU0lPTgkJTlVNRVJJQygyKQkJTk9UIE5VTEwsCi0JVU5JUVVFIChQQVJUX05VTUJFUiwgUEFSVF9SRVZJU0lPTikKKyAgICBWRU5ET1JfUEFSVF9OVU1CRVIgICAgTlVNRVJJQygxOSkgICAgICAgIFBSSU1BUlkgS0VZLAorICAgIERFU0NSSVBUSU9OICAgICAgICBWQVJDSEFSKDI1NSkgICAgICAgIE5VTEwsCisgICAgUFJJQ0UgICAgICAgICAgICBET1VCTEUgUFJFQ0lTSU9OICAgIE5PVCBOVUxMLAorICAgIFZFTkRPUl9JRCAgICAgICAgSU5URUdFUiAgICAgICAgICAgIE5PVCBOVUxMLAorICAgIFBBUlRfTlVNQkVSICAgICAgICBWQVJDSEFSKDE1KSAgICAgICAgTk9UIE5VTEwsCisgICAgUEFSVF9SRVZJU0lPTiAgICAgICAgTlVNRVJJQygyKSAgICAgICAgTk9UIE5VTEwsCisgICAgVU5JUVVFIChQQVJUX05VTUJFUiwgUEFSVF9SRVZJU0lPTikKICkgRU5HSU5FPUlOTk9EQjsKIAogQ1JFQVRFIFRBQkxFIE9SREVSUyAoCi0JT1JERVJfSUQJSU5URUdFUgkJUFJJTUFSWSBLRVksCi0JU1RBVFVTCQlDSEFSKDEpCQlOT1QgTlVMTCwKLQlMQVNUX1VQREFURQlEQVRFCQlOT1QgTlVMTCwKLQlESVNDT1VOVAlOVU1FUklDKDIpCU5PVCBOVUxMLAotCVNISVBNRU5UX0lORk8JVkFSQ0hBUigyNTUpCU5VTEwKKyAgICBPUkRFUl9JRCAgICBJTlRFR0VSICAgICAgICBQUklNQVJZIEtFWSwKKyAgICBTVEFUVVMgICAgICAgIENIQVIoMSkgICAgICAgIE5PVCBOVUxMLAorICAgIExBU1RfVVBEQVRFICAgIERBVEUgICAgICAgIE5PVCBOVUxMLAorICAgIERJU0NPVU5UICAgIE5VTUVSSUMoMikgICAgTk9UIE5VTEwsCisgICAgU0hJUE1FTlRfSU5GTyAgICBWQVJDSEFSKDI1NSkgICAgTlVMTAogKSBFTkdJTkU9SU5OT0RCOwogCi0vKiBPdmVybGFwcGluZyBQSy1GSyAKKy8qIE92ZXJsYXBwaW5nIFBLLUZLCiAgKiBVbmktZGlyZWN0aW9uYWwgdG8gVkVORE9SX1BBUlQgKi8KIENSRUFURSBUQUJMRSBMSU5FSVRFTSAoCi0JT1JERVJfSUQJCUlOVEVHRVIJCU5PVCBOVUxMLAotCUlURU1fSUQJCQlOVU1FUklDKDMpCU5PVCBOVUxMLAotCVFVQU5USVRZCQlOVU1FUklDKDMpCU5PVCBOVUxMLAotCVZFTkRPUl9QQVJUX05VTUJFUglOVU1FUklDKDE5KQlOT1QgTlVMTCwKLQlQUklNQVJZIEtFWSAoT1JERVJfSUQsIElURU1fSUQpCisgICAgT1JERVJfSUQgICAgICAgIElOVEVHRVIgICAgICAgIE5PVCBOVUxMLAorICAgIElURU1fSUQgICAgICAgICAgICBOVU1FUklDKDMpICAgIE5PVCBOVUxMLAorICAgIFFVQU5USVRZICAgICAgICBOVU1FUklDKDMpICAgIE5PVCBOVUxMLAorICAgIFZFTkRPUl9QQVJUX05VTUJFUiAgICBOVU1FUklDKDE5KSAgICBOT1QgTlVMTCwKKyAgICBQUklNQVJZIEtFWSAoT1JERVJfSUQsIElURU1fSUQpCiApIEVOR0lORT1JTk5PREI7CiAKIHF1aXQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvb3JkZXJhcHAvc3FsL29yZGVyYXBwX29yYS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvb3JkZXJhcHAvc3FsL29yZGVyYXBwX29yYS5zcWwKaW5kZXggYTY3OGU2NC4uMmE5NmQ3MSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL3NxbC9vcmRlcmFwcF9vcmEuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9vcmRlcmFwcC9zcWwvb3JkZXJhcHBfb3JhLnNxbApAQCAtNiw3MSArNiw3MSBAQAogZHJvcCB0YWJsZSBQQVJUOwogCiAvKiBTZWxmLXJlZiB0byBpZGVudGlmeSBCaWxsIG9mIE1hdGVyaWFsIChCT00pCi0gKiBDb21wb3VuZCBQSyAKKyAqIENvbXBvdW5kIFBLCiAgKi8KIGNyZWF0ZSB0YWJsZSBQQVJUICgKLQlQQVJUX05VTUJFUgkJVkFSQ0hBUigxNSkJTk9UIE5VTEwsCi0JUkVWSVNJT04JCU5VTUVSSUMoMikJTk9UIE5VTEwsCi0JREVTQ1JJUFRJT04JCVZBUkNIQVIoMjU1KQlOVUxMLAotCVJFVklTSU9OX0RBVEUJCURBVEUJCU5PVCBOVUxMLAotCUJPTV9QQVJUX05VTUJFUgkJVkFSQ0hBUigxNSkJTlVMTCwKLQlCT01fUkVWSVNJT04JCU5VTUVSSUMoMikJTlVMTCwKLQlQUklNQVJZIEtFWSAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKSwKLQlGT1JFSUdOIEtFWSAoQk9NX1BBUlRfTlVNQkVSLCBCT01fUkVWSVNJT04pIFJFRkVSRU5DRVMgUEFSVCAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKQorICAgIFBBUlRfTlVNQkVSICAgICAgICBWQVJDSEFSKDE1KSAgICBOT1QgTlVMTCwKKyAgICBSRVZJU0lPTiAgICAgICAgTlVNRVJJQygyKSAgICBOT1QgTlVMTCwKKyAgICBERVNDUklQVElPTiAgICAgICAgVkFSQ0hBUigyNTUpICAgIE5VTEwsCisgICAgUkVWSVNJT05fREFURSAgICAgICAgREFURSAgICAgICAgTk9UIE5VTEwsCisgICAgQk9NX1BBUlRfTlVNQkVSICAgICAgICBWQVJDSEFSKDE1KSAgICBOVUxMLAorICAgIEJPTV9SRVZJU0lPTiAgICAgICAgTlVNRVJJQygyKSAgICBOVUxMLAorICAgIFBSSU1BUlkgS0VZIChQQVJUX05VTUJFUiwgUkVWSVNJT04pLAorICAgIEZPUkVJR04gS0VZIChCT01fUEFSVF9OVU1CRVIsIEJPTV9SRVZJU0lPTikgUkVGRVJFTkNFUyBQQVJUIChQQVJUX05VTUJFUiwgUkVWSVNJT04pCiApOwogCiAvKiBCZWFuIHdpbGwgYmUgbWFwcGVkIHRvIDIgdGFibGVzIChQQVJUIGFuZCBQQVJUX0RFVEFJTCkKICAqIEJMT0IgY29sdW1uIHR5cGUKICAqIENMT0IgY29sdW1uIHR5cGUgKi8KIGNyZWF0ZSB0YWJsZSBQQVJUX0RFVEFJTCAoCi0JUEFSVF9OVU1CRVIJVkFSQ0hBUigxNSkJTk9UIE5VTEwsCi0JUkVWSVNJT04JTlVNRVJJQygyKQlOT1QgTlVMTCwKLQlTUEVDSUZJQ0FUSU9OCUNMT0IJCU5VTEwsCi0JRFJBV0lORwkJQkxPQgkJTlVMTCwKLQlQUklNQVJZIEtFWSAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKQorICAgIFBBUlRfTlVNQkVSICAgIFZBUkNIQVIoMTUpICAgIE5PVCBOVUxMLAorICAgIFJFVklTSU9OICAgIE5VTUVSSUMoMikgICAgTk9UIE5VTEwsCisgICAgU1BFQ0lGSUNBVElPTiAgICBDTE9CICAgICAgICBOVUxMLAorICAgIERSQVdJTkcgICAgICAgIEJMT0IgICAgICAgIE5VTEwsCisgICAgUFJJTUFSWSBLRVkgKFBBUlRfTlVNQkVSLCBSRVZJU0lPTikKICk7CiAKIC8qIFBLIGNhbiBiZSBtYXBwZWQgdG8gYSBwcmltaXRpdmUgUEsgZmllbGQgdHlwZSAqLwogY3JlYXRlIHRhYmxlIFZFTkRPUiAoCi0JVkVORE9SX0lECUlOVEVHRVIJCVBSSU1BUlkgS0VZLAotCU5BTUUJCVZBUkNIQVIoMzApCU5PVCBOVUxMLAotCUFERFJFU1MJCVZBUkNIQVIoMjU1KQlOT1QgTlVMTCwKLQlDT05UQUNUCQlWQVJDSEFSKDI1NSkJTk9UIE5VTEwsCi0JUEhPTkUJCVZBUkNIQVIoMzApCU5PVCBOVUxMCisgICAgVkVORE9SX0lEICAgIElOVEVHRVIgICAgICAgIFBSSU1BUlkgS0VZLAorICAgIE5BTUUgICAgICAgIFZBUkNIQVIoMzApICAgIE5PVCBOVUxMLAorICAgIEFERFJFU1MgICAgICAgIFZBUkNIQVIoMjU1KSAgICBOT1QgTlVMTCwKKyAgICBDT05UQUNUICAgICAgICBWQVJDSEFSKDI1NSkgICAgTk9UIE5VTEwsCisgICAgUEhPTkUgICAgICAgIFZBUkNIQVIoMzApICAgIE5PVCBOVUxMCiApOwogCi0vKiBDYW4gYmUgdXNlZCBmb3IgdW5rbm93biBQSyAKKy8qIENhbiBiZSB1c2VkIGZvciB1bmtub3duIFBLCiAgKiAxLTEgdG8gUEFSVAogICogQ29tcG91bmQgRksKICAqLwogY3JlYXRlIHRhYmxlIFZFTkRPUl9QQVJUICgKLQlWRU5ET1JfUEFSVF9OVU1CRVIJTlVNRVJJQygxOSkJCVBSSU1BUlkgS0VZLAotCURFU0NSSVBUSU9OCQlWQVJDSEFSKDI1NSkJCU5VTEwsCi0JUFJJQ0UJCQlET1VCTEUgUFJFQ0lTSU9OCU5PVCBOVUxMLAotCVZFTkRPUl9JRAkJSU5URUdFUgkJCU5PVCBOVUxMLAotCVBBUlRfTlVNQkVSCQlWQVJDSEFSKDE1KQkJTk9UIE5VTEwsCi0JUEFSVF9SRVZJU0lPTgkJTlVNRVJJQygyKQkJTk9UIE5VTEwsCi0JRk9SRUlHTiBLRVkgKFZFTkRPUl9JRCkgUkVGRVJFTkNFUyBWRU5ET1IgKFZFTkRPUl9JRCksCi0JRk9SRUlHTiBLRVkgKFBBUlRfTlVNQkVSLCBQQVJUX1JFVklTSU9OKSBSRUZFUkVOQ0VTIFBBUlQgKFBBUlRfTlVNQkVSLCBSRVZJU0lPTiksCi0JVU5JUVVFIChQQVJUX05VTUJFUiwgUEFSVF9SRVZJU0lPTikKKyAgICBWRU5ET1JfUEFSVF9OVU1CRVIgICAgTlVNRVJJQygxOSkgICAgICAgIFBSSU1BUlkgS0VZLAorICAgIERFU0NSSVBUSU9OICAgICAgICBWQVJDSEFSKDI1NSkgICAgICAgIE5VTEwsCisgICAgUFJJQ0UgICAgICAgICAgICBET1VCTEUgUFJFQ0lTSU9OICAgIE5PVCBOVUxMLAorICAgIFZFTkRPUl9JRCAgICAgICAgSU5URUdFUiAgICAgICAgICAgIE5PVCBOVUxMLAorICAgIFBBUlRfTlVNQkVSICAgICAgICBWQVJDSEFSKDE1KSAgICAgICAgTk9UIE5VTEwsCisgICAgUEFSVF9SRVZJU0lPTiAgICAgICAgTlVNRVJJQygyKSAgICAgICAgTk9UIE5VTEwsCisgICAgRk9SRUlHTiBLRVkgKFZFTkRPUl9JRCkgUkVGRVJFTkNFUyBWRU5ET1IgKFZFTkRPUl9JRCksCisgICAgRk9SRUlHTiBLRVkgKFBBUlRfTlVNQkVSLCBQQVJUX1JFVklTSU9OKSBSRUZFUkVOQ0VTIFBBUlQgKFBBUlRfTlVNQkVSLCBSRVZJU0lPTiksCisgICAgVU5JUVVFIChQQVJUX05VTUJFUiwgUEFSVF9SRVZJU0lPTikKICk7CiAKIGNyZWF0ZSB0YWJsZSBPUkRFUlMgKAotCU9SREVSX0lECUlOVEVHRVIJCVBSSU1BUlkgS0VZLAotCVNUQVRVUwkJQ0hBUigxKQkJTk9UIE5VTEwsCi0JTEFTVF9VUERBVEUJREFURQkJTk9UIE5VTEwsCi0JRElTQ09VTlQJTlVNRVJJQygyKQlOT1QgTlVMTCwKLQlTSElQTUVOVF9JTkZPCVZBUkNIQVIoMjU1KQlOVUxMCisgICAgT1JERVJfSUQgICAgSU5URUdFUiAgICAgICAgUFJJTUFSWSBLRVksCisgICAgU1RBVFVTICAgICAgICBDSEFSKDEpICAgICAgICBOT1QgTlVMTCwKKyAgICBMQVNUX1VQREFURSAgICBEQVRFICAgICAgICBOT1QgTlVMTCwKKyAgICBESVNDT1VOVCAgICBOVU1FUklDKDIpICAgIE5PVCBOVUxMLAorICAgIFNISVBNRU5UX0lORk8gICAgVkFSQ0hBUigyNTUpICAgIE5VTEwKICk7CiAKLS8qIE92ZXJsYXBwaW5nIFBLLUZLIAorLyogT3ZlcmxhcHBpbmcgUEstRksKICAqIFVuaS1kaXJlY3Rpb25hbCB0byBWRU5ET1JfUEFSVCAqLwogY3JlYXRlIHRhYmxlIExJTkVJVEVNICgKLQlPUkRFUl9JRAkJSU5URUdFUgkJTk9UIE5VTEwsCi0JSVRFTV9JRAkJCU5VTUVSSUMoMykJTk9UIE5VTEwsCi0JUVVBTlRJVFkJCU5VTUVSSUMoMykJTk9UIE5VTEwsCi0JVkVORE9SX1BBUlRfTlVNQkVSCU5VTUVSSUMoMTkpCU5PVCBOVUxMLAotCUZPUkVJR04gS0VZIChPUkRFUl9JRCkgUkVGRVJFTkNFUyBPUkRFUlMgKE9SREVSX0lEKSwKLQlGT1JFSUdOIEtFWSAoVkVORE9SX1BBUlRfTlVNQkVSKSBSRUZFUkVOQ0VTIFZFTkRPUl9QQVJUIChWRU5ET1JfUEFSVF9OVU1CRVIpLAotCVBSSU1BUlkgS0VZIChPUkRFUl9JRCwgSVRFTV9JRCkKKyAgICBPUkRFUl9JRCAgICAgICAgSU5URUdFUiAgICAgICAgTk9UIE5VTEwsCisgICAgSVRFTV9JRCAgICAgICAgICAgIE5VTUVSSUMoMykgICAgTk9UIE5VTEwsCisgICAgUVVBTlRJVFkgICAgICAgIE5VTUVSSUMoMykgICAgTk9UIE5VTEwsCisgICAgVkVORE9SX1BBUlRfTlVNQkVSICAgIE5VTUVSSUMoMTkpICAgIE5PVCBOVUxMLAorICAgIEZPUkVJR04gS0VZIChPUkRFUl9JRCkgUkVGRVJFTkNFUyBPUkRFUlMgKE9SREVSX0lEKSwKKyAgICBGT1JFSUdOIEtFWSAoVkVORE9SX1BBUlRfTlVNQkVSKSBSRUZFUkVOQ0VTIFZFTkRPUl9QQVJUIChWRU5ET1JfUEFSVF9OVU1CRVIpLAorICAgIFBSSU1BUlkgS0VZIChPUkRFUl9JRCwgSVRFTV9JRCkKICk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvb3JkZXJhcHAvc3FsL29yZGVyYXBwX3Bicy5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvb3JkZXJhcHAvc3FsL29yZGVyYXBwX3Bicy5zcWwKaW5kZXggY2Y3NWU4ZC4uOWQyOGQxNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL3NxbC9vcmRlcmFwcF9wYnMuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9vcmRlcmFwcC9zcWwvb3JkZXJhcHBfcGJzLnNxbApAQCAtOCwyMCArOCwyMCBAQAogY29tbWl0OwogCiAvKiBTZWxmLXJlZiB0byBpZGVudGlmeSBCaWxsIG9mIE1hdGVyaWFsIChCT00pCi0gKiBDb21wb3VuZCBQSyAKKyAqIENvbXBvdW5kIFBLCiAgKi8KIGNyZWF0ZSB0YWJsZSBQQVJUICgKLQlQQVJUX05VTUJFUgkJVkFSQ0hBUigxNSkJTk9UIE5VTEwsCi0JUkVWSVNJT04JCU5VTUVSSUMoMikgICAgICBOT1QgTlVMTCwKLQlERVNDUklQVElPTgkJVkFSQ0hBUigyNTUpCU5VTEwsCi0JUkVWSVNJT05fREFURQkJVElNRVNUQU1QICAgICAgIE5PVCBOVUxMLAotCUJPTV9QQVJUX05VTUJFUiAgICAgICAgIFZBUkNIQVIoMTUpCU5VTEwsCi0JQk9NX1JFVklTSU9OCQlOVU1FUklDKDIpICAgICAgTlVMTCwKLQlQUklNQVJZIEtFWSAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKQorICAgIFBBUlRfTlVNQkVSICAgICAgICBWQVJDSEFSKDE1KSAgICBOT1QgTlVMTCwKKyAgICBSRVZJU0lPTiAgICAgICAgTlVNRVJJQygyKSAgICAgIE5PVCBOVUxMLAorICAgIERFU0NSSVBUSU9OICAgICAgICBWQVJDSEFSKDI1NSkgICAgTlVMTCwKKyAgICBSRVZJU0lPTl9EQVRFICAgICAgICBUSU1FU1RBTVAgICAgICAgTk9UIE5VTEwsCisgICAgQk9NX1BBUlRfTlVNQkVSICAgICAgICAgVkFSQ0hBUigxNSkgICAgTlVMTCwKKyAgICBCT01fUkVWSVNJT04gICAgICAgIE5VTUVSSUMoMikgICAgICBOVUxMLAorICAgIFBSSU1BUlkgS0VZIChQQVJUX05VTUJFUiwgUkVWSVNJT04pCiApOwogCiBhbHRlciB0YWJsZSBQQVJUCi0JYWRkIENPTlNUUkFJTlQgRktfMSBGT1JFSUdOIEtFWSAoQk9NX1BBUlRfTlVNQkVSLCBCT01fUkVWSVNJT04pIAorICAgIGFkZCBDT05TVFJBSU5UIEZLXzEgRk9SRUlHTiBLRVkgKEJPTV9QQVJUX05VTUJFUiwgQk9NX1JFVklTSU9OKQogICAgICAgICAgICAgICAgIFJFRkVSRU5DRVMgUEFSVCAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKTsKIAogY29tbWl0OwpAQCAtMzEsNjUgKzMxLDY1IEBACiAgKiBDTE9CIGNvbHVtbiB0eXBlCiAgKi8KIGNyZWF0ZSB0YWJsZSBQQVJUX0RFVEFJTCAoCi0JUEFSVF9OVU1CRVIJVkFSQ0hBUigxNSkJTk9UIE5VTEwsCi0JUkVWSVNJT04JTlVNRVJJQygyKSAgICAgIE5PVCBOVUxMLAotCVNQRUNJRklDQVRJT04JQ0xPQigxMEspCU5VTEwsCi0JRFJBV0lORwkJQkxPQigxMEspCU5VTEwsCi0JUFJJTUFSWSBLRVkgKFBBUlRfTlVNQkVSLCBSRVZJU0lPTikKKyAgICBQQVJUX05VTUJFUiAgICBWQVJDSEFSKDE1KSAgICBOT1QgTlVMTCwKKyAgICBSRVZJU0lPTiAgICBOVU1FUklDKDIpICAgICAgTk9UIE5VTEwsCisgICAgU1BFQ0lGSUNBVElPTiAgICBDTE9CKDEwSykgICAgTlVMTCwKKyAgICBEUkFXSU5HICAgICAgICBCTE9CKDEwSykgICAgTlVMTCwKKyAgICBQUklNQVJZIEtFWSAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKQogKTsKIAogY29tbWl0OwogCiAvKiBQSyBjYW4gYmUgbWFwcGVkIHRvIGEgcHJpbWl0aXZlIFBLIGZpZWxkIHR5cGUgKi8KIGNyZWF0ZSB0YWJsZSBWRU5ET1IgKAotCVZFTkRPUl9JRCAgICAgICBJTlRFR0VSICAgICAgICAJUFJJTUFSWSBLRVksCi0JTkFNRQkJVkFSQ0hBUigzMCkJTk9UIE5VTEwsCi0JQUREUkVTUwkJVkFSQ0hBUigyNTUpCU5PVCBOVUxMLAotCUNPTlRBQ1QJCVZBUkNIQVIoMjU1KQlOT1QgTlVMTCwKLQlQSE9ORQkJVkFSQ0hBUigzMCkJTk9UIE5VTEwKKyAgICBWRU5ET1JfSUQgICAgICAgSU5URUdFUiAgICAgICAgICAgIFBSSU1BUlkgS0VZLAorICAgIE5BTUUgICAgICAgIFZBUkNIQVIoMzApICAgIE5PVCBOVUxMLAorICAgIEFERFJFU1MgICAgICAgIFZBUkNIQVIoMjU1KSAgICBOT1QgTlVMTCwKKyAgICBDT05UQUNUICAgICAgICBWQVJDSEFSKDI1NSkgICAgTk9UIE5VTEwsCisgICAgUEhPTkUgICAgICAgIFZBUkNIQVIoMzApICAgIE5PVCBOVUxMCiApOwogCiBjb21taXQ7CiAKLS8qIENhbiBiZSB1c2VkIGZvciB1bmtub3duIFBLIAorLyogQ2FuIGJlIHVzZWQgZm9yIHVua25vd24gUEsKICAqIDEtMSB0byBQQVJUCiAgKiBDb21wb3VuZCBGSwogICovCiBjcmVhdGUgdGFibGUgVkVORE9SX1BBUlQgKAotCVZFTkRPUl9QQVJUX05VTUJFUglCSUdJTlQgICAgICAgICAgICAgICAgICBQUklNQVJZIEtFWSwKLQlERVNDUklQVElPTgkJVkFSQ0hBUigyNTUpCQlOVUxMLAotCVBSSUNFCQkJRE9VQkxFIFBSRUNJU0lPTiAgICAgICAgTk9UIE5VTEwsCi0JVkVORE9SX0lECQlJTlRFR0VSICAgICAgICAgICAgICAgICBOT1QgTlVMTCwKLQlQQVJUX05VTUJFUgkJVkFSQ0hBUigxNSkJCU5PVCBOVUxMLAotCVBBUlRfUkVWSVNJT04JCU5VTUVSSUMoMikgICAgICAgICAgICAgIE5PVCBOVUxMLAotCUNPTlNUUkFJTlQgRktfMiBGT1JFSUdOIEtFWSAoVkVORE9SX0lEKSBSRUZFUkVOQ0VTIFZFTkRPUiAoVkVORE9SX0lEKSwKLQlDT05TVFJBSU5UIEZLXzMgRk9SRUlHTiBLRVkgKFBBUlRfTlVNQkVSLCBQQVJUX1JFVklTSU9OKSBSRUZFUkVOQ0VTIFBBUlQgKFBBUlRfTlVNQkVSLCBSRVZJU0lPTiksCi0JVU5JUVVFIChQQVJUX05VTUJFUiwgUEFSVF9SRVZJU0lPTikKKyAgICBWRU5ET1JfUEFSVF9OVU1CRVIgICAgQklHSU5UICAgICAgICAgICAgICAgICAgUFJJTUFSWSBLRVksCisgICAgREVTQ1JJUFRJT04gICAgICAgIFZBUkNIQVIoMjU1KSAgICAgICAgTlVMTCwKKyAgICBQUklDRSAgICAgICAgICAgIERPVUJMRSBQUkVDSVNJT04gICAgICAgIE5PVCBOVUxMLAorICAgIFZFTkRPUl9JRCAgICAgICAgSU5URUdFUiAgICAgICAgICAgICAgICAgTk9UIE5VTEwsCisgICAgUEFSVF9OVU1CRVIgICAgICAgIFZBUkNIQVIoMTUpICAgICAgICBOT1QgTlVMTCwKKyAgICBQQVJUX1JFVklTSU9OICAgICAgICBOVU1FUklDKDIpICAgICAgICAgICAgICBOT1QgTlVMTCwKKyAgICBDT05TVFJBSU5UIEZLXzIgRk9SRUlHTiBLRVkgKFZFTkRPUl9JRCkgUkVGRVJFTkNFUyBWRU5ET1IgKFZFTkRPUl9JRCksCisgICAgQ09OU1RSQUlOVCBGS18zIEZPUkVJR04gS0VZIChQQVJUX05VTUJFUiwgUEFSVF9SRVZJU0lPTikgUkVGRVJFTkNFUyBQQVJUIChQQVJUX05VTUJFUiwgUkVWSVNJT04pLAorICAgIFVOSVFVRSAoUEFSVF9OVU1CRVIsIFBBUlRfUkVWSVNJT04pCiApOwogCiBjb21taXQ7CiAKIGNyZWF0ZSB0YWJsZSBPUkRFUlMgKAotCU9SREVSX0lECUlOVEVHRVIgICAgICAgICBQUklNQVJZIEtFWSwKLQlTVEFUVVMJCUNIQVIoMSkJCU5PVCBOVUxMLAotCUxBU1RfVVBEQVRFCVRJTUVTVEFNUCAgICAgICBOT1QgTlVMTCwKLQlESVNDT1VOVAlOVU1FUklDKDIpICAgICAgTk9UIE5VTEwsCi0JU0hJUE1FTlRfSU5GTwlWQVJDSEFSKDI1NSkJTlVMTAorICAgIE9SREVSX0lEICAgIElOVEVHRVIgICAgICAgICBQUklNQVJZIEtFWSwKKyAgICBTVEFUVVMgICAgICAgIENIQVIoMSkgICAgICAgIE5PVCBOVUxMLAorICAgIExBU1RfVVBEQVRFICAgIFRJTUVTVEFNUCAgICAgICBOT1QgTlVMTCwKKyAgICBESVNDT1VOVCAgICBOVU1FUklDKDIpICAgICAgTk9UIE5VTEwsCisgICAgU0hJUE1FTlRfSU5GTyAgICBWQVJDSEFSKDI1NSkgICAgTlVMTAogKTsKIAogY29tbWl0OwogCi0vKiBPdmVybGFwcGluZyBQSy1GSyAKKy8qIE92ZXJsYXBwaW5nIFBLLUZLCiAgKiBVbmktZGlyZWN0aW9uYWwgdG8gVkVORE9SX1BBUlQKICAqLwogY3JlYXRlIHRhYmxlIExJTkVJVEVNICgKLQlPUkRFUl9JRAkJSU5URUdFUiAgICAgICAgIE5PVCBOVUxMLAotCUlURU1fSUQJCQlOVU1FUklDKDMpICAgICAgTk9UIE5VTEwsCi0JUVVBTlRJVFkJCU5VTUVSSUMoMykgICAgICBOT1QgTlVMTCwKLQlWRU5ET1JfUEFSVF9OVU1CRVIJQklHSU5UICAgICAgICAgIE5PVCBOVUxMLAotCUNPTlNUUkFJTlQgRktfNCBGT1JFSUdOIEtFWSAoT1JERVJfSUQpIFJFRkVSRU5DRVMgT1JERVJTIChPUkRFUl9JRCksCi0JQ09OU1RSQUlOVCBGS181IEZPUkVJR04gS0VZIChWRU5ET1JfUEFSVF9OVU1CRVIpIFJFRkVSRU5DRVMgVkVORE9SX1BBUlQgKFZFTkRPUl9QQVJUX05VTUJFUiksCi0JUFJJTUFSWSBLRVkgKE9SREVSX0lELCBJVEVNX0lEKQorICAgIE9SREVSX0lEICAgICAgICBJTlRFR0VSICAgICAgICAgTk9UIE5VTEwsCisgICAgSVRFTV9JRCAgICAgICAgICAgIE5VTUVSSUMoMykgICAgICBOT1QgTlVMTCwKKyAgICBRVUFOVElUWSAgICAgICAgTlVNRVJJQygzKSAgICAgIE5PVCBOVUxMLAorICAgIFZFTkRPUl9QQVJUX05VTUJFUiAgICBCSUdJTlQgICAgICAgICAgTk9UIE5VTEwsCisgICAgQ09OU1RSQUlOVCBGS180IEZPUkVJR04gS0VZIChPUkRFUl9JRCkgUkVGRVJFTkNFUyBPUkRFUlMgKE9SREVSX0lEKSwKKyAgICBDT05TVFJBSU5UIEZLXzUgRk9SRUlHTiBLRVkgKFZFTkRPUl9QQVJUX05VTUJFUikgUkVGRVJFTkNFUyBWRU5ET1JfUEFSVCAoVkVORE9SX1BBUlRfTlVNQkVSKSwKKyAgICBQUklNQVJZIEtFWSAoT1JERVJfSUQsIElURU1fSUQpCiApOwogCiBjb21taXQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvb3JkZXJhcHAvc3FsL29yZGVyYXBwX3BzcWwuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL3NxbC9vcmRlcmFwcF9wc3FsLnNxbAppbmRleCA5ZDI0NzBiLi5jMTA2MjRiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvb3JkZXJhcHAvc3FsL29yZGVyYXBwX3BzcWwuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9vcmRlcmFwcC9zcWwvb3JkZXJhcHBfcHNxbC5zcWwKQEAgLTcsMTcgKzcsMTcgQEAKIERST1AgVEFCTEUgUEFSVCBjYXNjYWRlOwogCiAvKiBTZWxmLXJlZiB0byBpZGVudGlmeSBCaWxsIG9mIE1hdGVyaWFsIChCT00pCi0gKiBDb21wb3VuZCBQSyAKKyAqIENvbXBvdW5kIFBLCiAgKi8KIENSRUFURSBUQUJMRSBQQVJUICgKLQlQQVJUX05VTUJFUgkJVkFSQ0hBUigxNSkJTk9UIE5VTEwsCi0JREVTQ1JJUFRJT04JCVZBUkNIQVIoMjU1KQlOVUxMLAotCVJFVklTSU9OCQlOVU1FUklDKDIpCU5PVCBOVUxMLAotCVJFVklTSU9OX0RBVEUJCVRJTUVTVEFNUAlOT1QgTlVMTCwKLQlCT01fUEFSVF9OVU1CRVIJCVZBUkNIQVIoMTUpCU5VTEwsCi0JQk9NX1JFVklTSU9OCQlOVU1FUklDKDIpCU5VTEwsCi0JUFJJTUFSWSBLRVkgKFBBUlRfTlVNQkVSLCBSRVZJU0lPTiksCi0JRk9SRUlHTiBLRVkgKEJPTV9QQVJUX05VTUJFUiwgQk9NX1JFVklTSU9OKSBSRUZFUkVOQ0VTIFBBUlQgKFBBUlRfTlVNQkVSLCBSRVZJU0lPTikgCisgICAgUEFSVF9OVU1CRVIgICAgICAgIFZBUkNIQVIoMTUpICAgIE5PVCBOVUxMLAorICAgIERFU0NSSVBUSU9OICAgICAgICBWQVJDSEFSKDI1NSkgICAgTlVMTCwKKyAgICBSRVZJU0lPTiAgICAgICAgTlVNRVJJQygyKSAgICBOT1QgTlVMTCwKKyAgICBSRVZJU0lPTl9EQVRFICAgICAgICBUSU1FU1RBTVAgICAgTk9UIE5VTEwsCisgICAgQk9NX1BBUlRfTlVNQkVSICAgICAgICBWQVJDSEFSKDE1KSAgICBOVUxMLAorICAgIEJPTV9SRVZJU0lPTiAgICAgICAgTlVNRVJJQygyKSAgICBOVUxMLAorICAgIFBSSU1BUlkgS0VZIChQQVJUX05VTUJFUiwgUkVWSVNJT04pLAorICAgIEZPUkVJR04gS0VZIChCT01fUEFSVF9OVU1CRVIsIEJPTV9SRVZJU0lPTikgUkVGRVJFTkNFUyBQQVJUIChQQVJUX05VTUJFUiwgUkVWSVNJT04pCiApOwogCiAKQEAgLTI1LDU2ICsyNSw1NiBAQAogICogQllURUEgY29sdW1uIHR5cGUKICAqIENMT0IgY29sdW1uIHR5cGUgKi8KIENSRUFURSBUQUJMRSBQQVJUX0RFVEFJTCAoCi0JUEFSVF9OVU1CRVIJVkFSQ0hBUigxNSkJTk9UIE5VTEwsCi0JUkVWSVNJT04JTlVNRVJJQygyKQlOT1QgTlVMTCwKLQlTUEVDSUZJQ0FUSU9OCVRFWFQJCU5VTEwsCi0JRFJBV0lORwkJQllURUEJCU5VTEwsCi0JUFJJTUFSWSBLRVkgKFBBUlRfTlVNQkVSLCBSRVZJU0lPTikKKyAgICBQQVJUX05VTUJFUiAgICBWQVJDSEFSKDE1KSAgICBOT1QgTlVMTCwKKyAgICBSRVZJU0lPTiAgICBOVU1FUklDKDIpICAgIE5PVCBOVUxMLAorICAgIFNQRUNJRklDQVRJT04gICAgVEVYVCAgICAgICAgTlVMTCwKKyAgICBEUkFXSU5HICAgICAgICBCWVRFQSAgICAgICAgTlVMTCwKKyAgICBQUklNQVJZIEtFWSAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKQogKTsKIAogLyogUEsgY2FuIGJlIG1hcHBlZCB0byBhIHByaW1pdGl2ZSBQSyBmaWVsZCB0eXBlICovCiBDUkVBVEUgVEFCTEUgVkVORE9SICgKLQlWRU5ET1JfSUQJSU5URUdFUgkJUFJJTUFSWSBLRVksCi0JTkFNRQkJVkFSQ0hBUigzMCkJTk9UIE5VTEwsCi0JQUREUkVTUwkJVkFSQ0hBUigyNTUpCU5PVCBOVUxMLAotCUNPTlRBQ1QJCVZBUkNIQVIoMjU1KQlOT1QgTlVMTCwKLQlQSE9ORQkJVkFSQ0hBUigzMCkJTk9UIE5VTEwKKyAgICBWRU5ET1JfSUQgICAgSU5URUdFUiAgICAgICAgUFJJTUFSWSBLRVksCisgICAgTkFNRSAgICAgICAgVkFSQ0hBUigzMCkgICAgTk9UIE5VTEwsCisgICAgQUREUkVTUyAgICAgICAgVkFSQ0hBUigyNTUpICAgIE5PVCBOVUxMLAorICAgIENPTlRBQ1QgICAgICAgIFZBUkNIQVIoMjU1KSAgICBOT1QgTlVMTCwKKyAgICBQSE9ORSAgICAgICAgVkFSQ0hBUigzMCkgICAgTk9UIE5VTEwKICk7CiAKLS8qIENhbiBiZSB1c2VkIGZvciB1bmtub3duIFBLIAorLyogQ2FuIGJlIHVzZWQgZm9yIHVua25vd24gUEsKICAqIDEtMSB0byBQQVJUCiAgKiBDb21wb3VuZCBGSwogICovCiBDUkVBVEUgVEFCTEUgVkVORE9SX1BBUlQgKAotCVZFTkRPUl9QQVJUX05VTUJFUglOVU1FUklDKDE5KQkJUFJJTUFSWSBLRVksCi0JREVTQ1JJUFRJT04JCVZBUkNIQVIoMjU1KQkJTlVMTCwKLQlQUklDRQkJCURPVUJMRSBQUkVDSVNJT04JTk9UIE5VTEwsCi0JVkVORE9SX0lECQlJTlRFR0VSCQkJTk9UIE5VTEwsCi0JUEFSVF9OVU1CRVIJCVZBUkNIQVIoMTUpCQlOT1QgTlVMTCwKLQlQQVJUX1JFVklTSU9OCQlOVU1FUklDKDIpCQlOT1QgTlVMTCwKLQlGT1JFSUdOIEtFWSAoVkVORE9SX0lEKSBSRUZFUkVOQ0VTIFZFTkRPUiAoVkVORE9SX0lEKSwKLQlGT1JFSUdOIEtFWSAoUEFSVF9OVU1CRVIsIFBBUlRfUkVWSVNJT04pIFJFRkVSRU5DRVMgUEFSVCAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKSwKLQlVTklRVUUgKFBBUlRfTlVNQkVSLCBQQVJUX1JFVklTSU9OKQorICAgIFZFTkRPUl9QQVJUX05VTUJFUiAgICBOVU1FUklDKDE5KSAgICAgICAgUFJJTUFSWSBLRVksCisgICAgREVTQ1JJUFRJT04gICAgICAgIFZBUkNIQVIoMjU1KSAgICAgICAgTlVMTCwKKyAgICBQUklDRSAgICAgICAgICAgIERPVUJMRSBQUkVDSVNJT04gICAgTk9UIE5VTEwsCisgICAgVkVORE9SX0lEICAgICAgICBJTlRFR0VSICAgICAgICAgICAgTk9UIE5VTEwsCisgICAgUEFSVF9OVU1CRVIgICAgICAgIFZBUkNIQVIoMTUpICAgICAgICBOT1QgTlVMTCwKKyAgICBQQVJUX1JFVklTSU9OICAgICAgICBOVU1FUklDKDIpICAgICAgICBOT1QgTlVMTCwKKyAgICBGT1JFSUdOIEtFWSAoVkVORE9SX0lEKSBSRUZFUkVOQ0VTIFZFTkRPUiAoVkVORE9SX0lEKSwKKyAgICBGT1JFSUdOIEtFWSAoUEFSVF9OVU1CRVIsIFBBUlRfUkVWSVNJT04pIFJFRkVSRU5DRVMgUEFSVCAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKSwKKyAgICBVTklRVUUgKFBBUlRfTlVNQkVSLCBQQVJUX1JFVklTSU9OKQogKTsKIAogQ1JFQVRFIFRBQkxFIE9SREVSUyAoCi0JT1JERVJfSUQJSU5URUdFUgkJUFJJTUFSWSBLRVksCi0JU1RBVFVTCQlDSEFSKDEpCQlOT1QgTlVMTCwKLQlMQVNUX1VQREFURQlUSU1FU1RBTVAJTk9UIE5VTEwsCi0JRElTQ09VTlQJTlVNRVJJQygyKQlOT1QgTlVMTCwKLQlTSElQTUVOVF9JTkZPCVZBUkNIQVIoMjU1KQlOVUxMCisgICAgT1JERVJfSUQgICAgSU5URUdFUiAgICAgICAgUFJJTUFSWSBLRVksCisgICAgU1RBVFVTICAgICAgICBDSEFSKDEpICAgICAgICBOT1QgTlVMTCwKKyAgICBMQVNUX1VQREFURSAgICBUSU1FU1RBTVAgICAgTk9UIE5VTEwsCisgICAgRElTQ09VTlQgICAgTlVNRVJJQygyKSAgICBOT1QgTlVMTCwKKyAgICBTSElQTUVOVF9JTkZPICAgIFZBUkNIQVIoMjU1KSAgICBOVUxMCiApOwogCi0vKiBPdmVybGFwcGluZyBQSy1GSyAKKy8qIE92ZXJsYXBwaW5nIFBLLUZLCiAgKiBVbmktZGlyZWN0aW9uYWwgdG8gVkVORE9SX1BBUlQgKi8KIENSRUFURSBUQUJMRSBMSU5FSVRFTSAoCi0JT1JERVJfSUQJCUlOVEVHRVIJCU5PVCBOVUxMLAotCUlURU1fSUQJCQlOVU1FUklDKDMpCU5PVCBOVUxMLAotCVFVQU5USVRZCQlOVU1FUklDKDMpCU5PVCBOVUxMLAotCVZFTkRPUl9QQVJUX05VTUJFUglOVU1FUklDKDE5KQlOT1QgTlVMTCwKLQlGT1JFSUdOIEtFWSAoT1JERVJfSUQpIFJFRkVSRU5DRVMgT1JERVJTIChPUkRFUl9JRCksCi0JRk9SRUlHTiBLRVkgKFZFTkRPUl9QQVJUX05VTUJFUikgUkVGRVJFTkNFUyBWRU5ET1JfUEFSVCAoVkVORE9SX1BBUlRfTlVNQkVSKSwKLQlQUklNQVJZIEtFWSAoT1JERVJfSUQsIElURU1fSUQpCisgICAgT1JERVJfSUQgICAgICAgIElOVEVHRVIgICAgICAgIE5PVCBOVUxMLAorICAgIElURU1fSUQgICAgICAgICAgICBOVU1FUklDKDMpICAgIE5PVCBOVUxMLAorICAgIFFVQU5USVRZICAgICAgICBOVU1FUklDKDMpICAgIE5PVCBOVUxMLAorICAgIFZFTkRPUl9QQVJUX05VTUJFUiAgICBOVU1FUklDKDE5KSAgICBOT1QgTlVMTCwKKyAgICBGT1JFSUdOIEtFWSAoT1JERVJfSUQpIFJFRkVSRU5DRVMgT1JERVJTIChPUkRFUl9JRCksCisgICAgRk9SRUlHTiBLRVkgKFZFTkRPUl9QQVJUX05VTUJFUikgUkVGRVJFTkNFUyBWRU5ET1JfUEFSVCAoVkVORE9SX1BBUlRfTlVNQkVSKSwKKyAgICBQUklNQVJZIEtFWSAoT1JERVJfSUQsIElURU1fSUQpCiApOwogCiBxdWl0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL3NxbC9vcmRlcmFwcF9zeWIuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL29yZGVyYXBwL3NxbC9vcmRlcmFwcF9zeWIuc3FsCmluZGV4IDZjNGY2MGMuLjdmZjMwNjAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9vcmRlcmFwcC9zcWwvb3JkZXJhcHBfc3liLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvb3JkZXJhcHAvc3FsL29yZGVyYXBwX3N5Yi5zcWwKQEAgLTIzLDcgKzIzLDcgQEAKIGdvCiAKIGFsdGVyIHRhYmxlIFBBUlQKLSAgICAgICAgYWRkIENPTlNUUkFJTlQgRktfMSBGT1JFSUdOIEtFWSAoQk9NX1BBUlRfTlVNQkVSLCBCT01fUkVWSVNJT04pIAorICAgICAgICBhZGQgQ09OU1RSQUlOVCBGS18xIEZPUkVJR04gS0VZIChCT01fUEFSVF9OVU1CRVIsIEJPTV9SRVZJU0lPTikKICAgICAgICAgICAgICAgICBSRUZFUkVOQ0VTIFBBUlQgKFBBUlRfTlVNQkVSLCBSRVZJU0lPTikKIAogZ28KQEAgLTQzLDcgKzQzLDcgQEAKIAogLyogUEsgY2FuIGJlIG1hcHBlZCB0byBhIHByaW1pdGl2ZSBQSyBmaWVsZCB0eXBlICovCiBjcmVhdGUgdGFibGUgVkVORE9SICgKLSAgICAgICAgVkVORE9SX0lEICAgICAgIElOVEVHRVIgICAgICAgICBOT1QgTlVMTCwgCisgICAgICAgIFZFTkRPUl9JRCAgICAgICBJTlRFR0VSICAgICAgICAgTk9UIE5VTEwsCiAgICAgICAgIE5BTUUgICAgICAgICAgICBWQVJDSEFSKDMwKSAgICAgTk9UIE5VTEwsCiAgICAgICAgIEFERFJFU1MgICAgICAgICBWQVJDSEFSKDI1NSkgICAgTk9UIE5VTEwsCiAgICAgICAgIENPTlRBQ1QgICAgICAgICBWQVJDSEFSKDI1NSkgICAgTk9UIE5VTEwsCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjBlNDVlYi4uMjlhYjU1MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMzAgKzE1LDMwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJQYXJ0U3VwcGxpZXIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1jbXAtbWFwcGluZ3MueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tY21wLW1hcHBpbmdzLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiCiAgICAgICAgIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIKICAgICAgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJwYXJ0c3VwcGxpZXIueG1sIgotCXZhbHVlPSJkZXNjcmlwdG9yL3BhcnRzdXBwbGllci54bWwiLz4KKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9wYXJ0c3VwcGxpZXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0icHMueG1sIgotCXZhbHVlPSJkZXNjcmlwdG9yL3BzLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvcHMueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0id2FyLmZpbGUiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS53YXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvYnVpbGQueG1sCmluZGV4IDYyYzgzOWYuLmRkYmI1MDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00MiwyMCArNDIsMjAgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+Ci0JPC9hbnRjYWxsPgorICAgIDwvYW50Y2FsbD4KIAotCSA8L3RhcmdldD4KKyAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiCi0JICAgICAgdmFsdWU9IioqL1NlcnZsZXQuY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiCisgICAgICAgICAgdmFsdWU9IioqL1NlcnZsZXQuY2xhc3MiIC8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyxTUC5kYnNjaGVtYSIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9Mb2NhbFBhcnRzSG9tZS5jbGFzcywqKi9Mb2NhbFBhcnRzLmNsYXNzLCoqL0xvY2FsU3VwcGxpZXJzSG9tZS5jbGFzcywqKi9Mb2NhbFN1cHBsaWVycy5jbGFzcywqKi9TUFNlc3Npb25Ib21lLmNsYXNzLCoqL1NQU2Vzc2lvbi5jbGFzcywqKi9TdXBwbGllcnNLZXkuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KIApAQCAtNjMsMTYgKzYzLDE2IEBACiAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iUHJlcGFyaW5nIGVhciBmaWxlIHdpdGggcHJvcGVyIHhtbCBmaWxlcyIgLz4KICAgICAgICAgPHVuamFyIHNyYz0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiBkZXN0PSIke1RFTVBESVJ9IiBvdmVyd3JpdGU9InRydWUiIC8+Ci0gICAgCTxlY2hvIG1lc3NhZ2U9IkNvcHlpbmcgeG1sIGZpbGUgdG8gdGhlIGVhciIgLz4KLQk8Y29weSBmaWxlPSIke3BhcnRzdXBwbGllci54bWx9IiB0b2Rpcj0iJHtURU1QRElSfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0JPGNvcHkgZmlsZT0iJHtwcy54bWx9IiB0b2Rpcj0iJHtURU1QRElSfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkNvcHlpbmcgeG1sIGZpbGUgdG8gdGhlIGVhciIgLz4KKyAgICA8Y29weSBmaWxlPSIke3BhcnRzdXBwbGllci54bWx9IiB0b2Rpcj0iJHtURU1QRElSfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgPGNvcHkgZmlsZT0iJHtwcy54bWx9IiB0b2Rpcj0iJHtURU1QRElSfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgogICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtURU1QRElSfSIgLz4KICAgICAgICA8L2phcj4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9wYXJ0U3VwcGxpZXJfZGVyYnkuc3FsIi8+CkBAIC05MSwyMiArOTEsMjIgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iJHtiYXNlZGlyfS8uLi9jb21tb24vZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wYXJ0U3VwcGxpZXJfZGVyYnkuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGFsbAogICAgICAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDg4NzVmMjMuLjYyODc1ZTAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMywxMiArMzMsMTIgQEAKICAqIEB2ZXJzaW9uCiAgKi8KIHB1YmxpYyBjbGFzcyBDbGllbnQgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1RBUlQiKTsKICAgICAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oInBhcnRTdXBwbGllciIpOwpAQCAtNzYsNSArNzYsNSBAQAogICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJwYXJ0U3VwcGxpZXIiKTsKIAogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggMGIzMGRlOS4uZDI1OGQzYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yNCwxNCArMjQsMTQgQEAKICAgPGVqYj4KICAgICAgIDxlamItbmFtZT5QYXJ0czwvZWpiLW5hbWU+CiAgICAgICA8am5kaS1uYW1lPlNpbXBsZVBhcnRzPC9qbmRpLW5hbWU+Ci0JPHJlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+NjAwPC9yZWZyZXNoLXBlcmlvZC1pbi1zZWNvbmRzPgotCTxiZWFuLWNhY2hlPgotCQk8bWF4LWNhY2hlLXNpemU+NjA8L21heC1jYWNoZS1zaXplPgotCQk8aXMtY2FjaGUtb3ZlcmZsb3ctYWxsb3dlZD50cnVlPC9pcy1jYWNoZS1vdmVyZmxvdy1hbGxvd2VkPgotCQk8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjAwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KLQkJPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjYwMDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgotCQk8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+RklGTzwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+Ci0JPC9iZWFuLWNhY2hlPgorICAgIDxyZWZyZXNoLXBlcmlvZC1pbi1zZWNvbmRzPjYwMDwvcmVmcmVzaC1wZXJpb2QtaW4tc2Vjb25kcz4KKyAgICA8YmVhbi1jYWNoZT4KKyAgICAgICAgPG1heC1jYWNoZS1zaXplPjYwPC9tYXgtY2FjaGUtc2l6ZT4KKyAgICAgICAgPGlzLWNhY2hlLW92ZXJmbG93LWFsbG93ZWQ+dHJ1ZTwvaXMtY2FjaGUtb3ZlcmZsb3ctYWxsb3dlZD4KKyAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwMDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICAgIDxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz42MDAwPC9yZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkZJRk88L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgorICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KICAgICA8ZWpiPgogICAgICAgICA8ZWpiLW5hbWU+U3VwcGxpZXJzPC9lamItbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvZWpiL0xvY2FsUGFydHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvZWpiL0xvY2FsUGFydHMuamF2YQppbmRleCAzNDZiNmVlLi43NmRiYzljIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL2VqYi9Mb2NhbFBhcnRzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9lamIvTG9jYWxQYXJ0cy5qYXZhCkBAIC0yNSwxNCArMjUsMTQgQEAKICAqLwogCiBwdWJsaWMgaW50ZXJmYWNlIExvY2FsUGFydHMgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJMb2NhbE9iamVjdCB7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhZGRTdXBwbGllcihEYXRhLkxvY2FsU3VwcGxpZXJzIHN1cHBsaWVyKTsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRyb3BTdXBwbGllcihEYXRhLkxvY2FsU3VwcGxpZXJzIHN1cHBsaWVyKTsKLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldE5hbWUoKTsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHRlc3RJbkNhc2NhZGVEZWxldGUoKTsKLSAgICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL2VqYi9Mb2NhbFBhcnRzSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9lamIvTG9jYWxQYXJ0c0hvbWUuamF2YQppbmRleCBmNDM0MTkxLi4wYzM1MzdhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL2VqYi9Mb2NhbFBhcnRzSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvZWpiL0xvY2FsUGFydHNIb21lLmphdmEKQEAgLTI1LDE0ICsyNSwxNCBAQAogICovCiAKIHB1YmxpYyBpbnRlcmZhY2UgTG9jYWxQYXJ0c0hvbWUgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJMb2NhbEhvbWUgewotICAgIAorCiAgICAgcHVibGljIERhdGEuTG9jYWxQYXJ0cyBmaW5kQnlQcmltYXJ5S2V5KGphdmEubGFuZy5JbnRlZ2VyIGFLZXkpCiAgICAgdGhyb3dzIGpha2FydGEuZWpiLkZpbmRlckV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBMb2NhbFBhcnRzIGNyZWF0ZShqYXZhLmxhbmcuSW50ZWdlciBwYXJ0aWQsIGphdmEubGFuZy5TdHJpbmcgbmFtZSwgamF2YS5sYW5nLlN0cmluZyBjb2xvciwgamF2YS5tYXRoLkJpZ0RlY2ltYWwgd2VpZ2h0LCBqYXZhLmxhbmcuRG91YmxlIHByaWNlKSB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIGphdmEudXRpbC5Db2xsZWN0aW9uIGZpbmRBbGwoKSB0aHJvd3MgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIGphdmEudXRpbC5Db2xsZWN0aW9uIGZpbmRCeVBhcnRzTmFtZShqYXZhLmxhbmcuU3RyaW5nIG5hbWUpIHRocm93cyBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvZWpiL0xvY2FsU3VwcGxpZXJzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL2VqYi9Mb2NhbFN1cHBsaWVycy5qYXZhCmluZGV4IDI1ZmViODUuLjFmNzg2MDIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvZWpiL0xvY2FsU3VwcGxpZXJzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9lamIvTG9jYWxTdXBwbGllcnMuamF2YQpAQCAtMjUsNiArMjUsNiBAQAogICovCiAKIHB1YmxpYyBpbnRlcmZhY2UgTG9jYWxTdXBwbGllcnMgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJMb2NhbE9iamVjdCB7Ci0gICAgCisKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9lamIvTG9jYWxTdXBwbGllcnNIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL2VqYi9Mb2NhbFN1cHBsaWVyc0hvbWUuamF2YQppbmRleCA5ZjIzNjY5Li44MjdhOGFjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL2VqYi9Mb2NhbFN1cHBsaWVyc0hvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL2VqYi9Mb2NhbFN1cHBsaWVyc0hvbWUuamF2YQpAQCAtMjUsMTIgKzI1LDEyIEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBMb2NhbFN1cHBsaWVyc0hvbWUgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJMb2NhbEhvbWUgewotICAgIAorCiAgICAgcHVibGljIERhdGEuTG9jYWxTdXBwbGllcnMgZmluZEJ5UHJpbWFyeUtleShEYXRhLlN1cHBsaWVyc0tleSBhS2V5KQogICAgIHRocm93cyBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgTG9jYWxTdXBwbGllcnMgY3JlYXRlKGphdmEubGFuZy5JbnRlZ2VyIHBhcnRpZCwgamF2YS5sYW5nLkludGVnZXIgc3VwcGxpZXJpZCwgamF2YS5sYW5nLlN0cmluZyBuYW1lLCBpbnQgc3RhdHVzLCBqYXZhLmxhbmcuU3RyaW5nIGNpdHkpIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS51dGlsLkNvbGxlY3Rpb24gZmluZEFsbCgpIHRocm93cyBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvZWpiL1BhcnRzQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9lamIvUGFydHNCZWFuLmphdmEKaW5kZXggN2NjZGJmYy4uMzRiYzUwMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9lamIvUGFydHNCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9lamIvUGFydHNCZWFuLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgRGF0YTsKIAogaW1wb3J0IGpha2FydGEuZWpiLio7Ci1pbXBvcnQgamF2YS51dGlsLio7IAoraW1wb3J0IGphdmEudXRpbC4qOwogCiAvKioKICAqIENyZWF0ZWQgRGVjIDE2LCAyMDAyIDE6MjI6MTQgUE0KQEAgLTI3LDg0ICsyNyw4NCBAQAogCiAKIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBQYXJ0c0JlYW4gaW1wbGVtZW50cyBqYWthcnRhLmVqYi5FbnRpdHlCZWFuIHsKLSAgICAKKwogICAgIHByaXZhdGUgamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCBjb250ZXh0OwotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jc2V0RW50aXR5Q29udGV4dChqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0KQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCBhQ29udGV4dCkgewogICAgICAgICBjb250ZXh0PWFDb250ZXh0OwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYkFjdGl2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJQYXNzaXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJSZW1vdmUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiN1bnNldEVudGl0eUNvbnRleHQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsKICAgICAgICAgY29udGV4dD1udWxsOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYkxvYWQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiU3RvcmUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuSW50ZWdlciBnZXRQYXJ0aWQoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRQYXJ0aWQoamF2YS5sYW5nLkludGVnZXIgcGFydGlkKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuU3RyaW5nIGdldE5hbWUoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXROYW1lKGphdmEubGFuZy5TdHJpbmcgbmFtZSk7Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLlN0cmluZyBnZXRDb2xvcigpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldENvbG9yKGphdmEubGFuZy5TdHJpbmcgY29sb3IpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IGphdmEubWF0aC5CaWdEZWNpbWFsIGdldFdlaWdodCgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFdlaWdodChqYXZhLm1hdGguQmlnRGVjaW1hbCB3ZWlnaHQpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5Eb3VibGUgZ2V0UHJpY2UoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRQcmljZShqYXZhLmxhbmcuRG91YmxlIHByaWNlKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBqYXZhLnV0aWwuQ29sbGVjdGlvbiBnZXRTdXBwbGllcnMoKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFN1cHBsaWVycyhqYXZhLnV0aWwuQ29sbGVjdGlvbiBzdXBwbGllcnMpOwotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5JbnRlZ2VyIGVqYkNyZWF0ZShqYXZhLmxhbmcuSW50ZWdlciBwYXJ0aWQsIGphdmEubGFuZy5TdHJpbmcgbmFtZSwgamF2YS5sYW5nLlN0cmluZyBjb2xvciwgamF2YS5tYXRoLkJpZ0RlY2ltYWwgd2VpZ2h0LCBqYXZhLmxhbmcuRG91YmxlIHByaWNlKSB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIHsKICAgICAgICAgaWYgKHBhcnRpZCA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uKCJUaGUgcGFydGlkIGlzIHJlcXVpcmVkLiIpOwpAQCAtMTE3LDExICsxMTcsMTEgQEAKIAogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKGphdmEubGFuZy5JbnRlZ2VyIHBhcnRpZCwgamF2YS5sYW5nLlN0cmluZyBuYW1lLCBqYXZhLmxhbmcuU3RyaW5nIGNvbG9yLCBqYXZhLm1hdGguQmlnRGVjaW1hbCB3ZWlnaHQsIGphdmEubGFuZy5Eb3VibGUgcHJpY2UpIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24gewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFkZFN1cHBsaWVyKERhdGEuTG9jYWxTdXBwbGllcnMgc3VwcGxpZXIpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWJ1ZyA6IFBhcnRzQmVhbiBhZGRTdXBwbGllciIpOwogICAgICAgICBpZiAoc3VwcGxpZXIgIT0gbnVsbCkKQEAgLTEzNCw3ICsxMzQsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZHJvcFN1cHBsaWVyKERhdGEuTG9jYWxTdXBwbGllcnMgc3VwcGxpZXIpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWJ1ZyA6IFBhcnRzQmVhbiBkcm9wU3VwcGxpZXIiKTsKICAgICAgICAgdHJ5IHsKQEAgLTE0NCw5ICsxNDQsOSBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdGVzdEluQ2FzY2FkZURlbGV0ZSgpIHsKICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNhbGxlZCB0ZXN0SW5DYXNjYWRlRGVsZXRlISEhIik7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL2VqYi9TUFNlc3Npb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvZWpiL1NQU2Vzc2lvbi5qYXZhCmluZGV4IGNkOTA3Y2MuLjk4YTFmNzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvZWpiL1NQU2Vzc2lvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvZWpiL1NQU2Vzc2lvbi5qYXZhCkBAIC0yNSwxNiArMjUsMTYgQEAKICAqLwogCiBwdWJsaWMgaW50ZXJmYWNlIFNQU2Vzc2lvbiBleHRlbmRzIGpha2FydGEuZWpiLkVKQk9iamVjdCB7Ci0gICAgCisKICAgICBwdWJsaWMgaW50IGNoZWNrQWxsUGFydHMoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIGludCBjaGVja0FsbFN1cHBsaWVycygpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0c0FuZFN1cHBsaWVycygpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCByZW1vdmVQYXJ0KGphdmEubGFuZy5JbnRlZ2VyIHBhcnRpZCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHJlbW92ZVN1cHBsaWVyKGphdmEubGFuZy5JbnRlZ2VyIHBhcnRpZCwgamF2YS5sYW5nLkludGVnZXIgc3VwcGxpZXJpZCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL2VqYi9TUFNlc3Npb25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL2VqYi9TUFNlc3Npb25CZWFuLmphdmEKaW5kZXggMmE4OTFkYS4uYWM4NTUxMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9lamIvU1BTZXNzaW9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvZWpiL1NQU2Vzc2lvbkJlYW4uamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBEYXRhOwogCiBpbXBvcnQgamFrYXJ0YS5lamIuKjsKLWltcG9ydCBqYXZheC5uYW1pbmcuKjsgCitpbXBvcnQgamF2YXgubmFtaW5nLio7CiAKIAogLyoqCkBAIC0zMSw0MCArMzEsNDAgQEAKICAgICBwcml2YXRlIGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0IGNvbnRleHQ7CiAgICAgcHJpdmF0ZSBMb2NhbFN1cHBsaWVyc0hvbWUgc3VwcGxpZXJzSG9tZSA9IG51bGw7CiAgICAgcHJpdmF0ZSBMb2NhbFBhcnRzSG9tZSBwYXJ0c0hvbWUgPSBudWxsOwotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLlNlc3Npb25CZWFuI3NldFNlc3Npb25Db250ZXh0KGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0KQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0IGFDb250ZXh0KSB7CiAgICAgICAgIGNvbnRleHQ9YUNvbnRleHQ7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLlNlc3Npb25CZWFuI2VqYkFjdGl2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW4jZWpiUGFzc2l2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLlNlc3Npb25CZWFuI2VqYlJlbW92ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogU2VlIHNlY3Rpb24gNy4xMC4zIG9mIHRoZSBFSkIgMi4wIHNwZWNpZmljYXRpb24KICAgICAgKi8KQEAgLTc3LDIxICs3NywyMSBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IENyZWF0ZUV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBMb2NhbFN1cHBsaWVyc0hvbWUgbG9va3VwU3VwcGxpZXJzKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVidWc6IFNQU2Vzc2lvbiBsb29rdXBTdXBwbGllcnMiKTsKICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU3VwcGxpZXJzIik7CiAgICAgICAgIHJldHVybiAoTG9jYWxTdXBwbGllcnNIb21lKSBvYmpyZWY7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBMb2NhbFBhcnRzSG9tZSBsb29rdXBQYXJ0cygpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlYnVnOiBTUFNlc3Npb24gbG9va3VwUGFydHMiKTsKICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlUGFydHMiKTsKICAgICAgICAgcmV0dXJuIChMb2NhbFBhcnRzSG9tZSkgb2JqcmVmOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBpbnQgY2hlY2tBbGxQYXJ0cygpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWJ1ZzogU1BTZXNzaW9uQmVhbiBnZXRBbGxQYXJ0cyIpOwogICAgICAgICBqYXZhLnV0aWwuQ29sbGVjdGlvbiBwYXJ0cyA9IG51bGw7CkBAIC0xMDMsNyArMTAzLDcgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcGFydHMuc2l6ZSgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBpbnQgY2hlY2tBbGxTdXBwbGllcnMoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVidWc6IFNQU2Vzc2lvbkJlYW4gZ2V0QWxsU3VwcGxpZXJzIik7CiAgICAgICAgIGphdmEudXRpbC5Db2xsZWN0aW9uIHN1cHBsaWVycyA9IG51bGw7CkBAIC0xMTUsNyArMTE1LDcgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc3VwcGxpZXJzLnNpemUoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0c0FuZFN1cHBsaWVycygpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnNlcnREYXRhIik7CkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICAgICAgICAgIGphdmEubGFuZy5JbnRlZ2VyIHN1cHBsaWVyaWQxPSBuZXcgamF2YS5sYW5nLkludGVnZXIoMTAzKTsKICAgICAgICAgICAgIGphdmEubGFuZy5JbnRlZ2VyIHN1cHBsaWVyaWQyPSBuZXcgamF2YS5sYW5nLkludGVnZXIoMTQ1KTsKICAgICAgICAgICAgIGphdmEubGFuZy5JbnRlZ2VyIHN1cHBsaWVyaWQzPSBuZXcgamF2YS5sYW5nLkludGVnZXIoMTIyKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBwYXJ0c0hvbWUuY3JlYXRlKHBhcnRpZDEsInBhcnRuYW1lMSIsInJlZCIsIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbCg0NSksIG5ldyBqYXZhLmxhbmcuRG91YmxlKDk5KSk7CiAgICAgICAgICAgICBwYXJ0c0hvbWUuY3JlYXRlKHBhcnRpZDIsInBhcnRuYW1lMiIsImJsdWUiLCBuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwoMzcpLCBuZXcgamF2YS5sYW5nLkRvdWJsZSg1MCkpOwogICAgICAgICAgICAgcGFydHNIb21lLmNyZWF0ZShwYXJ0aWQzLCJwYXJ0bmFtZTMiLCJncmVlbiIsIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbCgyMjIpLCBuZXcgamF2YS5sYW5nLkRvdWJsZSg2NSkpOwpAQCAtMTQwLDcgKzE0MCw3IEBACiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHJlbW92ZVBhcnQoamF2YS5sYW5nLkludGVnZXIgcGFydGlkKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVidWc6IFNQU2Vzc2lvbiByZW1vdmVQYXJ0Iik7CiAgICAgICAgIHRyeSB7CkBAIC0xNTIsNyArMTUyLDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHJlbW92ZVN1cHBsaWVyKGphdmEubGFuZy5JbnRlZ2VyIHBhcnRpZCwgamF2YS5sYW5nLkludGVnZXIgc3VwcGxpZXJpZCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlYnVnOiBTUFNlc3Npb24gcmVtb3ZlU3VwcGxpZXIiKTsKICAgICAgICAgdHJ5IHsKQEAgLTE2Nyw1ICsxNjcsNSBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL2VqYi9TUFNlc3Npb25Ib21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL2VqYi9TUFNlc3Npb25Ib21lLmphdmEKaW5kZXggYTQ4MGQ4MS4uYjk2ZGZiYyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9lamIvU1BTZXNzaW9uSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvZWpiL1NQU2Vzc2lvbkhvbWUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogICovCiAKIHB1YmxpYyBpbnRlcmZhY2UgU1BTZXNzaW9uSG9tZSBleHRlbmRzIGpha2FydGEuZWpiLkVKQkhvbWUgewotICAgIAorCiAgICAgcHVibGljIERhdGEuU1BTZXNzaW9uIGNyZWF0ZSgpCiAgICAgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiwgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL2VqYi9TdXBwbGllcnNCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL2VqYi9TdXBwbGllcnNCZWFuLmphdmEKaW5kZXggZmVhZTNiMy4uMGFhMTU1YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9lamIvU3VwcGxpZXJzQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvZWpiL1N1cHBsaWVyc0JlYW4uamF2YQpAQCAtMjYsMzUgKzI2LDM1IEBACiAKIAogcHVibGljIGFic3RyYWN0IGNsYXNzIFN1cHBsaWVyc0JlYW4gaW1wbGVtZW50cyBqYWthcnRhLmVqYi5FbnRpdHlCZWFuIHsKLSAgICAKKwogICAgIHByaXZhdGUgamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCBjb250ZXh0OwogICAgIHByaXZhdGUgTG9jYWxQYXJ0cyBwYXJ0MDsKLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI3NldEVudGl0eUNvbnRleHQoamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQgYUNvbnRleHQpIHsKICAgICAgICAgY29udGV4dD1hQ29udGV4dDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJBY3RpdmF0ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUGFzc2l2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUmVtb3ZlKCkKICAgICAgKi8KQEAgLTY4LDUwICs2OCw1MCBAQAogICAgICAgICB9CiAgICAgICAgIC8vcGFydDAudGVzdEluQ2FzY2FkZURlbGV0ZSgpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI3Vuc2V0RW50aXR5Q29udGV4dCgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgewogICAgICAgICBjb250ZXh0PW51bGw7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiTG9hZCgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJTdG9yZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5JbnRlZ2VyIGdldFBhcnRpZCgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFBhcnRpZChqYXZhLmxhbmcuSW50ZWdlciBwYXJ0aWQpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5JbnRlZ2VyIGdldFN1cHBsaWVyaWQoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRTdXBwbGllcmlkKGphdmEubGFuZy5JbnRlZ2VyIHN1cHBsaWVyaWQpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5TdHJpbmcgZ2V0TmFtZSgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldE5hbWUoamF2YS5sYW5nLlN0cmluZyBuYW1lKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0U3RhdHVzKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0U3RhdHVzKGludCBzdGF0dXMpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5TdHJpbmcgZ2V0Q2l0eSgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldENpdHkoamF2YS5sYW5nLlN0cmluZyBjaXR5KTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBEYXRhLkxvY2FsUGFydHMgZ2V0UGFydHMoKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFBhcnRzKERhdGEuTG9jYWxQYXJ0cyBwYXJ0cyk7Ci0gICAgCisKICAgICBwdWJsaWMgRGF0YS5TdXBwbGllcnNLZXkgZWpiQ3JlYXRlKGphdmEubGFuZy5JbnRlZ2VyIHBhcnRpZCwgamF2YS5sYW5nLkludGVnZXIgc3VwcGxpZXJpZCwgamF2YS5sYW5nLlN0cmluZyBuYW1lLCBpbnQgc3RhdHVzLCBqYXZhLmxhbmcuU3RyaW5nIGNpdHkpIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24gewogICAgICAgICBpZiAoKHN1cHBsaWVyaWQgPT0gbnVsbCkgfHwocGFydGlkID09IG51bGwpKXsKICAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24oIlRoZSBwYXJ0aWQgYW5kIHN1cHBsaWVyaWQgYXJlIHJlcXVpcmVkLiIpOwpAQCAtMTIwLDEyICsxMjAsMTIgQEAKICAgICAgICAgc2V0U3VwcGxpZXJpZChzdXBwbGllcmlkKTsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICAgICAgc2V0U3RhdHVzKHN0YXR1cyk7Ci0gICAgICAgIHNldENpdHkoY2l0eSk7IAorICAgICAgICBzZXRDaXR5KGNpdHkpOwogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKGphdmEubGFuZy5JbnRlZ2VyIHBhcnRpZCwgamF2YS5sYW5nLkludGVnZXIgc3VwcGxpZXJpZCwgamF2YS5sYW5nLlN0cmluZyBuYW1lLCBpbnQgc3RhdHVzLCBqYXZhLmxhbmcuU3RyaW5nIGNpdHkpIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24gewogICAgICAgICBwYXJ0MCA9IGdldFBhcnRzKCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL2VqYi9TdXBwbGllcnNLZXkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvZWpiL1N1cHBsaWVyc0tleS5qYXZhCmluZGV4IDdhZmUwZWIuLjRiNDczOTQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvZWpiL1N1cHBsaWVyc0tleS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvZWpiL1N1cHBsaWVyc0tleS5qYXZhCkBAIC0yMywxNSArMjMsMTUgQEAKICAqLwogCiBwdWJsaWMgZmluYWwgY2xhc3MgU3VwcGxpZXJzS2V5IGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGUgewotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5JbnRlZ2VyIHBhcnRpZDsKICAgICBwdWJsaWMgamF2YS5sYW5nLkludGVnZXIgc3VwcGxpZXJpZDsKLSAgICAKKwogICAgIC8qKgogICAgICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoamF2YS5sYW5nLk9iamVjdCBvdGhlck9iKSB7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICh0aGlzID09IG90aGVyT2IpIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC00MCwyNSArNDAsMjUgQEAKICAgICAgICAgfQogICAgICAgICBEYXRhLlN1cHBsaWVyc0tleSBvdGhlciA9IChEYXRhLlN1cHBsaWVyc0tleSkgb3RoZXJPYjsKICAgICAgICAgcmV0dXJuICgKLSAgICAgICAgCisKICAgICAgICAgKHBhcnRpZD09bnVsbD9vdGhlci5wYXJ0aWQ9PW51bGw6cGFydGlkLmVxdWFscyhvdGhlci5wYXJ0aWQpKQogICAgICAgICAmJgogICAgICAgICAoc3VwcGxpZXJpZD09bnVsbD9vdGhlci5zdXBwbGllcmlkPT1udWxsOnN1cHBsaWVyaWQuZXF1YWxzKG90aGVyLnN1cHBsaWVyaWQpKQotICAgICAgICAKKwogICAgICAgICApOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNoYXNoQ29kZSgpCiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKICAgICAgICAgcmV0dXJuICgKLSAgICAgICAgCisKICAgICAgICAgKHBhcnRpZD09bnVsbD8wOnBhcnRpZC5oYXNoQ29kZSgpKQogICAgICAgICBeCiAgICAgICAgIChzdXBwbGllcmlkPT1udWxsPzA6c3VwcGxpZXJpZC5oYXNoQ29kZSgpKQotICAgICAgICAKKwogICAgICAgICApOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9zZXJ2bGV0L1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvc2VydmxldC9TZXJ2bGV0LmphdmEKaW5kZXggNmQ1YzdjYS4uOTg1YmY4NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9zZXJ2bGV0L1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL3NlcnZsZXQvU2VydmxldC5qYXZhCkBAIC0zNSwyMCArMzUsMjAgQEAKICAqIEB2ZXJzaW9uCiAgKi8KIHB1YmxpYyBjbGFzcyBTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewotICAgIAorCiAgICAgLyoqIEluaXRpYWxpemVzIHRoZSBzZXJ2bGV0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKiBEZXN0cm95cyB0aGUgc2VydmxldC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKiBQcm9jZXNzZXMgcmVxdWVzdHMgZm9yIGJvdGggSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IGFuZCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2RzLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC01Nyw0OCArNTcsNDggQEAKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7CiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgamF2YS5pby5QcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+U2VydmxldDwvdGl0bGU+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKLSAgICAgICAgCisKICAgICAgICAgb3V0LnByaW50bG4oIjwvYm9keT4iKTsKICAgICAgICAgb3V0LnByaW50bG4oIjwvaHRtbD4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TUFNlc3Npb24iKTsKICAgICAgICAgICAgIFNQU2Vzc2lvbkhvbWUgaG9tZSA9CiAgICAgICAgICAgICAoU1BTZXNzaW9uSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgU1BTZXNzaW9uSG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU1BTZXNzaW9uIG15c3BzZXNzaW9uID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8cHJlPiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIG15c3BzZXNzaW9uLmNyZWF0ZVBhcnRzQW5kU3VwcGxpZXJzKCk7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiQ3JlYXRlZCAiICsgbXlzcHNlc3Npb24uY2hlY2tBbGxQYXJ0cygpICsgIiBQYXJ0cy4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJDcmVhdGVkICIgKyBteXNwc2Vzc2lvbi5jaGVja0FsbFN1cHBsaWVycygpICsgIiBTdXBwbGllcnMuIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgb3V0LnByaW50bG4oIlJlbW92aW5nIFBhcnQgMjAwLi4uIik7CiAgICAgICAgICAgICBteXNwc2Vzc2lvbi5yZW1vdmVQYXJ0KG5ldyBqYXZhLmxhbmcuSW50ZWdlcigyMDApKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBvdXQucHJpbnRsbigiUmVtb3ZpbmcgU3VwcGxpZXIgMTQ1LzE0NS4uLiIpOwogICAgICAgICAgICAgbXlzcHNlc3Npb24ucmVtb3ZlU3VwcGxpZXIobmV3IGphdmEubGFuZy5JbnRlZ2VyKDE0NSksIG5ldyBqYXZhLmxhbmcuSW50ZWdlcigxNDUpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBvdXQucHJpbnRsbigiTGVmdCAiICsgbXlzcHNlc3Npb24uY2hlY2tBbGxQYXJ0cygpICsgIiBQYXJ0cy4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJMZWZ0ICIgKyBteXNwc2Vzc2lvbi5jaGVja0FsbFN1cHBsaWVycygpICsgIiBTdXBwbGllcnMuIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvcHJlPiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiBleGNlcHRpb246Iik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgICAgICBvdXQuY2xvc2UoKTsKICAgICB9Ci0gICAgCisKICAgICAvKiogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC0xMTYsMTEgKzExNiwxMSBAQAogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KLSAgICAKKwogICAgIC8qKiBSZXR1cm5zIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIHNlcnZsZXQuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTZXJ2bGV0SW5mbygpIHsKICAgICAgICAgcmV0dXJuICJTaG9ydCBkZXNjcmlwdGlvbiI7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL3NxbC9wYXJ0U3VwcGxpZXJfZGIyLnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvc3FsL3BhcnRTdXBwbGllcl9kYjIuc3FsCmluZGV4IGFjZjc2YTYuLmQ3NjUzOGEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvc3FsL3BhcnRTdXBwbGllcl9kYjIuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvc3FsL3BhcnRTdXBwbGllcl9kYjIuc3FsCkBAIC0xMiw3ICsxMiw3IEBACiBjcmVhdGUgdGFibGUgc3VwcGxpZXJzICgKICAgICBQQVJUSUQgSU5UIE5PVCBOVUxMIHJlZmVyZW5jZXMgcGFydHMoUEFSVElEKSwKICAgICBTVVBQTElFUklEIElOVCBOT1QgTlVMTCwKLSAgICBOQU1FIFZBUkNIQVIoMTUpLCAKKyAgICBOQU1FIFZBUkNIQVIoMTUpLAogICAgIFNUQVRVUyBJTlQsCiAgICAgQ0lUWSBWQVJDSEFSKDUwKSwKICAgICBjb25zdHJhaW50IHBrX3N1cHBsaWVycyBwcmltYXJ5IGtleSAoU1VQUExJRVJJRCwgUEFSVElEKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9zcWwvcGFydFN1cHBsaWVyX2RlcmJ5LnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvc3FsL3BhcnRTdXBwbGllcl9kZXJieS5zcWwKaW5kZXggNGYxNTQ0NS4uMDMxYTRmYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9zcWwvcGFydFN1cHBsaWVyX2RlcmJ5LnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL3NxbC9wYXJ0U3VwcGxpZXJfZGVyYnkuc3FsCkBAIC0xMiw3ICsxMiw3IEBACiBjcmVhdGUgdGFibGUgc3VwcGxpZXJzICgKICAgICBQQVJUSUQgSU5UIE5PVCBOVUxMIHJlZmVyZW5jZXMgcGFydHMoUEFSVElEKSwKICAgICBTVVBQTElFUklEIElOVCBOT1QgTlVMTCwKLSAgICBOQU1FIFZBUkNIQVIoMTUpLCAKKyAgICBOQU1FIFZBUkNIQVIoMTUpLAogICAgIFNUQVRVUyBJTlQsCiAgICAgQ0lUWSBWQVJDSEFSKDUwKSwKICAgICBjb25zdHJhaW50IHBrX3N1cHBsaWVycyBwcmltYXJ5IGtleSAoU1VQUExJRVJJRCwgUEFSVElEKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9zcWwvcGFydFN1cHBsaWVyX2lmeC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL3NxbC9wYXJ0U3VwcGxpZXJfaWZ4LnNxbAppbmRleCBmMDNkYzIzLi44OTQ5M2M2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL3NxbC9wYXJ0U3VwcGxpZXJfaWZ4LnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL3NxbC9wYXJ0U3VwcGxpZXJfaWZ4LnNxbApAQCAtMTIsNyArMTIsNyBAQAogY3JlYXRlIHRhYmxlIFNVUFBMSUVSUyAoCiAgICAgUEFSVElEIElOVCBOT1QgTlVMTCByZWZlcmVuY2VzIFBBUlRTKFBBUlRJRCksCiAgICAgU1VQUExJRVJJRCBJTlQgTk9UIE5VTEwsCi0gICAgTkFNRSBWQVJDSEFSKDE1KSwgCisgICAgTkFNRSBWQVJDSEFSKDE1KSwKICAgICBTVEFUVVMgSU5ULAogICAgIENJVFkgVkFSQ0hBUig1MCksCiAgICAgcHJpbWFyeSBrZXkoU1VQUExJRVJJRCwgUEFSVElEKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9zcWwvcGFydFN1cHBsaWVyX21zc3FsLnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvc3FsL3BhcnRTdXBwbGllcl9tc3NxbC5zcWwKaW5kZXggMjRjZjljNy4uMzViNjk4YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9zcWwvcGFydFN1cHBsaWVyX21zc3FsLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL3NxbC9wYXJ0U3VwcGxpZXJfbXNzcWwuc3FsCkBAIC0xMyw3ICsxMyw3IEBACiBjcmVhdGUgdGFibGUgc3VwcGxpZXJzICgKICAgICBQQVJUSUQgSU5UIG5vdCBudWxsIHJlZmVyZW5jZXMgcGFydHMoUEFSVElEKSwKICAgICBTVVBQTElFUklEIElOVCwKLSAgICBOQU1FIFZBUkNIQVIoMTUpLCAKKyAgICBOQU1FIFZBUkNIQVIoMTUpLAogICAgIFNUQVRVUyBJTlQsCiAgICAgQ0lUWSBWQVJDSEFSKDUwKSwKICAgICBjb25zdHJhaW50IHBrX3N1cHBsaWVycyBwcmltYXJ5IGtleShTVVBQTElFUklELCBQQVJUSUQpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL3NxbC9wYXJ0U3VwcGxpZXJfbXlzcWwuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9zcWwvcGFydFN1cHBsaWVyX215c3FsLnNxbAppbmRleCAwYjNhOTM4Li5jNjQ4Y2Y2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL3NxbC9wYXJ0U3VwcGxpZXJfbXlzcWwuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvc3FsL3BhcnRTdXBwbGllcl9teXNxbC5zcWwKQEAgLTEyLDcgKzEyLDcgQEAKIENSRUFURSBUQUJMRSBTVVBQTElFUlMgKAogICAgIFBBUlRJRCAgICAgSU5UIE5PVCBOVUxMIFJFRkVSRU5DRVMgUEFSVFMoUEFSVElEKSwKICAgICBTVVBQTElFUklEIElOVCwKLSAgICBOQU1FICAgICAgIFZBUkNIQVIoMTUpLCAKKyAgICBOQU1FICAgICAgIFZBUkNIQVIoMTUpLAogICAgIFNUQVRVUyAgICAgSU5ULAogICAgIENJVFkgICAgICAgVkFSQ0hBUig1MCksCiAgICAgQ09OU1RSQUlOVCBQS19TVVBQTElFUlMgcHJpbWFyeSBrZXkoU1VQUExJRVJJRCwgUEFSVElEKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9zcWwvcGFydFN1cHBsaWVyX29yYS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL3NxbC9wYXJ0U3VwcGxpZXJfb3JhLnNxbAppbmRleCAxMjFmNzcyLi5iYWY3NDIzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL3NxbC9wYXJ0U3VwcGxpZXJfb3JhLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL3NxbC9wYXJ0U3VwcGxpZXJfb3JhLnNxbApAQCAtMTIsNyArMTIsNyBAQAogY3JlYXRlIHRhYmxlIHN1cHBsaWVycyAoCiAgICAgUEFSVElEIElOVCBub3QgbnVsbCByZWZlcmVuY2VzIHBhcnRzKFBBUlRJRCksCiAgICAgU1VQUExJRVJJRCBJTlQsCi0gICAgTkFNRSBWQVJDSEFSMigxNSksIAorICAgIE5BTUUgVkFSQ0hBUjIoMTUpLAogICAgIFNUQVRVUyBJTlQsCiAgICAgQ0lUWSBWQVJDSEFSMig1MCksCiAgICAgY29uc3RyYWludCBwa19zdXBwbGllcnMgcHJpbWFyeSBrZXkoU1VQUExJRVJJRCwgUEFSVElEKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9zcWwvcGFydFN1cHBsaWVyX3Bicy5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL3NxbC9wYXJ0U3VwcGxpZXJfcGJzLnNxbAppbmRleCAxOWNkMmUwLi44ODExYjBmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL3NxbC9wYXJ0U3VwcGxpZXJfcGJzLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL3NxbC9wYXJ0U3VwcGxpZXJfcGJzLnNxbApAQCAtNSw3ICs1LDcgQEAKICAgICBQQVJUSUQgTlVNRVJJQygxMiksCiAgICAgTkFNRSBWQVJDSEFSKDE1KSwKICAgICBDT0xPUiBWQVJDSEFSKDIwKSwKLSAgICBXRUlHSFQgTlVNRVJJQyg0KSwgCisgICAgV0VJR0hUIE5VTUVSSUMoNCksCiAgICAgUFJJQ0UgRkxPQVQoMjMpLAogICAgIFBSSU1BUlkgS0VZKFBBUlRJRCkKICk7CkBAIC0xMyw3ICsxMyw3IEBACiBjcmVhdGUgdGFibGUgc3VwcGxpZXJzICgKICAgICBQQVJUSUQgTlVNRVJJQygxMikgbm90IG51bGwgcmVmZXJlbmNlcyBwYXJ0cyhQQVJUSUQpLAogICAgIFNVUFBMSUVSSUQgTlVNRVJJQygxMiksCi0gICAgTkFNRSBWQVJDSEFSKDE1KSwgCisgICAgTkFNRSBWQVJDSEFSKDE1KSwKICAgICBTVEFUVVMgTlVNRVJJQygyKSwKICAgICBDSVRZIFZBUkNIQVIoNTApLAogICAgIGNvbnN0cmFpbnQgcGtfc3VwcGxpZXJzIHByaW1hcnkga2V5KFNVUFBMSUVSSUQsIFBBUlRJRCkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvc3FsL3BhcnRTdXBwbGllcl9wc3FsLnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvc3FsL3BhcnRTdXBwbGllcl9wc3FsLnNxbAppbmRleCBmMTRiOTdmLi4yN2Q4NmM0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcGFydFN1cHBsaWVyL3NxbC9wYXJ0U3VwcGxpZXJfcHNxbC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9zcWwvcGFydFN1cHBsaWVyX3BzcWwuc3FsCkBAIC0xMiw3ICsxMiw3IEBACiBDUkVBVEUgVEFCTEUgU1VQUExJRVJTICgKICAgICBQQVJUSUQgICAgIElOVCBOT1QgTlVMTCBSRUZFUkVOQ0VTIFBBUlRTKFBBUlRJRCksCiAgICAgU1VQUExJRVJJRCBJTlQsCi0gICAgTkFNRSAgICAgICBWQVJDSEFSKDE1KSwgCisgICAgTkFNRSAgICAgICBWQVJDSEFSKDE1KSwKICAgICBTVEFUVVMgICAgIElOVCwKICAgICBDSVRZICAgICAgIFZBUkNIQVIoNTApLAogICAgIENPTlNUUkFJTlQgUEtfU1VQUExJRVJTIHByaW1hcnkga2V5KFNVUFBMSUVSSUQsIFBBUlRJRCkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9wYXJ0U3VwcGxpZXIvc3FsL3BhcnRTdXBwbGllcl9zeWIuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9zcWwvcGFydFN1cHBsaWVyX3N5Yi5zcWwKaW5kZXggOWZhNzI5MS4uYWNhZjM4MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9zcWwvcGFydFN1cHBsaWVyX3N5Yi5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3BhcnRTdXBwbGllci9zcWwvcGFydFN1cHBsaWVyX3N5Yi5zcWwKQEAgLTEzLDcgKzEzLDcgQEAKIGNyZWF0ZSB0YWJsZSBTVVBQTElFUlMgKAogICAgIFBBUlRJRCBJTlQgTk9UIE5VTEwgcmVmZXJlbmNlcyBQQVJUUyhQQVJUSUQpLAogICAgIFNVUFBMSUVSSUQgSU5UIE5PVCBOVUxMLAotICAgIE5BTUUgVkFSQ0hBUigxNSksIAorICAgIE5BTUUgVkFSQ0hBUigxNSksCiAgICAgU1RBVFVTIElOVCwKICAgICBDSVRZIFZBUkNIQVIoNTApLAogICAgIGNvbnN0cmFpbnQgUEtfU1VQUExJRVJTIHByaW1hcnkga2V5KFNVUFBMSUVSSUQsIFBBUlRJRCkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yZXBvcnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3JlcG9ydC54bWwKaW5kZXggYjIyODk0MS4uYzJlZjliZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3JlcG9ydC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3JlcG9ydC54bWwKQEAgLTIzLDcgKzIzLDcgQEAKIDx0YXJnZXQgbmFtZT0icmVwb3J0Ij4KIDxlY2hvIG1lc3NhZ2U9IkNvbXBhcmluZyByZXN1bHRzIHdpdGggZXhwZWN0ZWQgcmVzdWx0cyIvPgogCi0gCisKICAgICA8eHNsdCBzdHlsZT0iJHtzdHlsZXNoZWV0fSIKICAgICAgICAgICAgIGluPSIke3htbGZpbGV9IiBvdXQ9IiR7aHRtbGZpbGV9IgogICAgICAgICAgICAgYmFzZWRpcj0iLiIgZGVzdGRpcj0iLiIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb2JlYW5zL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9iZWFucy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDFlNzQyOGYuLjc2MmZlNTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb2JlYW5zL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3JvYmVhbnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJSb2JlYW5zIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tY21wLW1hcHBpbmdzLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWNtcC1tYXBwaW5ncy54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb2JlYW5zL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb2JlYW5zL2J1aWxkLnhtbAppbmRleCA4M2EzZmQ3Li4yZjBlMWMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9iZWFucy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3JvYmVhbnMvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0EqLmNsYXNzLCoqL1Rlc3QqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0ExSG9tZS5jbGFzcywqKi9BMS5jbGFzcywqKi9BMkhvbWUuY2xhc3MsKiovQTIuY2xhc3MsKiovVGVzdEhvbWUuY2xhc3MsKiovVGVzdC5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02OSwxOSArNjksMTkgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iJHtiYXNlZGlyfS8uLi9jb21tb24vZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBhbGwKICAgICAgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3JvYmVhbnMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3JvYmVhbnMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDc4NjNmOTkuLmJjMTkwMjYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb2JlYW5zL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9iZWFucy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTM1LDE1ICszNSwxNSBAQAogLyoqCiAgKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gdGVzdCBSZWFkLU9ubHkgQ01QIGJlYW5zIGJ5IGFjY2Vzc2luZwogICogZmllbGQgJ3Nob3J0TmFtZScgYmVmb3JlIGFuZCBhZnRlciBqZGJjIHVwZGF0ZSBvZiB0aGUgc2FtZSB0YWJsZS4KLSAqIEl0IGFsc28gdGVzdHMgdGhhdCBhIG5vbi1ERkcgZmllbGQgJ2Rlc2NyaXB0aW9uJyBpcyBsb2FkZWQgCi0gKiBjb3JyZWN0bHkgZm9yIFJlYWQtT25seSBiZWFucyB3aGVuIGJlYW4gaXMgYWNjZXNzZWQgYWZ0ZXIgYm90aCAKKyAqIEl0IGFsc28gdGVzdHMgdGhhdCBhIG5vbi1ERkcgZmllbGQgJ2Rlc2NyaXB0aW9uJyBpcyBsb2FkZWQKKyAqIGNvcnJlY3RseSBmb3IgUmVhZC1Pbmx5IGJlYW5zIHdoZW4gYmVhbiBpcyBhY2Nlc3NlZCBhZnRlciBib3RoCiAgKiBmaW5kQnlQcmltYXJ5S2V5IGFuZCBjdXN0b20gZmluZGVycy4KICAqIFRoZSB0ZXN0IGlzIGV4ZWN1dGVkIGZvciBDTVAxLjEgYmVhbiAoQTFSTykgYW5kIENNUDIueCBiZWFuIChBMlJPKS4KICAqCiAgKiBAYXV0aG9yICBtdmF0a2luYQogICovCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC01MywxMCArNTMsMTAgQEAKICAgICBwcml2YXRlICBzdGF0aWMgVGVzdCB0YmVhbiA9IG51bGw7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1RBUlQiKTsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigicm9iZWFucyIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJyb2JlYW5zIik7CiAKICAgICAgICAgICAgIGxvb2t1cEJlYW5zKCk7CiAgICAgICAgICAgICB0YmVhbiA9IHRob21lLmNyZWF0ZSgpOwpAQCAtNjQsMTggKzY0LDE4IEBACiAgICAgICAgICAgICB0ZXN0QTEoKTsKICAgICAgICAgICAgIHRlc3RBMigpOwogCi0JICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgcm9iZWFucyIsIHN0YXQuUEFTUyk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgcm9iZWFucyIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZJTklTSCIpOwogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gZXhjZXB0aW9uOiIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgcm9iZWFucyIsIHN0YXQuRkFJTCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgcm9iZWFucyIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLQkgICAgc3RhdC5wcmludFN1bW1hcnkoInJvYmVhbnMiKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInJvYmVhbnMiKTsKICAgICB9CiAKLSAgICAvKiogUnVuIENNUDEuMSB0ZXN0LiAKKyAgICAvKiogUnVuIENNUDEuMSB0ZXN0LgogICAgICAqIGdldFNob3J0TmFtZSgpIG11c3QgcmV0dXJuIHRoZSBzYW1lIHZhbHVlLgogICAgICAqIGdldERlc2NyaXB0aW9uKCkgbXVzdCByZXR1cm4gbm9uLW51bGwgdmFsdWUuCiAgICAgICovCkBAIC05MiwxNSArOTIsMTUgQEAKICAgICAgICAgLy8gRmluZCBhbm90aGVyIGJlYW4uCiAgICAgICAgIENvbGxlY3Rpb24gYyA9IGExaG9tZS5maW5kQnlTaG9ydE5hbWUoIkExUk8xIik7CiAgICAgICAgIGlmIChjLnNpemUoKSAhPSAxKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SOiAxLjEgZmluZEJ5U2hvcnROYW1lIHJldHVybmVkIHdyb25nIG51bWJlciBvZiByZWNvcmRzOiAiIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFUlJPUjogMS4xIGZpbmRCeVNob3J0TmFtZSByZXR1cm5lZCB3cm9uZyBudW1iZXIgb2YgcmVjb3JkczogIgogICAgICAgICAgICAgICAgICAgICArIGMuc2l6ZSgpKTsKICAgICAgICAgfQogICAgICAgICBhMWJlYW4gPSAoQTEpYy5pdGVyYXRvcigpLm5leHQoKTsKIAogICAgICAgICB2ZXJpZnlEZXNjcmlwdGlvbihhMWJlYW4uZ2V0RGVzY3JpcHRpb24oKSwgIkExUk8iLCBmYWxzZSk7CiAgICAgfQotICAgIAotICAgIC8qKiBSdW4gQ01QMi54IHRlc3QuIAorCisgICAgLyoqIFJ1biBDTVAyLnggdGVzdC4KICAgICAgKiBnZXRTaG9ydE5hbWUoKSBtdXN0IHJldHVybiB0aGUgc2FtZSB2YWx1ZS4KICAgICAgKiBnZXREZXNjcmlwdGlvbigpIG11c3QgcmV0dXJuIG5vbi1udWxsIHZhbHVlLgogICAgICAqLwpAQCAtMTE3LDE0ICsxMTcsMTQgQEAKICAgICAgICAgLy8gRmluZCBhbm90aGVyIGJlYW4uCiAgICAgICAgIENvbGxlY3Rpb24gYyA9IGEyaG9tZS5maW5kQnlTaG9ydE5hbWUoIkEyUk8xIik7CiAgICAgICAgIGlmIChjLnNpemUoKSAhPSAxKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SOiAyLnggZmluZEJ5U2hvcnROYW1lIHJldHVybmVkIHdyb25nIG51bWJlciBvZiByZWNvcmRzOiAiIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFUlJPUjogMi54IGZpbmRCeVNob3J0TmFtZSByZXR1cm5lZCB3cm9uZyBudW1iZXIgb2YgcmVjb3JkczogIgogICAgICAgICAgICAgICAgICAgICArIGMuc2l6ZSgpKTsKICAgICAgICAgfQogICAgICAgICBhMmJlYW4gPSAoQTIpYy5pdGVyYXRvcigpLm5leHQoKTsKIAogICAgICAgICB2ZXJpZnlEZXNjcmlwdGlvbihhMmJlYW4uZ2V0RGVzY3JpcHRpb24oKSwgIkEyUk8iLCBmYWxzZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBsb29rdXBCZWFucygpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewogICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9BMVJPIik7CkBAIC0xNTcsMTUgKzE1NywxNSBAQAogICAgICAqIEBwYXJhbSBpc0ZpbmRCeVBLIHRydWUgaWYgdmVyaWZpY2F0aW9uIGlzIGRvbmUgYWZ0ZXIgZmluZEJ5UHJpbWFyeUtleQogICAgICAqIGNhbGwuCiAgICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB2ZXJpZnlEZXNjcmlwdGlvbihTdHJpbmcgZGVzY3JpcHRpb24sIFN0cmluZyBiZWFuTmFtZSwgCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB2ZXJpZnlEZXNjcmlwdGlvbihTdHJpbmcgZGVzY3JpcHRpb24sIFN0cmluZyBiZWFuTmFtZSwKICAgICAgICAgICAgIGJvb2xlYW4gaXNGaW5kQnlQSykgewogCiAgICAgICAgIGlmIChkZXNjcmlwdGlvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYmVhbk5hbWUgKyAiIG5vbi1ERkcgZmllbGQgT0siIAotICAgICAgICAgICAgICAgICAgICArICgoaXNGaW5kQnlQSyk/ICIiIDogIiBhZnRlciBjdXN0b20gZmluZGVyIikgKyAiOiAiIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGJlYW5OYW1lICsgIiBub24tREZHIGZpZWxkIE9LIgorICAgICAgICAgICAgICAgICAgICArICgoaXNGaW5kQnlQSyk/ICIiIDogIiBhZnRlciBjdXN0b20gZmluZGVyIikgKyAiOiAiCiAgICAgICAgICAgICAgICAgICAgICsgZGVzY3JpcHRpb24pOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGJlYW5OYW1lICsgIiBGQUlMRUQ6IG5vbi1ERkcgZmllbGQgaXMgTlVMTCIgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYmVhbk5hbWUgKyAiIEZBSUxFRDogbm9uLURGRyBmaWVsZCBpcyBOVUxMIgogICAgICAgICAgICAgICAgICAgICArICgoaXNGaW5kQnlQSyk/ICIiIDogIiBhZnRlciBjdXN0b20gZmluZGVyIikpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3JvYmVhbnMvZWpiL0ExLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9iZWFucy9lamIvQTEuamF2YQppbmRleCA0ZDg2M2JlLi42Mzg5YWNhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9iZWFucy9lamIvQTEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9iZWFucy9lamIvQTEuamF2YQpAQCAtMjUsOSArMjUsOSBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEExIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCT2JqZWN0IHsKIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2hvcnROYW1lKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgCisgICAgcHVibGljIFN0cmluZyBnZXRTaG9ydE5hbWUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHRocm93cyBSZW1vdGVFeGNlcHRpb247IAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb2JlYW5zL2VqYi9BMUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb2JlYW5zL2VqYi9BMUJlYW4uamF2YQppbmRleCBlZTE4ZmEyLi5iMWFmOGIzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9iZWFucy9lamIvQTFCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3JvYmVhbnMvZWpiL0ExQmVhbi5qYXZhCkBAIC0yNSw1NSArMjUsNTUgQEAKIAogCiBwdWJsaWMgY2xhc3MgQTFCZWFuIGltcGxlbWVudHMgRW50aXR5QmVhbiB7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGlkOwogICAgIHB1YmxpYyBTdHJpbmcgc2hvcnROYW1lOwogICAgIHB1YmxpYyBTdHJpbmcgZGVzY3JpcHRpb247CiAKICAgICBwcml2YXRlIEVudGl0eUNvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIC8qKgogICAgICAqIEBzZWUgRW50aXR5QmVhbiNzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGFDb250ZXh0KSB7CiAgICAgICAgIGNvbnRleHQ9YUNvbnRleHQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQHNlZSBFbnRpdHlCZWFuI2VqYkFjdGl2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIEVudGl0eUJlYW4jZWpiUGFzc2l2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQHNlZSBFbnRpdHlCZWFuI2VqYlJlbW92ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewogCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQHNlZSBFbnRpdHlCZWFuI3Vuc2V0RW50aXR5Q29udGV4dCgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgewogICAgICAgICBjb250ZXh0PW51bGw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQHNlZSBFbnRpdHlCZWFuI2VqYkxvYWQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQHNlZSBFbnRpdHlCZWFuI2VqYlN0b3JlKCkKICAgICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb2JlYW5zL2VqYi9BMUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb2JlYW5zL2VqYi9BMUhvbWUuamF2YQppbmRleCBmZWMzYzAwLi5hNzc0MTM4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9iZWFucy9lamIvQTFIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3JvYmVhbnMvZWpiL0ExSG9tZS5qYXZhCkBAIC0yNSwxMCArMjUsMTAgQEAKIAogcHVibGljIGludGVyZmFjZSBBMUhvbWUgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJIb21lIHsKIAotICAgIHB1YmxpYyBBMSBmaW5kQnlQcmltYXJ5S2V5KGphdmEubGFuZy5TdHJpbmcgcGspICAKKyAgICBwdWJsaWMgQTEgZmluZEJ5UHJpbWFyeUtleShqYXZhLmxhbmcuU3RyaW5nIHBrKQogICAgICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwotICAgIAotICAgIHB1YmxpYyBqYXZhLnV0aWwuQ29sbGVjdGlvbiBmaW5kQnlTaG9ydE5hbWUoamF2YS5sYW5nLlN0cmluZyBzaG9ydE5hbWUpICAKKworICAgIHB1YmxpYyBqYXZhLnV0aWwuQ29sbGVjdGlvbiBmaW5kQnlTaG9ydE5hbWUoamF2YS5sYW5nLlN0cmluZyBzaG9ydE5hbWUpCiAgICAgICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb2JlYW5zL2VqYi9BMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3JvYmVhbnMvZWpiL0EyLmphdmEKaW5kZXggZWNkNjU1OC4uOTY5ZGEwOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3JvYmVhbnMvZWpiL0EyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3JvYmVhbnMvZWpiL0EyLmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKIHB1YmxpYyBpbnRlcmZhY2UgQTIgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJPYmplY3QgewogCiAgICAgcHVibGljIFN0cmluZyBnZXRTaG9ydE5hbWUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotIAorCiAgICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb2JlYW5zL2VqYi9BMkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb2JlYW5zL2VqYi9BMkJlYW4uamF2YQppbmRleCAwNThhOThlLi40NDNkOTJiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9iZWFucy9lamIvQTJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3JvYmVhbnMvZWpiL0EyQmVhbi5qYXZhCkBAIC0yNSw5ICsyNSw5IEBACiAKIAogcHVibGljIGFic3RyYWN0IGNsYXNzIEEyQmVhbiBpbXBsZW1lbnRzIEVudGl0eUJlYW4gewotICAgIAorCiAgICAgcHJpdmF0ZSBFbnRpdHlDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldElkKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0SWQoU3RyaW5nIHMpOwogCkBAIC00Myw0MiArNDMsNDIgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgYUNvbnRleHQpIHsKICAgICAgICAgY29udGV4dD1hQ29udGV4dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIEVudGl0eUJlYW4jZWpiQWN0aXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEBzZWUgRW50aXR5QmVhbiNlamJQYXNzaXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIEVudGl0eUJlYW4jZWpiUmVtb3ZlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIEVudGl0eUJlYW4jdW5zZXRFbnRpdHlDb250ZXh0KCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKSB7CiAgICAgICAgIGNvbnRleHQ9bnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIEVudGl0eUJlYW4jZWpiTG9hZCgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIEVudGl0eUJlYW4jZWpiU3RvcmUoKQogICAgICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3JvYmVhbnMvZWpiL0EySG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3JvYmVhbnMvZWpiL0EySG9tZS5qYXZhCmluZGV4IDdkMDgzMTQuLjhhYTdhNmUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb2JlYW5zL2VqYi9BMkhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9iZWFucy9lamIvQTJIb21lLmphdmEKQEAgLTI1LDEwICsyNSwxMCBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEEySG9tZSBleHRlbmRzIGpha2FydGEuZWpiLkVKQkhvbWUgewogCi0gICAgcHVibGljIEEyIGZpbmRCeVByaW1hcnlLZXkoamF2YS5sYW5nLlN0cmluZyBwaykgIAorICAgIHB1YmxpYyBBMiBmaW5kQnlQcmltYXJ5S2V5KGphdmEubGFuZy5TdHJpbmcgcGspCiAgICAgICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247Ci0gICAgCi0gICAgcHVibGljIGphdmEudXRpbC5Db2xsZWN0aW9uIGZpbmRCeVNob3J0TmFtZShqYXZhLmxhbmcuU3RyaW5nIHNob3J0TmFtZSkgIAorCisgICAgcHVibGljIGphdmEudXRpbC5Db2xsZWN0aW9uIGZpbmRCeVNob3J0TmFtZShqYXZhLmxhbmcuU3RyaW5nIHNob3J0TmFtZSkKICAgICAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3JvYmVhbnMvZWpiL1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb2JlYW5zL2VqYi9UZXN0LmphdmEKaW5kZXggNmY1OGQzYS4uZjFjZDc5YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3JvYmVhbnMvZWpiL1Rlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9iZWFucy9lamIvVGVzdC5qYXZhCkBAIC0yMCwxMSArMjAsMTEgQEAKIGltcG9ydCBqYXZhLnJtaS4qOwogCiBwdWJsaWMgaW50ZXJmYWNlIFRlc3QgZXh0ZW5kcyBFSkJPYmplY3QgewotIAorCiAgICAgLyoqIEluc2VydCB2YWx1ZXMgdmlhIGpkYmMgY2FsbCAqLwogICAgIHB1YmxpYyB2b2lkIGluc2VydFZhbHVlcyhTdHJpbmcgdGFibGVfbmFtZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAgICAgCisKICAgICAvKiogVXBkYXRlIHZhbHVlcyB2aWEgamRiYyBjYWxsICovCiAgICAgcHVibGljIHZvaWQgdXBkYXRlVmFsdWVzKFN0cmluZyB0YWJsZV9uYW1lKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgICAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3JvYmVhbnMvZWpiL1Rlc3RCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9iZWFucy9lamIvVGVzdEJlYW4uamF2YQppbmRleCBkZGUyNjRjLi5hODJiMTA5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9iZWFucy9lamIvVGVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9iZWFucy9lamIvVGVzdEJlYW4uamF2YQpAQCAtMjksMjYgKzI5LDI2IEBACiAgKiBpbml0aWFsIGRhdGEgaW50byB0aGUgdGFibGUgYW5kIHVwZGF0aW5nIGNvbHVtbiAnTkFNRScgd2hlbiByZXF1ZXN0ZWQuCiAgKiBUaGlzIGFsbG93cyB0byB1c2UgamF2YTJkYiBmb3IgdGhlIGFjdHVhbCBiZWFucy4KICAqIFRoaXMgYmVhbiBkb2VzIG5vdCBhY2Nlc3MgQ01QIGJlYW5zLgotICovIAorICovCiBwdWJsaWMgY2xhc3MgVGVzdEJlYW4gaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7CiAKICAgICBwcml2YXRlIERhdGFTb3VyY2UgZHMgPSBudWxsOwogCiAgICAgLy8gU2Vzc2lvbkJlYW4gbWV0aG9kcwotIAorCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdEJlYW4gZWpiQ3JlYXRlIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBkcyA9IGxvb2t1cERhdGFTb3VyY2UoKTsKLSAKKwogICAgICAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgIH0gICAgCi0gCisgICAgfQorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdEJlYW4gZWpiQWN0aXZhdGUiKTsKLSAgICB9ICAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKICAgICAgICAgICAgIGRzID0gbnVsbDsKQEAgLTU3LDcgKzU3LDcgQEAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewogCiAgICAgfQpAQCAtNzcsMTkgKzc3LDE5IEBACiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiREFUQVNPVVJDRSBOQU1FOiAiICsgY2ZuYW1lKTsKICAgICAgICAgICAgIG9ianJlZiA9IGluaXRpYWwubG9va3VwKGNmbmFtZSk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIChEYXRhU291cmNlKSBvYmpyZWY7Ci0gICAgfSAgICAKKyAgICB9CiAKICAgICAvKiogSW5zZXJ0IHZhbHVlcyB2aWEgamRiYyBjYWxsICovCiAgICAgcHVibGljIHZvaWQgaW5zZXJ0VmFsdWVzIChTdHJpbmcgdGFibGVfbmFtZSkgewotICAgICAgICBTdHJpbmcgc3QgPSAiSU5TRVJUIElOVE8gIiArIHRhYmxlX25hbWUgKyAiIFZBTFVFUyAoJyIgKyAKKyAgICAgICAgU3RyaW5nIHN0ID0gIklOU0VSVCBJTlRPICIgKyB0YWJsZV9uYW1lICsgIiBWQUxVRVMgKCciICsKICAgICAgICAgICAgICAgICB0YWJsZV9uYW1lICsgIicsICciICsgdGFibGVfbmFtZSArICInLCAnIiArIHRhYmxlX25hbWUgKyAiJykiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIklOU0VSVCBTVEFURU1FTlQ6ICIgKyBzdCk7CiAgICAgICAgIGV4ZWN1dGVTdGF0ZW1lbnQoc3QpOwogCiAgICAgICAgIC8vIEluc2VydCBhbm90aGVyIHJvdwotICAgICAgICBzdCA9ICJJTlNFUlQgSU5UTyAiICsgdGFibGVfbmFtZSArICIgVkFMVUVTICgnIiArIAorICAgICAgICBzdCA9ICJJTlNFUlQgSU5UTyAiICsgdGFibGVfbmFtZSArICIgVkFMVUVTICgnIiArCiAgICAgICAgICAgICAgICAgdGFibGVfbmFtZSArICIxJywgJyIgKyB0YWJsZV9uYW1lICsgIjEnLCAnIiArIHRhYmxlX25hbWUgKyAiMScpIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJTlNFUlQgU1RBVEVNRU5UOiAiICsgc3QpOwogICAgICAgICBleGVjdXRlU3RhdGVtZW50KHN0KTsKQEAgLTEyNCw0ICsxMjQsNCBAQAogICAgICAgICB9CiAgICAgfQogCi19IAorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3JvYmVhbnMvZWpiL1Rlc3RIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9iZWFucy9lamIvVGVzdEhvbWUuamF2YQppbmRleCA0OTk1NTAzLi43ZDNlM2I2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9iZWFucy9lamIvVGVzdEhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9iZWFucy9lamIvVGVzdEhvbWUuamF2YQpAQCAtMjAsNiArMjAsNiBAQAogaW1wb3J0IGphdmEucm1pLio7CiAKIHB1YmxpYyBpbnRlcmZhY2UgVGVzdEhvbWUgZXh0ZW5kcyBFSkJIb21lIHsKLSAKKwogICAgIFRlc3QgY3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgQ3JlYXRlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDIxZmEwOTYuLjFjZjZmNTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEzICsxNSwxMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0icm9zdGVyMlRlYW1zIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogCi08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJSb3N0ZXJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iUm9zdGVyQ2xpZW50Ii8+CiAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KQEAgLTM1LDEwICszNSwxMCBAQAogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXItcm9zdGVyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci1yb3N0ZXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXItcm9zdGVyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXItcm9zdGVyLnhtbCIvPgogCi08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogCkBAIC00OCw3ICs0OCw3IEBACiA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0idHJ1ZSIvPgogCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIKLQl2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIgotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2J1aWxkLnhtbAppbmRleCBmZWY4ZTk5Li4zYjNmM2YxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2J1aWxkLnhtbApAQCAtMzgsNyArMzgsNyBAQAogICAgICAgPGRlbGV0ZSBmaWxlPSIke3N1bi1jbXAtbWFwcGluZ3MueG1sfSIvPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00Niw1NCArNDYsNTQgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icGFja2FnZS10ZWFtLWphciIgPgogCi0gICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWpiamFyLWNvbW1vbiI+IAotICAgCi0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVqYmphci1jb21tb24iPgorCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSJ0ZWFtL0xvY2FsKi5jbGFzcywgdGVhbS9MZWFndWUqLmNsYXNzLCB0ZWFtL1BsYXllciouY2xhc3MsIHRlYW0vVGVhbSouY2xhc3MsIHV0aWwvKi5jbGFzcyIgLz4KIAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9IiR7ZWpiLWphci10ZWFtLnhtbH0iIC8+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9IiR7c3VuLWVqYi1qYXItdGVhbS54bWx9IiAvPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgLz4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS90ZWFtLWVqYi5qYXIiIC8+Ci0gIAorCiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLXRlYW0yLWphciIgPgogCi0JIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4KKyAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVqYmphci1jb21tb24iPgogCi0JICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKLQkgICAgICB2YWx1ZT0idGVhbS9Mb2NhbCouY2xhc3MsIHRlYW0vTGVhZ3VlKi5jbGFzcywgdGVhbS9QbGF5ZXIqLmNsYXNzLCB0ZWFtL1RlYW0qLmNsYXNzLCB1dGlsLyouY2xhc3MiIC8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKKyAgICAgICAgICB2YWx1ZT0idGVhbS9Mb2NhbCouY2xhc3MsIHRlYW0vTGVhZ3VlKi5jbGFzcywgdGVhbS9QbGF5ZXIqLmNsYXNzLCB0ZWFtL1RlYW0qLmNsYXNzLCB1dGlsLyouY2xhc3MiIC8+CiAKLQkgIDxwYXJhbSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9IiR7ZWpiLWphci10ZWFtMi54bWx9IiAvPgotCSAgPHBhcmFtIG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9IiR7c3VuLWVqYi1qYXItdGVhbTIueG1sfSIgLz4KLQkgIDxwYXJhbSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgLz4KLQkgIDxwYXJhbSBuYW1lPSJlamIuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9L3RlYW0yLWVqYi5qYXIiIC8+CisgICAgICA8cGFyYW0gbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSIke2VqYi1qYXItdGVhbTIueG1sfSIgLz4KKyAgICAgIDxwYXJhbSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSIke3N1bi1lamItamFyLXRlYW0yLnhtbH0iIC8+CisgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIC8+CisgICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS90ZWFtMi1lamIuamFyIiAvPgogCi0JPC9hbnRjYWxsPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogCiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLXJvc3Rlci1qYXIiID4KIAotICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVqYmphci1jb21tb24iPiAKLSAgIAotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4KKworICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0idGVhbS9Mb2NhbCouY2xhc3MsIHRlYW0vTGVhZ3VlLmNsYXNzLCB0ZWFtL0xlYWd1ZUhvbWUuY2xhc3MsIHRlYW0vUGxheWVyLmNsYXNzLCB0ZWFtL1BsYXllckhvbWUuY2xhc3MsIHRlYW0vVGVhbS5jbGFzcywgdGVhbS9UZWFtSG9tZS5jbGFzcywsdXRpbC8qLmNsYXNzLHJvc3Rlci8qLmNsYXNzIiAvPgogCiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iJHtlamItamFyLXJvc3Rlci54bWx9IiAvPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSIke3N1bi1lamItamFyLXJvc3Rlci54bWx9IiAvPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgLz4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS9yb3N0ZXItZWpiLmphciIgLz4KLSAgCisKICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCkBAIC0xMDEsMTcgKzEwMSwxNyBAQAogCiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ0cnVlIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIKKyAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovUm9zdGVyU2VydmxldC5jbGFzcyIgLz4KLQk8L2FudGNhbGw+Ci0gCisgICAgPC9hbnRjYWxsPgorCiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UtYXBwY2xpZW50IiA+CiAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KIAogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1Jvc3RlckNsaWVudC5jbGFzcywgKiovUm9zdGVyLmNsYXNzLCAqKi9Sb3N0ZXJIb21lLmNsYXNzLCB1dGlsLyouY2xhc3MiIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIKICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgLz4KQEAgLTEzMiwyMyArMTMyLDIzIEBACiAKICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJURU1QRElSIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9L1RFTVBESVIiIC8+CiAKLSAgICAgICAJPG1rZGlyIGRpcj0iJHtURU1QRElSfS9zcmMiIC8+CisgICAgICAgICAgIDxta2RpciBkaXI9IiR7VEVNUERJUn0vc3JjIiAvPgogICAgICAgICA8Y29weSB0b2Rpcj0iJHtURU1QRElSfS9zcmMiID4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfS9lamIiIC8+CiAgICAgICAgIDwvY29weT4KLSAgICAgICAJPG1rZGlyIGRpcj0iJHtURU1QRElSfS9zcmMvY2xpZW50IiAvPgorICAgICAgICAgICA8bWtkaXIgZGlyPSIke1RFTVBESVJ9L3NyYy9jbGllbnQiIC8+CiAgICAgICAgIDxjb3B5IHRvZGlyPSIke1RFTVBESVJ9L3NyYy9jbGllbnQiIGZpbGU9IiR7YmFzZWRpcn0vY2xpZW50L1Jvc3RlckNsaWVudC5qYXZhIiAvPgogICAgICAgICA8Y29weSB0b2Rpcj0iJHtURU1QRElSfS9zcmMvY2xpZW50IiBmaWxlPSIke2Jhc2VkaXJ9L3NlcnZsZXQvUm9zdGVyU2VydmxldC5qYXZhIiAvPgogCi0JPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS9kZXNjcmlwdG9yL0lOREVYLkxJU1QiIHRvZGlyPSIke1RFTVBESVJ9L01FVEEtSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICA8Y29weSBmaWxlPSIke2Jhc2VkaXJ9L2Rlc2NyaXB0b3IvSU5ERVguTElTVCIgdG9kaXI9IiR7VEVNUERJUn0vTUVUQS1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogCiAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgotCTxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KLQkgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+Ci0JICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgotCTwvZmlsZXNldD4KKyAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CisgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgorICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KKyAgICA8L2ZpbGVzZXQ+CiAKLQk8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfS9saWIiIGluY2x1ZGVzPSJyZXBvcnRlci5qYXIiLz4KKyAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfS9saWIiIGluY2x1ZGVzPSJyZXBvcnRlci5qYXIiLz4KICAgICAgIDwvZWFyPgogICAgIDwvdGFyZ2V0PgogCkBAIC0xNjUsMTYgKzE2NSwxNiBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWFyIiAvPgogCiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKIAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iPgotCQk8cGFyYW0gbmFtZT0iZXh0cmEtcGFyYW1zIgotCSAgICAgIHZhbHVlPSItLXVuaXF1ZXRhYmxlbmFtZXM9dHJ1ZSAtLWRyb3BhbmRjcmVhdGV0YWJsZXM9dHJ1ZSIvPgotCTwvYW50Y2FsbD4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImV4dHJhLXBhcmFtcyIKKyAgICAgICAgICB2YWx1ZT0iLS11bmlxdWV0YWJsZW5hbWVzPXRydWUgLS1kcm9wYW5kY3JlYXRldGFibGVzPXRydWUiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTg4LDE5ICsxODgsMTkgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iJHtiYXNlZGlyfS8uLi9jb21tb24vZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBhbGwKICAgICAgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9jbGllbnQvUm9zdGVyQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2NsaWVudC9Sb3N0ZXJDbGllbnQuamF2YQppbmRleCAxNjZiZGYyLi45NDhmZjNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2NsaWVudC9Sb3N0ZXJDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2NsaWVudC9Sb3N0ZXJDbGllbnQuamF2YQpAQCAtNDMsMzIgKzQzLDMyIEBACiAKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICB0cnkgewotCSAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1RBUlQiKTsKKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNUQVJUIik7CiAgICAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oInJvc3RlckphdmEyREIiKTsKIAogICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVSb3N0ZXJFeHQiKTsKIAotICAgICAgICAgICBSb3N0ZXJIb21lIGhvbWUgPSAKLSAgICAgICAgICAgICAgIChSb3N0ZXJIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICBSb3N0ZXJIb21lIGhvbWUgPQorICAgICAgICAgICAgICAgKFJvc3RlckhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUm9zdGVySG9tZS5jbGFzcyk7CiAKICAgICAgICAgICAgUm9zdGVyIG15Um9zdGVyID0gaG9tZS5jcmVhdGUoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgIGluc2VydEluZm8obXlSb3N0ZXIpOwogICAgICAgICAgICBnZXRTb21lSW5mbyhteVJvc3Rlcik7CiAKICAgICAgICAgICAgZ2V0TW9yZUluZm8obXlSb3N0ZXIpOwogCi0JICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCByb3N0ZXJKYXZhMkRCICIsIHN0YXQuUEFTUyk7CisgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCByb3N0ZXJKYXZhMkRCICIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJyb3N0ZXJKYXZhMkRCIik7CiAKICAgICAgICAgICAgU3lzdGVtLmV4aXQoMCk7CiAKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gZXhjZXB0aW9uOiIpOwotCSAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCSAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgcm9zdGVySmF2YTJEQiAiLCBzdGF0LkZBSUwpOworICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgcm9zdGVySmF2YTJEQiAiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgicm9zdGVySmF2YTJEQiIpOwogICAgICAgIH0KICAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInJvc3RlckphdmEyREIiKTsKQEAgLTEzNywxNiArMTM3LDE2IEBACiAgICAgICAgICAgIHBsYXllckxpc3QgPSBteVJvc3Rlci5nZXRQbGF5ZXJzQnlQb3NpdGlvbigiZGVmZW5kZXIiKTsKICAgICAgICAgICAgcGxheWVyTGlzdCA9IG15Um9zdGVyLmdldEFsbFBsYXllcnMoKTsKICAgICAgICAgICAgcGxheWVyTGlzdCA9IG15Um9zdGVyLmdldFBsYXllcnNOb3RPblRlYW0oKTsKLSAgICAgICAgICAgcGxheWVyTGlzdCA9IG15Um9zdGVyLmdldFBsYXllcnNCeVBvc2l0aW9uQW5kTmFtZSgicG93ZXIgZm9yd2FyZCIsIAorICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lKCJwb3dlciBmb3J3YXJkIiwKICAgICAgICAgICAgICAgICJKYWNrIFBhdHRlcnNvbiIpOwogICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0UGxheWVyc0J5Q2l0eSgiVHJ1Y2tlZSIpOwogICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0UGxheWVyc0J5U3BvcnQoIlNvY2NlciIpOwogICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0UGxheWVyc0J5TGVhZ3VlSWQoIkwxIik7CiAKICAgICAgICAgICAgcGxheWVyTGlzdCA9IG15Um9zdGVyLmdldFBsYXllcnNCeUhpZ2hlclNhbGFyeSgiSWFuIENhcmx5bGUiKTsKLSAgICAgICAgICAgCisKICAgICAgICAgICAgcHJpbnREZXRhaWxzTGlzdChwbGF5ZXJMaXN0KTsKLSAgICAgICAgICAgCisKICAgICAgICAgICAgcGxheWVyTGlzdCA9IG15Um9zdGVyLmdldFBsYXllcnNCeVNhbGFyeVJhbmdlKDUwMC4wMCwgODAwLjAwKTsKICAgICAgICAgICAgcGxheWVyTGlzdCA9IG15Um9zdGVyLmdldFBsYXllcnNPZlRlYW1Db3B5KCJUNSIpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2Rlc2NyaXB0b3IvZWpiLWphci10ZWFtLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvZGVzY3JpcHRvci9lamItamFyLXRlYW0ueG1sCmluZGV4IDg0OGIxYWMuLjc1MTA5OWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvZGVzY3JpcHRvci9lamItamFyLXRlYW0ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvZGVzY3JpcHRvci9lamItamFyLXRlYW0ueG1sCkBAIC0yMjQsNyArMjI0LDcgQEAKICAgICAgICAgICA8bWV0aG9kLW5hbWU+ZmluZE5vdE9uVGVhbTwvbWV0aG9kLW5hbWU+CiAgICAgICAgICAgPG1ldGhvZC1wYXJhbXMvPgogICAgICAgICA8L3F1ZXJ5LW1ldGhvZD4KLSAgICAgICAgPGVqYi1xbD5zZWxlY3Qgb2JqZWN0KHApIGZyb20gUGxheWVyIHAgCisgICAgICAgIDxlamItcWw+c2VsZWN0IG9iamVjdChwKSBmcm9tIFBsYXllciBwCiB3aGVyZSBwLnRlYW1zIGlzIGVtcHR5PC9lamItcWw+CiAgICAgICA8L3F1ZXJ5PgogICAgICAgPHF1ZXJ5PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9kZXNjcmlwdG9yL2VqYi1qYXItdGVhbTIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9kZXNjcmlwdG9yL2VqYi1qYXItdGVhbTIueG1sCmluZGV4IGU0OGVjZDQuLjRlZjE2OTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvZGVzY3JpcHRvci9lamItamFyLXRlYW0yLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2Rlc2NyaXB0b3IvZWpiLWphci10ZWFtMi54bWwKQEAgLTIyNCw3ICsyMjQsNyBAQAogICAgICAgICAgIDxtZXRob2QtbmFtZT5maW5kTm90T25UZWFtPC9tZXRob2QtbmFtZT4KICAgICAgICAgICA8bWV0aG9kLXBhcmFtcy8+CiAgICAgICAgIDwvcXVlcnktbWV0aG9kPgotICAgICAgICA8ZWpiLXFsPnNlbGVjdCBvYmplY3QocCkgZnJvbSBQbGF5ZXIgcCAKKyAgICAgICAgPGVqYi1xbD5zZWxlY3Qgb2JqZWN0KHApIGZyb20gUGxheWVyIHAKIHdoZXJlIHAudGVhbXMgaXMgZW1wdHk8L2VqYi1xbD4KICAgICAgIDwvcXVlcnk+CiAgICAgICA8cXVlcnk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi9yb3N0ZXIvUm9zdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi9yb3N0ZXIvUm9zdGVyLmphdmEKaW5kZXggNjkyYTE4NS4uMjc5YWFiNyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9lamIvcm9zdGVyL1Jvc3Rlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvZWpiL3Jvc3Rlci9Sb3N0ZXIuamF2YQpAQCAtMjcsNTUgKzI3LDU1IEBACiBpbXBvcnQgamF2YS51dGlsLlNldDsKIAogcHVibGljIGludGVyZmFjZSBSb3N0ZXIgZXh0ZW5kcyBFSkJPYmplY3QgewotIAorCiAgICAgLy8gUGxheWVycwogCi0gICAgcHVibGljIHZvaWQgY3JlYXRlUGxheWVyKFBsYXllckRldGFpbHMgZGV0YWlscykgCisgICAgcHVibGljIHZvaWQgY3JlYXRlUGxheWVyKFBsYXllckRldGFpbHMgZGV0YWlscykKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyB2b2lkIGFkZFBsYXllcihTdHJpbmcgcGxheWVySWQsIFN0cmluZyB0ZWFtSWQpIAorICAgIHB1YmxpYyB2b2lkIGFkZFBsYXllcihTdHJpbmcgcGxheWVySWQsIFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVQbGF5ZXIoU3RyaW5nIHBsYXllcklkKSAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVQbGF5ZXIoU3RyaW5nIHBsYXllcklkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIHZvaWQgZHJvcFBsYXllcihTdHJpbmcgcGxheWVySWQsIFN0cmluZyB0ZWFtSWQpIAorICAgIHB1YmxpYyB2b2lkIGRyb3BQbGF5ZXIoU3RyaW5nIHBsYXllcklkLCBTdHJpbmcgdGVhbUlkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIFBsYXllckRldGFpbHMgZ2V0UGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgCisgICAgcHVibGljIFBsYXllckRldGFpbHMgZ2V0UGxheWVyKFN0cmluZyBwbGF5ZXJJZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbShTdHJpbmcgdGVhbUlkKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNPZlRlYW0oU3RyaW5nIHRlYW1JZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbUNvcHkoU3RyaW5nIHRlYW1JZCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtQ29weShTdHJpbmcgdGVhbUlkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlQb3NpdGlvbihTdHJpbmcgcG9zaXRpb24pIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5UG9zaXRpb24oU3RyaW5nIHBvc2l0aW9uKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlIaWdoZXJTYWxhcnkoU3RyaW5nIG5hbWUpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5SGlnaGVyU2FsYXJ5KFN0cmluZyBuYW1lKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTYWxhcnlSYW5nZShkb3VibGUgbG93LCBkb3VibGUgaGlnaCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTYWxhcnlSYW5nZShkb3VibGUgbG93LCBkb3VibGUgaGlnaCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5TGVhZ3VlSWQoU3RyaW5nIGxlYWd1ZUlkKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUxlYWd1ZUlkKFN0cmluZyBsZWFndWVJZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U3BvcnQoU3RyaW5nIHNwb3J0KSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVNwb3J0KFN0cmluZyBzcG9ydCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5Q2l0eShTdHJpbmcgY2l0eSkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlDaXR5KFN0cmluZyBjaXR5KQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRBbGxQbGF5ZXJzKCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRBbGxQbGF5ZXJzKCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc05vdE9uVGVhbSgpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc05vdE9uVGVhbSgpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVBvc2l0aW9uQW5kTmFtZShTdHJpbmcgcG9zaXRpb24sIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lKFN0cmluZyBwb3NpdGlvbiwKICAgICAgICAgU3RyaW5nIG5hbWUpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldExlYWd1ZXNPZlBsYXllcihTdHJpbmcgcGxheWVySWQpCkBAIC04Myw4NCArODMsODQgQEAKIAogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0U3BvcnRzT2ZQbGF5ZXIoU3RyaW5nIHBsYXllcklkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgICAgICAKKwogICAgIHB1YmxpYyBkb3VibGUgZ2V0U2FsYXJ5T2ZQbGF5ZXJGcm9tVGVhbShTdHJpbmcgdGVhbUlELCBTdHJpbmcgcGxheWVyTmFtZSkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAKLSAgICAgICAgCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisKIAogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhQb3NpdGlvbnNHb2Fsa2VlcGVyT3JEZWZlbmRlcigpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247ICAgCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNXaXRoTmFtZUVuZGluZ1dpdGhPTigpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhOYW1lRW5kaW5nV2l0aE9OKCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhOdWxsTmFtZSgpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247ICAgCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNXaXRoVGVhbShTdHJpbmcgdGVhbUlkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgICAgICAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNXaXRoU2FsYXJ5VXNpbmdBQlMoZG91YmxlIHNhbGFyeSkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNXaXRoU2FsYXJ5VXNpbmdTUVJUKGRvdWJsZSBzYWxhcnkpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhTYWxhcnlVc2luZ0FCUyhkb3VibGUgc2FsYXJ5KQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgIAotICAgICAgICAgICAKKworICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhTYWxhcnlVc2luZ1NRUlQoZG91YmxlIHNhbGFyeSkKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKworCiAgICAgLy8gVGVhbXMKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0VGVhbXNPZkxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0VGVhbXNPZkxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVUZWFtSW5MZWFndWUoVGVhbURldGFpbHMgZGV0YWlscywgU3RyaW5nIGxlYWd1ZUlkKSAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVUZWFtSW5MZWFndWUoVGVhbURldGFpbHMgZGV0YWlscywgU3RyaW5nIGxlYWd1ZUlkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlVGVhbShTdHJpbmcgdGVhbUlkKSAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVUZWFtKFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgVGVhbURldGFpbHMgZ2V0VGVhbShTdHJpbmcgdGVhbUlkKSAKKyAgICBwdWJsaWMgVGVhbURldGFpbHMgZ2V0VGVhbShTdHJpbmcgdGVhbUlkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRUZWFtc0J5UGxheWVyQW5kTGVhZ3VlKFN0cmluZyBwbGF5ZXJLZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBsZWFndWVLZXkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CQotIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRUZWFtc0J5UGxheWVyQW5kTGVhZ3VlVmlhUmVtb3RlKFN0cmluZyBwbGF5ZXJLZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBsZWFndWVLZXkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIFNldCBnZXRDaXRpZXNPZkxlYWd1ZShTdHJpbmcgbGVhZ3VlS2V5KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIFRlYW1EZXRhaWxzIGdldFRlYW1PZkxlYWd1ZUJ5Q2l0eShTdHJpbmcgbGVhZ3VlS2V5LCBTdHJpbmcgY2l0eSkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsJICAgCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1zTmFtZU9mTGVhZ3VlQnlDaXR5KFN0cmluZyBsZWFndWVLZXksIFN0cmluZyBjaXR5KQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwkgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyAgU3RyaW5nIGdldFRlYW1OYW1lVmFyaWF0aW9ucyhTdHJpbmcgdGVhbUlkKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIFRlYW1EZXRhaWxzIGdldFJlbW90ZVRlYW1PZkxlYWd1ZUJ5Q2l0eShTdHJpbmcgbGVhZ3VlS2V5LCBTdHJpbmcgY2l0eSkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsJICAgCi0gICAgICAgIAotICAgICAgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKworCiAgICAgLy8gTGVhZ3VlcwogCi0gICAgcHVibGljIHZvaWQgY3JlYXRlTGVhZ3VlKExlYWd1ZURldGFpbHMgZGV0YWlscykgCisgICAgcHVibGljIHZvaWQgY3JlYXRlTGVhZ3VlKExlYWd1ZURldGFpbHMgZGV0YWlscykKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZUxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZUxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgTGVhZ3VlRGV0YWlscyBnZXRMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKSAKKyAgICBwdWJsaWMgTGVhZ3VlRGV0YWlscyBnZXRMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIExlYWd1ZURldGFpbHMgZ2V0TGVhZ3VlQnlOYW1lKFN0cmluZyBuYW1lKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgICAgICAKKwogICAgIC8vIFRlc3QKIAogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UmVtb3RlVGVhbXNPZkxlYWd1ZShTdHJpbmcgbGVhZ3VlS2V5KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwpAQCAtMTY5LDcgKzE2OSw3IEBACiAKICAgICBwdWJsaWMgQXJyYXlMaXN0IHRlc3RGaW5kZXIoU3RyaW5nIHBhcm0xLCBTdHJpbmcgcGFybTIsIFN0cmluZyBwYXJtMykKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBjbGVhblVwKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3ZlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247Ci0gICAgICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi9yb3N0ZXIvUm9zdGVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9lamIvcm9zdGVyL1Jvc3RlckJlYW4uamF2YQppbmRleCAzODY5NzliLi4zNmI5NWIzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi9yb3N0ZXIvUm9zdGVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvZWpiL3Jvc3Rlci9Sb3N0ZXJCZWFuLmphdmEKQEAgLTUyLDE5ICs1MiwxOSBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgY3JlYXRlUGxheWVyKFBsYXllckRldGFpbHMgZGV0YWlscykgeyAKLSAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVQbGF5ZXIoUGxheWVyRGV0YWlscyBkZXRhaWxzKSB7CisKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gY3JlYXRlUGxheWVyIik7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBMb2NhbFBsYXllciBwbGF5ZXIgPSBwbGF5ZXJIb21lLmNyZWF0ZShkZXRhaWxzLmdldElkKCksIAorICAgICAgICAgICAgTG9jYWxQbGF5ZXIgcGxheWVyID0gcGxheWVySG9tZS5jcmVhdGUoZGV0YWlscy5nZXRJZCgpLAogICAgICAgICAgICAgICAgIGRldGFpbHMuZ2V0TmFtZSgpLCBkZXRhaWxzLmdldFBvc2l0aW9uKCksIGRldGFpbHMuZ2V0U2FsYXJ5KCkpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAKLSAgICBwdWJsaWMgdm9pZCBhZGRQbGF5ZXIoU3RyaW5nIHBsYXllcklkLCBTdHJpbmcgdGVhbUlkKSB7IAotIAorCisgICAgcHVibGljIHZvaWQgYWRkUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkgeworCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGFkZFBsYXllciIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgTG9jYWxUZWFtIHRlYW0gPSB0ZWFtSG9tZS5maW5kQnlQcmltYXJ5S2V5KHRlYW1JZCk7CkBAIC03NSw3ICs3NSw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVQbGF5ZXIoU3RyaW5nIHBsYXllcklkKSB7IAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVBsYXllcihTdHJpbmcgcGxheWVySWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiByZW1vdmVQbGF5ZXIiKTsKICAgICAgICAgdHJ5IHsKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAKKwogICAgIHB1YmxpYyB2b2lkIGRyb3BQbGF5ZXIoU3RyaW5nIHBsYXllcklkLCBTdHJpbmcgdGVhbUlkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZHJvcFBsYXllciIpOwpAQCAtMTEzLDcgKzExMyw3IEBACiAgICAgfSAvLyBnZXRQbGF5ZXIKIAogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtKFN0cmluZyB0ZWFtSWQpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtKFN0cmluZyB0ZWFtSWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzT2ZUZWFtIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICB9IC8vIGdldFBsYXllcnNPZlRlYW0KIAogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtQ29weShTdHJpbmcgdGVhbUlkKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbUNvcHkoU3RyaW5nIHRlYW1JZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNPZlRlYW1Db3B5Iik7CiAgICAgICAgIEFycmF5TGlzdCBwbGF5ZXJzTGlzdCA9IG51bGw7CkBAIC0xNDUsNyArMTQ1LDcgQEAKICAgICB9IC8vIGdldFBsYXllcnNPZlRlYW1Db3B5CiAKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0VGVhbXNPZkxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRUZWFtc09mTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFRlYW1zT2ZMZWFndWUiKTsKIApAQCAtMTg2LDcgKzE4Niw3IEBACiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlQb3NpdGlvbgogCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNCeUJ5SGlnaGVyU2FsYXJ5Iik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CkBAIC0yMDAsNyArMjAwLDcgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0UGxheWVyc0J5SGlnaGVyU2FsYXJ5CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVNhbGFyeVJhbmdlKGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U2FsYXJ5UmFuZ2UoZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzQnlTYWxhcnlSYW5nZSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwpAQCAtMjE0LDcgKzIxNCw3IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldFBsYXllcnNCeVNhbGFyeVJhbmdlCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUxlYWd1ZUlkKFN0cmluZyBsZWFndWVJZCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUxlYWd1ZUlkKFN0cmluZyBsZWFndWVJZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNCeUxlYWd1ZUlkIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CkBAIC0yMjksNyArMjI5LDcgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0UGxheWVyc0J5TGVhZ3VlSWQKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U3BvcnQoU3RyaW5nIHNwb3J0KSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U3BvcnQoU3RyaW5nIHNwb3J0KSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc0J5U3BvcnQiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKQEAgLTI0Myw3ICsyNDMsNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlTcG9ydAogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlDaXR5KFN0cmluZyBjaXR5KSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5Q2l0eShTdHJpbmcgY2l0eSkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNCeUNpdHkiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKQEAgLTI1Nyw3ICsyNTcsNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlDaXR5CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldEFsbFBsYXllcnMoKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0QWxsUGxheWVycygpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRBbGxQbGF5ZXJzIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CkBAIC0yNzEsNyArMjcxLDcgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0QWxsUGxheWVycwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzTm90T25UZWFtKCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNOb3RPblRlYW0oKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc05vdE9uVGVhbSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwpAQCAtMjg1LDggKzI4NSw4IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldFBsYXllcnNOb3RPblRlYW0KIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lKFN0cmluZyBwb3NpdGlvbiwgCi0gICAgICAgIFN0cmluZyBuYW1lKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lKFN0cmluZyBwb3NpdGlvbiwKKyAgICAgICAgU3RyaW5nIG5hbWUpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKQEAgLTMwMCw3ICszMDAsNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0TGVhZ3Vlc09mUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldExlYWd1ZXNPZlBsYXllcihTdHJpbmcgcGxheWVySWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRMZWFndWVzT2ZQbGF5ZXIiKTsKICAgICAgICAgQXJyYXlMaXN0IGRldGFpbHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwpAQCAtMzEyLDcgKzMxMiw3IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAKKwogICAgICAgICBJdGVyYXRvciBpID0gbGVhZ3Vlcy5pdGVyYXRvcigpOwogICAgICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9IChMb2NhbExlYWd1ZSkgaS5uZXh0KCk7CkBAIC0zMjMsNyArMzIzLDcgQEAKICAgICAgICAgcmV0dXJuIGRldGFpbHNMaXN0OwogICAgIH0gLy8gZ2V0TGVhZ3Vlc09mUGxheWVyCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFNwb3J0c09mUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFNwb3J0c09mUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFNwb3J0c09mUGxheWVyIik7CiAgICAgICAgIEFycmF5TGlzdCBzcG9ydHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwpAQCAtMzM1LDcgKzMzNSw3IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAKKwogICAgICAgICBJdGVyYXRvciBpID0gc3BvcnRzLml0ZXJhdG9yKCk7CiAgICAgICAgIHdoaWxlIChpLmhhc05leHQoKSkgewogICAgICAgICAgICAgU3RyaW5nIHNwb3J0ID0gKFN0cmluZykgaS5uZXh0KCk7CkBAIC0zNDYsOCArMzQ2LDggQEAKIAogICAgIC8vIFRlYW0gYnVzaW5lc3MgbWV0aG9kcwogCi0gICAgcHVibGljIHZvaWQgY3JlYXRlVGVhbUluTGVhZ3VlKFRlYW1EZXRhaWxzIGRldGFpbHMsIFN0cmluZyBsZWFndWVJZCkgeyAKLSAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVUZWFtSW5MZWFndWUoVGVhbURldGFpbHMgZGV0YWlscywgU3RyaW5nIGxlYWd1ZUlkKSB7CisKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gY3JlYXRlVGVhbUluTGVhZ3VlIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWUgPSBsZWFndWVIb21lLmZpbmRCeVByaW1hcnlLZXkobGVhZ3VlSWQpOwpAQCAtMzU4LDggKzM1OCw4IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlVGVhbShTdHJpbmcgdGVhbUlkKSB7IAorCisgICAgcHVibGljIHZvaWQgcmVtb3ZlVGVhbShTdHJpbmcgdGVhbUlkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gcmVtb3ZlVGVhbSIpOwogICAgICAgICB0cnkgewpAQCAtMzY5LDcgKzM2OSw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gCisKICAgICBwdWJsaWMgVGVhbURldGFpbHMgZ2V0VGVhbShTdHJpbmcgdGVhbUlkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0VGVhbSIpOwpAQCAtMzg3LDE4ICszODcsMTggQEAKIAogICAgIC8vIExlYWd1ZSBidXNpbmVzcyBtZXRob2RzCiAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVMZWFndWUoTGVhZ3VlRGV0YWlscyBkZXRhaWxzKSB7IAotIAorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUxlYWd1ZShMZWFndWVEZXRhaWxzIGRldGFpbHMpIHsKKwogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBjcmVhdGVMZWFndWUiKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9IGxlYWd1ZUhvbWUuY3JlYXRlKGRldGFpbHMuZ2V0SWQoKSwgCisgICAgICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWUgPSBsZWFndWVIb21lLmNyZWF0ZShkZXRhaWxzLmdldElkKCksCiAgICAgICAgICAgICAgICAgZGV0YWlscy5nZXROYW1lKCksIGRldGFpbHMuZ2V0U3BvcnQoKSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZUxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIHsgCisKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gcmVtb3ZlTGVhZ3VlIik7CiAgICAgICAgIHRyeSB7CkBAIC00MDgsNyArNDA4LDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAKKwogICAgIHB1YmxpYyBMZWFndWVEZXRhaWxzIGdldExlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRMZWFndWUiKTsKQEAgLTQyMiw3ICs0MjIsNyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBsZWFndWVEZXRhaWxzOwogICAgIH0KLSAKKwogICAgIC8vIFNlc3Npb25CZWFuIG1ldGhvZHMKIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewpAQCAtNDcwLDUxICs0NzAsNTEgQEAKICAgICBwdWJsaWMgUm9zdGVyQmVhbigpIHt9CiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykge30KLSAKKwogICAgIC8vIFByaXZhdGUgbWV0aG9kcwogCiAgICAgcHJpdmF0ZSBMb2NhbFBsYXllckhvbWUgbG9va3VwUGxheWVyKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7Ci0gICAgICAgCisKICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlUGxheWVyRXh0Iik7CiAgICAgICAgIHJldHVybiAoTG9jYWxQbGF5ZXJIb21lKSBvYmpyZWY7CiAgICB9CiAKICAgICBwcml2YXRlIExvY2FsVGVhbUhvbWUgbG9va3VwVGVhbSgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewotICAgICAgIAorCiAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVRlYW1FeHQiKTsKICAgICAgICAgcmV0dXJuIChMb2NhbFRlYW1Ib21lKSBvYmpyZWY7CiAgICB9CiAKICAgICBwcml2YXRlIExvY2FsTGVhZ3VlSG9tZSBsb29rdXBMZWFndWUoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKLSAgICAgICAKKwogICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVMZWFndWVFeHQiKTsKICAgICAgICAgcmV0dXJuIChMb2NhbExlYWd1ZUhvbWUpIG9ianJlZjsKICAgIH0KIAogICAgIHByaXZhdGUgUGxheWVySG9tZSBsb29rdXBSZW1vdGVQbGF5ZXIoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKLSAgICAgICAKKwogICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9SZW1vdGVQbGF5ZXJFeHQiKTsKICAgICAgICAgcmV0dXJuIChQbGF5ZXJIb21lKSBvYmpyZWY7CiAgICB9CiAKICAgICBwcml2YXRlIFRlYW1Ib21lIGxvb2t1cFJlbW90ZVRlYW0oKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKLSAgICAgICAKKwogICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9SZW1vdGVUZWFtRXh0Iik7CiAgICAgICAgIHJldHVybiAoVGVhbUhvbWUpIG9ianJlZjsKICAgIH0KIAogICAgIHByaXZhdGUgTGVhZ3VlSG9tZSBsb29rdXBSZW1vdGVMZWFndWUoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKLSAgICAgICAKKwogICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9SZW1vdGVMZWFndWVFeHQiKTsKICAgICAgICAgcmV0dXJuIChMZWFndWVIb21lKSBvYmpyZWY7CiAgICB9Ci0gICAKKwogICAgcHJpdmF0ZSBBcnJheUxpc3QgY29weVBsYXllcnNUb0RldGFpbHMoQ29sbGVjdGlvbiBwbGF5ZXJzKSB7CiAKICAgICAgICAgQXJyYXlMaXN0IGRldGFpbHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwpAQCAtNTQ0LDE1ICs1NDQsMTUgQEAKIAogICAgICAgICByZXR1cm4gZGV0YWlsc0xpc3Q7CiAgICB9IC8vIGNvcHlQbGF5ZXJzVG9EZXRhaWxzCi0gICAKKwogICAgLyoqCi0gICAgKiBkaXJ0eSBjbGVhblVwIG1ldGhvZCBvbmx5IEVKQnMgd2l0aCBoYXJkY29kZWQgUEsgd2lsbCBiZSByZW1vdmVkICAKKyAgICAqIGRpcnR5IGNsZWFuVXAgbWV0aG9kIG9ubHkgRUpCcyB3aXRoIGhhcmRjb2RlZCBQSyB3aWxsIGJlIHJlbW92ZWQKICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNsZWFuVXAoKSB7Ci0gICAgICAgIERlYnVnLnByaW50KCJDbGVhbmluZyB1cCB0aGUgZGF0YWJhc2UiKTsgICAKKyAgICAgICAgRGVidWcucHJpbnQoIkNsZWFuaW5nIHVwIHRoZSBkYXRhYmFzZSIpOwogICAgICAgICBDb2xsZWN0aW9uIHRvQ2xlYW4gPSBudWxsOwogICAgICAgICBJdGVyYXRvciBpdCA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL3JlbW92aW5nIHRoZSBwbGF5ZXIgRUpCcwogICAgICAgICAgICAgdG9DbGVhbiA9IHBsYXllckhvbWUuZmluZEFsbCgpOwpAQCAtNTYwLDMzICs1NjAsMzMgQEAKICAgICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICAoKExvY2FsUGxheWVyKWl0Lm5leHQoKSkucmVtb3ZlKCk7CiAgICAgICAgICAgICB9Ci0gICAgCisKICAgICAgICAgICAgIC8vIHJlbW92aW5nIHRoZSB0ZWFtIEVKQnMKICAgICAgICAgICAgIHRvQ2xlYW4gPSB0ZWFtSG9tZS5maW5kQWxsKCk7CiAgICAgICAgICAgICBpdCA9IHRvQ2xlYW4uaXRlcmF0b3IoKTsKICAgICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICAoKExvY2FsVGVhbSlpdC5uZXh0KCkpLnJlbW92ZSgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyByZW1vdmluZyB0aGUgbGVhZ3VlIEVKQnMKICAgICAgICAgICAgIHRvQ2xlYW4gPSBsZWFndWVIb21lLmZpbmRBbGwoKTsKICAgICAgICAgICAgIGl0ID0gdG9DbGVhbi5pdGVyYXRvcigpOwogICAgICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgICgoTG9jYWxMZWFndWUpaXQubmV4dCgpKS5yZW1vdmUoKTsKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICBEZWJ1Zy5wcmludCgiQ2xlYW5pbmcgdXAgdGhlIGRhdGFiYXNlIC4uLiBkb25lISIpOwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkKKyAgICAgICAgICAgIH0KKyAgICAgICAgRGVidWcucHJpbnQoIkNsZWFuaW5nIHVwIHRoZSBkYXRhYmFzZSAuLi4gZG9uZSEiKTsKICAgICAgICAgfSAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgICAgCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBuYW1lCiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIHB1YmxpYyBMZWFndWVEZXRhaWxzIGdldExlYWd1ZUJ5TmFtZShTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgCisKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0TGVhZ3VlQnlOYW1lIChTaW5nbGVPYmplY3RGaW5kZXIpIik7CiAgICAgICAgIExlYWd1ZURldGFpbHMgbGVhZ3VlRGV0YWlscyA9IG51bGw7CiAgICAgICAgIHRyeSB7CkBAIC01OTgsMTIgKzU5OCwxMiBAQAogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGxlYWd1ZURldGFpbHM7Ci0gICAgfSAgICAgICAgCisgICAgfQogICAgIC8vIGdldExlYWd1ZUJ5TmFtZSgpCiAKLSAgICAKKwogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIHBsYXllcktleQogICAgICAqIEBwYXJhbSBsZWFndWVLZXkKICAgICAgKiBAcmV0dXJuCkBAIC02MTIsMTMgKzYxMiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbGVhZ3VlS2V5KSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0VGVhbXNCeVBsYXllckFuZExlYWd1ZSIpOwotICAgICAgICBBcnJheUxpc3QgZGV0YWlsc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CQkJCQkJCQkJICAgCisgICAgICAgIEFycmF5TGlzdCBkZXRhaWxzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKICAgICAgICAgQ29sbGVjdGlvbiB0ZWFtc0NvbGwgPSBudWxsOwogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBMb2NhbFBsYXllciBwbGF5ZXIgPSBwbGF5ZXJIb21lLmZpbmRCeVByaW1hcnlLZXkocGxheWVyS2V5KTsKLSAgICAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9IGxlYWd1ZUhvbWUuZmluZEJ5UHJpbWFyeUtleShsZWFndWVLZXkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICB0ZWFtc0NvbGwgPSB0ZWFtSG9tZS5maW5kQnlQbGF5ZXJBbmRMZWFndWUocGxheWVyLCBsZWFndWUpOwkJCQorICAgICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gbGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUtleSk7CisgICAgICAgICAgICB0ZWFtc0NvbGwgPSB0ZWFtSG9tZS5maW5kQnlQbGF5ZXJBbmRMZWFndWUocGxheWVyLCBsZWFndWUpOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKQEAgLTYzMiwxMSArNjMyLDExIEBACiAgICAgICAgICAgICBkZXRhaWxzTGlzdC5hZGQoZGV0YWlscyk7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gZGV0YWlsc0xpc3Q7CQotICAgIH0JCisgICAgICAgIHJldHVybiBkZXRhaWxzTGlzdDsKKyAgICB9CiAKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBwbGF5ZXJLZXkKICAgICAgKiBAcGFyYW0gbGVhZ3VlS2V5CiAgICAgICogQHJldHVybgpAQCAtNjQ1LDE3ICs2NDUsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxlYWd1ZUtleSkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFRlYW1zQnlQbGF5ZXJBbmRMZWFndWVWaWFSZW1vdGUiKTsKLSAgICAgICAgQXJyYXlMaXN0IGRldGFpbHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwkJCQkJCQkJCSAgIAorICAgICAgICBBcnJheUxpc3QgZGV0YWlsc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CiAgICAgICAgIENvbGxlY3Rpb24gdGVhbXNDb2xsID0gbnVsbDsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgRGVidWcucHJpbnQoIiAtLS0tLSBmaW5kaW5nIC4uLi4iKTsKICAgICAgICAgICAgIFBsYXllciBwbGF5ZXIgPSByZW1QbGF5ZXJIb21lLmZpbmRCeVByaW1hcnlLZXkocGxheWVyS2V5KTsKICAgICAgICAgICAgIERlYnVnLnByaW50KCIgLS0tLS0gUGxheWVyIGZvdW5kIik7Ci0gICAgICAgICAgICBMZWFndWUgbGVhZ3VlID0gcmVtTGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUtleSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIExlYWd1ZSBsZWFndWUgPSByZW1MZWFndWVIb21lLmZpbmRCeVByaW1hcnlLZXkobGVhZ3VlS2V5KTsKICAgICAgICAgICAgIERlYnVnLnByaW50KCIgLS0tLS0gTGVhZ3VlIGZvdW5kIik7CiAgICAgICAgICAgICB0ZWFtc0NvbGwgPSByZW1UZWFtSG9tZS5maW5kQnlQbGF5ZXJBbmRMZWFndWVWaWFSZW1vdGUocGxheWVyLCBsZWFndWUpOwotICAgICAgICAgICAgRGVidWcucHJpbnQoIiAtLS0tLSBUZWFtIGZvdW5kIik7CQkJCisgICAgICAgICAgICBEZWJ1Zy5wcmludCgiIC0tLS0tIFRlYW0gZm91bmQiKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CkBAIC02NzQsNDUgKzY3NCw0NSBAQAogICAgICAgICB9CiAKIAotICAgICAgICByZXR1cm4gZGV0YWlsc0xpc3Q7CQotICAgIH0JCi0gICAgCisgICAgICAgIHJldHVybiBkZXRhaWxzTGlzdDsKKyAgICB9CisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBjaXR5CiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIHB1YmxpYyBTZXQgZ2V0Q2l0aWVzT2ZMZWFndWUoU3RyaW5nIGxlYWd1ZUtleSkgewotICAgICAgICAKKwogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRDaXRpZXNPZkxlYWd1ZShsZWFndWVLZXkpIik7Ci0gICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZTsgCisgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZTsKICAgICAgICAgU2V0IGNpdGllczsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGxlYWd1ZSA9IGxlYWd1ZUhvbWUuZmluZEJ5UHJpbWFyeUtleShsZWFndWVLZXkpOwotICAgICAgICAgICAgY2l0aWVzID0gbGVhZ3VlLmdldENpdGllc09mVGhpc0xlYWd1ZSgpOwkKKyAgICAgICAgICAgIGNpdGllcyA9IGxlYWd1ZS5nZXRDaXRpZXNPZlRoaXNMZWFndWUoKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CQkJCisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNpdGllczsKICAgICB9Ly8gZ2V0Q2l0aWVzT2ZMZWFndWUoKQogCiAKICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFJlbW90ZVRlYW1zT2ZMZWFndWUoU3RyaW5nIGxlYWd1ZUtleSkgewotICAgICAgICAKKwogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRSZW1vdGVUZWFtc09mTGVhZ3VlKGxlYWd1ZUtleSkiKTsKLSAgICAgICAgQXJyYXlMaXN0IGRldGFpbHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwkJCQkJCQkJCSAgIAotICAgICAgICBMZWFndWUgbGVhZ3VlOyAKKyAgICAgICAgQXJyYXlMaXN0IGRldGFpbHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOworICAgICAgICBMZWFndWUgbGVhZ3VlOwogICAgICAgICBTZXQgdGVhbXM7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBsZWFndWUgPSByZW1MZWFndWVIb21lLmZpbmRCeVByaW1hcnlLZXkobGVhZ3VlS2V5KTsKLSAgICAgICAgICAgIHRlYW1zID0gbGVhZ3VlLmdldFJlbW90ZVRlYW1zT2ZUaGlzTGVhZ3VlKCk7CQorICAgICAgICAgICAgdGVhbXMgPSBsZWFndWUuZ2V0UmVtb3RlVGVhbXNPZlRoaXNMZWFndWUoKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CQkJCisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KIAogICAgICAgICB0cnkgewpAQCAtNzI3LDEyICs3MjcsMTIgQEAKICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBkZXRhaWxzTGlzdDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBsZWFndWVLZXkKICAgICAgKiBAcGFyYW0gY2l0eQogICAgICAqIEByZXR1cm4KQEAgLTc0MSw3ICs3NDEsNyBAQAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRUZWFtT2ZMZWFndWVCeUNpdHkobGVhZ3VlS2V5LCBjaXR5KSIpOwogICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWU7CiAgICAgICAgIExvY2FsVGVhbSB0ZWFtOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgbGVhZ3VlID0gbGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUtleSk7CiAgICAgICAgICAgICB0ZWFtID0gbGVhZ3VlLmdldFRlYW1CeUNpdHkoY2l0eSk7CkBAIC03NDksMTMgKzc0OSwxMyBAQAogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG5ldyBUZWFtRGV0YWlscyh0ZWFtLmdldFRlYW1JZCgpLCB0ZWFtLmdldE5hbWUoKSwgdGVhbS5nZXRDaXR5KCkpOwogICAgIH0vLyBnZXRUZWFtT2ZMZWFndWVCeUNpdHkoKQogCi0gICAgCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBsZWFndWVLZXkKICAgICAgKiBAcGFyYW0gY2l0eQogICAgICAqIEByZXR1cm4KQEAgLTc2NCw3ICs3NjQsNyBAQAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRUZWFtc05hbWVPZkxlYWd1ZUJ5Q2l0eShsZWFndWVLZXksIGNpdHkpIik7CiAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZTsKICAgICAgICAgU3RyaW5nIHRlYW1OYW1lOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgbGVhZ3VlID0gbGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUtleSk7CiAgICAgICAgICAgICB0ZWFtTmFtZSA9IGxlYWd1ZS5nZXRUZWFtc05hbWVCeUNpdHkoY2l0eSk7CkBAIC03NzIsMTQgKzc3MiwxNCBAQAogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHRlYW1OYW1lOwogCiAgICAgfS8vIGdldFRlYW1zTmFtZU9mTGVhZ3VlQnlDaXR5KCkKLSAgICAKLSAgICAKKworCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gdGVhbUlECiAgICAgICogQHBhcmFtIHBsYXllck5hbWUKICAgICAgKiBAcmV0dXJuCkBAIC03ODgsMjEgKzc4OCwyMSBAQAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRTYWxhcnlPZlBsYXllckZyb21UZWFtKHRlYW1LZXksIHBsYXllcktleSkiKTsKICAgICAgICAgTG9jYWxUZWFtIHRlYW07CiAgICAgICAgIGRvdWJsZSBzYWxhcnk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB0ZWFtID0gdGVhbUhvbWUuZmluZEJ5UHJpbWFyeUtleSh0ZWFtSUQpOwkJCi0gICAgICAgICAgICBzYWxhcnkgPSB0ZWFtLmdldFNhbGFyeU9mUGxheWVyKHBsYXllck5hbWUpOwkJCQorICAgICAgICAgICAgdGVhbSA9IHRlYW1Ib21lLmZpbmRCeVByaW1hcnlLZXkodGVhbUlEKTsKKyAgICAgICAgICAgIHNhbGFyeSA9IHRlYW0uZ2V0U2FsYXJ5T2ZQbGF5ZXIocGxheWVyTmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gc2FsYXJ5OyAgICAgICAKKworICAgICAgICByZXR1cm4gc2FsYXJ5OwogICAgIH0vLyBnZXRTYWxhcnlPZlBsYXllckZyb21UZWFtKCkKLSAgICAKLSAgICAKKworCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gbGVhZ3VlSWQKICAgICAgKiBAcmV0dXJuCiAgICAgICovCkBAIC04MTAsNyArODEwLDcgQEAKICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzT2ZMZWFndWUobGVhZ3VlSWQpIik7CiAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlOwogICAgICAgIFNldCBwbGF5ZXJzOwotICAgICAgIAorCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgbGVhZ3VlID0gbGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUlkKTsKICAgICAgICAgICAgcGxheWVycyA9IGxlYWd1ZS5nZXRQbGF5ZXJzRnJvbUxlYWd1ZSgpOwpAQCAtODE4LDEyICs4MTgsMTIgQEAKICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICB9Ci0gICAgICAgCi0gICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOyAgICAgCisKKyAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfS8vIGdldFBsYXllcnNPZkxlYWd1ZSgpCi0gICAgCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBsZWFndWVJZAogICAgICAqIEByZXR1cm4KICAgICAgKi8KQEAgLTg0MCw2OCArODQwLDY4IEBACiAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgfQotICAgICAgIAotICAgICAgIHJldHVybiByZXN1bHQ7ICAgICAKKworICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfS8vIGdldFBsYXllcnNPZkxlYWd1ZSgpCi0gICAgCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4KICAgICAgKi8KICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNXaXRoUG9zaXRpb25zR29hbGtlZXBlck9yRGVmZW5kZXIoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNXaXRoUG9zaXRpb25zR29hbGtlZXBlck9yRGVmZW5kZXIoKSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcGxheWVycyA9IHBsYXllckhvbWUuZmluZEJ5UG9zaXRpb25zR29hbGtlZXBlck9yRGVmZW5kZXIoKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0vLyBnZXRQbGF5ZXJzV2l0aFBvc2l0aW9uc0dvYWxrZWVwZXJPckRlZmVuZGVyKCkKLSAgICAKKwogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhOYW1lRW5kaW5nV2l0aE9OKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzV2l0aE5hbWVFbmRpbmdXaXRoT04oKSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcGxheWVycyA9IHBsYXllckhvbWUuZmluZEJ5TmFtZUVuZGluZ1dpdGhPTigpOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfS8vIGdldFBsYXllcnNXaXRoTmFtZUVuZGluZ1dpdGhPTigpCiAKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4KICAgICAgKi8KICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNXaXRoTnVsbE5hbWUoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNXaXRoTnVsbE5hbWUoKSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcGxheWVycyA9IHBsYXllckhvbWUuZmluZEJ5TnVsbE5hbWUoKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0vLyBnZXRQbGF5ZXJzV2l0aE51bGxOYW1lKCkKIAogCiAKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSB0ZWFtSWQKICAgICAgKiBAcmV0dXJuCiAgICAgICovCkBAIC05MDksNyArOTA5LDcgQEAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc1dpdGhUZWFtKHRlYW1JZCkiKTsKICAgICAgICAgTG9jYWxUZWFtIHRlYW07CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB0ZWFtID0gdGVhbUhvbWUuZmluZEJ5UHJpbWFyeUtleSh0ZWFtSWQpOwogICAgICAgICAgICAgcGxheWVycyA9IHBsYXllckhvbWUuZmluZEJ5VGVhbSh0ZWFtKTsKQEAgLTkxNywxMyArOTE3LDEzIEBACiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfS8vIGdldFBsYXllcnNXaXRoVGVhbSgpCi0gICAgCi0gICAgCisKKwogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIHRlYW1JZAogICAgICAqIEByZXR1cm4KICAgICAgKi8KQEAgLTkzMSw3ICs5MzEsNyBAQAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRUZWFtTmFtZVZhcmlhdGlvbnModGVhbUlkKSIpOwogICAgICAgICBMb2NhbFRlYW0gdGVhbTsKICAgICAgICAgU3RyaW5nQnVmZmVyIG91dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRlYW0gPSB0ZWFtSG9tZS5maW5kQnlQcmltYXJ5S2V5KHRlYW1JZCk7CiAgICAgICAgICAgICBEZWJ1Zy5wcmludCgiLS0tIENPTkNBVCIpOwpAQCAtOTM5LDU5ICs5MzksNTkgQEAKICAgICAgICAgICAgIERlYnVnLnByaW50KCItLS0gU1VCU1RSSU5HIik7CiAgICAgICAgICAgICBvdXQuYXBwZW5kKHRlYW0uZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czIoKSk7CiAgICAgICAgICAgICBEZWJ1Zy5wcmludCgiLS0tIExPQ0FURSBBTkQgTEVOR1RIIik7Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKHRlYW0uZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czMoKSk7CQkJCisgICAgICAgICAgICBvdXQuYXBwZW5kKHRlYW0uZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czMoKSk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwkJCQorICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBvdXQudG9TdHJpbmcoKTsKICAgICB9Ly8gZ2V0VGVhbU5hbWVWYXJpYXRpb25zKCkKLSAgICAKLSAgICAKKworCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gc2FsYXJ5CiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhTYWxhcnlVc2luZ0FCUyhkb3VibGUgc2FsYXJ5KSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNXaXRoU2FsYXJ5VXNpbmdBQlMoc2FsYXJ5KSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcGxheWVycyA9IHBsYXllckhvbWUuZmluZEJ5U2FsYXJheVdpdGhBcml0aG1ldGljRnVuY3Rpb25BQlMoc2FsYXJ5KTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0vLyBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nQUJTKCkKIAogCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gc2FsYXJ5CiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhTYWxhcnlVc2luZ1NRUlQoZG91YmxlIHNhbGFyeSkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nU1FSVChzYWxhcnkpIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBwbGF5ZXJzID0gcGxheWVySG9tZS5maW5kQnlTYWxhcmF5V2l0aEFyaXRobWV0aWNGdW5jdGlvblNRUlQoc2FsYXJ5KTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0vLyBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nU1FSVCgpCi0gICAgCi0gICAgCi0gICAgCisKKworCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gbGVhZ3VlS2V5CiAgICAgICogQHBhcmFtIGNpdHkKICAgICAgKiBAcmV0dXJuCkBAIC0xMDAxLDIwICsxMDAxLDIwIEBACiAgICAgICAgIExlYWd1ZSBsZWFndWU7CiAgICAgICAgIFRlYW0gdGVhbTsKICAgICAgICAgVGVhbURldGFpbHMgdGVhbURldGFpbHM7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBsZWFndWUgPSByZW1MZWFndWVIb21lLmZpbmRCeVByaW1hcnlLZXkobGVhZ3VlS2V5KTsKICAgICAgICAgICAgIHRlYW0gPSBsZWFndWUuZ2V0UmVtb3RlVGVhbUJ5Q2l0eShjaXR5KTsKLSAgICAgICAgICAgIHRlYW1EZXRhaWxzID0gbmV3IFRlYW1EZXRhaWxzKHRlYW0uZ2V0VGVhbUlkKCksIHRlYW0uZ2V0TmFtZSgpLCB0ZWFtLmdldENpdHkoKSk7IAorICAgICAgICAgICAgdGVhbURldGFpbHMgPSBuZXcgVGVhbURldGFpbHModGVhbS5nZXRUZWFtSWQoKSwgdGVhbS5nZXROYW1lKCksIHRlYW0uZ2V0Q2l0eSgpKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHRlYW1EZXRhaWxzOwogICAgIH0vLyBnZXRSZW1vdGVUZWFtT2ZMZWFndWVCeUNpdHkoKQotICAgIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5TGVhZ3VlSWRXaXRoTlVMTChTdHJpbmcgbGVhZ3VlSWQpIHsgCisKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUxlYWd1ZUlkV2l0aE5VTEwoU3RyaW5nIGxlYWd1ZUlkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc0J5TGVhZ3VlSWQiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKQEAgLTEwMjksNSArMTAyOSw1IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldFBsYXllcnNCeUxlYWd1ZUlkCiAKLSAgICAKLX0gLy8gUm9zdGVyQmVhbiAKKworfSAvLyBSb3N0ZXJCZWFuCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi9yb3N0ZXIvUm9zdGVySG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9lamIvcm9zdGVyL1Jvc3RlckhvbWUuamF2YQppbmRleCBjZWNkNDYyLi5iODc0YWQ0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi9yb3N0ZXIvUm9zdGVySG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvZWpiL3Jvc3Rlci9Sb3N0ZXJIb21lLmphdmEKQEAgLTIyLDYgKzIyLDYgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJIb21lOwogCiBwdWJsaWMgaW50ZXJmYWNlIFJvc3RlckhvbWUgZXh0ZW5kcyBFSkJIb21lIHsKLSAKKwogICAgIFJvc3RlciBjcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBDcmVhdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi90ZWFtL0xlYWd1ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9lamIvdGVhbS9MZWFndWUuamF2YQppbmRleCBiMGI4ZTFiLi45NmUzNzAzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi90ZWFtL0xlYWd1ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvZWpiL3RlYW0vTGVhZ3VlLmphdmEKQEAgLTI5LDE1ICsyOSwxNSBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3BvcnQoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGdldFRlYW1zKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBUZWFtIGdldFJlbW90ZVRlYW1CeUNpdHkoU3RyaW5nIGNpdHkpIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIAorICAgIHB1YmxpYyBUZWFtIGdldFJlbW90ZVRlYW1CeUNpdHkoU3RyaW5nIGNpdHkpIHRocm93cyBGaW5kZXJFeGNlcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKLSAgICBwdWJsaWMgU2V0IGdldFJlbW90ZVRlYW1zT2ZUaGlzTGVhZ3VlKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgCisKKyAgICBwdWJsaWMgU2V0IGdldFJlbW90ZVRlYW1zT2ZUaGlzTGVhZ3VlKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRSZW1vdGVQbGF5ZXJzRnJvbUxlYWd1ZSgpIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGdldFJlbW90ZVBsYXllcnNGcm9tTGVhZ3VlKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogLy8gICAgcHVibGljIHZvaWQgYWRkVGVhbShUZWFtIHRlYW0pIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAvLyAgICBwdWJsaWMgdm9pZCBkcm9wVGVhbShUZWFtIHRlYW0pIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvZWpiL3RlYW0vTGVhZ3VlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9lamIvdGVhbS9MZWFndWVCZWFuLmphdmEKaW5kZXggMzhkMzgwNi4uZmNlOTJkZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9lamIvdGVhbS9MZWFndWVCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9lamIvdGVhbS9MZWFndWVCZWFuLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIAogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0TGVhZ3VlSWQoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRMZWFndWVJZChTdHJpbmcgaWQpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXROYW1lKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7CiAKQEAgLTUwLDcgKzUwLDcgQEAKICAgICBwdWJsaWMgYWJzdHJhY3QgU2V0IGVqYlNlbGVjdFJlbW90ZVRlYW1zKExlYWd1ZSBsZWFndWUpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICAgICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgTG9jYWxUZWFtIGVqYlNlbGVjdFRlYW1CeUNpdHkoU3RyaW5nIGNpdHkpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKQEAgLTYwLDYzICs2MCw2MyBAQAogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZWpiU2VsZWN0VGVhbXNOYW1lQnlDaXR5KFN0cmluZyBjaXR5KQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IFNldCBlamJTZWxlY3RQbGF5ZXJzQnlMZWFndWUoTG9jYWxMZWFndWUgbGVhZ3VlKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGFic3RyYWN0IENvbGxlY3Rpb24gZWpiU2VsZWN0UmVtb3RlUGxheWVyc0J5TGVhZ3VlKExlYWd1ZSBsZWFndWUpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247Ci0gICAgICAgIAorCiAgICAgLy8gQnVzaW5lc3MgbWV0aG9kcwogCiAgICAgcHVibGljIFNldCBnZXRDaXRpZXNPZlRoaXNMZWFndWUoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKLSAgICAgICAgIAotICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gCisKKyAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9CiAgICAgICAgICAgICAgKHRlYW0uTG9jYWxMZWFndWUpY29udGV4dC5nZXRFSkJMb2NhbE9iamVjdCgpOwotICAgICAgICAgCi0gICAgICAgICByZXR1cm4gZWpiU2VsZWN0VGVhbXNDaXR5KGxlYWd1ZSk7IAorCisgICAgICAgICByZXR1cm4gZWpiU2VsZWN0VGVhbXNDaXR5KGxlYWd1ZSk7CiAgICAgfQogCiAKICAgICBwdWJsaWMgU2V0IGdldFJlbW90ZVRlYW1zT2ZUaGlzTGVhZ3VlKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICAgTGVhZ3VlIGxlYWd1ZSA9ICAodGVhbS5MZWFndWUpY29udGV4dC5nZXRFSkJPYmplY3QoKTsKLSAgICAgICAgIAotICAgICAgICAgcmV0dXJuIGVqYlNlbGVjdFJlbW90ZVRlYW1zKGxlYWd1ZSk7IAorCisgICAgICAgICByZXR1cm4gZWpiU2VsZWN0UmVtb3RlVGVhbXMobGVhZ3VlKTsKICAgICB9CiAKLSAgICAKKwogICAgIHB1YmxpYyBMb2NhbFRlYW0gZ2V0VGVhbUJ5Q2l0eShTdHJpbmcgY2l0eSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBlamJTZWxlY3RUZWFtQnlDaXR5KGNpdHkpOwogICAgIH0KIAogICAgIHB1YmxpYyBUZWFtIGdldFJlbW90ZVRlYW1CeUNpdHkoU3RyaW5nIGNpdHkpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICByZXR1cm4gZWpiU2VsZWN0UmVtb3RlVGVhbUJ5Q2l0eShjaXR5KTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1zTmFtZUJ5Q2l0eShTdHJpbmcgY2l0eSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBlamJTZWxlY3RUZWFtc05hbWVCeUNpdHkoY2l0eSk7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgU2V0IGdldFBsYXllcnNGcm9tTGVhZ3VlKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gKHRlYW0uTG9jYWxMZWFndWUpY29udGV4dC5nZXRFSkJMb2NhbE9iamVjdCgpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gZWpiU2VsZWN0UGxheWVyc0J5TGVhZ3VlKGxlYWd1ZSk7Ci0gICAgfSAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRSZW1vdGVQbGF5ZXJzRnJvbUxlYWd1ZSgpIHRocm93cyBGaW5kZXJFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIExlYWd1ZSBsZWFndWUgPSAodGVhbS5MZWFndWUpY29udGV4dC5nZXRFSkJPYmplY3QoKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGVqYlNlbGVjdFJlbW90ZVBsYXllcnNCeUxlYWd1ZShsZWFndWUpOwotICAgIH0gCi0gICAgICAgIAotICAgIAorICAgIH0KKworCiAgICAgcHVibGljIHZvaWQgYWRkVGVhbShMb2NhbFRlYW0gdGVhbSkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJUZWFtQmVhbiBhZGRUZWFtIik7CkBAIC0xNTAsMzIgKzE1MCwzMiBAQAogICAgICAgICBzZXRTcG9ydChzcG9ydCk7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHNwb3J0KQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsgfQogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGN0eCkgewogICAgICAgICBjb250ZXh0ID0gY3R4OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsKICAgICAgICAgY29udGV4dCA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiTGVhZ3VlQmVhbiBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiTGVhZ3VlQmVhbiBlamJMb2FkIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJMZWFndWVCZWFuIGVqYlN0b3JlIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgeyB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsgfQogCiB9IC8vIExlYWd1ZUJlYW4gY2xhc3MKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvZWpiL3RlYW0vTGVhZ3VlSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9lamIvdGVhbS9MZWFndWVIb21lLmphdmEKaW5kZXggMjJhNzM0YS4uOGJjMDc4MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9lamIvdGVhbS9MZWFndWVIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9lamIvdGVhbS9MZWFndWVIb21lLmphdmEKQEAgLTI1LDE0ICsyNSwxNCBAQAogCiAgICAgcHVibGljIExlYWd1ZSBjcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBzcG9ydCkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIExlYWd1ZSBmaW5kQnlQcmltYXJ5S2V5IChTdHJpbmcgaWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIExlYWd1ZSBmaW5kQnlOYW1lKFN0cmluZyBuYW1lKQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CQkJCQkKLSAgICAgICAgCisgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9lamIvdGVhbS9Mb2NhbExlYWd1ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9lamIvdGVhbS9Mb2NhbExlYWd1ZS5qYXZhCmluZGV4IGYyZWIwNDYuLmExNDQ2MTcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvZWpiL3RlYW0vTG9jYWxMZWFndWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi90ZWFtL0xvY2FsTGVhZ3VlLmphdmEKQEAgLTMzLDUgKzMzLDUgQEAKICAgICBwdWJsaWMgTG9jYWxUZWFtIGdldFRlYW1CeUNpdHkoU3RyaW5nIGNpdHkpIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAgICAgcHVibGljIFN0cmluZyBnZXRUZWFtc05hbWVCeUNpdHkoU3RyaW5nIGNpdHkpIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAgICAgcHVibGljIFNldCBnZXRQbGF5ZXJzRnJvbUxlYWd1ZSgpIHRocm93cyBGaW5kZXJFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvZWpiL3RlYW0vTG9jYWxMZWFndWVIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi90ZWFtL0xvY2FsTGVhZ3VlSG9tZS5qYXZhCmluZGV4IGVjMTc2ZGEuLmMxOWFmNzcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvZWpiL3RlYW0vTG9jYWxMZWFndWVIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9lamIvdGVhbS9Mb2NhbExlYWd1ZUhvbWUuamF2YQpAQCAtMjAsMTcgKzIwLDE3IEBACiBpbXBvcnQgamFrYXJ0YS5lamIuKjsKIAogcHVibGljIGludGVyZmFjZSBMb2NhbExlYWd1ZUhvbWUgZXh0ZW5kcyBFSkJMb2NhbEhvbWUgewotICAgIAorCiAgICAgcHVibGljIExvY2FsTGVhZ3VlIGNyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHNwb3J0KQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIExvY2FsTGVhZ3VlIGZpbmRCeVByaW1hcnlLZXkgKFN0cmluZyBpZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBMb2NhbExlYWd1ZSBmaW5kQnlOYW1lKFN0cmluZyBuYW1lKQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwkJCQkJCi0gICAgICAgIAorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi90ZWFtL0xvY2FsUGxheWVySG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9lamIvdGVhbS9Mb2NhbFBsYXllckhvbWUuamF2YQppbmRleCA5MDQ1OGUzLi41Nzc3MDcyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi90ZWFtL0xvY2FsUGxheWVySG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvZWpiL3RlYW0vTG9jYWxQbGF5ZXJIb21lLmphdmEKQEAgLTIwLDYwICsyMCw2MCBAQAogaW1wb3J0IGpha2FydGEuZWpiLio7CiAKIHB1YmxpYyBpbnRlcmZhY2UgTG9jYWxQbGF5ZXJIb21lIGV4dGVuZHMgRUpCTG9jYWxIb21lIHsKLSAgICAKKwogICAgIHB1YmxpYyBMb2NhbFBsYXllciBjcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBwb3NpdGlvbiwKICAgICAgICAgZG91YmxlIHNhbGFyeSkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBMb2NhbFBsYXllciBmaW5kQnlQcmltYXJ5S2V5IChTdHJpbmcgaWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247Ci0gICAgCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UG9zaXRpb24oU3RyaW5nIHBvc2l0aW9uKSAKKworICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBvc2l0aW9uKFN0cmluZyBwb3NpdGlvbikKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5SGlnaGVyU2FsYXJ5KFN0cmluZyBuYW1lKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U2FsYXJ5UmFuZ2UoZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVNhbGFyeVJhbmdlKGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5TGVhZ3VlKExvY2FsTGVhZ3VlIGxlYWd1ZSkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5TGVhZ3VlKExvY2FsTGVhZ3VlIGxlYWd1ZSkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVNwb3J0KFN0cmluZyBzcG9ydCkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U3BvcnQoU3RyaW5nIHNwb3J0KQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5Q2l0eShTdHJpbmcgY2l0eSkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5Q2l0eShTdHJpbmcgY2l0eSkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmROb3RPblRlYW0oKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kTm90T25UZWFtKCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBvc2l0aW9uQW5kTmFtZShTdHJpbmcgcG9zaXRpb24sIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBvc2l0aW9uQW5kTmFtZShTdHJpbmcgcG9zaXRpb24sCiAgICAgICAgIFN0cmluZyBuYW1lKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5VGVzdCAoU3RyaW5nIHBhcm0xLCBTdHJpbmcgcGFybTIsIFN0cmluZyBwYXJtMykKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBvc2l0aW9uc0dvYWxrZWVwZXJPckRlZmVuZGVyKCkKLSAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsgICAJCi0gICAgICAgIAorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOworCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5TmFtZUVuZGluZ1dpdGhPTigpCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247ICAgCQorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5TnVsbE5hbWUoKQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOyAgIAkKKyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVRlYW0oTG9jYWxUZWFtIHRlYW0pCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247ICAgCSAgICAgICAgCi0gICAgICAgIAorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOworCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U2FsYXJheVdpdGhBcml0aG1ldGljRnVuY3Rpb25BQlMoZG91YmxlIHNhbGFyYXkpCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247ICAgICAgIAorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U2FsYXJheVdpdGhBcml0aG1ldGljRnVuY3Rpb25TUVJUKGRvdWJsZSBzYWxhcmF5KQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOyAgICAgICAKLSAgICAgICAgCisgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvZWpiL3RlYW0vTG9jYWxUZWFtLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi90ZWFtL0xvY2FsVGVhbS5qYXZhCmluZGV4IDkxNGE0Y2IuLmY4N2Y1ZWUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvZWpiL3RlYW0vTG9jYWxUZWFtLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9lamIvdGVhbS9Mb2NhbFRlYW0uamF2YQpAQCAtMzEsOCArMzEsOCBAQAogICAgIHB1YmxpYyB2b2lkIGFkZFBsYXllcihMb2NhbFBsYXllciBwbGF5ZXIpOwogICAgIHB1YmxpYyB2b2lkIGRyb3BQbGF5ZXIoTG9jYWxQbGF5ZXIgcGxheWVyKTsKICAgICBwdWJsaWMgZG91YmxlIGdldFNhbGFyeU9mUGxheWVyKFN0cmluZyBwbGF5ZXJOYW1lKTsKLSAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1OYW1lV2l0aFN0cmluZ2Z1bmN0aW9uVGVzdHMxKCk7IAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czIoKTsgCi0gICAgcHVibGljIFN0cmluZyBnZXRUZWFtTmFtZVdpdGhTdHJpbmdmdW5jdGlvblRlc3RzMygpOyAKLSAgICAKKyAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1OYW1lV2l0aFN0cmluZ2Z1bmN0aW9uVGVzdHMxKCk7CisgICAgcHVibGljIFN0cmluZyBnZXRUZWFtTmFtZVdpdGhTdHJpbmdmdW5jdGlvblRlc3RzMigpOworICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czMoKTsKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9lamIvdGVhbS9Mb2NhbFRlYW1Ib21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi90ZWFtL0xvY2FsVGVhbUhvbWUuamF2YQppbmRleCA4ODQ2NTdlLi5jOWUyYTFlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi90ZWFtL0xvY2FsVGVhbUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi90ZWFtL0xvY2FsVGVhbUhvbWUuamF2YQpAQCAtMjIsMTcgKzIyLDE3IEBACiBpbXBvcnQgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uOwogCiBwdWJsaWMgaW50ZXJmYWNlIExvY2FsVGVhbUhvbWUgZXh0ZW5kcyBFSkJMb2NhbEhvbWUgewotICAgIAorCiAgICAgcHVibGljIExvY2FsVGVhbSBjcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBjaXR5KQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIExvY2FsVGVhbSBmaW5kQnlQcmltYXJ5S2V5IChTdHJpbmcgaWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEFsbCgpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247Ci0gICAgCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UGxheWVyQW5kTGVhZ3VlKExvY2FsUGxheWVyIHBsYXllciwgCisKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQbGF5ZXJBbmRMZWFndWUoTG9jYWxQbGF5ZXIgcGxheWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi90ZWFtL1BsYXllckJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvZWpiL3RlYW0vUGxheWVyQmVhbi5qYXZhCmluZGV4IDQ0YjBhOGUuLjdjZDI4OTAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvZWpiL3RlYW0vUGxheWVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvZWpiL3RlYW0vUGxheWVyQmVhbi5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFBsYXllcklkKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0UGxheWVySWQoU3RyaW5nIGlkKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0TmFtZSgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOwogCkBAIC01MiwyMCArNTIsMjAgQEAKICAgICBwdWJsaWMgYWJzdHJhY3QgQ29sbGVjdGlvbiBlamJTZWxlY3RTcG9ydHMoTG9jYWxQbGF5ZXIgcGxheWVyKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgICAgICAgICAgICAgCi0gICAgICAgIAorCisKICAgICAvLyBCdXNpbmVzcyBtZXRob2RzCiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRMZWFndWVzKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7CiAKLSAgICAgICAgIExvY2FsUGxheWVyIHBsYXllciA9IAorICAgICAgICAgTG9jYWxQbGF5ZXIgcGxheWVyID0KICAgICAgICAgICAgICAodGVhbS5Mb2NhbFBsYXllciljb250ZXh0LmdldEVKQkxvY2FsT2JqZWN0KCk7CiAgICAgICAgICByZXR1cm4gZWpiU2VsZWN0TGVhZ3VlcyhwbGF5ZXIpOwogICAgIH0KIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGdldFNwb3J0cygpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewogCi0gICAgICAgICBMb2NhbFBsYXllciBwbGF5ZXIgPSAKKyAgICAgICAgIExvY2FsUGxheWVyIHBsYXllciA9CiAgICAgICAgICAgICAgKHRlYW0uTG9jYWxQbGF5ZXIpY29udGV4dC5nZXRFSkJMb2NhbE9iamVjdCgpOwogICAgICAgICAgcmV0dXJuIGVqYlNlbGVjdFNwb3J0cyhwbGF5ZXIpOwogICAgIH0KQEAgLTgyLDMyICs4MiwzMiBAQAogICAgICAgICBzZXRTYWxhcnkoc2FsYXJ5KTsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgcG9zaXRpb24sCiAgICAgICAgIGRvdWJsZSBzYWxhcnkpIHRocm93cyBDcmVhdGVFeGNlcHRpb24geyB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgY3R4KSB7CiAgICAgICAgIGNvbnRleHQgPSBjdHg7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgewogICAgICAgICBjb250ZXh0ID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJQbGF5ZXJCZWFuIGVqYlJlbW92ZSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJQbGF5ZXJCZWFuIGVqYkxvYWQiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsKICAgICAgICAgRGVidWcucHJpbnQoIlBsYXllckJlYW4gZWpiU3RvcmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7IH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgeyB9CiAKIH0gLy8gUGxheWVyQmVhbiBjbGFzcwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9lamIvdGVhbS9QbGF5ZXJIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi90ZWFtL1BsYXllckhvbWUuamF2YQppbmRleCBkZWQ5NzI0Li44NDU5ODUyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi90ZWFtL1BsYXllckhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi90ZWFtL1BsYXllckhvbWUuamF2YQpAQCAtMjYsMzUgKzI2LDM1IEBACiAgICAgcHVibGljIFBsYXllciBjcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBwb3NpdGlvbiwKICAgICAgICAgZG91YmxlIHNhbGFyeSkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIFBsYXllciBmaW5kQnlQcmltYXJ5S2V5IChTdHJpbmcgaWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQb3NpdGlvbihTdHJpbmcgcG9zaXRpb24pIAorCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UG9zaXRpb24oU3RyaW5nIHBvc2l0aW9uKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlIaWdoZXJTYWxhcnkoU3RyaW5nIG5hbWUpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U2FsYXJ5UmFuZ2UoZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVNhbGFyeVJhbmdlKGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKLS8vICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUxlYWd1ZShMZWFndWUgbGVhZ3VlKSAKKy8vICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUxlYWd1ZShMZWFndWUgbGVhZ3VlKQogLy8gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVNwb3J0KFN0cmluZyBzcG9ydCkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U3BvcnQoU3RyaW5nIHNwb3J0KQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlDaXR5KFN0cmluZyBjaXR5KSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlDaXR5KFN0cmluZyBjaXR5KQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEFsbCgpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmROb3RPblRlYW0oKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kTm90T25UZWFtKCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UG9zaXRpb25BbmROYW1lKFN0cmluZyBwb3NpdGlvbiwgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UG9zaXRpb25BbmROYW1lKFN0cmluZyBwb3NpdGlvbiwKICAgICAgICAgU3RyaW5nIG5hbWUpIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVRlc3QgKFN0cmluZyBwYXJtMSwgU3RyaW5nIHBhcm0yLCBTdHJpbmcgcGFybTMpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi90ZWFtL1RlYW1CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi90ZWFtL1RlYW1CZWFuLmphdmEKaW5kZXggNzRmYTRkNy4uYjg1MmVjMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9lamIvdGVhbS9UZWFtQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvZWpiL3RlYW0vVGVhbUJlYW4uamF2YQpAQCAtMzAsNyArMzAsNyBAQAogCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRUZWFtSWQoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRUZWFtSWQoU3RyaW5nIGlkKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0TmFtZSgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOwogCkBAIC0zOSw3ICszOSw3IEBACiAKIAogICAgIC8vIEFjY2VzcyBtZXRob2RzIGZvciByZWxhdGlvbnNoaXAgZmllbGRzCi0gICAgICAgICAgICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgQ29sbGVjdGlvbiBnZXRQbGF5ZXJzKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0UGxheWVycyhDb2xsZWN0aW9uIHBsYXllcnMpOwogCkBAIC01Miw1NSArNTIsNTUgQEAKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZWpiU2VsZWN0QnlOYW1lV2l0aENPTkNBVChTdHJpbmcgcGFydDEsIFN0cmluZyBwYXJ0MikKLSAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsJCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CisKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGVqYlNlbGVjdEJ5TmFtZVN1YnN0cmluZyhTdHJpbmcgc3Vic3RyaW5nKQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwkKKyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZWpiU2VsZWN0TmFtZUxvY2F0ZShTdHJpbmcgc3Vic3RyaW5nKQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwkKKyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgLy8gQnVzaW5lc3MgbWV0aG9kcwogCiAgICAgcHVibGljIGRvdWJsZSBnZXRTYWxhcnlPZlBsYXllcihTdHJpbmcgcGxheWVyTmFtZSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7CiAgICAgICAgIExvY2FsVGVhbSB0ZWFtID0gKHRlYW0uTG9jYWxUZWFtKWNvbnRleHQuZ2V0RUpCTG9jYWxPYmplY3QoKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGVqYlNlbGVjdFNhbGFyeU9mUGxheWVySW5UZWFtKHRlYW0sIHBsYXllck5hbWUpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgcHVibGljIFN0cmluZyBnZXRUZWFtTmFtZVdpdGhTdHJpbmdmdW5jdGlvblRlc3RzMSgpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBTdHJpbmdCdWZmZXIgb3V0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogLy8gICAgICAgIExvY2FsVGVhbSB0ZWFtID0gKHRlYW0uTG9jYWxUZWFtKSBjb250ZXh0LmdldEVKQkxvY2FsT2JqZWN0KCk7CiAvLyAgICAgICAgb3V0LmFwcGVuZCgiPEJSPk5hbWUgb2YgVGVhbSA6ICIgKyB0ZWFtLmdldE5hbWUoKSk7Ci0gICAgICAgIG91dC5hcHBlbmQoIjxCUj4iKTsJCQorICAgICAgICBvdXQuYXBwZW5kKCI8QlI+Iik7CiAgICAgICAgIG91dC5hcHBlbmQoZWpiU2VsZWN0QnlOYW1lV2l0aENPTkNBVCgiQ3IiLCAib3dzIikpOwogICAgICAgICBvdXQuYXBwZW5kKCI8QlI+Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBvdXQudG9TdHJpbmcoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1OYW1lV2l0aFN0cmluZ2Z1bmN0aW9uVGVzdHMyKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIFN0cmluZ0J1ZmZlciBvdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgIG91dC5hcHBlbmQoZWpiU2VsZWN0QnlOYW1lU3Vic3RyaW5nKCJhYWFhQ3Jvd3NhYWFhYSIpKTsKICAgICAgICAgb3V0LmFwcGVuZCgiPEJSPiIpOwogCiAgICAgICAgIHJldHVybiBvdXQudG9TdHJpbmcoKTsKICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRUZWFtTmFtZVdpdGhTdHJpbmdmdW5jdGlvblRlc3RzMygpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBTdHJpbmdCdWZmZXIgb3V0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICAgICBvdXQuYXBwZW5kKGVqYlNlbGVjdE5hbWVMb2NhdGUoInJvdyIpKTsKICAgICAgICAgb3V0LmFwcGVuZCgiPEJSPiIpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gb3V0LnRvU3RyaW5nKCk7CiAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldENvcHlPZlBsYXllcnMoKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlRlYW1CZWFuIGdldENvcHlPZlBsYXllcnMiKTsKQEAgLTE1MSwzMCArMTUxLDMwIEBACiAgICAgICAgIHNldENpdHkoY2l0eSk7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGNpdHkpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24geyB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgY3R4KSB7CiAgICAgICAgIGNvbnRleHQgPSBjdHg7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgewogICAgICAgICBjb250ZXh0ID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJUZWFtQmVhbiBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiVGVhbUJlYW4gZWpiTG9hZCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiVGVhbUJlYW4gZWpiU3RvcmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7IH0KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi90ZWFtL1RlYW1Ib21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL2VqYi90ZWFtL1RlYW1Ib21lLmphdmEKaW5kZXggZmUxMzA0NC4uYmNmZTQzOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9lamIvdGVhbS9UZWFtSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvZWpiL3RlYW0vVGVhbUhvbWUuamF2YQpAQCAtMjUsMTQgKzI1LDE0IEBACiAKICAgICBwdWJsaWMgVGVhbSBjcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBjaXR5KQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgVGVhbSBmaW5kQnlQcmltYXJ5S2V5IChTdHJpbmcgaWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwotICAgIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBsYXllckFuZExlYWd1ZVZpYVJlbW90ZShQbGF5ZXIgcGxheWVyLCAKKworICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBsYXllckFuZExlYWd1ZVZpYVJlbW90ZShQbGF5ZXIgcGxheWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMZWFndWUgbGVhZ3VlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvZWpiL3V0aWwvUGxheWVyRGV0YWlscy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9lamIvdXRpbC9QbGF5ZXJEZXRhaWxzLmphdmEKaW5kZXggODEwNDFjMi4uNDc2NWJjZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9lamIvdXRpbC9QbGF5ZXJEZXRhaWxzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9lamIvdXRpbC9QbGF5ZXJEZXRhaWxzLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKICAgICBwcml2YXRlIFN0cmluZyBwb3NpdGlvbjsKICAgICBwcml2YXRlIGRvdWJsZSBzYWxhcnk7CiAKLSAgICBwdWJsaWMgUGxheWVyRGV0YWlscyAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHBvc2l0aW9uLCAKKyAgICBwdWJsaWMgUGxheWVyRGV0YWlscyAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHBvc2l0aW9uLAogICAgICAgICBkb3VibGUgc2FsYXJ5KSB7CiAKICAgICAgICAgdGhpcy5pZCA9IGlkOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9zZXJ2bGV0L1Jvc3RlclNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXIyVGVhbXMvc2VydmxldC9Sb3N0ZXJTZXJ2bGV0LmphdmEKaW5kZXggODFhZGUwNC4uNmEzYzk5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcjJUZWFtcy9zZXJ2bGV0L1Jvc3RlclNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyMlRlYW1zL3NlcnZsZXQvUm9zdGVyU2VydmxldC5qYXZhCkBAIC04NCw3ICs4NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvc3RlckhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgIFJvc3RlciBteVJvc3RlciA9IGhvbWUuY3JlYXRlKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAvLyBkZWxldGluZyBhbGwgZXhpc2l0aW5nIERCLWVudHJpZXMKICAgICAgICAgICAgbXlSb3N0ZXIuY2xlYW5VcCgpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDc4OGE1MzcuLmNlNmEwZDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMyArMTUsMTMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InJvc3RlckdlbkRCU2NoZW1hIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogCi08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJSb3N0ZXJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iUm9zdGVyQ2xpZW50Ii8+CiAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KQEAgLTM0LDEwICszNCwxMCBAQAogCiA8cHJvcGVydHkgbmFtZT0ic3VuLWNtcC1tYXBwaW5ncy10ZWFtLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWNtcC1tYXBwaW5ncy10ZWFtLnhtbCIvPgogCi08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogCkBAIC00Nyw3ICs0Nyw3IEBACiA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0idHJ1ZSIvPgogCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIKLQl2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIgotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9idWlsZC54bWwKaW5kZXggMGZkNzg4OC4uNDk5NmQ0MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvYnVpbGQueG1sCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICA8ZGVsZXRlIGZpbGU9IiR7c3VuLWNtcC1tYXBwaW5ncy54bWx9Ii8+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE2ICs0NiwxNiBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLXRlYW0tamFyIiA+CiAKLSAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4gCi0gICAKLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWpiamFyLWNvbW1vbiI+CisKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9InRlYW0vTG9jYWwqLmNsYXNzLCB0ZWFtL0xlYWd1ZSouY2xhc3MsIHRlYW0vUGxheWVyKi5jbGFzcywgdGVhbS9UZWFtKi5jbGFzcywgdXRpbC8qLmNsYXNzIiAvPgogCiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iJHtlamItamFyLXRlYW0ueG1sfSIgLz4KQEAgLTYzLDIyICs2MywyMiBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJzdW4tY21wLW1hcHBpbmdzLnhtbCIgdmFsdWU9IiR7c3VuLWNtcC1tYXBwaW5ncy10ZWFtLnhtbH0iIC8+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAvPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamIuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9L3RlYW0tZWpiLmphciIgLz4KLSAgCisKICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLXJvc3Rlci1qYXIiID4KIAotICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVqYmphci1jb21tb24iPiAKLSAgIAotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4KKworICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0idGVhbS9Mb2NhbCouY2xhc3MsIHRlYW0vTGVhZ3VlLmNsYXNzLCB0ZWFtL0xlYWd1ZUhvbWUuY2xhc3MsIHRlYW0vUGxheWVyLmNsYXNzLCB0ZWFtL1BsYXllckhvbWUuY2xhc3MsIHRlYW0vVGVhbS5jbGFzcywgdGVhbS9UZWFtSG9tZS5jbGFzcywsdXRpbC8qLmNsYXNzLHJvc3Rlci8qLmNsYXNzIiAvPgogCiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iJHtlamItamFyLXJvc3Rlci54bWx9IiAvPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSIke3N1bi1lamItamFyLXJvc3Rlci54bWx9IiAvPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgLz4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS9yb3N0ZXItZWpiLmphciIgLz4KLSAgCisKICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCkBAIC04NiwxNyArODYsMTcgQEAKIAogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0idHJ1ZSIvPgotCSAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiCisgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1Jvc3RlclNlcnZsZXQuY2xhc3MiIC8+Ci0JPC9hbnRjYWxsPgotIAorICAgIDwvYW50Y2FsbD4KKwogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLWFwcGNsaWVudCIgPgogICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAKICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9Sb3N0ZXJDbGllbnQuY2xhc3MsICoqL1Jvc3Rlci5jbGFzcywgKiovUm9zdGVySG9tZS5jbGFzcywgdXRpbC8qLmNsYXNzIiAvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiCiAgICAgICAgICAgICAgICAgdmFsdWU9IiR7YXBwbGljYXRpb24tY2xpZW50LnhtbH0iIC8+CkBAIC0xMTcsMTUgKzExNywxNSBAQAogCiAgICAgICA8cHJvcGVydHkgbmFtZT0iVEVNUERJUiIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS9URU1QRElSIiAvPgogCi0JPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS9kZXNjcmlwdG9yL0lOREVYLkxJU1QiIHRvZGlyPSIke1RFTVBESVJ9L01FVEEtSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICA8Y29weSBmaWxlPSIke2Jhc2VkaXJ9L2Rlc2NyaXB0b3IvSU5ERVguTElTVCIgdG9kaXI9IiR7VEVNUERJUn0vTUVUQS1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogCiAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgotCTxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KLQkgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+Ci0JICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgotCTwvZmlsZXNldD4KKyAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CisgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgorICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KKyAgICA8L2ZpbGVzZXQ+CiAKLQk8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfS9saWIiIGluY2x1ZGVzPSJyZXBvcnRlci5qYXIiLz4KKyAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfS9saWIiIGluY2x1ZGVzPSJyZXBvcnRlci5qYXIiLz4KICAgICAgIDwvZWFyPgogICAgIDwvdGFyZ2V0PgogCkBAIC0xNDEsMTEgKzE0MSwxMSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWFyIiAvPgogCiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKIAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0iJHtiYXNlZGlyfS9zcWwvUm9zdGVyQXBwX2RlcmJ5LnNxbCIvPgpAQCAtMTY0LDIyICsxNjQsMjIgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iJHtiYXNlZGlyfS8uLi9jb21tb24vZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSIke2Jhc2VkaXJ9L3NxbC9kcm9wX1Jvc3RlckFwcF9kZXJieS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgYWxsCiAgICAgICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9jbGllbnQvUm9zdGVyQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvY2xpZW50L1Jvc3RlckNsaWVudC5qYXZhCmluZGV4IGMzYTEwOTcuLmFkZWM2MjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9jbGllbnQvUm9zdGVyQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2NsaWVudC9Sb3N0ZXJDbGllbnQuamF2YQpAQCAtMjgsMTggKzI4LDE4IEBACiBwdWJsaWMgY2xhc3MgUm9zdGVyQ2xpZW50IHsKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KLQluZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CisgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgdHJ5IHsKLQkgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNUQVJUIik7CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTVEFSVCIpOwogICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJSb3N0ZXJHZW5EQlNjaGVtYSIpOwogCiAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVJvc3RlckV4dCIpOwogCi0gICAgICAgICAgIFJvc3RlckhvbWUgaG9tZSA9IAotICAgICAgICAgICAgICAgKFJvc3RlckhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgIFJvc3RlckhvbWUgaG9tZSA9CisgICAgICAgICAgICAgICAoUm9zdGVySG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSb3N0ZXJIb21lLmNsYXNzKTsKIAogICAgICAgICAgICBSb3N0ZXIgbXlSb3N0ZXIgPSBob21lLmNyZWF0ZSgpOwpAQCAtNDksOCArNDksOCBAQAogCiAgICAgICAgICAgIC8vIGdldE1vcmVJbmZvKG15Um9zdGVyKTsKIAotCSAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgUm9zdGVyR2VuREJTY2hlbWEiLCBzdGF0LlBBU1MpOwotCSAgIHN0YXQucHJpbnRTdW1tYXJ5KCJSb3N0ZXJHZW5EQlNjaGVtYSIpOworICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgUm9zdGVyR2VuREJTY2hlbWEiLCBzdGF0LlBBU1MpOworICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJSb3N0ZXJHZW5EQlNjaGVtYSIpOwogICAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKIAogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtODYsNyArODYsNyBAQAogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiBleGNlcHRpb246Iik7CiAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAJICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBSb3N0ZXJHZW5EQlNjaGVtYSIsIHN0YXQuRkFJTCk7CisgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IFJvc3RlckdlbkRCU2NoZW1hIiwgc3RhdC5GQUlMKTsKICAgICAgICB9CiAKICAgICB9IC8vIGdldFNvbWVJbmZvCkBAIC0xMjQsNyArMTI0LDcgQEAKICAgICAgICAgICAgcGxheWVyTGlzdCA9IG15Um9zdGVyLmdldFBsYXllcnNCeVBvc2l0aW9uKCJkZWZlbmRlciIpOwogICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0QWxsUGxheWVycygpOwogICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0UGxheWVyc05vdE9uVGVhbSgpOwotICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lKCJwb3dlciBmb3J3YXJkIiwgCisgICAgICAgICAgIHBsYXllckxpc3QgPSBteVJvc3Rlci5nZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUoInBvd2VyIGZvcndhcmQiLAogICAgICAgICAgICAgICAgIkphY2sgUGF0dGVyc29uIik7CiAgICAgICAgICAgIHBsYXllckxpc3QgPSBteVJvc3Rlci5nZXRQbGF5ZXJzQnlDaXR5KCJUcnVja2VlIik7CiAgICAgICAgICAgIHBsYXllckxpc3QgPSBteVJvc3Rlci5nZXRQbGF5ZXJzQnlTcG9ydCgiU29jY2VyIik7CkBAIC0xNDIsNyArMTQyLDcgQEAKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gZXhjZXB0aW9uOiIpOwogICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgIAkgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IFJvc3RlckdlbkRCU2NoZW1hIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IFJvc3RlckdlbkRCU2NoZW1hIiwgc3RhdC5GQUlMKTsKICAgICAgICB9CiAKICAgICB9IC8vIGdldE1vcmVJbmZvCkBAIC0xNzYsNyArMTc2LDcgQEAKIAogICAgICAgICAgICBteVJvc3Rlci5jcmVhdGVUZWFtSW5MZWFndWUobmV3IFRlYW1EZXRhaWxzKAogICAgICAgICAgICAgICAiVDIiLCAiR29waGVycyIsICJNYW50ZWNhIiksICJMMSIpOwotICAgICAgICAgICAKKwogICAgICAgICAgICBteVJvc3Rlci5jcmVhdGVUZWFtSW5MZWFndWUobmV3IFRlYW1EZXRhaWxzKAogICAgICAgICAgICAgICAiVDMiLCAiRGVlciIsICJCb2RpZSIpLCAiTDIiKTsKIApAQCAtMzAwLDcgKzMwMCw3IEBACiAKICAgICAgICAgICAgbXlSb3N0ZXIuY3JlYXRlUGxheWVyKG5ldyBQbGF5ZXJEZXRhaWxzKAogICAgICAgICAgICAgICAiUDI2IiwgIkhvYmllIEphY2tzb24iLCAicGl0Y2hlciIsIDU4Mi4wMCkpOwotICAgICAgICAgIAorCiAgICAgICAgICAgIG15Um9zdGVyLmNyZWF0ZVBsYXllcihuZXcgUGxheWVyRGV0YWlscygKICAgICAgICAgICAgICAgIlAyNyIsICJNZWxpbmRhIEtlbmRhbGwiLCAiY2F0Y2hlciIsIDY3Ny4wMCkpOwogCkBAIC0zMTQsNyArMzE0LDcgQEAKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gZXhjZXB0aW9uOiIpOwogICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQkgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IFJvc3RlckdlbkRCU2NoZW1hIiwgc3RhdC5GQUlMKTsKKyAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IFJvc3RlckdlbkRCU2NoZW1hIiwgc3RhdC5GQUlMKTsKICAgICAgICB9CiAKICAgICB9IC8vIGluc2VydEluZm8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9kZXNjcmlwdG9yL2VqYi1qYXItdGVhbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZGVzY3JpcHRvci9lamItamFyLXRlYW0ueG1sCmluZGV4IDcwNGM4MDIuLjg1NmJiYjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9kZXNjcmlwdG9yL2VqYi1qYXItdGVhbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2Rlc2NyaXB0b3IvZWpiLWphci10ZWFtLnhtbApAQCAtMjUsNyArMjUsNyBAQAogICAgICAgPGRpc3BsYXktbmFtZT5MZWFndWVFSkI8L2Rpc3BsYXktbmFtZT4KICAgICAgIDxlamItbmFtZT5MZWFndWVFSkI8L2VqYi1uYW1lPgogICAgICAgPGhvbWU+dGVhbS5MZWFndWVIb21lPC9ob21lPgotICAgICAgPHJlbW90ZT50ZWFtLkxlYWd1ZTwvcmVtb3RlPiAgICAgIAorICAgICAgPHJlbW90ZT50ZWFtLkxlYWd1ZTwvcmVtb3RlPgogICAgICAgPGxvY2FsLWhvbWU+dGVhbS5Mb2NhbExlYWd1ZUhvbWU8L2xvY2FsLWhvbWU+CiAgICAgICA8bG9jYWw+dGVhbS5Mb2NhbExlYWd1ZTwvbG9jYWw+CiAgICAgICA8ZWpiLWNsYXNzPnRlYW0uTGVhZ3VlQmVhbjwvZWpiLWNsYXNzPgpAQCAtMTQzLDcgKzE0Myw3IEBACiAgICAgICAgIDwvcXVlcnktbWV0aG9kPgogICAgICAgICA8cmVzdWx0LXR5cGUtbWFwcGluZz5SZW1vdGU8L3Jlc3VsdC10eXBlLW1hcHBpbmc+CiAgICAgICAgIDxlamItcWw+c2VsZWN0IE9iamVjdChwKSBmcm9tIExlYWd1ZSBsLCBpbihsLnRlYW1zKSBhcyB0LCBpbih0LnBsYXllcnMpIHAgd2hlcmUgbCA9ID8xPC9lamItcWw+Ci0gICAgICA8L3F1ZXJ5PiAgICAgIAorICAgICAgPC9xdWVyeT4KICAgICA8L2VudGl0eT4KICAgICA8ZW50aXR5PgogICAgICAgPGRpc3BsYXktbmFtZT5UZWFtRUpCPC9kaXNwbGF5LW5hbWU+CkBAIC0yNDYsNyArMjQ2LDcgQEAKICAgICAgICAgICA8L21ldGhvZC1wYXJhbXM+CiAgICAgICAgIDwvcXVlcnktbWV0aG9kPgogICAgICAgICA8ZWpiLXFsPnNlbGVjdCBkaXN0aW5jdCB0Lm5hbWUgZnJvbSBUZWFtIHQgd2hlcmUgTE9DQVRFKD8xLCB0Lm5hbWUpICZndDsgMCBBTkQgTE9DQVRFKD8xLCB0Lm5hbWUpICZsdDsgTEVOR1RIKHQubmFtZSk8L2VqYi1xbD4KLSAgICAgIDwvcXVlcnk+ICAgICAgCisgICAgICA8L3F1ZXJ5PgogICAgIDwvZW50aXR5PgogICAgIDxlbnRpdHk+CiAgICAgICA8ZGlzcGxheS1uYW1lPlBsYXllckVKQjwvZGlzcGxheS1uYW1lPgpAQCAtMjg4LDcgKzI4OCw3IEBACiAgICAgICAgICAgPG1ldGhvZC1uYW1lPmZpbmROb3RPblRlYW08L21ldGhvZC1uYW1lPgogICAgICAgICAgIDxtZXRob2QtcGFyYW1zIC8+CiAgICAgICAgIDwvcXVlcnktbWV0aG9kPgotICAgICAgICA8ZWpiLXFsPnNlbGVjdCBvYmplY3QocCkgZnJvbSBQbGF5ZXIgcCAKKyAgICAgICAgPGVqYi1xbD5zZWxlY3Qgb2JqZWN0KHApIGZyb20gUGxheWVyIHAKIHdoZXJlIHAudGVhbXMgaXMgZW1wdHk8L2VqYi1xbD4KICAgICAgIDwvcXVlcnk+CiAgICAgICA8cXVlcnk+CkBAIC00NzQsNyArNDc0LDcgQEAKICAgICAgICAgICA8L21ldGhvZC1wYXJhbXM+CiAgICAgICAgIDwvcXVlcnktbWV0aG9kPgogICAgICAgICA8ZWpiLXFsPnNlbGVjdCBvYmplY3QocCkgZnJvbSBQbGF5ZXIgcCB3aGVyZSBwLnNhbGFyeSA9IFNRUlQoPzEpPC9lamItcWw+Ci0gICAgICA8L3F1ZXJ5PiAgICAgIAorICAgICAgPC9xdWVyeT4KICAgICA8L2VudGl0eT4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgogICA8cmVsYXRpb25zaGlwcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9kZXNjcmlwdG9yL3N1bi1jbXAtbWFwcGluZ3MtdGVhbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZGVzY3JpcHRvci9zdW4tY21wLW1hcHBpbmdzLXRlYW0ueG1sCmluZGV4IDZhNWExMTAuLmU5ODVmMTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9kZXNjcmlwdG9yL3N1bi1jbXAtbWFwcGluZ3MtdGVhbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2Rlc2NyaXB0b3Ivc3VuLWNtcC1tYXBwaW5ncy10ZWFtLnhtbApAQCAtMjEsMTAgKzIxLDEwIEBACiA8c3VuLWNtcC1tYXBwaW5ncz4KICAgPHN1bi1jbXAtbWFwcGluZz4KICAgICA8IS0tIFRlc3QgdGhhdCB3ZSBjYW4gZ2VuZXJhdGUgZGJzY2hlbWEgYXQgZGVwbG95bWVudC4gLS0+Ci0JPCEtLSBJdCBjb3VsZCBiZSBtaXNzaW5nICh0aG91Z2ggdGhhdCB3b3VsZCBmYWlsIGEgRFREIHZhbGlkYXRpb24pLiAtLT4KKyAgICA8IS0tIEl0IGNvdWxkIGJlIG1pc3NpbmcgKHRob3VnaCB0aGF0IHdvdWxkIGZhaWwgYSBEVEQgdmFsaWRhdGlvbikuIC0tPgogICAgIDwhLS0gc2NoZW1hPlJvc3RlclNjaGVtYTwvc2NoZW1hLS0+Ci0JPCEtLSBPciwgaXQgY291bGQgYmUgYW4gZW1wdHkgZWxlbWVudCAocGFzc2luZyB2YWxpZGF0aW9uKS4gLS0+Ci0JPHNjaGVtYS8+CisgICAgPCEtLSBPciwgaXQgY291bGQgYmUgYW4gZW1wdHkgZWxlbWVudCAocGFzc2luZyB2YWxpZGF0aW9uKS4gLS0+CisgICAgPHNjaGVtYS8+CiAgICAgPGVudGl0eS1tYXBwaW5nPgogICAgICAgPGVqYi1uYW1lPkxlYWd1ZUVKQjwvZWpiLW5hbWU+CiAgICAgICA8dGFibGUtbmFtZT5MRUFHVUU8L3RhYmxlLW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZWpiL3Jvc3Rlci9Sb3N0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9lamIvcm9zdGVyL1Jvc3Rlci5qYXZhCmluZGV4IDY5MmExODUuLjI3OWFhYjcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9lamIvcm9zdGVyL1Jvc3Rlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9lamIvcm9zdGVyL1Jvc3Rlci5qYXZhCkBAIC0yNyw1NSArMjcsNTUgQEAKIGltcG9ydCBqYXZhLnV0aWwuU2V0OwogCiBwdWJsaWMgaW50ZXJmYWNlIFJvc3RlciBleHRlbmRzIEVKQk9iamVjdCB7Ci0gCisKICAgICAvLyBQbGF5ZXJzCiAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVQbGF5ZXIoUGxheWVyRGV0YWlscyBkZXRhaWxzKSAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVQbGF5ZXIoUGxheWVyRGV0YWlscyBkZXRhaWxzKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIHZvaWQgYWRkUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkgCisgICAgcHVibGljIHZvaWQgYWRkUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVBsYXllcihTdHJpbmcgcGxheWVySWQpIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVBsYXllcihTdHJpbmcgcGxheWVySWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgdm9pZCBkcm9wUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkgCisgICAgcHVibGljIHZvaWQgZHJvcFBsYXllcihTdHJpbmcgcGxheWVySWQsIFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgUGxheWVyRGV0YWlscyBnZXRQbGF5ZXIoU3RyaW5nIHBsYXllcklkKSAKKyAgICBwdWJsaWMgUGxheWVyRGV0YWlscyBnZXRQbGF5ZXIoU3RyaW5nIHBsYXllcklkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtKFN0cmluZyB0ZWFtSWQpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbShTdHJpbmcgdGVhbUlkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtQ29weShTdHJpbmcgdGVhbUlkKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNPZlRlYW1Db3B5KFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVBvc2l0aW9uKFN0cmluZyBwb3NpdGlvbikgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlQb3NpdGlvbihTdHJpbmcgcG9zaXRpb24pCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlIaWdoZXJTYWxhcnkoU3RyaW5nIG5hbWUpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVNhbGFyeVJhbmdlKGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVNhbGFyeVJhbmdlKGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlMZWFndWVJZChTdHJpbmcgbGVhZ3VlSWQpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5TGVhZ3VlSWQoU3RyaW5nIGxlYWd1ZUlkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTcG9ydChTdHJpbmcgc3BvcnQpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U3BvcnQoU3RyaW5nIHNwb3J0KQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlDaXR5KFN0cmluZyBjaXR5KSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUNpdHkoU3RyaW5nIGNpdHkpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldEFsbFBsYXllcnMoKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldEFsbFBsYXllcnMoKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzTm90T25UZWFtKCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzTm90T25UZWFtKCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lKFN0cmluZyBwb3NpdGlvbiwgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUoU3RyaW5nIHBvc2l0aW9uLAogICAgICAgICBTdHJpbmcgbmFtZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0TGVhZ3Vlc09mUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkKQEAgLTgzLDg0ICs4Myw4NCBAQAogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRTcG9ydHNPZlBsYXllcihTdHJpbmcgcGxheWVySWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgICAgIAorCiAgICAgcHVibGljIGRvdWJsZSBnZXRTYWxhcnlPZlBsYXllckZyb21UZWFtKFN0cmluZyB0ZWFtSUQsIFN0cmluZyBwbGF5ZXJOYW1lKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOyAgIAotICAgICAgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKwogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aFBvc2l0aW9uc0dvYWxrZWVwZXJPckRlZmVuZGVyKCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhOYW1lRW5kaW5nV2l0aE9OKCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aE5hbWVFbmRpbmdXaXRoT04oKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aE51bGxOYW1lKCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhUZWFtKFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgICAgIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhTYWxhcnlVc2luZ0FCUyhkb3VibGUgc2FsYXJ5KQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOyAKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhTYWxhcnlVc2luZ1NRUlQoZG91YmxlIHNhbGFyeSkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nQUJTKGRvdWJsZSBzYWxhcnkpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgCi0gICAgICAgICAgIAorCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nU1FSVChkb3VibGUgc2FsYXJ5KQorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworCisKICAgICAvLyBUZWFtcwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRUZWFtc09mTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRUZWFtc09mTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRlYW1JbkxlYWd1ZShUZWFtRGV0YWlscyBkZXRhaWxzLCBTdHJpbmcgbGVhZ3VlSWQpIAorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRlYW1JbkxlYWd1ZShUZWFtRGV0YWlscyBkZXRhaWxzLCBTdHJpbmcgbGVhZ3VlSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVUZWFtKFN0cmluZyB0ZWFtSWQpIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVRlYW0oU3RyaW5nIHRlYW1JZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBUZWFtRGV0YWlscyBnZXRUZWFtKFN0cmluZyB0ZWFtSWQpIAorICAgIHB1YmxpYyBUZWFtRGV0YWlscyBnZXRUZWFtKFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFRlYW1zQnlQbGF5ZXJBbmRMZWFndWUoU3RyaW5nIHBsYXllcktleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxlYWd1ZUtleSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsJCi0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisKICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFRlYW1zQnlQbGF5ZXJBbmRMZWFndWVWaWFSZW1vdGUoU3RyaW5nIHBsYXllcktleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxlYWd1ZUtleSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgU2V0IGdldENpdGllc09mTGVhZ3VlKFN0cmluZyBsZWFndWVLZXkpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgVGVhbURldGFpbHMgZ2V0VGVhbU9mTGVhZ3VlQnlDaXR5KFN0cmluZyBsZWFndWVLZXksIFN0cmluZyBjaXR5KQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwkgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVhbXNOYW1lT2ZMZWFndWVCeUNpdHkoU3RyaW5nIGxlYWd1ZUtleSwgU3RyaW5nIGNpdHkpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CSAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljICBTdHJpbmcgZ2V0VGVhbU5hbWVWYXJpYXRpb25zKFN0cmluZyB0ZWFtSWQpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgVGVhbURldGFpbHMgZ2V0UmVtb3RlVGVhbU9mTGVhZ3VlQnlDaXR5KFN0cmluZyBsZWFndWVLZXksIFN0cmluZyBjaXR5KQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwkgICAKLSAgICAgICAgCi0gICAgICAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworCisKICAgICAvLyBMZWFndWVzCiAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVMZWFndWUoTGVhZ3VlRGV0YWlscyBkZXRhaWxzKSAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVMZWFndWUoTGVhZ3VlRGV0YWlscyBkZXRhaWxzKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBMZWFndWVEZXRhaWxzIGdldExlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIAorICAgIHB1YmxpYyBMZWFndWVEZXRhaWxzIGdldExlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgTGVhZ3VlRGV0YWlscyBnZXRMZWFndWVCeU5hbWUoU3RyaW5nIG5hbWUpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgICAgIAorCiAgICAgLy8gVGVzdAogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRSZW1vdGVUZWFtc09mTGVhZ3VlKFN0cmluZyBsZWFndWVLZXkpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CkBAIC0xNjksNyArMTY5LDcgQEAKIAogICAgIHB1YmxpYyBBcnJheUxpc3QgdGVzdEZpbmRlcihTdHJpbmcgcGFybTEsIFN0cmluZyBwYXJtMiwgU3RyaW5nIHBhcm0zKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNsZWFuVXAoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdmVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAgICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9lamIvcm9zdGVyL1Jvc3RlckJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9lamIvcm9zdGVyL1Jvc3RlckJlYW4uamF2YQppbmRleCAzODY5NzliLi4zNmI5NWIzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZWpiL3Jvc3Rlci9Sb3N0ZXJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2VqYi9yb3N0ZXIvUm9zdGVyQmVhbi5qYXZhCkBAIC01MiwxOSArNTIsMTkgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVBsYXllcihQbGF5ZXJEZXRhaWxzIGRldGFpbHMpIHsgCi0gCisgICAgcHVibGljIHZvaWQgY3JlYXRlUGxheWVyKFBsYXllckRldGFpbHMgZGV0YWlscykgeworCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGNyZWF0ZVBsYXllciIpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgTG9jYWxQbGF5ZXIgcGxheWVyID0gcGxheWVySG9tZS5jcmVhdGUoZGV0YWlscy5nZXRJZCgpLCAKKyAgICAgICAgICAgIExvY2FsUGxheWVyIHBsYXllciA9IHBsYXllckhvbWUuY3JlYXRlKGRldGFpbHMuZ2V0SWQoKSwKICAgICAgICAgICAgICAgICBkZXRhaWxzLmdldE5hbWUoKSwgZGV0YWlscy5nZXRQb3NpdGlvbigpLCBkZXRhaWxzLmdldFNhbGFyeSgpKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gCi0gICAgcHVibGljIHZvaWQgYWRkUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkgeyAKLSAKKworICAgIHB1YmxpYyB2b2lkIGFkZFBsYXllcihTdHJpbmcgcGxheWVySWQsIFN0cmluZyB0ZWFtSWQpIHsKKwogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBhZGRQbGF5ZXIiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIExvY2FsVGVhbSB0ZWFtID0gdGVhbUhvbWUuZmluZEJ5UHJpbWFyeUtleSh0ZWFtSWQpOwpAQCAtNzUsNyArNzUsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgeyAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVQbGF5ZXIoU3RyaW5nIHBsYXllcklkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gcmVtb3ZlUGxheWVyIik7CiAgICAgICAgIHRyeSB7CkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gCisKICAgICBwdWJsaWMgdm9pZCBkcm9wUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGRyb3BQbGF5ZXIiKTsKQEAgLTExMyw3ICsxMTMsNyBAQAogICAgIH0gLy8gZ2V0UGxheWVyCiAKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbShTdHJpbmcgdGVhbUlkKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbShTdHJpbmcgdGVhbUlkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc09mVGVhbSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwpAQCAtMTI4LDcgKzEyOCw3IEBACiAgICAgfSAvLyBnZXRQbGF5ZXJzT2ZUZWFtCiAKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbUNvcHkoU3RyaW5nIHRlYW1JZCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNPZlRlYW1Db3B5KFN0cmluZyB0ZWFtSWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzT2ZUZWFtQ29weSIpOwogICAgICAgICBBcnJheUxpc3QgcGxheWVyc0xpc3QgPSBudWxsOwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAgICAgfSAvLyBnZXRQbGF5ZXJzT2ZUZWFtQ29weQogCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFRlYW1zT2ZMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0VGVhbXNPZkxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRUZWFtc09mTGVhZ3VlIik7CiAKQEAgLTE4Niw3ICsxODYsNyBAQAogICAgIH0gLy8gZ2V0UGxheWVyc0J5UG9zaXRpb24KIAogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlIaWdoZXJTYWxhcnkoU3RyaW5nIG5hbWUpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlIaWdoZXJTYWxhcnkoU3RyaW5nIG5hbWUpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzQnlCeUhpZ2hlclNhbGFyeSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwpAQCAtMjAwLDcgKzIwMCw3IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldFBsYXllcnNCeUhpZ2hlclNhbGFyeQogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTYWxhcnlSYW5nZShkb3VibGUgbG93LCBkb3VibGUgaGlnaCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVNhbGFyeVJhbmdlKGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc0J5U2FsYXJ5UmFuZ2UiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKQEAgLTIxNCw3ICsyMTQsNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlTYWxhcnlSYW5nZQogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlMZWFndWVJZChTdHJpbmcgbGVhZ3VlSWQpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlMZWFndWVJZChTdHJpbmcgbGVhZ3VlSWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzQnlMZWFndWVJZCIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwpAQCAtMjI5LDcgKzIyOSw3IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldFBsYXllcnNCeUxlYWd1ZUlkCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVNwb3J0KFN0cmluZyBzcG9ydCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVNwb3J0KFN0cmluZyBzcG9ydCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNCeVNwb3J0Iik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CkBAIC0yNDMsNyArMjQzLDcgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0UGxheWVyc0J5U3BvcnQKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5Q2l0eShTdHJpbmcgY2l0eSkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUNpdHkoU3RyaW5nIGNpdHkpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzQnlDaXR5Iik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CkBAIC0yNTcsNyArMjU3LDcgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0UGxheWVyc0J5Q2l0eQogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRBbGxQbGF5ZXJzKCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldEFsbFBsYXllcnMoKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0QWxsUGxheWVycyIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwpAQCAtMjcxLDcgKzI3MSw3IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldEFsbFBsYXllcnMKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc05vdE9uVGVhbSgpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzTm90T25UZWFtKCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNOb3RPblRlYW0iKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKQEAgLTI4NSw4ICsyODUsOCBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzTm90T25UZWFtCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVBvc2l0aW9uQW5kTmFtZShTdHJpbmcgcG9zaXRpb24sIAotICAgICAgICBTdHJpbmcgbmFtZSkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVBvc2l0aW9uQW5kTmFtZShTdHJpbmcgcG9zaXRpb24sCisgICAgICAgIFN0cmluZyBuYW1lKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CkBAIC0zMDAsNyArMzAwLDcgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldExlYWd1ZXNPZlBsYXllcihTdHJpbmcgcGxheWVySWQpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRMZWFndWVzT2ZQbGF5ZXIoU3RyaW5nIHBsYXllcklkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0TGVhZ3Vlc09mUGxheWVyIik7CiAgICAgICAgIEFycmF5TGlzdCBkZXRhaWxzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKQEAgLTMxMiw3ICszMTIsNyBAQAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgCisKICAgICAgICAgSXRlcmF0b3IgaSA9IGxlYWd1ZXMuaXRlcmF0b3IoKTsKICAgICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWUgPSAoTG9jYWxMZWFndWUpIGkubmV4dCgpOwpAQCAtMzIzLDcgKzMyMyw3IEBACiAgICAgICAgIHJldHVybiBkZXRhaWxzTGlzdDsKICAgICB9IC8vIGdldExlYWd1ZXNPZlBsYXllcgogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRTcG9ydHNPZlBsYXllcihTdHJpbmcgcGxheWVySWQpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRTcG9ydHNPZlBsYXllcihTdHJpbmcgcGxheWVySWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRTcG9ydHNPZlBsYXllciIpOwogICAgICAgICBBcnJheUxpc3Qgc3BvcnRzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKQEAgLTMzNSw3ICszMzUsNyBAQAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgCisKICAgICAgICAgSXRlcmF0b3IgaSA9IHNwb3J0cy5pdGVyYXRvcigpOwogICAgICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgIFN0cmluZyBzcG9ydCA9IChTdHJpbmcpIGkubmV4dCgpOwpAQCAtMzQ2LDggKzM0Niw4IEBACiAKICAgICAvLyBUZWFtIGJ1c2luZXNzIG1ldGhvZHMKIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRlYW1JbkxlYWd1ZShUZWFtRGV0YWlscyBkZXRhaWxzLCBTdHJpbmcgbGVhZ3VlSWQpIHsgCi0gCisgICAgcHVibGljIHZvaWQgY3JlYXRlVGVhbUluTGVhZ3VlKFRlYW1EZXRhaWxzIGRldGFpbHMsIFN0cmluZyBsZWFndWVJZCkgeworCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGNyZWF0ZVRlYW1JbkxlYWd1ZSIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gbGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUlkKTsKQEAgLTM1OCw4ICszNTgsOCBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVRlYW0oU3RyaW5nIHRlYW1JZCkgeyAKKworICAgIHB1YmxpYyB2b2lkIHJlbW92ZVRlYW0oU3RyaW5nIHRlYW1JZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIHJlbW92ZVRlYW0iKTsKICAgICAgICAgdHJ5IHsKQEAgLTM2OSw3ICszNjksNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotIAorCiAgICAgcHVibGljIFRlYW1EZXRhaWxzIGdldFRlYW0oU3RyaW5nIHRlYW1JZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFRlYW0iKTsKQEAgLTM4NywxOCArMzg3LDE4IEBACiAKICAgICAvLyBMZWFndWUgYnVzaW5lc3MgbWV0aG9kcwogCi0gICAgcHVibGljIHZvaWQgY3JlYXRlTGVhZ3VlKExlYWd1ZURldGFpbHMgZGV0YWlscykgeyAKLSAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVMZWFndWUoTGVhZ3VlRGV0YWlscyBkZXRhaWxzKSB7CisKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gY3JlYXRlTGVhZ3VlIik7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWUgPSBsZWFndWVIb21lLmNyZWF0ZShkZXRhaWxzLmdldElkKCksIAorICAgICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gbGVhZ3VlSG9tZS5jcmVhdGUoZGV0YWlscy5nZXRJZCgpLAogICAgICAgICAgICAgICAgIGRldGFpbHMuZ2V0TmFtZSgpLCBkZXRhaWxzLmdldFNwb3J0KCkpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKSB7IAorCisgICAgcHVibGljIHZvaWQgcmVtb3ZlTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIHJlbW92ZUxlYWd1ZSIpOwogICAgICAgICB0cnkgewpAQCAtNDA4LDcgKzQwOCw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gCisKICAgICBwdWJsaWMgTGVhZ3VlRGV0YWlscyBnZXRMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0TGVhZ3VlIik7CkBAIC00MjIsNyArNDIyLDcgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbGVhZ3VlRGV0YWlsczsKICAgICB9Ci0gCisKICAgICAvLyBTZXNzaW9uQmVhbiBtZXRob2RzCiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKQEAgLTQ3MCw1MSArNDcwLDUxIEBACiAgICAgcHVibGljIFJvc3RlckJlYW4oKSB7fQogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHt9Ci0gCisKICAgICAvLyBQcml2YXRlIG1ldGhvZHMKIAogICAgIHByaXZhdGUgTG9jYWxQbGF5ZXJIb21lIGxvb2t1cFBsYXllcigpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewotICAgICAgIAorCiAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVBsYXllckV4dCIpOwogICAgICAgICByZXR1cm4gKExvY2FsUGxheWVySG9tZSkgb2JqcmVmOwogICAgfQogCiAgICAgcHJpdmF0ZSBMb2NhbFRlYW1Ib21lIGxvb2t1cFRlYW0oKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKLSAgICAgICAKKwogICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVUZWFtRXh0Iik7CiAgICAgICAgIHJldHVybiAoTG9jYWxUZWFtSG9tZSkgb2JqcmVmOwogICAgfQogCiAgICAgcHJpdmF0ZSBMb2NhbExlYWd1ZUhvbWUgbG9va3VwTGVhZ3VlKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7Ci0gICAgICAgCisKICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlTGVhZ3VlRXh0Iik7CiAgICAgICAgIHJldHVybiAoTG9jYWxMZWFndWVIb21lKSBvYmpyZWY7CiAgICB9CiAKICAgICBwcml2YXRlIFBsYXllckhvbWUgbG9va3VwUmVtb3RlUGxheWVyKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7Ci0gICAgICAgCisKICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvUmVtb3RlUGxheWVyRXh0Iik7CiAgICAgICAgIHJldHVybiAoUGxheWVySG9tZSkgb2JqcmVmOwogICAgfQogCiAgICAgcHJpdmF0ZSBUZWFtSG9tZSBsb29rdXBSZW1vdGVUZWFtKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7Ci0gICAgICAgCisKICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvUmVtb3RlVGVhbUV4dCIpOwogICAgICAgICByZXR1cm4gKFRlYW1Ib21lKSBvYmpyZWY7CiAgICB9CiAKICAgICBwcml2YXRlIExlYWd1ZUhvbWUgbG9va3VwUmVtb3RlTGVhZ3VlKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7Ci0gICAgICAgCisKICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvUmVtb3RlTGVhZ3VlRXh0Iik7CiAgICAgICAgIHJldHVybiAoTGVhZ3VlSG9tZSkgb2JqcmVmOwogICAgfQotICAgCisKICAgIHByaXZhdGUgQXJyYXlMaXN0IGNvcHlQbGF5ZXJzVG9EZXRhaWxzKENvbGxlY3Rpb24gcGxheWVycykgewogCiAgICAgICAgIEFycmF5TGlzdCBkZXRhaWxzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKQEAgLTU0NCwxNSArNTQ0LDE1IEBACiAKICAgICAgICAgcmV0dXJuIGRldGFpbHNMaXN0OwogICAgfSAvLyBjb3B5UGxheWVyc1RvRGV0YWlscwotICAgCisKICAgIC8qKgotICAgICogZGlydHkgY2xlYW5VcCBtZXRob2Qgb25seSBFSkJzIHdpdGggaGFyZGNvZGVkIFBLIHdpbGwgYmUgcmVtb3ZlZCAgCisgICAgKiBkaXJ0eSBjbGVhblVwIG1ldGhvZCBvbmx5IEVKQnMgd2l0aCBoYXJkY29kZWQgUEsgd2lsbCBiZSByZW1vdmVkCiAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjbGVhblVwKCkgewotICAgICAgICBEZWJ1Zy5wcmludCgiQ2xlYW5pbmcgdXAgdGhlIGRhdGFiYXNlIik7ICAgCisgICAgICAgIERlYnVnLnByaW50KCJDbGVhbmluZyB1cCB0aGUgZGF0YWJhc2UiKTsKICAgICAgICAgQ29sbGVjdGlvbiB0b0NsZWFuID0gbnVsbDsKICAgICAgICAgSXRlcmF0b3IgaXQgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9yZW1vdmluZyB0aGUgcGxheWVyIEVKQnMKICAgICAgICAgICAgIHRvQ2xlYW4gPSBwbGF5ZXJIb21lLmZpbmRBbGwoKTsKQEAgLTU2MCwzMyArNTYwLDMzIEBACiAgICAgICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgKChMb2NhbFBsYXllcilpdC5uZXh0KCkpLnJlbW92ZSgpOwogICAgICAgICAgICAgfQotICAgIAorCiAgICAgICAgICAgICAvLyByZW1vdmluZyB0aGUgdGVhbSBFSkJzCiAgICAgICAgICAgICB0b0NsZWFuID0gdGVhbUhvbWUuZmluZEFsbCgpOwogICAgICAgICAgICAgaXQgPSB0b0NsZWFuLml0ZXJhdG9yKCk7CiAgICAgICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgKChMb2NhbFRlYW0paXQubmV4dCgpKS5yZW1vdmUoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gcmVtb3ZpbmcgdGhlIGxlYWd1ZSBFSkJzCiAgICAgICAgICAgICB0b0NsZWFuID0gbGVhZ3VlSG9tZS5maW5kQWxsKCk7CiAgICAgICAgICAgICBpdCA9IHRvQ2xlYW4uaXRlcmF0b3IoKTsKICAgICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICAoKExvY2FsTGVhZ3VlKWl0Lm5leHQoKSkucmVtb3ZlKCk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgRGVidWcucHJpbnQoIkNsZWFuaW5nIHVwIHRoZSBkYXRhYmFzZSAuLi4gZG9uZSEiKTsJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCisgICAgICAgICAgICB9CisgICAgICAgIERlYnVnLnByaW50KCJDbGVhbmluZyB1cCB0aGUgZGF0YWJhc2UgLi4uIGRvbmUhIik7CiAgICAgICAgIH0gIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAgIAorCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gbmFtZQogICAgICAqIEByZXR1cm4KICAgICAgKi8KICAgICBwdWJsaWMgTGVhZ3VlRGV0YWlscyBnZXRMZWFndWVCeU5hbWUoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgICAgIAorCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldExlYWd1ZUJ5TmFtZSAoU2luZ2xlT2JqZWN0RmluZGVyKSIpOwogICAgICAgICBMZWFndWVEZXRhaWxzIGxlYWd1ZURldGFpbHMgPSBudWxsOwogICAgICAgICB0cnkgewpAQCAtNTk4LDEyICs1OTgsMTIgQEAKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBsZWFndWVEZXRhaWxzOwotICAgIH0gICAgICAgIAorICAgIH0KICAgICAvLyBnZXRMZWFndWVCeU5hbWUoKQogCi0gICAgCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBwbGF5ZXJLZXkKICAgICAgKiBAcGFyYW0gbGVhZ3VlS2V5CiAgICAgICogQHJldHVybgpAQCAtNjEyLDEzICs2MTIsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxlYWd1ZUtleSkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFRlYW1zQnlQbGF5ZXJBbmRMZWFndWUiKTsKLSAgICAgICAgQXJyYXlMaXN0IGRldGFpbHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwkJCQkJCQkJCSAgIAorICAgICAgICBBcnJheUxpc3QgZGV0YWlsc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CiAgICAgICAgIENvbGxlY3Rpb24gdGVhbXNDb2xsID0gbnVsbDsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgTG9jYWxQbGF5ZXIgcGxheWVyID0gcGxheWVySG9tZS5maW5kQnlQcmltYXJ5S2V5KHBsYXllcktleSk7Ci0gICAgICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWUgPSBsZWFndWVIb21lLmZpbmRCeVByaW1hcnlLZXkobGVhZ3VlS2V5KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgdGVhbXNDb2xsID0gdGVhbUhvbWUuZmluZEJ5UGxheWVyQW5kTGVhZ3VlKHBsYXllciwgbGVhZ3VlKTsJCQkKKyAgICAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9IGxlYWd1ZUhvbWUuZmluZEJ5UHJpbWFyeUtleShsZWFndWVLZXkpOworICAgICAgICAgICAgdGVhbXNDb2xsID0gdGVhbUhvbWUuZmluZEJ5UGxheWVyQW5kTGVhZ3VlKHBsYXllciwgbGVhZ3VlKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CkBAIC02MzIsMTEgKzYzMiwxMSBAQAogICAgICAgICAgICAgZGV0YWlsc0xpc3QuYWRkKGRldGFpbHMpOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIGRldGFpbHNMaXN0OwkKLSAgICB9CQorICAgICAgICByZXR1cm4gZGV0YWlsc0xpc3Q7CisgICAgfQogCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gcGxheWVyS2V5CiAgICAgICogQHBhcmFtIGxlYWd1ZUtleQogICAgICAqIEByZXR1cm4KQEAgLTY0NSwxNyArNjQ1LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBsZWFndWVLZXkpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRUZWFtc0J5UGxheWVyQW5kTGVhZ3VlVmlhUmVtb3RlIik7Ci0gICAgICAgIEFycmF5TGlzdCBkZXRhaWxzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsJCQkJCQkJCQkgICAKKyAgICAgICAgQXJyYXlMaXN0IGRldGFpbHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwogICAgICAgICBDb2xsZWN0aW9uIHRlYW1zQ29sbCA9IG51bGw7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIERlYnVnLnByaW50KCIgLS0tLS0gZmluZGluZyAuLi4uIik7CiAgICAgICAgICAgICBQbGF5ZXIgcGxheWVyID0gcmVtUGxheWVySG9tZS5maW5kQnlQcmltYXJ5S2V5KHBsYXllcktleSk7CiAgICAgICAgICAgICBEZWJ1Zy5wcmludCgiIC0tLS0tIFBsYXllciBmb3VuZCIpOwotICAgICAgICAgICAgTGVhZ3VlIGxlYWd1ZSA9IHJlbUxlYWd1ZUhvbWUuZmluZEJ5UHJpbWFyeUtleShsZWFndWVLZXkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBMZWFndWUgbGVhZ3VlID0gcmVtTGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUtleSk7CiAgICAgICAgICAgICBEZWJ1Zy5wcmludCgiIC0tLS0tIExlYWd1ZSBmb3VuZCIpOwogICAgICAgICAgICAgdGVhbXNDb2xsID0gcmVtVGVhbUhvbWUuZmluZEJ5UGxheWVyQW5kTGVhZ3VlVmlhUmVtb3RlKHBsYXllciwgbGVhZ3VlKTsKLSAgICAgICAgICAgIERlYnVnLnByaW50KCIgLS0tLS0gVGVhbSBmb3VuZCIpOwkJCQorICAgICAgICAgICAgRGVidWcucHJpbnQoIiAtLS0tLSBUZWFtIGZvdW5kIik7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwpAQCAtNjc0LDQ1ICs2NzQsNDUgQEAKICAgICAgICAgfQogCiAKLSAgICAgICAgcmV0dXJuIGRldGFpbHNMaXN0OwkKLSAgICB9CQotICAgIAorICAgICAgICByZXR1cm4gZGV0YWlsc0xpc3Q7CisgICAgfQorCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gY2l0eQogICAgICAqIEByZXR1cm4KICAgICAgKi8KICAgICBwdWJsaWMgU2V0IGdldENpdGllc09mTGVhZ3VlKFN0cmluZyBsZWFndWVLZXkpIHsKLSAgICAgICAgCisKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0Q2l0aWVzT2ZMZWFndWUobGVhZ3VlS2V5KSIpOwotICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWU7IAorICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWU7CiAgICAgICAgIFNldCBjaXRpZXM7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBsZWFndWUgPSBsZWFndWVIb21lLmZpbmRCeVByaW1hcnlLZXkobGVhZ3VlS2V5KTsKLSAgICAgICAgICAgIGNpdGllcyA9IGxlYWd1ZS5nZXRDaXRpZXNPZlRoaXNMZWFndWUoKTsJCisgICAgICAgICAgICBjaXRpZXMgPSBsZWFndWUuZ2V0Q2l0aWVzT2ZUaGlzTGVhZ3VlKCk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwkJCQorICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBjaXRpZXM7CiAgICAgfS8vIGdldENpdGllc09mTGVhZ3VlKCkKIAogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRSZW1vdGVUZWFtc09mTGVhZ3VlKFN0cmluZyBsZWFndWVLZXkpIHsKLSAgICAgICAgCisKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UmVtb3RlVGVhbXNPZkxlYWd1ZShsZWFndWVLZXkpIik7Ci0gICAgICAgIEFycmF5TGlzdCBkZXRhaWxzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsJCQkJCQkJCQkgICAKLSAgICAgICAgTGVhZ3VlIGxlYWd1ZTsgCisgICAgICAgIEFycmF5TGlzdCBkZXRhaWxzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKKyAgICAgICAgTGVhZ3VlIGxlYWd1ZTsKICAgICAgICAgU2V0IHRlYW1zOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgbGVhZ3VlID0gcmVtTGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUtleSk7Ci0gICAgICAgICAgICB0ZWFtcyA9IGxlYWd1ZS5nZXRSZW1vdGVUZWFtc09mVGhpc0xlYWd1ZSgpOwkKKyAgICAgICAgICAgIHRlYW1zID0gbGVhZ3VlLmdldFJlbW90ZVRlYW1zT2ZUaGlzTGVhZ3VlKCk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwkJCQorICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAKICAgICAgICAgdHJ5IHsKQEAgLTcyNywxMiArNzI3LDEyIEBACiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gZGV0YWlsc0xpc3Q7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gbGVhZ3VlS2V5CiAgICAgICogQHBhcmFtIGNpdHkKICAgICAgKiBAcmV0dXJuCkBAIC03NDEsNyArNzQxLDcgQEAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0VGVhbU9mTGVhZ3VlQnlDaXR5KGxlYWd1ZUtleSwgY2l0eSkiKTsKICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlOwogICAgICAgICBMb2NhbFRlYW0gdGVhbTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGxlYWd1ZSA9IGxlYWd1ZUhvbWUuZmluZEJ5UHJpbWFyeUtleShsZWFndWVLZXkpOwogICAgICAgICAgICAgdGVhbSA9IGxlYWd1ZS5nZXRUZWFtQnlDaXR5KGNpdHkpOwpAQCAtNzQ5LDEzICs3NDksMTMgQEAKICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBuZXcgVGVhbURldGFpbHModGVhbS5nZXRUZWFtSWQoKSwgdGVhbS5nZXROYW1lKCksIHRlYW0uZ2V0Q2l0eSgpKTsKICAgICB9Ly8gZ2V0VGVhbU9mTGVhZ3VlQnlDaXR5KCkKIAotICAgIAorCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gbGVhZ3VlS2V5CiAgICAgICogQHBhcmFtIGNpdHkKICAgICAgKiBAcmV0dXJuCkBAIC03NjQsNyArNzY0LDcgQEAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0VGVhbXNOYW1lT2ZMZWFndWVCeUNpdHkobGVhZ3VlS2V5LCBjaXR5KSIpOwogICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWU7CiAgICAgICAgIFN0cmluZyB0ZWFtTmFtZTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGxlYWd1ZSA9IGxlYWd1ZUhvbWUuZmluZEJ5UHJpbWFyeUtleShsZWFndWVLZXkpOwogICAgICAgICAgICAgdGVhbU5hbWUgPSBsZWFndWUuZ2V0VGVhbXNOYW1lQnlDaXR5KGNpdHkpOwpAQCAtNzcyLDE0ICs3NzIsMTQgQEAKICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiB0ZWFtTmFtZTsKIAogICAgIH0vLyBnZXRUZWFtc05hbWVPZkxlYWd1ZUJ5Q2l0eSgpCi0gICAgCi0gICAgCisKKwogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIHRlYW1JRAogICAgICAqIEBwYXJhbSBwbGF5ZXJOYW1lCiAgICAgICogQHJldHVybgpAQCAtNzg4LDIxICs3ODgsMjEgQEAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0U2FsYXJ5T2ZQbGF5ZXJGcm9tVGVhbSh0ZWFtS2V5LCBwbGF5ZXJLZXkpIik7CiAgICAgICAgIExvY2FsVGVhbSB0ZWFtOwogICAgICAgICBkb3VibGUgc2FsYXJ5OwotICAgICAgICAKKwogICAgICAgICB0cnkgewotICAgICAgICAgICAgdGVhbSA9IHRlYW1Ib21lLmZpbmRCeVByaW1hcnlLZXkodGVhbUlEKTsJCQotICAgICAgICAgICAgc2FsYXJ5ID0gdGVhbS5nZXRTYWxhcnlPZlBsYXllcihwbGF5ZXJOYW1lKTsJCQkKKyAgICAgICAgICAgIHRlYW0gPSB0ZWFtSG9tZS5maW5kQnlQcmltYXJ5S2V5KHRlYW1JRCk7CisgICAgICAgICAgICBzYWxhcnkgPSB0ZWFtLmdldFNhbGFyeU9mUGxheWVyKHBsYXllck5hbWUpOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHNhbGFyeTsgICAgICAgCisKKyAgICAgICAgcmV0dXJuIHNhbGFyeTsKICAgICB9Ly8gZ2V0U2FsYXJ5T2ZQbGF5ZXJGcm9tVGVhbSgpCi0gICAgCi0gICAgCisKKwogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIGxlYWd1ZUlkCiAgICAgICogQHJldHVybgogICAgICAqLwpAQCAtODEwLDcgKzgxMCw3IEBACiAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc09mTGVhZ3VlKGxlYWd1ZUlkKSIpOwogICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZTsKICAgICAgICBTZXQgcGxheWVyczsKLSAgICAgICAKKwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGxlYWd1ZSA9IGxlYWd1ZUhvbWUuZmluZEJ5UHJpbWFyeUtleShsZWFndWVJZCk7CiAgICAgICAgICAgIHBsYXllcnMgPSBsZWFndWUuZ2V0UGxheWVyc0Zyb21MZWFndWUoKTsKQEAgLTgxOCwxMiArODE4LDEyIEBACiAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgfQotICAgICAgIAotICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsgICAgIAorCisgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0vLyBnZXRQbGF5ZXJzT2ZMZWFndWUoKQotICAgIAorCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gbGVhZ3VlSWQKICAgICAgKiBAcmV0dXJuCiAgICAgICovCkBAIC04NDAsNjggKzg0MCw2OCBAQAogICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgIH0KLSAgICAgICAKLSAgICAgICByZXR1cm4gcmVzdWx0OyAgICAgCisKKyAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0vLyBnZXRQbGF5ZXJzT2ZMZWFndWUoKQotICAgIAorCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuCiAgICAgICovCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aFBvc2l0aW9uc0dvYWxrZWVwZXJPckRlZmVuZGVyKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzV2l0aFBvc2l0aW9uc0dvYWxrZWVwZXJPckRlZmVuZGVyKCkiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHBsYXllcnMgPSBwbGF5ZXJIb21lLmZpbmRCeVBvc2l0aW9uc0dvYWxrZWVwZXJPckRlZmVuZGVyKCk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9Ly8gZ2V0UGxheWVyc1dpdGhQb3NpdGlvbnNHb2Fsa2VlcGVyT3JEZWZlbmRlcigpCi0gICAgCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4KICAgICAgKi8KICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNXaXRoTmFtZUVuZGluZ1dpdGhPTigpIHsKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc1dpdGhOYW1lRW5kaW5nV2l0aE9OKCkiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHBsYXllcnMgPSBwbGF5ZXJIb21lLmZpbmRCeU5hbWVFbmRpbmdXaXRoT04oKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0vLyBnZXRQbGF5ZXJzV2l0aE5hbWVFbmRpbmdXaXRoT04oKQogCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuCiAgICAgICovCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aE51bGxOYW1lKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzV2l0aE51bGxOYW1lKCkiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHBsYXllcnMgPSBwbGF5ZXJIb21lLmZpbmRCeU51bGxOYW1lKCk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9Ly8gZ2V0UGxheWVyc1dpdGhOdWxsTmFtZSgpCiAKIAogCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gdGVhbUlkCiAgICAgICogQHJldHVybgogICAgICAqLwpAQCAtOTA5LDcgKzkwOSw3IEBACiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNXaXRoVGVhbSh0ZWFtSWQpIik7CiAgICAgICAgIExvY2FsVGVhbSB0ZWFtOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgdGVhbSA9IHRlYW1Ib21lLmZpbmRCeVByaW1hcnlLZXkodGVhbUlkKTsKICAgICAgICAgICAgIHBsYXllcnMgPSBwbGF5ZXJIb21lLmZpbmRCeVRlYW0odGVhbSk7CkBAIC05MTcsMTMgKzkxNywxMyBAQAogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0vLyBnZXRQbGF5ZXJzV2l0aFRlYW0oKQotICAgIAotICAgIAorCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSB0ZWFtSWQKICAgICAgKiBAcmV0dXJuCiAgICAgICovCkBAIC05MzEsNyArOTMxLDcgQEAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0VGVhbU5hbWVWYXJpYXRpb25zKHRlYW1JZCkiKTsKICAgICAgICAgTG9jYWxUZWFtIHRlYW07CiAgICAgICAgIFN0cmluZ0J1ZmZlciBvdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB0ZWFtID0gdGVhbUhvbWUuZmluZEJ5UHJpbWFyeUtleSh0ZWFtSWQpOwogICAgICAgICAgICAgRGVidWcucHJpbnQoIi0tLSBDT05DQVQiKTsKQEAgLTkzOSw1OSArOTM5LDU5IEBACiAgICAgICAgICAgICBEZWJ1Zy5wcmludCgiLS0tIFNVQlNUUklORyIpOwogICAgICAgICAgICAgb3V0LmFwcGVuZCh0ZWFtLmdldFRlYW1OYW1lV2l0aFN0cmluZ2Z1bmN0aW9uVGVzdHMyKCkpOwogICAgICAgICAgICAgRGVidWcucHJpbnQoIi0tLSBMT0NBVEUgQU5EIExFTkdUSCIpOwotICAgICAgICAgICAgb3V0LmFwcGVuZCh0ZWFtLmdldFRlYW1OYW1lV2l0aFN0cmluZ2Z1bmN0aW9uVGVzdHMzKCkpOwkJCQorICAgICAgICAgICAgb3V0LmFwcGVuZCh0ZWFtLmdldFRlYW1OYW1lV2l0aFN0cmluZ2Z1bmN0aW9uVGVzdHMzKCkpOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsJCQkKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gb3V0LnRvU3RyaW5nKCk7CiAgICAgfS8vIGdldFRlYW1OYW1lVmFyaWF0aW9ucygpCi0gICAgCi0gICAgCisKKwogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIHNhbGFyeQogICAgICAqIEByZXR1cm4KICAgICAgKi8KICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNXaXRoU2FsYXJ5VXNpbmdBQlMoZG91YmxlIHNhbGFyeSkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nQUJTKHNhbGFyeSkiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHBsYXllcnMgPSBwbGF5ZXJIb21lLmZpbmRCeVNhbGFyYXlXaXRoQXJpdGhtZXRpY0Z1bmN0aW9uQUJTKHNhbGFyeSk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9Ly8gZ2V0UGxheWVyc1dpdGhTYWxhcnlVc2luZ0FCUygpCiAKIAogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIHNhbGFyeQogICAgICAqIEByZXR1cm4KICAgICAgKi8KICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNXaXRoU2FsYXJ5VXNpbmdTUVJUKGRvdWJsZSBzYWxhcnkpIHsKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc1dpdGhTYWxhcnlVc2luZ1NRUlQoc2FsYXJ5KSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcGxheWVycyA9IHBsYXllckhvbWUuZmluZEJ5U2FsYXJheVdpdGhBcml0aG1ldGljRnVuY3Rpb25TUVJUKHNhbGFyeSk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9Ly8gZ2V0UGxheWVyc1dpdGhTYWxhcnlVc2luZ1NRUlQoKQotICAgIAotICAgIAotICAgIAorCisKKwogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIGxlYWd1ZUtleQogICAgICAqIEBwYXJhbSBjaXR5CiAgICAgICogQHJldHVybgpAQCAtMTAwMSwyMCArMTAwMSwyMCBAQAogICAgICAgICBMZWFndWUgbGVhZ3VlOwogICAgICAgICBUZWFtIHRlYW07CiAgICAgICAgIFRlYW1EZXRhaWxzIHRlYW1EZXRhaWxzOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgbGVhZ3VlID0gcmVtTGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUtleSk7CiAgICAgICAgICAgICB0ZWFtID0gbGVhZ3VlLmdldFJlbW90ZVRlYW1CeUNpdHkoY2l0eSk7Ci0gICAgICAgICAgICB0ZWFtRGV0YWlscyA9IG5ldyBUZWFtRGV0YWlscyh0ZWFtLmdldFRlYW1JZCgpLCB0ZWFtLmdldE5hbWUoKSwgdGVhbS5nZXRDaXR5KCkpOyAKKyAgICAgICAgICAgIHRlYW1EZXRhaWxzID0gbmV3IFRlYW1EZXRhaWxzKHRlYW0uZ2V0VGVhbUlkKCksIHRlYW0uZ2V0TmFtZSgpLCB0ZWFtLmdldENpdHkoKSk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiB0ZWFtRGV0YWlsczsKICAgICB9Ly8gZ2V0UmVtb3RlVGVhbU9mTGVhZ3VlQnlDaXR5KCkKLSAgICAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUxlYWd1ZUlkV2l0aE5VTEwoU3RyaW5nIGxlYWd1ZUlkKSB7IAorCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlMZWFndWVJZFdpdGhOVUxMKFN0cmluZyBsZWFndWVJZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNCeUxlYWd1ZUlkIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CkBAIC0xMDI5LDUgKzEwMjksNSBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlMZWFndWVJZAogCi0gICAgCi19IC8vIFJvc3RlckJlYW4gCisKK30gLy8gUm9zdGVyQmVhbgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2VqYi9yb3N0ZXIvUm9zdGVySG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2VqYi9yb3N0ZXIvUm9zdGVySG9tZS5qYXZhCmluZGV4IGNlY2Q0NjIuLmI4NzRhZDQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9lamIvcm9zdGVyL1Jvc3RlckhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZWpiL3Jvc3Rlci9Sb3N0ZXJIb21lLmphdmEKQEAgLTIyLDYgKzIyLDYgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJIb21lOwogCiBwdWJsaWMgaW50ZXJmYWNlIFJvc3RlckhvbWUgZXh0ZW5kcyBFSkJIb21lIHsKLSAKKwogICAgIFJvc3RlciBjcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBDcmVhdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZWpiL3RlYW0vTGVhZ3VlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZWpiL3RlYW0vTGVhZ3VlLmphdmEKaW5kZXggYjBiOGUxYi4uOTZlMzcwMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2VqYi90ZWFtL0xlYWd1ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9lamIvdGVhbS9MZWFndWUuamF2YQpAQCAtMjksMTUgKzI5LDE1IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRTcG9ydCgpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgICAgcHVibGljIENvbGxlY3Rpb24gZ2V0VGVhbXMoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIFRlYW0gZ2V0UmVtb3RlVGVhbUJ5Q2l0eShTdHJpbmcgY2l0eSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgCisgICAgcHVibGljIFRlYW0gZ2V0UmVtb3RlVGVhbUJ5Q2l0eShTdHJpbmcgY2l0eSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3RlRXhjZXB0aW9uOwotICAgIAotICAgIHB1YmxpYyBTZXQgZ2V0UmVtb3RlVGVhbXNPZlRoaXNMZWFndWUoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCAKKworICAgIHB1YmxpYyBTZXQgZ2V0UmVtb3RlVGVhbXNPZlRoaXNMZWFndWUoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGdldFJlbW90ZVBsYXllcnNGcm9tTGVhZ3VlKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgCisgICAgcHVibGljIENvbGxlY3Rpb24gZ2V0UmVtb3RlUGxheWVyc0Zyb21MZWFndWUoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAvLyAgICBwdWJsaWMgdm9pZCBhZGRUZWFtKFRlYW0gdGVhbSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIC8vICAgIHB1YmxpYyB2b2lkIGRyb3BUZWFtKFRlYW0gdGVhbSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2VqYi90ZWFtL0xlYWd1ZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9lamIvdGVhbS9MZWFndWVCZWFuLmphdmEKaW5kZXggMzhkMzgwNi4uZmNlOTJkZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2VqYi90ZWFtL0xlYWd1ZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZWpiL3RlYW0vTGVhZ3VlQmVhbi5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldExlYWd1ZUlkKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0TGVhZ3VlSWQoU3RyaW5nIGlkKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0TmFtZSgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOwogCkBAIC01MCw3ICs1MCw3IEBACiAgICAgcHVibGljIGFic3RyYWN0IFNldCBlamJTZWxlY3RSZW1vdGVUZWFtcyhMZWFndWUgbGVhZ3VlKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IExvY2FsVGVhbSBlamJTZWxlY3RUZWFtQnlDaXR5KFN0cmluZyBjaXR5KQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCkBAIC02MCw2MyArNjAsNjMgQEAKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGVqYlNlbGVjdFRlYW1zTmFtZUJ5Q2l0eShTdHJpbmcgY2l0eSkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgICAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBTZXQgZWpiU2VsZWN0UGxheWVyc0J5TGVhZ3VlKExvY2FsTGVhZ3VlIGxlYWd1ZSkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBhYnN0cmFjdCBDb2xsZWN0aW9uIGVqYlNlbGVjdFJlbW90ZVBsYXllcnNCeUxlYWd1ZShMZWFndWUgbGVhZ3VlKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwotICAgICAgICAKKwogICAgIC8vIEJ1c2luZXNzIG1ldGhvZHMKIAogICAgIHB1YmxpYyBTZXQgZ2V0Q2l0aWVzT2ZUaGlzTGVhZ3VlKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7Ci0gICAgICAgICAKLSAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9IAorCisgICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWUgPQogICAgICAgICAgICAgICh0ZWFtLkxvY2FsTGVhZ3VlKWNvbnRleHQuZ2V0RUpCTG9jYWxPYmplY3QoKTsKLSAgICAgICAgIAotICAgICAgICAgcmV0dXJuIGVqYlNlbGVjdFRlYW1zQ2l0eShsZWFndWUpOyAKKworICAgICAgICAgcmV0dXJuIGVqYlNlbGVjdFRlYW1zQ2l0eShsZWFndWUpOwogICAgIH0KIAogCiAgICAgcHVibGljIFNldCBnZXRSZW1vdGVUZWFtc09mVGhpc0xlYWd1ZSgpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewotICAgICAgICAgCisKICAgICAgICAgIExlYWd1ZSBsZWFndWUgPSAgKHRlYW0uTGVhZ3VlKWNvbnRleHQuZ2V0RUpCT2JqZWN0KCk7Ci0gICAgICAgICAKLSAgICAgICAgIHJldHVybiBlamJTZWxlY3RSZW1vdGVUZWFtcyhsZWFndWUpOyAKKworICAgICAgICAgcmV0dXJuIGVqYlNlbGVjdFJlbW90ZVRlYW1zKGxlYWd1ZSk7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgTG9jYWxUZWFtIGdldFRlYW1CeUNpdHkoU3RyaW5nIGNpdHkpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICByZXR1cm4gZWpiU2VsZWN0VGVhbUJ5Q2l0eShjaXR5KTsKICAgICB9CiAKICAgICBwdWJsaWMgVGVhbSBnZXRSZW1vdGVUZWFtQnlDaXR5KFN0cmluZyBjaXR5KSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGVqYlNlbGVjdFJlbW90ZVRlYW1CeUNpdHkoY2l0eSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRUZWFtc05hbWVCeUNpdHkoU3RyaW5nIGNpdHkpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICByZXR1cm4gZWpiU2VsZWN0VGVhbXNOYW1lQnlDaXR5KGNpdHkpOwogICAgIH0KIAotICAgIAorCiAgICAgcHVibGljIFNldCBnZXRQbGF5ZXJzRnJvbUxlYWd1ZSgpIHRocm93cyBGaW5kZXJFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9ICh0ZWFtLkxvY2FsTGVhZ3VlKWNvbnRleHQuZ2V0RUpCTG9jYWxPYmplY3QoKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGVqYlNlbGVjdFBsYXllcnNCeUxlYWd1ZShsZWFndWUpOwotICAgIH0gCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENvbGxlY3Rpb24gZ2V0UmVtb3RlUGxheWVyc0Zyb21MZWFndWUoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICBMZWFndWUgbGVhZ3VlID0gKHRlYW0uTGVhZ3VlKWNvbnRleHQuZ2V0RUpCT2JqZWN0KCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBlamJTZWxlY3RSZW1vdGVQbGF5ZXJzQnlMZWFndWUobGVhZ3VlKTsKLSAgICB9IAotICAgICAgICAKLSAgICAKKyAgICB9CisKKwogICAgIHB1YmxpYyB2b2lkIGFkZFRlYW0oTG9jYWxUZWFtIHRlYW0pIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiVGVhbUJlYW4gYWRkVGVhbSIpOwpAQCAtMTUwLDMyICsxNTAsMzIgQEAKICAgICAgICAgc2V0U3BvcnQoc3BvcnQpOwogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBzcG9ydCkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7IH0KIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBjdHgpIHsKICAgICAgICAgY29udGV4dCA9IGN0eDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKSB7CiAgICAgICAgIGNvbnRleHQgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKICAgICAgICAgRGVidWcucHJpbnQoIkxlYWd1ZUJlYW4gZWpiUmVtb3ZlIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKICAgICAgICAgRGVidWcucHJpbnQoIkxlYWd1ZUJlYW4gZWpiTG9hZCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiTGVhZ3VlQmVhbiBlamJTdG9yZSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7IH0KIAogfSAvLyBMZWFndWVCZWFuIGNsYXNzCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZWpiL3RlYW0vTGVhZ3VlSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2VqYi90ZWFtL0xlYWd1ZUhvbWUuamF2YQppbmRleCAyMmE3MzRhLi44YmMwNzgyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZWpiL3RlYW0vTGVhZ3VlSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9lamIvdGVhbS9MZWFndWVIb21lLmphdmEKQEAgLTI1LDE0ICsyNSwxNCBAQAogCiAgICAgcHVibGljIExlYWd1ZSBjcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBzcG9ydCkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIExlYWd1ZSBmaW5kQnlQcmltYXJ5S2V5IChTdHJpbmcgaWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIExlYWd1ZSBmaW5kQnlOYW1lKFN0cmluZyBuYW1lKQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CQkJCQkKLSAgICAgICAgCisgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2VqYi90ZWFtL0xvY2FsTGVhZ3VlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZWpiL3RlYW0vTG9jYWxMZWFndWUuamF2YQppbmRleCBmMmViMDQ2Li5hMTQ0NjE3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZWpiL3RlYW0vTG9jYWxMZWFndWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZWpiL3RlYW0vTG9jYWxMZWFndWUuamF2YQpAQCAtMzMsNSArMzMsNSBAQAogICAgIHB1YmxpYyBMb2NhbFRlYW0gZ2V0VGVhbUJ5Q2l0eShTdHJpbmcgY2l0eSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1zTmFtZUJ5Q2l0eShTdHJpbmcgY2l0eSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKICAgICBwdWJsaWMgU2V0IGdldFBsYXllcnNGcm9tTGVhZ3VlKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2VqYi90ZWFtL0xvY2FsTGVhZ3VlSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2VqYi90ZWFtL0xvY2FsTGVhZ3VlSG9tZS5qYXZhCmluZGV4IGVjMTc2ZGEuLmMxOWFmNzcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9lamIvdGVhbS9Mb2NhbExlYWd1ZUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZWpiL3RlYW0vTG9jYWxMZWFndWVIb21lLmphdmEKQEAgLTIwLDE3ICsyMCwxNyBAQAogaW1wb3J0IGpha2FydGEuZWpiLio7CiAKIHB1YmxpYyBpbnRlcmZhY2UgTG9jYWxMZWFndWVIb21lIGV4dGVuZHMgRUpCTG9jYWxIb21lIHsKLSAgICAKKwogICAgIHB1YmxpYyBMb2NhbExlYWd1ZSBjcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBzcG9ydCkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBMb2NhbExlYWd1ZSBmaW5kQnlQcmltYXJ5S2V5IChTdHJpbmcgaWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEFsbCgpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKICAgICBwdWJsaWMgTG9jYWxMZWFndWUgZmluZEJ5TmFtZShTdHJpbmcgbmFtZSkKLSAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsJCQkJCQotICAgICAgICAKKyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2VqYi90ZWFtL0xvY2FsUGxheWVySG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2VqYi90ZWFtL0xvY2FsUGxheWVySG9tZS5qYXZhCmluZGV4IDkwNDU4ZTMuLjU3NzcwNzIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9lamIvdGVhbS9Mb2NhbFBsYXllckhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZWpiL3RlYW0vTG9jYWxQbGF5ZXJIb21lLmphdmEKQEAgLTIwLDYwICsyMCw2MCBAQAogaW1wb3J0IGpha2FydGEuZWpiLio7CiAKIHB1YmxpYyBpbnRlcmZhY2UgTG9jYWxQbGF5ZXJIb21lIGV4dGVuZHMgRUpCTG9jYWxIb21lIHsKLSAgICAKKwogICAgIHB1YmxpYyBMb2NhbFBsYXllciBjcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBwb3NpdGlvbiwKICAgICAgICAgZG91YmxlIHNhbGFyeSkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBMb2NhbFBsYXllciBmaW5kQnlQcmltYXJ5S2V5IChTdHJpbmcgaWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247Ci0gICAgCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UG9zaXRpb24oU3RyaW5nIHBvc2l0aW9uKSAKKworICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBvc2l0aW9uKFN0cmluZyBwb3NpdGlvbikKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5SGlnaGVyU2FsYXJ5KFN0cmluZyBuYW1lKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U2FsYXJ5UmFuZ2UoZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVNhbGFyeVJhbmdlKGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5TGVhZ3VlKExvY2FsTGVhZ3VlIGxlYWd1ZSkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5TGVhZ3VlKExvY2FsTGVhZ3VlIGxlYWd1ZSkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVNwb3J0KFN0cmluZyBzcG9ydCkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U3BvcnQoU3RyaW5nIHNwb3J0KQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5Q2l0eShTdHJpbmcgY2l0eSkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5Q2l0eShTdHJpbmcgY2l0eSkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmROb3RPblRlYW0oKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kTm90T25UZWFtKCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBvc2l0aW9uQW5kTmFtZShTdHJpbmcgcG9zaXRpb24sIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBvc2l0aW9uQW5kTmFtZShTdHJpbmcgcG9zaXRpb24sCiAgICAgICAgIFN0cmluZyBuYW1lKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5VGVzdCAoU3RyaW5nIHBhcm0xLCBTdHJpbmcgcGFybTIsIFN0cmluZyBwYXJtMykKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBvc2l0aW9uc0dvYWxrZWVwZXJPckRlZmVuZGVyKCkKLSAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsgICAJCi0gICAgICAgIAorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOworCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5TmFtZUVuZGluZ1dpdGhPTigpCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247ICAgCQorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5TnVsbE5hbWUoKQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOyAgIAkKKyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVRlYW0oTG9jYWxUZWFtIHRlYW0pCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247ICAgCSAgICAgICAgCi0gICAgICAgIAorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOworCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U2FsYXJheVdpdGhBcml0aG1ldGljRnVuY3Rpb25BQlMoZG91YmxlIHNhbGFyYXkpCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247ICAgICAgIAorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U2FsYXJheVdpdGhBcml0aG1ldGljRnVuY3Rpb25TUVJUKGRvdWJsZSBzYWxhcmF5KQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOyAgICAgICAKLSAgICAgICAgCisgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9lamIvdGVhbS9Mb2NhbFRlYW0uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9lamIvdGVhbS9Mb2NhbFRlYW0uamF2YQppbmRleCA5MTRhNGNiLi5mODdmNWVlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZWpiL3RlYW0vTG9jYWxUZWFtLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2VqYi90ZWFtL0xvY2FsVGVhbS5qYXZhCkBAIC0zMSw4ICszMSw4IEBACiAgICAgcHVibGljIHZvaWQgYWRkUGxheWVyKExvY2FsUGxheWVyIHBsYXllcik7CiAgICAgcHVibGljIHZvaWQgZHJvcFBsYXllcihMb2NhbFBsYXllciBwbGF5ZXIpOwogICAgIHB1YmxpYyBkb3VibGUgZ2V0U2FsYXJ5T2ZQbGF5ZXIoU3RyaW5nIHBsYXllck5hbWUpOwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czEoKTsgCi0gICAgcHVibGljIFN0cmluZyBnZXRUZWFtTmFtZVdpdGhTdHJpbmdmdW5jdGlvblRlc3RzMigpOyAKLSAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1OYW1lV2l0aFN0cmluZ2Z1bmN0aW9uVGVzdHMzKCk7IAotICAgIAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czEoKTsKKyAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1OYW1lV2l0aFN0cmluZ2Z1bmN0aW9uVGVzdHMyKCk7CisgICAgcHVibGljIFN0cmluZyBnZXRUZWFtTmFtZVdpdGhTdHJpbmdmdW5jdGlvblRlc3RzMygpOworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZWpiL3RlYW0vTG9jYWxUZWFtSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2VqYi90ZWFtL0xvY2FsVGVhbUhvbWUuamF2YQppbmRleCA4ODQ2NTdlLi5jOWUyYTFlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZWpiL3RlYW0vTG9jYWxUZWFtSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9lamIvdGVhbS9Mb2NhbFRlYW1Ib21lLmphdmEKQEAgLTIyLDE3ICsyMiwxNyBAQAogaW1wb3J0IGpha2FydGEuZWpiLkZpbmRlckV4Y2VwdGlvbjsKIAogcHVibGljIGludGVyZmFjZSBMb2NhbFRlYW1Ib21lIGV4dGVuZHMgRUpCTG9jYWxIb21lIHsKLSAgICAKKwogICAgIHB1YmxpYyBMb2NhbFRlYW0gY3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgY2l0eSkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBMb2NhbFRlYW0gZmluZEJ5UHJpbWFyeUtleSAoU3RyaW5nIGlkKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEFsbCgpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwotICAgIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBsYXllckFuZExlYWd1ZShMb2NhbFBsYXllciBwbGF5ZXIsIAorCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UGxheWVyQW5kTGVhZ3VlKExvY2FsUGxheWVyIHBsYXllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2VqYi90ZWFtL1BsYXllckJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9lamIvdGVhbS9QbGF5ZXJCZWFuLmphdmEKaW5kZXggNDRiMGE4ZS4uN2NkMjg5MCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2VqYi90ZWFtL1BsYXllckJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZWpiL3RlYW0vUGxheWVyQmVhbi5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFBsYXllcklkKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0UGxheWVySWQoU3RyaW5nIGlkKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0TmFtZSgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOwogCkBAIC01MiwyMCArNTIsMjAgQEAKICAgICBwdWJsaWMgYWJzdHJhY3QgQ29sbGVjdGlvbiBlamJTZWxlY3RTcG9ydHMoTG9jYWxQbGF5ZXIgcGxheWVyKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgICAgICAgICAgICAgCi0gICAgICAgIAorCisKICAgICAvLyBCdXNpbmVzcyBtZXRob2RzCiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRMZWFndWVzKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7CiAKLSAgICAgICAgIExvY2FsUGxheWVyIHBsYXllciA9IAorICAgICAgICAgTG9jYWxQbGF5ZXIgcGxheWVyID0KICAgICAgICAgICAgICAodGVhbS5Mb2NhbFBsYXllciljb250ZXh0LmdldEVKQkxvY2FsT2JqZWN0KCk7CiAgICAgICAgICByZXR1cm4gZWpiU2VsZWN0TGVhZ3VlcyhwbGF5ZXIpOwogICAgIH0KIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGdldFNwb3J0cygpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewogCi0gICAgICAgICBMb2NhbFBsYXllciBwbGF5ZXIgPSAKKyAgICAgICAgIExvY2FsUGxheWVyIHBsYXllciA9CiAgICAgICAgICAgICAgKHRlYW0uTG9jYWxQbGF5ZXIpY29udGV4dC5nZXRFSkJMb2NhbE9iamVjdCgpOwogICAgICAgICAgcmV0dXJuIGVqYlNlbGVjdFNwb3J0cyhwbGF5ZXIpOwogICAgIH0KQEAgLTgyLDMyICs4MiwzMiBAQAogICAgICAgICBzZXRTYWxhcnkoc2FsYXJ5KTsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgcG9zaXRpb24sCiAgICAgICAgIGRvdWJsZSBzYWxhcnkpIHRocm93cyBDcmVhdGVFeGNlcHRpb24geyB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgY3R4KSB7CiAgICAgICAgIGNvbnRleHQgPSBjdHg7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgewogICAgICAgICBjb250ZXh0ID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJQbGF5ZXJCZWFuIGVqYlJlbW92ZSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJQbGF5ZXJCZWFuIGVqYkxvYWQiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsKICAgICAgICAgRGVidWcucHJpbnQoIlBsYXllckJlYW4gZWpiU3RvcmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7IH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgeyB9CiAKIH0gLy8gUGxheWVyQmVhbiBjbGFzcwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2VqYi90ZWFtL1BsYXllckhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9lamIvdGVhbS9QbGF5ZXJIb21lLmphdmEKaW5kZXggZGVkOTcyNC4uODQ1OTg1MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2VqYi90ZWFtL1BsYXllckhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZWpiL3RlYW0vUGxheWVySG9tZS5qYXZhCkBAIC0yNiwzNSArMjYsMzUgQEAKICAgICBwdWJsaWMgUGxheWVyIGNyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHBvc2l0aW9uLAogICAgICAgICBkb3VibGUgc2FsYXJ5KQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgUGxheWVyIGZpbmRCeVByaW1hcnlLZXkgKFN0cmluZyBpZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwotICAgIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBvc2l0aW9uKFN0cmluZyBwb3NpdGlvbikgCisKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQb3NpdGlvbihTdHJpbmcgcG9zaXRpb24pCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5SGlnaGVyU2FsYXJ5KFN0cmluZyBuYW1lKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlTYWxhcnlSYW5nZShkb3VibGUgbG93LCBkb3VibGUgaGlnaCkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U2FsYXJ5UmFuZ2UoZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAotLy8gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5TGVhZ3VlKExlYWd1ZSBsZWFndWUpIAorLy8gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5TGVhZ3VlKExlYWd1ZSBsZWFndWUpCiAvLyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U3BvcnQoU3RyaW5nIHNwb3J0KSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlTcG9ydChTdHJpbmcgc3BvcnQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUNpdHkoU3RyaW5nIGNpdHkpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUNpdHkoU3RyaW5nIGNpdHkpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZE5vdE9uVGVhbSgpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmROb3RPblRlYW0oKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQb3NpdGlvbkFuZE5hbWUoU3RyaW5nIHBvc2l0aW9uLCAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQb3NpdGlvbkFuZE5hbWUoU3RyaW5nIHBvc2l0aW9uLAogICAgICAgICBTdHJpbmcgbmFtZSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5VGVzdCAoU3RyaW5nIHBhcm0xLCBTdHJpbmcgcGFybTIsIFN0cmluZyBwYXJtMykKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9lamIvdGVhbS9UZWFtQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2VqYi90ZWFtL1RlYW1CZWFuLmphdmEKaW5kZXggNzRmYTRkNy4uYjg1MmVjMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2VqYi90ZWFtL1RlYW1CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2VqYi90ZWFtL1RlYW1CZWFuLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIAogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0VGVhbUlkKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0VGVhbUlkKFN0cmluZyBpZCk7Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldE5hbWUoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKIApAQCAtMzksNyArMzksNyBAQAogCiAKICAgICAvLyBBY2Nlc3MgbWV0aG9kcyBmb3IgcmVsYXRpb25zaGlwIGZpZWxkcwotICAgICAgICAgICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IENvbGxlY3Rpb24gZ2V0UGxheWVycygpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFBsYXllcnMoQ29sbGVjdGlvbiBwbGF5ZXJzKTsKIApAQCAtNTIsNTUgKzUyLDU1IEBACiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGVqYlNlbGVjdEJ5TmFtZVdpdGhDT05DQVQoU3RyaW5nIHBhcnQxLCBTdHJpbmcgcGFydDIpCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOworCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBlamJTZWxlY3RCeU5hbWVTdWJzdHJpbmcoU3RyaW5nIHN1YnN0cmluZykKLSAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsJCisgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGVqYlNlbGVjdE5hbWVMb2NhdGUoU3RyaW5nIHN1YnN0cmluZykKLSAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsJCisgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIC8vIEJ1c2luZXNzIG1ldGhvZHMKIAogICAgIHB1YmxpYyBkb3VibGUgZ2V0U2FsYXJ5T2ZQbGF5ZXIoU3RyaW5nIHBsYXllck5hbWUpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewogICAgICAgICBMb2NhbFRlYW0gdGVhbSA9ICh0ZWFtLkxvY2FsVGVhbSljb250ZXh0LmdldEVKQkxvY2FsT2JqZWN0KCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBlamJTZWxlY3RTYWxhcnlPZlBsYXllckluVGVhbSh0ZWFtLCBwbGF5ZXJOYW1lKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czEoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgU3RyaW5nQnVmZmVyIG91dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKIC8vICAgICAgICBMb2NhbFRlYW0gdGVhbSA9ICh0ZWFtLkxvY2FsVGVhbSkgY29udGV4dC5nZXRFSkJMb2NhbE9iamVjdCgpOwogLy8gICAgICAgIG91dC5hcHBlbmQoIjxCUj5OYW1lIG9mIFRlYW0gOiAiICsgdGVhbS5nZXROYW1lKCkpOwotICAgICAgICBvdXQuYXBwZW5kKCI8QlI+Iik7CQkKKyAgICAgICAgb3V0LmFwcGVuZCgiPEJSPiIpOwogICAgICAgICBvdXQuYXBwZW5kKGVqYlNlbGVjdEJ5TmFtZVdpdGhDT05DQVQoIkNyIiwgIm93cyIpKTsKICAgICAgICAgb3V0LmFwcGVuZCgiPEJSPiIpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gb3V0LnRvU3RyaW5nKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRUZWFtTmFtZVdpdGhTdHJpbmdmdW5jdGlvblRlc3RzMigpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBTdHJpbmdCdWZmZXIgb3V0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICAgICBvdXQuYXBwZW5kKGVqYlNlbGVjdEJ5TmFtZVN1YnN0cmluZygiYWFhYUNyb3dzYWFhYWEiKSk7CiAgICAgICAgIG91dC5hcHBlbmQoIjxCUj4iKTsKIAogICAgICAgICByZXR1cm4gb3V0LnRvU3RyaW5nKCk7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czMoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgU3RyaW5nQnVmZmVyIG91dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgICAgb3V0LmFwcGVuZChlamJTZWxlY3ROYW1lTG9jYXRlKCJyb3ciKSk7CiAgICAgICAgIG91dC5hcHBlbmQoIjxCUj4iKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG91dC50b1N0cmluZygpOwogICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRDb3B5T2ZQbGF5ZXJzKCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJUZWFtQmVhbiBnZXRDb3B5T2ZQbGF5ZXJzIik7CkBAIC0xNTEsMzAgKzE1MSwzMCBAQAogICAgICAgICBzZXRDaXR5KGNpdHkpOwogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBjaXR5KQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsgfQogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGN0eCkgewogICAgICAgICBjb250ZXh0ID0gY3R4OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsKICAgICAgICAgY29udGV4dCA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiVGVhbUJlYW4gZWpiUmVtb3ZlIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKICAgICAgICAgRGVidWcucHJpbnQoIlRlYW1CZWFuIGVqYkxvYWQiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsKICAgICAgICAgRGVidWcucHJpbnQoIlRlYW1CZWFuIGVqYlN0b3JlIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgeyB9CiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7IH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2VqYi90ZWFtL1RlYW1Ib21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZWpiL3RlYW0vVGVhbUhvbWUuamF2YQppbmRleCBmZTEzMDQ0Li5iY2ZlNDM5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZWpiL3RlYW0vVGVhbUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZWpiL3RlYW0vVGVhbUhvbWUuamF2YQpAQCAtMjUsMTQgKzI1LDE0IEBACiAKICAgICBwdWJsaWMgVGVhbSBjcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBjaXR5KQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgVGVhbSBmaW5kQnlQcmltYXJ5S2V5IChTdHJpbmcgaWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwotICAgIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBsYXllckFuZExlYWd1ZVZpYVJlbW90ZShQbGF5ZXIgcGxheWVyLCAKKworICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBsYXllckFuZExlYWd1ZVZpYVJlbW90ZShQbGF5ZXIgcGxheWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMZWFndWUgbGVhZ3VlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9lamIvdXRpbC9QbGF5ZXJEZXRhaWxzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvZWpiL3V0aWwvUGxheWVyRGV0YWlscy5qYXZhCmluZGV4IDgxMDQxYzIuLjQ3NjViY2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9lamIvdXRpbC9QbGF5ZXJEZXRhaWxzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL2VqYi91dGlsL1BsYXllckRldGFpbHMuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIHBvc2l0aW9uOwogICAgIHByaXZhdGUgZG91YmxlIHNhbGFyeTsKIAotICAgIHB1YmxpYyBQbGF5ZXJEZXRhaWxzIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgcG9zaXRpb24sIAorICAgIHB1YmxpYyBQbGF5ZXJEZXRhaWxzIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgcG9zaXRpb24sCiAgICAgICAgIGRvdWJsZSBzYWxhcnkpIHsKIAogICAgICAgICB0aGlzLmlkID0gaWQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvc2VydmxldC9Sb3N0ZXJTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvc2VydmxldC9Sb3N0ZXJTZXJ2bGV0LmphdmEKaW5kZXggODFhZGUwNC4uNmEzYzk5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL3NlcnZsZXQvUm9zdGVyU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9zZXJ2bGV0L1Jvc3RlclNlcnZsZXQuamF2YQpAQCAtODQsNyArODQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSb3N0ZXJIb21lLmNsYXNzKTsKIAogICAgICAgICAgICBSb3N0ZXIgbXlSb3N0ZXIgPSBob21lLmNyZWF0ZSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgLy8gZGVsZXRpbmcgYWxsIGV4aXNpdGluZyBEQi1lbnRyaWVzCiAgICAgICAgICAgIG15Um9zdGVyLmNsZWFuVXAoKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL3NxbC9Sb3N0ZXJBcHBfZGIyLnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9zcWwvUm9zdGVyQXBwX2RiMi5zcWwKaW5kZXggYmUwYzkxOC4uNjA3NTZiMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL3NxbC9Sb3N0ZXJBcHBfZGIyLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvc3FsL1Jvc3RlckFwcF9kYjIuc3FsCkBAIC0zLDM3ICszLDM3IEBACiBEUk9QIFRBQkxFIFRlYW0gOwogRFJPUCBUQUJMRSBMZWFndWUgOwogCi1DUkVBVEUgVEFCTEUgUGxheWVyIAorQ1JFQVRFIFRBQkxFIFBsYXllcgogKAotCXBsYXllcl9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAotCW5hbWUgVkFSQ0hBUigyNTUpLCAKLQlwb3NpdGlvbiBWQVJDSEFSKDI1NSksIAotCXNhbGFyeSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMCisgICAgcGxheWVyX0lkIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKKyAgICBuYW1lIFZBUkNIQVIoMjU1KSwKKyAgICBwb3NpdGlvbiBWQVJDSEFSKDI1NSksCisgICAgc2FsYXJ5IERPVUJMRSBQUkVDSVNJT04gTk9UIE5VTEwKICk7CiAKLUNSRUFURSBUQUJMRSBMZWFndWUgCitDUkVBVEUgVEFCTEUgTGVhZ3VlCiAoCi0JbGVhZ3VlX0lkIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCi0JbmFtZSBWQVJDSEFSKDI1NSksIAotCXNwb3J0IFZBUkNIQVIoMjU1KQorICAgIGxlYWd1ZV9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgbmFtZSBWQVJDSEFSKDI1NSksCisgICAgc3BvcnQgVkFSQ0hBUigyNTUpCiApOwogCi1DUkVBVEUgVEFCTEUgVGVhbSAKK0NSRUFURSBUQUJMRSBUZWFtCiAoCi0JdGVhbV9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAotCWNpdHkgVkFSQ0hBUigyNTUpLCAKLQluYW1lIFZBUkNIQVIoMjU1KSwKLQlsZWFndWVfSWQgVkFSQ0hBUigyNTUpLAotCUZPUkVJR04gS0VZIChsZWFndWVfSWQpICAgUkVGRVJFTkNFUyBMZWFndWUgKGxlYWd1ZV9JZCkKKyAgICB0ZWFtX0lkIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKKyAgICBjaXR5IFZBUkNIQVIoMjU1KSwKKyAgICBuYW1lIFZBUkNIQVIoMjU1KSwKKyAgICBsZWFndWVfSWQgVkFSQ0hBUigyNTUpLAorICAgIEZPUkVJR04gS0VZIChsZWFndWVfSWQpICAgUkVGRVJFTkNFUyBMZWFndWUgKGxlYWd1ZV9JZCkKICk7CiAKLUNSRUFURSBUQUJMRSBUZWFtUGxheWVyIAorQ1JFQVRFIFRBQkxFIFRlYW1QbGF5ZXIKICgKLQlwbGF5ZXJfSWQgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLCAKLSAgICAgICAgdGVhbV9JZCBWQVJDSEFSKDI1NSkgTk9UIE5VTEwsIAorICAgIHBsYXllcl9JZCBWQVJDSEFSKDI1NSkgTk9UIE5VTEwsCisgICAgICAgIHRlYW1fSWQgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAogICAgICAgICBDT05TVFJBSU5UIHBrX1RlYW1QbGF5ZXIgUFJJTUFSWSBLRVkgKHBsYXllcl9JZCwgdGVhbV9JZCksCi0JRk9SRUlHTiBLRVkgKHRlYW1fSWQpICAgUkVGRVJFTkNFUyBUZWFtICh0ZWFtX0lkKSwKLQlGT1JFSUdOIEtFWSAocGxheWVyX0lkKSAgIFJFRkVSRU5DRVMgUGxheWVyIChwbGF5ZXJfSWQpCisgICAgRk9SRUlHTiBLRVkgKHRlYW1fSWQpICAgUkVGRVJFTkNFUyBUZWFtICh0ZWFtX0lkKSwKKyAgICBGT1JFSUdOIEtFWSAocGxheWVyX0lkKSAgIFJFRkVSRU5DRVMgUGxheWVyIChwbGF5ZXJfSWQpCiApOwogCiBjb21taXQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvc3FsL1Jvc3RlckFwcF9kZXJieS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvc3FsL1Jvc3RlckFwcF9kZXJieS5zcWwKaW5kZXggNWVjZTYwZS4uYzlkY2MzZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL3NxbC9Sb3N0ZXJBcHBfZGVyYnkuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9zcWwvUm9zdGVyQXBwX2RlcmJ5LnNxbApAQCAtMywzNSArMywzNSBAQAogRFJPUCBUQUJMRSBURUFNIDsKIERST1AgVEFCTEUgTEVBR1VFIDsKIAotQ1JFQVRFIFRBQkxFIFBMQVlFUiAKK0NSRUFURSBUQUJMRSBQTEFZRVIKICgKLQlwbGF5ZXJfSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLQluYW1lIFZBUkNIQVIoMjU1KSwgCi0JcG9zaXRpb24gVkFSQ0hBUigyNTUpLCAKLQlzYWxhcnkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTAorICAgIHBsYXllcl9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgbmFtZSBWQVJDSEFSKDI1NSksCisgICAgcG9zaXRpb24gVkFSQ0hBUigyNTUpLAorICAgIHNhbGFyeSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMCiApOwogCi1DUkVBVEUgVEFCTEUgTEVBR1VFIAorQ1JFQVRFIFRBQkxFIExFQUdVRQogKAotCWxlYWd1ZV9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAotCW5hbWUgVkFSQ0hBUigyNTUpLCAKLQlzcG9ydCBWQVJDSEFSKDI1NSkKKyAgICBsZWFndWVfSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgIG5hbWUgVkFSQ0hBUigyNTUpLAorICAgIHNwb3J0IFZBUkNIQVIoMjU1KQogKTsKIAotQ1JFQVRFIFRBQkxFIFRFQU0gCitDUkVBVEUgVEFCTEUgVEVBTQogKAotCXRlYW1fSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLQljaXR5IFZBUkNIQVIoMjU1KSwgCi0JbmFtZSBWQVJDSEFSKDI1NSksCi0JbGVhZ3VlX0lkIFZBUkNIQVIoMjU1KSwKLQlGT1JFSUdOIEtFWSAobGVhZ3VlX0lkKSAgIFJFRkVSRU5DRVMgTGVhZ3VlIChsZWFndWVfSWQpCisgICAgdGVhbV9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgY2l0eSBWQVJDSEFSKDI1NSksCisgICAgbmFtZSBWQVJDSEFSKDI1NSksCisgICAgbGVhZ3VlX0lkIFZBUkNIQVIoMjU1KSwKKyAgICBGT1JFSUdOIEtFWSAobGVhZ3VlX0lkKSAgIFJFRkVSRU5DRVMgTGVhZ3VlIChsZWFndWVfSWQpCiApOwogCi1DUkVBVEUgVEFCTEUgVEVBTVBMQVlFUiAKK0NSRUFURSBUQUJMRSBURUFNUExBWUVSCiAoCi0JcGxheWVyX0lkIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCwgCi0gICAgICAgIHRlYW1fSWQgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLCAKKyAgICBwbGF5ZXJfSWQgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAorICAgICAgICB0ZWFtX0lkIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCwKICAgICAgICAgQ09OU1RSQUlOVCBwa19UZWFtUGxheWVyIFBSSU1BUlkgS0VZIChwbGF5ZXJfSWQsIHRlYW1fSWQpLAotCUZPUkVJR04gS0VZICh0ZWFtX0lkKSAgIFJFRkVSRU5DRVMgVGVhbSAodGVhbV9JZCksCi0JRk9SRUlHTiBLRVkgKHBsYXllcl9JZCkgICBSRUZFUkVOQ0VTIFBsYXllciAocGxheWVyX0lkKQorICAgIEZPUkVJR04gS0VZICh0ZWFtX0lkKSAgIFJFRkVSRU5DRVMgVGVhbSAodGVhbV9JZCksCisgICAgRk9SRUlHTiBLRVkgKHBsYXllcl9JZCkgICBSRUZFUkVOQ0VTIFBsYXllciAocGxheWVyX0lkKQogKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9zcWwvUm9zdGVyQXBwX2lmeC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvc3FsL1Jvc3RlckFwcF9pZnguc3FsCmluZGV4IGJiNGQ4NmMuLjk0Zjg4ZDIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9zcWwvUm9zdGVyQXBwX2lmeC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL3NxbC9Sb3N0ZXJBcHBfaWZ4LnNxbApAQCAtMywzNyArMywzNyBAQAogRFJPUCBUQUJMRSBUZWFtIDsKIERST1AgVEFCTEUgTGVhZ3VlIDsKIAotQ1JFQVRFIFRBQkxFIFBsYXllciAKK0NSRUFURSBUQUJMRSBQbGF5ZXIKICgKLQlwbGF5ZXJfSWQgVkFSQ0hBUigxMjcpIFBSSU1BUlkgS0VZLCAKLQluYW1lIFZBUkNIQVIoMTI3KSwgCi0JcG9zaXRpb24gVkFSQ0hBUigxMjcpLCAKLQlzYWxhcnkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTCAKKyAgICBwbGF5ZXJfSWQgVkFSQ0hBUigxMjcpIFBSSU1BUlkgS0VZLAorICAgIG5hbWUgVkFSQ0hBUigxMjcpLAorICAgIHBvc2l0aW9uIFZBUkNIQVIoMTI3KSwKKyAgICBzYWxhcnkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTAogKTsKIAotQ1JFQVRFIFRBQkxFIExlYWd1ZSAKK0NSRUFURSBUQUJMRSBMZWFndWUKICgKLQlsZWFndWVfSWQgVkFSQ0hBUigxMjcpIFBSSU1BUlkgS0VZLCAKLQluYW1lIFZBUkNIQVIoMTI3KSwgCi0Jc3BvcnQgVkFSQ0hBUigxMjcpCisgICAgbGVhZ3VlX0lkIFZBUkNIQVIoMTI3KSBQUklNQVJZIEtFWSwKKyAgICBuYW1lIFZBUkNIQVIoMTI3KSwKKyAgICBzcG9ydCBWQVJDSEFSKDEyNykKICk7CiAKLUNSRUFURSBUQUJMRSBUZWFtIAorQ1JFQVRFIFRBQkxFIFRlYW0KICgKLQl0ZWFtX0lkIFZBUkNIQVIoMTI3KSBQUklNQVJZIEtFWSwgCi0JY2l0eSBWQVJDSEFSKDEyNyksIAotCW5hbWUgVkFSQ0hBUigxMjcpLAotCWxlYWd1ZV9JZCBWQVJDSEFSKDEyNyksCi0JRk9SRUlHTiBLRVkgKGxlYWd1ZV9JZCkgICBSRUZFUkVOQ0VTIExlYWd1ZSAobGVhZ3VlX0lkKQorICAgIHRlYW1fSWQgVkFSQ0hBUigxMjcpIFBSSU1BUlkgS0VZLAorICAgIGNpdHkgVkFSQ0hBUigxMjcpLAorICAgIG5hbWUgVkFSQ0hBUigxMjcpLAorICAgIGxlYWd1ZV9JZCBWQVJDSEFSKDEyNyksCisgICAgRk9SRUlHTiBLRVkgKGxlYWd1ZV9JZCkgICBSRUZFUkVOQ0VTIExlYWd1ZSAobGVhZ3VlX0lkKQogKTsKIAotQ1JFQVRFIFRBQkxFIFRlYW1QbGF5ZXIgCitDUkVBVEUgVEFCTEUgVGVhbVBsYXllcgogKAotCXBsYXllcl9JZCBWQVJDSEFSKDEyNyksIAotICAgICAgICB0ZWFtX0lkIFZBUkNIQVIoMTI3KSwgCisgICAgcGxheWVyX0lkIFZBUkNIQVIoMTI3KSwKKyAgICAgICAgdGVhbV9JZCBWQVJDSEFSKDEyNyksCiAgICAgICAgIFBSSU1BUlkgS0VZIChwbGF5ZXJfSWQsIHRlYW1fSWQpLAotCUZPUkVJR04gS0VZICh0ZWFtX0lkKSAgIFJFRkVSRU5DRVMgVGVhbSAodGVhbV9JZCksCi0JRk9SRUlHTiBLRVkgKHBsYXllcl9JZCkgICBSRUZFUkVOQ0VTIFBsYXllciAocGxheWVyX0lkKQorICAgIEZPUkVJR04gS0VZICh0ZWFtX0lkKSAgIFJFRkVSRU5DRVMgVGVhbSAodGVhbV9JZCksCisgICAgRk9SRUlHTiBLRVkgKHBsYXllcl9JZCkgICBSRUZFUkVOQ0VTIFBsYXllciAocGxheWVyX0lkKQogKTsKIAogY29tbWl0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL3NxbC9Sb3N0ZXJBcHBfbXNzcWwuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL3NxbC9Sb3N0ZXJBcHBfbXNzcWwuc3FsCmluZGV4IDc4NzQ4OGYuLmJhZDlkNWEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9zcWwvUm9zdGVyQXBwX21zc3FsLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvc3FsL1Jvc3RlckFwcF9tc3NxbC5zcWwKQEAgLTEsNDAgKzEsNDAgQEAKIGRyb3AgdGFibGUgVEVBTVBMQVlFUgotZHJvcCB0YWJsZSBQTEFZRVIgCitkcm9wIHRhYmxlIFBMQVlFUgogZHJvcCB0YWJsZSBURUFNCiBkcm9wIFRBQkxFIExFQUdVRQogZ28KIAotY3JlYXRlIHRhYmxlIFBMQVlFUiAKK2NyZWF0ZSB0YWJsZSBQTEFZRVIKICgKLQlQTEFZRVJfSUQgVkFSQ0hBUigyNTUpIHByaW1hcnkga2V5IG5vdCBudWxsLCAKLQlOQU1FIFZBUkNIQVIoMjU1KSwKLQlQT1NJVElPTiBWQVJDSEFSKDI1NSksIAotCVNBTEFSWSBkb3VibGUgcHJlY2lzaW9uIG5vdCBudWxsCisgICAgUExBWUVSX0lEIFZBUkNIQVIoMjU1KSBwcmltYXJ5IGtleSBub3QgbnVsbCwKKyAgICBOQU1FIFZBUkNIQVIoMjU1KSwKKyAgICBQT1NJVElPTiBWQVJDSEFSKDI1NSksCisgICAgU0FMQVJZIGRvdWJsZSBwcmVjaXNpb24gbm90IG51bGwKICkKIAotY3JlYXRlIHRhYmxlIExFQUdVRSAKK2NyZWF0ZSB0YWJsZSBMRUFHVUUKICgKLQlMRUFHVUVfSUQgVkFSQ0hBUigyNTUpIHByaW1hcnkga2V5IG5vdCBudWxsLCAKLQlOQU1FIFZBUkNIQVIoMjU1KSwKLQlTUE9SVCBWQVJDSEFSKDI1NSkKKyAgICBMRUFHVUVfSUQgVkFSQ0hBUigyNTUpIHByaW1hcnkga2V5IG5vdCBudWxsLAorICAgIE5BTUUgVkFSQ0hBUigyNTUpLAorICAgIFNQT1JUIFZBUkNIQVIoMjU1KQogKQogCi1jcmVhdGUgdGFibGUgVEVBTSAKK2NyZWF0ZSB0YWJsZSBURUFNCiAoCi0JVEVBTV9JRCBWQVJDSEFSKDI1NSkgcHJpbWFyeSBrZXkgbm90IG51bGwsIAotCUNJVFkgVkFSQ0hBUigyNTUpLAotCU5BTUUgVkFSQ0hBUigyNTUpLAotCUxFQUdVRV9JRCBWQVJDSEFSKDI1NSksCi0JZm9yZWlnbiBrZXkgKExFQUdVRV9JRCkgcmVmZXJlbmNlcyBMRUFHVUUgKExFQUdVRV9JRCkKKyAgICBURUFNX0lEIFZBUkNIQVIoMjU1KSBwcmltYXJ5IGtleSBub3QgbnVsbCwKKyAgICBDSVRZIFZBUkNIQVIoMjU1KSwKKyAgICBOQU1FIFZBUkNIQVIoMjU1KSwKKyAgICBMRUFHVUVfSUQgVkFSQ0hBUigyNTUpLAorICAgIGZvcmVpZ24ga2V5IChMRUFHVUVfSUQpIHJlZmVyZW5jZXMgTEVBR1VFIChMRUFHVUVfSUQpCiApCiAKLWNyZWF0ZSB0YWJsZSBURUFNUExBWUVSIAorY3JlYXRlIHRhYmxlIFRFQU1QTEFZRVIKICgKLQlQTEFZRVJfSUQgVkFSQ0hBUigyNTUpIG5vdCBudWxsLAorICAgIFBMQVlFUl9JRCBWQVJDSEFSKDI1NSkgbm90IG51bGwsCiAgICAgVEVBTV9JRCBWQVJDSEFSKDI1NSkgbm90IG51bGwsCiAgICAgY29uc3RyYWludCBQS19URUFNUExBWUVSIHByaW1hcnkga2V5IChQTEFZRVJfSUQsIFRFQU1fSUQpLAotCWZvcmVpZ24ga2V5IChURUFNX0lEKSByZWZlcmVuY2VzIFRFQU0gKFRFQU1fSUQpLAotCWZvcmVpZ24ga2V5IChQTEFZRVJfSUQpIHJlZmVyZW5jZXMgUExBWUVSIChQTEFZRVJfSUQpCisgICAgZm9yZWlnbiBrZXkgKFRFQU1fSUQpIHJlZmVyZW5jZXMgVEVBTSAoVEVBTV9JRCksCisgICAgZm9yZWlnbiBrZXkgKFBMQVlFUl9JRCkgcmVmZXJlbmNlcyBQTEFZRVIgKFBMQVlFUl9JRCkKICkKIAogZ28KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9zcWwvUm9zdGVyQXBwX215c3FsLnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9zcWwvUm9zdGVyQXBwX215c3FsLnNxbAppbmRleCBkNzYzNzU3Li40M2Y0MmNlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvc3FsL1Jvc3RlckFwcF9teXNxbC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL3NxbC9Sb3N0ZXJBcHBfbXlzcWwuc3FsCkBAIC0zLDMzICszLDMzIEBACiBEUk9QIFRBQkxFIFRFQU0gOwogRFJPUCBUQUJMRSBMRUFHVUUgOwogCi1DUkVBVEUgVEFCTEUgUExBWUVSIAorQ1JFQVRFIFRBQkxFIFBMQVlFUgogKAotCVBMQVlFUl9JRCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksIAotCU5BTUUgICAgICBWQVJDSEFSKDI1NSksIAotCVBPU0lUSU9OICBWQVJDSEFSKDI1NSksIAotCVNBTEFSWSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMCisgICAgUExBWUVSX0lEIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwKKyAgICBOQU1FICAgICAgVkFSQ0hBUigyNTUpLAorICAgIFBPU0lUSU9OICBWQVJDSEFSKDI1NSksCisgICAgU0FMQVJZIERPVUJMRSBQUkVDSVNJT04gTk9UIE5VTEwKICkgRU5HSU5FPUlOTk9EQjsKIAotQ1JFQVRFIFRBQkxFIExFQUdVRSAKK0NSRUFURSBUQUJMRSBMRUFHVUUKICgKLQlMRUFHVUVfSUQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLCAKLQlOQU1FICAgICAgVkFSQ0hBUigyNTUpLCAKLQlTUE9SVCAgICAgVkFSQ0hBUigyNTUpCisgICAgTEVBR1VFX0lEIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwKKyAgICBOQU1FICAgICAgVkFSQ0hBUigyNTUpLAorICAgIFNQT1JUICAgICBWQVJDSEFSKDI1NSkKICkgRU5HSU5FPUlOTk9EQjsKIAotQ1JFQVRFIFRBQkxFIFRFQU0gCitDUkVBVEUgVEFCTEUgVEVBTQogKAotCVRFQU1fSUQgICBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksIAotCUNJVFkgICAgICBWQVJDSEFSKDI1NSksIAotCU5BTUUgICAgICBWQVJDSEFSKDI1NSksCi0JTEVBR1VFX0lEIFZBUkNIQVIoMjU1KQorICAgIFRFQU1fSUQgICBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksCisgICAgQ0lUWSAgICAgIFZBUkNIQVIoMjU1KSwKKyAgICBOQU1FICAgICAgVkFSQ0hBUigyNTUpLAorICAgIExFQUdVRV9JRCBWQVJDSEFSKDI1NSkKICkgRU5HSU5FPUlOTk9EQjsKIAotQ1JFQVRFIFRBQkxFIFRFQU1QTEFZRVIgCitDUkVBVEUgVEFCTEUgVEVBTVBMQVlFUgogKAotCVBMQVlFUl9JRCBWQVJDSEFSKDI1NSksIAotICAgICAgICBURUFNX0lEICAgVkFSQ0hBUigyNTUpLCAKKyAgICBQTEFZRVJfSUQgVkFSQ0hBUigyNTUpLAorICAgICAgICBURUFNX0lEICAgVkFSQ0hBUigyNTUpLAogICAgICAgICBDT05TVFJBSU5UIFBLX1RFQU1QTEFZRVIgUFJJTUFSWSBLRVkgKFBMQVlFUl9JRCwgVEVBTV9JRCkKICkgRU5HSU5FPUlOTk9EQjsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL3NxbC9Sb3N0ZXJBcHBfb3JhLnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9zcWwvUm9zdGVyQXBwX29yYS5zcWwKaW5kZXggNGI0YTU0Ny4uMTdmYWJiYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL3NxbC9Sb3N0ZXJBcHBfb3JhLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvc3FsL1Jvc3RlckFwcF9vcmEuc3FsCkBAIC0zLDM3ICszLDM3IEBACiBEUk9QIFRBQkxFIFRlYW0gOwogRFJPUCBUQUJMRSBMZWFndWUgOwogCi1DUkVBVEUgVEFCTEUgUGxheWVyIAorQ1JFQVRFIFRBQkxFIFBsYXllcgogKAotCXBsYXllcl9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksIAotCW5hbWUgVkFSQ0hBUigyNTUpLCAKLQlwb3NpdGlvbiBWQVJDSEFSKDI1NSksIAotCXNhbGFyeSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMCisgICAgcGxheWVyX0lkIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwKKyAgICBuYW1lIFZBUkNIQVIoMjU1KSwKKyAgICBwb3NpdGlvbiBWQVJDSEFSKDI1NSksCisgICAgc2FsYXJ5IERPVUJMRSBQUkVDSVNJT04gTk9UIE5VTEwKICk7CiAKLUNSRUFURSBUQUJMRSBMZWFndWUgCitDUkVBVEUgVEFCTEUgTGVhZ3VlCiAoCi0JbGVhZ3VlX0lkIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwgCi0JbmFtZSBWQVJDSEFSKDI1NSksIAotCXNwb3J0IFZBUkNIQVIoMjU1KQorICAgIGxlYWd1ZV9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksCisgICAgbmFtZSBWQVJDSEFSKDI1NSksCisgICAgc3BvcnQgVkFSQ0hBUigyNTUpCiApOwogCi1DUkVBVEUgVEFCTEUgVGVhbSAKK0NSRUFURSBUQUJMRSBUZWFtCiAoCi0JdGVhbV9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksIAotCWNpdHkgVkFSQ0hBUigyNTUpLCAKLQluYW1lIFZBUkNIQVIoMjU1KSwKLQlsZWFndWVfSWQgVkFSQ0hBUigyNTUpLAotCUZPUkVJR04gS0VZIChsZWFndWVfSWQpICAgUkVGRVJFTkNFUyBMZWFndWUgKGxlYWd1ZV9JZCkKKyAgICB0ZWFtX0lkIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwKKyAgICBjaXR5IFZBUkNIQVIoMjU1KSwKKyAgICBuYW1lIFZBUkNIQVIoMjU1KSwKKyAgICBsZWFndWVfSWQgVkFSQ0hBUigyNTUpLAorICAgIEZPUkVJR04gS0VZIChsZWFndWVfSWQpICAgUkVGRVJFTkNFUyBMZWFndWUgKGxlYWd1ZV9JZCkKICk7CiAKLUNSRUFURSBUQUJMRSBUZWFtUGxheWVyIAorQ1JFQVRFIFRBQkxFIFRlYW1QbGF5ZXIKICgKLQlwbGF5ZXJfSWQgVkFSQ0hBUigyNTUpLCAKLSAgICAgICAgdGVhbV9JZCBWQVJDSEFSKDI1NSksIAorICAgIHBsYXllcl9JZCBWQVJDSEFSKDI1NSksCisgICAgICAgIHRlYW1fSWQgVkFSQ0hBUigyNTUpLAogICAgICAgICBDT05TVFJBSU5UIHBrX1RlYW1QbGF5ZXIgUFJJTUFSWSBLRVkgKHBsYXllcl9JZCwgdGVhbV9JZCksCi0JRk9SRUlHTiBLRVkgKHRlYW1fSWQpICAgUkVGRVJFTkNFUyBUZWFtICh0ZWFtX0lkKSwKLQlGT1JFSUdOIEtFWSAocGxheWVyX0lkKSAgIFJFRkVSRU5DRVMgUGxheWVyIChwbGF5ZXJfSWQpCisgICAgRk9SRUlHTiBLRVkgKHRlYW1fSWQpICAgUkVGRVJFTkNFUyBUZWFtICh0ZWFtX0lkKSwKKyAgICBGT1JFSUdOIEtFWSAocGxheWVyX0lkKSAgIFJFRkVSRU5DRVMgUGxheWVyIChwbGF5ZXJfSWQpCiApOwogCiBjb21taXQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvc3FsL1Jvc3RlckFwcF9wYnMuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL3NxbC9Sb3N0ZXJBcHBfcGJzLnNxbAppbmRleCAzZjZmNWQyLi42YjE5MGNlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvc3FsL1Jvc3RlckFwcF9wYnMuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9zcWwvUm9zdGVyQXBwX3Bicy5zcWwKQEAgLTUsNDIgKzUsNDIgQEAKIAogY29tbWl0OwogCi1DUkVBVEUgVEFCTEUgUGxheWVyIAorQ1JFQVRFIFRBQkxFIFBsYXllcgogKAotCXBsYXllcl9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksIAotCW5hbWUgVkFSQ0hBUigyNTUpLCAKLQlwb3NpdGlvbiBWQVJDSEFSKDI1NSksIAotCXNhbGFyeSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMCisgICAgcGxheWVyX0lkIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwKKyAgICBuYW1lIFZBUkNIQVIoMjU1KSwKKyAgICBwb3NpdGlvbiBWQVJDSEFSKDI1NSksCisgICAgc2FsYXJ5IERPVUJMRSBQUkVDSVNJT04gTk9UIE5VTEwKICk7CiAKIGNvbW1pdDsKIAotQ1JFQVRFIFRBQkxFIExlYWd1ZSAKK0NSRUFURSBUQUJMRSBMZWFndWUKICgKLQlsZWFndWVfSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLCAKLQluYW1lIFZBUkNIQVIoMjU1KSwgCi0Jc3BvcnQgVkFSQ0hBUigyNTUpCisgICAgbGVhZ3VlX0lkIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwKKyAgICBuYW1lIFZBUkNIQVIoMjU1KSwKKyAgICBzcG9ydCBWQVJDSEFSKDI1NSkKICk7CiAKIGNvbW1pdDsKIAotQ1JFQVRFIFRBQkxFIFRlYW0gCitDUkVBVEUgVEFCTEUgVGVhbQogKAotCXRlYW1fSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLCAKLQljaXR5IFZBUkNIQVIoMjU1KSwgCi0JbmFtZSBWQVJDSEFSKDI1NSksCi0JbGVhZ3VlX0lkIFZBUkNIQVIoMjU1KSwKKyAgICB0ZWFtX0lkIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwKKyAgICBjaXR5IFZBUkNIQVIoMjU1KSwKKyAgICBuYW1lIFZBUkNIQVIoMjU1KSwKKyAgICBsZWFndWVfSWQgVkFSQ0hBUigyNTUpLAogICAgIENPTlNUUkFJTlQgRktfMSBGT1JFSUdOIEtFWSAobGVhZ3VlX0lkKSAgIFJFRkVSRU5DRVMgTGVhZ3VlIChsZWFndWVfSWQpCiApOwogCiBjb21taXQ7CiAKLUNSRUFURSBUQUJMRSBUZWFtUGxheWVyIAorQ1JFQVRFIFRBQkxFIFRlYW1QbGF5ZXIKICgKLQlwbGF5ZXJfSWQgVkFSQ0hBUigyNTUpLCAKLQl0ZWFtX0lkIFZBUkNIQVIoMjU1KSwgCi0JQ09OU1RSQUlOVCBGS18yIEZPUkVJR04gS0VZICh0ZWFtX0lkKSAgIFJFRkVSRU5DRVMgVGVhbSAodGVhbV9JZCksCi0JQ09OU1RSQUlOVCBGS18zIEZPUkVJR04gS0VZIChwbGF5ZXJfSWQpICAgUkVGRVJFTkNFUyBQbGF5ZXIgKHBsYXllcl9JZCkKKyAgICBwbGF5ZXJfSWQgVkFSQ0hBUigyNTUpLAorICAgIHRlYW1fSWQgVkFSQ0hBUigyNTUpLAorICAgIENPTlNUUkFJTlQgRktfMiBGT1JFSUdOIEtFWSAodGVhbV9JZCkgICBSRUZFUkVOQ0VTIFRlYW0gKHRlYW1fSWQpLAorICAgIENPTlNUUkFJTlQgRktfMyBGT1JFSUdOIEtFWSAocGxheWVyX0lkKSAgIFJFRkVSRU5DRVMgUGxheWVyIChwbGF5ZXJfSWQpCiApOwogCiBjb21taXQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvc3FsL1Jvc3RlckFwcF9wc3FsLnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9zcWwvUm9zdGVyQXBwX3BzcWwuc3FsCmluZGV4IGE2YmFmM2UuLjdmZGRiNGIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9zcWwvUm9zdGVyQXBwX3BzcWwuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9zcWwvUm9zdGVyQXBwX3BzcWwuc3FsCkBAIC0zLDQwICszLDQwIEBACiBEUk9QIFRBQkxFIFRFQU0gIGNhc2NhZGU7CiBEUk9QIFRBQkxFIExFQUdVRSAgY2FzY2FkZTsKIAotQ1JFQVRFIFRBQkxFIFBMQVlFUiAKK0NSRUFURSBUQUJMRSBQTEFZRVIKICgKLQlQTEFZRVJfSUQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLCAKLQlOQU1FICAgICAgVkFSQ0hBUigyNTUpLCAKLQlQT1NJVElPTiAgVkFSQ0hBUigyNTUpLCAKLQlTQUxBUlkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTAorICAgIFBMQVlFUl9JRCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksCisgICAgTkFNRSAgICAgIFZBUkNIQVIoMjU1KSwKKyAgICBQT1NJVElPTiAgVkFSQ0hBUigyNTUpLAorICAgIFNBTEFSWSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMCiApOwogIyk7CiAKLUNSRUFURSBUQUJMRSBMRUFHVUUgCitDUkVBVEUgVEFCTEUgTEVBR1VFCiAoCi0JTEVBR1VFX0lEIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwgCi0JTkFNRSAgICAgIFZBUkNIQVIoMjU1KSwgCi0JU1BPUlQgICAgIFZBUkNIQVIoMjU1KQorICAgIExFQUdVRV9JRCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksCisgICAgTkFNRSAgICAgIFZBUkNIQVIoMjU1KSwKKyAgICBTUE9SVCAgICAgVkFSQ0hBUigyNTUpCiApIDsKICMpOwogCi1DUkVBVEUgVEFCTEUgVEVBTSAKK0NSRUFURSBUQUJMRSBURUFNCiAoCi0JVEVBTV9JRCAgIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwgCi0JQ0lUWSAgICAgIFZBUkNIQVIoMjU1KSwgCi0JTkFNRSAgICAgIFZBUkNIQVIoMjU1KSwKLQlMRUFHVUVfSUQgVkFSQ0hBUigyNTUpLAotCUZPUkVJR04gS0VZIChMRUFHVUVfSUQpICAgUkVGRVJFTkNFUyBMRUFHVUUgKExFQUdVRV9JRCkKKyAgICBURUFNX0lEICAgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLAorICAgIENJVFkgICAgICBWQVJDSEFSKDI1NSksCisgICAgTkFNRSAgICAgIFZBUkNIQVIoMjU1KSwKKyAgICBMRUFHVUVfSUQgVkFSQ0hBUigyNTUpLAorICAgIEZPUkVJR04gS0VZIChMRUFHVUVfSUQpICAgUkVGRVJFTkNFUyBMRUFHVUUgKExFQUdVRV9JRCkKICk7CiAjKTsKIAotQ1JFQVRFIFRBQkxFIFRFQU1QTEFZRVIgCitDUkVBVEUgVEFCTEUgVEVBTVBMQVlFUgogKAotCVBMQVlFUl9JRCBWQVJDSEFSKDI1NSksIAotICAgICAgICBURUFNX0lEICAgVkFSQ0hBUigyNTUpLCAKKyAgICBQTEFZRVJfSUQgVkFSQ0hBUigyNTUpLAorICAgICAgICBURUFNX0lEICAgVkFSQ0hBUigyNTUpLAogICAgICAgICBDT05TVFJBSU5UIFBLX1RFQU1QTEFZRVIgUFJJTUFSWSBLRVkgKFBMQVlFUl9JRCwgVEVBTV9JRCksCi0JRk9SRUlHTiBLRVkgKFRFQU1fSUQpICAgUkVGRVJFTkNFUyBURUFNIChURUFNX0lEKSwKLQlGT1JFSUdOIEtFWSAoUExBWUVSX0lEKSAgIFJFRkVSRU5DRVMgUExBWUVSIChQTEFZRVJfSUQpCisgICAgRk9SRUlHTiBLRVkgKFRFQU1fSUQpICAgUkVGRVJFTkNFUyBURUFNIChURUFNX0lEKSwKKyAgICBGT1JFSUdOIEtFWSAoUExBWUVSX0lEKSAgIFJFRkVSRU5DRVMgUExBWUVSIChQTEFZRVJfSUQpCiApOwogIyk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9zcWwvUm9zdGVyQXBwX3N5Yi5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyR2VuREJTY2hlbWEvc3FsL1Jvc3RlckFwcF9zeWIuc3FsCmluZGV4IDBjNzNlZjMuLjQwMDQwYzUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJHZW5EQlNjaGVtYS9zcWwvUm9zdGVyQXBwX3N5Yi5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckdlbkRCU2NoZW1hL3NxbC9Sb3N0ZXJBcHBfc3liLnNxbApAQCAtMSw0MCArMSw0MCBAQAogZHJvcCB0YWJsZSBURUFNUExBWUVSCi1kcm9wIHRhYmxlIFBMQVlFUiAKK2Ryb3AgdGFibGUgUExBWUVSCiBkcm9wIHRhYmxlIFRFQU0KIGRyb3AgVEFCTEUgTEVBR1VFCiBnbwogCi1jcmVhdGUgdGFibGUgUExBWUVSIAorY3JlYXRlIHRhYmxlIFBMQVlFUgogKAotCVBMQVlFUl9JRCBWQVJDSEFSKDI1NSkgcHJpbWFyeSBrZXkgbm90IG51bGwsIAotCU5BTUUgVkFSQ0hBUigyNTUpLAotCVBPU0lUSU9OIFZBUkNIQVIoMjU1KSwgCi0JU0FMQVJZIGRvdWJsZSBwcmVjaXNpb24gbm90IG51bGwKKyAgICBQTEFZRVJfSUQgVkFSQ0hBUigyNTUpIHByaW1hcnkga2V5IG5vdCBudWxsLAorICAgIE5BTUUgVkFSQ0hBUigyNTUpLAorICAgIFBPU0lUSU9OIFZBUkNIQVIoMjU1KSwKKyAgICBTQUxBUlkgZG91YmxlIHByZWNpc2lvbiBub3QgbnVsbAogKQogCi1jcmVhdGUgdGFibGUgTEVBR1VFIAorY3JlYXRlIHRhYmxlIExFQUdVRQogKAotCUxFQUdVRV9JRCBWQVJDSEFSKDI1NSkgcHJpbWFyeSBrZXkgbm90IG51bGwsIAotCU5BTUUgVkFSQ0hBUigyNTUpLAotCVNQT1JUIFZBUkNIQVIoMjU1KQorICAgIExFQUdVRV9JRCBWQVJDSEFSKDI1NSkgcHJpbWFyeSBrZXkgbm90IG51bGwsCisgICAgTkFNRSBWQVJDSEFSKDI1NSksCisgICAgU1BPUlQgVkFSQ0hBUigyNTUpCiApCiAKLWNyZWF0ZSB0YWJsZSBURUFNIAorY3JlYXRlIHRhYmxlIFRFQU0KICgKLQlURUFNX0lEIFZBUkNIQVIoMjU1KSBwcmltYXJ5IGtleSBub3QgbnVsbCwgCi0JQ0lUWSBWQVJDSEFSKDI1NSksCi0JTkFNRSBWQVJDSEFSKDI1NSksCi0JTEVBR1VFX0lEIFZBUkNIQVIoMjU1KSwKLQlmb3JlaWduIGtleSAoTEVBR1VFX0lEKSByZWZlcmVuY2VzIExFQUdVRSAoTEVBR1VFX0lEKQorICAgIFRFQU1fSUQgVkFSQ0hBUigyNTUpIHByaW1hcnkga2V5IG5vdCBudWxsLAorICAgIENJVFkgVkFSQ0hBUigyNTUpLAorICAgIE5BTUUgVkFSQ0hBUigyNTUpLAorICAgIExFQUdVRV9JRCBWQVJDSEFSKDI1NSksCisgICAgZm9yZWlnbiBrZXkgKExFQUdVRV9JRCkgcmVmZXJlbmNlcyBMRUFHVUUgKExFQUdVRV9JRCkKICkKIAotY3JlYXRlIHRhYmxlIFRFQU1QTEFZRVIgCitjcmVhdGUgdGFibGUgVEVBTVBMQVlFUgogKAotCVBMQVlFUl9JRCBWQVJDSEFSKDI1NSkgbm90IG51bGwsCisgICAgUExBWUVSX0lEIFZBUkNIQVIoMjU1KSBub3QgbnVsbCwKICAgICAgICAgVEVBTV9JRCBWQVJDSEFSKDI1NSkgbm90IG51bGwsCiAgICAgICAgIGNvbnN0cmFpbnQgUEtfVEVBTVBMQVlFUiBwcmltYXJ5IGtleSAoUExBWUVSX0lELCBURUFNX0lEKSwKLQlmb3JlaWduIGtleSAoVEVBTV9JRCkgcmVmZXJlbmNlcyBURUFNIChURUFNX0lEKSwKLQlmb3JlaWduIGtleSAoUExBWUVSX0lEKSByZWZlcmVuY2VzIFBMQVlFUiAoUExBWUVSX0lEKQorICAgIGZvcmVpZ24ga2V5IChURUFNX0lEKSByZWZlcmVuY2VzIFRFQU0gKFRFQU1fSUQpLAorICAgIGZvcmVpZ24ga2V5IChQTEFZRVJfSUQpIHJlZmVyZW5jZXMgUExBWUVSIChQTEFZRVJfSUQpCiApCiAKIGdvCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckphdmEyREIvYnVpbGQucHJvcGVydGllcwppbmRleCA3ZjdmMjNjLi5mOTVjNGY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEzICsxNSwxMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0icm9zdGVySmF2YTJEQiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIAotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iUm9zdGVyQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IlJvc3RlckNsaWVudCIvPgogCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CkBAIC0zNCwxMCArMzQsMTAgQEAKIAogPHByb3BlcnR5IG5hbWU9InN1bi1jbXAtbWFwcGluZ3MtdGVhbS54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1jbXAtbWFwcGluZ3MtdGVhbS54bWwiLz4KIAotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KIApAQCAtNDcsNyArNDcsNyBAQAogPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InRydWUiLz4KIAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiCi0JdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2J1aWxkLnhtbAppbmRleCA0NDNjOGEwLi5jZmRkMWI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckphdmEyREIvYnVpbGQueG1sCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICA8ZGVsZXRlIGZpbGU9IiR7c3VuLWNtcC1tYXBwaW5ncy54bWx9Ii8+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDM5ICs0NiwzOSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLXRlYW0tamFyIiA+CiAKLSAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4gCi0gICAKKyAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4KKwogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRic2NoZW1hIiB2YWx1ZT0iJHtiYXNlZGlyfS9lamIvdGVhbS9Sb3N0ZXJTY2hlbWEuZGJzY2hlbWEiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0idGVhbS9Mb2NhbCouY2xhc3MsIHRlYW0vTGVhZ3VlKi5jbGFzcywgdGVhbS9QbGF5ZXIqLmNsYXNzLCB0ZWFtL1RlYW0qLmNsYXNzLCB1dGlsLyouY2xhc3MsIFJvc3RlclNjaGVtYS5kYnNjaGVtYSIgLz4KIAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9IiR7ZWpiLWphci10ZWFtLnhtbH0iIC8+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9IiR7c3VuLWVqYi1qYXItdGVhbS54bWx9IiAvPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgLz4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS90ZWFtLWVqYi5qYXIiIC8+Ci0gIAorCiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icGFja2FnZS1yb3N0ZXItamFyIiA+CiAKLSAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4gCi0gICAKLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWpiamFyLWNvbW1vbiI+CisKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9InRlYW0vTG9jYWwqLmNsYXNzLCB0ZWFtL0xlYWd1ZS5jbGFzcywgdGVhbS9MZWFndWVIb21lLmNsYXNzLCB0ZWFtL1BsYXllci5jbGFzcywgdGVhbS9QbGF5ZXJIb21lLmNsYXNzLCB0ZWFtL1RlYW0uY2xhc3MsIHRlYW0vVGVhbUhvbWUuY2xhc3MsLHV0aWwvKi5jbGFzcyxyb3N0ZXIvKi5jbGFzcyIgLz4KIAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9IiR7ZWpiLWphci1yb3N0ZXIueG1sfSIgLz4KICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iJHtzdW4tZWpiLWphci1yb3N0ZXIueG1sfSIgLz4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIC8+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vcm9zdGVyLWVqYi5qYXIiIC8+Ci0gIAorCiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApAQCAtODYsMTcgKzg2LDE3IEBACiAKICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InRydWUiLz4KLQkgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIgorICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9Sb3N0ZXJTZXJ2bGV0LmNsYXNzIiAvPgotCTwvYW50Y2FsbD4KLSAKKyAgICA8L2FudGNhbGw+CisKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icGFja2FnZS1hcHBjbGllbnQiID4KICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogCiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovUm9zdGVyQ2xpZW50LmNsYXNzLCAqKi9Sb3N0ZXIuY2xhc3MsICoqL1Jvc3RlckhvbWUuY2xhc3MsIHV0aWwvKi5jbGFzcyIgLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICAgICAgICAgIHZhbHVlPSIke2FwcGxpY2F0aW9uLWNsaWVudC54bWx9IiAvPgpAQCAtMTE3LDE1ICsxMTcsMTUgQEAKIAogICAgICAgPHByb3BlcnR5IG5hbWU9IlRFTVBESVIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vVEVNUERJUiIgLz4KIAotCTxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vZGVzY3JpcHRvci9JTkRFWC5MSVNUIiB0b2Rpcj0iJHtURU1QRElSfS9NRVRBLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS9kZXNjcmlwdG9yL0lOREVYLkxJU1QiIHRvZGlyPSIke1RFTVBESVJ9L01FVEEtSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KIAogICAgICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KLQk8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+Ci0JICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgotCSAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KLQk8L2ZpbGVzZXQ+CisgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgorICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KKyAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CisgICAgPC9maWxlc2V0PgogCi0JPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0vbGliIiBpbmNsdWRlcz0icmVwb3J0ZXIuamFyIi8+CisgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0vbGliIiBpbmNsdWRlcz0icmVwb3J0ZXIuamFyIi8+CiAgICAgICA8L2Vhcj4KICAgICA8L3RhcmdldD4KIApAQCAtMTQxLDE2ICsxNDEsMTYgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVhciIgLz4KIAogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIj4KLQkJPHBhcmFtIG5hbWU9ImV4dHJhLXBhcmFtcyIKLQkgICAgICB2YWx1ZT0iLS11bmlxdWV0YWJsZW5hbWVzPXRydWUgLS1kcm9wYW5kY3JlYXRldGFibGVzPXRydWUiLz4KLQk8L2FudGNhbGw+CisgICAgICAgIDxwYXJhbSBuYW1lPSJleHRyYS1wYXJhbXMiCisgICAgICAgICAgdmFsdWU9Ii0tdW5pcXVldGFibGVuYW1lcz10cnVlIC0tZHJvcGFuZGNyZWF0ZXRhYmxlcz10cnVlIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTE2NCwxOSArMTY0LDE5IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9IiR7YmFzZWRpcn0vLi4vY29tbW9uL2RlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgYWxsCiAgICAgICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2NsaWVudC9Sb3N0ZXJDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2NsaWVudC9Sb3N0ZXJDbGllbnQuamF2YQppbmRleCAxNjZiZGYyLi45NDhmZjNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9jbGllbnQvUm9zdGVyQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckphdmEyREIvY2xpZW50L1Jvc3RlckNsaWVudC5qYXZhCkBAIC00MywzMiArNDMsMzIgQEAKIAogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIHRyeSB7Ci0JICAgU3lzdGVtLm91dC5wcmludGxuKCJTVEFSVCIpOworICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1RBUlQiKTsKICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigicm9zdGVySmF2YTJEQiIpOwogCiAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVJvc3RlckV4dCIpOwogCi0gICAgICAgICAgIFJvc3RlckhvbWUgaG9tZSA9IAotICAgICAgICAgICAgICAgKFJvc3RlckhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgIFJvc3RlckhvbWUgaG9tZSA9CisgICAgICAgICAgICAgICAoUm9zdGVySG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSb3N0ZXJIb21lLmNsYXNzKTsKIAogICAgICAgICAgICBSb3N0ZXIgbXlSb3N0ZXIgPSBob21lLmNyZWF0ZSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgaW5zZXJ0SW5mbyhteVJvc3Rlcik7CiAgICAgICAgICAgIGdldFNvbWVJbmZvKG15Um9zdGVyKTsKIAogICAgICAgICAgICBnZXRNb3JlSW5mbyhteVJvc3Rlcik7CiAKLQkgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IHJvc3RlckphdmEyREIgIiwgc3RhdC5QQVNTKTsKKyAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IHJvc3RlckphdmEyREIgIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInJvc3RlckphdmEyREIiKTsKIAogICAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKIAogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiBleGNlcHRpb246Iik7Ci0JICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCByb3N0ZXJKYXZhMkRCICIsIHN0YXQuRkFJTCk7CisgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCByb3N0ZXJKYXZhMkRCICIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJyb3N0ZXJKYXZhMkRCIik7CiAgICAgICAgfQogICAgICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgicm9zdGVySmF2YTJEQiIpOwpAQCAtMTM3LDE2ICsxMzcsMTYgQEAKICAgICAgICAgICAgcGxheWVyTGlzdCA9IG15Um9zdGVyLmdldFBsYXllcnNCeVBvc2l0aW9uKCJkZWZlbmRlciIpOwogICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0QWxsUGxheWVycygpOwogICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0UGxheWVyc05vdE9uVGVhbSgpOwotICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lKCJwb3dlciBmb3J3YXJkIiwgCisgICAgICAgICAgIHBsYXllckxpc3QgPSBteVJvc3Rlci5nZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUoInBvd2VyIGZvcndhcmQiLAogICAgICAgICAgICAgICAgIkphY2sgUGF0dGVyc29uIik7CiAgICAgICAgICAgIHBsYXllckxpc3QgPSBteVJvc3Rlci5nZXRQbGF5ZXJzQnlDaXR5KCJUcnVja2VlIik7CiAgICAgICAgICAgIHBsYXllckxpc3QgPSBteVJvc3Rlci5nZXRQbGF5ZXJzQnlTcG9ydCgiU29jY2VyIik7CiAgICAgICAgICAgIHBsYXllckxpc3QgPSBteVJvc3Rlci5nZXRQbGF5ZXJzQnlMZWFndWVJZCgiTDEiKTsKIAogICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0UGxheWVyc0J5SGlnaGVyU2FsYXJ5KCJJYW4gQ2FybHlsZSIpOwotICAgICAgICAgICAKKwogICAgICAgICAgICBwcmludERldGFpbHNMaXN0KHBsYXllckxpc3QpOwotICAgICAgICAgICAKKwogICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0UGxheWVyc0J5U2FsYXJ5UmFuZ2UoNTAwLjAwLCA4MDAuMDApOwogICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0UGxheWVyc09mVGVhbUNvcHkoIlQ1Iik7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2Rlc2NyaXB0b3IvZWpiLWphci10ZWFtLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2Rlc2NyaXB0b3IvZWpiLWphci10ZWFtLnhtbAppbmRleCA3MDRjODAyLi44NTZiYmI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9kZXNjcmlwdG9yL2VqYi1qYXItdGVhbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckphdmEyREIvZGVzY3JpcHRvci9lamItamFyLXRlYW0ueG1sCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgICA8ZGlzcGxheS1uYW1lPkxlYWd1ZUVKQjwvZGlzcGxheS1uYW1lPgogICAgICAgPGVqYi1uYW1lPkxlYWd1ZUVKQjwvZWpiLW5hbWU+CiAgICAgICA8aG9tZT50ZWFtLkxlYWd1ZUhvbWU8L2hvbWU+Ci0gICAgICA8cmVtb3RlPnRlYW0uTGVhZ3VlPC9yZW1vdGU+ICAgICAgCisgICAgICA8cmVtb3RlPnRlYW0uTGVhZ3VlPC9yZW1vdGU+CiAgICAgICA8bG9jYWwtaG9tZT50ZWFtLkxvY2FsTGVhZ3VlSG9tZTwvbG9jYWwtaG9tZT4KICAgICAgIDxsb2NhbD50ZWFtLkxvY2FsTGVhZ3VlPC9sb2NhbD4KICAgICAgIDxlamItY2xhc3M+dGVhbS5MZWFndWVCZWFuPC9lamItY2xhc3M+CkBAIC0xNDMsNyArMTQzLDcgQEAKICAgICAgICAgPC9xdWVyeS1tZXRob2Q+CiAgICAgICAgIDxyZXN1bHQtdHlwZS1tYXBwaW5nPlJlbW90ZTwvcmVzdWx0LXR5cGUtbWFwcGluZz4KICAgICAgICAgPGVqYi1xbD5zZWxlY3QgT2JqZWN0KHApIGZyb20gTGVhZ3VlIGwsIGluKGwudGVhbXMpIGFzIHQsIGluKHQucGxheWVycykgcCB3aGVyZSBsID0gPzE8L2VqYi1xbD4KLSAgICAgIDwvcXVlcnk+ICAgICAgCisgICAgICA8L3F1ZXJ5PgogICAgIDwvZW50aXR5PgogICAgIDxlbnRpdHk+CiAgICAgICA8ZGlzcGxheS1uYW1lPlRlYW1FSkI8L2Rpc3BsYXktbmFtZT4KQEAgLTI0Niw3ICsyNDYsNyBAQAogICAgICAgICAgIDwvbWV0aG9kLXBhcmFtcz4KICAgICAgICAgPC9xdWVyeS1tZXRob2Q+CiAgICAgICAgIDxlamItcWw+c2VsZWN0IGRpc3RpbmN0IHQubmFtZSBmcm9tIFRlYW0gdCB3aGVyZSBMT0NBVEUoPzEsIHQubmFtZSkgJmd0OyAwIEFORCBMT0NBVEUoPzEsIHQubmFtZSkgJmx0OyBMRU5HVEgodC5uYW1lKTwvZWpiLXFsPgotICAgICAgPC9xdWVyeT4gICAgICAKKyAgICAgIDwvcXVlcnk+CiAgICAgPC9lbnRpdHk+CiAgICAgPGVudGl0eT4KICAgICAgIDxkaXNwbGF5LW5hbWU+UGxheWVyRUpCPC9kaXNwbGF5LW5hbWU+CkBAIC0yODgsNyArMjg4LDcgQEAKICAgICAgICAgICA8bWV0aG9kLW5hbWU+ZmluZE5vdE9uVGVhbTwvbWV0aG9kLW5hbWU+CiAgICAgICAgICAgPG1ldGhvZC1wYXJhbXMgLz4KICAgICAgICAgPC9xdWVyeS1tZXRob2Q+Ci0gICAgICAgIDxlamItcWw+c2VsZWN0IG9iamVjdChwKSBmcm9tIFBsYXllciBwIAorICAgICAgICA8ZWpiLXFsPnNlbGVjdCBvYmplY3QocCkgZnJvbSBQbGF5ZXIgcAogd2hlcmUgcC50ZWFtcyBpcyBlbXB0eTwvZWpiLXFsPgogICAgICAgPC9xdWVyeT4KICAgICAgIDxxdWVyeT4KQEAgLTQ3NCw3ICs0NzQsNyBAQAogICAgICAgICAgIDwvbWV0aG9kLXBhcmFtcz4KICAgICAgICAgPC9xdWVyeS1tZXRob2Q+CiAgICAgICAgIDxlamItcWw+c2VsZWN0IG9iamVjdChwKSBmcm9tIFBsYXllciBwIHdoZXJlIHAuc2FsYXJ5ID0gU1FSVCg/MSk8L2VqYi1xbD4KLSAgICAgIDwvcXVlcnk+ICAgICAgCisgICAgICA8L3F1ZXJ5PgogICAgIDwvZW50aXR5PgogICA8L2VudGVycHJpc2UtYmVhbnM+CiAgIDxyZWxhdGlvbnNoaXBzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckphdmEyREIvZWpiL3Jvc3Rlci9Sb3N0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi9yb3N0ZXIvUm9zdGVyLmphdmEKaW5kZXggNjkyYTE4NS4uMjc5YWFiNyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckphdmEyREIvZWpiL3Jvc3Rlci9Sb3N0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9lamIvcm9zdGVyL1Jvc3Rlci5qYXZhCkBAIC0yNyw1NSArMjcsNTUgQEAKIGltcG9ydCBqYXZhLnV0aWwuU2V0OwogCiBwdWJsaWMgaW50ZXJmYWNlIFJvc3RlciBleHRlbmRzIEVKQk9iamVjdCB7Ci0gCisKICAgICAvLyBQbGF5ZXJzCiAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVQbGF5ZXIoUGxheWVyRGV0YWlscyBkZXRhaWxzKSAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVQbGF5ZXIoUGxheWVyRGV0YWlscyBkZXRhaWxzKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIHZvaWQgYWRkUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkgCisgICAgcHVibGljIHZvaWQgYWRkUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVBsYXllcihTdHJpbmcgcGxheWVySWQpIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVBsYXllcihTdHJpbmcgcGxheWVySWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgdm9pZCBkcm9wUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkgCisgICAgcHVibGljIHZvaWQgZHJvcFBsYXllcihTdHJpbmcgcGxheWVySWQsIFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgUGxheWVyRGV0YWlscyBnZXRQbGF5ZXIoU3RyaW5nIHBsYXllcklkKSAKKyAgICBwdWJsaWMgUGxheWVyRGV0YWlscyBnZXRQbGF5ZXIoU3RyaW5nIHBsYXllcklkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtKFN0cmluZyB0ZWFtSWQpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbShTdHJpbmcgdGVhbUlkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtQ29weShTdHJpbmcgdGVhbUlkKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNPZlRlYW1Db3B5KFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVBvc2l0aW9uKFN0cmluZyBwb3NpdGlvbikgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlQb3NpdGlvbihTdHJpbmcgcG9zaXRpb24pCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlIaWdoZXJTYWxhcnkoU3RyaW5nIG5hbWUpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVNhbGFyeVJhbmdlKGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVNhbGFyeVJhbmdlKGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlMZWFndWVJZChTdHJpbmcgbGVhZ3VlSWQpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5TGVhZ3VlSWQoU3RyaW5nIGxlYWd1ZUlkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTcG9ydChTdHJpbmcgc3BvcnQpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U3BvcnQoU3RyaW5nIHNwb3J0KQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlDaXR5KFN0cmluZyBjaXR5KSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUNpdHkoU3RyaW5nIGNpdHkpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldEFsbFBsYXllcnMoKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldEFsbFBsYXllcnMoKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzTm90T25UZWFtKCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzTm90T25UZWFtKCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lKFN0cmluZyBwb3NpdGlvbiwgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUoU3RyaW5nIHBvc2l0aW9uLAogICAgICAgICBTdHJpbmcgbmFtZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0TGVhZ3Vlc09mUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkKQEAgLTgzLDg0ICs4Myw4NCBAQAogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRTcG9ydHNPZlBsYXllcihTdHJpbmcgcGxheWVySWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgICAgIAorCiAgICAgcHVibGljIGRvdWJsZSBnZXRTYWxhcnlPZlBsYXllckZyb21UZWFtKFN0cmluZyB0ZWFtSUQsIFN0cmluZyBwbGF5ZXJOYW1lKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOyAgIAotICAgICAgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKwogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aFBvc2l0aW9uc0dvYWxrZWVwZXJPckRlZmVuZGVyKCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhOYW1lRW5kaW5nV2l0aE9OKCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aE5hbWVFbmRpbmdXaXRoT04oKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aE51bGxOYW1lKCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhUZWFtKFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgICAgIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhTYWxhcnlVc2luZ0FCUyhkb3VibGUgc2FsYXJ5KQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOyAKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhTYWxhcnlVc2luZ1NRUlQoZG91YmxlIHNhbGFyeSkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nQUJTKGRvdWJsZSBzYWxhcnkpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgCi0gICAgICAgICAgIAorCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nU1FSVChkb3VibGUgc2FsYXJ5KQorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworCisKICAgICAvLyBUZWFtcwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRUZWFtc09mTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRUZWFtc09mTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRlYW1JbkxlYWd1ZShUZWFtRGV0YWlscyBkZXRhaWxzLCBTdHJpbmcgbGVhZ3VlSWQpIAorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRlYW1JbkxlYWd1ZShUZWFtRGV0YWlscyBkZXRhaWxzLCBTdHJpbmcgbGVhZ3VlSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVUZWFtKFN0cmluZyB0ZWFtSWQpIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVRlYW0oU3RyaW5nIHRlYW1JZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBUZWFtRGV0YWlscyBnZXRUZWFtKFN0cmluZyB0ZWFtSWQpIAorICAgIHB1YmxpYyBUZWFtRGV0YWlscyBnZXRUZWFtKFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFRlYW1zQnlQbGF5ZXJBbmRMZWFndWUoU3RyaW5nIHBsYXllcktleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxlYWd1ZUtleSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsJCi0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisKICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFRlYW1zQnlQbGF5ZXJBbmRMZWFndWVWaWFSZW1vdGUoU3RyaW5nIHBsYXllcktleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxlYWd1ZUtleSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgU2V0IGdldENpdGllc09mTGVhZ3VlKFN0cmluZyBsZWFndWVLZXkpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgVGVhbURldGFpbHMgZ2V0VGVhbU9mTGVhZ3VlQnlDaXR5KFN0cmluZyBsZWFndWVLZXksIFN0cmluZyBjaXR5KQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwkgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVhbXNOYW1lT2ZMZWFndWVCeUNpdHkoU3RyaW5nIGxlYWd1ZUtleSwgU3RyaW5nIGNpdHkpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CSAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljICBTdHJpbmcgZ2V0VGVhbU5hbWVWYXJpYXRpb25zKFN0cmluZyB0ZWFtSWQpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgVGVhbURldGFpbHMgZ2V0UmVtb3RlVGVhbU9mTGVhZ3VlQnlDaXR5KFN0cmluZyBsZWFndWVLZXksIFN0cmluZyBjaXR5KQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwkgICAKLSAgICAgICAgCi0gICAgICAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworCisKICAgICAvLyBMZWFndWVzCiAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVMZWFndWUoTGVhZ3VlRGV0YWlscyBkZXRhaWxzKSAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVMZWFndWUoTGVhZ3VlRGV0YWlscyBkZXRhaWxzKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBMZWFndWVEZXRhaWxzIGdldExlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIAorICAgIHB1YmxpYyBMZWFndWVEZXRhaWxzIGdldExlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgTGVhZ3VlRGV0YWlscyBnZXRMZWFndWVCeU5hbWUoU3RyaW5nIG5hbWUpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgICAgIAorCiAgICAgLy8gVGVzdAogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRSZW1vdGVUZWFtc09mTGVhZ3VlKFN0cmluZyBsZWFndWVLZXkpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CkBAIC0xNjksNyArMTY5LDcgQEAKIAogICAgIHB1YmxpYyBBcnJheUxpc3QgdGVzdEZpbmRlcihTdHJpbmcgcGFybTEsIFN0cmluZyBwYXJtMiwgU3RyaW5nIHBhcm0zKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNsZWFuVXAoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdmVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAgICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi9yb3N0ZXIvUm9zdGVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckphdmEyREIvZWpiL3Jvc3Rlci9Sb3N0ZXJCZWFuLmphdmEKaW5kZXggMzg2OTc5Yi4uMzZiOTViMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckphdmEyREIvZWpiL3Jvc3Rlci9Sb3N0ZXJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckphdmEyREIvZWpiL3Jvc3Rlci9Sb3N0ZXJCZWFuLmphdmEKQEAgLTUyLDE5ICs1MiwxOSBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgY3JlYXRlUGxheWVyKFBsYXllckRldGFpbHMgZGV0YWlscykgeyAKLSAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVQbGF5ZXIoUGxheWVyRGV0YWlscyBkZXRhaWxzKSB7CisKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gY3JlYXRlUGxheWVyIik7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBMb2NhbFBsYXllciBwbGF5ZXIgPSBwbGF5ZXJIb21lLmNyZWF0ZShkZXRhaWxzLmdldElkKCksIAorICAgICAgICAgICAgTG9jYWxQbGF5ZXIgcGxheWVyID0gcGxheWVySG9tZS5jcmVhdGUoZGV0YWlscy5nZXRJZCgpLAogICAgICAgICAgICAgICAgIGRldGFpbHMuZ2V0TmFtZSgpLCBkZXRhaWxzLmdldFBvc2l0aW9uKCksIGRldGFpbHMuZ2V0U2FsYXJ5KCkpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAKLSAgICBwdWJsaWMgdm9pZCBhZGRQbGF5ZXIoU3RyaW5nIHBsYXllcklkLCBTdHJpbmcgdGVhbUlkKSB7IAotIAorCisgICAgcHVibGljIHZvaWQgYWRkUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkgeworCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGFkZFBsYXllciIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgTG9jYWxUZWFtIHRlYW0gPSB0ZWFtSG9tZS5maW5kQnlQcmltYXJ5S2V5KHRlYW1JZCk7CkBAIC03NSw3ICs3NSw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVQbGF5ZXIoU3RyaW5nIHBsYXllcklkKSB7IAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVBsYXllcihTdHJpbmcgcGxheWVySWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiByZW1vdmVQbGF5ZXIiKTsKICAgICAgICAgdHJ5IHsKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAKKwogICAgIHB1YmxpYyB2b2lkIGRyb3BQbGF5ZXIoU3RyaW5nIHBsYXllcklkLCBTdHJpbmcgdGVhbUlkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZHJvcFBsYXllciIpOwpAQCAtMTEzLDcgKzExMyw3IEBACiAgICAgfSAvLyBnZXRQbGF5ZXIKIAogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtKFN0cmluZyB0ZWFtSWQpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtKFN0cmluZyB0ZWFtSWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzT2ZUZWFtIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICB9IC8vIGdldFBsYXllcnNPZlRlYW0KIAogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtQ29weShTdHJpbmcgdGVhbUlkKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbUNvcHkoU3RyaW5nIHRlYW1JZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNPZlRlYW1Db3B5Iik7CiAgICAgICAgIEFycmF5TGlzdCBwbGF5ZXJzTGlzdCA9IG51bGw7CkBAIC0xNDUsNyArMTQ1LDcgQEAKICAgICB9IC8vIGdldFBsYXllcnNPZlRlYW1Db3B5CiAKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0VGVhbXNPZkxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRUZWFtc09mTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFRlYW1zT2ZMZWFndWUiKTsKIApAQCAtMTg2LDcgKzE4Niw3IEBACiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlQb3NpdGlvbgogCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNCeUJ5SGlnaGVyU2FsYXJ5Iik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CkBAIC0yMDAsNyArMjAwLDcgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0UGxheWVyc0J5SGlnaGVyU2FsYXJ5CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVNhbGFyeVJhbmdlKGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U2FsYXJ5UmFuZ2UoZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzQnlTYWxhcnlSYW5nZSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwpAQCAtMjE0LDcgKzIxNCw3IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldFBsYXllcnNCeVNhbGFyeVJhbmdlCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUxlYWd1ZUlkKFN0cmluZyBsZWFndWVJZCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUxlYWd1ZUlkKFN0cmluZyBsZWFndWVJZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNCeUxlYWd1ZUlkIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CkBAIC0yMjksNyArMjI5LDcgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0UGxheWVyc0J5TGVhZ3VlSWQKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U3BvcnQoU3RyaW5nIHNwb3J0KSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U3BvcnQoU3RyaW5nIHNwb3J0KSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc0J5U3BvcnQiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKQEAgLTI0Myw3ICsyNDMsNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlTcG9ydAogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlDaXR5KFN0cmluZyBjaXR5KSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5Q2l0eShTdHJpbmcgY2l0eSkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNCeUNpdHkiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKQEAgLTI1Nyw3ICsyNTcsNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlDaXR5CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldEFsbFBsYXllcnMoKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0QWxsUGxheWVycygpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRBbGxQbGF5ZXJzIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CkBAIC0yNzEsNyArMjcxLDcgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0QWxsUGxheWVycwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzTm90T25UZWFtKCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNOb3RPblRlYW0oKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc05vdE9uVGVhbSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwpAQCAtMjg1LDggKzI4NSw4IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldFBsYXllcnNOb3RPblRlYW0KIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lKFN0cmluZyBwb3NpdGlvbiwgCi0gICAgICAgIFN0cmluZyBuYW1lKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lKFN0cmluZyBwb3NpdGlvbiwKKyAgICAgICAgU3RyaW5nIG5hbWUpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKQEAgLTMwMCw3ICszMDAsNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0TGVhZ3Vlc09mUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldExlYWd1ZXNPZlBsYXllcihTdHJpbmcgcGxheWVySWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRMZWFndWVzT2ZQbGF5ZXIiKTsKICAgICAgICAgQXJyYXlMaXN0IGRldGFpbHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwpAQCAtMzEyLDcgKzMxMiw3IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAKKwogICAgICAgICBJdGVyYXRvciBpID0gbGVhZ3Vlcy5pdGVyYXRvcigpOwogICAgICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9IChMb2NhbExlYWd1ZSkgaS5uZXh0KCk7CkBAIC0zMjMsNyArMzIzLDcgQEAKICAgICAgICAgcmV0dXJuIGRldGFpbHNMaXN0OwogICAgIH0gLy8gZ2V0TGVhZ3Vlc09mUGxheWVyCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFNwb3J0c09mUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFNwb3J0c09mUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFNwb3J0c09mUGxheWVyIik7CiAgICAgICAgIEFycmF5TGlzdCBzcG9ydHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwpAQCAtMzM1LDcgKzMzNSw3IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAKKwogICAgICAgICBJdGVyYXRvciBpID0gc3BvcnRzLml0ZXJhdG9yKCk7CiAgICAgICAgIHdoaWxlIChpLmhhc05leHQoKSkgewogICAgICAgICAgICAgU3RyaW5nIHNwb3J0ID0gKFN0cmluZykgaS5uZXh0KCk7CkBAIC0zNDYsOCArMzQ2LDggQEAKIAogICAgIC8vIFRlYW0gYnVzaW5lc3MgbWV0aG9kcwogCi0gICAgcHVibGljIHZvaWQgY3JlYXRlVGVhbUluTGVhZ3VlKFRlYW1EZXRhaWxzIGRldGFpbHMsIFN0cmluZyBsZWFndWVJZCkgeyAKLSAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVUZWFtSW5MZWFndWUoVGVhbURldGFpbHMgZGV0YWlscywgU3RyaW5nIGxlYWd1ZUlkKSB7CisKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gY3JlYXRlVGVhbUluTGVhZ3VlIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWUgPSBsZWFndWVIb21lLmZpbmRCeVByaW1hcnlLZXkobGVhZ3VlSWQpOwpAQCAtMzU4LDggKzM1OCw4IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlVGVhbShTdHJpbmcgdGVhbUlkKSB7IAorCisgICAgcHVibGljIHZvaWQgcmVtb3ZlVGVhbShTdHJpbmcgdGVhbUlkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gcmVtb3ZlVGVhbSIpOwogICAgICAgICB0cnkgewpAQCAtMzY5LDcgKzM2OSw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gCisKICAgICBwdWJsaWMgVGVhbURldGFpbHMgZ2V0VGVhbShTdHJpbmcgdGVhbUlkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0VGVhbSIpOwpAQCAtMzg3LDE4ICszODcsMTggQEAKIAogICAgIC8vIExlYWd1ZSBidXNpbmVzcyBtZXRob2RzCiAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVMZWFndWUoTGVhZ3VlRGV0YWlscyBkZXRhaWxzKSB7IAotIAorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUxlYWd1ZShMZWFndWVEZXRhaWxzIGRldGFpbHMpIHsKKwogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBjcmVhdGVMZWFndWUiKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9IGxlYWd1ZUhvbWUuY3JlYXRlKGRldGFpbHMuZ2V0SWQoKSwgCisgICAgICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWUgPSBsZWFndWVIb21lLmNyZWF0ZShkZXRhaWxzLmdldElkKCksCiAgICAgICAgICAgICAgICAgZGV0YWlscy5nZXROYW1lKCksIGRldGFpbHMuZ2V0U3BvcnQoKSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZUxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIHsgCisKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gcmVtb3ZlTGVhZ3VlIik7CiAgICAgICAgIHRyeSB7CkBAIC00MDgsNyArNDA4LDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAKKwogICAgIHB1YmxpYyBMZWFndWVEZXRhaWxzIGdldExlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRMZWFndWUiKTsKQEAgLTQyMiw3ICs0MjIsNyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBsZWFndWVEZXRhaWxzOwogICAgIH0KLSAKKwogICAgIC8vIFNlc3Npb25CZWFuIG1ldGhvZHMKIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewpAQCAtNDcwLDUxICs0NzAsNTEgQEAKICAgICBwdWJsaWMgUm9zdGVyQmVhbigpIHt9CiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykge30KLSAKKwogICAgIC8vIFByaXZhdGUgbWV0aG9kcwogCiAgICAgcHJpdmF0ZSBMb2NhbFBsYXllckhvbWUgbG9va3VwUGxheWVyKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7Ci0gICAgICAgCisKICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlUGxheWVyRXh0Iik7CiAgICAgICAgIHJldHVybiAoTG9jYWxQbGF5ZXJIb21lKSBvYmpyZWY7CiAgICB9CiAKICAgICBwcml2YXRlIExvY2FsVGVhbUhvbWUgbG9va3VwVGVhbSgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewotICAgICAgIAorCiAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVRlYW1FeHQiKTsKICAgICAgICAgcmV0dXJuIChMb2NhbFRlYW1Ib21lKSBvYmpyZWY7CiAgICB9CiAKICAgICBwcml2YXRlIExvY2FsTGVhZ3VlSG9tZSBsb29rdXBMZWFndWUoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKLSAgICAgICAKKwogICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVMZWFndWVFeHQiKTsKICAgICAgICAgcmV0dXJuIChMb2NhbExlYWd1ZUhvbWUpIG9ianJlZjsKICAgIH0KIAogICAgIHByaXZhdGUgUGxheWVySG9tZSBsb29rdXBSZW1vdGVQbGF5ZXIoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKLSAgICAgICAKKwogICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9SZW1vdGVQbGF5ZXJFeHQiKTsKICAgICAgICAgcmV0dXJuIChQbGF5ZXJIb21lKSBvYmpyZWY7CiAgICB9CiAKICAgICBwcml2YXRlIFRlYW1Ib21lIGxvb2t1cFJlbW90ZVRlYW0oKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKLSAgICAgICAKKwogICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9SZW1vdGVUZWFtRXh0Iik7CiAgICAgICAgIHJldHVybiAoVGVhbUhvbWUpIG9ianJlZjsKICAgIH0KIAogICAgIHByaXZhdGUgTGVhZ3VlSG9tZSBsb29rdXBSZW1vdGVMZWFndWUoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKLSAgICAgICAKKwogICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9SZW1vdGVMZWFndWVFeHQiKTsKICAgICAgICAgcmV0dXJuIChMZWFndWVIb21lKSBvYmpyZWY7CiAgICB9Ci0gICAKKwogICAgcHJpdmF0ZSBBcnJheUxpc3QgY29weVBsYXllcnNUb0RldGFpbHMoQ29sbGVjdGlvbiBwbGF5ZXJzKSB7CiAKICAgICAgICAgQXJyYXlMaXN0IGRldGFpbHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwpAQCAtNTQ0LDE1ICs1NDQsMTUgQEAKIAogICAgICAgICByZXR1cm4gZGV0YWlsc0xpc3Q7CiAgICB9IC8vIGNvcHlQbGF5ZXJzVG9EZXRhaWxzCi0gICAKKwogICAgLyoqCi0gICAgKiBkaXJ0eSBjbGVhblVwIG1ldGhvZCBvbmx5IEVKQnMgd2l0aCBoYXJkY29kZWQgUEsgd2lsbCBiZSByZW1vdmVkICAKKyAgICAqIGRpcnR5IGNsZWFuVXAgbWV0aG9kIG9ubHkgRUpCcyB3aXRoIGhhcmRjb2RlZCBQSyB3aWxsIGJlIHJlbW92ZWQKICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNsZWFuVXAoKSB7Ci0gICAgICAgIERlYnVnLnByaW50KCJDbGVhbmluZyB1cCB0aGUgZGF0YWJhc2UiKTsgICAKKyAgICAgICAgRGVidWcucHJpbnQoIkNsZWFuaW5nIHVwIHRoZSBkYXRhYmFzZSIpOwogICAgICAgICBDb2xsZWN0aW9uIHRvQ2xlYW4gPSBudWxsOwogICAgICAgICBJdGVyYXRvciBpdCA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL3JlbW92aW5nIHRoZSBwbGF5ZXIgRUpCcwogICAgICAgICAgICAgdG9DbGVhbiA9IHBsYXllckhvbWUuZmluZEFsbCgpOwpAQCAtNTYwLDMzICs1NjAsMzMgQEAKICAgICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICAoKExvY2FsUGxheWVyKWl0Lm5leHQoKSkucmVtb3ZlKCk7CiAgICAgICAgICAgICB9Ci0gICAgCisKICAgICAgICAgICAgIC8vIHJlbW92aW5nIHRoZSB0ZWFtIEVKQnMKICAgICAgICAgICAgIHRvQ2xlYW4gPSB0ZWFtSG9tZS5maW5kQWxsKCk7CiAgICAgICAgICAgICBpdCA9IHRvQ2xlYW4uaXRlcmF0b3IoKTsKICAgICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICAoKExvY2FsVGVhbSlpdC5uZXh0KCkpLnJlbW92ZSgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyByZW1vdmluZyB0aGUgbGVhZ3VlIEVKQnMKICAgICAgICAgICAgIHRvQ2xlYW4gPSBsZWFndWVIb21lLmZpbmRBbGwoKTsKICAgICAgICAgICAgIGl0ID0gdG9DbGVhbi5pdGVyYXRvcigpOwogICAgICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgICgoTG9jYWxMZWFndWUpaXQubmV4dCgpKS5yZW1vdmUoKTsKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICBEZWJ1Zy5wcmludCgiQ2xlYW5pbmcgdXAgdGhlIGRhdGFiYXNlIC4uLiBkb25lISIpOwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkKKyAgICAgICAgICAgIH0KKyAgICAgICAgRGVidWcucHJpbnQoIkNsZWFuaW5nIHVwIHRoZSBkYXRhYmFzZSAuLi4gZG9uZSEiKTsKICAgICAgICAgfSAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgICAgCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBuYW1lCiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIHB1YmxpYyBMZWFndWVEZXRhaWxzIGdldExlYWd1ZUJ5TmFtZShTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgCisKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0TGVhZ3VlQnlOYW1lIChTaW5nbGVPYmplY3RGaW5kZXIpIik7CiAgICAgICAgIExlYWd1ZURldGFpbHMgbGVhZ3VlRGV0YWlscyA9IG51bGw7CiAgICAgICAgIHRyeSB7CkBAIC01OTgsMTIgKzU5OCwxMiBAQAogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGxlYWd1ZURldGFpbHM7Ci0gICAgfSAgICAgICAgCisgICAgfQogICAgIC8vIGdldExlYWd1ZUJ5TmFtZSgpCiAKLSAgICAKKwogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIHBsYXllcktleQogICAgICAqIEBwYXJhbSBsZWFndWVLZXkKICAgICAgKiBAcmV0dXJuCkBAIC02MTIsMTMgKzYxMiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbGVhZ3VlS2V5KSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0VGVhbXNCeVBsYXllckFuZExlYWd1ZSIpOwotICAgICAgICBBcnJheUxpc3QgZGV0YWlsc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CQkJCQkJCQkJICAgCisgICAgICAgIEFycmF5TGlzdCBkZXRhaWxzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKICAgICAgICAgQ29sbGVjdGlvbiB0ZWFtc0NvbGwgPSBudWxsOwogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBMb2NhbFBsYXllciBwbGF5ZXIgPSBwbGF5ZXJIb21lLmZpbmRCeVByaW1hcnlLZXkocGxheWVyS2V5KTsKLSAgICAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9IGxlYWd1ZUhvbWUuZmluZEJ5UHJpbWFyeUtleShsZWFndWVLZXkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICB0ZWFtc0NvbGwgPSB0ZWFtSG9tZS5maW5kQnlQbGF5ZXJBbmRMZWFndWUocGxheWVyLCBsZWFndWUpOwkJCQorICAgICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gbGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUtleSk7CisgICAgICAgICAgICB0ZWFtc0NvbGwgPSB0ZWFtSG9tZS5maW5kQnlQbGF5ZXJBbmRMZWFndWUocGxheWVyLCBsZWFndWUpOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKQEAgLTYzMiwxMSArNjMyLDExIEBACiAgICAgICAgICAgICBkZXRhaWxzTGlzdC5hZGQoZGV0YWlscyk7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gZGV0YWlsc0xpc3Q7CQotICAgIH0JCisgICAgICAgIHJldHVybiBkZXRhaWxzTGlzdDsKKyAgICB9CiAKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBwbGF5ZXJLZXkKICAgICAgKiBAcGFyYW0gbGVhZ3VlS2V5CiAgICAgICogQHJldHVybgpAQCAtNjQ1LDE3ICs2NDUsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxlYWd1ZUtleSkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFRlYW1zQnlQbGF5ZXJBbmRMZWFndWVWaWFSZW1vdGUiKTsKLSAgICAgICAgQXJyYXlMaXN0IGRldGFpbHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwkJCQkJCQkJCSAgIAorICAgICAgICBBcnJheUxpc3QgZGV0YWlsc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CiAgICAgICAgIENvbGxlY3Rpb24gdGVhbXNDb2xsID0gbnVsbDsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgRGVidWcucHJpbnQoIiAtLS0tLSBmaW5kaW5nIC4uLi4iKTsKICAgICAgICAgICAgIFBsYXllciBwbGF5ZXIgPSByZW1QbGF5ZXJIb21lLmZpbmRCeVByaW1hcnlLZXkocGxheWVyS2V5KTsKICAgICAgICAgICAgIERlYnVnLnByaW50KCIgLS0tLS0gUGxheWVyIGZvdW5kIik7Ci0gICAgICAgICAgICBMZWFndWUgbGVhZ3VlID0gcmVtTGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUtleSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIExlYWd1ZSBsZWFndWUgPSByZW1MZWFndWVIb21lLmZpbmRCeVByaW1hcnlLZXkobGVhZ3VlS2V5KTsKICAgICAgICAgICAgIERlYnVnLnByaW50KCIgLS0tLS0gTGVhZ3VlIGZvdW5kIik7CiAgICAgICAgICAgICB0ZWFtc0NvbGwgPSByZW1UZWFtSG9tZS5maW5kQnlQbGF5ZXJBbmRMZWFndWVWaWFSZW1vdGUocGxheWVyLCBsZWFndWUpOwotICAgICAgICAgICAgRGVidWcucHJpbnQoIiAtLS0tLSBUZWFtIGZvdW5kIik7CQkJCisgICAgICAgICAgICBEZWJ1Zy5wcmludCgiIC0tLS0tIFRlYW0gZm91bmQiKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CkBAIC02NzQsNDUgKzY3NCw0NSBAQAogICAgICAgICB9CiAKIAotICAgICAgICByZXR1cm4gZGV0YWlsc0xpc3Q7CQotICAgIH0JCi0gICAgCisgICAgICAgIHJldHVybiBkZXRhaWxzTGlzdDsKKyAgICB9CisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBjaXR5CiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIHB1YmxpYyBTZXQgZ2V0Q2l0aWVzT2ZMZWFndWUoU3RyaW5nIGxlYWd1ZUtleSkgewotICAgICAgICAKKwogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRDaXRpZXNPZkxlYWd1ZShsZWFndWVLZXkpIik7Ci0gICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZTsgCisgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZTsKICAgICAgICAgU2V0IGNpdGllczsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGxlYWd1ZSA9IGxlYWd1ZUhvbWUuZmluZEJ5UHJpbWFyeUtleShsZWFndWVLZXkpOwotICAgICAgICAgICAgY2l0aWVzID0gbGVhZ3VlLmdldENpdGllc09mVGhpc0xlYWd1ZSgpOwkKKyAgICAgICAgICAgIGNpdGllcyA9IGxlYWd1ZS5nZXRDaXRpZXNPZlRoaXNMZWFndWUoKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CQkJCisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNpdGllczsKICAgICB9Ly8gZ2V0Q2l0aWVzT2ZMZWFndWUoKQogCiAKICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFJlbW90ZVRlYW1zT2ZMZWFndWUoU3RyaW5nIGxlYWd1ZUtleSkgewotICAgICAgICAKKwogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRSZW1vdGVUZWFtc09mTGVhZ3VlKGxlYWd1ZUtleSkiKTsKLSAgICAgICAgQXJyYXlMaXN0IGRldGFpbHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwkJCQkJCQkJCSAgIAotICAgICAgICBMZWFndWUgbGVhZ3VlOyAKKyAgICAgICAgQXJyYXlMaXN0IGRldGFpbHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOworICAgICAgICBMZWFndWUgbGVhZ3VlOwogICAgICAgICBTZXQgdGVhbXM7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBsZWFndWUgPSByZW1MZWFndWVIb21lLmZpbmRCeVByaW1hcnlLZXkobGVhZ3VlS2V5KTsKLSAgICAgICAgICAgIHRlYW1zID0gbGVhZ3VlLmdldFJlbW90ZVRlYW1zT2ZUaGlzTGVhZ3VlKCk7CQorICAgICAgICAgICAgdGVhbXMgPSBsZWFndWUuZ2V0UmVtb3RlVGVhbXNPZlRoaXNMZWFndWUoKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CQkJCisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KIAogICAgICAgICB0cnkgewpAQCAtNzI3LDEyICs3MjcsMTIgQEAKICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBkZXRhaWxzTGlzdDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBsZWFndWVLZXkKICAgICAgKiBAcGFyYW0gY2l0eQogICAgICAqIEByZXR1cm4KQEAgLTc0MSw3ICs3NDEsNyBAQAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRUZWFtT2ZMZWFndWVCeUNpdHkobGVhZ3VlS2V5LCBjaXR5KSIpOwogICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWU7CiAgICAgICAgIExvY2FsVGVhbSB0ZWFtOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgbGVhZ3VlID0gbGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUtleSk7CiAgICAgICAgICAgICB0ZWFtID0gbGVhZ3VlLmdldFRlYW1CeUNpdHkoY2l0eSk7CkBAIC03NDksMTMgKzc0OSwxMyBAQAogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG5ldyBUZWFtRGV0YWlscyh0ZWFtLmdldFRlYW1JZCgpLCB0ZWFtLmdldE5hbWUoKSwgdGVhbS5nZXRDaXR5KCkpOwogICAgIH0vLyBnZXRUZWFtT2ZMZWFndWVCeUNpdHkoKQogCi0gICAgCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBsZWFndWVLZXkKICAgICAgKiBAcGFyYW0gY2l0eQogICAgICAqIEByZXR1cm4KQEAgLTc2NCw3ICs3NjQsNyBAQAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRUZWFtc05hbWVPZkxlYWd1ZUJ5Q2l0eShsZWFndWVLZXksIGNpdHkpIik7CiAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZTsKICAgICAgICAgU3RyaW5nIHRlYW1OYW1lOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgbGVhZ3VlID0gbGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUtleSk7CiAgICAgICAgICAgICB0ZWFtTmFtZSA9IGxlYWd1ZS5nZXRUZWFtc05hbWVCeUNpdHkoY2l0eSk7CkBAIC03NzIsMTQgKzc3MiwxNCBAQAogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHRlYW1OYW1lOwogCiAgICAgfS8vIGdldFRlYW1zTmFtZU9mTGVhZ3VlQnlDaXR5KCkKLSAgICAKLSAgICAKKworCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gdGVhbUlECiAgICAgICogQHBhcmFtIHBsYXllck5hbWUKICAgICAgKiBAcmV0dXJuCkBAIC03ODgsMjEgKzc4OCwyMSBAQAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRTYWxhcnlPZlBsYXllckZyb21UZWFtKHRlYW1LZXksIHBsYXllcktleSkiKTsKICAgICAgICAgTG9jYWxUZWFtIHRlYW07CiAgICAgICAgIGRvdWJsZSBzYWxhcnk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB0ZWFtID0gdGVhbUhvbWUuZmluZEJ5UHJpbWFyeUtleSh0ZWFtSUQpOwkJCi0gICAgICAgICAgICBzYWxhcnkgPSB0ZWFtLmdldFNhbGFyeU9mUGxheWVyKHBsYXllck5hbWUpOwkJCQorICAgICAgICAgICAgdGVhbSA9IHRlYW1Ib21lLmZpbmRCeVByaW1hcnlLZXkodGVhbUlEKTsKKyAgICAgICAgICAgIHNhbGFyeSA9IHRlYW0uZ2V0U2FsYXJ5T2ZQbGF5ZXIocGxheWVyTmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gc2FsYXJ5OyAgICAgICAKKworICAgICAgICByZXR1cm4gc2FsYXJ5OwogICAgIH0vLyBnZXRTYWxhcnlPZlBsYXllckZyb21UZWFtKCkKLSAgICAKLSAgICAKKworCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gbGVhZ3VlSWQKICAgICAgKiBAcmV0dXJuCiAgICAgICovCkBAIC04MTAsNyArODEwLDcgQEAKICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzT2ZMZWFndWUobGVhZ3VlSWQpIik7CiAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlOwogICAgICAgIFNldCBwbGF5ZXJzOwotICAgICAgIAorCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgbGVhZ3VlID0gbGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUlkKTsKICAgICAgICAgICAgcGxheWVycyA9IGxlYWd1ZS5nZXRQbGF5ZXJzRnJvbUxlYWd1ZSgpOwpAQCAtODE4LDEyICs4MTgsMTIgQEAKICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICB9Ci0gICAgICAgCi0gICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOyAgICAgCisKKyAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfS8vIGdldFBsYXllcnNPZkxlYWd1ZSgpCi0gICAgCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBsZWFndWVJZAogICAgICAqIEByZXR1cm4KICAgICAgKi8KQEAgLTg0MCw2OCArODQwLDY4IEBACiAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgfQotICAgICAgIAotICAgICAgIHJldHVybiByZXN1bHQ7ICAgICAKKworICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfS8vIGdldFBsYXllcnNPZkxlYWd1ZSgpCi0gICAgCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4KICAgICAgKi8KICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNXaXRoUG9zaXRpb25zR29hbGtlZXBlck9yRGVmZW5kZXIoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNXaXRoUG9zaXRpb25zR29hbGtlZXBlck9yRGVmZW5kZXIoKSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcGxheWVycyA9IHBsYXllckhvbWUuZmluZEJ5UG9zaXRpb25zR29hbGtlZXBlck9yRGVmZW5kZXIoKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0vLyBnZXRQbGF5ZXJzV2l0aFBvc2l0aW9uc0dvYWxrZWVwZXJPckRlZmVuZGVyKCkKLSAgICAKKwogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhOYW1lRW5kaW5nV2l0aE9OKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzV2l0aE5hbWVFbmRpbmdXaXRoT04oKSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcGxheWVycyA9IHBsYXllckhvbWUuZmluZEJ5TmFtZUVuZGluZ1dpdGhPTigpOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfS8vIGdldFBsYXllcnNXaXRoTmFtZUVuZGluZ1dpdGhPTigpCiAKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4KICAgICAgKi8KICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNXaXRoTnVsbE5hbWUoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNXaXRoTnVsbE5hbWUoKSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcGxheWVycyA9IHBsYXllckhvbWUuZmluZEJ5TnVsbE5hbWUoKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0vLyBnZXRQbGF5ZXJzV2l0aE51bGxOYW1lKCkKIAogCiAKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSB0ZWFtSWQKICAgICAgKiBAcmV0dXJuCiAgICAgICovCkBAIC05MDksNyArOTA5LDcgQEAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc1dpdGhUZWFtKHRlYW1JZCkiKTsKICAgICAgICAgTG9jYWxUZWFtIHRlYW07CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB0ZWFtID0gdGVhbUhvbWUuZmluZEJ5UHJpbWFyeUtleSh0ZWFtSWQpOwogICAgICAgICAgICAgcGxheWVycyA9IHBsYXllckhvbWUuZmluZEJ5VGVhbSh0ZWFtKTsKQEAgLTkxNywxMyArOTE3LDEzIEBACiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfS8vIGdldFBsYXllcnNXaXRoVGVhbSgpCi0gICAgCi0gICAgCisKKwogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIHRlYW1JZAogICAgICAqIEByZXR1cm4KICAgICAgKi8KQEAgLTkzMSw3ICs5MzEsNyBAQAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRUZWFtTmFtZVZhcmlhdGlvbnModGVhbUlkKSIpOwogICAgICAgICBMb2NhbFRlYW0gdGVhbTsKICAgICAgICAgU3RyaW5nQnVmZmVyIG91dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRlYW0gPSB0ZWFtSG9tZS5maW5kQnlQcmltYXJ5S2V5KHRlYW1JZCk7CiAgICAgICAgICAgICBEZWJ1Zy5wcmludCgiLS0tIENPTkNBVCIpOwpAQCAtOTM5LDU5ICs5MzksNTkgQEAKICAgICAgICAgICAgIERlYnVnLnByaW50KCItLS0gU1VCU1RSSU5HIik7CiAgICAgICAgICAgICBvdXQuYXBwZW5kKHRlYW0uZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czIoKSk7CiAgICAgICAgICAgICBEZWJ1Zy5wcmludCgiLS0tIExPQ0FURSBBTkQgTEVOR1RIIik7Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKHRlYW0uZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czMoKSk7CQkJCisgICAgICAgICAgICBvdXQuYXBwZW5kKHRlYW0uZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czMoKSk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwkJCQorICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBvdXQudG9TdHJpbmcoKTsKICAgICB9Ly8gZ2V0VGVhbU5hbWVWYXJpYXRpb25zKCkKLSAgICAKLSAgICAKKworCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gc2FsYXJ5CiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhTYWxhcnlVc2luZ0FCUyhkb3VibGUgc2FsYXJ5KSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNXaXRoU2FsYXJ5VXNpbmdBQlMoc2FsYXJ5KSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcGxheWVycyA9IHBsYXllckhvbWUuZmluZEJ5U2FsYXJheVdpdGhBcml0aG1ldGljRnVuY3Rpb25BQlMoc2FsYXJ5KTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0vLyBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nQUJTKCkKIAogCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gc2FsYXJ5CiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhTYWxhcnlVc2luZ1NRUlQoZG91YmxlIHNhbGFyeSkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nU1FSVChzYWxhcnkpIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBwbGF5ZXJzID0gcGxheWVySG9tZS5maW5kQnlTYWxhcmF5V2l0aEFyaXRobWV0aWNGdW5jdGlvblNRUlQoc2FsYXJ5KTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0vLyBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nU1FSVCgpCi0gICAgCi0gICAgCi0gICAgCisKKworCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gbGVhZ3VlS2V5CiAgICAgICogQHBhcmFtIGNpdHkKICAgICAgKiBAcmV0dXJuCkBAIC0xMDAxLDIwICsxMDAxLDIwIEBACiAgICAgICAgIExlYWd1ZSBsZWFndWU7CiAgICAgICAgIFRlYW0gdGVhbTsKICAgICAgICAgVGVhbURldGFpbHMgdGVhbURldGFpbHM7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBsZWFndWUgPSByZW1MZWFndWVIb21lLmZpbmRCeVByaW1hcnlLZXkobGVhZ3VlS2V5KTsKICAgICAgICAgICAgIHRlYW0gPSBsZWFndWUuZ2V0UmVtb3RlVGVhbUJ5Q2l0eShjaXR5KTsKLSAgICAgICAgICAgIHRlYW1EZXRhaWxzID0gbmV3IFRlYW1EZXRhaWxzKHRlYW0uZ2V0VGVhbUlkKCksIHRlYW0uZ2V0TmFtZSgpLCB0ZWFtLmdldENpdHkoKSk7IAorICAgICAgICAgICAgdGVhbURldGFpbHMgPSBuZXcgVGVhbURldGFpbHModGVhbS5nZXRUZWFtSWQoKSwgdGVhbS5nZXROYW1lKCksIHRlYW0uZ2V0Q2l0eSgpKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHRlYW1EZXRhaWxzOwogICAgIH0vLyBnZXRSZW1vdGVUZWFtT2ZMZWFndWVCeUNpdHkoKQotICAgIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5TGVhZ3VlSWRXaXRoTlVMTChTdHJpbmcgbGVhZ3VlSWQpIHsgCisKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUxlYWd1ZUlkV2l0aE5VTEwoU3RyaW5nIGxlYWd1ZUlkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc0J5TGVhZ3VlSWQiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKQEAgLTEwMjksNSArMTAyOSw1IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldFBsYXllcnNCeUxlYWd1ZUlkCiAKLSAgICAKLX0gLy8gUm9zdGVyQmVhbiAKKworfSAvLyBSb3N0ZXJCZWFuCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9lamIvcm9zdGVyL1Jvc3RlckhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi9yb3N0ZXIvUm9zdGVySG9tZS5qYXZhCmluZGV4IGNlY2Q0NjIuLmI4NzRhZDQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi9yb3N0ZXIvUm9zdGVySG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi9yb3N0ZXIvUm9zdGVySG9tZS5qYXZhCkBAIC0yMiw2ICsyMiw2IEBACiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCSG9tZTsKIAogcHVibGljIGludGVyZmFjZSBSb3N0ZXJIb21lIGV4dGVuZHMgRUpCSG9tZSB7Ci0gCisKICAgICBSb3N0ZXIgY3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgQ3JlYXRlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckphdmEyREIvZWpiL3RlYW0vTGVhZ3VlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9lamIvdGVhbS9MZWFndWUuamF2YQppbmRleCBiMGI4ZTFiLi45NmUzNzAzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9lamIvdGVhbS9MZWFndWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9lamIvdGVhbS9MZWFndWUuamF2YQpAQCAtMjksMTUgKzI5LDE1IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRTcG9ydCgpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgICAgcHVibGljIENvbGxlY3Rpb24gZ2V0VGVhbXMoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIFRlYW0gZ2V0UmVtb3RlVGVhbUJ5Q2l0eShTdHJpbmcgY2l0eSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgCisgICAgcHVibGljIFRlYW0gZ2V0UmVtb3RlVGVhbUJ5Q2l0eShTdHJpbmcgY2l0eSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3RlRXhjZXB0aW9uOwotICAgIAotICAgIHB1YmxpYyBTZXQgZ2V0UmVtb3RlVGVhbXNPZlRoaXNMZWFndWUoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCAKKworICAgIHB1YmxpYyBTZXQgZ2V0UmVtb3RlVGVhbXNPZlRoaXNMZWFndWUoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGdldFJlbW90ZVBsYXllcnNGcm9tTGVhZ3VlKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgCisgICAgcHVibGljIENvbGxlY3Rpb24gZ2V0UmVtb3RlUGxheWVyc0Zyb21MZWFndWUoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAvLyAgICBwdWJsaWMgdm9pZCBhZGRUZWFtKFRlYW0gdGVhbSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIC8vICAgIHB1YmxpYyB2b2lkIGRyb3BUZWFtKFRlYW0gdGVhbSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckphdmEyREIvZWpiL3RlYW0vTGVhZ3VlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckphdmEyREIvZWpiL3RlYW0vTGVhZ3VlQmVhbi5qYXZhCmluZGV4IDM4ZDM4MDYuLmZjZTkyZGUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi90ZWFtL0xlYWd1ZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9lamIvdGVhbS9MZWFndWVCZWFuLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIAogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0TGVhZ3VlSWQoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRMZWFndWVJZChTdHJpbmcgaWQpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXROYW1lKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7CiAKQEAgLTUwLDcgKzUwLDcgQEAKICAgICBwdWJsaWMgYWJzdHJhY3QgU2V0IGVqYlNlbGVjdFJlbW90ZVRlYW1zKExlYWd1ZSBsZWFndWUpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICAgICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgTG9jYWxUZWFtIGVqYlNlbGVjdFRlYW1CeUNpdHkoU3RyaW5nIGNpdHkpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKQEAgLTYwLDYzICs2MCw2MyBAQAogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZWpiU2VsZWN0VGVhbXNOYW1lQnlDaXR5KFN0cmluZyBjaXR5KQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IFNldCBlamJTZWxlY3RQbGF5ZXJzQnlMZWFndWUoTG9jYWxMZWFndWUgbGVhZ3VlKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGFic3RyYWN0IENvbGxlY3Rpb24gZWpiU2VsZWN0UmVtb3RlUGxheWVyc0J5TGVhZ3VlKExlYWd1ZSBsZWFndWUpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247Ci0gICAgICAgIAorCiAgICAgLy8gQnVzaW5lc3MgbWV0aG9kcwogCiAgICAgcHVibGljIFNldCBnZXRDaXRpZXNPZlRoaXNMZWFndWUoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKLSAgICAgICAgIAotICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gCisKKyAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9CiAgICAgICAgICAgICAgKHRlYW0uTG9jYWxMZWFndWUpY29udGV4dC5nZXRFSkJMb2NhbE9iamVjdCgpOwotICAgICAgICAgCi0gICAgICAgICByZXR1cm4gZWpiU2VsZWN0VGVhbXNDaXR5KGxlYWd1ZSk7IAorCisgICAgICAgICByZXR1cm4gZWpiU2VsZWN0VGVhbXNDaXR5KGxlYWd1ZSk7CiAgICAgfQogCiAKICAgICBwdWJsaWMgU2V0IGdldFJlbW90ZVRlYW1zT2ZUaGlzTGVhZ3VlKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICAgTGVhZ3VlIGxlYWd1ZSA9ICAodGVhbS5MZWFndWUpY29udGV4dC5nZXRFSkJPYmplY3QoKTsKLSAgICAgICAgIAotICAgICAgICAgcmV0dXJuIGVqYlNlbGVjdFJlbW90ZVRlYW1zKGxlYWd1ZSk7IAorCisgICAgICAgICByZXR1cm4gZWpiU2VsZWN0UmVtb3RlVGVhbXMobGVhZ3VlKTsKICAgICB9CiAKLSAgICAKKwogICAgIHB1YmxpYyBMb2NhbFRlYW0gZ2V0VGVhbUJ5Q2l0eShTdHJpbmcgY2l0eSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBlamJTZWxlY3RUZWFtQnlDaXR5KGNpdHkpOwogICAgIH0KIAogICAgIHB1YmxpYyBUZWFtIGdldFJlbW90ZVRlYW1CeUNpdHkoU3RyaW5nIGNpdHkpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICByZXR1cm4gZWpiU2VsZWN0UmVtb3RlVGVhbUJ5Q2l0eShjaXR5KTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1zTmFtZUJ5Q2l0eShTdHJpbmcgY2l0eSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBlamJTZWxlY3RUZWFtc05hbWVCeUNpdHkoY2l0eSk7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgU2V0IGdldFBsYXllcnNGcm9tTGVhZ3VlKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gKHRlYW0uTG9jYWxMZWFndWUpY29udGV4dC5nZXRFSkJMb2NhbE9iamVjdCgpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gZWpiU2VsZWN0UGxheWVyc0J5TGVhZ3VlKGxlYWd1ZSk7Ci0gICAgfSAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRSZW1vdGVQbGF5ZXJzRnJvbUxlYWd1ZSgpIHRocm93cyBGaW5kZXJFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIExlYWd1ZSBsZWFndWUgPSAodGVhbS5MZWFndWUpY29udGV4dC5nZXRFSkJPYmplY3QoKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGVqYlNlbGVjdFJlbW90ZVBsYXllcnNCeUxlYWd1ZShsZWFndWUpOwotICAgIH0gCi0gICAgICAgIAotICAgIAorICAgIH0KKworCiAgICAgcHVibGljIHZvaWQgYWRkVGVhbShMb2NhbFRlYW0gdGVhbSkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJUZWFtQmVhbiBhZGRUZWFtIik7CkBAIC0xNTAsMzIgKzE1MCwzMiBAQAogICAgICAgICBzZXRTcG9ydChzcG9ydCk7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHNwb3J0KQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsgfQogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGN0eCkgewogICAgICAgICBjb250ZXh0ID0gY3R4OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsKICAgICAgICAgY29udGV4dCA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiTGVhZ3VlQmVhbiBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiTGVhZ3VlQmVhbiBlamJMb2FkIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJMZWFndWVCZWFuIGVqYlN0b3JlIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgeyB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsgfQogCiB9IC8vIExlYWd1ZUJlYW4gY2xhc3MKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi90ZWFtL0xlYWd1ZUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi90ZWFtL0xlYWd1ZUhvbWUuamF2YQppbmRleCAyMmE3MzRhLi44YmMwNzgyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9lamIvdGVhbS9MZWFndWVIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckphdmEyREIvZWpiL3RlYW0vTGVhZ3VlSG9tZS5qYXZhCkBAIC0yNSwxNCArMjUsMTQgQEAKIAogICAgIHB1YmxpYyBMZWFndWUgY3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgc3BvcnQpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBMZWFndWUgZmluZEJ5UHJpbWFyeUtleSAoU3RyaW5nIGlkKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEFsbCgpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBMZWFndWUgZmluZEJ5TmFtZShTdHJpbmcgbmFtZSkKLSAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwkJCQkJCi0gICAgICAgIAorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi90ZWFtL0xvY2FsTGVhZ3VlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9lamIvdGVhbS9Mb2NhbExlYWd1ZS5qYXZhCmluZGV4IGYyZWIwNDYuLmExNDQ2MTcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi90ZWFtL0xvY2FsTGVhZ3VlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckphdmEyREIvZWpiL3RlYW0vTG9jYWxMZWFndWUuamF2YQpAQCAtMzMsNSArMzMsNSBAQAogICAgIHB1YmxpYyBMb2NhbFRlYW0gZ2V0VGVhbUJ5Q2l0eShTdHJpbmcgY2l0eSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1zTmFtZUJ5Q2l0eShTdHJpbmcgY2l0eSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKICAgICBwdWJsaWMgU2V0IGdldFBsYXllcnNGcm9tTGVhZ3VlKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckphdmEyREIvZWpiL3RlYW0vTG9jYWxMZWFndWVIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9lamIvdGVhbS9Mb2NhbExlYWd1ZUhvbWUuamF2YQppbmRleCBlYzE3NmRhLi5jMTlhZjc3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9lamIvdGVhbS9Mb2NhbExlYWd1ZUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9lamIvdGVhbS9Mb2NhbExlYWd1ZUhvbWUuamF2YQpAQCAtMjAsMTcgKzIwLDE3IEBACiBpbXBvcnQgamFrYXJ0YS5lamIuKjsKIAogcHVibGljIGludGVyZmFjZSBMb2NhbExlYWd1ZUhvbWUgZXh0ZW5kcyBFSkJMb2NhbEhvbWUgewotICAgIAorCiAgICAgcHVibGljIExvY2FsTGVhZ3VlIGNyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHNwb3J0KQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIExvY2FsTGVhZ3VlIGZpbmRCeVByaW1hcnlLZXkgKFN0cmluZyBpZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBMb2NhbExlYWd1ZSBmaW5kQnlOYW1lKFN0cmluZyBuYW1lKQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwkJCQkJCi0gICAgICAgIAorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9lamIvdGVhbS9Mb2NhbFBsYXllckhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi90ZWFtL0xvY2FsUGxheWVySG9tZS5qYXZhCmluZGV4IDkwNDU4ZTMuLjU3NzcwNzIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi90ZWFtL0xvY2FsUGxheWVySG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi90ZWFtL0xvY2FsUGxheWVySG9tZS5qYXZhCkBAIC0yMCw2MCArMjAsNjAgQEAKIGltcG9ydCBqYWthcnRhLmVqYi4qOwogCiBwdWJsaWMgaW50ZXJmYWNlIExvY2FsUGxheWVySG9tZSBleHRlbmRzIEVKQkxvY2FsSG9tZSB7Ci0gICAgCisKICAgICBwdWJsaWMgTG9jYWxQbGF5ZXIgY3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgcG9zaXRpb24sCiAgICAgICAgIGRvdWJsZSBzYWxhcnkpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgTG9jYWxQbGF5ZXIgZmluZEJ5UHJpbWFyeUtleSAoU3RyaW5nIGlkKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwotICAgIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBvc2l0aW9uKFN0cmluZyBwb3NpdGlvbikgCisKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQb3NpdGlvbihTdHJpbmcgcG9zaXRpb24pCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlIaWdoZXJTYWxhcnkoU3RyaW5nIG5hbWUpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVNhbGFyeVJhbmdlKGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlTYWxhcnlSYW5nZShkb3VibGUgbG93LCBkb3VibGUgaGlnaCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUxlYWd1ZShMb2NhbExlYWd1ZSBsZWFndWUpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUxlYWd1ZShMb2NhbExlYWd1ZSBsZWFndWUpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlTcG9ydChTdHJpbmcgc3BvcnQpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVNwb3J0KFN0cmluZyBzcG9ydCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUNpdHkoU3RyaW5nIGNpdHkpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUNpdHkoU3RyaW5nIGNpdHkpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEFsbCgpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kTm90T25UZWFtKCkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZE5vdE9uVGVhbSgpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQb3NpdGlvbkFuZE5hbWUoU3RyaW5nIHBvc2l0aW9uLCAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQb3NpdGlvbkFuZE5hbWUoU3RyaW5nIHBvc2l0aW9uLAogICAgICAgICBTdHJpbmcgbmFtZSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVRlc3QgKFN0cmluZyBwYXJtMSwgU3RyaW5nIHBhcm0yLCBTdHJpbmcgcGFybTMpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQb3NpdGlvbnNHb2Fsa2VlcGVyT3JEZWZlbmRlcigpCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247ICAgCQotICAgICAgICAKKyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKKwogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeU5hbWVFbmRpbmdXaXRoT04oKQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOyAgIAkKKyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeU51bGxOYW1lKCkKLSAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsgICAJCisgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlUZWFtKExvY2FsVGVhbSB0ZWFtKQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOyAgIAkgICAgICAgIAotICAgICAgICAKKyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKKwogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVNhbGFyYXlXaXRoQXJpdGhtZXRpY0Z1bmN0aW9uQUJTKGRvdWJsZSBzYWxhcmF5KQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOyAgICAgICAKKyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVNhbGFyYXlXaXRoQXJpdGhtZXRpY0Z1bmN0aW9uU1FSVChkb3VibGUgc2FsYXJheSkKLSAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsgICAgICAgCi0gICAgICAgIAorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9lamIvdGVhbS9Mb2NhbFRlYW0uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi90ZWFtL0xvY2FsVGVhbS5qYXZhCmluZGV4IDkxNGE0Y2IuLmY4N2Y1ZWUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi90ZWFtL0xvY2FsVGVhbS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi90ZWFtL0xvY2FsVGVhbS5qYXZhCkBAIC0zMSw4ICszMSw4IEBACiAgICAgcHVibGljIHZvaWQgYWRkUGxheWVyKExvY2FsUGxheWVyIHBsYXllcik7CiAgICAgcHVibGljIHZvaWQgZHJvcFBsYXllcihMb2NhbFBsYXllciBwbGF5ZXIpOwogICAgIHB1YmxpYyBkb3VibGUgZ2V0U2FsYXJ5T2ZQbGF5ZXIoU3RyaW5nIHBsYXllck5hbWUpOwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czEoKTsgCi0gICAgcHVibGljIFN0cmluZyBnZXRUZWFtTmFtZVdpdGhTdHJpbmdmdW5jdGlvblRlc3RzMigpOyAKLSAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1OYW1lV2l0aFN0cmluZ2Z1bmN0aW9uVGVzdHMzKCk7IAotICAgIAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czEoKTsKKyAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1OYW1lV2l0aFN0cmluZ2Z1bmN0aW9uVGVzdHMyKCk7CisgICAgcHVibGljIFN0cmluZyBnZXRUZWFtTmFtZVdpdGhTdHJpbmdmdW5jdGlvblRlc3RzMygpOworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9lamIvdGVhbS9Mb2NhbFRlYW1Ib21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9lamIvdGVhbS9Mb2NhbFRlYW1Ib21lLmphdmEKaW5kZXggODg0NjU3ZS4uYzllMmExZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckphdmEyREIvZWpiL3RlYW0vTG9jYWxUZWFtSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi90ZWFtL0xvY2FsVGVhbUhvbWUuamF2YQpAQCAtMjIsMTcgKzIyLDE3IEBACiBpbXBvcnQgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uOwogCiBwdWJsaWMgaW50ZXJmYWNlIExvY2FsVGVhbUhvbWUgZXh0ZW5kcyBFSkJMb2NhbEhvbWUgewotICAgIAorCiAgICAgcHVibGljIExvY2FsVGVhbSBjcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBjaXR5KQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIExvY2FsVGVhbSBmaW5kQnlQcmltYXJ5S2V5IChTdHJpbmcgaWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEFsbCgpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247Ci0gICAgCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UGxheWVyQW5kTGVhZ3VlKExvY2FsUGxheWVyIHBsYXllciwgCisKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQbGF5ZXJBbmRMZWFndWUoTG9jYWxQbGF5ZXIgcGxheWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9lamIvdGVhbS9QbGF5ZXJCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9lamIvdGVhbS9QbGF5ZXJCZWFuLmphdmEKaW5kZXggNDRiMGE4ZS4uN2NkMjg5MCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckphdmEyREIvZWpiL3RlYW0vUGxheWVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi90ZWFtL1BsYXllckJlYW4uamF2YQpAQCAtMjksNyArMjksNyBAQAogCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQbGF5ZXJJZCgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFBsYXllcklkKFN0cmluZyBpZCk7Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldE5hbWUoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKIApAQCAtNTIsMjAgKzUyLDIwIEBACiAgICAgcHVibGljIGFic3RyYWN0IENvbGxlY3Rpb24gZWpiU2VsZWN0U3BvcnRzKExvY2FsUGxheWVyIHBsYXllcikKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgICAgICAgICAgICAgIAotICAgICAgICAKKworCiAgICAgLy8gQnVzaW5lc3MgbWV0aG9kcwogCiAgICAgcHVibGljIENvbGxlY3Rpb24gZ2V0TGVhZ3VlcygpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewogCi0gICAgICAgICBMb2NhbFBsYXllciBwbGF5ZXIgPSAKKyAgICAgICAgIExvY2FsUGxheWVyIHBsYXllciA9CiAgICAgICAgICAgICAgKHRlYW0uTG9jYWxQbGF5ZXIpY29udGV4dC5nZXRFSkJMb2NhbE9iamVjdCgpOwogICAgICAgICAgcmV0dXJuIGVqYlNlbGVjdExlYWd1ZXMocGxheWVyKTsKICAgICB9CiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRTcG9ydHMoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKIAotICAgICAgICAgTG9jYWxQbGF5ZXIgcGxheWVyID0gCisgICAgICAgICBMb2NhbFBsYXllciBwbGF5ZXIgPQogICAgICAgICAgICAgICh0ZWFtLkxvY2FsUGxheWVyKWNvbnRleHQuZ2V0RUpCTG9jYWxPYmplY3QoKTsKICAgICAgICAgIHJldHVybiBlamJTZWxlY3RTcG9ydHMocGxheWVyKTsKICAgICB9CkBAIC04MiwzMiArODIsMzIgQEAKICAgICAgICAgc2V0U2FsYXJ5KHNhbGFyeSk7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHBvc2l0aW9uLAogICAgICAgICBkb3VibGUgc2FsYXJ5KSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsgfQogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGN0eCkgewogICAgICAgICBjb250ZXh0ID0gY3R4OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsKICAgICAgICAgY29udGV4dCA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUGxheWVyQmVhbiBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUGxheWVyQmVhbiBlamJMb2FkIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJQbGF5ZXJCZWFuIGVqYlN0b3JlIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgeyB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsgfQogCiB9IC8vIFBsYXllckJlYW4gY2xhc3MKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi90ZWFtL1BsYXllckhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi90ZWFtL1BsYXllckhvbWUuamF2YQppbmRleCBkZWQ5NzI0Li44NDU5ODUyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9lamIvdGVhbS9QbGF5ZXJIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckphdmEyREIvZWpiL3RlYW0vUGxheWVySG9tZS5qYXZhCkBAIC0yNiwzNSArMjYsMzUgQEAKICAgICBwdWJsaWMgUGxheWVyIGNyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHBvc2l0aW9uLAogICAgICAgICBkb3VibGUgc2FsYXJ5KQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgUGxheWVyIGZpbmRCeVByaW1hcnlLZXkgKFN0cmluZyBpZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwotICAgIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBvc2l0aW9uKFN0cmluZyBwb3NpdGlvbikgCisKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQb3NpdGlvbihTdHJpbmcgcG9zaXRpb24pCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5SGlnaGVyU2FsYXJ5KFN0cmluZyBuYW1lKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlTYWxhcnlSYW5nZShkb3VibGUgbG93LCBkb3VibGUgaGlnaCkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U2FsYXJ5UmFuZ2UoZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAotLy8gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5TGVhZ3VlKExlYWd1ZSBsZWFndWUpIAorLy8gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5TGVhZ3VlKExlYWd1ZSBsZWFndWUpCiAvLyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U3BvcnQoU3RyaW5nIHNwb3J0KSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlTcG9ydChTdHJpbmcgc3BvcnQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUNpdHkoU3RyaW5nIGNpdHkpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUNpdHkoU3RyaW5nIGNpdHkpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZE5vdE9uVGVhbSgpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmROb3RPblRlYW0oKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQb3NpdGlvbkFuZE5hbWUoU3RyaW5nIHBvc2l0aW9uLCAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQb3NpdGlvbkFuZE5hbWUoU3RyaW5nIHBvc2l0aW9uLAogICAgICAgICBTdHJpbmcgbmFtZSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5VGVzdCAoU3RyaW5nIHBhcm0xLCBTdHJpbmcgcGFybTIsIFN0cmluZyBwYXJtMykKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi90ZWFtL1RlYW1CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9lamIvdGVhbS9UZWFtQmVhbi5qYXZhCmluZGV4IDc0ZmE0ZDcuLmI4NTJlYzMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi90ZWFtL1RlYW1CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckphdmEyREIvZWpiL3RlYW0vVGVhbUJlYW4uamF2YQpAQCAtMzAsNyArMzAsNyBAQAogCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRUZWFtSWQoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRUZWFtSWQoU3RyaW5nIGlkKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0TmFtZSgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOwogCkBAIC0zOSw3ICszOSw3IEBACiAKIAogICAgIC8vIEFjY2VzcyBtZXRob2RzIGZvciByZWxhdGlvbnNoaXAgZmllbGRzCi0gICAgICAgICAgICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgQ29sbGVjdGlvbiBnZXRQbGF5ZXJzKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0UGxheWVycyhDb2xsZWN0aW9uIHBsYXllcnMpOwogCkBAIC01Miw1NSArNTIsNTUgQEAKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZWpiU2VsZWN0QnlOYW1lV2l0aENPTkNBVChTdHJpbmcgcGFydDEsIFN0cmluZyBwYXJ0MikKLSAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsJCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CisKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGVqYlNlbGVjdEJ5TmFtZVN1YnN0cmluZyhTdHJpbmcgc3Vic3RyaW5nKQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwkKKyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZWpiU2VsZWN0TmFtZUxvY2F0ZShTdHJpbmcgc3Vic3RyaW5nKQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwkKKyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgLy8gQnVzaW5lc3MgbWV0aG9kcwogCiAgICAgcHVibGljIGRvdWJsZSBnZXRTYWxhcnlPZlBsYXllcihTdHJpbmcgcGxheWVyTmFtZSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7CiAgICAgICAgIExvY2FsVGVhbSB0ZWFtID0gKHRlYW0uTG9jYWxUZWFtKWNvbnRleHQuZ2V0RUpCTG9jYWxPYmplY3QoKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGVqYlNlbGVjdFNhbGFyeU9mUGxheWVySW5UZWFtKHRlYW0sIHBsYXllck5hbWUpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgcHVibGljIFN0cmluZyBnZXRUZWFtTmFtZVdpdGhTdHJpbmdmdW5jdGlvblRlc3RzMSgpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBTdHJpbmdCdWZmZXIgb3V0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogLy8gICAgICAgIExvY2FsVGVhbSB0ZWFtID0gKHRlYW0uTG9jYWxUZWFtKSBjb250ZXh0LmdldEVKQkxvY2FsT2JqZWN0KCk7CiAvLyAgICAgICAgb3V0LmFwcGVuZCgiPEJSPk5hbWUgb2YgVGVhbSA6ICIgKyB0ZWFtLmdldE5hbWUoKSk7Ci0gICAgICAgIG91dC5hcHBlbmQoIjxCUj4iKTsJCQorICAgICAgICBvdXQuYXBwZW5kKCI8QlI+Iik7CiAgICAgICAgIG91dC5hcHBlbmQoZWpiU2VsZWN0QnlOYW1lV2l0aENPTkNBVCgiQ3IiLCAib3dzIikpOwogICAgICAgICBvdXQuYXBwZW5kKCI8QlI+Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBvdXQudG9TdHJpbmcoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1OYW1lV2l0aFN0cmluZ2Z1bmN0aW9uVGVzdHMyKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIFN0cmluZ0J1ZmZlciBvdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgIG91dC5hcHBlbmQoZWpiU2VsZWN0QnlOYW1lU3Vic3RyaW5nKCJhYWFhQ3Jvd3NhYWFhYSIpKTsKICAgICAgICAgb3V0LmFwcGVuZCgiPEJSPiIpOwogCiAgICAgICAgIHJldHVybiBvdXQudG9TdHJpbmcoKTsKICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRUZWFtTmFtZVdpdGhTdHJpbmdmdW5jdGlvblRlc3RzMygpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBTdHJpbmdCdWZmZXIgb3V0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICAgICBvdXQuYXBwZW5kKGVqYlNlbGVjdE5hbWVMb2NhdGUoInJvdyIpKTsKICAgICAgICAgb3V0LmFwcGVuZCgiPEJSPiIpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gb3V0LnRvU3RyaW5nKCk7CiAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldENvcHlPZlBsYXllcnMoKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlRlYW1CZWFuIGdldENvcHlPZlBsYXllcnMiKTsKQEAgLTE1MSwzMCArMTUxLDMwIEBACiAgICAgICAgIHNldENpdHkoY2l0eSk7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGNpdHkpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24geyB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgY3R4KSB7CiAgICAgICAgIGNvbnRleHQgPSBjdHg7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgewogICAgICAgICBjb250ZXh0ID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJUZWFtQmVhbiBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiVGVhbUJlYW4gZWpiTG9hZCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiVGVhbUJlYW4gZWpiU3RvcmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7IH0KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9lamIvdGVhbS9UZWFtSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckphdmEyREIvZWpiL3RlYW0vVGVhbUhvbWUuamF2YQppbmRleCBmZTEzMDQ0Li5iY2ZlNDM5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9lamIvdGVhbS9UZWFtSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi90ZWFtL1RlYW1Ib21lLmphdmEKQEAgLTI1LDE0ICsyNSwxNCBAQAogCiAgICAgcHVibGljIFRlYW0gY3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgY2l0eSkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIFRlYW0gZmluZEJ5UHJpbWFyeUtleSAoU3RyaW5nIGlkKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEFsbCgpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQbGF5ZXJBbmRMZWFndWVWaWFSZW1vdGUoUGxheWVyIHBsYXllciwgCisKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQbGF5ZXJBbmRMZWFndWVWaWFSZW1vdGUoUGxheWVyIHBsYXllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVhZ3VlIGxlYWd1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9lamIvdXRpbC9QbGF5ZXJEZXRhaWxzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9lamIvdXRpbC9QbGF5ZXJEZXRhaWxzLmphdmEKaW5kZXggODEwNDFjMi4uNDc2NWJjZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlckphdmEyREIvZWpiL3V0aWwvUGxheWVyRGV0YWlscy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL2VqYi91dGlsL1BsYXllckRldGFpbHMuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIHBvc2l0aW9uOwogICAgIHByaXZhdGUgZG91YmxlIHNhbGFyeTsKIAotICAgIHB1YmxpYyBQbGF5ZXJEZXRhaWxzIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgcG9zaXRpb24sIAorICAgIHB1YmxpYyBQbGF5ZXJEZXRhaWxzIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgcG9zaXRpb24sCiAgICAgICAgIGRvdWJsZSBzYWxhcnkpIHsKIAogICAgICAgICB0aGlzLmlkID0gaWQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVySmF2YTJEQi9zZXJ2bGV0L1Jvc3RlclNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL3NlcnZsZXQvUm9zdGVyU2VydmxldC5qYXZhCmluZGV4IDgxYWRlMDQuLjZhM2M5OWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL3NlcnZsZXQvUm9zdGVyU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJKYXZhMkRCL3NlcnZsZXQvUm9zdGVyU2VydmxldC5qYXZhCkBAIC04NCw3ICs4NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvc3RlckhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgIFJvc3RlciBteVJvc3RlciA9IGhvbWUuY3JlYXRlKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAvLyBkZWxldGluZyBhbGwgZXhpc2l0aW5nIERCLWVudHJpZXMKICAgICAgICAgICAgbXlSb3N0ZXIuY2xlYW5VcCgpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDI2Yzc4Y2UuLmMxZWM4OTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMyArMTUsMTMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InJvc3RlclZDIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogCi08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJSb3N0ZXJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iUm9zdGVyQ2xpZW50Ii8+CiAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KQEAgLTM0LDEwICszNCwxMCBAQAogCiA8cHJvcGVydHkgbmFtZT0ic3VuLWNtcC1tYXBwaW5ncy10ZWFtLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWNtcC1tYXBwaW5ncy10ZWFtLnhtbCIvPgogCi08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogCkBAIC00Nyw3ICs0Nyw3IEBACiA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0idHJ1ZSIvPgogCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIKLQl2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIgotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9idWlsZC54bWwKaW5kZXggNTBmYzA1Yy4uOWM4Y2Q4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvYnVpbGQueG1sCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICA8ZGVsZXRlIGZpbGU9IiR7c3VuLWNtcC1tYXBwaW5ncy54bWx9Ii8+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDQwICs0Niw0MCBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLXRlYW0tamFyIiA+CiAKLSAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4gCi0gICAKKyAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4KKwogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRic2NoZW1hIiB2YWx1ZT0iJHtiYXNlZGlyfS9lamIvdGVhbS9Sb3N0ZXJTY2hlbWFWQy5kYnNjaGVtYSIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSJ0ZWFtL0xvY2FsKi5jbGFzcywgdGVhbS9MZWFndWUqLmNsYXNzLCB0ZWFtL1BsYXllciouY2xhc3MsIHRlYW0vVGVhbSouY2xhc3MsIHV0aWwvKi5jbGFzcywgUm9zdGVyU2NoZW1hVkMuZGJzY2hlbWEiIC8+CiAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSIke2VqYi1qYXItdGVhbS54bWx9IiAvPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSIke3N1bi1lamItamFyLXRlYW0ueG1sfSIgLz4KLQkgIDxwYXJhbSBuYW1lPSJzdW4tY21wLW1hcHBpbmdzLnhtbCIgdmFsdWU9IiR7c3VuLWNtcC1tYXBwaW5ncy10ZWFtLnhtbH0iIC8+CisgICAgICA8cGFyYW0gbmFtZT0ic3VuLWNtcC1tYXBwaW5ncy54bWwiIHZhbHVlPSIke3N1bi1jbXAtbWFwcGluZ3MtdGVhbS54bWx9IiAvPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgLz4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS90ZWFtLWVqYi5qYXIiIC8+Ci0gIAorCiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icGFja2FnZS1yb3N0ZXItamFyIiA+CiAKLSAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4gCi0gICAKLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWpiamFyLWNvbW1vbiI+CisKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9InRlYW0vTG9jYWwqLmNsYXNzLCB0ZWFtL0xlYWd1ZS5jbGFzcywgdGVhbS9MZWFndWVIb21lLmNsYXNzLCB0ZWFtL1BsYXllci5jbGFzcywgdGVhbS9QbGF5ZXJIb21lLmNsYXNzLCB0ZWFtL1RlYW0uY2xhc3MsIHRlYW0vVGVhbUhvbWUuY2xhc3MsLHV0aWwvKi5jbGFzcyxyb3N0ZXIvKi5jbGFzcyIgLz4KIAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9IiR7ZWpiLWphci1yb3N0ZXIueG1sfSIgLz4KICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iJHtzdW4tZWpiLWphci1yb3N0ZXIueG1sfSIgLz4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIC8+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vcm9zdGVyLWVqYi5qYXIiIC8+Ci0gIAorCiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApAQCAtODcsMTcgKzg3LDE3IEBACiAKICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InRydWUiLz4KLQkgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIgorICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9Sb3N0ZXJTZXJ2bGV0LmNsYXNzIiAvPgotCTwvYW50Y2FsbD4KLSAKKyAgICA8L2FudGNhbGw+CisKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icGFja2FnZS1hcHBjbGllbnQiID4KICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogCiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovUm9zdGVyQ2xpZW50LmNsYXNzLCAqKi9Sb3N0ZXIuY2xhc3MsICoqL1Jvc3RlckhvbWUuY2xhc3MsIHV0aWwvKi5jbGFzcyIgLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICAgICAgICAgIHZhbHVlPSIke2FwcGxpY2F0aW9uLWNsaWVudC54bWx9IiAvPgpAQCAtMTE4LDI0ICsxMTgsMjQgQEAKIAogICAgICAgPHByb3BlcnR5IG5hbWU9IlRFTVBESVIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vVEVNUERJUiIgLz4KIAotICAgICAgIAk8bWtkaXIgZGlyPSIke1RFTVBESVJ9L3NyYyIgLz4KKyAgICAgICAgICAgPG1rZGlyIGRpcj0iJHtURU1QRElSfS9zcmMiIC8+CiAgICAgICAgIDxjb3B5IHRvZGlyPSIke1RFTVBESVJ9L3NyYyIgPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Jhc2VkaXJ9L2VqYiIgLz4KICAgICAgICAgPC9jb3B5PgotICAgICAgIAk8bWtkaXIgZGlyPSIke1RFTVBESVJ9L3NyYy9jbGllbnQiIC8+CisgICAgICAgICAgIDxta2RpciBkaXI9IiR7VEVNUERJUn0vc3JjL2NsaWVudCIgLz4KICAgICAgICAgPGNvcHkgdG9kaXI9IiR7VEVNUERJUn0vc3JjL2NsaWVudCIgZmlsZT0iJHtiYXNlZGlyfS9jbGllbnQvUm9zdGVyQ2xpZW50LmphdmEiIC8+CiAgICAgICAgIDxjb3B5IHRvZGlyPSIke1RFTVBESVJ9L3NyYy9jbGllbnQiIGZpbGU9IiR7YmFzZWRpcn0vc2VydmxldC9Sb3N0ZXJTZXJ2bGV0LmphdmEiIC8+CiAKLQk8Y29weSBmaWxlPSIke2Jhc2VkaXJ9L2Rlc2NyaXB0b3IvSU5ERVguTElTVCIgdG9kaXI9IiR7VEVNUERJUn0vTUVUQS1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgIDxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vZGVzY3JpcHRvci9JTkRFWC5MSVNUIiB0b2Rpcj0iJHtURU1QRElSfS9NRVRBLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAKICAgICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+Ci0JPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgotCSAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KLQkgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+Ci0JPC9maWxlc2V0PgorICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KKyAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CisgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgorICAgIDwvZmlsZXNldD4KICAgICAgICAgPGZpbGVzZXQgZGlyPSIke1RFTVBESVJ9IiAvPgogCi0JPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0vbGliIiBpbmNsdWRlcz0icmVwb3J0ZXIuamFyIi8+CisgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0vbGliIiBpbmNsdWRlcz0icmVwb3J0ZXIuamFyIi8+CiAgICAgICA8L2Vhcj4KICAgICA8L3RhcmdldD4KIApAQCAtMTQ4LDE2ICsxNDgsMTYgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLXdlYmNsaWVudC13YXIiIC8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnQiIC8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lYXIiIC8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0iJHtiYXNlZGlyfS9zcWwvUm9zdGVyVkNBcHBfZGVyYnkuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIj4KLQkgICAgICAgICA8cGFyYW0gbmFtZT0iZGVwbG95ZWQuYXBwIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIi8+Ci0JPC9hbnRjYWxsPgorICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXBsb3llZC5hcHAiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTcxLDI1ICsxNzEsMjUgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iJHtiYXNlZGlyfS8uLi9jb21tb24vZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIj4KLSAgICAgICAJICA8cGFyYW0gbmFtZT0iZGVwbG95ZWRhcHAubmFtZSIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwIi8+CisgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRlcGxveWVkYXBwLm5hbWUiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcCIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSIke2Jhc2VkaXJ9L3NxbC9kcm9wX1Jvc3RlclZDQXBwX2RlcmJ5LnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBhbGwKICAgICAgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2NsaWVudC9Sb3N0ZXJDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9jbGllbnQvUm9zdGVyQ2xpZW50LmphdmEKaW5kZXggZjRjYWI1Yy4uNmEzYWNmYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2NsaWVudC9Sb3N0ZXJDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvY2xpZW50L1Jvc3RlckNsaWVudC5qYXZhCkBAIC0yOCwxNiArMjgsMTYgQEAKIHB1YmxpYyBjbGFzcyBSb3N0ZXJDbGllbnQgewogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQotCW5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKKyAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICB0cnkgewotCSAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlJvc3RlckFwcEV4dCIpOworICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlJvc3RlckFwcEV4dCIpOwogICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVSb3N0ZXJFeHQiKTsKIAotICAgICAgICAgICBSb3N0ZXJIb21lIGhvbWUgPSAKLSAgICAgICAgICAgICAgIChSb3N0ZXJIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICBSb3N0ZXJIb21lIGhvbWUgPQorICAgICAgICAgICAgICAgKFJvc3RlckhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUm9zdGVySG9tZS5jbGFzcyk7CiAKICAgICAgICAgICAgUm9zdGVyIG15Um9zdGVyID0gaG9tZS5jcmVhdGUoKTsKQEAgLTQ3LDkgKzQ3LDkgQEAKIAogICAgICAgICAgICAvLyBnZXRNb3JlSW5mbyhteVJvc3Rlcik7CiAKLQkgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IFJvc3RlckFwcEV4dCIsIHN0YXQuUEFTUyk7Ci0JICAgc3RhdC5wcmludFN1bW1hcnkoIlJvc3RlckFwcEV4dCIpOwotCSAgIFN5c3RlbS5leGl0KDApOworICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgUm9zdGVyQXBwRXh0Iiwgc3RhdC5QQVNTKTsKKyAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiUm9zdGVyQXBwRXh0Iik7CisgICAgICAgU3lzdGVtLmV4aXQoMCk7CiAKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gZXhjZXB0aW9uOiIpOwpAQCAtODUsNyArODUsNyBAQAogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiBleGNlcHRpb246Iik7CiAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAJICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBSb3N0ZXJBcHBFeHQiLCBzdGF0LkZBSUwpOworICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBSb3N0ZXJBcHBFeHQiLCBzdGF0LkZBSUwpOwogICAgICAgIH0KIAogICAgIH0gLy8gZ2V0U29tZUluZm8KQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0UGxheWVyc0J5UG9zaXRpb24oImRlZmVuZGVyIik7CiAgICAgICAgICAgIHBsYXllckxpc3QgPSBteVJvc3Rlci5nZXRBbGxQbGF5ZXJzKCk7CiAgICAgICAgICAgIHBsYXllckxpc3QgPSBteVJvc3Rlci5nZXRQbGF5ZXJzTm90T25UZWFtKCk7Ci0gICAgICAgICAgIHBsYXllckxpc3QgPSBteVJvc3Rlci5nZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUoInBvd2VyIGZvcndhcmQiLCAKKyAgICAgICAgICAgcGxheWVyTGlzdCA9IG15Um9zdGVyLmdldFBsYXllcnNCeVBvc2l0aW9uQW5kTmFtZSgicG93ZXIgZm9yd2FyZCIsCiAgICAgICAgICAgICAgICAiSmFjayBQYXR0ZXJzb24iKTsKICAgICAgICAgICAgcGxheWVyTGlzdCA9IG15Um9zdGVyLmdldFBsYXllcnNCeUNpdHkoIlRydWNrZWUiKTsKICAgICAgICAgICAgcGxheWVyTGlzdCA9IG15Um9zdGVyLmdldFBsYXllcnNCeVNwb3J0KCJTb2NjZXIiKTsKQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiBleGNlcHRpb246Iik7CiAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgCSAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgUm9zdGVyQXBwRXh0Iiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IFJvc3RlckFwcEV4dCIsIHN0YXQuRkFJTCk7CiAgICAgICAgfQogCiAgICAgfSAvLyBnZXRNb3JlSW5mbwpAQCAtMTc1LDcgKzE3NSw3IEBACiAKICAgICAgICAgICAgbXlSb3N0ZXIuY3JlYXRlVGVhbUluTGVhZ3VlKG5ldyBUZWFtRGV0YWlscygKICAgICAgICAgICAgICAgIlQyIiwgIkdvcGhlcnMiLCAiTWFudGVjYSIpLCAiTDEiKTsKLSAgICAgICAgICAgCisKICAgICAgICAgICAgbXlSb3N0ZXIuY3JlYXRlVGVhbUluTGVhZ3VlKG5ldyBUZWFtRGV0YWlscygKICAgICAgICAgICAgICAgIlQzIiwgIkRlZXIiLCAiQm9kaWUiKSwgIkwyIik7CiAKQEAgLTI5OSw3ICsyOTksNyBAQAogCiAgICAgICAgICAgIG15Um9zdGVyLmNyZWF0ZVBsYXllcihuZXcgUGxheWVyRGV0YWlscygKICAgICAgICAgICAgICAgIlAyNiIsICJIb2JpZSBKYWNrc29uIiwgInBpdGNoZXIiLCA1ODIuMDApKTsKLSAgICAgICAgICAKKwogICAgICAgICAgICBteVJvc3Rlci5jcmVhdGVQbGF5ZXIobmV3IFBsYXllckRldGFpbHMoCiAgICAgICAgICAgICAgICJQMjciLCAiTWVsaW5kYSBLZW5kYWxsIiwgImNhdGNoZXIiLCA2NzcuMDApKTsKIApAQCAtMzEzLDcgKzMxMyw3IEBACiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIGV4Y2VwdGlvbjoiKTsKICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBSb3N0ZXJBcHBFeHQiLCBzdGF0LkZBSUwpOworICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgUm9zdGVyQXBwRXh0Iiwgc3RhdC5GQUlMKTsKICAgICAgICB9CiAKICAgICB9IC8vIGluc2VydEluZm8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9kZXNjcmlwdG9yL2VqYi1qYXItdGVhbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZGVzY3JpcHRvci9lamItamFyLXRlYW0ueG1sCmluZGV4IDcwNGM4MDIuLjg1NmJiYjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9kZXNjcmlwdG9yL2VqYi1qYXItdGVhbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2Rlc2NyaXB0b3IvZWpiLWphci10ZWFtLnhtbApAQCAtMjUsNyArMjUsNyBAQAogICAgICAgPGRpc3BsYXktbmFtZT5MZWFndWVFSkI8L2Rpc3BsYXktbmFtZT4KICAgICAgIDxlamItbmFtZT5MZWFndWVFSkI8L2VqYi1uYW1lPgogICAgICAgPGhvbWU+dGVhbS5MZWFndWVIb21lPC9ob21lPgotICAgICAgPHJlbW90ZT50ZWFtLkxlYWd1ZTwvcmVtb3RlPiAgICAgIAorICAgICAgPHJlbW90ZT50ZWFtLkxlYWd1ZTwvcmVtb3RlPgogICAgICAgPGxvY2FsLWhvbWU+dGVhbS5Mb2NhbExlYWd1ZUhvbWU8L2xvY2FsLWhvbWU+CiAgICAgICA8bG9jYWw+dGVhbS5Mb2NhbExlYWd1ZTwvbG9jYWw+CiAgICAgICA8ZWpiLWNsYXNzPnRlYW0uTGVhZ3VlQmVhbjwvZWpiLWNsYXNzPgpAQCAtMTQzLDcgKzE0Myw3IEBACiAgICAgICAgIDwvcXVlcnktbWV0aG9kPgogICAgICAgICA8cmVzdWx0LXR5cGUtbWFwcGluZz5SZW1vdGU8L3Jlc3VsdC10eXBlLW1hcHBpbmc+CiAgICAgICAgIDxlamItcWw+c2VsZWN0IE9iamVjdChwKSBmcm9tIExlYWd1ZSBsLCBpbihsLnRlYW1zKSBhcyB0LCBpbih0LnBsYXllcnMpIHAgd2hlcmUgbCA9ID8xPC9lamItcWw+Ci0gICAgICA8L3F1ZXJ5PiAgICAgIAorICAgICAgPC9xdWVyeT4KICAgICA8L2VudGl0eT4KICAgICA8ZW50aXR5PgogICAgICAgPGRpc3BsYXktbmFtZT5UZWFtRUpCPC9kaXNwbGF5LW5hbWU+CkBAIC0yNDYsNyArMjQ2LDcgQEAKICAgICAgICAgICA8L21ldGhvZC1wYXJhbXM+CiAgICAgICAgIDwvcXVlcnktbWV0aG9kPgogICAgICAgICA8ZWpiLXFsPnNlbGVjdCBkaXN0aW5jdCB0Lm5hbWUgZnJvbSBUZWFtIHQgd2hlcmUgTE9DQVRFKD8xLCB0Lm5hbWUpICZndDsgMCBBTkQgTE9DQVRFKD8xLCB0Lm5hbWUpICZsdDsgTEVOR1RIKHQubmFtZSk8L2VqYi1xbD4KLSAgICAgIDwvcXVlcnk+ICAgICAgCisgICAgICA8L3F1ZXJ5PgogICAgIDwvZW50aXR5PgogICAgIDxlbnRpdHk+CiAgICAgICA8ZGlzcGxheS1uYW1lPlBsYXllckVKQjwvZGlzcGxheS1uYW1lPgpAQCAtMjg4LDcgKzI4OCw3IEBACiAgICAgICAgICAgPG1ldGhvZC1uYW1lPmZpbmROb3RPblRlYW08L21ldGhvZC1uYW1lPgogICAgICAgICAgIDxtZXRob2QtcGFyYW1zIC8+CiAgICAgICAgIDwvcXVlcnktbWV0aG9kPgotICAgICAgICA8ZWpiLXFsPnNlbGVjdCBvYmplY3QocCkgZnJvbSBQbGF5ZXIgcCAKKyAgICAgICAgPGVqYi1xbD5zZWxlY3Qgb2JqZWN0KHApIGZyb20gUGxheWVyIHAKIHdoZXJlIHAudGVhbXMgaXMgZW1wdHk8L2VqYi1xbD4KICAgICAgIDwvcXVlcnk+CiAgICAgICA8cXVlcnk+CkBAIC00NzQsNyArNDc0LDcgQEAKICAgICAgICAgICA8L21ldGhvZC1wYXJhbXM+CiAgICAgICAgIDwvcXVlcnktbWV0aG9kPgogICAgICAgICA8ZWpiLXFsPnNlbGVjdCBvYmplY3QocCkgZnJvbSBQbGF5ZXIgcCB3aGVyZSBwLnNhbGFyeSA9IFNRUlQoPzEpPC9lamItcWw+Ci0gICAgICA8L3F1ZXJ5PiAgICAgIAorICAgICAgPC9xdWVyeT4KICAgICA8L2VudGl0eT4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgogICA8cmVsYXRpb25zaGlwcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9lamIvcm9zdGVyL1Jvc3Rlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2VqYi9yb3N0ZXIvUm9zdGVyLmphdmEKaW5kZXggNjkyYTE4NS4uMjc5YWFiNyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2VqYi9yb3N0ZXIvUm9zdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2VqYi9yb3N0ZXIvUm9zdGVyLmphdmEKQEAgLTI3LDU1ICsyNyw1NSBAQAogaW1wb3J0IGphdmEudXRpbC5TZXQ7CiAKIHB1YmxpYyBpbnRlcmZhY2UgUm9zdGVyIGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAKKwogICAgIC8vIFBsYXllcnMKIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVBsYXllcihQbGF5ZXJEZXRhaWxzIGRldGFpbHMpIAorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVBsYXllcihQbGF5ZXJEZXRhaWxzIGRldGFpbHMpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgdm9pZCBhZGRQbGF5ZXIoU3RyaW5nIHBsYXllcklkLCBTdHJpbmcgdGVhbUlkKSAKKyAgICBwdWJsaWMgdm9pZCBhZGRQbGF5ZXIoU3RyaW5nIHBsYXllcklkLCBTdHJpbmcgdGVhbUlkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyB2b2lkIGRyb3BQbGF5ZXIoU3RyaW5nIHBsYXllcklkLCBTdHJpbmcgdGVhbUlkKSAKKyAgICBwdWJsaWMgdm9pZCBkcm9wUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBQbGF5ZXJEZXRhaWxzIGdldFBsYXllcihTdHJpbmcgcGxheWVySWQpIAorICAgIHB1YmxpYyBQbGF5ZXJEZXRhaWxzIGdldFBsYXllcihTdHJpbmcgcGxheWVySWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNPZlRlYW0oU3RyaW5nIHRlYW1JZCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtKFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNPZlRlYW1Db3B5KFN0cmluZyB0ZWFtSWQpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbUNvcHkoU3RyaW5nIHRlYW1JZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5UG9zaXRpb24oU3RyaW5nIHBvc2l0aW9uKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVBvc2l0aW9uKFN0cmluZyBwb3NpdGlvbikKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5SGlnaGVyU2FsYXJ5KFN0cmluZyBuYW1lKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U2FsYXJ5UmFuZ2UoZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U2FsYXJ5UmFuZ2UoZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUxlYWd1ZUlkKFN0cmluZyBsZWFndWVJZCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlMZWFndWVJZChTdHJpbmcgbGVhZ3VlSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVNwb3J0KFN0cmluZyBzcG9ydCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTcG9ydChTdHJpbmcgc3BvcnQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUNpdHkoU3RyaW5nIGNpdHkpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5Q2l0eShTdHJpbmcgY2l0eSkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0QWxsUGxheWVycygpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0QWxsUGxheWVycygpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNOb3RPblRlYW0oKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNOb3RPblRlYW0oKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUoU3RyaW5nIHBvc2l0aW9uLCAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVBvc2l0aW9uQW5kTmFtZShTdHJpbmcgcG9zaXRpb24sCiAgICAgICAgIFN0cmluZyBuYW1lKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRMZWFndWVzT2ZQbGF5ZXIoU3RyaW5nIHBsYXllcklkKQpAQCAtODMsODQgKzgzLDg0IEBACiAKICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFNwb3J0c09mUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAgICAgCisKICAgICBwdWJsaWMgZG91YmxlIGdldFNhbGFyeU9mUGxheWVyRnJvbVRlYW0oU3RyaW5nIHRlYW1JRCwgU3RyaW5nIHBsYXllck5hbWUpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNPZkxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247ICAgCi0gICAgICAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworCiAKICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNXaXRoUG9zaXRpb25zR29hbGtlZXBlck9yRGVmZW5kZXIoKQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOyAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aE5hbWVFbmRpbmdXaXRoT04oKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNXaXRoTmFtZUVuZGluZ1dpdGhPTigpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNXaXRoTnVsbE5hbWUoKQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOyAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aFRlYW0oU3RyaW5nIHRlYW1JZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAgICAgCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nQUJTKGRvdWJsZSBzYWxhcnkpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247IAogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nU1FSVChkb3VibGUgc2FsYXJ5KSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNXaXRoU2FsYXJ5VXNpbmdBQlMoZG91YmxlIHNhbGFyeSkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKLSAgICAgICAgICAgCisKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNXaXRoU2FsYXJ5VXNpbmdTUVJUKGRvdWJsZSBzYWxhcnkpCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisKKwogICAgIC8vIFRlYW1zCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFRlYW1zT2ZMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFRlYW1zT2ZMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIHZvaWQgY3JlYXRlVGVhbUluTGVhZ3VlKFRlYW1EZXRhaWxzIGRldGFpbHMsIFN0cmluZyBsZWFndWVJZCkgCisgICAgcHVibGljIHZvaWQgY3JlYXRlVGVhbUluTGVhZ3VlKFRlYW1EZXRhaWxzIGRldGFpbHMsIFN0cmluZyBsZWFndWVJZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVRlYW0oU3RyaW5nIHRlYW1JZCkgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlVGVhbShTdHJpbmcgdGVhbUlkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIFRlYW1EZXRhaWxzIGdldFRlYW0oU3RyaW5nIHRlYW1JZCkgCisgICAgcHVibGljIFRlYW1EZXRhaWxzIGdldFRlYW0oU3RyaW5nIHRlYW1JZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0VGVhbXNCeVBsYXllckFuZExlYWd1ZShTdHJpbmcgcGxheWVyS2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbGVhZ3VlS2V5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwkKLSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKwogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0VGVhbXNCeVBsYXllckFuZExlYWd1ZVZpYVJlbW90ZShTdHJpbmcgcGxheWVyS2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbGVhZ3VlS2V5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyBTZXQgZ2V0Q2l0aWVzT2ZMZWFndWUoU3RyaW5nIGxlYWd1ZUtleSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBUZWFtRGV0YWlscyBnZXRUZWFtT2ZMZWFndWVCeUNpdHkoU3RyaW5nIGxlYWd1ZUtleSwgU3RyaW5nIGNpdHkpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CSAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIFN0cmluZyBnZXRUZWFtc05hbWVPZkxlYWd1ZUJ5Q2l0eShTdHJpbmcgbGVhZ3VlS2V5LCBTdHJpbmcgY2l0eSkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsJICAgCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgIFN0cmluZyBnZXRUZWFtTmFtZVZhcmlhdGlvbnMoU3RyaW5nIHRlYW1JZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBUZWFtRGV0YWlscyBnZXRSZW1vdGVUZWFtT2ZMZWFndWVCeUNpdHkoU3RyaW5nIGxlYWd1ZUtleSwgU3RyaW5nIGNpdHkpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CSAgIAotICAgICAgICAKLSAgICAgICAgCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisKKwogICAgIC8vIExlYWd1ZXMKIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUxlYWd1ZShMZWFndWVEZXRhaWxzIGRldGFpbHMpIAorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUxlYWd1ZShMZWFndWVEZXRhaWxzIGRldGFpbHMpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKSAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIExlYWd1ZURldGFpbHMgZ2V0TGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgCisgICAgcHVibGljIExlYWd1ZURldGFpbHMgZ2V0TGVhZ3VlKFN0cmluZyBsZWFndWVJZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBMZWFndWVEZXRhaWxzIGdldExlYWd1ZUJ5TmFtZShTdHJpbmcgbmFtZSkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAgICAgCisKICAgICAvLyBUZXN0CiAKICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFJlbW90ZVRlYW1zT2ZMZWFndWUoU3RyaW5nIGxlYWd1ZUtleSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKQEAgLTE2OSw3ICsxNjksNyBAQAogCiAgICAgcHVibGljIEFycmF5TGlzdCB0ZXN0RmluZGVyKFN0cmluZyBwYXJtMSwgU3RyaW5nIHBhcm0yLCBTdHJpbmcgcGFybTMpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgY2xlYW5VcCgpIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW92ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwotICAgICAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2VqYi9yb3N0ZXIvUm9zdGVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2VqYi9yb3N0ZXIvUm9zdGVyQmVhbi5qYXZhCmluZGV4IDM4Njk3OWIuLjM2Yjk1YjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9lamIvcm9zdGVyL1Jvc3RlckJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZWpiL3Jvc3Rlci9Sb3N0ZXJCZWFuLmphdmEKQEAgLTUyLDE5ICs1MiwxOSBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgY3JlYXRlUGxheWVyKFBsYXllckRldGFpbHMgZGV0YWlscykgeyAKLSAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVQbGF5ZXIoUGxheWVyRGV0YWlscyBkZXRhaWxzKSB7CisKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gY3JlYXRlUGxheWVyIik7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBMb2NhbFBsYXllciBwbGF5ZXIgPSBwbGF5ZXJIb21lLmNyZWF0ZShkZXRhaWxzLmdldElkKCksIAorICAgICAgICAgICAgTG9jYWxQbGF5ZXIgcGxheWVyID0gcGxheWVySG9tZS5jcmVhdGUoZGV0YWlscy5nZXRJZCgpLAogICAgICAgICAgICAgICAgIGRldGFpbHMuZ2V0TmFtZSgpLCBkZXRhaWxzLmdldFBvc2l0aW9uKCksIGRldGFpbHMuZ2V0U2FsYXJ5KCkpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAKLSAgICBwdWJsaWMgdm9pZCBhZGRQbGF5ZXIoU3RyaW5nIHBsYXllcklkLCBTdHJpbmcgdGVhbUlkKSB7IAotIAorCisgICAgcHVibGljIHZvaWQgYWRkUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkgeworCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGFkZFBsYXllciIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgTG9jYWxUZWFtIHRlYW0gPSB0ZWFtSG9tZS5maW5kQnlQcmltYXJ5S2V5KHRlYW1JZCk7CkBAIC03NSw3ICs3NSw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVQbGF5ZXIoU3RyaW5nIHBsYXllcklkKSB7IAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVBsYXllcihTdHJpbmcgcGxheWVySWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiByZW1vdmVQbGF5ZXIiKTsKICAgICAgICAgdHJ5IHsKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAKKwogICAgIHB1YmxpYyB2b2lkIGRyb3BQbGF5ZXIoU3RyaW5nIHBsYXllcklkLCBTdHJpbmcgdGVhbUlkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZHJvcFBsYXllciIpOwpAQCAtMTEzLDcgKzExMyw3IEBACiAgICAgfSAvLyBnZXRQbGF5ZXIKIAogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtKFN0cmluZyB0ZWFtSWQpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtKFN0cmluZyB0ZWFtSWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzT2ZUZWFtIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICB9IC8vIGdldFBsYXllcnNPZlRlYW0KIAogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtQ29weShTdHJpbmcgdGVhbUlkKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbUNvcHkoU3RyaW5nIHRlYW1JZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNPZlRlYW1Db3B5Iik7CiAgICAgICAgIEFycmF5TGlzdCBwbGF5ZXJzTGlzdCA9IG51bGw7CkBAIC0xNDUsNyArMTQ1LDcgQEAKICAgICB9IC8vIGdldFBsYXllcnNPZlRlYW1Db3B5CiAKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0VGVhbXNPZkxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRUZWFtc09mTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFRlYW1zT2ZMZWFndWUiKTsKIApAQCAtMTg2LDcgKzE4Niw3IEBACiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlQb3NpdGlvbgogCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNCeUJ5SGlnaGVyU2FsYXJ5Iik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CkBAIC0yMDAsNyArMjAwLDcgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0UGxheWVyc0J5SGlnaGVyU2FsYXJ5CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVNhbGFyeVJhbmdlKGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U2FsYXJ5UmFuZ2UoZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzQnlTYWxhcnlSYW5nZSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwpAQCAtMjE0LDcgKzIxNCw3IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldFBsYXllcnNCeVNhbGFyeVJhbmdlCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUxlYWd1ZUlkKFN0cmluZyBsZWFndWVJZCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUxlYWd1ZUlkKFN0cmluZyBsZWFndWVJZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNCeUxlYWd1ZUlkIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CkBAIC0yMjksNyArMjI5LDcgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0UGxheWVyc0J5TGVhZ3VlSWQKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U3BvcnQoU3RyaW5nIHNwb3J0KSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U3BvcnQoU3RyaW5nIHNwb3J0KSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc0J5U3BvcnQiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKQEAgLTI0Myw3ICsyNDMsNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlTcG9ydAogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlDaXR5KFN0cmluZyBjaXR5KSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5Q2l0eShTdHJpbmcgY2l0eSkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNCeUNpdHkiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKQEAgLTI1Nyw3ICsyNTcsNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlDaXR5CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldEFsbFBsYXllcnMoKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0QWxsUGxheWVycygpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRBbGxQbGF5ZXJzIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CkBAIC0yNzEsNyArMjcxLDcgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0QWxsUGxheWVycwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzTm90T25UZWFtKCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNOb3RPblRlYW0oKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc05vdE9uVGVhbSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwpAQCAtMjg1LDggKzI4NSw4IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldFBsYXllcnNOb3RPblRlYW0KIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lKFN0cmluZyBwb3NpdGlvbiwgCi0gICAgICAgIFN0cmluZyBuYW1lKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lKFN0cmluZyBwb3NpdGlvbiwKKyAgICAgICAgU3RyaW5nIG5hbWUpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKQEAgLTMwMCw3ICszMDAsNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0TGVhZ3Vlc09mUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldExlYWd1ZXNPZlBsYXllcihTdHJpbmcgcGxheWVySWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRMZWFndWVzT2ZQbGF5ZXIiKTsKICAgICAgICAgQXJyYXlMaXN0IGRldGFpbHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwpAQCAtMzEyLDcgKzMxMiw3IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAKKwogICAgICAgICBJdGVyYXRvciBpID0gbGVhZ3Vlcy5pdGVyYXRvcigpOwogICAgICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9IChMb2NhbExlYWd1ZSkgaS5uZXh0KCk7CkBAIC0zMjMsNyArMzIzLDcgQEAKICAgICAgICAgcmV0dXJuIGRldGFpbHNMaXN0OwogICAgIH0gLy8gZ2V0TGVhZ3Vlc09mUGxheWVyCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFNwb3J0c09mUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFNwb3J0c09mUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFNwb3J0c09mUGxheWVyIik7CiAgICAgICAgIEFycmF5TGlzdCBzcG9ydHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwpAQCAtMzM1LDcgKzMzNSw3IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAKKwogICAgICAgICBJdGVyYXRvciBpID0gc3BvcnRzLml0ZXJhdG9yKCk7CiAgICAgICAgIHdoaWxlIChpLmhhc05leHQoKSkgewogICAgICAgICAgICAgU3RyaW5nIHNwb3J0ID0gKFN0cmluZykgaS5uZXh0KCk7CkBAIC0zNDYsOCArMzQ2LDggQEAKIAogICAgIC8vIFRlYW0gYnVzaW5lc3MgbWV0aG9kcwogCi0gICAgcHVibGljIHZvaWQgY3JlYXRlVGVhbUluTGVhZ3VlKFRlYW1EZXRhaWxzIGRldGFpbHMsIFN0cmluZyBsZWFndWVJZCkgeyAKLSAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVUZWFtSW5MZWFndWUoVGVhbURldGFpbHMgZGV0YWlscywgU3RyaW5nIGxlYWd1ZUlkKSB7CisKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gY3JlYXRlVGVhbUluTGVhZ3VlIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWUgPSBsZWFndWVIb21lLmZpbmRCeVByaW1hcnlLZXkobGVhZ3VlSWQpOwpAQCAtMzU4LDggKzM1OCw4IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlVGVhbShTdHJpbmcgdGVhbUlkKSB7IAorCisgICAgcHVibGljIHZvaWQgcmVtb3ZlVGVhbShTdHJpbmcgdGVhbUlkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gcmVtb3ZlVGVhbSIpOwogICAgICAgICB0cnkgewpAQCAtMzY5LDcgKzM2OSw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gCisKICAgICBwdWJsaWMgVGVhbURldGFpbHMgZ2V0VGVhbShTdHJpbmcgdGVhbUlkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0VGVhbSIpOwpAQCAtMzg3LDE4ICszODcsMTggQEAKIAogICAgIC8vIExlYWd1ZSBidXNpbmVzcyBtZXRob2RzCiAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVMZWFndWUoTGVhZ3VlRGV0YWlscyBkZXRhaWxzKSB7IAotIAorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUxlYWd1ZShMZWFndWVEZXRhaWxzIGRldGFpbHMpIHsKKwogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBjcmVhdGVMZWFndWUiKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9IGxlYWd1ZUhvbWUuY3JlYXRlKGRldGFpbHMuZ2V0SWQoKSwgCisgICAgICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWUgPSBsZWFndWVIb21lLmNyZWF0ZShkZXRhaWxzLmdldElkKCksCiAgICAgICAgICAgICAgICAgZGV0YWlscy5nZXROYW1lKCksIGRldGFpbHMuZ2V0U3BvcnQoKSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZUxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIHsgCisKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gcmVtb3ZlTGVhZ3VlIik7CiAgICAgICAgIHRyeSB7CkBAIC00MDgsNyArNDA4LDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAKKwogICAgIHB1YmxpYyBMZWFndWVEZXRhaWxzIGdldExlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRMZWFndWUiKTsKQEAgLTQyMiw3ICs0MjIsNyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBsZWFndWVEZXRhaWxzOwogICAgIH0KLSAKKwogICAgIC8vIFNlc3Npb25CZWFuIG1ldGhvZHMKIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewpAQCAtNDcwLDUxICs0NzAsNTEgQEAKICAgICBwdWJsaWMgUm9zdGVyQmVhbigpIHt9CiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykge30KLSAKKwogICAgIC8vIFByaXZhdGUgbWV0aG9kcwogCiAgICAgcHJpdmF0ZSBMb2NhbFBsYXllckhvbWUgbG9va3VwUGxheWVyKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7Ci0gICAgICAgCisKICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlUGxheWVyRXh0Iik7CiAgICAgICAgIHJldHVybiAoTG9jYWxQbGF5ZXJIb21lKSBvYmpyZWY7CiAgICB9CiAKICAgICBwcml2YXRlIExvY2FsVGVhbUhvbWUgbG9va3VwVGVhbSgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewotICAgICAgIAorCiAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVRlYW1FeHQiKTsKICAgICAgICAgcmV0dXJuIChMb2NhbFRlYW1Ib21lKSBvYmpyZWY7CiAgICB9CiAKICAgICBwcml2YXRlIExvY2FsTGVhZ3VlSG9tZSBsb29rdXBMZWFndWUoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKLSAgICAgICAKKwogICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVMZWFndWVFeHQiKTsKICAgICAgICAgcmV0dXJuIChMb2NhbExlYWd1ZUhvbWUpIG9ianJlZjsKICAgIH0KIAogICAgIHByaXZhdGUgUGxheWVySG9tZSBsb29rdXBSZW1vdGVQbGF5ZXIoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKLSAgICAgICAKKwogICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9SZW1vdGVQbGF5ZXJFeHQiKTsKICAgICAgICAgcmV0dXJuIChQbGF5ZXJIb21lKSBvYmpyZWY7CiAgICB9CiAKICAgICBwcml2YXRlIFRlYW1Ib21lIGxvb2t1cFJlbW90ZVRlYW0oKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKLSAgICAgICAKKwogICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9SZW1vdGVUZWFtRXh0Iik7CiAgICAgICAgIHJldHVybiAoVGVhbUhvbWUpIG9ianJlZjsKICAgIH0KIAogICAgIHByaXZhdGUgTGVhZ3VlSG9tZSBsb29rdXBSZW1vdGVMZWFndWUoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKLSAgICAgICAKKwogICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9SZW1vdGVMZWFndWVFeHQiKTsKICAgICAgICAgcmV0dXJuIChMZWFndWVIb21lKSBvYmpyZWY7CiAgICB9Ci0gICAKKwogICAgcHJpdmF0ZSBBcnJheUxpc3QgY29weVBsYXllcnNUb0RldGFpbHMoQ29sbGVjdGlvbiBwbGF5ZXJzKSB7CiAKICAgICAgICAgQXJyYXlMaXN0IGRldGFpbHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwpAQCAtNTQ0LDE1ICs1NDQsMTUgQEAKIAogICAgICAgICByZXR1cm4gZGV0YWlsc0xpc3Q7CiAgICB9IC8vIGNvcHlQbGF5ZXJzVG9EZXRhaWxzCi0gICAKKwogICAgLyoqCi0gICAgKiBkaXJ0eSBjbGVhblVwIG1ldGhvZCBvbmx5IEVKQnMgd2l0aCBoYXJkY29kZWQgUEsgd2lsbCBiZSByZW1vdmVkICAKKyAgICAqIGRpcnR5IGNsZWFuVXAgbWV0aG9kIG9ubHkgRUpCcyB3aXRoIGhhcmRjb2RlZCBQSyB3aWxsIGJlIHJlbW92ZWQKICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNsZWFuVXAoKSB7Ci0gICAgICAgIERlYnVnLnByaW50KCJDbGVhbmluZyB1cCB0aGUgZGF0YWJhc2UiKTsgICAKKyAgICAgICAgRGVidWcucHJpbnQoIkNsZWFuaW5nIHVwIHRoZSBkYXRhYmFzZSIpOwogICAgICAgICBDb2xsZWN0aW9uIHRvQ2xlYW4gPSBudWxsOwogICAgICAgICBJdGVyYXRvciBpdCA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL3JlbW92aW5nIHRoZSBwbGF5ZXIgRUpCcwogICAgICAgICAgICAgdG9DbGVhbiA9IHBsYXllckhvbWUuZmluZEFsbCgpOwpAQCAtNTYwLDMzICs1NjAsMzMgQEAKICAgICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICAoKExvY2FsUGxheWVyKWl0Lm5leHQoKSkucmVtb3ZlKCk7CiAgICAgICAgICAgICB9Ci0gICAgCisKICAgICAgICAgICAgIC8vIHJlbW92aW5nIHRoZSB0ZWFtIEVKQnMKICAgICAgICAgICAgIHRvQ2xlYW4gPSB0ZWFtSG9tZS5maW5kQWxsKCk7CiAgICAgICAgICAgICBpdCA9IHRvQ2xlYW4uaXRlcmF0b3IoKTsKICAgICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICAoKExvY2FsVGVhbSlpdC5uZXh0KCkpLnJlbW92ZSgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyByZW1vdmluZyB0aGUgbGVhZ3VlIEVKQnMKICAgICAgICAgICAgIHRvQ2xlYW4gPSBsZWFndWVIb21lLmZpbmRBbGwoKTsKICAgICAgICAgICAgIGl0ID0gdG9DbGVhbi5pdGVyYXRvcigpOwogICAgICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgICgoTG9jYWxMZWFndWUpaXQubmV4dCgpKS5yZW1vdmUoKTsKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICBEZWJ1Zy5wcmludCgiQ2xlYW5pbmcgdXAgdGhlIGRhdGFiYXNlIC4uLiBkb25lISIpOwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkKKyAgICAgICAgICAgIH0KKyAgICAgICAgRGVidWcucHJpbnQoIkNsZWFuaW5nIHVwIHRoZSBkYXRhYmFzZSAuLi4gZG9uZSEiKTsKICAgICAgICAgfSAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgICAgCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBuYW1lCiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIHB1YmxpYyBMZWFndWVEZXRhaWxzIGdldExlYWd1ZUJ5TmFtZShTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgCisKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0TGVhZ3VlQnlOYW1lIChTaW5nbGVPYmplY3RGaW5kZXIpIik7CiAgICAgICAgIExlYWd1ZURldGFpbHMgbGVhZ3VlRGV0YWlscyA9IG51bGw7CiAgICAgICAgIHRyeSB7CkBAIC01OTgsMTIgKzU5OCwxMiBAQAogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGxlYWd1ZURldGFpbHM7Ci0gICAgfSAgICAgICAgCisgICAgfQogICAgIC8vIGdldExlYWd1ZUJ5TmFtZSgpCiAKLSAgICAKKwogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIHBsYXllcktleQogICAgICAqIEBwYXJhbSBsZWFndWVLZXkKICAgICAgKiBAcmV0dXJuCkBAIC02MTIsMTMgKzYxMiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbGVhZ3VlS2V5KSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0VGVhbXNCeVBsYXllckFuZExlYWd1ZSIpOwotICAgICAgICBBcnJheUxpc3QgZGV0YWlsc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CQkJCQkJCQkJICAgCisgICAgICAgIEFycmF5TGlzdCBkZXRhaWxzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKICAgICAgICAgQ29sbGVjdGlvbiB0ZWFtc0NvbGwgPSBudWxsOwogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBMb2NhbFBsYXllciBwbGF5ZXIgPSBwbGF5ZXJIb21lLmZpbmRCeVByaW1hcnlLZXkocGxheWVyS2V5KTsKLSAgICAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9IGxlYWd1ZUhvbWUuZmluZEJ5UHJpbWFyeUtleShsZWFndWVLZXkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICB0ZWFtc0NvbGwgPSB0ZWFtSG9tZS5maW5kQnlQbGF5ZXJBbmRMZWFndWUocGxheWVyLCBsZWFndWUpOwkJCQorICAgICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gbGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUtleSk7CisgICAgICAgICAgICB0ZWFtc0NvbGwgPSB0ZWFtSG9tZS5maW5kQnlQbGF5ZXJBbmRMZWFndWUocGxheWVyLCBsZWFndWUpOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKQEAgLTYzMiwxMSArNjMyLDExIEBACiAgICAgICAgICAgICBkZXRhaWxzTGlzdC5hZGQoZGV0YWlscyk7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gZGV0YWlsc0xpc3Q7CQotICAgIH0JCisgICAgICAgIHJldHVybiBkZXRhaWxzTGlzdDsKKyAgICB9CiAKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBwbGF5ZXJLZXkKICAgICAgKiBAcGFyYW0gbGVhZ3VlS2V5CiAgICAgICogQHJldHVybgpAQCAtNjQ1LDE3ICs2NDUsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxlYWd1ZUtleSkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFRlYW1zQnlQbGF5ZXJBbmRMZWFndWVWaWFSZW1vdGUiKTsKLSAgICAgICAgQXJyYXlMaXN0IGRldGFpbHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwkJCQkJCQkJCSAgIAorICAgICAgICBBcnJheUxpc3QgZGV0YWlsc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CiAgICAgICAgIENvbGxlY3Rpb24gdGVhbXNDb2xsID0gbnVsbDsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgRGVidWcucHJpbnQoIiAtLS0tLSBmaW5kaW5nIC4uLi4iKTsKICAgICAgICAgICAgIFBsYXllciBwbGF5ZXIgPSByZW1QbGF5ZXJIb21lLmZpbmRCeVByaW1hcnlLZXkocGxheWVyS2V5KTsKICAgICAgICAgICAgIERlYnVnLnByaW50KCIgLS0tLS0gUGxheWVyIGZvdW5kIik7Ci0gICAgICAgICAgICBMZWFndWUgbGVhZ3VlID0gcmVtTGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUtleSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIExlYWd1ZSBsZWFndWUgPSByZW1MZWFndWVIb21lLmZpbmRCeVByaW1hcnlLZXkobGVhZ3VlS2V5KTsKICAgICAgICAgICAgIERlYnVnLnByaW50KCIgLS0tLS0gTGVhZ3VlIGZvdW5kIik7CiAgICAgICAgICAgICB0ZWFtc0NvbGwgPSByZW1UZWFtSG9tZS5maW5kQnlQbGF5ZXJBbmRMZWFndWVWaWFSZW1vdGUocGxheWVyLCBsZWFndWUpOwotICAgICAgICAgICAgRGVidWcucHJpbnQoIiAtLS0tLSBUZWFtIGZvdW5kIik7CQkJCisgICAgICAgICAgICBEZWJ1Zy5wcmludCgiIC0tLS0tIFRlYW0gZm91bmQiKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CkBAIC02NzQsNDUgKzY3NCw0NSBAQAogICAgICAgICB9CiAKIAotICAgICAgICByZXR1cm4gZGV0YWlsc0xpc3Q7CQotICAgIH0JCi0gICAgCisgICAgICAgIHJldHVybiBkZXRhaWxzTGlzdDsKKyAgICB9CisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBjaXR5CiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIHB1YmxpYyBTZXQgZ2V0Q2l0aWVzT2ZMZWFndWUoU3RyaW5nIGxlYWd1ZUtleSkgewotICAgICAgICAKKwogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRDaXRpZXNPZkxlYWd1ZShsZWFndWVLZXkpIik7Ci0gICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZTsgCisgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZTsKICAgICAgICAgU2V0IGNpdGllczsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGxlYWd1ZSA9IGxlYWd1ZUhvbWUuZmluZEJ5UHJpbWFyeUtleShsZWFndWVLZXkpOwotICAgICAgICAgICAgY2l0aWVzID0gbGVhZ3VlLmdldENpdGllc09mVGhpc0xlYWd1ZSgpOwkKKyAgICAgICAgICAgIGNpdGllcyA9IGxlYWd1ZS5nZXRDaXRpZXNPZlRoaXNMZWFndWUoKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CQkJCisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNpdGllczsKICAgICB9Ly8gZ2V0Q2l0aWVzT2ZMZWFndWUoKQogCiAKICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFJlbW90ZVRlYW1zT2ZMZWFndWUoU3RyaW5nIGxlYWd1ZUtleSkgewotICAgICAgICAKKwogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRSZW1vdGVUZWFtc09mTGVhZ3VlKGxlYWd1ZUtleSkiKTsKLSAgICAgICAgQXJyYXlMaXN0IGRldGFpbHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwkJCQkJCQkJCSAgIAotICAgICAgICBMZWFndWUgbGVhZ3VlOyAKKyAgICAgICAgQXJyYXlMaXN0IGRldGFpbHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOworICAgICAgICBMZWFndWUgbGVhZ3VlOwogICAgICAgICBTZXQgdGVhbXM7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBsZWFndWUgPSByZW1MZWFndWVIb21lLmZpbmRCeVByaW1hcnlLZXkobGVhZ3VlS2V5KTsKLSAgICAgICAgICAgIHRlYW1zID0gbGVhZ3VlLmdldFJlbW90ZVRlYW1zT2ZUaGlzTGVhZ3VlKCk7CQorICAgICAgICAgICAgdGVhbXMgPSBsZWFndWUuZ2V0UmVtb3RlVGVhbXNPZlRoaXNMZWFndWUoKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CQkJCisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KIAogICAgICAgICB0cnkgewpAQCAtNzI3LDEyICs3MjcsMTIgQEAKICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBkZXRhaWxzTGlzdDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBsZWFndWVLZXkKICAgICAgKiBAcGFyYW0gY2l0eQogICAgICAqIEByZXR1cm4KQEAgLTc0MSw3ICs3NDEsNyBAQAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRUZWFtT2ZMZWFndWVCeUNpdHkobGVhZ3VlS2V5LCBjaXR5KSIpOwogICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWU7CiAgICAgICAgIExvY2FsVGVhbSB0ZWFtOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgbGVhZ3VlID0gbGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUtleSk7CiAgICAgICAgICAgICB0ZWFtID0gbGVhZ3VlLmdldFRlYW1CeUNpdHkoY2l0eSk7CkBAIC03NDksMTMgKzc0OSwxMyBAQAogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG5ldyBUZWFtRGV0YWlscyh0ZWFtLmdldFRlYW1JZCgpLCB0ZWFtLmdldE5hbWUoKSwgdGVhbS5nZXRDaXR5KCkpOwogICAgIH0vLyBnZXRUZWFtT2ZMZWFndWVCeUNpdHkoKQogCi0gICAgCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBsZWFndWVLZXkKICAgICAgKiBAcGFyYW0gY2l0eQogICAgICAqIEByZXR1cm4KQEAgLTc2NCw3ICs3NjQsNyBAQAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRUZWFtc05hbWVPZkxlYWd1ZUJ5Q2l0eShsZWFndWVLZXksIGNpdHkpIik7CiAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZTsKICAgICAgICAgU3RyaW5nIHRlYW1OYW1lOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgbGVhZ3VlID0gbGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUtleSk7CiAgICAgICAgICAgICB0ZWFtTmFtZSA9IGxlYWd1ZS5nZXRUZWFtc05hbWVCeUNpdHkoY2l0eSk7CkBAIC03NzIsMTQgKzc3MiwxNCBAQAogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHRlYW1OYW1lOwogCiAgICAgfS8vIGdldFRlYW1zTmFtZU9mTGVhZ3VlQnlDaXR5KCkKLSAgICAKLSAgICAKKworCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gdGVhbUlECiAgICAgICogQHBhcmFtIHBsYXllck5hbWUKICAgICAgKiBAcmV0dXJuCkBAIC03ODgsMjEgKzc4OCwyMSBAQAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRTYWxhcnlPZlBsYXllckZyb21UZWFtKHRlYW1LZXksIHBsYXllcktleSkiKTsKICAgICAgICAgTG9jYWxUZWFtIHRlYW07CiAgICAgICAgIGRvdWJsZSBzYWxhcnk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB0ZWFtID0gdGVhbUhvbWUuZmluZEJ5UHJpbWFyeUtleSh0ZWFtSUQpOwkJCi0gICAgICAgICAgICBzYWxhcnkgPSB0ZWFtLmdldFNhbGFyeU9mUGxheWVyKHBsYXllck5hbWUpOwkJCQorICAgICAgICAgICAgdGVhbSA9IHRlYW1Ib21lLmZpbmRCeVByaW1hcnlLZXkodGVhbUlEKTsKKyAgICAgICAgICAgIHNhbGFyeSA9IHRlYW0uZ2V0U2FsYXJ5T2ZQbGF5ZXIocGxheWVyTmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gc2FsYXJ5OyAgICAgICAKKworICAgICAgICByZXR1cm4gc2FsYXJ5OwogICAgIH0vLyBnZXRTYWxhcnlPZlBsYXllckZyb21UZWFtKCkKLSAgICAKLSAgICAKKworCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gbGVhZ3VlSWQKICAgICAgKiBAcmV0dXJuCiAgICAgICovCkBAIC04MTAsNyArODEwLDcgQEAKICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzT2ZMZWFndWUobGVhZ3VlSWQpIik7CiAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlOwogICAgICAgIFNldCBwbGF5ZXJzOwotICAgICAgIAorCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgbGVhZ3VlID0gbGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUlkKTsKICAgICAgICAgICAgcGxheWVycyA9IGxlYWd1ZS5nZXRQbGF5ZXJzRnJvbUxlYWd1ZSgpOwpAQCAtODE4LDEyICs4MTgsMTIgQEAKICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICB9Ci0gICAgICAgCi0gICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOyAgICAgCisKKyAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfS8vIGdldFBsYXllcnNPZkxlYWd1ZSgpCi0gICAgCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBsZWFndWVJZAogICAgICAqIEByZXR1cm4KICAgICAgKi8KQEAgLTg0MCw2OCArODQwLDY4IEBACiAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgfQotICAgICAgIAotICAgICAgIHJldHVybiByZXN1bHQ7ICAgICAKKworICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfS8vIGdldFBsYXllcnNPZkxlYWd1ZSgpCi0gICAgCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4KICAgICAgKi8KICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNXaXRoUG9zaXRpb25zR29hbGtlZXBlck9yRGVmZW5kZXIoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNXaXRoUG9zaXRpb25zR29hbGtlZXBlck9yRGVmZW5kZXIoKSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcGxheWVycyA9IHBsYXllckhvbWUuZmluZEJ5UG9zaXRpb25zR29hbGtlZXBlck9yRGVmZW5kZXIoKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0vLyBnZXRQbGF5ZXJzV2l0aFBvc2l0aW9uc0dvYWxrZWVwZXJPckRlZmVuZGVyKCkKLSAgICAKKwogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhOYW1lRW5kaW5nV2l0aE9OKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzV2l0aE5hbWVFbmRpbmdXaXRoT04oKSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcGxheWVycyA9IHBsYXllckhvbWUuZmluZEJ5TmFtZUVuZGluZ1dpdGhPTigpOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfS8vIGdldFBsYXllcnNXaXRoTmFtZUVuZGluZ1dpdGhPTigpCiAKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4KICAgICAgKi8KICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNXaXRoTnVsbE5hbWUoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNXaXRoTnVsbE5hbWUoKSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcGxheWVycyA9IHBsYXllckhvbWUuZmluZEJ5TnVsbE5hbWUoKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0vLyBnZXRQbGF5ZXJzV2l0aE51bGxOYW1lKCkKIAogCiAKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSB0ZWFtSWQKICAgICAgKiBAcmV0dXJuCiAgICAgICovCkBAIC05MDksNyArOTA5LDcgQEAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc1dpdGhUZWFtKHRlYW1JZCkiKTsKICAgICAgICAgTG9jYWxUZWFtIHRlYW07CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB0ZWFtID0gdGVhbUhvbWUuZmluZEJ5UHJpbWFyeUtleSh0ZWFtSWQpOwogICAgICAgICAgICAgcGxheWVycyA9IHBsYXllckhvbWUuZmluZEJ5VGVhbSh0ZWFtKTsKQEAgLTkxNywxMyArOTE3LDEzIEBACiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfS8vIGdldFBsYXllcnNXaXRoVGVhbSgpCi0gICAgCi0gICAgCisKKwogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIHRlYW1JZAogICAgICAqIEByZXR1cm4KICAgICAgKi8KQEAgLTkzMSw3ICs5MzEsNyBAQAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRUZWFtTmFtZVZhcmlhdGlvbnModGVhbUlkKSIpOwogICAgICAgICBMb2NhbFRlYW0gdGVhbTsKICAgICAgICAgU3RyaW5nQnVmZmVyIG91dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRlYW0gPSB0ZWFtSG9tZS5maW5kQnlQcmltYXJ5S2V5KHRlYW1JZCk7CiAgICAgICAgICAgICBEZWJ1Zy5wcmludCgiLS0tIENPTkNBVCIpOwpAQCAtOTM5LDU5ICs5MzksNTkgQEAKICAgICAgICAgICAgIERlYnVnLnByaW50KCItLS0gU1VCU1RSSU5HIik7CiAgICAgICAgICAgICBvdXQuYXBwZW5kKHRlYW0uZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czIoKSk7CiAgICAgICAgICAgICBEZWJ1Zy5wcmludCgiLS0tIExPQ0FURSBBTkQgTEVOR1RIIik7Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKHRlYW0uZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czMoKSk7CQkJCisgICAgICAgICAgICBvdXQuYXBwZW5kKHRlYW0uZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czMoKSk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwkJCQorICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBvdXQudG9TdHJpbmcoKTsKICAgICB9Ly8gZ2V0VGVhbU5hbWVWYXJpYXRpb25zKCkKLSAgICAKLSAgICAKKworCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gc2FsYXJ5CiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhTYWxhcnlVc2luZ0FCUyhkb3VibGUgc2FsYXJ5KSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNXaXRoU2FsYXJ5VXNpbmdBQlMoc2FsYXJ5KSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcGxheWVycyA9IHBsYXllckhvbWUuZmluZEJ5U2FsYXJheVdpdGhBcml0aG1ldGljRnVuY3Rpb25BQlMoc2FsYXJ5KTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0vLyBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nQUJTKCkKIAogCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gc2FsYXJ5CiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhTYWxhcnlVc2luZ1NRUlQoZG91YmxlIHNhbGFyeSkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nU1FSVChzYWxhcnkpIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBwbGF5ZXJzID0gcGxheWVySG9tZS5maW5kQnlTYWxhcmF5V2l0aEFyaXRobWV0aWNGdW5jdGlvblNRUlQoc2FsYXJ5KTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0vLyBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nU1FSVCgpCi0gICAgCi0gICAgCi0gICAgCisKKworCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gbGVhZ3VlS2V5CiAgICAgICogQHBhcmFtIGNpdHkKICAgICAgKiBAcmV0dXJuCkBAIC0xMDAxLDIwICsxMDAxLDIwIEBACiAgICAgICAgIExlYWd1ZSBsZWFndWU7CiAgICAgICAgIFRlYW0gdGVhbTsKICAgICAgICAgVGVhbURldGFpbHMgdGVhbURldGFpbHM7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBsZWFndWUgPSByZW1MZWFndWVIb21lLmZpbmRCeVByaW1hcnlLZXkobGVhZ3VlS2V5KTsKICAgICAgICAgICAgIHRlYW0gPSBsZWFndWUuZ2V0UmVtb3RlVGVhbUJ5Q2l0eShjaXR5KTsKLSAgICAgICAgICAgIHRlYW1EZXRhaWxzID0gbmV3IFRlYW1EZXRhaWxzKHRlYW0uZ2V0VGVhbUlkKCksIHRlYW0uZ2V0TmFtZSgpLCB0ZWFtLmdldENpdHkoKSk7IAorICAgICAgICAgICAgdGVhbURldGFpbHMgPSBuZXcgVGVhbURldGFpbHModGVhbS5nZXRUZWFtSWQoKSwgdGVhbS5nZXROYW1lKCksIHRlYW0uZ2V0Q2l0eSgpKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHRlYW1EZXRhaWxzOwogICAgIH0vLyBnZXRSZW1vdGVUZWFtT2ZMZWFndWVCeUNpdHkoKQotICAgIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5TGVhZ3VlSWRXaXRoTlVMTChTdHJpbmcgbGVhZ3VlSWQpIHsgCisKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUxlYWd1ZUlkV2l0aE5VTEwoU3RyaW5nIGxlYWd1ZUlkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc0J5TGVhZ3VlSWQiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKQEAgLTEwMjksNSArMTAyOSw1IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldFBsYXllcnNCeUxlYWd1ZUlkCiAKLSAgICAKLX0gLy8gUm9zdGVyQmVhbiAKKworfSAvLyBSb3N0ZXJCZWFuCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZWpiL3Jvc3Rlci9Sb3N0ZXJIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZWpiL3Jvc3Rlci9Sb3N0ZXJIb21lLmphdmEKaW5kZXggY2VjZDQ2Mi4uYjg3NGFkNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2VqYi9yb3N0ZXIvUm9zdGVySG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9lamIvcm9zdGVyL1Jvc3RlckhvbWUuamF2YQpAQCAtMjIsNiArMjIsNiBAQAogaW1wb3J0IGpha2FydGEuZWpiLkVKQkhvbWU7CiAKIHB1YmxpYyBpbnRlcmZhY2UgUm9zdGVySG9tZSBleHRlbmRzIEVKQkhvbWUgewotIAorCiAgICAgUm9zdGVyIGNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIENyZWF0ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9lamIvdGVhbS9MZWFndWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9lamIvdGVhbS9MZWFndWUuamF2YQppbmRleCBiMGI4ZTFiLi45NmUzNzAzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZWpiL3RlYW0vTGVhZ3VlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2VqYi90ZWFtL0xlYWd1ZS5qYXZhCkBAIC0yOSwxNSArMjksMTUgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFNwb3J0KCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRUZWFtcygpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgVGVhbSBnZXRSZW1vdGVUZWFtQnlDaXR5KFN0cmluZyBjaXR5KSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCAKKyAgICBwdWJsaWMgVGVhbSBnZXRSZW1vdGVUZWFtQnlDaXR5KFN0cmluZyBjaXR5KSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdGVFeGNlcHRpb247Ci0gICAgCi0gICAgcHVibGljIFNldCBnZXRSZW1vdGVUZWFtc09mVGhpc0xlYWd1ZSgpIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIAorCisgICAgcHVibGljIFNldCBnZXRSZW1vdGVUZWFtc09mVGhpc0xlYWd1ZSgpIHRocm93cyBGaW5kZXJFeGNlcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZ2V0UmVtb3RlUGxheWVyc0Zyb21MZWFndWUoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRSZW1vdGVQbGF5ZXJzRnJvbUxlYWd1ZSgpIHRocm93cyBGaW5kZXJFeGNlcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKIC8vICAgIHB1YmxpYyB2b2lkIGFkZFRlYW0oVGVhbSB0ZWFtKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogLy8gICAgcHVibGljIHZvaWQgZHJvcFRlYW0oVGVhbSB0ZWFtKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZWpiL3RlYW0vTGVhZ3VlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2VqYi90ZWFtL0xlYWd1ZUJlYW4uamF2YQppbmRleCAzOGQzODA2Li5mY2U5MmRlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZWpiL3RlYW0vTGVhZ3VlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9lamIvdGVhbS9MZWFndWVCZWFuLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIAogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0TGVhZ3VlSWQoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRMZWFndWVJZChTdHJpbmcgaWQpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXROYW1lKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7CiAKQEAgLTUwLDcgKzUwLDcgQEAKICAgICBwdWJsaWMgYWJzdHJhY3QgU2V0IGVqYlNlbGVjdFJlbW90ZVRlYW1zKExlYWd1ZSBsZWFndWUpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICAgICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgTG9jYWxUZWFtIGVqYlNlbGVjdFRlYW1CeUNpdHkoU3RyaW5nIGNpdHkpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKQEAgLTYwLDYzICs2MCw2MyBAQAogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZWpiU2VsZWN0VGVhbXNOYW1lQnlDaXR5KFN0cmluZyBjaXR5KQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IFNldCBlamJTZWxlY3RQbGF5ZXJzQnlMZWFndWUoTG9jYWxMZWFndWUgbGVhZ3VlKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGFic3RyYWN0IENvbGxlY3Rpb24gZWpiU2VsZWN0UmVtb3RlUGxheWVyc0J5TGVhZ3VlKExlYWd1ZSBsZWFndWUpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247Ci0gICAgICAgIAorCiAgICAgLy8gQnVzaW5lc3MgbWV0aG9kcwogCiAgICAgcHVibGljIFNldCBnZXRDaXRpZXNPZlRoaXNMZWFndWUoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKLSAgICAgICAgIAotICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gCisKKyAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9CiAgICAgICAgICAgICAgKHRlYW0uTG9jYWxMZWFndWUpY29udGV4dC5nZXRFSkJMb2NhbE9iamVjdCgpOwotICAgICAgICAgCi0gICAgICAgICByZXR1cm4gZWpiU2VsZWN0VGVhbXNDaXR5KGxlYWd1ZSk7IAorCisgICAgICAgICByZXR1cm4gZWpiU2VsZWN0VGVhbXNDaXR5KGxlYWd1ZSk7CiAgICAgfQogCiAKICAgICBwdWJsaWMgU2V0IGdldFJlbW90ZVRlYW1zT2ZUaGlzTGVhZ3VlKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICAgTGVhZ3VlIGxlYWd1ZSA9ICAodGVhbS5MZWFndWUpY29udGV4dC5nZXRFSkJPYmplY3QoKTsKLSAgICAgICAgIAotICAgICAgICAgcmV0dXJuIGVqYlNlbGVjdFJlbW90ZVRlYW1zKGxlYWd1ZSk7IAorCisgICAgICAgICByZXR1cm4gZWpiU2VsZWN0UmVtb3RlVGVhbXMobGVhZ3VlKTsKICAgICB9CiAKLSAgICAKKwogICAgIHB1YmxpYyBMb2NhbFRlYW0gZ2V0VGVhbUJ5Q2l0eShTdHJpbmcgY2l0eSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBlamJTZWxlY3RUZWFtQnlDaXR5KGNpdHkpOwogICAgIH0KIAogICAgIHB1YmxpYyBUZWFtIGdldFJlbW90ZVRlYW1CeUNpdHkoU3RyaW5nIGNpdHkpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICByZXR1cm4gZWpiU2VsZWN0UmVtb3RlVGVhbUJ5Q2l0eShjaXR5KTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1zTmFtZUJ5Q2l0eShTdHJpbmcgY2l0eSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBlamJTZWxlY3RUZWFtc05hbWVCeUNpdHkoY2l0eSk7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgU2V0IGdldFBsYXllcnNGcm9tTGVhZ3VlKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gKHRlYW0uTG9jYWxMZWFndWUpY29udGV4dC5nZXRFSkJMb2NhbE9iamVjdCgpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gZWpiU2VsZWN0UGxheWVyc0J5TGVhZ3VlKGxlYWd1ZSk7Ci0gICAgfSAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRSZW1vdGVQbGF5ZXJzRnJvbUxlYWd1ZSgpIHRocm93cyBGaW5kZXJFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIExlYWd1ZSBsZWFndWUgPSAodGVhbS5MZWFndWUpY29udGV4dC5nZXRFSkJPYmplY3QoKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGVqYlNlbGVjdFJlbW90ZVBsYXllcnNCeUxlYWd1ZShsZWFndWUpOwotICAgIH0gCi0gICAgICAgIAotICAgIAorICAgIH0KKworCiAgICAgcHVibGljIHZvaWQgYWRkVGVhbShMb2NhbFRlYW0gdGVhbSkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJUZWFtQmVhbiBhZGRUZWFtIik7CkBAIC0xNTAsMzIgKzE1MCwzMiBAQAogICAgICAgICBzZXRTcG9ydChzcG9ydCk7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHNwb3J0KQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsgfQogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGN0eCkgewogICAgICAgICBjb250ZXh0ID0gY3R4OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsKICAgICAgICAgY29udGV4dCA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiTGVhZ3VlQmVhbiBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiTGVhZ3VlQmVhbiBlamJMb2FkIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJMZWFndWVCZWFuIGVqYlN0b3JlIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgeyB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsgfQogCiB9IC8vIExlYWd1ZUJlYW4gY2xhc3MKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9lamIvdGVhbS9MZWFndWVIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZWpiL3RlYW0vTGVhZ3VlSG9tZS5qYXZhCmluZGV4IDIyYTczNGEuLjhiYzA3ODIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9lamIvdGVhbS9MZWFndWVIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2VqYi90ZWFtL0xlYWd1ZUhvbWUuamF2YQpAQCAtMjUsMTQgKzI1LDE0IEBACiAKICAgICBwdWJsaWMgTGVhZ3VlIGNyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHNwb3J0KQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgTGVhZ3VlIGZpbmRCeVByaW1hcnlLZXkgKFN0cmluZyBpZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEFsbCgpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgTGVhZ3VlIGZpbmRCeU5hbWUoU3RyaW5nIG5hbWUpCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsJCQkJCQotICAgICAgICAKKyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZWpiL3RlYW0vTG9jYWxMZWFndWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9lamIvdGVhbS9Mb2NhbExlYWd1ZS5qYXZhCmluZGV4IGYyZWIwNDYuLmExNDQ2MTcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9lamIvdGVhbS9Mb2NhbExlYWd1ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9lamIvdGVhbS9Mb2NhbExlYWd1ZS5qYXZhCkBAIC0zMyw1ICszMyw1IEBACiAgICAgcHVibGljIExvY2FsVGVhbSBnZXRUZWFtQnlDaXR5KFN0cmluZyBjaXR5KSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVhbXNOYW1lQnlDaXR5KFN0cmluZyBjaXR5KSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogICAgIHB1YmxpYyBTZXQgZ2V0UGxheWVyc0Zyb21MZWFndWUoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZWpiL3RlYW0vTG9jYWxMZWFndWVIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZWpiL3RlYW0vTG9jYWxMZWFndWVIb21lLmphdmEKaW5kZXggZWMxNzZkYS4uYzE5YWY3NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2VqYi90ZWFtL0xvY2FsTGVhZ3VlSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9lamIvdGVhbS9Mb2NhbExlYWd1ZUhvbWUuamF2YQpAQCAtMjAsMTcgKzIwLDE3IEBACiBpbXBvcnQgamFrYXJ0YS5lamIuKjsKIAogcHVibGljIGludGVyZmFjZSBMb2NhbExlYWd1ZUhvbWUgZXh0ZW5kcyBFSkJMb2NhbEhvbWUgewotICAgIAorCiAgICAgcHVibGljIExvY2FsTGVhZ3VlIGNyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHNwb3J0KQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIExvY2FsTGVhZ3VlIGZpbmRCeVByaW1hcnlLZXkgKFN0cmluZyBpZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBMb2NhbExlYWd1ZSBmaW5kQnlOYW1lKFN0cmluZyBuYW1lKQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwkJCQkJCi0gICAgICAgIAorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZWpiL3RlYW0vTG9jYWxQbGF5ZXJIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZWpiL3RlYW0vTG9jYWxQbGF5ZXJIb21lLmphdmEKaW5kZXggOTA0NThlMy4uNTc3NzA3MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2VqYi90ZWFtL0xvY2FsUGxheWVySG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9lamIvdGVhbS9Mb2NhbFBsYXllckhvbWUuamF2YQpAQCAtMjAsNjAgKzIwLDYwIEBACiBpbXBvcnQgamFrYXJ0YS5lamIuKjsKIAogcHVibGljIGludGVyZmFjZSBMb2NhbFBsYXllckhvbWUgZXh0ZW5kcyBFSkJMb2NhbEhvbWUgewotICAgIAorCiAgICAgcHVibGljIExvY2FsUGxheWVyIGNyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHBvc2l0aW9uLAogICAgICAgICBkb3VibGUgc2FsYXJ5KQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIExvY2FsUGxheWVyIGZpbmRCeVByaW1hcnlLZXkgKFN0cmluZyBpZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKLSAgICAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQb3NpdGlvbihTdHJpbmcgcG9zaXRpb24pIAorCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UG9zaXRpb24oU3RyaW5nIHBvc2l0aW9uKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5SGlnaGVyU2FsYXJ5KFN0cmluZyBuYW1lKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlIaWdoZXJTYWxhcnkoU3RyaW5nIG5hbWUpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlTYWxhcnlSYW5nZShkb3VibGUgbG93LCBkb3VibGUgaGlnaCkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U2FsYXJ5UmFuZ2UoZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlMZWFndWUoTG9jYWxMZWFndWUgbGVhZ3VlKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlMZWFndWUoTG9jYWxMZWFndWUgbGVhZ3VlKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U3BvcnQoU3RyaW5nIHNwb3J0KSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlTcG9ydChTdHJpbmcgc3BvcnQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlDaXR5KFN0cmluZyBjaXR5KSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlDaXR5KFN0cmluZyBjaXR5KQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEFsbCgpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZE5vdE9uVGVhbSgpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmROb3RPblRlYW0oKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UG9zaXRpb25BbmROYW1lKFN0cmluZyBwb3NpdGlvbiwgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UG9zaXRpb25BbmROYW1lKFN0cmluZyBwb3NpdGlvbiwKICAgICAgICAgU3RyaW5nIG5hbWUpIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlUZXN0IChTdHJpbmcgcGFybTEsIFN0cmluZyBwYXJtMiwgU3RyaW5nIHBhcm0zKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UG9zaXRpb25zR29hbGtlZXBlck9yRGVmZW5kZXIoKQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOyAgIAkKLSAgICAgICAgCisgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CisKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlOYW1lRW5kaW5nV2l0aE9OKCkKLSAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsgICAJCisgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlOdWxsTmFtZSgpCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247ICAgCQorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5VGVhbShMb2NhbFRlYW0gdGVhbSkKLSAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsgICAJICAgICAgICAKLSAgICAgICAgCisgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CisKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlTYWxhcmF5V2l0aEFyaXRobWV0aWNGdW5jdGlvbkFCUyhkb3VibGUgc2FsYXJheSkKLSAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsgICAgICAgCisgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlTYWxhcmF5V2l0aEFyaXRobWV0aWNGdW5jdGlvblNRUlQoZG91YmxlIHNhbGFyYXkpCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247ICAgICAgIAotICAgICAgICAKKyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2VqYi90ZWFtL0xvY2FsVGVhbS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2VqYi90ZWFtL0xvY2FsVGVhbS5qYXZhCmluZGV4IDkxNGE0Y2IuLmY4N2Y1ZWUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9lamIvdGVhbS9Mb2NhbFRlYW0uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZWpiL3RlYW0vTG9jYWxUZWFtLmphdmEKQEAgLTMxLDggKzMxLDggQEAKICAgICBwdWJsaWMgdm9pZCBhZGRQbGF5ZXIoTG9jYWxQbGF5ZXIgcGxheWVyKTsKICAgICBwdWJsaWMgdm9pZCBkcm9wUGxheWVyKExvY2FsUGxheWVyIHBsYXllcik7CiAgICAgcHVibGljIGRvdWJsZSBnZXRTYWxhcnlPZlBsYXllcihTdHJpbmcgcGxheWVyTmFtZSk7Ci0gICAgcHVibGljIFN0cmluZyBnZXRUZWFtTmFtZVdpdGhTdHJpbmdmdW5jdGlvblRlc3RzMSgpOyAKLSAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1OYW1lV2l0aFN0cmluZ2Z1bmN0aW9uVGVzdHMyKCk7IAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czMoKTsgCi0gICAgCisgICAgcHVibGljIFN0cmluZyBnZXRUZWFtTmFtZVdpdGhTdHJpbmdmdW5jdGlvblRlc3RzMSgpOworICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czIoKTsKKyAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1OYW1lV2l0aFN0cmluZ2Z1bmN0aW9uVGVzdHMzKCk7CisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9lamIvdGVhbS9Mb2NhbFRlYW1Ib21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZWpiL3RlYW0vTG9jYWxUZWFtSG9tZS5qYXZhCmluZGV4IDg4NDY1N2UuLmM5ZTJhMWUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9lamIvdGVhbS9Mb2NhbFRlYW1Ib21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2VqYi90ZWFtL0xvY2FsVGVhbUhvbWUuamF2YQpAQCAtMjIsMTcgKzIyLDE3IEBACiBpbXBvcnQgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uOwogCiBwdWJsaWMgaW50ZXJmYWNlIExvY2FsVGVhbUhvbWUgZXh0ZW5kcyBFSkJMb2NhbEhvbWUgewotICAgIAorCiAgICAgcHVibGljIExvY2FsVGVhbSBjcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBjaXR5KQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIExvY2FsVGVhbSBmaW5kQnlQcmltYXJ5S2V5IChTdHJpbmcgaWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEFsbCgpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247Ci0gICAgCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UGxheWVyQW5kTGVhZ3VlKExvY2FsUGxheWVyIHBsYXllciwgCisKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQbGF5ZXJBbmRMZWFndWUoTG9jYWxQbGF5ZXIgcGxheWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZWpiL3RlYW0vUGxheWVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2VqYi90ZWFtL1BsYXllckJlYW4uamF2YQppbmRleCA0NGIwYThlLi43Y2QyODkwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZWpiL3RlYW0vUGxheWVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9lamIvdGVhbS9QbGF5ZXJCZWFuLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIAogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UGxheWVySWQoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRQbGF5ZXJJZChTdHJpbmcgaWQpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXROYW1lKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7CiAKQEAgLTUyLDIwICs1MiwyMCBAQAogICAgIHB1YmxpYyBhYnN0cmFjdCBDb2xsZWN0aW9uIGVqYlNlbGVjdFNwb3J0cyhMb2NhbFBsYXllciBwbGF5ZXIpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgCisKKwogICAgIC8vIEJ1c2luZXNzIG1ldGhvZHMKIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGdldExlYWd1ZXMoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKIAotICAgICAgICAgTG9jYWxQbGF5ZXIgcGxheWVyID0gCisgICAgICAgICBMb2NhbFBsYXllciBwbGF5ZXIgPQogICAgICAgICAgICAgICh0ZWFtLkxvY2FsUGxheWVyKWNvbnRleHQuZ2V0RUpCTG9jYWxPYmplY3QoKTsKICAgICAgICAgIHJldHVybiBlamJTZWxlY3RMZWFndWVzKHBsYXllcik7CiAgICAgfQogCiAgICAgcHVibGljIENvbGxlY3Rpb24gZ2V0U3BvcnRzKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7CiAKLSAgICAgICAgIExvY2FsUGxheWVyIHBsYXllciA9IAorICAgICAgICAgTG9jYWxQbGF5ZXIgcGxheWVyID0KICAgICAgICAgICAgICAodGVhbS5Mb2NhbFBsYXllciljb250ZXh0LmdldEVKQkxvY2FsT2JqZWN0KCk7CiAgICAgICAgICByZXR1cm4gZWpiU2VsZWN0U3BvcnRzKHBsYXllcik7CiAgICAgfQpAQCAtODIsMzIgKzgyLDMyIEBACiAgICAgICAgIHNldFNhbGFyeShzYWxhcnkpOwogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBwb3NpdGlvbiwKICAgICAgICAgZG91YmxlIHNhbGFyeSkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7IH0KIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBjdHgpIHsKICAgICAgICAgY29udGV4dCA9IGN0eDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKSB7CiAgICAgICAgIGNvbnRleHQgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKICAgICAgICAgRGVidWcucHJpbnQoIlBsYXllckJlYW4gZWpiUmVtb3ZlIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKICAgICAgICAgRGVidWcucHJpbnQoIlBsYXllckJlYW4gZWpiTG9hZCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUGxheWVyQmVhbiBlamJTdG9yZSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7IH0KIAogfSAvLyBQbGF5ZXJCZWFuIGNsYXNzCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZWpiL3RlYW0vUGxheWVySG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2VqYi90ZWFtL1BsYXllckhvbWUuamF2YQppbmRleCBkZWQ5NzI0Li44NDU5ODUyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZWpiL3RlYW0vUGxheWVySG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9lamIvdGVhbS9QbGF5ZXJIb21lLmphdmEKQEAgLTI2LDM1ICsyNiwzNSBAQAogICAgIHB1YmxpYyBQbGF5ZXIgY3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgcG9zaXRpb24sCiAgICAgICAgIGRvdWJsZSBzYWxhcnkpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBQbGF5ZXIgZmluZEJ5UHJpbWFyeUtleSAoU3RyaW5nIGlkKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247Ci0gICAgCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UG9zaXRpb24oU3RyaW5nIHBvc2l0aW9uKSAKKworICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBvc2l0aW9uKFN0cmluZyBwb3NpdGlvbikKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5SGlnaGVyU2FsYXJ5KFN0cmluZyBuYW1lKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlIaWdoZXJTYWxhcnkoU3RyaW5nIG5hbWUpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVNhbGFyeVJhbmdlKGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlTYWxhcnlSYW5nZShkb3VibGUgbG93LCBkb3VibGUgaGlnaCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCi0vLyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlMZWFndWUoTGVhZ3VlIGxlYWd1ZSkgCisvLyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlMZWFndWUoTGVhZ3VlIGxlYWd1ZSkKIC8vICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlTcG9ydChTdHJpbmcgc3BvcnQpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVNwb3J0KFN0cmluZyBzcG9ydCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5Q2l0eShTdHJpbmcgY2l0eSkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5Q2l0eShTdHJpbmcgY2l0eSkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEFsbCgpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kTm90T25UZWFtKCkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZE5vdE9uVGVhbSgpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBvc2l0aW9uQW5kTmFtZShTdHJpbmcgcG9zaXRpb24sIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBvc2l0aW9uQW5kTmFtZShTdHJpbmcgcG9zaXRpb24sCiAgICAgICAgIFN0cmluZyBuYW1lKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlUZXN0IChTdHJpbmcgcGFybTEsIFN0cmluZyBwYXJtMiwgU3RyaW5nIHBhcm0zKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2VqYi90ZWFtL1RlYW1CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZWpiL3RlYW0vVGVhbUJlYW4uamF2YQppbmRleCA3NGZhNGQ3Li5iODUyZWMzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZWpiL3RlYW0vVGVhbUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZWpiL3RlYW0vVGVhbUJlYW4uamF2YQpAQCAtMzAsNyArMzAsNyBAQAogCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRUZWFtSWQoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRUZWFtSWQoU3RyaW5nIGlkKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0TmFtZSgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOwogCkBAIC0zOSw3ICszOSw3IEBACiAKIAogICAgIC8vIEFjY2VzcyBtZXRob2RzIGZvciByZWxhdGlvbnNoaXAgZmllbGRzCi0gICAgICAgICAgICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgQ29sbGVjdGlvbiBnZXRQbGF5ZXJzKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0UGxheWVycyhDb2xsZWN0aW9uIHBsYXllcnMpOwogCkBAIC01Miw1NSArNTIsNTUgQEAKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZWpiU2VsZWN0QnlOYW1lV2l0aENPTkNBVChTdHJpbmcgcGFydDEsIFN0cmluZyBwYXJ0MikKLSAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsJCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CisKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGVqYlNlbGVjdEJ5TmFtZVN1YnN0cmluZyhTdHJpbmcgc3Vic3RyaW5nKQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwkKKyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZWpiU2VsZWN0TmFtZUxvY2F0ZShTdHJpbmcgc3Vic3RyaW5nKQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwkKKyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgLy8gQnVzaW5lc3MgbWV0aG9kcwogCiAgICAgcHVibGljIGRvdWJsZSBnZXRTYWxhcnlPZlBsYXllcihTdHJpbmcgcGxheWVyTmFtZSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7CiAgICAgICAgIExvY2FsVGVhbSB0ZWFtID0gKHRlYW0uTG9jYWxUZWFtKWNvbnRleHQuZ2V0RUpCTG9jYWxPYmplY3QoKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGVqYlNlbGVjdFNhbGFyeU9mUGxheWVySW5UZWFtKHRlYW0sIHBsYXllck5hbWUpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgcHVibGljIFN0cmluZyBnZXRUZWFtTmFtZVdpdGhTdHJpbmdmdW5jdGlvblRlc3RzMSgpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBTdHJpbmdCdWZmZXIgb3V0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogLy8gICAgICAgIExvY2FsVGVhbSB0ZWFtID0gKHRlYW0uTG9jYWxUZWFtKSBjb250ZXh0LmdldEVKQkxvY2FsT2JqZWN0KCk7CiAvLyAgICAgICAgb3V0LmFwcGVuZCgiPEJSPk5hbWUgb2YgVGVhbSA6ICIgKyB0ZWFtLmdldE5hbWUoKSk7Ci0gICAgICAgIG91dC5hcHBlbmQoIjxCUj4iKTsJCQorICAgICAgICBvdXQuYXBwZW5kKCI8QlI+Iik7CiAgICAgICAgIG91dC5hcHBlbmQoZWpiU2VsZWN0QnlOYW1lV2l0aENPTkNBVCgiQ3IiLCAib3dzIikpOwogICAgICAgICBvdXQuYXBwZW5kKCI8QlI+Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBvdXQudG9TdHJpbmcoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1OYW1lV2l0aFN0cmluZ2Z1bmN0aW9uVGVzdHMyKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIFN0cmluZ0J1ZmZlciBvdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgIG91dC5hcHBlbmQoZWpiU2VsZWN0QnlOYW1lU3Vic3RyaW5nKCJhYWFhQ3Jvd3NhYWFhYSIpKTsKICAgICAgICAgb3V0LmFwcGVuZCgiPEJSPiIpOwogCiAgICAgICAgIHJldHVybiBvdXQudG9TdHJpbmcoKTsKICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRUZWFtTmFtZVdpdGhTdHJpbmdmdW5jdGlvblRlc3RzMygpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBTdHJpbmdCdWZmZXIgb3V0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICAgICBvdXQuYXBwZW5kKGVqYlNlbGVjdE5hbWVMb2NhdGUoInJvdyIpKTsKICAgICAgICAgb3V0LmFwcGVuZCgiPEJSPiIpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gb3V0LnRvU3RyaW5nKCk7CiAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldENvcHlPZlBsYXllcnMoKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlRlYW1CZWFuIGdldENvcHlPZlBsYXllcnMiKTsKQEAgLTE1MSwzMCArMTUxLDMwIEBACiAgICAgICAgIHNldENpdHkoY2l0eSk7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGNpdHkpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24geyB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgY3R4KSB7CiAgICAgICAgIGNvbnRleHQgPSBjdHg7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgewogICAgICAgICBjb250ZXh0ID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJUZWFtQmVhbiBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiVGVhbUJlYW4gZWpiTG9hZCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiVGVhbUJlYW4gZWpiU3RvcmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7IH0KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZWpiL3RlYW0vVGVhbUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9lamIvdGVhbS9UZWFtSG9tZS5qYXZhCmluZGV4IGZlMTMwNDQuLmJjZmU0MzkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9lamIvdGVhbS9UZWFtSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9lamIvdGVhbS9UZWFtSG9tZS5qYXZhCkBAIC0yNSwxNCArMjUsMTQgQEAKIAogICAgIHB1YmxpYyBUZWFtIGNyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGNpdHkpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBUZWFtIGZpbmRCeVByaW1hcnlLZXkgKFN0cmluZyBpZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEFsbCgpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247Ci0gICAgCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UGxheWVyQW5kTGVhZ3VlVmlhUmVtb3RlKFBsYXllciBwbGF5ZXIsIAorCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UGxheWVyQW5kTGVhZ3VlVmlhUmVtb3RlKFBsYXllciBwbGF5ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlYWd1ZSBsZWFndWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2VqYi91dGlsL1BsYXllckRldGFpbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9lamIvdXRpbC9QbGF5ZXJEZXRhaWxzLmphdmEKaW5kZXggODEwNDFjMi4uNDc2NWJjZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL2VqYi91dGlsL1BsYXllckRldGFpbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvZWpiL3V0aWwvUGxheWVyRGV0YWlscy5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgcG9zaXRpb247CiAgICAgcHJpdmF0ZSBkb3VibGUgc2FsYXJ5OwogCi0gICAgcHVibGljIFBsYXllckRldGFpbHMgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBwb3NpdGlvbiwgCisgICAgcHVibGljIFBsYXllckRldGFpbHMgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBwb3NpdGlvbiwKICAgICAgICAgZG91YmxlIHNhbGFyeSkgewogCiAgICAgICAgIHRoaXMuaWQgPSBpZDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9zZXJ2bGV0L1Jvc3RlclNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9zZXJ2bGV0L1Jvc3RlclNlcnZsZXQuamF2YQppbmRleCA4MWFkZTA0Li42YTNjOTlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvc2VydmxldC9Sb3N0ZXJTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL3NlcnZsZXQvUm9zdGVyU2VydmxldC5qYXZhCkBAIC04NCw3ICs4NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvc3RlckhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgIFJvc3RlciBteVJvc3RlciA9IGhvbWUuY3JlYXRlKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAvLyBkZWxldGluZyBhbGwgZXhpc2l0aW5nIERCLWVudHJpZXMKICAgICAgICAgICAgbXlSb3N0ZXIuY2xlYW5VcCgpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvc3FsL1Jvc3RlclZDQXBwX2RiMi5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvc3FsL1Jvc3RlclZDQXBwX2RiMi5zcWwKaW5kZXggNzc1OWVkMS4uOWUxMDVhYSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL3NxbC9Sb3N0ZXJWQ0FwcF9kYjIuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9zcWwvUm9zdGVyVkNBcHBfZGIyLnNxbApAQCAtNyw0MCArNyw0MCBAQAogRFJPUCBUQUJMRSBURUFNOwogRFJPUCBUQUJMRSBMRUFHVUU7CiAKLUNSRUFURSBUQUJMRSBQTEFZRVIgCitDUkVBVEUgVEFCTEUgUExBWUVSCiAoCi0JUExBWUVSX0lEIFZBUkNIQVIoMjU1KSAJUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAotCU5BTUUgVkFSQ0hBUigyNTUpLCAKLQlQT1NJVElPTiBWQVJDSEFSKDI1NSksIAotCVNBTEFSWSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMLAotICAgIAlWRVJTSU9OIE5VTUVSSUMoMTkpICAgICAJTk9UIE5VTEwKKyAgICBQTEFZRVJfSUQgVkFSQ0hBUigyNTUpICAgICBQUklNQVJZIEtFWSBOT1QgTlVMTCwKKyAgICBOQU1FIFZBUkNIQVIoMjU1KSwKKyAgICBQT1NJVElPTiBWQVJDSEFSKDI1NSksCisgICAgU0FMQVJZIERPVUJMRSBQUkVDSVNJT04gTk9UIE5VTEwsCisgICAgICAgIFZFUlNJT04gTlVNRVJJQygxOSkgICAgICAgICBOT1QgTlVMTAogKTsKIAotQ1JFQVRFIFRBQkxFIExFQUdVRSAKK0NSRUFURSBUQUJMRSBMRUFHVUUKICgKLQlMRUFHVUVfSUQgVkFSQ0hBUigyNTUpIAlQUklNQVJZIEtFWSBOT1QgTlVMTCwgCi0JTkFNRSBWQVJDSEFSKDI1NSksIAotCVNQT1JUIFZBUkNIQVIoMjU1KSwKLSAgICAJVkVSU0lPTiBOVU1FUklDKDE5KSAgICAgCU5PVCBOVUxMCisgICAgTEVBR1VFX0lEIFZBUkNIQVIoMjU1KSAgICAgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgTkFNRSBWQVJDSEFSKDI1NSksCisgICAgU1BPUlQgVkFSQ0hBUigyNTUpLAorICAgICAgICBWRVJTSU9OIE5VTUVSSUMoMTkpICAgICAgICAgTk9UIE5VTEwKICk7CiAKLUNSRUFURSBUQUJMRSBURUFNIAorQ1JFQVRFIFRBQkxFIFRFQU0KICgKLQlURUFNX0lEIFZBUkNIQVIoMjU1KSAJUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAotCUNJVFkgVkFSQ0hBUigyNTUpLCAKLQlOQU1FIFZBUkNIQVIoMjU1KSwKLQlMRUFHVUVfSUQgVkFSQ0hBUigyNTUpLAotICAgIAlWRVJTSU9OIE5VTUVSSUMoMTkpICAgICAJTk9UIE5VTEwsCi0JRk9SRUlHTiBLRVkgKExFQUdVRV9JRCkgUkVGRVJFTkNFUyBMRUFHVUUgKExFQUdVRV9JRCkKKyAgICBURUFNX0lEIFZBUkNIQVIoMjU1KSAgICAgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgQ0lUWSBWQVJDSEFSKDI1NSksCisgICAgTkFNRSBWQVJDSEFSKDI1NSksCisgICAgTEVBR1VFX0lEIFZBUkNIQVIoMjU1KSwKKyAgICAgICAgVkVSU0lPTiBOVU1FUklDKDE5KSAgICAgICAgIE5PVCBOVUxMLAorICAgIEZPUkVJR04gS0VZIChMRUFHVUVfSUQpIFJFRkVSRU5DRVMgTEVBR1VFIChMRUFHVUVfSUQpCiApOwogCi1DUkVBVEUgVEFCTEUgVEVBTVBMQVlFUiAKK0NSRUFURSBUQUJMRSBURUFNUExBWUVSCiAoCi0JUExBWUVSX0lEIFZBUkNIQVIoMjU1KSAJTk9UIE5VTEwsIAotICAgICAgICBURUFNX0lEIFZBUkNIQVIoMjU1KSAJTk9UIE5VTEwsIAorICAgIFBMQVlFUl9JRCBWQVJDSEFSKDI1NSkgICAgIE5PVCBOVUxMLAorICAgICAgICBURUFNX0lEIFZBUkNIQVIoMjU1KSAgICAgTk9UIE5VTEwsCiAgICAgICAgIENPTlNUUkFJTlQgUEtfVEVBTVBMQVlFUiBQUklNQVJZIEtFWSAoUExBWUVSX0lELCBURUFNX0lEKSwKLQlGT1JFSUdOIEtFWSAoVEVBTV9JRCkgICBSRUZFUkVOQ0VTIFRFQU0gKFRFQU1fSUQpLAotCUZPUkVJR04gS0VZIChQTEFZRVJfSUQpIFJFRkVSRU5DRVMgUExBWUVSIChQTEFZRVJfSUQpCisgICAgRk9SRUlHTiBLRVkgKFRFQU1fSUQpICAgUkVGRVJFTkNFUyBURUFNIChURUFNX0lEKSwKKyAgICBGT1JFSUdOIEtFWSAoUExBWUVSX0lEKSBSRUZFUkVOQ0VTIFBMQVlFUiAoUExBWUVSX0lEKQogKTsKIAogY29tbWl0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL3NxbC9Sb3N0ZXJWQ0FwcF9kZXJieS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvc3FsL1Jvc3RlclZDQXBwX2RlcmJ5LnNxbAppbmRleCA5MDE3YTcyLi5iMDY0ODI4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvc3FsL1Jvc3RlclZDQXBwX2RlcmJ5LnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvc3FsL1Jvc3RlclZDQXBwX2RlcmJ5LnNxbApAQCAtNyw0MCArNyw0MCBAQAogRFJPUCBUQUJMRSBURUFNOwogRFJPUCBUQUJMRSBMRUFHVUU7CiAKLUNSRUFURSBUQUJMRSBQTEFZRVIgCitDUkVBVEUgVEFCTEUgUExBWUVSCiAoCi0JUExBWUVSX0lEIFZBUkNIQVIoMjU1KSAJUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAotCU5BTUUgVkFSQ0hBUigyNTUpLCAKLQlQT1NJVElPTiBWQVJDSEFSKDI1NSksIAotCVNBTEFSWSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMLAotICAgIFZFUlNJT04gTlVNRVJJQygxOSkgICAgIAlOT1QgTlVMTAorICAgIFBMQVlFUl9JRCBWQVJDSEFSKDI1NSkgICAgIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgIE5BTUUgVkFSQ0hBUigyNTUpLAorICAgIFBPU0lUSU9OIFZBUkNIQVIoMjU1KSwKKyAgICBTQUxBUlkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTCwKKyAgICBWRVJTSU9OIE5VTUVSSUMoMTkpICAgICAgICAgTk9UIE5VTEwKICk7CiAKLUNSRUFURSBUQUJMRSBMRUFHVUUgCitDUkVBVEUgVEFCTEUgTEVBR1VFCiAoCi0JTEVBR1VFX0lEIFZBUkNIQVIoMjU1KSAJUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAotCU5BTUUgVkFSQ0hBUigyNTUpLCAKLQlTUE9SVCBWQVJDSEFSKDI1NSksCi0gICAgCVZFUlNJT04gTlVNRVJJQygxOSkgICAgIAlOT1QgTlVMTAorICAgIExFQUdVRV9JRCBWQVJDSEFSKDI1NSkgICAgIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgIE5BTUUgVkFSQ0hBUigyNTUpLAorICAgIFNQT1JUIFZBUkNIQVIoMjU1KSwKKyAgICAgICAgVkVSU0lPTiBOVU1FUklDKDE5KSAgICAgICAgIE5PVCBOVUxMCiApOwogCi1DUkVBVEUgVEFCTEUgVEVBTSAKK0NSRUFURSBUQUJMRSBURUFNCiAoCi0JVEVBTV9JRCBWQVJDSEFSKDI1NSkgCVBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLQlDSVRZIFZBUkNIQVIoMjU1KSwgCi0JTkFNRSBWQVJDSEFSKDI1NSksCi0JTEVBR1VFX0lEIFZBUkNIQVIoMjU1KSwKLSAgICBWRVJTSU9OIE5VTUVSSUMoMTkpICAgICAJTk9UIE5VTEwsCi0JRk9SRUlHTiBLRVkgKExFQUdVRV9JRCkgUkVGRVJFTkNFUyBMRUFHVUUgKExFQUdVRV9JRCkKKyAgICBURUFNX0lEIFZBUkNIQVIoMjU1KSAgICAgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgQ0lUWSBWQVJDSEFSKDI1NSksCisgICAgTkFNRSBWQVJDSEFSKDI1NSksCisgICAgTEVBR1VFX0lEIFZBUkNIQVIoMjU1KSwKKyAgICBWRVJTSU9OIE5VTUVSSUMoMTkpICAgICAgICAgTk9UIE5VTEwsCisgICAgRk9SRUlHTiBLRVkgKExFQUdVRV9JRCkgUkVGRVJFTkNFUyBMRUFHVUUgKExFQUdVRV9JRCkKICk7CiAKLUNSRUFURSBUQUJMRSBURUFNUExBWUVSIAorQ1JFQVRFIFRBQkxFIFRFQU1QTEFZRVIKICgKLQlQTEFZRVJfSUQgVkFSQ0hBUigyNTUpIAlOT1QgTlVMTCwgCi0gICAgVEVBTV9JRCBWQVJDSEFSKDI1NSkgCU5PVCBOVUxMLCAKKyAgICBQTEFZRVJfSUQgVkFSQ0hBUigyNTUpICAgICBOT1QgTlVMTCwKKyAgICBURUFNX0lEIFZBUkNIQVIoMjU1KSAgICAgTk9UIE5VTEwsCiAgICAgQ09OU1RSQUlOVCBQS19URUFNUExBWUVSIFBSSU1BUlkgS0VZIChQTEFZRVJfSUQsIFRFQU1fSUQpLAotCUZPUkVJR04gS0VZIChURUFNX0lEKSAgIFJFRkVSRU5DRVMgVEVBTSAoVEVBTV9JRCksCi0JRk9SRUlHTiBLRVkgKFBMQVlFUl9JRCkgUkVGRVJFTkNFUyBQTEFZRVIgKFBMQVlFUl9JRCkKKyAgICBGT1JFSUdOIEtFWSAoVEVBTV9JRCkgICBSRUZFUkVOQ0VTIFRFQU0gKFRFQU1fSUQpLAorICAgIEZPUkVJR04gS0VZIChQTEFZRVJfSUQpIFJFRkVSRU5DRVMgUExBWUVSIChQTEFZRVJfSUQpCiApOwogCiBDUkVBVEUgVFJJR0dFUiBUX0xFQUdVRQpAQCAtNDksNyArNDksNyBAQAogICAgICAgICAgICAgT0xEIEFTIE9fUk9XCiAgICBGT1IgRUFDSCBST1cgTU9ERSBEQjJTUUwKICAgIFVQREFURSBMRUFHVUUgU0VUIHZlcnNpb24gPSBPX1JPVy52ZXJzaW9uICsgMQotCSAgIFdIRVJFIExFQUdVRV9JRCA9IE9fUk9XLkxFQUdVRV9JRAorICAgICAgIFdIRVJFIExFQUdVRV9JRCA9IE9fUk9XLkxFQUdVRV9JRAogOwogCiAKQEAgLTU5LDcgKzU5LDcgQEAKICAgICAgICAgICAgIE9MRCBBUyBPX1JPVwogICAgRk9SIEVBQ0ggUk9XIE1PREUgREIyU1FMCiAgICBVUERBVEUgUExBWUVSIFNFVCB2ZXJzaW9uID0gT19ST1cudmVyc2lvbiArIDEKLQkgICBXSEVSRSBQTEFZRVJfSUQgPSBPX1JPVy5QTEFZRVJfSUQKKyAgICAgICBXSEVSRSBQTEFZRVJfSUQgPSBPX1JPVy5QTEFZRVJfSUQKIDsKIAogQ1JFQVRFIFRSSUdHRVIgVF9URUFNCkBAIC02OCw1ICs2OCw1IEBACiAgICAgICAgICAgICBPTEQgQVMgT19ST1cKICAgIEZPUiBFQUNIIFJPVyBNT0RFIERCMlNRTAogICAgVVBEQVRFIFRFQU0gU0VUIHZlcnNpb24gPSBPX1JPVy52ZXJzaW9uICsgMQotCSAgIFdIRVJFIFRFQU1fSUQgPSBPX1JPVy5URUFNX0lECisgICAgICAgV0hFUkUgVEVBTV9JRCA9IE9fUk9XLlRFQU1fSUQKIDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9zcWwvUm9zdGVyVkNBcHBfaWZ4LnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9zcWwvUm9zdGVyVkNBcHBfaWZ4LnNxbAppbmRleCAzYjMxZDVhLi4xZGJkMDg1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvc3FsL1Jvc3RlclZDQXBwX2lmeC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL3NxbC9Sb3N0ZXJWQ0FwcF9pZnguc3FsCkBAIC03LDQwICs3LDQwIEBACiBEUk9QIFRBQkxFIFRFQU0gOwogRFJPUCBUQUJMRSBMRUFHVUUgOwogCi1DUkVBVEUgVEFCTEUgUExBWUVSIAorQ1JFQVRFIFRBQkxFIFBMQVlFUgogKAotCVBMQVlFUl9JRCBWQVJDSEFSKDEyNykgUFJJTUFSWSBLRVksIAotCU5BTUUgVkFSQ0hBUigxMjcpLCAKLQlQT1NJVElPTiBWQVJDSEFSKDEyNyksIAotCVNBTEFSWSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMICwKLQlWRVJTSU9OICAgREVDSU1BTCgxOSkgIE5PVCBOVUxMIAorICAgIFBMQVlFUl9JRCBWQVJDSEFSKDEyNykgUFJJTUFSWSBLRVksCisgICAgTkFNRSBWQVJDSEFSKDEyNyksCisgICAgUE9TSVRJT04gVkFSQ0hBUigxMjcpLAorICAgIFNBTEFSWSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMICwKKyAgICBWRVJTSU9OICAgREVDSU1BTCgxOSkgIE5PVCBOVUxMCiApOwogCi1DUkVBVEUgVEFCTEUgTEVBR1VFIAorQ1JFQVRFIFRBQkxFIExFQUdVRQogKAotCUxFQUdVRV9JRCBWQVJDSEFSKDEyNykgUFJJTUFSWSBLRVksIAotCU5BTUUgVkFSQ0hBUigxMjcpLCAKLQlTUE9SVCBWQVJDSEFSKDEyNyksCi0JVkVSU0lPTiAgIERFQ0lNQUwoMTkpICBOT1QgTlVMTCAKKyAgICBMRUFHVUVfSUQgVkFSQ0hBUigxMjcpIFBSSU1BUlkgS0VZLAorICAgIE5BTUUgVkFSQ0hBUigxMjcpLAorICAgIFNQT1JUIFZBUkNIQVIoMTI3KSwKKyAgICBWRVJTSU9OICAgREVDSU1BTCgxOSkgIE5PVCBOVUxMCiApOwogCi1DUkVBVEUgVEFCTEUgVEVBTSAKK0NSRUFURSBUQUJMRSBURUFNCiAoCi0JVEVBTV9JRCBWQVJDSEFSKDEyNykgUFJJTUFSWSBLRVksIAotCUNJVFkgVkFSQ0hBUigxMjcpLCAKLQlOQU1FIFZBUkNIQVIoMTI3KSwKLQlMRUFHVUVfSUQgVkFSQ0hBUigxMjcpLAotCVZFUlNJT04gICBERUNJTUFMKDE5KSAgTk9UIE5VTEwgLAotCUZPUkVJR04gS0VZIChMRUFHVUVfSUQpICAgUkVGRVJFTkNFUyBMRUFHVUUgKExFQUdVRV9JRCkKKyAgICBURUFNX0lEIFZBUkNIQVIoMTI3KSBQUklNQVJZIEtFWSwKKyAgICBDSVRZIFZBUkNIQVIoMTI3KSwKKyAgICBOQU1FIFZBUkNIQVIoMTI3KSwKKyAgICBMRUFHVUVfSUQgVkFSQ0hBUigxMjcpLAorICAgIFZFUlNJT04gICBERUNJTUFMKDE5KSAgTk9UIE5VTEwgLAorICAgIEZPUkVJR04gS0VZIChMRUFHVUVfSUQpICAgUkVGRVJFTkNFUyBMRUFHVUUgKExFQUdVRV9JRCkKICk7CiAKLUNSRUFURSBUQUJMRSBURUFNUExBWUVSIAorQ1JFQVRFIFRBQkxFIFRFQU1QTEFZRVIKICgKLQlQTEFZRVJfSUQgVkFSQ0hBUigxMjcpLCAKLSAgICAgICAgVEVBTV9JRCBWQVJDSEFSKDEyNyksIAorICAgIFBMQVlFUl9JRCBWQVJDSEFSKDEyNyksCisgICAgICAgIFRFQU1fSUQgVkFSQ0hBUigxMjcpLAogICAgICAgICBQUklNQVJZIEtFWSAoUExBWUVSX0lELCBURUFNX0lEKSwKLQlGT1JFSUdOIEtFWSAoVEVBTV9JRCkgICBSRUZFUkVOQ0VTIFRFQU0gKFRFQU1fSUQpLAotCUZPUkVJR04gS0VZIChQTEFZRVJfSUQpICAgUkVGRVJFTkNFUyBQTEFZRVIgKFBMQVlFUl9JRCkKKyAgICBGT1JFSUdOIEtFWSAoVEVBTV9JRCkgICBSRUZFUkVOQ0VTIFRFQU0gKFRFQU1fSUQpLAorICAgIEZPUkVJR04gS0VZIChQTEFZRVJfSUQpICAgUkVGRVJFTkNFUyBQTEFZRVIgKFBMQVlFUl9JRCkKICk7CiAKIGNvbW1pdDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9zcWwvUm9zdGVyVkNBcHBfbXNzcWwuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL3NxbC9Sb3N0ZXJWQ0FwcF9tc3NxbC5zcWwKaW5kZXggZjcxODNkZC4uYThkZjBlMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL3NxbC9Sb3N0ZXJWQ0FwcF9tc3NxbC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL3NxbC9Sb3N0ZXJWQ0FwcF9tc3NxbC5zcWwKQEAgLTEsNDggKzEsNDggQEAKIERST1AgVFJJR0dFUiBUX0xFQUdVRQotRFJPUCBUUklHR0VSIFRfUExBWUVSIAorRFJPUCBUUklHR0VSIFRfUExBWUVSCiBEUk9QIFRSSUdHRVIgVF9URUFNCiBnbwogCiBEUk9QIFRBQkxFIFRFQU1QTEFZRVIKLURST1AgVEFCTEUgUExBWUVSIAorRFJPUCBUQUJMRSBQTEFZRVIKIERST1AgVEFCTEUgVEVBTQogRFJPUCBUQUJMRSBMRUFHVUUKIGdvCiAKLUNSRUFURSBUQUJMRSBQTEFZRVIgCitDUkVBVEUgVEFCTEUgUExBWUVSCiAoCi0JUExBWUVSX0lEIFZBUkNIQVIoMjU1KSBwcmltYXJ5IGtleSBub3QgbnVsbCwgCi0JTkFNRSBWQVJDSEFSKDI1NSksCi0JUE9TSVRJT04gVkFSQ0hBUigyNTUpLCAKLQlTQUxBUlkgZG91YmxlIHByZWNpc2lvbiBub3QgbnVsbCwKLQlWRVJTSU9OIE5VTUVSSUMoMTkpIG5vdCBudWxsCisgICAgUExBWUVSX0lEIFZBUkNIQVIoMjU1KSBwcmltYXJ5IGtleSBub3QgbnVsbCwKKyAgICBOQU1FIFZBUkNIQVIoMjU1KSwKKyAgICBQT1NJVElPTiBWQVJDSEFSKDI1NSksCisgICAgU0FMQVJZIGRvdWJsZSBwcmVjaXNpb24gbm90IG51bGwsCisgICAgVkVSU0lPTiBOVU1FUklDKDE5KSBub3QgbnVsbAogKQogCi1jcmVhdGUgdGFibGUgTEVBR1VFIAorY3JlYXRlIHRhYmxlIExFQUdVRQogKAotCUxFQUdVRV9JRCBWQVJDSEFSKDI1NSkgcHJpbWFyeSBrZXkgbm90IG51bGwsIAotCU5BTUUgVkFSQ0hBUigyNTUpLAotCVNQT1JUIFZBUkNIQVIoMjU1KSwKLQlWRVJTSU9OIE5VTUVSSUMoMTkpIG5vdCBudWxsCisgICAgTEVBR1VFX0lEIFZBUkNIQVIoMjU1KSBwcmltYXJ5IGtleSBub3QgbnVsbCwKKyAgICBOQU1FIFZBUkNIQVIoMjU1KSwKKyAgICBTUE9SVCBWQVJDSEFSKDI1NSksCisgICAgVkVSU0lPTiBOVU1FUklDKDE5KSBub3QgbnVsbAogKQogCi1jcmVhdGUgdGFibGUgVEVBTSAKK2NyZWF0ZSB0YWJsZSBURUFNCiAoCi0JVEVBTV9JRCBWQVJDSEFSKDI1NSkgcHJpbWFyeSBrZXkgbm90IG51bGwsIAotCUNJVFkgVkFSQ0hBUigyNTUpLAotCU5BTUUgVkFSQ0hBUigyNTUpLAotCUxFQUdVRV9JRCBWQVJDSEFSKDI1NSksCi0JVkVSU0lPTiBOVU1FUklDKDE5KSBub3QgbnVsbCwKLQlmb3JlaWduIGtleSAoTEVBR1VFX0lEKSByZWZlcmVuY2VzIExFQUdVRSAoTEVBR1VFX0lEKQorICAgIFRFQU1fSUQgVkFSQ0hBUigyNTUpIHByaW1hcnkga2V5IG5vdCBudWxsLAorICAgIENJVFkgVkFSQ0hBUigyNTUpLAorICAgIE5BTUUgVkFSQ0hBUigyNTUpLAorICAgIExFQUdVRV9JRCBWQVJDSEFSKDI1NSksCisgICAgVkVSU0lPTiBOVU1FUklDKDE5KSBub3QgbnVsbCwKKyAgICBmb3JlaWduIGtleSAoTEVBR1VFX0lEKSByZWZlcmVuY2VzIExFQUdVRSAoTEVBR1VFX0lEKQogKQogCi1jcmVhdGUgdGFibGUgVEVBTVBMQVlFUiAKK2NyZWF0ZSB0YWJsZSBURUFNUExBWUVSCiAoCi0JUExBWUVSX0lEIFZBUkNIQVIoMjU1KSBub3QgbnVsbCwKLSAgICAJVEVBTV9JRCBWQVJDSEFSKDI1NSkgbm90IG51bGwsCi0gICAgCWNvbnN0cmFpbnQgUEtfVEVBTVBMQVlFUiBwcmltYXJ5IGtleSAoUExBWUVSX0lELCBURUFNX0lEKSwKLQlmb3JlaWduIGtleSAoVEVBTV9JRCkgcmVmZXJlbmNlcyBURUFNIChURUFNX0lEKSwKLQlmb3JlaWduIGtleSAoUExBWUVSX0lEKSByZWZlcmVuY2VzIFBMQVlFUiAoUExBWUVSX0lEKQorICAgIFBMQVlFUl9JRCBWQVJDSEFSKDI1NSkgbm90IG51bGwsCisgICAgICAgIFRFQU1fSUQgVkFSQ0hBUigyNTUpIG5vdCBudWxsLAorICAgICAgICBjb25zdHJhaW50IFBLX1RFQU1QTEFZRVIgcHJpbWFyeSBrZXkgKFBMQVlFUl9JRCwgVEVBTV9JRCksCisgICAgZm9yZWlnbiBrZXkgKFRFQU1fSUQpIHJlZmVyZW5jZXMgVEVBTSAoVEVBTV9JRCksCisgICAgZm9yZWlnbiBrZXkgKFBMQVlFUl9JRCkgcmVmZXJlbmNlcyBQTEFZRVIgKFBMQVlFUl9JRCkKICkKIAogZ28KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9zcWwvUm9zdGVyVkNBcHBfbXlzcWwuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL3NxbC9Sb3N0ZXJWQ0FwcF9teXNxbC5zcWwKaW5kZXggNzg5ZGJlYS4uZjJkMWUxMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL3NxbC9Sb3N0ZXJWQ0FwcF9teXNxbC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL3NxbC9Sb3N0ZXJWQ0FwcF9teXNxbC5zcWwKQEAgLTcsNDAgKzcsNDAgQEAKIERST1AgVEFCTEUgVEVBTSA7CiBEUk9QIFRBQkxFIExFQUdVRSA7CiAKLUNSRUFURSBUQUJMRSBQTEFZRVIgCitDUkVBVEUgVEFCTEUgUExBWUVSCiAoCi0JUExBWUVSX0lEIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwgCi0JTkFNRSBWQVJDSEFSKDI1NSksIAotCVBPU0lUSU9OIFZBUkNIQVIoMjU1KSwgCi0JU0FMQVJZIERPVUJMRSBQUkVDSVNJT04gTk9UIE5VTEwsCi0JVkVSU0lPTiAgIERFQ0lNQUwoMTkpICBOT1QgTlVMTAorICAgIFBMQVlFUl9JRCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksCisgICAgTkFNRSBWQVJDSEFSKDI1NSksCisgICAgUE9TSVRJT04gVkFSQ0hBUigyNTUpLAorICAgIFNBTEFSWSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMLAorICAgIFZFUlNJT04gICBERUNJTUFMKDE5KSAgTk9UIE5VTEwKICkgZW5naW5lPUlubm9EQjsKIAotQ1JFQVRFIFRBQkxFIExFQUdVRSAKK0NSRUFURSBUQUJMRSBMRUFHVUUKICgKLQlMRUFHVUVfSUQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLCAKLQlOQU1FIFZBUkNIQVIoMjU1KSwgCi0JU1BPUlQgVkFSQ0hBUigyNTUpLAotCVZFUlNJT04gICBERUNJTUFMKDE5KSAgTk9UIE5VTEwKKyAgICBMRUFHVUVfSUQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLAorICAgIE5BTUUgVkFSQ0hBUigyNTUpLAorICAgIFNQT1JUIFZBUkNIQVIoMjU1KSwKKyAgICBWRVJTSU9OICAgREVDSU1BTCgxOSkgIE5PVCBOVUxMCiApIGVuZ2luZT1Jbm5vREI7CiAKLUNSRUFURSBUQUJMRSBURUFNIAorQ1JFQVRFIFRBQkxFIFRFQU0KICgKLQlURUFNX0lEIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwgCi0JQ0lUWSBWQVJDSEFSKDI1NSksIAotCU5BTUUgVkFSQ0hBUigyNTUpLAotCUxFQUdVRV9JRCBWQVJDSEFSKDI1NSksCi0JVkVSU0lPTiAgIERFQ0lNQUwoMTkpICBOT1QgTlVMTCwKLQlGT1JFSUdOIEtFWSAoTEVBR1VFX0lEKSAgIFJFRkVSRU5DRVMgTEVBR1VFIChMRUFHVUVfSUQpCisgICAgVEVBTV9JRCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksCisgICAgQ0lUWSBWQVJDSEFSKDI1NSksCisgICAgTkFNRSBWQVJDSEFSKDI1NSksCisgICAgTEVBR1VFX0lEIFZBUkNIQVIoMjU1KSwKKyAgICBWRVJTSU9OICAgREVDSU1BTCgxOSkgIE5PVCBOVUxMLAorICAgIEZPUkVJR04gS0VZIChMRUFHVUVfSUQpICAgUkVGRVJFTkNFUyBMRUFHVUUgKExFQUdVRV9JRCkKICkgZW5naW5lPUlubm9EQjsKIAotQ1JFQVRFIFRBQkxFIFRFQU1QTEFZRVIgCitDUkVBVEUgVEFCTEUgVEVBTVBMQVlFUgogKAotCVBMQVlFUl9JRCBWQVJDSEFSKDI1NSksIAotICAgICAgICBURUFNX0lEIFZBUkNIQVIoMjU1KSwgCisgICAgUExBWUVSX0lEIFZBUkNIQVIoMjU1KSwKKyAgICAgICAgVEVBTV9JRCBWQVJDSEFSKDI1NSksCiAgICAgICAgIENPTlNUUkFJTlQgUEtfVEVBTVBMQVlFUiBQUklNQVJZIEtFWSAoUExBWUVSX0lELCBURUFNX0lEKSwKLQlGT1JFSUdOIEtFWSAoVEVBTV9JRCkgICBSRUZFUkVOQ0VTIFRFQU0gKFRFQU1fSUQpLAotCUZPUkVJR04gS0VZIChQTEFZRVJfSUQpICAgUkVGRVJFTkNFUyBQTEFZRVIgKFBMQVlFUl9JRCkKKyAgICBGT1JFSUdOIEtFWSAoVEVBTV9JRCkgICBSRUZFUkVOQ0VTIFRFQU0gKFRFQU1fSUQpLAorICAgIEZPUkVJR04gS0VZIChQTEFZRVJfSUQpICAgUkVGRVJFTkNFUyBQTEFZRVIgKFBMQVlFUl9JRCkKICkgZW5naW5lPUlubm9EQjsKIAogY29tbWl0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL3NxbC9Sb3N0ZXJWQ0FwcF9vcmEuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL3NxbC9Sb3N0ZXJWQ0FwcF9vcmEuc3FsCmluZGV4IDIyMjYyYzEuLjQ5M2E3NDEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9zcWwvUm9zdGVyVkNBcHBfb3JhLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvc3FsL1Jvc3RlclZDQXBwX29yYS5zcWwKQEAgLTcsNDAgKzcsNDAgQEAKIERST1AgVEFCTEUgVEVBTSA7CiBEUk9QIFRBQkxFIExFQUdVRSA7CiAKLUNSRUFURSBUQUJMRSBQTEFZRVIgCitDUkVBVEUgVEFCTEUgUExBWUVSCiAoCi0JUExBWUVSX0lEIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwgCi0JTkFNRSBWQVJDSEFSKDI1NSksIAotCVBPU0lUSU9OIFZBUkNIQVIoMjU1KSwgCi0JU0FMQVJZIERPVUJMRSBQUkVDSVNJT04gTk9UIE5VTEwsCi0JVkVSU0lPTiAgIE5VTUJFUigxOSkgIE5PVCBOVUxMCisgICAgUExBWUVSX0lEIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwKKyAgICBOQU1FIFZBUkNIQVIoMjU1KSwKKyAgICBQT1NJVElPTiBWQVJDSEFSKDI1NSksCisgICAgU0FMQVJZIERPVUJMRSBQUkVDSVNJT04gTk9UIE5VTEwsCisgICAgVkVSU0lPTiAgIE5VTUJFUigxOSkgIE5PVCBOVUxMCiApOwogCi1DUkVBVEUgVEFCTEUgTEVBR1VFIAorQ1JFQVRFIFRBQkxFIExFQUdVRQogKAotCUxFQUdVRV9JRCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksIAotCU5BTUUgVkFSQ0hBUigyNTUpLCAKLQlTUE9SVCBWQVJDSEFSKDI1NSksCi0JVkVSU0lPTiAgIE5VTUJFUigxOSkgIE5PVCBOVUxMCisgICAgTEVBR1VFX0lEIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwKKyAgICBOQU1FIFZBUkNIQVIoMjU1KSwKKyAgICBTUE9SVCBWQVJDSEFSKDI1NSksCisgICAgVkVSU0lPTiAgIE5VTUJFUigxOSkgIE5PVCBOVUxMCiApOwogCi1DUkVBVEUgVEFCTEUgVEVBTSAKK0NSRUFURSBUQUJMRSBURUFNCiAoCi0JVEVBTV9JRCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksIAotCUNJVFkgVkFSQ0hBUigyNTUpLCAKLQlOQU1FIFZBUkNIQVIoMjU1KSwKLQlMRUFHVUVfSUQgVkFSQ0hBUigyNTUpLAotCVZFUlNJT04gICBOVU1CRVIoMTkpICBOT1QgTlVMTCwKLQlGT1JFSUdOIEtFWSAoTEVBR1VFX0lEKSAgIFJFRkVSRU5DRVMgTEVBR1VFIChMRUFHVUVfSUQpCisgICAgVEVBTV9JRCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksCisgICAgQ0lUWSBWQVJDSEFSKDI1NSksCisgICAgTkFNRSBWQVJDSEFSKDI1NSksCisgICAgTEVBR1VFX0lEIFZBUkNIQVIoMjU1KSwKKyAgICBWRVJTSU9OICAgTlVNQkVSKDE5KSAgTk9UIE5VTEwsCisgICAgRk9SRUlHTiBLRVkgKExFQUdVRV9JRCkgICBSRUZFUkVOQ0VTIExFQUdVRSAoTEVBR1VFX0lEKQogKTsKIAotQ1JFQVRFIFRBQkxFIFRFQU1QTEFZRVIgCitDUkVBVEUgVEFCTEUgVEVBTVBMQVlFUgogKAotCVBMQVlFUl9JRCBWQVJDSEFSKDI1NSksIAotICAgICAgICBURUFNX0lEIFZBUkNIQVIoMjU1KSwgCisgICAgUExBWUVSX0lEIFZBUkNIQVIoMjU1KSwKKyAgICAgICAgVEVBTV9JRCBWQVJDSEFSKDI1NSksCiAgICAgICAgIENPTlNUUkFJTlQgUEtfVEVBTVBMQVlFUiBQUklNQVJZIEtFWSAoUExBWUVSX0lELCBURUFNX0lEKSwKLQlGT1JFSUdOIEtFWSAoVEVBTV9JRCkgICBSRUZFUkVOQ0VTIFRFQU0gKFRFQU1fSUQpLAotCUZPUkVJR04gS0VZIChQTEFZRVJfSUQpICAgUkVGRVJFTkNFUyBQTEFZRVIgKFBMQVlFUl9JRCkKKyAgICBGT1JFSUdOIEtFWSAoVEVBTV9JRCkgICBSRUZFUkVOQ0VTIFRFQU0gKFRFQU1fSUQpLAorICAgIEZPUkVJR04gS0VZIChQTEFZRVJfSUQpICAgUkVGRVJFTkNFUyBQTEFZRVIgKFBMQVlFUl9JRCkKICk7CiAKIGNvbW1pdDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9zcWwvUm9zdGVyVkNBcHBfcGJzLnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9zcWwvUm9zdGVyVkNBcHBfcGJzLnNxbAppbmRleCBiMjQzMzI1Li5lNWQ2OTg4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvc3FsL1Jvc3RlclZDQXBwX3Bicy5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL3NxbC9Sb3N0ZXJWQ0FwcF9wYnMuc3FsCkBAIC02LDQ1ICs2LDQ1IEBACiAKIGNvbW1pdDsKIAotQ1JFQVRFIFRBQkxFIFBMQVlFUiAKK0NSRUFURSBUQUJMRSBQTEFZRVIKICgKLQlQTEFZRVJfSUQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLCAKLQlOQU1FIFZBUkNIQVIoMjU1KSwgCi0JUE9TSVRJT04gVkFSQ0hBUigyNTUpLCAKLQlTQUxBUlkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTCwKLQlWRVJTSU9OIE5VTUJFUigxOSkgTk9UIE5VTEwKKyAgICBQTEFZRVJfSUQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLAorICAgIE5BTUUgVkFSQ0hBUigyNTUpLAorICAgIFBPU0lUSU9OIFZBUkNIQVIoMjU1KSwKKyAgICBTQUxBUlkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTCwKKyAgICBWRVJTSU9OIE5VTUJFUigxOSkgTk9UIE5VTEwKICk7CiAKIGNvbW1pdDsKIAotQ1JFQVRFIFRBQkxFIExFQUdVRSAKK0NSRUFURSBUQUJMRSBMRUFHVUUKICgKLQlMRUFHVUVfSUQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLCAKLQlOQU1FIFZBUkNIQVIoMjU1KSwgCi0JU1BPUlQgVkFSQ0hBUigyNTUpLAotCVZFUlNJT04gTlVNQkVSKDE5KSBOT1QgTlVMTAorICAgIExFQUdVRV9JRCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksCisgICAgTkFNRSBWQVJDSEFSKDI1NSksCisgICAgU1BPUlQgVkFSQ0hBUigyNTUpLAorICAgIFZFUlNJT04gTlVNQkVSKDE5KSBOT1QgTlVMTAogKTsKIAogY29tbWl0OwogCi1DUkVBVEUgVEFCTEUgVEVBTSAKK0NSRUFURSBUQUJMRSBURUFNCiAoCi0JVEVBTV9JRCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksIAotCUNJVFkgVkFSQ0hBUigyNTUpLCAKLQlOQU1FIFZBUkNIQVIoMjU1KSwKLQlMRUFHVUVfSUQgVkFSQ0hBUigyNTUpLAotCVZFUlNJT04gTlVNQkVSKDE5KSBOT1QgTlVMTCwKLSAgICAJQ09OU1RSQUlOVCBGS18xIEZPUkVJR04gS0VZIChMRUFHVUVfSUQpICAgUkVGRVJFTkNFUyBMRUFHVUUgKExFQUdVRV9JRCkKKyAgICBURUFNX0lEIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwKKyAgICBDSVRZIFZBUkNIQVIoMjU1KSwKKyAgICBOQU1FIFZBUkNIQVIoMjU1KSwKKyAgICBMRUFHVUVfSUQgVkFSQ0hBUigyNTUpLAorICAgIFZFUlNJT04gTlVNQkVSKDE5KSBOT1QgTlVMTCwKKyAgICAgICAgQ09OU1RSQUlOVCBGS18xIEZPUkVJR04gS0VZIChMRUFHVUVfSUQpICAgUkVGRVJFTkNFUyBMRUFHVUUgKExFQUdVRV9JRCkKICk7CiAKIGNvbW1pdDsKIAotQ1JFQVRFIFRBQkxFIFRFQU1QTEFZRVIgCitDUkVBVEUgVEFCTEUgVEVBTVBMQVlFUgogKAotCVBMQVlFUl9JRCBWQVJDSEFSKDI1NSksIAotCVRFQU1fSUQgVkFSQ0hBUigyNTUpLCAKLQlDT05TVFJBSU5UIEZLXzIgRk9SRUlHTiBLRVkgKFRFQU1fSUQpICAgUkVGRVJFTkNFUyBURUFNIChURUFNX0lEKSwKLQlDT05TVFJBSU5UIEZLXzMgRk9SRUlHTiBLRVkgKFBMQVlFUl9JRCkgICBSRUZFUkVOQ0VTIFBMQVlFUiAoUExBWUVSX0lEKQorICAgIFBMQVlFUl9JRCBWQVJDSEFSKDI1NSksCisgICAgVEVBTV9JRCBWQVJDSEFSKDI1NSksCisgICAgQ09OU1RSQUlOVCBGS18yIEZPUkVJR04gS0VZIChURUFNX0lEKSAgIFJFRkVSRU5DRVMgVEVBTSAoVEVBTV9JRCksCisgICAgQ09OU1RSQUlOVCBGS18zIEZPUkVJR04gS0VZIChQTEFZRVJfSUQpICAgUkVGRVJFTkNFUyBQTEFZRVIgKFBMQVlFUl9JRCkKICk7CiAKIGNvbW1pdDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9zcWwvUm9zdGVyVkNBcHBfcHNxbC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvc3FsL1Jvc3RlclZDQXBwX3BzcWwuc3FsCmluZGV4IDZlZTZiYTguLmI2YTdkMzEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9zcWwvUm9zdGVyVkNBcHBfcHNxbC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL3NxbC9Sb3N0ZXJWQ0FwcF9wc3FsLnNxbApAQCAtMyw0MCArMyw0MCBAQAogRFJPUCBUQUJMRSBURUFNIGNhc2NhZGU7CiBEUk9QIFRBQkxFIExFQUdVRSBjYXNjYWRlOwogCi1DUkVBVEUgVEFCTEUgUExBWUVSIAorQ1JFQVRFIFRBQkxFIFBMQVlFUgogKAotCVBMQVlFUl9JRCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksIAotCU5BTUUgVkFSQ0hBUigyNTUpLCAKLQlQT1NJVElPTiBWQVJDSEFSKDI1NSksIAotCVNBTEFSWSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMLAotCVZFUlNJT04gICBERUNJTUFMKDE5KSAgTk9UIE5VTEwKKyAgICBQTEFZRVJfSUQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLAorICAgIE5BTUUgVkFSQ0hBUigyNTUpLAorICAgIFBPU0lUSU9OIFZBUkNIQVIoMjU1KSwKKyAgICBTQUxBUlkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTCwKKyAgICBWRVJTSU9OICAgREVDSU1BTCgxOSkgIE5PVCBOVUxMCiApOwogCi1DUkVBVEUgVEFCTEUgTEVBR1VFIAorQ1JFQVRFIFRBQkxFIExFQUdVRQogKAotCUxFQUdVRV9JRCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksIAotCU5BTUUgVkFSQ0hBUigyNTUpLCAKLQlTUE9SVCBWQVJDSEFSKDI1NSksCi0JVkVSU0lPTiAgIERFQ0lNQUwoMTkpICBOT1QgTlVMTAorICAgIExFQUdVRV9JRCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksCisgICAgTkFNRSBWQVJDSEFSKDI1NSksCisgICAgU1BPUlQgVkFSQ0hBUigyNTUpLAorICAgIFZFUlNJT04gICBERUNJTUFMKDE5KSAgTk9UIE5VTEwKICk7CiAKLUNSRUFURSBUQUJMRSBURUFNIAorQ1JFQVRFIFRBQkxFIFRFQU0KICgKLQlURUFNX0lEIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwgCi0JQ0lUWSBWQVJDSEFSKDI1NSksIAotCU5BTUUgVkFSQ0hBUigyNTUpLAotCUxFQUdVRV9JRCBWQVJDSEFSKDI1NSksCi0JVkVSU0lPTiAgIERFQ0lNQUwoMTkpICBOT1QgTlVMTCwKLQlGT1JFSUdOIEtFWSAoTEVBR1VFX0lEKSAgIFJFRkVSRU5DRVMgTEVBR1VFIChMRUFHVUVfSUQpCisgICAgVEVBTV9JRCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksCisgICAgQ0lUWSBWQVJDSEFSKDI1NSksCisgICAgTkFNRSBWQVJDSEFSKDI1NSksCisgICAgTEVBR1VFX0lEIFZBUkNIQVIoMjU1KSwKKyAgICBWRVJTSU9OICAgREVDSU1BTCgxOSkgIE5PVCBOVUxMLAorICAgIEZPUkVJR04gS0VZIChMRUFHVUVfSUQpICAgUkVGRVJFTkNFUyBMRUFHVUUgKExFQUdVRV9JRCkKICk7CiAKLUNSRUFURSBUQUJMRSBURUFNUExBWUVSIAorQ1JFQVRFIFRBQkxFIFRFQU1QTEFZRVIKICgKLQlQTEFZRVJfSUQgVkFSQ0hBUigyNTUpLCAKLSAgICAgICAgVEVBTV9JRCBWQVJDSEFSKDI1NSksIAorICAgIFBMQVlFUl9JRCBWQVJDSEFSKDI1NSksCisgICAgICAgIFRFQU1fSUQgVkFSQ0hBUigyNTUpLAogICAgICAgICBDT05TVFJBSU5UIFBLX1RFQU1QTEFZRVIgUFJJTUFSWSBLRVkgKFBMQVlFUl9JRCwgVEVBTV9JRCksCi0JRk9SRUlHTiBLRVkgKFRFQU1fSUQpICAgUkVGRVJFTkNFUyBURUFNIChURUFNX0lEKSwKLQlGT1JFSUdOIEtFWSAoUExBWUVSX0lEKSAgIFJFRkVSRU5DRVMgUExBWUVSIChQTEFZRVJfSUQpCisgICAgRk9SRUlHTiBLRVkgKFRFQU1fSUQpICAgUkVGRVJFTkNFUyBURUFNIChURUFNX0lEKSwKKyAgICBGT1JFSUdOIEtFWSAoUExBWUVSX0lEKSAgIFJFRkVSRU5DRVMgUExBWUVSIChQTEFZRVJfSUQpCiApOwogCiBjb21taXQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvc3FsL1Jvc3RlclZDQXBwX3N5Yi5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyVkMvc3FsL1Jvc3RlclZDQXBwX3N5Yi5zcWwKaW5kZXggYjMyZTJmNy4uZGY4ZWExMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlclZDL3NxbC9Sb3N0ZXJWQ0FwcF9zeWIuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJWQy9zcWwvUm9zdGVyVkNBcHBfc3liLnNxbApAQCAtMSw0OCArMSw0OCBAQAogRFJPUCBUUklHR0VSIFRfTEVBR1VFCi1EUk9QIFRSSUdHRVIgVF9QTEFZRVIgCitEUk9QIFRSSUdHRVIgVF9QTEFZRVIKIERST1AgVFJJR0dFUiBUX1RFQU0KIGdvCiAKIERST1AgVEFCTEUgVEVBTVBMQVlFUgotRFJPUCBUQUJMRSBQTEFZRVIgCitEUk9QIFRBQkxFIFBMQVlFUgogRFJPUCBUQUJMRSBURUFNCiBEUk9QIFRBQkxFIExFQUdVRQogZ28KIAotQ1JFQVRFIFRBQkxFIFBMQVlFUiAKK0NSRUFURSBUQUJMRSBQTEFZRVIKICgKLQlQTEFZRVJfSUQgVkFSQ0hBUigyNTUpIHByaW1hcnkga2V5IG5vdCBudWxsLCAKLQlOQU1FIFZBUkNIQVIoMjU1KSwKLQlQT1NJVElPTiBWQVJDSEFSKDI1NSksIAotCVNBTEFSWSBkb3VibGUgcHJlY2lzaW9uIG5vdCBudWxsLAotCVZFUlNJT04gTlVNRVJJQygxOSkgbm90IG51bGwKKyAgICBQTEFZRVJfSUQgVkFSQ0hBUigyNTUpIHByaW1hcnkga2V5IG5vdCBudWxsLAorICAgIE5BTUUgVkFSQ0hBUigyNTUpLAorICAgIFBPU0lUSU9OIFZBUkNIQVIoMjU1KSwKKyAgICBTQUxBUlkgZG91YmxlIHByZWNpc2lvbiBub3QgbnVsbCwKKyAgICBWRVJTSU9OIE5VTUVSSUMoMTkpIG5vdCBudWxsCiApCiAKLWNyZWF0ZSB0YWJsZSBMRUFHVUUgCitjcmVhdGUgdGFibGUgTEVBR1VFCiAoCi0JTEVBR1VFX0lEIFZBUkNIQVIoMjU1KSBwcmltYXJ5IGtleSBub3QgbnVsbCwgCi0JTkFNRSBWQVJDSEFSKDI1NSksCi0JU1BPUlQgVkFSQ0hBUigyNTUpLAotCVZFUlNJT04gTlVNRVJJQygxOSkgbm90IG51bGwKKyAgICBMRUFHVUVfSUQgVkFSQ0hBUigyNTUpIHByaW1hcnkga2V5IG5vdCBudWxsLAorICAgIE5BTUUgVkFSQ0hBUigyNTUpLAorICAgIFNQT1JUIFZBUkNIQVIoMjU1KSwKKyAgICBWRVJTSU9OIE5VTUVSSUMoMTkpIG5vdCBudWxsCiApCiAKLWNyZWF0ZSB0YWJsZSBURUFNIAorY3JlYXRlIHRhYmxlIFRFQU0KICgKLQlURUFNX0lEIFZBUkNIQVIoMjU1KSBwcmltYXJ5IGtleSBub3QgbnVsbCwgCi0JQ0lUWSBWQVJDSEFSKDI1NSksCi0JTkFNRSBWQVJDSEFSKDI1NSksCi0JTEVBR1VFX0lEIFZBUkNIQVIoMjU1KSwKLQlWRVJTSU9OIE5VTUVSSUMoMTkpIG5vdCBudWxsLAotCWZvcmVpZ24ga2V5IChMRUFHVUVfSUQpIHJlZmVyZW5jZXMgTEVBR1VFIChMRUFHVUVfSUQpCisgICAgVEVBTV9JRCBWQVJDSEFSKDI1NSkgcHJpbWFyeSBrZXkgbm90IG51bGwsCisgICAgQ0lUWSBWQVJDSEFSKDI1NSksCisgICAgTkFNRSBWQVJDSEFSKDI1NSksCisgICAgTEVBR1VFX0lEIFZBUkNIQVIoMjU1KSwKKyAgICBWRVJTSU9OIE5VTUVSSUMoMTkpIG5vdCBudWxsLAorICAgIGZvcmVpZ24ga2V5IChMRUFHVUVfSUQpIHJlZmVyZW5jZXMgTEVBR1VFIChMRUFHVUVfSUQpCiApCiAKLWNyZWF0ZSB0YWJsZSBURUFNUExBWUVSIAorY3JlYXRlIHRhYmxlIFRFQU1QTEFZRVIKICgKLQlQTEFZRVJfSUQgVkFSQ0hBUigyNTUpIG5vdCBudWxsLAorICAgIFBMQVlFUl9JRCBWQVJDSEFSKDI1NSkgbm90IG51bGwsCiAgICAgICAgIFRFQU1fSUQgVkFSQ0hBUigyNTUpIG5vdCBudWxsLAogICAgICAgICBjb25zdHJhaW50IFBLX1RFQU1QTEFZRVIgcHJpbWFyeSBrZXkgKFBMQVlFUl9JRCwgVEVBTV9JRCksCi0JZm9yZWlnbiBrZXkgKFRFQU1fSUQpIHJlZmVyZW5jZXMgVEVBTSAoVEVBTV9JRCksCi0JZm9yZWlnbiBrZXkgKFBMQVlFUl9JRCkgcmVmZXJlbmNlcyBQTEFZRVIgKFBMQVlFUl9JRCkKKyAgICBmb3JlaWduIGtleSAoVEVBTV9JRCkgcmVmZXJlbmNlcyBURUFNIChURUFNX0lEKSwKKyAgICBmb3JlaWduIGtleSAoUExBWUVSX0lEKSByZWZlcmVuY2VzIFBMQVlFUiAoUExBWUVSX0lEKQogKQogCiBnbwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDBhYzdlMjEuLjRlOWI1NmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEzICsxNSwxMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0icm9zdGVyZXh0Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogCi08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJSb3N0ZXJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iUm9zdGVyQ2xpZW50Ii8+CiAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KQEAgLTM0LDEwICszNCwxMCBAQAogCiA8cHJvcGVydHkgbmFtZT0ic3VuLWNtcC1tYXBwaW5ncy10ZWFtLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWNtcC1tYXBwaW5ncy10ZWFtLnhtbCIvPgogCi08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogCkBAIC00Nyw3ICs0Nyw3IEBACiA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0idHJ1ZSIvPgogCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIKLQl2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIgotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2J1aWxkLnhtbAppbmRleCBhODY4YTU0Li45ZTIyNjQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2J1aWxkLnhtbApAQCAtMzgsNyArMzgsNyBAQAogICAgICAgPGRlbGV0ZSBmaWxlPSIke3N1bi1jbXAtbWFwcGluZ3MueG1sfSIvPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNyArNDYsMTcgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icGFja2FnZS10ZWFtLWphciIgPgogCi0gICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWpiamFyLWNvbW1vbiI+IAotICAgCisgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWpiamFyLWNvbW1vbiI+CisKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkYnNjaGVtYSIgdmFsdWU9IiR7YmFzZWRpcn0vZWpiL3RlYW0vUm9zdGVyU2NoZW1hLmRic2NoZW1hIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9InRlYW0vTG9jYWwqLmNsYXNzLCB0ZWFtL0xlYWd1ZSouY2xhc3MsIHRlYW0vUGxheWVyKi5jbGFzcywgdGVhbS9UZWFtKi5jbGFzcywgdXRpbC8qLmNsYXNzLCBSb3N0ZXJTY2hlbWEuZGJzY2hlbWEiIC8+CiAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSIke2VqYi1qYXItdGVhbS54bWx9IiAvPgpAQCAtNjQsMjIgKzY0LDIyIEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9InN1bi1jbXAtbWFwcGluZ3MueG1sIiB2YWx1ZT0iJHtzdW4tY21wLW1hcHBpbmdzLXRlYW0ueG1sfSIgLz4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIC8+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vdGVhbS1lamIuamFyIiAvPgotICAKKwogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InBhY2thZ2Utcm9zdGVyLWphciIgPgogCi0gICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWpiamFyLWNvbW1vbiI+IAotICAgCi0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVqYmphci1jb21tb24iPgorCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSJ0ZWFtL0xvY2FsKi5jbGFzcywgdGVhbS9MZWFndWUuY2xhc3MsIHRlYW0vTGVhZ3VlSG9tZS5jbGFzcywgdGVhbS9QbGF5ZXIuY2xhc3MsIHRlYW0vUGxheWVySG9tZS5jbGFzcywgdGVhbS9UZWFtLmNsYXNzLCB0ZWFtL1RlYW1Ib21lLmNsYXNzLCx1dGlsLyouY2xhc3Mscm9zdGVyLyouY2xhc3MiIC8+CiAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSIke2VqYi1qYXItcm9zdGVyLnhtbH0iIC8+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9IiR7c3VuLWVqYi1qYXItcm9zdGVyLnhtbH0iIC8+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAvPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamIuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9L3Jvc3Rlci1lamIuamFyIiAvPgotICAKKwogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTg3LDE3ICs4NywxNyBAQAogCiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ0cnVlIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIKKyAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovUm9zdGVyU2VydmxldC5jbGFzcyIgLz4KLQk8L2FudGNhbGw+Ci0gCisgICAgPC9hbnRjYWxsPgorCiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UtYXBwY2xpZW50IiA+CiAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KIAogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1Jvc3RlckNsaWVudC5jbGFzcywgKiovUm9zdGVyLmNsYXNzLCAqKi9Sb3N0ZXJIb21lLmNsYXNzLCB1dGlsLyouY2xhc3MiIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIKICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgLz4KQEAgLTExOCwyNCArMTE4LDI0IEBACiAKICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJURU1QRElSIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9L1RFTVBESVIiIC8+CiAKLSAgICAgICAJPG1rZGlyIGRpcj0iJHtURU1QRElSfS9zcmMiIC8+CisgICAgICAgICAgIDxta2RpciBkaXI9IiR7VEVNUERJUn0vc3JjIiAvPgogICAgICAgICA8Y29weSB0b2Rpcj0iJHtURU1QRElSfS9zcmMiID4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfS9lamIiIC8+CiAgICAgICAgIDwvY29weT4KLSAgICAgICAJPG1rZGlyIGRpcj0iJHtURU1QRElSfS9zcmMvY2xpZW50IiAvPgorICAgICAgICAgICA8bWtkaXIgZGlyPSIke1RFTVBESVJ9L3NyYy9jbGllbnQiIC8+CiAgICAgICAgIDxjb3B5IHRvZGlyPSIke1RFTVBESVJ9L3NyYy9jbGllbnQiIGZpbGU9IiR7YmFzZWRpcn0vY2xpZW50L1Jvc3RlckNsaWVudC5qYXZhIiAvPgogICAgICAgICA8Y29weSB0b2Rpcj0iJHtURU1QRElSfS9zcmMvY2xpZW50IiBmaWxlPSIke2Jhc2VkaXJ9L3NlcnZsZXQvUm9zdGVyU2VydmxldC5qYXZhIiAvPgogCi0JPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS9kZXNjcmlwdG9yL0lOREVYLkxJU1QiIHRvZGlyPSIke1RFTVBESVJ9L01FVEEtSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICA8Y29weSBmaWxlPSIke2Jhc2VkaXJ9L2Rlc2NyaXB0b3IvSU5ERVguTElTVCIgdG9kaXI9IiR7VEVNUERJUn0vTUVUQS1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogCiAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgotCTxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KLQkgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+Ci0JICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgotCTwvZmlsZXNldD4KKyAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CisgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgorICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KKyAgICA8L2ZpbGVzZXQ+CiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtURU1QRElSfSIgLz4KIAotCTxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9L2xpYiIgaW5jbHVkZXM9InJlcG9ydGVyLmphciIvPgorICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9L2xpYiIgaW5jbHVkZXM9InJlcG9ydGVyLmphciIvPgogICAgICAgPC9lYXI+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTE1MSwxMSArMTUxLDExIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lYXIiIC8+CiAKIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSIke2Jhc2VkaXJ9L3NxbC9Sb3N0ZXJBcHBfZGVyYnkuc3FsIi8+CkBAIC0xNzQsMjIgKzE3NCwyMiBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSIke2Jhc2VkaXJ9Ly4uL2NvbW1vbi9kZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9IiR7YmFzZWRpcn0vc3FsL2Ryb3BfUm9zdGVyQXBwX2RlcmJ5LnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBhbGwKICAgICAgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9jbGllbnQvUm9zdGVyQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2NsaWVudC9Sb3N0ZXJDbGllbnQuamF2YQppbmRleCAyNzRhMTkwLi4yZjIyNDY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2NsaWVudC9Sb3N0ZXJDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2NsaWVudC9Sb3N0ZXJDbGllbnQuamF2YQpAQCAtMjgsMTggKzI4LDE4IEBACiBwdWJsaWMgY2xhc3MgUm9zdGVyQ2xpZW50IHsKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KLQluZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CisgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgdHJ5IHsKLQkgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNUQVJUIik7CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTVEFSVCIpOwogICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJSb3N0ZXJBcHBFeHQiKTsKIAogICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVSb3N0ZXJFeHQiKTsKIAotICAgICAgICAgICBSb3N0ZXJIb21lIGhvbWUgPSAKLSAgICAgICAgICAgICAgIChSb3N0ZXJIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICBSb3N0ZXJIb21lIGhvbWUgPQorICAgICAgICAgICAgICAgKFJvc3RlckhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUm9zdGVySG9tZS5jbGFzcyk7CiAKICAgICAgICAgICAgUm9zdGVyIG15Um9zdGVyID0gaG9tZS5jcmVhdGUoKTsKQEAgLTQ5LDggKzQ5LDggQEAKIAogICAgICAgICAgICAvLyBnZXRNb3JlSW5mbyhteVJvc3Rlcik7CiAKLQkgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IFJvc3RlckFwcEV4dCIsIHN0YXQuUEFTUyk7Ci0JICAgc3RhdC5wcmludFN1bW1hcnkoIlJvc3RlckFwcEV4dCIpOworICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgUm9zdGVyQXBwRXh0Iiwgc3RhdC5QQVNTKTsKKyAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiUm9zdGVyQXBwRXh0Iik7CiAgICAgICAgICAgIFN5c3RlbS5leGl0KDApOwogCiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC04Niw3ICs4Niw3IEBACiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIGV4Y2VwdGlvbjoiKTsKICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gIAkgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IFJvc3RlckFwcEV4dCIsIHN0YXQuRkFJTCk7CisgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IFJvc3RlckFwcEV4dCIsIHN0YXQuRkFJTCk7CiAgICAgICAgfQogCiAgICAgfSAvLyBnZXRTb21lSW5mbwpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgICAgICAgIHBsYXllckxpc3QgPSBteVJvc3Rlci5nZXRQbGF5ZXJzQnlQb3NpdGlvbigiZGVmZW5kZXIiKTsKICAgICAgICAgICAgcGxheWVyTGlzdCA9IG15Um9zdGVyLmdldEFsbFBsYXllcnMoKTsKICAgICAgICAgICAgcGxheWVyTGlzdCA9IG15Um9zdGVyLmdldFBsYXllcnNOb3RPblRlYW0oKTsKLSAgICAgICAgICAgcGxheWVyTGlzdCA9IG15Um9zdGVyLmdldFBsYXllcnNCeVBvc2l0aW9uQW5kTmFtZSgicG93ZXIgZm9yd2FyZCIsIAorICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lKCJwb3dlciBmb3J3YXJkIiwKICAgICAgICAgICAgICAgICJKYWNrIFBhdHRlcnNvbiIpOwogICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0UGxheWVyc0J5Q2l0eSgiVHJ1Y2tlZSIpOwogICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0UGxheWVyc0J5U3BvcnQoIlNvY2NlciIpOwpAQCAtMTQyLDcgKzE0Miw3IEBACiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIGV4Y2VwdGlvbjoiKTsKICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAJICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBSb3N0ZXJBcHBFeHQiLCBzdGF0LkZBSUwpOworICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgUm9zdGVyQXBwRXh0Iiwgc3RhdC5GQUlMKTsKICAgICAgICB9CiAKICAgICB9IC8vIGdldE1vcmVJbmZvCkBAIC0xNzYsNyArMTc2LDcgQEAKIAogICAgICAgICAgICBteVJvc3Rlci5jcmVhdGVUZWFtSW5MZWFndWUobmV3IFRlYW1EZXRhaWxzKAogICAgICAgICAgICAgICAiVDIiLCAiR29waGVycyIsICJNYW50ZWNhIiksICJMMSIpOwotICAgICAgICAgICAKKwogICAgICAgICAgICBteVJvc3Rlci5jcmVhdGVUZWFtSW5MZWFndWUobmV3IFRlYW1EZXRhaWxzKAogICAgICAgICAgICAgICAiVDMiLCAiRGVlciIsICJCb2RpZSIpLCAiTDIiKTsKIApAQCAtMzAwLDcgKzMwMCw3IEBACiAKICAgICAgICAgICAgbXlSb3N0ZXIuY3JlYXRlUGxheWVyKG5ldyBQbGF5ZXJEZXRhaWxzKAogICAgICAgICAgICAgICAiUDI2IiwgIkhvYmllIEphY2tzb24iLCAicGl0Y2hlciIsIDU4Mi4wMCkpOwotICAgICAgICAgIAorCiAgICAgICAgICAgIG15Um9zdGVyLmNyZWF0ZVBsYXllcihuZXcgUGxheWVyRGV0YWlscygKICAgICAgICAgICAgICAgIlAyNyIsICJNZWxpbmRhIEtlbmRhbGwiLCAiY2F0Y2hlciIsIDY3Ny4wMCkpOwogCkBAIC0zMTQsNyArMzE0LDcgQEAKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gZXhjZXB0aW9uOiIpOwogICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQkgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IFJvc3RlckFwcEV4dCIsIHN0YXQuRkFJTCk7CisgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBSb3N0ZXJBcHBFeHQiLCBzdGF0LkZBSUwpOwogICAgICAgIH0KIAogICAgIH0gLy8gaW5zZXJ0SW5mbwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9kZXNjcmlwdG9yL2VqYi1qYXItdGVhbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2Rlc2NyaXB0b3IvZWpiLWphci10ZWFtLnhtbAppbmRleCA3MDRjODAyLi44NTZiYmI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2Rlc2NyaXB0b3IvZWpiLWphci10ZWFtLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2Rlc2NyaXB0b3IvZWpiLWphci10ZWFtLnhtbApAQCAtMjUsNyArMjUsNyBAQAogICAgICAgPGRpc3BsYXktbmFtZT5MZWFndWVFSkI8L2Rpc3BsYXktbmFtZT4KICAgICAgIDxlamItbmFtZT5MZWFndWVFSkI8L2VqYi1uYW1lPgogICAgICAgPGhvbWU+dGVhbS5MZWFndWVIb21lPC9ob21lPgotICAgICAgPHJlbW90ZT50ZWFtLkxlYWd1ZTwvcmVtb3RlPiAgICAgIAorICAgICAgPHJlbW90ZT50ZWFtLkxlYWd1ZTwvcmVtb3RlPgogICAgICAgPGxvY2FsLWhvbWU+dGVhbS5Mb2NhbExlYWd1ZUhvbWU8L2xvY2FsLWhvbWU+CiAgICAgICA8bG9jYWw+dGVhbS5Mb2NhbExlYWd1ZTwvbG9jYWw+CiAgICAgICA8ZWpiLWNsYXNzPnRlYW0uTGVhZ3VlQmVhbjwvZWpiLWNsYXNzPgpAQCAtMTQzLDcgKzE0Myw3IEBACiAgICAgICAgIDwvcXVlcnktbWV0aG9kPgogICAgICAgICA8cmVzdWx0LXR5cGUtbWFwcGluZz5SZW1vdGU8L3Jlc3VsdC10eXBlLW1hcHBpbmc+CiAgICAgICAgIDxlamItcWw+c2VsZWN0IE9iamVjdChwKSBmcm9tIExlYWd1ZSBsLCBpbihsLnRlYW1zKSBhcyB0LCBpbih0LnBsYXllcnMpIHAgd2hlcmUgbCA9ID8xPC9lamItcWw+Ci0gICAgICA8L3F1ZXJ5PiAgICAgIAorICAgICAgPC9xdWVyeT4KICAgICA8L2VudGl0eT4KICAgICA8ZW50aXR5PgogICAgICAgPGRpc3BsYXktbmFtZT5UZWFtRUpCPC9kaXNwbGF5LW5hbWU+CkBAIC0yNDYsNyArMjQ2LDcgQEAKICAgICAgICAgICA8L21ldGhvZC1wYXJhbXM+CiAgICAgICAgIDwvcXVlcnktbWV0aG9kPgogICAgICAgICA8ZWpiLXFsPnNlbGVjdCBkaXN0aW5jdCB0Lm5hbWUgZnJvbSBUZWFtIHQgd2hlcmUgTE9DQVRFKD8xLCB0Lm5hbWUpICZndDsgMCBBTkQgTE9DQVRFKD8xLCB0Lm5hbWUpICZsdDsgTEVOR1RIKHQubmFtZSk8L2VqYi1xbD4KLSAgICAgIDwvcXVlcnk+ICAgICAgCisgICAgICA8L3F1ZXJ5PgogICAgIDwvZW50aXR5PgogICAgIDxlbnRpdHk+CiAgICAgICA8ZGlzcGxheS1uYW1lPlBsYXllckVKQjwvZGlzcGxheS1uYW1lPgpAQCAtMjg4LDcgKzI4OCw3IEBACiAgICAgICAgICAgPG1ldGhvZC1uYW1lPmZpbmROb3RPblRlYW08L21ldGhvZC1uYW1lPgogICAgICAgICAgIDxtZXRob2QtcGFyYW1zIC8+CiAgICAgICAgIDwvcXVlcnktbWV0aG9kPgotICAgICAgICA8ZWpiLXFsPnNlbGVjdCBvYmplY3QocCkgZnJvbSBQbGF5ZXIgcCAKKyAgICAgICAgPGVqYi1xbD5zZWxlY3Qgb2JqZWN0KHApIGZyb20gUGxheWVyIHAKIHdoZXJlIHAudGVhbXMgaXMgZW1wdHk8L2VqYi1xbD4KICAgICAgIDwvcXVlcnk+CiAgICAgICA8cXVlcnk+CkBAIC00NzQsNyArNDc0LDcgQEAKICAgICAgICAgICA8L21ldGhvZC1wYXJhbXM+CiAgICAgICAgIDwvcXVlcnktbWV0aG9kPgogICAgICAgICA8ZWpiLXFsPnNlbGVjdCBvYmplY3QocCkgZnJvbSBQbGF5ZXIgcCB3aGVyZSBwLnNhbGFyeSA9IFNRUlQoPzEpPC9lamItcWw+Ci0gICAgICA8L3F1ZXJ5PiAgICAgIAorICAgICAgPC9xdWVyeT4KICAgICA8L2VudGl0eT4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgogICA8cmVsYXRpb25zaGlwcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3Jvc3Rlci9Sb3N0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3Jvc3Rlci9Sb3N0ZXIuamF2YQppbmRleCA2OTJhMTg1Li4yNzlhYWI3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2VqYi9yb3N0ZXIvUm9zdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9lamIvcm9zdGVyL1Jvc3Rlci5qYXZhCkBAIC0yNyw1NSArMjcsNTUgQEAKIGltcG9ydCBqYXZhLnV0aWwuU2V0OwogCiBwdWJsaWMgaW50ZXJmYWNlIFJvc3RlciBleHRlbmRzIEVKQk9iamVjdCB7Ci0gCisKICAgICAvLyBQbGF5ZXJzCiAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVQbGF5ZXIoUGxheWVyRGV0YWlscyBkZXRhaWxzKSAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVQbGF5ZXIoUGxheWVyRGV0YWlscyBkZXRhaWxzKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIHZvaWQgYWRkUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkgCisgICAgcHVibGljIHZvaWQgYWRkUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVBsYXllcihTdHJpbmcgcGxheWVySWQpIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVBsYXllcihTdHJpbmcgcGxheWVySWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgdm9pZCBkcm9wUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkgCisgICAgcHVibGljIHZvaWQgZHJvcFBsYXllcihTdHJpbmcgcGxheWVySWQsIFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgUGxheWVyRGV0YWlscyBnZXRQbGF5ZXIoU3RyaW5nIHBsYXllcklkKSAKKyAgICBwdWJsaWMgUGxheWVyRGV0YWlscyBnZXRQbGF5ZXIoU3RyaW5nIHBsYXllcklkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtKFN0cmluZyB0ZWFtSWQpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbShTdHJpbmcgdGVhbUlkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtQ29weShTdHJpbmcgdGVhbUlkKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNPZlRlYW1Db3B5KFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVBvc2l0aW9uKFN0cmluZyBwb3NpdGlvbikgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlQb3NpdGlvbihTdHJpbmcgcG9zaXRpb24pCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlIaWdoZXJTYWxhcnkoU3RyaW5nIG5hbWUpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVNhbGFyeVJhbmdlKGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVNhbGFyeVJhbmdlKGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlMZWFndWVJZChTdHJpbmcgbGVhZ3VlSWQpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5TGVhZ3VlSWQoU3RyaW5nIGxlYWd1ZUlkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTcG9ydChTdHJpbmcgc3BvcnQpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U3BvcnQoU3RyaW5nIHNwb3J0KQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlDaXR5KFN0cmluZyBjaXR5KSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUNpdHkoU3RyaW5nIGNpdHkpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldEFsbFBsYXllcnMoKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldEFsbFBsYXllcnMoKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzTm90T25UZWFtKCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzTm90T25UZWFtKCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lKFN0cmluZyBwb3NpdGlvbiwgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUoU3RyaW5nIHBvc2l0aW9uLAogICAgICAgICBTdHJpbmcgbmFtZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0TGVhZ3Vlc09mUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkKQEAgLTgzLDg0ICs4Myw4NCBAQAogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRTcG9ydHNPZlBsYXllcihTdHJpbmcgcGxheWVySWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgICAgIAorCiAgICAgcHVibGljIGRvdWJsZSBnZXRTYWxhcnlPZlBsYXllckZyb21UZWFtKFN0cmluZyB0ZWFtSUQsIFN0cmluZyBwbGF5ZXJOYW1lKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOyAgIAotICAgICAgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKwogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aFBvc2l0aW9uc0dvYWxrZWVwZXJPckRlZmVuZGVyKCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhOYW1lRW5kaW5nV2l0aE9OKCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aE5hbWVFbmRpbmdXaXRoT04oKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aE51bGxOYW1lKCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhUZWFtKFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgICAgIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhTYWxhcnlVc2luZ0FCUyhkb3VibGUgc2FsYXJ5KQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOyAKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhTYWxhcnlVc2luZ1NRUlQoZG91YmxlIHNhbGFyeSkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nQUJTKGRvdWJsZSBzYWxhcnkpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgCi0gICAgICAgICAgIAorCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nU1FSVChkb3VibGUgc2FsYXJ5KQorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworCisKICAgICAvLyBUZWFtcwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRUZWFtc09mTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRUZWFtc09mTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRlYW1JbkxlYWd1ZShUZWFtRGV0YWlscyBkZXRhaWxzLCBTdHJpbmcgbGVhZ3VlSWQpIAorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRlYW1JbkxlYWd1ZShUZWFtRGV0YWlscyBkZXRhaWxzLCBTdHJpbmcgbGVhZ3VlSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVUZWFtKFN0cmluZyB0ZWFtSWQpIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVRlYW0oU3RyaW5nIHRlYW1JZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBUZWFtRGV0YWlscyBnZXRUZWFtKFN0cmluZyB0ZWFtSWQpIAorICAgIHB1YmxpYyBUZWFtRGV0YWlscyBnZXRUZWFtKFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFRlYW1zQnlQbGF5ZXJBbmRMZWFndWUoU3RyaW5nIHBsYXllcktleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxlYWd1ZUtleSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsJCi0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisKICAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFRlYW1zQnlQbGF5ZXJBbmRMZWFndWVWaWFSZW1vdGUoU3RyaW5nIHBsYXllcktleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxlYWd1ZUtleSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgU2V0IGdldENpdGllc09mTGVhZ3VlKFN0cmluZyBsZWFndWVLZXkpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgVGVhbURldGFpbHMgZ2V0VGVhbU9mTGVhZ3VlQnlDaXR5KFN0cmluZyBsZWFndWVLZXksIFN0cmluZyBjaXR5KQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwkgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVhbXNOYW1lT2ZMZWFndWVCeUNpdHkoU3RyaW5nIGxlYWd1ZUtleSwgU3RyaW5nIGNpdHkpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CSAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljICBTdHJpbmcgZ2V0VGVhbU5hbWVWYXJpYXRpb25zKFN0cmluZyB0ZWFtSWQpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgVGVhbURldGFpbHMgZ2V0UmVtb3RlVGVhbU9mTGVhZ3VlQnlDaXR5KFN0cmluZyBsZWFndWVLZXksIFN0cmluZyBjaXR5KQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwkgICAKLSAgICAgICAgCi0gICAgICAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworCisKICAgICAvLyBMZWFndWVzCiAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVMZWFndWUoTGVhZ3VlRGV0YWlscyBkZXRhaWxzKSAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVMZWFndWUoTGVhZ3VlRGV0YWlscyBkZXRhaWxzKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBMZWFndWVEZXRhaWxzIGdldExlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIAorICAgIHB1YmxpYyBMZWFndWVEZXRhaWxzIGdldExlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgTGVhZ3VlRGV0YWlscyBnZXRMZWFndWVCeU5hbWUoU3RyaW5nIG5hbWUpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgICAgIAorCiAgICAgLy8gVGVzdAogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRSZW1vdGVUZWFtc09mTGVhZ3VlKFN0cmluZyBsZWFndWVLZXkpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CkBAIC0xNjksNyArMTY5LDcgQEAKIAogICAgIHB1YmxpYyBBcnJheUxpc3QgdGVzdEZpbmRlcihTdHJpbmcgcGFybTEsIFN0cmluZyBwYXJtMiwgU3RyaW5nIHBhcm0zKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNsZWFuVXAoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdmVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAgICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3Jvc3Rlci9Sb3N0ZXJCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2VqYi9yb3N0ZXIvUm9zdGVyQmVhbi5qYXZhCmluZGV4IDM4Njk3OWIuLjM2Yjk1YjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3Jvc3Rlci9Sb3N0ZXJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9lamIvcm9zdGVyL1Jvc3RlckJlYW4uamF2YQpAQCAtNTIsMTkgKzUyLDE5IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVQbGF5ZXIoUGxheWVyRGV0YWlscyBkZXRhaWxzKSB7IAotIAorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVBsYXllcihQbGF5ZXJEZXRhaWxzIGRldGFpbHMpIHsKKwogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBjcmVhdGVQbGF5ZXIiKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIExvY2FsUGxheWVyIHBsYXllciA9IHBsYXllckhvbWUuY3JlYXRlKGRldGFpbHMuZ2V0SWQoKSwgCisgICAgICAgICAgICBMb2NhbFBsYXllciBwbGF5ZXIgPSBwbGF5ZXJIb21lLmNyZWF0ZShkZXRhaWxzLmdldElkKCksCiAgICAgICAgICAgICAgICAgZGV0YWlscy5nZXROYW1lKCksIGRldGFpbHMuZ2V0UG9zaXRpb24oKSwgZGV0YWlscy5nZXRTYWxhcnkoKSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotIAotICAgIHB1YmxpYyB2b2lkIGFkZFBsYXllcihTdHJpbmcgcGxheWVySWQsIFN0cmluZyB0ZWFtSWQpIHsgCi0gCisKKyAgICBwdWJsaWMgdm9pZCBhZGRQbGF5ZXIoU3RyaW5nIHBsYXllcklkLCBTdHJpbmcgdGVhbUlkKSB7CisKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gYWRkUGxheWVyIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBMb2NhbFRlYW0gdGVhbSA9IHRlYW1Ib21lLmZpbmRCeVByaW1hcnlLZXkodGVhbUlkKTsKQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVBsYXllcihTdHJpbmcgcGxheWVySWQpIHsgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIHJlbW92ZVBsYXllciIpOwogICAgICAgICB0cnkgewpAQCAtODUsNyArODUsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotIAorCiAgICAgcHVibGljIHZvaWQgZHJvcFBsYXllcihTdHJpbmcgcGxheWVySWQsIFN0cmluZyB0ZWFtSWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBkcm9wUGxheWVyIik7CkBAIC0xMTMsNyArMTEzLDcgQEAKICAgICB9IC8vIGdldFBsYXllcgogCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNPZlRlYW0oU3RyaW5nIHRlYW1JZCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNPZlRlYW0oU3RyaW5nIHRlYW1JZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNPZlRlYW0iKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKQEAgLTEyOCw3ICsxMjgsNyBAQAogICAgIH0gLy8gZ2V0UGxheWVyc09mVGVhbQogCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNPZlRlYW1Db3B5KFN0cmluZyB0ZWFtSWQpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtQ29weShTdHJpbmcgdGVhbUlkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc09mVGVhbUNvcHkiKTsKICAgICAgICAgQXJyYXlMaXN0IHBsYXllcnNMaXN0ID0gbnVsbDsKQEAgLTE0NSw3ICsxNDUsNyBAQAogICAgIH0gLy8gZ2V0UGxheWVyc09mVGVhbUNvcHkKIAogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRUZWFtc09mTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFRlYW1zT2ZMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0VGVhbXNPZkxlYWd1ZSIpOwogCkBAIC0xODYsNyArMTg2LDcgQEAKICAgICB9IC8vIGdldFBsYXllcnNCeVBvc2l0aW9uCiAKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5SGlnaGVyU2FsYXJ5KFN0cmluZyBuYW1lKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5SGlnaGVyU2FsYXJ5KFN0cmluZyBuYW1lKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc0J5QnlIaWdoZXJTYWxhcnkiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKQEAgLTIwMCw3ICsyMDAsNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlIaWdoZXJTYWxhcnkKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U2FsYXJ5UmFuZ2UoZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTYWxhcnlSYW5nZShkb3VibGUgbG93LCBkb3VibGUgaGlnaCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNCeVNhbGFyeVJhbmdlIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CkBAIC0yMTQsNyArMjE0LDcgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0UGxheWVyc0J5U2FsYXJ5UmFuZ2UKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5TGVhZ3VlSWQoU3RyaW5nIGxlYWd1ZUlkKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5TGVhZ3VlSWQoU3RyaW5nIGxlYWd1ZUlkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc0J5TGVhZ3VlSWQiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKQEAgLTIyOSw3ICsyMjksNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlMZWFndWVJZAogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTcG9ydChTdHJpbmcgc3BvcnQpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTcG9ydChTdHJpbmcgc3BvcnQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzQnlTcG9ydCIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwpAQCAtMjQzLDcgKzI0Myw3IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldFBsYXllcnNCeVNwb3J0CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUNpdHkoU3RyaW5nIGNpdHkpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlDaXR5KFN0cmluZyBjaXR5KSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc0J5Q2l0eSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwpAQCAtMjU3LDcgKzI1Nyw3IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldFBsYXllcnNCeUNpdHkKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0QWxsUGxheWVycygpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRBbGxQbGF5ZXJzKCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldEFsbFBsYXllcnMiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKQEAgLTI3MSw3ICsyNzEsNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRBbGxQbGF5ZXJzCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNOb3RPblRlYW0oKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc05vdE9uVGVhbSgpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzTm90T25UZWFtIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CkBAIC0yODUsOCArMjg1LDggQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0UGxheWVyc05vdE9uVGVhbQogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUoU3RyaW5nIHBvc2l0aW9uLCAKLSAgICAgICAgU3RyaW5nIG5hbWUpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUoU3RyaW5nIHBvc2l0aW9uLAorICAgICAgICBTdHJpbmcgbmFtZSkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNCeVBvc2l0aW9uQW5kTmFtZSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwpAQCAtMzAwLDcgKzMwMCw3IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldFBsYXllcnNCeVBvc2l0aW9uQW5kTmFtZQogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRMZWFndWVzT2ZQbGF5ZXIoU3RyaW5nIHBsYXllcklkKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0TGVhZ3Vlc09mUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldExlYWd1ZXNPZlBsYXllciIpOwogICAgICAgICBBcnJheUxpc3QgZGV0YWlsc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CkBAIC0zMTIsNyArMzEyLDcgQEAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgIAorCiAgICAgICAgIEl0ZXJhdG9yIGkgPSBsZWFndWVzLml0ZXJhdG9yKCk7CiAgICAgICAgIHdoaWxlIChpLmhhc05leHQoKSkgewogICAgICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gKExvY2FsTGVhZ3VlKSBpLm5leHQoKTsKQEAgLTMyMyw3ICszMjMsNyBAQAogICAgICAgICByZXR1cm4gZGV0YWlsc0xpc3Q7CiAgICAgfSAvLyBnZXRMZWFndWVzT2ZQbGF5ZXIKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0U3BvcnRzT2ZQbGF5ZXIoU3RyaW5nIHBsYXllcklkKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0U3BvcnRzT2ZQbGF5ZXIoU3RyaW5nIHBsYXllcklkKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0U3BvcnRzT2ZQbGF5ZXIiKTsKICAgICAgICAgQXJyYXlMaXN0IHNwb3J0c0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CkBAIC0zMzUsNyArMzM1LDcgQEAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgIAorCiAgICAgICAgIEl0ZXJhdG9yIGkgPSBzcG9ydHMuaXRlcmF0b3IoKTsKICAgICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICBTdHJpbmcgc3BvcnQgPSAoU3RyaW5nKSBpLm5leHQoKTsKQEAgLTM0Niw4ICszNDYsOCBAQAogCiAgICAgLy8gVGVhbSBidXNpbmVzcyBtZXRob2RzCiAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVUZWFtSW5MZWFndWUoVGVhbURldGFpbHMgZGV0YWlscywgU3RyaW5nIGxlYWd1ZUlkKSB7IAotIAorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRlYW1JbkxlYWd1ZShUZWFtRGV0YWlscyBkZXRhaWxzLCBTdHJpbmcgbGVhZ3VlSWQpIHsKKwogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBjcmVhdGVUZWFtSW5MZWFndWUiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9IGxlYWd1ZUhvbWUuZmluZEJ5UHJpbWFyeUtleShsZWFndWVJZCk7CkBAIC0zNTgsOCArMzU4LDggQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVUZWFtKFN0cmluZyB0ZWFtSWQpIHsgCisKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVUZWFtKFN0cmluZyB0ZWFtSWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiByZW1vdmVUZWFtIik7CiAgICAgICAgIHRyeSB7CkBAIC0zNjksNyArMzY5LDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAKKwogICAgIHB1YmxpYyBUZWFtRGV0YWlscyBnZXRUZWFtKFN0cmluZyB0ZWFtSWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRUZWFtIik7CkBAIC0zODcsMTggKzM4NywxOCBAQAogCiAgICAgLy8gTGVhZ3VlIGJ1c2luZXNzIG1ldGhvZHMKIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUxlYWd1ZShMZWFndWVEZXRhaWxzIGRldGFpbHMpIHsgCi0gCisgICAgcHVibGljIHZvaWQgY3JlYXRlTGVhZ3VlKExlYWd1ZURldGFpbHMgZGV0YWlscykgeworCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGNyZWF0ZUxlYWd1ZSIpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gbGVhZ3VlSG9tZS5jcmVhdGUoZGV0YWlscy5nZXRJZCgpLCAKKyAgICAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9IGxlYWd1ZUhvbWUuY3JlYXRlKGRldGFpbHMuZ2V0SWQoKSwKICAgICAgICAgICAgICAgICBkZXRhaWxzLmdldE5hbWUoKSwgZGV0YWlscy5nZXRTcG9ydCgpKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgeyAKKworICAgIHB1YmxpYyB2b2lkIHJlbW92ZUxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiByZW1vdmVMZWFndWUiKTsKICAgICAgICAgdHJ5IHsKQEAgLTQwOCw3ICs0MDgsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotIAorCiAgICAgcHVibGljIExlYWd1ZURldGFpbHMgZ2V0TGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgewogCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldExlYWd1ZSIpOwpAQCAtNDIyLDcgKzQyMiw3IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGxlYWd1ZURldGFpbHM7CiAgICAgfQotIAorCiAgICAgLy8gU2Vzc2lvbkJlYW4gbWV0aG9kcwogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CkBAIC00NzAsNTEgKzQ3MCw1MSBAQAogICAgIHB1YmxpYyBSb3N0ZXJCZWFuKCkge30KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7fQotIAorCiAgICAgLy8gUHJpdmF0ZSBtZXRob2RzCiAKICAgICBwcml2YXRlIExvY2FsUGxheWVySG9tZSBsb29rdXBQbGF5ZXIoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKLSAgICAgICAKKwogICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVQbGF5ZXJFeHQiKTsKICAgICAgICAgcmV0dXJuIChMb2NhbFBsYXllckhvbWUpIG9ianJlZjsKICAgIH0KIAogICAgIHByaXZhdGUgTG9jYWxUZWFtSG9tZSBsb29rdXBUZWFtKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7Ci0gICAgICAgCisKICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlVGVhbUV4dCIpOwogICAgICAgICByZXR1cm4gKExvY2FsVGVhbUhvbWUpIG9ianJlZjsKICAgIH0KIAogICAgIHByaXZhdGUgTG9jYWxMZWFndWVIb21lIGxvb2t1cExlYWd1ZSgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewotICAgICAgIAorCiAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUxlYWd1ZUV4dCIpOwogICAgICAgICByZXR1cm4gKExvY2FsTGVhZ3VlSG9tZSkgb2JqcmVmOwogICAgfQogCiAgICAgcHJpdmF0ZSBQbGF5ZXJIb21lIGxvb2t1cFJlbW90ZVBsYXllcigpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewotICAgICAgIAorCiAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1JlbW90ZVBsYXllckV4dCIpOwogICAgICAgICByZXR1cm4gKFBsYXllckhvbWUpIG9ianJlZjsKICAgIH0KIAogICAgIHByaXZhdGUgVGVhbUhvbWUgbG9va3VwUmVtb3RlVGVhbSgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewotICAgICAgIAorCiAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1JlbW90ZVRlYW1FeHQiKTsKICAgICAgICAgcmV0dXJuIChUZWFtSG9tZSkgb2JqcmVmOwogICAgfQogCiAgICAgcHJpdmF0ZSBMZWFndWVIb21lIGxvb2t1cFJlbW90ZUxlYWd1ZSgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewotICAgICAgIAorCiAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1JlbW90ZUxlYWd1ZUV4dCIpOwogICAgICAgICByZXR1cm4gKExlYWd1ZUhvbWUpIG9ianJlZjsKICAgIH0KLSAgIAorCiAgICBwcml2YXRlIEFycmF5TGlzdCBjb3B5UGxheWVyc1RvRGV0YWlscyhDb2xsZWN0aW9uIHBsYXllcnMpIHsKIAogICAgICAgICBBcnJheUxpc3QgZGV0YWlsc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CkBAIC01NDQsMTUgKzU0NCwxNSBAQAogCiAgICAgICAgIHJldHVybiBkZXRhaWxzTGlzdDsKICAgIH0gLy8gY29weVBsYXllcnNUb0RldGFpbHMKLSAgIAorCiAgICAvKioKLSAgICAqIGRpcnR5IGNsZWFuVXAgbWV0aG9kIG9ubHkgRUpCcyB3aXRoIGhhcmRjb2RlZCBQSyB3aWxsIGJlIHJlbW92ZWQgIAorICAgICogZGlydHkgY2xlYW5VcCBtZXRob2Qgb25seSBFSkJzIHdpdGggaGFyZGNvZGVkIFBLIHdpbGwgYmUgcmVtb3ZlZAogICAgICovCiAgICAgcHVibGljIHZvaWQgY2xlYW5VcCgpIHsKLSAgICAgICAgRGVidWcucHJpbnQoIkNsZWFuaW5nIHVwIHRoZSBkYXRhYmFzZSIpOyAgIAorICAgICAgICBEZWJ1Zy5wcmludCgiQ2xlYW5pbmcgdXAgdGhlIGRhdGFiYXNlIik7CiAgICAgICAgIENvbGxlY3Rpb24gdG9DbGVhbiA9IG51bGw7CiAgICAgICAgIEl0ZXJhdG9yIGl0ID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vcmVtb3ZpbmcgdGhlIHBsYXllciBFSkJzCiAgICAgICAgICAgICB0b0NsZWFuID0gcGxheWVySG9tZS5maW5kQWxsKCk7CkBAIC01NjAsMzMgKzU2MCwzMyBAQAogICAgICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgICgoTG9jYWxQbGF5ZXIpaXQubmV4dCgpKS5yZW1vdmUoKTsKICAgICAgICAgICAgIH0KLSAgICAKKwogICAgICAgICAgICAgLy8gcmVtb3ZpbmcgdGhlIHRlYW0gRUpCcwogICAgICAgICAgICAgdG9DbGVhbiA9IHRlYW1Ib21lLmZpbmRBbGwoKTsKICAgICAgICAgICAgIGl0ID0gdG9DbGVhbi5pdGVyYXRvcigpOwogICAgICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgICgoTG9jYWxUZWFtKWl0Lm5leHQoKSkucmVtb3ZlKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIHJlbW92aW5nIHRoZSBsZWFndWUgRUpCcwogICAgICAgICAgICAgdG9DbGVhbiA9IGxlYWd1ZUhvbWUuZmluZEFsbCgpOwogICAgICAgICAgICAgaXQgPSB0b0NsZWFuLml0ZXJhdG9yKCk7CiAgICAgICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgKChMb2NhbExlYWd1ZSlpdC5uZXh0KCkpLnJlbW92ZSgpOwotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIERlYnVnLnByaW50KCJDbGVhbmluZyB1cCB0aGUgZGF0YWJhc2UgLi4uIGRvbmUhIik7CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQorICAgICAgICAgICAgfQorICAgICAgICBEZWJ1Zy5wcmludCgiQ2xlYW5pbmcgdXAgdGhlIGRhdGFiYXNlIC4uLiBkb25lISIpOwogICAgICAgICB9ICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgICAKKwogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIG5hbWUKICAgICAgKiBAcmV0dXJuCiAgICAgICovCiAgICAgcHVibGljIExlYWd1ZURldGFpbHMgZ2V0TGVhZ3VlQnlOYW1lKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRMZWFndWVCeU5hbWUgKFNpbmdsZU9iamVjdEZpbmRlcikiKTsKICAgICAgICAgTGVhZ3VlRGV0YWlscyBsZWFndWVEZXRhaWxzID0gbnVsbDsKICAgICAgICAgdHJ5IHsKQEAgLTU5OCwxMiArNTk4LDEyIEBACiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gbGVhZ3VlRGV0YWlsczsKLSAgICB9ICAgICAgICAKKyAgICB9CiAgICAgLy8gZ2V0TGVhZ3VlQnlOYW1lKCkKIAotICAgIAorCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gcGxheWVyS2V5CiAgICAgICogQHBhcmFtIGxlYWd1ZUtleQogICAgICAqIEByZXR1cm4KQEAgLTYxMiwxMyArNjEyLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBsZWFndWVLZXkpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRUZWFtc0J5UGxheWVyQW5kTGVhZ3VlIik7Ci0gICAgICAgIEFycmF5TGlzdCBkZXRhaWxzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsJCQkJCQkJCQkgICAKKyAgICAgICAgQXJyYXlMaXN0IGRldGFpbHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwogICAgICAgICBDb2xsZWN0aW9uIHRlYW1zQ29sbCA9IG51bGw7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIExvY2FsUGxheWVyIHBsYXllciA9IHBsYXllckhvbWUuZmluZEJ5UHJpbWFyeUtleShwbGF5ZXJLZXkpOwotICAgICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gbGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUtleSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIHRlYW1zQ29sbCA9IHRlYW1Ib21lLmZpbmRCeVBsYXllckFuZExlYWd1ZShwbGF5ZXIsIGxlYWd1ZSk7CQkJCisgICAgICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWUgPSBsZWFndWVIb21lLmZpbmRCeVByaW1hcnlLZXkobGVhZ3VlS2V5KTsKKyAgICAgICAgICAgIHRlYW1zQ29sbCA9IHRlYW1Ib21lLmZpbmRCeVBsYXllckFuZExlYWd1ZShwbGF5ZXIsIGxlYWd1ZSk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwpAQCAtNjMyLDExICs2MzIsMTEgQEAKICAgICAgICAgICAgIGRldGFpbHNMaXN0LmFkZChkZXRhaWxzKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBkZXRhaWxzTGlzdDsJCi0gICAgfQkKKyAgICAgICAgcmV0dXJuIGRldGFpbHNMaXN0OworICAgIH0KIAogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIHBsYXllcktleQogICAgICAqIEBwYXJhbSBsZWFndWVLZXkKICAgICAgKiBAcmV0dXJuCkBAIC02NDUsMTcgKzY0NSwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbGVhZ3VlS2V5KSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0VGVhbXNCeVBsYXllckFuZExlYWd1ZVZpYVJlbW90ZSIpOwotICAgICAgICBBcnJheUxpc3QgZGV0YWlsc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CQkJCQkJCQkJICAgCisgICAgICAgIEFycmF5TGlzdCBkZXRhaWxzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKICAgICAgICAgQ29sbGVjdGlvbiB0ZWFtc0NvbGwgPSBudWxsOwogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBEZWJ1Zy5wcmludCgiIC0tLS0tIGZpbmRpbmcgLi4uLiIpOwogICAgICAgICAgICAgUGxheWVyIHBsYXllciA9IHJlbVBsYXllckhvbWUuZmluZEJ5UHJpbWFyeUtleShwbGF5ZXJLZXkpOwogICAgICAgICAgICAgRGVidWcucHJpbnQoIiAtLS0tLSBQbGF5ZXIgZm91bmQiKTsKLSAgICAgICAgICAgIExlYWd1ZSBsZWFndWUgPSByZW1MZWFndWVIb21lLmZpbmRCeVByaW1hcnlLZXkobGVhZ3VlS2V5KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgTGVhZ3VlIGxlYWd1ZSA9IHJlbUxlYWd1ZUhvbWUuZmluZEJ5UHJpbWFyeUtleShsZWFndWVLZXkpOwogICAgICAgICAgICAgRGVidWcucHJpbnQoIiAtLS0tLSBMZWFndWUgZm91bmQiKTsKICAgICAgICAgICAgIHRlYW1zQ29sbCA9IHJlbVRlYW1Ib21lLmZpbmRCeVBsYXllckFuZExlYWd1ZVZpYVJlbW90ZShwbGF5ZXIsIGxlYWd1ZSk7Ci0gICAgICAgICAgICBEZWJ1Zy5wcmludCgiIC0tLS0tIFRlYW0gZm91bmQiKTsJCQkKKyAgICAgICAgICAgIERlYnVnLnByaW50KCIgLS0tLS0gVGVhbSBmb3VuZCIpOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKQEAgLTY3NCw0NSArNjc0LDQ1IEBACiAgICAgICAgIH0KIAogCi0gICAgICAgIHJldHVybiBkZXRhaWxzTGlzdDsJCi0gICAgfQkKLSAgICAKKyAgICAgICAgcmV0dXJuIGRldGFpbHNMaXN0OworICAgIH0KKwogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIGNpdHkKICAgICAgKiBAcmV0dXJuCiAgICAgICovCiAgICAgcHVibGljIFNldCBnZXRDaXRpZXNPZkxlYWd1ZShTdHJpbmcgbGVhZ3VlS2V5KSB7Ci0gICAgICAgIAorCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldENpdGllc09mTGVhZ3VlKGxlYWd1ZUtleSkiKTsKLSAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlOyAKKyAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlOwogICAgICAgICBTZXQgY2l0aWVzOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgbGVhZ3VlID0gbGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUtleSk7Ci0gICAgICAgICAgICBjaXRpZXMgPSBsZWFndWUuZ2V0Q2l0aWVzT2ZUaGlzTGVhZ3VlKCk7CQorICAgICAgICAgICAgY2l0aWVzID0gbGVhZ3VlLmdldENpdGllc09mVGhpc0xlYWd1ZSgpOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsJCQkKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY2l0aWVzOwogICAgIH0vLyBnZXRDaXRpZXNPZkxlYWd1ZSgpCiAKIAogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UmVtb3RlVGVhbXNPZkxlYWd1ZShTdHJpbmcgbGVhZ3VlS2V5KSB7Ci0gICAgICAgIAorCiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFJlbW90ZVRlYW1zT2ZMZWFndWUobGVhZ3VlS2V5KSIpOwotICAgICAgICBBcnJheUxpc3QgZGV0YWlsc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CQkJCQkJCQkJICAgCi0gICAgICAgIExlYWd1ZSBsZWFndWU7IAorICAgICAgICBBcnJheUxpc3QgZGV0YWlsc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CisgICAgICAgIExlYWd1ZSBsZWFndWU7CiAgICAgICAgIFNldCB0ZWFtczsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGxlYWd1ZSA9IHJlbUxlYWd1ZUhvbWUuZmluZEJ5UHJpbWFyeUtleShsZWFndWVLZXkpOwotICAgICAgICAgICAgdGVhbXMgPSBsZWFndWUuZ2V0UmVtb3RlVGVhbXNPZlRoaXNMZWFndWUoKTsJCisgICAgICAgICAgICB0ZWFtcyA9IGxlYWd1ZS5nZXRSZW1vdGVUZWFtc09mVGhpc0xlYWd1ZSgpOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsJCQkKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIHRyeSB7CkBAIC03MjcsMTIgKzcyNywxMiBAQAogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGRldGFpbHNMaXN0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIGxlYWd1ZUtleQogICAgICAqIEBwYXJhbSBjaXR5CiAgICAgICogQHJldHVybgpAQCAtNzQxLDcgKzc0MSw3IEBACiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFRlYW1PZkxlYWd1ZUJ5Q2l0eShsZWFndWVLZXksIGNpdHkpIik7CiAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZTsKICAgICAgICAgTG9jYWxUZWFtIHRlYW07Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBsZWFndWUgPSBsZWFndWVIb21lLmZpbmRCeVByaW1hcnlLZXkobGVhZ3VlS2V5KTsKICAgICAgICAgICAgIHRlYW0gPSBsZWFndWUuZ2V0VGVhbUJ5Q2l0eShjaXR5KTsKQEAgLTc0OSwxMyArNzQ5LDEzIEBACiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbmV3IFRlYW1EZXRhaWxzKHRlYW0uZ2V0VGVhbUlkKCksIHRlYW0uZ2V0TmFtZSgpLCB0ZWFtLmdldENpdHkoKSk7CiAgICAgfS8vIGdldFRlYW1PZkxlYWd1ZUJ5Q2l0eSgpCiAKLSAgICAKKwogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIGxlYWd1ZUtleQogICAgICAqIEBwYXJhbSBjaXR5CiAgICAgICogQHJldHVybgpAQCAtNzY0LDcgKzc2NCw3IEBACiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFRlYW1zTmFtZU9mTGVhZ3VlQnlDaXR5KGxlYWd1ZUtleSwgY2l0eSkiKTsKICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlOwogICAgICAgICBTdHJpbmcgdGVhbU5hbWU7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBsZWFndWUgPSBsZWFndWVIb21lLmZpbmRCeVByaW1hcnlLZXkobGVhZ3VlS2V5KTsKICAgICAgICAgICAgIHRlYW1OYW1lID0gbGVhZ3VlLmdldFRlYW1zTmFtZUJ5Q2l0eShjaXR5KTsKQEAgLTc3MiwxNCArNzcyLDE0IEBACiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gdGVhbU5hbWU7CiAKICAgICB9Ly8gZ2V0VGVhbXNOYW1lT2ZMZWFndWVCeUNpdHkoKQotICAgIAotICAgIAorCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSB0ZWFtSUQKICAgICAgKiBAcGFyYW0gcGxheWVyTmFtZQogICAgICAqIEByZXR1cm4KQEAgLTc4OCwyMSArNzg4LDIxIEBACiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFNhbGFyeU9mUGxheWVyRnJvbVRlYW0odGVhbUtleSwgcGxheWVyS2V5KSIpOwogICAgICAgICBMb2NhbFRlYW0gdGVhbTsKICAgICAgICAgZG91YmxlIHNhbGFyeTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHRlYW0gPSB0ZWFtSG9tZS5maW5kQnlQcmltYXJ5S2V5KHRlYW1JRCk7CQkKLSAgICAgICAgICAgIHNhbGFyeSA9IHRlYW0uZ2V0U2FsYXJ5T2ZQbGF5ZXIocGxheWVyTmFtZSk7CQkJCisgICAgICAgICAgICB0ZWFtID0gdGVhbUhvbWUuZmluZEJ5UHJpbWFyeUtleSh0ZWFtSUQpOworICAgICAgICAgICAgc2FsYXJ5ID0gdGVhbS5nZXRTYWxhcnlPZlBsYXllcihwbGF5ZXJOYW1lKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBzYWxhcnk7ICAgICAgIAorCisgICAgICAgIHJldHVybiBzYWxhcnk7CiAgICAgfS8vIGdldFNhbGFyeU9mUGxheWVyRnJvbVRlYW0oKQotICAgIAotICAgIAorCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBsZWFndWVJZAogICAgICAqIEByZXR1cm4KICAgICAgKi8KQEAgLTgxMCw3ICs4MTAsNyBAQAogICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNPZkxlYWd1ZShsZWFndWVJZCkiKTsKICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWU7CiAgICAgICAgU2V0IHBsYXllcnM7Ci0gICAgICAgCisKICAgICAgICB0cnkgewogICAgICAgICAgICBsZWFndWUgPSBsZWFndWVIb21lLmZpbmRCeVByaW1hcnlLZXkobGVhZ3VlSWQpOwogICAgICAgICAgICBwbGF5ZXJzID0gbGVhZ3VlLmdldFBsYXllcnNGcm9tTGVhZ3VlKCk7CkBAIC04MTgsMTIgKzgxOCwxMiBAQAogICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgIH0KLSAgICAgICAKLSAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7ICAgICAKKworICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9Ly8gZ2V0UGxheWVyc09mTGVhZ3VlKCkKLSAgICAKKwogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIGxlYWd1ZUlkCiAgICAgICogQHJldHVybgogICAgICAqLwpAQCAtODQwLDY4ICs4NDAsNjggQEAKICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICB9Ci0gICAgICAgCi0gICAgICAgcmV0dXJuIHJlc3VsdDsgICAgIAorCisgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ly8gZ2V0UGxheWVyc09mTGVhZ3VlKCkKLSAgICAKKwogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhQb3NpdGlvbnNHb2Fsa2VlcGVyT3JEZWZlbmRlcigpIHsKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc1dpdGhQb3NpdGlvbnNHb2Fsa2VlcGVyT3JEZWZlbmRlcigpIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBwbGF5ZXJzID0gcGxheWVySG9tZS5maW5kQnlQb3NpdGlvbnNHb2Fsa2VlcGVyT3JEZWZlbmRlcigpOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfS8vIGdldFBsYXllcnNXaXRoUG9zaXRpb25zR29hbGtlZXBlck9yRGVmZW5kZXIoKQotICAgIAorCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuCiAgICAgICovCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aE5hbWVFbmRpbmdXaXRoT04oKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNXaXRoTmFtZUVuZGluZ1dpdGhPTigpIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBwbGF5ZXJzID0gcGxheWVySG9tZS5maW5kQnlOYW1lRW5kaW5nV2l0aE9OKCk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9Ly8gZ2V0UGxheWVyc1dpdGhOYW1lRW5kaW5nV2l0aE9OKCkKIAogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc1dpdGhOdWxsTmFtZSgpIHsKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc1dpdGhOdWxsTmFtZSgpIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBwbGF5ZXJzID0gcGxheWVySG9tZS5maW5kQnlOdWxsTmFtZSgpOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfS8vIGdldFBsYXllcnNXaXRoTnVsbE5hbWUoKQogCiAKIAogICAgIC8qKgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIHRlYW1JZAogICAgICAqIEByZXR1cm4KICAgICAgKi8KQEAgLTkwOSw3ICs5MDksNyBAQAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzV2l0aFRlYW0odGVhbUlkKSIpOwogICAgICAgICBMb2NhbFRlYW0gdGVhbTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRlYW0gPSB0ZWFtSG9tZS5maW5kQnlQcmltYXJ5S2V5KHRlYW1JZCk7CiAgICAgICAgICAgICBwbGF5ZXJzID0gcGxheWVySG9tZS5maW5kQnlUZWFtKHRlYW0pOwpAQCAtOTE3LDEzICs5MTcsMTMgQEAKICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9Ly8gZ2V0UGxheWVyc1dpdGhUZWFtKCkKLSAgICAKLSAgICAKKworCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gdGVhbUlkCiAgICAgICogQHJldHVybgogICAgICAqLwpAQCAtOTMxLDcgKzkzMSw3IEBACiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFRlYW1OYW1lVmFyaWF0aW9ucyh0ZWFtSWQpIik7CiAgICAgICAgIExvY2FsVGVhbSB0ZWFtOwogICAgICAgICBTdHJpbmdCdWZmZXIgb3V0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgdGVhbSA9IHRlYW1Ib21lLmZpbmRCeVByaW1hcnlLZXkodGVhbUlkKTsKICAgICAgICAgICAgIERlYnVnLnByaW50KCItLS0gQ09OQ0FUIik7CkBAIC05MzksNTkgKzkzOSw1OSBAQAogICAgICAgICAgICAgRGVidWcucHJpbnQoIi0tLSBTVUJTVFJJTkciKTsKICAgICAgICAgICAgIG91dC5hcHBlbmQodGVhbS5nZXRUZWFtTmFtZVdpdGhTdHJpbmdmdW5jdGlvblRlc3RzMigpKTsKICAgICAgICAgICAgIERlYnVnLnByaW50KCItLS0gTE9DQVRFIEFORCBMRU5HVEgiKTsKLSAgICAgICAgICAgIG91dC5hcHBlbmQodGVhbS5nZXRUZWFtTmFtZVdpdGhTdHJpbmdmdW5jdGlvblRlc3RzMygpKTsJCQkKKyAgICAgICAgICAgIG91dC5hcHBlbmQodGVhbS5nZXRUZWFtTmFtZVdpdGhTdHJpbmdmdW5jdGlvblRlc3RzMygpKTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CQkJCisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG91dC50b1N0cmluZygpOwogICAgIH0vLyBnZXRUZWFtTmFtZVZhcmlhdGlvbnMoKQotICAgIAotICAgIAorCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBzYWxhcnkKICAgICAgKiBAcmV0dXJuCiAgICAgICovCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nQUJTKGRvdWJsZSBzYWxhcnkpIHsKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc1dpdGhTYWxhcnlVc2luZ0FCUyhzYWxhcnkpIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBwbGF5ZXJzID0gcGxheWVySG9tZS5maW5kQnlTYWxhcmF5V2l0aEFyaXRobWV0aWNGdW5jdGlvbkFCUyhzYWxhcnkpOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfS8vIGdldFBsYXllcnNXaXRoU2FsYXJ5VXNpbmdBQlMoKQogCiAKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBzYWxhcnkKICAgICAgKiBAcmV0dXJuCiAgICAgICovCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzV2l0aFNhbGFyeVVzaW5nU1FSVChkb3VibGUgc2FsYXJ5KSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNXaXRoU2FsYXJ5VXNpbmdTUVJUKHNhbGFyeSkiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHBsYXllcnMgPSBwbGF5ZXJIb21lLmZpbmRCeVNhbGFyYXlXaXRoQXJpdGhtZXRpY0Z1bmN0aW9uU1FSVChzYWxhcnkpOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfS8vIGdldFBsYXllcnNXaXRoU2FsYXJ5VXNpbmdTUVJUKCkKLSAgICAKLSAgICAKLSAgICAKKworCisKICAgICAvKioKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBsZWFndWVLZXkKICAgICAgKiBAcGFyYW0gY2l0eQogICAgICAqIEByZXR1cm4KQEAgLTEwMDEsMjAgKzEwMDEsMjAgQEAKICAgICAgICAgTGVhZ3VlIGxlYWd1ZTsKICAgICAgICAgVGVhbSB0ZWFtOwogICAgICAgICBUZWFtRGV0YWlscyB0ZWFtRGV0YWlsczsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGxlYWd1ZSA9IHJlbUxlYWd1ZUhvbWUuZmluZEJ5UHJpbWFyeUtleShsZWFndWVLZXkpOwogICAgICAgICAgICAgdGVhbSA9IGxlYWd1ZS5nZXRSZW1vdGVUZWFtQnlDaXR5KGNpdHkpOwotICAgICAgICAgICAgdGVhbURldGFpbHMgPSBuZXcgVGVhbURldGFpbHModGVhbS5nZXRUZWFtSWQoKSwgdGVhbS5nZXROYW1lKCksIHRlYW0uZ2V0Q2l0eSgpKTsgCisgICAgICAgICAgICB0ZWFtRGV0YWlscyA9IG5ldyBUZWFtRGV0YWlscyh0ZWFtLmdldFRlYW1JZCgpLCB0ZWFtLmdldE5hbWUoKSwgdGVhbS5nZXRDaXR5KCkpOwogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gdGVhbURldGFpbHM7CiAgICAgfS8vIGdldFJlbW90ZVRlYW1PZkxlYWd1ZUJ5Q2l0eSgpCi0gICAgCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlMZWFndWVJZFdpdGhOVUxMKFN0cmluZyBsZWFndWVJZCkgeyAKKworICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5TGVhZ3VlSWRXaXRoTlVMTChTdHJpbmcgbGVhZ3VlSWQpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzQnlMZWFndWVJZCIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwpAQCAtMTAyOSw1ICsxMDI5LDUgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0UGxheWVyc0J5TGVhZ3VlSWQKIAotICAgIAotfSAvLyBSb3N0ZXJCZWFuIAorCit9IC8vIFJvc3RlckJlYW4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3Jvc3Rlci9Sb3N0ZXJIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2VqYi9yb3N0ZXIvUm9zdGVySG9tZS5qYXZhCmluZGV4IGNlY2Q0NjIuLmI4NzRhZDQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3Jvc3Rlci9Sb3N0ZXJIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9lamIvcm9zdGVyL1Jvc3RlckhvbWUuamF2YQpAQCAtMjIsNiArMjIsNiBAQAogaW1wb3J0IGpha2FydGEuZWpiLkVKQkhvbWU7CiAKIHB1YmxpYyBpbnRlcmZhY2UgUm9zdGVySG9tZSBleHRlbmRzIEVKQkhvbWUgewotIAorCiAgICAgUm9zdGVyIGNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIENyZWF0ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3RlYW0vTGVhZ3VlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2VqYi90ZWFtL0xlYWd1ZS5qYXZhCmluZGV4IGIwYjhlMWIuLjk2ZTM3MDMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3RlYW0vTGVhZ3VlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9lamIvdGVhbS9MZWFndWUuamF2YQpAQCAtMjksMTUgKzI5LDE1IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRTcG9ydCgpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgICAgcHVibGljIENvbGxlY3Rpb24gZ2V0VGVhbXMoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIFRlYW0gZ2V0UmVtb3RlVGVhbUJ5Q2l0eShTdHJpbmcgY2l0eSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgCisgICAgcHVibGljIFRlYW0gZ2V0UmVtb3RlVGVhbUJ5Q2l0eShTdHJpbmcgY2l0eSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3RlRXhjZXB0aW9uOwotICAgIAotICAgIHB1YmxpYyBTZXQgZ2V0UmVtb3RlVGVhbXNPZlRoaXNMZWFndWUoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCAKKworICAgIHB1YmxpYyBTZXQgZ2V0UmVtb3RlVGVhbXNPZlRoaXNMZWFndWUoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGdldFJlbW90ZVBsYXllcnNGcm9tTGVhZ3VlKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgCisgICAgcHVibGljIENvbGxlY3Rpb24gZ2V0UmVtb3RlUGxheWVyc0Zyb21MZWFndWUoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAvLyAgICBwdWJsaWMgdm9pZCBhZGRUZWFtKFRlYW0gdGVhbSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIC8vICAgIHB1YmxpYyB2b2lkIGRyb3BUZWFtKFRlYW0gdGVhbSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9lamIvdGVhbS9MZWFndWVCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2VqYi90ZWFtL0xlYWd1ZUJlYW4uamF2YQppbmRleCAzOGQzODA2Li5mY2U5MmRlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2VqYi90ZWFtL0xlYWd1ZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2VqYi90ZWFtL0xlYWd1ZUJlYW4uamF2YQpAQCAtMjksNyArMjksNyBAQAogCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRMZWFndWVJZCgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldExlYWd1ZUlkKFN0cmluZyBpZCk7Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldE5hbWUoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKIApAQCAtNTAsNyArNTAsNyBAQAogICAgIHB1YmxpYyBhYnN0cmFjdCBTZXQgZWpiU2VsZWN0UmVtb3RlVGVhbXMoTGVhZ3VlIGxlYWd1ZSkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgICAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBMb2NhbFRlYW0gZWpiU2VsZWN0VGVhbUJ5Q2l0eShTdHJpbmcgY2l0eSkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIApAQCAtNjAsNjMgKzYwLDYzIEBACiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBlamJTZWxlY3RUZWFtc05hbWVCeUNpdHkoU3RyaW5nIGNpdHkpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICAgICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgU2V0IGVqYlNlbGVjdFBsYXllcnNCeUxlYWd1ZShMb2NhbExlYWd1ZSBsZWFndWUpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYWJzdHJhY3QgQ29sbGVjdGlvbiBlamJTZWxlY3RSZW1vdGVQbGF5ZXJzQnlMZWFndWUoTGVhZ3VlIGxlYWd1ZSkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKLSAgICAgICAgCisKICAgICAvLyBCdXNpbmVzcyBtZXRob2RzCiAKICAgICBwdWJsaWMgU2V0IGdldENpdGllc09mVGhpc0xlYWd1ZSgpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewotICAgICAgICAgCi0gICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWUgPSAKKworICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0KICAgICAgICAgICAgICAodGVhbS5Mb2NhbExlYWd1ZSljb250ZXh0LmdldEVKQkxvY2FsT2JqZWN0KCk7Ci0gICAgICAgICAKLSAgICAgICAgIHJldHVybiBlamJTZWxlY3RUZWFtc0NpdHkobGVhZ3VlKTsgCisKKyAgICAgICAgIHJldHVybiBlamJTZWxlY3RUZWFtc0NpdHkobGVhZ3VlKTsKICAgICB9CiAKIAogICAgIHB1YmxpYyBTZXQgZ2V0UmVtb3RlVGVhbXNPZlRoaXNMZWFndWUoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKLSAgICAgICAgIAorCiAgICAgICAgICBMZWFndWUgbGVhZ3VlID0gICh0ZWFtLkxlYWd1ZSljb250ZXh0LmdldEVKQk9iamVjdCgpOwotICAgICAgICAgCi0gICAgICAgICByZXR1cm4gZWpiU2VsZWN0UmVtb3RlVGVhbXMobGVhZ3VlKTsgCisKKyAgICAgICAgIHJldHVybiBlamJTZWxlY3RSZW1vdGVUZWFtcyhsZWFndWUpOwogICAgIH0KIAotICAgIAorCiAgICAgcHVibGljIExvY2FsVGVhbSBnZXRUZWFtQnlDaXR5KFN0cmluZyBjaXR5KSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGVqYlNlbGVjdFRlYW1CeUNpdHkoY2l0eSk7CiAgICAgfQogCiAgICAgcHVibGljIFRlYW0gZ2V0UmVtb3RlVGVhbUJ5Q2l0eShTdHJpbmcgY2l0eSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBlamJTZWxlY3RSZW1vdGVUZWFtQnlDaXR5KGNpdHkpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVhbXNOYW1lQnlDaXR5KFN0cmluZyBjaXR5KSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGVqYlNlbGVjdFRlYW1zTmFtZUJ5Q2l0eShjaXR5KTsKICAgICB9CiAKLSAgICAKKwogICAgIHB1YmxpYyBTZXQgZ2V0UGxheWVyc0Zyb21MZWFndWUoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWUgPSAodGVhbS5Mb2NhbExlYWd1ZSljb250ZXh0LmdldEVKQkxvY2FsT2JqZWN0KCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBlamJTZWxlY3RQbGF5ZXJzQnlMZWFndWUobGVhZ3VlKTsKLSAgICB9IAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGdldFJlbW90ZVBsYXllcnNGcm9tTGVhZ3VlKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgTGVhZ3VlIGxlYWd1ZSA9ICh0ZWFtLkxlYWd1ZSljb250ZXh0LmdldEVKQk9iamVjdCgpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gZWpiU2VsZWN0UmVtb3RlUGxheWVyc0J5TGVhZ3VlKGxlYWd1ZSk7Ci0gICAgfSAKLSAgICAgICAgCi0gICAgCisgICAgfQorCisKICAgICBwdWJsaWMgdm9pZCBhZGRUZWFtKExvY2FsVGVhbSB0ZWFtKSB7CiAKICAgICAgICAgRGVidWcucHJpbnQoIlRlYW1CZWFuIGFkZFRlYW0iKTsKQEAgLTE1MCwzMiArMTUwLDMyIEBACiAgICAgICAgIHNldFNwb3J0KHNwb3J0KTsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgc3BvcnQpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24geyB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgY3R4KSB7CiAgICAgICAgIGNvbnRleHQgPSBjdHg7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgewogICAgICAgICBjb250ZXh0ID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJMZWFndWVCZWFuIGVqYlJlbW92ZSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJMZWFndWVCZWFuIGVqYkxvYWQiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsKICAgICAgICAgRGVidWcucHJpbnQoIkxlYWd1ZUJlYW4gZWpiU3RvcmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7IH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgeyB9CiAKIH0gLy8gTGVhZ3VlQmVhbiBjbGFzcwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9lamIvdGVhbS9MZWFndWVIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2VqYi90ZWFtL0xlYWd1ZUhvbWUuamF2YQppbmRleCAyMmE3MzRhLi44YmMwNzgyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2VqYi90ZWFtL0xlYWd1ZUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2VqYi90ZWFtL0xlYWd1ZUhvbWUuamF2YQpAQCAtMjUsMTQgKzI1LDE0IEBACiAKICAgICBwdWJsaWMgTGVhZ3VlIGNyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHNwb3J0KQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgTGVhZ3VlIGZpbmRCeVByaW1hcnlLZXkgKFN0cmluZyBpZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEFsbCgpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgTGVhZ3VlIGZpbmRCeU5hbWUoU3RyaW5nIG5hbWUpCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsJCQkJCQotICAgICAgICAKKyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2VqYi90ZWFtL0xvY2FsTGVhZ3VlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2VqYi90ZWFtL0xvY2FsTGVhZ3VlLmphdmEKaW5kZXggZjJlYjA0Ni4uYTE0NDYxNyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9lamIvdGVhbS9Mb2NhbExlYWd1ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3RlYW0vTG9jYWxMZWFndWUuamF2YQpAQCAtMzMsNSArMzMsNSBAQAogICAgIHB1YmxpYyBMb2NhbFRlYW0gZ2V0VGVhbUJ5Q2l0eShTdHJpbmcgY2l0eSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1zTmFtZUJ5Q2l0eShTdHJpbmcgY2l0eSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKICAgICBwdWJsaWMgU2V0IGdldFBsYXllcnNGcm9tTGVhZ3VlKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9lamIvdGVhbS9Mb2NhbExlYWd1ZUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3RlYW0vTG9jYWxMZWFndWVIb21lLmphdmEKaW5kZXggZWMxNzZkYS4uYzE5YWY3NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9lamIvdGVhbS9Mb2NhbExlYWd1ZUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2VqYi90ZWFtL0xvY2FsTGVhZ3VlSG9tZS5qYXZhCkBAIC0yMCwxNyArMjAsMTcgQEAKIGltcG9ydCBqYWthcnRhLmVqYi4qOwogCiBwdWJsaWMgaW50ZXJmYWNlIExvY2FsTGVhZ3VlSG9tZSBleHRlbmRzIEVKQkxvY2FsSG9tZSB7Ci0gICAgCisKICAgICBwdWJsaWMgTG9jYWxMZWFndWUgY3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgc3BvcnQpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgTG9jYWxMZWFndWUgZmluZEJ5UHJpbWFyeUtleSAoU3RyaW5nIGlkKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEFsbCgpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgcHVibGljIExvY2FsTGVhZ3VlIGZpbmRCeU5hbWUoU3RyaW5nIG5hbWUpCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CQkJCQkKLSAgICAgICAgCisgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3RlYW0vTG9jYWxQbGF5ZXJIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2VqYi90ZWFtL0xvY2FsUGxheWVySG9tZS5qYXZhCmluZGV4IDkwNDU4ZTMuLjU3NzcwNzIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3RlYW0vTG9jYWxQbGF5ZXJIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9lamIvdGVhbS9Mb2NhbFBsYXllckhvbWUuamF2YQpAQCAtMjAsNjAgKzIwLDYwIEBACiBpbXBvcnQgamFrYXJ0YS5lamIuKjsKIAogcHVibGljIGludGVyZmFjZSBMb2NhbFBsYXllckhvbWUgZXh0ZW5kcyBFSkJMb2NhbEhvbWUgewotICAgIAorCiAgICAgcHVibGljIExvY2FsUGxheWVyIGNyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHBvc2l0aW9uLAogICAgICAgICBkb3VibGUgc2FsYXJ5KQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIExvY2FsUGxheWVyIGZpbmRCeVByaW1hcnlLZXkgKFN0cmluZyBpZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKLSAgICAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQb3NpdGlvbihTdHJpbmcgcG9zaXRpb24pIAorCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UG9zaXRpb24oU3RyaW5nIHBvc2l0aW9uKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5SGlnaGVyU2FsYXJ5KFN0cmluZyBuYW1lKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlIaWdoZXJTYWxhcnkoU3RyaW5nIG5hbWUpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlTYWxhcnlSYW5nZShkb3VibGUgbG93LCBkb3VibGUgaGlnaCkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U2FsYXJ5UmFuZ2UoZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlMZWFndWUoTG9jYWxMZWFndWUgbGVhZ3VlKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlMZWFndWUoTG9jYWxMZWFndWUgbGVhZ3VlKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U3BvcnQoU3RyaW5nIHNwb3J0KSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlTcG9ydChTdHJpbmcgc3BvcnQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlDaXR5KFN0cmluZyBjaXR5KSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlDaXR5KFN0cmluZyBjaXR5KQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEFsbCgpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZE5vdE9uVGVhbSgpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmROb3RPblRlYW0oKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UG9zaXRpb25BbmROYW1lKFN0cmluZyBwb3NpdGlvbiwgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UG9zaXRpb25BbmROYW1lKFN0cmluZyBwb3NpdGlvbiwKICAgICAgICAgU3RyaW5nIG5hbWUpIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlUZXN0IChTdHJpbmcgcGFybTEsIFN0cmluZyBwYXJtMiwgU3RyaW5nIHBhcm0zKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UG9zaXRpb25zR29hbGtlZXBlck9yRGVmZW5kZXIoKQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOyAgIAkKLSAgICAgICAgCisgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CisKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlOYW1lRW5kaW5nV2l0aE9OKCkKLSAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsgICAJCisgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlOdWxsTmFtZSgpCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247ICAgCQorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5VGVhbShMb2NhbFRlYW0gdGVhbSkKLSAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsgICAJICAgICAgICAKLSAgICAgICAgCisgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CisKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlTYWxhcmF5V2l0aEFyaXRobWV0aWNGdW5jdGlvbkFCUyhkb3VibGUgc2FsYXJheSkKLSAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsgICAgICAgCisgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlTYWxhcmF5V2l0aEFyaXRobWV0aWNGdW5jdGlvblNRUlQoZG91YmxlIHNhbGFyYXkpCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247ICAgICAgIAotICAgICAgICAKKyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9lamIvdGVhbS9Mb2NhbFRlYW0uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3RlYW0vTG9jYWxUZWFtLmphdmEKaW5kZXggOTE0YTRjYi4uZjg3ZjVlZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9lamIvdGVhbS9Mb2NhbFRlYW0uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2VqYi90ZWFtL0xvY2FsVGVhbS5qYXZhCkBAIC0zMSw4ICszMSw4IEBACiAgICAgcHVibGljIHZvaWQgYWRkUGxheWVyKExvY2FsUGxheWVyIHBsYXllcik7CiAgICAgcHVibGljIHZvaWQgZHJvcFBsYXllcihMb2NhbFBsYXllciBwbGF5ZXIpOwogICAgIHB1YmxpYyBkb3VibGUgZ2V0U2FsYXJ5T2ZQbGF5ZXIoU3RyaW5nIHBsYXllck5hbWUpOwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czEoKTsgCi0gICAgcHVibGljIFN0cmluZyBnZXRUZWFtTmFtZVdpdGhTdHJpbmdmdW5jdGlvblRlc3RzMigpOyAKLSAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1OYW1lV2l0aFN0cmluZ2Z1bmN0aW9uVGVzdHMzKCk7IAotICAgIAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czEoKTsKKyAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1OYW1lV2l0aFN0cmluZ2Z1bmN0aW9uVGVzdHMyKCk7CisgICAgcHVibGljIFN0cmluZyBnZXRUZWFtTmFtZVdpdGhTdHJpbmdmdW5jdGlvblRlc3RzMygpOworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2VqYi90ZWFtL0xvY2FsVGVhbUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3RlYW0vTG9jYWxUZWFtSG9tZS5qYXZhCmluZGV4IDg4NDY1N2UuLmM5ZTJhMWUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3RlYW0vTG9jYWxUZWFtSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3RlYW0vTG9jYWxUZWFtSG9tZS5qYXZhCkBAIC0yMiwxNyArMjIsMTcgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247CiAKIHB1YmxpYyBpbnRlcmZhY2UgTG9jYWxUZWFtSG9tZSBleHRlbmRzIEVKQkxvY2FsSG9tZSB7Ci0gICAgCisKICAgICBwdWJsaWMgTG9jYWxUZWFtIGNyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGNpdHkpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgTG9jYWxUZWFtIGZpbmRCeVByaW1hcnlLZXkgKFN0cmluZyBpZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKLSAgICAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQbGF5ZXJBbmRMZWFndWUoTG9jYWxQbGF5ZXIgcGxheWVyLCAKKworICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBsYXllckFuZExlYWd1ZShMb2NhbFBsYXllciBwbGF5ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3RlYW0vUGxheWVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9lamIvdGVhbS9QbGF5ZXJCZWFuLmphdmEKaW5kZXggNDRiMGE4ZS4uN2NkMjg5MCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9lamIvdGVhbS9QbGF5ZXJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9lamIvdGVhbS9QbGF5ZXJCZWFuLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIAogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UGxheWVySWQoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRQbGF5ZXJJZChTdHJpbmcgaWQpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXROYW1lKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7CiAKQEAgLTUyLDIwICs1MiwyMCBAQAogICAgIHB1YmxpYyBhYnN0cmFjdCBDb2xsZWN0aW9uIGVqYlNlbGVjdFNwb3J0cyhMb2NhbFBsYXllciBwbGF5ZXIpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgCisKKwogICAgIC8vIEJ1c2luZXNzIG1ldGhvZHMKIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGdldExlYWd1ZXMoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKIAotICAgICAgICAgTG9jYWxQbGF5ZXIgcGxheWVyID0gCisgICAgICAgICBMb2NhbFBsYXllciBwbGF5ZXIgPQogICAgICAgICAgICAgICh0ZWFtLkxvY2FsUGxheWVyKWNvbnRleHQuZ2V0RUpCTG9jYWxPYmplY3QoKTsKICAgICAgICAgIHJldHVybiBlamJTZWxlY3RMZWFndWVzKHBsYXllcik7CiAgICAgfQogCiAgICAgcHVibGljIENvbGxlY3Rpb24gZ2V0U3BvcnRzKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7CiAKLSAgICAgICAgIExvY2FsUGxheWVyIHBsYXllciA9IAorICAgICAgICAgTG9jYWxQbGF5ZXIgcGxheWVyID0KICAgICAgICAgICAgICAodGVhbS5Mb2NhbFBsYXllciljb250ZXh0LmdldEVKQkxvY2FsT2JqZWN0KCk7CiAgICAgICAgICByZXR1cm4gZWpiU2VsZWN0U3BvcnRzKHBsYXllcik7CiAgICAgfQpAQCAtODIsMzIgKzgyLDMyIEBACiAgICAgICAgIHNldFNhbGFyeShzYWxhcnkpOwogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBwb3NpdGlvbiwKICAgICAgICAgZG91YmxlIHNhbGFyeSkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7IH0KIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBjdHgpIHsKICAgICAgICAgY29udGV4dCA9IGN0eDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKSB7CiAgICAgICAgIGNvbnRleHQgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKICAgICAgICAgRGVidWcucHJpbnQoIlBsYXllckJlYW4gZWpiUmVtb3ZlIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKICAgICAgICAgRGVidWcucHJpbnQoIlBsYXllckJlYW4gZWpiTG9hZCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUGxheWVyQmVhbiBlamJTdG9yZSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7IH0KIAogfSAvLyBQbGF5ZXJCZWFuIGNsYXNzCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2VqYi90ZWFtL1BsYXllckhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3RlYW0vUGxheWVySG9tZS5qYXZhCmluZGV4IGRlZDk3MjQuLjg0NTk4NTIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3RlYW0vUGxheWVySG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3RlYW0vUGxheWVySG9tZS5qYXZhCkBAIC0yNiwzNSArMjYsMzUgQEAKICAgICBwdWJsaWMgUGxheWVyIGNyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHBvc2l0aW9uLAogICAgICAgICBkb3VibGUgc2FsYXJ5KQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgUGxheWVyIGZpbmRCeVByaW1hcnlLZXkgKFN0cmluZyBpZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwotICAgIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBvc2l0aW9uKFN0cmluZyBwb3NpdGlvbikgCisKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQb3NpdGlvbihTdHJpbmcgcG9zaXRpb24pCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5SGlnaGVyU2FsYXJ5KFN0cmluZyBuYW1lKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlTYWxhcnlSYW5nZShkb3VibGUgbG93LCBkb3VibGUgaGlnaCkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U2FsYXJ5UmFuZ2UoZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAotLy8gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5TGVhZ3VlKExlYWd1ZSBsZWFndWUpIAorLy8gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5TGVhZ3VlKExlYWd1ZSBsZWFndWUpCiAvLyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U3BvcnQoU3RyaW5nIHNwb3J0KSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlTcG9ydChTdHJpbmcgc3BvcnQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUNpdHkoU3RyaW5nIGNpdHkpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUNpdHkoU3RyaW5nIGNpdHkpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZE5vdE9uVGVhbSgpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmROb3RPblRlYW0oKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQb3NpdGlvbkFuZE5hbWUoU3RyaW5nIHBvc2l0aW9uLCAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQb3NpdGlvbkFuZE5hbWUoU3RyaW5nIHBvc2l0aW9uLAogICAgICAgICBTdHJpbmcgbmFtZSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5VGVzdCAoU3RyaW5nIHBhcm0xLCBTdHJpbmcgcGFybTIsIFN0cmluZyBwYXJtMykKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3RlYW0vVGVhbUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3RlYW0vVGVhbUJlYW4uamF2YQppbmRleCA3NGZhNGQ3Li5iODUyZWMzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2VqYi90ZWFtL1RlYW1CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9lamIvdGVhbS9UZWFtQmVhbi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFRlYW1JZCgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFRlYW1JZChTdHJpbmcgaWQpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXROYW1lKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7CiAKQEAgLTM5LDcgKzM5LDcgQEAKIAogCiAgICAgLy8gQWNjZXNzIG1ldGhvZHMgZm9yIHJlbGF0aW9uc2hpcCBmaWVsZHMKLSAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBDb2xsZWN0aW9uIGdldFBsYXllcnMoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRQbGF5ZXJzKENvbGxlY3Rpb24gcGxheWVycyk7CiAKQEAgLTUyLDU1ICs1Miw1NSBAQAogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBlamJTZWxlY3RCeU5hbWVXaXRoQ09OQ0FUKFN0cmluZyBwYXJ0MSwgU3RyaW5nIHBhcnQyKQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZWpiU2VsZWN0QnlOYW1lU3Vic3RyaW5nKFN0cmluZyBzdWJzdHJpbmcpCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CQorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBlamJTZWxlY3ROYW1lTG9jYXRlKFN0cmluZyBzdWJzdHJpbmcpCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CQorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAvLyBCdXNpbmVzcyBtZXRob2RzCiAKICAgICBwdWJsaWMgZG91YmxlIGdldFNhbGFyeU9mUGxheWVyKFN0cmluZyBwbGF5ZXJOYW1lKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKICAgICAgICAgTG9jYWxUZWFtIHRlYW0gPSAodGVhbS5Mb2NhbFRlYW0pY29udGV4dC5nZXRFSkJMb2NhbE9iamVjdCgpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gZWpiU2VsZWN0U2FsYXJ5T2ZQbGF5ZXJJblRlYW0odGVhbSwgcGxheWVyTmFtZSk7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1OYW1lV2l0aFN0cmluZ2Z1bmN0aW9uVGVzdHMxKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIFN0cmluZ0J1ZmZlciBvdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAvLyAgICAgICAgTG9jYWxUZWFtIHRlYW0gPSAodGVhbS5Mb2NhbFRlYW0pIGNvbnRleHQuZ2V0RUpCTG9jYWxPYmplY3QoKTsKIC8vICAgICAgICBvdXQuYXBwZW5kKCI8QlI+TmFtZSBvZiBUZWFtIDogIiArIHRlYW0uZ2V0TmFtZSgpKTsKLSAgICAgICAgb3V0LmFwcGVuZCgiPEJSPiIpOwkJCisgICAgICAgIG91dC5hcHBlbmQoIjxCUj4iKTsKICAgICAgICAgb3V0LmFwcGVuZChlamJTZWxlY3RCeU5hbWVXaXRoQ09OQ0FUKCJDciIsICJvd3MiKSk7CiAgICAgICAgIG91dC5hcHBlbmQoIjxCUj4iKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG91dC50b1N0cmluZygpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVhbU5hbWVXaXRoU3RyaW5nZnVuY3Rpb25UZXN0czIoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgU3RyaW5nQnVmZmVyIG91dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgICAgb3V0LmFwcGVuZChlamJTZWxlY3RCeU5hbWVTdWJzdHJpbmcoImFhYWFDcm93c2FhYWFhIikpOwogICAgICAgICBvdXQuYXBwZW5kKCI8QlI+Iik7CiAKICAgICAgICAgcmV0dXJuIG91dC50b1N0cmluZygpOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlYW1OYW1lV2l0aFN0cmluZ2Z1bmN0aW9uVGVzdHMzKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIFN0cmluZ0J1ZmZlciBvdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgIG91dC5hcHBlbmQoZWpiU2VsZWN0TmFtZUxvY2F0ZSgicm93IikpOwogICAgICAgICBvdXQuYXBwZW5kKCI8QlI+Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBvdXQudG9TdHJpbmcoKTsKICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0Q29weU9mUGxheWVycygpIHsKIAogICAgICAgICBEZWJ1Zy5wcmludCgiVGVhbUJlYW4gZ2V0Q29weU9mUGxheWVycyIpOwpAQCAtMTUxLDMwICsxNTEsMzAgQEAKICAgICAgICAgc2V0Q2l0eShjaXR5KTsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgY2l0eSkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7IH0KIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBjdHgpIHsKICAgICAgICAgY29udGV4dCA9IGN0eDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKSB7CiAgICAgICAgIGNvbnRleHQgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKICAgICAgICAgRGVidWcucHJpbnQoIlRlYW1CZWFuIGVqYlJlbW92ZSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJUZWFtQmVhbiBlamJMb2FkIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJUZWFtQmVhbiBlamJTdG9yZSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsgfQogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgeyB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3RlYW0vVGVhbUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvZWpiL3RlYW0vVGVhbUhvbWUuamF2YQppbmRleCBmZTEzMDQ0Li5iY2ZlNDM5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2VqYi90ZWFtL1RlYW1Ib21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9lamIvdGVhbS9UZWFtSG9tZS5qYXZhCkBAIC0yNSwxNCArMjUsMTQgQEAKIAogICAgIHB1YmxpYyBUZWFtIGNyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGNpdHkpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBUZWFtIGZpbmRCeVByaW1hcnlLZXkgKFN0cmluZyBpZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEFsbCgpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247Ci0gICAgCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UGxheWVyQW5kTGVhZ3VlVmlhUmVtb3RlKFBsYXllciBwbGF5ZXIsIAorCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UGxheWVyQW5kTGVhZ3VlVmlhUmVtb3RlKFBsYXllciBwbGF5ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlYWd1ZSBsZWFndWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9lamIvdXRpbC9QbGF5ZXJEZXRhaWxzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2VqYi91dGlsL1BsYXllckRldGFpbHMuamF2YQppbmRleCA4MTA0MWMyLi40NzY1YmNlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2VqYi91dGlsL1BsYXllckRldGFpbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L2VqYi91dGlsL1BsYXllckRldGFpbHMuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIHBvc2l0aW9uOwogICAgIHByaXZhdGUgZG91YmxlIHNhbGFyeTsKIAotICAgIHB1YmxpYyBQbGF5ZXJEZXRhaWxzIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgcG9zaXRpb24sIAorICAgIHB1YmxpYyBQbGF5ZXJEZXRhaWxzIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgcG9zaXRpb24sCiAgICAgICAgIGRvdWJsZSBzYWxhcnkpIHsKIAogICAgICAgICB0aGlzLmlkID0gaWQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L3NlcnZsZXQvUm9zdGVyU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9zZXJ2bGV0L1Jvc3RlclNlcnZsZXQuamF2YQppbmRleCA4MWFkZTA0Li42YTNjOTlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L3NlcnZsZXQvUm9zdGVyU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvc2VydmxldC9Sb3N0ZXJTZXJ2bGV0LmphdmEKQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUm9zdGVySG9tZS5jbGFzcyk7CiAKICAgICAgICAgICAgUm9zdGVyIG15Um9zdGVyID0gaG9tZS5jcmVhdGUoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgIC8vIGRlbGV0aW5nIGFsbCBleGlzaXRpbmcgREItZW50cmllcwogICAgICAgICAgICBteVJvc3Rlci5jbGVhblVwKCk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvc3FsL1Jvc3RlckFwcF9kYjIuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9zcWwvUm9zdGVyQXBwX2RiMi5zcWwKaW5kZXggYmUwYzkxOC4uNjA3NTZiMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9zcWwvUm9zdGVyQXBwX2RiMi5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9zcWwvUm9zdGVyQXBwX2RiMi5zcWwKQEAgLTMsMzcgKzMsMzcgQEAKIERST1AgVEFCTEUgVGVhbSA7CiBEUk9QIFRBQkxFIExlYWd1ZSA7CiAKLUNSRUFURSBUQUJMRSBQbGF5ZXIgCitDUkVBVEUgVEFCTEUgUGxheWVyCiAoCi0JcGxheWVyX0lkIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCi0JbmFtZSBWQVJDSEFSKDI1NSksIAotCXBvc2l0aW9uIFZBUkNIQVIoMjU1KSwgCi0Jc2FsYXJ5IERPVUJMRSBQUkVDSVNJT04gTk9UIE5VTEwKKyAgICBwbGF5ZXJfSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgIG5hbWUgVkFSQ0hBUigyNTUpLAorICAgIHBvc2l0aW9uIFZBUkNIQVIoMjU1KSwKKyAgICBzYWxhcnkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTAogKTsKIAotQ1JFQVRFIFRBQkxFIExlYWd1ZSAKK0NSRUFURSBUQUJMRSBMZWFndWUKICgKLQlsZWFndWVfSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLQluYW1lIFZBUkNIQVIoMjU1KSwgCi0Jc3BvcnQgVkFSQ0hBUigyNTUpCisgICAgbGVhZ3VlX0lkIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKKyAgICBuYW1lIFZBUkNIQVIoMjU1KSwKKyAgICBzcG9ydCBWQVJDSEFSKDI1NSkKICk7CiAKLUNSRUFURSBUQUJMRSBUZWFtIAorQ1JFQVRFIFRBQkxFIFRlYW0KICgKLQl0ZWFtX0lkIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCi0JY2l0eSBWQVJDSEFSKDI1NSksIAotCW5hbWUgVkFSQ0hBUigyNTUpLAotCWxlYWd1ZV9JZCBWQVJDSEFSKDI1NSksCi0JRk9SRUlHTiBLRVkgKGxlYWd1ZV9JZCkgICBSRUZFUkVOQ0VTIExlYWd1ZSAobGVhZ3VlX0lkKQorICAgIHRlYW1fSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgIGNpdHkgVkFSQ0hBUigyNTUpLAorICAgIG5hbWUgVkFSQ0hBUigyNTUpLAorICAgIGxlYWd1ZV9JZCBWQVJDSEFSKDI1NSksCisgICAgRk9SRUlHTiBLRVkgKGxlYWd1ZV9JZCkgICBSRUZFUkVOQ0VTIExlYWd1ZSAobGVhZ3VlX0lkKQogKTsKIAotQ1JFQVRFIFRBQkxFIFRlYW1QbGF5ZXIgCitDUkVBVEUgVEFCTEUgVGVhbVBsYXllcgogKAotCXBsYXllcl9JZCBWQVJDSEFSKDI1NSkgTk9UIE5VTEwsIAotICAgICAgICB0ZWFtX0lkIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCwgCisgICAgcGxheWVyX0lkIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCwKKyAgICAgICAgdGVhbV9JZCBWQVJDSEFSKDI1NSkgTk9UIE5VTEwsCiAgICAgICAgIENPTlNUUkFJTlQgcGtfVGVhbVBsYXllciBQUklNQVJZIEtFWSAocGxheWVyX0lkLCB0ZWFtX0lkKSwKLQlGT1JFSUdOIEtFWSAodGVhbV9JZCkgICBSRUZFUkVOQ0VTIFRlYW0gKHRlYW1fSWQpLAotCUZPUkVJR04gS0VZIChwbGF5ZXJfSWQpICAgUkVGRVJFTkNFUyBQbGF5ZXIgKHBsYXllcl9JZCkKKyAgICBGT1JFSUdOIEtFWSAodGVhbV9JZCkgICBSRUZFUkVOQ0VTIFRlYW0gKHRlYW1fSWQpLAorICAgIEZPUkVJR04gS0VZIChwbGF5ZXJfSWQpICAgUkVGRVJFTkNFUyBQbGF5ZXIgKHBsYXllcl9JZCkKICk7CiAKIGNvbW1pdDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvc3FsL1Jvc3RlckFwcF9kZXJieS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L3NxbC9Sb3N0ZXJBcHBfZGVyYnkuc3FsCmluZGV4IDVlY2U2MGUuLmM5ZGNjM2UgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvc3FsL1Jvc3RlckFwcF9kZXJieS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9zcWwvUm9zdGVyQXBwX2RlcmJ5LnNxbApAQCAtMywzNSArMywzNSBAQAogRFJPUCBUQUJMRSBURUFNIDsKIERST1AgVEFCTEUgTEVBR1VFIDsKIAotQ1JFQVRFIFRBQkxFIFBMQVlFUiAKK0NSRUFURSBUQUJMRSBQTEFZRVIKICgKLQlwbGF5ZXJfSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLQluYW1lIFZBUkNIQVIoMjU1KSwgCi0JcG9zaXRpb24gVkFSQ0hBUigyNTUpLCAKLQlzYWxhcnkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTAorICAgIHBsYXllcl9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgbmFtZSBWQVJDSEFSKDI1NSksCisgICAgcG9zaXRpb24gVkFSQ0hBUigyNTUpLAorICAgIHNhbGFyeSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMCiApOwogCi1DUkVBVEUgVEFCTEUgTEVBR1VFIAorQ1JFQVRFIFRBQkxFIExFQUdVRQogKAotCWxlYWd1ZV9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAotCW5hbWUgVkFSQ0hBUigyNTUpLCAKLQlzcG9ydCBWQVJDSEFSKDI1NSkKKyAgICBsZWFndWVfSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgIG5hbWUgVkFSQ0hBUigyNTUpLAorICAgIHNwb3J0IFZBUkNIQVIoMjU1KQogKTsKIAotQ1JFQVRFIFRBQkxFIFRFQU0gCitDUkVBVEUgVEFCTEUgVEVBTQogKAotCXRlYW1fSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLQljaXR5IFZBUkNIQVIoMjU1KSwgCi0JbmFtZSBWQVJDSEFSKDI1NSksCi0JbGVhZ3VlX0lkIFZBUkNIQVIoMjU1KSwKLQlGT1JFSUdOIEtFWSAobGVhZ3VlX0lkKSAgIFJFRkVSRU5DRVMgTGVhZ3VlIChsZWFndWVfSWQpCisgICAgdGVhbV9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgY2l0eSBWQVJDSEFSKDI1NSksCisgICAgbmFtZSBWQVJDSEFSKDI1NSksCisgICAgbGVhZ3VlX0lkIFZBUkNIQVIoMjU1KSwKKyAgICBGT1JFSUdOIEtFWSAobGVhZ3VlX0lkKSAgIFJFRkVSRU5DRVMgTGVhZ3VlIChsZWFndWVfSWQpCiApOwogCi1DUkVBVEUgVEFCTEUgVEVBTVBMQVlFUiAKK0NSRUFURSBUQUJMRSBURUFNUExBWUVSCiAoCi0JcGxheWVyX0lkIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCwgCi0gICAgICAgIHRlYW1fSWQgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLCAKKyAgICBwbGF5ZXJfSWQgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAorICAgICAgICB0ZWFtX0lkIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCwKICAgICAgICAgQ09OU1RSQUlOVCBwa19UZWFtUGxheWVyIFBSSU1BUlkgS0VZIChwbGF5ZXJfSWQsIHRlYW1fSWQpLAotCUZPUkVJR04gS0VZICh0ZWFtX0lkKSAgIFJFRkVSRU5DRVMgVGVhbSAodGVhbV9JZCksCi0JRk9SRUlHTiBLRVkgKHBsYXllcl9JZCkgICBSRUZFUkVOQ0VTIFBsYXllciAocGxheWVyX0lkKQorICAgIEZPUkVJR04gS0VZICh0ZWFtX0lkKSAgIFJFRkVSRU5DRVMgVGVhbSAodGVhbV9JZCksCisgICAgRk9SRUlHTiBLRVkgKHBsYXllcl9JZCkgICBSRUZFUkVOQ0VTIFBsYXllciAocGxheWVyX0lkKQogKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvc3FsL1Jvc3RlckFwcF9pZnguc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9zcWwvUm9zdGVyQXBwX2lmeC5zcWwKaW5kZXggYmI0ZDg2Yy4uOTRmODhkMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9zcWwvUm9zdGVyQXBwX2lmeC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9zcWwvUm9zdGVyQXBwX2lmeC5zcWwKQEAgLTMsMzcgKzMsMzcgQEAKIERST1AgVEFCTEUgVGVhbSA7CiBEUk9QIFRBQkxFIExlYWd1ZSA7CiAKLUNSRUFURSBUQUJMRSBQbGF5ZXIgCitDUkVBVEUgVEFCTEUgUGxheWVyCiAoCi0JcGxheWVyX0lkIFZBUkNIQVIoMTI3KSBQUklNQVJZIEtFWSwgCi0JbmFtZSBWQVJDSEFSKDEyNyksIAotCXBvc2l0aW9uIFZBUkNIQVIoMTI3KSwgCi0Jc2FsYXJ5IERPVUJMRSBQUkVDSVNJT04gTk9UIE5VTEwgCisgICAgcGxheWVyX0lkIFZBUkNIQVIoMTI3KSBQUklNQVJZIEtFWSwKKyAgICBuYW1lIFZBUkNIQVIoMTI3KSwKKyAgICBwb3NpdGlvbiBWQVJDSEFSKDEyNyksCisgICAgc2FsYXJ5IERPVUJMRSBQUkVDSVNJT04gTk9UIE5VTEwKICk7CiAKLUNSRUFURSBUQUJMRSBMZWFndWUgCitDUkVBVEUgVEFCTEUgTGVhZ3VlCiAoCi0JbGVhZ3VlX0lkIFZBUkNIQVIoMTI3KSBQUklNQVJZIEtFWSwgCi0JbmFtZSBWQVJDSEFSKDEyNyksIAotCXNwb3J0IFZBUkNIQVIoMTI3KQorICAgIGxlYWd1ZV9JZCBWQVJDSEFSKDEyNykgUFJJTUFSWSBLRVksCisgICAgbmFtZSBWQVJDSEFSKDEyNyksCisgICAgc3BvcnQgVkFSQ0hBUigxMjcpCiApOwogCi1DUkVBVEUgVEFCTEUgVGVhbSAKK0NSRUFURSBUQUJMRSBUZWFtCiAoCi0JdGVhbV9JZCBWQVJDSEFSKDEyNykgUFJJTUFSWSBLRVksIAotCWNpdHkgVkFSQ0hBUigxMjcpLCAKLQluYW1lIFZBUkNIQVIoMTI3KSwKLQlsZWFndWVfSWQgVkFSQ0hBUigxMjcpLAotCUZPUkVJR04gS0VZIChsZWFndWVfSWQpICAgUkVGRVJFTkNFUyBMZWFndWUgKGxlYWd1ZV9JZCkKKyAgICB0ZWFtX0lkIFZBUkNIQVIoMTI3KSBQUklNQVJZIEtFWSwKKyAgICBjaXR5IFZBUkNIQVIoMTI3KSwKKyAgICBuYW1lIFZBUkNIQVIoMTI3KSwKKyAgICBsZWFndWVfSWQgVkFSQ0hBUigxMjcpLAorICAgIEZPUkVJR04gS0VZIChsZWFndWVfSWQpICAgUkVGRVJFTkNFUyBMZWFndWUgKGxlYWd1ZV9JZCkKICk7CiAKLUNSRUFURSBUQUJMRSBUZWFtUGxheWVyIAorQ1JFQVRFIFRBQkxFIFRlYW1QbGF5ZXIKICgKLQlwbGF5ZXJfSWQgVkFSQ0hBUigxMjcpLCAKLSAgICAgICAgdGVhbV9JZCBWQVJDSEFSKDEyNyksIAorICAgIHBsYXllcl9JZCBWQVJDSEFSKDEyNyksCisgICAgICAgIHRlYW1fSWQgVkFSQ0hBUigxMjcpLAogICAgICAgICBQUklNQVJZIEtFWSAocGxheWVyX0lkLCB0ZWFtX0lkKSwKLQlGT1JFSUdOIEtFWSAodGVhbV9JZCkgICBSRUZFUkVOQ0VTIFRlYW0gKHRlYW1fSWQpLAotCUZPUkVJR04gS0VZIChwbGF5ZXJfSWQpICAgUkVGRVJFTkNFUyBQbGF5ZXIgKHBsYXllcl9JZCkKKyAgICBGT1JFSUdOIEtFWSAodGVhbV9JZCkgICBSRUZFUkVOQ0VTIFRlYW0gKHRlYW1fSWQpLAorICAgIEZPUkVJR04gS0VZIChwbGF5ZXJfSWQpICAgUkVGRVJFTkNFUyBQbGF5ZXIgKHBsYXllcl9JZCkKICk7CiAKIGNvbW1pdDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvc3FsL1Jvc3RlckFwcF9tc3NxbC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L3NxbC9Sb3N0ZXJBcHBfbXNzcWwuc3FsCmluZGV4IDc4NzQ4OGYuLmJhZDlkNWEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvc3FsL1Jvc3RlckFwcF9tc3NxbC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9zcWwvUm9zdGVyQXBwX21zc3FsLnNxbApAQCAtMSw0MCArMSw0MCBAQAogZHJvcCB0YWJsZSBURUFNUExBWUVSCi1kcm9wIHRhYmxlIFBMQVlFUiAKK2Ryb3AgdGFibGUgUExBWUVSCiBkcm9wIHRhYmxlIFRFQU0KIGRyb3AgVEFCTEUgTEVBR1VFCiBnbwogCi1jcmVhdGUgdGFibGUgUExBWUVSIAorY3JlYXRlIHRhYmxlIFBMQVlFUgogKAotCVBMQVlFUl9JRCBWQVJDSEFSKDI1NSkgcHJpbWFyeSBrZXkgbm90IG51bGwsIAotCU5BTUUgVkFSQ0hBUigyNTUpLAotCVBPU0lUSU9OIFZBUkNIQVIoMjU1KSwgCi0JU0FMQVJZIGRvdWJsZSBwcmVjaXNpb24gbm90IG51bGwKKyAgICBQTEFZRVJfSUQgVkFSQ0hBUigyNTUpIHByaW1hcnkga2V5IG5vdCBudWxsLAorICAgIE5BTUUgVkFSQ0hBUigyNTUpLAorICAgIFBPU0lUSU9OIFZBUkNIQVIoMjU1KSwKKyAgICBTQUxBUlkgZG91YmxlIHByZWNpc2lvbiBub3QgbnVsbAogKQogCi1jcmVhdGUgdGFibGUgTEVBR1VFIAorY3JlYXRlIHRhYmxlIExFQUdVRQogKAotCUxFQUdVRV9JRCBWQVJDSEFSKDI1NSkgcHJpbWFyeSBrZXkgbm90IG51bGwsIAotCU5BTUUgVkFSQ0hBUigyNTUpLAotCVNQT1JUIFZBUkNIQVIoMjU1KQorICAgIExFQUdVRV9JRCBWQVJDSEFSKDI1NSkgcHJpbWFyeSBrZXkgbm90IG51bGwsCisgICAgTkFNRSBWQVJDSEFSKDI1NSksCisgICAgU1BPUlQgVkFSQ0hBUigyNTUpCiApCiAKLWNyZWF0ZSB0YWJsZSBURUFNIAorY3JlYXRlIHRhYmxlIFRFQU0KICgKLQlURUFNX0lEIFZBUkNIQVIoMjU1KSBwcmltYXJ5IGtleSBub3QgbnVsbCwgCi0JQ0lUWSBWQVJDSEFSKDI1NSksCi0JTkFNRSBWQVJDSEFSKDI1NSksCi0JTEVBR1VFX0lEIFZBUkNIQVIoMjU1KSwKLQlmb3JlaWduIGtleSAoTEVBR1VFX0lEKSByZWZlcmVuY2VzIExFQUdVRSAoTEVBR1VFX0lEKQorICAgIFRFQU1fSUQgVkFSQ0hBUigyNTUpIHByaW1hcnkga2V5IG5vdCBudWxsLAorICAgIENJVFkgVkFSQ0hBUigyNTUpLAorICAgIE5BTUUgVkFSQ0hBUigyNTUpLAorICAgIExFQUdVRV9JRCBWQVJDSEFSKDI1NSksCisgICAgZm9yZWlnbiBrZXkgKExFQUdVRV9JRCkgcmVmZXJlbmNlcyBMRUFHVUUgKExFQUdVRV9JRCkKICkKIAotY3JlYXRlIHRhYmxlIFRFQU1QTEFZRVIgCitjcmVhdGUgdGFibGUgVEVBTVBMQVlFUgogKAotCVBMQVlFUl9JRCBWQVJDSEFSKDI1NSkgbm90IG51bGwsCisgICAgUExBWUVSX0lEIFZBUkNIQVIoMjU1KSBub3QgbnVsbCwKICAgICBURUFNX0lEIFZBUkNIQVIoMjU1KSBub3QgbnVsbCwKICAgICBjb25zdHJhaW50IFBLX1RFQU1QTEFZRVIgcHJpbWFyeSBrZXkgKFBMQVlFUl9JRCwgVEVBTV9JRCksCi0JZm9yZWlnbiBrZXkgKFRFQU1fSUQpIHJlZmVyZW5jZXMgVEVBTSAoVEVBTV9JRCksCi0JZm9yZWlnbiBrZXkgKFBMQVlFUl9JRCkgcmVmZXJlbmNlcyBQTEFZRVIgKFBMQVlFUl9JRCkKKyAgICBmb3JlaWduIGtleSAoVEVBTV9JRCkgcmVmZXJlbmNlcyBURUFNIChURUFNX0lEKSwKKyAgICBmb3JlaWduIGtleSAoUExBWUVSX0lEKSByZWZlcmVuY2VzIFBMQVlFUiAoUExBWUVSX0lEKQogKQogCiBnbwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9zcWwvUm9zdGVyQXBwX215c3FsLnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvc3FsL1Jvc3RlckFwcF9teXNxbC5zcWwKaW5kZXggZDc2Mzc1Ny4uNDNmNDJjZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9zcWwvUm9zdGVyQXBwX215c3FsLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L3NxbC9Sb3N0ZXJBcHBfbXlzcWwuc3FsCkBAIC0zLDMzICszLDMzIEBACiBEUk9QIFRBQkxFIFRFQU0gOwogRFJPUCBUQUJMRSBMRUFHVUUgOwogCi1DUkVBVEUgVEFCTEUgUExBWUVSIAorQ1JFQVRFIFRBQkxFIFBMQVlFUgogKAotCVBMQVlFUl9JRCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksIAotCU5BTUUgICAgICBWQVJDSEFSKDI1NSksIAotCVBPU0lUSU9OICBWQVJDSEFSKDI1NSksIAotCVNBTEFSWSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMCisgICAgUExBWUVSX0lEIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwKKyAgICBOQU1FICAgICAgVkFSQ0hBUigyNTUpLAorICAgIFBPU0lUSU9OICBWQVJDSEFSKDI1NSksCisgICAgU0FMQVJZIERPVUJMRSBQUkVDSVNJT04gTk9UIE5VTEwKICkgRU5HSU5FPUlOTk9EQjsKIAotQ1JFQVRFIFRBQkxFIExFQUdVRSAKK0NSRUFURSBUQUJMRSBMRUFHVUUKICgKLQlMRUFHVUVfSUQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLCAKLQlOQU1FICAgICAgVkFSQ0hBUigyNTUpLCAKLQlTUE9SVCAgICAgVkFSQ0hBUigyNTUpCisgICAgTEVBR1VFX0lEIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwKKyAgICBOQU1FICAgICAgVkFSQ0hBUigyNTUpLAorICAgIFNQT1JUICAgICBWQVJDSEFSKDI1NSkKICkgRU5HSU5FPUlOTk9EQjsKIAotQ1JFQVRFIFRBQkxFIFRFQU0gCitDUkVBVEUgVEFCTEUgVEVBTQogKAotCVRFQU1fSUQgICBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksIAotCUNJVFkgICAgICBWQVJDSEFSKDI1NSksIAotCU5BTUUgICAgICBWQVJDSEFSKDI1NSksCi0JTEVBR1VFX0lEIFZBUkNIQVIoMjU1KQorICAgIFRFQU1fSUQgICBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksCisgICAgQ0lUWSAgICAgIFZBUkNIQVIoMjU1KSwKKyAgICBOQU1FICAgICAgVkFSQ0hBUigyNTUpLAorICAgIExFQUdVRV9JRCBWQVJDSEFSKDI1NSkKICkgRU5HSU5FPUlOTk9EQjsKIAotQ1JFQVRFIFRBQkxFIFRFQU1QTEFZRVIgCitDUkVBVEUgVEFCTEUgVEVBTVBMQVlFUgogKAotCVBMQVlFUl9JRCBWQVJDSEFSKDI1NSksIAotICAgICAgICBURUFNX0lEICAgVkFSQ0hBUigyNTUpLCAKKyAgICBQTEFZRVJfSUQgVkFSQ0hBUigyNTUpLAorICAgICAgICBURUFNX0lEICAgVkFSQ0hBUigyNTUpLAogICAgICAgICBDT05TVFJBSU5UIFBLX1RFQU1QTEFZRVIgUFJJTUFSWSBLRVkgKFBMQVlFUl9JRCwgVEVBTV9JRCkKICkgRU5HSU5FPUlOTk9EQjsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9zcWwvUm9zdGVyQXBwX29yYS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L3NxbC9Sb3N0ZXJBcHBfb3JhLnNxbAppbmRleCA0YjRhNTQ3Li4xN2ZhYmJiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L3NxbC9Sb3N0ZXJBcHBfb3JhLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L3NxbC9Sb3N0ZXJBcHBfb3JhLnNxbApAQCAtMywzNyArMywzNyBAQAogRFJPUCBUQUJMRSBUZWFtIDsKIERST1AgVEFCTEUgTGVhZ3VlIDsKIAotQ1JFQVRFIFRBQkxFIFBsYXllciAKK0NSRUFURSBUQUJMRSBQbGF5ZXIKICgKLQlwbGF5ZXJfSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLCAKLQluYW1lIFZBUkNIQVIoMjU1KSwgCi0JcG9zaXRpb24gVkFSQ0hBUigyNTUpLCAKLQlzYWxhcnkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTAorICAgIHBsYXllcl9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksCisgICAgbmFtZSBWQVJDSEFSKDI1NSksCisgICAgcG9zaXRpb24gVkFSQ0hBUigyNTUpLAorICAgIHNhbGFyeSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMCiApOwogCi1DUkVBVEUgVEFCTEUgTGVhZ3VlIAorQ1JFQVRFIFRBQkxFIExlYWd1ZQogKAotCWxlYWd1ZV9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksIAotCW5hbWUgVkFSQ0hBUigyNTUpLCAKLQlzcG9ydCBWQVJDSEFSKDI1NSkKKyAgICBsZWFndWVfSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLAorICAgIG5hbWUgVkFSQ0hBUigyNTUpLAorICAgIHNwb3J0IFZBUkNIQVIoMjU1KQogKTsKIAotQ1JFQVRFIFRBQkxFIFRlYW0gCitDUkVBVEUgVEFCTEUgVGVhbQogKAotCXRlYW1fSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLCAKLQljaXR5IFZBUkNIQVIoMjU1KSwgCi0JbmFtZSBWQVJDSEFSKDI1NSksCi0JbGVhZ3VlX0lkIFZBUkNIQVIoMjU1KSwKLQlGT1JFSUdOIEtFWSAobGVhZ3VlX0lkKSAgIFJFRkVSRU5DRVMgTGVhZ3VlIChsZWFndWVfSWQpCisgICAgdGVhbV9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksCisgICAgY2l0eSBWQVJDSEFSKDI1NSksCisgICAgbmFtZSBWQVJDSEFSKDI1NSksCisgICAgbGVhZ3VlX0lkIFZBUkNIQVIoMjU1KSwKKyAgICBGT1JFSUdOIEtFWSAobGVhZ3VlX0lkKSAgIFJFRkVSRU5DRVMgTGVhZ3VlIChsZWFndWVfSWQpCiApOwogCi1DUkVBVEUgVEFCTEUgVGVhbVBsYXllciAKK0NSRUFURSBUQUJMRSBUZWFtUGxheWVyCiAoCi0JcGxheWVyX0lkIFZBUkNIQVIoMjU1KSwgCi0gICAgICAgIHRlYW1fSWQgVkFSQ0hBUigyNTUpLCAKKyAgICBwbGF5ZXJfSWQgVkFSQ0hBUigyNTUpLAorICAgICAgICB0ZWFtX0lkIFZBUkNIQVIoMjU1KSwKICAgICAgICAgQ09OU1RSQUlOVCBwa19UZWFtUGxheWVyIFBSSU1BUlkgS0VZIChwbGF5ZXJfSWQsIHRlYW1fSWQpLAotCUZPUkVJR04gS0VZICh0ZWFtX0lkKSAgIFJFRkVSRU5DRVMgVGVhbSAodGVhbV9JZCksCi0JRk9SRUlHTiBLRVkgKHBsYXllcl9JZCkgICBSRUZFUkVOQ0VTIFBsYXllciAocGxheWVyX0lkKQorICAgIEZPUkVJR04gS0VZICh0ZWFtX0lkKSAgIFJFRkVSRU5DRVMgVGVhbSAodGVhbV9JZCksCisgICAgRk9SRUlHTiBLRVkgKHBsYXllcl9JZCkgICBSRUZFUkVOQ0VTIFBsYXllciAocGxheWVyX0lkKQogKTsKIAogY29tbWl0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9zcWwvUm9zdGVyQXBwX3Bicy5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L3NxbC9Sb3N0ZXJBcHBfcGJzLnNxbAppbmRleCAzZjZmNWQyLi42YjE5MGNlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L3NxbC9Sb3N0ZXJBcHBfcGJzLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L3NxbC9Sb3N0ZXJBcHBfcGJzLnNxbApAQCAtNSw0MiArNSw0MiBAQAogCiBjb21taXQ7CiAKLUNSRUFURSBUQUJMRSBQbGF5ZXIgCitDUkVBVEUgVEFCTEUgUGxheWVyCiAoCi0JcGxheWVyX0lkIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwgCi0JbmFtZSBWQVJDSEFSKDI1NSksIAotCXBvc2l0aW9uIFZBUkNIQVIoMjU1KSwgCi0Jc2FsYXJ5IERPVUJMRSBQUkVDSVNJT04gTk9UIE5VTEwKKyAgICBwbGF5ZXJfSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLAorICAgIG5hbWUgVkFSQ0hBUigyNTUpLAorICAgIHBvc2l0aW9uIFZBUkNIQVIoMjU1KSwKKyAgICBzYWxhcnkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTAogKTsKIAogY29tbWl0OwogCi1DUkVBVEUgVEFCTEUgTGVhZ3VlIAorQ1JFQVRFIFRBQkxFIExlYWd1ZQogKAotCWxlYWd1ZV9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksIAotCW5hbWUgVkFSQ0hBUigyNTUpLCAKLQlzcG9ydCBWQVJDSEFSKDI1NSkKKyAgICBsZWFndWVfSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLAorICAgIG5hbWUgVkFSQ0hBUigyNTUpLAorICAgIHNwb3J0IFZBUkNIQVIoMjU1KQogKTsKIAogY29tbWl0OwogCi1DUkVBVEUgVEFCTEUgVGVhbSAKK0NSRUFURSBUQUJMRSBUZWFtCiAoCi0JdGVhbV9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksIAotCWNpdHkgVkFSQ0hBUigyNTUpLCAKLQluYW1lIFZBUkNIQVIoMjU1KSwKLQlsZWFndWVfSWQgVkFSQ0hBUigyNTUpLAorICAgIHRlYW1fSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLAorICAgIGNpdHkgVkFSQ0hBUigyNTUpLAorICAgIG5hbWUgVkFSQ0hBUigyNTUpLAorICAgIGxlYWd1ZV9JZCBWQVJDSEFSKDI1NSksCiAgICAgQ09OU1RSQUlOVCBGS18xIEZPUkVJR04gS0VZIChsZWFndWVfSWQpICAgUkVGRVJFTkNFUyBMZWFndWUgKGxlYWd1ZV9JZCkKICk7CiAKIGNvbW1pdDsKIAotQ1JFQVRFIFRBQkxFIFRlYW1QbGF5ZXIgCitDUkVBVEUgVEFCTEUgVGVhbVBsYXllcgogKAotCXBsYXllcl9JZCBWQVJDSEFSKDI1NSksIAotCXRlYW1fSWQgVkFSQ0hBUigyNTUpLCAKLQlDT05TVFJBSU5UIEZLXzIgRk9SRUlHTiBLRVkgKHRlYW1fSWQpICAgUkVGRVJFTkNFUyBUZWFtICh0ZWFtX0lkKSwKLQlDT05TVFJBSU5UIEZLXzMgRk9SRUlHTiBLRVkgKHBsYXllcl9JZCkgICBSRUZFUkVOQ0VTIFBsYXllciAocGxheWVyX0lkKQorICAgIHBsYXllcl9JZCBWQVJDSEFSKDI1NSksCisgICAgdGVhbV9JZCBWQVJDSEFSKDI1NSksCisgICAgQ09OU1RSQUlOVCBGS18yIEZPUkVJR04gS0VZICh0ZWFtX0lkKSAgIFJFRkVSRU5DRVMgVGVhbSAodGVhbV9JZCksCisgICAgQ09OU1RSQUlOVCBGS18zIEZPUkVJR04gS0VZIChwbGF5ZXJfSWQpICAgUkVGRVJFTkNFUyBQbGF5ZXIgKHBsYXllcl9JZCkKICk7CiAKIGNvbW1pdDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvc3FsL1Jvc3RlckFwcF9wc3FsLnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvc3FsL1Jvc3RlckFwcF9wc3FsLnNxbAppbmRleCBhNmJhZjNlLi43ZmRkYjRiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvcm9zdGVyZXh0L3NxbC9Sb3N0ZXJBcHBfcHNxbC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9zcWwvUm9zdGVyQXBwX3BzcWwuc3FsCkBAIC0zLDQwICszLDQwIEBACiBEUk9QIFRBQkxFIFRFQU0gIGNhc2NhZGU7CiBEUk9QIFRBQkxFIExFQUdVRSAgY2FzY2FkZTsKIAotQ1JFQVRFIFRBQkxFIFBMQVlFUiAKK0NSRUFURSBUQUJMRSBQTEFZRVIKICgKLQlQTEFZRVJfSUQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLCAKLQlOQU1FICAgICAgVkFSQ0hBUigyNTUpLCAKLQlQT1NJVElPTiAgVkFSQ0hBUigyNTUpLCAKLQlTQUxBUlkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTAorICAgIFBMQVlFUl9JRCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksCisgICAgTkFNRSAgICAgIFZBUkNIQVIoMjU1KSwKKyAgICBQT1NJVElPTiAgVkFSQ0hBUigyNTUpLAorICAgIFNBTEFSWSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMCiApOwogIyk7CiAKLUNSRUFURSBUQUJMRSBMRUFHVUUgCitDUkVBVEUgVEFCTEUgTEVBR1VFCiAoCi0JTEVBR1VFX0lEIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwgCi0JTkFNRSAgICAgIFZBUkNIQVIoMjU1KSwgCi0JU1BPUlQgICAgIFZBUkNIQVIoMjU1KQorICAgIExFQUdVRV9JRCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksCisgICAgTkFNRSAgICAgIFZBUkNIQVIoMjU1KSwKKyAgICBTUE9SVCAgICAgVkFSQ0hBUigyNTUpCiApIDsKICMpOwogCi1DUkVBVEUgVEFCTEUgVEVBTSAKK0NSRUFURSBUQUJMRSBURUFNCiAoCi0JVEVBTV9JRCAgIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwgCi0JQ0lUWSAgICAgIFZBUkNIQVIoMjU1KSwgCi0JTkFNRSAgICAgIFZBUkNIQVIoMjU1KSwKLQlMRUFHVUVfSUQgVkFSQ0hBUigyNTUpLAotCUZPUkVJR04gS0VZIChMRUFHVUVfSUQpICAgUkVGRVJFTkNFUyBMRUFHVUUgKExFQUdVRV9JRCkKKyAgICBURUFNX0lEICAgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLAorICAgIENJVFkgICAgICBWQVJDSEFSKDI1NSksCisgICAgTkFNRSAgICAgIFZBUkNIQVIoMjU1KSwKKyAgICBMRUFHVUVfSUQgVkFSQ0hBUigyNTUpLAorICAgIEZPUkVJR04gS0VZIChMRUFHVUVfSUQpICAgUkVGRVJFTkNFUyBMRUFHVUUgKExFQUdVRV9JRCkKICk7CiAjKTsKIAotQ1JFQVRFIFRBQkxFIFRFQU1QTEFZRVIgCitDUkVBVEUgVEFCTEUgVEVBTVBMQVlFUgogKAotCVBMQVlFUl9JRCBWQVJDSEFSKDI1NSksIAotICAgICAgICBURUFNX0lEICAgVkFSQ0hBUigyNTUpLCAKKyAgICBQTEFZRVJfSUQgVkFSQ0hBUigyNTUpLAorICAgICAgICBURUFNX0lEICAgVkFSQ0hBUigyNTUpLAogICAgICAgICBDT05TVFJBSU5UIFBLX1RFQU1QTEFZRVIgUFJJTUFSWSBLRVkgKFBMQVlFUl9JRCwgVEVBTV9JRCksCi0JRk9SRUlHTiBLRVkgKFRFQU1fSUQpICAgUkVGRVJFTkNFUyBURUFNIChURUFNX0lEKSwKLQlGT1JFSUdOIEtFWSAoUExBWUVSX0lEKSAgIFJFRkVSRU5DRVMgUExBWUVSIChQTEFZRVJfSUQpCisgICAgRk9SRUlHTiBLRVkgKFRFQU1fSUQpICAgUkVGRVJFTkNFUyBURUFNIChURUFNX0lEKSwKKyAgICBGT1JFSUdOIEtFWSAoUExBWUVSX0lEKSAgIFJFRkVSRU5DRVMgUExBWUVSIChQTEFZRVJfSUQpCiApOwogIyk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9yb3N0ZXJleHQvc3FsL1Jvc3RlckFwcF9zeWIuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9zcWwvUm9zdGVyQXBwX3N5Yi5zcWwKaW5kZXggMGM3M2VmMy4uNDAwNDBjNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9zcWwvUm9zdGVyQXBwX3N5Yi5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Jvc3RlcmV4dC9zcWwvUm9zdGVyQXBwX3N5Yi5zcWwKQEAgLTEsNDAgKzEsNDAgQEAKIGRyb3AgdGFibGUgVEVBTVBMQVlFUgotZHJvcCB0YWJsZSBQTEFZRVIgCitkcm9wIHRhYmxlIFBMQVlFUgogZHJvcCB0YWJsZSBURUFNCiBkcm9wIFRBQkxFIExFQUdVRQogZ28KIAotY3JlYXRlIHRhYmxlIFBMQVlFUiAKK2NyZWF0ZSB0YWJsZSBQTEFZRVIKICgKLQlQTEFZRVJfSUQgVkFSQ0hBUigyNTUpIHByaW1hcnkga2V5IG5vdCBudWxsLCAKLQlOQU1FIFZBUkNIQVIoMjU1KSwKLQlQT1NJVElPTiBWQVJDSEFSKDI1NSksIAotCVNBTEFSWSBkb3VibGUgcHJlY2lzaW9uIG5vdCBudWxsCisgICAgUExBWUVSX0lEIFZBUkNIQVIoMjU1KSBwcmltYXJ5IGtleSBub3QgbnVsbCwKKyAgICBOQU1FIFZBUkNIQVIoMjU1KSwKKyAgICBQT1NJVElPTiBWQVJDSEFSKDI1NSksCisgICAgU0FMQVJZIGRvdWJsZSBwcmVjaXNpb24gbm90IG51bGwKICkKIAotY3JlYXRlIHRhYmxlIExFQUdVRSAKK2NyZWF0ZSB0YWJsZSBMRUFHVUUKICgKLQlMRUFHVUVfSUQgVkFSQ0hBUigyNTUpIHByaW1hcnkga2V5IG5vdCBudWxsLCAKLQlOQU1FIFZBUkNIQVIoMjU1KSwKLQlTUE9SVCBWQVJDSEFSKDI1NSkKKyAgICBMRUFHVUVfSUQgVkFSQ0hBUigyNTUpIHByaW1hcnkga2V5IG5vdCBudWxsLAorICAgIE5BTUUgVkFSQ0hBUigyNTUpLAorICAgIFNQT1JUIFZBUkNIQVIoMjU1KQogKQogCi1jcmVhdGUgdGFibGUgVEVBTSAKK2NyZWF0ZSB0YWJsZSBURUFNCiAoCi0JVEVBTV9JRCBWQVJDSEFSKDI1NSkgcHJpbWFyeSBrZXkgbm90IG51bGwsIAotCUNJVFkgVkFSQ0hBUigyNTUpLAotCU5BTUUgVkFSQ0hBUigyNTUpLAotCUxFQUdVRV9JRCBWQVJDSEFSKDI1NSksCi0JZm9yZWlnbiBrZXkgKExFQUdVRV9JRCkgcmVmZXJlbmNlcyBMRUFHVUUgKExFQUdVRV9JRCkKKyAgICBURUFNX0lEIFZBUkNIQVIoMjU1KSBwcmltYXJ5IGtleSBub3QgbnVsbCwKKyAgICBDSVRZIFZBUkNIQVIoMjU1KSwKKyAgICBOQU1FIFZBUkNIQVIoMjU1KSwKKyAgICBMRUFHVUVfSUQgVkFSQ0hBUigyNTUpLAorICAgIGZvcmVpZ24ga2V5IChMRUFHVUVfSUQpIHJlZmVyZW5jZXMgTEVBR1VFIChMRUFHVUVfSUQpCiApCiAKLWNyZWF0ZSB0YWJsZSBURUFNUExBWUVSIAorY3JlYXRlIHRhYmxlIFRFQU1QTEFZRVIKICgKLQlQTEFZRVJfSUQgVkFSQ0hBUigyNTUpIG5vdCBudWxsLAorICAgIFBMQVlFUl9JRCBWQVJDSEFSKDI1NSkgbm90IG51bGwsCiAgICAgICAgIFRFQU1fSUQgVkFSQ0hBUigyNTUpIG5vdCBudWxsLAogICAgICAgICBjb25zdHJhaW50IFBLX1RFQU1QTEFZRVIgcHJpbWFyeSBrZXkgKFBMQVlFUl9JRCwgVEVBTV9JRCksCi0JZm9yZWlnbiBrZXkgKFRFQU1fSUQpIHJlZmVyZW5jZXMgVEVBTSAoVEVBTV9JRCksCi0JZm9yZWlnbiBrZXkgKFBMQVlFUl9JRCkgcmVmZXJlbmNlcyBQTEFZRVIgKFBMQVlFUl9JRCkKKyAgICBmb3JlaWduIGtleSAoVEVBTV9JRCkgcmVmZXJlbmNlcyBURUFNIChURUFNX0lEKSwKKyAgICBmb3JlaWduIGtleSAoUExBWUVSX0lEKSByZWZlcmVuY2VzIFBMQVlFUiAoUExBWUVSX0lEKQogKQogCiBnbwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3NhbXBsZWFwcC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3NhbXBsZWFwcC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDYxMGYyNDYuLjg3ZjY0YTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9zYW1wbGVhcHAvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvc2FtcGxlYXBwL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEzICsxNSwxMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iU2FtcGxlV2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPCEtLSA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUuZGlyIiB2YWx1ZT0ie2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+IC0tPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSJTYW1wbGVDbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3NhbXBsZWFwcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvc2FtcGxlYXBwL2J1aWxkLnhtbAppbmRleCA3MTA3ZGQxLi5hMzI1MzZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvc2FtcGxlYXBwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvc2FtcGxlYXBwL2J1aWxkLnhtbApAQCAtMzQsMTkgKzM0LDE5IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLQk8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KKyAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgorICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJhc3NlbWJsZS5kaXIgPT4gJHthc3NlbWJsZS5kaXJ9ICIgLz4KLQk8Y29weSBmaWxlPSIke2Jhc2VkaXJ9L2Vhci9TYW1wbGVXZWJBcHAuZWFyIiB0b2Rpcj0iJHthc3NlbWJsZS5kaXJ9IiAvPgorICAgIDxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vZWFyL1NhbXBsZVdlYkFwcC5lYXIiIHRvZGlyPSIke2Fzc2VtYmxlLmRpcn0iIC8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvU2FtcGxlV2ViQXBwX2RlcmJ5LnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSIke2RlcGxveWVkLmFwcH0iIHZhbHVlPSIke2Jhc2VkaXJ9L2Vhci9TYW1wbGVXZWJBcHAuZWFyIi8+Ci0JPC9hbnRjYWxsPgorICAgICAgICA8cGFyYW0gbmFtZT0iJHtkZXBsb3llZC5hcHB9IiB2YWx1ZT0iJHtiYXNlZGlyfS9lYXIvU2FtcGxlV2ViQXBwLmVhciIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02MCwxOCArNjAsMTggQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iJHtiYXNlZGlyfS8uLi9jb21tb24vZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9TYW1wbGVXZWJBcHBfZGVyYnkuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogCiA8IS0tCkBAIC03OSwxMiArNzksMTIgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2RlbGV0ZV90YWJsZXMuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIC0tPgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgYWxsCiAgICAgICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9zYW1wbGVhcHAvc3FsL1NhbXBsZVdlYkFwcC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvc2FtcGxlYXBwL3NxbC9TYW1wbGVXZWJBcHAuc3FsCmluZGV4IDk5NmY4MWQuLmNiMzgxNGIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9zYW1wbGVhcHAvc3FsL1NhbXBsZVdlYkFwcC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3NhbXBsZWFwcC9zcWwvU2FtcGxlV2ViQXBwLnNxbApAQCAtMSwxMCArMSwxMCBAQAogRFJPUCBUQUJMRSBDb21wb3NpdGVJbnRTdHJpbmdCZWFuVGFibGU7CiAKIENSRUFURSBUQUJMRSBDb21wb3NpdGVJbnRTdHJpbmdCZWFuVGFibGUgKAotCWlkIElOVEVHRVIgLCAKLQluYW1lIFZBUkNIQVIoMjU1KSAsIAotCXNhbGFyeSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMLCAKLQlDT05TVFJBSU5UIHBrX0NvbXBvc2l0ZUludFN0cmluZ0JlYW5UYWJsIFBSSU1BUlkgS0VZIChpZCAsIG5hbWUpCisgICAgaWQgSU5URUdFUiAsCisgICAgbmFtZSBWQVJDSEFSKDI1NSkgLAorICAgIHNhbGFyeSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMLAorICAgIENPTlNUUkFJTlQgcGtfQ29tcG9zaXRlSW50U3RyaW5nQmVhblRhYmwgUFJJTUFSWSBLRVkgKGlkICwgbmFtZSkKICk7CiAKIGNvbW1pdDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9zYW1wbGVhcHAvc3FsL1NhbXBsZVdlYkFwcF9kYjIuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3NhbXBsZWFwcC9zcWwvU2FtcGxlV2ViQXBwX2RiMi5zcWwKaW5kZXggMjA5ODc5NS4uOWU3YTZjZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3NhbXBsZWFwcC9zcWwvU2FtcGxlV2ViQXBwX2RiMi5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3NhbXBsZWFwcC9zcWwvU2FtcGxlV2ViQXBwX2RiMi5zcWwKQEAgLTEsMTAgKzEsMTAgQEAKIERST1AgVEFCTEUgQ29tcG9zaXRlSW50U3RyaW5nQmVhblRhYmxlOwogCiBDUkVBVEUgVEFCTEUgQ29tcG9zaXRlSW50U3RyaW5nQmVhblRhYmxlICgKLQlpZCBJTlRFR0VSIE5PVCBOVUxMLCAKLQluYW1lIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCwgCi0Jc2FsYXJ5IERPVUJMRSBQUkVDSVNJT04gTk9UIE5VTEwsIAotCUNPTlNUUkFJTlQgcGtfQ29tcEludFN0clRhYiBQUklNQVJZIEtFWSAoaWQsIG5hbWUpCisgICAgaWQgSU5URUdFUiBOT1QgTlVMTCwKKyAgICBuYW1lIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCwKKyAgICBzYWxhcnkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTCwKKyAgICBDT05TVFJBSU5UIHBrX0NvbXBJbnRTdHJUYWIgUFJJTUFSWSBLRVkgKGlkLCBuYW1lKQogKTsKIAogY29tbWl0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3NhbXBsZWFwcC9zcWwvU2FtcGxlV2ViQXBwX2RlcmJ5LnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9zYW1wbGVhcHAvc3FsL1NhbXBsZVdlYkFwcF9kZXJieS5zcWwKaW5kZXggZTEwZDI2Mi4uMDYwMWEwYyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3NhbXBsZWFwcC9zcWwvU2FtcGxlV2ViQXBwX2RlcmJ5LnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvc2FtcGxlYXBwL3NxbC9TYW1wbGVXZWJBcHBfZGVyYnkuc3FsCkBAIC0xLDggKzEsOCBAQAogRFJPUCBUQUJMRSBDb21wb3NpdGVJbnRTdHJpbmdCZWFuVGFibGU7CiAKIENSRUFURSBUQUJMRSBDb21wb3NpdGVJbnRTdHJpbmdCZWFuVGFibGUgKAotCWlkIElOVEVHRVIgTk9UIE5VTEwsIAotCW5hbWUgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLCAKLQlzYWxhcnkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTCwgCi0JQ09OU1RSQUlOVCBwa19Db21wSW50U3RyVGFiIFBSSU1BUlkgS0VZIChpZCwgbmFtZSkKKyAgICBpZCBJTlRFR0VSIE5PVCBOVUxMLAorICAgIG5hbWUgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAorICAgIHNhbGFyeSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMLAorICAgIENPTlNUUkFJTlQgcGtfQ29tcEludFN0clRhYiBQUklNQVJZIEtFWSAoaWQsIG5hbWUpCiApOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3NhbXBsZWFwcC9zcWwvU2FtcGxlV2ViQXBwX2lmeC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvc2FtcGxlYXBwL3NxbC9TYW1wbGVXZWJBcHBfaWZ4LnNxbAppbmRleCBlMjdmN2Y1Li4yMGUwMGRjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvc2FtcGxlYXBwL3NxbC9TYW1wbGVXZWJBcHBfaWZ4LnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvc2FtcGxlYXBwL3NxbC9TYW1wbGVXZWJBcHBfaWZ4LnNxbApAQCAtMSwxMCArMSwxMCBAQAogRFJPUCBUQUJMRSBDb21wb3NpdGVJbnRTdHJpbmdCZWFuVGFibGU7CiAKIENSRUFURSBUQUJMRSBDb21wb3NpdGVJbnRTdHJpbmdCZWFuVGFibGUgKAotCWlkIElOVEVHRVIsIAotCW5hbWUgVkFSQ0hBUigxMjcpLCAKLQlzYWxhcnkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTCAsIAotCVBSSU1BUlkgS0VZIChpZCwgbmFtZSkKKyAgICBpZCBJTlRFR0VSLAorICAgIG5hbWUgVkFSQ0hBUigxMjcpLAorICAgIHNhbGFyeSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMICwKKyAgICBQUklNQVJZIEtFWSAoaWQsIG5hbWUpCiApOwogCiBjb21taXQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvc2FtcGxlYXBwL3NxbC9TYW1wbGVXZWJBcHBfbXNzcWwuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3NhbXBsZWFwcC9zcWwvU2FtcGxlV2ViQXBwX21zc3FsLnNxbAppbmRleCBjMzQzMWQyLi4wOWZjODIzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvc2FtcGxlYXBwL3NxbC9TYW1wbGVXZWJBcHBfbXNzcWwuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9zYW1wbGVhcHAvc3FsL1NhbXBsZVdlYkFwcF9tc3NxbC5zcWwKQEAgLTIsMTAgKzIsMTAgQEAKIGdvCiAKIENSRUFURSBUQUJMRSBDT01QT1NJVEVJTlRTVFJJTkdCRUFOVEFCTEUgKAotCUlEICAgICBJTlRFR0VSLCAKLQlOQU1FICAgVkFSQ0hBUigyNTUpLCAKLQlTQUxBUlkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTCwgCi0JQ09OU1RSQUlOVCBQS19DT01QT1NJVEVJTlRTVFJJTkdCRUFOVEFCTCBQUklNQVJZIEtFWSAoSUQsIE5BTUUpCisgICAgSUQgICAgIElOVEVHRVIsCisgICAgTkFNRSAgIFZBUkNIQVIoMjU1KSwKKyAgICBTQUxBUlkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTCwKKyAgICBDT05TVFJBSU5UIFBLX0NPTVBPU0lURUlOVFNUUklOR0JFQU5UQUJMIFBSSU1BUlkgS0VZIChJRCwgTkFNRSkKICkKIAogZ28KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9zYW1wbGVhcHAvc3FsL1NhbXBsZVdlYkFwcF9teXNxbC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvc2FtcGxlYXBwL3NxbC9TYW1wbGVXZWJBcHBfbXlzcWwuc3FsCmluZGV4IDcwN2M4MDIuLjljMWQ3ZGMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9zYW1wbGVhcHAvc3FsL1NhbXBsZVdlYkFwcF9teXNxbC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3NhbXBsZWFwcC9zcWwvU2FtcGxlV2ViQXBwX215c3FsLnNxbApAQCAtMSwxMCArMSwxMCBAQAogRFJPUCBUQUJMRSBDT01QT1NJVEVpTlRzVFJJTkdiRUFOdEFCTEU7CiAKIENSRUFURSBUQUJMRSBDT01QT1NJVEVJTlRTVFJJTkdCRUFOVEFCTEUgKAotCUlEIElOVEVHRVIsIAotCU5BTUUgVkFSQ0hBUigyNTUpLCAKLQlTQUxBUlkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTCwgCi0JQ09OU1RSQUlOVCBwa19Db21wb3NpdGVJbnRTdHJpbmdCZWFuVGFibCBQUklNQVJZIEtFWSAoSUQsIE5BTUUpCisgICAgSUQgSU5URUdFUiwKKyAgICBOQU1FIFZBUkNIQVIoMjU1KSwKKyAgICBTQUxBUlkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTCwKKyAgICBDT05TVFJBSU5UIHBrX0NvbXBvc2l0ZUludFN0cmluZ0JlYW5UYWJsIFBSSU1BUlkgS0VZIChJRCwgTkFNRSkKICkgRU5HSU5FPUlOTk9EQjsKIAogY29tbWl0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3NhbXBsZWFwcC9zcWwvU2FtcGxlV2ViQXBwX29yYS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvc2FtcGxlYXBwL3NxbC9TYW1wbGVXZWJBcHBfb3JhLnNxbAppbmRleCAwYjczMTc4Li4yMTBjMGFhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvc2FtcGxlYXBwL3NxbC9TYW1wbGVXZWJBcHBfb3JhLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvc2FtcGxlYXBwL3NxbC9TYW1wbGVXZWJBcHBfb3JhLnNxbApAQCAtMSwxMCArMSwxMCBAQAogRFJPUCBUQUJMRSBDb21wb3NpdGVJbnRTdHJpbmdCZWFuVGFibGU7CiAKIENSRUFURSBUQUJMRSBDb21wb3NpdGVJbnRTdHJpbmdCZWFuVGFibGUgKAotCWlkIElOVEVHRVIsIAotCW5hbWUgVkFSQ0hBUigyNTUpLCAKLQlzYWxhcnkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTCwgCi0JQ09OU1RSQUlOVCBwa19Db21wb3NpdGVJbnRTdHJpbmdCZWFuVGFibCBQUklNQVJZIEtFWSAoaWQsIG5hbWUpCisgICAgaWQgSU5URUdFUiwKKyAgICBuYW1lIFZBUkNIQVIoMjU1KSwKKyAgICBzYWxhcnkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTCwKKyAgICBDT05TVFJBSU5UIHBrX0NvbXBvc2l0ZUludFN0cmluZ0JlYW5UYWJsIFBSSU1BUlkgS0VZIChpZCwgbmFtZSkKICk7CiAKIGNvbW1pdDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9zYW1wbGVhcHAvc3FsL1NhbXBsZVdlYkFwcF9wYnMuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3NhbXBsZWFwcC9zcWwvU2FtcGxlV2ViQXBwX3Bicy5zcWwKaW5kZXggMGI3MzE3OC4uMjEwYzBhYSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3NhbXBsZWFwcC9zcWwvU2FtcGxlV2ViQXBwX3Bicy5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3NhbXBsZWFwcC9zcWwvU2FtcGxlV2ViQXBwX3Bicy5zcWwKQEAgLTEsMTAgKzEsMTAgQEAKIERST1AgVEFCTEUgQ29tcG9zaXRlSW50U3RyaW5nQmVhblRhYmxlOwogCiBDUkVBVEUgVEFCTEUgQ29tcG9zaXRlSW50U3RyaW5nQmVhblRhYmxlICgKLQlpZCBJTlRFR0VSLCAKLQluYW1lIFZBUkNIQVIoMjU1KSwgCi0Jc2FsYXJ5IERPVUJMRSBQUkVDSVNJT04gTk9UIE5VTEwsIAotCUNPTlNUUkFJTlQgcGtfQ29tcG9zaXRlSW50U3RyaW5nQmVhblRhYmwgUFJJTUFSWSBLRVkgKGlkLCBuYW1lKQorICAgIGlkIElOVEVHRVIsCisgICAgbmFtZSBWQVJDSEFSKDI1NSksCisgICAgc2FsYXJ5IERPVUJMRSBQUkVDSVNJT04gTk9UIE5VTEwsCisgICAgQ09OU1RSQUlOVCBwa19Db21wb3NpdGVJbnRTdHJpbmdCZWFuVGFibCBQUklNQVJZIEtFWSAoaWQsIG5hbWUpCiApOwogCiBjb21taXQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvc2FtcGxlYXBwL3NxbC9TYW1wbGVXZWJBcHBfcHNxbC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvc2FtcGxlYXBwL3NxbC9TYW1wbGVXZWJBcHBfcHNxbC5zcWwKaW5kZXggZjBlYjU2Zi4uOWFiZjBkOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3NhbXBsZWFwcC9zcWwvU2FtcGxlV2ViQXBwX3BzcWwuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC9zYW1wbGVhcHAvc3FsL1NhbXBsZVdlYkFwcF9wc3FsLnNxbApAQCAtMSwxMCArMSwxMCBAQAogRFJPUCBUQUJMRSBDT01QT1NJVEVpTlRzVFJJTkdiRUFOdEFCTEUgY2FzY2FkZTsKIAogQ1JFQVRFIFRBQkxFIENPTVBPU0lURUlOVFNUUklOR0JFQU5UQUJMRSAoCi0JSUQgSU5URUdFUiwgCi0JTkFNRSBWQVJDSEFSKDI1NSksIAotCVNBTEFSWSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMLCAKLQlDT05TVFJBSU5UIHBrX0NvbXBvc2l0ZUludFN0cmluZ0JlYW5UYWJsIFBSSU1BUlkgS0VZIChJRCwgTkFNRSkKKyAgICBJRCBJTlRFR0VSLAorICAgIE5BTUUgVkFSQ0hBUigyNTUpLAorICAgIFNBTEFSWSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMLAorICAgIENPTlNUUkFJTlQgcGtfQ29tcG9zaXRlSW50U3RyaW5nQmVhblRhYmwgUFJJTUFSWSBLRVkgKElELCBOQU1FKQogKTsKIAogY29tbWl0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3NhbXBsZWFwcC9zcWwvU2FtcGxlV2ViQXBwX3N5Yi5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvc2FtcGxlYXBwL3NxbC9TYW1wbGVXZWJBcHBfc3liLnNxbAppbmRleCBmOWIzYjMyLi45MjcxNTBkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvc2FtcGxlYXBwL3NxbC9TYW1wbGVXZWJBcHBfc3liLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvc2FtcGxlYXBwL3NxbC9TYW1wbGVXZWJBcHBfc3liLnNxbApAQCAtMiwxMCArMiwxMCBAQAogZ28KIAogY3JlYXRlIHRhYmxlIENPTVBPU0lURUlOVFNUUklOR0JFQU5UQUJMRSAoCi0JSUQgSU5URUdFUiBub3QgbnVsbCwgCi0JTkFNRSBWQVJDSEFSKDI1NSkgbm90IG51bGwsIAotCVNBTEFSWSBkb3VibGUgcHJlY2lzaW9uIG5vdCBudWxsLCAKLQljb25zdHJhaW50IFBLX0NPTVBPU0lURUlOVFNUUklOR0JFQU5UQUJMIHByaW1hcnkga2V5IChJRCwgTkFNRSkKKyAgICBJRCBJTlRFR0VSIG5vdCBudWxsLAorICAgIE5BTUUgVkFSQ0hBUigyNTUpIG5vdCBudWxsLAorICAgIFNBTEFSWSBkb3VibGUgcHJlY2lzaW9uIG5vdCBudWxsLAorICAgIGNvbnN0cmFpbnQgUEtfQ09NUE9TSVRFSU5UU1RSSU5HQkVBTlRBQkwgcHJpbWFyeSBrZXkgKElELCBOQU1FKQogKQogCiBnbwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25way9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25way9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDNjNzg4MGEuLjg2Njk3NDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGsvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIyICsxNSwyMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iVW5rbm93bnBrIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tY21wLW1hcHBpbmdzLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWNtcC1tYXBwaW5ncy54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJkYnNjaGVtYSIgdmFsdWU9ImVqYi91bmtub3ducGsuZGJzY2hlbWEiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGsvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25way9idWlsZC54bWwKaW5kZXggN2U2NzNmZC4uYzgxY2M0MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25way9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25way9idWlsZC54bWwKQEAgLTM0LDEyICszNCwxMiBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgIAorCiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkNvcHlpbmcgZGJzY2hlbWEgZmlsZSB0byBlamIgY2xhc3NlcyBkaXIiIC8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7ZGJzY2hlbWF9IiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdW5rbm93bnBrIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CkBAIC00OSwxNCArNDksMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0EqKi5jbGFzcywgKiovdW5rbm93bnBrLmRic2NoZW1hIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0ExSG9tZS5jbGFzcywqKi9BMS5jbGFzcywqKi9BMkhvbWUuY2xhc3MsKiovQTIuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvdW5rbm93bnBrX2RlcmJ5LnNxbCIvPgpAQCAtNzUsMjIgKzc1LDIyIEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9IiR7YmFzZWRpcn0vLi4vY29tbW9uL2RlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfdW5rbm93bnBrX2RlcmJ5LnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBhbGwKICAgICAgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25way9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBmYWFiZmYyLi41YjVlNzJlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzMsMTIgKzMzLDEyIEBACiAgKiBAdmVyc2lvbgogICovCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNUQVJUIik7CiAgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ1bmtub3ducGsiKTsKQEAgLTY2LDE2ICs2NiwxNiBAQAogICAgICAgICAgICAgYTFiZWFuID0gYTFob21lLmZpbmRCeVByaW1hcnlLZXkocGsxKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRk9VTkQgMS4xOiAiICsgYTFiZWFuLmdldE5hbWUoKSk7CiAKLQkgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCB1bmtub3ducGsiLCBzdGF0LlBBU1MpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IHVua25vd25wayIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZJTklTSCIpOwogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gZXhjZXB0aW9uOiIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgdW5rbm93bnBrIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCB1bmtub3ducGsiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInVua25vd25wayIpOwogCiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25way9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCA0OGY4MDg1Li4wYjk4MjkyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGsvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTIzLDE0ICsyMywxNCBAQAogICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPlVOUEsyPC9lamItbmFtZT4KICAgICAgIDxqbmRpLW5hbWU+VU5QSzI8L2puZGktbmFtZT4KLQk8cmVmcmVzaC1wZXJpb2QtaW4tc2Vjb25kcz42MDA8L3JlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+Ci0JPGJlYW4tY2FjaGU+Ci0JCTxtYXgtY2FjaGUtc2l6ZT42MDwvbWF4LWNhY2hlLXNpemU+Ci0JCTxpcy1jYWNoZS1vdmVyZmxvdy1hbGxvd2VkPnRydWU8L2lzLWNhY2hlLW92ZXJmbG93LWFsbG93ZWQ+Ci0JCTxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgotCQk8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+NjAwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+Ci0JCTx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5GSUZPPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4KLQk8L2JlYW4tY2FjaGU+CisgICAgPHJlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+NjAwPC9yZWZyZXNoLXBlcmlvZC1pbi1zZWNvbmRzPgorICAgIDxiZWFuLWNhY2hlPgorICAgICAgICA8bWF4LWNhY2hlLXNpemU+NjA8L21heC1jYWNoZS1zaXplPgorICAgICAgICA8aXMtY2FjaGUtb3ZlcmZsb3ctYWxsb3dlZD50cnVlPC9pcy1jYWNoZS1vdmVyZmxvdy1hbGxvd2VkPgorICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjAwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjYwMDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+RklGTzwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+CisgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPlVOUEsxPC9lamItbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGsvZWpiL0ExLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrL2VqYi9BMS5qYXZhCmluZGV4IGE0OTUzZTcuLmVjMjhlNGQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGsvZWpiL0ExLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25way9lamIvQTEuamF2YQpAQCAtMjQsOCArMjQsOCBAQAogICovCiAKIHB1YmxpYyBpbnRlcmZhY2UgQTEgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJPYmplY3QgewotIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrL2VqYi9BMUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGsvZWpiL0ExQmVhbi5qYXZhCmluZGV4IDllOGU1MWUuLjU2NzM2OWEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGsvZWpiL0ExQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGsvZWpiL0ExQmVhbi5qYXZhCkBAIC0yNiw2NSArMjYsNjUgQEAKIAogCiBwdWJsaWMgY2xhc3MgQTFCZWFuIGltcGxlbWVudHMgamFrYXJ0YS5lamIuRW50aXR5QmVhbiB7Ci0gICAgCisKICAgICBwcml2YXRlIGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQgY29udGV4dDsKLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI3NldEVudGl0eUNvbnRleHQoamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQgYUNvbnRleHQpIHsKICAgICAgICAgY29udGV4dD1hQ29udGV4dDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJBY3RpdmF0ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUGFzc2l2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUmVtb3ZlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVidWc6IEExQmVhbiBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiN1bnNldEVudGl0eUNvbnRleHQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsKICAgICAgICAgY29udGV4dD1udWxsOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYkxvYWQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiU3RvcmUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KQEAgLTk3LDggKzk3LDggQEAKIAogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKGphdmEubGFuZy5TdHJpbmcgbmFtZSkKICAgICAgICAgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiB7IH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25way9lamIvQTFIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrL2VqYi9BMUhvbWUuamF2YQppbmRleCBjMDE0NTE3Li4xY2M5YWFmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrL2VqYi9BMUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrL2VqYi9BMUhvbWUuamF2YQpAQCAtMjQsOSArMjQsOSBAQAogICovCiAKIHB1YmxpYyBpbnRlcmZhY2UgQTFIb21lIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCSG9tZSB7Ci0gICAgCisKICAgICBwdWJsaWMgIEExIGZpbmRCeVByaW1hcnlLZXkoT2JqZWN0IHBrKSAgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljICBBMSBjcmVhdGUoamF2YS5sYW5nLlN0cmluZyBuYW1lKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGsvZWpiL0EyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrL2VqYi9BMi5qYXZhCmluZGV4IDYzNDFiOTcuLjA0MTE4YjkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGsvZWpiL0EyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25way9lamIvQTIuamF2YQpAQCAtMjQsOCArMjQsOCBAQAogICovCiAKIHB1YmxpYyBpbnRlcmZhY2UgQTIgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJPYmplY3QgewotIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrL2VqYi9BMkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGsvZWpiL0EyQmVhbi5qYXZhCmluZGV4IGQ5Nzk0MGMuLmQyOWUzZjEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGsvZWpiL0EyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGsvZWpiL0EyQmVhbi5qYXZhCkBAIC0yMCw3MSArMjAsNzEgQEAKIGltcG9ydCBqYXZheC5uYW1pbmcuKjsKIAogLyoqCi0gKiAyLjAgYmVhbi4gCisgKiAyLjAgYmVhbi4KICAqIEBhdXRob3IgbXZhdGtpbmEKICAqLwogCiAKIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBMkJlYW4gaW1wbGVtZW50cyBqYWthcnRhLmVqYi5FbnRpdHlCZWFuIHsKLSAgICAKKwogICAgIHByaXZhdGUgamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCBjb250ZXh0OwotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jc2V0RW50aXR5Q29udGV4dChqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0KQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCBhQ29udGV4dCkgewogICAgICAgICBjb250ZXh0PWFDb250ZXh0OwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYkFjdGl2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJQYXNzaXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJSZW1vdmUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWJ1ZzogQTJCZWFuIGVqYlJlbW92ZSIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI3Vuc2V0RW50aXR5Q29udGV4dCgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgewogICAgICAgICBjb250ZXh0PW51bGw7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiTG9hZCgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJTdG9yZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5TdHJpbmcgZ2V0TmFtZSgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldE5hbWUoamF2YS5sYW5nLlN0cmluZyBuYW1lKTsKIApAQCAtOTQsOCArOTQsOCBAQAogCiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoamF2YS5sYW5nLlN0cmluZyBuYW1lKQogICAgICAgICB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIHsgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrL2VqYi9BMkhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGsvZWpiL0EySG9tZS5qYXZhCmluZGV4IDQ3Y2JlOTYuLmE2OThhZDEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGsvZWpiL0EySG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGsvZWpiL0EySG9tZS5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBBMkhvbWUgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJIb21lIHsKLSAgICAKKwogICAgIHB1YmxpYyAgQTIgZmluZEJ5UHJpbWFyeUtleShPYmplY3QgcGspICB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgIEEyIGNyZWF0ZShqYXZhLmxhbmcuU3RyaW5nIG5hbWUpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25way9zcWwvdW5rbm93bnBrX2lmeC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrL3NxbC91bmtub3ducGtfaWZ4LnNxbAppbmRleCBkMDVhYjEyLi5hMjA1NTE1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrL3NxbC91bmtub3ducGtfaWZ4LnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrL3NxbC91bmtub3ducGtfaWZ4LnNxbApAQCAtNCwxMyArNCwxMyBAQAogQ1JFQVRFIFRBQkxFIFVOS05PV05QSzEKICgKICAgICBpZCAgICAgREVDSU1BTCgzMikgICAgICAgICAgUFJJTUFSWSBLRVksCi0gICAgbmFtZSAgIFZBUkNIQVIoMzIpIAorICAgIG5hbWUgICBWQVJDSEFSKDMyKQogKTsKIAogQ1JFQVRFIFRBQkxFIFVOS05PV05QSzIKICgKICAgICBpZCAgICAgREVDSU1BTCgzMikgICAgICAgICAgUFJJTUFSWSBLRVksCi0gICAgbmFtZSAgIFZBUkNIQVIoMzIpIAorICAgIG5hbWUgICBWQVJDSEFSKDMyKQogKTsKIAogY29tbWl0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrVkMvYnVpbGQucHJvcGVydGllcwppbmRleCBlZGU1Yjc1Li43ODlmNzk2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrVkMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrVkMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjIgKzE1LDIyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJVbmtub3ducGtWQyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWNtcC1tYXBwaW5ncy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1jbXAtbWFwcGluZ3MueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iZGJzY2hlbWEiIHZhbHVlPSJlamIvdW5rbm93bnBrVkMuZGJzY2hlbWEiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrVkMvYnVpbGQueG1sCmluZGV4IDVmNDFmNTQuLjdhNjNkY2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL2J1aWxkLnhtbApAQCAtMzQsMTIgKzM0LDEyIEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAgCisKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQ29weWluZyBkYnNjaGVtYSBmaWxlIHRvIGVqYiBjbGFzc2VzIGRpciIgLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHtkYnNjaGVtYX0iIHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS91bmtub3ducGsiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KQEAgLTQ5LDE0ICs0OSwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQSoqLmNsYXNzLCAqKi91bmtub3ducGtWQy5kYnNjaGVtYSIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9BMUhvbWUuY2xhc3MsKiovQTEuY2xhc3MsKiovQTJIb21lLmNsYXNzLCoqL0EyLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL3Vua25vd25wa1ZDX2RlcmJ5LnNxbCIvPgpAQCAtNzUsMjIgKzc1LDIyIEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9IiR7YmFzZWRpcn0vLi4vY29tbW9uL2RlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfdW5rbm93bnBrVkNfZGVyYnkuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGFsbAogICAgICAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrVkMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA0NWE0NjU0Li41MTQzMDcwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrVkMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMzLDE2ICszMywxNiBAQAogICogQHZlcnNpb24KICAqLwogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgCisKICAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1RBUlQiKTsKIAotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ1bmtub3ducGtWQyIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ1bmtub3ducGtWQyIpOwogCiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvVU5QSzIiKTsKQEAgLTY3LDE2ICs2NywxNiBAQAogICAgICAgICAgICAgYTFiZWFuID0gYTFob21lLmZpbmRCeVByaW1hcnlLZXkocGsxKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRk9VTkQgMS4xOiAiICsgYTFiZWFuLmdldE5hbWUoKSk7CiAKLQkgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCB1bmtub3ducGtWQyIsIHN0YXQuUEFTUyk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgdW5rbm93bnBrVkMiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGSU5JU0giKTsKIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIGV4Y2VwdGlvbjoiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IHVua25vd25wa1ZDIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCB1bmtub3ducGtWQyIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCSAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ1bmtub3ducGtWQyIpOworICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ1bmtub3ducGtWQyIpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDQ4ZjgwODUuLjBiOTgyOTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrVkMvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTIzLDE0ICsyMywxNCBAQAogICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPlVOUEsyPC9lamItbmFtZT4KICAgICAgIDxqbmRpLW5hbWU+VU5QSzI8L2puZGktbmFtZT4KLQk8cmVmcmVzaC1wZXJpb2QtaW4tc2Vjb25kcz42MDA8L3JlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+Ci0JPGJlYW4tY2FjaGU+Ci0JCTxtYXgtY2FjaGUtc2l6ZT42MDwvbWF4LWNhY2hlLXNpemU+Ci0JCTxpcy1jYWNoZS1vdmVyZmxvdy1hbGxvd2VkPnRydWU8L2lzLWNhY2hlLW92ZXJmbG93LWFsbG93ZWQ+Ci0JCTxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgotCQk8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+NjAwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+Ci0JCTx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5GSUZPPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4KLQk8L2JlYW4tY2FjaGU+CisgICAgPHJlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+NjAwPC9yZWZyZXNoLXBlcmlvZC1pbi1zZWNvbmRzPgorICAgIDxiZWFuLWNhY2hlPgorICAgICAgICA8bWF4LWNhY2hlLXNpemU+NjA8L21heC1jYWNoZS1zaXplPgorICAgICAgICA8aXMtY2FjaGUtb3ZlcmZsb3ctYWxsb3dlZD50cnVlPC9pcy1jYWNoZS1vdmVyZmxvdy1hbGxvd2VkPgorICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjAwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjYwMDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+RklGTzwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+CisgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPlVOUEsxPC9lamItbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9lamIvQTEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9lamIvQTEuamF2YQppbmRleCBhNDk1M2U3Li5lYzI4ZTRkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrVkMvZWpiL0ExLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL2VqYi9BMS5qYXZhCkBAIC0yNCw4ICsyNCw4IEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBBMSBleHRlbmRzIGpha2FydGEuZWpiLkVKQk9iamVjdCB7Ci0gCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9lamIvQTFCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrVkMvZWpiL0ExQmVhbi5qYXZhCmluZGV4IDllOGU1MWUuLjU2NzM2OWEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9lamIvQTFCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL2VqYi9BMUJlYW4uamF2YQpAQCAtMjYsNjUgKzI2LDY1IEBACiAKIAogcHVibGljIGNsYXNzIEExQmVhbiBpbXBsZW1lbnRzIGpha2FydGEuZWpiLkVudGl0eUJlYW4gewotICAgIAorCiAgICAgcHJpdmF0ZSBqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0IGNvbnRleHQ7Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNzZXRFbnRpdHlDb250ZXh0KGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0IGFDb250ZXh0KSB7CiAgICAgICAgIGNvbnRleHQ9YUNvbnRleHQ7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiQWN0aXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYlBhc3NpdmF0ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYlJlbW92ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlYnVnOiBBMUJlYW4gZWpiUmVtb3ZlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jdW5zZXRFbnRpdHlDb250ZXh0KCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKSB7CiAgICAgICAgIGNvbnRleHQ9bnVsbDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJMb2FkKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYlN0b3JlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CkBAIC05Nyw4ICs5Nyw4IEBACiAKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZShqYXZhLmxhbmcuU3RyaW5nIG5hbWUpCiAgICAgICAgIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24geyB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9lamIvQTFIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrVkMvZWpiL0ExSG9tZS5qYXZhCmluZGV4IGMwMTQ1MTcuLjFjYzlhYWYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9lamIvQTFIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL2VqYi9BMUhvbWUuamF2YQpAQCAtMjQsOSArMjQsOSBAQAogICovCiAKIHB1YmxpYyBpbnRlcmZhY2UgQTFIb21lIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCSG9tZSB7Ci0gICAgCisKICAgICBwdWJsaWMgIEExIGZpbmRCeVByaW1hcnlLZXkoT2JqZWN0IHBrKSAgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljICBBMSBjcmVhdGUoamF2YS5sYW5nLlN0cmluZyBuYW1lKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9lamIvQTIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9lamIvQTIuamF2YQppbmRleCA2MzQxYjk3Li4wNDExOGI5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrVkMvZWpiL0EyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL2VqYi9BMi5qYXZhCkBAIC0yNCw4ICsyNCw4IEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBBMiBleHRlbmRzIGpha2FydGEuZWpiLkVKQk9iamVjdCB7Ci0gCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9lamIvQTJCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrVkMvZWpiL0EyQmVhbi5qYXZhCmluZGV4IGQ5Nzk0MGMuLmQyOWUzZjEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9lamIvQTJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL2VqYi9BMkJlYW4uamF2YQpAQCAtMjAsNzEgKzIwLDcxIEBACiBpbXBvcnQgamF2YXgubmFtaW5nLio7CiAKIC8qKgotICogMi4wIGJlYW4uIAorICogMi4wIGJlYW4uCiAgKiBAYXV0aG9yIG12YXRraW5hCiAgKi8KIAogCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQTJCZWFuIGltcGxlbWVudHMgamFrYXJ0YS5lamIuRW50aXR5QmVhbiB7Ci0gICAgCisKICAgICBwcml2YXRlIGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQgY29udGV4dDsKLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI3NldEVudGl0eUNvbnRleHQoamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQgYUNvbnRleHQpIHsKICAgICAgICAgY29udGV4dD1hQ29udGV4dDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJBY3RpdmF0ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUGFzc2l2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUmVtb3ZlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVidWc6IEEyQmVhbiBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiN1bnNldEVudGl0eUNvbnRleHQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsKICAgICAgICAgY29udGV4dD1udWxsOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYkxvYWQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiU3RvcmUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuU3RyaW5nIGdldE5hbWUoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXROYW1lKGphdmEubGFuZy5TdHJpbmcgbmFtZSk7CiAKQEAgLTk0LDggKzk0LDggQEAKIAogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKGphdmEubGFuZy5TdHJpbmcgbmFtZSkKICAgICAgICAgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiB7IH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL2VqYi9BMkhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9lamIvQTJIb21lLmphdmEKaW5kZXggNDdjYmU5Ni4uYTY5OGFkMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL2VqYi9BMkhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrVkMvZWpiL0EySG9tZS5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBBMkhvbWUgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJIb21lIHsKLSAgICAKKwogICAgIHB1YmxpYyAgQTIgZmluZEJ5UHJpbWFyeUtleShPYmplY3QgcGspICB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgIEEyIGNyZWF0ZShqYXZhLmxhbmcuU3RyaW5nIG5hbWUpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL3NxbC91bmtub3ducGtWQ19kYjIuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL3NxbC91bmtub3ducGtWQ19kYjIuc3FsCmluZGV4IDY1NmI3YjUuLjYxN2U5ZWQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9zcWwvdW5rbm93bnBrVkNfZGIyLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrVkMvc3FsL3Vua25vd25wa1ZDX2RiMi5zcWwKQEAgLTYsMTYgKzYsMTYgQEAKIAogQ1JFQVRFIFRBQkxFIFVOS05PV05QS1ZDMQogKAotICAgIElEICAgICBOVU1FUklDKDMwKQlQUklNQVJZIEtFWSBOT1QgTlVMTCwKKyAgICBJRCAgICAgTlVNRVJJQygzMCkgICAgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCiAgICAgTkFNRSAgIFZBUkNIQVIoMzIpLAotICAgIFZFUlNJT04gTlVNRVJJQygxOSkJTk9UIE5VTEwKKyAgICBWRVJTSU9OIE5VTUVSSUMoMTkpICAgIE5PVCBOVUxMCiApOwogCiBDUkVBVEUgVEFCTEUgVU5LTk9XTlBLVkMyCiAoCiAgICAgSUQgICAgIE5VTUVSSUMoMzApICAgICAgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCiAgICAgTkFNRSAgIFZBUkNIQVIoMzIpLAotICAgIFZFUlNJT04gTlVNRVJJQygxOSkJTk9UIE5VTEwKKyAgICBWRVJTSU9OIE5VTUVSSUMoMTkpICAgIE5PVCBOVUxMCiApOwogCiBjb21taXQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrVkMvc3FsL3Vua25vd25wa1ZDX2RlcmJ5LnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9zcWwvdW5rbm93bnBrVkNfZGVyYnkuc3FsCmluZGV4IGRkN2JjNjUuLjNhMzQ5NmYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9zcWwvdW5rbm93bnBrVkNfZGVyYnkuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9zcWwvdW5rbm93bnBrVkNfZGVyYnkuc3FsCkBAIC02LDE2ICs2LDE2IEBACiAKIENSRUFURSBUQUJMRSBVTktOT1dOUEtWQzEKICgKLSAgICBJRCAgICAgTlVNRVJJQygzMCkJUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgSUQgICAgIE5VTUVSSUMoMzApICAgIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAogICAgIE5BTUUgICBWQVJDSEFSKDMyKSwKLSAgICBWRVJTSU9OIE5VTUVSSUMoMTkpCU5PVCBOVUxMCisgICAgVkVSU0lPTiBOVU1FUklDKDE5KSAgICBOT1QgTlVMTAogKTsKIAogQ1JFQVRFIFRBQkxFIFVOS05PV05QS1ZDMgogKAogICAgIElEICAgICBOVU1FUklDKDMwKSAgICAgIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAogICAgIE5BTUUgICBWQVJDSEFSKDMyKSwKLSAgICBWRVJTSU9OIE5VTUVSSUMoMTkpCU5PVCBOVUxMCisgICAgVkVSU0lPTiBOVU1FUklDKDE5KSAgICBOT1QgTlVMTAogKTsKIAogQ1JFQVRFIFRSSUdHRVIgVF9VTktOT1dOUEtWQzEKQEAgLTI0LDcgKzI0LDcgQEAKICAgICAgICAgICAgIE9MRCBBUyBPX1JPVwogICAgRk9SIEVBQ0ggUk9XIE1PREUgREIyU1FMCiAgICBVUERBVEUgVU5LTk9XTlBLVkMxIFNFVCB2ZXJzaW9uID0gT19ST1cudmVyc2lvbiArIDEKLQkgICBXSEVSRSBJRCA9IE9fUk9XLklECisgICAgICAgV0hFUkUgSUQgPSBPX1JPVy5JRAogOwogCiBDUkVBVEUgVFJJR0dFUiBUX1VOS05PV05QS1ZDMgpAQCAtMzMsNSArMzMsNSBAQAogICAgICAgICAgICAgT0xEIEFTIE9fUk9XCiAgICBGT1IgRUFDSCBST1cgTU9ERSBEQjJTUUwKICAgIFVQREFURSBVTktOT1dOUEtWQzIgU0VUIHZlcnNpb24gPSBPX1JPVy52ZXJzaW9uICsgMQotCSAgIFdIRVJFIElEID0gT19ST1cuSUQKKyAgICAgICBXSEVSRSBJRCA9IE9fUk9XLklECiA7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrVkMvc3FsL3Vua25vd25wa1ZDX2lmeC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrVkMvc3FsL3Vua25vd25wa1ZDX2lmeC5zcWwKaW5kZXggNTU0YjIzZC4uN2M2N2ZiYSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL3NxbC91bmtub3ducGtWQ19pZnguc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9zcWwvdW5rbm93bnBrVkNfaWZ4LnNxbApAQCAtNiwxNiArNiwxNiBAQAogCiBDUkVBVEUgVEFCTEUgVU5LTk9XTlBLVkMxCiAoCi0gICAgSUQgICAgIERFQ0lNQUwoMzIpICAgICAgICAgIAlQUklNQVJZIEtFWSwKLSAgICBOQU1FICAgVkFSQ0hBUigzMikgCSwKLSAgICBWRVJTSU9OICAgREVDSU1BTCgxOSkgIAlOT1QgTlVMTCAKKyAgICBJRCAgICAgREVDSU1BTCgzMikgICAgICAgICAgICAgIFBSSU1BUlkgS0VZLAorICAgIE5BTUUgICBWQVJDSEFSKDMyKSAgICAgLAorICAgIFZFUlNJT04gICBERUNJTUFMKDE5KSAgICAgIE5PVCBOVUxMCiApOwogCiBDUkVBVEUgVEFCTEUgVU5LTk9XTlBLVkMyCiAoCi0gICAgSUQgICAgIERFQ0lNQUwoMzIpICAgICAgICAgIAlQUklNQVJZIEtFWSwKLSAgICBOQU1FICAgVkFSQ0hBUigzMikgCSwKLSAgICBWRVJTSU9OICAgREVDSU1BTCgxOSkgIAlOT1QgTlVMTCAKKyAgICBJRCAgICAgREVDSU1BTCgzMikgICAgICAgICAgICAgIFBSSU1BUlkgS0VZLAorICAgIE5BTUUgICBWQVJDSEFSKDMyKSAgICAgLAorICAgIFZFUlNJT04gICBERUNJTUFMKDE5KSAgICAgIE5PVCBOVUxMCiApOwogCiBjb21taXQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrVkMvc3FsL3Vua25vd25wa1ZDX21zc3FsLnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9zcWwvdW5rbm93bnBrVkNfbXNzcWwuc3FsCmluZGV4IDIzNWY5YmQuLjVkMGIzZmYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9zcWwvdW5rbm93bnBrVkNfbXNzcWwuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9zcWwvdW5rbm93bnBrVkNfbXNzcWwuc3FsCkBAIC05LDE1ICs5LDE1IEBACiBDUkVBVEUgVEFCTEUgVU5LTk9XTlBLVkMxCiAoCiAgICAgSUQgICAgIE5VTUVSSUMoMzgpICAgICAgICAgIFBSSU1BUlkgS0VZLAotICAgIE5BTUUgICBWQVJDSEFSKDMyKSAJCU5VTEwsCi0gICAgVkVSU0lPTiBOVU1FUklDKDE5KQkJTk9UIE5VTEwKKyAgICBOQU1FICAgVkFSQ0hBUigzMikgICAgICAgICBOVUxMLAorICAgIFZFUlNJT04gTlVNRVJJQygxOSkgICAgICAgIE5PVCBOVUxMCiApCiAKIENSRUFURSBUQUJMRSBVTktOT1dOUEtWQzIKICgKICAgICBJRCAgICAgTlVNRVJJQygzOCkgICAgICAgICAgUFJJTUFSWSBLRVksCi0gICAgTkFNRSAgIFZBUkNIQVIoMzIpIAkJTlVMTCwKLSAgICBWRVJTSU9OIE5VTUVSSUMoMTkpIAlOT1QgTlVMTAorICAgIE5BTUUgICBWQVJDSEFSKDMyKSAgICAgICAgIE5VTEwsCisgICAgVkVSU0lPTiBOVU1FUklDKDE5KSAgICAgTk9UIE5VTEwKICkKIGdvCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9zcWwvdW5rbm93bnBrVkNfbXlzcWwuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL3NxbC91bmtub3ducGtWQ19teXNxbC5zcWwKaW5kZXggYmIyYjU5NS4uMTI5ZjE1OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL3NxbC91bmtub3ducGtWQ19teXNxbC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL3NxbC91bmtub3ducGtWQ19teXNxbC5zcWwKQEAgLTYsMTYgKzYsMTYgQEAKIAogQ1JFQVRFIFRBQkxFIFVOS05PV05QS1ZDMQogKAotICAgIElEICAgICBERUNJTUFMKDM4KSAgICAgICAgICAJUFJJTUFSWSBLRVksCi0gICAgTkFNRSAgIFZBUkNIQVIoMzIpIAlOVUxMLAotICAgIFZFUlNJT04gICBERUNJTUFMKDE5KSAgCU5PVCBOVUxMCisgICAgSUQgICAgIERFQ0lNQUwoMzgpICAgICAgICAgICAgICBQUklNQVJZIEtFWSwKKyAgICBOQU1FICAgVkFSQ0hBUigzMikgICAgIE5VTEwsCisgICAgVkVSU0lPTiAgIERFQ0lNQUwoMTkpICAgICAgTk9UIE5VTEwKICkgZW5naW5lPUlubm9EQjsKIAogQ1JFQVRFIFRBQkxFIFVOS05PV05QS1ZDMgogKAotICAgIElEICAgICBERUNJTUFMKDM4KSAgICAgICAgICAJUFJJTUFSWSBLRVksCi0gICAgTkFNRSAgIFZBUkNIQVIoMzIpIAlOVUxMLAotICAgIFZFUlNJT04gICBERUNJTUFMKDE5KSAgCU5PVCBOVUxMCisgICAgSUQgICAgIERFQ0lNQUwoMzgpICAgICAgICAgICAgICBQUklNQVJZIEtFWSwKKyAgICBOQU1FICAgVkFSQ0hBUigzMikgICAgIE5VTEwsCisgICAgVkVSU0lPTiAgIERFQ0lNQUwoMTkpICAgICAgTk9UIE5VTEwKICkgZW5naW5lPUlubm9EQjsKIAogY29tbWl0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL3NxbC91bmtub3ducGtWQ19vcmEuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL3NxbC91bmtub3ducGtWQ19vcmEuc3FsCmluZGV4IDRhZTc0NjkuLjFiNjQ4NmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9zcWwvdW5rbm93bnBrVkNfb3JhLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrVkMvc3FsL3Vua25vd25wa1ZDX29yYS5zcWwKQEAgLTYsMTYgKzYsMTYgQEAKIAogQ1JFQVRFIFRBQkxFIFVOS05PV05QS1ZDMQogKAotICAgIElEICAgICBOVU1CRVIoMzgpICAgICAgICAgIAlQUklNQVJZIEtFWSwKLSAgICBOQU1FICAgVkFSQ0hBUjIoMzIpIAlOVUxMLAotICAgIFZFUlNJT04gICBOVU1CRVIoMTkpICAJTk9UIE5VTEwKKyAgICBJRCAgICAgTlVNQkVSKDM4KSAgICAgICAgICAgICAgUFJJTUFSWSBLRVksCisgICAgTkFNRSAgIFZBUkNIQVIyKDMyKSAgICAgTlVMTCwKKyAgICBWRVJTSU9OICAgTlVNQkVSKDE5KSAgICAgIE5PVCBOVUxMCiApOwogCiBDUkVBVEUgVEFCTEUgVU5LTk9XTlBLVkMyCiAoCi0gICAgSUQgICAgIE5VTUJFUigzOCkgICAgICAgICAgCVBSSU1BUlkgS0VZLAotICAgIE5BTUUgICBWQVJDSEFSMigzMikgCU5VTEwsCi0gICAgVkVSU0lPTiAgIE5VTUJFUigxOSkgIAlOT1QgTlVMTAorICAgIElEICAgICBOVU1CRVIoMzgpICAgICAgICAgICAgICBQUklNQVJZIEtFWSwKKyAgICBOQU1FICAgVkFSQ0hBUjIoMzIpICAgICBOVUxMLAorICAgIFZFUlNJT04gICBOVU1CRVIoMTkpICAgICAgTk9UIE5VTEwKICk7CiAKIGNvbW1pdDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9zcWwvdW5rbm93bnBrVkNfcGJzLnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9zcWwvdW5rbm93bnBrVkNfcGJzLnNxbAppbmRleCA2ZTk4MTljLi4wZWZiZWRmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrVkMvc3FsL3Vua25vd25wa1ZDX3Bicy5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL3NxbC91bmtub3ducGtWQ19wYnMuc3FsCkBAIC00LDE2ICs0LDE2IEBACiAKIENSRUFURSBUQUJMRSBVTktOT1dOUEtWQzEKICgKLSAgICBJRCAgICAgTlVNQkVSKDM4KSAgICAgICAgICAJUFJJTUFSWSBLRVksCi0gICAgTkFNRSAgIFZBUkNIQVIyKDMyKSAJTlVMTCwKLSAgICBWRVJTSU9OIE5VTUJFUigxOSkgCQlOT1QgTlVMTAorICAgIElEICAgICBOVU1CRVIoMzgpICAgICAgICAgICAgICBQUklNQVJZIEtFWSwKKyAgICBOQU1FICAgVkFSQ0hBUjIoMzIpICAgICBOVUxMLAorICAgIFZFUlNJT04gTlVNQkVSKDE5KSAgICAgICAgIE5PVCBOVUxMCiApOwogCiBDUkVBVEUgVEFCTEUgVU5LTk9XTlBLVkMyCiAoCi0gICAgSUQgICAgIE5VTUJFUigzOCkgIAkgICAgICAgIFBSSU1BUlkgS0VZLAotICAgIE5BTUUgICBWQVJDSEFSMigzMikJCU5VTEwsCi0gICAgVkVSU0lPTiBOVU1CRVIoMTkpIAkJTk9UIE5VTEwKKyAgICBJRCAgICAgTlVNQkVSKDM4KSAgICAgICAgICAgICAgUFJJTUFSWSBLRVksCisgICAgTkFNRSAgIFZBUkNIQVIyKDMyKSAgICAgICAgTlVMTCwKKyAgICBWRVJTSU9OIE5VTUJFUigxOSkgICAgICAgICBOT1QgTlVMTAogKTsKIAogY29tbWl0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL3NxbC91bmtub3ducGtWQ19wc3FsLnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9zcWwvdW5rbm93bnBrVkNfcHNxbC5zcWwKaW5kZXggMDVlZGEwNi4uZWJhNmU0NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL3NxbC91bmtub3ducGtWQ19wc3FsLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrVkMvc3FsL3Vua25vd25wa1ZDX3BzcWwuc3FsCkBAIC0zLDE2ICszLDE2IEBACiAKIENSRUFURSBUQUJMRSBVTktOT1dOUEtWQzEKICgKLSAgICBJRCAgICAgREVDSU1BTCgzOCkgICAgICAgICAgCVBSSU1BUlkgS0VZLAotICAgIE5BTUUgICBWQVJDSEFSKDMyKSAJTlVMTCwKLSAgICBWRVJTSU9OICAgREVDSU1BTCgxOSkgIAlOT1QgTlVMTAorICAgIElEICAgICBERUNJTUFMKDM4KSAgICAgICAgICAgICAgUFJJTUFSWSBLRVksCisgICAgTkFNRSAgIFZBUkNIQVIoMzIpICAgICBOVUxMLAorICAgIFZFUlNJT04gICBERUNJTUFMKDE5KSAgICAgIE5PVCBOVUxMCiApOwogCiBDUkVBVEUgVEFCTEUgVU5LTk9XTlBLVkMyCiAoCi0gICAgSUQgICAgIERFQ0lNQUwoMzgpICAgICAgICAgIAlQUklNQVJZIEtFWSwKLSAgICBOQU1FICAgVkFSQ0hBUigzMikgCU5VTEwsCi0gICAgVkVSU0lPTiAgIERFQ0lNQUwoMTkpICAJTk9UIE5VTEwKKyAgICBJRCAgICAgREVDSU1BTCgzOCkgICAgICAgICAgICAgIFBSSU1BUlkgS0VZLAorICAgIE5BTUUgICBWQVJDSEFSKDMyKSAgICAgTlVMTCwKKyAgICBWRVJTSU9OICAgREVDSU1BTCgxOSkgICAgICBOT1QgTlVMTAogKTsKIAogY29tbWl0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL3NxbC91bmtub3ducGtWQ19zeWIuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY21wL3Vua25vd25wa1ZDL3NxbC91bmtub3ducGtWQ19zeWIuc3FsCmluZGV4IDY4NWRhN2IuLmRiMzYzYTIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NtcC91bmtub3ducGtWQy9zcWwvdW5rbm93bnBrVkNfc3liLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jbXAvdW5rbm93bnBrVkMvc3FsL3Vua25vd25wa1ZDX3N5Yi5zcWwKQEAgLTksMTUgKzksMTUgQEAKIENSRUFURSBUQUJMRSBVTktOT1dOUEtWQzEKICgKICAgICBJRCAgICAgTlVNRVJJQygzOCkgICAgICAgICAgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCi0gICAgTkFNRSAgIFZBUkNIQVIoMzIpIAkJTlVMTCwKLSAgICBWRVJTSU9OIE5VTUVSSUMoMTkpIAlOT1QgTlVMTAorICAgIE5BTUUgICBWQVJDSEFSKDMyKSAgICAgICAgIE5VTEwsCisgICAgVkVSU0lPTiBOVU1FUklDKDE5KSAgICAgTk9UIE5VTEwKICkKIAogQ1JFQVRFIFRBQkxFIFVOS05PV05QS1ZDMgogKAogICAgIElEICAgICBOVU1FUklDKDM4KSAgICAgICAgICBQUklNQVJZIEtFWSBOT1QgTlVMTCwKLSAgICBOQU1FICAgVkFSQ0hBUigzMikgCQlOVUxMLAotICAgIFZFUlNJT04gTlVNRVJJQygxOSkJCU5PVCBOVUxMCisgICAgTkFNRSAgIFZBUkNIQVIoMzIpICAgICAgICAgTlVMTCwKKyAgICBWRVJTSU9OIE5VTUVSSUMoMTkpICAgICAgICBOT1QgTlVMTAogKQogZ28KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29uZmlnL2NvbS9zdW4vZW50ZXJwcmlzZS9jb25maWcvaW1wbC9Db25maWdDb250ZXh0SW1wbFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NvbmZpZy9jb20vc3VuL2VudGVycHJpc2UvY29uZmlnL2ltcGwvQ29uZmlnQ29udGV4dEltcGxUZXN0LmphdmEKaW5kZXggOTMzNzJmYi4uMzBmMThkZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29uZmlnL2NvbS9zdW4vZW50ZXJwcmlzZS9jb25maWcvaW1wbC9Db25maWdDb250ZXh0SW1wbFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25maWcvY29tL3N1bi9lbnRlcnByaXNlL2NvbmZpZy9pbXBsL0NvbmZpZ0NvbnRleHRJbXBsVGVzdC5qYXZhCkBAIC01MywxODEgKzUzLDE4MSBAQAogICAgICAgICBzdXBlcihuYW1lKTsKICAgICB9CiAKLQlwdWJsaWMgdm9pZCB0ZXN0SW5pdENvbnRleHQoKQotCXsKLQkJYXNzZXJ0VHJ1ZShydW50aW1lQ3R4ICE9IG51bGwpOwotCQlhc3NlcnRUcnVlKGFkbWluQ3R4ICE9IG51bGwpOwotCQlhc3NlcnRUcnVlKGFkbWluQ3R4ICE9IHJ1bnRpbWVDdHgpOwotCX0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0SW5pdENvbnRleHQoKQorICAgIHsKKyAgICAgICAgYXNzZXJ0VHJ1ZShydW50aW1lQ3R4ICE9IG51bGwpOworICAgICAgICBhc3NlcnRUcnVlKGFkbWluQ3R4ICE9IG51bGwpOworICAgICAgICBhc3NlcnRUcnVlKGFkbWluQ3R4ICE9IHJ1bnRpbWVDdHgpOworICAgIH0KIAotCXB1YmxpYyB2b2lkIHRlc3RSdW50aW1lQ3R4KCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJYXNzZXJ0VHJ1ZShnZXRJbnRlcmNlcHRvcihydW50aW1lQ3R4KS5pc1Jlc29sdmluZ1BhdGhzKCkpOwotCQlDb25maWdDb250ZXh0IGNsb25lID0gKENvbmZpZ0NvbnRleHQpcnVudGltZUN0eC5jbG9uZSgpOwotCQlhc3NlcnRUcnVlKGdldEludGVyY2VwdG9yKGNsb25lKS5pc1Jlc29sdmluZ1BhdGhzKCkpOwotCX0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0UnVudGltZUN0eCgpIHRocm93cyBFeGNlcHRpb24KKyAgICB7CisgICAgICAgIGFzc2VydFRydWUoZ2V0SW50ZXJjZXB0b3IocnVudGltZUN0eCkuaXNSZXNvbHZpbmdQYXRocygpKTsKKyAgICAgICAgQ29uZmlnQ29udGV4dCBjbG9uZSA9IChDb25maWdDb250ZXh0KXJ1bnRpbWVDdHguY2xvbmUoKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShnZXRJbnRlcmNlcHRvcihjbG9uZSkuaXNSZXNvbHZpbmdQYXRocygpKTsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCB0ZXN0QWRtaW5DdHgoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlhc3NlcnRGYWxzZShnZXRJbnRlcmNlcHRvcihhZG1pbkN0eCkuaXNSZXNvbHZpbmdQYXRocygpKTsKLQkJQ29uZmlnQ29udGV4dCBjbG9uZSA9IChDb25maWdDb250ZXh0KWFkbWluQ3R4LmNsb25lKCk7Ci0JCWFzc2VydEZhbHNlKGdldEludGVyY2VwdG9yKGNsb25lKS5pc1Jlc29sdmluZ1BhdGhzKCkpOwotCX0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0QWRtaW5DdHgoKSB0aHJvd3MgRXhjZXB0aW9uCisgICAgeworICAgICAgICBhc3NlcnRGYWxzZShnZXRJbnRlcmNlcHRvcihhZG1pbkN0eCkuaXNSZXNvbHZpbmdQYXRocygpKTsKKyAgICAgICAgQ29uZmlnQ29udGV4dCBjbG9uZSA9IChDb25maWdDb250ZXh0KWFkbWluQ3R4LmNsb25lKCk7CisgICAgICAgIGFzc2VydEZhbHNlKGdldEludGVyY2VwdG9yKGNsb25lKS5pc1Jlc29sdmluZ1BhdGhzKCkpOworICAgIH0KIAotCXB1YmxpYyB2b2lkIHRlc3REb21haW5JblJ1bnRpbWVDdHgoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlEb21haW4gZG9tYWluID0gKERvbWFpbilydW50aW1lQ3R4LmdldFJvb3RDb25maWdCZWFuKCk7Ci0JCWFzc2VydFRydWUoZG9tYWluLmdldEludGVyY2VwdG9yKCkuaXNSZXNvbHZpbmdQYXRocygpKTsKLQkJQ29uZmlnQ29udGV4dCBjbG9uZSA9IChDb25maWdDb250ZXh0KXJ1bnRpbWVDdHguY2xvbmUoKTsKLQkJZG9tYWluID0gKERvbWFpbiljbG9uZS5nZXRSb290Q29uZmlnQmVhbigpOwotCQlhc3NlcnRUcnVlKGRvbWFpbi5nZXRJbnRlcmNlcHRvcigpLmlzUmVzb2x2aW5nUGF0aHMoKSk7Ci0JfQorICAgIHB1YmxpYyB2b2lkIHRlc3REb21haW5JblJ1bnRpbWVDdHgoKSB0aHJvd3MgRXhjZXB0aW9uCisgICAgeworICAgICAgICBEb21haW4gZG9tYWluID0gKERvbWFpbilydW50aW1lQ3R4LmdldFJvb3RDb25maWdCZWFuKCk7CisgICAgICAgIGFzc2VydFRydWUoZG9tYWluLmdldEludGVyY2VwdG9yKCkuaXNSZXNvbHZpbmdQYXRocygpKTsKKyAgICAgICAgQ29uZmlnQ29udGV4dCBjbG9uZSA9IChDb25maWdDb250ZXh0KXJ1bnRpbWVDdHguY2xvbmUoKTsKKyAgICAgICAgZG9tYWluID0gKERvbWFpbiljbG9uZS5nZXRSb290Q29uZmlnQmVhbigpOworICAgICAgICBhc3NlcnRUcnVlKGRvbWFpbi5nZXRJbnRlcmNlcHRvcigpLmlzUmVzb2x2aW5nUGF0aHMoKSk7CisgICAgfQogCi0JcHVibGljIHZvaWQgdGVzdERvbWFpbkluQWRtaW5DdHgoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlEb21haW4gZG9tYWluID0gKERvbWFpbilhZG1pbkN0eC5nZXRSb290Q29uZmlnQmVhbigpOwotCQlhc3NlcnRGYWxzZShkb21haW4uZ2V0SW50ZXJjZXB0b3IoKS5pc1Jlc29sdmluZ1BhdGhzKCkpOwotCQlDb25maWdDb250ZXh0IGNsb25lID0gKENvbmZpZ0NvbnRleHQpYWRtaW5DdHguY2xvbmUoKTsKLQkJZG9tYWluID0gKERvbWFpbiljbG9uZS5nZXRSb290Q29uZmlnQmVhbigpOwotCQlhc3NlcnRGYWxzZShkb21haW4uZ2V0SW50ZXJjZXB0b3IoKS5pc1Jlc29sdmluZ1BhdGhzKCkpOwotCX0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0RG9tYWluSW5BZG1pbkN0eCgpIHRocm93cyBFeGNlcHRpb24KKyAgICB7CisgICAgICAgIERvbWFpbiBkb21haW4gPSAoRG9tYWluKWFkbWluQ3R4LmdldFJvb3RDb25maWdCZWFuKCk7CisgICAgICAgIGFzc2VydEZhbHNlKGRvbWFpbi5nZXRJbnRlcmNlcHRvcigpLmlzUmVzb2x2aW5nUGF0aHMoKSk7CisgICAgICAgIENvbmZpZ0NvbnRleHQgY2xvbmUgPSAoQ29uZmlnQ29udGV4dClhZG1pbkN0eC5jbG9uZSgpOworICAgICAgICBkb21haW4gPSAoRG9tYWluKWNsb25lLmdldFJvb3RDb25maWdCZWFuKCk7CisgICAgICAgIGFzc2VydEZhbHNlKGRvbWFpbi5nZXRJbnRlcmNlcHRvcigpLmlzUmVzb2x2aW5nUGF0aHMoKSk7CisgICAgfQogCi0JcHVibGljIHZvaWQgdGVzdFNlcnZlckluUnVudGltZUN0eCgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCURvbWFpbiBkb21haW4gPSAoRG9tYWluKXJ1bnRpbWVDdHguZ2V0Um9vdENvbmZpZ0JlYW4oKTsKLQkJU2VydmVyIHMgPSBkb21haW4uZ2V0U2VydmVycygpLmdldFNlcnZlckJ5TmFtZSgic2VydmVyIik7Ci0JCWFzc2VydFRydWUocy5nZXRJbnRlcmNlcHRvcigpLmlzUmVzb2x2aW5nUGF0aHMoKSk7Ci0JCUNvbmZpZ0NvbnRleHQgY2xvbmUgPSAoQ29uZmlnQ29udGV4dClydW50aW1lQ3R4LmNsb25lKCk7Ci0JCWFzc2VydFRydWUocy5nZXRJbnRlcmNlcHRvcigpLmlzUmVzb2x2aW5nUGF0aHMoKSk7Ci0JCWRvbWFpbiA9IChEb21haW4pY2xvbmUuZ2V0Um9vdENvbmZpZ0JlYW4oKTsKLQkJcyA9IGRvbWFpbi5nZXRTZXJ2ZXJzKCkuZ2V0U2VydmVyQnlOYW1lKCJzZXJ2ZXIiKTsKLQkJYXNzZXJ0VHJ1ZShzLmdldEludGVyY2VwdG9yKCkuaXNSZXNvbHZpbmdQYXRocygpKTsKLQl9CisgICAgcHVibGljIHZvaWQgdGVzdFNlcnZlckluUnVudGltZUN0eCgpIHRocm93cyBFeGNlcHRpb24KKyAgICB7CisgICAgICAgIERvbWFpbiBkb21haW4gPSAoRG9tYWluKXJ1bnRpbWVDdHguZ2V0Um9vdENvbmZpZ0JlYW4oKTsKKyAgICAgICAgU2VydmVyIHMgPSBkb21haW4uZ2V0U2VydmVycygpLmdldFNlcnZlckJ5TmFtZSgic2VydmVyIik7CisgICAgICAgIGFzc2VydFRydWUocy5nZXRJbnRlcmNlcHRvcigpLmlzUmVzb2x2aW5nUGF0aHMoKSk7CisgICAgICAgIENvbmZpZ0NvbnRleHQgY2xvbmUgPSAoQ29uZmlnQ29udGV4dClydW50aW1lQ3R4LmNsb25lKCk7CisgICAgICAgIGFzc2VydFRydWUocy5nZXRJbnRlcmNlcHRvcigpLmlzUmVzb2x2aW5nUGF0aHMoKSk7CisgICAgICAgIGRvbWFpbiA9IChEb21haW4pY2xvbmUuZ2V0Um9vdENvbmZpZ0JlYW4oKTsKKyAgICAgICAgcyA9IGRvbWFpbi5nZXRTZXJ2ZXJzKCkuZ2V0U2VydmVyQnlOYW1lKCJzZXJ2ZXIiKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShzLmdldEludGVyY2VwdG9yKCkuaXNSZXNvbHZpbmdQYXRocygpKTsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCB0ZXN0U2VydmVySW5BZG1pbkN0eCgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCURvbWFpbiBkb21haW4gPSAoRG9tYWluKWFkbWluQ3R4LmdldFJvb3RDb25maWdCZWFuKCk7Ci0JCVNlcnZlciBzID0gZG9tYWluLmdldFNlcnZlcnMoKS5nZXRTZXJ2ZXJCeU5hbWUoInNlcnZlciIpOwotCQlhc3NlcnRGYWxzZShzLmdldEludGVyY2VwdG9yKCkuaXNSZXNvbHZpbmdQYXRocygpKTsKLQkJQ29uZmlnQ29udGV4dCBjbG9uZSA9IChDb25maWdDb250ZXh0KWFkbWluQ3R4LmNsb25lKCk7Ci0JCWFzc2VydEZhbHNlKHMuZ2V0SW50ZXJjZXB0b3IoKS5pc1Jlc29sdmluZ1BhdGhzKCkpOwotCQlkb21haW4gPSAoRG9tYWluKWNsb25lLmdldFJvb3RDb25maWdCZWFuKCk7Ci0JCXMgPSBkb21haW4uZ2V0U2VydmVycygpLmdldFNlcnZlckJ5TmFtZSgic2VydmVyIik7Ci0JCWFzc2VydEZhbHNlKHMuZ2V0SW50ZXJjZXB0b3IoKS5pc1Jlc29sdmluZ1BhdGhzKCkpOwotCX0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0U2VydmVySW5BZG1pbkN0eCgpIHRocm93cyBFeGNlcHRpb24KKyAgICB7CisgICAgICAgIERvbWFpbiBkb21haW4gPSAoRG9tYWluKWFkbWluQ3R4LmdldFJvb3RDb25maWdCZWFuKCk7CisgICAgICAgIFNlcnZlciBzID0gZG9tYWluLmdldFNlcnZlcnMoKS5nZXRTZXJ2ZXJCeU5hbWUoInNlcnZlciIpOworICAgICAgICBhc3NlcnRGYWxzZShzLmdldEludGVyY2VwdG9yKCkuaXNSZXNvbHZpbmdQYXRocygpKTsKKyAgICAgICAgQ29uZmlnQ29udGV4dCBjbG9uZSA9IChDb25maWdDb250ZXh0KWFkbWluQ3R4LmNsb25lKCk7CisgICAgICAgIGFzc2VydEZhbHNlKHMuZ2V0SW50ZXJjZXB0b3IoKS5pc1Jlc29sdmluZ1BhdGhzKCkpOworICAgICAgICBkb21haW4gPSAoRG9tYWluKWNsb25lLmdldFJvb3RDb25maWdCZWFuKCk7CisgICAgICAgIHMgPSBkb21haW4uZ2V0U2VydmVycygpLmdldFNlcnZlckJ5TmFtZSgic2VydmVyIik7CisgICAgICAgIGFzc2VydEZhbHNlKHMuZ2V0SW50ZXJjZXB0b3IoKS5pc1Jlc29sdmluZ1BhdGhzKCkpOworICAgIH0KIAotCXB1YmxpYyB2b2lkIHRlc3RTU0xQb3J0SW5SdW50aW1lQ3R4KCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJYXNzZXJ0RXF1YWxzKCIxMDYwIiwgZ2V0U1NMUG9ydChydW50aW1lQ3R4KSk7Ci0JCUNvbmZpZ0NvbnRleHQgY2xvbmUgPSAoQ29uZmlnQ29udGV4dClydW50aW1lQ3R4LmNsb25lKCk7Ci0JCWFzc2VydEVxdWFscygiMTA2MCIsIGdldFNTTFBvcnQoY2xvbmUpKTsKLQl9CisgICAgcHVibGljIHZvaWQgdGVzdFNTTFBvcnRJblJ1bnRpbWVDdHgoKSB0aHJvd3MgRXhjZXB0aW9uCisgICAgeworICAgICAgICBhc3NlcnRFcXVhbHMoIjEwNjAiLCBnZXRTU0xQb3J0KHJ1bnRpbWVDdHgpKTsKKyAgICAgICAgQ29uZmlnQ29udGV4dCBjbG9uZSA9IChDb25maWdDb250ZXh0KXJ1bnRpbWVDdHguY2xvbmUoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCIxMDYwIiwgZ2V0U1NMUG9ydChjbG9uZSkpOworICAgIH0KIAotCXB1YmxpYyB2b2lkIHRlc3RTU0xQb3J0SW5BZG1pbkN0eCgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCWFzc2VydEVxdWFscygiJHtTU0wtcG9ydH0iLCBnZXRTU0xQb3J0KGFkbWluQ3R4KSk7Ci0JCUNvbmZpZ0NvbnRleHQgY2xvbmUgPSAoQ29uZmlnQ29udGV4dClhZG1pbkN0eC5jbG9uZSgpOwotCQlhc3NlcnRFcXVhbHMoIiR7U1NMLXBvcnR9IiwgZ2V0U1NMUG9ydChjbG9uZSkpOwotCX0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0U1NMUG9ydEluQWRtaW5DdHgoKSB0aHJvd3MgRXhjZXB0aW9uCisgICAgeworICAgICAgICBhc3NlcnRFcXVhbHMoIiR7U1NMLXBvcnR9IiwgZ2V0U1NMUG9ydChhZG1pbkN0eCkpOworICAgICAgICBDb25maWdDb250ZXh0IGNsb25lID0gKENvbmZpZ0NvbnRleHQpYWRtaW5DdHguY2xvbmUoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCIke1NTTC1wb3J0fSIsIGdldFNTTFBvcnQoY2xvbmUpKTsKKyAgICB9CiAKLSAJcHVibGljIHZvaWQgdGVzdEFsbENoaWxkcmVuSW5SdW50aW1lQ3R4KCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJdGVzdEFsbENvbmZpZ0JlYW5zKGdldEFsbENvbmZpZ0JlYW5zKHJ1bnRpbWVDdHgpLCB0cnVlKTsKLQkJQ29uZmlnQ29udGV4dCBjbG9uZSA9IChDb25maWdDb250ZXh0KXJ1bnRpbWVDdHguY2xvbmUoKTsKLQkJdGVzdEFsbENvbmZpZ0JlYW5zKGdldEFsbENvbmZpZ0JlYW5zKGNsb25lKSwgdHJ1ZSk7Ci0JCWNsb25lID0gKENvbmZpZ0NvbnRleHQpY2xvbmUuY2xvbmUoKTsKLQkJdGVzdEFsbENvbmZpZ0JlYW5zKGdldEFsbENvbmZpZ0JlYW5zKGNsb25lKSwgdHJ1ZSk7Ci0JfQorICAgICBwdWJsaWMgdm9pZCB0ZXN0QWxsQ2hpbGRyZW5JblJ1bnRpbWVDdHgoKSB0aHJvd3MgRXhjZXB0aW9uCisgICAgeworICAgICAgICB0ZXN0QWxsQ29uZmlnQmVhbnMoZ2V0QWxsQ29uZmlnQmVhbnMocnVudGltZUN0eCksIHRydWUpOworICAgICAgICBDb25maWdDb250ZXh0IGNsb25lID0gKENvbmZpZ0NvbnRleHQpcnVudGltZUN0eC5jbG9uZSgpOworICAgICAgICB0ZXN0QWxsQ29uZmlnQmVhbnMoZ2V0QWxsQ29uZmlnQmVhbnMoY2xvbmUpLCB0cnVlKTsKKyAgICAgICAgY2xvbmUgPSAoQ29uZmlnQ29udGV4dCljbG9uZS5jbG9uZSgpOworICAgICAgICB0ZXN0QWxsQ29uZmlnQmVhbnMoZ2V0QWxsQ29uZmlnQmVhbnMoY2xvbmUpLCB0cnVlKTsKKyAgICB9CiAKLSAJcHVibGljIHZvaWQgdGVzdEFsbENoaWxkcmVuSW5BZG1pbkN0eCgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCXRlc3RBbGxDb25maWdCZWFucyhnZXRBbGxDb25maWdCZWFucyhhZG1pbkN0eCksIGZhbHNlKTsKLQkJQ29uZmlnQ29udGV4dCBjbG9uZSA9IChDb25maWdDb250ZXh0KWFkbWluQ3R4LmNsb25lKCk7Ci0JCXRlc3RBbGxDb25maWdCZWFucyhnZXRBbGxDb25maWdCZWFucyhjbG9uZSksIGZhbHNlKTsKLQkJY2xvbmUgPSAoQ29uZmlnQ29udGV4dCljbG9uZS5jbG9uZSgpOwotCQl0ZXN0QWxsQ29uZmlnQmVhbnMoZ2V0QWxsQ29uZmlnQmVhbnMoY2xvbmUpLCBmYWxzZSk7Ci0JfQorICAgICBwdWJsaWMgdm9pZCB0ZXN0QWxsQ2hpbGRyZW5JbkFkbWluQ3R4KCkgdGhyb3dzIEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgdGVzdEFsbENvbmZpZ0JlYW5zKGdldEFsbENvbmZpZ0JlYW5zKGFkbWluQ3R4KSwgZmFsc2UpOworICAgICAgICBDb25maWdDb250ZXh0IGNsb25lID0gKENvbmZpZ0NvbnRleHQpYWRtaW5DdHguY2xvbmUoKTsKKyAgICAgICAgdGVzdEFsbENvbmZpZ0JlYW5zKGdldEFsbENvbmZpZ0JlYW5zKGNsb25lKSwgZmFsc2UpOworICAgICAgICBjbG9uZSA9IChDb25maWdDb250ZXh0KWNsb25lLmNsb25lKCk7CisgICAgICAgIHRlc3RBbGxDb25maWdCZWFucyhnZXRBbGxDb25maWdCZWFucyhjbG9uZSksIGZhbHNlKTsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCB0ZXN0U3NsKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJRG9tYWluIGRvbWFpbiA9IChEb21haW4pcnVudGltZUN0eC5nZXRSb290Q29uZmlnQmVhbigpOwotCQlJaW9wTGlzdGVuZXIgbGlzdGVuZXIgPSBkb21haW4uZ2V0Q29uZmlncygpLmdldENvbmZpZ0J5TmFtZSgic2VydmVyLWNvbmZpZyIpLgotCQkJZ2V0SWlvcFNlcnZpY2UoKS5nZXRJaW9wTGlzdGVuZXJCeUlkKCJTU0wiKTsKLQkJYXNzZXJ0VHJ1ZShsaXN0ZW5lci5nZXRJbnRlcmNlcHRvcigpLmlzUmVzb2x2aW5nUGF0aHMoKSk7Ci0JCVNzbCBzc2wgPSBsaXN0ZW5lci5nZXRTc2woKTsKLQkJYXNzZXJ0VHJ1ZShzc2wuZ2V0Q29uZmlnQ29udGV4dCgpID09IHJ1bnRpbWVDdHgpOwotCQlhc3NlcnRUcnVlKHNzbC5nZXRJbnRlcmNlcHRvcigpLmlzUmVzb2x2aW5nUGF0aHMoKSk7Ci0JfQorICAgIHB1YmxpYyB2b2lkIHRlc3RTc2woKSB0aHJvd3MgRXhjZXB0aW9uCisgICAgeworICAgICAgICBEb21haW4gZG9tYWluID0gKERvbWFpbilydW50aW1lQ3R4LmdldFJvb3RDb25maWdCZWFuKCk7CisgICAgICAgIElpb3BMaXN0ZW5lciBsaXN0ZW5lciA9IGRvbWFpbi5nZXRDb25maWdzKCkuZ2V0Q29uZmlnQnlOYW1lKCJzZXJ2ZXItY29uZmlnIikuCisgICAgICAgICAgICBnZXRJaW9wU2VydmljZSgpLmdldElpb3BMaXN0ZW5lckJ5SWQoIlNTTCIpOworICAgICAgICBhc3NlcnRUcnVlKGxpc3RlbmVyLmdldEludGVyY2VwdG9yKCkuaXNSZXNvbHZpbmdQYXRocygpKTsKKyAgICAgICAgU3NsIHNzbCA9IGxpc3RlbmVyLmdldFNzbCgpOworICAgICAgICBhc3NlcnRUcnVlKHNzbC5nZXRDb25maWdDb250ZXh0KCkgPT0gcnVudGltZUN0eCk7CisgICAgICAgIGFzc2VydFRydWUoc3NsLmdldEludGVyY2VwdG9yKCkuaXNSZXNvbHZpbmdQYXRocygpKTsKKyAgICB9CiAKLQlMaXN0IHRlc3RBbGxDb25maWdCZWFucyhMaXN0IGwsIGJvb2xlYW4gaXNSZXNvbHZlKQotCXsKLQkJYXNzZXJ0VHJ1ZSgobCAhPSBudWxsKSAmJiAobC5zaXplKCkgPj0xKSk7Ci0JCUl0ZXJhdG9yIGl0ID0gbC5pdGVyYXRvcigpOwotCQlMaXN0IGZhaWxlZCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkKLQkJewotCQkJQ29uZmlnQmVhbiBjYiA9IChDb25maWdCZWFuKWl0Lm5leHQoKTsKLQkJCWlmIChpc1Jlc29sdmUgIT0gY2IuZ2V0SW50ZXJjZXB0b3IoKS5pc1Jlc29sdmluZ1BhdGhzKCkpCi0JCQl7Ci0JCQkJZmFpbGVkLmFkZChjYi5nZXRYUGF0aCgpKTsKLQkJCX0KLQkJfQotCQlpZiAoZmFpbGVkLnNpemUoKSA+IDApCi0JCXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRmFpbGVkOiAiK2ZhaWxlZCk7Ci0JCX0KLQkJcmV0dXJuIGZhaWxlZDsKLQl9CisgICAgTGlzdCB0ZXN0QWxsQ29uZmlnQmVhbnMoTGlzdCBsLCBib29sZWFuIGlzUmVzb2x2ZSkKKyAgICB7CisgICAgICAgIGFzc2VydFRydWUoKGwgIT0gbnVsbCkgJiYgKGwuc2l6ZSgpID49MSkpOworICAgICAgICBJdGVyYXRvciBpdCA9IGwuaXRlcmF0b3IoKTsKKyAgICAgICAgTGlzdCBmYWlsZWQgPSBuZXcgQXJyYXlMaXN0KCk7CisgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENvbmZpZ0JlYW4gY2IgPSAoQ29uZmlnQmVhbilpdC5uZXh0KCk7CisgICAgICAgICAgICBpZiAoaXNSZXNvbHZlICE9IGNiLmdldEludGVyY2VwdG9yKCkuaXNSZXNvbHZpbmdQYXRocygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZhaWxlZC5hZGQoY2IuZ2V0WFBhdGgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZhaWxlZC5zaXplKCkgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWxlZDogIitmYWlsZWQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWlsZWQ7CisgICAgfQogCi0JTGlzdCBnZXRBbGxDb25maWdCZWFucyhDb25maWdDb250ZXh0IGNjKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlBcnJheUxpc3QgYWwgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUNvbmZpZ0JlYW4gcm9vdCA9IGNjLmdldFJvb3RDb25maWdCZWFuKCk7Ci0JCWFzc2VydFRydWUocm9vdCAhPSBudWxsKTsKLQkJYWwuYWRkKHJvb3QpOwotCQlhbC5hZGRBbGwoZ2V0QWxsQ2hpbGRCZWFucyhyb290KSk7Ci0JCXJldHVybiBhbDsKLQl9CisgICAgTGlzdCBnZXRBbGxDb25maWdCZWFucyhDb25maWdDb250ZXh0IGNjKSB0aHJvd3MgRXhjZXB0aW9uCisgICAgeworICAgICAgICBBcnJheUxpc3QgYWwgPSBuZXcgQXJyYXlMaXN0KCk7CisgICAgICAgIENvbmZpZ0JlYW4gcm9vdCA9IGNjLmdldFJvb3RDb25maWdCZWFuKCk7CisgICAgICAgIGFzc2VydFRydWUocm9vdCAhPSBudWxsKTsKKyAgICAgICAgYWwuYWRkKHJvb3QpOworICAgICAgICBhbC5hZGRBbGwoZ2V0QWxsQ2hpbGRCZWFucyhyb290KSk7CisgICAgICAgIHJldHVybiBhbDsKKyAgICB9CiAKLQlMaXN0IGdldEFsbENoaWxkQmVhbnMoQ29uZmlnQmVhbiBwYXJlbnQpCi0JewotCQlBcnJheUxpc3QgYWwgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUNvbmZpZ0JlYW5bXSBjaGlsZHJlbiA9IHBhcmVudC5nZXRBbGxDaGlsZEJlYW5zKCk7Ci0JCWlmIChjaGlsZHJlbiAhPSBudWxsKQotCQl7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKQotCQkJewotCQkJCWlmIChjaGlsZHJlbltpXSAhPSBudWxsKQotCQkJCXsKLQkJCQkJYWwuYWRkKGNoaWxkcmVuW2ldKTsKLQkJCQkJYWwuYWRkQWxsKGdldEFsbENoaWxkQmVhbnMoY2hpbGRyZW5baV0pKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGFsOwotCX0KKyAgICBMaXN0IGdldEFsbENoaWxkQmVhbnMoQ29uZmlnQmVhbiBwYXJlbnQpCisgICAgeworICAgICAgICBBcnJheUxpc3QgYWwgPSBuZXcgQXJyYXlMaXN0KCk7CisgICAgICAgIENvbmZpZ0JlYW5bXSBjaGlsZHJlbiA9IHBhcmVudC5nZXRBbGxDaGlsZEJlYW5zKCk7CisgICAgICAgIGlmIChjaGlsZHJlbiAhPSBudWxsKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXSAhPSBudWxsKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYWwuYWRkKGNoaWxkcmVuW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgYWwuYWRkQWxsKGdldEFsbENoaWxkQmVhbnMoY2hpbGRyZW5baV0pKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFsOworICAgIH0KIAotCVN0cmluZyBnZXRTU0xQb3J0KENvbmZpZ0NvbnRleHQgY2MpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCURvbWFpbiBkb21haW4gPSAoRG9tYWluKWNjLmdldFJvb3RDb25maWdCZWFuKCk7Ci0JCWFzc2VydFRydWUoZG9tYWluICE9IG51bGwpOwotCQlJaW9wTGlzdGVuZXIgc3NsTGlzdGVuZXIgPSBkb21haW4uZ2V0Q29uZmlncygpLgotCQkJZ2V0Q29uZmlnQnlOYW1lKCJzZXJ2ZXItY29uZmlnIikuZ2V0SWlvcFNlcnZpY2UoKS5nZXRJaW9wTGlzdGVuZXJCeUlkKCJTU0wiKTsKLQkJYXNzZXJ0VHJ1ZShzc2xMaXN0ZW5lciAhPSBudWxsKTsKLQkJcmV0dXJuIHNzbExpc3RlbmVyLmdldFBvcnQoKTsKLQl9CisgICAgU3RyaW5nIGdldFNTTFBvcnQoQ29uZmlnQ29udGV4dCBjYykgdGhyb3dzIEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgRG9tYWluIGRvbWFpbiA9IChEb21haW4pY2MuZ2V0Um9vdENvbmZpZ0JlYW4oKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShkb21haW4gIT0gbnVsbCk7CisgICAgICAgIElpb3BMaXN0ZW5lciBzc2xMaXN0ZW5lciA9IGRvbWFpbi5nZXRDb25maWdzKCkuCisgICAgICAgICAgICBnZXRDb25maWdCeU5hbWUoInNlcnZlci1jb25maWciKS5nZXRJaW9wU2VydmljZSgpLmdldElpb3BMaXN0ZW5lckJ5SWQoIlNTTCIpOworICAgICAgICBhc3NlcnRUcnVlKHNzbExpc3RlbmVyICE9IG51bGwpOworICAgICAgICByZXR1cm4gc3NsTGlzdGVuZXIuZ2V0UG9ydCgpOworICAgIH0KIAotCWJvb2xlYW4gaXNSZXNvbHZlKENvbmZpZ0NvbnRleHQgY2MpCi0JewotCQlyZXR1cm4gKChDb25maWdDb250ZXh0SW1wbCljYykuZ2V0Q29uZmlnQmVhbkludGVyY2VwdG9yKCkuaXNSZXNvbHZpbmdQYXRocygpOwotCX0KKyAgICBib29sZWFuIGlzUmVzb2x2ZShDb25maWdDb250ZXh0IGNjKQorICAgIHsKKyAgICAgICAgcmV0dXJuICgoQ29uZmlnQ29udGV4dEltcGwpY2MpLmdldENvbmZpZ0JlYW5JbnRlcmNlcHRvcigpLmlzUmVzb2x2aW5nUGF0aHMoKTsKKyAgICB9CiAKLQlDb25maWdCZWFuSW50ZXJjZXB0b3IgZ2V0SW50ZXJjZXB0b3IoQ29uZmlnQ29udGV4dCBjYykKLQl7Ci0JCXJldHVybiAoKENvbmZpZ0NvbnRleHRJbXBsKWNjKS5nZXRDb25maWdCZWFuSW50ZXJjZXB0b3IoKTsKLQl9CisgICAgQ29uZmlnQmVhbkludGVyY2VwdG9yIGdldEludGVyY2VwdG9yKENvbmZpZ0NvbnRleHQgY2MpCisgICAgeworICAgICAgICByZXR1cm4gKChDb25maWdDb250ZXh0SW1wbCljYykuZ2V0Q29uZmlnQmVhbkludGVyY2VwdG9yKCk7CisgICAgfQogCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKQorICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkKICAgICB7CiAgICAgICAgIExvZ0RvbWFpbnMuZ2V0TG9nZ2VyKEVFTG9nRG9tYWlucy5FRV9BRE1JTl9MT0dHRVIpOwogICAgIH0KQEAgLTI0NCwzOSArMjQ0LDM5IEBACiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotCQlTeXN0ZW0uc2V0UHJvcGVydHkoIlNTTC1wb3J0IiwgIjEwNjAiKTsKKyAgICAgICAgU3lzdGVtLnNldFByb3BlcnR5KCJTU0wtcG9ydCIsICIxMDYwIik7CiAKLQkJaW5pdFJ1bnRpbWVDb250ZXh0KCk7Ci0JCWluaXRBZG1pbkNvbnRleHQoKTsKKyAgICAgICAgaW5pdFJ1bnRpbWVDb250ZXh0KCk7CisgICAgICAgIGluaXRBZG1pbkNvbnRleHQoKTsKICAgICAgICAgZmluYWwgVGVzdFJ1bm5lciBydW5uZXI9IG5ldyBUZXN0UnVubmVyKCk7CiAgICAgICAgIGZpbmFsIFRlc3RSZXN1bHQgcmVzdWx0ID0gcnVubmVyLmRvUnVuKENvbmZpZ0NvbnRleHRJbXBsVGVzdC5zdWl0ZSgpLCBmYWxzZSk7CiAgICAgICAgIFN5c3RlbS5leGl0KHJlc3VsdC5lcnJvckNvdW50KCkgKyByZXN1bHQuZmFpbHVyZUNvdW50KCkpOwogICAgIH0KIAotCXN0YXRpYyBDb25maWdDb250ZXh0IHJ1bnRpbWVDdHggPSBudWxsOworICAgIHN0YXRpYyBDb25maWdDb250ZXh0IHJ1bnRpbWVDdHggPSBudWxsOwogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgaW5pdFJ1bnRpbWVDb250ZXh0KCkgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLQkJQ29uZmlnRW52aXJvbm1lbnQgY2UgPSBnZXRDb25maWdFbnZpcm9ubWVudCgpOwotCQlydW50aW1lQ3R4ID0gQ29uZmlnQ29udGV4dEZhY3RvcnkuY3JlYXRlQ29uZmlnQ29udGV4dChjZSk7CisgICAgICAgIENvbmZpZ0Vudmlyb25tZW50IGNlID0gZ2V0Q29uZmlnRW52aXJvbm1lbnQoKTsKKyAgICAgICAgcnVudGltZUN0eCA9IENvbmZpZ0NvbnRleHRGYWN0b3J5LmNyZWF0ZUNvbmZpZ0NvbnRleHQoY2UpOwogICAgIH0KIAotCXN0YXRpYyBDb25maWdDb250ZXh0IGFkbWluQ3R4ID0gbnVsbDsKKyAgICBzdGF0aWMgQ29uZmlnQ29udGV4dCBhZG1pbkN0eCA9IG51bGw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBpbml0QWRtaW5Db250ZXh0KCkgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLQkJQ29uZmlnRW52aXJvbm1lbnQgY2UgPSBnZXRDb25maWdFbnZpcm9ubWVudCgpOworICAgICAgICBDb25maWdFbnZpcm9ubWVudCBjZSA9IGdldENvbmZpZ0Vudmlyb25tZW50KCk7CiAgICAgICAgIGNlLmdldENvbmZpZ0JlYW5JbnRlcmNlcHRvcigpLnNldFJlc29sdmluZ1BhdGhzKGZhbHNlKTsKLQkJYWRtaW5DdHggPSBDb25maWdDb250ZXh0RmFjdG9yeS5jcmVhdGVDb25maWdDb250ZXh0KGNlKTsKKyAgICAgICAgYWRtaW5DdHggPSBDb25maWdDb250ZXh0RmFjdG9yeS5jcmVhdGVDb25maWdDb250ZXh0KGNlKTsKICAgICB9CiAKLQlzdGF0aWMgQ29uZmlnRW52aXJvbm1lbnQgZ2V0Q29uZmlnRW52aXJvbm1lbnQoKQotCXsKLQkJQ29uZmlnRW52aXJvbm1lbnQgY2UgPSBuZXcgQXBwc2VydmVyQ29uZmlnRW52aXJvbm1lbnRGYWN0b3J5KCkuCi0JCQlnZXRDb25maWdFbnZpcm9ubWVudCgpOwotCQljZS5zZXRVcmwoIkY6XFx0bXBcXGRvbWFpbi54bWwiKTsKKyAgICBzdGF0aWMgQ29uZmlnRW52aXJvbm1lbnQgZ2V0Q29uZmlnRW52aXJvbm1lbnQoKQorICAgIHsKKyAgICAgICAgQ29uZmlnRW52aXJvbm1lbnQgY2UgPSBuZXcgQXBwc2VydmVyQ29uZmlnRW52aXJvbm1lbnRGYWN0b3J5KCkuCisgICAgICAgICAgICBnZXRDb25maWdFbnZpcm9ubWVudCgpOworICAgICAgICBjZS5zZXRVcmwoIkY6XFx0bXBcXGRvbWFpbi54bWwiKTsKICAgICAgICAgY2Uuc2V0UmVhZE9ubHkoZmFsc2UpOwogICAgICAgICBjZS5zZXRDYWNoaW5nRW5hYmxlZChmYWxzZSk7CiAgICAgICAgIGNlLnNldFJvb3RDbGFzcygiY29tLnN1bi5lbnRlcnByaXNlLmNvbmZpZy5zZXJ2ZXJiZWFucy5Eb21haW4iKTsKICAgICAgICAgY2Uuc2V0SGFuZGxlcigiY29tLnN1bi5lbnRlcnByaXNlLmNvbmZpZy5zZXJ2ZXJiZWFucy5TZXJ2ZXJWYWxpZGF0aW9uSGFuZGxlciIpOwotCQlyZXR1cm4gY2U7Ci0JfQorICAgICAgICByZXR1cm4gY2U7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29yYmEvdGltZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NvcmJhL3RpbWVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjNkZWM3Yi4uOWFlYmNiMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29yYmEvdGltZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb3JiYS90aW1lci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNvcmJhIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9InRpbWVyIi8+ICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0idGltZXIiLz4gXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYnVpbGQuZGlyIiB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkLyR7bW9kdWxlfS8ke2FwcG5hbWV9Ii8+Ci0gICAgICAgCisKIAogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NvcmJhL3RpbWVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NvcmJhL3RpbWVyL2J1aWxkLnhtbAppbmRleCA3OTQwN2I4Li44NDM0NmE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb3JiYS90aW1lci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29yYmEvdGltZXIvYnVpbGQueG1sCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuUzFBU19IT01FfS9saWIvYXBwc2Vydi1ydC5qYXIiIC8+CiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi90ZXN0bmcuamFyIi8+CiAgICAgPC9wYXRoPgotICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5kaXJ9L2NsYXNzZXMiIC8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImNvbXBpbGUsIGJ1aWxkLmNsYXNzLmRpcj0ke2J1aWxkLmRpcn0vY2xhc3NlcyIvPgpAQCAtNTMsMTIgKzUzLDEyIEBACiAgICAgICAgICAgICBkZWJ1Zz0idHJ1ZSIgc291cmNlPSIxLjUiPgogICAgICAgICAgICAgPGNsYXNzcGF0aD4KICAgICAgICAgICAgICAgICA8cGF0aCByZWZpZD0iY29tcGlsZS5jbGFzc3BhdGgiIC8+Ci0gIAkgICAgPC9jbGFzc3BhdGg+CisgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YWM+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8cGF0aCBpZD0icnVuLmNsYXNzcGF0aCI+CiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtidWlsZC5kaXJ9L2NsYXNzZXMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NvcmJhL3RpbWVyL3NyYy90ZXN0L0FjdGl2YXRpb25TdWl0ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29yYmEvdGltZXIvc3JjL3Rlc3QvQWN0aXZhdGlvblN1aXRlLmphdmEKaW5kZXggMTg4MGEzZC4uMjQ1ODcwNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29yYmEvdGltZXIvc3JjL3Rlc3QvQWN0aXZhdGlvblN1aXRlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29yYmEvdGltZXIvc3JjL3Rlc3QvQWN0aXZhdGlvblN1aXRlLmphdmEKQEAgLTUxLDY4ICs1MSw2OCBAQAogCiBwdWJsaWMgY2xhc3MgQWN0aXZhdGlvblN1aXRlIHsKICAgICAvLyBUZXN0IHNldCB1cDoKLSAgICAvL1RpbWVyIGdyb3VwczogCi0gICAgLy8JZ2EgY29udGFpbnMgZ2IsIGdjCi0gICAgLy8JZ2IgY29udGFpbnMgZ2QKLSAgICAvLwlnYyBjb250YWlucyBnZAotICAgIC8vCWdkIGNvbnRhaW5zIGdlCi0gICAgLy8JZ2UgY29udGFpbnMgZ2MKKyAgICAvL1RpbWVyIGdyb3VwczoKKyAgICAvLyAgICBnYSBjb250YWlucyBnYiwgZ2MKKyAgICAvLyAgICBnYiBjb250YWlucyBnZAorICAgIC8vICAgIGdjIGNvbnRhaW5zIGdkCisgICAgLy8gICAgZ2QgY29udGFpbnMgZ2UKKyAgICAvLyAgICBnZSBjb250YWlucyBnYwogICAgIC8vCi0gICAgLy8JVGltZXJzIChpbiBncm91cHMpCi0gICAgLy8JZ2EgY29udGFpbnMgdDEKLSAgICAvLwlnYiBjb250YWlucyB0MiwgdDMKKyAgICAvLyAgICBUaW1lcnMgKGluIGdyb3VwcykKKyAgICAvLyAgICBnYSBjb250YWlucyB0MQorICAgIC8vICAgIGdiIGNvbnRhaW5zIHQyLCB0MwogICAgIC8vICBnYyBjb250YWlucyB0NAogICAgIC8vICBnZCBjb250YWlucyB0NSwgdDYKICAgICAvLyAgZ2UgY29udGFpbnMgdDcsIHQ4CiAgICAgLy8KICAgICAvLyBBbGwgZGVzY3JpcHRpb25zIGFyZSB0aGUgc2FtZSBhcyB0aGUgbmFtZXMKICAgICAvLwotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgdGZOYW1lID0gIlRGQWN0aXZhdGlvbiIgOwogCiAgICAgcHJpdmF0ZSBMaXN0PFBhaXI8U3RyaW5nLExpc3Q8U3RyaW5nPj4+IGRhdGEgPSBhc0xpc3QoCi0JbWtQYWlyKCAiZ2EiLCAiZ2IiLCAidDEiICksCi0JbWtQYWlyKCAiZ2IiLCAiZ2QiLCAidDIiLCAidDMiICksCi0JbWtQYWlyKCAiZ2MiLCAiZ2QiLCAidDQiICksCi0JbWtQYWlyKCAiZ2QiLCAiZ2UiLCAidDUiLCAidDYiICksCi0JbWtQYWlyKCAiZ2UiLCAiZ2MiLCAidDciLCAidDgiICkgKSA7CisgICAgbWtQYWlyKCAiZ2EiLCAiZ2IiLCAidDEiICksCisgICAgbWtQYWlyKCAiZ2IiLCAiZ2QiLCAidDIiLCAidDMiICksCisgICAgbWtQYWlyKCAiZ2MiLCAiZ2QiLCAidDQiICksCisgICAgbWtQYWlyKCAiZ2QiLCAiZ2UiLCAidDUiLCAidDYiICksCisgICAgbWtQYWlyKCAiZ2UiLCAiZ2MiLCAidDciLCAidDgiICkgKSA7CiAKICAgICBwcml2YXRlIExpc3Q8U3RyaW5nPiB0MV90OCA9IGFzTGlzdCgKLQkidDEiLCAidDIiLCAidDMiLCAidDQiLCAidDUiLCAidDYiLCAidDciLCAidDgiICkgOworICAgICJ0MSIsICJ0MiIsICJ0MyIsICJ0NCIsICJ0NSIsICJ0NiIsICJ0NyIsICJ0OCIgKSA7CiAgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gdDJfdDggPSBhc0xpc3QoCi0JInQyIiwgInQzIiwgInQ0IiwgInQ1IiwgInQ2IiwgInQ3IiwgInQ4IiApIDsKKyAgICAidDIiLCAidDMiLCAidDQiLCAidDUiLCAidDYiLCAidDciLCAidDgiICkgOwogICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IHQ0X3Q4ID0gYXNMaXN0KAotCSJ0NCIsICJ0NSIsICJ0NiIsICJ0NyIsICJ0OCIgKSA7CisgICAgInQ0IiwgInQ1IiwgInQ2IiwgInQ3IiwgInQ4IiApIDsKIAogICAgIC8vIExpc3Q8UGFpcjxMaXN0PFN0cmluZz4sTGlzdDxTdHJpbmc+Pj4KICAgICAvLyBmb3IgZWFjaCBlbGVtZW50IG9mIGxpc3Q6CiAgICAgLy8gZmlyc3QgaXMgQ29udHJvbGxhYmxlcyB0byBlbmFibGUsIHNlY29uZCBpcyBleHBlY3RlZCBhY3RpdmUgc2V0CiAgICAgLy8KICAgICBwcml2YXRlIExpc3Q8UGFpcjxMaXN0PFN0cmluZz4sTGlzdDxTdHJpbmc+Pj4gdGVzdERhdGEgPSBhc0xpc3QoCi0JbWtQTGlzdCggYXNMaXN0KCAidDEiLCAidDMiICksIGFzTGlzdCggInQxIiwgInQzIiApKSwKLQlta1BMaXN0KCBhc0xpc3QoICJnYSIgKSwgdDFfdDggKSwKLQlta1BMaXN0KCBhc0xpc3QoICJnYiIgKSwgdDJfdDggKSwKLQlta1BMaXN0KCBhc0xpc3QoICJnYyIgKSwgdDRfdDggKSwKLQlta1BMaXN0KCBhc0xpc3QoICJnZCIgKSwgdDRfdDggKSwKLQlta1BMaXN0KCBhc0xpc3QoICJnZSIgKSwgdDRfdDggKSwKLQlta1BMaXN0KCBhc0xpc3QoICJnZSIsICJ0MSIsICJ0MyIgKSwgCi0JICAgIGFzTGlzdCggInQxIiwgInQzIiwgInQ0IiwgInQ1IiwgInQ2IiwgInQ3IiwgInQ4IiApKSwKLQlta1BMaXN0KCBhc0xpc3QoICJnYiIsICJnYyIgKSwgdDJfdDggKSkgOworICAgIG1rUExpc3QoIGFzTGlzdCggInQxIiwgInQzIiApLCBhc0xpc3QoICJ0MSIsICJ0MyIgKSksCisgICAgbWtQTGlzdCggYXNMaXN0KCAiZ2EiICksIHQxX3Q4ICksCisgICAgbWtQTGlzdCggYXNMaXN0KCAiZ2IiICksIHQyX3Q4ICksCisgICAgbWtQTGlzdCggYXNMaXN0KCAiZ2MiICksIHQ0X3Q4ICksCisgICAgbWtQTGlzdCggYXNMaXN0KCAiZ2QiICksIHQ0X3Q4ICksCisgICAgbWtQTGlzdCggYXNMaXN0KCAiZ2UiICksIHQ0X3Q4ICksCisgICAgbWtQTGlzdCggYXNMaXN0KCAiZ2UiLCAidDEiLCAidDMiICksCisgICAgICAgIGFzTGlzdCggInQxIiwgInQzIiwgInQ0IiwgInQ1IiwgInQ2IiwgInQ3IiwgInQ4IiApKSwKKyAgICBta1BMaXN0KCBhc0xpc3QoICJnYiIsICJnYyIgKSwgdDJfdDggKSkgOwogCi0gICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gZXZJbiA9IGFzTGlzdCggCi0JInQxPDEwIiwgInQxPjEyMCIsIAotCSJ0MjwxMyIsICJ0MzwxNSIsICJ0MTwyMSIsICJ0MT40IiwgInQzPjM0IiwgInQyPjI3IiwKLQkidDE8MTIiLCAidDE8MjMiLCAidDE8MzEiLCAidDE+MjQiLCAidDE+OCIsICJ0MT45MSIgKSA7CisgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gZXZJbiA9IGFzTGlzdCgKKyAgICAidDE8MTAiLCAidDE+MTIwIiwKKyAgICAidDI8MTMiLCAidDM8MTUiLCAidDE8MjEiLCAidDE+NCIsICJ0Mz4zNCIsICJ0Mj4yNyIsCisgICAgInQxPDEyIiwgInQxPDIzIiwgInQxPDMxIiwgInQxPjI0IiwgInQxPjgiLCAidDE+OTEiICkgOwogCiAgICAgLy8gVGltaW5nczoKICAgICAvLyB0MSAyMCAyNSA1NSA4NiAxODkKICAgICAvLyB0MiAxMTQKICAgICAvLyB0MyA3NAotICAgIC8vIAotICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IGV2T3V0ID0gYXNMaXN0KCAKLQkidDE8IiwgInQxPiIsIAotCSJ0MzwiLCAidDE8IiwgInQxPiIsICJ0Mz4iLCAKLQkidDE8IiwgInQxPCIsICJ0MTwiLCAidDE+IiwgInQxPiIsICJ0MT4iICkgOworICAgIC8vCisgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gZXZPdXQgPSBhc0xpc3QoCisgICAgInQxPCIsICJ0MT4iLAorICAgICJ0MzwiLCAidDE8IiwgInQxPiIsICJ0Mz4iLAorICAgICJ0MTwiLCAidDE8IiwgInQxPCIsICJ0MT4iLCAidDE+IiwgInQxPiIgKSA7CiAgICAgcHJpdmF0ZSBTdHJpbmcgY29udHJvbGxlck5hbWUgPSAiVGVzdENvbnRyb2xsZXIiIDsKIAogICAgIHByaXZhdGUgVGltZXJGYWN0b3J5IHRmIDsKQEAgLTEyMiwzMjYgKzEyMiwzMjYgQEAKICAgICBwcml2YXRlIE15VGltZXJFdmVudEhhbmRsZXIgaDEgOwogICAgIHByaXZhdGUgTXlUaW1lckV2ZW50SGFuZGxlciBoMiA7CiAgICAgcHJpdmF0ZSBUaW1lckV2ZW50Q29udHJvbGxlciBjb250cm9sbGVyIDsKLSAgICAKKwogICAgIHByaXZhdGUgUGFpcjxTdHJpbmcsTGlzdDxTdHJpbmc+PiBta1BhaXIoIFN0cmluZyBrZXksIFN0cmluZy4uLiB2YWx1ZXMgKSB7Ci0JcmV0dXJuIG5ldyBQYWlyPFN0cmluZyxMaXN0PFN0cmluZz4+KAotCSAgICBrZXksIGFzTGlzdCggdmFsdWVzICkgKSA7CisgICAgcmV0dXJuIG5ldyBQYWlyPFN0cmluZyxMaXN0PFN0cmluZz4+KAorICAgICAgICBrZXksIGFzTGlzdCggdmFsdWVzICkgKSA7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBQYWlyPExpc3Q8U3RyaW5nPixMaXN0PFN0cmluZz4+IG1rUExpc3QoIExpc3Q8U3RyaW5nPiBmaXJzdCwKLQlMaXN0PFN0cmluZz4gc2Vjb25kICkgewotCQotCXJldHVybiBuZXcgUGFpcjxMaXN0PFN0cmluZz4sTGlzdDxTdHJpbmc+PigKLQkgICAgZmlyc3QsIHNlY29uZCApIDsKKyAgICBMaXN0PFN0cmluZz4gc2Vjb25kICkgeworCisgICAgcmV0dXJuIG5ldyBQYWlyPExpc3Q8U3RyaW5nPixMaXN0PFN0cmluZz4+KAorICAgICAgICBmaXJzdCwgc2Vjb25kICkgOwogICAgIH0KIAogICAgIHByaXZhdGUgPFQ+IFNldDxUPiBhc1NldCggVC4uLiBhcmdzICkgewotCVNldDxUPiByZXN1bHQgPSBuZXcgSGFzaFNldDxUPigpIDsKLQlmb3IgKFQgdCA6IGFyZ3MpIAotCSAgICByZXN1bHQuYWRkKCB0ICkgOwotCXJldHVybiByZXN1bHQgOworICAgIFNldDxUPiByZXN1bHQgPSBuZXcgSGFzaFNldDxUPigpIDsKKyAgICBmb3IgKFQgdCA6IGFyZ3MpCisgICAgICAgIHJlc3VsdC5hZGQoIHQgKSA7CisgICAgcmV0dXJuIHJlc3VsdCA7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBDb250cm9sbGFibGUgbWFrZU9yR2V0Q29udHJvbGxhYmxlKCBTdHJpbmcgc3RyICkgewotCWlmIChzdHIuY2hhckF0KDApPT0nZycpIHsKLQkgICAgLy8gTWFrZSBhIFRpbWVyR3JvdXAKLQkgICAgVGltZXJHcm91cCB0ZyA9IHRmLnRpbWVyR3JvdXBzKCkuZ2V0KCBzdHIgKSA7Ci0JICAgIGlmICh0ZyA9PSBudWxsKSB7Ci0JCXRnID0gdGYubWFrZVRpbWVyR3JvdXAoIHN0ciwgc3RyICkgOwotCQl0aW1lckdyb3Vwcy5hZGQoIHRnICkgOwotCSAgICB9Ci0JICAgIHJldHVybiB0ZyA7Ci0JfSBlbHNlIGlmIChzdHIuY2hhckF0KDApPT0ndCcpIHsKLQkgICAgLy8gTWFrZSBhIFRpbWVyCi0JICAgIFRpbWVyIHQgPSB0Zi50aW1lcnMoKS5nZXQoIHN0ciApIDsKLQkgICAgaWYgKHQgPT0gbnVsbCkgewotCQl0ID0gdGYubWFrZVRpbWVyKCBzdHIsIHN0ciApIDsKLQkJdGltZXJzLmFkZCggdCApIDsKLQkgICAgfQotCSAgICByZXR1cm4gdCA7Ci0JfSBlbHNlIHsKLQkgICAgLy8gZXJyb3IgaW4gdGVzdCBkYXRhCi0JICAgIEFzc2VydC5mYWlsKCAiQmFkIGRhdGEgc3RyaW5nIiApIDsKLQkgICAgcmV0dXJuIG51bGwgOwotCX0KKyAgICBpZiAoc3RyLmNoYXJBdCgwKT09J2cnKSB7CisgICAgICAgIC8vIE1ha2UgYSBUaW1lckdyb3VwCisgICAgICAgIFRpbWVyR3JvdXAgdGcgPSB0Zi50aW1lckdyb3VwcygpLmdldCggc3RyICkgOworICAgICAgICBpZiAodGcgPT0gbnVsbCkgeworICAgICAgICB0ZyA9IHRmLm1ha2VUaW1lckdyb3VwKCBzdHIsIHN0ciApIDsKKyAgICAgICAgdGltZXJHcm91cHMuYWRkKCB0ZyApIDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGcgOworICAgIH0gZWxzZSBpZiAoc3RyLmNoYXJBdCgwKT09J3QnKSB7CisgICAgICAgIC8vIE1ha2UgYSBUaW1lcgorICAgICAgICBUaW1lciB0ID0gdGYudGltZXJzKCkuZ2V0KCBzdHIgKSA7CisgICAgICAgIGlmICh0ID09IG51bGwpIHsKKyAgICAgICAgdCA9IHRmLm1ha2VUaW1lciggc3RyLCBzdHIgKSA7CisgICAgICAgIHRpbWVycy5hZGQoIHQgKSA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHQgOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIGVycm9yIGluIHRlc3QgZGF0YQorICAgICAgICBBc3NlcnQuZmFpbCggIkJhZCBkYXRhIHN0cmluZyIgKSA7CisgICAgICAgIHJldHVybiBudWxsIDsKKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBDb250cm9sbGFibGUgZ2V0Q29udHJvbGxhYmxlKCBTdHJpbmcgc3RyICkgewotCWlmIChzdHIuY2hhckF0KDApPT0nZycpIHsKLQkgICAgLy8gR2V0IGEgVGltZXJHcm91cAotCSAgICBUaW1lckdyb3VwIHRnID0gdGYudGltZXJHcm91cHMoKS5nZXQoIHN0ciApIDsKLQkgICAgQXNzZXJ0LmFzc2VydFRydWUoIHRnICE9IG51bGwgKSA7Ci0JICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIHRnLm5hbWUoKSwgc3RyICkgOwotCSAgICByZXR1cm4gdGcgOwotCX0gZWxzZSBpZiAoc3RyLmNoYXJBdCgwKT09J3QnKSB7Ci0JICAgIC8vIEdldCBhIFRpbWVyCi0JICAgIFRpbWVyIHQgPSB0Zi50aW1lcnMoKS5nZXQoIHN0ciApIDsKLQkgICAgQXNzZXJ0LmFzc2VydFRydWUoIHQgIT0gbnVsbCApIDsKLQkgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggdC5uYW1lKCksIHN0ciApIDsKLQkgICAgcmV0dXJuIHQgOwotCX0gZWxzZSB7Ci0JICAgIC8vIGVycm9yIGluIHRlc3QgZGF0YQotCSAgICBBc3NlcnQuZmFpbCggIkJhZCBkYXRhIHN0cmluZyIgKSA7Ci0JICAgIHJldHVybiBudWxsIDsKLQl9CisgICAgaWYgKHN0ci5jaGFyQXQoMCk9PSdnJykgeworICAgICAgICAvLyBHZXQgYSBUaW1lckdyb3VwCisgICAgICAgIFRpbWVyR3JvdXAgdGcgPSB0Zi50aW1lckdyb3VwcygpLmdldCggc3RyICkgOworICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggdGcgIT0gbnVsbCApIDsKKyAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggdGcubmFtZSgpLCBzdHIgKSA7CisgICAgICAgIHJldHVybiB0ZyA7CisgICAgfSBlbHNlIGlmIChzdHIuY2hhckF0KDApPT0ndCcpIHsKKyAgICAgICAgLy8gR2V0IGEgVGltZXIKKyAgICAgICAgVGltZXIgdCA9IHRmLnRpbWVycygpLmdldCggc3RyICkgOworICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggdCAhPSBudWxsICkgOworICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCB0Lm5hbWUoKSwgc3RyICkgOworICAgICAgICByZXR1cm4gdCA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gZXJyb3IgaW4gdGVzdCBkYXRhCisgICAgICAgIEFzc2VydC5mYWlsKCAiQmFkIGRhdGEgc3RyaW5nIiApIDsKKyAgICAgICAgcmV0dXJuIG51bGwgOworICAgIH0KICAgICB9CiAKICAgICBAQ29uZmlndXJhdGlvbiggYmVmb3JlVGVzdCA9IHRydWUgKQogICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgewogCi0JdGYgPSBUaW1lckZhY3RvcnlCdWlsZGVyLm1ha2UoIHRmTmFtZSwgdGZOYW1lICkgOwotCXRpbWVycyA9IG5ldyBBcnJheUxpc3Q8VGltZXI+KCkgOwotCXRpbWVyR3JvdXBzID0gbmV3IEFycmF5TGlzdDxUaW1lckdyb3VwPigpIDsKLQl0aW1lckdyb3Vwcy5hZGQoIHRmICkgOworICAgIHRmID0gVGltZXJGYWN0b3J5QnVpbGRlci5tYWtlKCB0Zk5hbWUsIHRmTmFtZSApIDsKKyAgICB0aW1lcnMgPSBuZXcgQXJyYXlMaXN0PFRpbWVyPigpIDsKKyAgICB0aW1lckdyb3VwcyA9IG5ldyBBcnJheUxpc3Q8VGltZXJHcm91cD4oKSA7CisgICAgdGltZXJHcm91cHMuYWRkKCB0ZiApIDsKIAotCWZvciAoUGFpcjxTdHJpbmcsTGlzdDxTdHJpbmc+PiBlbGVtIDogZGF0YSkgewotCSAgICBTdHJpbmcgaGVhZCA9IGVsZW0uZmlyc3QoKSA7Ci0JICAgIExpc3Q8U3RyaW5nPiB0YWlsID0gZWxlbS5zZWNvbmQoKSA7Ci0JICAgIENvbnRyb2xsYWJsZSBjb24gPSBtYWtlT3JHZXRDb250cm9sbGFibGUoIGhlYWQgKSA7Ci0JICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjb24gaW5zdGFuY2VvZiBUaW1lckdyb3VwICkgOwotCSAgICBUaW1lckdyb3VwIGNvbnRhaW5lciA9IFRpbWVyR3JvdXAuY2xhc3MuY2FzdCggY29uICkgOwotCSAgICBmb3IgKFN0cmluZyBzdHIgOiB0YWlsKSB7Ci0JCUNvbnRyb2xsYWJsZSBjMiA9IG1ha2VPckdldENvbnRyb2xsYWJsZSggc3RyICkgOwotCQljb250YWluZXIuYWRkKCBjMiApIDsKLQkgICAgfQotCX0KKyAgICBmb3IgKFBhaXI8U3RyaW5nLExpc3Q8U3RyaW5nPj4gZWxlbSA6IGRhdGEpIHsKKyAgICAgICAgU3RyaW5nIGhlYWQgPSBlbGVtLmZpcnN0KCkgOworICAgICAgICBMaXN0PFN0cmluZz4gdGFpbCA9IGVsZW0uc2Vjb25kKCkgOworICAgICAgICBDb250cm9sbGFibGUgY29uID0gbWFrZU9yR2V0Q29udHJvbGxhYmxlKCBoZWFkICkgOworICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY29uIGluc3RhbmNlb2YgVGltZXJHcm91cCApIDsKKyAgICAgICAgVGltZXJHcm91cCBjb250YWluZXIgPSBUaW1lckdyb3VwLmNsYXNzLmNhc3QoIGNvbiApIDsKKyAgICAgICAgZm9yIChTdHJpbmcgc3RyIDogdGFpbCkgeworICAgICAgICBDb250cm9sbGFibGUgYzIgPSBtYWtlT3JHZXRDb250cm9sbGFibGUoIHN0ciApIDsKKyAgICAgICAgY29udGFpbmVyLmFkZCggYzIgKSA7CisgICAgICAgIH0KKyAgICB9CiAKLQloMSA9IG5ldyBNeVRpbWVyRXZlbnRIYW5kbGVyKCAiaDEiICkgOwotCWgyID0gbmV3IE15VGltZXJFdmVudEhhbmRsZXIoICJoMiIgKSA7Ci0JY29udHJvbGxlciA9IHRmLm1ha2VDb250cm9sbGVyKCBjb250cm9sbGVyTmFtZSApIDsKKyAgICBoMSA9IG5ldyBNeVRpbWVyRXZlbnRIYW5kbGVyKCAiaDEiICkgOworICAgIGgyID0gbmV3IE15VGltZXJFdmVudEhhbmRsZXIoICJoMiIgKSA7CisgICAgY29udHJvbGxlciA9IHRmLm1ha2VDb250cm9sbGVyKCBjb250cm9sbGVyTmFtZSApIDsKICAgICB9CiAKICAgICBwcml2YXRlIDxUIGV4dGVuZHMgQ29udHJvbGxhYmxlPiB2b2lkIGNoZWNrTGlzdCggTGlzdDw/IGV4dGVuZHMgVD4gbGlzdCwKLQlNYXA8U3RyaW5nLD8gZXh0ZW5kcyBUPiBtYXAgKSB7CisgICAgTWFwPFN0cmluZyw/IGV4dGVuZHMgVD4gbWFwICkgewogCi0JQXNzZXJ0LmFzc2VydEVxdWFscyggbGlzdC5zaXplKCksIG1hcC5zaXplKCkgKSA7Ci0JZm9yIChUIHQgOiBsaXN0KSB7Ci0JICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIHQsIG1hcC5nZXQoIHQubmFtZSgpICkgKSA7Ci0JfQorICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIGxpc3Quc2l6ZSgpLCBtYXAuc2l6ZSgpICkgOworICAgIGZvciAoVCB0IDogbGlzdCkgeworICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCB0LCBtYXAuZ2V0KCB0Lm5hbWUoKSApICkgOworICAgIH0KICAgICB9CiAKIAogICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCB2YWxpZGF0ZSgpIHsKLQljaGVja0xpc3QoIHRpbWVycywgdGYudGltZXJzKCkgKSA7Ci0JY2hlY2tMaXN0KCB0aW1lckdyb3VwcywgdGYudGltZXJHcm91cHMoKSApIDsKKyAgICBjaGVja0xpc3QoIHRpbWVycywgdGYudGltZXJzKCkgKSA7CisgICAgY2hlY2tMaXN0KCB0aW1lckdyb3VwcywgdGYudGltZXJHcm91cHMoKSApIDsKIAotCWZvciAoUGFpcjxTdHJpbmcsTGlzdDxTdHJpbmc+PiBlbGVtIDogZGF0YSkgewotCSAgICBTdHJpbmcgaGVhZCA9IGVsZW0uZmlyc3QoKSA7Ci0JICAgIExpc3Q8U3RyaW5nPiB0YWlsID0gZWxlbS5zZWNvbmQoKSA7Ci0JICAgIENvbnRyb2xsYWJsZSBjb24gPSBnZXRDb250cm9sbGFibGUoIGhlYWQgKSA7Ci0JICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjb24gaW5zdGFuY2VvZiBUaW1lckdyb3VwICkgOwotCSAgICBUaW1lckdyb3VwIGNvbnRhaW5lciA9IFRpbWVyR3JvdXAuY2xhc3MuY2FzdCggY29uICkgOwotCSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY29udGFpbmVyLmNvbnRlbnRzKCkuc2l6ZSgpID09IHRhaWwuc2l6ZSgpICkgOwotCSAgICBmb3IgKFN0cmluZyBzdHIgOiB0YWlsKSB7Ci0JCUNvbnRyb2xsYWJsZSBjMiA9IGdldENvbnRyb2xsYWJsZSggc3RyICkgOwotCQlBc3NlcnQuYXNzZXJ0VHJ1ZSggY29udGFpbmVyLmNvbnRlbnRzKCkuY29udGFpbnMoIGMyICkgKSA7Ci0JICAgIH0KLQl9CisgICAgZm9yIChQYWlyPFN0cmluZyxMaXN0PFN0cmluZz4+IGVsZW0gOiBkYXRhKSB7CisgICAgICAgIFN0cmluZyBoZWFkID0gZWxlbS5maXJzdCgpIDsKKyAgICAgICAgTGlzdDxTdHJpbmc+IHRhaWwgPSBlbGVtLnNlY29uZCgpIDsKKyAgICAgICAgQ29udHJvbGxhYmxlIGNvbiA9IGdldENvbnRyb2xsYWJsZSggaGVhZCApIDsKKyAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGNvbiBpbnN0YW5jZW9mIFRpbWVyR3JvdXAgKSA7CisgICAgICAgIFRpbWVyR3JvdXAgY29udGFpbmVyID0gVGltZXJHcm91cC5jbGFzcy5jYXN0KCBjb24gKSA7CisgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjb250YWluZXIuY29udGVudHMoKS5zaXplKCkgPT0gdGFpbC5zaXplKCkgKSA7CisgICAgICAgIGZvciAoU3RyaW5nIHN0ciA6IHRhaWwpIHsKKyAgICAgICAgQ29udHJvbGxhYmxlIGMyID0gZ2V0Q29udHJvbGxhYmxlKCBzdHIgKSA7CisgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjb250YWluZXIuY29udGVudHMoKS5jb250YWlucyggYzIgKSApIDsKKyAgICAgICAgfQorICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIFNldDxDb250cm9sbGFibGU+IG1ha2VDb250cm9sbGFibGVTZXQoIExpc3Q8U3RyaW5nPiBzdHJzICkgewotCVNldDxDb250cm9sbGFibGU+IHJlc3VsdCA9IG5ldyBIYXNoU2V0PENvbnRyb2xsYWJsZT4oKSA7Ci0JZm9yIChTdHJpbmcgc3RyIDogc3RycykgewotCSAgICBDb250cm9sbGFibGUgYyA9IGdldENvbnRyb2xsYWJsZSggc3RyICkgOwotCSAgICByZXN1bHQuYWRkKCBjICkgOwotCX0KLQotCXJldHVybiByZXN1bHQgOworICAgIFNldDxDb250cm9sbGFibGU+IHJlc3VsdCA9IG5ldyBIYXNoU2V0PENvbnRyb2xsYWJsZT4oKSA7CisgICAgZm9yIChTdHJpbmcgc3RyIDogc3RycykgeworICAgICAgICBDb250cm9sbGFibGUgYyA9IGdldENvbnRyb2xsYWJsZSggc3RyICkgOworICAgICAgICByZXN1bHQuYWRkKCBjICkgOwogICAgIH0KLSAgICAKKworICAgIHJldHVybiByZXN1bHQgOworICAgIH0KKwogICAgIHByaXZhdGUgdm9pZCBlbmFibGVDb250cm9sbGFibGVzKCBTZXQ8Q29udHJvbGxhYmxlPiBjb25zICkgewotCWZvciAoQ29udHJvbGxhYmxlIGMgOiBjb25zKSAKLQkgICAgYy5lbmFibGUoKSA7CisgICAgZm9yIChDb250cm9sbGFibGUgYyA6IGNvbnMpCisgICAgICAgIGMuZW5hYmxlKCkgOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkaXNhYmxlQWxsQ29udHJvbGxhYmxlcygpIHsKLQlmb3IgKENvbnRyb2xsYWJsZSBjIDogdGYuY29udGVudHMoKSkKLQkgICAgYy5kaXNhYmxlKCkgOworICAgIGZvciAoQ29udHJvbGxhYmxlIGMgOiB0Zi5jb250ZW50cygpKQorICAgICAgICBjLmRpc2FibGUoKSA7CiAgICAgfQogCiAgICAgQFRlc3QoKQogICAgIHB1YmxpYyB2b2lkIHRlc3RUaW1lckVuYWJsZSgpIHsKLQlmb3IgKFBhaXI8TGlzdDxTdHJpbmc+LExpc3Q8U3RyaW5nPj4gcGFpciA6IHRlc3REYXRhKSB7Ci0JICAgIGRpc2FibGVBbGxDb250cm9sbGFibGVzKCkgOwotCSAgICBTZXQ8Q29udHJvbGxhYmxlPiB0ZHMgPSBtYWtlQ29udHJvbGxhYmxlU2V0KCBwYWlyLmZpcnN0KCkgKSA7Ci0JICAgIFNldDxDb250cm9sbGFibGU+IGVycyA9IG1ha2VDb250cm9sbGFibGVTZXQoIHBhaXIuc2Vjb25kKCkgKSA7Ci0JICAgIGVuYWJsZUNvbnRyb2xsYWJsZXMoIHRkcyApIDsKLQkgICAgU2V0PFRpbWVyPiBhcnMgPSB0Zi5hY3RpdmVTZXQoKSA7Ci0JICAgIEFzc2VydC5hc3NlcnRUcnVlKCBlcnMuZXF1YWxzKCBhcnMgKSApIDsKLQl9Ci0JZGlzYWJsZUFsbENvbnRyb2xsYWJsZXMoKSA7CisgICAgZm9yIChQYWlyPExpc3Q8U3RyaW5nPixMaXN0PFN0cmluZz4+IHBhaXIgOiB0ZXN0RGF0YSkgeworICAgICAgICBkaXNhYmxlQWxsQ29udHJvbGxhYmxlcygpIDsKKyAgICAgICAgU2V0PENvbnRyb2xsYWJsZT4gdGRzID0gbWFrZUNvbnRyb2xsYWJsZVNldCggcGFpci5maXJzdCgpICkgOworICAgICAgICBTZXQ8Q29udHJvbGxhYmxlPiBlcnMgPSBtYWtlQ29udHJvbGxhYmxlU2V0KCBwYWlyLnNlY29uZCgpICkgOworICAgICAgICBlbmFibGVDb250cm9sbGFibGVzKCB0ZHMgKSA7CisgICAgICAgIFNldDxUaW1lcj4gYXJzID0gdGYuYWN0aXZlU2V0KCkgOworICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggZXJzLmVxdWFscyggYXJzICkgKSA7CisgICAgfQorICAgIGRpc2FibGVBbGxDb250cm9sbGFibGVzKCkgOwogICAgIH0KIAogICAgIHByaXZhdGUgY2xhc3MgTXlUaW1lckV2ZW50SGFuZGxlciBleHRlbmRzIE5hbWVkQmFzZSBpbXBsZW1lbnRzIFRpbWVyRXZlbnRIYW5kbGVyIHsKLQlMaXN0PFRpbWVyRXZlbnQ+IGV2ZW50cyA7CisgICAgTGlzdDxUaW1lckV2ZW50PiBldmVudHMgOwogCi0JcHVibGljIE15VGltZXJFdmVudEhhbmRsZXIoIFN0cmluZyBuYW1lICkgewotCSAgICBzdXBlciggdGYsIG5hbWUgKSA7Ci0JICAgIGV2ZW50cyA9IG5ldyBBcnJheUxpc3Q8VGltZXJFdmVudD4oKSA7Ci0JfQotCi0JcHVibGljIHZvaWQgbm90aWZ5KCBUaW1lckV2ZW50IGV2ZW50ICkgewotCSAgICBldmVudHMuYWRkKCBldmVudCApIDsKLQl9Ci0KLQlwdWJsaWMgTGlzdDxUaW1lckV2ZW50PiBldmVudHMoKSB7Ci0JICAgIHJldHVybiBldmVudHMgOwotCX0KKyAgICBwdWJsaWMgTXlUaW1lckV2ZW50SGFuZGxlciggU3RyaW5nIG5hbWUgKSB7CisgICAgICAgIHN1cGVyKCB0ZiwgbmFtZSApIDsKKyAgICAgICAgZXZlbnRzID0gbmV3IEFycmF5TGlzdDxUaW1lckV2ZW50PigpIDsKICAgICB9CiAKLSAgICBwcml2YXRlIFBhaXI8SW50ZWdlcixQYWlyPFRpbWVyLFRpbWVyRXZlbnQuVGltZXJFdmVudFR5cGU+PiBwYXJzZUV2ZW50RGVzY3JpcHRpb24oIAotCVN0cmluZyBzdHIgKSB7CisgICAgcHVibGljIHZvaWQgbm90aWZ5KCBUaW1lckV2ZW50IGV2ZW50ICkgeworICAgICAgICBldmVudHMuYWRkKCBldmVudCApIDsKKyAgICB9CiAKLQlpZiAoc3RyLmxlbmd0aCgpIDwgMykKLQkgICAgQXNzZXJ0LmZhaWwoKSA7Ci0JU3RyaW5nIHRuYW1lID0gc3RyLnN1YnN0cmluZyggMCwgMiApIDsKLQljaGFyIGNoID0gc3RyLmNoYXJBdCggMiApIDsKLQlTdHJpbmcgdGltZVN0ciA9IHN0ci5zdWJzdHJpbmcoIDMgKSA7Ci0JaW50IGRlbGF5ID0gMDsKLQlpZiAoKHRpbWVTdHIgIT0gbnVsbCkgJiYgKHRpbWVTdHIubGVuZ3RoKCkgPiAwKSkKLQkgICAgZGVsYXkgPSBJbnRlZ2VyLnBhcnNlSW50KCB0aW1lU3RyICkgOwotCUNvbnRyb2xsYWJsZSBjID0gZ2V0Q29udHJvbGxhYmxlKCB0bmFtZSApIDsKLQlBc3NlcnQuYXNzZXJ0VHJ1ZSggYyAhPSBudWxsICYmIGMgaW5zdGFuY2VvZiBUaW1lciApIDsKLQlUaW1lciB0ID0gVGltZXIuY2xhc3MuY2FzdCggYyApIDsKLQlUaW1lckV2ZW50LlRpbWVyRXZlbnRUeXBlIGV0eXBlID0gbnVsbCA7Ci0JaWYgKGNoID09ICc8JykgCi0JICAgIGV0eXBlID0gVGltZXJFdmVudC5UaW1lckV2ZW50VHlwZS5FTlRFUiA7Ci0JZWxzZSBpZiAoY2ggPT0gJz4nKQotCSAgICBldHlwZSA9IFRpbWVyRXZlbnQuVGltZXJFdmVudFR5cGUuRVhJVCA7Ci0JZWxzZSAKLQkgICAgQXNzZXJ0LmZhaWwoKSA7CisgICAgcHVibGljIExpc3Q8VGltZXJFdmVudD4gZXZlbnRzKCkgeworICAgICAgICByZXR1cm4gZXZlbnRzIDsKKyAgICB9CisgICAgfQogCi0JUGFpcjxUaW1lcixUaW1lckV2ZW50LlRpbWVyRXZlbnRUeXBlPiByZXMxID0gCi0JICAgIG5ldyBQYWlyPFRpbWVyLFRpbWVyRXZlbnQuVGltZXJFdmVudFR5cGU+KCB0LCBldHlwZSApIDsKLQlQYWlyPEludGVnZXIsUGFpcjxUaW1lcixUaW1lckV2ZW50LlRpbWVyRXZlbnRUeXBlPj4gcmVzdWx0ID0gCi0JICAgIG5ldyBQYWlyPEludGVnZXIsUGFpcjxUaW1lcixUaW1lckV2ZW50LlRpbWVyRXZlbnRUeXBlPj4oIGRlbGF5LCByZXMxICkgOworICAgIHByaXZhdGUgUGFpcjxJbnRlZ2VyLFBhaXI8VGltZXIsVGltZXJFdmVudC5UaW1lckV2ZW50VHlwZT4+IHBhcnNlRXZlbnREZXNjcmlwdGlvbigKKyAgICBTdHJpbmcgc3RyICkgewogCi0JcmV0dXJuIHJlc3VsdCA7CisgICAgaWYgKHN0ci5sZW5ndGgoKSA8IDMpCisgICAgICAgIEFzc2VydC5mYWlsKCkgOworICAgIFN0cmluZyB0bmFtZSA9IHN0ci5zdWJzdHJpbmcoIDAsIDIgKSA7CisgICAgY2hhciBjaCA9IHN0ci5jaGFyQXQoIDIgKSA7CisgICAgU3RyaW5nIHRpbWVTdHIgPSBzdHIuc3Vic3RyaW5nKCAzICkgOworICAgIGludCBkZWxheSA9IDA7CisgICAgaWYgKCh0aW1lU3RyICE9IG51bGwpICYmICh0aW1lU3RyLmxlbmd0aCgpID4gMCkpCisgICAgICAgIGRlbGF5ID0gSW50ZWdlci5wYXJzZUludCggdGltZVN0ciApIDsKKyAgICBDb250cm9sbGFibGUgYyA9IGdldENvbnRyb2xsYWJsZSggdG5hbWUgKSA7CisgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMgIT0gbnVsbCAmJiBjIGluc3RhbmNlb2YgVGltZXIgKSA7CisgICAgVGltZXIgdCA9IFRpbWVyLmNsYXNzLmNhc3QoIGMgKSA7CisgICAgVGltZXJFdmVudC5UaW1lckV2ZW50VHlwZSBldHlwZSA9IG51bGwgOworICAgIGlmIChjaCA9PSAnPCcpCisgICAgICAgIGV0eXBlID0gVGltZXJFdmVudC5UaW1lckV2ZW50VHlwZS5FTlRFUiA7CisgICAgZWxzZSBpZiAoY2ggPT0gJz4nKQorICAgICAgICBldHlwZSA9IFRpbWVyRXZlbnQuVGltZXJFdmVudFR5cGUuRVhJVCA7CisgICAgZWxzZQorICAgICAgICBBc3NlcnQuZmFpbCgpIDsKKworICAgIFBhaXI8VGltZXIsVGltZXJFdmVudC5UaW1lckV2ZW50VHlwZT4gcmVzMSA9CisgICAgICAgIG5ldyBQYWlyPFRpbWVyLFRpbWVyRXZlbnQuVGltZXJFdmVudFR5cGU+KCB0LCBldHlwZSApIDsKKyAgICBQYWlyPEludGVnZXIsUGFpcjxUaW1lcixUaW1lckV2ZW50LlRpbWVyRXZlbnRUeXBlPj4gcmVzdWx0ID0KKyAgICAgICAgbmV3IFBhaXI8SW50ZWdlcixQYWlyPFRpbWVyLFRpbWVyRXZlbnQuVGltZXJFdmVudFR5cGU+PiggZGVsYXksIHJlczEgKSA7CisKKyAgICByZXR1cm4gcmVzdWx0IDsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgc2xlZXAoIGludCB0aW1lICkgewotCWlmICh0aW1lID09IDApCi0JICAgIHJldHVybiA7CisgICAgaWYgKHRpbWUgPT0gMCkKKyAgICAgICAgcmV0dXJuIDsKIAotCXRyeSB7Ci0JICAgIFRocmVhZC5zbGVlcCggdGltZSApIDsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXhjKSB7Ci0JICAgIC8vIGlnbm9yZSB0aGlzCi0JfQorICAgIHRyeSB7CisgICAgICAgIFRocmVhZC5zbGVlcCggdGltZSApIDsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXhjKSB7CisgICAgICAgIC8vIGlnbm9yZSB0aGlzCisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBnZW5lcmF0ZUV2ZW50cyggVGltZXJFdmVudENvbnRyb2xsZXIgdGVjLCBMaXN0PFN0cmluZz4gZWQgKSB7Ci0JZm9yIChTdHJpbmcgc3RyIDogZWQgKSB7Ci0JICAgIFBhaXI8SW50ZWdlcixQYWlyPFRpbWVyLFRpbWVyRXZlbnQuVGltZXJFdmVudFR5cGU+PiBwID0gCi0JCXBhcnNlRXZlbnREZXNjcmlwdGlvbiggc3RyICkgOwotCSAgICBpbnQgZGVsYXkgPSBwLmZpcnN0KCkgOwotCSAgICBpZiAocC5zZWNvbmQoKS5zZWNvbmQoKSA9PSBUaW1lckV2ZW50LlRpbWVyRXZlbnRUeXBlLkVOVEVSKSB7Ci0JCXRlYy5lbnRlciggcC5zZWNvbmQoKS5maXJzdCgpICkgOwotCQlzbGVlcCggZGVsYXkgKSA7Ci0JICAgIH0gZWxzZSB7Ci0JCXNsZWVwKCBkZWxheSApIDsKLQkJdGVjLmV4aXQoIHAuc2Vjb25kKCkuZmlyc3QoKSApIDsKLQkgICAgfQotCX0KKyAgICBmb3IgKFN0cmluZyBzdHIgOiBlZCApIHsKKyAgICAgICAgUGFpcjxJbnRlZ2VyLFBhaXI8VGltZXIsVGltZXJFdmVudC5UaW1lckV2ZW50VHlwZT4+IHAgPQorICAgICAgICBwYXJzZUV2ZW50RGVzY3JpcHRpb24oIHN0ciApIDsKKyAgICAgICAgaW50IGRlbGF5ID0gcC5maXJzdCgpIDsKKyAgICAgICAgaWYgKHAuc2Vjb25kKCkuc2Vjb25kKCkgPT0gVGltZXJFdmVudC5UaW1lckV2ZW50VHlwZS5FTlRFUikgeworICAgICAgICB0ZWMuZW50ZXIoIHAuc2Vjb25kKCkuZmlyc3QoKSApIDsKKyAgICAgICAgc2xlZXAoIGRlbGF5ICkgOworICAgICAgICB9IGVsc2UgeworICAgICAgICBzbGVlcCggZGVsYXkgKSA7CisgICAgICAgIHRlYy5leGl0KCBwLnNlY29uZCgpLmZpcnN0KCkgKSA7CisgICAgICAgIH0KKyAgICB9CiAgICAgfQogCiAgICAgLy8gVGVzdCBmb3IgY29ycmVjdCBldmVudCBzZXF1ZW5jZSB3aXRoIG5vbi1kZWNyZWFzaW5nIHRpbWUgc3RhbXBzCiAgICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlRXZlbnRzKCBMaXN0PFRpbWVyRXZlbnQ+IGVsaXN0LCBMaXN0PFN0cmluZz4gZWQgKSB7Ci0JSXRlcmF0b3I8VGltZXJFdmVudD4gdGVpdGVyID0gZWxpc3QuaXRlcmF0b3IoKSA7Ci0JSXRlcmF0b3I8U3RyaW5nPiBlZGl0ZXIgPSBlZC5pdGVyYXRvcigpIDsKLQlsb25nIHRpbWUgPSAtMSA7Ci0Jd2hpbGUgKHRlaXRlci5oYXNOZXh0KCkgJiYgZWRpdGVyLmhhc05leHQoKSkgewotCSAgICBUaW1lckV2ZW50IHRlID0gdGVpdGVyLm5leHQoKSA7Ci0JICAgIFN0cmluZyBzdHIgPSBlZGl0ZXIubmV4dCgpIDsKLQkgICAgUGFpcjxJbnRlZ2VyLFBhaXI8VGltZXIsVGltZXJFdmVudC5UaW1lckV2ZW50VHlwZT4+IHAgPSBwYXJzZUV2ZW50RGVzY3JpcHRpb24oIHN0ciApIDsKLQkgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggdGUudGltZXIoKSwgcC5zZWNvbmQoKS5maXJzdCgpICkgOwotCSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCB0ZS50eXBlKCksIHAuc2Vjb25kKCkuc2Vjb25kKCkgKSA7Ci0JICAgIEFzc2VydC5hc3NlcnRUcnVlKCB0ZS50aW1lKCkgPj0gdGltZSApIDsKLQkgICAgdGltZSA9IHRlLnRpbWUoKSA7Ci0JfQotCQotCUFzc2VydC5hc3NlcnRFcXVhbHMoIHRlaXRlci5oYXNOZXh0KCksIGVkaXRlci5oYXNOZXh0KCkgKSA7CisgICAgSXRlcmF0b3I8VGltZXJFdmVudD4gdGVpdGVyID0gZWxpc3QuaXRlcmF0b3IoKSA7CisgICAgSXRlcmF0b3I8U3RyaW5nPiBlZGl0ZXIgPSBlZC5pdGVyYXRvcigpIDsKKyAgICBsb25nIHRpbWUgPSAtMSA7CisgICAgd2hpbGUgKHRlaXRlci5oYXNOZXh0KCkgJiYgZWRpdGVyLmhhc05leHQoKSkgeworICAgICAgICBUaW1lckV2ZW50IHRlID0gdGVpdGVyLm5leHQoKSA7CisgICAgICAgIFN0cmluZyBzdHIgPSBlZGl0ZXIubmV4dCgpIDsKKyAgICAgICAgUGFpcjxJbnRlZ2VyLFBhaXI8VGltZXIsVGltZXJFdmVudC5UaW1lckV2ZW50VHlwZT4+IHAgPSBwYXJzZUV2ZW50RGVzY3JpcHRpb24oIHN0ciApIDsKKyAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggdGUudGltZXIoKSwgcC5zZWNvbmQoKS5maXJzdCgpICkgOworICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCB0ZS50eXBlKCksIHAuc2Vjb25kKCkuc2Vjb25kKCkgKSA7CisgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB0ZS50aW1lKCkgPj0gdGltZSApIDsKKyAgICAgICAgdGltZSA9IHRlLnRpbWUoKSA7CisgICAgfQorCisgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggdGVpdGVyLmhhc05leHQoKSwgZWRpdGVyLmhhc05leHQoKSApIDsKICAgICB9CiAKIAogICAgIHByaXZhdGUgdm9pZCBkaXNwbGF5U3RhdHMoIFN0cmluZyBtc2csIFN0YXRpc3RpY3Mgc3RhdHMgKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCBtc2cgKSA7Ci0JU3lzdGVtLm91dC5wcmludGxuKCAiXHRjb3VudCAgICAgICAgICAgICAgPSAiICsgc3RhdHMuY291bnQoKSApIDsKLQlTeXN0ZW0ub3V0LnByaW50bG4oICJcdG1pbiAgICAgICAgICAgICAgICA9ICIgKyBzdGF0cy5taW4oKSApIDsKLQlTeXN0ZW0ub3V0LnByaW50bG4oICJcdG1heCAgICAgICAgICAgICAgICA9ICIgKyBzdGF0cy5tYXgoKSApIDsKLQlTeXN0ZW0ub3V0LnByaW50bG4oICJcdGF2ZXJhZ2UgICAgICAgICAgICA9ICIgKyBzdGF0cy5hdmVyYWdlKCkgKSA7Ci0JU3lzdGVtLm91dC5wcmludGxuKCAiXHRzdGFuZGFyZCBkZXZpYXRpb24gPSAiICsgc3RhdHMuc3RhbmRhcmREZXZpYXRpb24oKSApIDsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIG1zZyApIDsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJcdGNvdW50ICAgICAgICAgICAgICA9ICIgKyBzdGF0cy5jb3VudCgpICkgOworICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlx0bWluICAgICAgICAgICAgICAgID0gIiArIHN0YXRzLm1pbigpICkgOworICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlx0bWF4ICAgICAgICAgICAgICAgID0gIiArIHN0YXRzLm1heCgpICkgOworICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlx0YXZlcmFnZSAgICAgICAgICAgID0gIiArIHN0YXRzLmF2ZXJhZ2UoKSApIDsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJcdHN0YW5kYXJkIGRldmlhdGlvbiA9ICIgKyBzdGF0cy5zdGFuZGFyZERldmlhdGlvbigpICkgOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkaXNwbGF5U3RhdHNNYXAoIE1hcDxUaW1lcixTdGF0aXN0aWNzPiBzbWFwICkgewotCWZvciAoVGltZXIgdCA6IHNtYXAua2V5U2V0KCkpIHsKLQkgICAgZGlzcGxheVN0YXRzKCAiU3RhdGlzdGljcyBmb3IgVGltZXIgIiArIHQsIHNtYXAuZ2V0KHQpICkgOwotCX0KKyAgICBmb3IgKFRpbWVyIHQgOiBzbWFwLmtleVNldCgpKSB7CisgICAgICAgIGRpc3BsYXlTdGF0cyggIlN0YXRpc3RpY3MgZm9yIFRpbWVyICIgKyB0LCBzbWFwLmdldCh0KSApIDsKKyAgICB9CiAgICAgfQogCiAgICAgQFRlc3QoKQogICAgIHB1YmxpYyB2b2lkIHRlc3RTdGF0c0hhbmRsZXIoKSB7Ci0JTGlzdDxTdHJpbmc+IGVsaXN0ID0gYXNMaXN0KCAidDEiLCAidDIiLCAidDMiICkgOwotCVNldDxDb250cm9sbGFibGU+IGNzZXQgPSBtYWtlQ29udHJvbGxhYmxlU2V0KCBlbGlzdCApIDsKLQlTdHJpbmcgc2hOYW1lID0gIlN0YXRzMSIgOwotCVN0YXRzRXZlbnRIYW5kbGVyIGhhbmRsZXIgPSB0Zi5tYWtlU3RhdHNFdmVudEhhbmRsZXIoIHNoTmFtZSApIDsKLQljb250cm9sbGVyLnJlZ2lzdGVyKCBoYW5kbGVyICkgOwotCWVuYWJsZUNvbnRyb2xsYWJsZXMoIGNzZXQgKSA7Ci0JZ2VuZXJhdGVFdmVudHMoIGNvbnRyb2xsZXIsIGV2SW4gKSA7Ci0JTWFwPFRpbWVyLFN0YXRpc3RpY3M+IHNtYXAgPSBoYW5kbGVyLnN0YXRzKCkgOwotCWRpc3BsYXlTdGF0c01hcCggc21hcCApIDsKKyAgICBMaXN0PFN0cmluZz4gZWxpc3QgPSBhc0xpc3QoICJ0MSIsICJ0MiIsICJ0MyIgKSA7CisgICAgU2V0PENvbnRyb2xsYWJsZT4gY3NldCA9IG1ha2VDb250cm9sbGFibGVTZXQoIGVsaXN0ICkgOworICAgIFN0cmluZyBzaE5hbWUgPSAiU3RhdHMxIiA7CisgICAgU3RhdHNFdmVudEhhbmRsZXIgaGFuZGxlciA9IHRmLm1ha2VTdGF0c0V2ZW50SGFuZGxlciggc2hOYW1lICkgOworICAgIGNvbnRyb2xsZXIucmVnaXN0ZXIoIGhhbmRsZXIgKSA7CisgICAgZW5hYmxlQ29udHJvbGxhYmxlcyggY3NldCApIDsKKyAgICBnZW5lcmF0ZUV2ZW50cyggY29udHJvbGxlciwgZXZJbiApIDsKKyAgICBNYXA8VGltZXIsU3RhdGlzdGljcz4gc21hcCA9IGhhbmRsZXIuc3RhdHMoKSA7CisgICAgZGlzcGxheVN0YXRzTWFwKCBzbWFwICkgOwogCi0JaGFuZGxlci5jbGVhcigpIDsKLQlzbWFwID0gaGFuZGxlci5zdGF0cygpIDsKLQlmb3IgKFRpbWVyIHRpbWVyIDogc21hcC5rZXlTZXQoKSkgewotCSAgICBTdGF0aXN0aWNzIHN0YXRzID0gc21hcC5nZXQoIHRpbWVyICkgOwotCSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggc3RhdHMuY291bnQoKSA9PSAwICkgOwotCX0KKyAgICBoYW5kbGVyLmNsZWFyKCkgOworICAgIHNtYXAgPSBoYW5kbGVyLnN0YXRzKCkgOworICAgIGZvciAoVGltZXIgdGltZXIgOiBzbWFwLmtleVNldCgpKSB7CisgICAgICAgIFN0YXRpc3RpY3Mgc3RhdHMgPSBzbWFwLmdldCggdGltZXIgKSA7CisgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBzdGF0cy5jb3VudCgpID09IDAgKSA7CisgICAgfQogICAgIH0KIAogICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCB0ZXN0VGltZXJDb250cm9sbGVyKCkgewotCUxpc3Q8U3RyaW5nPiBlbGlzdCA9IGFzTGlzdCggInQxIiwgInQzIiApIDsKLQlTZXQ8Q29udHJvbGxhYmxlPiBjc2V0ID0gbWFrZUNvbnRyb2xsYWJsZVNldCggZWxpc3QgKSA7Ci0JZW5hYmxlQ29udHJvbGxhYmxlcyggY3NldCApIDsKKyAgICBMaXN0PFN0cmluZz4gZWxpc3QgPSBhc0xpc3QoICJ0MSIsICJ0MyIgKSA7CisgICAgU2V0PENvbnRyb2xsYWJsZT4gY3NldCA9IG1ha2VDb250cm9sbGFibGVTZXQoIGVsaXN0ICkgOworICAgIGVuYWJsZUNvbnRyb2xsYWJsZXMoIGNzZXQgKSA7CiAKLQkvLyBUZXN0IGZvciBjb3JyZWN0IG5hbWUgYW5kIGZhY3Rvcnkgb2YgY29udHJvbGxlcgotCUFzc2VydC5hc3NlcnRFcXVhbHMoIGNvbnRyb2xsZXIubmFtZSgpLCBjb250cm9sbGVyTmFtZSApIDsKLQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCBjb250cm9sbGVyLmZhY3RvcnkoKSwgdGYgKSA7CisgICAgLy8gVGVzdCBmb3IgY29ycmVjdCBuYW1lIGFuZCBmYWN0b3J5IG9mIGNvbnRyb2xsZXIKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCBjb250cm9sbGVyLm5hbWUoKSwgY29udHJvbGxlck5hbWUgKSA7CisgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggY29udHJvbGxlci5mYWN0b3J5KCksIHRmICkgOwogCi0JLy8gVGVzdCByZWdpc3RyYXRpb24gb2YgZXZlbnQgaGFuZGxlcnMKLQljb250cm9sbGVyLnJlZ2lzdGVyKCBoMSApIDsKLQljb250cm9sbGVyLnJlZ2lzdGVyKCBoMiApIDsKLQlTZXQ8VGltZXJFdmVudEhhbmRsZXI+IGV0ZWNTZXQgPSBhc1NldCggKFRpbWVyRXZlbnRIYW5kbGVyKWgxLCAKLQkgICAgKFRpbWVyRXZlbnRIYW5kbGVyKWgyICkgOwotCVNldDxUaW1lckV2ZW50SGFuZGxlcj4gYXRlY1NldCA9IGNvbnRyb2xsZXIuaGFuZGxlcnMoKSA7Ci0JQXNzZXJ0LmFzc2VydEVxdWFscyggZXRlY1NldCwgYXRlY1NldCApIDsKKyAgICAvLyBUZXN0IHJlZ2lzdHJhdGlvbiBvZiBldmVudCBoYW5kbGVycworICAgIGNvbnRyb2xsZXIucmVnaXN0ZXIoIGgxICkgOworICAgIGNvbnRyb2xsZXIucmVnaXN0ZXIoIGgyICkgOworICAgIFNldDxUaW1lckV2ZW50SGFuZGxlcj4gZXRlY1NldCA9IGFzU2V0KCAoVGltZXJFdmVudEhhbmRsZXIpaDEsCisgICAgICAgIChUaW1lckV2ZW50SGFuZGxlciloMiApIDsKKyAgICBTZXQ8VGltZXJFdmVudEhhbmRsZXI+IGF0ZWNTZXQgPSBjb250cm9sbGVyLmhhbmRsZXJzKCkgOworICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIGV0ZWNTZXQsIGF0ZWNTZXQgKSA7CiAKLQkvLyBUZXN0IGV2ZW50IGhhbmRsZXIgZGVyZWdpc3RyYXRpb24KLQljb250cm9sbGVyLmRlcmVnaXN0ZXIoIGgyICkgOwotCWV0ZWNTZXQgPSBhc1NldCggKFRpbWVyRXZlbnRIYW5kbGVyKWgxICkgOwotCWF0ZWNTZXQgPSBjb250cm9sbGVyLmhhbmRsZXJzKCkgOwotCUFzc2VydC5hc3NlcnRFcXVhbHMoIGV0ZWNTZXQsIGF0ZWNTZXQgKSA7CisgICAgLy8gVGVzdCBldmVudCBoYW5kbGVyIGRlcmVnaXN0cmF0aW9uCisgICAgY29udHJvbGxlci5kZXJlZ2lzdGVyKCBoMiApIDsKKyAgICBldGVjU2V0ID0gYXNTZXQoIChUaW1lckV2ZW50SGFuZGxlciloMSApIDsKKyAgICBhdGVjU2V0ID0gY29udHJvbGxlci5oYW5kbGVycygpIDsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCBldGVjU2V0LCBhdGVjU2V0ICkgOwogCi0JLy8gVGVzdCBmb3IgY29ycmVjdCBnZW5lcmF0aW9uIG9mIGV2ZW50IHNlcXVlbmNlIHdpdGgKLQkvLyBhY3RpdmF0ZWQgdGltZXJzLgotCWNvbnRyb2xsZXIucmVnaXN0ZXIoIGgyICkgOwotCWdlbmVyYXRlRXZlbnRzKCBjb250cm9sbGVyLCBldkluICkgOwotCUxpc3Q8VGltZXJFdmVudD4gZXZlbnRzMSA9IGgxLmV2ZW50cygpIDsKLQlMaXN0PFRpbWVyRXZlbnQ+IGV2ZW50czIgPSBoMi5ldmVudHMoKSA7Ci0JQXNzZXJ0LmFzc2VydEVxdWFscyggZXZlbnRzMSwgZXZlbnRzMiApIDsKKyAgICAvLyBUZXN0IGZvciBjb3JyZWN0IGdlbmVyYXRpb24gb2YgZXZlbnQgc2VxdWVuY2Ugd2l0aAorICAgIC8vIGFjdGl2YXRlZCB0aW1lcnMuCisgICAgY29udHJvbGxlci5yZWdpc3RlciggaDIgKSA7CisgICAgZ2VuZXJhdGVFdmVudHMoIGNvbnRyb2xsZXIsIGV2SW4gKSA7CisgICAgTGlzdDxUaW1lckV2ZW50PiBldmVudHMxID0gaDEuZXZlbnRzKCkgOworICAgIExpc3Q8VGltZXJFdmVudD4gZXZlbnRzMiA9IGgyLmV2ZW50cygpIDsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCBldmVudHMxLCBldmVudHMyICkgOwogCi0JdmFsaWRhdGVFdmVudHMoIGgxLmV2ZW50cygpLCBldk91dCApIDsKKyAgICB2YWxpZGF0ZUV2ZW50cyggaDEuZXZlbnRzKCksIGV2T3V0ICkgOwogCi0JLy8gY2xlYW4gdXAKLQljb250cm9sbGVyLmRlcmVnaXN0ZXIoIGgxICkgOwotCWNvbnRyb2xsZXIuZGVyZWdpc3RlciggaDIgKSA7Ci0JZGlzYWJsZUFsbENvbnRyb2xsYWJsZXMoKSA7CisgICAgLy8gY2xlYW4gdXAKKyAgICBjb250cm9sbGVyLmRlcmVnaXN0ZXIoIGgxICkgOworICAgIGNvbnRyb2xsZXIuZGVyZWdpc3RlciggaDIgKSA7CisgICAgZGlzYWJsZUFsbENvbnRyb2xsYWJsZXMoKSA7CiAgICAgfQogCi0gICAgQENvbmZpZ3VyYXRpb24oIGFmdGVyVGVzdCA9IHRydWUgKSAKKyAgICBAQ29uZmlndXJhdGlvbiggYWZ0ZXJUZXN0ID0gdHJ1ZSApCiAgICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB7Ci0JVGltZXJGYWN0b3J5QnVpbGRlci5kZXN0cm95KCB0ZiApIDsKKyAgICBUaW1lckZhY3RvcnlCdWlsZGVyLmRlc3Ryb3koIHRmICkgOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NvcmJhL3RpbWVyL3NyYy90ZXN0L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29yYmEvdGltZXIvc3JjL3Rlc3QvQ2xpZW50LmphdmEKaW5kZXggMzNkZjJlNy4uNzg1NjI3NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29yYmEvdGltZXIvc3JjL3Rlc3QvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29yYmEvdGltZXIvc3JjL3Rlc3QvQ2xpZW50LmphdmEKQEAgLTU0LDIwMCArNTQsMjAwIEBACiAgICAgLy8gVGVzdCBUaW1lckZhY3RvcnlCdWlsZGVyCiAgICAgQFRlc3QoKQogICAgIHB1YmxpYyB2b2lkIGZhY3RvcnlCdWlsZGVyQ3JlYXRlMSgpIHsKLQlTdHJpbmcgbmFtZSA9ICJURjEiIDsKLQlTdHJpbmcgZGVzY3JpcHRpb24gPSAiRmlyc3QgVGVzdCBGYWN0b3J5IiA7Ci0JVGltZXJGYWN0b3J5IHRmID0gVGltZXJGYWN0b3J5QnVpbGRlci5tYWtlKCBuYW1lLCBkZXNjcmlwdGlvbiApIDsKLQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCB0Zi5uYW1lKCksIG5hbWUgKSA7Ci0JQXNzZXJ0LmFzc2VydEVxdWFscyggdGYuZGVzY3JpcHRpb24oKSwgZGVzY3JpcHRpb24gKSA7Ci0JVGltZXJGYWN0b3J5QnVpbGRlci5kZXN0cm95KCB0ZiApIDsKKyAgICBTdHJpbmcgbmFtZSA9ICJURjEiIDsKKyAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSAiRmlyc3QgVGVzdCBGYWN0b3J5IiA7CisgICAgVGltZXJGYWN0b3J5IHRmID0gVGltZXJGYWN0b3J5QnVpbGRlci5tYWtlKCBuYW1lLCBkZXNjcmlwdGlvbiApIDsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCB0Zi5uYW1lKCksIG5hbWUgKSA7CisgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggdGYuZGVzY3JpcHRpb24oKSwgZGVzY3JpcHRpb24gKSA7CisgICAgVGltZXJGYWN0b3J5QnVpbGRlci5kZXN0cm95KCB0ZiApIDsKICAgICB9CiAKICAgICBAVGVzdCgpCiAgICAgQEV4cGVjdGVkRXhjZXB0aW9ucyggeyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uY2xhc3MgfSApCiAgICAgcHVibGljIHZvaWQgZmFjdG9yeUJ1aWxkZXJDcmVhdGUyKCkgewotCVN0cmluZyBuYW1lID0gIlRGMSIgOwotCVN0cmluZyBkZXNjcmlwdGlvbiA9ICJGaXJzdCBUZXN0IEZhY3RvcnkiIDsKLQlUaW1lckZhY3RvcnkgdGYgPSBUaW1lckZhY3RvcnlCdWlsZGVyLm1ha2UoIG5hbWUsIGRlc2NyaXB0aW9uICkgOwotCXRyeSB7Ci0JICAgIHRmID0gVGltZXJGYWN0b3J5QnVpbGRlci5tYWtlKCBuYW1lLCBkZXNjcmlwdGlvbiApIDsKLQl9IGZpbmFsbHkgewotCSAgICBUaW1lckZhY3RvcnlCdWlsZGVyLmRlc3Ryb3koIHRmICkgOwotCX0KKyAgICBTdHJpbmcgbmFtZSA9ICJURjEiIDsKKyAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSAiRmlyc3QgVGVzdCBGYWN0b3J5IiA7CisgICAgVGltZXJGYWN0b3J5IHRmID0gVGltZXJGYWN0b3J5QnVpbGRlci5tYWtlKCBuYW1lLCBkZXNjcmlwdGlvbiApIDsKKyAgICB0cnkgeworICAgICAgICB0ZiA9IFRpbWVyRmFjdG9yeUJ1aWxkZXIubWFrZSggbmFtZSwgZGVzY3JpcHRpb24gKSA7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgVGltZXJGYWN0b3J5QnVpbGRlci5kZXN0cm95KCB0ZiApIDsKKyAgICB9CiAgICAgfQogCiAgICAgQFRlc3QoKQogICAgIHB1YmxpYyB2b2lkIGZhY3RvcnlCdWlsZGVyQ3JlYXRlMygpIHsKLQlTdHJpbmcgbmFtZSA9ICJURjEiIDsKLQlTdHJpbmcgZGVzY3JpcHRpb24gPSAiRmlyc3QgVGVzdCBGYWN0b3J5IiA7Ci0JVGltZXJGYWN0b3J5IHRmID0gVGltZXJGYWN0b3J5QnVpbGRlci5tYWtlKCBuYW1lLCBkZXNjcmlwdGlvbiApIDsKLQlUaW1lckZhY3RvcnlCdWlsZGVyLmRlc3Ryb3koIHRmICkgOwotCXRmID0gVGltZXJGYWN0b3J5QnVpbGRlci5tYWtlKCBuYW1lLCBkZXNjcmlwdGlvbiApIDsKLQlUaW1lckZhY3RvcnlCdWlsZGVyLmRlc3Ryb3koIHRmICkgOworICAgIFN0cmluZyBuYW1lID0gIlRGMSIgOworICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9ICJGaXJzdCBUZXN0IEZhY3RvcnkiIDsKKyAgICBUaW1lckZhY3RvcnkgdGYgPSBUaW1lckZhY3RvcnlCdWlsZGVyLm1ha2UoIG5hbWUsIGRlc2NyaXB0aW9uICkgOworICAgIFRpbWVyRmFjdG9yeUJ1aWxkZXIuZGVzdHJveSggdGYgKSA7CisgICAgdGYgPSBUaW1lckZhY3RvcnlCdWlsZGVyLm1ha2UoIG5hbWUsIGRlc2NyaXB0aW9uICkgOworICAgIFRpbWVyRmFjdG9yeUJ1aWxkZXIuZGVzdHJveSggdGYgKSA7CiAgICAgfQogCiAgICAgQFRlc3QoKQogICAgIHB1YmxpYyB2b2lkIHRlc3RWZXJzaW9uZWRIYXNoU2V0KCkgewotCVN0cmluZ1tdIGRhdGEgPSB7ICJyZWQiLCAib3JhbmdlIiwgInllbGxvdyIsICJncmVlbiIsICJibHVlIiwgImluZGlnbyIsICJ2aW9sZXQiIH0gOwotCVN0cmluZyB0b1JlbW92ZTEgPSAiZ3JlZW4iIDsKLQlTdHJpbmcgdG9SZW1vdmUyID0gImJsdWUiIDsKKyAgICBTdHJpbmdbXSBkYXRhID0geyAicmVkIiwgIm9yYW5nZSIsICJ5ZWxsb3ciLCAiZ3JlZW4iLCAiYmx1ZSIsICJpbmRpZ28iLCAidmlvbGV0IiB9IDsKKyAgICBTdHJpbmcgdG9SZW1vdmUxID0gImdyZWVuIiA7CisgICAgU3RyaW5nIHRvUmVtb3ZlMiA9ICJibHVlIiA7CiAKLQlWZXJzaW9uZWRIYXNoU2V0PFN0cmluZz4gdHNldCA9IG5ldyBWZXJzaW9uZWRIYXNoU2V0PFN0cmluZz4oKSA7Ci0JbG9uZyB2ZXJzaW9uID0gdHNldC52ZXJzaW9uKCkgOworICAgIFZlcnNpb25lZEhhc2hTZXQ8U3RyaW5nPiB0c2V0ID0gbmV3IFZlcnNpb25lZEhhc2hTZXQ8U3RyaW5nPigpIDsKKyAgICBsb25nIHZlcnNpb24gPSB0c2V0LnZlcnNpb24oKSA7CiAKLQkvLyB0ZXN0IGFkZAotCWZvciAoU3RyaW5nIHN0ciA6IGRhdGEpCi0JICAgIHRzZXQuYWRkKCBzdHIgKSA7Ci0JQXNzZXJ0LmFzc2VydFRydWUoIHZlcnNpb24gIT0gdHNldC52ZXJzaW9uKCkgKSA7Ci0JdmVyc2lvbiA9IHRzZXQudmVyc2lvbigpIDsKKyAgICAvLyB0ZXN0IGFkZAorICAgIGZvciAoU3RyaW5nIHN0ciA6IGRhdGEpCisgICAgICAgIHRzZXQuYWRkKCBzdHIgKSA7CisgICAgQXNzZXJ0LmFzc2VydFRydWUoIHZlcnNpb24gIT0gdHNldC52ZXJzaW9uKCkgKSA7CisgICAgdmVyc2lvbiA9IHRzZXQudmVyc2lvbigpIDsKIAotCS8vIEFkZCB0aGF0IGRvZXMgbm90IGNoYW5nZSBzZXQgZG9lcyBub3QgY2hhbmdlIHZlcnNpb24KLQl0c2V0LmFkZCggdG9SZW1vdmUxICkgOwotCUFzc2VydC5hc3NlcnRFcXVhbHMoIHZlcnNpb24sIHRzZXQudmVyc2lvbigpICkgOwotCQotCS8vIHRlc3QgZGlyZWN0IHJlbW92ZQotCXRzZXQucmVtb3ZlKCB0b1JlbW92ZTEgKSA7CQotCUFzc2VydC5hc3NlcnRUcnVlKCB2ZXJzaW9uICE9IHRzZXQudmVyc2lvbigpICkgOwotCXZlcnNpb24gPSB0c2V0LnZlcnNpb24oKSA7CisgICAgLy8gQWRkIHRoYXQgZG9lcyBub3QgY2hhbmdlIHNldCBkb2VzIG5vdCBjaGFuZ2UgdmVyc2lvbgorICAgIHRzZXQuYWRkKCB0b1JlbW92ZTEgKSA7CisgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggdmVyc2lvbiwgdHNldC52ZXJzaW9uKCkgKSA7CiAKLQkvLyBSZW1vdmUgdGhhdCBkb2VzIG5vdCBjaGFuZ2Ugc2V0IGRvZXMgbm90IGNoYW5nZSB2ZXJzaW9uCi0JdHNldC5yZW1vdmUoIHRvUmVtb3ZlMSApIDsJCi0JQXNzZXJ0LmFzc2VydEVxdWFscyggdmVyc2lvbiwgdHNldC52ZXJzaW9uKCkgKSA7CisgICAgLy8gdGVzdCBkaXJlY3QgcmVtb3ZlCisgICAgdHNldC5yZW1vdmUoIHRvUmVtb3ZlMSApIDsKKyAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggdmVyc2lvbiAhPSB0c2V0LnZlcnNpb24oKSApIDsKKyAgICB2ZXJzaW9uID0gdHNldC52ZXJzaW9uKCkgOwogCi0JLy8gdGVzdCBpdGVyYXRvciB3aXRob3V0IHJlbW92ZQotCVN0cmluZyByYWluYm93ID0gIiIgOwotCWZvciAoU3RyaW5nIHN0ciA6IHRzZXQpCi0JICAgIHJhaW5ib3cgKz0gIiAiICsgc3RyIDsKKyAgICAvLyBSZW1vdmUgdGhhdCBkb2VzIG5vdCBjaGFuZ2Ugc2V0IGRvZXMgbm90IGNoYW5nZSB2ZXJzaW9uCisgICAgdHNldC5yZW1vdmUoIHRvUmVtb3ZlMSApIDsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCB2ZXJzaW9uLCB0c2V0LnZlcnNpb24oKSApIDsKIAotCUFzc2VydC5hc3NlcnRFcXVhbHMoIHZlcnNpb24sIHRzZXQudmVyc2lvbigpICkgOworICAgIC8vIHRlc3QgaXRlcmF0b3Igd2l0aG91dCByZW1vdmUKKyAgICBTdHJpbmcgcmFpbmJvdyA9ICIiIDsKKyAgICBmb3IgKFN0cmluZyBzdHIgOiB0c2V0KQorICAgICAgICByYWluYm93ICs9ICIgIiArIHN0ciA7CiAKLQkvLyB0ZXN0IGl0ZXJhdG9yIHdpdGggcmVtb3ZlCi0JSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gdHNldC5pdGVyYXRvcigpIDsKLQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLQkgICAgU3RyaW5nIHN0ciA9IGl0ZXIubmV4dCgpIDsKLQkgICAgaWYgKHN0ci5lcXVhbHMoIHRvUmVtb3ZlMiApKSAKLQkJaXRlci5yZW1vdmUoKSA7Ci0JfQorICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIHZlcnNpb24sIHRzZXQudmVyc2lvbigpICkgOwogCi0JQXNzZXJ0LmFzc2VydFRydWUoIHZlcnNpb24gIT0gdHNldC52ZXJzaW9uKCkgKSA7CisgICAgLy8gdGVzdCBpdGVyYXRvciB3aXRoIHJlbW92ZQorICAgIEl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IHRzZXQuaXRlcmF0b3IoKSA7CisgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisgICAgICAgIFN0cmluZyBzdHIgPSBpdGVyLm5leHQoKSA7CisgICAgICAgIGlmIChzdHIuZXF1YWxzKCB0b1JlbW92ZTIgKSkKKyAgICAgICAgaXRlci5yZW1vdmUoKSA7CisgICAgfQorCisgICAgQXNzZXJ0LmFzc2VydFRydWUoIHZlcnNpb24gIT0gdHNldC52ZXJzaW9uKCkgKSA7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzbGVlcCggaW50IHRpbWUgKSB7Ci0JdHJ5IHsKLQkgICAgVGhyZWFkLnNsZWVwKCB0aW1lICkgOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHsKLQkgICAgLy8gaWdub3JlIGl0IAotCX0KKyAgICB0cnkgeworICAgICAgICBUaHJlYWQuc2xlZXAoIHRpbWUgKSA7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4YykgeworICAgICAgICAvLyBpZ25vcmUgaXQKKyAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIHJlY29yZENhbGwoIFRpbWluZ1BvaW50cyB0cCwgVGltZXIgdG9wLCAKLQlUaW1lckV2ZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBpbnQgdHJhbnNwb3J0RGVsYXkgKSB7CisgICAgcHJpdmF0ZSB2b2lkIHJlY29yZENhbGwoIFRpbWluZ1BvaW50cyB0cCwgVGltZXIgdG9wLAorICAgIFRpbWVyRXZlbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIGludCB0cmFuc3BvcnREZWxheSApIHsKIAotCWNvbnRyb2xsZXIuZW50ZXIoIHRvcCApIDsKKyAgICBjb250cm9sbGVyLmVudGVyKCB0b3AgKSA7CiAKLQl0cC5lbnRlcl9oYXNOZXh0TmV4dCgpIDsKLQlzbGVlcCggMSApIDsKLQl0cC5leGl0X2hhc05leHROZXh0KCkgOworICAgIHRwLmVudGVyX2hhc05leHROZXh0KCkgOworICAgIHNsZWVwKCAxICkgOworICAgIHRwLmV4aXRfaGFzTmV4dE5leHQoKSA7CiAKLQl0cC5lbnRlcl9jb25uZWN0aW9uU2V0dXAoKSA7Ci0Jc2xlZXAoIDQgKSA7Ci0JdHAuZXhpdF9jb25uZWN0aW9uU2V0dXAoKSA7CisgICAgdHAuZW50ZXJfY29ubmVjdGlvblNldHVwKCkgOworICAgIHNsZWVwKCA0ICkgOworICAgIHRwLmV4aXRfY29ubmVjdGlvblNldHVwKCkgOwogCi0JdHAuZW50ZXJfY2xpZW50RW5jb2RpbmcoKSA7Ci0Jc2xlZXAoIDEwMCApIDsKLQl0cC5leGl0X2NsaWVudEVuY29kaW5nKCkgOworICAgIHRwLmVudGVyX2NsaWVudEVuY29kaW5nKCkgOworICAgIHNsZWVwKCAxMDAgKSA7CisgICAgdHAuZXhpdF9jbGllbnRFbmNvZGluZygpIDsKIAotCXRwLmVudGVyX2NsaWVudFRyYW5zcG9ydEFuZFdhaXQoKSA7Ci0Jc2xlZXAoIHRyYW5zcG9ydERlbGF5ICkgOwotCXRwLmV4aXRfY2xpZW50VHJhbnNwb3J0QW5kV2FpdCgpIDsKKyAgICB0cC5lbnRlcl9jbGllbnRUcmFuc3BvcnRBbmRXYWl0KCkgOworICAgIHNsZWVwKCB0cmFuc3BvcnREZWxheSApIDsKKyAgICB0cC5leGl0X2NsaWVudFRyYW5zcG9ydEFuZFdhaXQoKSA7CiAKLQl0cC5lbnRlcl9jbGllbnREZWNvZGluZygpIDsKLQlzbGVlcCggNDAgKSA7Ci0JdHAuZXhpdF9jbGllbnREZWNvZGluZygpIDsKKyAgICB0cC5lbnRlcl9jbGllbnREZWNvZGluZygpIDsKKyAgICBzbGVlcCggNDAgKSA7CisgICAgdHAuZXhpdF9jbGllbnREZWNvZGluZygpIDsKIAotCWNvbnRyb2xsZXIuZXhpdCggdG9wICkgOworICAgIGNvbnRyb2xsZXIuZXhpdCggdG9wICkgOwogICAgIH0KIAogICAgIE1hcDxUaW1lcixTdGF0aXN0aWNzPiBtYWtlRGF0YSgpIHsKLQkvLyBTZXR1cCB0aW1pbmcgcG9pbnRzIGFuZCBhIHRvcC1sZXZlbCB0aW1lcgotCVByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpIDsKLQlwcm9wcy5zZXRQcm9wZXJ0eSggIm9yZy5vbWcuQ09SQkEuT1JCQ2xhc3MiLCAKLQkgICAgImNvbS5zdW4uY29yYmEuZWUuaW1wbC5vcmIuT1JCSW1wbCIgKSA7Ci0JT1JCIG9yYiA9IChPUkIpT1JCLmluaXQoIG5ldyBTdHJpbmdbMF0sIHByb3BzICkgOworICAgIC8vIFNldHVwIHRpbWluZyBwb2ludHMgYW5kIGEgdG9wLWxldmVsIHRpbWVyCisgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCkgOworICAgIHByb3BzLnNldFByb3BlcnR5KCAib3JnLm9tZy5DT1JCQS5PUkJDbGFzcyIsCisgICAgICAgICJjb20uc3VuLmNvcmJhLmVlLmltcGwub3JiLk9SQkltcGwiICkgOworICAgIE9SQiBvcmIgPSAoT1JCKU9SQi5pbml0KCBuZXcgU3RyaW5nWzBdLCBwcm9wcyApIDsKIAotCXRyeSB7Ci0JICAgIFRpbWVyTWFuYWdlcjxUaW1pbmdQb2ludHM+IHRtID0gb3JiLmdldFRpbWVyTWFuYWdlcigpIDsKLQkgICAgVGltaW5nUG9pbnRzIHRwID0gdG0ucG9pbnRzKCkgOwotCSAgICBUaW1lckZhY3RvcnkgdGYgPSB0bS5mYWN0b3J5KCkgOwotCSAgICBUaW1lckV2ZW50Q29udHJvbGxlciBjb250cm9sbGVyID0gdG0uY29udHJvbGxlcigpIDsKLQkgICAgU3RhdHNFdmVudEhhbmRsZXIgaGFuZGxlciA9IHRmLm1ha2VTdGF0c0V2ZW50SGFuZGxlciggIlRlc3RTdGF0cyIgKSA7Ci0JICAgIGNvbnRyb2xsZXIucmVnaXN0ZXIoIGhhbmRsZXIgKSA7Ci0JICAgIFRpbWVyIHRvcCA9IHRmLm1ha2VUaW1lciggInRvcCIsICJFbmNsb3NlcyB0aGUgZW50aXJlIG9wZXJhdGlvbiIgKSA7Ci0JICAgIHRvcC5lbmFibGUoKSA7Ci0JICAgIHRwLnRyYW5zcG9ydC5lbmFibGUoKSA7Ci0JICAgIGhhbmRsZXIuY2xlYXIoKSA7CisgICAgdHJ5IHsKKyAgICAgICAgVGltZXJNYW5hZ2VyPFRpbWluZ1BvaW50cz4gdG0gPSBvcmIuZ2V0VGltZXJNYW5hZ2VyKCkgOworICAgICAgICBUaW1pbmdQb2ludHMgdHAgPSB0bS5wb2ludHMoKSA7CisgICAgICAgIFRpbWVyRmFjdG9yeSB0ZiA9IHRtLmZhY3RvcnkoKSA7CisgICAgICAgIFRpbWVyRXZlbnRDb250cm9sbGVyIGNvbnRyb2xsZXIgPSB0bS5jb250cm9sbGVyKCkgOworICAgICAgICBTdGF0c0V2ZW50SGFuZGxlciBoYW5kbGVyID0gdGYubWFrZVN0YXRzRXZlbnRIYW5kbGVyKCAiVGVzdFN0YXRzIiApIDsKKyAgICAgICAgY29udHJvbGxlci5yZWdpc3RlciggaGFuZGxlciApIDsKKyAgICAgICAgVGltZXIgdG9wID0gdGYubWFrZVRpbWVyKCAidG9wIiwgIkVuY2xvc2VzIHRoZSBlbnRpcmUgb3BlcmF0aW9uIiApIDsKKyAgICAgICAgdG9wLmVuYWJsZSgpIDsKKyAgICAgICAgdHAudHJhbnNwb3J0LmVuYWJsZSgpIDsKKyAgICAgICAgaGFuZGxlci5jbGVhcigpIDsKIAotCSAgICAvLyBTaW11bGF0ZSB0aGUgYWN0aW9ucyBvZiB0aGUgT1JCIGNsaWVudCB0cmFuc3BvcnQgCi0JICAgIHJlY29yZENhbGwoIHRwLCB0b3AsIGNvbnRyb2xsZXIsIDI1ICkgOwotCSAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCAzMSApIDsKLQkgICAgcmVjb3JkQ2FsbCggdHAsIHRvcCwgY29udHJvbGxlciwgMjcgKSA7Ci0JICAgIHJlY29yZENhbGwoIHRwLCB0b3AsIGNvbnRyb2xsZXIsIDQyICkgOwotCSAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCAxOSApIDsKLQkgICAgcmVjb3JkQ2FsbCggdHAsIHRvcCwgY29udHJvbGxlciwgMjEgKSA7Ci0JICAgIHJlY29yZENhbGwoIHRwLCB0b3AsIGNvbnRyb2xsZXIsIDIzICkgOwotCSAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCAyNSApIDsKLQkgICAgcmVjb3JkQ2FsbCggdHAsIHRvcCwgY29udHJvbGxlciwgMzQgKSA7Ci0JICAgIHJlY29yZENhbGwoIHRwLCB0b3AsIGNvbnRyb2xsZXIsIDMzICkgOwotCSAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCAzMSApIDsKLQkgICAgcmVjb3JkQ2FsbCggdHAsIHRvcCwgY29udHJvbGxlciwgMjggKSA7Ci0JICAgIHJlY29yZENhbGwoIHRwLCB0b3AsIGNvbnRyb2xsZXIsIDI3ICkgOwotCSAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCAyOSApIDsKLQkgICAgcmVjb3JkQ2FsbCggdHAsIHRvcCwgY29udHJvbGxlciwgMzAgKSA7Ci0JICAgIHJlY29yZENhbGwoIHRwLCB0b3AsIGNvbnRyb2xsZXIsIDMxICkgOwotCSAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCAyOCApIDsKKyAgICAgICAgLy8gU2ltdWxhdGUgdGhlIGFjdGlvbnMgb2YgdGhlIE9SQiBjbGllbnQgdHJhbnNwb3J0CisgICAgICAgIHJlY29yZENhbGwoIHRwLCB0b3AsIGNvbnRyb2xsZXIsIDI1ICkgOworICAgICAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCAzMSApIDsKKyAgICAgICAgcmVjb3JkQ2FsbCggdHAsIHRvcCwgY29udHJvbGxlciwgMjcgKSA7CisgICAgICAgIHJlY29yZENhbGwoIHRwLCB0b3AsIGNvbnRyb2xsZXIsIDQyICkgOworICAgICAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCAxOSApIDsKKyAgICAgICAgcmVjb3JkQ2FsbCggdHAsIHRvcCwgY29udHJvbGxlciwgMjEgKSA7CisgICAgICAgIHJlY29yZENhbGwoIHRwLCB0b3AsIGNvbnRyb2xsZXIsIDIzICkgOworICAgICAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCAyNSApIDsKKyAgICAgICAgcmVjb3JkQ2FsbCggdHAsIHRvcCwgY29udHJvbGxlciwgMzQgKSA7CisgICAgICAgIHJlY29yZENhbGwoIHRwLCB0b3AsIGNvbnRyb2xsZXIsIDMzICkgOworICAgICAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCAzMSApIDsKKyAgICAgICAgcmVjb3JkQ2FsbCggdHAsIHRvcCwgY29udHJvbGxlciwgMjggKSA7CisgICAgICAgIHJlY29yZENhbGwoIHRwLCB0b3AsIGNvbnRyb2xsZXIsIDI3ICkgOworICAgICAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCAyOSApIDsKKyAgICAgICAgcmVjb3JkQ2FsbCggdHAsIHRvcCwgY29udHJvbGxlciwgMzAgKSA7CisgICAgICAgIHJlY29yZENhbGwoIHRwLCB0b3AsIGNvbnRyb2xsZXIsIDMxICkgOworICAgICAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCAyOCApIDsKIAotCSAgICByZXR1cm4gaGFuZGxlci5zdGF0cygpIDsKLQl9IGZpbmFsbHkgewotCSAgICBvcmIuZGVzdHJveSgpIDsKLQl9CisgICAgICAgIHJldHVybiBoYW5kbGVyLnN0YXRzKCkgOworICAgIH0gZmluYWxseSB7CisgICAgICAgIG9yYi5kZXN0cm95KCkgOworICAgIH0KICAgICB9CiAKICAgICBAVGVzdCgpCiAgICAgdm9pZCBnZW5lcmF0ZVN0YXRzVGFibGUoKSB7Ci0JTWFwPFRpbWVyLCBTdGF0aXN0aWNzPiBkYXRhID0gbWFrZURhdGEoKSA7CisgICAgTWFwPFRpbWVyLCBTdGF0aXN0aWNzPiBkYXRhID0gbWFrZURhdGEoKSA7CiAKLQlUaW1lclV0aWxzLndyaXRlSHRtbFRhYmxlKCBkYXRhLCAic3RhdHMuaHRtbCIsIAotCSAgICAiQ2xpZW50IFRlc3QgVGltaW5nIERhdGEiICkgOworICAgIFRpbWVyVXRpbHMud3JpdGVIdG1sVGFibGUoIGRhdGEsICJzdGF0cy5odG1sIiwKKyAgICAgICAgIkNsaWVudCBUZXN0IFRpbWluZyBEYXRhIiApIDsKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiggU3RyaW5nW10gYXJncyApIHsKLQlUZXN0TkcgdG5nID0gbmV3IFRlc3RORygpIDsKKyAgICBUZXN0TkcgdG5nID0gbmV3IFRlc3RORygpIDsKIAotCUNsYXNzPD8+IGNscyA9IG51bGwgOworICAgIENsYXNzPD8+IGNscyA9IG51bGwgOwogCi0JdHJ5IHsKLQkgICAgY2xzID0gQ2xhc3MuZm9yTmFtZSggImNvcmJhLnRpbWVyLlRpbWVyUG9pbnRzU3VpdGUiICkgOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCAiQ2F1Z2h0IGV4Y2VwdGlvbjogIiArIGV4YyApIDsKLQkgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpIDsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgY2xzID0gQ2xhc3MuZm9yTmFtZSggImNvcmJhLnRpbWVyLlRpbWVyUG9pbnRzU3VpdGUiICkgOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiQ2F1Z2h0IGV4Y2VwdGlvbjogIiArIGV4YyApIDsKKyAgICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpIDsKKyAgICB9CiAKLQlMaXN0PENsYXNzPD8+PiBjbGFzc2VzID0gbmV3IEFycmF5TGlzdDxDbGFzczw/Pj4oIGFzTGlzdCggCi0JICAgIENsaWVudC5jbGFzcywgCi0JICAgIE5hbWVkQmFzZVN1aXRlLmNsYXNzLCAKLQkgICAgQ29udHJvbGxhYmxlQmFzZVN1aXRlLmNsYXNzLAotCSAgICBUaW1lckZhY3RvcnlTdWl0ZS5jbGFzcywKLQkgICAgQWN0aXZhdGlvblN1aXRlLmNsYXNzICkgKSA7CisgICAgTGlzdDxDbGFzczw/Pj4gY2xhc3NlcyA9IG5ldyBBcnJheUxpc3Q8Q2xhc3M8Pz4+KCBhc0xpc3QoCisgICAgICAgIENsaWVudC5jbGFzcywKKyAgICAgICAgTmFtZWRCYXNlU3VpdGUuY2xhc3MsCisgICAgICAgIENvbnRyb2xsYWJsZUJhc2VTdWl0ZS5jbGFzcywKKyAgICAgICAgVGltZXJGYWN0b3J5U3VpdGUuY2xhc3MsCisgICAgICAgIEFjdGl2YXRpb25TdWl0ZS5jbGFzcyApICkgOwogCi0JaWYgKGNscyAhPSBudWxsKQotCSAgICBjbGFzc2VzLmFkZCggY2xzICkgOworICAgIGlmIChjbHMgIT0gbnVsbCkKKyAgICAgICAgY2xhc3Nlcy5hZGQoIGNscyApIDsKIAotCUNsYXNzW10gdG5nQ2xhc3NlcyA9IGNsYXNzZXMudG9BcnJheSggbmV3IENsYXNzPD8+WyBjbGFzc2VzLnNpemUoKSBdICkgOworICAgIENsYXNzW10gdG5nQ2xhc3NlcyA9IGNsYXNzZXMudG9BcnJheSggbmV3IENsYXNzPD8+WyBjbGFzc2VzLnNpemUoKSBdICkgOwogCi0JdG5nLnNldFRlc3RDbGFzc2VzKCB0bmdDbGFzc2VzICkgOworICAgIHRuZy5zZXRUZXN0Q2xhc3NlcyggdG5nQ2xhc3NlcyApIDsKIAotCXRuZy5ydW4oKSA7CisgICAgdG5nLnJ1bigpIDsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0bmcuaGFzRmFpbHVyZT0iK3RuZy5oYXNGYWlsdXJlKCkpOwotCVN5c3RlbS5leGl0KCB0bmcuaGFzRmFpbHVyZSgpID8gMSA6IDAgKSA7CisgICAgU3lzdGVtLmV4aXQoIHRuZy5oYXNGYWlsdXJlKCkgPyAxIDogMCApIDsKIAogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NvcmJhL3RpbWVyL3NyYy90ZXN0L0NvbnRyb2xsYWJsZUJhc2VTdWl0ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29yYmEvdGltZXIvc3JjL3Rlc3QvQ29udHJvbGxhYmxlQmFzZVN1aXRlLmphdmEKaW5kZXggMDk3NWViMS4uYjUxOGM2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29yYmEvdGltZXIvc3JjL3Rlc3QvQ29udHJvbGxhYmxlQmFzZVN1aXRlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29yYmEvdGltZXIvc3JjL3Rlc3QvQ29udHJvbGxhYmxlQmFzZVN1aXRlLmphdmEKQEAgLTQ3LDQwICs0Nyw0MCBAQAogICAgIHByaXZhdGUgQ29udHJvbGxhYmxlVGVzdCBjdCA7CiAKICAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBDb250cm9sbGFibGVUZXN0IGV4dGVuZHMgQ29udHJvbGxhYmxlQmFzZSB7Ci0JcHVibGljIENvbnRyb2xsYWJsZVRlc3QoIGludCBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjcmlwdGlvbiwKLQkgICAgVGltZXJGYWN0b3J5IGZhY3RvcnkgKSB7CisgICAgcHVibGljIENvbnRyb2xsYWJsZVRlc3QoIGludCBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjcmlwdGlvbiwKKyAgICAgICAgVGltZXJGYWN0b3J5IGZhY3RvcnkgKSB7CiAKLQkgICAgc3VwZXIoIGlkLCBuYW1lLCBkZXNjcmlwdGlvbiwgVGltZXJGYWN0b3J5SW1wbC5jbGFzcy5jYXN0KCBmYWN0b3J5ICkgKSA7Ci0JfQorICAgICAgICBzdXBlciggaWQsIG5hbWUsIGRlc2NyaXB0aW9uLCBUaW1lckZhY3RvcnlJbXBsLmNsYXNzLmNhc3QoIGZhY3RvcnkgKSApIDsKKyAgICB9CiAgICAgfQogCiAgICAgQENvbmZpZ3VyYXRpb24oIGJlZm9yZVRlc3QgPSB0cnVlICkKICAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsKLQlmYWN0b3J5ID0gVGltZXJGYWN0b3J5QnVpbGRlci5tYWtlKCAiQ1RGIiwgIk5vIGRlc2NyaXB0aW9uIiApIDsKLQljdCA9IG5ldyBDb250cm9sbGFibGVUZXN0KCBpZCwgbmFtZSwgZGVzY3JpcHRpb24sIGZhY3RvcnkgKSA7CisgICAgZmFjdG9yeSA9IFRpbWVyRmFjdG9yeUJ1aWxkZXIubWFrZSggIkNURiIsICJObyBkZXNjcmlwdGlvbiIgKSA7CisgICAgY3QgPSBuZXcgQ29udHJvbGxhYmxlVGVzdCggaWQsIG5hbWUsIGRlc2NyaXB0aW9uLCBmYWN0b3J5ICkgOwogICAgIH0KIAotICAgIEBDb25maWd1cmF0aW9uKCBhZnRlclRlc3QgPSB0cnVlICkgCisgICAgQENvbmZpZ3VyYXRpb24oIGFmdGVyVGVzdCA9IHRydWUgKQogICAgIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgewotCVRpbWVyRmFjdG9yeUJ1aWxkZXIuZGVzdHJveSggZmFjdG9yeSApIDsKKyAgICBUaW1lckZhY3RvcnlCdWlsZGVyLmRlc3Ryb3koIGZhY3RvcnkgKSA7CiAgICAgfQogCiAgICAgQFRlc3QoKQogICAgIHB1YmxpYyB2b2lkIHRlc3RJZCgpIHsKLQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCBpZCwgY3QuaWQoKSApIDsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCBpZCwgY3QuaWQoKSApIDsKICAgICB9CiAKLSAgICBAVGVzdCgpIAorICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCB0ZXN0RGVzY3JpcHRpb24oKSB7Ci0JQXNzZXJ0LmFzc2VydEVxdWFscyggZGVzY3JpcHRpb24sIGN0LmRlc2NyaXB0aW9uKCkgKSA7CisgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggZGVzY3JpcHRpb24sIGN0LmRlc2NyaXB0aW9uKCkgKSA7CiAgICAgfQogCiAgICAgQFRlc3QoKQogICAgIHB1YmxpYyB2b2lkIHRlc3RFbmFibGUoKSB7Ci0JQXNzZXJ0LmFzc2VydEZhbHNlKCBjdC5pc0VuYWJsZWQoKSApIDsKLQljdC5lbmFibGUoKSA7Ci0JQXNzZXJ0LmFzc2VydFRydWUoIGN0LmlzRW5hYmxlZCgpICkgOwotCWN0LmRpc2FibGUoKSA7Ci0JQXNzZXJ0LmFzc2VydEZhbHNlKCBjdC5pc0VuYWJsZWQoKSApIDsKKyAgICBBc3NlcnQuYXNzZXJ0RmFsc2UoIGN0LmlzRW5hYmxlZCgpICkgOworICAgIGN0LmVuYWJsZSgpIDsKKyAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY3QuaXNFbmFibGVkKCkgKSA7CisgICAgY3QuZGlzYWJsZSgpIDsKKyAgICBBc3NlcnQuYXNzZXJ0RmFsc2UoIGN0LmlzRW5hYmxlZCgpICkgOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NvcmJhL3RpbWVyL3NyYy90ZXN0L05hbWVkQmFzZVN1aXRlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb3JiYS90aW1lci9zcmMvdGVzdC9OYW1lZEJhc2VTdWl0ZS5qYXZhCmluZGV4IDEyZGE0ZWUuLmYyMWNiNWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NvcmJhL3RpbWVyL3NyYy90ZXN0L05hbWVkQmFzZVN1aXRlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29yYmEvdGltZXIvc3JjL3Rlc3QvTmFtZWRCYXNlU3VpdGUuamF2YQpAQCAtNDQsOTQgKzQ0LDk0IEBACiAgICAgcHJpdmF0ZSBOYW1lZFRlc3QgbmIyIDsKIAogICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIE5hbWVkVGVzdCBleHRlbmRzIE5hbWVkQmFzZSB7Ci0JcHVibGljIE5hbWVkVGVzdCggVGltZXJGYWN0b3J5IGZhY3RvcnksIFN0cmluZyBuYW1lICkgewotCSAgICBzdXBlciggZmFjdG9yeSwgbmFtZSApIDsKLQl9CisgICAgcHVibGljIE5hbWVkVGVzdCggVGltZXJGYWN0b3J5IGZhY3RvcnksIFN0cmluZyBuYW1lICkgeworICAgICAgICBzdXBlciggZmFjdG9yeSwgbmFtZSApIDsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBmaW5pc2goIFRpbWVyRmFjdG9yeSBmYWN0b3J5ICkgewotCSAgICBzZXRGYWN0b3J5KCBmYWN0b3J5ICkgOwotCX0KKyAgICBwdWJsaWMgdm9pZCBmaW5pc2goIFRpbWVyRmFjdG9yeSBmYWN0b3J5ICkgeworICAgICAgICBzZXRGYWN0b3J5KCBmYWN0b3J5ICkgOworICAgIH0KICAgICB9CiAKICAgICBAQ29uZmlndXJhdGlvbiggYmVmb3JlVGVzdCA9IHRydWUgKQogICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgewotCWZhY3RvcnkgPSBUaW1lckZhY3RvcnlCdWlsZGVyLm1ha2UoICJOVEYiLCAiTm8gZGVzY3JpcHRpb24iICkgOwotCW5iMSA9IG5ldyBOYW1lZFRlc3QoIGZhY3RvcnksIG5hbWUgKSA7Ci0JbmIyID0gbmV3IE5hbWVkVGVzdCggbnVsbCwgbmFtZSApIDsKKyAgICBmYWN0b3J5ID0gVGltZXJGYWN0b3J5QnVpbGRlci5tYWtlKCAiTlRGIiwgIk5vIGRlc2NyaXB0aW9uIiApIDsKKyAgICBuYjEgPSBuZXcgTmFtZWRUZXN0KCBmYWN0b3J5LCBuYW1lICkgOworICAgIG5iMiA9IG5ldyBOYW1lZFRlc3QoIG51bGwsIG5hbWUgKSA7CiAgICAgfQogCi0gICAgQENvbmZpZ3VyYXRpb24oIGFmdGVyVGVzdCA9IHRydWUgKSAKKyAgICBAQ29uZmlndXJhdGlvbiggYWZ0ZXJUZXN0ID0gdHJ1ZSApCiAgICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB7Ci0JVGltZXJGYWN0b3J5QnVpbGRlci5kZXN0cm95KCBmYWN0b3J5ICkgOworICAgIFRpbWVyRmFjdG9yeUJ1aWxkZXIuZGVzdHJveSggZmFjdG9yeSApIDsKICAgICB9CiAKLSAgICBAVGVzdCgpIAorICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCBuYW1lMSgpIHsKLQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCBuYW1lLCBuYjEubmFtZSgpICkgOworICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIG5hbWUsIG5iMS5uYW1lKCkgKSA7CiAgICAgfQogCi0gICAgQFRlc3QoKSAKKyAgICBAVGVzdCgpCiAgICAgcHVibGljIHZvaWQgbmFtZTIoKSB7Ci0JQXNzZXJ0LmFzc2VydEVxdWFscyggbmFtZSwgbmIyLm5hbWUoKSApIDsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCBuYW1lLCBuYjIubmFtZSgpICkgOwogICAgIH0KIAogICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCBmYWN0b3J5MSgpIHsKLQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCBmYWN0b3J5LCBuYjEuZmFjdG9yeSgpICkgOworICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIGZhY3RvcnksIG5iMS5mYWN0b3J5KCkgKSA7CiAgICAgfQogCiAgICAgQFRlc3QoKQotICAgIEBFeHBlY3RlZEV4Y2VwdGlvbnMoIHsgSWxsZWdhbFN0YXRlRXhjZXB0aW9uLmNsYXNzIH0gKSAKKyAgICBARXhwZWN0ZWRFeGNlcHRpb25zKCB7IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbi5jbGFzcyB9ICkKICAgICBwdWJsaWMgdm9pZCBmYWN0b3J5MigpIHsKLQlUaW1lckZhY3RvcnkgdGYgPSBuYjIuZmFjdG9yeSgpIDsKKyAgICBUaW1lckZhY3RvcnkgdGYgPSBuYjIuZmFjdG9yeSgpIDsKICAgICB9CiAKICAgICBAVGVzdCgpCiAgICAgcHVibGljIHZvaWQgZXF1YWxzKCkgewotCUFzc2VydC5hc3NlcnRFcXVhbHMoIG5iMSwgbmIyICkgOworICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIG5iMSwgbmIyICkgOwogICAgIH0KIAogICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCBoYXNoQ29kZTEoKSB7Ci0JQXNzZXJ0LmFzc2VydEVxdWFscyggbmIxLmhhc2hDb2RlKCksIG5hbWUuaGFzaENvZGUoKSApIDsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCBuYjEuaGFzaENvZGUoKSwgbmFtZS5oYXNoQ29kZSgpICkgOwogICAgIH0KIAogICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCBoYXNoQ29kZTIoKSB7Ci0JQXNzZXJ0LmFzc2VydEVxdWFscyggbmIyLmhhc2hDb2RlKCksIG5hbWUuaGFzaENvZGUoKSApIDsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCBuYjIuaGFzaENvZGUoKSwgbmFtZS5oYXNoQ29kZSgpICkgOwogICAgIH0KIAogICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCB0b1N0cmluZzEoKSB7Ci0JQXNzZXJ0LmFzc2VydEVxdWFscyggZmFjdG9yeS5uYW1lKCkgKyAiOiIgKyAKLQkgICAgbmFtZSwgbmIxLnRvU3RyaW5nKCkgKSA7CisgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggZmFjdG9yeS5uYW1lKCkgKyAiOiIgKworICAgICAgICBuYW1lLCBuYjEudG9TdHJpbmcoKSApIDsKICAgICB9CiAKICAgICBAVGVzdCgpCi0gICAgQEV4cGVjdGVkRXhjZXB0aW9ucyggeyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24uY2xhc3MgfSApIAorICAgIEBFeHBlY3RlZEV4Y2VwdGlvbnMoIHsgSWxsZWdhbFN0YXRlRXhjZXB0aW9uLmNsYXNzIH0gKQogICAgIHB1YmxpYyB2b2lkIHRvU3RyaW5nMigpIHsKLQlTdHJpbmcgdHMgPSBuYjIudG9TdHJpbmcoKSA7CisgICAgU3RyaW5nIHRzID0gbmIyLnRvU3RyaW5nKCkgOwogICAgIH0KIAogICAgIEBUZXN0KCkKLSAgICBARXhwZWN0ZWRFeGNlcHRpb25zKCB7IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbi5jbGFzcyB9ICkgCisgICAgQEV4cGVjdGVkRXhjZXB0aW9ucyggeyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24uY2xhc3MgfSApCiAgICAgcHVibGljIHZvaWQgc2V0RmFjdG9yeTEoKSB7Ci0JbmIxLmZpbmlzaCggZmFjdG9yeSApIDsKKyAgICBuYjEuZmluaXNoKCBmYWN0b3J5ICkgOwogICAgIH0KIAotICAgIEBUZXN0KCBkZXBlbmRzT25NZXRob2RzID0geyAidG9TdHJpbmcyIiwgImZhY3RvcnkyIiB9ICkgCisgICAgQFRlc3QoIGRlcGVuZHNPbk1ldGhvZHMgPSB7ICJ0b1N0cmluZzIiLCAiZmFjdG9yeTIiIH0gKQogICAgIHB1YmxpYyB2b2lkIHNldEZhY3RvcnkyKCkgewotCW5iMi5maW5pc2goIGZhY3RvcnkgKSA7CisgICAgbmIyLmZpbmlzaCggZmFjdG9yeSApIDsKICAgICB9CiAKICAgICBAVGVzdCggZGVwZW5kc09uTWV0aG9kcyA9IHsgInNldEZhY3RvcnkyIiB9ICkKLSAgICBwdWJsaWMgdm9pZCBmYWN0b3J5MlBvc3QoKSB7CQotCUFzc2VydC5hc3NlcnRFcXVhbHMoIGZhY3RvcnksIG5iMi5mYWN0b3J5KCkgKSA7CQorICAgIHB1YmxpYyB2b2lkIGZhY3RvcnkyUG9zdCgpIHsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCBmYWN0b3J5LCBuYjIuZmFjdG9yeSgpICkgOwogICAgIH0KIAogICAgIEBUZXN0KCBkZXBlbmRzT25NZXRob2RzID0geyAic2V0RmFjdG9yeTIiIH0gKQotICAgIHB1YmxpYyB2b2lkIHRvU3RyaW5nMlBvc3QoKSB7CQotCUFzc2VydC5hc3NlcnRFcXVhbHMoIGZhY3RvcnkubmFtZSgpICsgIjoiICsgCi0JICAgIG5hbWUsIG5iMi50b1N0cmluZygpICkgOworICAgIHB1YmxpYyB2b2lkIHRvU3RyaW5nMlBvc3QoKSB7CisgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggZmFjdG9yeS5uYW1lKCkgKyAiOiIgKworICAgICAgICBuYW1lLCBuYjIudG9TdHJpbmcoKSApIDsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb3JiYS90aW1lci9zcmMvdGVzdC9UaW1lckZhY3RvcnlTdWl0ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29yYmEvdGltZXIvc3JjL3Rlc3QvVGltZXJGYWN0b3J5U3VpdGUuamF2YQppbmRleCAyMjNhYzkxLi4wMGRlZGEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb3JiYS90aW1lci9zcmMvdGVzdC9UaW1lckZhY3RvcnlTdWl0ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NvcmJhL3RpbWVyL3NyYy90ZXN0L1RpbWVyRmFjdG9yeVN1aXRlLmphdmEKQEAgLTU2LDEyMSArNTYsMTIxIEBACiAgICAgcHJpdmF0ZSBUaW1lckdyb3VwIHRnMSA7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRVhQRUNURURfTlVNX1RJTUVSUyA9IDIgOwotICAgIAorCiAgICAgLy8gUmVtZW1iZXIsIHRoZSBmYWN0b3J5IGlzIGFsc28gYSBUaW1lckdyb3VwIQogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFWFBFQ1RFRF9OVU1fVElNRVJfR1JPVVBTID0gMiA7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRVhQRUNURURfTlVNX0lEUyA9IAotCUVYUEVDVEVEX05VTV9USU1FUlMgKyBFWFBFQ1RFRF9OVU1fVElNRVJfR1JPVVBTIDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRVhQRUNURURfTlVNX0lEUyA9CisgICAgRVhQRUNURURfTlVNX1RJTUVSUyArIEVYUEVDVEVEX05VTV9USU1FUl9HUk9VUFMgOwogCiAKICAgICBAQ29uZmlndXJhdGlvbiggYmVmb3JlVGVzdCA9IHRydWUgKQogICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgewotCXRmID0gVGltZXJGYWN0b3J5QnVpbGRlci5tYWtlKCB0Zk5hbWUsIHRmRGVzY3JpcHRpb24gKSA7Ci0JdDEgPSB0Zi5tYWtlVGltZXIoIHRpbWVyMU5hbWUsIHRpbWVyMURlc2NyaXB0aW9uICkgOwotCXQyID0gdGYubWFrZVRpbWVyKCB0aW1lcjJOYW1lLCB0aW1lcjJEZXNjcmlwdGlvbiApIDsKLQl0ZzEgPSB0Zi5tYWtlVGltZXJHcm91cCggdGltZXJHcm91cDFOYW1lLCB0aW1lckdyb3VwMURlc2NyaXB0aW9uICkgOworICAgIHRmID0gVGltZXJGYWN0b3J5QnVpbGRlci5tYWtlKCB0Zk5hbWUsIHRmRGVzY3JpcHRpb24gKSA7CisgICAgdDEgPSB0Zi5tYWtlVGltZXIoIHRpbWVyMU5hbWUsIHRpbWVyMURlc2NyaXB0aW9uICkgOworICAgIHQyID0gdGYubWFrZVRpbWVyKCB0aW1lcjJOYW1lLCB0aW1lcjJEZXNjcmlwdGlvbiApIDsKKyAgICB0ZzEgPSB0Zi5tYWtlVGltZXJHcm91cCggdGltZXJHcm91cDFOYW1lLCB0aW1lckdyb3VwMURlc2NyaXB0aW9uICkgOwogICAgIH0KIAotICAgIEBDb25maWd1cmF0aW9uKCBhZnRlclRlc3QgPSB0cnVlICkgCisgICAgQENvbmZpZ3VyYXRpb24oIGFmdGVyVGVzdCA9IHRydWUgKQogICAgIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgewotCVRpbWVyRmFjdG9yeUJ1aWxkZXIuZGVzdHJveSggdGYgKSA7CisgICAgVGltZXJGYWN0b3J5QnVpbGRlci5kZXN0cm95KCB0ZiApIDsKICAgICB9CiAKICAgICBAVGVzdCgpCiAgICAgcHVibGljIHZvaWQgdGVzdE51bWJlck9mSWRzKCkgewotCUFzc2VydC5hc3NlcnRFcXVhbHMoIEVYUEVDVEVEX05VTV9JRFMsIHRmLm51bWJlck9mSWRzKCkgKSA7CisgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggRVhQRUNURURfTlVNX0lEUywgdGYubnVtYmVyT2ZJZHMoKSApIDsKICAgICB9CiAKICAgICBAVGVzdCgpCiAgICAgcHVibGljIHZvaWQgdGVzdEdldENvbnRyb2xsYWJsZTEoKSB7Ci0JaW50IGlkID0gdDEuaWQoKSA7Ci0JQ29udHJvbGxhYmxlIGNvbiA9IHRmLmdldENvbnRyb2xsYWJsZSggaWQgKSA7Ci0JQXNzZXJ0LmFzc2VydFRydWUoIGNvbiBpbnN0YW5jZW9mIFRpbWVyICkgOwotCVRpbWVyIHRpbWVyID0gVGltZXIuY2xhc3MuY2FzdCggY29uICkgOwotCUFzc2VydC5hc3NlcnRFcXVhbHMoIHQxLCB0aW1lciApIDsKKyAgICBpbnQgaWQgPSB0MS5pZCgpIDsKKyAgICBDb250cm9sbGFibGUgY29uID0gdGYuZ2V0Q29udHJvbGxhYmxlKCBpZCApIDsKKyAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY29uIGluc3RhbmNlb2YgVGltZXIgKSA7CisgICAgVGltZXIgdGltZXIgPSBUaW1lci5jbGFzcy5jYXN0KCBjb24gKSA7CisgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggdDEsIHRpbWVyICkgOwogICAgIH0KIAogICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udHJvbGxhYmxlMigpIHsKLQlpbnQgaWQgPSB0Mi5pZCgpIDsKLQlDb250cm9sbGFibGUgY29uID0gdGYuZ2V0Q29udHJvbGxhYmxlKCBpZCApIDsKLQlBc3NlcnQuYXNzZXJ0VHJ1ZSggY29uIGluc3RhbmNlb2YgVGltZXIgKSA7Ci0JVGltZXIgdGltZXIgPSBUaW1lci5jbGFzcy5jYXN0KCBjb24gKSA7Ci0JQXNzZXJ0LmFzc2VydEVxdWFscyggdDIsIHRpbWVyICkgOworICAgIGludCBpZCA9IHQyLmlkKCkgOworICAgIENvbnRyb2xsYWJsZSBjb24gPSB0Zi5nZXRDb250cm9sbGFibGUoIGlkICkgOworICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjb24gaW5zdGFuY2VvZiBUaW1lciApIDsKKyAgICBUaW1lciB0aW1lciA9IFRpbWVyLmNsYXNzLmNhc3QoIGNvbiApIDsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCB0MiwgdGltZXIgKSA7CiAgICAgfQogCiAgICAgQFRlc3QoKQogICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRDb250cm9sbGFibGUzKCkgewotCWludCBpZCA9IHRnMS5pZCgpIDsKLQlDb250cm9sbGFibGUgY29uID0gdGYuZ2V0Q29udHJvbGxhYmxlKCBpZCApIDsKLQlBc3NlcnQuYXNzZXJ0VHJ1ZSggY29uIGluc3RhbmNlb2YgVGltZXJHcm91cCApIDsKLQlUaW1lckdyb3VwIHRnID0gVGltZXJHcm91cC5jbGFzcy5jYXN0KCBjb24gKSA7Ci0JQXNzZXJ0LmFzc2VydEVxdWFscyggdGcxLCB0ZyApIDsKKyAgICBpbnQgaWQgPSB0ZzEuaWQoKSA7CisgICAgQ29udHJvbGxhYmxlIGNvbiA9IHRmLmdldENvbnRyb2xsYWJsZSggaWQgKSA7CisgICAgQXNzZXJ0LmFzc2VydFRydWUoIGNvbiBpbnN0YW5jZW9mIFRpbWVyR3JvdXAgKSA7CisgICAgVGltZXJHcm91cCB0ZyA9IFRpbWVyR3JvdXAuY2xhc3MuY2FzdCggY29uICkgOworICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIHRnMSwgdGcgKSA7CiAgICAgfQogCiAgICAgQFRlc3QoKQogICAgIHB1YmxpYyB2b2lkIHRlc3RNYWtlTG9nRXZlbnRIYW5kbGVyKCkgewotCVN0cmluZyBuYW1lID0gIkxvZ0V2ZW50SGFuZGxlcjEiIDsKLQlUaW1lckV2ZW50SGFuZGxlciBoMSA9IHRmLm1ha2VMb2dFdmVudEhhbmRsZXIoIG5hbWUgKSA7Ci0JQXNzZXJ0LmFzc2VydEVxdWFscyggaDEubmFtZSgpLCBuYW1lICkgOwotCXRyeSB7Ci0JICAgIHRmLm1ha2VMb2dFdmVudEhhbmRsZXIoIG5hbWUgKSA7Ci0JICAgIEFzc2VydC5mYWlsKCAiU2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbiIgKSA7Ci0JfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4YykgewotCSAgICAvLyB0aGlzIGlzIGNvcnJlY3QKLQl9IGNhdGNoIChUaHJvd2FibGUgdGhyKSB7Ci0JICAgIEFzc2VydC5mYWlsKCAiVW5leHBlY3RlZCBleGNlcHRpb24gIiArIHRociApIDsKLQl9Ci0JdHJ5IHsKLQkgICAgdGYubWFrZVN0YXRzRXZlbnRIYW5kbGVyKCBuYW1lICkgOwotCSAgICBBc3NlcnQuZmFpbCggIlNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24iICkgOwotCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleGMpIHsKLQkgICAgLy8gdGhpcyBpcyBjb3JyZWN0Ci0JfSBjYXRjaCAoVGhyb3dhYmxlIHRocikgewotCSAgICBBc3NlcnQuZmFpbCggIlVuZXhwZWN0ZWQgZXhjZXB0aW9uICIgKyB0aHIgKSA7Ci0JfQotCXRmLnJlbW92ZVRpbWVyRXZlbnRIYW5kbGVyKCBoMSApIDsKLQloMSA9IHRmLm1ha2VMb2dFdmVudEhhbmRsZXIoIG5hbWUgKSA7Ci0JdGYucmVtb3ZlVGltZXJFdmVudEhhbmRsZXIoIGgxICkgOwotCWgxID0gdGYubWFrZVN0YXRzRXZlbnRIYW5kbGVyKCBuYW1lICkgOworICAgIFN0cmluZyBuYW1lID0gIkxvZ0V2ZW50SGFuZGxlcjEiIDsKKyAgICBUaW1lckV2ZW50SGFuZGxlciBoMSA9IHRmLm1ha2VMb2dFdmVudEhhbmRsZXIoIG5hbWUgKSA7CisgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggaDEubmFtZSgpLCBuYW1lICkgOworICAgIHRyeSB7CisgICAgICAgIHRmLm1ha2VMb2dFdmVudEhhbmRsZXIoIG5hbWUgKSA7CisgICAgICAgIEFzc2VydC5mYWlsKCAiU2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbiIgKSA7CisgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4YykgeworICAgICAgICAvLyB0aGlzIGlzIGNvcnJlY3QKKyAgICB9IGNhdGNoIChUaHJvd2FibGUgdGhyKSB7CisgICAgICAgIEFzc2VydC5mYWlsKCAiVW5leHBlY3RlZCBleGNlcHRpb24gIiArIHRociApIDsKKyAgICB9CisgICAgdHJ5IHsKKyAgICAgICAgdGYubWFrZVN0YXRzRXZlbnRIYW5kbGVyKCBuYW1lICkgOworICAgICAgICBBc3NlcnQuZmFpbCggIlNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24iICkgOworICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleGMpIHsKKyAgICAgICAgLy8gdGhpcyBpcyBjb3JyZWN0CisgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRocikgeworICAgICAgICBBc3NlcnQuZmFpbCggIlVuZXhwZWN0ZWQgZXhjZXB0aW9uICIgKyB0aHIgKSA7CisgICAgfQorICAgIHRmLnJlbW92ZVRpbWVyRXZlbnRIYW5kbGVyKCBoMSApIDsKKyAgICBoMSA9IHRmLm1ha2VMb2dFdmVudEhhbmRsZXIoIG5hbWUgKSA7CisgICAgdGYucmVtb3ZlVGltZXJFdmVudEhhbmRsZXIoIGgxICkgOworICAgIGgxID0gdGYubWFrZVN0YXRzRXZlbnRIYW5kbGVyKCBuYW1lICkgOwogICAgIH0KIAogICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCB0ZXN0VGltZXJzKCkgewotCU1hcDxTdHJpbmcsPyBleHRlbmRzIFRpbWVyPiB0bWFwID0gdGYudGltZXJzKCkgOwotCUFzc2VydC5hc3NlcnRFcXVhbHMoIHRtYXAuc2l6ZSgpLCBFWFBFQ1RFRF9OVU1fVElNRVJTICkgOwotCVRpbWVyIHgxID0gdG1hcC5nZXQoIHRpbWVyMU5hbWUgKSA7Ci0JQXNzZXJ0LmFzc2VydEVxdWFscyggeDEsIHQxICkgOwotCVRpbWVyIHgyID0gdG1hcC5nZXQoIHRpbWVyMk5hbWUgKSA7Ci0JQXNzZXJ0LmFzc2VydEVxdWFscyggeDIsIHQyICkgOworICAgIE1hcDxTdHJpbmcsPyBleHRlbmRzIFRpbWVyPiB0bWFwID0gdGYudGltZXJzKCkgOworICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIHRtYXAuc2l6ZSgpLCBFWFBFQ1RFRF9OVU1fVElNRVJTICkgOworICAgIFRpbWVyIHgxID0gdG1hcC5nZXQoIHRpbWVyMU5hbWUgKSA7CisgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggeDEsIHQxICkgOworICAgIFRpbWVyIHgyID0gdG1hcC5nZXQoIHRpbWVyMk5hbWUgKSA7CisgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggeDIsIHQyICkgOwogICAgIH0KIAogICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCB0ZXN0VGltZXJHcm91cHMoKSB7Ci0JTWFwPFN0cmluZyw/IGV4dGVuZHMgVGltZXJHcm91cD4gdG1hcCA9IHRmLnRpbWVyR3JvdXBzKCkgOwotCUFzc2VydC5hc3NlcnRFcXVhbHMoIHRtYXAuc2l6ZSgpLCBFWFBFQ1RFRF9OVU1fVElNRVJfR1JPVVBTICkgOwotCVRpbWVyR3JvdXAgeDEgPSB0bWFwLmdldCggdGltZXJHcm91cDFOYW1lICkgOwotCUFzc2VydC5hc3NlcnRFcXVhbHMoIHgxLCB0ZzEgKSA7Ci0JVGltZXJHcm91cCB4MiA9IHRtYXAuZ2V0KCB0Zk5hbWUgKSA7Ci0JQXNzZXJ0LmFzc2VydEVxdWFscyggeDIsIHRmICkgOworICAgIE1hcDxTdHJpbmcsPyBleHRlbmRzIFRpbWVyR3JvdXA+IHRtYXAgPSB0Zi50aW1lckdyb3VwcygpIDsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCB0bWFwLnNpemUoKSwgRVhQRUNURURfTlVNX1RJTUVSX0dST1VQUyApIDsKKyAgICBUaW1lckdyb3VwIHgxID0gdG1hcC5nZXQoIHRpbWVyR3JvdXAxTmFtZSApIDsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCB4MSwgdGcxICkgOworICAgIFRpbWVyR3JvdXAgeDIgPSB0bWFwLmdldCggdGZOYW1lICkgOworICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIHgyLCB0ZiApIDsKICAgICB9CiAKICAgICBAVGVzdCgpCiAgICAgcHVibGljIHZvaWQgdGVzdE1ha2VDb250cm9sbGVyKCkgewotCVN0cmluZyBuYW1lID0gIkNvbnRyb2xsZXIxIiA7Ci0JVGltZXJFdmVudENvbnRyb2xsZXIgY29udHJvbGxlciA9IHRmLm1ha2VDb250cm9sbGVyKCBuYW1lICkgOwotCUFzc2VydC5hc3NlcnRFcXVhbHMoIGNvbnRyb2xsZXIubmFtZSgpLCBuYW1lICkgOwotCXRyeSB7Ci0JICAgIHRmLm1ha2VDb250cm9sbGVyKCBuYW1lICkgOwotCSAgICBBc3NlcnQuZmFpbCggIlNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24iICkgOwotCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleGMpIHsKLQkgICAgLy8gdGhpcyBpcyBjb3JyZWN0Ci0JfSBjYXRjaCAoVGhyb3dhYmxlIHRocikgewotCSAgICBBc3NlcnQuZmFpbCggIlVuZXhwZWN0ZWQgZXhjZXB0aW9uICIgKyB0aHIgKSA7Ci0JfQotCXRmLnJlbW92ZUNvbnRyb2xsZXIoIGNvbnRyb2xsZXIgKSA7Ci0JY29udHJvbGxlciA9IHRmLm1ha2VDb250cm9sbGVyKCBuYW1lICkgOworICAgIFN0cmluZyBuYW1lID0gIkNvbnRyb2xsZXIxIiA7CisgICAgVGltZXJFdmVudENvbnRyb2xsZXIgY29udHJvbGxlciA9IHRmLm1ha2VDb250cm9sbGVyKCBuYW1lICkgOworICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIGNvbnRyb2xsZXIubmFtZSgpLCBuYW1lICkgOworICAgIHRyeSB7CisgICAgICAgIHRmLm1ha2VDb250cm9sbGVyKCBuYW1lICkgOworICAgICAgICBBc3NlcnQuZmFpbCggIlNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24iICkgOworICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleGMpIHsKKyAgICAgICAgLy8gdGhpcyBpcyBjb3JyZWN0CisgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRocikgeworICAgICAgICBBc3NlcnQuZmFpbCggIlVuZXhwZWN0ZWQgZXhjZXB0aW9uICIgKyB0aHIgKSA7CisgICAgfQorICAgIHRmLnJlbW92ZUNvbnRyb2xsZXIoIGNvbnRyb2xsZXIgKSA7CisgICAgY29udHJvbGxlciA9IHRmLm1ha2VDb250cm9sbGVyKCBuYW1lICkgOwogICAgIH0KIAogICAgIC8vIGVuYWJsZWRTZXQgYW5kIGFjdGl2ZVNldCBhcmUgdGVzdGVkIGluIHRoZSBBY3RpdmF0aW9uU3VpdGUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NvcmJhL3RpbWVyL3NyYy90ZXN0L1RpbWVyUG9pbnRzU3VpdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NvcmJhL3RpbWVyL3NyYy90ZXN0L1RpbWVyUG9pbnRzU3VpdGUuamF2YQppbmRleCBhOTYxZDdjLi5kYzBlZDAwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb3JiYS90aW1lci9zcmMvdGVzdC9UaW1lclBvaW50c1N1aXRlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29yYmEvdGltZXIvc3JjL3Rlc3QvVGltZXJQb2ludHNTdWl0ZS5qYXZhCkBAIC00OCwxOSArNDgsMTkgQEAKIHB1YmxpYyBjbGFzcyBUaW1lclBvaW50c1N1aXRlIHsKICAgICBAVGVzdCgpCiAgICAgcHVibGljIHZvaWQgdGVzdFhNTFBhcnNlcigpIHsKLQkvLyBXZSBzaG91bGQgYmUgcnVubmluZyB0aGlzIHRlc3QgZnJvbSB0aGUgY29yYmEvdGltZXIgZGlyZWN0b3J5LgotCVN0cmluZyBmaWxlTmFtZSA9ICJzcmMvdGVzdC90aW1pbmcueG1sIiA7CisgICAgLy8gV2Ugc2hvdWxkIGJlIHJ1bm5pbmcgdGhpcyB0ZXN0IGZyb20gdGhlIGNvcmJhL3RpbWVyIGRpcmVjdG9yeS4KKyAgICBTdHJpbmcgZmlsZU5hbWUgPSAic3JjL3Rlc3QvdGltaW5nLnhtbCIgOwogCi0JUGFpcjxTdHJpbmcsVGltZXJGYWN0b3J5PiByZXN1bHQgPSBudWxsIDsKLQl0cnkgewotCSAgICAvLyBQYXJzZSB0aGUgWE1MIGZpbGUuCi0JICAgIHJlc3VsdCA9IFRpbWVyUG9pbnRTb3VyY2VHZW5lcmF0b3IucGFyc2VEZXNjcmlwdGlvbiggZmlsZU5hbWUgKSA7CisgICAgUGFpcjxTdHJpbmcsVGltZXJGYWN0b3J5PiByZXN1bHQgPSBudWxsIDsKKyAgICB0cnkgeworICAgICAgICAvLyBQYXJzZSB0aGUgWE1MIGZpbGUuCisgICAgICAgIHJlc3VsdCA9IFRpbWVyUG9pbnRTb3VyY2VHZW5lcmF0b3IucGFyc2VEZXNjcmlwdGlvbiggZmlsZU5hbWUgKSA7CiAKLQkgICAgLy8gVHJ5IHRvIGdlbmVyYXRlIHRoZSBzb3VyY2UgZmlsZQotCSAgICBUaW1lclBvaW50U291cmNlR2VuZXJhdG9yLmdlbmVyYXRlU291cmNlRmlsZSggImdlbiIsIHJlc3VsdCApIDsKLQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2V4YykgewotCSAgICBpb2V4Yy5wcmludFN0YWNrVHJhY2UoKSA7Ci0JICAgIEFzc2VydC5mYWlsKCAiSU9FeGNlcHRpb246ICIgKyBpb2V4YyApIDsKLQl9CisgICAgICAgIC8vIFRyeSB0byBnZW5lcmF0ZSB0aGUgc291cmNlIGZpbGUKKyAgICAgICAgVGltZXJQb2ludFNvdXJjZUdlbmVyYXRvci5nZW5lcmF0ZVNvdXJjZUZpbGUoICJnZW4iLCByZXN1bHQgKSA7CisgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9leGMpIHsKKyAgICAgICAgaW9leGMucHJpbnRTdGFja1RyYWNlKCkgOworICAgICAgICBBc3NlcnQuZmFpbCggIklPRXhjZXB0aW9uOiAiICsgaW9leGMgKSA7CisgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NvcmJhL3RpbWVyL3NyYy90ZXN0L3RpbWluZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb3JiYS90aW1lci9zcmMvdGVzdC90aW1pbmcueG1sCmluZGV4IGI3ZWUzNTkuLjk3MTUxMWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NvcmJhL3RpbWVyL3NyYy90ZXN0L3RpbWluZy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29yYmEvdGltZXIvc3JjL3Rlc3QvdGltaW5nLnhtbApAQCAtMzUsMzQgKzM1LDM0IEBACiAgICAgPHRpbWVyIG5hbWU9InRlc3Q3IiBkZXNjcmlwdGlvbj0iQSB0ZXN0IHRpbWVyIi8+CiAKICAgICA8dGltZXJHcm91cCBuYW1lPSJ0ZzEiIGRlc2NyaXB0aW9uPSJBIHRlc3QgdGltZXIgZ3JvdXAiPgotCTxjb250YWlucyBuYW1lPSJ0ZXN0MSIvPgotCTxjb250YWlucyBuYW1lPSJ0ZXN0MiIvPgotCTxjb250YWlucyBuYW1lPSJ0ZXN0MyIvPgotCTxjb250YWlucyBuYW1lPSJ0ZzMiLz4KKyAgICA8Y29udGFpbnMgbmFtZT0idGVzdDEiLz4KKyAgICA8Y29udGFpbnMgbmFtZT0idGVzdDIiLz4KKyAgICA8Y29udGFpbnMgbmFtZT0idGVzdDMiLz4KKyAgICA8Y29udGFpbnMgbmFtZT0idGczIi8+CiAgICAgPC90aW1lckdyb3VwPgogCiAgICAgPHRpbWVyR3JvdXAgbmFtZT0idGcyIiBkZXNjcmlwdGlvbj0iQSB0ZXN0IHRpbWVyIGdyb3VwIj4KLQk8Y29udGFpbnMgbmFtZT0idGVzdDQiLz4KLQk8Y29udGFpbnMgbmFtZT0idGVzdDUiLz4KLQk8Y29udGFpbnMgbmFtZT0idGcxIi8+CisgICAgPGNvbnRhaW5zIG5hbWU9InRlc3Q0Ii8+CisgICAgPGNvbnRhaW5zIG5hbWU9InRlc3Q1Ii8+CisgICAgPGNvbnRhaW5zIG5hbWU9InRnMSIvPgogICAgIDwvdGltZXJHcm91cD4KIAogICAgIDx0aW1lckdyb3VwIG5hbWU9InRnMyIgZGVzY3JpcHRpb249IkEgdGVzdCB0aW1lciBncm91cCI+Ci0JPGNvbnRhaW5zIG5hbWU9InRlc3Q2Ii8+Ci0JPGNvbnRhaW5zIG5hbWU9InRlc3Q3Ii8+Ci0JPGNvbnRhaW5zIG5hbWU9InRnMiIvPgorICAgIDxjb250YWlucyBuYW1lPSJ0ZXN0NiIvPgorICAgIDxjb250YWlucyBuYW1lPSJ0ZXN0NyIvPgorICAgIDxjb250YWlucyBuYW1lPSJ0ZzIiLz4KICAgICA8L3RpbWVyR3JvdXA+CiAKICAgICA8dGltZXJHcm91cCBuYW1lPSJ0cmFuc3BvcnRDbGllbnQiIGRlc2NyaXB0aW9uPSJNYWpvciBldmVudHMgaW4gY2xpZW50IHNpZGUgcmVxdWVzdCBjeWNsZSI+Ci0JPGNvbnRhaW5zIG5hbWU9Imhhc05leHROZXh0Ii8+Ci0JPGNvbnRhaW5zIG5hbWU9ImNvbm5lY3Rpb25TZXR1cCIvPgotCTxjb250YWlucyBuYW1lPSJjbGllbnRFbmNvZGluZyIvPgotCTxjb250YWlucyBuYW1lPSJjbGllbnRUcmFuc3BvcnRBbmRXYWl0Ii8+Ci0JPGNvbnRhaW5zIG5hbWU9ImNsaWVudERlY29kaW5nIi8+CisgICAgPGNvbnRhaW5zIG5hbWU9Imhhc05leHROZXh0Ii8+CisgICAgPGNvbnRhaW5zIG5hbWU9ImNvbm5lY3Rpb25TZXR1cCIvPgorICAgIDxjb250YWlucyBuYW1lPSJjbGllbnRFbmNvZGluZyIvPgorICAgIDxjb250YWlucyBuYW1lPSJjbGllbnRUcmFuc3BvcnRBbmRXYWl0Ii8+CisgICAgPGNvbnRhaW5zIG5hbWU9ImNsaWVudERlY29kaW5nIi8+CiAgICAgPC90aW1lckdyb3VwPgogCiAgICAgPHRpbWVyR3JvdXAgbmFtZT0idHJhbnNwb3J0IiBkZXNjcmlwdGlvbj0iQWxsIHRyYW5zcG9ydCBhY3Rpdml0eSI+Ci0JPGNvbnRhaW5zIG5hbWU9InRyYW5zcG9ydENsaWVudCIvPgorICAgIDxjb250YWlucyBuYW1lPSJ0cmFuc3BvcnRDbGllbnQiLz4KICAgICA8L3RpbWVyR3JvdXA+CiA8L3RpbWluZz4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29yYmEvdGltZXIvc3JjL3V0aWxzL0xvZ1Byb2Nlc3NvckF2ZXJhZ2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb3JiYS90aW1lci9zcmMvdXRpbHMvTG9nUHJvY2Vzc29yQXZlcmFnZXIuamF2YQppbmRleCBiMjFjMjYyLi4yYzk1NDM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb3JiYS90aW1lci9zcmMvdXRpbHMvTG9nUHJvY2Vzc29yQXZlcmFnZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb3JiYS90aW1lci9zcmMvdXRpbHMvTG9nUHJvY2Vzc29yQXZlcmFnZXIuamF2YQpAQCAtNjQsNzUgKzY0LDc1IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIFNDQUxFID0gMTAwMDAwMDAwMDsKIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGF2KSAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhdikKICAgICB7Ci0JZGF0YSA9IG5ldyBIYXNoTWFwPEludGVnZXIsIFBvaW50PigpOwotCWJlZ2luUG9pbnROYW1lVG9JbnQgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEludGVnZXI+KCk7Ci0JZmlsZW5hbWUgPSBhdlswXTsKKyAgICBkYXRhID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgUG9pbnQ+KCk7CisgICAgYmVnaW5Qb2ludE5hbWVUb0ludCA9IG5ldyBIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4oKTsKKyAgICBmaWxlbmFtZSA9IGF2WzBdOwogCi0JdHJ5IHsKLQkgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZmlsZW5hbWUpKTsKLQkgICAgcmVhZFBvaW50cyhicik7Ci0JICAgIHJlYWREYXRhKGJyKTsKLQkgICAgc2hvd1Jlc3VsdHMoKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIHRyeSB7CisgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZpbGVuYW1lKSk7CisgICAgICAgIHJlYWRQb2ludHMoYnIpOworICAgICAgICByZWFkRGF0YShicik7CisgICAgICAgIHNob3dSZXN1bHRzKCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcmVhZFBvaW50cyhCdWZmZXJlZFJlYWRlciBicikKLQl0aHJvd3MgRXhjZXB0aW9uCisgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLQlTdHJpbmcgbGluZTsKLQlpbnQgaWQgPSAwOwotCXdoaWxlICgobGluZSA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKLQkgICAgaWYgKGxpbmUuZXF1YWxzKCIjIyMjIyIpKSB7Ci0JCXJldHVybjsKLQkgICAgfQotCSAgICBTdHJpbmdbXSBiZWdpbk9yRW5kQW5kUG9pbnROYW1lID0gbGluZS5zcGxpdCgiICIpOwotCSAgICBTdHJpbmcgYmVnaW5PckVuZCA9IGJlZ2luT3JFbmRBbmRQb2ludE5hbWVbMF07Ci0JICAgIFN0cmluZyBuYW1lICAgICAgID0gYmVnaW5PckVuZEFuZFBvaW50TmFtZVsxXTsKLQkgICAgaW50IGludElkID0gaWQrKzsKLQkgICAgaWYgKGJlZ2luT3JFbmQuZXF1YWxzKCJCRUdJTiIpKSB7Ci0JCWJlZ2luUG9pbnROYW1lVG9JbnQucHV0KG5hbWUsIGludElkKTsKLQkJZGF0YS5wdXQoaW50SWQsIG5ldyBCZWdpblBvaW50KGludElkLCBuYW1lKSk7Ci0JICAgIH0gZWxzZSB7Ci0JCWRhdGEucHV0KGludElkLCAKLQkJCSBuZXcgRW5kUG9pbnQoaW50SWQsIG5hbWUsIGRhdGEsIGJlZ2luUG9pbnROYW1lVG9JbnQpKTsKLQkgICAgfQotCX0KKyAgICBTdHJpbmcgbGluZTsKKyAgICBpbnQgaWQgPSAwOworICAgIHdoaWxlICgobGluZSA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKKyAgICAgICAgaWYgKGxpbmUuZXF1YWxzKCIjIyMjIyIpKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmdbXSBiZWdpbk9yRW5kQW5kUG9pbnROYW1lID0gbGluZS5zcGxpdCgiICIpOworICAgICAgICBTdHJpbmcgYmVnaW5PckVuZCA9IGJlZ2luT3JFbmRBbmRQb2ludE5hbWVbMF07CisgICAgICAgIFN0cmluZyBuYW1lICAgICAgID0gYmVnaW5PckVuZEFuZFBvaW50TmFtZVsxXTsKKyAgICAgICAgaW50IGludElkID0gaWQrKzsKKyAgICAgICAgaWYgKGJlZ2luT3JFbmQuZXF1YWxzKCJCRUdJTiIpKSB7CisgICAgICAgIGJlZ2luUG9pbnROYW1lVG9JbnQucHV0KG5hbWUsIGludElkKTsKKyAgICAgICAgZGF0YS5wdXQoaW50SWQsIG5ldyBCZWdpblBvaW50KGludElkLCBuYW1lKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgIGRhdGEucHV0KGludElkLAorICAgICAgICAgICAgIG5ldyBFbmRQb2ludChpbnRJZCwgbmFtZSwgZGF0YSwgYmVnaW5Qb2ludE5hbWVUb0ludCkpOworICAgICAgICB9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCByZWFkRGF0YShCdWZmZXJlZFJlYWRlciBicikKLQl0aHJvd3MgRXhjZXB0aW9uCisgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLQlTdHJpbmcgbGluZTsKLQl3aGlsZSAoKGxpbmUgPSBici5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0JICAgIFN0cmluZ1tdIGlkQW5kVGltZSA9IGxpbmUuc3BsaXQoIiAiKTsKLQkgICAgaW50IGlkID0gSW50ZWdlci5wYXJzZUludChpZEFuZFRpbWVbMF0pOwotCSAgICBsb25nIHRpbWUgPSBMb25nLnBhcnNlTG9uZyhpZEFuZFRpbWVbMV0pOwotCSAgICBkYXRhLmdldChpZCkuc2V0VmFsdWUodGltZSk7Ci0JfQorICAgIFN0cmluZyBsaW5lOworICAgIHdoaWxlICgobGluZSA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKKyAgICAgICAgU3RyaW5nW10gaWRBbmRUaW1lID0gbGluZS5zcGxpdCgiICIpOworICAgICAgICBpbnQgaWQgPSBJbnRlZ2VyLnBhcnNlSW50KGlkQW5kVGltZVswXSk7CisgICAgICAgIGxvbmcgdGltZSA9IExvbmcucGFyc2VMb25nKGlkQW5kVGltZVsxXSk7CisgICAgICAgIGRhdGEuZ2V0KGlkKS5zZXRWYWx1ZSh0aW1lKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNob3dSZXN1bHRzKCkKICAgICB7Ci0JLy8gUmVtb3ZlIGJlZ2luIHBvaW50cy4KLQlmb3IgKEludGVnZXIgaWQgOiBiZWdpblBvaW50TmFtZVRvSW50LnZhbHVlcygpKSB7Ci0JICAgIGRhdGEucmVtb3ZlKGlkKTsKLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKGZpbGVuYW1lKTsKLQlmb3IgKFBvaW50IHBvaW50IDogZGF0YS52YWx1ZXMoKSkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4ocG9pbnQuZ2V0TmFtZSgpIAotCQkJICAgICAgICsgIiAiIAotCQkJICAgICAgICsgcG9pbnQuZ2V0QXZlcmFnZSgpIC8gU0NBTEUKLQkJCSAgICAgICArICIgIiAKLQkJCSAgICAgICArIGZvcm1hdChwb2ludC5nZXRBdmVyYWdlKCkgLyBTQ0FMRSkKLQkJCSAgICAgICArICIgIgotCQkJICAgICAgICsgIiBpdGVyYXRpb25zICIgKyBwb2ludC5nZXRJdGVyYXRpb25zKCkpOwotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICAvLyBSZW1vdmUgYmVnaW4gcG9pbnRzLgorICAgIGZvciAoSW50ZWdlciBpZCA6IGJlZ2luUG9pbnROYW1lVG9JbnQudmFsdWVzKCkpIHsKKyAgICAgICAgZGF0YS5yZW1vdmUoaWQpOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oZmlsZW5hbWUpOworICAgIGZvciAoUG9pbnQgcG9pbnQgOiBkYXRhLnZhbHVlcygpKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwb2ludC5nZXROYW1lKCkKKyAgICAgICAgICAgICAgICAgICArICIgIgorICAgICAgICAgICAgICAgICAgICsgcG9pbnQuZ2V0QXZlcmFnZSgpIC8gU0NBTEUKKyAgICAgICAgICAgICAgICAgICArICIgIgorICAgICAgICAgICAgICAgICAgICsgZm9ybWF0KHBvaW50LmdldEF2ZXJhZ2UoKSAvIFNDQUxFKQorICAgICAgICAgICAgICAgICAgICsgIiAiCisgICAgICAgICAgICAgICAgICAgKyAiIGl0ZXJhdGlvbnMgIiArIHBvaW50LmdldEl0ZXJhdGlvbnMoKSk7CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGZvcm1hdChkb3VibGUgZCkgewpAQCAtMTQ4LDkgKzE0OCw5IEBACiAKICAgICBQb2ludChpbnQgaW50SWQsIFN0cmluZyBuYW1lKQogICAgIHsKLQl0aGlzLmludElkID0gaW50SWQ7Ci0JdGhpcy5uYW1lID0gbmFtZTsKLQl2YWx1ZSA9IC0xOworICAgIHRoaXMuaW50SWQgPSBpbnRJZDsKKyAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgIHZhbHVlID0gLTE7CiAgICAgfQogICAgIGludCBnZXRJbnRJZCgpIHsgcmV0dXJuIGludElkOyB9CiAgICAgU3RyaW5nIGdldE5hbWUoKSB7IHJldHVybiBuYW1lOyB9CkBAIC0xNTgsOSArMTU4LDkgQEAKICAgICB2b2lkIHNldFZhbHVlKGxvbmcgeCkgeyB2YWx1ZSA9IHg7IH0KICAgICBkb3VibGUgZ2V0QXZlcmFnZSgpIHsgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5vdCBJbXBsZW1lbnRlZCIpOyB9CiAgICAgaW50IGdldEl0ZXJhdGlvbnMoKSB7IHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJOb3QgSW1wbGVtZW50ZWQiKTsgfQotICAgIFN0cmluZyB0b1N0cmluZ1N0cmluZygpIAorICAgIFN0cmluZyB0b1N0cmluZ1N0cmluZygpCiAgICAgewotCXJldHVybiBpbnRJZCArICIgIiArIG5hbWUgICsgIiAiICsgdmFsdWU7CisgICAgcmV0dXJuIGludElkICsgIiAiICsgbmFtZSAgKyAiICIgKyB2YWx1ZTsKICAgICB9CiB9CiAKQEAgLTE2OCwxMSArMTY4LDExIEBACiB7CiAgICAgQmVnaW5Qb2ludChpbnQgaW50SWQsIFN0cmluZyBuYW1lKQogICAgIHsKLQlzdXBlcihpbnRJZCwgbmFtZSk7CisgICAgc3VwZXIoaW50SWQsIG5hbWUpOwogICAgIH0KICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKICAgICB7Ci0JcmV0dXJuICJCZWdpblBvaW50WyAiICsgdG9TdHJpbmdTdHJpbmcoKSArICIgXSI7CisgICAgcmV0dXJuICJCZWdpblBvaW50WyAiICsgdG9TdHJpbmdTdHJpbmcoKSArICIgXSI7CiAgICAgfQogfQogCkBAIC0xODMsMzIgKzE4MywzMiBAQAogICAgIGludCBpdGVyYXRpb25zOwogCiAgICAgRW5kUG9pbnQoaW50IGludElkLCBTdHJpbmcgbmFtZSwgTWFwPEludGVnZXIsIFBvaW50PiBkYXRhLAotCSAgICAgTWFwPFN0cmluZywgSW50ZWdlcj4gYmVnaW5Qb2ludE5hbWVUb0ludCkKKyAgICAgICAgIE1hcDxTdHJpbmcsIEludGVnZXI+IGJlZ2luUG9pbnROYW1lVG9JbnQpCiAgICAgewotCXN1cGVyKGludElkLCBuYW1lKTsKLQl0aGlzLmRhdGEgPSBkYXRhOwotCXRoaXMuYmVnaW5Qb2ludE5hbWVUb0ludCA9IGJlZ2luUG9pbnROYW1lVG9JbnQ7Ci0JaXRlcmF0aW9ucyA9IDA7CisgICAgc3VwZXIoaW50SWQsIG5hbWUpOworICAgIHRoaXMuZGF0YSA9IGRhdGE7CisgICAgdGhpcy5iZWdpblBvaW50TmFtZVRvSW50ID0gYmVnaW5Qb2ludE5hbWVUb0ludDsKKyAgICBpdGVyYXRpb25zID0gMDsKICAgICB9CiAgICAgdm9pZCBzZXRWYWx1ZShsb25nIGVuZFRpbWUpCiAgICAgewotCWludCBzdGFydElkID0gYmVnaW5Qb2ludE5hbWVUb0ludC5nZXQobmFtZSk7Ci0JbG9uZyBzdGFydFRpbWUgPSBkYXRhLmdldChzdGFydElkKS5nZXRWYWx1ZSgpOwotCWxvbmcgZWxhcHNlZFRpbWUgPSBlbmRUaW1lIC0gc3RhcnRUaW1lOwotCXZhbHVlICs9IGVsYXBzZWRUaW1lOwotCWl0ZXJhdGlvbnMrKzsKKyAgICBpbnQgc3RhcnRJZCA9IGJlZ2luUG9pbnROYW1lVG9JbnQuZ2V0KG5hbWUpOworICAgIGxvbmcgc3RhcnRUaW1lID0gZGF0YS5nZXQoc3RhcnRJZCkuZ2V0VmFsdWUoKTsKKyAgICBsb25nIGVsYXBzZWRUaW1lID0gZW5kVGltZSAtIHN0YXJ0VGltZTsKKyAgICB2YWx1ZSArPSBlbGFwc2VkVGltZTsKKyAgICBpdGVyYXRpb25zKys7CiAgICAgfQotICAgIGRvdWJsZSBnZXRBdmVyYWdlKCkgCisgICAgZG91YmxlIGdldEF2ZXJhZ2UoKQogICAgIHsKLQlyZXR1cm4gdmFsdWUgLyBpdGVyYXRpb25zOworICAgIHJldHVybiB2YWx1ZSAvIGl0ZXJhdGlvbnM7CiAgICAgfQogICAgIGludCBnZXRJdGVyYXRpb25zKCkKICAgICB7Ci0JcmV0dXJuIGl0ZXJhdGlvbnM7CisgICAgcmV0dXJuIGl0ZXJhdGlvbnM7CiAgICAgfQogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQogICAgIHsKLQlyZXR1cm4gIkVuZFBvaW50WyAiICsgdG9TdHJpbmdTdHJpbmcoKSArICIgIiArIGl0ZXJhdGlvbnMgKyAiIF0iOworICAgIHJldHVybiAiRW5kUG9pbnRbICIgKyB0b1N0cmluZ1N0cmluZygpICsgIiAiICsgaXRlcmF0aW9ucyArICIgXSI7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb3JiYS90aW1lci9zcmMvdXRpbHMvVGltZXJQb2ludFNvdXJjZUdlbmVyYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29yYmEvdGltZXIvc3JjL3V0aWxzL1RpbWVyUG9pbnRTb3VyY2VHZW5lcmF0b3IuamF2YQppbmRleCBkZWJhNjdmLi41MTdhNWVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb3JiYS90aW1lci9zcmMvdXRpbHMvVGltZXJQb2ludFNvdXJjZUdlbmVyYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NvcmJhL3RpbWVyL3NyYy91dGlscy9UaW1lclBvaW50U291cmNlR2VuZXJhdG9yLmphdmEKQEAgLTY0LDM3NiArNjQsMzc2IEBACiAgKgogICogTm90ZSBvbiBib290c3RyYXBwaW5nOiB0aGUgdGltZSBwb2ludCBmaWxlIG5lZWRzIHRvIGJlIGdlbmVyYXRlZAogICogYmVmb3JlIHRoZSBidWxrIG9mIHRoZSBPUkIgaXMgYnVpbHQuICBUaGlzIHJlcXVpcmVzIGNvbXBpbGluZwotICogdGhlIG5ld3RpbWVyIGFuZCBjb2RlZ2VuIGNsYXNzZXMgaW50byBhIGxpYnJhcnkgZmlsZSB0aGF0IGlzIAorICogdGhlIG5ld3RpbWVyIGFuZCBjb2RlZ2VuIGNsYXNzZXMgaW50byBhIGxpYnJhcnkgZmlsZSB0aGF0IGlzCiAgKiBjaGVja2VkIGludG8gU0NDUy4KICAqLwogcHVibGljIGNsYXNzIFRpbWVyUG9pbnRTb3VyY2VHZW5lcmF0b3IgewogICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFRpbWluZ0luZm9Qcm9jZXNzb3IgewotCXByaXZhdGUgYm9vbGVhbiBkb25lID0gZmFsc2UgOwotCXByaXZhdGUgU3RyaW5nIHBrZyA7Ci0JcHJpdmF0ZSBUaW1lckZhY3RvcnkgdGYgOwotCXByaXZhdGUgTWFwPFN0cmluZyxMaXN0PFN0cmluZz4+IGNvbnRlbnRzIDsKLQlwcml2YXRlIFRpbWVyR3JvdXAgY3VycmVudFRpbWVyR3JvdXAgOworICAgIHByaXZhdGUgYm9vbGVhbiBkb25lID0gZmFsc2UgOworICAgIHByaXZhdGUgU3RyaW5nIHBrZyA7CisgICAgcHJpdmF0ZSBUaW1lckZhY3RvcnkgdGYgOworICAgIHByaXZhdGUgTWFwPFN0cmluZyxMaXN0PFN0cmluZz4+IGNvbnRlbnRzIDsKKyAgICBwcml2YXRlIFRpbWVyR3JvdXAgY3VycmVudFRpbWVyR3JvdXAgOwogCi0JcHJpdmF0ZSB2b2lkIGNoZWNrRm9yVmFsaWRJZGVudGlmaWVyKCBTdHJpbmcgbmFtZSApIHsKLQkgICAgaWYgKCFJZGVudGlmaWVyLmlzVmFsaWRJZGVudGlmaWVyKCBuYW1lICkpIAotCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotCQkgICAgIm5hbWUgIiArIG5hbWUgKyAiIGlzIG5vdCBhIHZhbGlkIEphdmEgaWRlbnRpZmllciIgKSA7Ci0JfQorICAgIHByaXZhdGUgdm9pZCBjaGVja0ZvclZhbGlkSWRlbnRpZmllciggU3RyaW5nIG5hbWUgKSB7CisgICAgICAgIGlmICghSWRlbnRpZmllci5pc1ZhbGlkSWRlbnRpZmllciggbmFtZSApKQorICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgIm5hbWUgIiArIG5hbWUgKyAiIGlzIG5vdCBhIHZhbGlkIEphdmEgaWRlbnRpZmllciIgKSA7CisgICAgfQogCi0JcHJpdmF0ZSB2b2lkIGNoZWNrRG9uZSgpIHsKLQkgICAgaWYgKGRvbmUpCi0JCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCi0JCSAgICAicGFzdCBnZXRSZXN1bHQ6IG5vIG90aGVyIG1ldGhvZHMgbWF5IGJlIGNhbGxlZCIgKSA7Ci0JfQorICAgIHByaXZhdGUgdm9pZCBjaGVja0RvbmUoKSB7CisgICAgICAgIGlmIChkb25lKQorICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAorICAgICAgICAgICAgInBhc3QgZ2V0UmVzdWx0OiBubyBvdGhlciBtZXRob2RzIG1heSBiZSBjYWxsZWQiICkgOworICAgIH0KIAotCXB1YmxpYyBUaW1pbmdJbmZvUHJvY2Vzc29yKCBTdHJpbmcgbmFtZSwgU3RyaW5nIHBrZyApIHsKLQkgICAgdGhpcy5kb25lID0gZmFsc2UgOwotCSAgICB0aGlzLnBrZyA9IHBrZyA7Ci0JICAgIGNoZWNrRm9yVmFsaWRJZGVudGlmaWVyKCBuYW1lICkgOwotCSAgICBpZiAoIUlkZW50aWZpZXIuaXNWYWxpZEZ1bGxJZGVudGlmaWVyKCBwa2cgKSkKLQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLQkJICAgIHBrZyArICIgaXMgbm90IGEgdmFsaWQgcGFja2FnZSBuYW1lIiApIDsKLQkgICAgdGhpcy50ZiA9IFRpbWVyRmFjdG9yeUJ1aWxkZXIubWFrZSggbmFtZSwgbmFtZSApIDsKLQkgICAgdGhpcy5jb250ZW50cyA9IG5ldyBIYXNoTWFwPFN0cmluZyxMaXN0PFN0cmluZz4+KCkgOwotCSAgICB0aGlzLmN1cnJlbnRUaW1lckdyb3VwID0gbnVsbCA7Ci0JfQorICAgIHB1YmxpYyBUaW1pbmdJbmZvUHJvY2Vzc29yKCBTdHJpbmcgbmFtZSwgU3RyaW5nIHBrZyApIHsKKyAgICAgICAgdGhpcy5kb25lID0gZmFsc2UgOworICAgICAgICB0aGlzLnBrZyA9IHBrZyA7CisgICAgICAgIGNoZWNrRm9yVmFsaWRJZGVudGlmaWVyKCBuYW1lICkgOworICAgICAgICBpZiAoIUlkZW50aWZpZXIuaXNWYWxpZEZ1bGxJZGVudGlmaWVyKCBwa2cgKSkKKyAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgIHBrZyArICIgaXMgbm90IGEgdmFsaWQgcGFja2FnZSBuYW1lIiApIDsKKyAgICAgICAgdGhpcy50ZiA9IFRpbWVyRmFjdG9yeUJ1aWxkZXIubWFrZSggbmFtZSwgbmFtZSApIDsKKyAgICAgICAgdGhpcy5jb250ZW50cyA9IG5ldyBIYXNoTWFwPFN0cmluZyxMaXN0PFN0cmluZz4+KCkgOworICAgICAgICB0aGlzLmN1cnJlbnRUaW1lckdyb3VwID0gbnVsbCA7CisgICAgfQogCi0JcHVibGljIHZvaWQgYWRkVGltZXIoIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYyApIHsKLQkgICAgY2hlY2tEb25lKCkgOwotCSAgICBjaGVja0ZvclZhbGlkSWRlbnRpZmllciggbmFtZSApIDsKLQkgICAgdGYubWFrZVRpbWVyKCBuYW1lLCBkZXNjICkgOwotCSAgICBjdXJyZW50VGltZXJHcm91cCA9IG51bGwgOwotCX0KKyAgICBwdWJsaWMgdm9pZCBhZGRUaW1lciggU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjICkgeworICAgICAgICBjaGVja0RvbmUoKSA7CisgICAgICAgIGNoZWNrRm9yVmFsaWRJZGVudGlmaWVyKCBuYW1lICkgOworICAgICAgICB0Zi5tYWtlVGltZXIoIG5hbWUsIGRlc2MgKSA7CisgICAgICAgIGN1cnJlbnRUaW1lckdyb3VwID0gbnVsbCA7CisgICAgfQogCi0JcHVibGljIHZvaWQgYWRkVGltZXJHcm91cCggU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjICkgewotCSAgICBjaGVja0RvbmUoKSA7Ci0JICAgIGNoZWNrRm9yVmFsaWRJZGVudGlmaWVyKCBuYW1lICkgOwotCSAgICBjdXJyZW50VGltZXJHcm91cCA9IHRmLm1ha2VUaW1lckdyb3VwKCBuYW1lLCBkZXNjICkgOwotCX0KKyAgICBwdWJsaWMgdm9pZCBhZGRUaW1lckdyb3VwKCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MgKSB7CisgICAgICAgIGNoZWNrRG9uZSgpIDsKKyAgICAgICAgY2hlY2tGb3JWYWxpZElkZW50aWZpZXIoIG5hbWUgKSA7CisgICAgICAgIGN1cnJlbnRUaW1lckdyb3VwID0gdGYubWFrZVRpbWVyR3JvdXAoIG5hbWUsIGRlc2MgKSA7CisgICAgfQogCi0JcHVibGljIHZvaWQgY29udGFpbnMoIFN0cmluZyBuYW1lICkgewotCSAgICBjaGVja0RvbmUoKSA7Ci0JICAgIGlmIChjdXJyZW50VGltZXJHcm91cCA9PSBudWxsKSB7Ci0JCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCi0JCSAgICAiY29udGFpbnMgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYW4gYWRkVGltZXJHcm91cCBjYWxsIiApIDsKLQkgICAgfSBlbHNlIHsKLQkJU3RyaW5nIGNuYW1lID0gY3VycmVudFRpbWVyR3JvdXAubmFtZSgpIDsKLQkJTGlzdDxTdHJpbmc+IGxpc3QgPSBjb250ZW50cy5nZXQoIGNuYW1lICkgOwotCQlpZiAobGlzdCA9PSBudWxsKSB7Ci0JCSAgICBsaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCkgOwotCQkgICAgY29udGVudHMucHV0KCBjbmFtZSwgbGlzdCApIDsKLQkJfQorICAgIHB1YmxpYyB2b2lkIGNvbnRhaW5zKCBTdHJpbmcgbmFtZSApIHsKKyAgICAgICAgY2hlY2tEb25lKCkgOworICAgICAgICBpZiAoY3VycmVudFRpbWVyR3JvdXAgPT0gbnVsbCkgeworICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAorICAgICAgICAgICAgImNvbnRhaW5zIG11c3QgYmUgY2FsbGVkIGFmdGVyIGFuIGFkZFRpbWVyR3JvdXAgY2FsbCIgKSA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgIFN0cmluZyBjbmFtZSA9IGN1cnJlbnRUaW1lckdyb3VwLm5hbWUoKSA7CisgICAgICAgIExpc3Q8U3RyaW5nPiBsaXN0ID0gY29udGVudHMuZ2V0KCBjbmFtZSApIDsKKyAgICAgICAgaWYgKGxpc3QgPT0gbnVsbCkgeworICAgICAgICAgICAgbGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpIDsKKyAgICAgICAgICAgIGNvbnRlbnRzLnB1dCggY25hbWUsIGxpc3QgKSA7CisgICAgICAgIH0KIAotCQlsaXN0LmFkZCggbmFtZSApIDsKLQkgICAgfQotCX0KKyAgICAgICAgbGlzdC5hZGQoIG5hbWUgKSA7CisgICAgICAgIH0KKyAgICB9CiAKLQlwcml2YXRlIHN0YXRpYyBDb250cm9sbGFibGUgZ2V0Q29udHJvbGxhYmxlKCBUaW1lckZhY3RvcnkgdGYsIFN0cmluZyBuYW1lICkgewotCSAgICBDb250cm9sbGFibGUgcmVzdWx0ID0gdGYudGltZXJzKCkuZ2V0KCBuYW1lICkgOwotCSAgICBpZiAocmVzdWx0ID09IG51bGwpCi0JCXJlc3VsdCA9IHRmLnRpbWVyR3JvdXBzKCkuZ2V0KCBuYW1lICkgOwotCSAgICBpZiAocmVzdWx0ID09IG51bGwpCi0JCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIAotCQkgICAgbmFtZSArICIgaXMgbm90IGEgdmFsaWQgVGltZXIgb3IgVGltZXJHcm91cCBuYW1lIiApIDsKLQkgICAgcmV0dXJuIHJlc3VsdCA7Ci0JfQorICAgIHByaXZhdGUgc3RhdGljIENvbnRyb2xsYWJsZSBnZXRDb250cm9sbGFibGUoIFRpbWVyRmFjdG9yeSB0ZiwgU3RyaW5nIG5hbWUgKSB7CisgICAgICAgIENvbnRyb2xsYWJsZSByZXN1bHQgPSB0Zi50aW1lcnMoKS5nZXQoIG5hbWUgKSA7CisgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKKyAgICAgICAgcmVzdWx0ID0gdGYudGltZXJHcm91cHMoKS5nZXQoIG5hbWUgKSA7CisgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKKyAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgIG5hbWUgKyAiIGlzIG5vdCBhIHZhbGlkIFRpbWVyIG9yIFRpbWVyR3JvdXAgbmFtZSIgKSA7CisgICAgICAgIHJldHVybiByZXN1bHQgOworICAgIH0KIAotCXByaXZhdGUgdm9pZCB1cGRhdGVUaW1lckZhY3RvcnlDb250ZW50cygpIHsKLQkgICAgLy8gIFVzZSB0aGUgTWFwPFN0cmluZyxMaXN0PFN0cmluZz4+IHRvIGZpbGwgaW4gdGhlIFRpbWVyR3JvdXAKLQkgICAgLy8gIGNvbnRhaW5tZW50IHJlbGF0aW9uCi0JICAgIGZvciAoU3RyaW5nIHN0ciA6IGNvbnRlbnRzLmtleVNldCgpKSB7Ci0JCUxpc3Q8U3RyaW5nPiBsaXN0ID0gY29udGVudHMuZ2V0KHN0cikgOwotCQlUaW1lckdyb3VwIHRnID0gdGYudGltZXJHcm91cHMoKS5nZXQoIHN0ciApIDsKLQkJZm9yIChTdHJpbmcgY29udGVudCA6IGxpc3QpIHsKLQkJICAgIHRnLmFkZCggZ2V0Q29udHJvbGxhYmxlKCB0ZiwgY29udGVudCApICkgOwotCQl9Ci0JICAgIH0KLQl9CisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVRpbWVyRmFjdG9yeUNvbnRlbnRzKCkgeworICAgICAgICAvLyAgVXNlIHRoZSBNYXA8U3RyaW5nLExpc3Q8U3RyaW5nPj4gdG8gZmlsbCBpbiB0aGUgVGltZXJHcm91cAorICAgICAgICAvLyAgY29udGFpbm1lbnQgcmVsYXRpb24KKyAgICAgICAgZm9yIChTdHJpbmcgc3RyIDogY29udGVudHMua2V5U2V0KCkpIHsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBjb250ZW50cy5nZXQoc3RyKSA7CisgICAgICAgIFRpbWVyR3JvdXAgdGcgPSB0Zi50aW1lckdyb3VwcygpLmdldCggc3RyICkgOworICAgICAgICBmb3IgKFN0cmluZyBjb250ZW50IDogbGlzdCkgeworICAgICAgICAgICAgdGcuYWRkKCBnZXRDb250cm9sbGFibGUoIHRmLCBjb250ZW50ICkgKSA7CisgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIAotCXB1YmxpYyBQYWlyPFN0cmluZyxUaW1lckZhY3Rvcnk+IGdldFJlc3VsdCgpIHsKLQkgICAgY2hlY2tEb25lKCkgOwotCSAgICBkb25lID0gdHJ1ZSA7Ci0JICAgIHVwZGF0ZVRpbWVyRmFjdG9yeUNvbnRlbnRzKCkgOwotCSAgICBQYWlyPFN0cmluZyxUaW1lckZhY3Rvcnk+IHJlc3VsdCA9IAotCQluZXcgUGFpcjxTdHJpbmcsVGltZXJGYWN0b3J5PiggcGtnLCB0ZiApIDsKLQkgICAgcmV0dXJuIHJlc3VsdCA7Ci0JfQorICAgIHB1YmxpYyBQYWlyPFN0cmluZyxUaW1lckZhY3Rvcnk+IGdldFJlc3VsdCgpIHsKKyAgICAgICAgY2hlY2tEb25lKCkgOworICAgICAgICBkb25lID0gdHJ1ZSA7CisgICAgICAgIHVwZGF0ZVRpbWVyRmFjdG9yeUNvbnRlbnRzKCkgOworICAgICAgICBQYWlyPFN0cmluZyxUaW1lckZhY3Rvcnk+IHJlc3VsdCA9CisgICAgICAgIG5ldyBQYWlyPFN0cmluZyxUaW1lckZhY3Rvcnk+KCBwa2csIHRmICkgOworICAgICAgICByZXR1cm4gcmVzdWx0IDsKKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgSGFuZGxlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0lEVEggPSA0IDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0lEVEggPSA0IDsKIAotCS8vIE5hbWVzIG9mIFhNTCBlbGVtZW50cyBhbmQgYXR0cmlidXRlcwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUSU1FUl9FTEVNRU5UID0gInRpbWVyIiA7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRJTUlOR19FTEVNRU5UID0gInRpbWluZyIgOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUSU1FUl9HUk9VUF9FTEVNRU5UID0gInRpbWVyR3JvdXAiIDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OVEFJTlNfRUxFTUVOVCA9ICJjb250YWlucyIgOworICAgIC8vIE5hbWVzIG9mIFhNTCBlbGVtZW50cyBhbmQgYXR0cmlidXRlcworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUSU1FUl9FTEVNRU5UID0gInRpbWVyIiA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRJTUlOR19FTEVNRU5UID0gInRpbWluZyIgOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUSU1FUl9HUk9VUF9FTEVNRU5UID0gInRpbWVyR3JvdXAiIDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OVEFJTlNfRUxFTUVOVCA9ICJjb250YWlucyIgOwogCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfQVRUUiA9ICJuYW1lIiA7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFU0NSSVBUSU9OX0FUVFIgPSAiZGVzY3JpcHRpb24iIDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFDS0FHRV9BVFRSID0gInBhY2thZ2UiIDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRV9BVFRSID0gIm5hbWUiIDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVTQ1JJUFRJT05fQVRUUiA9ICJkZXNjcmlwdGlvbiIgOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQQUNLQUdFX0FUVFIgPSAicGFja2FnZSIgOwogCi0JcHJpdmF0ZSBib29sZWFuIGRlYnVnIDsKLQlwcml2YXRlIGludCBsZXZlbCA7Ci0JcHJpdmF0ZSBjaGFyW10gcGFkIDsKLQlwcml2YXRlIFRpbWluZ0luZm9Qcm9jZXNzb3IgdGlwIDsKLQlwcml2YXRlIFBhaXI8U3RyaW5nLFRpbWVyRmFjdG9yeT4gcmVzdWx0IDsKKyAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgOworICAgIHByaXZhdGUgaW50IGxldmVsIDsKKyAgICBwcml2YXRlIGNoYXJbXSBwYWQgOworICAgIHByaXZhdGUgVGltaW5nSW5mb1Byb2Nlc3NvciB0aXAgOworICAgIHByaXZhdGUgUGFpcjxTdHJpbmcsVGltZXJGYWN0b3J5PiByZXN1bHQgOwogCi0JcHVibGljIEhhbmRsZXIoIGJvb2xlYW4gZGVidWcgKSB7Ci0JICAgIHRoaXMuZGVidWcgPSBkZWJ1ZyA7Ci0JICAgIHRoaXMubGV2ZWwgPSAwIDsKLQkgICAgc2V0UGFkKCkgOwotCSAgICB0aGlzLnRpcCA9IG51bGwgOwotCSAgICB0aGlzLnJlc3VsdCA9IG51bGwgOwotCX0KLQotCXByaXZhdGUgdm9pZCBpbmRlbnQoKSB7Ci0JICAgIGxldmVsKysgOwotCSAgICBzZXRQYWQoKSA7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHVuZGVudCgpIHsKLQkgICAgbGV2ZWwtLSA7Ci0JICAgIHNldFBhZCgpIDsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc2V0UGFkKCkgewotCSAgICBpbnQgbGVuZ3RoID0gV0lEVEggKiBsZXZlbCA7Ci0JICAgIHBhZCA9IG5ldyBjaGFyW2xlbmd0aF0gOwotCSAgICBmb3IgKGludCBjdHI9MDsgY3RyPGxlbmd0aDsgY3RyKyspCi0JCXBhZFtjdHJdID0gJyAnIDsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZHByaW50KCBTdHJpbmcgbXNnICkgewotCSAgICBpZiAoZGVidWcpIHsKLQkJU3lzdGVtLm91dC5wcmludCggcGFkICkgOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIG1zZyApIDsKLQkgICAgfQotCX0KLQotCXB1YmxpYyB2b2lkIHN0YXJ0RG9jdW1lbnQoKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkgICAgZHByaW50KCAic3RhcnREb2N1bWVudCBjYWxsZWQiICkgOwotCX0KLQotCXB1YmxpYyB2b2lkIGVuZERvY3VtZW50KCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7Ci0JICAgIGRwcmludCggImVuZERvY3VtZW50IGNhbGxlZCIgKSA7Ci0JICAgIHJlc3VsdCA9IHRpcC5nZXRSZXN1bHQoKSA7Ci0JfQotCi0JcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KCBTdHJpbmcgbmFtZXNwYWNlVVJJLAotCSAgICBTdHJpbmcgbE5hbWUsIFN0cmluZyBxTmFtZSwgQXR0cmlidXRlcyBhdHRycyApIAotCSAgICB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQotCSAgICBpbmRlbnQoKSA7Ci0KLQkgICAgLy8gb25seSBxTmFtZSBpcyB1c2VmdWwKLQkgICAgZHByaW50KCAibmFtZXNwYWNlVVJJPSIgKyBuYW1lc3BhY2VVUkkgKSA7Ci0JICAgIGRwcmludCggImxOYW1lPSIgKyBsTmFtZSApIDsKLQkgICAgZHByaW50KCAicU5hbWU9IiArIHFOYW1lICkgOwotCSAgICBkcHJpbnQoICJBdHRyaWJ1dGVzOiIgKSA7Ci0KLQkgICAgLy8gb25seSBsb2NhbCBuYW1lLCB2YWx1ZSBhcmUgdXNlZnVsCi0JICAgIGZvciAoaW50IGN0cj0wOyBjdHI8YXR0cnMuZ2V0TGVuZ3RoKCk7IGN0cisrKSB7Ci0JCWRwcmludCggIlx0bG9jYWwgbmFtZSAgICA9IiArIGF0dHJzLmdldExvY2FsTmFtZShjdHIpICkgOwotCQlkcHJpbnQoICJcdHF1YWxpZmllZCBuYW1lPSIgKyBhdHRycy5nZXRRTmFtZShjdHIpICkgOwotCQlkcHJpbnQoICJcdHZhbHVlICAgICAgICAgPSIgKyBhdHRycy5nZXRWYWx1ZShjdHIpICkgOwotCSAgICB9Ci0KLQkgICAgaWYgKHFOYW1lLmVxdWFscyggVElNSU5HX0VMRU1FTlQgKSkgewotCQlTdHJpbmcgbmFtZSA9IGF0dHJzLmdldFZhbHVlKCBOQU1FX0FUVFIgKSA7Ci0JCVN0cmluZyBwa2cgPSBhdHRycy5nZXRWYWx1ZSggUEFDS0FHRV9BVFRSICkgOwotCQl0aXAgPSBuZXcgVGltaW5nSW5mb1Byb2Nlc3NvciggbmFtZSwgcGtnICkgOwotCSAgICB9IGVsc2UgaWYgKHFOYW1lLmVxdWFscyggVElNRVJfRUxFTUVOVCApKSB7Ci0JCVN0cmluZyBuYW1lID0gYXR0cnMuZ2V0VmFsdWUoIE5BTUVfQVRUUiApIDsKLQkJU3RyaW5nIGRlc2MgPSBhdHRycy5nZXRWYWx1ZSggREVTQ1JJUFRJT05fQVRUUiApIDsKLQkJdGlwLmFkZFRpbWVyKCBuYW1lLCBkZXNjICkgOwotCSAgICB9IGVsc2UgaWYgKHFOYW1lLmVxdWFscyggVElNRVJfR1JPVVBfRUxFTUVOVCApKSB7Ci0JCVN0cmluZyBuYW1lID0gYXR0cnMuZ2V0VmFsdWUoIE5BTUVfQVRUUiApIDsKLQkJU3RyaW5nIGRlc2MgPSBhdHRycy5nZXRWYWx1ZSggREVTQ1JJUFRJT05fQVRUUiApIDsKLQkJdGlwLmFkZFRpbWVyR3JvdXAoIG5hbWUsIGRlc2MgKSA7Ci0JICAgIH0gZWxzZSBpZiAocU5hbWUuZXF1YWxzKCBDT05UQUlOU19FTEVNRU5UICkpIHsKLQkJU3RyaW5nIG5hbWUgPSBhdHRycy5nZXRWYWx1ZSggTkFNRV9BVFRSICkgOwotCQl0aXAuY29udGFpbnMoIG5hbWUgKSA7Ci0JICAgIH0gZWxzZSB7Ci0JCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCi0JCSAgICAiVW5rbm93biBYTUwgZWxlbWVudDogIiArIHFOYW1lICkgOwotCSAgICB9Ci0JfQotCi0JcHVibGljIHZvaWQgZW5kRWxlbWVudCggU3RyaW5nIG5hbWVzcGFjZVVSSSwKLQkgICAgU3RyaW5nIGxOYW1lLCBTdHJpbmcgcU5hbWUgKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQotCSAgICB1bmRlbnQoKSA7Ci0JfQotCi0JcHVibGljIFBhaXI8U3RyaW5nLFRpbWVyRmFjdG9yeT4gZ2V0UmVzdWx0KCkgewotCSAgICByZXR1cm4gcmVzdWx0IDsKLQl9CisgICAgcHVibGljIEhhbmRsZXIoIGJvb2xlYW4gZGVidWcgKSB7CisgICAgICAgIHRoaXMuZGVidWcgPSBkZWJ1ZyA7CisgICAgICAgIHRoaXMubGV2ZWwgPSAwIDsKKyAgICAgICAgc2V0UGFkKCkgOworICAgICAgICB0aGlzLnRpcCA9IG51bGwgOworICAgICAgICB0aGlzLnJlc3VsdCA9IG51bGwgOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgUGFpcjxTdHJpbmcsVGltZXJGYWN0b3J5PiBwYXJzZURlc2NyaXB0aW9uKCAKLQlTdHJpbmcgZmlsZU5hbWUgKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCXJldHVybiBwYXJzZURlc2NyaXB0aW9uKCBmaWxlTmFtZSwgZmFsc2UgKSA7CisgICAgcHJpdmF0ZSB2b2lkIGluZGVudCgpIHsKKyAgICAgICAgbGV2ZWwrKyA7CisgICAgICAgIHNldFBhZCgpIDsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdW5kZW50KCkgeworICAgICAgICBsZXZlbC0tIDsKKyAgICAgICAgc2V0UGFkKCkgOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZXRQYWQoKSB7CisgICAgICAgIGludCBsZW5ndGggPSBXSURUSCAqIGxldmVsIDsKKyAgICAgICAgcGFkID0gbmV3IGNoYXJbbGVuZ3RoXSA7CisgICAgICAgIGZvciAoaW50IGN0cj0wOyBjdHI8bGVuZ3RoOyBjdHIrKykKKyAgICAgICAgcGFkW2N0cl0gPSAnICcgOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkcHJpbnQoIFN0cmluZyBtc2cgKSB7CisgICAgICAgIGlmIChkZWJ1ZykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCBwYWQgKSA7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggbXNnICkgOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc3RhcnREb2N1bWVudCgpIHRocm93cyBTQVhFeGNlcHRpb24geworICAgICAgICBkcHJpbnQoICJzdGFydERvY3VtZW50IGNhbGxlZCIgKSA7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZW5kRG9jdW1lbnQoKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKKyAgICAgICAgZHByaW50KCAiZW5kRG9jdW1lbnQgY2FsbGVkIiApIDsKKyAgICAgICAgcmVzdWx0ID0gdGlwLmdldFJlc3VsdCgpIDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoIFN0cmluZyBuYW1lc3BhY2VVUkksCisgICAgICAgIFN0cmluZyBsTmFtZSwgU3RyaW5nIHFOYW1lLCBBdHRyaWJ1dGVzIGF0dHJzICkKKyAgICAgICAgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7CisKKyAgICAgICAgaW5kZW50KCkgOworCisgICAgICAgIC8vIG9ubHkgcU5hbWUgaXMgdXNlZnVsCisgICAgICAgIGRwcmludCggIm5hbWVzcGFjZVVSST0iICsgbmFtZXNwYWNlVVJJICkgOworICAgICAgICBkcHJpbnQoICJsTmFtZT0iICsgbE5hbWUgKSA7CisgICAgICAgIGRwcmludCggInFOYW1lPSIgKyBxTmFtZSApIDsKKyAgICAgICAgZHByaW50KCAiQXR0cmlidXRlczoiICkgOworCisgICAgICAgIC8vIG9ubHkgbG9jYWwgbmFtZSwgdmFsdWUgYXJlIHVzZWZ1bAorICAgICAgICBmb3IgKGludCBjdHI9MDsgY3RyPGF0dHJzLmdldExlbmd0aCgpOyBjdHIrKykgeworICAgICAgICBkcHJpbnQoICJcdGxvY2FsIG5hbWUgICAgPSIgKyBhdHRycy5nZXRMb2NhbE5hbWUoY3RyKSApIDsKKyAgICAgICAgZHByaW50KCAiXHRxdWFsaWZpZWQgbmFtZT0iICsgYXR0cnMuZ2V0UU5hbWUoY3RyKSApIDsKKyAgICAgICAgZHByaW50KCAiXHR2YWx1ZSAgICAgICAgID0iICsgYXR0cnMuZ2V0VmFsdWUoY3RyKSApIDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChxTmFtZS5lcXVhbHMoIFRJTUlOR19FTEVNRU5UICkpIHsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBhdHRycy5nZXRWYWx1ZSggTkFNRV9BVFRSICkgOworICAgICAgICBTdHJpbmcgcGtnID0gYXR0cnMuZ2V0VmFsdWUoIFBBQ0tBR0VfQVRUUiApIDsKKyAgICAgICAgdGlwID0gbmV3IFRpbWluZ0luZm9Qcm9jZXNzb3IoIG5hbWUsIHBrZyApIDsKKyAgICAgICAgfSBlbHNlIGlmIChxTmFtZS5lcXVhbHMoIFRJTUVSX0VMRU1FTlQgKSkgeworICAgICAgICBTdHJpbmcgbmFtZSA9IGF0dHJzLmdldFZhbHVlKCBOQU1FX0FUVFIgKSA7CisgICAgICAgIFN0cmluZyBkZXNjID0gYXR0cnMuZ2V0VmFsdWUoIERFU0NSSVBUSU9OX0FUVFIgKSA7CisgICAgICAgIHRpcC5hZGRUaW1lciggbmFtZSwgZGVzYyApIDsKKyAgICAgICAgfSBlbHNlIGlmIChxTmFtZS5lcXVhbHMoIFRJTUVSX0dST1VQX0VMRU1FTlQgKSkgeworICAgICAgICBTdHJpbmcgbmFtZSA9IGF0dHJzLmdldFZhbHVlKCBOQU1FX0FUVFIgKSA7CisgICAgICAgIFN0cmluZyBkZXNjID0gYXR0cnMuZ2V0VmFsdWUoIERFU0NSSVBUSU9OX0FUVFIgKSA7CisgICAgICAgIHRpcC5hZGRUaW1lckdyb3VwKCBuYW1lLCBkZXNjICkgOworICAgICAgICB9IGVsc2UgaWYgKHFOYW1lLmVxdWFscyggQ09OVEFJTlNfRUxFTUVOVCApKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gYXR0cnMuZ2V0VmFsdWUoIE5BTUVfQVRUUiApIDsKKyAgICAgICAgdGlwLmNvbnRhaW5zKCBuYW1lICkgOworICAgICAgICB9IGVsc2UgeworICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAorICAgICAgICAgICAgIlVua25vd24gWE1MIGVsZW1lbnQ6ICIgKyBxTmFtZSApIDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGVuZEVsZW1lbnQoIFN0cmluZyBuYW1lc3BhY2VVUkksCisgICAgICAgIFN0cmluZyBsTmFtZSwgU3RyaW5nIHFOYW1lICkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7CisKKyAgICAgICAgdW5kZW50KCkgOworICAgIH0KKworICAgIHB1YmxpYyBQYWlyPFN0cmluZyxUaW1lckZhY3Rvcnk+IGdldFJlc3VsdCgpIHsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCA7CisgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgUGFpcjxTdHJpbmcsVGltZXJGYWN0b3J5PiBwYXJzZURlc2NyaXB0aW9uKAorICAgIFN0cmluZyBmaWxlTmFtZSApIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgcmV0dXJuIHBhcnNlRGVzY3JpcHRpb24oIGZpbGVOYW1lLCBmYWxzZSApIDsKICAgICB9CiAKICAgICAvKiogUmV0dXJuIHRoZSBwYWNrYWdlIGZvciB0aGUgZmlsZSB0byBnZW5lcmF0ZSBhbmQgYSBUaW1lckZhY3RvcnkKICAgICAgKiB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgWE1MIHNvdXJjZSBmaWxlCiAgICAgICogZ2l2ZW4gYnkgZmlsZU5hbWUuCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBQYWlyPFN0cmluZyxUaW1lckZhY3Rvcnk+IHBhcnNlRGVzY3JpcHRpb24oIAotCVN0cmluZyBmaWxlTmFtZSwgYm9vbGVhbiBkZWJ1ZyApIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgcHVibGljIHN0YXRpYyBQYWlyPFN0cmluZyxUaW1lckZhY3Rvcnk+IHBhcnNlRGVzY3JpcHRpb24oCisgICAgU3RyaW5nIGZpbGVOYW1lLCBib29sZWFuIGRlYnVnICkgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAotCUhhbmRsZXIgaGFuZGxlciA9IG5ldyBIYW5kbGVyKCBkZWJ1ZyApIDsKLQlTQVhQYXJzZXJGYWN0b3J5IGZhY3RvcnkgPSBTQVhQYXJzZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkgOwotCWZhY3Rvcnkuc2V0VmFsaWRhdGluZyggdHJ1ZSApIDsKLQlGaWxlIGZpbGUgPSBudWxsIDsKKyAgICBIYW5kbGVyIGhhbmRsZXIgPSBuZXcgSGFuZGxlciggZGVidWcgKSA7CisgICAgU0FYUGFyc2VyRmFjdG9yeSBmYWN0b3J5ID0gU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpIDsKKyAgICBmYWN0b3J5LnNldFZhbGlkYXRpbmcoIHRydWUgKSA7CisgICAgRmlsZSBmaWxlID0gbnVsbCA7CiAKLQl0cnkgewotCSAgICBTQVhQYXJzZXIgc2F4UGFyc2VyID0gZmFjdG9yeS5uZXdTQVhQYXJzZXIoKSA7Ci0JICAgIGZpbGUgPSBuZXcgRmlsZSggZmlsZU5hbWUgKSA7Ci0JICAgIHNheFBhcnNlci5wYXJzZSggZmlsZSwgaGFuZGxlciApIDsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXhjKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkV4Y2VwdGlvbiBpbiBwcm9jZXNzaW5nICIgKyBmaWxlICsgIjogIiArIGV4YyApIDsKLQkgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpIDsKLQkgICAgcmV0dXJuIG51bGwgOwotCX0KKyAgICB0cnkgeworICAgICAgICBTQVhQYXJzZXIgc2F4UGFyc2VyID0gZmFjdG9yeS5uZXdTQVhQYXJzZXIoKSA7CisgICAgICAgIGZpbGUgPSBuZXcgRmlsZSggZmlsZU5hbWUgKSA7CisgICAgICAgIHNheFBhcnNlci5wYXJzZSggZmlsZSwgaGFuZGxlciApIDsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXhjKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkV4Y2VwdGlvbiBpbiBwcm9jZXNzaW5nICIgKyBmaWxlICsgIjogIiArIGV4YyApIDsKKyAgICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpIDsKKyAgICAgICAgcmV0dXJuIG51bGwgOworICAgIH0KIAotCXJldHVybiBoYW5kbGVyLmdldFJlc3VsdCgpIDsKKyAgICByZXR1cm4gaGFuZGxlci5nZXRSZXN1bHQoKSA7CiAgICAgfQogCiAgICAgLyoqIEdlbmVyYXRlIHRoZSBzb3VyY2UgZmlsZSBmb3IgdGhlIFRpbWVycyBpbiB0aGUgVGltZXJGYWN0b3J5IGZyb20gdGhlIGRlc2NyaXB0aW9uLgotICAgICAqIFRoZSBmaWxlIGlzIGdlbmVyYXRlZCBpbiB0aGUgZGlyZWN0b3J5IGdpdmVuIGJ5IHRoZSBwYWNrYWdlIGZyb20gdGhlIGRlc2NyaXB0aW9uIAorICAgICAqIFRoZSBmaWxlIGlzIGdlbmVyYXRlZCBpbiB0aGUgZGlyZWN0b3J5IGdpdmVuIGJ5IHRoZSBwYWNrYWdlIGZyb20gdGhlIGRlc2NyaXB0aW9uCiAgICAgICogc3RhcnRpbmcgYXQgdGhlIGRpck5hbWUuICBUaGUgbmFtZSBvZiB0aGUgZmlsZSBpcyBOQU1FLmphdmEsIHdoZXJlIE5BTUUKICAgICAgKiBpcyB0aGUgVGltZXJGYWN0b3J5IG5hbWUgZnJvbSB0aGUgZGVzY3JpcHRpb24uCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGdlbmVyYXRlU291cmNlRmlsZSggU3RyaW5nIGRpck5hbWUsIAotCVBhaXI8U3RyaW5nLFRpbWVyRmFjdG9yeT4gZGVzY3JpcHRpb24gKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBnZW5lcmF0ZVNvdXJjZUZpbGUoIFN0cmluZyBkaXJOYW1lLAorICAgIFBhaXI8U3RyaW5nLFRpbWVyRmFjdG9yeT4gZGVzY3JpcHRpb24gKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCi0JX2NsZWFyKCkgOwotCV9wYWNrYWdlKCBkZXNjcmlwdGlvbi5maXJzdCgpICkgOwotCV9pbXBvcnQoICJqYXZhLmxhbmcuT2JqZWN0IiApIDsKLQlfaW1wb3J0KCAiamF2YS5sYW5nLlN0cmluZyIgKSA7Ci0JX2ltcG9ydCggImNvbS5zdW4uY29yYmEuZWUuc3BpLm9yYi5PUkIiICkgOwotCV9pbXBvcnQoICJjb20uc3VuLmNvcmJhLmVlLnNwaS5vcmJ1dGlsLm5ld3RpbWVyLkNvbnRyb2xsYWJsZSIgKSA7Ci0JX2ltcG9ydCggImNvbS5zdW4uY29yYmEuZWUuc3BpLm9yYnV0aWwubmV3dGltZXIuVGltZXJNYW5hZ2VyIiApIDsKLQlfaW1wb3J0KCAiY29tLnN1bi5jb3JiYS5lZS5zcGkub3JidXRpbC5uZXd0aW1lci5UaW1lckZhY3RvcnkiICkgOwotCV9pbXBvcnQoICJjb20uc3VuLmNvcmJhLmVlLnNwaS5vcmJ1dGlsLm5ld3RpbWVyLlRpbWVyIiApIDsKLQlfaW1wb3J0KCAiY29tLnN1bi5jb3JiYS5lZS5zcGkub3JidXRpbC5uZXd0aW1lci5UaW1lckV2ZW50Q29udHJvbGxlciIgKSA7Ci0JX2ltcG9ydCggImNvbS5zdW4uY29yYmEuZWUuc3BpLm9yYnV0aWwubmV3dGltZXIuVGltZXJHcm91cCIgKSA7CisgICAgX2NsZWFyKCkgOworICAgIF9wYWNrYWdlKCBkZXNjcmlwdGlvbi5maXJzdCgpICkgOworICAgIF9pbXBvcnQoICJqYXZhLmxhbmcuT2JqZWN0IiApIDsKKyAgICBfaW1wb3J0KCAiamF2YS5sYW5nLlN0cmluZyIgKSA7CisgICAgX2ltcG9ydCggImNvbS5zdW4uY29yYmEuZWUuc3BpLm9yYi5PUkIiICkgOworICAgIF9pbXBvcnQoICJjb20uc3VuLmNvcmJhLmVlLnNwaS5vcmJ1dGlsLm5ld3RpbWVyLkNvbnRyb2xsYWJsZSIgKSA7CisgICAgX2ltcG9ydCggImNvbS5zdW4uY29yYmEuZWUuc3BpLm9yYnV0aWwubmV3dGltZXIuVGltZXJNYW5hZ2VyIiApIDsKKyAgICBfaW1wb3J0KCAiY29tLnN1bi5jb3JiYS5lZS5zcGkub3JidXRpbC5uZXd0aW1lci5UaW1lckZhY3RvcnkiICkgOworICAgIF9pbXBvcnQoICJjb20uc3VuLmNvcmJhLmVlLnNwaS5vcmJ1dGlsLm5ld3RpbWVyLlRpbWVyIiApIDsKKyAgICBfaW1wb3J0KCAiY29tLnN1bi5jb3JiYS5lZS5zcGkub3JidXRpbC5uZXd0aW1lci5UaW1lckV2ZW50Q29udHJvbGxlciIgKSA7CisgICAgX2ltcG9ydCggImNvbS5zdW4uY29yYmEuZWUuc3BpLm9yYnV0aWwubmV3dGltZXIuVGltZXJHcm91cCIgKSA7CiAKLQlUaW1lckZhY3RvcnkgdGYgPSBkZXNjcmlwdGlvbi5zZWNvbmQoKSA7Ci0JX2NsYXNzKCBQVUJMSUMsIHRmLm5hbWUoKSwgX3QoIk9iamVjdCIpICkgOyAKKyAgICBUaW1lckZhY3RvcnkgdGYgPSBkZXNjcmlwdGlvbi5zZWNvbmQoKSA7CisgICAgX2NsYXNzKCBQVUJMSUMsIHRmLm5hbWUoKSwgX3QoIk9iamVjdCIpICkgOwogCi0JLy8gbm8gc3RhdGljIGluaXRpYWxpemVyIG5lZWRlZAotCQotCWdlbmVyYXRlRmllbGRzKCB0ZiApIDsKLQlnZW5lcmF0ZUNvbnN0cnVjdG9yKCB0ZiApIDsKLQlnZW5lcmF0ZUVudGVyRXhpdE1ldGhvZHMoIHRmICkgOworICAgIC8vIG5vIHN0YXRpYyBpbml0aWFsaXplciBuZWVkZWQKIAotCV9lbmQoKSA7IC8vIG9mIGNsYXNzIGdlbmVyYXRpb24KKyAgICBnZW5lcmF0ZUZpZWxkcyggdGYgKSA7CisgICAgZ2VuZXJhdGVDb25zdHJ1Y3RvciggdGYgKSA7CisgICAgZ2VuZXJhdGVFbnRlckV4aXRNZXRob2RzKCB0ZiApIDsKIAotCUZpbGUgZGlyID0gbmV3IEZpbGUoIGRpck5hbWUgKSA7Ci0JU3RyaW5nIHBrZyA9IGRlc2NyaXB0aW9uLmZpcnN0KCkgOwotCVN0cmluZyBmaWxlRGlyID0gcGtnLnJlcGxhY2UoICcuJywgRmlsZS5zZXBhcmF0b3JDaGFyICkgOwotCUZpbGUgZmRpciA9IG5ldyBGaWxlKCBkaXIsIGZpbGVEaXIgKSA7Ci0JLy8gbWtkaXJzIG9ubHkgcmV0dXJucyB0cnVlIGlmIGRpcnMgd2VyZSBjcmVhdGVkLCBzbwotCS8vIGZhbHNlIG1heSBvciBtYXkgbm90IGluZGljYXRlIGFuIGVycm9yLgotCWZkaXIubWtkaXJzKCkgOyAKLQlGaWxlIGZpbGUgPSBuZXcgRmlsZSggZmRpciwgdGYubmFtZSgpICsgIi5qYXZhIiApIDsKLQlQcmludFN0cmVhbSBwcyA9IG5ldyBQcmludFN0cmVhbSggZmlsZSApIDsgCi0JX3NvdXJjZUNvZGUoIHBzLCBuZXcgUHJvcGVydGllcygpICkgOworICAgIF9lbmQoKSA7IC8vIG9mIGNsYXNzIGdlbmVyYXRpb24KKworICAgIEZpbGUgZGlyID0gbmV3IEZpbGUoIGRpck5hbWUgKSA7CisgICAgU3RyaW5nIHBrZyA9IGRlc2NyaXB0aW9uLmZpcnN0KCkgOworICAgIFN0cmluZyBmaWxlRGlyID0gcGtnLnJlcGxhY2UoICcuJywgRmlsZS5zZXBhcmF0b3JDaGFyICkgOworICAgIEZpbGUgZmRpciA9IG5ldyBGaWxlKCBkaXIsIGZpbGVEaXIgKSA7CisgICAgLy8gbWtkaXJzIG9ubHkgcmV0dXJucyB0cnVlIGlmIGRpcnMgd2VyZSBjcmVhdGVkLCBzbworICAgIC8vIGZhbHNlIG1heSBvciBtYXkgbm90IGluZGljYXRlIGFuIGVycm9yLgorICAgIGZkaXIubWtkaXJzKCkgOworICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKCBmZGlyLCB0Zi5uYW1lKCkgKyAiLmphdmEiICkgOworICAgIFByaW50U3RyZWFtIHBzID0gbmV3IFByaW50U3RyZWFtKCBmaWxlICkgOworICAgIF9zb3VyY2VDb2RlKCBwcywgbmV3IFByb3BlcnRpZXMoKSApIDsKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGdlbmVyYXRlRmllbGRzKCBUaW1lckZhY3RvcnkgdGYgKSB7Ci0JX2RhdGEoIFBSSVZBVEV8RklOQUwsIF90KCJUaW1lckV2ZW50Q29udHJvbGxlciIpLCAiY29udHJvbGxlciIgKSA7CisgICAgX2RhdGEoIFBSSVZBVEV8RklOQUwsIF90KCJUaW1lckV2ZW50Q29udHJvbGxlciIpLCAiY29udHJvbGxlciIgKSA7CiAKLQlmb3IgKFRpbWVyIHQgOiB0Zi50aW1lcnMoKS52YWx1ZXMoKSkgewotCSAgICBUeXBlIHR5cGUgPSBfdCgiVGltZXIiKSA7Ci0JICAgIF9kYXRhKCBQVUJMSUN8RklOQUwsIHR5cGUsIHQubmFtZSgpICkgOwotCX0KKyAgICBmb3IgKFRpbWVyIHQgOiB0Zi50aW1lcnMoKS52YWx1ZXMoKSkgeworICAgICAgICBUeXBlIHR5cGUgPSBfdCgiVGltZXIiKSA7CisgICAgICAgIF9kYXRhKCBQVUJMSUN8RklOQUwsIHR5cGUsIHQubmFtZSgpICkgOworICAgIH0KIAotCWZvciAoVGltZXJHcm91cCB0ZyA6IHRmLnRpbWVyR3JvdXBzKCkudmFsdWVzKCkpIHsKLQkgICAgVHlwZSB0eXBlID0gX3QoIlRpbWVyR3JvdXAiKSA7Ci0JICAgIF9kYXRhKCBQVUJMSUN8RklOQUwsIHR5cGUsIHRnLm5hbWUoKSApIDsKLQl9CisgICAgZm9yIChUaW1lckdyb3VwIHRnIDogdGYudGltZXJHcm91cHMoKS52YWx1ZXMoKSkgeworICAgICAgICBUeXBlIHR5cGUgPSBfdCgiVGltZXJHcm91cCIpIDsKKyAgICAgICAgX2RhdGEoIFBVQkxJQ3xGSU5BTCwgdHlwZSwgdGcubmFtZSgpICkgOworICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGdlbmVyYXRlQ29uc3RydWN0b3IoIFRpbWVyRmFjdG9yeSB0ZiApIHsKLQlfY29uc3RydWN0b3IoIFBVQkxJQyApIDsKLQkgICAgX2FyZyggX3QoIlRpbWVyRmFjdG9yeSIpLCAidGYiICkgOwotCSAgICBfYXJnKCBfdCgiVGltZXJFdmVudENvbnRyb2xsZXIiKSwgImNvbnRyb2xsZXIiICkgOwotCV9ib2R5KCkgOworICAgIF9jb25zdHJ1Y3RvciggUFVCTElDICkgOworICAgICAgICBfYXJnKCBfdCgiVGltZXJGYWN0b3J5IiksICJ0ZiIgKSA7CisgICAgICAgIF9hcmcoIF90KCJUaW1lckV2ZW50Q29udHJvbGxlciIpLCAiY29udHJvbGxlciIgKSA7CisgICAgX2JvZHkoKSA7CiAKLQkvLyBzZXQgdXAgb3JiIGFuZCB0bQotCV9hc3NpZ24oIF9maWVsZCggX3RoaXMoKSwgImNvbnRyb2xsZXIiICksIF92KCAiY29udHJvbGxlciIgKSApIDsKKyAgICAvLyBzZXQgdXAgb3JiIGFuZCB0bQorICAgIF9hc3NpZ24oIF9maWVsZCggX3RoaXMoKSwgImNvbnRyb2xsZXIiICksIF92KCAiY29udHJvbGxlciIgKSApIDsKIAotCS8vIGNyZWF0ZSBhbGwgdGltZXJzCi0JU2lnbmF0dXJlIHRzaWcgPSBfcyggX3QoIlRpbWVyIiksIF90KCJTdHJpbmciKSwgX3QoIlN0cmluZyIpICkgOwotCWZvciAoVGltZXIgdCA6IHRmLnRpbWVycygpLnZhbHVlcygpICkgewotCSAgICBfYXNzaWduKCBfdiggdC5uYW1lKCkgKSwgCi0JCV9jYWxsKCBfdigidGYiKSwgIm1ha2VUaW1lciIsIHRzaWcsCi0JCSAgICBfY29uc3QodC5uYW1lKCkpLCBfY29uc3QodC5kZXNjcmlwdGlvbigpKSkpIDsKLQl9Ci0gICAgCi0JLy8gY3JlYXRlIGFsbCB0aW1lciBncm91cHMKLQlTaWduYXR1cmUgdGdzaWcgPSBfcyggX3QoIlRpbWVyR3JvdXAiKSwgX3QoIlN0cmluZyIpLCAKLQkgICAgX3QoIlN0cmluZyIpICkgOwotCWZvciAoVGltZXJHcm91cCB0ZyA6IHRmLnRpbWVyR3JvdXBzKCkudmFsdWVzKCkgKSB7Ci0JICAgIF9hc3NpZ24oIF92KCB0Zy5uYW1lKCkgKSwgCi0JCV9jYWxsKCBfdigidGYiKSwgIm1ha2VUaW1lckdyb3VwIiwgdGdzaWcsCi0JCSAgICBfY29uc3QodGcubmFtZSgpKSwgX2NvbnN0KHRnLmRlc2NyaXB0aW9uKCkpKSkgOwotCX0KLQkKLQkvLyBmaWxsIGluIHRpbWVyIGdyb3VwIGNvbnRhaW5tZW50Ci0JU2lnbmF0dXJlIGFkZFNpZyA9IF9zKCBfdm9pZCgpLCBfdCgiQ29udHJvbGxhYmxlIikpIDsKLQlmb3IgKFRpbWVyR3JvdXAgdGcgOiB0Zi50aW1lckdyb3VwcygpLnZhbHVlcygpICkgewotCSAgICBmb3IgKENvbnRyb2xsYWJsZSBjIDogdGcuY29udGVudHMoKSApIHsKLQkJX2V4cHIoIAotCQkgICAgX2NhbGwoIF92KHRnLm5hbWUoKSksICJhZGQiLCBhZGRTaWcsCi0JCQlfdihjLm5hbWUoKSkpKSA7Ci0JICAgIH0KLQl9CisgICAgLy8gY3JlYXRlIGFsbCB0aW1lcnMKKyAgICBTaWduYXR1cmUgdHNpZyA9IF9zKCBfdCgiVGltZXIiKSwgX3QoIlN0cmluZyIpLCBfdCgiU3RyaW5nIikgKSA7CisgICAgZm9yIChUaW1lciB0IDogdGYudGltZXJzKCkudmFsdWVzKCkgKSB7CisgICAgICAgIF9hc3NpZ24oIF92KCB0Lm5hbWUoKSApLAorICAgICAgICBfY2FsbCggX3YoInRmIiksICJtYWtlVGltZXIiLCB0c2lnLAorICAgICAgICAgICAgX2NvbnN0KHQubmFtZSgpKSwgX2NvbnN0KHQuZGVzY3JpcHRpb24oKSkpKSA7CisgICAgfQogCi0JX2VuZCgpIDsKKyAgICAvLyBjcmVhdGUgYWxsIHRpbWVyIGdyb3VwcworICAgIFNpZ25hdHVyZSB0Z3NpZyA9IF9zKCBfdCgiVGltZXJHcm91cCIpLCBfdCgiU3RyaW5nIiksCisgICAgICAgIF90KCJTdHJpbmciKSApIDsKKyAgICBmb3IgKFRpbWVyR3JvdXAgdGcgOiB0Zi50aW1lckdyb3VwcygpLnZhbHVlcygpICkgeworICAgICAgICBfYXNzaWduKCBfdiggdGcubmFtZSgpICksCisgICAgICAgIF9jYWxsKCBfdigidGYiKSwgIm1ha2VUaW1lckdyb3VwIiwgdGdzaWcsCisgICAgICAgICAgICBfY29uc3QodGcubmFtZSgpKSwgX2NvbnN0KHRnLmRlc2NyaXB0aW9uKCkpKSkgOworICAgIH0KKworICAgIC8vIGZpbGwgaW4gdGltZXIgZ3JvdXAgY29udGFpbm1lbnQKKyAgICBTaWduYXR1cmUgYWRkU2lnID0gX3MoIF92b2lkKCksIF90KCJDb250cm9sbGFibGUiKSkgOworICAgIGZvciAoVGltZXJHcm91cCB0ZyA6IHRmLnRpbWVyR3JvdXBzKCkudmFsdWVzKCkgKSB7CisgICAgICAgIGZvciAoQ29udHJvbGxhYmxlIGMgOiB0Zy5jb250ZW50cygpICkgeworICAgICAgICBfZXhwcigKKyAgICAgICAgICAgIF9jYWxsKCBfdih0Zy5uYW1lKCkpLCAiYWRkIiwgYWRkU2lnLAorICAgICAgICAgICAgX3YoYy5uYW1lKCkpKSkgOworICAgICAgICB9CisgICAgfQorCisgICAgX2VuZCgpIDsKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGdlbmVyYXRlRW50ZXJFeGl0TWV0aG9kcyggVGltZXJGYWN0b3J5IHRmICkgewotCS8vIGdlbmVyYXRlIGVudGVyIGFuZCBleGl0IG1ldGhvZCBmb3IgZWFjaCBUaW1lcgotCWZvciAoVGltZXIgdCA6IHRmLnRpbWVycygpLnZhbHVlcygpICkgewotCSAgICBnZW5lcmF0ZU1ldGhvZCggImVudGVyIiwgdC5uYW1lKCkgKSA7Ci0JICAgIGdlbmVyYXRlTWV0aG9kKCAiZXhpdCIsIHQubmFtZSgpICkgOwotCX0KKyAgICAvLyBnZW5lcmF0ZSBlbnRlciBhbmQgZXhpdCBtZXRob2QgZm9yIGVhY2ggVGltZXIKKyAgICBmb3IgKFRpbWVyIHQgOiB0Zi50aW1lcnMoKS52YWx1ZXMoKSApIHsKKyAgICAgICAgZ2VuZXJhdGVNZXRob2QoICJlbnRlciIsIHQubmFtZSgpICkgOworICAgICAgICBnZW5lcmF0ZU1ldGhvZCggImV4aXQiLCB0Lm5hbWUoKSApIDsKKyAgICB9CiAgICAgfQogCiAgICAgLy8gWFhYIHdlIHNob3VsZCBhZGQgSmF2YURvYyBzdXBwb3J0IHRvIGNvZGVnZW4sIGFuZCB1c2UgaXQKICAgICAvLyBmb3IgdGhlIGVudGVyL2V4aXQgbWV0aG9kcy4KICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGdlbmVyYXRlTWV0aG9kKCBTdHJpbmcgb3AsIFN0cmluZyB0aW1lciApIHsKLQlfbWV0aG9kKCBQVUJMSUMsIF92b2lkKCksIG9wKyJfIit0aW1lciApIDsKLQlfYm9keSgpIDsKLQkgICAgU2lnbmF0dXJlIHNpZyA9IF9zKF92b2lkKCksIF90KCJUaW1lckV2ZW50Q29udHJvbGxlciIpKSA7Ci0JICAgIF9leHByKCBfY2FsbCggX3YoImNvbnRyb2xsZXIiKSwgb3AsIHNpZywgX3YodGltZXIpKSkgOwotCV9lbmQoKSA7CisgICAgX21ldGhvZCggUFVCTElDLCBfdm9pZCgpLCBvcCsiXyIrdGltZXIgKSA7CisgICAgX2JvZHkoKSA7CisgICAgICAgIFNpZ25hdHVyZSBzaWcgPSBfcyhfdm9pZCgpLCBfdCgiVGltZXJFdmVudENvbnRyb2xsZXIiKSkgOworICAgICAgICBfZXhwciggX2NhbGwoIF92KCJjb250cm9sbGVyIiksIG9wLCBzaWcsIF92KHRpbWVyKSkpIDsKKyAgICBfZW5kKCkgOwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmdbXSBhcmdzICkgewotCS8vIGFyZ3VtZW50czogaW5maWxlIG91dGRpciBkZWJ1ZwotCWlmIChhcmdzLmxlbmd0aCAhPSAzKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlJlcXVpcmVkIGFyZ3VtZW50czogaW5wdXQtZmlsZSBvdXRwdXQtZGlyZWN0b3J5IiApIDsKLQkgICAgU3lzdGVtLmV4aXQoIDEgKSA7Ci0JfSBlbHNlIHsKLQkgICAgdHJ5IHsKLQkJU3RyaW5nIGluZmlsZSA9IGFyZ3NbMF0gOwotCQlTdHJpbmcgb3V0ZGlyID0gYXJnc1sxXSA7Ci0JCWJvb2xlYW4gZGVidWcgPSBCb29sZWFuLnBhcnNlQm9vbGVhbiggYXJnc1syXSApIDsKLQkJUGFpcjxTdHJpbmcsVGltZXJGYWN0b3J5PiByZXN1bHQgPSBwYXJzZURlc2NyaXB0aW9uKCBpbmZpbGUsCi0JCSAgICBkZWJ1ZyApIDsKLQkJZ2VuZXJhdGVTb3VyY2VGaWxlKCBvdXRkaXIsIHJlc3VsdCApIDsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4YykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oICJGYWlsZWQgd2l0aCBleGNlcHRpb246ICIgKyBleGMgKSA7Ci0JCWV4Yy5wcmludFN0YWNrVHJhY2UoKSA7Ci0JCVN5c3RlbS5leGl0KCAxICkgOwotCSAgICB9Ci0JfQorICAgIC8vIGFyZ3VtZW50czogaW5maWxlIG91dGRpciBkZWJ1ZworICAgIGlmIChhcmdzLmxlbmd0aCAhPSAzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlJlcXVpcmVkIGFyZ3VtZW50czogaW5wdXQtZmlsZSBvdXRwdXQtZGlyZWN0b3J5IiApIDsKKyAgICAgICAgU3lzdGVtLmV4aXQoIDEgKSA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgU3RyaW5nIGluZmlsZSA9IGFyZ3NbMF0gOworICAgICAgICBTdHJpbmcgb3V0ZGlyID0gYXJnc1sxXSA7CisgICAgICAgIGJvb2xlYW4gZGVidWcgPSBCb29sZWFuLnBhcnNlQm9vbGVhbiggYXJnc1syXSApIDsKKyAgICAgICAgUGFpcjxTdHJpbmcsVGltZXJGYWN0b3J5PiByZXN1bHQgPSBwYXJzZURlc2NyaXB0aW9uKCBpbmZpbGUsCisgICAgICAgICAgICBkZWJ1ZyApIDsKKyAgICAgICAgZ2VuZXJhdGVTb3VyY2VGaWxlKCBvdXRkaXIsIHJlc3VsdCApIDsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4YykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJGYWlsZWQgd2l0aCBleGNlcHRpb246ICIgKyBleGMgKSA7CisgICAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKSA7CisgICAgICAgIFN5c3RlbS5leGl0KCAxICkgOworICAgICAgICB9CisgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NvcmJhL3RpbWVyL3NyYy91dGlscy9UaW1lclV0aWxzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb3JiYS90aW1lci9zcmMvdXRpbHMvVGltZXJVdGlscy5qYXZhCmluZGV4IGQ1MGM1NTcuLjViZDdmY2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NvcmJhL3RpbWVyL3NyYy91dGlscy9UaW1lclV0aWxzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29yYmEvdGltZXIvc3JjL3V0aWxzL1RpbWVyVXRpbHMuamF2YQpAQCAtMzQsODUgKzM0LDg1IEBACiAKIAogcHVibGljIGNsYXNzIFRpbWVyVXRpbHMgewotICAgIHByaXZhdGUgVGltZXJVdGlscygpIHt9IAorICAgIHByaXZhdGUgVGltZXJVdGlscygpIHt9CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgZHVtcExvZ1RvRmlsZSggVGltZXJGYWN0b3J5IHRmLCBMb2dFdmVudEhhbmRsZXIgbG9nLCAKLQlGaWxlIGZpbGUgKSB7Ci0JCi0JUHJpbnRTdHJlYW0gcHMgPSBudWxsIDsKLQl0cnkgewotCSAgICBwcyA9IG5ldyBQcmludFN0cmVhbSggZmlsZSApIDsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZHVtcExvZ1RvRmlsZSggVGltZXJGYWN0b3J5IHRmLCBMb2dFdmVudEhhbmRsZXIgbG9nLAorICAgIEZpbGUgZmlsZSApIHsKIAotCSAgICAvLyBEdW1wIHRoZSB0aW1lciBhbmQgdGltZXIgZ3JvdXAgbmFtZXMgdG8gdGhlIGZpbGUgaW4gbnVtZXJpY2FsIG9yZGVyCi0JICAgIC8vIFRpbWUgZ3JvdXAgbmFtZXMgYXJlIG5vdCB1c2VkLCBidXQgdGhpcyB3aWxsIGJlIGNvbXBhdGlibGUKLQkgICAgLy8gd2l0aCB0aGUgbG9nIGV2ZW50IHByb2Nlc3Nvci4KLQkgICAgZm9yIChpbnQgY3RyPTA7IGN0cjx0Zi5udW1iZXJPZklkcygpOyBjdHIrKykgewotCQlDb250cm9sbGFibGUgY29uID0gdGYuZ2V0Q29udHJvbGxhYmxlKCBjdHIgKSA7Ci0JCXBzLnByaW50bG4oICJCRUdJTiAiICsgY29uLm5hbWUoKSApIDsKLQkJcHMucHJpbnRsbiggIkVORCAiICsgY29uLm5hbWUoKSApIDsKLQkgICAgfQorICAgIFByaW50U3RyZWFtIHBzID0gbnVsbCA7CisgICAgdHJ5IHsKKyAgICAgICAgcHMgPSBuZXcgUHJpbnRTdHJlYW0oIGZpbGUgKSA7CiAKLQkgICAgcHMucHJpbnRsbiggIiMjIyMjIiApIDsKKyAgICAgICAgLy8gRHVtcCB0aGUgdGltZXIgYW5kIHRpbWVyIGdyb3VwIG5hbWVzIHRvIHRoZSBmaWxlIGluIG51bWVyaWNhbCBvcmRlcgorICAgICAgICAvLyBUaW1lIGdyb3VwIG5hbWVzIGFyZSBub3QgdXNlZCwgYnV0IHRoaXMgd2lsbCBiZSBjb21wYXRpYmxlCisgICAgICAgIC8vIHdpdGggdGhlIGxvZyBldmVudCBwcm9jZXNzb3IuCisgICAgICAgIGZvciAoaW50IGN0cj0wOyBjdHI8dGYubnVtYmVyT2ZJZHMoKTsgY3RyKyspIHsKKyAgICAgICAgQ29udHJvbGxhYmxlIGNvbiA9IHRmLmdldENvbnRyb2xsYWJsZSggY3RyICkgOworICAgICAgICBwcy5wcmludGxuKCAiQkVHSU4gIiArIGNvbi5uYW1lKCkgKSA7CisgICAgICAgIHBzLnByaW50bG4oICJFTkQgIiArIGNvbi5uYW1lKCkgKSA7CisgICAgICAgIH0KIAotCSAgICAvLyBEdW1wIHRoZSB0aW1lciBpbmZvCi0JICAgIGZvciAoIFRpbWVyRXZlbnQgZXZlbnQgOiBsb2cgKSB7Ci0JCWludCBpZCA9IGV2ZW50LnRpbWVyKCkuaWQoKSA7Ci0JCWlmIChldmVudC50eXBlKCkgPT0gVGltZXJFdmVudC5UaW1lckV2ZW50VHlwZS5FTlRFUikKLQkJICAgIGlkID0gMippZCA7Ci0JCWVsc2UgLy8gRVhJVCBldmVudAotCQkgICAgaWQgPSAyKmlkICsgMSA7Ci0JCXBzLnByaW50bG4oIGlkICsgIiAiICsgZXZlbnQudGltZSgpICkgOwotCSAgICB9Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4YykgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJFcnJvciBpbiBkdW1waW5nICIgKyBsb2cgKyAiIHRvIGZpbGUgIiArIGZpbGUKLQkJKyAiOiAiICsgZXhjICkgOwotCSAgICBleGMucHJpbnRTdGFja1RyYWNlKCkgOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChwcyAhPSBudWxsKQotCQlwcy5jbG9zZSgpIDsKLQl9CisgICAgICAgIHBzLnByaW50bG4oICIjIyMjIyIgKSA7CisKKyAgICAgICAgLy8gRHVtcCB0aGUgdGltZXIgaW5mbworICAgICAgICBmb3IgKCBUaW1lckV2ZW50IGV2ZW50IDogbG9nICkgeworICAgICAgICBpbnQgaWQgPSBldmVudC50aW1lcigpLmlkKCkgOworICAgICAgICBpZiAoZXZlbnQudHlwZSgpID09IFRpbWVyRXZlbnQuVGltZXJFdmVudFR5cGUuRU5URVIpCisgICAgICAgICAgICBpZCA9IDIqaWQgOworICAgICAgICBlbHNlIC8vIEVYSVQgZXZlbnQKKyAgICAgICAgICAgIGlkID0gMippZCArIDEgOworICAgICAgICBwcy5wcmludGxuKCBpZCArICIgIiArIGV2ZW50LnRpbWUoKSApIDsKKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiRXJyb3IgaW4gZHVtcGluZyAiICsgbG9nICsgIiB0byBmaWxlICIgKyBmaWxlCisgICAgICAgICsgIjogIiArIGV4YyApIDsKKyAgICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpIDsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgcHMuY2xvc2UoKSA7CisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIENvbm5lY3RvciB7Ci0JcHVibGljIFN0cmluZyBuYW1lIDsKLQlwdWJsaWMgbG9uZyBjb3VudCA7Ci0JcHVibGljIGRvdWJsZSBtaW4gOwotCXB1YmxpYyBkb3VibGUgbWF4IDsKLQlwdWJsaWMgZG91YmxlIGF2ZXJhZ2UgOwotCXB1YmxpYyBkb3VibGUgc3RhbmRhcmREZXZpYXRpb24gOwotICAgIAotCXB1YmxpYyBDb25uZWN0b3IoIFN0cmluZyBuYW1lLCBsb25nIGNvdW50LCBkb3VibGUgbWluLAotCSAgICBkb3VibGUgbWF4LCBkb3VibGUgYXZlcmFnZSwgZG91YmxlIHN0YW5kYXJkRGV2aWF0aW9uICkgeworICAgIHB1YmxpYyBTdHJpbmcgbmFtZSA7CisgICAgcHVibGljIGxvbmcgY291bnQgOworICAgIHB1YmxpYyBkb3VibGUgbWluIDsKKyAgICBwdWJsaWMgZG91YmxlIG1heCA7CisgICAgcHVibGljIGRvdWJsZSBhdmVyYWdlIDsKKyAgICBwdWJsaWMgZG91YmxlIHN0YW5kYXJkRGV2aWF0aW9uIDsKIAotCSAgICB0aGlzLm5hbWUgPSBuYW1lIDsKLQkgICAgdGhpcy5jb3VudCA9IGNvdW50IDsKLQkgICAgdGhpcy5taW4gPSBtaW4gOwotCSAgICB0aGlzLm1heCA9IG1heCA7Ci0JICAgIHRoaXMuYXZlcmFnZSA9IGF2ZXJhZ2UgOwotCSAgICB0aGlzLnN0YW5kYXJkRGV2aWF0aW9uID0gc3RhbmRhcmREZXZpYXRpb24gOwotCX0KKyAgICBwdWJsaWMgQ29ubmVjdG9yKCBTdHJpbmcgbmFtZSwgbG9uZyBjb3VudCwgZG91YmxlIG1pbiwKKyAgICAgICAgZG91YmxlIG1heCwgZG91YmxlIGF2ZXJhZ2UsIGRvdWJsZSBzdGFuZGFyZERldmlhdGlvbiApIHsKKworICAgICAgICB0aGlzLm5hbWUgPSBuYW1lIDsKKyAgICAgICAgdGhpcy5jb3VudCA9IGNvdW50IDsKKyAgICAgICAgdGhpcy5taW4gPSBtaW4gOworICAgICAgICB0aGlzLm1heCA9IG1heCA7CisgICAgICAgIHRoaXMuYXZlcmFnZSA9IGF2ZXJhZ2UgOworICAgICAgICB0aGlzLnN0YW5kYXJkRGV2aWF0aW9uID0gc3RhbmRhcmREZXZpYXRpb24gOworICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29uY2F0KCBTdHJpbmdbXSBzdHJzICkgewotCVN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpIDsKLQlmb3IoIFN0cmluZyBzdHIgOiBzdHJzICkgewotCSAgICBzYi5hcHBlbmQoIHN0ciApIDsKLQkgICAgc2IuYXBwZW5kKCAnXG4nICkgOwotCX0KLQlyZXR1cm4gc2IudG9TdHJpbmcoKSA7CisgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCkgOworICAgIGZvciggU3RyaW5nIHN0ciA6IHN0cnMgKSB7CisgICAgICAgIHNiLmFwcGVuZCggc3RyICkgOworICAgICAgICBzYi5hcHBlbmQoICdcbicgKSA7CisgICAgfQorICAgIHJldHVybiBzYi50b1N0cmluZygpIDsKICAgICB9CiAKICAgICAvKiogV3JpdGUgdGhlIFRpbWVyIGRhdGEgaW4gdGhlIE1hcCB0byB0aGUgbmFtZWQgZmlsZSB3aXRoIHRoZSBnaXZlbgogICAgICAqIHRpdGxlLgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB3cml0ZUh0bWxUYWJsZSggTWFwPFRpbWVyLCBTdGF0aXN0aWNzPiBkYXRhLAotCVN0cmluZyBmbmFtZSwgU3RyaW5nIHRpdGxlICkgeworICAgIFN0cmluZyBmbmFtZSwgU3RyaW5nIHRpdGxlICkgewogCi0JLy8gb3BlbiBhIGZpbGUgYW5kIGEgcHJpbnRXcml0ZXIgaGVyZQotCVByaW50V3JpdGVyIHB3ID0gbnVsbCA7Ci0JdHJ5IHsKLQkgICAgcHcgPSBuZXcgUHJpbnRXcml0ZXIoIGZuYW1lICkgOwotICAgICAgICAgICAgcHcucHJpbnRsbiggCisgICAgLy8gb3BlbiBhIGZpbGUgYW5kIGEgcHJpbnRXcml0ZXIgaGVyZQorICAgIFByaW50V3JpdGVyIHB3ID0gbnVsbCA7CisgICAgdHJ5IHsKKyAgICAgICAgcHcgPSBuZXcgUHJpbnRXcml0ZXIoIGZuYW1lICkgOworICAgICAgICAgICAgcHcucHJpbnRsbigKICAgICAgICAiPGh0bWw+IisKICAgICAgICAiPGhlYWQ+IisKICAgICAgICAiICA8dGl0bGU+IiArIHRpdGxlICsgIjwvdGl0bGU+IisKQEAgLTEyOSwyOSArMTI5LDI5IEBACiAgICAgICAgIiAgICAgIDx0ZD5zdGQgZGV2aWF0aW9uPC90ZD4iKwogICAgICAgICIgICAgPC90cj4iKTsKIAotCSAgIGZvciAoVGltZXIgdGltZXIgOiBkYXRhLmtleVNldCgpICkgewotCSAgICAgICBTdGF0aXN0aWNzIHN0YXRzID0gZGF0YS5nZXQoIHRpbWVyICkgOwotICAgICAgICAgICAgcHcucHJpbnRsbiggCi0JIiAgICA8dHI+IisKLQkiICAgICAgPHRkPiIrdGltZXIubmFtZSgpKyI8L3RkPiIrCi0JIiAgICAgIDx0ZD4iK3N0YXRzLmNvdW50KCkrIjwvdGQ+IisKLQkiICAgICAgPHRkPiIrc3RhdHMubWluKCkrIjwvdGQ+IisKLQkiICAgICAgPHRkPiIrc3RhdHMubWF4KCkrIjwvdGQ+IisKLQkiICAgICAgPHRkPiIrc3RhdHMuYXZlcmFnZSgpKyI8L3RkPiIrCi0JIiAgICAgIDx0ZD4iK3N0YXRzLnN0YW5kYXJkRGV2aWF0aW9uKCkrIjwvdGQ+IisKLQkiICAgIDwvdHI+Iik7Ci0JICAgfQorICAgICAgIGZvciAoVGltZXIgdGltZXIgOiBkYXRhLmtleVNldCgpICkgeworICAgICAgICAgICBTdGF0aXN0aWNzIHN0YXRzID0gZGF0YS5nZXQoIHRpbWVyICkgOworICAgICAgICAgICAgcHcucHJpbnRsbigKKyAgICAiICAgIDx0cj4iKworICAgICIgICAgICA8dGQ+Iit0aW1lci5uYW1lKCkrIjwvdGQ+IisKKyAgICAiICAgICAgPHRkPiIrc3RhdHMuY291bnQoKSsiPC90ZD4iKworICAgICIgICAgICA8dGQ+IitzdGF0cy5taW4oKSsiPC90ZD4iKworICAgICIgICAgICA8dGQ+IitzdGF0cy5tYXgoKSsiPC90ZD4iKworICAgICIgICAgICA8dGQ+IitzdGF0cy5hdmVyYWdlKCkrIjwvdGQ+IisKKyAgICAiICAgICAgPHRkPiIrc3RhdHMuc3RhbmRhcmREZXZpYXRpb24oKSsiPC90ZD4iKworICAgICIgICAgPC90cj4iKTsKKyAgICAgICB9CiAgICAgICAgICAgIHB3LnByaW50bG4oCi0gICAgCSI8L3RhYmxlPiIrCi0JIjwvYm9keT4iKwotCSI8L2h0bWw+Iik7CisgICAgICAgICI8L3RhYmxlPiIrCisgICAgIjwvYm9keT4iKworICAgICI8L2h0bWw+Iik7CiAKLQl9IGNhdGNoIChFeGNlcHRpb24gZXhjKSB7Ci0JICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCBleGMgKSA7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKHB3ICE9IG51bGwpCi0JCXB3LmNsb3NlKCkgOwotCX0KKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXhjKSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCBleGMgKSA7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKHB3ICE9IG51bGwpCisgICAgICAgIHB3LmNsb3NlKCkgOworICAgIH0KIAogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2NvbW1vbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvY29tbW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTA0MDlmNy4uZTNhYTA1MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvY29tbW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvY29tbW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE0LDcgKzE0LDcgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAjCiAKLSAKKwogCiBzcmMuZGlyPS4KIG1iZWFuYXBpLmphcj0ke3B1Ymxpc2guaG9tZX0vYWRtaW4tY29yZS9tYmVhbmFwaS9saWIvbWJlYW5hcGkuamFyCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9jb21tb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvY29tbW9uL2J1aWxkLnhtbAppbmRleCA1ZTgzZTMzLi4yN2RjMmJiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9jb21tb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2NvbW1vbi9idWlsZC54bWwKQEAgLTMyLDcgKzMyLDcgQEAKICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2pteHJpLmphcn0iLz4KICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke21iZWFuYXBpLmphcn0iLz4KICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke21iZWFuYXBpLWltcGwuamFyfSIvPgotCSAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7bWdtdGFwaS5qYXJ9Ii8+CisgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHttZ210YXBpLmphcn0iLz4KICAgICA8L3BhdGg+CiAKICAgICA8cGF0aCBpZD0icnVuLmNsYXNzcGF0aCI+CkBAIC00MCw3ICs0MCw3IEBACiAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7am14cmkuamFyfSIvPgogICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke21iZWFuYXBpLmphcn0iLz4KICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHttYmVhbmFwaS1pbXBsLmphcn0iLz4KLSAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtqbXhyZW1vdGUuamFyfSIvPiAgICAgICAKKyAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtqbXhyZW1vdGUuamFyfSIvPgogICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke21nbXRhcGkuamFyfSIvPgogICAgIDwvcGF0aD4KIApAQCAtNzcsMjcgKzc3LDI3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1zdGFuZGFsb25lLWluc3RhbmNlLW1hbmFnZXIiIGRlc2NyaXB0aW9uPSJydW5zIHRoZSBzdGFuZGFsb25lIGluc3RhbmNlIG1hbmFnZXIgdW5pdCB0ZXN0IHR3aWNlIHRvIGNyZWF0ZSB0d28gc3RhbmRhbG9uZSBpbnN0YW5jZXMiPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjb20uc3VuLmVudGVycHJpc2UuYWRtaW4ubWJlYW5hcGkuY29tbW9uLlN0YW5kYWxvbmVJbnN0YW5jZU1hbmFnZXIiPgotCTxjbGFzc3BhdGggcmVmaWQ9InJ1bi5jbGFzc3BhdGgiLz4KLQk8YXJnIHZhbHVlPSIke3N0YW5kYWxvbmUuaW5zdGFuY2Uub25lfSIvPgkKKyAgICA8Y2xhc3NwYXRoIHJlZmlkPSJydW4uY2xhc3NwYXRoIi8+CisgICAgPGFyZyB2YWx1ZT0iJHtzdGFuZGFsb25lLmluc3RhbmNlLm9uZX0iLz4KICAgICAgIDwvamF2YT4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnN1bi5lbnRlcnByaXNlLmFkbWluLm1iZWFuYXBpLmNvbW1vbi5TdGFuZGFsb25lSW5zdGFuY2VNYW5hZ2VyIj4KLQk8Y2xhc3NwYXRoIHJlZmlkPSJydW4uY2xhc3NwYXRoIi8+Ci0JPGFyZyB2YWx1ZT0iJHtzdGFuZGFsb25lLmluc3RhbmNlLnR3b30iLz4KLQk8c3lzcHJvcGVydHkga2V5PSJIT1NUIiB2YWx1ZT0ibG9jYWxob3N0Ii8+Ci0JPHN5c3Byb3BlcnR5IGtleT0iUE9SVCIgdmFsdWU9Ijg2ODYiLz4KLQk8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9VU0VSIiB2YWx1ZT0iYWRtaW4iLz4KLQk8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9QQVNTV09SRCIgdmFsdWU9ImFkbWluYWRtaW4iLz4KKyAgICA8Y2xhc3NwYXRoIHJlZmlkPSJydW4uY2xhc3NwYXRoIi8+CisgICAgPGFyZyB2YWx1ZT0iJHtzdGFuZGFsb25lLmluc3RhbmNlLnR3b30iLz4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJIT1NUIiB2YWx1ZT0ibG9jYWxob3N0Ii8+CisgICAgPHN5c3Byb3BlcnR5IGtleT0iUE9SVCIgdmFsdWU9Ijg2ODYiLz4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9VU0VSIiB2YWx1ZT0iYWRtaW4iLz4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9QQVNTV09SRCIgdmFsdWU9ImFkbWluYWRtaW4iLz4KICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLWFteC1jb25uZWN0aW9uLXZlcmlmaWVyIiBkZXNjcmlwdGlvbj0icnVucyB0aGUgYW14IGNvbm5lY3Rpb24gdmVyaWZpZXIgdW5pdCB0ZXN0Ij4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnN1bi5lbnRlcnByaXNlLmFkbWluLm1iZWFuYXBpLmNvbW1vbi5BTVhDb25uZWN0aW9uVmVyaWZpZXIiPgotCTxjbGFzc3BhdGggcmVmaWQ9InJ1bi5jbGFzc3BhdGgiLz4KLQk8YXJnIHZhbHVlPSIke3N0YW5kYWxvbmUuaW5zdGFuY2Uub25lfSIvPgkKLQk8c3lzcHJvcGVydHkga2V5PSJIT1NUIiB2YWx1ZT0ibG9jYWxob3N0Ii8+Ci0JPHN5c3Byb3BlcnR5IGtleT0iUE9SVCIgdmFsdWU9Ijg2ODYiLz4KLQk8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9VU0VSIiB2YWx1ZT0iYWRtaW4iLz4KLQk8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9QQVNTV09SRCIgdmFsdWU9ImFkbWluYWRtaW4iLz4KKyAgICA8Y2xhc3NwYXRoIHJlZmlkPSJydW4uY2xhc3NwYXRoIi8+CisgICAgPGFyZyB2YWx1ZT0iJHtzdGFuZGFsb25lLmluc3RhbmNlLm9uZX0iLz4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJIT1NUIiB2YWx1ZT0ibG9jYWxob3N0Ii8+CisgICAgPHN5c3Byb3BlcnR5IGtleT0iUE9SVCIgdmFsdWU9Ijg2ODYiLz4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9VU0VSIiB2YWx1ZT0iYWRtaW4iLz4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9QQVNTV09SRCIgdmFsdWU9ImFkbWluYWRtaW4iLz4KICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2NvbW1vbi9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvY29tbW9uL0FNWENvbm5lY3Rpb25WZXJpZmllci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvY29tbW9uL2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9jb21tb24vQU1YQ29ubmVjdGlvblZlcmlmaWVyLmphdmEKaW5kZXggODU5MTAxZS4uYmFhOWMxYyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvY29tbW9uL2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9jb21tb24vQU1YQ29ubmVjdGlvblZlcmlmaWVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvY29tbW9uL2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9jb21tb24vQU1YQ29ubmVjdGlvblZlcmlmaWVyLmphdmEKQEAgLTUyLDcgKzUyLDcgQEAKICAqIEB2ZXJzaW9uICRSZXZpc2lvbjogMS4yICQKICAqLwogcHVibGljIGNsYXNzIEFNWENvbm5lY3Rpb25WZXJpZmllciB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBEb21haW5Sb290CW1Eb21haW5Sb290OworICAgIHByaXZhdGUgZmluYWwgRG9tYWluUm9vdCAgICBtRG9tYWluUm9vdDsKIAogICAgIHByaXZhdGUgRG9tYWluQ29uZmlnICAgZ2V0RG9tYWluQ29uZmlnKCkKICAgICB7CkBAIC03NCwxNCArNzQsMTQgQEAKICAgICAgICAgcmV0dXJuKCBTbWFydFN0cmluZ2lmaWVyLnRvU3RyaW5nKCBvICkgKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgIGxpc3RNYXAoZmluYWwgU3RyaW5nCW1zZywgZmluYWwgTWFwIAltKQorICAgIHByaXZhdGUgdm9pZCAgbGlzdE1hcChmaW5hbCBTdHJpbmcgICAgbXNnLCBmaW5hbCBNYXAgICAgIG0pCiAgICAgewogICAgICAgICBwcmludGxuKCBtc2cgKyAiOiAiICsgdG9TdHJpbmcoIG0ua2V5U2V0KCkgKSApOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBsaXN0KCkKICAgICB7Ci0gICAgICAgIGZpbmFsIERvbWFpbkNvbmZpZwlkY3AJPSBnZXREb21haW5Db25maWcoKTsKKyAgICAgICAgZmluYWwgRG9tYWluQ29uZmlnICAgIGRjcCAgICA9IGdldERvbWFpbkNvbmZpZygpOwogCiAgICAgICAgIC8vIFRvcC1sZXZlbCBpdGVtcwogICAgICAgICBwcmludGxuKCAiXG4tLS0gVG9wLWxldmVsIC0tLSBcbiIgKTsKQEAgLTEyOCw3ICsxMjgsNyBAQAogCiAKICAgICAgICAgLy8gZ2V0IGEgQ29uZmlnQ29uZmlnCi0gICAgICAgIGZpbmFsIENvbmZpZ0NvbmZpZwljb25maWcJPQorICAgICAgICBmaW5hbCBDb25maWdDb25maWcgICAgY29uZmlnICAgID0KICAgICAgICAgICAgIChDb25maWdDb25maWcpZGNwLmdldENvbmZpZ0NvbmZpZ01hcCgpLmdldCggInNlcnZlci1jb25maWciICk7CiAKIApAQCAtMTQ1LDE5ICsxNDUsMTkgQEAKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgICBxdWVyeVdpbGQoZmluYWwgU3RyaW5nIG5hbWUsIGZpbmFsIFN0cmluZyB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGZpbmFsIFN0cmluZ1tdCXByb3BOYW1lcwk9IG5ldyBTdHJpbmdbIDEgXTsKLSAgICAgICAgcHJvcE5hbWVzWyAwIF0JPSBuYW1lOworICAgICAgICBmaW5hbCBTdHJpbmdbXSAgICBwcm9wTmFtZXMgICAgPSBuZXcgU3RyaW5nWyAxIF07CisgICAgICAgIHByb3BOYW1lc1sgMCBdICAgID0gbmFtZTsKIAotICAgICAgICBmaW5hbCBTdHJpbmdbXQlwcm9wVmFsdWVzCT0gbmV3IFN0cmluZ1sgMSBdOwotICAgICAgICBwcm9wVmFsdWVzWyAwIF0JPSB2YWx1ZTsKKyAgICAgICAgZmluYWwgU3RyaW5nW10gICAgcHJvcFZhbHVlcyAgICA9IG5ldyBTdHJpbmdbIDEgXTsKKyAgICAgICAgcHJvcFZhbHVlc1sgMCBdICAgID0gdmFsdWU7CiAKLSAgICAgICAgZmluYWwgU2V0CWl0ZW1zCT0gZ2V0UXVlcnlNZ3IoKS5xdWVyeVdpbGRTZXQoIHByb3BOYW1lcywgcHJvcFZhbHVlcyApOworICAgICAgICBmaW5hbCBTZXQgICAgaXRlbXMgICAgPSBnZXRRdWVyeU1ncigpLnF1ZXJ5V2lsZFNldCggcHJvcE5hbWVzLCBwcm9wVmFsdWVzICk7CiAKICAgICAgICAgcHJpbnRsbiggIlxuLS0tIFF1ZXJpZWQgZm9yICIgKyBwcm9wTmFtZXNbIDAgXSArICI9IiArIHByb3BWYWx1ZXNbIDAgXSArICIgLS0tIiApOwotICAgICAgICBmaW5hbCBJdGVyYXRvcglpdGVyCT0gaXRlbXMuaXRlcmF0b3IoKTsKKyAgICAgICAgZmluYWwgSXRlcmF0b3IgICAgaXRlciAgICA9IGl0ZW1zLml0ZXJhdG9yKCk7CiAgICAgICAgIHdoaWxlICggaXRlci5oYXNOZXh0KCkgKQogICAgICAgICB7Ci0gICAgICAgICAgICBmaW5hbCBBTVgJaXRlbQk9IChBTVgpaXRlci5uZXh0KCk7CisgICAgICAgICAgICBmaW5hbCBBTVggICAgaXRlbSAgICA9IChBTVgpaXRlci5uZXh0KCk7CiAKICAgICAgICAgICAgIHByaW50bG4oICJqMmVlVHlwZT0iICsgaXRlbS5nZXRKMkVFVHlwZSgpICsgIiwiICsgIm5hbWU9IiArIGl0ZW0uZ2V0TmFtZSgpICk7CiAgICAgICAgIH0KQEAgLTE2OCwxNSArMTY4LDE1IEBACiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHF1ZXJ5Rm9ySjJFRVR5cGUoIGZpbmFsIFN0cmluZyBqMmVlVHlwZSApCiAgICAgewotICAgICAgICBmaW5hbCBTdHJpbmcJcHJvcAk9IFV0aWwubWFrZUoyRUVUeXBlUHJvcCggajJlZVR5cGUgKTsKLSAgICAgICAgZmluYWwgU2V0CQlpdGVtcwk9IGdldFF1ZXJ5TWdyKCkucXVlcnlQcm9wc1NldCggcHJvcCApOworICAgICAgICBmaW5hbCBTdHJpbmcgICAgcHJvcCAgICA9IFV0aWwubWFrZUoyRUVUeXBlUHJvcCggajJlZVR5cGUgKTsKKyAgICAgICAgZmluYWwgU2V0ICAgICAgICBpdGVtcyAgICA9IGdldFF1ZXJ5TWdyKCkucXVlcnlQcm9wc1NldCggcHJvcCApOwogCiAgICAgICAgIHByaW50bG4oICJcbi0tLSBRdWVyaWVkIGZvciAiICsgcHJvcCArICIgLS0tIiApOwogCi0gICAgICAgIGZpbmFsIEl0ZXJhdG9yCWl0ZXIJPSBpdGVtcy5pdGVyYXRvcigpOworICAgICAgICBmaW5hbCBJdGVyYXRvciAgICBpdGVyICAgID0gaXRlbXMuaXRlcmF0b3IoKTsKICAgICAgICAgd2hpbGUgKCBpdGVyLmhhc05leHQoKSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZpbmFsIEFNWAlpdGVtCT0gKEFNWClpdGVyLm5leHQoKTsKKyAgICAgICAgICAgIGZpbmFsIEFNWCAgICBpdGVtICAgID0gKEFNWClpdGVyLm5leHQoKTsKIAogICAgICAgICAgICAgLy8gdGhleSBtYXkgb3IgbWF5IG5vdCBoYXZlIHVuaXF1ZSBuYW1lcywgc28gc2hvdyBPYmplY3ROYW1lcwogICAgICAgICAgICAgcHJpbnRsbiggaXRlbS5nZXRGdWxsVHlwZSgpICk7CkBAIC0xOTMsMTYgKzE5MywxNiBAQAogICAgICAgICBxdWVyeUZvckoyRUVUeXBlKCBYVHlwZXMuU1NMX0NPTkZJRyApOwogICAgIH0KIAotICAgIHB1YmxpYyBBTVhDb25uZWN0aW9uVmVyaWZpZXIoZmluYWwgU3RyaW5nIGhvc3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgcG9ydCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBhZG1pblVzZXIsIAorICAgIHB1YmxpYyBBTVhDb25uZWN0aW9uVmVyaWZpZXIoZmluYWwgU3RyaW5nIGhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgYWRtaW5Vc2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgYWRtaW5QYXNzd29yZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiB1c2VUTFMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KICAgICB7Ci0gICAgICAgIGZpbmFsIEFNWENvbm5lY3RvciBjdAk9IG5ldyBBTVhDb25uZWN0b3IoIGhvc3QsIHBvcnQsIGFkbWluVXNlciwgYWRtaW5QYXNzd29yZCwgdXNlVExTICk7CisgICAgICAgIGZpbmFsIEFNWENvbm5lY3RvciBjdCAgICA9IG5ldyBBTVhDb25uZWN0b3IoIGhvc3QsIHBvcnQsIGFkbWluVXNlciwgYWRtaW5QYXNzd29yZCwgdXNlVExTICk7CiAKLSAgICAgICAgbURvbWFpblJvb3QJPSBjdC5nZXREb21haW5Sb290KCk7CisgICAgICAgIG1Eb21haW5Sb290ICAgID0gY3QuZ2V0RG9tYWluUm9vdCgpOwogCiAgICAgICAgIHByb3ZlQ29ubmVjdGlvbiggKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9jb21tb24vY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2NvbW1vbi9BTVhDb25uZWN0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2NvbW1vbi9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvY29tbW9uL0FNWENvbm5lY3Rvci5qYXZhCmluZGV4IDgxYjZiM2UuLmM1OTFjMWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2NvbW1vbi9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvY29tbW9uL0FNWENvbm5lY3Rvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2NvbW1vbi9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvY29tbW9uL0FNWENvbm5lY3Rvci5qYXZhCkBAIC0zMywyOSArMzMsMjkgQEAKICAqIEB2ZXJzaW9uICRSZXZpc2lvbjogMS4yICQKICAqLwogcHVibGljIGNsYXNzIEFNWENvbm5lY3RvciB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBEb21haW5Sb290CQkJbURvbWFpblJvb3Q7Ci0gICAgcHJpdmF0ZSBmaW5hbCBBcHBzZXJ2ZXJDb25uZWN0aW9uU291cmNlCW1BcHBzZXJ2ZXJDb25uZWN0aW9uU291cmNlOwotICAgIHByaXZhdGUgSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXJJbXBsCW1IYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lcjsKKyAgICBwcml2YXRlIGZpbmFsIERvbWFpblJvb3QgICAgICAgICAgICBtRG9tYWluUm9vdDsKKyAgICBwcml2YXRlIGZpbmFsIEFwcHNlcnZlckNvbm5lY3Rpb25Tb3VyY2UgICAgbUFwcHNlcnZlckNvbm5lY3Rpb25Tb3VyY2U7CisgICAgcHJpdmF0ZSBIYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lckltcGwgICAgbUhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nCVRSVVNUX1NUT1JFX0ZJTEUJCT0gIi4va2V5c3RvcmUiOwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZwlUUlVTVF9TVE9SRV9QQVNTV09SRAk9ICJjaGFuZ2VtZSI7CisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nICAgIFRSVVNUX1NUT1JFX0ZJTEUgICAgICAgID0gIi4va2V5c3RvcmUiOworICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyAgICBUUlVTVF9TVE9SRV9QQVNTV09SRCAgICA9ICJjaGFuZ2VtZSI7CiAKLSAgICAvLyBjdXJyZW50bHkgaXQgZGVmYXVsdHMgdG8gdXNpbmcgcm1pIHRyYW5zcG9ydC4gCisgICAgLy8gY3VycmVudGx5IGl0IGRlZmF1bHRzIHRvIHVzaW5nIHJtaSB0cmFuc3BvcnQuCiAgICAgcHVibGljIEFNWENvbm5lY3RvcigKLSAgICAgICAgZmluYWwgU3RyaW5nCWhvc3QsCi0gICAgICAgIGZpbmFsIGludAkJcG9ydCwKLSAgICAgICAgZmluYWwgU3RyaW5nCXVzZXIsCi0gICAgICAgIGZpbmFsIFN0cmluZwlwYXNzd29yZCwKLSAgICAgICAgZmluYWwgYm9vbGVhbgl1c2VUTFMgKQorICAgICAgICBmaW5hbCBTdHJpbmcgICAgaG9zdCwKKyAgICAgICAgZmluYWwgaW50ICAgICAgICBwb3J0LAorICAgICAgICBmaW5hbCBTdHJpbmcgICAgdXNlciwKKyAgICAgICAgZmluYWwgU3RyaW5nICAgIHBhc3N3b3JkLAorICAgICAgICBmaW5hbCBib29sZWFuICAgIHVzZVRMUyApCiAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgogICAgIHsKLSAgICAgICAgbUhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyCT0gbnVsbDsKKyAgICAgICAgbUhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyICAgID0gbnVsbDsKIAotICAgICAgICBUTFNQYXJhbXMJdGxzUGFyYW1zCT0gbnVsbDsKKyAgICAgICAgVExTUGFyYW1zICAgIHRsc1BhcmFtcyAgICA9IG51bGw7CiAKICAgICAgICAgaWYgKCB1c2VUTFMgKQogICAgICAgICB7Ci0gICAgICAgICAgICB0bHNQYXJhbXMJPSBjcmVhdGVUTFNQYXJhbXMoICk7CisgICAgICAgICAgICB0bHNQYXJhbXMgICAgPSBjcmVhdGVUTFNQYXJhbXMoICk7CiAgICAgICAgIH0KIAogICAgICAgICBmaW5hbCBTdHJpbmcgaW5mbyA9ICJob3N0PSIgKyBob3N0ICsgIiwgcG9ydD0iICsgcG9ydCArCkBAIC02NCwxMiArNjQsMTIgQEAKIAogICAgICAgICBpbmZvKCAiQ29ubmVjdGluZzogIiArIGluZm8gKTsKIAotICAgICAgICBtQXBwc2VydmVyQ29ubmVjdGlvblNvdXJjZQk9CisgICAgICAgIG1BcHBzZXJ2ZXJDb25uZWN0aW9uU291cmNlICAgID0KICAgICAgICAgICAgIG5ldyBBcHBzZXJ2ZXJDb25uZWN0aW9uU291cmNlKCBBcHBzZXJ2ZXJDb25uZWN0aW9uU291cmNlLlBST1RPQ09MX1JNSSwKICAgICAgICAgICAgIGhvc3QsIHBvcnQsIHVzZXIsIHBhc3N3b3JkLCB0bHNQYXJhbXMsIG51bGwpOwogCiAKLSAgICAgICAgbURvbWFpblJvb3QJPSBtQXBwc2VydmVyQ29ubmVjdGlvblNvdXJjZS5nZXREb21haW5Sb290KCk7CisgICAgICAgIG1Eb21haW5Sb290ICAgID0gbUFwcHNlcnZlckNvbm5lY3Rpb25Tb3VyY2UuZ2V0RG9tYWluUm9vdCgpOwogCiAgICAgICAgIGluZm8oICJDb25uZWN0aW9uIGVzdGFibGlzaGVkIHN1Y2Nlc3NmdWxseTogIiArIGluZm8gKTsKICAgICAgICAgaWYgKCB1c2VUTFMgKQpAQCAtODEsMTUgKzgxLDE1IEBACiAKICAgICBwcml2YXRlIFRMU1BhcmFtcyBjcmVhdGVUTFNQYXJhbXMoKQogICAgIHsKLSAgICAgICAgZmluYWwgRmlsZSB0cnVzdFN0b3JlCT0gbmV3IEZpbGUoIFRSVVNUX1NUT1JFX0ZJTEUgKTsKLSAgICAgICAgZmluYWwgY2hhcltdIHRydXN0U3RvcmVQYXNzd29yZAk9IFRSVVNUX1NUT1JFX1BBU1NXT1JELnRvQ2hhckFycmF5KCk7CisgICAgICAgIGZpbmFsIEZpbGUgdHJ1c3RTdG9yZSAgICA9IG5ldyBGaWxlKCBUUlVTVF9TVE9SRV9GSUxFICk7CisgICAgICAgIGZpbmFsIGNoYXJbXSB0cnVzdFN0b3JlUGFzc3dvcmQgICAgPSBUUlVTVF9TVE9SRV9QQVNTV09SRC50b0NoYXJBcnJheSgpOwogCi0gICAgICAgIG1IYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lcgk9IG5ldyBIYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lckltcGwoKTsKKyAgICAgICAgbUhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyICAgID0gbmV3IEhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVySW1wbCgpOwogICAgICAgICBmaW5hbCBUcnVzdFN0b3JlVHJ1c3RNYW5hZ2VyIHRydXN0TWdyID0KICAgICAgICAgICAgIG5ldyBUcnVzdFN0b3JlVHJ1c3RNYW5hZ2VyKCB0cnVzdFN0b3JlLCB0cnVzdFN0b3JlUGFzc3dvcmQpOwogICAgICAgICB0cnVzdE1nci5zZXRQcm9tcHQoIHRydWUgKTsKIAotICAgICAgICBmaW5hbCBUTFNQYXJhbXMJdGxzUGFyYW1zID0gbmV3IFRMU1BhcmFtcyggdHJ1c3RNZ3IsIG1IYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lciApOworICAgICAgICBmaW5hbCBUTFNQYXJhbXMgICAgdGxzUGFyYW1zID0gbmV3IFRMU1BhcmFtcyggdHJ1c3RNZ3IsIG1IYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lciApOwogCiAgICAgICAgIHJldHVybiggdGxzUGFyYW1zICk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvY29tbW9uL2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9jb21tb24vQU1YTW9uaXRvcmluZ1Rlc3RCYXNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9jb21tb24vY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2NvbW1vbi9BTVhNb25pdG9yaW5nVGVzdEJhc2UuamF2YQppbmRleCA0NTc2YTU2Li5lNmFiMGEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9jb21tb24vY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2NvbW1vbi9BTVhNb25pdG9yaW5nVGVzdEJhc2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9jb21tb24vY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2NvbW1vbi9BTVhNb25pdG9yaW5nVGVzdEJhc2UuamF2YQpAQCAtMjgsNzkgKzI4LDc5IEBACiAvKioKICAqLwogcHVibGljIGNsYXNzIEFNWE1vbml0b3JpbmdUZXN0QmFzZSB7Ci0gICAgCisKICAgICBEb21haW5Sb290IG1Eb21haW5Sb290OwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZFUl9OQU1FID0gInNlcnZlciI7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVBQX05BTUUgPSAic3RhdGVsZXNzLXNpbXBsZSI7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RBVEVMRVNTX0VKQl9OQU1FID0gInN0YXRlbGVzcy1zaW1wbGUud2FyIjsKIAotICAgIAotICAgIHB1YmxpYyBBTVhNb25pdG9yaW5nVGVzdEJhc2UoZmluYWwgU3RyaW5nIGhvc3QsIGZpbmFsIGludCBwb3J0LCAKKworICAgIHB1YmxpYyBBTVhNb25pdG9yaW5nVGVzdEJhc2UoZmluYWwgU3RyaW5nIGhvc3QsIGZpbmFsIGludCBwb3J0LAogICAgICAgICAgICAgZmluYWwgU3RyaW5nIGFkbWluVXNlciwgZmluYWwgU3RyaW5nIGFkbWluUGFzc3dvcmQsCiAgICAgICAgICAgICBmaW5hbCBib29sZWFuIHVzZVRMUykgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgZmluYWwgQU1YQ29ubmVjdG9yIGN0ID0gCisKKyAgICAgICAgZmluYWwgQU1YQ29ubmVjdG9yIGN0ID0KICAgICAgICAgICAgIG5ldyBBTVhDb25uZWN0b3IoIGhvc3QsIHBvcnQsIGFkbWluVXNlciwgYWRtaW5QYXNzd29yZCwgdXNlVExTICk7CiAgICAgICAgIG1Eb21haW5Sb290ID0gY3QuZ2V0RG9tYWluUm9vdCgpOwotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqCiAgICAgICovCiAgICAgcHJpdmF0ZSBNb25pdG9yaW5nUm9vdCBnZXRNb25pdG9yaW5nUm9vdCgpIHsKICAgICAgICAgcmV0dXJuIG1Eb21haW5Sb290LmdldE1vbml0b3JpbmdSb290KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICoKICAgICAgKi8KICAgICBwdWJsaWMgU2VydmVyUm9vdE1vbml0b3IgZ2V0U2VydmVyUm9vdE1vbml0b3IoZmluYWwgU3RyaW5nIHNlcnZlck5hbWUpIHsKLSAgICAgICAgCi0gICAgICAgIFNlcnZlclJvb3RNb25pdG9yIHN2clJvb3QgPSAgCisKKyAgICAgICAgU2VydmVyUm9vdE1vbml0b3Igc3ZyUm9vdCA9CiAgICAgICAgICAgICAoc2VydmVyTmFtZSAhPSBudWxsIHx8ICIiLmVxdWFscyhzZXJ2ZXJOYW1lKSkKICAgICAgICAgICAgID8gKCAoU2VydmVyUm9vdE1vbml0b3IpIGdldE1vbml0b3JpbmdSb290KCkuCiAgICAgICAgICAgICAgICAgZ2V0U2VydmVyUm9vdE1vbml0b3JNYXAoKS5nZXQoc2VydmVyTmFtZSkgKQogICAgICAgICAgICAgOiAoIChTZXJ2ZXJSb290TW9uaXRvcikgZ2V0TW9uaXRvcmluZ1Jvb3QoKS4KICAgICAgICAgICAgICAgICBnZXRTZXJ2ZXJSb290TW9uaXRvck1hcCgpLmdldChTRVJWRVJfTkFNRSkgKTsKLSAgICAgICAgYXNzZXJ0KHN2clJvb3QgIT0gbnVsbCkgOiAiQ2Fubm90IGZpbmQgc2VydmVyIHdpdGggbmFtZSAiICsgCisgICAgICAgIGFzc2VydChzdnJSb290ICE9IG51bGwpIDogIkNhbm5vdCBmaW5kIHNlcnZlciB3aXRoIG5hbWUgIiArCiAgICAgICAgICAgICBzZXJ2ZXJOYW1lICsgIiEiOwogICAgICAgICByZXR1cm4gc3ZyUm9vdDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqCiAgICAgICovCiAgICAgcHVibGljIEFwcGxpY2F0aW9uTW9uaXRvciBnZXRBcHBsaWNhdGlvbk1vbml0b3IoCiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgc2VydmVyTmFtZSwgZmluYWwgU3RyaW5nIGFwcE5hbWUpIHsKLSAgICAgICAgQXBwbGljYXRpb25Nb25pdG9yIGFwcCA9ICAKKyAgICAgICAgQXBwbGljYXRpb25Nb25pdG9yIGFwcCA9CiAgICAgICAgICAgICAoYXBwTmFtZSAhPSBudWxsIHx8ICIiLmVxdWFscyhhcHBOYW1lKSkKICAgICAgICAgICAgID8gKCAoQXBwbGljYXRpb25Nb25pdG9yKSBnZXRTZXJ2ZXJSb290TW9uaXRvcihzZXJ2ZXJOYW1lKS4KICAgICAgICAgICAgICAgICBnZXRBcHBsaWNhdGlvbk1vbml0b3JNYXAoKS5nZXQoYXBwTmFtZSkgKQogICAgICAgICAgICAgOiAoIChBcHBsaWNhdGlvbk1vbml0b3IpIGdldFNlcnZlclJvb3RNb25pdG9yKHNlcnZlck5hbWUpLgogICAgICAgICAgICAgICAgIGdldEFwcGxpY2F0aW9uTW9uaXRvck1hcCgpLmdldChBUFBfTkFNRSkgKTsKLSAgICAgICAgYXNzZXJ0KGFwcCAhPSBudWxsKSA6ICJDYW5ub3QgZmluZCBhcHBsaWNhdGlvbiBtb25pdG9yIHdpdGggbmFtZSAiICsgCisgICAgICAgIGFzc2VydChhcHAgIT0gbnVsbCkgOiAiQ2Fubm90IGZpbmQgYXBwbGljYXRpb24gbW9uaXRvciB3aXRoIG5hbWUgIiArCiAgICAgICAgICAgICBhcHBOYW1lICsgIiEiOwogICAgICAgICByZXR1cm4gYXBwOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICoKICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBsaXN0U3RhdHMgKE1vbml0b3JpbmdTdGF0cyBtcykgeyAKKyAgICBwdWJsaWMgdm9pZCBsaXN0U3RhdHMgKE1vbml0b3JpbmdTdGF0cyBtcykgewogICAgICAgICBpZiAobXMgIT0gbnVsbCkgewogICAgICAgICAgICAgU3RhdHMgc3RhdHMgPSBtcy5nZXRTdGF0cygpOwogICAgICAgICAgICAgU3RhdGlzdGljW10gc3RzID0gc3RhdHMuZ2V0U3RhdGlzdGljcygpOwogICAgICAgICAgICAgcHJpbnRTdGF0cyhzdHMpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWRVJJRlkhIFN0YXRzIGZvciAiICsgbXMuZ2V0TmFtZSgpIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWRVJJRlkhIFN0YXRzIGZvciAiICsgbXMuZ2V0TmFtZSgpCiAgICAgICAgICAgICAgICAgKyAiIGRvZXNuJ3QgZXhpc3QhIik7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAKKwogICAgIC8qKgogICAgICAqCiAgICAgICovCkBAIC0xMDgsMTMgKzEwOCwxMyBAQAogICAgICAgICBpZiAoc3RhdHMgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAoIGludCBpPTA7IGkgPCBzdGF0cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgcHJpbnRTdGF0KHN0YXRzW2ldKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICoKICAgICAgKgpAQCAtMTI4LDE4ICsxMjgsMTggQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgIC0tLSBTdGF0IFsiICsgc3RhdC5nZXROYW1lKCkgKyAiXSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgICAgICB8Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAgIHwiKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICAgLS0tLSBEZXNjcmlwdGlvbjogIiAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICAgLS0tLSBEZXNjcmlwdGlvbjogIgogICAgICAgICAgICAgICAgICsgc3RhdC5nZXREZXNjcmlwdGlvbigpKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICAgLS0tLSBTdGFydCBUaW1lOiAiCiAgICAgICAgICAgICAgICAgKyBzdGF0LmdldFN0YXJ0VGltZSgpKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICAgLS0tLSBMYXN0IFNhbXBsZSBUaW1lOiAiIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgICAgICAtLS0tIExhc3QgU2FtcGxlIFRpbWU6ICIKICAgICAgICAgICAgICAgICArIHN0YXQuZ2V0TGFzdFNhbXBsZVRpbWUoKSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAgIC0tLS0gVW5pdDogIgogICAgICAgICAgICAgICAgICsgc3RhdC5nZXRVbml0KCkpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbiIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICoKICAgICAgKi8KQEAgLTE0OSw3ICsxNDksNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBcmdzWyIgKyBpICsgIl06ICIgKyBhcmdzW2ldKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9jb25maWcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2NvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGNiNGUzMDQuLjUzYjA2ZWUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2NvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2NvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNCw3ICsxNCw3IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogIwogCi0gCisKIAogc3JjLmRpcj0uCiBtYmVhbmFwaS5qYXI9JHtwdWJsaXNoLmhvbWV9L2FkbWluLWNvcmUvbWJlYW5hcGkvbGliL21iZWFuYXBpLmphcgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvY29uZmlnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2NvbmZpZy9idWlsZC54bWwKaW5kZXggYmYwNGU4My4uODQ5NmUzNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvY29uZmlnL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9jb25maWcvYnVpbGQueG1sCkBAIC0zMiw5ICszMiw5IEBACiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtqbXhyaS5qYXJ9Ii8+CiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHttYmVhbmFwaS5qYXJ9Ii8+CiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHttYmVhbmFwaS1pbXBsLmphcn0iLz4KLQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7am14cmVtb3RlLmphcn0iLz4KLQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7Y29tbW9ufSIvPgotCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHttZ210YXBpLmphcn0iLz4KKyAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7am14cmVtb3RlLmphcn0iLz4KKyAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7Y29tbW9ufSIvPgorICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHttZ210YXBpLmphcn0iLz4KICAgICA8L3BhdGg+CiAKICAgICA8cGF0aCBpZD0icnVuLmNsYXNzcGF0aCI+CkBAIC00NCwxNCArNDQsMTQgQEAKICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHttYmVhbmFwaS1pbXBsLmphcn0iLz4KICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtqbXhyZW1vdGUuamFyfSIvPgogICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke21nbXRhcGkuamFyfSIvPgotICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2NvbW1vbn0iLz4gICAgICAgCisgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7Y29tbW9ufSIvPgogICAgIDwvcGF0aD4KIAogICAgIDx0YXJnZXQgbmFtZT0iaW5pdCIgZGVzY3JpcHRpb249Ik1CZWFuYXBpIFRlc3RzIGluaXRpYWxpemF0aW9uIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0iLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iYW50IiBkaXI9IiR7dGVzdHNSb290fS8uLi9jb21tb24iIGZhaWxvbmVycm9yPSJ0cnVlIj4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9ImJ1aWxkIi8+Ci0JPC9leGVjPgorICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KIAogICAgIDwhLS0gYWxsIC0tPgpAQCAtODIsMTYyICs4MiwxNjIgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLXN0YW5kYWxvbmUtaW5zdGFuY2UtdGVzdC0xIiBkZXNjcmlwdGlvbj0icnVucyB0aGUgc3RhbmRhbG9uZSBpbnN0YW5jZSB0ZXN0IHRvIGNyZWF0ZSwgc3RhcnQsIHN0b3AgYW5kIGRlbGV0ZSBvbmUgc3RhbmRhbG9uZSBpbnN0YW5jZSI+Ci0gICAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5hZG1pbi5tYmVhbmFwaS5jb25maWcuU3RhbmRhbG9uZUluc3RhbmNlVGVzdCIgCi0JICAgIGZvcms9ImZhbHNlIj4gPCEtLSB0dXJuIGZvcmtpbmcgdG8gdHJ1ZSBpZiBzdGFydGluZyBqdm0gaW4gZGVidWcgbW9kZSBhbmQgc2VlIGNvbW1lbnRzIGJlbG93LS0+Ci0JPGNsYXNzcGF0aCByZWZpZD0icnVuLmNsYXNzcGF0aCIvPgotCTxzeXNwcm9wZXJ0eSBrZXk9IkhPU1QiIHZhbHVlPSJsb2NhbGhvc3QiLz4KLQk8c3lzcHJvcGVydHkga2V5PSJBTVhfUE9SVCIgdmFsdWU9Ijg2ODYiLz4KLQk8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9QT1JUIiB2YWx1ZT0iNDg0OSIvPgotCTxzeXNwcm9wZXJ0eSBrZXk9IkFETUlOX1VTRVIiIHZhbHVlPSJhZG1pbiIvPgotCTxzeXNwcm9wZXJ0eSBrZXk9IkFETUlOX1BBU1NXT1JEIiB2YWx1ZT0iYWRtaW5hZG1pbiIvPgotCTxzeXNwcm9wZXJ0eSBrZXk9Ik5PREVfQUdFTlQiIHZhbHVlPSJoeWFkZXMiLz4gPCEtLSBjaGFuZ2UgdGhpcyB0byB5b3VyIG5vZGUgYWdlbnQgbmFtZS0tPgotCTxzeXNwcm9wZXJ0eSBrZXk9Ik5FV19OT0RFX0FHRU5UIiB2YWx1ZT0idHJ1ZSIvPgotCTxzeXNwcm9wZXJ0eSBrZXk9Ik5VTV9JTlNUQU5DRVMiIHZhbHVlPSIxIi8+Ci0JPHN5c3Byb3BlcnR5IGtleT0iVVNFX1RMUyIgdmFsdWU9InRydWUiLz4KLQk8IS0tPHN5c3Byb3BlcnR5IGtleT0iQ09ORklHX05BTUUiIHZhbHVlPSJhX2NvbmZpZyIvPi0tPgotCTxzeXNwcm9wZXJ0eSBrZXk9IlBST1BFUlRJRVMiIHZhbHVlPSJIVFRQX0xJU1RFTkVSX1BPUlQ9JHtodHRwLWxpc3QtMX06SFRUUF9TU0xfTElTVEVORVJfUE9SVD0ke2h0dHAtbGlzdC0yfTpJSU9QX0xJU1RFTkVSX1BPUlQ9JHtvcmItbGlzdC0xfTpJSU9QX1NTTF9MSVNURU5FUl9QT1JUPSR7U1NMfTpJSU9QX1NTTF9NVVRVQUxBVVRIX1BPUlQ9JHtTU0xfTVVUVUFMQVVUSH06Sk1YX1NZU1RFTV9DT05ORUNUT1JfUE9SVD0ke0pNWF9TWVNURU1fQ09OTkVDVE9SfSIvPgotCTwhLS0gdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXMgaWYgc3RhcnRpbmcganZtIGluIGRlYnVnIG1vZGUsIAotCSAgICAgYnV0IGRvIG5vdCBjaGVjayBpbiB0byBjdnMgd2l0aCBkZWJ1ZyBlbmFibGVkLCBhbmQgZm9ya2luZyBzZXQgdG8gdHJ1ZS0tPgotCTwhLS08c3lzcHJvcGVydHkga2V5PSJqYXZhLmNvbXBpbGVyIiB2YWx1ZT0iTk9ORSIvPi0tPgotCTwhLS08anZtYXJnIHZhbHVlPSItWGRlYnVnIi8+LS0+Ci0JPCEtLTxqdm1hcmcgdmFsdWU9Ii1Ybm9hZ2VudCIvPi0tPgotCTwhLS08anZtYXJnIHZhbHVlPSItWHJ1bmpkd3A6dHJhbnNwb3J0PWR0X3NvY2tldCxzZXJ2ZXI9eSxzdXNwZW5kPXksYWRkcmVzcz0xNTAwMCIvPi0tPgorICAgICAgPGphdmEgY2xhc3NuYW1lPSJjb20uc3VuLmVudGVycHJpc2UuYWRtaW4ubWJlYW5hcGkuY29uZmlnLlN0YW5kYWxvbmVJbnN0YW5jZVRlc3QiCisgICAgICAgIGZvcms9ImZhbHNlIj4gPCEtLSB0dXJuIGZvcmtpbmcgdG8gdHJ1ZSBpZiBzdGFydGluZyBqdm0gaW4gZGVidWcgbW9kZSBhbmQgc2VlIGNvbW1lbnRzIGJlbG93LS0+CisgICAgPGNsYXNzcGF0aCByZWZpZD0icnVuLmNsYXNzcGF0aCIvPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9IkhPU1QiIHZhbHVlPSJsb2NhbGhvc3QiLz4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJBTVhfUE9SVCIgdmFsdWU9Ijg2ODYiLz4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9QT1JUIiB2YWx1ZT0iNDg0OSIvPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9IkFETUlOX1VTRVIiIHZhbHVlPSJhZG1pbiIvPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9IkFETUlOX1BBU1NXT1JEIiB2YWx1ZT0iYWRtaW5hZG1pbiIvPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9Ik5PREVfQUdFTlQiIHZhbHVlPSJoeWFkZXMiLz4gPCEtLSBjaGFuZ2UgdGhpcyB0byB5b3VyIG5vZGUgYWdlbnQgbmFtZS0tPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9Ik5FV19OT0RFX0FHRU5UIiB2YWx1ZT0idHJ1ZSIvPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9Ik5VTV9JTlNUQU5DRVMiIHZhbHVlPSIxIi8+CisgICAgPHN5c3Byb3BlcnR5IGtleT0iVVNFX1RMUyIgdmFsdWU9InRydWUiLz4KKyAgICA8IS0tPHN5c3Byb3BlcnR5IGtleT0iQ09ORklHX05BTUUiIHZhbHVlPSJhX2NvbmZpZyIvPi0tPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9IlBST1BFUlRJRVMiIHZhbHVlPSJIVFRQX0xJU1RFTkVSX1BPUlQ9JHtodHRwLWxpc3QtMX06SFRUUF9TU0xfTElTVEVORVJfUE9SVD0ke2h0dHAtbGlzdC0yfTpJSU9QX0xJU1RFTkVSX1BPUlQ9JHtvcmItbGlzdC0xfTpJSU9QX1NTTF9MSVNURU5FUl9QT1JUPSR7U1NMfTpJSU9QX1NTTF9NVVRVQUxBVVRIX1BPUlQ9JHtTU0xfTVVUVUFMQVVUSH06Sk1YX1NZU1RFTV9DT05ORUNUT1JfUE9SVD0ke0pNWF9TWVNURU1fQ09OTkVDVE9SfSIvPgorICAgIDwhLS0gdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXMgaWYgc3RhcnRpbmcganZtIGluIGRlYnVnIG1vZGUsCisgICAgICAgICBidXQgZG8gbm90IGNoZWNrIGluIHRvIGN2cyB3aXRoIGRlYnVnIGVuYWJsZWQsIGFuZCBmb3JraW5nIHNldCB0byB0cnVlLS0+CisgICAgPCEtLTxzeXNwcm9wZXJ0eSBrZXk9ImphdmEuY29tcGlsZXIiIHZhbHVlPSJOT05FIi8+LS0+CisgICAgPCEtLTxqdm1hcmcgdmFsdWU9Ii1YZGVidWciLz4tLT4KKyAgICA8IS0tPGp2bWFyZyB2YWx1ZT0iLVhub2FnZW50Ii8+LS0+CisgICAgPCEtLTxqdm1hcmcgdmFsdWU9Ii1YcnVuamR3cDp0cmFuc3BvcnQ9ZHRfc29ja2V0LHNlcnZlcj15LHN1c3BlbmQ9eSxhZGRyZXNzPTE1MDAwIi8+LS0+CiAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1zdGFuZGFsb25lLWluc3RhbmNlLXRlc3QtMiIgZGVzY3JpcHRpb249InJ1bnMgdGhlIHN0YW5kYWxvbmUgaW5zdGFuY2UgdGVzdCB0byBjcmVhdGUsIHN0YXJ0LCBzdG9wIGFuZCBkZWxldGUgZm91ciBzdGFuZGFsb25lIGluc3RhbmNlcyI+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5hZG1pbi5tYmVhbmFwaS5jb25maWcuU3RhbmRhbG9uZUluc3RhbmNlVGVzdCIKLQkgICAgZmFpbG9uZXJyb3I9InRydWUiCi0JICAgIGZvcms9ImZhbHNlIj4gPCEtLSB0dXJuIGZvcmtpbmcgdG8gdHJ1ZSBpZiBzdGFydGluZyBqdm0gaW4gZGVidWcgbW9kZSBhbmQgc2VlIGNvbW1lbnRzIGJlbG93LS0+CQotCTxjbGFzc3BhdGggcmVmaWQ9InJ1bi5jbGFzc3BhdGgiLz4KLQk8c3lzcHJvcGVydHkga2V5PSJIT1NUIiB2YWx1ZT0ibG9jYWxob3N0Ii8+Ci0JPHN5c3Byb3BlcnR5IGtleT0iQU1YX1BPUlQiIHZhbHVlPSI4Njg2Ii8+Ci0JPHN5c3Byb3BlcnR5IGtleT0iQURNSU5fUE9SVCIgdmFsdWU9IjQ4NDkiLz4KLQk8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9VU0VSIiB2YWx1ZT0iYWRtaW4iLz4KLQk8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9QQVNTV09SRCIgdmFsdWU9ImFkbWluYWRtaW4iLz4KLQk8c3lzcHJvcGVydHkga2V5PSJOT0RFX0FHRU5UIiB2YWx1ZT0iaHlhZGVzIi8+IDwhLS0gY2hhbmdlIHRoaXMgdG8geW91ciBub2RlIGFnZW50IG5hbWUtLT4KLQk8c3lzcHJvcGVydHkga2V5PSJORVdfTk9ERV9BR0VOVCIgdmFsdWU9InRydWUiLz4KLQk8c3lzcHJvcGVydHkga2V5PSJOVU1fSU5TVEFOQ0VTIiB2YWx1ZT0iNCIvPgotCTxzeXNwcm9wZXJ0eSBrZXk9IlVTRV9UTFMiIHZhbHVlPSJ0cnVlIi8+Ci0JPHN5c3Byb3BlcnR5IGtleT0iUFJPUEVSVElFUyIgdmFsdWU9IkhUVFBfTElTVEVORVJfUE9SVD0ke2h0dHAtbGlzdC0xfTpIVFRQX1NTTF9MSVNURU5FUl9QT1JUPSR7aHR0cC1saXN0LTJ9OklJT1BfTElTVEVORVJfUE9SVD0ke29yYi1saXN0LTF9OklJT1BfU1NMX0xJU1RFTkVSX1BPUlQ9JHtTU0x9OklJT1BfU1NMX01VVFVBTEFVVEhfUE9SVD0ke1NTTF9NVVRVQUxBVVRIfTpKTVhfU1lTVEVNX0NPTk5FQ1RPUl9QT1JUPSR7Sk1YX1NZU1RFTV9DT05ORUNUT1J9Ii8+Ci0JPCEtLSB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lcyBpZiBzdGFydGluZyBqdm0gaW4gZGVidWcgbW9kZSwKLQkgICAgIGJ1dCBkbyBub3QgY2hlY2sgaW4gdG8gY3ZzIHdpdGggZGVidWcgZW5hYmxlZCwgYW5kIGZvcmtpbmcgc2V0IHRvIHRydWUtLT4KLQk8IS0tPHN5c3Byb3BlcnR5IGtleT0iamF2YS5jb21waWxlciIgdmFsdWU9Ik5PTkUiLz4tLT4KLQk8IS0tPGp2bWFyZyB2YWx1ZT0iLVhkZWJ1ZyIvPi0tPgotCTwhLS08anZtYXJnIHZhbHVlPSItWG5vYWdlbnQiLz4tLT4KLQk8IS0tPGp2bWFyZyB2YWx1ZT0iLVhydW5qZHdwOnRyYW5zcG9ydD1kdF9zb2NrZXQsc2VydmVyPXksc3VzcGVuZD15LGFkZHJlc3M9MTUwMDAiLz4tLT4KKyAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCisgICAgICAgIGZvcms9ImZhbHNlIj4gPCEtLSB0dXJuIGZvcmtpbmcgdG8gdHJ1ZSBpZiBzdGFydGluZyBqdm0gaW4gZGVidWcgbW9kZSBhbmQgc2VlIGNvbW1lbnRzIGJlbG93LS0+CisgICAgPGNsYXNzcGF0aCByZWZpZD0icnVuLmNsYXNzcGF0aCIvPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9IkhPU1QiIHZhbHVlPSJsb2NhbGhvc3QiLz4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJBTVhfUE9SVCIgdmFsdWU9Ijg2ODYiLz4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9QT1JUIiB2YWx1ZT0iNDg0OSIvPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9IkFETUlOX1VTRVIiIHZhbHVlPSJhZG1pbiIvPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9IkFETUlOX1BBU1NXT1JEIiB2YWx1ZT0iYWRtaW5hZG1pbiIvPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9Ik5PREVfQUdFTlQiIHZhbHVlPSJoeWFkZXMiLz4gPCEtLSBjaGFuZ2UgdGhpcyB0byB5b3VyIG5vZGUgYWdlbnQgbmFtZS0tPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9Ik5FV19OT0RFX0FHRU5UIiB2YWx1ZT0idHJ1ZSIvPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9Ik5VTV9JTlNUQU5DRVMiIHZhbHVlPSI0Ii8+CisgICAgPHN5c3Byb3BlcnR5IGtleT0iVVNFX1RMUyIgdmFsdWU9InRydWUiLz4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJQUk9QRVJUSUVTIiB2YWx1ZT0iSFRUUF9MSVNURU5FUl9QT1JUPSR7aHR0cC1saXN0LTF9OkhUVFBfU1NMX0xJU1RFTkVSX1BPUlQ9JHtodHRwLWxpc3QtMn06SUlPUF9MSVNURU5FUl9QT1JUPSR7b3JiLWxpc3QtMX06SUlPUF9TU0xfTElTVEVORVJfUE9SVD0ke1NTTH06SUlPUF9TU0xfTVVUVUFMQVVUSF9QT1JUPSR7U1NMX01VVFVBTEFVVEh9OkpNWF9TWVNURU1fQ09OTkVDVE9SX1BPUlQ9JHtKTVhfU1lTVEVNX0NPTk5FQ1RPUn0iLz4KKyAgICA8IS0tIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVzIGlmIHN0YXJ0aW5nIGp2bSBpbiBkZWJ1ZyBtb2RlLAorICAgICAgICAgYnV0IGRvIG5vdCBjaGVjayBpbiB0byBjdnMgd2l0aCBkZWJ1ZyBlbmFibGVkLCBhbmQgZm9ya2luZyBzZXQgdG8gdHJ1ZS0tPgorICAgIDwhLS08c3lzcHJvcGVydHkga2V5PSJqYXZhLmNvbXBpbGVyIiB2YWx1ZT0iTk9ORSIvPi0tPgorICAgIDwhLS08anZtYXJnIHZhbHVlPSItWGRlYnVnIi8+LS0+CisgICAgPCEtLTxqdm1hcmcgdmFsdWU9Ii1Ybm9hZ2VudCIvPi0tPgorICAgIDwhLS08anZtYXJnIHZhbHVlPSItWHJ1bmpkd3A6dHJhbnNwb3J0PWR0X3NvY2tldCxzZXJ2ZXI9eSxzdXNwZW5kPXksYWRkcmVzcz0xNTAwMCIvPi0tPgogICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0icnVuLWNvbmZpZy10ZXN0cyIgZGVzY3JpcHRpb249InJ1bnMgcmVzb3VyY2VzLHBvb2xzLGh0dHAtc2VydmljZSBjb25maWcgZWxlbWVudHMgdGVzdHMgdG8gY3JlYXRlLCBkZWxldGUsIGxpc3Qgb3BlcmF0aW9ucyI+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5hZG1pbi5tYmVhbmFwaS5jb25maWcuQU1YQ29uZmlnVmVyaWZpZXIiCi0JICAgIGZhaWxvbmVycm9yPSJ0cnVlIgotCSAgICBmb3JrPSJmYWxzZSI+IDwhLS0gdHVybiBmb3JraW5nIHRvIHRydWUgaWYgc3RhcnRpbmcganZtIGluIGRlYnVnIG1vZGUtLT4JCi0JPGNsYXNzcGF0aCByZWZpZD0icnVuLmNsYXNzcGF0aCIvPgotCTxzeXNwcm9wZXJ0eSBrZXk9IkhPU1QiIHZhbHVlPSJsb2NhbGhvc3QiLz4KLQk8c3lzcHJvcGVydHkga2V5PSJBTVhfUE9SVCIgdmFsdWU9Ijg2ODYiLz4KLQk8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9QT1JUIiB2YWx1ZT0iNDg0OSIvPgotCTxzeXNwcm9wZXJ0eSBrZXk9IkFETUlOX1VTRVIiIHZhbHVlPSJhZG1pbiIvPgotCTxzeXNwcm9wZXJ0eSBrZXk9IkFETUlOX1BBU1NXT1JEIiB2YWx1ZT0iYWRtaW5hZG1pbiIvPgotCTxzeXNwcm9wZXJ0eSBrZXk9Ik5PREVfQUdFTlQiIHZhbHVlPSJoeWFkZXMiLz4gPCEtLSBjaGFuZ2UgdGhpcyB0byB5b3VyIG5vZGUgYWdlbnQgbmFtZS0tPgotCTxzeXNwcm9wZXJ0eSBrZXk9Ik5FV19OT0RFX0FHRU5UIiB2YWx1ZT0idHJ1ZSIvPgotCTxzeXNwcm9wZXJ0eSBrZXk9Ik5VTV9JTlNUQU5DRVMiIHZhbHVlPSI0Ii8+Ci0JPHN5c3Byb3BlcnR5IGtleT0iVVNFX1RMUyIgdmFsdWU9InRydWUiLz4KLQk8IS0tIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVzIGlmIHN0YXJ0aW5nIGp2bSBpbiBkZWJ1ZyBtb2RlLAotCSAgICAgYnV0IGRvIG5vdCBjaGVjayBpbiB0byBjdnMgd2l0aCBkZWJ1ZyBlbmFibGVkLCBhbmQgZm9ya2luZyBzZXQgdG8gdHJ1ZS0tPgotCTwhLS08c3lzcHJvcGVydHkga2V5PSJqYXZhLmNvbXBpbGVyIiB2YWx1ZT0iTk9ORSIvPi0tPgotCTwhLS08anZtYXJnIHZhbHVlPSItWGRlYnVnIi8+LS0+Ci0JPCEtLTxqdm1hcmcgdmFsdWU9Ii1Ybm9hZ2VudCIvPi0tPgotCTwhLS08anZtYXJnIHZhbHVlPSItWHJ1bmpkd3A6dHJhbnNwb3J0PWR0X3NvY2tldCxzZXJ2ZXI9eSxzdXNwZW5kPXksYWRkcmVzcz0xNTAwMCIvPi0tPgorICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKKyAgICAgICAgZm9yaz0iZmFsc2UiPiA8IS0tIHR1cm4gZm9ya2luZyB0byB0cnVlIGlmIHN0YXJ0aW5nIGp2bSBpbiBkZWJ1ZyBtb2RlLS0+CisgICAgPGNsYXNzcGF0aCByZWZpZD0icnVuLmNsYXNzcGF0aCIvPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9IkhPU1QiIHZhbHVlPSJsb2NhbGhvc3QiLz4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJBTVhfUE9SVCIgdmFsdWU9Ijg2ODYiLz4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9QT1JUIiB2YWx1ZT0iNDg0OSIvPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9IkFETUlOX1VTRVIiIHZhbHVlPSJhZG1pbiIvPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9IkFETUlOX1BBU1NXT1JEIiB2YWx1ZT0iYWRtaW5hZG1pbiIvPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9Ik5PREVfQUdFTlQiIHZhbHVlPSJoeWFkZXMiLz4gPCEtLSBjaGFuZ2UgdGhpcyB0byB5b3VyIG5vZGUgYWdlbnQgbmFtZS0tPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9Ik5FV19OT0RFX0FHRU5UIiB2YWx1ZT0idHJ1ZSIvPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9Ik5VTV9JTlNUQU5DRVMiIHZhbHVlPSI0Ii8+CisgICAgPHN5c3Byb3BlcnR5IGtleT0iVVNFX1RMUyIgdmFsdWU9InRydWUiLz4KKyAgICA8IS0tIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVzIGlmIHN0YXJ0aW5nIGp2bSBpbiBkZWJ1ZyBtb2RlLAorICAgICAgICAgYnV0IGRvIG5vdCBjaGVjayBpbiB0byBjdnMgd2l0aCBkZWJ1ZyBlbmFibGVkLCBhbmQgZm9ya2luZyBzZXQgdG8gdHJ1ZS0tPgorICAgIDwhLS08c3lzcHJvcGVydHkga2V5PSJqYXZhLmNvbXBpbGVyIiB2YWx1ZT0iTk9ORSIvPi0tPgorICAgIDwhLS08anZtYXJnIHZhbHVlPSItWGRlYnVnIi8+LS0+CisgICAgPCEtLTxqdm1hcmcgdmFsdWU9Ii1Ybm9hZ2VudCIvPi0tPgorICAgIDwhLS08anZtYXJnIHZhbHVlPSItWHJ1bmpkd3A6dHJhbnNwb3J0PWR0X3NvY2tldCxzZXJ2ZXI9eSxzdXNwZW5kPXksYWRkcmVzcz0xNTAwMCIvPi0tPgogICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4tY2x1c3Rlci1saWZlY3ljbGUtdGVzdC0xIiBkZXNjcmlwdGlvbj0iY3JlYXRlcyAxIGNsdXN0ZXIgd2l0aCAyIGluc3RhbmNlcywgc3RhcnRzIGFuZCBzdG9wcyBjbHVzdGVyLCB0aGVuIHN0YXJ0cyBhbmQgc3RvcHMgZWFjaCBvZiB0aGUgaW5zdGFuY2VzIGluIHRoZSBjbHVzdGVyLCB0aGVuIGRlbGV0ZXMgaW5zdGFuY2VzIGFuZCBjbHVzdGVyIj4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnN1bi5lbnRlcnByaXNlLmFkbWluLm1iZWFuYXBpLmNvbmZpZy5DbHVzdGVyTGlmZWN5Y2xlVGVzdCIKLQkgICAgZmFpbG9uZXJyb3I9InRydWUiCi0JICAgIGZvcms9ImZhbHNlIj4gPCEtLSB0dXJuIGZvcmtpbmcgdG8gdHJ1ZSBpZiBzdGFydGluZyBqdm0gaW4gZGVidWcgbW9kZSBhbmQgc2VlIGNvbW1lbnRzIGJlbG93LS0+Ci0JPGNsYXNzcGF0aCByZWZpZD0icnVuLmNsYXNzcGF0aCIvPgotCTxzeXNwcm9wZXJ0eSBrZXk9IkhPU1QiIHZhbHVlPSJsb2NhbGhvc3QiLz4KLQk8c3lzcHJvcGVydHkga2V5PSJBTVhfUE9SVCIgdmFsdWU9Ijg2ODYiLz4KLQk8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9QT1JUIiB2YWx1ZT0iNDg0OSIvPgotCTxzeXNwcm9wZXJ0eSBrZXk9IkFETUlOX1VTRVIiIHZhbHVlPSJhZG1pbiIvPgotCTxzeXNwcm9wZXJ0eSBrZXk9IkFETUlOX1BBU1NXT1JEIiB2YWx1ZT0iYWRtaW5hZG1pbiIvPgotCTxzeXNwcm9wZXJ0eSBrZXk9Ik5PREVfQUdFTlQiIHZhbHVlPSJoeWFkZXMiLz4gPCEtLSBjaGFuZ2UgdGhpcyB0byB5b3VyIG5vZGUgYWdlbnQgbmFtZS0tPgotCTxzeXNwcm9wZXJ0eSBrZXk9Ik5FV19OT0RFX0FHRU5UIiB2YWx1ZT0idHJ1ZSIvPgotCTxzeXNwcm9wZXJ0eSBrZXk9Ik5VTV9JTlNUQU5DRVMiIHZhbHVlPSIyIi8+Ci0JPHN5c3Byb3BlcnR5IGtleT0iTlVNX0NMVVNURVJTIiB2YWx1ZT0iMSIvPgotCTxzeXNwcm9wZXJ0eSBrZXk9IlVTRV9UTFMiIHZhbHVlPSJ0cnVlIi8+Ci0JPHN5c3Byb3BlcnR5IGtleT0iUFJPUEVSVElFUyIgdmFsdWU9IkhUVFBfTElTVEVORVJfUE9SVD0ke2h0dHAtbGlzdC0xfTpIVFRQX1NTTF9MSVNURU5FUl9QT1JUPSR7aHR0cC1saXN0LTJ9OklJT1BfTElTVEVORVJfUE9SVD0ke29yYi1saXN0LTF9OklJT1BfU1NMX0xJU1RFTkVSX1BPUlQ9JHtTU0x9OklJT1BfU1NMX01VVFVBTEFVVEhfUE9SVD0ke1NTTF9NVVRVQUxBVVRIfTpKTVhfU1lTVEVNX0NPTk5FQ1RPUl9QT1JUPSR7Sk1YX1NZU1RFTV9DT05ORUNUT1J9Ii8+Ci0JPCEtLSB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lcyBpZiBzdGFydGluZyBqdm0gaW4gZGVidWcgbW9kZSwKLQkgICAgIGJ1dCBkbyBub3QgY2hlY2sgaW4gdG8gY3ZzIHdpdGggZGVidWcgZW5hYmxlZCwgYW5kIGZvcmtpbmcgc2V0IHRvIHRydWUtLT4KLQk8IS0tPHN5c3Byb3BlcnR5IGtleT0iamF2YS5jb21waWxlciIgdmFsdWU9Ik5PTkUiLz4tLT4KLQk8IS0tPGp2bWFyZyB2YWx1ZT0iLVhkZWJ1ZyIvPi0tPgotCTwhLS08anZtYXJnIHZhbHVlPSItWG5vYWdlbnQiLz4tLT4KLQk8IS0tPGp2bWFyZyB2YWx1ZT0iLVhydW5qZHdwOnRyYW5zcG9ydD1kdF9zb2NrZXQsc2VydmVyPXksc3VzcGVuZD15LGFkZHJlc3M9MTUwMDAiLz4tLT4KKyAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCisgICAgICAgIGZvcms9ImZhbHNlIj4gPCEtLSB0dXJuIGZvcmtpbmcgdG8gdHJ1ZSBpZiBzdGFydGluZyBqdm0gaW4gZGVidWcgbW9kZSBhbmQgc2VlIGNvbW1lbnRzIGJlbG93LS0+CisgICAgPGNsYXNzcGF0aCByZWZpZD0icnVuLmNsYXNzcGF0aCIvPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9IkhPU1QiIHZhbHVlPSJsb2NhbGhvc3QiLz4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJBTVhfUE9SVCIgdmFsdWU9Ijg2ODYiLz4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9QT1JUIiB2YWx1ZT0iNDg0OSIvPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9IkFETUlOX1VTRVIiIHZhbHVlPSJhZG1pbiIvPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9IkFETUlOX1BBU1NXT1JEIiB2YWx1ZT0iYWRtaW5hZG1pbiIvPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9Ik5PREVfQUdFTlQiIHZhbHVlPSJoeWFkZXMiLz4gPCEtLSBjaGFuZ2UgdGhpcyB0byB5b3VyIG5vZGUgYWdlbnQgbmFtZS0tPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9Ik5FV19OT0RFX0FHRU5UIiB2YWx1ZT0idHJ1ZSIvPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9Ik5VTV9JTlNUQU5DRVMiIHZhbHVlPSIyIi8+CisgICAgPHN5c3Byb3BlcnR5IGtleT0iTlVNX0NMVVNURVJTIiB2YWx1ZT0iMSIvPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9IlVTRV9UTFMiIHZhbHVlPSJ0cnVlIi8+CisgICAgPHN5c3Byb3BlcnR5IGtleT0iUFJPUEVSVElFUyIgdmFsdWU9IkhUVFBfTElTVEVORVJfUE9SVD0ke2h0dHAtbGlzdC0xfTpIVFRQX1NTTF9MSVNURU5FUl9QT1JUPSR7aHR0cC1saXN0LTJ9OklJT1BfTElTVEVORVJfUE9SVD0ke29yYi1saXN0LTF9OklJT1BfU1NMX0xJU1RFTkVSX1BPUlQ9JHtTU0x9OklJT1BfU1NMX01VVFVBTEFVVEhfUE9SVD0ke1NTTF9NVVRVQUxBVVRIfTpKTVhfU1lTVEVNX0NPTk5FQ1RPUl9QT1JUPSR7Sk1YX1NZU1RFTV9DT05ORUNUT1J9Ii8+CisgICAgPCEtLSB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lcyBpZiBzdGFydGluZyBqdm0gaW4gZGVidWcgbW9kZSwKKyAgICAgICAgIGJ1dCBkbyBub3QgY2hlY2sgaW4gdG8gY3ZzIHdpdGggZGVidWcgZW5hYmxlZCwgYW5kIGZvcmtpbmcgc2V0IHRvIHRydWUtLT4KKyAgICA8IS0tPHN5c3Byb3BlcnR5IGtleT0iamF2YS5jb21waWxlciIgdmFsdWU9Ik5PTkUiLz4tLT4KKyAgICA8IS0tPGp2bWFyZyB2YWx1ZT0iLVhkZWJ1ZyIvPi0tPgorICAgIDwhLS08anZtYXJnIHZhbHVlPSItWG5vYWdlbnQiLz4tLT4KKyAgICA8IS0tPGp2bWFyZyB2YWx1ZT0iLVhydW5qZHdwOnRyYW5zcG9ydD1kdF9zb2NrZXQsc2VydmVyPXksc3VzcGVuZD15LGFkZHJlc3M9MTUwMDAiLz4tLT4KICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLWh0dHAtbGlzdGVuZXItdGVzdCIgZGVzY3JpcHRpb249ImNyZWF0ZXMgYW4gaHR0cC1saXN0ZW5lciwgYSB2aXJ0dWFsIHNlcnZlciBhbmQgYW4gc3NsIGVsZW1lbnQgdW5kZXIgdGhpcyBsaXN0ZW5lciBhbmQgdmVyaWZpZWQgY3JlYXRpb24uIj4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnN1bi5lbnRlcnByaXNlLmFkbWluLm1iZWFuYXBpLmNvbmZpZy5IVFRQTGlzdGVuZXJUZXN0cyIKLQkgICAgZmFpbG9uZXJyb3I9InRydWUiCi0JICAgIGZvcms9ImZhbHNlIj4gPCEtLSB0dXJuIGZvcmtpbmcgdG8gdHJ1ZSBpZiBzdGFydGluZyBqdm0gaW4gZGVidWcgbW9kZSBhbmQgc2VlIGNvbW1lbnRzIGJlbG93LS0+Ci0JICAgIDxjbGFzc3BhdGggcmVmaWQ9InJ1bi5jbGFzc3BhdGgiLz4KLQkgICAgPHN5c3Byb3BlcnR5IGtleT0iSE9TVCIgdmFsdWU9ImxvY2FsaG9zdCIvPgotCSAgICA8c3lzcHJvcGVydHkga2V5PSJBTVhfUE9SVCIgdmFsdWU9Ijg2ODYiLz4KLQkgICAgPHN5c3Byb3BlcnR5IGtleT0iQURNSU5fUE9SVCIgdmFsdWU9IjQ4NDkiLz4KLQkgICAgPHN5c3Byb3BlcnR5IGtleT0iQURNSU5fVVNFUiIgdmFsdWU9ImFkbWluIi8+Ci0JICAgIDxzeXNwcm9wZXJ0eSBrZXk9IkFETUlOX1BBU1NXT1JEIiB2YWx1ZT0iYWRtaW5hZG1pbiIvPgotCSAgICA8c3lzcHJvcGVydHkga2V5PSJVU0VfVExTIiB2YWx1ZT0idHJ1ZSIvPgorICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKKyAgICAgICAgZm9yaz0iZmFsc2UiPiA8IS0tIHR1cm4gZm9ya2luZyB0byB0cnVlIGlmIHN0YXJ0aW5nIGp2bSBpbiBkZWJ1ZyBtb2RlIGFuZCBzZWUgY29tbWVudHMgYmVsb3ctLT4KKyAgICAgICAgPGNsYXNzcGF0aCByZWZpZD0icnVuLmNsYXNzcGF0aCIvPgorICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJIT1NUIiB2YWx1ZT0ibG9jYWxob3N0Ii8+CisgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9IkFNWF9QT1JUIiB2YWx1ZT0iODY4NiIvPgorICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9QT1JUIiB2YWx1ZT0iNDg0OSIvPgorICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9VU0VSIiB2YWx1ZT0iYWRtaW4iLz4KKyAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0iQURNSU5fUEFTU1dPUkQiIHZhbHVlPSJhZG1pbmFkbWluIi8+CisgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9IlVTRV9UTFMiIHZhbHVlPSJ0cnVlIi8+CiAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9IkNPTkZJR19OQU1FIiB2YWx1ZT0ic2VydmVyLWNvbmZpZyIvPgotCTwhLS0gdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXMgaWYgc3RhcnRpbmcganZtIGluIGRlYnVnIG1vZGUsCi0JICAgICBidXQgZG8gbm90IGNoZWNrIGluIHRvIGN2cyB3aXRoIGRlYnVnIGVuYWJsZWQsIGFuZCBmb3JraW5nIHNldCB0byB0cnVlLS0+Ci0JPCEtLTxzeXNwcm9wZXJ0eSBrZXk9ImphdmEuY29tcGlsZXIiIHZhbHVlPSJOT05FIi8+LS0+Ci0JPCEtLTxqdm1hcmcgdmFsdWU9Ii1YZGVidWciLz4tLT4KLQk8IS0tPGp2bWFyZyB2YWx1ZT0iLVhub2FnZW50Ii8+LS0+Ci0JPCEtLTxqdm1hcmcgdmFsdWU9Ii1YcnVuamR3cDp0cmFuc3BvcnQ9ZHRfc29ja2V0LHNlcnZlcj15LHN1c3BlbmQ9eSxhZGRyZXNzPTE1MDAwIi8+LS0+CisgICAgPCEtLSB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lcyBpZiBzdGFydGluZyBqdm0gaW4gZGVidWcgbW9kZSwKKyAgICAgICAgIGJ1dCBkbyBub3QgY2hlY2sgaW4gdG8gY3ZzIHdpdGggZGVidWcgZW5hYmxlZCwgYW5kIGZvcmtpbmcgc2V0IHRvIHRydWUtLT4KKyAgICA8IS0tPHN5c3Byb3BlcnR5IGtleT0iamF2YS5jb21waWxlciIgdmFsdWU9Ik5PTkUiLz4tLT4KKyAgICA8IS0tPGp2bWFyZyB2YWx1ZT0iLVhkZWJ1ZyIvPi0tPgorICAgIDwhLS08anZtYXJnIHZhbHVlPSItWG5vYWdlbnQiLz4tLT4KKyAgICA8IS0tPGp2bWFyZyB2YWx1ZT0iLVhydW5qZHdwOnRyYW5zcG9ydD1kdF9zb2NrZXQsc2VydmVyPXksc3VzcGVuZD15LGFkZHJlc3M9MTUwMDAiLz4tLT4KICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1paW9wLWxpc3RlbmVyLXRlc3QiIGRlc2NyaXB0aW9uPSJjcmVhdGVzIGFuIGlpb3AtbGlzdGVuZXIsIGEgdmlydHVhbCBzZXJ2ZXIgYW5kIGFuIHNzbCBlbGVtZW50IHVuZGVyIHRoaXMgbGlzdGVuZXIgYW5kIHZlcmlmaWVkIGNyZWF0aW9uLiI+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5hZG1pbi5tYmVhbmFwaS5jb25maWcuSUlPUExpc3RlbmVyVGVzdHMiCi0JICAgIGZhaWxvbmVycm9yPSJ0cnVlIgotCSAgICBmb3JrPSJmYWxzZSI+IDwhLS0gdHVybiBmb3JraW5nIHRvIHRydWUgaWYgc3RhcnRpbmcganZtIGluIGRlYnVnIG1vZGUgYW5kIHNlZSBjb21tZW50cyBiZWxvdy0tPgotCSAgICA8Y2xhc3NwYXRoIHJlZmlkPSJydW4uY2xhc3NwYXRoIi8+Ci0JICAgIDxzeXNwcm9wZXJ0eSBrZXk9IkhPU1QiIHZhbHVlPSJsb2NhbGhvc3QiLz4KLQkgICAgPHN5c3Byb3BlcnR5IGtleT0iQU1YX1BPUlQiIHZhbHVlPSI4Njg2Ii8+Ci0JICAgIDxzeXNwcm9wZXJ0eSBrZXk9IkFETUlOX1BPUlQiIHZhbHVlPSI0ODQ5Ii8+Ci0JICAgIDxzeXNwcm9wZXJ0eSBrZXk9IkFETUlOX1VTRVIiIHZhbHVlPSJhZG1pbiIvPgotCSAgICA8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9QQVNTV09SRCIgdmFsdWU9ImFkbWluYWRtaW4iLz4KLQkgICAgPHN5c3Byb3BlcnR5IGtleT0iVVNFX1RMUyIgdmFsdWU9InRydWUiLz4KLQkgICAgPHN5c3Byb3BlcnR5IGtleT0iQ09ORklHX05BTUUiIHZhbHVlPSJzZXJ2ZXItY29uZmlnIi8+Ci0JPCEtLSB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lcyBpZiBzdGFydGluZyBqdm0gaW4gZGVidWcgbW9kZSwKLQkgICAgIGJ1dCBkbyBub3QgY2hlY2sgaW4gdG8gY3ZzIHdpdGggZGVidWcgZW5hYmxlZCwgYW5kIGZvcmtpbmcgc2V0IHRvIHRydWUtLT4KLQk8IS0tPHN5c3Byb3BlcnR5IGtleT0iamF2YS5jb21waWxlciIgdmFsdWU9Ik5PTkUiLz4tLT4KLQk8IS0tPGp2bWFyZyB2YWx1ZT0iLVhkZWJ1ZyIvPi0tPgotCTwhLS08anZtYXJnIHZhbHVlPSItWG5vYWdlbnQiLz4tLT4KLQk8IS0tPGp2bWFyZyB2YWx1ZT0iLVhydW5qZHdwOnRyYW5zcG9ydD1kdF9zb2NrZXQsc2VydmVyPXksc3VzcGVuZD15LGFkZHJlc3M9MTUwMDAiLz4tLT4KKyAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCisgICAgICAgIGZvcms9ImZhbHNlIj4gPCEtLSB0dXJuIGZvcmtpbmcgdG8gdHJ1ZSBpZiBzdGFydGluZyBqdm0gaW4gZGVidWcgbW9kZSBhbmQgc2VlIGNvbW1lbnRzIGJlbG93LS0+CisgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9InJ1bi5jbGFzc3BhdGgiLz4KKyAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0iSE9TVCIgdmFsdWU9ImxvY2FsaG9zdCIvPgorICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJBTVhfUE9SVCIgdmFsdWU9Ijg2ODYiLz4KKyAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0iQURNSU5fUE9SVCIgdmFsdWU9IjQ4NDkiLz4KKyAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0iQURNSU5fVVNFUiIgdmFsdWU9ImFkbWluIi8+CisgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9IkFETUlOX1BBU1NXT1JEIiB2YWx1ZT0iYWRtaW5hZG1pbiIvPgorICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJVU0VfVExTIiB2YWx1ZT0idHJ1ZSIvPgorICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJDT05GSUdfTkFNRSIgdmFsdWU9InNlcnZlci1jb25maWciLz4KKyAgICA8IS0tIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVzIGlmIHN0YXJ0aW5nIGp2bSBpbiBkZWJ1ZyBtb2RlLAorICAgICAgICAgYnV0IGRvIG5vdCBjaGVjayBpbiB0byBjdnMgd2l0aCBkZWJ1ZyBlbmFibGVkLCBhbmQgZm9ya2luZyBzZXQgdG8gdHJ1ZS0tPgorICAgIDwhLS08c3lzcHJvcGVydHkga2V5PSJqYXZhLmNvbXBpbGVyIiB2YWx1ZT0iTk9ORSIvPi0tPgorICAgIDwhLS08anZtYXJnIHZhbHVlPSItWGRlYnVnIi8+LS0+CisgICAgPCEtLTxqdm1hcmcgdmFsdWU9Ii1Ybm9hZ2VudCIvPi0tPgorICAgIDwhLS08anZtYXJnIHZhbHVlPSItWHJ1bmpkd3A6dHJhbnNwb3J0PWR0X3NvY2tldCxzZXJ2ZXI9eSxzdXNwZW5kPXksYWRkcmVzcz0xNTAwMCIvPi0tPgogICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4tcmVtb3RlLWluc3RhbmNlLXRlc3QtMSIgZGVzY3JpcHRpb249InJ1bnMgdGhlIHJlbW90ZSBzdGFuZGFsb25lIGluc3RhbmNlIHRlc3QgdG8gY3JlYXRlLCBzdGFydCwgc3RvcCBhbmQgZGVsZXRlIG9uZSByZW1vdGUgc3RhbmRhbG9uZSBpbnN0YW5jZSI+Ci0gICAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5hZG1pbi5tYmVhbmFwaS5jb25maWcuUmVtb3RlSW5zdGFuY2VUZXN0IiAKLQkgICAgZm9yaz0iZmFsc2UiPiA8IS0tIHR1cm4gZm9ya2luZyB0byB0cnVlIGlmIHN0YXJ0aW5nIGp2bSBpbiBkZWJ1ZyBtb2RlIGFuZCBzZWUgY29tbWVudHMgYmVsb3ctLT4KLQk8Y2xhc3NwYXRoIHJlZmlkPSJydW4uY2xhc3NwYXRoIi8+Ci0JPHN5c3Byb3BlcnR5IGtleT0iSE9TVCIgdmFsdWU9ImxvY2FsaG9zdCIvPgotCTxzeXNwcm9wZXJ0eSBrZXk9IkFNWF9QT1JUIiB2YWx1ZT0iODY4NiIvPgotCTxzeXNwcm9wZXJ0eSBrZXk9IkFETUlOX1BPUlQiIHZhbHVlPSI0ODQ5Ii8+Ci0JPHN5c3Byb3BlcnR5IGtleT0iQURNSU5fVVNFUiIgdmFsdWU9ImFkbWluIi8+Ci0JPHN5c3Byb3BlcnR5IGtleT0iQURNSU5fUEFTU1dPUkQiIHZhbHVlPSJhZG1pbmFkbWluIi8+Ci0JPHN5c3Byb3BlcnR5IGtleT0iTk9ERV9BR0VOVCIgdmFsdWU9ImVhc3FlbHgxNCIvPiA8IS0tIGNoYW5nZSB0aGlzIHRvIHlvdXIgbm9kZSBhZ2VudCBuYW1lLS0+Ci0JPHN5c3Byb3BlcnR5IGtleT0iTkVXX05PREVfQUdFTlQiIHZhbHVlPSJ0cnVlIi8+Ci0JPHN5c3Byb3BlcnR5IGtleT0iTlVNX0lOU1RBTkNFUyIgdmFsdWU9IjEiLz4KLQk8c3lzcHJvcGVydHkga2V5PSJVU0VfVExTIiB2YWx1ZT0idHJ1ZSIvPgotCTwhLS08c3lzcHJvcGVydHkga2V5PSJDT05GSUdfTkFNRSIgdmFsdWU9ImFfY29uZmlnIi8+LS0+Ci0JPHN5c3Byb3BlcnR5IGtleT0iUFJPUEVSVElFUyIgdmFsdWU9IkhUVFBfTElTVEVORVJfUE9SVD0ke2h0dHAtbGlzdC0xfTpIVFRQX1NTTF9MSVNURU5FUl9QT1JUPSR7aHR0cC1saXN0LTJ9OklJT1BfTElTVEVORVJfUE9SVD0ke29yYi1saXN0LTF9OklJT1BfU1NMX0xJU1RFTkVSX1BPUlQ9JHtTU0x9OklJT1BfU1NMX01VVFVBTEFVVEhfUE9SVD0ke1NTTF9NVVRVQUxBVVRIfTpKTVhfU1lTVEVNX0NPTk5FQ1RPUl9QT1JUPSR7Sk1YX1NZU1RFTV9DT05ORUNUT1J9Ii8+Ci0JPCEtLSB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lcyBpZiBzdGFydGluZyBqdm0gaW4gZGVidWcgbW9kZSwgCi0JICAgICBidXQgZG8gbm90IGNoZWNrIGluIHRvIGN2cyB3aXRoIGRlYnVnIGVuYWJsZWQsIGFuZCBmb3JraW5nIHNldCB0byB0cnVlLS0+Ci0JPCEtLTxzeXNwcm9wZXJ0eSBrZXk9ImphdmEuY29tcGlsZXIiIHZhbHVlPSJOT05FIi8+LS0+Ci0JPCEtLTxqdm1hcmcgdmFsdWU9Ii1YZGVidWciLz4tLT4KLQk8IS0tPGp2bWFyZyB2YWx1ZT0iLVhub2FnZW50Ii8+LS0+Ci0JPCEtLTxqdm1hcmcgdmFsdWU9Ii1YcnVuamR3cDp0cmFuc3BvcnQ9ZHRfc29ja2V0LHNlcnZlcj15LHN1c3BlbmQ9eSxhZGRyZXNzPTE1MDAwIi8+LS0+CisgICAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5hZG1pbi5tYmVhbmFwaS5jb25maWcuUmVtb3RlSW5zdGFuY2VUZXN0IgorICAgICAgICBmb3JrPSJmYWxzZSI+IDwhLS0gdHVybiBmb3JraW5nIHRvIHRydWUgaWYgc3RhcnRpbmcganZtIGluIGRlYnVnIG1vZGUgYW5kIHNlZSBjb21tZW50cyBiZWxvdy0tPgorICAgIDxjbGFzc3BhdGggcmVmaWQ9InJ1bi5jbGFzc3BhdGgiLz4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJIT1NUIiB2YWx1ZT0ibG9jYWxob3N0Ii8+CisgICAgPHN5c3Byb3BlcnR5IGtleT0iQU1YX1BPUlQiIHZhbHVlPSI4Njg2Ii8+CisgICAgPHN5c3Byb3BlcnR5IGtleT0iQURNSU5fUE9SVCIgdmFsdWU9IjQ4NDkiLz4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9VU0VSIiB2YWx1ZT0iYWRtaW4iLz4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9QQVNTV09SRCIgdmFsdWU9ImFkbWluYWRtaW4iLz4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJOT0RFX0FHRU5UIiB2YWx1ZT0iZWFzcWVseDE0Ii8+IDwhLS0gY2hhbmdlIHRoaXMgdG8geW91ciBub2RlIGFnZW50IG5hbWUtLT4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJORVdfTk9ERV9BR0VOVCIgdmFsdWU9InRydWUiLz4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJOVU1fSU5TVEFOQ0VTIiB2YWx1ZT0iMSIvPgorICAgIDxzeXNwcm9wZXJ0eSBrZXk9IlVTRV9UTFMiIHZhbHVlPSJ0cnVlIi8+CisgICAgPCEtLTxzeXNwcm9wZXJ0eSBrZXk9IkNPTkZJR19OQU1FIiB2YWx1ZT0iYV9jb25maWciLz4tLT4KKyAgICA8c3lzcHJvcGVydHkga2V5PSJQUk9QRVJUSUVTIiB2YWx1ZT0iSFRUUF9MSVNURU5FUl9QT1JUPSR7aHR0cC1saXN0LTF9OkhUVFBfU1NMX0xJU1RFTkVSX1BPUlQ9JHtodHRwLWxpc3QtMn06SUlPUF9MSVNURU5FUl9QT1JUPSR7b3JiLWxpc3QtMX06SUlPUF9TU0xfTElTVEVORVJfUE9SVD0ke1NTTH06SUlPUF9TU0xfTVVUVUFMQVVUSF9QT1JUPSR7U1NMX01VVFVBTEFVVEh9OkpNWF9TWVNURU1fQ09OTkVDVE9SX1BPUlQ9JHtKTVhfU1lTVEVNX0NPTk5FQ1RPUn0iLz4KKyAgICA8IS0tIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVzIGlmIHN0YXJ0aW5nIGp2bSBpbiBkZWJ1ZyBtb2RlLAorICAgICAgICAgYnV0IGRvIG5vdCBjaGVjayBpbiB0byBjdnMgd2l0aCBkZWJ1ZyBlbmFibGVkLCBhbmQgZm9ya2luZyBzZXQgdG8gdHJ1ZS0tPgorICAgIDwhLS08c3lzcHJvcGVydHkga2V5PSJqYXZhLmNvbXBpbGVyIiB2YWx1ZT0iTk9ORSIvPi0tPgorICAgIDwhLS08anZtYXJnIHZhbHVlPSItWGRlYnVnIi8+LS0+CisgICAgPCEtLTxqdm1hcmcgdmFsdWU9Ii1Ybm9hZ2VudCIvPi0tPgorICAgIDwhLS08anZtYXJnIHZhbHVlPSItWHJ1bmpkd3A6dHJhbnNwb3J0PWR0X3NvY2tldCxzZXJ2ZXI9eSxzdXNwZW5kPXksYWRkcmVzcz0xNTAwMCIvPi0tPgogICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9jb25maWcvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2NvbmZpZy9BTVhDb25maWdWZXJpZmllci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvY29uZmlnL2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9jb25maWcvQU1YQ29uZmlnVmVyaWZpZXIuamF2YQppbmRleCBiNWUwNzcwLi40OWNmZjNjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9jb25maWcvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2NvbmZpZy9BTVhDb25maWdWZXJpZmllci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2NvbmZpZy9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvY29uZmlnL0FNWENvbmZpZ1ZlcmlmaWVyLmphdmEKQEAgLTM5LDE5ICszOSwxOSBAQAogICogQHZlcnNpb24gJFJldmlzaW9uOiAxLjMgJAogICovCiBwdWJsaWMgY2xhc3MgQU1YQ29uZmlnVmVyaWZpZXIgewotICAgIHByaXZhdGUgZmluYWwgRG9tYWluUm9vdAltRG9tYWluUm9vdDsKLSAgICBwcml2YXRlIGZpbmFsIE1CZWFuU2VydmVyQ29ubmVjdGlvbgltTUJlYW5TZXJ2ZXJDb25uZWN0aW9uOworICAgIHByaXZhdGUgZmluYWwgRG9tYWluUm9vdCAgICBtRG9tYWluUm9vdDsKKyAgICBwcml2YXRlIGZpbmFsIE1CZWFuU2VydmVyQ29ubmVjdGlvbiAgICBtTUJlYW5TZXJ2ZXJDb25uZWN0aW9uOwogCiAgICAgcHVibGljIEFNWENvbmZpZ1ZlcmlmaWVyKGZpbmFsIFN0cmluZyBob3N0LCBmaW5hbCBpbnQgcG9ydCwgZmluYWwgU3RyaW5nIGFkbWluVXNlciwgZmluYWwgU3RyaW5nIGFkbWluUGFzc3dvcmQsIGZpbmFsIGJvb2xlYW4gdXNlVExTKSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotICAgICAgICBmaW5hbCBBTVhDb25uZWN0b3IgY3QJPSBuZXcgQU1YQ29ubmVjdG9yKCBob3N0LCBwb3J0LCBhZG1pblVzZXIsIGFkbWluUGFzc3dvcmQsIHVzZVRMUyApOwotICAgICAgICBtRG9tYWluUm9vdAk9IGN0LmdldERvbWFpblJvb3QoKTsKKyAgICAgICAgZmluYWwgQU1YQ29ubmVjdG9yIGN0ICAgID0gbmV3IEFNWENvbm5lY3RvciggaG9zdCwgcG9ydCwgYWRtaW5Vc2VyLCBhZG1pblBhc3N3b3JkLCB1c2VUTFMgKTsKKyAgICAgICAgbURvbWFpblJvb3QgICAgPSBjdC5nZXREb21haW5Sb290KCk7CiAgICAgICAgIG1NQmVhblNlcnZlckNvbm5lY3Rpb24gPSBjdC5nZXRBcHBzZXJ2ZXJDb25uZWN0aW9uU291cmNlKCkuZ2V0TUJlYW5TZXJ2ZXJDb25uZWN0aW9uKGZhbHNlKTsKIAogICAgICAgICB0ZXN0RG9tYWluRWxlbWVudHMoKTsKICAgICAgICAgdGVzdEh0dHBTZXJ2aWNlRWxlbWVudHMoKTsKICAgICB9Ci0gICAgCisKIAogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkICAgbWFpbiggZmluYWwgU3RyaW5nW10gYXJncyApCkBAIC04OSw3ICs4OSw3IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRlc3RlcjsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgcnVuR2VuZXJpY1Rlc3QoU3RyaW5nIHN0cikgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcnVuR2VuZXJpY1Rlc3QobnVsbCwgc3RyKTsKQEAgLTEzNiwxMyArMTM2LDEzIEBACiAgICAgICAgIC8vIGFkbWluLW9iamVjdC1yZXNvdXJjZSB0ZXN0CiAgICAgICAgIHJ1bkdlbmVyaWNUZXN0KCAiPGFkbWluLW9iamVjdC1yZXNvdXJjZSBqbmRpLW5hbWU9dGVzdEFkbWluT2JqZWN0TmFtZSByZXMtdHlwZT10ZXN0UmVzVHlwZSByZXMtYWRhcHRlcj10ZXN0UmVzb3VyY2VBZGFwdGVyTmFtZT4iKTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3RIdHRwU2VydmljZUVsZW1lbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgVGVzdEVsZW1SZWdpc3RyeS5pbml0UmVnaXN0cnkoInNlcnZlci1jb25maWciKTsKLSAgICAgICAgCisKICAgICAgICAgcnVuR2VuZXJpY1Rlc3QoICI8dmlydHVhbC1zZXJ2ZXIgaWQ9dGVzdFZpcnR1YWxTZXJ2ZXIgaG9zdHM9bG9jYWxob3N0PiIpOwotICAgICAgICAKKwogICAgICAgICBFbGVtVGVzdGVyIHZpcnRTZXJ2ZXIgPSBnZXRFbGVtZW50VGVzdGVyKCAiPHZpcnR1YWwtc2VydmVyIGlkPXRlc3RWaXJ0dWFsU2VydmVyMiBob3N0cz1sb2NhbGhvc3Q+Iik7CiAgICAgICAgIHZpcnRTZXJ2ZXIuY3JlYXRlRWxlbWVudCgpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9jb25maWcvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2NvbmZpZy9Db25maWdUZXN0SGVscGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9jb25maWcvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2NvbmZpZy9Db25maWdUZXN0SGVscGVyLmphdmEKaW5kZXggOTEwOWEyOS4uNTJmNzQ0OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvY29uZmlnL2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9jb25maWcvQ29uZmlnVGVzdEhlbHBlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2NvbmZpZy9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvY29uZmlnL0NvbmZpZ1Rlc3RIZWxwZXIuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogICAgIHsKICAgICAgICAgcmV0dXJuIFNtYXJ0U3RyaW5naWZpZXIudG9TdHJpbmcobyk7CiAgICAgfQotICAgIAorCiAgICAgc3RhdGljIHB1YmxpYyB2b2lkIHByaW50T2JqKFN0cmluZyB0aXRsZSwgT2JqZWN0IG8pCiAgICAgewogICAgICAgICBpZih0aXRsZT09bnVsbCkKQEAgLTQyLDI3ICs0MiwyNyBAQAogCiAgICAgc3RhdGljIHB1YmxpYyBPYmplY3QgaW52b2tlSW5NZ3IoT2JqZWN0IG1nciwgU3RyaW5nIG9wZXJhdGlvbikgIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0gICAgICAgcmV0dXJuIGludm9rZUluTWdyKG1nciwgb3BlcmF0aW9uLCBudWxsLCBudWxsKTsgICAKKyAgICAgICByZXR1cm4gaW52b2tlSW5NZ3IobWdyLCBvcGVyYXRpb24sIG51bGwsIG51bGwpOwogICAgIH0KLSAgICAKKwogICAgIHN0YXRpYyBwdWJsaWMgT2JqZWN0IGludm9rZUluTWdyKE9iamVjdCBtZ3IsIFN0cmluZyBvcGVyYXRpb24sIE9iamVjdFtdIHBhcmFtcykgIHRocm93cyBFeGNlcHRpb24KICAgICB7CiAgICAgICAgIGlmKHBhcmFtcz09bnVsbCB8fCBwYXJhbXMubGVuZ3RoPT0wKQotICAgICAgICAgICAgcmV0dXJuIGludm9rZUluTWdyKG1nciwgb3BlcmF0aW9uLCBudWxsLCBudWxsKTsgICAKKyAgICAgICAgICAgIHJldHVybiBpbnZva2VJbk1ncihtZ3IsIG9wZXJhdGlvbiwgbnVsbCwgbnVsbCk7CiAgICAgICAgIENsYXNzW10gY2xhc3NlcyA9IG5ldyBDbGFzc1twYXJhbXMubGVuZ3RoXTsKICAgICAgICAgZm9yKGludCBpPTA7IGk8cGFyYW1zLmxlbmd0aDsgaSsrKQogICAgICAgICAgICAgaWYocGFyYW1zW2ldIT1udWxsKQogICAgICAgICAgICAgICAgICBjbGFzc2VzW2ldID0gcGFyYW1zW2ldLmdldENsYXNzKCk7Ci0gICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNsYXNzZXNbaV0gPSBudWxsOwotICAgICAgICByZXR1cm4gaW52b2tlSW5NZ3IobWdyLCBvcGVyYXRpb24sIHBhcmFtcywgY2xhc3Nlcyk7ICAgCisgICAgICAgIHJldHVybiBpbnZva2VJbk1ncihtZ3IsIG9wZXJhdGlvbiwgcGFyYW1zLCBjbGFzc2VzKTsKICAgICB9Ci0gICAgCisKICAgICBzdGF0aWMgcHVibGljIE9iamVjdCBpbnZva2VJbk1ncihPYmplY3QgbWdyLCBTdHJpbmcgb3BlcmF0aW9uLCBPYmplY3RbXSBwYXJhbXMsIENsYXNzW10gY2xhc3NlcykgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLSAgICAgICAgcmV0dXJuIGludm9rZUluTWdyKG1nciwgb3BlcmF0aW9uLCBwYXJhbXMsIGNsYXNzZXMsIHRydWUpOyAgIAorICAgICAgICByZXR1cm4gaW52b2tlSW5NZ3IobWdyLCBvcGVyYXRpb24sIHBhcmFtcywgY2xhc3NlcywgdHJ1ZSk7CiAgICAgfQotICAgIAorCiAgICAgc3RhdGljIHB1YmxpYyBPYmplY3QgaW52b2tlSW5NZ3IoT2JqZWN0IG1nciwgU3RyaW5nIG9wZXJhdGlvbiwgT2JqZWN0W10gcGFyYW1zLCBDbGFzc1tdIGNsYXNzZXMsIGJvb2xlYW4gYkhpZGVFeGNlcHRpb24pIHRocm93cyBFeGNlcHRpb24KICAgICB7CiAgICAgICAgIHRyeQpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICAgICAgX2xhc3RFeGNlcHRpb24gPSBudWxsOwogICAgICAgICAgICAgX2xhc3RPcGVyYXRpb24gPSBvcGVyYXRpb247CiAgICAgICAgICAgICBfbGFzdFBhcmFtcyA9IHBhcmFtczsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBPYmplY3QgcmVzID0gbnVsbDsKICAgICAgICAgICAgIE1ldGhvZCBtZXRob2QgPW51bGw7CiAgICAgICAgICAgICBDbGFzcyBjbCA9IG1nci5nZXRDbGFzcygpOwpAQCAtMTAxLDE3ICsxMDEsMTcgQEAKICAgICAgICAgU3RyaW5nIG1zZyA9IG51bGw7CiAgICAgICAgIGlmKF9sYXN0RXhjZXB0aW9uIT1udWxsKQogICAgICAgICAgICAgbXNnID0gRXhjZXB0aW9uVXRpbC5nZXRSb290Q2F1c2UoX2xhc3RFeGNlcHRpb24pLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgaW50IGlkeCA9IG1zZyE9bnVsbD9tc2cuaW5kZXhPZignXG4nKTotMTsgCisgICAgICAgIGludCBpZHggPSBtc2chPW51bGw/bXNnLmluZGV4T2YoJ1xuJyk6LTE7CiAgICAgICAgICAgaWYoaWR4Pj0wKQogICAgICAgICAgIHsKICAgICAgICAgICAgICAgaW50IGlkeDIgPSBtc2cuaW5kZXhPZignXG4nLCBpZHgrMSk7Ci0gICAgICAgICAgICAgIGlmKGlkeDI+PTApIAorICAgICAgICAgICAgICBpZihpZHgyPj0wKQogICAgICAgICAgICAgICAgICAgaWR4ID0gaWR4MjsKICAgICAgICAgICAgICAgbXNnID0gbXNnLnN1YnN0cmluZygwLCBpZHgpOwogICAgICAgICAgIH0KICAgICAgICAgcmV0dXJuICJFeGNlcHRpb246ICIgKyBtc2cgKyAiIE9wZXJhdGlvbjogIitfbGFzdE9wZXJhdGlvbiArICIoIisgU21hcnRTdHJpbmdpZmllci50b1N0cmluZyhfbGFzdFBhcmFtcykgKyIpIjsKICAgICB9Ci0gICAgCisKICAgICBzdGF0aWMgdm9pZCByZXBsYWNlU3RyKFN0cmluZ0J1ZmZlciBidWYsIFN0cmluZyBzdHJPbGQsIFN0cmluZyBzdHJOZXcpCiAgICAgewogICAgICAgICBpbnQgaWR4ID0gMDsKQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgICAgICAgICAgaWR4Kz1sZW5OZXc7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBzdGF0aWMgcHVibGljIFN0cmluZyBjYW1lbGl6ZShTdHJpbmcgc3RyKQogICAgIHsKICAgICAgICAgaWYoc3RyLmxlbmd0aCgpPT0wKQpAQCAtMTQ4LDEzICsxNDgsMTMgQEAKICAgICAgICAgLy9TdHJpbmcgcmVzID0gYnVmLnRvU3RyaW5nKCk7CiAgICAgICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKICAgICB9Ci0gICAgCisKICAgICBzdGF0aWMgcHVibGljIE9iamVjdCBnZXRCZWFuQXR0cmlidXRlKE9iamVjdCBiZWFuLCBTdHJpbmcgYXR0cmlidXRlTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKIAogICAgICAgICByZXR1cm4gaW52b2tlSW5NZ3IoYmVhbiwgImdldCIrY2FtZWxpemUoYXR0cmlidXRlTmFtZSksIG51bGwsIG51bGwsIHRydWUpOwogICAgIH0KLSAgICAKKwogCiAgICAgcHVibGljIHN0YXRpYyBUaHJvd2FibGUgX2xhc3RFeGNlcHRpb247CiAgICAgcHVibGljIHN0YXRpYyBPYmplY3QgX2xhc3RSZXN1bHQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9jb25maWcvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2NvbmZpZy9FbGVtVGVzdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9jb25maWcvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2NvbmZpZy9FbGVtVGVzdGVyLmphdmEKaW5kZXggZjRkNjQ0ZC4uNjQ3ZTBjNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvY29uZmlnL2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9jb25maWcvRWxlbVRlc3Rlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2NvbmZpZy9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvY29uZmlnL0VsZW1UZXN0ZXIuamF2YQpAQCAtMzQsNyArMzQsNyBAQAogCiAKIC8qKgotICogZ2VuZXJpYyBuYW1lZCBjb25maWcgZWxlbWVudCB0ZXN0ZXIgCisgKiBnZW5lcmljIG5hbWVkIGNvbmZpZyBlbGVtZW50IHRlc3RlcgogICogQGF1dGhvciBhbGV4a3JhdgogICogICAgICAgICBEYXRlOiBBdWcgMjMsIDIwMDQKICAqIEB2ZXJzaW9uICRSZXZpc2lvbjogMS4xMSAkCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIG1FbGVtZW50ICAgICAgICAgPSBlbGVtZW50OwogICAgICAgICBtTWFzdGVyQ29uZmlnICAgID0gbUVsZW1lbnQuZ2V0TWFzdGVyQU1YQ29uZmlnRm9yRWxlbWVudChkb21haW5Sb290KTsKICAgICAgICAgU3RyaW5nIG1zZyA9ICJcblxuLS0tLS0tLSB0ZXN0ZXIgY3JlYXRlZCBmb3IgICIrbUVsZW1lbnQuZ2V0RWxlbWVudE5hbWUoKTsKLSAgICAgICAgcHJpbnRPYmoobXNnLCBtRWxlbWVudC5nZXRBdHRyaWJ1dGVzTWFwQ29weSgpKTsgCisgICAgICAgIHByaW50T2JqKG1zZywgbUVsZW1lbnQuZ2V0QXR0cmlidXRlc01hcENvcHkoKSk7CiAgICAgfQogCiAgICAgcHVibGljIEVsZW1UZXN0ZXIoZmluYWwgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIGNvbm5lY3Rpb24sIGZpbmFsIERvbWFpblJvb3QgZG9tYWluUm9vdCwgZmluYWwgVGVzdEVsZW1lbnQgZWxlbWVudCwKQEAgLTcwLDE4ICs3MCwxOCBAQAogICAgIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHN0cik7CiAgICAgfQotICAgIAorCiAgICAgdm9pZCBwcmludE9iaihTdHJpbmcgc3RyLCBPYmplY3Qgb2JqKQogICAgIHsKICAgICAgICAgQ29uZmlnVGVzdEhlbHBlci5wcmludE9iaihzdHIsIG9iaik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIE9iamVjdCBjcmVhdGVFbGVtZW50KCkgIHRocm93cyBFeGNlcHRpb24KICAgICB7CiAgICAgICAgIE9iamVjdCByZXQgPSBudWxsOwotICAgICAgICAKLSAgICAgICAgZmluYWwgYm9vbGVhbglpc05hbWVkRWxlbWVudAk9IGZhbHNlOwotICAgICAgICAKKworICAgICAgICBmaW5hbCBib29sZWFuICAgIGlzTmFtZWRFbGVtZW50ICAgID0gZmFsc2U7CisKICAgICAgICAgaWYoIGlzTmFtZWRFbGVtZW50ICl7CiAgICAgICAgICAgICByZXQgPSBDb25maWdUZXN0SGVscGVyLmludm9rZUluTWdyKG1NYXN0ZXJDb25maWcsICJjcmVhdGUiLAogICAgICAgICAgICAgICAgICAgICAgbUVsZW1lbnQuZ2V0Q3JlYXRpb25QYXJhbXMoKSwKQEAgLTEwMSw5ICsxMDEsOSBAQAogICAgIHB1YmxpYyB2b2lkIGRlbGV0ZUVsZW1lbnQoKSAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgU3RyaW5nIGtleSA9IG1FbGVtZW50LmdldEVsZW1lbnRLZXkoKTsKLSAgICAgICAgCi0gICAgICAgIGZpbmFsIGJvb2xlYW4JaXNOYW1lZEVsZW1lbnQJPSBrZXkgIT0gbnVsbDsKLSAgICAgICAgCisKKyAgICAgICAgZmluYWwgYm9vbGVhbiAgICBpc05hbWVkRWxlbWVudCAgICA9IGtleSAhPSBudWxsOworCiAgICAgICAgIGlmKCBpc05hbWVkRWxlbWVudCApewogICAgICAgICAgICAgQ29uZmlnVGVzdEhlbHBlci5pbnZva2VJbk1ncihtTWFzdGVyQ29uZmlnLCAicmVtb3ZlIiwKICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7a2V5fSk7CkBAIC0xMTcsMTUgKzExNywxNSBAQAogICAgICAgICB9CiAKICAgICB9Ci0gICAKLQlwdWJsaWMgT2JqZWN0TmFtZSBnZXRFbGVtTUJlYW5PYmplY3ROYW1lKCkgIHRocm93cyBFeGNlcHRpb24KKworICAgIHB1YmxpYyBPYmplY3ROYW1lIGdldEVsZW1NQmVhbk9iamVjdE5hbWUoKSAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIG1FbGVtZW50LmdldEVsZW1NQmVhbk9iamVjdE5hbWUoKTsKICAgICB9CiAKIAotICAgIAotICAgIHB1YmxpYyBNYXAgbGlzdCgpIAorCisgICAgcHVibGljIE1hcCBsaXN0KCkKICAgICB7CiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIHByaW50bG4oUkVQT1JUX1BSRUZJWCArImxpc3QoKSIpOwpAQCAtMTM3LDE3ICsxMzcsMTcgQEAKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgY2xlYW5FeGNlcHRpb25JZk1hdGNoZWQoU3RyaW5nIHBhcnNlU3RyKQogICAgIHsKICAgICAgICAgaWYoQ29uZmlnVGVzdEhlbHBlci5fbGFzdEV4Y2VwdGlvbiE9bnVsbCAmJgotICAgICAgICAgICAgKHBhcnNlU3RyPT1udWxsIHx8ICAgCisgICAgICAgICAgICAocGFyc2VTdHI9PW51bGwgfHwKICAgICAgICAgICAgICgoU3RyaW5nKSgiIitDb25maWdUZXN0SGVscGVyLmdldExhc3RFeGNlcHRpb25TaG9ydE1zZygpKSkuaW5kZXhPZihwYXJzZVN0cik+PTApKQogICAgICAgICB7CiAgICAgICAgICAgIENvbmZpZ1Rlc3RIZWxwZXIuX2xhc3RFeGNlcHRpb24gPSBudWxsOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tOb0V4Y2VwdGlvbihTdHJpbmcgZGVzY3JpcHRpb24pCiAgICAgewogICAgICAgICBpZihDb25maWdUZXN0SGVscGVyLl9sYXN0RXhjZXB0aW9uIT1udWxsKQpAQCAtMTU3LDggKzE1Nyw4IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja0xpc3QoU3RyaW5nIGRlc2NyaXB0aW9uKSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewogICAgICAgICBNYXAgbWFwID0gbGlzdCgpOwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGJPazsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIEFycmF5TGlzdCBnZXRBdHRyaWJ1dGVzTmFtZXNGcm9tTUJlYW5JbmZvKCkgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgQXJyYXlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CkBAIC0yMDksMTMgKzIwOSwxMyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBsaXN0OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrQXR0cmlidXRlcyhTdHJpbmcgZGVzY3JpcHRpb24sIE9iamVjdCBhbXhCZWFuKSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewogLy8gICAgICAgIGlmKCFjaGVja05vRXhjZXB0aW9uKGRlc2NyaXB0aW9uKSkKIC8vICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIEFycmF5TGlzdCBhdHRyTmFtZXMgPSBnZXRBdHRyaWJ1dGVzTmFtZXNGcm9tTUJlYW5JbmZvKCk7Ci0gICAgICAgIEF0dHJpYnV0ZUxpc3QgYXR0cnNJbkNvbmZpZyAgPSBtQ29ubmVjdGlvbi5nZXRBdHRyaWJ1dGVzKGdldEVsZW1NQmVhbk9iamVjdE5hbWUoKSwgbmV3IFN0cmluZ1tdeyIifSk7ICAKKyAgICAgICAgQXR0cmlidXRlTGlzdCBhdHRyc0luQ29uZmlnICA9IG1Db25uZWN0aW9uLmdldEF0dHJpYnV0ZXMoZ2V0RWxlbU1CZWFuT2JqZWN0TmFtZSgpLCBuZXcgU3RyaW5nW117IiJ9KTsKICAgICAgICAgSGFzaE1hcCBlbGVtQXR0cnNGcm9tQ29uZmlnID0gbmV3IEhhc2hNYXAoKTsKICAgICAgICAgZm9yKGludCBpPTA7IGk8YXR0cnNJbkNvbmZpZy5zaXplKCk7IGkrKykKICAgICAgICAgewpAQCAtMjI3LDcgKzIyNyw3IEBACiAgICAgICAgIGJvb2xlYW4gYk9rID0gdHJ1ZTsKICAgICAgICAgZm9yKGludCBpPTA7IGk8YXR0ck5hbWVzLnNpemUoKTsgaSsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgICAgICBhdHRyTmFtZSA9IChTdHJpbmcpYXR0ck5hbWVzLmdldChpKTsgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nICAgICAgYXR0ck5hbWUgPSAoU3RyaW5nKWF0dHJOYW1lcy5nZXQoaSk7CiAgICAgICAgICAgICBPYmplY3QgICAgICB2YWx1ZUluQ29uZmlnICAgICAgID0gZWxlbUF0dHJzRnJvbUNvbmZpZy5nZXQoYXR0ck5hbWUpOwogICAgICAgICAgICAgT2JqZWN0ICAgICAgdmFsdWVJbkVsZW0gICAgICAgICA9IGVsZW1BdHRyc0Zyb21BTVhBdHRyTWFwLmdldChhdHRyTmFtZSk7CiAgICAgICAgICAgICBpZiggKHZhbHVlSW5Db25maWc9PW51bGwgJiYgdmFsdWVJbkVsZW0hPW51bGwpIHx8CkBAIC0yNzEsOCArMjcxLDggQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYk9rOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBjaGVja0V4aXN0KFN0cmluZyBkZXNjcmlwdGlvbikgCisKKyAgICBwdWJsaWMgYm9vbGVhbiBjaGVja0V4aXN0KFN0cmluZyBkZXNjcmlwdGlvbikKICAgICB7CiAgICAgICAgIGlmKCFjaGVja05vRXhjZXB0aW9uKGRlc2NyaXB0aW9uKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzA3LDcgKzMwNyw3IEBACiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIHByaW50bG4oIi0tLSBnZW5lcmljIHRlc3QiKTsKICAgICAgICAgICAgIGRlbGV0ZUVsZW1lbnQoKTsKLS8vVEVNUE9SQVJZICAgICAgICAgICAgCisvL1RFTVBPUkFSWQogICAgIC8vaWYoQ29uZmlnVGVzdEhlbHBlci5fbGFzdEV4Y2VwdGlvbiE9bnVsbCkKICAgICAvLyAgICBDb25maWdUZXN0SGVscGVyLl9sYXN0RXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOwogLy9jaGVja05vRXhjZXB0aW9uKCJ0ZXN0dGluZyBwaGFzZSIpOwpAQCAtMzIwLDcgKzMyMCw3IEBACiAgICAgICAgICAgICAgICAgY2hlY2tBdHRyaWJ1dGVzKCJhdHRyaWJ1dGVzLWNoZWNrIiwgY3JlYXRlZCk7CiAKICAgICAgICAgICAgIHByaW50bG4oIldIQVQgVE8gRE8gV0lUSCBOT04tRVhJU1RFTlQgXCJtRWxlbU1nciBpbnN0YW5jZW9mIEFNWENvbmZpZ01nclwiPz8/PyIpOwotCQkJLyoKKyAgICAgICAgICAgIC8qCiAgICAgICAgICAgICBpZihtRWxlbU1nciBpbnN0YW5jZW9mIEFNWENvbmZpZ01ncikKICAgICAgICAgICAgICAgICBjaGVja0xpc3QoImxpc3Qgb3BlcmF0aW9uIik7CiAgICAgICAgICAgICAqLwpAQCAtMzI5LDcgKzMyOSw3IEBACiAvL2lmKENvbmZpZ1Rlc3RIZWxwZXIuX2xhc3RFeGNlcHRpb24hPW51bGwpCiAvLyAgICBDb25maWdUZXN0SGVscGVyLl9sYXN0RXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgY2hlY2tOb3RFeGlzdCgiYWZ0ZXIgZmluYWwtZGVsZXRpb24iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKQogICAgICAgICB7CiAgICAgICAgICAgIC8vZS5wcmludFN0YWNrVHJhY2UoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2NvbmZpZy9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvY29uZmlnL1Rlc3RFbGVtUmVnaXN0cnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2NvbmZpZy9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvY29uZmlnL1Rlc3RFbGVtUmVnaXN0cnkuamF2YQppbmRleCA5ZTdhZGUwLi42MmExMDMwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9jb25maWcvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2NvbmZpZy9UZXN0RWxlbVJlZ2lzdHJ5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvY29uZmlnL2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9jb25maWcvVGVzdEVsZW1SZWdpc3RyeS5qYXZhCkBAIC0zNiwxMiArMzYsMTIgQEAKICAgICB9CiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCAgYWRkUmVnRW50cnkoSGFzaE1hcCBtYXAsIFN0cmluZyBtYXN0ZXJOb2RlLCBTdHJpbmcgZW50cnlOYW1lLCBTdHJpbmdbXSByZXEpCiAgICAgewotICAgICAgICBtYXAucHV0KGVudHJ5TmFtZSwgCisgICAgICAgIG1hcC5wdXQoZW50cnlOYW1lLAogICAgICAgICAgICAgICBuZXcgUmVnRW50cnkoZW50cnlOYW1lLCBlbnRyeU5hbWUsIHJlcSwgbWFzdGVyTm9kZSkpOwogICAgIH0KICAgICBwcml2YXRlIHN0YXRpYyB2b2lkICBhZGRSZWdFbnRyeShIYXNoTWFwIG1hcCwgU3RyaW5nIG1hc3Rlck5vZGUsIFN0cmluZyBlbnRyeU5hbWUsIFN0cmluZyBkdGRfbmFtZSwgU3RyaW5nW10gcmVxKQogICAgIHsKLSAgICAgICAgbWFwLnB1dChlbnRyeU5hbWUsIAorICAgICAgICBtYXAucHV0KGVudHJ5TmFtZSwKICAgICAgICAgICAgICAgbmV3IFJlZ0VudHJ5KGVudHJ5TmFtZSwgZHRkX25hbWUsIHJlcSwgbWFzdGVyTm9kZSkpOwogICAgIH0KICAvKgpAQCAtNjAsMTkgKzYwLDE5IEBACiAgICAgICAgIFJlZ0VudHJ5IGVudHJ5ID0gZ2V0UmVnRW50cnkobmFtZSk7CiAgICAgICAgIHJldHVybiBlbnRyeS5kdGROYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldExldmVsKFN0cmluZyBuYW1lKQogICAgIHsKICAgICAgICAgUmVnRW50cnkgZW50cnkgPSBnZXRSZWdFbnRyeShuYW1lKTsKICAgICAgICAgcmV0dXJuIGVudHJ5LmdldExldmVsKCk7CiAgICAgfQogKi8KLSAgICAKKwogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGluaXRSZWdpc3RyeShTdHJpbmcgY29uZmlnTmFtZSkKICAgICB7CiAgICAgICAgIG1Db25maWdOYW1lID0gY29uZmlnTmFtZTsKLSAgICAgICAgCisKICAgICAgICAgSGFzaE1hcCByZWcgPSBuZXcgSGFzaE1hcCgpOwogICAgICAgICBhZGRSZWdFbnRyeShyZWcsICJkb21haW4iLCAiamRiYy1jb25uZWN0aW9uLXBvb2wiLCBuZXcgU3RyaW5nW117Im5hbWUiLCAiZGF0YXNvdXJjZS1jbGFzc25hbWUifSk7CiAgICAgICAgIGFkZFJlZ0VudHJ5KHJlZywgImRvbWFpbiIsICJjdXN0b20tcmVzb3VyY2UiLCBuZXcgU3RyaW5nW117ImpuZGktbmFtZSIsICJyZXMtdHlwZSIsICJmYWN0b3J5LWNsYXNzIn0pOwpAQCAtODQsNyArODQsNyBAQAogICAgICAgICBhZGRSZWdFbnRyeShyZWcsICJkb21haW4iLCAiY29ubmVjdG9yLXJlc291cmNlIiwgbmV3IFN0cmluZ1tdeyJqbmRpLW5hbWUiLCAicG9vbC1uYW1lIn0pOwogICAgICAgICBhZGRSZWdFbnRyeShyZWcsICJkb21haW4iLCAicmVzb3VyY2UtYWRhcHRlciIsICJyZXNvdXJjZS1hZGFwdGVyLWNvbmZpZyIsIG5ldyBTdHJpbmdbXXsicmVzb3VyY2UtYWRhcHRlci1uYW1lIn0pOwogICAgICAgICBhZGRSZWdFbnRyeShyZWcsICJkb21haW4iLCAiYWRtaW4tb2JqZWN0LXJlc291cmNlIiwgbmV3IFN0cmluZ1tdeyJqbmRpLW5hbWUiLCAicmVzLXR5cGUiLCAicmVzLWFkYXB0ZXIifSk7Ci0gICAgICAgIAorCiAgICAgICAgIGFkZFJlZ0VudHJ5KHJlZywgImh0dHAtc2VydmljZSIsICJ2aXJ0dWFsLXNlcnZlciIsIG5ldyBTdHJpbmdbXXsiaWQiLCAiaG9zdHMifSk7CiAgICAgICAgIGFkZFJlZ0VudHJ5KHJlZywgImh0dHAtc2VydmljZSIsICJodHRwLWxpc3RlbmVyIiwgbmV3IFN0cmluZ1tdeyJpZCIsICJhZGRyZXNzIiwgInBvcnQqaW50IiwgImRlZmF1bHQtdmlydHVhbC1zZXJ2ZXIiLCAic2VydmVyLW5hbWUifSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2NvbmZpZy9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvY29uZmlnL1Rlc3RFbGVtZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9jb25maWcvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2NvbmZpZy9UZXN0RWxlbWVudC5qYXZhCmluZGV4IGQzZWU0OGYuLmRjZDhkMzMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2NvbmZpZy9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvY29uZmlnL1Rlc3RFbGVtZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvY29uZmlnL2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9jb25maWcvVGVzdEVsZW1lbnQuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CiAgICAgcHJpdmF0ZSBIYXNoTWFwIGF0dHJpYnV0ZXM7CiAgICAgUmVnRW50cnkgICBlbnRyeTsKLSAgICAKKwogICAgIFRlc3RFbGVtZW50KFN0cmluZyBsaW5lKQogICAgIHsKICAgICAgICAgaW50IGN1cnJlbnQgPSAwLCBuZXh0ID0gMDsKQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgYXR0clZhbHVlID0gbGluZS5zdWJzdHJpbmcoMCwgbmV4dCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBhdHRyaWJ1dGVzLnB1dChhdHRyTmFtZSwgYXR0clZhbHVlKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBlbnRyeSA9IFRlc3RFbGVtUmVnaXN0cnkuZ2V0UmVnRW50cnkobmFtZSk7CiAvL1N5c3RlbS5vdXQucHJpbnRsbigiYXR0cmlidXRlcy5wdXQoXCIiK2F0dHJOYW1lKyJcIiwgXCIiICsgYXR0clZhbHVlKyAiXCIpIik7CiAvL1N5c3RlbS5vdXQucHJpbnRsbigiYXR0cmlidXRlcy5wdXQoXCIiK2NhbWVsaXplKGF0dHJOYW1lKSsiXCIoY2FtZWxpemVkKSwgXCIiICsgYXR0clZhbHVlKyAiXCIpIik7CkBAIC05OCwxMiArOTgsMTIgQEAKICAgICB7CiAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLmdldChhdHRyTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIE1hcCBnZXRBdHRyaWJ1dGVzTWFwQ29weSgpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IEhhc2hNYXAoYXR0cmlidXRlcyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXREdGROYW1lKCkKICAgICB7CiAgICAgICAgIHJldHVybiBlbnRyeS5kdGROYW1lOwpAQCAtMTM5LDEzICsxMzksMTMgQEAKICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gbmV3IEludGVnZXIoKFN0cmluZykocGFyYW1zW2ldKSk7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBvcHRpb25hbC5yZW1vdmUocmVxW2ldKTsgCisgICAgICAgICAgICBvcHRpb25hbC5yZW1vdmUocmVxW2ldKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBwYXJhbXNbcGFyYW1zLmxlbmd0aC0xXSA9IG9wdGlvbmFsOwogICAgICAgICByZXR1cm4gcGFyYW1zOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBDbGFzc1tdIGdldENyZWF0aW9uQ2xhc3NlcygpIHRocm93cyBFeGNlcHRpb24KICAgICB7CiAgICAgICAgIENsYXNzW10gY2xhc3NlcyA9IGVudHJ5LmdldFJlcUF0dHJDbGFzc2VzKCk7CkBAIC0xNTUsMzMgKzE1NSwzMyBAQAogICAgICAgICBjbHNbY2xzLmxlbmd0aC0xXSA9IENsYXNzLmZvck5hbWUoImphdmEudXRpbC5NYXAiKTsKICAgICAgICAgcmV0dXJuIGNsczsKICAgICB9Ci0JCisKICAgICBwdWJsaWMgYm9vbGVhbiBpc0NvbmZpZ1N1Ym9yZGluYXRlZEVsZW0oKQogICAgIHsKICAgICAgICAgcmV0dXJuICEoImRvbWFpbiIuZXF1YWxzKGVudHJ5LmdldE1hc3Rlck5vZGVOYW1lKCkpKTsKICAgICB9Ci0gICAgCisKICAgICAvL2NhbiBiZSBvdmVycmlkZW4KICAgICBwdWJsaWMgT2JqZWN0TmFtZSBnZXRFbGVtTUJlYW5PYmplY3ROYW1lKCkgIHRocm93cyBFeGNlcHRpb24KLQl7CisgICAgewogICAgICAgICBpZihpc0NvbmZpZ1N1Ym9yZGluYXRlZEVsZW0oKSkKICAgICAgICAgICAgIHJldHVybiBuZXcgT2JqZWN0TmFtZSgiY29tLnN1bi5hcHBzZXJ2OmNhdGVnb3J5PWNvbmZpZyxjb25maWc9IitUZXN0RWxlbVJlZ2lzdHJ5Lm1Db25maWdOYW1lKwogICAgICAgICAgICAgICAgICAgICAgICAgICIsdHlwZT0iK2dldER0ZE5hbWUoKSsgIiwiK2dldEVsZW1lbnRLZXlOYW1lKCkrIj0iK2dldEVsZW1lbnRLZXkoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBuZXcgT2JqZWN0TmFtZSgiY29tLnN1bi5hcHBzZXJ2OmNhdGVnb3J5PWNvbmZpZyx0eXBlPSIrZ2V0RHRkTmFtZSgpKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwiK2dldEVsZW1lbnRLZXlOYW1lKCkrIj0iK2dldEVsZW1lbnRLZXkoKSk7Ci0JfQorICAgIH0KICAgICAvL2NhbiBiZSBvdmVycmlkZW4KICAgICBwdWJsaWMgT2JqZWN0TmFtZSBnZXRFbGVtTUJlYW5PYmplY3ROYW1lUGF0dGVybigpICB0aHJvd3MgRXhjZXB0aW9uCi0JeworICAgIHsKICAgICAgICAgaWYoaXNDb25maWdTdWJvcmRpbmF0ZWRFbGVtKCkpCiAgICAgICAgICAgICByZXR1cm4gbmV3IE9iamVjdE5hbWUoImNvbS5zdW4uYXBwc2VydjpjYXRlZ29yeT1jb25maWcsY29uZmlnPSIrVGVzdEVsZW1SZWdpc3RyeS5tQ29uZmlnTmFtZSsKICAgICAgICAgICAgICAgICAgICAgICAgICAiLHR5cGU9IitnZXREdGROYW1lKCkrIiwqIik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBuZXcgT2JqZWN0TmFtZSgiY29tLnN1bi5hcHBzZXJ2OmNhdGVnb3J5PWNvbmZpZyx0eXBlPSIrZ2V0RHRkTmFtZSgpKyIsKiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCX0KLSAgICAKKworICAgIH0KKwogICAgIHB1YmxpYyBBTVhDb25maWcgZ2V0TWFzdGVyQU1YQ29uZmlnRm9yRWxlbWVudChEb21haW5Sb290IGRvbWFpblJvb3QpIHRocm93cyBFeGNlcHRpb24KICAgICB7CiAgICAgICAgIFN0cmluZyBtYXN0ZXJOb2RlTmFtZSA9IGVudHJ5LmdldE1hc3Rlck5vZGVOYW1lKCk7CkBAIC0xOTIsNiArMTkyLDYgQEAKICAgICAgICAgaWYoImlpb3Atc2VydmljZSIuZXF1YWxzKG1hc3Rlck5vZGVOYW1lKSkKICAgICAgICAgICAgIHJldHVybiAoKENvbmZpZ0NvbmZpZylkb21haW5Sb290LmdldERvbWFpbkNvbmZpZygpLmdldENvbmZpZ0NvbmZpZ01hcCgpLmdldCgic2VydmVyLWNvbmZpZyIpKS5nZXRJSU9QU2VydmljZUNvbmZpZygpOwogICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0aW5nIGZvciBNYXN0ZXIgTm9kZSAiK21hc3Rlck5vZGVOYW1lKyIgaXMgbm90IGltcGxlbWVudGVkIHlldCIpOwotICAgICAgICAKKwogICAgIH0KLX0gICAKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvRGVwbG95bWVudFRlc3RzLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0RlcGxveW1lbnRUZXN0cy5wcm9wZXJ0aWVzCmluZGV4IGE1OTk0ZDYuLmMzNzkzMDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvRGVwbG95bWVudFRlc3RzLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9EZXBsb3ltZW50VGVzdHMucHJvcGVydGllcwpAQCAtNDIsNyArNDIsNyBAQAogc2FtcGxlZGlyPXNhbXBsZXMKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyMjIG9wdGlvbmFsIC0tIHJlcG9ydCAtIHRoZSBwYXRoIG9mIHRoZSByZXBvcnQgZmlsZSB0aGF0IGdldHMgZ2VuZXJhdGVkLiAgCisjIyMgb3B0aW9uYWwgLS0gcmVwb3J0IC0gdGhlIHBhdGggb2YgdGhlIHJlcG9ydCBmaWxlIHRoYXQgZ2V0cyBnZW5lcmF0ZWQuCiAjIyMgVGhlIGRlZmF1bHQgaXMgIkRlcGxveW1lbnRUZXN0cy5vdXQiCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiByZXBvcnQ9RGVwbG95bWVudFRlc3RzLm91dApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDY0NTRhMDEuLjRjMWIwYjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE0LDcgKzE0LDcgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAjCiAKLSAKKwogCiBzcmMuZGlyPS4KIG1iZWFuYXBpLmphcj0ke3B1Ymxpc2guaG9tZX0vYWRtaW4tY29yZS9tYmVhbmFwaS9saWIvbWJlYW5hcGkuamFyCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvYnVpbGQueG1sCmluZGV4IDBkMWY4MTMuLmU3MDI3MzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvYnVpbGQueG1sCkBAIC02OSw5ICs2OSw5IEBACiAKICAgICA8IS0tIGNvcHlzYW1wbGVzLS0+CiAgICAgPHRhcmdldCBuYW1lPSJjb3B5dWlzYW1wbGVzIiBkZXBlbmRzPSJjb21waWxlIj4KLQk8Y29weSB0b2Rpcj0iJHtzYW1wbGVzLmRlc3R9Ij4KLQkgICAgPGZpbGVzZXQgZGlyPSIke3NhbXBsZXMuc3JjfSIvPgotCTwvY29weT4KKyAgICA8Y29weSB0b2Rpcj0iJHtzYW1wbGVzLmRlc3R9Ij4KKyAgICAgICAgPGZpbGVzZXQgZGlyPSIke3NhbXBsZXMuc3JjfSIvPgorICAgIDwvY29weT4KICAgICA8L3RhcmdldD4KIAogICAgIDwhLS0gY2xlYW4gLS0+CkBAIC04OCwyMyArODgsMjMgQEAKIAogICAgIDwhLS0gcnVudGVzdHMgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0cyIgZGVwZW5kcz0iY29tcGlsZSxjb3B5YXV0b3NhbXBsZXMiPgotCTxqYXZhIGNsYXNzbmFtZT0iY29tLnN1bi5lbnRlcnByaXNlLmFkbWluLm1iZWFuYXBpLmRlcGxveW1lbnQuRGVwbG95bWVudFRlc3RzQXV0byIgZm9yaz0idHJ1ZSI+Ci0JICAgIDxqdm1hcmcgdmFsdWU9Ii1lYSIvPgotCSAgICA8YXJnIHZhbHVlPSJhbnQiLz4KKyAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5hZG1pbi5tYmVhbmFwaS5kZXBsb3ltZW50LkRlcGxveW1lbnRUZXN0c0F1dG8iIGZvcms9InRydWUiPgorICAgICAgICA8anZtYXJnIHZhbHVlPSItZWEiLz4KKyAgICAgICAgPGFyZyB2YWx1ZT0iYW50Ii8+CiAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9InJ1bi5jbGFzc3BhdGgiLz4KLQk8L2phdmE+CisgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPCEtLSBydW50ZXN0c2RlYnVnIC0tPgogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdHNkZWJ1ZyIgZGVwZW5kcz0iY29tcGlsZSxjb3B5YXV0b3NhbXBsZXMiPgotCTxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgdGVzdHMgd2l0aCBkZWJ1Z2dpbmcgb24gUG9ydCAzMzMzLiAgU3VzcGVuZGVkIC0tIGdvIGF0dGFjaCBub3cuIi8+Ci0JPGphdmEgY2xhc3NuYW1lPSJjb20uc3VuLmVudGVycHJpc2UuYWRtaW4ubWJlYW5hcGkuZGVwbG95bWVudC5EZXBsb3ltZW50VGVzdHNBdXRvIiBmb3JrPSJ0cnVlIj4KLQkgICAgPGp2bWFyZyB2YWx1ZT0iLWVhIi8+Ci0JICAgIDxqdm1hcmcgdmFsdWU9Ii1YZGVidWciLz4KLQkgICAgPGp2bWFyZyB2YWx1ZT0iLVhydW5qZHdwOnRyYW5zcG9ydD1kdF9zb2NrZXQsc2VydmVyPXksc3VzcGVuZD15LGFkZHJlc3M9MzMzMyIvPgotCSAgICA8YXJnIHZhbHVlPSJhbnQiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIHRlc3RzIHdpdGggZGVidWdnaW5nIG9uIFBvcnQgMzMzMy4gIFN1c3BlbmRlZCAtLSBnbyBhdHRhY2ggbm93LiIvPgorICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnN1bi5lbnRlcnByaXNlLmFkbWluLm1iZWFuYXBpLmRlcGxveW1lbnQuRGVwbG95bWVudFRlc3RzQXV0byIgZm9yaz0idHJ1ZSI+CisgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1lYSIvPgorICAgICAgICA8anZtYXJnIHZhbHVlPSItWGRlYnVnIi8+CisgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1YcnVuamR3cDp0cmFuc3BvcnQ9ZHRfc29ja2V0LHNlcnZlcj15LHN1c3BlbmQ9eSxhZGRyZXNzPTMzMzMiLz4KKyAgICAgICAgPGFyZyB2YWx1ZT0iYW50Ii8+CiAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9InJ1bi5jbGFzc3BhdGgiLz4KLQk8L2phdmE+CisgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0FkbWluT2JqZWN0UmVzb3VyY2VUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0FkbWluT2JqZWN0UmVzb3VyY2VUZXN0LmphdmEKaW5kZXggZTJhOGY2OS4uZWM3YTA2YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9BZG1pbk9iamVjdFJlc291cmNlVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvQWRtaW5PYmplY3RSZXNvdXJjZVRlc3QuamF2YQpAQCAtMzIsOCArMzIsOCBAQAogICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcga1Jlc0FkYXB0ZXIgICAgID0gImFiY0FkYXB0ZXIiOwogICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcga09iamVjdFR5cGUgICAgID0gInVzZXIiOwogCi0gICAgcHVibGljIEFkbWluT2JqZWN0UmVzb3VyY2VUZXN0KGZpbmFsIFN0cmluZyB1c2VyLCAKLSAgICAgICAgZmluYWwgU3RyaW5nIHBhc3N3b3JkLCBmaW5hbCBTdHJpbmcgaG9zdCwgZmluYWwgaW50IHBvcnQsIAorICAgIHB1YmxpYyBBZG1pbk9iamVjdFJlc291cmNlVGVzdChmaW5hbCBTdHJpbmcgdXNlciwKKyAgICAgICAgZmluYWwgU3RyaW5nIHBhc3N3b3JkLCBmaW5hbCBTdHJpbmcgaG9zdCwgZmluYWwgaW50IHBvcnQsCiAgICAgICAgIGZpbmFsIFN0cmluZyBqbmRpTmFtZSwgZmluYWwgU3RyaW5nIHJlc1R5cGUsIGZpbmFsIFN0cmluZyByZXNBZGFwdGVyKQogICAgIHsKICAgICAgICAgZmluYWwgQ21kRmFjdG9yeSBjbWRGYWN0b3J5ID0gZ2V0Q21kRmFjdG9yeSgpOwpAQCAtNDEsMTEgKzQxLDExIEBACiAgICAgICAgIGZpbmFsIENvbm5lY3RDbWQgY29ubmVjdENtZCA9IGNtZEZhY3RvcnkuY3JlYXRlQ29ubmVjdENtZCgKICAgICAgICAgICAgICAgICB1c2VyLCBwYXNzd29yZCwgaG9zdCwgcG9ydCk7CiAKLSAgICAgICAgZmluYWwgQ3JlYXRlQWRtaW5PYmplY3RSZXNvdXJjZUNtZCBjcmVhdGVDbWQgPSAKLSAgICAgICAgICAgICAgICBjbWRGYWN0b3J5LmNyZWF0ZUNyZWF0ZUFkbWluT2JqZWN0UmVzb3VyY2VDbWQoam5kaU5hbWUsIAorICAgICAgICBmaW5hbCBDcmVhdGVBZG1pbk9iamVjdFJlc291cmNlQ21kIGNyZWF0ZUNtZCA9CisgICAgICAgICAgICAgICAgY21kRmFjdG9yeS5jcmVhdGVDcmVhdGVBZG1pbk9iamVjdFJlc291cmNlQ21kKGpuZGlOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgcmVzVHlwZSwgcmVzQWRhcHRlciwgZ2V0T3B0aW9uYWwoKSk7CiAKLSAgICAgICAgZmluYWwgRGVsZXRlQWRtaW5PYmplY3RSZXNvdXJjZUNtZCBkZWxldGVDbWQgPSAKKyAgICAgICAgZmluYWwgRGVsZXRlQWRtaW5PYmplY3RSZXNvdXJjZUNtZCBkZWxldGVDbWQgPQogICAgICAgICAgICAgICAgIGNtZEZhY3RvcnkuY3JlYXRlRGVsZXRlQWRtaW5PYmplY3RSZXNvdXJjZUNtZChqbmRpTmFtZSk7CiAKICAgICAgICAgZmluYWwgUGlwZUNtZCBwMSA9IG5ldyBQaXBlQ21kKGNvbm5lY3RDbWQsIGNyZWF0ZUNtZCk7CkBAIC02NywxNCArNjcsMTQgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0gICAgICAgIG5ldyBBZG1pbk9iamVjdFJlc291cmNlVGVzdCgiYWRtaW4iLCAicGFzc3dvcmQiLCAibG9jYWxob3N0IiwgODY4NiwgCi0gICAgICAgICAgICAgICAga0pORElOYW1lLCBrUmVzVHlwZSwga1Jlc0FkYXB0ZXIpLnJ1bigpOyAKKyAgICAgICAgbmV3IEFkbWluT2JqZWN0UmVzb3VyY2VUZXN0KCJhZG1pbiIsICJwYXNzd29yZCIsICJsb2NhbGhvc3QiLCA4Njg2LAorICAgICAgICAgICAgICAgIGtKTkRJTmFtZSwga1Jlc1R5cGUsIGtSZXNBZGFwdGVyKS5ydW4oKTsKICAgICB9CiAKICAgICBwcml2YXRlIE1hcCBnZXRPcHRpb25hbCgpCiAgICAgewogICAgICAgICBmaW5hbCBNYXAgb3B0aW9uYWwgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICAvL29wdGlvbmFsLnB1dChDcmVhdGVSZXNvdXJjZUtleXMuUkVTT1VSQ0VfT0JKRUNUX1RZUEVfS0VZLCAKKyAgICAgICAgLy9vcHRpb25hbC5wdXQoQ3JlYXRlUmVzb3VyY2VLZXlzLlJFU09VUkNFX09CSkVDVF9UWVBFX0tFWSwKICAgICAgICAgICAgICAgICAvL2tPYmplY3RUeXBlKTsKICAgICAgICAgcmV0dXJuIG9wdGlvbmFsOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvQmFzZUNtZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9CYXNlQ21kLmphdmEKaW5kZXggNTEwMjAwYy4uNWM1NjU5ZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9CYXNlQ21kLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9CYXNlQ21kLmphdmEKQEAgLTgwLDEyICs4MCwxMiBAQAogCiAgICAgcHJvdGVjdGVkIGZpbmFsIERvbWFpbkNvbmZpZyBnZXREb21haW5Db25maWcoKSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotICAgICAgIHJldHVybiBnZXREb21haW5Sb290KCkuZ2V0RG9tYWluQ29uZmlnKCk7IAorICAgICAgIHJldHVybiBnZXREb21haW5Sb290KCkuZ2V0RG9tYWluQ29uZmlnKCk7CiAgICAgfQogCiAgICAgcHJvdGVjdGVkIGZpbmFsIEoyRUVEb21haW4gZ2V0SjJFRURvbWFpbigpIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0gICAgICAgcmV0dXJuIGdldERvbWFpblJvb3QoKS5nZXRKMkVFRG9tYWluKCk7IAorICAgICAgIHJldHVybiBnZXREb21haW5Sb290KCkuZ2V0SjJFRURvbWFpbigpOwogICAgIH0KIAogICAgIHByb3RlY3RlZCBmaW5hbCBUTFNQYXJhbXMgZ2V0VExTUGFyYW1zKCkKQEAgLTk1LDYgKzk1LDYgQEAKIAogICAgIHByb3RlY3RlZCBmaW5hbCBRdWVyeU1nciBnZXRRdWVyeU1ncigpIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0gICAgICAgcmV0dXJuIGdldERvbWFpblJvb3QoKS5nZXRRdWVyeU1ncigpOyAKKyAgICAgICByZXR1cm4gZ2V0RG9tYWluUm9vdCgpLmdldFF1ZXJ5TWdyKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9DbHVzdGVyTGlmZWN5Y2xlVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9DbHVzdGVyTGlmZWN5Y2xlVGVzdC5qYXZhCmluZGV4IDYwMTJmMDcuLjU0NmRkMWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvQ2x1c3RlckxpZmVjeWNsZVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0NsdXN0ZXJMaWZlY3ljbGVUZXN0LmphdmEKQEAgLTI1LDggKzI1LDggQEAKICAgICBwcml2YXRlIGZpbmFsIENtZCB0YXJnZXQ7CiAKICAgICBwdWJsaWMgQ2x1c3RlckxpZmVjeWNsZVRlc3QoZmluYWwgU3RyaW5nIHVzZXIsIGZpbmFsIFN0cmluZyBwYXNzd29yZCwKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBob3N0LCBmaW5hbCBpbnQgcG9ydCwgZmluYWwgU3RyaW5nIGNsdXN0ZXJOYW1lLCAKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBpbnN0YW5jZU5hbWUsIGZpbmFsIFN0cmluZyBub2RlQWdlbnROYW1lLCAKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBob3N0LCBmaW5hbCBpbnQgcG9ydCwgZmluYWwgU3RyaW5nIGNsdXN0ZXJOYW1lLAorICAgICAgICAgICAgZmluYWwgU3RyaW5nIGluc3RhbmNlTmFtZSwgZmluYWwgU3RyaW5nIG5vZGVBZ2VudE5hbWUsCiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgY29uZmlnTmFtZSwgZmluYWwgTWFwIG9wdGlvbmFsKQogICAgIHsKICAgICAgICAgZmluYWwgQ21kQ2hhaW5DbWQgY2hhaW4gPSBuZXcgQ21kQ2hhaW5DbWQoKTsKQEAgLTM2LDIxICszNiwyMSBAQAogICAgICAgICBmaW5hbCBDb25uZWN0Q21kIGNvbm5lY3RDbWQgPSBjbWRGYWN0b3J5LmNyZWF0ZUNvbm5lY3RDbWQoCiAgICAgICAgICAgICAgICAgdXNlciwgcGFzc3dvcmQsIGhvc3QsIHBvcnQpOwogCi0gICAgICAgIGZpbmFsIENyZWF0ZUNsdXN0ZXJDbWQgY3JlYXRlQ2x1c3RlckNtZCA9IAorICAgICAgICBmaW5hbCBDcmVhdGVDbHVzdGVyQ21kIGNyZWF0ZUNsdXN0ZXJDbWQgPQogICAgICAgICAgICAgICAgIGNtZEZhY3RvcnkuY3JlYXRlQ3JlYXRlQ2x1c3RlckNtZCgKICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlck5hbWUsIGNvbmZpZ05hbWUsIG9wdGlvbmFsKTsKIAotICAgICAgICBmaW5hbCBDcmVhdGVDbHVzdGVyZWRJbnN0YW5jZUNtZCBjcmVhdGVDbHVzdGVyZWRJbnN0YW5jZUNtZCA9IAotICAgICAgICAgICAgICAgIGNtZEZhY3RvcnkuY3JlYXRlQ3JlYXRlQ2x1c3RlcmVkSW5zdGFuY2VDbWQoaW5zdGFuY2VOYW1lLCAKKyAgICAgICAgZmluYWwgQ3JlYXRlQ2x1c3RlcmVkSW5zdGFuY2VDbWQgY3JlYXRlQ2x1c3RlcmVkSW5zdGFuY2VDbWQgPQorICAgICAgICAgICAgICAgIGNtZEZhY3RvcnkuY3JlYXRlQ3JlYXRlQ2x1c3RlcmVkSW5zdGFuY2VDbWQoaW5zdGFuY2VOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlck5hbWUsIG5vZGVBZ2VudE5hbWUsIG9wdGlvbmFsKTsKIAotICAgICAgICBmaW5hbCBTdGFydENsdXN0ZXJDbWQgc3RhcnRDbHVzdGVyQ21kID0gCisgICAgICAgIGZpbmFsIFN0YXJ0Q2x1c3RlckNtZCBzdGFydENsdXN0ZXJDbWQgPQogICAgICAgICAgICAgICAgIGNtZEZhY3RvcnkuY3JlYXRlU3RhcnRDbHVzdGVyQ21kKGNsdXN0ZXJOYW1lKTsKIAotICAgICAgICBmaW5hbCBTdG9wQ2x1c3RlckNtZCBzdG9wQ2x1c3RlckNtZCA9IAorICAgICAgICBmaW5hbCBTdG9wQ2x1c3RlckNtZCBzdG9wQ2x1c3RlckNtZCA9CiAgICAgICAgICAgICAgICAgY21kRmFjdG9yeS5jcmVhdGVTdG9wQ2x1c3RlckNtZChjbHVzdGVyTmFtZSk7CiAKLSAgICAgICAgZmluYWwgRGVsZXRlQ2x1c3RlcmVkSW5zdGFuY2VDbWQgZGVsZXRlQ2x1c3RlcmVkSW5zdGFuY2VDbWQgPSAKKyAgICAgICAgZmluYWwgRGVsZXRlQ2x1c3RlcmVkSW5zdGFuY2VDbWQgZGVsZXRlQ2x1c3RlcmVkSW5zdGFuY2VDbWQgPQogICAgICAgICAgICAgICAgIGNtZEZhY3RvcnkuY3JlYXRlRGVsZXRlQ2x1c3RlcmVkSW5zdGFuY2VDbWQoaW5zdGFuY2VOYW1lKTsKIAogICAgICAgICBmaW5hbCBEZWxldGVDbHVzdGVyQ21kIGRlbGV0ZUNsdXN0ZXJDbWQgPSBjbWRGYWN0b3J5LgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9DbWRGYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0NtZEZhY3RvcnkuamF2YQppbmRleCAzZDdlNGUxLi44Yjc1NGUzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0NtZEZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0NtZEZhY3RvcnkuamF2YQpAQCAtMzIsOSArMzIsOSBAQAogCiAgICAgcHVibGljIENvbm5lY3RDbWQgY3JlYXRlQ29ubmVjdENtZChQaHVwIHBodXApCiAgICAgewotCQlyZXR1cm4gY3JlYXRlQ29ubmVjdENtZChwaHVwLnVzZXIsIHBodXAucGFzc3dvcmQsIHBodXAuaG9zdCwgcGh1cC5wb3J0KTsKLQl9Ci0gICAgcHVibGljIENvbm5lY3RDbWQgY3JlYXRlQ29ubmVjdENtZChTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkLCAKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbm5lY3RDbWQocGh1cC51c2VyLCBwaHVwLnBhc3N3b3JkLCBwaHVwLmhvc3QsIHBodXAucG9ydCk7CisgICAgfQorICAgIHB1YmxpYyBDb25uZWN0Q21kIGNyZWF0ZUNvbm5lY3RDbWQoU3RyaW5nIHVzZXIsIFN0cmluZyBwYXNzd29yZCwKICAgICAgICAgICAgIFN0cmluZyBob3N0LCBpbnQgcG9ydCkKICAgICB7CiAgICAgICAgIGZpbmFsIENtZEVudiBjbWRFbnYgPSBuZXcgQ21kRW52KCk7CkBAIC00OCw3ICs0OCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIENyZWF0ZUluc3RhbmNlQ21kIGNyZWF0ZUNyZWF0ZUluc3RhbmNlQ21kKAotICAgICAgICAgICAgU3RyaW5nIGluc3RhbmNlTmFtZSwgU3RyaW5nIG5vZGVBZ2VudE5hbWUsIAorICAgICAgICAgICAgU3RyaW5nIGluc3RhbmNlTmFtZSwgU3RyaW5nIG5vZGVBZ2VudE5hbWUsCiAgICAgICAgICAgICBTdHJpbmcgY29uZmlnTmFtZSwgTWFwIG9wdGlvbmFsKQogICAgIHsKICAgICAgICAgZmluYWwgQ21kRW52IGNtZEVudiA9IG5ldyBDbWRFbnYoKTsKQEAgLTkxLDE3ICs5MSwxNyBAQAogICAgICAgICByZXR1cm4gbmV3IFN0b3BJbnN0YW5jZUNtZChjbWRFbnYpOwogICAgIH0KIAotICAgIHB1YmxpYyBEZXBsb3lDbWQgY3JlYXRlRGVwbG95Q21kKFN0cmluZyBhcmNoaXZlLCBTdHJpbmcgbmFtZSwgCisgICAgcHVibGljIERlcGxveUNtZCBjcmVhdGVEZXBsb3lDbWQoU3RyaW5nIGFyY2hpdmUsIFN0cmluZyBuYW1lLAogICAgICAgICAgICAgU3RyaW5nIGNvbnRleHRSb290LCBib29sZWFuIGVuYWJsZSwgU3RyaW5nIGFwcHNlcnZUYXJnZXQpCiAgICAgewogICAgICAgICByZXR1cm4gY3JlYXRlRGVwbG95Q21kKGFyY2hpdmUsIG5hbWUsIG51bGwsIGNvbnRleHRSb290LCBlbmFibGUsCiAgICAgICAgICAgICAgICAgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBhcHBzZXJ2VGFyZ2V0KTsKICAgICB9CiAKLSAgICBwdWJsaWMgRGVwbG95Q21kIGNyZWF0ZURlcGxveUNtZChTdHJpbmcgYXJjaGl2ZSwgU3RyaW5nIG5hbWUsIAorICAgIHB1YmxpYyBEZXBsb3lDbWQgY3JlYXRlRGVwbG95Q21kKFN0cmluZyBhcmNoaXZlLCBTdHJpbmcgbmFtZSwKICAgICAgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiwgU3RyaW5nIGNvbnRleHRSb290LCBib29sZWFuIGVuYWJsZSwKLSAgICAgICAgICAgIGJvb2xlYW4gZm9yY2VEZXBsb3ksIGJvb2xlYW4gZ2VuZXJhdGVSTUlTdHVicywgCi0gICAgICAgICAgICBib29sZWFuIGF2YWlsYWJpbGl0eUVuYWJsZWQsIGJvb2xlYW4gY2FzY2FkZSwgYm9vbGVhbiB2ZXJpZnksIAorICAgICAgICAgICAgYm9vbGVhbiBmb3JjZURlcGxveSwgYm9vbGVhbiBnZW5lcmF0ZVJNSVN0dWJzLAorICAgICAgICAgICAgYm9vbGVhbiBhdmFpbGFiaWxpdHlFbmFibGVkLCBib29sZWFuIGNhc2NhZGUsIGJvb2xlYW4gdmVyaWZ5LAogICAgICAgICAgICAgU3RyaW5nIHRhcmdldCkKICAgICB7CiAgICAgICAgIGZpbmFsIENtZEVudiBjbWRFbnYgPSBuZXcgQ21kRW52KCk7CkBAIC0xMTIsMzQgKzExMiwzNCBAQAogICAgICAgICBmaW5hbCBNYXAgZGVwbG95T3B0aW9ucyA9IG5ldyBIYXNoTWFwKDEwKTsKIAogICAgICAgICBkZXBsb3lPcHRpb25zLnB1dChEZXBsb3ltZW50TWdyLkRFUExPWV9PUFRJT05fTkFNRV9LRVksIG5hbWUpOwotICAgICAgICBkZXBsb3lPcHRpb25zLnB1dChEZXBsb3ltZW50TWdyLkRFUExPWV9PUFRJT05fREVTQ1JJUFRJT05fS0VZLCAKKyAgICAgICAgZGVwbG95T3B0aW9ucy5wdXQoRGVwbG95bWVudE1nci5ERVBMT1lfT1BUSU9OX0RFU0NSSVBUSU9OX0tFWSwKICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbik7Ci0gICAgICAgIGRlcGxveU9wdGlvbnMucHV0KERlcGxveW1lbnRNZ3IuREVQTE9ZX09QVElPTl9DT05URVhUX1JPT1RfS0VZLCAKKyAgICAgICAgZGVwbG95T3B0aW9ucy5wdXQoRGVwbG95bWVudE1nci5ERVBMT1lfT1BUSU9OX0NPTlRFWFRfUk9PVF9LRVksCiAgICAgICAgICAgICAgICAgY29udGV4dFJvb3QpOwotICAgICAgICBkZXBsb3lPcHRpb25zLnB1dChEZXBsb3ltZW50TWdyLkRFUExPWV9PUFRJT05fRU5BQkxFX0tFWSwgCisgICAgICAgIGRlcGxveU9wdGlvbnMucHV0KERlcGxveW1lbnRNZ3IuREVQTE9ZX09QVElPTl9FTkFCTEVfS0VZLAogICAgICAgICAgICAgICAgIG5ldyBCb29sZWFuKGVuYWJsZSkudG9TdHJpbmcoKSk7Ci0gICAgICAgIGRlcGxveU9wdGlvbnMucHV0KERlcGxveW1lbnRNZ3IuREVQTE9ZX09QVElPTl9HRU5FUkFURV9STUlfU1RVQlNfS0VZLCAKKyAgICAgICAgZGVwbG95T3B0aW9ucy5wdXQoRGVwbG95bWVudE1nci5ERVBMT1lfT1BUSU9OX0dFTkVSQVRFX1JNSV9TVFVCU19LRVksCiAgICAgICAgICAgICAgICAgbmV3IEJvb2xlYW4oZ2VuZXJhdGVSTUlTdHVicykudG9TdHJpbmcoKSk7Ci0gICAgICAgIGRlcGxveU9wdGlvbnMucHV0KERlcGxveW1lbnRNZ3IuREVQTE9ZX09QVElPTl9GT1JDRV9LRVksIAorICAgICAgICBkZXBsb3lPcHRpb25zLnB1dChEZXBsb3ltZW50TWdyLkRFUExPWV9PUFRJT05fRk9SQ0VfS0VZLAogICAgICAgICAgICAgICAgIG5ldyBCb29sZWFuKGZvcmNlRGVwbG95KS50b1N0cmluZygpKTsKLSAgICAgICAgZGVwbG95T3B0aW9ucy5wdXQoRGVwbG95bWVudE1nci5ERVBMT1lfT1BUSU9OX0FWQUlMQUJJTElUWV9FTkFCTEVEX0tFWSwgCisgICAgICAgIGRlcGxveU9wdGlvbnMucHV0KERlcGxveW1lbnRNZ3IuREVQTE9ZX09QVElPTl9BVkFJTEFCSUxJVFlfRU5BQkxFRF9LRVksCiAgICAgICAgICAgICAgICAgbmV3IEJvb2xlYW4oYXZhaWxhYmlsaXR5RW5hYmxlZCkudG9TdHJpbmcoKSk7Ci0gICAgICAgIGRlcGxveU9wdGlvbnMucHV0KERlcGxveW1lbnRNZ3IuREVQTE9ZX09QVElPTl9DQVNDQURFX0tFWSwgCisgICAgICAgIGRlcGxveU9wdGlvbnMucHV0KERlcGxveW1lbnRNZ3IuREVQTE9ZX09QVElPTl9DQVNDQURFX0tFWSwKICAgICAgICAgICAgICAgICBuZXcgQm9vbGVhbihjYXNjYWRlKS50b1N0cmluZygpKTsKLSAgICAgICAgZGVwbG95T3B0aW9ucy5wdXQoRGVwbG95bWVudE1nci5ERVBMT1lfT1BUSU9OX1ZFUklGWV9LRVksIAorICAgICAgICBkZXBsb3lPcHRpb25zLnB1dChEZXBsb3ltZW50TWdyLkRFUExPWV9PUFRJT05fVkVSSUZZX0tFWSwKICAgICAgICAgICAgICAgICBuZXcgQm9vbGVhbih2ZXJpZnkpLnRvU3RyaW5nKCkpOwotCQkKLQkJdHJ5Ci0JCXsKLQkJCS8vIEZJWE1FIFRCRCBBZGQgdG8gTUJBUEkuLi4KLQkJCWlmKG5ldyBGaWxlKGFyY2hpdmUpLmlzRGlyZWN0b3J5KCkpCi0JCQkJLy9kZXBsb3lPcHRpb25zLnB1dChEZXBsb3ltZW50TWdyLkRFUExPWV9PUFRJT05fRElSRUNUT1JZX0RFUExPWUVEX0tFWSwgQm9vbGVhbi5UUlVFLnRvU3RyaW5nKCkpOwotCQkJCWRlcGxveU9wdGlvbnMucHV0KCJkaXJlY3RvcnlkZXBsb3llZCIsIEJvb2xlYW4uVFJVRS50b1N0cmluZygpKTsKLQkJfQotCQljYXRjaChFeGNlcHRpb24gZSkKLQkJewotCQkJLy8KLQkJfQorCisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICAvLyBGSVhNRSBUQkQgQWRkIHRvIE1CQVBJLi4uCisgICAgICAgICAgICBpZihuZXcgRmlsZShhcmNoaXZlKS5pc0RpcmVjdG9yeSgpKQorICAgICAgICAgICAgICAgIC8vZGVwbG95T3B0aW9ucy5wdXQoRGVwbG95bWVudE1nci5ERVBMT1lfT1BUSU9OX0RJUkVDVE9SWV9ERVBMT1lFRF9LRVksIEJvb2xlYW4uVFJVRS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICBkZXBsb3lPcHRpb25zLnB1dCgiZGlyZWN0b3J5ZGVwbG95ZWQiLCBCb29sZWFuLlRSVUUudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgIH0KICAgICAgICAgY21kRW52LnB1dChEZXBsb3lDbWQua0RlcGxveU9wdGlvbnMsIGRlcGxveU9wdGlvbnMpOwogCiAgICAgICAgIHJldHVybiBuZXcgRGVwbG95Q21kKGNtZEVudik7CkBAIC0zMjQsMjQgKzMyNCwyNCBAQAogICAgICAgICByZXR1cm4gbmV3IERlbGV0ZUNvbm5lY3RvclJlc291cmNlQ21kKGNtZEVudik7CiAgICAgfQogCi0gICAgcHVibGljIENyZWF0ZUNvbm5lY3RvckNvbm5lY3Rpb25Qb29sQ21kIAorICAgIHB1YmxpYyBDcmVhdGVDb25uZWN0b3JDb25uZWN0aW9uUG9vbENtZAogICAgIGNyZWF0ZUNyZWF0ZUNvbm5lY3RvckNvbm5lY3Rpb25Qb29sQ21kKAotICAgICAgICAgICAgU3RyaW5nIG5hbWUsIFN0cmluZyByZXNvdXJjZUFkYXB0ZXJOYW1lLCAKKyAgICAgICAgICAgIFN0cmluZyBuYW1lLCBTdHJpbmcgcmVzb3VyY2VBZGFwdGVyTmFtZSwKICAgICAgICAgICAgIFN0cmluZyBjb25uZWN0aW9uRGVmaW5pdGlvbk5hbWUsIE1hcCBvcHRpb25hbCkKICAgICB7CiAgICAgICAgIGZpbmFsIENtZEVudiBjbWRFbnYgPSBuZXcgQ21kRW52KCk7CiAKICAgICAgICAgY21kRW52LnB1dChDcmVhdGVDb25uZWN0b3JDb25uZWN0aW9uUG9vbENtZC5rTmFtZSwgbmFtZSk7Ci0gICAgICAgIGNtZEVudi5wdXQoQ3JlYXRlQ29ubmVjdG9yQ29ubmVjdGlvblBvb2xDbWQua1Jlc291cmNlQWRhcHRlck5hbWUsIAorICAgICAgICBjbWRFbnYucHV0KENyZWF0ZUNvbm5lY3RvckNvbm5lY3Rpb25Qb29sQ21kLmtSZXNvdXJjZUFkYXB0ZXJOYW1lLAogICAgICAgICAgICAgICAgIHJlc291cmNlQWRhcHRlck5hbWUpOwotICAgICAgICBjbWRFbnYucHV0KENyZWF0ZUNvbm5lY3RvckNvbm5lY3Rpb25Qb29sQ21kLmtDb25uZWN0aW9uRGVmaW5pdGlvbk5hbWUsIAorICAgICAgICBjbWRFbnYucHV0KENyZWF0ZUNvbm5lY3RvckNvbm5lY3Rpb25Qb29sQ21kLmtDb25uZWN0aW9uRGVmaW5pdGlvbk5hbWUsCiAgICAgICAgICAgICAgICAgY29ubmVjdGlvbkRlZmluaXRpb25OYW1lKTsKICAgICAgICAgY21kRW52LnB1dChDcmVhdGVDb25uZWN0b3JDb25uZWN0aW9uUG9vbENtZC5rT3B0aW9uYWwsIG9wdGlvbmFsKTsKIAogICAgICAgICByZXR1cm4gbmV3IENyZWF0ZUNvbm5lY3RvckNvbm5lY3Rpb25Qb29sQ21kKGNtZEVudik7CiAgICAgfQogCi0gICAgcHVibGljIERlbGV0ZUNvbm5lY3RvckNvbm5lY3Rpb25Qb29sQ21kIAorICAgIHB1YmxpYyBEZWxldGVDb25uZWN0b3JDb25uZWN0aW9uUG9vbENtZAogICAgIGNyZWF0ZURlbGV0ZUNvbm5lY3RvckNvbm5lY3Rpb25Qb29sQ21kKFN0cmluZyBuYW1lKQogICAgIHsKICAgICAgICAgZmluYWwgQ21kRW52IGNtZEVudiA9IG5ldyBDbWRFbnYoKTsKQEAgLTM1MSwyMSArMzUxLDIxIEBACiAgICAgICAgIHJldHVybiBuZXcgRGVsZXRlQ29ubmVjdG9yQ29ubmVjdGlvblBvb2xDbWQoY21kRW52KTsKICAgICB9CiAKLSAgICBwdWJsaWMgQ3JlYXRlSkRCQ0Nvbm5lY3Rpb25Qb29sQ21kIAorICAgIHB1YmxpYyBDcmVhdGVKREJDQ29ubmVjdGlvblBvb2xDbWQKICAgICBjcmVhdGVDcmVhdGVKREJDQ29ubmVjdGlvblBvb2xDbWQoCiAgICAgICAgICAgICBTdHJpbmcgbmFtZSwgU3RyaW5nIGRhdGFzb3VyY2VDbGFzc25hbWUsIE1hcCBvcHRpb25hbCkKICAgICB7CiAgICAgICAgIGZpbmFsIENtZEVudiBjbWRFbnYgPSBuZXcgQ21kRW52KCk7CiAKICAgICAgICAgY21kRW52LnB1dChDcmVhdGVKREJDQ29ubmVjdGlvblBvb2xDbWQua05hbWUsIG5hbWUpOwotICAgICAgICBjbWRFbnYucHV0KENyZWF0ZUpEQkNDb25uZWN0aW9uUG9vbENtZC5rRGF0YXNvdXJjZUNsYXNzbmFtZSwgCisgICAgICAgIGNtZEVudi5wdXQoQ3JlYXRlSkRCQ0Nvbm5lY3Rpb25Qb29sQ21kLmtEYXRhc291cmNlQ2xhc3NuYW1lLAogICAgICAgICAgICAgICAgIGRhdGFzb3VyY2VDbGFzc25hbWUpOwogICAgICAgICBjbWRFbnYucHV0KENyZWF0ZUpEQkNDb25uZWN0aW9uUG9vbENtZC5rT3B0aW9uYWwsIG9wdGlvbmFsKTsKIAogICAgICAgICByZXR1cm4gbmV3IENyZWF0ZUpEQkNDb25uZWN0aW9uUG9vbENtZChjbWRFbnYpOwogICAgIH0KIAotICAgIHB1YmxpYyBEZWxldGVKREJDQ29ubmVjdGlvblBvb2xDbWQgCisgICAgcHVibGljIERlbGV0ZUpEQkNDb25uZWN0aW9uUG9vbENtZAogICAgIGNyZWF0ZURlbGV0ZUpEQkNDb25uZWN0aW9uUG9vbENtZChTdHJpbmcgbmFtZSkKICAgICB7CiAgICAgICAgIGZpbmFsIENtZEVudiBjbWRFbnYgPSBuZXcgQ21kRW52KCk7CkBAIC0zNzUsMTIgKzM3NSwxMiBAQAogICAgICAgICByZXR1cm4gbmV3IERlbGV0ZUpEQkNDb25uZWN0aW9uUG9vbENtZChjbWRFbnYpOwogICAgIH0KIAotCXB1YmxpYyBVbmRlcGxveUNtZCBjcmVhdGVVbmRlcGxveUNtZChTdHJpbmcgbmFtZSwgU3RyaW5nIHRhcmdldCkKKyAgICBwdWJsaWMgVW5kZXBsb3lDbWQgY3JlYXRlVW5kZXBsb3lDbWQoU3RyaW5nIG5hbWUsIFN0cmluZyB0YXJnZXQpCiAgICAgewogICAgICAgICBmaW5hbCBDbWRFbnYgY21kRW52ID0gbmV3IENtZEVudigpOwogICAgICAgICBmaW5hbCBNYXAgdW5kZXBsb3lPcHRpb25zID0gbmV3IEhhc2hNYXAoMSk7CiAKLQkJY21kRW52LnB1dChEZXBsb3lDbWQua1RhcmdldCwgdGFyZ2V0KTsKKyAgICAgICAgY21kRW52LnB1dChEZXBsb3lDbWQua1RhcmdldCwgdGFyZ2V0KTsKIAogICAgICAgICB1bmRlcGxveU9wdGlvbnMucHV0KERlcGxveW1lbnRNZ3IuREVQTE9ZX09QVElPTl9OQU1FX0tFWSwgbmFtZSk7CiAgICAgICAgIGNtZEVudi5wdXQoRGVwbG95Q21kLmtEZXBsb3lPcHRpb25zLCB1bmRlcGxveU9wdGlvbnMpOwpAQCAtNDM4LDcgKzQzOCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIENyZWF0ZUNsdXN0ZXJlZEluc3RhbmNlQ21kIGNyZWF0ZUNyZWF0ZUNsdXN0ZXJlZEluc3RhbmNlQ21kKAotICAgICAgICAgICAgU3RyaW5nIGluc3RhbmNlTmFtZSwgU3RyaW5nIGNsdXN0ZXJOYW1lLCBTdHJpbmcgbm9kZUFnZW50TmFtZSwgCisgICAgICAgICAgICBTdHJpbmcgaW5zdGFuY2VOYW1lLCBTdHJpbmcgY2x1c3Rlck5hbWUsIFN0cmluZyBub2RlQWdlbnROYW1lLAogICAgICAgICAgICAgTWFwIG9wdGlvbmFsKQogICAgIHsKICAgICAgICAgZmluYWwgQ21kRW52IGNtZEVudiA9IG5ldyBDbWRFbnYoKTsKQEAgLTQ2MSw3ICs0NjEsNyBAQAogICAgICAgICByZXR1cm4gbmV3IERlbGV0ZUNsdXN0ZXJlZEluc3RhbmNlQ21kKGNtZEVudik7CiAgICAgfQogCi0gICAgcHVibGljIFZpcnR1YWxTZXJ2ZXJDbWQgY3JlYXRlVmlydHVhbFNlcnZlckNtZChTdHJpbmcgbmFtZSwgCisgICAgcHVibGljIFZpcnR1YWxTZXJ2ZXJDbWQgY3JlYXRlVmlydHVhbFNlcnZlckNtZChTdHJpbmcgbmFtZSwKICAgICAgICAgICAgIFN0cmluZyBjb25maWdOYW1lLCBTdHJpbmcgaG9zdHMsIE1hcCBvcHRpb25hbCwgU3RyaW5nIG1vZGUpCiAgICAgewogICAgICAgICBmaW5hbCBDbWRFbnYgY21kRW52ID0gbmV3IENtZEVudigpOwpAQCAtNDg0LDcgKzQ4NCw3IEBACiAgICAgICAgIGNtZEVudi5wdXQoQ3JlYXRlQXBwUmVmQ21kLmtWaXJ0dWFsU2VydmVycywgdmlydHVhbFNlcnZlcnMpOwogICAgICAgICBjbWRFbnYucHV0KENyZWF0ZUFwcFJlZkNtZC5rRW5hYmxlZCwgbmV3IEJvb2xlYW4oZW5hYmxlZCkpOwogICAgICAgICBjbWRFbnYucHV0KENyZWF0ZUFwcFJlZkNtZC5rTEJFbmFibGVkLCBuZXcgQm9vbGVhbihsYkVuYWJsZWQpKTsKLSAgICAgICAgY21kRW52LnB1dChDcmVhdGVBcHBSZWZDbWQua0Rpc2FibGVUaW1lb3V0SW5NaW51dGVzLCAKKyAgICAgICAgY21kRW52LnB1dChDcmVhdGVBcHBSZWZDbWQua0Rpc2FibGVUaW1lb3V0SW5NaW51dGVzLAogICAgICAgICAgICAgbmV3IEludGVnZXIoZGlzYWJsZVRpbWVvdXRJbk1pbnV0ZXMpKTsKICAgICAgICAgY21kRW52LnB1dChDcmVhdGVBcHBSZWZDbWQua1RhcmdldCwgdGFyZ2V0KTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9Db25uZWN0Q21kLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0Nvbm5lY3RDbWQuamF2YQppbmRleCA3MzZkNDRkLi43MDYzM2YyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0Nvbm5lY3RDbWQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0Nvbm5lY3RDbWQuamF2YQpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICBmaW5hbCBTdHJpbmcgICAgcGFzc3dvcmQgICAgPSAoU3RyaW5nKWdldENtZEVudigpLmdldChrUGFzc3dvcmQpOwogCiAgICAgICAgIGZpbmFsIEFwcHNlcnZlckNvbm5lY3Rpb25Tb3VyY2UgY3MgPSBuZXcgQXBwc2VydmVyQ29ubmVjdGlvblNvdXJjZSgKLSAgICAgICAgICAgIEFwcHNlcnZlckNvbm5lY3Rpb25Tb3VyY2UuUFJPVE9DT0xfUk1JLCBob3N0LCBwb3J0LmludFZhbHVlKCksIAorICAgICAgICAgICAgQXBwc2VydmVyQ29ubmVjdGlvblNvdXJjZS5QUk9UT0NPTF9STUksIGhvc3QsIHBvcnQuaW50VmFsdWUoKSwKICAgICAgICAgICAgIHVzZXIsIHBhc3N3b3JkLCBnZXRUTFNQYXJhbXMoKSwgbnVsbCk7CiAKICAgICAgICAgZ2V0Q21kRW52KCkucHV0KGtDb25uZWN0aW9uU291cmNlLCBjcyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0Nvbm5lY3RvckNvbm5lY3Rpb25Qb29sVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9Db25uZWN0b3JDb25uZWN0aW9uUG9vbFRlc3QuamF2YQppbmRleCBkMDNmMTMxLi4wNDUwNDE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0Nvbm5lY3RvckNvbm5lY3Rpb25Qb29sVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvQ29ubmVjdG9yQ29ubmVjdGlvblBvb2xUZXN0LmphdmEKQEAgLTM0LDkgKzM0LDkgQEAKICAgICBzdGF0aWMgZmluYWwgU3RyaW5nIGtUcmFuc2FjdGlvblN1cHBvcnQgICAgID0gIkxvY2FsVHJhbnNhY3Rpb24iOwogICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcga0Nvbm5lY3Rpb25EZWZpbml0aW9uTmFtZSAgID0gImphdmF4LnNxbC5EYXRhU291cmNlIjsKIAotICAgIHB1YmxpYyBDb25uZWN0b3JDb25uZWN0aW9uUG9vbFRlc3QoZmluYWwgU3RyaW5nIHVzZXIsIAotICAgICAgICBmaW5hbCBTdHJpbmcgcGFzc3dvcmQsIGZpbmFsIFN0cmluZyBob3N0LCBmaW5hbCBpbnQgcG9ydCwgCi0gICAgICAgIGZpbmFsIFN0cmluZyBuYW1lLCBmaW5hbCBTdHJpbmcgcmVzb3VyY2VBZGFwdGVyTmFtZSwgCisgICAgcHVibGljIENvbm5lY3RvckNvbm5lY3Rpb25Qb29sVGVzdChmaW5hbCBTdHJpbmcgdXNlciwKKyAgICAgICAgZmluYWwgU3RyaW5nIHBhc3N3b3JkLCBmaW5hbCBTdHJpbmcgaG9zdCwgZmluYWwgaW50IHBvcnQsCisgICAgICAgIGZpbmFsIFN0cmluZyBuYW1lLCBmaW5hbCBTdHJpbmcgcmVzb3VyY2VBZGFwdGVyTmFtZSwKICAgICAgICAgZmluYWwgU3RyaW5nIGNvbm5lY3Rpb25EZWZpbml0aW9uTmFtZSkKICAgICB7CiAgICAgICAgIGZpbmFsIENtZEZhY3RvcnkgY21kRmFjdG9yeSA9IGdldENtZEZhY3RvcnkoKTsKQEAgLTQ0LDEyICs0NCwxMiBAQAogICAgICAgICBmaW5hbCBDb25uZWN0Q21kIGNvbm5lY3RDbWQgPSBjbWRGYWN0b3J5LmNyZWF0ZUNvbm5lY3RDbWQoCiAgICAgICAgICAgICAgICAgdXNlciwgcGFzc3dvcmQsIGhvc3QsIHBvcnQpOwogCi0gICAgICAgIGZpbmFsIENyZWF0ZUNvbm5lY3RvckNvbm5lY3Rpb25Qb29sQ21kIGNyZWF0ZUNtZCA9IAorICAgICAgICBmaW5hbCBDcmVhdGVDb25uZWN0b3JDb25uZWN0aW9uUG9vbENtZCBjcmVhdGVDbWQgPQogICAgICAgICAgICAgICAgIGNtZEZhY3RvcnkuY3JlYXRlQ3JlYXRlQ29ubmVjdG9yQ29ubmVjdGlvblBvb2xDbWQobmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlQWRhcHRlck5hbWUsIGNvbm5lY3Rpb25EZWZpbml0aW9uTmFtZSwgCisgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUFkYXB0ZXJOYW1lLCBjb25uZWN0aW9uRGVmaW5pdGlvbk5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25hbCgpKTsKIAotICAgICAgICBmaW5hbCBEZWxldGVDb25uZWN0b3JDb25uZWN0aW9uUG9vbENtZCBkZWxldGVDbWQgPSAKKyAgICAgICAgZmluYWwgRGVsZXRlQ29ubmVjdG9yQ29ubmVjdGlvblBvb2xDbWQgZGVsZXRlQ21kID0KICAgICAgICAgICAgICAgICBjbWRGYWN0b3J5LmNyZWF0ZURlbGV0ZUNvbm5lY3RvckNvbm5lY3Rpb25Qb29sQ21kKG5hbWUpOwogCiAgICAgICAgIGZpbmFsIFBpcGVDbWQgcDEgPSBuZXcgUGlwZUNtZChjb25uZWN0Q21kLCBjcmVhdGVDbWQpOwpAQCAtNzIsNyArNzIsNyBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24KICAgICB7CiAgICAgICAgIG5ldyBDb25uZWN0b3JDb25uZWN0aW9uUG9vbFRlc3QoCi0gICAgICAgICAgICAgICAgImFkbWluIiwgInBhc3N3b3JkIiwgImxvY2FsaG9zdCIsIDg2ODYsIAorICAgICAgICAgICAgICAgICJhZG1pbiIsICJwYXNzd29yZCIsICJsb2NhbGhvc3QiLCA4Njg2LAogICAgICAgICAgICAgICAgIGtOYW1lLCBrUmVzb3VyY2VBZGFwdGVyTmFtZSwga0Nvbm5lY3Rpb25EZWZpbml0aW9uTmFtZSkuCiAgICAgICAgICAgICAgICAgICAgIHJ1bigpOwogICAgIH0KQEAgLTgwLDcgKzgwLDcgQEAKICAgICBwcml2YXRlIE1hcCBnZXRPcHRpb25hbCgpCiAgICAgewogICAgICAgICBmaW5hbCBNYXAgb3B0aW9uYWwgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICBvcHRpb25hbC5wdXQoQ29ubmVjdG9yQ29ubmVjdGlvblBvb2xDb25maWdLZXlzLlRSQU5TQUNUSU9OX1NVUFBPUlRfS0VZLCAKKyAgICAgICAgb3B0aW9uYWwucHV0KENvbm5lY3RvckNvbm5lY3Rpb25Qb29sQ29uZmlnS2V5cy5UUkFOU0FDVElPTl9TVVBQT1JUX0tFWSwKICAgICAgICAgICAgICAgICBrVHJhbnNhY3Rpb25TdXBwb3J0KTsKICAgICAgICAgcmV0dXJuIG9wdGlvbmFsOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvQ29ubmVjdG9yUmVzb3VyY2VUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0Nvbm5lY3RvclJlc291cmNlVGVzdC5qYXZhCmluZGV4IGUzN2UxZTMuLmIyMzQ4MDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvQ29ubmVjdG9yUmVzb3VyY2VUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9Db25uZWN0b3JSZXNvdXJjZVRlc3QuamF2YQpAQCAtMzEsOCArMzEsOCBAQAogICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcga1Bvb2xOYW1lICAgICAgID0gIm15cG9vbCI7CiAgICAgc3RhdGljIGZpbmFsIFN0cmluZyBrT2JqZWN0VHlwZSAgICAgPSAidXNlciI7CiAKLSAgICBwdWJsaWMgQ29ubmVjdG9yUmVzb3VyY2VUZXN0KGZpbmFsIFN0cmluZyB1c2VyLCAKLSAgICAgICAgZmluYWwgU3RyaW5nIHBhc3N3b3JkLCBmaW5hbCBTdHJpbmcgaG9zdCwgZmluYWwgaW50IHBvcnQsIAorICAgIHB1YmxpYyBDb25uZWN0b3JSZXNvdXJjZVRlc3QoZmluYWwgU3RyaW5nIHVzZXIsCisgICAgICAgIGZpbmFsIFN0cmluZyBwYXNzd29yZCwgZmluYWwgU3RyaW5nIGhvc3QsIGZpbmFsIGludCBwb3J0LAogICAgICAgICBmaW5hbCBTdHJpbmcgam5kaU5hbWUsIGZpbmFsIFN0cmluZyBwb29sTmFtZSkKICAgICB7CiAgICAgICAgIGZpbmFsIENtZEZhY3RvcnkgY21kRmFjdG9yeSA9IGdldENtZEZhY3RvcnkoKTsKQEAgLTQwLDExICs0MCwxMSBAQAogICAgICAgICBmaW5hbCBDb25uZWN0Q21kIGNvbm5lY3RDbWQgPSBjbWRGYWN0b3J5LmNyZWF0ZUNvbm5lY3RDbWQoCiAgICAgICAgICAgICAgICAgdXNlciwgcGFzc3dvcmQsIGhvc3QsIHBvcnQpOwogCi0gICAgICAgIGZpbmFsIENyZWF0ZUNvbm5lY3RvclJlc291cmNlQ21kIGNyZWF0ZUNtZCA9IAotICAgICAgICAgICAgICAgIGNtZEZhY3RvcnkuY3JlYXRlQ3JlYXRlQ29ubmVjdG9yUmVzb3VyY2VDbWQoam5kaU5hbWUsIAorICAgICAgICBmaW5hbCBDcmVhdGVDb25uZWN0b3JSZXNvdXJjZUNtZCBjcmVhdGVDbWQgPQorICAgICAgICAgICAgICAgIGNtZEZhY3RvcnkuY3JlYXRlQ3JlYXRlQ29ubmVjdG9yUmVzb3VyY2VDbWQoam5kaU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBwb29sTmFtZSwgZ2V0T3B0aW9uYWwoKSk7CiAKLSAgICAgICAgZmluYWwgRGVsZXRlQ29ubmVjdG9yUmVzb3VyY2VDbWQgZGVsZXRlQ21kID0gCisgICAgICAgIGZpbmFsIERlbGV0ZUNvbm5lY3RvclJlc291cmNlQ21kIGRlbGV0ZUNtZCA9CiAgICAgICAgICAgICAgICAgY21kRmFjdG9yeS5jcmVhdGVEZWxldGVDb25uZWN0b3JSZXNvdXJjZUNtZChqbmRpTmFtZSk7CiAKICAgICAgICAgZmluYWwgUGlwZUNtZCBwMSA9IG5ldyBQaXBlQ21kKGNvbm5lY3RDbWQsIGNyZWF0ZUNtZCk7CkBAIC02NiwxNCArNjYsMTQgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0gICAgICAgIG5ldyBDb25uZWN0b3JSZXNvdXJjZVRlc3QoImFkbWluIiwgInBhc3N3b3JkIiwgImxvY2FsaG9zdCIsIDg2ODYsIAotICAgICAgICAgICAgICAgIGtKTkRJTmFtZSwga1Bvb2xOYW1lKS5ydW4oKTsgCisgICAgICAgIG5ldyBDb25uZWN0b3JSZXNvdXJjZVRlc3QoImFkbWluIiwgInBhc3N3b3JkIiwgImxvY2FsaG9zdCIsIDg2ODYsCisgICAgICAgICAgICAgICAga0pORElOYW1lLCBrUG9vbE5hbWUpLnJ1bigpOwogICAgIH0KIAogICAgIHByaXZhdGUgTWFwIGdldE9wdGlvbmFsKCkKICAgICB7CiAgICAgICAgIGZpbmFsIE1hcCBvcHRpb25hbCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgIC8vb3B0aW9uYWwucHV0KENyZWF0ZVJlc291cmNlS2V5cy5SRVNPVVJDRV9PQkpFQ1RfVFlQRV9LRVksIAorICAgICAgICAvL29wdGlvbmFsLnB1dChDcmVhdGVSZXNvdXJjZUtleXMuUkVTT1VSQ0VfT0JKRUNUX1RZUEVfS0VZLAogICAgICAgICAgICAgICAgIC8va09iamVjdFR5cGUpOwogICAgICAgICByZXR1cm4gb3B0aW9uYWw7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9Db25zb2xlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0NvbnNvbGUuamF2YQppbmRleCA3ZWY3MzNkLi44OTdmMjI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0NvbnNvbGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0NvbnNvbGUuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20uc3VuLmVudGVycHJpc2UuYWRtaW4ubWJlYW5hcGkuZGVwbG95bWVudDsKIAogLyoqCi0gICBBbiBlYXN5IGludGVyZmFjZSB0byByZWFkIG51bWJlcnMgYW5kIHN0cmluZ3MgZnJvbSAKKyAgIEFuIGVhc3kgaW50ZXJmYWNlIHRvIHJlYWQgbnVtYmVycyBhbmQgc3RyaW5ncyBmcm9tCiAgICBzdGFuZGFyZCBpbnB1dAogCiAgICBAdmVyc2lvbiAxLjEwIDEwIE1hciAxOTk3CkBAIC0yNSwxMjggKzI1LDEyOCBAQAogKi8KIAogcHVibGljIGNsYXNzIENvbnNvbGUKLXsgIAotCS8qKiBwcmludCBhIHByb21wdCBvbiB0aGUgY29uc29sZSBidXQgZG9uJ3QgcHJpbnQgYSBuZXdsaW5lCit7CisgICAgLyoqIHByaW50IGEgcHJvbXB0IG9uIHRoZSBjb25zb2xlIGJ1dCBkb24ndCBwcmludCBhIG5ld2xpbmUKICAgICAgIEBwYXJhbSBwcm9tcHQgdGhlIHByb21wdCBzdHJpbmcgdG8gZGlzcGxheQogICAgICovCiAKLQlwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRQcm9tcHQoU3RyaW5nIHByb21wdCkKLQl7ICAKLQkJU3lzdGVtLm91dC5wcmludChwcm9tcHQgKyAiICIpOwotCQlTeXN0ZW0ub3V0LmZsdXNoKCk7Ci0JfQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludFByb21wdChTdHJpbmcgcHJvbXB0KQorICAgIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludChwcm9tcHQgKyAiICIpOworICAgICAgICBTeXN0ZW0ub3V0LmZsdXNoKCk7CisgICAgfQogCi0JLyoqIHJlYWQgYSBzdHJpbmcgZnJvbSB0aGUgY29uc29sZS4gVGhlIHN0cmluZyBpcyAKLQkJdGVybWluYXRlZCBieSBhIG5ld2xpbmUKLQkJQHJldHVybiB0aGUgaW5wdXQgc3RyaW5nICh3aXRob3V0IHRoZSBuZXdsaW5lKQotCSovCisgICAgLyoqIHJlYWQgYSBzdHJpbmcgZnJvbSB0aGUgY29uc29sZS4gVGhlIHN0cmluZyBpcworICAgICAgICB0ZXJtaW5hdGVkIGJ5IGEgbmV3bGluZQorICAgICAgICBAcmV0dXJuIHRoZSBpbnB1dCBzdHJpbmcgKHdpdGhvdXQgdGhlIG5ld2xpbmUpCisgICAgKi8KIAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHJlYWRMaW5lKCkKLQl7ICAKLQkJaW50IGNoOwotCQlTdHJpbmcgciA9ICIiOwotCQlib29sZWFuIGRvbmUgPSBmYWxzZTsKLQkJCi0JCXdoaWxlICghZG9uZSkKLQkJeyAgCi0JCQl0cnkKLQkJCXsgIAotCQkJCWNoID0gU3lzdGVtLmluLnJlYWQoKTsKLQkJCQlpZiAoY2ggPCAwIHx8IChjaGFyKWNoID09ICdcbicpCi0JCQkJCWRvbmUgPSB0cnVlOwotCQkJCQotCQkJCWVsc2UgaWYgKChjaGFyKWNoICE9ICdccicpIC8vIHdlaXJkLS1pdCB1c2VkIHRvIGRvIFxyXG4gdHJhbnNsYXRpb24KLQkJCQkJciA9IHIgKyAoY2hhcikgY2g7Ci0JCQl9Ci0JCQljYXRjaChqYXZhLmlvLklPRXhjZXB0aW9uIGUpCi0JCQl7ICAKLQkJCQlkb25lID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIHI7Ci0JfQorICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHJlYWRMaW5lKCkKKyAgICB7CisgICAgICAgIGludCBjaDsKKyAgICAgICAgU3RyaW5nIHIgPSAiIjsKKyAgICAgICAgYm9vbGVhbiBkb25lID0gZmFsc2U7CiAKLQkvKioJcmVhZCBhIHN0cmluZyBmcm9tIHRoZSBjb25zb2xlLiBUaGUgc3RyaW5nIGlzIAotCQl0ZXJtaW5hdGVkIGJ5IGEgbmV3bGluZQotCQlAcGFyYW0gcHJvbXB0IHRoZSBwcm9tcHQgc3RyaW5nIHRvIGRpc3BsYXkKLQkJQHJldHVybiB0aGUgaW5wdXQgc3RyaW5nICh3aXRob3V0IHRoZSBuZXdsaW5lKQotCSovCisgICAgICAgIHdoaWxlICghZG9uZSkKKyAgICAgICAgeworICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2ggPSBTeXN0ZW0uaW4ucmVhZCgpOworICAgICAgICAgICAgICAgIGlmIChjaCA8IDAgfHwgKGNoYXIpY2ggPT0gJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7CiAKLQlwdWJsaWMgc3RhdGljIGNoYXIgZ2V0S2V5KFN0cmluZyBwcm9tcHQpCi0JeyAgCi0JCXByaW50UHJvbXB0KHByb21wdCk7Ci0JCWludCBjaCA9ICdcbic7Ci0JCQotCQl0cnkKLQkJeyAgCi0JCQljaCA9IFN5c3RlbS5pbi5yZWFkKCk7Ci0JCX0KLQkJY2F0Y2goamF2YS5pby5JT0V4Y2VwdGlvbiBlKQotCQl7ICAKLQkJfQotCQlyZXR1cm4gKGNoYXIpY2g7Ci0JCQotCX0JCi0JCi0JLyoqCXJlYWQgYSBzdHJpbmcgZnJvbSB0aGUgY29uc29sZS4gVGhlIHN0cmluZyBpcyAKLQkJdGVybWluYXRlZCBieSBhIG5ld2xpbmUKLQkJQHBhcmFtIHByb21wdCB0aGUgcHJvbXB0IHN0cmluZyB0byBkaXNwbGF5Ci0JCUByZXR1cm4gdGhlIGlucHV0IHN0cmluZyAod2l0aG91dCB0aGUgbmV3bGluZSkKLQkqLworICAgICAgICAgICAgICAgIGVsc2UgaWYgKChjaGFyKWNoICE9ICdccicpIC8vIHdlaXJkLS1pdCB1c2VkIHRvIGRvIFxyXG4gdHJhbnNsYXRpb24KKyAgICAgICAgICAgICAgICAgICAgciA9IHIgKyAoY2hhcikgY2g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaChqYXZhLmlvLklPRXhjZXB0aW9uIGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHJlYWRMaW5lKFN0cmluZyBwcm9tcHQpCi0JeyAgCi0JCXByaW50UHJvbXB0KHByb21wdCk7Ci0JCXJldHVybiByZWFkTGluZSgpOwotCX0KKyAgICAgICAgcmV0dXJuIHI7CisgICAgfQogCi0JLyoqCXJlYWQgYW4gaW50ZWdlciBmcm9tIHRoZSBjb25zb2xlLiBUaGUgaW5wdXQgaXMgCi0JdGVybWluYXRlZCBieSBhIG5ld2xpbmUKLQlAcGFyYW0gcHJvbXB0IHRoZSBwcm9tcHQgc3RyaW5nIHRvIGRpc3BsYXkKLQlAcmV0dXJuIHRoZSBpbnB1dCB2YWx1ZSBhcyBhbiBpbnQKLQlAZXhjZXB0aW9uIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBpZiBiYWQgaW5wdXQKLQkqLworICAgIC8qKiAgICByZWFkIGEgc3RyaW5nIGZyb20gdGhlIGNvbnNvbGUuIFRoZSBzdHJpbmcgaXMKKyAgICAgICAgdGVybWluYXRlZCBieSBhIG5ld2xpbmUKKyAgICAgICAgQHBhcmFtIHByb21wdCB0aGUgcHJvbXB0IHN0cmluZyB0byBkaXNwbGF5CisgICAgICAgIEByZXR1cm4gdGhlIGlucHV0IHN0cmluZyAod2l0aG91dCB0aGUgbmV3bGluZSkKKyAgICAqLwogCi0JcHVibGljIHN0YXRpYyBpbnQgcmVhZEludChTdHJpbmcgcHJvbXB0KQotCXsgIAotCQl3aGlsZSh0cnVlKQotCQl7ICAKLQkJCXByaW50UHJvbXB0KHByb21wdCk7Ci0JCQkKLQkJCXRyeQotCQkJeyAgCi0JCQkJcmV0dXJuIEludGVnZXIudmFsdWVPZgotCQkJCShyZWFkTGluZSgpLnRyaW0oKSkuaW50VmFsdWUoKTsKLQkJCX0gCi0JCQljYXRjaChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLQkJCXsgIAotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiTm90IGFuIGludGVnZXIuIFBsZWFzZSB0cnkgYWdhaW4hIik7Ci0JCQl9Ci0JCX0KLQl9CisgICAgcHVibGljIHN0YXRpYyBjaGFyIGdldEtleShTdHJpbmcgcHJvbXB0KQorICAgIHsKKyAgICAgICAgcHJpbnRQcm9tcHQocHJvbXB0KTsKKyAgICAgICAgaW50IGNoID0gJ1xuJzsKIAotCS8qKiByZWFkIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGZyb20gdGhlIGNvbnNvbGUuIAotCVRoZSBpbnB1dCBpcyB0ZXJtaW5hdGVkIGJ5IGEgbmV3bGluZQotCUBwYXJhbSBwcm9tcHQgdGhlIHByb21wdCBzdHJpbmcgdG8gZGlzcGxheQotCUByZXR1cm4gdGhlIGlucHV0IHZhbHVlIGFzIGEgZG91YmxlCi0JQGV4Y2VwdGlvbiBOdW1iZXJGb3JtYXRFeGNlcHRpb24gaWYgYmFkIGlucHV0Ci0JKi8KKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIGNoID0gU3lzdGVtLmluLnJlYWQoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChqYXZhLmlvLklPRXhjZXB0aW9uIGUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKGNoYXIpY2g7CiAKLQlwdWJsaWMgc3RhdGljIGRvdWJsZSByZWFkRG91YmxlKFN0cmluZyBwcm9tcHQpCi0JeyAgCi0JCXdoaWxlKHRydWUpCi0JCXsgIAotCQkJcHJpbnRQcm9tcHQocHJvbXB0KTsKLQkJCQotCQkJdHJ5Ci0JCQl7ICAKLQkJCQlyZXR1cm4gRG91YmxlLnBhcnNlRG91YmxlKHJlYWRMaW5lKCkudHJpbSgpKTsKLQkJCX0gCi0JCQljYXRjaChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLQkJCXsgIAotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiTm90IGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLiBQbGVhc2UgdHJ5IGFnYWluISIpOwotCQkJfQotCQl9Ci0JfQorICAgIH0KKworICAgIC8qKiAgICByZWFkIGEgc3RyaW5nIGZyb20gdGhlIGNvbnNvbGUuIFRoZSBzdHJpbmcgaXMKKyAgICAgICAgdGVybWluYXRlZCBieSBhIG5ld2xpbmUKKyAgICAgICAgQHBhcmFtIHByb21wdCB0aGUgcHJvbXB0IHN0cmluZyB0byBkaXNwbGF5CisgICAgICAgIEByZXR1cm4gdGhlIGlucHV0IHN0cmluZyAod2l0aG91dCB0aGUgbmV3bGluZSkKKyAgICAqLworCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgcmVhZExpbmUoU3RyaW5nIHByb21wdCkKKyAgICB7CisgICAgICAgIHByaW50UHJvbXB0KHByb21wdCk7CisgICAgICAgIHJldHVybiByZWFkTGluZSgpOworICAgIH0KKworICAgIC8qKiAgICByZWFkIGFuIGludGVnZXIgZnJvbSB0aGUgY29uc29sZS4gVGhlIGlucHV0IGlzCisgICAgdGVybWluYXRlZCBieSBhIG5ld2xpbmUKKyAgICBAcGFyYW0gcHJvbXB0IHRoZSBwcm9tcHQgc3RyaW5nIHRvIGRpc3BsYXkKKyAgICBAcmV0dXJuIHRoZSBpbnB1dCB2YWx1ZSBhcyBhbiBpbnQKKyAgICBAZXhjZXB0aW9uIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBpZiBiYWQgaW5wdXQKKyAgICAqLworCisgICAgcHVibGljIHN0YXRpYyBpbnQgcmVhZEludChTdHJpbmcgcHJvbXB0KQorICAgIHsKKyAgICAgICAgd2hpbGUodHJ1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRQcm9tcHQocHJvbXB0KTsKKworICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEludGVnZXIudmFsdWVPZgorICAgICAgICAgICAgICAgIChyZWFkTGluZSgpLnRyaW0oKSkuaW50VmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm90IGFuIGludGVnZXIuIFBsZWFzZSB0cnkgYWdhaW4hIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiogcmVhZCBhIGZsb2F0aW5nIHBvaW50IG51bWJlciBmcm9tIHRoZSBjb25zb2xlLgorICAgIFRoZSBpbnB1dCBpcyB0ZXJtaW5hdGVkIGJ5IGEgbmV3bGluZQorICAgIEBwYXJhbSBwcm9tcHQgdGhlIHByb21wdCBzdHJpbmcgdG8gZGlzcGxheQorICAgIEByZXR1cm4gdGhlIGlucHV0IHZhbHVlIGFzIGEgZG91YmxlCisgICAgQGV4Y2VwdGlvbiBOdW1iZXJGb3JtYXRFeGNlcHRpb24gaWYgYmFkIGlucHV0CisgICAgKi8KKworICAgIHB1YmxpYyBzdGF0aWMgZG91YmxlIHJlYWREb3VibGUoU3RyaW5nIHByb21wdCkKKyAgICB7CisgICAgICAgIHdoaWxlKHRydWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50UHJvbXB0KHByb21wdCk7CisKKyAgICAgICAgICAgIHRyeQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBEb3VibGUucGFyc2VEb3VibGUocmVhZExpbmUoKS50cmltKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOb3QgYSBmbG9hdGluZyBwb2ludCBudW1iZXIuIFBsZWFzZSB0cnkgYWdhaW4hIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0NyZWF0ZUFwcFJlZkNtZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9DcmVhdGVBcHBSZWZDbWQuamF2YQppbmRleCA3NzExOGE0Li4zNjg4NDk3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0NyZWF0ZUFwcFJlZkNtZC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvQ3JlYXRlQXBwUmVmQ21kLmphdmEKQEAgLTM4LDggKzM4LDggQEAKICAgICAgICAgYXNzZXJ0IGlzQ29ubmVjdGVkKCk7CiAKICAgICAgICAgcmV0dXJuIGdldERlcGxveWVkSXRlbVJlZkNvbmZpZ0NSKCkuCi0gICAgICAgICAgICBjcmVhdGVEZXBsb3llZEl0ZW1SZWZDb25maWcoZ2V0RW5hYmxlZCgpLCBnZXROYW1lKCksIAotICAgICAgICAgICAgICAgIGdldFZpcnR1YWxTZXJ2ZXJzKCksIGdldExCRW5hYmxlZCgpLCAKKyAgICAgICAgICAgIGNyZWF0ZURlcGxveWVkSXRlbVJlZkNvbmZpZyhnZXRFbmFibGVkKCksIGdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICBnZXRWaXJ0dWFsU2VydmVycygpLCBnZXRMQkVuYWJsZWQoKSwKICAgICAgICAgICAgICAgICBnZXREaXNhYmxlVGltZW91dEluTWludXRlcygpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvQ3JlYXRlQXBwUmVmVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9DcmVhdGVBcHBSZWZUZXN0LmphdmEKaW5kZXggNjQwYzYyMC4uOWZiZTk5OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9DcmVhdGVBcHBSZWZUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9DcmVhdGVBcHBSZWZUZXN0LmphdmEKQEAgLTI4LDkgKzI4LDkgQEAKIHsKICAgICBwcml2YXRlIGZpbmFsIENtZCB0YXJnZXQ7CiAKLSAgICBwdWJsaWMgQ3JlYXRlQXBwUmVmVGVzdChmaW5hbCBTdHJpbmcgdXNlciwgCi0gICAgICAgIGZpbmFsIFN0cmluZyBwYXNzd29yZCwgZmluYWwgU3RyaW5nIGhvc3QsIGZpbmFsIGludCBwb3J0LCAKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlZk5hbWUsIGZpbmFsIGJvb2xlYW4gZW5hYmxlZCwgCisgICAgcHVibGljIENyZWF0ZUFwcFJlZlRlc3QoZmluYWwgU3RyaW5nIHVzZXIsCisgICAgICAgIGZpbmFsIFN0cmluZyBwYXNzd29yZCwgZmluYWwgU3RyaW5nIGhvc3QsIGZpbmFsIGludCBwb3J0LAorICAgICAgICBmaW5hbCBTdHJpbmcgcmVmTmFtZSwgZmluYWwgYm9vbGVhbiBlbmFibGVkLAogICAgICAgICBmaW5hbCBTdHJpbmcgdmlydHVhbFNlcnZlcnMsZmluYWwgYm9vbGVhbiBsYkVuYWJsZWQsCiAgICAgICAgIGZpbmFsIGludCBkaXNhYmxlVGltZW91dEluTWludXRlcywgZmluYWwgU3RyaW5nIGFwcHNlcnZUYXJnZXQpCiAgICAgewpAQCAtMzksOSArMzksOSBAQAogICAgICAgICBmaW5hbCBDb25uZWN0Q21kIGNvbm5lY3RDbWQgPSBjbWRGYWN0b3J5LmNyZWF0ZUNvbm5lY3RDbWQoCiAgICAgICAgICAgICAgICAgdXNlciwgcGFzc3dvcmQsIGhvc3QsIHBvcnQpOwogCi0gICAgICAgIGZpbmFsIENyZWF0ZUFwcFJlZkNtZCBjcmVhdGVDbWQgPSAKLSAgICAgICAgICAgICAgICBjbWRGYWN0b3J5LmNyZWF0ZUNyZWF0ZUFwcFJlZkNtZChyZWZOYW1lLCBlbmFibGVkLCAKLSAgICAgICAgICAgICAgICAgICAgdmlydHVhbFNlcnZlcnMsIGxiRW5hYmxlZCwgZGlzYWJsZVRpbWVvdXRJbk1pbnV0ZXMsIAorICAgICAgICBmaW5hbCBDcmVhdGVBcHBSZWZDbWQgY3JlYXRlQ21kID0KKyAgICAgICAgICAgICAgICBjbWRGYWN0b3J5LmNyZWF0ZUNyZWF0ZUFwcFJlZkNtZChyZWZOYW1lLCBlbmFibGVkLAorICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsU2VydmVycywgbGJFbmFibGVkLCBkaXNhYmxlVGltZW91dEluTWludXRlcywKICAgICAgICAgICAgICAgICAgICAgYXBwc2VydlRhcmdldCk7CiAKICAgICAgICAgZmluYWwgUGlwZUNtZCBwMSA9IG5ldyBQaXBlQ21kKGNvbm5lY3RDbWQsIGNyZWF0ZUNtZCk7CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgIGZpbmFsIFN0cmluZyB2aXJ0dWFsU2VydmVycyA9IGFyZ3MubGVuZ3RoID09IDMgPyBhcmdzWzJdIDogbnVsbDsKIAogICAgICAgICBuZXcgQ3JlYXRlQXBwUmVmVGVzdCgKLSAgICAgICAgICAgICAgICAiYWRtaW4iLCAicGFzc3dvcmQiLCAibG9jYWxob3N0IiwgODY4NiwgCisgICAgICAgICAgICAgICAgImFkbWluIiwgInBhc3N3b3JkIiwgImxvY2FsaG9zdCIsIDg2ODYsCiAgICAgICAgICAgICAgICAgYXBwUmVmLCBmYWxzZSwgdmlydHVhbFNlcnZlcnMsIGZhbHNlLCAxNjAsIHRhcmdldCkucnVuKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0NyZWF0ZUNsdXN0ZXJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0NyZWF0ZUNsdXN0ZXJUZXN0LmphdmEKaW5kZXggMGNhMjU4ZC4uZTk5NjRkMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9DcmVhdGVDbHVzdGVyVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvQ3JlYXRlQ2x1c3RlclRlc3QuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogICAgICAgICBmaW5hbCBDb25uZWN0Q21kIGNvbm5lY3RDbWQgPSBjbWRGYWN0b3J5LmNyZWF0ZUNvbm5lY3RDbWQoCiAgICAgICAgICAgICAgICAgdXNlciwgcGFzc3dvcmQsIGhvc3QsIHBvcnQpOwogCi0gICAgICAgIGZpbmFsIENyZWF0ZUNsdXN0ZXJDbWQgY3JlYXRlQ2x1c3RlckNtZCA9IAorICAgICAgICBmaW5hbCBDcmVhdGVDbHVzdGVyQ21kIGNyZWF0ZUNsdXN0ZXJDbWQgPQogICAgICAgICAgICAgICAgIGNtZEZhY3RvcnkuY3JlYXRlQ3JlYXRlQ2x1c3RlckNtZCgKICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlck5hbWUsIGNvbmZpZ05hbWUsIG9wdGlvbmFsKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9DcmVhdGVDbHVzdGVyZWRJbnN0YW5jZUNtZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9DcmVhdGVDbHVzdGVyZWRJbnN0YW5jZUNtZC5qYXZhCmluZGV4IDRhNDkwMTYuLjEwZWZjOWQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvQ3JlYXRlQ2x1c3RlcmVkSW5zdGFuY2VDbWQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0NyZWF0ZUNsdXN0ZXJlZEluc3RhbmNlQ21kLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKICAgICB7CiAgICAgICAgIGFzc2VydCBpc0Nvbm5lY3RlZCgpOwogCi0gICAgICAgIHJldHVybiAoQ2x1c3RlcmVkU2VydmVyQ29uZmlnKSBnZXREb21haW5Db25maWcoKS5jcmVhdGVDbHVzdGVyZWRTZXJ2ZXJDb25maWcoZ2V0SW5zdGFuY2VOYW1lKCksIAorICAgICAgICByZXR1cm4gKENsdXN0ZXJlZFNlcnZlckNvbmZpZykgZ2V0RG9tYWluQ29uZmlnKCkuY3JlYXRlQ2x1c3RlcmVkU2VydmVyQ29uZmlnKGdldEluc3RhbmNlTmFtZSgpLAogICAgICAgICAgICAgICAgIGdldENsdXN0ZXJOYW1lKCksIGdldE5vZGVBZ2VudE5hbWUoKSwgZ2V0T3B0aW9uYWwoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9DcmVhdGVDbHVzdGVyZWRJbnN0YW5jZVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvQ3JlYXRlQ2x1c3RlcmVkSW5zdGFuY2VUZXN0LmphdmEKaW5kZXggYTYxMmM4Yi4uYTk5NjViMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9DcmVhdGVDbHVzdGVyZWRJbnN0YW5jZVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0NyZWF0ZUNsdXN0ZXJlZEluc3RhbmNlVGVzdC5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiAKICAgICBwdWJsaWMgQ3JlYXRlQ2x1c3RlcmVkSW5zdGFuY2VUZXN0KGZpbmFsIFN0cmluZyB1c2VyLCBmaW5hbCBTdHJpbmcgcGFzc3dvcmQsCiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgaG9zdCwgZmluYWwgaW50IHBvcnQsIGZpbmFsIFN0cmluZyBpbnN0YW5jZU5hbWUsCi0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgY2x1c3Rlck5hbWUsIGZpbmFsIFN0cmluZyBub2RlQWdlbnROYW1lLCAKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBjbHVzdGVyTmFtZSwgZmluYWwgU3RyaW5nIG5vZGVBZ2VudE5hbWUsCiAgICAgICAgICAgICBmaW5hbCBNYXAgb3B0aW9uYWwpCiAgICAgewogICAgICAgICBmaW5hbCBDbWRGYWN0b3J5IGNtZEZhY3RvcnkgPSBnZXRDbWRGYWN0b3J5KCk7CkBAIC0zNCw3ICszNCw3IEBACiAgICAgICAgIGZpbmFsIENvbm5lY3RDbWQgY29ubmVjdENtZCA9IGNtZEZhY3RvcnkuY3JlYXRlQ29ubmVjdENtZCgKICAgICAgICAgICAgICAgICB1c2VyLCBwYXNzd29yZCwgaG9zdCwgcG9ydCk7CiAKLSAgICAgICAgZmluYWwgQ3JlYXRlQ2x1c3RlcmVkSW5zdGFuY2VDbWQgY3JlYXRlQ2x1c3RlcmVkSW5zdGFuY2VDbWQgPSAKKyAgICAgICAgZmluYWwgQ3JlYXRlQ2x1c3RlcmVkSW5zdGFuY2VDbWQgY3JlYXRlQ2x1c3RlcmVkSW5zdGFuY2VDbWQgPQogICAgICAgICAgICAgICAgIGNtZEZhY3RvcnkuY3JlYXRlQ3JlYXRlQ2x1c3RlcmVkSW5zdGFuY2VDbWQoCiAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlTmFtZSwgY2x1c3Rlck5hbWUsIG5vZGVBZ2VudE5hbWUsIG9wdGlvbmFsKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9DcmVhdGVJbnN0YW5jZUNtZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9DcmVhdGVJbnN0YW5jZUNtZC5qYXZhCmluZGV4IDNjMzY5MGEuLmEzMDJmYzEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvQ3JlYXRlSW5zdGFuY2VDbWQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0NyZWF0ZUluc3RhbmNlQ21kLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKICAgICB7CiAgICAgICAgIGFzc2VydCBpc0Nvbm5lY3RlZCgpOwogCi0gICAgICAgIHJldHVybiAoU3RhbmRhbG9uZVNlcnZlckNvbmZpZykgZ2V0RG9tYWluQ29uZmlnKCkuY3JlYXRlU3RhbmRhbG9uZVNlcnZlckNvbmZpZyhnZXRJbnN0YW5jZU5hbWUoKSwgCisgICAgICAgIHJldHVybiAoU3RhbmRhbG9uZVNlcnZlckNvbmZpZykgZ2V0RG9tYWluQ29uZmlnKCkuY3JlYXRlU3RhbmRhbG9uZVNlcnZlckNvbmZpZyhnZXRJbnN0YW5jZU5hbWUoKSwKICAgICAgICAgICAgICAgICBnZXROb2RlQWdlbnROYW1lKCksIGdldENvbmZpZ05hbWUoKSwgZ2V0T3B0aW9uYWwoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9DcmVhdGVJbnN0YW5jZVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvQ3JlYXRlSW5zdGFuY2VUZXN0LmphdmEKaW5kZXggNDEwYjhkNS4uZjBhNDEyZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9DcmVhdGVJbnN0YW5jZVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0NyZWF0ZUluc3RhbmNlVGVzdC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKICAgICBwdWJsaWMgQ3JlYXRlSW5zdGFuY2VUZXN0KGZpbmFsIFN0cmluZyB1c2VyLCBmaW5hbCBTdHJpbmcgcGFzc3dvcmQsCiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgaG9zdCwgZmluYWwgaW50IHBvcnQsIGZpbmFsIFN0cmluZyBpbnN0YW5jZU5hbWUsCi0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgbm9kZUFnZW50TmFtZSwgZmluYWwgU3RyaW5nIGNvbmZpZ05hbWUsIAorICAgICAgICAgICAgZmluYWwgU3RyaW5nIG5vZGVBZ2VudE5hbWUsIGZpbmFsIFN0cmluZyBjb25maWdOYW1lLAogICAgICAgICAgICAgZmluYWwgTWFwIG9wdGlvbmFsKQogICAgIHsKICAgICAgICAgZmluYWwgQ21kRmFjdG9yeSBjbWRGYWN0b3J5ID0gZ2V0Q21kRmFjdG9yeSgpOwpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICAgICAgICAgIHVzZXIsIHBhc3N3b3JkLCBob3N0LCBwb3J0KTsKIAogICAgICAgICBmaW5hbCBDcmVhdGVJbnN0YW5jZUNtZCBjcmVhdGVJbnN0YW5jZUNtZCA9IGNtZEZhY3RvcnkuCi0gICAgICAgICAgICAgICAgY3JlYXRlQ3JlYXRlSW5zdGFuY2VDbWQoaW5zdGFuY2VOYW1lLCBub2RlQWdlbnROYW1lLCAKKyAgICAgICAgICAgICAgICBjcmVhdGVDcmVhdGVJbnN0YW5jZUNtZChpbnN0YW5jZU5hbWUsIG5vZGVBZ2VudE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdOYW1lLCBvcHRpb25hbCk7CiAKICAgICAgICAgdGFyZ2V0ID0gbmV3IFBpcGVDbWQoY29ubmVjdENtZCwgY3JlYXRlSW5zdGFuY2VDbWQpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9DcmVhdGVKREJDQ29ubmVjdGlvblBvb2xDbWQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvQ3JlYXRlSkRCQ0Nvbm5lY3Rpb25Qb29sQ21kLmphdmEKaW5kZXggN2E5OGUwMC4uZGQ3ODgxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9DcmVhdGVKREJDQ29ubmVjdGlvblBvb2xDbWQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0NyZWF0ZUpEQkNDb25uZWN0aW9uUG9vbENtZC5qYXZhCkBAIC0zOCw4ICszOCw4IEBACiAgICAgICAgIGFzc2VydCBpc0Nvbm5lY3RlZCgpOwogCiAgICAgICAgIGZpbmFsIEpEQkNDb25uZWN0aW9uUG9vbENvbmZpZyByZXNvdXJjZSA9Ci0gICAgICAgIAlnZXREb21haW5Db25maWcoKS5jcmVhdGVKREJDQ29ubmVjdGlvblBvb2xDb25maWcoCi0gICAgICAgICAgICAJZ2V0TmFtZSgpLCBnZXREYXRhc291cmNlQ2xhc3NuYW1lKCksIGdldE9wdGlvbmFsKCkpOworICAgICAgICAgICAgZ2V0RG9tYWluQ29uZmlnKCkuY3JlYXRlSkRCQ0Nvbm5lY3Rpb25Qb29sQ29uZmlnKAorICAgICAgICAgICAgICAgIGdldE5hbWUoKSwgZ2V0RGF0YXNvdXJjZUNsYXNzbmFtZSgpLCBnZXRPcHRpb25hbCgpKTsKICAgICAgICAgcmV0dXJuIHJlc291cmNlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9DcmVhdGVQTUZSZXNvdXJjZUNtZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9DcmVhdGVQTUZSZXNvdXJjZUNtZC5qYXZhCmluZGV4IGE0YWZhN2QuLjZiY2JhYTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvQ3JlYXRlUE1GUmVzb3VyY2VDbWQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0NyZWF0ZVBNRlJlc291cmNlQ21kLmphdmEKQEAgLTM1LDggKzM1LDggQEAKICAgICAgICAgYXNzZXJ0IGlzQ29ubmVjdGVkKCk7CiAKICAgICAgICAgZmluYWwgUGVyc2lzdGVuY2VNYW5hZ2VyRmFjdG9yeVJlc291cmNlQ29uZmlnIHJlc291cmNlID0KLSAgICAgICAgCWdldERvbWFpbkNvbmZpZygpLmNyZWF0ZVBlcnNpc3RlbmNlTWFuYWdlckZhY3RvcnlSZXNvdXJjZUNvbmZpZygKLSAgICAgICAgICAgIAlnZXRKTkRJTmFtZSgpLCBnZXRPcHRpb25hbCgpKTsKKyAgICAgICAgICAgIGdldERvbWFpbkNvbmZpZygpLmNyZWF0ZVBlcnNpc3RlbmNlTWFuYWdlckZhY3RvcnlSZXNvdXJjZUNvbmZpZygKKyAgICAgICAgICAgICAgICBnZXRKTkRJTmFtZSgpLCBnZXRPcHRpb25hbCgpKTsKICAgICAgICAgcmV0dXJuIHJlc291cmNlOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvQ3JlYXRlVmlydHVhbFNlcnZlclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvQ3JlYXRlVmlydHVhbFNlcnZlclRlc3QuamF2YQppbmRleCA4MGU4YjM1Li5lY2U3MTI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0NyZWF0ZVZpcnR1YWxTZXJ2ZXJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9DcmVhdGVWaXJ0dWFsU2VydmVyVGVzdC5qYXZhCkBAIC0zOCw4ICszOCw4IEBACiAgICAgc3RhdGljIGZpbmFsIFN0cmluZyBrTG9nRmlsZSAgICA9ICIke2NvbS5zdW4uYWFzLmluc3RhbmNlUm9vdH0vbG9ncy9zZXJ2ZXIubG9nIjsKICAgICBzdGF0aWMgZmluYWwgU3RyaW5nIGtIVFRQTGlzdGVuZXJzICAgICAgPSAiaHR0cC1saXN0ZW5lci0xIjsKIAotICAgIHB1YmxpYyBDcmVhdGVWaXJ0dWFsU2VydmVyVGVzdChmaW5hbCBTdHJpbmcgdXNlciwgCi0gICAgICAgIGZpbmFsIFN0cmluZyBwYXNzd29yZCwgZmluYWwgU3RyaW5nIGhvc3QsIGZpbmFsIGludCBwb3J0LCAKKyAgICBwdWJsaWMgQ3JlYXRlVmlydHVhbFNlcnZlclRlc3QoZmluYWwgU3RyaW5nIHVzZXIsCisgICAgICAgIGZpbmFsIFN0cmluZyBwYXNzd29yZCwgZmluYWwgU3RyaW5nIGhvc3QsIGZpbmFsIGludCBwb3J0LAogICAgICAgICBmaW5hbCBTdHJpbmcgdnNOYW1lLCBmaW5hbCBTdHJpbmcgY29uZmlnTmFtZSwgZmluYWwgU3RyaW5nIGhvc3RzKQogICAgIHsKICAgICAgICAgZmluYWwgQ21kRmFjdG9yeSBjbWRGYWN0b3J5ID0gZ2V0Q21kRmFjdG9yeSgpOwpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICBmaW5hbCBDb25uZWN0Q21kIGNvbm5lY3RDbWQgPSBjbWRGYWN0b3J5LmNyZWF0ZUNvbm5lY3RDbWQoCiAgICAgICAgICAgICAgICAgdXNlciwgcGFzc3dvcmQsIGhvc3QsIHBvcnQpOwogCi0gICAgICAgIGZpbmFsIFZpcnR1YWxTZXJ2ZXJDbWQgY3JlYXRlQ21kID0gCisgICAgICAgIGZpbmFsIFZpcnR1YWxTZXJ2ZXJDbWQgY3JlYXRlQ21kID0KICAgICAgICAgICAgICAgICBjbWRGYWN0b3J5LmNyZWF0ZVZpcnR1YWxTZXJ2ZXJDbWQodnNOYW1lLCBjb25maWdOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgaG9zdHMsIGdldE9wdGlvbmFsKCksIFZpcnR1YWxTZXJ2ZXJDbWQua0NyZWF0ZU1vZGUpOwogCkBAIC02Niw3ICs2Niw3IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgbmV3IENyZWF0ZVZpcnR1YWxTZXJ2ZXJUZXN0KAotICAgICAgICAgICAgICAgICJhZG1pbiIsICJwYXNzd29yZCIsICJsb2NhbGhvc3QiLCA4Njg2LCAKKyAgICAgICAgICAgICAgICAiYWRtaW4iLCAicGFzc3dvcmQiLCAibG9jYWxob3N0IiwgODY4NiwKICAgICAgICAgICAgICAgICBrTmFtZSwga0NvbmZpZ05hbWUsIGtIb3N0cykucnVuKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0N1c3RvbVJlc291cmNlVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9DdXN0b21SZXNvdXJjZVRlc3QuamF2YQppbmRleCBlM2E0NGI4Li4yYzVhYzQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0N1c3RvbVJlc291cmNlVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvQ3VzdG9tUmVzb3VyY2VUZXN0LmphdmEKQEAgLTMyLDggKzMyLDggQEAKICAgICBzdGF0aWMgZmluYWwgU3RyaW5nIGtGYWN0b3J5Q2xhc3MgICA9ICJhLmIuYyI7CiAgICAgc3RhdGljIGZpbmFsIFN0cmluZyBrT2JqZWN0VHlwZSAgICAgPSAidXNlciI7CiAKLSAgICBwdWJsaWMgQ3VzdG9tUmVzb3VyY2VUZXN0KGZpbmFsIFN0cmluZyB1c2VyLCAKLSAgICAgICAgZmluYWwgU3RyaW5nIHBhc3N3b3JkLCBmaW5hbCBTdHJpbmcgaG9zdCwgZmluYWwgaW50IHBvcnQsIAorICAgIHB1YmxpYyBDdXN0b21SZXNvdXJjZVRlc3QoZmluYWwgU3RyaW5nIHVzZXIsCisgICAgICAgIGZpbmFsIFN0cmluZyBwYXNzd29yZCwgZmluYWwgU3RyaW5nIGhvc3QsIGZpbmFsIGludCBwb3J0LAogICAgICAgICBmaW5hbCBTdHJpbmcgam5kaU5hbWUsIGZpbmFsIFN0cmluZyByZXNUeXBlLCBmaW5hbCBTdHJpbmcgZmFjdG9yeUNsYXNzKQogICAgIHsKICAgICAgICAgZmluYWwgQ21kRmFjdG9yeSBjbWRGYWN0b3J5ID0gZ2V0Q21kRmFjdG9yeSgpOwpAQCAtNDEsMTEgKzQxLDExIEBACiAgICAgICAgIGZpbmFsIENvbm5lY3RDbWQgY29ubmVjdENtZCA9IGNtZEZhY3RvcnkuY3JlYXRlQ29ubmVjdENtZCgKICAgICAgICAgICAgICAgICB1c2VyLCBwYXNzd29yZCwgaG9zdCwgcG9ydCk7CiAKLSAgICAgICAgZmluYWwgQ3JlYXRlQ3VzdG9tUmVzb3VyY2VDbWQgY3JlYXRlQ21kID0gCi0gICAgICAgICAgICAgICAgY21kRmFjdG9yeS5jcmVhdGVDcmVhdGVDdXN0b21SZXNvdXJjZUNtZChqbmRpTmFtZSwgCisgICAgICAgIGZpbmFsIENyZWF0ZUN1c3RvbVJlc291cmNlQ21kIGNyZWF0ZUNtZCA9CisgICAgICAgICAgICAgICAgY21kRmFjdG9yeS5jcmVhdGVDcmVhdGVDdXN0b21SZXNvdXJjZUNtZChqbmRpTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1R5cGUsIGZhY3RvcnlDbGFzcywgZ2V0T3B0aW9uYWwoKSk7CiAKLSAgICAgICAgZmluYWwgRGVsZXRlQ3VzdG9tUmVzb3VyY2VDbWQgZGVsZXRlQ21kID0gCisgICAgICAgIGZpbmFsIERlbGV0ZUN1c3RvbVJlc291cmNlQ21kIGRlbGV0ZUNtZCA9CiAgICAgICAgICAgICAgICAgY21kRmFjdG9yeS5jcmVhdGVEZWxldGVDdXN0b21SZXNvdXJjZUNtZChqbmRpTmFtZSk7CiAKICAgICAgICAgZmluYWwgUGlwZUNtZCBwMSA9IG5ldyBQaXBlQ21kKGNvbm5lY3RDbWQsIGNyZWF0ZUNtZCk7CkBAIC02NywxNCArNjcsMTQgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0gICAgICAgIG5ldyBDdXN0b21SZXNvdXJjZVRlc3QoImFkbWluIiwgInBhc3N3b3JkIiwgImxvY2FsaG9zdCIsIDg2ODYsIAotICAgICAgICAgICAgICAgIGtKTkRJTmFtZSwga1Jlc1R5cGUsIGtGYWN0b3J5Q2xhc3MpLnJ1bigpOyAKKyAgICAgICAgbmV3IEN1c3RvbVJlc291cmNlVGVzdCgiYWRtaW4iLCAicGFzc3dvcmQiLCAibG9jYWxob3N0IiwgODY4NiwKKyAgICAgICAgICAgICAgICBrSk5ESU5hbWUsIGtSZXNUeXBlLCBrRmFjdG9yeUNsYXNzKS5ydW4oKTsKICAgICB9CiAKICAgICBwcml2YXRlIE1hcCBnZXRPcHRpb25hbCgpCiAgICAgewogICAgICAgICBmaW5hbCBNYXAgb3B0aW9uYWwgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICAvL29wdGlvbmFsLnB1dChDcmVhdGVSZXNvdXJjZUtleXMuUkVTT1VSQ0VfT0JKRUNUX1RZUEVfS0VZLCAKKyAgICAgICAgLy9vcHRpb25hbC5wdXQoQ3JlYXRlUmVzb3VyY2VLZXlzLlJFU09VUkNFX09CSkVDVF9UWVBFX0tFWSwKICAgICAgICAgICAgICAgICAvL2tPYmplY3RUeXBlKTsKICAgICAgICAgcmV0dXJuIG9wdGlvbmFsOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvRGVsZXRlQ2x1c3RlcmVkSW5zdGFuY2VUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0RlbGV0ZUNsdXN0ZXJlZEluc3RhbmNlVGVzdC5qYXZhCmluZGV4IDAzNmM2N2QuLmIwNTM0NzMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvRGVsZXRlQ2x1c3RlcmVkSW5zdGFuY2VUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9EZWxldGVDbHVzdGVyZWRJbnN0YW5jZVRlc3QuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogICAgICAgICBmaW5hbCBDb25uZWN0Q21kIGNvbm5lY3RDbWQgPSBjbWRGYWN0b3J5LmNyZWF0ZUNvbm5lY3RDbWQoCiAgICAgICAgICAgICAgICAgdXNlciwgcGFzc3dvcmQsIGhvc3QsIHBvcnQpOwogCi0gICAgICAgIGZpbmFsIERlbGV0ZUNsdXN0ZXJlZEluc3RhbmNlQ21kIGRlbGV0ZUNsdXN0ZXJlZEluc3RhbmNlQ21kID0gCisgICAgICAgIGZpbmFsIERlbGV0ZUNsdXN0ZXJlZEluc3RhbmNlQ21kIGRlbGV0ZUNsdXN0ZXJlZEluc3RhbmNlQ21kID0KICAgICAgICAgICAgICAgICBjbWRGYWN0b3J5LmNyZWF0ZURlbGV0ZUNsdXN0ZXJlZEluc3RhbmNlQ21kKGluc3RhbmNlTmFtZSk7CiAKICAgICAgICAgdGFyZ2V0ID0gbmV3IFBpcGVDbWQoY29ubmVjdENtZCwgZGVsZXRlQ2x1c3RlcmVkSW5zdGFuY2VDbWQpOwpAQCAtNDMsNyArNDMsNyBAQAogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLSAgICAgICAgbmV3IERlbGV0ZUNsdXN0ZXJlZEluc3RhbmNlVGVzdCgiYWRtaW4iLCAicGFzc3dvcmQiLCAibG9jYWxob3N0IiwgCisgICAgICAgIG5ldyBEZWxldGVDbHVzdGVyZWRJbnN0YW5jZVRlc3QoImFkbWluIiwgInBhc3N3b3JkIiwgImxvY2FsaG9zdCIsCiAgICAgICAgICAgICA4Njg2LCBhcmdzWzBdKS5ydW4oKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0RlcGxveUNtZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9EZXBsb3lDbWQuamF2YQppbmRleCAwYzNmZTVlLi4yMGZlNWU4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0RlcGxveUNtZC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvRGVwbG95Q21kLmphdmEKQEAgLTY3LDIxICs2NywyMSBAQAogICAgIHsKICAgICAgICAgdHJ5CiAgICAgICAgIHsKLQkJICAgIGZpbmFsIERlcGxveW1lbnRNZ3IJbWdyCT0gZ2V0RGVwbG95bWVudE1ncigpOwotCQkgICAgYXNzZXJ0KCBtZ3IgIT0gbnVsbCApOwotCQkKLSAgICAgICAgICAgIGZpbmFsIGludAl0b3RhbFNpemUJPSAoaW50KWZpbGVTaXplOwotICAgICAgICAgICAgZmluYWwgaW50CWNodW5rU2l6ZQk9IDMyICogMTAyNDsKLQkJCi0gICAgICAgICAgICBmaW5hbCBPYmplY3QJdXBsb2FkSUQJPSBtZ3IuaW5pdGlhdGVGaWxlVXBsb2FkKCB0b3RhbFNpemUgKTsKLSAgICAgICAgICAgIGludCByZW1haW5pbmcJPSB0b3RhbFNpemU7Ci0gICAgICAgICAgICBib29sZWFuCWRvbmUJPSBmYWxzZTsKKyAgICAgICAgICAgIGZpbmFsIERlcGxveW1lbnRNZ3IgICAgbWdyICAgID0gZ2V0RGVwbG95bWVudE1ncigpOworICAgICAgICAgICAgYXNzZXJ0KCBtZ3IgIT0gbnVsbCApOworCisgICAgICAgICAgICBmaW5hbCBpbnQgICAgdG90YWxTaXplICAgID0gKGludClmaWxlU2l6ZTsKKyAgICAgICAgICAgIGZpbmFsIGludCAgICBjaHVua1NpemUgICAgPSAzMiAqIDEwMjQ7CisKKyAgICAgICAgICAgIGZpbmFsIE9iamVjdCAgICB1cGxvYWRJRCAgICA9IG1nci5pbml0aWF0ZUZpbGVVcGxvYWQoIHRvdGFsU2l6ZSApOworICAgICAgICAgICAgaW50IHJlbWFpbmluZyAgICA9IHRvdGFsU2l6ZTsKKyAgICAgICAgICAgIGJvb2xlYW4gICAgZG9uZSAgICA9IGZhbHNlOwogICAgICAgICAgICAgd2hpbGUgKCByZW1haW5pbmcgIT0gMCApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50CWFjdHVhbAk9IHJlbWFpbmluZyA8IGNodW5rU2l6ZSA/IAorICAgICAgICAgICAgICAgIGZpbmFsIGludCAgICBhY3R1YWwgICAgPSByZW1haW5pbmcgPCBjaHVua1NpemUgPwogICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nIDogY2h1bmtTaXplOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZpbmFsIGJ5dGVbXQlieXRlcwk9IG5ldyBieXRlWyBhY3R1YWwgXTsKKworICAgICAgICAgICAgICAgIGZpbmFsIGJ5dGVbXSAgICBieXRlcyAgICA9IG5ldyBieXRlWyBhY3R1YWwgXTsKICAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGlzLnJlYWQoYnl0ZXMpOwpAQCAtOTEsMTEgKzkxLDExIEBACiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZG9uZQk9IG1nci51cGxvYWRCeXRlcyggdXBsb2FkSUQsIGJ5dGVzICk7Ci0gICAgICAgICAgICAgICAgcmVtYWluaW5nCS09IGFjdHVhbDsKKyAgICAgICAgICAgICAgICBkb25lICAgID0gbWdyLnVwbG9hZEJ5dGVzKCB1cGxvYWRJRCwgYnl0ZXMgKTsKKyAgICAgICAgICAgICAgICByZW1haW5pbmcgICAgLT0gYWN0dWFsOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYXNzZXJ0KCBkb25lICk7Ci0JCQorCiAgICAgICAgICAgICByZXR1cm4oIHVwbG9hZElEICk7CiAgICAgICAgIH0KICAgICAgICAgZmluYWxseQpAQCAtMTEzLDI3ICsxMTMsMjcgQEAKICAgICAgICAgewogICAgICAgICAgICAgZmluYWwgRmlsZSBhcmNoaXZlID0gZ2V0QXJjaGl2ZSgpOwogICAgICAgICAgICAgbWdyID0gZ2V0RGVwbG95bWVudE1ncigpOwotCQkJCisKICAgICAgICAgICAgIG15TGlzdGVuZXIgPSBuZXcgRGVwbG95TGlzdGVuZXIoKTsKICAgICAgICAgICAgIG1nci5hZGROb3RpZmljYXRpb25MaXN0ZW5lcihteUxpc3RlbmVyLCBudWxsLCBudWxsKTsKIAogICAgICAgICAgICAgZmluYWwgT2JqZWN0ICAgIGRlcGxveUlEICAgID0gbWdyLmluaXREZXBsb3koICk7CiAgICAgICAgICAgICBhc3NlcnQoIGRlcGxveUlEIGluc3RhbmNlb2YgU3RyaW5nICk7Ci0JCQkKLQkJCWlmKGFyY2hpdmUuaXNEaXJlY3RvcnkoKSkKLQkJCXsKLQkJCQlEZXBsb3ltZW50U291cmNlSW1wbCBkc2kgPSBuZXcgRGVwbG95bWVudFNvdXJjZUltcGwoYXJjaGl2ZS5nZXRBYnNvbHV0ZVBhdGgoKSwgdHJ1ZSwKLQkJCQkJbmV3IFN0cmluZ1sxXSwgbmV3IFN0cmluZ1sxXSwgbmV3IFN0cmluZ1sxXSwgbmV3IEhhc2hNYXAoKSk7CQkJCi0JICAgICAgICAgICAgbWdyLnN0YXJ0RGVwbG95KCBkZXBsb3lJRCwgZHNpLmFzTWFwKCksIG51bGwsIGdldERlcGxveW1lbnRPcHRpb25zKCkpOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCWJpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG5ldyBGaWxlSW5wdXRTdHJlYW0oYXJjaGl2ZSkpOwotCQkJCU9iamVjdCB1cGxvYWRJRCA9IHVwbG9hZChiaXMsIGFyY2hpdmUubGVuZ3RoKCkpOwotCSAgICAgICAgICAgIG1nci5zdGFydERlcGxveSggZGVwbG95SUQsIHVwbG9hZElELCBudWxsLCBnZXREZXBsb3ltZW50T3B0aW9ucygpKTsKLQkJCX0KIAotICAgICAgICAgICAgCisgICAgICAgICAgICBpZihhcmNoaXZlLmlzRGlyZWN0b3J5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRGVwbG95bWVudFNvdXJjZUltcGwgZHNpID0gbmV3IERlcGxveW1lbnRTb3VyY2VJbXBsKGFyY2hpdmUuZ2V0QWJzb2x1dGVQYXRoKCksIHRydWUsCisgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbMV0sIG5ldyBTdHJpbmdbMV0sIG5ldyBTdHJpbmdbMV0sIG5ldyBIYXNoTWFwKCkpOworICAgICAgICAgICAgICAgIG1nci5zdGFydERlcGxveSggZGVwbG95SUQsIGRzaS5hc01hcCgpLCBudWxsLCBnZXREZXBsb3ltZW50T3B0aW9ucygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBiaXMgPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShuZXcgRmlsZUlucHV0U3RyZWFtKGFyY2hpdmUpKTsKKyAgICAgICAgICAgICAgICBPYmplY3QgdXBsb2FkSUQgPSB1cGxvYWQoYmlzLCBhcmNoaXZlLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBtZ3Iuc3RhcnREZXBsb3koIGRlcGxveUlELCB1cGxvYWRJRCwgbnVsbCwgZ2V0RGVwbG95bWVudE9wdGlvbnMoKSk7CisgICAgICAgICAgICB9CisKKwogICAgICAgICAgICAgd2hpbGUgKCAhIG15TGlzdGVuZXIuaXNDb21wbGV0ZWQoKSApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdHJ5CkBAIC0xNDksOCArMTQ5LDggQEAKICAgICAgICAgZmluYWxseQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoYmlzICE9IG51bGwpIHsgYmlzLmNsb3NlKCk7IH0KLQkJCQotCQkJaWYobXlMaXN0ZW5lciAhPSBudWxsICYmIG1nciAhPSBudWxsKQorCisgICAgICAgICAgICBpZihteUxpc3RlbmVyICE9IG51bGwgJiYgbWdyICE9IG51bGwpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgewpAQCAtMTY5LDcgKzE2OSw3IEBACiAgICAgICAgIGZpbmFsIFN0cmluZyB0YXJnZXQgPSBnZXRUYXJnZXQoKTsKICAgICAgICAgaWYgKCFERUZBVUxUX0RFUExPWV9UQVJHRVQuZXF1YWxzKHRhcmdldCkpIC8vbm90IGEgImRvbWFpbiIuCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZpbmFsIERlcGxveWVkSXRlbVJlZkNvbmZpZyByZWZDb25maWcgPSAKKyAgICAgICAgICAgIGZpbmFsIERlcGxveWVkSXRlbVJlZkNvbmZpZyByZWZDb25maWcgPQogICAgICAgICAgICAgICAgIGdldERlcGxveWVkSXRlbVJlZkNvbmZpZ0NSKHRhcmdldCkuY3JlYXRlRGVwbG95ZWRJdGVtUmVmQ29uZmlnKGdldEFwcE5hbWUoKSk7CiAgICAgICAgICAgICBhc3NlcnQgcmVmQ29uZmlnICE9IG51bGw7CiAgICAgICAgIH0KQEAgLTE4MSwzMiArMTgxLDMyIEBACiAgICAgICAgIGZpbmFsIFN0cmluZyB0YXJnZXQgPSBnZXRUYXJnZXQoKTsKICAgICAgICAgaWYgKCFERUZBVUxUX0RFUExPWV9UQVJHRVQuZXF1YWxzKHRhcmdldCkpIC8vbm90IGEgImRvbWFpbiIuCiAgICAgICAgIHsKLSAgICAgICAgICAgIEoyRUVMb2dpY2FsU2VydmVyCXNlcnZlcgkJPSBnZXRMb2dpY2FsU2VydmVyKCk7CisgICAgICAgICAgICBKMkVFTG9naWNhbFNlcnZlciAgICBzZXJ2ZXIgICAgICAgID0gZ2V0TG9naWNhbFNlcnZlcigpOwogICAgICAgICAgICAgc2VydmVyLnN0YXJ0QXBwKGdldEFwcE5hbWUoKSwgbnVsbCk7CiAgICAgICAgIH0KICAgICB9Ci0JCisKICAgICBwcm90ZWN0ZWQgdm9pZCBzdG9wQXBwKCkgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgZmluYWwgU3RyaW5nIHRhcmdldCA9IGdldFRhcmdldCgpOwogICAgICAgICBpZiAoIURFRkFVTFRfREVQTE9ZX1RBUkdFVC5lcXVhbHModGFyZ2V0KSkgLy9ub3QgYSAiZG9tYWluIi4KICAgICAgICAgewotICAgICAgICAgICAgSjJFRUxvZ2ljYWxTZXJ2ZXIJc2VydmVyCQk9IGdldExvZ2ljYWxTZXJ2ZXIoKTsKKyAgICAgICAgICAgIEoyRUVMb2dpY2FsU2VydmVyICAgIHNlcnZlciAgICAgICAgPSBnZXRMb2dpY2FsU2VydmVyKCk7CiAgICAgICAgICAgICBzZXJ2ZXIuc3RvcEFwcChnZXRBcHBOYW1lKCksIG51bGwpOwogICAgICAgICB9CiAgICAgfQogCi0JIAorCiAgICAgcHJvdGVjdGVkIERlcGxveWVkSXRlbVJlZkNvbmZpZ0NSIGdldERlcGxveWVkSXRlbVJlZkNvbmZpZ0NSKCkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLQkJcmV0dXJuIGdldERlcGxveWVkSXRlbVJlZkNvbmZpZ0NSKGdldFRhcmdldCgpKTsKLQl9Ci0JCisgICAgICAgIHJldHVybiBnZXREZXBsb3llZEl0ZW1SZWZDb25maWdDUihnZXRUYXJnZXQoKSk7CisgICAgfQorCiAgICAgcHJvdGVjdGVkIERlcGxveWVkSXRlbVJlZkNvbmZpZ0NSIGdldERlcGxveWVkSXRlbVJlZkNvbmZpZ0NSKFN0cmluZyB0YXJnZXQpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0JCWZpbmFsIEFNWENvbmZpZyBjbHVzdGVyT3JTZXJ2ZXIgPSBnZXRDbHVzdGVyT3JTZXJ2ZXIodGFyZ2V0KTsKKyAgICAgICAgZmluYWwgQU1YQ29uZmlnIGNsdXN0ZXJPclNlcnZlciA9IGdldENsdXN0ZXJPclNlcnZlcih0YXJnZXQpOwogICAgICAgICBhc3NlcnQgY2x1c3Rlck9yU2VydmVyICE9IG51bGw7CiAgICAgICAgIERlcGxveWVkSXRlbVJlZkNvbmZpZ0NSIG1nciA9IG51bGw7CiAgICAgICAgIGlmIChjbHVzdGVyT3JTZXJ2ZXIgaW5zdGFuY2VvZiBTdGFuZGFsb25lU2VydmVyQ29uZmlnKQpAQCAtMjE5LDcgKzIxOSw3IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJJbnZhaWQgZGVwbG95bWVudCB0YXJnZXQ6ICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkludmFpZCBkZXBsb3ltZW50IHRhcmdldDogIiArCiAgICAgICAgICAgICAgICAgICAgICJUYXJnZXQgaGFzIHRvIGJlIGEgY2x1c3RlciBvciBzdGFuZGFsb25lIHNlcnZlciIpOwogICAgICAgICB9CiAgICAgICAgIGFzc2VydCBtZ3IgIT0gbnVsbDsKQEAgLTIyOSwyNSArMjI5LDI1IEBACiAgICAgcHJvdGVjdGVkIEFNWENvbmZpZyBnZXRDbHVzdGVyT3JTZXJ2ZXIoU3RyaW5nIHRhcmdldCkgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgZmluYWwgRG9tYWluQ29uZmlnIGRvbWFpbkNvbmZpZyA9IGdldERvbWFpbkNvbmZpZygpOwotICAgICAgIAlmaW5hbCBNYXAgc3RhbmRBbG9uZVNlcnZlcnMgID0gZG9tYWluQ29uZmlnLmdldFN0YW5kYWxvbmVTZXJ2ZXJDb25maWdNYXAoKTsKLSAgICAgICAJZmluYWwgTWFwIGNsdXN0ZXJzICAgICAgICAgICA9IGRvbWFpbkNvbmZpZy5nZXRDbHVzdGVyQ29uZmlnTWFwKCk7Ci0gICAgICAgCWZpbmFsIE1hcCBjbHVzdGVyZWRTZXJ2ZXJzICAgPSBkb21haW5Db25maWcuZ2V0Q2x1c3RlcmVkU2VydmVyQ29uZmlnTWFwKCk7CisgICAgICAgICAgIGZpbmFsIE1hcCBzdGFuZEFsb25lU2VydmVycyAgPSBkb21haW5Db25maWcuZ2V0U3RhbmRhbG9uZVNlcnZlckNvbmZpZ01hcCgpOworICAgICAgICAgICBmaW5hbCBNYXAgY2x1c3RlcnMgICAgICAgICAgID0gZG9tYWluQ29uZmlnLmdldENsdXN0ZXJDb25maWdNYXAoKTsKKyAgICAgICAgICAgZmluYWwgTWFwIGNsdXN0ZXJlZFNlcnZlcnMgICA9IGRvbWFpbkNvbmZpZy5nZXRDbHVzdGVyZWRTZXJ2ZXJDb25maWdNYXAoKTsKIAotICAgICAgIAlBTVhDb25maWcgcHJveHkgPSBudWxsOwotICAgICAgIAlpZiAoc3RhbmRBbG9uZVNlcnZlcnMuY29udGFpbnNLZXkodGFyZ2V0KSkKLSAgICAgICAJeworICAgICAgICAgICBBTVhDb25maWcgcHJveHkgPSBudWxsOworICAgICAgICAgICBpZiAoc3RhbmRBbG9uZVNlcnZlcnMuY29udGFpbnNLZXkodGFyZ2V0KSkKKyAgICAgICAgICAgewogICAgICAgICAgICAgcHJveHkgPSAoQU1YQ29uZmlnKXN0YW5kQWxvbmVTZXJ2ZXJzLmdldCh0YXJnZXQpOwotICAgICAgIAl9Ci0gICAgICAgCWVsc2UgaWYgKGNsdXN0ZXJzLmNvbnRhaW5zS2V5KHRhcmdldCkpCi0gICAgICAgCXsKKyAgICAgICAgICAgfQorICAgICAgICAgICBlbHNlIGlmIChjbHVzdGVycy5jb250YWluc0tleSh0YXJnZXQpKQorICAgICAgICAgICB7CiAgICAgICAgICAgICBwcm94eSA9IChBTVhDb25maWcpY2x1c3RlcnMuZ2V0KHRhcmdldCk7Ci0gICAgICAgCX0KLSAgICAgICAJZWxzZQotICAgICAgIAl7CisgICAgICAgICAgIH0KKyAgICAgICAgICAgZWxzZQorICAgICAgICAgICB7CiAgICAgICAgICAgICAvL2Fzc2VydCAhY2x1c3RlcmVkU2VydmVycy5jb250YWluc0tleSh0YXJnZXQpOwogICAgICAgICAgICAgcHJveHkgPSAoQU1YQ29uZmlnKWNsdXN0ZXJlZFNlcnZlcnMuZ2V0KHRhcmdldCk7Ci0gICAgICAgCX0KLSAgICAgICAJcmV0dXJuIHByb3h5OworICAgICAgICAgICB9CisgICAgICAgICAgIHJldHVybiBwcm94eTsKICAgICB9CiAKICAgICBwcm90ZWN0ZWQgRGVwbG95bWVudE1nciBnZXREZXBsb3ltZW50TWdyKCkgdGhyb3dzIEV4Y2VwdGlvbgpAQCAtMjk2LDIyICsyOTYsMjIgQEAKICAgICAgICAgcmV0dXJuIChNYXApZ2V0Q21kRW52KCkuZ2V0KGtEZXBsb3lPcHRpb25zKTsKICAgICB9CiAKLQlKMkVFTG9naWNhbFNlcnZlciBnZXRMb2dpY2FsU2VydmVyKCkgdGhyb3dzIEV4Y2VwdGlvbgorICAgIEoyRUVMb2dpY2FsU2VydmVyIGdldExvZ2ljYWxTZXJ2ZXIoKSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotCQlKMkVFTG9naWNhbFNlcnZlcglzZXJ2ZXIJCT0gbnVsbDsKLQkJSjJFRURvbWFpbgkJCWRvbWFpbgkJPSBnZXRKMkVFRG9tYWluKCk7Ci0JCU1hcAkJCQkJc2VydmVyTWFwCT0gZG9tYWluLmdldFNlcnZlck1hcCgpOwotCQlNYXAJCQkJCWNsdXN0ZXJNYXAJPSBkb21haW4uZ2V0Q2x1c3Rlck1hcCgpOwotCQlTdHJpbmcJCQkJdGFyZ2V0CQk9IGdldFRhcmdldCgpOwotCQkKLQkJc2VydmVyTWFwLnB1dEFsbChjbHVzdGVyTWFwKTsKLQkJCi0JCWlmKCFzZXJ2ZXJNYXAuY29udGFpbnNLZXkodGFyZ2V0KSkKKyAgICAgICAgSjJFRUxvZ2ljYWxTZXJ2ZXIgICAgc2VydmVyICAgICAgICA9IG51bGw7CisgICAgICAgIEoyRUVEb21haW4gICAgICAgICAgICBkb21haW4gICAgICAgID0gZ2V0SjJFRURvbWFpbigpOworICAgICAgICBNYXAgICAgICAgICAgICAgICAgICAgIHNlcnZlck1hcCAgICA9IGRvbWFpbi5nZXRTZXJ2ZXJNYXAoKTsKKyAgICAgICAgTWFwICAgICAgICAgICAgICAgICAgICBjbHVzdGVyTWFwICAgID0gZG9tYWluLmdldENsdXN0ZXJNYXAoKTsKKyAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgIHRhcmdldCAgICAgICAgPSBnZXRUYXJnZXQoKTsKKworICAgICAgICBzZXJ2ZXJNYXAucHV0QWxsKGNsdXN0ZXJNYXApOworCisgICAgICAgIGlmKCFzZXJ2ZXJNYXAuY29udGFpbnNLZXkodGFyZ2V0KSkKICAgICAgICAgewotCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNhbid0IGZpbmQgdGFyZ2V0OiAiICsgZ2V0VGFyZ2V0KCkpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNhbid0IGZpbmQgdGFyZ2V0OiAiICsgZ2V0VGFyZ2V0KCkpOwogICAgICAgICB9CiAKLQkJcmV0dXJuIChKMkVFTG9naWNhbFNlcnZlcilzZXJ2ZXJNYXAuZ2V0KHRhcmdldCk7CisgICAgICAgIHJldHVybiAoSjJFRUxvZ2ljYWxTZXJ2ZXIpc2VydmVyTWFwLmdldCh0YXJnZXQpOwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgVGhyb3dhYmxlIGNoZWNrRm9yRXhjZXB0aW9uKGZpbmFsIERlcGxveW1lbnRTdGF0dXMgcykKQEAgLTMyMCw3ICszMjAsNyBAQAogICAgICAgICBmaW5hbCBJdGVyYXRvciBpdCA9IHMuZ2V0U3ViU3RhZ2VzKCk7CiAgICAgICAgIHdoaWxlICgoZXggPT0gbnVsbCkgJiYgKGl0Lmhhc05leHQoKSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZpbmFsIERlcGxveW1lbnRTdGF0dXMgc3ViU3RhZ2UgPSAKKyAgICAgICAgICAgIGZpbmFsIERlcGxveW1lbnRTdGF0dXMgc3ViU3RhZ2UgPQogICAgICAgICAgICAgICAgIERlcGxveW1lbnRTdXBwb3J0Lm1hcFRvRGVwbG95bWVudFN0YXR1cygoTWFwKWl0Lm5leHQoKSk7CiAgICAgICAgICAgICBleCA9IHN1YlN0YWdlLmdldFRocm93YWJsZSgpOwogICAgICAgICB9CkBAIC0zMjksNyArMzI5LDcgQEAKIAogICAgIHB1YmxpYyB2b2lkIGNoZWNrRmFpbGVkKGZpbmFsIFRocm93YWJsZSB0KSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotICAgICAgICBpZiAoIHQgIT0gbnVsbCApIAorICAgICAgICBpZiAoIHQgIT0gbnVsbCApCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICggdCBpbnN0YW5jZW9mIEV4Y2VwdGlvbiApCiAgICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0RlcGxveUxpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0RlcGxveUxpc3RlbmVyLmphdmEKaW5kZXggZWVjM2RmYy4uZDc3MDFhNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9EZXBsb3lMaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvRGVwbG95TGlzdGVuZXIuamF2YQpAQCAtMzIsMjMgKzMyLDIzIEBACiBwdWJsaWMgY2xhc3MgRGVwbG95TGlzdGVuZXIgaW1wbGVtZW50cyBOb3RpZmljYXRpb25MaXN0ZW5lcgogewogICAgIHByaXZhdGUgT2JqZWN0ICAgICAgICAgICAgICBtRGVwbG95SUQ7Ci0gICAgcHJpdmF0ZSBib29sZWFuCSAgICAgICAgICAgIG1Jc0NvbXBsZXRlZDsKKyAgICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgICAgICAgbUlzQ29tcGxldGVkOwogICAgIHByaXZhdGUgRGVwbG95bWVudFN0YXR1cyAgICBtRmluYWxTdGF0dXM7CiAKICAgICBwdWJsaWMgRGVwbG95TGlzdGVuZXIoKQogICAgIHsKLSAgICAgICAgbURlcGxveUlECQk9IG51bGw7Ci0gICAgICAgIG1Jc0NvbXBsZXRlZAk9IGZhbHNlOworICAgICAgICBtRGVwbG95SUQgICAgICAgID0gbnVsbDsKKyAgICAgICAgbUlzQ29tcGxldGVkICAgID0gZmFsc2U7CiAgICAgfQotICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBpc0NvbXBsZXRlZCgpCiAgICAgewogICAgICAgICByZXR1cm4oIG1Jc0NvbXBsZXRlZCApOwogICAgIH0KLQkJCisKICAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgaGFuZGxlTm90aWZpY2F0aW9uKAotICAgICAgICBmaW5hbCBOb3RpZmljYXRpb24Jbm90aWYsIAotICAgICAgICBmaW5hbCBPYmplY3QJCWhhbmRiYWNrKSAKKyAgICAgICAgZmluYWwgTm90aWZpY2F0aW9uICAgIG5vdGlmLAorICAgICAgICBmaW5hbCBPYmplY3QgICAgICAgIGhhbmRiYWNrKQogICAgIHsKICAgICAgICAgdHJ5CiAgICAgICAgIHsKQEAgLTU5LDcgKzU5LDcgQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICB9Ci0JCQorCiAgICAgcHVibGljIHN5bmNocm9uaXplZCBEZXBsb3ltZW50U3RhdHVzIGdldEZpbmFsU3RhdHVzKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtRmluYWxTdGF0dXM7CkBAIC03MSw1MiArNzEsNTIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCByZWFsSGFuZGxlTm90aWZpY2F0aW9uKAotICAgICAgICBmaW5hbCBOb3RpZmljYXRpb24Jbm90aWYsIAotICAgICAgICBmaW5hbCBPYmplY3QJCWhhbmRiYWNrKSAKKyAgICAgICAgZmluYWwgTm90aWZpY2F0aW9uICAgIG5vdGlmLAorICAgICAgICBmaW5hbCBPYmplY3QgICAgICAgIGhhbmRiYWNrKQogICAgIHsKLQkJZmluYWwgU3RyaW5nIAl0eXBlCT0gbm90aWYuZ2V0VHlwZSgpOwotCQlmaW5hbCBNYXAgCQltCQk9IChNYXApbm90aWYuZ2V0VXNlckRhdGEoKTsKLQkJZmluYWwgT2JqZWN0IGRlcGxveUlECT0gbS5nZXQoRGVwbG95bWVudE1nci5OT1RJRl9ERVBMT1lNRU5UX0lEX0tFWSk7CisgICAgICAgIGZpbmFsIFN0cmluZyAgICAgdHlwZSAgICA9IG5vdGlmLmdldFR5cGUoKTsKKyAgICAgICAgZmluYWwgTWFwICAgICAgICAgbSAgICAgICAgPSAoTWFwKW5vdGlmLmdldFVzZXJEYXRhKCk7CisgICAgICAgIGZpbmFsIE9iamVjdCBkZXBsb3lJRCAgICA9IG0uZ2V0KERlcGxveW1lbnRNZ3IuTk9USUZfREVQTE9ZTUVOVF9JRF9LRVkpOwogCi0JCVN5c3RlbS5lcnIucHJpbnRsbiggZGVwbG95SUQgKyAiOiByZWNlaXZlZCAiICsgdHlwZSApOwotCQotCQlpZiAoIHR5cGUuZXF1YWxzKCBEZXBsb3ltZW50TWdyLkRFUExPWU1FTlRfU1RBUlRFRF9OT1RJRklDQVRJT05fVFlQRSApICkKLQkJewotCQkJYXNzZXJ0KCBtRGVwbG95SUQgPT0gbnVsbCApOwotCQkJbURlcGxveUlECT0gZGVwbG95SUQ7Ci0JCX0KLQkJZWxzZSBpZiAoIGRlcGxveUlELmVxdWFscyggbURlcGxveUlEICkgKQotCQl7Ci0JCQlhc3NlcnQoIGRlcGxveUlEICE9IG51bGwgJiYgZGVwbG95SUQuZXF1YWxzKCBtRGVwbG95SUQgKSApOwotCQkJU3lzdGVtLmVyci5wcmludGxuKCAKLQkJCQkiRGVwbG95Q21kLmhhbmRsZU5vdGlmaWNhdGlvbjogIiArIGRlcGxveUlEICsgIjogIiArIHR5cGUgKTsKLQkJCQkKLQkJCWlmICggdHlwZS5lcXVhbHMoIAotCQkJCQlEZXBsb3ltZW50TWdyLkRFUExPWU1FTlRfQ09NUExFVEVEX05PVElGSUNBVElPTl9UWVBFICkgKQotCQkJewotCQkJCWZpbmFsIE1hcAlzdGF0dXNEYXRhCT0gKE1hcCkKLQkJCQltLmdldCggRGVwbG95bWVudE1nci5OT1RJRl9ERVBMT1lNRU5UX0NPTVBMRVRFRF9TVEFUVVNfS0VZICk7Ci0JCQkJCQotCQkJCURlcGxveW1lbnRTdGF0dXMgc3RhdHVzCT0gCi0JCQkJCURlcGxveW1lbnRTdXBwb3J0Lm1hcFRvRGVwbG95bWVudFN0YXR1cyggc3RhdHVzRGF0YSApOwotCQkJCQkKLQkJCQlhc3NlcnQoIG1EZXBsb3lJRC5lcXVhbHMoIGRlcGxveUlEICkgKSAgOgotCQkJCQkiZGVwbG95IElEIG1pc21hdGNoOiAiICsgbURlcGxveUlEICsgIiAhPSAiICsgZGVwbG95SUQ7Ci0JCQkJCQorICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIGRlcGxveUlEICsgIjogcmVjZWl2ZWQgIiArIHR5cGUgKTsKKworICAgICAgICBpZiAoIHR5cGUuZXF1YWxzKCBEZXBsb3ltZW50TWdyLkRFUExPWU1FTlRfU1RBUlRFRF9OT1RJRklDQVRJT05fVFlQRSApICkKKyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0KCBtRGVwbG95SUQgPT0gbnVsbCApOworICAgICAgICAgICAgbURlcGxveUlEICAgID0gZGVwbG95SUQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIGRlcGxveUlELmVxdWFscyggbURlcGxveUlEICkgKQorICAgICAgICB7CisgICAgICAgICAgICBhc3NlcnQoIGRlcGxveUlEICE9IG51bGwgJiYgZGVwbG95SUQuZXF1YWxzKCBtRGVwbG95SUQgKSApOworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKAorICAgICAgICAgICAgICAgICJEZXBsb3lDbWQuaGFuZGxlTm90aWZpY2F0aW9uOiAiICsgZGVwbG95SUQgKyAiOiAiICsgdHlwZSApOworCisgICAgICAgICAgICBpZiAoIHR5cGUuZXF1YWxzKAorICAgICAgICAgICAgICAgICAgICBEZXBsb3ltZW50TWdyLkRFUExPWU1FTlRfQ09NUExFVEVEX05PVElGSUNBVElPTl9UWVBFICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZpbmFsIE1hcCAgICBzdGF0dXNEYXRhICAgID0gKE1hcCkKKyAgICAgICAgICAgICAgICBtLmdldCggRGVwbG95bWVudE1nci5OT1RJRl9ERVBMT1lNRU5UX0NPTVBMRVRFRF9TVEFUVVNfS0VZICk7CisKKyAgICAgICAgICAgICAgICBEZXBsb3ltZW50U3RhdHVzIHN0YXR1cyAgICA9CisgICAgICAgICAgICAgICAgICAgIERlcGxveW1lbnRTdXBwb3J0Lm1hcFRvRGVwbG95bWVudFN0YXR1cyggc3RhdHVzRGF0YSApOworCisgICAgICAgICAgICAgICAgYXNzZXJ0KCBtRGVwbG95SUQuZXF1YWxzKCBkZXBsb3lJRCApICkgIDoKKyAgICAgICAgICAgICAgICAgICAgImRlcGxveSBJRCBtaXNtYXRjaDogIiArIG1EZXBsb3lJRCArICIgIT0gIiArIGRlcGxveUlEOworCiAgICAgICAgICAgICAgICAgc2V0RmluYWxTdGF0dXMoc3RhdHVzKTsKIAotCQkJCW1Jc0NvbXBsZXRlZAk9IHRydWU7Ci0JCQl9Ci0JCQllbHNlIGlmICggdHlwZS5lcXVhbHMoIAotCQkJCQkJRGVwbG95bWVudE1nci5ERVBMT1lNRU5UX0FCT1JURURfTk9USUZJQ0FUSU9OX1RZUEUgKSApCi0JCQl7Ci0JCQkJVGhyb3dhYmxlIHQgPSBuZXcgRXhjZXB0aW9uKCBkZXBsb3lJRCArIAotCQkJCQkiOiBhYm9ydGVkLiBQbGVhc2UgY2hlY2sgc2VydmVyIGxvZyBmb3IgZGV0YWlscy4iICk7CisgICAgICAgICAgICAgICAgbUlzQ29tcGxldGVkICAgID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCB0eXBlLmVxdWFscygKKyAgICAgICAgICAgICAgICAgICAgICAgIERlcGxveW1lbnRNZ3IuREVQTE9ZTUVOVF9BQk9SVEVEX05PVElGSUNBVElPTl9UWVBFICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRocm93YWJsZSB0ID0gbmV3IEV4Y2VwdGlvbiggZGVwbG95SUQgKworICAgICAgICAgICAgICAgICAgICAiOiBhYm9ydGVkLiBQbGVhc2UgY2hlY2sgc2VydmVyIGxvZyBmb3IgZGV0YWlscy4iICk7CiAKICAgICAgICAgICAgICAgICBmaW5hbCBNYXAgc3RhdHVzRGF0YSA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgICAgICAgICAgc3RhdHVzRGF0YS5wdXQoRGVwbG95bWVudFN0YXR1cy5TVEFHRV9TVEFUVVNfS0VZLCAKKyAgICAgICAgICAgICAgICBzdGF0dXNEYXRhLnB1dChEZXBsb3ltZW50U3RhdHVzLlNUQUdFX1NUQVRVU19LRVksCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgSW50ZWdlcihEZXBsb3ltZW50U3RhdHVzLlNUQVRVU19DT0RFX0ZBSUxVUkUpKTsKLSAgICAgICAgICAgICAgICBzdGF0dXNEYXRhLnB1dChEZXBsb3ltZW50U3RhdHVzLlNUQUdFX1NUQVRVU19NRVNTQUdFX0tFWSwgCisgICAgICAgICAgICAgICAgc3RhdHVzRGF0YS5wdXQoRGVwbG95bWVudFN0YXR1cy5TVEFHRV9TVEFUVVNfTUVTU0FHRV9LRVksCiAgICAgICAgICAgICAgICAgICAgICAgICB0LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICAgICAgc3RhdHVzRGF0YS5wdXQoRGVwbG95bWVudFN0YXR1cy5TVEFHRV9USFJPV0FCTEVfS0VZLCB0KTsKICAgICAgICAgICAgICAgICBmaW5hbCBEZXBsb3ltZW50U3RhdHVzIHN0YXR1cyA9IERlcGxveW1lbnRTdXBwb3J0LgpAQCAtMTI0LDI1ICsxMjQsMjUgQEAKIAogICAgICAgICAgICAgICAgIHNldEZpbmFsU3RhdHVzKHN0YXR1cyk7CiAKLQkJCQltSXNDb21wbGV0ZWQgICAgPSB0cnVlOwotCQkJfQotCQkJZWxzZSBpZiAoIHR5cGUuZXF1YWxzKCAKLQkJCQkJCURlcGxveW1lbnRNZ3IuREVQTE9ZTUVOVF9QUk9HUkVTU19OT1RJRklDQVRJT05fVFlQRSApICkKLQkJCXsKLQkJCQlmaW5hbCBNYXAJcHJvZ3Jlc3NEYXRhCT0gKE1hcCkKLQkJCQltLmdldCggRGVwbG95bWVudE1nci5OT1RJRl9ERVBMT1lNRU5UX1BST0dSRVNTX0tFWSApOworICAgICAgICAgICAgICAgIG1Jc0NvbXBsZXRlZCAgICA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICggdHlwZS5lcXVhbHMoCisgICAgICAgICAgICAgICAgICAgICAgICBEZXBsb3ltZW50TWdyLkRFUExPWU1FTlRfUFJPR1JFU1NfTk9USUZJQ0FUSU9OX1RZUEUgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmluYWwgTWFwICAgIHByb2dyZXNzRGF0YSAgICA9IChNYXApCisgICAgICAgICAgICAgICAgbS5nZXQoIERlcGxveW1lbnRNZ3IuTk9USUZfREVQTE9ZTUVOVF9QUk9HUkVTU19LRVkgKTsKIAotCQkJCWZpbmFsIERlcGxveW1lbnRQcm9ncmVzcwlwcm9ncmVzcwk9IAotCQkJCQlEZXBsb3ltZW50U3VwcG9ydC5tYXBUb0RlcGxveW1lbnRQcm9ncmVzcyggcHJvZ3Jlc3NEYXRhICk7CisgICAgICAgICAgICAgICAgZmluYWwgRGVwbG95bWVudFByb2dyZXNzICAgIHByb2dyZXNzICAgID0KKyAgICAgICAgICAgICAgICAgICAgRGVwbG95bWVudFN1cHBvcnQubWFwVG9EZXBsb3ltZW50UHJvZ3Jlc3MoIHByb2dyZXNzRGF0YSApOwogCi0JCQkJU3lzdGVtLmVyci5wcmludGxuKCAKLQkJCQkJZGVwbG95SUQgKyAiOiAiICsgcHJvZ3Jlc3MuZ2V0UHJvZ3Jlc3NQZXJjZW50KCkgKyAiJSIgKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlhc3NlcnQoIGZhbHNlICkgOiAKLQkJCQkJIlVua25vd24gZGVwbG95bWVudCBub3RpZmljYXRpb24gdHlwZTogIiArIHR5cGU7Ci0JCQl9Ci0JCX0KKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oCisgICAgICAgICAgICAgICAgICAgIGRlcGxveUlEICsgIjogIiArIHByb2dyZXNzLmdldFByb2dyZXNzUGVyY2VudCgpICsgIiUiICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXNzZXJ0KCBmYWxzZSApIDoKKyAgICAgICAgICAgICAgICAgICAgIlVua25vd24gZGVwbG95bWVudCBub3RpZmljYXRpb24gdHlwZTogIiArIHR5cGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0RlcGxveWVkQXBwSW5zcGVjdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0RlcGxveWVkQXBwSW5zcGVjdG9yLmphdmEKaW5kZXggN2Y0YzkyYy4uYjhiMzUyNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9EZXBsb3llZEFwcEluc3BlY3Rvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvRGVwbG95ZWRBcHBJbnNwZWN0b3IuamF2YQpAQCAtMjMsNjYgKzIzLDY2IEBACiAgKi8KIGNsYXNzIERlcGxveWVkQXBwSW5zcGVjdG9yCiB7Ci0JRGVwbG95ZWRBcHBJbnNwZWN0b3IoQ29ubmVjdENtZCBjY21kLCBTdHJpbmcgdGFyZ2V0KQotCXsKLQkJQ21kRmFjdG9yeSBjbWRGYWN0b3J5ID0gRW52LmdldENtZEZhY3RvcnkoKTsKLQkJTGlzdERlcGxveWVkQXBwc0NtZCBjbWQgPSBjbWRGYWN0b3J5LmNyZWF0ZUxpc3REZXBsb3llZEFwcHNDbWQodGFyZ2V0LCAiQWxsIik7Ci0JCXRhcmdldENtZCA9IG5ldyBQaXBlQ21kKGNjbWQsIGNtZCk7Ci0JfQorICAgIERlcGxveWVkQXBwSW5zcGVjdG9yKENvbm5lY3RDbWQgY2NtZCwgU3RyaW5nIHRhcmdldCkKKyAgICB7CisgICAgICAgIENtZEZhY3RvcnkgY21kRmFjdG9yeSA9IEVudi5nZXRDbWRGYWN0b3J5KCk7CisgICAgICAgIExpc3REZXBsb3llZEFwcHNDbWQgY21kID0gY21kRmFjdG9yeS5jcmVhdGVMaXN0RGVwbG95ZWRBcHBzQ21kKHRhcmdldCwgIkFsbCIpOworICAgICAgICB0YXJnZXRDbWQgPSBuZXcgUGlwZUNtZChjY21kLCBjbWQpOworICAgIH0KIAotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQkKLQlEZXBsb3llZEFwcEluc3BlY3RvcihTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkLCBTdHJpbmcgaG9zdCwgCi0JCQlpbnQgcG9ydCwgU3RyaW5nIHRhcmdldCkKLQl7Ci0JCUNtZEZhY3RvcnkgY21kRmFjdG9yeSA9IEVudi5nZXRDbWRGYWN0b3J5KCk7Ci0JCUNvbm5lY3RDbWQgY29ubmVjdENtZCA9IGNtZEZhY3RvcnkuY3JlYXRlQ29ubmVjdENtZCh1c2VyLCBwYXNzd29yZCwgaG9zdCwgcG9ydCk7Ci0JCUxpc3REZXBsb3llZEFwcHNDbWQgY21kID0gY21kRmFjdG9yeS5jcmVhdGVMaXN0RGVwbG95ZWRBcHBzQ21kKHRhcmdldCwgIkFsbCIpOwotCQl0YXJnZXRDbWQgPSBuZXcgUGlwZUNtZChjb25uZWN0Q21kLCBjbWQpOwotCX0KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCi0JYm9vbGVhbiBpc0RlcGxveWVkKFN0cmluZyBpZCkgdGhyb3dzIERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbgotCXsKLQkJdHJ5Ci0JCXsKLQkJCWlmKHJlc3VsdHMgPT0gbnVsbCkKLQkJCQlyZWZyZXNoKCk7Ci0JCQotCQkJcmV0dXJuIHJlc3VsdHMuY29udGFpbnMoaWQpOwotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgRGVwbG95bWVudFRlc3RzRXhjZXB0aW9uKCJFeGNlcHRpb24gY2F1Z2h0IGluIERlcGxveWVkQXBwSW5zcGVjdG9yLmlzRGVwbG95ZWQoKS4iLCBlKTsKLQkJfQotCX0KKyAgICBEZXBsb3llZEFwcEluc3BlY3RvcihTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkLCBTdHJpbmcgaG9zdCwKKyAgICAgICAgICAgIGludCBwb3J0LCBTdHJpbmcgdGFyZ2V0KQorICAgIHsKKyAgICAgICAgQ21kRmFjdG9yeSBjbWRGYWN0b3J5ID0gRW52LmdldENtZEZhY3RvcnkoKTsKKyAgICAgICAgQ29ubmVjdENtZCBjb25uZWN0Q21kID0gY21kRmFjdG9yeS5jcmVhdGVDb25uZWN0Q21kKHVzZXIsIHBhc3N3b3JkLCBob3N0LCBwb3J0KTsKKyAgICAgICAgTGlzdERlcGxveWVkQXBwc0NtZCBjbWQgPSBjbWRGYWN0b3J5LmNyZWF0ZUxpc3REZXBsb3llZEFwcHNDbWQodGFyZ2V0LCAiQWxsIik7CisgICAgICAgIHRhcmdldENtZCA9IG5ldyBQaXBlQ21kKGNvbm5lY3RDbWQsIGNtZCk7CisgICAgfQogCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCQotCXZvaWQgcmVmcmVzaCgpCi0JewotCQlTZXRbXSBzZXRzID0gbnVsbDsKLQkJCi0JCXRyeQotCQl7Ci0JCQlzZXRzID0gKFNldFtdKXRhcmdldENtZC5leGVjdXRlKCk7Ci0JCX0KLQkJY2F0Y2goRXhjZXB0aW9uIGUpCi0JCXsKLQkJCS8vIG5vdGU6IHRoZSBjYWxsZWQgbWV0aG9kIGxpdGVyYWxseSBkZWNsYXJlcyAndGhyb3dzIEV4Y2VwdGlvbicgISEhCi0JCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLQkJfQotCQkKLQkJLy8gZ2V0IHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIDIgc2V0cwotCQlpZihzZXRzLmxlbmd0aCA+IDEpCi0JCQlzZXRzWzBdLnJldGFpbkFsbChzZXRzWzFdKTsKLQkJCi0JCXJlc3VsdHMgPSBzZXRzWzBdOwotCX0KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCi0JcHJpdmF0ZSBTZXQgcmVzdWx0czsKLQlwcml2YXRlIENtZCB0YXJnZXRDbWQ7CisgICAgYm9vbGVhbiBpc0RlcGxveWVkKFN0cmluZyBpZCkgdGhyb3dzIERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKHJlc3VsdHMgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICByZWZyZXNoKCk7CisKKyAgICAgICAgICAgIHJldHVybiByZXN1bHRzLmNvbnRhaW5zKGlkKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgbmV3IERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbigiRXhjZXB0aW9uIGNhdWdodCBpbiBEZXBsb3llZEFwcEluc3BlY3Rvci5pc0RlcGxveWVkKCkuIiwgZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICB2b2lkIHJlZnJlc2goKQorICAgIHsKKyAgICAgICAgU2V0W10gc2V0cyA9IG51bGw7CisKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIHNldHMgPSAoU2V0W10pdGFyZ2V0Q21kLmV4ZWN1dGUoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gbm90ZTogdGhlIGNhbGxlZCBtZXRob2QgbGl0ZXJhbGx5IGRlY2xhcmVzICd0aHJvd3MgRXhjZXB0aW9uJyAhISEKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgICAgICB9CisKKyAgICAgICAgLy8gZ2V0IHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIDIgc2V0cworICAgICAgICBpZihzZXRzLmxlbmd0aCA+IDEpCisgICAgICAgICAgICBzZXRzWzBdLnJldGFpbkFsbChzZXRzWzFdKTsKKworICAgICAgICByZXN1bHRzID0gc2V0c1swXTsKKyAgICB9CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBwcml2YXRlIFNldCByZXN1bHRzOworICAgIHByaXZhdGUgQ21kIHRhcmdldENtZDsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvRGVwbG95bWVudFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvRGVwbG95bWVudFRlc3QuamF2YQppbmRleCA3MzNjZThhLi5kMGZhOWE4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0RlcGxveW1lbnRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9EZXBsb3ltZW50VGVzdC5qYXZhCkBAIC0yNCwxNiArMjQsMTYgQEAKIAogICAgIHB1YmxpYyBEZXBsb3ltZW50VGVzdChmaW5hbCBTdHJpbmcgdXNlciwgZmluYWwgU3RyaW5nIHBhc3N3b3JkLAogICAgICAgICAgICAgZmluYWwgU3RyaW5nIGhvc3QsIGZpbmFsIGludCBwb3J0LCBmaW5hbCBTdHJpbmcgYXJjaGl2ZSwKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBuYW1lLCBmaW5hbCBTdHJpbmcgY29udGV4dFJvb3QsIAorICAgICAgICAgICAgZmluYWwgU3RyaW5nIG5hbWUsIGZpbmFsIFN0cmluZyBjb250ZXh0Um9vdCwKICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gZW5hYmxlKQogICAgIHsKLQkJdGhpcyh1c2VyLCBwYXNzd29yZCwgaG9zdCwgcG9ydCwgYXJjaGl2ZSwgbmFtZSwgY29udGV4dFJvb3QsIGVuYWJsZSwgCisgICAgICAgIHRoaXModXNlciwgcGFzc3dvcmQsIGhvc3QsIHBvcnQsIGFyY2hpdmUsIG5hbWUsIGNvbnRleHRSb290LCBlbmFibGUsCiAgICAgICAgICAgICAgICAgInNlcnZlciIpOwotCX0KLSAgICAKLQlwdWJsaWMgRGVwbG95bWVudFRlc3QoZmluYWwgU3RyaW5nIHVzZXIsIGZpbmFsIFN0cmluZyBwYXNzd29yZCwKKyAgICB9CisKKyAgICBwdWJsaWMgRGVwbG95bWVudFRlc3QoZmluYWwgU3RyaW5nIHVzZXIsIGZpbmFsIFN0cmluZyBwYXNzd29yZCwKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBob3N0LCBmaW5hbCBpbnQgcG9ydCwgZmluYWwgU3RyaW5nIGFyY2hpdmUsCi0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZSwgZmluYWwgU3RyaW5nIGNvbnRleHRSb290LCAKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBuYW1lLCBmaW5hbCBTdHJpbmcgY29udGV4dFJvb3QsCiAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGVuYWJsZSwgU3RyaW5nIGFwcHNlcnZUYXJnZXQpCiAgICAgewogICAgICAgICBmaW5hbCBDbWRGYWN0b3J5IGNtZEZhY3RvcnkgPSBnZXRDbWRGYWN0b3J5KCk7CkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIGZpbmFsIENvbm5lY3RDbWQgY29ubmVjdENtZCA9IGNtZEZhY3RvcnkuY3JlYXRlQ29ubmVjdENtZCgKICAgICAgICAgICAgICAgICB1c2VyLCBwYXNzd29yZCwgaG9zdCwgcG9ydCk7CiAKLSAgICAgICAgZmluYWwgRGVwbG95Q21kIGRlcGxveUNtZCA9IGNtZEZhY3RvcnkuY3JlYXRlRGVwbG95Q21kKGFyY2hpdmUsIG5hbWUsIAorICAgICAgICBmaW5hbCBEZXBsb3lDbWQgZGVwbG95Q21kID0gY21kRmFjdG9yeS5jcmVhdGVEZXBsb3lDbWQoYXJjaGl2ZSwgbmFtZSwKICAgICAgICAgICAgICAgICBjb250ZXh0Um9vdCwgZW5hYmxlLCBhcHBzZXJ2VGFyZ2V0KTsKIAogICAgICAgICB0YXJnZXQgPSBuZXcgUGlwZUNtZChjb25uZWN0Q21kLCBkZXBsb3lDbWQpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9EZXBsb3ltZW50VGVzdHNBdXRvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0RlcGxveW1lbnRUZXN0c0F1dG8uamF2YQppbmRleCBkMjFjMmYwLi5jYjMyYjI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0RlcGxveW1lbnRUZXN0c0F1dG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0RlcGxveW1lbnRUZXN0c0F1dG8uamF2YQpAQCAtMzEsNjA0ICszMSw2MDQgQEAKIAogcHVibGljIGNsYXNzIERlcGxveW1lbnRUZXN0c0F1dG8KIHsKLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotCXsKLQkJaWYoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0uZXF1YWxzKCJhbnQiKSkKLQkJCWNhbGxlZEZyb21BbnQgPSB0cnVlOwotCQkKLQkJYm9sZCgiRGVwbG95bWVudCBUZXN0cyBTdGFydGVkIiwgU3lzdGVtLmVycik7Ci0JCWNhbGxlciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlci5uYW1lIik7Ci0JCQotCQlpZihjYWxsZXIgPT0gbnVsbCkKLQkJCWNhbGxlciA9ICJ1bmtub3duIjsKLQkJCi0JCURlcGxveW1lbnRUZXN0c0F1dG8gZHRhID0gbnVsbDsKLQkJCi0JCXRyeQotCQl7Ci0JCQlkdGEgPSBuZXcgRGVwbG95bWVudFRlc3RzQXV0bygpOwotCQkJZHRhLnJ1bigpOwotCQkJYm9sZCgiUkVTVUxUUyBpbiAiICsgZHRhLnJlcG9ydEZpbGUuZ2V0UGF0aCgpLCBTeXN0ZW0uZXJyKTsKLQkJCXByaW50RXJyKCJcblxuXG5cbiIpOwotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJdXNhZ2UoKTsKLQkJfQotCQlmaW5hbGx5Ci0JCXsKLQkJCVRlZS5zdG9wKCk7Ci0JCX0KLQkJU3lzdGVtLmV4aXQoMCk7Ci0JfQotCQotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCi0JcHVibGljIERlcGxveW1lbnRUZXN0c0F1dG8oKSB0aHJvd3MgRGVwbG95bWVudFRlc3RzRXhjZXB0aW9uCi0JewotCQlzdGFydCA9IG5ldyBEYXRlKCk7Ci0JCXRyeQotCQl7Ci0JCQlwcm9wZXJ0aWVzRmlsZSA9IFV0aWxzLnNhZmVHZXRDYW5vbmljYWxGaWxlKG5ldyBGaWxlKFBST1BFUlRJRVNfRklMRSkpOwotCQkJCi0JCQlpZighcHJvcGVydGllc0ZpbGUuZXhpc3RzKCkgJiYgY2FsbGVyLmVxdWFscygiYm5ldmlucyIpKQotCQkJCXByb3BlcnRpZXNGaWxlID0gVXRpbHMuc2FmZUdldENhbm9uaWNhbEZpbGUobmV3IEZpbGUoIkM6L2p3c2VlL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC8iICsgUFJPUEVSVElFU19GSUxFKSk7Ci0JCQkKLQkJCWlmKCFwcm9wZXJ0aWVzRmlsZS5leGlzdHMoKSkKLQkJCQl0aHJvdyBuZXcgRGVwbG95bWVudFRlc3RzRXhjZXB0aW9uKCJObyBwcm9wZXJ0aWVzIGZpbGUuICBFeHBlY3RlZCBpdCBoZXJlOiAiICsKLQkJCQlwcm9wZXJ0aWVzRmlsZS5nZXRQYXRoKCkpOwotCQkJCi0JCQlwcmludEVycigiUHJvcGVydGllcyBGaWxlOiAiICsgcHJvcGVydGllc0ZpbGUuZ2V0UGF0aCgpKTsKLQkJCXByaW50RXJyKCIiKTsKLQkJCWxvYWQoKTsKLQkJCXNldHVwVGVlKCk7Ci0JCQlnZXRDb25zdGFudEFyZ3MoKTsKLQkJCWdldFRhcmdldExpc3QoKTsKLQkJCWdldFNhbXBsZUxpc3QoKTsKLQkJCWdldFRlc3RMaXN0KCk7Ci0JCQlnZXRPcHRpb25zKCk7Ci0JCX0KLQkJY2F0Y2goRGVwbG95bWVudFRlc3RzRXhjZXB0aW9uIGR0ZSkKLQkJewotCQkJdGhyb3cgZHRlOwotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgRGVwbG95bWVudFRlc3RzRXhjZXB0aW9uKCJVbmtub3duIEV4Y2VwdGlvbiBjYXVnaHQgaW4gRGVwbG95bWVudFRlc3RzQXV0by5EZXBsb3ltZW50VGVzdHNBdXRvIiwgZSk7Ci0JCX0KLQl9Ci0JCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCi0JcHVibGljIHZvaWQgcnVuKCkKLQl7Ci0JCS8vIG5vdGU6IE5PVyBhbGwgZXhjZXB0aW9ucyBhcmUgZG9jdW1lbnRlZCBpbnRlcm5hbGx5IGFuZAotCQkvLyB0aGUgcnVuIGNvbnRpbnVlcy4uLgotCQkKLQkJZm9yKEl0ZXJhdG9yIGl0ID0gdGVzdHMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOyApCi0JCXsKLQkJCVRlc3QgdGVzdCA9IChUZXN0KWl0Lm5leHQoKTsKLQkJCQotCQkJdHJ5Ci0JCQl7Ci0JCQkJRGVwbG95ZWRBcHBJbnNwZWN0b3IgaW5zcGVjdG9yID0gbmV3IERlcGxveWVkQXBwSW5zcGVjdG9yKAotCQkJCQl0ZXN0LnRhcmdldC5jY21kLCB0ZXN0LnRhcmdldC5uYW1lKTsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQorICAgIHsKKyAgICAgICAgaWYoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0uZXF1YWxzKCJhbnQiKSkKKyAgICAgICAgICAgIGNhbGxlZEZyb21BbnQgPSB0cnVlOwogCi0JCQkJaWYoaW5zcGVjdG9yLmlzRGVwbG95ZWQodGVzdC5zYW1wbGUubmFtZSkpCi0JCQkJewotCQkJCQl0ZXN0LmFkZENvbW1lbnQoIkFwcCB3YXMgcHJldmlvdXNseSBkZXBsb3llZCBiZWZvcmUgdGhlIHRlc3QuICBVbmRlcGxveWluZyBiZWZvcmUgdGVzdGluZy5cbiIpOworICAgICAgICBib2xkKCJEZXBsb3ltZW50IFRlc3RzIFN0YXJ0ZWQiLCBTeXN0ZW0uZXJyKTsKKyAgICAgICAgY2FsbGVyID0gU3lzdGVtLmdldFByb3BlcnR5KCJ1c2VyLm5hbWUiKTsKIAotCQkJCQl1bmRlcGxveSh0ZXN0KTsgCi0JCQkJCWluc3BlY3Rvci5yZWZyZXNoKCk7Ci0JCQkJCWlmKGluc3BlY3Rvci5pc0RlcGxveWVkKHRlc3Quc2FtcGxlLm5hbWUpKQotCQkJCQl7Ci0JCQkJCQl0ZXN0LmFkZENvbW1lbnQoIkNvdWxkIG5vdCB1bmRlcGxveSBBcHAuICBBYm9ydGVkIHRlc3Rpbmcgb2YgdGhpcyBBcHAuIik7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCQkKLQkJCQlkZXBsb3kodGVzdCk7Ci0JCQkJaW5zcGVjdG9yLnJlZnJlc2goKTsKLQkJCQkKLQkJCQlpZighaW5zcGVjdG9yLmlzRGVwbG95ZWQodGVzdC5zYW1wbGUubmFtZSkpCi0JCQkJewotCQkJCQl0ZXN0LmFkZENvbW1lbnQoIkluc3BlY3RvciByZXBvcnRlZCB0aGF0IEFwcCB3YXMgbm90IGRlcGxveWVkLiIpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJCi0JCQkJdW5kZXBsb3kodGVzdCk7Ci0JCQkJaW5zcGVjdG9yLnJlZnJlc2goKTsKKyAgICAgICAgaWYoY2FsbGVyID09IG51bGwpCisgICAgICAgICAgICBjYWxsZXIgPSAidW5rbm93biI7CiAKLQkJCQlpZihpbnNwZWN0b3IuaXNEZXBsb3llZCh0ZXN0LnNhbXBsZS5uYW1lKSkKLQkJCQl7Ci0JCQkJCXRlc3QuYWRkQ29tbWVudCgiSW5zcGVjdG9yIHJlcG9ydGVkIHRoYXQgQXBwIHdhcyBub3QgdW5kZXBsb3llZC4iKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCXRlc3QuYWRkQ29tbWVudCgiU3VjY2Vzc2Z1bGx5IGRlcGxveWVkIGFuZCB1bmRlcGxveWVkIGFwcCIpOwotCQkJCXRlc3QucGFzc2VkID0gdHJ1ZTsKLQkJCX0KLQkJCWNhdGNoKERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbiBkdGUpCi0JCQl7Ci0JCQkJdGVzdC5hZGQoZHRlKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJfQotCQkKLQkJcmVwb3J0KCk7Ci0JfQotCQotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgICBEZXBsb3ltZW50VGVzdHNBdXRvIGR0YSA9IG51bGw7CiAKLQlwcml2YXRlIHZvaWQgcmVwb3J0KCkKLQl7Ci0JCWVuZCA9IG5ldyBEYXRlKCk7Ci0JCWxvbmcgbXNlYyA9IGVuZC5nZXRUaW1lKCkgLSBzdGFydC5nZXRUaW1lKCk7Ci0JCWRvdWJsZSBzZWMgPSAoZG91YmxlKW1zZWMgLyAxMDAwLjA7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICBkdGEgPSBuZXcgRGVwbG95bWVudFRlc3RzQXV0bygpOworICAgICAgICAgICAgZHRhLnJ1bigpOworICAgICAgICAgICAgYm9sZCgiUkVTVUxUUyBpbiAiICsgZHRhLnJlcG9ydEZpbGUuZ2V0UGF0aCgpLCBTeXN0ZW0uZXJyKTsKKyAgICAgICAgICAgIHByaW50RXJyKCJcblxuXG5cbiIpOworICAgICAgICB9CisgICAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQorICAgICAgICB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5CisgICAgICAgIHsKKyAgICAgICAgICAgIFRlZS5zdG9wKCk7CisgICAgICAgIH0KKyAgICAgICAgU3lzdGVtLmV4aXQoMCk7CisgICAgfQogCi0JCQotCQlwcmludChzdGFycyk7Ci0JCWJvbGQoIlRlc3QgUmVzdWx0cyIsIFN5c3RlbS5vdXQpOwotCQlwcmludChzdGFycyk7Ci0JCXByaW50KCIiKTsKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCi0JCXByaW50KCJUaW1lIFN0YXJ0ZWQ6ICIgKyBzdGFydCk7Ci0JCXByaW50KCJUaW1lIEVuZGVkOiAgICIgKyBlbmQpOwotCQlwcmludCgiVG90YWwgVGltZTogICAiICsgc2VjICsgIiBzZWNvbmRzIik7Ci0JCXByaW50KCIiKTsKLQkJCi0JCWJvbGQoIlN1bW1hcnkiLCBTeXN0ZW0ub3V0KTsKLQkJcHJpbnQoIiIpOwotCQkKLQkJaW50IG51bVRlc3RzID0gdGVzdHMuc2l6ZSgpOwotCQlpbnQgbnVtUGFzc2VkID0gZ2V0TnVtUGFzc2VkKCk7Ci0JCWludCBudW1GYWlsZWQgPSBudW1UZXN0cyAtIG51bVBhc3NlZDsKLQkJcHJpbnQoIlRvdGFsIFRlc3RzOiAiICsgbnVtVGVzdHMpOwotCQlwcmludCgiUGFzc2VkOiAgICAgICIgKyBudW1QYXNzZWQpOwotCQlwcmludCgiRmFpbGVkOiAgICAgICIgKyBudW1GYWlsZWQpOwotCQlwcmludCgiIik7Ci0JCQotCQlib2xkKCJEZXRhaWxzIiwgU3lzdGVtLm91dCk7Ci0JCXByaW50KCIiKTsKKyAgICBwdWJsaWMgRGVwbG95bWVudFRlc3RzQXV0bygpIHRocm93cyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24KKyAgICB7CisgICAgICAgIHN0YXJ0ID0gbmV3IERhdGUoKTsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIHByb3BlcnRpZXNGaWxlID0gVXRpbHMuc2FmZUdldENhbm9uaWNhbEZpbGUobmV3IEZpbGUoUFJPUEVSVElFU19GSUxFKSk7CiAKLQkJaW50IHdoaWNoID0gMTsKLQkJCi0JCWZvcihJdGVyYXRvciBpdCA9IHRlc3RzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTsgKyt3aGljaCkKLQkJewotCQkJVGVzdCB0ZXN0ID0gKFRlc3QpaXQubmV4dCgpOwotCQkJCi0JCQlwcmludCgiVGVzdCAiICsgd2hpY2gpOwotCQkJcHJpbnQoIiIpOwotCQkJcHJpbnQodGVzdC50b1N0cmluZygpKTsKLQkJCXByaW50KHN0YXJzKTsKLQkJCXByaW50KCIiKTsKLQkJfQotCX0KLQkKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQkKLQlwcml2YXRlIHZvaWQgZGVwbG95KFRlc3QgdGVzdCkgdGhyb3dzIERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbgotCXsKLQkJYm9sZCgiRGVwbG95ICIgKyB0ZXN0LnNhbXBsZS5uYW1lICsgIiB0byAiICsgdGVzdC50YXJnZXQubmFtZSwgU3lzdGVtLmVycik7Ci0JCQotCQlDb25uZWN0Q21kIGNjbWQgPSB0ZXN0LnRhcmdldC5jY21kOwotCQlEZXBsb3lDbWQgZGVwbG95Q21kID0gY21kRmFjdG9yeS5jcmVhdGVEZXBsb3lDbWQoCi0JCQl0ZXN0LnNhbXBsZS5maWxlLmdldFBhdGgoKSwKLQkJCXRlc3Quc2FtcGxlLm5hbWUsCi0JCQludWxsLCAvL2NvbnRleHQtcm9vdAotCQkJdHJ1ZSwgLy8gZW5hYmxlCi0JCQl0ZXN0LnRhcmdldC5uYW1lKTsKKyAgICAgICAgICAgIGlmKCFwcm9wZXJ0aWVzRmlsZS5leGlzdHMoKSAmJiBjYWxsZXIuZXF1YWxzKCJibmV2aW5zIikpCisgICAgICAgICAgICAgICAgcHJvcGVydGllc0ZpbGUgPSBVdGlscy5zYWZlR2V0Q2Fub25pY2FsRmlsZShuZXcgRmlsZSgiQzovandzZWUvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50LyIgKyBQUk9QRVJUSUVTX0ZJTEUpKTsKIAotCQlDbWQgcGlwZSA9IG5ldyBQaXBlQ21kKGNjbWQsIGRlcGxveUNtZCk7Ci0gICAgICAgIAotCQl0cnkKLQkJewotCQkJcGlwZS5leGVjdXRlKCk7CQkKLQkJfQotCQljYXRjaChFeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbigiRXJyb3IgZGVwbG95aW5nLiIsIGUpOwotCQl9Ci0JCQotCQlpZihwYXVzZUFmdGVyRGVwbG95KQotCQl7Ci0JCQkvLyBpZiB0aGlzIHByb2dyYW0gaXMgY2FsbGVkIGZyb20gQW50IC0tIHN0ZGluIHdvbid0IHdvcmsuCi0JCQkvLyBTbyB1c2UgYSBkaWFsb2cgYm94Li4uCi0JCQlpZihjYWxsZWRGcm9tQW50KQotCQkJCVV0aWxzLm1lc3NhZ2VCb3goIkp1c3QgZGVwbG95ZWQgIiArIHRlc3Quc2FtcGxlLm5hbWUgKyAiXG5QcmVzcyBPSyB3aGVuIHJlYWR5IHRvIHVuZGVwbG95LiIgLCAiRGVwbG95bWVudCBUZXN0cyBQYXVzZSIpOwotCQkJZWxzZQotCQkJCUNvbnNvbGUucmVhZExpbmUoc3RhcnMgKyAiXG4iICsgCi0JCQkJCWJvbGRpZnkoIlBhdXNpbmcgYWZ0ZXIgRGVwbG95LiAgSGl0IFJldHVybiB0byBjb250aW51ZS4uLiIpICsgCi0JCQkJCSJcbiIgKyBzdGFycyArICJcbiIpOwotCQl9Ci0JfQotCQotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCQotCXByaXZhdGUgdm9pZCB1bmRlcGxveShUZXN0IHRlc3QpIHRocm93cyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24KLQl7Ci0JCWJvbGQoIlVuRGVwbG95ICIgKyB0ZXN0LnNhbXBsZS5uYW1lICsgIiBmcm9tICIgKyB0ZXN0LnRhcmdldC5uYW1lLCBTeXN0ZW0uZXJyKTsKLQkJQ29ubmVjdENtZCBjY21kID0gdGVzdC50YXJnZXQuY2NtZDsKLQkJVW5kZXBsb3lDbWQgdW5kZXBsb3lDbWQgPSBjbWRGYWN0b3J5LmNyZWF0ZVVuZGVwbG95Q21kKAotCQkJdGVzdC5zYW1wbGUubmFtZSwKLQkJCXRlc3QudGFyZ2V0Lm5hbWUpOworICAgICAgICAgICAgaWYoIXByb3BlcnRpZXNGaWxlLmV4aXN0cygpKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24oIk5vIHByb3BlcnRpZXMgZmlsZS4gIEV4cGVjdGVkIGl0IGhlcmU6ICIgKworICAgICAgICAgICAgICAgIHByb3BlcnRpZXNGaWxlLmdldFBhdGgoKSk7CiAKLQkJQ21kIHBpcGUgPSBuZXcgUGlwZUNtZChjY21kLCB1bmRlcGxveUNtZCk7Ci0gICAgICAgIAotCQl0cnkKLQkJewotCQkJcGlwZS5leGVjdXRlKCk7CQkKLQkJfQotCQljYXRjaChFeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbigiRXJyb3IgdW5kZXBsb3lpbmcuIiwgZSk7Ci0JCX0KLQl9Ci0JCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCi0JcHJpdmF0ZSB2b2lkIGdldENvbnN0YW50QXJncygpIHRocm93cyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24KLQl7Ci0JCXBodXAgPSBuZXcgUGh1cChwcm9wcyk7Ci0JfQotCQotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCQotCXByaXZhdGUgdm9pZCBnZXRUYXJnZXRMaXN0KCkgdGhyb3dzIERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbgotCXsKLQkJU3RyaW5nIGVyciA9ICJObyB0YXJnZXRzIHNwZWNpZmllZCBpbiBwcm9wZXJ0aWVzIGZpbGUuICBVc2FnZSBcInRhcmdldHM9Zm9vLGdvbyxob29cIiI7Ci0JCVN0cmluZyBzID0gcHJvcHMuZ2V0UHJvcGVydHkoInRhcmdldHMiKTsKLQkJCi0JCWlmKCFVdGlscy5vayhzKSkKLQkJCXRocm93IG5ldyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24oZXJyKTsKLQkJCi0JCVN0cmluZ1tdIHNzID0gcy5zcGxpdCgiLCIpOwotCQkKLQkJaWYoc3MgPT0gbnVsbCB8fCBzcy5sZW5ndGggPD0gMCkKLQkJCXRocm93IG5ldyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24oZXJyKTsKLQkJCi0JCVNldCB0YXJnZXROYW1lcyA9IG5ldyBIYXNoU2V0KCk7Ci0JCS8vdGFyZ2V0TmFtZXMuYWRkKCJzZXJ2ZXIiKTsKLQkJCi0JCWZvcihpbnQgaSA9IDA7IGkgPCBzcy5sZW5ndGg7IGkrKykKLQkJCXRhcmdldE5hbWVzLmFkZChzc1tpXSk7Ci0JCQotCQl0YXJnZXRzID0gbmV3IEFycmF5TGlzdCgpOwotCQkKLQkJZm9yKEl0ZXJhdG9yIGl0ID0gdGFyZ2V0TmFtZXMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOyApCi0JCXsKLQkJCVN0cmluZyB0YXJnZXROYW1lID0gKFN0cmluZylpdC5uZXh0KCk7Ci0JCQlDb25uZWN0Q21kIGNjbWQgPSBjbWRGYWN0b3J5LmNyZWF0ZUNvbm5lY3RDbWQocGh1cCk7Ci0JCQl0cnkKLQkJCXsKLQkJCQkvLyBub3RlOiBpdCBkb2VzIE5PVCBhY3R1YWxseSBjb25uZWN0IHlldC4uLgotCQkJCWNjbWQuZXhlY3V0ZSgpOwotCQkJfQotCQkJY2F0Y2goRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJdGhyb3cgbmV3IERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbigiQ291bGRuJ3QgY29ubmVjdCB0byB0YXJnZXQ6ICIgKyB0YXJnZXROYW1lLCBlKTsKLQkJCX0KLQkJCQotCQkJdGFyZ2V0cy5hZGQobmV3IFRhcmdldCh0YXJnZXROYW1lLCBjY21kKSk7Ci0JCX0KLQkJCi0JCXByaW50RXJyKCJUYXJnZXRzOiIpOwotCQlpbnQgd2hpY2ggPSAxOwotCQlmb3IoSXRlcmF0b3IgaXQgPSB0YXJnZXROYW1lcy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICsrd2hpY2gpCi0JCQlwcmludEVycigiICAgIiArIHdoaWNoICsgIiAiICsgaXQubmV4dCgpKTsKLQkJCi0JCXByaW50RXJyKCIiKTsKLQl9Ci0JCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCi0JcHJpdmF0ZSB2b2lkIGdldFNhbXBsZUxpc3QoKSB0aHJvd3MgRGVwbG95bWVudFRlc3RzRXhjZXB0aW9uCi0JewotCQlTYW1wbGVHZXR0ZXIgZ2V0dGVyID0gbmV3IFNhbXBsZUdldHRlcihwcm9wcyk7Ci0JCXNhbXBsZXMgPSBnZXR0ZXIuZ2V0U2FtcGxlTGlzdCgpOwotCQlwcmludEVycigiU2FtcGxlczoiKTsKLQkJCi0JCWludCB3aGljaCA9IDE7Ci0JCWZvcihJdGVyYXRvciBpdCA9IHNhbXBsZXMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOyArK3doaWNoKQotCQkJcHJpbnRFcnIoIiAgICIgKyB3aGljaCArICIgIiArICgoVXRpbHMuU2FtcGxlKWl0Lm5leHQoKSkubmFtZSApOwotCQkKLQkJcHJpbnRFcnIoIiIpOwkKLQl9Ci0JCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCi0JcHJpdmF0ZSB2b2lkIGdldFRlc3RMaXN0KCkvLyB0aHJvd3MgRGVwbG95bWVudFRlc3RzRXhjZXB0aW9uCi0JewotCQl0ZXN0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCi0JCWZvcihJdGVyYXRvciBpdHQgPSB0YXJnZXRzLml0ZXJhdG9yKCk7IGl0dC5oYXNOZXh0KCk7ICkKLQkJewotCQkJVGFyZ2V0IHRhcmdldCA9IChUYXJnZXQpaXR0Lm5leHQoKTsKLQkJCQotCQkJZm9yKEl0ZXJhdG9yIGl0cyA9IHNhbXBsZXMuaXRlcmF0b3IoKTsgaXRzLmhhc05leHQoKTsgKQotCQkJewotCQkJCVV0aWxzLlNhbXBsZSBzYW1wbGUgPSAoVXRpbHMuU2FtcGxlKWl0cy5uZXh0KCk7Ci0JCQkJdGVzdHMuYWRkKG5ldyBUZXN0KHNhbXBsZSwgdGFyZ2V0KSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCi0JcHJpdmF0ZSB2b2lkIGdldE9wdGlvbnMoKQotCXsKLQkJU3RyaW5nIHMgPSBwcm9wcy5nZXRQcm9wZXJ0eSgicGF1c2VBZnRlckRlcGxveSIpOwotCQkKLQkJaWYoVXRpbHMub2socykgJiYgcy50b0xvd2VyQ2FzZSgpLmVxdWFscygidHJ1ZSIpKQotCQkJcGF1c2VBZnRlckRlcGxveSA9IHRydWU7Ci0JfQorICAgICAgICAgICAgcHJpbnRFcnIoIlByb3BlcnRpZXMgRmlsZTogIiArIHByb3BlcnRpZXNGaWxlLmdldFBhdGgoKSk7CisgICAgICAgICAgICBwcmludEVycigiIik7CisgICAgICAgICAgICBsb2FkKCk7CisgICAgICAgICAgICBzZXR1cFRlZSgpOworICAgICAgICAgICAgZ2V0Q29uc3RhbnRBcmdzKCk7CisgICAgICAgICAgICBnZXRUYXJnZXRMaXN0KCk7CisgICAgICAgICAgICBnZXRTYW1wbGVMaXN0KCk7CisgICAgICAgICAgICBnZXRUZXN0TGlzdCgpOworICAgICAgICAgICAgZ2V0T3B0aW9ucygpOworICAgICAgICB9CisgICAgICAgIGNhdGNoKERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbiBkdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IGR0ZTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgbmV3IERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbigiVW5rbm93biBFeGNlcHRpb24gY2F1Z2h0IGluIERlcGxveW1lbnRUZXN0c0F1dG8uRGVwbG95bWVudFRlc3RzQXV0byIsIGUpOworICAgICAgICB9CisgICAgfQogCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQkKLQlwcml2YXRlIHZvaWQgbG9hZCgpIHRocm93cyBJT0V4Y2VwdGlvbgotCXsKLQkJSW5wdXRTdHJlYW0gaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKHByb3BlcnRpZXNGaWxlKTsKLQkJcHJvcHMubG9hZChpbik7Ci0JCWluLmNsb3NlKCk7Ci0JfQorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQkKLQlwcml2YXRlIHN0YXRpYyB2b2lkIHByaW50KFN0cmluZyBzKQotCXsKLQkJU3lzdGVtLm91dC5wcmludGxuKHMpOwotCX0KLQkKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCQotCXByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRFcnIoU3RyaW5nIHMpCi0JewotCQlTeXN0ZW0uZXJyLnByaW50bG4ocyk7Ci0JfQotCQotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBib2xkKFN0cmluZyBzLCBQcmludFN0cmVhbSBvdXQpCi0JewotCQlTdHJpbmcgbWVzc2FnZSA9IGJvbGRpZnkocyk7Ci0JCQkKLQkJb3V0LnByaW50bG4oc3RhcnMpOwotCQlvdXQucHJpbnRsbihtZXNzYWdlKTsKLQkJb3V0LnByaW50bG4oc3RhcnMpOwotCX0KLQkKLQkKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBib2xkaWZ5KFN0cmluZyBzKQotCXsKLQkJU3RyaW5nIG1lc3NhZ2UgPSBzOwotCQlpbnQgbGVuID0gKHMgPT0gbnVsbCA/IDAgOiBzLmxlbmd0aCgpKTsKLQkJCi0JCWlmKGxlbiA8IDYwKQotCQl7Ci0JCQltZXNzYWdlID0gIiAgICAgIiArIG1lc3NhZ2UgKyAiICAgICAiOwotCQkJbGVuICs9IDEwOwotCQkJCi0JCQlpZihsZW4gJSAyICE9IDApCi0JCQl7Ci0JCQkJbWVzc2FnZSArPSAiICI7Ci0JCQkJKytsZW47Ci0JCQl9Ci0JCQkKLQkJCWludCBudW1TdGFycyA9ICg4MCAtIGxlbikgLyAyOwotCQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJCi0JCQlmb3IoaW50IGkgPSAwOyBpIDwgbnVtU3RhcnM7IGkrKykKLQkJCXsKLQkJCQlzYi5hcHBlbmQoJyonKTsKLQkJCX0KLQkJCW1lc3NhZ2UgPSBzYi50b1N0cmluZygpICsgbWVzc2FnZSArIHNiLnRvU3RyaW5nKCk7Ci0JCX0KLQkJCi0JCXJldHVybiBtZXNzYWdlOwotCX0KLQkKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCQotCXByaXZhdGUgdm9pZCBzZXR1cFRlZSgpIHRocm93cyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24KLQl7Ci0JCS8vIHdoZXJlIHRvIHNhdmUgdGhlIHJlcG9ydD8KLQkJLy8gKDEpIGluIHRoZSBwcm9wZXJ0aWVzIGZpbGUKLQkJCi0JCVN0cmluZyBmbmFtZSA9IHByb3BzLmdldFByb3BlcnR5KCJyZXBvcnQiKTsKLQkJCi0JCWlmKCFVdGlscy5vayhmbmFtZSkpCi0JCXsKLQkJCS8vICgyKSAtLSB0aGUgZGVmYXVsdAotCQkJZm5hbWUgPSAiLi8iICsgUkVQT1JUX0ZJTEU7Ci0JCX0KLQkJCi0JCXJlcG9ydEZpbGUgPSBVdGlscy5zYWZlR2V0Q2Fub25pY2FsRmlsZShuZXcgRmlsZShmbmFtZSkpOwotCQkKLQkJdHJ5Ci0JCXsKLQkJCVRlZS5zdGFydChyZXBvcnRGaWxlLmdldFBhdGgoKSk7Ci0JCX0KLQkJY2F0Y2goSU9FeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbigiQ291bGQgbm90IGNyZWF0ZSByZXBvcnQgZmlsZTogIiArIHJlcG9ydEZpbGUsIGUpOwotCQl9Ci0JfQotCQotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgcHVibGljIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIC8vIG5vdGU6IE5PVyBhbGwgZXhjZXB0aW9ucyBhcmUgZG9jdW1lbnRlZCBpbnRlcm5hbGx5IGFuZAorICAgICAgICAvLyB0aGUgcnVuIGNvbnRpbnVlcy4uLgogCi0JcHJpdmF0ZSBpbnQgZ2V0TnVtUGFzc2VkKCkKLQl7Ci0JCWludCBudW1QYXNzZWQgPSAwOwotCQkKLQkJZm9yKEl0ZXJhdG9yIGl0ID0gdGVzdHMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOyApCi0JCXsKLQkJCVRlc3QgdGVzdCA9IChUZXN0KWl0Lm5leHQoKTsKLQkJCQotCQkJaWYodGVzdC5wYXNzZWQpCi0JCQkJKytudW1QYXNzZWQ7Ci0JCX0KLQkJCi0JCXJldHVybiBudW1QYXNzZWQ7Ci0JfQotCQotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgIGZvcihJdGVyYXRvciBpdCA9IHRlc3RzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTsgKQorICAgICAgICB7CisgICAgICAgICAgICBUZXN0IHRlc3QgPSAoVGVzdClpdC5uZXh0KCk7CiAKLQlwcml2YXRlIHN0YXRpYyB2b2lkIHVzYWdlKCkKLQl7Ci0JCXByaW50RXJyKCJcblxuXG5cbiIpOwotCQlib2xkKCJVU0FHRSIsIFN5c3RlbS5lcnIpOwotCQkKLQkJZm9yKGludCBpID0gMDsgaSA8IGhlbHAubGVuZ3RoOyBpKyspCi0JCXsKLQkJCXByaW50RXJyKGhlbHBbaV0pOwotCQl9CisgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEZXBsb3llZEFwcEluc3BlY3RvciBpbnNwZWN0b3IgPSBuZXcgRGVwbG95ZWRBcHBJbnNwZWN0b3IoCisgICAgICAgICAgICAgICAgICAgIHRlc3QudGFyZ2V0LmNjbWQsIHRlc3QudGFyZ2V0Lm5hbWUpOwogCi0JfQotCQotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCi0JcHJpdmF0ZQkJCQkJQ21kRmFjdG9yeQljbWRGYWN0b3J5CQk9IEVudi5nZXRDbWRGYWN0b3J5KCk7Ci0JcHJpdmF0ZQkJCQkJRmlsZQkJcHJvcGVydGllc0ZpbGU7Ci0JcHJpdmF0ZQkJCQkJRmlsZQkJcmVwb3J0RmlsZTsKLQlwcml2YXRlCQkJCQlQcm9wZXJ0aWVzCXByb3BzCQkJPSBuZXcgUHJvcGVydGllcygpOwotCXByaXZhdGUJCQkJCVBodXAJCXBodXA7Ci0JcHJpdmF0ZQkJCQkJTGlzdAkJdGFyZ2V0czsKLQlwcml2YXRlCQkJCQlMaXN0CQlzYW1wbGVzOwotCXByaXZhdGUJCQkJCUxpc3QJCXRlc3RzOwotCXByaXZhdGUJCQkJCURhdGUJCXN0YXJ0OwotCXByaXZhdGUJCQkJCURhdGUJCWVuZDsKLQlwcml2YXRlCXN0YXRpYwkJCVN0cmluZwkJc3RhcnM7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwJU3RyaW5nCQlQUk9QRVJUSUVTX0ZJTEUJPSAiLi9EZXBsb3ltZW50VGVzdHMucHJvcGVydGllcyI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwJU3RyaW5nCQlSRVBPUlRfRklMRQkJPSAiLi9EZXBsb3ltZW50VGVzdHMub3V0IjsKLQlwcml2YXRlIHN0YXRpYwkJCVN0cmluZwkJY2FsbGVyOwotCXByaXZhdGUJCQkJCWJvb2xlYW4JCXBhdXNlQWZ0ZXJEZXBsb3kJPSBmYWxzZTsKLQlwcml2YXRlIHN0YXRpYwkJCWJvb2xlYW4JCWNhbGxlZEZyb21BbnQJCT0gZmFsc2U7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwJU3RyaW5nW10JaGVscCA9Ci0JewotCQkiamF2YSAtY3AgPGNsYXNzcGF0aD4gLWVhIGNvbS5zdW4uZW50ZXJwcmlzZS5hZG1pbi5tYmVhbmFwaS5kZXBsb3ltZW50LkRlcGxveW1lbnRUZXN0c0F1dG8iLAotCQkiIiwKLQkJIndoZXJlIDxjbGFzc3BhdGg+IG11c3QgaW5jbHVkZTogbWJlYW5hcGkuamFyLCBqbXhyaS5qYXIgYW5kIGpteHJlbW90ZS5qYXIiLAotCQkiIiwKLQkJIllvdSBtdXN0IHB1dCBpbnN0cnVjdGlvbnMgaW4gYSBmaWxlIG5hbWVkIFwiRGVwbG95bWVudFRlc3RzLnByb3BlcnRpZXNcIiIsCi0JCSJBdCBhIG1pbmltdW0sIHlvdSBtdXN0IHNldHVwIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyAoZXhhbXBsZSB2YWx1ZXMgaW5jbHVkZWQiLAotCQkiIiwKLQkJInVzZXI9YWRtaW4iLAotCQkicG9ydD04Njg2IiwKLQkJInBhc3N3b3JkPWFkbWluYWRtaW4iLAotCQkiaG9zdD1pYXNlbmdzb2w2LnJlZC5pcGxhbmV0LmNvbSIsCi0JCSJzYW1wbGVkaXI9QzovandzZWUvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L3NhbXBsZXMiLAotCQkidGFyZ2V0cz1xYmVydCxmb28iLAotCQkiIiwKLQkJIlRoZSByZXBvcnQgZmlsZSBwYXRoIGRlZmF1bHRzIHRvIFwiRGVwbG95bWVudFRlc3RzLm91dFwiIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4iLAotCQkiWW91IGNhbiBzcGVjaWZ5IGFueSBwYXRoIHlvdSB3YW50IGxpa2Ugc286IiwKLQkJIiIsCi0JCSJyZXBvcnQ9YzovandzZWUvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0RlcGxveW1lbnRUZXN0cy5vdXQiLAotCQkiIiwKLQkJIiIsCi0JCSJ0YXJnZXRzIGlzIGEgY29tbWEtZGVsaW1pdGVkIGxpc3Qgb2YgY2x1c3RlcnMgYW5kIHN0YW5kLWFsb25lIGluc3RhbmNlcy4iLAotCQkic2FtcGxlZGlyIHBvaW50cyB0byBhIGRpcmVjdG9yeSB0aGF0IHlvdSBoYXZlIGZpbGxlZCB3aXRoIHNhbXBsZXMgdG8gYmUgZGVwbG95ZWQgYW5kIHVuZGVwbG95ZWQuIiwKLQkJIlRvIG1ha2UgbWFudWFsIHRlc3RpbmcgcG9zc2libGUgeW91IGNhbiBzZXQgYSBwcm9wZXJ0eSB0aGF0IHdpbGwgY2F1c2UgdGhlIHByb2dyYW0gdG8gcGF1c2UgYW5kIiwKLQkJIndhaXQgZm9yIHlvdSB0byB0eXBlIGluIGEgY2FycmlhZ2UgcmV0dXJuIGFmdGVyIGV2ZXJ5IGRlcGxveW1lbnQuICBUaGlzIGFsbG93cyB5b3UgdG8gY2hlY2sgdGhlIiwKLQkJInNlcnZlciwgcnVuIHRoZSBhcHAsIGV0Yy4gIEhlcmUgaXMgdGhlIHN5bnRheDoiLAotCQkiIiwKLQkJInBhdXNlQWZ0ZXJEZXBsb3k9dHJ1ZSIsCi0JCSIiLAotCQkiIiwKLQkJIiIsCi0JfTsKLQkKLQlzdGF0aWMKLQl7Ci0JCS8vIG5vdGUgLS0gdGhlcmUgbXVzdCBiZSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcywgYnV0IEkgY2FuJ3QgZmluZCBpdCEhCi0JCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICBpZihpbnNwZWN0b3IuaXNEZXBsb3llZCh0ZXN0LnNhbXBsZS5uYW1lKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRlc3QuYWRkQ29tbWVudCgiQXBwIHdhcyBwcmV2aW91c2x5IGRlcGxveWVkIGJlZm9yZSB0aGUgdGVzdC4gIFVuZGVwbG95aW5nIGJlZm9yZSB0ZXN0aW5nLlxuIik7CiAKLQkJZm9yKGludCBpID0gMDsgaSA8IDgwOyBpKyspCi0JCQlzYi5hcHBlbmQoJyonKTsKKyAgICAgICAgICAgICAgICAgICAgdW5kZXBsb3kodGVzdCk7CisgICAgICAgICAgICAgICAgICAgIGluc3BlY3Rvci5yZWZyZXNoKCk7CisgICAgICAgICAgICAgICAgICAgIGlmKGluc3BlY3Rvci5pc0RlcGxveWVkKHRlc3Quc2FtcGxlLm5hbWUpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LmFkZENvbW1lbnQoIkNvdWxkIG5vdCB1bmRlcGxveSBBcHAuICBBYm9ydGVkIHRlc3Rpbmcgb2YgdGhpcyBBcHAuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KIAotCQlzdGFycyA9IHNiLnRvU3RyaW5nKCk7Ci0JfQorICAgICAgICAgICAgICAgIGRlcGxveSh0ZXN0KTsKKyAgICAgICAgICAgICAgICBpbnNwZWN0b3IucmVmcmVzaCgpOwogCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JLy8vLy8vLy8vLy8vLy8vLyAgbmVzdGVkIGNsYXNzZXMgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCQorICAgICAgICAgICAgICAgIGlmKCFpbnNwZWN0b3IuaXNEZXBsb3llZCh0ZXN0LnNhbXBsZS5uYW1lKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRlc3QuYWRkQ29tbWVudCgiSW5zcGVjdG9yIHJlcG9ydGVkIHRoYXQgQXBwIHdhcyBub3QgZGVwbG95ZWQuIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KIAotCQorICAgICAgICAgICAgICAgIHVuZGVwbG95KHRlc3QpOworICAgICAgICAgICAgICAgIGluc3BlY3Rvci5yZWZyZXNoKCk7CiAKLQkKLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBUYXJnZXQKLQl7Ci0JCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotCQl7Ci0JCQlyZXR1cm4gIlRhcmdldDogIiArIG5hbWU7Ci0JCX0KLQkJcHJpdmF0ZSBUYXJnZXQoU3RyaW5nIG5hbWUsIENvbm5lY3RDbWQgY2NtZCkKLQkJewotCQkJdGhpcy5uYW1lID0gbmFtZTsKLQkJCXRoaXMuY2NtZCA9IGNjbWQ7Ci0JCX0KLQkJcHJpdmF0ZSBTdHJpbmcJCW5hbWU7Ci0JCXByaXZhdGUgQ29ubmVjdENtZAljY21kOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBUZXN0Ci0JewotCQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLQkJewotCQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJCi0JCQlpZihwYXNzZWQpCi0JCQkJc2IuYXBwZW5kKCIqKioqKiogUGFzc2VkIikuYXBwZW5kKCdcbicpOwotCQkJZWxzZQotCQkJCXNiLmFwcGVuZCgiKioqKioqIEZhaWxlZCIpLmFwcGVuZCgnXG4nKTsKLQkJCQotCQkJc2IuYXBwZW5kKHNhbXBsZSkuYXBwZW5kKCdcbicpOwotCQkJc2IuYXBwZW5kKHRhcmdldCkuYXBwZW5kKCdcbicpOworICAgICAgICAgICAgICAgIGlmKGluc3BlY3Rvci5pc0RlcGxveWVkKHRlc3Quc2FtcGxlLm5hbWUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGVzdC5hZGRDb21tZW50KCJJbnNwZWN0b3IgcmVwb3J0ZWQgdGhhdCBBcHAgd2FzIG5vdCB1bmRlcGxveWVkLiIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGVzdC5hZGRDb21tZW50KCJTdWNjZXNzZnVsbHkgZGVwbG95ZWQgYW5kIHVuZGVwbG95ZWQgYXBwIik7CisgICAgICAgICAgICAgICAgdGVzdC5wYXNzZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2goRGVwbG95bWVudFRlc3RzRXhjZXB0aW9uIGR0ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZXN0LmFkZChkdGUpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CiAKLQkJCWlmKGNvbW1lbnRzLmxlbmd0aCgpID4gMCkKLQkJCQlzYi5hcHBlbmQoY29tbWVudHMpLmFwcGVuZCgnXG4nKTsKLQkJCQotCQkJaWYoIXBhc3NlZCkKLQkJCXsKLQkJCQlzYi5hcHBlbmQoIkV4Y2VwdGlvbnM6IikuYXBwZW5kKCdcbicpOwotCQkJCWludCB3aGljaCA9IDE7Ci0JCQkJZm9yKEl0ZXJhdG9yIGl0ID0gZXhjZXB0aW9ucy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICsrd2hpY2gpCi0JCQkJewotCQkJCQlFeGNlcHRpb24gZSA9IChFeGNlcHRpb24paXQubmV4dCgpOwotCQkJCQlzYi5hcHBlbmQoIkV4Y2VwdGlvbiAjICIgKyB3aGljaCkuYXBwZW5kKCdcbicpOwotCQkJCQkKLQkJCQkJU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotCQkJCQlQcmludFdyaXRlciAgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3csIHRydWUpOwotCQkJCQllLnByaW50U3RhY2tUcmFjZShwdyk7Ci0JCQkJCXB3LmNsb3NlKCk7Ci0JCQkJCQotCQkJCQlzYi5hcHBlbmQoc3cudG9TdHJpbmcoKSk7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0JCX0KLQkJCi0JCXByaXZhdGUgVGVzdChVdGlscy5TYW1wbGUgc2FtcGxlLCBUYXJnZXQgdGFyZ2V0KQotCQl7Ci0JCQl0aGlzLnNhbXBsZSA9IHNhbXBsZTsKLQkJCXRoaXMudGFyZ2V0ID0gdGFyZ2V0OwotCQl9Ci0JCXByaXZhdGUgdm9pZCBhZGRDb21tZW50KFN0cmluZyBzKQotCQl7Ci0JCQljb21tZW50cyArPSBzOwotCQl9CisgICAgICAgIHJlcG9ydCgpOworICAgIH0KIAotCQlwcml2YXRlIHZvaWQgYWRkKERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbiBkdGUpCi0JCXsKLQkJCWV4Y2VwdGlvbnMuYWRkKGR0ZSk7Ci0JCX0KLQkJVXRpbHMuU2FtcGxlCXNhbXBsZTsKLQkJVGFyZ2V0CXRhcmdldDsKLQkJU3RyaW5nCWNvbW1lbnRzID0gbmV3IFN0cmluZygpOwotCQlMaXN0CWV4Y2VwdGlvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JfQorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgcHJpdmF0ZSB2b2lkIHJlcG9ydCgpCisgICAgeworICAgICAgICBlbmQgPSBuZXcgRGF0ZSgpOworICAgICAgICBsb25nIG1zZWMgPSBlbmQuZ2V0VGltZSgpIC0gc3RhcnQuZ2V0VGltZSgpOworICAgICAgICBkb3VibGUgc2VjID0gKGRvdWJsZSltc2VjIC8gMTAwMC4wOworCisKKyAgICAgICAgcHJpbnQoc3RhcnMpOworICAgICAgICBib2xkKCJUZXN0IFJlc3VsdHMiLCBTeXN0ZW0ub3V0KTsKKyAgICAgICAgcHJpbnQoc3RhcnMpOworICAgICAgICBwcmludCgiIik7CisKKyAgICAgICAgcHJpbnQoIlRpbWUgU3RhcnRlZDogIiArIHN0YXJ0KTsKKyAgICAgICAgcHJpbnQoIlRpbWUgRW5kZWQ6ICAgIiArIGVuZCk7CisgICAgICAgIHByaW50KCJUb3RhbCBUaW1lOiAgICIgKyBzZWMgKyAiIHNlY29uZHMiKTsKKyAgICAgICAgcHJpbnQoIiIpOworCisgICAgICAgIGJvbGQoIlN1bW1hcnkiLCBTeXN0ZW0ub3V0KTsKKyAgICAgICAgcHJpbnQoIiIpOworCisgICAgICAgIGludCBudW1UZXN0cyA9IHRlc3RzLnNpemUoKTsKKyAgICAgICAgaW50IG51bVBhc3NlZCA9IGdldE51bVBhc3NlZCgpOworICAgICAgICBpbnQgbnVtRmFpbGVkID0gbnVtVGVzdHMgLSBudW1QYXNzZWQ7CisgICAgICAgIHByaW50KCJUb3RhbCBUZXN0czogIiArIG51bVRlc3RzKTsKKyAgICAgICAgcHJpbnQoIlBhc3NlZDogICAgICAiICsgbnVtUGFzc2VkKTsKKyAgICAgICAgcHJpbnQoIkZhaWxlZDogICAgICAiICsgbnVtRmFpbGVkKTsKKyAgICAgICAgcHJpbnQoIiIpOworCisgICAgICAgIGJvbGQoIkRldGFpbHMiLCBTeXN0ZW0ub3V0KTsKKyAgICAgICAgcHJpbnQoIiIpOworCisgICAgICAgIGludCB3aGljaCA9IDE7CisKKyAgICAgICAgZm9yKEl0ZXJhdG9yIGl0ID0gdGVzdHMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOyArK3doaWNoKQorICAgICAgICB7CisgICAgICAgICAgICBUZXN0IHRlc3QgPSAoVGVzdClpdC5uZXh0KCk7CisKKyAgICAgICAgICAgIHByaW50KCJUZXN0ICIgKyB3aGljaCk7CisgICAgICAgICAgICBwcmludCgiIik7CisgICAgICAgICAgICBwcmludCh0ZXN0LnRvU3RyaW5nKCkpOworICAgICAgICAgICAgcHJpbnQoc3RhcnMpOworICAgICAgICAgICAgcHJpbnQoIiIpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBwcml2YXRlIHZvaWQgZGVwbG95KFRlc3QgdGVzdCkgdGhyb3dzIERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgYm9sZCgiRGVwbG95ICIgKyB0ZXN0LnNhbXBsZS5uYW1lICsgIiB0byAiICsgdGVzdC50YXJnZXQubmFtZSwgU3lzdGVtLmVycik7CisKKyAgICAgICAgQ29ubmVjdENtZCBjY21kID0gdGVzdC50YXJnZXQuY2NtZDsKKyAgICAgICAgRGVwbG95Q21kIGRlcGxveUNtZCA9IGNtZEZhY3RvcnkuY3JlYXRlRGVwbG95Q21kKAorICAgICAgICAgICAgdGVzdC5zYW1wbGUuZmlsZS5nZXRQYXRoKCksCisgICAgICAgICAgICB0ZXN0LnNhbXBsZS5uYW1lLAorICAgICAgICAgICAgbnVsbCwgLy9jb250ZXh0LXJvb3QKKyAgICAgICAgICAgIHRydWUsIC8vIGVuYWJsZQorICAgICAgICAgICAgdGVzdC50YXJnZXQubmFtZSk7CisKKyAgICAgICAgQ21kIHBpcGUgPSBuZXcgUGlwZUNtZChjY21kLCBkZXBsb3lDbWQpOworCisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICBwaXBlLmV4ZWN1dGUoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgbmV3IERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbigiRXJyb3IgZGVwbG95aW5nLiIsIGUpOworICAgICAgICB9CisKKyAgICAgICAgaWYocGF1c2VBZnRlckRlcGxveSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gaWYgdGhpcyBwcm9ncmFtIGlzIGNhbGxlZCBmcm9tIEFudCAtLSBzdGRpbiB3b24ndCB3b3JrLgorICAgICAgICAgICAgLy8gU28gdXNlIGEgZGlhbG9nIGJveC4uLgorICAgICAgICAgICAgaWYoY2FsbGVkRnJvbUFudCkKKyAgICAgICAgICAgICAgICBVdGlscy5tZXNzYWdlQm94KCJKdXN0IGRlcGxveWVkICIgKyB0ZXN0LnNhbXBsZS5uYW1lICsgIlxuUHJlc3MgT0sgd2hlbiByZWFkeSB0byB1bmRlcGxveS4iICwgIkRlcGxveW1lbnQgVGVzdHMgUGF1c2UiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBDb25zb2xlLnJlYWRMaW5lKHN0YXJzICsgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIGJvbGRpZnkoIlBhdXNpbmcgYWZ0ZXIgRGVwbG95LiAgSGl0IFJldHVybiB0byBjb250aW51ZS4uLiIpICsKKyAgICAgICAgICAgICAgICAgICAgIlxuIiArIHN0YXJzICsgIlxuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIHByaXZhdGUgdm9pZCB1bmRlcGxveShUZXN0IHRlc3QpIHRocm93cyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24KKyAgICB7CisgICAgICAgIGJvbGQoIlVuRGVwbG95ICIgKyB0ZXN0LnNhbXBsZS5uYW1lICsgIiBmcm9tICIgKyB0ZXN0LnRhcmdldC5uYW1lLCBTeXN0ZW0uZXJyKTsKKyAgICAgICAgQ29ubmVjdENtZCBjY21kID0gdGVzdC50YXJnZXQuY2NtZDsKKyAgICAgICAgVW5kZXBsb3lDbWQgdW5kZXBsb3lDbWQgPSBjbWRGYWN0b3J5LmNyZWF0ZVVuZGVwbG95Q21kKAorICAgICAgICAgICAgdGVzdC5zYW1wbGUubmFtZSwKKyAgICAgICAgICAgIHRlc3QudGFyZ2V0Lm5hbWUpOworCisgICAgICAgIENtZCBwaXBlID0gbmV3IFBpcGVDbWQoY2NtZCwgdW5kZXBsb3lDbWQpOworCisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICBwaXBlLmV4ZWN1dGUoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgbmV3IERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbigiRXJyb3IgdW5kZXBsb3lpbmcuIiwgZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIHByaXZhdGUgdm9pZCBnZXRDb25zdGFudEFyZ3MoKSB0aHJvd3MgRGVwbG95bWVudFRlc3RzRXhjZXB0aW9uCisgICAgeworICAgICAgICBwaHVwID0gbmV3IFBodXAocHJvcHMpOworICAgIH0KKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgcHJpdmF0ZSB2b2lkIGdldFRhcmdldExpc3QoKSB0aHJvd3MgRGVwbG95bWVudFRlc3RzRXhjZXB0aW9uCisgICAgeworICAgICAgICBTdHJpbmcgZXJyID0gIk5vIHRhcmdldHMgc3BlY2lmaWVkIGluIHByb3BlcnRpZXMgZmlsZS4gIFVzYWdlIFwidGFyZ2V0cz1mb28sZ29vLGhvb1wiIjsKKyAgICAgICAgU3RyaW5nIHMgPSBwcm9wcy5nZXRQcm9wZXJ0eSgidGFyZ2V0cyIpOworCisgICAgICAgIGlmKCFVdGlscy5vayhzKSkKKyAgICAgICAgICAgIHRocm93IG5ldyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24oZXJyKTsKKworICAgICAgICBTdHJpbmdbXSBzcyA9IHMuc3BsaXQoIiwiKTsKKworICAgICAgICBpZihzcyA9PSBudWxsIHx8IHNzLmxlbmd0aCA8PSAwKQorICAgICAgICAgICAgdGhyb3cgbmV3IERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbihlcnIpOworCisgICAgICAgIFNldCB0YXJnZXROYW1lcyA9IG5ldyBIYXNoU2V0KCk7CisgICAgICAgIC8vdGFyZ2V0TmFtZXMuYWRkKCJzZXJ2ZXIiKTsKKworICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgc3MubGVuZ3RoOyBpKyspCisgICAgICAgICAgICB0YXJnZXROYW1lcy5hZGQoc3NbaV0pOworCisgICAgICAgIHRhcmdldHMgPSBuZXcgQXJyYXlMaXN0KCk7CisKKyAgICAgICAgZm9yKEl0ZXJhdG9yIGl0ID0gdGFyZ2V0TmFtZXMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOyApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZyB0YXJnZXROYW1lID0gKFN0cmluZylpdC5uZXh0KCk7CisgICAgICAgICAgICBDb25uZWN0Q21kIGNjbWQgPSBjbWRGYWN0b3J5LmNyZWF0ZUNvbm5lY3RDbWQocGh1cCk7CisgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBub3RlOiBpdCBkb2VzIE5PVCBhY3R1YWxseSBjb25uZWN0IHlldC4uLgorICAgICAgICAgICAgICAgIGNjbWQuZXhlY3V0ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbigiQ291bGRuJ3QgY29ubmVjdCB0byB0YXJnZXQ6ICIgKyB0YXJnZXROYW1lLCBlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGFyZ2V0cy5hZGQobmV3IFRhcmdldCh0YXJnZXROYW1lLCBjY21kKSk7CisgICAgICAgIH0KKworICAgICAgICBwcmludEVycigiVGFyZ2V0czoiKTsKKyAgICAgICAgaW50IHdoaWNoID0gMTsKKyAgICAgICAgZm9yKEl0ZXJhdG9yIGl0ID0gdGFyZ2V0TmFtZXMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOyArK3doaWNoKQorICAgICAgICAgICAgcHJpbnRFcnIoIiAgICIgKyB3aGljaCArICIgIiArIGl0Lm5leHQoKSk7CisKKyAgICAgICAgcHJpbnRFcnIoIiIpOworICAgIH0KKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgcHJpdmF0ZSB2b2lkIGdldFNhbXBsZUxpc3QoKSB0aHJvd3MgRGVwbG95bWVudFRlc3RzRXhjZXB0aW9uCisgICAgeworICAgICAgICBTYW1wbGVHZXR0ZXIgZ2V0dGVyID0gbmV3IFNhbXBsZUdldHRlcihwcm9wcyk7CisgICAgICAgIHNhbXBsZXMgPSBnZXR0ZXIuZ2V0U2FtcGxlTGlzdCgpOworICAgICAgICBwcmludEVycigiU2FtcGxlczoiKTsKKworICAgICAgICBpbnQgd2hpY2ggPSAxOworICAgICAgICBmb3IoSXRlcmF0b3IgaXQgPSBzYW1wbGVzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTsgKyt3aGljaCkKKyAgICAgICAgICAgIHByaW50RXJyKCIgICAiICsgd2hpY2ggKyAiICIgKyAoKFV0aWxzLlNhbXBsZSlpdC5uZXh0KCkpLm5hbWUgKTsKKworICAgICAgICBwcmludEVycigiIik7CisgICAgfQorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBwcml2YXRlIHZvaWQgZ2V0VGVzdExpc3QoKS8vIHRocm93cyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24KKyAgICB7CisgICAgICAgIHRlc3RzID0gbmV3IEFycmF5TGlzdCgpOworCisgICAgICAgIGZvcihJdGVyYXRvciBpdHQgPSB0YXJnZXRzLml0ZXJhdG9yKCk7IGl0dC5oYXNOZXh0KCk7ICkKKyAgICAgICAgeworICAgICAgICAgICAgVGFyZ2V0IHRhcmdldCA9IChUYXJnZXQpaXR0Lm5leHQoKTsKKworICAgICAgICAgICAgZm9yKEl0ZXJhdG9yIGl0cyA9IHNhbXBsZXMuaXRlcmF0b3IoKTsgaXRzLmhhc05leHQoKTsgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFV0aWxzLlNhbXBsZSBzYW1wbGUgPSAoVXRpbHMuU2FtcGxlKWl0cy5uZXh0KCk7CisgICAgICAgICAgICAgICAgdGVzdHMuYWRkKG5ldyBUZXN0KHNhbXBsZSwgdGFyZ2V0KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIHByaXZhdGUgdm9pZCBnZXRPcHRpb25zKCkKKyAgICB7CisgICAgICAgIFN0cmluZyBzID0gcHJvcHMuZ2V0UHJvcGVydHkoInBhdXNlQWZ0ZXJEZXBsb3kiKTsKKworICAgICAgICBpZihVdGlscy5vayhzKSAmJiBzLnRvTG93ZXJDYXNlKCkuZXF1YWxzKCJ0cnVlIikpCisgICAgICAgICAgICBwYXVzZUFmdGVyRGVwbG95ID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgcHJpdmF0ZSB2b2lkIGxvYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24KKyAgICB7CisgICAgICAgIElucHV0U3RyZWFtIGluID0gbmV3IEZpbGVJbnB1dFN0cmVhbShwcm9wZXJ0aWVzRmlsZSk7CisgICAgICAgIHByb3BzLmxvYWQoaW4pOworICAgICAgICBpbi5jbG9zZSgpOworICAgIH0KKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHByaW50KFN0cmluZyBzKQorICAgIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMpOworICAgIH0KKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHByaW50RXJyKFN0cmluZyBzKQorICAgIHsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKHMpOworICAgIH0KKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGJvbGQoU3RyaW5nIHMsIFByaW50U3RyZWFtIG91dCkKKyAgICB7CisgICAgICAgIFN0cmluZyBtZXNzYWdlID0gYm9sZGlmeShzKTsKKworICAgICAgICBvdXQucHJpbnRsbihzdGFycyk7CisgICAgICAgIG91dC5wcmludGxuKG1lc3NhZ2UpOworICAgICAgICBvdXQucHJpbnRsbihzdGFycyk7CisgICAgfQorCisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGJvbGRpZnkoU3RyaW5nIHMpCisgICAgeworICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IHM7CisgICAgICAgIGludCBsZW4gPSAocyA9PSBudWxsID8gMCA6IHMubGVuZ3RoKCkpOworCisgICAgICAgIGlmKGxlbiA8IDYwKQorICAgICAgICB7CisgICAgICAgICAgICBtZXNzYWdlID0gIiAgICAgIiArIG1lc3NhZ2UgKyAiICAgICAiOworICAgICAgICAgICAgbGVuICs9IDEwOworCisgICAgICAgICAgICBpZihsZW4gJSAyICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiICI7CisgICAgICAgICAgICAgICAgKytsZW47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBudW1TdGFycyA9ICg4MCAtIGxlbikgLyAyOworICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCisgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtU3RhcnM7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzYi5hcHBlbmQoJyonKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lc3NhZ2UgPSBzYi50b1N0cmluZygpICsgbWVzc2FnZSArIHNiLnRvU3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbWVzc2FnZTsKKyAgICB9CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgcHJpdmF0ZSB2b2lkIHNldHVwVGVlKCkgdGhyb3dzIERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgLy8gd2hlcmUgdG8gc2F2ZSB0aGUgcmVwb3J0PworICAgICAgICAvLyAoMSkgaW4gdGhlIHByb3BlcnRpZXMgZmlsZQorCisgICAgICAgIFN0cmluZyBmbmFtZSA9IHByb3BzLmdldFByb3BlcnR5KCJyZXBvcnQiKTsKKworICAgICAgICBpZighVXRpbHMub2soZm5hbWUpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyAoMikgLS0gdGhlIGRlZmF1bHQKKyAgICAgICAgICAgIGZuYW1lID0gIi4vIiArIFJFUE9SVF9GSUxFOworICAgICAgICB9CisKKyAgICAgICAgcmVwb3J0RmlsZSA9IFV0aWxzLnNhZmVHZXRDYW5vbmljYWxGaWxlKG5ldyBGaWxlKGZuYW1lKSk7CisKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIFRlZS5zdGFydChyZXBvcnRGaWxlLmdldFBhdGgoKSk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goSU9FeGNlcHRpb24gZSkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgbmV3IERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbigiQ291bGQgbm90IGNyZWF0ZSByZXBvcnQgZmlsZTogIiArIHJlcG9ydEZpbGUsIGUpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIHByaXZhdGUgaW50IGdldE51bVBhc3NlZCgpCisgICAgeworICAgICAgICBpbnQgbnVtUGFzc2VkID0gMDsKKworICAgICAgICBmb3IoSXRlcmF0b3IgaXQgPSB0ZXN0cy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkKKyAgICAgICAgeworICAgICAgICAgICAgVGVzdCB0ZXN0ID0gKFRlc3QpaXQubmV4dCgpOworCisgICAgICAgICAgICBpZih0ZXN0LnBhc3NlZCkKKyAgICAgICAgICAgICAgICArK251bVBhc3NlZDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBudW1QYXNzZWQ7CisgICAgfQorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgdXNhZ2UoKQorICAgIHsKKyAgICAgICAgcHJpbnRFcnIoIlxuXG5cblxuIik7CisgICAgICAgIGJvbGQoIlVTQUdFIiwgU3lzdGVtLmVycik7CisKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGhlbHAubGVuZ3RoOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50RXJyKGhlbHBbaV0pOworICAgICAgICB9CisKKyAgICB9CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgcHJpdmF0ZSAgICAgICAgICAgICAgICAgICAgQ21kRmFjdG9yeSAgICBjbWRGYWN0b3J5ICAgICAgICA9IEVudi5nZXRDbWRGYWN0b3J5KCk7CisgICAgcHJpdmF0ZSAgICAgICAgICAgICAgICAgICAgRmlsZSAgICAgICAgcHJvcGVydGllc0ZpbGU7CisgICAgcHJpdmF0ZSAgICAgICAgICAgICAgICAgICAgRmlsZSAgICAgICAgcmVwb3J0RmlsZTsKKyAgICBwcml2YXRlICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzICAgIHByb3BzICAgICAgICAgICAgPSBuZXcgUHJvcGVydGllcygpOworICAgIHByaXZhdGUgICAgICAgICAgICAgICAgICAgIFBodXAgICAgICAgIHBodXA7CisgICAgcHJpdmF0ZSAgICAgICAgICAgICAgICAgICAgTGlzdCAgICAgICAgdGFyZ2V0czsKKyAgICBwcml2YXRlICAgICAgICAgICAgICAgICAgICBMaXN0ICAgICAgICBzYW1wbGVzOworICAgIHByaXZhdGUgICAgICAgICAgICAgICAgICAgIExpc3QgICAgICAgIHRlc3RzOworICAgIHByaXZhdGUgICAgICAgICAgICAgICAgICAgIERhdGUgICAgICAgIHN0YXJ0OworICAgIHByaXZhdGUgICAgICAgICAgICAgICAgICAgIERhdGUgICAgICAgIGVuZDsKKyAgICBwcml2YXRlICAgIHN0YXRpYyAgICAgICAgICAgIFN0cmluZyAgICAgICAgc3RhcnM7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgICAgU3RyaW5nICAgICAgICBQUk9QRVJUSUVTX0ZJTEUgICAgPSAiLi9EZXBsb3ltZW50VGVzdHMucHJvcGVydGllcyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgICAgU3RyaW5nICAgICAgICBSRVBPUlRfRklMRSAgICAgICAgPSAiLi9EZXBsb3ltZW50VGVzdHMub3V0IjsKKyAgICBwcml2YXRlIHN0YXRpYyAgICAgICAgICAgIFN0cmluZyAgICAgICAgY2FsbGVyOworICAgIHByaXZhdGUgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gICAgICAgIHBhdXNlQWZ0ZXJEZXBsb3kgICAgPSBmYWxzZTsKKyAgICBwcml2YXRlIHN0YXRpYyAgICAgICAgICAgIGJvb2xlYW4gICAgICAgIGNhbGxlZEZyb21BbnQgICAgICAgID0gZmFsc2U7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgICAgU3RyaW5nW10gICAgaGVscCA9CisgICAgeworICAgICAgICAiamF2YSAtY3AgPGNsYXNzcGF0aD4gLWVhIGNvbS5zdW4uZW50ZXJwcmlzZS5hZG1pbi5tYmVhbmFwaS5kZXBsb3ltZW50LkRlcGxveW1lbnRUZXN0c0F1dG8iLAorICAgICAgICAiIiwKKyAgICAgICAgIndoZXJlIDxjbGFzc3BhdGg+IG11c3QgaW5jbHVkZTogbWJlYW5hcGkuamFyLCBqbXhyaS5qYXIgYW5kIGpteHJlbW90ZS5qYXIiLAorICAgICAgICAiIiwKKyAgICAgICAgIllvdSBtdXN0IHB1dCBpbnN0cnVjdGlvbnMgaW4gYSBmaWxlIG5hbWVkIFwiRGVwbG95bWVudFRlc3RzLnByb3BlcnRpZXNcIiIsCisgICAgICAgICJBdCBhIG1pbmltdW0sIHlvdSBtdXN0IHNldHVwIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyAoZXhhbXBsZSB2YWx1ZXMgaW5jbHVkZWQiLAorICAgICAgICAiIiwKKyAgICAgICAgInVzZXI9YWRtaW4iLAorICAgICAgICAicG9ydD04Njg2IiwKKyAgICAgICAgInBhc3N3b3JkPWFkbWluYWRtaW4iLAorICAgICAgICAiaG9zdD1pYXNlbmdzb2w2LnJlZC5pcGxhbmV0LmNvbSIsCisgICAgICAgICJzYW1wbGVkaXI9QzovandzZWUvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L3NhbXBsZXMiLAorICAgICAgICAidGFyZ2V0cz1xYmVydCxmb28iLAorICAgICAgICAiIiwKKyAgICAgICAgIlRoZSByZXBvcnQgZmlsZSBwYXRoIGRlZmF1bHRzIHRvIFwiRGVwbG95bWVudFRlc3RzLm91dFwiIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4iLAorICAgICAgICAiWW91IGNhbiBzcGVjaWZ5IGFueSBwYXRoIHlvdSB3YW50IGxpa2Ugc286IiwKKyAgICAgICAgIiIsCisgICAgICAgICJyZXBvcnQ9YzovandzZWUvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0RlcGxveW1lbnRUZXN0cy5vdXQiLAorICAgICAgICAiIiwKKyAgICAgICAgIiIsCisgICAgICAgICJ0YXJnZXRzIGlzIGEgY29tbWEtZGVsaW1pdGVkIGxpc3Qgb2YgY2x1c3RlcnMgYW5kIHN0YW5kLWFsb25lIGluc3RhbmNlcy4iLAorICAgICAgICAic2FtcGxlZGlyIHBvaW50cyB0byBhIGRpcmVjdG9yeSB0aGF0IHlvdSBoYXZlIGZpbGxlZCB3aXRoIHNhbXBsZXMgdG8gYmUgZGVwbG95ZWQgYW5kIHVuZGVwbG95ZWQuIiwKKyAgICAgICAgIlRvIG1ha2UgbWFudWFsIHRlc3RpbmcgcG9zc2libGUgeW91IGNhbiBzZXQgYSBwcm9wZXJ0eSB0aGF0IHdpbGwgY2F1c2UgdGhlIHByb2dyYW0gdG8gcGF1c2UgYW5kIiwKKyAgICAgICAgIndhaXQgZm9yIHlvdSB0byB0eXBlIGluIGEgY2FycmlhZ2UgcmV0dXJuIGFmdGVyIGV2ZXJ5IGRlcGxveW1lbnQuICBUaGlzIGFsbG93cyB5b3UgdG8gY2hlY2sgdGhlIiwKKyAgICAgICAgInNlcnZlciwgcnVuIHRoZSBhcHAsIGV0Yy4gIEhlcmUgaXMgdGhlIHN5bnRheDoiLAorICAgICAgICAiIiwKKyAgICAgICAgInBhdXNlQWZ0ZXJEZXBsb3k9dHJ1ZSIsCisgICAgICAgICIiLAorICAgICAgICAiIiwKKyAgICAgICAgIiIsCisgICAgfTsKKworICAgIHN0YXRpYworICAgIHsKKyAgICAgICAgLy8gbm90ZSAtLSB0aGVyZSBtdXN0IGJlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzLCBidXQgSSBjYW4ndCBmaW5kIGl0ISEKKyAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCA4MDsgaSsrKQorICAgICAgICAgICAgc2IuYXBwZW5kKCcqJyk7CisKKyAgICAgICAgc3RhcnMgPSBzYi50b1N0cmluZygpOworICAgIH0KKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vLy8vLy8vLy8vLy8vLy8gIG5lc3RlZCBjbGFzc2VzICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCisKKworCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVGFyZ2V0CisgICAgeworICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICJUYXJnZXQ6ICIgKyBuYW1lOworICAgICAgICB9CisgICAgICAgIHByaXZhdGUgVGFyZ2V0KFN0cmluZyBuYW1lLCBDb25uZWN0Q21kIGNjbWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgICAgICAgICB0aGlzLmNjbWQgPSBjY21kOworICAgICAgICB9CisgICAgICAgIHByaXZhdGUgU3RyaW5nICAgICAgICBuYW1lOworICAgICAgICBwcml2YXRlIENvbm5lY3RDbWQgICAgY2NtZDsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBUZXN0CisgICAgeworICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCisgICAgICAgICAgICBpZihwYXNzZWQpCisgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCIqKioqKiogUGFzc2VkIikuYXBwZW5kKCdcbicpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiKioqKioqIEZhaWxlZCIpLmFwcGVuZCgnXG4nKTsKKworICAgICAgICAgICAgc2IuYXBwZW5kKHNhbXBsZSkuYXBwZW5kKCdcbicpOworICAgICAgICAgICAgc2IuYXBwZW5kKHRhcmdldCkuYXBwZW5kKCdcbicpOworCisgICAgICAgICAgICBpZihjb21tZW50cy5sZW5ndGgoKSA+IDApCisgICAgICAgICAgICAgICAgc2IuYXBwZW5kKGNvbW1lbnRzKS5hcHBlbmQoJ1xuJyk7CisKKyAgICAgICAgICAgIGlmKCFwYXNzZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCJFeGNlcHRpb25zOiIpLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgICAgICAgICBpbnQgd2hpY2ggPSAxOworICAgICAgICAgICAgICAgIGZvcihJdGVyYXRvciBpdCA9IGV4Y2VwdGlvbnMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOyArK3doaWNoKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uIGUgPSAoRXhjZXB0aW9uKWl0Lm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCJFeGNlcHRpb24gIyAiICsgd2hpY2gpLmFwcGVuZCgnXG4nKTsKKworICAgICAgICAgICAgICAgICAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7CisgICAgICAgICAgICAgICAgICAgIFByaW50V3JpdGVyICBwdyA9IG5ldyBQcmludFdyaXRlcihzdywgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKHB3KTsKKyAgICAgICAgICAgICAgICAgICAgcHcuY2xvc2UoKTsKKworICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoc3cudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIFRlc3QoVXRpbHMuU2FtcGxlIHNhbXBsZSwgVGFyZ2V0IHRhcmdldCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy5zYW1wbGUgPSBzYW1wbGU7CisgICAgICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDsKKyAgICAgICAgfQorICAgICAgICBwcml2YXRlIHZvaWQgYWRkQ29tbWVudChTdHJpbmcgcykKKyAgICAgICAgeworICAgICAgICAgICAgY29tbWVudHMgKz0gczsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBhZGQoRGVwbG95bWVudFRlc3RzRXhjZXB0aW9uIGR0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgZXhjZXB0aW9ucy5hZGQoZHRlKTsKKyAgICAgICAgfQorICAgICAgICBVdGlscy5TYW1wbGUgICAgc2FtcGxlOworICAgICAgICBUYXJnZXQgICAgdGFyZ2V0OworICAgICAgICBTdHJpbmcgICAgY29tbWVudHMgPSBuZXcgU3RyaW5nKCk7CisgICAgICAgIExpc3QgICAgZXhjZXB0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKKyAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvRGVwbG95bWVudFRlc3RzRXhjZXB0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0RlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbi5qYXZhCmluZGV4IGFhYjE0YzQuLjIwOWUwZTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvRGVwbG95bWVudFRlc3RzRXhjZXB0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9EZXBsb3ltZW50VGVzdHNFeGNlcHRpb24uamF2YQpAQCAtMjgsMTkgKzI4LDE5IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KIHsKLQlwdWJsaWMgRGVwbG95bWVudFRlc3RzRXhjZXB0aW9uKFN0cmluZyBzKQotCXsKLQkJc3VwZXIocyk7Ci0JfQorICAgIHB1YmxpYyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24oU3RyaW5nIHMpCisgICAgeworICAgICAgICBzdXBlcihzKTsKKyAgICB9CiAKLQlwdWJsaWMgRGVwbG95bWVudFRlc3RzRXhjZXB0aW9uKFRocm93YWJsZSB0KQotCXsKLQkJc3VwZXIodCk7Ci0JfQorICAgIHB1YmxpYyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24oVGhyb3dhYmxlIHQpCisgICAgeworICAgICAgICBzdXBlcih0KTsKKyAgICB9CiAKLQlwdWJsaWMgRGVwbG95bWVudFRlc3RzRXhjZXB0aW9uKFN0cmluZyBzLCBUaHJvd2FibGUgdCkKLQl7Ci0JCXN1cGVyKHMsIHQpOwotCX0KLQkKKyAgICBwdWJsaWMgRGVwbG95bWVudFRlc3RzRXhjZXB0aW9uKFN0cmluZyBzLCBUaHJvd2FibGUgdCkKKyAgICB7CisgICAgICAgIHN1cGVyKHMsIHQpOworICAgIH0KKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9EZXBsb3ltZW50VGVzdHNVSS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9EZXBsb3ltZW50VGVzdHNVSS5qYXZhCmluZGV4IDJmNWJjYWUuLmRhMmZhZGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvRGVwbG95bWVudFRlc3RzVUkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0RlcGxveW1lbnRUZXN0c1VJLmphdmEKQEAgLTI2LDI2OSArMjYsMjY5IEBACiAKIHB1YmxpYyBjbGFzcyBEZXBsb3ltZW50VGVzdHNVSQogewotCXB1YmxpYyBEZXBsb3ltZW50VGVzdHNVSSgpCi0JewotCQlTeXN0ZW0uc2V0UHJvcGVydHkoRW52LlVTRV9UTFNfU1lTVEVNX1BST1BFUlRZLCAidHJ1ZSIpOwotCQkKLQkJRmlsZSBmID0gZ2V0UGVyc2lzdGVuY2VGaWxlKCk7Ci0JCQotCQlpZihmICE9IG51bGwpCi0JCQlwZXJzaXN0ID0gbmV3IFNpbXBsZVBlcnNpc3RlbmNlKGYsIHRydWUpOwotCQllbHNlCi0JCQlwZXJzaXN0ID0gbmV3IFNpbXBsZVBlcnNpc3RlbmNlKHRoaXMpOwotCQlnZXRBcmdzKCk7Ci0JCXNldFBvcnQoKTsKLQkJZ2V0U2FtcGxlc0RpcigpOwotCQlnZXRTYW1wbGVzKCk7Ci0JfQotCQotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCQotCXB1YmxpYyB2b2lkIGRlcGxveUFsbCgpCi0JewotCQlmb3IoaW50IGkgPSAwOyBpIDwgYXJjaGl2ZXMubGVuZ3RoOyBpKyspCi0JCXsKLQkJCUZpbGUgZiA9IGFyY2hpdmVzW2ldOwotCQkJc2V0TmFtZShmKTsKLQkJCXByaW50KCJEZXBsb3lpbmcgIiArIG5hbWUgKyAiICgiICsgZiArICIpIik7Ci0JCQkKLQkJCWlmKCFkZXBsb3lPbmUoZikpCi0JCQkJcmV0dXJuOwotCQl9Ci0JfQotCQotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCQotCXByaXZhdGUgYm9vbGVhbiBkZXBsb3lPbmUoRmlsZSBmKQotCXsKLQkJLy8gcmV0dXJuIHRydWUgdG8gY29udGludWUsIGZhbHNlIHRvIGFib3J0Li4uCi0JCXRyeQotCQl7Ci0JCQlEZXBsb3ltZW50VGVzdCB0ZXN0ID0gbmV3IERlcGxveW1lbnRUZXN0KHVzZXIudmFsdWUsIHBhc3N3b3JkLnZhbHVlLCAKLQkJCQlob3N0LnZhbHVlLCBwb3J0SW50LCBmLmdldEFic29sdXRlUGF0aCgpLCBuYW1lLCBjb250ZXh0Um9vdCwgZW5hYmxlLCBhcHBzZXJ2VGFyZ2V0LnZhbHVlKTsKKyAgICBwdWJsaWMgRGVwbG95bWVudFRlc3RzVUkoKQorICAgIHsKKyAgICAgICAgU3lzdGVtLnNldFByb3BlcnR5KEVudi5VU0VfVExTX1NZU1RFTV9QUk9QRVJUWSwgInRydWUiKTsKIAotCQkJU3lzdGVtLm91dC5wcmludGxuKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiIyMjIyMjIyMjICAgRGVwbG95aW5nICAiICsgbmFtZSArICIgICMjIyMjIyMjIyMiKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7Ci0JCQl0ZXN0LnJ1bigpOwotCQkJCi0JCX0KLQkJY2F0Y2goRXhjZXB0aW9uIGUpCi0JCXsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJCi0JCURlcGxveWVkQXBwSW5zcGVjdG9yIGxpc3QgPSBudWxsOwotCQkKLQkJdHJ5Ci0JCXsKLQkJCWxpc3QgPSBuZXcgRGVwbG95ZWRBcHBJbnNwZWN0b3IodXNlci52YWx1ZSwgcGFzc3dvcmQudmFsdWUsCi0JCQkJaG9zdC52YWx1ZSwgcG9ydEludCwgIGFwcHNlcnZUYXJnZXQudmFsdWUpOworICAgICAgICBGaWxlIGYgPSBnZXRQZXJzaXN0ZW5jZUZpbGUoKTsKIAotCQkJU3lzdGVtLm91dC5wcmludGxuKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiIyMjIyMjIyMjICAgQXBwTGlzdDogIik7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOwotCQkJLy9saXN0LnJ1bigpOwotCQkJLy9TdHJpbmdbXSByZXN1bHRzID0gbGlzdC5nZXRSZXN1bHRzKCk7Ci0JCQkKLQkJCS8vZm9yKGludCBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspCi0JCQkJLy9TeXN0ZW0ub3V0LnByaW50bG4oIiIgKyBpICsgIjogIiArIHJlc3VsdHNbaV0pOwotCQkJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVwbG95ZWQoKTogIiArIGxpc3QuaXNEZXBsb3llZChuYW1lKSk7Ci0JCX0KLQkJY2F0Y2goRXhjZXB0aW9uIGUpCi0JCXsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJCi0JCVN0cmluZyByZXNwb25zZSA9ICIiOwotCQkKLQkJdHJ5Ci0JCXsKLQkJCXJlc3BvbnNlID0gQ29uc29sZS5yZWFkTGluZSgiR28gY2hlY2sgb24gZGVwbG95ZWQgQXBwLiAgUHJlc3MgPHJldHVybj4gd2hlbiByZWFkeSB0byB1bmRlcGxveSBpdC4gJ3EnIHRvIHF1aXQiKTsKLQkJCVVuZGVwbG95bWVudFRlc3QgdGVzdCA9IG5ldyBVbmRlcGxveW1lbnRUZXN0KHVzZXIudmFsdWUsIHBhc3N3b3JkLnZhbHVlLCAKLQkJCQlob3N0LnZhbHVlLCBwb3J0SW50LCAgbmFtZSwgYXBwc2VydlRhcmdldC52YWx1ZSk7CisgICAgICAgIGlmKGYgIT0gbnVsbCkKKyAgICAgICAgICAgIHBlcnNpc3QgPSBuZXcgU2ltcGxlUGVyc2lzdGVuY2UoZiwgdHJ1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBlcnNpc3QgPSBuZXcgU2ltcGxlUGVyc2lzdGVuY2UodGhpcyk7CisgICAgICAgIGdldEFyZ3MoKTsKKyAgICAgICAgc2V0UG9ydCgpOworICAgICAgICBnZXRTYW1wbGVzRGlyKCk7CisgICAgICAgIGdldFNhbXBsZXMoKTsKKyAgICB9CiAKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIiMjIyMjIyMjIyAgIFVuLURlcGxveWluZyAgIiArIG5hbWUgKyAiICAjIyMjIyMjIyMjIik7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOwotCQkJdGVzdC5ydW4oKTsKLQkJCQotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXRyeQotCQl7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCIjIyMjIyMjIyMgICBBcHBMaXN0OiAiKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7Ci0JCQkvL2xpc3QucnVuKCk7Ci0JCQkvL1N0cmluZ1tdIHJlc3VsdHMgPSBsaXN0LmdldFJlc3VsdHMoKTsKLQkJCQotCQkJLy9mb3IoaW50IGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykKLQkJCQkvL1N5c3RlbS5vdXQucHJpbnRsbigiIiArIGkgKyAiOiAiICsgcmVzdWx0c1tpXSk7Ci0JCQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiaXNEZXBsb3llZCgpOiAiICsgbGlzdC5pc0RlcGxveWVkKG5hbWUpKTsKLQkJfQotCQljYXRjaChFeGNlcHRpb24gZSkKLQkJewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQotCQlyZXR1cm4gIXJlc3BvbnNlLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgicSIpOwotCX0KLQkKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQkKLQlwcml2YXRlIHZvaWQgZ2V0QXJncygpCi0JewotCQlnZXRBcmcodXNlcik7Ci0JCWdldEFyZyhwYXNzd29yZCk7Ci0JCWdldEFyZyhob3N0KTsKLQkJZ2V0QXJnKHBvcnQpOwotCQlnZXRBcmcoYXBwc2VydlRhcmdldCk7Ci0JfQotCQotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCQotCXByaXZhdGUgdm9pZCBnZXRBcmcoTmFtZVZhbHVlIG52KQotCXsKLQkJbnYudmFsdWUgPSBwZXJzaXN0LmdldFByb3BlcnR5KG52Lm5hbWUpOwotCQkKLQkJaWYoIW9rKG52LnZhbHVlKSkKLQkJCW52LnZhbHVlID0gbnVsbDsKLQkJCi0JCVN0cmluZyBwcm9tcHQgPSBudi5uYW1lICsgIjogIjsKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotCQlpZihvayhudi52YWx1ZSkpCi0JCQlwcm9tcHQgKz0gIlsiICsgbnYudmFsdWUgKyAiXSI7Ci0JCQotCQlTdHJpbmcgcmVwbHkgPSBDb25zb2xlLnJlYWRMaW5lKHByb21wdCk7Ci0JCQotCQlpZihvayhyZXBseSkpCi0JCXsKLQkJCQotCQkJbnYudmFsdWUgPSByZXBseTsKLQkJCXBlcnNpc3Quc2V0UHJvcGVydHkobnYubmFtZSwgbnYudmFsdWUpOwotCQl9Ci0JCWVsc2UgaWYoIW9rKG52LnZhbHVlKSkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk5vIGFyZyBzdXBwbGllZCBmb3I6ICIgKyBudi5uYW1lKTsKLQkJLy8gZWxzZSAtLSBpdCBpcyBhbHJlYWR5IHNldC4uLgotCX0KLQkKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICBwdWJsaWMgdm9pZCBkZXBsb3lBbGwoKQorICAgIHsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGFyY2hpdmVzLmxlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBGaWxlIGYgPSBhcmNoaXZlc1tpXTsKKyAgICAgICAgICAgIHNldE5hbWUoZik7CisgICAgICAgICAgICBwcmludCgiRGVwbG95aW5nICIgKyBuYW1lICsgIiAoIiArIGYgKyAiKSIpOwogCi0JYm9vbGVhbiBvayhTdHJpbmcgcykKLQl7Ci0JCXJldHVybiBzICE9IG51bGwgJiYgcy5sZW5ndGgoKSA+IDA7Ci0JfQotCQotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgICAgICAgaWYoIWRlcGxveU9uZShmKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAKLQlwcml2YXRlIHZvaWQgZ2V0U2FtcGxlc0RpcigpCi0JewotCQlDbGFzcwljbGF6egk9IGdldENsYXNzKCk7Ci0JCVVSTCB1cmwgPSBjbGF6ei5nZXRSZXNvdXJjZSgic2FtcGxlcyIpOwotCQlTdHJpbmcgZmlsZW5hbWUgPSB1cmwuZ2V0UGF0aCgpOwotCQlzYW1wbGVzRGlyID0gbmV3IEZpbGUoZmlsZW5hbWUpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNhbXBsZXMgRGlyOiAiICsgZmlsZW5hbWUpOwotCX0KLQkKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotCXByaXZhdGUgdm9pZCBnZXRTYW1wbGVzKCkKLQl7Ci0JCWFyY2hpdmVzID0gc2FtcGxlc0Rpci5saXN0RmlsZXMobmV3IEFyY2hpdmVGaWx0ZXIoKSk7Ci0JfQotCQotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIHByaXZhdGUgYm9vbGVhbiBkZXBsb3lPbmUoRmlsZSBmKQorICAgIHsKKyAgICAgICAgLy8gcmV0dXJuIHRydWUgdG8gY29udGludWUsIGZhbHNlIHRvIGFib3J0Li4uCisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICBEZXBsb3ltZW50VGVzdCB0ZXN0ID0gbmV3IERlcGxveW1lbnRUZXN0KHVzZXIudmFsdWUsIHBhc3N3b3JkLnZhbHVlLAorICAgICAgICAgICAgICAgIGhvc3QudmFsdWUsIHBvcnRJbnQsIGYuZ2V0QWJzb2x1dGVQYXRoKCksIG5hbWUsIGNvbnRleHRSb290LCBlbmFibGUsIGFwcHNlcnZUYXJnZXQudmFsdWUpOwogCi0JcHJpdmF0ZSB2b2lkIHNldE5hbWUoRmlsZSBmKQotCXsKLQkJLy8gbm90ZSB0aGF0IEFyY2hpdmVGaWx0ZXIgZ3VhcmFudGVlcyB0aGF0IHRoZXJlIHdpbGwgYmUgYSA0LWNoYXJhY3RlciBleHRlbnNpb24uLi4KLQkJbmFtZSA9IGYuZ2V0TmFtZSgpOwotCQluYW1lID0gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sZW5ndGgoKSAtIDQpOwotCX0KLQkKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiMjIyMjIyMjIyAgIERlcGxveWluZyAgIiArIG5hbWUgKyAiICAjIyMjIyMjIyMjIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICAgdGVzdC5ydW4oKTsKIAotCXByaXZhdGUgdm9pZCBzZXRQb3J0KCkKLQl7Ci0JCXRyeQotCQl7Ci0JCQlwb3J0SW50ID0gSW50ZWdlci5wYXJzZUludChwb3J0LnZhbHVlKTsKLQkJfQotCQljYXRjaChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKQotCQl7Ci0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJCYWQgcG9ydCBudW1iZXI6ICIgKyBwb3J0LnZhbHVlKTsKLQkJfQotCX0KLQkKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgfQorICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkKKyAgICAgICAgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQogCi0JcHJpdmF0ZSB2b2lkIHByaW50KFN0cmluZyBzKQotCXsKLQkJU3lzdGVtLm91dC5wcmludGxuKHMpOwotCX0KLQkKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgRGVwbG95ZWRBcHBJbnNwZWN0b3IgbGlzdCA9IG51bGw7CiAKLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlEZXBsb3ltZW50VGVzdHNVSSB0ZXN0cyA9IG5ldyBEZXBsb3ltZW50VGVzdHNVSSgpOwotCQl0ZXN0cy5kZXBsb3lBbGwoKTsKLQl9CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICBsaXN0ID0gbmV3IERlcGxveWVkQXBwSW5zcGVjdG9yKHVzZXIudmFsdWUsIHBhc3N3b3JkLnZhbHVlLAorICAgICAgICAgICAgICAgIGhvc3QudmFsdWUsIHBvcnRJbnQsICBhcHBzZXJ2VGFyZ2V0LnZhbHVlKTsKIAotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIyMjIyMjIyMjICAgQXBwTGlzdDogIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICAgLy9saXN0LnJ1bigpOworICAgICAgICAgICAgLy9TdHJpbmdbXSByZXN1bHRzID0gbGlzdC5nZXRSZXN1bHRzKCk7CiAKLQlwcml2YXRlCQlGaWxlW10JCQkJYXJjaGl2ZXM7Ci0JcHJpdmF0ZQkJQ21kCQkJCQl0YXJnZXQ7Ci0JcHJpdmF0ZQkJU2ltcGxlUGVyc2lzdGVuY2UJcGVyc2lzdDsKLQlwcml2YXRlCQlGaWxlCQkJCWFyY2hpdmU7IAotCXByaXZhdGUJCVN0cmluZwkJCQluYW1lOyAKLQlwcml2YXRlCQlTdHJpbmcJCQkJY29udGV4dFJvb3Q7IAotCXByaXZhdGUJCWJvb2xlYW4JCQkJZW5hYmxlID0gdHJ1ZTsKLQlwcml2YXRlCQlGaWxlCQkJCXNhbXBsZXNEaXI7IAotCXByaXZhdGUJCWludAkJCQkJcG9ydEludAkJPSAtMTsKLQlwcml2YXRlCQlOYW1lVmFsdWUJCQl1c2VyCQk9IG5ldyBOYW1lVmFsdWUoInVzZXIiKTsgCi0JcHJpdmF0ZQkJTmFtZVZhbHVlCQkJcGFzc3dvcmQJPSBuZXcgTmFtZVZhbHVlKCJwYXNzd29yZCIpOyAgCi0JcHJpdmF0ZQkJTmFtZVZhbHVlCQkJaG9zdAkJPSBuZXcgTmFtZVZhbHVlKCJob3N0Iik7ICAKLQlwcml2YXRlCQlOYW1lVmFsdWUJCQlwb3J0CQk9IG5ldyBOYW1lVmFsdWUoInBvcnQiKTsgCi0JcHJpdmF0ZQkJTmFtZVZhbHVlCQkJYXBwc2VydlRhcmdldD0gbmV3IE5hbWVWYWx1ZSgidGFyZ2V0Iik7IAorICAgICAgICAgICAgLy9mb3IoaW50IGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiIiArIGkgKyAiOiAiICsgcmVzdWx0c1tpXSk7CiAKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQkKLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBOYW1lVmFsdWUKLQl7Ci0JCXByaXZhdGUgTmFtZVZhbHVlKFN0cmluZyBuYW1lKQotCQl7Ci0JCQl0aGlzLm5hbWUgPSBuYW1lOwotCQl9Ci0JCXByaXZhdGUgZmluYWwgU3RyaW5nIG5hbWU7Ci0JCXByaXZhdGUgU3RyaW5nIHZhbHVlOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBBcmNoaXZlRmlsdGVyIGltcGxlbWVudHMgRmlsZUZpbHRlcgotCXsKLQkJcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgZikKLQkJewotCQkJLy8gbXVzdCBlbmQgaW4gLmphci8ud2FyLy5yYXIvLmVhcgotCQkJCi0JCQlTdHJpbmcgbmFtZSA9IGYuZ2V0TmFtZSgpOwotCQkJCi0JCQlyZXR1cm4gbmFtZS5lbmRzV2l0aCgiLmVhciIpIHx8IG5hbWUuZW5kc1dpdGgoIi5qYXIiKSB8fCBuYW1lLmVuZHNXaXRoKCIucmFyIikgfHwgbmFtZS5lbmRzV2l0aCgiLndhciIpOwotCQl9Ci0JfQotCXByaXZhdGUgRmlsZSBnZXRQZXJzaXN0ZW5jZUZpbGUoKQotCXsKLQkJU3RyaW5nIHMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIubmFtZSIpOwotCQkKLQkJaWYocyAhPSBudWxsICYmIHMuZXF1YWxzKCJibmV2aW5zIikpCi0JCQlyZXR1cm4gbmV3IEZpbGUoIkM6L3RtcC9EZXBsb3ltZW50VGVzdHNVSS5wZXJzaXN0LnByb3BlcnRpZXMiKTsKLQkJCi0JCXJldHVybiBudWxsOwotCX0KKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZXBsb3llZCgpOiAiICsgbGlzdC5pc0RlcGxveWVkKG5hbWUpKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkKKyAgICAgICAgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyByZXNwb25zZSA9ICIiOworCisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICByZXNwb25zZSA9IENvbnNvbGUucmVhZExpbmUoIkdvIGNoZWNrIG9uIGRlcGxveWVkIEFwcC4gIFByZXNzIDxyZXR1cm4+IHdoZW4gcmVhZHkgdG8gdW5kZXBsb3kgaXQuICdxJyB0byBxdWl0Iik7CisgICAgICAgICAgICBVbmRlcGxveW1lbnRUZXN0IHRlc3QgPSBuZXcgVW5kZXBsb3ltZW50VGVzdCh1c2VyLnZhbHVlLCBwYXNzd29yZC52YWx1ZSwKKyAgICAgICAgICAgICAgICBob3N0LnZhbHVlLCBwb3J0SW50LCAgbmFtZSwgYXBwc2VydlRhcmdldC52YWx1ZSk7CisKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiMjIyMjIyMjIyAgIFVuLURlcGxveWluZyAgIiArIG5hbWUgKyAiICAjIyMjIyMjIyMjIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICAgdGVzdC5ydW4oKTsKKworICAgICAgICB9CisgICAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQorICAgICAgICB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIjIyMjIyMjIyMgICBBcHBMaXN0OiAiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAvL2xpc3QucnVuKCk7CisgICAgICAgICAgICAvL1N0cmluZ1tdIHJlc3VsdHMgPSBsaXN0LmdldFJlc3VsdHMoKTsKKworICAgICAgICAgICAgLy9mb3IoaW50IGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiIiArIGkgKyAiOiAiICsgcmVzdWx0c1tpXSk7CisKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZXBsb3llZCgpOiAiICsgbGlzdC5pc0RlcGxveWVkKG5hbWUpKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkKKyAgICAgICAgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAhcmVzcG9uc2UudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJxIik7CisgICAgfQorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBwcml2YXRlIHZvaWQgZ2V0QXJncygpCisgICAgeworICAgICAgICBnZXRBcmcodXNlcik7CisgICAgICAgIGdldEFyZyhwYXNzd29yZCk7CisgICAgICAgIGdldEFyZyhob3N0KTsKKyAgICAgICAgZ2V0QXJnKHBvcnQpOworICAgICAgICBnZXRBcmcoYXBwc2VydlRhcmdldCk7CisgICAgfQorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBwcml2YXRlIHZvaWQgZ2V0QXJnKE5hbWVWYWx1ZSBudikKKyAgICB7CisgICAgICAgIG52LnZhbHVlID0gcGVyc2lzdC5nZXRQcm9wZXJ0eShudi5uYW1lKTsKKworICAgICAgICBpZighb2sobnYudmFsdWUpKQorICAgICAgICAgICAgbnYudmFsdWUgPSBudWxsOworCisgICAgICAgIFN0cmluZyBwcm9tcHQgPSBudi5uYW1lICsgIjogIjsKKworICAgICAgICBpZihvayhudi52YWx1ZSkpCisgICAgICAgICAgICBwcm9tcHQgKz0gIlsiICsgbnYudmFsdWUgKyAiXSI7CisKKyAgICAgICAgU3RyaW5nIHJlcGx5ID0gQ29uc29sZS5yZWFkTGluZShwcm9tcHQpOworCisgICAgICAgIGlmKG9rKHJlcGx5KSkKKyAgICAgICAgeworCisgICAgICAgICAgICBudi52YWx1ZSA9IHJlcGx5OworICAgICAgICAgICAgcGVyc2lzdC5zZXRQcm9wZXJ0eShudi5uYW1lLCBudi52YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZighb2sobnYudmFsdWUpKQorICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTm8gYXJnIHN1cHBsaWVkIGZvcjogIiArIG52Lm5hbWUpOworICAgICAgICAvLyBlbHNlIC0tIGl0IGlzIGFscmVhZHkgc2V0Li4uCisgICAgfQorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBib29sZWFuIG9rKFN0cmluZyBzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHMgIT0gbnVsbCAmJiBzLmxlbmd0aCgpID4gMDsKKyAgICB9CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIHByaXZhdGUgdm9pZCBnZXRTYW1wbGVzRGlyKCkKKyAgICB7CisgICAgICAgIENsYXNzICAgIGNsYXp6ICAgID0gZ2V0Q2xhc3MoKTsKKyAgICAgICAgVVJMIHVybCA9IGNsYXp6LmdldFJlc291cmNlKCJzYW1wbGVzIik7CisgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IHVybC5nZXRQYXRoKCk7CisgICAgICAgIHNhbXBsZXNEaXIgPSBuZXcgRmlsZShmaWxlbmFtZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2FtcGxlcyBEaXI6ICIgKyBmaWxlbmFtZSk7CisgICAgfQorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBwcml2YXRlIHZvaWQgZ2V0U2FtcGxlcygpCisgICAgeworICAgICAgICBhcmNoaXZlcyA9IHNhbXBsZXNEaXIubGlzdEZpbGVzKG5ldyBBcmNoaXZlRmlsdGVyKCkpOworICAgIH0KKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgcHJpdmF0ZSB2b2lkIHNldE5hbWUoRmlsZSBmKQorICAgIHsKKyAgICAgICAgLy8gbm90ZSB0aGF0IEFyY2hpdmVGaWx0ZXIgZ3VhcmFudGVlcyB0aGF0IHRoZXJlIHdpbGwgYmUgYSA0LWNoYXJhY3RlciBleHRlbnNpb24uLi4KKyAgICAgICAgbmFtZSA9IGYuZ2V0TmFtZSgpOworICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sZW5ndGgoKSAtIDQpOworICAgIH0KKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgcHJpdmF0ZSB2b2lkIHNldFBvcnQoKQorICAgIHsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIHBvcnRJbnQgPSBJbnRlZ2VyLnBhcnNlSW50KHBvcnQudmFsdWUpOworICAgICAgICB9CisgICAgICAgIGNhdGNoKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkJhZCBwb3J0IG51bWJlcjogIiArIHBvcnQudmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBwcml2YXRlIHZvaWQgcHJpbnQoU3RyaW5nIHMpCisgICAgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocyk7CisgICAgfQorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uCisgICAgeworICAgICAgICBEZXBsb3ltZW50VGVzdHNVSSB0ZXN0cyA9IG5ldyBEZXBsb3ltZW50VGVzdHNVSSgpOworICAgICAgICB0ZXN0cy5kZXBsb3lBbGwoKTsKKyAgICB9CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIHByaXZhdGUgICAgICAgIEZpbGVbXSAgICAgICAgICAgICAgICBhcmNoaXZlczsKKyAgICBwcml2YXRlICAgICAgICBDbWQgICAgICAgICAgICAgICAgICAgIHRhcmdldDsKKyAgICBwcml2YXRlICAgICAgICBTaW1wbGVQZXJzaXN0ZW5jZSAgICBwZXJzaXN0OworICAgIHByaXZhdGUgICAgICAgIEZpbGUgICAgICAgICAgICAgICAgYXJjaGl2ZTsKKyAgICBwcml2YXRlICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgbmFtZTsKKyAgICBwcml2YXRlICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgY29udGV4dFJvb3Q7CisgICAgcHJpdmF0ZSAgICAgICAgYm9vbGVhbiAgICAgICAgICAgICAgICBlbmFibGUgPSB0cnVlOworICAgIHByaXZhdGUgICAgICAgIEZpbGUgICAgICAgICAgICAgICAgc2FtcGxlc0RpcjsKKyAgICBwcml2YXRlICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgIHBvcnRJbnQgICAgICAgID0gLTE7CisgICAgcHJpdmF0ZSAgICAgICAgTmFtZVZhbHVlICAgICAgICAgICAgdXNlciAgICAgICAgPSBuZXcgTmFtZVZhbHVlKCJ1c2VyIik7CisgICAgcHJpdmF0ZSAgICAgICAgTmFtZVZhbHVlICAgICAgICAgICAgcGFzc3dvcmQgICAgPSBuZXcgTmFtZVZhbHVlKCJwYXNzd29yZCIpOworICAgIHByaXZhdGUgICAgICAgIE5hbWVWYWx1ZSAgICAgICAgICAgIGhvc3QgICAgICAgID0gbmV3IE5hbWVWYWx1ZSgiaG9zdCIpOworICAgIHByaXZhdGUgICAgICAgIE5hbWVWYWx1ZSAgICAgICAgICAgIHBvcnQgICAgICAgID0gbmV3IE5hbWVWYWx1ZSgicG9ydCIpOworICAgIHByaXZhdGUgICAgICAgIE5hbWVWYWx1ZSAgICAgICAgICAgIGFwcHNlcnZUYXJnZXQ9IG5ldyBOYW1lVmFsdWUoInRhcmdldCIpOworCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBOYW1lVmFsdWUKKyAgICB7CisgICAgICAgIHByaXZhdGUgTmFtZVZhbHVlKFN0cmluZyBuYW1lKQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgICAgICB9CisgICAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG5hbWU7CisgICAgICAgIHByaXZhdGUgU3RyaW5nIHZhbHVlOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEFyY2hpdmVGaWx0ZXIgaW1wbGVtZW50cyBGaWxlRmlsdGVyCisgICAgeworICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBmKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBtdXN0IGVuZCBpbiAuamFyLy53YXIvLnJhci8uZWFyCisKKyAgICAgICAgICAgIFN0cmluZyBuYW1lID0gZi5nZXROYW1lKCk7CisKKyAgICAgICAgICAgIHJldHVybiBuYW1lLmVuZHNXaXRoKCIuZWFyIikgfHwgbmFtZS5lbmRzV2l0aCgiLmphciIpIHx8IG5hbWUuZW5kc1dpdGgoIi5yYXIiKSB8fCBuYW1lLmVuZHNXaXRoKCIud2FyIik7CisgICAgICAgIH0KKyAgICB9CisgICAgcHJpdmF0ZSBGaWxlIGdldFBlcnNpc3RlbmNlRmlsZSgpCisgICAgeworICAgICAgICBTdHJpbmcgcyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlci5uYW1lIik7CisKKyAgICAgICAgaWYocyAhPSBudWxsICYmIHMuZXF1YWxzKCJibmV2aW5zIikpCisgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGUoIkM6L3RtcC9EZXBsb3ltZW50VGVzdHNVSS5wZXJzaXN0LnByb3BlcnRpZXMiKTsKKworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvRW52LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0Vudi5qYXZhCmluZGV4IDU2MjM5YzQuLjRjOWM3ODYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvRW52LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9FbnYuamF2YQpAQCAtNDQsMzIgKzQ0LDMyIEBACiAgICAgewogICAgICAgICBmaW5hbCBUcnVzdFN0b3JlVHJ1c3RNYW5hZ2VyIHRydXN0TWdyID0gIFRydXN0U3RvcmVUcnVzdE1hbmFnZXIuCiAgICAgICAgICAgICBnZXRTeXN0ZW1JbnN0YW5jZSgpOwotCQkKLQkJLy8gV0JOIC0tIE5QRSBiZWxvdyBpZiB0aGlzIGlzIG51bGwsIHdoaWNoIGlzIHZlcnkgbGlrZWx5IGlmIHRoZSBTeXN0ZW0gUHJvcHMgYXJlbid0Ci0JCS8vc2V0dXAKLQkJCi0JCQotICAgICAgICBmaW5hbCBIYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lckltcGwgaGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXIgPSAKKworICAgICAgICAvLyBXQk4gLS0gTlBFIGJlbG93IGlmIHRoaXMgaXMgbnVsbCwgd2hpY2ggaXMgdmVyeSBsaWtlbHkgaWYgdGhlIFN5c3RlbSBQcm9wcyBhcmVuJ3QKKyAgICAgICAgLy9zZXR1cAorCisKKyAgICAgICAgZmluYWwgSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXJJbXBsIGhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyID0KICAgICAgICAgICAgICAgICBuZXcgSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXJJbXBsKCk7CiAKLQkJaWYodHJ1c3RNZ3IgPT0gbnVsbCkKLQkJewotCQkJamF2YXgubmV0LnNzbC5YNTA5VHJ1c3RNYW5hZ2VyIHRtID0gVHJ1c3RBbnlUcnVzdE1hbmFnZXIuZ2V0SW5zdGFuY2UoKTsKLQkJCXJldHVybiBuZXcgVExTUGFyYW1zKHRtLCBoYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lcik7Ci0JCX0KKyAgICAgICAgaWYodHJ1c3RNZ3IgPT0gbnVsbCkKKyAgICAgICAgeworICAgICAgICAgICAgamF2YXgubmV0LnNzbC5YNTA5VHJ1c3RNYW5hZ2VyIHRtID0gVHJ1c3RBbnlUcnVzdE1hbmFnZXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgVExTUGFyYW1zKHRtLCBoYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lcik7CisgICAgICAgIH0KIAotCQkKLQkJdHJ1c3RNZ3Iuc2V0UHJvbXB0KHRydWUpOworCisgICAgICAgIHRydXN0TWdyLnNldFByb21wdCh0cnVlKTsKICAgICAgICAgcmV0dXJuIG5ldyBUTFNQYXJhbXModHJ1c3RNZ3IsIGhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyKTsKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdXNlVExTKCkKICAgICB7Ci0JCS8vIFdCTiAtLSBpZiB1c2VUTFMgcmV0dXJuIGZhbHNlIC0tIGRlcGxveW1lbnRzIGZhaWwgMTAwJSBvZiB0aGUgdGltZS4KLQkJLy8gc28gSSdtIHN3aXRjaGluZyB0aGlzIHRvIGFsd2F5cyByZXR1cm4gdHJ1ZS4uLgotCQlyZXR1cm4gdHJ1ZTsKKyAgICAgICAgLy8gV0JOIC0tIGlmIHVzZVRMUyByZXR1cm4gZmFsc2UgLS0gZGVwbG95bWVudHMgZmFpbCAxMDAlIG9mIHRoZSB0aW1lLgorICAgICAgICAvLyBzbyBJJ20gc3dpdGNoaW5nIHRoaXMgdG8gYWx3YXlzIHJldHVybiB0cnVlLi4uCisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAvL2ZpbmFsIFN0cmluZyB1c2VUTFMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoVVNFX1RMU19TWVNURU1fUFJPUEVSVFkpOwotICAgICAgICAvL3JldHVybiAoKHVzZVRMUyAhPSBudWxsKSAmJiAKKyAgICAgICAgLy9yZXR1cm4gKCh1c2VUTFMgIT0gbnVsbCkgJiYKICAgICAgICAgICAgICAgICAvLyh1c2VUTFMuZXF1YWxzKCJ0cnVlIikgfHwgdXNlVExTLmVxdWFscygiVFJVRSIpKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9JbnN0YW5jZUxpZmVjeWNsZVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvSW5zdGFuY2VMaWZlY3ljbGVUZXN0LmphdmEKaW5kZXggMGIyOWVjMC4uMzNmY2E1ZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9JbnN0YW5jZUxpZmVjeWNsZVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0luc3RhbmNlTGlmZWN5Y2xlVGVzdC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKICAgICBwdWJsaWMgSW5zdGFuY2VMaWZlY3ljbGVUZXN0KGZpbmFsIFN0cmluZyB1c2VyLCBmaW5hbCBTdHJpbmcgcGFzc3dvcmQsCiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgaG9zdCwgZmluYWwgaW50IHBvcnQsIGZpbmFsIFN0cmluZyBpbnN0YW5jZU5hbWUsCi0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgbm9kZUFnZW50TmFtZSwgZmluYWwgU3RyaW5nIGNvbmZpZ05hbWUsIAorICAgICAgICAgICAgZmluYWwgU3RyaW5nIG5vZGVBZ2VudE5hbWUsIGZpbmFsIFN0cmluZyBjb25maWdOYW1lLAogICAgICAgICAgICAgZmluYWwgTWFwIG9wdGlvbmFsKQogICAgIHsKICAgICAgICAgZmluYWwgQ21kQ2hhaW5DbWQgY2hhaW4gPSBuZXcgQ21kQ2hhaW5DbWQoKTsKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgZmluYWwgQ29ubmVjdENtZCBjb25uZWN0Q21kID0gY21kRmFjdG9yeS5jcmVhdGVDb25uZWN0Q21kKAogICAgICAgICAgICAgICAgIHVzZXIsIHBhc3N3b3JkLCBob3N0LCBwb3J0KTsKICAgICAgICAgZmluYWwgQ3JlYXRlSW5zdGFuY2VDbWQgY3JlYXRlSW5zdGFuY2VDbWQgPSBjbWRGYWN0b3J5LgotICAgICAgICAgICAgICAgIGNyZWF0ZUNyZWF0ZUluc3RhbmNlQ21kKGluc3RhbmNlTmFtZSwgbm9kZUFnZW50TmFtZSwgCisgICAgICAgICAgICAgICAgY3JlYXRlQ3JlYXRlSW5zdGFuY2VDbWQoaW5zdGFuY2VOYW1lLCBub2RlQWdlbnROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnTmFtZSwgb3B0aW9uYWwpOwogICAgICAgICBmaW5hbCBTdGFydEluc3RhbmNlQ21kIHN0YXJ0SW5zdGFuY2VDbWQgPSBjbWRGYWN0b3J5LgogICAgICAgICAgICAgICAgIGNyZWF0ZVN0YXJ0SW5zdGFuY2VDbWQoaW5zdGFuY2VOYW1lKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvSkRCQ0Nvbm5lY3Rpb25Qb29sVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9KREJDQ29ubmVjdGlvblBvb2xUZXN0LmphdmEKaW5kZXggZTRmNzZkZS4uMjgzOTM0OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9KREJDQ29ubmVjdGlvblBvb2xUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9KREJDQ29ubmVjdGlvblBvb2xUZXN0LmphdmEKQEAgLTM1LDIwICszNSwyMCBAQAogICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcga1RyYW5zYWN0aW9uSXNvbGF0aW9uTGV2ZWwgID0gInJlcGVhdGFibGUtcmVhZCI7CiAgICAgc3RhdGljIGZpbmFsIFN0cmluZyBrVmFsaWRhdGlvblRhYmxlTmFtZSAgICAgICAgPSAidGFiMSI7CiAKLSAgICBwdWJsaWMgSkRCQ0Nvbm5lY3Rpb25Qb29sVGVzdChmaW5hbCBTdHJpbmcgdXNlciwgCi0gICAgICAgIGZpbmFsIFN0cmluZyBwYXNzd29yZCwgZmluYWwgU3RyaW5nIGhvc3QsIGZpbmFsIGludCBwb3J0LCAKLSAgICAgICAgZmluYWwgU3RyaW5nIG5hbWUsIGZpbmFsIFN0cmluZyBkYXRhc291cmNlQ2xhc3NuYW1lKSAKKyAgICBwdWJsaWMgSkRCQ0Nvbm5lY3Rpb25Qb29sVGVzdChmaW5hbCBTdHJpbmcgdXNlciwKKyAgICAgICAgZmluYWwgU3RyaW5nIHBhc3N3b3JkLCBmaW5hbCBTdHJpbmcgaG9zdCwgZmluYWwgaW50IHBvcnQsCisgICAgICAgIGZpbmFsIFN0cmluZyBuYW1lLCBmaW5hbCBTdHJpbmcgZGF0YXNvdXJjZUNsYXNzbmFtZSkKICAgICB7CiAgICAgICAgIGZpbmFsIENtZEZhY3RvcnkgY21kRmFjdG9yeSA9IGdldENtZEZhY3RvcnkoKTsKIAogICAgICAgICBmaW5hbCBDb25uZWN0Q21kIGNvbm5lY3RDbWQgPSBjbWRGYWN0b3J5LmNyZWF0ZUNvbm5lY3RDbWQoCiAgICAgICAgICAgICAgICAgdXNlciwgcGFzc3dvcmQsIGhvc3QsIHBvcnQpOwogCi0gICAgICAgIGZpbmFsIENyZWF0ZUpEQkNDb25uZWN0aW9uUG9vbENtZCBjcmVhdGVDbWQgPSAKKyAgICAgICAgZmluYWwgQ3JlYXRlSkRCQ0Nvbm5lY3Rpb25Qb29sQ21kIGNyZWF0ZUNtZCA9CiAgICAgICAgICAgICAgICAgY21kRmFjdG9yeS5jcmVhdGVDcmVhdGVKREJDQ29ubmVjdGlvblBvb2xDbWQobmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzb3VyY2VDbGFzc25hbWUsIGdldE9wdGlvbmFsKCkpOwogCi0gICAgICAgIGZpbmFsIERlbGV0ZUpEQkNDb25uZWN0aW9uUG9vbENtZCBkZWxldGVDbWQgPSAKKyAgICAgICAgZmluYWwgRGVsZXRlSkRCQ0Nvbm5lY3Rpb25Qb29sQ21kIGRlbGV0ZUNtZCA9CiAgICAgICAgICAgICAgICAgY21kRmFjdG9yeS5jcmVhdGVEZWxldGVKREJDQ29ubmVjdGlvblBvb2xDbWQobmFtZSk7CiAKICAgICAgICAgZmluYWwgUGlwZUNtZCBwMSA9IG5ldyBQaXBlQ21kKGNvbm5lY3RDbWQsIGNyZWF0ZUNtZCk7CkBAIC03MSw3ICs3MSw3IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgbmV3IEpEQkNDb25uZWN0aW9uUG9vbFRlc3QoCi0gICAgICAgICAgICAgICAgImFkbWluIiwgInBhc3N3b3JkIiwgImxvY2FsaG9zdCIsIDg2ODYsIGtOYW1lLCAKKyAgICAgICAgICAgICAgICAiYWRtaW4iLCAicGFzc3dvcmQiLCAibG9jYWxob3N0IiwgODY4Niwga05hbWUsCiAgICAgICAgICAgICAgICAga0RhdGFzb3VyY2VDbGFzc25hbWUpLnJ1bigpOwogICAgIH0KIApAQCAtMTAyLDcgKzEwMiw3IEBACiAgICAgICAgIHB1YmxpYyBPYmplY3QgZXhlY3V0ZSgpIHRocm93cyBFeGNlcHRpb24KICAgICAgICAgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOYW1lPSIrcmVzLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRhdGFzb3VyY2VDbGFzc25hbWU9IisgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRhdGFzb3VyY2VDbGFzc25hbWU9IisKICAgICAgICAgICAgICAgICAgICAgcmVzLmdldERhdGFzb3VyY2VDbGFzc25hbWUoKSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc1R5cGU9IisgcmVzLmdldFJlc1R5cGUoKSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0ZWFkeVBvb2xTaXplPSIrcmVzLmdldFN0ZWFkeVBvb2xTaXplKCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9KREJDUmVzb3VyY2VUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0pEQkNSZXNvdXJjZVRlc3QuamF2YQppbmRleCA3Njc4MDU0Li40NzZlZDdiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0pEQkNSZXNvdXJjZVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0pEQkNSZXNvdXJjZVRlc3QuamF2YQpAQCAtMzEsOCArMzEsOCBAQAogICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcga1Bvb2xOYW1lICAgICAgID0gIl9fVGltZXJQb29sIjsKICAgICBzdGF0aWMgZmluYWwgU3RyaW5nIGtPYmplY3RUeXBlICAgICA9ICJ1c2VyIjsKIAotICAgIHB1YmxpYyBKREJDUmVzb3VyY2VUZXN0KGZpbmFsIFN0cmluZyB1c2VyLCAKLSAgICAgICAgZmluYWwgU3RyaW5nIHBhc3N3b3JkLCBmaW5hbCBTdHJpbmcgaG9zdCwgZmluYWwgaW50IHBvcnQsIAorICAgIHB1YmxpYyBKREJDUmVzb3VyY2VUZXN0KGZpbmFsIFN0cmluZyB1c2VyLAorICAgICAgICBmaW5hbCBTdHJpbmcgcGFzc3dvcmQsIGZpbmFsIFN0cmluZyBob3N0LCBmaW5hbCBpbnQgcG9ydCwKICAgICAgICAgZmluYWwgU3RyaW5nIGpuZGlOYW1lLCBmaW5hbCBTdHJpbmcgcG9vbE5hbWUpCiAgICAgewogICAgICAgICBmaW5hbCBDbWRGYWN0b3J5IGNtZEZhY3RvcnkgPSBnZXRDbWRGYWN0b3J5KCk7CkBAIC00MCwxMSArNDAsMTEgQEAKICAgICAgICAgZmluYWwgQ29ubmVjdENtZCBjb25uZWN0Q21kID0gY21kRmFjdG9yeS5jcmVhdGVDb25uZWN0Q21kKAogICAgICAgICAgICAgICAgIHVzZXIsIHBhc3N3b3JkLCBob3N0LCBwb3J0KTsKIAotICAgICAgICBmaW5hbCBDcmVhdGVKREJDUmVzb3VyY2VDbWQgY3JlYXRlQ21kID0gCi0gICAgICAgICAgICAgICAgY21kRmFjdG9yeS5jcmVhdGVDcmVhdGVKREJDUmVzb3VyY2VDbWQoam5kaU5hbWUsIAorICAgICAgICBmaW5hbCBDcmVhdGVKREJDUmVzb3VyY2VDbWQgY3JlYXRlQ21kID0KKyAgICAgICAgICAgICAgICBjbWRGYWN0b3J5LmNyZWF0ZUNyZWF0ZUpEQkNSZXNvdXJjZUNtZChqbmRpTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHBvb2xOYW1lLCBnZXRPcHRpb25hbCgpKTsKIAotICAgICAgICBmaW5hbCBEZWxldGVKREJDUmVzb3VyY2VDbWQgZGVsZXRlQ21kID0gCisgICAgICAgIGZpbmFsIERlbGV0ZUpEQkNSZXNvdXJjZUNtZCBkZWxldGVDbWQgPQogICAgICAgICAgICAgICAgIGNtZEZhY3RvcnkuY3JlYXRlRGVsZXRlSkRCQ1Jlc291cmNlQ21kKGpuZGlOYW1lKTsKIAogICAgICAgICBmaW5hbCBQaXBlQ21kIHAxID0gbmV3IFBpcGVDbWQoY29ubmVjdENtZCwgY3JlYXRlQ21kKTsKQEAgLTY2LDE0ICs2NiwxNCBAQAogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLSAgICAgICAgbmV3IEpEQkNSZXNvdXJjZVRlc3QoImFkbWluIiwgInBhc3N3b3JkIiwgImxvY2FsaG9zdCIsIDg2ODYsIAotICAgICAgICAgICAgICAgIGtKTkRJTmFtZSwga1Bvb2xOYW1lKS5ydW4oKTsgCisgICAgICAgIG5ldyBKREJDUmVzb3VyY2VUZXN0KCJhZG1pbiIsICJwYXNzd29yZCIsICJsb2NhbGhvc3QiLCA4Njg2LAorICAgICAgICAgICAgICAgIGtKTkRJTmFtZSwga1Bvb2xOYW1lKS5ydW4oKTsKICAgICB9CiAKICAgICBwcml2YXRlIE1hcCBnZXRPcHRpb25hbCgpCiAgICAgewogICAgICAgICBmaW5hbCBNYXAgb3B0aW9uYWwgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICAvL29wdGlvbmFsLnB1dChDcmVhdGVSZXNvdXJjZUtleXMuUkVTT1VSQ0VfT0JKRUNUX1RZUEVfS0VZLCAKKyAgICAgICAgLy9vcHRpb25hbC5wdXQoQ3JlYXRlUmVzb3VyY2VLZXlzLlJFU09VUkNFX09CSkVDVF9UWVBFX0tFWSwKICAgICAgICAgICAgICAgICAvL2tPYmplY3RUeXBlKTsKICAgICAgICAgcmV0dXJuIG9wdGlvbmFsOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvSk5ESVJlc291cmNlVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9KTkRJUmVzb3VyY2VUZXN0LmphdmEKaW5kZXggZmMzNDFhYy4uN2YwNDMyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9KTkRJUmVzb3VyY2VUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9KTkRJUmVzb3VyY2VUZXN0LmphdmEKQEAgLTM0LDkgKzM0LDkgQEAKICAgICBzdGF0aWMgZmluYWwgU3RyaW5nIGtGYWN0b3J5Q2xhc3MgICA9ICJhLmIuYyI7CiAgICAgc3RhdGljIGZpbmFsIFN0cmluZyBrT2JqZWN0VHlwZSAgICAgPSAidXNlciI7CiAKLSAgICBwdWJsaWMgSk5ESVJlc291cmNlVGVzdChmaW5hbCBTdHJpbmcgdXNlciwgCi0gICAgICAgIGZpbmFsIFN0cmluZyBwYXNzd29yZCwgZmluYWwgU3RyaW5nIGhvc3QsIGZpbmFsIGludCBwb3J0LCAKLSAgICAgICAgZmluYWwgU3RyaW5nIGpuZGlOYW1lLCBmaW5hbCBTdHJpbmcgam5kaUxvb2t1cE5hbWUsIAorICAgIHB1YmxpYyBKTkRJUmVzb3VyY2VUZXN0KGZpbmFsIFN0cmluZyB1c2VyLAorICAgICAgICBmaW5hbCBTdHJpbmcgcGFzc3dvcmQsIGZpbmFsIFN0cmluZyBob3N0LCBmaW5hbCBpbnQgcG9ydCwKKyAgICAgICAgZmluYWwgU3RyaW5nIGpuZGlOYW1lLCBmaW5hbCBTdHJpbmcgam5kaUxvb2t1cE5hbWUsCiAgICAgICAgIGZpbmFsIFN0cmluZyByZXNUeXBlLCBmaW5hbCBTdHJpbmcgZmFjdG9yeUNsYXNzKQogICAgIHsKICAgICAgICAgZmluYWwgQ21kRmFjdG9yeSBjbWRGYWN0b3J5ID0gZ2V0Q21kRmFjdG9yeSgpOwpAQCAtNDQsMTEgKzQ0LDExIEBACiAgICAgICAgIGZpbmFsIENvbm5lY3RDbWQgY29ubmVjdENtZCA9IGNtZEZhY3RvcnkuY3JlYXRlQ29ubmVjdENtZCgKICAgICAgICAgICAgICAgICB1c2VyLCBwYXNzd29yZCwgaG9zdCwgcG9ydCk7CiAKLSAgICAgICAgZmluYWwgQ3JlYXRlSk5ESVJlc291cmNlQ21kIGNyZWF0ZUNtZCA9IAorICAgICAgICBmaW5hbCBDcmVhdGVKTkRJUmVzb3VyY2VDbWQgY3JlYXRlQ21kID0KICAgICAgICAgICAgICAgICBjbWRGYWN0b3J5LmNyZWF0ZUNyZWF0ZUpORElSZXNvdXJjZUNtZChqbmRpTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGpuZGlMb29rdXBOYW1lLCByZXNUeXBlLCBmYWN0b3J5Q2xhc3MsIGdldE9wdGlvbmFsKCkpOwogCi0gICAgICAgIGZpbmFsIERlbGV0ZUpORElSZXNvdXJjZUNtZCBkZWxldGVDbWQgPSAKKyAgICAgICAgZmluYWwgRGVsZXRlSk5ESVJlc291cmNlQ21kIGRlbGV0ZUNtZCA9CiAgICAgICAgICAgICAgICAgY21kRmFjdG9yeS5jcmVhdGVEZWxldGVKTkRJUmVzb3VyY2VDbWQoam5kaU5hbWUpOwogCiAgICAgICAgIGZpbmFsIFBpcGVDbWQgcDEgPSBuZXcgUGlwZUNtZChjb25uZWN0Q21kLCBjcmVhdGVDbWQpOwpAQCAtNzEsMTQgKzcxLDE0IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgbmV3IEpORElSZXNvdXJjZVRlc3QoCi0gICAgICAgICAgICAgICAgImFkbWluIiwgImFkbWluYWRtaW4iLCAibG9jYWxob3N0IiwgODY4NiwgCisgICAgICAgICAgICAgICAgImFkbWluIiwgImFkbWluYWRtaW4iLCAibG9jYWxob3N0IiwgODY4NiwKICAgICAgICAgICAgICAgICBrSk5ESU5hbWUsIGtKTkRJTG9va3VwTmFtZSwga1Jlc1R5cGUsIGtGYWN0b3J5Q2xhc3MpLnJ1bigpOwogICAgIH0KIAogICAgIHByaXZhdGUgTWFwIGdldE9wdGlvbmFsKCkKICAgICB7CiAgICAgICAgIGZpbmFsIE1hcCBvcHRpb25hbCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgIC8vb3B0aW9uYWwucHV0KENyZWF0ZVJlc291cmNlS2V5cy5SRVNPVVJDRV9PQkpFQ1RfVFlQRV9LRVksIAorICAgICAgICAvL29wdGlvbmFsLnB1dChDcmVhdGVSZXNvdXJjZUtleXMuUkVTT1VSQ0VfT0JKRUNUX1RZUEVfS0VZLAogICAgICAgICAgICAgLy9rT2JqZWN0VHlwZSk7CiAgICAgICAgIHJldHVybiBvcHRpb25hbDsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0xpc3REZXBsb3llZEFwcHNDbWQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvTGlzdERlcGxveWVkQXBwc0NtZC5qYXZhCmluZGV4IGRhZTA5N2YuLjk2YTI2NTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvTGlzdERlcGxveWVkQXBwc0NtZC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvTGlzdERlcGxveWVkQXBwc0NtZC5qYXZhCkBAIC02MCwxMCArNjAsMTAgQEAKIAogICAgICAgICBmaW5hbCBTZXQgczIgPSBnZXREZXBsb3llZEl0ZW1SZWZzKHRhcmdldCk7CiAKLQkJU2V0W10gc2V0cyA9IG5ldyBTZXRbXSB7IHMxLCBzMn07Ci0gICAgICAgIAotCQlyZXR1cm4gc2V0czsKLQkJLy9yZXR1cm4gaW50ZXJzZWN0KHMxLCBzMik7CisgICAgICAgIFNldFtdIHNldHMgPSBuZXcgU2V0W10geyBzMSwgczJ9OworCisgICAgICAgIHJldHVybiBzZXRzOworICAgICAgICAvL3JldHVybiBpbnRlcnNlY3QoczEsIHMyKTsKIAogICAgIH0KIApAQCAtODQsMjIgKzg0LDIyIEBACiAKICAgICBwcml2YXRlIFNldCBnZXREZXBsb3llZEl0ZW1SZWZzKGZpbmFsIFN0cmluZyB0YXJnZXQpIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0JCU9iamVjdCBvID0gZ2V0Q2x1c3Rlck9yU2VydmVyKHRhcmdldCk7Ci0JCQotCQlpZihvID09IG51bGwpCi0JCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJDYW4ndCBmaW5kIGNvbmZpZyBmb3IgdGhpcyB0YXJnZXQuIik7Ci0JCQotCQlpZihvIGluc3RhbmNlb2YgU2VydmVyQ29uZmlnKQotCQkJcmV0dXJuICgoU2VydmVyQ29uZmlnKW8pLmdldERlcGxveWVkSXRlbVJlZkNvbmZpZ01hcCgpLmtleVNldCgpOworICAgICAgICBPYmplY3QgbyA9IGdldENsdXN0ZXJPclNlcnZlcih0YXJnZXQpOwogCi0JCWlmKG8gaW5zdGFuY2VvZiBDbHVzdGVyQ29uZmlnKQotCQkJcmV0dXJuICgoQ2x1c3RlckNvbmZpZylvKS5nZXREZXBsb3llZEl0ZW1SZWZDb25maWdNYXAoKS5rZXlTZXQoKTsKKyAgICAgICAgaWYobyA9PSBudWxsKQorICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQ2FuJ3QgZmluZCBjb25maWcgZm9yIHRoaXMgdGFyZ2V0LiIpOwogCi0JCWlmKG8gaW5zdGFuY2VvZiBDbHVzdGVyZWRTZXJ2ZXJDb25maWcpCi0JCQlyZXR1cm4gKChDbHVzdGVyZWRTZXJ2ZXJDb25maWcpbykuZ2V0RGVwbG95ZWRJdGVtUmVmQ29uZmlnTWFwKCkua2V5U2V0KCk7Ci0JCQotCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiPz8/Iik7Ci0JfQorICAgICAgICBpZihvIGluc3RhbmNlb2YgU2VydmVyQ29uZmlnKQorICAgICAgICAgICAgcmV0dXJuICgoU2VydmVyQ29uZmlnKW8pLmdldERlcGxveWVkSXRlbVJlZkNvbmZpZ01hcCgpLmtleVNldCgpOworCisgICAgICAgIGlmKG8gaW5zdGFuY2VvZiBDbHVzdGVyQ29uZmlnKQorICAgICAgICAgICAgcmV0dXJuICgoQ2x1c3RlckNvbmZpZylvKS5nZXREZXBsb3llZEl0ZW1SZWZDb25maWdNYXAoKS5rZXlTZXQoKTsKKworICAgICAgICBpZihvIGluc3RhbmNlb2YgQ2x1c3RlcmVkU2VydmVyQ29uZmlnKQorICAgICAgICAgICAgcmV0dXJuICgoQ2x1c3RlcmVkU2VydmVyQ29uZmlnKW8pLmdldERlcGxveWVkSXRlbVJlZkNvbmZpZ01hcCgpLmtleVNldCgpOworCisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCI/Pz8iKTsKKyAgICB9CiAKICAgICBwcml2YXRlIFN0cmluZyBnZXRBcHBUeXBlKCkKICAgICB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0xpc3REZXBsb3llZEFwcHNUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L0xpc3REZXBsb3llZEFwcHNUZXN0LmphdmEKaW5kZXggMWZhM2QwMC4uMTM1OTY2MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9MaXN0RGVwbG95ZWRBcHBzVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvTGlzdERlcGxveWVkQXBwc1Rlc3QuamF2YQpAQCAtNDQsMjUgKzQ0LDI1IEBACiAgICAgewogICAgICAgICBTZXRbXSBzZXRzID0gKFNldFtdKXRhcmdldENtZC5leGVjdXRlKCk7CiAKLQkJLy9TeXN0ZW0ub3V0LnByaW50bG4oIlNldDE6ICIgKyBzZXRzWzBdKTsKLQkJLy9TeXN0ZW0ub3V0LnByaW50bG4oIlNldDI6ICIgKyBzZXRzWzFdKTsKLQkJCi0JCWlmKHNldHMubGVuZ3RoID4gMSkKLQkJCXNldHNbMF0ucmV0YWluQWxsKHNldHNbMV0pOwotCQkKLQkJcmVzdWx0cyA9IG5ldyBTdHJpbmdbc2V0c1swXS5zaXplKCldOwotCQlzZXRzWzBdLnRvQXJyYXkocmVzdWx0cyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJTZXQxOiAiICsgc2V0c1swXSk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJTZXQyOiAiICsgc2V0c1sxXSk7CisKKyAgICAgICAgaWYoc2V0cy5sZW5ndGggPiAxKQorICAgICAgICAgICAgc2V0c1swXS5yZXRhaW5BbGwoc2V0c1sxXSk7CisKKyAgICAgICAgcmVzdWx0cyA9IG5ldyBTdHJpbmdbc2V0c1swXS5zaXplKCldOworICAgICAgICBzZXRzWzBdLnRvQXJyYXkocmVzdWx0cyk7CiAgICAgfQogCi0JU3RyaW5nW10gZ2V0UmVzdWx0cygpCi0JewotCQlyZXR1cm4gcmVzdWx0czsKLQl9CisgICAgU3RyaW5nW10gZ2V0UmVzdWx0cygpCisgICAgeworICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICB9CiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLSAgICAgICAgbmV3IExpc3REZXBsb3llZEFwcHNUZXN0KCJhZG1pbiIsICJwYXNzd29yZCIsICJsb2NhbGhvc3QiLCA4Njg2LCAKKyAgICAgICAgbmV3IExpc3REZXBsb3llZEFwcHNUZXN0KCJhZG1pbiIsICJwYXNzd29yZCIsICJsb2NhbGhvc3QiLCA4Njg2LAogICAgICAgICAgICAgICAgIGFyZ3NbMF0sIGFyZ3NbMV0pLnJ1bigpOwogICAgIH0KLQkKLQlwcml2YXRlIFN0cmluZ1tdIHJlc3VsdHM7CisKKyAgICBwcml2YXRlIFN0cmluZ1tdIHJlc3VsdHM7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L01haWxSZXNvdXJjZVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvTWFpbFJlc291cmNlVGVzdC5qYXZhCmluZGV4IDVmZjhlMTYuLmI1MTIxN2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvTWFpbFJlc291cmNlVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvTWFpbFJlc291cmNlVGVzdC5qYXZhCkBAIC00MCw5ICs0MCw5IEBACiAgICAgc3RhdGljIGZpbmFsIFN0cmluZyBrVHJhbnNwb3J0UHJvdG9jb2wgICAgICA9ICJzbXRwIjsKICAgICBzdGF0aWMgZmluYWwgU3RyaW5nIGtUcmFuc3BvcnRQcm90b2NvbENsYXNzID0gImNvbS5zdW4ubWFpbC5zbXRwLlNNVFBUcmFuc3BvcnQiOwogCi0gICAgcHVibGljIE1haWxSZXNvdXJjZVRlc3QoZmluYWwgU3RyaW5nIHVzZXIsIAotICAgICAgICBmaW5hbCBTdHJpbmcgcGFzc3dvcmQsIGZpbmFsIFN0cmluZyBob3N0LCBmaW5hbCBpbnQgcG9ydCwgCi0gICAgICAgIGZpbmFsIFN0cmluZyBqbmRpTmFtZSwgZmluYWwgU3RyaW5nIHJIb3N0LCAKKyAgICBwdWJsaWMgTWFpbFJlc291cmNlVGVzdChmaW5hbCBTdHJpbmcgdXNlciwKKyAgICAgICAgZmluYWwgU3RyaW5nIHBhc3N3b3JkLCBmaW5hbCBTdHJpbmcgaG9zdCwgZmluYWwgaW50IHBvcnQsCisgICAgICAgIGZpbmFsIFN0cmluZyBqbmRpTmFtZSwgZmluYWwgU3RyaW5nIHJIb3N0LAogICAgICAgICBmaW5hbCBTdHJpbmcgclVzZXIsIGZpbmFsIFN0cmluZyByRnJvbSkKICAgICB7CiAgICAgICAgIGZpbmFsIENtZEZhY3RvcnkgY21kRmFjdG9yeSA9IGdldENtZEZhY3RvcnkoKTsKQEAgLTUwLDExICs1MCwxMSBAQAogICAgICAgICBmaW5hbCBDb25uZWN0Q21kIGNvbm5lY3RDbWQgPSBjbWRGYWN0b3J5LmNyZWF0ZUNvbm5lY3RDbWQoCiAgICAgICAgICAgICAgICAgdXNlciwgcGFzc3dvcmQsIGhvc3QsIHBvcnQpOwogCi0gICAgICAgIGZpbmFsIENyZWF0ZU1haWxSZXNvdXJjZUNtZCBjcmVhdGVDbWQgPSAKKyAgICAgICAgZmluYWwgQ3JlYXRlTWFpbFJlc291cmNlQ21kIGNyZWF0ZUNtZCA9CiAgICAgICAgICAgICAgICAgY21kRmFjdG9yeS5jcmVhdGVDcmVhdGVNYWlsUmVzb3VyY2VDbWQoam5kaU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBySG9zdCwgclVzZXIsIHJGcm9tLCBnZXRPcHRpb25hbCgpKTsKIAotICAgICAgICBmaW5hbCBEZWxldGVNYWlsUmVzb3VyY2VDbWQgZGVsZXRlQ21kID0gCisgICAgICAgIGZpbmFsIERlbGV0ZU1haWxSZXNvdXJjZUNtZCBkZWxldGVDbWQgPQogICAgICAgICAgICAgICAgIGNtZEZhY3RvcnkuY3JlYXRlRGVsZXRlTWFpbFJlc291cmNlQ21kKGpuZGlOYW1lKTsKIAogICAgICAgICBmaW5hbCBQaXBlQ21kIHAxID0gbmV3IFBpcGVDbWQoY29ubmVjdENtZCwgY3JlYXRlQ21kKTsKQEAgLTc3LDE0ICs3NywxNCBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24KICAgICB7CiAgICAgICAgIG5ldyBNYWlsUmVzb3VyY2VUZXN0KAotICAgICAgICAgICAgICAgICJhZG1pbiIsICJwYXNzd29yZCIsICJsb2NhbGhvc3QiLCA4Njg2LCAKKyAgICAgICAgICAgICAgICAiYWRtaW4iLCAicGFzc3dvcmQiLCAibG9jYWxob3N0IiwgODY4NiwKICAgICAgICAgICAgICAgICBrSk5ESU5hbWUsIGtIb3N0LCBrVXNlciwga0Zyb20pLnJ1bigpOwogICAgIH0KIAogICAgIHByaXZhdGUgTWFwIGdldE9wdGlvbmFsKCkKICAgICB7CiAgICAgICAgIGZpbmFsIE1hcCBvcHRpb25hbCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgIC8vb3B0aW9uYWwucHV0KENyZWF0ZVJlc291cmNlS2V5cy5SRVNPVVJDRV9PQkpFQ1RfVFlQRV9LRVksIAorICAgICAgICAvL29wdGlvbmFsLnB1dChDcmVhdGVSZXNvdXJjZUtleXMuUkVTT1VSQ0VfT0JKRUNUX1RZUEVfS0VZLAogICAgICAgICAgICAgLy9rT2JqZWN0VHlwZSk7CiAgICAgICAgIG9wdGlvbmFsLnB1dChNYWlsUmVzb3VyY2VDb25maWdLZXlzLkRFQlVHX0tFWSwga0RlYnVnKTsKICAgICAgICAgcmV0dXJuIG9wdGlvbmFsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9QTUZSZXNvdXJjZVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvUE1GUmVzb3VyY2VUZXN0LmphdmEKaW5kZXggN2EwMDNkNC4uODMyOWQyZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9QTUZSZXNvdXJjZVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L1BNRlJlc291cmNlVGVzdC5qYXZhCkBAIC0zNCw4ICszNCw4IEBACiAgICAgc3RhdGljIGZpbmFsIFN0cmluZyBrRmFjdG9yeUNsYXNzICAgPSAiYS5iLmMiOwogICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcga09iamVjdFR5cGUgICAgID0gInVzZXIiOwogCi0gICAgcHVibGljIFBNRlJlc291cmNlVGVzdChmaW5hbCBTdHJpbmcgdXNlciwgCi0gICAgICAgIGZpbmFsIFN0cmluZyBwYXNzd29yZCwgZmluYWwgU3RyaW5nIGhvc3QsIGZpbmFsIGludCBwb3J0LCAKKyAgICBwdWJsaWMgUE1GUmVzb3VyY2VUZXN0KGZpbmFsIFN0cmluZyB1c2VyLAorICAgICAgICBmaW5hbCBTdHJpbmcgcGFzc3dvcmQsIGZpbmFsIFN0cmluZyBob3N0LCBmaW5hbCBpbnQgcG9ydCwKICAgICAgICAgZmluYWwgU3RyaW5nIGpuZGlOYW1lKQogICAgIHsKICAgICAgICAgZmluYWwgQ21kRmFjdG9yeSBjbWRGYWN0b3J5ID0gZ2V0Q21kRmFjdG9yeSgpOwpAQCAtNDMsMTAgKzQzLDEwIEBACiAgICAgICAgIGZpbmFsIENvbm5lY3RDbWQgY29ubmVjdENtZCA9IGNtZEZhY3RvcnkuY3JlYXRlQ29ubmVjdENtZCgKICAgICAgICAgICAgICAgICB1c2VyLCBwYXNzd29yZCwgaG9zdCwgcG9ydCk7CiAKLSAgICAgICAgZmluYWwgQ3JlYXRlUE1GUmVzb3VyY2VDbWQgY3JlYXRlQ21kID0gCisgICAgICAgIGZpbmFsIENyZWF0ZVBNRlJlc291cmNlQ21kIGNyZWF0ZUNtZCA9CiAgICAgICAgICAgICAgICAgY21kRmFjdG9yeS5jcmVhdGVDcmVhdGVQTUZSZXNvdXJjZUNtZChqbmRpTmFtZSwgZ2V0T3B0aW9uYWwoKSk7CiAKLSAgICAgICAgZmluYWwgRGVsZXRlUE1GUmVzb3VyY2VDbWQgZGVsZXRlQ21kID0gCisgICAgICAgIGZpbmFsIERlbGV0ZVBNRlJlc291cmNlQ21kIGRlbGV0ZUNtZCA9CiAgICAgICAgICAgICAgICAgY21kRmFjdG9yeS5jcmVhdGVEZWxldGVQTUZSZXNvdXJjZUNtZChqbmRpTmFtZSk7CiAKICAgICAgICAgZmluYWwgUGlwZUNtZCBwMSA9IG5ldyBQaXBlQ21kKGNvbm5lY3RDbWQsIGNyZWF0ZUNtZCk7CkBAIC02OCwxOCArNjgsMTggQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0gICAgICAgIG5ldyBQTUZSZXNvdXJjZVRlc3QoImFkbWluIiwgInBhc3N3b3JkIiwgImxvY2FsaG9zdCIsIDg2ODYsIAotICAgICAgICAgICAgICAgIGtKTkRJTmFtZSkucnVuKCk7IAorICAgICAgICBuZXcgUE1GUmVzb3VyY2VUZXN0KCJhZG1pbiIsICJwYXNzd29yZCIsICJsb2NhbGhvc3QiLCA4Njg2LAorICAgICAgICAgICAgICAgIGtKTkRJTmFtZSkucnVuKCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBNYXAgZ2V0T3B0aW9uYWwoKQogICAgIHsKICAgICAgICAgZmluYWwgTWFwIG9wdGlvbmFsID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgLy9vcHRpb25hbC5wdXQoQ3JlYXRlUmVzb3VyY2VLZXlzLlJFU09VUkNFX09CSkVDVF9UWVBFX0tFWSwgCisgICAgICAgIC8vb3B0aW9uYWwucHV0KENyZWF0ZVJlc291cmNlS2V5cy5SRVNPVVJDRV9PQkpFQ1RfVFlQRV9LRVksCiAgICAgICAgICAgICAgICAgLy9rT2JqZWN0VHlwZSk7Ci0gICAgICAgIG9wdGlvbmFsLnB1dChQZXJzaXN0ZW5jZU1hbmFnZXJGYWN0b3J5UmVzb3VyY2VDb25maWdLZXlzLkpEQkNfUkVTT1VSQ0VfSk5ESV9OQU1FX0tFWSwgCisgICAgICAgIG9wdGlvbmFsLnB1dChQZXJzaXN0ZW5jZU1hbmFnZXJGYWN0b3J5UmVzb3VyY2VDb25maWdLZXlzLkpEQkNfUkVTT1VSQ0VfSk5ESV9OQU1FX0tFWSwKICAgICAgICAgICAgICAgICBrSkRCQ1Jlc291cmNlSk5ESU5hbWUpOwotICAgICAgICBvcHRpb25hbC5wdXQoUGVyc2lzdGVuY2VNYW5hZ2VyRmFjdG9yeVJlc291cmNlQ29uZmlnS2V5cy5GQUNUT1JZX0NMQVNTX0tFWSwgCisgICAgICAgIG9wdGlvbmFsLnB1dChQZXJzaXN0ZW5jZU1hbmFnZXJGYWN0b3J5UmVzb3VyY2VDb25maWdLZXlzLkZBQ1RPUllfQ0xBU1NfS0VZLAogICAgICAgICAgICAgICAgIGtGYWN0b3J5Q2xhc3MpOwogICAgICAgICByZXR1cm4gb3B0aW9uYWw7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9QaHVwLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L1BodXAuamF2YQppbmRleCBjNWJkM2I5Li5jMTdjMjg0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L1BodXAuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L1BodXAuamF2YQpAQCAtMzIsNjMgKzMyLDYzIEBACiAgKi8KIGNsYXNzIFBodXAKIHsKLQlQaHVwKGludCBwb3J0LCBTdHJpbmcgaG9zdCwgU3RyaW5nIHVzZXIsIFN0cmluZyBwYXNzd29yZCkKLQl7Ci0JCXRoaXMucG9ydCA9IHBvcnQ7Ci0JCXRoaXMuaG9zdCA9IGhvc3Q7Ci0JCXRoaXMudXNlciA9IHVzZXI7Ci0JCXRoaXMucGFzc3dvcmQgPSBwYXNzd29yZDsKLQl9Ci0JCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgUGh1cChpbnQgcG9ydCwgU3RyaW5nIGhvc3QsIFN0cmluZyB1c2VyLCBTdHJpbmcgcGFzc3dvcmQpCisgICAgeworICAgICAgICB0aGlzLnBvcnQgPSBwb3J0OworICAgICAgICB0aGlzLmhvc3QgPSBob3N0OworICAgICAgICB0aGlzLnVzZXIgPSB1c2VyOworICAgICAgICB0aGlzLnBhc3N3b3JkID0gcGFzc3dvcmQ7CisgICAgfQogCi0JUGh1cChTdHJpbmcgcG9ydCwgU3RyaW5nIGhvc3QsIFN0cmluZyB1c2VyLCBTdHJpbmcgcGFzc3dvcmQpIHRocm93cyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24KLQl7Ci0JCXRoaXMucG9ydCA9IHN0cmluZzJpbnQocG9ydCk7Ci0JCXRoaXMuaG9zdCA9IGhvc3Q7Ci0JCXRoaXMudXNlciA9IHVzZXI7Ci0JCXRoaXMucGFzc3dvcmQgPSBwYXNzd29yZDsKLQl9Ci0JCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCi0JUGh1cChQcm9wZXJ0aWVzIHByb3BzKSB0aHJvd3MgRGVwbG95bWVudFRlc3RzRXhjZXB0aW9uCi0JewotCQl1c2VyCQk9IHByb3BzLmdldFByb3BlcnR5KCJ1c2VyIik7Ci0JCXBhc3N3b3JkCT0gcHJvcHMuZ2V0UHJvcGVydHkoInBhc3N3b3JkIik7Ci0JCWhvc3QJCT0gcHJvcHMuZ2V0UHJvcGVydHkoImhvc3QiKTsKLQkJCi0JCWlmKHVzZXIgPT0gbnVsbCB8fCBwYXNzd29yZCA9PSBudWxsIHx8IGhvc3QgPT0gbnVsbCkKLQkJCXRocm93IG5ldyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24oIkNhbid0IGZpbmQgdXNlciBhbmQvb3IgcGFzc3dvcmQgYW5kL29yIGhvc3QgaW4gUHJvcGVydGllcyBmaWxlLiIpOworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCi0JCS8vIHN0cmluZzJpbnQgdmFsaWRhdGVzLi4uCi0JCXBvcnQgPSBzdHJpbmcyaW50KHByb3BzLmdldFByb3BlcnR5KCJwb3J0IikpOwotCX0KLQkKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCQotCXByaXZhdGUgc3RhdGljIGludCBzdHJpbmcyaW50KFN0cmluZyBzKSB0aHJvd3MgRGVwbG95bWVudFRlc3RzRXhjZXB0aW9uCi0JewotCQl0cnkKLQkJewotCQkJaW50IGkgPSBJbnRlZ2VyLnBhcnNlSW50KHMpOwotCQkJCi0JCQlpZihpIDw9IDAgfHwgaSA+IDY1NTM1KQotCQkJCXRocm93IG5ldyBOdW1iZXJGb3JtYXRFeGNlcHRpb24oKTsKLQkJCQotCQkJcmV0dXJuIGk7Ci0JCX0KLQkJY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkKLQkJewotCQkJdGhyb3cgbmV3IERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbigiQmFkIHBvcnQgbnVtYmVyOiAiICsgcyk7Ci0JCX0KLQl9Ci0JCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQkKLQkvLyBub3RlIHRoYXQgdGhlc2UgaGF2ZSBkZWZhdWx0IHNjb3BlLi4uCi0JU3RyaW5nIHVzZXI7Ci0JU3RyaW5nIHBhc3N3b3JkOwotCVN0cmluZyBob3N0OwotCWludCAgICBwb3J0OworICAgIFBodXAoU3RyaW5nIHBvcnQsIFN0cmluZyBob3N0LCBTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkKSB0aHJvd3MgRGVwbG95bWVudFRlc3RzRXhjZXB0aW9uCisgICAgeworICAgICAgICB0aGlzLnBvcnQgPSBzdHJpbmcyaW50KHBvcnQpOworICAgICAgICB0aGlzLmhvc3QgPSBob3N0OworICAgICAgICB0aGlzLnVzZXIgPSB1c2VyOworICAgICAgICB0aGlzLnBhc3N3b3JkID0gcGFzc3dvcmQ7CisgICAgfQorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBQaHVwKFByb3BlcnRpZXMgcHJvcHMpIHRocm93cyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24KKyAgICB7CisgICAgICAgIHVzZXIgICAgICAgID0gcHJvcHMuZ2V0UHJvcGVydHkoInVzZXIiKTsKKyAgICAgICAgcGFzc3dvcmQgICAgPSBwcm9wcy5nZXRQcm9wZXJ0eSgicGFzc3dvcmQiKTsKKyAgICAgICAgaG9zdCAgICAgICAgPSBwcm9wcy5nZXRQcm9wZXJ0eSgiaG9zdCIpOworCisgICAgICAgIGlmKHVzZXIgPT0gbnVsbCB8fCBwYXNzd29yZCA9PSBudWxsIHx8IGhvc3QgPT0gbnVsbCkKKyAgICAgICAgICAgIHRocm93IG5ldyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24oIkNhbid0IGZpbmQgdXNlciBhbmQvb3IgcGFzc3dvcmQgYW5kL29yIGhvc3QgaW4gUHJvcGVydGllcyBmaWxlLiIpOworCisgICAgICAgIC8vIHN0cmluZzJpbnQgdmFsaWRhdGVzLi4uCisgICAgICAgIHBvcnQgPSBzdHJpbmcyaW50KHByb3BzLmdldFByb3BlcnR5KCJwb3J0IikpOworICAgIH0KKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgc3RyaW5nMmludChTdHJpbmcgcykgdGhyb3dzIERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBpID0gSW50ZWdlci5wYXJzZUludChzKTsKKworICAgICAgICAgICAgaWYoaSA8PSAwIHx8IGkgPiA2NTUzNSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTnVtYmVyRm9ybWF0RXhjZXB0aW9uKCk7CisKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAgICAgIGNhdGNoKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24oIkJhZCBwb3J0IG51bWJlcjogIiArIHMpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIC8vIG5vdGUgdGhhdCB0aGVzZSBoYXZlIGRlZmF1bHQgc2NvcGUuLi4KKyAgICBTdHJpbmcgdXNlcjsKKyAgICBTdHJpbmcgcGFzc3dvcmQ7CisgICAgU3RyaW5nIGhvc3Q7CisgICAgaW50ICAgIHBvcnQ7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L1Jlc291cmNlQWRhcHRlckNvbmZpZ1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvUmVzb3VyY2VBZGFwdGVyQ29uZmlnVGVzdC5qYXZhCmluZGV4IDdkNDkwNjAuLjAwODUyNDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvUmVzb3VyY2VBZGFwdGVyQ29uZmlnVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvUmVzb3VyY2VBZGFwdGVyQ29uZmlnVGVzdC5qYXZhCkBAIC0zNCw4ICszNCw4IEBACiAgICAgc3RhdGljIGZpbmFsIFN0cmluZyBrTmFtZSAgICAgICAgICAgPSAic29tZU5hbWUiOwogICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcga1JBQ05hbWUgICAgICAgID0gIm15UmVzb3VyY2VBZGFwdGVyIjsKIAotICAgIHB1YmxpYyBSZXNvdXJjZUFkYXB0ZXJDb25maWdUZXN0KGZpbmFsIFN0cmluZyB1c2VyLCAKLSAgICAgICAgZmluYWwgU3RyaW5nIHBhc3N3b3JkLCBmaW5hbCBTdHJpbmcgaG9zdCwgZmluYWwgaW50IHBvcnQsIAorICAgIHB1YmxpYyBSZXNvdXJjZUFkYXB0ZXJDb25maWdUZXN0KGZpbmFsIFN0cmluZyB1c2VyLAorICAgICAgICBmaW5hbCBTdHJpbmcgcGFzc3dvcmQsIGZpbmFsIFN0cmluZyBob3N0LCBmaW5hbCBpbnQgcG9ydCwKICAgICAgICAgZmluYWwgU3RyaW5nIHJhY05hbWUpCiAgICAgewogICAgICAgICBmaW5hbCBDbWRGYWN0b3J5IGNtZEZhY3RvcnkgPSBnZXRDbWRGYWN0b3J5KCk7CkBAIC00MywxMSArNDMsMTEgQEAKICAgICAgICAgZmluYWwgQ29ubmVjdENtZCBjb25uZWN0Q21kID0gY21kRmFjdG9yeS5jcmVhdGVDb25uZWN0Q21kKAogICAgICAgICAgICAgICAgIHVzZXIsIHBhc3N3b3JkLCBob3N0LCBwb3J0KTsKIAotICAgICAgICBmaW5hbCBDcmVhdGVSZXNvdXJjZUFkYXB0ZXJDb25maWdDbWQgY3JlYXRlUkFDQ21kID0gCisgICAgICAgIGZpbmFsIENyZWF0ZVJlc291cmNlQWRhcHRlckNvbmZpZ0NtZCBjcmVhdGVSQUNDbWQgPQogICAgICAgICAgICAgICAgIGNtZEZhY3RvcnkuY3JlYXRlQ3JlYXRlUmVzb3VyY2VBZGFwdGVyQ29uZmlnQ21kKHJhY05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25hbCgpKTsKIAotICAgICAgICBmaW5hbCBEZWxldGVSZXNvdXJjZUFkYXB0ZXJDb25maWdDbWQgZGVsZXRlUkFDQ21kID0gCisgICAgICAgIGZpbmFsIERlbGV0ZVJlc291cmNlQWRhcHRlckNvbmZpZ0NtZCBkZWxldGVSQUNDbWQgPQogICAgICAgICAgICAgICAgIGNtZEZhY3RvcnkuY3JlYXRlRGVsZXRlUmVzb3VyY2VBZGFwdGVyQ29uZmlnQ21kKHJhY05hbWUpOwogCiAgICAgICAgIGZpbmFsIFBpcGVDbWQgcDEgPSBuZXcgUGlwZUNtZChjb25uZWN0Q21kLCBjcmVhdGVSQUNDbWQpOwpAQCAtNzcsOSArNzcsOSBAQAogICAgIHsKICAgICAgICAgZmluYWwgTWFwIG9wdGlvbmFsID0gbmV3IEhhc2hNYXAoMyk7CiAKLSAgICAgICAgb3B0aW9uYWwucHV0KFJlc291cmNlQWRhcHRlckNvbmZpZ0tleXMuVEhSRUFEX1BPT0xfSURTX0tFWSwgCisgICAgICAgIG9wdGlvbmFsLnB1dChSZXNvdXJjZUFkYXB0ZXJDb25maWdLZXlzLlRIUkVBRF9QT09MX0lEU19LRVksCiAgICAgICAgICAgICAgICAga1RocmVhZFBvb2xJRHMpOwotICAgICAgICAvL29wdGlvbmFsLnB1dChDcmVhdGVSZXNvdXJjZUtleXMuUkVTT1VSQ0VfT0JKRUNUX1RZUEVfS0VZLCAKKyAgICAgICAgLy9vcHRpb25hbC5wdXQoQ3JlYXRlUmVzb3VyY2VLZXlzLlJFU09VUkNFX09CSkVDVF9UWVBFX0tFWSwKICAgICAgICAgICAgICAgICAvL2tPYmplY3RUeXBlKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZW1vdmUgaGFyZCBjb2RlZCBOYW1lIik7CiAgICAgICAgIG9wdGlvbmFsLnB1dCgiTmFtZSIsIGtOYW1lKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvU2FtcGxlR2V0dGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L1NhbXBsZUdldHRlci5qYXZhCmluZGV4IDgzNTY3NmIuLmVlMWZjNDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvU2FtcGxlR2V0dGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9TYW1wbGVHZXR0ZXIuamF2YQpAQCAtMzEsNzUgKzMxLDc1IEBACiAgKi8KIGNsYXNzIFNhbXBsZUdldHRlcgogewotCVNhbXBsZUdldHRlcihQcm9wZXJ0aWVzIHApCi0JewotCQlwcm9wcyA9IHA7Ci0JfQotCQotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCQotCUxpc3QgZ2V0U2FtcGxlTGlzdCgpIHRocm93cyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24KLQl7Ci0JCVN0cmluZyBzYW1wbGVEaXIgPSBwcm9wcy5nZXRQcm9wZXJ0eSgic2FtcGxlZGlyIik7CisgICAgU2FtcGxlR2V0dGVyKFByb3BlcnRpZXMgcCkKKyAgICB7CisgICAgICAgIHByb3BzID0gcDsKKyAgICB9CiAKLQkJaWYoc2FtcGxlRGlyICE9IG51bGwgJiYgc2FtcGxlRGlyLmxlbmd0aCgpID4gMCkKLQkJCXJldHVybiBnZXRTYW1wbGVMaXN0RnJvbURpcihzYW1wbGVEaXIpOwotCQllbHNlCi0JCQlyZXR1cm4gZ2V0U2FtcGxlTGlzdEZyb21Qcm9wcygpOwotCX0KLQkKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQkKLQlwcml2YXRlIExpc3QgZ2V0U2FtcGxlTGlzdEZyb21EaXIoU3RyaW5nIGRpck5hbWUpIHRocm93cyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24KLQl7Ci0JCS8vIHNhbXBsZWRpciBoYXMgYSB2YWx1ZSBpbiB0aGUgcHJvcGVydGllcyBmaWxlLiAgV2UgYXJlIGNvbW1pdHRlZC4gIElmCi0JCS8vIHRoZXJlIGFyZSBhbnkgcHJvYmxlbXMsIGl0IGlzIGFuIGVycm9yIGFuZCB3ZSBkb24ndCB0cnkgdG8gZ2V0IGV4cGxpY2l0Ci0JCS8vIHNhbXBsZXMgZnJvbSB0aGUgcHJvcHMgZmlsZS4KLQkJCi0JCVN0cmluZyB1c2FnZSA9ICJQdXQgc29tZSBzYW1wbGUgZmlsZXMgaW4gYSBkaXJlY3RvcnkiICsKLQkJCQkiIGFuZCBzcGVjaWZ5IGl0IGluIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbGlrZSBzbzogIFwic2FtcGxlZGlyPS4vc2FtcGxlc1wiIjsKLQkJCi0JCUZpbGUgc2FtcGxlc0RpciA9IFV0aWxzLnNhZmVHZXRDYW5vbmljYWxGaWxlKG5ldyBGaWxlKGRpck5hbWUpKTsKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotCQkvLyBkb2VzIHRoZSBkaXJlY3RvcnkgZXhpc3Q/Ci0JCWlmKCEgKHNhbXBsZXNEaXIuZXhpc3RzKCkgJiYgc2FtcGxlc0Rpci5pc0RpcmVjdG9yeSgpKSkKLQkJCXRocm93IG5ldyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24oInNhbXBsZXMgZGlyIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgbm90IGEgZGlyZWN0b3J5ICgiICsKLQkJCQlzYW1wbGVzRGlyICsgIikuXG4iICsgdXNhZ2UpOworICAgIExpc3QgZ2V0U2FtcGxlTGlzdCgpIHRocm93cyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24KKyAgICB7CisgICAgICAgIFN0cmluZyBzYW1wbGVEaXIgPSBwcm9wcy5nZXRQcm9wZXJ0eSgic2FtcGxlZGlyIik7CiAKLQkJTGlzdCBzYW1wbGVzID0gbmV3IEFycmF5TGlzdCgpOworICAgICAgICBpZihzYW1wbGVEaXIgIT0gbnVsbCAmJiBzYW1wbGVEaXIubGVuZ3RoKCkgPiAwKQorICAgICAgICAgICAgcmV0dXJuIGdldFNhbXBsZUxpc3RGcm9tRGlyKHNhbXBsZURpcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBnZXRTYW1wbGVMaXN0RnJvbVByb3BzKCk7CisgICAgfQogCi0JCS8vCWRvZXMgdGhlIGRpcmVjdG9yeSBoYXZlIHNhbXBsZSBhcmNoaXZlIGZpbGVzIGluIGl0PwotCQlGaWxlW10gc2FtcGxlRmlsZXMgPSBzYW1wbGVzRGlyLmxpc3RGaWxlcyhuZXcgVXRpbHMuQXJjaGl2ZUZpbHRlcigpKTsKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotCQlmb3IoaW50IGkgPSAwOyBzYW1wbGVGaWxlcyAhPSBudWxsICYmIGkgPCBzYW1wbGVGaWxlcy5sZW5ndGg7IGkrKykKLQkJewotCQkJc2FtcGxlcy5hZGQobmV3IFV0aWxzLlNhbXBsZShzYW1wbGVGaWxlc1tpXSkpOwotCQl9Ci0JCQotCQkvLyBub3cgbG9vayBmb3IgZGlyLWRlcGxveXMuLi4KLQkJc2FtcGxlRmlsZXMgPSBzYW1wbGVzRGlyLmxpc3RGaWxlcyhuZXcgVXRpbHMuRGlyRGVwbG95RmlsdGVyKCkpOwotCQkKLQkJZm9yKGludCBpID0gMDsgc2FtcGxlRmlsZXMgIT0gbnVsbCAmJiBpIDwgc2FtcGxlRmlsZXMubGVuZ3RoOyBpKyspCi0JCXsKLQkJCXNhbXBsZXMuYWRkKG5ldyBVdGlscy5TYW1wbGUoc2FtcGxlRmlsZXNbaV0pKTsKLQkJCS8vU3lzdGVtLmVyci5wcmludGxuKCJaWlpaWlogZGlyLWRlcGxveTogIiArIHNhbXBsZUZpbGVzW2ldKTsKLQkJCS8vU3lzdGVtLmV4aXQoMSk7Ci0JCX0KKyAgICBwcml2YXRlIExpc3QgZ2V0U2FtcGxlTGlzdEZyb21EaXIoU3RyaW5nIGRpck5hbWUpIHRocm93cyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24KKyAgICB7CisgICAgICAgIC8vIHNhbXBsZWRpciBoYXMgYSB2YWx1ZSBpbiB0aGUgcHJvcGVydGllcyBmaWxlLiAgV2UgYXJlIGNvbW1pdHRlZC4gIElmCisgICAgICAgIC8vIHRoZXJlIGFyZSBhbnkgcHJvYmxlbXMsIGl0IGlzIGFuIGVycm9yIGFuZCB3ZSBkb24ndCB0cnkgdG8gZ2V0IGV4cGxpY2l0CisgICAgICAgIC8vIHNhbXBsZXMgZnJvbSB0aGUgcHJvcHMgZmlsZS4KIAotCQlpZihzYW1wbGVzLnNpemUoKSA8PSAwKQotCQkJdGhyb3cgbmV3IERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbigiTm8gc2FtcGxlcyBpbiAiICsgc2FtcGxlc0RpciArICIuXG4iICsgdXNhZ2UpOworICAgICAgICBTdHJpbmcgdXNhZ2UgPSAiUHV0IHNvbWUgc2FtcGxlIGZpbGVzIGluIGEgZGlyZWN0b3J5IiArCisgICAgICAgICAgICAgICAgIiBhbmQgc3BlY2lmeSBpdCBpbiB0aGUgcHJvcGVydGllcyBmaWxlIGxpa2Ugc286ICBcInNhbXBsZWRpcj0uL3NhbXBsZXNcIiI7CiAKLQkJcmV0dXJuIHNhbXBsZXM7Ci0JfQotCQotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCQotCXByaXZhdGUgTGlzdCBnZXRTYW1wbGVMaXN0RnJvbVByb3BzKCkgdGhyb3dzIERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbgotCXsKLQkJdGhyb3cgbmV3IERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbigiTm90IEltcGxlbWVudGVkIFlldCEiKTsKLQl9Ci0JCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCi0JcHJpdmF0ZQlQcm9wZXJ0aWVzCXByb3BzOworICAgICAgICBGaWxlIHNhbXBsZXNEaXIgPSBVdGlscy5zYWZlR2V0Q2Fub25pY2FsRmlsZShuZXcgRmlsZShkaXJOYW1lKSk7CisKKyAgICAgICAgLy8gZG9lcyB0aGUgZGlyZWN0b3J5IGV4aXN0PworICAgICAgICBpZighIChzYW1wbGVzRGlyLmV4aXN0cygpICYmIHNhbXBsZXNEaXIuaXNEaXJlY3RvcnkoKSkpCisgICAgICAgICAgICB0aHJvdyBuZXcgRGVwbG95bWVudFRlc3RzRXhjZXB0aW9uKCJzYW1wbGVzIGRpciBkb2Vzbid0IGV4aXN0IG9yIGlzIG5vdCBhIGRpcmVjdG9yeSAoIiArCisgICAgICAgICAgICAgICAgc2FtcGxlc0RpciArICIpLlxuIiArIHVzYWdlKTsKKworICAgICAgICBMaXN0IHNhbXBsZXMgPSBuZXcgQXJyYXlMaXN0KCk7CisKKyAgICAgICAgLy8gICAgZG9lcyB0aGUgZGlyZWN0b3J5IGhhdmUgc2FtcGxlIGFyY2hpdmUgZmlsZXMgaW4gaXQ/CisgICAgICAgIEZpbGVbXSBzYW1wbGVGaWxlcyA9IHNhbXBsZXNEaXIubGlzdEZpbGVzKG5ldyBVdGlscy5BcmNoaXZlRmlsdGVyKCkpOworCisgICAgICAgIGZvcihpbnQgaSA9IDA7IHNhbXBsZUZpbGVzICE9IG51bGwgJiYgaSA8IHNhbXBsZUZpbGVzLmxlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBzYW1wbGVzLmFkZChuZXcgVXRpbHMuU2FtcGxlKHNhbXBsZUZpbGVzW2ldKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBub3cgbG9vayBmb3IgZGlyLWRlcGxveXMuLi4KKyAgICAgICAgc2FtcGxlRmlsZXMgPSBzYW1wbGVzRGlyLmxpc3RGaWxlcyhuZXcgVXRpbHMuRGlyRGVwbG95RmlsdGVyKCkpOworCisgICAgICAgIGZvcihpbnQgaSA9IDA7IHNhbXBsZUZpbGVzICE9IG51bGwgJiYgaSA8IHNhbXBsZUZpbGVzLmxlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBzYW1wbGVzLmFkZChuZXcgVXRpbHMuU2FtcGxlKHNhbXBsZUZpbGVzW2ldKSk7CisgICAgICAgICAgICAvL1N5c3RlbS5lcnIucHJpbnRsbigiWlpaWlpaIGRpci1kZXBsb3k6ICIgKyBzYW1wbGVGaWxlc1tpXSk7CisgICAgICAgICAgICAvL1N5c3RlbS5leGl0KDEpOworICAgICAgICB9CisKKyAgICAgICAgaWYoc2FtcGxlcy5zaXplKCkgPD0gMCkKKyAgICAgICAgICAgIHRocm93IG5ldyBEZXBsb3ltZW50VGVzdHNFeGNlcHRpb24oIk5vIHNhbXBsZXMgaW4gIiArIHNhbXBsZXNEaXIgKyAiLlxuIiArIHVzYWdlKTsKKworICAgICAgICByZXR1cm4gc2FtcGxlczsKKyAgICB9CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIHByaXZhdGUgTGlzdCBnZXRTYW1wbGVMaXN0RnJvbVByb3BzKCkgdGhyb3dzIERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgdGhyb3cgbmV3IERlcGxveW1lbnRUZXN0c0V4Y2VwdGlvbigiTm90IEltcGxlbWVudGVkIFlldCEiKTsKKyAgICB9CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIHByaXZhdGUgICAgUHJvcGVydGllcyAgICBwcm9wczsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvU2ltcGxlUGVyc2lzdGVuY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvU2ltcGxlUGVyc2lzdGVuY2UuamF2YQppbmRleCBiNmZjZDgzLi5iOTAwZDEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L1NpbXBsZVBlcnNpc3RlbmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9TaW1wbGVQZXJzaXN0ZW5jZS5qYXZhCkBAIC0zMywyMDMgKzMzLDIwMyBAQAogCiBwdWJsaWMgY2xhc3MgU2ltcGxlUGVyc2lzdGVuY2UKIHsKLQlwdWJsaWMgU2ltcGxlUGVyc2lzdGVuY2UoT2JqZWN0IG8pCi0JewotCQl0aGlzKG8sIG51bGwsIHRydWUpOwotCX0KKyAgICBwdWJsaWMgU2ltcGxlUGVyc2lzdGVuY2UoT2JqZWN0IG8pCisgICAgeworICAgICAgICB0aGlzKG8sIG51bGwsIHRydWUpOworICAgIH0KIAotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCi0JcHVibGljIFNpbXBsZVBlcnNpc3RlbmNlKE9iamVjdCBvLCBib29sZWFuIGF1dG9GbHVzaCkKLQl7Ci0JCXRoaXMobywgbnVsbCwgYXV0b0ZsdXNoKTsKLQl9CisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCi0JcHVibGljIFNpbXBsZVBlcnNpc3RlbmNlKE9iamVjdCBvLCBTdHJpbmcgZm5hbWUpCi0JewotCQl0aGlzKG8sIGZuYW1lLCB0cnVlKTsKLQl9CisgICAgcHVibGljIFNpbXBsZVBlcnNpc3RlbmNlKE9iamVjdCBvLCBib29sZWFuIGF1dG9GbHVzaCkKKyAgICB7CisgICAgICAgIHRoaXMobywgbnVsbCwgYXV0b0ZsdXNoKTsKKyAgICB9CiAKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCQotCXB1YmxpYyBTaW1wbGVQZXJzaXN0ZW5jZShPYmplY3QgbywgU3RyaW5nIGZuYW1lLCBib29sZWFuIGF1dG9GbHVzaCkKLQl7Ci0JCXBlcnNpc3RlbmNlRmlsZVJvb3ROYW1lID0gZm5hbWU7Ci0JCXRoaXMuYXV0b0ZsdXNoID0gYXV0b0ZsdXNoOwotCQlpbml0KG8pOwotCQlsb2FkKCk7Ci0JfQorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCQotCXB1YmxpYyBTaW1wbGVQZXJzaXN0ZW5jZShGaWxlIGYpCi0JewotCQl0aGlzKGYsIHRydWUpOwotCX0KKyAgICBwdWJsaWMgU2ltcGxlUGVyc2lzdGVuY2UoT2JqZWN0IG8sIFN0cmluZyBmbmFtZSkKKyAgICB7CisgICAgICAgIHRoaXMobywgZm5hbWUsIHRydWUpOworICAgIH0KIAotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCi0JcHVibGljIFNpbXBsZVBlcnNpc3RlbmNlKEZpbGUgZiwgYm9vbGVhbiBhdXRvRmx1c2gpCi0JewotCQlwZXJzaXN0ZW5jZUZpbGUgPWY7Ci0JCXRoaXMuYXV0b0ZsdXNoID0gYXV0b0ZsdXNoOwotCQkKLQkJaWYoIXBlcnNpc3RlbmNlRmlsZS5leGlzdHMoKSkKLQkJCXN0b3JlKCk7CisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotCQlsb2FkKCk7Ci0JfQorICAgIHB1YmxpYyBTaW1wbGVQZXJzaXN0ZW5jZShPYmplY3QgbywgU3RyaW5nIGZuYW1lLCBib29sZWFuIGF1dG9GbHVzaCkKKyAgICB7CisgICAgICAgIHBlcnNpc3RlbmNlRmlsZVJvb3ROYW1lID0gZm5hbWU7CisgICAgICAgIHRoaXMuYXV0b0ZsdXNoID0gYXV0b0ZsdXNoOworICAgICAgICBpbml0KG8pOworICAgICAgICBsb2FkKCk7CisgICAgfQogCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5KFN0cmluZyBrZXkpCi0JewotCQlyZXR1cm4gcHJvcHMuZ2V0UHJvcGVydHkoa2V5KTsKLQl9CisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCi0JcHVibGljIFByb3BlcnRpZXMgZ2V0UHJvcGVydGllcygpCi0JeyAKLQkJcmV0dXJuIHByb3BzOwotCX0KKyAgICBwdWJsaWMgU2ltcGxlUGVyc2lzdGVuY2UoRmlsZSBmKQorICAgIHsKKyAgICAgICAgdGhpcyhmLCB0cnVlKTsKKyAgICB9CiAKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCQotCXB1YmxpYyB2b2lkIHNldFByb3BlcnR5KFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSkKLQl7IAotCQlwcm9wcy5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTsKLQkJCi0JCWlmKGF1dG9GbHVzaCkKLQkJCXN0b3JlKCk7Ci0JfQotCQotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotCXB1YmxpYyB2b2lkIHN0b3JlKCkKLQl7Ci0JCXRyeQotCQl7Ci0JCQlPdXRwdXRTdHJlYW0gb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShwZXJzaXN0ZW5jZUZpbGUpOwotCQkJcHJvcHMuc3RvcmUob3MsICJTaW1wbGUgUGVyc2lzdGVuY2UgUHJvcGVydGllcyIpOwotCQkJb3MuY2xvc2UoKTsKLQkJfQotCQljYXRjaChJT0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCQotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgcHVibGljIFNpbXBsZVBlcnNpc3RlbmNlKEZpbGUgZiwgYm9vbGVhbiBhdXRvRmx1c2gpCisgICAgeworICAgICAgICBwZXJzaXN0ZW5jZUZpbGUgPWY7CisgICAgICAgIHRoaXMuYXV0b0ZsdXNoID0gYXV0b0ZsdXNoOwogCi0JcHVibGljIGZpbmFsIHZvaWQgY2xlYXIoKQotCXsKLQkJcHJvcHMuY2xlYXIoKTsKLQl9Ci0JCQotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCi0JcHJpdmF0ZSB2b2lkIGluaXQoT2JqZWN0IG8pCi0JewotCQlDbGFzcwljbGF6egk9IG8uZ2V0Q2xhc3MoKTsKLQkJUGFja2FnZSBwa2cJCT0gY2xhenouZ2V0UGFja2FnZSgpOwotCQkKLQkJLy8gd2UgbmVlZCB0aGUgbmFtZSBvZiBhIGZpbGUgaW4gdGhlIGNhbGxlcidzIHBhY2thZ2UuICBBTlkgZmlsZSB3aWxsIGRvIQotCQkvLyBzbyB3ZSB1c2UgdGhlIGNhbGxlcidzIC5jbGFzcyBmaWxlCi0JCQotCQlmaW5hbCBTdHJpbmcgY2xhc3NGaWxlTmFtZSA9IGNsYXp6LmdldE5hbWUoKS5zdWJzdHJpbmcocGtnLmdldE5hbWUoKS5sZW5ndGgoKSArIDEpICsgIi5jbGFzcyI7Ci0JCQotCQlVUkwgdXJsID0gY2xhenouZ2V0UmVzb3VyY2UoY2xhc3NGaWxlTmFtZSk7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHVybC5nZXRQYXRoKCk7Ci0JCQotCQlpZihjYW5Xcml0ZShmaWxlbmFtZSkpCi0JCXsKLQkJCS8vIG1ha2UgdGhlIHByb3BlcnRpZXMgZmlsZW5hbWUgc2ltcGxlCi0JCQlpZihwZXJzaXN0ZW5jZUZpbGVSb290TmFtZSA9PSBudWxsKQotCQkJCXBlcnNpc3RlbmNlRmlsZVJvb3ROYW1lID0gInBlcnNpc3QucHJvcGVydGllcyI7Ci0JCQkKLQkJCWZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDAsIGZpbGVuYW1lLmluZGV4T2YoY2xhc3NGaWxlTmFtZSkpOwotCQkJZmlsZW5hbWUgKz0gcGVyc2lzdGVuY2VGaWxlUm9vdE5hbWU7Ci0JCQlwZXJzaXN0ZW5jZUZpbGUgPSBuZXcgRmlsZShmaWxlbmFtZSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkvLyBtYWtlIHRoZSBwcm9wZXJ0aWVzIGZpbGVuYW1lIGVxdWFsIHRvIHRoZSBwYWNrYWdlIG5hbWUKLQkJCS8vIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIG90aGVyIGNhbGxlcnMuCi0JCQlpZihwZXJzaXN0ZW5jZUZpbGVSb290TmFtZSA9PSBudWxsKQotCQkJCXBlcnNpc3RlbmNlRmlsZVJvb3ROYW1lID0gcGtnLmdldE5hbWUoKSArICIucHJvcGVydGllcyI7Ci0JCQkKLQkJCS8vIG1vc3QgbGlrZWx5IC0tIHdlIGFyZSBydW5uaW5nIGZyb20gYSBqYXIhCi0JCQlwZXJzaXN0ZW5jZUZpbGUgPSBuZXcgRmlsZShTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEuaW8udG1wZGlyIikpOwotCQkJcGVyc2lzdGVuY2VGaWxlID0gbmV3IEZpbGUocGVyc2lzdGVuY2VGaWxlLCBwZXJzaXN0ZW5jZUZpbGVSb290TmFtZSk7Ci0JCX0KKyAgICAgICAgaWYoIXBlcnNpc3RlbmNlRmlsZS5leGlzdHMoKSkKKyAgICAgICAgICAgIHN0b3JlKCk7CiAKLQkJaWYoIXBlcnNpc3RlbmNlRmlsZS5leGlzdHMoKSkKLQkJewotCQkJLy8gd3JpdGUgYW4gZW1wdHkgZmlsZS4uLgotCQkJc3RvcmUoKTsKLQkJfQotCQkKLQkJU3lzdGVtLm91dC5wcmludGxuKCJQZXJzaXN0ZW5jZSBGaWxlOiAiICsgcGVyc2lzdGVuY2VGaWxlLmdldEFic29sdXRlUGF0aCgpKTsKLQl9Ci0JCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQkKLQlwcml2YXRlIHZvaWQgbG9hZCgpCi0JewotCQl0cnkKLQkJeyAgCi0JCQlJbnB1dFN0cmVhbSBpbiA9IG5ldyBGaWxlSW5wdXRTdHJlYW0ocGVyc2lzdGVuY2VGaWxlKTsKLQkJCXByb3BzLmxvYWQoaW4pOwotCQkJaW4uY2xvc2UoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihwcm9wcyk7Ci0JCX0KLQkJY2F0Y2goSU9FeGNlcHRpb24gZSkgCi0JCXsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0JCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQkKLQlwcml2YXRlIGJvb2xlYW4gY2FuV3JpdGUoU3RyaW5nIGZuYW1lKQotCXsKLQkJRmlsZSBmID0gbmV3IEZpbGUoZm5hbWUpOwotCQkKLQkJaWYoZi5leGlzdHMoKSkKLQkJewotCQkJcmV0dXJuIGYuY2FuV3JpdGUoKTsKLQkJfQotCQkKLQkJdHJ5Ci0JCXsKLQkJCXJldHVybiBmLmNyZWF0ZU5ld0ZpbGUoKTsKLQkJfQotCQljYXRjaChJT0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0JCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQkKLQlwcml2YXRlCQkJCQlQcm9wZXJ0aWVzCXByb3BzCQkJCQk9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JcHJpdmF0ZQkJCQkJRmlsZQkJcGVyc2lzdGVuY2VGaWxlOwotCXByaXZhdGUJCQkJCUNsYXNzCQljYWxsZXI7Ci0JcHJpdmF0ZQkJCQkJU3RyaW5nCQlwZXJzaXN0ZW5jZUZpbGVSb290TmFtZTsKLQlwcml2YXRlCQkJCQlib29sZWFuCQlhdXRvRmx1c2g7Ci0JLyoqCi0JICogQHBhcmFtIGFyZ3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotCXsKLQkJY2xhc3MgZm9vIHt9Ci0JCVNpbXBsZVBlcnNpc3RlbmNlIHNwID0gbmV3IFNpbXBsZVBlcnNpc3RlbmNlKG5ldyBmb28oKSwgdHJ1ZSk7Ci0JCXNwLnNldFByb3BlcnR5KCJmb28iLCAiZ29vIik7Ci0JCS8vbS5nZXRQcm9wcygpOwotCX0KLQkKKyAgICAgICAgbG9hZCgpOworICAgIH0KKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5KFN0cmluZyBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gcHJvcHMuZ2V0UHJvcGVydHkoa2V5KTsKKyAgICB9CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgcHVibGljIFByb3BlcnRpZXMgZ2V0UHJvcGVydGllcygpCisgICAgeworICAgICAgICByZXR1cm4gcHJvcHM7CisgICAgfQorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIHB1YmxpYyB2b2lkIHNldFByb3BlcnR5KFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSkKKyAgICB7CisgICAgICAgIHByb3BzLnNldFByb3BlcnR5KGtleSwgdmFsdWUpOworCisgICAgICAgIGlmKGF1dG9GbHVzaCkKKyAgICAgICAgICAgIHN0b3JlKCk7CisgICAgfQorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIHB1YmxpYyB2b2lkIHN0b3JlKCkKKyAgICB7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShwZXJzaXN0ZW5jZUZpbGUpOworICAgICAgICAgICAgcHJvcHMuc3RvcmUob3MsICJTaW1wbGUgUGVyc2lzdGVuY2UgUHJvcGVydGllcyIpOworICAgICAgICAgICAgb3MuY2xvc2UoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChJT0V4Y2VwdGlvbiBlKQorICAgICAgICB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIHB1YmxpYyBmaW5hbCB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIHByb3BzLmNsZWFyKCk7CisgICAgfQorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIHByaXZhdGUgdm9pZCBpbml0KE9iamVjdCBvKQorICAgIHsKKyAgICAgICAgQ2xhc3MgICAgY2xhenogICAgPSBvLmdldENsYXNzKCk7CisgICAgICAgIFBhY2thZ2UgcGtnICAgICAgICA9IGNsYXp6LmdldFBhY2thZ2UoKTsKKworICAgICAgICAvLyB3ZSBuZWVkIHRoZSBuYW1lIG9mIGEgZmlsZSBpbiB0aGUgY2FsbGVyJ3MgcGFja2FnZS4gIEFOWSBmaWxlIHdpbGwgZG8hCisgICAgICAgIC8vIHNvIHdlIHVzZSB0aGUgY2FsbGVyJ3MgLmNsYXNzIGZpbGUKKworICAgICAgICBmaW5hbCBTdHJpbmcgY2xhc3NGaWxlTmFtZSA9IGNsYXp6LmdldE5hbWUoKS5zdWJzdHJpbmcocGtnLmdldE5hbWUoKS5sZW5ndGgoKSArIDEpICsgIi5jbGFzcyI7CisKKyAgICAgICAgVVJMIHVybCA9IGNsYXp6LmdldFJlc291cmNlKGNsYXNzRmlsZU5hbWUpOworICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSB1cmwuZ2V0UGF0aCgpOworCisgICAgICAgIGlmKGNhbldyaXRlKGZpbGVuYW1lKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gbWFrZSB0aGUgcHJvcGVydGllcyBmaWxlbmFtZSBzaW1wbGUKKyAgICAgICAgICAgIGlmKHBlcnNpc3RlbmNlRmlsZVJvb3ROYW1lID09IG51bGwpCisgICAgICAgICAgICAgICAgcGVyc2lzdGVuY2VGaWxlUm9vdE5hbWUgPSAicGVyc2lzdC5wcm9wZXJ0aWVzIjsKKworICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoMCwgZmlsZW5hbWUuaW5kZXhPZihjbGFzc0ZpbGVOYW1lKSk7CisgICAgICAgICAgICBmaWxlbmFtZSArPSBwZXJzaXN0ZW5jZUZpbGVSb290TmFtZTsKKyAgICAgICAgICAgIHBlcnNpc3RlbmNlRmlsZSA9IG5ldyBGaWxlKGZpbGVuYW1lKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIG1ha2UgdGhlIHByb3BlcnRpZXMgZmlsZW5hbWUgZXF1YWwgdG8gdGhlIHBhY2thZ2UgbmFtZQorICAgICAgICAgICAgLy8gdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggb3RoZXIgY2FsbGVycy4KKyAgICAgICAgICAgIGlmKHBlcnNpc3RlbmNlRmlsZVJvb3ROYW1lID09IG51bGwpCisgICAgICAgICAgICAgICAgcGVyc2lzdGVuY2VGaWxlUm9vdE5hbWUgPSBwa2cuZ2V0TmFtZSgpICsgIi5wcm9wZXJ0aWVzIjsKKworICAgICAgICAgICAgLy8gbW9zdCBsaWtlbHkgLS0gd2UgYXJlIHJ1bm5pbmcgZnJvbSBhIGphciEKKyAgICAgICAgICAgIHBlcnNpc3RlbmNlRmlsZSA9IG5ldyBGaWxlKFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5pby50bXBkaXIiKSk7CisgICAgICAgICAgICBwZXJzaXN0ZW5jZUZpbGUgPSBuZXcgRmlsZShwZXJzaXN0ZW5jZUZpbGUsIHBlcnNpc3RlbmNlRmlsZVJvb3ROYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCFwZXJzaXN0ZW5jZUZpbGUuZXhpc3RzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHdyaXRlIGFuIGVtcHR5IGZpbGUuLi4KKyAgICAgICAgICAgIHN0b3JlKCk7CisgICAgICAgIH0KKworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBlcnNpc3RlbmNlIEZpbGU6ICIgKyBwZXJzaXN0ZW5jZUZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOworICAgIH0KKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBwcml2YXRlIHZvaWQgbG9hZCgpCisgICAgeworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAgICAgSW5wdXRTdHJlYW0gaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKHBlcnNpc3RlbmNlRmlsZSk7CisgICAgICAgICAgICBwcm9wcy5sb2FkKGluKTsKKyAgICAgICAgICAgIGluLmNsb3NlKCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocHJvcHMpOworICAgICAgICB9CisgICAgICAgIGNhdGNoKElPRXhjZXB0aW9uIGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgcHJpdmF0ZSBib29sZWFuIGNhbldyaXRlKFN0cmluZyBmbmFtZSkKKyAgICB7CisgICAgICAgIEZpbGUgZiA9IG5ldyBGaWxlKGZuYW1lKTsKKworICAgICAgICBpZihmLmV4aXN0cygpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZi5jYW5Xcml0ZSgpOworICAgICAgICB9CisKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmLmNyZWF0ZU5ld0ZpbGUoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChJT0V4Y2VwdGlvbiBlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgcHJpdmF0ZSAgICAgICAgICAgICAgICAgICAgUHJvcGVydGllcyAgICBwcm9wcyAgICAgICAgICAgICAgICAgICAgPSBuZXcgUHJvcGVydGllcygpOworICAgIHByaXZhdGUgICAgICAgICAgICAgICAgICAgIEZpbGUgICAgICAgIHBlcnNpc3RlbmNlRmlsZTsKKyAgICBwcml2YXRlICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgY2FsbGVyOworICAgIHByaXZhdGUgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgcGVyc2lzdGVuY2VGaWxlUm9vdE5hbWU7CisgICAgcHJpdmF0ZSAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiAgICAgICAgYXV0b0ZsdXNoOworICAgIC8qKgorICAgICAqIEBwYXJhbSBhcmdzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKKyAgICB7CisgICAgICAgIGNsYXNzIGZvbyB7fQorICAgICAgICBTaW1wbGVQZXJzaXN0ZW5jZSBzcCA9IG5ldyBTaW1wbGVQZXJzaXN0ZW5jZShuZXcgZm9vKCksIHRydWUpOworICAgICAgICBzcC5zZXRQcm9wZXJ0eSgiZm9vIiwgImdvbyIpOworICAgICAgICAvL20uZ2V0UHJvcHMoKTsKKyAgICB9CisKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9TdG9wQ2x1c3RlclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvU3RvcENsdXN0ZXJUZXN0LmphdmEKaW5kZXggMWY0ZWMzNy4uNTkwYWM1ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9TdG9wQ2x1c3RlclRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L1N0b3BDbHVzdGVyVGVzdC5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAgICAgICAgIGZpbmFsIENvbm5lY3RDbWQgY29ubmVjdENtZCA9IGNtZEZhY3RvcnkuY3JlYXRlQ29ubmVjdENtZCgKICAgICAgICAgICAgICAgICB1c2VyLCBwYXNzd29yZCwgaG9zdCwgcG9ydCk7CiAKLSAgICAgICAgZmluYWwgU3RvcENsdXN0ZXJDbWQgc3RvcENsdXN0ZXJDbWQgPSAKKyAgICAgICAgZmluYWwgU3RvcENsdXN0ZXJDbWQgc3RvcENsdXN0ZXJDbWQgPQogICAgICAgICAgICAgICAgIGNtZEZhY3RvcnkuY3JlYXRlU3RvcENsdXN0ZXJDbWQoY2x1c3Rlck5hbWUpOwogCiAgICAgICAgIHRhcmdldCA9IG5ldyBQaXBlQ21kKGNvbm5lY3RDbWQsIHN0b3BDbHVzdGVyQ21kKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvVGVlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L1RlZS5qYXZhCmluZGV4IDA1MmRiMDQuLjFjYTJiMzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvVGVlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9UZWUuamF2YQpAQCAtMjQsMTI0ICsyNCwxMjQgQEAKIGltcG9ydCBqYXZhLmlvLio7CiAKIAotcHVibGljIGNsYXNzIFRlZSBleHRlbmRzIFByaW50U3RyZWFtIAorcHVibGljIGNsYXNzIFRlZSBleHRlbmRzIFByaW50U3RyZWFtCiB7CiAKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLQlwcml2YXRlIFRlZShQcmludFN0cmVhbSBwcykgCi0JewotCQlzdXBlcihwcyk7Ci0JfQorICAgIHByaXZhdGUgVGVlKFByaW50U3RyZWFtIHBzKQorICAgIHsKKyAgICAgICAgc3VwZXIocHMpOworICAgIH0KIAogCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCi0JLy8gU3RhcnRzIGNvcHlpbmcgc3Rkb3V0IGFuZCAKLQkvL3N0ZGVyciB0byB0aGUgZmlsZSBmLgotCXB1YmxpYyBzdGF0aWMgdm9pZCBzdGFydChTdHJpbmcgZikgdGhyb3dzIElPRXhjZXB0aW9uIAotCXsKLQkJLy8gU2F2ZSBvbGQgc2V0dGluZ3MuCi0JCW9sZFN0ZG91dCA9IFN5c3RlbS5vdXQ7Ci0JCS8vb2xkU3RkZXJyID0gU3lzdGVtLmVycjsKKyAgICAvLyBTdGFydHMgY29weWluZyBzdGRvdXQgYW5kCisgICAgLy9zdGRlcnIgdG8gdGhlIGZpbGUgZi4KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgc3RhcnQoU3RyaW5nIGYpIHRocm93cyBJT0V4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgLy8gU2F2ZSBvbGQgc2V0dGluZ3MuCisgICAgICAgIG9sZFN0ZG91dCA9IFN5c3RlbS5vdXQ7CisgICAgICAgIC8vb2xkU3RkZXJyID0gU3lzdGVtLmVycjsKIAotCQkvLyBDcmVhdGUvT3BlbiBsb2dmaWxlLgotCQlsb2dmaWxlID0gbmV3IFByaW50U3RyZWFtKG5ldyBCdWZmZXJlZE91dHB1dFN0cmVhbShuZXcgRmlsZU91dHB1dFN0cmVhbShmKSkpOworICAgICAgICAvLyBDcmVhdGUvT3BlbiBsb2dmaWxlLgorICAgICAgICBsb2dmaWxlID0gbmV3IFByaW50U3RyZWFtKG5ldyBCdWZmZXJlZE91dHB1dFN0cmVhbShuZXcgRmlsZU91dHB1dFN0cmVhbShmKSkpOwogCi0JCS8vIFN0YXJ0IHJlZGlyZWN0aW5nIHRoZSBvdXRwdXQuCi0JCVN5c3RlbS5zZXRPdXQobmV3IFRlZShTeXN0ZW0ub3V0KSk7Ci0JCS8vU3lzdGVtLnNldEVycihuZXcgVGVlKFN5c3RlbS5lcnIpKTsKLQl9CisgICAgICAgIC8vIFN0YXJ0IHJlZGlyZWN0aW5nIHRoZSBvdXRwdXQuCisgICAgICAgIFN5c3RlbS5zZXRPdXQobmV3IFRlZShTeXN0ZW0ub3V0KSk7CisgICAgICAgIC8vU3lzdGVtLnNldEVycihuZXcgVGVlKFN5c3RlbS5lcnIpKTsKKyAgICB9CiAKIAotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotCS8vIFJlc3RvcmVzIHRoZSBvcmlnaW5hbCBzZXR0aW5ncy4KLQlwdWJsaWMgc3RhdGljIHZvaWQgc3RvcCgpIAotCXsKLQkJU3lzdGVtLnNldE91dChvbGRTdGRvdXQpOwotCQkvL1N5c3RlbS5zZXRFcnIob2xkU3RkZXJyKTsKLQkJCi0JCXRyeSAKLQkJewotCQkJbG9nZmlsZS5jbG9zZSgpOwotCQl9IAotCQljYXRjaCAoRXhjZXB0aW9uIGUpIAotCQl7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQorICAgIC8vIFJlc3RvcmVzIHRoZSBvcmlnaW5hbCBzZXR0aW5ncy4KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgc3RvcCgpCisgICAgeworICAgICAgICBTeXN0ZW0uc2V0T3V0KG9sZFN0ZG91dCk7CisgICAgICAgIC8vU3lzdGVtLnNldEVycihvbGRTdGRlcnIpOworCisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICBsb2dmaWxlLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQorICAgICAgICB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgfQogCiAKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLQkvLyBQcmludFN0cmVhbSBvdmVycmlkZS4KLQlwdWJsaWMgdm9pZCB3cml0ZShpbnQgYikgCi0JewotCQl0cnkgCi0JCXsKLQkJCWxvZ2ZpbGUud3JpdGUoYik7Ci0JCX0gCi0JCWNhdGNoIChFeGNlcHRpb24gZSkgCi0JCXsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQlzZXRFcnJvcigpOwotCQl9Ci0JCXN1cGVyLndyaXRlKGIpOwotCX0KKyAgICAvLyBQcmludFN0cmVhbSBvdmVycmlkZS4KKyAgICBwdWJsaWMgdm9pZCB3cml0ZShpbnQgYikKKyAgICB7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICBsb2dmaWxlLndyaXRlKGIpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKKyAgICAgICAgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIH0KKyAgICAgICAgc3VwZXIud3JpdGUoYik7CisgICAgfQogCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCi0JLy8gUHJpbnRTdHJlYW0gb3ZlcnJpZGUuCi0JcHVibGljIHZvaWQgd3JpdGUoYnl0ZSBidWZbXSwgaW50IG9mZiwgaW50IGxlbikgCi0JewotCQl0cnkgCi0JCXsKLQkJCWxvZ2ZpbGUud3JpdGUoYnVmLCBvZmYsIGxlbik7Ci0JCX0gCi0JCWNhdGNoIChFeGNlcHRpb24gZSkgCi0JCXsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQlzZXRFcnJvcigpOwotCQl9Ci0JCXN1cGVyLndyaXRlKGJ1Ziwgb2ZmLCBsZW4pOwotCX0KKyAgICAvLyBQcmludFN0cmVhbSBvdmVycmlkZS4KKyAgICBwdWJsaWMgdm9pZCB3cml0ZShieXRlIGJ1ZltdLCBpbnQgb2ZmLCBpbnQgbGVuKQorICAgIHsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIGxvZ2ZpbGUud3JpdGUoYnVmLCBvZmYsIGxlbik7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQorICAgICAgICB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgfQorICAgICAgICBzdXBlci53cml0ZShidWYsIG9mZiwgbGVuKTsKKyAgICB9CiAKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLQlzdGF0aWMgT3V0cHV0U3RyZWFtIGxvZ2ZpbGU7Ci0Jc3RhdGljIFByaW50U3RyZWFtIG9sZFN0ZG91dDsKLQkvL3N0YXRpYyBQcmludFN0cmVhbSBvbGRTdGRlcnI7CisgICAgc3RhdGljIE91dHB1dFN0cmVhbSBsb2dmaWxlOworICAgIHN0YXRpYyBQcmludFN0cmVhbSBvbGRTdGRvdXQ7CisgICAgLy9zdGF0aWMgUHJpbnRTdHJlYW0gb2xkU3RkZXJyOwogCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgCi0JewotCQl0cnkgCi0JCXsKLQkJCS8vIFN0YXJ0IGNhcHR1cmluZyBjaGFyYWN0ZXJzIAotCQkJLy9pbnRvIHRoZSBsb2cgZmlsZS4KLQkJCVRlZS5zdGFydCgibG9nLnR4dCIpOworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCisgICAgeworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gU3RhcnQgY2FwdHVyaW5nIGNoYXJhY3RlcnMKKyAgICAgICAgICAgIC8vaW50byB0aGUgbG9nIGZpbGUuCisgICAgICAgICAgICBUZWUuc3RhcnQoImxvZy50eHQiKTsKIAotCQkJLy8gVGVzdCBpdC4KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigKLQkJCSJIZXJlJ3MgaXMgc29tZSBzdHVmZiB0byBzdGRvdXQuIik7Ci0JCQlTeXN0ZW0uZXJyLnByaW50bG4oCi0JCQkiSGVyZSdzIGlzIHNvbWUgc3R1ZmYgdG8gc3RkZXJyLiIpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKAotCQkJIkxldCdzIHRocm93IGFuIGV4Y2VwdGlvbi4uLiIpOwotCQkJbmV3IEV4Y2VwdGlvbigpLnByaW50U3RhY2tUcmFjZSgpOwotCQl9IAotCQljYXRjaCAoRXhjZXB0aW9uIGUpIAotCQl7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9IAotCQlmaW5hbGx5IAotCQl7Ci0JCQkvLyBTdG9wIGNhcHR1cmluZyBjaGFyYWN0ZXJzIAotCQkJLy9pbnRvIHRoZSBsb2cgZmlsZSAKLQkJCS8vIGFuZCByZXN0b3JlIG9sZCBzZXR1cC4KLQkJCVRlZS5zdG9wKCk7Ci0JCX0KLQl9CisgICAgICAgICAgICAvLyBUZXN0IGl0LgorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKAorICAgICAgICAgICAgIkhlcmUncyBpcyBzb21lIHN0dWZmIHRvIHN0ZG91dC4iKTsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigKKyAgICAgICAgICAgICJIZXJlJ3MgaXMgc29tZSBzdHVmZiB0byBzdGRlcnIuIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oCisgICAgICAgICAgICAiTGV0J3MgdGhyb3cgYW4gZXhjZXB0aW9uLi4uIik7CisgICAgICAgICAgICBuZXcgRXhjZXB0aW9uKCkucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQorICAgICAgICB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgICAgIGZpbmFsbHkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gU3RvcCBjYXB0dXJpbmcgY2hhcmFjdGVycworICAgICAgICAgICAgLy9pbnRvIHRoZSBsb2cgZmlsZQorICAgICAgICAgICAgLy8gYW5kIHJlc3RvcmUgb2xkIHNldHVwLgorICAgICAgICAgICAgVGVlLnN0b3AoKTsKKyAgICAgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvVW5kZXBsb3lDbWQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvVW5kZXBsb3lDbWQuamF2YQppbmRleCA2Y2FhN2YwLi4xMzNmZjJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L1VuZGVwbG95Q21kLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9VbmRlcGxveUNtZC5qYXZhCkBAIC00MiwxOSArNDIsMTkgQEAKIAogICAgIHByb3RlY3RlZCB2b2lkIHVuZGVwbG95KCkgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLSAgICAgICAgZmluYWwgU3RyaW5nCQlhcHBOYW1lCQk9IGdldEFwcE5hbWUoKTsKLSAgICAgICAgZmluYWwgRGVwbG95bWVudE1ncglkZXBsb3lNZ3IJPSBnZXREZXBsb3ltZW50TWdyKCk7CisgICAgICAgIGZpbmFsIFN0cmluZyAgICAgICAgYXBwTmFtZSAgICAgICAgPSBnZXRBcHBOYW1lKCk7CisgICAgICAgIGZpbmFsIERlcGxveW1lbnRNZ3IgICAgZGVwbG95TWdyICAgID0gZ2V0RGVwbG95bWVudE1ncigpOwogCiAgICAgICAgIGlmICghREVGQVVMVF9ERVBMT1lfVEFSR0VULmVxdWFscyhnZXRUYXJnZXQoKSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZpbmFsIERlcGxveWVkSXRlbVJlZkNvbmZpZ0NSCXJlZk1nciA9IAorICAgICAgICAgICAgZmluYWwgRGVwbG95ZWRJdGVtUmVmQ29uZmlnQ1IgICAgcmVmTWdyID0KICAgICAgICAgICAgICAgICBnZXREZXBsb3llZEl0ZW1SZWZDb25maWdDUigpOwogCiAgICAgICAgICAgICBzdG9wQXBwKCk7CiAgICAgICAgICAgICByZWZNZ3IucmVtb3ZlRGVwbG95ZWRJdGVtUmVmQ29uZmlnKGFwcE5hbWUpOwogICAgICAgICB9CiAgICAgICAgIGZpbmFsIE1hcCBzdGF0dXNEYXRhID0gZGVwbG95TWdyLnVuZGVwbG95KGFwcE5hbWUsIG51bGwpOwotICAgICAgICBmaW5hbCBEZXBsb3ltZW50U3RhdHVzIHN0YXR1cwk9IAorICAgICAgICBmaW5hbCBEZXBsb3ltZW50U3RhdHVzIHN0YXR1cyAgICA9CiAgICAgICAgICAgICBEZXBsb3ltZW50U3VwcG9ydC5tYXBUb0RlcGxveW1lbnRTdGF0dXMoIHN0YXR1c0RhdGEgKTsKICAgICAgICAgY2hlY2tGYWlsZWQoY2hlY2tGb3JFeGNlcHRpb24oc3RhdHVzKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9VbmRlcGxveW1lbnRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L1VuZGVwbG95bWVudFRlc3QuamF2YQppbmRleCBlMzRkYjU4Li41NDdmNWQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L1VuZGVwbG95bWVudFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L1VuZGVwbG95bWVudFRlc3QuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogewogICAgIHByaXZhdGUgQ21kIGNtZDsKIAotICAgIHB1YmxpYyBVbmRlcGxveW1lbnRUZXN0KFN0cmluZyB1c2VyLCBTdHJpbmcgcGFzc3dvcmQsIFN0cmluZyBob3N0LCAKKyAgICBwdWJsaWMgVW5kZXBsb3ltZW50VGVzdChTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkLCBTdHJpbmcgaG9zdCwKICAgICAgICAgICAgIGludCBwb3J0LCBTdHJpbmcgbmFtZSwgU3RyaW5nIHRhcmdldCkKICAgICB7CiAgICAgICAgIENtZEZhY3RvcnkgY21kRmFjdG9yeSA9IGdldENtZEZhY3RvcnkoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvVXRpbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvVXRpbHMuamF2YQppbmRleCAxMGM5ZWYwLi5kZjE3YjI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L1V0aWxzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9VdGlscy5qYXZhCkBAIC0zMSw4MSArMzEsODEgQEAKICAqLwogY2xhc3MgVXRpbHMKIHsKLQlwcml2YXRlIFV0aWxzKCkKLQl7Ci0JfQotCQotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCi0Jc3RhdGljIGJvb2xlYW4gb2soU3RyaW5nIHMpCi0JewotCQlyZXR1cm4gcyAhPSBudWxsICYmIHMubGVuZ3RoKCkgPiAwOwotCX0KLQkKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCQotCXN0YXRpYyBGaWxlIHNhZmVHZXRDYW5vbmljYWxGaWxlKEZpbGUgZikKLQl7Ci0JCXRyeQotCQl7Ci0JCQlyZXR1cm4gZi5nZXRDYW5vbmljYWxGaWxlKCk7Ci0JCX0KLQkJY2F0Y2goSU9FeGNlcHRpb24gaW9lKQotCQl7Ci0JCQlyZXR1cm4gZi5nZXRBYnNvbHV0ZUZpbGUoKTsKLQkJfQotCX0KLQkKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgbWVzc2FnZUJveChTdHJpbmcgbXNnLCBTdHJpbmcgdGl0bGUpCi0JewotCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyhudWxsLCBtc2csIHRpdGxlLCBKT3B0aW9uUGFuZS5JTkZPUk1BVElPTl9NRVNTQUdFKTsgCi0JfQotCQotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCi0Jc3RhdGljIGNsYXNzIEFyY2hpdmVGaWx0ZXIgaW1wbGVtZW50cyBGaWxlRmlsdGVyCi0JewotCQlwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBmKQotCQl7Ci0JCQkvLyBtdXN0IGVuZCBpbiAuamFyLy53YXIvLnJhci8uZWFyCi0JCQkKLQkJCVN0cmluZyBuYW1lID0gZi5nZXROYW1lKCk7Ci0JCQkKLQkJCXJldHVybiBuYW1lLmVuZHNXaXRoKCIuZWFyIikgfHwgbmFtZS5lbmRzV2l0aCgiLmphciIpIHx8IG5hbWUuZW5kc1dpdGgoIi5yYXIiKSB8fCBuYW1lLmVuZHNXaXRoKCIud2FyIik7Ci0JCX0KLQl9CQotCQotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCi0Jc3RhdGljIGNsYXNzIERpckRlcGxveUZpbHRlciBpbXBsZW1lbnRzIEZpbGVGaWx0ZXIKLQl7Ci0JCXB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIGYpCi0JCXsKLQkJCVN0cmluZyBuYW1lID0gZi5nZXROYW1lKCkudG9Mb3dlckNhc2UoKTsKLQkJCQotCQkJaWYobmFtZS5zdGFydHNXaXRoKCJtZXRhLWluZiIpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJCQotCQkJcmV0dXJuIGYuaXNEaXJlY3RvcnkoKTsKLQkJfQotCX0JCi0JcHVibGljIHN0YXRpYyBjbGFzcyBTYW1wbGUKLQl7Ci0JCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotCQl7Ci0JCQlyZXR1cm4gIlNhbXBsZTogbmFtZSA9ICIgKyBuYW1lICsgIiwgcGF0aD0gIiArIGZpbGU7Ci0JCX0KLQkJcHVibGljIFNhbXBsZShGaWxlIGYpCi0JCXsKLQkJCWZpbGUgPSBmOwotCQkJbmFtZSA9IGYuZ2V0TmFtZSgpOwotCQkJCi0JCQlpZighZi5pc0RpcmVjdG9yeSgpKQotCQkJCW5hbWUgPSBuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxlbmd0aCgpIC0gNCk7Ci0JCX0KLQkJU3RyaW5nCW5hbWU7Ci0JCUZpbGUJZmlsZTsKLQl9CisgICAgcHJpdmF0ZSBVdGlscygpCisgICAgeworICAgIH0KKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBzdGF0aWMgYm9vbGVhbiBvayhTdHJpbmcgcykKKyAgICB7CisgICAgICAgIHJldHVybiBzICE9IG51bGwgJiYgcy5sZW5ndGgoKSA+IDA7CisgICAgfQorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIHN0YXRpYyBGaWxlIHNhZmVHZXRDYW5vbmljYWxGaWxlKEZpbGUgZikKKyAgICB7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZi5nZXRDYW5vbmljYWxGaWxlKCk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goSU9FeGNlcHRpb24gaW9lKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZi5nZXRBYnNvbHV0ZUZpbGUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1lc3NhZ2VCb3goU3RyaW5nIG1zZywgU3RyaW5nIHRpdGxlKQorICAgIHsKKyAgICAgICAgSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2cobnVsbCwgbXNnLCB0aXRsZSwgSk9wdGlvblBhbmUuSU5GT1JNQVRJT05fTUVTU0FHRSk7CisgICAgfQorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIHN0YXRpYyBjbGFzcyBBcmNoaXZlRmlsdGVyIGltcGxlbWVudHMgRmlsZUZpbHRlcgorICAgIHsKKyAgICAgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgZikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gbXVzdCBlbmQgaW4gLmphci8ud2FyLy5yYXIvLmVhcgorCisgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGYuZ2V0TmFtZSgpOworCisgICAgICAgICAgICByZXR1cm4gbmFtZS5lbmRzV2l0aCgiLmVhciIpIHx8IG5hbWUuZW5kc1dpdGgoIi5qYXIiKSB8fCBuYW1lLmVuZHNXaXRoKCIucmFyIikgfHwgbmFtZS5lbmRzV2l0aCgiLndhciIpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIHN0YXRpYyBjbGFzcyBEaXJEZXBsb3lGaWx0ZXIgaW1wbGVtZW50cyBGaWxlRmlsdGVyCisgICAgeworICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBmKQorICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGYuZ2V0TmFtZSgpLnRvTG93ZXJDYXNlKCk7CisKKyAgICAgICAgICAgIGlmKG5hbWUuc3RhcnRzV2l0aCgibWV0YS1pbmYiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIHJldHVybiBmLmlzRGlyZWN0b3J5KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTYW1wbGUKKyAgICB7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIlNhbXBsZTogbmFtZSA9ICIgKyBuYW1lICsgIiwgcGF0aD0gIiArIGZpbGU7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIFNhbXBsZShGaWxlIGYpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpbGUgPSBmOworICAgICAgICAgICAgbmFtZSA9IGYuZ2V0TmFtZSgpOworCisgICAgICAgICAgICBpZighZi5pc0RpcmVjdG9yeSgpKQorICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxlbmd0aCgpIC0gNCk7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nICAgIG5hbWU7CisgICAgICAgIEZpbGUgICAgZmlsZTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L3NhbXBsZXMvU09BUHRvSk1TTWVzc2FnZVNhbXBsZUNsaWVudC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L3NhbXBsZXMvU09BUHRvSk1TTWVzc2FnZVNhbXBsZUNsaWVudC9idWlsZC54bWwKaW5kZXggNmEyODliMi4uOWQ3NmQwNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9zYW1wbGVzL1NPQVB0b0pNU01lc3NhZ2VTYW1wbGVDbGllbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvc2FtcGxlcy9TT0FQdG9KTVNNZXNzYWdlU2FtcGxlQ2xpZW50L2J1aWxkLnhtbApAQCAtMjEsNjcgKzIxLDY3IEBACiAgIDxwcm9wZXJ0eSBuYW1lPSJzYW1wbGUuaG9tZSIgdmFsdWU9Ii4uLy4uLy4uLy4uLyIvPgogCiAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLSAgPCEtLSBBcHAgbmFtZS1kZXBlbmRlbnQgc2V0dGluZ3MuCQkJICAgICAgIC0tPgorICA8IS0tIEFwcCBuYW1lLWRlcGVuZGVudCBzZXR0aW5ncy4gICAgICAgICAgICAgICAgICAgLS0+CiAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIAogICA8cHJvcGVydHkgbmFtZT0iYmluYXJ5Lm5hbWUiIHZhbHVlPSJTT0FQdG9KTVNNZXNzYWdlU2FtcGxlIi8+Ci0gIAorCiAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLSAgPCEtLSBQYWNrYWdlIGRpcmVjdG9yeSBzdHJ1Y3R1cmVzIG9mIGludGVyZXN0LgkgICAgICAgLS0+CisgIDwhLS0gUGFja2FnZSBkaXJlY3Rvcnkgc3RydWN0dXJlcyBvZiBpbnRlcmVzdC4gICAgICAgICAgIC0tPgogICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJhcHAucGtnIiB2YWx1ZT0ic2FtcGxlcy9qbXMvc29hcHRvam1zIi8+IAotICAKKyAgPHByb3BlcnR5IG5hbWU9ImFwcC5wa2ciIHZhbHVlPSJzYW1wbGVzL2ptcy9zb2FwdG9qbXMiLz4KKwogICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0gIDwhLS0gSmF2YSBEb2MgcHJvcGVydGllcy4JCQkJICAgICAgIC0tPgotICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+ICAKKyAgPCEtLSBKYXZhIERvYyBwcm9wZXJ0aWVzLiAgICAgICAgICAgICAgICAgICAgICAgLS0+CisgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICAgPHByb3BlcnR5IG5hbWU9InNhbXBsZS5uYW1lIiB2YWx1ZT0ic2ltcGxlIi8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJqYXZhZG9jLnBrZ25hbWVzIiB2YWx1ZT0ic2FtcGxlcy5qbXMuc29hcHRvam1zLioiIC8+CiAKICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICA8IS0tIEluY2x1ZGUgY29tbW9uLnhtbAkJCQkgICAgICAgLS0+CisgIDwhLS0gSW5jbHVkZSBjb21tb24ueG1sICAgICAgICAgICAgICAgICAgICAgICAtLT4KICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotIAorCiAgICZpbmNsdWRlOwotICAKKwogICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0gIDwhLS0gVXNlZCBieSBjb3B5X2JpbmFyeSB0YXJnZXQgaW4gY29tbW9uLWFudC54bWwJCQkJICAgICAgIC0tPgotICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+ICAgIAorICA8IS0tIFVzZWQgYnkgY29weV9iaW5hcnkgdGFyZ2V0IGluIGNvbW1vbi1hbnQueG1sICAgICAgICAgICAgICAgICAgICAgICAtLT4KKyAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogICA8cHJvcGVydHkgbmFtZT0ic3BlY2lmaWNqYXIuZGlyIiB2YWx1ZT0iJHtzYW1wbGUubmFtZX0ke2FwcGNsaWVudC1kaXItc3VmZml4fS8ke2Fzc2VtYmxlLmNsaWVudGphcn0vIi8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJzcGVjaWZpY2phci5uYW1lIiB2YWx1ZT0iJHtjbGllbnRqYXJ9Ii8+Ci0gCisKICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICAgPCEtLSAgICAgICAgICAgUmVzb3VyY2Ugc3BlY2lmaWMgcHJvcGVydGllcy4gICAgICAgICAgICAgICAgICAgICAgICAtLT4KICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICAgPHByb3BlcnR5IG5hbWU9InF1ZXVlLmZhY3RvcnkudHlwZSIgdmFsdWU9Impha2FydGEuam1zLlRvcGljQ29ubmVjdGlvbkZhY3RvcnkiIC8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJxdWV1ZS5mYWN0b3J5LmpuZGkubmFtZSIgdmFsdWU9Imptcy9Ub3BpY0Nvbm5lY3Rpb25GYWN0b3J5IiAvPiAgIAorICA8cHJvcGVydHkgbmFtZT0icXVldWUuZmFjdG9yeS5qbmRpLm5hbWUiIHZhbHVlPSJqbXMvVG9waWNDb25uZWN0aW9uRmFjdG9yeSIgLz4KICAgPHByb3BlcnR5IG5hbWU9InF1ZXVlLnR5cGUiIHZhbHVlPSJqYWthcnRhLmptcy5Ub3BpYyIgLz4KICAgPHByb3BlcnR5IG5hbWU9InF1ZXVlLmpuZGkubmFtZSIgdmFsdWU9Imptcy9UZXN0VG9waWMiIC8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJxdWV1ZS5wcm9wZXJ0eS5uYW1lIiB2YWx1ZT0iaW1xRGVzdGluYXRpb25OYW1lIiAvPgogICA8cHJvcGVydHkgbmFtZT0icXVldWUucHJvcGVydHkudmFsdWUiIHZhbHVlPSJUZXN0VG9waWMiIC8+Ci0gCi0gCi0gIAorCisKKwogICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgIDwhLS0gVGFnZXRzIHRvIHJ1biBzYW1wbGUgYXBwbGljYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAtLT4KICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJjbGVhbl9hbGxfY29tbW9uIi8+ICAKLSAgPHRhcmdldCBuYW1lPSJpbml0IiBkZXBlbmRzPSJpbml0X2NvbW1vbiIvPiAKLSAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjb21waWxlX2NvbW1vbiIgLz4gICAgIAotICAKKyAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iY2xlYW5fYWxsX2NvbW1vbiIvPgorICA8dGFyZ2V0IG5hbWU9ImluaXQiIGRlcGVuZHM9ImluaXRfY29tbW9uIi8+CisgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY29tcGlsZV9jb21tb24iIC8+CisKICAgPHRhcmdldCBuYW1lPSJjbGllbnRqYXIiIGRlcGVuZHM9ImNvcmVfYWxsX2NvbW1vbiIvPgotICAKLSAgCi0gIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9IiBpbml0LCBkZXBsb3ktam1zLXJlc291cmNlX2NvbW1vbiIvPiAgCi0gIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIgZGVwZW5kcz0iaW5pdCwgdW5kZXBsb3ktam1zLXJlc291cmNlX2NvbW1vbiIvPiAKLSAgCi0gIDx0YXJnZXQgbmFtZT0iamF2YWRvY3MiIGRlcGVuZHM9ImphdmFkb2NzX2FsbF9jb21tb24iLz4gICAgICAgICAKLSAgICAKKworCisgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9IiBpbml0LCBkZXBsb3ktam1zLXJlc291cmNlX2NvbW1vbiIvPgorICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiIGRlcGVuZHM9ImluaXQsIHVuZGVwbG95LWptcy1yZXNvdXJjZV9jb21tb24iLz4KKworICA8dGFyZ2V0IG5hbWU9ImphdmFkb2NzIiBkZXBlbmRzPSJqYXZhZG9jc19hbGxfY29tbW9uIi8+CisKICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9InNldHVwIi8+CiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjb3JlLGphdmFkb2NzIi8+CiAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9InVuc2V0dXAiLz4KLSAgICAgICAgCisKICAgPHRhcmdldCBuYW1lPSJjb3JlIiBkZXBlbmRzPSJjbGllbnRqYXIiIC8+Ci0gIAotICA8dGFyZ2V0IG5hbWU9InZlcmlmeSIgZGVwZW5kcz0idmVyaWZ5X25vb3BfY29tbW9uIi8+ICAgCi0gCisKKyAgPHRhcmdldCBuYW1lPSJ2ZXJpZnkiIGRlcGVuZHM9InZlcmlmeV9ub29wX2NvbW1vbiIvPgorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L3NhbXBsZXMvU09BUHRvSk1TTWVzc2FnZVNhbXBsZUNsaWVudC9zaW1wbGUtY2xpZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvc2FtcGxlcy9TT0FQdG9KTVNNZXNzYWdlU2FtcGxlQ2xpZW50L3NpbXBsZS1jbGllbnQvYnVpbGQueG1sCmluZGV4IDUxOTgyN2UuLmI0MzBkMzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvc2FtcGxlcy9TT0FQdG9KTVNNZXNzYWdlU2FtcGxlQ2xpZW50L3NpbXBsZS1jbGllbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvc2FtcGxlcy9TT0FQdG9KTVNNZXNzYWdlU2FtcGxlQ2xpZW50L3NpbXBsZS1jbGllbnQvYnVpbGQueG1sCkBAIC0yMSwzMSArMjEsMzEgQEAKICAgPHByb3BlcnR5IG5hbWU9InNhbXBsZS5ob21lIiB2YWx1ZT0iLi4vLi4vLi4vLi4vLi4vIi8+CiAKICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICA8IS0tIEFwcCBuYW1lLWRlcGVuZGVudCBzZXR0aW5ncy4JCQkgICAgICAgLS0+Ci0gIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4gCi0KLSAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICA8IS0tIFBhY2thZ2UgZGlyZWN0b3J5IHN0cnVjdHVyZXMgb2YgaW50ZXJlc3QuCSAgICAgICAtLT4KKyAgPCEtLSBBcHAgbmFtZS1kZXBlbmRlbnQgc2V0dGluZ3MuICAgICAgICAgICAgICAgICAgIC0tPgogICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAKLSAgPHByb3BlcnR5IG5hbWU9ImFwcC5wa2ciIHZhbHVlPSJzYW1wbGVzL2ptcy9zb2FwdG9qbXMiLz4gCisgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKyAgPCEtLSBQYWNrYWdlIGRpcmVjdG9yeSBzdHJ1Y3R1cmVzIG9mIGludGVyZXN0LiAgICAgICAgICAgLS0+CisgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8cHJvcGVydHkgbmFtZT0iYXBwLnBrZyIgdmFsdWU9InNhbXBsZXMvam1zL3NvYXB0b2ptcyIvPgogICA8cHJvcGVydHkgbmFtZT0iY2xpZW50amFyLmZpbGUiICAgdmFsdWU9Ii4uLyR7YXBwbmFtZX1DbGllbnQuamFyIi8+Ci0gCisKICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICA8IS0tIEphdmEgRG9jIHByb3BlcnRpZXMuCQkJCSAgICAgICAtLT4KLSAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPiAgICAKKyAgPCEtLSBKYXZhIERvYyBwcm9wZXJ0aWVzLiAgICAgICAgICAgICAgICAgICAgICAgLS0+CisgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICAgPHByb3BlcnR5IG5hbWU9ImphdmFkb2MucGtnbmFtZXMiIHZhbHVlPSJzYW1wbGVzLmptcy5zb2FwdG9qbXMuKiIgLz4KIAogICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0gIDwhLS0gWG1sIGZpbGVzIHByb3BlcnRpZXMuCQkJCSAgICAgICAtLT4KLSAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPiAgICAgICAKLSAKKyAgPCEtLSBYbWwgZmlsZXMgcHJvcGVydGllcy4gICAgICAgICAgICAgICAgICAgICAgIC0tPgogICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0gIDwhLS0gSW5jbHVkZSBjb21tb24ueG1sCQkJCSAgICAgICAtLT4KKwogICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0gCisgIDwhLS0gSW5jbHVkZSBjb21tb24ueG1sICAgICAgICAgICAgICAgICAgICAgICAtLT4KKyAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCiAgICZpbmNsdWRlOwotICAKKwogICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgIDwhLS0gQXNzZW1ibGUgQ0xJRU5UIEpBUiBtb2R1bGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgpAQCAtNTMsNyArNTMsNyBAQAogICAgIDxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vc29hcHRvam1zLnByb3BlcnRpZXMiIHRvRGlyPSIke2J1aWxkLmNsYXNzZXNkaXJ9LyR7YXBwLnBrZ30vIiAvPgogICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuY2xpZW50amFyfSIvPgogICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuY2xpZW50amFyfS8ke2NsaWVudGphcn0iIG1hbmlmZXN0PSIke3NyYy5jb25mfS9NQU5JRkVTVC5NRiI+Ci0gICAgICA8emlwZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlc2Rpcn0vJHthcHAucGtnfS8iIAorICAgICAgPHppcGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXNkaXJ9LyR7YXBwLnBrZ30vIgogICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9IioqLyouY2xhc3MsICoqL3NvYXB0b2ptcy5wcm9wZXJ0aWVzIiBleGNsdWRlcz0iKiovc2VydmxldC8iCiAgICAgICAgICAgICAgICAgICBwcmVmaXg9IiR7YXBwLnBrZ30iLz4KICAgICAgIDxtZXRhaW5mIGRpcj0iJHtjbGllbnRERC5kaXJ9IiBpbmNsdWRlcz0iJHtjbGllbnRERH0iLz4KQEAgLTY0LDE1ICs2NCwxNSBAQAogICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgIDwhLS0gVGFnZXRzIHRvIHJ1biBzYW1wbGUgYXBwbGljYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAtLT4KICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJjbGVhbl9jb21tb24iLz4gICAgIAotICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNvbXBpbGVfY29tbW9uIiAvPiAKKyAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iY2xlYW5fY29tbW9uIi8+CisgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY29tcGlsZV9jb21tb24iIC8+CiAgIDx0YXJnZXQgbmFtZT0iamF2YWRvY3MiIGRlcGVuZHM9ImphdmFkb2NzX2NvbW1vbiIgLz4KICAgPHRhcmdldCBuYW1lPSJjbGllbnRqYXIiIGRlcGVuZHM9ImluaXRfY29tbW9uLCBjbGllbnRqYXJfbG9jYWwiLz4KLSAgPHRhcmdldCBuYW1lPSJjb3JlIiBkZXBlbmRzPSJjb21waWxlLCBjbGllbnRqYXIiIC8+ICAKLSAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNvcmUsamF2YWRvY3MiLz4gCisgIDx0YXJnZXQgbmFtZT0iY29yZSIgZGVwZW5kcz0iY29tcGlsZSwgY2xpZW50amFyIiAvPgorICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY29yZSxqYXZhZG9jcyIvPgogICA8dGFyZ2V0IG5hbWU9ImNvcHlfZWFyIiBkZXBlbmRzPSJpbml0X2NvbW1vbiI+Ci0gICAgICA8ZGVsZXRlIGZpbGU9Ii4uLyR7Y2xpZW50amFyfSIvPiAgICAgIAorICAgICAgPGRlbGV0ZSBmaWxlPSIuLi8ke2NsaWVudGphcn0iLz4KICAgICAgIDxjb3B5IGZpbGU9IiR7YXNzZW1ibGUuY2xpZW50amFyfS8ke2NsaWVudGphcn0iIHRvZGlyPSIuLiIgLz4KICAgPC90YXJnZXQ+Ci0gICAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvc2FtcGxlcy9TT0FQdG9KTVNNZXNzYWdlU2FtcGxlQ2xpZW50L3NpbXBsZS1jbGllbnQvc3JjL2NvbmYvYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvc2FtcGxlcy9TT0FQdG9KTVNNZXNzYWdlU2FtcGxlQ2xpZW50L3NpbXBsZS1jbGllbnQvc3JjL2NvbmYvYXBwbGljYXRpb24tY2xpZW50LnhtbAppbmRleCAzN2ZmM2Q1Li5mOTM0YWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L3NhbXBsZXMvU09BUHRvSk1TTWVzc2FnZVNhbXBsZUNsaWVudC9zaW1wbGUtY2xpZW50L3NyYy9jb25mL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9zYW1wbGVzL1NPQVB0b0pNU01lc3NhZ2VTYW1wbGVDbGllbnQvc2ltcGxlLWNsaWVudC9zcmMvY29uZi9hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC0xMiw1ICsxMiw1IEBACiAtLT4KIAogPGFwcGxpY2F0aW9uLWNsaWVudCB2ZXJzaW9uPSIxLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS9hcHBsaWNhdGlvbi1jbGllbnRfMV80LnhzZCI+Ci0gIDxkaXNwbGF5LW5hbWU+U09BUE1lc3NhZ2VXaXRoSk1TQ2xpZW50PC9kaXNwbGF5LW5hbWU+ICAgCisgIDxkaXNwbGF5LW5hbWU+U09BUE1lc3NhZ2VXaXRoSk1TQ2xpZW50PC9kaXNwbGF5LW5hbWU+CiA8L2FwcGxpY2F0aW9uLWNsaWVudD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvc2FtcGxlcy9TT0FQdG9KTVNNZXNzYWdlU2FtcGxlQ2xpZW50L3NpbXBsZS1jbGllbnQvc3JjL2phdmEvc2FtcGxlcy9qbXMvc29hcHRvam1zL0pORElOYW1lcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9zYW1wbGVzL1NPQVB0b0pNU01lc3NhZ2VTYW1wbGVDbGllbnQvc2ltcGxlLWNsaWVudC9zcmMvamF2YS9zYW1wbGVzL2ptcy9zb2FwdG9qbXMvSk5ESU5hbWVzLmphdmEKaW5kZXggODZhODYzNy4uODAyMjE4MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9zYW1wbGVzL1NPQVB0b0pNU01lc3NhZ2VTYW1wbGVDbGllbnQvc2ltcGxlLWNsaWVudC9zcmMvamF2YS9zYW1wbGVzL2ptcy9zb2FwdG9qbXMvSk5ESU5hbWVzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9zYW1wbGVzL1NPQVB0b0pNU01lc3NhZ2VTYW1wbGVDbGllbnQvc2ltcGxlLWNsaWVudC9zcmMvamF2YS9zYW1wbGVzL2ptcy9zb2FwdG9qbXMvSk5ESU5hbWVzLmphdmEKQEAgLTIxLDEwICsyMSwxMCBAQAogICBwcml2YXRlIEpORElOYW1lcygpIHsgfSAvL1ByZXZlbnRzIGluc3RhbnRpYXRpb24KIAogICAvLyBKTkRJIG5hbWVzIG9mIHRvcGljIHJlc291cmNlcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUT1BJQ19DT05ORUNUSU9OX0ZBQ1RPUlkgPSAgICAgICAgICAgICAgICAgICAKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9QSUNfQ09OTkVDVElPTl9GQUNUT1JZID0KICAgICAgICAgICAgICAgICAgICAiam1zL1RvcGljQ29ubmVjdGlvbkZhY3RvcnkiOwogCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTURCX1RPUElDID0gICAgICAgICAgICAgICAgICAgICAgICAKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9NREJfVE9QSUMgPQogICAgICAgICAgICAgICAgICAgICAgICAgICJqbXMvVGVzdFRvcGljIjsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9zYW1wbGVzL1NPQVB0b0pNU01lc3NhZ2VTYW1wbGVDbGllbnQvc2ltcGxlLWNsaWVudC9zcmMvamF2YS9zYW1wbGVzL2ptcy9zb2FwdG9qbXMvUmVjZWl2ZVNPQVBNZXNzYWdlV2l0aEpNUy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9zYW1wbGVzL1NPQVB0b0pNU01lc3NhZ2VTYW1wbGVDbGllbnQvc2ltcGxlLWNsaWVudC9zcmMvamF2YS9zYW1wbGVzL2ptcy9zb2FwdG9qbXMvUmVjZWl2ZVNPQVBNZXNzYWdlV2l0aEpNUy5qYXZhCmluZGV4IGMyZTgyYWUuLmM4ODU5NmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvc2FtcGxlcy9TT0FQdG9KTVNNZXNzYWdlU2FtcGxlQ2xpZW50L3NpbXBsZS1jbGllbnQvc3JjL2phdmEvc2FtcGxlcy9qbXMvc29hcHRvam1zL1JlY2VpdmVTT0FQTWVzc2FnZVdpdGhKTVMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L3NhbXBsZXMvU09BUHRvSk1TTWVzc2FnZVNhbXBsZUNsaWVudC9zaW1wbGUtY2xpZW50L3NyYy9qYXZhL3NhbXBsZXMvam1zL3NvYXB0b2ptcy9SZWNlaXZlU09BUE1lc3NhZ2VXaXRoSk1TLmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAvKioKICAgICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yLgogICAgICAqCi0gICAgICogQHBhcmFtIHRvcGljTmFtZSAgYSBTdHJpbmcgdGhhdCBjb250YWlucyB0aGUgbmFtZSBvZiBhIEpNUyBUb3BpYyAgCisgICAgICogQHBhcmFtIHRvcGljTmFtZSAgYSBTdHJpbmcgdGhhdCBjb250YWlucyB0aGUgbmFtZSBvZiBhIEpNUyBUb3BpYwogICAgICAqCiAgICAgICovCiAgICAgcHVibGljIFJlY2VpdmVTT0FQTWVzc2FnZVdpdGhKTVMoU3RyaW5nIHRvcGljTmFtZSkgewpAQCAtNTQsNyArNTQsNyBAQAogICAgIC8qKgogICAgICAqIEpNUyBDb25uZWN0aW9uL1Nlc3Npb24vRGVzdGluYXRpb24vTWVzc2FnZUxpc3RlbmVyIHNldCB1cHMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gdG9waWNOYW1lIGEgU3RyaW5nIHRoYXQgY29udGFpbnMgdGhlIG5hbWUgb2YgYSBKTVMgVG9waWMgIAorICAgICAqIEBwYXJhbSB0b3BpY05hbWUgYSBTdHJpbmcgdGhhdCBjb250YWlucyB0aGUgbmFtZSBvZiBhIEpNUyBUb3BpYwogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGluaXQoU3RyaW5nIHRvcGljTmFtZSkgewogICAgICAgICB0cnkgewpAQCAtNjYsMTIgKzY2LDEyIEBACiAKICAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICogSk1TIHNldCB1cC4KLSAgICAgICAgICAgICAqLyAgICAgICAgICAgIAorICAgICAgICAgICAgICovCiAgICAgICAgICAgICBTZXJ2aWNlTG9jYXRvciBzZXJ2aWNlbG9jYXRvciA9IG5ldyBTZXJ2aWNlTG9jYXRvcigpOwogICAgICAgICAgICAgdGNmID0gc2VydmljZWxvY2F0b3IuZ2V0VG9waWNDb25uZWN0aW9uRmFjdG9yeShKTkRJTmFtZXMuVE9QSUNfQ09OTkVDVElPTl9GQUNUT1JZKTsKICAgICAgICAgICAgIHRjID0gdGNmLmNyZWF0ZVRvcGljQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgc2Vzc2lvbiA9IHRjLmNyZWF0ZVRvcGljU2Vzc2lvbihmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKLSAgICAgICAgICAgIHRvcGljID0gc2VydmljZWxvY2F0b3IuZ2V0VG9waWModG9waWNOYW1lKTsgCisgICAgICAgICAgICB0b3BpYyA9IHNlcnZpY2Vsb2NhdG9yLmdldFRvcGljKHRvcGljTmFtZSk7CiAgICAgICAgICAgICBzdWJzY3JpYmVyID0gc2Vzc2lvbi5jcmVhdGVTdWJzY3JpYmVyKHRvcGljKTsKICAgICAgICAgICAgIHN1YnNjcmliZXIuc2V0TWVzc2FnZUxpc3RlbmVyKCB0aGlzICk7CiAgICAgICAgICAgICB0Yy5zdGFydCgpOwpAQCAtODEsOSArODEsOSBAQAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gam1zZSkgewogICAgICAgICAgICAgam1zZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgIH0gICAKLSAgICAgCi0gICAgIAorICAgIH0KKworCiAgICAgLyoqCiAgICAgICogSk1TIE1lc3NhZ2VzIGFyZSBkZWxpdmVyZWQgdG8gdGhpcyBtZXRob2QuIFRoZSBib2R5IG9mIHRoZSBtZXNzYWdlCiAgICAgICogY29udGFpbnMgU09BUCBzdHJlYW1zLgpAQCAtMTUyLDUgKzE1Miw1IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L3NhbXBsZXMvU09BUHRvSk1TTWVzc2FnZVNhbXBsZUNsaWVudC9zaW1wbGUtY2xpZW50L3NyYy9qYXZhL3NhbXBsZXMvam1zL3NvYXB0b2ptcy9TT0FQTWVzc2FnZVdpdGhKTVNDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvc2FtcGxlcy9TT0FQdG9KTVNNZXNzYWdlU2FtcGxlQ2xpZW50L3NpbXBsZS1jbGllbnQvc3JjL2phdmEvc2FtcGxlcy9qbXMvc29hcHRvam1zL1NPQVBNZXNzYWdlV2l0aEpNU0NsaWVudC5qYXZhCmluZGV4IDA4NGYxOWEuLmMyNTFiZTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvc2FtcGxlcy9TT0FQdG9KTVNNZXNzYWdlU2FtcGxlQ2xpZW50L3NpbXBsZS1jbGllbnQvc3JjL2phdmEvc2FtcGxlcy9qbXMvc29hcHRvam1zL1NPQVBNZXNzYWdlV2l0aEpNU0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvc2FtcGxlcy9TT0FQdG9KTVNNZXNzYWdlU2FtcGxlQ2xpZW50L3NpbXBsZS1jbGllbnQvc3JjL2phdmEvc2FtcGxlcy9qbXMvc29hcHRvam1zL1NPQVBNZXNzYWdlV2l0aEpNU0NsaWVudC5qYXZhCkBAIC0zMywxNiArMzMsMTYgQEAKICAqIHV0aWxpdHkgdG8gY29udmVydCBKTVMgbWVzc2FnZXMgYmFjayB0byBTT0FQIG1lc3NhZ2VzLgogICovCiBwdWJsaWMgY2xhc3MgU09BUE1lc3NhZ2VXaXRoSk1TQ2xpZW50IHsKLSAgIAotICAgIC8qKiAgICAKKworICAgIC8qKgogICAgICAqIFRoZSBtYWluIHByb2dyYW0gdG8gc2VuZCBTT0FQIG1lc3NhZ2VzIHdpdGggSk1TIGFuZCBSZWNlaXZlU09BUE1lc3NhZ2VXaXRoSk1TLgotICAgICAqLyAgICAKKyAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIFN0cmluZyB0b3BpY05hbWUgPSBKTkRJTmFtZXMuVEVTVF9NREJfVE9QSUM7CiAgICAgICAgIFN0cmluZyB1c2FnZSA9ICJcblVzYWdlOiBlbnRlciBwYXJhbWV0ZXIgU2VuZCBvciBSZWNlaXZlIChmb2xsb3dlZCBieSBvcHRpb25hbCBUb3BpYyBuYW1lKS4gXG4iKwogICAgICAgICAgICAgICAgICAgICAgICAiVG8gUmVjZWl2ZSBtZXNzYWdlOiBcImFwcGNsaWVudCAtY2xpZW50IFNPQVB0b0pNU01lc3NhZ2VTYW1wbGVDbGllbnQuamFyIFJlY2VpdmVcIiBcbiIrCi0gICAgICAgICAgICAgICAgICAgICAgICJUbyBTZW5kIG1lc3NhZ2U6IFwiYXBwY2xpZW50IC1jbGllbnQgU09BUHRvSk1TTWVzc2FnZVNhbXBsZUNsaWVudC5qYXIgU2VuZFwiIjsgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICJUbyBTZW5kIG1lc3NhZ2U6IFwiYXBwY2xpZW50IC1jbGllbnQgU09BUHRvSk1TTWVzc2FnZVNhbXBsZUNsaWVudC5qYXIgU2VuZFwiIjsKIAogICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICBpZiAoYXJnc1swXS5lcXVhbHNJZ25vcmVDYXNlKCJSZWNlaXZlIikpewpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih1c2FnZSk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odXNhZ2UpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L3NhbXBsZXMvU09BUHRvSk1TTWVzc2FnZVNhbXBsZUNsaWVudC9zaW1wbGUtY2xpZW50L3NyYy9qYXZhL3NhbXBsZXMvam1zL3NvYXB0b2ptcy9TZW5kU09BUE1lc3NhZ2VXaXRoSk1TLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L3NhbXBsZXMvU09BUHRvSk1TTWVzc2FnZVNhbXBsZUNsaWVudC9zaW1wbGUtY2xpZW50L3NyYy9qYXZhL3NhbXBsZXMvam1zL3NvYXB0b2ptcy9TZW5kU09BUE1lc3NhZ2VXaXRoSk1TLmphdmEKaW5kZXggZDQxMzc5Yi4uNzM3OTNhYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9zYW1wbGVzL1NPQVB0b0pNU01lc3NhZ2VTYW1wbGVDbGllbnQvc2ltcGxlLWNsaWVudC9zcmMvamF2YS9zYW1wbGVzL2ptcy9zb2FwdG9qbXMvU2VuZFNPQVBNZXNzYWdlV2l0aEpNUy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvc2FtcGxlcy9TT0FQdG9KTVNNZXNzYWdlU2FtcGxlQ2xpZW50L3NpbXBsZS1jbGllbnQvc3JjL2phdmEvc2FtcGxlcy9qbXMvc29hcHRvam1zL1NlbmRTT0FQTWVzc2FnZVdpdGhKTVMuamF2YQpAQCAtNTYsMTcgKzU2LDE3IEBACiAgICAgLyoqCiAgICAgICogZGVmYXVsdCBjb25zdHJ1Y3Rvci4KICAgICAgKgotICAgICAqIEBwYXJhbSB0b3BpY05hbWUgYSBTdHJpbmcgdGhhdCBjb250YWlucyB0aGUgbmFtZSBvZiBhIEpNUyBUb3BpYyAKKyAgICAgKiBAcGFyYW0gdG9waWNOYW1lIGEgU3RyaW5nIHRoYXQgY29udGFpbnMgdGhlIG5hbWUgb2YgYSBKTVMgVG9waWMKICAgICAgKgogICAgICAqLwogICAgIHB1YmxpYyBTZW5kU09BUE1lc3NhZ2VXaXRoSk1TKFN0cmluZyB0b3BpY05hbWUpIHsKICAgICAgICAgaW5pdCh0b3BpY05hbWUpOwogICAgIH0KLSAgICAgCisKICAgICAvKioKICAgICAgKiBJbml0aWFsaXplIEpNUyBDb25uZWN0aW9uL1Nlc3Npb24vVG9waWMgYW5kIFB1Ymxpc2hlci4KICAgICAgKgotICAgICAqIEBwYXJhbSB0b3BpY05hbWUgYSBTdHJpbmcgdGhhdCBjb250YWlucyB0aGUgbmFtZSBvZiBhIEpNUyBUb3BpYyAKKyAgICAgKiBAcGFyYW0gdG9waWNOYW1lIGEgU3RyaW5nIHRoYXQgY29udGFpbnMgdGhlIG5hbWUgb2YgYSBKTVMgVG9waWMKICAgICAgKgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGluaXQoU3RyaW5nIHRvcGljTmFtZSkgewpAQCAtNzUsOCArNzUsOCBAQAogICAgICAgICAgICAgdGNmID0gc2VydmljZWxvY2F0b3IuZ2V0VG9waWNDb25uZWN0aW9uRmFjdG9yeShKTkRJTmFtZXMuVE9QSUNfQ09OTkVDVElPTl9GQUNUT1JZKTsKICAgICAgICAgICAgIHRjID0gdGNmLmNyZWF0ZVRvcGljQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgc2Vzc2lvbiA9IHRjLmNyZWF0ZVRvcGljU2Vzc2lvbihmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKLSAgICAgICAgICAgIHRvcGljID0gc2VydmljZWxvY2F0b3IuZ2V0VG9waWModG9waWNOYW1lKTsgCi0gICAgICAgICAgICBwdWJsaXNoZXIgPSBzZXNzaW9uLmNyZWF0ZVB1Ymxpc2hlcih0b3BpYyk7ICAgICAgICAgICAgIAorICAgICAgICAgICAgdG9waWMgPSBzZXJ2aWNlbG9jYXRvci5nZXRUb3BpYyh0b3BpY05hbWUpOworICAgICAgICAgICAgcHVibGlzaGVyID0gc2Vzc2lvbi5jcmVhdGVQdWJsaXNoZXIodG9waWMpOwogICAgICAgICB9IGNhdGNoIChKTVNFeGNlcHRpb24gam1zZSkgewogICAgICAgICAgICAgam1zZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfSBjYXRjaChTZXJ2aWNlTG9jYXRvckV4Y2VwdGlvbiBzZSkgewpAQCAtOTYsNyArOTYsNyBAQAogICAgICAgICAvKioKICAgICAgICAgICogQ3JlYXRlIGEgU09BUCBtZXNzYWdlIG9iamVjdC4KICAgICAgICAgICovCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkNyZWF0ZSBhIFNPQVAgbWVzc2FnZSIpOyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiQ3JlYXRlIGEgU09BUCBtZXNzYWdlIik7CiAgICAgICAgIFNPQVBNZXNzYWdlIHNvYXBNZXNzYWdlID0gbWYuY3JlYXRlTWVzc2FnZSgpOwogICAgICAgICAvKioKICAgICAgICAgICogR2V0IFNPQVAgcGFydC4KQEAgLTEyOCw5ICsxMjgsOSBAQAogICAgICAgICAvKioKICAgICAgICAgICogQ3JlYXRlIGFuIGF0YWNobWVudCB3aXRoIGFjdGl2YXRpb24gQVBJLgogICAgICAgICAgKi8KLSAgICAgICAgCisKICAgICAgICAgVVJMIHVybCA9IGdldFVybEZyb21Qcm9wc0ZpbGUoKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiQXR0YWNoaW5nIHRoZSBmaWxlIGZyb20gVVJMOiAiICsgdXJsKTsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkF0dGFjaGluZyB0aGUgZmlsZSBmcm9tIFVSTDogIiArIHVybCk7CiAKICAgICAgICAgRGF0YUhhbmRsZXIgZGggPSBuZXcgRGF0YUhhbmRsZXIgKHVybCk7CiAgICAgICAgIEF0dGFjaG1lbnRQYXJ0IGFwID0gc29hcE1lc3NhZ2UuY3JlYXRlQXR0YWNobWVudFBhcnQoZGgpOwpAQCAtMTQ5LDM4ICsxNDksMzggQEAKICAgICAgICAgLyoqCiAgICAgICAgICAqIENvbnZlcnQgU09BUCB0byBKTVMgbWVzc2FnZS4KICAgICAgICAgICovCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkNvbnZlcnQgdGhlIG1lc3NhZ2UgdG8gSk1TIG1lc3NhZ2UiKTsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkNvbnZlcnQgdGhlIG1lc3NhZ2UgdG8gSk1TIG1lc3NhZ2UiKTsKICAgICAgICAgTWVzc2FnZSBtID0gTWVzc2FnZVRyYW5zZm9ybWVyLlNPQVBNZXNzYWdlSW50b0pNU01lc3NhZ2UoIHNvYXBNZXNzYWdlLCBzZXNzaW9uICk7CiAKICAgICAgICAgLyoqCiAgICAgICAgICAqIHB1Ymxpc2ggSk1TIG1lc3NhZ2UuCiAgICAgICAgICAqLwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJQdWJsaXNoIHRoZSBtZXNzYWdlIik7IAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJQdWJsaXNoIHRoZSBtZXNzYWdlIik7CiAgICAgICAgIHB1Ymxpc2hlci5wdWJsaXNoKCBtICk7CiAgICAgfQogCi0gICAgCisKICAgICAvKiogUmVhZCBzZXJ2ZXIgYW5kIHBvcnQgZnJvbSBzb2FwdG9qbXMucHJvcGVydGllcyBmaWxlCiAgICAgICoKICAgICAgKi8KLSAgICAKKwogICAgIHB1YmxpYyBVUkwgZ2V0VXJsRnJvbVByb3BzRmlsZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBJbnB1dFN0cmVhbSBwcm9wcyA9IFNlbmRTT0FQTWVzc2FnZVdpdGhKTVMuY2xhc3MuZ2V0UmVzb3VyY2VBc1N0cmVhbSgic29hcHRvam1zLnByb3BlcnRpZXMiKTsKLSAgICAgICAgCisKICAgICAgICAgUHJvcGVydGllcyBQID0gbmV3IFByb3BlcnRpZXMoKTsKICAgICAgICAgUC5sb2FkKHByb3BzKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIChuZXcgVVJMKFAuZ2V0UHJvcGVydHkoInVybCIpKSk7CiAgICAgfQotICAgIAotICAgICAgICAgICAgCisKKwogICAgIC8qKgogICAgICAqIENsb3NlIEpNUyBjb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBKTVNFeGNlcHRpb24gCisgICAgICogQGV4Y2VwdGlvbiBKTVNFeGNlcHRpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBKTVNFeGNlcHRpb24gewogICAgICAgICB0Yy5jbG9zZSgpOwogICAgIH0KLSAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L3NhbXBsZXMvU09BUHRvSk1TTWVzc2FnZVNhbXBsZUNsaWVudC9zaW1wbGUtY2xpZW50L3NyYy9qYXZhL3NhbXBsZXMvam1zL3NvYXB0b2ptcy9TZXJ2aWNlTG9jYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9jb20vc3VuL2VudGVycHJpc2UvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9zYW1wbGVzL1NPQVB0b0pNU01lc3NhZ2VTYW1wbGVDbGllbnQvc2ltcGxlLWNsaWVudC9zcmMvamF2YS9zYW1wbGVzL2ptcy9zb2FwdG9qbXMvU2VydmljZUxvY2F0b3IuamF2YQppbmRleCBhN2NiN2EyLi5kMTVjYjQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2NvbS9zdW4vZW50ZXJwcmlzZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L3NhbXBsZXMvU09BUHRvSk1TTWVzc2FnZVNhbXBsZUNsaWVudC9zaW1wbGUtY2xpZW50L3NyYy9qYXZhL3NhbXBsZXMvam1zL3NvYXB0b2ptcy9TZXJ2aWNlTG9jYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvY29tL3N1bi9lbnRlcnByaXNlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvc2FtcGxlcy9TT0FQdG9KTVNNZXNzYWdlU2FtcGxlQ2xpZW50L3NpbXBsZS1jbGllbnQvc3JjL2phdmEvc2FtcGxlcy9qbXMvc29hcHRvam1zL1NlcnZpY2VMb2NhdG9yLmphdmEKQEAgLTMyLDE5ICszMiwxOSBAQAogICovCiBwdWJsaWMgY2xhc3MgU2VydmljZUxvY2F0b3IgewogCi0gICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBpYzsgICAgCisgICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBpYzsKIAogICAgIHB1YmxpYyBTZXJ2aWNlTG9jYXRvcigpIHRocm93cyBTZXJ2aWNlTG9jYXRvckV4Y2VwdGlvbiAgewogICAgICAgdHJ5IHsKLSAgICAgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsgICAgICAgCisgICAgICAgIGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gbmUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2aWNlTG9jYXRvckV4Y2VwdGlvbihuZSk7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZpY2VMb2NhdG9yRXhjZXB0aW9uKGUpOwotICAgICAgfSAKKyAgICAgIH0KICAgICB9CiAKLSAgICAKKwogICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaGVscHMgaW4gb2J0YWluaW5nIHRoZSB0b3BpYyBmYWN0b3J5CiAgICAgICogQHJldHVybiB0aGUgZmFjdG9yeSBmb3IgdGhlIGZhY3RvcnkgdG8gZ2V0IHRvcGljIGNvbm5lY3Rpb25zIGZyb20KQEAgLTUyLDcgKzUyLDcgQEAKICAgICBwdWJsaWMgIFRvcGljQ29ubmVjdGlvbkZhY3RvcnkgZ2V0VG9waWNDb25uZWN0aW9uRmFjdG9yeShTdHJpbmcgdG9waWNDb25uRmFjdG9yeU5hbWUpIHRocm93cyBTZXJ2aWNlTG9jYXRvckV4Y2VwdGlvbiB7CiAgICAgICBUb3BpY0Nvbm5lY3Rpb25GYWN0b3J5IGZhY3RvcnkgPSBudWxsOwogICAgICAgdHJ5IHsKLSAgICAgICAgZmFjdG9yeSA9IChUb3BpY0Nvbm5lY3Rpb25GYWN0b3J5KSBpYy5sb29rdXAodG9waWNDb25uRmFjdG9yeU5hbWUpOyAgICAgICAgCisgICAgICAgIGZhY3RvcnkgPSAoVG9waWNDb25uZWN0aW9uRmFjdG9yeSkgaWMubG9va3VwKHRvcGljQ29ubkZhY3RvcnlOYW1lKTsKICAgICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBuZSkgewogICAgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgIHRocm93IG5ldyBTZXJ2aWNlTG9jYXRvckV4Y2VwdGlvbihuZSk7CkBAIC02Miw4ICs2Miw4IEBACiAgICAgICB9CiAgICAgICByZXR1cm4gZmFjdG9yeTsKICAgICB9Ci0gICAgCi0gICAKKworCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2Qgb2J0YWlucyB0aGUgdG9wYyBpdHNlbGYgZm9yIGEgY2FsbGVyCiAgICAgICogQHJldHVybiB0aGUgVG9waWMgRGVzdGluYXRpb24gdG8gc2VuZCBtZXNzYWdlcyB0bwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9ydW50ZXN0cy5iYXQgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L3J1bnRlc3RzLmJhdAppbmRleCBjODIxODQ3Li5mYjFmZTMwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L3J1bnRlc3RzLmJhdAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L3J1bnRlc3RzLmJhdApAQCAtMSwxMiArMSwxMiBAQAotQGVjaG8gb2ZmCi1zZXRsb2NhbAotc2V0IGJhc2U9Li4vLi4vLi4vLi4vLi4vLi4KLXNldCBjcDE9JWJhc2UlL3B1Ymxpc2gvSkRLMS40X0RCRy5PQkovYWRtaW4tY29yZS9tYmVhbmFwaS9saWIvbWJlYW5hcGkuamFyCi1zZXQgY3AyPSViYXNlJS9wdWJsaXNoL0pESzEuNF9EQkcuT0JKL2pteC9saWIvam14cmkuamFyCi1zZXQgY3AzPSViYXNlJS9wdWJsaXNoL0pESzEuNF9EQkcuT0JKL3JqbXgtcmkvam14cmVtb3RlLmphcgotc2V0IGNwND0lYmFzZSUvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2J1aWxkCi1zZXQgY3A9JWNwMSU7JWNwMiU7JWNwMyU7JWNwNCUKLQotamF2YSAtY3AgJWNwJSAtZWEgICBjb20uc3VuLmVudGVycHJpc2UuYWRtaW4ubWJlYW5hcGkuZGVwbG95bWVudC5EZXBsb3ltZW50VGVzdHNBdXRvCi0KLQorQGVjaG8gb2ZmDQorc2V0bG9jYWwNCitzZXQgYmFzZT0uLi8uLi8uLi8uLi8uLi8uLg0KK3NldCBjcDE9JWJhc2UlL3B1Ymxpc2gvSkRLMS40X0RCRy5PQkovYWRtaW4tY29yZS9tYmVhbmFwaS9saWIvbWJlYW5hcGkuamFyDQorc2V0IGNwMj0lYmFzZSUvcHVibGlzaC9KREsxLjRfREJHLk9CSi9qbXgvbGliL2pteHJpLmphcg0KK3NldCBjcDM9JWJhc2UlL3B1Ymxpc2gvSkRLMS40X0RCRy5PQkovcmpteC1yaS9qbXhyZW1vdGUuamFyDQorc2V0IGNwND0lYmFzZSUvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L2J1aWxkDQorc2V0IGNwPSVjcDElOyVjcDIlOyVjcDMlOyVjcDQlDQorDQoramF2YSAtY3AgJWNwJSAtZWEgICBjb20uc3VuLmVudGVycHJpc2UuYWRtaW4ubWJlYW5hcGkuZGVwbG95bWVudC5EZXBsb3ltZW50VGVzdHNBdXRvDQorDQorDQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9ydW50ZXN0c1VJLmJhdCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvcnVudGVzdHNVSS5iYXQKaW5kZXggOGJlZjRjOC4uNWVmOWFlYSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC9ydW50ZXN0c1VJLmJhdAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L3J1bnRlc3RzVUkuYmF0CkBAIC0xLDEzICsxLDEzIEBACi1AZWNobyBvZmYKLXNldGxvY2FsCi1zZXQgYmFzZT0uLi8uLi8uLi8uLi8uLi8uLgotc2V0IGNwMT0lYmFzZSUvcHVibGlzaC9KREsxLjRfREJHLk9CSi9hZG1pbi1jb3JlL21iZWFuYXBpL2xpYi9tYmVhbmFwaS5qYXIKLXNldCBjcDI9JWJhc2UlL3B1Ymxpc2gvSkRLMS40X0RCRy5PQkovam14L2xpYi9qbXhyaS5qYXIKLXNldCBjcDM9JWJhc2UlL3B1Ymxpc2gvSkRLMS40X0RCRy5PQkovcmpteC1yaS9qbXhyZW1vdGUuamFyCi1zZXQgY3A0PSViYXNlJS9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvYnVpbGQKLXNldCBjcD0lY3AxJTslY3AyJTslY3AzJTslY3A0JQotCi1qYXZhIC1jcCAlY3AlIC1lYSAgIGNvbS5zdW4uZW50ZXJwcmlzZS5hZG1pbi5tYmVhbmFwaS5kZXBsb3ltZW50LkRlcGxveW1lbnRUZXN0c1VJCi0KLQotCitAZWNobyBvZmYNCitzZXRsb2NhbA0KK3NldCBiYXNlPS4uLy4uLy4uLy4uLy4uLy4uDQorc2V0IGNwMT0lYmFzZSUvcHVibGlzaC9KREsxLjRfREJHLk9CSi9hZG1pbi1jb3JlL21iZWFuYXBpL2xpYi9tYmVhbmFwaS5qYXINCitzZXQgY3AyPSViYXNlJS9wdWJsaXNoL0pESzEuNF9EQkcuT0JKL2pteC9saWIvam14cmkuamFyDQorc2V0IGNwMz0lYmFzZSUvcHVibGlzaC9KREsxLjRfREJHLk9CSi9yam14LXJpL2pteHJlbW90ZS5qYXINCitzZXQgY3A0PSViYXNlJS9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvYnVpbGQNCitzZXQgY3A9JWNwMSU7JWNwMiU7JWNwMyU7JWNwNCUNCisNCitqYXZhIC1jcCAlY3AlIC1lYSAgIGNvbS5zdW4uZW50ZXJwcmlzZS5hZG1pbi5tYmVhbmFwaS5kZXBsb3ltZW50LkRlcGxveW1lbnRUZXN0c1VJDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC90ZXN0LnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2RlcGxveW1lbnQvdGVzdC54bWwKaW5kZXggOTkzMmFhZC4uMGMyNzgyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvZGVwbG95bWVudC90ZXN0LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9kZXBsb3ltZW50L3Rlc3QueG1sCkBAIC0yMSw3ICsyMSw3IEBACiAKIDx0YXJnZXQgbmFtZT0iaW5pdC1jb21tb24iIGRlcGVuZHM9IiI+CiA8ZWNobyBtZXNzYWdlPSJMb2FkaW5nIHByb3BzIGZyb20gZmlsZSAke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiIGxldmVsPSJ2ZXJib3NlIi8+Ci0gICA8cHJvcGVydHkgZmlsZT0iLi9jb25maWcucHJvcGVydGllcyIvPiAgIAorICAgPHByb3BlcnR5IGZpbGU9Ii4vY29uZmlnLnByb3BlcnRpZXMiLz4KICAgICAgIDxlY2hvIG1lc3NhZ2U9ImFkbWluLnVzZXIgJHthZG1pbi51c2VyfSIgLz4KICAgICAgIDxlY2hvIG1lc3NhZ2U9ImFkbWluLnBhc3N3b3JkICR7YWRtaW4ucGFzc3dvcmR9IiAvPgogICAgICAgPGVjaG8gbWVzc2FnZT0iYWRtaW4uaG9zdCAke2FkbWluLmhvc3R9IiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDU3Y2RmMWQuLjlmMmY2YzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL21vbml0b3JpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9ImVlIiB2YWx1ZT0iZW50ZXJwcmlzZSBlZGl0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwc2VydmVyLmluc3RhbmNlLm5hbWUiIHZhbHVlPSJzZXJ2ZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL21vbml0b3JpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9idWlsZC54bWwKaW5kZXggYjljNmEyNS4uNjM1NTJjOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9idWlsZC54bWwKQEAgLTI3LDggKzI3LDggQEAKIAogPHByb2plY3QgbmFtZT0iZWUtc3luY2hyb25pemF0aW9uIiBkZWZhdWx0PSJ1c2FnZSIgYmFzZWRpcj0iLiI+CiAKLSAgICAmY29tbW9uU2V0dXA7IAotICAgICZjb21tb25CdWlsZDsgCisgICAgJmNvbW1vblNldHVwOworICAgICZjb21tb25CdWlsZDsKICAgICAmZWVDb21tb25CdWlsZDsKICAgICAmdGVzdHByb3BlcnRpZXM7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL21vbml0b3JpbmcvY29ubmVjdG9yL0Nvbm5lY3Rvck1vbml0b3JpbmcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL21vbml0b3JpbmcvY29ubmVjdG9yL0Nvbm5lY3Rvck1vbml0b3JpbmcuamF2YQppbmRleCBiYTU1ZTY1Li42ZDJkY2YyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL2Nvbm5lY3Rvci9Db25uZWN0b3JNb25pdG9yaW5nLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9jb25uZWN0b3IvQ29ubmVjdG9yTW9uaXRvcmluZy5qYXZhCkBAIC01MiwyOSArNTIsMjkgQEAKICAqIEB2ZXJzaW9uICRSZXZpc2lvbjogMS4xICQKICAqLwogcHVibGljIGNsYXNzIENvbm5lY3Rvck1vbml0b3JpbmcgZXh0ZW5kcyBBTVhNb25pdG9yaW5nVGVzdEJhc2UgewotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgc2VydmVyTmFtZTsKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgU0VSVkxFVFMgPSAiIC0gU0VSVkxFVFMgLSI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFZTID0gIlZJUlRVQUwgU0VSVkVSIjsKLSAgICAKKwogICAgIHB1YmxpYyBDb25uZWN0b3JNb25pdG9yaW5nKGZpbmFsIFN0cmluZyBob3N0LCBmaW5hbCBpbnQgcG9ydCwgZmluYWwgU3RyaW5nIHNlcnZlck5hbWUsCiAgICAgZmluYWwgU3RyaW5nIGFkbWluVXNlciwgZmluYWwgU3RyaW5nIGFkbWluUGFzc3dvcmQsCiAgICAgZmluYWwgYm9vbGVhbiB1c2VUTFMpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyKGhvc3QsIHBvcnQsIGFkbWluVXNlcixhZG1pblBhc3N3b3JkLHVzZVRMUyk7CiAgICAgICAgIHRoaXMuc2VydmVyTmFtZSA9IHNlcnZlck5hbWU7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCAgdGVzdCgpIHsKICAgICAgICAgTWFwIGNvbm5NYXAgPQogICAgICAgICAgICAgZ2V0U2VydmVyUm9vdE1vbml0b3Ioc2VydmVyTmFtZSkuCiAgICAgICAgICAgICAgICAgZ2V0Q29ubmVjdG9yQ29ubmVjdGlvblBvb2xNb25pdG9yTWFwKCk7Ci0gICAgICAgIGFzc2VydChjb25uTWFwLnNpemUoKSA+IDApIDogCisgICAgICAgIGFzc2VydChjb25uTWFwLnNpemUoKSA+IDApIDoKICAgICAgICAgICAgICJUaGUgY29ubmVjdGlvbiBwb29sIG1vbml0b3IgbWFwIGlzICIgKyBjb25uTWFwLnNpemUoKTsKICAgICAgICAgZm9yKEl0ZXJhdG9yIGl0ciA9IGNvbm5NYXAudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXRyLmhhc05leHQoKTspIHsKICAgICAgICAgICAgIENvbm5lY3RvckNvbm5lY3Rpb25Qb29sTW9uaXRvciBjb25uTW9uaXRvciA9CiAgICAgICAgICAgICAgICAgKENvbm5lY3RvckNvbm5lY3Rpb25Qb29sTW9uaXRvcikgaXRyLm5leHQoKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5Db25uZWN0b3JDb25uZWN0aW9uUG9vbE1vbml0b3IgWyIgKyAgICAgICAgIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbkNvbm5lY3RvckNvbm5lY3Rpb25Qb29sTW9uaXRvciBbIiArCiAgICAgICAgICAgICAgICAgY29ubk1vbml0b3IuZ2V0TmFtZSgpICsgIl0iKTsKICAgICAgICAgICAgIHByaW50U3RhdHMoY29ubk1vbml0b3IuZ2V0U3RhdHMoKS5nZXRTdGF0aXN0aWNzKCkpOwogICAgICAgICB9CkBAIC05NiwxNCArOTYsMTQgQEAKICAgICAgICAgfQogICAgICAgICAgKiovCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCAgIG1haW4oIGZpbmFsIFN0cmluZ1tdIGFyZ3MgKSB7CiAgICAgICAgIG5ldyBTdHJpbmdpZmllclJlZ2lzdHJ5SW5pdGVySW1wbCggU3RyaW5naWZpZXJSZWdpc3RyeUltcGwuREVGQVVMVCApOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29ubmVjdG9yTW9uaXRvcmluZyBjb25uTXRyID0gbmV3IENvbm5lY3Rvck1vbml0b3JpbmcoCiAgICAgICAgICAgICBTeXN0ZW0uZ2V0UHJvcGVydHkoIkhPU1QiLCAiaG95YXMucmVkLmlwbGFuZXQuY29tIiksCkBAIC0xMTEsMTQgKzExMSwxNCBAQAogICAgICAgICAgICAgU3lzdGVtLmdldFByb3BlcnR5KCJBRE1JTl9VU0VSIiwgImFkbWluIiksCiAgICAgICAgICAgICBTeXN0ZW0uZ2V0UHJvcGVydHkoIkFETUlOX1BBU1NXT1JEIiwgImFkbWluYWRtaW4iKSwKICAgICAgICAgICAgIEJvb2xlYW4uZ2V0Qm9vbGVhbihTeXN0ZW0uZ2V0UHJvcGVydHkoIlVTRV9UTFMiLCAiZmFsc2UiKSkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIENvbm5lY3Rvck1vbml0b3JpbmcucHJpbnRBcmdzKGFyZ3MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGNvbm5NdHIudGVzdCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7CiAgICAgICAgICAgICBFeGNlcHRpb25VdGlsLmdldFJvb3RDYXVzZSggdCApLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL2Nvbm5lY3Rvci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9jb25uZWN0b3IvYnVpbGQucHJvcGVydGllcwppbmRleCAyZjBmMWVjLi44OTVjMDc4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL2Nvbm5lY3Rvci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL21vbml0b3JpbmcvY29ubmVjdG9yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTM3LDcgKzM3LDcgQEAKIG1nbXQtYXBpLmphcj0ke21vZHVsZS5wdWJsaXNoLmhvbWV9L21hbmFnZW1lbnQtYXBpL2xpYi9tYW5hZ2VtZW50LWFwaS5qYXIKIAogIwotIyBUaGUgaW5zdGFuY2UgdGhhdCB0aGUgd2ViIG1vZHVsZSBvciBhcHBsaWNhdGlvbiBpcyBkZXBsb3llZCBvbi4gSWYgdGhpcyBpcyAKKyMgVGhlIGluc3RhbmNlIHRoYXQgdGhlIHdlYiBtb2R1bGUgb3IgYXBwbGljYXRpb24gaXMgZGVwbG95ZWQgb24uIElmIHRoaXMgaXMKICMgbnVsbCBvciAiIiB0aGVuIHRoZSBkZWZhdWx0IHNlcnZlciBpbnN0YW5jZSAic2VydmVyIiBpcyBhc3N1bWVkLgogIwogaW5zdGFuY2UubmFtZT1zZXJ2ZXIKQEAgLTQ5LDcgKzQ5LDcgQEAKIGFwcGxpY2F0aW9uLm5hbWU9c3RhdGVsZXNzLXNpbXBsZQogCiAjCi0jIFRoZSBlbWJlZGRlZCBvciBzdGFuZGFsb25lIHdlYiBtb2R1bGUuIAorIyBUaGUgZW1iZWRkZWQgb3Igc3RhbmRhbG9uZSB3ZWIgbW9kdWxlLgogIwogd2ViLm1vZHVsZS5uYW1lPXN0YXRlbGVzcy1zaW1wbGUud2FyCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL21vbml0b3JpbmcvY29ubmVjdG9yL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL21vbml0b3JpbmcvY29ubmVjdG9yL2J1aWxkLnhtbAppbmRleCBjMzA3MTE3Li42NjNkYjE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL2Nvbm5lY3Rvci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9jb25uZWN0b3IvYnVpbGQueG1sCkBAIC02MSw3ICs2MSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSIKICAgICAgICAgZGVzY3JpcHRpb249IkJ1aWxkIGVudGlyZSBjb21wb25lbnQiIC8+CiAKLSAgICA8IS0tIGNvbXBpbGUtY29tbW9uIC0tPiAgICAKKyAgICA8IS0tIGNvbXBpbGUtY29tbW9uIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1jb21tb24iIGRlcGVuZHM9ImluaXQiPgogICAgICAgICA8amF2YWMgIHNyY2Rpcj0iJHtzcmMuZGlyfS9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2NvbW1vbiIKICAgICAgICAgICAgICAgICBkZXN0ZGlyPSIke2J1aWxkfSIKQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqL0FNWE1vbml0b3JpbmdUZXN0QmFzZS5qYXZhIi8+CiAgICAgICAgIDwvamF2YWM+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgIAorCiAgICAgPCEtLSBjb21waWxlIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdCwgY29tcGlsZS1jb21tb24iPgogICAgICAgICA8amF2YWMgIHNyY2Rpcj0iJHtzcmMuZGlyfS9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL21vbml0b3JpbmcvY29ubmVjdG9yIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9lamIvRUpCTW9uaXRvcmluZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9lamIvRUpCTW9uaXRvcmluZy5qYXZhCmluZGV4IGE5YTUyMjMuLjFhNmRmOTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL21vbml0b3JpbmcvZWpiL0VKQk1vbml0b3JpbmcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL2VqYi9FSkJNb25pdG9yaW5nLmphdmEKQEAgLTU1LDcgKzU1LDcgQEAKICAqLwogcHVibGljIGNsYXNzIEVKQk1vbml0b3JpbmcgewogCi0gICAgcHJpdmF0ZSBmaW5hbCBEb21haW5Sb290CW1Eb21haW5Sb290OworICAgIHByaXZhdGUgZmluYWwgRG9tYWluUm9vdCAgICBtRG9tYWluUm9vdDsKIAogICAgIHByaXZhdGUgU3RyaW5nIFNFUlZFUl9OQU1FID0gInNlcnZlciI7CiAKQEAgLTczLDkgKzczLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGdldFNlcnZlclJvb3RNb25pdG9yTWFwKCkuICBnZXQoU0VSVkVSX05BTUUpOwogICAgICAgICBNYXAgYXBwc010ck1nciA9IHN2clJvb3RNdHIuZ2V0QXBwbGljYXRpb25Nb25pdG9yTWFwKCk7CiAKLSAgICAgICAgQXBwbGljYXRpb25Nb25pdG9yIGFwcE10ciA9IAorICAgICAgICBBcHBsaWNhdGlvbk1vbml0b3IgYXBwTXRyID0KICAgICAgICAgICAgIChBcHBsaWNhdGlvbk1vbml0b3IpIGFwcHNNdHJNZ3IuZ2V0KEFQUF9OQU1FKTsKLSAgICAgICAKKwogICAgICAgICBNYXAgZWpiTWdyID0gYXBwTXRyLmdldEVKQk1vZHVsZU1vbml0b3JNYXAoKTsKIAogICAgICAgICBTdGF0cyBzdGF0cyA9IG51bGw7CkBAIC05MCwxMiArOTAsMTIgQEAKICAgICAgICAgICAgIEVKQk1vZHVsZU1vbml0b3IgYmVhbk1nciA9ICAoRUpCTW9kdWxlTW9uaXRvcikgdG1wOwogCiAgICAgICAgICAgICBNYXAgYmVhbnMgPSBiZWFuTWdyLmdldEVKQk1vbml0b3JNYXAoKTsKLSAgICAgICAKKwogICAgICAgICAgICAgSXRlcmF0b3IgaXQgPSBiZWFucy52YWx1ZXMoKS5pdGVyYXRvcigpOwogCiAgICAgICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgRUpCTW9uaXRvciBlbSA9IChFSkJNb25pdG9yKSBpdC5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgbGlzdFN0YXRzKGVtKTsgCisgICAgICAgICAgICAgICAgbGlzdFN0YXRzKGVtKTsKIAogICAgICAgICAgICAgICAgIE1hcCBtZXRob2RNYXAgPSBlbS5nZXRCZWFuTWV0aG9kTW9uaXRvck1hcCgpOwogICAgICAgICAgICAgICAgIGl0ciA9IG1ldGhvZE1hcC52YWx1ZXMoKS5pdGVyYXRvcigpOwpAQCAtMTM4LDQwICsxMzgsNDAgQEAKICAgICAgICAgcHJpbnRTdGF0cyhzdHMpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHByaW50U3RhdHMoU3RhdGlzdGljW10gc3RhdHMpIAorICAgIHB1YmxpYyB2b2lkIHByaW50U3RhdHMoU3RhdGlzdGljW10gc3RhdHMpCiAgICAgewogICAgICAgICBpZiAoc3RhdHMgPT0gbnVsbCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBmb3IgKCBpbnQgaT0wOyBpIDwgc3RhdHMubGVuZ3RoOyBpKyspIAorICAgICAgICBmb3IgKCBpbnQgaT0wOyBpIDwgc3RhdHMubGVuZ3RoOyBpKyspCiAgICAgICAgIHsKICAgICAgICAgICAgIHByaW50U3RhdChzdGF0c1tpXSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgcHJpbnRTdGF0KFN0YXRpc3RpYyBzdGF0KSAKKworICAgIHB1YmxpYyB2b2lkIHByaW50U3RhdChTdGF0aXN0aWMgc3RhdCkKICAgICB7CiAgICAgICAgIGlmIChzdGF0ID09IG51bGwpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFN0YXQgbmFtZSBpcyAiICsgc3RhdC5nZXROYW1lKCkgKyAKLSAgICAgICAgICAgICAgICAiIGRlc2NyaXB0aW9uOiAiICsgc3RhdC5nZXREZXNjcmlwdGlvbigpICsgIiBzdGFydCB0aW1lICIgCi0gICAgICAgICAgICAgICAgKyBzdGF0LmdldFN0YXJ0VGltZSgpICsgIiBsYXN0IHNhbXBsZSB0aW1lICIgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBTdGF0IG5hbWUgaXMgIiArIHN0YXQuZ2V0TmFtZSgpICsKKyAgICAgICAgICAgICAgICAiIGRlc2NyaXB0aW9uOiAiICsgc3RhdC5nZXREZXNjcmlwdGlvbigpICsgIiBzdGFydCB0aW1lICIKKyAgICAgICAgICAgICAgICArIHN0YXQuZ2V0U3RhcnRUaW1lKCkgKyAiIGxhc3Qgc2FtcGxlIHRpbWUgIgogICAgICAgICAgICAgICAgICsgc3RhdC5nZXRMYXN0U2FtcGxlVGltZSgpICsgIiB1bml0ICIgKyBzdGF0LmdldFVuaXQoKSk7CiAgICAgfQogCi0gICAgcHVibGljIEVKQk1vbml0b3JpbmcoZmluYWwgU3RyaW5nIGhvc3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgcG9ydCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBhZG1pblVzZXIsIAorICAgIHB1YmxpYyBFSkJNb25pdG9yaW5nKGZpbmFsIFN0cmluZyBob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGFkbWluVXNlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGFkbWluUGFzc3dvcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gdXNlVExTKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCiAgICAgewotICAgICAgICBmaW5hbCBBTVhDb25uZWN0b3IgY3QJPSAKKyAgICAgICAgZmluYWwgQU1YQ29ubmVjdG9yIGN0ICAgID0KICAgICAgICAgICAgIG5ldyBBTVhDb25uZWN0b3IoIGhvc3QsIHBvcnQsIGFkbWluVXNlciwgYWRtaW5QYXNzd29yZCwgdXNlVExTICk7CiAKLSAgICAgICAgbURvbWFpblJvb3QJPSBjdC5nZXREb21haW5Sb290KCk7CisgICAgICAgIG1Eb21haW5Sb290ICAgID0gY3QuZ2V0RG9tYWluUm9vdCgpOwogCiAgICAgfQogCkBAIC0xODksNyArMTg5LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5nZXRQcm9wZXJ0eSgiQURNSU5fUEFTU1dPUkQiLCAiYWRtaW5hZG1pbiIpLAogICAgICAgICAgICAgQm9vbGVhbi5nZXRCb29sZWFuKFN5c3RlbS5nZXRQcm9wZXJ0eSgiVVNFX1RMUyIsICJmYWxzZSIpKSk7CiAKLSAgICAgICAgICAgZWpiTXRyLnRlc3RFSkJQb29sU3RhdHMoKTsgCisgICAgICAgICAgIGVqYk10ci50ZXN0RUpCUG9vbFN0YXRzKCk7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2goIFRocm93YWJsZSB0ICkKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9lamIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL21vbml0b3JpbmcvZWpiL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYmI2MTY2Yi4uYjFhMTk0OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9lamIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL2VqYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNCw3ICsxNCw3IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogIwogCi0gCisKIAogc3JjLmRpcj0uCiBtb2R1bGUucHVibGlzaC5ob21lPS4uLy4uLy4uLy4uLy4uLy4uLyR7cHVibGlzaC5ob21lfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9odHRwL0hUVFBNb25pdG9yaW5nLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL2h0dHAvSFRUUE1vbml0b3JpbmcuamF2YQppbmRleCBiMDY3YWY4Li44YmVhODQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL2h0dHAvSFRUUE1vbml0b3JpbmcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL2h0dHAvSFRUUE1vbml0b3JpbmcuamF2YQpAQCAtNTksMTUgKzU5LDE1IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFZTID0gIlZJUlRVQUwgU0VSVkVSIjsKIAogICAgIHB1YmxpYyBIVFRQTW9uaXRvcmluZyhmaW5hbCBTdHJpbmcgaG9zdCwgZmluYWwgaW50IHBvcnQsIGZpbmFsIFN0cmluZyBzZXJ2ZXJOYW1lLAotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGFkbWluVXNlciwgZmluYWwgU3RyaW5nIGFkbWluUGFzc3dvcmQsIAorICAgICAgICAgICAgZmluYWwgU3RyaW5nIGFkbWluVXNlciwgZmluYWwgU3RyaW5nIGFkbWluUGFzc3dvcmQsCiAgICAgICAgICAgICBmaW5hbCBib29sZWFuIHVzZVRMUykgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIoaG9zdCwgcG9ydCwgYWRtaW5Vc2VyLGFkbWluUGFzc3dvcmQsdXNlVExTKTsKICAgICAgICAgdGhpcy5zZXJ2ZXJOYW1lID0gc2VydmVyTmFtZTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkICB0ZXN0KCkgewotICAgICAgICBIVFRQU2VydmljZU1vbml0b3IgaHR0cFNlcnZpY2UgPSAKKyAgICAgICAgSFRUUFNlcnZpY2VNb25pdG9yIGh0dHBTZXJ2aWNlID0KICAgICAgICAgICAgIGdldFNlcnZlclJvb3RNb25pdG9yKHNlcnZlck5hbWUpLmdldEhUVFBTZXJ2aWNlTW9uaXRvcigpOwogICAgICAgICBhc3NlcnQgKGh0dHBTZXJ2aWNlICE9IG51bGwpIDogIlRoZSBodHRwIHNlcnZpY2UgbW9uaXRvciBpcyBudWxsISI7CiAgICAgICAgIE1hcCB2c01hcCA9IGh0dHBTZXJ2aWNlLmdldEhUVFBTZXJ2aWNlVmlydHVhbFNlcnZlck1vbml0b3JNYXAoKTsKQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIAorCiAgICAgLyoqCiAgICAgICoKICAgICAgKi8KQEAgLTk4LDE0ICs5OCwxNCBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5nZXRQcm9wZXJ0eSgiQURNSU5fVVNFUiIsICJhZG1pbiIpLAogICAgICAgICAgICAgICAgIFN5c3RlbS5nZXRQcm9wZXJ0eSgiQURNSU5fUEFTU1dPUkQiLCAiYWRtaW5hZG1pbiIpLAogICAgICAgICAgICAgICAgIEJvb2xlYW4uZ2V0Qm9vbGVhbihTeXN0ZW0uZ2V0UHJvcGVydHkoIlVTRV9UTFMiLCAiZmFsc2UiKSkpOwotICAgICAgICAgCisKICAgICAgICAgICAgIEhUVFBNb25pdG9yaW5nLnByaW50QXJncyhhcmdzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBodHRwTXRyLnRlc3QoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goIFRocm93YWJsZSB0ICkgewogICAgICAgICAgICAgRXhjZXB0aW9uVXRpbC5nZXRSb290Q2F1c2UoIHQgKS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9odHRwL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL2h0dHAvYnVpbGQucHJvcGVydGllcwppbmRleCAyZjBmMWVjLi44OTVjMDc4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL2h0dHAvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL2h0dHAvYnVpbGQucHJvcGVydGllcwpAQCAtMzcsNyArMzcsNyBAQAogbWdtdC1hcGkuamFyPSR7bW9kdWxlLnB1Ymxpc2guaG9tZX0vbWFuYWdlbWVudC1hcGkvbGliL21hbmFnZW1lbnQtYXBpLmphcgogCiAjCi0jIFRoZSBpbnN0YW5jZSB0aGF0IHRoZSB3ZWIgbW9kdWxlIG9yIGFwcGxpY2F0aW9uIGlzIGRlcGxveWVkIG9uLiBJZiB0aGlzIGlzIAorIyBUaGUgaW5zdGFuY2UgdGhhdCB0aGUgd2ViIG1vZHVsZSBvciBhcHBsaWNhdGlvbiBpcyBkZXBsb3llZCBvbi4gSWYgdGhpcyBpcwogIyBudWxsIG9yICIiIHRoZW4gdGhlIGRlZmF1bHQgc2VydmVyIGluc3RhbmNlICJzZXJ2ZXIiIGlzIGFzc3VtZWQuCiAjCiBpbnN0YW5jZS5uYW1lPXNlcnZlcgpAQCAtNDksNyArNDksNyBAQAogYXBwbGljYXRpb24ubmFtZT1zdGF0ZWxlc3Mtc2ltcGxlCiAKICMKLSMgVGhlIGVtYmVkZGVkIG9yIHN0YW5kYWxvbmUgd2ViIG1vZHVsZS4gCisjIFRoZSBlbWJlZGRlZCBvciBzdGFuZGFsb25lIHdlYiBtb2R1bGUuCiAjCiB3ZWIubW9kdWxlLm5hbWU9c3RhdGVsZXNzLXNpbXBsZS53YXIKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9odHRwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL21vbml0b3JpbmcvaHR0cC9idWlsZC54bWwKaW5kZXggODJjMGNiNS4uYThiYTU1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9odHRwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL2h0dHAvYnVpbGQueG1sCkBAIC02MSw3ICs2MSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSIKICAgICAgICAgZGVzY3JpcHRpb249IkJ1aWxkIGVudGlyZSBjb21wb25lbnQiIC8+CiAKLSAgICA8IS0tIGNvbXBpbGUtY29tbW9uIC0tPiAgICAKKyAgICA8IS0tIGNvbXBpbGUtY29tbW9uIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1jb21tb24iIGRlcGVuZHM9ImluaXQiPgogICAgICAgICA8amF2YWMgIHNyY2Rpcj0iJHtzcmMuZGlyfS9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2NvbW1vbiIKICAgICAgICAgICAgICAgICBkZXN0ZGlyPSIke2J1aWxkfSIKQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqL0FNWE1vbml0b3JpbmdUZXN0QmFzZS5qYXZhIi8+CiAgICAgICAgIDwvamF2YWM+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgIAorCiAgICAgPCEtLSBjb21waWxlIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdCwgY29tcGlsZS1jb21tb24iPgogICAgICAgICA8amF2YWMgIHNyY2Rpcj0iJHtzcmMuZGlyfS9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL21vbml0b3JpbmcvaHR0cCIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL21vbml0b3JpbmcvamRiYy9KREJDTW9uaXRvcmluZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9qZGJjL0pEQkNNb25pdG9yaW5nLmphdmEKaW5kZXggYTU4NDY3Yi4uN2Q4NjQ3YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9qZGJjL0pEQkNNb25pdG9yaW5nLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9qZGJjL0pEQkNNb25pdG9yaW5nLmphdmEKQEAgLTUxLDcgKzUxLDcgQEAKICAqLwogcHVibGljIGNsYXNzIEpEQkNNb25pdG9yaW5nIHsKIAotICAgIHByaXZhdGUgc3RhdGljIERvbWFpblJvb3QJbURvbWFpblJvb3Q7CisgICAgcHJpdmF0ZSBzdGF0aWMgRG9tYWluUm9vdCAgICBtRG9tYWluUm9vdDsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBTRVJWRVJfTkFNRSA9ICJzZXJ2ZXIiOwogCkBAIC01OSwxNSArNTksMTUgQEAKICAgICB7CiAKICAgICAgICAgTWFwIGNwTXRyTWdyID0gICBzdnJSb290TXRyLmdldENvbm5lY3RvckNvbm5lY3Rpb25Qb29sTW9uaXRvck1hcCgpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbm5lY3RvciBjb25uZWN0aW9uIHBvb2wgc2l6ZSAgaXMgIiArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbm5lY3RvciBjb25uZWN0aW9uIHBvb2wgc2l6ZSAgaXMgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBjcE10ck1nci5zaXplKCkpOwogICAgICAgICBJdGVyYXRvciBpdHIgPSBjcE10ck1nci52YWx1ZXMoKS5pdGVyYXRvcigpOwogICAgICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkgewogICAgICAgICAgICAgT2JqZWN0IG8gPSBpdHIubmV4dCgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQ29ubmVjdG9yIENvbm5lY3Rpb24gcG9vbCAgaXMgIiArIG8pOwogICAgICAgICAgICAgQ29ubmVjdG9yQ29ubmVjdGlvblBvb2xNb25pdG9yIGNQb29sICA9Ci0gICAgICAgICAgICAgICAgICAgIChDb25uZWN0b3JDb25uZWN0aW9uUG9vbE1vbml0b3IpbzsgCi0gICAgICAgICAgICBsaXN0U3RhdChjUG9vbCk7IAorICAgICAgICAgICAgICAgICAgICAoQ29ubmVjdG9yQ29ubmVjdGlvblBvb2xNb25pdG9yKW87CisgICAgICAgICAgICBsaXN0U3RhdChjUG9vbCk7CiAgICAgICAgfQogCiAgICAgfQpAQCAtODEsOCArODEsOCBAQAogICAgICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkgewogICAgICAgICAgICAgT2JqZWN0IG8gPSBpdHIubmV4dCgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQ29ubmVjdGlvbiBwb29sICBpcyAiICsgbyk7Ci0gICAgICAgICAgICBKREJDQ29ubmVjdGlvblBvb2xNb25pdG9yIGNQb29sICA9IChKREJDQ29ubmVjdGlvblBvb2xNb25pdG9yKW87IAotICAgICAgICAgICAgbGlzdFN0YXQoY1Bvb2wpOyAKKyAgICAgICAgICAgIEpEQkNDb25uZWN0aW9uUG9vbE1vbml0b3IgY1Bvb2wgID0gKEpEQkNDb25uZWN0aW9uUG9vbE1vbml0b3IpbzsKKyAgICAgICAgICAgIGxpc3RTdGF0KGNQb29sKTsKICAgICAgICB9CiAKICAgICB9CkBAIC05Niw0NyArOTYsNDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGxpc3RTdGF0cyhNb25pdG9yaW5nU3RhdHMgbXMpIAorICAgIHB1YmxpYyB2b2lkIGxpc3RTdGF0cyhNb25pdG9yaW5nU3RhdHMgbXMpCiAgICAgewogICAgICAgICBTdGF0cyBzdGF0cyA9IG1zLmdldFN0YXRzKCk7CiAgICAgICAgIFN0YXRpc3RpY1tdIHN0cyA9IHN0YXRzLmdldFN0YXRpc3RpY3MoKTsKICAgICAgICAgcHJpbnRTdGF0cyhzdHMpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHByaW50U3RhdHMoU3RhdGlzdGljW10gc3RhdHMpIAorICAgIHB1YmxpYyB2b2lkIHByaW50U3RhdHMoU3RhdGlzdGljW10gc3RhdHMpCiAgICAgewogICAgICAgICBpZiAoc3RhdHMgPT0gbnVsbCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBmb3IgKCBpbnQgaT0wOyBpIDwgc3RhdHMubGVuZ3RoOyBpKyspIAorICAgICAgICBmb3IgKCBpbnQgaT0wOyBpIDwgc3RhdHMubGVuZ3RoOyBpKyspCiAgICAgICAgIHsKICAgICAgICAgICAgIHByaW50U3RhdChzdGF0c1tpXSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgcHJpbnRTdGF0KFN0YXRpc3RpYyBzdGF0KSAKKworICAgIHB1YmxpYyB2b2lkIHByaW50U3RhdChTdGF0aXN0aWMgc3RhdCkKICAgICB7CiAgICAgICAgIGlmIChzdGF0ID09IG51bGwpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFN0YXQgbmFtZSBpcyAiICsgc3RhdC5nZXROYW1lKCkgKyAKLSAgICAgICAgICAgICAgICAiIGRlc2NyaXB0aW9uOiAiICsgc3RhdC5nZXREZXNjcmlwdGlvbigpICsgIiBzdGFydCB0aW1lICIgCi0gICAgICAgICAgICAgICAgKyBzdGF0LmdldFN0YXJ0VGltZSgpICsgIiBsYXN0IHNhbXBsZSB0aW1lICIgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBTdGF0IG5hbWUgaXMgIiArIHN0YXQuZ2V0TmFtZSgpICsKKyAgICAgICAgICAgICAgICAiIGRlc2NyaXB0aW9uOiAiICsgc3RhdC5nZXREZXNjcmlwdGlvbigpICsgIiBzdGFydCB0aW1lICIKKyAgICAgICAgICAgICAgICArIHN0YXQuZ2V0U3RhcnRUaW1lKCkgKyAiIGxhc3Qgc2FtcGxlIHRpbWUgIgogICAgICAgICAgICAgICAgICsgc3RhdC5nZXRMYXN0U2FtcGxlVGltZSgpICsgIiB1bml0ICIgKyBzdGF0LmdldFVuaXQoKSk7CiAgICAgfQogCi0gICAgcHVibGljIEpEQkNNb25pdG9yaW5nKGZpbmFsIFN0cmluZyBob3N0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IHBvcnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgYWRtaW5Vc2VyLCAKKyAgICBwdWJsaWMgSkRCQ01vbml0b3JpbmcoZmluYWwgU3RyaW5nIGhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgYWRtaW5Vc2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgYWRtaW5QYXNzd29yZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiB1c2VUTFMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KICAgICB7Ci0gICAgICAgIGZpbmFsIEFNWENvbm5lY3RvciBjdAk9IAorICAgICAgICBmaW5hbCBBTVhDb25uZWN0b3IgY3QgICAgPQogICAgICAgICAgICAgbmV3IEFNWENvbm5lY3RvciggaG9zdCwgcG9ydCwgYWRtaW5Vc2VyLCBhZG1pblBhc3N3b3JkLCB1c2VUTFMgKTsKIAotICAgICAgICBtRG9tYWluUm9vdAk9IGN0LmdldERvbWFpblJvb3QoKTsKKyAgICAgICAgbURvbWFpblJvb3QgICAgPSBjdC5nZXREb21haW5Sb290KCk7CiAKICAgICB9CiAKQEAgLTE1OSw4ICsxNTksOCBAQAogICAgICAgICAgICAgU2VydmVyUm9vdE1vbml0b3Igc3ZyUm9vdE10ciA9IChTZXJ2ZXJSb290TW9uaXRvcikgbW9uaXRvclJvb3QuCiAgICAgICAgICAgICAgICAgICAgICAgICBnZXRTZXJ2ZXJSb290TW9uaXRvck1hcCgpLiAgZ2V0KFNFUlZFUl9OQU1FKTsKIAotICAgICAgICAgICAgamRiY010ci50ZXN0SkRCQ1Bvb2xTdGF0cyhzdnJSb290TXRyKTsgCi0gICAgICAgICAgICBqZGJjTXRyLnRlc3RDQ1Bvb2xTdGF0cyhzdnJSb290TXRyKTsgCisgICAgICAgICAgICBqZGJjTXRyLnRlc3RKREJDUG9vbFN0YXRzKHN2clJvb3RNdHIpOworICAgICAgICAgICAgamRiY010ci50ZXN0Q0NQb29sU3RhdHMoc3ZyUm9vdE10cik7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2goIFRocm93YWJsZSB0ICkKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9qZGJjL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL2pkYmMvYnVpbGQucHJvcGVydGllcwppbmRleCBiYjYxNjZiLi5iMWExOTQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL2pkYmMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL2pkYmMvYnVpbGQucHJvcGVydGllcwpAQCAtMTQsNyArMTQsNyBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKICMKIAotIAorCiAKIHNyYy5kaXI9LgogbW9kdWxlLnB1Ymxpc2guaG9tZT0uLi8uLi8uLi8uLi8uLi8uLi8ke3B1Ymxpc2guaG9tZX0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL21vbml0b3JpbmcvbWlzYy9NaXNjTW9uaXRvcmluZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9taXNjL01pc2NNb25pdG9yaW5nLmphdmEKaW5kZXggNmIyOGQ1OS4uYTA1OGM2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9taXNjL01pc2NNb25pdG9yaW5nLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9taXNjL01pc2NNb25pdG9yaW5nLmphdmEKQEAgLTU0LDE0ICs1NCwxNCBAQAogICovCiBwdWJsaWMgY2xhc3MgTWlzY01vbml0b3JpbmcgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgRG9tYWluUm9vdAltRG9tYWluUm9vdDsKKyAgICBwcml2YXRlIHN0YXRpYyBEb21haW5Sb290ICAgIG1Eb21haW5Sb290OwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZFUl9OQU1FID0gInNlcnZlciI7CiAKICAgICBwdWJsaWMgdm9pZCAgdGVzdFRocmVhZFBvb2xTdGF0cyhTZXJ2ZXJSb290TW9uaXRvciBzdnJSb290TXRyKQogICAgIHsKICAgICAgICAgTWFwIHRwTWFwPSBzdnJSb290TXRyLmdldFRocmVhZFBvb2xNb25pdG9yTWFwKCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG4iICsgIlRocmVhZCBQb29sIE1vbml0b3IgU3RhdHM6ICIgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG4iICsgIlRocmVhZCBQb29sIE1vbml0b3IgU3RhdHM6ICIKICAgICAgICAgKyAiXG4iKTsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRocmVhZCBQb29sT1JCIG1vbml0b3IgbWFwICIgKyB0cE1hcC5zaXplKCkpOwpAQCAtODAsNyArODAsNyBAQAogICAgIHB1YmxpYyB2b2lkICB0ZXN0T1JCU3RhdHMoU2VydmVyUm9vdE1vbml0b3Igc3ZyUm9vdE10cikKICAgICB7CiAgICAgICAgIE1hcCBvcmJNYXA9IHN2clJvb3RNdHIuZ2V0T1JCQ29ubmVjdGlvbk1hbmFnZXJNb25pdG9yTWFwKCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG4iICsgIk9SQiBDb25uZWN0aW9uIE1hbmFnZXIgTW9uaXRvciBTdGF0czogIiAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbiIgKyAiT1JCIENvbm5lY3Rpb24gTWFuYWdlciBNb25pdG9yIFN0YXRzOiAiCiAgICAgICAgICsgIlxuIik7CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJPUkIgbW9uaXRvciBtYXAgIiArIG9yYk1hcC5zaXplKCkpOwpAQCAtMTA2LDcgKzEwNiw3IEBACiAKICAgICBwdWJsaWMgdm9pZCAgdGVzdFRyYW5zYWN0aW9uU2VydmljZVN0YXRzKFNlcnZlclJvb3RNb25pdG9yIHN2clJvb3RNdHIpCiAgICAgewotICAgICAgICBUcmFuc2FjdGlvblNlcnZpY2VNb25pdG9yIHRzTXRyID0gCisgICAgICAgIFRyYW5zYWN0aW9uU2VydmljZU1vbml0b3IgdHNNdHIgPQogICAgICAgICAgICAgc3ZyUm9vdE10ci5nZXRUcmFuc2FjdGlvblNlcnZpY2VNb25pdG9yKCk7CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbiIgKyAiVHJhbnNhY3Rpb24gU2VydmljZSBNb25pdG9yIFN0YXRzOiAiICsgIlxuIik7CkBAIC0xNDAsNDAgKzE0MCw0MCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgcHJpbnRTdGF0cyhTdGF0aXN0aWNbXSBzdGF0cykgCisgICAgcHVibGljIHZvaWQgcHJpbnRTdGF0cyhTdGF0aXN0aWNbXSBzdGF0cykKICAgICB7CiAgICAgICAgIGlmIChzdGF0cyA9PSBudWxsKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGZvciAoIGludCBpPTA7IGkgPCBzdGF0cy5sZW5ndGg7IGkrKykgCisgICAgICAgIGZvciAoIGludCBpPTA7IGkgPCBzdGF0cy5sZW5ndGg7IGkrKykKICAgICAgICAgewogICAgICAgICAgICAgcHJpbnRTdGF0KHN0YXRzW2ldKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBwcmludFN0YXQoU3RhdGlzdGljIHN0YXQpIAorCisgICAgcHVibGljIHZvaWQgcHJpbnRTdGF0KFN0YXRpc3RpYyBzdGF0KQogICAgIHsKICAgICAgICAgaWYgKHN0YXQgPT0gbnVsbCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgU3RhdCBuYW1lIGlzICIgKyBzdGF0LmdldE5hbWUoKSArIAotICAgICAgICAgICAgICAgICIgZGVzY3JpcHRpb246ICIgKyBzdGF0LmdldERlc2NyaXB0aW9uKCkgKyAiIHN0YXJ0IHRpbWUgIiAKLSAgICAgICAgICAgICAgICArIHN0YXQuZ2V0U3RhcnRUaW1lKCkgKyAiIGxhc3Qgc2FtcGxlIHRpbWUgIiAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFN0YXQgbmFtZSBpcyAiICsgc3RhdC5nZXROYW1lKCkgKworICAgICAgICAgICAgICAgICIgZGVzY3JpcHRpb246ICIgKyBzdGF0LmdldERlc2NyaXB0aW9uKCkgKyAiIHN0YXJ0IHRpbWUgIgorICAgICAgICAgICAgICAgICsgc3RhdC5nZXRTdGFydFRpbWUoKSArICIgbGFzdCBzYW1wbGUgdGltZSAiCiAgICAgICAgICAgICAgICAgKyBzdGF0LmdldExhc3RTYW1wbGVUaW1lKCkgKyAiIHVuaXQgIiArIHN0YXQuZ2V0VW5pdCgpKTsKICAgICB9CiAKLSAgICBwdWJsaWMgTWlzY01vbml0b3JpbmcoZmluYWwgU3RyaW5nIGhvc3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgcG9ydCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBhZG1pblVzZXIsIAorICAgIHB1YmxpYyBNaXNjTW9uaXRvcmluZyhmaW5hbCBTdHJpbmcgaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBhZG1pblVzZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBhZG1pblBhc3N3b3JkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIHVzZVRMUykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgogICAgIHsKLSAgICAgICAgZmluYWwgQU1YQ29ubmVjdG9yIGN0CT0gCisgICAgICAgIGZpbmFsIEFNWENvbm5lY3RvciBjdCAgICA9CiAgICAgICAgICAgICBuZXcgQU1YQ29ubmVjdG9yKCBob3N0LCBwb3J0LCBhZG1pblVzZXIsIGFkbWluUGFzc3dvcmQsIHVzZVRMUyApOwogCi0gICAgICAgIG1Eb21haW5Sb290CT0gY3QuZ2V0RG9tYWluUm9vdCgpOworICAgICAgICBtRG9tYWluUm9vdCAgICA9IGN0LmdldERvbWFpblJvb3QoKTsKIAogICAgIH0KIApAQCAtMTk2LDggKzE5Niw4IEBACiAgICAgICAgICAgICBTZXJ2ZXJSb290TW9uaXRvciBzdnJSb290TXRyID0gKFNlcnZlclJvb3RNb25pdG9yKSBtb25pdG9yUm9vdC4KICAgICAgICAgICAgICAgICAgICAgICAgIGdldFNlcnZlclJvb3RNb25pdG9yTWFwKCkuICBnZXQoU0VSVkVSX05BTUUpOwogCi0gICAgICAgICAgICBtaXNjTXRyLnRlc3RKVk1TdGF0cyhzdnJSb290TXRyKTsgCi0gICAgICAgICAgICBtaXNjTXRyLnRlc3RUcmFuc2FjdGlvblNlcnZpY2VTdGF0cyhzdnJSb290TXRyKTsgCisgICAgICAgICAgICBtaXNjTXRyLnRlc3RKVk1TdGF0cyhzdnJSb290TXRyKTsKKyAgICAgICAgICAgIG1pc2NNdHIudGVzdFRyYW5zYWN0aW9uU2VydmljZVN0YXRzKHN2clJvb3RNdHIpOwogICAgICAgICAgICAgbWlzY010ci50ZXN0SFRUUFNlcnZpY2VTdGF0cyhzdnJSb290TXRyKTsKICAgICAgICAgICAgIG1pc2NNdHIudGVzdFRocmVhZFBvb2xTdGF0cyhzdnJSb290TXRyKTsKICAgICAgICAgICAgIG1pc2NNdHIudGVzdE9SQlN0YXRzKHN2clJvb3RNdHIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy9taXNjL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL21pc2MvYnVpbGQucHJvcGVydGllcwppbmRleCBiYjYxNjZiLi5iMWExOTQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL21pc2MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL21pc2MvYnVpbGQucHJvcGVydGllcwpAQCAtMTQsNyArMTQsNyBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKICMKIAotIAorCiAKIHNyYy5kaXI9LgogbW9kdWxlLnB1Ymxpc2guaG9tZT0uLi8uLi8uLi8uLi8uLi8uLi8ke3B1Ymxpc2guaG9tZX0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL21vbml0b3Jpbmcvd2ViL1dlYk1vbml0b3JpbmcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL21vbml0b3Jpbmcvd2ViL1dlYk1vbml0b3JpbmcuamF2YQppbmRleCA4YmI4NzM1Li5lYTIyZmYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL3dlYi9XZWJNb25pdG9yaW5nLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy93ZWIvV2ViTW9uaXRvcmluZy5qYXZhCkBAIC01NCwxMyArNTQsMTMgQEAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgVlMgPSAiVklSVFVBTCBTRVJWRVIiOwogCiAgICAgcHVibGljIFdlYk1vbml0b3JpbmcoZmluYWwgU3RyaW5nIGhvc3QsIGZpbmFsIGludCBwb3J0LCBmaW5hbCBTdHJpbmcgc2VydmVyTmFtZSwKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBhZG1pblVzZXIsIGZpbmFsIFN0cmluZyBhZG1pblBhc3N3b3JkLCAKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBhZG1pblVzZXIsIGZpbmFsIFN0cmluZyBhZG1pblBhc3N3b3JkLAogICAgICAgICAgICAgZmluYWwgYm9vbGVhbiB1c2VUTFMpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyKGhvc3QsIHBvcnQsIGFkbWluVXNlcixhZG1pblBhc3N3b3JkLHVzZVRMUyk7CiAgICAgICAgIHRoaXMuc2VydmVyTmFtZSA9IHNlcnZlck5hbWU7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCAgdGVzdChmaW5hbCBTdHJpbmcgYXBwbGljYXRpb25OYW1lLCBmaW5hbCBTdHJpbmcgd2ViTW9kdWxlKSB7CiAgICAgICAgIGlmKGlzRW1iZWRkZWRXZWJNb2R1bGUoYXBwbGljYXRpb25OYW1lLCB3ZWJNb2R1bGUpKSB7CiAgICAgICAgICAgICB0ZXN0RW1iZWRkZWRXZWJNb2R1bGVzKGdldFdlYk1vZHVsZXMoYXBwbGljYXRpb25OYW1lKSk7CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgICAgICB0ZXN0U3RhbmRBbG9uZVdlYk1vZHVsZSh3ZWJNb2R1bGUpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAKICAgICAvKioKICAgICAgKgpAQCAtNzksOCArNzksOCBAQAogICAgICAgICAgICAgYXNzZXJ0KHdlYk1hcCAhPSBudWxsICYmIHdlYk1hcC5zaXplKCkgPiAwKSA6ICJGQUlMVVJFISI7CiAgICAgICAgICAgICB0ZXN0RW1iZWRkZWRXZWJNb2R1bGVzKHdlYk1hcCk7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKgogICAgICAqLwpAQCAtOTEsMTAgKzkxLDEwIEBACiAgICAgICAgIEl0ZXJhdG9yIGl0ciA9IHdlYk1vZHVsZXMudmFsdWVzKCkuaXRlcmF0b3IoKTsKICAgICAgICAgd2hpbGUoaXRyLmhhc05leHQoKSkgewogICAgICAgICAgICAgV2ViTW9kdWxlVmlydHVhbFNlcnZlck1vbml0b3Igd2ViTW9uaXRvciA9IChXZWJNb2R1bGVWaXJ0dWFsU2VydmVyTW9uaXRvcilpdHIubmV4dCgpOwotICAgICAgICAgICAgaWYgKCF3ZWJNb25pdG9yLmdldE5hbWUoKS5lcXVhbHMoIi8vX19hc2FkbWluL2FkbWluYXBwIikgCisgICAgICAgICAgICBpZiAoIXdlYk1vbml0b3IuZ2V0TmFtZSgpLmVxdWFscygiLy9fX2FzYWRtaW4vYWRtaW5hcHAiKQogICAgICAgICAgICAgICAgICAgICAmJiAhd2ViTW9uaXRvci5nZXROYW1lKCkuZXF1YWxzKCIvL19fYXNhZG1pbi9hZG1pbmd1aSIpCiAgICAgICAgICAgICAgICAgICAgICYmICF3ZWJNb25pdG9yLmdldE5hbWUoKS5lcXVhbHMoIi8vX19hc2FkbWluL2NvbV9zdW5fd2ViX3VpIikpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuU3RhdHMgZm9yIFdlYk1vZHVsZSBbIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5TdGF0cyBmb3IgV2ViTW9kdWxlIFsiICsKICAgICAgICAgICAgICAgICB3ZWJNb25pdG9yLmdldE5hbWUoKSArICJdIik7CiAgICAgICAgICAgICAgICAgdGVzdFdlYk1vZHVsZVNlcnZsZXRzKHdlYk1vbml0b3IuZ2V0U2VydmxldE1vbml0b3JNYXAoKSk7CiAgICAgICAgICAgICB9CkBAIC0xMTYsMTEgKzExNiwxMSBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIHwiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICB8Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgLS0tLSBTRVJWTEVUIFsiICsgc2x0TW9uaXRvci5nZXROYW1lKCkgKyAiXSIpOwotICAgICAgICAgICAgbGlzdFN0YXRzKHNsdE1vbml0b3IpOyAKKyAgICAgICAgICAgIGxpc3RTdGF0cyhzbHRNb25pdG9yKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICoKICAgICAgKi8KQEAgLTEyOCwyMSArMTI4LDIxIEBACiAgICAgICAgIHJldHVybiBnZXRBcHBsaWNhdGlvbk1vbml0b3Ioc2VydmVyTmFtZSwgYXBwbGljYXRpb25OYW1lKS4KICAgICAgICAgICAgIGdldFdlYk1vZHVsZVZpcnR1YWxTZXJ2ZXJNb25pdG9yTWFwKCk7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKgogICAgICAqLwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0VtYmVkZGVkV2ViTW9kdWxlKGZpbmFsIFN0cmluZyBhcHBsaWNhdGlvbk5hbWUsCiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgd2ViTW9kdWxlTmFtZSkgewotICAgICAgICBmaW5hbCBBcHBsaWNhdGlvbk1vbml0b3IgYXBwTXRyID0gCisgICAgICAgIGZpbmFsIEFwcGxpY2F0aW9uTW9uaXRvciBhcHBNdHIgPQogICAgICAgICAgICAgZ2V0QXBwbGljYXRpb25Nb25pdG9yKHNlcnZlck5hbWUsIGFwcGxpY2F0aW9uTmFtZSk7CiAgICAgICAgIGZpbmFsIE1hcCB3ZWJNZ3IgPSBhcHBNdHIuZ2V0V2ViTW9kdWxlVmlydHVhbFNlcnZlck1vbml0b3JNYXAoKTsKLSAgICAgICAgcmV0dXJuICh3ZWJNZ3IuZ2V0KHdlYk1vZHVsZU5hbWUpICE9IG51bGwgCisgICAgICAgIHJldHVybiAod2ViTWdyLmdldCh3ZWJNb2R1bGVOYW1lKSAhPSBudWxsCiAgICAgICAgICAgICB8fCAiIi5lcXVhbHMod2ViTWdyLmdldCh3ZWJNb2R1bGVOYW1lKSkpOwogICAgIH0KLSAgICAgCi0gICAgCisKKwogCiAgICAgLyoqCiAgICAgICoKQEAgLTE1NywxOCArMTU3LDE4IEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLmdldFByb3BlcnR5KCJBRE1JTl9VU0VSIiwgImFkbWluIiksCiAgICAgICAgICAgICAgICAgU3lzdGVtLmdldFByb3BlcnR5KCJBRE1JTl9QQVNTV09SRCIsICJhZG1pbmFkbWluIiksCiAgICAgICAgICAgICAgICAgQm9vbGVhbi5nZXRCb29sZWFuKFN5c3RlbS5nZXRQcm9wZXJ0eSgiVVNFX1RMUyIsICJmYWxzZSIpKSk7Ci0gICAgICAgICAKKwogICAgICAgICAgICAgV2ViTW9uaXRvcmluZy5wcmludEFyZ3MoYXJncyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYoYXJncy5sZW5ndGggPCAzKSB7CiAgICAgICAgICAgICAgICAgd2ViTXRyLnRlc3QobnVsbCxudWxsKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgd2ViTXRyLnRlc3QoYXJnc1sxXSwgYXJnc1syXSk7IAorICAgICAgICAgICAgICAgIHdlYk10ci50ZXN0KGFyZ3NbMV0sIGFyZ3NbMl0pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7CiAgICAgICAgICAgICBFeGNlcHRpb25VdGlsLmdldFJvb3RDYXVzZSggdCApLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL3dlYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy93ZWIvYnVpbGQucHJvcGVydGllcwppbmRleCAyZjBmMWVjLi44OTVjMDc4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL3dlYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL21vbml0b3Jpbmcvd2ViL2J1aWxkLnByb3BlcnRpZXMKQEAgLTM3LDcgKzM3LDcgQEAKIG1nbXQtYXBpLmphcj0ke21vZHVsZS5wdWJsaXNoLmhvbWV9L21hbmFnZW1lbnQtYXBpL2xpYi9tYW5hZ2VtZW50LWFwaS5qYXIKIAogIwotIyBUaGUgaW5zdGFuY2UgdGhhdCB0aGUgd2ViIG1vZHVsZSBvciBhcHBsaWNhdGlvbiBpcyBkZXBsb3llZCBvbi4gSWYgdGhpcyBpcyAKKyMgVGhlIGluc3RhbmNlIHRoYXQgdGhlIHdlYiBtb2R1bGUgb3IgYXBwbGljYXRpb24gaXMgZGVwbG95ZWQgb24uIElmIHRoaXMgaXMKICMgbnVsbCBvciAiIiB0aGVuIHRoZSBkZWZhdWx0IHNlcnZlciBpbnN0YW5jZSAic2VydmVyIiBpcyBhc3N1bWVkLgogIwogaW5zdGFuY2UubmFtZT1zZXJ2ZXIKQEAgLTQ5LDcgKzQ5LDcgQEAKIGFwcGxpY2F0aW9uLm5hbWU9c3RhdGVsZXNzLXNpbXBsZQogCiAjCi0jIFRoZSBlbWJlZGRlZCBvciBzdGFuZGFsb25lIHdlYiBtb2R1bGUuIAorIyBUaGUgZW1iZWRkZWQgb3Igc3RhbmRhbG9uZSB3ZWIgbW9kdWxlLgogIwogd2ViLm1vZHVsZS5uYW1lPXN0YXRlbGVzcy1zaW1wbGUud2FyCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL21vbml0b3Jpbmcvd2ViL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL21vbml0b3Jpbmcvd2ViL2J1aWxkLnhtbAppbmRleCA3NzZjZmQ1Li5iNzY0ZmUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL3dlYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvbW9uaXRvcmluZy93ZWIvYnVpbGQueG1sCkBAIC02MSw3ICs2MSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSIKICAgICAgICAgZGVzY3JpcHRpb249IkJ1aWxkIGVudGlyZSBjb21wb25lbnQiIC8+CiAKLSAgICA8IS0tIGNvbXBpbGUtY29tbW9uIC0tPiAgICAKKyAgICA8IS0tIGNvbXBpbGUtY29tbW9uIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1jb21tb24iIGRlcGVuZHM9ImluaXQiPgogICAgICAgICA8amF2YWMgIHNyY2Rpcj0iJHtzcmMuZGlyfS9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL2NvbW1vbiIKICAgICAgICAgICAgICAgICBkZXN0ZGlyPSIke2J1aWxkfSIKQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouamF2YSIvPgogICAgICAgICA8L2phdmFjPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAKKwogICAgIDwhLS0gY29tcGlsZSAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQsIGNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPGphdmFjICBzcmNkaXI9IiR7c3JjLmRpcn0vYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9tb25pdG9yaW5nL3dlYiIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL3NhbXBsZXMvY29tL3N1bi9hcHBzZXJ2L21hbmFnZW1lbnQvc2FtcGxlL0RlcGxveU5vdGlmaWNhdGlvbkxpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL2NvbS9zdW4vYXBwc2Vydi9tYW5hZ2VtZW50L3NhbXBsZS9EZXBsb3lOb3RpZmljYXRpb25MaXN0ZW5lci5qYXZhCmluZGV4IDY0NjRhOWEuLjBmMDQwMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL3NhbXBsZXMvY29tL3N1bi9hcHBzZXJ2L21hbmFnZW1lbnQvc2FtcGxlL0RlcGxveU5vdGlmaWNhdGlvbkxpc3RlbmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvc2FtcGxlcy9jb20vc3VuL2FwcHNlcnYvbWFuYWdlbWVudC9zYW1wbGUvRGVwbG95Tm90aWZpY2F0aW9uTGlzdGVuZXIuamF2YQpAQCAtMjIsOTYgKzIyLDk2IEBACiAKIAogLyoqCi0JQSBKTVggTm90aWZpY2F0aW9uTGlzdGVuZXIgZm9yIGRlcGxveW1lbnQuCisgICAgQSBKTVggTm90aWZpY2F0aW9uTGlzdGVuZXIgZm9yIGRlcGxveW1lbnQuCiAgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBEZXBsb3lOb3RpZmljYXRpb25MaXN0ZW5lcgotCQlpbXBsZW1lbnRzIE5vdGlmaWNhdGlvbkxpc3RlbmVyCisgICAgICAgIGltcGxlbWVudHMgTm90aWZpY2F0aW9uTGlzdGVuZXIKIHsKLQlwcml2YXRlIGZpbmFsIE9iamVjdAkJbURlcGxveUlEOwotCXByaXZhdGUgYm9vbGVhbgkJCQltSXNDb21wbGV0ZWQ7Ci0JcHJpdmF0ZSBEZXBsb3ltZW50U3RhdHVzCW1EZXBsb3ltZW50U3RhdHVzOwotCQotCQlwdWJsaWMKLQlEZXBsb3lOb3RpZmljYXRpb25MaXN0ZW5lciggZmluYWwgT2JqZWN0CWRlcGxveUlEICkKLQl7Ci0JCW1EZXBsb3lJRAkJPSBkZXBsb3lJRDsKLQkJbUlzQ29tcGxldGVkCT0gZmFsc2U7Ci0JfQotCQotCQlwdWJsaWMgYm9vbGVhbgotCWlzQ29tcGxldGVkKCkKLQl7Ci0JCXJldHVybiggbUlzQ29tcGxldGVkICk7Ci0JfQotCQotCQlwdWJsaWMgRGVwbG95bWVudFN0YXR1cwotCWdldERlcGxveW1lbnRTdGF0dXMoKQotCXsKLQkJcmV0dXJuKCBtRGVwbG95bWVudFN0YXR1cyApOwotCX0KLQkKLQkJcHVibGljIHN5bmNocm9uaXplZCB2b2lkCi0JaGFuZGxlTm90aWZpY2F0aW9uKAotCQlmaW5hbCBOb3RpZmljYXRpb24Jbm90aWYsIAotCQlmaW5hbCBPYmplY3QJCWhhbmRiYWNrKSAKLQl7Ci0JCXRyeQotCQl7Ci0JCQlyZWFsSGFuZGxlTm90aWZpY2F0aW9uKCBub3RpZiwgaGFuZGJhY2sgKTsKLQkJfQotCQljYXRjaCggRXhjZXB0aW9uIGUgKQotCQl7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCQotCS8qKgotCQlOb3RlIHRoYXQgTm90aWZpY2F0aW9ucyBhcmUgbm90IGd1YXJhbnRlZWQgdG8gYmUgZGVsaXZlcmVkIGluIG9yZGVyLgotCQlUaHVzLCBpdCBpcyB0aGVvcmV0aWNhbGx5IHBvc3NpYmxlIGZvciBhIERFUExPWU1FTlRfQ09NUExFVEVEX05PVElGSUNBVElPTl9UWVBFCi0JCXRvIGJlIHJlY2VpdmVkIGJlZm9yZSBhIERFUExPWU1FTlRfU1RBUlRFRF9OT1RJRklDQVRJT05fVFlQRS4KLQkgKi8KLQkJcHVibGljIHZvaWQKLQlyZWFsSGFuZGxlTm90aWZpY2F0aW9uKAotCQlmaW5hbCBOb3RpZmljYXRpb24Jbm90aWYsIAotCQlmaW5hbCBPYmplY3QJCWhhbmRiYWNrKSAKLQl7Ci0JCWZpbmFsIFN0cmluZwl0eXBlCT0gbm90aWYuZ2V0VHlwZSgpOwotCQlmaW5hbCBNYXAJCW0JPSAoTWFwKW5vdGlmLmdldFVzZXJEYXRhKCk7Ci0JCWZpbmFsIE9iamVjdAlkZXBsb3lJRAk9IG0uZ2V0KCBEZXBsb3ltZW50TWdyLk5PVElGX0RFUExPWU1FTlRfSURfS0VZICk7Ci0JCQotCQlpZiAoIGRlcGxveUlELmVxdWFscyggbURlcGxveUlEICkgKQotCQl7Ci0JCQlpZiAoIHR5cGUuZXF1YWxzKCBEZXBsb3ltZW50TWdyLkRFUExPWU1FTlRfU1RBUlRFRF9OT1RJRklDQVRJT05fVFlQRSApICkKLQkJCXsKLQkJCQlTYW1wbGVVdGlsLnByaW50bG4oICJEZXBsb3ltZW50IHN0YXJ0ZWQgZm9yICIgKyBkZXBsb3lJRCk7Ci0JCQl9Ci0JCQllbHNlIGlmICggdHlwZS5lcXVhbHMoIERlcGxveW1lbnRNZ3IuREVQTE9ZTUVOVF9DT01QTEVURURfTk9USUZJQ0FUSU9OX1RZUEUgKSApCi0JCQl7Ci0JCQkJZmluYWwgTWFwCXN0YXR1c0RhdGEJPSAoTWFwKQotCQkJCQltLmdldCggRGVwbG95bWVudE1nci5OT1RJRl9ERVBMT1lNRU5UX0NPTVBMRVRFRF9TVEFUVVNfS0VZICk7Ci0JCQkJCi0JCQkJZmluYWwgRGVwbG95bWVudFN0YXR1cwlzdGF0dXMJPSAKLQkJCQkJRGVwbG95bWVudFN1cHBvcnQubWFwVG9EZXBsb3ltZW50U3RhdHVzKCBzdGF0dXNEYXRhICk7Ci0JCQkJCi0JCQkJU2FtcGxlVXRpbC5wcmludGxuKCAiRGVwbG95bWVudCBjb21wbGV0ZWQgZm9yICIgKyBkZXBsb3lJRCArICIgd2l0aCBzdGF0dXM6ICIgKyAKLQkJCQkJc3RhdHVzLmdldFN0YWdlU3RhdHVzKCkgKTsKLQkJCQkKLQkJCQltSXNDb21wbGV0ZWQJPSB0cnVlOwotCQkJCW1EZXBsb3ltZW50U3RhdHVzCT0gc3RhdHVzOwotCQkJfQotCQkJZWxzZSBpZiAoIHR5cGUuZXF1YWxzKCBEZXBsb3ltZW50TWdyLkRFUExPWU1FTlRfUFJPR1JFU1NfTk9USUZJQ0FUSU9OX1RZUEUgKSApCi0JCQl7Ci0JCQkJZmluYWwgTWFwCXByb2dyZXNzRGF0YQk9IChNYXApCi0JCQkJCW0uZ2V0KCBEZXBsb3ltZW50TWdyLk5PVElGX0RFUExPWU1FTlRfUFJPR1JFU1NfS0VZICk7Ci0JCQkJCi0JCQkJZmluYWwgRGVwbG95bWVudFByb2dyZXNzCXByb2dyZXNzCT0gCi0JCQkJCURlcGxveW1lbnRTdXBwb3J0Lm1hcFRvRGVwbG95bWVudFByb2dyZXNzKCBwcm9ncmVzc0RhdGEgKTsKLQkJCQkJCi0JCQkJU2FtcGxlVXRpbC5wcmludGxuKCAiRGVwbG95bWVudCBwcm9ncmVzcyBmb3IgIiArIGRlcGxveUlEICsgIiA9ICIgKyAKLQkJCQkJcHJvZ3Jlc3MuZ2V0UHJvZ3Jlc3NQZXJjZW50KCkgKyAiJSIgKTsKLQkJCX0KLQkJfQotCX0KKyAgICBwcml2YXRlIGZpbmFsIE9iamVjdCAgICAgICAgbURlcGxveUlEOworICAgIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgICAgICBtSXNDb21wbGV0ZWQ7CisgICAgcHJpdmF0ZSBEZXBsb3ltZW50U3RhdHVzICAgIG1EZXBsb3ltZW50U3RhdHVzOworCisgICAgICAgIHB1YmxpYworICAgIERlcGxveU5vdGlmaWNhdGlvbkxpc3RlbmVyKCBmaW5hbCBPYmplY3QgICAgZGVwbG95SUQgKQorICAgIHsKKyAgICAgICAgbURlcGxveUlEICAgICAgICA9IGRlcGxveUlEOworICAgICAgICBtSXNDb21wbGV0ZWQgICAgPSBmYWxzZTsKKyAgICB9CisKKyAgICAgICAgcHVibGljIGJvb2xlYW4KKyAgICBpc0NvbXBsZXRlZCgpCisgICAgeworICAgICAgICByZXR1cm4oIG1Jc0NvbXBsZXRlZCApOworICAgIH0KKworICAgICAgICBwdWJsaWMgRGVwbG95bWVudFN0YXR1cworICAgIGdldERlcGxveW1lbnRTdGF0dXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBtRGVwbG95bWVudFN0YXR1cyApOworICAgIH0KKworICAgICAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQKKyAgICBoYW5kbGVOb3RpZmljYXRpb24oCisgICAgICAgIGZpbmFsIE5vdGlmaWNhdGlvbiAgICBub3RpZiwKKyAgICAgICAgZmluYWwgT2JqZWN0ICAgICAgICBoYW5kYmFjaykKKyAgICB7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICByZWFsSGFuZGxlTm90aWZpY2F0aW9uKCBub3RpZiwgaGFuZGJhY2sgKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCggRXhjZXB0aW9uIGUgKQorICAgICAgICB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICAgIE5vdGUgdGhhdCBOb3RpZmljYXRpb25zIGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSBkZWxpdmVyZWQgaW4gb3JkZXIuCisgICAgICAgIFRodXMsIGl0IGlzIHRoZW9yZXRpY2FsbHkgcG9zc2libGUgZm9yIGEgREVQTE9ZTUVOVF9DT01QTEVURURfTk9USUZJQ0FUSU9OX1RZUEUKKyAgICAgICAgdG8gYmUgcmVjZWl2ZWQgYmVmb3JlIGEgREVQTE9ZTUVOVF9TVEFSVEVEX05PVElGSUNBVElPTl9UWVBFLgorICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZAorICAgIHJlYWxIYW5kbGVOb3RpZmljYXRpb24oCisgICAgICAgIGZpbmFsIE5vdGlmaWNhdGlvbiAgICBub3RpZiwKKyAgICAgICAgZmluYWwgT2JqZWN0ICAgICAgICBoYW5kYmFjaykKKyAgICB7CisgICAgICAgIGZpbmFsIFN0cmluZyAgICB0eXBlICAgID0gbm90aWYuZ2V0VHlwZSgpOworICAgICAgICBmaW5hbCBNYXAgICAgICAgIG0gICAgPSAoTWFwKW5vdGlmLmdldFVzZXJEYXRhKCk7CisgICAgICAgIGZpbmFsIE9iamVjdCAgICBkZXBsb3lJRCAgICA9IG0uZ2V0KCBEZXBsb3ltZW50TWdyLk5PVElGX0RFUExPWU1FTlRfSURfS0VZICk7CisKKyAgICAgICAgaWYgKCBkZXBsb3lJRC5lcXVhbHMoIG1EZXBsb3lJRCApICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCB0eXBlLmVxdWFscyggRGVwbG95bWVudE1nci5ERVBMT1lNRU5UX1NUQVJURURfTk9USUZJQ0FUSU9OX1RZUEUgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU2FtcGxlVXRpbC5wcmludGxuKCAiRGVwbG95bWVudCBzdGFydGVkIGZvciAiICsgZGVwbG95SUQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIHR5cGUuZXF1YWxzKCBEZXBsb3ltZW50TWdyLkRFUExPWU1FTlRfQ09NUExFVEVEX05PVElGSUNBVElPTl9UWVBFICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZpbmFsIE1hcCAgICBzdGF0dXNEYXRhICAgID0gKE1hcCkKKyAgICAgICAgICAgICAgICAgICAgbS5nZXQoIERlcGxveW1lbnRNZ3IuTk9USUZfREVQTE9ZTUVOVF9DT01QTEVURURfU1RBVFVTX0tFWSApOworCisgICAgICAgICAgICAgICAgZmluYWwgRGVwbG95bWVudFN0YXR1cyAgICBzdGF0dXMgICAgPQorICAgICAgICAgICAgICAgICAgICBEZXBsb3ltZW50U3VwcG9ydC5tYXBUb0RlcGxveW1lbnRTdGF0dXMoIHN0YXR1c0RhdGEgKTsKKworICAgICAgICAgICAgICAgIFNhbXBsZVV0aWwucHJpbnRsbiggIkRlcGxveW1lbnQgY29tcGxldGVkIGZvciAiICsgZGVwbG95SUQgKyAiIHdpdGggc3RhdHVzOiAiICsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmdldFN0YWdlU3RhdHVzKCkgKTsKKworICAgICAgICAgICAgICAgIG1Jc0NvbXBsZXRlZCAgICA9IHRydWU7CisgICAgICAgICAgICAgICAgbURlcGxveW1lbnRTdGF0dXMgICAgPSBzdGF0dXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICggdHlwZS5lcXVhbHMoIERlcGxveW1lbnRNZ3IuREVQTE9ZTUVOVF9QUk9HUkVTU19OT1RJRklDQVRJT05fVFlQRSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBNYXAgICAgcHJvZ3Jlc3NEYXRhICAgID0gKE1hcCkKKyAgICAgICAgICAgICAgICAgICAgbS5nZXQoIERlcGxveW1lbnRNZ3IuTk9USUZfREVQTE9ZTUVOVF9QUk9HUkVTU19LRVkgKTsKKworICAgICAgICAgICAgICAgIGZpbmFsIERlcGxveW1lbnRQcm9ncmVzcyAgICBwcm9ncmVzcyAgICA9CisgICAgICAgICAgICAgICAgICAgIERlcGxveW1lbnRTdXBwb3J0Lm1hcFRvRGVwbG95bWVudFByb2dyZXNzKCBwcm9ncmVzc0RhdGEgKTsKKworICAgICAgICAgICAgICAgIFNhbXBsZVV0aWwucHJpbnRsbiggIkRlcGxveW1lbnQgcHJvZ3Jlc3MgZm9yICIgKyBkZXBsb3lJRCArICIgPSAiICsKKyAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MuZ2V0UHJvZ3Jlc3NQZXJjZW50KCkgKyAiJSIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIH0KLQkKLQkKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL2NvbS9zdW4vYXBwc2Vydi9tYW5hZ2VtZW50L3NhbXBsZS9MaW5lUmVhZGVySW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvc2FtcGxlcy9jb20vc3VuL2FwcHNlcnYvbWFuYWdlbWVudC9zYW1wbGUvTGluZVJlYWRlckltcGwuamF2YQppbmRleCBjOTE3M2Y2Li4wMjEwNWYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL2NvbS9zdW4vYXBwc2Vydi9tYW5hZ2VtZW50L3NhbXBsZS9MaW5lUmVhZGVySW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL3NhbXBsZXMvY29tL3N1bi9hcHBzZXJ2L21hbmFnZW1lbnQvc2FtcGxlL0xpbmVSZWFkZXJJbXBsLmphdmEKQEAgLTEzLDcgKzEzLDcgQEAKICAqICRSZXZpc2lvbjogMS4xICQKICAqICREYXRlOiAyMDA0LzEwLzEyIDIyOjQ5OjEwICQKICAqLwotIAorCiBwYWNrYWdlIGNvbS5zdW4uYXBwc2Vydi5tYW5hZ2VtZW50LnNhbXBsZTsKIAogCkBAIC0yMSw1MiArMjEsNTIgQEAKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwogCiAvKioKLQlSZWFkcyBhIGxpbmUgZnJvbSB0aGUgc3BlY2lmaWVkIGlucHV0IHN0cmVhbSwgb3V0cHV0cwotCXRoZSBwcm9tcHQgdG8gU3lzdGVtLm91dC4KKyAgICBSZWFkcyBhIGxpbmUgZnJvbSB0aGUgc3BlY2lmaWVkIGlucHV0IHN0cmVhbSwgb3V0cHV0cworICAgIHRoZSBwcm9tcHQgdG8gU3lzdGVtLm91dC4KICAqLwogcHVibGljIGNsYXNzIExpbmVSZWFkZXJJbXBsCiB7Ci0JZmluYWwgSW5wdXRTdHJlYW1SZWFkZXIJbUlucHV0U3RyZWFtUmVhZGVyOwotCQotCQlwdWJsaWMgCi0JTGluZVJlYWRlckltcGwoIElucHV0U3RyZWFtIGlucHV0U3RyZWFtICkKLQl7Ci0JCW1JbnB1dFN0cmVhbVJlYWRlcgk9IG5ldyBJbnB1dFN0cmVhbVJlYWRlciggaW5wdXRTdHJlYW0gKTsKLQl9CisgICAgZmluYWwgSW5wdXRTdHJlYW1SZWFkZXIgICAgbUlucHV0U3RyZWFtUmVhZGVyOwogCi0JCXB1YmxpYyBTdHJpbmcKLQlyZWFkTGluZSggU3RyaW5nIHByb21wdCApCi0JCXRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uCi0JewotCQlmaW5hbCBTdHJpbmdCdWZmZXIJbGluZQk9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCi0JCWlmICggcHJvbXB0ICE9IG51bGwgKQotCQl7Ci0JCQlTeXN0ZW0ub3V0LnByaW50KCBwcm9tcHQgKTsKLQkJfQotCQkKLQkJd2hpbGUgKCB0cnVlICkKLQkJewotCQkJZmluYWwgaW50CXZhbHVlCT0gbUlucHV0U3RyZWFtUmVhZGVyLnJlYWQoKTsKLQkJCWlmICggdmFsdWUgPCAwICkKLQkJCXsKLQkJCQlpZiAoIGxpbmUubGVuZ3RoKCkgIT0gMCApCi0JCQkJewotCQkJCQkvLyByZWFkIGEgbGluZSBidXQgc2F3IEVPRiBiZWZvcmUgYSBuZXdsaW5lCi0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlyZXR1cm4oIG51bGwgKTsKLQkJCX0KLQkJCQotCQkJZmluYWwgY2hhcgl0aGVDaGFyCT0gKGNoYXIpdmFsdWU7Ci0JCQlpZiAoIHRoZUNoYXIgPT0gJ1xuJyApCi0JCQkJYnJlYWs7Ci0JCQkKLQkJCWxpbmUuYXBwZW5kKCB0aGVDaGFyICk7Ci0JCX0KLQkJCi0JCXJldHVybiggbGluZS50b1N0cmluZygpLnRyaW0oKSApOwotCX0KKyAgICAgICAgcHVibGljCisgICAgTGluZVJlYWRlckltcGwoIElucHV0U3RyZWFtIGlucHV0U3RyZWFtICkKKyAgICB7CisgICAgICAgIG1JbnB1dFN0cmVhbVJlYWRlciAgICA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlciggaW5wdXRTdHJlYW0gKTsKKyAgICB9CisKKyAgICAgICAgcHVibGljIFN0cmluZworICAgIHJlYWRMaW5lKCBTdHJpbmcgcHJvbXB0ICkKKyAgICAgICAgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24KKyAgICB7CisgICAgICAgIGZpbmFsIFN0cmluZ0J1ZmZlciAgICBsaW5lICAgID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCisgICAgICAgIGlmICggcHJvbXB0ICE9IG51bGwgKQorICAgICAgICB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCBwcm9tcHQgKTsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlICggdHJ1ZSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpbmFsIGludCAgICB2YWx1ZSAgICA9IG1JbnB1dFN0cmVhbVJlYWRlci5yZWFkKCk7CisgICAgICAgICAgICBpZiAoIHZhbHVlIDwgMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCBsaW5lLmxlbmd0aCgpICE9IDAgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVhZCBhIGxpbmUgYnV0IHNhdyBFT0YgYmVmb3JlIGEgbmV3bGluZQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuKCBudWxsICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZpbmFsIGNoYXIgICAgdGhlQ2hhciAgICA9IChjaGFyKXZhbHVlOworICAgICAgICAgICAgaWYgKCB0aGVDaGFyID09ICdcbicgKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBsaW5lLmFwcGVuZCggdGhlQ2hhciApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuKCBsaW5lLnRvU3RyaW5nKCkudHJpbSgpICk7CisgICAgfQogfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL3NhbXBsZXMvY29tL3N1bi9hcHBzZXJ2L21hbmFnZW1lbnQvc2FtcGxlL1NhbXBsZUhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL2NvbS9zdW4vYXBwc2Vydi9tYW5hZ2VtZW50L3NhbXBsZS9TYW1wbGVIYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lci5qYXZhCmluZGV4IDk0MDJhMDguLmM1MjJlNWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL3NhbXBsZXMvY29tL3N1bi9hcHBzZXJ2L21hbmFnZW1lbnQvc2FtcGxlL1NhbXBsZUhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvc2FtcGxlcy9jb20vc3VuL2FwcHNlcnYvbWFuYWdlbWVudC9zYW1wbGUvU2FtcGxlSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXIuamF2YQpAQCAtMTYsMjkgKzE2LDI5IEBACiAKIAogLyoqCi0JRGVtb25zdHJhdGVzIGhvdyB0byB3cml0ZSBhIEhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyLiBOb3RlIHRoYXQgdXN1YWxseQotCWl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gd3JpdGUgeW91ciBvd24gSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXIgc2luY2UgdGhlCi0JZXZlbnQgaXMgYXZhaWxhYmxlIGZyb20ge0BsaW5rIEhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVySW1wbCNnZXRMYXN0RXZlbnR9LgotCTxwPgotCVlvdSBtYXkgd2lzaCB0byB3cml0ZSBhIEhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyIGlmIHRoZSBkYXRhIGNvbnRhaW5lZAotCWluIHRoZSBIYW5kc2hha2VDb21wbGV0ZWRFdmVudCBpcyBvZiBpbnRlcmVzdCBvciB5b3Ugd2lzaCB0byBleGVydCBtb3JlCi0JY29udHJvbCBvdmVyIHRoZSBUTFMgY29ubmVjdGlvbi4KKyAgICBEZW1vbnN0cmF0ZXMgaG93IHRvIHdyaXRlIGEgSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXIuIE5vdGUgdGhhdCB1c3VhbGx5CisgICAgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byB3cml0ZSB5b3VyIG93biBIYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lciBzaW5jZSB0aGUKKyAgICBldmVudCBpcyBhdmFpbGFibGUgZnJvbSB7QGxpbmsgSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXJJbXBsI2dldExhc3RFdmVudH0uCisgICAgPHA+CisgICAgWW91IG1heSB3aXNoIHRvIHdyaXRlIGEgSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXIgaWYgdGhlIGRhdGEgY29udGFpbmVkCisgICAgaW4gdGhlIEhhbmRzaGFrZUNvbXBsZXRlZEV2ZW50IGlzIG9mIGludGVyZXN0IG9yIHlvdSB3aXNoIHRvIGV4ZXJ0IG1vcmUKKyAgICBjb250cm9sIG92ZXIgdGhlIFRMUyBjb25uZWN0aW9uLgogICovCiBwdWJsaWMgZmluYWwgY2xhc3MgU2FtcGxlSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXIKLQlleHRlbmRzIEhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVySW1wbAorICAgIGV4dGVuZHMgSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXJJbXBsCiB7Ci0JCXB1YmxpYwotCVNhbXBsZUhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyKCkKLQl7Ci0JfQotCQotCQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQKLQloYW5kc2hha2VDb21wbGV0ZWQoIGZpbmFsIEhhbmRzaGFrZUNvbXBsZXRlZEV2ZW50IGV2ZW50KSAKLQl7Ci0JCXN1cGVyLmhhbmRzaGFrZUNvbXBsZXRlZCggZXZlbnQgKTsKLQkJCi0JCVN5c3RlbS5vdXQucHJpbnRsbiggIkhhbmRzaGFrZUNvbXBsZXRlZDpcbiIgKyBldmVudCArICJcbiIgKTsKLQl9CisgICAgICAgIHB1YmxpYworICAgIFNhbXBsZUhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyKCkKKyAgICB7CisgICAgfQorCisgICAgICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZAorICAgIGhhbmRzaGFrZUNvbXBsZXRlZCggZmluYWwgSGFuZHNoYWtlQ29tcGxldGVkRXZlbnQgZXZlbnQpCisgICAgeworICAgICAgICBzdXBlci5oYW5kc2hha2VDb21wbGV0ZWQoIGV2ZW50ICk7CisKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiSGFuZHNoYWtlQ29tcGxldGVkOlxuIiArIGV2ZW50ICsgIlxuIiApOworICAgIH0KIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL2NvbS9zdW4vYXBwc2Vydi9tYW5hZ2VtZW50L3NhbXBsZS9TYW1wbGVMaXN0ZW5lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvc2FtcGxlcy9jb20vc3VuL2FwcHNlcnYvbWFuYWdlbWVudC9zYW1wbGUvU2FtcGxlTGlzdGVuZXIuamF2YQppbmRleCA2NWNhOTRmLi45ZWE1NTJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL2NvbS9zdW4vYXBwc2Vydi9tYW5hZ2VtZW50L3NhbXBsZS9TYW1wbGVMaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL3NhbXBsZXMvY29tL3N1bi9hcHBzZXJ2L21hbmFnZW1lbnQvc2FtcGxlL1NhbXBsZUxpc3RlbmVyLmphdmEKQEAgLTIxLDEwMyArMjEsMTAzIEBACiBpbXBvcnQgamF2YXgubWFuYWdlbWVudC5NQmVhblNlcnZlck5vdGlmaWNhdGlvbjsKIAogLyoqCi0JRGlzcGxheXMgYW55IHtAbGluayBqYXZheC5tYW5hZ2VtZW50Lk5vdGlmaWNhdGlvbn0gcmVjZWl2ZWQuCi0JPHA+Ci0JTm90ZSB0aGF0IG1vc3Qge0BsaW5rIGNvbS5zdW4uYXBwc2Vydi5tYW5hZ2VtZW50LmJhc2UuQU1YfSBOb3RpZmljYXRpb25zIGluY2x1ZGUgYSBNYXAgaW4gdGhlCi0JdXNlckRhdGEgZmllbGQgb2YgdGhlIE5vdGlmaWNhdGlvbi4KLQkKLQlAc2VlIGNvbS5zdW4uYXBwc2Vydi5tYW5hZ2VtZW50LmJhc2UuQU1YCisgICAgRGlzcGxheXMgYW55IHtAbGluayBqYXZheC5tYW5hZ2VtZW50Lk5vdGlmaWNhdGlvbn0gcmVjZWl2ZWQuCisgICAgPHA+CisgICAgTm90ZSB0aGF0IG1vc3Qge0BsaW5rIGNvbS5zdW4uYXBwc2Vydi5tYW5hZ2VtZW50LmJhc2UuQU1YfSBOb3RpZmljYXRpb25zIGluY2x1ZGUgYSBNYXAgaW4gdGhlCisgICAgdXNlckRhdGEgZmllbGQgb2YgdGhlIE5vdGlmaWNhdGlvbi4KKworICAgIEBzZWUgY29tLnN1bi5hcHBzZXJ2Lm1hbmFnZW1lbnQuYmFzZS5BTVgKICAqLwogcHVibGljIGZpbmFsIGNsYXNzIFNhbXBsZUxpc3RlbmVyIGltcGxlbWVudHMgTm90aWZpY2F0aW9uTGlzdGVuZXIKIHsKLQlwcml2YXRlIE1hcAltTm90aWZzOwotCQotCQlwdWJsaWMKLQlTYW1wbGVMaXN0ZW5lcigpCi0JewotCQltTm90aWZzCT0gbnVsbDsKLQkJY2xlYXJOb3RpZnMoKTsKLQl9Ci0JCi0JLyoqCi0JCUtlZXAgYSBNYXAsIGtleWVkIGJ5IE5vdGlmaWNhdGlvbiB0eXBlLCBvZiBhbGwgTm90aWZpY2F0aW9ucyByZWNlaXZlZC4KLQkgKi8KLQkJcHJpdmF0ZSBzeW5jaHJvbml6ZWQgdm9pZAotCWFkZE5vdGlmKCBmaW5hbCBOb3RpZmljYXRpb24Jbm90aWYgKQotCXsKLQkJZmluYWwgU3RyaW5nCXR5cGUJPSBub3RpZi5nZXRUeXBlKCk7Ci0JCQotCQlMaXN0CWxpc3QJPSBudWxsOwotCQkKLQkJaWYgKCAhIG1Ob3RpZnMua2V5U2V0KCkuY29udGFpbnMoIHR5cGUgKSApCi0JCXsKLQkJCWNsZWFyTm90aWZzKCB0eXBlICk7Ci0JCX0KLQkJCi0JCWxpc3QJPSAoTGlzdCltTm90aWZzLmdldCggdHlwZSApOwotCQkKLQkJbGlzdC5hZGQoIG5vdGlmICk7Ci0JfQotCQotCS8qKgotCQlSZXR1cm4gYSBNYXAsIGtleWVkIGJ5IE5vdGlmaWNhdGlvbiB0eXBlLCBvZiBhbGwgTm90aWZpY2F0aW9ucyByZWNlaXZlZCBzbyBmYXIuCi0JICovCi0JCXB1YmxpYyBNYXAKLQlnZXROb3RpZnNSZWNlaXZlZCgpCi0JewotCQlyZXR1cm4oIG1Ob3RpZnMgKTsKLQl9Ci0JCi0JCXB1YmxpYyBMaXN0Ci0JZ2V0Tm90aWZzUmVjZWl2ZWQoIGZpbmFsIFN0cmluZyB0eXBlICkKLQl7Ci0JCXJldHVybiggKExpc3QpbU5vdGlmcy5nZXQoIHR5cGUgKSApOwotCX0KLQkKLQkvKioKLQkJQ2xlYXIgdGhlIGhpc3Rvcnkgb2YgTm90aWZpY2F0aW9ucyByZWNlaXZlZC4KLQkgKi8KLQkJcHVibGljIHN5bmNocm9uaXplZCBNYXAKLQljbGVhck5vdGlmcygpCi0JewotCQlmaW5hbCBNYXAJZXhpc3RpbmcJPSBnZXROb3RpZnNSZWNlaXZlZCgpOwotCQkKLQkJbU5vdGlmcwk9IENvbGxlY3Rpb25zLnN5bmNocm9uaXplZE1hcCggbmV3IEhhc2hNYXAoKSApOwotCQkKLQkJcmV0dXJuKCBleGlzdGluZyApOwotCX0KLQkKLQkJcHVibGljIHN5bmNocm9uaXplZCBMaXN0Ci0JY2xlYXJOb3RpZnMoIGZpbmFsIFN0cmluZyB0eXBlICkKLQl7Ci0JCWZpbmFsIE1hcAlleGlzdGluZwk9IGdldE5vdGlmc1JlY2VpdmVkKCk7Ci0JCQotCQlmaW5hbCBMaXN0IG5ld0xpc3QJPSBDb2xsZWN0aW9ucy5zeW5jaHJvbml6ZWRMaXN0KCBuZXcgQXJyYXlMaXN0KCkgKTsKLQkJCi0JCWZpbmFsIExpc3QJZXhpc3RpbmdMaXN0CT0gKExpc3QpZXhpc3RpbmcuZ2V0KCB0eXBlICk7Ci0JCQotCQltTm90aWZzLnB1dCggdHlwZSwgbmV3TGlzdCApOwotCQkKLQkJcmV0dXJuKCBleGlzdGluZ0xpc3QgKTsKLQl9Ci0JCi0JLyoqCi0JCVRoZSBOb3RpZmljYXRpb24gaXMgZGVsaXZlcmVkIGhlcmUuCi0JICovCi0JCXB1YmxpYyB2b2lkCi0JaGFuZGxlTm90aWZpY2F0aW9uKAotCQlmaW5hbCBOb3RpZmljYXRpb24Jbm90aWYsIAotCQlmaW5hbCBPYmplY3QJCWhhbmRiYWNrKSAKLQl7Ci0JCWZpbmFsIFN0cmluZwl0eXBlCQk9IG5vdGlmLmdldFR5cGUoKTsKLQkJZmluYWwgT2JqZWN0CXVzZXJEYXRhCT0gbm90aWYuZ2V0VXNlckRhdGEoKTsKLQkJCi0JCWFkZE5vdGlmKCBub3RpZiApOwotCQkKLQkJU2FtcGxlVXRpbC5wcmludGxuKCAiU2FtcGxlTGlzdGVuZXI6IHJlY2VpdmVkOiAiICsgU2FtcGxlVXRpbC50b1N0cmluZyggbm90aWYgKSApOwotCQlTYW1wbGVVdGlsLnByaW50bG4oICIiICk7Ci0JfQotCQotCQotCQorICAgIHByaXZhdGUgTWFwICAgIG1Ob3RpZnM7CisKKyAgICAgICAgcHVibGljCisgICAgU2FtcGxlTGlzdGVuZXIoKQorICAgIHsKKyAgICAgICAgbU5vdGlmcyAgICA9IG51bGw7CisgICAgICAgIGNsZWFyTm90aWZzKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICAgIEtlZXAgYSBNYXAsIGtleWVkIGJ5IE5vdGlmaWNhdGlvbiB0eXBlLCBvZiBhbGwgTm90aWZpY2F0aW9ucyByZWNlaXZlZC4KKyAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBzeW5jaHJvbml6ZWQgdm9pZAorICAgIGFkZE5vdGlmKCBmaW5hbCBOb3RpZmljYXRpb24gICAgbm90aWYgKQorICAgIHsKKyAgICAgICAgZmluYWwgU3RyaW5nICAgIHR5cGUgICAgPSBub3RpZi5nZXRUeXBlKCk7CisKKyAgICAgICAgTGlzdCAgICBsaXN0ICAgID0gbnVsbDsKKworICAgICAgICBpZiAoICEgbU5vdGlmcy5rZXlTZXQoKS5jb250YWlucyggdHlwZSApICkKKyAgICAgICAgeworICAgICAgICAgICAgY2xlYXJOb3RpZnMoIHR5cGUgKTsKKyAgICAgICAgfQorCisgICAgICAgIGxpc3QgICAgPSAoTGlzdCltTm90aWZzLmdldCggdHlwZSApOworCisgICAgICAgIGxpc3QuYWRkKCBub3RpZiApOworICAgIH0KKworICAgIC8qKgorICAgICAgICBSZXR1cm4gYSBNYXAsIGtleWVkIGJ5IE5vdGlmaWNhdGlvbiB0eXBlLCBvZiBhbGwgTm90aWZpY2F0aW9ucyByZWNlaXZlZCBzbyBmYXIuCisgICAgICovCisgICAgICAgIHB1YmxpYyBNYXAKKyAgICBnZXROb3RpZnNSZWNlaXZlZCgpCisgICAgeworICAgICAgICByZXR1cm4oIG1Ob3RpZnMgKTsKKyAgICB9CisKKyAgICAgICAgcHVibGljIExpc3QKKyAgICBnZXROb3RpZnNSZWNlaXZlZCggZmluYWwgU3RyaW5nIHR5cGUgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCAoTGlzdCltTm90aWZzLmdldCggdHlwZSApICk7CisgICAgfQorCisgICAgLyoqCisgICAgICAgIENsZWFyIHRoZSBoaXN0b3J5IG9mIE5vdGlmaWNhdGlvbnMgcmVjZWl2ZWQuCisgICAgICovCisgICAgICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgTWFwCisgICAgY2xlYXJOb3RpZnMoKQorICAgIHsKKyAgICAgICAgZmluYWwgTWFwICAgIGV4aXN0aW5nICAgID0gZ2V0Tm90aWZzUmVjZWl2ZWQoKTsKKworICAgICAgICBtTm90aWZzICAgID0gQ29sbGVjdGlvbnMuc3luY2hyb25pemVkTWFwKCBuZXcgSGFzaE1hcCgpICk7CisKKyAgICAgICAgcmV0dXJuKCBleGlzdGluZyApOworICAgIH0KKworICAgICAgICBwdWJsaWMgc3luY2hyb25pemVkIExpc3QKKyAgICBjbGVhck5vdGlmcyggZmluYWwgU3RyaW5nIHR5cGUgKQorICAgIHsKKyAgICAgICAgZmluYWwgTWFwICAgIGV4aXN0aW5nICAgID0gZ2V0Tm90aWZzUmVjZWl2ZWQoKTsKKworICAgICAgICBmaW5hbCBMaXN0IG5ld0xpc3QgICAgPSBDb2xsZWN0aW9ucy5zeW5jaHJvbml6ZWRMaXN0KCBuZXcgQXJyYXlMaXN0KCkgKTsKKworICAgICAgICBmaW5hbCBMaXN0ICAgIGV4aXN0aW5nTGlzdCAgICA9IChMaXN0KWV4aXN0aW5nLmdldCggdHlwZSApOworCisgICAgICAgIG1Ob3RpZnMucHV0KCB0eXBlLCBuZXdMaXN0ICk7CisKKyAgICAgICAgcmV0dXJuKCBleGlzdGluZ0xpc3QgKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgICAgVGhlIE5vdGlmaWNhdGlvbiBpcyBkZWxpdmVyZWQgaGVyZS4KKyAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQKKyAgICBoYW5kbGVOb3RpZmljYXRpb24oCisgICAgICAgIGZpbmFsIE5vdGlmaWNhdGlvbiAgICBub3RpZiwKKyAgICAgICAgZmluYWwgT2JqZWN0ICAgICAgICBoYW5kYmFjaykKKyAgICB7CisgICAgICAgIGZpbmFsIFN0cmluZyAgICB0eXBlICAgICAgICA9IG5vdGlmLmdldFR5cGUoKTsKKyAgICAgICAgZmluYWwgT2JqZWN0ICAgIHVzZXJEYXRhICAgID0gbm90aWYuZ2V0VXNlckRhdGEoKTsKKworICAgICAgICBhZGROb3RpZiggbm90aWYgKTsKKworICAgICAgICBTYW1wbGVVdGlsLnByaW50bG4oICJTYW1wbGVMaXN0ZW5lcjogcmVjZWl2ZWQ6ICIgKyBTYW1wbGVVdGlsLnRvU3RyaW5nKCBub3RpZiApICk7CisgICAgICAgIFNhbXBsZVV0aWwucHJpbnRsbiggIiIgKTsKKyAgICB9CisKKworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL2NvbS9zdW4vYXBwc2Vydi9tYW5hZ2VtZW50L3NhbXBsZS9TYW1wbGVNYWluLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL2NvbS9zdW4vYXBwc2Vydi9tYW5hZ2VtZW50L3NhbXBsZS9TYW1wbGVNYWluLmphdmEKaW5kZXggNzVhOGM1Yi4uN2ExNGNlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvc2FtcGxlcy9jb20vc3VuL2FwcHNlcnYvbWFuYWdlbWVudC9zYW1wbGUvU2FtcGxlTWFpbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL3NhbXBsZXMvY29tL3N1bi9hcHBzZXJ2L21hbmFnZW1lbnQvc2FtcGxlL1NhbXBsZU1haW4uamF2YQpAQCAtMzAsMzc0ICszMCwzNzQgQEAKIGltcG9ydCBjb20uc3VuLmFwcHNlcnYubWFuYWdlbWVudC5jbGllbnQuSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXJJbXBsOwogCiAvKioKLQlNYWluIGNsYXNzIGRlbW9uc3RyYXRpbmcgYSB2YXJpZXR5IG9mIE1CZWFuIEFQSSAoQU1YKSB1c2FnZXMuCi0JRW50ZXJzIGFuIGludGVyYWN0aXZlIGxvb3AgaW4gd2hpY2ggdGhlIHVzZXIgY2FuIHJ1biB2YXJpb3VzIGNvbW1hbmRzLgorICAgIE1haW4gY2xhc3MgZGVtb25zdHJhdGluZyBhIHZhcmlldHkgb2YgTUJlYW4gQVBJIChBTVgpIHVzYWdlcy4KKyAgICBFbnRlcnMgYW4gaW50ZXJhY3RpdmUgbG9vcCBpbiB3aGljaCB0aGUgdXNlciBjYW4gcnVuIHZhcmlvdXMgY29tbWFuZHMuCiAgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBTYW1wbGVNYWluCiB7Ci0JcHJpdmF0ZSBmaW5hbCBEb21haW5Sb290CQkJCW1Eb21haW5Sb290OwotCXByaXZhdGUgSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXJJbXBsCW1IYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lcjsKLQkKLQkJcHVibGljIHN0YXRpYyB2b2lkCi0JbWFpbiggZmluYWwgU3RyaW5nW10gYXJncyApCi0JewotCQlpZiAoIGFyZ3MubGVuZ3RoID4gMSApCi0JCXsKLQkJCVNhbXBsZVV0aWwucHJpbnRsbiggIlNwZWNpZnkgYSBwcm9wZXJ0aWVzIGZpbGUgb3Igbm90aGluZy4iICk7Ci0JCQlTeXN0ZW0uZXhpdCggMjU1ICk7Ci0JCX0KLQkJCi0JCXRyeQotCQl7Ci0JCQluZXcgU2FtcGxlTWFpbiggYXJncy5sZW5ndGggPT0gMSA/IGFyZ3NbIDAgXSA6ICJTYW1wbGVNYWluLnByb3BlcnRpZXMiICk7Ci0JCX0KLQkJY2F0Y2goIFRocm93YWJsZSB0ICkKLQkJewotCQkJU2FtcGxlVXRpbC5nZXRSb290Q2F1c2UoIHQgKS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQkKLQkKLQlmaW5hbCBTdHJpbmcJUVVJVAkJCT0gInF1aXQiOwotCWZpbmFsIFN0cmluZwlMSVNUCQkJPSAibGlzdCI7Ci0JZmluYWwgU3RyaW5nCURFUExPWQkJCT0gImRlcGxveSI7Ci0JZmluYWwgU3RyaW5nCVVOREVQTE9ZCQk9ICJ1bmRlcGxveSI7Ci0JZmluYWwgU3RyaW5nCVFVRVJZCQkJPSAicXVlcnkiOwotCWZpbmFsIFN0cmluZwlTSE9XX0hJRVJBUkNIWQk9ICJzaG93LWhpZXJhcmNoeSI7Ci0JZmluYWwgU3RyaW5nCVNUQVJUX1NFUlZFUgk9ICJzdGFydC1zZXJ2ZXIiOwotCWZpbmFsIFN0cmluZwlTVE9QX1NFUlZFUgkJPSAic3RvcC1zZXJ2ZXIiOwotCWZpbmFsIFN0cmluZwlMSVNUX0FUVFJJQlVURVMJPSAibGlzdC1hdHRyaWJ1dGVzIjsKLQlmaW5hbCBTdHJpbmcJTElTVF9ET1RURURfTkFNRVMJPSAibGlzdC1kb3R0ZWQtbmFtZXMiOwotCWZpbmFsIFN0cmluZwlMSVNUX1BST1BFUlRJRVMJPSAibGlzdC1wcm9wZXJ0aWVzIjsKLQlmaW5hbCBTdHJpbmcJU0VUX01PTklUT1JJTkcJPSAic2V0LW1vbml0b3JpbmciOwotCWZpbmFsIFN0cmluZwlERU1PX0pNWF9NT05JVE9SCT0gImRlbW8tam14LW1vbml0b3IiOwotCWZpbmFsIFN0cmluZwlSVU5fQUxMCQkJPSAicnVuLWFsbCI7Ci0JCi0JZmluYWwgU3RyaW5nW10JTUVOVV9DSE9JQ0VTCT0gbmV3IFN0cmluZ1tdCi0JewotCQlERU1PX0pNWF9NT05JVE9SLCBERVBMT1ksIExJU1RfQVRUUklCVVRFUywgTElTVCwgTElTVF9ET1RURURfTkFNRVMsIExJU1RfUFJPUEVSVElFUywgUVVFUlksIFFVSVQsIFJVTl9BTEwsCi0JCVNUQVJUX1NFUlZFUiwgU1RPUF9TRVJWRVIsCi0JCVNIT1dfSElFUkFSQ0hZLCBTRVRfTU9OSVRPUklORywgVU5ERVBMT1kKLQl9OwotCQotCWZpbmFsIFN0cmluZyBNRU5VCT0gU2FtcGxlVXRpbC5hcnJheVRvU3RyaW5nKCBNRU5VX0NIT0lDRVMsICIgICIsICJcbiIpOwotCWZpbmFsIFN0cmluZyBQUk9NUFQJPSAiQ29tbWFuZHM6XG4iICsgTUVOVSArICJcbkVudGVyIGNvbW1hbmQ+ICI7Ci0JCi0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgSWxsZWdhbFVzYWdlRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uCi0JewotCQlJbGxlZ2FsVXNhZ2VFeGNlcHRpb24oKQl7fQotCX0KLQkgCi0JCXByaXZhdGUgdm9pZAotCXJlcXVpcmUoCi0JCWZpbmFsIGJvb2xlYW4JdGVzdCwKLQkJZmluYWwgU3RyaW5nCW1zZyApCi0JCXRocm93cyBJbGxlZ2FsVXNhZ2VFeGNlcHRpb24KLQl7Ci0JCWlmICggISB0ZXN0ICkKLQkJewotCQkJU2FtcGxlVXRpbC5wcmludGxuKCBtc2cgKTsKLQkJCXRocm93IG5ldyBJbGxlZ2FsVXNhZ2VFeGNlcHRpb24oKTsKLQkJfQotCX0KLQkKLQkJcHJpdmF0ZSB2b2lkCi0JaGFuZGxlQ2hvaWNlKAotCQlmaW5hbCBTYW1wbGVzCXNhbXBsZXMsCi0JCWZpbmFsIFN0cmluZwlsaW5lICkKLQkJdGhyb3dzIElPRXhjZXB0aW9uLCBJbGxlZ2FsVXNhZ2VFeGNlcHRpb24sIEluc3RhbmNlTm90Rm91bmRFeGNlcHRpb24KLQl7Ci0JCWZpbmFsIFN0cmluZ1tdCXBhcnRzCT0gbGluZS5zcGxpdCggIlsgXHRdKyIgKTsKLQkJZmluYWwgaW50CQludW1BcmdzCT0gcGFydHMubGVuZ3RoIC0gMTsKLQkJZmluYWwgU3RyaW5nCWNtZAk9IHBhcnRzWyAwIF07Ci0JCQotCQlpZiAoIGNtZC5sZW5ndGgoKSAhPSAwICkKLQkJewotCQkJU2FtcGxlVXRpbC5wcmludGxuKCAiY21kOiAiICsgU2FtcGxlVXRpbC50b1N0cmluZyggcGFydHMgKSApOwotCQl9Ci0JCQotCQlpZiAoIGNtZC5lcXVhbHMoIFFVSVQgKSB8fCBjbWQuZXF1YWxzKCAicSIgKSApCi0JCXsKLQkJCXJlcXVpcmUoIG51bUFyZ3MgPT0gMCwgIlVzYWdlOiAiICsgUVVJVCApOwotCQkJU3lzdGVtLmV4aXQoIDAgKTsKLQkJfQotCQllbHNlIGlmICggY21kLmxlbmd0aCgpID09IDAgKQotCQl7Ci0JCQkvLyBkbyBub3RoaW5nCi0JCX0KLQkJZWxzZSBpZiAoIGNtZC5lcXVhbHMoIERFUExPWSApICkKLQkJewotCQkJcmVxdWlyZSggbnVtQXJncyA+PSAxLCAiVXNhZ2U6ICIgKyBERVBMT1kgKyAiIDxhcmNoaXZlLW5hbWU+IiApOwotCQkJZm9yKCBpbnQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGg7ICsraSApCi0JCQl7Ci0JCQkJc2FtcGxlcy5kZXBsb3koIG5ldyBGaWxlKCBwYXJ0c1sgaSBdICkgKTsKLQkJCX0KLQkJfQotCQllbHNlIGlmICggY21kLmVxdWFscyggVU5ERVBMT1kgKSApCi0JCXsKLQkJCXJlcXVpcmUoIG51bUFyZ3MgPj0gMSwgIlVzYWdlOiAiICsgVU5ERVBMT1kgKyAiIFs8bmFtZT5bIDxuYW1lPl0qXSIgKTsKLQkJCWZvciggaW50IGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoOyArK2kgKQotCQkJewotCQkJCXNhbXBsZXMudW5kZXBsb3koIHBhcnRzWyBpIF0gKTsKLQkJCX0KLQkJfQotCQllbHNlIGlmICggY21kLmVxdWFscyggU1RBUlRfU0VSVkVSICkgKQotCQl7Ci0JCQlyZXF1aXJlKCBudW1BcmdzID09IDEsICJVc2FnZTogIiArIFNUQVJUX1NFUlZFUiArICIgPHNlcnZlci1uYW1lPiIgKTsKLQkJCXNhbXBsZXMuc3RhcnRTZXJ2ZXIoIHBhcnRzWyAxIF0gKTsKLQkJfQotCQllbHNlIGlmICggY21kLmVxdWFscyggU1RPUF9TRVJWRVIgKSApCi0JCXsKLQkJCXJlcXVpcmUoIG51bUFyZ3MgPT0gMSwgIlVzYWdlOiAiICsgU1RPUF9TRVJWRVIgKyAiIDxzZXJ2ZXItbmFtZT4iICk7Ci0JCQlzYW1wbGVzLnN0b3BTZXJ2ZXIoIHBhcnRzWyAxIF0gKTsKLQkJfQotCQllbHNlIGlmICggY21kLmVxdWFscyggTElTVCApICkKLQkJewotCQkJcmVxdWlyZSggbnVtQXJncyA9PSAwLCAiVXNhZ2U6ICIgKyBMSVNUICk7Ci0JCQlzYW1wbGVzLmhhbmRsZUxpc3QoKTsKLQkJfQotCQllbHNlIGlmICggY21kLmVxdWFscyggU0hPV19ISUVSQVJDSFkgKSApCi0JCXsKLQkJCWlmICggbnVtQXJncyA9PSAwICkKLQkJCXsKLQkJCQlzYW1wbGVzLmRpc3BsYXlIaWVyYXJjaHkoKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlmb3IoIGludCBpID0gMTsgaSA8IHBhcnRzLmxlbmd0aDsgKytpICkKLQkJCQl7Ci0JCQkJCXNhbXBsZXMuZGlzcGxheUhpZXJhcmNoeSggcGFydHNbIGkgXSApOwotCQkJCX0KLQkJCX0KLQkJfQotCQllbHNlIGlmICggY21kLmVxdWFscyggUVVFUlkpICkKLQkJewotCQkJcmVxdWlyZSggbnVtQXJncyA9PSAwLCAiVXNhZ2U6ICIgKyBRVUVSWSApOwotCQkJCi0JCQlzYW1wbGVzLmRlbW9RdWVyeSgpOwotCQl9Ci0JCWVsc2UgaWYgKCBjbWQuZXF1YWxzKCBMSVNUX0FUVFJJQlVURVMgKSApCi0JCXsKLQkJCWlmICggbnVtQXJncyA9PSAwICkKLQkJCXsKLQkJCQlzYW1wbGVzLmRpc3BsYXlBbGxBdHRyaWJ1dGVzKCBnZXREb21haW5Sb290KCkgKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlmb3IoIGludCBpID0gMTsgaSA8IHBhcnRzLmxlbmd0aDsgKytpICkKLQkJCQl7Ci0JCQkJCXNhbXBsZXMuZGlzcGxheUFsbEF0dHJpYnV0ZXMoIHBhcnRzWyBpIF0gKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAoIGNtZC5lcXVhbHMoIExJU1RfRE9UVEVEX05BTUVTICkgKQotCQl7Ci0JCQlyZXF1aXJlKCBudW1BcmdzID09IDAsICJVc2FnZTogIiArIExJU1RfRE9UVEVEX05BTUVTICk7Ci0JCQlzYW1wbGVzLmRpc3BsYXlEb3R0ZWROYW1lcyggKTsKLQkJfQotCQllbHNlIGlmICggY21kLmVxdWFscyggTElTVF9QUk9QRVJUSUVTICkgKQotCQl7Ci0JCQlyZXF1aXJlKCBudW1BcmdzID09IDAsICJVc2FnZTogIiArIExJU1RfUFJPUEVSVElFUyApOwotCQkJc2FtcGxlcy5kaXNwbGF5QWxsUHJvcGVydGllcyggKTsKLQkJfQotCQllbHNlIGlmICggY21kLmVxdWFscyggUlVOX0FMTCApICkKLQkJewotCQkJcmVxdWlyZSggbnVtQXJncyA9PSAwLCAiVXNhZ2U6ICIgKyBSVU5fQUxMICk7Ci0JCQkKLQkJCWZvciggaW50IGkgPSAwOyBpIDwgTUVOVV9DSE9JQ0VTLmxlbmd0aDsgKytpICkKLQkJCXsKLQkJCQlmaW5hbCBTdHJpbmcJY2hvaWNlCT0gTUVOVV9DSE9JQ0VTWyBpIF07Ci0JCQkJCi0JCQkJaWYgKCAhICggY2hvaWNlLmVxdWFscyggUVVJVCApIHx8IGNob2ljZS5lcXVhbHMoIFJVTl9BTEwgKSApICkKLQkJCQl7Ci0JCQkJCWhhbmRsZUNob2ljZSggc2FtcGxlcywgY2hvaWNlICk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWVsc2UgaWYgKCBjbWQuZXF1YWxzKCBERU1PX0pNWF9NT05JVE9SICkgKQotCQl7Ci0JCQlzYW1wbGVzLmRlbW9KTVhNb25pdG9yKCk7Ci0JCX0KLQkJZWxzZSBpZiAoIGNtZC5lcXVhbHMoIFNFVF9NT05JVE9SSU5HICkgKQotCQl7Ci0JCQlyZXF1aXJlKCBudW1BcmdzID09IDIsICJVc2FnZTogIiArIFNFVF9NT05JVE9SSU5HICsgIiA8Y29uZmlnLW5hbWU+IEhJR0h8TE9XfE9GRiIgKTsKLQkJCQotCQkJc2FtcGxlcy5zZXRNb25pdG9yaW5nKCBwYXJ0c1sgMSBdLCBwYXJ0c1sgMiBdKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCVNhbXBsZVV0aWwucHJpbnRsbiggIlVua25vd24gY29tbWFuZDogIiArIGxpbmUgKTsKLQkJfQotCX0KLQkKLQkJcHJpdmF0ZSB2b2lkCi0JZGVtbygpCi0JCXRocm93cyBJT0V4Y2VwdGlvbgotCXsKLQkJZmluYWwgTGluZVJlYWRlckltcGwJaW4JPSBuZXcgTGluZVJlYWRlckltcGwoIFN5c3RlbS5pbiApOwotCQkKLQkJZmluYWwgU2FtcGxlcwlzYW1wbGVzCT0gbmV3IFNhbXBsZXMoIGdldERvbWFpblJvb3QoKSApOwotCQl3aGlsZSAoIHRydWUgKQotCQl7Ci0JCQlmaW5hbCBTdHJpbmcJbGluZQk9IGluLnJlYWRMaW5lKCAiXG4iICsgUFJPTVBUICk7Ci0JCQl0cnkKLQkJCXsKLQkJCQloYW5kbGVDaG9pY2UoIHNhbXBsZXMsIGxpbmUudHJpbSgpICk7Ci0JCQl9Ci0JCQljYXRjaCggSWxsZWdhbFVzYWdlRXhjZXB0aW9uIGUgKQotCQkJewotCQkJfQotCQkJY2F0Y2goIEV4Y2VwdGlvbiBlICkKLQkJCXsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JfQotCQotCQlwcml2YXRlIGZpbmFsIERvbWFpblJvb3QKLQlnZXREb21haW5Sb290KCkKLQl7Ci0JCXJldHVybiggbURvbWFpblJvb3QgKTsKLQl9Ci0JCi0JCi0JCi0JCi0JCXByaXZhdGUgVExTUGFyYW1zCi0JY3JlYXRlVExTUGFyYW1zKAotCQlmaW5hbCBTdHJpbmcJdHJ1c3RTdG9yZSwKLQkJZmluYWwgU3RyaW5nCXBhc3N3b3JkICkKLQl7Ci0JCWZpbmFsIEZpbGUgdHJ1c3RTdG9yZUZpbGUJPSBuZXcgRmlsZSggdHJ1c3RTdG9yZSApOwotCQlmaW5hbCBjaGFyW10gdHJ1c3RTdG9yZVBhc3N3b3JkCT0gcGFzc3dvcmQudG9DaGFyQXJyYXkoKTsKLQkJCQkJCi0JCW1IYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lcgk9IG5ldyBIYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lckltcGwoKTsKLQkJZmluYWwgVHJ1c3RTdG9yZVRydXN0TWFuYWdlciB0cnVzdE1nciA9Ci0JCQluZXcgVHJ1c3RTdG9yZVRydXN0TWFuYWdlciggdHJ1c3RTdG9yZUZpbGUsIHRydXN0U3RvcmVQYXNzd29yZCk7Ci0JCXRydXN0TWdyLnNldFByb21wdCggdHJ1ZSApOworICAgIHByaXZhdGUgZmluYWwgRG9tYWluUm9vdCAgICAgICAgICAgICAgICBtRG9tYWluUm9vdDsKKyAgICBwcml2YXRlIEhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVySW1wbCAgICBtSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXI7CiAKLQkJZmluYWwgVExTUGFyYW1zCXRsc1BhcmFtcyA9IG5ldyBUTFNQYXJhbXMoIHRydXN0TWdyLCBtSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXIgKTsKKyAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkCisgICAgbWFpbiggZmluYWwgU3RyaW5nW10gYXJncyApCisgICAgeworICAgICAgICBpZiAoIGFyZ3MubGVuZ3RoID4gMSApCisgICAgICAgIHsKKyAgICAgICAgICAgIFNhbXBsZVV0aWwucHJpbnRsbiggIlNwZWNpZnkgYSBwcm9wZXJ0aWVzIGZpbGUgb3Igbm90aGluZy4iICk7CisgICAgICAgICAgICBTeXN0ZW0uZXhpdCggMjU1ICk7CisgICAgICAgIH0KIAotCQlyZXR1cm4oIHRsc1BhcmFtcyApOwotCX0KLQkKLQkvKioKLQkJUmVhZCBjb25uZWN0IHByb3BlcnRpZXMgZnJvbSBhIGZpbGUuCi0JICovCi0JCXByaXZhdGUgZmluYWwgUHJvcGVydGllcwotCWdldENvbm5lY3RQcm9wZXJ0aWVzKCBmaW5hbCBTdHJpbmcgZmlsZSApCi0JCXRocm93cyBJT0V4Y2VwdGlvbgotCXsKLQkJZmluYWwgUHJvcGVydGllcwlwcm9wcwk9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JCQotCQlpZiAoIGZpbGUgIT0gbnVsbCApCi0JCXsKLQkJCVNhbXBsZVV0aWwucHJpbnRsbiggIlJlYWRpbmcgcHJvcGVydGllcyBmcm9tOiAiICsgU2FtcGxlVXRpbC5xdW90ZSggZmlsZSApICk7Ci0JCQlmaW5hbCBGaWxlCWYJPSBuZXcgRmlsZSggZmlsZSApOwotCQkJCi0JCQlpZiAoIGYuZXhpc3RzKCkgKQotCQkJewotCQkJCWZpbmFsIEZpbGVJbnB1dFN0cmVhbQlpcwk9IG5ldyBGaWxlSW5wdXRTdHJlYW0oIGYgKTsKLQkJCQl0cnkKLQkJCQl7Ci0JCQkJCXByb3BzLmxvYWQoIGlzICk7Ci0JCQkJfQotCQkJCWZpbmFsbHkKLQkJCQl7Ci0JCQkJCWlzLmNsb3NlKCk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCVNhbXBsZVV0aWwucHJpbnRsbigiRmlsZSBcIiIgKyBmaWxlICsgIiBkb2VzIG5vdCBleGlzdCwgdXNpbmcgZGVmYXVsdHMuIiApOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4oIHByb3BzICk7Ci0JfQotCQotCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZwlERUZBVUxUX1RSVVNUX1NUT1JFX0ZJTEUJCT0gIn4vLmtleXN0b3JlIjsKLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcJREVGQVVMVF9UUlVTVF9TVE9SRV9QQVNTV09SRAk9ICJjaGFuZ2VtZSI7Ci0JCi0JLyoqCi0JCUBwYXJhbSBob3N0CWhvc3RuYW1lIG9yIElQIGFkZHJlc3Mgb2YgRG9tYWluIEFkbWluIFNlcnZlcgotCQlAcGFyYW0gcG9ydAlSTUkgYWRtaW5pc3RyYXRpdmUgcG9ydAotCQlAcGFyYW0gdXNlcglhZG1pbiB1c2VyCi0JCUBwYXJhbSBwYXNzd29yZCBhZG1pbiB1c2VyIHBhc3N3b3JkCi0JCUBwYXJhbSB0bHNQYXJhbXMgVExTIHBhcmFtZXRlcnMsIG1heSBiZSBudWxsCi0JCUByZXR1cm4gQXBwc2VydmVyQ29ubmVjdGlvblNvdXJjZQotCSAqLwotCQlwdWJsaWMgc3RhdGljIEFwcHNlcnZlckNvbm5lY3Rpb25Tb3VyY2UKLQljb25uZWN0KAotCQlmaW5hbCBTdHJpbmcJaG9zdCwKLQkJZmluYWwgaW50CQlwb3J0LAotCQlmaW5hbCBTdHJpbmcJdXNlciwKLQkJZmluYWwgU3RyaW5nCXBhc3N3b3JkLAotCQlmaW5hbCBUTFNQYXJhbXMJdGxzUGFyYW1zICkKLQkJdGhyb3dzIElPRXhjZXB0aW9uCi0JewotCQlmaW5hbCBTdHJpbmcgaW5mbyA9ICJob3N0PSIgKyBob3N0ICsgIiwgcG9ydD0iICsgcG9ydCArCi0JCQkiLCB1c2VyPSIgKyB1c2VyICsgIiwgcGFzc3dvcmQ9IiArIHBhc3N3b3JkICsKLQkJCSIsIHRscz0iICsgKHRsc1BhcmFtcyAhPSBudWxsKTsKLQkJCQotCQlTYW1wbGVVdGlsLnByaW50bG4oICJDb25uZWN0aW5nLi4uOiIgKyBpbmZvICk7Ci0JCQotCQlmaW5hbCBBcHBzZXJ2ZXJDb25uZWN0aW9uU291cmNlIGNvbm4JPQotCQkJbmV3IEFwcHNlcnZlckNvbm5lY3Rpb25Tb3VyY2UoIEFwcHNlcnZlckNvbm5lY3Rpb25Tb3VyY2UuUFJPVE9DT0xfUk1JLAotCQkJCWhvc3QsIHBvcnQsIHVzZXIsIHBhc3N3b3JkLCB0bHNQYXJhbXMsIG51bGwpOwotCQkKLQkJLy8gZm9yY2UgdGhlIGNvbm5lY3Rpb24gbm93Ci0JCWNvbm4uZ2V0Sk1YQ29ubmVjdG9yKCBmYWxzZSApOworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAgICAgbmV3IFNhbXBsZU1haW4oIGFyZ3MubGVuZ3RoID09IDEgPyBhcmdzWyAwIF0gOiAiU2FtcGxlTWFpbi5wcm9wZXJ0aWVzIiApOworICAgICAgICB9CisgICAgICAgIGNhdGNoKCBUaHJvd2FibGUgdCApCisgICAgICAgIHsKKyAgICAgICAgICAgIFNhbXBsZVV0aWwuZ2V0Um9vdENhdXNlKCB0ICkucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9CiAKLQkJU2FtcGxlVXRpbC5wcmludGxuKCAiQ29ubmVjdGVkOiAiICsgaW5mbyApOwotCQkKLQkJcmV0dXJuKCBjb25uICk7Ci0JfQotCQotCQotCS8qKgotCSAqLwotCQlwdWJsaWMKLQlTYW1wbGVNYWluKCBmaW5hbCBTdHJpbmcgb3B0aW9uYWxQcm9wZXJ0aWVzRmlsZSApCi0JCXRocm93cyBJT0V4Y2VwdGlvbgotCXsKLQkJZmluYWwgUHJvcGVydGllcwlwcm9wcwk9IGdldENvbm5lY3RQcm9wZXJ0aWVzKCBvcHRpb25hbFByb3BlcnRpZXNGaWxlICk7Ci0JCQotCQlmaW5hbCBTdHJpbmcJaG9zdAk9IHByb3BzLmdldFByb3BlcnR5KCAiY29ubmVjdC5ob3N0IiwgImxvY2FsaG9zdCIgKTsKLQkJZmluYWwgaW50CQlwb3J0CT0gSW50ZWdlci5wYXJzZUludCggcHJvcHMuZ2V0UHJvcGVydHkoICJjb25uZWN0LnBvcnQiLCAiODY4NiIgKSApOwotCQlmaW5hbCBTdHJpbmcJdXNlcgk9IHByb3BzLmdldFByb3BlcnR5KCAiY29ubmVjdC51c2VyIiwgImFkbWluIiApOwotCQlmaW5hbCBTdHJpbmcJcGFzc3dvcmQJPSBwcm9wcy5nZXRQcm9wZXJ0eSggImNvbm5lY3QucGFzc3dvcmQiLCAiYWRtaW4xMjMiICk7Ci0JCWZpbmFsIFN0cmluZwl0cnVzdFN0b3JlCT0gcHJvcHMuZ2V0UHJvcGVydHkoICJjb25uZWN0LnRydXN0c3RvcmUiLCBERUZBVUxUX1RSVVNUX1NUT1JFX0ZJTEUpOwotCQlmaW5hbCBTdHJpbmcJdHJ1c3RTdG9yZVBhc3N3b3JkCT0KLQkJCQlwcm9wcy5nZXRQcm9wZXJ0eSggImNvbm5lY3QudHJ1c3RzdG9yZVBhc3N3b3JkIiwgREVGQVVMVF9UUlVTVF9TVE9SRV9QQVNTV09SRCk7Ci0JCWZpbmFsIGJvb2xlYW4JdXNlVExTCT0gCi0JCQlCb29sZWFuLnZhbHVlT2YoIHByb3BzLmdldFByb3BlcnR5KCAiY29ubmVjdC51c2VUTFMiLCAiZmFsc2UiICkgKS5ib29sZWFuVmFsdWUoKTsKLQkJCi0JCWZpbmFsIFRMU1BhcmFtcwl0bHNQYXJhbXMJPSB1c2VUTFMgPwotCQkJY3JlYXRlVExTUGFyYW1zKCB0cnVzdFN0b3JlLCB0cnVzdFN0b3JlUGFzc3dvcmQpIDogbnVsbDsKLQkJCi0JCWZpbmFsIEFwcHNlcnZlckNvbm5lY3Rpb25Tb3VyY2UJY29ubiAJPSBjb25uZWN0KCBob3N0LCBwb3J0LCB1c2VyLCBwYXNzd29yZCwgdGxzUGFyYW1zICk7Ci0JCQotCQlpZiAoIG1IYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lciAhPSBudWxsICkKLQkJewotCQkJU2FtcGxlVXRpbC5wcmludGxuKCAiSGFuZHNoYWtlQ29tcGxldGVkRXZlbnQ6ICIgKwotCQkJCVNhbXBsZVV0aWwudG9TdHJpbmcoIG1IYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lci5nZXRMYXN0RXZlbnQoKSApICk7Ci0JCX0KLQkJCi0JCW1Eb21haW5Sb290CT0gY29ubi5nZXREb21haW5Sb290KCk7CiAKLQkJCi0JCXRyeQotCQl7Ci0JCQlkZW1vKCApOwotCQl9Ci0JCWZpbmFsbHkKLQkJewotCQkJLy8gY2xvc2UgdGhlIGNvbm5lY3Rpb24gKG5vdCBuZWNlc3NhcnksIGJ1dCBoZXJlIGZvciBhcyBhbiBleGFtcGxlKQotCQkJY29ubi5nZXRKTVhDb25uZWN0b3IoIGZhbHNlICkuY2xvc2UoKTsKLQkJfQotCX0KKyAgICBmaW5hbCBTdHJpbmcgICAgUVVJVCAgICAgICAgICAgID0gInF1aXQiOworICAgIGZpbmFsIFN0cmluZyAgICBMSVNUICAgICAgICAgICAgPSAibGlzdCI7CisgICAgZmluYWwgU3RyaW5nICAgIERFUExPWSAgICAgICAgICAgID0gImRlcGxveSI7CisgICAgZmluYWwgU3RyaW5nICAgIFVOREVQTE9ZICAgICAgICA9ICJ1bmRlcGxveSI7CisgICAgZmluYWwgU3RyaW5nICAgIFFVRVJZICAgICAgICAgICAgPSAicXVlcnkiOworICAgIGZpbmFsIFN0cmluZyAgICBTSE9XX0hJRVJBUkNIWSAgICA9ICJzaG93LWhpZXJhcmNoeSI7CisgICAgZmluYWwgU3RyaW5nICAgIFNUQVJUX1NFUlZFUiAgICA9ICJzdGFydC1zZXJ2ZXIiOworICAgIGZpbmFsIFN0cmluZyAgICBTVE9QX1NFUlZFUiAgICAgICAgPSAic3RvcC1zZXJ2ZXIiOworICAgIGZpbmFsIFN0cmluZyAgICBMSVNUX0FUVFJJQlVURVMgICAgPSAibGlzdC1hdHRyaWJ1dGVzIjsKKyAgICBmaW5hbCBTdHJpbmcgICAgTElTVF9ET1RURURfTkFNRVMgICAgPSAibGlzdC1kb3R0ZWQtbmFtZXMiOworICAgIGZpbmFsIFN0cmluZyAgICBMSVNUX1BST1BFUlRJRVMgICAgPSAibGlzdC1wcm9wZXJ0aWVzIjsKKyAgICBmaW5hbCBTdHJpbmcgICAgU0VUX01PTklUT1JJTkcgICAgPSAic2V0LW1vbml0b3JpbmciOworICAgIGZpbmFsIFN0cmluZyAgICBERU1PX0pNWF9NT05JVE9SICAgID0gImRlbW8tam14LW1vbml0b3IiOworICAgIGZpbmFsIFN0cmluZyAgICBSVU5fQUxMICAgICAgICAgICAgPSAicnVuLWFsbCI7CisKKyAgICBmaW5hbCBTdHJpbmdbXSAgICBNRU5VX0NIT0lDRVMgICAgPSBuZXcgU3RyaW5nW10KKyAgICB7CisgICAgICAgIERFTU9fSk1YX01PTklUT1IsIERFUExPWSwgTElTVF9BVFRSSUJVVEVTLCBMSVNULCBMSVNUX0RPVFRFRF9OQU1FUywgTElTVF9QUk9QRVJUSUVTLCBRVUVSWSwgUVVJVCwgUlVOX0FMTCwKKyAgICAgICAgU1RBUlRfU0VSVkVSLCBTVE9QX1NFUlZFUiwKKyAgICAgICAgU0hPV19ISUVSQVJDSFksIFNFVF9NT05JVE9SSU5HLCBVTkRFUExPWQorICAgIH07CisKKyAgICBmaW5hbCBTdHJpbmcgTUVOVSAgICA9IFNhbXBsZVV0aWwuYXJyYXlUb1N0cmluZyggTUVOVV9DSE9JQ0VTLCAiICAiLCAiXG4iKTsKKyAgICBmaW5hbCBTdHJpbmcgUFJPTVBUICAgID0gIkNvbW1hbmRzOlxuIiArIE1FTlUgKyAiXG5FbnRlciBjb21tYW5kPiAiOworCisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBJbGxlZ2FsVXNhZ2VFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KKyAgICB7CisgICAgICAgIElsbGVnYWxVc2FnZUV4Y2VwdGlvbigpICAgIHt9CisgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZAorICAgIHJlcXVpcmUoCisgICAgICAgIGZpbmFsIGJvb2xlYW4gICAgdGVzdCwKKyAgICAgICAgZmluYWwgU3RyaW5nICAgIG1zZyApCisgICAgICAgIHRocm93cyBJbGxlZ2FsVXNhZ2VFeGNlcHRpb24KKyAgICB7CisgICAgICAgIGlmICggISB0ZXN0ICkKKyAgICAgICAgeworICAgICAgICAgICAgU2FtcGxlVXRpbC5wcmludGxuKCBtc2cgKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsVXNhZ2VFeGNlcHRpb24oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQKKyAgICBoYW5kbGVDaG9pY2UoCisgICAgICAgIGZpbmFsIFNhbXBsZXMgICAgc2FtcGxlcywKKyAgICAgICAgZmluYWwgU3RyaW5nICAgIGxpbmUgKQorICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIElsbGVnYWxVc2FnZUV4Y2VwdGlvbiwgSW5zdGFuY2VOb3RGb3VuZEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgZmluYWwgU3RyaW5nW10gICAgcGFydHMgICAgPSBsaW5lLnNwbGl0KCAiWyBcdF0rIiApOworICAgICAgICBmaW5hbCBpbnQgICAgICAgIG51bUFyZ3MgICAgPSBwYXJ0cy5sZW5ndGggLSAxOworICAgICAgICBmaW5hbCBTdHJpbmcgICAgY21kICAgID0gcGFydHNbIDAgXTsKKworICAgICAgICBpZiAoIGNtZC5sZW5ndGgoKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgU2FtcGxlVXRpbC5wcmludGxuKCAiY21kOiAiICsgU2FtcGxlVXRpbC50b1N0cmluZyggcGFydHMgKSApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBjbWQuZXF1YWxzKCBRVUlUICkgfHwgY21kLmVxdWFscyggInEiICkgKQorICAgICAgICB7CisgICAgICAgICAgICByZXF1aXJlKCBudW1BcmdzID09IDAsICJVc2FnZTogIiArIFFVSVQgKTsKKyAgICAgICAgICAgIFN5c3RlbS5leGl0KCAwICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIGNtZC5sZW5ndGgoKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZG8gbm90aGluZworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCBjbWQuZXF1YWxzKCBERVBMT1kgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlcXVpcmUoIG51bUFyZ3MgPj0gMSwgIlVzYWdlOiAiICsgREVQTE9ZICsgIiA8YXJjaGl2ZS1uYW1lPiIgKTsKKyAgICAgICAgICAgIGZvciggaW50IGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoOyArK2kgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNhbXBsZXMuZGVwbG95KCBuZXcgRmlsZSggcGFydHNbIGkgXSApICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIGNtZC5lcXVhbHMoIFVOREVQTE9ZICkgKQorICAgICAgICB7CisgICAgICAgICAgICByZXF1aXJlKCBudW1BcmdzID49IDEsICJVc2FnZTogIiArIFVOREVQTE9ZICsgIiBbPG5hbWU+WyA8bmFtZT5dKl0iICk7CisgICAgICAgICAgICBmb3IoIGludCBpID0gMTsgaSA8IHBhcnRzLmxlbmd0aDsgKytpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzYW1wbGVzLnVuZGVwbG95KCBwYXJ0c1sgaSBdICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIGNtZC5lcXVhbHMoIFNUQVJUX1NFUlZFUiApICkKKyAgICAgICAgeworICAgICAgICAgICAgcmVxdWlyZSggbnVtQXJncyA9PSAxLCAiVXNhZ2U6ICIgKyBTVEFSVF9TRVJWRVIgKyAiIDxzZXJ2ZXItbmFtZT4iICk7CisgICAgICAgICAgICBzYW1wbGVzLnN0YXJ0U2VydmVyKCBwYXJ0c1sgMSBdICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIGNtZC5lcXVhbHMoIFNUT1BfU0VSVkVSICkgKQorICAgICAgICB7CisgICAgICAgICAgICByZXF1aXJlKCBudW1BcmdzID09IDEsICJVc2FnZTogIiArIFNUT1BfU0VSVkVSICsgIiA8c2VydmVyLW5hbWU+IiApOworICAgICAgICAgICAgc2FtcGxlcy5zdG9wU2VydmVyKCBwYXJ0c1sgMSBdICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIGNtZC5lcXVhbHMoIExJU1QgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlcXVpcmUoIG51bUFyZ3MgPT0gMCwgIlVzYWdlOiAiICsgTElTVCApOworICAgICAgICAgICAgc2FtcGxlcy5oYW5kbGVMaXN0KCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIGNtZC5lcXVhbHMoIFNIT1dfSElFUkFSQ0hZICkgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIG51bUFyZ3MgPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2FtcGxlcy5kaXNwbGF5SGllcmFyY2h5KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yKCBpbnQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGg7ICsraSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzYW1wbGVzLmRpc3BsYXlIaWVyYXJjaHkoIHBhcnRzWyBpIF0gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIGNtZC5lcXVhbHMoIFFVRVJZKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlcXVpcmUoIG51bUFyZ3MgPT0gMCwgIlVzYWdlOiAiICsgUVVFUlkgKTsKKworICAgICAgICAgICAgc2FtcGxlcy5kZW1vUXVlcnkoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggY21kLmVxdWFscyggTElTVF9BVFRSSUJVVEVTICkgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIG51bUFyZ3MgPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2FtcGxlcy5kaXNwbGF5QWxsQXR0cmlidXRlcyggZ2V0RG9tYWluUm9vdCgpICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yKCBpbnQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGg7ICsraSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzYW1wbGVzLmRpc3BsYXlBbGxBdHRyaWJ1dGVzKCBwYXJ0c1sgaSBdICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCBjbWQuZXF1YWxzKCBMSVNUX0RPVFRFRF9OQU1FUyApICkKKyAgICAgICAgeworICAgICAgICAgICAgcmVxdWlyZSggbnVtQXJncyA9PSAwLCAiVXNhZ2U6ICIgKyBMSVNUX0RPVFRFRF9OQU1FUyApOworICAgICAgICAgICAgc2FtcGxlcy5kaXNwbGF5RG90dGVkTmFtZXMoICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIGNtZC5lcXVhbHMoIExJU1RfUFJPUEVSVElFUyApICkKKyAgICAgICAgeworICAgICAgICAgICAgcmVxdWlyZSggbnVtQXJncyA9PSAwLCAiVXNhZ2U6ICIgKyBMSVNUX1BST1BFUlRJRVMgKTsKKyAgICAgICAgICAgIHNhbXBsZXMuZGlzcGxheUFsbFByb3BlcnRpZXMoICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIGNtZC5lcXVhbHMoIFJVTl9BTEwgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlcXVpcmUoIG51bUFyZ3MgPT0gMCwgIlVzYWdlOiAiICsgUlVOX0FMTCApOworCisgICAgICAgICAgICBmb3IoIGludCBpID0gMDsgaSA8IE1FTlVfQ0hPSUNFUy5sZW5ndGg7ICsraSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nICAgIGNob2ljZSAgICA9IE1FTlVfQ0hPSUNFU1sgaSBdOworCisgICAgICAgICAgICAgICAgaWYgKCAhICggY2hvaWNlLmVxdWFscyggUVVJVCApIHx8IGNob2ljZS5lcXVhbHMoIFJVTl9BTEwgKSApICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZUNob2ljZSggc2FtcGxlcywgY2hvaWNlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCBjbWQuZXF1YWxzKCBERU1PX0pNWF9NT05JVE9SICkgKQorICAgICAgICB7CisgICAgICAgICAgICBzYW1wbGVzLmRlbW9KTVhNb25pdG9yKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIGNtZC5lcXVhbHMoIFNFVF9NT05JVE9SSU5HICkgKQorICAgICAgICB7CisgICAgICAgICAgICByZXF1aXJlKCBudW1BcmdzID09IDIsICJVc2FnZTogIiArIFNFVF9NT05JVE9SSU5HICsgIiA8Y29uZmlnLW5hbWU+IEhJR0h8TE9XfE9GRiIgKTsKKworICAgICAgICAgICAgc2FtcGxlcy5zZXRNb25pdG9yaW5nKCBwYXJ0c1sgMSBdLCBwYXJ0c1sgMiBdKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFNhbXBsZVV0aWwucHJpbnRsbiggIlVua25vd24gY29tbWFuZDogIiArIGxpbmUgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQKKyAgICBkZW1vKCkKKyAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCisgICAgeworICAgICAgICBmaW5hbCBMaW5lUmVhZGVySW1wbCAgICBpbiAgICA9IG5ldyBMaW5lUmVhZGVySW1wbCggU3lzdGVtLmluICk7CisKKyAgICAgICAgZmluYWwgU2FtcGxlcyAgICBzYW1wbGVzICAgID0gbmV3IFNhbXBsZXMoIGdldERvbWFpblJvb3QoKSApOworICAgICAgICB3aGlsZSAoIHRydWUgKQorICAgICAgICB7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgICAgbGluZSAgICA9IGluLnJlYWRMaW5lKCAiXG4iICsgUFJPTVBUICk7CisgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVDaG9pY2UoIHNhbXBsZXMsIGxpbmUudHJpbSgpICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCggSWxsZWdhbFVzYWdlRXhjZXB0aW9uIGUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBlICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgICAgIHByaXZhdGUgZmluYWwgRG9tYWluUm9vdAorICAgIGdldERvbWFpblJvb3QoKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBtRG9tYWluUm9vdCApOworICAgIH0KKworCisKKworICAgICAgICBwcml2YXRlIFRMU1BhcmFtcworICAgIGNyZWF0ZVRMU1BhcmFtcygKKyAgICAgICAgZmluYWwgU3RyaW5nICAgIHRydXN0U3RvcmUsCisgICAgICAgIGZpbmFsIFN0cmluZyAgICBwYXNzd29yZCApCisgICAgeworICAgICAgICBmaW5hbCBGaWxlIHRydXN0U3RvcmVGaWxlICAgID0gbmV3IEZpbGUoIHRydXN0U3RvcmUgKTsKKyAgICAgICAgZmluYWwgY2hhcltdIHRydXN0U3RvcmVQYXNzd29yZCAgICA9IHBhc3N3b3JkLnRvQ2hhckFycmF5KCk7CisKKyAgICAgICAgbUhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyICAgID0gbmV3IEhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVySW1wbCgpOworICAgICAgICBmaW5hbCBUcnVzdFN0b3JlVHJ1c3RNYW5hZ2VyIHRydXN0TWdyID0KKyAgICAgICAgICAgIG5ldyBUcnVzdFN0b3JlVHJ1c3RNYW5hZ2VyKCB0cnVzdFN0b3JlRmlsZSwgdHJ1c3RTdG9yZVBhc3N3b3JkKTsKKyAgICAgICAgdHJ1c3RNZ3Iuc2V0UHJvbXB0KCB0cnVlICk7CisKKyAgICAgICAgZmluYWwgVExTUGFyYW1zICAgIHRsc1BhcmFtcyA9IG5ldyBUTFNQYXJhbXMoIHRydXN0TWdyLCBtSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXIgKTsKKworICAgICAgICByZXR1cm4oIHRsc1BhcmFtcyApOworICAgIH0KKworICAgIC8qKgorICAgICAgICBSZWFkIGNvbm5lY3QgcHJvcGVydGllcyBmcm9tIGEgZmlsZS4KKyAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBQcm9wZXJ0aWVzCisgICAgZ2V0Q29ubmVjdFByb3BlcnRpZXMoIGZpbmFsIFN0cmluZyBmaWxlICkKKyAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCisgICAgeworICAgICAgICBmaW5hbCBQcm9wZXJ0aWVzICAgIHByb3BzICAgID0gbmV3IFByb3BlcnRpZXMoKTsKKworICAgICAgICBpZiAoIGZpbGUgIT0gbnVsbCApCisgICAgICAgIHsKKyAgICAgICAgICAgIFNhbXBsZVV0aWwucHJpbnRsbiggIlJlYWRpbmcgcHJvcGVydGllcyBmcm9tOiAiICsgU2FtcGxlVXRpbC5xdW90ZSggZmlsZSApICk7CisgICAgICAgICAgICBmaW5hbCBGaWxlICAgIGYgICAgPSBuZXcgRmlsZSggZmlsZSApOworCisgICAgICAgICAgICBpZiAoIGYuZXhpc3RzKCkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZpbmFsIEZpbGVJbnB1dFN0cmVhbSAgICBpcyAgICA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oIGYgKTsKKyAgICAgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHByb3BzLmxvYWQoIGlzICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZpbmFsbHkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlzLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNhbXBsZVV0aWwucHJpbnRsbigiRmlsZSBcIiIgKyBmaWxlICsgIiBkb2VzIG5vdCBleGlzdCwgdXNpbmcgZGVmYXVsdHMuIiApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuKCBwcm9wcyApOworICAgIH0KKworICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyAgICBERUZBVUxUX1RSVVNUX1NUT1JFX0ZJTEUgICAgICAgID0gIn4vLmtleXN0b3JlIjsKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgICAgREVGQVVMVF9UUlVTVF9TVE9SRV9QQVNTV09SRCAgICA9ICJjaGFuZ2VtZSI7CisKKyAgICAvKioKKyAgICAgICAgQHBhcmFtIGhvc3QgICAgaG9zdG5hbWUgb3IgSVAgYWRkcmVzcyBvZiBEb21haW4gQWRtaW4gU2VydmVyCisgICAgICAgIEBwYXJhbSBwb3J0ICAgIFJNSSBhZG1pbmlzdHJhdGl2ZSBwb3J0CisgICAgICAgIEBwYXJhbSB1c2VyICAgIGFkbWluIHVzZXIKKyAgICAgICAgQHBhcmFtIHBhc3N3b3JkIGFkbWluIHVzZXIgcGFzc3dvcmQKKyAgICAgICAgQHBhcmFtIHRsc1BhcmFtcyBUTFMgcGFyYW1ldGVycywgbWF5IGJlIG51bGwKKyAgICAgICAgQHJldHVybiBBcHBzZXJ2ZXJDb25uZWN0aW9uU291cmNlCisgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgQXBwc2VydmVyQ29ubmVjdGlvblNvdXJjZQorICAgIGNvbm5lY3QoCisgICAgICAgIGZpbmFsIFN0cmluZyAgICBob3N0LAorICAgICAgICBmaW5hbCBpbnQgICAgICAgIHBvcnQsCisgICAgICAgIGZpbmFsIFN0cmluZyAgICB1c2VyLAorICAgICAgICBmaW5hbCBTdHJpbmcgICAgcGFzc3dvcmQsCisgICAgICAgIGZpbmFsIFRMU1BhcmFtcyAgICB0bHNQYXJhbXMgKQorICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KKyAgICB7CisgICAgICAgIGZpbmFsIFN0cmluZyBpbmZvID0gImhvc3Q9IiArIGhvc3QgKyAiLCBwb3J0PSIgKyBwb3J0ICsKKyAgICAgICAgICAgICIsIHVzZXI9IiArIHVzZXIgKyAiLCBwYXNzd29yZD0iICsgcGFzc3dvcmQgKworICAgICAgICAgICAgIiwgdGxzPSIgKyAodGxzUGFyYW1zICE9IG51bGwpOworCisgICAgICAgIFNhbXBsZVV0aWwucHJpbnRsbiggIkNvbm5lY3RpbmcuLi46IiArIGluZm8gKTsKKworICAgICAgICBmaW5hbCBBcHBzZXJ2ZXJDb25uZWN0aW9uU291cmNlIGNvbm4gICAgPQorICAgICAgICAgICAgbmV3IEFwcHNlcnZlckNvbm5lY3Rpb25Tb3VyY2UoIEFwcHNlcnZlckNvbm5lY3Rpb25Tb3VyY2UuUFJPVE9DT0xfUk1JLAorICAgICAgICAgICAgICAgIGhvc3QsIHBvcnQsIHVzZXIsIHBhc3N3b3JkLCB0bHNQYXJhbXMsIG51bGwpOworCisgICAgICAgIC8vIGZvcmNlIHRoZSBjb25uZWN0aW9uIG5vdworICAgICAgICBjb25uLmdldEpNWENvbm5lY3RvciggZmFsc2UgKTsKKworICAgICAgICBTYW1wbGVVdGlsLnByaW50bG4oICJDb25uZWN0ZWQ6ICIgKyBpbmZvICk7CisKKyAgICAgICAgcmV0dXJuKCBjb25uICk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKi8KKyAgICAgICAgcHVibGljCisgICAgU2FtcGxlTWFpbiggZmluYWwgU3RyaW5nIG9wdGlvbmFsUHJvcGVydGllc0ZpbGUgKQorICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KKyAgICB7CisgICAgICAgIGZpbmFsIFByb3BlcnRpZXMgICAgcHJvcHMgICAgPSBnZXRDb25uZWN0UHJvcGVydGllcyggb3B0aW9uYWxQcm9wZXJ0aWVzRmlsZSApOworCisgICAgICAgIGZpbmFsIFN0cmluZyAgICBob3N0ICAgID0gcHJvcHMuZ2V0UHJvcGVydHkoICJjb25uZWN0Lmhvc3QiLCAibG9jYWxob3N0IiApOworICAgICAgICBmaW5hbCBpbnQgICAgICAgIHBvcnQgICAgPSBJbnRlZ2VyLnBhcnNlSW50KCBwcm9wcy5nZXRQcm9wZXJ0eSggImNvbm5lY3QucG9ydCIsICI4Njg2IiApICk7CisgICAgICAgIGZpbmFsIFN0cmluZyAgICB1c2VyICAgID0gcHJvcHMuZ2V0UHJvcGVydHkoICJjb25uZWN0LnVzZXIiLCAiYWRtaW4iICk7CisgICAgICAgIGZpbmFsIFN0cmluZyAgICBwYXNzd29yZCAgICA9IHByb3BzLmdldFByb3BlcnR5KCAiY29ubmVjdC5wYXNzd29yZCIsICJhZG1pbjEyMyIgKTsKKyAgICAgICAgZmluYWwgU3RyaW5nICAgIHRydXN0U3RvcmUgICAgPSBwcm9wcy5nZXRQcm9wZXJ0eSggImNvbm5lY3QudHJ1c3RzdG9yZSIsIERFRkFVTFRfVFJVU1RfU1RPUkVfRklMRSk7CisgICAgICAgIGZpbmFsIFN0cmluZyAgICB0cnVzdFN0b3JlUGFzc3dvcmQgICAgPQorICAgICAgICAgICAgICAgIHByb3BzLmdldFByb3BlcnR5KCAiY29ubmVjdC50cnVzdHN0b3JlUGFzc3dvcmQiLCBERUZBVUxUX1RSVVNUX1NUT1JFX1BBU1NXT1JEKTsKKyAgICAgICAgZmluYWwgYm9vbGVhbiAgICB1c2VUTFMgICAgPQorICAgICAgICAgICAgQm9vbGVhbi52YWx1ZU9mKCBwcm9wcy5nZXRQcm9wZXJ0eSggImNvbm5lY3QudXNlVExTIiwgImZhbHNlIiApICkuYm9vbGVhblZhbHVlKCk7CisKKyAgICAgICAgZmluYWwgVExTUGFyYW1zICAgIHRsc1BhcmFtcyAgICA9IHVzZVRMUyA/CisgICAgICAgICAgICBjcmVhdGVUTFNQYXJhbXMoIHRydXN0U3RvcmUsIHRydXN0U3RvcmVQYXNzd29yZCkgOiBudWxsOworCisgICAgICAgIGZpbmFsIEFwcHNlcnZlckNvbm5lY3Rpb25Tb3VyY2UgICAgY29ubiAgICAgPSBjb25uZWN0KCBob3N0LCBwb3J0LCB1c2VyLCBwYXNzd29yZCwgdGxzUGFyYW1zICk7CisKKyAgICAgICAgaWYgKCBtSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXIgIT0gbnVsbCApCisgICAgICAgIHsKKyAgICAgICAgICAgIFNhbXBsZVV0aWwucHJpbnRsbiggIkhhbmRzaGFrZUNvbXBsZXRlZEV2ZW50OiAiICsKKyAgICAgICAgICAgICAgICBTYW1wbGVVdGlsLnRvU3RyaW5nKCBtSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXIuZ2V0TGFzdEV2ZW50KCkgKSApOworICAgICAgICB9CisKKyAgICAgICAgbURvbWFpblJvb3QgICAgPSBjb25uLmdldERvbWFpblJvb3QoKTsKKworCisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICBkZW1vKCApOworICAgICAgICB9CisgICAgICAgIGZpbmFsbHkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gY2xvc2UgdGhlIGNvbm5lY3Rpb24gKG5vdCBuZWNlc3NhcnksIGJ1dCBoZXJlIGZvciBhcyBhbiBleGFtcGxlKQorICAgICAgICAgICAgY29ubi5nZXRKTVhDb25uZWN0b3IoIGZhbHNlICkuY2xvc2UoKTsKKyAgICAgICAgfQorICAgIH0KIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL2NvbS9zdW4vYXBwc2Vydi9tYW5hZ2VtZW50L3NhbXBsZS9TYW1wbGVVdGlsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL2NvbS9zdW4vYXBwc2Vydi9tYW5hZ2VtZW50L3NhbXBsZS9TYW1wbGVVdGlsLmphdmEKaW5kZXggNWJmNzg5ZC4uMDIyNjhjYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvc2FtcGxlcy9jb20vc3VuL2FwcHNlcnYvbWFuYWdlbWVudC9zYW1wbGUvU2FtcGxlVXRpbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL3NhbXBsZXMvY29tL3N1bi9hcHBzZXJ2L21hbmFnZW1lbnQvc2FtcGxlL1NhbXBsZVV0aWwuamF2YQpAQCAtMjQsMjY1ICsyNCwyNjUgQEAKIAogCiAvKioKLQlVdGlsaXR5IG1ldGhvZHMgZm9yIHRoZSBzYW1wbGVzLgorICAgIFV0aWxpdHkgbWV0aG9kcyBmb3IgdGhlIHNhbXBsZXMuCiAgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBTYW1wbGVVdGlsCiB7Ci0JcHJpdmF0ZQlTYW1wbGVVdGlsKCkJe30KLQkKLQkJcHVibGljIHN0YXRpYyB2b2lkCi0JcHJpbnRsbiggT2JqZWN0IG8gKQotCXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCB0b1N0cmluZyggbyApICk7Ci0JfQotCQotCS8qKgotCQlEaXNwbGF5IGEgTWFwIHRvIFN5c3RlbS5vdXQuCi0JICovCi0JCXB1YmxpYyBzdGF0aWMgdm9pZAotCWRpc3BsYXlNYXAoCi0JCWZpbmFsIFN0cmluZwltc2csCi0JCWZpbmFsIE1hcCAJCW0pCi0JewotCQlwcmludGxuKCBtc2cgKyAiOiAiICsgdG9TdHJpbmcoIG0ua2V5U2V0KCkgKSApOwotCX0KLQkKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcJUVVPVEVfQ0hBUgk9ICJcIiI7Ci0JCXB1YmxpYyBzdGF0aWMgU3RyaW5nCi0JcXVvdGUoIGZpbmFsIE9iamVjdCBvICkKLQl7Ci0JCWlmICggbyA9PSBudWxsICkKLQkJewotCQkJcmV0dXJuIHF1b3RlKCAibnVsbCIgKTsKLQkJfQotCQkKLQkJcmV0dXJuKCBRVU9URV9DSEFSICsgby50b1N0cmluZygpICsgUVVPVEVfQ0hBUiApOwotCX0KLQkKLQkJcHVibGljIHN0YXRpYyBTdHJpbmcKLQl0b1N0cmluZyggZmluYWwgT2JqZWN0IG8gKQotCXsKLQkJU3RyaW5nCXJlc3VsdAk9IG51bGw7Ci0JCQotCQlpZiAoIG8gPT0gbnVsbCApCi0JCXsKLQkJCXJlc3VsdAk9ICJudWxsIjsKLQkJfQotCQllbHNlIGlmICggbyBpbnN0YW5jZW9mIE9iamVjdFtdICkKLQkJewotCQkJcmVzdWx0CT0gIlsiICsgYXJyYXlUb1N0cmluZyggKE9iamVjdFtdKW8sIG51bGwsICIsICIgKSArICJdIjsKLQkJfQotCQllbHNlIGlmICggbyBpbnN0YW5jZW9mIE5vdGlmaWNhdGlvbiApCi0JCXsKLQkJCXJlc3VsdAk9IHRvU3RyaW5nKCAoTm90aWZpY2F0aW9uKW8gKTsKLQkJfQotCQllbHNlIGlmICggbyBpbnN0YW5jZW9mIEF0dHJpYnV0ZSApCi0JCXsKLQkJCXJlc3VsdAk9IHRvU3RyaW5nKCAoQXR0cmlidXRlKW8gKTsKLQkJfQotCQllbHNlIGlmICggbyBpbnN0YW5jZW9mIE1hcCApCi0JCXsKLQkJCXJlc3VsdAk9IHRvU3RyaW5nKCAoTWFwKW8gKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXJlc3VsdAk9IG8udG9TdHJpbmcoKTsKLQkJfQotCQlyZXR1cm4oIHJlc3VsdCApOwotCX0KLQkKLQkKLQkJcHVibGljIHN0YXRpYyBTdHJpbmcKLQl0b1N0cmluZyggZmluYWwgQXR0cmlidXRlIGEgKQotCXsKLQkJcmV0dXJuIGEuZ2V0TmFtZSgpICsgIj0iICsgdG9TdHJpbmcoIGEuZ2V0VmFsdWUoKSApOwotCX0KLQkKLQkJcHJpdmF0ZSBzdGF0aWMgdm9pZAotCWFwcGVuZCggZmluYWwgU3RyaW5nQnVmZmVyIGIsIGZpbmFsIE9iamVjdCBvKQotCXsKLQkJaWYgKCBiICE9IG51bGwgJiYgYi5sZW5ndGgoKSAhPSAwICkKLQkJewotCQkJYi5hcHBlbmQoICIsICIgKTsKLQkJfQotCQkKLQkJYi5hcHBlbmQoIG8udG9TdHJpbmcoKSApOwotCX0KLQkKLQkJcHVibGljIHN0YXRpYyBTdHJpbmcKLQl0b1N0cmluZyggZmluYWwgTm90aWZpY2F0aW9uIG5vdGlmICkKLQl7Ci0JCWZpbmFsIFN0cmluZ0J1ZmZlcgliCT0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkKLQkJYXBwZW5kKCBiLCAiIyIgKyBub3RpZi5nZXRTZXF1ZW5jZU51bWJlcigpICk7Ci0JCWFwcGVuZCggYiwgbmV3IGphdmEudXRpbC5EYXRlKCBub3RpZi5nZXRUaW1lU3RhbXAoKSApICk7Ci0JCWFwcGVuZCggYiwgU2FtcGxlVXRpbC5xdW90ZSggbm90aWYuZ2V0U291cmNlKCkgKSApOwotCQlhcHBlbmQoIGIsIG5vdGlmLmdldFR5cGUoKSApOwotCQkKLQkJYXBwZW5kKCBiLCAiVXNlckRhdGEgPSAiICsgdG9TdHJpbmcoIG5vdGlmLmdldFVzZXJEYXRhKCkgKSApOwotCQkKLQkJaWYgKCBub3RpZiBpbnN0YW5jZW9mIE1CZWFuU2VydmVyTm90aWZpY2F0aW9uICkKLQkJewotCQkJLy8gdGhpcyBzaG91bGQgcmVhbGx5IGJlIGRvbmUgaW4gYSBNQmVhblNlcnZlck5vdGlmaWNhdGlvblN0cmluZ2lmaWVyIQotCQkJZmluYWwgTUJlYW5TZXJ2ZXJOb3RpZmljYXRpb24Jbgk9IChNQmVhblNlcnZlck5vdGlmaWNhdGlvbilub3RpZjsKLQkJCQotCQkJYXBwZW5kKCBiLCBTYW1wbGVVdGlsLnF1b3RlKCBuLmdldE1CZWFuTmFtZSgpICkgKTsKLQkJfQotCQllbHNlIGlmICggbm90aWYgaW5zdGFuY2VvZiBBdHRyaWJ1dGVDaGFuZ2VOb3RpZmljYXRpb24gKQotCQl7Ci0JCQlmaW5hbCBBdHRyaWJ1dGVDaGFuZ2VOb3RpZmljYXRpb24JYQk9IChBdHRyaWJ1dGVDaGFuZ2VOb3RpZmljYXRpb24pbm90aWY7Ci0JCQlhcHBlbmQoIGIsIHF1b3RlKCBhLmdldEF0dHJpYnV0ZU5hbWUoKSApICsKLQkJCQkiLCBPbGRWYWx1ZSA9ICIgKyBxdW90ZSggdG9TdHJpbmcoIGEuZ2V0T2xkVmFsdWUoKSApKSArCi0JCQkJIiwgTmV3VmFsdWUgPSAiICsgcXVvdGUoIHRvU3RyaW5nKCBhLmdldE5ld1ZhbHVlKCkgKSkgKTsKLQkJfQotCQkKLQkJcmV0dXJuKCBiLnRvU3RyaW5nKCkgKTsKLQl9Ci0JCi0JCisgICAgcHJpdmF0ZSAgICBTYW1wbGVVdGlsKCkgICAge30KIAotCQlwdWJsaWMgc3RhdGljIFN0cmluZwotCWFycmF5VG9TdHJpbmcoCi0JCWZpbmFsIE9iamVjdFtdIGEsCi0JCWZpbmFsIFN0cmluZyBwcmVmaXgsCi0JCWZpbmFsIFN0cmluZyBzdWZmaXggKQotCXsKLQkJZmluYWwgU3RyaW5nQnVmZmVyCWJ1Zgk9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCi0JCWZvciggaW50IGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSApCi0JCXsKLQkJCWlmICggcHJlZml4ICE9IG51bGwgKQotCQkJewotCQkJCWJ1Zi5hcHBlbmQoIHByZWZpeCApOwotCQkJfQotCQkJCi0JCQlidWYuYXBwZW5kKCB0b1N0cmluZyggYVsgaSBdICkgKTsKLQkJCQotCQkJaWYgKCBzdWZmaXggIT0gbnVsbCAmJiBpIDwgYS5sZW5ndGggKQotCQkJewotCQkJCWJ1Zi5hcHBlbmQoIHN1ZmZpeCApOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4oIGJ1Zi50b1N0cmluZygpICk7Ci0JfQotCQotCQotCQlwdWJsaWMgc3RhdGljIFN0cmluZwotCXRvU3RyaW5nKCBmaW5hbCBNYXAgbSApCi0JewotCQlyZXR1cm4oIG1hcFRvU3RyaW5nKCBtLCAiXG4iICkgKTsKLQl9Ci0JCi0JCXB1YmxpYyBzdGF0aWMgU3RyaW5nCi0JbWFwVG9TdHJpbmcoIGZpbmFsIE1hcCBtLCBmaW5hbCBTdHJpbmcgc2VwYXJhdG9yICkKLQl7Ci0JCWlmICggbSA9PSBudWxsICkKLQkJewotCQkJcmV0dXJuKCAibnVsbCIgKTsKLQkJfQotCQkKLQkJZmluYWwgU3RyaW5nQnVmZmVyCWJ1Zgk9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCi0JCWZpbmFsIEl0ZXJhdG9yCWl0ZXIJPSBtLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlICggaXRlci5oYXNOZXh0KCkgKQotCQl7Ci0JCQlmaW5hbCBPYmplY3QJa2V5CQk9IGl0ZXIubmV4dCgpOwotCQkJZmluYWwgT2JqZWN0CXZhbHVlCT0gbS5nZXQoIGtleSApOwotCQkJCi0JCQlidWYuYXBwZW5kKCBrZXkgKyAiPSIgKyBTYW1wbGVVdGlsLnRvU3RyaW5nKCB2YWx1ZSApICsgc2VwYXJhdG9yICk7Ci0JCX0KLQkJaWYgKCBidWYubGVuZ3RoKCkgIT0gMCApCi0JCXsKLQkJCS8vIHN0cmlwIHRyYWlsaW5nIHNlcGFyYXRvcgotCQkJYnVmLnNldExlbmd0aCggYnVmLmxlbmd0aCgpIC0gc2VwYXJhdG9yLmxlbmd0aCgpICk7Ci0JCX0KLQkJCi0JCXJldHVybiggYnVmLnRvU3RyaW5nKCkgKTsKLQl9Ci0JCi0JCi0JCS8qKgotCQlHZXQgdGhlIGNoYWluIG9mIGV4Y2VwdGlvbnMgdmlhIGdldENhdXNlKCkuIFRoZSBmaXJzdCBlbGVtZW50IGlzIHRoZQotCQlFeGNlcHRpb24gcGFzc2VkLgotCQkKLQkJQHBhcmFtIHN0YXJ0CXRoZSBFeGNlcHRpb24gdG8gdHJhdmVyc2UKLQkJQHJldHVybgkJYSBUaHJvd2FibGVbXSBvciBhbiBFeGNlcHRpb25bXSBhcyBhcHByb3ByaWF0ZQotCSAqLwotCQlwdWJsaWMgc3RhdGljIFRocm93YWJsZVtdCi0JZ2V0Q2F1c2VzKCBmaW5hbCBUaHJvd2FibGUgc3RhcnQgKQotCXsKLQkJZmluYWwgTGlzdAlsaXN0CT0gbmV3IEFycmF5TGlzdCgpOwotCQkKLQkJYm9vbGVhbgloYXZlTm9uRXhjZXB0aW9uCT0gZmFsc2U7Ci0JCQotCQlUaHJvd2FibGUgdAk9IHN0YXJ0OwotCQl3aGlsZSAoIHQgIT0gbnVsbCApCi0JCXsKLQkJCWxpc3QuYWRkKCB0ICk7Ci0JCQkKLQkJCWlmICggISAoIHQgaW5zdGFuY2VvZiBFeGNlcHRpb24gKSApCi0JCQl7Ci0JCQkJaGF2ZU5vbkV4Y2VwdGlvbgk9IHRydWU7Ci0JCQl9Ci0JCQkKLQkJCWZpbmFsIFRocm93YWJsZSB0ZW1wCT0gdC5nZXRDYXVzZSgpOwotCQkJaWYgKCB0ZW1wID09IG51bGwgKQotCQkJCWJyZWFrOwotCQkJdAk9IHRlbXA7Ci0JCX0KLQkJCi0JCWZpbmFsIFRocm93YWJsZVtdCXJlc3VsdHMJPSBoYXZlTm9uRXhjZXB0aW9uID8KLQkJCW5ldyBUaHJvd2FibGVbIGxpc3Quc2l6ZSgpIF0gOiBuZXcgRXhjZXB0aW9uWyBsaXN0LnNpemUoKSBdOwotCQkKLQkJbGlzdC50b0FycmF5KCByZXN1bHRzICk7Ci0JCQotCQlyZXR1cm4oIHJlc3VsdHMgKTsKLQl9Ci0JCi0JCi0JLyoqCi0JCUdldCB0aGUgb3JpZ2luYWwgdHJvdWJsZW1ha2VyLgotCQkKLQkJQHBhcmFtIGUJdGhlIEV4Y2VwdGlvbiB0byBkaWcgaW50bwotCQlAcmV0dXJuCQl0aGUgb3JpZ2luYWwgVGhyb3dhYmxlIHRoYXQgc3RhcnRlZCB0aGUgcHJvYmxlbQotCSAqLwlwdWJsaWMgc3RhdGljIFRocm93YWJsZQotCWdldFJvb3RDYXVzZSggZmluYWwgVGhyb3dhYmxlIGUgKQotCXsKLQkJZmluYWwgVGhyb3dhYmxlW10JY2F1c2VzCT0gZ2V0Q2F1c2VzKCBlICk7Ci0JCQotCQlyZXR1cm4oIGNhdXNlc1sgY2F1c2VzLmxlbmd0aCAtIDEgXSApOwotCX0KLQkKLQkJLyoqCi0JCUNyZWF0ZSBhIG5ldyBTZXQgY29udGFpbmluZyBhbGwgYXJyYXkgZWxlbWVudHMuCi0JICovCi0JCXB1YmxpYyBzdGF0aWMgU2V0Ci0JbmV3U2V0KCBmaW5hbCBPYmplY3QgW10gIG9iamVjdHMgKQotCXsKLQkJcmV0dXJuKCBuZXdTZXQoIG9iamVjdHMsIDAsIG9iamVjdHMubGVuZ3RoICkgKTsKLQl9CisgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZAorICAgIHByaW50bG4oIE9iamVjdCBvICkKKyAgICB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggdG9TdHJpbmcoIG8gKSApOworICAgIH0KKworICAgIC8qKgorICAgICAgICBEaXNwbGF5IGEgTWFwIHRvIFN5c3RlbS5vdXQuCisgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZAorICAgIGRpc3BsYXlNYXAoCisgICAgICAgIGZpbmFsIFN0cmluZyAgICBtc2csCisgICAgICAgIGZpbmFsIE1hcCAgICAgICAgIG0pCisgICAgeworICAgICAgICBwcmludGxuKCBtc2cgKyAiOiAiICsgdG9TdHJpbmcoIG0ua2V5U2V0KCkgKSApOworICAgIH0KIAogCi0JLyoqCi0JCUNyZWF0ZSBhIG5ldyBTZXQgY29udGFpbmluZyBhbGwgYXJyYXkgZWxlbWVudHMuCi0JICovCi0JCXB1YmxpYyBzdGF0aWMgU2V0Ci0JbmV3U2V0KAotCQlmaW5hbCBPYmplY3QgW10gIG9iamVjdHMsCi0JCWZpbmFsIGludAkJc3RhcnRJbmRleCwKLQkJZmluYWwgaW50CQludW1JdGVtcyApCi0JewotCQlmaW5hbCBTZXQJc2V0CT0gbmV3IEhhc2hTZXQoKTsKLQkJCi0JCWZvciggaW50IGkgPSAwOyBpIDwgbnVtSXRlbXM7ICsraSApCi0JCXsKLQkJCXNldC5hZGQoIG9iamVjdHNbIHN0YXJ0SW5kZXggKyBpIF0gKTsKLQkJfQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyAgICBRVU9URV9DSEFSICAgID0gIlwiIjsKKyAgICAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcKKyAgICBxdW90ZSggZmluYWwgT2JqZWN0IG8gKQorICAgIHsKKyAgICAgICAgaWYgKCBvID09IG51bGwgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcXVvdGUoICJudWxsIiApOworICAgICAgICB9CiAKLQkJcmV0dXJuKCBzZXQgKTsKLQl9CisgICAgICAgIHJldHVybiggUVVPVEVfQ0hBUiArIG8udG9TdHJpbmcoKSArIFFVT1RFX0NIQVIgKTsKKyAgICB9CisKKyAgICAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcKKyAgICB0b1N0cmluZyggZmluYWwgT2JqZWN0IG8gKQorICAgIHsKKyAgICAgICAgU3RyaW5nICAgIHJlc3VsdCAgICA9IG51bGw7CisKKyAgICAgICAgaWYgKCBvID09IG51bGwgKQorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgICAgPSAibnVsbCI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIG8gaW5zdGFuY2VvZiBPYmplY3RbXSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCAgICA9ICJbIiArIGFycmF5VG9TdHJpbmcoIChPYmplY3RbXSlvLCBudWxsLCAiLCAiICkgKyAiXSI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIG8gaW5zdGFuY2VvZiBOb3RpZmljYXRpb24gKQorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgICAgPSB0b1N0cmluZyggKE5vdGlmaWNhdGlvbilvICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIG8gaW5zdGFuY2VvZiBBdHRyaWJ1dGUgKQorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgICAgPSB0b1N0cmluZyggKEF0dHJpYnV0ZSlvICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIG8gaW5zdGFuY2VvZiBNYXAgKQorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgICAgPSB0b1N0cmluZyggKE1hcClvICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgICAgPSBvLnRvU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKCByZXN1bHQgKTsKKyAgICB9CisKKworICAgICAgICBwdWJsaWMgc3RhdGljIFN0cmluZworICAgIHRvU3RyaW5nKCBmaW5hbCBBdHRyaWJ1dGUgYSApCisgICAgeworICAgICAgICByZXR1cm4gYS5nZXROYW1lKCkgKyAiPSIgKyB0b1N0cmluZyggYS5nZXRWYWx1ZSgpICk7CisgICAgfQorCisgICAgICAgIHByaXZhdGUgc3RhdGljIHZvaWQKKyAgICBhcHBlbmQoIGZpbmFsIFN0cmluZ0J1ZmZlciBiLCBmaW5hbCBPYmplY3QgbykKKyAgICB7CisgICAgICAgIGlmICggYiAhPSBudWxsICYmIGIubGVuZ3RoKCkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGIuYXBwZW5kKCAiLCAiICk7CisgICAgICAgIH0KKworICAgICAgICBiLmFwcGVuZCggby50b1N0cmluZygpICk7CisgICAgfQorCisgICAgICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nCisgICAgdG9TdHJpbmcoIGZpbmFsIE5vdGlmaWNhdGlvbiBub3RpZiApCisgICAgeworICAgICAgICBmaW5hbCBTdHJpbmdCdWZmZXIgICAgYiAgICA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKworICAgICAgICBhcHBlbmQoIGIsICIjIiArIG5vdGlmLmdldFNlcXVlbmNlTnVtYmVyKCkgKTsKKyAgICAgICAgYXBwZW5kKCBiLCBuZXcgamF2YS51dGlsLkRhdGUoIG5vdGlmLmdldFRpbWVTdGFtcCgpICkgKTsKKyAgICAgICAgYXBwZW5kKCBiLCBTYW1wbGVVdGlsLnF1b3RlKCBub3RpZi5nZXRTb3VyY2UoKSApICk7CisgICAgICAgIGFwcGVuZCggYiwgbm90aWYuZ2V0VHlwZSgpICk7CisKKyAgICAgICAgYXBwZW5kKCBiLCAiVXNlckRhdGEgPSAiICsgdG9TdHJpbmcoIG5vdGlmLmdldFVzZXJEYXRhKCkgKSApOworCisgICAgICAgIGlmICggbm90aWYgaW5zdGFuY2VvZiBNQmVhblNlcnZlck5vdGlmaWNhdGlvbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIHJlYWxseSBiZSBkb25lIGluIGEgTUJlYW5TZXJ2ZXJOb3RpZmljYXRpb25TdHJpbmdpZmllciEKKyAgICAgICAgICAgIGZpbmFsIE1CZWFuU2VydmVyTm90aWZpY2F0aW9uICAgIG4gICAgPSAoTUJlYW5TZXJ2ZXJOb3RpZmljYXRpb24pbm90aWY7CisKKyAgICAgICAgICAgIGFwcGVuZCggYiwgU2FtcGxlVXRpbC5xdW90ZSggbi5nZXRNQmVhbk5hbWUoKSApICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIG5vdGlmIGluc3RhbmNlb2YgQXR0cmlidXRlQ2hhbmdlTm90aWZpY2F0aW9uICkKKyAgICAgICAgeworICAgICAgICAgICAgZmluYWwgQXR0cmlidXRlQ2hhbmdlTm90aWZpY2F0aW9uICAgIGEgICAgPSAoQXR0cmlidXRlQ2hhbmdlTm90aWZpY2F0aW9uKW5vdGlmOworICAgICAgICAgICAgYXBwZW5kKCBiLCBxdW90ZSggYS5nZXRBdHRyaWJ1dGVOYW1lKCkgKSArCisgICAgICAgICAgICAgICAgIiwgT2xkVmFsdWUgPSAiICsgcXVvdGUoIHRvU3RyaW5nKCBhLmdldE9sZFZhbHVlKCkgKSkgKworICAgICAgICAgICAgICAgICIsIE5ld1ZhbHVlID0gIiArIHF1b3RlKCB0b1N0cmluZyggYS5nZXROZXdWYWx1ZSgpICkpICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4oIGIudG9TdHJpbmcoKSApOworICAgIH0KKworCisKKyAgICAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcKKyAgICBhcnJheVRvU3RyaW5nKAorICAgICAgICBmaW5hbCBPYmplY3RbXSBhLAorICAgICAgICBmaW5hbCBTdHJpbmcgcHJlZml4LAorICAgICAgICBmaW5hbCBTdHJpbmcgc3VmZml4ICkKKyAgICB7CisgICAgICAgIGZpbmFsIFN0cmluZ0J1ZmZlciAgICBidWYgICAgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisKKyAgICAgICAgZm9yKCBpbnQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCBwcmVmaXggIT0gbnVsbCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnVmLmFwcGVuZCggcHJlZml4ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIHRvU3RyaW5nKCBhWyBpIF0gKSApOworCisgICAgICAgICAgICBpZiAoIHN1ZmZpeCAhPSBudWxsICYmIGkgPCBhLmxlbmd0aCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnVmLmFwcGVuZCggc3VmZml4ICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4oIGJ1Zi50b1N0cmluZygpICk7CisgICAgfQorCisKKyAgICAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcKKyAgICB0b1N0cmluZyggZmluYWwgTWFwIG0gKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBtYXBUb1N0cmluZyggbSwgIlxuIiApICk7CisgICAgfQorCisgICAgICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nCisgICAgbWFwVG9TdHJpbmcoIGZpbmFsIE1hcCBtLCBmaW5hbCBTdHJpbmcgc2VwYXJhdG9yICkKKyAgICB7CisgICAgICAgIGlmICggbSA9PSBudWxsICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuKCAibnVsbCIgKTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIFN0cmluZ0J1ZmZlciAgICBidWYgICAgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisKKyAgICAgICAgZmluYWwgSXRlcmF0b3IgICAgaXRlciAgICA9IG0ua2V5U2V0KCkuaXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUgKCBpdGVyLmhhc05leHQoKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpbmFsIE9iamVjdCAgICBrZXkgICAgICAgID0gaXRlci5uZXh0KCk7CisgICAgICAgICAgICBmaW5hbCBPYmplY3QgICAgdmFsdWUgICAgPSBtLmdldCgga2V5ICk7CisKKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIGtleSArICI9IiArIFNhbXBsZVV0aWwudG9TdHJpbmcoIHZhbHVlICkgKyBzZXBhcmF0b3IgKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGJ1Zi5sZW5ndGgoKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gc3RyaXAgdHJhaWxpbmcgc2VwYXJhdG9yCisgICAgICAgICAgICBidWYuc2V0TGVuZ3RoKCBidWYubGVuZ3RoKCkgLSBzZXBhcmF0b3IubGVuZ3RoKCkgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiggYnVmLnRvU3RyaW5nKCkgKTsKKyAgICB9CisKKworICAgICAgICAvKioKKyAgICAgICAgR2V0IHRoZSBjaGFpbiBvZiBleGNlcHRpb25zIHZpYSBnZXRDYXVzZSgpLiBUaGUgZmlyc3QgZWxlbWVudCBpcyB0aGUKKyAgICAgICAgRXhjZXB0aW9uIHBhc3NlZC4KKworICAgICAgICBAcGFyYW0gc3RhcnQgICAgdGhlIEV4Y2VwdGlvbiB0byB0cmF2ZXJzZQorICAgICAgICBAcmV0dXJuICAgICAgICBhIFRocm93YWJsZVtdIG9yIGFuIEV4Y2VwdGlvbltdIGFzIGFwcHJvcHJpYXRlCisgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgVGhyb3dhYmxlW10KKyAgICBnZXRDYXVzZXMoIGZpbmFsIFRocm93YWJsZSBzdGFydCApCisgICAgeworICAgICAgICBmaW5hbCBMaXN0ICAgIGxpc3QgICAgPSBuZXcgQXJyYXlMaXN0KCk7CisKKyAgICAgICAgYm9vbGVhbiAgICBoYXZlTm9uRXhjZXB0aW9uICAgID0gZmFsc2U7CisKKyAgICAgICAgVGhyb3dhYmxlIHQgICAgPSBzdGFydDsKKyAgICAgICAgd2hpbGUgKCB0ICE9IG51bGwgKQorICAgICAgICB7CisgICAgICAgICAgICBsaXN0LmFkZCggdCApOworCisgICAgICAgICAgICBpZiAoICEgKCB0IGluc3RhbmNlb2YgRXhjZXB0aW9uICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGhhdmVOb25FeGNlcHRpb24gICAgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgdGVtcCAgICA9IHQuZ2V0Q2F1c2UoKTsKKyAgICAgICAgICAgIGlmICggdGVtcCA9PSBudWxsICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHQgICAgPSB0ZW1wOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgVGhyb3dhYmxlW10gICAgcmVzdWx0cyAgICA9IGhhdmVOb25FeGNlcHRpb24gPworICAgICAgICAgICAgbmV3IFRocm93YWJsZVsgbGlzdC5zaXplKCkgXSA6IG5ldyBFeGNlcHRpb25bIGxpc3Quc2l6ZSgpIF07CisKKyAgICAgICAgbGlzdC50b0FycmF5KCByZXN1bHRzICk7CisKKyAgICAgICAgcmV0dXJuKCByZXN1bHRzICk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgICAgR2V0IHRoZSBvcmlnaW5hbCB0cm91YmxlbWFrZXIuCisKKyAgICAgICAgQHBhcmFtIGUgICAgdGhlIEV4Y2VwdGlvbiB0byBkaWcgaW50bworICAgICAgICBAcmV0dXJuICAgICAgICB0aGUgb3JpZ2luYWwgVGhyb3dhYmxlIHRoYXQgc3RhcnRlZCB0aGUgcHJvYmxlbQorICAgICAqLyAgICBwdWJsaWMgc3RhdGljIFRocm93YWJsZQorICAgIGdldFJvb3RDYXVzZSggZmluYWwgVGhyb3dhYmxlIGUgKQorICAgIHsKKyAgICAgICAgZmluYWwgVGhyb3dhYmxlW10gICAgY2F1c2VzICAgID0gZ2V0Q2F1c2VzKCBlICk7CisKKyAgICAgICAgcmV0dXJuKCBjYXVzZXNbIGNhdXNlcy5sZW5ndGggLSAxIF0gKTsKKyAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgIENyZWF0ZSBhIG5ldyBTZXQgY29udGFpbmluZyBhbGwgYXJyYXkgZWxlbWVudHMuCisgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgU2V0CisgICAgbmV3U2V0KCBmaW5hbCBPYmplY3QgW10gIG9iamVjdHMgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBuZXdTZXQoIG9iamVjdHMsIDAsIG9iamVjdHMubGVuZ3RoICkgKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAgICBDcmVhdGUgYSBuZXcgU2V0IGNvbnRhaW5pbmcgYWxsIGFycmF5IGVsZW1lbnRzLgorICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIFNldAorICAgIG5ld1NldCgKKyAgICAgICAgZmluYWwgT2JqZWN0IFtdICBvYmplY3RzLAorICAgICAgICBmaW5hbCBpbnQgICAgICAgIHN0YXJ0SW5kZXgsCisgICAgICAgIGZpbmFsIGludCAgICAgICAgbnVtSXRlbXMgKQorICAgIHsKKyAgICAgICAgZmluYWwgU2V0ICAgIHNldCAgICA9IG5ldyBIYXNoU2V0KCk7CisKKyAgICAgICAgZm9yKCBpbnQgaSA9IDA7IGkgPCBudW1JdGVtczsgKytpICkKKyAgICAgICAgeworICAgICAgICAgICAgc2V0LmFkZCggb2JqZWN0c1sgc3RhcnRJbmRleCArIGkgXSApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuKCBzZXQgKTsKKyAgICB9CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvc2FtcGxlcy9jb20vc3VuL2FwcHNlcnYvbWFuYWdlbWVudC9zYW1wbGUvU2FtcGxlcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvc2FtcGxlcy9jb20vc3VuL2FwcHNlcnYvbWFuYWdlbWVudC9zYW1wbGUvU2FtcGxlcy5qYXZhCmluZGV4IDljODA2ZjUuLmFiYmNjMzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL3NhbXBsZXMvY29tL3N1bi9hcHBzZXJ2L21hbmFnZW1lbnQvc2FtcGxlL1NhbXBsZXMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL2NvbS9zdW4vYXBwc2Vydi9tYW5hZ2VtZW50L3NhbXBsZS9TYW1wbGVzLmphdmEKQEAgLTcyLDkwOSArNzIsOTA5IEBACiAKIAogLyoqCi0JTWFpbiBjbGFzcyBkZW1vbnN0cmF0aW5nIGEgdmFyaWV0eSBvZiBNQmVhbiBBUEkgKEFNWCkgdXNhZ2VzLgorICAgIE1haW4gY2xhc3MgZGVtb25zdHJhdGluZyBhIHZhcmlldHkgb2YgTUJlYW4gQVBJIChBTVgpIHVzYWdlcy4KICAqLwogcHVibGljIGZpbmFsIGNsYXNzIFNhbXBsZXMKIHsKLQlwcml2YXRlIGZpbmFsIERvbWFpblJvb3QJCQkJbURvbWFpblJvb3Q7CisgICAgcHJpdmF0ZSBmaW5hbCBEb21haW5Sb290ICAgICAgICAgICAgICAgIG1Eb21haW5Sb290OwogCi0JCXB1YmxpYwotCVNhbXBsZXMoIGZpbmFsIERvbWFpblJvb3QJZG9tYWluUm9vdCApCi0JewotCQltRG9tYWluUm9vdAk9IGRvbWFpblJvb3Q7Ci0JfQotCQorICAgICAgICBwdWJsaWMKKyAgICBTYW1wbGVzKCBmaW5hbCBEb21haW5Sb290ICAgIGRvbWFpblJvb3QgKQorICAgIHsKKyAgICAgICAgbURvbWFpblJvb3QgICAgPSBkb21haW5Sb290OworICAgIH0KIAogCi0JCXB1YmxpYyBmaW5hbCBEb21haW5Sb290Ci0JZ2V0RG9tYWluUm9vdCgpCi0JewotCQlyZXR1cm4oIG1Eb21haW5Sb290ICk7Ci0JfQotCQotCQlwdWJsaWMgRG9tYWluQ29uZmlnCi0JZ2V0RG9tYWluQ29uZmlnKCkKLQl7Ci0JCXJldHVybiggZ2V0RG9tYWluUm9vdCgpLmdldERvbWFpbkNvbmZpZygpICk7Ci0JfQotCQotCQlwdWJsaWMgUXVlcnlNZ3IKLQlnZXRRdWVyeU1ncigpCi0JewotCQlyZXR1cm4oIGdldERvbWFpblJvb3QoKS5nZXRRdWVyeU1ncigpICk7Ci0JfQotCQotCS8qKgotCQlQcmludCBhIG1lc3NhZ2UuCi0JICovCi0JCXB1YmxpYyB2b2lkCi0JcHJpbnRsbiggT2JqZWN0IG8gKQotCXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCB0b1N0cmluZyggbyApICk7Ci0JfQotCQotCS8qKgotCQlUdXJuIGFuIG9iamVjdCBpbnRvIGEgdXNlZnVsIFN0cmluZwotCSAqLwotCQlwdWJsaWMgU3RyaW5nCi0JdG9TdHJpbmcoIE9iamVjdCBvICkKLQl7Ci0JCXJldHVybiggU2FtcGxlVXRpbC50b1N0cmluZyggbyApICk7Ci0JfQotCQotCS8qKgotCQlEaXNwbGF5IGEgTWFwIHRvIFN5c3RlbS5vdXQuCi0JICovCi0JCXByaXZhdGUgdm9pZAotCWRpc3BsYXlNYXAoCi0JCWZpbmFsIFN0cmluZwltc2csCi0JCWZpbmFsIE1hcCAJCW0pCi0JewotCQlwcmludGxuKCBtc2cgKyAiOiAiICsgdG9TdHJpbmcoIG0ua2V5U2V0KCkgKSApOwotCX0KIAotCS8qKgotCQlEZW1vbnN0cmF0ZXMgaG93IHRvIGFjY2VzcyB2YXJpb3VzIHR5cGVzIG9mICB7QGxpbmsgQU1YfSBieSBvYnRhaW5pbmcgYSBNYXAgYW5kIHRoZW4gZGlzcGxheWluZyBpdC4KLQkgKi8KLQkJcHVibGljIHZvaWQKLQloYW5kbGVMaXN0KCkKLQl7Ci0JCWZpbmFsIERvbWFpbkNvbmZpZwlkY3AJPSBnZXREb21haW5Db25maWcoKTsKLQkJCi0JCS8vIFRvcC1sZXZlbCBpdGVtcwotCQlwcmludGxuKCAiXG4tLS0gVG9wLWxldmVsIC0tLSBcbiIgKTsKLQkJCi0JCWRpc3BsYXlNYXAoICJDb25maWdDb25maWciLCBkY3AuZ2V0Q29uZmlnQ29uZmlnTWFwKCkgKTsKLQkJCi0JCWRpc3BsYXlNYXAoICJTZXJ2ZXJDb25maWciLCBkY3AuZ2V0U2VydmVyQ29uZmlnTWFwKCkgKTsKLQkJCi0JCWRpc3BsYXlNYXAoICJTdGFuZGFsb25lU2VydmVyQ29uZmlnIiwgZGNwLmdldFN0YW5kYWxvbmVTZXJ2ZXJDb25maWdNYXAoKSApOwotCQkKLQkJZGlzcGxheU1hcCggIkNsdXN0ZXJlZFNlcnZlckNvbmZpZyIsIGRjcC5nZXRDbHVzdGVyZWRTZXJ2ZXJDb25maWdNYXAoKSApOwotCQkKLQkJZGlzcGxheU1hcCggIkNsdXN0ZXJDb25maWciLCBkY3AuZ2V0Q2x1c3RlckNvbmZpZ01hcCgpICk7Ci0JCQotCQkKLQkJLy8gZGVwbG95ZWQgaXRlbXMKLQkJcHJpbnRsbiggIlxuLS0tIERlcGxveWVkSXRlbXMgLS0tIFxuIiApOwotCQlkaXNwbGF5TWFwKCAiSjJFRUFwcGxpY2F0aW9uQ29uZmlnIiwgZGNwLmdldEoyRUVBcHBsaWNhdGlvbkNvbmZpZ01hcCgpICk7Ci0JCWRpc3BsYXlNYXAoICJFSkJNb2R1bGVDb25maWciLCBkY3AuZ2V0RUpCTW9kdWxlQ29uZmlnTWFwKCkgKTsKLQkJZGlzcGxheU1hcCggIldlYk1vZHVsZUNvbmZpZyIsIGRjcC5nZXRXZWJNb2R1bGVDb25maWdNYXAoKSApOwotCQlkaXNwbGF5TWFwKCAiUkFSTW9kdWxlQ29uZmlnIiwgZGNwLmdldFJBUk1vZHVsZUNvbmZpZ01hcCgpICk7Ci0JCWRpc3BsYXlNYXAoICJBcHBDbGllbnRNb2R1bGVDb25maWciLCBkY3AuZ2V0QXBwQ2xpZW50TW9kdWxlQ29uZmlnTWFwKCkgKTsKLQkJZGlzcGxheU1hcCggIkxpZmVjeWNsZU1vZHVsZUNvbmZpZyIsIGRjcC5nZXRMaWZlY3ljbGVNb2R1bGVDb25maWdNYXAoKSApOwotCQkKLQkJCi0JCS8vIHJlc291cmNlcwotCQlwcmludGxuKCAiXG4tLS0gUmVzb3VyY2VzIC0tLSBcbiIgKTsKLQkJCi0JCWRpc3BsYXlNYXAoICJDdXN0b21SZXNvdXJjZUNvbmZpZyIsIGRjcC5nZXRDdXN0b21SZXNvdXJjZUNvbmZpZ01hcCgpICk7Ci0JCWRpc3BsYXlNYXAoICJQZXJzaXN0ZW5jZU1hbmFnZXJGYWN0b3J5UmVzb3VyY2VDb25maWciLAotCQkJZGNwLmdldFBlcnNpc3RlbmNlTWFuYWdlckZhY3RvcnlSZXNvdXJjZUNvbmZpZ01hcCgpICk7Ci0JCWRpc3BsYXlNYXAoICJKTkRJUmVzb3VyY2VDb25maWciLCBkY3AuZ2V0Sk5ESVJlc291cmNlQ29uZmlnTWFwKCkgKTsKLQkJZGlzcGxheU1hcCggIkpNU1Jlc291cmNlQ29uZmlnIiwgZGNwLmdldEpNU1Jlc291cmNlQ29uZmlnTWFwKCkgKTsKLQkJZGlzcGxheU1hcCggIkpEQkNSZXNvdXJjZUNvbmZpZyIsIGRjcC5nZXRKREJDUmVzb3VyY2VDb25maWdNYXAoKSApOwotCQlkaXNwbGF5TWFwKCAiQ29ubmVjdG9yUmVzb3VyY2VDb25maWciLCBkY3AuZ2V0Q29ubmVjdG9yUmVzb3VyY2VDb25maWdNYXAoKSApOwotCQlkaXNwbGF5TWFwKCAiSkRCQ0Nvbm5lY3Rpb25Qb29sQ29uZmlnIiwgZGNwLmdldEpEQkNDb25uZWN0aW9uUG9vbENvbmZpZ01hcCgpICk7Ci0JCWRpc3BsYXlNYXAoICJQZXJzaXN0ZW5jZU1hbmFnZXJGYWN0b3J5UmVzb3VyY2VDb25maWciLAotCQkJZGNwLmdldFBlcnNpc3RlbmNlTWFuYWdlckZhY3RvcnlSZXNvdXJjZUNvbmZpZ01hcCgpICk7Ci0JCWRpc3BsYXlNYXAoICJDb25uZWN0b3JDb25uZWN0aW9uUG9vbENvbmZpZyIsCi0JCQlkY3AuZ2V0Q29ubmVjdG9yQ29ubmVjdGlvblBvb2xDb25maWdNYXAoKSApOwotCQlkaXNwbGF5TWFwKCAiQWRtaW5PYmplY3RSZXNvdXJjZUNvbmZpZyIsIGRjcC5nZXRBZG1pbk9iamVjdFJlc291cmNlQ29uZmlnTWFwKCkgKTsKLQkJZGlzcGxheU1hcCggIlJlc291cmNlQWRhcHRlckNvbmZpZyIsIGRjcC5nZXRSZXNvdXJjZUFkYXB0ZXJDb25maWdNYXAoKSApOwotCQlkaXNwbGF5TWFwKCAiTWFpbFJlc291cmNlQ29uZmlnIiwgZGNwLmdldE1haWxSZXNvdXJjZUNvbmZpZ01hcCgpICk7Ci0JCQotCQkKLQkJLy8gZ2V0IGEgQ29uZmlnQ29uZmlnCi0JCWZpbmFsIENvbmZpZ0NvbmZpZwljb25maWcJPQotCQkJKENvbmZpZ0NvbmZpZylkY3AuZ2V0Q29uZmlnQ29uZmlnTWFwKCkuZ2V0KCAic2VydmVyLWNvbmZpZyIgKTsKLQkJCQorICAgICAgICBwdWJsaWMgZmluYWwgRG9tYWluUm9vdAorICAgIGdldERvbWFpblJvb3QoKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBtRG9tYWluUm9vdCApOworICAgIH0KIAotCQkvLyBIVFRQU2VydmljZQotCQlwcmludGxuKCAiXG4tLS0gSFRUUFNlcnZpY2UgLS0tIFxuIiApOwotCQkKLQkJZmluYWwgSFRUUFNlcnZpY2VDb25maWcgaHR0cFNlcnZpY2UgPSBjb25maWcuZ2V0SFRUUFNlcnZpY2VDb25maWcoKTsKLQkJZGlzcGxheU1hcCggIkhUVFBMaXN0ZW5lcnMiLCBodHRwU2VydmljZS5nZXRIVFRQTGlzdGVuZXJDb25maWdNYXAoKSApOwotCQlkaXNwbGF5TWFwKCAiVmlydHVhbFNlcnZlcnMiLCBodHRwU2VydmljZS5nZXRWaXJ0dWFsU2VydmVyQ29uZmlnTWFwKCkgKTsKLQl9Ci0JCi0JLyoqCi0JCVJldHVybiBhIFNldCBvZiB7QGxpbmsgQU1YfSB3aG9zZSBPYmplY3ROYW1lIGhhcyB0aGUgcHJvcGVydHkKLQkJIDxpPnByb3BlcnR5LW5hbWU8L2k+PTxpPnByb3BlcnR5LXZhbHVlPC9pPi4KLQkJCi0JCUBwYXJhbSBwcm9wZXJ0eU5hbWUKLQkJQHBhcmFtIHByb3BlcnR5VmFsdWUKLQkJQHJldHVybiBTZXQgb2Yge0BsaW5rIEFNWH0KLQkqLwotCQlwdWJsaWMgU2V0Ci0JcXVlcnlXaWxkKAotCQlmaW5hbCBTdHJpbmcgcHJvcGVydHlOYW1lLAotCQlmaW5hbCBTdHJpbmcgcHJvcGVydHlWYWx1ZSkKLQl7Ci0JCWZpbmFsIFN0cmluZ1tdCXByb3BOYW1lcwk9IG5ldyBTdHJpbmdbXSB7IHByb3BlcnR5TmFtZSB9OwotCQlmaW5hbCBTdHJpbmdbXQlwcm9wVmFsdWVzCT0gbmV3IFN0cmluZ1tdeyBwcm9wZXJ0eVZhbHVlIH07Ci0JCQotCQlmaW5hbCBTZXQJYW14cwk9IGdldFF1ZXJ5TWdyKCkucXVlcnlXaWxkU2V0KCBwcm9wTmFtZXMsIHByb3BWYWx1ZXMgKTsKLQkJCi0JCXJldHVybiggYW14cyApOwotCX0KLQkKLQkvKioKLQkJQ2FsbCBxdWVyeVdpbGQoIHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSApIGFuZCBkaXNwbGF5IHRoZSByZXN1bHQuCi0JCQotCQlAcGFyYW0gcHJvcGVydHlOYW1lCi0JCUBwYXJhbSBwcm9wZXJ0eVZhbHVlCi0JKi8KLQkJcHVibGljIHZvaWQKLQlkaXNwbGF5V2lsZCgKLQkJZmluYWwgU3RyaW5nIHByb3BlcnR5TmFtZSwKLQkJZmluYWwgU3RyaW5nIHByb3BlcnR5VmFsdWUpCi0JewotCQlmaW5hbCBTZXQJaXRlbXMJPSBxdWVyeVdpbGQoIHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSApOwotCQkKLQkJcHJpbnRsbiggIlxuLS0tIFF1ZXJpZWQgZm9yICIgKyBwcm9wZXJ0eU5hbWUgKyAiPSIgKyBwcm9wZXJ0eVZhbHVlICsgIiAtLS0iICk7Ci0JCWZpbmFsIEl0ZXJhdG9yCWl0ZXIJPSBpdGVtcy5pdGVyYXRvcigpOwotCQl3aGlsZSAoIGl0ZXIuaGFzTmV4dCgpICkKLQkJewotCQkJZmluYWwgQU1YCWl0ZW0JPSAoQU1YKWl0ZXIubmV4dCgpOwotCQkJCi0JCQlwcmludGxuKCAiajJlZVR5cGU9IiArIGl0ZW0uZ2V0SjJFRVR5cGUoKSArICIsIiArICJuYW1lPSIgKyBpdGVtLmdldE5hbWUoKSApOwotCQl9Ci0JfQotCQotCQlwdWJsaWMgU2V0Ci0JcXVlcnlGb3JKMkVFVHlwZSggZmluYWwgU3RyaW5nIGoyZWVUeXBlICkKLQl7Ci0JCWZpbmFsIFN0cmluZwlwcm9wCT0gVXRpbC5tYWtlSjJFRVR5cGVQcm9wKCBqMmVlVHlwZSApOwotCQlmaW5hbCBTZXQJCWl0ZW1zCT0gZ2V0UXVlcnlNZ3IoKS5xdWVyeVByb3BzU2V0KCBwcm9wICk7Ci0JCQotCQlyZXR1cm4oIGl0ZW1zICk7Ci0JfQotCQotCQlwdWJsaWMgdm9pZAotCWRpc3BsYXlBdmFpbGFibGVDaGlsZFR5cGVzKCBmaW5hbCBTdHJpbmcgajJlZVR5cGUgKQotCXsKLQkJZmluYWwgRG9tYWluUm9vdAkJZG9tYWluUm9vdAk9IGdldERvbWFpblJvb3QoKTsKLQkJCi0JfQotCQotCQlwcml2YXRlIFN0cmluZwotCWdldEluZGVudCggZmluYWwgaW50IG51bSApCi0JewotCQlmaW5hbCBjaGFyW10JaW5kZW50CT0gbmV3IGNoYXJbIG51bSBdOwotCQlmb3IoIGludCBpID0gMDsgaSA8IG51bTsgKytpICkKLQkJewotCQkJaW5kZW50WyBpIF0JPSAnICc7Ci0JCX0KLQkJcmV0dXJuKCBuZXcgU3RyaW5nKCBpbmRlbnQgKSApOwotCX0KLQkKLQkvKioKLQkJRGlzcGxheSB0aGUgajJlZVR5cGUgYW5kIG5hbWUgKGlmIG5vdCB7QGxpbmsgQU1YI05PX05BTUV9KQotCSAqLwotCQlwcml2YXRlIHZvaWQKLQlkaXNwbGF5QU1YKAotCQlmaW5hbCBBTVggYW14LAotCQlmaW5hbCBpbnQJaW5kZW50Q291bnQgKQotCXsKLQkJZmluYWwgU3RyaW5nIGluZGVudAk9IGdldEluZGVudCggaW5kZW50Q291bnQgKTsKLQkJCi0JCWZpbmFsIFN0cmluZwlqMmVlVHlwZQk9IGFteC5nZXRKMkVFVHlwZSgpOwotCQlmaW5hbCBTdHJpbmcJbmFtZQkJPSBhbXguZ2V0TmFtZSgpOwotCQlpZiAoIG5hbWUuZXF1YWxzKCBBTVguTk9fTkFNRSApICkKLQkJewotCQkJcHJpbnRsbiggaW5kZW50ICsgajJlZVR5cGUgKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXByaW50bG4oIGluZGVudCArIGoyZWVUeXBlICsgIj0iICsgbmFtZSApOwotCQl9Ci0JfQotCQotCQlwcml2YXRlIHZvaWQKLQlkaXNwbGF5SGllcmFyY2h5KAotCQlmaW5hbCBDb2xsZWN0aW9uCWFteFNldCwKLQkJZmluYWwgaW50CQkJaW5kZW50Q291bnQgKQotCXsKLQkJZmluYWwgSXRlcmF0b3IJaXRlcgk9IGFteFNldC5pdGVyYXRvcigpOwotCQl3aGlsZSAoIGl0ZXIuaGFzTmV4dCgpICkKLQkJewotCQkJZmluYWwgQU1YCWFteAk9IChBTVgpaXRlci5uZXh0KCk7Ci0JCQlkaXNwbGF5SGllcmFyY2h5KCBhbXgsIGluZGVudENvdW50ICk7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JCURpc3BsYXkgdGhlIGhpZXJhcmNoeSBvZiB7QGxpbmsgQU1YfSBiZWdpbm5pbmcgd2l0aCB0aGUgc3BlY2lmaWVkIG9uZQotCSAqLwotCQlwdWJsaWMgdm9pZAotCWRpc3BsYXlIaWVyYXJjaHkoCi0JCWZpbmFsIEFNWCBhbXgsCi0JCWZpbmFsIGludAlpbmRlbnRDb3VudCApCi0JewotCQlkaXNwbGF5QU1YKCBhbXgsIGluZGVudENvdW50ICk7Ci0JCQotCQlpZiAoIGFteCBpbnN0YW5jZW9mIENvbnRhaW5lciApCi0JCXsKLQkJCS8vIGdldCBNYXBzIG9mIGFsbCBjb250YWluZWQgaXRlbXMKLQkJCWZpbmFsIE1hcAltCT0gKChDb250YWluZXIpYW14KS5nZXRNdWx0aUNvbnRhaW5lZU1hcCggbnVsbCApOworICAgICAgICBwdWJsaWMgRG9tYWluQ29uZmlnCisgICAgZ2V0RG9tYWluQ29uZmlnKCkKKyAgICB7CisgICAgICAgIHJldHVybiggZ2V0RG9tYWluUm9vdCgpLmdldERvbWFpbkNvbmZpZygpICk7CisgICAgfQogCi0JCQkvLyBmb3IgY2xhcml0eSBvZiBkaXNwbGF5LCBzZXBhcmF0ZSBvdXQgdGhvc2UgdGhhdCBhcmUgQ29udGFpbmVycywKLQkJCS8vIGFuZCB0aG9zZSB0aGF0IGFyZSBub3QuCi0JCQlmaW5hbCBTZXQJZGVmZXJyZWQJPSBuZXcgSGFzaFNldCgpOwotCQkJZmluYWwgSXRlcmF0b3IJbWFwc0l0ZXIJPSBtLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAoIG1hcHNJdGVyLmhhc05leHQoKSApCi0JCQl7Ci0JCQkJZmluYWwgTWFwCWluc3RhbmNlc01hcAk9IChNYXApbWFwc0l0ZXIubmV4dCgpOwotCQkJCWZpbmFsIEFNWAlmaXJzdAk9IChBTVgpaW5zdGFuY2VzTWFwLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpOwotCQkJCWlmICggZmlyc3QgaW5zdGFuY2VvZiBDb250YWluZXIgKQotCQkJCXsKLQkJCQkJZGVmZXJyZWQuYWRkKCBpbnN0YW5jZXNNYXAgKTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJZGlzcGxheUhpZXJhcmNoeSggaW5zdGFuY2VzTWFwLnZhbHVlcygpLCBpbmRlbnRDb3VudCArIDIpOwotCQkJCX0KLQkJCX0KLQkJCQotCQkJLy8gZGlzcGxheSBkZWZlcnJlZCBpdGVtcwotCQkJZmluYWwgSXRlcmF0b3IJaXRlcgk9IGRlZmVycmVkLml0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAoIGl0ZXIuaGFzTmV4dCgpICkKLQkJCXsKLQkJCQlmaW5hbCBNYXAJaW5zdGFuY2VzTWFwCT0gKE1hcClpdGVyLm5leHQoKTsKLQkJCQlkaXNwbGF5SGllcmFyY2h5KCBpbnN0YW5jZXNNYXAudmFsdWVzKCksIGluZGVudENvdW50ICsgMik7Ci0JCQl9Ci0JCX0KLQkJCi0JfQotCQotCS8qKgotCQlEaXNwbGF5IHRoZSBlbnRpcmUgTUJlYW4gaGllcmFyY2h5LgotCSAqLwotCQlwdWJsaWMgdm9pZAotCWRpc3BsYXlIaWVyYXJjaHkoKQotCXsKLQkJZGlzcGxheUhpZXJhcmNoeSggZ2V0RG9tYWluUm9vdCgpLCAwKTsKLQl9Ci0JCi0JLyoqCi0JCURpc3BsYXkgdGhlIE1CZWFuIGhpZXJhcmNoeSBiZWdpbm5pbmcgd2l0aCBqMmVlVHlwZS4KLQkgKi8KLQkJcHVibGljIHZvaWQKLQlkaXNwbGF5SGllcmFyY2h5KCBmaW5hbCBTdHJpbmcgajJlZVR5cGUgKQotCXsKLQkJZmluYWwgU2V0CWl0ZW1zCT0gZ2V0UXVlcnlNZ3IoKS5xdWVyeUoyRUVUeXBlU2V0KCBqMmVlVHlwZSApOwotCQkKLQkJaWYgKCBpdGVtcy5zaXplKCkgPT0gMCApCi0JCXsKLQkJCXByaW50bG4oICJObyB7QGxpbmsgQU1YfSBvZiBqMmVlVHlwZSAiICsgU2FtcGxlVXRpbC5xdW90ZSggajJlZVR5cGUgKSArICIgZm91bmQiICk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlkaXNwbGF5SGllcmFyY2h5KCBpdGVtcywgMCk7Ci0JCX0KLQl9Ci0JCi0JCi0JLyoqCi0JCURpc3BsYXkgYWxsIE1CZWFucyB0aGF0IGhhdmUgajJlZVR5cGU9PGoyZWVUeXBlPgotCSAqLwotCQlwdWJsaWMgdm9pZAotCWRpc3BsYXlKMkVFVHlwZSggZmluYWwgU3RyaW5nIGoyZWVUeXBlICkKLQl7Ci0JCWZpbmFsIFNldAkJaXRlbXMJPSBxdWVyeUZvckoyRUVUeXBlKCBqMmVlVHlwZSApOwotCQkKLQkJcHJpbnRsbiggIlxuLS0tIFF1ZXJpZWQgZm9yIGoyZWVUeXBlPSIgKyBqMmVlVHlwZSArICIgLS0tIiApOwotCQkKLQkJZmluYWwgSXRlcmF0b3IJaXRlcgk9IGl0ZW1zLml0ZXJhdG9yKCk7Ci0JCXdoaWxlICggaXRlci5oYXNOZXh0KCkgKQotCQl7Ci0JCQlmaW5hbCBBTVgJaXRlbQk9IChBTVgpaXRlci5uZXh0KCk7Ci0JCQkKLQkJCS8vIHRoZXkgbWF5IG9yIG1heSBub3QgaGF2ZSB1bmlxdWUgbmFtZXMsIHNvIHNob3cgT2JqZWN0TmFtZXMKLQkJCXByaW50bG4oIFV0aWwuZ2V0T2JqZWN0TmFtZSggaXRlbSApICk7Ci0JCX0KLQkJcHJpbnRsbiggIiIgKTsKLQl9Ci0JCi0JCi0JLyoqCi0JCURpc3BsYXkgYWxsIEF0dHJpYnV0ZXMgaW4gdGhlIHtAbGluayBBTVh9LgotCSAqLwotCQlwdWJsaWMgdm9pZAotCWRpc3BsYXlBbGxBdHRyaWJ1dGVzKCBmaW5hbCBBTVggaXRlbSApCi0JewotCQlwcmludGxuKCAiXG4tLS0gQXR0cmlidXRlcyBmb3IgIiArIGl0ZW0uZ2V0SjJFRVR5cGUoKSArICI9IiArIGl0ZW0uZ2V0TmFtZSgpICsgIiAtLS0iICk7Ci0JCQotCQlmaW5hbCBFeHRyYQlleHRyYQk9IFV0aWwuZ2V0RXh0cmEoIGl0ZW0gKTsKLQkJCi0JCWZpbmFsIE1hcAlhdHRycwk9IGV4dHJhLmdldEFsbEF0dHJpYnV0ZXMoKTsKLQkJCi0JCWZpbmFsIEl0ZXJhdG9yCWl0ZXIJPSBhdHRycy5rZXlTZXQoKS5pdGVyYXRvcigpOwotCQl3aGlsZSAoIGl0ZXIuaGFzTmV4dCgpICkKLQkJewotCQkJZmluYWwgU3RyaW5nCW5hbWUJPSAoU3RyaW5nKWl0ZXIubmV4dCgpOwotCQkJZmluYWwgT2JqZWN0CXZhbHVlCT0gYXR0cnMuZ2V0KCBuYW1lICk7Ci0JCQkKLQkJCXByaW50bG4oIG5hbWUgKyAiPSIgKyB0b1N0cmluZyggdmFsdWUgKSApOwotCQl9Ci0JfQotCQotCS8qKgotCQlEaXNwbGF5IGFsbCBBdHRyaWJ1dGVzIGluIHRoZSB7QGxpbmsgQU1YfS4KLQkgKi8KLQkJcHVibGljIHZvaWQKLQlkaXNwbGF5QWxsQXR0cmlidXRlcyggZmluYWwgU3RyaW5nIGoyZWVUeXBlICkKLQl7Ci0JCWZpbmFsIFNldAkJaXRlbXMJPSBxdWVyeUZvckoyRUVUeXBlKCBqMmVlVHlwZSApOwotCQkKLQkJaWYgKCBpdGVtcy5zaXplKCkgPT0gMCApCi0JCXsKLQkJCXByaW50bG4oICJObyB7QGxpbmsgQU1YfSBvZiBqMmVlVHlwZSAiICsgU2FtcGxlVXRpbC5xdW90ZSggajJlZVR5cGUgKSArICIgZm91bmQiICk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlmaW5hbCBJdGVyYXRvcglpdGVyCT0gaXRlbXMuaXRlcmF0b3IoKTsKLQkJCXdoaWxlICggaXRlci5oYXNOZXh0KCkgKQotCQkJewotCQkJCWZpbmFsIEFNWAlhbXgJPSAoQU1YKWl0ZXIubmV4dCgpOwotCQkJCQotCQkJCWRpc3BsYXlBbGxBdHRyaWJ1dGVzKCBhbXggKTsKLQkJCQlwcmludGxuKCAiIiApOwotCQkJfQotCQl9Ci0JfQotCQotCQotCS8qKgotCQlEaXNwbGF5IGFsbCBkb3R0ZWQgbmFtZXMuCi0JICovCi0JCXB1YmxpYyB2b2lkCi0JZGlzcGxheURvdHRlZE5hbWVzKCkKLQl7Ci0JCWZpbmFsIENvbmZpZ0RvdHRlZE5hbWVzCWNvbmZpZ0RvdHRlZE5hbWVzCT0gZ2V0RG9tYWluUm9vdCgpLmdldENvbmZpZ0RvdHRlZE5hbWVzKCk7Ci0JCUF0dHJpYnV0ZVtdIHJlc3VsdAk9IChBdHRyaWJ1dGVbXSljb25maWdEb3R0ZWROYW1lcy5kb3R0ZWROYW1lR2V0KCAiKiIgKTsKLQkJcHJpbnRsbiggIi0tLSBDb25maWdEb3R0ZWROYW1lcyAtLS0iICk7Ci0JCXByaW50bG4oIFNhbXBsZVV0aWwuYXJyYXlUb1N0cmluZyggcmVzdWx0LCAiIiwgIlxuIiApICk7Ci0JCQotCQlwcmludGxuKCAiXG4tLS0gTW9uaXRvcmluZ0RvdHRlZE5hbWVzIC0tLSIgKTsKLQkJCi0JCWZpbmFsIE1vbml0b3JpbmdEb3R0ZWROYW1lcwltb25Eb3R0ZWROYW1lcwk9IGdldERvbWFpblJvb3QoKS5nZXRNb25pdG9yaW5nRG90dGVkTmFtZXMoKTsKLQkJcmVzdWx0CT0gKEF0dHJpYnV0ZVtdKW1vbkRvdHRlZE5hbWVzLmRvdHRlZE5hbWVHZXQoICIqIiApOwotCQlwcmludGxuKCBTYW1wbGVVdGlsLmFycmF5VG9TdHJpbmcoIHJlc3VsdCwgIiIsICJcbiIgKSApOwotCX0KLQkKLQkKLQkvKioKLQkJRGVtb25zdHJhdGUgaG93IHRvIHVzZSB0aGUge0BsaW5rIGNvbS5zdW4uYXBwc2Vydi5tYW5hZ2VtZW50LmJhc2UuUXVlcnlNZ3J9IGZhY2lsaXRpZXMuCi0JICovCi0JCXB1YmxpYyB2b2lkCi0JZGVtb1F1ZXJ5KCkKLQl7Ci0JCWRpc3BsYXlXaWxkKCBBTVguSjJFRV9UWVBFX0tFWSwgIlgtKlJlc291cmNlQ29uZmlnIiApOwotCQlkaXNwbGF5V2lsZCggQU1YLkoyRUVfVFlQRV9LRVksICJYLSpTZXJ2ZXJDb25maWciICk7Ci0JCQotCQlkaXNwbGF5SjJFRVR5cGUoIFhUeXBlcy5TU0xfQ09ORklHICk7Ci0JCWRpc3BsYXlKMkVFVHlwZSggWFR5cGVzLkNMVVNURVJfQ09ORklHICk7Ci0JfQorICAgICAgICBwdWJsaWMgUXVlcnlNZ3IKKyAgICBnZXRRdWVyeU1ncigpCisgICAgeworICAgICAgICByZXR1cm4oIGdldERvbWFpblJvb3QoKS5nZXRRdWVyeU1ncigpICk7CisgICAgfQogCi0JCi0JCXByaXZhdGUgT2JqZWN0Ci0JdXBsb2FkQXJjaGl2ZSggZmluYWwgRmlsZSBhcmNoaXZlICApCi0JCXRocm93cyBJT0V4Y2VwdGlvbgotCXsKLQkJZmluYWwgRmlsZUlucHV0U3RyZWFtCWlucHV0CT0gbmV3IEZpbGVJbnB1dFN0cmVhbSggYXJjaGl2ZSApOwotCQlmaW5hbCBsb25nCWxlbmd0aAk9IGlucHV0LmF2YWlsYWJsZSgpOwotCQlmaW5hbCBEZXBsb3ltZW50TWdyCW1ncgk9IGdldERvbWFpblJvb3QoKS5nZXREZXBsb3ltZW50TWdyKCk7Ci0JCWZpbmFsIE9iamVjdAl1cGxvYWRJRAk9IG1nci5pbml0aWF0ZUZpbGVVcGxvYWQoIGxlbmd0aCApOwotCQkJCi0JCXRyeQotCQl7Ci0JCQlmaW5hbCBpbnQJY2h1bmtTaXplCT0gMjU2ICogMTAyNDsKLQkJCWxvbmcgcmVtYWluaW5nCT0gbGVuZ3RoOwotCQkJd2hpbGUgKCByZW1haW5pbmcgIT0gMCApCi0JCQl7Ci0JCQkJZmluYWwgaW50CWFjdHVhbAk9IHJlbWFpbmluZyA8IGNodW5rU2l6ZSA/IChpbnQpcmVtYWluaW5nIDogY2h1bmtTaXplOwotCQkJCQotCQkJCWZpbmFsIGJ5dGVbXQlieXRlcwk9IG5ldyBieXRlWyBhY3R1YWwgXTsKLQkJCQlmaW5hbCBpbnQJbnVtCT0gaW5wdXQucmVhZCggYnl0ZXMgKTsKLQkJCQlpZiAoIG51bSAhPSBhY3R1YWwgKQotCQkJCXsKLQkJCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKCk7Ci0JCQkJfQorICAgIC8qKgorICAgICAgICBQcmludCBhIG1lc3NhZ2UuCisgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkCisgICAgcHJpbnRsbiggT2JqZWN0IG8gKQorICAgIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCB0b1N0cmluZyggbyApICk7CisgICAgfQogCi0JCQkJbWdyLnVwbG9hZEJ5dGVzKCB1cGxvYWRJRCwgYnl0ZXMgKTsKLQkJCQlyZW1haW5pbmcJLT0gYWN0dWFsOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkKLQkJewotCQkJaW5wdXQuY2xvc2UoKTsKLQkJfQotCQkKLQkJcmV0dXJuKCB1cGxvYWRJRCApOwotCX0KLQkKLQkKLQkJcHJpdmF0ZSBmaW5hbCBTdHJpbmcKLQlnZXRBcHBOYW1lKCBmaW5hbCBTdHJpbmcgYXJjaGl2ZU5hbWUgKQotCXsKLQkJU3RyaW5nCXJlc3VsdAk9IGFyY2hpdmVOYW1lOwotCQkKLQkJZmluYWwgaW50CWlkeAk9IGFyY2hpdmVOYW1lLmxhc3RJbmRleE9mKCAiLiIgKTsKLQkJaWYgKCBpZHggPiAxICkKLQkJewotCQkJcmVzdWx0CT0gYXJjaGl2ZU5hbWUuc3Vic3RyaW5nKCAwLCBpZHggKTsKLQkJfQotCQkKLQkJcmV0dXJuKCByZXN1bHQgKTsKLQl9Ci0JCi0JLyoqCi0JCURlcGxveSBhbiBhcmNoaXZlLgotCQk8cD4KLQkJVG8gZGVwbG95LCB5b3Ugd2lsbCBuZWVkIGFuIGFyY2hpdmUgdG8gZGVwbG95LiAgQSByZWNvbW1lbmRlZCBzYW1wbGUgbWF5IGJlIGZvdW5kIGF0OgotCQk8aT5JTlNUQUxMX1JPT1Q8L2k+L3NhbXBsZXMvZWpiL3N0YXRlbGVzcy9hcHBzL3NpbXBsZS5lYXIKLQkJPHA+Ci0JCVRoaXMgc2FtcGxlIGRlcGxveXMgdGhlIGFyY2hpdmUgdG8gdGhlIGRvbWFpbiwgYnV0IGRvZXMgbm90IGNyZWF0ZSBhbnkgcmVmZXJlbmNlcwotCQl0byBpdCwgc28gaXQgd2lsbCBub3QgYWN0dWFsbHkgYmUgYXNzb2NpYXRlZCB3aXRoIGFueSBzZXJ2ZXIuCi0JCTxwPgotCQlUbyBhc3NvY2lhdGUgYW4gYXBwbGljYXRpb24gd2l0aCBhIHNlcnZlciwgdXNlCi0JCXtAbGluayBTdGFuZGFsb25lU2VydmVyQ29uZmlnI2NyZWF0ZURlcGxveWVkSXRlbVJlZkNvbmZpZ30KLQkJQHNlZSBjb20uc3VuLmFwcHNlcnYubWFuYWdlbWVudC5jb25maWcuU3RhbmRhbG9uZVNlcnZlckNvbmZpZwotCQlAc2VlIGNvbS5zdW4uYXBwc2Vydi5tYW5hZ2VtZW50LmNvbmZpZy5EZXBsb3llZEl0ZW1SZWZDb25maWdDUgotCSAqLwotCQlwdWJsaWMgdm9pZAotCWRlcGxveSggZmluYWwgRmlsZSBhcmNoaXZlICkKLQkJdGhyb3dzIElPRXhjZXB0aW9uCi0JewotCQlmaW5hbCBPYmplY3QJdXBsb2FkSUQJPSB1cGxvYWRBcmNoaXZlKCBhcmNoaXZlICk7Ci0JCWZpbmFsIERlcGxveW1lbnRNZ3IJbWdyCT0gZ2V0RG9tYWluUm9vdCgpLmdldERlcGxveW1lbnRNZ3IoKTsKLQkJCi0JCWZpbmFsIE9iamVjdAlkZXBsb3lJRAk9IG1nci5pbml0RGVwbG95KCApOwotCQlmaW5hbCBEZXBsb3lOb3RpZmljYXRpb25MaXN0ZW5lciBteUxpc3RlbmVyCT0gbmV3IERlcGxveU5vdGlmaWNhdGlvbkxpc3RlbmVyKCBkZXBsb3lJRCk7Ci0JCW1nci5hZGROb3RpZmljYXRpb25MaXN0ZW5lciggbXlMaXN0ZW5lciwgbnVsbCwgbnVsbCk7Ci0JCQotCQl0cnkKLQkJewotCQkJZmluYWwgTWFwCW9wdGlvbnMJPSBuZXcgSGFzaE1hcCgpOwotCQkJCi0JCQlmaW5hbCBTdHJpbmcJYXJjaGl2ZU5hbWUJPSBhcmNoaXZlLmdldE5hbWUoKTsKLQkJCWZpbmFsIFN0cmluZwlkZXBsb3lOYW1lCT0gZ2V0QXBwTmFtZSggYXJjaGl2ZU5hbWUgKTsKLQkJCVNhbXBsZVV0aWwucHJpbnRsbiggIkRlcGxveWluZyAiICsgYXJjaGl2ZU5hbWUgKyAiIGFzICIgKyBkZXBsb3lOYW1lICk7Ci0JCQkKLQkJCW9wdGlvbnMucHV0KCBEZXBsb3ltZW50TWdyLkRFUExPWV9PUFRJT05fTkFNRV9LRVksIGRlcGxveU5hbWUgKTsKLQkJCW9wdGlvbnMucHV0KCBEZXBsb3ltZW50TWdyLkRFUExPWV9PUFRJT05fVkVSSUZZX0tFWSwgQm9vbGVhbi5UUlVFLnRvU3RyaW5nKCkgKTsKLQkJCW9wdGlvbnMucHV0KCBEZXBsb3ltZW50TWdyLkRFUExPWV9PUFRJT05fREVTQ1JJUFRJT05fS0VZLCAiZGVzY3JpcHRpb24iICk7Ci0JCQkKLQkJCQotCQkJbWdyLnN0YXJ0RGVwbG95KCBkZXBsb3lJRCwgdXBsb2FkSUQsIG51bGwsIG9wdGlvbnMpOwotCQkJCi0JCQl3aGlsZSAoICEgbXlMaXN0ZW5lci5pc0NvbXBsZXRlZCgpICkKLQkJCXsKLQkJCQl0cnkKLQkJCQl7Ci0JCQkJCXByaW50bG4oICJkZXBsb3k6IHdhaXRpbmcgZm9yIGRlcGxveSBvZiAiICsgYXJjaGl2ZSk7Ci0JCQkJCVRocmVhZC5zbGVlcCggMTAwMCApOwotCQkJCX0KLQkJCQljYXRjaCggSW50ZXJydXB0ZWRFeGNlcHRpb24gZSApCi0JCQkJewotCQkJCX0KLQkJCX0KLQkJCQotCQkJZmluYWwgRGVwbG95bWVudFN0YXR1cwlzdGF0dXMJPSBteUxpc3RlbmVyLmdldERlcGxveW1lbnRTdGF0dXMoKTsKLQkJCWZpbmFsIE1hcAlhZGRpdGlvbmFsU3RhdHVzCT0gc3RhdHVzLmdldEFkZGl0aW9uYWxTdGF0dXMoKTsKLQkJCWZpbmFsIFN0cmluZwltb2R1bGVJRAk9Ci0JCQkJKFN0cmluZylhZGRpdGlvbmFsU3RhdHVzLmdldCggRGVwbG95bWVudFN0YXR1cy5NT0RVTEVfSURfS0VZICk7Ci0JCQkKLQkJCVNhbXBsZVV0aWwucHJpbnRsbiggIkRlcGxveWVkICIgKyBxdW90ZShhcmNoaXZlTmFtZSkgKyAiIGFzICIgKyBxdW90ZShkZXBsb3lOYW1lKSArCi0JCQkJICI6IHN0YXR1cz0iICsgc3RhdHVzLmdldFN0YWdlU3RhdHVzKCkgKyAiLCBtb2R1bGVJRCA9ICIgKyBxdW90ZShtb2R1bGVJRCkgKwotCQkJCSAiLCBBZGRpdGlvbmFsU3RhdHVzPSIgKyBTYW1wbGVVdGlsLm1hcFRvU3RyaW5nKCBhZGRpdGlvbmFsU3RhdHVzLCAiICIpICk7Ci0JCQkKLQkJCWlmICggISBkZXBsb3lOYW1lLmVxdWFscyggbW9kdWxlSUQgKSApCi0JCQl7Ci0JCQkJU2FtcGxlVXRpbC5wcmludGxuKCAiV0FSTklORzogcmVxdWVzdGVkIG5hbWUgb2YgIiArIHF1b3RlKGRlcGxveU5hbWUpICsKLQkJCQkJIiBoYXMgbm90IGJlZW4gdXNlZCwgYWN0dWFsIG5hbWUgPSAiICsgcXVvdGUobW9kdWxlSUQpICsKLQkJCQkJIiwgc2VlIGJ1ZyAjNjIxODcxNCIgKTsKLQkJCX0KLQkJCQotCQkJaWYgKCBzdGF0dXMuZ2V0U3RhZ2VUaHJvd2FibGUoKSAhPSBudWxsICkKLQkJCXsKLQkJCQlzdGF0dXMuZ2V0U3RhZ2VUaHJvd2FibGUoKS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5Ci0JCXsKLQkJCXRyeQotCQkJewotCQkJCW1nci5yZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lciggbXlMaXN0ZW5lciApOwotCQkJfQotCQkJY2F0Y2goIEV4Y2VwdGlvbiBlICkKLQkJCXsKLQkJCX0KLQkJfQotCX0KLQkKLQkJcHJpdmF0ZSBTdHJpbmcKLQlxdW90ZSggZmluYWwgU3RyaW5nIHMgKQotCXsKLQkJcmV0dXJuIFNhbXBsZVV0aWwucXVvdGUoIHMgKTsKLQl9Ci0JCi0JLyoqCi0JCVVuZGVwbG95cyBhIGRlcGxveWVkIG1vZHVsZS4KLQkgKi8KLQkJcHVibGljIHZvaWQKLQl1bmRlcGxveSggZmluYWwgU3RyaW5nIG1vZHVsZU5hbWUgKQotCQl0aHJvd3MgSU9FeGNlcHRpb24KLQl7Ci0JCWZpbmFsIERlcGxveW1lbnRNZ3IJbWdyCT0gZ2V0RG9tYWluUm9vdCgpLmdldERlcGxveW1lbnRNZ3IoKTsKLQkJCi0JCWZpbmFsIE1hcAlzdGF0dXNEYXRhCT0gbWdyLnVuZGVwbG95KCBtb2R1bGVOYW1lLCBudWxsICk7Ci0JCWZpbmFsIERlcGxveW1lbnRTdGF0dXMJc3RhdHVzCT0gCi0JCQlEZXBsb3ltZW50U3VwcG9ydC5tYXBUb0RlcGxveW1lbnRTdGF0dXMoIHN0YXR1c0RhdGEgKTsKLQkJCQotCQlwcmludGxuKCAiVW5kZXBsb3ltZW50IHJlc3VsdDogIiArIHN0YXR1cy5nZXRTdGFnZVN0YXR1cygpICk7Ci0JCWlmICggc3RhdHVzLmdldFN0YWdlVGhyb3dhYmxlKCkgIT0gbnVsbCApCi0JCXsKLQkJCXN0YXR1cy5nZXRTdGFnZVRocm93YWJsZSgpLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCQotCS8qKgotCQlHZXQgYSBKMkVFU2VydmVyIGJ5IG5hbWUuCi0JICovCi0JCXB1YmxpYyBKMkVFU2VydmVyCi0JZ2V0SjJFRVNlcnZlciggZmluYWwgU3RyaW5nIHNlcnZlck5hbWUgKQotCXsKLQkJZmluYWwgSjJFRURvbWFpbglqMmVlRG9tYWluCT0gZ2V0RG9tYWluUm9vdCgpLmdldEoyRUVEb21haW4oKTsKLQkJZmluYWwgTWFwCQkJc2VydmVycwk9IGoyZWVEb21haW4uZ2V0U2VydmVyTWFwKCk7Ci0JCWZpbmFsIEoyRUVTZXJ2ZXIJc2VydmVyCT0gKEoyRUVTZXJ2ZXIpc2VydmVycy5nZXQoIHNlcnZlck5hbWUgKTsKLQkJCi0JCWlmICggc2VydmVyID09IG51bGwgKQotCQl7Ci0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCBzZXJ2ZXJOYW1lICk7Ci0JCX0KLQkJCi0JCXJldHVybiggc2VydmVyICk7Ci0JfQotCQotCS8qKgotCQlDcmVhdGUgYSBzdGFuZGFsb25lIHNlcnZlci4KLQkJCi0JCUBwYXJhbSBjb25maWdOYW1lCi0JICovCi0JCXB1YmxpYyBDb25maWdDb25maWcKLQljcmVhdGVDb25maWcoIGZpbmFsIFN0cmluZyBjb25maWdOYW1lICkKLQl7Ci0JCWZpbmFsIENvbmZpZ0NvbmZpZwljb25maWcJPSBnZXREb21haW5Db25maWcoKS5jcmVhdGVDb25maWdDb25maWcoIGNvbmZpZ05hbWUsIG51bGwgKTsKLQkJcmV0dXJuKCBjb25maWcgKTsKLQl9Ci0JCi0JLyoqCi0JCUNyZWF0ZSBhIHN0YW5kYWxvbmUgc2VydmVyLgotCQkKLQkJQHBhcmFtIHNlcnZlck5hbWUKLQkgKi8KLQkJcHVibGljIFN0YW5kYWxvbmVTZXJ2ZXJDb25maWcKLQljcmVhdGVTZXJ2ZXIoCi0JCWZpbmFsIFN0cmluZwlzZXJ2ZXJOYW1lLAotCQlmaW5hbCBTdHJpbmcJY29uZmlnTmFtZSApCi0JewotCQlmaW5hbCBTdHJpbmcJbm9kZUFnZW50TmFtZQk9IG51bGw7Ci0JCQotCQlmaW5hbCBTdGFuZGFsb25lU2VydmVyQ29uZmlnCXNlcnZlcgk9IChTdGFuZGFsb25lU2VydmVyQ29uZmlnKQotCQkJZ2V0RG9tYWluQ29uZmlnKCkuY3JlYXRlU3RhbmRhbG9uZVNlcnZlckNvbmZpZyggc2VydmVyTmFtZSwgbm9kZUFnZW50TmFtZSwgY29uZmlnTmFtZSwgbnVsbCApOwotCQkKLQkJcmV0dXJuKCBzZXJ2ZXIgKTsKLQl9Ci0JCi0JCXB1YmxpYyBTdGFuZGFsb25lU2VydmVyQ29uZmlnCi0JY3JlYXRlU2VydmVyKCBmaW5hbCBTdHJpbmcJc2VydmVyTmFtZSApCi0JewotCQlmaW5hbCBDb25maWdDb25maWcJY29uZmlnCT0gY3JlYXRlQ29uZmlnKCBzZXJ2ZXJOYW1lICsgIi1jb25maWciICk7Ci0JCQotCQlmaW5hbCBTdGFuZGFsb25lU2VydmVyQ29uZmlnCXNlcnZlcgk9IGNyZWF0ZVNlcnZlciggc2VydmVyTmFtZSwgY29uZmlnLmdldE5hbWUoKSApOwotCQlyZXR1cm4oIHNlcnZlciApOwotCX0KLQkKLQkKLQkvKioKLQkJU3RhcnQgYSBzZXJ2ZXIuCi0JICovCi0JCXB1YmxpYyB2b2lkCi0Jc3RhcnRTZXJ2ZXIoIGZpbmFsIFN0cmluZyBzZXJ2ZXJOYW1lICkKLQl7Ci0JCWZpbmFsIEoyRUVTZXJ2ZXIJc2VydmVyCT0gZ2V0SjJFRVNlcnZlciggc2VydmVyTmFtZSApOwotCQkKLQkJc2VydmVyLnN0YXJ0KCk7Ci0JfQotCQotCS8qKgotCQlTdG9wIGEgc2VydmVyLgotCSAqLwotCQlwdWJsaWMgdm9pZAotCXN0b3BTZXJ2ZXIoIGZpbmFsIFN0cmluZyBzZXJ2ZXJOYW1lICkKLQl7Ci0JCWZpbmFsIEoyRUVTZXJ2ZXIJc2VydmVyCT0gZ2V0SjJFRVNlcnZlciggc2VydmVyTmFtZSApOwotCQkKLQkJc2VydmVyLnN0b3AoKTsKLQl9Ci0JCi0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2V0CUxFR0FMX01PTgk9Ci0JCUNvbGxlY3Rpb25zLnVubW9kaWZpYWJsZVNldCggU2FtcGxlVXRpbC5uZXdTZXQoIG5ldyBTdHJpbmdbXQotCXsKLQkJTW9kdWxlTW9uaXRvcmluZ0xldmVsVmFsdWVzLkhJR0gsCi0JCU1vZHVsZU1vbml0b3JpbmdMZXZlbFZhbHVlcy5MT1csCi0JCU1vZHVsZU1vbml0b3JpbmdMZXZlbFZhbHVlcy5PRkYsCi0JfSApKTsKLQkJCi0JLyoqCi0JCVNldHMgdGhlIG1vbml0b3Jpbmcgc3RhdGUgZm9yIGFsbCBhdmFpbGFibGUgbW9kdWxlcy4KLQkJCi0JCUBwYXJhbSBjb25maWdOYW1lCWNvbmZpZ3VyYXRpb24gZWxlbWVudCBvbiB3aGljaCB0byBvcGVyYXRlCi0JCUBwYXJhbSBzdGF0ZQkJb25lIG9mIEhJR0gsIExPVywgT0ZGCi0JICovCi0JCXB1YmxpYyB2b2lkCi0Jc2V0TW9uaXRvcmluZygKLQkJZmluYWwgU3RyaW5nCWNvbmZpZ05hbWUsCi0JCWZpbmFsIFN0cmluZwkgc3RhdGUgKQotCXsKLQkJaWYgKCAhIExFR0FMX01PTi5jb250YWlucyggc3RhdGUgKSApCi0JCXsKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIHN0YXRlICk7Ci0JCX0KLQkJCi0JCWZpbmFsIENvbmZpZ0NvbmZpZwljb25maWcJPQotCQkJKENvbmZpZ0NvbmZpZylnZXREb21haW5Db25maWcoKS5nZXRDb25maWdDb25maWdNYXAoKS5nZXQoIGNvbmZpZ05hbWUgKTsKLQkJCi0JCWZpbmFsIE1vZHVsZU1vbml0b3JpbmdMZXZlbHNDb25maWcJbW9uCT0KLQkJCWNvbmZpZy5nZXRNb25pdG9yaW5nU2VydmljZUNvbmZpZygpLmdldE1vZHVsZU1vbml0b3JpbmdMZXZlbHNDb25maWcoKTsKLQkJCi0JCS8vIHNldCBhbGwgbW9kdWxlcyB0byB0aGUgc2FtZSBzdGF0ZQotCQltb24uc2V0Q29ubmVjdG9yQ29ubmVjdGlvblBvb2woIHN0YXRlICk7Ci0JCW1vbi5zZXRUaHJlYWRQb29sKCBzdGF0ZSApOwotCQltb24uc2V0SFRUUFNlcnZpY2UoIHN0YXRlICk7Ci0JCW1vbi5zZXRKREJDQ29ubmVjdGlvblBvb2woIHN0YXRlICk7Ci0JCW1vbi5zZXRPUkIoIHN0YXRlICk7Ci0JCW1vbi5zZXRUcmFuc2FjdGlvblNlcnZpY2UoIHN0YXRlICk7Ci0JCW1vbi5zZXRXZWJDb250YWluZXIoIHN0YXRlICk7Ci0JCW1vbi5zZXRFSkJDb250YWluZXIoIHN0YXRlICk7Ci0JfQotCQotCS8qKgotCQlHZXQgYSBNYXAgb2YgPGk+cHJvcGVydHktbmFtZTwvaT49PGk+cHJvcGVydHktdmFsdWU8L2k+LgotCQkKLQkJQHBhcmFtIHBhCWEgUHJvcGVydGllc0FjY2VzcwotCSAqLwotCQlwdWJsaWMgTWFwCi0JZ2V0UHJvcGVydGllcyggZmluYWwgUHJvcGVydGllc0FjY2VzcyBwYSApCi0JewotCQlmaW5hbCBIYXNoTWFwCW0JPSBuZXcgSGFzaE1hcCgpOwotCQkKLQkJZmluYWwgU3RyaW5nW10JbmFtZXMJPSBwYS5nZXRQcm9wZXJ0eU5hbWVzKCk7Ci0JCWZvciggaW50IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kgKQotCQl7Ci0JCQltLnB1dCggbmFtZXNbIGkgXSwgcGEuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZXNbIGkgXSApICk7Ci0JCX0KLQkJCi0JCXJldHVybiggbSApOwotCX0KLQkKLQkvKioKLQkJRGlzcGxheSBhbGwgcHJvcGVydGllcyBmb3VuZCBvbiBhbGwge0BsaW5rIEFNWH0uCi0JCQotCQlAc2VlICNnZXRQcm9wZXJ0aWVzKFByb3BlcnRpZXNBY2Nlc3MpCi0JCUBzZWUgUHJvcGVydGllc0FjY2VzcyNnZXRQcm9wZXJ0eU5hbWVzCi0JICovCi0JCXB1YmxpYyB2b2lkCi0JZGlzcGxheUFsbFByb3BlcnRpZXMoICkKLQl7Ci0JCWZpbmFsIEl0ZXJhdG9yCWl0ZXIJPSBnZXRRdWVyeU1ncigpLnF1ZXJ5QWxsU2V0KCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKCBpdGVyLmhhc05leHQoKSApCi0JCXsKLQkJCWZpbmFsIEFNWAlhbXgJPSAoQU1YKWl0ZXIubmV4dCgpOwotCQkJCi0JCQlpZiAoIGFteCBpbnN0YW5jZW9mIFByb3BlcnRpZXNBY2Nlc3MgKQotCQkJewotCQkJCWZpbmFsIFByb3BlcnRpZXNBY2Nlc3MJcGEJPSAoUHJvcGVydGllc0FjY2VzcylhbXg7Ci0JCQkJCi0JCQkJZmluYWwgTWFwCXByb3BzCT0gZ2V0UHJvcGVydGllcyggcGEgKTsKLQkJCQlpZiAoIHByb3BzLmtleVNldCgpLnNpemUoKSAhPSAwICkKLQkJCQl7Ci0JCQkJCXByaW50bG4oICJcblByb3BlcnRpZXMgZm9yOiAiICsgVXRpbC5nZXRPYmplY3ROYW1lKCAoQU1YKXBhICkgKTsKLQkJCQkJcHJpbnRsbiggU2FtcGxlVXRpbC5tYXBUb1N0cmluZyggZ2V0UHJvcGVydGllcyggcGEgKSwgIlxuIikgKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JCXByaXZhdGUgdm9pZAotCW15U2xlZXAoIGZpbmFsIGxvbmcgbWlsbGlzICkKLQl7Ci0JCXRyeQotCQl7Ci0JCQlUaHJlYWQuc2xlZXAoIG1pbGxpcyApOwotCQl9Ci0JCWNhdGNoKCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlICkKLQkJewotCQl9Ci0JfQotCQotCQotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nCU1CRUFOX1NFUlZFUl9ERUxFR0FURQk9Ci0JCQkJCQkJIkpNSW1wbGVtZW50YXRpb246dHlwZT1NQmVhblNlcnZlckRlbGVnYXRlIjsKLQkJcHVibGljIHN0YXRpYyBPYmplY3ROYW1lCi0JZ2V0TUJlYW5TZXJ2ZXJEZWxlZ2F0ZU9iamVjdE5hbWUoKQotCXsKLQkJcmV0dXJuKCBVdGlsLm5ld09iamVjdE5hbWUoIE1CRUFOX1NFUlZFUl9ERUxFR0FURSApICk7Ci0JfQotCQotCQotCQlwcml2YXRlIHZvaWQKLQl3YWl0TnVtTm90aWZzKCBmaW5hbCBNYXAgbm90aWZzLCBmaW5hbCBTdHJpbmcgdHlwZSwgZmluYWwgaW50IG51bVJlcXVpcmVkICkKLQl7Ci0JCXdoaWxlICggdHJ1ZSApCi0JCXsKLQkJCWZpbmFsIExpc3QJbGlzdAk9IChMaXN0KW5vdGlmcy5nZXQoIHR5cGUgKTsKLQkJCWlmICggbGlzdCAhPSBudWxsICYmIGxpc3Quc2l6ZSgpID49IG51bVJlcXVpcmVkICkKLQkJCXsKLQkJCQlicmVhazsKLQkJCX0KKyAgICAvKioKKyAgICAgICAgVHVybiBhbiBvYmplY3QgaW50byBhIHVzZWZ1bCBTdHJpbmcKKyAgICAgKi8KKyAgICAgICAgcHVibGljIFN0cmluZworICAgIHRvU3RyaW5nKCBPYmplY3QgbyApCisgICAgeworICAgICAgICByZXR1cm4oIFNhbXBsZVV0aWwudG9TdHJpbmcoIG8gKSApOworICAgIH0KIAotCQkJbXlTbGVlcCggNTAgKTsKLQkJfQotCX0KLQkKLQkJCi0JCi0JCXByaXZhdGUgdm9pZAotCXdhaXRNQmVhblNlcnZlck5vdGlmaWNhdGlvbigKLQkJZmluYWwgU2FtcGxlTGlzdGVuZXIJbGlzdGVuZXIsCi0JCWZpbmFsIFN0cmluZwkJCXR5cGUsCi0JCWZpbmFsIE9iamVjdE5hbWUJCW9iamVjdE5hbWUgKQotCXsKLQkJTGlzdAkJbGlzdAk9IG51bGw7Ci0JCXdoaWxlICggKGxpc3QgPSBsaXN0ZW5lci5nZXROb3RpZnNSZWNlaXZlZCggdHlwZSApKSA9PSBudWxsICkKLQkJewotCQkJbXlTbGVlcCggNTAgKTsKLQkJfQotCQkKLQkJYm9vbGVhbgl3YWl0aW5nCT0gdHJ1ZTsKLQkJd2hpbGUgKCB3YWl0aW5nICkKLQkJewotCQkJZmluYWwgSXRlcmF0b3IJaXRlcgk9IGxpc3QuaXRlcmF0b3IoKTsKLQkJCXdoaWxlICggaXRlci5oYXNOZXh0KCkgKQotCQkJewotCQkJCWZpbmFsIE1CZWFuU2VydmVyTm90aWZpY2F0aW9uCW5vdGlmCT0gKE1CZWFuU2VydmVyTm90aWZpY2F0aW9uKWl0ZXIubmV4dCgpOwotCQkJCWlmICggbm90aWYuZ2V0TUJlYW5OYW1lKCkuZXF1YWxzKCBvYmplY3ROYW1lICkgKQotCQkJCXsKLQkJCQkJd2FpdGluZwk9IGZhbHNlOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJU2FtcGxlVXRpbC5wcmludGxuKCAiVW5leHBlY3RlZCBPYmplY3ROYW1lOiAiICsgb2JqZWN0TmFtZSArICIgIT0gIiArIG5vdGlmLmdldE1CZWFuTmFtZSgpICk7Ci0JCQkJfQotCQkJfQotCQkJbXlTbGVlcCggMTAwICk7Ci0JCX0KLQl9Ci0JCi0JCi0JLyoqCi0JCURlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIGEgamF2YXgubWFuYWdlbWVudC5tb25pdG9yIE1CZWFuCi0JCXRvIGJlIG5vdGlmaWVkIG9mIGNoYW5nZXMgaW4gdGhlIHZhbHVlIG9mIGFuIEF0dHJpYnV0ZS4KLQkgKi8KLQkJcHVibGljIHZvaWQKLQlkZW1vSk1YTW9uaXRvcigpCi0JCXRocm93cyBJbnN0YW5jZU5vdEZvdW5kRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotCXsKLQkJZmluYWwgSk1YTW9uaXRvck1ncgltZ3IJPSBnZXREb21haW5Sb290KCkuZ2V0Sk1YTW9uaXRvck1ncigpOwotCQkKLQkJZmluYWwgU3RyaW5nCWF0dHJOYW1lCT0gIlNhbXBsZVN0cmluZyI7Ci0JCWZpbmFsIFN0cmluZwlhdHRyVmFsdWUJPSAiaGVsbG8iOwotCQkKLQkJLy8gbGlzdGVuIHRvIHRoZSBNQmVhblNlcnZlckRlbGVnYXRlLCB0b28sIHNvIHdlIGNhbiBzZWUgb3VyIHNhbXBsZSBtb25pdG9yCi0JCS8vIGdldCByZWdpc3RlcmVkLgotCQlmaW5hbCBTYW1wbGVMaXN0ZW5lcglzYW1wbGVMaXN0ZW5lcgk9IG5ldyBTYW1wbGVMaXN0ZW5lcigpOwotCQlmaW5hbCBNQmVhblNlcnZlckNvbm5lY3Rpb24JY29ubgk9Ci0JCQlVdGlsLmdldEV4dHJhKCBtZ3IgKS5nZXRDb25uZWN0aW9uU291cmNlKCkuZ2V0RXhpc3RpbmdNQmVhblNlcnZlckNvbm5lY3Rpb24oKTsKLQkJY29ubi5hZGROb3RpZmljYXRpb25MaXN0ZW5lcigKLQkJCWdldE1CZWFuU2VydmVyRGVsZWdhdGVPYmplY3ROYW1lKCksIHNhbXBsZUxpc3RlbmVyLCBudWxsLCBudWxsICk7Ci0JCQotCQkJCi0JCWZpbmFsIFNhbXBsZQlzYW1wbGUJPSAoU2FtcGxlKWdldERvbWFpblJvb3QoKS5nZXRDb250YWluZWUoIFhUeXBlcy5TQU1QTEUgKTsKLQkJCi0JCWZpbmFsIFN0cmluZwltb25pdG9yTmFtZQk9ICJTYW1wbGVTdHJpbmdNb25pdG9yIjsKLQkJQU1YU3RyaW5nTW9uaXRvcgltb24JPSBudWxsOwotCQl0cnkKLQkJewotCQkJLy8gY2xlYW51cCBpbiBjYXNlIGl0IHdhcyBsZWZ0IGFyb3VuZCBieSBtaXN0YWtlLi4uCi0JCQl0cnkgeyBtZ3IucmVtb3ZlKCBtb25pdG9yTmFtZSApOyB9IGNhdGNoKCBFeGNlcHRpb24gZSApCXt9Ci0JCQkKLQkJCS8vIGNyZWF0ZSBhIG5ldyBvbmUKLQkJCW1vbgk9IG1nci5jcmVhdGVTdHJpbmdNb25pdG9yKCBtb25pdG9yTmFtZSApOwotCQkJLy8gb2JzZXJ2ZXIgdGhhdCB3ZSd2ZSBiZWVuIG5vdGlmaWVkIChub3QgcmVxdWlyZWQpCi0JCQl3YWl0TUJlYW5TZXJ2ZXJOb3RpZmljYXRpb24oIHNhbXBsZUxpc3RlbmVyLAotCQkJCU1CZWFuU2VydmVyTm90aWZpY2F0aW9uLlJFR0lTVFJBVElPTl9OT1RJRklDQVRJT04sIFV0aWwuZ2V0T2JqZWN0TmFtZSggbW9uICkgKTsKLQkJCi0JCQkvLyB3ZSdsbCBtb2RpZnkgdGhpcyBBdHRyaWJ1dGUncyB2YWx1ZSwgdG8gZm9yY2UgYSBjaGFuZ2UKLQkJCXNhbXBsZS5hZGRBdHRyaWJ1dGUoIGF0dHJOYW1lLCBhdHRyVmFsdWUgKTsKLQkJCQotCQkJLy8gbGlzdGVuIHRvIHRoZSBtb25pdG9yCi0JCQltb24uYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoIHNhbXBsZUxpc3RlbmVyLCBudWxsLCBudWxsICk7Ci0JCQltb24uc2V0T2JzZXJ2ZWRBdHRyaWJ1dGUoIGF0dHJOYW1lICk7Ci0JCQltb24uc2V0U3RyaW5nVG9Db21wYXJlKCBhdHRyVmFsdWUgKTsKLQkJCW1vbi5zZXROb3RpZnlEaWZmZXIoIHRydWUgKTsKLQkJCW1vbi5zZXROb3RpZnlNYXRjaCggdHJ1ZSApOwotCQkJCi0JCQkvLyB0ZWxsIHRoZSBtb25pdG9yIHRvIG9ic2VydmUgc2FtcGxlCi0JCQltb24uYWRkT2JzZXJ2ZWRPYmplY3QoIFV0aWwuZ2V0T2JqZWN0TmFtZSggc2FtcGxlICkgKTsKLQkJCQotCQkJLy8gc2luY2UgdGhlIEF0dHJpYnV0ZSB3YXMgYWRkZWQgZHluYW1pY2FsbHksIHRoZXJlIGlzIG5vCi0JCQkvLyBnZXR0ZXIgbWV0aG9kLCBzbyB3ZSBtdXN0IGFjY2VzcyB0aGUgQXR0cmlidXRlIHZpYSBKTVgKLQkJCWZpbmFsIFN0ZEF0dHJpYnV0ZXNBY2Nlc3MJYXR0cnMJPSBVdGlsLmdldEV4dHJhKCBzYW1wbGUgKTsKLQkJCWF0dHJzLnNldEF0dHJpYnV0ZSggbmV3IEF0dHJpYnV0ZSggYXR0ck5hbWUsICJnb29kYnllIiApICk7Ci0JCQkvLyBzZXQgaXQgdG8gb3JpZ2luYWwgdmFsdWUKLQkJCWF0dHJzLnNldEF0dHJpYnV0ZSggbmV3IEF0dHJpYnV0ZSggYXR0ck5hbWUsIGF0dHJWYWx1ZSApICk7Ci0JCQkKLQkJCS8vIHdlIGFkZGVkIGl0LHNvIHdlIHNob3VsZCByZW1vdmUgaXQKLQkJCXNhbXBsZS5yZW1vdmVBdHRyaWJ1dGUoIGF0dHJOYW1lICk7Ci0JCQkKLQkJCS8vIGxldCB0aGUgTm90aWZpY2F0aW9ucyBhcnJpdmUuLi4KLQkJCWZpbmFsIE1hcAlub3RpZnMJPSBzYW1wbGVMaXN0ZW5lci5nZXROb3RpZnNSZWNlaXZlZCgpOwotCQkJd2FpdE51bU5vdGlmcyggbm90aWZzLCBBdHRyaWJ1dGVDaGFuZ2VOb3RpZmljYXRpb24uQVRUUklCVVRFX0NIQU5HRSwgNCApOwotCQl9Ci0JCWNhdGNoKCBUaHJvd2FibGUgdCApCi0JCXsKLQkJCXQucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJZmluYWxseQotCQl7Ci0JCQl0cnkKLQkJCXsKLQkJCQltb24ucmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoIHNhbXBsZUxpc3RlbmVyICk7Ci0JCQkJCi0JCQkJLy8gZG9uJ3QgbGVhdmUgbW9uaXRvcnMgYXJvdW5kCi0JCQkJaWYgKCBtb24gIT0gbnVsbCApCi0JCQkJewotCQkJCQltZ3IucmVtb3ZlKCBtb24uZ2V0TmFtZSgpICk7Ci0JCQkJCS8vIG9ic2VydmVyIHRoYXQgd2UndmUgYmVlbiBub3RpZmllZCAobm90IHJlcXVpcmVkKQotCQkJCQl3YWl0TUJlYW5TZXJ2ZXJOb3RpZmljYXRpb24oIHNhbXBsZUxpc3RlbmVyLAotCQkJCQkJTUJlYW5TZXJ2ZXJOb3RpZmljYXRpb24uVU5SRUdJU1RSQVRJT05fTk9USUZJQ0FUSU9OLAotCQkJCQkJVXRpbC5nZXRPYmplY3ROYW1lKCBtb24gKSApOwotCQkJCX0KLQkJCQkKLQkJCQljb25uLnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKAotCQkJCQlnZXRNQmVhblNlcnZlckRlbGVnYXRlT2JqZWN0TmFtZSgpLCBzYW1wbGVMaXN0ZW5lciApOwotCQkJfQotCQkJY2F0Y2goIExpc3RlbmVyTm90Rm91bmRFeGNlcHRpb24gZSApCi0JCQl7Ci0JCQl9Ci0JCX0KLQl9CisgICAgLyoqCisgICAgICAgIERpc3BsYXkgYSBNYXAgdG8gU3lzdGVtLm91dC4KKyAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSB2b2lkCisgICAgZGlzcGxheU1hcCgKKyAgICAgICAgZmluYWwgU3RyaW5nICAgIG1zZywKKyAgICAgICAgZmluYWwgTWFwICAgICAgICAgbSkKKyAgICB7CisgICAgICAgIHByaW50bG4oIG1zZyArICI6ICIgKyB0b1N0cmluZyggbS5rZXlTZXQoKSApICk7CisgICAgfQorCisgICAgLyoqCisgICAgICAgIERlbW9uc3RyYXRlcyBob3cgdG8gYWNjZXNzIHZhcmlvdXMgdHlwZXMgb2YgIHtAbGluayBBTVh9IGJ5IG9idGFpbmluZyBhIE1hcCBhbmQgdGhlbiBkaXNwbGF5aW5nIGl0LgorICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZAorICAgIGhhbmRsZUxpc3QoKQorICAgIHsKKyAgICAgICAgZmluYWwgRG9tYWluQ29uZmlnICAgIGRjcCAgICA9IGdldERvbWFpbkNvbmZpZygpOworCisgICAgICAgIC8vIFRvcC1sZXZlbCBpdGVtcworICAgICAgICBwcmludGxuKCAiXG4tLS0gVG9wLWxldmVsIC0tLSBcbiIgKTsKKworICAgICAgICBkaXNwbGF5TWFwKCAiQ29uZmlnQ29uZmlnIiwgZGNwLmdldENvbmZpZ0NvbmZpZ01hcCgpICk7CisKKyAgICAgICAgZGlzcGxheU1hcCggIlNlcnZlckNvbmZpZyIsIGRjcC5nZXRTZXJ2ZXJDb25maWdNYXAoKSApOworCisgICAgICAgIGRpc3BsYXlNYXAoICJTdGFuZGFsb25lU2VydmVyQ29uZmlnIiwgZGNwLmdldFN0YW5kYWxvbmVTZXJ2ZXJDb25maWdNYXAoKSApOworCisgICAgICAgIGRpc3BsYXlNYXAoICJDbHVzdGVyZWRTZXJ2ZXJDb25maWciLCBkY3AuZ2V0Q2x1c3RlcmVkU2VydmVyQ29uZmlnTWFwKCkgKTsKKworICAgICAgICBkaXNwbGF5TWFwKCAiQ2x1c3RlckNvbmZpZyIsIGRjcC5nZXRDbHVzdGVyQ29uZmlnTWFwKCkgKTsKKworCisgICAgICAgIC8vIGRlcGxveWVkIGl0ZW1zCisgICAgICAgIHByaW50bG4oICJcbi0tLSBEZXBsb3llZEl0ZW1zIC0tLSBcbiIgKTsKKyAgICAgICAgZGlzcGxheU1hcCggIkoyRUVBcHBsaWNhdGlvbkNvbmZpZyIsIGRjcC5nZXRKMkVFQXBwbGljYXRpb25Db25maWdNYXAoKSApOworICAgICAgICBkaXNwbGF5TWFwKCAiRUpCTW9kdWxlQ29uZmlnIiwgZGNwLmdldEVKQk1vZHVsZUNvbmZpZ01hcCgpICk7CisgICAgICAgIGRpc3BsYXlNYXAoICJXZWJNb2R1bGVDb25maWciLCBkY3AuZ2V0V2ViTW9kdWxlQ29uZmlnTWFwKCkgKTsKKyAgICAgICAgZGlzcGxheU1hcCggIlJBUk1vZHVsZUNvbmZpZyIsIGRjcC5nZXRSQVJNb2R1bGVDb25maWdNYXAoKSApOworICAgICAgICBkaXNwbGF5TWFwKCAiQXBwQ2xpZW50TW9kdWxlQ29uZmlnIiwgZGNwLmdldEFwcENsaWVudE1vZHVsZUNvbmZpZ01hcCgpICk7CisgICAgICAgIGRpc3BsYXlNYXAoICJMaWZlY3ljbGVNb2R1bGVDb25maWciLCBkY3AuZ2V0TGlmZWN5Y2xlTW9kdWxlQ29uZmlnTWFwKCkgKTsKKworCisgICAgICAgIC8vIHJlc291cmNlcworICAgICAgICBwcmludGxuKCAiXG4tLS0gUmVzb3VyY2VzIC0tLSBcbiIgKTsKKworICAgICAgICBkaXNwbGF5TWFwKCAiQ3VzdG9tUmVzb3VyY2VDb25maWciLCBkY3AuZ2V0Q3VzdG9tUmVzb3VyY2VDb25maWdNYXAoKSApOworICAgICAgICBkaXNwbGF5TWFwKCAiUGVyc2lzdGVuY2VNYW5hZ2VyRmFjdG9yeVJlc291cmNlQ29uZmlnIiwKKyAgICAgICAgICAgIGRjcC5nZXRQZXJzaXN0ZW5jZU1hbmFnZXJGYWN0b3J5UmVzb3VyY2VDb25maWdNYXAoKSApOworICAgICAgICBkaXNwbGF5TWFwKCAiSk5ESVJlc291cmNlQ29uZmlnIiwgZGNwLmdldEpORElSZXNvdXJjZUNvbmZpZ01hcCgpICk7CisgICAgICAgIGRpc3BsYXlNYXAoICJKTVNSZXNvdXJjZUNvbmZpZyIsIGRjcC5nZXRKTVNSZXNvdXJjZUNvbmZpZ01hcCgpICk7CisgICAgICAgIGRpc3BsYXlNYXAoICJKREJDUmVzb3VyY2VDb25maWciLCBkY3AuZ2V0SkRCQ1Jlc291cmNlQ29uZmlnTWFwKCkgKTsKKyAgICAgICAgZGlzcGxheU1hcCggIkNvbm5lY3RvclJlc291cmNlQ29uZmlnIiwgZGNwLmdldENvbm5lY3RvclJlc291cmNlQ29uZmlnTWFwKCkgKTsKKyAgICAgICAgZGlzcGxheU1hcCggIkpEQkNDb25uZWN0aW9uUG9vbENvbmZpZyIsIGRjcC5nZXRKREJDQ29ubmVjdGlvblBvb2xDb25maWdNYXAoKSApOworICAgICAgICBkaXNwbGF5TWFwKCAiUGVyc2lzdGVuY2VNYW5hZ2VyRmFjdG9yeVJlc291cmNlQ29uZmlnIiwKKyAgICAgICAgICAgIGRjcC5nZXRQZXJzaXN0ZW5jZU1hbmFnZXJGYWN0b3J5UmVzb3VyY2VDb25maWdNYXAoKSApOworICAgICAgICBkaXNwbGF5TWFwKCAiQ29ubmVjdG9yQ29ubmVjdGlvblBvb2xDb25maWciLAorICAgICAgICAgICAgZGNwLmdldENvbm5lY3RvckNvbm5lY3Rpb25Qb29sQ29uZmlnTWFwKCkgKTsKKyAgICAgICAgZGlzcGxheU1hcCggIkFkbWluT2JqZWN0UmVzb3VyY2VDb25maWciLCBkY3AuZ2V0QWRtaW5PYmplY3RSZXNvdXJjZUNvbmZpZ01hcCgpICk7CisgICAgICAgIGRpc3BsYXlNYXAoICJSZXNvdXJjZUFkYXB0ZXJDb25maWciLCBkY3AuZ2V0UmVzb3VyY2VBZGFwdGVyQ29uZmlnTWFwKCkgKTsKKyAgICAgICAgZGlzcGxheU1hcCggIk1haWxSZXNvdXJjZUNvbmZpZyIsIGRjcC5nZXRNYWlsUmVzb3VyY2VDb25maWdNYXAoKSApOworCisKKyAgICAgICAgLy8gZ2V0IGEgQ29uZmlnQ29uZmlnCisgICAgICAgIGZpbmFsIENvbmZpZ0NvbmZpZyAgICBjb25maWcgICAgPQorICAgICAgICAgICAgKENvbmZpZ0NvbmZpZylkY3AuZ2V0Q29uZmlnQ29uZmlnTWFwKCkuZ2V0KCAic2VydmVyLWNvbmZpZyIgKTsKKworCisgICAgICAgIC8vIEhUVFBTZXJ2aWNlCisgICAgICAgIHByaW50bG4oICJcbi0tLSBIVFRQU2VydmljZSAtLS0gXG4iICk7CisKKyAgICAgICAgZmluYWwgSFRUUFNlcnZpY2VDb25maWcgaHR0cFNlcnZpY2UgPSBjb25maWcuZ2V0SFRUUFNlcnZpY2VDb25maWcoKTsKKyAgICAgICAgZGlzcGxheU1hcCggIkhUVFBMaXN0ZW5lcnMiLCBodHRwU2VydmljZS5nZXRIVFRQTGlzdGVuZXJDb25maWdNYXAoKSApOworICAgICAgICBkaXNwbGF5TWFwKCAiVmlydHVhbFNlcnZlcnMiLCBodHRwU2VydmljZS5nZXRWaXJ0dWFsU2VydmVyQ29uZmlnTWFwKCkgKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgICAgUmV0dXJuIGEgU2V0IG9mIHtAbGluayBBTVh9IHdob3NlIE9iamVjdE5hbWUgaGFzIHRoZSBwcm9wZXJ0eQorICAgICAgICAgPGk+cHJvcGVydHktbmFtZTwvaT49PGk+cHJvcGVydHktdmFsdWU8L2k+LgorCisgICAgICAgIEBwYXJhbSBwcm9wZXJ0eU5hbWUKKyAgICAgICAgQHBhcmFtIHByb3BlcnR5VmFsdWUKKyAgICAgICAgQHJldHVybiBTZXQgb2Yge0BsaW5rIEFNWH0KKyAgICAqLworICAgICAgICBwdWJsaWMgU2V0CisgICAgcXVlcnlXaWxkKAorICAgICAgICBmaW5hbCBTdHJpbmcgcHJvcGVydHlOYW1lLAorICAgICAgICBmaW5hbCBTdHJpbmcgcHJvcGVydHlWYWx1ZSkKKyAgICB7CisgICAgICAgIGZpbmFsIFN0cmluZ1tdICAgIHByb3BOYW1lcyAgICA9IG5ldyBTdHJpbmdbXSB7IHByb3BlcnR5TmFtZSB9OworICAgICAgICBmaW5hbCBTdHJpbmdbXSAgICBwcm9wVmFsdWVzICAgID0gbmV3IFN0cmluZ1tdeyBwcm9wZXJ0eVZhbHVlIH07CisKKyAgICAgICAgZmluYWwgU2V0ICAgIGFteHMgICAgPSBnZXRRdWVyeU1ncigpLnF1ZXJ5V2lsZFNldCggcHJvcE5hbWVzLCBwcm9wVmFsdWVzICk7CisKKyAgICAgICAgcmV0dXJuKCBhbXhzICk7CisgICAgfQorCisgICAgLyoqCisgICAgICAgIENhbGwgcXVlcnlXaWxkKCBwcm9wZXJ0eU5hbWUsIHByb3BlcnR5VmFsdWUgKSBhbmQgZGlzcGxheSB0aGUgcmVzdWx0LgorCisgICAgICAgIEBwYXJhbSBwcm9wZXJ0eU5hbWUKKyAgICAgICAgQHBhcmFtIHByb3BlcnR5VmFsdWUKKyAgICAqLworICAgICAgICBwdWJsaWMgdm9pZAorICAgIGRpc3BsYXlXaWxkKAorICAgICAgICBmaW5hbCBTdHJpbmcgcHJvcGVydHlOYW1lLAorICAgICAgICBmaW5hbCBTdHJpbmcgcHJvcGVydHlWYWx1ZSkKKyAgICB7CisgICAgICAgIGZpbmFsIFNldCAgICBpdGVtcyAgICA9IHF1ZXJ5V2lsZCggcHJvcGVydHlOYW1lLCBwcm9wZXJ0eVZhbHVlICk7CisKKyAgICAgICAgcHJpbnRsbiggIlxuLS0tIFF1ZXJpZWQgZm9yICIgKyBwcm9wZXJ0eU5hbWUgKyAiPSIgKyBwcm9wZXJ0eVZhbHVlICsgIiAtLS0iICk7CisgICAgICAgIGZpbmFsIEl0ZXJhdG9yICAgIGl0ZXIgICAgPSBpdGVtcy5pdGVyYXRvcigpOworICAgICAgICB3aGlsZSAoIGl0ZXIuaGFzTmV4dCgpICkKKyAgICAgICAgeworICAgICAgICAgICAgZmluYWwgQU1YICAgIGl0ZW0gICAgPSAoQU1YKWl0ZXIubmV4dCgpOworCisgICAgICAgICAgICBwcmludGxuKCAiajJlZVR5cGU9IiArIGl0ZW0uZ2V0SjJFRVR5cGUoKSArICIsIiArICJuYW1lPSIgKyBpdGVtLmdldE5hbWUoKSApOworICAgICAgICB9CisgICAgfQorCisgICAgICAgIHB1YmxpYyBTZXQKKyAgICBxdWVyeUZvckoyRUVUeXBlKCBmaW5hbCBTdHJpbmcgajJlZVR5cGUgKQorICAgIHsKKyAgICAgICAgZmluYWwgU3RyaW5nICAgIHByb3AgICAgPSBVdGlsLm1ha2VKMkVFVHlwZVByb3AoIGoyZWVUeXBlICk7CisgICAgICAgIGZpbmFsIFNldCAgICAgICAgaXRlbXMgICAgPSBnZXRRdWVyeU1ncigpLnF1ZXJ5UHJvcHNTZXQoIHByb3AgKTsKKworICAgICAgICByZXR1cm4oIGl0ZW1zICk7CisgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkCisgICAgZGlzcGxheUF2YWlsYWJsZUNoaWxkVHlwZXMoIGZpbmFsIFN0cmluZyBqMmVlVHlwZSApCisgICAgeworICAgICAgICBmaW5hbCBEb21haW5Sb290ICAgICAgICBkb21haW5Sb290ICAgID0gZ2V0RG9tYWluUm9vdCgpOworCisgICAgfQorCisgICAgICAgIHByaXZhdGUgU3RyaW5nCisgICAgZ2V0SW5kZW50KCBmaW5hbCBpbnQgbnVtICkKKyAgICB7CisgICAgICAgIGZpbmFsIGNoYXJbXSAgICBpbmRlbnQgICAgPSBuZXcgY2hhclsgbnVtIF07CisgICAgICAgIGZvciggaW50IGkgPSAwOyBpIDwgbnVtOyArK2kgKQorICAgICAgICB7CisgICAgICAgICAgICBpbmRlbnRbIGkgXSAgICA9ICcgJzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4oIG5ldyBTdHJpbmcoIGluZGVudCApICk7CisgICAgfQorCisgICAgLyoqCisgICAgICAgIERpc3BsYXkgdGhlIGoyZWVUeXBlIGFuZCBuYW1lIChpZiBub3Qge0BsaW5rIEFNWCNOT19OQU1FfSkKKyAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSB2b2lkCisgICAgZGlzcGxheUFNWCgKKyAgICAgICAgZmluYWwgQU1YIGFteCwKKyAgICAgICAgZmluYWwgaW50ICAgIGluZGVudENvdW50ICkKKyAgICB7CisgICAgICAgIGZpbmFsIFN0cmluZyBpbmRlbnQgICAgPSBnZXRJbmRlbnQoIGluZGVudENvdW50ICk7CisKKyAgICAgICAgZmluYWwgU3RyaW5nICAgIGoyZWVUeXBlICAgID0gYW14LmdldEoyRUVUeXBlKCk7CisgICAgICAgIGZpbmFsIFN0cmluZyAgICBuYW1lICAgICAgICA9IGFteC5nZXROYW1lKCk7CisgICAgICAgIGlmICggbmFtZS5lcXVhbHMoIEFNWC5OT19OQU1FICkgKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGxuKCBpbmRlbnQgKyBqMmVlVHlwZSApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRsbiggaW5kZW50ICsgajJlZVR5cGUgKyAiPSIgKyBuYW1lICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkCisgICAgZGlzcGxheUhpZXJhcmNoeSgKKyAgICAgICAgZmluYWwgQ29sbGVjdGlvbiAgICBhbXhTZXQsCisgICAgICAgIGZpbmFsIGludCAgICAgICAgICAgIGluZGVudENvdW50ICkKKyAgICB7CisgICAgICAgIGZpbmFsIEl0ZXJhdG9yICAgIGl0ZXIgICAgPSBhbXhTZXQuaXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUgKCBpdGVyLmhhc05leHQoKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpbmFsIEFNWCAgICBhbXggICAgPSAoQU1YKWl0ZXIubmV4dCgpOworICAgICAgICAgICAgZGlzcGxheUhpZXJhcmNoeSggYW14LCBpbmRlbnRDb3VudCApOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICAgIERpc3BsYXkgdGhlIGhpZXJhcmNoeSBvZiB7QGxpbmsgQU1YfSBiZWdpbm5pbmcgd2l0aCB0aGUgc3BlY2lmaWVkIG9uZQorICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZAorICAgIGRpc3BsYXlIaWVyYXJjaHkoCisgICAgICAgIGZpbmFsIEFNWCBhbXgsCisgICAgICAgIGZpbmFsIGludCAgICBpbmRlbnRDb3VudCApCisgICAgeworICAgICAgICBkaXNwbGF5QU1YKCBhbXgsIGluZGVudENvdW50ICk7CisKKyAgICAgICAgaWYgKCBhbXggaW5zdGFuY2VvZiBDb250YWluZXIgKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBnZXQgTWFwcyBvZiBhbGwgY29udGFpbmVkIGl0ZW1zCisgICAgICAgICAgICBmaW5hbCBNYXAgICAgbSAgICA9ICgoQ29udGFpbmVyKWFteCkuZ2V0TXVsdGlDb250YWluZWVNYXAoIG51bGwgKTsKKworICAgICAgICAgICAgLy8gZm9yIGNsYXJpdHkgb2YgZGlzcGxheSwgc2VwYXJhdGUgb3V0IHRob3NlIHRoYXQgYXJlIENvbnRhaW5lcnMsCisgICAgICAgICAgICAvLyBhbmQgdGhvc2UgdGhhdCBhcmUgbm90LgorICAgICAgICAgICAgZmluYWwgU2V0ICAgIGRlZmVycmVkICAgID0gbmV3IEhhc2hTZXQoKTsKKyAgICAgICAgICAgIGZpbmFsIEl0ZXJhdG9yICAgIG1hcHNJdGVyICAgID0gbS52YWx1ZXMoKS5pdGVyYXRvcigpOworICAgICAgICAgICAgd2hpbGUgKCBtYXBzSXRlci5oYXNOZXh0KCkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZpbmFsIE1hcCAgICBpbnN0YW5jZXNNYXAgICAgPSAoTWFwKW1hcHNJdGVyLm5leHQoKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBBTVggICAgZmlyc3QgICAgPSAoQU1YKWluc3RhbmNlc01hcC52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIGZpcnN0IGluc3RhbmNlb2YgQ29udGFpbmVyICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLmFkZCggaW5zdGFuY2VzTWFwICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlIaWVyYXJjaHkoIGluc3RhbmNlc01hcC52YWx1ZXMoKSwgaW5kZW50Q291bnQgKyAyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGRpc3BsYXkgZGVmZXJyZWQgaXRlbXMKKyAgICAgICAgICAgIGZpbmFsIEl0ZXJhdG9yICAgIGl0ZXIgICAgPSBkZWZlcnJlZC5pdGVyYXRvcigpOworICAgICAgICAgICAgd2hpbGUgKCBpdGVyLmhhc05leHQoKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmluYWwgTWFwICAgIGluc3RhbmNlc01hcCAgICA9IChNYXApaXRlci5uZXh0KCk7CisgICAgICAgICAgICAgICAgZGlzcGxheUhpZXJhcmNoeSggaW5zdGFuY2VzTWFwLnZhbHVlcygpLCBpbmRlbnRDb3VudCArIDIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9CisKKyAgICAvKioKKyAgICAgICAgRGlzcGxheSB0aGUgZW50aXJlIE1CZWFuIGhpZXJhcmNoeS4KKyAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQKKyAgICBkaXNwbGF5SGllcmFyY2h5KCkKKyAgICB7CisgICAgICAgIGRpc3BsYXlIaWVyYXJjaHkoIGdldERvbWFpblJvb3QoKSwgMCk7CisgICAgfQorCisgICAgLyoqCisgICAgICAgIERpc3BsYXkgdGhlIE1CZWFuIGhpZXJhcmNoeSBiZWdpbm5pbmcgd2l0aCBqMmVlVHlwZS4KKyAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQKKyAgICBkaXNwbGF5SGllcmFyY2h5KCBmaW5hbCBTdHJpbmcgajJlZVR5cGUgKQorICAgIHsKKyAgICAgICAgZmluYWwgU2V0ICAgIGl0ZW1zICAgID0gZ2V0UXVlcnlNZ3IoKS5xdWVyeUoyRUVUeXBlU2V0KCBqMmVlVHlwZSApOworCisgICAgICAgIGlmICggaXRlbXMuc2l6ZSgpID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGxuKCAiTm8ge0BsaW5rIEFNWH0gb2YgajJlZVR5cGUgIiArIFNhbXBsZVV0aWwucXVvdGUoIGoyZWVUeXBlICkgKyAiIGZvdW5kIiApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZGlzcGxheUhpZXJhcmNoeSggaXRlbXMsIDApOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgICAgRGlzcGxheSBhbGwgTUJlYW5zIHRoYXQgaGF2ZSBqMmVlVHlwZT08ajJlZVR5cGU+CisgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkCisgICAgZGlzcGxheUoyRUVUeXBlKCBmaW5hbCBTdHJpbmcgajJlZVR5cGUgKQorICAgIHsKKyAgICAgICAgZmluYWwgU2V0ICAgICAgICBpdGVtcyAgICA9IHF1ZXJ5Rm9ySjJFRVR5cGUoIGoyZWVUeXBlICk7CisKKyAgICAgICAgcHJpbnRsbiggIlxuLS0tIFF1ZXJpZWQgZm9yIGoyZWVUeXBlPSIgKyBqMmVlVHlwZSArICIgLS0tIiApOworCisgICAgICAgIGZpbmFsIEl0ZXJhdG9yICAgIGl0ZXIgICAgPSBpdGVtcy5pdGVyYXRvcigpOworICAgICAgICB3aGlsZSAoIGl0ZXIuaGFzTmV4dCgpICkKKyAgICAgICAgeworICAgICAgICAgICAgZmluYWwgQU1YICAgIGl0ZW0gICAgPSAoQU1YKWl0ZXIubmV4dCgpOworCisgICAgICAgICAgICAvLyB0aGV5IG1heSBvciBtYXkgbm90IGhhdmUgdW5pcXVlIG5hbWVzLCBzbyBzaG93IE9iamVjdE5hbWVzCisgICAgICAgICAgICBwcmludGxuKCBVdGlsLmdldE9iamVjdE5hbWUoIGl0ZW0gKSApOworICAgICAgICB9CisgICAgICAgIHByaW50bG4oICIiICk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgICAgRGlzcGxheSBhbGwgQXR0cmlidXRlcyBpbiB0aGUge0BsaW5rIEFNWH0uCisgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkCisgICAgZGlzcGxheUFsbEF0dHJpYnV0ZXMoIGZpbmFsIEFNWCBpdGVtICkKKyAgICB7CisgICAgICAgIHByaW50bG4oICJcbi0tLSBBdHRyaWJ1dGVzIGZvciAiICsgaXRlbS5nZXRKMkVFVHlwZSgpICsgIj0iICsgaXRlbS5nZXROYW1lKCkgKyAiIC0tLSIgKTsKKworICAgICAgICBmaW5hbCBFeHRyYSAgICBleHRyYSAgICA9IFV0aWwuZ2V0RXh0cmEoIGl0ZW0gKTsKKworICAgICAgICBmaW5hbCBNYXAgICAgYXR0cnMgICAgPSBleHRyYS5nZXRBbGxBdHRyaWJ1dGVzKCk7CisKKyAgICAgICAgZmluYWwgSXRlcmF0b3IgICAgaXRlciAgICA9IGF0dHJzLmtleVNldCgpLml0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlICggaXRlci5oYXNOZXh0KCkgKQorICAgICAgICB7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgICAgbmFtZSAgICA9IChTdHJpbmcpaXRlci5uZXh0KCk7CisgICAgICAgICAgICBmaW5hbCBPYmplY3QgICAgdmFsdWUgICAgPSBhdHRycy5nZXQoIG5hbWUgKTsKKworICAgICAgICAgICAgcHJpbnRsbiggbmFtZSArICI9IiArIHRvU3RyaW5nKCB2YWx1ZSApICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgICAgRGlzcGxheSBhbGwgQXR0cmlidXRlcyBpbiB0aGUge0BsaW5rIEFNWH0uCisgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkCisgICAgZGlzcGxheUFsbEF0dHJpYnV0ZXMoIGZpbmFsIFN0cmluZyBqMmVlVHlwZSApCisgICAgeworICAgICAgICBmaW5hbCBTZXQgICAgICAgIGl0ZW1zICAgID0gcXVlcnlGb3JKMkVFVHlwZSggajJlZVR5cGUgKTsKKworICAgICAgICBpZiAoIGl0ZW1zLnNpemUoKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRsbiggIk5vIHtAbGluayBBTVh9IG9mIGoyZWVUeXBlICIgKyBTYW1wbGVVdGlsLnF1b3RlKCBqMmVlVHlwZSApICsgIiBmb3VuZCIgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpbmFsIEl0ZXJhdG9yICAgIGl0ZXIgICAgPSBpdGVtcy5pdGVyYXRvcigpOworICAgICAgICAgICAgd2hpbGUgKCBpdGVyLmhhc05leHQoKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmluYWwgQU1YICAgIGFteCAgICA9IChBTVgpaXRlci5uZXh0KCk7CisKKyAgICAgICAgICAgICAgICBkaXNwbGF5QWxsQXR0cmlidXRlcyggYW14ICk7CisgICAgICAgICAgICAgICAgcHJpbnRsbiggIiIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICAgIERpc3BsYXkgYWxsIGRvdHRlZCBuYW1lcy4KKyAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQKKyAgICBkaXNwbGF5RG90dGVkTmFtZXMoKQorICAgIHsKKyAgICAgICAgZmluYWwgQ29uZmlnRG90dGVkTmFtZXMgICAgY29uZmlnRG90dGVkTmFtZXMgICAgPSBnZXREb21haW5Sb290KCkuZ2V0Q29uZmlnRG90dGVkTmFtZXMoKTsKKyAgICAgICAgQXR0cmlidXRlW10gcmVzdWx0ICAgID0gKEF0dHJpYnV0ZVtdKWNvbmZpZ0RvdHRlZE5hbWVzLmRvdHRlZE5hbWVHZXQoICIqIiApOworICAgICAgICBwcmludGxuKCAiLS0tIENvbmZpZ0RvdHRlZE5hbWVzIC0tLSIgKTsKKyAgICAgICAgcHJpbnRsbiggU2FtcGxlVXRpbC5hcnJheVRvU3RyaW5nKCByZXN1bHQsICIiLCAiXG4iICkgKTsKKworICAgICAgICBwcmludGxuKCAiXG4tLS0gTW9uaXRvcmluZ0RvdHRlZE5hbWVzIC0tLSIgKTsKKworICAgICAgICBmaW5hbCBNb25pdG9yaW5nRG90dGVkTmFtZXMgICAgbW9uRG90dGVkTmFtZXMgICAgPSBnZXREb21haW5Sb290KCkuZ2V0TW9uaXRvcmluZ0RvdHRlZE5hbWVzKCk7CisgICAgICAgIHJlc3VsdCAgICA9IChBdHRyaWJ1dGVbXSltb25Eb3R0ZWROYW1lcy5kb3R0ZWROYW1lR2V0KCAiKiIgKTsKKyAgICAgICAgcHJpbnRsbiggU2FtcGxlVXRpbC5hcnJheVRvU3RyaW5nKCByZXN1bHQsICIiLCAiXG4iICkgKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAgICBEZW1vbnN0cmF0ZSBob3cgdG8gdXNlIHRoZSB7QGxpbmsgY29tLnN1bi5hcHBzZXJ2Lm1hbmFnZW1lbnQuYmFzZS5RdWVyeU1ncn0gZmFjaWxpdGllcy4KKyAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQKKyAgICBkZW1vUXVlcnkoKQorICAgIHsKKyAgICAgICAgZGlzcGxheVdpbGQoIEFNWC5KMkVFX1RZUEVfS0VZLCAiWC0qUmVzb3VyY2VDb25maWciICk7CisgICAgICAgIGRpc3BsYXlXaWxkKCBBTVguSjJFRV9UWVBFX0tFWSwgIlgtKlNlcnZlckNvbmZpZyIgKTsKKworICAgICAgICBkaXNwbGF5SjJFRVR5cGUoIFhUeXBlcy5TU0xfQ09ORklHICk7CisgICAgICAgIGRpc3BsYXlKMkVFVHlwZSggWFR5cGVzLkNMVVNURVJfQ09ORklHICk7CisgICAgfQorCisKKyAgICAgICAgcHJpdmF0ZSBPYmplY3QKKyAgICB1cGxvYWRBcmNoaXZlKCBmaW5hbCBGaWxlIGFyY2hpdmUgICkKKyAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCisgICAgeworICAgICAgICBmaW5hbCBGaWxlSW5wdXRTdHJlYW0gICAgaW5wdXQgICAgPSBuZXcgRmlsZUlucHV0U3RyZWFtKCBhcmNoaXZlICk7CisgICAgICAgIGZpbmFsIGxvbmcgICAgbGVuZ3RoICAgID0gaW5wdXQuYXZhaWxhYmxlKCk7CisgICAgICAgIGZpbmFsIERlcGxveW1lbnRNZ3IgICAgbWdyICAgID0gZ2V0RG9tYWluUm9vdCgpLmdldERlcGxveW1lbnRNZ3IoKTsKKyAgICAgICAgZmluYWwgT2JqZWN0ICAgIHVwbG9hZElEICAgID0gbWdyLmluaXRpYXRlRmlsZVVwbG9hZCggbGVuZ3RoICk7CisKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIGZpbmFsIGludCAgICBjaHVua1NpemUgICAgPSAyNTYgKiAxMDI0OworICAgICAgICAgICAgbG9uZyByZW1haW5pbmcgICAgPSBsZW5ndGg7CisgICAgICAgICAgICB3aGlsZSAoIHJlbWFpbmluZyAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgICAgYWN0dWFsICAgID0gcmVtYWluaW5nIDwgY2h1bmtTaXplID8gKGludClyZW1haW5pbmcgOiBjaHVua1NpemU7CisKKyAgICAgICAgICAgICAgICBmaW5hbCBieXRlW10gICAgYnl0ZXMgICAgPSBuZXcgYnl0ZVsgYWN0dWFsIF07CisgICAgICAgICAgICAgICAgZmluYWwgaW50ICAgIG51bSAgICA9IGlucHV0LnJlYWQoIGJ5dGVzICk7CisgICAgICAgICAgICAgICAgaWYgKCBudW0gIT0gYWN0dWFsICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1nci51cGxvYWRCeXRlcyggdXBsb2FkSUQsIGJ5dGVzICk7CisgICAgICAgICAgICAgICAgcmVtYWluaW5nICAgIC09IGFjdHVhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5CisgICAgICAgIHsKKyAgICAgICAgICAgIGlucHV0LmNsb3NlKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4oIHVwbG9hZElEICk7CisgICAgfQorCisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcKKyAgICBnZXRBcHBOYW1lKCBmaW5hbCBTdHJpbmcgYXJjaGl2ZU5hbWUgKQorICAgIHsKKyAgICAgICAgU3RyaW5nICAgIHJlc3VsdCAgICA9IGFyY2hpdmVOYW1lOworCisgICAgICAgIGZpbmFsIGludCAgICBpZHggICAgPSBhcmNoaXZlTmFtZS5sYXN0SW5kZXhPZiggIi4iICk7CisgICAgICAgIGlmICggaWR4ID4gMSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCAgICA9IGFyY2hpdmVOYW1lLnN1YnN0cmluZyggMCwgaWR4ICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4oIHJlc3VsdCApOworICAgIH0KKworICAgIC8qKgorICAgICAgICBEZXBsb3kgYW4gYXJjaGl2ZS4KKyAgICAgICAgPHA+CisgICAgICAgIFRvIGRlcGxveSwgeW91IHdpbGwgbmVlZCBhbiBhcmNoaXZlIHRvIGRlcGxveS4gIEEgcmVjb21tZW5kZWQgc2FtcGxlIG1heSBiZSBmb3VuZCBhdDoKKyAgICAgICAgPGk+SU5TVEFMTF9ST09UPC9pPi9zYW1wbGVzL2VqYi9zdGF0ZWxlc3MvYXBwcy9zaW1wbGUuZWFyCisgICAgICAgIDxwPgorICAgICAgICBUaGlzIHNhbXBsZSBkZXBsb3lzIHRoZSBhcmNoaXZlIHRvIHRoZSBkb21haW4sIGJ1dCBkb2VzIG5vdCBjcmVhdGUgYW55IHJlZmVyZW5jZXMKKyAgICAgICAgdG8gaXQsIHNvIGl0IHdpbGwgbm90IGFjdHVhbGx5IGJlIGFzc29jaWF0ZWQgd2l0aCBhbnkgc2VydmVyLgorICAgICAgICA8cD4KKyAgICAgICAgVG8gYXNzb2NpYXRlIGFuIGFwcGxpY2F0aW9uIHdpdGggYSBzZXJ2ZXIsIHVzZQorICAgICAgICB7QGxpbmsgU3RhbmRhbG9uZVNlcnZlckNvbmZpZyNjcmVhdGVEZXBsb3llZEl0ZW1SZWZDb25maWd9CisgICAgICAgIEBzZWUgY29tLnN1bi5hcHBzZXJ2Lm1hbmFnZW1lbnQuY29uZmlnLlN0YW5kYWxvbmVTZXJ2ZXJDb25maWcKKyAgICAgICAgQHNlZSBjb20uc3VuLmFwcHNlcnYubWFuYWdlbWVudC5jb25maWcuRGVwbG95ZWRJdGVtUmVmQ29uZmlnQ1IKKyAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQKKyAgICBkZXBsb3koIGZpbmFsIEZpbGUgYXJjaGl2ZSApCisgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgZmluYWwgT2JqZWN0ICAgIHVwbG9hZElEICAgID0gdXBsb2FkQXJjaGl2ZSggYXJjaGl2ZSApOworICAgICAgICBmaW5hbCBEZXBsb3ltZW50TWdyICAgIG1nciAgICA9IGdldERvbWFpblJvb3QoKS5nZXREZXBsb3ltZW50TWdyKCk7CisKKyAgICAgICAgZmluYWwgT2JqZWN0ICAgIGRlcGxveUlEICAgID0gbWdyLmluaXREZXBsb3koICk7CisgICAgICAgIGZpbmFsIERlcGxveU5vdGlmaWNhdGlvbkxpc3RlbmVyIG15TGlzdGVuZXIgICAgPSBuZXcgRGVwbG95Tm90aWZpY2F0aW9uTGlzdGVuZXIoIGRlcGxveUlEKTsKKyAgICAgICAgbWdyLmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKCBteUxpc3RlbmVyLCBudWxsLCBudWxsKTsKKworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAgICAgZmluYWwgTWFwICAgIG9wdGlvbnMgICAgPSBuZXcgSGFzaE1hcCgpOworCisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgICAgYXJjaGl2ZU5hbWUgICAgPSBhcmNoaXZlLmdldE5hbWUoKTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyAgICBkZXBsb3lOYW1lICAgID0gZ2V0QXBwTmFtZSggYXJjaGl2ZU5hbWUgKTsKKyAgICAgICAgICAgIFNhbXBsZVV0aWwucHJpbnRsbiggIkRlcGxveWluZyAiICsgYXJjaGl2ZU5hbWUgKyAiIGFzICIgKyBkZXBsb3lOYW1lICk7CisKKyAgICAgICAgICAgIG9wdGlvbnMucHV0KCBEZXBsb3ltZW50TWdyLkRFUExPWV9PUFRJT05fTkFNRV9LRVksIGRlcGxveU5hbWUgKTsKKyAgICAgICAgICAgIG9wdGlvbnMucHV0KCBEZXBsb3ltZW50TWdyLkRFUExPWV9PUFRJT05fVkVSSUZZX0tFWSwgQm9vbGVhbi5UUlVFLnRvU3RyaW5nKCkgKTsKKyAgICAgICAgICAgIG9wdGlvbnMucHV0KCBEZXBsb3ltZW50TWdyLkRFUExPWV9PUFRJT05fREVTQ1JJUFRJT05fS0VZLCAiZGVzY3JpcHRpb24iICk7CisKKworICAgICAgICAgICAgbWdyLnN0YXJ0RGVwbG95KCBkZXBsb3lJRCwgdXBsb2FkSUQsIG51bGwsIG9wdGlvbnMpOworCisgICAgICAgICAgICB3aGlsZSAoICEgbXlMaXN0ZW5lci5pc0NvbXBsZXRlZCgpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHByaW50bG4oICJkZXBsb3k6IHdhaXRpbmcgZm9yIGRlcGxveSBvZiAiICsgYXJjaGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcCggMTAwMCApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaCggSW50ZXJydXB0ZWRFeGNlcHRpb24gZSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmluYWwgRGVwbG95bWVudFN0YXR1cyAgICBzdGF0dXMgICAgPSBteUxpc3RlbmVyLmdldERlcGxveW1lbnRTdGF0dXMoKTsKKyAgICAgICAgICAgIGZpbmFsIE1hcCAgICBhZGRpdGlvbmFsU3RhdHVzICAgID0gc3RhdHVzLmdldEFkZGl0aW9uYWxTdGF0dXMoKTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyAgICBtb2R1bGVJRCAgICA9CisgICAgICAgICAgICAgICAgKFN0cmluZylhZGRpdGlvbmFsU3RhdHVzLmdldCggRGVwbG95bWVudFN0YXR1cy5NT0RVTEVfSURfS0VZICk7CisKKyAgICAgICAgICAgIFNhbXBsZVV0aWwucHJpbnRsbiggIkRlcGxveWVkICIgKyBxdW90ZShhcmNoaXZlTmFtZSkgKyAiIGFzICIgKyBxdW90ZShkZXBsb3lOYW1lKSArCisgICAgICAgICAgICAgICAgICI6IHN0YXR1cz0iICsgc3RhdHVzLmdldFN0YWdlU3RhdHVzKCkgKyAiLCBtb2R1bGVJRCA9ICIgKyBxdW90ZShtb2R1bGVJRCkgKworICAgICAgICAgICAgICAgICAiLCBBZGRpdGlvbmFsU3RhdHVzPSIgKyBTYW1wbGVVdGlsLm1hcFRvU3RyaW5nKCBhZGRpdGlvbmFsU3RhdHVzLCAiICIpICk7CisKKyAgICAgICAgICAgIGlmICggISBkZXBsb3lOYW1lLmVxdWFscyggbW9kdWxlSUQgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU2FtcGxlVXRpbC5wcmludGxuKCAiV0FSTklORzogcmVxdWVzdGVkIG5hbWUgb2YgIiArIHF1b3RlKGRlcGxveU5hbWUpICsKKyAgICAgICAgICAgICAgICAgICAgIiBoYXMgbm90IGJlZW4gdXNlZCwgYWN0dWFsIG5hbWUgPSAiICsgcXVvdGUobW9kdWxlSUQpICsKKyAgICAgICAgICAgICAgICAgICAgIiwgc2VlIGJ1ZyAjNjIxODcxNCIgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCBzdGF0dXMuZ2V0U3RhZ2VUaHJvd2FibGUoKSAhPSBudWxsICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMuZ2V0U3RhZ2VUaHJvd2FibGUoKS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5CisgICAgICAgIHsKKyAgICAgICAgICAgIHRyeQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1nci5yZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lciggbXlMaXN0ZW5lciApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBlICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgICAgICBwcml2YXRlIFN0cmluZworICAgIHF1b3RlKCBmaW5hbCBTdHJpbmcgcyApCisgICAgeworICAgICAgICByZXR1cm4gU2FtcGxlVXRpbC5xdW90ZSggcyApOworICAgIH0KKworICAgIC8qKgorICAgICAgICBVbmRlcGxveXMgYSBkZXBsb3llZCBtb2R1bGUuCisgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkCisgICAgdW5kZXBsb3koIGZpbmFsIFN0cmluZyBtb2R1bGVOYW1lICkKKyAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCisgICAgeworICAgICAgICBmaW5hbCBEZXBsb3ltZW50TWdyICAgIG1nciAgICA9IGdldERvbWFpblJvb3QoKS5nZXREZXBsb3ltZW50TWdyKCk7CisKKyAgICAgICAgZmluYWwgTWFwICAgIHN0YXR1c0RhdGEgICAgPSBtZ3IudW5kZXBsb3koIG1vZHVsZU5hbWUsIG51bGwgKTsKKyAgICAgICAgZmluYWwgRGVwbG95bWVudFN0YXR1cyAgICBzdGF0dXMgICAgPQorICAgICAgICAgICAgRGVwbG95bWVudFN1cHBvcnQubWFwVG9EZXBsb3ltZW50U3RhdHVzKCBzdGF0dXNEYXRhICk7CisKKyAgICAgICAgcHJpbnRsbiggIlVuZGVwbG95bWVudCByZXN1bHQ6ICIgKyBzdGF0dXMuZ2V0U3RhZ2VTdGF0dXMoKSApOworICAgICAgICBpZiAoIHN0YXR1cy5nZXRTdGFnZVRocm93YWJsZSgpICE9IG51bGwgKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMuZ2V0U3RhZ2VUaHJvd2FibGUoKS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAgICBHZXQgYSBKMkVFU2VydmVyIGJ5IG5hbWUuCisgICAgICovCisgICAgICAgIHB1YmxpYyBKMkVFU2VydmVyCisgICAgZ2V0SjJFRVNlcnZlciggZmluYWwgU3RyaW5nIHNlcnZlck5hbWUgKQorICAgIHsKKyAgICAgICAgZmluYWwgSjJFRURvbWFpbiAgICBqMmVlRG9tYWluICAgID0gZ2V0RG9tYWluUm9vdCgpLmdldEoyRUVEb21haW4oKTsKKyAgICAgICAgZmluYWwgTWFwICAgICAgICAgICAgc2VydmVycyAgICA9IGoyZWVEb21haW4uZ2V0U2VydmVyTWFwKCk7CisgICAgICAgIGZpbmFsIEoyRUVTZXJ2ZXIgICAgc2VydmVyICAgID0gKEoyRUVTZXJ2ZXIpc2VydmVycy5nZXQoIHNlcnZlck5hbWUgKTsKKworICAgICAgICBpZiAoIHNlcnZlciA9PSBudWxsICkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggc2VydmVyTmFtZSApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuKCBzZXJ2ZXIgKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgICAgQ3JlYXRlIGEgc3RhbmRhbG9uZSBzZXJ2ZXIuCisKKyAgICAgICAgQHBhcmFtIGNvbmZpZ05hbWUKKyAgICAgKi8KKyAgICAgICAgcHVibGljIENvbmZpZ0NvbmZpZworICAgIGNyZWF0ZUNvbmZpZyggZmluYWwgU3RyaW5nIGNvbmZpZ05hbWUgKQorICAgIHsKKyAgICAgICAgZmluYWwgQ29uZmlnQ29uZmlnICAgIGNvbmZpZyAgICA9IGdldERvbWFpbkNvbmZpZygpLmNyZWF0ZUNvbmZpZ0NvbmZpZyggY29uZmlnTmFtZSwgbnVsbCApOworICAgICAgICByZXR1cm4oIGNvbmZpZyApOworICAgIH0KKworICAgIC8qKgorICAgICAgICBDcmVhdGUgYSBzdGFuZGFsb25lIHNlcnZlci4KKworICAgICAgICBAcGFyYW0gc2VydmVyTmFtZQorICAgICAqLworICAgICAgICBwdWJsaWMgU3RhbmRhbG9uZVNlcnZlckNvbmZpZworICAgIGNyZWF0ZVNlcnZlcigKKyAgICAgICAgZmluYWwgU3RyaW5nICAgIHNlcnZlck5hbWUsCisgICAgICAgIGZpbmFsIFN0cmluZyAgICBjb25maWdOYW1lICkKKyAgICB7CisgICAgICAgIGZpbmFsIFN0cmluZyAgICBub2RlQWdlbnROYW1lICAgID0gbnVsbDsKKworICAgICAgICBmaW5hbCBTdGFuZGFsb25lU2VydmVyQ29uZmlnICAgIHNlcnZlciAgICA9IChTdGFuZGFsb25lU2VydmVyQ29uZmlnKQorICAgICAgICAgICAgZ2V0RG9tYWluQ29uZmlnKCkuY3JlYXRlU3RhbmRhbG9uZVNlcnZlckNvbmZpZyggc2VydmVyTmFtZSwgbm9kZUFnZW50TmFtZSwgY29uZmlnTmFtZSwgbnVsbCApOworCisgICAgICAgIHJldHVybiggc2VydmVyICk7CisgICAgfQorCisgICAgICAgIHB1YmxpYyBTdGFuZGFsb25lU2VydmVyQ29uZmlnCisgICAgY3JlYXRlU2VydmVyKCBmaW5hbCBTdHJpbmcgICAgc2VydmVyTmFtZSApCisgICAgeworICAgICAgICBmaW5hbCBDb25maWdDb25maWcgICAgY29uZmlnICAgID0gY3JlYXRlQ29uZmlnKCBzZXJ2ZXJOYW1lICsgIi1jb25maWciICk7CisKKyAgICAgICAgZmluYWwgU3RhbmRhbG9uZVNlcnZlckNvbmZpZyAgICBzZXJ2ZXIgICAgPSBjcmVhdGVTZXJ2ZXIoIHNlcnZlck5hbWUsIGNvbmZpZy5nZXROYW1lKCkgKTsKKyAgICAgICAgcmV0dXJuKCBzZXJ2ZXIgKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAgICBTdGFydCBhIHNlcnZlci4KKyAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQKKyAgICBzdGFydFNlcnZlciggZmluYWwgU3RyaW5nIHNlcnZlck5hbWUgKQorICAgIHsKKyAgICAgICAgZmluYWwgSjJFRVNlcnZlciAgICBzZXJ2ZXIgICAgPSBnZXRKMkVFU2VydmVyKCBzZXJ2ZXJOYW1lICk7CisKKyAgICAgICAgc2VydmVyLnN0YXJ0KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICAgIFN0b3AgYSBzZXJ2ZXIuCisgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkCisgICAgc3RvcFNlcnZlciggZmluYWwgU3RyaW5nIHNlcnZlck5hbWUgKQorICAgIHsKKyAgICAgICAgZmluYWwgSjJFRVNlcnZlciAgICBzZXJ2ZXIgICAgPSBnZXRKMkVFU2VydmVyKCBzZXJ2ZXJOYW1lICk7CisKKyAgICAgICAgc2VydmVyLnN0b3AoKTsKKyAgICB9CisKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFNldCAgICBMRUdBTF9NT04gICAgPQorICAgICAgICBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVTZXQoIFNhbXBsZVV0aWwubmV3U2V0KCBuZXcgU3RyaW5nW10KKyAgICB7CisgICAgICAgIE1vZHVsZU1vbml0b3JpbmdMZXZlbFZhbHVlcy5ISUdILAorICAgICAgICBNb2R1bGVNb25pdG9yaW5nTGV2ZWxWYWx1ZXMuTE9XLAorICAgICAgICBNb2R1bGVNb25pdG9yaW5nTGV2ZWxWYWx1ZXMuT0ZGLAorICAgIH0gKSk7CisKKyAgICAvKioKKyAgICAgICAgU2V0cyB0aGUgbW9uaXRvcmluZyBzdGF0ZSBmb3IgYWxsIGF2YWlsYWJsZSBtb2R1bGVzLgorCisgICAgICAgIEBwYXJhbSBjb25maWdOYW1lICAgIGNvbmZpZ3VyYXRpb24gZWxlbWVudCBvbiB3aGljaCB0byBvcGVyYXRlCisgICAgICAgIEBwYXJhbSBzdGF0ZSAgICAgICAgb25lIG9mIEhJR0gsIExPVywgT0ZGCisgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkCisgICAgc2V0TW9uaXRvcmluZygKKyAgICAgICAgZmluYWwgU3RyaW5nICAgIGNvbmZpZ05hbWUsCisgICAgICAgIGZpbmFsIFN0cmluZyAgICAgc3RhdGUgKQorICAgIHsKKyAgICAgICAgaWYgKCAhIExFR0FMX01PTi5jb250YWlucyggc3RhdGUgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIHN0YXRlICk7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBDb25maWdDb25maWcgICAgY29uZmlnICAgID0KKyAgICAgICAgICAgIChDb25maWdDb25maWcpZ2V0RG9tYWluQ29uZmlnKCkuZ2V0Q29uZmlnQ29uZmlnTWFwKCkuZ2V0KCBjb25maWdOYW1lICk7CisKKyAgICAgICAgZmluYWwgTW9kdWxlTW9uaXRvcmluZ0xldmVsc0NvbmZpZyAgICBtb24gICAgPQorICAgICAgICAgICAgY29uZmlnLmdldE1vbml0b3JpbmdTZXJ2aWNlQ29uZmlnKCkuZ2V0TW9kdWxlTW9uaXRvcmluZ0xldmVsc0NvbmZpZygpOworCisgICAgICAgIC8vIHNldCBhbGwgbW9kdWxlcyB0byB0aGUgc2FtZSBzdGF0ZQorICAgICAgICBtb24uc2V0Q29ubmVjdG9yQ29ubmVjdGlvblBvb2woIHN0YXRlICk7CisgICAgICAgIG1vbi5zZXRUaHJlYWRQb29sKCBzdGF0ZSApOworICAgICAgICBtb24uc2V0SFRUUFNlcnZpY2UoIHN0YXRlICk7CisgICAgICAgIG1vbi5zZXRKREJDQ29ubmVjdGlvblBvb2woIHN0YXRlICk7CisgICAgICAgIG1vbi5zZXRPUkIoIHN0YXRlICk7CisgICAgICAgIG1vbi5zZXRUcmFuc2FjdGlvblNlcnZpY2UoIHN0YXRlICk7CisgICAgICAgIG1vbi5zZXRXZWJDb250YWluZXIoIHN0YXRlICk7CisgICAgICAgIG1vbi5zZXRFSkJDb250YWluZXIoIHN0YXRlICk7CisgICAgfQorCisgICAgLyoqCisgICAgICAgIEdldCBhIE1hcCBvZiA8aT5wcm9wZXJ0eS1uYW1lPC9pPj08aT5wcm9wZXJ0eS12YWx1ZTwvaT4uCisKKyAgICAgICAgQHBhcmFtIHBhICAgIGEgUHJvcGVydGllc0FjY2VzcworICAgICAqLworICAgICAgICBwdWJsaWMgTWFwCisgICAgZ2V0UHJvcGVydGllcyggZmluYWwgUHJvcGVydGllc0FjY2VzcyBwYSApCisgICAgeworICAgICAgICBmaW5hbCBIYXNoTWFwICAgIG0gICAgPSBuZXcgSGFzaE1hcCgpOworCisgICAgICAgIGZpbmFsIFN0cmluZ1tdICAgIG5hbWVzICAgID0gcGEuZ2V0UHJvcGVydHlOYW1lcygpOworICAgICAgICBmb3IoIGludCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgKytpICkKKyAgICAgICAgeworICAgICAgICAgICAgbS5wdXQoIG5hbWVzWyBpIF0sIHBhLmdldFByb3BlcnR5VmFsdWUoIG5hbWVzWyBpIF0gKSApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuKCBtICk7CisgICAgfQorCisgICAgLyoqCisgICAgICAgIERpc3BsYXkgYWxsIHByb3BlcnRpZXMgZm91bmQgb24gYWxsIHtAbGluayBBTVh9LgorCisgICAgICAgIEBzZWUgI2dldFByb3BlcnRpZXMoUHJvcGVydGllc0FjY2VzcykKKyAgICAgICAgQHNlZSBQcm9wZXJ0aWVzQWNjZXNzI2dldFByb3BlcnR5TmFtZXMKKyAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQKKyAgICBkaXNwbGF5QWxsUHJvcGVydGllcyggKQorICAgIHsKKyAgICAgICAgZmluYWwgSXRlcmF0b3IgICAgaXRlciAgICA9IGdldFF1ZXJ5TWdyKCkucXVlcnlBbGxTZXQoKS5pdGVyYXRvcigpOworICAgICAgICB3aGlsZSAoIGl0ZXIuaGFzTmV4dCgpICkKKyAgICAgICAgeworICAgICAgICAgICAgZmluYWwgQU1YICAgIGFteCAgICA9IChBTVgpaXRlci5uZXh0KCk7CisKKyAgICAgICAgICAgIGlmICggYW14IGluc3RhbmNlb2YgUHJvcGVydGllc0FjY2VzcyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmluYWwgUHJvcGVydGllc0FjY2VzcyAgICBwYSAgICA9IChQcm9wZXJ0aWVzQWNjZXNzKWFteDsKKworICAgICAgICAgICAgICAgIGZpbmFsIE1hcCAgICBwcm9wcyAgICA9IGdldFByb3BlcnRpZXMoIHBhICk7CisgICAgICAgICAgICAgICAgaWYgKCBwcm9wcy5rZXlTZXQoKS5zaXplKCkgIT0gMCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwcmludGxuKCAiXG5Qcm9wZXJ0aWVzIGZvcjogIiArIFV0aWwuZ2V0T2JqZWN0TmFtZSggKEFNWClwYSApICk7CisgICAgICAgICAgICAgICAgICAgIHByaW50bG4oIFNhbXBsZVV0aWwubWFwVG9TdHJpbmcoIGdldFByb3BlcnRpZXMoIHBhICksICJcbiIpICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZAorICAgIG15U2xlZXAoIGZpbmFsIGxvbmcgbWlsbGlzICkKKyAgICB7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICBUaHJlYWQuc2xlZXAoIG1pbGxpcyApOworICAgICAgICB9CisgICAgICAgIGNhdGNoKCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlICkKKyAgICAgICAgeworICAgICAgICB9CisgICAgfQorCisKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyAgICBNQkVBTl9TRVJWRVJfREVMRUdBVEUgICAgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJKTUltcGxlbWVudGF0aW9uOnR5cGU9TUJlYW5TZXJ2ZXJEZWxlZ2F0ZSI7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0TmFtZQorICAgIGdldE1CZWFuU2VydmVyRGVsZWdhdGVPYmplY3ROYW1lKCkKKyAgICB7CisgICAgICAgIHJldHVybiggVXRpbC5uZXdPYmplY3ROYW1lKCBNQkVBTl9TRVJWRVJfREVMRUdBVEUgKSApOworICAgIH0KKworCisgICAgICAgIHByaXZhdGUgdm9pZAorICAgIHdhaXROdW1Ob3RpZnMoIGZpbmFsIE1hcCBub3RpZnMsIGZpbmFsIFN0cmluZyB0eXBlLCBmaW5hbCBpbnQgbnVtUmVxdWlyZWQgKQorICAgIHsKKyAgICAgICAgd2hpbGUgKCB0cnVlICkKKyAgICAgICAgeworICAgICAgICAgICAgZmluYWwgTGlzdCAgICBsaXN0ICAgID0gKExpc3Qpbm90aWZzLmdldCggdHlwZSApOworICAgICAgICAgICAgaWYgKCBsaXN0ICE9IG51bGwgJiYgbGlzdC5zaXplKCkgPj0gbnVtUmVxdWlyZWQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBteVNsZWVwKCA1MCApOworICAgICAgICB9CisgICAgfQorCisKKworICAgICAgICBwcml2YXRlIHZvaWQKKyAgICB3YWl0TUJlYW5TZXJ2ZXJOb3RpZmljYXRpb24oCisgICAgICAgIGZpbmFsIFNhbXBsZUxpc3RlbmVyICAgIGxpc3RlbmVyLAorICAgICAgICBmaW5hbCBTdHJpbmcgICAgICAgICAgICB0eXBlLAorICAgICAgICBmaW5hbCBPYmplY3ROYW1lICAgICAgICBvYmplY3ROYW1lICkKKyAgICB7CisgICAgICAgIExpc3QgICAgICAgIGxpc3QgICAgPSBudWxsOworICAgICAgICB3aGlsZSAoIChsaXN0ID0gbGlzdGVuZXIuZ2V0Tm90aWZzUmVjZWl2ZWQoIHR5cGUgKSkgPT0gbnVsbCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG15U2xlZXAoIDUwICk7CisgICAgICAgIH0KKworICAgICAgICBib29sZWFuICAgIHdhaXRpbmcgICAgPSB0cnVlOworICAgICAgICB3aGlsZSAoIHdhaXRpbmcgKQorICAgICAgICB7CisgICAgICAgICAgICBmaW5hbCBJdGVyYXRvciAgICBpdGVyICAgID0gbGlzdC5pdGVyYXRvcigpOworICAgICAgICAgICAgd2hpbGUgKCBpdGVyLmhhc05leHQoKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmluYWwgTUJlYW5TZXJ2ZXJOb3RpZmljYXRpb24gICAgbm90aWYgICAgPSAoTUJlYW5TZXJ2ZXJOb3RpZmljYXRpb24paXRlci5uZXh0KCk7CisgICAgICAgICAgICAgICAgaWYgKCBub3RpZi5nZXRNQmVhbk5hbWUoKS5lcXVhbHMoIG9iamVjdE5hbWUgKSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3YWl0aW5nICAgID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBTYW1wbGVVdGlsLnByaW50bG4oICJVbmV4cGVjdGVkIE9iamVjdE5hbWU6ICIgKyBvYmplY3ROYW1lICsgIiAhPSAiICsgbm90aWYuZ2V0TUJlYW5OYW1lKCkgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBteVNsZWVwKCAxMDAgKTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICAgIERlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIGEgamF2YXgubWFuYWdlbWVudC5tb25pdG9yIE1CZWFuCisgICAgICAgIHRvIGJlIG5vdGlmaWVkIG9mIGNoYW5nZXMgaW4gdGhlIHZhbHVlIG9mIGFuIEF0dHJpYnV0ZS4KKyAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQKKyAgICBkZW1vSk1YTW9uaXRvcigpCisgICAgICAgIHRocm93cyBJbnN0YW5jZU5vdEZvdW5kRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgZmluYWwgSk1YTW9uaXRvck1nciAgICBtZ3IgICAgPSBnZXREb21haW5Sb290KCkuZ2V0Sk1YTW9uaXRvck1ncigpOworCisgICAgICAgIGZpbmFsIFN0cmluZyAgICBhdHRyTmFtZSAgICA9ICJTYW1wbGVTdHJpbmciOworICAgICAgICBmaW5hbCBTdHJpbmcgICAgYXR0clZhbHVlICAgID0gImhlbGxvIjsKKworICAgICAgICAvLyBsaXN0ZW4gdG8gdGhlIE1CZWFuU2VydmVyRGVsZWdhdGUsIHRvbywgc28gd2UgY2FuIHNlZSBvdXIgc2FtcGxlIG1vbml0b3IKKyAgICAgICAgLy8gZ2V0IHJlZ2lzdGVyZWQuCisgICAgICAgIGZpbmFsIFNhbXBsZUxpc3RlbmVyICAgIHNhbXBsZUxpc3RlbmVyICAgID0gbmV3IFNhbXBsZUxpc3RlbmVyKCk7CisgICAgICAgIGZpbmFsIE1CZWFuU2VydmVyQ29ubmVjdGlvbiAgICBjb25uICAgID0KKyAgICAgICAgICAgIFV0aWwuZ2V0RXh0cmEoIG1nciApLmdldENvbm5lY3Rpb25Tb3VyY2UoKS5nZXRFeGlzdGluZ01CZWFuU2VydmVyQ29ubmVjdGlvbigpOworICAgICAgICBjb25uLmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKAorICAgICAgICAgICAgZ2V0TUJlYW5TZXJ2ZXJEZWxlZ2F0ZU9iamVjdE5hbWUoKSwgc2FtcGxlTGlzdGVuZXIsIG51bGwsIG51bGwgKTsKKworCisgICAgICAgIGZpbmFsIFNhbXBsZSAgICBzYW1wbGUgICAgPSAoU2FtcGxlKWdldERvbWFpblJvb3QoKS5nZXRDb250YWluZWUoIFhUeXBlcy5TQU1QTEUgKTsKKworICAgICAgICBmaW5hbCBTdHJpbmcgICAgbW9uaXRvck5hbWUgICAgPSAiU2FtcGxlU3RyaW5nTW9uaXRvciI7CisgICAgICAgIEFNWFN0cmluZ01vbml0b3IgICAgbW9uICAgID0gbnVsbDsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGNsZWFudXAgaW4gY2FzZSBpdCB3YXMgbGVmdCBhcm91bmQgYnkgbWlzdGFrZS4uLgorICAgICAgICAgICAgdHJ5IHsgbWdyLnJlbW92ZSggbW9uaXRvck5hbWUgKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSAgICB7fQorCisgICAgICAgICAgICAvLyBjcmVhdGUgYSBuZXcgb25lCisgICAgICAgICAgICBtb24gICAgPSBtZ3IuY3JlYXRlU3RyaW5nTW9uaXRvciggbW9uaXRvck5hbWUgKTsKKyAgICAgICAgICAgIC8vIG9ic2VydmVyIHRoYXQgd2UndmUgYmVlbiBub3RpZmllZCAobm90IHJlcXVpcmVkKQorICAgICAgICAgICAgd2FpdE1CZWFuU2VydmVyTm90aWZpY2F0aW9uKCBzYW1wbGVMaXN0ZW5lciwKKyAgICAgICAgICAgICAgICBNQmVhblNlcnZlck5vdGlmaWNhdGlvbi5SRUdJU1RSQVRJT05fTk9USUZJQ0FUSU9OLCBVdGlsLmdldE9iamVjdE5hbWUoIG1vbiApICk7CisKKyAgICAgICAgICAgIC8vIHdlJ2xsIG1vZGlmeSB0aGlzIEF0dHJpYnV0ZSdzIHZhbHVlLCB0byBmb3JjZSBhIGNoYW5nZQorICAgICAgICAgICAgc2FtcGxlLmFkZEF0dHJpYnV0ZSggYXR0ck5hbWUsIGF0dHJWYWx1ZSApOworCisgICAgICAgICAgICAvLyBsaXN0ZW4gdG8gdGhlIG1vbml0b3IKKyAgICAgICAgICAgIG1vbi5hZGROb3RpZmljYXRpb25MaXN0ZW5lciggc2FtcGxlTGlzdGVuZXIsIG51bGwsIG51bGwgKTsKKyAgICAgICAgICAgIG1vbi5zZXRPYnNlcnZlZEF0dHJpYnV0ZSggYXR0ck5hbWUgKTsKKyAgICAgICAgICAgIG1vbi5zZXRTdHJpbmdUb0NvbXBhcmUoIGF0dHJWYWx1ZSApOworICAgICAgICAgICAgbW9uLnNldE5vdGlmeURpZmZlciggdHJ1ZSApOworICAgICAgICAgICAgbW9uLnNldE5vdGlmeU1hdGNoKCB0cnVlICk7CisKKyAgICAgICAgICAgIC8vIHRlbGwgdGhlIG1vbml0b3IgdG8gb2JzZXJ2ZSBzYW1wbGUKKyAgICAgICAgICAgIG1vbi5hZGRPYnNlcnZlZE9iamVjdCggVXRpbC5nZXRPYmplY3ROYW1lKCBzYW1wbGUgKSApOworCisgICAgICAgICAgICAvLyBzaW5jZSB0aGUgQXR0cmlidXRlIHdhcyBhZGRlZCBkeW5hbWljYWxseSwgdGhlcmUgaXMgbm8KKyAgICAgICAgICAgIC8vIGdldHRlciBtZXRob2QsIHNvIHdlIG11c3QgYWNjZXNzIHRoZSBBdHRyaWJ1dGUgdmlhIEpNWAorICAgICAgICAgICAgZmluYWwgU3RkQXR0cmlidXRlc0FjY2VzcyAgICBhdHRycyAgICA9IFV0aWwuZ2V0RXh0cmEoIHNhbXBsZSApOworICAgICAgICAgICAgYXR0cnMuc2V0QXR0cmlidXRlKCBuZXcgQXR0cmlidXRlKCBhdHRyTmFtZSwgImdvb2RieWUiICkgKTsKKyAgICAgICAgICAgIC8vIHNldCBpdCB0byBvcmlnaW5hbCB2YWx1ZQorICAgICAgICAgICAgYXR0cnMuc2V0QXR0cmlidXRlKCBuZXcgQXR0cmlidXRlKCBhdHRyTmFtZSwgYXR0clZhbHVlICkgKTsKKworICAgICAgICAgICAgLy8gd2UgYWRkZWQgaXQsc28gd2Ugc2hvdWxkIHJlbW92ZSBpdAorICAgICAgICAgICAgc2FtcGxlLnJlbW92ZUF0dHJpYnV0ZSggYXR0ck5hbWUgKTsKKworICAgICAgICAgICAgLy8gbGV0IHRoZSBOb3RpZmljYXRpb25zIGFycml2ZS4uLgorICAgICAgICAgICAgZmluYWwgTWFwICAgIG5vdGlmcyAgICA9IHNhbXBsZUxpc3RlbmVyLmdldE5vdGlmc1JlY2VpdmVkKCk7CisgICAgICAgICAgICB3YWl0TnVtTm90aWZzKCBub3RpZnMsIEF0dHJpYnV0ZUNoYW5nZU5vdGlmaWNhdGlvbi5BVFRSSUJVVEVfQ0hBTkdFLCA0ICk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goIFRocm93YWJsZSB0ICkKKyAgICAgICAgeworICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5CisgICAgICAgIHsKKyAgICAgICAgICAgIHRyeQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1vbi5yZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lciggc2FtcGxlTGlzdGVuZXIgKTsKKworICAgICAgICAgICAgICAgIC8vIGRvbid0IGxlYXZlIG1vbml0b3JzIGFyb3VuZAorICAgICAgICAgICAgICAgIGlmICggbW9uICE9IG51bGwgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWdyLnJlbW92ZSggbW9uLmdldE5hbWUoKSApOworICAgICAgICAgICAgICAgICAgICAvLyBvYnNlcnZlciB0aGF0IHdlJ3ZlIGJlZW4gbm90aWZpZWQgKG5vdCByZXF1aXJlZCkKKyAgICAgICAgICAgICAgICAgICAgd2FpdE1CZWFuU2VydmVyTm90aWZpY2F0aW9uKCBzYW1wbGVMaXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1CZWFuU2VydmVyTm90aWZpY2F0aW9uLlVOUkVHSVNUUkFUSU9OX05PVElGSUNBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFV0aWwuZ2V0T2JqZWN0TmFtZSggbW9uICkgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjb25uLnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKAorICAgICAgICAgICAgICAgICAgICBnZXRNQmVhblNlcnZlckRlbGVnYXRlT2JqZWN0TmFtZSgpLCBzYW1wbGVMaXN0ZW5lciApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2goIExpc3RlbmVyTm90Rm91bmRFeGNlcHRpb24gZSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvc2FtcGxlcy9jb20vc3VuL2FwcHNlcnYvbWFuYWdlbWVudC9zYW1wbGUvY3JlYXRlLWFteC1zYW1wbGUuc2ggYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL2NvbS9zdW4vYXBwc2Vydi9tYW5hZ2VtZW50L3NhbXBsZS9jcmVhdGUtYW14LXNhbXBsZS5zaAppbmRleCA4YTkzOThkLi42MmU5YTBiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL2NvbS9zdW4vYXBwc2Vydi9tYW5hZ2VtZW50L3NhbXBsZS9jcmVhdGUtYW14LXNhbXBsZS5zaAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL2NvbS9zdW4vYXBwc2Vydi9tYW5hZ2VtZW50L3NhbXBsZS9jcmVhdGUtYW14LXNhbXBsZS5zaApAQCAtMTgsMjUgKzE4LDI1IEBACiAjIHJlc3VsdGluZyB2YWx1ZSBpcyByZXR1cm5lZCBpbiB0aGUgdmFyaWFibGUgJ0ZVTExQQVRIX1JFU1VMVCcKIGZ1bGxwYXRoKCkKIHsKLQlpZiBbICQjICE9IDEgXQotCXRoZW4KLQkJZWNobyAiZnVsbHBhdGg6IGV4YWN0bHkgb25lIGFyZ3VtZW50IHJlcXVpcmVkIgotCQlleGl0IDEKLQlmaQotCQotCURJUl9JTj0kMQorICAgIGlmIFsgJCMgIT0gMSBdCisgICAgdGhlbgorICAgICAgICBlY2hvICJmdWxscGF0aDogZXhhY3RseSBvbmUgYXJndW1lbnQgcmVxdWlyZWQiCisgICAgICAgIGV4aXQgMQorICAgIGZpCiAKLQlDV0Q9YHB3ZGAKLQkJaWYgWyAtZCAkRElSX0lOIF0KLQkJdGhlbgotCQkJY2QgJERJUl9JTgotCQkgICAgRlVMTFBBVEhfUkVTVUxUPWBwd2RgCi0JICAgIGVsc2UKLQkgICAgCWVjaG8gIkNhbid0IGNkIHRvICIgJERJUl9JTgotCSAgICAJZXhpdCAxCi0JICAgIGZpCi0JCi0JY2QgJENXRAorICAgIERJUl9JTj0kMQorCisgICAgQ1dEPWBwd2RgCisgICAgICAgIGlmIFsgLWQgJERJUl9JTiBdCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIGNkICRESVJfSU4KKyAgICAgICAgICAgIEZVTExQQVRIX1JFU1VMVD1gcHdkYAorICAgICAgICBlbHNlCisgICAgICAgICAgICBlY2hvICJDYW4ndCBjZCB0byAiICRESVJfSU4KKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorCisgICAgY2QgJENXRAogfQogCiAKQEAgLTQ3LDE2ICs0NywxNiBAQAogIyB0aGUgY2xhc3NwYXRoIHNlcGFyYXRvci0taWYgbm90IHNldCwgY2hvb3NlIGEgZGVmYXVsdAogaWYgWyAteiAiJENMQVNTUEFUSF9TRVBBUkFUT1IiIF0KIHRoZW4KLQkjIG5vdCBkZWZpbmVkLS1sb29rIGZvciB0ZWxsdGFsZSBzaWduIG9mIFdpbmRvd3MtLXRoZSAiOlwiIGluIG91ciBwYXRoCi0JZWNobyAkU0NSSVBUX0RJUiB8IGdyZXAgLWUgIjpcXFxcIiAtZSAiOi8iCi0JaWYgWyAkPyA9IDAgXQotCXRoZW4KLQkJQ1BTPSI7IgotCWVsc2UKLQkJQ1BTPSI6IgotCWZpCisgICAgIyBub3QgZGVmaW5lZC0tbG9vayBmb3IgdGVsbHRhbGUgc2lnbiBvZiBXaW5kb3dzLS10aGUgIjpcIiBpbiBvdXIgcGF0aAorICAgIGVjaG8gJFNDUklQVF9ESVIgfCBncmVwIC1lICI6XFxcXCIgLWUgIjovIgorICAgIGlmIFsgJD8gPSAwIF0KKyAgICB0aGVuCisgICAgICAgIENQUz0iOyIKKyAgICBlbHNlCisgICAgICAgIENQUz0iOiIKKyAgICBmaQogZWxzZQotCUNQUz0kQ0xBU1NQQVRIX1NFUEFSQVRPUgorICAgIENQUz0kQ0xBU1NQQVRIX1NFUEFSQVRPUgogZmkKIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL2NvbS9zdW4vYXBwc2Vydi9tYW5hZ2VtZW50L3NhbXBsZS9ydW4tc2FtcGxlcy5iYXQgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL2NvbS9zdW4vYXBwc2Vydi9tYW5hZ2VtZW50L3NhbXBsZS9ydW4tc2FtcGxlcy5iYXQKaW5kZXggMTAxN2UwMC4uMzdhNzgwMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvc2FtcGxlcy9jb20vc3VuL2FwcHNlcnYvbWFuYWdlbWVudC9zYW1wbGUvcnVuLXNhbXBsZXMuYmF0CisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL3NhbXBsZXMvY29tL3N1bi9hcHBzZXJ2L21hbmFnZW1lbnQvc2FtcGxlL3J1bi1zYW1wbGVzLmJhdApAQCAtMSw2ICsxLDYgQEAKLVJFTSBUaGVzZSBqYXIgZmlsZXMgbXVzdCBiZSBwcmVzZW50IQotc2V0IFNURF9KQVJTPWpteHJpLmphcjtqbXhyZW1vdGUuamFyO2phdmF4NzcuamFyCi1zZXQgQ1A9LjthbXgtY2xpZW50LmphcjslU1REX0pBUlMlCi0KLWphdmEgLWNwICVDUCUgY29tLnN1bi5hcHBzZXJ2Lm1hbmFnZW1lbnQuc2FtcGxlLlNhbXBsZU1haW4gLlxTYW1wbGVNYWluLnByb3BlcnRpZXMKLQorUkVNIFRoZXNlIGphciBmaWxlcyBtdXN0IGJlIHByZXNlbnQhDQorc2V0IFNURF9KQVJTPWpteHJpLmphcjtqbXhyZW1vdGUuamFyO2phdmF4NzcuamFyDQorc2V0IENQPS47YW14LWNsaWVudC5qYXI7JVNURF9KQVJTJQ0KKw0KK2phdmEgLWNwICVDUCUgY29tLnN1bi5hcHBzZXJ2Lm1hbmFnZW1lbnQuc2FtcGxlLlNhbXBsZU1haW4gLlxTYW1wbGVNYWluLnByb3BlcnRpZXMNCisNCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL2NyZWF0ZS1hbXgtc2RrLnNoIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvc2FtcGxlcy9jcmVhdGUtYW14LXNkay5zaAppbmRleCAwMzc0NDhiLi4zNWY5YjBhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL2NyZWF0ZS1hbXgtc2RrLnNoCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL3NhbXBsZXMvY3JlYXRlLWFteC1zZGsuc2gKQEAgLTE4LDI1ICsxOCwyNSBAQAogIyByZXN1bHRpbmcgdmFsdWUgaXMgcmV0dXJuZWQgaW4gdGhlIHZhcmlhYmxlICdGVUxMUEFUSF9SRVNVTFQnCiBmdWxscGF0aCgpCiB7Ci0JaWYgWyAkIyAhPSAxIF0KLQl0aGVuCi0JCWVjaG8gImZ1bGxwYXRoOiBleGFjdGx5IG9uZSBhcmd1bWVudCByZXF1aXJlZCIKLQkJZXhpdCAxCi0JZmkKLQkKLQlESVJfSU49JDEKKyAgICBpZiBbICQjICE9IDEgXQorICAgIHRoZW4KKyAgICAgICAgZWNobyAiZnVsbHBhdGg6IGV4YWN0bHkgb25lIGFyZ3VtZW50IHJlcXVpcmVkIgorICAgICAgICBleGl0IDEKKyAgICBmaQogCi0JQ1dEPWBwd2RgCi0JCWlmIFsgLWQgJERJUl9JTiBdCi0JCXRoZW4KLQkJCWNkICRESVJfSU4KLQkJICAgIEZVTExQQVRIX1JFU1VMVD1gcHdkYAotCSAgICBlbHNlCi0JICAgIAllY2hvICJDYW4ndCBjZCB0byAiICRESVJfSU4KLQkgICAgCWV4aXQgMQotCSAgICBmaQotCQotCWNkICRDV0QKKyAgICBESVJfSU49JDEKKworICAgIENXRD1gcHdkYAorICAgICAgICBpZiBbIC1kICRESVJfSU4gXQorICAgICAgICB0aGVuCisgICAgICAgICAgICBjZCAkRElSX0lOCisgICAgICAgICAgICBGVUxMUEFUSF9SRVNVTFQ9YHB3ZGAKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZWNobyAiQ2FuJ3QgY2QgdG8gIiAkRElSX0lOCisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgZmkKKworICAgIGNkICRDV0QKIH0KIAogCkBAIC00NywxNiArNDcsMTYgQEAKICMgdGhlIGNsYXNzcGF0aCBzZXBhcmF0b3ItLWlmIG5vdCBzZXQsIGNob29zZSBhIGRlZmF1bHQKIGlmIFsgLXogIiRDTEFTU1BBVEhfU0VQQVJBVE9SIiBdCiB0aGVuCi0JIyBub3QgZGVmaW5lZC0tbG9vayBmb3IgdGVsbHRhbGUgc2lnbiBvZiBXaW5kb3dzLS10aGUgIjpcIiBpbiBvdXIgcGF0aAotCWVjaG8gJFNDUklQVF9ESVIgfCBncmVwIC1lICI6XFxcXCIgLWUgIjovIgotCWlmIFsgJD8gPSAwIF0KLQl0aGVuCi0JCUNQUz0iOyIKLQllbHNlCi0JCUNQUz0iOiIKLQlmaQorICAgICMgbm90IGRlZmluZWQtLWxvb2sgZm9yIHRlbGx0YWxlIHNpZ24gb2YgV2luZG93cy0tdGhlICI6XCIgaW4gb3VyIHBhdGgKKyAgICBlY2hvICRTQ1JJUFRfRElSIHwgZ3JlcCAtZSAiOlxcXFwiIC1lICI6LyIKKyAgICBpZiBbICQ/ID0gMCBdCisgICAgdGhlbgorICAgICAgICBDUFM9IjsiCisgICAgZWxzZQorICAgICAgICBDUFM9IjoiCisgICAgZmkKIGVsc2UKLQlDUFM9JENMQVNTUEFUSF9TRVBBUkFUT1IKKyAgICBDUFM9JENMQVNTUEFUSF9TRVBBUkFUT1IKIGZpCiAKIApAQCAtMTMwLDcgKzEzMCw3IEBACiBjcCAkSk1YX1JJX0pBUiAkSk1YX1JFTU9URV9KQVIgJFNES19ESVIKIGNwICRKQVZBWDc3X0pBUiAkU0RLX0RJUi9qYXZheDc3LmphcgogCi1lY2hvICJcbkNvcHlpbmcgc2FtcGxlcyBzY3JpcHRzLi4uIiAKK2VjaG8gIlxuQ29weWluZyBzYW1wbGVzIHNjcmlwdHMuLi4iCiBjcCAkU1JDX1NBTVBMRS9ydW4tc2FtcGxlcy5iYXQgJFNSQ19TQU1QTEUvcnVuLXNhbXBsZXMuc2ggJFNES19ESVIKIGNwICRTUkNfU0FNUExFL1NhbXBsZU1haW4ucHJvcGVydGllcyAkU0RLX0RJUgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL3J1bi1zYW1wbGVzLmJhdCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL3NhbXBsZXMvcnVuLXNhbXBsZXMuYmF0CmluZGV4IDEyMzUwYjQuLmJiY2VlNDMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL3NhbXBsZXMvcnVuLXNhbXBsZXMuYmF0CisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL3NhbXBsZXMvcnVuLXNhbXBsZXMuYmF0CkBAIC0xLDYgKzEsNiBAQAotUkVNIFRoZXNlIGphciBmaWxlcyBtdXN0IGJlIHByZXNlbnQhCi1zZXQgU1REX0pBUlM9am14cmkuamFyO2pteHJlbW90ZS5qYXI7amF2YXg3Ny5qYXIKLXNldCBDUD0uO2FteC1jbGllbnQuamFyOyVTVERfSkFSUyUKLQotamF2YSAtY3AgJUNQJSBzYW1wbGVzLmFteC5TYW1wbGVNYWluIC5cU2FtcGxlTWFpbi5wcm9wZXJ0aWVzCi0KK1JFTSBUaGVzZSBqYXIgZmlsZXMgbXVzdCBiZSBwcmVzZW50IQ0KK3NldCBTVERfSkFSUz1qbXhyaS5qYXI7am14cmVtb3RlLmphcjtqYXZheDc3Lmphcg0KK3NldCBDUD0uO2FteC1jbGllbnQuamFyOyVTVERfSkFSUyUNCisNCitqYXZhIC1jcCAlQ1AlIHNhbXBsZXMuYW14LlNhbXBsZU1haW4gLlxTYW1wbGVNYWluLnByb3BlcnRpZXMNCisNCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL3NhbXBsZXMvYW14L0RlcGxveU5vdGlmaWNhdGlvbkxpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL3NhbXBsZXMvYW14L0RlcGxveU5vdGlmaWNhdGlvbkxpc3RlbmVyLmphdmEKaW5kZXggMzIzOGVmYi4uNGE1NTc0NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvc2FtcGxlcy9zYW1wbGVzL2FteC9EZXBsb3lOb3RpZmljYXRpb25MaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL3NhbXBsZXMvc2FtcGxlcy9hbXgvRGVwbG95Tm90aWZpY2F0aW9uTGlzdGVuZXIuamF2YQpAQCAtMjIsOTYgKzIyLDk2IEBACiAKIAogLyoqCi0JQSBKTVggTm90aWZpY2F0aW9uTGlzdGVuZXIgZm9yIGRlcGxveW1lbnQuCisgICAgQSBKTVggTm90aWZpY2F0aW9uTGlzdGVuZXIgZm9yIGRlcGxveW1lbnQuCiAgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBEZXBsb3lOb3RpZmljYXRpb25MaXN0ZW5lcgotCQlpbXBsZW1lbnRzIE5vdGlmaWNhdGlvbkxpc3RlbmVyCisgICAgICAgIGltcGxlbWVudHMgTm90aWZpY2F0aW9uTGlzdGVuZXIKIHsKLQlwcml2YXRlIGZpbmFsIE9iamVjdAkJbURlcGxveUlEOwotCXByaXZhdGUgYm9vbGVhbgkJCQltSXNDb21wbGV0ZWQ7Ci0JcHJpdmF0ZSBEZXBsb3ltZW50U3RhdHVzCW1EZXBsb3ltZW50U3RhdHVzOwotCQotCQlwdWJsaWMKLQlEZXBsb3lOb3RpZmljYXRpb25MaXN0ZW5lciggZmluYWwgT2JqZWN0CWRlcGxveUlEICkKLQl7Ci0JCW1EZXBsb3lJRAkJPSBkZXBsb3lJRDsKLQkJbUlzQ29tcGxldGVkCT0gZmFsc2U7Ci0JfQotCQotCQlwdWJsaWMgYm9vbGVhbgotCWlzQ29tcGxldGVkKCkKLQl7Ci0JCXJldHVybiggbUlzQ29tcGxldGVkICk7Ci0JfQotCQotCQlwdWJsaWMgRGVwbG95bWVudFN0YXR1cwotCWdldERlcGxveW1lbnRTdGF0dXMoKQotCXsKLQkJcmV0dXJuKCBtRGVwbG95bWVudFN0YXR1cyApOwotCX0KLQkKLQkJcHVibGljIHN5bmNocm9uaXplZCB2b2lkCi0JaGFuZGxlTm90aWZpY2F0aW9uKAotCQlmaW5hbCBOb3RpZmljYXRpb24Jbm90aWYsIAotCQlmaW5hbCBPYmplY3QJCWhhbmRiYWNrKSAKLQl7Ci0JCXRyeQotCQl7Ci0JCQlyZWFsSGFuZGxlTm90aWZpY2F0aW9uKCBub3RpZiwgaGFuZGJhY2sgKTsKLQkJfQotCQljYXRjaCggRXhjZXB0aW9uIGUgKQotCQl7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCQotCS8qKgotCQlOb3RlIHRoYXQgTm90aWZpY2F0aW9ucyBhcmUgbm90IGd1YXJhbnRlZWQgdG8gYmUgZGVsaXZlcmVkIGluIG9yZGVyLgotCQlUaHVzLCBpdCBpcyB0aGVvcmV0aWNhbGx5IHBvc3NpYmxlIGZvciBhIERFUExPWU1FTlRfQ09NUExFVEVEX05PVElGSUNBVElPTl9UWVBFCi0JCXRvIGJlIHJlY2VpdmVkIGJlZm9yZSBhIERFUExPWU1FTlRfU1RBUlRFRF9OT1RJRklDQVRJT05fVFlQRS4KLQkgKi8KLQkJcHVibGljIHZvaWQKLQlyZWFsSGFuZGxlTm90aWZpY2F0aW9uKAotCQlmaW5hbCBOb3RpZmljYXRpb24Jbm90aWYsIAotCQlmaW5hbCBPYmplY3QJCWhhbmRiYWNrKSAKLQl7Ci0JCWZpbmFsIFN0cmluZwl0eXBlCT0gbm90aWYuZ2V0VHlwZSgpOwotCQlmaW5hbCBNYXAJCW0JPSAoTWFwKW5vdGlmLmdldFVzZXJEYXRhKCk7Ci0JCWZpbmFsIE9iamVjdAlkZXBsb3lJRAk9IG0uZ2V0KCBEZXBsb3ltZW50TWdyLk5PVElGX0RFUExPWU1FTlRfSURfS0VZICk7Ci0JCQotCQlpZiAoIGRlcGxveUlELmVxdWFscyggbURlcGxveUlEICkgKQotCQl7Ci0JCQlpZiAoIHR5cGUuZXF1YWxzKCBEZXBsb3ltZW50TWdyLkRFUExPWU1FTlRfU1RBUlRFRF9OT1RJRklDQVRJT05fVFlQRSApICkKLQkJCXsKLQkJCQlTYW1wbGVVdGlsLnByaW50bG4oICJEZXBsb3ltZW50IHN0YXJ0ZWQgZm9yICIgKyBkZXBsb3lJRCk7Ci0JCQl9Ci0JCQllbHNlIGlmICggdHlwZS5lcXVhbHMoIERlcGxveW1lbnRNZ3IuREVQTE9ZTUVOVF9DT01QTEVURURfTk9USUZJQ0FUSU9OX1RZUEUgKSApCi0JCQl7Ci0JCQkJZmluYWwgTWFwCXN0YXR1c0RhdGEJPSAoTWFwKQotCQkJCQltLmdldCggRGVwbG95bWVudE1nci5OT1RJRl9ERVBMT1lNRU5UX0NPTVBMRVRFRF9TVEFUVVNfS0VZICk7Ci0JCQkJCi0JCQkJZmluYWwgRGVwbG95bWVudFN0YXR1cwlzdGF0dXMJPSAKLQkJCQkJRGVwbG95bWVudFN1cHBvcnQubWFwVG9EZXBsb3ltZW50U3RhdHVzKCBzdGF0dXNEYXRhICk7Ci0JCQkJCi0JCQkJU2FtcGxlVXRpbC5wcmludGxuKCAiRGVwbG95bWVudCBjb21wbGV0ZWQgZm9yICIgKyBkZXBsb3lJRCArICIgd2l0aCBzdGF0dXM6ICIgKyAKLQkJCQkJc3RhdHVzLmdldFN0YWdlU3RhdHVzKCkgKTsKLQkJCQkKLQkJCQltSXNDb21wbGV0ZWQJPSB0cnVlOwotCQkJCW1EZXBsb3ltZW50U3RhdHVzCT0gc3RhdHVzOwotCQkJfQotCQkJZWxzZSBpZiAoIHR5cGUuZXF1YWxzKCBEZXBsb3ltZW50TWdyLkRFUExPWU1FTlRfUFJPR1JFU1NfTk9USUZJQ0FUSU9OX1RZUEUgKSApCi0JCQl7Ci0JCQkJZmluYWwgTWFwCXByb2dyZXNzRGF0YQk9IChNYXApCi0JCQkJCW0uZ2V0KCBEZXBsb3ltZW50TWdyLk5PVElGX0RFUExPWU1FTlRfUFJPR1JFU1NfS0VZICk7Ci0JCQkJCi0JCQkJZmluYWwgRGVwbG95bWVudFByb2dyZXNzCXByb2dyZXNzCT0gCi0JCQkJCURlcGxveW1lbnRTdXBwb3J0Lm1hcFRvRGVwbG95bWVudFByb2dyZXNzKCBwcm9ncmVzc0RhdGEgKTsKLQkJCQkJCi0JCQkJU2FtcGxlVXRpbC5wcmludGxuKCAiRGVwbG95bWVudCBwcm9ncmVzcyBmb3IgIiArIGRlcGxveUlEICsgIiA9ICIgKyAKLQkJCQkJcHJvZ3Jlc3MuZ2V0UHJvZ3Jlc3NQZXJjZW50KCkgKyAiJSIgKTsKLQkJCX0KLQkJfQotCX0KKyAgICBwcml2YXRlIGZpbmFsIE9iamVjdCAgICAgICAgbURlcGxveUlEOworICAgIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgICAgICBtSXNDb21wbGV0ZWQ7CisgICAgcHJpdmF0ZSBEZXBsb3ltZW50U3RhdHVzICAgIG1EZXBsb3ltZW50U3RhdHVzOworCisgICAgICAgIHB1YmxpYworICAgIERlcGxveU5vdGlmaWNhdGlvbkxpc3RlbmVyKCBmaW5hbCBPYmplY3QgICAgZGVwbG95SUQgKQorICAgIHsKKyAgICAgICAgbURlcGxveUlEICAgICAgICA9IGRlcGxveUlEOworICAgICAgICBtSXNDb21wbGV0ZWQgICAgPSBmYWxzZTsKKyAgICB9CisKKyAgICAgICAgcHVibGljIGJvb2xlYW4KKyAgICBpc0NvbXBsZXRlZCgpCisgICAgeworICAgICAgICByZXR1cm4oIG1Jc0NvbXBsZXRlZCApOworICAgIH0KKworICAgICAgICBwdWJsaWMgRGVwbG95bWVudFN0YXR1cworICAgIGdldERlcGxveW1lbnRTdGF0dXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBtRGVwbG95bWVudFN0YXR1cyApOworICAgIH0KKworICAgICAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQKKyAgICBoYW5kbGVOb3RpZmljYXRpb24oCisgICAgICAgIGZpbmFsIE5vdGlmaWNhdGlvbiAgICBub3RpZiwKKyAgICAgICAgZmluYWwgT2JqZWN0ICAgICAgICBoYW5kYmFjaykKKyAgICB7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICByZWFsSGFuZGxlTm90aWZpY2F0aW9uKCBub3RpZiwgaGFuZGJhY2sgKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCggRXhjZXB0aW9uIGUgKQorICAgICAgICB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICAgIE5vdGUgdGhhdCBOb3RpZmljYXRpb25zIGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSBkZWxpdmVyZWQgaW4gb3JkZXIuCisgICAgICAgIFRodXMsIGl0IGlzIHRoZW9yZXRpY2FsbHkgcG9zc2libGUgZm9yIGEgREVQTE9ZTUVOVF9DT01QTEVURURfTk9USUZJQ0FUSU9OX1RZUEUKKyAgICAgICAgdG8gYmUgcmVjZWl2ZWQgYmVmb3JlIGEgREVQTE9ZTUVOVF9TVEFSVEVEX05PVElGSUNBVElPTl9UWVBFLgorICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZAorICAgIHJlYWxIYW5kbGVOb3RpZmljYXRpb24oCisgICAgICAgIGZpbmFsIE5vdGlmaWNhdGlvbiAgICBub3RpZiwKKyAgICAgICAgZmluYWwgT2JqZWN0ICAgICAgICBoYW5kYmFjaykKKyAgICB7CisgICAgICAgIGZpbmFsIFN0cmluZyAgICB0eXBlICAgID0gbm90aWYuZ2V0VHlwZSgpOworICAgICAgICBmaW5hbCBNYXAgICAgICAgIG0gICAgPSAoTWFwKW5vdGlmLmdldFVzZXJEYXRhKCk7CisgICAgICAgIGZpbmFsIE9iamVjdCAgICBkZXBsb3lJRCAgICA9IG0uZ2V0KCBEZXBsb3ltZW50TWdyLk5PVElGX0RFUExPWU1FTlRfSURfS0VZICk7CisKKyAgICAgICAgaWYgKCBkZXBsb3lJRC5lcXVhbHMoIG1EZXBsb3lJRCApICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCB0eXBlLmVxdWFscyggRGVwbG95bWVudE1nci5ERVBMT1lNRU5UX1NUQVJURURfTk9USUZJQ0FUSU9OX1RZUEUgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU2FtcGxlVXRpbC5wcmludGxuKCAiRGVwbG95bWVudCBzdGFydGVkIGZvciAiICsgZGVwbG95SUQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIHR5cGUuZXF1YWxzKCBEZXBsb3ltZW50TWdyLkRFUExPWU1FTlRfQ09NUExFVEVEX05PVElGSUNBVElPTl9UWVBFICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZpbmFsIE1hcCAgICBzdGF0dXNEYXRhICAgID0gKE1hcCkKKyAgICAgICAgICAgICAgICAgICAgbS5nZXQoIERlcGxveW1lbnRNZ3IuTk9USUZfREVQTE9ZTUVOVF9DT01QTEVURURfU1RBVFVTX0tFWSApOworCisgICAgICAgICAgICAgICAgZmluYWwgRGVwbG95bWVudFN0YXR1cyAgICBzdGF0dXMgICAgPQorICAgICAgICAgICAgICAgICAgICBEZXBsb3ltZW50U3VwcG9ydC5tYXBUb0RlcGxveW1lbnRTdGF0dXMoIHN0YXR1c0RhdGEgKTsKKworICAgICAgICAgICAgICAgIFNhbXBsZVV0aWwucHJpbnRsbiggIkRlcGxveW1lbnQgY29tcGxldGVkIGZvciAiICsgZGVwbG95SUQgKyAiIHdpdGggc3RhdHVzOiAiICsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmdldFN0YWdlU3RhdHVzKCkgKTsKKworICAgICAgICAgICAgICAgIG1Jc0NvbXBsZXRlZCAgICA9IHRydWU7CisgICAgICAgICAgICAgICAgbURlcGxveW1lbnRTdGF0dXMgICAgPSBzdGF0dXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICggdHlwZS5lcXVhbHMoIERlcGxveW1lbnRNZ3IuREVQTE9ZTUVOVF9QUk9HUkVTU19OT1RJRklDQVRJT05fVFlQRSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBNYXAgICAgcHJvZ3Jlc3NEYXRhICAgID0gKE1hcCkKKyAgICAgICAgICAgICAgICAgICAgbS5nZXQoIERlcGxveW1lbnRNZ3IuTk9USUZfREVQTE9ZTUVOVF9QUk9HUkVTU19LRVkgKTsKKworICAgICAgICAgICAgICAgIGZpbmFsIERlcGxveW1lbnRQcm9ncmVzcyAgICBwcm9ncmVzcyAgICA9CisgICAgICAgICAgICAgICAgICAgIERlcGxveW1lbnRTdXBwb3J0Lm1hcFRvRGVwbG95bWVudFByb2dyZXNzKCBwcm9ncmVzc0RhdGEgKTsKKworICAgICAgICAgICAgICAgIFNhbXBsZVV0aWwucHJpbnRsbiggIkRlcGxveW1lbnQgcHJvZ3Jlc3MgZm9yICIgKyBkZXBsb3lJRCArICIgPSAiICsKKyAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MuZ2V0UHJvZ3Jlc3NQZXJjZW50KCkgKyAiJSIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIH0KLQkKLQkKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL3NhbXBsZXMvYW14L0xpbmVSZWFkZXJJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL3NhbXBsZXMvYW14L0xpbmVSZWFkZXJJbXBsLmphdmEKaW5kZXggMDZmZTFiMy4uYjU1YTMxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvc2FtcGxlcy9zYW1wbGVzL2FteC9MaW5lUmVhZGVySW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL3NhbXBsZXMvc2FtcGxlcy9hbXgvTGluZVJlYWRlckltcGwuamF2YQpAQCAtMTMsNyArMTMsNyBAQAogICogJFJldmlzaW9uOiAxLjEgJAogICogJERhdGU6IDIwMDUvMDEvMjcgMjE6MzQ6MDQgJAogICovCi0gCisKIHBhY2thZ2Ugc2FtcGxlcy5hbXg7CiAKIApAQCAtMjEsNTIgKzIxLDUyIEBACiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKIAogLyoqCi0JUmVhZHMgYSBsaW5lIGZyb20gdGhlIHNwZWNpZmllZCBpbnB1dCBzdHJlYW0sIG91dHB1dHMKLQl0aGUgcHJvbXB0IHRvIFN5c3RlbS5vdXQuCisgICAgUmVhZHMgYSBsaW5lIGZyb20gdGhlIHNwZWNpZmllZCBpbnB1dCBzdHJlYW0sIG91dHB1dHMKKyAgICB0aGUgcHJvbXB0IHRvIFN5c3RlbS5vdXQuCiAgKi8KIHB1YmxpYyBjbGFzcyBMaW5lUmVhZGVySW1wbAogewotCWZpbmFsIElucHV0U3RyZWFtUmVhZGVyCW1JbnB1dFN0cmVhbVJlYWRlcjsKLQkKLQkJcHVibGljIAotCUxpbmVSZWFkZXJJbXBsKCBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSApCi0JewotCQltSW5wdXRTdHJlYW1SZWFkZXIJPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoIGlucHV0U3RyZWFtICk7Ci0JfQorICAgIGZpbmFsIElucHV0U3RyZWFtUmVhZGVyICAgIG1JbnB1dFN0cmVhbVJlYWRlcjsKIAotCQlwdWJsaWMgU3RyaW5nCi0JcmVhZExpbmUoIFN0cmluZyBwcm9tcHQgKQotCQl0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbgotCXsKLQkJZmluYWwgU3RyaW5nQnVmZmVyCWxpbmUJPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQotCQlpZiAoIHByb21wdCAhPSBudWxsICkKLQkJewotCQkJU3lzdGVtLm91dC5wcmludCggcHJvbXB0ICk7Ci0JCX0KLQkJCi0JCXdoaWxlICggdHJ1ZSApCi0JCXsKLQkJCWZpbmFsIGludAl2YWx1ZQk9IG1JbnB1dFN0cmVhbVJlYWRlci5yZWFkKCk7Ci0JCQlpZiAoIHZhbHVlIDwgMCApCi0JCQl7Ci0JCQkJaWYgKCBsaW5lLmxlbmd0aCgpICE9IDAgKQotCQkJCXsKLQkJCQkJLy8gcmVhZCBhIGxpbmUgYnV0IHNhdyBFT0YgYmVmb3JlIGEgbmV3bGluZQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJcmV0dXJuKCBudWxsICk7Ci0JCQl9Ci0JCQkKLQkJCWZpbmFsIGNoYXIJdGhlQ2hhcgk9IChjaGFyKXZhbHVlOwotCQkJaWYgKCB0aGVDaGFyID09ICdcbicgKQotCQkJCWJyZWFrOwotCQkJCi0JCQlsaW5lLmFwcGVuZCggdGhlQ2hhciApOwotCQl9Ci0JCQotCQlyZXR1cm4oIGxpbmUudG9TdHJpbmcoKS50cmltKCkgKTsKLQl9CisgICAgICAgIHB1YmxpYworICAgIExpbmVSZWFkZXJJbXBsKCBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSApCisgICAgeworICAgICAgICBtSW5wdXRTdHJlYW1SZWFkZXIgICAgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoIGlucHV0U3RyZWFtICk7CisgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcKKyAgICByZWFkTGluZSggU3RyaW5nIHByb21wdCApCisgICAgICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uCisgICAgeworICAgICAgICBmaW5hbCBTdHJpbmdCdWZmZXIgICAgbGluZSAgICA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKworICAgICAgICBpZiAoIHByb21wdCAhPSBudWxsICkKKyAgICAgICAgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCggcHJvbXB0ICk7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoIHRydWUgKQorICAgICAgICB7CisgICAgICAgICAgICBmaW5hbCBpbnQgICAgdmFsdWUgICAgPSBtSW5wdXRTdHJlYW1SZWFkZXIucmVhZCgpOworICAgICAgICAgICAgaWYgKCB2YWx1ZSA8IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICggbGluZS5sZW5ndGgoKSAhPSAwICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIHJlYWQgYSBsaW5lIGJ1dCBzYXcgRU9GIGJlZm9yZSBhIG5ld2xpbmUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiggbnVsbCApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaW5hbCBjaGFyICAgIHRoZUNoYXIgICAgPSAoY2hhcil2YWx1ZTsKKyAgICAgICAgICAgIGlmICggdGhlQ2hhciA9PSAnXG4nICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgbGluZS5hcHBlbmQoIHRoZUNoYXIgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiggbGluZS50b1N0cmluZygpLnRyaW0oKSApOworICAgIH0KIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL3NhbXBsZXMvYW14L1NhbXBsZUhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL3NhbXBsZXMvYW14L1NhbXBsZUhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyLmphdmEKaW5kZXggNmFkNjM3Zi4uYWI2Y2I4OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvc2FtcGxlcy9zYW1wbGVzL2FteC9TYW1wbGVIYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL3NhbXBsZXMvc2FtcGxlcy9hbXgvU2FtcGxlSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXIuamF2YQpAQCAtMTYsMjkgKzE2LDI5IEBACiAKIAogLyoqCi0JRGVtb25zdHJhdGVzIGhvdyB0byB3cml0ZSBhIEhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyLiBOb3RlIHRoYXQgdXN1YWxseQotCWl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gd3JpdGUgeW91ciBvd24gSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXIgc2luY2UgdGhlCi0JZXZlbnQgaXMgYXZhaWxhYmxlIGZyb20ge0BsaW5rIEhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVySW1wbCNnZXRMYXN0RXZlbnR9LgotCTxwPgotCVlvdSBtYXkgd2lzaCB0byB3cml0ZSBhIEhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyIGlmIHRoZSBkYXRhIGNvbnRhaW5lZAotCWluIHRoZSBIYW5kc2hha2VDb21wbGV0ZWRFdmVudCBpcyBvZiBpbnRlcmVzdCBvciB5b3Ugd2lzaCB0byBleGVydCBtb3JlCi0JY29udHJvbCBvdmVyIHRoZSBUTFMgY29ubmVjdGlvbi4KKyAgICBEZW1vbnN0cmF0ZXMgaG93IHRvIHdyaXRlIGEgSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXIuIE5vdGUgdGhhdCB1c3VhbGx5CisgICAgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byB3cml0ZSB5b3VyIG93biBIYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lciBzaW5jZSB0aGUKKyAgICBldmVudCBpcyBhdmFpbGFibGUgZnJvbSB7QGxpbmsgSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXJJbXBsI2dldExhc3RFdmVudH0uCisgICAgPHA+CisgICAgWW91IG1heSB3aXNoIHRvIHdyaXRlIGEgSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXIgaWYgdGhlIGRhdGEgY29udGFpbmVkCisgICAgaW4gdGhlIEhhbmRzaGFrZUNvbXBsZXRlZEV2ZW50IGlzIG9mIGludGVyZXN0IG9yIHlvdSB3aXNoIHRvIGV4ZXJ0IG1vcmUKKyAgICBjb250cm9sIG92ZXIgdGhlIFRMUyBjb25uZWN0aW9uLgogICovCiBwdWJsaWMgZmluYWwgY2xhc3MgU2FtcGxlSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXIKLQlleHRlbmRzIEhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVySW1wbAorICAgIGV4dGVuZHMgSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXJJbXBsCiB7Ci0JCXB1YmxpYwotCVNhbXBsZUhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyKCkKLQl7Ci0JfQotCQotCQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQKLQloYW5kc2hha2VDb21wbGV0ZWQoIGZpbmFsIEhhbmRzaGFrZUNvbXBsZXRlZEV2ZW50IGV2ZW50KSAKLQl7Ci0JCXN1cGVyLmhhbmRzaGFrZUNvbXBsZXRlZCggZXZlbnQgKTsKLQkJCi0JCVN5c3RlbS5vdXQucHJpbnRsbiggIkhhbmRzaGFrZUNvbXBsZXRlZDpcbiIgKyBldmVudCArICJcbiIgKTsKLQl9CisgICAgICAgIHB1YmxpYworICAgIFNhbXBsZUhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyKCkKKyAgICB7CisgICAgfQorCisgICAgICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZAorICAgIGhhbmRzaGFrZUNvbXBsZXRlZCggZmluYWwgSGFuZHNoYWtlQ29tcGxldGVkRXZlbnQgZXZlbnQpCisgICAgeworICAgICAgICBzdXBlci5oYW5kc2hha2VDb21wbGV0ZWQoIGV2ZW50ICk7CisKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiSGFuZHNoYWtlQ29tcGxldGVkOlxuIiArIGV2ZW50ICsgIlxuIiApOworICAgIH0KIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL3NhbXBsZXMvYW14L1NhbXBsZUxpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL3NhbXBsZXMvYW14L1NhbXBsZUxpc3RlbmVyLmphdmEKaW5kZXggOTc2NDU3My4uN2I3OGQ0MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvc2FtcGxlcy9zYW1wbGVzL2FteC9TYW1wbGVMaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL3NhbXBsZXMvc2FtcGxlcy9hbXgvU2FtcGxlTGlzdGVuZXIuamF2YQpAQCAtMjEsMTAzICsyMSwxMDMgQEAKIGltcG9ydCBqYXZheC5tYW5hZ2VtZW50Lk1CZWFuU2VydmVyTm90aWZpY2F0aW9uOwogCiAvKioKLQlEaXNwbGF5cyBhbnkge0BsaW5rIGphdmF4Lm1hbmFnZW1lbnQuTm90aWZpY2F0aW9ufSByZWNlaXZlZC4KLQk8cD4KLQlOb3RlIHRoYXQgbW9zdCB7QGxpbmsgY29tLnN1bi5hcHBzZXJ2Lm1hbmFnZW1lbnQuYmFzZS5BTVh9IE5vdGlmaWNhdGlvbnMgaW5jbHVkZSBhIE1hcCBpbiB0aGUKLQl1c2VyRGF0YSBmaWVsZCBvZiB0aGUgTm90aWZpY2F0aW9uLgotCQotCUBzZWUgY29tLnN1bi5hcHBzZXJ2Lm1hbmFnZW1lbnQuYmFzZS5BTVgKKyAgICBEaXNwbGF5cyBhbnkge0BsaW5rIGphdmF4Lm1hbmFnZW1lbnQuTm90aWZpY2F0aW9ufSByZWNlaXZlZC4KKyAgICA8cD4KKyAgICBOb3RlIHRoYXQgbW9zdCB7QGxpbmsgY29tLnN1bi5hcHBzZXJ2Lm1hbmFnZW1lbnQuYmFzZS5BTVh9IE5vdGlmaWNhdGlvbnMgaW5jbHVkZSBhIE1hcCBpbiB0aGUKKyAgICB1c2VyRGF0YSBmaWVsZCBvZiB0aGUgTm90aWZpY2F0aW9uLgorCisgICAgQHNlZSBjb20uc3VuLmFwcHNlcnYubWFuYWdlbWVudC5iYXNlLkFNWAogICovCiBwdWJsaWMgZmluYWwgY2xhc3MgU2FtcGxlTGlzdGVuZXIgaW1wbGVtZW50cyBOb3RpZmljYXRpb25MaXN0ZW5lcgogewotCXByaXZhdGUgTWFwCW1Ob3RpZnM7Ci0JCi0JCXB1YmxpYwotCVNhbXBsZUxpc3RlbmVyKCkKLQl7Ci0JCW1Ob3RpZnMJPSBudWxsOwotCQljbGVhck5vdGlmcygpOwotCX0KLQkKLQkvKioKLQkJS2VlcCBhIE1hcCwga2V5ZWQgYnkgTm90aWZpY2F0aW9uIHR5cGUsIG9mIGFsbCBOb3RpZmljYXRpb25zIHJlY2VpdmVkLgotCSAqLwotCQlwcml2YXRlIHN5bmNocm9uaXplZCB2b2lkCi0JYWRkTm90aWYoIGZpbmFsIE5vdGlmaWNhdGlvbglub3RpZiApCi0JewotCQlmaW5hbCBTdHJpbmcJdHlwZQk9IG5vdGlmLmdldFR5cGUoKTsKLQkJCi0JCUxpc3QJbGlzdAk9IG51bGw7Ci0JCQotCQlpZiAoICEgbU5vdGlmcy5rZXlTZXQoKS5jb250YWlucyggdHlwZSApICkKLQkJewotCQkJY2xlYXJOb3RpZnMoIHR5cGUgKTsKLQkJfQotCQkKLQkJbGlzdAk9IChMaXN0KW1Ob3RpZnMuZ2V0KCB0eXBlICk7Ci0JCQotCQlsaXN0LmFkZCggbm90aWYgKTsKLQl9Ci0JCi0JLyoqCi0JCVJldHVybiBhIE1hcCwga2V5ZWQgYnkgTm90aWZpY2F0aW9uIHR5cGUsIG9mIGFsbCBOb3RpZmljYXRpb25zIHJlY2VpdmVkIHNvIGZhci4KLQkgKi8KLQkJcHVibGljIE1hcAotCWdldE5vdGlmc1JlY2VpdmVkKCkKLQl7Ci0JCXJldHVybiggbU5vdGlmcyApOwotCX0KLQkKLQkJcHVibGljIExpc3QKLQlnZXROb3RpZnNSZWNlaXZlZCggZmluYWwgU3RyaW5nIHR5cGUgKQotCXsKLQkJcmV0dXJuKCAoTGlzdCltTm90aWZzLmdldCggdHlwZSApICk7Ci0JfQotCQotCS8qKgotCQlDbGVhciB0aGUgaGlzdG9yeSBvZiBOb3RpZmljYXRpb25zIHJlY2VpdmVkLgotCSAqLwotCQlwdWJsaWMgc3luY2hyb25pemVkIE1hcAotCWNsZWFyTm90aWZzKCkKLQl7Ci0JCWZpbmFsIE1hcAlleGlzdGluZwk9IGdldE5vdGlmc1JlY2VpdmVkKCk7Ci0JCQotCQltTm90aWZzCT0gQ29sbGVjdGlvbnMuc3luY2hyb25pemVkTWFwKCBuZXcgSGFzaE1hcCgpICk7Ci0JCQotCQlyZXR1cm4oIGV4aXN0aW5nICk7Ci0JfQotCQotCQlwdWJsaWMgc3luY2hyb25pemVkIExpc3QKLQljbGVhck5vdGlmcyggZmluYWwgU3RyaW5nIHR5cGUgKQotCXsKLQkJZmluYWwgTWFwCWV4aXN0aW5nCT0gZ2V0Tm90aWZzUmVjZWl2ZWQoKTsKLQkJCi0JCWZpbmFsIExpc3QgbmV3TGlzdAk9IENvbGxlY3Rpb25zLnN5bmNocm9uaXplZExpc3QoIG5ldyBBcnJheUxpc3QoKSApOwotCQkKLQkJZmluYWwgTGlzdAlleGlzdGluZ0xpc3QJPSAoTGlzdClleGlzdGluZy5nZXQoIHR5cGUgKTsKLQkJCi0JCW1Ob3RpZnMucHV0KCB0eXBlLCBuZXdMaXN0ICk7Ci0JCQotCQlyZXR1cm4oIGV4aXN0aW5nTGlzdCApOwotCX0KLQkKLQkvKioKLQkJVGhlIE5vdGlmaWNhdGlvbiBpcyBkZWxpdmVyZWQgaGVyZS4KLQkgKi8KLQkJcHVibGljIHZvaWQKLQloYW5kbGVOb3RpZmljYXRpb24oCi0JCWZpbmFsIE5vdGlmaWNhdGlvbglub3RpZiwgCi0JCWZpbmFsIE9iamVjdAkJaGFuZGJhY2spIAotCXsKLQkJZmluYWwgU3RyaW5nCXR5cGUJCT0gbm90aWYuZ2V0VHlwZSgpOwotCQlmaW5hbCBPYmplY3QJdXNlckRhdGEJPSBub3RpZi5nZXRVc2VyRGF0YSgpOwotCQkKLQkJYWRkTm90aWYoIG5vdGlmICk7Ci0JCQotCQlTYW1wbGVVdGlsLnByaW50bG4oICJTYW1wbGVMaXN0ZW5lcjogcmVjZWl2ZWQ6ICIgKyBTYW1wbGVVdGlsLnRvU3RyaW5nKCBub3RpZiApICk7Ci0JCVNhbXBsZVV0aWwucHJpbnRsbiggIiIgKTsKLQl9Ci0JCi0JCi0JCisgICAgcHJpdmF0ZSBNYXAgICAgbU5vdGlmczsKKworICAgICAgICBwdWJsaWMKKyAgICBTYW1wbGVMaXN0ZW5lcigpCisgICAgeworICAgICAgICBtTm90aWZzICAgID0gbnVsbDsKKyAgICAgICAgY2xlYXJOb3RpZnMoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgICAgS2VlcCBhIE1hcCwga2V5ZWQgYnkgTm90aWZpY2F0aW9uIHR5cGUsIG9mIGFsbCBOb3RpZmljYXRpb25zIHJlY2VpdmVkLgorICAgICAqLworICAgICAgICBwcml2YXRlIHN5bmNocm9uaXplZCB2b2lkCisgICAgYWRkTm90aWYoIGZpbmFsIE5vdGlmaWNhdGlvbiAgICBub3RpZiApCisgICAgeworICAgICAgICBmaW5hbCBTdHJpbmcgICAgdHlwZSAgICA9IG5vdGlmLmdldFR5cGUoKTsKKworICAgICAgICBMaXN0ICAgIGxpc3QgICAgPSBudWxsOworCisgICAgICAgIGlmICggISBtTm90aWZzLmtleVNldCgpLmNvbnRhaW5zKCB0eXBlICkgKQorICAgICAgICB7CisgICAgICAgICAgICBjbGVhck5vdGlmcyggdHlwZSApOworICAgICAgICB9CisKKyAgICAgICAgbGlzdCAgICA9IChMaXN0KW1Ob3RpZnMuZ2V0KCB0eXBlICk7CisKKyAgICAgICAgbGlzdC5hZGQoIG5vdGlmICk7CisgICAgfQorCisgICAgLyoqCisgICAgICAgIFJldHVybiBhIE1hcCwga2V5ZWQgYnkgTm90aWZpY2F0aW9uIHR5cGUsIG9mIGFsbCBOb3RpZmljYXRpb25zIHJlY2VpdmVkIHNvIGZhci4KKyAgICAgKi8KKyAgICAgICAgcHVibGljIE1hcAorICAgIGdldE5vdGlmc1JlY2VpdmVkKCkKKyAgICB7CisgICAgICAgIHJldHVybiggbU5vdGlmcyApOworICAgIH0KKworICAgICAgICBwdWJsaWMgTGlzdAorICAgIGdldE5vdGlmc1JlY2VpdmVkKCBmaW5hbCBTdHJpbmcgdHlwZSApCisgICAgeworICAgICAgICByZXR1cm4oIChMaXN0KW1Ob3RpZnMuZ2V0KCB0eXBlICkgKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgICAgQ2xlYXIgdGhlIGhpc3Rvcnkgb2YgTm90aWZpY2F0aW9ucyByZWNlaXZlZC4KKyAgICAgKi8KKyAgICAgICAgcHVibGljIHN5bmNocm9uaXplZCBNYXAKKyAgICBjbGVhck5vdGlmcygpCisgICAgeworICAgICAgICBmaW5hbCBNYXAgICAgZXhpc3RpbmcgICAgPSBnZXROb3RpZnNSZWNlaXZlZCgpOworCisgICAgICAgIG1Ob3RpZnMgICAgPSBDb2xsZWN0aW9ucy5zeW5jaHJvbml6ZWRNYXAoIG5ldyBIYXNoTWFwKCkgKTsKKworICAgICAgICByZXR1cm4oIGV4aXN0aW5nICk7CisgICAgfQorCisgICAgICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgTGlzdAorICAgIGNsZWFyTm90aWZzKCBmaW5hbCBTdHJpbmcgdHlwZSApCisgICAgeworICAgICAgICBmaW5hbCBNYXAgICAgZXhpc3RpbmcgICAgPSBnZXROb3RpZnNSZWNlaXZlZCgpOworCisgICAgICAgIGZpbmFsIExpc3QgbmV3TGlzdCAgICA9IENvbGxlY3Rpb25zLnN5bmNocm9uaXplZExpc3QoIG5ldyBBcnJheUxpc3QoKSApOworCisgICAgICAgIGZpbmFsIExpc3QgICAgZXhpc3RpbmdMaXN0ICAgID0gKExpc3QpZXhpc3RpbmcuZ2V0KCB0eXBlICk7CisKKyAgICAgICAgbU5vdGlmcy5wdXQoIHR5cGUsIG5ld0xpc3QgKTsKKworICAgICAgICByZXR1cm4oIGV4aXN0aW5nTGlzdCApOworICAgIH0KKworICAgIC8qKgorICAgICAgICBUaGUgTm90aWZpY2F0aW9uIGlzIGRlbGl2ZXJlZCBoZXJlLgorICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZAorICAgIGhhbmRsZU5vdGlmaWNhdGlvbigKKyAgICAgICAgZmluYWwgTm90aWZpY2F0aW9uICAgIG5vdGlmLAorICAgICAgICBmaW5hbCBPYmplY3QgICAgICAgIGhhbmRiYWNrKQorICAgIHsKKyAgICAgICAgZmluYWwgU3RyaW5nICAgIHR5cGUgICAgICAgID0gbm90aWYuZ2V0VHlwZSgpOworICAgICAgICBmaW5hbCBPYmplY3QgICAgdXNlckRhdGEgICAgPSBub3RpZi5nZXRVc2VyRGF0YSgpOworCisgICAgICAgIGFkZE5vdGlmKCBub3RpZiApOworCisgICAgICAgIFNhbXBsZVV0aWwucHJpbnRsbiggIlNhbXBsZUxpc3RlbmVyOiByZWNlaXZlZDogIiArIFNhbXBsZVV0aWwudG9TdHJpbmcoIG5vdGlmICkgKTsKKyAgICAgICAgU2FtcGxlVXRpbC5wcmludGxuKCAiIiApOworICAgIH0KKworCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL21iZWFuYXBpL3NhbXBsZXMvc2FtcGxlcy9hbXgvU2FtcGxlTWFpbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvc2FtcGxlcy9zYW1wbGVzL2FteC9TYW1wbGVNYWluLmphdmEKaW5kZXggZDkyZmUxZC4uOGQ0MTQ5ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvc2FtcGxlcy9zYW1wbGVzL2FteC9TYW1wbGVNYWluLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvc2FtcGxlcy9zYW1wbGVzL2FteC9TYW1wbGVNYWluLmphdmEKQEAgLTMwLDM3NCArMzAsMzc0IEBACiBpbXBvcnQgY29tLnN1bi5hcHBzZXJ2Lm1hbmFnZW1lbnQuY2xpZW50LkhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVySW1wbDsKIAogLyoqCi0JTWFpbiBjbGFzcyBkZW1vbnN0cmF0aW5nIGEgdmFyaWV0eSBvZiBNQmVhbiBBUEkgKEFNWCkgdXNhZ2VzLgotCUVudGVycyBhbiBpbnRlcmFjdGl2ZSBsb29wIGluIHdoaWNoIHRoZSB1c2VyIGNhbiBydW4gdmFyaW91cyBjb21tYW5kcy4KKyAgICBNYWluIGNsYXNzIGRlbW9uc3RyYXRpbmcgYSB2YXJpZXR5IG9mIE1CZWFuIEFQSSAoQU1YKSB1c2FnZXMuCisgICAgRW50ZXJzIGFuIGludGVyYWN0aXZlIGxvb3AgaW4gd2hpY2ggdGhlIHVzZXIgY2FuIHJ1biB2YXJpb3VzIGNvbW1hbmRzLgogICovCiBwdWJsaWMgZmluYWwgY2xhc3MgU2FtcGxlTWFpbgogewotCXByaXZhdGUgZmluYWwgRG9tYWluUm9vdAkJCQltRG9tYWluUm9vdDsKLQlwcml2YXRlIEhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVySW1wbAltSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXI7Ci0JCi0JCXB1YmxpYyBzdGF0aWMgdm9pZAotCW1haW4oIGZpbmFsIFN0cmluZ1tdIGFyZ3MgKQotCXsKLQkJaWYgKCBhcmdzLmxlbmd0aCA+IDEgKQotCQl7Ci0JCQlTYW1wbGVVdGlsLnByaW50bG4oICJTcGVjaWZ5IGEgcHJvcGVydGllcyBmaWxlIG9yIG5vdGhpbmcuIiApOwotCQkJU3lzdGVtLmV4aXQoIDI1NSApOwotCQl9Ci0JCQotCQl0cnkKLQkJewotCQkJbmV3IFNhbXBsZU1haW4oIGFyZ3MubGVuZ3RoID09IDEgPyBhcmdzWyAwIF0gOiAiU2FtcGxlTWFpbi5wcm9wZXJ0aWVzIiApOwotCQl9Ci0JCWNhdGNoKCBUaHJvd2FibGUgdCApCi0JCXsKLQkJCVNhbXBsZVV0aWwuZ2V0Um9vdENhdXNlKCB0ICkucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0JCi0JCi0JZmluYWwgU3RyaW5nCVFVSVQJCQk9ICJxdWl0IjsKLQlmaW5hbCBTdHJpbmcJTElTVAkJCT0gImxpc3QiOwotCWZpbmFsIFN0cmluZwlERVBMT1kJCQk9ICJkZXBsb3kiOwotCWZpbmFsIFN0cmluZwlVTkRFUExPWQkJPSAidW5kZXBsb3kiOwotCWZpbmFsIFN0cmluZwlRVUVSWQkJCT0gInF1ZXJ5IjsKLQlmaW5hbCBTdHJpbmcJU0hPV19ISUVSQVJDSFkJPSAic2hvdy1oaWVyYXJjaHkiOwotCWZpbmFsIFN0cmluZwlTVEFSVF9TRVJWRVIJPSAic3RhcnQtc2VydmVyIjsKLQlmaW5hbCBTdHJpbmcJU1RPUF9TRVJWRVIJCT0gInN0b3Atc2VydmVyIjsKLQlmaW5hbCBTdHJpbmcJTElTVF9BVFRSSUJVVEVTCT0gImxpc3QtYXR0cmlidXRlcyI7Ci0JZmluYWwgU3RyaW5nCUxJU1RfRE9UVEVEX05BTUVTCT0gImxpc3QtZG90dGVkLW5hbWVzIjsKLQlmaW5hbCBTdHJpbmcJTElTVF9QUk9QRVJUSUVTCT0gImxpc3QtcHJvcGVydGllcyI7Ci0JZmluYWwgU3RyaW5nCVNFVF9NT05JVE9SSU5HCT0gInNldC1tb25pdG9yaW5nIjsKLQlmaW5hbCBTdHJpbmcJREVNT19KTVhfTU9OSVRPUgk9ICJkZW1vLWpteC1tb25pdG9yIjsKLQlmaW5hbCBTdHJpbmcJUlVOX0FMTAkJCT0gInJ1bi1hbGwiOwotCQotCWZpbmFsIFN0cmluZ1tdCU1FTlVfQ0hPSUNFUwk9IG5ldyBTdHJpbmdbXQotCXsKLQkJREVNT19KTVhfTU9OSVRPUiwgREVQTE9ZLCBMSVNUX0FUVFJJQlVURVMsIExJU1QsIExJU1RfRE9UVEVEX05BTUVTLCBMSVNUX1BST1BFUlRJRVMsIFFVRVJZLCBRVUlULCBSVU5fQUxMLAotCQlTVEFSVF9TRVJWRVIsIFNUT1BfU0VSVkVSLAotCQlTSE9XX0hJRVJBUkNIWSwgU0VUX01PTklUT1JJTkcsIFVOREVQTE9ZCi0JfTsKLQkKLQlmaW5hbCBTdHJpbmcgTUVOVQk9IFNhbXBsZVV0aWwuYXJyYXlUb1N0cmluZyggTUVOVV9DSE9JQ0VTLCAiICAiLCAiXG4iKTsKLQlmaW5hbCBTdHJpbmcgUFJPTVBUCT0gIkNvbW1hbmRzOlxuIiArIE1FTlUgKyAiXG5FbnRlciBjb21tYW5kPiAiOwotCQotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIElsbGVnYWxVc2FnZUV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbgotCXsKLQkJSWxsZWdhbFVzYWdlRXhjZXB0aW9uKCkJe30KLQl9Ci0JIAotCQlwcml2YXRlIHZvaWQKLQlyZXF1aXJlKAotCQlmaW5hbCBib29sZWFuCXRlc3QsCi0JCWZpbmFsIFN0cmluZwltc2cgKQotCQl0aHJvd3MgSWxsZWdhbFVzYWdlRXhjZXB0aW9uCi0JewotCQlpZiAoICEgdGVzdCApCi0JCXsKLQkJCVNhbXBsZVV0aWwucHJpbnRsbiggbXNnICk7Ci0JCQl0aHJvdyBuZXcgSWxsZWdhbFVzYWdlRXhjZXB0aW9uKCk7Ci0JCX0KLQl9Ci0JCi0JCXByaXZhdGUgdm9pZAotCWhhbmRsZUNob2ljZSgKLQkJZmluYWwgU2FtcGxlcwlzYW1wbGVzLAotCQlmaW5hbCBTdHJpbmcJbGluZSApCi0JCXRocm93cyBJT0V4Y2VwdGlvbiwgSWxsZWdhbFVzYWdlRXhjZXB0aW9uLCBJbnN0YW5jZU5vdEZvdW5kRXhjZXB0aW9uCi0JewotCQlmaW5hbCBTdHJpbmdbXQlwYXJ0cwk9IGxpbmUuc3BsaXQoICJbIFx0XSsiICk7Ci0JCWZpbmFsIGludAkJbnVtQXJncwk9IHBhcnRzLmxlbmd0aCAtIDE7Ci0JCWZpbmFsIFN0cmluZwljbWQJPSBwYXJ0c1sgMCBdOwotCQkKLQkJaWYgKCBjbWQubGVuZ3RoKCkgIT0gMCApCi0JCXsKLQkJCVNhbXBsZVV0aWwucHJpbnRsbiggImNtZDogIiArIFNhbXBsZVV0aWwudG9TdHJpbmcoIHBhcnRzICkgKTsKLQkJfQotCQkKLQkJaWYgKCBjbWQuZXF1YWxzKCBRVUlUICkgfHwgY21kLmVxdWFscyggInEiICkgKQotCQl7Ci0JCQlyZXF1aXJlKCBudW1BcmdzID09IDAsICJVc2FnZTogIiArIFFVSVQgKTsKLQkJCVN5c3RlbS5leGl0KCAwICk7Ci0JCX0KLQkJZWxzZSBpZiAoIGNtZC5sZW5ndGgoKSA9PSAwICkKLQkJewotCQkJLy8gZG8gbm90aGluZwotCQl9Ci0JCWVsc2UgaWYgKCBjbWQuZXF1YWxzKCBERVBMT1kgKSApCi0JCXsKLQkJCXJlcXVpcmUoIG51bUFyZ3MgPj0gMSwgIlVzYWdlOiAiICsgREVQTE9ZICsgIiA8YXJjaGl2ZS1uYW1lPiIgKTsKLQkJCWZvciggaW50IGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoOyArK2kgKQotCQkJewotCQkJCXNhbXBsZXMuZGVwbG95KCBuZXcgRmlsZSggcGFydHNbIGkgXSApICk7Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAoIGNtZC5lcXVhbHMoIFVOREVQTE9ZICkgKQotCQl7Ci0JCQlyZXF1aXJlKCBudW1BcmdzID49IDEsICJVc2FnZTogIiArIFVOREVQTE9ZICsgIiBbPG5hbWU+WyA8bmFtZT5dKl0iICk7Ci0JCQlmb3IoIGludCBpID0gMTsgaSA8IHBhcnRzLmxlbmd0aDsgKytpICkKLQkJCXsKLQkJCQlzYW1wbGVzLnVuZGVwbG95KCBwYXJ0c1sgaSBdICk7Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAoIGNtZC5lcXVhbHMoIFNUQVJUX1NFUlZFUiApICkKLQkJewotCQkJcmVxdWlyZSggbnVtQXJncyA9PSAxLCAiVXNhZ2U6ICIgKyBTVEFSVF9TRVJWRVIgKyAiIDxzZXJ2ZXItbmFtZT4iICk7Ci0JCQlzYW1wbGVzLnN0YXJ0U2VydmVyKCBwYXJ0c1sgMSBdICk7Ci0JCX0KLQkJZWxzZSBpZiAoIGNtZC5lcXVhbHMoIFNUT1BfU0VSVkVSICkgKQotCQl7Ci0JCQlyZXF1aXJlKCBudW1BcmdzID09IDEsICJVc2FnZTogIiArIFNUT1BfU0VSVkVSICsgIiA8c2VydmVyLW5hbWU+IiApOwotCQkJc2FtcGxlcy5zdG9wU2VydmVyKCBwYXJ0c1sgMSBdICk7Ci0JCX0KLQkJZWxzZSBpZiAoIGNtZC5lcXVhbHMoIExJU1QgKSApCi0JCXsKLQkJCXJlcXVpcmUoIG51bUFyZ3MgPT0gMCwgIlVzYWdlOiAiICsgTElTVCApOwotCQkJc2FtcGxlcy5oYW5kbGVMaXN0KCk7Ci0JCX0KLQkJZWxzZSBpZiAoIGNtZC5lcXVhbHMoIFNIT1dfSElFUkFSQ0hZICkgKQotCQl7Ci0JCQlpZiAoIG51bUFyZ3MgPT0gMCApCi0JCQl7Ci0JCQkJc2FtcGxlcy5kaXNwbGF5SGllcmFyY2h5KCk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJZm9yKCBpbnQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGg7ICsraSApCi0JCQkJewotCQkJCQlzYW1wbGVzLmRpc3BsYXlIaWVyYXJjaHkoIHBhcnRzWyBpIF0gKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAoIGNtZC5lcXVhbHMoIFFVRVJZKSApCi0JCXsKLQkJCXJlcXVpcmUoIG51bUFyZ3MgPT0gMCwgIlVzYWdlOiAiICsgUVVFUlkgKTsKLQkJCQotCQkJc2FtcGxlcy5kZW1vUXVlcnkoKTsKLQkJfQotCQllbHNlIGlmICggY21kLmVxdWFscyggTElTVF9BVFRSSUJVVEVTICkgKQotCQl7Ci0JCQlpZiAoIG51bUFyZ3MgPT0gMCApCi0JCQl7Ci0JCQkJc2FtcGxlcy5kaXNwbGF5QWxsQXR0cmlidXRlcyggZ2V0RG9tYWluUm9vdCgpICk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJZm9yKCBpbnQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGg7ICsraSApCi0JCQkJewotCQkJCQlzYW1wbGVzLmRpc3BsYXlBbGxBdHRyaWJ1dGVzKCBwYXJ0c1sgaSBdICk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWVsc2UgaWYgKCBjbWQuZXF1YWxzKCBMSVNUX0RPVFRFRF9OQU1FUyApICkKLQkJewotCQkJcmVxdWlyZSggbnVtQXJncyA9PSAwLCAiVXNhZ2U6ICIgKyBMSVNUX0RPVFRFRF9OQU1FUyApOwotCQkJc2FtcGxlcy5kaXNwbGF5RG90dGVkTmFtZXMoICk7Ci0JCX0KLQkJZWxzZSBpZiAoIGNtZC5lcXVhbHMoIExJU1RfUFJPUEVSVElFUyApICkKLQkJewotCQkJcmVxdWlyZSggbnVtQXJncyA9PSAwLCAiVXNhZ2U6ICIgKyBMSVNUX1BST1BFUlRJRVMgKTsKLQkJCXNhbXBsZXMuZGlzcGxheUFsbFByb3BlcnRpZXMoICk7Ci0JCX0KLQkJZWxzZSBpZiAoIGNtZC5lcXVhbHMoIFJVTl9BTEwgKSApCi0JCXsKLQkJCXJlcXVpcmUoIG51bUFyZ3MgPT0gMCwgIlVzYWdlOiAiICsgUlVOX0FMTCApOwotCQkJCi0JCQlmb3IoIGludCBpID0gMDsgaSA8IE1FTlVfQ0hPSUNFUy5sZW5ndGg7ICsraSApCi0JCQl7Ci0JCQkJZmluYWwgU3RyaW5nCWNob2ljZQk9IE1FTlVfQ0hPSUNFU1sgaSBdOwotCQkJCQotCQkJCWlmICggISAoIGNob2ljZS5lcXVhbHMoIFFVSVQgKSB8fCBjaG9pY2UuZXF1YWxzKCBSVU5fQUxMICkgKSApCi0JCQkJewotCQkJCQloYW5kbGVDaG9pY2UoIHNhbXBsZXMsIGNob2ljZSApOwotCQkJCX0KLQkJCX0KLQkJfQotCQllbHNlIGlmICggY21kLmVxdWFscyggREVNT19KTVhfTU9OSVRPUiApICkKLQkJewotCQkJc2FtcGxlcy5kZW1vSk1YTW9uaXRvcigpOwotCQl9Ci0JCWVsc2UgaWYgKCBjbWQuZXF1YWxzKCBTRVRfTU9OSVRPUklORyApICkKLQkJewotCQkJcmVxdWlyZSggbnVtQXJncyA9PSAyLCAiVXNhZ2U6ICIgKyBTRVRfTU9OSVRPUklORyArICIgPGNvbmZpZy1uYW1lPiBISUdIfExPV3xPRkYiICk7Ci0JCQkKLQkJCXNhbXBsZXMuc2V0TW9uaXRvcmluZyggcGFydHNbIDEgXSwgcGFydHNbIDIgXSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlTYW1wbGVVdGlsLnByaW50bG4oICJVbmtub3duIGNvbW1hbmQ6ICIgKyBsaW5lICk7Ci0JCX0KLQl9Ci0JCi0JCXByaXZhdGUgdm9pZAotCWRlbW8oKQotCQl0aHJvd3MgSU9FeGNlcHRpb24KLQl7Ci0JCWZpbmFsIExpbmVSZWFkZXJJbXBsCWluCT0gbmV3IExpbmVSZWFkZXJJbXBsKCBTeXN0ZW0uaW4gKTsKLQkJCi0JCWZpbmFsIFNhbXBsZXMJc2FtcGxlcwk9IG5ldyBTYW1wbGVzKCBnZXREb21haW5Sb290KCkgKTsKLQkJd2hpbGUgKCB0cnVlICkKLQkJewotCQkJZmluYWwgU3RyaW5nCWxpbmUJPSBpbi5yZWFkTGluZSggIlxuIiArIFBST01QVCApOwotCQkJdHJ5Ci0JCQl7Ci0JCQkJaGFuZGxlQ2hvaWNlKCBzYW1wbGVzLCBsaW5lLnRyaW0oKSApOwotCQkJfQotCQkJY2F0Y2goIElsbGVnYWxVc2FnZUV4Y2VwdGlvbiBlICkKLQkJCXsKLQkJCX0KLQkJCWNhdGNoKCBFeGNlcHRpb24gZSApCi0JCQl7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCX0KLQkKLQkJcHJpdmF0ZSBmaW5hbCBEb21haW5Sb290Ci0JZ2V0RG9tYWluUm9vdCgpCi0JewotCQlyZXR1cm4oIG1Eb21haW5Sb290ICk7Ci0JfQotCQotCQotCQotCQotCQlwcml2YXRlIFRMU1BhcmFtcwotCWNyZWF0ZVRMU1BhcmFtcygKLQkJZmluYWwgU3RyaW5nCXRydXN0U3RvcmUsCi0JCWZpbmFsIFN0cmluZwlwYXNzd29yZCApCi0JewotCQlmaW5hbCBGaWxlIHRydXN0U3RvcmVGaWxlCT0gbmV3IEZpbGUoIHRydXN0U3RvcmUgKTsKLQkJZmluYWwgY2hhcltdIHRydXN0U3RvcmVQYXNzd29yZAk9IHBhc3N3b3JkLnRvQ2hhckFycmF5KCk7Ci0JCQkJCQotCQltSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXIJPSBuZXcgSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXJJbXBsKCk7Ci0JCWZpbmFsIFRydXN0U3RvcmVUcnVzdE1hbmFnZXIgdHJ1c3RNZ3IgPQotCQkJbmV3IFRydXN0U3RvcmVUcnVzdE1hbmFnZXIoIHRydXN0U3RvcmVGaWxlLCB0cnVzdFN0b3JlUGFzc3dvcmQpOwotCQl0cnVzdE1nci5zZXRQcm9tcHQoIHRydWUgKTsKKyAgICBwcml2YXRlIGZpbmFsIERvbWFpblJvb3QgICAgICAgICAgICAgICAgbURvbWFpblJvb3Q7CisgICAgcHJpdmF0ZSBIYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lckltcGwgICAgbUhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyOwogCi0JCWZpbmFsIFRMU1BhcmFtcwl0bHNQYXJhbXMgPSBuZXcgVExTUGFyYW1zKCB0cnVzdE1nciwgbUhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyICk7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZAorICAgIG1haW4oIGZpbmFsIFN0cmluZ1tdIGFyZ3MgKQorICAgIHsKKyAgICAgICAgaWYgKCBhcmdzLmxlbmd0aCA+IDEgKQorICAgICAgICB7CisgICAgICAgICAgICBTYW1wbGVVdGlsLnByaW50bG4oICJTcGVjaWZ5IGEgcHJvcGVydGllcyBmaWxlIG9yIG5vdGhpbmcuIiApOworICAgICAgICAgICAgU3lzdGVtLmV4aXQoIDI1NSApOworICAgICAgICB9CiAKLQkJcmV0dXJuKCB0bHNQYXJhbXMgKTsKLQl9Ci0JCi0JLyoqCi0JCVJlYWQgY29ubmVjdCBwcm9wZXJ0aWVzIGZyb20gYSBmaWxlLgotCSAqLwotCQlwcml2YXRlIGZpbmFsIFByb3BlcnRpZXMKLQlnZXRDb25uZWN0UHJvcGVydGllcyggZmluYWwgU3RyaW5nIGZpbGUgKQotCQl0aHJvd3MgSU9FeGNlcHRpb24KLQl7Ci0JCWZpbmFsIFByb3BlcnRpZXMJcHJvcHMJPSBuZXcgUHJvcGVydGllcygpOwotCQkKLQkJaWYgKCBmaWxlICE9IG51bGwgKQotCQl7Ci0JCQlTYW1wbGVVdGlsLnByaW50bG4oICJSZWFkaW5nIHByb3BlcnRpZXMgZnJvbTogIiArIFNhbXBsZVV0aWwucXVvdGUoIGZpbGUgKSApOwotCQkJZmluYWwgRmlsZQlmCT0gbmV3IEZpbGUoIGZpbGUgKTsKLQkJCQotCQkJaWYgKCBmLmV4aXN0cygpICkKLQkJCXsKLQkJCQlmaW5hbCBGaWxlSW5wdXRTdHJlYW0JaXMJPSBuZXcgRmlsZUlucHV0U3RyZWFtKCBmICk7Ci0JCQkJdHJ5Ci0JCQkJewotCQkJCQlwcm9wcy5sb2FkKCBpcyApOwotCQkJCX0KLQkJCQlmaW5hbGx5Ci0JCQkJewotCQkJCQlpcy5jbG9zZSgpOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlTYW1wbGVVdGlsLnByaW50bG4oIkZpbGUgXCIiICsgZmlsZSArICIgZG9lcyBub3QgZXhpc3QsIHVzaW5nIGRlZmF1bHRzLiIgKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuKCBwcm9wcyApOwotCX0KLQkKLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcJREVGQVVMVF9UUlVTVF9TVE9SRV9GSUxFCQk9ICJ+Ly5rZXlzdG9yZSI7Ci0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nCURFRkFVTFRfVFJVU1RfU1RPUkVfUEFTU1dPUkQJPSAiY2hhbmdlbWUiOwotCQotCS8qKgotCQlAcGFyYW0gaG9zdAlob3N0bmFtZSBvciBJUCBhZGRyZXNzIG9mIERvbWFpbiBBZG1pbiBTZXJ2ZXIKLQkJQHBhcmFtIHBvcnQJUk1JIGFkbWluaXN0cmF0aXZlIHBvcnQKLQkJQHBhcmFtIHVzZXIJYWRtaW4gdXNlcgotCQlAcGFyYW0gcGFzc3dvcmQgYWRtaW4gdXNlciBwYXNzd29yZAotCQlAcGFyYW0gdGxzUGFyYW1zIFRMUyBwYXJhbWV0ZXJzLCBtYXkgYmUgbnVsbAotCQlAcmV0dXJuIEFwcHNlcnZlckNvbm5lY3Rpb25Tb3VyY2UKLQkgKi8KLQkJcHVibGljIHN0YXRpYyBBcHBzZXJ2ZXJDb25uZWN0aW9uU291cmNlCi0JY29ubmVjdCgKLQkJZmluYWwgU3RyaW5nCWhvc3QsCi0JCWZpbmFsIGludAkJcG9ydCwKLQkJZmluYWwgU3RyaW5nCXVzZXIsCi0JCWZpbmFsIFN0cmluZwlwYXNzd29yZCwKLQkJZmluYWwgVExTUGFyYW1zCXRsc1BhcmFtcyApCi0JCXRocm93cyBJT0V4Y2VwdGlvbgotCXsKLQkJZmluYWwgU3RyaW5nIGluZm8gPSAiaG9zdD0iICsgaG9zdCArICIsIHBvcnQ9IiArIHBvcnQgKwotCQkJIiwgdXNlcj0iICsgdXNlciArICIsIHBhc3N3b3JkPSIgKyBwYXNzd29yZCArCi0JCQkiLCB0bHM9IiArICh0bHNQYXJhbXMgIT0gbnVsbCk7Ci0JCQkKLQkJU2FtcGxlVXRpbC5wcmludGxuKCAiQ29ubmVjdGluZy4uLjoiICsgaW5mbyApOwotCQkKLQkJZmluYWwgQXBwc2VydmVyQ29ubmVjdGlvblNvdXJjZSBjb25uCT0KLQkJCW5ldyBBcHBzZXJ2ZXJDb25uZWN0aW9uU291cmNlKCBBcHBzZXJ2ZXJDb25uZWN0aW9uU291cmNlLlBST1RPQ09MX1JNSSwKLQkJCQlob3N0LCBwb3J0LCB1c2VyLCBwYXNzd29yZCwgdGxzUGFyYW1zLCBudWxsKTsKLQkJCi0JCS8vIGZvcmNlIHRoZSBjb25uZWN0aW9uIG5vdwotCQljb25uLmdldEpNWENvbm5lY3RvciggZmFsc2UgKTsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIG5ldyBTYW1wbGVNYWluKCBhcmdzLmxlbmd0aCA9PSAxID8gYXJnc1sgMCBdIDogIlNhbXBsZU1haW4ucHJvcGVydGllcyIgKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCggVGhyb3dhYmxlIHQgKQorICAgICAgICB7CisgICAgICAgICAgICBTYW1wbGVVdGlsLmdldFJvb3RDYXVzZSggdCApLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgfQogCi0JCVNhbXBsZVV0aWwucHJpbnRsbiggIkNvbm5lY3RlZDogIiArIGluZm8gKTsKLQkJCi0JCXJldHVybiggY29ubiApOwotCX0KLQkKLQkKLQkvKioKLQkgKi8KLQkJcHVibGljCi0JU2FtcGxlTWFpbiggZmluYWwgU3RyaW5nIG9wdGlvbmFsUHJvcGVydGllc0ZpbGUgKQotCQl0aHJvd3MgSU9FeGNlcHRpb24KLQl7Ci0JCWZpbmFsIFByb3BlcnRpZXMJcHJvcHMJPSBnZXRDb25uZWN0UHJvcGVydGllcyggb3B0aW9uYWxQcm9wZXJ0aWVzRmlsZSApOwotCQkKLQkJZmluYWwgU3RyaW5nCWhvc3QJPSBwcm9wcy5nZXRQcm9wZXJ0eSggImNvbm5lY3QuaG9zdCIsICJsb2NhbGhvc3QiICk7Ci0JCWZpbmFsIGludAkJcG9ydAk9IEludGVnZXIucGFyc2VJbnQoIHByb3BzLmdldFByb3BlcnR5KCAiY29ubmVjdC5wb3J0IiwgIjg2ODYiICkgKTsKLQkJZmluYWwgU3RyaW5nCXVzZXIJPSBwcm9wcy5nZXRQcm9wZXJ0eSggImNvbm5lY3QudXNlciIsICJhZG1pbiIgKTsKLQkJZmluYWwgU3RyaW5nCXBhc3N3b3JkCT0gcHJvcHMuZ2V0UHJvcGVydHkoICJjb25uZWN0LnBhc3N3b3JkIiwgImFkbWluMTIzIiApOwotCQlmaW5hbCBTdHJpbmcJdHJ1c3RTdG9yZQk9IHByb3BzLmdldFByb3BlcnR5KCAiY29ubmVjdC50cnVzdHN0b3JlIiwgREVGQVVMVF9UUlVTVF9TVE9SRV9GSUxFKTsKLQkJZmluYWwgU3RyaW5nCXRydXN0U3RvcmVQYXNzd29yZAk9Ci0JCQkJcHJvcHMuZ2V0UHJvcGVydHkoICJjb25uZWN0LnRydXN0c3RvcmVQYXNzd29yZCIsIERFRkFVTFRfVFJVU1RfU1RPUkVfUEFTU1dPUkQpOwotCQlmaW5hbCBib29sZWFuCXVzZVRMUwk9IAotCQkJQm9vbGVhbi52YWx1ZU9mKCBwcm9wcy5nZXRQcm9wZXJ0eSggImNvbm5lY3QudXNlVExTIiwgImZhbHNlIiApICkuYm9vbGVhblZhbHVlKCk7Ci0JCQotCQlmaW5hbCBUTFNQYXJhbXMJdGxzUGFyYW1zCT0gdXNlVExTID8KLQkJCWNyZWF0ZVRMU1BhcmFtcyggdHJ1c3RTdG9yZSwgdHJ1c3RTdG9yZVBhc3N3b3JkKSA6IG51bGw7Ci0JCQotCQlmaW5hbCBBcHBzZXJ2ZXJDb25uZWN0aW9uU291cmNlCWNvbm4gCT0gY29ubmVjdCggaG9zdCwgcG9ydCwgdXNlciwgcGFzc3dvcmQsIHRsc1BhcmFtcyApOwotCQkKLQkJaWYgKCBtSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXIgIT0gbnVsbCApCi0JCXsKLQkJCVNhbXBsZVV0aWwucHJpbnRsbiggIkhhbmRzaGFrZUNvbXBsZXRlZEV2ZW50OiAiICsKLQkJCQlTYW1wbGVVdGlsLnRvU3RyaW5nKCBtSGFuZHNoYWtlQ29tcGxldGVkTGlzdGVuZXIuZ2V0TGFzdEV2ZW50KCkgKSApOwotCQl9Ci0JCQotCQltRG9tYWluUm9vdAk9IGNvbm4uZ2V0RG9tYWluUm9vdCgpOwogCi0JCQotCQl0cnkKLQkJewotCQkJZGVtbyggKTsKLQkJfQotCQlmaW5hbGx5Ci0JCXsKLQkJCS8vIGNsb3NlIHRoZSBjb25uZWN0aW9uIChub3QgbmVjZXNzYXJ5LCBidXQgaGVyZSBmb3IgYXMgYW4gZXhhbXBsZSkKLQkJCWNvbm4uZ2V0Sk1YQ29ubmVjdG9yKCBmYWxzZSApLmNsb3NlKCk7Ci0JCX0KLQl9CisgICAgZmluYWwgU3RyaW5nICAgIFFVSVQgICAgICAgICAgICA9ICJxdWl0IjsKKyAgICBmaW5hbCBTdHJpbmcgICAgTElTVCAgICAgICAgICAgID0gImxpc3QiOworICAgIGZpbmFsIFN0cmluZyAgICBERVBMT1kgICAgICAgICAgICA9ICJkZXBsb3kiOworICAgIGZpbmFsIFN0cmluZyAgICBVTkRFUExPWSAgICAgICAgPSAidW5kZXBsb3kiOworICAgIGZpbmFsIFN0cmluZyAgICBRVUVSWSAgICAgICAgICAgID0gInF1ZXJ5IjsKKyAgICBmaW5hbCBTdHJpbmcgICAgU0hPV19ISUVSQVJDSFkgICAgPSAic2hvdy1oaWVyYXJjaHkiOworICAgIGZpbmFsIFN0cmluZyAgICBTVEFSVF9TRVJWRVIgICAgPSAic3RhcnQtc2VydmVyIjsKKyAgICBmaW5hbCBTdHJpbmcgICAgU1RPUF9TRVJWRVIgICAgICAgID0gInN0b3Atc2VydmVyIjsKKyAgICBmaW5hbCBTdHJpbmcgICAgTElTVF9BVFRSSUJVVEVTICAgID0gImxpc3QtYXR0cmlidXRlcyI7CisgICAgZmluYWwgU3RyaW5nICAgIExJU1RfRE9UVEVEX05BTUVTICAgID0gImxpc3QtZG90dGVkLW5hbWVzIjsKKyAgICBmaW5hbCBTdHJpbmcgICAgTElTVF9QUk9QRVJUSUVTICAgID0gImxpc3QtcHJvcGVydGllcyI7CisgICAgZmluYWwgU3RyaW5nICAgIFNFVF9NT05JVE9SSU5HICAgID0gInNldC1tb25pdG9yaW5nIjsKKyAgICBmaW5hbCBTdHJpbmcgICAgREVNT19KTVhfTU9OSVRPUiAgICA9ICJkZW1vLWpteC1tb25pdG9yIjsKKyAgICBmaW5hbCBTdHJpbmcgICAgUlVOX0FMTCAgICAgICAgICAgID0gInJ1bi1hbGwiOworCisgICAgZmluYWwgU3RyaW5nW10gICAgTUVOVV9DSE9JQ0VTICAgID0gbmV3IFN0cmluZ1tdCisgICAgeworICAgICAgICBERU1PX0pNWF9NT05JVE9SLCBERVBMT1ksIExJU1RfQVRUUklCVVRFUywgTElTVCwgTElTVF9ET1RURURfTkFNRVMsIExJU1RfUFJPUEVSVElFUywgUVVFUlksIFFVSVQsIFJVTl9BTEwsCisgICAgICAgIFNUQVJUX1NFUlZFUiwgU1RPUF9TRVJWRVIsCisgICAgICAgIFNIT1dfSElFUkFSQ0hZLCBTRVRfTU9OSVRPUklORywgVU5ERVBMT1kKKyAgICB9OworCisgICAgZmluYWwgU3RyaW5nIE1FTlUgICAgPSBTYW1wbGVVdGlsLmFycmF5VG9TdHJpbmcoIE1FTlVfQ0hPSUNFUywgIiAgIiwgIlxuIik7CisgICAgZmluYWwgU3RyaW5nIFBST01QVCAgICA9ICJDb21tYW5kczpcbiIgKyBNRU5VICsgIlxuRW50ZXIgY29tbWFuZD4gIjsKKworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgSWxsZWdhbFVzYWdlRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uCisgICAgeworICAgICAgICBJbGxlZ2FsVXNhZ2VFeGNlcHRpb24oKSAgICB7fQorICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQKKyAgICByZXF1aXJlKAorICAgICAgICBmaW5hbCBib29sZWFuICAgIHRlc3QsCisgICAgICAgIGZpbmFsIFN0cmluZyAgICBtc2cgKQorICAgICAgICB0aHJvd3MgSWxsZWdhbFVzYWdlRXhjZXB0aW9uCisgICAgeworICAgICAgICBpZiAoICEgdGVzdCApCisgICAgICAgIHsKKyAgICAgICAgICAgIFNhbXBsZVV0aWwucHJpbnRsbiggbXNnICk7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFVzYWdlRXhjZXB0aW9uKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkCisgICAgaGFuZGxlQ2hvaWNlKAorICAgICAgICBmaW5hbCBTYW1wbGVzICAgIHNhbXBsZXMsCisgICAgICAgIGZpbmFsIFN0cmluZyAgICBsaW5lICkKKyAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBJbGxlZ2FsVXNhZ2VFeGNlcHRpb24sIEluc3RhbmNlTm90Rm91bmRFeGNlcHRpb24KKyAgICB7CisgICAgICAgIGZpbmFsIFN0cmluZ1tdICAgIHBhcnRzICAgID0gbGluZS5zcGxpdCggIlsgXHRdKyIgKTsKKyAgICAgICAgZmluYWwgaW50ICAgICAgICBudW1BcmdzICAgID0gcGFydHMubGVuZ3RoIC0gMTsKKyAgICAgICAgZmluYWwgU3RyaW5nICAgIGNtZCAgICA9IHBhcnRzWyAwIF07CisKKyAgICAgICAgaWYgKCBjbWQubGVuZ3RoKCkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIFNhbXBsZVV0aWwucHJpbnRsbiggImNtZDogIiArIFNhbXBsZVV0aWwudG9TdHJpbmcoIHBhcnRzICkgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggY21kLmVxdWFscyggUVVJVCApIHx8IGNtZC5lcXVhbHMoICJxIiApICkKKyAgICAgICAgeworICAgICAgICAgICAgcmVxdWlyZSggbnVtQXJncyA9PSAwLCAiVXNhZ2U6ICIgKyBRVUlUICk7CisgICAgICAgICAgICBTeXN0ZW0uZXhpdCggMCApOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCBjbWQubGVuZ3RoKCkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggY21kLmVxdWFscyggREVQTE9ZICkgKQorICAgICAgICB7CisgICAgICAgICAgICByZXF1aXJlKCBudW1BcmdzID49IDEsICJVc2FnZTogIiArIERFUExPWSArICIgPGFyY2hpdmUtbmFtZT4iICk7CisgICAgICAgICAgICBmb3IoIGludCBpID0gMTsgaSA8IHBhcnRzLmxlbmd0aDsgKytpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzYW1wbGVzLmRlcGxveSggbmV3IEZpbGUoIHBhcnRzWyBpIF0gKSApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCBjbWQuZXF1YWxzKCBVTkRFUExPWSApICkKKyAgICAgICAgeworICAgICAgICAgICAgcmVxdWlyZSggbnVtQXJncyA+PSAxLCAiVXNhZ2U6ICIgKyBVTkRFUExPWSArICIgWzxuYW1lPlsgPG5hbWU+XSpdIiApOworICAgICAgICAgICAgZm9yKCBpbnQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGg7ICsraSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2FtcGxlcy51bmRlcGxveSggcGFydHNbIGkgXSApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCBjbWQuZXF1YWxzKCBTVEFSVF9TRVJWRVIgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlcXVpcmUoIG51bUFyZ3MgPT0gMSwgIlVzYWdlOiAiICsgU1RBUlRfU0VSVkVSICsgIiA8c2VydmVyLW5hbWU+IiApOworICAgICAgICAgICAgc2FtcGxlcy5zdGFydFNlcnZlciggcGFydHNbIDEgXSApOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCBjbWQuZXF1YWxzKCBTVE9QX1NFUlZFUiApICkKKyAgICAgICAgeworICAgICAgICAgICAgcmVxdWlyZSggbnVtQXJncyA9PSAxLCAiVXNhZ2U6ICIgKyBTVE9QX1NFUlZFUiArICIgPHNlcnZlci1uYW1lPiIgKTsKKyAgICAgICAgICAgIHNhbXBsZXMuc3RvcFNlcnZlciggcGFydHNbIDEgXSApOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCBjbWQuZXF1YWxzKCBMSVNUICkgKQorICAgICAgICB7CisgICAgICAgICAgICByZXF1aXJlKCBudW1BcmdzID09IDAsICJVc2FnZTogIiArIExJU1QgKTsKKyAgICAgICAgICAgIHNhbXBsZXMuaGFuZGxlTGlzdCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCBjbWQuZXF1YWxzKCBTSE9XX0hJRVJBUkNIWSApICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCBudW1BcmdzID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNhbXBsZXMuZGlzcGxheUhpZXJhcmNoeSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciggaW50IGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoOyArK2kgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc2FtcGxlcy5kaXNwbGF5SGllcmFyY2h5KCBwYXJ0c1sgaSBdICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCBjbWQuZXF1YWxzKCBRVUVSWSkgKQorICAgICAgICB7CisgICAgICAgICAgICByZXF1aXJlKCBudW1BcmdzID09IDAsICJVc2FnZTogIiArIFFVRVJZICk7CisKKyAgICAgICAgICAgIHNhbXBsZXMuZGVtb1F1ZXJ5KCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIGNtZC5lcXVhbHMoIExJU1RfQVRUUklCVVRFUyApICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCBudW1BcmdzID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNhbXBsZXMuZGlzcGxheUFsbEF0dHJpYnV0ZXMoIGdldERvbWFpblJvb3QoKSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciggaW50IGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoOyArK2kgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc2FtcGxlcy5kaXNwbGF5QWxsQXR0cmlidXRlcyggcGFydHNbIGkgXSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggY21kLmVxdWFscyggTElTVF9ET1RURURfTkFNRVMgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlcXVpcmUoIG51bUFyZ3MgPT0gMCwgIlVzYWdlOiAiICsgTElTVF9ET1RURURfTkFNRVMgKTsKKyAgICAgICAgICAgIHNhbXBsZXMuZGlzcGxheURvdHRlZE5hbWVzKCApOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCBjbWQuZXF1YWxzKCBMSVNUX1BST1BFUlRJRVMgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlcXVpcmUoIG51bUFyZ3MgPT0gMCwgIlVzYWdlOiAiICsgTElTVF9QUk9QRVJUSUVTICk7CisgICAgICAgICAgICBzYW1wbGVzLmRpc3BsYXlBbGxQcm9wZXJ0aWVzKCApOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCBjbWQuZXF1YWxzKCBSVU5fQUxMICkgKQorICAgICAgICB7CisgICAgICAgICAgICByZXF1aXJlKCBudW1BcmdzID09IDAsICJVc2FnZTogIiArIFJVTl9BTEwgKTsKKworICAgICAgICAgICAgZm9yKCBpbnQgaSA9IDA7IGkgPCBNRU5VX0NIT0lDRVMubGVuZ3RoOyArK2kgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyAgICBjaG9pY2UgICAgPSBNRU5VX0NIT0lDRVNbIGkgXTsKKworICAgICAgICAgICAgICAgIGlmICggISAoIGNob2ljZS5lcXVhbHMoIFFVSVQgKSB8fCBjaG9pY2UuZXF1YWxzKCBSVU5fQUxMICkgKSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGVDaG9pY2UoIHNhbXBsZXMsIGNob2ljZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggY21kLmVxdWFscyggREVNT19KTVhfTU9OSVRPUiApICkKKyAgICAgICAgeworICAgICAgICAgICAgc2FtcGxlcy5kZW1vSk1YTW9uaXRvcigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCBjbWQuZXF1YWxzKCBTRVRfTU9OSVRPUklORyApICkKKyAgICAgICAgeworICAgICAgICAgICAgcmVxdWlyZSggbnVtQXJncyA9PSAyLCAiVXNhZ2U6ICIgKyBTRVRfTU9OSVRPUklORyArICIgPGNvbmZpZy1uYW1lPiBISUdIfExPV3xPRkYiICk7CisKKyAgICAgICAgICAgIHNhbXBsZXMuc2V0TW9uaXRvcmluZyggcGFydHNbIDEgXSwgcGFydHNbIDIgXSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBTYW1wbGVVdGlsLnByaW50bG4oICJVbmtub3duIGNvbW1hbmQ6ICIgKyBsaW5lICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkCisgICAgZGVtbygpCisgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgZmluYWwgTGluZVJlYWRlckltcGwgICAgaW4gICAgPSBuZXcgTGluZVJlYWRlckltcGwoIFN5c3RlbS5pbiApOworCisgICAgICAgIGZpbmFsIFNhbXBsZXMgICAgc2FtcGxlcyAgICA9IG5ldyBTYW1wbGVzKCBnZXREb21haW5Sb290KCkgKTsKKyAgICAgICAgd2hpbGUgKCB0cnVlICkKKyAgICAgICAgeworICAgICAgICAgICAgZmluYWwgU3RyaW5nICAgIGxpbmUgICAgPSBpbi5yZWFkTGluZSggIlxuIiArIFBST01QVCApOworICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaGFuZGxlQ2hvaWNlKCBzYW1wbGVzLCBsaW5lLnRyaW0oKSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2goIElsbGVnYWxVc2FnZUV4Y2VwdGlvbiBlICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgICAgICBwcml2YXRlIGZpbmFsIERvbWFpblJvb3QKKyAgICBnZXREb21haW5Sb290KCkKKyAgICB7CisgICAgICAgIHJldHVybiggbURvbWFpblJvb3QgKTsKKyAgICB9CisKKworCisKKyAgICAgICAgcHJpdmF0ZSBUTFNQYXJhbXMKKyAgICBjcmVhdGVUTFNQYXJhbXMoCisgICAgICAgIGZpbmFsIFN0cmluZyAgICB0cnVzdFN0b3JlLAorICAgICAgICBmaW5hbCBTdHJpbmcgICAgcGFzc3dvcmQgKQorICAgIHsKKyAgICAgICAgZmluYWwgRmlsZSB0cnVzdFN0b3JlRmlsZSAgICA9IG5ldyBGaWxlKCB0cnVzdFN0b3JlICk7CisgICAgICAgIGZpbmFsIGNoYXJbXSB0cnVzdFN0b3JlUGFzc3dvcmQgICAgPSBwYXNzd29yZC50b0NoYXJBcnJheSgpOworCisgICAgICAgIG1IYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lciAgICA9IG5ldyBIYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lckltcGwoKTsKKyAgICAgICAgZmluYWwgVHJ1c3RTdG9yZVRydXN0TWFuYWdlciB0cnVzdE1nciA9CisgICAgICAgICAgICBuZXcgVHJ1c3RTdG9yZVRydXN0TWFuYWdlciggdHJ1c3RTdG9yZUZpbGUsIHRydXN0U3RvcmVQYXNzd29yZCk7CisgICAgICAgIHRydXN0TWdyLnNldFByb21wdCggdHJ1ZSApOworCisgICAgICAgIGZpbmFsIFRMU1BhcmFtcyAgICB0bHNQYXJhbXMgPSBuZXcgVExTUGFyYW1zKCB0cnVzdE1nciwgbUhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyICk7CisKKyAgICAgICAgcmV0dXJuKCB0bHNQYXJhbXMgKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgICAgUmVhZCBjb25uZWN0IHByb3BlcnRpZXMgZnJvbSBhIGZpbGUuCisgICAgICovCisgICAgICAgIHByaXZhdGUgZmluYWwgUHJvcGVydGllcworICAgIGdldENvbm5lY3RQcm9wZXJ0aWVzKCBmaW5hbCBTdHJpbmcgZmlsZSApCisgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgZmluYWwgUHJvcGVydGllcyAgICBwcm9wcyAgICA9IG5ldyBQcm9wZXJ0aWVzKCk7CisKKyAgICAgICAgaWYgKCBmaWxlICE9IG51bGwgKQorICAgICAgICB7CisgICAgICAgICAgICBTYW1wbGVVdGlsLnByaW50bG4oICJSZWFkaW5nIHByb3BlcnRpZXMgZnJvbTogIiArIFNhbXBsZVV0aWwucXVvdGUoIGZpbGUgKSApOworICAgICAgICAgICAgZmluYWwgRmlsZSAgICBmICAgID0gbmV3IEZpbGUoIGZpbGUgKTsKKworICAgICAgICAgICAgaWYgKCBmLmV4aXN0cygpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBGaWxlSW5wdXRTdHJlYW0gICAgaXMgICAgPSBuZXcgRmlsZUlucHV0U3RyZWFtKCBmICk7CisgICAgICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwcm9wcy5sb2FkKCBpcyApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmaW5hbGx5CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpcy5jbG9zZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTYW1wbGVVdGlsLnByaW50bG4oIkZpbGUgXCIiICsgZmlsZSArICIgZG9lcyBub3QgZXhpc3QsIHVzaW5nIGRlZmF1bHRzLiIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiggcHJvcHMgKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgICAgREVGQVVMVF9UUlVTVF9TVE9SRV9GSUxFICAgICAgICA9ICJ+Ly5rZXlzdG9yZSI7CisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nICAgIERFRkFVTFRfVFJVU1RfU1RPUkVfUEFTU1dPUkQgICAgPSAiY2hhbmdlbWUiOworCisgICAgLyoqCisgICAgICAgIEBwYXJhbSBob3N0ICAgIGhvc3RuYW1lIG9yIElQIGFkZHJlc3Mgb2YgRG9tYWluIEFkbWluIFNlcnZlcgorICAgICAgICBAcGFyYW0gcG9ydCAgICBSTUkgYWRtaW5pc3RyYXRpdmUgcG9ydAorICAgICAgICBAcGFyYW0gdXNlciAgICBhZG1pbiB1c2VyCisgICAgICAgIEBwYXJhbSBwYXNzd29yZCBhZG1pbiB1c2VyIHBhc3N3b3JkCisgICAgICAgIEBwYXJhbSB0bHNQYXJhbXMgVExTIHBhcmFtZXRlcnMsIG1heSBiZSBudWxsCisgICAgICAgIEByZXR1cm4gQXBwc2VydmVyQ29ubmVjdGlvblNvdXJjZQorICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIEFwcHNlcnZlckNvbm5lY3Rpb25Tb3VyY2UKKyAgICBjb25uZWN0KAorICAgICAgICBmaW5hbCBTdHJpbmcgICAgaG9zdCwKKyAgICAgICAgZmluYWwgaW50ICAgICAgICBwb3J0LAorICAgICAgICBmaW5hbCBTdHJpbmcgICAgdXNlciwKKyAgICAgICAgZmluYWwgU3RyaW5nICAgIHBhc3N3b3JkLAorICAgICAgICBmaW5hbCBUTFNQYXJhbXMgICAgdGxzUGFyYW1zICkKKyAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCisgICAgeworICAgICAgICBmaW5hbCBTdHJpbmcgaW5mbyA9ICJob3N0PSIgKyBob3N0ICsgIiwgcG9ydD0iICsgcG9ydCArCisgICAgICAgICAgICAiLCB1c2VyPSIgKyB1c2VyICsgIiwgcGFzc3dvcmQ9IiArIHBhc3N3b3JkICsKKyAgICAgICAgICAgICIsIHRscz0iICsgKHRsc1BhcmFtcyAhPSBudWxsKTsKKworICAgICAgICBTYW1wbGVVdGlsLnByaW50bG4oICJDb25uZWN0aW5nLi4uOiIgKyBpbmZvICk7CisKKyAgICAgICAgZmluYWwgQXBwc2VydmVyQ29ubmVjdGlvblNvdXJjZSBjb25uICAgID0KKyAgICAgICAgICAgIG5ldyBBcHBzZXJ2ZXJDb25uZWN0aW9uU291cmNlKCBBcHBzZXJ2ZXJDb25uZWN0aW9uU291cmNlLlBST1RPQ09MX1JNSSwKKyAgICAgICAgICAgICAgICBob3N0LCBwb3J0LCB1c2VyLCBwYXNzd29yZCwgdGxzUGFyYW1zLCBudWxsKTsKKworICAgICAgICAvLyBmb3JjZSB0aGUgY29ubmVjdGlvbiBub3cKKyAgICAgICAgY29ubi5nZXRKTVhDb25uZWN0b3IoIGZhbHNlICk7CisKKyAgICAgICAgU2FtcGxlVXRpbC5wcmludGxuKCAiQ29ubmVjdGVkOiAiICsgaW5mbyApOworCisgICAgICAgIHJldHVybiggY29ubiApOworICAgIH0KKworCisgICAgLyoqCisgICAgICovCisgICAgICAgIHB1YmxpYworICAgIFNhbXBsZU1haW4oIGZpbmFsIFN0cmluZyBvcHRpb25hbFByb3BlcnRpZXNGaWxlICkKKyAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCisgICAgeworICAgICAgICBmaW5hbCBQcm9wZXJ0aWVzICAgIHByb3BzICAgID0gZ2V0Q29ubmVjdFByb3BlcnRpZXMoIG9wdGlvbmFsUHJvcGVydGllc0ZpbGUgKTsKKworICAgICAgICBmaW5hbCBTdHJpbmcgICAgaG9zdCAgICA9IHByb3BzLmdldFByb3BlcnR5KCAiY29ubmVjdC5ob3N0IiwgImxvY2FsaG9zdCIgKTsKKyAgICAgICAgZmluYWwgaW50ICAgICAgICBwb3J0ICAgID0gSW50ZWdlci5wYXJzZUludCggcHJvcHMuZ2V0UHJvcGVydHkoICJjb25uZWN0LnBvcnQiLCAiODY4NiIgKSApOworICAgICAgICBmaW5hbCBTdHJpbmcgICAgdXNlciAgICA9IHByb3BzLmdldFByb3BlcnR5KCAiY29ubmVjdC51c2VyIiwgImFkbWluIiApOworICAgICAgICBmaW5hbCBTdHJpbmcgICAgcGFzc3dvcmQgICAgPSBwcm9wcy5nZXRQcm9wZXJ0eSggImNvbm5lY3QucGFzc3dvcmQiLCAiYWRtaW4xMjMiICk7CisgICAgICAgIGZpbmFsIFN0cmluZyAgICB0cnVzdFN0b3JlICAgID0gcHJvcHMuZ2V0UHJvcGVydHkoICJjb25uZWN0LnRydXN0c3RvcmUiLCBERUZBVUxUX1RSVVNUX1NUT1JFX0ZJTEUpOworICAgICAgICBmaW5hbCBTdHJpbmcgICAgdHJ1c3RTdG9yZVBhc3N3b3JkICAgID0KKyAgICAgICAgICAgICAgICBwcm9wcy5nZXRQcm9wZXJ0eSggImNvbm5lY3QudHJ1c3RzdG9yZVBhc3N3b3JkIiwgREVGQVVMVF9UUlVTVF9TVE9SRV9QQVNTV09SRCk7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gICAgdXNlVExTICAgID0KKyAgICAgICAgICAgIEJvb2xlYW4udmFsdWVPZiggcHJvcHMuZ2V0UHJvcGVydHkoICJjb25uZWN0LnVzZVRMUyIsICJmYWxzZSIgKSApLmJvb2xlYW5WYWx1ZSgpOworCisgICAgICAgIGZpbmFsIFRMU1BhcmFtcyAgICB0bHNQYXJhbXMgICAgPSB1c2VUTFMgPworICAgICAgICAgICAgY3JlYXRlVExTUGFyYW1zKCB0cnVzdFN0b3JlLCB0cnVzdFN0b3JlUGFzc3dvcmQpIDogbnVsbDsKKworICAgICAgICBmaW5hbCBBcHBzZXJ2ZXJDb25uZWN0aW9uU291cmNlICAgIGNvbm4gICAgID0gY29ubmVjdCggaG9zdCwgcG9ydCwgdXNlciwgcGFzc3dvcmQsIHRsc1BhcmFtcyApOworCisgICAgICAgIGlmICggbUhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyICE9IG51bGwgKQorICAgICAgICB7CisgICAgICAgICAgICBTYW1wbGVVdGlsLnByaW50bG4oICJIYW5kc2hha2VDb21wbGV0ZWRFdmVudDogIiArCisgICAgICAgICAgICAgICAgU2FtcGxlVXRpbC50b1N0cmluZyggbUhhbmRzaGFrZUNvbXBsZXRlZExpc3RlbmVyLmdldExhc3RFdmVudCgpICkgKTsKKyAgICAgICAgfQorCisgICAgICAgIG1Eb21haW5Sb290ICAgID0gY29ubi5nZXREb21haW5Sb290KCk7CisKKworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAgICAgZGVtbyggKTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBjb25uZWN0aW9uIChub3QgbmVjZXNzYXJ5LCBidXQgaGVyZSBmb3IgYXMgYW4gZXhhbXBsZSkKKyAgICAgICAgICAgIGNvbm4uZ2V0Sk1YQ29ubmVjdG9yKCBmYWxzZSApLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvc2FtcGxlcy9zYW1wbGVzL2FteC9TYW1wbGVVdGlsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL3NhbXBsZXMvYW14L1NhbXBsZVV0aWwuamF2YQppbmRleCBjMjUxNWIzLi5lOWUwNDYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL3NhbXBsZXMvYW14L1NhbXBsZVV0aWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL3NhbXBsZXMvYW14L1NhbXBsZVV0aWwuamF2YQpAQCAtMjQsMjY1ICsyNCwyNjUgQEAKIAogCiAvKioKLQlVdGlsaXR5IG1ldGhvZHMgZm9yIHRoZSBzYW1wbGVzLgorICAgIFV0aWxpdHkgbWV0aG9kcyBmb3IgdGhlIHNhbXBsZXMuCiAgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBTYW1wbGVVdGlsCiB7Ci0JcHJpdmF0ZQlTYW1wbGVVdGlsKCkJe30KLQkKLQkJcHVibGljIHN0YXRpYyB2b2lkCi0JcHJpbnRsbiggT2JqZWN0IG8gKQotCXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCB0b1N0cmluZyggbyApICk7Ci0JfQotCQotCS8qKgotCQlEaXNwbGF5IGEgTWFwIHRvIFN5c3RlbS5vdXQuCi0JICovCi0JCXB1YmxpYyBzdGF0aWMgdm9pZAotCWRpc3BsYXlNYXAoCi0JCWZpbmFsIFN0cmluZwltc2csCi0JCWZpbmFsIE1hcCAJCW0pCi0JewotCQlwcmludGxuKCBtc2cgKyAiOiAiICsgdG9TdHJpbmcoIG0ua2V5U2V0KCkgKSApOwotCX0KLQkKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcJUVVPVEVfQ0hBUgk9ICJcIiI7Ci0JCXB1YmxpYyBzdGF0aWMgU3RyaW5nCi0JcXVvdGUoIGZpbmFsIE9iamVjdCBvICkKLQl7Ci0JCWlmICggbyA9PSBudWxsICkKLQkJewotCQkJcmV0dXJuIHF1b3RlKCAibnVsbCIgKTsKLQkJfQotCQkKLQkJcmV0dXJuKCBRVU9URV9DSEFSICsgby50b1N0cmluZygpICsgUVVPVEVfQ0hBUiApOwotCX0KLQkKLQkJcHVibGljIHN0YXRpYyBTdHJpbmcKLQl0b1N0cmluZyggZmluYWwgT2JqZWN0IG8gKQotCXsKLQkJU3RyaW5nCXJlc3VsdAk9IG51bGw7Ci0JCQotCQlpZiAoIG8gPT0gbnVsbCApCi0JCXsKLQkJCXJlc3VsdAk9ICJudWxsIjsKLQkJfQotCQllbHNlIGlmICggbyBpbnN0YW5jZW9mIE9iamVjdFtdICkKLQkJewotCQkJcmVzdWx0CT0gIlsiICsgYXJyYXlUb1N0cmluZyggKE9iamVjdFtdKW8sIG51bGwsICIsICIgKSArICJdIjsKLQkJfQotCQllbHNlIGlmICggbyBpbnN0YW5jZW9mIE5vdGlmaWNhdGlvbiApCi0JCXsKLQkJCXJlc3VsdAk9IHRvU3RyaW5nKCAoTm90aWZpY2F0aW9uKW8gKTsKLQkJfQotCQllbHNlIGlmICggbyBpbnN0YW5jZW9mIEF0dHJpYnV0ZSApCi0JCXsKLQkJCXJlc3VsdAk9IHRvU3RyaW5nKCAoQXR0cmlidXRlKW8gKTsKLQkJfQotCQllbHNlIGlmICggbyBpbnN0YW5jZW9mIE1hcCApCi0JCXsKLQkJCXJlc3VsdAk9IHRvU3RyaW5nKCAoTWFwKW8gKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXJlc3VsdAk9IG8udG9TdHJpbmcoKTsKLQkJfQotCQlyZXR1cm4oIHJlc3VsdCApOwotCX0KLQkKLQkKLQkJcHVibGljIHN0YXRpYyBTdHJpbmcKLQl0b1N0cmluZyggZmluYWwgQXR0cmlidXRlIGEgKQotCXsKLQkJcmV0dXJuIGEuZ2V0TmFtZSgpICsgIj0iICsgdG9TdHJpbmcoIGEuZ2V0VmFsdWUoKSApOwotCX0KLQkKLQkJcHJpdmF0ZSBzdGF0aWMgdm9pZAotCWFwcGVuZCggZmluYWwgU3RyaW5nQnVmZmVyIGIsIGZpbmFsIE9iamVjdCBvKQotCXsKLQkJaWYgKCBiICE9IG51bGwgJiYgYi5sZW5ndGgoKSAhPSAwICkKLQkJewotCQkJYi5hcHBlbmQoICIsICIgKTsKLQkJfQotCQkKLQkJYi5hcHBlbmQoIG8udG9TdHJpbmcoKSApOwotCX0KLQkKLQkJcHVibGljIHN0YXRpYyBTdHJpbmcKLQl0b1N0cmluZyggZmluYWwgTm90aWZpY2F0aW9uIG5vdGlmICkKLQl7Ci0JCWZpbmFsIFN0cmluZ0J1ZmZlcgliCT0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkKLQkJYXBwZW5kKCBiLCAiIyIgKyBub3RpZi5nZXRTZXF1ZW5jZU51bWJlcigpICk7Ci0JCWFwcGVuZCggYiwgbmV3IGphdmEudXRpbC5EYXRlKCBub3RpZi5nZXRUaW1lU3RhbXAoKSApICk7Ci0JCWFwcGVuZCggYiwgU2FtcGxlVXRpbC5xdW90ZSggbm90aWYuZ2V0U291cmNlKCkgKSApOwotCQlhcHBlbmQoIGIsIG5vdGlmLmdldFR5cGUoKSApOwotCQkKLQkJYXBwZW5kKCBiLCAiVXNlckRhdGEgPSAiICsgdG9TdHJpbmcoIG5vdGlmLmdldFVzZXJEYXRhKCkgKSApOwotCQkKLQkJaWYgKCBub3RpZiBpbnN0YW5jZW9mIE1CZWFuU2VydmVyTm90aWZpY2F0aW9uICkKLQkJewotCQkJLy8gdGhpcyBzaG91bGQgcmVhbGx5IGJlIGRvbmUgaW4gYSBNQmVhblNlcnZlck5vdGlmaWNhdGlvblN0cmluZ2lmaWVyIQotCQkJZmluYWwgTUJlYW5TZXJ2ZXJOb3RpZmljYXRpb24Jbgk9IChNQmVhblNlcnZlck5vdGlmaWNhdGlvbilub3RpZjsKLQkJCQotCQkJYXBwZW5kKCBiLCBTYW1wbGVVdGlsLnF1b3RlKCBuLmdldE1CZWFuTmFtZSgpICkgKTsKLQkJfQotCQllbHNlIGlmICggbm90aWYgaW5zdGFuY2VvZiBBdHRyaWJ1dGVDaGFuZ2VOb3RpZmljYXRpb24gKQotCQl7Ci0JCQlmaW5hbCBBdHRyaWJ1dGVDaGFuZ2VOb3RpZmljYXRpb24JYQk9IChBdHRyaWJ1dGVDaGFuZ2VOb3RpZmljYXRpb24pbm90aWY7Ci0JCQlhcHBlbmQoIGIsIHF1b3RlKCBhLmdldEF0dHJpYnV0ZU5hbWUoKSApICsKLQkJCQkiLCBPbGRWYWx1ZSA9ICIgKyBxdW90ZSggdG9TdHJpbmcoIGEuZ2V0T2xkVmFsdWUoKSApKSArCi0JCQkJIiwgTmV3VmFsdWUgPSAiICsgcXVvdGUoIHRvU3RyaW5nKCBhLmdldE5ld1ZhbHVlKCkgKSkgKTsKLQkJfQotCQkKLQkJcmV0dXJuKCBiLnRvU3RyaW5nKCkgKTsKLQl9Ci0JCi0JCisgICAgcHJpdmF0ZSAgICBTYW1wbGVVdGlsKCkgICAge30KIAotCQlwdWJsaWMgc3RhdGljIFN0cmluZwotCWFycmF5VG9TdHJpbmcoCi0JCWZpbmFsIE9iamVjdFtdIGEsCi0JCWZpbmFsIFN0cmluZyBwcmVmaXgsCi0JCWZpbmFsIFN0cmluZyBzdWZmaXggKQotCXsKLQkJZmluYWwgU3RyaW5nQnVmZmVyCWJ1Zgk9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCi0JCWZvciggaW50IGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSApCi0JCXsKLQkJCWlmICggcHJlZml4ICE9IG51bGwgKQotCQkJewotCQkJCWJ1Zi5hcHBlbmQoIHByZWZpeCApOwotCQkJfQotCQkJCi0JCQlidWYuYXBwZW5kKCB0b1N0cmluZyggYVsgaSBdICkgKTsKLQkJCQotCQkJaWYgKCBzdWZmaXggIT0gbnVsbCAmJiBpIDwgYS5sZW5ndGggKQotCQkJewotCQkJCWJ1Zi5hcHBlbmQoIHN1ZmZpeCApOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4oIGJ1Zi50b1N0cmluZygpICk7Ci0JfQotCQotCQotCQlwdWJsaWMgc3RhdGljIFN0cmluZwotCXRvU3RyaW5nKCBmaW5hbCBNYXAgbSApCi0JewotCQlyZXR1cm4oIG1hcFRvU3RyaW5nKCBtLCAiXG4iICkgKTsKLQl9Ci0JCi0JCXB1YmxpYyBzdGF0aWMgU3RyaW5nCi0JbWFwVG9TdHJpbmcoIGZpbmFsIE1hcCBtLCBmaW5hbCBTdHJpbmcgc2VwYXJhdG9yICkKLQl7Ci0JCWlmICggbSA9PSBudWxsICkKLQkJewotCQkJcmV0dXJuKCAibnVsbCIgKTsKLQkJfQotCQkKLQkJZmluYWwgU3RyaW5nQnVmZmVyCWJ1Zgk9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCi0JCWZpbmFsIEl0ZXJhdG9yCWl0ZXIJPSBtLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlICggaXRlci5oYXNOZXh0KCkgKQotCQl7Ci0JCQlmaW5hbCBPYmplY3QJa2V5CQk9IGl0ZXIubmV4dCgpOwotCQkJZmluYWwgT2JqZWN0CXZhbHVlCT0gbS5nZXQoIGtleSApOwotCQkJCi0JCQlidWYuYXBwZW5kKCBrZXkgKyAiPSIgKyBTYW1wbGVVdGlsLnRvU3RyaW5nKCB2YWx1ZSApICsgc2VwYXJhdG9yICk7Ci0JCX0KLQkJaWYgKCBidWYubGVuZ3RoKCkgIT0gMCApCi0JCXsKLQkJCS8vIHN0cmlwIHRyYWlsaW5nIHNlcGFyYXRvcgotCQkJYnVmLnNldExlbmd0aCggYnVmLmxlbmd0aCgpIC0gc2VwYXJhdG9yLmxlbmd0aCgpICk7Ci0JCX0KLQkJCi0JCXJldHVybiggYnVmLnRvU3RyaW5nKCkgKTsKLQl9Ci0JCi0JCi0JCS8qKgotCQlHZXQgdGhlIGNoYWluIG9mIGV4Y2VwdGlvbnMgdmlhIGdldENhdXNlKCkuIFRoZSBmaXJzdCBlbGVtZW50IGlzIHRoZQotCQlFeGNlcHRpb24gcGFzc2VkLgotCQkKLQkJQHBhcmFtIHN0YXJ0CXRoZSBFeGNlcHRpb24gdG8gdHJhdmVyc2UKLQkJQHJldHVybgkJYSBUaHJvd2FibGVbXSBvciBhbiBFeGNlcHRpb25bXSBhcyBhcHByb3ByaWF0ZQotCSAqLwotCQlwdWJsaWMgc3RhdGljIFRocm93YWJsZVtdCi0JZ2V0Q2F1c2VzKCBmaW5hbCBUaHJvd2FibGUgc3RhcnQgKQotCXsKLQkJZmluYWwgTGlzdAlsaXN0CT0gbmV3IEFycmF5TGlzdCgpOwotCQkKLQkJYm9vbGVhbgloYXZlTm9uRXhjZXB0aW9uCT0gZmFsc2U7Ci0JCQotCQlUaHJvd2FibGUgdAk9IHN0YXJ0OwotCQl3aGlsZSAoIHQgIT0gbnVsbCApCi0JCXsKLQkJCWxpc3QuYWRkKCB0ICk7Ci0JCQkKLQkJCWlmICggISAoIHQgaW5zdGFuY2VvZiBFeGNlcHRpb24gKSApCi0JCQl7Ci0JCQkJaGF2ZU5vbkV4Y2VwdGlvbgk9IHRydWU7Ci0JCQl9Ci0JCQkKLQkJCWZpbmFsIFRocm93YWJsZSB0ZW1wCT0gdC5nZXRDYXVzZSgpOwotCQkJaWYgKCB0ZW1wID09IG51bGwgKQotCQkJCWJyZWFrOwotCQkJdAk9IHRlbXA7Ci0JCX0KLQkJCi0JCWZpbmFsIFRocm93YWJsZVtdCXJlc3VsdHMJPSBoYXZlTm9uRXhjZXB0aW9uID8KLQkJCW5ldyBUaHJvd2FibGVbIGxpc3Quc2l6ZSgpIF0gOiBuZXcgRXhjZXB0aW9uWyBsaXN0LnNpemUoKSBdOwotCQkKLQkJbGlzdC50b0FycmF5KCByZXN1bHRzICk7Ci0JCQotCQlyZXR1cm4oIHJlc3VsdHMgKTsKLQl9Ci0JCi0JCi0JLyoqCi0JCUdldCB0aGUgb3JpZ2luYWwgdHJvdWJsZW1ha2VyLgotCQkKLQkJQHBhcmFtIGUJdGhlIEV4Y2VwdGlvbiB0byBkaWcgaW50bwotCQlAcmV0dXJuCQl0aGUgb3JpZ2luYWwgVGhyb3dhYmxlIHRoYXQgc3RhcnRlZCB0aGUgcHJvYmxlbQotCSAqLwlwdWJsaWMgc3RhdGljIFRocm93YWJsZQotCWdldFJvb3RDYXVzZSggZmluYWwgVGhyb3dhYmxlIGUgKQotCXsKLQkJZmluYWwgVGhyb3dhYmxlW10JY2F1c2VzCT0gZ2V0Q2F1c2VzKCBlICk7Ci0JCQotCQlyZXR1cm4oIGNhdXNlc1sgY2F1c2VzLmxlbmd0aCAtIDEgXSApOwotCX0KLQkKLQkJLyoqCi0JCUNyZWF0ZSBhIG5ldyBTZXQgY29udGFpbmluZyBhbGwgYXJyYXkgZWxlbWVudHMuCi0JICovCi0JCXB1YmxpYyBzdGF0aWMgU2V0Ci0JbmV3U2V0KCBmaW5hbCBPYmplY3QgW10gIG9iamVjdHMgKQotCXsKLQkJcmV0dXJuKCBuZXdTZXQoIG9iamVjdHMsIDAsIG9iamVjdHMubGVuZ3RoICkgKTsKLQl9CisgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZAorICAgIHByaW50bG4oIE9iamVjdCBvICkKKyAgICB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggdG9TdHJpbmcoIG8gKSApOworICAgIH0KKworICAgIC8qKgorICAgICAgICBEaXNwbGF5IGEgTWFwIHRvIFN5c3RlbS5vdXQuCisgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZAorICAgIGRpc3BsYXlNYXAoCisgICAgICAgIGZpbmFsIFN0cmluZyAgICBtc2csCisgICAgICAgIGZpbmFsIE1hcCAgICAgICAgIG0pCisgICAgeworICAgICAgICBwcmludGxuKCBtc2cgKyAiOiAiICsgdG9TdHJpbmcoIG0ua2V5U2V0KCkgKSApOworICAgIH0KIAogCi0JLyoqCi0JCUNyZWF0ZSBhIG5ldyBTZXQgY29udGFpbmluZyBhbGwgYXJyYXkgZWxlbWVudHMuCi0JICovCi0JCXB1YmxpYyBzdGF0aWMgU2V0Ci0JbmV3U2V0KAotCQlmaW5hbCBPYmplY3QgW10gIG9iamVjdHMsCi0JCWZpbmFsIGludAkJc3RhcnRJbmRleCwKLQkJZmluYWwgaW50CQludW1JdGVtcyApCi0JewotCQlmaW5hbCBTZXQJc2V0CT0gbmV3IEhhc2hTZXQoKTsKLQkJCi0JCWZvciggaW50IGkgPSAwOyBpIDwgbnVtSXRlbXM7ICsraSApCi0JCXsKLQkJCXNldC5hZGQoIG9iamVjdHNbIHN0YXJ0SW5kZXggKyBpIF0gKTsKLQkJfQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyAgICBRVU9URV9DSEFSICAgID0gIlwiIjsKKyAgICAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcKKyAgICBxdW90ZSggZmluYWwgT2JqZWN0IG8gKQorICAgIHsKKyAgICAgICAgaWYgKCBvID09IG51bGwgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcXVvdGUoICJudWxsIiApOworICAgICAgICB9CiAKLQkJcmV0dXJuKCBzZXQgKTsKLQl9CisgICAgICAgIHJldHVybiggUVVPVEVfQ0hBUiArIG8udG9TdHJpbmcoKSArIFFVT1RFX0NIQVIgKTsKKyAgICB9CisKKyAgICAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcKKyAgICB0b1N0cmluZyggZmluYWwgT2JqZWN0IG8gKQorICAgIHsKKyAgICAgICAgU3RyaW5nICAgIHJlc3VsdCAgICA9IG51bGw7CisKKyAgICAgICAgaWYgKCBvID09IG51bGwgKQorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgICAgPSAibnVsbCI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIG8gaW5zdGFuY2VvZiBPYmplY3RbXSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCAgICA9ICJbIiArIGFycmF5VG9TdHJpbmcoIChPYmplY3RbXSlvLCBudWxsLCAiLCAiICkgKyAiXSI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIG8gaW5zdGFuY2VvZiBOb3RpZmljYXRpb24gKQorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgICAgPSB0b1N0cmluZyggKE5vdGlmaWNhdGlvbilvICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIG8gaW5zdGFuY2VvZiBBdHRyaWJ1dGUgKQorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgICAgPSB0b1N0cmluZyggKEF0dHJpYnV0ZSlvICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIG8gaW5zdGFuY2VvZiBNYXAgKQorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgICAgPSB0b1N0cmluZyggKE1hcClvICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgICAgPSBvLnRvU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKCByZXN1bHQgKTsKKyAgICB9CisKKworICAgICAgICBwdWJsaWMgc3RhdGljIFN0cmluZworICAgIHRvU3RyaW5nKCBmaW5hbCBBdHRyaWJ1dGUgYSApCisgICAgeworICAgICAgICByZXR1cm4gYS5nZXROYW1lKCkgKyAiPSIgKyB0b1N0cmluZyggYS5nZXRWYWx1ZSgpICk7CisgICAgfQorCisgICAgICAgIHByaXZhdGUgc3RhdGljIHZvaWQKKyAgICBhcHBlbmQoIGZpbmFsIFN0cmluZ0J1ZmZlciBiLCBmaW5hbCBPYmplY3QgbykKKyAgICB7CisgICAgICAgIGlmICggYiAhPSBudWxsICYmIGIubGVuZ3RoKCkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGIuYXBwZW5kKCAiLCAiICk7CisgICAgICAgIH0KKworICAgICAgICBiLmFwcGVuZCggby50b1N0cmluZygpICk7CisgICAgfQorCisgICAgICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nCisgICAgdG9TdHJpbmcoIGZpbmFsIE5vdGlmaWNhdGlvbiBub3RpZiApCisgICAgeworICAgICAgICBmaW5hbCBTdHJpbmdCdWZmZXIgICAgYiAgICA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKworICAgICAgICBhcHBlbmQoIGIsICIjIiArIG5vdGlmLmdldFNlcXVlbmNlTnVtYmVyKCkgKTsKKyAgICAgICAgYXBwZW5kKCBiLCBuZXcgamF2YS51dGlsLkRhdGUoIG5vdGlmLmdldFRpbWVTdGFtcCgpICkgKTsKKyAgICAgICAgYXBwZW5kKCBiLCBTYW1wbGVVdGlsLnF1b3RlKCBub3RpZi5nZXRTb3VyY2UoKSApICk7CisgICAgICAgIGFwcGVuZCggYiwgbm90aWYuZ2V0VHlwZSgpICk7CisKKyAgICAgICAgYXBwZW5kKCBiLCAiVXNlckRhdGEgPSAiICsgdG9TdHJpbmcoIG5vdGlmLmdldFVzZXJEYXRhKCkgKSApOworCisgICAgICAgIGlmICggbm90aWYgaW5zdGFuY2VvZiBNQmVhblNlcnZlck5vdGlmaWNhdGlvbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIHJlYWxseSBiZSBkb25lIGluIGEgTUJlYW5TZXJ2ZXJOb3RpZmljYXRpb25TdHJpbmdpZmllciEKKyAgICAgICAgICAgIGZpbmFsIE1CZWFuU2VydmVyTm90aWZpY2F0aW9uICAgIG4gICAgPSAoTUJlYW5TZXJ2ZXJOb3RpZmljYXRpb24pbm90aWY7CisKKyAgICAgICAgICAgIGFwcGVuZCggYiwgU2FtcGxlVXRpbC5xdW90ZSggbi5nZXRNQmVhbk5hbWUoKSApICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIG5vdGlmIGluc3RhbmNlb2YgQXR0cmlidXRlQ2hhbmdlTm90aWZpY2F0aW9uICkKKyAgICAgICAgeworICAgICAgICAgICAgZmluYWwgQXR0cmlidXRlQ2hhbmdlTm90aWZpY2F0aW9uICAgIGEgICAgPSAoQXR0cmlidXRlQ2hhbmdlTm90aWZpY2F0aW9uKW5vdGlmOworICAgICAgICAgICAgYXBwZW5kKCBiLCBxdW90ZSggYS5nZXRBdHRyaWJ1dGVOYW1lKCkgKSArCisgICAgICAgICAgICAgICAgIiwgT2xkVmFsdWUgPSAiICsgcXVvdGUoIHRvU3RyaW5nKCBhLmdldE9sZFZhbHVlKCkgKSkgKworICAgICAgICAgICAgICAgICIsIE5ld1ZhbHVlID0gIiArIHF1b3RlKCB0b1N0cmluZyggYS5nZXROZXdWYWx1ZSgpICkpICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4oIGIudG9TdHJpbmcoKSApOworICAgIH0KKworCisKKyAgICAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcKKyAgICBhcnJheVRvU3RyaW5nKAorICAgICAgICBmaW5hbCBPYmplY3RbXSBhLAorICAgICAgICBmaW5hbCBTdHJpbmcgcHJlZml4LAorICAgICAgICBmaW5hbCBTdHJpbmcgc3VmZml4ICkKKyAgICB7CisgICAgICAgIGZpbmFsIFN0cmluZ0J1ZmZlciAgICBidWYgICAgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisKKyAgICAgICAgZm9yKCBpbnQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCBwcmVmaXggIT0gbnVsbCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnVmLmFwcGVuZCggcHJlZml4ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIHRvU3RyaW5nKCBhWyBpIF0gKSApOworCisgICAgICAgICAgICBpZiAoIHN1ZmZpeCAhPSBudWxsICYmIGkgPCBhLmxlbmd0aCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnVmLmFwcGVuZCggc3VmZml4ICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4oIGJ1Zi50b1N0cmluZygpICk7CisgICAgfQorCisKKyAgICAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcKKyAgICB0b1N0cmluZyggZmluYWwgTWFwIG0gKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBtYXBUb1N0cmluZyggbSwgIlxuIiApICk7CisgICAgfQorCisgICAgICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nCisgICAgbWFwVG9TdHJpbmcoIGZpbmFsIE1hcCBtLCBmaW5hbCBTdHJpbmcgc2VwYXJhdG9yICkKKyAgICB7CisgICAgICAgIGlmICggbSA9PSBudWxsICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuKCAibnVsbCIgKTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIFN0cmluZ0J1ZmZlciAgICBidWYgICAgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisKKyAgICAgICAgZmluYWwgSXRlcmF0b3IgICAgaXRlciAgICA9IG0ua2V5U2V0KCkuaXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUgKCBpdGVyLmhhc05leHQoKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpbmFsIE9iamVjdCAgICBrZXkgICAgICAgID0gaXRlci5uZXh0KCk7CisgICAgICAgICAgICBmaW5hbCBPYmplY3QgICAgdmFsdWUgICAgPSBtLmdldCgga2V5ICk7CisKKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIGtleSArICI9IiArIFNhbXBsZVV0aWwudG9TdHJpbmcoIHZhbHVlICkgKyBzZXBhcmF0b3IgKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGJ1Zi5sZW5ndGgoKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gc3RyaXAgdHJhaWxpbmcgc2VwYXJhdG9yCisgICAgICAgICAgICBidWYuc2V0TGVuZ3RoKCBidWYubGVuZ3RoKCkgLSBzZXBhcmF0b3IubGVuZ3RoKCkgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiggYnVmLnRvU3RyaW5nKCkgKTsKKyAgICB9CisKKworICAgICAgICAvKioKKyAgICAgICAgR2V0IHRoZSBjaGFpbiBvZiBleGNlcHRpb25zIHZpYSBnZXRDYXVzZSgpLiBUaGUgZmlyc3QgZWxlbWVudCBpcyB0aGUKKyAgICAgICAgRXhjZXB0aW9uIHBhc3NlZC4KKworICAgICAgICBAcGFyYW0gc3RhcnQgICAgdGhlIEV4Y2VwdGlvbiB0byB0cmF2ZXJzZQorICAgICAgICBAcmV0dXJuICAgICAgICBhIFRocm93YWJsZVtdIG9yIGFuIEV4Y2VwdGlvbltdIGFzIGFwcHJvcHJpYXRlCisgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgVGhyb3dhYmxlW10KKyAgICBnZXRDYXVzZXMoIGZpbmFsIFRocm93YWJsZSBzdGFydCApCisgICAgeworICAgICAgICBmaW5hbCBMaXN0ICAgIGxpc3QgICAgPSBuZXcgQXJyYXlMaXN0KCk7CisKKyAgICAgICAgYm9vbGVhbiAgICBoYXZlTm9uRXhjZXB0aW9uICAgID0gZmFsc2U7CisKKyAgICAgICAgVGhyb3dhYmxlIHQgICAgPSBzdGFydDsKKyAgICAgICAgd2hpbGUgKCB0ICE9IG51bGwgKQorICAgICAgICB7CisgICAgICAgICAgICBsaXN0LmFkZCggdCApOworCisgICAgICAgICAgICBpZiAoICEgKCB0IGluc3RhbmNlb2YgRXhjZXB0aW9uICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGhhdmVOb25FeGNlcHRpb24gICAgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgdGVtcCAgICA9IHQuZ2V0Q2F1c2UoKTsKKyAgICAgICAgICAgIGlmICggdGVtcCA9PSBudWxsICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHQgICAgPSB0ZW1wOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgVGhyb3dhYmxlW10gICAgcmVzdWx0cyAgICA9IGhhdmVOb25FeGNlcHRpb24gPworICAgICAgICAgICAgbmV3IFRocm93YWJsZVsgbGlzdC5zaXplKCkgXSA6IG5ldyBFeGNlcHRpb25bIGxpc3Quc2l6ZSgpIF07CisKKyAgICAgICAgbGlzdC50b0FycmF5KCByZXN1bHRzICk7CisKKyAgICAgICAgcmV0dXJuKCByZXN1bHRzICk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgICAgR2V0IHRoZSBvcmlnaW5hbCB0cm91YmxlbWFrZXIuCisKKyAgICAgICAgQHBhcmFtIGUgICAgdGhlIEV4Y2VwdGlvbiB0byBkaWcgaW50bworICAgICAgICBAcmV0dXJuICAgICAgICB0aGUgb3JpZ2luYWwgVGhyb3dhYmxlIHRoYXQgc3RhcnRlZCB0aGUgcHJvYmxlbQorICAgICAqLyAgICBwdWJsaWMgc3RhdGljIFRocm93YWJsZQorICAgIGdldFJvb3RDYXVzZSggZmluYWwgVGhyb3dhYmxlIGUgKQorICAgIHsKKyAgICAgICAgZmluYWwgVGhyb3dhYmxlW10gICAgY2F1c2VzICAgID0gZ2V0Q2F1c2VzKCBlICk7CisKKyAgICAgICAgcmV0dXJuKCBjYXVzZXNbIGNhdXNlcy5sZW5ndGggLSAxIF0gKTsKKyAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgIENyZWF0ZSBhIG5ldyBTZXQgY29udGFpbmluZyBhbGwgYXJyYXkgZWxlbWVudHMuCisgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgU2V0CisgICAgbmV3U2V0KCBmaW5hbCBPYmplY3QgW10gIG9iamVjdHMgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBuZXdTZXQoIG9iamVjdHMsIDAsIG9iamVjdHMubGVuZ3RoICkgKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAgICBDcmVhdGUgYSBuZXcgU2V0IGNvbnRhaW5pbmcgYWxsIGFycmF5IGVsZW1lbnRzLgorICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIFNldAorICAgIG5ld1NldCgKKyAgICAgICAgZmluYWwgT2JqZWN0IFtdICBvYmplY3RzLAorICAgICAgICBmaW5hbCBpbnQgICAgICAgIHN0YXJ0SW5kZXgsCisgICAgICAgIGZpbmFsIGludCAgICAgICAgbnVtSXRlbXMgKQorICAgIHsKKyAgICAgICAgZmluYWwgU2V0ICAgIHNldCAgICA9IG5ldyBIYXNoU2V0KCk7CisKKyAgICAgICAgZm9yKCBpbnQgaSA9IDA7IGkgPCBudW1JdGVtczsgKytpICkKKyAgICAgICAgeworICAgICAgICAgICAgc2V0LmFkZCggb2JqZWN0c1sgc3RhcnRJbmRleCArIGkgXSApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuKCBzZXQgKTsKKyAgICB9CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbWJlYW5hcGkvc2FtcGxlcy9zYW1wbGVzL2FteC9TYW1wbGVzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL3NhbXBsZXMvYW14L1NhbXBsZXMuamF2YQppbmRleCBhOThjNjY3Li4zNWU4NzU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL3NhbXBsZXMvYW14L1NhbXBsZXMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9tYmVhbmFwaS9zYW1wbGVzL3NhbXBsZXMvYW14L1NhbXBsZXMuamF2YQpAQCAtNzIsOTE4ICs3Miw5MTggQEAKIAogCiAvKioKLQlNYWluIGNsYXNzIGRlbW9uc3RyYXRpbmcgYSB2YXJpZXR5IG9mIE1CZWFuIEFQSSAoQU1YKSB1c2FnZXMuCisgICAgTWFpbiBjbGFzcyBkZW1vbnN0cmF0aW5nIGEgdmFyaWV0eSBvZiBNQmVhbiBBUEkgKEFNWCkgdXNhZ2VzLgogICovCiBwdWJsaWMgZmluYWwgY2xhc3MgU2FtcGxlcwogewotCXByaXZhdGUgZmluYWwgRG9tYWluUm9vdAkJCQltRG9tYWluUm9vdDsKKyAgICBwcml2YXRlIGZpbmFsIERvbWFpblJvb3QgICAgICAgICAgICAgICAgbURvbWFpblJvb3Q7CiAKLQkJcHVibGljCi0JU2FtcGxlcyggZmluYWwgRG9tYWluUm9vdAlkb21haW5Sb290ICkKLQl7Ci0JCW1Eb21haW5Sb290CT0gZG9tYWluUm9vdDsKLQl9Ci0JCisgICAgICAgIHB1YmxpYworICAgIFNhbXBsZXMoIGZpbmFsIERvbWFpblJvb3QgICAgZG9tYWluUm9vdCApCisgICAgeworICAgICAgICBtRG9tYWluUm9vdCAgICA9IGRvbWFpblJvb3Q7CisgICAgfQogCiAKLQkJcHVibGljIGZpbmFsIERvbWFpblJvb3QKLQlnZXREb21haW5Sb290KCkKLQl7Ci0JCXJldHVybiggbURvbWFpblJvb3QgKTsKLQl9Ci0JCi0JCXB1YmxpYyBEb21haW5Db25maWcKLQlnZXREb21haW5Db25maWcoKQotCXsKLQkJcmV0dXJuKCBnZXREb21haW5Sb290KCkuZ2V0RG9tYWluQ29uZmlnKCkgKTsKLQl9Ci0JCi0JCXB1YmxpYyBRdWVyeU1ncgotCWdldFF1ZXJ5TWdyKCkKLQl7Ci0JCXJldHVybiggZ2V0RG9tYWluUm9vdCgpLmdldFF1ZXJ5TWdyKCkgKTsKLQl9Ci0JCi0JLyoqCi0JCVByaW50IGEgbWVzc2FnZS4KLQkgKi8KLQkJcHVibGljIHZvaWQKLQlwcmludGxuKCBPYmplY3QgbyApCi0JewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIHRvU3RyaW5nKCBvICkgKTsKLQl9Ci0JCi0JLyoqCi0JCVR1cm4gYW4gb2JqZWN0IGludG8gYSB1c2VmdWwgU3RyaW5nCi0JICovCi0JCXB1YmxpYyBTdHJpbmcKLQl0b1N0cmluZyggT2JqZWN0IG8gKQotCXsKLQkJcmV0dXJuKCBTYW1wbGVVdGlsLnRvU3RyaW5nKCBvICkgKTsKLQl9Ci0JCi0JLyoqCi0JCURpc3BsYXkgYSBNYXAgdG8gU3lzdGVtLm91dC4KLQkgKi8KLQkJcHJpdmF0ZSB2b2lkCi0JZGlzcGxheU1hcCgKLQkJZmluYWwgU3RyaW5nCW1zZywKLQkJZmluYWwgTWFwIAkJbSkKLQl7Ci0JCXByaW50bG4oIG1zZyArICI6ICIgKyB0b1N0cmluZyggbS5rZXlTZXQoKSApICk7Ci0JfQogCi0JLyoqCi0JCURlbW9uc3RyYXRlcyBob3cgdG8gYWNjZXNzIHZhcmlvdXMgdHlwZXMgb2YgIHtAbGluayBBTVh9IGJ5IG9idGFpbmluZyBhIE1hcCBhbmQgdGhlbiBkaXNwbGF5aW5nIGl0LgotCSAqLwotCQlwdWJsaWMgdm9pZAotCWhhbmRsZUxpc3QoKQotCXsKLQkJZmluYWwgRG9tYWluQ29uZmlnCWRjcAk9IGdldERvbWFpbkNvbmZpZygpOwotCQkKLQkJLy8gVG9wLWxldmVsIGl0ZW1zCi0JCXByaW50bG4oICJcbi0tLSBUb3AtbGV2ZWwgLS0tIFxuIiApOwotCQkKLQkJZGlzcGxheU1hcCggIkNvbmZpZ0NvbmZpZyIsIGRjcC5nZXRDb25maWdDb25maWdNYXAoKSApOwotCQkKLQkJZGlzcGxheU1hcCggIlNlcnZlckNvbmZpZyIsIGRjcC5nZXRTZXJ2ZXJDb25maWdNYXAoKSApOwotCQkKLQkJZGlzcGxheU1hcCggIlN0YW5kYWxvbmVTZXJ2ZXJDb25maWciLCBkY3AuZ2V0U3RhbmRhbG9uZVNlcnZlckNvbmZpZ01hcCgpICk7Ci0JCQotCQlkaXNwbGF5TWFwKCAiQ2x1c3RlcmVkU2VydmVyQ29uZmlnIiwgZGNwLmdldENsdXN0ZXJlZFNlcnZlckNvbmZpZ01hcCgpICk7Ci0JCQotCQlkaXNwbGF5TWFwKCAiQ2x1c3RlckNvbmZpZyIsIGRjcC5nZXRDbHVzdGVyQ29uZmlnTWFwKCkgKTsKLQkJCi0JCQotCQkvLyBkZXBsb3llZCBpdGVtcwotCQlwcmludGxuKCAiXG4tLS0gRGVwbG95ZWRJdGVtcyAtLS0gXG4iICk7Ci0JCWRpc3BsYXlNYXAoICJKMkVFQXBwbGljYXRpb25Db25maWciLCBkY3AuZ2V0SjJFRUFwcGxpY2F0aW9uQ29uZmlnTWFwKCkgKTsKLQkJZGlzcGxheU1hcCggIkVKQk1vZHVsZUNvbmZpZyIsIGRjcC5nZXRFSkJNb2R1bGVDb25maWdNYXAoKSApOwotCQlkaXNwbGF5TWFwKCAiV2ViTW9kdWxlQ29uZmlnIiwgZGNwLmdldFdlYk1vZHVsZUNvbmZpZ01hcCgpICk7Ci0JCWRpc3BsYXlNYXAoICJSQVJNb2R1bGVDb25maWciLCBkY3AuZ2V0UkFSTW9kdWxlQ29uZmlnTWFwKCkgKTsKLQkJZGlzcGxheU1hcCggIkFwcENsaWVudE1vZHVsZUNvbmZpZyIsIGRjcC5nZXRBcHBDbGllbnRNb2R1bGVDb25maWdNYXAoKSApOwotCQlkaXNwbGF5TWFwKCAiTGlmZWN5Y2xlTW9kdWxlQ29uZmlnIiwgZGNwLmdldExpZmVjeWNsZU1vZHVsZUNvbmZpZ01hcCgpICk7Ci0JCQotCQkKLQkJLy8gcmVzb3VyY2VzCi0JCXByaW50bG4oICJcbi0tLSBSZXNvdXJjZXMgLS0tIFxuIiApOwotCQkKLQkJZGlzcGxheU1hcCggIkN1c3RvbVJlc291cmNlQ29uZmlnIiwgZGNwLmdldEN1c3RvbVJlc291cmNlQ29uZmlnTWFwKCkgKTsKLQkJZGlzcGxheU1hcCggIlBlcnNpc3RlbmNlTWFuYWdlckZhY3RvcnlSZXNvdXJjZUNvbmZpZyIsCi0JCQlkY3AuZ2V0UGVyc2lzdGVuY2VNYW5hZ2VyRmFjdG9yeVJlc291cmNlQ29uZmlnTWFwKCkgKTsKLQkJZGlzcGxheU1hcCggIkpORElSZXNvdXJjZUNvbmZpZyIsIGRjcC5nZXRKTkRJUmVzb3VyY2VDb25maWdNYXAoKSApOwotCQlkaXNwbGF5TWFwKCAiSk1TUmVzb3VyY2VDb25maWciLCBkY3AuZ2V0Sk1TUmVzb3VyY2VDb25maWdNYXAoKSApOwotCQlkaXNwbGF5TWFwKCAiSkRCQ1Jlc291cmNlQ29uZmlnIiwgZGNwLmdldEpEQkNSZXNvdXJjZUNvbmZpZ01hcCgpICk7Ci0JCWRpc3BsYXlNYXAoICJDb25uZWN0b3JSZXNvdXJjZUNvbmZpZyIsIGRjcC5nZXRDb25uZWN0b3JSZXNvdXJjZUNvbmZpZ01hcCgpICk7Ci0JCWRpc3BsYXlNYXAoICJKREJDQ29ubmVjdGlvblBvb2xDb25maWciLCBkY3AuZ2V0SkRCQ0Nvbm5lY3Rpb25Qb29sQ29uZmlnTWFwKCkgKTsKLQkJZGlzcGxheU1hcCggIlBlcnNpc3RlbmNlTWFuYWdlckZhY3RvcnlSZXNvdXJjZUNvbmZpZyIsCi0JCQlkY3AuZ2V0UGVyc2lzdGVuY2VNYW5hZ2VyRmFjdG9yeVJlc291cmNlQ29uZmlnTWFwKCkgKTsKLQkJZGlzcGxheU1hcCggIkNvbm5lY3RvckNvbm5lY3Rpb25Qb29sQ29uZmlnIiwKLQkJCWRjcC5nZXRDb25uZWN0b3JDb25uZWN0aW9uUG9vbENvbmZpZ01hcCgpICk7Ci0JCWRpc3BsYXlNYXAoICJBZG1pbk9iamVjdFJlc291cmNlQ29uZmlnIiwgZGNwLmdldEFkbWluT2JqZWN0UmVzb3VyY2VDb25maWdNYXAoKSApOwotCQlkaXNwbGF5TWFwKCAiUmVzb3VyY2VBZGFwdGVyQ29uZmlnIiwgZGNwLmdldFJlc291cmNlQWRhcHRlckNvbmZpZ01hcCgpICk7Ci0JCWRpc3BsYXlNYXAoICJNYWlsUmVzb3VyY2VDb25maWciLCBkY3AuZ2V0TWFpbFJlc291cmNlQ29uZmlnTWFwKCkgKTsKLQkJCi0JCQotCQkvLyBnZXQgYSBDb25maWdDb25maWcKLQkJZmluYWwgQ29uZmlnQ29uZmlnCWNvbmZpZwk9Ci0JCQkoQ29uZmlnQ29uZmlnKWRjcC5nZXRDb25maWdDb25maWdNYXAoKS5nZXQoICJzZXJ2ZXItY29uZmlnIiApOwotCQkJCisgICAgICAgIHB1YmxpYyBmaW5hbCBEb21haW5Sb290CisgICAgZ2V0RG9tYWluUm9vdCgpCisgICAgeworICAgICAgICByZXR1cm4oIG1Eb21haW5Sb290ICk7CisgICAgfQogCi0JCS8vIEhUVFBTZXJ2aWNlCi0JCXByaW50bG4oICJcbi0tLSBIVFRQU2VydmljZSAtLS0gXG4iICk7Ci0JCQotCQlmaW5hbCBIVFRQU2VydmljZUNvbmZpZyBodHRwU2VydmljZSA9IGNvbmZpZy5nZXRIVFRQU2VydmljZUNvbmZpZygpOwotCQlkaXNwbGF5TWFwKCAiSFRUUExpc3RlbmVycyIsIGh0dHBTZXJ2aWNlLmdldEhUVFBMaXN0ZW5lckNvbmZpZ01hcCgpICk7Ci0JCWRpc3BsYXlNYXAoICJWaXJ0dWFsU2VydmVycyIsIGh0dHBTZXJ2aWNlLmdldFZpcnR1YWxTZXJ2ZXJDb25maWdNYXAoKSApOwotCX0KLQkKLQkvKioKLQkJUmV0dXJuIGEgU2V0IG9mIHtAbGluayBBTVh9IHdob3NlIE9iamVjdE5hbWUgaGFzIHRoZSBwcm9wZXJ0eQotCQkgPGk+cHJvcGVydHktbmFtZTwvaT49PGk+cHJvcGVydHktdmFsdWU8L2k+LgotCQkKLQkJQHBhcmFtIHByb3BlcnR5TmFtZQotCQlAcGFyYW0gcHJvcGVydHlWYWx1ZQotCQlAcmV0dXJuIFNldCBvZiB7QGxpbmsgQU1YfQotCSovCi0JCXB1YmxpYyBTZXQKLQlxdWVyeVdpbGQoCi0JCWZpbmFsIFN0cmluZyBwcm9wZXJ0eU5hbWUsCi0JCWZpbmFsIFN0cmluZyBwcm9wZXJ0eVZhbHVlKQotCXsKLQkJZmluYWwgU3RyaW5nW10JcHJvcE5hbWVzCT0gbmV3IFN0cmluZ1tdIHsgcHJvcGVydHlOYW1lIH07Ci0JCWZpbmFsIFN0cmluZ1tdCXByb3BWYWx1ZXMJPSBuZXcgU3RyaW5nW117IHByb3BlcnR5VmFsdWUgfTsKLQkJCi0JCWZpbmFsIFNldAlhbXhzCT0gZ2V0UXVlcnlNZ3IoKS5xdWVyeVdpbGRTZXQoIHByb3BOYW1lcywgcHJvcFZhbHVlcyApOwotCQkKLQkJcmV0dXJuKCBhbXhzICk7Ci0JfQotCQotCS8qKgotCQlDYWxsIHF1ZXJ5V2lsZCggcHJvcGVydHlOYW1lLCBwcm9wZXJ0eVZhbHVlICkgYW5kIGRpc3BsYXkgdGhlIHJlc3VsdC4KLQkJCi0JCUBwYXJhbSBwcm9wZXJ0eU5hbWUKLQkJQHBhcmFtIHByb3BlcnR5VmFsdWUKLQkqLwotCQlwdWJsaWMgdm9pZAotCWRpc3BsYXlXaWxkKAotCQlmaW5hbCBTdHJpbmcgcHJvcGVydHlOYW1lLAotCQlmaW5hbCBTdHJpbmcgcHJvcGVydHlWYWx1ZSkKLQl7Ci0JCWZpbmFsIFNldAlpdGVtcwk9IHF1ZXJ5V2lsZCggcHJvcGVydHlOYW1lLCBwcm9wZXJ0eVZhbHVlICk7Ci0JCQotCQlwcmludGxuKCAiXG4tLS0gUXVlcmllZCBmb3IgIiArIHByb3BlcnR5TmFtZSArICI9IiArIHByb3BlcnR5VmFsdWUgKyAiIC0tLSIgKTsKLQkJZmluYWwgSXRlcmF0b3IJaXRlcgk9IGl0ZW1zLml0ZXJhdG9yKCk7Ci0JCXdoaWxlICggaXRlci5oYXNOZXh0KCkgKQotCQl7Ci0JCQlmaW5hbCBBTVgJaXRlbQk9IChBTVgpaXRlci5uZXh0KCk7Ci0JCQkKLQkJCXByaW50bG4oICJqMmVlVHlwZT0iICsgaXRlbS5nZXRKMkVFVHlwZSgpICsgIiwiICsgIm5hbWU9IiArIGl0ZW0uZ2V0TmFtZSgpICk7Ci0JCX0KLQl9Ci0JCi0JCXB1YmxpYyBTZXQKLQlxdWVyeUZvckoyRUVUeXBlKCBmaW5hbCBTdHJpbmcgajJlZVR5cGUgKQotCXsKLQkJZmluYWwgU3RyaW5nCXByb3AJPSBVdGlsLm1ha2VKMkVFVHlwZVByb3AoIGoyZWVUeXBlICk7Ci0JCWZpbmFsIFNldAkJaXRlbXMJPSBnZXRRdWVyeU1ncigpLnF1ZXJ5UHJvcHNTZXQoIHByb3AgKTsKLQkJCi0JCXJldHVybiggaXRlbXMgKTsKLQl9Ci0JCi0JCXB1YmxpYyB2b2lkCi0JZGlzcGxheUF2YWlsYWJsZUNoaWxkVHlwZXMoIGZpbmFsIFN0cmluZyBqMmVlVHlwZSApCi0JewotCQlmaW5hbCBEb21haW5Sb290CQlkb21haW5Sb290CT0gZ2V0RG9tYWluUm9vdCgpOwotCQkKLQl9Ci0JCi0JCXByaXZhdGUgU3RyaW5nCi0JZ2V0SW5kZW50KCBmaW5hbCBpbnQgbnVtICkKLQl7Ci0JCWZpbmFsIGNoYXJbXQlpbmRlbnQJPSBuZXcgY2hhclsgbnVtIF07Ci0JCWZvciggaW50IGkgPSAwOyBpIDwgbnVtOyArK2kgKQotCQl7Ci0JCQlpbmRlbnRbIGkgXQk9ICcgJzsKLQkJfQotCQlyZXR1cm4oIG5ldyBTdHJpbmcoIGluZGVudCApICk7Ci0JfQotCQotCS8qKgotCQlEaXNwbGF5IHRoZSBqMmVlVHlwZSBhbmQgbmFtZSAoaWYgbm90IHtAbGluayBBTVgjTk9fTkFNRX0pCi0JICovCi0JCXByaXZhdGUgdm9pZAotCWRpc3BsYXlBTVgoCi0JCWZpbmFsIEFNWCBhbXgsCi0JCWZpbmFsIGludAlpbmRlbnRDb3VudCApCi0JewotCQlmaW5hbCBTdHJpbmcgaW5kZW50CT0gZ2V0SW5kZW50KCBpbmRlbnRDb3VudCApOwotCQkKLQkJZmluYWwgU3RyaW5nCWoyZWVUeXBlCT0gYW14LmdldEoyRUVUeXBlKCk7Ci0JCWZpbmFsIFN0cmluZwluYW1lCQk9IGFteC5nZXROYW1lKCk7Ci0JCWlmICggbmFtZS5lcXVhbHMoIEFNWC5OT19OQU1FICkgKQotCQl7Ci0JCQlwcmludGxuKCBpbmRlbnQgKyBqMmVlVHlwZSApOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcHJpbnRsbiggaW5kZW50ICsgajJlZVR5cGUgKyAiPSIgKyBuYW1lICk7Ci0JCX0KLQl9Ci0JCi0JCXByaXZhdGUgdm9pZAotCWRpc3BsYXlIaWVyYXJjaHkoCi0JCWZpbmFsIENvbGxlY3Rpb24JYW14U2V0LAotCQlmaW5hbCBpbnQJCQlpbmRlbnRDb3VudCApCi0JewotCQlmaW5hbCBJdGVyYXRvcglpdGVyCT0gYW14U2V0Lml0ZXJhdG9yKCk7Ci0JCXdoaWxlICggaXRlci5oYXNOZXh0KCkgKQotCQl7Ci0JCQlmaW5hbCBBTVgJYW14CT0gKEFNWClpdGVyLm5leHQoKTsKLQkJCWRpc3BsYXlIaWVyYXJjaHkoIGFteCwgaW5kZW50Q291bnQgKTsKLQkJfQotCX0KLQkKLQkvKioKLQkJRGlzcGxheSB0aGUgaGllcmFyY2h5IG9mIHtAbGluayBBTVh9IGJlZ2lubmluZyB3aXRoIHRoZSBzcGVjaWZpZWQgb25lCi0JICovCi0JCXB1YmxpYyB2b2lkCi0JZGlzcGxheUhpZXJhcmNoeSgKLQkJZmluYWwgQU1YIGFteCwKLQkJZmluYWwgaW50CWluZGVudENvdW50ICkKLQl7Ci0JCWRpc3BsYXlBTVgoIGFteCwgaW5kZW50Q291bnQgKTsKLQkJCi0JCWlmICggYW14IGluc3RhbmNlb2YgQ29udGFpbmVyICkKLQkJewotCQkJLy8gZ2V0IE1hcHMgb2YgYWxsIGNvbnRhaW5lZCBpdGVtcwotCQkJZmluYWwgTWFwCW0JPSAoKENvbnRhaW5lcilhbXgpLmdldE11bHRpQ29udGFpbmVlTWFwKCBudWxsICk7CisgICAgICAgIHB1YmxpYyBEb21haW5Db25maWcKKyAgICBnZXREb21haW5Db25maWcoKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBnZXREb21haW5Sb290KCkuZ2V0RG9tYWluQ29uZmlnKCkgKTsKKyAgICB9CiAKLQkJCS8vIGZvciBjbGFyaXR5IG9mIGRpc3BsYXksIHNlcGFyYXRlIG91dCB0aG9zZSB0aGF0IGFyZSBDb250YWluZXJzLAotCQkJLy8gYW5kIHRob3NlIHRoYXQgYXJlIG5vdC4KLQkJCWZpbmFsIFNldAlkZWZlcnJlZAk9IG5ldyBIYXNoU2V0KCk7Ci0JCQlmaW5hbCBJdGVyYXRvcgltYXBzSXRlcgk9IG0udmFsdWVzKCkuaXRlcmF0b3IoKTsKLQkJCXdoaWxlICggbWFwc0l0ZXIuaGFzTmV4dCgpICkKLQkJCXsKLQkJCQlmaW5hbCBNYXAJaW5zdGFuY2VzTWFwCT0gKE1hcCltYXBzSXRlci5uZXh0KCk7Ci0JCQkJZmluYWwgQU1YCWZpcnN0CT0gKEFNWClpbnN0YW5jZXNNYXAudmFsdWVzKCkuaXRlcmF0b3IoKS5uZXh0KCk7Ci0JCQkJaWYgKCBmaXJzdCBpbnN0YW5jZW9mIENvbnRhaW5lciApCi0JCQkJewotCQkJCQlkZWZlcnJlZC5hZGQoIGluc3RhbmNlc01hcCApOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQlkaXNwbGF5SGllcmFyY2h5KCBpbnN0YW5jZXNNYXAudmFsdWVzKCksIGluZGVudENvdW50ICsgMik7Ci0JCQkJfQotCQkJfQotCQkJCi0JCQkvLyBkaXNwbGF5IGRlZmVycmVkIGl0ZW1zCi0JCQlmaW5hbCBJdGVyYXRvcglpdGVyCT0gZGVmZXJyZWQuaXRlcmF0b3IoKTsKLQkJCXdoaWxlICggaXRlci5oYXNOZXh0KCkgKQotCQkJewotCQkJCWZpbmFsIE1hcAlpbnN0YW5jZXNNYXAJPSAoTWFwKWl0ZXIubmV4dCgpOwotCQkJCWRpc3BsYXlIaWVyYXJjaHkoIGluc3RhbmNlc01hcC52YWx1ZXMoKSwgaW5kZW50Q291bnQgKyAyKTsKLQkJCX0KLQkJfQotCQkKLQl9Ci0JCi0JLyoqCi0JCURpc3BsYXkgdGhlIGVudGlyZSBNQmVhbiBoaWVyYXJjaHkuCi0JICovCi0JCXB1YmxpYyB2b2lkCi0JZGlzcGxheUhpZXJhcmNoeSgpCi0JewotCQlkaXNwbGF5SGllcmFyY2h5KCBnZXREb21haW5Sb290KCksIDApOwotCX0KLQkKLQkvKioKLQkJRGlzcGxheSB0aGUgTUJlYW4gaGllcmFyY2h5IGJlZ2lubmluZyB3aXRoIGoyZWVUeXBlLgotCSAqLwotCQlwdWJsaWMgdm9pZAotCWRpc3BsYXlIaWVyYXJjaHkoIGZpbmFsIFN0cmluZyBqMmVlVHlwZSApCi0JewotCQlmaW5hbCBTZXQJaXRlbXMJPSBnZXRRdWVyeU1ncigpLnF1ZXJ5SjJFRVR5cGVTZXQoIGoyZWVUeXBlICk7Ci0JCQotCQlpZiAoIGl0ZW1zLnNpemUoKSA9PSAwICkKLQkJewotCQkJcHJpbnRsbiggIk5vIHtAbGluayBBTVh9IG9mIGoyZWVUeXBlICIgKyBTYW1wbGVVdGlsLnF1b3RlKCBqMmVlVHlwZSApICsgIiBmb3VuZCIgKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCWRpc3BsYXlIaWVyYXJjaHkoIGl0ZW1zLCAwKTsKLQkJfQotCX0KLQkKLQkKLQkvKioKLQkJRGlzcGxheSBhbGwgTUJlYW5zIHRoYXQgaGF2ZSBqMmVlVHlwZT08ajJlZVR5cGU+Ci0JICovCi0JCXB1YmxpYyB2b2lkCi0JZGlzcGxheUoyRUVUeXBlKCBmaW5hbCBTdHJpbmcgajJlZVR5cGUgKQotCXsKLQkJZmluYWwgU2V0CQlpdGVtcwk9IHF1ZXJ5Rm9ySjJFRVR5cGUoIGoyZWVUeXBlICk7Ci0JCQotCQlwcmludGxuKCAiXG4tLS0gUXVlcmllZCBmb3IgajJlZVR5cGU9IiArIGoyZWVUeXBlICsgIiAtLS0iICk7Ci0JCQotCQlmaW5hbCBJdGVyYXRvcglpdGVyCT0gaXRlbXMuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKCBpdGVyLmhhc05leHQoKSApCi0JCXsKLQkJCWZpbmFsIEFNWAlpdGVtCT0gKEFNWClpdGVyLm5leHQoKTsKLQkJCQotCQkJLy8gdGhleSBtYXkgb3IgbWF5IG5vdCBoYXZlIHVuaXF1ZSBuYW1lcywgc28gc2hvdyBPYmplY3ROYW1lcwotCQkJcHJpbnRsbiggVXRpbC5nZXRPYmplY3ROYW1lKCBpdGVtICkgKTsKLQkJfQotCQlwcmludGxuKCAiIiApOwotCX0KLQkKLQkKLQkvKioKLQkJRGlzcGxheSBhbGwgQXR0cmlidXRlcyBpbiB0aGUge0BsaW5rIEFNWH0uCi0JICovCi0JCXB1YmxpYyB2b2lkCi0JZGlzcGxheUFsbEF0dHJpYnV0ZXMoIGZpbmFsIEFNWCBpdGVtICkKLQl7Ci0JCXByaW50bG4oICJcbi0tLSBBdHRyaWJ1dGVzIGZvciAiICsgaXRlbS5nZXRKMkVFVHlwZSgpICsgIj0iICsgaXRlbS5nZXROYW1lKCkgKyAiIC0tLSIgKTsKLQkJCi0JCWZpbmFsIEV4dHJhCWV4dHJhCT0gVXRpbC5nZXRFeHRyYSggaXRlbSApOwotCQkKLQkJZmluYWwgTWFwCWF0dHJzCT0gZXh0cmEuZ2V0QWxsQXR0cmlidXRlcygpOwotCQkKLQkJZmluYWwgSXRlcmF0b3IJaXRlcgk9IGF0dHJzLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlICggaXRlci5oYXNOZXh0KCkgKQotCQl7Ci0JCQlmaW5hbCBTdHJpbmcJbmFtZQk9IChTdHJpbmcpaXRlci5uZXh0KCk7Ci0JCQlmaW5hbCBPYmplY3QJdmFsdWUJPSBhdHRycy5nZXQoIG5hbWUgKTsKLQkJCQotCQkJcHJpbnRsbiggbmFtZSArICI9IiArIHRvU3RyaW5nKCB2YWx1ZSApICk7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JCURpc3BsYXkgYWxsIEF0dHJpYnV0ZXMgaW4gdGhlIHtAbGluayBBTVh9LgotCSAqLwotCQlwdWJsaWMgdm9pZAotCWRpc3BsYXlBbGxBdHRyaWJ1dGVzKCBmaW5hbCBTdHJpbmcgajJlZVR5cGUgKQotCXsKLQkJZmluYWwgU2V0CQlpdGVtcwk9IHF1ZXJ5Rm9ySjJFRVR5cGUoIGoyZWVUeXBlICk7Ci0JCQotCQlpZiAoIGl0ZW1zLnNpemUoKSA9PSAwICkKLQkJewotCQkJcHJpbnRsbiggIk5vIHtAbGluayBBTVh9IG9mIGoyZWVUeXBlICIgKyBTYW1wbGVVdGlsLnF1b3RlKCBqMmVlVHlwZSApICsgIiBmb3VuZCIgKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCWZpbmFsIEl0ZXJhdG9yCWl0ZXIJPSBpdGVtcy5pdGVyYXRvcigpOwotCQkJd2hpbGUgKCBpdGVyLmhhc05leHQoKSApCi0JCQl7Ci0JCQkJZmluYWwgQU1YCWFteAk9IChBTVgpaXRlci5uZXh0KCk7Ci0JCQkJCi0JCQkJZGlzcGxheUFsbEF0dHJpYnV0ZXMoIGFteCApOwotCQkJCXByaW50bG4oICIiICk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JCi0JLyoqCi0JCURpc3BsYXkgYWxsIGRvdHRlZCBuYW1lcy4KLQkgKi8KLQkJcHVibGljIHZvaWQKLQlkaXNwbGF5RG90dGVkTmFtZXMoKQotCXsKLQkJZmluYWwgQ29uZmlnRG90dGVkTmFtZXMJY29uZmlnRG90dGVkTmFtZXMJPSBnZXREb21haW5Sb290KCkuZ2V0Q29uZmlnRG90dGVkTmFtZXMoKTsKLQkJQXR0cmlidXRlW10gcmVzdWx0CT0gKEF0dHJpYnV0ZVtdKWNvbmZpZ0RvdHRlZE5hbWVzLmRvdHRlZE5hbWVHZXQoICIqIiApOwotCQlwcmludGxuKCAiLS0tIENvbmZpZ0RvdHRlZE5hbWVzIC0tLSIgKTsKLQkJcHJpbnRsbiggU2FtcGxlVXRpbC5hcnJheVRvU3RyaW5nKCByZXN1bHQsICIiLCAiXG4iICkgKTsKLQkJCi0JCXByaW50bG4oICJcbi0tLSBNb25pdG9yaW5nRG90dGVkTmFtZXMgLS0tIiApOwotCQkKLQkJZmluYWwgTW9uaXRvcmluZ0RvdHRlZE5hbWVzCW1vbkRvdHRlZE5hbWVzCT0gZ2V0RG9tYWluUm9vdCgpLmdldE1vbml0b3JpbmdEb3R0ZWROYW1lcygpOwotCQlyZXN1bHQJPSAoQXR0cmlidXRlW10pbW9uRG90dGVkTmFtZXMuZG90dGVkTmFtZUdldCggIioiICk7Ci0JCXByaW50bG4oIFNhbXBsZVV0aWwuYXJyYXlUb1N0cmluZyggcmVzdWx0LCAiIiwgIlxuIiApICk7Ci0JfQotCQotCQotCS8qKgotCQlEZW1vbnN0cmF0ZSBob3cgdG8gdXNlIHRoZSB7QGxpbmsgY29tLnN1bi5hcHBzZXJ2Lm1hbmFnZW1lbnQuYmFzZS5RdWVyeU1ncn0gZmFjaWxpdGllcy4KLQkgKi8KLQkJcHVibGljIHZvaWQKLQlkZW1vUXVlcnkoKQotCXsKLQkJZGlzcGxheVdpbGQoIEFNWC5KMkVFX1RZUEVfS0VZLCAiWC0qUmVzb3VyY2VDb25maWciICk7Ci0JCWRpc3BsYXlXaWxkKCBBTVguSjJFRV9UWVBFX0tFWSwgIlgtKlNlcnZlckNvbmZpZyIgKTsKLQkJCi0JCWRpc3BsYXlKMkVFVHlwZSggWFR5cGVzLlNTTF9DT05GSUcgKTsKLQkJZGlzcGxheUoyRUVUeXBlKCBYVHlwZXMuQ0xVU1RFUl9DT05GSUcgKTsKLQl9CisgICAgICAgIHB1YmxpYyBRdWVyeU1ncgorICAgIGdldFF1ZXJ5TWdyKCkKKyAgICB7CisgICAgICAgIHJldHVybiggZ2V0RG9tYWluUm9vdCgpLmdldFF1ZXJ5TWdyKCkgKTsKKyAgICB9CiAKLQkKLQkJcHJpdmF0ZSBPYmplY3QKLQl1cGxvYWRBcmNoaXZlKCBmaW5hbCBGaWxlIGFyY2hpdmUgICkKLQkJdGhyb3dzIElPRXhjZXB0aW9uCi0JewotCQlmaW5hbCBGaWxlSW5wdXRTdHJlYW0JaW5wdXQJPSBuZXcgRmlsZUlucHV0U3RyZWFtKCBhcmNoaXZlICk7Ci0JCWZpbmFsIGxvbmcJbGVuZ3RoCT0gaW5wdXQuYXZhaWxhYmxlKCk7Ci0JCWZpbmFsIERlcGxveW1lbnRNZ3IJbWdyCT0gZ2V0RG9tYWluUm9vdCgpLmdldERlcGxveW1lbnRNZ3IoKTsKLQkJZmluYWwgT2JqZWN0CXVwbG9hZElECT0gbWdyLmluaXRpYXRlRmlsZVVwbG9hZCggbGVuZ3RoICk7Ci0JCQkKLQkJdHJ5Ci0JCXsKLQkJCWZpbmFsIGludAljaHVua1NpemUJPSAyNTYgKiAxMDI0OwotCQkJbG9uZyByZW1haW5pbmcJPSBsZW5ndGg7Ci0JCQl3aGlsZSAoIHJlbWFpbmluZyAhPSAwICkKLQkJCXsKLQkJCQlmaW5hbCBpbnQJYWN0dWFsCT0gcmVtYWluaW5nIDwgY2h1bmtTaXplID8gKGludClyZW1haW5pbmcgOiBjaHVua1NpemU7Ci0JCQkJCi0JCQkJZmluYWwgYnl0ZVtdCWJ5dGVzCT0gbmV3IGJ5dGVbIGFjdHVhbCBdOwotCQkJCWZpbmFsIGludAludW0JPSBpbnB1dC5yZWFkKCBieXRlcyApOwotCQkJCWlmICggbnVtICE9IGFjdHVhbCApCi0JCQkJewotCQkJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oKTsKLQkJCQl9CisgICAgLyoqCisgICAgICAgIFByaW50IGEgbWVzc2FnZS4KKyAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQKKyAgICBwcmludGxuKCBPYmplY3QgbyApCisgICAgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIHRvU3RyaW5nKCBvICkgKTsKKyAgICB9CiAKLQkJCQltZ3IudXBsb2FkQnl0ZXMoIHVwbG9hZElELCBieXRlcyApOwotCQkJCXJlbWFpbmluZwktPSBhY3R1YWw7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseQotCQl7Ci0JCQlpbnB1dC5jbG9zZSgpOwotCQl9Ci0JCQotCQlyZXR1cm4oIHVwbG9hZElEICk7Ci0JfQotCQotCQotCQlwcml2YXRlIGZpbmFsIFN0cmluZwotCWdldEFwcE5hbWUoIGZpbmFsIFN0cmluZyBhcmNoaXZlTmFtZSApCi0JewotCQlTdHJpbmcJcmVzdWx0CT0gYXJjaGl2ZU5hbWU7Ci0JCQotCQlmaW5hbCBpbnQJaWR4CT0gYXJjaGl2ZU5hbWUubGFzdEluZGV4T2YoICIuIiApOwotCQlpZiAoIGlkeCA+IDEgKQotCQl7Ci0JCQlyZXN1bHQJPSBhcmNoaXZlTmFtZS5zdWJzdHJpbmcoIDAsIGlkeCApOwotCQl9Ci0JCQotCQlyZXR1cm4oIHJlc3VsdCApOwotCX0KLQkKLQkvKioKLQkJRGVwbG95IGFuIGFyY2hpdmUuCi0JCTxwPgotCQlUbyBkZXBsb3ksIHlvdSB3aWxsIG5lZWQgYW4gYXJjaGl2ZSB0byBkZXBsb3kuICBBIHJlY29tbWVuZGVkIHNhbXBsZSBtYXkgYmUgZm91bmQgYXQ6Ci0JCTxpPklOU1RBTExfUk9PVDwvaT4vc2FtcGxlcy9lamIvc3RhdGVsZXNzL2FwcHMvc2ltcGxlLmVhcgotCQk8cD4KLQkJVGhpcyBzYW1wbGUgZGVwbG95cyB0aGUgYXJjaGl2ZSB0byB0aGUgZG9tYWluLCBidXQgZG9lcyBub3QgY3JlYXRlIGFueSByZWZlcmVuY2VzCi0JCXRvIGl0LCBzbyBpdCB3aWxsIG5vdCBhY3R1YWxseSBiZSBhc3NvY2lhdGVkIHdpdGggYW55IHNlcnZlci4KLQkJPHA+Ci0JCVRvIGFzc29jaWF0ZSBhbiBhcHBsaWNhdGlvbiB3aXRoIGEgc2VydmVyLCB1c2UKLQkJe0BsaW5rIFN0YW5kYWxvbmVTZXJ2ZXJDb25maWcjY3JlYXRlRGVwbG95ZWRJdGVtUmVmQ29uZmlnfQotCQlAc2VlIGNvbS5zdW4uYXBwc2Vydi5tYW5hZ2VtZW50LmNvbmZpZy5TdGFuZGFsb25lU2VydmVyQ29uZmlnCi0JCUBzZWUgY29tLnN1bi5hcHBzZXJ2Lm1hbmFnZW1lbnQuY29uZmlnLkRlcGxveWVkSXRlbVJlZkNvbmZpZ0NSCi0JICovCi0JCXB1YmxpYyB2b2lkCi0JZGVwbG95KCBmaW5hbCBGaWxlIGFyY2hpdmUgKQotCQl0aHJvd3MgSU9FeGNlcHRpb24KLQl7Ci0JCWZpbmFsIE9iamVjdAl1cGxvYWRJRAk9IHVwbG9hZEFyY2hpdmUoIGFyY2hpdmUgKTsKLQkJZmluYWwgRGVwbG95bWVudE1ncgltZ3IJPSBnZXREb21haW5Sb290KCkuZ2V0RGVwbG95bWVudE1ncigpOwotCQkKLQkJZmluYWwgT2JqZWN0CWRlcGxveUlECT0gbWdyLmluaXREZXBsb3koICk7Ci0JCWZpbmFsIERlcGxveU5vdGlmaWNhdGlvbkxpc3RlbmVyIG15TGlzdGVuZXIJPSBuZXcgRGVwbG95Tm90aWZpY2F0aW9uTGlzdGVuZXIoIGRlcGxveUlEKTsKLQkJbWdyLmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKCBteUxpc3RlbmVyLCBudWxsLCBudWxsKTsKLQkJCi0JCXRyeQotCQl7Ci0JCQlmaW5hbCBNYXAJb3B0aW9ucwk9IG5ldyBIYXNoTWFwKCk7Ci0JCQkKLQkJCWZpbmFsIFN0cmluZwlhcmNoaXZlTmFtZQk9IGFyY2hpdmUuZ2V0TmFtZSgpOwotCQkJZmluYWwgU3RyaW5nCWRlcGxveU5hbWUJPSBnZXRBcHBOYW1lKCBhcmNoaXZlTmFtZSApOwotCQkJU2FtcGxlVXRpbC5wcmludGxuKCAiRGVwbG95aW5nICIgKyBhcmNoaXZlTmFtZSArICIgYXMgIiArIGRlcGxveU5hbWUgKTsKLQkJCQotCQkJb3B0aW9ucy5wdXQoIERlcGxveW1lbnRNZ3IuREVQTE9ZX09QVElPTl9OQU1FX0tFWSwgZGVwbG95TmFtZSApOwotCQkJb3B0aW9ucy5wdXQoIERlcGxveW1lbnRNZ3IuREVQTE9ZX09QVElPTl9WRVJJRllfS0VZLCBCb29sZWFuLlRSVUUudG9TdHJpbmcoKSApOwotCQkJb3B0aW9ucy5wdXQoIERlcGxveW1lbnRNZ3IuREVQTE9ZX09QVElPTl9ERVNDUklQVElPTl9LRVksICJkZXNjcmlwdGlvbiIgKTsKLQkJCQotCQkJCi0JCQltZ3Iuc3RhcnREZXBsb3koIGRlcGxveUlELCB1cGxvYWRJRCwgbnVsbCwgb3B0aW9ucyk7Ci0JCQkKLQkJCXdoaWxlICggISBteUxpc3RlbmVyLmlzQ29tcGxldGVkKCkgKQotCQkJewotCQkJCXRyeQotCQkJCXsKLQkJCQkJcHJpbnRsbiggImRlcGxveTogd2FpdGluZyBmb3IgZGVwbG95IG9mICIgKyBhcmNoaXZlKTsKLQkJCQkJVGhyZWFkLnNsZWVwKCAxMDAwICk7Ci0JCQkJfQotCQkJCWNhdGNoKCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlICkKLQkJCQl7Ci0JCQkJfQotCQkJfQotCQkJCi0JCQlmaW5hbCBEZXBsb3ltZW50U3RhdHVzCXN0YXR1cwk9IG15TGlzdGVuZXIuZ2V0RGVwbG95bWVudFN0YXR1cygpOwotCQkJZmluYWwgaW50CXN0YXR1c0NvZGUJPSBzdGF0dXMuZ2V0U3RhdHVzQ29kZSgpOwotCQkJaWYgKCBzdGF0dXNDb2RlID09IERlcGxveW1lbnRTdGF0dXMuU1RBVFVTX0NPREVfU1VDQ0VTUyApCi0JCQl7Ci0JCQkJZmluYWwgTWFwCWFkZGl0aW9uYWxTdGF0dXMJPSBzdGF0dXMuZ2V0QWRkaXRpb25hbFN0YXR1cygpOwotCQkJCWZpbmFsIFN0cmluZwltb2R1bGVJRAk9Ci0JCQkJCShTdHJpbmcpYWRkaXRpb25hbFN0YXR1cy5nZXQoIERlcGxveW1lbnRTdGF0dXMuTU9EVUxFX0lEX0tFWSApOwotCQkJCQotCQkJCVNhbXBsZVV0aWwucHJpbnRsbiggIkRlcGxveWVkICIgKyBxdW90ZShhcmNoaXZlTmFtZSkgKyAiIGFzICIgKyBxdW90ZShkZXBsb3lOYW1lKSArCi0JCQkJCSAiOiBzdGF0dXM9IiArIHN0YXR1cy5nZXRTdGFnZVN0YXR1cygpICsgIiwgbW9kdWxlSUQgPSAiICsgcXVvdGUobW9kdWxlSUQpICsKLQkJCQkJICIsIEFkZGl0aW9uYWxTdGF0dXM9IiArIFNhbXBsZVV0aWwubWFwVG9TdHJpbmcoIGFkZGl0aW9uYWxTdGF0dXMsICIgIikgKTsKLQkJCQkKLQkJCQlpZiAoICEgZGVwbG95TmFtZS5lcXVhbHMoIG1vZHVsZUlEICkgKQotCQkJCXsKLQkJCQkJU2FtcGxlVXRpbC5wcmludGxuKCAiV0FSTklORzogcmVxdWVzdGVkIG5hbWUgb2YgIiArIHF1b3RlKGRlcGxveU5hbWUpICsKLQkJCQkJCSIgaGFzIG5vdCBiZWVuIHVzZWQsIGFjdHVhbCBuYW1lID0gIiArIHF1b3RlKG1vZHVsZUlEKSArCi0JCQkJCQkiLCBzZWUgYnVnICM2MjE4NzE0IiApOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlTYW1wbGVVdGlsLnByaW50bG4oICJEZXBsb3ltZW50IG9mICIgKyBxdW90ZSggYXJjaGl2ZU5hbWUgKSArCi0JCQkJCSIgRkFJTEVELCBzdGF0dXMgY29kZSA9ICIgKyBzdGF0dXNDb2RlICk7Ci0JCQl9Ci0JCQkKLQkJCWlmICggc3RhdHVzLmdldFN0YWdlVGhyb3dhYmxlKCkgIT0gbnVsbCApCi0JCQl7Ci0JCQkJc3RhdHVzLmdldFN0YWdlVGhyb3dhYmxlKCkucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseQotCQl7Ci0JCQl0cnkKLQkJCXsKLQkJCQltZ3IucmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoIG15TGlzdGVuZXIgKTsKLQkJCX0KLQkJCWNhdGNoKCBFeGNlcHRpb24gZSApCi0JCQl7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JCXByaXZhdGUgU3RyaW5nCi0JcXVvdGUoIGZpbmFsIFN0cmluZyBzICkKLQl7Ci0JCXJldHVybiBTYW1wbGVVdGlsLnF1b3RlKCBzICk7Ci0JfQotCQotCS8qKgotCQlVbmRlcGxveXMgYSBkZXBsb3llZCBtb2R1bGUuCi0JICovCi0JCXB1YmxpYyB2b2lkCi0JdW5kZXBsb3koIGZpbmFsIFN0cmluZyBtb2R1bGVOYW1lICkKLQkJdGhyb3dzIElPRXhjZXB0aW9uCi0JewotCQlmaW5hbCBEZXBsb3ltZW50TWdyCW1ncgk9IGdldERvbWFpblJvb3QoKS5nZXREZXBsb3ltZW50TWdyKCk7Ci0JCQotCQlmaW5hbCBNYXAJc3RhdHVzRGF0YQk9IG1nci51bmRlcGxveSggbW9kdWxlTmFtZSwgbnVsbCApOwotCQlmaW5hbCBEZXBsb3ltZW50U3RhdHVzCXN0YXR1cwk9IAotCQkJRGVwbG95bWVudFN1cHBvcnQubWFwVG9EZXBsb3ltZW50U3RhdHVzKCBzdGF0dXNEYXRhICk7Ci0JCQkKLQkJcHJpbnRsbiggIlVuZGVwbG95bWVudCByZXN1bHQ6ICIgKyBzdGF0dXMuZ2V0U3RhZ2VTdGF0dXMoKSApOwotCQlpZiAoIHN0YXR1cy5nZXRTdGFnZVRocm93YWJsZSgpICE9IG51bGwgKQotCQl7Ci0JCQlzdGF0dXMuZ2V0U3RhZ2VUaHJvd2FibGUoKS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQkKLQkvKioKLQkJR2V0IGEgSjJFRVNlcnZlciBieSBuYW1lLgotCSAqLwotCQlwdWJsaWMgSjJFRVNlcnZlcgotCWdldEoyRUVTZXJ2ZXIoIGZpbmFsIFN0cmluZyBzZXJ2ZXJOYW1lICkKLQl7Ci0JCWZpbmFsIEoyRUVEb21haW4JajJlZURvbWFpbgk9IGdldERvbWFpblJvb3QoKS5nZXRKMkVFRG9tYWluKCk7Ci0JCWZpbmFsIE1hcAkJCXNlcnZlcnMJPSBqMmVlRG9tYWluLmdldFNlcnZlck1hcCgpOwotCQlmaW5hbCBKMkVFU2VydmVyCXNlcnZlcgk9IChKMkVFU2VydmVyKXNlcnZlcnMuZ2V0KCBzZXJ2ZXJOYW1lICk7Ci0JCQotCQlpZiAoIHNlcnZlciA9PSBudWxsICkKLQkJewotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggc2VydmVyTmFtZSApOwotCQl9Ci0JCQotCQlyZXR1cm4oIHNlcnZlciApOwotCX0KLQkKLQkvKioKLQkJQ3JlYXRlIGEgc3RhbmRhbG9uZSBzZXJ2ZXIuCi0JCQotCQlAcGFyYW0gY29uZmlnTmFtZQotCSAqLwotCQlwdWJsaWMgQ29uZmlnQ29uZmlnCi0JY3JlYXRlQ29uZmlnKCBmaW5hbCBTdHJpbmcgY29uZmlnTmFtZSApCi0JewotCQlmaW5hbCBDb25maWdDb25maWcJY29uZmlnCT0gZ2V0RG9tYWluQ29uZmlnKCkuY3JlYXRlQ29uZmlnQ29uZmlnKCBjb25maWdOYW1lLCBudWxsICk7Ci0JCXJldHVybiggY29uZmlnICk7Ci0JfQotCQotCS8qKgotCQlDcmVhdGUgYSBzdGFuZGFsb25lIHNlcnZlci4KLQkJCi0JCUBwYXJhbSBzZXJ2ZXJOYW1lCi0JICovCi0JCXB1YmxpYyBTdGFuZGFsb25lU2VydmVyQ29uZmlnCi0JY3JlYXRlU2VydmVyKAotCQlmaW5hbCBTdHJpbmcJc2VydmVyTmFtZSwKLQkJZmluYWwgU3RyaW5nCWNvbmZpZ05hbWUgKQotCXsKLQkJZmluYWwgU3RyaW5nCW5vZGVBZ2VudE5hbWUJPSBudWxsOwotCQkKLQkJZmluYWwgU3RhbmRhbG9uZVNlcnZlckNvbmZpZwlzZXJ2ZXIJPSAoU3RhbmRhbG9uZVNlcnZlckNvbmZpZykKLQkJCWdldERvbWFpbkNvbmZpZygpLmNyZWF0ZVN0YW5kYWxvbmVTZXJ2ZXJDb25maWcoIHNlcnZlck5hbWUsIG5vZGVBZ2VudE5hbWUsIGNvbmZpZ05hbWUsIG51bGwgKTsKLQkJCi0JCXJldHVybiggc2VydmVyICk7Ci0JfQotCQotCQlwdWJsaWMgU3RhbmRhbG9uZVNlcnZlckNvbmZpZwotCWNyZWF0ZVNlcnZlciggZmluYWwgU3RyaW5nCXNlcnZlck5hbWUgKQotCXsKLQkJZmluYWwgQ29uZmlnQ29uZmlnCWNvbmZpZwk9IGNyZWF0ZUNvbmZpZyggc2VydmVyTmFtZSArICItY29uZmlnIiApOwotCQkKLQkJZmluYWwgU3RhbmRhbG9uZVNlcnZlckNvbmZpZwlzZXJ2ZXIJPSBjcmVhdGVTZXJ2ZXIoIHNlcnZlck5hbWUsIGNvbmZpZy5nZXROYW1lKCkgKTsKLQkJcmV0dXJuKCBzZXJ2ZXIgKTsKLQl9Ci0JCi0JCi0JLyoqCi0JCVN0YXJ0IGEgc2VydmVyLgotCSAqLwotCQlwdWJsaWMgdm9pZAotCXN0YXJ0U2VydmVyKCBmaW5hbCBTdHJpbmcgc2VydmVyTmFtZSApCi0JewotCQlmaW5hbCBKMkVFU2VydmVyCXNlcnZlcgk9IGdldEoyRUVTZXJ2ZXIoIHNlcnZlck5hbWUgKTsKLQkJCi0JCXNlcnZlci5zdGFydCgpOwotCX0KLQkKLQkvKioKLQkJU3RvcCBhIHNlcnZlci4KLQkgKi8KLQkJcHVibGljIHZvaWQKLQlzdG9wU2VydmVyKCBmaW5hbCBTdHJpbmcgc2VydmVyTmFtZSApCi0JewotCQlmaW5hbCBKMkVFU2VydmVyCXNlcnZlcgk9IGdldEoyRUVTZXJ2ZXIoIHNlcnZlck5hbWUgKTsKLQkJCi0JCXNlcnZlci5zdG9wKCk7Ci0JfQotCQotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFNldAlMRUdBTF9NT04JPQotCQlDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVTZXQoIFNhbXBsZVV0aWwubmV3U2V0KCBuZXcgU3RyaW5nW10KLQl7Ci0JCU1vZHVsZU1vbml0b3JpbmdMZXZlbFZhbHVlcy5ISUdILAotCQlNb2R1bGVNb25pdG9yaW5nTGV2ZWxWYWx1ZXMuTE9XLAotCQlNb2R1bGVNb25pdG9yaW5nTGV2ZWxWYWx1ZXMuT0ZGLAotCX0gKSk7Ci0JCQotCS8qKgotCQlTZXRzIHRoZSBtb25pdG9yaW5nIHN0YXRlIGZvciBhbGwgYXZhaWxhYmxlIG1vZHVsZXMuCi0JCQotCQlAcGFyYW0gY29uZmlnTmFtZQljb25maWd1cmF0aW9uIGVsZW1lbnQgb24gd2hpY2ggdG8gb3BlcmF0ZQotCQlAcGFyYW0gc3RhdGUJCW9uZSBvZiBISUdILCBMT1csIE9GRgotCSAqLwotCQlwdWJsaWMgdm9pZAotCXNldE1vbml0b3JpbmcoCi0JCWZpbmFsIFN0cmluZwljb25maWdOYW1lLAotCQlmaW5hbCBTdHJpbmcJIHN0YXRlICkKLQl7Ci0JCWlmICggISBMRUdBTF9NT04uY29udGFpbnMoIHN0YXRlICkgKQotCQl7Ci0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCBzdGF0ZSApOwotCQl9Ci0JCQotCQlmaW5hbCBDb25maWdDb25maWcJY29uZmlnCT0KLQkJCShDb25maWdDb25maWcpZ2V0RG9tYWluQ29uZmlnKCkuZ2V0Q29uZmlnQ29uZmlnTWFwKCkuZ2V0KCBjb25maWdOYW1lICk7Ci0JCQotCQlmaW5hbCBNb2R1bGVNb25pdG9yaW5nTGV2ZWxzQ29uZmlnCW1vbgk9Ci0JCQljb25maWcuZ2V0TW9uaXRvcmluZ1NlcnZpY2VDb25maWcoKS5nZXRNb2R1bGVNb25pdG9yaW5nTGV2ZWxzQ29uZmlnKCk7Ci0JCQotCQkvLyBzZXQgYWxsIG1vZHVsZXMgdG8gdGhlIHNhbWUgc3RhdGUKLQkJbW9uLnNldENvbm5lY3RvckNvbm5lY3Rpb25Qb29sKCBzdGF0ZSApOwotCQltb24uc2V0VGhyZWFkUG9vbCggc3RhdGUgKTsKLQkJbW9uLnNldEhUVFBTZXJ2aWNlKCBzdGF0ZSApOwotCQltb24uc2V0SkRCQ0Nvbm5lY3Rpb25Qb29sKCBzdGF0ZSApOwotCQltb24uc2V0T1JCKCBzdGF0ZSApOwotCQltb24uc2V0VHJhbnNhY3Rpb25TZXJ2aWNlKCBzdGF0ZSApOwotCQltb24uc2V0V2ViQ29udGFpbmVyKCBzdGF0ZSApOwotCQltb24uc2V0RUpCQ29udGFpbmVyKCBzdGF0ZSApOwotCX0KLQkKLQkvKioKLQkJR2V0IGEgTWFwIG9mIDxpPnByb3BlcnR5LW5hbWU8L2k+PTxpPnByb3BlcnR5LXZhbHVlPC9pPi4KLQkJCi0JCUBwYXJhbSBwYQlhIFByb3BlcnRpZXNBY2Nlc3MKLQkgKi8KLQkJcHVibGljIE1hcAotCWdldFByb3BlcnRpZXMoIGZpbmFsIFByb3BlcnRpZXNBY2Nlc3MgcGEgKQotCXsKLQkJZmluYWwgSGFzaE1hcAltCT0gbmV3IEhhc2hNYXAoKTsKLQkJCi0JCWZpbmFsIFN0cmluZ1tdCW5hbWVzCT0gcGEuZ2V0UHJvcGVydHlOYW1lcygpOwotCQlmb3IoIGludCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgKytpICkKLQkJewotCQkJbS5wdXQoIG5hbWVzWyBpIF0sIHBhLmdldFByb3BlcnR5VmFsdWUoIG5hbWVzWyBpIF0gKSApOwotCQl9Ci0JCQotCQlyZXR1cm4oIG0gKTsKLQl9Ci0JCi0JLyoqCi0JCURpc3BsYXkgYWxsIHByb3BlcnRpZXMgZm91bmQgb24gYWxsIHtAbGluayBBTVh9LgotCQkKLQkJQHNlZSAjZ2V0UHJvcGVydGllcyhQcm9wZXJ0aWVzQWNjZXNzKQotCQlAc2VlIFByb3BlcnRpZXNBY2Nlc3MjZ2V0UHJvcGVydHlOYW1lcwotCSAqLwotCQlwdWJsaWMgdm9pZAotCWRpc3BsYXlBbGxQcm9wZXJ0aWVzKCApCi0JewotCQlmaW5hbCBJdGVyYXRvcglpdGVyCT0gZ2V0UXVlcnlNZ3IoKS5xdWVyeUFsbFNldCgpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlICggaXRlci5oYXNOZXh0KCkgKQotCQl7Ci0JCQlmaW5hbCBBTVgJYW14CT0gKEFNWClpdGVyLm5leHQoKTsKLQkJCQotCQkJaWYgKCBhbXggaW5zdGFuY2VvZiBQcm9wZXJ0aWVzQWNjZXNzICkKLQkJCXsKLQkJCQlmaW5hbCBQcm9wZXJ0aWVzQWNjZXNzCXBhCT0gKFByb3BlcnRpZXNBY2Nlc3MpYW14OwotCQkJCQotCQkJCWZpbmFsIE1hcAlwcm9wcwk9IGdldFByb3BlcnRpZXMoIHBhICk7Ci0JCQkJaWYgKCBwcm9wcy5rZXlTZXQoKS5zaXplKCkgIT0gMCApCi0JCQkJewotCQkJCQlwcmludGxuKCAiXG5Qcm9wZXJ0aWVzIGZvcjogIiArIFV0aWwuZ2V0T2JqZWN0TmFtZSggKEFNWClwYSApICk7Ci0JCQkJCXByaW50bG4oIFNhbXBsZVV0aWwubWFwVG9TdHJpbmcoIGdldFByb3BlcnRpZXMoIHBhICksICJcbiIpICk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCQotCQlwcml2YXRlIHZvaWQKLQlteVNsZWVwKCBmaW5hbCBsb25nIG1pbGxpcyApCi0JewotCQl0cnkKLQkJewotCQkJVGhyZWFkLnNsZWVwKCBtaWxsaXMgKTsKLQkJfQotCQljYXRjaCggSW50ZXJydXB0ZWRFeGNlcHRpb24gZSApCi0JCXsKLQkJfQotCX0KLQkKLQkKLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZwlNQkVBTl9TRVJWRVJfREVMRUdBVEUJPQotCQkJCQkJCSJKTUltcGxlbWVudGF0aW9uOnR5cGU9TUJlYW5TZXJ2ZXJEZWxlZ2F0ZSI7Ci0JCXB1YmxpYyBzdGF0aWMgT2JqZWN0TmFtZQotCWdldE1CZWFuU2VydmVyRGVsZWdhdGVPYmplY3ROYW1lKCkKLQl7Ci0JCXJldHVybiggVXRpbC5uZXdPYmplY3ROYW1lKCBNQkVBTl9TRVJWRVJfREVMRUdBVEUgKSApOwotCX0KLQkKLQkKLQkJcHJpdmF0ZSB2b2lkCi0Jd2FpdE51bU5vdGlmcyggZmluYWwgTWFwIG5vdGlmcywgZmluYWwgU3RyaW5nIHR5cGUsIGZpbmFsIGludCBudW1SZXF1aXJlZCApCi0JewotCQl3aGlsZSAoIHRydWUgKQotCQl7Ci0JCQlmaW5hbCBMaXN0CWxpc3QJPSAoTGlzdClub3RpZnMuZ2V0KCB0eXBlICk7Ci0JCQlpZiAoIGxpc3QgIT0gbnVsbCAmJiBsaXN0LnNpemUoKSA+PSBudW1SZXF1aXJlZCApCi0JCQl7Ci0JCQkJYnJlYWs7Ci0JCQl9CisgICAgLyoqCisgICAgICAgIFR1cm4gYW4gb2JqZWN0IGludG8gYSB1c2VmdWwgU3RyaW5nCisgICAgICovCisgICAgICAgIHB1YmxpYyBTdHJpbmcKKyAgICB0b1N0cmluZyggT2JqZWN0IG8gKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBTYW1wbGVVdGlsLnRvU3RyaW5nKCBvICkgKTsKKyAgICB9CiAKLQkJCW15U2xlZXAoIDUwICk7Ci0JCX0KLQl9Ci0JCi0JCQotCQotCQlwcml2YXRlIHZvaWQKLQl3YWl0TUJlYW5TZXJ2ZXJOb3RpZmljYXRpb24oCi0JCWZpbmFsIFNhbXBsZUxpc3RlbmVyCWxpc3RlbmVyLAotCQlmaW5hbCBTdHJpbmcJCQl0eXBlLAotCQlmaW5hbCBPYmplY3ROYW1lCQlvYmplY3ROYW1lICkKLQl7Ci0JCUxpc3QJCWxpc3QJPSBudWxsOwotCQl3aGlsZSAoIChsaXN0ID0gbGlzdGVuZXIuZ2V0Tm90aWZzUmVjZWl2ZWQoIHR5cGUgKSkgPT0gbnVsbCApCi0JCXsKLQkJCW15U2xlZXAoIDUwICk7Ci0JCX0KLQkJCi0JCWJvb2xlYW4Jd2FpdGluZwk9IHRydWU7Ci0JCXdoaWxlICggd2FpdGluZyApCi0JCXsKLQkJCWZpbmFsIEl0ZXJhdG9yCWl0ZXIJPSBsaXN0Lml0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAoIGl0ZXIuaGFzTmV4dCgpICkKLQkJCXsKLQkJCQlmaW5hbCBNQmVhblNlcnZlck5vdGlmaWNhdGlvbglub3RpZgk9IChNQmVhblNlcnZlck5vdGlmaWNhdGlvbilpdGVyLm5leHQoKTsKLQkJCQlpZiAoIG5vdGlmLmdldE1CZWFuTmFtZSgpLmVxdWFscyggb2JqZWN0TmFtZSApICkKLQkJCQl7Ci0JCQkJCXdhaXRpbmcJPSBmYWxzZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCVNhbXBsZVV0aWwucHJpbnRsbiggIlVuZXhwZWN0ZWQgT2JqZWN0TmFtZTogIiArIG9iamVjdE5hbWUgKyAiICE9ICIgKyBub3RpZi5nZXRNQmVhbk5hbWUoKSApOwotCQkJCX0KLQkJCX0KLQkJCW15U2xlZXAoIDEwMCApOwotCQl9Ci0JfQotCQotCQotCS8qKgotCQlEZW1vbnN0cmF0ZXMgdGhlIHVzZSBvZiBhIGphdmF4Lm1hbmFnZW1lbnQubW9uaXRvciBNQmVhbgotCQl0byBiZSBub3RpZmllZCBvZiBjaGFuZ2VzIGluIHRoZSB2YWx1ZSBvZiBhbiBBdHRyaWJ1dGUuCi0JICovCi0JCXB1YmxpYyB2b2lkCi0JZGVtb0pNWE1vbml0b3IoKQotCQl0aHJvd3MgSW5zdGFuY2VOb3RGb3VuZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLQl7Ci0JCWZpbmFsIEpNWE1vbml0b3JNZ3IJbWdyCT0gZ2V0RG9tYWluUm9vdCgpLmdldEpNWE1vbml0b3JNZ3IoKTsKLQkJCi0JCWZpbmFsIFN0cmluZwlhdHRyTmFtZQk9ICJTYW1wbGVTdHJpbmciOwotCQlmaW5hbCBTdHJpbmcJYXR0clZhbHVlCT0gImhlbGxvIjsKLQkJCi0JCS8vIGxpc3RlbiB0byB0aGUgTUJlYW5TZXJ2ZXJEZWxlZ2F0ZSwgdG9vLCBzbyB3ZSBjYW4gc2VlIG91ciBzYW1wbGUgbW9uaXRvcgotCQkvLyBnZXQgcmVnaXN0ZXJlZC4KLQkJZmluYWwgU2FtcGxlTGlzdGVuZXIJc2FtcGxlTGlzdGVuZXIJPSBuZXcgU2FtcGxlTGlzdGVuZXIoKTsKLQkJZmluYWwgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uCWNvbm4JPQotCQkJVXRpbC5nZXRFeHRyYSggbWdyICkuZ2V0Q29ubmVjdGlvblNvdXJjZSgpLmdldEV4aXN0aW5nTUJlYW5TZXJ2ZXJDb25uZWN0aW9uKCk7Ci0JCWNvbm4uYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoCi0JCQlnZXRNQmVhblNlcnZlckRlbGVnYXRlT2JqZWN0TmFtZSgpLCBzYW1wbGVMaXN0ZW5lciwgbnVsbCwgbnVsbCApOwotCQkKLQkJCQotCQlmaW5hbCBTYW1wbGUJc2FtcGxlCT0gKFNhbXBsZSlnZXREb21haW5Sb290KCkuZ2V0Q29udGFpbmVlKCBYVHlwZXMuU0FNUExFICk7Ci0JCQotCQlmaW5hbCBTdHJpbmcJbW9uaXRvck5hbWUJPSAiU2FtcGxlU3RyaW5nTW9uaXRvciI7Ci0JCUFNWFN0cmluZ01vbml0b3IJbW9uCT0gbnVsbDsKLQkJdHJ5Ci0JCXsKLQkJCS8vIGNsZWFudXAgaW4gY2FzZSBpdCB3YXMgbGVmdCBhcm91bmQgYnkgbWlzdGFrZS4uLgotCQkJdHJ5IHsgbWdyLnJlbW92ZSggbW9uaXRvck5hbWUgKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUgKQl7fQotCQkJCi0JCQkvLyBjcmVhdGUgYSBuZXcgb25lCi0JCQltb24JPSBtZ3IuY3JlYXRlU3RyaW5nTW9uaXRvciggbW9uaXRvck5hbWUgKTsKLQkJCS8vIG9ic2VydmVyIHRoYXQgd2UndmUgYmVlbiBub3RpZmllZCAobm90IHJlcXVpcmVkKQotCQkJd2FpdE1CZWFuU2VydmVyTm90aWZpY2F0aW9uKCBzYW1wbGVMaXN0ZW5lciwKLQkJCQlNQmVhblNlcnZlck5vdGlmaWNhdGlvbi5SRUdJU1RSQVRJT05fTk9USUZJQ0FUSU9OLCBVdGlsLmdldE9iamVjdE5hbWUoIG1vbiApICk7Ci0JCQotCQkJLy8gd2UnbGwgbW9kaWZ5IHRoaXMgQXR0cmlidXRlJ3MgdmFsdWUsIHRvIGZvcmNlIGEgY2hhbmdlCi0JCQlzYW1wbGUuYWRkQXR0cmlidXRlKCBhdHRyTmFtZSwgYXR0clZhbHVlICk7Ci0JCQkKLQkJCS8vIGxpc3RlbiB0byB0aGUgbW9uaXRvcgotCQkJbW9uLmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKCBzYW1wbGVMaXN0ZW5lciwgbnVsbCwgbnVsbCApOwotCQkJbW9uLnNldE9ic2VydmVkQXR0cmlidXRlKCBhdHRyTmFtZSApOwotCQkJbW9uLnNldFN0cmluZ1RvQ29tcGFyZSggYXR0clZhbHVlICk7Ci0JCQltb24uc2V0Tm90aWZ5RGlmZmVyKCB0cnVlICk7Ci0JCQltb24uc2V0Tm90aWZ5TWF0Y2goIHRydWUgKTsKLQkJCQotCQkJLy8gdGVsbCB0aGUgbW9uaXRvciB0byBvYnNlcnZlIHNhbXBsZQotCQkJbW9uLmFkZE9ic2VydmVkT2JqZWN0KCBVdGlsLmdldE9iamVjdE5hbWUoIHNhbXBsZSApICk7Ci0JCQkKLQkJCS8vIHNpbmNlIHRoZSBBdHRyaWJ1dGUgd2FzIGFkZGVkIGR5bmFtaWNhbGx5LCB0aGVyZSBpcyBubwotCQkJLy8gZ2V0dGVyIG1ldGhvZCwgc28gd2UgbXVzdCBhY2Nlc3MgdGhlIEF0dHJpYnV0ZSB2aWEgSk1YCi0JCQlmaW5hbCBTdGRBdHRyaWJ1dGVzQWNjZXNzCWF0dHJzCT0gVXRpbC5nZXRFeHRyYSggc2FtcGxlICk7Ci0JCQlhdHRycy5zZXRBdHRyaWJ1dGUoIG5ldyBBdHRyaWJ1dGUoIGF0dHJOYW1lLCAiZ29vZGJ5ZSIgKSApOwotCQkJLy8gc2V0IGl0IHRvIG9yaWdpbmFsIHZhbHVlCi0JCQlhdHRycy5zZXRBdHRyaWJ1dGUoIG5ldyBBdHRyaWJ1dGUoIGF0dHJOYW1lLCBhdHRyVmFsdWUgKSApOwotCQkJCi0JCQkvLyB3ZSBhZGRlZCBpdCxzbyB3ZSBzaG91bGQgcmVtb3ZlIGl0Ci0JCQlzYW1wbGUucmVtb3ZlQXR0cmlidXRlKCBhdHRyTmFtZSApOwotCQkJCi0JCQkvLyBsZXQgdGhlIE5vdGlmaWNhdGlvbnMgYXJyaXZlLi4uCi0JCQlmaW5hbCBNYXAJbm90aWZzCT0gc2FtcGxlTGlzdGVuZXIuZ2V0Tm90aWZzUmVjZWl2ZWQoKTsKLQkJCXdhaXROdW1Ob3RpZnMoIG5vdGlmcywgQXR0cmlidXRlQ2hhbmdlTm90aWZpY2F0aW9uLkFUVFJJQlVURV9DSEFOR0UsIDQgKTsKLQkJfQotCQljYXRjaCggVGhyb3dhYmxlIHQgKQotCQl7Ci0JCQl0LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWZpbmFsbHkKLQkJewotCQkJdHJ5Ci0JCQl7Ci0JCQkJbW9uLnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCBzYW1wbGVMaXN0ZW5lciApOwotCQkJCQotCQkJCS8vIGRvbid0IGxlYXZlIG1vbml0b3JzIGFyb3VuZAotCQkJCWlmICggbW9uICE9IG51bGwgKQotCQkJCXsKLQkJCQkJbWdyLnJlbW92ZSggbW9uLmdldE5hbWUoKSApOwotCQkJCQkvLyBvYnNlcnZlciB0aGF0IHdlJ3ZlIGJlZW4gbm90aWZpZWQgKG5vdCByZXF1aXJlZCkKLQkJCQkJd2FpdE1CZWFuU2VydmVyTm90aWZpY2F0aW9uKCBzYW1wbGVMaXN0ZW5lciwKLQkJCQkJCU1CZWFuU2VydmVyTm90aWZpY2F0aW9uLlVOUkVHSVNUUkFUSU9OX05PVElGSUNBVElPTiwKLQkJCQkJCVV0aWwuZ2V0T2JqZWN0TmFtZSggbW9uICkgKTsKLQkJCQl9Ci0JCQkJCi0JCQkJY29ubi5yZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigKLQkJCQkJZ2V0TUJlYW5TZXJ2ZXJEZWxlZ2F0ZU9iamVjdE5hbWUoKSwgc2FtcGxlTGlzdGVuZXIgKTsKLQkJCX0KLQkJCWNhdGNoKCBMaXN0ZW5lck5vdEZvdW5kRXhjZXB0aW9uIGUgKQotCQkJewotCQkJfQotCQl9Ci0JfQorICAgIC8qKgorICAgICAgICBEaXNwbGF5IGEgTWFwIHRvIFN5c3RlbS5vdXQuCisgICAgICovCisgICAgICAgIHByaXZhdGUgdm9pZAorICAgIGRpc3BsYXlNYXAoCisgICAgICAgIGZpbmFsIFN0cmluZyAgICBtc2csCisgICAgICAgIGZpbmFsIE1hcCAgICAgICAgIG0pCisgICAgeworICAgICAgICBwcmludGxuKCBtc2cgKyAiOiAiICsgdG9TdHJpbmcoIG0ua2V5U2V0KCkgKSApOworICAgIH0KKworICAgIC8qKgorICAgICAgICBEZW1vbnN0cmF0ZXMgaG93IHRvIGFjY2VzcyB2YXJpb3VzIHR5cGVzIG9mICB7QGxpbmsgQU1YfSBieSBvYnRhaW5pbmcgYSBNYXAgYW5kIHRoZW4gZGlzcGxheWluZyBpdC4KKyAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQKKyAgICBoYW5kbGVMaXN0KCkKKyAgICB7CisgICAgICAgIGZpbmFsIERvbWFpbkNvbmZpZyAgICBkY3AgICAgPSBnZXREb21haW5Db25maWcoKTsKKworICAgICAgICAvLyBUb3AtbGV2ZWwgaXRlbXMKKyAgICAgICAgcHJpbnRsbiggIlxuLS0tIFRvcC1sZXZlbCAtLS0gXG4iICk7CisKKyAgICAgICAgZGlzcGxheU1hcCggIkNvbmZpZ0NvbmZpZyIsIGRjcC5nZXRDb25maWdDb25maWdNYXAoKSApOworCisgICAgICAgIGRpc3BsYXlNYXAoICJTZXJ2ZXJDb25maWciLCBkY3AuZ2V0U2VydmVyQ29uZmlnTWFwKCkgKTsKKworICAgICAgICBkaXNwbGF5TWFwKCAiU3RhbmRhbG9uZVNlcnZlckNvbmZpZyIsIGRjcC5nZXRTdGFuZGFsb25lU2VydmVyQ29uZmlnTWFwKCkgKTsKKworICAgICAgICBkaXNwbGF5TWFwKCAiQ2x1c3RlcmVkU2VydmVyQ29uZmlnIiwgZGNwLmdldENsdXN0ZXJlZFNlcnZlckNvbmZpZ01hcCgpICk7CisKKyAgICAgICAgZGlzcGxheU1hcCggIkNsdXN0ZXJDb25maWciLCBkY3AuZ2V0Q2x1c3RlckNvbmZpZ01hcCgpICk7CisKKworICAgICAgICAvLyBkZXBsb3llZCBpdGVtcworICAgICAgICBwcmludGxuKCAiXG4tLS0gRGVwbG95ZWRJdGVtcyAtLS0gXG4iICk7CisgICAgICAgIGRpc3BsYXlNYXAoICJKMkVFQXBwbGljYXRpb25Db25maWciLCBkY3AuZ2V0SjJFRUFwcGxpY2F0aW9uQ29uZmlnTWFwKCkgKTsKKyAgICAgICAgZGlzcGxheU1hcCggIkVKQk1vZHVsZUNvbmZpZyIsIGRjcC5nZXRFSkJNb2R1bGVDb25maWdNYXAoKSApOworICAgICAgICBkaXNwbGF5TWFwKCAiV2ViTW9kdWxlQ29uZmlnIiwgZGNwLmdldFdlYk1vZHVsZUNvbmZpZ01hcCgpICk7CisgICAgICAgIGRpc3BsYXlNYXAoICJSQVJNb2R1bGVDb25maWciLCBkY3AuZ2V0UkFSTW9kdWxlQ29uZmlnTWFwKCkgKTsKKyAgICAgICAgZGlzcGxheU1hcCggIkFwcENsaWVudE1vZHVsZUNvbmZpZyIsIGRjcC5nZXRBcHBDbGllbnRNb2R1bGVDb25maWdNYXAoKSApOworICAgICAgICBkaXNwbGF5TWFwKCAiTGlmZWN5Y2xlTW9kdWxlQ29uZmlnIiwgZGNwLmdldExpZmVjeWNsZU1vZHVsZUNvbmZpZ01hcCgpICk7CisKKworICAgICAgICAvLyByZXNvdXJjZXMKKyAgICAgICAgcHJpbnRsbiggIlxuLS0tIFJlc291cmNlcyAtLS0gXG4iICk7CisKKyAgICAgICAgZGlzcGxheU1hcCggIkN1c3RvbVJlc291cmNlQ29uZmlnIiwgZGNwLmdldEN1c3RvbVJlc291cmNlQ29uZmlnTWFwKCkgKTsKKyAgICAgICAgZGlzcGxheU1hcCggIlBlcnNpc3RlbmNlTWFuYWdlckZhY3RvcnlSZXNvdXJjZUNvbmZpZyIsCisgICAgICAgICAgICBkY3AuZ2V0UGVyc2lzdGVuY2VNYW5hZ2VyRmFjdG9yeVJlc291cmNlQ29uZmlnTWFwKCkgKTsKKyAgICAgICAgZGlzcGxheU1hcCggIkpORElSZXNvdXJjZUNvbmZpZyIsIGRjcC5nZXRKTkRJUmVzb3VyY2VDb25maWdNYXAoKSApOworICAgICAgICBkaXNwbGF5TWFwKCAiSk1TUmVzb3VyY2VDb25maWciLCBkY3AuZ2V0Sk1TUmVzb3VyY2VDb25maWdNYXAoKSApOworICAgICAgICBkaXNwbGF5TWFwKCAiSkRCQ1Jlc291cmNlQ29uZmlnIiwgZGNwLmdldEpEQkNSZXNvdXJjZUNvbmZpZ01hcCgpICk7CisgICAgICAgIGRpc3BsYXlNYXAoICJDb25uZWN0b3JSZXNvdXJjZUNvbmZpZyIsIGRjcC5nZXRDb25uZWN0b3JSZXNvdXJjZUNvbmZpZ01hcCgpICk7CisgICAgICAgIGRpc3BsYXlNYXAoICJKREJDQ29ubmVjdGlvblBvb2xDb25maWciLCBkY3AuZ2V0SkRCQ0Nvbm5lY3Rpb25Qb29sQ29uZmlnTWFwKCkgKTsKKyAgICAgICAgZGlzcGxheU1hcCggIlBlcnNpc3RlbmNlTWFuYWdlckZhY3RvcnlSZXNvdXJjZUNvbmZpZyIsCisgICAgICAgICAgICBkY3AuZ2V0UGVyc2lzdGVuY2VNYW5hZ2VyRmFjdG9yeVJlc291cmNlQ29uZmlnTWFwKCkgKTsKKyAgICAgICAgZGlzcGxheU1hcCggIkNvbm5lY3RvckNvbm5lY3Rpb25Qb29sQ29uZmlnIiwKKyAgICAgICAgICAgIGRjcC5nZXRDb25uZWN0b3JDb25uZWN0aW9uUG9vbENvbmZpZ01hcCgpICk7CisgICAgICAgIGRpc3BsYXlNYXAoICJBZG1pbk9iamVjdFJlc291cmNlQ29uZmlnIiwgZGNwLmdldEFkbWluT2JqZWN0UmVzb3VyY2VDb25maWdNYXAoKSApOworICAgICAgICBkaXNwbGF5TWFwKCAiUmVzb3VyY2VBZGFwdGVyQ29uZmlnIiwgZGNwLmdldFJlc291cmNlQWRhcHRlckNvbmZpZ01hcCgpICk7CisgICAgICAgIGRpc3BsYXlNYXAoICJNYWlsUmVzb3VyY2VDb25maWciLCBkY3AuZ2V0TWFpbFJlc291cmNlQ29uZmlnTWFwKCkgKTsKKworCisgICAgICAgIC8vIGdldCBhIENvbmZpZ0NvbmZpZworICAgICAgICBmaW5hbCBDb25maWdDb25maWcgICAgY29uZmlnICAgID0KKyAgICAgICAgICAgIChDb25maWdDb25maWcpZGNwLmdldENvbmZpZ0NvbmZpZ01hcCgpLmdldCggInNlcnZlci1jb25maWciICk7CisKKworICAgICAgICAvLyBIVFRQU2VydmljZQorICAgICAgICBwcmludGxuKCAiXG4tLS0gSFRUUFNlcnZpY2UgLS0tIFxuIiApOworCisgICAgICAgIGZpbmFsIEhUVFBTZXJ2aWNlQ29uZmlnIGh0dHBTZXJ2aWNlID0gY29uZmlnLmdldEhUVFBTZXJ2aWNlQ29uZmlnKCk7CisgICAgICAgIGRpc3BsYXlNYXAoICJIVFRQTGlzdGVuZXJzIiwgaHR0cFNlcnZpY2UuZ2V0SFRUUExpc3RlbmVyQ29uZmlnTWFwKCkgKTsKKyAgICAgICAgZGlzcGxheU1hcCggIlZpcnR1YWxTZXJ2ZXJzIiwgaHR0cFNlcnZpY2UuZ2V0VmlydHVhbFNlcnZlckNvbmZpZ01hcCgpICk7CisgICAgfQorCisgICAgLyoqCisgICAgICAgIFJldHVybiBhIFNldCBvZiB7QGxpbmsgQU1YfSB3aG9zZSBPYmplY3ROYW1lIGhhcyB0aGUgcHJvcGVydHkKKyAgICAgICAgIDxpPnByb3BlcnR5LW5hbWU8L2k+PTxpPnByb3BlcnR5LXZhbHVlPC9pPi4KKworICAgICAgICBAcGFyYW0gcHJvcGVydHlOYW1lCisgICAgICAgIEBwYXJhbSBwcm9wZXJ0eVZhbHVlCisgICAgICAgIEByZXR1cm4gU2V0IG9mIHtAbGluayBBTVh9CisgICAgKi8KKyAgICAgICAgcHVibGljIFNldAorICAgIHF1ZXJ5V2lsZCgKKyAgICAgICAgZmluYWwgU3RyaW5nIHByb3BlcnR5TmFtZSwKKyAgICAgICAgZmluYWwgU3RyaW5nIHByb3BlcnR5VmFsdWUpCisgICAgeworICAgICAgICBmaW5hbCBTdHJpbmdbXSAgICBwcm9wTmFtZXMgICAgPSBuZXcgU3RyaW5nW10geyBwcm9wZXJ0eU5hbWUgfTsKKyAgICAgICAgZmluYWwgU3RyaW5nW10gICAgcHJvcFZhbHVlcyAgICA9IG5ldyBTdHJpbmdbXXsgcHJvcGVydHlWYWx1ZSB9OworCisgICAgICAgIGZpbmFsIFNldCAgICBhbXhzICAgID0gZ2V0UXVlcnlNZ3IoKS5xdWVyeVdpbGRTZXQoIHByb3BOYW1lcywgcHJvcFZhbHVlcyApOworCisgICAgICAgIHJldHVybiggYW14cyApOworICAgIH0KKworICAgIC8qKgorICAgICAgICBDYWxsIHF1ZXJ5V2lsZCggcHJvcGVydHlOYW1lLCBwcm9wZXJ0eVZhbHVlICkgYW5kIGRpc3BsYXkgdGhlIHJlc3VsdC4KKworICAgICAgICBAcGFyYW0gcHJvcGVydHlOYW1lCisgICAgICAgIEBwYXJhbSBwcm9wZXJ0eVZhbHVlCisgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQKKyAgICBkaXNwbGF5V2lsZCgKKyAgICAgICAgZmluYWwgU3RyaW5nIHByb3BlcnR5TmFtZSwKKyAgICAgICAgZmluYWwgU3RyaW5nIHByb3BlcnR5VmFsdWUpCisgICAgeworICAgICAgICBmaW5hbCBTZXQgICAgaXRlbXMgICAgPSBxdWVyeVdpbGQoIHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSApOworCisgICAgICAgIHByaW50bG4oICJcbi0tLSBRdWVyaWVkIGZvciAiICsgcHJvcGVydHlOYW1lICsgIj0iICsgcHJvcGVydHlWYWx1ZSArICIgLS0tIiApOworICAgICAgICBmaW5hbCBJdGVyYXRvciAgICBpdGVyICAgID0gaXRlbXMuaXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUgKCBpdGVyLmhhc05leHQoKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpbmFsIEFNWCAgICBpdGVtICAgID0gKEFNWClpdGVyLm5leHQoKTsKKworICAgICAgICAgICAgcHJpbnRsbiggImoyZWVUeXBlPSIgKyBpdGVtLmdldEoyRUVUeXBlKCkgKyAiLCIgKyAibmFtZT0iICsgaXRlbS5nZXROYW1lKCkgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICAgICBwdWJsaWMgU2V0CisgICAgcXVlcnlGb3JKMkVFVHlwZSggZmluYWwgU3RyaW5nIGoyZWVUeXBlICkKKyAgICB7CisgICAgICAgIGZpbmFsIFN0cmluZyAgICBwcm9wICAgID0gVXRpbC5tYWtlSjJFRVR5cGVQcm9wKCBqMmVlVHlwZSApOworICAgICAgICBmaW5hbCBTZXQgICAgICAgIGl0ZW1zICAgID0gZ2V0UXVlcnlNZ3IoKS5xdWVyeVByb3BzU2V0KCBwcm9wICk7CisKKyAgICAgICAgcmV0dXJuKCBpdGVtcyApOworICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZAorICAgIGRpc3BsYXlBdmFpbGFibGVDaGlsZFR5cGVzKCBmaW5hbCBTdHJpbmcgajJlZVR5cGUgKQorICAgIHsKKyAgICAgICAgZmluYWwgRG9tYWluUm9vdCAgICAgICAgZG9tYWluUm9vdCAgICA9IGdldERvbWFpblJvb3QoKTsKKworICAgIH0KKworICAgICAgICBwcml2YXRlIFN0cmluZworICAgIGdldEluZGVudCggZmluYWwgaW50IG51bSApCisgICAgeworICAgICAgICBmaW5hbCBjaGFyW10gICAgaW5kZW50ICAgID0gbmV3IGNoYXJbIG51bSBdOworICAgICAgICBmb3IoIGludCBpID0gMDsgaSA8IG51bTsgKytpICkKKyAgICAgICAgeworICAgICAgICAgICAgaW5kZW50WyBpIF0gICAgPSAnICc7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKCBuZXcgU3RyaW5nKCBpbmRlbnQgKSApOworICAgIH0KKworICAgIC8qKgorICAgICAgICBEaXNwbGF5IHRoZSBqMmVlVHlwZSBhbmQgbmFtZSAoaWYgbm90IHtAbGluayBBTVgjTk9fTkFNRX0pCisgICAgICovCisgICAgICAgIHByaXZhdGUgdm9pZAorICAgIGRpc3BsYXlBTVgoCisgICAgICAgIGZpbmFsIEFNWCBhbXgsCisgICAgICAgIGZpbmFsIGludCAgICBpbmRlbnRDb3VudCApCisgICAgeworICAgICAgICBmaW5hbCBTdHJpbmcgaW5kZW50ICAgID0gZ2V0SW5kZW50KCBpbmRlbnRDb3VudCApOworCisgICAgICAgIGZpbmFsIFN0cmluZyAgICBqMmVlVHlwZSAgICA9IGFteC5nZXRKMkVFVHlwZSgpOworICAgICAgICBmaW5hbCBTdHJpbmcgICAgbmFtZSAgICAgICAgPSBhbXguZ2V0TmFtZSgpOworICAgICAgICBpZiAoIG5hbWUuZXF1YWxzKCBBTVguTk9fTkFNRSApICkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRsbiggaW5kZW50ICsgajJlZVR5cGUgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50bG4oIGluZGVudCArIGoyZWVUeXBlICsgIj0iICsgbmFtZSApOworICAgICAgICB9CisgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZAorICAgIGRpc3BsYXlIaWVyYXJjaHkoCisgICAgICAgIGZpbmFsIENvbGxlY3Rpb24gICAgYW14U2V0LAorICAgICAgICBmaW5hbCBpbnQgICAgICAgICAgICBpbmRlbnRDb3VudCApCisgICAgeworICAgICAgICBmaW5hbCBJdGVyYXRvciAgICBpdGVyICAgID0gYW14U2V0Lml0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlICggaXRlci5oYXNOZXh0KCkgKQorICAgICAgICB7CisgICAgICAgICAgICBmaW5hbCBBTVggICAgYW14ICAgID0gKEFNWClpdGVyLm5leHQoKTsKKyAgICAgICAgICAgIGRpc3BsYXlIaWVyYXJjaHkoIGFteCwgaW5kZW50Q291bnQgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAgICBEaXNwbGF5IHRoZSBoaWVyYXJjaHkgb2Yge0BsaW5rIEFNWH0gYmVnaW5uaW5nIHdpdGggdGhlIHNwZWNpZmllZCBvbmUKKyAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQKKyAgICBkaXNwbGF5SGllcmFyY2h5KAorICAgICAgICBmaW5hbCBBTVggYW14LAorICAgICAgICBmaW5hbCBpbnQgICAgaW5kZW50Q291bnQgKQorICAgIHsKKyAgICAgICAgZGlzcGxheUFNWCggYW14LCBpbmRlbnRDb3VudCApOworCisgICAgICAgIGlmICggYW14IGluc3RhbmNlb2YgQ29udGFpbmVyICkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZ2V0IE1hcHMgb2YgYWxsIGNvbnRhaW5lZCBpdGVtcworICAgICAgICAgICAgZmluYWwgTWFwICAgIG0gICAgPSAoKENvbnRhaW5lcilhbXgpLmdldE11bHRpQ29udGFpbmVlTWFwKCBudWxsICk7CisKKyAgICAgICAgICAgIC8vIGZvciBjbGFyaXR5IG9mIGRpc3BsYXksIHNlcGFyYXRlIG91dCB0aG9zZSB0aGF0IGFyZSBDb250YWluZXJzLAorICAgICAgICAgICAgLy8gYW5kIHRob3NlIHRoYXQgYXJlIG5vdC4KKyAgICAgICAgICAgIGZpbmFsIFNldCAgICBkZWZlcnJlZCAgICA9IG5ldyBIYXNoU2V0KCk7CisgICAgICAgICAgICBmaW5hbCBJdGVyYXRvciAgICBtYXBzSXRlciAgICA9IG0udmFsdWVzKCkuaXRlcmF0b3IoKTsKKyAgICAgICAgICAgIHdoaWxlICggbWFwc0l0ZXIuaGFzTmV4dCgpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBNYXAgICAgaW5zdGFuY2VzTWFwICAgID0gKE1hcCltYXBzSXRlci5uZXh0KCk7CisgICAgICAgICAgICAgICAgZmluYWwgQU1YICAgIGZpcnN0ICAgID0gKEFNWClpbnN0YW5jZXNNYXAudmFsdWVzKCkuaXRlcmF0b3IoKS5uZXh0KCk7CisgICAgICAgICAgICAgICAgaWYgKCBmaXJzdCBpbnN0YW5jZW9mIENvbnRhaW5lciApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5hZGQoIGluc3RhbmNlc01hcCApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SGllcmFyY2h5KCBpbnN0YW5jZXNNYXAudmFsdWVzKCksIGluZGVudENvdW50ICsgMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBkaXNwbGF5IGRlZmVycmVkIGl0ZW1zCisgICAgICAgICAgICBmaW5hbCBJdGVyYXRvciAgICBpdGVyICAgID0gZGVmZXJyZWQuaXRlcmF0b3IoKTsKKyAgICAgICAgICAgIHdoaWxlICggaXRlci5oYXNOZXh0KCkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZpbmFsIE1hcCAgICBpbnN0YW5jZXNNYXAgICAgPSAoTWFwKWl0ZXIubmV4dCgpOworICAgICAgICAgICAgICAgIGRpc3BsYXlIaWVyYXJjaHkoIGluc3RhbmNlc01hcC52YWx1ZXMoKSwgaW5kZW50Q291bnQgKyAyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfQorCisgICAgLyoqCisgICAgICAgIERpc3BsYXkgdGhlIGVudGlyZSBNQmVhbiBoaWVyYXJjaHkuCisgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkCisgICAgZGlzcGxheUhpZXJhcmNoeSgpCisgICAgeworICAgICAgICBkaXNwbGF5SGllcmFyY2h5KCBnZXREb21haW5Sb290KCksIDApOworICAgIH0KKworICAgIC8qKgorICAgICAgICBEaXNwbGF5IHRoZSBNQmVhbiBoaWVyYXJjaHkgYmVnaW5uaW5nIHdpdGggajJlZVR5cGUuCisgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkCisgICAgZGlzcGxheUhpZXJhcmNoeSggZmluYWwgU3RyaW5nIGoyZWVUeXBlICkKKyAgICB7CisgICAgICAgIGZpbmFsIFNldCAgICBpdGVtcyAgICA9IGdldFF1ZXJ5TWdyKCkucXVlcnlKMkVFVHlwZVNldCggajJlZVR5cGUgKTsKKworICAgICAgICBpZiAoIGl0ZW1zLnNpemUoKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRsbiggIk5vIHtAbGluayBBTVh9IG9mIGoyZWVUeXBlICIgKyBTYW1wbGVVdGlsLnF1b3RlKCBqMmVlVHlwZSApICsgIiBmb3VuZCIgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRpc3BsYXlIaWVyYXJjaHkoIGl0ZW1zLCAwKTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICAgIERpc3BsYXkgYWxsIE1CZWFucyB0aGF0IGhhdmUgajJlZVR5cGU9PGoyZWVUeXBlPgorICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZAorICAgIGRpc3BsYXlKMkVFVHlwZSggZmluYWwgU3RyaW5nIGoyZWVUeXBlICkKKyAgICB7CisgICAgICAgIGZpbmFsIFNldCAgICAgICAgaXRlbXMgICAgPSBxdWVyeUZvckoyRUVUeXBlKCBqMmVlVHlwZSApOworCisgICAgICAgIHByaW50bG4oICJcbi0tLSBRdWVyaWVkIGZvciBqMmVlVHlwZT0iICsgajJlZVR5cGUgKyAiIC0tLSIgKTsKKworICAgICAgICBmaW5hbCBJdGVyYXRvciAgICBpdGVyICAgID0gaXRlbXMuaXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUgKCBpdGVyLmhhc05leHQoKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpbmFsIEFNWCAgICBpdGVtICAgID0gKEFNWClpdGVyLm5leHQoKTsKKworICAgICAgICAgICAgLy8gdGhleSBtYXkgb3IgbWF5IG5vdCBoYXZlIHVuaXF1ZSBuYW1lcywgc28gc2hvdyBPYmplY3ROYW1lcworICAgICAgICAgICAgcHJpbnRsbiggVXRpbC5nZXRPYmplY3ROYW1lKCBpdGVtICkgKTsKKyAgICAgICAgfQorICAgICAgICBwcmludGxuKCAiIiApOworICAgIH0KKworCisgICAgLyoqCisgICAgICAgIERpc3BsYXkgYWxsIEF0dHJpYnV0ZXMgaW4gdGhlIHtAbGluayBBTVh9LgorICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZAorICAgIGRpc3BsYXlBbGxBdHRyaWJ1dGVzKCBmaW5hbCBBTVggaXRlbSApCisgICAgeworICAgICAgICBwcmludGxuKCAiXG4tLS0gQXR0cmlidXRlcyBmb3IgIiArIGl0ZW0uZ2V0SjJFRVR5cGUoKSArICI9IiArIGl0ZW0uZ2V0TmFtZSgpICsgIiAtLS0iICk7CisKKyAgICAgICAgZmluYWwgRXh0cmEgICAgZXh0cmEgICAgPSBVdGlsLmdldEV4dHJhKCBpdGVtICk7CisKKyAgICAgICAgZmluYWwgTWFwICAgIGF0dHJzICAgID0gZXh0cmEuZ2V0QWxsQXR0cmlidXRlcygpOworCisgICAgICAgIGZpbmFsIEl0ZXJhdG9yICAgIGl0ZXIgICAgPSBhdHRycy5rZXlTZXQoKS5pdGVyYXRvcigpOworICAgICAgICB3aGlsZSAoIGl0ZXIuaGFzTmV4dCgpICkKKyAgICAgICAgeworICAgICAgICAgICAgZmluYWwgU3RyaW5nICAgIG5hbWUgICAgPSAoU3RyaW5nKWl0ZXIubmV4dCgpOworICAgICAgICAgICAgZmluYWwgT2JqZWN0ICAgIHZhbHVlICAgID0gYXR0cnMuZ2V0KCBuYW1lICk7CisKKyAgICAgICAgICAgIHByaW50bG4oIG5hbWUgKyAiPSIgKyB0b1N0cmluZyggdmFsdWUgKSApOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICAgIERpc3BsYXkgYWxsIEF0dHJpYnV0ZXMgaW4gdGhlIHtAbGluayBBTVh9LgorICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZAorICAgIGRpc3BsYXlBbGxBdHRyaWJ1dGVzKCBmaW5hbCBTdHJpbmcgajJlZVR5cGUgKQorICAgIHsKKyAgICAgICAgZmluYWwgU2V0ICAgICAgICBpdGVtcyAgICA9IHF1ZXJ5Rm9ySjJFRVR5cGUoIGoyZWVUeXBlICk7CisKKyAgICAgICAgaWYgKCBpdGVtcy5zaXplKCkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50bG4oICJObyB7QGxpbmsgQU1YfSBvZiBqMmVlVHlwZSAiICsgU2FtcGxlVXRpbC5xdW90ZSggajJlZVR5cGUgKSArICIgZm91bmQiICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBmaW5hbCBJdGVyYXRvciAgICBpdGVyICAgID0gaXRlbXMuaXRlcmF0b3IoKTsKKyAgICAgICAgICAgIHdoaWxlICggaXRlci5oYXNOZXh0KCkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZpbmFsIEFNWCAgICBhbXggICAgPSAoQU1YKWl0ZXIubmV4dCgpOworCisgICAgICAgICAgICAgICAgZGlzcGxheUFsbEF0dHJpYnV0ZXMoIGFteCApOworICAgICAgICAgICAgICAgIHByaW50bG4oICIiICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qKgorICAgICAgICBEaXNwbGF5IGFsbCBkb3R0ZWQgbmFtZXMuCisgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkCisgICAgZGlzcGxheURvdHRlZE5hbWVzKCkKKyAgICB7CisgICAgICAgIGZpbmFsIENvbmZpZ0RvdHRlZE5hbWVzICAgIGNvbmZpZ0RvdHRlZE5hbWVzICAgID0gZ2V0RG9tYWluUm9vdCgpLmdldENvbmZpZ0RvdHRlZE5hbWVzKCk7CisgICAgICAgIEF0dHJpYnV0ZVtdIHJlc3VsdCAgICA9IChBdHRyaWJ1dGVbXSljb25maWdEb3R0ZWROYW1lcy5kb3R0ZWROYW1lR2V0KCAiKiIgKTsKKyAgICAgICAgcHJpbnRsbiggIi0tLSBDb25maWdEb3R0ZWROYW1lcyAtLS0iICk7CisgICAgICAgIHByaW50bG4oIFNhbXBsZVV0aWwuYXJyYXlUb1N0cmluZyggcmVzdWx0LCAiIiwgIlxuIiApICk7CisKKyAgICAgICAgcHJpbnRsbiggIlxuLS0tIE1vbml0b3JpbmdEb3R0ZWROYW1lcyAtLS0iICk7CisKKyAgICAgICAgZmluYWwgTW9uaXRvcmluZ0RvdHRlZE5hbWVzICAgIG1vbkRvdHRlZE5hbWVzICAgID0gZ2V0RG9tYWluUm9vdCgpLmdldE1vbml0b3JpbmdEb3R0ZWROYW1lcygpOworICAgICAgICByZXN1bHQgICAgPSAoQXR0cmlidXRlW10pbW9uRG90dGVkTmFtZXMuZG90dGVkTmFtZUdldCggIioiICk7CisgICAgICAgIHByaW50bG4oIFNhbXBsZVV0aWwuYXJyYXlUb1N0cmluZyggcmVzdWx0LCAiIiwgIlxuIiApICk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgICAgRGVtb25zdHJhdGUgaG93IHRvIHVzZSB0aGUge0BsaW5rIGNvbS5zdW4uYXBwc2Vydi5tYW5hZ2VtZW50LmJhc2UuUXVlcnlNZ3J9IGZhY2lsaXRpZXMuCisgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkCisgICAgZGVtb1F1ZXJ5KCkKKyAgICB7CisgICAgICAgIGRpc3BsYXlXaWxkKCBBTVguSjJFRV9UWVBFX0tFWSwgIlgtKlJlc291cmNlQ29uZmlnIiApOworICAgICAgICBkaXNwbGF5V2lsZCggQU1YLkoyRUVfVFlQRV9LRVksICJYLSpTZXJ2ZXJDb25maWciICk7CisKKyAgICAgICAgZGlzcGxheUoyRUVUeXBlKCBYVHlwZXMuU1NMX0NPTkZJRyApOworICAgICAgICBkaXNwbGF5SjJFRVR5cGUoIFhUeXBlcy5DTFVTVEVSX0NPTkZJRyApOworICAgIH0KKworCisgICAgICAgIHByaXZhdGUgT2JqZWN0CisgICAgdXBsb2FkQXJjaGl2ZSggZmluYWwgRmlsZSBhcmNoaXZlICApCisgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgZmluYWwgRmlsZUlucHV0U3RyZWFtICAgIGlucHV0ICAgID0gbmV3IEZpbGVJbnB1dFN0cmVhbSggYXJjaGl2ZSApOworICAgICAgICBmaW5hbCBsb25nICAgIGxlbmd0aCAgICA9IGlucHV0LmF2YWlsYWJsZSgpOworICAgICAgICBmaW5hbCBEZXBsb3ltZW50TWdyICAgIG1nciAgICA9IGdldERvbWFpblJvb3QoKS5nZXREZXBsb3ltZW50TWdyKCk7CisgICAgICAgIGZpbmFsIE9iamVjdCAgICB1cGxvYWRJRCAgICA9IG1nci5pbml0aWF0ZUZpbGVVcGxvYWQoIGxlbmd0aCApOworCisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICBmaW5hbCBpbnQgICAgY2h1bmtTaXplICAgID0gMjU2ICogMTAyNDsKKyAgICAgICAgICAgIGxvbmcgcmVtYWluaW5nICAgID0gbGVuZ3RoOworICAgICAgICAgICAgd2hpbGUgKCByZW1haW5pbmcgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmluYWwgaW50ICAgIGFjdHVhbCAgICA9IHJlbWFpbmluZyA8IGNodW5rU2l6ZSA/IChpbnQpcmVtYWluaW5nIDogY2h1bmtTaXplOworCisgICAgICAgICAgICAgICAgZmluYWwgYnl0ZVtdICAgIGJ5dGVzICAgID0gbmV3IGJ5dGVbIGFjdHVhbCBdOworICAgICAgICAgICAgICAgIGZpbmFsIGludCAgICBudW0gICAgPSBpbnB1dC5yZWFkKCBieXRlcyApOworICAgICAgICAgICAgICAgIGlmICggbnVtICE9IGFjdHVhbCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtZ3IudXBsb2FkQnl0ZXMoIHVwbG9hZElELCBieXRlcyApOworICAgICAgICAgICAgICAgIHJlbWFpbmluZyAgICAtPSBhY3R1YWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZmluYWxseQorICAgICAgICB7CisgICAgICAgICAgICBpbnB1dC5jbG9zZSgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuKCB1cGxvYWRJRCApOworICAgIH0KKworCisgICAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nCisgICAgZ2V0QXBwTmFtZSggZmluYWwgU3RyaW5nIGFyY2hpdmVOYW1lICkKKyAgICB7CisgICAgICAgIFN0cmluZyAgICByZXN1bHQgICAgPSBhcmNoaXZlTmFtZTsKKworICAgICAgICBmaW5hbCBpbnQgICAgaWR4ICAgID0gYXJjaGl2ZU5hbWUubGFzdEluZGV4T2YoICIuIiApOworICAgICAgICBpZiAoIGlkeCA+IDEgKQorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgICAgPSBhcmNoaXZlTmFtZS5zdWJzdHJpbmcoIDAsIGlkeCApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuKCByZXN1bHQgKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgICAgRGVwbG95IGFuIGFyY2hpdmUuCisgICAgICAgIDxwPgorICAgICAgICBUbyBkZXBsb3ksIHlvdSB3aWxsIG5lZWQgYW4gYXJjaGl2ZSB0byBkZXBsb3kuICBBIHJlY29tbWVuZGVkIHNhbXBsZSBtYXkgYmUgZm91bmQgYXQ6CisgICAgICAgIDxpPklOU1RBTExfUk9PVDwvaT4vc2FtcGxlcy9lamIvc3RhdGVsZXNzL2FwcHMvc2ltcGxlLmVhcgorICAgICAgICA8cD4KKyAgICAgICAgVGhpcyBzYW1wbGUgZGVwbG95cyB0aGUgYXJjaGl2ZSB0byB0aGUgZG9tYWluLCBidXQgZG9lcyBub3QgY3JlYXRlIGFueSByZWZlcmVuY2VzCisgICAgICAgIHRvIGl0LCBzbyBpdCB3aWxsIG5vdCBhY3R1YWxseSBiZSBhc3NvY2lhdGVkIHdpdGggYW55IHNlcnZlci4KKyAgICAgICAgPHA+CisgICAgICAgIFRvIGFzc29jaWF0ZSBhbiBhcHBsaWNhdGlvbiB3aXRoIGEgc2VydmVyLCB1c2UKKyAgICAgICAge0BsaW5rIFN0YW5kYWxvbmVTZXJ2ZXJDb25maWcjY3JlYXRlRGVwbG95ZWRJdGVtUmVmQ29uZmlnfQorICAgICAgICBAc2VlIGNvbS5zdW4uYXBwc2Vydi5tYW5hZ2VtZW50LmNvbmZpZy5TdGFuZGFsb25lU2VydmVyQ29uZmlnCisgICAgICAgIEBzZWUgY29tLnN1bi5hcHBzZXJ2Lm1hbmFnZW1lbnQuY29uZmlnLkRlcGxveWVkSXRlbVJlZkNvbmZpZ0NSCisgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkCisgICAgZGVwbG95KCBmaW5hbCBGaWxlIGFyY2hpdmUgKQorICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KKyAgICB7CisgICAgICAgIGZpbmFsIE9iamVjdCAgICB1cGxvYWRJRCAgICA9IHVwbG9hZEFyY2hpdmUoIGFyY2hpdmUgKTsKKyAgICAgICAgZmluYWwgRGVwbG95bWVudE1nciAgICBtZ3IgICAgPSBnZXREb21haW5Sb290KCkuZ2V0RGVwbG95bWVudE1ncigpOworCisgICAgICAgIGZpbmFsIE9iamVjdCAgICBkZXBsb3lJRCAgICA9IG1nci5pbml0RGVwbG95KCApOworICAgICAgICBmaW5hbCBEZXBsb3lOb3RpZmljYXRpb25MaXN0ZW5lciBteUxpc3RlbmVyICAgID0gbmV3IERlcGxveU5vdGlmaWNhdGlvbkxpc3RlbmVyKCBkZXBsb3lJRCk7CisgICAgICAgIG1nci5hZGROb3RpZmljYXRpb25MaXN0ZW5lciggbXlMaXN0ZW5lciwgbnVsbCwgbnVsbCk7CisKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIGZpbmFsIE1hcCAgICBvcHRpb25zICAgID0gbmV3IEhhc2hNYXAoKTsKKworICAgICAgICAgICAgZmluYWwgU3RyaW5nICAgIGFyY2hpdmVOYW1lICAgID0gYXJjaGl2ZS5nZXROYW1lKCk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgICAgZGVwbG95TmFtZSAgICA9IGdldEFwcE5hbWUoIGFyY2hpdmVOYW1lICk7CisgICAgICAgICAgICBTYW1wbGVVdGlsLnByaW50bG4oICJEZXBsb3lpbmcgIiArIGFyY2hpdmVOYW1lICsgIiBhcyAiICsgZGVwbG95TmFtZSApOworCisgICAgICAgICAgICBvcHRpb25zLnB1dCggRGVwbG95bWVudE1nci5ERVBMT1lfT1BUSU9OX05BTUVfS0VZLCBkZXBsb3lOYW1lICk7CisgICAgICAgICAgICBvcHRpb25zLnB1dCggRGVwbG95bWVudE1nci5ERVBMT1lfT1BUSU9OX1ZFUklGWV9LRVksIEJvb2xlYW4uVFJVRS50b1N0cmluZygpICk7CisgICAgICAgICAgICBvcHRpb25zLnB1dCggRGVwbG95bWVudE1nci5ERVBMT1lfT1BUSU9OX0RFU0NSSVBUSU9OX0tFWSwgImRlc2NyaXB0aW9uIiApOworCisKKyAgICAgICAgICAgIG1nci5zdGFydERlcGxveSggZGVwbG95SUQsIHVwbG9hZElELCBudWxsLCBvcHRpb25zKTsKKworICAgICAgICAgICAgd2hpbGUgKCAhIG15TGlzdGVuZXIuaXNDb21wbGV0ZWQoKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwcmludGxuKCAiZGVwbG95OiB3YWl0aW5nIGZvciBkZXBsb3kgb2YgIiArIGFyY2hpdmUpOworICAgICAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoIDEwMDAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2F0Y2goIEludGVycnVwdGVkRXhjZXB0aW9uIGUgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZpbmFsIERlcGxveW1lbnRTdGF0dXMgICAgc3RhdHVzICAgID0gbXlMaXN0ZW5lci5nZXREZXBsb3ltZW50U3RhdHVzKCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgICAgc3RhdHVzQ29kZSAgICA9IHN0YXR1cy5nZXRTdGF0dXNDb2RlKCk7CisgICAgICAgICAgICBpZiAoIHN0YXR1c0NvZGUgPT0gRGVwbG95bWVudFN0YXR1cy5TVEFUVVNfQ09ERV9TVUNDRVNTICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBNYXAgICAgYWRkaXRpb25hbFN0YXR1cyAgICA9IHN0YXR1cy5nZXRBZGRpdGlvbmFsU3RhdHVzKCk7CisgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nICAgIG1vZHVsZUlEICAgID0KKyAgICAgICAgICAgICAgICAgICAgKFN0cmluZylhZGRpdGlvbmFsU3RhdHVzLmdldCggRGVwbG95bWVudFN0YXR1cy5NT0RVTEVfSURfS0VZICk7CisKKyAgICAgICAgICAgICAgICBTYW1wbGVVdGlsLnByaW50bG4oICJEZXBsb3llZCAiICsgcXVvdGUoYXJjaGl2ZU5hbWUpICsgIiBhcyAiICsgcXVvdGUoZGVwbG95TmFtZSkgKworICAgICAgICAgICAgICAgICAgICAgIjogc3RhdHVzPSIgKyBzdGF0dXMuZ2V0U3RhZ2VTdGF0dXMoKSArICIsIG1vZHVsZUlEID0gIiArIHF1b3RlKG1vZHVsZUlEKSArCisgICAgICAgICAgICAgICAgICAgICAiLCBBZGRpdGlvbmFsU3RhdHVzPSIgKyBTYW1wbGVVdGlsLm1hcFRvU3RyaW5nKCBhZGRpdGlvbmFsU3RhdHVzLCAiICIpICk7CisKKyAgICAgICAgICAgICAgICBpZiAoICEgZGVwbG95TmFtZS5lcXVhbHMoIG1vZHVsZUlEICkgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgU2FtcGxlVXRpbC5wcmludGxuKCAiV0FSTklORzogcmVxdWVzdGVkIG5hbWUgb2YgIiArIHF1b3RlKGRlcGxveU5hbWUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICIgaGFzIG5vdCBiZWVuIHVzZWQsIGFjdHVhbCBuYW1lID0gIiArIHF1b3RlKG1vZHVsZUlEKSArCisgICAgICAgICAgICAgICAgICAgICAgICAiLCBzZWUgYnVnICM2MjE4NzE0IiApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTYW1wbGVVdGlsLnByaW50bG4oICJEZXBsb3ltZW50IG9mICIgKyBxdW90ZSggYXJjaGl2ZU5hbWUgKSArCisgICAgICAgICAgICAgICAgICAgICIgRkFJTEVELCBzdGF0dXMgY29kZSA9ICIgKyBzdGF0dXNDb2RlICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggc3RhdHVzLmdldFN0YWdlVGhyb3dhYmxlKCkgIT0gbnVsbCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RhdHVzLmdldFN0YWdlVGhyb3dhYmxlKCkucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZmluYWxseQorICAgICAgICB7CisgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtZ3IucmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoIG15TGlzdGVuZXIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcKKyAgICBxdW90ZSggZmluYWwgU3RyaW5nIHMgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNhbXBsZVV0aWwucXVvdGUoIHMgKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgICAgVW5kZXBsb3lzIGEgZGVwbG95ZWQgbW9kdWxlLgorICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZAorICAgIHVuZGVwbG95KCBmaW5hbCBTdHJpbmcgbW9kdWxlTmFtZSApCisgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgZmluYWwgRGVwbG95bWVudE1nciAgICBtZ3IgICAgPSBnZXREb21haW5Sb290KCkuZ2V0RGVwbG95bWVudE1ncigpOworCisgICAgICAgIGZpbmFsIE1hcCAgICBzdGF0dXNEYXRhICAgID0gbWdyLnVuZGVwbG95KCBtb2R1bGVOYW1lLCBudWxsICk7CisgICAgICAgIGZpbmFsIERlcGxveW1lbnRTdGF0dXMgICAgc3RhdHVzICAgID0KKyAgICAgICAgICAgIERlcGxveW1lbnRTdXBwb3J0Lm1hcFRvRGVwbG95bWVudFN0YXR1cyggc3RhdHVzRGF0YSApOworCisgICAgICAgIHByaW50bG4oICJVbmRlcGxveW1lbnQgcmVzdWx0OiAiICsgc3RhdHVzLmdldFN0YWdlU3RhdHVzKCkgKTsKKyAgICAgICAgaWYgKCBzdGF0dXMuZ2V0U3RhZ2VUaHJvd2FibGUoKSAhPSBudWxsICkKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzLmdldFN0YWdlVGhyb3dhYmxlKCkucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgICAgR2V0IGEgSjJFRVNlcnZlciBieSBuYW1lLgorICAgICAqLworICAgICAgICBwdWJsaWMgSjJFRVNlcnZlcgorICAgIGdldEoyRUVTZXJ2ZXIoIGZpbmFsIFN0cmluZyBzZXJ2ZXJOYW1lICkKKyAgICB7CisgICAgICAgIGZpbmFsIEoyRUVEb21haW4gICAgajJlZURvbWFpbiAgICA9IGdldERvbWFpblJvb3QoKS5nZXRKMkVFRG9tYWluKCk7CisgICAgICAgIGZpbmFsIE1hcCAgICAgICAgICAgIHNlcnZlcnMgICAgPSBqMmVlRG9tYWluLmdldFNlcnZlck1hcCgpOworICAgICAgICBmaW5hbCBKMkVFU2VydmVyICAgIHNlcnZlciAgICA9IChKMkVFU2VydmVyKXNlcnZlcnMuZ2V0KCBzZXJ2ZXJOYW1lICk7CisKKyAgICAgICAgaWYgKCBzZXJ2ZXIgPT0gbnVsbCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIHNlcnZlck5hbWUgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiggc2VydmVyICk7CisgICAgfQorCisgICAgLyoqCisgICAgICAgIENyZWF0ZSBhIHN0YW5kYWxvbmUgc2VydmVyLgorCisgICAgICAgIEBwYXJhbSBjb25maWdOYW1lCisgICAgICovCisgICAgICAgIHB1YmxpYyBDb25maWdDb25maWcKKyAgICBjcmVhdGVDb25maWcoIGZpbmFsIFN0cmluZyBjb25maWdOYW1lICkKKyAgICB7CisgICAgICAgIGZpbmFsIENvbmZpZ0NvbmZpZyAgICBjb25maWcgICAgPSBnZXREb21haW5Db25maWcoKS5jcmVhdGVDb25maWdDb25maWcoIGNvbmZpZ05hbWUsIG51bGwgKTsKKyAgICAgICAgcmV0dXJuKCBjb25maWcgKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgICAgQ3JlYXRlIGEgc3RhbmRhbG9uZSBzZXJ2ZXIuCisKKyAgICAgICAgQHBhcmFtIHNlcnZlck5hbWUKKyAgICAgKi8KKyAgICAgICAgcHVibGljIFN0YW5kYWxvbmVTZXJ2ZXJDb25maWcKKyAgICBjcmVhdGVTZXJ2ZXIoCisgICAgICAgIGZpbmFsIFN0cmluZyAgICBzZXJ2ZXJOYW1lLAorICAgICAgICBmaW5hbCBTdHJpbmcgICAgY29uZmlnTmFtZSApCisgICAgeworICAgICAgICBmaW5hbCBTdHJpbmcgICAgbm9kZUFnZW50TmFtZSAgICA9IG51bGw7CisKKyAgICAgICAgZmluYWwgU3RhbmRhbG9uZVNlcnZlckNvbmZpZyAgICBzZXJ2ZXIgICAgPSAoU3RhbmRhbG9uZVNlcnZlckNvbmZpZykKKyAgICAgICAgICAgIGdldERvbWFpbkNvbmZpZygpLmNyZWF0ZVN0YW5kYWxvbmVTZXJ2ZXJDb25maWcoIHNlcnZlck5hbWUsIG5vZGVBZ2VudE5hbWUsIGNvbmZpZ05hbWUsIG51bGwgKTsKKworICAgICAgICByZXR1cm4oIHNlcnZlciApOworICAgIH0KKworICAgICAgICBwdWJsaWMgU3RhbmRhbG9uZVNlcnZlckNvbmZpZworICAgIGNyZWF0ZVNlcnZlciggZmluYWwgU3RyaW5nICAgIHNlcnZlck5hbWUgKQorICAgIHsKKyAgICAgICAgZmluYWwgQ29uZmlnQ29uZmlnICAgIGNvbmZpZyAgICA9IGNyZWF0ZUNvbmZpZyggc2VydmVyTmFtZSArICItY29uZmlnIiApOworCisgICAgICAgIGZpbmFsIFN0YW5kYWxvbmVTZXJ2ZXJDb25maWcgICAgc2VydmVyICAgID0gY3JlYXRlU2VydmVyKCBzZXJ2ZXJOYW1lLCBjb25maWcuZ2V0TmFtZSgpICk7CisgICAgICAgIHJldHVybiggc2VydmVyICk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgICAgU3RhcnQgYSBzZXJ2ZXIuCisgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkCisgICAgc3RhcnRTZXJ2ZXIoIGZpbmFsIFN0cmluZyBzZXJ2ZXJOYW1lICkKKyAgICB7CisgICAgICAgIGZpbmFsIEoyRUVTZXJ2ZXIgICAgc2VydmVyICAgID0gZ2V0SjJFRVNlcnZlciggc2VydmVyTmFtZSApOworCisgICAgICAgIHNlcnZlci5zdGFydCgpOworICAgIH0KKworICAgIC8qKgorICAgICAgICBTdG9wIGEgc2VydmVyLgorICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZAorICAgIHN0b3BTZXJ2ZXIoIGZpbmFsIFN0cmluZyBzZXJ2ZXJOYW1lICkKKyAgICB7CisgICAgICAgIGZpbmFsIEoyRUVTZXJ2ZXIgICAgc2VydmVyICAgID0gZ2V0SjJFRVNlcnZlciggc2VydmVyTmFtZSApOworCisgICAgICAgIHNlcnZlci5zdG9wKCk7CisgICAgfQorCisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTZXQgICAgTEVHQUxfTU9OICAgID0KKyAgICAgICAgQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlU2V0KCBTYW1wbGVVdGlsLm5ld1NldCggbmV3IFN0cmluZ1tdCisgICAgeworICAgICAgICBNb2R1bGVNb25pdG9yaW5nTGV2ZWxWYWx1ZXMuSElHSCwKKyAgICAgICAgTW9kdWxlTW9uaXRvcmluZ0xldmVsVmFsdWVzLkxPVywKKyAgICAgICAgTW9kdWxlTW9uaXRvcmluZ0xldmVsVmFsdWVzLk9GRiwKKyAgICB9ICkpOworCisgICAgLyoqCisgICAgICAgIFNldHMgdGhlIG1vbml0b3Jpbmcgc3RhdGUgZm9yIGFsbCBhdmFpbGFibGUgbW9kdWxlcy4KKworICAgICAgICBAcGFyYW0gY29uZmlnTmFtZSAgICBjb25maWd1cmF0aW9uIGVsZW1lbnQgb24gd2hpY2ggdG8gb3BlcmF0ZQorICAgICAgICBAcGFyYW0gc3RhdGUgICAgICAgIG9uZSBvZiBISUdILCBMT1csIE9GRgorICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZAorICAgIHNldE1vbml0b3JpbmcoCisgICAgICAgIGZpbmFsIFN0cmluZyAgICBjb25maWdOYW1lLAorICAgICAgICBmaW5hbCBTdHJpbmcgICAgIHN0YXRlICkKKyAgICB7CisgICAgICAgIGlmICggISBMRUdBTF9NT04uY29udGFpbnMoIHN0YXRlICkgKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCBzdGF0ZSApOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgQ29uZmlnQ29uZmlnICAgIGNvbmZpZyAgICA9CisgICAgICAgICAgICAoQ29uZmlnQ29uZmlnKWdldERvbWFpbkNvbmZpZygpLmdldENvbmZpZ0NvbmZpZ01hcCgpLmdldCggY29uZmlnTmFtZSApOworCisgICAgICAgIGZpbmFsIE1vZHVsZU1vbml0b3JpbmdMZXZlbHNDb25maWcgICAgbW9uICAgID0KKyAgICAgICAgICAgIGNvbmZpZy5nZXRNb25pdG9yaW5nU2VydmljZUNvbmZpZygpLmdldE1vZHVsZU1vbml0b3JpbmdMZXZlbHNDb25maWcoKTsKKworICAgICAgICAvLyBzZXQgYWxsIG1vZHVsZXMgdG8gdGhlIHNhbWUgc3RhdGUKKyAgICAgICAgbW9uLnNldENvbm5lY3RvckNvbm5lY3Rpb25Qb29sKCBzdGF0ZSApOworICAgICAgICBtb24uc2V0VGhyZWFkUG9vbCggc3RhdGUgKTsKKyAgICAgICAgbW9uLnNldEhUVFBTZXJ2aWNlKCBzdGF0ZSApOworICAgICAgICBtb24uc2V0SkRCQ0Nvbm5lY3Rpb25Qb29sKCBzdGF0ZSApOworICAgICAgICBtb24uc2V0T1JCKCBzdGF0ZSApOworICAgICAgICBtb24uc2V0VHJhbnNhY3Rpb25TZXJ2aWNlKCBzdGF0ZSApOworICAgICAgICBtb24uc2V0V2ViQ29udGFpbmVyKCBzdGF0ZSApOworICAgICAgICBtb24uc2V0RUpCQ29udGFpbmVyKCBzdGF0ZSApOworICAgIH0KKworICAgIC8qKgorICAgICAgICBHZXQgYSBNYXAgb2YgPGk+cHJvcGVydHktbmFtZTwvaT49PGk+cHJvcGVydHktdmFsdWU8L2k+LgorCisgICAgICAgIEBwYXJhbSBwYSAgICBhIFByb3BlcnRpZXNBY2Nlc3MKKyAgICAgKi8KKyAgICAgICAgcHVibGljIE1hcAorICAgIGdldFByb3BlcnRpZXMoIGZpbmFsIFByb3BlcnRpZXNBY2Nlc3MgcGEgKQorICAgIHsKKyAgICAgICAgZmluYWwgSGFzaE1hcCAgICBtICAgID0gbmV3IEhhc2hNYXAoKTsKKworICAgICAgICBmaW5hbCBTdHJpbmdbXSAgICBuYW1lcyAgICA9IHBhLmdldFByb3BlcnR5TmFtZXMoKTsKKyAgICAgICAgZm9yKCBpbnQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7ICsraSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG0ucHV0KCBuYW1lc1sgaSBdLCBwYS5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lc1sgaSBdICkgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiggbSApOworICAgIH0KKworICAgIC8qKgorICAgICAgICBEaXNwbGF5IGFsbCBwcm9wZXJ0aWVzIGZvdW5kIG9uIGFsbCB7QGxpbmsgQU1YfS4KKworICAgICAgICBAc2VlICNnZXRQcm9wZXJ0aWVzKFByb3BlcnRpZXNBY2Nlc3MpCisgICAgICAgIEBzZWUgUHJvcGVydGllc0FjY2VzcyNnZXRQcm9wZXJ0eU5hbWVzCisgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkCisgICAgZGlzcGxheUFsbFByb3BlcnRpZXMoICkKKyAgICB7CisgICAgICAgIGZpbmFsIEl0ZXJhdG9yICAgIGl0ZXIgICAgPSBnZXRRdWVyeU1ncigpLnF1ZXJ5QWxsU2V0KCkuaXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUgKCBpdGVyLmhhc05leHQoKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpbmFsIEFNWCAgICBhbXggICAgPSAoQU1YKWl0ZXIubmV4dCgpOworCisgICAgICAgICAgICBpZiAoIGFteCBpbnN0YW5jZW9mIFByb3BlcnRpZXNBY2Nlc3MgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZpbmFsIFByb3BlcnRpZXNBY2Nlc3MgICAgcGEgICAgPSAoUHJvcGVydGllc0FjY2VzcylhbXg7CisKKyAgICAgICAgICAgICAgICBmaW5hbCBNYXAgICAgcHJvcHMgICAgPSBnZXRQcm9wZXJ0aWVzKCBwYSApOworICAgICAgICAgICAgICAgIGlmICggcHJvcHMua2V5U2V0KCkuc2l6ZSgpICE9IDAgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRsbiggIlxuUHJvcGVydGllcyBmb3I6ICIgKyBVdGlsLmdldE9iamVjdE5hbWUoIChBTVgpcGEgKSApOworICAgICAgICAgICAgICAgICAgICBwcmludGxuKCBTYW1wbGVVdGlsLm1hcFRvU3RyaW5nKCBnZXRQcm9wZXJ0aWVzKCBwYSApLCAiXG4iKSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQKKyAgICBteVNsZWVwKCBmaW5hbCBsb25nIG1pbGxpcyApCisgICAgeworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAgICAgVGhyZWFkLnNsZWVwKCBtaWxsaXMgKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCggSW50ZXJydXB0ZWRFeGNlcHRpb24gZSApCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgICAgTUJFQU5fU0VSVkVSX0RFTEVHQVRFICAgID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSk1JbXBsZW1lbnRhdGlvbjp0eXBlPU1CZWFuU2VydmVyRGVsZWdhdGUiOworICAgICAgICBwdWJsaWMgc3RhdGljIE9iamVjdE5hbWUKKyAgICBnZXRNQmVhblNlcnZlckRlbGVnYXRlT2JqZWN0TmFtZSgpCisgICAgeworICAgICAgICByZXR1cm4oIFV0aWwubmV3T2JqZWN0TmFtZSggTUJFQU5fU0VSVkVSX0RFTEVHQVRFICkgKTsKKyAgICB9CisKKworICAgICAgICBwcml2YXRlIHZvaWQKKyAgICB3YWl0TnVtTm90aWZzKCBmaW5hbCBNYXAgbm90aWZzLCBmaW5hbCBTdHJpbmcgdHlwZSwgZmluYWwgaW50IG51bVJlcXVpcmVkICkKKyAgICB7CisgICAgICAgIHdoaWxlICggdHJ1ZSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpbmFsIExpc3QgICAgbGlzdCAgICA9IChMaXN0KW5vdGlmcy5nZXQoIHR5cGUgKTsKKyAgICAgICAgICAgIGlmICggbGlzdCAhPSBudWxsICYmIGxpc3Quc2l6ZSgpID49IG51bVJlcXVpcmVkICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbXlTbGVlcCggNTAgKTsKKyAgICAgICAgfQorICAgIH0KKworCisKKyAgICAgICAgcHJpdmF0ZSB2b2lkCisgICAgd2FpdE1CZWFuU2VydmVyTm90aWZpY2F0aW9uKAorICAgICAgICBmaW5hbCBTYW1wbGVMaXN0ZW5lciAgICBsaXN0ZW5lciwKKyAgICAgICAgZmluYWwgU3RyaW5nICAgICAgICAgICAgdHlwZSwKKyAgICAgICAgZmluYWwgT2JqZWN0TmFtZSAgICAgICAgb2JqZWN0TmFtZSApCisgICAgeworICAgICAgICBMaXN0ICAgICAgICBsaXN0ICAgID0gbnVsbDsKKyAgICAgICAgd2hpbGUgKCAobGlzdCA9IGxpc3RlbmVyLmdldE5vdGlmc1JlY2VpdmVkKCB0eXBlICkpID09IG51bGwgKQorICAgICAgICB7CisgICAgICAgICAgICBteVNsZWVwKCA1MCApOworICAgICAgICB9CisKKyAgICAgICAgYm9vbGVhbiAgICB3YWl0aW5nICAgID0gdHJ1ZTsKKyAgICAgICAgd2hpbGUgKCB3YWl0aW5nICkKKyAgICAgICAgeworICAgICAgICAgICAgZmluYWwgSXRlcmF0b3IgICAgaXRlciAgICA9IGxpc3QuaXRlcmF0b3IoKTsKKyAgICAgICAgICAgIHdoaWxlICggaXRlci5oYXNOZXh0KCkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZpbmFsIE1CZWFuU2VydmVyTm90aWZpY2F0aW9uICAgIG5vdGlmICAgID0gKE1CZWFuU2VydmVyTm90aWZpY2F0aW9uKWl0ZXIubmV4dCgpOworICAgICAgICAgICAgICAgIGlmICggbm90aWYuZ2V0TUJlYW5OYW1lKCkuZXF1YWxzKCBvYmplY3ROYW1lICkgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2FpdGluZyAgICA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgU2FtcGxlVXRpbC5wcmludGxuKCAiVW5leHBlY3RlZCBPYmplY3ROYW1lOiAiICsgb2JqZWN0TmFtZSArICIgIT0gIiArIG5vdGlmLmdldE1CZWFuTmFtZSgpICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbXlTbGVlcCggMTAwICk7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qKgorICAgICAgICBEZW1vbnN0cmF0ZXMgdGhlIHVzZSBvZiBhIGphdmF4Lm1hbmFnZW1lbnQubW9uaXRvciBNQmVhbgorICAgICAgICB0byBiZSBub3RpZmllZCBvZiBjaGFuZ2VzIGluIHRoZSB2YWx1ZSBvZiBhbiBBdHRyaWJ1dGUuCisgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkCisgICAgZGVtb0pNWE1vbml0b3IoKQorICAgICAgICB0aHJvd3MgSW5zdGFuY2VOb3RGb3VuZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KKyAgICB7CisgICAgICAgIGZpbmFsIEpNWE1vbml0b3JNZ3IgICAgbWdyICAgID0gZ2V0RG9tYWluUm9vdCgpLmdldEpNWE1vbml0b3JNZ3IoKTsKKworICAgICAgICBmaW5hbCBTdHJpbmcgICAgYXR0ck5hbWUgICAgPSAiU2FtcGxlU3RyaW5nIjsKKyAgICAgICAgZmluYWwgU3RyaW5nICAgIGF0dHJWYWx1ZSAgICA9ICJoZWxsbyI7CisKKyAgICAgICAgLy8gbGlzdGVuIHRvIHRoZSBNQmVhblNlcnZlckRlbGVnYXRlLCB0b28sIHNvIHdlIGNhbiBzZWUgb3VyIHNhbXBsZSBtb25pdG9yCisgICAgICAgIC8vIGdldCByZWdpc3RlcmVkLgorICAgICAgICBmaW5hbCBTYW1wbGVMaXN0ZW5lciAgICBzYW1wbGVMaXN0ZW5lciAgICA9IG5ldyBTYW1wbGVMaXN0ZW5lcigpOworICAgICAgICBmaW5hbCBNQmVhblNlcnZlckNvbm5lY3Rpb24gICAgY29ubiAgICA9CisgICAgICAgICAgICBVdGlsLmdldEV4dHJhKCBtZ3IgKS5nZXRDb25uZWN0aW9uU291cmNlKCkuZ2V0RXhpc3RpbmdNQmVhblNlcnZlckNvbm5lY3Rpb24oKTsKKyAgICAgICAgY29ubi5hZGROb3RpZmljYXRpb25MaXN0ZW5lcigKKyAgICAgICAgICAgIGdldE1CZWFuU2VydmVyRGVsZWdhdGVPYmplY3ROYW1lKCksIHNhbXBsZUxpc3RlbmVyLCBudWxsLCBudWxsICk7CisKKworICAgICAgICBmaW5hbCBTYW1wbGUgICAgc2FtcGxlICAgID0gKFNhbXBsZSlnZXREb21haW5Sb290KCkuZ2V0Q29udGFpbmVlKCBYVHlwZXMuU0FNUExFICk7CisKKyAgICAgICAgZmluYWwgU3RyaW5nICAgIG1vbml0b3JOYW1lICAgID0gIlNhbXBsZVN0cmluZ01vbml0b3IiOworICAgICAgICBBTVhTdHJpbmdNb25pdG9yICAgIG1vbiAgICA9IG51bGw7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICAvLyBjbGVhbnVwIGluIGNhc2UgaXQgd2FzIGxlZnQgYXJvdW5kIGJ5IG1pc3Rha2UuLi4KKyAgICAgICAgICAgIHRyeSB7IG1nci5yZW1vdmUoIG1vbml0b3JOYW1lICk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgICAge30KKworICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IG9uZQorICAgICAgICAgICAgbW9uICAgID0gbWdyLmNyZWF0ZVN0cmluZ01vbml0b3IoIG1vbml0b3JOYW1lICk7CisgICAgICAgICAgICAvLyBvYnNlcnZlciB0aGF0IHdlJ3ZlIGJlZW4gbm90aWZpZWQgKG5vdCByZXF1aXJlZCkKKyAgICAgICAgICAgIHdhaXRNQmVhblNlcnZlck5vdGlmaWNhdGlvbiggc2FtcGxlTGlzdGVuZXIsCisgICAgICAgICAgICAgICAgTUJlYW5TZXJ2ZXJOb3RpZmljYXRpb24uUkVHSVNUUkFUSU9OX05PVElGSUNBVElPTiwgVXRpbC5nZXRPYmplY3ROYW1lKCBtb24gKSApOworCisgICAgICAgICAgICAvLyB3ZSdsbCBtb2RpZnkgdGhpcyBBdHRyaWJ1dGUncyB2YWx1ZSwgdG8gZm9yY2UgYSBjaGFuZ2UKKyAgICAgICAgICAgIHNhbXBsZS5hZGRBdHRyaWJ1dGUoIGF0dHJOYW1lLCBhdHRyVmFsdWUgKTsKKworICAgICAgICAgICAgLy8gbGlzdGVuIHRvIHRoZSBtb25pdG9yCisgICAgICAgICAgICBtb24uYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoIHNhbXBsZUxpc3RlbmVyLCBudWxsLCBudWxsICk7CisgICAgICAgICAgICBtb24uc2V0T2JzZXJ2ZWRBdHRyaWJ1dGUoIGF0dHJOYW1lICk7CisgICAgICAgICAgICBtb24uc2V0U3RyaW5nVG9Db21wYXJlKCBhdHRyVmFsdWUgKTsKKyAgICAgICAgICAgIG1vbi5zZXROb3RpZnlEaWZmZXIoIHRydWUgKTsKKyAgICAgICAgICAgIG1vbi5zZXROb3RpZnlNYXRjaCggdHJ1ZSApOworCisgICAgICAgICAgICAvLyB0ZWxsIHRoZSBtb25pdG9yIHRvIG9ic2VydmUgc2FtcGxlCisgICAgICAgICAgICBtb24uYWRkT2JzZXJ2ZWRPYmplY3QoIFV0aWwuZ2V0T2JqZWN0TmFtZSggc2FtcGxlICkgKTsKKworICAgICAgICAgICAgLy8gc2luY2UgdGhlIEF0dHJpYnV0ZSB3YXMgYWRkZWQgZHluYW1pY2FsbHksIHRoZXJlIGlzIG5vCisgICAgICAgICAgICAvLyBnZXR0ZXIgbWV0aG9kLCBzbyB3ZSBtdXN0IGFjY2VzcyB0aGUgQXR0cmlidXRlIHZpYSBKTVgKKyAgICAgICAgICAgIGZpbmFsIFN0ZEF0dHJpYnV0ZXNBY2Nlc3MgICAgYXR0cnMgICAgPSBVdGlsLmdldEV4dHJhKCBzYW1wbGUgKTsKKyAgICAgICAgICAgIGF0dHJzLnNldEF0dHJpYnV0ZSggbmV3IEF0dHJpYnV0ZSggYXR0ck5hbWUsICJnb29kYnllIiApICk7CisgICAgICAgICAgICAvLyBzZXQgaXQgdG8gb3JpZ2luYWwgdmFsdWUKKyAgICAgICAgICAgIGF0dHJzLnNldEF0dHJpYnV0ZSggbmV3IEF0dHJpYnV0ZSggYXR0ck5hbWUsIGF0dHJWYWx1ZSApICk7CisKKyAgICAgICAgICAgIC8vIHdlIGFkZGVkIGl0LHNvIHdlIHNob3VsZCByZW1vdmUgaXQKKyAgICAgICAgICAgIHNhbXBsZS5yZW1vdmVBdHRyaWJ1dGUoIGF0dHJOYW1lICk7CisKKyAgICAgICAgICAgIC8vIGxldCB0aGUgTm90aWZpY2F0aW9ucyBhcnJpdmUuLi4KKyAgICAgICAgICAgIGZpbmFsIE1hcCAgICBub3RpZnMgICAgPSBzYW1wbGVMaXN0ZW5lci5nZXROb3RpZnNSZWNlaXZlZCgpOworICAgICAgICAgICAgd2FpdE51bU5vdGlmcyggbm90aWZzLCBBdHRyaWJ1dGVDaGFuZ2VOb3RpZmljYXRpb24uQVRUUklCVVRFX0NIQU5HRSwgNCApOworICAgICAgICB9CisgICAgICAgIGNhdGNoKCBUaHJvd2FibGUgdCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICAgICAgZmluYWxseQorICAgICAgICB7CisgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtb24ucmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoIHNhbXBsZUxpc3RlbmVyICk7CisKKyAgICAgICAgICAgICAgICAvLyBkb24ndCBsZWF2ZSBtb25pdG9ycyBhcm91bmQKKyAgICAgICAgICAgICAgICBpZiAoIG1vbiAhPSBudWxsICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1nci5yZW1vdmUoIG1vbi5nZXROYW1lKCkgKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gb2JzZXJ2ZXIgdGhhdCB3ZSd2ZSBiZWVuIG5vdGlmaWVkIChub3QgcmVxdWlyZWQpCisgICAgICAgICAgICAgICAgICAgIHdhaXRNQmVhblNlcnZlck5vdGlmaWNhdGlvbiggc2FtcGxlTGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBNQmVhblNlcnZlck5vdGlmaWNhdGlvbi5VTlJFR0lTVFJBVElPTl9OT1RJRklDQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICBVdGlsLmdldE9iamVjdE5hbWUoIG1vbiApICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY29ubi5yZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigKKyAgICAgICAgICAgICAgICAgICAgZ2V0TUJlYW5TZXJ2ZXJEZWxlZ2F0ZU9iamVjdE5hbWUoKSwgc2FtcGxlTGlzdGVuZXIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoKCBMaXN0ZW5lck5vdEZvdW5kRXhjZXB0aW9uIGUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQogfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL25vdGlmaWNhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbm90aWZpY2F0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNTQ1MzRlOS4uNDIzMDM5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbm90aWZpY2F0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbm90aWZpY2F0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9ImNsdXN0ZXIubmFtZSIgdmFsdWU9ImVlLWV2ZW50LWNsdXN0ZXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJub2RlYWdlbnQubmFtZSIgdmFsdWU9ImVlLWV2ZW50LWFnZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9ub3RpZmljYXRpb24vbG9va3VwL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9ub3RpZmljYXRpb24vbG9va3VwL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDhiNjdkYi4uODQzM2UxNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbm90aWZpY2F0aW9uL2xvb2t1cC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL25vdGlmaWNhdGlvbi9sb29rdXAvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMzAgKzE1LDMwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJlZSIgdmFsdWU9ImVudGVycHJpc2UgZWRpdGlvbiIvPgogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ibm90aWZpY2F0aW9uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1sb29rdXAiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWxvb2t1cCIvPiAgICAgICAgXHUwMDIwCiAKLTxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgCi0JdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIAotCXZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiXHUwMDIwCisgICAgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciJcdTAwMjAKKyAgICB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPiAgICAgICAgXHUwMDIwCiAKLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9ImNvbS5zdW4uZGV2dGVzdC5hZG1pbi5ub3RpZmljYXRpb24ubG9va3VwLmNsaWVudC5Mb29rdXBDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iY29tLnN1bi5kZXZ0ZXN0LmFkbWluLm5vdGlmaWNhdGlvbi5sb29rdXAuY2xpZW50Lkxvb2t1cENsaWVudCIvPgogCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIAogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJjbGllbnQuamFyLmxvY2F0aW9uIiB2YWx1ZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vYXBwbGljYXRpb25zL2oyZWUtYXBwcy8ke2FwcG5hbWV9Q2xpZW50LmphciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbm90aWZpY2F0aW9uL2xvb2t1cC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9ub3RpZmljYXRpb24vbG9va3VwL2J1aWxkLnhtbAppbmRleCAxNDYwZDhmLi5kMmJmYThiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9ub3RpZmljYXRpb24vbG9va3VwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9ub3RpZmljYXRpb24vbG9va3VwL2J1aWxkLnhtbApAQCAtNDIsNyArNDIsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIvPgogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIvPgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTQsOCArNTQsOCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWVlIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZSIgdmFsdWU9ImVlLWV2ZW50LWNsdXN0ZXIiLz4KQEAgLTc3LDcgKzc3LDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktZWUiIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0iZWUiPiAgICAgIAorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LWVlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgaWY9ImVlIj4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IlNvIHlvdSBhcmUgdXNpbmcgRW50ZXJwcmlzZSBWZXJzaW9uIGVoID8iLz4KICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3llZC5hcHAiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiLz4KIApAQCAtOTYsNyArOTYsNyBAQAogICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95bWVudCBvbiB0YXJnZXQgc2VydmVyICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IHN1Y2Nlc3NmdWwiLz4KICAgICA8L3RhcmdldD4KIAotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tdGVzdC0wIiAvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi10ZXN0LTEiIC8+CkBAIC0zNzUsMzEgKzM3NSwzMSBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuLXN0YW5kYWxvbmUtY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJqbmRpLm5hbWUiIHZhbHVlPSJsb29rdXBiZWFuIi8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwcm92aWRlci51cmwiIHZhbHVlPSJpaW9wOi8vJHthZG1pbi5ob3N0fToke29yYi5wb3J0fSIvPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IgogICAgICAgICAgICAgdmFsdWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5uYW1pbmcuU2VyaWFsSW5pdENvbnRleHRGYWN0b3J5Ii8+CiA8IS0tCi0JPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiIAotICAgICAgICAgICAgCXZhbHVlPSJvcmcuZ2xhc3NmaXNoLmpuZGkuY29zbmFtaW5nLkNOQ3R4RmFjdG9yeSIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IgorICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZ2xhc3NmaXNoLmpuZGkuY29zbmFtaW5nLkNOQ3R4RmFjdG9yeSIvPgogLS0+Ci0JPGVjaG8gbWVzc2FnZT0icHJvdmlkZXIudXJsIHVzZWQgaXMgJHtwcm92aWRlci51cmx9Ii8+CisgICAgPGVjaG8gbWVzc2FnZT0icHJvdmlkZXIudXJsIHVzZWQgaXMgJHtwcm92aWRlci51cmx9Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9IiR7dGVzdC5jbGllbnR9IgogICAgICAgICBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofToke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiCiAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIiBmb3JrPSJ0cnVlIj4KLQk8anZtYXJnIHZhbHVlPSItRHRlc3RJZD0ke3Rlc3QuaWR9Ii8+Ci0JPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxIb3N0PSR7YWRtaW4uaG9zdH0iLz4KLQk8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iLz4KKyAgICA8anZtYXJnIHZhbHVlPSItRHRlc3RJZD0ke3Rlc3QuaWR9Ii8+CisgICAgPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxIb3N0PSR7YWRtaW4uaG9zdH0iLz4KKyAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtwcm92aWRlci51cmx9Ii8+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y3R4ZmFjdG9yeX0iLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtqbmRpLm5hbWV9Ii8+CiAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZSIgdmFsdWU9ImVlLWV2ZW50LWNsdXN0ZXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtY2x1c3RlciIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9ub3RpZmljYXRpb24vbG9va3VwL2NsaWVudC9Mb29rdXBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL25vdGlmaWNhdGlvbi9sb29rdXAvY2xpZW50L0xvb2t1cENsaWVudC5qYXZhCmluZGV4IDI4OWU5NzguLjg4MmFhMjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL25vdGlmaWNhdGlvbi9sb29rdXAvY2xpZW50L0xvb2t1cENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL25vdGlmaWNhdGlvbi9sb29rdXAvY2xpZW50L0xvb2t1cENsaWVudC5qYXZhCkBAIC0yNiwxMiArMjYsMTIgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogLyoqCi0gKiBBIHNpbXBsZSBqYXZhIGNsaWVudC4gVGhpcyB1c2VzIHRoZSBzZXJ2aWNlcyBwcm92aWRlZCBieSB0aGUgCisgKiBBIHNpbXBsZSBqYXZhIGNsaWVudC4gVGhpcyB1c2VzIHRoZSBzZXJ2aWNlcyBwcm92aWRlZCBieSB0aGUKICAqIDxjb2RlPkxvb2t1cEJlYW48L2NvZGU+LgogICovCiBwdWJsaWMgY2xhc3MgTG9va3VwQ2xpZW50IHsKIAotICAgIHByaXZhdGUgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIExvb2t1cENsaWVudCgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL25vdGlmaWNhdGlvbi9sb29rdXAvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9ub3RpZmljYXRpb24vbG9va3VwL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCmluZGV4IGE5MTU1YWEuLjViYjZkODQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL25vdGlmaWNhdGlvbi9sb29rdXAvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbm90aWZpY2F0aW9uL2xvb2t1cC9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbApAQCAtMjMsNyArMjMsNyBAQAogICAgIDxzbWFsbC1pY29uPjwvc21hbGwtaWNvbj4KICAgICA8bGFyZ2UtaWNvbj48L2xhcmdlLWljb24+CiAgIDwvaWNvbj4KLSAgPGRpc3BsYXktbmFtZT5ub3RpZmljYXRpb24tbG9va3VwQXBwPC9kaXNwbGF5LW5hbWU+ICAKKyAgPGRpc3BsYXktbmFtZT5ub3RpZmljYXRpb24tbG9va3VwQXBwPC9kaXNwbGF5LW5hbWU+CiAgIDxtb2R1bGU+CiAgICAgPGphdmE+bm90aWZpY2F0aW9uLWxvb2t1cC1jbGllbnQuamFyPC9qYXZhPgogICA8L21vZHVsZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL25vdGlmaWNhdGlvbi9sb29rdXAvZWpiL0xvb2t1cEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL25vdGlmaWNhdGlvbi9sb29rdXAvZWpiL0xvb2t1cEJlYW4uamF2YQppbmRleCA4MTgzNjVmLi45MjI5YWY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9ub3RpZmljYXRpb24vbG9va3VwL2VqYi9Mb29rdXBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vbm90aWZpY2F0aW9uL2xvb2t1cC9lamIvTG9va3VwQmVhbi5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAvKioKICAqLwogcHVibGljIGNsYXNzIExvb2t1cEJlYW4gaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7Ci0gICAgCisKICAgICBTZXNzaW9uQ29udGV4dCBzZXNzaW9uQ29udGV4dF87CiAKICAgICBCaWdEZWNpbWFsIHllblJhdGUgPSBuZXcgQmlnRGVjaW1hbCgiMTIxLjYwMDAiKTsKQEAgLTg4LDcgKzg4LDcgQEAKICAgICAgKiBMb2FkcyB0aGUgc3RhdGUgb2YgdGhlIGJlYW4gZnJvbSBzZWNvbmRhcnkgc3RvcmFnZS4gUmVxdWlyZWQgYnkgRUpCIHNwZWMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotICAgIAorCiAgICAgLyoqCiAgICAgICogS2VlcHMgdGhlIHN0YXRlIG9mIHRoZSBiZWFuIHRvIHNlY29uZGFyeSBzdG9yYWdlLiBSZXF1aXJlZCBieSBFSkIgc3BlYy4KICAgICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvY2xpZW50L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL2NsaWVudC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDlmODQ4NTEuLjdlM2RiZDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvY2xpZW50L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9jbGllbnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJhcGlDbGllbnQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJjb20uc3VuLnMxYXNkZXYuZWpiLnN0cmVzcy5wYXNzaXZhdGVhY3RpdmF0ZS5jbGllbnQuQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIuc3RyZXNzLnBhc3NpdmF0ZWFjdGl2YXRlLmNsaWVudC5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9jbGllbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9jbGllbnQvYnVpbGQueG1sCmluZGV4IDlkNmEyOGIuLmQ4ODdjYTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvY2xpZW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL2NsaWVudC9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUyLDEzICs1MiwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MsICoqLypTRlNCKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXRvLWNsdXN0ZXIiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcHNlcnZlci5pbnN0YW5jZS5uYW1lIiB2YWx1ZT0iJHtjbHVzdGVyLm5hbWV9Ii8+CkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAtLT4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwhLS0KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CkBAIC0xMDcsMTUgKzEwNywxNSBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudGVzdCIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwc2VydmVyLmluc3RhbmNlLm5hbWUiIHZhbHVlPSIke2NsdXN0ZXIubmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPCEtLSBUaGlzIHNob3VsZCBiZSBhIGNvbW1vbiB0YXJnZXQgRklYIElUIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LXRvLWNsdXN0ZXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4gICAgICAKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS10by1jbHVzdGVyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlNvIHlvdSBhcmUgdXNpbmcgRW50ZXJwcmlzZSBWZXJzaW9uIGVoID8iLz4KICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95ZWQuYXBwIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIi8+CiAKQEAgLTEzMCw3ICsxMzAsNyBAQAogICAgIDwhLS0gZGVwbG95ZWQuYXBwIGRlZmF1bHRzIHRvICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciBkZWZpbmVkIGluIHByb3BlcnRpZXMueG1sLS0+CiAgICAgICAgIDxhcmcgbGluZT0iJHtkZXBsb3llZC5hcHB9Ii8+CiAgICAgICA8L2V4ZWM+Ci0gICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3ltZW50IG9uIHRhcmdldCBzZXJ2ZXIgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gCisgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3ltZW50IG9uIHRhcmdldCBzZXJ2ZXIgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0KICAgICBzdWNjZXNzZnVsIi8+CiAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RvcC1kZWZhdWx0LWNsdXN0ZXItY29tbW9uIi8+CiAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnQtZGVmYXVsdC1jbHVzdGVyLWNvbW1vbiIvPgpAQCAtMTQ0LDIwICsxNDQsMjAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1zdGFuZGFsb25lLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iam5kaS5uYW1lIiB2YWx1ZT0iZWpiL2FwaUNsaWVudCIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0icHJvdmlkZXIudXJsIiB2YWx1ZT0iaWlvcDovLyR7YWRtaW4uaG9zdH06JHtvcmIucG9ydH0iLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiIAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIKICAgICAgICAgICAgIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2UubmFtaW5nLlNlcmlhbEluaXRDb250ZXh0RmFjdG9yeSIvPgogPCEtLQotCTxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IiAKLSAgICAgICAgICAgIAl2YWx1ZT0ib3JnLmdsYXNzZmlzaC5qbmRpLmNvc25hbWluZy5DTkN0eEZhY3RvcnkiLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIKKyAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmdsYXNzZmlzaC5qbmRpLmNvc25hbWluZy5DTkN0eEZhY3RvcnkiLz4KIC0tPgotCTxlY2hvIG1lc3NhZ2U9InByb3ZpZGVyLnVybCB1c2VkIGlzICR7cHJvdmlkZXIudXJsfSIvPgorICAgIDxlY2hvIG1lc3NhZ2U9InByb3ZpZGVyLnVybCB1c2VkIGlzICR7cHJvdmlkZXIudXJsfSIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSIke3Rlc3QuY2xpZW50fSIKICAgICAgICAgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH06JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIgogICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIgZm9yaz0idHJ1ZSI+Ci0JPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxIb3N0PSR7YWRtaW4uaG9zdH0iLz4KLQk8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iLz4KLQk8anZtYXJnIHZhbHVlPSItRGoyZWVsb2dpbi5uYW1lPSR7dGVzdC51c2VyfSIvPgotCTxqdm1hcmcgdmFsdWU9Ii1EajJlZWxvZ2luLnBhc3N3b3JkPSR7dGVzdC5wYXNzd2R9Ii8+CisgICAgPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxIb3N0PSR7YWRtaW4uaG9zdH0iLz4KKyAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iLz4KKyAgICA8anZtYXJnIHZhbHVlPSItRGoyZWVsb2dpbi5uYW1lPSR7dGVzdC51c2VyfSIvPgorICAgIDxqdm1hcmcgdmFsdWU9Ii1EajJlZWxvZ2luLnBhc3N3b3JkPSR7dGVzdC5wYXNzd2R9Ii8+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7cHJvdmlkZXIudXJsfSIvPgogICAgICAgICA8YXJnIHZhbHVlPSIke2N0eGZhY3Rvcnl9Ii8+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7am5kaS5uYW1lfSIvPgpAQCAtMTcyLDcgKzE3Miw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL2NsaWVudC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL2NsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNDhhNTE3Zi4uY2RjM2MzMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9jbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzMsOCArMzMsOCBAQAogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0Tm90UnVuICAgID0gIlRFU1QgTk9UIFJVTiI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RQYXNzZWQgICAgPSAiVEVTVCBQQVNTRUQiOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0RmFpbGVkICAgID0gIlRFU1QgRkFJTEVEIjsKLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKIApAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImNsaWVudCBpbml0U0ZTQi0tIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVc2FnZTogU3luY0NsaWVudFRlc3QgcHJvdmlkZXItdXJsIGN0eEZhY3Rvcnkgam5kaS1uYW1lIDxpbnN0YW5jZU5hbWU6c3RyaW5nPiA8Z2V0fHB1dD4gPHNvdXJjZTpzdHJpbmc+IDxkZXN0aW5hdGlvbiBkaXIvZmlsZTpzdHJpbmc+Iik7CiAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgaWYgKCAhYXJnc1s0XS5lcXVhbHMoImdldCIpICYmICFhcmdzWzRdLmVxdWFscygicHV0IikgKSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggImNsaWVudCBpbml0U0ZTQi0tIGNvbW1hbmQgY2FuIGJlIGVpdGhlciBwdXQgb3IgZ2V0LiBQbGVhc2UgcmV0cnkiLCBzdGF0LkZBSUwpOwpAQCAtNjAsMTEgKzYwLDExIEBACiAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW2FwaUNsaWVudF0gRE9ORSBkb1Rlc3QoKS4uLiIpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgic3luY2hyb25pemF0aW9uIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgaW5pdFNGU0IoYXJncyk7CkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbnVsbDsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBudWxsOwotICAgICAgICAgICAgaWYgKChhcmdzWzBdID09IG51bGwpIHx8IChhcmdzWzFdID09IG51bGwpKSB7IAorICAgICAgICAgICAgaWYgKChhcmdzWzBdID09IG51bGwpIHx8IChhcmdzWzFdID09IG51bGwpKSB7CiAgICAgICAgICAgICAgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlthcGlDbGllbnRdIExvb2tpbmd1cCBCZWFuIGFwaUNsaWVudCAiKTsKICAgICAgICAgICAgICAgICBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2FwaUNsaWVudCIpOwpAQCAtMTE1LDEyICsxMTUsMTIgQEAKIAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIHIpCi0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggYXJnc1s0XSArICIgb2YgIiArIGFyZ3NbNV0gKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCBhcmdzWzRdICsgIiBvZiAiICsgYXJnc1s1XSArCiAgICAgICAgICAgICAgICAgICAgICAgICAiIHRvICIgKyBhcmdzWzZdICsgIiBwYXNzZWQuIik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIGFyZ3NbNF0gKyAiIG9mICIgKyBhcmdzWzVdICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggYXJnc1s0XSArICIgb2YgIiArIGFyZ3NbNV0gKwogICAgICAgICAgICAgICAgICAgICAgICAgIiB0byAiICsgYXJnc1s2XSArICIgZmFpbGVkLiIpOwotICAgIAorCiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBhY2Nlc3NTRlNCIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGFjY2Vzc1NGU0IiLCBzdGF0LkZBSUwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9jbGllbnQvZWpiL1N5bmNocm9uaXphdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9jbGllbnQvZWpiL1N5bmNocm9uaXphdGlvbi5qYXZhCmluZGV4IDJhMWU2ZWEuLjhhOGViYzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvY2xpZW50L2VqYi9TeW5jaHJvbml6YXRpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL2NsaWVudC9lamIvU3luY2hyb25pemF0aW9uLmphdmEKQEAgLTI2LDExICsyNiwxMSBAQAogICAgIGV4dGVuZHMgRUpCT2JqZWN0CiB7CiAKLQlwdWJsaWMgYm9vbGVhbiBnZXRGaWxlKFN0cmluZyBpbnN0YW5jZU5hbWUsIFN0cmluZyBzb3VyY2VGaWxlLCAKLQkJU3RyaW5nIGRlc3RMb2MpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgcHVibGljIGJvb2xlYW4gZ2V0RmlsZShTdHJpbmcgaW5zdGFuY2VOYW1lLCBTdHJpbmcgc291cmNlRmlsZSwKKyAgICAgICAgU3RyaW5nIGRlc3RMb2MpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLQlwdWJsaWMgYm9vbGVhbiBwdXRGaWxlKFN0cmluZyBpbnN0YW5jZU5hbWUsIFN0cmluZyBzb3VyY2VGaWxlLCAJCi0JCVN0cmluZyBkZXN0RGlyKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHB1YmxpYyBib29sZWFuIHB1dEZpbGUoU3RyaW5nIGluc3RhbmNlTmFtZSwgU3RyaW5nIHNvdXJjZUZpbGUsCisgICAgICAgIFN0cmluZyBkZXN0RGlyKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvY2xpZW50L2VqYi9TeW5jaHJvbml6YXRpb25FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvY2xpZW50L2VqYi9TeW5jaHJvbml6YXRpb25FSkIuamF2YQppbmRleCAyZDRhMTNjLi5hN2M3OGIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL2NsaWVudC9lamIvU3luY2hyb25pemF0aW9uRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9jbGllbnQvZWpiL1N5bmNocm9uaXphdGlvbkVKQi5qYXZhCkBAIC0zMiw2MSArMzIsNjEgQEAKIGltcG9ydCBjb20uc3VuLmVudGVycHJpc2UuZWUuc3luY2hyb25pemF0aW9uLlN5bmNocm9uaXphdGlvbkV4Y2VwdGlvbjsKIAogcHVibGljIGNsYXNzIFN5bmNocm9uaXphdGlvbkVKQgotICAgIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gCisgICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbgogewotCXByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY29udGV4dDsKKyAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGNvbnRleHQ7CiAgICAgcHJpdmF0ZSBDb250ZXh0IGluaXRpYWxDdHg7CiAKLQlwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7CisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgewogICAgIH0KIAotICAgIHB1YmxpYyBib29sZWFuIGdldEZpbGUoU3RyaW5nIGluc3RhbmNlTmFtZSwgU3RyaW5nIHNvdXJjZUZpbGUsIAotCVN0cmluZyBkZXN0TG9jKSB7Ci0JdHJ5IHsKLSAgICAgICAgICAgIFN5bmNocm9uaXphdGlvbkNsaWVudCBzYyA9IAorICAgIHB1YmxpYyBib29sZWFuIGdldEZpbGUoU3RyaW5nIGluc3RhbmNlTmFtZSwgU3RyaW5nIHNvdXJjZUZpbGUsCisgICAgU3RyaW5nIGRlc3RMb2MpIHsKKyAgICB0cnkgeworICAgICAgICAgICAgU3luY2hyb25pemF0aW9uQ2xpZW50IHNjID0KICAgICAgICAgICAgICAgU3luY2hyb25pemF0aW9uRmFjdG9yeS5jcmVhdGVTeW5jaHJvbml6YXRpb25DbGllbnQoIGluc3RhbmNlTmFtZSk7CiAgICAgICAgICAgICBzYy5jb25uZWN0KCk7CiAgICAgICAgICAgICBzYy5nZXQoc291cmNlRmlsZSwgZGVzdExvYyk7CiAgICAgICAgICAgICBzYy5kaXNjb25uZWN0KCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCXJldHVybiBmYWxzZTsKLQl9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBib29sZWFuIHB1dEZpbGUoU3RyaW5nIGluc3RhbmNlTmFtZSwgU3RyaW5nIHNvdXJjZUZpbGUsIAotCVN0cmluZyBkZXN0RGlyKSAgewotCXRyeSB7Ci0gICAgICAgICAgICBTeW5jaHJvbml6YXRpb25DbGllbnQgc2MgPSAKKyAgICBwdWJsaWMgYm9vbGVhbiBwdXRGaWxlKFN0cmluZyBpbnN0YW5jZU5hbWUsIFN0cmluZyBzb3VyY2VGaWxlLAorICAgIFN0cmluZyBkZXN0RGlyKSAgeworICAgIHRyeSB7CisgICAgICAgICAgICBTeW5jaHJvbml6YXRpb25DbGllbnQgc2MgPQogICAgICAgICAgICAgICBTeW5jaHJvbml6YXRpb25GYWN0b3J5LmNyZWF0ZVN5bmNocm9uaXphdGlvbkNsaWVudCggaW5zdGFuY2VOYW1lKTsKICAgICAgICAgICAgIHNjLmNvbm5lY3QoKTsKICAgICAgICAgICAgIFN0cmluZyBzID0gc2MucHV0KHNvdXJjZUZpbGUsIGRlc3REaXIpOwogICAgICAgICAgICAgc2MuZGlzY29ubmVjdCgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVcGxvYWQgZmlsZSBhdCAiICsgcyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCXJldHVybiBmYWxzZTsKLQl9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIH0KIAotCXB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JCXRoaXMuY29udGV4dCA9IHNjOworICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7CisgICAgICAgIHRoaXMuY29udGV4dCA9IHNjOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgdGhpcy5pbml0aWFsQ3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0aCkgewogICAgICAgICAgICAgdGgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLQl9CisgICAgfQogCi0JcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KKyAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQogCi0JcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7CisgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkluIFNGU0IuZWpiQWN0aXZhdGUoKSAiICk7CiAgICAgfQogCi0JcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgeworICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiSW4gU0ZTQi5lamJQYXNzaXZhdGUoKSAiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL2NsaWVudC9lamIvU3luY2hyb25pemF0aW9uSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9jbGllbnQvZWpiL1N5bmNocm9uaXphdGlvbkhvbWUuamF2YQppbmRleCBlNzJjOGJhLi40M2JjZjY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL2NsaWVudC9lamIvU3luY2hyb25pemF0aW9uSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvY2xpZW50L2VqYi9TeW5jaHJvbml6YXRpb25Ib21lLmphdmEKQEAgLTIzLDYgKzIzLDYgQEAKIHB1YmxpYyBpbnRlcmZhY2UgU3luY2hyb25pemF0aW9uSG9tZQogICAgIGV4dGVuZHMgRUpCSG9tZQogewotCXB1YmxpYyBTeW5jaHJvbml6YXRpb24gY3JlYXRlKCkKKyAgICBwdWJsaWMgU3luY2hyb25pemF0aW9uIGNyZWF0ZSgpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvY29tbW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvY29tbW9uLnhtbAppbmRleCA4YTExOWJhLi4xOTNjYjUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL2NvbW1vbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9jb21tb24ueG1sCkBAIC0xOSw5ICsxOSw5IEBACiA8IS0tIGNvbW1vbiBzZWN1cml0eSB0YXNrcyAtLT4KIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXVzZXIiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS11c2VyLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0iaGFycHJlZXQiLz4KLQkgICAgPHBhcmFtIG5hbWU9InBhc3N3b3JkIiB2YWx1ZT0iaGFycHJlZXQiLz4KLQkgICAgPHBhcmFtIG5hbWU9Imdyb3VwcyIgdmFsdWU9ImVtcGxveWVlIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0iaGFycHJlZXQiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InBhc3N3b3JkIiB2YWx1ZT0iaGFycHJlZXQiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Imdyb3VwcyIgdmFsdWU9ImVtcGxveWVlIi8+CiAgICAgICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvZGVwbG95bWVudC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9kZXBsb3ltZW50L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzUwZjc5ZS4uNWRkNTczZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9kZXBsb3ltZW50L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9kZXBsb3ltZW50L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iYXBpRGVwbG95bWVudCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIuc3RyZXNzLnBhc3NpdmF0ZWFjdGl2YXRlLmNsaWVudC5DbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iY29tLnN1bi5zMWFzZGV2LmVqYi5zdHJlc3MucGFzc2l2YXRlYWN0aXZhdGUuY2xpZW50LkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL2RlcGxveW1lbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9kZXBsb3ltZW50L2J1aWxkLnhtbAppbmRleCA3ODViOTU5Li4wNzUzYzNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL2RlcGxveW1lbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvZGVwbG95bWVudC9idWlsZC54bWwKQEAgLTQxLDcgKzQxLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUzLDE2ICs1MywxNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MsICoqLypTRlNCKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAKLQk8IS0tIEFsbCB0aGUgbW9kdWxlcyBkZXBsb3ltZW50cyBtdXN0IGJlIGRvbmUgYWZ0ZXIgdGVzdCBjYXNlIGRlcGxveW1lbnQtLT4KKyAgICA8IS0tIEFsbCB0aGUgbW9kdWxlcyBkZXBsb3ltZW50cyBtdXN0IGJlIGRvbmUgYWZ0ZXIgdGVzdCBjYXNlIGRlcGxveW1lbnQtLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktdG8tZGFzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXBsb3llZC5hcHAiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L3NhbXBsZXMvY29ubmVjdG9ycy9hcHBzL21haWxjb25uZWN0b3IvbWFpbGNvbm5lY3Rvci5yYXIiLz4KICAgICAgICAgIDwvYW50Y2FsbD4KQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgIC0tPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPCEtLQogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KQEAgLTEyNCw3ICsxMjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudGVzdCIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGVwbG95ZWRhcHAubmFtZSIgdmFsdWU9InRpbWVyc2Vzc2lvbiIvPgpAQCAtMTM1LDEwICsxMzUsMTAgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcHNlcnZlci5pbnN0YW5jZS5uYW1lIiB2YWx1ZT0iJHtjbHVzdGVyLm5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDwhLS0gVGhpcyBzaG91bGQgYmUgYSBjb21tb24gdGFyZ2V0IEZJWCBJVCAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS10by1jbHVzdGVyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+ICAgICAgCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktdG8tY2x1c3RlciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJTbyB5b3UgYXJlIHVzaW5nIEVudGVycHJpc2UgVmVyc2lvbiBlaCA/Ii8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveWVkLmFwcCIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIvPgogCkBAIC0xNTQsMTQgKzE1NCwxNCBAQAogICAgIDwhLS0gZGVwbG95ZWQuYXBwIGRlZmF1bHRzIHRvICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciBkZWZpbmVkIGluIHByb3BlcnRpZXMueG1sLS0+CiAgICAgICAgIDxhcmcgbGluZT0iJHtkZXBsb3llZC5hcHB9Ii8+CiAgICAgICA8L2V4ZWM+Ci0gICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3ltZW50IG9uIHRhcmdldCBzZXJ2ZXIgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gCisgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3ltZW50IG9uIHRhcmdldCBzZXJ2ZXIgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0KICAgICBzdWNjZXNzZnVsIi8+CiAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RvcC1kZWZhdWx0LWNsdXN0ZXItY29tbW9uIi8+CiAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnQtZGVmYXVsdC1jbHVzdGVyLWNvbW1vbiIvPgogCiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS10by1kYXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4gICAgICAKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS10by1kYXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgIDxhcmcgbGluZT0iZGVwbG95Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iLS11c2VyICR7YWRtaW4udXNlcn0iLz4KQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICAgICA8YXJnIGxpbmU9Ii0tcmV0cmlldmUgJHthc3NlbWJsZS5kaXJ9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHtkZXBsb3llZC5hcHB9Ii8+CiAgICAgICA8L2V4ZWM+Ci0gICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3ltZW50IG9uIHRhcmdldCBzZXJ2ZXIgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gCisgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3ltZW50IG9uIHRhcmdldCBzZXJ2ZXIgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0KICAgICBzdWNjZXNzZnVsIi8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTE4MywyMCArMTgzLDIwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4tc3RhbmRhbG9uZS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImpuZGkubmFtZSIgdmFsdWU9ImVqYi9hcGlEZXBsb3ltZW50Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwcm92aWRlci51cmwiIHZhbHVlPSJpaW9wOi8vJHthZG1pbi5ob3N0fToke29yYi5wb3J0fSIvPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IgogICAgICAgICAgICAgdmFsdWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5uYW1pbmcuU2VyaWFsSW5pdENvbnRleHRGYWN0b3J5Ii8+CiA8IS0tCi0JPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiIAotICAgICAgICAgICAgCXZhbHVlPSJvcmcuZ2xhc3NmaXNoLmpuZGkuY29zbmFtaW5nLkNOQ3R4RmFjdG9yeSIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IgorICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZ2xhc3NmaXNoLmpuZGkuY29zbmFtaW5nLkNOQ3R4RmFjdG9yeSIvPgogLS0+Ci0JPGVjaG8gbWVzc2FnZT0icHJvdmlkZXIudXJsIHVzZWQgaXMgJHtwcm92aWRlci51cmx9Ii8+CisgICAgPGVjaG8gbWVzc2FnZT0icHJvdmlkZXIudXJsIHVzZWQgaXMgJHtwcm92aWRlci51cmx9Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9IiR7dGVzdC5jbGllbnR9IgogICAgICAgICBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofToke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiCiAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIiBmb3JrPSJ0cnVlIj4KLQk8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbEhvc3Q9JHthZG1pbi5ob3N0fSIvPgotCTxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydD0ke29yYi5wb3J0fSIvPgotCTxqdm1hcmcgdmFsdWU9Ii1EajJlZWxvZ2luLm5hbWU9JHt0ZXN0LnVzZXJ9Ii8+Ci0JPGp2bWFyZyB2YWx1ZT0iLURqMmVlbG9naW4ucGFzc3dvcmQ9JHt0ZXN0LnBhc3N3ZH0iLz4KKyAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbEhvc3Q9JHthZG1pbi5ob3N0fSIvPgorICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydD0ke29yYi5wb3J0fSIvPgorICAgIDxqdm1hcmcgdmFsdWU9Ii1EajJlZWxvZ2luLm5hbWU9JHt0ZXN0LnVzZXJ9Ii8+CisgICAgPGp2bWFyZyB2YWx1ZT0iLURqMmVlbG9naW4ucGFzc3dvcmQ9JHt0ZXN0LnBhc3N3ZH0iLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtwcm92aWRlci51cmx9Ii8+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y3R4ZmFjdG9yeX0iLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtqbmRpLm5hbWV9Ii8+CkBAIC0yMTIsNyArMjEyLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvZGVwbG95bWVudC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL2RlcGxveW1lbnQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDdjZWE1ZGUuLjcyNThiY2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvZGVwbG95bWVudC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9kZXBsb3ltZW50L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzMsOCArMzMsOCBAQAogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0Tm90UnVuICAgID0gIlRFU1QgTk9UIFJVTiI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RQYXNzZWQgICAgPSAiVEVTVCBQQVNTRUQiOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0RmFpbGVkICAgID0gIlRFU1QgRkFJTEVEIjsKLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKIApAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImNsaWVudCBpbml0U0ZTQi0tIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVc2FnZTogU3luY0NsaWVudFRlc3QgcHJvdmlkZXItdXJsIGN0eEZhY3Rvcnkgam5kaS1uYW1lIDxpbnN0YW5jZU5hbWU6c3RyaW5nPiA8Z2V0fHB1dD4gPHNvdXJjZTpzdHJpbmc+IDxkZXN0aW5hdGlvbiBkaXIvZmlsZTpzdHJpbmc+Iik7CiAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgaWYgKCAhYXJnc1s0XS5lcXVhbHMoImdldCIpICYmICFhcmdzWzRdLmVxdWFscygicHV0IikgKSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggImNsaWVudCBpbml0U0ZTQi0tIGNvbW1hbmQgY2FuIGJlIGVpdGhlciBwdXQgb3IgZ2V0LiBQbGVhc2UgcmV0cnkiLCBzdGF0LkZBSUwpOwpAQCAtNjAsMTEgKzYwLDExIEBACiAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW2RlcGxveW1lbnRDbGllbnRdIERPTkUgZG9UZXN0KCkuLi4iKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInN5bmNocm9uaXphdGlvbiIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIGluaXRTRlNCKGFyZ3MpOwpAQCAtNzcsNyArNzcsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG51bGw7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gbnVsbDsKLSAgICAgICAgICAgIGlmICgoYXJnc1swXSA9PSBudWxsKSB8fCAoYXJnc1sxXSA9PSBudWxsKSkgeyAKKyAgICAgICAgICAgIGlmICgoYXJnc1swXSA9PSBudWxsKSB8fCAoYXJnc1sxXSA9PSBudWxsKSkgewogICAgICAgICAgICAgICAgIGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICAgICAgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9hcGlEZXBsb3ltZW50Iik7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTE0LDE2ICsxMTQsMTYgQEAKIAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIHIpIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCBhcmdzWzRdICsgIiBvZiAiICsgYXJnc1s1XSArIAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIGFyZ3NbNF0gKyAiIG9mICIgKyBhcmdzWzVdICsKICAgICAgICAgICAgICAgICAgICAgICAgICIgdG8gIiArIGFyZ3NbNl0gKyAiIHBhc3NlZC4iKTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlN5bmNocm9uaXphdGlvbiBvZiBhcHBsaWNhdGlvbiBiaXRzIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggYXJnc1s0XSArICIgb2YgIiArIGFyZ3NbNV0gKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCBhcmdzWzRdICsgIiBvZiAiICsgYXJnc1s1XSArCiAgICAgICAgICAgICAgICAgICAgICAgICAiIHRvICIgKyBhcmdzWzZdICsgIiBmYWlsZWQuIik7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJTeW5jaHJvbml6YXRpb24gb2YgYXBwbGljYXRpb25zIGJpdHMiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgIH0KLSAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgYWNjZXNzU0ZTQiIsIHN0YXQuRkFJTCk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvZGVwbG95bWVudC9lamIvU3luY2hyb25pemF0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL2RlcGxveW1lbnQvZWpiL1N5bmNocm9uaXphdGlvbi5qYXZhCmluZGV4IDE3MzQzNWIuLjkyNTk1MTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvZGVwbG95bWVudC9lamIvU3luY2hyb25pemF0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9kZXBsb3ltZW50L2VqYi9TeW5jaHJvbml6YXRpb24uamF2YQpAQCAtMjYsMTQgKzI2LDE0IEBACiAgICAgZXh0ZW5kcyBFSkJPYmplY3QKIHsKIAotCXB1YmxpYyBib29sZWFuIGdldEZpbGUoU3RyaW5nIGluc3RhbmNlTmFtZSwgU3RyaW5nIHNvdXJjZUZpbGUsIAotCQlTdHJpbmcgZGVzdExvYykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICBwdWJsaWMgYm9vbGVhbiBnZXRGaWxlKFN0cmluZyBpbnN0YW5jZU5hbWUsIFN0cmluZyBzb3VyY2VGaWxlLAorICAgICAgICBTdHJpbmcgZGVzdExvYykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotCXB1YmxpYyBib29sZWFuIGdldChTdHJpbmcgaW5zdGFuY2VOYW1lLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHR5cGUsCi0JCVN0cmluZyBkZXN0TG9jKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHB1YmxpYyBib29sZWFuIGdldChTdHJpbmcgaW5zdGFuY2VOYW1lLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHR5cGUsCisgICAgICAgIFN0cmluZyBkZXN0TG9jKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0JcHVibGljIGJvb2xlYW4gcHV0RmlsZShTdHJpbmcgaW5zdGFuY2VOYW1lLCBTdHJpbmcgc291cmNlRmlsZSwgCQotCQlTdHJpbmcgZGVzdERpcikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICBwdWJsaWMgYm9vbGVhbiBwdXRGaWxlKFN0cmluZyBpbnN0YW5jZU5hbWUsIFN0cmluZyBzb3VyY2VGaWxlLAorICAgICAgICBTdHJpbmcgZGVzdERpcikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL2RlcGxveW1lbnQvZWpiL1N5bmNocm9uaXphdGlvbkVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9kZXBsb3ltZW50L2VqYi9TeW5jaHJvbml6YXRpb25FSkIuamF2YQppbmRleCA0NDM1MTkyLi44NTRjN2U4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL2RlcGxveW1lbnQvZWpiL1N5bmNocm9uaXphdGlvbkVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvZGVwbG95bWVudC9lamIvU3luY2hyb25pemF0aW9uRUpCLmphdmEKQEAgLTM1LDE2ICszNSwxNiBAQAogaW1wb3J0IGNvbS5zdW4uZW50ZXJwcmlzZS5jb25maWcuQ29uZmlnQ29udGV4dDsKIAogcHVibGljIGNsYXNzIFN5bmNocm9uaXphdGlvbkVKQgotICAgIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gCisgICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbgogewotCXByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY29udGV4dDsKKyAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGNvbnRleHQ7CiAgICAgcHJpdmF0ZSBDb250ZXh0IGluaXRpYWxDdHg7CiAKLQlwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7CisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgewogICAgIH0KIAotICAgIHB1YmxpYyBib29sZWFuIGdldEZpbGUoU3RyaW5nIGluc3RhbmNlTmFtZSwgU3RyaW5nIHNvdXJjZUZpbGUsIAotCVN0cmluZyBkZXN0TG9jKSB7CisgICAgcHVibGljIGJvb2xlYW4gZ2V0RmlsZShTdHJpbmcgaW5zdGFuY2VOYW1lLCBTdHJpbmcgc291cmNlRmlsZSwKKyAgICBTdHJpbmcgZGVzdExvYykgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29uZmlnQ29udGV4dCBjdHggPSBBcHBsaWNhdGlvblNlcnZlci5nZXRTZXJ2ZXJDb250ZXh0KCkuCiAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZ0NvbnRleHQoKTsKQEAgLTU5LDcgKzU5LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBib29sZWFuIGdldChTdHJpbmcgaW5zdGFuY2VOYW1lLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHR5cGUsIAorICAgIHB1YmxpYyBib29sZWFuIGdldChTdHJpbmcgaW5zdGFuY2VOYW1lLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHR5cGUsCiAgICAgICAgIFN0cmluZyBkZXN0TG9jKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb25maWdDb250ZXh0IGN0eCA9IEFwcGxpY2F0aW9uU2VydmVyLmdldFNlcnZlckNvbnRleHQoKS4KQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgICAgIEFwcGxpY2F0aW9uc01nciBhcHBTeW5jaE1nciA9IFN5bmNocm9uaXphdGlvbkZhY3RvcnkuCiAgICAgICAgICAgICAgICAgY3JlYXRlU3luY2hyb25pemF0aW9uQ29udGV4dChjdHgpLmdldEFwcGxpY2F0aW9uc01ncigpOwogCi0gICAgICAgICAgICBpZiAodHlwZSA9PSBudWxsKSB7IAorICAgICAgICAgICAgaWYgKHR5cGUgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIApAQCAtMTA4LDEwICsxMDgsMTAgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBib29sZWFuIHB1dEZpbGUoU3RyaW5nIGluc3RhbmNlTmFtZSwgU3RyaW5nIHNvdXJjZUZpbGUsIAotCVN0cmluZyBkZXN0RGlyKSAgeworICAgIHB1YmxpYyBib29sZWFuIHB1dEZpbGUoU3RyaW5nIGluc3RhbmNlTmFtZSwgU3RyaW5nIHNvdXJjZUZpbGUsCisgICAgU3RyaW5nIGRlc3REaXIpICB7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBTeW5jaHJvbml6YXRpb25DbGllbnQgc2MgPSAKKyAgICAgICAgICAgIFN5bmNocm9uaXphdGlvbkNsaWVudCBzYyA9CiAgICAgICAgICAgICAgIFN5bmNocm9uaXphdGlvbkZhY3RvcnkuY3JlYXRlU3luY2hyb25pemF0aW9uQ2xpZW50KCBpbnN0YW5jZU5hbWUpOwogICAgICAgICAgICAgc2MuY29ubmVjdCgpOwogICAgICAgICAgICAgU3RyaW5nIHMgPSBzYy5wdXQoc291cmNlRmlsZSwgZGVzdERpcik7CkBAIC0xMjQsMjIgKzEyNCwyMiBAQAogICAgICAgICB9CiAgICAgfQogCi0JcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQkJdGhpcy5jb250ZXh0ID0gc2M7CisgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKKyAgICAgICAgdGhpcy5jb250ZXh0ID0gc2M7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB0aGlzLmluaXRpYWxDdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRoKSB7CiAgICAgICAgICAgICB0aC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCX0KKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQorICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CiAKLQlwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKKyAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiSW4gU0ZTQi5lamJBY3RpdmF0ZSgpICIgKTsKICAgICB9CiAKLQlwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7CisgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJJbiBTRlNCLmVqYlBhc3NpdmF0ZSgpICIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvZGVwbG95bWVudC9lamIvU3luY2hyb25pemF0aW9uSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9kZXBsb3ltZW50L2VqYi9TeW5jaHJvbml6YXRpb25Ib21lLmphdmEKaW5kZXggOTdmZWFlMi4uMjYyNTMwMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9kZXBsb3ltZW50L2VqYi9TeW5jaHJvbml6YXRpb25Ib21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9kZXBsb3ltZW50L2VqYi9TeW5jaHJvbml6YXRpb25Ib21lLmphdmEKQEAgLTIzLDYgKzIzLDYgQEAKIHB1YmxpYyBpbnRlcmZhY2UgU3luY2hyb25pemF0aW9uSG9tZQogICAgIGV4dGVuZHMgRUpCSG9tZQogewotCXB1YmxpYyBTeW5jaHJvbml6YXRpb24gY3JlYXRlKCkKKyAgICBwdWJsaWMgU3luY2hyb25pemF0aW9uIGNyZWF0ZSgpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvc2VjdXJpdHkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvc2VjdXJpdHkvYnVpbGQucHJvcGVydGllcwppbmRleCA1ZDYzNTVjLi4xMDQxNjM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL3NlY3VyaXR5L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9zZWN1cml0eS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJhcGlTZWN1cml0eSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KQEAgLTI2LDcgKzI2LDcgQEAKIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iYXBpU2VjdXJpdHkiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iYXBpU2VjdXJpdHkiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IgogICAgICAgICB2YWx1ZT0iY29tLnN1bi5kZXZ0ZXN0LmFkbWluLnN5bmNocm9uaXphdGlvbi5hcGkuc2VjdXJpdHkuY2xpZW50LlJwYUNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL3NlY3VyaXR5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvc2VjdXJpdHkvYnVpbGQueG1sCmluZGV4IGFiMDdhY2QuLjZkYjExYzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvc2VjdXJpdHkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvc2VjdXJpdHkvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAmdGVzdFByb3BlcnRpZXM7CiAgICAmbG9jYWxUZXN0UHJvcGVydGllczsKICAgICZjb21tb25TZWN1cml0eTsKLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCwgc2V0dXAsIGRlcGxveSxydW4sIHVuZGVwbG95LCB1bnNldHVwIi8+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIi8+CkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktdG8tY2x1c3RlciIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJlZSI+ICAgICAgCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktdG8tY2x1c3RlciIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJlZSI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlNvIHlvdSBhcmUgdXNpbmcgRW50ZXJwcmlzZSBWZXJzaW9uIGVoID8iLz4KICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95ZWQuYXBwIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIi8+CiAKQEAgLTE0OSw3ICsxNDksNyBAQAogICAgIDwhLS0gZGVwbG95ZWQuYXBwIGRlZmF1bHRzIHRvICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciBkZWZpbmVkIGluIHByb3BlcnRpZXMueG1sLS0+CiAgICAgICAgIDxhcmcgbGluZT0iJHtkZXBsb3llZC5hcHB9Ii8+CiAgICAgICA8L2V4ZWM+Ci0gICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3ltZW50IG9uIHRhcmdldCBzZXJ2ZXIgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gCisgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3ltZW50IG9uIHRhcmdldCBzZXJ2ZXIgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0KICAgICBzdWNjZXNzZnVsIi8+CiAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RvcC1kZWZhdWx0LWNsdXN0ZXItY29tbW9uIi8+CiAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnQtZGVmYXVsdC1jbHVzdGVyLWNvbW1vbiIvPgpAQCAtMTU5LDE4ICsxNTksMTggQEAKICAgIDx0YXJnZXQgbmFtZT0icnVuLXN0YW5kYWxvbmUtY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJqbmRpLm5hbWUiIHZhbHVlPSJlamIvYXBpU2VjdXJpdHkiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InByb3ZpZGVyLnVybCIgdmFsdWU9Imlpb3A6Ly8ke2FkbWluLmhvc3R9OiR7b3JiLnBvcnR9Ii8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiCiAgICAgICAgICAgICB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLm5hbWluZy5TZXJpYWxJbml0Q29udGV4dEZhY3RvcnkiLz4KICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSI+CiAgICAgICAgIDxhcmcgdmFsdWU9Ii1jbGllbnQiIC8+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIvPgotCTxhcmcgdmFsdWU9Ii14bWwiLz4KLQk8YXJnIHZhbHVlPSJzdW4tYWNjLTEueG1sIi8+Ci0JPGFyZyB2YWx1ZT0iLXRleHRhdXRoIi8+Ci0JPGFyZyB2YWx1ZT0iLXVzZXIiLz4KLQk8YXJnIHZhbHVlPSIke3Rlc3QudXNlcn0iLz4KLQk8YXJnIHZhbHVlPSItcGFzc3dvcmQiLz4KLQk8YXJnIHZhbHVlPSIke3Rlc3QucGFzc3dkfSIvPgorICAgIDxhcmcgdmFsdWU9Ii14bWwiLz4KKyAgICA8YXJnIHZhbHVlPSJzdW4tYWNjLTEueG1sIi8+CisgICAgPGFyZyB2YWx1ZT0iLXRleHRhdXRoIi8+CisgICAgPGFyZyB2YWx1ZT0iLXVzZXIiLz4KKyAgICA8YXJnIHZhbHVlPSIke3Rlc3QudXNlcn0iLz4KKyAgICA8YXJnIHZhbHVlPSItcGFzc3dvcmQiLz4KKyAgICA8YXJnIHZhbHVlPSIke3Rlc3QucGFzc3dkfSIvPgogICAgICAgICA8YXJnIHZhbHVlPSIke3Byb3ZpZGVyLnVybH0iLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjdHhmYWN0b3J5fSIvPgogICAgICAgICA8YXJnIHZhbHVlPSIke2puZGkubmFtZX0iLz4KQEAgLTE4MCwxOCArMTgwLDE4IEBACiAgICA8dGFyZ2V0IG5hbWU9InJ1bi1zdGFuZGFsb25lLWNsaWVudC1maWxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJqbmRpLm5hbWUiIHZhbHVlPSJlamIvYXBpU2VjdXJpdHkiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InByb3ZpZGVyLnVybCIgdmFsdWU9Imlpb3A6Ly8ke2FkbWluLmhvc3R9OiR7b3JiLnBvcnR9Ii8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiCiAgICAgICAgICAgICB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLm5hbWluZy5TZXJpYWxJbml0Q29udGV4dEZhY3RvcnkiLz4KICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSI+CiAgICAgICAgIDxhcmcgdmFsdWU9Ii1jbGllbnQiIC8+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIvPgotCTxhcmcgdmFsdWU9Ii14bWwiLz4KLQk8YXJnIHZhbHVlPSJzdW4tYWNjLTEueG1sIi8+Ci0JPGFyZyB2YWx1ZT0iLXRleHRhdXRoIi8+Ci0JPGFyZyB2YWx1ZT0iLXVzZXIiLz4KLQk8YXJnIHZhbHVlPSIke3Rlc3QudXNlcn0iLz4KLQk8YXJnIHZhbHVlPSItcGFzc3dvcmRmaWxlIi8+Ci0JPGFyZyB2YWx1ZT0iJHt0ZXN0LnBhc3N3ZH0iLz4KKyAgICA8YXJnIHZhbHVlPSIteG1sIi8+CisgICAgPGFyZyB2YWx1ZT0ic3VuLWFjYy0xLnhtbCIvPgorICAgIDxhcmcgdmFsdWU9Ii10ZXh0YXV0aCIvPgorICAgIDxhcmcgdmFsdWU9Ii11c2VyIi8+CisgICAgPGFyZyB2YWx1ZT0iJHt0ZXN0LnVzZXJ9Ii8+CisgICAgPGFyZyB2YWx1ZT0iLXBhc3N3b3JkZmlsZSIvPgorICAgIDxhcmcgdmFsdWU9IiR7dGVzdC5wYXNzd2R9Ii8+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7cHJvdmlkZXIudXJsfSIvPgogICAgICAgICA8YXJnIHZhbHVlPSIke2N0eGZhY3Rvcnl9Ii8+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7am5kaS5uYW1lfSIvPgpAQCAtMjA0LDIxICsyMDQsMjEgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1zdGFuZGFsb25lLWNsaWVudC10ZW1wIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJqbmRpLm5hbWUiIHZhbHVlPSJlamIvYXBpU2VjdXJpdHkiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InByb3ZpZGVyLnVybCIgdmFsdWU9Imlpb3A6Ly8ke2FkbWluLmhvc3R9OiR7b3JiLnBvcnR9Ii8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiCiAgICAgICAgICAgICB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLm5hbWluZy5TZXJpYWxJbml0Q29udGV4dEZhY3RvcnkiLz4KIDwhLS0KLQk8cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIgCi0gICAgICAgICAgICAJdmFsdWU9Im9yZy5nbGFzc2Zpc2guam5kaS5jb3NuYW1pbmcuQ05DdHhGYWN0b3J5Ii8+CisgICAgPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiCisgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5nbGFzc2Zpc2guam5kaS5jb3NuYW1pbmcuQ05DdHhGYWN0b3J5Ii8+CiAtLT4KLQk8ZWNobyBtZXNzYWdlPSJwcm92aWRlci51cmwgdXNlZCBpcyAke3Byb3ZpZGVyLnVybH0iLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJwcm92aWRlci51cmwgdXNlZCBpcyAke3Byb3ZpZGVyLnVybH0iLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iJHt0ZXN0LmNsaWVudH0iCiAgICAgICAgIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9OiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIKICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiIGZvcms9InRydWUiPgotCTxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsSG9zdD0ke2FkbWluLmhvc3R9Ii8+Ci0JPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0PSR7b3JiLnBvcnR9Ii8+Ci0JPGp2bWFyZyB2YWx1ZT0iLVhsaW50OnVuY2hlY2tlZCIvPgotCTwhLS1qdm1hcmcgdmFsdWU9Ii1EajJlZWxvZ2luLm5hbWU9JHt0ZXN0LnVzZXJ9Ii8+Ci0JPGp2bWFyZyB2YWx1ZT0iLURqMmVlbG9naW4ucGFzc3dvcmQ9JHt0ZXN0LnBhc3N3ZH0iLy0tPgorICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsSG9zdD0ke2FkbWluLmhvc3R9Ii8+CisgICAgPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0PSR7b3JiLnBvcnR9Ii8+CisgICAgPGp2bWFyZyB2YWx1ZT0iLVhsaW50OnVuY2hlY2tlZCIvPgorICAgIDwhLS1qdm1hcmcgdmFsdWU9Ii1EajJlZWxvZ2luLm5hbWU9JHt0ZXN0LnVzZXJ9Ii8+CisgICAgPGp2bWFyZyB2YWx1ZT0iLURqMmVlbG9naW4ucGFzc3dvcmQ9JHt0ZXN0LnBhc3N3ZH0iLy0tPgogICAgICAgICA8YXJnIHZhbHVlPSIke3Byb3ZpZGVyLnVybH0iLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjdHhmYWN0b3J5fSIvPgogICAgICAgICA8YXJnIHZhbHVlPSIke2puZGkubmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvc2VjdXJpdHkvY2xpZW50L1JwYUNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9zZWN1cml0eS9jbGllbnQvUnBhQ2xpZW50LmphdmEKaW5kZXggNjliOGZjNy4uMTg0MWY2ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9zZWN1cml0eS9jbGllbnQvUnBhQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9zZWN1cml0eS9jbGllbnQvUnBhQ2xpZW50LmphdmEKQEAgLTMyLDggKzMyLDggQEAKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdE5vdFJ1biAgICA9ICJURVNUIE5PVCBSVU4iOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0UGFzc2VkICAgID0gIlRFU1QgUEFTU0VEIjsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdEZhaWxlZCAgICA9ICJURVNUIEZBSUxFRCI7Ci0gICAgCi0gICAgLy9wcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorCisgICAgLy9wcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgIC8vICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAKQEAgLTQ2LDE4ICs0NiwxOCBAQAogICAgICAgICAgICAgLy9zdGF0LmFkZFN0YXR1cygiY2xpZW50IGluaXRTRlNCLS0gd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzYWdlOiBTeW5jQ2xpZW50VGVzdCBwcm92aWRlci11cmwgY3R4RmFjdG9yeSBqbmRpLW5hbWUiKTsKICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gCisgICAgICAgIH0KIAogICAgICAgICBScGFDbGllbnQgY2xpZW50ID0gbmV3IFJwYUNsaWVudChhcmdzKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbYXBpQ2xpZW50XSBkb1Rlc3QoKS4uLiIpOwogICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlthcGlDbGllbnRdIERPTkUgZG9UZXN0KCkuLi4iKTsKICAgICAgICAgLy9zdGF0LnByaW50U3VtbWFyeSgic3luY2hyb25pemF0aW9uIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIFJwYUNsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgaW5pdFNGU0IoYXJncyk7CkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbnVsbDsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBudWxsOwotICAgICAgICAgICAgaWYgKChhcmdzWzBdID09IG51bGwpIHx8IChhcmdzWzFdID09IG51bGwpKSB7IAorICAgICAgICAgICAgaWYgKChhcmdzWzBdID09IG51bGwpIHx8IChhcmdzWzFdID09IG51bGwpKSB7CiAgICAgICAgICAgICAgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlthcGlDbGllbnRdIExvb2tpbmd1cCBCZWFuIGFwaUNsaWVudCAiKTsKICAgICAgICAgICAgICAgICBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2FwaVNlY3VyaXR5Iik7CkBAIC05OCwxMSArOTgsMTEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0U3luY2goU3RyaW5nW10gYXJncykgewotICAgIAkJLy8gaW52b2tlIDMgb3ZlcmxvYWRlZCBtZXRob2RzIG9uIHRoZSBFSkIKKyAgICAgICAgICAgIC8vIGludm9rZSAzIG92ZXJsb2FkZWQgbWV0aG9kcyBvbiB0aGUgRUpCCiAgICAgICAgIHRyeXsKLQkJU3lzdGVtLm91dC5wcmludGxuICgiQ2FsbGluZyBhdXRob3JpemVkIG1ldGhvZCAtIGFkZEl0ZW0iKTsKLQkJaHIuYWRkSXRlbSgibGlwc3RpY2siLCAzMCk7Ci0JCWhyLmFkZEl0ZW0oIm1hc2NhcmEiLCA0MCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkNhbGxpbmcgYXV0aG9yaXplZCBtZXRob2QgLSBhZGRJdGVtIik7CisgICAgICAgIGhyLmFkZEl0ZW0oImxpcHN0aWNrIiwgMzApOworICAgICAgICBoci5hZGRJdGVtKCJtYXNjYXJhIiwgNDApOwogICAgICAgICAgICAgICAgIGhyLmFkZEl0ZW0oImxpcHN0aWNrMiIsIDUwKTsKICAgICAgICAgICAgICAgICBoci5hZGRJdGVtKCJzYW5kYWxzIiwgIDIwMCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGhyLmdldFRvdGFsQ29zdCgpKTsKQEAgLTExOCw5ICsxMTgsOSBAQAogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIHJlKXsKICAgICAgICAgICAgICAgICByZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJSZWFsbVBlckFwcDpScGFMb2dpbkJlYW4gVGVzdCBGYWlsZWQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWFsbVBlckFwcDpScGFMb2dpbkJlYW4gVGVzdCBGYWlsZWQiKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgtMSk7Ci0JfQorICAgIH0KICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVhbG1QZXJBcHA6UnBhTG9naW5CZWFuIFRlc3QgUGFzc2VkIik7CiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL3NlY3VyaXR5L3Nob3BwaW5nL1JwYUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvc2VjdXJpdHkvc2hvcHBpbmcvUnBhQmVhbi5qYXZhCmluZGV4IGVjYmIwYmEuLjAzZWRkODIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvc2VjdXJpdHkvc2hvcHBpbmcvUnBhQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvc2VjdXJpdHkvc2hvcHBpbmcvUnBhQmVhbi5qYXZhCkBAIC0zNiwyNiArMzYsMjYgQEAKICAqLwogCiBwdWJsaWMgY2xhc3MgUnBhQmVhbiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIHNob3BwZXIgPSAiYW5vbnltb3VzIjsKICAgICBwcml2YXRlIFN0cmluZyBwcmluY2lwYWwgPSAiaGFycHJlZXQiOwogICAgIHByaXZhdGUgaW50IHRvdGFsUHJpY2UgPSAwOwotICAgIAorCiAgICAgcHJpdmF0ZSBpbnQgdG90YWxJdGVtcyA9IDA7Ci0gICAgCisKICAgICBwcml2YXRlIFZlY3RvciBpdGVtczsKLSAgICAKKwogICAgIHByaXZhdGUgVmVjdG9yIGl0ZW1QcmljZTsKLSAgICAKKwogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2MgPSBudWxsOwotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgU2hvcHBpbmdFSkIgKi8KICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoU3RyaW5nIHNob3BwZXJOYW1lKSB7CiAgICAgICAgIHNob3BwZXIgPSBzaG9wcGVyTmFtZTsKICAgICAgICAgaXRlbXMgPSBuZXcgVmVjdG9yKCk7CiAgICAgICAgIGl0ZW1QcmljZSA9IG5ldyBWZWN0b3IoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhZGRJdGVtKGphdmEubGFuZy5TdHJpbmcgaXRlbSwgaW50IHByaWNlKSB0aHJvd3MgRUpCRXhjZXB0aW9uLAogICAgICAgICBSZW1vdGVFeGNlcHRpb257CiAgICAgICAgIGNoZWNrQ2FsbGVyUHJpbmNpcGFsKCk7CkBAIC02NywyNiArNjcsMjYgQEAKICAgICAgICAgICAgICsgaXRlbSArIiBmb3IgcHJpY2UgPSIrIHByaWNlICsiIC5Ub3RhbCBJdGVtcyA9ICIrdG90YWxJdGVtcyArCiAgICAgICAgICAgICAiIC5Ub3RhbFByaWNlID0gIiArIHRvdGFsUHJpY2UpOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBkZWxldGVJdGVtKGphdmEubGFuZy5TdHJpbmcgaXRlbSkgdGhyb3dzIEVKQkV4Y2VwdGlvbiwgCisKKyAgICBwdWJsaWMgdm9pZCBkZWxldGVJdGVtKGphdmEubGFuZy5TdHJpbmcgaXRlbSkgdGhyb3dzIEVKQkV4Y2VwdGlvbiwKICAgICAgICAgUmVtb3RlRXhjZXB0aW9uewogICAgICAgICBjaGVja0NhbGxlclByaW5jaXBhbCgpOwogICAgICAgICBpbnQgaW5kZXggPSBpdGVtcy5pbmRleE9mKGl0ZW0pOwogICAgICAgICBpdGVtcy5yZW1vdmUoaXRlbSk7CiAgICAgICAgIEludGVnZXIgcHJpY2UgPSAoSW50ZWdlcikgaXRlbVByaWNlLmdldChpbmRleCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2hvcHBpbmcgQ2FydDogUmVtb3ZpbmcgaXRlbSAiKyBpdGVtICsiIEBwcmljZSAiKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTaG9wcGluZyBDYXJ0OiBSZW1vdmluZyBpdGVtICIrIGl0ZW0gKyIgQHByaWNlICIrCiAgICAgICAgICAgICBwcmljZS5pbnRWYWx1ZSgpKTsKICAgICAgICAgdG90YWxQcmljZSAtPSBwcmljZS5zaG9ydFZhbHVlKCk7Ci0gICAgICAgIGl0ZW1QcmljZS5yZW1vdmUoaW5kZXgpOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGl0ZW1QcmljZS5yZW1vdmUoaW5kZXgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBTaG9wcGluZyBDYXJ0OiBTaG9wcGVyICIrIHNob3BwZXIgKyIgIC5Ub3RhbCBJdGVtcyA9ICIrdG90YWxJdGVtcyArCiAgICAgICAgICAgICAiIC5Ub3RhbFByaWNlID0gIiArIHRvdGFsUHJpY2UpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBkb3VibGUgZ2V0VG90YWxDb3N0KCkgdGhyb3dzIEVKQkV4Y2VwdGlvbnsKICAgICAgICAgY2hlY2tDYWxsZXJQcmluY2lwYWwoKTsKICAgICAgICAgcmV0dXJuIHRvdGFsUHJpY2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZ1tdIGdldEl0ZW1zKCkgdGhyb3dzIEVKQkV4Y2VwdGlvbnsKICAgICAgICAgY2hlY2tDYWxsZXJQcmluY2lwYWwoKTsKIApAQCAtOTgsMjYgKzk4LDI2IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGl0ZW1OYW1lczsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBScGEgZWpiQWN0aXZhdGUiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBScGEgZWpiUGFzc2l2YXRlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSAgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFJwYSBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0IHNlc3Npb25Db250ZXh0KSB7CiAgICAgICAgIHNjID0gc2Vzc2lvbkNvbnRleHQ7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGNoZWNrQ2FsbGVyUHJpbmNpcGFsKCkgdGhyb3dzIEVKQkV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGVyIFByaW5jaWFsID0gIiArIHNjLmdldENhbGxlclByaW5jaXBhbCgpICsKICAgICAgICAgICAgICAgICAiIGNvbXBhcmluZyBhZ2FpbnN0ICIgKyBwcmluY2lwYWwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9zZWN1cml0eS9zaG9wcGluZy9ScGFIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL3NlY3VyaXR5L3Nob3BwaW5nL1JwYUhvbWUuamF2YQppbmRleCAzZGJjZjU3Li5jYTZhMTk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL3NlY3VyaXR5L3Nob3BwaW5nL1JwYUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL3NlY3VyaXR5L3Nob3BwaW5nL1JwYUhvbWUuamF2YQpAQCAtMjcsOCArMjcsOCBAQAogICogQGF1dGhvciAgSGFycHJlZXQgU2luZ2gKICAqLwogcHVibGljIGludGVyZmFjZSBScGFIb21lIGV4dGVuZHMgRUpCSG9tZXsKLSAgICAKLSAgICBwdWJsaWMgUnBhUmVtb3RlIGNyZWF0ZShqYXZhLmxhbmcuU3RyaW5nIHNob3BwZXJOYW1lKSAKKworICAgIHB1YmxpYyBScGFSZW1vdGUgY3JlYXRlKGphdmEubGFuZy5TdHJpbmcgc2hvcHBlck5hbWUpCiAgICAgICAgIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9zZWN1cml0eS9zaG9wcGluZy9ScGFSZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvc2VjdXJpdHkvc2hvcHBpbmcvUnBhUmVtb3RlLmphdmEKaW5kZXggMTJiZjc5NS4uNzJmZTAzMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9zZWN1cml0eS9zaG9wcGluZy9ScGFSZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL3NlY3VyaXR5L3Nob3BwaW5nL1JwYVJlbW90ZS5qYXZhCkBAIC0yMywxNyArMjMsMTcgQEAKIHBhY2thZ2UgY29tLnN1bi5kZXZ0ZXN0LmFkbWluLnN5bmNocm9uaXphdGlvbi5hcGkuc2VjdXJpdHkuc2hvcHBpbmc7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCT2JqZWN0OwogLyoqCi0gKiBTaG9wcGluZyBDYXJ0IFN0YXRlZnVsIFNlc3Npb24gQmVhbi4gSnVzdCB0ZXN0cyAtRGoyZWVsb2dpbi5uYW1lIAorICogU2hvcHBpbmcgQ2FydCBTdGF0ZWZ1bCBTZXNzaW9uIEJlYW4uIEp1c3QgdGVzdHMgLURqMmVlbG9naW4ubmFtZQogICogIC1EajJlZWxvZ2luLnBhc3N3b3JkIHN5c3RlbSBwcm9wZXJ0aWVzLgogICogQGF1dGhvciAgaHNpbmdoCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgUnBhUmVtb3RlIGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAgICAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgYWRkSXRlbShqYXZhLmxhbmcuU3RyaW5nIGl0ZW0sIGludCBwcmljZSkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRlbGV0ZUl0ZW0oamF2YS5sYW5nLlN0cmluZyBpdGVtKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgICAgIAorCiAgICAgcHVibGljIGRvdWJsZSBnZXRUb3RhbENvc3QoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmdbXSBnZXRJdGVtcygpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL3NlY3VyaXR5L3N1bi1hY2MtMS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL3NlY3VyaXR5L3N1bi1hY2MtMS54bWwKaW5kZXggZGUzMTQxNy4uNmEwMzJjZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9zZWN1cml0eS9zdW4tYWNjLTEueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9hcGkvc2VjdXJpdHkvc3VuLWFjYy0xLnhtbApAQCAtMTgsOCArMTgsOCBAQAogLS0+CiAKIDwhLS0KLSAgIFBsZWFzZSByZW1lbWJlciB0byBjdXN0b21pemUgdGhpcyBmaWxlIGZvciB5b3VyIGVudmlyb25tZW50LiBUaGUgZGVmYXVsdHMgZm9yIAotICAgZm9sbG93aW5nIGZpZWxkcyBtYXkgbm90IGJlIGFwcHJvcHJpYXRlLiAgCisgICBQbGVhc2UgcmVtZW1iZXIgdG8gY3VzdG9taXplIHRoaXMgZmlsZSBmb3IgeW91ciBlbnZpcm9ubWVudC4gVGhlIGRlZmF1bHRzIGZvcgorICAgZm9sbG93aW5nIGZpZWxkcyBtYXkgbm90IGJlIGFwcHJvcHJpYXRlLgogICAgLSB0YXJnZXQtc2VydmVyIG5hbWUsIGFkZHJlc3MgYW5kIHBvcnQKICAgIC0gUHJvcGVydHkgc2VjdXJpdHkuY29uZmlnIGluIG1lc3NhZ2Utc2VjdXJpdHktY29uZmlnCiAtLT4KQEAgLTMwLDExICszMCwxMSBAQAogICA8dGFyZ2V0LXNlcnZlciBuYW1lPSJsb2NhbGhvc3QiIGFkZHJlc3M9ImxvY2FsaG9zdCIgcG9ydD0iMzM3MDAiLz4KICAgPGxvZy1zZXJ2aWNlIGZpbGU9IiIgbGV2ZWw9IldBUk5JTkciLz4KICAgPG1lc3NhZ2Utc2VjdXJpdHktY29uZmlnIGF1dGgtbGF5ZXI9IlNPQVAiPgotCTwhLS0gdHVybmVkIG9mZiBieSBkZWZhdWx0IC0tPgotCTxwcm92aWRlci1jb25maWcgY2xhc3MtbmFtZT0iY29tLnN1bi54bWwud3NzLnByb3ZpZGVyLkNsaWVudFNlY3VyaXR5QXV0aE1vZHVsZSIgcHJvdmlkZXItaWQ9IkNsaWVudFByb3ZpZGVyIiBwcm92aWRlci10eXBlPSJjbGllbnQiPiAKLSAJPHJlcXVlc3QtcG9saWN5IGF1dGgtc291cmNlPSJjb250ZW50Ii8+Ci0gCSA8cmVzcG9uc2UtcG9saWN5IGF1dGgtc291cmNlPSJjb250ZW50Ii8+Ci0gICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2VjdXJpdHkuY29uZmlnIiB2YWx1ZT0id3NzLWNsaWVudC1jb25maWcueG1sIi8+IAorICAgIDwhLS0gdHVybmVkIG9mZiBieSBkZWZhdWx0IC0tPgorICAgIDxwcm92aWRlci1jb25maWcgY2xhc3MtbmFtZT0iY29tLnN1bi54bWwud3NzLnByb3ZpZGVyLkNsaWVudFNlY3VyaXR5QXV0aE1vZHVsZSIgcHJvdmlkZXItaWQ9IkNsaWVudFByb3ZpZGVyIiBwcm92aWRlci10eXBlPSJjbGllbnQiPgorICAgICA8cmVxdWVzdC1wb2xpY3kgYXV0aC1zb3VyY2U9ImNvbnRlbnQiLz4KKyAgICAgIDxyZXNwb25zZS1wb2xpY3kgYXV0aC1zb3VyY2U9ImNvbnRlbnQiLz4KKyAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzZWN1cml0eS5jb25maWciIHZhbHVlPSJ3c3MtY2xpZW50LWNvbmZpZy54bWwiLz4KICA8L3Byb3ZpZGVyLWNvbmZpZz4KICA8L21lc3NhZ2Utc2VjdXJpdHktY29uZmlnPgogPC9jbGllbnQtY29udGFpbmVyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2FwaS9zZWN1cml0eS93c3MtY2xpZW50LWNvbmZpZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL3NlY3VyaXR5L3dzcy1jbGllbnQtY29uZmlnLnhtbAppbmRleCBhZjk0NmJlLi42ODNmZWMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL3NlY3VyaXR5L3dzcy1jbGllbnQtY29uZmlnLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYXBpL3NlY3VyaXR5L3dzcy1jbGllbnQtY29uZmlnLnhtbApAQCAtMTYsMTkgKzE2LDE5IEBACiAKIC0tPgogCi08eHdzczpTZWN1cml0eUNvbmZpZ3VyYXRpb24geG1sbnM6eHdzcz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMveHdzcy9jb25maWciIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBNZXNzYWdlcz0iZmFsc2UiPiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorPHh3c3M6U2VjdXJpdHlDb25maWd1cmF0aW9uIHhtbG5zOnh3c3M9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL3h3c3MvY29uZmlnIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBNZXNzYWdlcz0iZmFsc2UiPgogICAgIDx4d3NzOlRpbWVzdGFtcC8+Ci0gICAgPHh3c3M6UmVxdWlyZVVzZXJuYW1lVG9rZW4gbm9uY2VSZXF1aXJlZD0iZmFsc2UiIHBhc3N3b3JkRGlnZXN0UmVxdWlyZWQ9ImZhbHNlIi8+ICAgCisgICAgPHh3c3M6UmVxdWlyZVVzZXJuYW1lVG9rZW4gbm9uY2VSZXF1aXJlZD0iZmFsc2UiIHBhc3N3b3JkRGlnZXN0UmVxdWlyZWQ9ImZhbHNlIi8+CiAgICAgPHh3c3M6UmVxdWlyZUVuY3J5cHRpb24+CiAgICAgICAgIDx4d3NzOlRhcmdldCB0eXBlPSJxbmFtZSI+e2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvfUJvZHk8L3h3c3M6VGFyZ2V0PgogICAgIDwveHdzczpSZXF1aXJlRW5jcnlwdGlvbj4KICAgICA8eHdzczpSZXF1aXJlU2lnbmF0dXJlPgogICAgICAgICA8eHdzczpUYXJnZXQgdHlwZT0icW5hbWUiPntodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlL31Cb2R5PC94d3NzOlRhcmdldD4KLSAgICA8L3h3c3M6UmVxdWlyZVNpZ25hdHVyZT4gICAgIAorICAgIDwveHdzczpSZXF1aXJlU2lnbmF0dXJlPgogICAgIDx4d3NzOkVuY3J5cHQ+CiAgICAgICAgIDx4d3NzOlg1MDlUb2tlbiBjZXJ0aWZpY2F0ZUFsaWFzPSJzMWFzIi8+Ci0gICAgPC94d3NzOkVuY3J5cHQ+ICAgIAorICAgIDwveHdzczpFbmNyeXB0PgogICAgIDx4d3NzOlNpZ24+CiAgICAgICAgIDx4d3NzOlg1MDlUb2tlbiBjZXJ0aWZpY2F0ZUFsaWFzPSJzMWFzIi8+CiAgICAgPC94d3NzOlNpZ24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDc0ZmFkNmEuLjU1ZTEwZGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJjbHVzdGVyLm5hbWUiIHZhbHVlPSJlZS1zeW5jaHJvbml6YXRpb24tY2x1c3RlciIvPgogPHByb3BlcnR5IG5hbWU9Im5vZGVhZ2VudC5uYW1lIiB2YWx1ZT0iZWUtc3luY2hyb25pemF0aW9uLWFnZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vY2xlYW5lci9hcHBsaWNhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2NsZWFuZXIvYXBwbGljYXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCBhOWJmNGRhLi42MjhjODYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vY2xlYW5lci9hcHBsaWNhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9jbGVhbmVyL2FwcGxpY2F0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDMwICsxNSwzMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0iZWUiIHZhbHVlPSJlbnRlcnByaXNlIGVkaXRpb24iLz4KIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN5bmNocm9uaXphdGlvbi1jbGVhbmVyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1hcHBsaWNhdGlvbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tYXBwbGljYXRpb24iLz4gICAgICAgIFx1MDAyMAogCi08cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIAotCXZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiAKLQl2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIlx1MDAyMAorICAgIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiXHUwMDIwCisgICAgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4gICAgICAgIFx1MDAyMAogCi08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJjb20uc3VuLmRldnRlc3QuYWRtaW4ubm90aWZpY2F0aW9uLmxvb2t1cC5jbGllbnQuTG9va3VwQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9ImNvbS5zdW4uZGV2dGVzdC5hZG1pbi5ub3RpZmljYXRpb24ubG9va3VwLmNsaWVudC5Mb29rdXBDbGllbnQiLz4KIAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAKIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iY2xpZW50Lmphci5sb2NhdGlvbiIgdmFsdWU9IiR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2FwcGxpY2F0aW9ucy9qMmVlLWFwcHMvJHthcHBuYW1lfUNsaWVudC5qYXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9jbGVhbmVyL2FwcGxpY2F0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9jbGVhbmVyL2FwcGxpY2F0aW9uL2J1aWxkLnhtbAppbmRleCBlNTkzOTQ2Li4wZmM1MzIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vY2xlYW5lci9hcHBsaWNhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2NsZWFuZXIvYXBwbGljYXRpb24vYnVpbGQueG1sCkBAIC01Nyw3ICs1Nyw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIi8+CiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIi8+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC02OSw4ICs2OSw4IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktZWUiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcHNlcnZlci5pbnN0YW5jZS5uYW1lIiB2YWx1ZT0iZWUtc3luY2hyb25pemF0aW9uLWNsdXN0ZXIiLz4KQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlbW92ZS1jbGVhbmVyLWNvb2tpZSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtY2x1c3RlciIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb3B5LWNsaWVudC1qYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGNvcHkgZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vYXBwbGljYXRpb25zL2oyZWUtYXBwcy8ke2FwcG5hbWV9QXBwLyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIiB0b2Rpcj0iJHthc3NlbWJsZS5kaXJ9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS1lZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJlZSI+ICAgICAgCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktZWUiIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0iZWUiPgogICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95ICR7YXBwbmFtZX1BcHAuZWFyIHRvICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95ZWQuYXBwIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIi8+CiAKQEAgLTEyMywyNiArMTIzLDI2IEBACiAgICAgICA8L2V4ZWM+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3ltZW50IG9uIHRhcmdldCBzZXJ2ZXIgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gc3VjY2Vzc2Z1bCIvPgogICAgIDwvdGFyZ2V0PgotICAgICAKKwogICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgICAgPCEtLSBUYXJnZXQgdG8gcnVuIHRoZSBzdGFuZGFsb25lIGNsaWVudCB3aXRob3V0IEFDQyAtLT4KICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogICAgIDx0YXJnZXQgbmFtZT0icnVuLXN0YW5kYWxvbmUtY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJqbmRpLm5hbWUiIHZhbHVlPSJsb29rdXBiZWFuIi8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwcm92aWRlci51cmwiIHZhbHVlPSJpaW9wOi8vJHthZG1pbi5ob3N0fToke29yYi5wb3J0fSIvPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IgogICAgICAgICAgICAgdmFsdWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5uYW1pbmcuU2VyaWFsSW5pdENvbnRleHRGYWN0b3J5Ii8+CiA8IS0tCi0JPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiIAotICAgICAgICAgICAgCXZhbHVlPSJvcmcuZ2xhc3NmaXNoLmpuZGkuY29zbmFtaW5nLkNOQ3R4RmFjdG9yeSIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IgorICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZ2xhc3NmaXNoLmpuZGkuY29zbmFtaW5nLkNOQ3R4RmFjdG9yeSIvPgogLS0+Ci0JPGVjaG8gbWVzc2FnZT0icHJvdmlkZXIudXJsIHVzZWQgaXMgJHtwcm92aWRlci51cmx9Ii8+CisgICAgPGVjaG8gbWVzc2FnZT0icHJvdmlkZXIudXJsIHVzZWQgaXMgJHtwcm92aWRlci51cmx9Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9IiR7dGVzdC5jbGllbnR9IgogICAgICAgICBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofToke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiCiAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIiBmb3JrPSJ0cnVlIj4KLQk8anZtYXJnIHZhbHVlPSItRHRlc3RJZD0ke3Rlc3QuaWR9Ii8+Ci0JPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxIb3N0PSR7YWRtaW4uaG9zdH0iLz4KLQk8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iLz4KKyAgICA8anZtYXJnIHZhbHVlPSItRHRlc3RJZD0ke3Rlc3QuaWR9Ii8+CisgICAgPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxIb3N0PSR7YWRtaW4uaG9zdH0iLz4KKyAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtwcm92aWRlci51cmx9Ii8+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y3R4ZmFjdG9yeX0iLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtqbmRpLm5hbWV9Ii8+CkBAIC0xOTcsMTkgKzE5NywxOSBAQAogICAgIDwvcGF0aD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS10ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiIKLSAgICAgICAgZGVzY3JpcHRpb249IkNvbXBpbGUgdGVzdCBzb3VyY2VzIj4gIAorICAgICAgICBkZXNjcmlwdGlvbj0iQ29tcGlsZSB0ZXN0IHNvdXJjZXMiPgogICAgICAgPGVjaG8gbWVzc2FnZT0iSlVuaXQgSmFyICR7anVuaXQuamFyfSIgLz4KLSAgICAgCi0gICAgICAgIDxqYXZhYyBzcmNkaXI9IiR7dGVzdHNyYy5kaXJ9IiAKKworICAgICAgICA8amF2YWMgc3JjZGlyPSIke3Rlc3RzcmMuZGlyfSIKICAgICAgICAgICAgICAgIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgotICAgICAgICAgICAgICAgZGVidWc9IiR7amF2YWMuZGVidWd9IiAKKyAgICAgICAgICAgICAgIGRlYnVnPSIke2phdmFjLmRlYnVnfSIKICAgICAgICAgICAgICAgIG9wdGltaXplPSIke2phdmFjLm9wdGltaXplfSIKICAgICAgICAgICAgICAgIGRlcHJlY2F0aW9uPSIke2phdmFjLmRlcHJlY2F0aW9ufSIKICAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4KICAgICAgICAgICAgIDxjbGFzc3BhdGg+CiAgICAgICAgICAgICAgICAgPHBhdGggcmVmaWQ9InRlc3QuY2xhc3NwYXRoIi8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KLSAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouamF2YSIvPiAgICAgICAgICAgIAorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qYXZhIi8+CiAgICAgICAgIDwvamF2YWM+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vY2xlYW5lci9hcHBsaWNhdGlvbi9jbGllbnQvTG9va3VwQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vY2xlYW5lci9hcHBsaWNhdGlvbi9jbGllbnQvTG9va3VwQ2xpZW50LmphdmEKaW5kZXggMjg5ZTk3OC4uODgyYWEyMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2NsZWFuZXIvYXBwbGljYXRpb24vY2xpZW50L0xvb2t1cENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9jbGVhbmVyL2FwcGxpY2F0aW9uL2NsaWVudC9Mb29rdXBDbGllbnQuamF2YQpAQCAtMjYsMTIgKzI2LDEyIEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIC8qKgotICogQSBzaW1wbGUgamF2YSBjbGllbnQuIFRoaXMgdXNlcyB0aGUgc2VydmljZXMgcHJvdmlkZWQgYnkgdGhlIAorICogQSBzaW1wbGUgamF2YSBjbGllbnQuIFRoaXMgdXNlcyB0aGUgc2VydmljZXMgcHJvdmlkZWQgYnkgdGhlCiAgKiA8Y29kZT5Mb29rdXBCZWFuPC9jb2RlPi4KICAqLwogcHVibGljIGNsYXNzIExvb2t1cENsaWVudCB7CiAKLSAgICBwcml2YXRlIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBMb29rdXBDbGllbnQoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vY2xlYW5lci9hcHBsaWNhdGlvbi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9jbGVhbmVyL2FwcGxpY2F0aW9uL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCmluZGV4IGE2OWVmOTAuLjMxNDhkZWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9jbGVhbmVyL2FwcGxpY2F0aW9uL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9jbGVhbmVyL2FwcGxpY2F0aW9uL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgPHNtYWxsLWljb24+PC9zbWFsbC1pY29uPgogICAgIDxsYXJnZS1pY29uPjwvbGFyZ2UtaWNvbj4KICAgPC9pY29uPgotICA8ZGlzcGxheS1uYW1lPnN5bmNocm9uaXphdGlvbi1jbGVhbmVyLWFwcGxpY2F0aW9uQXBwPC9kaXNwbGF5LW5hbWU+ICAKKyAgPGRpc3BsYXktbmFtZT5zeW5jaHJvbml6YXRpb24tY2xlYW5lci1hcHBsaWNhdGlvbkFwcDwvZGlzcGxheS1uYW1lPgogICA8bW9kdWxlPgogICAgIDxqYXZhPnN5bmNocm9uaXphdGlvbi1jbGVhbmVyLWFwcGxpY2F0aW9uLWNsaWVudC5qYXI8L2phdmE+CiAgIDwvbW9kdWxlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2NsZWFuZXIvYXBwbGljYXRpb24vZWpiL0xvb2t1cEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9jbGVhbmVyL2FwcGxpY2F0aW9uL2VqYi9Mb29rdXBCZWFuLmphdmEKaW5kZXggODE4MzY1Zi4uOTIyOWFmNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2NsZWFuZXIvYXBwbGljYXRpb24vZWpiL0xvb2t1cEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vY2xlYW5lci9hcHBsaWNhdGlvbi9lamIvTG9va3VwQmVhbi5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAvKioKICAqLwogcHVibGljIGNsYXNzIExvb2t1cEJlYW4gaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7Ci0gICAgCisKICAgICBTZXNzaW9uQ29udGV4dCBzZXNzaW9uQ29udGV4dF87CiAKICAgICBCaWdEZWNpbWFsIHllblJhdGUgPSBuZXcgQmlnRGVjaW1hbCgiMTIxLjYwMDAiKTsKQEAgLTg4LDcgKzg4LDcgQEAKICAgICAgKiBMb2FkcyB0aGUgc3RhdGUgb2YgdGhlIGJlYW4gZnJvbSBzZWNvbmRhcnkgc3RvcmFnZS4gUmVxdWlyZWQgYnkgRUpCIHNwZWMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotICAgIAorCiAgICAgLyoqCiAgICAgICogS2VlcHMgdGhlIHN0YXRlIG9mIHRoZSBiZWFuIHRvIHNlY29uZGFyeSBzdG9yYWdlLiBSZXF1aXJlZCBieSBFSkIgc3BlYy4KICAgICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9jbGVhbmVyL2FwcGxpY2F0aW9uL3Rlc3RzcmMvU3luY2hyb25pemF0aW9uQ2xlYW5lclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VlL2FkbWluL3N5bmNocm9uaXphdGlvbi9jbGVhbmVyL2FwcGxpY2F0aW9uL3Rlc3RzcmMvU3luY2hyb25pemF0aW9uQ2xlYW5lclRlc3QuamF2YQppbmRleCBjMjY5NjJlLi5iYTM0ZGQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lZS9hZG1pbi9zeW5jaHJvbml6YXRpb24vY2xlYW5lci9hcHBsaWNhdGlvbi90ZXN0c3JjL1N5bmNocm9uaXphdGlvbkNsZWFuZXJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWUvYWRtaW4vc3luY2hyb25pemF0aW9uL2NsZWFuZXIvYXBwbGljYXRpb24vdGVzdHNyYy9TeW5jaHJvbml6YXRpb25DbGVhbmVyVGVzdC5qYXZhCkBAIC0yNyw5ICsyNyw5IEBACiAgKiBAYXV0aG9yIE5henJ1bCBJc2xhbQogICovCiBwdWJsaWMgY2xhc3MgU3luY2hyb25pemF0aW9uQ2xlYW5lclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0gICAKKwogICAgIHB1YmxpYyBTeW5jaHJvbml6YXRpb25DbGVhbmVyVGVzdChTdHJpbmcgbmFtZSkgewotICAgICAgICBzdXBlcihuYW1lKTsgICAgICAgIAorICAgICAgICBzdXBlcihuYW1lKTsKICAgICB9CiAKICAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHsKQEAgLTY4LDE1ICs2OCwxNSBAQAogICAgICAgICAgICAgZmFpbChleC50b1N0cmluZygpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qCiAgICAgcHVibGljIHN0YXRpYyBUZXN0U3VpdGUgc3VpdGUoKSB7CiAgICAgICAgIC8vVG8gcnVuIGFsbCB0ZXN0cwogICAgICAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShTeW5jaHJvbml6YXRpb25NZW1lbnRvVGVzdC5jbGFzcyk7CiAgICAgICAgIC8vVG8gcnVuIGEgc3Vic2V0IG9mIHRoZSB0ZXN0cwogICAgICAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0gICAgICAgIHN1aXRlLmFkZFRlc3QobmV3IFN5bmNocm9uaXphdGlvbk1lbWVudG9UZXN0KCJ0ZXN0RW1wdHlTeW5jIikpOyAgICAgICAKLSAgICAgICAgc3VpdGUuYWRkVGVzdChuZXcgU3luY2hyb25pemF0aW9uTWVtZW50b1Rlc3QoInRlc3RFbXB0eVN5bmMyIikpOyAgICAgICAKKyAgICAgICAgc3VpdGUuYWRkVGVzdChuZXcgU3luY2hyb25pemF0aW9uTWVtZW50b1Rlc3QoInRlc3RFbXB0eVN5bmMiKSk7CisgICAgICAgIHN1aXRlLmFkZFRlc3QobmV3IFN5bmNocm9uaXphdGlvbk1lbWVudG9UZXN0KCJ0ZXN0RW1wdHlTeW5jMiIpKTsKICAgICAgICAgcmV0dXJuIHN1aXRlOwogICAgIH0KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lbWJlZGRlZC9jb25maWcvY29tbW9uLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lbWJlZGRlZC9jb25maWcvY29tbW9uLXdlYi54bWwKaW5kZXggYzQ3ZDk5OS4uNjA3NjRjYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZW1iZWRkZWQvY29uZmlnL2NvbW1vbi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VtYmVkZGVkL2NvbmZpZy9jb21tb24td2ViLnhtbApAQCAtMTcsMjYgKzE3LDI2IEBACiAtLT4KIAogPCEtLQotICAgIFRoaXMgaXMgdGhlIHRvcCBsZXZlbCBidWlsZCBmaWxlIHRoYXQgc2hvdWxkIGJlIAotICAgIGltcG9ydGVkIGludG8gYWxsIHRoZSBsZWFmIGxldmVsIGJ1aWxkIGZpbGVzIAorICAgIFRoaXMgaXMgdGhlIHRvcCBsZXZlbCBidWlsZCBmaWxlIHRoYXQgc2hvdWxkIGJlCisgICAgaW1wb3J0ZWQgaW50byBhbGwgdGhlIGxlYWYgbGV2ZWwgYnVpbGQgZmlsZXMKIC0tPgogCiA8cHJvcGVydHkgbmFtZT0idGVzdC5lbWJlZGRlZC5tb2RlIiB2YWx1ZT0idHJ1ZSIvPgogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldHMgdG8gY2xlYW4gY2xhc3MgZmlsZXMgYW5kIGphcnMgZmlsZXMgLS0+Ci08IS0tIAotVmFyaWFibGVzIHVzZWQ6IAotICAgICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IAorPCEtLQorVmFyaWFibGVzIHVzZWQ6CisgICAgJHtidWlsZC5jbGFzc2VzLmRpcn0KICAgICAke2Fzc2VtYmxlLmRpcn0KIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJjbGVhbi1jbGFzc2VzLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IENsZWFuaW5nIHRlc3Qgc291cmNlIGZpbGVzOiAke2J1aWxkLmJhc2UuZGlyfSIgCisgICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogQ2xlYW5pbmcgdGVzdCBzb3VyY2UgZmlsZXM6ICR7YnVpbGQuYmFzZS5kaXJ9IgogICAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5iYXNlLmRpcn0iLz4KIDwvdGFyZ2V0PgotICAgIAorCiA8dGFyZ2V0IG5hbWU9ImNsZWFuLWphcnMtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxkZWxldGUgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KIDwvdGFyZ2V0PgpAQCAtNDgsOSArNDgsOSBAQAogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldCB0byBjb21waWxlIHRoZSBqYXZhIHNvdXJjZSBmaWxlcyAtLT4KLTwhLS0gCi1WYXJpYWJsZXMgdXNlZDogCi0gICAgJHtidWlsZC5jbGFzc2VzLmRpcn0gCis8IS0tCitWYXJpYWJsZXMgdXNlZDoKKyAgICAke2J1aWxkLmNsYXNzZXMuZGlyfQogICAgICR7czFhc3Rlc3QuY2xhc3NwYXRofQogICAgICR7c3JjfQogLS0+CkBAIC03Nyw3ICs3Nyw3IEBACiBWYXJpYWJsZXMgVXNlZDoKICAgICAke3dhci5maWxlfQogICAgICR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ci0gICAgJHthcHBuYW1lfSAgICAKKyAgICAke2FwcG5hbWV9CiAgICAgJHthc3NlbWJsZS5kaXJ9CiAgICAgJHt3ZWIueG1sfQogICAgICR7dGxkc30KQEAgLTk4LDE3ICs5OCwxNyBAQAogCiA8dGFyZ2V0IG5hbWU9InB1Ymxpc2gtd2FyLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8bWtkaXIgZGlyPSIke2J1aWxkLndlYmFwcHMuZGlyfSIvPgotICA8Y29weSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIiAKLSAgICAgICAgdG9maWxlPSIke2J1aWxkLndlYmFwcHMuZGlyfS8ke2FwcG5hbWV9LndhciIgCisgIDxjb3B5IGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiCisgICAgICAgIHRvZmlsZT0iJHtidWlsZC53ZWJhcHBzLmRpcn0vJHthcHBuYW1lfS53YXIiCiAgICAgICAgIG92ZXJ3cml0ZT0idHJ1ZSIgLz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNsZWFuLXdlYmFwcHMtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQud2ViYXBwcy5kaXJ9IiBxdWlldD0idHJ1ZSIgLz4gIAorICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLndlYmFwcHMuZGlyfSIgcXVpZXQ9InRydWUiIC8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJjbGVhciI+Ci0gICAgPGRlbGV0ZSBmaWxlPSIke3dhci5maWxlfSIvPiAgCisgICAgPGRlbGV0ZSBmaWxlPSIke3dhci5maWxlfSIvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iY29weS10bGRzIiBpZj0idGxkcy1leGlzdCIgZGVwZW5kcz0iY2xlYXIsdGVzdC10bGRzLWV4aXN0Ij4KQEAgLTEzNywxNyArMTM3LDE3IEBACiAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMiLz4KICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvbGliIi8+CiAgIDxta2RpciBkaXI9ImxpYiIvPgotICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC13ZWIueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXdlYi54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7c3VuLXdlYi54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHtzdW4td2ViLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3N1bi13ZWIueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtZWpiLWphci54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtZWpiLWphci54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9nbGFzc2Zpc2gtZWpiLWphci54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3N1bi1lamItamFyLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3N1bi1lamItamFyLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3N1bi1lamItamFyLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7d2VibG9naWMueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7d2VibG9naWMueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd2VibG9naWMueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbH0iIAorICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvbGliIiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgPGZpbGVzZXQgZGlyPSJsaWIiPgpAQCAtMTU1LDMyICsxNTUsMzIgQEAKICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLnppcCIvPgogICAgICAgPC9maWxlc2V0PgogICA8L2NvcHk+Ci0gIDxjb3B5IGZpbGU9IiR7d2Vic2VydmljZXMueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7d2Vic2VydmljZXMueG1sfSIKICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93ZWJzZXJ2aWNlcy54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke21hcHBpbmdmaWxlLmxvY2F0aW9ufS8ke21hcHBpbmdmaWxlLm5hbWV9IiAKKyAgPGNvcHkgZmlsZT0iJHttYXBwaW5nZmlsZS5sb2NhdGlvbn0vJHttYXBwaW5nZmlsZS5uYW1lfSIKICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvJHttYXBwaW5nZmlsZS5uYW1lfSIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7d3NkbGZpbGUubG9jYXRpb259LyR7d3NkbGZpbGUubmFtZX0iIAorICA8Y29weSBmaWxlPSIke3dzZGxmaWxlLmxvY2F0aW9ufS8ke3dzZGxmaWxlLm5hbWV9IgogICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dzZGwvJHt3c2RsZmlsZS5uYW1lfSIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7dGFnUGx1Z2lucy54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHt0YWdQbHVnaW5zLnhtbH0iCiAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvdGFnUGx1Z2lucy54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3dlYi54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHt3ZWIueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd2ViLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gICAgPGNvcHkgZmlsZT0iJHtwZXJzaXN0ZW5jZS54bWx9IiAKKyAgICA8Y29weSBmaWxlPSIke3BlcnNpc3RlbmNlLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvcGVyc2lzdGVuY2UueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgIDxjb3B5IGZpbGU9IiR7YmVhbnMueG1sfSIgCisgICA8Y29weSBmaWxlPSIke2JlYW5zLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2JlYW5zLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgIDxjb3B5IGZpbGU9IiR7Y29udGV4dC54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvTUVUQS1JTkYvY29udGV4dC54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSBmaWxlPSIke2NkaS1leHRlbnNpb24uc2VydmljZX0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvc2VydmljZXMvamFrYXJ0YS5lbnRlcnByaXNlLmluamVjdC5zcGkuRXh0ZW5zaW9uIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgICAgIAorCiAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9jbGFzc2VzIj4KICAgICAgIDxmaWxlc2V0IGRpcj0iJHt3YXIuY2xhc3Nlc30iPgogICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouY2xhc3MiLz4KQEAgLTIyNywxMCArMjI3LDEwIEBACiAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvc2VydmljZXMvamFrYXJ0YS5lbnRlcnByaXNlLmluamVjdC5zcGkuRXh0ZW5zaW9uIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvcGVyc2lzdGVuY2UueG1sIi8+CiAgICAgPC9maWxlc2V0PgotICA8L2phcj4gICAgICAgCisgIDwvamFyPgogICA8ZWNobyBtZXNzYWdlPSJjcmVhdGVkIHdhciBmaWxlICR7d2FyLmZpbGV9IiBsZXZlbD0idmVyYm9zZSIvPgotICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgPGVjaG8gbWVzc2FnZT0ibXkgd2ViY2xpZW50IHdhciBjbGFzc2VzIGFyZToke3dlYmNsaWVudC53YXIuY2xhc3Nlc30iIAorICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICA8ZWNobyBtZXNzYWdlPSJteSB3ZWJjbGllbnQgd2FyIGNsYXNzZXMgYXJlOiR7d2ViY2xpZW50Lndhci5jbGFzc2VzfSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiA8L3RhcmdldD4KIApAQCAtMjQ4LDM1ICsyNDgsMzUgQEAKIFZhcmlhYmxlcyBVc2VkOgogICAgICR7ZWpiLmphcn0KICAgICAke2J1aWxkLmNsYXNzZXMuZGlyfQotICAgICR7ZWpiLWphci54bWx9ICAgIAorICAgICR7ZWpiLWphci54bWx9CiAgICAgJHtiZWFucy54bWx9Ci0gICAgJHtwZXJzaXN0ZW5jZS1vcm0ueG1sfSAgICAKLSAgICAke3N1bi1lamItamFyLnhtbH0gICAgCi0gICAgJHtnbGFzc2Zpc2gtZWpiLWphci54bWx9ICAgIAotICAgICR7c3VuLWNtcC1tYXBwaW5ncy54bWx9ICAgIAotICAgICR7bWV0YWluZi5kaXJ9ICAgIAorICAgICR7cGVyc2lzdGVuY2Utb3JtLnhtbH0KKyAgICAke3N1bi1lamItamFyLnhtbH0KKyAgICAke2dsYXNzZmlzaC1lamItamFyLnhtbH0KKyAgICAke3N1bi1jbXAtbWFwcGluZ3MueG1sfQorICAgICR7bWV0YWluZi5kaXJ9CiAgICAgJHtlamJqYXIuZmlsZXN9CiAgICAgJHtkYnNjaGVtYX0KIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJwYWNrYWdlLWVqYmphci1jb21tb24iPgogICA8ZGVsZXRlIGZpbGU9IiR7ZWpiLmphcn0iLz4KLSAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogR2VuZXJhdGluZyBlamItamFyIGluc2lkZSBidWlsZCBkaXJlY3RvcnkiIAorICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBHZW5lcmF0aW5nIGVqYi1qYXIgaW5zaWRlIGJ1aWxkIGRpcmVjdG9yeSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+Ci0gIDxjb3B5IGZpbGU9IiR7ZWpiLWphci54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHtlamItamFyLnhtbH0iCiAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9lamItamFyLnhtbCIKICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHtwZXJzaXN0ZW5jZS1vcm0ueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7cGVyc2lzdGVuY2Utb3JtLnhtbH0iCiAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9wZXJzaXN0ZW5jZS1vcm0ueG1sIgogICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3dlYnNlcnZpY2VzLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3dlYnNlcnZpY2VzLnhtbH0iCiAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93ZWJzZXJ2aWNlcy54bWwiCiAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7c3VuLWVqYi1qYXIueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7c3VuLWVqYi1qYXIueG1sfSIKICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1lamItamFyLnhtbCIKICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtZWpiLWphci54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtZWpiLWphci54bWx9IgogICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLWVqYi1qYXIueG1sIgogICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sfSIKQEAgLTMwMSw0MiArMzAxLDQyIEBACiAgICAgICA8aW5jbHVkZSBuYW1lPSJzdW4tY21wLW1hcHBpbmdzLnhtbCIvPgogICAgICAgPGluY2x1ZGUgbmFtZT0iYmVhbnMueG1sIi8+CiAgICAgPC9tZXRhaW5mPgotICA8L2phcj4gICAgICAgCisgIDwvamFyPgogICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8ZGVsZXRlIGZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9LyouZGJzY2hlbWEiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotPC90YXJnZXQ+ICAKKzwvdGFyZ2V0PgogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldCB0byBwYWNrYWdlIHRoZSBhcHBjbGllbnQgYXBwbGljYXRpb24gdG8gamFyIGZpbGUgLS0+CiA8IS0tCiBWYXJpYWJsZXMgVXNlZDoKICAgICAke2FwcGNsaWVudC5qYXJ9Ci0gICAgJHthcHBjbGllbnRqYXIuY2xhc3Nlc30gICAgCi0gICAgJHthcHBjbGllbnRqYXIuZmlsZXN9ICAgIAorICAgICR7YXBwY2xpZW50amFyLmNsYXNzZXN9CisgICAgJHthcHBjbGllbnRqYXIuZmlsZXN9CiAgICAgJHtidWlsZC5jbGFzc2VzLmRpcn0KLSAgICAke2FwcGxpY2F0aW9uLWNsaWVudC54bWx9ICAgIAotICAgICR7c3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9ICAgIAorICAgICR7YXBwbGljYXRpb24tY2xpZW50LnhtbH0KKyAgICAke3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sfQogLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9InBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+CiAgIDxkZWxldGUgZmlsZT0iJHthcHBjbGllbnQuamFyfSIvPgotICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBHZW5lcmF0aW5nIGFwcGNsaWVudC1qYXIgaW5zaWRlIGJ1aWxkIGRpcmVjdG9yeSIgCisgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IEdlbmVyYXRpbmcgYXBwY2xpZW50LWphciBpbnNpZGUgYnVpbGQgZGlyZWN0b3J5IgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi1jbGllbnQueG1sfSIKLSAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKKyAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIgCi0gICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IiR7YXBwY2xpZW50amFyLmNsYXNzZXN9IiAKLSAgICBtYW5pZmVzdD0iLi9jbGllbnQvTUFOSUZFU1QuTUYiPiAgICAgICAgIAorICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIKKyAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iJHthcHBjbGllbnRqYXIuY2xhc3Nlc30iCisgICAgbWFuaWZlc3Q9Ii4vY2xpZW50L01BTklGRVNULk1GIj4KICAgICA8bWV0YWluZiBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIj4KICAgICAgIDxpbmNsdWRlIG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgPC9tZXRhaW5mPgotICA8L2phcj4gICAgICAgCi08L3RhcmdldD4gCisgIDwvamFyPgorPC90YXJnZXQ+CiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDwhLS0gVGFyZ2V0IHRvIGNyZWF0ZSB0aGUgZWpiIGFwcGxpY2F0aW9uIGphciBmaWxlIC0tPgpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgPHBhcmFtIG5hbWU9ImVqYi5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIi8+CiAgIDwvYW50Y2FsbD4KLTwvdGFyZ2V0PiAgICAgCis8L3RhcmdldD4KIAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLSBUYXJnZXQgdG8gY3JlYXRlIHRoZSBhcHBjbGllbnQgamFyIGZpbGUgLS0+CkBAIC0zNTUsOSArMzU1LDkgQEAKIDx0YXJnZXQgbmFtZT0iYXBwY2xpZW50LWphci1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KLSAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiAKKyAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIgogICAgICAgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiIAorICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuamFyIgogICAgICAgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+CkBAIC0zODYsMjIgKzM4NiwyMiBAQAogPHRhcmdldCBuYW1lPSJidWlsZC1lYXItY29tbW9uIiBkZXBlbmRzPSJmaXhGaWxlcyxwYWNrYWdlLXBlcnNpc3RlbmNlLWNvbW1vbixlamItamFyLWNvbW1vbixhcHBjbGllbnQtamFyLWNvbW1vbix3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgIAotICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAJZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiAgCWZhaWxvbmVycm9yPSJmYWxzZSIvPiAKKyAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMtZWFyLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIgIGZpbHRlcmluZz0idHJ1ZSIvPgotICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+IAorICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+CiAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CiAgICAgPC9maWxlc2V0PgogICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotCTxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLQk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CiAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIi8+CiAgICAgPC9maWxlc2V0PgogICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiBpbmNsdWRlcz0ibGliL3JlcG9ydGVyLmphciIvPgotICA8L2phcj4gICAgICAgIAorICA8L2phcj4KIDwvdGFyZ2V0PgogCiAKQEAgLTQxMSwyMSArNDExLDIxIEBACiA8dGFyZ2V0IG5hbWU9ImVhci1jb21tb24iIGRlcGVuZHM9ImZpeEZpbGVzLGluaXQtY29tbW9uIj4KICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+ICAgIAotICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAJZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAorICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgorICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXJlc291cmNlcy1lYXIueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIiAgZmlsdGVyaW5nPSJ0cnVlIi8+Ci0gIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiAKKyAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiCiAgICAgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgogICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgogICAgIDwvZmlsZXNldD4KICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KLQk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIvPgogICAgIDwvZmlsZXNldD4KICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9ImxpYi9yZXBvcnRlci5qYXIiLz4KLSAgPC9lYXI+ICAgICAgICAKKyAgPC9lYXI+CiA8L3RhcmdldD4KIAogCkBAIC00NzQsNyArNDc0LDcgQEAKIDwhLS0gVGFyZ2V0IHRvIGV4ZWN1dGUgYSBiYXRjaGZpbGUgb2YgYXNhZG1pbiBjb21tYW5kcyAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KLSAgPGVjaG8gbWVzc2FnZT0iRG9pbmcgYWRtaW4gYmF0Y2ggdGFzayAke2FkbWluLmNvbW1hbmR9IC0tZmlsZSIgCisgIDxlY2hvIG1lc3NhZ2U9IkRvaW5nIGFkbWluIGJhdGNoIHRhc2sgJHthZG1pbi5jb21tYW5kfSAtLWZpbGUiCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogPHByb3BlcnR5IG5hbWU9InVzZXIucGFzc3dvcmQuZmlsZSIgdmFsdWU9ImFzYWRtaW51c2VycGFzc3dvcmQudHh0Ii8+CiA8ZWNobyBmaWxlPSIke3VzZXIucGFzc3dvcmQuZmlsZX0iIGFwcGVuZD0iZmFsc2UiPgpAQCAtNDg1LDExICs0ODUsMTEgQEAKIDwvZWNobz4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICA8YXJnIGxpbmU9Ii0tdXNlciAke2FkbWluLnVzZXJ9IC0tcGFzc3dvcmRmaWxlICR7dXNlci5wYXNzd29yZC5maWxlfSAtLWhvc3QgJHthZG1pbi5ob3N0fSAtLXBvcnQgJHthZG1pbi5wb3J0fSAtLWVjaG89dHJ1ZSAtLXRlcnNlPXRydWUiLz4KLSAgICAgPGFyZyBsaW5lPSJtdWx0aW1vZGUgLS1maWxlICR7YXNhZG1pbi5maWxlfSIgLz4gICAgICAgIAorICAgICA8YXJnIGxpbmU9Im11bHRpbW9kZSAtLWZpbGUgJHthc2FkbWluLmZpbGV9IiAvPgogICA8L2V4ZWM+CiAgIDxkZWxldGUgZmlsZT0iJHt1c2VyLnBhc3N3b3JkLmZpbGV9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KIDwvdGFyZ2V0PgotIAorCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KQEAgLTUxMCw3ICs1MTAsNyBAQAogICA8L2FudGNhbGw+CiAgIDxkZWxldGUgZmlsZT0iJHt1c2VyLnBhc3N3b3JkLmZpbGV9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KIDwvdGFyZ2V0PgotICAgICAKKwogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLSBUYXJnZXQgdG8gZGVsZXRlIHRoZSB1c2VyIGluIGZpbGUgcmVhbG0gdGhlIEFwcFNlcnYgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgpAQCAtNTI0LDcgKzUyNCw3IEBACiA8L3RhcmdldD4KIAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSBKMkVFIENvbm5lY3RvciByZWxhdGVkIHRhcmdldHMgCQkJICAgICAJICAtLT4KKzwhLS0gSjJFRSBDb25uZWN0b3IgcmVsYXRlZCB0YXJnZXRzICAgICAgICAgICAgICAgICAgICAgICAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAKIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWNvbm5lY3Rvci1jb25ucG9vbC1jb21tb24iCkBAIC02MTEsNyArNjExLDcgQEAKIDwhLS0gVGFyZ2V0IHRvIGNyZWF0ZSBKREJDIGNvbm5lY3Rpb24gcG9vbCAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iY3JlYXRlZCBqZGJjIGNvbm5lY3Rpb24gcG9vbCAke2pkYmMuY29ucG9vbC5uYW1lfSIgCis8ZWNobyBtZXNzYWdlPSJjcmVhdGVkIGpkYmMgY29ubmVjdGlvbiBwb29sICR7amRiYy5jb25wb29sLm5hbWV9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhLXBhcmFtcyIgdmFsdWU9IiIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CkBAIC02MjcsNyArNjI3LDcgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLWRyaXZlci1jb25ucG9vbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLTxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgamRiYyBjb25uZWN0aW9uIHBvb2wgJHtqZGJjLmNvbnBvb2wubmFtZX0iIAorPGVjaG8gbWVzc2FnZT0iY3JlYXRlZCBqZGJjIGNvbm5lY3Rpb24gcG9vbCAke2pkYmMuY29ucG9vbC5uYW1lfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYS1wYXJhbXMiIHZhbHVlPSIiLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgpAQCAtNjY0LDcgKzY2NCw3IEBACiAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgogICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCSAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7amRiYy5jb25wb29sLm5hbWV9LnByb3BlcnR5LlVSTD0ke2RiLnVybH07dXNlcj0ke2RiLnVzZXJ9O3Bhc3N3b3JkPSR7ZGIucHdkfSIvPgorICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7amRiYy5jb25wb29sLm5hbWV9LnByb3BlcnR5LlVSTD0ke2RiLnVybH07dXNlcj0ke2RiLnVzZXJ9O3Bhc3N3b3JkPSR7ZGIucHdkfSIvPgogICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIApAQCAtNzE1LDcgKzcxNSw3IEBACiAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgogICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCSAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7amRiYy5jb25wb29sLm5hbWV9LnByb3BlcnR5LlVSTD0ke2RiLnVybH07dXNlcj0ke2RiLnVzZXJ9O3Bhc3N3b3JkPSR7ZGIucHdkfSIvPgorICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7amRiYy5jb25wb29sLm5hbWV9LnByb3BlcnR5LlVSTD0ke2RiLnVybH07dXNlcj0ke2RiLnVzZXJ9O3Bhc3N3b3JkPSR7ZGIucHdkfSIvPgogICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIApAQCAtNzMxLDE0ICs3MzEsMTQgQEAKICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7amRiYy5jb25wb29sLm5hbWV9Ii8+CiAgICAgPC9leGVjPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNtZCBleGVjdXRlZCBmb3IgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4gIAorICAgIDxlY2hvIG1lc3NhZ2U9ImNtZCBleGVjdXRlZCBmb3IgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KIDwvdGFyZ2V0PgogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldCB0byBjcmVhdGUgSkRCQyByZXNvdXJjZSAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgamRiYyByZXNvdXJjZSBwb29sICR7amRiYy5yZXNvdXJjZS5uYW1lfSIgCis8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBqZGJjIHJlc291cmNlIHBvb2wgJHtqZGJjLnJlc291cmNlLm5hbWV9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxlY2hvIG1lc3NhZ2U9ImFzYWRtaW4gY3JlYXRlLWpkYmMtcmVzb3VyY2UgJHthcy5wcm9wc30gLS1jb25uZWN0aW9ucG9vbGlkICR7amRiYy5jb25wb29sLm5hbWV9IC0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9ICR7amRiYy5yZXNvdXJjZS5uYW1lfSIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgpAQCAtNzkwLDcgKzc5MCw3IEBACiA8IS0tIFRhcmdldCB0byBjcmVhdGUgcGVyc2lzdGVuY2UgcmVzb3VyY2UgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJjcmVhdGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci08ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBwbSByZXNvdXJjZSBhdCAke3BtLnJlc291cmNlLm5hbWV9IiAKKzxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIHBtIHJlc291cmNlIGF0ICR7cG0ucmVzb3VyY2UubmFtZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgICA8ZWNobyBtZXNzYWdlPSJhc2FkbWluIGNyZWF0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZSAke2FzLnByb3BzfSAtLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSAke3BtLnJlc291cmNlLm5hbWV9Ii8+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KQEAgLTgwMCw3ICs4MDAsNyBAQAogICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHtwbS5yZXNvdXJjZS5uYW1lfSIvPgogICAgIDwvZXhlYz4KLSAgICA8ZWNobyBtZXNzYWdlPSJDcmVhdGVkICR7cG0ucmVzb3VyY2UubmFtZX0gLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4gCisgICAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRlZCAke3BtLnJlc291cmNlLm5hbWV9IC0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCkBAIC04MTksMTQgKzgxOSwxNCBAQAogPHRhcmdldCBuYW1lPSJkZWxldGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIgotICAgICAgdmFsdWU9ImRlbGV0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZSAKKyAgICAgIHZhbHVlPSJkZWxldGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UKICAgICAgICAgLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iIC8+CiAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3BtLnJlc291cmNlLm5hbWV9IiAvPgogICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJleGVjdXRlLXNxbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLTxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBzcWwgc3RhdGVtZW50IGF0ICR7YmFzZWRpcn0gZnJvbSAke3NxbC5maWxlfSIgCis8ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgc3FsIHN0YXRlbWVudCBhdCAke2Jhc2VkaXJ9IGZyb20gJHtzcWwuZmlsZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGVjaG8gbWVzc2FnZT0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9Ii8+CiAgIDxzcWwKQEAgLTg0Miw3ICs4NDIsNyBAQAogCiAKIDx0YXJnZXQgbmFtZT0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIHNxbCBzdGF0ZW1lbnQgYXQgJHtiYXNlZGlyfSBmcm9tICR7c3FsLmZpbGV9IiAKKzxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBzcWwgc3RhdGVtZW50IGF0ICR7YmFzZWRpcn0gZnJvbSAke3NxbC5maWxlfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8c3FsCiAgICAgZHJpdmVyPSIke2RiLmRyaXZlcn0iCkBAIC04NTgsOCArODU4LDggQEAKIAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLSBUYXJnZXQgdG8gY3JlYXRlL2RlbGV0ZSBqYXZhbWFpbCByZXNvdXJjZXMgIC0tPgotPCEtLSAKLSAgICBQcm9wZXJ0aWVzIHJlcXVpcmVkOiAKKzwhLS0KKyAgICBQcm9wZXJ0aWVzIHJlcXVpcmVkOgogICAgIG1haWxob3N0CiAgICAgZnJvbWFkZHJlc3MKICAgICBkZWJ1ZwpAQCAtOTAwLDcgKzkwMCw3IEBACiA8IS0tIFRhcmdldCB0byBjcmVhdGUgZGF0YWJhc2UgdGFibGUgdGhyb3VnaCBTUUwgZmlsZSAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1zcWwtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci08ZWNobyBtZXNzYWdlPSJjcmVhdGluZyB0YWJsZXMgZnJvbSAke2Jhc2VkaXJ9L3NxbC8ke2RiLmNyZWF0ZX0iIAorPGVjaG8gbWVzc2FnZT0iY3JlYXRpbmcgdGFibGVzIGZyb20gJHtiYXNlZGlyfS9zcWwvJHtkYi5jcmVhdGV9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxzcWwKICAgICBkcml2ZXI9IiR7ZGIuZHJpdmVyfSIKQEAgLTkxOSw3ICs5MTksNyBAQAogPCEtLSBUYXJnZXQgdG8gZGVsZXRlIGRhdGFiYXNlIHRhYmxlIHRocm91Z2ggU1FMIGZpbGUgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJkZWxldGUtc3FsLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iZHJvcHBpbmcgdGFibGVzIGZyb20gJHtiYXNlZGlyfS9zcWwvJHtkYi5kcm9wfSIgCis8ZWNobyBtZXNzYWdlPSJkcm9wcGluZyB0YWJsZXMgZnJvbSAke2Jhc2VkaXJ9L3NxbC8ke2RiLmRyb3B9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxzcWwKICAgICBkcml2ZXI9IiR7ZGIuZHJpdmVyfSIKQEAgLTkzOCwxMSArOTM4LDExIEBACiA8IS0tIFRhZ2V0IHRvIGNyZWF0ZSBKTVMgQ29ubmVjdGlvbiAgICAgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJjcmVhdGUtam1zLWNvbm5lY3Rpb24tY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIEpNUyBjb25uZWN0aW9uIGZhY3Rvcnkgd2l0aCBuYW1lICR7am1zLmZhY3RvcnkubmFtZX0iIAorICA8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBKTVMgY29ubmVjdGlvbiBmYWN0b3J5IHdpdGggbmFtZSAke2ptcy5mYWN0b3J5Lm5hbWV9IgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CiAgICAgPGFyZyBsaW5lPSJjcmVhdGUtam1zLXJlc291cmNlICIvPgotICAgIDxhcmcgbGluZT0iLS1yZXN0eXBlICR7am1zLmZhY3RvcnkudHlwZX0iLz4gICAgCisgICAgPGFyZyBsaW5lPSItLXJlc3R5cGUgJHtqbXMuZmFjdG9yeS50eXBlfSIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2ptcy5mYWN0b3J5Lm5hbWV9IiAvPgpAQCAtOTUzLDIzICs5NTMsMjMgQEAKIDwhLS0gVGFnZXQgdG8gZGVsZXRlIEpNUyBDb25uZWN0aW9uICAgICAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1qbXMtY29ubmVjdGlvbi1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgPGVjaG8gbWVzc2FnZT0iRGVsZXRlIEpNUyBjb25uZWN0aW9uIGZhY3Rvcnkgd2l0aCBuYW1lICR7am1zLmZhY3RvcnkubmFtZX0iIAorICA8ZWNobyBtZXNzYWdlPSJEZWxldGUgSk1TIGNvbm5lY3Rpb24gZmFjdG9yeSB3aXRoIG5hbWUgJHtqbXMuZmFjdG9yeS5uYW1lfSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgotICAgIDxhcmcgbGluZT0iZGVsZXRlLWptcy1yZXNvdXJjZSAiLz4gICAgCisgICAgPGFyZyBsaW5lPSJkZWxldGUtam1zLXJlc291cmNlICIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+ICAgIAorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7am1zLmZhY3RvcnkubmFtZX0iLz4KICAgPC9leGVjPgogPC90YXJnZXQ+CiAKIDwhLS0gSk1TOiBjcmVhdGUvZGVsZXRlIERlc3RpbmF0aW9uIFJlc291cmNlIFRhcmdldHMgLS0+CiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qbXMtcmVzb3VyY2UtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIEpNUyByZXNvdXJjZSB3aXRoIG5hbWUgJHtqbXMucmVzb3VyY2UubmFtZX0iIAorICA8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBKTVMgcmVzb3VyY2Ugd2l0aCBuYW1lICR7am1zLnJlc291cmNlLm5hbWV9IgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KIAogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KLSAgICA8YXJnIGxpbmU9ImNyZWF0ZS1qbXNkZXN0IC0tZGVzdHR5cGUgJHtkZXN0LnR5cGV9ICIvPiAgICAKKyAgICA8YXJnIGxpbmU9ImNyZWF0ZS1qbXNkZXN0IC0tZGVzdHR5cGUgJHtkZXN0LnR5cGV9ICIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICA8YXJnIGxpbmU9IiR7ZGVzdC5uYW1lfSIvPgogICA8L2V4ZWM+CkBAIC05NzgsMjQgKzk3OCwyNCBAQAogICAgIDxhcmcgbGluZT0iY3JlYXRlLWptcy1yZXNvdXJjZSAiLz4KICAgICA8YXJnIGxpbmU9Ii0tcmVzdHlwZSAke2ptcy5yZXNvdXJjZS50eXBlfSIvPgogICAgIDxhcmcgbGluZT0iLS1wcm9wZXJ0eSBpbXFEZXN0aW5hdGlvbk5hbWU9JHtkZXN0Lm5hbWV9Ii8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPiAgICAKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgIDxhcmcgbGluZT0iJHtqbXMucmVzb3VyY2UubmFtZX0iLz4KICAgPC9leGVjPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iZGVsZXRlLWptcy1yZXNvdXJjZS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgPGVjaG8gbWVzc2FnZT0iRGVsZXRlIEpNUyByZXNvdXJjZSB3aXRoIG5hbWUgJHtqbXMucmVzb3VyY2UubmFtZX0iIAorICA8ZWNobyBtZXNzYWdlPSJEZWxldGUgSk1TIHJlc291cmNlIHdpdGggbmFtZSAke2ptcy5yZXNvdXJjZS5uYW1lfSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAKICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CiAgICAgPGFyZyBsaW5lPSJkZWxldGUtam1zLXJlc291cmNlICIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4gICAgCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30gJHtqbXMucmVzb3VyY2UubmFtZX0iLz4KICAgPC9leGVjPgogCiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgotICAgIDxhcmcgbGluZT0iZGVsZXRlLWptc2Rlc3QgLS1kZXN0dHlwZSAke2Rlc3QudHlwZX0gIi8+ICAgIAorICAgIDxhcmcgbGluZT0iZGVsZXRlLWptc2Rlc3QgLS1kZXN0dHlwZSAke2Rlc3QudHlwZX0gIi8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSAke2Rlc3QubmFtZX0iLz4KICAgPC9leGVjPgogPC90YXJnZXQ+CkBAIC0xMDM4LDcgKzEwMzgsNyBAQAogPHRhcmdldCBuYW1lPSJkZXBsb3ktdmVyaWZ5LWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXZlcmlmeS1jb21tb24tcGUiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS12ZXJpZnktY29tbW9uLWVlIi8+Ci08L3RhcmdldD4gICAgICAgCis8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJkZXBsb3ktdmVyaWZ5LWNvbW1vbi1wZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iIHVubGVzcz0iZWUiPgogICA8cHJvcGVydHkgbmFtZT0iZGVwbG95ZWQuYXBwIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIi8+CkBAIC0xMDc5LDkgKzEwNzksOSBAQAogICAgIDxhcmcgbGluZT0iLS1wcmVjb21waWxlanNwPSR7cHJlY29tcGlsZWpzcH0iLz4KICAgICA8YXJnIGxpbmU9Ii0tdXBsb2FkIHRydWUiLz4KICAgICA8YXJnIGxpbmU9Ii0tcmV0cmlldmUgJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgIDwvZXhlYz4KLTwvdGFyZ2V0PiAgICAKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImRlcGxveS13YXItbmFtZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHt3YXJuYW1lfSBmcm9tICR7YmFzZWRpcn0uIgpAQCAtMTEyNCwxMCArMTEyNCwxMCBAQAogICAgIDxhcmcgbGluZT0iZGVwbG95Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgIDxhcmcgbGluZT0iLS11cGxvYWQ9dHJ1ZSIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIvPgogICA8L2V4ZWM+Ci08L3RhcmdldD4gCis8L3RhcmdldD4KIAogPCEtLSBkZXBsb3kgdGhlIHN0YW5kYWxvbmUgamFyIGluIEFwcFNlcnYgIC0tPgogPHRhcmdldCBuYW1lPSJkZXBsb3ktY2xpZW50LWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTEzNSwxMSArMTEzNSwxMSBAQAogICAgIDxhcmcgbGluZT0iZGVwbG95Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgIDxhcmcgbGluZT0iLS11cGxvYWQ9dHJ1ZSIvPgotICAgIDxhcmcgbGluZT0iLS1yZXRyaWV2ZSAke2Fzc2VtYmxlLmRpcn0iLz4gICAgCi0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tcmV0cmlldmUgJHthc3NlbWJsZS5kaXJ9Ii8+CisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogICA8L2V4ZWM+Ci08L3RhcmdldD4gCis8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJ1bmRlcGxveS13YXItbmFtZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxlY2hvPiA9PT0gRW1iZWRkZWQgVU5ERVBMT1lJTkcgJHt3YXJuYW1lfSA9PT0gPC9lY2hvPgpAQCAtMTE2Myw3ICsxMTYzLDcgQEAKICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICA8YXJnIGxpbmU9InVuZGVwbG95Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHthcHBuYW1lfS1lamIiLz4KICAgPC9leGVjPgogPC90YXJnZXQ+CkBAIC0xMTczLDEwICsxMTczLDEwIEBACiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgPGFyZyBsaW5lPSJ1bmRlcGxveSIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7YXBwbmFtZX0tY2xpZW50Ii8+CiAgIDwvZXhlYz4KLTwvdGFyZ2V0PiAgCis8L3RhcmdldD4KIAogPCEtLSBydW4gYXBwY2xpZW50IGluIEFwcFNlcnYgIC0tPgogPHRhcmdldCBuYW1lPSJydW5jbGllbnQtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC0xMjE4LDExICsxMjE4LDExIEBACiAgICAgPGFyZyB2YWx1ZT0iJHt0ZXN0c3VpdGUuaWR9Ii8+CiAgIDwvamF2YT4KIDwvdGFyZ2V0PgotICAKKwogPCEtLSBwcmVwYXJlIFBvaW50YmFzZSBzZXJ2ZXJzIC0tPgogPHRhcmdldCBuYW1lPSJwcmVwYXJlUEIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgPGVjaG8gbWVzc2FnZT0iU3RhcnRpbmcgUG9pbnRiYXNlIHNlcnZlcnMiIGxldmVsPSJ2ZXJib3NlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9saWIvcG9pbnRiYXNlLmluaSIgCisgIDxjb3B5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9saWIvcG9pbnRiYXNlLmluaSIKICAgICAgIHRvZmlsZT0iJHtkYi5kaXJ9L3BvaW50YmFzZS5pbmkiLz4KICAgPHJlcGxhY2UgZmlsZT0iJHtkYi5kaXJ9L3BvaW50YmFzZS5pbmkiIHRva2VuPSJAQEAiIHZhbHVlPSIke2RiLmRpcn0iLz4KIDwvdGFyZ2V0PgpAQCAtMTI0NSwxMiArMTI0NSwxMiBAQAogCiA8IS0tIHRhcmdldCBuYW1lPSJzdGFydFBCIiBkZXBlbmRzPSJwcmVwYXJlUEIiPgogICA8cGFyYWxsZWw+Ci0gICAgPGphdmEgY2xhc3NuYW1lPSJjb20ucG9pbnRiYXNlLm5ldC5uZXRTZXJ2ZXIiIAorICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnBvaW50YmFzZS5uZXQubmV0U2VydmVyIgogICAgICAgICBjbGFzc3BhdGg9IiR7ZGIuY2xhc3NwYXRofSIgZmFpbG9uZXJyb3I9ImZhbHNlIiBmb3JrPSJ0cnVlIj4KICAgICAgIDxhcmcgbGluZT0iL3BvcnQ6OTA5MiIvPgogICAgICAgPGFyZyBsaW5lPSIvcG9pbnRiYXNlLmluaT0ke2RiLmRpcn0vcG9pbnRiYXNlLmluaSIvPgogICAgIDwvamF2YT4KLSAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5wb2ludGJhc2UubmV0Lm5ldFNlcnZlciIgCisgICAgPGphdmEgY2xhc3NuYW1lPSJjb20ucG9pbnRiYXNlLm5ldC5uZXRTZXJ2ZXIiCiAgICAgICAgIGNsYXNzcGF0aD0iJHtkYi5jbGFzc3BhdGh9IiBmYWlsb25lcnJvcj0idHJ1ZSIgZm9yaz0idHJ1ZSI+CiAgICAgICA8YXJnIGxpbmU9Ii9wb3J0OjkwOTMiLz4KICAgICAgIDxhcmcgbGluZT0iL3BvaW50YmFzZS5pbmk9JHtkYi5kaXJ9L3BvaW50YmFzZS5pbmkiLz4KQEAgLTEyNjEsNyArMTI2MSw3IEBACiA8IS0tICBzdGFydCBEZXJieSBEYXRhYmFzZSAtLT4KIDx0YXJnZXQgbmFtZT0ic3RhcnREZXJieSI+CiAgIDxjb25kaXRpb24gcHJvcGVydHk9ImRhcndpbiI+Ci0JPG9zIG5hbWU9Ik1hYyBPUyBYIi8+CisgICAgPG9zIG5hbWU9Ik1hYyBPUyBYIi8+CiAgIDwvY29uZGl0aW9uPgogICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0RGVyYnlOb25NYWMiLz4KICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydERlcmJ5TWFjIi8+CkBAIC0xMjc4LDcgKzEyNzgsNyBAQAogICAgICAgY2xhc3NwYXRoPSIke2RiLmNsYXNzcGF0aH0iIGZvcms9InRydWUiIHNwYXduPSJ0cnVlIj4KICAgICAgIDxhcmcgbGluZT0iLWggbG9jYWxob3N0IC1wICR7ZGIucG9ydC4yfSBzdGFydCIvPgogICAgIDwvamF2YT4KLSAgPC9wYXJhbGxlbD4gICAgIAorICA8L3BhcmFsbGVsPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0ic3RhcnREZXJieU1hYyIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJkYXJ3aW4iPgpAQCAtMTI5MSw3ICsxMjkxLDcgQEAKICAgICA8L2phdmE+CiAgICAgPGphdmEgY2xhc3NuYW1lPSJvcmcuYXBhY2hlLmRlcmJ5LmRyZGEuTmV0d29ya1NlcnZlckNvbnRyb2wiCiAgICAgICBjbGFzc3BhdGg9IiR7ZGIuY2xhc3NwYXRofSIgZm9yaz0idHJ1ZSIgc3Bhd249InRydWUiPgotICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9ImRlcmJ5LnN0b3JhZ2UuZmlsZVN5bmNUcmFuc2FjdGlvbkxvZyIgdmFsdWU9InRydWUiLz4gICAgIAorICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9ImRlcmJ5LnN0b3JhZ2UuZmlsZVN5bmNUcmFuc2FjdGlvbkxvZyIgdmFsdWU9InRydWUiLz4KICAgICAgIDxhcmcgbGluZT0iLWggbG9jYWxob3N0IC1wICR7ZGIucG9ydC4yfSBzdGFydCIvPgogICAgIDwvamF2YT4KICAgPC9wYXJhbGxlbD4KQEAgLTEzMTksMTAgKzEzMTksMTAgQEAKIAogPCEtLSBzZXR1cCBJTVEgZm9yIFJJIEJ1aWxkIC0tPgogPHRhcmdldCBuYW1lPSJzZXR1cC1tcS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICA8ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgRGF0YXN0b3JlIHNldHVwIGZvciBTMU1RLiBSZXF1aXJlZCBvbmx5IGZvciBSSSIgCisgICAgPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIERhdGFzdG9yZSBzZXR1cCBmb3IgUzFNUS4gUmVxdWlyZWQgb25seSBmb3IgUkkiCiAgICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iJHtJTVFEQk1HUn0gLWphdmFob21lICR7amF2YS5ob21lfSAKLSAgICAgICAgLWIgJHthZG1pbi5kb21haW59XyR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IGNyZWF0ZSBhbGwiIAorICAgIDxlY2hvIG1lc3NhZ2U9IiR7SU1RREJNR1J9IC1qYXZhaG9tZSAke2phdmEuaG9tZX0KKyAgICAgICAgLWIgJHthZG1pbi5kb21haW59XyR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IGNyZWF0ZSBhbGwiCiAgICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7SU1RREJNR1J9IiBmYWlsb25lcnJvcj0idHJ1ZSI+CiAgICAgIDxhcmcgbGluZT0iLWphdmFob21lICR7amF2YS5ob21lfSAtYiAke2FkbWluLmRvbWFpbn1fJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gY3JlYXRlIGFsbCIgLz4KQEAgLTEzODMsMTMgKzEzODMsMTMgQEAKIAogPCEtLSB1c2FnZSAgLS0+CiA8dGFyZ2V0IG5hbWU9InVzYWdlLWNvbW1vbiI+Ci0gICAgPGVjaG8+ICAgICAgICAgCisgICAgPGVjaG8+CiAgICAgICAgIGFudCBjbGVhbiAgICAgICAgICAgUmVtb3ZlIGFsbCBjbGFzc2VzIGZpbGVzCiAgICAgICAgIGFudCBidWlsZCAgICAgICAgICAgQnVpbGQgdGhlIGFwcGxpY2F0aW9uCiAgICAgICAgIGFudCBkZXBsb3kgICAgICAgICAgRGVwbG95IHRoZSBlYXIgZmlsZXMgdG8gUzFBUwotICAgICAgICBhbnQgcnVuCSAgICAgICAgICAgIFJ1biB0aGUgYXBwbGljYXRpb24KKyAgICAgICAgYW50IHJ1biAgICAgICAgICAgICAgICBSdW4gdGhlIGFwcGxpY2F0aW9uCiAgICAgICAgIGFudCB1bmRlcGxveSAgICAgICAgVW5kZXBsb3kgdGhlIGVhciBmaWxlcyBmcm9tIFMxQVMKLSAgICAgICAgYW50IHVzYWdlICAgICAgICAgICBEaXNwbGF5IHRoaXMgbWVzc2FnZSAgICAgICAgICAgIAorICAgICAgICBhbnQgdXNhZ2UgICAgICAgICAgIERpc3BsYXkgdGhpcyBtZXNzYWdlCiAgICAgPC9lY2hvPgogPC90YXJnZXQ+CiAKQEAgLTE0MTUsMTMgKzE0MTUsMTMgQEAKIAogPHRhcmdldCBuYW1lPSJyZXN0YXJ0LWluc3RhbmNlIj4KICAgICA8ZWNobyBtZXNzYWdlPSJSZXN0YXJ0aW5nIHJlbW90ZSBzZXJ2ZXIgaW5zdGFuY2UsdW50aWwgdGhpcyBnZXRzIGZpeGVkIi8+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICA8YXJnIGxpbmU9InN0b3AtaW5zdGFuY2UiLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPC9leGVjPgogICAgIDxzbGVlcCBzZWNvbmRzPSIzMCIvPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgPGFyZyBsaW5lPSJzdGFydC1pbnN0YW5jZSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KQEAgLTE0NDQsNyArMTQ0NCw3IEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJzZXR1cFRpbWVyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgaWY9ImVlIj4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgIDxhcmcgbGluZT0iY3JlYXRlLXJlc291cmNlLXJlZiIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgc2VydmVyIi8+CkBAIC0xNDcxLDEzICsxNDcxLDEzIEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJ1bnNldHVwVGltZXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0iZWUiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgPGFyZyBsaW5lPSJkZWxldGUtcmVzb3VyY2UtcmVmIi8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCBzZXJ2ZXIiLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2pkYmMucmVzb3VyY2UubmFtZX0iLz4KICAgICA8L2V4ZWM+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICA8YXJnIGxpbmU9InVuc2V0Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0tY29uZmlnLmVqYi1jb250YWluZXIuZWpiLXRpbWVyLXNlcnZpY2UudGltZXItZGF0YXNvdXJjZSIvPgogICAgIDwvZXhlYz4KQEAgLTE2MjIsNyArMTYyMiw3IEBACiA8IS0tIFRhcmdldCB0byBGbHVzaCBjb25uZWN0aW9uIHBvb2wgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJmbHVzaC1jb25ucG9vbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLTxlY2hvIG1lc3NhZ2U9IkZsdXNoIGNvbm5lY3Rpb24gcG9vbCAke2pkYmMuY29ucG9vbC5uYW1lfSIgCis8ZWNobyBtZXNzYWdlPSJGbHVzaCBjb25uZWN0aW9uIHBvb2wgJHtqZGJjLmNvbnBvb2wubmFtZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICA8YXJnIGxpbmU9ImZsdXNoLWNvbm5lY3Rpb24tcG9vbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZW1iZWRkZWQvY29uZmlnL2NvbW1vbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lbWJlZGRlZC9jb25maWcvY29tbW9uLnhtbAppbmRleCBjYzE3YTkyLi44YjQyMjI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lbWJlZGRlZC9jb25maWcvY29tbW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lbWJlZGRlZC9jb25maWcvY29tbW9uLnhtbApAQCAtMTcsMjYgKzE3LDI2IEBACiAtLT4KIAogPCEtLQotICAgIFRoaXMgaXMgdGhlIHRvcCBsZXZlbCBidWlsZCBmaWxlIHRoYXQgc2hvdWxkIGJlIAotICAgIGltcG9ydGVkIGludG8gYWxsIHRoZSBsZWFmIGxldmVsIGJ1aWxkIGZpbGVzIAorICAgIFRoaXMgaXMgdGhlIHRvcCBsZXZlbCBidWlsZCBmaWxlIHRoYXQgc2hvdWxkIGJlCisgICAgaW1wb3J0ZWQgaW50byBhbGwgdGhlIGxlYWYgbGV2ZWwgYnVpbGQgZmlsZXMKIC0tPgogCiA8cHJvcGVydHkgbmFtZT0idGVzdC5lbWJlZGRlZC5tb2RlIiB2YWx1ZT0idHJ1ZSIvPgogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldHMgdG8gY2xlYW4gY2xhc3MgZmlsZXMgYW5kIGphcnMgZmlsZXMgLS0+Ci08IS0tIAotVmFyaWFibGVzIHVzZWQ6IAotICAgICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IAorPCEtLQorVmFyaWFibGVzIHVzZWQ6CisgICAgJHtidWlsZC5jbGFzc2VzLmRpcn0KICAgICAke2Fzc2VtYmxlLmRpcn0KIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJjbGVhbi1jbGFzc2VzLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IENsZWFuaW5nIHRlc3Qgc291cmNlIGZpbGVzOiAke2J1aWxkLmJhc2UuZGlyfSIgCisgICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogQ2xlYW5pbmcgdGVzdCBzb3VyY2UgZmlsZXM6ICR7YnVpbGQuYmFzZS5kaXJ9IgogICAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5iYXNlLmRpcn0iLz4KIDwvdGFyZ2V0PgotICAgIAorCiA8dGFyZ2V0IG5hbWU9ImNsZWFuLWphcnMtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxkZWxldGUgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KIDwvdGFyZ2V0PgpAQCAtNDgsOSArNDgsOSBAQAogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldCB0byBjb21waWxlIHRoZSBqYXZhIHNvdXJjZSBmaWxlcyAtLT4KLTwhLS0gCi1WYXJpYWJsZXMgdXNlZDogCi0gICAgJHtidWlsZC5jbGFzc2VzLmRpcn0gCis8IS0tCitWYXJpYWJsZXMgdXNlZDoKKyAgICAke2J1aWxkLmNsYXNzZXMuZGlyfQogICAgICR7czFhc3Rlc3QuY2xhc3NwYXRofQogICAgICR7c3JjfQogLS0+CkBAIC03Nyw3ICs3Nyw3IEBACiBWYXJpYWJsZXMgVXNlZDoKICAgICAke3dhci5maWxlfQogICAgICR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ci0gICAgJHthcHBuYW1lfSAgICAKKyAgICAke2FwcG5hbWV9CiAgICAgJHthc3NlbWJsZS5kaXJ9CiAgICAgJHt3ZWIueG1sfQogICAgICR7dGxkc30KQEAgLTk4LDE3ICs5OCwxNyBAQAogCiA8dGFyZ2V0IG5hbWU9InB1Ymxpc2gtd2FyLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8bWtkaXIgZGlyPSIke2J1aWxkLndlYmFwcHMuZGlyfSIvPgotICA8Y29weSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIiAKLSAgICAgICAgdG9maWxlPSIke2J1aWxkLndlYmFwcHMuZGlyfS8ke2FwcG5hbWV9LndhciIgCisgIDxjb3B5IGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiCisgICAgICAgIHRvZmlsZT0iJHtidWlsZC53ZWJhcHBzLmRpcn0vJHthcHBuYW1lfS53YXIiCiAgICAgICAgIG92ZXJ3cml0ZT0idHJ1ZSIgLz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNsZWFuLXdlYmFwcHMtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQud2ViYXBwcy5kaXJ9IiBxdWlldD0idHJ1ZSIgLz4gIAorICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLndlYmFwcHMuZGlyfSIgcXVpZXQ9InRydWUiIC8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJjbGVhciI+Ci0gICAgPGRlbGV0ZSBmaWxlPSIke3dhci5maWxlfSIvPiAgCisgICAgPGRlbGV0ZSBmaWxlPSIke3dhci5maWxlfSIvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iY29weS10bGRzIiBpZj0idGxkcy1leGlzdCIgZGVwZW5kcz0iY2xlYXIsdGVzdC10bGRzLWV4aXN0Ij4KQEAgLTEzNywxNyArMTM3LDE3IEBACiAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMiLz4KICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvbGliIi8+CiAgIDxta2RpciBkaXI9ImxpYiIvPgotICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC13ZWIueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXdlYi54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7c3VuLXdlYi54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHtzdW4td2ViLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3N1bi13ZWIueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtZWpiLWphci54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtZWpiLWphci54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9nbGFzc2Zpc2gtZWpiLWphci54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3N1bi1lamItamFyLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3N1bi1lamItamFyLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3N1bi1lamItamFyLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7d2VibG9naWMueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7d2VibG9naWMueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd2VibG9naWMueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbH0iIAorICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvbGliIiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgPGZpbGVzZXQgZGlyPSJsaWIiPgpAQCAtMTU1LDMyICsxNTUsMzIgQEAKICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLnppcCIvPgogICAgICAgPC9maWxlc2V0PgogICA8L2NvcHk+Ci0gIDxjb3B5IGZpbGU9IiR7d2Vic2VydmljZXMueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7d2Vic2VydmljZXMueG1sfSIKICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93ZWJzZXJ2aWNlcy54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke21hcHBpbmdmaWxlLmxvY2F0aW9ufS8ke21hcHBpbmdmaWxlLm5hbWV9IiAKKyAgPGNvcHkgZmlsZT0iJHttYXBwaW5nZmlsZS5sb2NhdGlvbn0vJHttYXBwaW5nZmlsZS5uYW1lfSIKICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvJHttYXBwaW5nZmlsZS5uYW1lfSIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7d3NkbGZpbGUubG9jYXRpb259LyR7d3NkbGZpbGUubmFtZX0iIAorICA8Y29weSBmaWxlPSIke3dzZGxmaWxlLmxvY2F0aW9ufS8ke3dzZGxmaWxlLm5hbWV9IgogICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dzZGwvJHt3c2RsZmlsZS5uYW1lfSIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7dGFnUGx1Z2lucy54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHt0YWdQbHVnaW5zLnhtbH0iCiAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvdGFnUGx1Z2lucy54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3dlYi54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHt3ZWIueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd2ViLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gICAgPGNvcHkgZmlsZT0iJHtwZXJzaXN0ZW5jZS54bWx9IiAKKyAgICA8Y29weSBmaWxlPSIke3BlcnNpc3RlbmNlLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvcGVyc2lzdGVuY2UueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgIDxjb3B5IGZpbGU9IiR7YmVhbnMueG1sfSIgCisgICA8Y29weSBmaWxlPSIke2JlYW5zLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2JlYW5zLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgIDxjb3B5IGZpbGU9IiR7Y29udGV4dC54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvTUVUQS1JTkYvY29udGV4dC54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSBmaWxlPSIke2NkaS1leHRlbnNpb24uc2VydmljZX0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvc2VydmljZXMvamFrYXJ0YS5lbnRlcnByaXNlLmluamVjdC5zcGkuRXh0ZW5zaW9uIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgICAgIAorCiAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9jbGFzc2VzIj4KICAgICAgIDxmaWxlc2V0IGRpcj0iJHt3YXIuY2xhc3Nlc30iPgogICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouY2xhc3MiLz4KQEAgLTIyNywxMCArMjI3LDEwIEBACiAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvc2VydmljZXMvamFrYXJ0YS5lbnRlcnByaXNlLmluamVjdC5zcGkuRXh0ZW5zaW9uIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvcGVyc2lzdGVuY2UueG1sIi8+CiAgICAgPC9maWxlc2V0PgotICA8L2phcj4gICAgICAgCisgIDwvamFyPgogICA8ZWNobyBtZXNzYWdlPSJjcmVhdGVkIHdhciBmaWxlICR7d2FyLmZpbGV9IiBsZXZlbD0idmVyYm9zZSIvPgotICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgPGVjaG8gbWVzc2FnZT0ibXkgd2ViY2xpZW50IHdhciBjbGFzc2VzIGFyZToke3dlYmNsaWVudC53YXIuY2xhc3Nlc30iIAorICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICA8ZWNobyBtZXNzYWdlPSJteSB3ZWJjbGllbnQgd2FyIGNsYXNzZXMgYXJlOiR7d2ViY2xpZW50Lndhci5jbGFzc2VzfSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiA8L3RhcmdldD4KIApAQCAtMjQ4LDM1ICsyNDgsMzUgQEAKIFZhcmlhYmxlcyBVc2VkOgogICAgICR7ZWpiLmphcn0KICAgICAke2J1aWxkLmNsYXNzZXMuZGlyfQotICAgICR7ZWpiLWphci54bWx9ICAgIAorICAgICR7ZWpiLWphci54bWx9CiAgICAgJHtiZWFucy54bWx9Ci0gICAgJHtwZXJzaXN0ZW5jZS1vcm0ueG1sfSAgICAKLSAgICAke3N1bi1lamItamFyLnhtbH0gICAgCi0gICAgJHtnbGFzc2Zpc2gtZWpiLWphci54bWx9ICAgIAotICAgICR7c3VuLWNtcC1tYXBwaW5ncy54bWx9ICAgIAotICAgICR7bWV0YWluZi5kaXJ9ICAgIAorICAgICR7cGVyc2lzdGVuY2Utb3JtLnhtbH0KKyAgICAke3N1bi1lamItamFyLnhtbH0KKyAgICAke2dsYXNzZmlzaC1lamItamFyLnhtbH0KKyAgICAke3N1bi1jbXAtbWFwcGluZ3MueG1sfQorICAgICR7bWV0YWluZi5kaXJ9CiAgICAgJHtlamJqYXIuZmlsZXN9CiAgICAgJHtkYnNjaGVtYX0KIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJwYWNrYWdlLWVqYmphci1jb21tb24iPgogICA8ZGVsZXRlIGZpbGU9IiR7ZWpiLmphcn0iLz4KLSAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogR2VuZXJhdGluZyBlamItamFyIGluc2lkZSBidWlsZCBkaXJlY3RvcnkiIAorICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBHZW5lcmF0aW5nIGVqYi1qYXIgaW5zaWRlIGJ1aWxkIGRpcmVjdG9yeSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+Ci0gIDxjb3B5IGZpbGU9IiR7ZWpiLWphci54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHtlamItamFyLnhtbH0iCiAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9lamItamFyLnhtbCIKICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHtwZXJzaXN0ZW5jZS1vcm0ueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7cGVyc2lzdGVuY2Utb3JtLnhtbH0iCiAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9wZXJzaXN0ZW5jZS1vcm0ueG1sIgogICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3dlYnNlcnZpY2VzLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3dlYnNlcnZpY2VzLnhtbH0iCiAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93ZWJzZXJ2aWNlcy54bWwiCiAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7c3VuLWVqYi1qYXIueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7c3VuLWVqYi1qYXIueG1sfSIKICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1lamItamFyLnhtbCIKICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtZWpiLWphci54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtZWpiLWphci54bWx9IgogICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLWVqYi1qYXIueG1sIgogICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sfSIKQEAgLTMwMSw0MiArMzAxLDQyIEBACiAgICAgICA8aW5jbHVkZSBuYW1lPSJzdW4tY21wLW1hcHBpbmdzLnhtbCIvPgogICAgICAgPGluY2x1ZGUgbmFtZT0iYmVhbnMueG1sIi8+CiAgICAgPC9tZXRhaW5mPgotICA8L2phcj4gICAgICAgCisgIDwvamFyPgogICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8ZGVsZXRlIGZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9LyouZGJzY2hlbWEiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotPC90YXJnZXQ+ICAKKzwvdGFyZ2V0PgogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldCB0byBwYWNrYWdlIHRoZSBhcHBjbGllbnQgYXBwbGljYXRpb24gdG8gamFyIGZpbGUgLS0+CiA8IS0tCiBWYXJpYWJsZXMgVXNlZDoKICAgICAke2FwcGNsaWVudC5qYXJ9Ci0gICAgJHthcHBjbGllbnRqYXIuY2xhc3Nlc30gICAgCi0gICAgJHthcHBjbGllbnRqYXIuZmlsZXN9ICAgIAorICAgICR7YXBwY2xpZW50amFyLmNsYXNzZXN9CisgICAgJHthcHBjbGllbnRqYXIuZmlsZXN9CiAgICAgJHtidWlsZC5jbGFzc2VzLmRpcn0KLSAgICAke2FwcGxpY2F0aW9uLWNsaWVudC54bWx9ICAgIAotICAgICR7c3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9ICAgIAorICAgICR7YXBwbGljYXRpb24tY2xpZW50LnhtbH0KKyAgICAke3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sfQogLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9InBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+CiAgIDxkZWxldGUgZmlsZT0iJHthcHBjbGllbnQuamFyfSIvPgotICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBHZW5lcmF0aW5nIGFwcGNsaWVudC1qYXIgaW5zaWRlIGJ1aWxkIGRpcmVjdG9yeSIgCisgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IEdlbmVyYXRpbmcgYXBwY2xpZW50LWphciBpbnNpZGUgYnVpbGQgZGlyZWN0b3J5IgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi1jbGllbnQueG1sfSIKLSAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKKyAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIgCi0gICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IiR7YXBwY2xpZW50amFyLmNsYXNzZXN9IiAKLSAgICBtYW5pZmVzdD0iLi9jbGllbnQvTUFOSUZFU1QuTUYiPiAgICAgICAgIAorICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIKKyAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iJHthcHBjbGllbnRqYXIuY2xhc3Nlc30iCisgICAgbWFuaWZlc3Q9Ii4vY2xpZW50L01BTklGRVNULk1GIj4KICAgICA8bWV0YWluZiBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIj4KICAgICAgIDxpbmNsdWRlIG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgPC9tZXRhaW5mPgotICA8L2phcj4gICAgICAgCi08L3RhcmdldD4gCisgIDwvamFyPgorPC90YXJnZXQ+CiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDwhLS0gVGFyZ2V0IHRvIGNyZWF0ZSB0aGUgZWpiIGFwcGxpY2F0aW9uIGphciBmaWxlIC0tPgpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgPHBhcmFtIG5hbWU9ImVqYi5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIi8+CiAgIDwvYW50Y2FsbD4KLTwvdGFyZ2V0PiAgICAgCis8L3RhcmdldD4KIAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLSBUYXJnZXQgdG8gY3JlYXRlIHRoZSBhcHBjbGllbnQgamFyIGZpbGUgLS0+CkBAIC0zNTUsOSArMzU1LDkgQEAKIDx0YXJnZXQgbmFtZT0iYXBwY2xpZW50LWphci1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KLSAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiAKKyAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIgogICAgICAgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiIAorICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuamFyIgogICAgICAgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+CkBAIC0zODYsMjIgKzM4NiwyMiBAQAogPHRhcmdldCBuYW1lPSJidWlsZC1lYXItY29tbW9uIiBkZXBlbmRzPSJmaXhGaWxlcyxwYWNrYWdlLXBlcnNpc3RlbmNlLWNvbW1vbixlamItamFyLWNvbW1vbixhcHBjbGllbnQtamFyLWNvbW1vbix3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgIAotICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAJZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiAgCWZhaWxvbmVycm9yPSJmYWxzZSIvPiAKKyAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMtZWFyLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIgIGZpbHRlcmluZz0idHJ1ZSIvPgotICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+IAorICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+CiAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CiAgICAgPC9maWxlc2V0PgogICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotCTxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLQk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CiAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIi8+CiAgICAgPC9maWxlc2V0PgogICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiBpbmNsdWRlcz0ibGliL3JlcG9ydGVyLmphciIvPgotICA8L2phcj4gICAgICAgIAorICA8L2phcj4KIDwvdGFyZ2V0PgogCiAKQEAgLTQxMSwyMSArNDExLDIxIEBACiA8dGFyZ2V0IG5hbWU9ImVhci1jb21tb24iIGRlcGVuZHM9ImZpeEZpbGVzLGluaXQtY29tbW9uIj4KICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+ICAgIAotICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAJZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAorICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgorICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXJlc291cmNlcy1lYXIueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIiAgZmlsdGVyaW5nPSJ0cnVlIi8+Ci0gIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiAKKyAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiCiAgICAgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgogICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgogICAgIDwvZmlsZXNldD4KICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KLQk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIvPgogICAgIDwvZmlsZXNldD4KICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9ImxpYi9yZXBvcnRlci5qYXIiLz4KLSAgPC9lYXI+ICAgICAgICAKKyAgPC9lYXI+CiA8L3RhcmdldD4KIAogCkBAIC00NjgsNyArNDY4LDcgQEAKIDwhLS0gVGFyZ2V0IHRvIGV4ZWN1dGUgYSBiYXRjaGZpbGUgb2YgYXNhZG1pbiBjb21tYW5kcyAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KLSAgPGVjaG8gbWVzc2FnZT0iRG9pbmcgYWRtaW4gYmF0Y2ggdGFzayAke2FkbWluLmNvbW1hbmR9IC0tZmlsZSIgCisgIDxlY2hvIG1lc3NhZ2U9IkRvaW5nIGFkbWluIGJhdGNoIHRhc2sgJHthZG1pbi5jb21tYW5kfSAtLWZpbGUiCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogPHByb3BlcnR5IG5hbWU9InVzZXIucGFzc3dvcmQuZmlsZSIgdmFsdWU9ImFzYWRtaW51c2VycGFzc3dvcmQudHh0Ii8+CiA8ZWNobyBmaWxlPSIke3VzZXIucGFzc3dvcmQuZmlsZX0iIGFwcGVuZD0iZmFsc2UiPgpAQCAtNDc5LDExICs0NzksMTEgQEAKIDwvZWNobz4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICA8YXJnIGxpbmU9Ii0tdXNlciAke2FkbWluLnVzZXJ9IC0tcGFzc3dvcmRmaWxlICR7dXNlci5wYXNzd29yZC5maWxlfSAtLWhvc3QgJHthZG1pbi5ob3N0fSAtLXBvcnQgJHthZG1pbi5wb3J0fSAtLWVjaG89dHJ1ZSAtLXRlcnNlPXRydWUiLz4KLSAgICAgPGFyZyBsaW5lPSJtdWx0aW1vZGUgLS1maWxlICR7YXNhZG1pbi5maWxlfSIgLz4gICAgICAgIAorICAgICA8YXJnIGxpbmU9Im11bHRpbW9kZSAtLWZpbGUgJHthc2FkbWluLmZpbGV9IiAvPgogICA8L2V4ZWM+CiAgIDxkZWxldGUgZmlsZT0iJHt1c2VyLnBhc3N3b3JkLmZpbGV9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KIDwvdGFyZ2V0PgotIAorCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KQEAgLTUwNCw3ICs1MDQsNyBAQAogICA8L2FudGNhbGw+CiAgIDxkZWxldGUgZmlsZT0iJHt1c2VyLnBhc3N3b3JkLmZpbGV9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KIDwvdGFyZ2V0PgotICAgICAKKwogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLSBUYXJnZXQgdG8gZGVsZXRlIHRoZSB1c2VyIGluIGZpbGUgcmVhbG0gdGhlIEFwcFNlcnYgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgpAQCAtNTE4LDcgKzUxOCw3IEBACiA8L3RhcmdldD4KIAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSBKMkVFIENvbm5lY3RvciByZWxhdGVkIHRhcmdldHMgCQkJICAgICAJICAtLT4KKzwhLS0gSjJFRSBDb25uZWN0b3IgcmVsYXRlZCB0YXJnZXRzICAgICAgICAgICAgICAgICAgICAgICAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAKIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWNvbm5lY3Rvci1jb25ucG9vbC1jb21tb24iCkBAIC02MDUsNyArNjA1LDcgQEAKIDwhLS0gVGFyZ2V0IHRvIGNyZWF0ZSBKREJDIGNvbm5lY3Rpb24gcG9vbCAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iY3JlYXRlZCBqZGJjIGNvbm5lY3Rpb24gcG9vbCAke2pkYmMuY29ucG9vbC5uYW1lfSIgCis8ZWNobyBtZXNzYWdlPSJjcmVhdGVkIGpkYmMgY29ubmVjdGlvbiBwb29sICR7amRiYy5jb25wb29sLm5hbWV9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhLXBhcmFtcyIgdmFsdWU9IiIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CkBAIC02MjEsNyArNjIxLDcgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLWRyaXZlci1jb25ucG9vbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLTxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgamRiYyBjb25uZWN0aW9uIHBvb2wgJHtqZGJjLmNvbnBvb2wubmFtZX0iIAorPGVjaG8gbWVzc2FnZT0iY3JlYXRlZCBqZGJjIGNvbm5lY3Rpb24gcG9vbCAke2pkYmMuY29ucG9vbC5uYW1lfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYS1wYXJhbXMiIHZhbHVlPSIiLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgpAQCAtNjU4LDcgKzY1OCw3IEBACiAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgogICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCSAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7amRiYy5jb25wb29sLm5hbWV9LnByb3BlcnR5LlVSTD0ke2RiLnVybH07dXNlcj0ke2RiLnVzZXJ9O3Bhc3N3b3JkPSR7ZGIucHdkfSIvPgorICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7amRiYy5jb25wb29sLm5hbWV9LnByb3BlcnR5LlVSTD0ke2RiLnVybH07dXNlcj0ke2RiLnVzZXJ9O3Bhc3N3b3JkPSR7ZGIucHdkfSIvPgogICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIApAQCAtNzA5LDcgKzcwOSw3IEBACiAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgogICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCSAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7amRiYy5jb25wb29sLm5hbWV9LnByb3BlcnR5LlVSTD0ke2RiLnVybH07dXNlcj0ke2RiLnVzZXJ9O3Bhc3N3b3JkPSR7ZGIucHdkfSIvPgorICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7amRiYy5jb25wb29sLm5hbWV9LnByb3BlcnR5LlVSTD0ke2RiLnVybH07dXNlcj0ke2RiLnVzZXJ9O3Bhc3N3b3JkPSR7ZGIucHdkfSIvPgogICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIApAQCAtNzI1LDE0ICs3MjUsMTQgQEAKICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7amRiYy5jb25wb29sLm5hbWV9Ii8+CiAgICAgPC9leGVjPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNtZCBleGVjdXRlZCBmb3IgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4gIAorICAgIDxlY2hvIG1lc3NhZ2U9ImNtZCBleGVjdXRlZCBmb3IgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KIDwvdGFyZ2V0PgogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldCB0byBjcmVhdGUgSkRCQyByZXNvdXJjZSAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgamRiYyByZXNvdXJjZSBwb29sICR7amRiYy5yZXNvdXJjZS5uYW1lfSIgCis8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBqZGJjIHJlc291cmNlIHBvb2wgJHtqZGJjLnJlc291cmNlLm5hbWV9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxlY2hvIG1lc3NhZ2U9ImFzYWRtaW4gY3JlYXRlLWpkYmMtcmVzb3VyY2UgJHthcy5wcm9wc30gLS1jb25uZWN0aW9ucG9vbGlkICR7amRiYy5jb25wb29sLm5hbWV9IC0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9ICR7amRiYy5yZXNvdXJjZS5uYW1lfSIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgpAQCAtNzg0LDcgKzc4NCw3IEBACiA8IS0tIFRhcmdldCB0byBjcmVhdGUgcGVyc2lzdGVuY2UgcmVzb3VyY2UgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJjcmVhdGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci08ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBwbSByZXNvdXJjZSBhdCAke3BtLnJlc291cmNlLm5hbWV9IiAKKzxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIHBtIHJlc291cmNlIGF0ICR7cG0ucmVzb3VyY2UubmFtZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgICA8ZWNobyBtZXNzYWdlPSJhc2FkbWluIGNyZWF0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZSAke2FzLnByb3BzfSAtLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSAke3BtLnJlc291cmNlLm5hbWV9Ii8+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KQEAgLTc5NCw3ICs3OTQsNyBAQAogICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHtwbS5yZXNvdXJjZS5uYW1lfSIvPgogICAgIDwvZXhlYz4KLSAgICA8ZWNobyBtZXNzYWdlPSJDcmVhdGVkICR7cG0ucmVzb3VyY2UubmFtZX0gLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4gCisgICAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRlZCAke3BtLnJlc291cmNlLm5hbWV9IC0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCkBAIC04MTMsMTQgKzgxMywxNCBAQAogPHRhcmdldCBuYW1lPSJkZWxldGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIgotICAgICAgdmFsdWU9ImRlbGV0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZSAKKyAgICAgIHZhbHVlPSJkZWxldGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UKICAgICAgICAgLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iIC8+CiAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3BtLnJlc291cmNlLm5hbWV9IiAvPgogICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJleGVjdXRlLXNxbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLTxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBzcWwgc3RhdGVtZW50IGF0ICR7YmFzZWRpcn0gZnJvbSAke3NxbC5maWxlfSIgCis8ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgc3FsIHN0YXRlbWVudCBhdCAke2Jhc2VkaXJ9IGZyb20gJHtzcWwuZmlsZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGVjaG8gbWVzc2FnZT0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9Ii8+CiAgIDxzcWwKQEAgLTgzNiw3ICs4MzYsNyBAQAogCiAKIDx0YXJnZXQgbmFtZT0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIHNxbCBzdGF0ZW1lbnQgYXQgJHtiYXNlZGlyfSBmcm9tICR7c3FsLmZpbGV9IiAKKzxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBzcWwgc3RhdGVtZW50IGF0ICR7YmFzZWRpcn0gZnJvbSAke3NxbC5maWxlfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8c3FsCiAgICAgZHJpdmVyPSIke2RiLmRyaXZlcn0iCkBAIC04NTIsOCArODUyLDggQEAKIAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLSBUYXJnZXQgdG8gY3JlYXRlL2RlbGV0ZSBqYXZhbWFpbCByZXNvdXJjZXMgIC0tPgotPCEtLSAKLSAgICBQcm9wZXJ0aWVzIHJlcXVpcmVkOiAKKzwhLS0KKyAgICBQcm9wZXJ0aWVzIHJlcXVpcmVkOgogICAgIG1haWxob3N0CiAgICAgZnJvbWFkZHJlc3MKICAgICBkZWJ1ZwpAQCAtODk0LDcgKzg5NCw3IEBACiA8IS0tIFRhcmdldCB0byBjcmVhdGUgZGF0YWJhc2UgdGFibGUgdGhyb3VnaCBTUUwgZmlsZSAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1zcWwtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci08ZWNobyBtZXNzYWdlPSJjcmVhdGluZyB0YWJsZXMgZnJvbSAke2Jhc2VkaXJ9L3NxbC8ke2RiLmNyZWF0ZX0iIAorPGVjaG8gbWVzc2FnZT0iY3JlYXRpbmcgdGFibGVzIGZyb20gJHtiYXNlZGlyfS9zcWwvJHtkYi5jcmVhdGV9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxzcWwKICAgICBkcml2ZXI9IiR7ZGIuZHJpdmVyfSIKQEAgLTkxMyw3ICs5MTMsNyBAQAogPCEtLSBUYXJnZXQgdG8gZGVsZXRlIGRhdGFiYXNlIHRhYmxlIHRocm91Z2ggU1FMIGZpbGUgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJkZWxldGUtc3FsLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iZHJvcHBpbmcgdGFibGVzIGZyb20gJHtiYXNlZGlyfS9zcWwvJHtkYi5kcm9wfSIgCis8ZWNobyBtZXNzYWdlPSJkcm9wcGluZyB0YWJsZXMgZnJvbSAke2Jhc2VkaXJ9L3NxbC8ke2RiLmRyb3B9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxzcWwKICAgICBkcml2ZXI9IiR7ZGIuZHJpdmVyfSIKQEAgLTkzMiwxMSArOTMyLDExIEBACiA8IS0tIFRhZ2V0IHRvIGNyZWF0ZSBKTVMgQ29ubmVjdGlvbiAgICAgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJjcmVhdGUtam1zLWNvbm5lY3Rpb24tY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIEpNUyBjb25uZWN0aW9uIGZhY3Rvcnkgd2l0aCBuYW1lICR7am1zLmZhY3RvcnkubmFtZX0iIAorICA8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBKTVMgY29ubmVjdGlvbiBmYWN0b3J5IHdpdGggbmFtZSAke2ptcy5mYWN0b3J5Lm5hbWV9IgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CiAgICAgPGFyZyBsaW5lPSJjcmVhdGUtam1zLXJlc291cmNlICIvPgotICAgIDxhcmcgbGluZT0iLS1yZXN0eXBlICR7am1zLmZhY3RvcnkudHlwZX0iLz4gICAgCisgICAgPGFyZyBsaW5lPSItLXJlc3R5cGUgJHtqbXMuZmFjdG9yeS50eXBlfSIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2ptcy5mYWN0b3J5Lm5hbWV9IiAvPgpAQCAtOTQ3LDIzICs5NDcsMjMgQEAKIDwhLS0gVGFnZXQgdG8gZGVsZXRlIEpNUyBDb25uZWN0aW9uICAgICAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1qbXMtY29ubmVjdGlvbi1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgPGVjaG8gbWVzc2FnZT0iRGVsZXRlIEpNUyBjb25uZWN0aW9uIGZhY3Rvcnkgd2l0aCBuYW1lICR7am1zLmZhY3RvcnkubmFtZX0iIAorICA8ZWNobyBtZXNzYWdlPSJEZWxldGUgSk1TIGNvbm5lY3Rpb24gZmFjdG9yeSB3aXRoIG5hbWUgJHtqbXMuZmFjdG9yeS5uYW1lfSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgotICAgIDxhcmcgbGluZT0iZGVsZXRlLWptcy1yZXNvdXJjZSAiLz4gICAgCisgICAgPGFyZyBsaW5lPSJkZWxldGUtam1zLXJlc291cmNlICIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+ICAgIAorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7am1zLmZhY3RvcnkubmFtZX0iLz4KICAgPC9leGVjPgogPC90YXJnZXQ+CiAKIDwhLS0gSk1TOiBjcmVhdGUvZGVsZXRlIERlc3RpbmF0aW9uIFJlc291cmNlIFRhcmdldHMgLS0+CiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qbXMtcmVzb3VyY2UtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIEpNUyByZXNvdXJjZSB3aXRoIG5hbWUgJHtqbXMucmVzb3VyY2UubmFtZX0iIAorICA8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBKTVMgcmVzb3VyY2Ugd2l0aCBuYW1lICR7am1zLnJlc291cmNlLm5hbWV9IgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KIAogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KLSAgICA8YXJnIGxpbmU9ImNyZWF0ZS1qbXNkZXN0IC0tZGVzdHR5cGUgJHtkZXN0LnR5cGV9ICIvPiAgICAKKyAgICA8YXJnIGxpbmU9ImNyZWF0ZS1qbXNkZXN0IC0tZGVzdHR5cGUgJHtkZXN0LnR5cGV9ICIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICA8YXJnIGxpbmU9IiR7ZGVzdC5uYW1lfSIvPgogICA8L2V4ZWM+CkBAIC05NzIsMjQgKzk3MiwyNCBAQAogICAgIDxhcmcgbGluZT0iY3JlYXRlLWptcy1yZXNvdXJjZSAiLz4KICAgICA8YXJnIGxpbmU9Ii0tcmVzdHlwZSAke2ptcy5yZXNvdXJjZS50eXBlfSIvPgogICAgIDxhcmcgbGluZT0iLS1wcm9wZXJ0eSBpbXFEZXN0aW5hdGlvbk5hbWU9JHtkZXN0Lm5hbWV9Ii8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPiAgICAKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgIDxhcmcgbGluZT0iJHtqbXMucmVzb3VyY2UubmFtZX0iLz4KICAgPC9leGVjPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iZGVsZXRlLWptcy1yZXNvdXJjZS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgPGVjaG8gbWVzc2FnZT0iRGVsZXRlIEpNUyByZXNvdXJjZSB3aXRoIG5hbWUgJHtqbXMucmVzb3VyY2UubmFtZX0iIAorICA8ZWNobyBtZXNzYWdlPSJEZWxldGUgSk1TIHJlc291cmNlIHdpdGggbmFtZSAke2ptcy5yZXNvdXJjZS5uYW1lfSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAKICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CiAgICAgPGFyZyBsaW5lPSJkZWxldGUtam1zLXJlc291cmNlICIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4gICAgCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30gJHtqbXMucmVzb3VyY2UubmFtZX0iLz4KICAgPC9leGVjPgogCiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgotICAgIDxhcmcgbGluZT0iZGVsZXRlLWptc2Rlc3QgLS1kZXN0dHlwZSAke2Rlc3QudHlwZX0gIi8+ICAgIAorICAgIDxhcmcgbGluZT0iZGVsZXRlLWptc2Rlc3QgLS1kZXN0dHlwZSAke2Rlc3QudHlwZX0gIi8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSAke2Rlc3QubmFtZX0iLz4KICAgPC9leGVjPgogPC90YXJnZXQ+CkBAIC0xMDMyLDcgKzEwMzIsNyBAQAogPHRhcmdldCBuYW1lPSJkZXBsb3ktdmVyaWZ5LWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXZlcmlmeS1jb21tb24tcGUiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS12ZXJpZnktY29tbW9uLWVlIi8+Ci08L3RhcmdldD4gICAgICAgCis8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJkZXBsb3ktdmVyaWZ5LWNvbW1vbi1wZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iIHVubGVzcz0iZWUiPgogICA8cHJvcGVydHkgbmFtZT0iZGVwbG95ZWQuYXBwIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIi8+CkBAIC0xMDczLDkgKzEwNzMsOSBAQAogICAgIDxhcmcgbGluZT0iLS1wcmVjb21waWxlanNwPSR7cHJlY29tcGlsZWpzcH0iLz4KICAgICA8YXJnIGxpbmU9Ii0tdXBsb2FkIHRydWUiLz4KICAgICA8YXJnIGxpbmU9Ii0tcmV0cmlldmUgJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgIDwvZXhlYz4KLTwvdGFyZ2V0PiAgICAKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImRlcGxveS13YXItbmFtZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHt3YXJuYW1lfSBmcm9tICR7YmFzZWRpcn0uIgpAQCAtMTEyOCwxMCArMTEyOCwxMCBAQAogICAgIDxhcmcgbGluZT0iZGVwbG95Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgIDxhcmcgbGluZT0iLS11cGxvYWQ9dHJ1ZSIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIvPgogICA8L2V4ZWM+Ci08L3RhcmdldD4gCis8L3RhcmdldD4KIAogPCEtLSBkZXBsb3kgdGhlIHN0YW5kYWxvbmUgamFyIGluIEFwcFNlcnYgIC0tPgogPHRhcmdldCBuYW1lPSJkZXBsb3ktY2xpZW50LWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTEzOSwxMSArMTEzOSwxMSBAQAogICAgIDxhcmcgbGluZT0iZGVwbG95Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgIDxhcmcgbGluZT0iLS11cGxvYWQ9dHJ1ZSIvPgotICAgIDxhcmcgbGluZT0iLS1yZXRyaWV2ZSAke2Fzc2VtYmxlLmRpcn0iLz4gICAgCi0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tcmV0cmlldmUgJHthc3NlbWJsZS5kaXJ9Ii8+CisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogICA8L2V4ZWM+Ci08L3RhcmdldD4gCis8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJ1bmRlcGxveS13YXItbmFtZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxlY2hvPiA9PT0gRW1iZWRkZWQgVU5ERVBMT1lJTkcgJHt3YXJuYW1lfSA9PT0gPC9lY2hvPgpAQCAtMTE2Nyw3ICsxMTY3LDcgQEAKICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICA8YXJnIGxpbmU9InVuZGVwbG95Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHthcHBuYW1lfS1lamIiLz4KICAgPC9leGVjPgogPC90YXJnZXQ+CkBAIC0xMTc3LDEwICsxMTc3LDEwIEBACiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgPGFyZyBsaW5lPSJ1bmRlcGxveSIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7YXBwbmFtZX0tY2xpZW50Ii8+CiAgIDwvZXhlYz4KLTwvdGFyZ2V0PiAgCis8L3RhcmdldD4KIAogPCEtLSBydW4gYXBwY2xpZW50IGluIEFwcFNlcnYgIC0tPgogPHRhcmdldCBuYW1lPSJydW5jbGllbnQtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC0xMjIyLDExICsxMjIyLDExIEBACiAgICAgPGFyZyB2YWx1ZT0iJHt0ZXN0c3VpdGUuaWR9Ii8+CiAgIDwvamF2YT4KIDwvdGFyZ2V0PgotICAKKwogPCEtLSBwcmVwYXJlIFBvaW50YmFzZSBzZXJ2ZXJzIC0tPgogPHRhcmdldCBuYW1lPSJwcmVwYXJlUEIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgPGVjaG8gbWVzc2FnZT0iU3RhcnRpbmcgUG9pbnRiYXNlIHNlcnZlcnMiIGxldmVsPSJ2ZXJib3NlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9saWIvcG9pbnRiYXNlLmluaSIgCisgIDxjb3B5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9saWIvcG9pbnRiYXNlLmluaSIKICAgICAgIHRvZmlsZT0iJHtkYi5kaXJ9L3BvaW50YmFzZS5pbmkiLz4KICAgPHJlcGxhY2UgZmlsZT0iJHtkYi5kaXJ9L3BvaW50YmFzZS5pbmkiIHRva2VuPSJAQEAiIHZhbHVlPSIke2RiLmRpcn0iLz4KIDwvdGFyZ2V0PgpAQCAtMTI0OSwxMiArMTI0OSwxMiBAQAogCiA8IS0tIHRhcmdldCBuYW1lPSJzdGFydFBCIiBkZXBlbmRzPSJwcmVwYXJlUEIiPgogICA8cGFyYWxsZWw+Ci0gICAgPGphdmEgY2xhc3NuYW1lPSJjb20ucG9pbnRiYXNlLm5ldC5uZXRTZXJ2ZXIiIAorICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnBvaW50YmFzZS5uZXQubmV0U2VydmVyIgogICAgICAgICBjbGFzc3BhdGg9IiR7ZGIuY2xhc3NwYXRofSIgZmFpbG9uZXJyb3I9ImZhbHNlIiBmb3JrPSJ0cnVlIj4KICAgICAgIDxhcmcgbGluZT0iL3BvcnQ6OTA5MiIvPgogICAgICAgPGFyZyBsaW5lPSIvcG9pbnRiYXNlLmluaT0ke2RiLmRpcn0vcG9pbnRiYXNlLmluaSIvPgogICAgIDwvamF2YT4KLSAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5wb2ludGJhc2UubmV0Lm5ldFNlcnZlciIgCisgICAgPGphdmEgY2xhc3NuYW1lPSJjb20ucG9pbnRiYXNlLm5ldC5uZXRTZXJ2ZXIiCiAgICAgICAgIGNsYXNzcGF0aD0iJHtkYi5jbGFzc3BhdGh9IiBmYWlsb25lcnJvcj0idHJ1ZSIgZm9yaz0idHJ1ZSI+CiAgICAgICA8YXJnIGxpbmU9Ii9wb3J0OjkwOTMiLz4KICAgICAgIDxhcmcgbGluZT0iL3BvaW50YmFzZS5pbmk9JHtkYi5kaXJ9L3BvaW50YmFzZS5pbmkiLz4KQEAgLTEyNjUsNyArMTI2NSw3IEBACiA8IS0tICBzdGFydCBEZXJieSBEYXRhYmFzZSAtLT4KIDx0YXJnZXQgbmFtZT0ic3RhcnREZXJieSI+CiAgIDxjb25kaXRpb24gcHJvcGVydHk9ImRhcndpbiI+Ci0JPG9zIG5hbWU9Ik1hYyBPUyBYIi8+CisgICAgPG9zIG5hbWU9Ik1hYyBPUyBYIi8+CiAgIDwvY29uZGl0aW9uPgogICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0RGVyYnlOb25NYWMiLz4KICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydERlcmJ5TWFjIi8+CkBAIC0xMjgyLDcgKzEyODIsNyBAQAogICAgICAgY2xhc3NwYXRoPSIke2RiLmNsYXNzcGF0aH0iIGZvcms9InRydWUiIHNwYXduPSJ0cnVlIj4KICAgICAgIDxhcmcgbGluZT0iLWggbG9jYWxob3N0IC1wICR7ZGIucG9ydC4yfSBzdGFydCIvPgogICAgIDwvamF2YT4KLSAgPC9wYXJhbGxlbD4gICAgIAorICA8L3BhcmFsbGVsPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0ic3RhcnREZXJieU1hYyIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJkYXJ3aW4iPgpAQCAtMTI5NSw3ICsxMjk1LDcgQEAKICAgICA8L2phdmE+CiAgICAgPGphdmEgY2xhc3NuYW1lPSJvcmcuYXBhY2hlLmRlcmJ5LmRyZGEuTmV0d29ya1NlcnZlckNvbnRyb2wiCiAgICAgICBjbGFzc3BhdGg9IiR7ZGIuY2xhc3NwYXRofSIgZm9yaz0idHJ1ZSIgc3Bhd249InRydWUiPgotICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9ImRlcmJ5LnN0b3JhZ2UuZmlsZVN5bmNUcmFuc2FjdGlvbkxvZyIgdmFsdWU9InRydWUiLz4gICAgIAorICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9ImRlcmJ5LnN0b3JhZ2UuZmlsZVN5bmNUcmFuc2FjdGlvbkxvZyIgdmFsdWU9InRydWUiLz4KICAgICAgIDxhcmcgbGluZT0iLWggbG9jYWxob3N0IC1wICR7ZGIucG9ydC4yfSBzdGFydCIvPgogICAgIDwvamF2YT4KICAgPC9wYXJhbGxlbD4KQEAgLTEzMjMsMTAgKzEzMjMsMTAgQEAKIAogPCEtLSBzZXR1cCBJTVEgZm9yIFJJIEJ1aWxkIC0tPgogPHRhcmdldCBuYW1lPSJzZXR1cC1tcS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICA8ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgRGF0YXN0b3JlIHNldHVwIGZvciBTMU1RLiBSZXF1aXJlZCBvbmx5IGZvciBSSSIgCisgICAgPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIERhdGFzdG9yZSBzZXR1cCBmb3IgUzFNUS4gUmVxdWlyZWQgb25seSBmb3IgUkkiCiAgICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iJHtJTVFEQk1HUn0gLWphdmFob21lICR7amF2YS5ob21lfSAKLSAgICAgICAgLWIgJHthZG1pbi5kb21haW59XyR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IGNyZWF0ZSBhbGwiIAorICAgIDxlY2hvIG1lc3NhZ2U9IiR7SU1RREJNR1J9IC1qYXZhaG9tZSAke2phdmEuaG9tZX0KKyAgICAgICAgLWIgJHthZG1pbi5kb21haW59XyR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IGNyZWF0ZSBhbGwiCiAgICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7SU1RREJNR1J9IiBmYWlsb25lcnJvcj0idHJ1ZSI+CiAgICAgIDxhcmcgbGluZT0iLWphdmFob21lICR7amF2YS5ob21lfSAtYiAke2FkbWluLmRvbWFpbn1fJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gY3JlYXRlIGFsbCIgLz4KQEAgLTEzODcsMTMgKzEzODcsMTMgQEAKIAogPCEtLSB1c2FnZSAgLS0+CiA8dGFyZ2V0IG5hbWU9InVzYWdlLWNvbW1vbiI+Ci0gICAgPGVjaG8+ICAgICAgICAgCisgICAgPGVjaG8+CiAgICAgICAgIGFudCBjbGVhbiAgICAgICAgICAgUmVtb3ZlIGFsbCBjbGFzc2VzIGZpbGVzCiAgICAgICAgIGFudCBidWlsZCAgICAgICAgICAgQnVpbGQgdGhlIGFwcGxpY2F0aW9uCiAgICAgICAgIGFudCBkZXBsb3kgICAgICAgICAgRGVwbG95IHRoZSBlYXIgZmlsZXMgdG8gUzFBUwotICAgICAgICBhbnQgcnVuCSAgICAgICAgICAgIFJ1biB0aGUgYXBwbGljYXRpb24KKyAgICAgICAgYW50IHJ1biAgICAgICAgICAgICAgICBSdW4gdGhlIGFwcGxpY2F0aW9uCiAgICAgICAgIGFudCB1bmRlcGxveSAgICAgICAgVW5kZXBsb3kgdGhlIGVhciBmaWxlcyBmcm9tIFMxQVMKLSAgICAgICAgYW50IHVzYWdlICAgICAgICAgICBEaXNwbGF5IHRoaXMgbWVzc2FnZSAgICAgICAgICAgIAorICAgICAgICBhbnQgdXNhZ2UgICAgICAgICAgIERpc3BsYXkgdGhpcyBtZXNzYWdlCiAgICAgPC9lY2hvPgogPC90YXJnZXQ+CiAKQEAgLTE0MTksMTMgKzE0MTksMTMgQEAKIAogPHRhcmdldCBuYW1lPSJyZXN0YXJ0LWluc3RhbmNlIj4KICAgICA8ZWNobyBtZXNzYWdlPSJSZXN0YXJ0aW5nIHJlbW90ZSBzZXJ2ZXIgaW5zdGFuY2UsdW50aWwgdGhpcyBnZXRzIGZpeGVkIi8+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICA8YXJnIGxpbmU9InN0b3AtaW5zdGFuY2UiLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPC9leGVjPgogICAgIDxzbGVlcCBzZWNvbmRzPSIzMCIvPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgPGFyZyBsaW5lPSJzdGFydC1pbnN0YW5jZSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KQEAgLTE0NDgsNyArMTQ0OCw3IEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJzZXR1cFRpbWVyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgaWY9ImVlIj4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgIDxhcmcgbGluZT0iY3JlYXRlLXJlc291cmNlLXJlZiIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgc2VydmVyIi8+CkBAIC0xNDc1LDEzICsxNDc1LDEzIEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJ1bnNldHVwVGltZXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0iZWUiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgPGFyZyBsaW5lPSJkZWxldGUtcmVzb3VyY2UtcmVmIi8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCBzZXJ2ZXIiLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2pkYmMucmVzb3VyY2UubmFtZX0iLz4KICAgICA8L2V4ZWM+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICA8YXJnIGxpbmU9InVuc2V0Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0tY29uZmlnLmVqYi1jb250YWluZXIuZWpiLXRpbWVyLXNlcnZpY2UudGltZXItZGF0YXNvdXJjZSIvPgogICAgIDwvZXhlYz4KQEAgLTE2MjcsNyArMTYyNyw3IEBACiA8IS0tIFRhcmdldCB0byBGbHVzaCBjb25uZWN0aW9uIHBvb2wgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJmbHVzaC1jb25ucG9vbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLTxlY2hvIG1lc3NhZ2U9IkZsdXNoIGNvbm5lY3Rpb24gcG9vbCAke2pkYmMuY29ucG9vbC5uYW1lfSIgCis8ZWNobyBtZXNzYWdlPSJGbHVzaCBjb25uZWN0aW9uIHBvb2wgJHtqZGJjLmNvbnBvb2wubmFtZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICA8YXJnIGxpbmU9ImZsdXNoLWNvbm5lY3Rpb24tcG9vbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZW1iZWRkZWQvY29uZmlnL2pheHJwYy1oZWxsby13ZWItYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZW1iZWRkZWQvY29uZmlnL2pheHJwYy1oZWxsby13ZWItYnVpbGQueG1sCmluZGV4IGFmZmZhMmEuLjcyY2Y2YzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VtYmVkZGVkL2NvbmZpZy9qYXhycGMtaGVsbG8td2ViLWJ1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lbWJlZGRlZC9jb25maWcvamF4cnBjLWhlbGxvLXdlYi1idWlsZC54bWwKQEAgLTUxLDIyICs1MSwyMiBAQAogICAgIDwvcGF0aD4KIAogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sZGVwbG95LGFzc2VtYmxlLWNsaWVudCxkZXBsb3ktY2xpZW50LHJ1bnRlc3QsdW5kZXBsb3kiLz4KLSAgCisKIAogICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS13YXIiIGRlc2NyaXB0aW9uPSJQYWNrYWdlcyB0aGUgV0FSIGZpbGUiPgogICAgICA8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyB0aGUgV0FSLi4uLiIvPgogICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUud2FyfS8ke3dhci5maWxlfSIgLz4KICAgICAgPGRlbGV0ZSBkaXI9IiR7YXNzZW1ibGUud2FyfS9XRUItSU5GIiAvPgogICAgICA8Y29weSB0b2Rpcj0iJHthc3NlbWJsZS53YXJ9L1dFQi1JTkYvY2xhc3Nlcy8iPgotICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkfS8iIAotICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9IioqLyouY2xhc3MiIAorICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkfS8iCisgICAgICAgICAgICAgICAgICBpbmNsdWRlcz0iKiovKi5jbGFzcyIKICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVzPSIqKi8qQ2xpZW50LmNsYXNzLCAqKi8qLndzZGwsICoqLyptYXBwaW5nLnhtbCIvPgogICAgICA8L2NvcHk+CiAgICAgIDxjb3B5IGZpbGU9IiR7YnVpbGR9L015SGVsbG9TZXJ2aWNlLndzZGwiIHRvZGlyPSIke2Fzc2VtYmxlLndhcn0vV0VCLUlORi93c2RsIiAvPgogICAgICA8Y29weSBmaWxlPSIke2J1aWxkfS9tYXBwaW5nLnhtbCIgdG9kaXI9IiR7YXNzZW1ibGUud2FyfS8ke2J1aWxkfS8iIC8+CiAgICAgIDxjb3B5IGZpbGU9InN1bi13ZWIueG1sIiB0b2Rpcj0iJHthc3NlbWJsZS53YXJ9L1dFQi1JTkYiIC8+CiAgICAgIDxjb3B5IGZpbGU9IndlYnNlcnZpY2VzLnhtbCIgdG9kaXI9IiR7YXNzZW1ibGUud2FyfS9XRUItSU5GIiAvPgotICAgICA8d2FyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLndhcn0vJHt3YXIuZmlsZX0iIAorICAgICA8d2FyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLndhcn0vJHt3YXIuZmlsZX0iCiAgICAgICAgICAgd2VieG1sPSIuL3dlYi54bWwiIGZpbGVzb25seT0idHJ1ZSIgPgogICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS53YXJ9IiBpbmNsdWRlcz0iV0VCLUlORi8qKiwgYnVpbGQvKioiIC8+CiAgICAgIDwvd2FyPgpAQCAtNzksNyArNzksNyBAQAogCiAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJzZXQtYXNhZG1pbixidWlsZCxjcmVhdGUtd2FyIj4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke3dhci5maWxlfSBmcm9tICR7YmFzZWRpcn0uIiBsZXZlbD0idmVyYm9zZSIvPgotCTxnbGFzc2Zpc2gtZW1iZWRkZWQtc3RhcnQgLz4KKyAgICA8Z2xhc3NmaXNoLWVtYmVkZGVkLXN0YXJ0IC8+CiAgICAgICA8Z2xhc3NmaXNoLWVtYmVkZGVkLWRlcGxveSBhcHA9IiR7d2FyLmZpbGV9IiAvPgogICAgIDwvdGFyZ2V0PgogCkBAIC04Nyw5ICs4Nyw5IEBACiAKICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktd2FyMSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGVjaG8gbWVzc2FnZT0iVW5kZXBsb3lpbmcgJHt3YXIuZmlsZX0gZnJvbSAke2Jhc2VkaXJ9LiIgbGV2ZWw9InZlcmJvc2UiLz4KLQk8Z2xhc3NmaXNoLWVtYmVkZGVkLXVuZGVwbG95IG5hbWU9IiR7d2FybmFtZX0iLz4KKyAgICA8Z2xhc3NmaXNoLWVtYmVkZGVkLXVuZGVwbG95IG5hbWU9IiR7d2FybmFtZX0iLz4KICAgPC90YXJnZXQ+Ci0gCisKIAogIDwhLS0gPHRhcmdldCBuYW1lPSJidWlsZC1jbGllbnQiIGRlcGVuZHM9ImJ1aWxkLXN0YXRpYyIKICAgICAgZGVzY3JpcHRpb249IkV4ZWN1dGVzIHRoZSB0YXJnZXRzIG5lZWRlZCB0byBidWlsZCBhIHN0YXRpYyBzdHViIGNsaWVudC4iPgpAQCAtMTIwLDcgKzEyMCw3IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KICAgICA8L2FudGNhbGw+CiAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIvPgotICAgIDxjb3B5IGZpbGU9IiR7YXNzZW1ibGUud2FyfS9XRUItSU5GL3dzZGwvTXlIZWxsb1NlcnZpY2Uud3NkbCIgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwiLz4gICAgCisgICAgPGNvcHkgZmlsZT0iJHthc3NlbWJsZS53YXJ9L1dFQi1JTkYvd3NkbC9NeUhlbGxvU2VydmljZS53c2RsIiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIvPgogICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iYXBwY2xpZW50LWphci1jb21tb24iPgpAQCAtMTY0LDE1ICsxNjQsMTUgQEAKICAgICAgICAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNsaWVudC53YXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vd3NjbGllbnQud2FyIi8+CiAgICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nIHdzY2xpZW50LndhciBmcm9tICR7YXNzZW1ibGUuZGlyfS4iIGxldmVsPSJ2ZXJib3NlIi8+Ci0JICAgICA8Z2xhc3NmaXNoLWVtYmVkZGVkLWRlcGxveSBhcHA9IiR7Y2xpZW50Lndhcn0iIC8+CisgICAgICAgICA8Z2xhc3NmaXNoLWVtYmVkZGVkLWRlcGxveSBhcHA9IiR7Y2xpZW50Lndhcn0iIC8+CiAgICAgICAgICAgIDwvdGFyZ2V0PgogCiAgICAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkgICAgIDxnbGFzc2Zpc2gtZW1iZWRkZWQtdW5kZXBsb3kgbmFtZT0id3NjbGllbnQiIC8+CisgICAgICAgICA8Z2xhc3NmaXNoLWVtYmVkZGVkLXVuZGVwbG95IG5hbWU9IndzY2xpZW50IiAvPgogICAgICAgICAgPC90YXJnZXQ+CiAKICAgICAgICA8dGFyZ2V0ICBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0idW5kZXBsb3ktd2FyMSx1bmRlcGxveS1jbGllbnQiLz4KLSAgICAKKwogICAgICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VtYmVkZGVkL2NvbmZpZy9wcm9wZXJ0aWVzLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lbWJlZGRlZC9jb25maWcvcHJvcGVydGllcy13ZWIueG1sCmluZGV4IDFlMDViYmQuLmUwOTAyODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VtYmVkZGVkL2NvbmZpZy9wcm9wZXJ0aWVzLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZW1iZWRkZWQvY29uZmlnL3Byb3BlcnRpZXMtd2ViLnhtbApAQCAtMjIsMTAgKzIyLDEwIEBACiAKIDx0YXJnZXQgbmFtZT0iaW5pdC1jb21tb24iIGRlcGVuZHM9InNldFRvb2xQcm9wZXJ0eSwgc3RhcnQtc2VydmVyLWVtYmVkZGVkLXdpdGgtd2ViLWphciI+CiA8IS0tIEFwcHNlcnZlciBzZXR1cCBwcm9wZXJ0aWVzIC0tPgotPGVjaG8gbWVzc2FnZT0iTG9hZGluZyBwcm9wcyBmcm9tIGZpbGUgJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzIiAKKzxlY2hvIG1lc3NhZ2U9IkxvYWRpbmcgcHJvcHMgZnJvbSBmaWxlICR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcyIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgPHByb3BlcnR5IG5hbWU9InBlIiB2YWx1ZT0iUGxhdGZvcm0gRWRpdGlvbiBvZiBTMUFTIi8+Ci0gICA8cHJvcGVydHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzIi8+ICAgCisgICA8cHJvcGVydHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzIi8+CiAgICA8ZWNobyBtZXNzYWdlPSJhZG1pbi5kb21haW4gJHthZG1pbi5kb21haW59IiBsZXZlbD0idmVyYm9zZSIvPgogICAgPGVjaG8gbWVzc2FnZT0iYWRtaW4udXNlciAke2FkbWluLnVzZXJ9IiBsZXZlbD0idmVyYm9zZSIvPgogICAgPGVjaG8gbWVzc2FnZT0iYWRtaW4ucG9ydCAke2FkbWluLnBvcnR9IiBsZXZlbD0idmVyYm9zZSIvPgpAQCAtNzAsMjEgKzcwLDIxIEBACiAgICAgPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iIiAvPgogCiAgICAgPCEtLSBUZXN0IEhhcm5lcyBwcm9wZXJ0aWVzIC0tPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZC5iYXNlLmRpciIgCisgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkLmJhc2UuZGlyIgogICAgICAgICB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZSIvPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZC53ZWJhcHBzLmRpciIgCisgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkLndlYmFwcHMuZGlyIgogICAgICAgICB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL3dhcnMiLz4KLSAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIAorICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIKICAgICAgICAgdmFsdWU9IiR7YnVpbGQuYmFzZS5kaXJ9L2NsYXNzZXMiLz4KLSAgICA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUuZGlyIiAKKyAgICA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUuZGlyIgogICAgICAgICB2YWx1ZT0iJHtidWlsZC5iYXNlLmRpcn0vYXJjaGl2ZSIvPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXN1bHRzLmRpciIgCisgICAgPHByb3BlcnR5IG5hbWU9InJlc3VsdHMuZGlyIgogICAgICAgICB2YWx1ZT0iJHtidWlsZC5iYXNlLmRpcn0vcmVzdWx0cyIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJzMWFzdGVzdC5jbGFzc3BhdGgiCiAgICAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtkYi5jbGFzc3BhdGh9OiR7RGVyYnkuY2xhc3NwYXRofSIvPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgPHByb3BlcnR5IG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgdmFsdWU9IioqLypMb2NhbCouY2xhc3MsKiovKlJlbW90ZSouY2xhc3MsKiovKkhvbWUqLmNsYXNzLCoqLypCZWFuKi5jbGFzcyIgLz4KLSAgICA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgIHZhbHVlPSIqKi8qTG9jYWwqLmNsYXNzLCoqLypIb21lKi5jbGFzcywqKi8qUmVtb3RlKi5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgPHByb3BlcnR5IG5hbWU9IndlYmNsaWVudC53YXIuZmlsZXMiCiAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KQEAgLTExNywxNSArMTE3LDE1IEBACiAgICAgPHByb3BlcnR5IG5hbWU9ImNlcnQubmlja25hbWUiIHZhbHVlPSJzMWFzIi8+CiA8L3RhcmdldD4KIAotPHRhcmdldCBuYW1lPSJzZXRUb29sUHJvcGVydHkiIAorPHRhcmdldCBuYW1lPSJzZXRUb29sUHJvcGVydHkiCiAgIGRlcGVuZHM9InNldE9TQ29uZGl0aW9ucyxzZXRUb29sV2luLHNldFRvb2xVbml4Ij4KIDwvdGFyZ2V0PgogCiAgICAgPCEtLQotICAgIFRoaXMgd2FzIG5lZWRlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBjYW4gCi0gICAgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIC5leGUvLmJhdCBmb3Igd2luZG93cyBhbmQgLnNoIGZvciBzb2xhcmlzLiAKKyAgICBUaGlzIHdhcyBuZWVkZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgY2FuCisgICAgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIC5leGUvLmJhdCBmb3Igd2luZG93cyBhbmQgLnNoIGZvciBzb2xhcmlzLgogICAgIC0tPgotPHRhcmdldCBuYW1lPSJzZXRPU0NvbmRpdGlvbnMiPiAgCis8dGFyZ2V0IG5hbWU9InNldE9TQ29uZGl0aW9ucyI+CiAgIDxjb25kaXRpb24gcHJvcGVydHk9ImlzVW5peCI+CiAgICAgPG9zIGZhbWlseT0idW5peCIvPgogICA8L2NvbmRpdGlvbj4KQEAgLTEzNSwxOCArMTM1LDE4IEBACiAgIDwvY29uZGl0aW9uPgogPC90YXJnZXQ+CiAKLTx0YXJnZXQgbmFtZT0ic2V0VG9vbFdpbiIgaWY9ImlzV2luZG93cyI+ICAKKzx0YXJnZXQgbmFtZT0ic2V0VG9vbFdpbiIgaWY9ImlzV2luZG93cyI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJBUFBDTElFTlQiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hcHBjbGllbnQuYmF0Ii8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJBU0FETUlOIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXNhZG1pbi5iYXQiLz4KICAgPCEtLTxwcm9wZXJ0eSBuYW1lPSJBU0FETUlOIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXNhZG1pbiIvPi0tPgogICA8cHJvcGVydHkgbmFtZT0iQVNBTlQiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hc2FudC5iYXQiLz4KLSAgPHByb3BlcnR5IG5hbWU9IkNBUFRVUkVTQ0hFTUEiIAorICA8cHJvcGVydHkgbmFtZT0iQ0FQVFVSRVNDSEVNQSIKICAgICAgIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9jYXB0dXJlLXNjaGVtYS5iYXQiLz4KICAgPHByb3BlcnR5IG5hbWU9IkNIRUNLUEFUQ0giIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9jaGVja3BhdGNoLmJhdCIvPgogICA8cHJvcGVydHkgbmFtZT0iSU5TVEFMTFBBVENIIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vaW5zdGFsbHBhdGNoLmJhdCIvPgogICA8cHJvcGVydHkgbmFtZT0iSlNQQyIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2pzcGMuYmF0Ii8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJMSVNUUEFUQ0giIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9saXN0cGF0Y2guYmF0Ii8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJQQUNLQUdFLUFQUENMSUVOVCIgCisgIDxwcm9wZXJ0eSBuYW1lPSJQQUNLQUdFLUFQUENMSUVOVCIKICAgICAgIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9wYWNrYWdlLWFwcGNsaWVudC5iYXQiLz4KICAgPHByb3BlcnR5IG5hbWU9IlZFUklGSUVSIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vdmVyaWZpZXIuYmF0Ii8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJSTUlDIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9qZGsvYmluL3JtaWMuZXhlIi8+CkBAIC0xNTQsMTUgKzE1NCwxNSBAQAogCiAgIDxwcm9wZXJ0eSBuYW1lPSJXU0NPTVBJTEUiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi93c2NvbXBpbGUuYmF0Ii8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJXU0lNUE9SVCIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzaW1wb3J0LmJhdCIvPgotICA8cHJvcGVydHkgbmFtZT0icGIuc3RhcnQuc2VydmVyIiAKKyAgPHByb3BlcnR5IG5hbWU9InBiLnN0YXJ0LnNlcnZlciIKICAgICAgIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L3BvaW50YmFzZS9zZXJ2ZXIvU3RhcnRTZXJ2ZXIuYmF0Ii8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJwYi5zdGFydC5zZXJ2ZXIxIiAKKyAgPHByb3BlcnR5IG5hbWU9InBiLnN0YXJ0LnNlcnZlcjEiCiAgICAgICB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9wb2ludGJhc2Uvc2VydmVyL1N0YXJ0U2VydmVyMS5iYXQiLz4KICAgPHByb3BlcnR5IG5hbWU9IklNUURCTUdSIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9pbXEvYmluL2ltcWRibWdyLmJhdCIvPgogIDxwcm9wZXJ0eSBuYW1lPSJsZC5saWJyYXJ5LnBhdGgiIGxvY2F0aW9uPSIke2Vudi5TMUFTX0hPTUV9L2xpYjske2Vudi5TMUFTX0hPTUV9L2JpbiIvPgogPC90YXJnZXQ+CiAKLTx0YXJnZXQgbmFtZT0ic2V0VG9vbFVuaXgiIGlmPSJpc1VuaXgiPiAgCis8dGFyZ2V0IG5hbWU9InNldFRvb2xVbml4IiBpZj0iaXNVbml4Ij4KICAgPHByb3BlcnR5IG5hbWU9IkFQUENMSUVOVCIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2FwcGNsaWVudCIvPgogICA8cHJvcGVydHkgbmFtZT0iQVNBRE1JTiIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2FzYWRtaW4iLz4KICAgPHByb3BlcnR5IG5hbWU9IkFTQU5UIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXNhbnQiLz4KQEAgLTE3MSwyMyArMTcxLDIzIEBACiAgIDxwcm9wZXJ0eSBuYW1lPSJJTlNUQUxMUEFUQ0giIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9pbnN0YWxscGF0Y2giLz4KICAgPHByb3BlcnR5IG5hbWU9IkpTUEMiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9qc3BjIi8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJMSVNUUEFUQ0giIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9saXN0cGF0Y2giLz4KLSAgPHByb3BlcnR5IG5hbWU9IlBBQ0tBR0UtQVBQQ0xJRU5UIiAKKyAgPHByb3BlcnR5IG5hbWU9IlBBQ0tBR0UtQVBQQ0xJRU5UIgogICAgICAgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3BhY2thZ2UtYXBwY2xpZW50Ii8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJWRVJJRklFUiIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3ZlcmlmaWVyIi8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJSTUlDIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9qZGsvYmluL3JtaWMiLz4KICAgPHByb3BlcnR5IG5hbWU9IlROQU1FU0VSViIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vamRrL2Jpbi90bmFtZXNlcnYiLz4KICAgPHByb3BlcnR5IG5hbWU9IldTQ09NUElMRSIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzY29tcGlsZSIvPgogICA8cHJvcGVydHkgbmFtZT0iV1NJTVBPUlQiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi93c2ltcG9ydCIvPgotICA8cHJvcGVydHkgbmFtZT0icGIuc3RhcnQuc2VydmVyIiAKKyAgPHByb3BlcnR5IG5hbWU9InBiLnN0YXJ0LnNlcnZlciIKICAgICAgIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L3BvaW50YmFzZS9zZXJ2ZXIvU3RhcnRTZXJ2ZXIiLz4KLSAgPHByb3BlcnR5IG5hbWU9InBiLnN0YXJ0LnNlcnZlcjEiIAorICA8cHJvcGVydHkgbmFtZT0icGIuc3RhcnQuc2VydmVyMSIKICAgICAgIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L3BvaW50YmFzZS9zZXJ2ZXIvU3RhcnRTZXJ2ZXIxIi8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJJTVFEQk1HUiIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vaW1xL2Jpbi9pbXFkYm1nciIvPgogIDxwcm9wZXJ0eSBuYW1lPSJsZC5saWJyYXJ5LnBhdGgiIGxvY2F0aW9uPSIke2Vudi5TMUFTX0hPTUV9L2xpYjoke2Vudi5TMUFTX0hPTUV9L2JpbiIvPgogPC90YXJnZXQ+CiAKIDwhLS0KLXRoZSBmaXhGaWxlcyB0YXJnZXQgcmVtb3ZlcyBhbGwgXk0gY2hhcmVjdGFycyBmcm9tIHRoZSBlbmQgb2YgCit0aGUgZml4RmlsZXMgdGFyZ2V0IHJlbW92ZXMgYWxsIF5NIGNoYXJlY3RhcnMgZnJvbSB0aGUgZW5kIG9mCiBsaW5lcyBvZiBNQU5JRkVTVC5NRiBmaWxlcyBzaW5jZSB0aGV5IGFyZSB2ZXJ5IHNlbnNpdGl2ZSB0byBpdC4KIC0tPgogPHRhcmdldCBuYW1lPSJmaXhGaWxlcyIgZGVwZW5kcz0ic2V0T1NDb25kaXRpb25zIiA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lbWJlZGRlZC9jb25maWcvcHJvcGVydGllcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lbWJlZGRlZC9jb25maWcvcHJvcGVydGllcy54bWwKaW5kZXggY2NiMDkzZi4uOGY0ZTU2ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZW1iZWRkZWQvY29uZmlnL3Byb3BlcnRpZXMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VtYmVkZGVkL2NvbmZpZy9wcm9wZXJ0aWVzLnhtbApAQCAtMjIsMTAgKzIyLDEwIEBACiAKIDx0YXJnZXQgbmFtZT0iaW5pdC1jb21tb24iIGRlcGVuZHM9InNldFRvb2xQcm9wZXJ0eSxzdGFydC1zZXJ2ZXItZW1iZWRkZWQtd2l0aC1zdGF0aWMtc2hlbGwsIHN0YXJ0LXNlcnZlci1lbWJlZGRlZC13aXRoLXViZXItamFyIj4KIDwhLS0gQXBwc2VydmVyIHNldHVwIHByb3BlcnRpZXMgLS0+Ci08ZWNobyBtZXNzYWdlPSJMb2FkaW5nIHByb3BzIGZyb20gZmlsZSAke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiIAorPGVjaG8gbWVzc2FnZT0iTG9hZGluZyBwcm9wcyBmcm9tIGZpbGUgJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzIgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgICA8cHJvcGVydHkgbmFtZT0icGUiIHZhbHVlPSJQbGF0Zm9ybSBFZGl0aW9uIG9mIFMxQVMiLz4KLSAgIDxwcm9wZXJ0eSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiLz4gICAKKyAgIDxwcm9wZXJ0eSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiLz4KICAgIDxlY2hvIG1lc3NhZ2U9ImFkbWluLmRvbWFpbiAke2FkbWluLmRvbWFpbn0iIGxldmVsPSJ2ZXJib3NlIi8+CiAgICA8ZWNobyBtZXNzYWdlPSJhZG1pbi51c2VyICR7YWRtaW4udXNlcn0iIGxldmVsPSJ2ZXJib3NlIi8+CiAgICA8ZWNobyBtZXNzYWdlPSJhZG1pbi5wb3J0ICR7YWRtaW4ucG9ydH0iIGxldmVsPSJ2ZXJib3NlIi8+CkBAIC03MCwyMSArNzAsMjEgQEAKICAgICA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIiIC8+CiAKICAgICA8IS0tIFRlc3QgSGFybmVzIHByb3BlcnRpZXMgLS0+Ci0gICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkLmJhc2UuZGlyIiAKKyAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQuYmFzZS5kaXIiCiAgICAgICAgIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlIi8+Ci0gICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkLndlYmFwcHMuZGlyIiAKKyAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQud2ViYXBwcy5kaXIiCiAgICAgICAgIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvd2FycyIvPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgCisgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIgogICAgICAgICB2YWx1ZT0iJHtidWlsZC5iYXNlLmRpcn0vY2xhc3NlcyIvPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZS5kaXIiIAorICAgIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZS5kaXIiCiAgICAgICAgIHZhbHVlPSIke2J1aWxkLmJhc2UuZGlyfS9hcmNoaXZlIi8+Ci0gICAgPHByb3BlcnR5IG5hbWU9InJlc3VsdHMuZGlyIiAKKyAgICA8cHJvcGVydHkgbmFtZT0icmVzdWx0cy5kaXIiCiAgICAgICAgIHZhbHVlPSIke2J1aWxkLmJhc2UuZGlyfS9yZXN1bHRzIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9InMxYXN0ZXN0LmNsYXNzcGF0aCIKICAgICAgIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2RiLmNsYXNzcGF0aH06JHtEZXJieS5jbGFzc3BhdGh9Ii8+Ci0gICAgPHByb3BlcnR5IG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICA8cHJvcGVydHkgbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICB2YWx1ZT0iKiovKkxvY2FsKi5jbGFzcywqKi8qUmVtb3RlKi5jbGFzcywqKi8qSG9tZSouY2xhc3MsKiovKkJlYW4qLmNsYXNzIiAvPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgdmFsdWU9IioqLypMb2NhbCouY2xhc3MsKiovKkhvbWUqLmNsYXNzLCoqLypSZW1vdGUqLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICA8cHJvcGVydHkgbmFtZT0id2ViY2xpZW50Lndhci5maWxlcyIKICAgIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgpAQCAtMTE3LDE1ICsxMTcsMTUgQEAKICAgICA8cHJvcGVydHkgbmFtZT0iY2VydC5uaWNrbmFtZSIgdmFsdWU9InMxYXMiLz4KIDwvdGFyZ2V0PgogCi08dGFyZ2V0IG5hbWU9InNldFRvb2xQcm9wZXJ0eSIgCis8dGFyZ2V0IG5hbWU9InNldFRvb2xQcm9wZXJ0eSIKICAgZGVwZW5kcz0ic2V0T1NDb25kaXRpb25zLHNldFRvb2xXaW4sc2V0VG9vbFVuaXgiPgogPC90YXJnZXQ+CiAKICAgICA8IS0tCi0gICAgVGhpcyB3YXMgbmVlZGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiAKLSAgICBkaWZmZXJlbnRpYXRlIGJldHdlZW4gLmV4ZS8uYmF0IGZvciB3aW5kb3dzIGFuZCAuc2ggZm9yIHNvbGFyaXMuIAorICAgIFRoaXMgd2FzIG5lZWRlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBjYW4KKyAgICBkaWZmZXJlbnRpYXRlIGJldHdlZW4gLmV4ZS8uYmF0IGZvciB3aW5kb3dzIGFuZCAuc2ggZm9yIHNvbGFyaXMuCiAgICAgLS0+Ci08dGFyZ2V0IG5hbWU9InNldE9TQ29uZGl0aW9ucyI+ICAKKzx0YXJnZXQgbmFtZT0ic2V0T1NDb25kaXRpb25zIj4KICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0iaXNVbml4Ij4KICAgICA8b3MgZmFtaWx5PSJ1bml4Ii8+CiAgIDwvY29uZGl0aW9uPgpAQCAtMTM1LDE4ICsxMzUsMTggQEAKICAgPC9jb25kaXRpb24+CiA8L3RhcmdldD4KIAotPHRhcmdldCBuYW1lPSJzZXRUb29sV2luIiBpZj0iaXNXaW5kb3dzIj4gIAorPHRhcmdldCBuYW1lPSJzZXRUb29sV2luIiBpZj0iaXNXaW5kb3dzIj4KICAgPHByb3BlcnR5IG5hbWU9IkFQUENMSUVOVCIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2FwcGNsaWVudC5iYXQiLz4KICAgPHByb3BlcnR5IG5hbWU9IkFTQURNSU4iIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hc2FkbWluLmJhdCIvPgogICA8IS0tPHByb3BlcnR5IG5hbWU9IkFTQURNSU4iIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hc2FkbWluIi8+LS0+CiAgIDxwcm9wZXJ0eSBuYW1lPSJBU0FOVCIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2FzYW50LmJhdCIvPgotICA8cHJvcGVydHkgbmFtZT0iQ0FQVFVSRVNDSEVNQSIgCisgIDxwcm9wZXJ0eSBuYW1lPSJDQVBUVVJFU0NIRU1BIgogICAgICAgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2NhcHR1cmUtc2NoZW1hLmJhdCIvPgogICA8cHJvcGVydHkgbmFtZT0iQ0hFQ0tQQVRDSCIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2NoZWNrcGF0Y2guYmF0Ii8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJJTlNUQUxMUEFUQ0giIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9pbnN0YWxscGF0Y2guYmF0Ii8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJKU1BDIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vanNwYy5iYXQiLz4KICAgPHByb3BlcnR5IG5hbWU9IkxJU1RQQVRDSCIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2xpc3RwYXRjaC5iYXQiLz4KLSAgPHByb3BlcnR5IG5hbWU9IlBBQ0tBR0UtQVBQQ0xJRU5UIiAKKyAgPHByb3BlcnR5IG5hbWU9IlBBQ0tBR0UtQVBQQ0xJRU5UIgogICAgICAgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3BhY2thZ2UtYXBwY2xpZW50LmJhdCIvPgogICA8cHJvcGVydHkgbmFtZT0iVkVSSUZJRVIiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi92ZXJpZmllci5iYXQiLz4KICAgPHByb3BlcnR5IG5hbWU9IlJNSUMiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2pkay9iaW4vcm1pYy5leGUiLz4KQEAgLTE1NCwxNSArMTU0LDE1IEBACiAKICAgPHByb3BlcnR5IG5hbWU9IldTQ09NUElMRSIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzY29tcGlsZS5iYXQiLz4KICAgPHByb3BlcnR5IG5hbWU9IldTSU1QT1JUIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3NpbXBvcnQuYmF0Ii8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJwYi5zdGFydC5zZXJ2ZXIiIAorICA8cHJvcGVydHkgbmFtZT0icGIuc3RhcnQuc2VydmVyIgogICAgICAgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vcG9pbnRiYXNlL3NlcnZlci9TdGFydFNlcnZlci5iYXQiLz4KLSAgPHByb3BlcnR5IG5hbWU9InBiLnN0YXJ0LnNlcnZlcjEiIAorICA8cHJvcGVydHkgbmFtZT0icGIuc3RhcnQuc2VydmVyMSIKICAgICAgIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L3BvaW50YmFzZS9zZXJ2ZXIvU3RhcnRTZXJ2ZXIxLmJhdCIvPgogICA8cHJvcGVydHkgbmFtZT0iSU1RREJNR1IiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2ltcS9iaW4vaW1xZGJtZ3IuYmF0Ii8+CiAgPHByb3BlcnR5IG5hbWU9ImxkLmxpYnJhcnkucGF0aCIgbG9jYXRpb249IiR7ZW52LlMxQVNfSE9NRX0vbGliOyR7ZW52LlMxQVNfSE9NRX0vYmluIi8+CiA8L3RhcmdldD4KIAotPHRhcmdldCBuYW1lPSJzZXRUb29sVW5peCIgaWY9ImlzVW5peCI+ICAKKzx0YXJnZXQgbmFtZT0ic2V0VG9vbFVuaXgiIGlmPSJpc1VuaXgiPgogICA8cHJvcGVydHkgbmFtZT0iQVBQQ0xJRU5UIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXBwY2xpZW50Ii8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJBU0FETUlOIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXNhZG1pbiIvPgogICA8cHJvcGVydHkgbmFtZT0iQVNBTlQiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hc2FudCIvPgpAQCAtMTcxLDIzICsxNzEsMjMgQEAKICAgPHByb3BlcnR5IG5hbWU9IklOU1RBTExQQVRDSCIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2luc3RhbGxwYXRjaCIvPgogICA8cHJvcGVydHkgbmFtZT0iSlNQQyIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2pzcGMiLz4KICAgPHByb3BlcnR5IG5hbWU9IkxJU1RQQVRDSCIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2xpc3RwYXRjaCIvPgotICA8cHJvcGVydHkgbmFtZT0iUEFDS0FHRS1BUFBDTElFTlQiIAorICA8cHJvcGVydHkgbmFtZT0iUEFDS0FHRS1BUFBDTElFTlQiCiAgICAgICB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vcGFja2FnZS1hcHBjbGllbnQiLz4KICAgPHByb3BlcnR5IG5hbWU9IlZFUklGSUVSIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vdmVyaWZpZXIiLz4KICAgPHByb3BlcnR5IG5hbWU9IlJNSUMiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2pkay9iaW4vcm1pYyIvPgogICA8cHJvcGVydHkgbmFtZT0iVE5BTUVTRVJWIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9qZGsvYmluL3RuYW1lc2VydiIvPgogICA8cHJvcGVydHkgbmFtZT0iV1NDT01QSUxFIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3Njb21waWxlIi8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJXU0lNUE9SVCIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzaW1wb3J0Ii8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJwYi5zdGFydC5zZXJ2ZXIiIAorICA8cHJvcGVydHkgbmFtZT0icGIuc3RhcnQuc2VydmVyIgogICAgICAgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vcG9pbnRiYXNlL3NlcnZlci9TdGFydFNlcnZlciIvPgotICA8cHJvcGVydHkgbmFtZT0icGIuc3RhcnQuc2VydmVyMSIgCisgIDxwcm9wZXJ0eSBuYW1lPSJwYi5zdGFydC5zZXJ2ZXIxIgogICAgICAgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vcG9pbnRiYXNlL3NlcnZlci9TdGFydFNlcnZlcjEiLz4KICAgPHByb3BlcnR5IG5hbWU9IklNUURCTUdSIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9pbXEvYmluL2ltcWRibWdyIi8+CiAgPHByb3BlcnR5IG5hbWU9ImxkLmxpYnJhcnkucGF0aCIgbG9jYXRpb249IiR7ZW52LlMxQVNfSE9NRX0vbGliOiR7ZW52LlMxQVNfSE9NRX0vYmluIi8+CiA8L3RhcmdldD4KIAogPCEtLQotdGhlIGZpeEZpbGVzIHRhcmdldCByZW1vdmVzIGFsbCBeTSBjaGFyZWN0YXJzIGZyb20gdGhlIGVuZCBvZiAKK3RoZSBmaXhGaWxlcyB0YXJnZXQgcmVtb3ZlcyBhbGwgXk0gY2hhcmVjdGFycyBmcm9tIHRoZSBlbmQgb2YKIGxpbmVzIG9mIE1BTklGRVNULk1GIGZpbGVzIHNpbmNlIHRoZXkgYXJlIHZlcnkgc2Vuc2l0aXZlIHRvIGl0LgogLS0+CiA8dGFyZ2V0IG5hbWU9ImZpeEZpbGVzIiBkZXBlbmRzPSJzZXRPU0NvbmRpdGlvbnMiID4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VtYmVkZGVkL2NvbmZpZy9ydW4td2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VtYmVkZGVkL2NvbmZpZy9ydW4td2ViLnhtbAppbmRleCAzYmNiOWUyLi5kYWIyMGQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lbWJlZGRlZC9jb25maWcvcnVuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZW1iZWRkZWQvY29uZmlnL3J1bi13ZWIueG1sCkBAIC0zMywxMCArMzMsMTAgQEAKICAgICAgICAgICAgICAgICA8L29yPgogICAgICAgICAgICAgPC93YWl0Zm9yPgogICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSIke3RhcmdldC10by1ydW59Ii8+Ci0JICAgIDxhbnRjYWxsIHRhcmdldD0icmVwb3J0Ii8+Ci0JICAgIDxhbnRjYWxsIHRhcmdldD0ibWFpbCIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlcG9ydCIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9Im1haWwiLz4KIDwhLS0KLQkgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wQVMiLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wQVMiLz4KIC0tPgogICAgICAgICA8L3NlcXVlbnRpYWw+CiAgICAgPC9wYXJhbGxlbD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VtYmVkZGVkL2NvbmZpZy9ydW4ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZW1iZWRkZWQvY29uZmlnL3J1bi54bWwKaW5kZXggMDczZGYxMS4uYzYzY2I1OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZW1iZWRkZWQvY29uZmlnL3J1bi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZW1iZWRkZWQvY29uZmlnL3J1bi54bWwKQEAgLTMzLDEwICszMywxMCBAQAogICAgICAgICAgICAgICAgIDwvb3I+CiAgICAgICAgICAgICA8L3dhaXRmb3I+CiAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IiR7dGFyZ2V0LXRvLXJ1bn0iLz4KLQkgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXBvcnQiLz4KLQkgICAgPGFudGNhbGwgdGFyZ2V0PSJtYWlsIi8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVwb3J0Ii8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibWFpbCIvPgogPCEtLQotCSAgICA8YW50Y2FsbCB0YXJnZXQ9InN0b3BBUyIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0b3BBUyIvPgogLS0+CiAgICAgICAgIDwvc2VxdWVudGlhbD4KICAgICA8L3BhcmFsbGVsPgpAQCAtNjYsMTAgKzY2LDEwIEBACiAgICAgPGVjaG8+ID09PSBFTUJFRERFRCBTVEFSVElORyA9PT0gPC9lY2hvPgogICAgIDxnbGFzc2Zpc2gtZW1iZWRkZWQtc3RhcnQvPgogPCEtLQotICAgIDxnbGFzc2Zpc2gtZW1iZWRkZWQtc3RhcnQxPiAKLQkJaW5zdGFuY2VSb290PSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMSIKLQkJaW5zdGFsbFJvb3Q9IiR7ZW52LlMxQVNfSE9NRX0iCi0JCWNvbmZpZ0ZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2NvbmZpZy9kb21haW4ueG1sIi8+CisgICAgPGdsYXNzZmlzaC1lbWJlZGRlZC1zdGFydDE+CisgICAgICAgIGluc3RhbmNlUm9vdD0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEiCisgICAgICAgIGluc3RhbGxSb290PSIke2Vudi5TMUFTX0hPTUV9IgorICAgICAgICBjb25maWdGaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9jb25maWcvZG9tYWluLnhtbCIvPgogICAgIDwvZ2xhc3NmaXNoLWVtYmVkZGVkLXN0YXJ0MT4KIC0tPgogIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZW1iZWRkZWQvc3RhbmRhbG9uZXdhci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZW1iZWRkZWQvc3RhbmRhbG9uZXdhci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDEyZWY0YmEuLjIxNGM2MmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VtYmVkZGVkL3N0YW5kYWxvbmV3YXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lbWJlZGRlZC9zdGFuZGFsb25ld2FyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZXF1ZXN0ZGlzcGF0Y2hlciIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVxdWVzdGRpc3BhdGNoZXIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLXJlcXVlc3RkaXNwYXRjaGVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lbWJlZGRlZC9zdGFuZGFsb25ld2FyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VtYmVkZGVkL3N0YW5kYWxvbmV3YXIvYnVpbGQueG1sCmluZGV4IDQwNGM4NmMuLmNmYzc4OWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VtYmVkZGVkL3N0YW5kYWxvbmV3YXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VtYmVkZGVkL3N0YW5kYWxvbmV3YXIvYnVpbGQueG1sCkBAIC00NCw3ICs0NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGRlbGV0ZSBkaXI9Iip0bXAiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01MiwxMCArNTIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTYzLDEwICs2MywxMCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC03Niw3ICs3Niw3IEBACiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgICAgICA8Z2xhc3NmaXNoLWVtYmVkZGVkLWRlcGxveSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIiBmb3JjZT0iJHtmb3JjZX0iIG5hbWU9IiR7YXBwbmFtZX0iIGNvbnRleHRSb290PSIke2NvbnRleHRyb290fSIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTkwLDExICs5MCwxMSBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iY2xvYmJlciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKLSAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VtYmVkZGVkL3N0YW5kYWxvbmV3YXIvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZW1iZWRkZWQvc3RhbmRhbG9uZXdhci9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZjk4NjFkZi4uMWY4NGNlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZW1iZWRkZWQvc3RhbmRhbG9uZXdhci9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZW1iZWRkZWQvc3RhbmRhbG9uZXdhci9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDM3ICsyMiwzNyBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPGZpbHRlcj4KICAgICAgICAgPGZpbHRlci1uYW1lPkZpbHRlclRlc3Q8L2ZpbHRlci1uYW1lPgogICAgICAgICA8ZmlsdGVyLWNsYXNzPnRlc3QuRmlsdGVyVGVzdDwvZmlsdGVyLWNsYXNzPgotICAgIDwvZmlsdGVyPiAgICAKLSAgICAgICAgCisgICAgPC9maWx0ZXI+CisKICAgICA8ZmlsdGVyLW1hcHBpbmc+CiAgICAgICAgIDxmaWx0ZXItbmFtZT5GaWx0ZXJUZXN0PC9maWx0ZXItbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KICAgICAgICAgPGRpc3BhdGNoZXI+UkVRVUVTVDwvZGlzcGF0Y2hlcj4KICAgICAgICAgPGRpc3BhdGNoZXI+SU5DTFVERTwvZGlzcGF0Y2hlcj4KLSAgICAgICAgPGRpc3BhdGNoZXI+Rk9SV0FSRDwvZGlzcGF0Y2hlcj4gIAotICAgICAgICA8ZGlzcGF0Y2hlcj5FUlJPUjwvZGlzcGF0Y2hlcj4gCisgICAgICAgIDxkaXNwYXRjaGVyPkZPUldBUkQ8L2Rpc3BhdGNoZXI+CisgICAgICAgIDxkaXNwYXRjaGVyPkVSUk9SPC9kaXNwYXRjaGVyPgogICAgIDwvZmlsdGVyLW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0MjwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mjwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0Mjwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3QzPC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QzPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3QzPC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDM8L3VybC1wYXR0ZXJuPgogICAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlc3Npb24tY29uZmlnPgogICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjEwPC9zZXNzaW9uLXRpbWVvdXQ+CiAgICAgPC9zZXNzaW9uLWNvbmZpZz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VtYmVkZGVkL3N0YW5kYWxvbmV3YXIvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lbWJlZGRlZC9zdGFuZGFsb25ld2FyL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhCmluZGV4IGZjZjM2MjQuLmVlYzk1N2UgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VtYmVkZGVkL3N0YW5kYWxvbmV3YXIvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZW1iZWRkZWQvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQpAQCAtMTksMjUgKzE5LDI1IEBACiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIHB1YmxpYyBjbGFzcyBGaWx0ZXJUZXN0IGltcGxlbWVudHMgRmlsdGVyewotICAgIAorCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmRlc3Ryb3ldIik7Ci0gICAgfSAgICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIEZpbHRlckNoYWluIGZpbHRlckNoYWluKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuZG9GaWx0ZXJdIik7Ci0gICAgICAgICAgCisKICAgICAgICAgKChIdHRwU2VydmxldFJlcXVlc3QpcmVxdWVzdCkuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIlBBU1MiKTsKICAgICAgICAgZmlsdGVyQ2hhaW4uZG9GaWx0ZXIocmVxdWVzdCwgcmVzcG9uc2UpOwotICAgICAgICAKLSAgICB9ICAgIAotICAgIAotICAgIAorCisgICAgfQorCisKICAgICBwdWJsaWMgdm9pZCBpbml0KGpha2FydGEuc2VydmxldC5GaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGZpbHRlckNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZW1iZWRkZWQvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lbWJlZGRlZC9zdGFuZGFsb25ld2FyL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCBkNGEzMTc0Li5kYWE4MDUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lbWJlZGRlZC9zdGFuZGFsb25ld2FyL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lbWJlZGRlZC9zdGFuZGFsb25ld2FyL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtNDYsMTMgKzQ2LDEzIEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCBpbXBsZW1lbnRzIEh0dHBTZXNzaW9uTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7CiAgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSAiICsgY29udGV4dC5nZXRNYWpvclZlcnNpb24oKSk7Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CkBAIC02MCwyMyArNjAsMjMgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUi1SRVFVRVNUIiwgcmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVIiKSk7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIkZBSUwiKTsgICAgICAgIAotICAgICAgICAJCisgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIkZBSUwiKTsKKwogICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciByZCA9IGNvbnRleHQuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9TZXJ2bGV0VGVzdDIiKTsKLSAgICAgICAgcmQuZm9yd2FyZChyZXF1ZXN0LCByZXNwb25zZSk7ICAgICAgIAorICAgICAgICByZC5mb3J3YXJkKHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uQ3JlYXRlZF0iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uRGVzdHJveWVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25EZXN0cm95ZWRdIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXR0cmlidXRlczogIiArIGh0dHBTZXNzaW9uRXZlbnQuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgidGVzdCIpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VtYmVkZGVkL3N0YW5kYWxvbmV3YXIvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VtYmVkZGVkL3N0YW5kYWxvbmV3YXIvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YQppbmRleCBkYjJjYjUwLi4wMDc3NWE2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lbWJlZGRlZC9zdGFuZGFsb25ld2FyL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZW1iZWRkZWQvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCkBAIC0yNSwxMCArMjUsMTAgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdDIgZXh0ZW5kcyBIdHRwU2VydmxldCBpbXBsZW1lbnRzIEh0dHBTZXNzaW9uTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQyLmluaXRdIik7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDIuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgIH0KIApAQCAtMzcsMjMgKzM3LDIzIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0Mi5kb1Bvc3RdIik7Ci0gICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUi1GT1JXQVJEIixyZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUiIpKTsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiRkFJTCIpOyAgICAgICAgCi0gICAgICAgIAorICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7CisKICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmQgPSByZXF1ZXN0LmdldFJlcXVlc3REaXNwYXRjaGVyKCIvU2VydmxldFRlc3QzIik7Ci0gICAgICAgIHJkLmluY2x1ZGUocmVxdWVzdCwgcmVzcG9uc2UpOyAgICAgCisgICAgICAgIHJkLmluY2x1ZGUocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KLSAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25DcmVhdGVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25DcmVhdGVkXSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25EZXN0cm95ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkRlc3Ryb3llZF0iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdHRyaWJ1dGVzOiAiICsgaHR0cFNlc3Npb25FdmVudC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJ0ZXN0IikpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZW1iZWRkZWQvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZW1iZWRkZWQvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhCmluZGV4IDNlOGQyNWIuLmU3OGZlYzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VtYmVkZGVkL3N0YW5kYWxvbmV3YXIvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lbWJlZGRlZC9zdGFuZGFsb25ld2FyL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEKQEAgLTQ2LDExICs0NiwxMSBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0MyBleHRlbmRzIEh0dHBTZXJ2bGV0ewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQzLmluaXRdIik7ICAgICAgICAKLSAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOyAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQzLmluaXRdIik7CisgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKQEAgLTU4LDEyICs1OCwxMiBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDMuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICBvdXQucHJpbnRsbigiRklMVEVSLVJFUVVFU1Q6IiArIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSLVJFUVVFU1QiKSk7CiAgICAgICAgIG91dC5wcmludGxuKCJGSUxURVItRk9SV0FSRDoiICsgcmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVItRk9SV0FSRCIpKTsKICAgICAgICAgb3V0LnByaW50bG4oIkZJTFRFUi1JTkNMVURFOiIgKyByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUiIpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2hrMi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9oazIvYnVpbGQueG1sCmluZGV4IDYxMWEyNDUuLmYxM2NjNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2hrMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvaGsyL2J1aWxkLnhtbApAQCAtMzcsMTUgKzM3LDE1IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCI+CiAKLQk8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ0ZXN0LWFsbCIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InRlc3QtYWxsIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVwb3J0Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIj4KIAotCTxhbnRjYWxsIHRhcmdldD0ic3RhcnQtZGF0YWJhc2UiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0LWRhdGFiYXNlIi8+CiAgICAgICAgIDxhbnQgdGFyZ2V0PSJzdGFydERvbWFpbiIvPgogICAgICAgICA8YW50IHRhcmdldD0iY2xlYW4tcmVzdWx0Ii8+CiAKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iU3RvcHBpbmcgYXBwIHNlcnZlciBpbnN0YW5jZSIvPgogICAgICAgICA8YW50IHRhcmdldD0ic3RvcERvbWFpbiIvPgogCi0JPGFudGNhbGwgdGFyZ2V0PSJzdG9wLWRhdGFiYXNlIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wLWRhdGFiYXNlIi8+CiAKICAgICAgICAgPHJlY29yZCBuYW1lPSJoazIub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+CiAKQEAgLTgwLDE3ICs4MCwxNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJzdGFydC1kYXRhYmFzZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJTdGFydGluZyBkYXRhYmFzZSAtLWRicG9ydCAke2RiLnBvcnR9Ii8+Ci0JPCEtLSBzcGF3biBpcyBhZGRlZCB0byBwcmV2ZW50IGEgaGFuZyBvbiBXaW5kb3dzIC0tPgotCTxleGVjIHNwYXduPSJ0cnVlIiBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgorICAgIDwhLS0gc3Bhd24gaXMgYWRkZWQgdG8gcHJldmVudCBhIGhhbmcgb24gV2luZG93cyAtLT4KKyAgICA8ZXhlYyBzcGF3bj0idHJ1ZSIgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgICA8YXJnIGxpbmU9InN0YXJ0LWRhdGFiYXNlIC0tZGJwb3J0ICR7ZGIucG9ydH0iLz4KLQk8L2V4ZWM+CisgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzdG9wLWRhdGFiYXNlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlN0b3BwaW5nIGRhdGFiYXNlIC0tZGJwb3J0ICR7ZGIucG9ydH0iLz4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgICAgPGFyZyBsaW5lPSJzdG9wLWRhdGFiYXNlICAtLWRicG9ydCAke2RiLnBvcnR9Ii8+Ci0JPC9leGVjPgorICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LXJlc3VsdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTEyLDIzICsxMTIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiIHRlc3RzKQorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiIHRlc3RzKQogICAgICAgICAgICAgYW50IG9yYl9pbnRlZ3JhdGlvbiAoRXhlY3V0ZXMgYWxsIGVqYi1yZWxhdGVkIG9yYiBpbnRlZ3JhdGlvbiB0ZXN0cwogCi0JCQlhbnQgYWxsb3dlZG1ldGhvZHMgKEV4ZWN1dGVzIHRoZSBlamIgYWxsb3dlZG1ldGhvZHMgdGVzdHMpCi0JCQlhbnQgYm1wIChFeGVjdXRlcyB0aGUgZWpiIGJtcCB0ZXN0cykKLQkJCWFudCBlamJjIChFeGVjdXRlcyB0aGUgZWpiIGVqYmMgdGVzdHMpCi0JCQlhbnQgam1zIChFeGVjdXRlcyB0aGUgZWpiIGptcyB0ZXN0cykKLQkJCWFudCBtZGIgKEV4ZWN1dGVzIHRoZSBlamIgbWRiIHRlc3RzKQotCQkJYW50IHN0dWJzIChFeGVjdXRlcyB0aGUgZWpiIHN0dWJzIHRlc3RzKQotCQkJYW50IHRpbWVyIChFeGVjdXRlcyB0aGUgZWpiIHRpbWVyIHRlc3RzKQotCQkJYW50IHR4cHJvcCAoRXhlY3V0ZXMgdGhlIGVqYiB0eHByb3AgdGVzdHMpCi0JCQlhbnQgc2ZzYiAoRXhlY3V0ZXMgdGhlIGVqYiBzZnNiIHRlc3RzKQotCQkJYW50IHN0cmVzcyAoRXhlY3V0ZXMgdGhlIGVqYiBzdHJlc3MgdGVzdHMpCi0JCQlhbnQgZWpiMzAgKEV4ZWN1dGVzIHRoZSBlamIzMCB0ZXN0cykKLQkJCWFudCBlamIzMSAoRXhlY3V0ZXMgdGhlIGVqYjMxIHRlc3RzKQotCTwvZWNobz4KKyAgICAgICAgICAgIGFudCBhbGxvd2VkbWV0aG9kcyAoRXhlY3V0ZXMgdGhlIGVqYiBhbGxvd2VkbWV0aG9kcyB0ZXN0cykKKyAgICAgICAgICAgIGFudCBibXAgKEV4ZWN1dGVzIHRoZSBlamIgYm1wIHRlc3RzKQorICAgICAgICAgICAgYW50IGVqYmMgKEV4ZWN1dGVzIHRoZSBlamIgZWpiYyB0ZXN0cykKKyAgICAgICAgICAgIGFudCBqbXMgKEV4ZWN1dGVzIHRoZSBlamIgam1zIHRlc3RzKQorICAgICAgICAgICAgYW50IG1kYiAoRXhlY3V0ZXMgdGhlIGVqYiBtZGIgdGVzdHMpCisgICAgICAgICAgICBhbnQgc3R1YnMgKEV4ZWN1dGVzIHRoZSBlamIgc3R1YnMgdGVzdHMpCisgICAgICAgICAgICBhbnQgdGltZXIgKEV4ZWN1dGVzIHRoZSBlamIgdGltZXIgdGVzdHMpCisgICAgICAgICAgICBhbnQgdHhwcm9wIChFeGVjdXRlcyB0aGUgZWpiIHR4cHJvcCB0ZXN0cykKKyAgICAgICAgICAgIGFudCBzZnNiIChFeGVjdXRlcyB0aGUgZWpiIHNmc2IgdGVzdHMpCisgICAgICAgICAgICBhbnQgc3RyZXNzIChFeGVjdXRlcyB0aGUgZWpiIHN0cmVzcyB0ZXN0cykKKyAgICAgICAgICAgIGFudCBlamIzMCAoRXhlY3V0ZXMgdGhlIGVqYjMwIHRlc3RzKQorICAgICAgICAgICAgYW50IGVqYjMxIChFeGVjdXRlcyB0aGUgZWpiMzEgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvaGsyL2VqYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9oazIvZWpiL2J1aWxkLnhtbAppbmRleCBhZDEzNTMyLi5hYjQ0MDQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9oazIvZWpiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9oazIvZWpiL2J1aWxkLnhtbApAQCAtMzksOSArMzksOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBoazItZWpiIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGhrMi1lamIgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvaGsyL2VqYi9pc29sYXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2hrMi9lamIvaXNvbGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGJkYzhjNC4uNGJhY2M5ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvaGsyL2VqYi9pc29sYXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9oazIvZWpiL2lzb2xhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMyArMTUsMTMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImhrMi1lamItaXNvbGF0aW9uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uMS54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvaGsyL2VqYi9pc29sYXRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvaGsyL2VqYi9pc29sYXRpb24vYnVpbGQueG1sCmluZGV4IDc2YTc3NzMuLjAzMTEzOWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2hrMi9lamIvaXNvbGF0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9oazIvZWpiL2lzb2xhdGlvbi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIvb25lL3NyYy9tYWluL2phdmEiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjEsMTAgKzYxLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2hrMi9lamIvaXNvbGF0aW9uL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2hrMi9lamIvaXNvbGF0aW9uL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAxYjc3M2I3Li5hY2ViYzIxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9oazIvZWpiL2lzb2xhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvaGsyL2VqYi9pc29sYXRpb24vY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiBpbXBvcnQgY29tLm9yYWNsZS5oazJkZXZ0ZXN0Lmlzb2xhdGlvbjEuSXNvbGF0aW9uMTsKIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIEBFSkIobG9va3VwPSJqYXZhOmFwcC9lbnYvZm9yYXBwY2xpZW50IikKQEAgLTM5LDE4ICszOSwxOCBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiaGsyLWVqYi1pc29sYXRpb25JRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIGVqYiByZWYgIiArIGlzb2xhdGlvbjEpOwotICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgICAgICAvLyBPYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9mb28iKTsKIAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBtYWluIiwgc3RhdC5QQVNTKTsKQEAgLTU5LDggKzU5LDggQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pheHIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pheHIvYnVpbGQucHJvcGVydGllcwppbmRleCA5MGE3NzJlLi4xYTVmOTQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qYXhyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqYXhyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qYXhyL2J1aWxkLnhtbAppbmRleCBlZjU4ZWZlLi4wZWU3ZGI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qYXhyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qYXhyL2J1aWxkLnhtbApAQCAtMzMsNyArMzMsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iamF4ciIvPgpAQCAtNDUsOCArNDUsOCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiCkBAIC04Myw4ICs4Myw4IEBACiAgICA8L3RhcmdldD4KIAogPCEtLSA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iPgotIAk8cGFyYW0gbmFtZT0iZ2VuZXJhdGUuc3R1YnMiIHZhbHVlPSJ0cnVlIi8+CQotCTwvYW50Y2FsbD4KKyAgICAgPHBhcmFtIG5hbWU9ImdlbmVyYXRlLnN0dWJzIiB2YWx1ZT0idHJ1ZSIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KICAgICAtLT4KICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtOTksMjcgKzk5LDI3IEBACiAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJqbmRpLm5hbWUiIHZhbHVlPSJqYXhycmEiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InByb3ZpZGVyLnVybCIgdmFsdWU9Imlpb3A6Ly8ke2FkbWluLmhvc3R9OiR7b3JiLnBvcnR9Ii8+CiA8IS0tCi0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiCiAgICAgICAgICAgICB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLm5hbWluZy5TZXJpYWxJbml0Q29udGV4dEZhY3RvcnkiLz4KIC0tPgotCTxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IiAKLSAgICAgICAgICAgIAl2YWx1ZT0ib3JnLmdsYXNzZmlzaC5qbmRpLmNvc25hbWluZy5DTkN0eEZhY3RvcnkiLz4KLQk8ZWNobyBtZXNzYWdlPSJwcm92aWRlci51cmwgdXNlZCBpcyAke3Byb3ZpZGVyLnVybH0iLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIKKyAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmdsYXNzZmlzaC5qbmRpLmNvc25hbWluZy5DTkN0eEZhY3RvcnkiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJwcm92aWRlci51cmwgdXNlZCBpcyAke3Byb3ZpZGVyLnVybH0iLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iJHt0ZXN0LmNsaWVudH0iCiAgICAgICAgIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9OiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIKICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiIGZvcms9InRydWUiPgogICAgICAgICA8YXJnIHZhbHVlPSIke3Byb3ZpZGVyLnVybH0iLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjdHhmYWN0b3J5fSIvPgogICAgICAgICA8YXJnIHZhbHVlPSIke2puZGkubmFtZX0iLz4KLQk8anZtYXJnIHZhbHVlPSItRGphdmF4LnJtaS5DT1JCQS5VdGlsQ2xhc3M9Y29tLnN1bi5jb3JiYS5lZS5pbXBsLmphdmF4LnJtaS5DT1JCQS5VdGlsIi8+Ci0JPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkNsYXNzPWNvbS5zdW4uY29yYmEuZWUuaW1wbC5vcmIuT1JCSW1wbCIvPgotCTxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJTaW5nbGV0b25DbGFzcz1jb20uc3VuLmNvcmJhLmVlLmltcGwub3JiLk9SQlNpbmdsZXRvbiIvPgorICAgIDxqdm1hcmcgdmFsdWU9Ii1EamF2YXgucm1pLkNPUkJBLlV0aWxDbGFzcz1jb20uc3VuLmNvcmJhLmVlLmltcGwuamF2YXgucm1pLkNPUkJBLlV0aWwiLz4KKyAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCQ2xhc3M9Y29tLnN1bi5jb3JiYS5lZS5pbXBsLm9yYi5PUkJJbXBsIi8+CisgICAgPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQlNpbmdsZXRvbkNsYXNzPWNvbS5zdW4uY29yYmEuZWUuaW1wbC5vcmIuT1JCU2luZ2xldG9uIi8+CiAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pheHIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qYXhyL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCmluZGV4IGZhOWJiYzIuLjU2ZGQzNzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pheHIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbApAQCAtMTksMTEgKzE5LDExIEBACiAtLT4KIAogPGFwcGxpY2F0aW9uPgotCTxkaXNwbGF5LW5hbWU+SmF4cnJhQXBwPC9kaXNwbGF5LW5hbWU+IAorICAgIDxkaXNwbGF5LW5hbWU+SmF4cnJhQXBwPC9kaXNwbGF5LW5hbWU+CiAgIDxtb2R1bGU+Ci0JICA8amF2YT5qYXhycmEtY2xpZW50LmphcjwvamF2YT4KKyAgICAgIDxqYXZhPmpheHJyYS1jbGllbnQuamFyPC9qYXZhPgogICA8L21vZHVsZT4KICAgPG1vZHVsZT4KLQkgIDxlamI+amF4cnJhLWVqYi5qYXI8L2VqYj4KKyAgICAgIDxlamI+amF4cnJhLWVqYi5qYXI8L2VqYj4KICAgPC9tb2R1bGU+CiA8L2FwcGxpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGI3NmE5YjMuLjI0MWI1N2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pheHIvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qYXhyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTI5LDQ0ICsyOSw0NCBAQAogICAgICAgPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT4KICAgICAgIDx0cmFuc2FjdGlvbi10eXBlPkNvbnRhaW5lcjwvdHJhbnNhY3Rpb24tdHlwZT4KICAgICAgIDxlbnYtZW50cnk+Ci0JPGVudi1lbnRyeS1uYW1lPkpheHJRdWVyeVVSTDwvZW52LWVudHJ5LW5hbWU+Ci0JPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2Vudi1lbnRyeS10eXBlPgotCTxlbnYtZW50cnktdmFsdWU+aHR0cDovL3VkZGkuaWJtLmNvbS90ZXN0cmVnaXN0cnkvaW5xdWlyeWFwaTwvZW52LWVudHJ5LXZhbHVlPgorICAgIDxlbnYtZW50cnktbmFtZT5KYXhyUXVlcnlVUkw8L2Vudi1lbnRyeS1uYW1lPgorICAgIDxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KKyAgICA8ZW52LWVudHJ5LXZhbHVlPmh0dHA6Ly91ZGRpLmlibS5jb20vdGVzdHJlZ2lzdHJ5L2lucXVpcnlhcGk8L2Vudi1lbnRyeS12YWx1ZT4KICAgICAgIDwvZW52LWVudHJ5PgogICAgICAgPGVudi1lbnRyeT4KLQk8ZW52LWVudHJ5LW5hbWU+SmF4clB1Ymxpc2hVUkw8L2Vudi1lbnRyeS1uYW1lPgotCTxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KLQk8ZW52LWVudHJ5LXZhbHVlPmh0dHBzOi8vdWRkaS5pYm0uY29tL3Rlc3RyZWdpc3RyeS9wdWJsaXNoYXBpPC9lbnYtZW50cnktdmFsdWU+CisgICAgPGVudi1lbnRyeS1uYW1lPkpheHJQdWJsaXNoVVJMPC9lbnYtZW50cnktbmFtZT4KKyAgICA8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvZW52LWVudHJ5LXR5cGU+CisgICAgPGVudi1lbnRyeS12YWx1ZT5odHRwczovL3VkZGkuaWJtLmNvbS90ZXN0cmVnaXN0cnkvcHVibGlzaGFwaTwvZW52LWVudHJ5LXZhbHVlPgogICAgICAgPC9lbnYtZW50cnk+CiAgICAgICA8ZW52LWVudHJ5PgotCTxlbnYtZW50cnktbmFtZT5KYXhyUHJveHlIb3N0PC9lbnYtZW50cnktbmFtZT4KLQk8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvZW52LWVudHJ5LXR5cGU+Ci0JPGVudi1lbnRyeS12YWx1ZT5odHRwOi8vd2ViY2FjaGUuc2ZiYXkuc3VuLmNvbTwvZW52LWVudHJ5LXZhbHVlPgorICAgIDxlbnYtZW50cnktbmFtZT5KYXhyUHJveHlIb3N0PC9lbnYtZW50cnktbmFtZT4KKyAgICA8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvZW52LWVudHJ5LXR5cGU+CisgICAgPGVudi1lbnRyeS12YWx1ZT5odHRwOi8vd2ViY2FjaGUuc2ZiYXkuc3VuLmNvbTwvZW52LWVudHJ5LXZhbHVlPgogICAgICAgPC9lbnYtZW50cnk+CiAgICAgICA8ZW52LWVudHJ5PgotCTxlbnYtZW50cnktbmFtZT5KYXhyUHJveHlQb3J0PC9lbnYtZW50cnktbmFtZT4KLQk8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvZW52LWVudHJ5LXR5cGU+Ci0JPGVudi1lbnRyeS12YWx1ZT44MDgwPC9lbnYtZW50cnktdmFsdWU+CisgICAgPGVudi1lbnRyeS1uYW1lPkpheHJQcm94eVBvcnQ8L2Vudi1lbnRyeS1uYW1lPgorICAgIDxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KKyAgICA8ZW52LWVudHJ5LXZhbHVlPjgwODA8L2Vudi1lbnRyeS12YWx1ZT4KICAgICAgIDwvZW52LWVudHJ5PgogICAgICAgPGVudi1lbnRyeT4KLQk8ZW52LWVudHJ5LW5hbWU+dXNlcm5hbWU8L2Vudi1lbnRyeS1uYW1lPgotCTxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KLQk8ZW52LWVudHJ5LXZhbHVlPmpheHJzcWExYTwvZW52LWVudHJ5LXZhbHVlPgorICAgIDxlbnYtZW50cnktbmFtZT51c2VybmFtZTwvZW52LWVudHJ5LW5hbWU+CisgICAgPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2Vudi1lbnRyeS10eXBlPgorICAgIDxlbnYtZW50cnktdmFsdWU+amF4cnNxYTFhPC9lbnYtZW50cnktdmFsdWU+CiAgICAgICA8L2Vudi1lbnRyeT4KIAogICAgICAgPGVudi1lbnRyeT4KLQk8ZW52LWVudHJ5LW5hbWU+cGFzc3dvcmQ8L2Vudi1lbnRyeS1uYW1lPgotCTxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KLQk8ZW52LWVudHJ5LXZhbHVlPnRlc3RwYXNzPC9lbnYtZW50cnktdmFsdWU+CisgICAgPGVudi1lbnRyeS1uYW1lPnBhc3N3b3JkPC9lbnYtZW50cnktbmFtZT4KKyAgICA8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvZW52LWVudHJ5LXR5cGU+CisgICAgPGVudi1lbnRyeS12YWx1ZT50ZXN0cGFzczwvZW52LWVudHJ5LXZhbHVlPgogICAgICAgPC9lbnYtZW50cnk+CiAgICAgICA8c2VjdXJpdHktaWRlbnRpdHk+CiAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eS8+CiAgICAgICA8L3NlY3VyaXR5LWlkZW50aXR5PgotCTxyZXNvdXJjZS1yZWY+IAotCQk8cmVzLXJlZi1uYW1lPlMxYXNKYXhyRmFjdG9yeTwvcmVzLXJlZi1uYW1lPgotCTxyZXMtdHlwZT5qYXZheC54bWwucmVnaXN0cnkuQ29ubmVjdGlvbkZhY3Rvcnk8L3Jlcy10eXBlPiAgICAgCQkKLQk8cmVzLWF1dGg+QXBwbGljYXRpb248L3Jlcy1hdXRoPgotCTwvcmVzb3VyY2UtcmVmPgorICAgIDxyZXNvdXJjZS1yZWY+CisgICAgICAgIDxyZXMtcmVmLW5hbWU+UzFhc0pheHJGYWN0b3J5PC9yZXMtcmVmLW5hbWU+CisgICAgPHJlcy10eXBlPmphdmF4LnhtbC5yZWdpc3RyeS5Db25uZWN0aW9uRmFjdG9yeTwvcmVzLXR5cGU+CisgICAgPHJlcy1hdXRoPkFwcGxpY2F0aW9uPC9yZXMtYXV0aD4KKyAgICA8L3Jlc291cmNlLXJlZj4KIAogICAgIDwvc2Vzc2lvbj4KIApAQCAtNzQsMTIgKzc0LDEyIEBACiAgIDxhc3NlbWJseS1kZXNjcmlwdG9yPgogICAgIDxjb250YWluZXItdHJhbnNhY3Rpb24+CiAgICAgICA8bWV0aG9kPgotCSAgICAgIDxlamItbmFtZT5NeUpheHI8L2VqYi1uYW1lPgorICAgICAgICAgIDxlamItbmFtZT5NeUpheHI8L2VqYi1uYW1lPgogICAgICAgICA8bWV0aG9kLWludGY+UmVtb3RlPC9tZXRob2QtaW50Zj4KICAgICAgICAgPG1ldGhvZC1uYW1lPmdldENvbXBhbnlJbmZvcm1hdGlvbjwvbWV0aG9kLW5hbWU+Ci0JPG1ldGhvZC1wYXJhbXM+IAotCQk8bWV0aG9kLXBhcmFtPmphdmEubGFuZy5TdHJpbmc8L21ldGhvZC1wYXJhbT4KLQk8L21ldGhvZC1wYXJhbXM+CisgICAgPG1ldGhvZC1wYXJhbXM+CisgICAgICAgIDxtZXRob2QtcGFyYW0+amF2YS5sYW5nLlN0cmluZzwvbWV0aG9kLXBhcmFtPgorICAgIDwvbWV0aG9kLXBhcmFtcz4KICAgICAgIDwvbWV0aG9kPgogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pheHIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggZmM1OTdjZi4uNDJhOWE5ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qYXhyL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yNSw4ICsyNSw4IEBACiAgICAgICA8ZWpiLW5hbWU+TXlKYXhyPC9lamItbmFtZT4KICAgICAgIDxqbmRpLW5hbWU+amF4cnJhPC9qbmRpLW5hbWU+CiAgICAgICAgICAgPHJlc291cmNlLXJlZj4KLQkgICAgPHJlcy1yZWYtbmFtZT5TMWFzSmF4ckZhY3Rvcnk8L3Jlcy1yZWYtbmFtZT4KLQkgICAgPGpuZGktbmFtZT5laXMvamF4cjwvam5kaS1uYW1lPgorICAgICAgICA8cmVzLXJlZi1uYW1lPlMxYXNKYXhyRmFjdG9yeTwvcmVzLXJlZi1uYW1lPgorICAgICAgICA8am5kaS1uYW1lPmVpcy9qYXhyPC9qbmRpLW5hbWU+CiAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgPC9lamI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pheHIvamF4ci9KYXhyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9qYXhyL0pheHJCZWFuLmphdmEKaW5kZXggZDZmM2JlZS4uZDI2NjYyZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9qYXhyL0pheHJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9qYXhyL0pheHJCZWFuLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgamF4cjsKIAogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTM4LDEwOSArMzgsMTA5IEBACiAgICAgU3RyaW5nIHVzZXJuYW1lID0gImpheHJzcWEzYSI7CiAgICAgU3RyaW5nIHBhc3N3b3JkID0gInRlc3RwYXNzIjsKICAgICBwdWJsaWMgSmF4ckJlYW4oKXt9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JdHJ5ewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgSU4gRUpCQ1JFQVRFICIpOyAKLQkgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgCi0gCSAgICBTdHJpbmcgdXNlcm5hbWUgPSAiamF4cnNxYTFhIjsKLSAgICAgICAgICAgIC8vIChTdHJpbmcpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3VzZXJuYW1lIik7Ci0gCSAgICBTdHJpbmcgcGFzc3dvcmQgPSAidGVzdHBhc3MiOwotICAgICAgICAgICAgLy8gKFN0cmluZylpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvcGFzc3dvcmQiKTsKLQkgICAgU3RyaW5nIHJlZ3VybCA9ICAiaHR0cDovL3VkZGkuaWJtLmNvbS90ZXN0cmVnaXN0cnkvaW5xdWlyeWFwaSI7Ci0gICAgICAgICAgICAvLyhTdHJpbmcpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L0pheHJRdWVyeVVSTCIpOwotCSAgICBTdHJpbmcgcmVndXJscCA9ICJodHRwczovL3VkZGkuaWJtLmNvbS90ZXN0cmVnaXN0cnkvcHVibGlzaGFwaSI7Ci0gICAgICAgICAgICAvLyhTdHJpbmcpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L0pheHJRdWVyeVVSTCIpOwotCSAgICBTdHJpbmcgaHR0cFByb3h5SG9zdCA9ICJ3ZWJjYWNoZS5zZmJheS5zdW4uY29tIjsKLSAgICAgICAgICAgIC8vKFN0cmluZylpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvSmF4clByb3h5SG9zdCIpOwotCSAgICBTdHJpbmcgaHR0cFByb3h5UG9ydCA9ICI4MDgwIjsKLSAgICAgICAgICAgIC8vKFN0cmluZylpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvSmF4clByb3h5UG9ydCIpOzsKLQkgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JICAgIHByb3BzLnNldFByb3BlcnR5KCJqYXZheC54bWwucmVnaXN0cnkucXVlcnlNYW5hZ2VyVVJMIiwgcmVndXJsKTsKLQkgICAgcHJvcHMuc2V0UHJvcGVydHkoImphdmF4LnhtbC5yZWdpc3RyeS5saWZlQ3ljbGVNYW5hZ2VyVVJMIiwgcmVndXJscCk7Ci0JICAgIHByb3BzLnNldFByb3BlcnR5KCJjb20uc3VuLnhtbC5yZWdpc3RyeS5odHRwcy5wcm94eUhvc3QiLCBodHRwUHJveHlIb3N0KTsKLQkgICAgcHJvcHMuc2V0UHJvcGVydHkoImNvbS5zdW4ueG1sLnJlZ2lzdHJ5Lmh0dHAucHJveHlIb3N0IiwgaHR0cFByb3h5SG9zdCk7Ci0JICAgIHByb3BzLnNldFByb3BlcnR5KCJjb20uc3VuLnhtbC5yZWdpc3RyeS5odHRwcy5wcm94eVBvcnQiLCBodHRwUHJveHlQb3J0KTsKLQkgICAgcHJvcHMuc2V0UHJvcGVydHkoImNvbS5zdW4ueG1sLnJlZ2lzdHJ5Lmh0dHAucHJveHlQb3J0IiwgaHR0cFByb3h5UG9ydCk7CiAKLQkgICAgY25mY3QgPSAoamF2YXgueG1sLnJlZ2lzdHJ5LkNvbm5lY3Rpb25GYWN0b3J5KWljLmxvb2t1cCgiZWlzL2pheHIiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuICgiIENvbm5lY3Rpb24gRmFjdG9yeSA9ICIrY25mY3QpOyAKLQkgICAgY25mY3Quc2V0UHJvcGVydGllcyhwcm9wcyk7CSAgICAKLQl9IGNhdGNoKEpBWFJFeGNlcHRpb24gZSl7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHRocm93IG5ldyBSZW1vdGVFeGNlcHRpb24oIkNhbm5vdCBpbnN0YW50aWF0ZSB0aGUgZmFjdG9yeSAiICxlKTsKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKXsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgdGhyb3cgbmV3IFJlbW90ZUV4Y2VwdGlvbigiRXJyb3IgaW4gZWpiQ3JlYXRlICEhISIsIGUpOwotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYkNyZWF0ZSAhISAtIGNyZWF0ZWQgQ29ubmVjdGlvbkZhY3RvcnkgIik7CisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgdHJ5eworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgSU4gRUpCQ1JFQVRFICIpOworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworCisgICAgICAgICBTdHJpbmcgdXNlcm5hbWUgPSAiamF4cnNxYTFhIjsKKyAgICAgICAgICAgIC8vIChTdHJpbmcpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3VzZXJuYW1lIik7CisgICAgICAgICBTdHJpbmcgcGFzc3dvcmQgPSAidGVzdHBhc3MiOworICAgICAgICAgICAgLy8gKFN0cmluZylpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvcGFzc3dvcmQiKTsKKyAgICAgICAgU3RyaW5nIHJlZ3VybCA9ICAiaHR0cDovL3VkZGkuaWJtLmNvbS90ZXN0cmVnaXN0cnkvaW5xdWlyeWFwaSI7CisgICAgICAgICAgICAvLyhTdHJpbmcpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L0pheHJRdWVyeVVSTCIpOworICAgICAgICBTdHJpbmcgcmVndXJscCA9ICJodHRwczovL3VkZGkuaWJtLmNvbS90ZXN0cmVnaXN0cnkvcHVibGlzaGFwaSI7CisgICAgICAgICAgICAvLyhTdHJpbmcpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L0pheHJRdWVyeVVSTCIpOworICAgICAgICBTdHJpbmcgaHR0cFByb3h5SG9zdCA9ICJ3ZWJjYWNoZS5zZmJheS5zdW4uY29tIjsKKyAgICAgICAgICAgIC8vKFN0cmluZylpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvSmF4clByb3h5SG9zdCIpOworICAgICAgICBTdHJpbmcgaHR0cFByb3h5UG9ydCA9ICI4MDgwIjsKKyAgICAgICAgICAgIC8vKFN0cmluZylpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvSmF4clByb3h5UG9ydCIpOzsKKyAgICAgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisgICAgICAgIHByb3BzLnNldFByb3BlcnR5KCJqYXZheC54bWwucmVnaXN0cnkucXVlcnlNYW5hZ2VyVVJMIiwgcmVndXJsKTsKKyAgICAgICAgcHJvcHMuc2V0UHJvcGVydHkoImphdmF4LnhtbC5yZWdpc3RyeS5saWZlQ3ljbGVNYW5hZ2VyVVJMIiwgcmVndXJscCk7CisgICAgICAgIHByb3BzLnNldFByb3BlcnR5KCJjb20uc3VuLnhtbC5yZWdpc3RyeS5odHRwcy5wcm94eUhvc3QiLCBodHRwUHJveHlIb3N0KTsKKyAgICAgICAgcHJvcHMuc2V0UHJvcGVydHkoImNvbS5zdW4ueG1sLnJlZ2lzdHJ5Lmh0dHAucHJveHlIb3N0IiwgaHR0cFByb3h5SG9zdCk7CisgICAgICAgIHByb3BzLnNldFByb3BlcnR5KCJjb20uc3VuLnhtbC5yZWdpc3RyeS5odHRwcy5wcm94eVBvcnQiLCBodHRwUHJveHlQb3J0KTsKKyAgICAgICAgcHJvcHMuc2V0UHJvcGVydHkoImNvbS5zdW4ueG1sLnJlZ2lzdHJ5Lmh0dHAucHJveHlQb3J0IiwgaHR0cFByb3h5UG9ydCk7CisKKyAgICAgICAgY25mY3QgPSAoamF2YXgueG1sLnJlZ2lzdHJ5LkNvbm5lY3Rpb25GYWN0b3J5KWljLmxvb2t1cCgiZWlzL2pheHIiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiIENvbm5lY3Rpb24gRmFjdG9yeSA9ICIrY25mY3QpOworICAgICAgICBjbmZjdC5zZXRQcm9wZXJ0aWVzKHByb3BzKTsKKyAgICB9IGNhdGNoKEpBWFJFeGNlcHRpb24gZSl7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHRocm93IG5ldyBSZW1vdGVFeGNlcHRpb24oIkNhbm5vdCBpbnN0YW50aWF0ZSB0aGUgZmFjdG9yeSAiICxlKTsKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKXsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgdGhyb3cgbmV3IFJlbW90ZUV4Y2VwdGlvbigiRXJyb3IgaW4gZWpiQ3JlYXRlICEhISIsIGUpOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYkNyZWF0ZSAhISAtIGNyZWF0ZWQgQ29ubmVjdGlvbkZhY3RvcnkgIik7CiAgICAgfQogCiAKLSAgICBwdWJsaWMgU3RyaW5nIGdldENvbXBhbnlJbmZvcm1hdGlvbihTdHJpbmcgY29tcGFueSkgdGhyb3dzIEVKQkV4Y2VwdGlvbiwgCi0JCQkJCQkJICAgICAgIFJlbW90ZUV4Y2VwdGlvbnsKLQlpZihjbmZjdCA9PSBudWxsKXsKLQkgICAgcmV0dXJuICJDb25uZWN0aW9uRmFjdG9yeSB3YXMgbm90IGluc3RhbnRpYXRlZC4gVGVzdCBGYWlsZWQiOwotCX0KLQlpZihjb21wYW55ID09IG51bGwpCi0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkNvbXBhbnkgbmFtZSBub3Qgc3BlY2lmaWVkIik7Ci0JLy8gY3JlYXRlIGEgamF4ciBjb25uZWN0aW9uIGluc3RhbmNlCisgICAgcHVibGljIFN0cmluZyBnZXRDb21wYW55SW5mb3JtYXRpb24oU3RyaW5nIGNvbXBhbnkpIHRocm93cyBFSkJFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW90ZUV4Y2VwdGlvbnsKKyAgICBpZihjbmZjdCA9PSBudWxsKXsKKyAgICAgICAgcmV0dXJuICJDb25uZWN0aW9uRmFjdG9yeSB3YXMgbm90IGluc3RhbnRpYXRlZC4gVGVzdCBGYWlsZWQiOworICAgIH0KKyAgICBpZihjb21wYW55ID09IG51bGwpCisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkNvbXBhbnkgbmFtZSBub3Qgc3BlY2lmaWVkIik7CisgICAgLy8gY3JlYXRlIGEgamF4ciBjb25uZWN0aW9uIGluc3RhbmNlCiAKICAgICAgICAgdHJ5IHsKLQkgICAgLy8JICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSgib3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuc2ltcGxlbG9nLmxvZy5jb20uc3VuLnhtbC5yZWdpc3RyeSIsICJ0cmFjZSIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgQ29ubmVjdGlvbiBmYWN0b3J5ID0gIisgY25mY3QpOyAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuICgiIEdldHRpbmcgY29ubmVjdGlvbiIpOyAKLQkgICAgY29uID0gY25mY3QuY3JlYXRlQ29ubmVjdGlvbigpOwotCSAgICBpZiAoY29uID09IG51bGwpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuICgiIENvbm5lY3Rpb24gaXMgbnVsbCIpOwotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJDb25uZWN0aW9uIGNvdWxkIG5vdCBiZSBjcmVhdGVkIik7Ci0JICAgIH0KLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgdGhlIGNvbm5lY3Rpb24gPSAiKyBjb24pOwotCSAgICBSZWdpc3RyeVNlcnZpY2UgcnMgPSBjb24uZ2V0UmVnaXN0cnlTZXJ2aWNlKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHRoZSByZWdpc3RyeSBzZXJ2aWNlID0gIisgcnMpOwotCSAgICBCdXNpbmVzc1F1ZXJ5TWFuYWdlciBicW0gPSBycy5nZXRCdXNpbmVzc1F1ZXJ5TWFuYWdlcigpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgQnVzaW5lc3MgUXVlcnkgTWFuYWdlciA9ICIrYnFtKTsgCi0JICAgIEFycmF5TGlzdCBuYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkgICAgbmFtZXMuYWRkKGNvbXBhbnkpOwotCSAgICAKLQkgICAgQ29sbGVjdGlvbiBmcXVhbGlmaWVycyA9IG5ldyBBcnJheUxpc3QoKTsKLQkgICAgZnF1YWxpZmllcnMuYWRkKEZpbmRRdWFsaWZpZXIuU09SVF9CWV9OQU1FX0RFU0MpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgQmVmb3JlIGZpbmRPcmdhbml6YXRpb25zICIpOyAKLQkgICAgQnVsa1Jlc3BvbnNlIGJyID0gYnFtLmZpbmRPcmdhbml6YXRpb25zKGZxdWFsaWZpZXJzLCBuYW1lcywgbnVsbCwKLQkJCQkJCSAgICBudWxsLCBudWxsLCBudWxsKTsKKyAgICAgICAgLy8gICAgICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSgib3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuc2ltcGxlbG9nLmxvZy5jb20uc3VuLnhtbC5yZWdpc3RyeSIsICJ0cmFjZSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgQ29ubmVjdGlvbiBmYWN0b3J5ID0gIisgY25mY3QpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgR2V0dGluZyBjb25uZWN0aW9uIik7CisgICAgICAgIGNvbiA9IGNuZmN0LmNyZWF0ZUNvbm5lY3Rpb24oKTsKKyAgICAgICAgaWYgKGNvbiA9PSBudWxsKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIiBDb25uZWN0aW9uIGlzIG51bGwiKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiQ29ubmVjdGlvbiBjb3VsZCBub3QgYmUgY3JlYXRlZCIpOworICAgICAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHRoZSBjb25uZWN0aW9uID0gIisgY29uKTsKKyAgICAgICAgUmVnaXN0cnlTZXJ2aWNlIHJzID0gY29uLmdldFJlZ2lzdHJ5U2VydmljZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCB0aGUgcmVnaXN0cnkgc2VydmljZSA9ICIrIHJzKTsKKyAgICAgICAgQnVzaW5lc3NRdWVyeU1hbmFnZXIgYnFtID0gcnMuZ2V0QnVzaW5lc3NRdWVyeU1hbmFnZXIoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiIEJ1c2luZXNzIFF1ZXJ5IE1hbmFnZXIgPSAiK2JxbSk7CisgICAgICAgIEFycmF5TGlzdCBuYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKKyAgICAgICAgbmFtZXMuYWRkKGNvbXBhbnkpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIiBCdWxrIFJlc3BvbnNlID0gIiticik7IAotCSAgICBpZihici5nZXRTdGF0dXMoKSA9PSBKQVhSUmVzcG9uc2UuU1RBVFVTX1NVQ0NFU1MpewotCQlTeXN0ZW0ub3V0LnByaW50bG4gKCIgUmVzdWx0cyBmb3VuZCBmb3IgKCIrY29tcGFueSsiKSIpOwotCQlDb2xsZWN0aW9uIG9yZ3MgPSBici5nZXRDb2xsZWN0aW9uKCk7Ci0JCUl0ZXJhdG9yIHJpdCA9IG9yZ3MuaXRlcmF0b3IoKTsKLQkJd2hpbGUocml0Lmhhc05leHQoKSl7Ci0JCSAgICBPcmdhbml6YXRpb24gb3JnID0gKE9yZ2FuaXphdGlvbilyaXQubmV4dCgpOwotCQkgICAgcmVzdWx0LmFwcGVuZChvcmcuZ2V0TmFtZSgpLmdldFZhbHVlKCkrIlxuIik7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgTmFtZSA9ICIrb3JnLmdldE5hbWUoKS5nZXRWYWx1ZSgpKTsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkRlc2NyaXB0aW9uID0gIisgb3JnLmdldERlc2NyaXB0aW9uKCkuZ2V0VmFsdWUoKSk7Ci0JCSAgICByZXN1bHQuYXBwZW5kKG9yZy5nZXREZXNjcmlwdGlvbigpLmdldFZhbHVlKCkrIlxuXG4iKTsKLQkJfQotCQkKLQkgICAgfSBlbHNlewotCQlTeXN0ZW0ub3V0LnByaW50bG4gKCIgQ291bGQgbm90IHF1ZXJ5IHRoZSByZWdpc3RyeSBkdWUgdG8gdGhlIGZvbGxvd2luZyBleGNlcHRpb25zIDoiKTsgCi0JCUNvbGxlY3Rpb24gZXggPSBici5nZXRFeGNlcHRpb25zKCk7Ci0JCUl0ZXJhdG9yIGl0ID0gZXguaXRlcmF0b3IoKTsKLQkJd2hpbGUoaXQuaGFzTmV4dCgpKXsKLQkJICAgIEV4Y2VwdGlvbiBlID0gKEV4Y2VwdGlvbikgaXQubmV4dCgpOwotCQkgICAgU3lzdGVtLm91dC5wcmludGxuIChlLnRvU3RyaW5nKCkpOyAKLQkJICAgIHJlc3VsdC5hcHBlbmQoZS50b1N0cmluZygpKTsKLQkJfQotCSAgICB9CisgICAgICAgIENvbGxlY3Rpb24gZnF1YWxpZmllcnMgPSBuZXcgQXJyYXlMaXN0KCk7CisgICAgICAgIGZxdWFsaWZpZXJzLmFkZChGaW5kUXVhbGlmaWVyLlNPUlRfQllfTkFNRV9ERVNDKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiIEJlZm9yZSBmaW5kT3JnYW5pemF0aW9ucyAiKTsKKyAgICAgICAgQnVsa1Jlc3BvbnNlIGJyID0gYnFtLmZpbmRPcmdhbml6YXRpb25zKGZxdWFsaWZpZXJzLCBuYW1lcywgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsKTsKIAotCS8vIHB1Ymxpc2ggdG8gdGhlIHJlZ2lzdHJ5Li4uCi0JQnVzaW5lc3NMaWZlQ3ljbGVNYW5hZ2VyIGJsY20gPSBycy5nZXRCdXNpbmVzc0xpZmVDeWNsZU1hbmFnZXIoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiIEJ1bGsgUmVzcG9uc2UgPSAiK2JyKTsKKyAgICAgICAgaWYoYnIuZ2V0U3RhdHVzKCkgPT0gSkFYUlJlc3BvbnNlLlNUQVRVU19TVUNDRVNTKXsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiIFJlc3VsdHMgZm91bmQgZm9yICgiK2NvbXBhbnkrIikiKTsKKyAgICAgICAgQ29sbGVjdGlvbiBvcmdzID0gYnIuZ2V0Q29sbGVjdGlvbigpOworICAgICAgICBJdGVyYXRvciByaXQgPSBvcmdzLml0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlKHJpdC5oYXNOZXh0KCkpeworICAgICAgICAgICAgT3JnYW5pemF0aW9uIG9yZyA9IChPcmdhbml6YXRpb24pcml0Lm5leHQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQob3JnLmdldE5hbWUoKS5nZXRWYWx1ZSgpKyJcbiIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiIE5hbWUgPSAiK29yZy5nZXROYW1lKCkuZ2V0VmFsdWUoKSk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJEZXNjcmlwdGlvbiA9ICIrIG9yZy5nZXREZXNjcmlwdGlvbigpLmdldFZhbHVlKCkpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChvcmcuZ2V0RGVzY3JpcHRpb24oKS5nZXRWYWx1ZSgpKyJcblxuIik7CisgICAgICAgIH0KKworICAgICAgICB9IGVsc2V7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIiBDb3VsZCBub3QgcXVlcnkgdGhlIHJlZ2lzdHJ5IGR1ZSB0byB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbnMgOiIpOworICAgICAgICBDb2xsZWN0aW9uIGV4ID0gYnIuZ2V0RXhjZXB0aW9ucygpOworICAgICAgICBJdGVyYXRvciBpdCA9IGV4Lml0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlKGl0Lmhhc05leHQoKSl7CisgICAgICAgICAgICBFeGNlcHRpb24gZSA9IChFeGNlcHRpb24pIGl0Lm5leHQoKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZS50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgICAgICB9CisKKyAgICAvLyBwdWJsaXNoIHRvIHRoZSByZWdpc3RyeS4uLgorICAgIEJ1c2luZXNzTGlmZUN5Y2xlTWFuYWdlciBibGNtID0gcnMuZ2V0QnVzaW5lc3NMaWZlQ3ljbGVNYW5hZ2VyKCk7CiAgICAgICAgIC8vIEdldCBhdXRob3JpemF0aW9uIGZyb20gdGhlIHJlZ2lzdHJ5CiAgICAgICAgIFBhc3N3b3JkQXV0aGVudGljYXRpb24gcGFzc3dkQXV0aCA9CiAgICAgICAgICAgICAgICAgbmV3IFBhc3N3b3JkQXV0aGVudGljYXRpb24odXNlcm5hbWUsCiAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkLnRvQ2hhckFycmF5KCkpOwotCQorCiAgICAgICAgIFNldCBjcmVkcyA9IG5ldyBIYXNoU2V0KCk7CiAgICAgICAgIGNyZWRzLmFkZChwYXNzd2RBdXRoKTsKICAgICAgICAgY29uLnNldENyZWRlbnRpYWxzKGNyZWRzKTsKQEAgLTE1MCwyMSArMTUwLDIxIEBACiAKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuICgiIFRlc3QgRmFpbGVkIik7Ci0JICAgIHJlc3VsdC5hcHBlbmQoIlRlc3QgRmFpbGVkIik7Ci0JICAgIHRocm93IG5ldyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24oZXgudG9TdHJpbmcoKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIiBUZXN0IEZhaWxlZCIpOworICAgICAgICByZXN1bHQuYXBwZW5kKCJUZXN0IEZhaWxlZCIpOworICAgICAgICB0aHJvdyBuZXcgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uKGV4LnRvU3RyaW5nKCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKICAgICB9Ci0JCisKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQorCiAgICAgICAgIHRoaXMuc2MgPSBzYzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9qYXhyL0pheHJDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pheHIvamF4ci9KYXhyQ2xpZW50LmphdmEKaW5kZXggYjFkYWU5Ni4uZjg0MTY4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9qYXhyL0pheHJDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qYXhyL2pheHIvSmF4ckNsaWVudC5qYXZhCkBAIC0zNSw3ICszNSw3IEBACiAgICAgICAgIEpheHJDbGllbnQgY2xpZW50ID0gbmV3IEpheHJDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgSmF4ckNsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAzKSB7CiAgICAgICAgICAgICAgICAgdXJsID0gYXJnc1swXTsKQEAgLTQ1LDEwICs0NSwxMCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KCkgewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgcmVzID0gImZhaWwiOwotICAgICAgICAKLSAgICAJdHJ5IHsgICAgICAgICAgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzIGVudiA9IG5ldyBQcm9wZXJ0aWVzKCk7CiAgICAgICAgICAgICAgICAgZW52LnB1dCgiamF2YS5uYW1pbmcucHJvdmlkZXIudXJsIiwgdXJsKTsKICAgICAgICAgICAgICAgICBlbnYucHV0KCJqYXZhLm5hbWluZy5mYWN0b3J5LmluaXRpYWwiLCBjdHhGYWN0b3J5KTsKQEAgLTU5LDM3ICs1OSwzNyBAQAogICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBIb21lIG9iamVjdAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioiK2puZGlOYW1lKTsKICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuT2JqZWN0IG9iaiA9IGNvbnRleHQubG9va3VwKGpuZGlOYW1lKTsKLSAgICAgICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCisgICAgICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgICAgICAgICAgLy9qYXZhLmxhbmcuT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiTXlKYXhyIik7CiAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKIAogICAgICAgICAgICAgICAgIEpheHJIb21lICBob21lID0gKEpheHJIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdygKLQkJCSAgICAgICAgICAgICAgICAgICAgIG9iaiwgSmF4ckhvbWUuY2xhc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLCBKYXhySG9tZS5jbGFzcyk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKIAogICAgICAgICAgICAgICAgIEpheHJSZW1vdGUgaHIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwogCiAgICAgICAgICAgICAgICAgLy8gaW52b2tlIG1ldGhvZCBvbiB0aGUgRUpCCi0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiIExvb2tpbmcgdXAgY29tcGFueSBpbmZvcm1hdGlvbiBmb3IgIitjb21wYW55KTsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiIExvb2tpbmcgdXAgY29tcGFueSBpbmZvcm1hdGlvbiBmb3IgIitjb21wYW55KTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaHIuZ2V0Q29tcGFueUluZm9ybWF0aW9uKGNvbXBhbnkpKTsKICAgICAgICAgICAgICAgICBoci5yZW1vdmUoKTsKLQl9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBuZSl7CisgICAgfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgZXhjZXB0aW9uIHdoaWxlIGluaXRpYWxpemluZyBjb250ZXh0LlxuIik7CiAgICAgICAgICAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuICgiIFRlc3QgRmFpbGVkICEiKTsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIiBUZXN0IEZhaWxlZCAhIik7CiAgICAgICAgICAgICByZXR1cm4gcmVzOwotCX0gY2F0Y2goRXhjZXB0aW9uIHJlKSB7CisgICAgfSBjYXRjaChFeGNlcHRpb24gcmUpIHsKICAgICAgICAgICAgIHJlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgVGVzdCBGYWlsZWQgISIpOyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiIFRlc3QgRmFpbGVkICEiKTsKICAgICAgICAgICAgIHJldHVybiByZXM7Ci0JfSAKLSAgICAgICAgcmVzID0gInBhc3MiOwotCVN5c3RlbS5vdXQucHJpbnRsbiAoIiBUZXN0IFBhc3NlZCAhIik7IAotICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICAKICAgICB9Ci0gICAgCisgICAgICAgIHJlcyA9ICJwYXNzIjsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgVGVzdCBQYXNzZWQgISIpOworICAgICAgICByZXR1cm4gcmVzOworCisgICAgfQorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pheHIvc29hci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9zb2FyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNGU4OWQ4Zi4uN2ZiNzZmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9zb2FyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9zb2FyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpheHIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CkBAIC0zMSw1ICszMSw1IEBACiA8IS0tPHByb3BlcnR5IG5hbWU9ImpuZGkubmFtZSIgdmFsdWU9Ik15SmF4ciIvPgogPHByb3BlcnR5IG5hbWU9InByb3ZpZGVyLnVybCIgdmFsdWU9Imlpb3A6Ly9sb2NhbGhvc3Q6JHtvcmIucG9ydH0iLz4KIDxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IiB2YWx1ZT0iY29tLnN1bi5qbmRpLmNvc25hbWluZy5DTkN0eEZhY3RvcnkiLz4gICAtLT4KLTxwcm9wZXJ0eSBuYW1lPSJyYXJmaWxlIiB2YWx1ZT0ic29hci1qYXhyLXJhLnJhciIvPiAgIAotPHByb3BlcnR5IG5hbWU9InJhcm5hbWUiIHZhbHVlPSJzb2FyLWpheHItcmEiLz4gICAKKzxwcm9wZXJ0eSBuYW1lPSJyYXJmaWxlIiB2YWx1ZT0ic29hci1qYXhyLXJhLnJhciIvPiAgXHUwMDIwCis8cHJvcGVydHkgbmFtZT0icmFybmFtZSIgdmFsdWU9InNvYXItamF4ci1yYSIvPiAgXHUwMDIwCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qYXhyL3NvYXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9zb2FyL2J1aWxkLnhtbAppbmRleCA5OTY5MmM4Li5mNzZhNzg3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qYXhyL3NvYXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pheHIvc29hci9idWlsZC54bWwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImpheHIiLz4KQEAgLTQ1LDI3ICs0NSwyNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktcmFyIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktcmFyIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktcmFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXJhci1jb21tb24iPgotCQk8cGFyYW0gbmFtZT0icmFyZmlsZSIgdmFsdWU9IiR7cmFyZmlsZX0iLz4gCi0JPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICAgICAgPHBhcmFtIG5hbWU9InJhcmZpbGUiIHZhbHVlPSIke3JhcmZpbGV9Ii8+CisgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS1yYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1yYXItY29tbW9uIj4KLQkJPHBhcmFtIG5hbWU9InVuZGVwbG95cmFyIiB2YWx1ZT0iJHtyYXJuYW1lfSIvPiAKLQk8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgICAgICA8cGFyYW0gbmFtZT0idW5kZXBsb3lyYXIiIHZhbHVlPSIke3Jhcm5hbWV9Ii8+CisgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CkBAIC04Niw4ICs4Niw4IEBACiAgICA8L3RhcmdldD4KIAogPCEtLSA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iPgotIAk8cGFyYW0gbmFtZT0iZ2VuZXJhdGUuc3R1YnMiIHZhbHVlPSJ0cnVlIi8+CQotCTwvYW50Y2FsbD4KKyAgICAgPHBhcmFtIG5hbWU9ImdlbmVyYXRlLnN0dWJzIiB2YWx1ZT0idHJ1ZSIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KICAgICAtLT4KICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTAyLDI3ICsxMDIsMjcgQEAKICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImpuZGkubmFtZSIgdmFsdWU9ImpheHJyYSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0icHJvdmlkZXIudXJsIiB2YWx1ZT0iaWlvcDovLyR7YWRtaW4uaG9zdH06JHtvcmIucG9ydH0iLz4KIDwhLS0KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiIAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIKICAgICAgICAgICAgIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2UubmFtaW5nLlNlcmlhbEluaXRDb250ZXh0RmFjdG9yeSIvPgogLS0+Ci0JPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiIAotICAgICAgICAgICAgCXZhbHVlPSJvcmcuZ2xhc3NmaXNoLmpuZGkuY29zbmFtaW5nLkNOQ3R4RmFjdG9yeSIvPgotCTxlY2hvIG1lc3NhZ2U9InByb3ZpZGVyLnVybCB1c2VkIGlzICR7cHJvdmlkZXIudXJsfSIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IgorICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZ2xhc3NmaXNoLmpuZGkuY29zbmFtaW5nLkNOQ3R4RmFjdG9yeSIvPgorICAgIDxlY2hvIG1lc3NhZ2U9InByb3ZpZGVyLnVybCB1c2VkIGlzICR7cHJvdmlkZXIudXJsfSIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSIke3Rlc3QuY2xpZW50fSIKICAgICAgICAgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH06JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIgogICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIgZm9yaz0idHJ1ZSI+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7cHJvdmlkZXIudXJsfSIvPgogICAgICAgICA8YXJnIHZhbHVlPSIke2N0eGZhY3Rvcnl9Ii8+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7am5kaS5uYW1lfSIvPgotCTxqdm1hcmcgdmFsdWU9Ii1EamF2YXgucm1pLkNPUkJBLlV0aWxDbGFzcz1jb20uc3VuLmNvcmJhLmVlLmltcGwuamF2YXgucm1pLkNPUkJBLlV0aWwiLz4KLQk8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCQ2xhc3M9Y29tLnN1bi5jb3JiYS5lZS5pbXBsLm9yYi5PUkJJbXBsIi8+Ci0JPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQlNpbmdsZXRvbkNsYXNzPWNvbS5zdW4uY29yYmEuZWUuaW1wbC5vcmIuT1JCU2luZ2xldG9uIi8+CisgICAgPGp2bWFyZyB2YWx1ZT0iLURqYXZheC5ybWkuQ09SQkEuVXRpbENsYXNzPWNvbS5zdW4uY29yYmEuZWUuaW1wbC5qYXZheC5ybWkuQ09SQkEuVXRpbCIvPgorICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJDbGFzcz1jb20uc3VuLmNvcmJhLmVlLmltcGwub3JiLk9SQkltcGwiLz4KKyAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCU2luZ2xldG9uQ2xhc3M9Y29tLnN1bi5jb3JiYS5lZS5pbXBsLm9yYi5PUkJTaW5nbGV0b24iLz4KICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9zb2FyL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9zb2FyL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCmluZGV4IGZhOWJiYzIuLjU2ZGQzNzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pheHIvc29hci9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qYXhyL3NvYXIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKQEAgLTE5LDExICsxOSwxMSBAQAogLS0+CiAKIDxhcHBsaWNhdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkpheHJyYUFwcDwvZGlzcGxheS1uYW1lPiAKKyAgICA8ZGlzcGxheS1uYW1lPkpheHJyYUFwcDwvZGlzcGxheS1uYW1lPgogICA8bW9kdWxlPgotCSAgPGphdmE+amF4cnJhLWNsaWVudC5qYXI8L2phdmE+CisgICAgICA8amF2YT5qYXhycmEtY2xpZW50LmphcjwvamF2YT4KICAgPC9tb2R1bGU+CiAgIDxtb2R1bGU+Ci0JICA8ZWpiPmpheHJyYS1lamIuamFyPC9lamI+CisgICAgICA8ZWpiPmpheHJyYS1lamIuamFyPC9lamI+CiAgIDwvbW9kdWxlPgogPC9hcHBsaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pheHIvc29hci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9zb2FyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggNzkyODA2ZC4uMjVhZDczNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9zb2FyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9zb2FyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTI5LDU2ICsyOSw1NiBAQAogICAgICAgPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT4KICAgICAgIDx0cmFuc2FjdGlvbi10eXBlPkNvbnRhaW5lcjwvdHJhbnNhY3Rpb24tdHlwZT4KICAgICAgIDxlbnYtZW50cnk+Ci0JPGVudi1lbnRyeS1uYW1lPkpheHJRdWVyeVVSTDwvZW52LWVudHJ5LW5hbWU+Ci0JPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2Vudi1lbnRyeS10eXBlPgotCTxlbnYtZW50cnktdmFsdWU+aHR0cDovL3VkZGkuaWJtLmNvbS90ZXN0cmVnaXN0cnkvaW5xdWlyeWFwaTwvZW52LWVudHJ5LXZhbHVlPgorICAgIDxlbnYtZW50cnktbmFtZT5KYXhyUXVlcnlVUkw8L2Vudi1lbnRyeS1uYW1lPgorICAgIDxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KKyAgICA8ZW52LWVudHJ5LXZhbHVlPmh0dHA6Ly91ZGRpLmlibS5jb20vdGVzdHJlZ2lzdHJ5L2lucXVpcnlhcGk8L2Vudi1lbnRyeS12YWx1ZT4KICAgICAgIDwvZW52LWVudHJ5PgogICAgICAgPGVudi1lbnRyeT4KLQk8ZW52LWVudHJ5LW5hbWU+SmF4clB1Ymxpc2hVUkw8L2Vudi1lbnRyeS1uYW1lPgotCTxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KLQk8ZW52LWVudHJ5LXZhbHVlPmh0dHBzOi8vdWRkaS5pYm0uY29tL3Rlc3RyZWdpc3RyeS9wdWJsaXNoYXBpPC9lbnYtZW50cnktdmFsdWU+CisgICAgPGVudi1lbnRyeS1uYW1lPkpheHJQdWJsaXNoVVJMPC9lbnYtZW50cnktbmFtZT4KKyAgICA8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvZW52LWVudHJ5LXR5cGU+CisgICAgPGVudi1lbnRyeS12YWx1ZT5odHRwczovL3VkZGkuaWJtLmNvbS90ZXN0cmVnaXN0cnkvcHVibGlzaGFwaTwvZW52LWVudHJ5LXZhbHVlPgogICAgICAgPC9lbnYtZW50cnk+CiAgICAgICA8ZW52LWVudHJ5PgotCTxlbnYtZW50cnktbmFtZT5KYXhyUHJveHlIb3N0PC9lbnYtZW50cnktbmFtZT4KLQk8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvZW52LWVudHJ5LXR5cGU+Ci0JPGVudi1lbnRyeS12YWx1ZT5odHRwOi8vd2ViY2FjaGUuc2ZiYXkuc3VuLmNvbTwvZW52LWVudHJ5LXZhbHVlPgorICAgIDxlbnYtZW50cnktbmFtZT5KYXhyUHJveHlIb3N0PC9lbnYtZW50cnktbmFtZT4KKyAgICA8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvZW52LWVudHJ5LXR5cGU+CisgICAgPGVudi1lbnRyeS12YWx1ZT5odHRwOi8vd2ViY2FjaGUuc2ZiYXkuc3VuLmNvbTwvZW52LWVudHJ5LXZhbHVlPgogICAgICAgPC9lbnYtZW50cnk+CiAgICAgICA8ZW52LWVudHJ5PgotCTxlbnYtZW50cnktbmFtZT5KYXhyUHJveHlQb3J0PC9lbnYtZW50cnktbmFtZT4KLQk8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvZW52LWVudHJ5LXR5cGU+Ci0JPGVudi1lbnRyeS12YWx1ZT44MDgwPC9lbnYtZW50cnktdmFsdWU+CisgICAgPGVudi1lbnRyeS1uYW1lPkpheHJQcm94eVBvcnQ8L2Vudi1lbnRyeS1uYW1lPgorICAgIDxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KKyAgICA8ZW52LWVudHJ5LXZhbHVlPjgwODA8L2Vudi1lbnRyeS12YWx1ZT4KICAgICAgIDwvZW52LWVudHJ5PgogICAgICAgPGVudi1lbnRyeT4KLQk8ZW52LWVudHJ5LW5hbWU+dXNlcm5hbWU8L2Vudi1lbnRyeS1uYW1lPgotCTxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KLQk8ZW52LWVudHJ5LXZhbHVlPmpheHJzcWExYTwvZW52LWVudHJ5LXZhbHVlPgorICAgIDxlbnYtZW50cnktbmFtZT51c2VybmFtZTwvZW52LWVudHJ5LW5hbWU+CisgICAgPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2Vudi1lbnRyeS10eXBlPgorICAgIDxlbnYtZW50cnktdmFsdWU+amF4cnNxYTFhPC9lbnYtZW50cnktdmFsdWU+CiAgICAgICA8L2Vudi1lbnRyeT4KIAogICAgICAgPGVudi1lbnRyeT4KLQk8ZW52LWVudHJ5LW5hbWU+cGFzc3dvcmQ8L2Vudi1lbnRyeS1uYW1lPgotCTxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KLQk8ZW52LWVudHJ5LXZhbHVlPnRlc3RwYXNzPC9lbnYtZW50cnktdmFsdWU+CisgICAgPGVudi1lbnRyeS1uYW1lPnBhc3N3b3JkPC9lbnYtZW50cnktbmFtZT4KKyAgICA8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvZW52LWVudHJ5LXR5cGU+CisgICAgPGVudi1lbnRyeS12YWx1ZT50ZXN0cGFzczwvZW52LWVudHJ5LXZhbHVlPgogICAgICAgPC9lbnYtZW50cnk+CiAgICAgICA8c2VjdXJpdHktaWRlbnRpdHk+CiAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eS8+CiAgICAgICA8L3NlY3VyaXR5LWlkZW50aXR5PgotCTxyZXNvdXJjZS1yZWY+IAotCQk8cmVzLXJlZi1uYW1lPlMxYXNKYXhyRmFjdG9yeTwvcmVzLXJlZi1uYW1lPgotCQk8cmVzLXR5cGU+amF2YXgueG1sLnJlZ2lzdHJ5LkNvbm5lY3Rpb25GYWN0b3J5PC9yZXMtdHlwZT4gICAgIAkJCi0JCTxyZXMtYXV0aD5BcHBsaWNhdGlvbjwvcmVzLWF1dGg+Ci0JPC9yZXNvdXJjZS1yZWY+CisgICAgPHJlc291cmNlLXJlZj4KKyAgICAgICAgPHJlcy1yZWYtbmFtZT5TMWFzSmF4ckZhY3Rvcnk8L3Jlcy1yZWYtbmFtZT4KKyAgICAgICAgPHJlcy10eXBlPmphdmF4LnhtbC5yZWdpc3RyeS5Db25uZWN0aW9uRmFjdG9yeTwvcmVzLXR5cGU+CisgICAgICAgIDxyZXMtYXV0aD5BcHBsaWNhdGlvbjwvcmVzLWF1dGg+CisgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgPC9zZXNzaW9uPgogCiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KICAgPGFzc2VtYmx5LWRlc2NyaXB0b3I+CiAgICAgPGNvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgICAgIDxtZXRob2Q+Ci0JICAgICAgPGVqYi1uYW1lPk15SmF4cjwvZWpiLW5hbWU+CisgICAgICAgICAgPGVqYi1uYW1lPk15SmF4cjwvZWpiLW5hbWU+CiAgICAgICAgIDxtZXRob2QtaW50Zj5SZW1vdGU8L21ldGhvZC1pbnRmPgogICAgICAgICA8bWV0aG9kLW5hbWU+Z2V0Q29tcGFueUluZm9ybWF0aW9uPC9tZXRob2QtbmFtZT4KLQk8bWV0aG9kLXBhcmFtcz4gCi0JCTxtZXRob2QtcGFyYW0+amF2YS5sYW5nLlN0cmluZzwvbWV0aG9kLXBhcmFtPgotCTwvbWV0aG9kLXBhcmFtcz4KKyAgICA8bWV0aG9kLXBhcmFtcz4KKyAgICAgICAgPG1ldGhvZC1wYXJhbT5qYXZhLmxhbmcuU3RyaW5nPC9tZXRob2QtcGFyYW0+CisgICAgPC9tZXRob2QtcGFyYW1zPgogICAgICAgPC9tZXRob2Q+CiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qYXhyL3NvYXIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qYXhyL3NvYXIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggYWUxMTMzMC4uYzA4MTViMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9zb2FyL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pheHIvc29hci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjUsOCArMjUsOCBAQAogICAgICAgPGVqYi1uYW1lPk15SmF4cjwvZWpiLW5hbWU+CiAgICAgICA8am5kaS1uYW1lPmpheHJyYTwvam5kaS1uYW1lPgogICAgICAgICAgIDxyZXNvdXJjZS1yZWY+Ci0JICAgIDxyZXMtcmVmLW5hbWU+UzFhc0pheHJGYWN0b3J5PC9yZXMtcmVmLW5hbWU+Ci0JICAgIDxqbmRpLW5hbWU+ZWlzL1NPQVI8L2puZGktbmFtZT4KKyAgICAgICAgPHJlcy1yZWYtbmFtZT5TMWFzSmF4ckZhY3Rvcnk8L3Jlcy1yZWYtbmFtZT4KKyAgICAgICAgPGpuZGktbmFtZT5laXMvU09BUjwvam5kaS1uYW1lPgogICAgIDwvcmVzb3VyY2UtcmVmPgogICAgIDwvZWpiPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qYXhyL3NvYXIvamF4ci9KYXhyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9zb2FyL2pheHIvSmF4ckJlYW4uamF2YQppbmRleCAzMTY3ODAwLi5jZGMwM2U5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qYXhyL3NvYXIvamF4ci9KYXhyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pheHIvc29hci9qYXhyL0pheHJCZWFuLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgamF4cjsKIAogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTM5LDEwNyArMzksMTA3IEBACiAgICAgU3RyaW5nIHVzZXJuYW1lID0gImpheHJzcWEzYSI7CiAgICAgU3RyaW5nIHBhc3N3b3JkID0gInRlc3RwYXNzIjsKICAgICBwdWJsaWMgSmF4ckJlYW4oKXt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQl0cnl7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIiBJTiBFSkJDUkVBVEUgIik7IAotCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICAKLSAJICAgIFN0cmluZyB1c2VybmFtZSA9ICJqYXhyc3FhMWEiOworICAgIHRyeXsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiIElOIEVKQkNSRUFURSAiKTsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKworICAgICAgICAgU3RyaW5nIHVzZXJuYW1lID0gImpheHJzcWExYSI7CiAgICAgICAgICAgICAvLyAoU3RyaW5nKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi91c2VybmFtZSIpOwotIAkgICAgU3RyaW5nIHBhc3N3b3JkID0gInRlc3RwYXNzIjsKKyAgICAgICAgIFN0cmluZyBwYXNzd29yZCA9ICJ0ZXN0cGFzcyI7CiAgICAgICAgICAgICAvLyAoU3RyaW5nKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9wYXNzd29yZCIpOwotCSAgICAvL1N0cmluZyByZWd1cmwgPSAgImh0dHA6Ly9qZXMtcmVnaXN0cnkuZWFzdC5zdW4uY29tOjkwODAvb21hci9yZWdpc3RyeS9zb2FwIjsKKyAgICAgICAgLy9TdHJpbmcgcmVndXJsID0gICJodHRwOi8vamVzLXJlZ2lzdHJ5LmVhc3Quc3VuLmNvbTo5MDgwL29tYXIvcmVnaXN0cnkvc29hcCI7CiAgICAgICAgICAgICAvLyhTdHJpbmcpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L0pheHJRdWVyeVVSTCIpOwotCSAgICAvL1N0cmluZyByZWd1cmxwID0gImh0dHBzOi8vdWRkaS5pYm0uY29tL3Rlc3RyZWdpc3RyeS9wdWJsaXNoYXBpIjsKKyAgICAgICAgLy9TdHJpbmcgcmVndXJscCA9ICJodHRwczovL3VkZGkuaWJtLmNvbS90ZXN0cmVnaXN0cnkvcHVibGlzaGFwaSI7CiAgICAgICAgICAgICAvLyhTdHJpbmcpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L0pheHJRdWVyeVVSTCIpOwotCSAgICBTdHJpbmcgaHR0cFByb3h5SG9zdCA9ICJ3ZWJjYWNoZS5zZmJheS5zdW4uY29tIjsKKyAgICAgICAgU3RyaW5nIGh0dHBQcm94eUhvc3QgPSAid2ViY2FjaGUuc2ZiYXkuc3VuLmNvbSI7CiAgICAgICAgICAgICAvLyhTdHJpbmcpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L0pheHJQcm94eUhvc3QiKTsKLQkgICAgU3RyaW5nIGh0dHBQcm94eVBvcnQgPSAiODA4MCI7CisgICAgICAgIFN0cmluZyBodHRwUHJveHlQb3J0ID0gIjgwODAiOwogICAgICAgICAgICAgLy8oU3RyaW5nKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9KYXhyUHJveHlQb3J0Iik7OwotCSAgICAKLQkgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JICAgIC8qcHJvcHMuc2V0UHJvcGVydHkoImphdmF4LnhtbC5yZWdpc3RyeS5xdWVyeU1hbmFnZXJVUkwiLCByZWd1cmwpOwotCSAgICBwcm9wcy5zZXRQcm9wZXJ0eSgiamF2YXgueG1sLnJlZ2lzdHJ5LmxpZmVDeWNsZU1hbmFnZXJVUkwiLCByZWd1cmwpOwotCSAgICBwcm9wcy5zZXRQcm9wZXJ0eSgiY29tLnN1bi54bWwucmVnaXN0cnkuaHR0cHMucHJveHlIb3N0IiwgaHR0cFByb3h5SG9zdCk7Ci0JICAgIHByb3BzLnNldFByb3BlcnR5KCJjb20uc3VuLnhtbC5yZWdpc3RyeS5odHRwLnByb3h5SG9zdCIsIGh0dHBQcm94eUhvc3QpOwotCSAgICBwcm9wcy5zZXRQcm9wZXJ0eSgiY29tLnN1bi54bWwucmVnaXN0cnkuaHR0cHMucHJveHlQb3J0IiwgaHR0cFByb3h5UG9ydCk7Ci0JICAgIHByb3BzLnNldFByb3BlcnR5KCJjb20uc3VuLnhtbC5yZWdpc3RyeS5odHRwLnByb3h5UG9ydCIsIGh0dHBQcm94eVBvcnQpOwotCSAgICAqLwotCSAgICBjbmZjdCA9IChqYXZheC54bWwucmVnaXN0cnkuQ29ubmVjdGlvbkZhY3RvcnkpaWMubG9va3VwKCJlaXMvU09BUiIpOwotCSAgICAvL2NuZmN0ID0gKGNvbS5zdW4uamF4ci5yYS5lYnhtbC5KYXhyQ29ubmVjdGlvbkZhY3RvcnkpaWNuZmN0OwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgQ29ubmVjdGlvbiBGYWN0b3J5ID0gIitjbmZjdCk7IAotCSAgICBjbmZjdC5zZXRQcm9wZXJ0aWVzKHByb3BzKTsJICAgIAotCX0gY2F0Y2goSkFYUkV4Y2VwdGlvbiBlKXsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgdGhyb3cgbmV3IFJlbW90ZUV4Y2VwdGlvbigiQ2Fubm90IGluc3RhbnRpYXRlIHRoZSBmYWN0b3J5ICIgLGUpOwotCX0gY2F0Y2goRXhjZXB0aW9uIGUpewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB0aHJvdyBuZXcgUmVtb3RlRXhjZXB0aW9uKCJFcnJvciBpbiBlamJDcmVhdGUgISEhIiwgZSk7Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gZWpiQ3JlYXRlICEhIC0gY3JlYXRlZCBDb25uZWN0aW9uRmFjdG9yeSAiKTsKKworICAgICAgICBQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKyAgICAgICAgLypwcm9wcy5zZXRQcm9wZXJ0eSgiamF2YXgueG1sLnJlZ2lzdHJ5LnF1ZXJ5TWFuYWdlclVSTCIsIHJlZ3VybCk7CisgICAgICAgIHByb3BzLnNldFByb3BlcnR5KCJqYXZheC54bWwucmVnaXN0cnkubGlmZUN5Y2xlTWFuYWdlclVSTCIsIHJlZ3VybCk7CisgICAgICAgIHByb3BzLnNldFByb3BlcnR5KCJjb20uc3VuLnhtbC5yZWdpc3RyeS5odHRwcy5wcm94eUhvc3QiLCBodHRwUHJveHlIb3N0KTsKKyAgICAgICAgcHJvcHMuc2V0UHJvcGVydHkoImNvbS5zdW4ueG1sLnJlZ2lzdHJ5Lmh0dHAucHJveHlIb3N0IiwgaHR0cFByb3h5SG9zdCk7CisgICAgICAgIHByb3BzLnNldFByb3BlcnR5KCJjb20uc3VuLnhtbC5yZWdpc3RyeS5odHRwcy5wcm94eVBvcnQiLCBodHRwUHJveHlQb3J0KTsKKyAgICAgICAgcHJvcHMuc2V0UHJvcGVydHkoImNvbS5zdW4ueG1sLnJlZ2lzdHJ5Lmh0dHAucHJveHlQb3J0IiwgaHR0cFByb3h5UG9ydCk7CisgICAgICAgICovCisgICAgICAgIGNuZmN0ID0gKGphdmF4LnhtbC5yZWdpc3RyeS5Db25uZWN0aW9uRmFjdG9yeSlpYy5sb29rdXAoImVpcy9TT0FSIik7CisgICAgICAgIC8vY25mY3QgPSAoY29tLnN1bi5qYXhyLnJhLmVieG1sLkpheHJDb25uZWN0aW9uRmFjdG9yeSlpY25mY3Q7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIiBDb25uZWN0aW9uIEZhY3RvcnkgPSAiK2NuZmN0KTsKKyAgICAgICAgY25mY3Quc2V0UHJvcGVydGllcyhwcm9wcyk7CisgICAgfSBjYXRjaChKQVhSRXhjZXB0aW9uIGUpeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB0aHJvdyBuZXcgUmVtb3RlRXhjZXB0aW9uKCJDYW5ub3QgaW5zdGFudGlhdGUgdGhlIGZhY3RvcnkgIiAsZSk7CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSl7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHRocm93IG5ldyBSZW1vdGVFeGNlcHRpb24oIkVycm9yIGluIGVqYkNyZWF0ZSAhISEiLCBlKTsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJDcmVhdGUgISEgLSBjcmVhdGVkIENvbm5lY3Rpb25GYWN0b3J5ICIpOwogICAgIH0KIAogCi0gICAgcHVibGljIFN0cmluZyBnZXRDb21wYW55SW5mb3JtYXRpb24oU3RyaW5nIGNvbXBhbnkpIHRocm93cyBFSkJFeGNlcHRpb24sIAotCQkJCQkJCSAgICAgICBSZW1vdGVFeGNlcHRpb257Ci0JaWYoY25mY3QgPT0gbnVsbCl7Ci0JICAgIHJldHVybiAiQ29ubmVjdGlvbkZhY3Rvcnkgd2FzIG5vdCBpbnN0YW50aWF0ZWQuIFRlc3QgRmFpbGVkIjsKLQl9Ci0JaWYoY29tcGFueSA9PSBudWxsKQotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJDb21wYW55IG5hbWUgbm90IHNwZWNpZmllZCIpOwotCS8vIGNyZWF0ZSBhIGpheHIgY29ubmVjdGlvbiBpbnN0YW5jZQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcGFueUluZm9ybWF0aW9uKFN0cmluZyBjb21wYW55KSB0aHJvd3MgRUpCRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdGVFeGNlcHRpb257CisgICAgaWYoY25mY3QgPT0gbnVsbCl7CisgICAgICAgIHJldHVybiAiQ29ubmVjdGlvbkZhY3Rvcnkgd2FzIG5vdCBpbnN0YW50aWF0ZWQuIFRlc3QgRmFpbGVkIjsKKyAgICB9CisgICAgaWYoY29tcGFueSA9PSBudWxsKQorICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJDb21wYW55IG5hbWUgbm90IHNwZWNpZmllZCIpOworICAgIC8vIGNyZWF0ZSBhIGpheHIgY29ubmVjdGlvbiBpbnN0YW5jZQogCiAgICAgICAgIHRyeSB7Ci0JICAgIC8vCSAgICBTeXN0ZW0uc2V0UHJvcGVydHkoIm9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLnNpbXBsZWxvZy5sb2cuY29tLnN1bi54bWwucmVnaXN0cnkiLCAidHJhY2UiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuICgiIENvbm5lY3Rpb24gZmFjdG9yeSA9ICIrIGNuZmN0KTsgCisgICAgICAgIC8vICAgICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoIm9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLnNpbXBsZWxvZy5sb2cuY29tLnN1bi54bWwucmVnaXN0cnkiLCAidHJhY2UiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiIENvbm5lY3Rpb24gZmFjdG9yeSA9ICIrIGNuZmN0KTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgR2V0dGluZyBjb25uZWN0aW9uIik7IAotCQljb20uc3VuLmpheHIucmEuZWJ4bWwuSmF4ckNvbm5lY3Rpb25GYWN0b3J5IGpjZiAKLQkJCT0gKGNvbS5zdW4uamF4ci5yYS5lYnhtbC5KYXhyQ29ubmVjdGlvbkZhY3RvcnkpIGNuZmN0OwotCSAgICBjb24gPSBqY2YuZ2V0Q29ubmVjdGlvbigpOwotLy8JICAgIGNvbiA9IGNuZmN0LmNyZWF0ZUNvbm5lY3Rpb24oKTsKLQkgICAgaWYgKGNvbiA9PSBudWxsKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbiAoIiBDb25uZWN0aW9uIGlzIG51bGwiKTsKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiQ29ubmVjdGlvbiBjb3VsZCBub3QgYmUgY3JlYXRlZCIpOwotCSAgICB9Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHRoZSBjb25uZWN0aW9uID0gIisgY29uKTsKLQkgICAgUmVnaXN0cnlTZXJ2aWNlIHJzID0gY29uLmdldFJlZ2lzdHJ5U2VydmljZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCB0aGUgcmVnaXN0cnkgc2VydmljZSA9ICIrIHJzKTsKLQkgICAgQnVzaW5lc3NRdWVyeU1hbmFnZXIgYnFtID0gcnMuZ2V0QnVzaW5lc3NRdWVyeU1hbmFnZXIoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuICgiIEJ1c2luZXNzIFF1ZXJ5IE1hbmFnZXIgPSAiK2JxbSk7IAotCSAgICBBcnJheUxpc3QgbmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICAgIG5hbWVzLmFkZChjb21wYW55KTsKLQkgICAgCi0JICAgIENvbGxlY3Rpb24gZnF1YWxpZmllcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICAgIGZxdWFsaWZpZXJzLmFkZChGaW5kUXVhbGlmaWVyLlNPUlRfQllfTkFNRV9ERVNDKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuICgiIEJlZm9yZSBmaW5kT3JnYW5pemF0aW9ucyAiKTsgCi0JICAgIEJ1bGtSZXNwb25zZSBiciA9IGJxbS5maW5kT3JnYW5pemF0aW9ucyhmcXVhbGlmaWVycywgbmFtZXMsIG51bGwsCi0JCQkJCQkgICAgbnVsbCwgbnVsbCwgbnVsbCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIiBHZXR0aW5nIGNvbm5lY3Rpb24iKTsKKyAgICAgICAgY29tLnN1bi5qYXhyLnJhLmVieG1sLkpheHJDb25uZWN0aW9uRmFjdG9yeSBqY2YKKyAgICAgICAgICAgID0gKGNvbS5zdW4uamF4ci5yYS5lYnhtbC5KYXhyQ29ubmVjdGlvbkZhY3RvcnkpIGNuZmN0OworICAgICAgICBjb24gPSBqY2YuZ2V0Q29ubmVjdGlvbigpOworLy8gICAgICAgIGNvbiA9IGNuZmN0LmNyZWF0ZUNvbm5lY3Rpb24oKTsKKyAgICAgICAgaWYgKGNvbiA9PSBudWxsKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIiBDb25uZWN0aW9uIGlzIG51bGwiKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiQ29ubmVjdGlvbiBjb3VsZCBub3QgYmUgY3JlYXRlZCIpOworICAgICAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHRoZSBjb25uZWN0aW9uID0gIisgY29uKTsKKyAgICAgICAgUmVnaXN0cnlTZXJ2aWNlIHJzID0gY29uLmdldFJlZ2lzdHJ5U2VydmljZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCB0aGUgcmVnaXN0cnkgc2VydmljZSA9ICIrIHJzKTsKKyAgICAgICAgQnVzaW5lc3NRdWVyeU1hbmFnZXIgYnFtID0gcnMuZ2V0QnVzaW5lc3NRdWVyeU1hbmFnZXIoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiIEJ1c2luZXNzIFF1ZXJ5IE1hbmFnZXIgPSAiK2JxbSk7CisgICAgICAgIEFycmF5TGlzdCBuYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKKyAgICAgICAgbmFtZXMuYWRkKGNvbXBhbnkpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIiBCdWxrIFJlc3BvbnNlID0gIiticik7IAotCSAgICBpZihici5nZXRTdGF0dXMoKSA9PSBKQVhSUmVzcG9uc2UuU1RBVFVTX1NVQ0NFU1MpewotCQlTeXN0ZW0ub3V0LnByaW50bG4gKCIgUmVzdWx0cyBmb3VuZCBmb3IgKCIrY29tcGFueSsiKSIpOwotCQlDb2xsZWN0aW9uIG9yZ3MgPSBici5nZXRDb2xsZWN0aW9uKCk7Ci0JCUl0ZXJhdG9yIHJpdCA9IG9yZ3MuaXRlcmF0b3IoKTsKLQkJd2hpbGUocml0Lmhhc05leHQoKSl7Ci0JCSAgICBPcmdhbml6YXRpb24gb3JnID0gKE9yZ2FuaXphdGlvbilyaXQubmV4dCgpOwotCQkgICAgcmVzdWx0LmFwcGVuZChvcmcuZ2V0TmFtZSgpLmdldFZhbHVlKCkrIlxuIik7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgTmFtZSA9ICIrb3JnLmdldE5hbWUoKS5nZXRWYWx1ZSgpKTsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkRlc2NyaXB0aW9uID0gIisgb3JnLmdldERlc2NyaXB0aW9uKCkuZ2V0VmFsdWUoKSk7Ci0JCSAgICByZXN1bHQuYXBwZW5kKG9yZy5nZXREZXNjcmlwdGlvbigpLmdldFZhbHVlKCkrIlxuXG4iKTsKLQkJfQotCQkKLQkgICAgfSBlbHNlewotCQlTeXN0ZW0ub3V0LnByaW50bG4gKCIgQ291bGQgbm90IHF1ZXJ5IHRoZSByZWdpc3RyeSBkdWUgdG8gdGhlIGZvbGxvd2luZyBleGNlcHRpb25zIDoiKTsgCi0JCUNvbGxlY3Rpb24gZXggPSBici5nZXRFeGNlcHRpb25zKCk7Ci0JCUl0ZXJhdG9yIGl0ID0gZXguaXRlcmF0b3IoKTsKLQkJd2hpbGUoaXQuaGFzTmV4dCgpKXsKLQkJICAgIEV4Y2VwdGlvbiBlID0gKEV4Y2VwdGlvbikgaXQubmV4dCgpOwotCQkgICAgU3lzdGVtLm91dC5wcmludGxuIChlLnRvU3RyaW5nKCkpOyAKLQkJICAgIHJlc3VsdC5hcHBlbmQoZS50b1N0cmluZygpKTsKLQkJfQotCSAgICB9CisgICAgICAgIENvbGxlY3Rpb24gZnF1YWxpZmllcnMgPSBuZXcgQXJyYXlMaXN0KCk7CisgICAgICAgIGZxdWFsaWZpZXJzLmFkZChGaW5kUXVhbGlmaWVyLlNPUlRfQllfTkFNRV9ERVNDKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiIEJlZm9yZSBmaW5kT3JnYW5pemF0aW9ucyAiKTsKKyAgICAgICAgQnVsa1Jlc3BvbnNlIGJyID0gYnFtLmZpbmRPcmdhbml6YXRpb25zKGZxdWFsaWZpZXJzLCBuYW1lcywgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsKTsKKworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgQnVsayBSZXNwb25zZSA9ICIrYnIpOworICAgICAgICBpZihici5nZXRTdGF0dXMoKSA9PSBKQVhSUmVzcG9uc2UuU1RBVFVTX1NVQ0NFU1MpeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgUmVzdWx0cyBmb3VuZCBmb3IgKCIrY29tcGFueSsiKSIpOworICAgICAgICBDb2xsZWN0aW9uIG9yZ3MgPSBici5nZXRDb2xsZWN0aW9uKCk7CisgICAgICAgIEl0ZXJhdG9yIHJpdCA9IG9yZ3MuaXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUocml0Lmhhc05leHQoKSl7CisgICAgICAgICAgICBPcmdhbml6YXRpb24gb3JnID0gKE9yZ2FuaXphdGlvbilyaXQubmV4dCgpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChvcmcuZ2V0TmFtZSgpLmdldFZhbHVlKCkrIlxuIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgTmFtZSA9ICIrb3JnLmdldE5hbWUoKS5nZXRWYWx1ZSgpKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkRlc2NyaXB0aW9uID0gIisgb3JnLmdldERlc2NyaXB0aW9uKCkuZ2V0VmFsdWUoKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG9yZy5nZXREZXNjcmlwdGlvbigpLmdldFZhbHVlKCkrIlxuXG4iKTsKKyAgICAgICAgfQorCisgICAgICAgIH0gZWxzZXsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiIENvdWxkIG5vdCBxdWVyeSB0aGUgcmVnaXN0cnkgZHVlIHRvIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucyA6Iik7CisgICAgICAgIENvbGxlY3Rpb24gZXggPSBici5nZXRFeGNlcHRpb25zKCk7CisgICAgICAgIEl0ZXJhdG9yIGl0ID0gZXguaXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUoaXQuaGFzTmV4dCgpKXsKKyAgICAgICAgICAgIEV4Y2VwdGlvbiBlID0gKEV4Y2VwdGlvbikgaXQubmV4dCgpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuIChlLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChlLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gcHVibGlzaCB0byB0aGUgcmVnaXN0cnkuLi4KICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIC0tLS0gUHVibGlzaGluZyBJbmZvcm1hdGlvbiB0byByZWdpc3RyeSAtLS0iKTsKQEAgLTE0NywxMyArMTQ3LDEzIEBACiAgICAgICAgICAgICBjcmVhdGVPcmcoIlNKU0FTIiwgcnMpOwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgVGVzdCBGYWlsZWQiKTsKLQkgICAgcmVzdWx0LmFwcGVuZCgiVGVzdCBGYWlsZWQiKTsKLQkgICAgdGhyb3cgbmV3IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbihleC50b1N0cmluZygpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiIFRlc3QgRmFpbGVkIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIlRlc3QgRmFpbGVkIik7CisgICAgICAgIHRocm93IG5ldyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24oZXgudG9TdHJpbmcoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogICAgIH0KLSAgICAJCisKICAgICBwcml2YXRlIHZvaWQgY3JlYXRlT3JnKFN0cmluZyBuYW1lLCBSZWdpc3RyeVNlcnZpY2UgcnMpIHRocm93cyBFeGNlcHRpb257CiAgICAgICAgIEJ1c2luZXNzTGlmZUN5Y2xlTWFuYWdlciBibGNtID0gcnMuZ2V0QnVzaW5lc3NMaWZlQ3ljbGVNYW5hZ2VyKCk7CiAgICAgICAgIE9yZ2FuaXphdGlvbiBvcmcgPSBibGNtLmNyZWF0ZU9yZ2FuaXphdGlvbihuYW1lKTsKQEAgLTE2Niw0MSArMTY2LDQxIEBACiAgICAgICAgIG9yZ3MuYWRkKG9yZyk7CiAgICAgICAgIEJ1bGtSZXNwb25zZSByZXNwb25zZSA9IGJsY20uc2F2ZU9yZ2FuaXphdGlvbnMob3Jncyk7CiAgICAgICAgIENvbGxlY3Rpb24gZXhjZXB0aW9ucyA9IHJlc3BvbnNlLmdldEV4Y2VwdGlvbnMoKTsKLQlDb2xsZWN0aW9uIGtleXMgPSBudWxsOwotCQorICAgIENvbGxlY3Rpb24ga2V5cyA9IG51bGw7CisKICAgICAgICAgaWYgKGV4Y2VwdGlvbnMgPT0gbnVsbCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJPcmdhbml6YXRpb24gc2F2ZWQiKTsKIAogICAgICAgICAgICAga2V5cyA9IHJlc3BvbnNlLmdldENvbGxlY3Rpb24oKTsKICAgICAgICAgICAgIEl0ZXJhdG9yIGtleUl0ZXIgPSBrZXlzLml0ZXJhdG9yKCk7CiAgICAgICAgICAgICBpZiAoa2V5SXRlci5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgICAgICBqYXZheC54bWwucmVnaXN0cnkuaW5mb21vZGVsLktleSBvcmdLZXkgPSAKKyAgICAgICAgICAgICAgICBqYXZheC54bWwucmVnaXN0cnkuaW5mb21vZGVsLktleSBvcmdLZXkgPQogICAgICAgICAgICAgICAgICAgICAoamF2YXgueG1sLnJlZ2lzdHJ5LmluZm9tb2RlbC5LZXkpIGtleUl0ZXIubmV4dCgpOwogICAgICAgICAgICAgICAgIFN0cmluZyBpZCA9IG9yZ0tleS5nZXRJZCgpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLSBPcmdhbml6YXRpb24ga2V5IGlzICIgKyBpZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiT3JnYW5pemF0aW9uIENvdWxkIG5vdCBiZSBzYXZlZCEiKTsKLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJEZWxldGluZyB0aGUgT1JHIG5vdyIpOwotCXJlc3BvbnNlID0gYmxjbS5kZWxldGVPcmdhbml6YXRpb25zKGtleXMpOwotCWV4Y2VwdGlvbnMgPSByZXNwb25zZS5nZXRFeGNlcHRpb25zKCk7Ci0JaWYoZXhjZXB0aW9ucyA9PSBudWxsKXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJPcmdhbml6YXRpb24gRGVsZXRlZCBTdWNjZXNzZnVsbHkiKTsKLQl9ZWxzZXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJPcmdhbml6YXRpb24gQ291bGQgbm90IGJlIGRlbGV0ZWQiKTsKLQl9Ci19IAotICAgIAotICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT3JnYW5pemF0aW9uIENvdWxkIG5vdCBiZSBzYXZlZCEiKTsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWxldGluZyB0aGUgT1JHIG5vdyIpOworICAgIHJlc3BvbnNlID0gYmxjbS5kZWxldGVPcmdhbml6YXRpb25zKGtleXMpOworICAgIGV4Y2VwdGlvbnMgPSByZXNwb25zZS5nZXRFeGNlcHRpb25zKCk7CisgICAgaWYoZXhjZXB0aW9ucyA9PSBudWxsKXsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJPcmdhbml6YXRpb24gRGVsZXRlZCBTdWNjZXNzZnVsbHkiKTsKKyAgICB9ZWxzZXsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJPcmdhbml6YXRpb24gQ291bGQgbm90IGJlIGRlbGV0ZWQiKTsKKyAgICB9Cit9CisKKwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JCisKICAgICAgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qYXhyL3NvYXIvamF4ci9KYXhyQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qYXhyL3NvYXIvamF4ci9KYXhyQ2xpZW50LmphdmEKaW5kZXggMGI3ZWMxYS4uMWZkYWFkNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamF4ci9zb2FyL2pheHIvSmF4ckNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pheHIvc29hci9qYXhyL0pheHJDbGllbnQuamF2YQpAQCAtMzUsNyArMzUsNyBAQAogICAgICAgICBKYXhyQ2xpZW50IGNsaWVudCA9IG5ldyBKYXhyQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIEpheHJDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMykgewogICAgICAgICAgICAgICAgIHVybCA9IGFyZ3NbMF07CkBAIC00NSwxMCArNDUsMTAgQEAKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdCgpIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHJlcyA9ICJmYWlsIjsKLSAgICAgICAgCi0gICAgCXRyeSB7ICAgICAgICAgIAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgUHJvcGVydGllcyBlbnYgPSBuZXcgUHJvcGVydGllcygpOwogICAgICAgICAgICAgICAgIGVudi5wdXQoImphdmEubmFtaW5nLnByb3ZpZGVyLnVybCIsIHVybCk7CiAgICAgICAgICAgICAgICAgZW52LnB1dCgiamF2YS5uYW1pbmcuZmFjdG9yeS5pbml0aWFsIiwgY3R4RmFjdG9yeSk7CkBAIC01OSwzNyArNTksMzcgQEAKICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgSG9tZSBvYmplY3QKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqIitqbmRpTmFtZSk7CiAgICAgICAgICAgICAgICAgamF2YS5sYW5nLk9iamVjdCBvYmogPSBjb250ZXh0Lmxvb2t1cChqbmRpTmFtZSk7Ci0gICAgICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lcgogICAgICAgICAgICAgICAgIC8vamF2YS5sYW5nLk9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoIk15SmF4ciIpOwogCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7CiAKICAgICAgICAgICAgICAgICBKYXhySG9tZSAgaG9tZSA9IChKYXhySG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3coCi0JCQkgICAgICAgICAgICAgICAgICAgICBvYmosIEpheHJIb21lLmNsYXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaiwgSmF4ckhvbWUuY2xhc3MpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7CiAKICAgICAgICAgICAgICAgICBKYXhyUmVtb3RlIGhyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKIAogICAgICAgICAgICAgICAgIC8vIGludm9rZSBtZXRob2Qgb24gdGhlIEVKQgotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIiBMb29raW5nIHVwIGNvbXBhbnkgaW5mb3JtYXRpb24gZm9yICIrY29tcGFueSk7IAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIiBMb29raW5nIHVwIGNvbXBhbnkgaW5mb3JtYXRpb24gZm9yICIrY29tcGFueSk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGhyLmdldENvbXBhbnlJbmZvcm1hdGlvbihjb21wYW55KSk7CiAgICAgICAgICAgICAgICAgaHIucmVtb3ZlKCk7Ci0JfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpeworICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IGV4Y2VwdGlvbiB3aGlsZSBpbml0aWFsaXppbmcgY29udGV4dC5cbiIpOwogICAgICAgICAgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIiBUZXN0IEZhaWxlZCAhIik7IAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgVGVzdCBGYWlsZWQgISIpOwogICAgICAgICAgICAgcmV0dXJuIHJlczsKLQl9IGNhdGNoKEV4Y2VwdGlvbiByZSkgeworICAgIH0gY2F0Y2goRXhjZXB0aW9uIHJlKSB7CiAgICAgICAgICAgICByZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuICgiIFRlc3QgRmFpbGVkICEiKTsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIiBUZXN0IEZhaWxlZCAhIik7CiAgICAgICAgICAgICByZXR1cm4gcmVzOwotCX0gCi0gICAgICAgIHJlcyA9ICJwYXNzIjsKLQlTeXN0ZW0ub3V0LnByaW50bG4gKCIgVGVzdCBQYXNzZWQgISIpOyAKLSAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgCiAgICAgfQotICAgIAorICAgICAgICByZXMgPSAicGFzcyI7CisgICAgU3lzdGVtLm91dC5wcmludGxuICgiIFRlc3QgUGFzc2VkICEiKTsKKyAgICAgICAgcmV0dXJuIHJlczsKKworICAgIH0KKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qcGEtaW50ZWdyYXRpb24vdG9wbGluay1lc3NlbnRpYWxzL2FkdmFuY2VkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qcGEtaW50ZWdyYXRpb24vdG9wbGluay1lc3NlbnRpYWxzL2FkdmFuY2VkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzNkMDVlZi4uNzFiYjc0ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvanBhLWludGVncmF0aW9uL3RvcGxpbmstZXNzZW50aWFscy9hZHZhbmNlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pwYS1pbnRlZ3JhdGlvbi90b3BsaW5rLWVzc2VudGlhbHMvYWR2YW5jZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iZWpiMzAtdG9wbGluay1lc3NlbnRpYWxzLWFkdmFuY2VkIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImVqYjMwLXRvcGxpbmstZXNzZW50aWFscy1hZHZhbmNlZCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0icGVyc2lzdGVuY2UueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiMzAtcGVyc2lzdGVuY2UiIHZhbHVlPSJ0cnVlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qcGEtaW50ZWdyYXRpb24vdG9wbGluay1lc3NlbnRpYWxzL2FkdmFuY2VkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pwYS1pbnRlZ3JhdGlvbi90b3BsaW5rLWVzc2VudGlhbHMvYWR2YW5jZWQvYnVpbGQueG1sCmluZGV4IDc0N2Y0NTYuLjc2Zjc5NWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pwYS1pbnRlZ3JhdGlvbi90b3BsaW5rLWVzc2VudGlhbHMvYWR2YW5jZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pwYS1pbnRlZ3JhdGlvbi90b3BsaW5rLWVzc2VudGlhbHMvYWR2YW5jZWQvYnVpbGQueG1sCkBAIC02OSwxMCArNjksMTAgQEAKICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9Im9yYWNsZS90b3BsaW5rL2Vzc2VudGlhbHMvdGVzdGluZy9tb2RlbHMvY21wMy9hZHZhbmNlZC8qLmNsYXNzIgogICAgICAgICAgICAgICAvPgogICAgICAgICA8L2phcj4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8cGF0aCBpZD0icnVuLmNwIj4KIDwhLS0gJHtidWlsZC5jbGFzc2VzLmRpcn0gbm90IGRlZmluZWQgZHVyaW5nIHJ1biB0YXJnZXQ/Pz8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pwYS1pbnRlZ3JhdGlvbi90b3BsaW5rLWVzc2VudGlhbHMvYWR2YW5jZWQvZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qcGEtaW50ZWdyYXRpb24vdG9wbGluay1lc3NlbnRpYWxzL2FkdmFuY2VkL2Rlc2NyaXB0b3IvcGVyc2lzdGVuY2UueG1sCmluZGV4IDViMWJhMmUuLmNkMmI4OTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pwYS1pbnRlZ3JhdGlvbi90b3BsaW5rLWVzc2VudGlhbHMvYWR2YW5jZWQvZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvanBhLWludGVncmF0aW9uL3RvcGxpbmstZXNzZW50aWFscy9hZHZhbmNlZC9kZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbApAQCAtMjQsOCArMjQsOCBAQAogICAgICAgICA8Y2xhc3M+b3JhY2xlLnRvcGxpbmsuZXNzZW50aWFscy50ZXN0aW5nLm1vZGVscy5jbXAzLmFkdmFuY2VkLkVtcGxveW1lbnRQZXJpb2Q8L2NsYXNzPgogICAgICAgICA8Y2xhc3M+b3JhY2xlLnRvcGxpbmsuZXNzZW50aWFscy50ZXN0aW5nLm1vZGVscy5jbXAzLmFkdmFuY2VkLkxhcmdlUHJvamVjdDwvY2xhc3M+CiAgICAgICAgIDxjbGFzcz5vcmFjbGUudG9wbGluay5lc3NlbnRpYWxzLnRlc3RpbmcubW9kZWxzLmNtcDMuYWR2YW5jZWQuUGhvbmVOdW1iZXI8L2NsYXNzPgotICAgICAgICA8Y2xhc3M+b3JhY2xlLnRvcGxpbmsuZXNzZW50aWFscy50ZXN0aW5nLm1vZGVscy5jbXAzLmFkdmFuY2VkLlByb2plY3Q8L2NsYXNzPiAKLSAgICAgICAgPGNsYXNzPm9yYWNsZS50b3BsaW5rLmVzc2VudGlhbHMudGVzdGluZy5tb2RlbHMuY21wMy5hZHZhbmNlZC5TbWFsbFByb2plY3Q8L2NsYXNzPiAKKyAgICAgICAgPGNsYXNzPm9yYWNsZS50b3BsaW5rLmVzc2VudGlhbHMudGVzdGluZy5tb2RlbHMuY21wMy5hZHZhbmNlZC5Qcm9qZWN0PC9jbGFzcz4KKyAgICAgICAgPGNsYXNzPm9yYWNsZS50b3BsaW5rLmVzc2VudGlhbHMudGVzdGluZy5tb2RlbHMuY21wMy5hZHZhbmNlZC5TbWFsbFByb2plY3Q8L2NsYXNzPgogICAgICAgICA8cHJvcGVydGllcz4KICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BsaW5rLmpkYmMuZHJpdmVyIiB2YWx1ZT0ib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERyaXZlciIvPgogICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcGxpbmsuamRiYy51cmwiIHZhbHVlPSJqZGJjOmRlcmJ5Oi8vbG9jYWxob3N0OjE1MjcvdGVzdGRiO3JldHJpZXZlTWVzc2FnZXNGcm9tU2VydmVyT25HZXRNZXNzYWdlPXRydWU7Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qcGEtaW50ZWdyYXRpb24vdG9wbGluay1lc3NlbnRpYWxzL2FkdmFuY2VkL2VqYi9BZGRyZXNzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qcGEtaW50ZWdyYXRpb24vdG9wbGluay1lc3NlbnRpYWxzL2FkdmFuY2VkL2VqYi9BZGRyZXNzLmphdmEKaW5kZXggODk5YTdkZS4uNTgwZDY2NCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvanBhLWludGVncmF0aW9uL3RvcGxpbmstZXNzZW50aWFscy9hZHZhbmNlZC9lamIvQWRkcmVzcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pwYS1pbnRlZ3JhdGlvbi90b3BsaW5rLWVzc2VudGlhbHMvYWR2YW5jZWQvZWpiL0FkZHJlc3MuamF2YQpAQCAtMzIsMjIgKzMyLDIyIEBACiBARW50aXR5CiBAVGFibGUobmFtZT0iQ01QM19BRERSRVNTIikKIEBOYW1lZE5hdGl2ZVF1ZXJ5KAotICAgIG5hbWU9ImZpbmRBbGxTUUxBZGRyZXNzZXMiLCAKKyAgICBuYW1lPSJmaW5kQWxsU1FMQWRkcmVzc2VzIiwKICAgICBxdWVyeT0ic2VsZWN0ICogZnJvbSBDTVAzX0FERFJFU1MiLAogICAgIHJlc3VsdENsYXNzPW9yYWNsZS50b3BsaW5rLmVzc2VudGlhbHMudGVzdGluZy5tb2RlbHMuY21wMy5hZHZhbmNlZC5BZGRyZXNzLmNsYXNzCiApCiBATmFtZWRRdWVyeSgKLSAgICBuYW1lPSJmaW5kQWxsQWRkcmVzc2VzQnlQb3N0YWxDb2RlIiwgCisgICAgbmFtZT0iZmluZEFsbEFkZHJlc3Nlc0J5UG9zdGFsQ29kZSIsCiAgICAgcXVlcnk9IlNFTEVDVCBPQkpFQ1QoYWRkcmVzcykgRlJPTSBBZGRyZXNzIGFkZHJlc3MgV0hFUkUgYWRkcmVzcy5wb3N0YWxDb2RlID0gOnBvc3RhbGNvZGUiCiApCiBwdWJsaWMgY2xhc3MgQWRkcmVzcyBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSB7Ci0JcHJpdmF0ZSBJbnRlZ2VyIGlkOwotCXByaXZhdGUgU3RyaW5nIHN0cmVldDsKLQlwcml2YXRlIFN0cmluZyBjaXR5OworICAgIHByaXZhdGUgSW50ZWdlciBpZDsKKyAgICBwcml2YXRlIFN0cmluZyBzdHJlZXQ7CisgICAgcHJpdmF0ZSBTdHJpbmcgY2l0eTsKICAgICBwcml2YXRlIFN0cmluZyBwcm92aW5jZTsKICAgICBwcml2YXRlIFN0cmluZyBwb3N0YWxDb2RlOwogICAgIHByaXZhdGUgU3RyaW5nIGNvdW50cnk7Ci0JcHJpdmF0ZSBDb2xsZWN0aW9uPEVtcGxveWVlPiBlbXBsb3llZXM7CisgICAgcHJpdmF0ZSBDb2xsZWN0aW9uPEVtcGxveWVlPiBlbXBsb3llZXM7CiAKICAgICBwdWJsaWMgQWRkcmVzcygpIHsKICAgICAgICAgY2l0eSA9ICIiOwpAQCAtNjcsNjUgKzY3LDY1IEBACiAgICAgICAgIHRoaXMuZW1wbG95ZWVzID0gbmV3IFZlY3RvcjxFbXBsb3llZT4oKTsKICAgICB9CiAKLQlASWQKKyAgICBASWQKICAgICBAR2VuZXJhdGVkVmFsdWUoc3RyYXRlZ3k9U0VRVUVOQ0UsIGdlbmVyYXRvcj0iQUREUkVTU19TRVFVRU5DRV9HRU5FUkFUT1IiKQotCUBTZXF1ZW5jZUdlbmVyYXRvcihuYW1lPSJBRERSRVNTX1NFUVVFTkNFX0dFTkVSQVRPUiIsIHNlcXVlbmNlTmFtZT0iQUREUkVTU19TRVEiLCBhbGxvY2F0aW9uU2l6ZT0yNSkKLQlAQ29sdW1uKG5hbWU9IkFERFJFU1NfSUQiKQotCXB1YmxpYyBJbnRlZ2VyIGdldElkKCkgeyAKLSAgICAgICAgcmV0dXJuIGlkOyAKLSAgICB9Ci0gICAgCi0JcHVibGljIHZvaWQgc2V0SWQoSW50ZWdlciBpZCkgeyAKLSAgICAgICAgdGhpcy5pZCA9IGlkOyAKKyAgICBAU2VxdWVuY2VHZW5lcmF0b3IobmFtZT0iQUREUkVTU19TRVFVRU5DRV9HRU5FUkFUT1IiLCBzZXF1ZW5jZU5hbWU9IkFERFJFU1NfU0VRIiwgYWxsb2NhdGlvblNpemU9MjUpCisgICAgQENvbHVtbihuYW1lPSJBRERSRVNTX0lEIikKKyAgICBwdWJsaWMgSW50ZWdlciBnZXRJZCgpIHsKKyAgICAgICAgcmV0dXJuIGlkOwogICAgIH0KIAotCXB1YmxpYyBTdHJpbmcgZ2V0U3RyZWV0KCkgeyAKLSAgICAgICAgcmV0dXJuIHN0cmVldDsgCi0gICAgfQotICAgIAotCXB1YmxpYyB2b2lkIHNldFN0cmVldChTdHJpbmcgc3RyZWV0KSB7IAotICAgICAgICB0aGlzLnN0cmVldCA9IHN0cmVldDsgCisgICAgcHVibGljIHZvaWQgc2V0SWQoSW50ZWdlciBpZCkgeworICAgICAgICB0aGlzLmlkID0gaWQ7CiAgICAgfQogCi0JcHVibGljIFN0cmluZyBnZXRDaXR5KCkgeyAKLSAgICAgICAgcmV0dXJuIGNpdHk7IAotICAgIH0KLSAgICAKLQlwdWJsaWMgdm9pZCBzZXRDaXR5KFN0cmluZyBjaXR5KSB7IAotICAgICAgICB0aGlzLmNpdHkgPSBjaXR5OyAKKyAgICBwdWJsaWMgU3RyaW5nIGdldFN0cmVldCgpIHsKKyAgICAgICAgcmV0dXJuIHN0cmVldDsKICAgICB9CiAKLQlwdWJsaWMgU3RyaW5nIGdldFByb3ZpbmNlKCkgeyAKLSAgICAgICAgcmV0dXJuIHByb3ZpbmNlOyAKLSAgICB9Ci0gICAgICAgIAotCXB1YmxpYyB2b2lkIHNldFByb3ZpbmNlKFN0cmluZyBwcm92aW5jZSkgeyAKLSAgICAgICAgdGhpcy5wcm92aW5jZSA9IHByb3ZpbmNlOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRTdHJlZXQoU3RyaW5nIHN0cmVldCkgeworICAgICAgICB0aGlzLnN0cmVldCA9IHN0cmVldDsKICAgICB9CiAKLQlAQ29sdW1uKG5hbWU9IlBfQ09ERSIpCi0JcHVibGljIFN0cmluZyBnZXRQb3N0YWxDb2RlKCkgeyAKLSAgICAgICAgcmV0dXJuIHBvc3RhbENvZGU7IAotICAgIH0KLSAgICAKLQlwdWJsaWMgdm9pZCBzZXRQb3N0YWxDb2RlKFN0cmluZyBwb3N0YWxDb2RlKSB7IAotICAgICAgICB0aGlzLnBvc3RhbENvZGUgPSBwb3N0YWxDb2RlOyAKKyAgICBwdWJsaWMgU3RyaW5nIGdldENpdHkoKSB7CisgICAgICAgIHJldHVybiBjaXR5OwogICAgIH0KIAotCXB1YmxpYyBTdHJpbmcgZ2V0Q291bnRyeSgpIHsgCi0gICAgICAgIHJldHVybiBjb3VudHJ5OyAKKyAgICBwdWJsaWMgdm9pZCBzZXRDaXR5KFN0cmluZyBjaXR5KSB7CisgICAgICAgIHRoaXMuY2l0eSA9IGNpdHk7CiAgICAgfQotICAgIAotCXB1YmxpYyB2b2lkIHNldENvdW50cnkoU3RyaW5nIGNvdW50cnkpIHsgCisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFByb3ZpbmNlKCkgeworICAgICAgICByZXR1cm4gcHJvdmluY2U7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0UHJvdmluY2UoU3RyaW5nIHByb3ZpbmNlKSB7CisgICAgICAgIHRoaXMucHJvdmluY2UgPSBwcm92aW5jZTsKKyAgICB9CisKKyAgICBAQ29sdW1uKG5hbWU9IlBfQ09ERSIpCisgICAgcHVibGljIFN0cmluZyBnZXRQb3N0YWxDb2RlKCkgeworICAgICAgICByZXR1cm4gcG9zdGFsQ29kZTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRQb3N0YWxDb2RlKFN0cmluZyBwb3N0YWxDb2RlKSB7CisgICAgICAgIHRoaXMucG9zdGFsQ29kZSA9IHBvc3RhbENvZGU7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRDb3VudHJ5KCkgeworICAgICAgICByZXR1cm4gY291bnRyeTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRDb3VudHJ5KFN0cmluZyBjb3VudHJ5KSB7CiAgICAgICAgIHRoaXMuY291bnRyeSA9IGNvdW50cnk7CiAgICAgfQotICAgIAotCUBPbmVUb01hbnkoY2FzY2FkZT1BTEwsIG1hcHBlZEJ5PSJhZGRyZXNzIikKLQlwdWJsaWMgQ29sbGVjdGlvbjxFbXBsb3llZT4gZ2V0RW1wbG95ZWVzKCkgeyAKLSAgICAgICAgcmV0dXJuIGVtcGxveWVlczsgCisKKyAgICBAT25lVG9NYW55KGNhc2NhZGU9QUxMLCBtYXBwZWRCeT0iYWRkcmVzcyIpCisgICAgcHVibGljIENvbGxlY3Rpb248RW1wbG95ZWU+IGdldEVtcGxveWVlcygpIHsKKyAgICAgICAgcmV0dXJuIGVtcGxveWVlczsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRFbXBsb3llZXMoQ29sbGVjdGlvbjxFbXBsb3llZT4gZW1wbG95ZWVzKSB7Ci0JCXRoaXMuZW1wbG95ZWVzID0gZW1wbG95ZWVzOwotCX0KKyAgICAgICAgdGhpcy5lbXBsb3llZXMgPSBlbXBsb3llZXM7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvanBhLWludGVncmF0aW9uL3RvcGxpbmstZXNzZW50aWFscy9hZHZhbmNlZC9lamIvRW1wbG95ZWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pwYS1pbnRlZ3JhdGlvbi90b3BsaW5rLWVzc2VudGlhbHMvYWR2YW5jZWQvZWpiL0VtcGxveWVlLmphdmEKaW5kZXggOGNmNzY5NS4uZTRmMDUxOCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvanBhLWludGVncmF0aW9uL3RvcGxpbmstZXNzZW50aWFscy9hZHZhbmNlZC9lamIvRW1wbG95ZWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qcGEtaW50ZWdyYXRpb24vdG9wbGluay1lc3NlbnRpYWxzL2FkdmFuY2VkL2VqYi9FbXBsb3llZS5qYXZhCkBAIC0zMSwxOCArMzEsMTggQEAKICAqIFByaW1hcnkga2V5IGNsYXNzOiBFbXBsb3llZVBLCiAgKiBIb21lIGludGVyZmFjZTogRW1wbG95ZWVIb21lCiAgKgotICogRW1wbG95ZWVzIGhhdmUgYSBvbmUtdG8tbWFueSByZWxhdGlvbnNoaXAgd2l0aCBFbXBsb3llZXMgdGhyb3VnaCB0aGUgCisgKiBFbXBsb3llZXMgaGF2ZSBhIG9uZS10by1tYW55IHJlbGF0aW9uc2hpcCB3aXRoIEVtcGxveWVlcyB0aHJvdWdoIHRoZQogICogbWFuYWdlZEVtcGxveWVlcyBhdHRyaWJ1dGUuCiAgKiBBZGRyZXNzZXMgZXhpc3QgaW4gb25lLXRvLW9uZSByZWxhdGlvbnNoaXBzIHdpdGggRW1wbG95ZWVzIHRocm91Z2ggdGhlCiAgKiBhZGRyZXNzIGF0dHJpYnV0ZS4KICAqIEVtcGxveWVlcyBoYXZlIGEgbWFueS10by1tYW55IHJlbGF0aW9uc2hpcCB3aXRoIFByb2plY3RzIHRocm91Z2ggdGhlCiAgKiBwcm9qZWN0cyBhdHRyaWJ1dGUuCi0gKiAgCisgKgogICogRW1wbG95ZWUgbm93IGhhcyBpbnZhbGlkIGFubm90YXRpb24gZmllbGRzIGFuZCBkYXRhLiBUaGlzIGlzIGRvbmUgc28gdGhhdAogICogd2UgbWF5IHRlc3QgdGhlIFhNTC9Bbm5vdGF0aW9uIG1lcmdpbmcuIEVtcGxveWVlIGhhcyBiZWVuIGRlZmluZWQgaW4gdGhlCiAgKiBYTUwsIHRoZXJlZm9yZSwgbW9zdCBhbm5vdGF0aW9ucyBzaG91bGQgbm90IGJlIHByb2Nlc3NlZC4gSWYgdGhleSBhcmUsIHRoZW4KICAqIHRoZXkgd2lsbCBmb3JjZSBhbiBlcnJvciwgd2hpY2ggbWVhbnMgc29tZXRoaW5nIGlzIHdyb25nIHdpdGggb3VyIG1lcmdpbmcuCi0gKiAgCisgKgogICogVGhlIGludmFsaWQgYW5ub3RhdGlvbnMgdGhhdCBzaG91bGQgbm90IGJlIHByb2Nlc3NlZCBoYXZlIF9JTlZBTElECiAgKiBhcHBlbmRlZCB0byBzb21lIGFubm90YXRpb24gZmllbGQgbWVtYmVyLiBPdGhlcnMgd2lsbCBub3QgaGF2ZSB0aGlzLAogICogd2hpY2ggbWVhbnMgdGhleSBzaG91bGQgYmUgcHJvY2Vzc2VkICh0aGVpciBtYXBwaW5ncyBhcmUgbm90IGRlZmluZWQgaW4gdGhlCkBAIC01NSwxNjYgKzU1LDE2NiBAQAogQFByaW1hcnlLZXlKb2luQ29sdW1uKG5hbWU9IkVNUF9JRCIsIHJlZmVyZW5jZWRDb2x1bW5OYW1lPSJFTVBfSUQiKQogQE5hbWVkUXVlcmllcyh7CiBATmFtZWRRdWVyeSgKLQluYW1lPSJmaW5kQWxsRW1wbG95ZWVzQnlGaXJzdE5hbWUiLAotCXF1ZXJ5PSJTRUxFQ1QgT0JKRUNUKGVtcGxveWVlKSBGUk9NIEVtcGxveWVlIGVtcGxveWVlIFdIRVJFIGVtcGxveWVlLmZpcnN0TmFtZSA9IDpmaXJzdG5hbWUiCisgICAgbmFtZT0iZmluZEFsbEVtcGxveWVlc0J5Rmlyc3ROYW1lIiwKKyAgICBxdWVyeT0iU0VMRUNUIE9CSkVDVChlbXBsb3llZSkgRlJPTSBFbXBsb3llZSBlbXBsb3llZSBXSEVSRSBlbXBsb3llZS5maXJzdE5hbWUgPSA6Zmlyc3RuYW1lIgogKSwKIEBOYW1lZFF1ZXJ5KAotCW5hbWU9ImNvbnN0dWN0RW1wbG95ZWVzIiwKLQlxdWVyeT0iU0VMRUNUIG5ldyBvcmFjbGUudG9wbGluay5lc3NlbnRpYWxzLnRlc3RpbmcubW9kZWxzLmNtcDMuYWR2YW5jZWQuRW1wbG95ZWUoZW1wbG95ZWUuZmlyc3ROYW1lLCBlbXBsb3llZS5sYXN0TmFtZSkgRlJPTSBFbXBsb3llZSBlbXBsb3llZSIKKyAgICBuYW1lPSJjb25zdHVjdEVtcGxveWVlcyIsCisgICAgcXVlcnk9IlNFTEVDVCBuZXcgb3JhY2xlLnRvcGxpbmsuZXNzZW50aWFscy50ZXN0aW5nLm1vZGVscy5jbXAzLmFkdmFuY2VkLkVtcGxveWVlKGVtcGxveWVlLmZpcnN0TmFtZSwgZW1wbG95ZWUubGFzdE5hbWUpIEZST00gRW1wbG95ZWUgZW1wbG95ZWUiCiApLAogQE5hbWVkUXVlcnkoCi0JbmFtZT0iZmluZEVtcGxveWVlQnlQSyIsCi0JcXVlcnk9IlNFTEVDVCBPQkpFQ1QoZW1wbG95ZWUpIEZST00gRW1wbG95ZWUgZW1wbG95ZWUgV0hFUkUgZW1wbG95ZWUuaWQgPSA6aWQiCisgICAgbmFtZT0iZmluZEVtcGxveWVlQnlQSyIsCisgICAgcXVlcnk9IlNFTEVDVCBPQkpFQ1QoZW1wbG95ZWUpIEZST00gRW1wbG95ZWUgZW1wbG95ZWUgV0hFUkUgZW1wbG95ZWUuaWQgPSA6aWQiCiApCiB9CiApCiBwdWJsaWMgY2xhc3MgRW1wbG95ZWUgaW1wbGVtZW50cyBTZXJpYWxpemFibGUgewotCXByaXZhdGUgSW50ZWdlciBpZDsKLQlwcml2YXRlIEludGVnZXIgdmVyc2lvbjsKLQlwcml2YXRlIFN0cmluZyBmaXJzdE5hbWU7Ci0JcHJpdmF0ZSBTdHJpbmcgbGFzdE5hbWU7Ci0JcHJpdmF0ZSBBZGRyZXNzIGFkZHJlc3M7Ci0JcHJpdmF0ZSBDb2xsZWN0aW9uPFBob25lTnVtYmVyPiBwaG9uZU51bWJlcnM7Ci0JcHJpdmF0ZSBDb2xsZWN0aW9uPFByb2plY3Q+IHByb2plY3RzOwotCXByaXZhdGUgaW50IHNhbGFyeTsKLQlwcml2YXRlIEVtcGxveW1lbnRQZXJpb2QgcGVyaW9kOworICAgIHByaXZhdGUgSW50ZWdlciBpZDsKKyAgICBwcml2YXRlIEludGVnZXIgdmVyc2lvbjsKKyAgICBwcml2YXRlIFN0cmluZyBmaXJzdE5hbWU7CisgICAgcHJpdmF0ZSBTdHJpbmcgbGFzdE5hbWU7CisgICAgcHJpdmF0ZSBBZGRyZXNzIGFkZHJlc3M7CisgICAgcHJpdmF0ZSBDb2xsZWN0aW9uPFBob25lTnVtYmVyPiBwaG9uZU51bWJlcnM7CisgICAgcHJpdmF0ZSBDb2xsZWN0aW9uPFByb2plY3Q+IHByb2plY3RzOworICAgIHByaXZhdGUgaW50IHNhbGFyeTsKKyAgICBwcml2YXRlIEVtcGxveW1lbnRQZXJpb2QgcGVyaW9kOwogICAgIHByaXZhdGUgQ29sbGVjdGlvbjxFbXBsb3llZT4gbWFuYWdlZEVtcGxveWVlczsKICAgICBwcml2YXRlIEVtcGxveWVlIG1hbmFnZXI7Ci0gICAgCi0JcHVibGljIEVtcGxveWVlICgpIHsKKworICAgIHB1YmxpYyBFbXBsb3llZSAoKSB7CiAgICAgICAgIHRoaXMucGhvbmVOdW1iZXJzID0gbmV3IFZlY3RvcjxQaG9uZU51bWJlcj4oKTsKICAgICAgICAgdGhpcy5wcm9qZWN0cyA9IG5ldyBWZWN0b3I8UHJvamVjdD4oKTsKICAgICAgICAgdGhpcy5tYW5hZ2VkRW1wbG95ZWVzID0gbmV3IFZlY3RvcjxFbXBsb3llZT4oKTsKLQl9Ci0gICAgCisgICAgfQorCiAgICAgcHVibGljIEVtcGxveWVlKFN0cmluZyBmaXJzdE5hbWUsIFN0cmluZyBsYXN0TmFtZSl7CiAgICAgICAgIHRoaXMoKTsKICAgICAgICAgdGhpcy5maXJzdE5hbWUgPSBmaXJzdE5hbWU7CiAgICAgICAgIHRoaXMubGFzdE5hbWUgPSBsYXN0TmFtZTsKICAgICB9CiAKLQlASWQKKyAgICBASWQKICAgICBAR2VuZXJhdGVkVmFsdWUoc3RyYXRlZ3k9VEFCTEUsIGdlbmVyYXRvcj0iRU1QTE9ZRUVfVEFCTEVfR0VORVJBVE9SIikKLQlAVGFibGVHZW5lcmF0b3IoCi0gICAgICAgIG5hbWU9IkVNUExPWUVFX1RBQkxFX0dFTkVSQVRPUiIsIAotICAgICAgICB0YWJsZT0iQ01QM19FTVBMT1lFRV9TRVEiLCAKLSAgICAgICAgcGtDb2x1bW5OYW1lPSJTRVFfTkFNRSIsIAorICAgIEBUYWJsZUdlbmVyYXRvcigKKyAgICAgICAgbmFtZT0iRU1QTE9ZRUVfVEFCTEVfR0VORVJBVE9SIiwKKyAgICAgICAgdGFibGU9IkNNUDNfRU1QTE9ZRUVfU0VRIiwKKyAgICAgICAgcGtDb2x1bW5OYW1lPSJTRVFfTkFNRSIsCiAgICAgICAgIHZhbHVlQ29sdW1uTmFtZT0iU0VRX0NPVU5UIiwKICAgICAgICAgcGtDb2x1bW5WYWx1ZT0iRU1QTE9ZRUVfU0VRIgogICAgICkKICAgICBAQ29sdW1uKG5hbWU9IkVNUF9JRCIpCi0JcHVibGljIEludGVnZXIgZ2V0SWQoKSB7IAotICAgICAgICByZXR1cm4gaWQ7IAotICAgIH0KLSAgICAKLQlwdWJsaWMgdm9pZCBzZXRJZChJbnRlZ2VyIGlkKSB7IAotICAgICAgICB0aGlzLmlkID0gaWQ7IAorICAgIHB1YmxpYyBJbnRlZ2VyIGdldElkKCkgeworICAgICAgICByZXR1cm4gaWQ7CiAgICAgfQogCi0JQFZlcnNpb24KLQlAQ29sdW1uKG5hbWU9IlZFUlNJT04iKQotCXB1YmxpYyBJbnRlZ2VyIGdldFZlcnNpb24oKSB7Ci0gICAgICAgIHJldHVybiB2ZXJzaW9uOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRJZChJbnRlZ2VyIGlkKSB7CisgICAgICAgIHRoaXMuaWQgPSBpZDsKICAgICB9Ci0gICAgCi0JcHVibGljIHZvaWQgc2V0VmVyc2lvbihJbnRlZ2VyIHZlcnNpb24pIHsKLQkJdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKLQl9CisKKyAgICBAVmVyc2lvbgorICAgIEBDb2x1bW4obmFtZT0iVkVSU0lPTiIpCisgICAgcHVibGljIEludGVnZXIgZ2V0VmVyc2lvbigpIHsKKyAgICAgICAgcmV0dXJuIHZlcnNpb247CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VmVyc2lvbihJbnRlZ2VyIHZlcnNpb24pIHsKKyAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKKyAgICB9CiAKICAgICBAQ29sdW1uKG5hbWU9IkZfTkFNRSIpCi0JcHVibGljIFN0cmluZyBnZXRGaXJzdE5hbWUoKSB7IAotICAgICAgICByZXR1cm4gZmlyc3ROYW1lOyAKKyAgICBwdWJsaWMgU3RyaW5nIGdldEZpcnN0TmFtZSgpIHsKKyAgICAgICAgcmV0dXJuIGZpcnN0TmFtZTsKICAgICB9Ci0gICAgCi0JcHVibGljIHZvaWQgc2V0Rmlyc3ROYW1lKFN0cmluZyBuYW1lKSB7IAotICAgICAgICB0aGlzLmZpcnN0TmFtZSA9IG5hbWU7IAorCisgICAgcHVibGljIHZvaWQgc2V0Rmlyc3ROYW1lKFN0cmluZyBuYW1lKSB7CisgICAgICAgIHRoaXMuZmlyc3ROYW1lID0gbmFtZTsKICAgICB9CiAKICAgICAvLyBOb3QgZGVmaW5lZCBpbiB0aGUgWE1MLCB0aGlzIHNob3VsZCBnZXQgcHJvY2Vzc2VkLgogICAgIEBDb2x1bW4obmFtZT0iTF9OQU1FIikKLQlwdWJsaWMgU3RyaW5nIGdldExhc3ROYW1lKCkgeyAKLSAgICAgICAgcmV0dXJuIGxhc3ROYW1lOyAKLSAgICB9Ci0gICAgCi0JcHVibGljIHZvaWQgc2V0TGFzdE5hbWUoU3RyaW5nIG5hbWUpIHsgCi0gICAgICAgIHRoaXMubGFzdE5hbWUgPSBuYW1lOyAKKyAgICBwdWJsaWMgU3RyaW5nIGdldExhc3ROYW1lKCkgeworICAgICAgICByZXR1cm4gbGFzdE5hbWU7CiAgICAgfQogCi0JQE1hbnlUb09uZShjYXNjYWRlPVBFUlNJU1QsIGZldGNoPUxBWlkpCi0JQEpvaW5Db2x1bW4obmFtZT0iQUREUl9JRCIpCi0JcHVibGljIEFkZHJlc3MgZ2V0QWRkcmVzcygpIHsgCi0gICAgICAgIHJldHVybiBhZGRyZXNzOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRMYXN0TmFtZShTdHJpbmcgbmFtZSkgeworICAgICAgICB0aGlzLmxhc3ROYW1lID0gbmFtZTsKICAgICB9Ci0gICAgCi0JcHVibGljIHZvaWQgc2V0QWRkcmVzcyhBZGRyZXNzIGFkZHJlc3MpIHsKLQkJdGhpcy5hZGRyZXNzID0gYWRkcmVzczsKLQl9CiAKLQlAT25lVG9NYW55KGNhc2NhZGU9QUxMLCBtYXBwZWRCeT0ib3duZXIiKQotCXB1YmxpYyBDb2xsZWN0aW9uPFBob25lTnVtYmVyPiBnZXRQaG9uZU51bWJlcnMoKSB7IAotICAgICAgICByZXR1cm4gcGhvbmVOdW1iZXJzOyAKKyAgICBATWFueVRvT25lKGNhc2NhZGU9UEVSU0lTVCwgZmV0Y2g9TEFaWSkKKyAgICBASm9pbkNvbHVtbihuYW1lPSJBRERSX0lEIikKKyAgICBwdWJsaWMgQWRkcmVzcyBnZXRBZGRyZXNzKCkgeworICAgICAgICByZXR1cm4gYWRkcmVzczsKICAgICB9Ci0gICAgCi0JcHVibGljIHZvaWQgc2V0UGhvbmVOdW1iZXJzKENvbGxlY3Rpb248UGhvbmVOdW1iZXI+IHBob25lTnVtYmVycykgewotCQl0aGlzLnBob25lTnVtYmVycyA9IHBob25lTnVtYmVyczsKLQl9CiAKLQlAT25lVG9NYW55KGNhc2NhZGU9QUxMLCBtYXBwZWRCeT0ibWFuYWdlciIpCi0JcHVibGljIENvbGxlY3Rpb248RW1wbG95ZWU+IGdldE1hbmFnZWRFbXBsb3llZXMoKSB7IAotICAgICAgICByZXR1cm4gbWFuYWdlZEVtcGxveWVlczsgCisgICAgcHVibGljIHZvaWQgc2V0QWRkcmVzcyhBZGRyZXNzIGFkZHJlc3MpIHsKKyAgICAgICAgdGhpcy5hZGRyZXNzID0gYWRkcmVzczsKICAgICB9Ci0gICAgCi0JcHVibGljIHZvaWQgc2V0TWFuYWdlZEVtcGxveWVlcyhDb2xsZWN0aW9uPEVtcGxveWVlPiBtYW5hZ2VkRW1wbG95ZWVzKSB7Ci0JCXRoaXMubWFuYWdlZEVtcGxveWVlcyA9IG1hbmFnZWRFbXBsb3llZXM7Ci0JfQorCisgICAgQE9uZVRvTWFueShjYXNjYWRlPUFMTCwgbWFwcGVkQnk9Im93bmVyIikKKyAgICBwdWJsaWMgQ29sbGVjdGlvbjxQaG9uZU51bWJlcj4gZ2V0UGhvbmVOdW1iZXJzKCkgeworICAgICAgICByZXR1cm4gcGhvbmVOdW1iZXJzOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFBob25lTnVtYmVycyhDb2xsZWN0aW9uPFBob25lTnVtYmVyPiBwaG9uZU51bWJlcnMpIHsKKyAgICAgICAgdGhpcy5waG9uZU51bWJlcnMgPSBwaG9uZU51bWJlcnM7CisgICAgfQorCisgICAgQE9uZVRvTWFueShjYXNjYWRlPUFMTCwgbWFwcGVkQnk9Im1hbmFnZXIiKQorICAgIHB1YmxpYyBDb2xsZWN0aW9uPEVtcGxveWVlPiBnZXRNYW5hZ2VkRW1wbG95ZWVzKCkgeworICAgICAgICByZXR1cm4gbWFuYWdlZEVtcGxveWVlczsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRNYW5hZ2VkRW1wbG95ZWVzKENvbGxlY3Rpb248RW1wbG95ZWU+IG1hbmFnZWRFbXBsb3llZXMpIHsKKyAgICAgICAgdGhpcy5tYW5hZ2VkRW1wbG95ZWVzID0gbWFuYWdlZEVtcGxveWVlczsKKyAgICB9CiAKICAgICAvLyBOb3QgZGVmaW5lZCBpbiB0aGUgWE1MLCB0aGlzIHNob3VsZCBnZXQgcHJvY2Vzc2VkLgotCUBNYW55VG9PbmUoY2FzY2FkZT1QRVJTSVNULCBmZXRjaD1MQVpZKQotCXB1YmxpYyBFbXBsb3llZSBnZXRNYW5hZ2VyKCkgeyAKLSAgICAgICAgcmV0dXJuIG1hbmFnZXI7IAorICAgIEBNYW55VG9PbmUoY2FzY2FkZT1QRVJTSVNULCBmZXRjaD1MQVpZKQorICAgIHB1YmxpYyBFbXBsb3llZSBnZXRNYW5hZ2VyKCkgeworICAgICAgICByZXR1cm4gbWFuYWdlcjsKICAgICB9Ci0gICAgCi0JcHVibGljIHZvaWQgc2V0TWFuYWdlcihFbXBsb3llZSBtYW5hZ2VyKSB7Ci0JCXRoaXMubWFuYWdlciA9IG1hbmFnZXI7Ci0JfQogCi0JQE1hbnlUb01hbnkoY2FzY2FkZT1QRVJTSVNUKQorICAgIHB1YmxpYyB2b2lkIHNldE1hbmFnZXIoRW1wbG95ZWUgbWFuYWdlcikgeworICAgICAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyOworICAgIH0KKworICAgIEBNYW55VG9NYW55KGNhc2NhZGU9UEVSU0lTVCkKICAgICBASm9pblRhYmxlKAotCQluYW1lPSJDTVAzX0VNUF9QUk9KIiwKKyAgICAgICAgbmFtZT0iQ01QM19FTVBfUFJPSiIsCiAgICAgICAgIC8vIERlZmF1bHQgZm9yIHRoZSBwcm9qZWN0IHNpZGUgYW5kIHNwZWNpZnkgZm9yIHRoZSBlbXBsb3llZSBzaWRlCiAgICAgICAgIC8vIFdpbGwgdGVzdCBib3RoIGRlZmF1bHRpbmcgYW5kIHNldCB2YWx1ZXMuCiAgICAgICAgIGpvaW5Db2x1bW5zPUBKb2luQ29sdW1uKG5hbWU9IkVNUExPWUVFU19FTVBfSUQiLCByZWZlcmVuY2VkQ29sdW1uTmFtZT0iRU1QX0lEIikKLQkJLy9pbnZlcnNlSm9pbkNvbHVtbnM9QEpvaW5Db2x1bW4obmFtZT0iUFJPSkVDVFNfUFJPSl9JRCIsIHJlZmVyZW5jZWRDb2x1bW5OYW1lPSJQUk9KX0lEIikKLQkpCi0JcHVibGljIENvbGxlY3Rpb248UHJvamVjdD4gZ2V0UHJvamVjdHMoKSB7IAotICAgICAgICByZXR1cm4gcHJvamVjdHM7IAorICAgICAgICAvL2ludmVyc2VKb2luQ29sdW1ucz1ASm9pbkNvbHVtbihuYW1lPSJQUk9KRUNUU19QUk9KX0lEIiwgcmVmZXJlbmNlZENvbHVtbk5hbWU9IlBST0pfSUQiKQorICAgICkKKyAgICBwdWJsaWMgQ29sbGVjdGlvbjxQcm9qZWN0PiBnZXRQcm9qZWN0cygpIHsKKyAgICAgICAgcmV0dXJuIHByb2plY3RzOwogICAgIH0KLSAgICAKLQlwdWJsaWMgdm9pZCBzZXRQcm9qZWN0cyhDb2xsZWN0aW9uPFByb2plY3Q+IHByb2plY3RzKSB7Ci0JCXRoaXMucHJvamVjdHMgPSBwcm9qZWN0czsKLQl9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0cyhDb2xsZWN0aW9uPFByb2plY3Q+IHByb2plY3RzKSB7CisgICAgICAgIHRoaXMucHJvamVjdHMgPSBwcm9qZWN0czsKKyAgICB9CiAKICAgICBAQ29sdW1uKHRhYmxlPSJDTVAzX1NBTEFSWSIpCi0JcHVibGljIGludCBnZXRTYWxhcnkoKSB7IAotICAgICAgICByZXR1cm4gc2FsYXJ5OyAKLSAgICB9Ci0gICAgCi0JcHVibGljIHZvaWQgc2V0U2FsYXJ5KGludCBzYWxhcnkpIHsgCi0gICAgICAgIHRoaXMuc2FsYXJ5ID0gc2FsYXJ5OyAKKyAgICBwdWJsaWMgaW50IGdldFNhbGFyeSgpIHsKKyAgICAgICAgcmV0dXJuIHNhbGFyeTsKICAgICB9CiAKLQlARW1iZWRkZWQKKyAgICBwdWJsaWMgdm9pZCBzZXRTYWxhcnkoaW50IHNhbGFyeSkgeworICAgICAgICB0aGlzLnNhbGFyeSA9IHNhbGFyeTsKKyAgICB9CisKKyAgICBARW1iZWRkZWQKICAgICBAQXR0cmlidXRlT3ZlcnJpZGVzKHsKLQkJQEF0dHJpYnV0ZU92ZXJyaWRlKG5hbWU9InN0YXJ0RGF0ZSIsIGNvbHVtbj1AQ29sdW1uKG5hbWU9IlNUQVJUX0RBVEUiLCBudWxsYWJsZT1mYWxzZSkpLAotCQlAQXR0cmlidXRlT3ZlcnJpZGUobmFtZT0iZW5kRGF0ZSIsIGNvbHVtbj1AQ29sdW1uKG5hbWU9IkVORF9EQVRFIiwgbnVsbGFibGU9dHJ1ZSkpCi0JfSkKLQlwdWJsaWMgRW1wbG95bWVudFBlcmlvZCBnZXRQZXJpb2QoKSB7Ci0JCXJldHVybiBwZXJpb2Q7Ci0JfQotICAgIAotCXB1YmxpYyB2b2lkIHNldFBlcmlvZChFbXBsb3ltZW50UGVyaW9kIHBlcmlvZCkgewotCQl0aGlzLnBlcmlvZCA9IHBlcmlvZDsKLQl9CisgICAgICAgIEBBdHRyaWJ1dGVPdmVycmlkZShuYW1lPSJzdGFydERhdGUiLCBjb2x1bW49QENvbHVtbihuYW1lPSJTVEFSVF9EQVRFIiwgbnVsbGFibGU9ZmFsc2UpKSwKKyAgICAgICAgQEF0dHJpYnV0ZU92ZXJyaWRlKG5hbWU9ImVuZERhdGUiLCBjb2x1bW49QENvbHVtbihuYW1lPSJFTkRfREFURSIsIG51bGxhYmxlPXRydWUpKQorICAgIH0pCisgICAgcHVibGljIEVtcGxveW1lbnRQZXJpb2QgZ2V0UGVyaW9kKCkgeworICAgICAgICByZXR1cm4gcGVyaW9kOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFBlcmlvZChFbXBsb3ltZW50UGVyaW9kIHBlcmlvZCkgeworICAgICAgICB0aGlzLnBlcmlvZCA9IHBlcmlvZDsKKyAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBhZGRNYW5hZ2VkRW1wbG95ZWUoRW1wbG95ZWUgZW1wKSB7CiAgICAgICAgIGdldE1hbmFnZWRFbXBsb3llZXMoKS5hZGQoZW1wKTsKQEAgLTIzNSw4ICsyMzUsOCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJlbW92ZVBob25lTnVtYmVyKFBob25lTnVtYmVyIHBob25lKSB7Ci0gICAgICAgIC8vIE5vdGUgdGhhdCBnZXRQaG9uZU51bWJlcnMoKSB3aWxsIG5vdCBoYXZlIGEgcGhvbmUgbnVtYmVyIGlkZW50aWNhbCB0byAKLSAgICAgICAgLy8gInBob25lIiwgKGJlY2F1c2UgaXQncyBzZXJpYWxpemVkKSBhbmQgdGhpcyB3aWxsIHRha2UgYWR2YW50YWdlIG9mIAorICAgICAgICAvLyBOb3RlIHRoYXQgZ2V0UGhvbmVOdW1iZXJzKCkgd2lsbCBub3QgaGF2ZSBhIHBob25lIG51bWJlciBpZGVudGljYWwgdG8KKyAgICAgICAgLy8gInBob25lIiwgKGJlY2F1c2UgaXQncyBzZXJpYWxpemVkKSBhbmQgdGhpcyB3aWxsIHRha2UgYWR2YW50YWdlIG9mCiAgICAgICAgIC8vIGVxdWFscygpIGluIFBob25lTnVtYmVyIHRvIHJlbW92ZSBwcm9wZXJseQogICAgICAgICBnZXRQaG9uZU51bWJlcnMoKS5yZW1vdmUocGhvbmUpOwogICAgIH0KQEAgLTI1NSwxNyArMjU1LDE3IEBACiAKICAgICAgICAgcmV0dXJuIHNidWZmLnRvU3RyaW5nKCk7CiAgICAgfQotICAgIAorCiAgICAgLy8gVGhlc2UgbWV0aG9kcyB3ZXJlIGFkZGVkIGZvciB0ZXN0aW5nIHB1cnBvc2Ugb25seSAtIEJVRyA0MzQ5OTkxCi0gICAgCisKICAgICAvLyBTdGF0aWMgbWV0aG9kIHNob3VsZCBiZSBpZ25vcmVkCiAgICAgc3RhdGljIHB1YmxpYyB2b2lkIGdldEFic29sdXRlbHlOb3RoaW5nKCkge30KLSAgICAKKwogICAgIC8vIEdldCBtZXRob2RzIHdpdGggcGFyYW1ldGVycyBzaG91bGQgYmUgaWdub3JlZAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0WW91clN0cmluZ0JhY2soU3RyaW5nIHN0cikgewogICAgICAgICByZXR1cm4gc3RyOwogICAgIH0KLSAgICAKKwogICAgIC8vIEdldCBtZXRob2RzIHdpdGggbm8gY29ycmVzcG9uZGluZyBzZXQgbWV0aG9kLCBzaG91bGQgYmUgaWdub3JlZC4KICAgICAvLyBsb2dzIGEgd2FybmluZyB0aG91Z2guCiAgICAgcHVibGljIFN0cmluZyBnZXRBbkVtcHR5U3RyaW5nKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvanBhLWludGVncmF0aW9uL3RvcGxpbmstZXNzZW50aWFscy9hZHZhbmNlZC9lamIvRW1wbG95ZWVMaXN0ZW5lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvanBhLWludGVncmF0aW9uL3RvcGxpbmstZXNzZW50aWFscy9hZHZhbmNlZC9lamIvRW1wbG95ZWVMaXN0ZW5lci5qYXZhCmluZGV4IGYwMWIyMDYuLjNjOGE0NTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pwYS1pbnRlZ3JhdGlvbi90b3BsaW5rLWVzc2VudGlhbHMvYWR2YW5jZWQvZWpiL0VtcGxveWVlTGlzdGVuZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qcGEtaW50ZWdyYXRpb24vdG9wbGluay1lc3NlbnRpYWxzL2FkdmFuY2VkL2VqYi9FbXBsb3llZUxpc3RlbmVyLmphdmEKQEAgLTMwLDI5ICszMCwyOSBAQAogCiAgICAgLy8gcHJlVXBkYXRlIHdpbGwgcmVtb3ZlIHRoaXMgcHJlZml4IGZyb20gZmlyc3ROYW1lIGFuZCBsYXN0TmFtZQogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFBSRV9VUERBVEVfTkFNRV9QUkVGSVggPSAiUFJFX1VQREFURV9OQU1FX1BSRUZJWCI7Ci0gICAgCi0JQFByZVBlcnNpc3QKLQlwdWJsaWMgdm9pZCBwcmVQZXJzaXN0KE9iamVjdCBlbXApIHsKKworICAgIEBQcmVQZXJzaXN0CisgICAgcHVibGljIHZvaWQgcHJlUGVyc2lzdChPYmplY3QgZW1wKSB7CiAgICAgICAgIFBSRV9QRVJTSVNUX0NPVU5UKys7Ci0JfQorICAgIH0KIAotCUBQb3N0UGVyc2lzdAotCXB1YmxpYyB2b2lkIHBvc3RQZXJzaXN0KE9iamVjdCBlbXApIHsKKyAgICBAUG9zdFBlcnNpc3QKKyAgICBwdWJsaWMgdm9pZCBwb3N0UGVyc2lzdChPYmplY3QgZW1wKSB7CiAgICAgICAgIFBPU1RfUEVSU0lTVF9DT1VOVCsrOwotCX0KKyAgICB9CiAKLQlAUHJlUmVtb3ZlCi0JcHVibGljIHZvaWQgcHJlUmVtb3ZlKE9iamVjdCBlbXApIHsKKyAgICBAUHJlUmVtb3ZlCisgICAgcHVibGljIHZvaWQgcHJlUmVtb3ZlKE9iamVjdCBlbXApIHsKICAgICAgICAgUFJFX1JFTU9WRV9DT1VOVCsrOwotCX0KKyAgICB9CiAKLQlAUG9zdFJlbW92ZQotCXB1YmxpYyB2b2lkIHBvc3RSZW1vdmUoT2JqZWN0IGVtcCkgeworICAgIEBQb3N0UmVtb3ZlCisgICAgcHVibGljIHZvaWQgcG9zdFJlbW92ZShPYmplY3QgZW1wKSB7CiAgICAgICAgIFBPU1RfUkVNT1ZFX0NPVU5UKys7Ci0JfQorICAgIH0KIAotCUBQcmVVcGRhdGUKLQlwdWJsaWMgdm9pZCBwcmVVcGRhdGUoT2JqZWN0IGVtcCkgeworICAgIEBQcmVVcGRhdGUKKyAgICBwdWJsaWMgdm9pZCBwcmVVcGRhdGUoT2JqZWN0IGVtcCkgewogICAgICAgICBQUkVfVVBEQVRFX0NPVU5UKys7CiAgICAgICAgIEVtcGxveWVlIGVtcGxveWVlID0gKEVtcGxveWVlKWVtcDsKICAgICAgICAgaWYoZW1wbG95ZWUuZ2V0Rmlyc3ROYW1lKCkgIT0gbnVsbCAmJiBlbXBsb3llZS5nZXRGaXJzdE5hbWUoKS5zdGFydHNXaXRoKFBSRV9VUERBVEVfTkFNRV9QUkVGSVgpKSB7CkBAIC02MSwxNSArNjEsMTUgQEAKICAgICAgICAgaWYoZW1wbG95ZWUuZ2V0TGFzdE5hbWUoKSAhPSBudWxsICYmIGVtcGxveWVlLmdldExhc3ROYW1lKCkuc3RhcnRzV2l0aChQUkVfVVBEQVRFX05BTUVfUFJFRklYKSkgewogICAgICAgICAgICAgZW1wbG95ZWUuc2V0TGFzdE5hbWUoZW1wbG95ZWUuZ2V0TGFzdE5hbWUoKS5zdWJzdHJpbmcoUFJFX1VQREFURV9OQU1FX1BSRUZJWC5sZW5ndGgoKSkpOwogICAgICAgICB9Ci0JfQorICAgIH0KIAotCUBQb3N0VXBkYXRlCi0JcHVibGljIHZvaWQgcG9zdFVwZGF0ZShPYmplY3QgZW1wKSB7CisgICAgQFBvc3RVcGRhdGUKKyAgICBwdWJsaWMgdm9pZCBwb3N0VXBkYXRlKE9iamVjdCBlbXApIHsKICAgICAgICAgUE9TVF9VUERBVEVfQ09VTlQrKzsKLQl9CisgICAgfQogCi0JQFBvc3RMb2FkCi0JcHVibGljIHZvaWQgcG9zdExvYWQoRW1wbG95ZWUgZW1wKSB7CisgICAgQFBvc3RMb2FkCisgICAgcHVibGljIHZvaWQgcG9zdExvYWQoRW1wbG95ZWUgZW1wKSB7CiAgICAgICAgIFBPU1RfTE9BRF9DT1VOVCsrOwotCX0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qcGEtaW50ZWdyYXRpb24vdG9wbGluay1lc3NlbnRpYWxzL2FkdmFuY2VkL2VqYi9FbXBsb3ltZW50UGVyaW9kLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qcGEtaW50ZWdyYXRpb24vdG9wbGluay1lc3NlbnRpYWxzL2FkdmFuY2VkL2VqYi9FbXBsb3ltZW50UGVyaW9kLmphdmEKaW5kZXggNjJmOTUwMy4uM2U1ZWNiNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvanBhLWludGVncmF0aW9uL3RvcGxpbmstZXNzZW50aWFscy9hZHZhbmNlZC9lamIvRW1wbG95bWVudFBlcmlvZC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pwYS1pbnRlZ3JhdGlvbi90b3BsaW5rLWVzc2VudGlhbHMvYWR2YW5jZWQvZWpiL0VtcGxveW1lbnRQZXJpb2QuamF2YQpAQCAtMjIsOCArMjIsOCBAQAogCiAvKioKICAqIDxwPjxiPlB1cnBvc2U8L2I+OiBEZWZpbmVzIHRoZSBwZXJpb2QgYW4gRW1wbG95ZWUgd29ya2VkIGZvciB0aGUgb3JnYW5pemF0aW9uCi0gKiAgICA8cD48Yj5EZXNjcmlwdGlvbjwvYj46IFRoZSBwZXJpb2QgaG9sZHMgdGhlIHN0YXJ0IGRhdGUgYW5kIG9wdGlvbmFsbHkgdGhlIAotICogICAgZW5kIGRhdGUgaWYgdGhlIGVtcGxveWVlIGhhcyBsZWZ0IChudWxsIG90aGVyd2lzZSkuIE1haW50YWluZWQgaW4gYW4gCisgKiAgICA8cD48Yj5EZXNjcmlwdGlvbjwvYj46IFRoZSBwZXJpb2QgaG9sZHMgdGhlIHN0YXJ0IGRhdGUgYW5kIG9wdGlvbmFsbHkgdGhlCisgKiAgICBlbmQgZGF0ZSBpZiB0aGUgZW1wbG95ZWUgaGFzIGxlZnQgKG51bGwgb3RoZXJ3aXNlKS4gTWFpbnRhaW5lZCBpbiBhbgogICogICAgYWdncmVnYXRlIHJlbGF0aW9uc2hpcCBvZiBFbXBsb3llZQogICogICAgQHNlZSBFbXBsb3llZQogICovCkBAIC0zNywxMCArMzcsMTAgQEAKIAogICAgIC8qKgogICAgICAqIFJldHVybiBhIG5ldyBlbXBsb3ltZW50IHBlcmlvZCBpbnN0YW5jZS4KLSAgICAgKiBUaGUgY29uc3RydWN0b3IncyBwdXJwb3NlIGlzIHRvIGFsbG93IG9ubHkgdmFsaWQgaW5zdGFuY2VzIG9mIGEgY2xhc3MgdG8gCi0gICAgICogYmUgY3JlYXRlZC4gVmFsaWQgbWVhbnMgdGhhdCB0aGUgZ2V0L3NldCBhbmQgY2xvbmUvdG9TdHJpbmcgbWV0aG9kcyAKLSAgICAgKiBzaG91bGQgd29yayBvbiB0aGUgaW5zdGFuY2UuIEFyZ3VtZW50cyB0byBjb25zdHJ1Y3RvcnMgc2hvdWxkIGJlIGF2b2lkZWQgCi0gICAgICogdW5sZXNzIHRob3NlIGFyZ3VtZW50cyBhcmUgcmVxdWlyZWQgdG8gcHV0IHRoZSBpbnN0YW5jZSBpbnRvIGEgdmFsaWQgCisgICAgICogVGhlIGNvbnN0cnVjdG9yJ3MgcHVycG9zZSBpcyB0byBhbGxvdyBvbmx5IHZhbGlkIGluc3RhbmNlcyBvZiBhIGNsYXNzIHRvCisgICAgICogYmUgY3JlYXRlZC4gVmFsaWQgbWVhbnMgdGhhdCB0aGUgZ2V0L3NldCBhbmQgY2xvbmUvdG9TdHJpbmcgbWV0aG9kcworICAgICAqIHNob3VsZCB3b3JrIG9uIHRoZSBpbnN0YW5jZS4gQXJndW1lbnRzIHRvIGNvbnN0cnVjdG9ycyBzaG91bGQgYmUgYXZvaWRlZAorICAgICAqIHVubGVzcyB0aG9zZSBhcmd1bWVudHMgYXJlIHJlcXVpcmVkIHRvIHB1dCB0aGUgaW5zdGFuY2UgaW50byBhIHZhbGlkCiAgICAgICogc3RhdGUsIG9yIHJlcHJlc2VudCB0aGUgZW50aXJlIGluc3RhbmNlIGRlZmluaXRpb24uCiAgICAgICovCiAgICAgcHVibGljIEVtcGxveW1lbnRQZXJpb2QoRGF0ZSB0aGVTdGFydERhdGUsIERhdGUgdGhlRW5kRGF0ZSkgewpAQCAtNDgsMjIgKzQ4LDIyIEBACiAgICAgICAgIGVuZERhdGUgPSB0aGVFbmREYXRlOwogICAgIH0KIAotCUBDb2x1bW4obmFtZT0iU19EQVRFIikKLQlwdWJsaWMgRGF0ZSBnZXRTdGFydERhdGUoKSB7IAotICAgICAgICByZXR1cm4gc3RhcnREYXRlOyAKLSAgICB9Ci0gICAgCi0JcHVibGljIHZvaWQgc2V0U3RhcnREYXRlKERhdGUgZGF0ZSkgeyAKLSAgICAgICAgdGhpcy5zdGFydERhdGUgPSBkYXRlOyAKKyAgICBAQ29sdW1uKG5hbWU9IlNfREFURSIpCisgICAgcHVibGljIERhdGUgZ2V0U3RhcnREYXRlKCkgeworICAgICAgICByZXR1cm4gc3RhcnREYXRlOwogICAgIH0KIAotCUBDb2x1bW4obmFtZT0iRV9EQVRFIikKLQlwdWJsaWMgRGF0ZSBnZXRFbmREYXRlKCkgeyAKLSAgICAgICAgcmV0dXJuIGVuZERhdGU7IAorICAgIHB1YmxpYyB2b2lkIHNldFN0YXJ0RGF0ZShEYXRlIGRhdGUpIHsKKyAgICAgICAgdGhpcy5zdGFydERhdGUgPSBkYXRlOwogICAgIH0KLSAgICAKLQlwdWJsaWMgdm9pZCBzZXRFbmREYXRlKERhdGUgZGF0ZSkgeyAKLSAgICAgICAgdGhpcy5lbmREYXRlID0gZGF0ZTsgCisKKyAgICBAQ29sdW1uKG5hbWU9IkVfREFURSIpCisgICAgcHVibGljIERhdGUgZ2V0RW5kRGF0ZSgpIHsKKyAgICAgICAgcmV0dXJuIGVuZERhdGU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0RW5kRGF0ZShEYXRlIGRhdGUpIHsKKyAgICAgICAgdGhpcy5lbmREYXRlID0gZGF0ZTsKICAgICB9CiAKICAgICAvKioKQEAgLTcyLDE3ICs3MiwxNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgIGphdmEuaW8uU3RyaW5nV3JpdGVyIHdyaXRlciA9IG5ldyBqYXZhLmlvLlN0cmluZ1dyaXRlcigpOwogICAgICAgICB3cml0ZXIud3JpdGUoIkVtcGxveW1lbnRQZXJpb2Q6ICIpOwotICAgICAgICAKKwogICAgICAgICBpZiAodGhpcy5nZXRTdGFydERhdGUoKSAhPSBudWxsKSB7CiAgICAgICAgICAgICB3cml0ZXIud3JpdGUodGhpcy5nZXRTdGFydERhdGUoKS50b1N0cmluZygpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB3cml0ZXIud3JpdGUoIi0iKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKHRoaXMuZ2V0RW5kRGF0ZSgpICE9IG51bGwpIHsKICAgICAgICAgICAgIHdyaXRlci53cml0ZSh0aGlzLmdldEVuZERhdGUoKS50b1N0cmluZygpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gd3JpdGVyLnRvU3RyaW5nKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvanBhLWludGVncmF0aW9uL3RvcGxpbmstZXNzZW50aWFscy9hZHZhbmNlZC9lamIvTGFyZ2VQcm9qZWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qcGEtaW50ZWdyYXRpb24vdG9wbGluay1lc3NlbnRpYWxzL2FkdmFuY2VkL2VqYi9MYXJnZVByb2plY3QuamF2YQppbmRleCBiZjZjYWQ5Li5kZmY2NjVkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qcGEtaW50ZWdyYXRpb24vdG9wbGluay1lc3NlbnRpYWxzL2FkdmFuY2VkL2VqYi9MYXJnZVByb2plY3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qcGEtaW50ZWdyYXRpb24vdG9wbGluay1lc3NlbnRpYWxzL2FkdmFuY2VkL2VqYi9MYXJnZVByb2plY3QuamF2YQpAQCAtMzEsMTYgKzMxLDE2IEBACiBARGlzY3JpbWluYXRvclZhbHVlKCJMIikKIEBOYW1lZFF1ZXJpZXMoewogQE5hbWVkUXVlcnkoCi0JbmFtZT0iZmluZFdpdGhCdWRnZXRMYXJnZXJUaGFuIiwKLQlxdWVyeT0iU0VMRUNUIE9CSkVDVChwcm9qZWN0KSBGUk9NIExhcmdlUHJvamVjdCBwcm9qZWN0IFdIRVJFIHByb2plY3QuYnVkZ2V0ID49IDphbW91bnQiCisgICAgbmFtZT0iZmluZFdpdGhCdWRnZXRMYXJnZXJUaGFuIiwKKyAgICBxdWVyeT0iU0VMRUNUIE9CSkVDVChwcm9qZWN0KSBGUk9NIExhcmdlUHJvamVjdCBwcm9qZWN0IFdIRVJFIHByb2plY3QuYnVkZ2V0ID49IDphbW91bnQiCiApLAogQE5hbWVkUXVlcnkoCi0JbmFtZT0iY29uc3RydWN0TFByb2plY3QiLAotCXF1ZXJ5PSJTRUxFQ1QgbmV3IG9yYWNsZS50b3BsaW5rLmVzc2VudGlhbHMudGVzdGluZy5tb2RlbHMuY21wMy5hZHZhbmNlZC5MYXJnZVByb2plY3QocHJvamVjdC5uYW1lKSBGUk9NIExhcmdlUHJvamVjdCBwcm9qZWN0IikKKyAgICBuYW1lPSJjb25zdHJ1Y3RMUHJvamVjdCIsCisgICAgcXVlcnk9IlNFTEVDVCBuZXcgb3JhY2xlLnRvcGxpbmsuZXNzZW50aWFscy50ZXN0aW5nLm1vZGVscy5jbXAzLmFkdmFuY2VkLkxhcmdlUHJvamVjdChwcm9qZWN0Lm5hbWUpIEZST00gTGFyZ2VQcm9qZWN0IHByb2plY3QiKQogfQogKQogcHVibGljIGNsYXNzIExhcmdlUHJvamVjdCBleHRlbmRzIFByb2plY3QgewotCXByaXZhdGUgZG91YmxlIGJ1ZGdldDsKKyAgICBwcml2YXRlIGRvdWJsZSBidWRnZXQ7CiAgICAgcHVibGljIExhcmdlUHJvamVjdCAoKSB7CiAgICAgICAgIHN1cGVyKCk7CiAgICAgfQpAQCAtNDksMTEgKzQ5LDExIEBACiAgICAgICAgIHRoaXMuc2V0TmFtZShuYW1lKTsKICAgICB9CiAKLQlwdWJsaWMgZG91YmxlIGdldEJ1ZGdldCgpIHsgCi0gICAgICAgIHJldHVybiBidWRnZXQ7IAorICAgIHB1YmxpYyBkb3VibGUgZ2V0QnVkZ2V0KCkgeworICAgICAgICByZXR1cm4gYnVkZ2V0OwogICAgIH0KLSAgICAKLQlwdWJsaWMgdm9pZCBzZXRCdWRnZXQoZG91YmxlIGJ1ZGdldCkgeyAKLQkJdGhpcy5idWRnZXQgPSBidWRnZXQ7IAotCX0KKworICAgIHB1YmxpYyB2b2lkIHNldEJ1ZGdldChkb3VibGUgYnVkZ2V0KSB7CisgICAgICAgIHRoaXMuYnVkZ2V0ID0gYnVkZ2V0OworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pwYS1pbnRlZ3JhdGlvbi90b3BsaW5rLWVzc2VudGlhbHMvYWR2YW5jZWQvZWpiL01vZGVsRXhhbXBsZXMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pwYS1pbnRlZ3JhdGlvbi90b3BsaW5rLWVzc2VudGlhbHMvYWR2YW5jZWQvZWpiL01vZGVsRXhhbXBsZXMuamF2YQppbmRleCAyMWU4NzdlLi4zNTBjZmNjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qcGEtaW50ZWdyYXRpb24vdG9wbGluay1lc3NlbnRpYWxzL2FkdmFuY2VkL2VqYi9Nb2RlbEV4YW1wbGVzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvanBhLWludGVncmF0aW9uL3RvcGxpbmstZXNzZW50aWFscy9hZHZhbmNlZC9lamIvTW9kZWxFeGFtcGxlcy5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIGVtcC5zZXRTYWxhcnkoMTAwMCk7CiAgICAgICAgIHJldHVybiBlbXA7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyBFbXBsb3llZSBlbXBsb3llZUV4YW1wbGUzKCl7CiAgICAgICAgIEVtcGxveWVlIGVtcCA9IG5ldyBFbXBsb3llZSgpOwogICAgICAgICBlbXAuc2V0Rmlyc3ROYW1lKCJMYWN5Iik7CkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgIGVtcC5zZXRTYWxhcnkoMik7CiAgICAgICAgIHJldHVybiBlbXA7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyBFbXBsb3llZSBlbXBsb3llZUV4YW1wbGU0KCl7CiAgICAgICAgIEVtcGxveWVlIGVtcCA9IG5ldyBFbXBsb3llZSgpOwogICAgICAgICBlbXAuc2V0Rmlyc3ROYW1lKCJSYWxmIik7CkBAIC02NSwxNCArNjUsMTQgQEAKICAgICAgICAgZW1wLnNldFNhbGFyeSgxMDApOwogICAgICAgICByZXR1cm4gZW1wOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgUHJvamVjdCBwcm9qZWN0RXhhbXBsZTEoKXsKICAgICAgICAgUHJvamVjdCBwcm9qZWN0ID0gbmV3IFByb2plY3QoKTsKICAgICAgICAgcHJvamVjdC5zZXREZXNjcmlwdGlvbigiVG8gdW5kZXJ0YWtlIGFuZCBldmFsdWF0ZSB0aGUgZWZmZWNlbmN5IG9mIHRoZSBjb21wYW5pZXMgZmFybWVycy4iKTsKICAgICAgICAgcHJvamVjdC5zZXROYW1lKCJGYXJtZXIgZWZmZWNlbmN5IGV2YWx1YXRpb25zIik7CiAgICAgICAgIHJldHVybiBwcm9qZWN0OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgUHJvamVjdCBwcm9qZWN0RXhhbXBsZTIoKXsKICAgICAgICAgTGFyZ2VQcm9qZWN0IHByb2plY3QgPSBuZXcgTGFyZ2VQcm9qZWN0KCk7CiAgICAgICAgIHByb2plY3Quc2V0RGVzY3JpcHRpb24oIlRvIGFzc2VzcyB0aGUgY2hhbmdpbmcgZGVtb2dyYXBoaWNzIG9mIHRoZSBmZWxpbmUgd29ybGQiKTsKQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgICAgICBhZGRyZXNzLnNldFN0cmVldCgiMzI0IEJheSBTdHJlZXQiKTsKICAgICAgICAgcmV0dXJuIGFkZHJlc3M7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NFeGFtcGxlNSgpewogICAgICAgICBBZGRyZXNzIGFkZHJlc3MgPSBuZXcgQWRkcmVzcygpOwogICAgICAgICBhZGRyZXNzLnNldENpdHkoIkdvb3NlIEJheSIpOwpAQCAtMTM1LDcgKzEzNSw3IEBACiAgICAgICAgIGFkZHJlc3Muc2V0U3RyZWV0KCIzNjAgSGFtaWx0b24gUmQiKTsKICAgICAgICAgcmV0dXJuIGFkZHJlc3M7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyBQaG9uZU51bWJlciBwaG9uZUV4YW1wbGUxKCl7CiAgICAgICAgIHJldHVybiBuZXcgUGhvbmVOdW1iZXIoIldvcmsiLCAiNjEzIiwgIjY1NDQ1NDUiKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qcGEtaW50ZWdyYXRpb24vdG9wbGluay1lc3NlbnRpYWxzL2FkdmFuY2VkL2VqYi9QaG9uZU51bWJlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvanBhLWludGVncmF0aW9uL3RvcGxpbmstZXNzZW50aWFscy9hZHZhbmNlZC9lamIvUGhvbmVOdW1iZXIuamF2YQppbmRleCBkY2UxNGU5Li43MWM3ODVkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qcGEtaW50ZWdyYXRpb24vdG9wbGluay1lc3NlbnRpYWxzL2FkdmFuY2VkL2VqYi9QaG9uZU51bWJlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pwYS1pbnRlZ3JhdGlvbi90b3BsaW5rLWVzc2VudGlhbHMvYWR2YW5jZWQvZWpiL1Bob25lTnVtYmVyLmphdmEKQEAgLTI4LDEyICsyOCwxMiBAQAogQEVudGl0eQogQFRhYmxlKG5hbWU9IkNNUDNfUEhPTkVOVU1CRVIiKQogcHVibGljIGNsYXNzIFBob25lTnVtYmVyIGltcGxlbWVudHMgU2VyaWFsaXphYmxlIHsKLQlwcml2YXRlIFN0cmluZyBudW1iZXI7Ci0JcHJpdmF0ZSBTdHJpbmcgdHlwZTsKLQlwcml2YXRlIEVtcGxveWVlIG93bmVyOworICAgIHByaXZhdGUgU3RyaW5nIG51bWJlcjsKKyAgICBwcml2YXRlIFN0cmluZyB0eXBlOworICAgIHByaXZhdGUgRW1wbG95ZWUgb3duZXI7CiAgICAgcHJpdmF0ZSBJbnRlZ2VyIGlkOwogICAgIHByaXZhdGUgU3RyaW5nIGFyZWFDb2RlOwotCQorCiAgICAgcHVibGljIFBob25lTnVtYmVyKCkgewogICAgICAgICB0aGlzKCIiLCAiIyMjIiwgIiMjIyMjIyMiKTsKICAgICB9CkBAIC00Niw1MiArNDYsNTIgQEAKICAgICB9CiAKICAgICBASWQKLQlAQ29sdW1uKG5hbWU9Ik9XTkVSX0lEIiwgaW5zZXJ0YWJsZT1mYWxzZSwgdXBkYXRhYmxlPWZhbHNlKQotCXB1YmxpYyBJbnRlZ2VyIGdldElkKCkgeyAKLSAgICAgICAgcmV0dXJuIGlkOyAKKyAgICBAQ29sdW1uKG5hbWU9Ik9XTkVSX0lEIiwgaW5zZXJ0YWJsZT1mYWxzZSwgdXBkYXRhYmxlPWZhbHNlKQorICAgIHB1YmxpYyBJbnRlZ2VyIGdldElkKCkgeworICAgICAgICByZXR1cm4gaWQ7CiAgICAgfQotICAgIAotCXB1YmxpYyB2b2lkIHNldElkKEludGVnZXIgaWQpIHsKLQkJdGhpcy5pZCA9IGlkOwotCX0KIAotCUBDb2x1bW4obmFtZT0iTlVNQiIpCi0JcHVibGljIFN0cmluZyBnZXROdW1iZXIoKSB7IAotICAgICAgICByZXR1cm4gbnVtYmVyOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRJZChJbnRlZ2VyIGlkKSB7CisgICAgICAgIHRoaXMuaWQgPSBpZDsKICAgICB9Ci0gICAgCi0JcHVibGljIHZvaWQgc2V0TnVtYmVyKFN0cmluZyBudW1iZXIpIHsgCi0gICAgICAgIHRoaXMubnVtYmVyID0gbnVtYmVyOyAKKworICAgIEBDb2x1bW4obmFtZT0iTlVNQiIpCisgICAgcHVibGljIFN0cmluZyBnZXROdW1iZXIoKSB7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0TnVtYmVyKFN0cmluZyBudW1iZXIpIHsKKyAgICAgICAgdGhpcy5udW1iZXIgPSBudW1iZXI7CiAgICAgfQogCiAgICAgQElkCiAgICAgQENvbHVtbihuYW1lPSJUWVBFIikKLQlwdWJsaWMgU3RyaW5nIGdldFR5cGUoKSB7IAotICAgICAgICByZXR1cm4gdHlwZTsgCisgICAgcHVibGljIFN0cmluZyBnZXRUeXBlKCkgeworICAgICAgICByZXR1cm4gdHlwZTsKICAgICB9Ci0gICAgCi0JcHVibGljIHZvaWQgc2V0VHlwZShTdHJpbmcgdHlwZSkgewotCQl0aGlzLnR5cGUgPSB0eXBlOwotCX0KIAotCUBDb2x1bW4obmFtZT0iQVJFQV9DT0RFIikKLQlwdWJsaWMgU3RyaW5nIGdldEFyZWFDb2RlKCkgeyAKLSAgICAgICAgcmV0dXJuIGFyZWFDb2RlOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRUeXBlKFN0cmluZyB0eXBlKSB7CisgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7CiAgICAgfQotICAgIAotCXB1YmxpYyB2b2lkIHNldEFyZWFDb2RlKFN0cmluZyBhcmVhQ29kZSkgewotCQl0aGlzLmFyZWFDb2RlID0gYXJlYUNvZGU7Ci0JfQogCi0JQE1hbnlUb09uZQotCUBKb2luQ29sdW1uKG5hbWU9Ik9XTkVSX0lEIiwgcmVmZXJlbmNlZENvbHVtbk5hbWU9IkVNUF9JRCIpCi0JcHVibGljIEVtcGxveWVlIGdldE93bmVyKCkgeyAKLSAgICAgICAgcmV0dXJuIG93bmVyOyAKKyAgICBAQ29sdW1uKG5hbWU9IkFSRUFfQ09ERSIpCisgICAgcHVibGljIFN0cmluZyBnZXRBcmVhQ29kZSgpIHsKKyAgICAgICAgcmV0dXJuIGFyZWFDb2RlOwogICAgIH0KLSAgICAKLQlwdWJsaWMgdm9pZCBzZXRPd25lcihFbXBsb3llZSBvd25lcikgewotCQl0aGlzLm93bmVyID0gb3duZXI7Ci0JfQorCisgICAgcHVibGljIHZvaWQgc2V0QXJlYUNvZGUoU3RyaW5nIGFyZWFDb2RlKSB7CisgICAgICAgIHRoaXMuYXJlYUNvZGUgPSBhcmVhQ29kZTsKKyAgICB9CisKKyAgICBATWFueVRvT25lCisgICAgQEpvaW5Db2x1bW4obmFtZT0iT1dORVJfSUQiLCByZWZlcmVuY2VkQ29sdW1uTmFtZT0iRU1QX0lEIikKKyAgICBwdWJsaWMgRW1wbG95ZWUgZ2V0T3duZXIoKSB7CisgICAgICAgIHJldHVybiBvd25lcjsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRPd25lcihFbXBsb3llZSBvd25lcikgeworICAgICAgICB0aGlzLm93bmVyID0gb3duZXI7CisgICAgfQogCiAgICAgLyoqCiAgICAgICogRXhhbXBsZTogUGhvbmVbV29ya106ICg2MTMpIDIyNS04ODEyCkBAIC0xMTQsNyArMTE0LDcgQEAKIAogICAgICAgICByZXR1cm4gd3JpdGVyLnRvU3RyaW5nKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQnVpbGRzIHRoZSBQaG9uZU51bWJlclBLIGZvciB0aGlzIGNsYXNzCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qcGEtaW50ZWdyYXRpb24vdG9wbGluay1lc3NlbnRpYWxzL2FkdmFuY2VkL2VqYi9QaG9uZU51bWJlclBLLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qcGEtaW50ZWdyYXRpb24vdG9wbGluay1lc3NlbnRpYWxzL2FkdmFuY2VkL2VqYi9QaG9uZU51bWJlclBLLmphdmEKaW5kZXggNTA2NDFiYi4uMmVlY2M4MSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvanBhLWludGVncmF0aW9uL3RvcGxpbmstZXNzZW50aWFscy9hZHZhbmNlZC9lamIvUGhvbmVOdW1iZXJQSy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pwYS1pbnRlZ3JhdGlvbi90b3BsaW5rLWVzc2VudGlhbHMvYWR2YW5jZWQvZWpiL1Bob25lTnVtYmVyUEsuamF2YQpAQCAtMTgsMjYgKzE4LDI2IEBACiAKIHB1YmxpYyBjbGFzcyBQaG9uZU51bWJlclBLICB7CiAgICAgcHVibGljIEludGVnZXIgaWQ7Ci0JcHVibGljIFN0cmluZyB0eXBlOworICAgIHB1YmxpYyBTdHJpbmcgdHlwZTsKIAogICAgIHB1YmxpYyBQaG9uZU51bWJlclBLKCkge30KIAotCXB1YmxpYyBJbnRlZ2VyIGdldElkKCkgeyAKLSAgICAgICAgcmV0dXJuIGlkOyAKKyAgICBwdWJsaWMgSW50ZWdlciBnZXRJZCgpIHsKKyAgICAgICAgcmV0dXJuIGlkOwogICAgIH0KLSAgICAKLQlwdWJsaWMgdm9pZCBzZXRJZChJbnRlZ2VyIGlkKSB7Ci0JCXRoaXMuaWQgPSBpZDsKLQl9CiAKLQlwdWJsaWMgU3RyaW5nIGdldFR5cGUoKSB7IAotICAgICAgICByZXR1cm4gdHlwZTsgCisgICAgcHVibGljIHZvaWQgc2V0SWQoSW50ZWdlciBpZCkgeworICAgICAgICB0aGlzLmlkID0gaWQ7CiAgICAgfQotICAgIAotCXB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIHR5cGUpIHsKLQkJdGhpcy50eXBlID0gdHlwZTsKLQl9Ci0gICAgCisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKSB7CisgICAgICAgIHJldHVybiB0eXBlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIHR5cGUpIHsKKyAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBlcXVhbHM6IEFuc3dlciB0cnVlIGlmIHRoZSBpZHMgYXJlIGVxdWFsCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qcGEtaW50ZWdyYXRpb24vdG9wbGluay1lc3NlbnRpYWxzL2FkdmFuY2VkL2VqYi9Qcm9qZWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qcGEtaW50ZWdyYXRpb24vdG9wbGluay1lc3NlbnRpYWxzL2FkdmFuY2VkL2VqYi9Qcm9qZWN0LmphdmEKaW5kZXggZjkyZWVkNi4uZDA5MjlkYyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvanBhLWludGVncmF0aW9uL3RvcGxpbmstZXNzZW50aWFscy9hZHZhbmNlZC9lamIvUHJvamVjdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pwYS1pbnRlZ3JhdGlvbi90b3BsaW5rLWVzc2VudGlhbHMvYWR2YW5jZWQvZWpiL1Byb2plY3QuamF2YQpAQCAtNDIsOCArNDIsOCBAQAogQERpc2NyaW1pbmF0b3JDb2x1bW4obmFtZT0iUFJPSl9UWVBFIikKIEBEaXNjcmltaW5hdG9yVmFsdWUoIlAiKQogQE5hbWVkUXVlcnkoCi0JbmFtZT0iZmluZFByb2plY3RCeU5hbWUiLAotCXF1ZXJ5PSJTRUxFQ1QgT0JKRUNUKHByb2plY3QpIEZST00gUHJvamVjdCBwcm9qZWN0IFdIRVJFIHByb2plY3QubmFtZSA9IDpuYW1lIgorICAgIG5hbWU9ImZpbmRQcm9qZWN0QnlOYW1lIiwKKyAgICBxdWVyeT0iU0VMRUNUIE9CSkVDVChwcm9qZWN0KSBGUk9NIFByb2plY3QgcHJvamVjdCBXSEVSRSBwcm9qZWN0Lm5hbWUgPSA6bmFtZSIKICkKIHB1YmxpYyBjbGFzcyBQcm9qZWN0IGltcGxlbWVudHMgU2VyaWFsaXphYmxlIHsKICAgICBwdWJsaWMgaW50IHByZV91cGRhdGVfY291bnQgPSAwOwpAQCAtNTMsNzYgKzUzLDc2IEBACiAgICAgcHVibGljIGludCBwcmVfcGVyc2lzdF9jb3VudCA9IDA7CiAgICAgcHVibGljIGludCBwb3N0X3BlcnNpc3RfY291bnQgPSAwOwogICAgIHB1YmxpYyBpbnQgcG9zdF9sb2FkX2NvdW50ID0gMDsKLSAgICAKLQlwcml2YXRlIEludGVnZXIgaWQ7Ci0JcHJpdmF0ZSBpbnQgdmVyc2lvbjsKLQlwcml2YXRlIFN0cmluZyBuYW1lOwotCXByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwotCXByaXZhdGUgRW1wbG95ZWUgdGVhbUxlYWRlcjsKLQlwcml2YXRlIENvbGxlY3Rpb248RW1wbG95ZWU+IHRlYW1NZW1iZXJzOwogCi0JcHVibGljIFByb2plY3QgKCkgeworICAgIHByaXZhdGUgSW50ZWdlciBpZDsKKyAgICBwcml2YXRlIGludCB2ZXJzaW9uOworICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CisgICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CisgICAgcHJpdmF0ZSBFbXBsb3llZSB0ZWFtTGVhZGVyOworICAgIHByaXZhdGUgQ29sbGVjdGlvbjxFbXBsb3llZT4gdGVhbU1lbWJlcnM7CisKKyAgICBwdWJsaWMgUHJvamVjdCAoKSB7CiAgICAgICAgIHRoaXMudGVhbU1lbWJlcnMgPSBuZXcgVmVjdG9yPEVtcGxveWVlPigpOwotCX0KKyAgICB9CiAKLQlASWQKKyAgICBASWQKICAgICBAR2VuZXJhdGVkVmFsdWUoc3RyYXRlZ3k9U0VRVUVOQ0UsIGdlbmVyYXRvcj0iUFJPSkVDVF9TRVFVRU5DRV9HRU5FUkFUT1IiKQotCUBTZXF1ZW5jZUdlbmVyYXRvcihuYW1lPSJQUk9KRUNUX1NFUVVFTkNFX0dFTkVSQVRPUiIsIHNlcXVlbmNlTmFtZT0iUFJPSkVDVF9TRVEiLCBhbGxvY2F0aW9uU2l6ZT0xMCkKLQlAQ29sdW1uKG5hbWU9IlBST0pfSUQiKQotCXB1YmxpYyBJbnRlZ2VyIGdldElkKCkgewotICAgICAgICByZXR1cm4gaWQ7IAotICAgIH0KLSAgICAKLQlwdWJsaWMgdm9pZCBzZXRJZChJbnRlZ2VyIGlkKSB7Ci0gICAgICAgIHRoaXMuaWQgPSBpZDsgCisgICAgQFNlcXVlbmNlR2VuZXJhdG9yKG5hbWU9IlBST0pFQ1RfU0VRVUVOQ0VfR0VORVJBVE9SIiwgc2VxdWVuY2VOYW1lPSJQUk9KRUNUX1NFUSIsIGFsbG9jYXRpb25TaXplPTEwKQorICAgIEBDb2x1bW4obmFtZT0iUFJPSl9JRCIpCisgICAgcHVibGljIEludGVnZXIgZ2V0SWQoKSB7CisgICAgICAgIHJldHVybiBpZDsKICAgICB9CiAKLQlAVmVyc2lvbgotCUBDb2x1bW4obmFtZT0iVkVSU0lPTiIpCi0JcHVibGljIGludCBnZXRWZXJzaW9uKCkgewotICAgICAgICByZXR1cm4gdmVyc2lvbjsgCi0gICAgfQotICAgIAotCXByb3RlY3RlZCB2b2lkIHNldFZlcnNpb24oaW50IHZlcnNpb24pIHsgCi0gICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247IAorICAgIHB1YmxpYyB2b2lkIHNldElkKEludGVnZXIgaWQpIHsKKyAgICAgICAgdGhpcy5pZCA9IGlkOwogICAgIH0KIAotCUBDb2x1bW4obmFtZT0iUFJPSl9OQU1FIikKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7IAotICAgICAgICByZXR1cm4gbmFtZTsgCi0gICAgfQotICAgIAotCXB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsgCi0gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7IAorICAgIEBWZXJzaW9uCisgICAgQENvbHVtbihuYW1lPSJWRVJTSU9OIikKKyAgICBwdWJsaWMgaW50IGdldFZlcnNpb24oKSB7CisgICAgICAgIHJldHVybiB2ZXJzaW9uOwogICAgIH0KIAotCUBDb2x1bW4obmFtZT0iREVTQ1JJUCIpCi0JcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsgCi0gICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsgCi0gICAgfQotICAgIAotCXB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikgeyAKLSAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOyAKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXRWZXJzaW9uKGludCB2ZXJzaW9uKSB7CisgICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247CiAgICAgfQogCi0JQE9uZVRvT25lCi0JQEpvaW5Db2x1bW4obmFtZT0iTEVBREVSX0lEIikKLQlwdWJsaWMgRW1wbG95ZWUgZ2V0VGVhbUxlYWRlcigpIHsKLSAgICAgICAgcmV0dXJuIHRlYW1MZWFkZXI7IAotICAgIH0KLSAgICAKLQlwdWJsaWMgdm9pZCBzZXRUZWFtTGVhZGVyKEVtcGxveWVlIHRlYW1MZWFkZXIpIHsgCi0gICAgICAgIHRoaXMudGVhbUxlYWRlciA9IHRlYW1MZWFkZXI7IAorICAgIEBDb2x1bW4obmFtZT0iUFJPSl9OQU1FIikKKyAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KIAotCUBNYW55VG9NYW55KG1hcHBlZEJ5PSJwcm9qZWN0cyIpCi0JcHVibGljIENvbGxlY3Rpb248RW1wbG95ZWU+IGdldFRlYW1NZW1iZXJzKCkgeyAKLSAgICAgICAgcmV0dXJuIHRlYW1NZW1iZXJzOyAKKyAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAotCXB1YmxpYyB2b2lkIHNldFRlYW1NZW1iZXJzKENvbGxlY3Rpb248RW1wbG95ZWU+IGVtcGxveWVlcykgewotCQl0aGlzLnRlYW1NZW1iZXJzID0gZW1wbG95ZWVzOwotCX0KKworICAgIEBDb2x1bW4obmFtZT0iREVTQ1JJUCIpCisgICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikgeworICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgfQorCisgICAgQE9uZVRvT25lCisgICAgQEpvaW5Db2x1bW4obmFtZT0iTEVBREVSX0lEIikKKyAgICBwdWJsaWMgRW1wbG95ZWUgZ2V0VGVhbUxlYWRlcigpIHsKKyAgICAgICAgcmV0dXJuIHRlYW1MZWFkZXI7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VGVhbUxlYWRlcihFbXBsb3llZSB0ZWFtTGVhZGVyKSB7CisgICAgICAgIHRoaXMudGVhbUxlYWRlciA9IHRlYW1MZWFkZXI7CisgICAgfQorCisgICAgQE1hbnlUb01hbnkobWFwcGVkQnk9InByb2plY3RzIikKKyAgICBwdWJsaWMgQ29sbGVjdGlvbjxFbXBsb3llZT4gZ2V0VGVhbU1lbWJlcnMoKSB7CisgICAgICAgIHJldHVybiB0ZWFtTWVtYmVyczsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRUZWFtTWVtYmVycyhDb2xsZWN0aW9uPEVtcGxveWVlPiBlbXBsb3llZXMpIHsKKyAgICAgICAgdGhpcy50ZWFtTWVtYmVycyA9IGVtcGxveWVlczsKKyAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBhZGRUZWFtTWVtYmVyKEVtcGxveWVlIGVtcGxveWVlKSB7CiAgICAgICAgIGdldFRlYW1NZW1iZXJzKCkuYWRkKGVtcGxveWVlKTsKQEAgLTEzOCwzOSArMTM4LDM5IEBACiAKICAgICAgICAgcmV0dXJuIHNidWZmLnRvU3RyaW5nKCk7CiAgICAgfQotICAgIAorCiAgICAgQFByZVBlcnNpc3QKLQlwdWJsaWMgdm9pZCBwcmVQZXJzaXN0KCkgeworICAgIHB1YmxpYyB2b2lkIHByZVBlcnNpc3QoKSB7CiAgICAgICAgICsrcHJlX3BlcnNpc3RfY291bnQ7Ci0JfQorICAgIH0KIAotCUBQb3N0UGVyc2lzdAotCXB1YmxpYyB2b2lkIHBvc3RQZXJzaXN0KCkgeworICAgIEBQb3N0UGVyc2lzdAorICAgIHB1YmxpYyB2b2lkIHBvc3RQZXJzaXN0KCkgewogICAgICAgICArK3Bvc3RfcGVyc2lzdF9jb3VudDsKLQl9CisgICAgfQogCi0JQFByZVJlbW92ZQotCXB1YmxpYyB2b2lkIHByZVJlbW92ZSgpIHsKKyAgICBAUHJlUmVtb3ZlCisgICAgcHVibGljIHZvaWQgcHJlUmVtb3ZlKCkgewogICAgICAgICArK3ByZV9yZW1vdmVfY291bnQ7Ci0JfQorICAgIH0KIAotCUBQb3N0UmVtb3ZlCi0JcHVibGljIHZvaWQgcG9zdFJlbW92ZSgpIHsKKyAgICBAUG9zdFJlbW92ZQorICAgIHB1YmxpYyB2b2lkIHBvc3RSZW1vdmUoKSB7CiAgICAgICAgICsrcG9zdF9yZW1vdmVfY291bnQ7Ci0JfQorICAgIH0KIAotCUBQcmVVcGRhdGUKLQlwdWJsaWMgdm9pZCBwcmVVcGRhdGUoKSB7CisgICAgQFByZVVwZGF0ZQorICAgIHB1YmxpYyB2b2lkIHByZVVwZGF0ZSgpIHsKICAgICAgICAgKytwcmVfdXBkYXRlX2NvdW50OwotCX0KKyAgICB9CiAKLQlAUG9zdFVwZGF0ZQotCXB1YmxpYyB2b2lkIHBvc3RVcGRhdGUoKSB7CisgICAgQFBvc3RVcGRhdGUKKyAgICBwdWJsaWMgdm9pZCBwb3N0VXBkYXRlKCkgewogICAgICAgICArK3Bvc3RfdXBkYXRlX2NvdW50OwotCX0KKyAgICB9CiAKLQlAUG9zdExvYWQKLQlwdWJsaWMgdm9pZCBwb3N0TG9hZCgpIHsKKyAgICBAUG9zdExvYWQKKyAgICBwdWJsaWMgdm9pZCBwb3N0TG9hZCgpIHsKICAgICAgICAgKytwb3N0X2xvYWRfY291bnQ7Ci0JfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pwYS1pbnRlZ3JhdGlvbi90b3BsaW5rLWVzc2VudGlhbHMvZnJhbWV3b3JrL1Rlc3ROR1Rlc3RDYXNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qcGEtaW50ZWdyYXRpb24vdG9wbGluay1lc3NlbnRpYWxzL2ZyYW1ld29yay9UZXN0TkdUZXN0Q2FzZS5qYXZhCmluZGV4IDY5OGE1ZjQuLmZiZGU3YWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pwYS1pbnRlZ3JhdGlvbi90b3BsaW5rLWVzc2VudGlhbHMvZnJhbWV3b3JrL1Rlc3ROR1Rlc3RDYXNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvanBhLWludGVncmF0aW9uL3RvcGxpbmstZXNzZW50aWFscy9mcmFtZXdvcmsvVGVzdE5HVGVzdENhc2UuamF2YQpAQCAtNTEsMTYgKzUxLDE2IEBACiAgICAgICAgICAgICBnZXRTZXJ2ZXJTZXNzaW9uKCkuZ2V0SWRlbnRpdHlNYXBBY2Nlc3NvcigpLmluaXRpYWxpemVBbGxJZGVudGl0eU1hcHMoKTsKICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3ICBSdW50aW1lRXhjZXB0aW9uKCJBbiBleGNlcHRpb24gb2NjdXJyZWQgdHJ5aW5nIGNsZWFyIHRoZSBjYWNoZS4iLCBleCk7Ci0gICAgICAgIH0gICAKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZSBhbiBlbnRpdHkgbWFuYWdlci4KICAgICAgKi8KICAgICBwdWJsaWMgRW50aXR5TWFuYWdlciBjcmVhdGVFbnRpdHlNYW5hZ2VyKCkgewotICAgICAgICByZXR1cm4gZ2V0RW50aXR5TWFuYWdlckZhY3RvcnkoKS5jcmVhdGVFbnRpdHlNYW5hZ2VyKCk7ICAgICAgIAorICAgICAgICByZXR1cm4gZ2V0RW50aXR5TWFuYWdlckZhY3RvcnkoKS5jcmVhdGVFbnRpdHlNYW5hZ2VyKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIE1hcCBnZXREYXRhYmFzZVByb3BlcnRpZXMoKXsKICAgICAgICAgaWYgKHByb3BlcnRpZXNNYXAgPT0gbnVsbCl7CiAgICAgICAgICAgICBwcm9wZXJ0aWVzTWFwID0gbmV3IEhhc2hNYXAoKTsKQEAgLTY4LDE4ICs2OCwxOCBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzTWFwOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTZXJ2ZXJTZXNzaW9uIGdldFNlcnZlclNlc3Npb24oKXsKLSAgICAgICAgcmV0dXJuICgob3JhY2xlLnRvcGxpbmsuZXNzZW50aWFscy5pbnRlcm5hbC5lamIuY21wMy5FbnRpdHlNYW5hZ2VySW1wbCljcmVhdGVFbnRpdHlNYW5hZ2VyKCkpLmdldFNlcnZlclNlc3Npb24oKTsgICAgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuICgob3JhY2xlLnRvcGxpbmsuZXNzZW50aWFscy5pbnRlcm5hbC5lamIuY21wMy5FbnRpdHlNYW5hZ2VySW1wbCljcmVhdGVFbnRpdHlNYW5hZ2VyKCkpLmdldFNlcnZlclNlc3Npb24oKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgRW50aXR5TWFuYWdlckZhY3RvcnkgZ2V0RW50aXR5TWFuYWdlckZhY3RvcnkoKXsKICAgICAgICAgaWYgKGVtZiA9PSBudWxsKXsKICAgICAgICAgICAgIGVtZiA9IFBlcnNpc3RlbmNlLmNyZWF0ZUVudGl0eU1hbmFnZXJGYWN0b3J5KCJkZWZhdWx0IiwgZ2V0RGF0YWJhc2VQcm9wZXJ0aWVzKCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBlbWY7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFBsYXRmb3JtIGdldERiUGxhdGZvcm0oKSB7CiAgICAgICAgIHJldHVybiBnZXRTZXJ2ZXJTZXNzaW9uKCkuZ2V0RGF0YXNvdXJjZVBsYXRmb3JtKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvYnVpbGQueG1sCmluZGV4IDU2N2Y0ZTIuLmI0NmI2NzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9idWlsZC54bWwKQEAgLTM5LDE3ICszOSwxNyBAQAogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPHJlY29yZCBuYW1lPSJsYXp5aW5pdC5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiIC8+CiAgICAgICAgIDxhbnQgZGlyPSJjb252ZXJ0ZXIiIHRhcmdldD0iYWxsIi8+Ci0gICAgICAgIDxhbnQgZGlyPSJlamJqYXIiIHRhcmdldD0iYWxsIi8+ICAKKyAgICAgICAgPGFudCBkaXI9ImVqYmphciIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPCEtLQotICAgICAgICA8YW50IGRpcj0iZWpid3MiIHRhcmdldD0iYWxsIi8+ICAKKyAgICAgICAgPGFudCBkaXI9ImVqYndzIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICAtLT4KLSAgICAgICAgPGFudCBkaXI9ImptczEvc2ltcGxlIiB0YXJnZXQ9ImFsbCIvPiAgCi0gICAgICAgIDxhbnQgZGlyPSJqbXMyL3NpbXBsZSIgdGFyZ2V0PSJhbGwiLz4gIAotICAgICAgICA8YW50IGRpcj0iam1zMy9zaW1wbGUiIHRhcmdldD0iYWxsIi8+ICAKLSAgICAgICAgPGFudCBkaXI9Imptc3dlYiIgdGFyZ2V0PSJhbGwiLz4gIAotICAgICAgICA8YW50IGRpcj0ibWJlYW5zMSIgdGFyZ2V0PSJhbGwiLz4gIAotICAgICAgICA8YW50IGRpcj0ib25seWdldGNvbm5lY3Rpb25zZXJ2bGV0IiB0YXJnZXQ9ImFsbCIvPiAgCi0gICAgICAgIDxhbnQgZGlyPSJzdGFuZGFsb25ld2FyIiB0YXJnZXQ9ImFsbCIvPiAKKyAgICAgICAgPGFudCBkaXI9ImptczEvc2ltcGxlIiB0YXJnZXQ9ImFsbCIvPgorICAgICAgICA8YW50IGRpcj0iam1zMi9zaW1wbGUiIHRhcmdldD0iYWxsIi8+CisgICAgICAgIDxhbnQgZGlyPSJqbXMzL3NpbXBsZSIgdGFyZ2V0PSJhbGwiLz4KKyAgICAgICAgPGFudCBkaXI9Imptc3dlYiIgdGFyZ2V0PSJhbGwiLz4KKyAgICAgICAgPGFudCBkaXI9Im1iZWFuczEiIHRhcmdldD0iYWxsIi8+CisgICAgICAgIDxhbnQgZGlyPSJvbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQiIHRhcmdldD0iYWxsIi8+CisgICAgICAgIDxhbnQgZGlyPSJzdGFuZGFsb25ld2FyIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0idGltZXIiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJ3ZWJlYXIiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJqbXMtdHhsb29rdXAiIHRhcmdldD0iYWxsIi8+CkBAIC01OCw5ICs1OCw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGxhenlJbml0IHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGxhenlJbml0IHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2NvbW1vbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9jb21tb24ueG1sCmluZGV4IDUwZTIyYWUuLjBmOWI0ZWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2NvbW1vbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvY29tbW9uLnhtbApAQCAtMTgsNyArMTgsNyBAQAogCiA8IS0tCiAgICAgVGhpcyBpcyB0aGUgY29tbW9uIHRhcmdldHMgZm9yIGFsbCBsYXp5SW5pdCB0ZXN0cwotICAgIGltcG9ydGVkIGludG8gYWxsIHRoZSBsZWFmIGxldmVsIGJ1aWxkIGZpbGVzIAorICAgIGltcG9ydGVkIGludG8gYWxsIHRoZSBsZWFmIGxldmVsIGJ1aWxkIGZpbGVzCiAtLT4KIAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvY29udmVydGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9jb252ZXJ0ZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBlYWE0YjdjLi5mMjBjNjk5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9jb252ZXJ0ZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9jb252ZXJ0ZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjggKzE1LDI4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItc3RhdGVsZXNzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jb252ZXJ0ZXIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNvbnZlcnRlciIvPiAgICAgICAgXHUwMDIwCiAKLTxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgCi0JdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIAotCXZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiXHUwMDIwCisgICAgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciJcdTAwMjAKKyAgICB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPiAgICAgICAgXHUwMDIwCiAKLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9ImNvbS5zdW4uczFwZXFlLmVqYi5zdGF0ZWxlc3MuY29udmVydGVyLmNsaWVudC5Db252ZXJ0ZXJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iY29tLnN1bi5zMXBlcWUuZWpiLnN0YXRlbGVzcy5jb252ZXJ0ZXIuY2xpZW50LkNvbnZlcnRlckNsaWVudCIvPgogCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIAogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIApAQCAtNDUsOCArNDUsOCBAQAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tCiA8cHJvcGVydHkgbmFtZT0iam5kaS5uYW1lIiB2YWx1ZT0iY29udmVydGVyIi8+Ci08cHJvcGVydHkgbmFtZT0icHJvdmlkZXIudXJsIiB2YWx1ZT0iaWlvcDovL2xvY2FsaG9zdDoke29yYi5wb3J0fSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLm5hbWluZy5TZXJpYWxJbml0Q29udGV4dEZhY3RvcnkiLz4gCi08cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIgdmFsdWU9ImNvbS5zdW4uam5kaS5jb3NuYW1pbmcuQ05DdHhGYWN0b3J5Ii8+IAorPHByb3BlcnR5IG5hbWU9InByb3ZpZGVyLnVybCIgdmFsdWU9Imlpb3A6Ly9sb2NhbGhvc3Q6JHtvcmIucG9ydH0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLm5hbWluZy5TZXJpYWxJbml0Q29udGV4dEZhY3RvcnkiLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IiB2YWx1ZT0iY29tLnN1bi5qbmRpLmNvc25hbWluZy5DTkN0eEZhY3RvcnkiLz5cdTAwMjAKIC0tPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9jb252ZXJ0ZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvY29udmVydGVyL2J1aWxkLnhtbAppbmRleCBkMzQxZWNmLi42MWFmZDVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9jb252ZXJ0ZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2NvbnZlcnRlci9idWlsZC54bWwKQEAgLTU5LDcgKzU5LDcgQEAKICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJzcWUtdGltZXItcG9vbCIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTcxLDEyICs3MSwxMiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlciIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KQEAgLTkwLDI3ICs5MCwyNyBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuLXN0YW5kYWxvbmUtY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJqbmRpLm5hbWUiIHZhbHVlPSJjb252ZXJ0ZXIiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InByb3ZpZGVyLnVybCIgdmFsdWU9Imlpb3A6Ly8ke2FkbWluLmhvc3R9OiR7b3JiLnBvcnR9Ii8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiCiAgICAgICAgICAgICB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLm5hbWluZy5TZXJpYWxJbml0Q29udGV4dEZhY3RvcnkiLz4KIDwhLS0KLQk8cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIgCi0gICAgICAgICAgICAJdmFsdWU9Im9yZy5nbGFzc2Zpc2guam5kaS5jb3NuYW1pbmcuQ05DdHhGYWN0b3J5Ii8+CisgICAgPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiCisgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5nbGFzc2Zpc2guam5kaS5jb3NuYW1pbmcuQ05DdHhGYWN0b3J5Ii8+CiAtLT4KLQk8ZWNobyBtZXNzYWdlPSJwcm92aWRlci51cmwgdXNlZCBpcyAke3Byb3ZpZGVyLnVybH0iLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJwcm92aWRlci51cmwgdXNlZCBpcyAke3Byb3ZpZGVyLnVybH0iLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iJHt0ZXN0LmNsaWVudH0iCiAgICAgICAgIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9OiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIKICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiIGZvcms9InRydWUiPgotCTxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsSG9zdD0ke2FkbWluLmhvc3R9Ii8+Ci0JPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0PSR7b3JiLnBvcnR9Ii8+CisgICAgPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxIb3N0PSR7YWRtaW4uaG9zdH0iLz4KKyAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtwcm92aWRlci51cmx9Ii8+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y3R4ZmFjdG9yeX0iLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtqbmRpLm5hbWV9Ii8+CiAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2NvbnZlcnRlci9jbGllbnQvQ29udmVydGVyQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9jb252ZXJ0ZXIvY2xpZW50L0NvbnZlcnRlckNsaWVudC5qYXZhCmluZGV4IDJlNDFmYmEuLjhiNWQ2NGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2NvbnZlcnRlci9jbGllbnQvQ29udmVydGVyQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvY29udmVydGVyL2NsaWVudC9Db252ZXJ0ZXJDbGllbnQuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqIEEgc2ltcGxlIGphdmEgY2xpZW50LiBUaGlzIHVzZXMgdGhlIHNlcnZpY2VzIHByb3ZpZGVkIGJ5IHRoZSA8Y29kZT5Db252ZXJ0ZXJCZWFuPC9jb2RlPiBhbmQKLSAqIGNvbnZlcnRzIDEwMCBVUyBkb2xsYXJzIHRvIFllbiBhbmQgMTAwIFllbiB0byBFdXJvLiAKKyAqIGNvbnZlcnRzIDEwMCBVUyBkb2xsYXJzIHRvIFllbiBhbmQgMTAwIFllbiB0byBFdXJvLgogICogPHA+SW4gdGhpcyByZWdhcmQsIGl0IGRvZXMgdGhlIGZvbGxvd2luZyBpbiBvcmRlcgogICogPHVsPgogICogPGxpPkxvY2F0ZXMgdGhlIGhvbWUgaW50ZXJmYWNlIG9mIHRoZSBlbnRlcnByaXNlIGJlYW4KQEAgLTM3LDIxICszNywyMSBAQAogICogPGJyPgogICogPGI+TG9jYXRpbmcgdGhlIGhvbWUgaW50ZXJmYWNlOjwvYj4KICAqIDxibG9ja3F1b3RlPjxwcmU+Ci0gKglDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAqCUNvbnRleHQgbXlFbnYgPSAoQ29udGV4dClpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2VudiIpOwotICoJT2JqZWN0IG9ianJlZiA9IG15RW52Lmxvb2t1cCgiZWpiL1NpbXBsZUNvbnZlcnRlciIpOworICogICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgKiAgICBDb250ZXh0IG15RW52ID0gKENvbnRleHQpaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYiKTsKKyAqICAgIE9iamVjdCBvYmpyZWYgPSBteUVudi5sb29rdXAoImVqYi9TaW1wbGVDb252ZXJ0ZXIiKTsKICAqICBDb252ZXJ0ZXJIb21lIGhvbWUgPSAoQ29udmVydGVySG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBDb252ZXJ0ZXJIb21lLmNsYXNzKTsKICAqIDwvcHJlPjwvYmxvY2txdW90ZT4KICAqIDxicj4KICAqIDxiPkNyZWF0aW5nIHRoZSByZW1vdGUgaW50ZXJmYWNlOjwvYj4KICAqIDxibG9ja3F1b3RlPjxwcmU+Ci0gKglDb252ZXJ0ZXIgY3VycmVuY3lDb252ZXJ0ZXIgPSBob21lLmNyZWF0ZSgpOworICogICAgQ29udmVydGVyIGN1cnJlbmN5Q29udmVydGVyID0gaG9tZS5jcmVhdGUoKTsKICAqIDwvcHJlPjwvYmxvY2txdW90ZT4KICAqIDxicj4KICAqIDxiPkludm9raW5nIGJ1c2luZXNzIG1ldGhvZHM6PC9iPgogICogPGJsb2NrcXVvdGU+PHByZT4KICAqICBCaWdEZWNpbWFsIHBhcmFtID0gbmV3IEJpZ0RlY2ltYWwgKCIxMDAuMDAiKTsKLSAqCWFtb3VudCA9IGN1cnJlbmN5Q29udmVydGVyLmRvbGxhclRvWWVuKHBhcmFtKTsKKyAqICAgIGFtb3VudCA9IGN1cnJlbmN5Q29udmVydGVyLmRvbGxhclRvWWVuKHBhcmFtKTsKICAqICBhbW91bnQgPSBjdXJyZW5jeUNvbnZlcnRlci55ZW5Ub0V1cm8ocGFyYW0pOwogICogPC9wcmU+PC9ibG9ja3F1b3RlPgogICogPGJyPgpAQCAtNjYsNyArNjYsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ29udmVydGVyQ2xpZW50IHsKIAotICAgIHByaXZhdGUgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIENvbnZlcnRlckNsaWVudCgpIHsKQEAgLTgwLDM1ICs4MCwzNSBAQAogICAgICoKICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQlDb252ZXJ0ZXJDbGllbnQgY2xpZW50ID0gbmV3IENvbnZlcnRlckNsaWVudCgpOwotCWNsaWVudC5ydW4oYXJncyk7CisgICAgQ29udmVydGVyQ2xpZW50IGNsaWVudCA9IG5ldyBDb252ZXJ0ZXJDbGllbnQoKTsKKyAgICBjbGllbnQucnVuKGFyZ3MpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBydW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBTdHJpbmcgdXJsID0gbnVsbDsKLQlTdHJpbmcgdGVzdElkID0gbnVsbDsKKyAgICBTdHJpbmcgdGVzdElkID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGpuZGlOYW1lID0gbnVsbDsKICAgICAgICAgQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGN0eEZhY3RvcnkgPSBudWxsOwotCWphdmEubGFuZy5PYmplY3Qgb2JqID0gbnVsbDsKKyAgICBqYXZhLmxhbmcuT2JqZWN0IG9iaiA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgdGhlIGNvbnZlcnRlciBzYW1wbGUuIik7CiAKICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAzKSB7CiAgICAgICAgICAgICAgICAgdXJsID0gYXJnc1swXTsKICAgICAgICAgICAgICAgICBjdHhGYWN0b3J5ID0gYXJnc1sxXTsKLQkJam5kaU5hbWUgPSBhcmdzWzJdOworICAgICAgICBqbmRpTmFtZSA9IGFyZ3NbMl07CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICggKHVybCA9PSBudWxsKSB8fCAoY3R4RmFjdG9yeSA9PSBudWxsKSApIHsKLQkJdGVzdElkID0gIkNvbnZlcnRlcjo6U2FtcGxlIEFwcENsaWVudCI7CisgICAgICAgIHRlc3RJZCA9ICJDb252ZXJ0ZXI6OlNhbXBsZSBBcHBDbGllbnQiOwogICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIENvbnRleHQgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMKICAgICAgICAgICAgICAgICBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWZhdWx0IENvbnRleHQgSW5pdGlhbGl6ZWQuLi4iKTsKICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgSG9tZSBvYmplY3QKICAgICAgICAgICAgICAgICBvYmogPSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQ29udmVydGVyIik7CiAgICAgICAgICAgICB9IGVsc2UgewotCQl0ZXN0SWQgPSAiQ29udmVydGVyOjpTYW1wbGUgU3RhbmRhbG9uZS1DbGllbnQiOworICAgICAgICB0ZXN0SWQgPSAiQ29udmVydGVyOjpTYW1wbGUgU3RhbmRhbG9uZS1DbGllbnQiOwogICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgZW52ID0gbmV3IFByb3BlcnRpZXMoKTsKICAgICAgICAgICAgICAgICBlbnYucHV0KCJqYXZhLm5hbWluZy5wcm92aWRlci51cmwiLCB1cmwpOwogICAgICAgICAgICAgICAgIGVudi5wdXQoImphdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbCIsIGN0eEZhY3RvcnkpOwpAQCAtMTM4LDcgKzEzOCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiEiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9IGZpbmFsbHkgewotCSAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvY29udmVydGVyL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvY29udmVydGVyL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCmluZGV4IGRjODU5ZmUuLmEwNzZkNjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2NvbnZlcnRlci9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9jb252ZXJ0ZXIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKQEAgLTIzLDcgKzIzLDcgQEAKICAgICA8c21hbGwtaWNvbj48L3NtYWxsLWljb24+CiAgICAgPGxhcmdlLWljb24+PC9sYXJnZS1pY29uPgogICA8L2ljb24+Ci0gIDxkaXNwbGF5LW5hbWU+Q29udmVydGVyQXBwPC9kaXNwbGF5LW5hbWU+ICAKKyAgPGRpc3BsYXktbmFtZT5Db252ZXJ0ZXJBcHA8L2Rpc3BsYXktbmFtZT4KICAgPG1vZHVsZT4KICAgICA8amF2YT5lamItc3RhdGVsZXNzLWNvbnZlcnRlci1jbGllbnQuamFyPC9qYXZhPgogICA8L21vZHVsZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2NvbnZlcnRlci9lamIvQ29udmVydGVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvY29udmVydGVyL2VqYi9Db252ZXJ0ZXJCZWFuLmphdmEKaW5kZXggYzQ0ZGRkZi4uY2Q2NmYzYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvY29udmVydGVyL2VqYi9Db252ZXJ0ZXJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvY29udmVydGVyL2VqYi9Db252ZXJ0ZXJCZWFuLmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKICAqIEBzZWUgQ29udmVydGVySG9tZQogICovCiBwdWJsaWMgY2xhc3MgQ29udmVydGVyQmVhbiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuLCBUaW1lZE9iamVjdCB7Ci0gICAgCisKICAgICBTZXNzaW9uQ29udGV4dCBzZXNzaW9uQ29udGV4dF87CiAKICAgICBCaWdEZWNpbWFsIHllblJhdGUgPSBuZXcgQmlnRGVjaW1hbCgiMTIxLjYwMDAiKTsKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgLy8gbnVtYmVyIG9mIHRlc3RzIGlzIGdldHRpbmcgbGFyZ2UuICBUaGlzIHNldCBvZiBvcGVyYXRpb25zIHdpbGwKICAgICAgICAgLy8gZW5zdXJlIHRoYXQgdGhlIHRpbWVyIHBlcnNpc3RlbnQgc3RvcmUgaXMgY29uZmlndXJlZCBwcm9wZXJseSwKICAgICAgICAgLy8gaW4gYWRkaXRpb24gdG8gZXhlcmNpc2luZyBzb21lIG9mIHRoZSBjb21tb24gdGltZXIgZnVuY3Rpb25zLgotICAgICAgICB0ZXN0VGltZXJTZXJ2aWNlKCk7ICAgICAgICAKKyAgICAgICAgdGVzdFRpbWVyU2VydmljZSgpOwogCiAgICAgICAgIEJpZ0RlY2ltYWwgcmVzdWx0ID0gZG9sbGFycy5tdWx0aXBseSh5ZW5SYXRlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdC5zZXRTY2FsZSgyLEJpZ0RlY2ltYWwuUk9VTkRfVVApOwpAQCAtODgsNyArODgsNyBAQAogICAgICAqIExvYWRzIHRoZSBzdGF0ZSBvZiB0aGUgYmVhbiBmcm9tIHNlY29uZGFyeSBzdG9yYWdlLiBSZXF1aXJlZCBieSBFSkIgc3BlYy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBLZWVwcyB0aGUgc3RhdGUgb2YgdGhlIGJlYW4gdG8gc2Vjb25kYXJ5IHN0b3JhZ2UuIFJlcXVpcmVkIGJ5IEVKQiBzcGVjLgogICAgICAqLwpAQCAtMTM5LDcgKzEzOSw3IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc2Vzc2lvbkNvbnRleHRfLmdldFVzZXJUcmFuc2FjdGlvbigpLmJlZ2luKCk7CiAgICAgICAgICAgICBDb2xsZWN0aW9uIHRpbWVycyA9IHRpbWVyU2VydmljZS5nZXRUaW1lcnMoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2VqYmphci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpiamFyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzgzMTM2YS4uMWQyNDBmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpiamFyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpiamFyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXN0YXRlZnVsIi8+Ci08cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIAotCXZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Cis8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiXHUwMDIwCisgICAgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXBlcnNpc3RlbmNlIi8+ICAgICAgICAgCi08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiAKLQl2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1wZXJzaXN0ZW5jZSIvPiAgICAgICAgXHUwMDIwCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiXHUwMDIwCisgICAgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImRyb3B0YWJsZXMudmFsdWUiIHZhbHVlPSJ0cnVlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJqYXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpiamFyL2J1aWxkLnhtbAppbmRleCAxZmIyMDA5Li5iOTFiYWQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJqYXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2VqYmphci9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0IiBkZXBlbmRzPSJjbGVhbixjb21waWxlLGJ1aWxkLGRlcGxveSxydW4sdW5kZXBsb3kiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iIC8+IAorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgpAQCAtNDcsMjggKzQ3LDI4IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+Ci0gICAgICAgIDwvYW50Y2FsbD4gIAorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWVqYi1qYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIiA+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iID4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgICAgdmFsdWU9IioqLypMb2NhbCouY2xhc3MsKiovKlJlbW90ZSouY2xhc3MsKiovKkhvbWUqLmNsYXNzLCoqLypCZWFuKi5jbGFzcywqKi8qLmRic2NoZW1hLCoqLypFSkIqLmNsYXNzLCoqL1RyYWRlUmVzdWx0LmNsYXNzLCoqL1Byb2Nlc3NpbmdFcnJvckV4Y2VwdGlvbi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1hcHBjbGllbnQtZWFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXBwY2xpZW50LWphci1jb21tb24iID4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCi0gICAgICAgICAgICAgICAgdmFsdWU9IioqLypMb2NhbCouY2xhc3MsKiovKlJlbW90ZSouY2xhc3MsKiovKkhvbWUqLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzLCoqL1RyYWRlUmVzdWx0LmNsYXNzLCoqL1Byb2Nlc3NpbmdFcnJvckV4Y2VwdGlvbi5jbGFzcyIgLz4JCQorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgorICAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qTG9jYWwqLmNsYXNzLCoqLypSZW1vdGUqLmNsYXNzLCoqLypIb21lKi5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcywqKi9UcmFkZVJlc3VsdC5jbGFzcywqKi9Qcm9jZXNzaW5nRXJyb3JFeGNlcHRpb24uY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIiAvPgogICAgIDwvdGFyZ2V0PgogCi08IS0tIAotICAgIE5vdGU6IFRoZSBvcmRlciBpbiB3aGljaCB0aGUgYnVpbGQgdGFyZ2V0cyBhcmUgY2FsbGVkIG11c3QgYmUgc28gCis8IS0tCisgICAgTm90ZTogVGhlIG9yZGVyIGluIHdoaWNoIHRoZSBidWlsZCB0YXJnZXRzIGFyZSBjYWxsZWQgbXVzdCBiZSBzbwogICAgIHRoYXQgdGhlIGVhciBpcyBjcmVhdGVkIGJlZm9yZSB0aGUgZWpiIGphci4uLi4uCi0gICAgZWxzZSB0aGUgZWFyIHdpbGwgcGFja2FnZSB0aGUgZWpiIGphciB3aXRoIGl0IAorICAgIGVsc2UgdGhlIGVhciB3aWxsIHBhY2thZ2UgdGhlIGVqYiBqYXIgd2l0aCBpdAogLS0+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIi8+CkBAIC03OCw4ICs3OCw4IEBACiA8IS0tCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtYXBwY2xpZW50LWVhciIgLz4KIC0tPgotICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVqYi1qYXIiLz4gIAotICAgIDwvdGFyZ2V0PiAKKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lamItamFyIi8+CisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS1lamItamFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIj4KQEAgLTkzLDIyICs5MywyMiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb3B5LWNsaWVudGphci1yZXN0YXJ0LXNlcnZlciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8Y29weSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiIAorICAgICAgICA8Y29weSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiCiAgICAgICAgICAgICB0b2Rpcj0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvc2VydmVyL2xpYiIgLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iIC8+CiAgICAgPC90YXJnZXQ+CiAKIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWVqYi1qYXIiIC8+IAorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1lamItamFyIiAvPgogPCEtLQotICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1hcHBjbGllbnQtZWFyIiAvPiAKKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktYXBwY2xpZW50LWVhciIgLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb3B5LWNsaWVudGphci1yZXN0YXJ0LXNlcnZlciIvPgogLS0+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1hY2MiIGRlcGVuZHM9ImluaXQtY29tbW9uIiA+Ci0gICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPiAgCisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4tc3RhbmRhbG9uZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTMwLDEwICsxMzAsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iPiAKLQk8cGFyYW0gbmFtZT0iZGVwbG95ZWRhcHAubmFtZSIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+Ci0JPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiI+CisgICAgPHBhcmFtIG5hbWU9ImRlcGxveWVkYXBwLm5hbWUiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPgorICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpiamFyL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2VqYmphci9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNjFjMmIyZS4uZDBjMjkzOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpiamFyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJqYXIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC00OSwxNiArNDksMTYgQEAKIAogICBwcml2YXRlIFN0cmluZyB1cmw7CiAgIHByaXZhdGUgVHJhZGVySG9tZSBob21lOwotCXByaXZhdGUgU3RyaW5nIHRlc3RJZCA9IG51bGw7CisgICAgcHJpdmF0ZSBTdHJpbmcgdGVzdElkID0gbnVsbDsKIAogICBwdWJsaWMgQ2xpZW50KFN0cmluZyB1cmwpCiAgIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewotICAgICAgCisKICAgICAgIHRoaXMudXJsICAgICAgID0gdXJsOwotICAgICAgCisKICAvLyAgICAgaG9tZSA9IGxvb2t1cEhvbWUoKTsKICAgfQotICAKKwogICBwdWJsaWMgQ2xpZW50ICgpIHRocm93cyBqYXZheC5uYW1pbmcuTmFtaW5nRXhjZXB0aW9uewogLy8gICAgICBob21lID0gbG9va3VwSG9tZSgpOwogICB9CkBAIC03MywyNyArNzMsMjcgQEAKICAgICovCiAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICBsb2coIlxuQmVnaW5uaW5nIHN0YXRlZnVsU2Vzc2lvbi5DbGllbnQuLi5cbiIpOwotCXRyeXsKLQlDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwotCWNsaWVudC5ydW4oKTsKLQl9Y2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKXsKLQl9CisgICAgdHJ5eworICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CisgICAgY2xpZW50LnJ1bigpOworICAgIH1jYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpeworICAgIH0KIH0KIAotCXB1YmxpYyB2b2lkIHJ1bigpeworICAgIHB1YmxpYyB2b2lkIHJ1bigpewogCi0JdGVzdElkID0gInN0YXRlZnVsLXBlcnNpc3RlbmNlOjpTYW1wbGUgU3RhbmRhbG9uZS1lamItamFyIjsKLSAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGhpcyBpcyB0byB0ZXN0IHRoZSBwZXJzaXN0ZW5jZSBzYW1wbGUgZGVwbG9lZCBhcyBhbiBzdGFuZGFsb25lIGVqYi1qYXIuIik7IAorICAgIHRlc3RJZCA9ICJzdGF0ZWZ1bC1wZXJzaXN0ZW5jZTo6U2FtcGxlIFN0YW5kYWxvbmUtZWpiLWphciI7CisgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCB0aGUgcGVyc2lzdGVuY2Ugc2FtcGxlIGRlcGxvZWQgYXMgYW4gc3RhbmRhbG9uZSBlamItamFyLiIpOwogCiAgICAgdHJ5IHsKLQlob21lID0gbG9va3VwSG9tZSgpOworICAgIGhvbWUgPSBsb29rdXBIb21lKCk7CiAgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIG5lKSB7Ci0Jc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOworICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKICAgICB9CiAKICAgICB0cnkgewogICAgICAgZXhhbXBsZSgpOwotCXN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5QQVNTKTsKKyAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuUEFTUyk7CiAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgIGxvZygiVGhlcmUgd2FzIGFuIGV4Y2VwdGlvbiB3aGlsZSBjcmVhdGluZyBhbmQgdXNpbmcgdGhlIFRyYWRlci4iKTsKICAgICAgIGxvZygiVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGVyZSB3YXMgYSBwcm9ibGVtIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgc2VydmVyOiAiK2UpOwpAQCAtMTExLDcgKzExMSw3IEBACiAgIHB1YmxpYyB2b2lkIGV4YW1wbGUoKQogICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbixSZW1vdmVFeGNlcHRpb24sUHJvY2Vzc2luZ0Vycm9yRXhjZXB0aW9uCiAgIHsKLSAgICBTdHJpbmcgY3VzdG9tZXJOYW1lID0gIk1hdHQiOyAKKyAgICBTdHJpbmcgY3VzdG9tZXJOYW1lID0gIk1hdHQiOwogCiAgICAgLy8gQ3JlYXRlIGEgVHJhZGVyCiAgICAgbG9nKCJDcmVhdGluZyB0cmFkZXJcbiIpOwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAKIAogICAgIENvbnRleHQgY3R4ID0gbnVsbDsKLSAgIAorCiAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBDb250ZXh0IHdpdGggSk5ESSBzcGVjaWZpYyBwcm9wZXJ0aWVzCiAgICAgICAgICAgICAgICAgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJqYXIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJqYXIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKaW5kZXggY2JkMWNkMy4uNTljMzY5ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpiamFyL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2VqYmphci9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbApAQCAtMTksNyArMTksNyBAQAogLS0+CiAKIDxhcHBsaWNhdGlvbj4KLSAgPGRpc3BsYXktbmFtZT5Db252ZXJ0ZXJBcHA8L2Rpc3BsYXktbmFtZT4gIAorICA8ZGlzcGxheS1uYW1lPkNvbnZlcnRlckFwcDwvZGlzcGxheS1uYW1lPgogICA8bW9kdWxlPgogICAgIDxqYXZhPmVqYi1zdGF0ZWZ1bC1wZXJzaXN0ZW5jZS1jbGllbnQuamFyPC9qYXZhPgogICA8L21vZHVsZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2VqYmphci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpiamFyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggNmE3NjRmNS4uYzhmYWU2OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpiamFyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpiamFyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTMyLDEzICszMiwxMyBAQAogICAgICAgPHRyYW5zYWN0aW9uLXR5cGU+Q29udGFpbmVyPC90cmFuc2FjdGlvbi10eXBlPgogICAgICAgPGVudi1lbnRyeT4KICAgICAgICAgPGVudi1lbnRyeS1uYW1lPkJFQVM8L2Vudi1lbnRyeS1uYW1lPgotCTxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuRG91YmxlIDwvZW52LWVudHJ5LXR5cGU+Ci0JPGVudi1lbnRyeS12YWx1ZT4xMDAuMDwvZW52LWVudHJ5LXZhbHVlPgorICAgIDxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuRG91YmxlIDwvZW52LWVudHJ5LXR5cGU+CisgICAgPGVudi1lbnRyeS12YWx1ZT4xMDAuMDwvZW52LWVudHJ5LXZhbHVlPgogICAgICAgPC9lbnYtZW50cnk+CiAgICAgICA8ZW52LWVudHJ5PgogICAgICAgICA8ZW52LWVudHJ5LW5hbWU+TVNGVDwvZW52LWVudHJ5LW5hbWU+Ci0JPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5Eb3VibGUgPC9lbnYtZW50cnktdHlwZT4KLQk8ZW52LWVudHJ5LXZhbHVlPjE1MC4wPC9lbnYtZW50cnktdmFsdWU+CisgICAgPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5Eb3VibGUgPC9lbnYtZW50cnktdHlwZT4KKyAgICA8ZW52LWVudHJ5LXZhbHVlPjE1MC4wPC9lbnYtZW50cnktdmFsdWU+CiAgICAgICA8L2Vudi1lbnRyeT4KICAgICA8L3Nlc3Npb24+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KQEAgLTQ2LDkgKzQ2LDkgQEAKICAgICA8Y29udGFpbmVyLXRyYW5zYWN0aW9uPgogICAgICAgPG1ldGhvZD4KICAgICAgICAgPGVqYi1uYW1lPnN0YXRlZnVsU2Vzc2lvbjwvZWpiLW5hbWU+Ci0JPG1ldGhvZC1uYW1lPio8L21ldGhvZC1uYW1lPgorICAgIDxtZXRob2QtbmFtZT4qPC9tZXRob2QtbmFtZT4KICAgICAgIDwvbWV0aG9kPgogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgotICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+ICAKKyAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgogPC9lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpiamFyL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpiamFyL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDlmMmY2MTAuLmNiMjU3OTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2VqYmphci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJqYXIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTIzLDcgKzIzLDcgQEAKICAgICA8dW5pcXVlLWlkPjE8L3VuaXF1ZS1pZD4KICAgICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPnN0YXRlZnVsU2Vzc2lvbjwvZWpiLW5hbWU+Ci0gICAgICA8am5kaS1uYW1lPk15VHJhZGVyQmVhbjwvam5kaS1uYW1lPiAgICAgIAorICAgICAgPGpuZGktbmFtZT5NeVRyYWRlckJlYW48L2puZGktbmFtZT4KICAgICA8L2VqYj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgogPC9zdW4tZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2VqYmphci9lamIvVHJhZGVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpiamFyL2VqYi9UcmFkZXJCZWFuLmphdmEKaW5kZXggOWQ0NmRjMy4uOTgwYzI0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpiamFyL2VqYi9UcmFkZXJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpiamFyL2VqYi9UcmFkZXJCZWFuLmphdmEKQEAgLTgxLDcgKzgxLDcgQEAKICAgICogVGhpcyBtZXRob2QgY29ycmVzcG9uZHMgdG8gdGhlIGNyZWF0ZSBtZXRob2QgaW4gdGhlIGhvbWUgaW50ZXJmYWNlCiAgICAqICJUcmFkZXJIb21lLmphdmEiLgogICAgKiBUaGUgcGFyYW1ldGVyIHNldHMgb2YgdGhlIHR3byBtZXRob2RzIGFyZSBpZGVudGljYWwuIFdoZW4gdGhlIGNsaWVudCBjYWxscwotICAgKiA8Y29kZT5UcmFkZXJIb21lLmNyZWF0ZSgpPC9jb2RlPiwgdGhlIGNvbnRhaW5lciBhbGxvY2F0ZXMgYW4gaW5zdGFuY2Ugb2YgCisgICAqIDxjb2RlPlRyYWRlckhvbWUuY3JlYXRlKCk8L2NvZGU+LCB0aGUgY29udGFpbmVyIGFsbG9jYXRlcyBhbiBpbnN0YW5jZSBvZgogICAgKiB0aGUgRUpCZWFuIGFuZCBjYWxscyA8Y29kZT5lamJDcmVhdGUoKTwvY29kZT4uCiAgICAqCiAgICAqIEBleGNlcHRpb24gICAgICAgICAgICAgICBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24KQEAgLTE1OCwxMyArMTU4LDEzIEBACiAgICAqIEBleGNlcHRpb24gICAgICAgICAgICAgICBleGFtcGxlcy5lamIyMC5iYXNpYy5zdGF0ZWZ1bFNlc3Npb24uUHJvY2Vzc2luZ0Vycm9yRXhjZXB0aW9uCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciB3aGlsZSBjaGVja2luZyB0aGUgcHJpY2UKICAgICovCi0gIHB1YmxpYyBkb3VibGUgZ2V0U3RvY2tQcmljZShTdHJpbmcgc3RvY2tTeW1ib2wpIAotICAgIHRocm93cyBQcm9jZXNzaW5nRXJyb3JFeGNlcHRpb24gCisgIHB1YmxpYyBkb3VibGUgZ2V0U3RvY2tQcmljZShTdHJpbmcgc3RvY2tTeW1ib2wpCisgICAgdGhyb3dzIFByb2Nlc3NpbmdFcnJvckV4Y2VwdGlvbgogICB7CiAgICAgdHJ5IHsKICAgICAgIHJldHVybiAoKERvdWJsZSkgZW52aXJvbm1lbnQubG9va3VwKHN0b2NrU3ltYm9sKSkuZG91YmxlVmFsdWUoKTsKICAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gbmUpIHsKLSAgICAgIHRocm93IG5ldyBQcm9jZXNzaW5nRXJyb3JFeGNlcHRpb24gKCJTdG9jayBzeW1ib2wgIiArIHN0b2NrU3ltYm9sICsgCisgICAgICB0aHJvdyBuZXcgUHJvY2Vzc2luZ0Vycm9yRXhjZXB0aW9uICgiU3RvY2sgc3ltYm9sICIgKyBzdG9ja1N5bWJvbCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGRvZXMgbm90IGV4aXN0Iik7CiAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgewogICAgICAgdGhyb3cgbmV3IFByb2Nlc3NpbmdFcnJvckV4Y2VwdGlvbigiSW52YWxpZCBwcmljZSBmb3Igc3RvY2sgIitzdG9ja1N5bWJvbCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJqYXIvZWpiL1RyYWRlckhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2VqYmphci9lamIvVHJhZGVySG9tZS5qYXZhCmluZGV4IDQ5MWJjN2MuLmE3ZmFmYTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2VqYmphci9lamIvVHJhZGVySG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2VqYmphci9lamIvVHJhZGVySG9tZS5qYXZhCkBAIC0yMiw2ICsyMiw2IEBACiAKIHB1YmxpYyBpbnRlcmZhY2UgVHJhZGVySG9tZSBleHRlbmRzIEVKQkhvbWUgewogCi0gIAorCiAgIFRyYWRlclJlbW90ZSBjcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJqYXIvZWpiL1RyYWRlclJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpiamFyL2VqYi9UcmFkZXJSZW1vdGUuamF2YQppbmRleCBiMDdhMTE2Li4yOWQ5NjdjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJqYXIvZWpiL1RyYWRlclJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2VqYmphci9lamIvVHJhZGVyUmVtb3RlLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKICAgcHVibGljIFRyYWRlUmVzdWx0IHNlbGwoU3RyaW5nIGN1c3RvbWVyTmFtZSwgU3RyaW5nIHN0b2NrU3ltYm9sLCBpbnQgc2hhcmVzKQogICAgIHRocm93cyBQcm9jZXNzaW5nRXJyb3JFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAotICBwdWJsaWMgZG91YmxlIGdldEJhbGFuY2UoKSAKKyAgcHVibGljIGRvdWJsZSBnZXRCYWxhbmNlKCkKICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJ3cy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpid3MvYnVpbGQucHJvcGVydGllcwppbmRleCA0ODA1NTgyLi4xMjMwOTgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJ3cy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2VqYndzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIyICsxNSwyMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id3MiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWVqYnRheGNhbCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZWpidGF4Y2FsIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLmVqYi50YXhjYWwuY2xpZW50LlRheENhbENsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5lamIudGF4Y2FsLmNsaWVudC5UYXhDYWxDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPCEtLXByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLy0tPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamIvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9jbGllbnQvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9jbGllbnQvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvY2xpZW50L2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9jbGllbnQvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0id3NkbC1maWxlIiB2YWx1ZT0id3NkbC9UYXhDYWxFamJTZXJ2aWNlLndzZGwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2VqYndzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2VqYndzL2J1aWxkLnhtbAppbmRleCAwNzBiZjhjLi40ZjNhOTNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJ3cy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpid3MvYnVpbGQueG1sCkBAIC0zMSw3ICszMSw3IEBACiAgICAgJmNvbW1vbmxhenlpbml0OwogICAgICZ0ZXN0cHJvcGVydGllczsKIAotICAgIDx0YXJnZXQgbmFtZT0iYWxsIiAKKyAgICA8dGFyZ2V0IG5hbWU9ImFsbCIKICAgICBkZXBlbmRzPSJwcmUtc3RhcnQsIGJ1aWxkLCBzZXR1cCwgZGVwbG95LCBydW4sIHVuZGVwbG95LCB1bnNldHVwIi8+CiAgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdCIgZGVwZW5kcz0iY2xlYW4sIGJ1aWxkLCBkZXBsb3ksIHJ1biwgdW5kZXBsb3kiLz4KIApAQCAtNDEsNyArNDEsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIvPgogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIvPgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbixjbGVhbi1jb21tb24sIGdlbmVyYXRlLWFydGlmYWN0cyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTIsMTggKzUyLDE4IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImdlbmVyYXRlLWFydGlmYWN0cyI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJpbXBvcnQtd3NkbCI+Ci0JICAgIDxwYXJhbSBuYW1lPSJtYXBwaW5nLmZpbGUiCi0JCXZhbHVlPSIke2VqYi1tYXBwaW5nLnhtbH0iLz4KLQkgICAgPHBhcmFtIG5hbWU9ImNvbmZpZy13c2RsLmZpbGUiCi0JCXZhbHVlPSJjb25maWcvY29uZmlnLWVqYi54bWwiLz4KLQk8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJpbXBvcnQtd3NkbCI+Ci0JICAgIDxwYXJhbSBuYW1lPSJtYXBwaW5nLmZpbGUiCi0JCXZhbHVlPSIke2NsaWVudC1tYXBwaW5nLnhtbH0iLz4KLQkgICAgPHBhcmFtIG5hbWU9ImNvbmZpZy13c2RsLmZpbGUiCi0JCXZhbHVlPSJjb25maWcvY29uZmlnLWNsaWVudC54bWwiLz4KLQk8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJpbXBvcnQtd3NkbCI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJtYXBwaW5nLmZpbGUiCisgICAgICAgIHZhbHVlPSIke2VqYi1tYXBwaW5nLnhtbH0iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImNvbmZpZy13c2RsLmZpbGUiCisgICAgICAgIHZhbHVlPSJjb25maWcvY29uZmlnLWVqYi54bWwiLz4KKyAgICA8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJpbXBvcnQtd3NkbCI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJtYXBwaW5nLmZpbGUiCisgICAgICAgIHZhbHVlPSIke2NsaWVudC1tYXBwaW5nLnhtbH0iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImNvbmZpZy13c2RsLmZpbGUiCisgICAgICAgIHZhbHVlPSJjb25maWcvY29uZmlnLWNsaWVudC54bWwiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJ3cy1wYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KQEAgLTEyNCwxMyArMTI0LDEzIEBACiAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImluaXQtY29tbW9uLGNvbXBpbGUiPgotCTxhbnRjYWxsIHRhcmdldD0id3MtcGFja2FnZS1lamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgIDxhbnRjYWxsIHRhcmdldD0id3MtcGFja2FnZS1lamItamFyLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSJjb20vc3VuL3MxcGVxZS93ZWJzZXJ2aWNlcy9lamIvdGF4Y2FsLyouY2xhc3MiIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamIuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIvPgotCTwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9IndzLXBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+CisgICAgPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0id3MtcGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9ImNvbS9zdW4vczFwZXFlL3dlYnNlcnZpY2VzL2VqYi90YXhjYWwvY2xpZW50LyouY2xhc3MiIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIgpAQCAtMTQwLDE4ICsxNDAsMTggQEAKICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24sIHJlY29uZmlnLWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXIiLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9InN0YXRldGF4LWVqYi1lbmRwb2ludC11cmwiIAorICAgICAgICA8cHJvcGVydHkgbmFtZT0ic3RhdGV0YXgtZWpiLWVuZHBvaW50LXVybCIKICAgICAgICAgICAgIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS9zdGF0ZXRheGVqYiIvPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iZmVkdGF4LWVqYi1lbmRwb2ludC11cmwiIAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iZmVkdGF4LWVqYi1lbmRwb2ludC11cmwiCiAgICAgICAgICAgICB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vZmVkdGF4ZWpiIi8+CiAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0icHJvcGVydHkgc3RhdGV0YXgtZWpiLWVuZHBvaW50LXVybCBpcyBzZXQgdG86ICR7c3RhdGV0YXgtZWpiLWVuZHBvaW50LXVybH0iLz4KQEAgLTE2MiwxNyArMTYyLDE3IEBACiAgICAgICAgICAgICB2YWx1ZT0iJHtzdGF0ZXRheC1lamItZW5kcG9pbnQtdXJsfSAke2ZlZHRheC1lamItZW5kcG9pbnQtdXJsfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIAotICA8IS0tIAotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAorICA8IS0tCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgVXNlciBEZWZpbmVkIHNwZWNpZmljIHRhcmdldHMKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAtLT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2VqYndzL2NsaWVudC9UYXhDYWxDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2VqYndzL2NsaWVudC9UYXhDYWxDbGllbnQuamF2YQppbmRleCA1YzIwMWE5Li41Y2I1MDE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJ3cy9jbGllbnQvVGF4Q2FsQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpid3MvY2xpZW50L1RheENhbENsaWVudC5qYXZhCkBAIC0yNCw5MSArMjQsOTEgQEAKIAogcHVibGljIGNsYXNzIFRheENhbENsaWVudCB7CiAKLQlwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc3RhdGVUYXhFbmRwb2ludCA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZlZFRheEVuZHBvaW50ID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdFN1aXRlID0gIlRheENhbEVqYmJhc2VkV1MiOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0Q2FzZSA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgVGF4Q2FsRWpiU2VydmljZSB0YXhDYWxTZXJ2aWNlID0gbnVsbDsKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgc3RhdGVUYXhFbmRwb2ludCA9IG51bGw7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZlZFRheEVuZHBvaW50ID0gbnVsbDsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdFN1aXRlID0gIlRheENhbEVqYmJhc2VkV1MiOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0Q2FzZSA9IG51bGw7CisgICAgcHJpdmF0ZSBzdGF0aWMgVGF4Q2FsRWpiU2VydmljZSB0YXhDYWxTZXJ2aWNlID0gbnVsbDsKIAotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKIAotCQlpZihhcmdzWzBdID09IG51bGwgfHwgYXJnc1sxXSA9PSBudWxsKXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGF4Q2FsIGNsaWVudDogQXJndW1lbnQgbWlzc2luZy4gUGxlYXNlIHByb3ZpZGUgdGFyZ2V0IiArCi0JCQkJICJlbmRwb2ludCBhZGRyZXNzIGFzIGFyZ3VtZW50Iik7Ci0JCQlTeXN0ZW0uZXhpdCgxKTsKLQkJfSBlbHNlIHsKLQkJCXN0YXRlVGF4RW5kcG9pbnQgPSBhcmdzWzBdOwotCQkJZmVkVGF4RW5kcG9pbnQgPSBhcmdzWzFdOwotCQl9CisgICAgICAgIGlmKGFyZ3NbMF0gPT0gbnVsbCB8fCBhcmdzWzFdID09IG51bGwpeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUYXhDYWwgY2xpZW50OiBBcmd1bWVudCBtaXNzaW5nLiBQbGVhc2UgcHJvdmlkZSB0YXJnZXQiICsKKyAgICAgICAgICAgICAgICAgImVuZHBvaW50IGFkZHJlc3MgYXMgYXJndW1lbnQiKTsKKyAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhdGVUYXhFbmRwb2ludCA9IGFyZ3NbMF07CisgICAgICAgICAgICBmZWRUYXhFbmRwb2ludCA9IGFyZ3NbMV07CisgICAgICAgIH0KIAotCQlzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgZWpiIGJhc2VkIHdlYnNlcnZpY2UiKTsgCi0JCXRyeSB7IAotCQkJVGF4Q2FsQ2xpZW50IGNsaWVudCA9IG5ldyBUYXhDYWxDbGllbnQoKTsKLQkJCUNvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkJCXRheENhbFNlcnZpY2UgPSAoVGF4Q2FsRWpiU2VydmljZSkKLQkJCQlpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9UYXhDYWxFamJTZXJ2aWNlIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCBlamIgYmFzZWQgd2Vic2VydmljZSIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgVGF4Q2FsQ2xpZW50IGNsaWVudCA9IG5ldyBUYXhDYWxDbGllbnQoKTsKKyAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgICAgIHRheENhbFNlcnZpY2UgPSAoVGF4Q2FsRWpiU2VydmljZSkKKyAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9UYXhDYWxFamJTZXJ2aWNlIik7CiAKLQkJCWNsaWVudC5jYWxsU3RhdGVUYXhTZXJ2aWNlKCk7Ci0JCQljbGllbnQuY2FsbEZlZFRheFNlcnZpY2UoKTsKLQkJfWNhdGNoKEV4Y2VwdGlvbiBlKXsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KKyAgICAgICAgICAgIGNsaWVudC5jYWxsU3RhdGVUYXhTZXJ2aWNlKCk7CisgICAgICAgICAgICBjbGllbnQuY2FsbEZlZFRheFNlcnZpY2UoKTsKKyAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KIAotCQlzdGF0LnByaW50U3VtbWFyeSh0ZXN0U3VpdGUpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0U3VpdGUpOwogICAgIH0KLSAgICAKLQlwdWJsaWMgdm9pZCBjYWxsU3RhdGVUYXhTZXJ2aWNlKCkgewotCQlkb3VibGUgaW5jb21lID0gODUwMDAuMDA7Ci0JCWRvdWJsZSBkZWR1Y3Rpb25zID0gNTAwMC4wMDsKIAotCQkvL1N0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQotCQkvLwkiaHR0cDovL2xvY2FsaG9zdDoxMDI0L3RheGNhbGN1bGF0b3IiOworICAgIHB1YmxpYyB2b2lkIGNhbGxTdGF0ZVRheFNlcnZpY2UoKSB7CisgICAgICAgIGRvdWJsZSBpbmNvbWUgPSA4NTAwMC4wMDsKKyAgICAgICAgZG91YmxlIGRlZHVjdGlvbnMgPSA1MDAwLjAwOwogCi0JCXRyeSB7CisgICAgICAgIC8vU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9CisgICAgICAgIC8vICAgICJodHRwOi8vbG9jYWxob3N0OjEwMjQvdGF4Y2FsY3VsYXRvciI7CiAKLQkJCVN0YXRlVGF4SUYgdGF4Q2FsSUZQb3J0ID0gdGF4Q2FsU2VydmljZS5nZXRTdGF0ZVRheElGUG9ydCgpOworICAgICAgICB0cnkgewogCi0JCQkoKFN0dWIpdGF4Q2FsSUZQb3J0KS5fc2V0UHJvcGVydHkgKFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKLQkJCQlzdGF0ZVRheEVuZHBvaW50KTsKKyAgICAgICAgICAgIFN0YXRlVGF4SUYgdGF4Q2FsSUZQb3J0ID0gdGF4Q2FsU2VydmljZS5nZXRTdGF0ZVRheElGUG9ydCgpOwogCi0JCQlkb3VibGUgc3RhdGVUYXggPSB0YXhDYWxJRlBvcnQuZ2V0U3RhdGVUYXgoaW5jb21lLCBkZWR1Y3Rpb25zKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGUgdGF4IGZyb20gZWpiIGJhc2VkIFRheENhbFNlcnZpY2UgOiIgKyBzdGF0ZVRheCk7CisgICAgICAgICAgICAoKFN0dWIpdGF4Q2FsSUZQb3J0KS5fc2V0UHJvcGVydHkgKFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKKyAgICAgICAgICAgICAgICBzdGF0ZVRheEVuZHBvaW50KTsKIAotCQkJaWYoc3RhdGVUYXggPT0gMjQwMDAuMDApCi0JCQkJc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBTdGF0ZVRheFBvcnQiLCBzdGF0LlBBU1MpOwotCQkJZWxzZQotCQkJCXN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgU3RhdGVUYXhQb3J0Iiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIGRvdWJsZSBzdGF0ZVRheCA9IHRheENhbElGUG9ydC5nZXRTdGF0ZVRheChpbmNvbWUsIGRlZHVjdGlvbnMpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZSB0YXggZnJvbSBlamIgYmFzZWQgVGF4Q2FsU2VydmljZSA6IiArIHN0YXRlVGF4KTsKIAotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGF4Q2FsRWpiV2Vic2VydmljZSBjbGllbnQgZmFpbGVkIik7Ci0JCQlzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIFN0YXRlVGF4UG9ydCIsIHN0YXQuRkFJTCk7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfSAKLQl9CisgICAgICAgICAgICBpZihzdGF0ZVRheCA9PSAyNDAwMC4wMCkKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIFN0YXRlVGF4UG9ydCIsIHN0YXQuUEFTUyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBTdGF0ZVRheFBvcnQiLCBzdGF0LkZBSUwpOwogCi0JcHVibGljIHZvaWQgY2FsbEZlZFRheFNlcnZpY2UoKSB7Ci0JCWRvdWJsZSBpbmNvbWUgPSA5NzAwMC4wMDsKLQkJZG91YmxlIGRlZHVjdGlvbnMgPSA3MDAwLjAwOwotCQl0cnkgeworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGF4Q2FsRWpiV2Vic2VydmljZSBjbGllbnQgZmFpbGVkIik7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIFN0YXRlVGF4UG9ydCIsIHN0YXQuRkFJTCk7CisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KIAotCQkJRmVkVGF4SUYgdGF4Q2FsSUZQb3J0ID0gdGF4Q2FsU2VydmljZS5nZXRGZWRUYXhJRlBvcnQoKTsKLQkJCSgoU3R1Yil0YXhDYWxJRlBvcnQpLl9zZXRQcm9wZXJ0eSAoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAotCQkJCWZlZFRheEVuZHBvaW50KTsKKyAgICBwdWJsaWMgdm9pZCBjYWxsRmVkVGF4U2VydmljZSgpIHsKKyAgICAgICAgZG91YmxlIGluY29tZSA9IDk3MDAwLjAwOworICAgICAgICBkb3VibGUgZGVkdWN0aW9ucyA9IDcwMDAuMDA7CisgICAgICAgIHRyeSB7CiAKLQkJCWRvdWJsZSBmZWRUYXggPSB0YXhDYWxJRlBvcnQuZ2V0RmVkVGF4KGluY29tZSwgZGVkdWN0aW9ucyk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZlZCB0YXggZnJvbSBFamIgYmFzZWQgVGF4Q2FsU2VydmljZSA6IiArIGZlZFRheCk7CisgICAgICAgICAgICBGZWRUYXhJRiB0YXhDYWxJRlBvcnQgPSB0YXhDYWxTZXJ2aWNlLmdldEZlZFRheElGUG9ydCgpOworICAgICAgICAgICAgKChTdHViKXRheENhbElGUG9ydCkuX3NldFByb3BlcnR5IChTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCisgICAgICAgICAgICAgICAgZmVkVGF4RW5kcG9pbnQpOwogCi0JCQlpZihmZWRUYXggPT0gMTgwMDAuMDApCi0JCQkJc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBGZWRUYXhQb3J0Iiwgc3RhdC5QQVNTKTsKLQkJCWVsc2UKLQkJCQlzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIEZlZFRheFBvcnQiLCBzdGF0LkZBSUwpOwotICAgICAgICAgICAgICAgIAotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGF4Q2FsRWpiV2ViU2VydmljZSBjbGllbnQgZmFpbGVkIik7Ci0JCQlzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIEZlZFRheFBvcnQiLCBzdGF0LkZBSUwpOwotCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0gCi0JfQorICAgICAgICAgICAgZG91YmxlIGZlZFRheCA9IHRheENhbElGUG9ydC5nZXRGZWRUYXgoaW5jb21lLCBkZWR1Y3Rpb25zKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmVkIHRheCBmcm9tIEVqYiBiYXNlZCBUYXhDYWxTZXJ2aWNlIDoiICsgZmVkVGF4KTsKKworICAgICAgICAgICAgaWYoZmVkVGF4ID09IDE4MDAwLjAwKQorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgRmVkVGF4UG9ydCIsIHN0YXQuUEFTUyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBGZWRUYXhQb3J0Iiwgc3RhdC5GQUlMKTsKKworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGF4Q2FsRWpiV2ViU2VydmljZSBjbGllbnQgZmFpbGVkIik7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIEZlZFRheFBvcnQiLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2VqYndzL2NvbmZpZy9jb25maWctY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2VqYndzL2NvbmZpZy9jb25maWctY2xpZW50LnhtbAppbmRleCA5ZmNlYmQ4Li5kMGY3NTIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJ3cy9jb25maWcvY29uZmlnLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpid3MvY29uZmlnL2NvbmZpZy1jbGllbnQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249IndzZGwvVGF4Q2FsRWpiU2VydmljZS53c2RsIgogICAgICAgcGFja2FnZU5hbWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLmVqYi50YXhjYWwuY2xpZW50Ii8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJ3cy9jb25maWcvY29uZmlnLWVqYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJ3cy9jb25maWcvY29uZmlnLWVqYi54bWwKaW5kZXggNDQyMGViZC4uNzk0YmQ1MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpid3MvY29uZmlnL2NvbmZpZy1lamIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2VqYndzL2NvbmZpZy9jb25maWctZWpiLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJ3c2RsL1RheENhbEVqYlNlcnZpY2Uud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5lamIudGF4Y2FsIi8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJ3cy9jb25maWcvY29uZmlnLXNlaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJ3cy9jb25maWcvY29uZmlnLXNlaS54bWwKaW5kZXggYTg4OGZlNi4uNGUxNjYxMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpid3MvY29uZmlnL2NvbmZpZy1zZWkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2VqYndzL2NvbmZpZy9jb25maWctc2VpLnhtbApAQCAtMTgsMTYgKzE4LDE2IEBACiAtLT4KIAogPGNvbmZpZ3VyYXRpb24KLQl4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotCTxzZXJ2aWNlIG5hbWU9IlRheENhbEVqYlNlcnZpY2UiCi0JCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RheC5vcmcvd3NkbCIKLQkJdHlwZU5hbWVzcGFjZT0iaHR0cDovL3RheC5vcmcvdHlwZXMiCi0JCXBhY2thZ2VOYW1lPSJjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5lamIudGF4Y2FsIj4KLQkJPGludGVyZmFjZSBuYW1lPSJjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5lamIudGF4Y2FsLkZlZFRheElGIgotCQkJc2VydmFudE5hbWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLmVqYi50YXhjYWwuRmVkVGF4RWpiIi8+Ci0JCTxpbnRlcmZhY2UgbmFtZT0iY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuZWpiLnRheGNhbC5TdGF0ZVRheElGIgotCQkJc2VydmFudE5hbWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLmVqYi50YXhjYWwuU3RhdGVUYXhFamIiPgotCQk8L2ludGVyZmFjZT4KLQk8L3NlcnZpY2U+CisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KKyAgICA8c2VydmljZSBuYW1lPSJUYXhDYWxFamJTZXJ2aWNlIgorICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90YXgub3JnL3dzZGwiCisgICAgICAgIHR5cGVOYW1lc3BhY2U9Imh0dHA6Ly90YXgub3JnL3R5cGVzIgorICAgICAgICBwYWNrYWdlTmFtZT0iY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuZWpiLnRheGNhbCI+CisgICAgICAgIDxpbnRlcmZhY2UgbmFtZT0iY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuZWpiLnRheGNhbC5GZWRUYXhJRiIKKyAgICAgICAgICAgIHNlcnZhbnROYW1lPSJjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5lamIudGF4Y2FsLkZlZFRheEVqYiIvPgorICAgICAgICA8aW50ZXJmYWNlIG5hbWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLmVqYi50YXhjYWwuU3RhdGVUYXhJRiIKKyAgICAgICAgICAgIHNlcnZhbnROYW1lPSJjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5lamIudGF4Y2FsLlN0YXRlVGF4RWpiIj4KKyAgICAgICAgPC9pbnRlcmZhY2U+CisgICAgPC9zZXJ2aWNlPgogPC9jb25maWd1cmF0aW9uPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJ3cy9lamIvRmVkVGF4RWpiLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJ3cy9lamIvRmVkVGF4RWpiLmphdmEKaW5kZXggZjQ1Y2I0NS4uZWRjZjI1YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpid3MvZWpiL0ZlZFRheEVqYi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2VqYndzL2VqYi9GZWRUYXhFamIuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5lamIudGF4Y2FsOwogCiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMjYsMTEgKzI2LDExIEBACiBwdWJsaWMgY2xhc3MgRmVkVGF4RWpiIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewogCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYzsKLSAgICAKKwogICAgIHB1YmxpYyBGZWRUYXhFamIoKXt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZlZFRheEVqYjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGZWRUYXhFamI6OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyBkb3VibGUgZ2V0RmVkVGF4KGRvdWJsZSBpbmNvbWUsIGRvdWJsZSBkZWR1Y3Rpb25zKSB7CkBAIC0zOCwxMyArMzgsMTMgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQorCiAgICAgICAgIHRoaXMuc2MgPSBzYzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpid3MvZWpiL0ZlZFRheElGLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJ3cy9lamIvRmVkVGF4SUYuamF2YQppbmRleCBjMzdiMGNjLi40ZGVjYzQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJ3cy9lamIvRmVkVGF4SUYuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJ3cy9lamIvRmVkVGF4SUYuamF2YQpAQCAtMjIsNiArMjIsNiBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEZlZFRheElGIGV4dGVuZHMgUmVtb3RlewogCi0JcHVibGljIGRvdWJsZSBnZXRGZWRUYXgoZG91YmxlIGluY29tZSwgZG91YmxlIGRlZHVjdGlvbnMpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgcHVibGljIGRvdWJsZSBnZXRGZWRUYXgoZG91YmxlIGluY29tZSwgZG91YmxlIGRlZHVjdGlvbnMpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2VqYndzL2VqYi9TdGF0ZVRheEVqYi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpid3MvZWpiL1N0YXRlVGF4RWpiLmphdmEKaW5kZXggNzhjZWE0NS4uMzM1N2VjYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpid3MvZWpiL1N0YXRlVGF4RWpiLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpid3MvZWpiL1N0YXRlVGF4RWpiLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuZWpiLnRheGNhbDsKIAogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTI2LDExICsyNiwxMSBAQAogcHVibGljIGNsYXNzIFN0YXRlVGF4RWpiIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewogCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYzsKLSAgICAKKwogICAgIHB1YmxpYyBTdGF0ZVRheEVqYigpe30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVUYXhFamI6OmVqYkNyZWF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVUYXhFamI6OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyBkb3VibGUgZ2V0U3RhdGVUYXgoZG91YmxlIGluY29tZSwgZG91YmxlIGRlZHVjdGlvbnMpIHsKQEAgLTM4LDEzICszOCwxMyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JCisKICAgICAgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJ3cy9lamIvU3RhdGVUYXhJRi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvZWpid3MvZWpiL1N0YXRlVGF4SUYuamF2YQppbmRleCAyYzk0NWYyLi4yNmY5NDYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9lamJ3cy9lamIvU3RhdGVUYXhJRi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2VqYndzL2VqYi9TdGF0ZVRheElGLmphdmEKQEAgLTIyLDYgKzIyLDYgQEAKIAogcHVibGljIGludGVyZmFjZSBTdGF0ZVRheElGIGV4dGVuZHMgUmVtb3RlewogCi0JcHVibGljIGRvdWJsZSBnZXRTdGF0ZVRheChkb3VibGUgaW5jb21lLCBkb3VibGUgZGVkdWN0aW9ucykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICBwdWJsaWMgZG91YmxlIGdldFN0YXRlVGF4KGRvdWJsZSBpbmNvbWUsIGRvdWJsZSBkZWR1Y3Rpb25zKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXMtdHhsb29rdXAvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptcy10eGxvb2t1cC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI4MGJlNGMuLjcwNjU1YzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptcy10eGxvb2t1cC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptcy10eGxvb2t1cC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMyArMTUsMjMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Imptcy1tc2dkZXN0LWptc3dlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptcy10eGxvb2t1cC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXMtdHhsb29rdXAvYnVpbGQueG1sCmluZGV4IDdjNDE0Y2IuLjEzZGMzMTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptcy10eGxvb2t1cC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zLXR4bG9va3VwL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgpAQCAtNDgsMjggKzQ4LDI4IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXdhciI+Ci0JIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS9hL2IiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0icGFja2FnZS13YXItY29tbW9uIj4KLSAgICAJCTxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgCQk8cGFyYW0gbmFtZT0id2FyLmZpbGUiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vYS9iLyR7YXBwbmFtZX0td2ViLndhciIvPgotICAJPC9hbnRjYWxsPgorICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0vYS9iIi8+CisgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2Utd2FyLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9L2EvYi8ke2FwcG5hbWV9LXdlYi53YXIiLz4KKyAgICAgIDwvYW50Y2FsbD4KICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSwgYnVpbGQtd2FyIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qU2VydmxldCouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgdXBkYXRlPSJ0cnVlIj4KLSAgICAJCTxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KLSAgICAgIAkJCTxpbmNsdWRlIG5hbWU9ImEvYi8qLndhciIvPgotICAgIAkJPC9maWxlc2V0PgotCTwvZWFyPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIHVwZGF0ZT0idHJ1ZSI+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CisgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJhL2IvKi53YXIiLz4KKyAgICAgICAgICAgIDwvZmlsZXNldD4KKyAgICA8L2Vhcj4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTc5LDcgKzc5LDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC05MiwxNCArOTIsMTQgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIke2h0dHAuaG9zdH0gJHtodHRwLnBvcnR9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptcy10eGxvb2t1cC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXMtdHhsb29rdXAvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGM1MmQ2ODkuLjU3MjRmMzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptcy10eGxvb2t1cC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zLXR4bG9va3VwL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIGhvc3Q7CiAgICAgcHJpdmF0ZSBTdHJpbmcgcG9ydDsKIApAQCAtMzUsMjMgKzM1LDIzIEBACiAgICAgICAgIGhvc3QgPSAoIGFyZ3MubGVuZ3RoID4gMCkgPyBhcmdzWzBdIDogImxvY2FsaG9zdCI7CiAgICAgICAgIHBvcnQgPSAoIGFyZ3MubGVuZ3RoID4gMSkgPyBhcmdzWzFdIDogIjQ4NDgiOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiam1zLW1zZ2Rlc3Qtam1zd2ViIik7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJqbXMtbXNnZGVzdC1qbXN3ZWJJRCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGVudiA9IG51bGw7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyAKKyAgICAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICAgICAgIi9qbXMtbXNnZGVzdC1qbXN3ZWIvam1zc2VydmxldCI7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIGptc3dlYiBzZXJ2bGV0IGF0ICIgKyB1cmwpOwogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYoY29kZSAhPSAyMDApIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluY29ycmVjdCByZXR1cm4gY29kZTogIiArIGNvZGUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJqbXN3ZWIgbWFpbiIsIHN0YXQuRkFJTCk7CkBAIC02MywxNSArNjMsMTUgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJqbXN3ZWIgbWFpbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnQgaW52b2tlU2VydmxldChTdHJpbmcgdXJsKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIAorCiAgICAgICAgIFVSTCB1ID0gbmV3IFVSTCh1cmwpOwotICAgICAgICAKKwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjMSA9IChIdHRwVVJMQ29ubmVjdGlvbil1Lm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7CiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKQEAgLTg0LDYgKzg0LDYgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9Ci0gICAgCisKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zLXR4bG9va3VwL3NlcnZsZXQvSm1zU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zLXR4bG9va3VwL3NlcnZsZXQvSm1zU2VydmxldC5qYXZhCmluZGV4IDQ0ZWQwZTkuLjg5NmFkNGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptcy10eGxvb2t1cC9zZXJ2bGV0L0ptc1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXMtdHhsb29rdXAvc2VydmxldC9KbXNTZXJ2bGV0LmphdmEKQEAgLTMzLDIxICszMywyMSBAQAogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY0ZhY3Rvcnk7CiAKICAgICBwdWJsaWMgdm9pZCAgaW5pdCggU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGptc3NlcnZsZXQuLi4gaW5pdCgpIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VydmljZSAoIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEgLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3AgKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAgICAgICAgICAgICAgICAKKwogICAgICAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgY29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCi0gICAgICAgICAgICBVc2VyVHJhbnNhY3Rpb24gdXNlclR4ID0gKFVzZXJUcmFuc2FjdGlvbikgCisgICAgICAgICAgICBVc2VyVHJhbnNhY3Rpb24gdXNlclR4ID0gKFVzZXJUcmFuc2FjdGlvbikKICAgICAgICAgICAgICAgICBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL1VzZXJUcmFuc2FjdGlvbiIpOwogICAgICAgICAgICAgdXNlclR4LmJlZ2luKCk7CiAgICAgICAgICAgICBYQVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgeGFjZiA9IG5ldyBjb20uc3VuLm1lc3NhZ2luZy5YQVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkoKTsKQEAgLTgwLDIwICs4MCwyMCBAQAogCiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPEhUTUw+IDxIRUFEPiA8VElUTEU+IEpNUyBTZXJ2bGV0IE91dHB1dCA8L1RJVExFPiA8L0hFQUQ+IDxCT0RZIEJHQ09MT1I9d2hpdGU+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPENFTlRFUj4gPEZPTlQgc2l6ZT0rMSBDT0xPUj1ibHVlPkRhdGFiYXNlU2VydmVsdCA6OiBBbGwgaW5mb3JtYXRpb24gSSBjYW4gZ2l2ZSA8L0ZPTlQ+IDwvQ0VOVEVSPiA8cD4gIiApOwotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBDb250ZXh0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldENvbnRleHRQYXRoKCkgKyAiPGJyPiIgKTsgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFNlcnZsZXQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0U2VydmxldFBhdGgoKSArICI8YnI+IiApOyAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gUGF0aCBJbmZvIDogIDwvRk9OVD4gIiArIHJlcS5nZXRQYXRoSW5mbygpICsgIjxicj4iICk7IAorICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBDb250ZXh0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldENvbnRleHRQYXRoKCkgKyAiPGJyPiIgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gU2VydmxldCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRTZXJ2bGV0UGF0aCgpICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBhdGggSW5mbyA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0UGF0aEluZm8oKSArICI8YnI+IiApOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvQk9EWT4gPC9IVE1MPiAiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH1jYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiam1zc2VydmxldCB0ZXN0IGZhaWxlZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZXgpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogU2VuZCBhIG1lc3NhZ2UuIAorICAgICAqIFNlbmQgYSBtZXNzYWdlLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgc2VuZE1lc3NhZ2UoU3RyaW5nIG1zZykgdGhyb3dzIEpNU0V4Y2VwdGlvbiB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gbnVsbDsKQEAgLTE0Myw5ICsxNDMsOSBAQAogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkge30KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkICBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIGptc3NlcnZsZXQgZGVzdHJveSIpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zMS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXMxL2J1aWxkLnhtbAppbmRleCBjZGI4Y2ExLi5hZWZmYmUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXMxL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXMxL2J1aWxkLnhtbApAQCAtODIsMTYgKzgyLDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4gVXNhZ2U6Ci0JCWFudCBzaW1wbGUgKEV4ZWN1dGVzIHRoZSBzaW1wbGUgdGVzdHMpCi0JCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiICBqbXMxIHRlc3RzKQotCQlhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIGVqYiAgam1zMSB0ZXN0cykKLQkJYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBlamIgIGptczEgdGVzdHMpCi0JCWFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBqbXMxIHRlc3RzKQotCQlhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgZWpiICBqbXMxIGFwcHMpCi0JCWFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgZWpiICBqbXMxIHRlc3RzKQotCQlhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBqbXMxIGFwcHMpCi0JCWFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3Igam1zMSB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+IFVzYWdlOgorICAgICAgICBhbnQgc2ltcGxlIChFeGVjdXRlcyB0aGUgc2ltcGxlIHRlc3RzKQorICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYiAgam1zMSB0ZXN0cykKKyAgICAgICAgYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBlamIgIGptczEgdGVzdHMpCisgICAgICAgIGFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgZWpiICBqbXMxIHRlc3RzKQorICAgICAgICBhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3Igam1zMSB0ZXN0cykKKyAgICAgICAgYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIGVqYiAgam1zMSBhcHBzKQorICAgICAgICBhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGVqYiAgam1zMSB0ZXN0cykKKyAgICAgICAgYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgam1zMSBhcHBzKQorICAgICAgICBhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIGptczEgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zMS9zaW1wbGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptczEvc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNGIwYjg5Ny4uZDY2ZWIyYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zMS9zaW1wbGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXMxL3NpbXBsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1tZGIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNpbXBsZSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2ltcGxlIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9ImNvbS5zdW4uczFwZXFlLmVqYi5tZGIuc2ltcGxlLmNsaWVudC5TaW1wbGVNZXNzYWdlQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9ImNvbS5zdW4uczFwZXFlLmVqYi5tZGIuc2ltcGxlLmNsaWVudC5TaW1wbGVNZXNzYWdlQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptczEvc2ltcGxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptczEvc2ltcGxlL2J1aWxkLnhtbAppbmRleCA1MWU3NDdhLi5mOTU0NmNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXMxL3NpbXBsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zMS9zaW1wbGUvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OSwxMyArNDksMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktam1zLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXN0Lm5hbWUiIHZhbHVlPSJTYW1wbGVRdWV1ZSIvPgpAQCAtNzgsMTUgKzc4LDE1IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktam1zLWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXMxL3NpbXBsZS9jbGllbnQvU2ltcGxlTWVzc2FnZUNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zMS9zaW1wbGUvY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YQppbmRleCA3NDgyNDM2Li40MDMwN2IwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXMxL3NpbXBsZS9jbGllbnQvU2ltcGxlTWVzc2FnZUNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptczEvc2ltcGxlL2NsaWVudC9TaW1wbGVNZXNzYWdlQ2xpZW50LmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogcHVibGljIGNsYXNzIFNpbXBsZU1lc3NhZ2VDbGllbnQgewotICAgIAorCiAgICAgICAgIENvbnRleHQgICAgICAgICAgICAgICAgIGpuZGlDb250ZXh0ID0gbnVsbDsKICAgICAgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSAgcXVldWVDb25uZWN0aW9uRmFjdG9yeSA9IG51bGw7CiAgICAgICAgIFRvcGljQ29ubmVjdGlvbkZhY3RvcnkgIHRvcGljQ29ubmVjdGlvbkZhY3RvcnkgPSBudWxsOwpAQCAtNDAsNDggKzQwLDQ4IEBACiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nICBUT1BJQyA9ICJqbXMvU2FtcGxlVG9waWMiOwogICAgICAgICBmaW5hbCBpbnQgICAgICAgICAgICAgICBOVU1fTVNHUyA9IDM7CiAgICAgICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gIGFsbERvbmU9ZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorCisgICAgICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgICAgICAKKwogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGhpcyBpcyB0byB0ZXN0IHNpbXBsZSAiKwogICAgICAgICAgICAgIm1lc3NhZ2UgZHJpdmVuIGJlYW4gc2FtcGxlLiIpOwogICAgICAgICAgICAgU2ltcGxlTWVzc2FnZUNsaWVudCBjbGllbnQ9bmV3IFNpbXBsZU1lc3NhZ2VDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5zZXR1cCgpOwogICAgICAgICAgICAgY2xpZW50LnNlbmRNZXNzYWdlVG9NREIoKTsKICAgICAgICAgICAgIGNsaWVudC5yZWN2TWVzc2FnZSgpOwotICAgICAgICAgICAgY2xpZW50LnByaW50UmVwb3J0KCk7ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2xpZW50LnByaW50UmVwb3J0KCk7CisKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHVibGljIE9iamVjdCBqbmRpTG9va3VwKFN0cmluZyBuYW1lKSAKKworICAgICAgICBwdWJsaWMgT2JqZWN0IGpuZGlMb29rdXAoU3RyaW5nIG5hbWUpCiAgICAgICAgIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgICAgb2JqID0gbnVsbDsKICAgICAgICAgaWYgKGpuZGlDb250ZXh0ID09IG51bGwpIHsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgam5kaUNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqbmRpQ29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNvdWxkIG5vdCBjcmVhdGUgSk5ESSBBUEkgIiArCi0gICAgICAgICAgICAgICAgICAgICJjb250ZXh0OiAiICsgZS50b1N0cmluZygpKTsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICJjb250ZXh0OiAiICsgZS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgICB0aHJvdyBlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIG9iaiA9IGpuZGlDb250ZXh0Lmxvb2t1cChuYW1lKTsKLSAgICAgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsgICAgICAgICAgICAKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiSk5ESSBBUEkgbG9va3VwIGZhaWxlZDogIiArIAorICAgICAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJKTkRJIEFQSSBsb29rdXAgZmFpbGVkOiAiICsKICAgICAgICAgICAgICAgICBlLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgdGhyb3cgZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gb2JqOwogICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcHVibGljIHZvaWQgc2V0dXAoKXsKICAgICAgICAgICAgIHRyeXsKLSAgICAgICAgICAgIHF1ZXVlQ29ubmVjdGlvbkZhY3Rvcnk9KFF1ZXVlQ29ubmVjdGlvbkZhY3Rvcnkpam5kaUxvb2t1cChRVUVVRUNPTkZBQyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIHF1ZXVlID0gKFF1ZXVlKWpuZGlMb29rdXAoUVVFVUUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHF1ZXVlQ29ubmVjdGlvbkZhY3Rvcnk9KFF1ZXVlQ29ubmVjdGlvbkZhY3Rvcnkpam5kaUxvb2t1cChRVUVVRUNPTkZBQyk7CisgICAgICAgICAgICBxdWV1ZSA9IChRdWV1ZSlqbmRpTG9va3VwKFFVRVVFKTsKICAgICAgICAgICAgIHRvcGljQ29ubmVjdGlvbkZhY3Rvcnk9KFRvcGljQ29ubmVjdGlvbkZhY3Rvcnkpam5kaUxvb2t1cChUT1BJQ0NPTkZBQyk7CiAgICAgICAgICAgICB0b3BpYz0oVG9waWMpam5kaUxvb2t1cChUT1BJQyk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic2ltcGxlIG1kYiBqbmRpTG9va3VwIiwgc3RhdC5QQVNTKTsKQEAgLTkxLDIxICs5MSwyMSBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHJvYmxlbSBpbiBsb29raW5nIHVwIGNvbm5lY3Rpb24gZmFjdG9yaWVzIik7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAKIAotICAgICAgICAKKyAgICAgICAgfQorCisKKworCiAgICAgICAgIHB1YmxpYyBTaW1wbGVNZXNzYWdlQ2xpZW50KCl7fQotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZVRvTURCKCl7CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgcXVldWVDb25uZWN0aW9uRmFjdG9yeT0oUXVldWVDb25uZWN0aW9uRmFjdG9yeSlqbmRpTG9va3VwKFFVRVVFQ09ORkFDKTsgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgCi0gICAgICAgICAgICBxdWV1ZSA9IChRdWV1ZSlqbmRpTG9va3VwKFFVRVVFKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgCisgICAgICAgICAgICBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5PShRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KWpuZGlMb29rdXAoUVVFVUVDT05GQUMpOworCisgICAgICAgICAgICBxdWV1ZSA9IChRdWV1ZSlqbmRpTG9va3VwKFFVRVVFKTsKKwogCiAgICAgICAgICAgICBxdWV1ZUNvbm5lY3Rpb24gPQogICAgICAgICAgICAgICAgIHF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7CkBAIC0xMTcsNDIgKzExNyw0MiBAQAogICAgICAgICAgICAgbWVzc2FnZS5zZXRKTVNEZWxpdmVyeU1vZGUoRGVsaXZlcnlNb2RlLlBFUlNJU1RFTlQpOwogICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgZHVyYWJsZSBxdWV1ZSBzdWJzY3JpYmVyLHBlcnNpc3RlbnQgZGVsaXZlcnkgbW9kZSIpOwogCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9NU0dTOyBpKyspIHsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9NU0dTOyBpKyspIHsKICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldFRleHQoTVNHX1RFWFQgKyAoaSArIDEpKTsKICAgICAgICAgICAgICAgICBpZihpPT0oTlVNX01TR1MtMSkpCiAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V0U3RyaW5nUHJvcGVydHkoIk1FU1NBR0VfTlVNIiwiTEFTVCIpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlOiAiICsgbWVzc2FnZS5nZXRUZXh0KCkpOwotICAgICAgICAgICAgICAgIHF1ZXVlU2VuZGVyLnNlbmQobWVzc2FnZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcXVldWVTZW5kZXIuc2VuZChtZXNzYWdlKTsKICAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoMTAwMCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgMyBtZXNzYWdlcyxub3cgc2xlZXBpbmciKTsgICAgICAgICAgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgMyBtZXNzYWdlcyxub3cgc2xlZXBpbmciKTsKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIG9jY3VycmVkOiAiICsgZS50b1N0cmluZygpKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJzaW1wbGUgbWRiIG1haW4iLCBzdGF0LkZBSUwpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBmaW5hbGx5IGJsb2NrIG9mIHNlbmQgbWVzc2FnZSIpOwotCSAgICBpZiAocXVldWVDb25uZWN0aW9uICE9bnVsbCl7Ci0JICAgIHRyeXsKLQkgICAgcXVldWVDb25uZWN0aW9uLmNsb3NlKCk7Ci0JICAgIH1jYXRjaChKTVNFeGNlcHRpb24gZXgpewotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgfQotCSAgICB9Ci0gICAgICAgICAgIAotICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInNpbXBsZSBtZGIgc2VuZG1lc3NhZ2UiLCBzdGF0LlBBU1MpOyAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBpZiAocXVldWVDb25uZWN0aW9uICE9bnVsbCl7CisgICAgICAgIHRyeXsKKyAgICAgICAgcXVldWVDb25uZWN0aW9uLmNsb3NlKCk7CisgICAgICAgIH1jYXRjaChKTVNFeGNlcHRpb24gZXgpeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJzaW1wbGUgbWRiIHNlbmRtZXNzYWdlIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSAvLyBmaW5hbGx5Ci0gICAgfSAgICAgICAgICAKLSAgICAgICAgCisgICAgfQorCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludFJlcG9ydCgpewogICAgICAgICAgICAgaWYoYWxsRG9uZSkKLSAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJzaW1wbGVNZGJJRCIpOyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInNpbXBsZU1kYklEIik7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1lc3NhZ2VTdHJlYW0gZnJvbSBzZXJ2ZXIgbm90IGZpbmlzaGVkIik7Ci0gICAgICAgIH0gICAgCi0gICAgICAgIAotICAgIAotICAgIAotICAgIAorICAgICAgICB9CisKKworCisKICAgICBwdWJsaWMgdm9pZCByZWN2TWVzc2FnZSgpewogICAgICAgICBUb3BpY0Nvbm5lY3Rpb24gY29ubmVjdD1udWxsOwogICAgICAgICAvKgpAQCAtMTY2LDE1ICsxNjYsMTUgQEAKICAgICAgICAgICogQ2xvc2UgY29ubmVjdGlvbi4KICAgICAgICAgICovCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImluc2lkZSByZWN2TWVzc2FnZSBvZiBtZGIgYXBwY2xpZW50Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnNpZGUgcmVjdk1lc3NhZ2Ugb2YgbWRiIGFwcGNsaWVudCIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgY29ubmVjdCA9IHRvcGljQ29ubmVjdGlvbkZhY3RvcnkuY3JlYXRlVG9waWNDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBUb3BpY1Nlc3Npb24gc2Vzc2lvbiA9IGNvbm5lY3QuY3JlYXRlVG9waWNTZXNzaW9uKGZhbHNlLDApOwotICAgICAgICAgICAgc3Vic2NyaWJlcj1zZXNzaW9uLmNyZWF0ZVN1YnNjcmliZXIodG9waWMpOyAgCisgICAgICAgICAgICBzdWJzY3JpYmVyPXNlc3Npb24uY3JlYXRlU3Vic2NyaWJlcih0b3BpYyk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXJ0ZWQgc3Vic2NyaWJlciIpOwogICAgICAgICAgICAgY29ubmVjdC5zdGFydCgpOwogICAgICAgICAgICAgaW50IG1zZ2NvdW50PTE7Ci0gICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgTWVzc2FnZSBtID0gc3Vic2NyaWJlci5yZWNlaXZlKDEwMDAwKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJpbmdvIS4gZ290IGEgYWNrIG1zZyBiYWNrIGZyb20gc2VydmVyIik7CiAgICAgICAgICAgICAgICAgbXNnY291bnQrKzsKQEAgLTE4Nyw3ICsxODcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHByb3BzPW1lc3NhZ2UuZ2V0U3RyaW5nUHJvcGVydHkoIk1FU1NBR0VfTlVNIik7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYobXNnY291bnQ+PTMpewpAQCAtMjAwLDcgKzIwMCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1lc3NhZ2VzIGZyb20gTURCIGZpbmlzaGVkKioiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqIik7CiAgICAgICAgIH0gY2F0Y2ggKEpNU0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBvY2N1cnJlZDogIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gb2NjdXJyZWQ6ICIgKwogICAgICAgICAgICAgICAgIGUudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic2ltcGxlIG1kYiByZWN2bWVzc2FnZSIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0gY2F0Y2goVGhyb3dhYmxlIGUpewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zMS9zaW1wbGUvZWpiL1NpbXBsZU1lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXMxL3NpbXBsZS9lamIvU2ltcGxlTWVzc2FnZUJlYW4uamF2YQppbmRleCA0OTkyNGE0Li4wYzgwMzNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXMxL3NpbXBsZS9lamIvU2ltcGxlTWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXMxL3NpbXBsZS9lamIvU2ltcGxlTWVzc2FnZUJlYW4uamF2YQpAQCAtMzQsMjMgKzM0LDIzIEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgIFRPUElDQ09ORkFDID0gImptcy9UQ0ZhY3RvcnkiOwogICAgIHB1YmxpYyBTaW1wbGVNZXNzYWdlQmVhbigpIHsKICAgICAgICAgYmVhbmNvdW50Kys7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTUVTU0FHRSBCRUFOOlsiK2JlYW5jb3VudCsiXS5TaW1wbGVNZXNzYWdlQmVhbigpIik7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNRVNTQUdFIEJFQU46WyIrYmVhbmNvdW50KyJdLlNpbXBsZU1lc3NhZ2VCZWFuKCkiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dChNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiAiCiAgICAgICAgICAgICArICJNRVNTQUdFIEJFQU46WyIrYmVhbmNvdW50KyJdLnNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KCkiKTsKLQl0aGlzLm1kYyA9IG1kYzsKKyAgICB0aGlzLm1kYyA9IG1kYzsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBqbmRpQ29udGV4dD1uZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICAgfWNhdGNoKFRocm93YWJsZSBlKSB7Ci0gICAgICAgICAgCisKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZS50b1N0cmluZygpKTsKICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiTUVTU0FHRSBCRUFOOiBTaW1wbGVNZXNzYWdlQmVhbi5lamJDcmVhdGUoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTUVTU0FHRSBCRUFOOiBTaW1wbGVNZXNzYWdlQmVhbi5lamJDcmVhdGUoKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIGluTWVzc2FnZSkgewpAQCAtNzIsMzIgKzcyLDMyIEBACiAgICAgICAgICAgICB0ZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgIH0gIC8vIG9uTWVzc2FnZQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTUVTU0FHRSBCRUFOOiBzZW5kTWVzc2FnZSBiYWNrIHRvIGFwcGNsaWVudCIpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTUVTU0FHRSBCRUFOOiBzZW5kTWVzc2FnZSBiYWNrIHRvIGFwcGNsaWVudCIpOwogICAgICAgICB0cnl7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgVG9waWNDb25uZWN0aW9uRmFjdG9yeSB0b3BpY2ZhY3Rvcnk9KFRvcGljQ29ubmVjdGlvbkZhY3Rvcnkpam5kaUNvbnRleHQubG9va3VwKFRPUElDQ09ORkFDKTsKLSAgICAgICAgICAgIFRvcGljIHRvcGljPShUb3BpYylqbmRpQ29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL1NhbXBsZVRvcGljIik7ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBUb3BpY0Nvbm5lY3Rpb24gCi0gICAgICAgICAgICAKKyAgICAgICAgICAgIFRvcGljIHRvcGljPShUb3BpYylqbmRpQ29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL1NhbXBsZVRvcGljIik7CisKKyAgICAgICAgICAgIFRvcGljQ29ubmVjdGlvbgorCiAgICAgICAgICAgICBjb25uZWN0ID0gdG9waWNmYWN0b3J5LmNyZWF0ZVRvcGljQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFRvcGljU2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdC5jcmVhdGVUb3BpY1Nlc3Npb24oZmFsc2UsMCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgVG9waWNQdWJsaXNoZXIgcHVibGlzaGVyPXNlc3Npb24uY3JlYXRlUHVibGlzaGVyKHRvcGljKTsKICAgICAgICAgICAgIFRocmVhZC5zbGVlcCgzMDAwKTsKLSAgICAgICAgICAgIHB1Ymxpc2hlci5wdWJsaXNoKG1lc3NhZ2UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBwdWJsaXNoZXIucHVibGlzaChtZXNzYWdlKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPDxTZW50IE1lc3NhZ2UgYmFjayB0byBhcHBjbGllbnQgPj4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH1jYXRjaChUaHJvd2FibGUgZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIhISEhTUVTU0FHRSBCRUFOOiBzZW5kTWVzc2FnZSBFeGNlcHRpb24iKTsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICB9ICAKLSAgICAgIAotICAgIAorICAgIH0KKworCiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlTWVzc2FnZUJlYW4ucmVtb3ZlKCkiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptczIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zMi9idWlsZC54bWwKaW5kZXggNzVjMmQyNC4uNGM0MGM5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zMi9idWlsZC54bWwKQEAgLTgyLDE2ICs4MiwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+IFVzYWdlOgotCQlhbnQgc2ltcGxlIChFeGVjdXRlcyB0aGUgc2ltcGxlIHRlc3RzKQotCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYiAgam1zMiB0ZXN0cykKLQkJYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBlamIgIGptczIgdGVzdHMpCi0JCWFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgZWpiICBqbXMyIHRlc3RzKQotCQlhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3Igam1zMiB0ZXN0cykKLQkJYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIGVqYiAgam1zMiBhcHBzKQotCQlhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGVqYiAgam1zMiB0ZXN0cykKLQkJYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgam1zMiBhcHBzKQotCQlhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIGptczIgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPiBVc2FnZToKKyAgICAgICAgYW50IHNpbXBsZSAoRXhlY3V0ZXMgdGhlIHNpbXBsZSB0ZXN0cykKKyAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamIgIGptczIgdGVzdHMpCisgICAgICAgIGFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgZWpiICBqbXMyIHRlc3RzKQorICAgICAgICBhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGVqYiAgam1zMiB0ZXN0cykKKyAgICAgICAgYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIGptczIgdGVzdHMpCisgICAgICAgIGFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBlamIgIGptczIgYXBwcykKKyAgICAgICAgYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBlamIgIGptczIgdGVzdHMpCisgICAgICAgIGFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgIGptczIgYXBwcykKKyAgICAgICAgYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBqbXMyIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptczIvc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXMyL3NpbXBsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDRiMGI4OTcuLmQ2NmViMmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptczIvc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zMi9zaW1wbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItbWRiIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zaW1wbGUiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNpbXBsZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJjb20uc3VuLnMxcGVxZS5lamIubWRiLnNpbXBsZS5jbGllbnQuU2ltcGxlTWVzc2FnZUNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJjb20uc3VuLnMxcGVxZS5lamIubWRiLnNpbXBsZS5jbGllbnQuU2ltcGxlTWVzc2FnZUNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXMyL3NpbXBsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXMyL3NpbXBsZS9idWlsZC54bWwKaW5kZXggMjg0Mjc3Mi4uMzgyMmZmMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zMi9zaW1wbGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptczIvc2ltcGxlL2J1aWxkLnhtbApAQCAtMzcsNyArMzcsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgpAQCAtNDYsMTEgKzQ2LDExIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktam1zLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXN0Lm5hbWUiIHZhbHVlPSJTYW1wbGVRdWV1ZSIvPgpAQCAtNjUsMTUgKzY1LDE1IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktam1zLWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXMyL3NpbXBsZS9jbGllbnQvU2ltcGxlTWVzc2FnZUNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zMi9zaW1wbGUvY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YQppbmRleCAxYThkNmRiLi5lOWVlYmQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXMyL3NpbXBsZS9jbGllbnQvU2ltcGxlTWVzc2FnZUNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptczIvc2ltcGxlL2NsaWVudC9TaW1wbGVNZXNzYWdlQ2xpZW50LmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogcHVibGljIGNsYXNzIFNpbXBsZU1lc3NhZ2VDbGllbnQgewotICAgIAorCiAgICAgICAgIENvbnRleHQgICAgICAgICAgICAgICAgIGpuZGlDb250ZXh0ID0gbnVsbDsKICAgICAgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSAgcXVldWVDb25uZWN0aW9uRmFjdG9yeSA9IG51bGw7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiAgcXVldWVDb25uZWN0aW9uID0gbnVsbDsKQEAgLTM1LDQ4ICszNSw0OCBAQAogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyAgUVVFVUUgPSAiam1zL1NhbXBsZVF1ZXVlIjsKICAgICAgICAgZmluYWwgaW50ICAgICAgICAgICAgICAgTlVNX01TR1MgPSAzOwogICAgICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuICBhbGxEb25lPWZhbHNlOwotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKworICAgICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAgICAgCisKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCBzaW1wbGUgIisKICAgICAgICAgICAgICJtZXNzYWdlIGRyaXZlbiBiZWFuIHNhbXBsZS4iKTsKICAgICAgICAgICAgIFNpbXBsZU1lc3NhZ2VDbGllbnQgY2xpZW50PW5ldyBTaW1wbGVNZXNzYWdlQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuc2V0dXAoKTsKICAgICAgICAgICAgIGNsaWVudC5zZW5kTWVzc2FnZSgpOwogICAgICAgICAgICAgY2xpZW50LnJlY3ZNZXNzYWdlKCk7Ci0gICAgICAgICAgICBjbGllbnQucHJpbnRSZXBvcnQoKTsgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjbGllbnQucHJpbnRSZXBvcnQoKTsKKwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwdWJsaWMgT2JqZWN0IGpuZGlMb29rdXAoU3RyaW5nIG5hbWUpIAorCisgICAgICAgIHB1YmxpYyBPYmplY3Qgam5kaUxvb2t1cChTdHJpbmcgbmFtZSkKICAgICAgICAgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCAgICBvYmogPSBudWxsOwogICAgICAgICBpZiAoam5kaUNvbnRleHQgPT0gbnVsbCkgewogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBqbmRpQ29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGpuZGlDb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ291bGQgbm90IGNyZWF0ZSBKTkRJIEFQSSAiICsKLSAgICAgICAgICAgICAgICAgICAgImNvbnRleHQ6ICIgKyBlLnRvU3RyaW5nKCkpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgImNvbnRleHQ6ICIgKyBlLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgb2JqID0gam5kaUNvbnRleHQubG9va3VwKG5hbWUpOwotICAgICAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgeyAgICAgICAgICAgIAotICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJKTkRJIEFQSSBsb29rdXAgZmFpbGVkOiAiICsgCisgICAgICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkpOREkgQVBJIGxvb2t1cCBmYWlsZWQ6ICIgKwogICAgICAgICAgICAgICAgIGUudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICB0aHJvdyBlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBvYmo7CiAgICAgfQotICAgICAgICAKKwogICAgICAgICBwdWJsaWMgdm9pZCBzZXR1cCgpewogICAgICAgICAgICAgdHJ5ewotICAgICAgICAgICAgcXVldWVDb25uZWN0aW9uRmFjdG9yeT0oUXVldWVDb25uZWN0aW9uRmFjdG9yeSlqbmRpTG9va3VwKFFVRVVFQ09ORkFDKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgcXVldWUgPSAoUXVldWUpam5kaUxvb2t1cChRVUVVRSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgcXVldWVDb25uZWN0aW9uRmFjdG9yeT0oUXVldWVDb25uZWN0aW9uRmFjdG9yeSlqbmRpTG9va3VwKFFVRVVFQ09ORkFDKTsKKyAgICAgICAgICAgIHF1ZXVlID0gKFF1ZXVlKWpuZGlMb29rdXAoUVVFVUUpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInNpbXBsZSBtZGIgam5kaUxvb2t1cCIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9Y2F0Y2goVGhyb3dhYmxlIGUpCiAgICAgICAgICAgICB7CkBAIC04NCwyMSArODQsMjEgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlByb2JsZW0gaW4gbG9va2luZyB1cCBjb25uZWN0aW9uIGZhY3RvcmllcyIpOwogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgCiAKLSAgICAgICAgCisgICAgICAgIH0KKworCisKKwogICAgICAgICBwdWJsaWMgU2ltcGxlTWVzc2FnZUNsaWVudCgpe30KLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoKXsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5PShRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KWpuZGlMb29rdXAoUVVFVUVDT05GQUMpOyAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIHF1ZXVlID0gKFF1ZXVlKWpuZGlMb29rdXAoUVVFVUUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAKKyAgICAgICAgICAgIHF1ZXVlQ29ubmVjdGlvbkZhY3Rvcnk9KFF1ZXVlQ29ubmVjdGlvbkZhY3Rvcnkpam5kaUxvb2t1cChRVUVVRUNPTkZBQyk7CisKKyAgICAgICAgICAgIHF1ZXVlID0gKFF1ZXVlKWpuZGlMb29rdXAoUVVFVUUpOworCiAKICAgICAgICAgICAgIHF1ZXVlQ29ubmVjdGlvbiA9CiAgICAgICAgICAgICAgICAgcXVldWVDb25uZWN0aW9uRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKQEAgLTExMCw0MiArMTEwLDQyIEBACiAgICAgICAgICAgICBtZXNzYWdlLnNldEpNU0RlbGl2ZXJ5TW9kZShEZWxpdmVyeU1vZGUuUEVSU0lTVEVOVCk7CiAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBkdXJhYmxlIHF1ZXVlIHN1YnNjcmliZXIscGVyc2lzdGVudCBkZWxpdmVyeSBtb2RlIik7CiAKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX01TR1M7IGkrKykgeyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX01TR1M7IGkrKykgewogICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V0VGV4dChNU0dfVEVYVCArIChpICsgMSkpOwogICAgICAgICAgICAgICAgIGlmKGk9PShOVU1fTVNHUy0xKSkKICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXRTdHJpbmdQcm9wZXJ0eSgiTUVTU0FHRV9OVU0iLCJMQVNUIik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIG1lc3NhZ2U6ICIgKyBtZXNzYWdlLmdldFRleHQoKSk7Ci0gICAgICAgICAgICAgICAgcXVldWVTZW5kZXIuc2VuZChtZXNzYWdlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBxdWV1ZVNlbmRlci5zZW5kKG1lc3NhZ2UpOwogICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcCgxMDAwKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCAzIG1lc3NhZ2VzLG5vdyBzbGVlcGluZyIpOyAgICAgICAgICAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCAzIG1lc3NhZ2VzLG5vdyBzbGVlcGluZyIpOwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gb2NjdXJyZWQ6ICIgKyBlLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInNpbXBsZSBtZGIgbWFpbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGZpbmFsbHkgYmxvY2sgb2Ygc2VuZCBtZXNzYWdlIik7Ci0JICAgIGlmIChxdWV1ZUNvbm5lY3Rpb24gIT1udWxsKXsKLQkgICAgdHJ5ewotCSAgICBxdWV1ZUNvbm5lY3Rpb24uY2xvc2UoKTsKLQkgICAgfWNhdGNoKEpNU0V4Y2VwdGlvbiBleCl7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9Ci0JICAgIH0KLSAgICAgICAgICAgCi0gICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic2ltcGxlIG1kYiBzZW5kbWVzc2FnZSIsIHN0YXQuUEFTUyk7ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGlmIChxdWV1ZUNvbm5lY3Rpb24gIT1udWxsKXsKKyAgICAgICAgdHJ5eworICAgICAgICBxdWV1ZUNvbm5lY3Rpb24uY2xvc2UoKTsKKyAgICAgICAgfWNhdGNoKEpNU0V4Y2VwdGlvbiBleCl7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInNpbXBsZSBtZGIgc2VuZG1lc3NhZ2UiLCBzdGF0LlBBU1MpOwogICAgICAgICB9IC8vIGZpbmFsbHkKLSAgICB9ICAgICAgICAgIAotICAgICAgICAKKyAgICB9CisKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50UmVwb3J0KCl7CiAgICAgICAgICAgICBpZihhbGxEb25lKQotICAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInNpbXBsZU1kYklEIik7ICAgICAgICAgICAgCisgICAgICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgic2ltcGxlTWRiSUQiKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWVzc2FnZVN0cmVhbSBmcm9tIHNlcnZlciBub3QgZmluaXNoZWQiKTsKLSAgICAgICAgfSAgICAKLSAgICAgICAgCi0gICAgCi0gICAgCi0gICAgCisgICAgICAgIH0KKworCisKKwogICAgIHB1YmxpYyB2b2lkIHJlY3ZNZXNzYWdlKCl7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBjb25uZWN0PW51bGw7CiAgICAgICAgIC8qCkBAIC0xNTksMTUgKzE1OSwxNSBAQAogICAgICAgICAgKiBDbG9zZSBjb25uZWN0aW9uLgogICAgICAgICAgKi8KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiaW5zaWRlIHJlY3ZNZXNzYWdlIG9mIGptczIgYXBwY2xpZW50Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnNpZGUgcmVjdk1lc3NhZ2Ugb2Ygam1zMiBhcHBjbGllbnQiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGNvbm5lY3QgPSBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0LmNyZWF0ZVF1ZXVlU2Vzc2lvbihmYWxzZSwwKTsKLSAgICAgICAgICAgIHJlY2VpdmVyPXNlc3Npb24uY3JlYXRlUmVjZWl2ZXIocXVldWUpOyAgCisgICAgICAgICAgICByZWNlaXZlcj1zZXNzaW9uLmNyZWF0ZVJlY2VpdmVyKHF1ZXVlKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnRlZCBSZWNlaXZlciIpOwogICAgICAgICAgICAgY29ubmVjdC5zdGFydCgpOwogICAgICAgICAgICAgaW50IG1zZ2NvdW50PTE7Ci0gICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgTWVzc2FnZSBtID0gcmVjZWl2ZXIucmVjZWl2ZSgxMDAwMCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCaW5nbyEuIGdvdCBhIGFjayBtc2cgYmFjayBmcm9tIHNlcnZlciIpOwogICAgICAgICAgICAgICAgIG1zZ2NvdW50Kys7CkBAIC0xODAsNyArMTgwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwcm9wcz1tZXNzYWdlLmdldFN0cmluZ1Byb3BlcnR5KCJNRVNTQUdFX05VTSIpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmKG1zZ2NvdW50Pj0zKXsKQEAgLTE5Myw3ICsxOTMsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXNzYWdlcyBmcm9tIFF1ZXVlIGZpbmlzaGVkKioiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqIik7CiAgICAgICAgIH0gY2F0Y2ggKEpNU0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBvY2N1cnJlZDogIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gb2NjdXJyZWQ6ICIgKwogICAgICAgICAgICAgICAgIGUudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic2ltcGxlIGptczIgcmVjdm1lc3NhZ2UiLCBzdGF0LkZBSUwpOwogICAgICAgICB9IGNhdGNoKFRocm93YWJsZSBlKXsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptczMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zMy9idWlsZC54bWwKaW5kZXggNzE3OWI3My4uYjQ4MTNiNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zMy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zMy9idWlsZC54bWwKQEAgLTgyLDE2ICs4MiwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+IFVzYWdlOgotCQlhbnQgc2ltcGxlIChFeGVjdXRlcyB0aGUgc2ltcGxlIHRlc3RzKQotCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYiAgam1zMyB0ZXN0cykKLQkJYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBlamIgIGptczMgdGVzdHMpCi0JCWFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgZWpiICBqbXMzIHRlc3RzKQotCQlhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3Igam1zMyB0ZXN0cykKLQkJYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIGVqYiAgam1zMyBhcHBzKQotCQlhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGVqYiAgam1zMyB0ZXN0cykKLQkJYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgam1zMyBhcHBzKQotCQlhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIGptczMgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPiBVc2FnZToKKyAgICAgICAgYW50IHNpbXBsZSAoRXhlY3V0ZXMgdGhlIHNpbXBsZSB0ZXN0cykKKyAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamIgIGptczMgdGVzdHMpCisgICAgICAgIGFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgZWpiICBqbXMzIHRlc3RzKQorICAgICAgICBhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGVqYiAgam1zMyB0ZXN0cykKKyAgICAgICAgYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIGptczMgdGVzdHMpCisgICAgICAgIGFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBlamIgIGptczMgYXBwcykKKyAgICAgICAgYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBlamIgIGptczMgdGVzdHMpCisgICAgICAgIGFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgIGptczMgYXBwcykKKyAgICAgICAgYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBqbXMzIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptczMvc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXMzL3NpbXBsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDRiMGI4OTcuLmQ2NmViMmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptczMvc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zMy9zaW1wbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItbWRiIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zaW1wbGUiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNpbXBsZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJjb20uc3VuLnMxcGVxZS5lamIubWRiLnNpbXBsZS5jbGllbnQuU2ltcGxlTWVzc2FnZUNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJjb20uc3VuLnMxcGVxZS5lamIubWRiLnNpbXBsZS5jbGllbnQuU2ltcGxlTWVzc2FnZUNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXMzL3NpbXBsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXMzL3NpbXBsZS9idWlsZC54bWwKaW5kZXggMmY4ZmYwNS4uZmU5ZTY3YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zMy9zaW1wbGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptczMvc2ltcGxlL2J1aWxkLnhtbApAQCAtMzcsNyArMzcsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgpAQCAtNDcsMjYgKzQ3LDI2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlciIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zMy9zaW1wbGUvY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptczMvc2ltcGxlL2NsaWVudC9TaW1wbGVNZXNzYWdlQ2xpZW50LmphdmEKaW5kZXggMjM4ZDYxMS4uY2NjZTY5ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zMy9zaW1wbGUvY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXMzL3NpbXBsZS9jbGllbnQvU2ltcGxlTWVzc2FnZUNsaWVudC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIHB1YmxpYyBjbGFzcyBTaW1wbGVNZXNzYWdlQ2xpZW50IHsKLSAgICAKKwogICAgICAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5ICBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5ID0gbnVsbDsKICAgICAgICAgUXVldWVDb25uZWN0aW9uICBxdWV1ZUNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gICAgICAgICAgICBxdWV1ZVNlc3Npb24gPSBudWxsOwpAQCAtMzQsMjcgKzM0LDI3IEBACiAgICAgICAgIGZpbmFsIFN0cmluZyAgTVNHX1RFWFQgPSBuZXcgU3RyaW5nKCJIZXJlIGlzIGEgY2xpZW50LWFja25vd2xlZGdlIG1lc3NhZ2UiKTsKICAgICAgICAgZmluYWwgaW50ICAgICAgICAgICAgICAgTlVNX01TR1MgPSAzOwogICAgICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuICBhbGxEb25lPWZhbHNlOwotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKworICAgICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAgICAgCisKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCBzaW1wbGUgIisKICAgICAgICAgICAgICJtZXNzYWdlIGRyaXZlbiBiZWFuIHNhbXBsZS4iKTsKICAgICAgICAgICAgIFNpbXBsZU1lc3NhZ2VDbGllbnQgY2xpZW50PW5ldyBTaW1wbGVNZXNzYWdlQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuc2V0dXAoKTsKICAgICAgICAgICAgIGNsaWVudC5zZW5kTWVzc2FnZSgpOwogICAgICAgICAgICAgY2xpZW50LnJlY3ZNZXNzYWdlKCk7Ci0gICAgICAgICAgICBjbGllbnQucHJpbnRSZXBvcnQoKTsgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjbGllbnQucHJpbnRSZXBvcnQoKTsKKwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIHB1YmxpYyB2b2lkIHNldHVwKCl7CiAgICAgICAgICAgICB0cnl7CiAgICAgICAgICAgICBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5PW5ldyBjb20uc3VuLm1lc3NhZ2luZy5RdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KCk7Ci0gICAgICAgICAgICBxdWV1ZSA9IG5ldyBjb20uc3VuLm1lc3NhZ2luZy5RdWV1ZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHF1ZXVlID0gbmV3IGNvbS5zdW4ubWVzc2FnaW5nLlF1ZXVlKCk7CiAgICAgICAgICAgICBxdWV1ZS5zZXRQcm9wZXJ0eSgiaW1xRGVzdGluYXRpb25OYW1lIiwgIm5ld19xdWV1ZV9uYW1lIik7CiAgICAgICAgICAgICB9Y2F0Y2goVGhyb3dhYmxlIGUpCiAgICAgICAgICAgICB7CkBAIC02MiwxOCArNjIsMTggQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlByb2JsZW0gaW4gbG9va2luZyB1cCBjb25uZWN0aW9uIGZhY3RvcmllcyIpOwogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgCiAKLSAgICAgICAgCisgICAgICAgIH0KKworCisKKwogICAgICAgICBwdWJsaWMgU2ltcGxlTWVzc2FnZUNsaWVudCgpe30KLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoKXsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgCisKIAogICAgICAgICAgICAgcXVldWVDb25uZWN0aW9uID0KICAgICAgICAgICAgICAgICBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwpAQCAtODUsNDIgKzg1LDQyIEBACiAgICAgICAgICAgICBtZXNzYWdlLnNldEpNU0RlbGl2ZXJ5TW9kZShEZWxpdmVyeU1vZGUuUEVSU0lTVEVOVCk7CiAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBkdXJhYmxlIHF1ZXVlIHN1YnNjcmliZXIscGVyc2lzdGVudCBkZWxpdmVyeSBtb2RlIik7CiAKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX01TR1M7IGkrKykgeyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX01TR1M7IGkrKykgewogICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V0VGV4dChNU0dfVEVYVCArIChpICsgMSkpOwogICAgICAgICAgICAgICAgIGlmKGk9PShOVU1fTVNHUy0xKSkKICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXRTdHJpbmdQcm9wZXJ0eSgiTUVTU0FHRV9OVU0iLCJMQVNUIik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIG1lc3NhZ2U6ICIgKyBtZXNzYWdlLmdldFRleHQoKSk7Ci0gICAgICAgICAgICAgICAgcXVldWVTZW5kZXIuc2VuZChtZXNzYWdlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBxdWV1ZVNlbmRlci5zZW5kKG1lc3NhZ2UpOwogICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcCgxMDAwKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCAzIG1lc3NhZ2VzLG5vdyBzbGVlcGluZyIpOyAgICAgICAgICAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCAzIG1lc3NhZ2VzLG5vdyBzbGVlcGluZyIpOwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gb2NjdXJyZWQ6ICIgKyBlLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInNpbXBsZSBqbXMzIG1haW4iLCBzdGF0LkZBSUwpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBmaW5hbGx5IGJsb2NrIG9mIHNlbmQgbWVzc2FnZSIpOwotCSAgICBpZiAocXVldWVDb25uZWN0aW9uICE9bnVsbCl7Ci0JICAgIHRyeXsKLQkgICAgcXVldWVDb25uZWN0aW9uLmNsb3NlKCk7Ci0JICAgIH1jYXRjaChKTVNFeGNlcHRpb24gZXgpewotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgfQotCSAgICB9Ci0gICAgICAgICAgIAotICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInNpbXBsZSBqbXMzIHNlbmRtZXNzYWdlIiwgc3RhdC5QQVNTKTsgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgaWYgKHF1ZXVlQ29ubmVjdGlvbiAhPW51bGwpeworICAgICAgICB0cnl7CisgICAgICAgIHF1ZXVlQ29ubmVjdGlvbi5jbG9zZSgpOworICAgICAgICB9Y2F0Y2goSk1TRXhjZXB0aW9uIGV4KXsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic2ltcGxlIGptczMgc2VuZG1lc3NhZ2UiLCBzdGF0LlBBU1MpOwogICAgICAgICB9IC8vIGZpbmFsbHkKLSAgICB9ICAgICAgICAgIAotICAgICAgICAKKyAgICB9CisKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50UmVwb3J0KCl7CiAgICAgICAgICAgICBpZihhbGxEb25lKQotICAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInNpbXBsZU1kYklEIik7ICAgICAgICAgICAgCisgICAgICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgic2ltcGxlTWRiSUQiKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWVzc2FnZVN0cmVhbSBmcm9tIHNlcnZlciBub3QgZmluaXNoZWQiKTsKLSAgICAgICAgfSAgICAKLSAgICAgICAgCi0gICAgCi0gICAgCi0gICAgCisgICAgICAgIH0KKworCisKKwogICAgIHB1YmxpYyB2b2lkIHJlY3ZNZXNzYWdlKCl7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBjb25uZWN0PW51bGw7CiAgICAgICAgIC8qCkBAIC0xMzQsMTUgKzEzNCwxNSBAQAogICAgICAgICAgKiBDbG9zZSBjb25uZWN0aW9uLgogICAgICAgICAgKi8KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiaW5zaWRlIHJlY3ZNZXNzYWdlIG9mIGptczMgYXBwY2xpZW50Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnNpZGUgcmVjdk1lc3NhZ2Ugb2Ygam1zMyBhcHBjbGllbnQiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGNvbm5lY3QgPSBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0LmNyZWF0ZVF1ZXVlU2Vzc2lvbihmYWxzZSwwKTsKLSAgICAgICAgICAgIHJlY2VpdmVyPXNlc3Npb24uY3JlYXRlUmVjZWl2ZXIocXVldWUpOyAgCisgICAgICAgICAgICByZWNlaXZlcj1zZXNzaW9uLmNyZWF0ZVJlY2VpdmVyKHF1ZXVlKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnRlZCBSZWNlaXZlciIpOwogICAgICAgICAgICAgY29ubmVjdC5zdGFydCgpOwogICAgICAgICAgICAgaW50IG1zZ2NvdW50PTE7Ci0gICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgTWVzc2FnZSBtID0gcmVjZWl2ZXIucmVjZWl2ZSgxMDAwMCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCaW5nbyEuIGdvdCBhIGFjayBtc2cgYmFjayBmcm9tIHNlcnZlciIpOwogICAgICAgICAgICAgICAgIG1zZ2NvdW50Kys7CkBAIC0xNTUsNyArMTU1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwcm9wcz1tZXNzYWdlLmdldFN0cmluZ1Byb3BlcnR5KCJNRVNTQUdFX05VTSIpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmKG1zZ2NvdW50Pj0zKXsKQEAgLTE2OCw3ICsxNjgsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXNzYWdlcyBmcm9tIFF1ZXVlIGZpbmlzaGVkKioiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqIik7CiAgICAgICAgIH0gY2F0Y2ggKEpNU0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBvY2N1cnJlZDogIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gb2NjdXJyZWQ6ICIgKwogICAgICAgICAgICAgICAgIGUudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic2ltcGxlIGptczMgcmVjdm1lc3NhZ2UiLCBzdGF0LkZBSUwpOwogICAgICAgICB9IGNhdGNoKFRocm93YWJsZSBlKXsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptc3dlYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zd2ViL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjgwYmU0Yy4uNzA2NTVjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zd2ViL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zd2ViL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIzICsxNSwyMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam1zLW1zZ2Rlc3Qtam1zd2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zd2ViL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptc3dlYi9idWlsZC54bWwKaW5kZXggY2UwY2ZiOC4uMmFmNjUzYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zd2ViL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXN3ZWIvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+CkBAIC00NywyOCArNDcsMjggQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtd2FyIj4KLQkgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9L2EvYiIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLXdhci1jb21tb24iPgotICAgIAkJPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLSAgICAJCTxwYXJhbSBuYW1lPSJ3YXIuZmlsZSIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS9hL2IvJHthcHBuYW1lfS13ZWIud2FyIi8+Ci0gIAk8L2FudGNhbGw+CisgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS9hL2IiLz4KKyAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS13YXItY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmZpbGUiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vYS9iLyR7YXBwbmFtZX0td2ViLndhciIvPgorICAgICAgPC9hbnRjYWxsPgogICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlLCBidWlsZC13YXIiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypTZXJ2bGV0Ki5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiB1cGRhdGU9InRydWUiPgotICAgIAkJPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgotICAgICAgCQkJPGluY2x1ZGUgbmFtZT0iYS9iLyoud2FyIi8+Ci0gICAgCQk8L2ZpbGVzZXQ+Ci0JPC9lYXI+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgdXBkYXRlPSJ0cnVlIj4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KKyAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImEvYi8qLndhciIvPgorICAgICAgICAgICAgPC9maWxlc2V0PgorICAgIDwvZWFyPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTkxLDE0ICs5MSwxNCBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IiR7aHR0cC5ob3N0fSAke2h0dHAucG9ydH0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zd2ViL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptc3dlYi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYzUyZDY4OS4uNTcyNGYzMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zd2ViL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXN3ZWIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgaG9zdDsKICAgICBwcml2YXRlIFN0cmluZyBwb3J0OwogCkBAIC0zNSwyMyArMzUsMjMgQEAKICAgICAgICAgaG9zdCA9ICggYXJncy5sZW5ndGggPiAwKSA/IGFyZ3NbMF0gOiAibG9jYWxob3N0IjsKICAgICAgICAgcG9ydCA9ICggYXJncy5sZW5ndGggPiAxKSA/IGFyZ3NbMV0gOiAiNDg0OCI7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJqbXMtbXNnZGVzdC1qbXN3ZWIiKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImptcy1tc2dkZXN0LWptc3dlYklEIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgZW52ID0gbnVsbDsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIAorICAgICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICAgICAiL2ptcy1tc2dkZXN0LWptc3dlYi9qbXNzZXJ2bGV0IjsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgam1zd2ViIHNlcnZsZXQgYXQgIiArIHVybCk7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZihjb2RlICE9IDIwMCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5jb3JyZWN0IHJldHVybiBjb2RlOiAiICsgY29kZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImptc3dlYiBtYWluIiwgc3RhdC5GQUlMKTsKQEAgLTYzLDE1ICs2MywxNSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImptc3dlYiBtYWluIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwcml2YXRlIGludCBpbnZva2VTZXJ2bGV0KFN0cmluZyB1cmwpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgICAgCisKICAgICAgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7Ci0gICAgICAgIAorCiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKXUub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOwpAQCAtODQsNiArODQsNiBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KLSAgICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXN3ZWIvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zd2ViL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA4MTkzZDgwLi5iODhlNDE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXN3ZWIvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptc3dlYi9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgPHJlcy1yZWYtbmFtZT5qbXMvTXlRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5PC9yZXMtcmVmLW5hbWU+CiAgICAgIDxyZXMtdHlwZT5qYWthcnRhLmptcy5RdWV1ZUNvbm5lY3Rpb25GYWN0b3J5PC9yZXMtdHlwZT4KICAgICAgPHJlcy1hdXRoPkNvbnRhaW5lcjwvcmVzLWF1dGg+Ci0gICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPiAKKyAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgIDwvcmVzb3VyY2UtcmVmPgogICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5qbXMvTXlRdWV1ZTwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zd2ViL3NlcnZsZXQvSm1zU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvam1zd2ViL3NlcnZsZXQvSm1zU2VydmxldC5qYXZhCmluZGV4IDVhZmRiZDMuLjFlZmEwNDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L2ptc3dlYi9zZXJ2bGV0L0ptc1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9qbXN3ZWIvc2VydmxldC9KbXNTZXJ2bGV0LmphdmEKQEAgLTMyLDIxICszMiwyMSBAQAogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY0ZhY3Rvcnk7CiAKICAgICBwdWJsaWMgdm9pZCAgaW5pdCggU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGptc3NlcnZsZXQuLi4gaW5pdCgpIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VydmljZSAoIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEgLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3AgKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAgICAgICAgICAgICAgICAKKwogICAgICAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgY29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCi0gICAgICAgICAgICBVc2VyVHJhbnNhY3Rpb24gdXNlclR4ID0gKFVzZXJUcmFuc2FjdGlvbikgCisgICAgICAgICAgICBVc2VyVHJhbnNhY3Rpb24gdXNlclR4ID0gKFVzZXJUcmFuc2FjdGlvbikKICAgICAgICAgICAgICAgICBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL1VzZXJUcmFuc2FjdGlvbiIpOwogCiAgICAgICAgICAgICBxY0ZhY3RvcnkgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL015UXVldWVDb25uZWN0aW9uRmFjdG9yeSIpOwpAQCAtNjYsMjAgKzY2LDIwIEBACiAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8SFRNTD4gPEhFQUQ+IDxUSVRMRT4gSk1TIFNlcnZsZXQgT3V0cHV0IDwvVElUTEU+IDwvSEVBRD4gPEJPRFkgQkdDT0xPUj13aGl0ZT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Q0VOVEVSPiA8Rk9OVCBzaXplPSsxIENPTE9SPWJsdWU+RGF0YWJhc2VTZXJ2ZWx0IDo6IEFsbCBpbmZvcm1hdGlvbiBJIGNhbiBnaXZlIDwvRk9OVD4gPC9DRU5URVI+IDxwPiAiICk7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IENvbnRleHQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0Q29udGV4dFBhdGgoKSArICI8YnI+IiApOyAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gU2VydmxldCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRTZXJ2bGV0UGF0aCgpICsgIjxicj4iICk7IAotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBQYXRoIEluZm8gOiAgPC9GT05UPiAiICsgcmVxLmdldFBhdGhJbmZvKCkgKyAiPGJyPiIgKTsgCisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IENvbnRleHQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0Q29udGV4dFBhdGgoKSArICI8YnI+IiApOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBTZXJ2bGV0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldFNlcnZsZXRQYXRoKCkgKyAiPGJyPiIgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gUGF0aCBJbmZvIDogIDwvRk9OVD4gIiArIHJlcS5nZXRQYXRoSW5mbygpICsgIjxicj4iICk7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9CT0RZPiA8L0hUTUw+ICIpOwotICAgICAgICAgICAgCisKICAgICAgICAgfWNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJqbXNzZXJ2bGV0IHRlc3QgZmFpbGVkIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihleCk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKLSAgICAgKiBTZW5kIGEgbWVzc2FnZS4gCisgICAgICogU2VuZCBhIG1lc3NhZ2UuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBzZW5kTWVzc2FnZShTdHJpbmcgbXNnKSB0aHJvd3MgSk1TRXhjZXB0aW9uIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBudWxsOwpAQCAtMTI5LDkgKzEyOSw5IEBACiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7fQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgIGRlc3Ryb3koKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gam1zc2VydmxldCBkZXN0cm95Iik7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9tYmVhbnMxL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9tYmVhbnMxL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDdmMTRhNC4uMzM0YzVlNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvbWJlYW5zMS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L21iZWFuczEvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJtYW5hZ2VtZW50LW1lamIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJtYW5hZ2VtZW50LW1lamJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0ibWFuYWdlbWVudC1tZWpiQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9tYmVhbnMxL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L21iZWFuczEvYnVpbGQueG1sCmluZGV4IGRjYWM2YTkuLjQ5ODhmZGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L21iZWFuczEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L21iZWFuczEvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+CkBAIC00NiwxMyArNDYsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFwcGNsaWVudC1qYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgCisgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDEwICs2MiwxMCBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9tYmVhbnMxL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L21iZWFuczEvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDM4MTEyYjYuLmZkODkzNWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L21iZWFuczEvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L21iZWFuczEvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCwxMDUgKzI4LDEwNSBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICAKKwogICAgIC8vIGNvbnN0cwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0Tm90UnVuICAgID0gIlRFU1QgTk9UIFJVTiI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RQYXNzZWQgICAgPSAiVEVTVCBQQVNTRUQiOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0RmFpbGVkICAgID0gIlRFU1QgRkFJTEVEIjsKLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJtYW5hZ2VtZW50LW1lamIiKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIm1hbmFnZW1lbnQtbWVqYiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHt9CiAKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdCgpIHsKLSAgICAgICAgCi0JYm9vbGVhbiBwYXNzID0gZmFsc2U7CisKKyAgICBib29sZWFuIHBhc3MgPSBmYWxzZTsKICAgICAgICAgU3RyaW5nIHJlcyA9IGtUZXN0Tm90UnVuOwotICAgICAgICAKLSAgICAJdHJ5IHsKLSAgICAgICAgICAgIAotCQlTdHJpbmcgaG9zdCA9ICJsb2NhbGhvc3QiOwotCQlpbnQgcG9ydCA9IDg2ODY7Ci0JCVN0cmluZyB1c2VyID0gImFkbWluIjsKLQkJU3RyaW5nIHBhc3N3b3JkID0gImFkbWluYWRtaW4iOwogCi0JCS8vIEdldCBDb25maWcgaW5mbyB1c2luZyBBTVgKLQkJQXBwc2VydmVyQ29ubmVjdGlvblNvdXJjZSBjb25uID0gbmV3IEFwcHNlcnZlckNvbm5lY3Rpb25Tb3VyY2UoCi0JCQkJCQkgICAgICBob3N0LCBwb3J0LCB1c2VyLCBwYXNzd29yZCwgbnVsbCk7CisgICAgICAgIHRyeSB7CiAKLQkJRG9tYWluUm9vdCBkb21haW5Sb290ID0gY29ubi5nZXREb21haW5Sb290KCk7CisgICAgICAgIFN0cmluZyBob3N0ID0gImxvY2FsaG9zdCI7CisgICAgICAgIGludCBwb3J0ID0gODY4NjsKKyAgICAgICAgU3RyaW5nIHVzZXIgPSAiYWRtaW4iOworICAgICAgICBTdHJpbmcgcGFzc3dvcmQgPSAiYWRtaW5hZG1pbiI7CiAKLQkJRG9tYWluQ29uZmlnIGNvbmZpZyA9IGRvbWFpblJvb3QuZ2V0RG9tYWluQ29uZmlnKCk7CisgICAgICAgIC8vIEdldCBDb25maWcgaW5mbyB1c2luZyBBTVgKKyAgICAgICAgQXBwc2VydmVyQ29ubmVjdGlvblNvdXJjZSBjb25uID0gbmV3IEFwcHNlcnZlckNvbm5lY3Rpb25Tb3VyY2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LCBwb3J0LCB1c2VyLCBwYXNzd29yZCwgbnVsbCk7CiAKLQkJTWFwIG1hcCA9IGNvbmZpZy5nZXRKREJDUmVzb3VyY2VDb25maWdNYXAoKTsKLQkJQ29sbGVjdGlvbjxKREJDUmVzb3VyY2VDb25maWc+IGpkYmNDb25maWdzID0gCi0JCQkJCShDb2xsZWN0aW9uPEpEQkNSZXNvdXJjZUNvbmZpZz4pbWFwLnZhbHVlcygpOwotCQlmb3IgKCBKREJDUmVzb3VyY2VDb25maWcgamRiY0NvbmZpZyA6IGpkYmNDb25maWdzICkgewotCQkgICAgU3lzdGVtLmVyci5wcmludGxuKCJKREJDIFJlc291cmNlOiBuYW1lID0gIiArIGpkYmNDb25maWcuZ2V0TmFtZSgpCi0JCQkJCSsgIiwgSk5ESSBOYW1lID0gIiArIGpkYmNDb25maWcuZ2V0Sk5ESU5hbWUoKQotCQkJCQkrICIsIFBvb2wgTmFtZSA9ICIgKyBqZGJjQ29uZmlnLmdldFBvb2xOYW1lKCkpOwotCQkgICAgU3lzdGVtLmVyci5wcmludGxuKCJcdFx0SjJFRVR5cGUgPSAiICsgamRiY0NvbmZpZy5nZXRKMkVFVHlwZSgpKTsKKyAgICAgICAgRG9tYWluUm9vdCBkb21haW5Sb290ID0gY29ubi5nZXREb21haW5Sb290KCk7CisKKyAgICAgICAgRG9tYWluQ29uZmlnIGNvbmZpZyA9IGRvbWFpblJvb3QuZ2V0RG9tYWluQ29uZmlnKCk7CisKKyAgICAgICAgTWFwIG1hcCA9IGNvbmZpZy5nZXRKREJDUmVzb3VyY2VDb25maWdNYXAoKTsKKyAgICAgICAgQ29sbGVjdGlvbjxKREJDUmVzb3VyY2VDb25maWc+IGpkYmNDb25maWdzID0KKyAgICAgICAgICAgICAgICAgICAgKENvbGxlY3Rpb248SkRCQ1Jlc291cmNlQ29uZmlnPiltYXAudmFsdWVzKCk7CisgICAgICAgIGZvciAoIEpEQkNSZXNvdXJjZUNvbmZpZyBqZGJjQ29uZmlnIDogamRiY0NvbmZpZ3MgKSB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkpEQkMgUmVzb3VyY2U6IG5hbWUgPSAiICsgamRiY0NvbmZpZy5nZXROYW1lKCkKKyAgICAgICAgICAgICAgICAgICAgKyAiLCBKTkRJIE5hbWUgPSAiICsgamRiY0NvbmZpZy5nZXRKTkRJTmFtZSgpCisgICAgICAgICAgICAgICAgICAgICsgIiwgUG9vbCBOYW1lID0gIiArIGpkYmNDb25maWcuZ2V0UG9vbE5hbWUoKSk7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlx0XHRKMkVFVHlwZSA9ICIgKyBqZGJjQ29uZmlnLmdldEoyRUVUeXBlKCkpOwogICAgICAgICAgICAgICAgICAgICBwYXNzID0gdHJ1ZTsKLQkJfQorICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAocGFzcyA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJObyBKREJDIHJlc291cmNlcyBmb3VuZCIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwYXNzID0gZmFsc2U7CiAKLQkJLy8gR2V0IENvbmZpZyBpbmZvIHVzaW5nIEpNWAotCQkvL01CZWFuU2VydmVyQ29ubmVjdGlvbiBtYkNvbm4gPSBjb25uLmdldE1CZWFuU2VydmVyQ29ubmVjdGlvbiggZmFsc2UgKTsKLQkJU3RyaW5nIHVybHMgPSAic2VydmljZTpqbXg6cm1pOi8vL2puZGkvcm1pOi8vIiArCi0JCQkgICAgICBob3N0ICsgIjoiICsgcG9ydCAgKyAiL21hbmFnZW1lbnQvcm1pLWpteC1jb25uZWN0b3IiOwotCQlKTVhTZXJ2aWNlVVJMIHVybCA9IG5ldyBKTVhTZXJ2aWNlVVJMKHVybHMpOwotCQlIYXNoTWFwIGVudiA9IG5ldyBIYXNoTWFwKCk7Ci0JCWVudi5wdXQoSk1YQ29ubmVjdG9yLkNSRURFTlRJQUxTLCBuZXcgU3RyaW5nW10geyB1c2VyLCBwYXNzd29yZCB9KTsKLQkJSk1YQ29ubmVjdG9yIGpteENvbm5lY3RvciA9IEpNWENvbm5lY3RvckZhY3RvcnkuY29ubmVjdCh1cmwsIGVudik7Ci0JCU1CZWFuU2VydmVyQ29ubmVjdGlvbiBtYkNvbm4gPSBqbXhDb25uZWN0b3IuZ2V0TUJlYW5TZXJ2ZXJDb25uZWN0aW9uKCk7CisgICAgICAgIC8vIEdldCBDb25maWcgaW5mbyB1c2luZyBKTVgKKyAgICAgICAgLy9NQmVhblNlcnZlckNvbm5lY3Rpb24gbWJDb25uID0gY29ubi5nZXRNQmVhblNlcnZlckNvbm5lY3Rpb24oIGZhbHNlICk7CisgICAgICAgIFN0cmluZyB1cmxzID0gInNlcnZpY2U6am14OnJtaTovLy9qbmRpL3JtaTovLyIgKworICAgICAgICAgICAgICAgICAgaG9zdCArICI6IiArIHBvcnQgICsgIi9tYW5hZ2VtZW50L3JtaS1qbXgtY29ubmVjdG9yIjsKKyAgICAgICAgSk1YU2VydmljZVVSTCB1cmwgPSBuZXcgSk1YU2VydmljZVVSTCh1cmxzKTsKKyAgICAgICAgSGFzaE1hcCBlbnYgPSBuZXcgSGFzaE1hcCgpOworICAgICAgICBlbnYucHV0KEpNWENvbm5lY3Rvci5DUkVERU5USUFMUywgbmV3IFN0cmluZ1tdIHsgdXNlciwgcGFzc3dvcmQgfSk7CisgICAgICAgIEpNWENvbm5lY3RvciBqbXhDb25uZWN0b3IgPSBKTVhDb25uZWN0b3JGYWN0b3J5LmNvbm5lY3QodXJsLCBlbnYpOworICAgICAgICBNQmVhblNlcnZlckNvbm5lY3Rpb24gbWJDb25uID0gam14Q29ubmVjdG9yLmdldE1CZWFuU2VydmVyQ29ubmVjdGlvbigpOwogCi0JCS8vT2JqZWN0TmFtZSBvYmplY3ROYW1lID0gCi0JCS8vCQluZXcgT2JqZWN0TmFtZSgiYW14OmoyZWVUeXBlPVgtSkRCQ1Jlc291cmNlQ29uZmlnLCoiKTsKLQkJT2JqZWN0TmFtZSBvYmplY3ROYW1lID0gbnVsbDsgLy8gdG8gcXVlcnkgYWxsIE1CZWFucwotCQlTZXQgbWJlYW5zID0gKFNldCkgbWJDb25uLnF1ZXJ5TmFtZXMob2JqZWN0TmFtZSwgbnVsbCk7Ci0JCUl0ZXJhdG9yIGl0ID0gbWJlYW5zLml0ZXJhdG9yKCk7Ci0JCXdoaWxlICggaXQuaGFzTmV4dCgpICkgewotCQkgICAgT2JqZWN0TmFtZSBtYmVhbiA9IChPYmplY3ROYW1lKSBpdC5uZXh0KCk7IAotCQkgICAgU3lzdGVtLmVyci5wcmludGxuKCJPYmplY3QgTmFtZSA6ICIgKyBtYmVhbi5nZXRDYW5vbmljYWxOYW1lKCkpOworICAgICAgICAvL09iamVjdE5hbWUgb2JqZWN0TmFtZSA9CisgICAgICAgIC8vICAgICAgICBuZXcgT2JqZWN0TmFtZSgiYW14OmoyZWVUeXBlPVgtSkRCQ1Jlc291cmNlQ29uZmlnLCoiKTsKKyAgICAgICAgT2JqZWN0TmFtZSBvYmplY3ROYW1lID0gbnVsbDsgLy8gdG8gcXVlcnkgYWxsIE1CZWFucworICAgICAgICBTZXQgbWJlYW5zID0gKFNldCkgbWJDb25uLnF1ZXJ5TmFtZXMob2JqZWN0TmFtZSwgbnVsbCk7CisgICAgICAgIEl0ZXJhdG9yIGl0ID0gbWJlYW5zLml0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlICggaXQuaGFzTmV4dCgpICkgeworICAgICAgICAgICAgT2JqZWN0TmFtZSBtYmVhbiA9IChPYmplY3ROYW1lKSBpdC5uZXh0KCk7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk9iamVjdCBOYW1lIDogIiArIG1iZWFuLmdldENhbm9uaWNhbE5hbWUoKSk7CiAgICAgICAgICAgICAgICAgICAgIHBhc3MgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChwYXNzID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIk5vIE1iZWFucyBmb3VuZCIpOwogICAgICAgICAgICAgICAgIH0KLSAKLQl9IGNhdGNoKEV4Y2VwdGlvbiByZSkgeworCisgICAgfSBjYXRjaChFeGNlcHRpb24gcmUpIHsKICAgICAgICAgICAgIHJlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgcmVzID0ga1Rlc3RGYWlsZWQ7CiAgICAgICAgICAgICByZXR1cm4gcmVzOwotCX0gCisgICAgfQogCi0JaWYgKCBwYXNzICkgewotCSAgICByZXMgPSBrVGVzdFBhc3NlZDsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJNYmVhbiBUZXN0IHBhc3NlZCIpOworICAgIGlmICggcGFzcyApIHsKKyAgICAgICAgcmVzID0ga1Rlc3RQYXNzZWQ7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWJlYW4gVGVzdCBwYXNzZWQiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJNYmVhbiBUZXN0Iiwgc3RhdC5QQVNTKTsKIAotCX0gZWxzZSB7Ci0JICAgIHJlcyA9IGtUZXN0RmFpbGVkOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1iZWFuIFRlc3QgZmFpbGVkIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzID0ga1Rlc3RGYWlsZWQ7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWJlYW4gVGVzdCBmYWlsZWQiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJNYmVhbiBUZXN0Iiwgc3RhdC5GQUlMKTsKIAotCX0KKyAgICB9CiAKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9Ci0gICAgCisKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvYnVpbGQucHJvcGVydGllcwppbmRleCBjNWM2YWMxLi4wNjVlZDg4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTYgKzE1LDE2IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1vbmx5Z2V0Y29ubmVjdGlvbi1zZXJ2bGV0Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1vbmx5Z2V0Y29ubmVjdGlvbi1zZXJ2bGV0Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Im9ubHlnZXRjb25uZWN0aW9uc2VydmxldCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L29ubHlnZXRjb25uZWN0aW9uc2VydmxldC9idWlsZC54bWwKaW5kZXggMmRkZTM4NS4uNTk1Y2M5NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01MCwxMyArNTAsMTMgQEAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqL3NlcnZsZXQvKi5jbGFzcyIvPiAKKyAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovc2VydmxldC8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iLz4KLSAgICAKLSAgICA8L3RhcmdldD4gCi0gICAgCisKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL29ubHlnZXRjb25uZWN0aW9uc2VydmxldCIvPgpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQtcG9vbC5wcm9wZXJ0eS5hc3NvY2lhdGV3aXRodGhyZWFkPXRydWUiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLW9ubHlnZXRjb25uZWN0aW9uc2VydmxldC1wb29sLnByb3BlcnR5LmFzc29jaWF0ZXdpdGh0aHJlYWQ9dHJ1ZSIvPgogICAgICAgPC9hbnRjYWxsPgogPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC03MywyMSArNzMsMjEgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXIiLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZS5zcWwiLz4KLSAgICAgIDwvYW50Y2FsbD4gIAorICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAKICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3Auc3FsIi8+Ci0gICAgICA8L2FudGNhbGw+ICAKKyAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0LXBvb2wiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L29ubHlnZXRjb25uZWN0aW9uc2VydmxldC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZDlhYzlhZS4uYzM3YTFjZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOSwyMiArMjksMjIgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKLSAJU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7Ci0JU3RyaW5nIHRlc3RTdWl0ZSA9ICJqZGJjLW9ubHlnZXRjb25uZWN0aW9uICI7Ci0gICAgICAgIAorCisgICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiamRiYy1vbmx5Z2V0Y29ubmVjdGlvbiAiOworCiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPShIdHRwVVJMQ29ubmVjdGlvbikgbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdDo4MDgwLyIgKwogICAgICAgICAgICAgIm9ubHlnZXRjb25uZWN0aW9uc2VydmxldC9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQiKS5vcGVuQ29ubmVjdGlvbigpOwogCiAgICAgICAgIENsaWVudCBjID0gbmV3IENsaWVudCgpOwogICAgICAgICBpZiAoYy5kb1Rlc3QoKSkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QxIDogIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDEgOiAiLCBzdGF0LkZBSUwpOwotCX0KLSAgICAgICAgCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKLSAgICAgICAgCisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QxIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CisKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOworCiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC01NywxMSArNTcsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgY29ubiA9KEh0dHBVUkxDb25uZWN0aW9uKSBuZXcgVVJMKCJodHRwOi8vbG9jYWxob3N0OjgwODAvIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgIm9ubHlnZXRjb25uZWN0aW9uc2VydmxldC9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQiKS5vcGVuQ29ubmVjdGlvbigpOwogCi0gICAgICAgICAgICAgICAgICAgIElucHV0U3RyZWFtIHNpcyA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsgCisgICAgICAgICAgICAgICAgICAgIElucHV0U3RyZWFtIHNpcyA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBJbnB1dFN0cmVhbVJlYWRlcihzaXMpICk7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggY29ubi5nZXRSZXNwb25zZU1lc3NhZ2UoKSApOwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgb3AgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBSZWFkaW5nIHJlc3BvbnNlIik7IAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBSZWFkaW5nIHJlc3BvbnNlIik7CiAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCAob3AgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG9wKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcC5pbmRleE9mKCJQQVNTRUQiKSAhPSAtMSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L3NlcnZsZXQvT25seUdldENvbm5lY3Rpb25TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvc2VydmxldC9Pbmx5R2V0Q29ubmVjdGlvblNlcnZsZXQuamF2YQppbmRleCA5MDQyZGUxLi44MmMwODEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvc2VydmxldC9Pbmx5R2V0Q29ubmVjdGlvblNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvc2VydmxldC9Pbmx5R2V0Q29ubmVjdGlvblNlcnZsZXQuamF2YQpAQCAtMjYsOSArMjYsOSBAQAogCiAvKioKICAqIENvbGxlY3Rpb24gb2YgZ2V0Q29ubmVjdGlvbiB0ZXN0cyB1c2luZyBhIHNlcnZsZXQKLSAqIAorICoKICAqIEBhdXRob3IgYWRpdHlhLmdvcmVAc3VuLmNvbQotICovIAorICovCiAKIHB1YmxpYyBjbGFzcyBPbmx5R2V0Q29ubmVjdGlvblNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKQEAgLTM2LDEwICszNiwxMCBAQAogICAgIHByaXZhdGUgUHJpbnRXcml0ZXIgb3V0OwogICAgIHByaXZhdGUgVXNlclRyYW5zYWN0aW9uIHV0eDsKIAotICAgIHB1YmxpYyB2b2lkIGRvR2V0KCBIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3AgKSAKKyAgICBwdWJsaWMgdm9pZCBkb0dldCggSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwICkKICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbgogICAgIHsKLVN5c3RlbS5vdXQucHJpbnRsbigiIEBAQEAgaW4gZG9HZXQiKTsgICAgCitTeXN0ZW0ub3V0LnByaW50bG4oIiBAQEBAIGluIGRvR2V0Iik7CiAgICAgICAgIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CiAgICAgICAgIHdyaXRlSGVhZGVyKCk7CiAKQEAgLTcyLDkgKzcyLDkgQEAKICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIE9OTFlHRVRDT05ORUNUSU9OIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigidGVzdDEgOjogUEFTU0VEIik7IAorICAgICAgICAgICAgb3V0LnByaW50bG4oInRlc3QxIDo6IFBBU1NFRCIpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSggb3V0ICk7IAorICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoIG91dCApOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgaWYgKCBycyAhPSBudWxsICkgeyB0cnkgeyBycy5jbG9zZSgpOyB9Y2F0Y2goIEV4Y2VwdGlvbiBlKSB7fSB9CkBAIC05MiwxNSArOTIsMTUgQEAKICAgICAgICAgICAgIHV0eC5iZWdpbigpOwogICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoIDUwMDAgKTsgICAgCisgICAgICAgICAgICAgICAgVGhyZWFkLnNsZWVwKCA1MDAwICk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBPTkxZR0VUQ09OTkVDVElPTiIpOwogICAgICAgICAgICAgdXR4LmNvbW1pdCgpOwotICAgICAgICAgICAgb3V0LnByaW50bG4oInRlc3QyIDo6IFBBU1NFRCIpOyAKKyAgICAgICAgICAgIG91dC5wcmludGxuKCJ0ZXN0MiA6OiBQQVNTRUQiKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoIG91dCApOyAKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCBvdXQgKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGlmICggcnMgIT0gbnVsbCApIHsgdHJ5IHsgcnMuY2xvc2UoKTsgfWNhdGNoKCBFeGNlcHRpb24gZSkge30gfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L3NxbC9jcmVhdGUuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L3NxbC9jcmVhdGUuc3FsCmluZGV4IGViOTUxNmUuLjU1Y2ZjMDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L29ubHlnZXRjb25uZWN0aW9uc2VydmxldC9zcWwvY3JlYXRlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvc3FsL2NyZWF0ZS5zcWwKQEAgLTEsNiArMSw2IEBACiBEUk9QIFRBQkxFIE9OTFlHRVRDT05ORUNUSU9OOwogQ1JFQVRFIFRBQkxFIE9OTFlHRVRDT05ORUNUSU9OKAotICAgIG5hbWUgY2hhcigyMCksIAorICAgIG5hbWUgY2hhcigyMCksCiAgICAgbnVtIGludGVnZXIKICk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3JlcG9ydC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9yZXBvcnQueG1sCmluZGV4IDAyNzE1MjAuLjhiNWZjMWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3JlcG9ydC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvcmVwb3J0LnhtbApAQCAtMjMsNyArMjMsNyBAQAogPHRhcmdldCBuYW1lPSJyZXBvcnQiPgogPGVjaG8gbWVzc2FnZT0iQ29tcGFyaW5nIHJlc3VsdHMgd2l0aCBleHBlY3RlZCByZXN1bHRzIi8+CiAKLSAKKwogICAgIDx4c2x0IHN0eWxlPSIke3N0eWxlc2hlZXR9IgogICAgICAgICAgICAgaW49IiR7eG1sZmlsZX0iIG91dD0iJHtodG1sZmlsZX0iCiAgICAgICAgICAgICBiYXNlZGlyPSIuIiBkZXN0ZGlyPSIuIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvc3RhbmRhbG9uZXdhci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9zdGFuZGFsb25ld2FyL1dlYlRlc3QuamF2YQppbmRleCAxZTU3YTc5Li4wYThjYzgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9zdGFuZGFsb25ld2FyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9zdGFuZGFsb25ld2FyL1dlYlRlc3QuamF2YQpAQCAtMjIsMTAgKzIyLDEwIEBACiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IGV4dGVuZHMgVGhyZWFkCiB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDM7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSE9TVCA9ICJsb2NhbGhvc3QiOwpAQCAtNDgsMjQgKzQ4LDI0IEBACiAgICAgICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHMuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHMuZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBpbnQgY291bnQgPSAxOwotICAgICAgICAgICAgb3Mud3JpdGUoY291bnQpOyAgICAgICAgCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgb3Mud3JpdGUoY291bnQpOworCisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IDEwKSB7CiAgICAgICAgICAgICAgICAgICAgIHMuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bnQgaXMgOiIgKyBjb3VudCk7CiAgICAgICAgICAgICAgICAgaW50IGkgPSBpcy5yZWFkKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvdW50ICE9IGkpIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uICgiRGF0YSBXcm9uZzogRXhwZWN0ZWQgOiIgKyBjb3VudCArICIgT2J0YWluZWQ6IiArIGkpOyAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoY291bnQgPT0gNSkgeyAKLSAgICAgICAgICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDYwMDApOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGNvdW50ICE9IGkpIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uICgiRGF0YSBXcm9uZzogRXhwZWN0ZWQgOiIgKyBjb3VudCArICIgT2J0YWluZWQ6IiArIGkpOworICAgICAgICAgICAgICAgIGlmIChjb3VudCA9PSA1KSB7CisgICAgICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcCg2MDAwKTsKICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICAgICAgICAgICAgaW50IGogPSBpcy5yZWFkKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCAhPSBqKSB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbiAoIkRhdGEgV3Jvbmc6IEV4cGVjdGVkIDoiICsgY291bnQgKyAiIE9idGFpbmVkOiIgKyBpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgb3Mud3JpdGUoKytjb3VudCk7Ci0gICAgICAgICAgICB9ICAgICAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiByZXgpIHsKICAgICAgICAgICAgIHJleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJTb2NrZXRJbXBsIFNvY2tldEltcGwiLCBzdGF0LkZBSUwpOwpAQCAtODEsNyArODEsNyBAQAogCiAgICAgICAgIC8vIFRoZSBzdGF0IHJlcG9ydGVyIHdyaXRlcyBvdXQgdGhlIHRlc3QgaW5mbyBhbmQgcmVzdWx0cwogICAgICAgICAvLyBpbnRvIHRoZSB0b3AtbGV2ZWwgcXVpY2tsb29rIGRpcmVjdG9yeSBkdXJpbmcgYSBydW4uCi0gICAgICAKKwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJTdGFuZGFsb25lIFNlcnZsZXQvRmlsdGVyIHdhciB0ZXN0Iik7CiAKICAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwpAQCAtOTMsNyArOTMsNyBAQAogCiAgICAgICAgIFdlYlRlc3QgdGVzdCA9IG5ldyBXZWJUZXN0KCk7CiAgICAgICAgIHRlc3Quc3RhcnQoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsICJGSUxURVIiLCBjb250ZXh0Um9vdCArICIvU2VydmxldFRlc3QiICk7CiAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoMjAwMCk7CkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICAgICAgaWYgKGNvdW50ICE9IEVYUEVDVEVEX0NPVU5UKXsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJUZXN0IHN0YW5kYWxvbmV3YXLugIBVTlBSRURJQ1RFRC1GQUlMVVJFIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LkZBSUwpOwotICAgICAgICB9ICAgICAgICAgICAKKyAgICAgICAgfQogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2ViL3N0YW5kYWxvbmV3YXItLS0+IGV4cGVjdCAiICsgRVhQRUNURURfQ09VTlQpOwogICAgIH0KIApAQCAtMTIxLDcgKzEyMSw3IEBACiAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjFcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgoIkhvc3Q6IGxvY2FsaG9zdFxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gcy5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWU6ICIgKyAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSB0aW1lKSk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKQEAgLTEzNSwxOSArMTM1LDE5IEBACiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gbGluZS5pbmRleE9mKCI6Iik7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdGF0dXMgPSBsaW5lLnN1YnN0cmluZyhpbmRleCsxKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5lcXVhbHNJZ25vcmVDYXNlKCJQQVNTIikpewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1yZXF1ZXN0ZGlzcGF0Y2hlcjogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1yZXF1ZXN0ZGlzcGF0Y2hlcjogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LkZBSUwpOyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXJlcXVlc3RkaXNwYXRjaGVyOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgIH0KICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3N0YW5kYWxvbmV3YXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3N0YW5kYWxvbmV3YXIvYnVpbGQucHJvcGVydGllcwppbmRleCAxMmVmNGJhLi4yMTRjNjJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9zdGFuZGFsb25ld2FyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvc3RhbmRhbG9uZXdhci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVxdWVzdGRpc3BhdGNoZXIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlcXVlc3RkaXNwYXRjaGVyIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1yZXF1ZXN0ZGlzcGF0Y2hlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvc3RhbmRhbG9uZXdhci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9zdGFuZGFsb25ld2FyL2J1aWxkLnhtbAppbmRleCA5Nzk3MTY5Li4zZGFmY2VlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9zdGFuZGFsb25ld2FyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9zdGFuZGFsb25ld2FyL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTAgKzQ0LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01NSwxMCArNTUsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjYsNyArNjYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXIiLz4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KQEAgLTc5LDEwICs3OSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3N0YW5kYWxvbmV3YXIvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvc3RhbmRhbG9uZXdhci9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNmZiNTZmYy4uYTMyNTFhZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvc3RhbmRhbG9uZXdhci9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvc3RhbmRhbG9uZXdhci9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDM3ICsyMiwzNyBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPGZpbHRlcj4KICAgICAgICAgPGZpbHRlci1uYW1lPkZpbHRlclRlc3Q8L2ZpbHRlci1uYW1lPgogICAgICAgICA8ZmlsdGVyLWNsYXNzPnRlc3QuRmlsdGVyVGVzdDwvZmlsdGVyLWNsYXNzPgotICAgIDwvZmlsdGVyPiAgICAKLSAgICAgICAgCisgICAgPC9maWx0ZXI+CisKICAgICA8ZmlsdGVyLW1hcHBpbmc+CiAgICAgICAgIDxmaWx0ZXItbmFtZT5GaWx0ZXJUZXN0PC9maWx0ZXItbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KICAgICAgICAgPGRpc3BhdGNoZXI+UkVRVUVTVDwvZGlzcGF0Y2hlcj4KICAgICAgICAgPGRpc3BhdGNoZXI+SU5DTFVERTwvZGlzcGF0Y2hlcj4KLSAgICAgICAgPGRpc3BhdGNoZXI+Rk9SV0FSRDwvZGlzcGF0Y2hlcj4gIAotICAgICAgICA8ZGlzcGF0Y2hlcj5FUlJPUjwvZGlzcGF0Y2hlcj4gCisgICAgICAgIDxkaXNwYXRjaGVyPkZPUldBUkQ8L2Rpc3BhdGNoZXI+CisgICAgICAgIDxkaXNwYXRjaGVyPkVSUk9SPC9kaXNwYXRjaGVyPgogICAgIDwvZmlsdGVyLW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0MjwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mjwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0Mjwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3QzPC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QzPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3QzPC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDM8L3VybC1wYXR0ZXJuPgogICAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlc3Npb24tY29uZmlnPgogICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjEwPC9zZXNzaW9uLXRpbWVvdXQ+CiAgICAgPC9zZXNzaW9uLWNvbmZpZz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3N0YW5kYWxvbmV3YXIvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9zdGFuZGFsb25ld2FyL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhCmluZGV4IDhmZWU0ZjEuLjMyNGFiYjcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3N0YW5kYWxvbmV3YXIvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogaW1wb3J0IGphdmEubmV0Lio7CiBpbXBvcnQgamF2YS5pby4qOwogcHVibGljIGNsYXNzIEZpbHRlclRlc3QgaW1wbGVtZW50cyBGaWx0ZXJ7Ci0gICAgCisKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBERUZBVUxUX1JFVVNFX0FERFJFU1M7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IERFRkFVTFRfUkVDRUlWRV9CVUZGRVJfU0laRTsKQEAgLTM3LDExICszNywxMSBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB0ZXN0ZWQgPSBmYWxzZTsKIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmRlc3Ryb3ldIik7Ci0gICAgfSAgICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIEZpbHRlckNoYWluIGZpbHRlckNoYWluKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuZG9GaWx0ZXJdIik7CiAKQEAgLTcxLDE1ICs3MSwxNSBAQAogCiAgICAgICAgICgoSHR0cFNlcnZsZXRSZXF1ZXN0KXJlcXVlc3QpLmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJQQVNTIik7CiAgICAgICAgIGZpbHRlckNoYWluLmRvRmlsdGVyKHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICAgICAgCi0gICAgfSAgICAKLSAgICAKLSAgICAKKworICAgIH0KKworCiAgICAgcHVibGljIHZvaWQgaW5pdChqYWthcnRhLnNlcnZsZXQuRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmluaXRdIik7CiAgICAgICAgIGNvbnRleHQgPSBmaWx0ZXJDb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICB9Ci0gICAgCisKIAogICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CiAgICAgICAgIEluZXRTb2NrZXRBZGRyZXNzIGlzYTsKQEAgLTg3LDE3ICs4NywxNyBAQAogICAgICAgICAgICAgaXNhID0gbmV3IEluZXRTb2NrZXRBZGRyZXNzKEluZXRBZGRyZXNzLmdldEJ5TmFtZShIT1NUKSwgUE9SVCk7CiAgICAgICAgIH0gY2F0Y2ggKFVua25vd25Ib3N0RXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uIChleCk7ICAgICAgICAgICAgCisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbiAoZXgpOwogICAgICAgICB9CiAgICAgICAgIFNvY2tldCBzID0gbmV3IFNvY2tldCgpOwotICAgICAgICB0cnkgeyAgICAgICAgICAgIAorICAgICAgICB0cnkgewogICAgICAgICAgICAgcy5jb25uZWN0KGlzYSwgMTAwMCk7CiAgICAgICAgICAgICB0ZXN0U29ja2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICAgICAgaW50IGNvdW50ID0gMTsKICAgICAgICAgICAgIHdoaWxlICh0cnVlKXsKLSAgICAgICAgICAgICAgICBpbnQgYXZhaWxhYmxlID0gaXMuYXZhaWxhYmxlKCk7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGludCBhdmFpbGFibGUgPSBpcy5hdmFpbGFibGUoKTsKICAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlID4gMCB8fCBjb3VudCA9PSA2IHx8IGNvdW50ID4gMTApIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID09IDYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CkBAIC0xMDksMzcgKzEwOSwzNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhwZWN0ZWQgZXhjZXB0aW9uIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcy53cml0ZShjb3VudCsrKTsgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLndyaXRlKGNvdW50KyspOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGludCBpID0gaXMucmVhZCgpOwotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgIT0gaSAmJiBjb3VudCA8IDExICkgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIldyb25nIERhdGEsIEV4cGVjdGVkIDogIiArIGNvdW50ICsgIiBHb3Q6ICIrIGkpOwotICAgICAgICAgICAgICAgICAgICBvcy53cml0ZShjb3VudCsrKTsgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBvcy53cml0ZShjb3VudCsrKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDIwMDApOwogICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGlmIChleCBpbnN0YW5jZW9mIGphdmEubmV0LlNvY2tldEV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhwZWN0ZWQgRXhjZXB0aW9uIik7CiAgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOyAKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBmaW5hbGx5IHsgICAgICAgICAgICAKKyAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcy5jbG9zZSgpOyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHMuY2xvc2UoKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNsb3NlIEZhaWxlZCIpOwotICAgICAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgICB9ICAgICAgICAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCB0ZXN0U29ja2V0Q29ubmVjdGlvbigpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFNvY2tldCBzMSA9IG5ldyBTb2NrZXQoSW5ldEFkZHJlc3MuZ2V0QnlOYW1lKEhPU1QpLCBQT1JUKTsKQEAgLTE2OCwyMyArMTY4LDIzIEBACiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNvY2tldCBzID0gbmV3IFNvY2tldCgpOwotICAgICAgICAgICAgaW50IHJzaXplID0gcy5nZXRSZWNlaXZlQnVmZmVyU2l6ZSgpOyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IHJzaXplID0gcy5nZXRSZWNlaXZlQnVmZmVyU2l6ZSgpOwogICAgICAgICAgICAgcy5zZXRSZWNlaXZlQnVmZmVyU2l6ZSgxMDAwKTsKLSAgICAgICAgICAgIHMuY29ubmVjdChuZXcgSW5ldFNvY2tldEFkZHJlc3MoSW5ldEFkZHJlc3MuZ2V0QnlOYW1lKEhPU1QpLCBQT1JUKSk7ICAgICAgICAgICAgCisgICAgICAgICAgICBzLmNvbm5lY3QobmV3IEluZXRTb2NrZXRBZGRyZXNzKEluZXRBZGRyZXNzLmdldEJ5TmFtZShIT1NUKSwgUE9SVCkpOwogICAgICAgICAgICAgaWYgKHMuZ2V0Q2hhbm5lbCgpICE9IG51bGwgKSB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbiAoIkNoYW5uZWwgbm90IG51bGwiKTsKICAgICAgICAgICAgIGlmIChzLmdldEluZXRBZGRyZXNzKCkuZXF1YWxzKEluZXRBZGRyZXNzLmdldEJ5TmFtZShIT1NUKSkgPT0gZmFsc2UgKSB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTm90IGNvbm5lY3RlZCB0byBsb2NhbCBhZGRyZXNzIik7Ci0gICAgICAgICAgICBib29sZWFuIGIgPSBzLmdldEtlZXBBbGl2ZSgpOyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbGVhbiBiID0gcy5nZXRLZWVwQWxpdmUoKTsKICAgICAgICAgICAgIHMuc2V0S2VlcEFsaXZlKCEgYik7CiAgICAgICAgICAgICBpZiAocy5nZXRLZWVwQWxpdmUoKSA9PSBiKSB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiS2VlcCBhbGl2ZSBpcyBub3Qgc2V0Iik7Ci0gICAgICAgICAgICBpZiAocy5nZXRMb2NhbEFkZHJlc3MoKS5lcXVhbHMoSW5ldEFkZHJlc3MuZ2V0QnlOYW1lKEhPU1QpKSA9PSBmYWxzZSApIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJOb3QgY29ubmVjdGVkIHRvIGxvY2FsIGFkZHJlc3MiKTsgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzLmdldExvY2FsQWRkcmVzcygpLmVxdWFscyhJbmV0QWRkcmVzcy5nZXRCeU5hbWUoSE9TVCkpID09IGZhbHNlICkgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5vdCBjb25uZWN0ZWQgdG8gbG9jYWwgYWRkcmVzcyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQb3J0IDogIiArIHMuZ2V0TG9jYWxQb3J0KCkpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQb3J0IDogIiArIHMuZ2V0TG9jYWxTb2NrZXRBZGRyZXNzKCkpOyAgICAgICAgICAgIAotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQb3J0IDogIiArIHMuZ2V0UG9ydCgpKTsgICAgICAgICAgICAgIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQb3J0IDogIiArIHMuZ2V0TG9jYWxTb2NrZXRBZGRyZXNzKCkpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQb3J0IDogIiArIHMuZ2V0UG9ydCgpKTsKICAgICAgICAgICAgIGIgPSBzLmdldE9PQklubGluZSgpOwogICAgICAgICAgICAgcy5zZXRPT0JJbmxpbmUoISBiKTsKICAgICAgICAgICAgIGlmIChzLmdldE9PQklubGluZSgpID09IGIpIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJPT0Igbm90IHNldCIpOwogICAgICAgICAgICAgcy5zZXRQZXJmb3JtYW5jZVByZWZlcmVuY2VzKDEwMDAsIDEwMCwgMTAwKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpbnQgYnMgPSBzLmdldFJlY2VpdmVCdWZmZXJTaXplKCk7CiAgICAgICAgICAgICBpZiAoYnMgPT0gcnNpemUgKSB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiUkJTIG5vdCBzZXQgOiAiICsgYnMpOwogICAgICAgICAgICAgYiA9IHMuZ2V0UmV1c2VBZGRyZXNzKCk7CkBAIC0yMDAsMzAgKzIwMCwzMCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgcy5zZXRTb1RpbWVvdXQoMTAwMCk7CiAgICAgICAgICAgICBpZiAocy5nZXRTb1RpbWVvdXQoKSAhPSAxMDAwICkgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlRJTUVPVVQgbm90IFNFVCIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGIgPSBzLmdldFRjcE5vRGVsYXkoKTsKICAgICAgICAgICAgIHMuc2V0VGNwTm9EZWxheSghIGIpOwotICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKHMuZ2V0VGNwTm9EZWxheSgpID09IGIpIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUQ1AgTk8gREVMQVQgbm90IFNFVCIpOwotICAgICAgICAgICAgaSA9IHMuZ2V0VHJhZmZpY0NsYXNzKCk7ICAgICAKLSAgICAgICAgICAgCi0gICAgICAgICAgICAKKyAgICAgICAgICAgIGkgPSBzLmdldFRyYWZmaWNDbGFzcygpOworCisKICAgICAgICAgICAgIGludCBqID0gaSArNTsKICAgICAgICAgICAgIGlmIChqID4gMjUwKSBqID0gaSAtNTsKICAgICAgICAgICAgIGludCBrID0gcy5nZXRUcmFmZmljQ2xhc3MoKTsKICAgICAgICAgICAgIHMuc2V0VHJhZmZpY0NsYXNzKGopOwogICAgICAgICAgICAgaW50IHRjID0gcy5nZXRUcmFmZmljQ2xhc3MoKTsKLSAgICAgICAgICAgIGlmICh0YyA9PSBrKSB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVEMgbm90IHNldDogIiArIHRjKTsgICAgICAgCi0gICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh0YyA9PSBrKSB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVEMgbm90IHNldDogIiArIHRjKTsKKwogICAgICAgICAgICAgcy5zZXRTZW5kQnVmZmVyU2l6ZSgxMDAwKTsKICAgICAgICAgICAgIHMuZ2V0U2VuZEJ1ZmZlclNpemUoKTsKICAgICAgICAgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW53YW50ZWQgZXhjZXBydGlvbiIpOyAgICAgIAotICAgICAgICAKLSAgICAgICAgfSAgICAgICAKLSAgICAgICAgICAgCisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW53YW50ZWQgZXhjZXBydGlvbiIpOworCisgICAgICAgIH0KKwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3N0YW5kYWxvbmV3YXIvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggMjY3ZjU2OC4uYzRkNDFhNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTQ2LDEzICs0NiwxMyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgaW1wbGVtZW50cyBIdHRwU2Vzc2lvbkxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0gIiArIGNvbnRleHQuZ2V0TWFqb3JWZXJzaW9uKCkpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpAQCAtNjAsMjMgKzYwLDIzIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVItUkVRVUVTVCIsIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSIikpOwotICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7ICAgICAgICAKLSAgICAgICAgCQorICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7CisKICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmQgPSBjb250ZXh0LmdldFJlcXVlc3REaXNwYXRjaGVyKCIvU2VydmxldFRlc3QyIik7Ci0gICAgICAgIHJkLmZvcndhcmQocmVxdWVzdCwgcmVzcG9uc2UpOyAgICAgICAKKyAgICAgICAgcmQuZm9yd2FyZChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkNyZWF0ZWRdIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkRlc3Ryb3llZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uRGVzdHJveWVkXSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF0dHJpYnV0ZXM6ICIgKyBodHRwU2Vzc2lvbkV2ZW50LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoInRlc3QiKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9zdGFuZGFsb25ld2FyL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9zdGFuZGFsb25ld2FyL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEKaW5kZXggODQ2ZDQ1ZC4uNjEzNjE3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3N0YW5kYWxvbmV3YXIvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YQpAQCAtMjUsMTAgKzI1LDEwIEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QyIGV4dGVuZHMgSHR0cFNlcnZsZXQgaW1wbGVtZW50cyBIdHRwU2Vzc2lvbkxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0Mi5pbml0XSIpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQyLmluaXRdIik7CiAgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICB9CiAKQEAgLTM3LDIzICszNywyMyBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDIuZG9Qb3N0XSIpOwotICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVItRk9SV0FSRCIscmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVIiKSk7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIkZBSUwiKTsgICAgICAgIAotICAgICAgICAKKyAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiRkFJTCIpOworCiAgICAgICAgIFJlcXVlc3REaXNwYXRjaGVyIHJkID0gcmVxdWVzdC5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL1NlcnZsZXRUZXN0MyIpOwotICAgICAgICByZC5pbmNsdWRlKHJlcXVlc3QsIHJlc3BvbnNlKTsgICAgIAorICAgICAgICByZC5pbmNsdWRlKHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9Ci0gCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uQ3JlYXRlZF0iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uRGVzdHJveWVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25EZXN0cm95ZWRdIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXR0cmlidXRlczogIiArIGh0dHBTZXNzaW9uRXZlbnQuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgidGVzdCIpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3N0YW5kYWxvbmV3YXIvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3N0YW5kYWxvbmV3YXIvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YQppbmRleCBkY2MxZGJhLi4xZjEyMDg3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC9zdGFuZGFsb25ld2FyL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhCkBAIC00NiwxMSArNDYsMTEgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdDMgZXh0ZW5kcyBIdHRwU2VydmxldHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0My5pbml0XSIpOyAgICAgICAgCi0gICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0My5pbml0XSIpOworICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CkBAIC01OCwxMiArNTgsMTIgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQzLmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgb3V0LnByaW50bG4oIkZJTFRFUi1SRVFVRVNUOiIgKyByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUi1SRVFVRVNUIikpOwogICAgICAgICBvdXQucHJpbnRsbigiRklMVEVSLUZPUldBUkQ6IiArIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSLUZPUldBUkQiKSk7CiAgICAgICAgIG91dC5wcmludGxuKCJGSUxURVItSU5DTFVERToiICsgcmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVIiKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC90aW1lci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvdGltZXIvYnVpbGQucHJvcGVydGllcwppbmRleCA4ODgzNmEyLi40YzMzYTYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC90aW1lci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3RpbWVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXRpbWVyLXJlc3RvcmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3RpbWVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3RpbWVyL2J1aWxkLnhtbAppbmRleCA0NjMwMTA0Li5jYmE5YWM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC90aW1lci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvdGltZXIvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NywxNCArNDcsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03OSwxNCArNzksMTQgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSJyZXN0b3JlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3RpbWVyL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3RpbWVyL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBiNmQ4ZWY4Li5lMzlmYzY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC90aW1lci9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvdGltZXIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMSw5ICszMSw5IEBACiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3ROb3RSdW4gICAgPSAiVEVTVCBOT1QgUlVOIjsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdFBhc3NlZCAgICA9ICJURVNUIFBBU1NFRCI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RGYWlsZWQgICAgPSAiVEVTVCBGQUlMRUQiOwotICAgIAotICAgIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisKKworICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgU3RyaW5nIGpuZGlOYW1lID0gImVqYi9lamJfdGltZXJfc2Vzc2lvbnRpbWVyX1RpbWVyU2Vzc2lvbiI7CkBAIC01NSwxMiArNTUsMTIgQEAKIAogICAgICAgICBpZiggYXJncy5sZW5ndGggPT0gMSkgewogICAgICAgICAgICAgYWZ0ZXJSZXN0YXJ0ID0gYXJnc1swXS5lcXVhbHNJZ25vcmVDYXNlKCJyZXN0b3JlIik7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdCgpIHsKICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGtUZXN0UGFzc2VkOwotICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IG51bGw7IAorICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIFRpbWVyU2Vzc2lvbiByZW1vdGVPYmogPSBudWxsOwogCiAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9IGpuZGlOYW1lOwpAQCAtNjgsMTggKzY4LDE4IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgZWpiIHJlZiAiICsgZWpiTmFtZSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvaW5nIHRpbWVyIHRlc3QgZm9yICIgKyBqbmRpTmFtZSk7CiAKIAogICAgICAgICAgICAgamF2YS5sYW5nLk9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvIiArIGVqYk5hbWUpOwogCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLWVqYiBzdHViLS0tIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS1lamIgc3R1Yi0tLSIgKwogICAgICAgICAgICAgICAgIG9ianJlZi5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS1lamIgY2xhc3NuYW1lLS0tIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS1lamIgY2xhc3NuYW1lLS0tIiArCiAgICAgICAgICAgICAgICAgb2JqcmVmLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tVGltZXJTZXNzaW9uSG9tZS0tLSIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tVGltZXJTZXNzaW9uSG9tZS0tLSIgKwogICAgICAgICAgICAgICAgIFRpbWVyU2Vzc2lvbkhvbWUuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKIApAQCAtODcsNyArODcsNyBAQAogCiAgICAgICAgICAgICBUaW1lclNlc3Npb25Ib21lIGhvbWUgPSAoVGltZXJTZXNzaW9uSG9tZSkKICAgICAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBUaW1lclNlc3Npb25Ib21lLmNsYXNzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICByZW1vdGVPYmogPSBob21lLmNyZWF0ZSgpOwogICAgICAgICAgICAgU3RyaW5nIG90aGVyU2VydmVyMSA9ICJmb28iOwogCkBAIC05Niw1OSArOTYsNTkgQEAKICAgICAgICAgICAgICAgICB0ZXN0TmFtZSA9ICJhZnRlclJlc3RhcnQiOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWlncmF0aW5nIHRpbWVycyBmcm9tICIgKyBvdGhlclNlcnZlcjEpOwogICAgICAgICAgICAgICAgIHJlbW90ZU9iai5taWdyYXRlVGltZXJzRnJvbShvdGhlclNlcnZlcjEpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcmVtb3RlT2JqLmNyZWF0ZVRpbWVyKDUwMDAsIDAsICJ0aW1lcjEiKTsKICAgICAgICAgICAgICAgICByZW1vdGVPYmouY3JlYXRlVGltZXIoMzAwMDAsIDAsICJ0aW1lcjIiKTsKICAgICAgICAgICAgICAgICByZW1vdGVPYmouY3JlYXRlVGltZXIoNjAwMDAwMDAsIDAsICJ0aW1lcjMiKTsKICAgICAgICAgICAgICAgICByZW1vdGVPYmouY3JlYXRlVGltZXIoNTAwMCwgMTIwMDAsICJ0aW1lcjQiKTsKICAgICAgICAgICAgICAgICByZW1vdGVPYmouY3JlYXRlVGltZXIoNTAwMCwgMzAwMDAsICJ0aW1lcjUiKTsKLSAgICAgICAgICAgICAgICByZW1vdGVPYmouY3JlYXRlVGltZXIoNTAwMCwgMTAwMDAwMDAwLCAidGltZXI2Iik7ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZW1vdGVPYmouY3JlYXRlVGltZXIoNTAwMCwgMTAwMDAwMDAwLCAidGltZXI2Iik7CisKICAgICAgICAgICAgICAgICAvLyBzaW11bGF0ZSBjcmVhdGlvbiBvZiB0aW1lcnMgd2l0aGluIGFub3RoZXIgc2VydmVyCiAgICAgICAgICAgICAgICAgLy8gaW5zdGFuY2UuICBub25lIG9mIHRoZXNlIHNob3VsZCB0aW1lb3V0IHVudGlsIHdlCiAgICAgICAgICAgICAgICAgLy8gZG8gYSBtaWdyYXRpb24KLSAgICAgICAgICAgICAgICAKKwogCiAgICAgICAgICAgICAgICAgcmVtb3RlT2JqLmNyZWF0ZVRpbWVySW5PdGhlclNlcnZlcgogICAgICAgICAgICAgICAgICAgICAob3RoZXJTZXJ2ZXIxLCAib3RoZXJfdGltZXI3IiwKLSAgICAgICAgICAgICAgICAgICAgIDEwMDAsIDAsIAorICAgICAgICAgICAgICAgICAgICAgMTAwMCwgMCwKICAgICAgICAgICAgICAgICAgICAgICJvdGhlcl90aW1lcjciKTsKIAogICAgICAgICAgICAgICAgIHJlbW90ZU9iai5jcmVhdGVUaW1lckluT3RoZXJTZXJ2ZXIKICAgICAgICAgICAgICAgICAgICAgKG90aGVyU2VydmVyMSwgIm90aGVyX3RpbWVyOCIsCi0gICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMEwsIDAsIAotICAgICAgICAgICAgICAgICAgICAgIm90aGVyX3RpbWVyOCIpOyAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwTCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICJvdGhlcl90aW1lcjgiKTsKKwogICAgICAgICAgICAgICAgIHJlbW90ZU9iai5jcmVhdGVUaW1lckluT3RoZXJTZXJ2ZXIKICAgICAgICAgICAgICAgICAgICAgKG90aGVyU2VydmVyMSwgIm90aGVyX3RpbWVyOSIsCi0gICAgICAgICAgICAgICAgICAgICAxMDAwLCAxMDAwMDAwMDAwMEwsIAorICAgICAgICAgICAgICAgICAgICAgMTAwMCwgMTAwMDAwMDAwMDBMLAogICAgICAgICAgICAgICAgICAgICAgIm90aGVyX3RpbWVyOSIpOwogCiAKICAgICAgICAgICAgICAgICByZW1vdGVPYmouY3JlYXRlVGltZXJJbk90aGVyU2VydmVyCiAgICAgICAgICAgICAgICAgICAgIChvdGhlclNlcnZlcjEsICJvdGhlcl90aW1lcjEwIiwKLSAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMCwgMTAwMCwgCisgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAsIDEwMDAsCiAgICAgICAgICAgICAgICAgICAgICAib3RoZXJfdGltZXIxMCIpOwogCiAgICAgICAgICAgICAgICAgcmVtb3RlT2JqLmNyZWF0ZVRpbWVySW5PdGhlclNlcnZlcgogICAgICAgICAgICAgICAgICAgICAob3RoZXJTZXJ2ZXIxLCAib3RoZXJfdGltZXIxMSIsCi0gICAgICAgICAgICAgICAgICAgICAzMDAwMCwgMTAwMDAwMDAwLCAKKyAgICAgICAgICAgICAgICAgICAgIDMwMDAwLCAxMDAwMDAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAib3RoZXJfdGltZXIxMSIpOwogCiAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGEgY291cGxlIG9mIHRpbWVycyBmb3IgYW5vdGhlciBzaW11bGF0ZWQKICAgICAgICAgICAgICAgICAvLyBzZXJ2ZXIuICB3ZSB3aWxsIG5vdCBiZSBtaWdyYXRpbmcgdGhlc2UgdGltZXJzLCBzbwogICAgICAgICAgICAgICAgIC8vIGJ5IHZlcmlmeWluZyB0aGF0IHdlIGRvbid0IGdldCBub3RpZmljYXRpb25zIGZyb20gdGhlc2UKICAgICAgICAgICAgICAgICAvLyB0aW1lcnMgd2UgdGVzdCB0aGF0IHRoZSBtaWdyYXRpb24gb25seSBoYXBwZW5zIGZvcgotICAgICAgICAgICAgICAgIC8vIHRoZSBzcGVjaWZpZWQgc2VydmVyLiAgCisgICAgICAgICAgICAgICAgLy8gdGhlIHNwZWNpZmllZCBzZXJ2ZXIuCiAKICAgICAgICAgICAgICAgICByZW1vdGVPYmouY3JlYXRlVGltZXJJbk90aGVyU2VydmVyCiAgICAgICAgICAgICAgICAgICAgICgiYmFyIiwgImJhcl90aW1lcjEyIiwgMTAwMCwgMCwgImJhcl90aW1lcjEyIik7CiAgICAgICAgICAgICAgICAgcmVtb3RlT2JqLmNyZWF0ZVRpbWVySW5PdGhlclNlcnZlcgogICAgICAgICAgICAgICAgICAgICAoImJhciIsICJiYXJfdGltZXIxMyIsIDEwMDAsIDEwMDAsICJiYXJfdGltZXIxMyIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY0ZhY3RvcnkgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKICAgICAgICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL015UXVldWVDb25uZWN0aW9uRmFjdG9yeSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiIHFjRmFjdG9yeSA9ICIgKyBxY0ZhY3RvcnkpOwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgcXVldWUgPSAiICsgcXVldWUpOwogCiAgICAgICAgICAgICBjb25uZWN0aW9uID0gcWNGYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPSAKKyAgICAgICAgICAgIFF1ZXVlU2Vzc2lvbiBzZXNzaW9uID0KICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmNyZWF0ZVF1ZXVlU2Vzc2lvbihmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKICAgICAgICAgICAgIFF1ZXVlUmVjZWl2ZXIgcmVjZWl2ZXIgPSBzZXNzaW9uLmNyZWF0ZVJlY2VpdmVyKHF1ZXVlKTsKICAgICAgICAgICAgIGNvbm5lY3Rpb24uc3RhcnQoKTsKQEAgLTE2Nyw3ICsxNjcsNyBAQAogICAgICAgICAgICAgaWYoIGFmdGVyUmVzdGFydCApIHsKICAgICAgICAgICAgICAgICB0b1JlY2VpdmUuYWRkKCJ0aW1lcjIiKTsKICAgICAgICAgICAgICAgICB0b1JlY2VpdmUuYWRkKCJ0aW1lcjQiKTsKLSAgICAgICAgICAgICAgICB0b1JlY2VpdmUuYWRkKCJ0aW1lcjUiKTsgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHRvUmVjZWl2ZS5hZGQoInRpbWVyNSIpOwogCiAgICAgICAgICAgICAgICAgLy8gbWlncmF0ZWQgdGltZXJzCiAgICAgICAgICAgICAgICAgdG9SZWNlaXZlLmFkZCgib3RoZXJfdGltZXI3Iik7CkBAIC0xODEsNDEgKzE4MSw0MSBAQAogICAgICAgICAgICAgICAgIHRvUmVjZWl2ZS5hZGQoInRpbWVyNiIpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBsb25nIHdhaXRUaW1lID0gYWZ0ZXJSZXN0YXJ0ID8gCisgICAgICAgICAgICBsb25nIHdhaXRUaW1lID0gYWZ0ZXJSZXN0YXJ0ID8KICAgICAgICAgICAgICAgICA0MDAwMCA6IDEwMDAwOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB3aGlsZSh0cnVlKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciBtZXNzYWdlIik7CiAgICAgICAgICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gcmVjZWl2ZXIucmVjZWl2ZSh3YWl0VGltZSk7CiAgICAgICAgICAgICAgICAgVGV4dE1lc3NhZ2UgdGV4dE1zZyA9IChUZXh0TWVzc2FnZSltZXNzYWdlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICggKG1lc3NhZ2UgPT0gbnVsbCkgfHwgCi0gICAgICAgICAgICAgICAgICAgICAoICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKCEgdG9SZWNlaXZlLmNvbnRhaW5zKHRleHRNc2cuZ2V0VGV4dCgpKSAgKSAmJiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAoISAgcmVjZWl2ZWQuY29udGFpbnModGV4dE1zZy5nZXRUZXh0KCkpICApIAotICAgICAgICAgICAgICAgICAgICAgKSAKKworICAgICAgICAgICAgICAgIGlmICggKG1lc3NhZ2UgPT0gbnVsbCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAoISB0b1JlY2VpdmUuY29udGFpbnModGV4dE1zZy5nZXRUZXh0KCkpICApICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgKCEgIHJlY2VpdmVkLmNvbnRhaW5zKHRleHRNc2cuZ2V0VGV4dCgpKSAgKQorICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJSZWNlaXZlZCBhIGludmFsaWQgbWVzc2FnZSAiICsgCisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlJlY2VpdmVkIGEgaW52YWxpZCBtZXNzYWdlICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKyAiIFRpbWVPdXQgZmFpbGVkISEiKTsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIHJlY2VpdmVkLmFkZCh0ZXh0TXNnLmdldFRleHQoKSk7CiAgICAgICAgICAgICAgICAgdG9SZWNlaXZlLnJlbW92ZSh0ZXh0TXNnLmdldFRleHQoKSk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNlaXZlZCBNZXNzYWdlIDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgTWVzc2FnZSA6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0TXNnLmdldFRleHQoKSk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXNzYWdlcyByZWNlaXZlZCBzbyBmYXIgOiAiICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkKTsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXNzYWdlcyByZWNlaXZlZCBzbyBmYXIgOiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWQpOwogICAgICAgICAgICAgICAgIGlmKCB0b1JlY2VpdmUuc2l6ZSgpID09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGFsbCBleHBlY3RlZCBtZXNzYWdlcyIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInNlc3Npb250aW1lciAiICsgdGVzdE5hbWUsIHN0YXQuUEFTUyk7CiAKICAgICAgICAgICAgIGlmKCBhZnRlclJlc3RhcnQgKSB7CiAgICAgICAgICAgICAgICAgcmVtb3RlT2JqLmRlbGV0ZVRpbWVycygpOwotICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaW1lclNlc3Npb24gOiAiICsgdGVzdE5hbWUgKyAiIHRlc3QgZmFpbGVkIik7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvdGltZXIvZWpiL1RpbWVyU2Vzc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvdGltZXIvZWpiL1RpbWVyU2Vzc2lvbi5qYXZhCmluZGV4IDgyNzZlNjYuLjhkOGQwZmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3RpbWVyL2VqYi9UaW1lclNlc3Npb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC90aW1lci9lamIvVGltZXJTZXNzaW9uLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogICAgIHB1YmxpYyB2b2lkIG1pZ3JhdGVUaW1lcnNGcm9tKFN0cmluZyBvd25lcikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRpbWVySW5PdGhlclNlcnZlcihTdHJpbmcgb3duZXIsIFN0cmluZyB0aW1lcklkLCAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVUaW1lckluT3RoZXJTZXJ2ZXIoU3RyaW5nIG93bmVyLCBTdHJpbmcgdGltZXJJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbml0aWFsRXhwaXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnRlcnZhbER1cmF0aW9uLCBTdHJpbmcgaW5mbykKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3RpbWVyL2VqYi9UaW1lclNlc3Npb25FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3RpbWVyL2VqYi9UaW1lclNlc3Npb25FSkIuamF2YQppbmRleCBkNDM0OTI5Li5iNTRmZWRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC90aW1lci9lamIvVGltZXJTZXNzaW9uRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvdGltZXIvZWpiL1RpbWVyU2Vzc2lvbkVKQi5qYXZhCkBAIC0zOSwzNSArMzksMzUgQEAKIAogaW1wb3J0IGNvbS5zdW4uZWpiLmNvbnRhaW5lcnMuVGltZXJCZWFuOwogCi1wdWJsaWMgY2xhc3MgVGltZXJTZXNzaW9uRUpCIGltcGxlbWVudHMgVGltZWRPYmplY3QsIFNlc3Npb25CZWFuIAorcHVibGljIGNsYXNzIFRpbWVyU2Vzc2lvbkVKQiBpbXBsZW1lbnRzIFRpbWVkT2JqZWN0LCBTZXNzaW9uQmVhbgogewogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY29udGV4dDsKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbiBjb25uZWN0aW9uOwogICAgIHByaXZhdGUgUXVldWVTZXNzaW9uIHNlc3Npb247CiAgICAgcHJpdmF0ZSBRdWV1ZSBxdWV1ZTsKICAgICBwcml2YXRlIFF1ZXVlU2VuZGVyIHNlbmRlcjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7CiAgICAgICAgIGNvbnRleHQgPSBzYzsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8vIGJ1c2luZXNzIG1ldGhvZCB0byBjcmVhdGUgYSB0aW1lcgogICAgIHB1YmxpYyBUaW1lckhhbmRsZSBjcmVhdGVUaW1lcihsb25nIGluaXRpYWxEZWxheSwgbG9uZyBpbnRlcnZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG1zZykgewotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIGdldE1lc3NhZ2VDb250ZXh0Iik7CiAgICAgICAgICAgICBjb250ZXh0LmdldE1lc3NhZ2VDb250ZXh0KCk7CiAgICAgICAgIH0gY2F0Y2goSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlzZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXRNZXNzYWdlQ29udGV4dCgpIHN1Y2Nlc3NmdWxseSB0aHJldyBpbGxlZ2FsU3RhdGVFeGNlcHRpb24iKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBUaW1lclNlcnZpY2UgdGltZXJTZXJ2aWNlID0gY29udGV4dC5nZXRUaW1lclNlcnZpY2UoKTsKICAgICAgICAgVGltZXIgdGltZXI7CiAgICAgICAgIGlmKCBpbnRlcnZhbCA9PSAwICkgewpAQCAtNzgsMTUgKzc4LDE1IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRpbWVyLmdldEhhbmRsZSgpOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVUaW1lckluT3RoZXJTZXJ2ZXIoU3RyaW5nIG93bmVyLCBTdHJpbmcgdGltZXJJZCwgCisKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVUaW1lckluT3RoZXJTZXJ2ZXIoU3RyaW5nIG93bmVyLCBTdHJpbmcgdGltZXJJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbml0aWFsRXhwaXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnRlcnZhbER1cmF0aW9uLCBTdHJpbmcgaW5mbykgewogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBEYXRlIG5vdyA9IG5ldyBEYXRlKCk7Ci0gICAgICAgICAgICBUaW1lckJlYW4udGVzdENyZWF0ZSh0aW1lcklkLCBjb250ZXh0LCBvd25lciwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgKyBpbml0aWFsRXhwaXJhdGlvbiksIAorICAgICAgICAgICAgVGltZXJCZWFuLnRlc3RDcmVhdGUodGltZXJJZCwgY29udGV4dCwgb3duZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgKyBpbml0aWFsRXhwaXJhdGlvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnZhbER1cmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpAQCAtOTcsNyArOTcsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIG1pZ3JhdGVUaW1lcnNGcm9tKFN0cmluZyBvd25lcikgewotICAgICAgICAKKwogICAgICAgICBUaW1lckJlYW4udGVzdE1pZ3JhdGUob3duZXIpOwogCiAgICAgfQpAQCAtMTE1LDMxICsxMTUsMzEgQEAKIAogICAgIC8vIHRpbWVyIGNhbGxiYWNrIG1ldGhvZAogICAgIHB1YmxpYyB2b2lkIGVqYlRpbWVvdXQoVGltZXIgdGltZXIpIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGluZm8gPSAoU3RyaW5nKSB0aW1lci5nZXRJbmZvKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGVqYlRpbWVvdXQgZm9yIHRpbWVyICIgKyBpbmZvKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBnZXRNZXNzYWdlQ29udGV4dCIpOwogICAgICAgICAgICAgY29udGV4dC5nZXRNZXNzYWdlQ29udGV4dCgpOwogICAgICAgICB9IGNhdGNoKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpc2UpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0TWVzc2FnZUNvbnRleHQoKSBzdWNjZXNzZnVsbHkgdGhyZXcgaWxsZWdhbFN0YXRlRXhjZXB0aW9uIik7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy8gYWRkIG1lc3NhZ2UgdG8gcXVldWUKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgCisKKwogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNGYWN0b3J5ID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpCiAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9NeVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkiKTsKICAgICAgICAgICAgIFF1ZXVlIHF1ZXVlID0gKFF1ZXVlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL015UXVldWUiKTsKICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBxY0ZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLmNyZWF0ZVF1ZXVlU2Vzc2lvbih0cnVlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwogICAgICAgICAgICAgc2VuZGVyICA9IHNlc3Npb24uY3JlYXRlU2VuZGVyKHF1ZXVlKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBUZXh0TWVzc2FnZSBtZXNzYWdlID0gc2Vzc2lvbi5jcmVhdGVUZXh0TWVzc2FnZSgpOwogICAgICAgICAgICAgbWVzc2FnZS5zZXRUZXh0KGluZm8pOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIHRpbWUgb3V0IG1lc3NhZ2UiKTsKQEAgLTE2MSw3ICsxNjEsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3RpbWVyL2VqYi9UaW1lclNlc3Npb25Ib21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC90aW1lci9lamIvVGltZXJTZXNzaW9uSG9tZS5qYXZhCmluZGV4IDA5N2EwZTAuLmIxNzEyZTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3RpbWVyL2VqYi9UaW1lclNlc3Npb25Ib21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvdGltZXIvZWpiL1RpbWVyU2Vzc2lvbkhvbWUuamF2YQpAQCAtMjEsNSArMjEsNSBAQAogaW1wb3J0IGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKIAogcHVibGljIGludGVyZmFjZSBUaW1lclNlc3Npb25Ib21lIGV4dGVuZHMgRUpCSG9tZSB7Ci0JVGltZXJTZXNzaW9uIGNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICBUaW1lclNlc3Npb24gY3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvd2ViZWFyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvYnVpbGQucHJvcGVydGllcwppbmRleCBlMmNjNzVkLi5kYzE5YzliIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTYgKzE1LDE2IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXN1YmNsYXNzaW5nIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zdWJjbGFzc2luZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0ic3ViY2xhc3NpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvYnVpbGQueG1sCmluZGV4IGI3NjkxY2YuLjMyOTIzOWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvd2ViZWFyL2J1aWxkLnhtbApAQCAtMzAsMTQgKzMwLDE0IEBACiAgICAgJmNvbW1vbkJ1aWxkOwogICAgICZjb21tb25sYXp5aW5pdDsKICAgICAmdGVzdHByb3BlcnRpZXM7Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0icHJlLXN0YXJ0LGJ1aWxkLHNldHVwLGRlcGxveS1lYXIsIHJ1bi1lYXIsIHVuZGVwbG95LWVhciwgdW5zZXR1cCIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LWVhciwgcnVuLWVhciwgdW5kZXBsb3ktZWFyIi8+CiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL3NpbXBsZUJhbmsuc3FsIi8+CkBAIC00NSw5ICs0NSw5IEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamRiYy1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJlamItc3ViY2xhc3NpbmctcG9vbCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9lamItc3ViY2xhc3NpbmciLz4KLSAgICA8L2FudGNhbGw+ICAgIAorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcEJhbmtUYWJsZXMuc3FsIi8+CkBAIC01OCw3ICs1OCw3IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2VqYi1zdWJjbGFzc2luZyIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNjksMTggKzY5LDE4IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICA8L2FudGNhbGw+Ci0gICAgICAgCisKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS12ZXJpZnktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC04OCwyNyArODgsMjcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS13YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4td2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViY2xpZW50LWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9IndlYi10by1lamIgKHN0YW5kLWFsb25lIHdhciBiYXNlZCkiLz4KLQk8L2FudGNhbGw+CisgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9IndlYi10by1lamIgKHN0YW5kLWFsb25lIHdhciBiYXNlZCkiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlciIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tZWpiIChlYXIgYmFzZWQpIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tZWpiIChlYXIgYmFzZWQpIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS13YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCA3ZDg2YWY1Li4zOWNiYTg4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvd2ViZWFyL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yOSwyMCArMjksMjAgQEAKICAgICAgICAgPHJlcy1yZWYtbmFtZT5qZGJjL1NpbXBsZUJhbms8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qZGJjL2VqYi1zdWJjbGFzc2luZzwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPiAKLSAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+IAotICAgICA8YmVhbi1wb29sPiAKLSAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+IAotICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+IAotICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+IAotICAgICAgICAgPHBvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4gCi0gICAgICA8L2JlYW4tcG9vbD4gCi0gICAgICA8YmVhbi1jYWNoZT4gCi0gICAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+IAotICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkxSVTwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+IAotICAgICAgPC9iZWFuLWNhY2hlPiAKKyAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+CisgICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPgorICAgICA8YmVhbi1wb29sPgorICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+CisgICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgPC9iZWFuLXBvb2w+CisgICAgICA8YmVhbi1jYWNoZT4KKyAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4KKyAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4KKyAgICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KICAgICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPkN1c3RvbWVyQ2hlY2tpbmdFSkI8L2VqYi1uYW1lPgpAQCAtNTEsMjAgKzUxLDIwIEBACiAgICAgICAgIDxyZXMtcmVmLW5hbWU+amRiYy9TaW1wbGVCYW5rPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9lamItc3ViY2xhc3Npbmc8L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4gCi0gICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPiAKLSAgICAgPGJlYW4tcG9vbD4gCi0gICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPiAKLSAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PiAKLSAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPiAKKyAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+CisgICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPgorICAgICA8YmVhbi1wb29sPgorICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+CiAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+Ci0gICAgICA8L2JlYW4tcG9vbD4gCi0gICAgICA8YmVhbi1jYWNoZT4gCisgICAgICA8L2JlYW4tcG9vbD4KKyAgICAgIDxiZWFuLWNhY2hlPgogICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPgogICAgICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgogICAgICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgotICAgICAgPC9iZWFuLWNhY2hlPiAKKyAgICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgogPC9zdW4tZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9lamIvQ3VzdG9tZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9lamIvQ3VzdG9tZXIuamF2YQppbmRleCBkMTkwZGFiLi5kMWZiMjg2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvZWpiL0N1c3RvbWVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvd2ViZWFyL2VqYi9DdXN0b21lci5qYXZhCkBAIC00Niw0ICs0Niw0IEBACiAKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvd2ViZWFyL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YQppbmRleCBjNjA3ODEyLi5lMzY1OWU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YQpAQCAtMjIsNCArMjIsNCBAQAogewogfQogCi0gIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhCmluZGV4IDRjNjAxNzkuLmQ5M2ZkYTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhCkBAIC05NCw1ICs5NCw1IEBACiAgIH0KIAogfQotICAgIAotICAgIAorCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9lamIvQ3VzdG9tZXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9lamIvQ3VzdG9tZXJFSkIuamF2YQppbmRleCBlYzU2NDgxLi43NWE4ZWJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvZWpiL0N1c3RvbWVyRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvd2ViZWFyL2VqYi9DdXN0b21lckVKQi5qYXZhCkBAIC01Myw3ICs1Myw3IEBACiAKICAgcHVibGljIFN0cmluZyBnZXRBZGRyZXNzMSgpCiAgIHsKLSAgICByZXR1cm4gYWRkcmVzczE7IAorICAgIHJldHVybiBhZGRyZXNzMTsKICAgfQogCiAgIHB1YmxpYyBTdHJpbmcgZ2V0QWRkcmVzczIoKQpAQCAtMTM5LDcgKzEzOSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1FMIGV4Y2VwdGlvbiBvY2N1cmVkIGluIGVqYlJlbW92ZSBtZXRob2QiKTsKICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgIH0KLSAgICAKKwogICB9CiAKICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKQpAQCAtMjA2LDEyICsyMDYsMTIgQEAKICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgewogICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTUUxFeGNlcHRpb24gb2NjdXJyZWQgaW4gZWpiTG9hZCgpIG1ldGhvZCIpOwogICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9ICAgCisgICAgfQogICB9CiAKICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQogICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogfQotICAgICAgCi0gICAgCi0gICAgCisKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvd2ViZWFyL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YQppbmRleCBlZWEzMTkyLi43YzBhZTZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEKQEAgLTIyLDQgKzIyLDQgQEAKIHsKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvd2ViZWFyL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEKaW5kZXggZmI4NzE5NS4uNjkxZWE0ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvd2ViZWFyL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhCkBAIC05NSw2ICs5NSw2IEBACiAgIH0KIAogfQotICAgICAgCi0gICAgCi0gICAgCisKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvc2FtcGxlcy9lamIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvc2FtcGxlcy9lamIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyLmphdmEKaW5kZXggMGIyYmNkZS4uMzM5MDNlMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvd2ViZWFyL3NhbXBsZXMvZWpiL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9zYW1wbGVzL2VqYi9zdWJjbGFzc2luZy9lamIvQ3VzdG9tZXIuamF2YQpAQCAtNDAsNCArNDAsNCBAQAogCiB9CiAKLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9zYW1wbGVzL2VqYi9zdWJjbGFzc2luZy9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvd2ViZWFyL3NhbXBsZXMvZWpiL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKaW5kZXggOGExYTM5ZC4uYjhkNmZiNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvd2ViZWFyL3NhbXBsZXMvZWpiL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvd2ViZWFyL3NhbXBsZXMvZWpiL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKQEAgLTE2LDQgKzE2LDQgQEAKIHsKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvd2ViZWFyL3NhbXBsZXMvZWpiL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvc2FtcGxlcy9lamIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQppbmRleCAwOTgxNmRkLi5hYmNjMzM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvc2FtcGxlcy9lamIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvc2FtcGxlcy9lamIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQpAQCAtODgsNSArODgsNSBAQAogICB9CiAKIH0KLSAgICAKLSAgICAKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvc2FtcGxlcy9lamIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvc2FtcGxlcy9lamIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyRUpCLmphdmEKaW5kZXggNDQzMzlkNS4uNjU2OWNjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvd2ViZWFyL3NhbXBsZXMvZWpiL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9zYW1wbGVzL2VqYi9zdWJjbGFzc2luZy9lamIvQ3VzdG9tZXJFSkIuamF2YQpAQCAtNDcsNyArNDcsNyBAQAogCiAgIHB1YmxpYyBTdHJpbmcgZ2V0QWRkcmVzczEoKQogICB7Ci0gICAgcmV0dXJuIGFkZHJlc3MxOyAKKyAgICByZXR1cm4gYWRkcmVzczE7CiAgIH0KIAogICBwdWJsaWMgU3RyaW5nIGdldEFkZHJlc3MyKCkKQEAgLTEzMyw3ICsxMzMsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNRTCBleGNlcHRpb24gb2NjdXJlZCBpbiBlamJSZW1vdmUgbWV0aG9kIik7CiAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICB9Ci0gICAgCisKICAgfQogCiAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkKQEAgLTIwMCwxMiArMjAwLDEyIEBACiAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1FMRXhjZXB0aW9uIG9jY3VycmVkIGluIGVqYkxvYWQoKSBtZXRob2QiKTsKICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfSAgIAorICAgIH0KICAgfQogCiAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIH0KLSAgICAgIAotICAgIAotICAgIAorCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvd2ViZWFyL3NhbXBsZXMvZWpiL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9zYW1wbGVzL2VqYi9zdWJjbGFzc2luZy9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEKaW5kZXggZDI3ZDk5Yy4uYmNjMjUzOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvd2ViZWFyL3NhbXBsZXMvZWpiL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvc2FtcGxlcy9lamIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhCkBAIC0xNiw0ICsxNiw0IEBACiB7CiB9CiAKLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9zYW1wbGVzL2VqYi9zdWJjbGFzc2luZy9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvc2FtcGxlcy9lamIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhCmluZGV4IGYzYmNhYTguLmMyM2JkZDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9zYW1wbGVzL2VqYi9zdWJjbGFzc2luZy9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvd2ViZWFyL3NhbXBsZXMvZWpiL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YQpAQCAtODksNiArODksNiBAQAogICB9CiAKIH0KLSAgICAgIAotICAgIAotICAgIAorCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvd2ViZWFyL3NhbXBsZXMvZWpiL3N1YmNsYXNzaW5nL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9zYW1wbGVzL2VqYi9zdWJjbGFzc2luZy9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEKaW5kZXggMDU5OTQzZS4uNzQ3MDA5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvd2ViZWFyL3NhbXBsZXMvZWpiL3N1YmNsYXNzaW5nL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvc2FtcGxlcy9lamIvc3ViY2xhc3Npbmcvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhCkBAIC0xMSwxNiArMTEsMTYgQEAKIHBhY2thZ2Ugc2FtcGxlcy5lamIuc3ViY2xhc3Npbmcuc2VydmxldDsKIAogaW1wb3J0IGphdmEuaW8uKjsKLWltcG9ydCBqYXZhLnV0aWwuKjsgCi1pbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7IAotaW1wb3J0IGphdmF4Lm5hbWluZy4qOyAKLWltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOyAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsKK2ltcG9ydCBqYXZheC5uYW1pbmcuKjsKK2ltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogaW1wb3J0IGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdDsKLWltcG9ydCBqYWthcnRhLmVqYi4qOyAKK2ltcG9ydCBqYWthcnRhLmVqYi4qOwogCi1pbXBvcnQgc2FtcGxlcy5lamIuc3ViY2xhc3NpbmcuZWpiLio7IAoraW1wb3J0IHNhbXBsZXMuZWpiLnN1YmNsYXNzaW5nLmVqYi4qOwogCi1wdWJsaWMgY2xhc3MgU2ltcGxlQmFua1NlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7ICAKK3B1YmxpYyBjbGFzcyBTaW1wbGVCYW5rU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogCiAgIEluaXRpYWxDb250ZXh0IGluaXRDb250ZXh0ID0gbnVsbDsKQEAgLTM3LDE0ICszNywxNCBAQAogICAgIGRvTG9va3VwKCk7CiAgIH0KIAotICBwdWJsaWMgdm9pZCBkb0dldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgCi0gICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7IAorICBwdWJsaWMgdm9pZCBkb0dldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKKyAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwotICB9ICAKKyAgfQogCi0gIC8qKiBoYW5kbGVzIHRoZSBIVFRQIFBPU1Qgb3BlcmF0aW9uICoqLyAKLSAgcHVibGljIHZvaWQgZG9Qb3N0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSAKLSAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgCisgIC8qKiBoYW5kbGVzIHRoZSBIVFRQIFBPU1Qgb3BlcmF0aW9uICoqLworICBwdWJsaWMgdm9pZCBkb1Bvc3QgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCisgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTaW1wbGVCYW5rU2VydmxldCBpcyBleGVjdXRpbmciKTsKICAgICBTdHJpbmcgU1NOID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoIlNTTiIpOwogCkBAIC01OSwxNCArNTksMTQgQEAKICAgICBTdHJpbmcgemlwQ29kZSA9ICIiOwogICAgIGxvbmcgY3VycmVudFNhdmluZ3NCYWxhbmNlID0gMDsKICAgICBsb25nIGN1cnJlbnRDaGVja2luZ0JhbGFuY2UgPSAwOwotICAgICAKKwogICAgIFN0cmluZyBhY3Rpb24gPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiYWN0aW9uIik7CiAgICAgaWYgKGFjdGlvbi5lcXVhbHMoIkNyZWF0ZSIpKQogICAgIHsKICAgICAgIG1lc3NhZ2UgPSAiQWRkIEN1c3RvbWVyIjsKICAgICAgIGpzcCA9ICIvU2ltcGxlQmFua0FkZC5qc3AiOwogICAgIH0KLSAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJBZGQgQ3VzdG9tZXIiKSkgCisgICAgZWxzZSBpZiAoYWN0aW9uLmVxdWFscygiQWRkIEN1c3RvbWVyIikpCiAgICAgewogICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZGQgQ3VzdG9tZXIgYnV0dG9uIHByZXNzZWQiKTsKICAgICAgIFNTTiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJTU04iKTsKQEAgLTEyMSw3ICsxMjEsNyBAQAogICAgICAgfQogICAgICAgbWVzc2FnZSA9ICJDdXN0b21lciBEZWxldGVkLiI7CiAgICAgICBqc3AgPSAiL1NpbXBsZUJhbmtNZXNzYWdlLmpzcCI7Ci0gICAgfSAgCisgICAgfQogCiAKICAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJVcGRhdGUiKSkKQEAgLTE5OCw3ICsxOTgsNyBAQAogICAgIFJlcXVlc3REaXNwYXRjaGVyIGRpc3BhdGNoZXIgPSBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldFJlcXVlc3REaXNwYXRjaGVyKGpzcCk7CiAgICAgZGlzcGF0Y2hlci5pbmNsdWRlKHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICByZXR1cm47Ci0gIH0gCisgIH0KIAogICBwdWJsaWMgdm9pZCBkb0xvb2t1cCgpCiAgIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhCmluZGV4IDA5MTk1MTQuLjA3MGQ1ZmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvd2ViZWFyL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YQpAQCAtMTcsMTYgKzE3LDE2IEBACiBwYWNrYWdlIHNhbXBsZXMuZWpiLnN1YmNsYXNzaW5nLnNlcnZsZXQ7CiAKIGltcG9ydCBqYXZhLmlvLio7Ci1pbXBvcnQgamF2YS51dGlsLio7IAotaW1wb3J0IGpha2FydGEuc2VydmxldC4qOyAKLWltcG9ydCBqYXZheC5uYW1pbmcuKjsgCi1pbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsgCitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7CitpbXBvcnQgamF2YXgubmFtaW5nLio7CitpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIGltcG9ydCBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3Q7Ci1pbXBvcnQgamFrYXJ0YS5lamIuKjsgCitpbXBvcnQgamFrYXJ0YS5lamIuKjsKIAotaW1wb3J0IHNhbXBsZXMuZWpiLnN1YmNsYXNzaW5nLmVqYi4qOyAKK2ltcG9ydCBzYW1wbGVzLmVqYi5zdWJjbGFzc2luZy5lamIuKjsKIAotcHVibGljIGNsYXNzIFNpbXBsZUJhbmtTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgeyAgCitwdWJsaWMgY2xhc3MgU2ltcGxlQmFua1NlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKIAogICBJbml0aWFsQ29udGV4dCBpbml0Q29udGV4dCA9IG51bGw7CkBAIC00MywxNCArNDMsMTQgQEAKICAgICBkb0xvb2t1cCgpOwogICB9CiAKLSAgcHVibGljIHZvaWQgZG9HZXQgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIAotICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAKKyAgcHVibGljIHZvaWQgZG9HZXQgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCisgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgfSAgCisgIH0KIAotICAvKiogaGFuZGxlcyB0aGUgSFRUUCBQT1NUIG9wZXJhdGlvbiAqKi8gCi0gIHB1YmxpYyB2b2lkIGRvUG9zdCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgCi0gICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7IAorICAvKiogaGFuZGxlcyB0aGUgSFRUUCBQT1NUIG9wZXJhdGlvbiAqKi8KKyAgcHVibGljIHZvaWQgZG9Qb3N0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQorICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2ltcGxlQmFua1NlcnZsZXQgaXMgZXhlY3V0aW5nIik7CiAgICAgU3RyaW5nIFNTTiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJTU04iKTsKIApAQCAtNjUsMTQgKzY1LDE0IEBACiAgICAgU3RyaW5nIHppcENvZGUgPSAiIjsKICAgICBsb25nIGN1cnJlbnRTYXZpbmdzQmFsYW5jZSA9IDA7CiAgICAgbG9uZyBjdXJyZW50Q2hlY2tpbmdCYWxhbmNlID0gMDsKLSAgICAgCisKICAgICBTdHJpbmcgYWN0aW9uID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoImFjdGlvbiIpOwogICAgIGlmIChhY3Rpb24uZXF1YWxzKCJDcmVhdGUiKSkKICAgICB7CiAgICAgICBtZXNzYWdlID0gIkFkZCBDdXN0b21lciI7CiAgICAgICBqc3AgPSAiL1NpbXBsZUJhbmtBZGQuanNwIjsKICAgICB9Ci0gICAgZWxzZSBpZiAoYWN0aW9uLmVxdWFscygiQWRkIEN1c3RvbWVyIikpIAorICAgIGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoIkFkZCBDdXN0b21lciIpKQogICAgIHsKICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWRkIEN1c3RvbWVyIGJ1dHRvbiBwcmVzc2VkIik7CiAgICAgICBTU04gPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiU1NOIik7CkBAIC0xMjcsNyArMTI3LDcgQEAKICAgICAgIH0KICAgICAgIG1lc3NhZ2UgPSAiQ3VzdG9tZXIgRGVsZXRlZC4iOwogICAgICAganNwID0gIi9TaW1wbGVCYW5rTWVzc2FnZS5qc3AiOwotICAgIH0gIAorICAgIH0KIAogCiAgICAgZWxzZSBpZiAoYWN0aW9uLmVxdWFscygiVXBkYXRlIikpCkBAIC0yMDQsNyArMjA0LDcgQEAKICAgICBSZXF1ZXN0RGlzcGF0Y2hlciBkaXNwYXRjaGVyID0gZ2V0U2VydmxldENvbnRleHQoKS5nZXRSZXF1ZXN0RGlzcGF0Y2hlcihqc3ApOwogICAgIGRpc3BhdGNoZXIuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgcmV0dXJuOwotICB9IAorICB9CiAKICAgcHVibGljIHZvaWQgZG9Mb29rdXAoKQogICB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCmluZGV4IGRmOWRmMzQuLjMzYTcwNjkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCkBAIC0xICsxIEBACi1kcm9wIHRhYmxlIGN1c3RvbWVyMjsNCitkcm9wIHRhYmxlIGN1c3RvbWVyMjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9zcWwvc2ltcGxlQmFuay5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvc3FsL3NpbXBsZUJhbmsuc3FsCmluZGV4IDZlZjc1YzMuLmUxN2FlZjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9zcWwvc2ltcGxlQmFuay5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvd2ViZWFyL3NxbC9zaW1wbGVCYW5rLnNxbApAQCAtMSwxNCArMSwxNCBAQAogZHJvcCB0YWJsZSBjdXN0b21lcjI7CiAKIGNyZWF0ZSB0YWJsZSBjdXN0b21lcjIgKAotICBTU04gdmFyY2hhcjIoOSksIAotICBsYXN0TkFtZSB2YXJjaGFyMigyMCksIAotICBmaXJzdG5hbWUgdmFyY2hhcjIoMjApLCAKLSAgYWRkcmVzczEgdmFyY2hhcjIgKDIwKSwgCi0gIGFkZHJlc3MyIHZhcmNoYXIyKDIwKSwgCi0gIGNpdHkgdmFyY2hhcjIoMTApLCAKLSAgc3RhdGUgdmFyY2hhcjIoMTApLCAKLSAgemlwY29kZSB2YXJjaGFyMig1KSwgCisgIFNTTiB2YXJjaGFyMig5KSwKKyAgbGFzdE5BbWUgdmFyY2hhcjIoMjApLAorICBmaXJzdG5hbWUgdmFyY2hhcjIoMjApLAorICBhZGRyZXNzMSB2YXJjaGFyMiAoMjApLAorICBhZGRyZXNzMiB2YXJjaGFyMigyMCksCisgIGNpdHkgdmFyY2hhcjIoMTApLAorICBzdGF0ZSB2YXJjaGFyMigxMCksCisgIHppcGNvZGUgdmFyY2hhcjIoNSksCiAgIHNhdmluZ3NiYWxhbmNlIG51bWJlcigxMCkgLAogICBjaGVja2luZ2JhbGFuY2UgbnVtYmVyKDEwKSApOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbGF6eUluaXQvd2ViZWFyL3N1bi1lamItamFyLnhtbAppbmRleCBlMGFkMDg4Li4wZDI4NDdhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9sYXp5SW5pdC93ZWJlYXIvc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2xhenlJbml0L3dlYmVhci9zdW4tZWpiLWphci54bWwKQEAgLTI5LDIwICsyOSwyMCBAQAogICAgICAgICA8cmVzLXJlZi1uYW1lPmpkYmMvU2ltcGxlQmFuazwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmpkYmMvZWpiLXN1YmNsYXNzaW5nPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+IAotICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4gCi0gICAgIDxiZWFuLXBvb2w+IAotICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4gCi0gICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgIDwvYmVhbi1wb29sPiAKLSAgICAgIDxiZWFuLWNhY2hlPiAKLSAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4gCi0gICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4gCi0gICAgICA8L2JlYW4tY2FjaGU+IAorICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4KKyAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+CisgICAgIDxiZWFuLXBvb2w+CisgICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPgorICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+CisgICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICA8L2JlYW4tcG9vbD4KKyAgICAgIDxiZWFuLWNhY2hlPgorICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPgorICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgorICAgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogICAgIDxlamI+CiAgICAgICA8ZWpiLW5hbWU+Q3VzdG9tZXJDaGVja2luZ0VKQjwvZWpiLW5hbWU+CkBAIC01MSwyMCArNTEsMjAgQEAKICAgICAgICAgPHJlcy1yZWYtbmFtZT5qZGJjL1NpbXBsZUJhbms8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qZGJjL2VqYi1zdWJjbGFzc2luZzwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPiAKLSAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+IAotICAgICA8YmVhbi1wb29sPiAKLSAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+IAotICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+IAotICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+IAorICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4KKyAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+CisgICAgIDxiZWFuLXBvb2w+CisgICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPgorICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+CisgICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4KICAgICAgICAgPHBvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KLSAgICAgIDwvYmVhbi1wb29sPiAKLSAgICAgIDxiZWFuLWNhY2hlPiAKKyAgICAgIDwvYmVhbi1wb29sPgorICAgICAgPGJlYW4tY2FjaGU+CiAgICAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+CiAgICAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KICAgICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkxSVTwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+Ci0gICAgICA8L2JlYW4tY2FjaGU+IAorICAgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogICA8L2VudGVycHJpc2UtYmVhbnM+CiA8L3N1bi1lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UtYW5ub3RhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS1hbm5vdGF0aW9uL2J1aWxkLnhtbAppbmRleCBiZTIxMWQ3Li5mZGJjMjgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS1hbm5vdGF0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS1hbm5vdGF0aW9uL2J1aWxkLnhtbApAQCAtMzksMTAgKzM5LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgcmVhZG9ubHkgKEV4ZWN1dGVzIHRoZSBlamItY21wLXJlYWRvbmx5IHRlc3QpCi0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1jbXAgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCByZWFkb25seSAoRXhlY3V0ZXMgdGhlIGVqYi1jbXAtcmVhZG9ubHkgdGVzdCkKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWNtcCB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS1hbm5vdGF0aW9uL2VqYjMwL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS1hbm5vdGF0aW9uL2VqYjMwL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzMxMGJiMC4uZmE2Y2Q4ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UtYW5ub3RhdGlvbi9lamIzMC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlLWFubm90YXRpb24vZWpiMzAvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjMgKzE1LDIzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJwZXJzaXN0ZW5jZS1hbm5vdGF0aW9uLWVqYjMwIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InBlcnNpc3RlbmNlLW9ybS54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3BlcnNpc3RlbmNlLW9ybS54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImRic2NoZW1hIiB2YWx1ZT0ic3FsL3BlcnNpc3RlbmNlLWFubm90YXRpb24tZWpiMzBBcHBfcGVyc2lzdGVuY2UtYW5ub3RhdGlvbi1lamIzMC1lamIuZGJzY2hlbWEiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlLWFubm90YXRpb24vZWpiMzAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UtYW5ub3RhdGlvbi9lamIzMC9idWlsZC54bWwKaW5kZXggOGFhZjUzZS4uNjQ4ZjQ3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UtYW5ub3RhdGlvbi9lamIzMC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UtYW5ub3RhdGlvbi9lamIzMC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MsKiovKi5kYnNjaGVtYSIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYxLDEwICs2MSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS1hbm5vdGF0aW9uL2VqYjMwL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlLWFubm90YXRpb24vZWpiMzAvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGRiYTM3NzAuLjZlOGI3M2YgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlLWFubm90YXRpb24vZWpiMzAvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlLWFubm90YXRpb24vZWpiMzAvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zMywxMSArMzMsMTEgQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1lamIzMC1oZWxsby1zZXNzaW9uSUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBTZnVsIHNmdWw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBTbGVzcyBzbGVzczsKIApAQCAtNTksOCArNTksOCBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS1hbm5vdGF0aW9uL2VqYjMwL2VqYi9BZGRyZXNzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS1hbm5vdGF0aW9uL2VqYjMwL2VqYi9BZGRyZXNzLmphdmEKaW5kZXggZjhiZjVkYy4uNDM2NTk3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UtYW5ub3RhdGlvbi9lamIzMC9lamIvQWRkcmVzcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlLWFubm90YXRpb24vZWpiMzAvZWpiL0FkZHJlc3MuamF2YQpAQCAtMzAsMjcgKzMwLDI3IEBACiAgKgogICogQGF1dGhvciBzczE0MTIxMwogICovCi1ARW50aXR5IAotcHVibGljIGNsYXNzIEFkZHJlc3MgeyAKLSAgICBwcml2YXRlIExvbmcgaWQ7IAotICAgIHByaXZhdGUgaW50IHZlcnNpb247IAotICAgIHByaXZhdGUgU3RyaW5nIHN0cmVldDsgCi0gICAgQElkKGdlbmVyYXRlPUFVVE8pIHB1YmxpYyBMb25nIGdldElkKCkgeyAKLSAgICAgICAgcmV0dXJuIGlkOyAKLSAgICB9IAotICAgIHB1YmxpYyB2b2lkIHNldElkKExvbmcgaWQpIHsgCi0gICAgICAgIHRoaXMuaWQgPSBpZDsgCi0gICAgfSAKLSAgICBAVmVyc2lvbiBwcm90ZWN0ZWQgaW50IGdldFZlcnNpb24oKSB7IAotICAgICAgICByZXR1cm4gdmVyc2lvbjsgCi0gICAgfSAKLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRWZXJzaW9uKGludCB2ZXJzaW9uKSB7IAotICAgICAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uOyAKLSAgICB9IAotICAgIEBCYXNpYyBwdWJsaWMgU3RyaW5nIGdldFN0cmVldCgpIHsgCi0gICAgICAgIHJldHVybiBzdHJlZXQ7IAotICAgIH0gCi0gICAgcHVibGljIHZvaWQgc2V0U3RyZWV0KFN0cmluZyBzdHJlZXQpIHsgCi0gICAgICAgIHRoaXMuc3RyZWV0ID0gc3RyZWV0OyAKLSAgICB9IAorQEVudGl0eQorcHVibGljIGNsYXNzIEFkZHJlc3MgeworICAgIHByaXZhdGUgTG9uZyBpZDsKKyAgICBwcml2YXRlIGludCB2ZXJzaW9uOworICAgIHByaXZhdGUgU3RyaW5nIHN0cmVldDsKKyAgICBASWQoZ2VuZXJhdGU9QVVUTykgcHVibGljIExvbmcgZ2V0SWQoKSB7CisgICAgICAgIHJldHVybiBpZDsKKyAgICB9CisgICAgcHVibGljIHZvaWQgc2V0SWQoTG9uZyBpZCkgeworICAgICAgICB0aGlzLmlkID0gaWQ7CisgICAgfQorICAgIEBWZXJzaW9uIHByb3RlY3RlZCBpbnQgZ2V0VmVyc2lvbigpIHsKKyAgICAgICAgcmV0dXJuIHZlcnNpb247CisgICAgfQorICAgIHByb3RlY3RlZCB2b2lkIHNldFZlcnNpb24oaW50IHZlcnNpb24pIHsKKyAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKKyAgICB9CisgICAgQEJhc2ljIHB1YmxpYyBTdHJpbmcgZ2V0U3RyZWV0KCkgeworICAgICAgICByZXR1cm4gc3RyZWV0OworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBzZXRTdHJlZXQoU3RyaW5nIHN0cmVldCkgeworICAgICAgICB0aGlzLnN0cmVldCA9IHN0cmVldDsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS1hbm5vdGF0aW9uL2VqYjMwL2VqYi9DdXN0b21lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UtYW5ub3RhdGlvbi9lamIzMC9lamIvQ3VzdG9tZXIuamF2YQppbmRleCA2NGUyNmVhLi43ZGJhMGMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS1hbm5vdGF0aW9uL2VqYjMwL2VqYi9DdXN0b21lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlLWFubm90YXRpb24vZWpiMzAvZWpiL0N1c3RvbWVyLmphdmEKQEAgLTM0LDE0ICszNCwxNCBAQAogICogQGF1dGhvciBzczE0MTIxMwogICovCiBARW50aXR5KGFjY2Vzcz1GSUVMRCkKLXB1YmxpYyBjbGFzcyBDdXN0b21lciB7IAotICAgIEBJZChnZW5lcmF0ZT1BVVRPKSAKLSAgICBwcm90ZWN0ZWQgTG9uZyBpZDsgCi0gICAgQFZlcnNpb24gcHJvdGVjdGVkIGludCB2ZXJzaW9uOyAKK3B1YmxpYyBjbGFzcyBDdXN0b21lciB7CisgICAgQElkKGdlbmVyYXRlPUFVVE8pCisgICAgcHJvdGVjdGVkIExvbmcgaWQ7CisgICAgQFZlcnNpb24gcHJvdGVjdGVkIGludCB2ZXJzaW9uOwogICAgIEBNYW55VG9PbmUgcHJvdGVjdGVkIEFkZHJlc3MgYWRkcmVzczsKLSAgICBAQmFzaWMgcHJvdGVjdGVkIFN0cmluZyBkZXNjcmlwdGlvbjsgCi0gICAgQE9uZVRvTWFueSh0YXJnZXRFbnRpdHk9ImNvbS5hY21lLk9yZGVyIiwgbWFwcGVkQnk9ImN1c3RvbWVyIikgCi0gICAgcHJvdGVjdGVkIENvbGxlY3Rpb24gb3JkZXJzID0gbmV3IFZlY3RvcigpOyAKLSAgICBATWFueVRvTWFueShtYXBwZWRCeT0iY3VzdG9tZXJzIikgCi0gICAgcHJvdGVjdGVkIFNldDxEZWxpdmVyeVNlcnZpY2U+IHNlcnZpY2VPcHRpb25zID0gbmV3IEhhc2hTZXQoKTsgCisgICAgQEJhc2ljIHByb3RlY3RlZCBTdHJpbmcgZGVzY3JpcHRpb247CisgICAgQE9uZVRvTWFueSh0YXJnZXRFbnRpdHk9ImNvbS5hY21lLk9yZGVyIiwgbWFwcGVkQnk9ImN1c3RvbWVyIikKKyAgICBwcm90ZWN0ZWQgQ29sbGVjdGlvbiBvcmRlcnMgPSBuZXcgVmVjdG9yKCk7CisgICAgQE1hbnlUb01hbnkobWFwcGVkQnk9ImN1c3RvbWVycyIpCisgICAgcHJvdGVjdGVkIFNldDxEZWxpdmVyeVNlcnZpY2U+IHNlcnZpY2VPcHRpb25zID0gbmV3IEhhc2hTZXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlLWFubm90YXRpb24vZWpiMzAvZWpiL0RlbGl2ZXJ5U2VydmljZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UtYW5ub3RhdGlvbi9lamIzMC9lamIvRGVsaXZlcnlTZXJ2aWNlLmphdmEKaW5kZXggNWY3NTJhNC4uZWY0MDNkOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UtYW5ub3RhdGlvbi9lamIzMC9lamIvRGVsaXZlcnlTZXJ2aWNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UtYW5ub3RhdGlvbi9lamIzMC9lamIvRGVsaXZlcnlTZXJ2aWNlLmphdmEKQEAgLTMwLDI5ICszMCwyOSBAQAogICoKICAqIEBhdXRob3Igc3MxNDEyMTMKICAqLwotQEVudGl0eSAKLXB1YmxpYyBjbGFzcyBEZWxpdmVyeVNlcnZpY2UgeyAKLSAgICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlTmFtZTsgCi0gICAgcHJpdmF0ZSBpbnQgcHJpY2VDYXRlZ29yeTsgCi0gICAgcHJpdmF0ZSBDb2xsZWN0aW9uIGN1c3RvbWVyczsgCi0gICAgQElkIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZU5hbWUoKSB7IAotICAgICAgICByZXR1cm4gc2VydmljZU5hbWU7IAotICAgIH0gCi0gICAgcHVibGljIHZvaWQgc2V0U2VydmljZU5hbWUoU3RyaW5nIHNlcnZpY2VOYW1lKSB7IAotICAgICAgICB0aGlzLnNlcnZpY2VOYW1lID0gc2VydmljZU5hbWU7IAotICAgIH0gCi0gICAgQEJhc2ljIHB1YmxpYyBpbnQgZ2V0UHJpY2VDYXRlZ29yeSgpIHsgCi0gICAgICAgIHJldHVybiBwcmljZUNhdGVnb3J5OyAKLSAgICB9IAotICAgIHB1YmxpYyB2b2lkIHNldFByaWNlQ2F0ZWdvcnkoaW50IHByaWNlQ2F0ZWdvcnkpIHsgCi0gICAgICAgIHRoaXMucHJpY2VDYXRlZ29yeSA9IHByaWNlQ2F0ZWdvcnk7IAotICAgIH0gCi0gICAgQE1hbnlUb01hbnkodGFyZ2V0RW50aXR5PSJjb20uYWNtZS5DdXN0b21lciIpIAorQEVudGl0eQorcHVibGljIGNsYXNzIERlbGl2ZXJ5U2VydmljZSB7CisgICAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZU5hbWU7CisgICAgcHJpdmF0ZSBpbnQgcHJpY2VDYXRlZ29yeTsKKyAgICBwcml2YXRlIENvbGxlY3Rpb24gY3VzdG9tZXJzOworICAgIEBJZCBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VOYW1lKCkgeworICAgICAgICByZXR1cm4gc2VydmljZU5hbWU7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VOYW1lKFN0cmluZyBzZXJ2aWNlTmFtZSkgeworICAgICAgICB0aGlzLnNlcnZpY2VOYW1lID0gc2VydmljZU5hbWU7CisgICAgfQorICAgIEBCYXNpYyBwdWJsaWMgaW50IGdldFByaWNlQ2F0ZWdvcnkoKSB7CisgICAgICAgIHJldHVybiBwcmljZUNhdGVnb3J5OworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBzZXRQcmljZUNhdGVnb3J5KGludCBwcmljZUNhdGVnb3J5KSB7CisgICAgICAgIHRoaXMucHJpY2VDYXRlZ29yeSA9IHByaWNlQ2F0ZWdvcnk7CisgICAgfQorICAgIEBNYW55VG9NYW55KHRhcmdldEVudGl0eT0iY29tLmFjbWUuQ3VzdG9tZXIiKQogICAgIEBBc3NvY2lhdGlvblRhYmxlKHRhYmxlPUBUYWJsZShzY2hlbWE9IlRFU1QxIikpCi0gICAgcHVibGljIENvbGxlY3Rpb24gZ2V0Q3VzdG9tZXJzKCkgeyAKLSAgICAgICAgcmV0dXJuIGN1c3RvbWVyczsgCi0gICAgfSAKLSAgICBwdWJsaWMgdm9pZCBzZXRDdXN0b21lcnMoQ29sbGVjdGlvbiBjdXN0b21lcnMpIHsgCi0gICAgICAgIHRoaXMuY3VzdG9tZXJzID0gY3VzdG9tZXJzOyAKLSAgICB9IAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGdldEN1c3RvbWVycygpIHsKKyAgICAgICAgcmV0dXJuIGN1c3RvbWVyczsKKyAgICB9CisgICAgcHVibGljIHZvaWQgc2V0Q3VzdG9tZXJzKENvbGxlY3Rpb24gY3VzdG9tZXJzKSB7CisgICAgICAgIHRoaXMuY3VzdG9tZXJzID0gY3VzdG9tZXJzOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlLWFubm90YXRpb24vZWpiMzAvZWpiL0VtcGxveW1lbnRQZXJpb2QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlLWFubm90YXRpb24vZWpiMzAvZWpiL0VtcGxveW1lbnRQZXJpb2QuamF2YQppbmRleCA3NjE2YzI0Li4zMWE2NWZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS1hbm5vdGF0aW9uL2VqYjMwL2VqYi9FbXBsb3ltZW50UGVyaW9kLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UtYW5ub3RhdGlvbi9lamIzMC9lamIvRW1wbG95bWVudFBlcmlvZC5qYXZhCkBAIC0zNiwxMiArMzYsMTIgQEAKICAqLwogQEVtYmVkZGFibGUKIHB1YmxpYyBjbGFzcyBFbXBsb3ltZW50UGVyaW9kIGltcGxlbWVudHMgU2VyaWFsaXphYmxlIHsKLQlwcml2YXRlIERhdGUgc3RhcnQ7IAotCXByaXZhdGUgRGF0ZSBlbmQ7IAotCUBCYXNpYwotCXB1YmxpYyBEYXRlIGdldFN0YXJ0RGF0ZSgpIHsgcmV0dXJuIHN0YXJ0OyB9IAotCXB1YmxpYyB2b2lkIHNldFN0YXJ0RGF0ZShEYXRlIHN0YXJ0KSB7IHRoaXMuc3RhcnQgPSBzdGFydDsgfSAKLQlAQmFzaWMKLQlwdWJsaWMgRGF0ZSBnZXRFbmREYXRlKCkgeyByZXR1cm4gZW5kOyB9IAotCXB1YmxpYyB2b2lkIHNldEVuZERhdGUoRGF0ZSBlbmQpIHsgdGhpcy5lbmQgPSBlbmQ7IH0gCisgICAgcHJpdmF0ZSBEYXRlIHN0YXJ0OworICAgIHByaXZhdGUgRGF0ZSBlbmQ7CisgICAgQEJhc2ljCisgICAgcHVibGljIERhdGUgZ2V0U3RhcnREYXRlKCkgeyByZXR1cm4gc3RhcnQ7IH0KKyAgICBwdWJsaWMgdm9pZCBzZXRTdGFydERhdGUoRGF0ZSBzdGFydCkgeyB0aGlzLnN0YXJ0ID0gc3RhcnQ7IH0KKyAgICBAQmFzaWMKKyAgICBwdWJsaWMgRGF0ZSBnZXRFbmREYXRlKCkgeyByZXR1cm4gZW5kOyB9CisgICAgcHVibGljIHZvaWQgc2V0RW5kRGF0ZShEYXRlIGVuZCkgeyB0aGlzLmVuZCA9IGVuZDsgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UtYW5ub3RhdGlvbi9lamIzMC9lamIvT3JkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlLWFubm90YXRpb24vZWpiMzAvZWpiL09yZGVyLmphdmEKaW5kZXggYzI4M2ViMi4uZjkwNjY2MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UtYW5ub3RhdGlvbi9lamIzMC9lamIvT3JkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS1hbm5vdGF0aW9uL2VqYjMwL2VqYi9PcmRlci5qYXZhCkBAIC0zOSwzNCArMzksMzQgQEAKICAgICBASWQoZ2VuZXJhdGU9QVVUTykKICAgICBwdWJsaWMgTG9uZyBnZXRJZCgpIHsKICAgICAgICAgcmV0dXJuIGlkOwotICAgIH0gCi0gICAgcHVibGljIHZvaWQgc2V0SWQoTG9uZyBpZCkgeyAKLSAgICAgICAgdGhpcy5pZCA9IGlkOyAKLSAgICB9IAotICAgIEBWZXJzaW9uIAotICAgIHByb3RlY3RlZCBpbnQgZ2V0VmVyc2lvbigpIHsgCi0gICAgICAgIHJldHVybiB2ZXJzaW9uOyAKLSAgICB9IAotICAgIHByb3RlY3RlZCB2b2lkIHNldFZlcnNpb24oaW50IHZlcnNpb24pIHsgCi0gICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247IAotICAgIH0gCi0gICAgQEJhc2ljIAotICAgIHB1YmxpYyBpbnQgZ2V0SXRlbUlkKCkgeyAKLSAgICAgICAgcmV0dXJuIGl0ZW1JZDsgCi0gICAgfSAKLSAgICBwdWJsaWMgdm9pZCBzZXRJdGVtSWQoaW50IGl0ZW1JZCkgeyAKLSAgICAgICAgdGhpcy5pdGVtSWQgPSBpdGVtSWQ7IAotICAgIH0gCi0gICAgQEJhc2ljIHB1YmxpYyBpbnQgZ2V0UXVhbnRpdHkoKSB7IAotICAgICAgICByZXR1cm4gcXVhbnRpdHk7IAotICAgIH0gCi0gICAgcHVibGljIHZvaWQgc2V0UXVhbnRpdHkoaW50IHF1YW50aXR5KSB7IAotICAgICAgICB0aGlzLnF1YW50aXR5ID0gcXVhbnRpdHk7IAotICAgIH0gCi0gICAgQE1hbnlUb09uZSBwdWJsaWMgQ3VzdG9tZXIgZ2V0Q3VzdG9tZXIoKSB7IAotICAgICAgICByZXR1cm4gY3VzdG9tZXI7IAotICAgIH0gCi0gICAgcHVibGljIHZvaWQgc2V0Q3VzdG9tZXIoQ3VzdG9tZXIgY3VzdCkgeyAKLSAgICAgICAgdGhpcy5jdXN0b21lciA9IGN1c3Q7IAotICAgIH0gCisgICAgfQorICAgIHB1YmxpYyB2b2lkIHNldElkKExvbmcgaWQpIHsKKyAgICAgICAgdGhpcy5pZCA9IGlkOworICAgIH0KKyAgICBAVmVyc2lvbgorICAgIHByb3RlY3RlZCBpbnQgZ2V0VmVyc2lvbigpIHsKKyAgICAgICAgcmV0dXJuIHZlcnNpb247CisgICAgfQorICAgIHByb3RlY3RlZCB2b2lkIHNldFZlcnNpb24oaW50IHZlcnNpb24pIHsKKyAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKKyAgICB9CisgICAgQEJhc2ljCisgICAgcHVibGljIGludCBnZXRJdGVtSWQoKSB7CisgICAgICAgIHJldHVybiBpdGVtSWQ7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIHNldEl0ZW1JZChpbnQgaXRlbUlkKSB7CisgICAgICAgIHRoaXMuaXRlbUlkID0gaXRlbUlkOworICAgIH0KKyAgICBAQmFzaWMgcHVibGljIGludCBnZXRRdWFudGl0eSgpIHsKKyAgICAgICAgcmV0dXJuIHF1YW50aXR5OworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBzZXRRdWFudGl0eShpbnQgcXVhbnRpdHkpIHsKKyAgICAgICAgdGhpcy5xdWFudGl0eSA9IHF1YW50aXR5OworICAgIH0KKyAgICBATWFueVRvT25lIHB1YmxpYyBDdXN0b21lciBnZXRDdXN0b21lcigpIHsKKyAgICAgICAgcmV0dXJuIGN1c3RvbWVyOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBzZXRDdXN0b21lcihDdXN0b21lciBjdXN0KSB7CisgICAgICAgIHRoaXMuY3VzdG9tZXIgPSBjdXN0OworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3JlcG9ydC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9yZXBvcnQueG1sCmluZGV4IDA4NGFiMWYuLjMyYjAxZTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3JlcG9ydC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcmVwb3J0LnhtbApAQCAtMjMsNyArMjMsNyBAQAogPHRhcmdldCBuYW1lPSJyZXBvcnQiPgogPGVjaG8gbWVzc2FnZT0iQ29tcGFyaW5nIHJlc3VsdHMgd2l0aCBleHBlY3RlZCByZXN1bHRzIi8+CiAKLSAKKwogICAgIDx4c2x0IHN0eWxlPSIke3N0eWxlc2hlZXR9IgogICAgICAgICAgICAgaW49IiR7eG1sZmlsZX0iIG91dD0iJHtodG1sZmlsZX0iCiAgICAgICAgICAgICBiYXNlZGlyPSIuIiBkZXN0ZGlyPSIuIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcmVzb3VyY2VzL21haWwtc2Vzc2lvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcmVzb3VyY2VzL21haWwtc2Vzc2lvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDEzNDdiYjYuLjUyYjM2OGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3Jlc291cmNlcy9tYWlsLXNlc3Npb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9yZXNvdXJjZXMvbWFpbC1zZXNzaW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIzICsxNSwyMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ibWFpbC1zZXNzaW9uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcmVzb3VyY2VzL21haWwtc2Vzc2lvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9yZXNvdXJjZXMvbWFpbC1zZXNzaW9uL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAyYTVkNjM3Li5jNzBjZGU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9yZXNvdXJjZXMvbWFpbC1zZXNzaW9uL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9yZXNvdXJjZXMvbWFpbC1zZXNzaW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzksOSArMzksOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQgPSAibmFtYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA9ICJuYW1hbi5tZWh0YUBvcmFjbGUuY29tIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7Ci0JCQkJIm1haWwuaW1hcC5jbGFzcz1jb20uc3VuLm1haWwuaW1hcC5JTUFQU3RvcmUiLAotCQkJCSJtYWlsLnNtdHAuY2xhc3M9Y29tLnN1bi5tYWlsLnNtdHAuU01UUFRyYW5zcG9ydCIKLQkJCX0KKyAgICAgICAgICAgICAgICAibWFpbC5pbWFwLmNsYXNzPWNvbS5zdW4ubWFpbC5pbWFwLklNQVBTdG9yZSIsCisgICAgICAgICAgICAgICAgIm1haWwuc210cC5jbGFzcz1jb20uc3VuLm1haWwuc210cC5TTVRQVHJhbnNwb3J0IgorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgQE1haWxTZXNzaW9uRGVmaW5pdGlvbihkZXNjcmlwdGlvbiA9ICJNYWlsIFNlc3Npb24gRGVzY3JpcHRpb24gMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gImphdmE6Y29tcC9lbnYvQXBwY2xpZW50X01haWxTZXNzaW9uIiwKQEAgLTUyLDkgKzUyLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkID0gIm5hbWFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSAibmFtYW4ubWVodGFAb3JhY2xlLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0gewotCQkJCSJtYWlsLmltYXAuY2xhc3M9Y29tLnN1bi5tYWlsLmltYXAuSU1BUFN0b3JlIiwKLQkJCQkibWFpbC5zbXRwLmNsYXNzPWNvbS5zdW4ubWFpbC5zbXRwLlNNVFBUcmFuc3BvcnQiCi0JCQl9CisgICAgICAgICAgICAgICAgIm1haWwuaW1hcC5jbGFzcz1jb20uc3VuLm1haWwuaW1hcC5JTUFQU3RvcmUiLAorICAgICAgICAgICAgICAgICJtYWlsLnNtdHAuY2xhc3M9Y29tLnN1bi5tYWlsLnNtdHAuU01UUFRyYW5zcG9ydCIKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgQE1haWxTZXNzaW9uRGVmaW5pdGlvbigKQEAgLTYzLDkgKzYzLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydFByb3RvY29sID0gIlNNVFAiLAogICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCA9ICJsb2NhbGhvc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHsKLQkJCQkibWFpbC5pbWFwLmNsYXNzPWNvbS5zdW4ubWFpbC5pbWFwLklNQVBTdG9yZSIsCi0JCQkJIm1haWwuc210cC5jbGFzcz1jb20uc3VuLm1haWwuc210cC5TTVRQVHJhbnNwb3J0IgotCQkJfQorICAgICAgICAgICAgICAgICJtYWlsLmltYXAuY2xhc3M9Y29tLnN1bi5tYWlsLmltYXAuSU1BUFN0b3JlIiwKKyAgICAgICAgICAgICAgICAibWFpbC5zbXRwLmNsYXNzPWNvbS5zdW4ubWFpbC5zbXRwLlNNVFBUcmFuc3BvcnQiCisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICBATWFpbFNlc3Npb25EZWZpbml0aW9uKGRlc2NyaXB0aW9uID0gIk1haWwgU2Vzc2lvbiBEZXNjcmlwdGlvbiAxIiwKICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTphcHAvbWFpbC9BcHBsaWNhdGlvbl9MZXZlbF9NYWlsU2Vzc2lvbl9PdmVycmlkZSIsCkBAIC03Niw5ICs3Niw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCA9ICJuYW1hbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tID0gIm5hbWFuLm1laHRhQG9yYWNsZS5jb20iLAogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHsKLQkJCQkibWFpbC5pbWFwLmNsYXNzPWNvbS5zdW4ubWFpbC5pbWFwLklNQVBTdG9yZSIsCi0JCQkJIm1haWwuc210cC5jbGFzcz1jb20uc3VuLm1haWwuc210cC5TTVRQVHJhbnNwb3J0IgotCQkJfQorICAgICAgICAgICAgICAgICJtYWlsLmltYXAuY2xhc3M9Y29tLnN1bi5tYWlsLmltYXAuSU1BUFN0b3JlIiwKKyAgICAgICAgICAgICAgICAibWFpbC5zbXRwLmNsYXNzPWNvbS5zdW4ubWFpbC5zbXRwLlNNVFBUcmFuc3BvcnQiCisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKQogICAgICAgICB9CiApCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9yZXNvdXJjZXMvbWFpbC1zZXNzaW9uL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3Jlc291cmNlcy9tYWlsLXNlc3Npb24vZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IDkyMDdlNTcuLjI3YzYxM2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3Jlc291cmNlcy9tYWlsLXNlc3Npb24vZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3Jlc291cmNlcy9tYWlsLXNlc3Npb24vZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC0xOSw5MiArMTksOTIgQEAKIAogPGFwcGxpY2F0aW9uLWNsaWVudCB4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgCi0gICAgICAJaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9hcHBsaWNhdGlvbi1jbGllbnRfNy54c2QiCisgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICBodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2FwcGxpY2F0aW9uLWNsaWVudF83LnhzZCIKICAgICAgIHZlcnNpb249IjciPgogICAgIDxkaXNwbGF5LW5hbWU+bWFpbC1zZXNzaW9uQ2xpZW50PC9kaXNwbGF5LW5hbWU+Ci0JPG1haWwtc2Vzc2lvbj4KLQkJPGRlc2NyaXB0aW9uPlNhbXBsZSBNYWlsIFNlc3Npb24gZGVmaW5pdGlvbiBhcHBsaWNhdGlvbiBjbGllbnQyPC9kZXNjcmlwdGlvbj4KLQkJPG5hbWU+amF2YTpnbG9iYWwvbWFpbC90cy9tYWlsLXNlc3Npb24vYXBwY2xpZW50L2dsb2JhbGRzPC9uYW1lPgotCQk8c3RvcmUtcHJvdG9jb2w+SU1BUDwvc3RvcmUtcHJvdG9jb2w+Ci0JCTx0cmFuc3BvcnQtcHJvdG9jb2w+U01UUDwvdHJhbnNwb3J0LXByb3RvY29sPgotCQk8aG9zdD5zb21ld2hlcmUubXljby5jb208L2hvc3Q+Ci0JCTx1c2VyPmxpbmRhPC91c2VyPgotCQk8cGFzc3dvcmQ+c2VjcmV0PC9wYXNzd29yZD4KLQkJPGZyb20+c29tZS5ib2R5QG15Y28uY29tPC9mcm9tPgotCQk8cHJvcGVydHk+Ci0JCQk8bmFtZT5Qcm9wZXJ0eTE8L25hbWU+Ci0JCQk8dmFsdWU+MTA8L3ZhbHVlPgotCQk8L3Byb3BlcnR5PgotCQk8cHJvcGVydHk+Ci0JCQk8bmFtZT5Qcm9wZXJ0eTI8L25hbWU+Ci0JCQk8dmFsdWU+MjA8L3ZhbHVlPgotCQk8L3Byb3BlcnR5PgotCTwvbWFpbC1zZXNzaW9uPgotCTxtYWlsLXNlc3Npb24+Ci0JCTxkZXNjcmlwdGlvbj5TYW1wbGUgTWFpbCBTZXNzaW9uIGRlZmluaXRpb24gYXBwbGljYXRpb24gY2xpZW50MzwvZGVzY3JpcHRpb24+Ci0JCTxuYW1lPmphdmE6bW9kdWxlL21haWwvbW9kdWxlZHM8L25hbWU+Ci0JCTxzdG9yZS1wcm90b2NvbD5JTUFQPC9zdG9yZS1wcm90b2NvbD4KLQkJPHRyYW5zcG9ydC1wcm90b2NvbD5TTVRQPC90cmFuc3BvcnQtcHJvdG9jb2w+Ci0JCTxob3N0PnNvbWV3aGVyZS5teWNvLmNvbTwvaG9zdD4KLQkJPHVzZXI+bGluZGE8L3VzZXI+Ci0JCTxwYXNzd29yZD5zZWNyZXQ8L3Bhc3N3b3JkPgotCQk8ZnJvbT5zb21lLmJvZHlAbXljby5jb208L2Zyb20+Ci0JCTxwcm9wZXJ0eT4KLQkJCTxuYW1lPlByb3BlcnR5MTwvbmFtZT4KLQkJCTx2YWx1ZT4xMDwvdmFsdWU+Ci0JCTwvcHJvcGVydHk+Ci0JCTxwcm9wZXJ0eT4KLQkJCTxuYW1lPlByb3BlcnR5MjwvbmFtZT4KLQkJCTx2YWx1ZT4yMDwvdmFsdWU+Ci0JCTwvcHJvcGVydHk+Ci0JPC9tYWlsLXNlc3Npb24+Ci0JPG1haWwtc2Vzc2lvbj4KLQkJPGRlc2NyaXB0aW9uPlNhbXBsZSBNYWlsIFNlc3Npb24gZGVmaW5pdGlvbiBhcHBsaWNhdGlvbiBjbGllbnQ0PC9kZXNjcmlwdGlvbj4KLQkJPG5hbWU+amF2YTphcHAvbWFpbC9hcHBjbGllbnQvYXBwZHM8L25hbWU+Ci0JCTxzdG9yZS1wcm90b2NvbD5JTUFQPC9zdG9yZS1wcm90b2NvbD4KLQkJPHRyYW5zcG9ydC1wcm90b2NvbD5TTVRQPC90cmFuc3BvcnQtcHJvdG9jb2w+Ci0JCTxob3N0PnNvbWV3aGVyZS5teWNvLmNvbTwvaG9zdD4KLQkJPHVzZXI+bGluZGE8L3VzZXI+Ci0JCTxwYXNzd29yZD5zZWNyZXQ8L3Bhc3N3b3JkPgotCQk8ZnJvbT5zb21lLmJvZHlAbXljby5jb208L2Zyb20+Ci0JCTxwcm9wZXJ0eT4KLQkJCTxuYW1lPlByb3BlcnR5MTwvbmFtZT4KLQkJCTx2YWx1ZT4xMDwvdmFsdWU+Ci0JCTwvcHJvcGVydHk+Ci0JCTxwcm9wZXJ0eT4KLQkJCTxuYW1lPlByb3BlcnR5MjwvbmFtZT4KLQkJCTx2YWx1ZT4yMDwvdmFsdWU+Ci0JCTwvcHJvcGVydHk+Ci0JPC9tYWlsLXNlc3Npb24+Ci0JPG1haWwtc2Vzc2lvbj4KLQkJPGRlc2NyaXB0aW9uPlNhbXBsZSBNYWlsIFNlc3Npb24gZGVmaW5pdGlvbiBhcHBsaWNhdGlvbjI8L2Rlc2NyaXB0aW9uPgotCQk8bmFtZT5qYXZhOmFwcC9tYWlsL0FwcGxpY2F0aW9uX0xldmVsX01haWxTZXNzaW9uX1BhcnRpYWw8L25hbWU+Ci0JCTx1c2VyPmxpbmRhPC91c2VyPgotCQk8cGFzc3dvcmQ+c2VjcmV0PC9wYXNzd29yZD4KLQkJPGZyb20+c29tZS5ib2R5QG15Y28uY29tPC9mcm9tPgotCQk8cHJvcGVydHk+Ci0JCQk8bmFtZT5Qcm9wZXJ0eTE8L25hbWU+Ci0JCQk8dmFsdWU+MTA8L3ZhbHVlPgotCQk8L3Byb3BlcnR5PgotCTwvbWFpbC1zZXNzaW9uPgotCTxtYWlsLXNlc3Npb24+Ci0JCTxkZXNjcmlwdGlvbj5TYW1wbGUgTWFpbCBTZXNzaW9uIGRlZmluaXRpb24gYXBwbGljYXRpb24gY2xpZW50IE92ZXJyaWRlPC9kZXNjcmlwdGlvbj4KLQkJPG5hbWU+amF2YTphcHAvbWFpbC9BcHBsaWNhdGlvbl9MZXZlbF9NYWlsU2Vzc2lvbl9PdmVycmlkZTwvbmFtZT4KLQkJPHN0b3JlLXByb3RvY29sPklNQVBfT3ZlcnJpZGU8L3N0b3JlLXByb3RvY29sPgotCQk8dHJhbnNwb3J0LXByb3RvY29sPlNNVFBfT3ZlcnJpZGU8L3RyYW5zcG9ydC1wcm90b2NvbD4KLQkJPGhvc3Q+c29tZXdoZXJlLm15Y28uY29tX092ZXJyaWRlPC9ob3N0PgotCQk8dXNlcj5saW5kYV9PdmVycmlkZTwvdXNlcj4KLQkJPHBhc3N3b3JkPnNlY3JldF9PdmVycmlkZTwvcGFzc3dvcmQ+Ci0JCTxmcm9tPnNvbWUuYm9keUBteWNvLmNvbV9PdmVycmlkZTwvZnJvbT4KLQkJPHByb3BlcnR5PgotCQkJPG5hbWU+UHJvcGVydHkxPC9uYW1lPgotCQkJPHZhbHVlPjEwX092ZXJyaWRlPC92YWx1ZT4KLQkJPC9wcm9wZXJ0eT4KLQkJPHByb3BlcnR5PgotCQkJPG5hbWU+UHJvcGVydHkyPC9uYW1lPgotCQkJPHZhbHVlPjIwX092ZXJyaWRlPC92YWx1ZT4KLQkJPC9wcm9wZXJ0eT4KLQk8L21haWwtc2Vzc2lvbj4gICAgICAgICAgCQorICAgIDxtYWlsLXNlc3Npb24+CisgICAgICAgIDxkZXNjcmlwdGlvbj5TYW1wbGUgTWFpbCBTZXNzaW9uIGRlZmluaXRpb24gYXBwbGljYXRpb24gY2xpZW50MjwvZGVzY3JpcHRpb24+CisgICAgICAgIDxuYW1lPmphdmE6Z2xvYmFsL21haWwvdHMvbWFpbC1zZXNzaW9uL2FwcGNsaWVudC9nbG9iYWxkczwvbmFtZT4KKyAgICAgICAgPHN0b3JlLXByb3RvY29sPklNQVA8L3N0b3JlLXByb3RvY29sPgorICAgICAgICA8dHJhbnNwb3J0LXByb3RvY29sPlNNVFA8L3RyYW5zcG9ydC1wcm90b2NvbD4KKyAgICAgICAgPGhvc3Q+c29tZXdoZXJlLm15Y28uY29tPC9ob3N0PgorICAgICAgICA8dXNlcj5saW5kYTwvdXNlcj4KKyAgICAgICAgPHBhc3N3b3JkPnNlY3JldDwvcGFzc3dvcmQ+CisgICAgICAgIDxmcm9tPnNvbWUuYm9keUBteWNvLmNvbTwvZnJvbT4KKyAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgPG5hbWU+UHJvcGVydHkxPC9uYW1lPgorICAgICAgICAgICAgPHZhbHVlPjEwPC92YWx1ZT4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgPG5hbWU+UHJvcGVydHkyPC9uYW1lPgorICAgICAgICAgICAgPHZhbHVlPjIwPC92YWx1ZT4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICA8L21haWwtc2Vzc2lvbj4KKyAgICA8bWFpbC1zZXNzaW9uPgorICAgICAgICA8ZGVzY3JpcHRpb24+U2FtcGxlIE1haWwgU2Vzc2lvbiBkZWZpbml0aW9uIGFwcGxpY2F0aW9uIGNsaWVudDM8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8bmFtZT5qYXZhOm1vZHVsZS9tYWlsL21vZHVsZWRzPC9uYW1lPgorICAgICAgICA8c3RvcmUtcHJvdG9jb2w+SU1BUDwvc3RvcmUtcHJvdG9jb2w+CisgICAgICAgIDx0cmFuc3BvcnQtcHJvdG9jb2w+U01UUDwvdHJhbnNwb3J0LXByb3RvY29sPgorICAgICAgICA8aG9zdD5zb21ld2hlcmUubXljby5jb208L2hvc3Q+CisgICAgICAgIDx1c2VyPmxpbmRhPC91c2VyPgorICAgICAgICA8cGFzc3dvcmQ+c2VjcmV0PC9wYXNzd29yZD4KKyAgICAgICAgPGZyb20+c29tZS5ib2R5QG15Y28uY29tPC9mcm9tPgorICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICA8bmFtZT5Qcm9wZXJ0eTE8L25hbWU+CisgICAgICAgICAgICA8dmFsdWU+MTA8L3ZhbHVlPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICA8bmFtZT5Qcm9wZXJ0eTI8L25hbWU+CisgICAgICAgICAgICA8dmFsdWU+MjA8L3ZhbHVlPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgIDwvbWFpbC1zZXNzaW9uPgorICAgIDxtYWlsLXNlc3Npb24+CisgICAgICAgIDxkZXNjcmlwdGlvbj5TYW1wbGUgTWFpbCBTZXNzaW9uIGRlZmluaXRpb24gYXBwbGljYXRpb24gY2xpZW50NDwvZGVzY3JpcHRpb24+CisgICAgICAgIDxuYW1lPmphdmE6YXBwL21haWwvYXBwY2xpZW50L2FwcGRzPC9uYW1lPgorICAgICAgICA8c3RvcmUtcHJvdG9jb2w+SU1BUDwvc3RvcmUtcHJvdG9jb2w+CisgICAgICAgIDx0cmFuc3BvcnQtcHJvdG9jb2w+U01UUDwvdHJhbnNwb3J0LXByb3RvY29sPgorICAgICAgICA8aG9zdD5zb21ld2hlcmUubXljby5jb208L2hvc3Q+CisgICAgICAgIDx1c2VyPmxpbmRhPC91c2VyPgorICAgICAgICA8cGFzc3dvcmQ+c2VjcmV0PC9wYXNzd29yZD4KKyAgICAgICAgPGZyb20+c29tZS5ib2R5QG15Y28uY29tPC9mcm9tPgorICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICA8bmFtZT5Qcm9wZXJ0eTE8L25hbWU+CisgICAgICAgICAgICA8dmFsdWU+MTA8L3ZhbHVlPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICA8bmFtZT5Qcm9wZXJ0eTI8L25hbWU+CisgICAgICAgICAgICA8dmFsdWU+MjA8L3ZhbHVlPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgIDwvbWFpbC1zZXNzaW9uPgorICAgIDxtYWlsLXNlc3Npb24+CisgICAgICAgIDxkZXNjcmlwdGlvbj5TYW1wbGUgTWFpbCBTZXNzaW9uIGRlZmluaXRpb24gYXBwbGljYXRpb24yPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPG5hbWU+amF2YTphcHAvbWFpbC9BcHBsaWNhdGlvbl9MZXZlbF9NYWlsU2Vzc2lvbl9QYXJ0aWFsPC9uYW1lPgorICAgICAgICA8dXNlcj5saW5kYTwvdXNlcj4KKyAgICAgICAgPHBhc3N3b3JkPnNlY3JldDwvcGFzc3dvcmQ+CisgICAgICAgIDxmcm9tPnNvbWUuYm9keUBteWNvLmNvbTwvZnJvbT4KKyAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgPG5hbWU+UHJvcGVydHkxPC9uYW1lPgorICAgICAgICAgICAgPHZhbHVlPjEwPC92YWx1ZT4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICA8L21haWwtc2Vzc2lvbj4KKyAgICA8bWFpbC1zZXNzaW9uPgorICAgICAgICA8ZGVzY3JpcHRpb24+U2FtcGxlIE1haWwgU2Vzc2lvbiBkZWZpbml0aW9uIGFwcGxpY2F0aW9uIGNsaWVudCBPdmVycmlkZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxuYW1lPmphdmE6YXBwL21haWwvQXBwbGljYXRpb25fTGV2ZWxfTWFpbFNlc3Npb25fT3ZlcnJpZGU8L25hbWU+CisgICAgICAgIDxzdG9yZS1wcm90b2NvbD5JTUFQX092ZXJyaWRlPC9zdG9yZS1wcm90b2NvbD4KKyAgICAgICAgPHRyYW5zcG9ydC1wcm90b2NvbD5TTVRQX092ZXJyaWRlPC90cmFuc3BvcnQtcHJvdG9jb2w+CisgICAgICAgIDxob3N0PnNvbWV3aGVyZS5teWNvLmNvbV9PdmVycmlkZTwvaG9zdD4KKyAgICAgICAgPHVzZXI+bGluZGFfT3ZlcnJpZGU8L3VzZXI+CisgICAgICAgIDxwYXNzd29yZD5zZWNyZXRfT3ZlcnJpZGU8L3Bhc3N3b3JkPgorICAgICAgICA8ZnJvbT5zb21lLmJvZHlAbXljby5jb21fT3ZlcnJpZGU8L2Zyb20+CisgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgIDxuYW1lPlByb3BlcnR5MTwvbmFtZT4KKyAgICAgICAgICAgIDx2YWx1ZT4xMF9PdmVycmlkZTwvdmFsdWU+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgIDxuYW1lPlByb3BlcnR5MjwvbmFtZT4KKyAgICAgICAgICAgIDx2YWx1ZT4yMF9PdmVycmlkZTwvdmFsdWU+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgPC9tYWlsLXNlc3Npb24+CiA8L2FwcGxpY2F0aW9uLWNsaWVudD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcmVzb3VyY2VzL21haWwtc2Vzc2lvbi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3Jlc291cmNlcy9tYWlsLXNlc3Npb24vZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKaW5kZXggMmY4MDI0NS4uMmNhYTQ5OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcmVzb3VyY2VzL21haWwtc2Vzc2lvbi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9yZXNvdXJjZXMvbWFpbC1zZXNzaW9uL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCkBAIC0xOSw4ICsxOSw4IEBACiAKIDxhcHBsaWNhdGlvbiB4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgCi0gICAgICAJaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9hcHBsaWNhdGlvbl83LnhzZCIKKyAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZQorICAgICAgICAgIGh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvYXBwbGljYXRpb25fNy54c2QiCiAgICAgICB2ZXJzaW9uPSI3Ij4KICAgICA8ZGlzcGxheS1uYW1lPm1haWwtc2Vzc2lvbkFwcDwvZGlzcGxheS1uYW1lPgogICAgIDxtb2R1bGU+CkBAIC0zNSw0MCArMzUsNDAgQEAKICAgICAgICAgICAgIDxjb250ZXh0LXJvb3Q+bWFpbC1zZXNzaW9uPC9jb250ZXh0LXJvb3Q+CiAgICAgICAgIDwvd2ViPgogICAgIDwvbW9kdWxlPgotCTxtYWlsLXNlc3Npb24+Ci0JCTxkZXNjcmlwdGlvbj5TYW1wbGUgTWFpbCBTZXNzaW9uIGRlZmluaXRpb24gYXBwbGljYXRpb24xPC9kZXNjcmlwdGlvbj4KLQkJPG5hbWU+amF2YTpnbG9iYWwvbWFpbC9BcHBsaWNhdGlvbl9MZXZlbF9NYWlsU2Vzc2lvbjwvbmFtZT4KLQkJPHN0b3JlLXByb3RvY29sPklNQVA8L3N0b3JlLXByb3RvY29sPgotCQk8dHJhbnNwb3J0LXByb3RvY29sPlNNVFA8L3RyYW5zcG9ydC1wcm90b2NvbD4KLQkJPGhvc3Q+c29tZXdoZXJlLm15Y28uY29tPC9ob3N0PgotCQk8dXNlcj5saW5kYTwvdXNlcj4KLQkJPHBhc3N3b3JkPnNlY3JldDwvcGFzc3dvcmQ+Ci0JCTxmcm9tPnNvbWUuYm9keUBteWNvLmNvbTwvZnJvbT4KLQkJPHByb3BlcnR5PgotCQkJPG5hbWU+UHJvcGVydHkxPC9uYW1lPgotCQkJPHZhbHVlPjEwPC92YWx1ZT4KLQkJPC9wcm9wZXJ0eT4KLQkJPHByb3BlcnR5PgotCQkJPG5hbWU+UHJvcGVydHkyPC9uYW1lPgotCQkJPHZhbHVlPjIwPC92YWx1ZT4KLQkJPC9wcm9wZXJ0eT4KLQk8L21haWwtc2Vzc2lvbj4KLQk8bWFpbC1zZXNzaW9uPgotCQk8ZGVzY3JpcHRpb24+U2FtcGxlIE1haWwgU2Vzc2lvbiBkZWZpbml0aW9uIGFwcGxpY2F0aW9uMjwvZGVzY3JpcHRpb24+Ci0JCTxuYW1lPmphdmE6YXBwL21haWwvQXBwbGljYXRpb25fTGV2ZWxfTWFpbFNlc3Npb248L25hbWU+Ci0JCTxzdG9yZS1wcm90b2NvbD5JTUFQPC9zdG9yZS1wcm90b2NvbD4KLQkJPHRyYW5zcG9ydC1wcm90b2NvbD5TTVRQPC90cmFuc3BvcnQtcHJvdG9jb2w+Ci0JCTxob3N0PnNvbWV3aGVyZS5teWNvLmNvbTwvaG9zdD4KLQkJPHVzZXI+bGluZGE8L3VzZXI+Ci0JCTxwYXNzd29yZD5zZWNyZXQ8L3Bhc3N3b3JkPgotCQk8ZnJvbT5zb21lLmJvZHlAbXljby5jb208L2Zyb20+Ci0JCTxwcm9wZXJ0eT4KLQkJCTxuYW1lPlByb3BlcnR5MTwvbmFtZT4KLQkJCTx2YWx1ZT4xMDwvdmFsdWU+Ci0JCTwvcHJvcGVydHk+Ci0JCTxwcm9wZXJ0eT4KLQkJCTxuYW1lPlByb3BlcnR5MjwvbmFtZT4KLQkJCTx2YWx1ZT4yMDwvdmFsdWU+Ci0JCTwvcHJvcGVydHk+Ci0JPC9tYWlsLXNlc3Npb24+CSAgCisgICAgPG1haWwtc2Vzc2lvbj4KKyAgICAgICAgPGRlc2NyaXB0aW9uPlNhbXBsZSBNYWlsIFNlc3Npb24gZGVmaW5pdGlvbiBhcHBsaWNhdGlvbjE8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8bmFtZT5qYXZhOmdsb2JhbC9tYWlsL0FwcGxpY2F0aW9uX0xldmVsX01haWxTZXNzaW9uPC9uYW1lPgorICAgICAgICA8c3RvcmUtcHJvdG9jb2w+SU1BUDwvc3RvcmUtcHJvdG9jb2w+CisgICAgICAgIDx0cmFuc3BvcnQtcHJvdG9jb2w+U01UUDwvdHJhbnNwb3J0LXByb3RvY29sPgorICAgICAgICA8aG9zdD5zb21ld2hlcmUubXljby5jb208L2hvc3Q+CisgICAgICAgIDx1c2VyPmxpbmRhPC91c2VyPgorICAgICAgICA8cGFzc3dvcmQ+c2VjcmV0PC9wYXNzd29yZD4KKyAgICAgICAgPGZyb20+c29tZS5ib2R5QG15Y28uY29tPC9mcm9tPgorICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICA8bmFtZT5Qcm9wZXJ0eTE8L25hbWU+CisgICAgICAgICAgICA8dmFsdWU+MTA8L3ZhbHVlPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICA8bmFtZT5Qcm9wZXJ0eTI8L25hbWU+CisgICAgICAgICAgICA8dmFsdWU+MjA8L3ZhbHVlPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgIDwvbWFpbC1zZXNzaW9uPgorICAgIDxtYWlsLXNlc3Npb24+CisgICAgICAgIDxkZXNjcmlwdGlvbj5TYW1wbGUgTWFpbCBTZXNzaW9uIGRlZmluaXRpb24gYXBwbGljYXRpb24yPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPG5hbWU+amF2YTphcHAvbWFpbC9BcHBsaWNhdGlvbl9MZXZlbF9NYWlsU2Vzc2lvbjwvbmFtZT4KKyAgICAgICAgPHN0b3JlLXByb3RvY29sPklNQVA8L3N0b3JlLXByb3RvY29sPgorICAgICAgICA8dHJhbnNwb3J0LXByb3RvY29sPlNNVFA8L3RyYW5zcG9ydC1wcm90b2NvbD4KKyAgICAgICAgPGhvc3Q+c29tZXdoZXJlLm15Y28uY29tPC9ob3N0PgorICAgICAgICA8dXNlcj5saW5kYTwvdXNlcj4KKyAgICAgICAgPHBhc3N3b3JkPnNlY3JldDwvcGFzc3dvcmQ+CisgICAgICAgIDxmcm9tPnNvbWUuYm9keUBteWNvLmNvbTwvZnJvbT4KKyAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgPG5hbWU+UHJvcGVydHkxPC9uYW1lPgorICAgICAgICAgICAgPHZhbHVlPjEwPC92YWx1ZT4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgPG5hbWU+UHJvcGVydHkyPC9uYW1lPgorICAgICAgICAgICAgPHZhbHVlPjIwPC92YWx1ZT4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICA8L21haWwtc2Vzc2lvbj4KIDwvYXBwbGljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9yZXNvdXJjZXMvbWFpbC1zZXNzaW9uL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9yZXNvdXJjZXMvbWFpbC1zZXNzaW9uL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggNjAyMjYwNy4uNTJmMWJhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcmVzb3VyY2VzL21haWwtc2Vzc2lvbi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3Jlc291cmNlcy9tYWlsLXNlc3Npb24vZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtMjAsNyArMjAsNyBAQAogICAgICAgPGVqYi1qYXIgeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCiAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlCi0gICAgICAJICBodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18yLnhzZCIKKyAgICAgICAgICAgIGh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzIueHNkIgogICAgICAgdmVyc2lvbj0iMy4yIj4KICAgPG1vZHVsZS1uYW1lPm1haWwtc2Vzc2lvbi1lamI8L21vZHVsZS1uYW1lPgogICA8ZW50ZXJwcmlzZS1iZWFucz4KQEAgLTMyLDI0ICszMiwyNCBAQAogICAgICAgPGVqYi1jbGFzcz5jb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24zLkhlbGxvU3RhdGVmdWxFSkI8L2VqYi1jbGFzcz4KICAgICAgIDxzZXNzaW9uLXR5cGU+U3RhdGVmdWw8L3Nlc3Npb24tdHlwZT4KICAgICAgIDx0cmFuc2FjdGlvbi10eXBlPkNvbnRhaW5lcjwvdHJhbnNhY3Rpb24tdHlwZT4KLQk8bWFpbC1zZXNzaW9uPgotCQk8ZGVzY3JpcHRpb24+U2FtcGxlIE1haWwgU2Vzc2lvbiBkZWZpbml0aW9uIGVqYjE8L2Rlc2NyaXB0aW9uPgotCQk8bmFtZT5qYXZhOmdsb2JhbC9tYWlsL0hlbGxvU3RhdGVmdWxFSkJfTVNfTWFpbFNlc3Npb248L25hbWU+Ci0JCTxzdG9yZS1wcm90b2NvbD5JTUFQPC9zdG9yZS1wcm90b2NvbD4KLQkJPHRyYW5zcG9ydC1wcm90b2NvbD5TTVRQPC90cmFuc3BvcnQtcHJvdG9jb2w+Ci0JCTxob3N0PnNvbWV3aGVyZS5teWNvLmNvbTwvaG9zdD4KLQkJPHVzZXI+bGluZGE8L3VzZXI+Ci0JCTxwYXNzd29yZD5zZWNyZXQ8L3Bhc3N3b3JkPgotCQk8ZnJvbT5zb21lLmJvZHlAbXljby5jb208L2Zyb20+Ci0JCTxwcm9wZXJ0eT4KLQkJCTxuYW1lPlByb3BlcnR5MTwvbmFtZT4KLQkJCTx2YWx1ZT4xMDwvdmFsdWU+Ci0JCTwvcHJvcGVydHk+Ci0JCTxwcm9wZXJ0eT4KLQkJCTxuYW1lPlByb3BlcnR5MjwvbmFtZT4KLQkJCTx2YWx1ZT4yMDwvdmFsdWU+Ci0JCTwvcHJvcGVydHk+Ci0JPC9tYWlsLXNlc3Npb24+CQorICAgIDxtYWlsLXNlc3Npb24+CisgICAgICAgIDxkZXNjcmlwdGlvbj5TYW1wbGUgTWFpbCBTZXNzaW9uIGRlZmluaXRpb24gZWpiMTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxuYW1lPmphdmE6Z2xvYmFsL21haWwvSGVsbG9TdGF0ZWZ1bEVKQl9NU19NYWlsU2Vzc2lvbjwvbmFtZT4KKyAgICAgICAgPHN0b3JlLXByb3RvY29sPklNQVA8L3N0b3JlLXByb3RvY29sPgorICAgICAgICA8dHJhbnNwb3J0LXByb3RvY29sPlNNVFA8L3RyYW5zcG9ydC1wcm90b2NvbD4KKyAgICAgICAgPGhvc3Q+c29tZXdoZXJlLm15Y28uY29tPC9ob3N0PgorICAgICAgICA8dXNlcj5saW5kYTwvdXNlcj4KKyAgICAgICAgPHBhc3N3b3JkPnNlY3JldDwvcGFzc3dvcmQ+CisgICAgICAgIDxmcm9tPnNvbWUuYm9keUBteWNvLmNvbTwvZnJvbT4KKyAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgPG5hbWU+UHJvcGVydHkxPC9uYW1lPgorICAgICAgICAgICAgPHZhbHVlPjEwPC92YWx1ZT4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgPG5hbWU+UHJvcGVydHkyPC9uYW1lPgorICAgICAgICAgICAgPHZhbHVlPjIwPC92YWx1ZT4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICA8L21haWwtc2Vzc2lvbj4KICAgICA8L3Nlc3Npb24+CiAgICAgPHNlc3Npb24+CiAgICAgICA8ZGVzY3JpcHRpb24+bXkgc3RhdGVsZXNzIGJlYW4gZGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgpAQCAtNTksOTYgKzU5LDk2IEBACiAgICAgICA8ZWpiLWNsYXNzPmNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbjMuSGVsbG9FSkI8L2VqYi1jbGFzcz4KICAgICAgIDxzZXNzaW9uLXR5cGU+U3RhdGVsZXNzPC9zZXNzaW9uLXR5cGU+CiAgICAgICA8dHJhbnNhY3Rpb24tdHlwZT5Db250YWluZXI8L3RyYW5zYWN0aW9uLXR5cGU+Ci0JPG1haWwtc2Vzc2lvbj4KLQkJPGRlc2NyaXB0aW9uPlNhbXBsZSBNYWlsIFNlc3Npb24gZGVmaW5pdGlvbiBlamIzPC9kZXNjcmlwdGlvbj4KLQkJPG5hbWU+amF2YTptb2R1bGUvZW52L0hlbGxvRUpCX01haWxTZXNzaW9uX2RyaXZlcjwvbmFtZT4KLQkJPHN0b3JlLXByb3RvY29sPklNQVA8L3N0b3JlLXByb3RvY29sPgotCQk8dHJhbnNwb3J0LXByb3RvY29sPlNNVFA8L3RyYW5zcG9ydC1wcm90b2NvbD4KLQkJPGhvc3Q+c29tZXdoZXJlLm15Y28uY29tPC9ob3N0PgotCQk8dXNlcj5saW5kYTwvdXNlcj4KLQkJPHBhc3N3b3JkPnNlY3JldDwvcGFzc3dvcmQ+Ci0JCTxmcm9tPnNvbWUuYm9keUBteWNvLmNvbTwvZnJvbT4KLQkJPHByb3BlcnR5PgotCQkJPG5hbWU+UHJvcGVydHkxPC9uYW1lPgotCQkJPHZhbHVlPjEwPC92YWx1ZT4KLQkJPC9wcm9wZXJ0eT4KLQkJPHByb3BlcnR5PgotCQkJPG5hbWU+UHJvcGVydHkyPC9uYW1lPgotCQkJPHZhbHVlPjIwPC92YWx1ZT4KLQkJPC9wcm9wZXJ0eT4KLQk8L21haWwtc2Vzc2lvbj4KLQk8bWFpbC1zZXNzaW9uPgotCQk8ZGVzY3JpcHRpb24+U2FtcGxlIE1haWwgU2Vzc2lvbiBkZWZpbml0aW9uIGVqYjM8L2Rlc2NyaXB0aW9uPgotCQk8bmFtZT5qYXZhOmdsb2JhbC9lbnYvSGVsbG9FSkJfTVNfTWFpbFNlc3Npb248L25hbWU+Ci0JCTxzdG9yZS1wcm90b2NvbD5JTUFQPC9zdG9yZS1wcm90b2NvbD4KLQkJPHRyYW5zcG9ydC1wcm90b2NvbD5TTVRQPC90cmFuc3BvcnQtcHJvdG9jb2w+Ci0JCTxob3N0PnNvbWV3aGVyZS5teWNvLmNvbTwvaG9zdD4KLQkJPHVzZXI+bGluZGE8L3VzZXI+Ci0JCTxwYXNzd29yZD5zZWNyZXQ8L3Bhc3N3b3JkPgotCQk8ZnJvbT5zb21lLmJvZHlAbXljby5jb208L2Zyb20+Ci0JCTxwcm9wZXJ0eT4KLQkJCTxuYW1lPlByb3BlcnR5MTwvbmFtZT4KLQkJCTx2YWx1ZT4xMDwvdmFsdWU+Ci0JCTwvcHJvcGVydHk+Ci0JCTxwcm9wZXJ0eT4KLQkJCTxuYW1lPlByb3BlcnR5MjwvbmFtZT4KLQkJCTx2YWx1ZT4yMDwvdmFsdWU+Ci0JCTwvcHJvcGVydHk+Ci0JPC9tYWlsLXNlc3Npb24+Ci0JPG1haWwtc2Vzc2lvbj4KLQkJPGRlc2NyaXB0aW9uPlNhbXBsZSBNYWlsIFNlc3Npb24gZGVmaW5pdGlvbiBlamIzPC9kZXNjcmlwdGlvbj4KLQkJPG5hbWU+amF2YTpnbG9iYWwvZW52L0hlbGxvU3RhdGVmdWxFSkJfTVNfTWFpbFNlc3Npb248L25hbWU+Ci0JCTxzdG9yZS1wcm90b2NvbD5JTUFQPC9zdG9yZS1wcm90b2NvbD4KLQkJPHRyYW5zcG9ydC1wcm90b2NvbD5TTVRQPC90cmFuc3BvcnQtcHJvdG9jb2w+Ci0JCTxob3N0PnNvbWV3aGVyZS5teWNvLmNvbTwvaG9zdD4KLQkJPHVzZXI+bGluZGE8L3VzZXI+Ci0JCTxwYXNzd29yZD5zZWNyZXQ8L3Bhc3N3b3JkPgotCQk8ZnJvbT5zb21lLmJvZHlAbXljby5jb208L2Zyb20+Ci0JCTxwcm9wZXJ0eT4KLQkJCTxuYW1lPlByb3BlcnR5MTwvbmFtZT4KLQkJCTx2YWx1ZT4xMDwvdmFsdWU+Ci0JCTwvcHJvcGVydHk+Ci0JCTxwcm9wZXJ0eT4KLQkJCTxuYW1lPlByb3BlcnR5MjwvbmFtZT4KLQkJCTx2YWx1ZT4yMDwvdmFsdWU+Ci0JCTwvcHJvcGVydHk+Ci0JPC9tYWlsLXNlc3Npb24+Ci0JPG1haWwtc2Vzc2lvbj4KLQkJPGRlc2NyaXB0aW9uPlNhbXBsZSBNYWlsIFNlc3Npb24gZGVmaW5pdGlvbiBlamIzPC9kZXNjcmlwdGlvbj4KLQkJPG5hbWU+amF2YTpnbG9iYWwvbWFpbC9IZWxsb0VKQl9NU19NYWlsU2Vzc2lvbjwvbmFtZT4KLQkJPHN0b3JlLXByb3RvY29sPklNQVA8L3N0b3JlLXByb3RvY29sPgotCQk8dHJhbnNwb3J0LXByb3RvY29sPlNNVFA8L3RyYW5zcG9ydC1wcm90b2NvbD4KLQkJPGhvc3Q+c29tZXdoZXJlLm15Y28uY29tPC9ob3N0PgotCQk8dXNlcj5saW5kYTwvdXNlcj4KLQkJPHBhc3N3b3JkPnNlY3JldDwvcGFzc3dvcmQ+Ci0JCTxmcm9tPnNvbWUuYm9keUBteWNvLmNvbTwvZnJvbT4KLQkJPHByb3BlcnR5PgotCQkJPG5hbWU+UHJvcGVydHkxPC9uYW1lPgotCQkJPHZhbHVlPjEwPC92YWx1ZT4KLQkJPC9wcm9wZXJ0eT4KLQkJPHByb3BlcnR5PgotCQkJPG5hbWU+UHJvcGVydHkyPC9uYW1lPgotCQkJPHZhbHVlPjIwPC92YWx1ZT4KLQkJPC9wcm9wZXJ0eT4KLQk8L21haWwtc2Vzc2lvbj4KLQk8bWFpbC1zZXNzaW9uPgotCQk8ZGVzY3JpcHRpb24+U2FtcGxlIE1haWwgU2Vzc2lvbiBkZWZpbml0aW9uIGVqYjM8L2Rlc2NyaXB0aW9uPgotCQk8bmFtZT5qYXZhOmNvbXAvZW52L0hlbGxvRUpCX01TX01haWxTZXNzaW9uPC9uYW1lPgotCQk8c3RvcmUtcHJvdG9jb2w+SU1BUDwvc3RvcmUtcHJvdG9jb2w+Ci0JCTx0cmFuc3BvcnQtcHJvdG9jb2w+U01UUDwvdHJhbnNwb3J0LXByb3RvY29sPgotCQk8aG9zdD5zb21ld2hlcmUubXljby5jb208L2hvc3Q+Ci0JCTx1c2VyPmxpbmRhPC91c2VyPgotCQk8cGFzc3dvcmQ+c2VjcmV0PC9wYXNzd29yZD4KLQkJPGZyb20+c29tZS5ib2R5QG15Y28uY29tPC9mcm9tPgotCQk8cHJvcGVydHk+Ci0JCQk8bmFtZT5Qcm9wZXJ0eTE8L25hbWU+Ci0JCQk8dmFsdWU+MTA8L3ZhbHVlPgotCQk8L3Byb3BlcnR5PgotCQk8cHJvcGVydHk+Ci0JCQk8bmFtZT5Qcm9wZXJ0eTI8L25hbWU+Ci0JCQk8dmFsdWU+MjA8L3ZhbHVlPgotCQk8L3Byb3BlcnR5PgotCTwvbWFpbC1zZXNzaW9uPgorICAgIDxtYWlsLXNlc3Npb24+CisgICAgICAgIDxkZXNjcmlwdGlvbj5TYW1wbGUgTWFpbCBTZXNzaW9uIGRlZmluaXRpb24gZWpiMzwvZGVzY3JpcHRpb24+CisgICAgICAgIDxuYW1lPmphdmE6bW9kdWxlL2Vudi9IZWxsb0VKQl9NYWlsU2Vzc2lvbl9kcml2ZXI8L25hbWU+CisgICAgICAgIDxzdG9yZS1wcm90b2NvbD5JTUFQPC9zdG9yZS1wcm90b2NvbD4KKyAgICAgICAgPHRyYW5zcG9ydC1wcm90b2NvbD5TTVRQPC90cmFuc3BvcnQtcHJvdG9jb2w+CisgICAgICAgIDxob3N0PnNvbWV3aGVyZS5teWNvLmNvbTwvaG9zdD4KKyAgICAgICAgPHVzZXI+bGluZGE8L3VzZXI+CisgICAgICAgIDxwYXNzd29yZD5zZWNyZXQ8L3Bhc3N3b3JkPgorICAgICAgICA8ZnJvbT5zb21lLmJvZHlAbXljby5jb208L2Zyb20+CisgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgIDxuYW1lPlByb3BlcnR5MTwvbmFtZT4KKyAgICAgICAgICAgIDx2YWx1ZT4xMDwvdmFsdWU+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgIDxuYW1lPlByb3BlcnR5MjwvbmFtZT4KKyAgICAgICAgICAgIDx2YWx1ZT4yMDwvdmFsdWU+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgPC9tYWlsLXNlc3Npb24+CisgICAgPG1haWwtc2Vzc2lvbj4KKyAgICAgICAgPGRlc2NyaXB0aW9uPlNhbXBsZSBNYWlsIFNlc3Npb24gZGVmaW5pdGlvbiBlamIzPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPG5hbWU+amF2YTpnbG9iYWwvZW52L0hlbGxvRUpCX01TX01haWxTZXNzaW9uPC9uYW1lPgorICAgICAgICA8c3RvcmUtcHJvdG9jb2w+SU1BUDwvc3RvcmUtcHJvdG9jb2w+CisgICAgICAgIDx0cmFuc3BvcnQtcHJvdG9jb2w+U01UUDwvdHJhbnNwb3J0LXByb3RvY29sPgorICAgICAgICA8aG9zdD5zb21ld2hlcmUubXljby5jb208L2hvc3Q+CisgICAgICAgIDx1c2VyPmxpbmRhPC91c2VyPgorICAgICAgICA8cGFzc3dvcmQ+c2VjcmV0PC9wYXNzd29yZD4KKyAgICAgICAgPGZyb20+c29tZS5ib2R5QG15Y28uY29tPC9mcm9tPgorICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICA8bmFtZT5Qcm9wZXJ0eTE8L25hbWU+CisgICAgICAgICAgICA8dmFsdWU+MTA8L3ZhbHVlPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICA8bmFtZT5Qcm9wZXJ0eTI8L25hbWU+CisgICAgICAgICAgICA8dmFsdWU+MjA8L3ZhbHVlPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgIDwvbWFpbC1zZXNzaW9uPgorICAgIDxtYWlsLXNlc3Npb24+CisgICAgICAgIDxkZXNjcmlwdGlvbj5TYW1wbGUgTWFpbCBTZXNzaW9uIGRlZmluaXRpb24gZWpiMzwvZGVzY3JpcHRpb24+CisgICAgICAgIDxuYW1lPmphdmE6Z2xvYmFsL2Vudi9IZWxsb1N0YXRlZnVsRUpCX01TX01haWxTZXNzaW9uPC9uYW1lPgorICAgICAgICA8c3RvcmUtcHJvdG9jb2w+SU1BUDwvc3RvcmUtcHJvdG9jb2w+CisgICAgICAgIDx0cmFuc3BvcnQtcHJvdG9jb2w+U01UUDwvdHJhbnNwb3J0LXByb3RvY29sPgorICAgICAgICA8aG9zdD5zb21ld2hlcmUubXljby5jb208L2hvc3Q+CisgICAgICAgIDx1c2VyPmxpbmRhPC91c2VyPgorICAgICAgICA8cGFzc3dvcmQ+c2VjcmV0PC9wYXNzd29yZD4KKyAgICAgICAgPGZyb20+c29tZS5ib2R5QG15Y28uY29tPC9mcm9tPgorICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICA8bmFtZT5Qcm9wZXJ0eTE8L25hbWU+CisgICAgICAgICAgICA8dmFsdWU+MTA8L3ZhbHVlPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICA8bmFtZT5Qcm9wZXJ0eTI8L25hbWU+CisgICAgICAgICAgICA8dmFsdWU+MjA8L3ZhbHVlPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgIDwvbWFpbC1zZXNzaW9uPgorICAgIDxtYWlsLXNlc3Npb24+CisgICAgICAgIDxkZXNjcmlwdGlvbj5TYW1wbGUgTWFpbCBTZXNzaW9uIGRlZmluaXRpb24gZWpiMzwvZGVzY3JpcHRpb24+CisgICAgICAgIDxuYW1lPmphdmE6Z2xvYmFsL21haWwvSGVsbG9FSkJfTVNfTWFpbFNlc3Npb248L25hbWU+CisgICAgICAgIDxzdG9yZS1wcm90b2NvbD5JTUFQPC9zdG9yZS1wcm90b2NvbD4KKyAgICAgICAgPHRyYW5zcG9ydC1wcm90b2NvbD5TTVRQPC90cmFuc3BvcnQtcHJvdG9jb2w+CisgICAgICAgIDxob3N0PnNvbWV3aGVyZS5teWNvLmNvbTwvaG9zdD4KKyAgICAgICAgPHVzZXI+bGluZGE8L3VzZXI+CisgICAgICAgIDxwYXNzd29yZD5zZWNyZXQ8L3Bhc3N3b3JkPgorICAgICAgICA8ZnJvbT5zb21lLmJvZHlAbXljby5jb208L2Zyb20+CisgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgIDxuYW1lPlByb3BlcnR5MTwvbmFtZT4KKyAgICAgICAgICAgIDx2YWx1ZT4xMDwvdmFsdWU+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgIDxuYW1lPlByb3BlcnR5MjwvbmFtZT4KKyAgICAgICAgICAgIDx2YWx1ZT4yMDwvdmFsdWU+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgPC9tYWlsLXNlc3Npb24+CisgICAgPG1haWwtc2Vzc2lvbj4KKyAgICAgICAgPGRlc2NyaXB0aW9uPlNhbXBsZSBNYWlsIFNlc3Npb24gZGVmaW5pdGlvbiBlamIzPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPG5hbWU+amF2YTpjb21wL2Vudi9IZWxsb0VKQl9NU19NYWlsU2Vzc2lvbjwvbmFtZT4KKyAgICAgICAgPHN0b3JlLXByb3RvY29sPklNQVA8L3N0b3JlLXByb3RvY29sPgorICAgICAgICA8dHJhbnNwb3J0LXByb3RvY29sPlNNVFA8L3RyYW5zcG9ydC1wcm90b2NvbD4KKyAgICAgICAgPGhvc3Q+c29tZXdoZXJlLm15Y28uY29tPC9ob3N0PgorICAgICAgICA8dXNlcj5saW5kYTwvdXNlcj4KKyAgICAgICAgPHBhc3N3b3JkPnNlY3JldDwvcGFzc3dvcmQ+CisgICAgICAgIDxmcm9tPnNvbWUuYm9keUBteWNvLmNvbTwvZnJvbT4KKyAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgPG5hbWU+UHJvcGVydHkxPC9uYW1lPgorICAgICAgICAgICAgPHZhbHVlPjEwPC92YWx1ZT4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgPG5hbWU+UHJvcGVydHkyPC9uYW1lPgorICAgICAgICAgICAgPHZhbHVlPjIwPC92YWx1ZT4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICA8L21haWwtc2Vzc2lvbj4KICAgICA8L3Nlc3Npb24+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KIDwvZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3Jlc291cmNlcy9tYWlsLXNlc3Npb24vZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcmVzb3VyY2VzL21haWwtc2Vzc2lvbi9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMTI3MDdmNC4uNzA4MjQ2YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcmVzb3VyY2VzL21haWwtc2Vzc2lvbi9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcmVzb3VyY2VzL21haWwtc2Vzc2lvbi9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTMzLDU5ICszMyw1OSBAQAogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9zZXJ2bGV0PC91cmwtcGF0dGVybj4KICAgICA8L3NlcnZsZXQtbWFwcGluZz4KLQk8bWFpbC1zZXNzaW9uPgotCQk8ZGVzY3JpcHRpb24+U2FtcGxlIE1haWwgU2Vzc2lvbiBkZWZpbml0aW9uIHdlYjE8L2Rlc2NyaXB0aW9uPgotCQk8bmFtZT5qYXZhOmdsb2JhbC9tYWlsL1NlcnZsZXRfTVNfTWFpbFNlc3Npb248L25hbWU+Ci0JCTxzdG9yZS1wcm90b2NvbD5JTUFQPC9zdG9yZS1wcm90b2NvbD4KLQkJPHRyYW5zcG9ydC1wcm90b2NvbD5TTVRQPC90cmFuc3BvcnQtcHJvdG9jb2w+Ci0JCTxob3N0PnNvbWV3aGVyZS5teWNvLmNvbTwvaG9zdD4KLQkJPHVzZXI+bGluZGE8L3VzZXI+Ci0JCTxwYXNzd29yZD5zZWNyZXQ8L3Bhc3N3b3JkPgotCQk8ZnJvbT5zb21lLmJvZHlAbXljby5jb208L2Zyb20+Ci0JCTxwcm9wZXJ0eT4KLQkJCTxuYW1lPlByb3BlcnR5MTwvbmFtZT4KLQkJCTx2YWx1ZT4xMDwvdmFsdWU+Ci0JCTwvcHJvcGVydHk+Ci0JCTxwcm9wZXJ0eT4KLQkJCTxuYW1lPlByb3BlcnR5MjwvbmFtZT4KLQkJCTx2YWx1ZT4yMDwvdmFsdWU+Ci0JCTwvcHJvcGVydHk+Ci0JPC9tYWlsLXNlc3Npb24+Ci0JPG1haWwtc2Vzc2lvbj4KLQkJPGRlc2NyaXB0aW9uPlNhbXBsZSBNYWlsIFNlc3Npb24gZGVmaW5pdGlvbiB3ZWIyPC9kZXNjcmlwdGlvbj4KLQkJPG5hbWU+amF2YTpjb21wL21haWwvU2VydmxldF9NU19NYWlsU2Vzc2lvbjwvbmFtZT4KLQkJPHN0b3JlLXByb3RvY29sPklNQVA8L3N0b3JlLXByb3RvY29sPgotCQk8dHJhbnNwb3J0LXByb3RvY29sPlNNVFA8L3RyYW5zcG9ydC1wcm90b2NvbD4KLQkJPGhvc3Q+c29tZXdoZXJlLm15Y28uY29tPC9ob3N0PgotCQk8dXNlcj5saW5kYTwvdXNlcj4KLQkJPHBhc3N3b3JkPnNlY3JldDwvcGFzc3dvcmQ+Ci0JCTxmcm9tPnNvbWUuYm9keUBteWNvLmNvbTwvZnJvbT4KLQkJPHByb3BlcnR5PgotCQkJPG5hbWU+UHJvcGVydHkxPC9uYW1lPgotCQkJPHZhbHVlPjEwPC92YWx1ZT4KLQkJPC9wcm9wZXJ0eT4KLQkJPHByb3BlcnR5PgotCQkJPG5hbWU+UHJvcGVydHkyPC9uYW1lPgotCQkJPHZhbHVlPjIwPC92YWx1ZT4KLQkJPC9wcm9wZXJ0eT4KLQk8L21haWwtc2Vzc2lvbj4KLQk8bWFpbC1zZXNzaW9uPgotCQk8ZGVzY3JpcHRpb24+U2FtcGxlIE1haWwgU2Vzc2lvbiBkZWZpbml0aW9uIHdlYjI8L2Rlc2NyaXB0aW9uPgotCQk8bmFtZT5qYXZhOmdsb2JhbC9lbnYvU2VydmxldF9NU19NYWlsU2Vzc2lvbjwvbmFtZT4KLQkJPHN0b3JlLXByb3RvY29sPklNQVA8L3N0b3JlLXByb3RvY29sPgotCQk8dHJhbnNwb3J0LXByb3RvY29sPlNNVFA8L3RyYW5zcG9ydC1wcm90b2NvbD4KLQkJPGhvc3Q+c29tZXdoZXJlLm15Y28uY29tPC9ob3N0PgotCQk8dXNlcj5saW5kYTwvdXNlcj4KLQkJPHBhc3N3b3JkPnNlY3JldDwvcGFzc3dvcmQ+Ci0JCTxmcm9tPnNvbWUuYm9keUBteWNvLmNvbTwvZnJvbT4KLQkJPHByb3BlcnR5PgotCQkJPG5hbWU+UHJvcGVydHkxPC9uYW1lPgotCQkJPHZhbHVlPjEwPC92YWx1ZT4KLQkJPC9wcm9wZXJ0eT4KLQkJPHByb3BlcnR5PgotCQkJPG5hbWU+UHJvcGVydHkyPC9uYW1lPgotCQkJPHZhbHVlPjIwPC92YWx1ZT4KLQkJPC9wcm9wZXJ0eT4KLQk8L21haWwtc2Vzc2lvbj4KKyAgICA8bWFpbC1zZXNzaW9uPgorICAgICAgICA8ZGVzY3JpcHRpb24+U2FtcGxlIE1haWwgU2Vzc2lvbiBkZWZpbml0aW9uIHdlYjE8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8bmFtZT5qYXZhOmdsb2JhbC9tYWlsL1NlcnZsZXRfTVNfTWFpbFNlc3Npb248L25hbWU+CisgICAgICAgIDxzdG9yZS1wcm90b2NvbD5JTUFQPC9zdG9yZS1wcm90b2NvbD4KKyAgICAgICAgPHRyYW5zcG9ydC1wcm90b2NvbD5TTVRQPC90cmFuc3BvcnQtcHJvdG9jb2w+CisgICAgICAgIDxob3N0PnNvbWV3aGVyZS5teWNvLmNvbTwvaG9zdD4KKyAgICAgICAgPHVzZXI+bGluZGE8L3VzZXI+CisgICAgICAgIDxwYXNzd29yZD5zZWNyZXQ8L3Bhc3N3b3JkPgorICAgICAgICA8ZnJvbT5zb21lLmJvZHlAbXljby5jb208L2Zyb20+CisgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgIDxuYW1lPlByb3BlcnR5MTwvbmFtZT4KKyAgICAgICAgICAgIDx2YWx1ZT4xMDwvdmFsdWU+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgIDxuYW1lPlByb3BlcnR5MjwvbmFtZT4KKyAgICAgICAgICAgIDx2YWx1ZT4yMDwvdmFsdWU+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgPC9tYWlsLXNlc3Npb24+CisgICAgPG1haWwtc2Vzc2lvbj4KKyAgICAgICAgPGRlc2NyaXB0aW9uPlNhbXBsZSBNYWlsIFNlc3Npb24gZGVmaW5pdGlvbiB3ZWIyPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPG5hbWU+amF2YTpjb21wL21haWwvU2VydmxldF9NU19NYWlsU2Vzc2lvbjwvbmFtZT4KKyAgICAgICAgPHN0b3JlLXByb3RvY29sPklNQVA8L3N0b3JlLXByb3RvY29sPgorICAgICAgICA8dHJhbnNwb3J0LXByb3RvY29sPlNNVFA8L3RyYW5zcG9ydC1wcm90b2NvbD4KKyAgICAgICAgPGhvc3Q+c29tZXdoZXJlLm15Y28uY29tPC9ob3N0PgorICAgICAgICA8dXNlcj5saW5kYTwvdXNlcj4KKyAgICAgICAgPHBhc3N3b3JkPnNlY3JldDwvcGFzc3dvcmQ+CisgICAgICAgIDxmcm9tPnNvbWUuYm9keUBteWNvLmNvbTwvZnJvbT4KKyAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgPG5hbWU+UHJvcGVydHkxPC9uYW1lPgorICAgICAgICAgICAgPHZhbHVlPjEwPC92YWx1ZT4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgPG5hbWU+UHJvcGVydHkyPC9uYW1lPgorICAgICAgICAgICAgPHZhbHVlPjIwPC92YWx1ZT4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICA8L21haWwtc2Vzc2lvbj4KKyAgICA8bWFpbC1zZXNzaW9uPgorICAgICAgICA8ZGVzY3JpcHRpb24+U2FtcGxlIE1haWwgU2Vzc2lvbiBkZWZpbml0aW9uIHdlYjI8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8bmFtZT5qYXZhOmdsb2JhbC9lbnYvU2VydmxldF9NU19NYWlsU2Vzc2lvbjwvbmFtZT4KKyAgICAgICAgPHN0b3JlLXByb3RvY29sPklNQVA8L3N0b3JlLXByb3RvY29sPgorICAgICAgICA8dHJhbnNwb3J0LXByb3RvY29sPlNNVFA8L3RyYW5zcG9ydC1wcm90b2NvbD4KKyAgICAgICAgPGhvc3Q+c29tZXdoZXJlLm15Y28uY29tPC9ob3N0PgorICAgICAgICA8dXNlcj5saW5kYTwvdXNlcj4KKyAgICAgICAgPHBhc3N3b3JkPnNlY3JldDwvcGFzc3dvcmQ+CisgICAgICAgIDxmcm9tPnNvbWUuYm9keUBteWNvLmNvbTwvZnJvbT4KKyAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgPG5hbWU+UHJvcGVydHkxPC9uYW1lPgorICAgICAgICAgICAgPHZhbHVlPjEwPC92YWx1ZT4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgPG5hbWU+UHJvcGVydHkyPC9uYW1lPgorICAgICAgICAgICAgPHZhbHVlPjIwPC92YWx1ZT4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICA8L21haWwtc2Vzc2lvbj4KIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcmVzb3VyY2VzL3NyYy9qYXZhL2NvbS9zdW4vZW50ZXJwcmlzZS9yZXNvdXJjZS9BZG1pbk9iamVjdFJlc291cmNlRGVwbG95ZXJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9yZXNvdXJjZXMvc3JjL2phdmEvY29tL3N1bi9lbnRlcnByaXNlL3Jlc291cmNlL0FkbWluT2JqZWN0UmVzb3VyY2VEZXBsb3llclRlc3QuamF2YQppbmRleCA5NDRhMmUzLi40OWNlYjEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9yZXNvdXJjZXMvc3JjL2phdmEvY29tL3N1bi9lbnRlcnByaXNlL3Jlc291cmNlL0FkbWluT2JqZWN0UmVzb3VyY2VEZXBsb3llclRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9yZXNvdXJjZXMvc3JjL2phdmEvY29tL3N1bi9lbnRlcnByaXNlL3Jlc291cmNlL0FkbWluT2JqZWN0UmVzb3VyY2VEZXBsb3llclRlc3QuamF2YQpAQCAtNTksNyArNTksNyBAQAogICAgICAgICAgICAgZmFpbCgiRXhjZXB0aW9uIGNhdWdodCAtPiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGVzdHMgdGhlIGRlcGxveVJlc291cmNlIG1ldGhvZC4KICAgICAgKi8KQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgICAgIGZhaWwoIkV4Y2VwdGlvbiBjYXVnaHQgLT4gIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRlc3RzIHRoZSBkZXBsb3lSZXNvdXJjZSBtZXRob2QuCiAgICAgICovCkBAIC05Nyw4ICs5Nyw4IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTd2l0Y2goKSB7CiAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBNYW5hZ2VtZW50T2JqZWN0TWFuYWdlciBnZXRNYW5hZ2VtZW50T2JqZWN0TWFuYWdlcigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSjJFRU1hbmFnZW1lbnRPYmplY3RNYW5hZ2VyKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQWRtaW5PYmplY3RSZXNvdXJjZShTdHJpbmcgbmFtZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmFOYW1lLCBTdHJpbmcgdHlwZSwgU3RyaW5nIFtdIG5hbWVzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCByZWdpc3RlckFkbWluT2JqZWN0UmVzb3VyY2UoU3RyaW5nIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmFOYW1lLCBTdHJpbmcgdHlwZSwgU3RyaW5nIFtdIG5hbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIFtdIHZhbHVlcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpzcjc3IFJlZ2lzdHJhdGlvbiBDb21wbGV0ZS4uLiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTEwNyw3ICsxMDcsNyBAQAogICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICB9CiAgICAgICAgIH07Ci0gICAgICAgIAorCiAgICAgICAgIC8vaW5pdGlhbGl6ZSB0aGUgZHVtbXkgcmVzb3VyY2Ugb2JqZWN0CiAgICAgICAgIHJlc291cmNlID0gbmV3IEFkbWluT2JqZWN0UmVzb3VyY2UoKTsKICAgICAgICAgcmVzb3VyY2Uuc2V0Sm5kaU5hbWUoImphdmFtYWlsL1Rlc3RlciIpOwpAQCAtMTIxLDcgKzEyMSw3IEBACiAgICAgICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoQWRtaW5PYmplY3RSZXNvdXJjZURlcGxveWVyVGVzdC5jbGFzcyk7CiAgICAgICAgIHJldHVybiBzdWl0ZTsKICAgICB9Ci0gICAgCisKICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIFRlc3RSdW5uZXIgcnVubmVyPSBuZXcgVGVzdFJ1bm5lcigpOwogICAgICAgICBmaW5hbCBUZXN0UmVzdWx0IHJlc3VsdCA9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9yZXNvdXJjZXMvc3JjL2phdmEvY29tL3N1bi9lbnRlcnByaXNlL3Jlc291cmNlL0Nvbm5lY3RvckNvbm5lY3Rpb25Qb29sRGVwbG95ZXJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9yZXNvdXJjZXMvc3JjL2phdmEvY29tL3N1bi9lbnRlcnByaXNlL3Jlc291cmNlL0Nvbm5lY3RvckNvbm5lY3Rpb25Qb29sRGVwbG95ZXJUZXN0LmphdmEKaW5kZXggOTdhZTNhOC4uNjhmNjU4NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcmVzb3VyY2VzL3NyYy9qYXZhL2NvbS9zdW4vZW50ZXJwcmlzZS9yZXNvdXJjZS9Db25uZWN0b3JDb25uZWN0aW9uUG9vbERlcGxveWVyVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3Jlc291cmNlcy9zcmMvamF2YS9jb20vc3VuL2VudGVycHJpc2UvcmVzb3VyY2UvQ29ubmVjdG9yQ29ubmVjdGlvblBvb2xEZXBsb3llclRlc3QuamF2YQpAQCAtNDYsMTAgKzQ2LDEwIEBACiAgICAgcHVibGljIENvbm5lY3RvckNvbm5lY3Rpb25Qb29sRGVwbG95ZXJUZXN0KFN0cmluZyBuYW1lKSB7CiAgICAgICAgICBzdXBlcihuYW1lKTsKICAgICB9Ci0gICAgCi0gICAgLy9UT0RPOiBTaG91bGQgdGhlciBiZSBhIHVuaXQgdGVzdCBmb3IgbnVsbCByZXNvdXJjZXMgcGFzc2VkIHRvIHRoZSAKKworICAgIC8vVE9ETzogU2hvdWxkIHRoZXIgYmUgYSB1bml0IHRlc3QgZm9yIG51bGwgcmVzb3VyY2VzIHBhc3NlZCB0byB0aGUKICAgICAvL2RlcGxveSBtZXRob2Q/Pz8KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRlc3RzIHRoZSBkZXBsb3lSZXNvdXJjZSBtZXRob2QuCiAgICAgICoKQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgICAgIGZhaWwoIkV4Y2VwdGlvbiBjYXVnaHQgLT4gIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRlc3RzIHRoZSBkZXBsb3lSZXNvdXJjZSBtZXRob2QuCiAgICAgICovCkBAIC04OCw3ICs4OCw3IEBACiAgICAgICAgICAgICBmYWlsKCJFeGNlcHRpb24gY2F1Z2h0IC0+ICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUZXN0cyB0aGUgZGVwbG95UmVzb3VyY2UgbWV0aG9kLgogICAgICAqLwpAQCAtMTEyLDkgKzExMiw5IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTd2l0Y2goKSB7CiAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBNYW5hZ2VtZW50T2JqZWN0TWFuYWdlciBnZXRNYW5hZ2VtZW50T2JqZWN0TWFuYWdlcigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSjJFRU1hbmFnZW1lbnRPYmplY3RNYW5hZ2VyKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVySk1TUmVzb3VyY2UoU3RyaW5nIG5hbWUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlc1R5cGUsIFN0cmluZyB1c2VybmFtZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGFzc3dvcmQsIFN0cmluZ1tdIHByb3BOYW1lcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcmVnaXN0ZXJKTVNSZXNvdXJjZShTdHJpbmcgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXNUeXBlLCBTdHJpbmcgdXNlcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGFzc3dvcmQsIFN0cmluZ1tdIHByb3BOYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1tdIHByb3BWYWx1ZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKc3I3NyBSZWdpc3RyYXRpb24gQ29tcGxldGUuLi4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMjMsNyArMTIzLDcgQEAKICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgfQogICAgICAgICB9OwotICAgICAgICAKKwogICAgICAgICAvL2luaXRpYWxpemUgdGhlIGR1bW15IHJlc291cmNlIG9iamVjdAogICAgICAgICByZXNvdXJjZSA9IG5ldyBDb25uZWN0b3JDb25uZWN0aW9uUG9vbCgpOwogICAgICAgICByZXNvdXJjZS5zZXROYW1lKCJqbXMvVGVzdGVyIik7CkBAIC0xMzcsNyArMTM3LDcgQEAKICAgICAgICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZShDb25uZWN0b3JDb25uZWN0aW9uUG9vbERlcGxveWVyVGVzdC5jbGFzcyk7CiAgICAgICAgIHJldHVybiBzdWl0ZTsKICAgICB9Ci0gICAgCisKICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIFRlc3RSdW5uZXIgcnVubmVyPSBuZXcgVGVzdFJ1bm5lcigpOwogICAgICAgICBmaW5hbCBUZXN0UmVzdWx0IHJlc3VsdCA9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9yZXNvdXJjZXMvc3JjL2phdmEvY29tL3N1bi9lbnRlcnByaXNlL3Jlc291cmNlL0dsb2JhbFJlc291cmNlRGVwbG95ZXJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9yZXNvdXJjZXMvc3JjL2phdmEvY29tL3N1bi9lbnRlcnByaXNlL3Jlc291cmNlL0dsb2JhbFJlc291cmNlRGVwbG95ZXJUZXN0LmphdmEKaW5kZXggNzliYTg3ZC4uOGI1NGUzOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcmVzb3VyY2VzL3NyYy9qYXZhL2NvbS9zdW4vZW50ZXJwcmlzZS9yZXNvdXJjZS9HbG9iYWxSZXNvdXJjZURlcGxveWVyVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3Jlc291cmNlcy9zcmMvamF2YS9jb20vc3VuL2VudGVycHJpc2UvcmVzb3VyY2UvR2xvYmFsUmVzb3VyY2VEZXBsb3llclRlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgIEVsZW1lbnRQcm9wZXJ0eSBbXSB0ZXN0UHJvcHM7CiAgICAgU3RyaW5nIFtdIHRlc3ROYW1lczsKICAgICBTdHJpbmcgW10gdGVzdFZhbHVlczsKLSAgICAKKwogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIENvbm5lY3RvckNvbm5lY3Rpb25Qb29sRGVwbG95ZXJUZXN0ICovCiAgICAgcHVibGljIEdsb2JhbFJlc291cmNlRGVwbG95ZXJUZXN0KFN0cmluZyBuYW1lKSB7CiAgICAgICAgICBzdXBlcihuYW1lKTsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc3VsdFsxXSwgdGVzdE5hbWVzWzFdKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc3VsdFsyXSwgdGVzdE5hbWVzWzJdKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUZXN0cyB0aGUgZ2V0UHJvcE5hbWVzQXNTdHJBcnIgbWV0aG9kIHdpdGggbnVsbCBwYXJhbS4KICAgICAgKgpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICBTdHJpbmcgW10gcmVzdWx0ID0gZGVwbG95ZXIuZ2V0UHJvcE5hbWVzQXNTdHJBcnIobnVsbCk7CiAgICAgICAgIGFzc2VydE51bGwocmVzdWx0KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUZXN0cyB0aGUgZ2V0UHJvcFZhbHVlc0FzU3RyQXJyIG1ldGhvZC4KICAgICAgKgpAQCAtNzQsOSArNzQsOSBAQAogICAgICAgICBhc3NlcnROb3ROdWxsKHJlc3VsdCk7CiAgICAgICAgIGFzc2VydEVxdWFscyhyZXN1bHRbMF0sIHRlc3RWYWx1ZXNbMF0pOwogICAgICAgICBhc3NlcnRFcXVhbHMocmVzdWx0WzFdLCB0ZXN0VmFsdWVzWzFdKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc3VsdFsyXSwgdGVzdFZhbHVlc1syXSk7ICAgCisgICAgICAgIGFzc2VydEVxdWFscyhyZXN1bHRbMl0sIHRlc3RWYWx1ZXNbMl0pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRlc3RzIHRoZSBnZXRQcm9wVmFsdWVzQXNTdHJBcnIgbWV0aG9kIHdpdGggbnVsbCBwYXJhbS4KICAgICAgKi8KQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgICAgU3RyaW5nIFtdIHJlc3VsdCA9IGRlcGxveWVyLmdldFByb3BWYWx1ZXNBc1N0ckFycihudWxsKTsKICAgICAgICAgYXNzZXJ0TnVsbChyZXN1bHQpOwogICAgIH0KLSAgICAKKwogICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgewogICAgICAgIGRlcGxveWVyID0gbmV3IE1haWxSZXNvdXJjZURlcGxveWVyKCk7CiAgICAgICAgRWxlbWVudFByb3BlcnR5IHByb3AxID0gbmV3IEVsZW1lbnRQcm9wZXJ0eSgpOwpAQCAtMTA4LDcgKzEwOCw3IEBACiAgICAgICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoR2xvYmFsUmVzb3VyY2VEZXBsb3llclRlc3QuY2xhc3MpOwogICAgICAgICByZXR1cm4gc3VpdGU7CiAgICAgfQotICAgIAorCiAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBmaW5hbCBUZXN0UnVubmVyIHJ1bm5lcj0gbmV3IFRlc3RSdW5uZXIoKTsKICAgICAgICAgZmluYWwgVGVzdFJlc3VsdCByZXN1bHQgPQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcmVzb3VyY2VzL3NyYy9qYXZhL2NvbS9zdW4vZW50ZXJwcmlzZS9yZXNvdXJjZS9NYWlsUmVzb3VyY2VEZXBsb3llclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3Jlc291cmNlcy9zcmMvamF2YS9jb20vc3VuL2VudGVycHJpc2UvcmVzb3VyY2UvTWFpbFJlc291cmNlRGVwbG95ZXJUZXN0LmphdmEKaW5kZXggYmFlMmRmZC4uMzliZDgxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcmVzb3VyY2VzL3NyYy9qYXZhL2NvbS9zdW4vZW50ZXJwcmlzZS9yZXNvdXJjZS9NYWlsUmVzb3VyY2VEZXBsb3llclRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9yZXNvdXJjZXMvc3JjL2phdmEvY29tL3N1bi9lbnRlcnByaXNlL3Jlc291cmNlL01haWxSZXNvdXJjZURlcGxveWVyVGVzdC5qYXZhCkBAIC00NiwxMCArNDYsMTAgQEAKICAgICBwdWJsaWMgTWFpbFJlc291cmNlRGVwbG95ZXJUZXN0KFN0cmluZyBuYW1lKSB7CiAgICAgICAgICBzdXBlcihuYW1lKTsKICAgICB9Ci0gICAgCi0gICAgLy9UT0RPOiBTaG91bGQgdGhlciBiZSBhIHVuaXQgdGVzdCBmb3IgbnVsbCByZXNvdXJjZXMgcGFzc2VkIHRvIHRoZSAKKworICAgIC8vVE9ETzogU2hvdWxkIHRoZXIgYmUgYSB1bml0IHRlc3QgZm9yIG51bGwgcmVzb3VyY2VzIHBhc3NlZCB0byB0aGUKICAgICAvL2RlcGxveSBtZXRob2Q/Pz8KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRlc3RzIHRoZSBkZXBsb3lSZXNvdXJjZSBtZXRob2QuCiAgICAgICoKQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgICAgIGZhaWwoIkV4Y2VwdGlvbiBjYXVnaHQgLT4gIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRlc3RzIHRoZSBkZXBsb3lSZXNvdXJjZSBtZXRob2QuCiAgICAgICovCkBAIC04OCw3ICs4OCw3IEBACiAgICAgICAgICAgICBmYWlsKCJFeGNlcHRpb24gY2F1Z2h0IC0+ICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUZXN0cyB0aGUgZGVwbG95UmVzb3VyY2UgbWV0aG9kLgogICAgICAqLwpAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgICAgICAgICBmYWlsKCJFeGNlcHRpb24gY2F1Z2h0IC0+ICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUZXN0cyB0aGUgbWV0aG9kIGZvciBpbnN0YWxsaW5nIGEgbWFpbCByZXNvdXJjZS4KICAgICAgKi8KQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoIkV4Y2VwdGlvbiBjYXVnaHQgLT4gIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KIAogICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgewpAQCAtMTMzLDcgKzEzMyw3IEBACiAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBSZXNvdXJjZUluc3RhbGxlciBnZXRSZXNvdXJjZUluc3RhbGxlcigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVzb3VyY2VJbnN0YWxsZXIoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgaW5zdGFsbE1haWxSZXNvdXJjZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tLnN1bi5lbnRlcnByaXNlLnJlcG9zaXRvcnkuTWFpbFJlc291cmNlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb20uc3VuLmVudGVycHJpc2UucmVwb3NpdG9yeS5NYWlsUmVzb3VyY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlsUmVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5zdGFsbGVkIGludG8gUnVudGltZS4uLiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE0Miw3ICsxNDIsNyBAQAogICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICB9CiAgICAgICAgIH07Ci0gICAgICAgIAorCiAgICAgICAgIC8vaW5pdGlhbGl6ZSB0aGUgZHVtbXkgcmVzb3VyY2Ugb2JqZWN0CiAgICAgICAgIHJlc291cmNlID0gbmV3IE1haWxSZXNvdXJjZSgpOwogICAgICAgICByZXNvdXJjZS5zZXRKbmRpTmFtZSgiamF2YW1haWwvVGVzdGVyIik7CkBAIC0xNTYsNyArMTU2LDcgQEAKICAgICAgICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZShNYWlsUmVzb3VyY2VEZXBsb3llclRlc3QuY2xhc3MpOwogICAgICAgICByZXR1cm4gc3VpdGU7CiAgICAgfQotICAgIAorCiAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBmaW5hbCBUZXN0UnVubmVyIHJ1bm5lcj0gbmV3IFRlc3RSdW5uZXIoKTsKICAgICAgICAgZmluYWwgVGVzdFJlc3VsdCByZXN1bHQgPQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvYnVpbGQueG1sCmluZGV4IDc3ZWM1YzEuLjYxYTkyODMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC9idWlsZC54bWwKQEAgLTQ5LDkgKzQ5LDkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgU2VsZm1hbmFnZW1lbnQgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgU2VsZm1hbmFnZW1lbnQgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvY29tbW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L2NvbW1vbi54bWwKaW5kZXggNTkxMzFmMC4uNTJjOGJiYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvY29tbW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC9jb21tb24ueG1sCkBAIC0xMjMsMTAgKzEyMywxMCBAQAogICAgICAgICA8YXJnIGxpbmU9Ii0tYWN0aW9uICR7YWN0aW9uLm1iZWFuLm5hbWV9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iLS1ldmVudHR5cGUgJHtzZWxmbWFuYWdlbWVudC5ydWxlLmV2ZW50dHlwZX0iLz4KICAgICAgICAgPGFyZyBsaW5lPSItLWV2ZW50bG9nbGV2ZWwgJHtzZWxmbWFuYWdlbWVudC5ydWxlLmV2ZW50bG9nbGV2ZWx9Ii8+Ci0gICAgICAgIDxhcmcgbGluZT0iLS1ldmVudHByb3BlcnRpZXMgJHtzZWxmbWFuYWdlbWVudC5ydWxlLmV2ZW50cHJvcGVydGllc30iLz4gCisgICAgICAgIDxhcmcgbGluZT0iLS1ldmVudHByb3BlcnRpZXMgJHtzZWxmbWFuYWdlbWVudC5ydWxlLmV2ZW50cHJvcGVydGllc30iLz4KICAgICAgICAgPGFyZyBsaW5lPSIke3NlbGZtYW5hZ2VtZW50LnJ1bGUubmFtZX0iLz4KICAgICA8L2V4ZWM+Ci08L3RhcmdldD4gCis8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJ1bmRlcGxveS1zZWxmbWdtdC1ydWxlLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWV2ZW50LW1iZWFuLWNvbW1vbiIgLz4KQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgICAgICA8YXJnIGxpbmU9IiR7ZXZlbnQubWJlYW4ubmFtZX0iLz4KICAgICA8L2V4ZWM+CiA8L3RhcmdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKIDx0YXJnZXQgbmFtZT0iZGVsZXRlLWFjdGlvbi1tYmVhbi1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIDxlY2hvIG1lc3NhZ2U9ImRlbGV0ZWQgQWN0aW9uIE1CZWFuICR7YWN0aW9uLm1iZWFuLm5hbWV9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CkBAIC0xODUsNyArMTg1LDcgQEAKICAgICA8YXJnIGxpbmU9Ii1jbGllbnQgJHthcHBjbGllbnQuamFyfSIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgPC9leGVjPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogPCEtLSBjb25maXJtaW5nIHJlcG9ydCBnZW5lcmF0aW9uLi4uIC0tPgogPCEtLSAgICA8YW50Y2FsbCB0YXJnZXQ9ImNoZWNrUmVwb3J0aW5nLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0Lm5hbWUiIHZhbHVlPSIke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC9yZXBvcnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvcmVwb3J0LnhtbAppbmRleCBiMjI4OTQxLi5jMmVmOWJkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC9yZXBvcnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3JlcG9ydC54bWwKQEAgLTIzLDcgKzIzLDcgQEAKIDx0YXJnZXQgbmFtZT0icmVwb3J0Ij4KIDxlY2hvIG1lc3NhZ2U9IkNvbXBhcmluZyByZXN1bHRzIHdpdGggZXhwZWN0ZWQgcmVzdWx0cyIvPgogCi0gCisKICAgICA8eHNsdCBzdHlsZT0iJHtzdHlsZXNoZWV0fSIKICAgICAgICAgICAgIGluPSIke3htbGZpbGV9IiBvdXQ9IiR7aHRtbGZpbGV9IgogICAgICAgICAgICAgYmFzZWRpcj0iLiIgZGVzdGRpcj0iLiIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3RsaWZlY3ljbGUvYWN0aW9uL0xpZmVjeWNsZVJlYWR5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bGlmZWN5Y2xlL2FjdGlvbi9MaWZlY3ljbGVSZWFkeS5qYXZhCmluZGV4IGRkNzdiMDQuLjg1OWViOTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3RsaWZlY3ljbGUvYWN0aW9uL0xpZmVjeWNsZVJlYWR5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdGxpZmVjeWNsZS9hY3Rpb24vTGlmZWN5Y2xlUmVhZHkuamF2YQpAQCAtMTgsMTQgKzE4LDE0IEBACiAKIGltcG9ydCBqYXZheC5tYW5hZ2VtZW50Lio7CiBpbXBvcnQgamF2YS5pby4qOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLXB1YmxpYyBjbGFzcyBMaWZlY3ljbGVSZWFkeSBpbXBsZW1lbnRzIE5vdGlmaWNhdGlvbkxpc3RlbmVyLCAKKworcHVibGljIGNsYXNzIExpZmVjeWNsZVJlYWR5IGltcGxlbWVudHMgTm90aWZpY2F0aW9uTGlzdGVuZXIsCiAgICAgY29tLnN1bi5zMXBlcWUuc2VsZm1hbmFnZW1lbnQudGxpZmVjeWNsZS5hY3Rpb24uTGlmZWN5Y2xlUmVhZHlNQmVhbiB7Ci0gICAgCisKICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBKTVhfTElGRUNZQ0xFX1JFQURZID0gImxpZmVjeWNsZS5yZWFkeSI7CiAgICAgcHVibGljIExpZmVjeWNsZVJlYWR5KCkgewogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBoYW5kbGVOb3RpZmljYXRpb24oTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiwKICAgICAgICAgT2JqZWN0IGhhbmRiYWNrKSB7CiAgICAgICAgIHRyeSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bGlmZWN5Y2xlL2FjdGlvbi9MaWZlY3ljbGVSZWFkeU1CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bGlmZWN5Y2xlL2FjdGlvbi9MaWZlY3ljbGVSZWFkeU1CZWFuLmphdmEKaW5kZXggYjdiZmVmZi4uNmFhNTZmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdGxpZmVjeWNsZS9hY3Rpb24vTGlmZWN5Y2xlUmVhZHlNQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3RsaWZlY3ljbGUvYWN0aW9uL0xpZmVjeWNsZVJlYWR5TUJlYW4uamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20uc3VuLnMxcGVxZS5zZWxmbWFuYWdlbWVudC50bGlmZWN5Y2xlLmFjdGlvbjsKIAogaW1wb3J0IGphdmF4Lm1hbmFnZW1lbnQuKjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKIHB1YmxpYyBpbnRlcmZhY2UgTGlmZWN5Y2xlUmVhZHlNQmVhbiB7CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3RsaWZlY3ljbGUvYWN0aW9uL0xpZmVjeWNsZVNodXRkb3duLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bGlmZWN5Y2xlL2FjdGlvbi9MaWZlY3ljbGVTaHV0ZG93bi5qYXZhCmluZGV4IGQ5NTMxYTIuLjA5MDU1NmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3RsaWZlY3ljbGUvYWN0aW9uL0xpZmVjeWNsZVNodXRkb3duLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdGxpZmVjeWNsZS9hY3Rpb24vTGlmZWN5Y2xlU2h1dGRvd24uamF2YQpAQCAtMTgsMTQgKzE4LDE0IEBACiAKIGltcG9ydCBqYXZheC5tYW5hZ2VtZW50Lio7CiBpbXBvcnQgamF2YS5pby4qOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLXB1YmxpYyBjbGFzcyBMaWZlY3ljbGVTaHV0ZG93biBpbXBsZW1lbnRzIE5vdGlmaWNhdGlvbkxpc3RlbmVyLCAKKworcHVibGljIGNsYXNzIExpZmVjeWNsZVNodXRkb3duIGltcGxlbWVudHMgTm90aWZpY2F0aW9uTGlzdGVuZXIsCiAgICAgY29tLnN1bi5zMXBlcWUuc2VsZm1hbmFnZW1lbnQudGxpZmVjeWNsZS5hY3Rpb24uTGlmZWN5Y2xlU2h1dGRvd25NQmVhbiB7Ci0gICAgCisKICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBKTVhfTElGRUNZQ0xFX1NIVVRET1dOID0gImxpZmVjeWNsZS5zaHV0ZG93biI7CiAgICAgcHVibGljIExpZmVjeWNsZVNodXRkb3duKCkgewogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgaGFuZGxlTm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24sCiAgICAgICAgICAgICAgICAgT2JqZWN0IGhhbmRiYWNrKSB7CiAgICAgICAgIHRyeSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bGlmZWN5Y2xlL2FjdGlvbi9MaWZlY3ljbGVTaHV0ZG93bk1CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bGlmZWN5Y2xlL2FjdGlvbi9MaWZlY3ljbGVTaHV0ZG93bk1CZWFuLmphdmEKaW5kZXggNmJhNzI4MS4uZmIwN2Q3NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdGxpZmVjeWNsZS9hY3Rpb24vTGlmZWN5Y2xlU2h1dGRvd25NQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3RsaWZlY3ljbGUvYWN0aW9uL0xpZmVjeWNsZVNodXRkb3duTUJlYW4uamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20uc3VuLnMxcGVxZS5zZWxmbWFuYWdlbWVudC50bGlmZWN5Y2xlLmFjdGlvbjsKIAogaW1wb3J0IGphdmF4Lm1hbmFnZW1lbnQuKjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKIHB1YmxpYyBpbnRlcmZhY2UgTGlmZWN5Y2xlU2h1dGRvd25NQmVhbiB7CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3RsaWZlY3ljbGUvYWN0aW9uL0xpZmVjeWNsZVRlcm1pbmF0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bGlmZWN5Y2xlL2FjdGlvbi9MaWZlY3ljbGVUZXJtaW5hdGlvbi5qYXZhCmluZGV4IDkyMzY3OWMuLmIxM2I0OGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3RsaWZlY3ljbGUvYWN0aW9uL0xpZmVjeWNsZVRlcm1pbmF0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdGxpZmVjeWNsZS9hY3Rpb24vTGlmZWN5Y2xlVGVybWluYXRpb24uamF2YQpAQCAtMTgsMTUgKzE4LDE1IEBACiAKIGltcG9ydCBqYXZheC5tYW5hZ2VtZW50Lio7CiBpbXBvcnQgamF2YS5pby4qOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLXB1YmxpYyBjbGFzcyBMaWZlY3ljbGVUZXJtaW5hdGlvbiAKLSAgICBpbXBsZW1lbnRzIE5vdGlmaWNhdGlvbkxpc3RlbmVyLCAKKworcHVibGljIGNsYXNzIExpZmVjeWNsZVRlcm1pbmF0aW9uCisgICAgaW1wbGVtZW50cyBOb3RpZmljYXRpb25MaXN0ZW5lciwKICAgICBjb20uc3VuLnMxcGVxZS5zZWxmbWFuYWdlbWVudC50bGlmZWN5Y2xlLmFjdGlvbi5MaWZlY3ljbGVUZXJtaW5hdGlvbk1CZWFuIHsKLSAgICAKKwogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIEpNWF9MSUZFQ1lDTEVfVEVSTUlOQVRJT04gPSAibGlmZWN5Y2xlLnRlcm1pbmF0aW9uIjsKICAgICBwdWJsaWMgTGlmZWN5Y2xlVGVybWluYXRpb24oKSB7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBoYW5kbGVOb3RpZmljYXRpb24oTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiwKICAgICAgICAgT2JqZWN0IGhhbmRiYWNrKSB7CiAgICAgICAgIHRyeSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bGlmZWN5Y2xlL2FjdGlvbi9MaWZlY3ljbGVUZXJtaW5hdGlvbk1CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bGlmZWN5Y2xlL2FjdGlvbi9MaWZlY3ljbGVUZXJtaW5hdGlvbk1CZWFuLmphdmEKaW5kZXggMzM0NjZjOC4uNjI4M2IxZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdGxpZmVjeWNsZS9hY3Rpb24vTGlmZWN5Y2xlVGVybWluYXRpb25NQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3RsaWZlY3ljbGUvYWN0aW9uL0xpZmVjeWNsZVRlcm1pbmF0aW9uTUJlYW4uamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20uc3VuLnMxcGVxZS5zZWxmbWFuYWdlbWVudC50bGlmZWN5Y2xlLmFjdGlvbjsKIAogaW1wb3J0IGphdmF4Lm1hbmFnZW1lbnQuKjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKIHB1YmxpYyBpbnRlcmZhY2UgTGlmZWN5Y2xlVGVybWluYXRpb25NQmVhbiB7CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3RsaWZlY3ljbGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3RsaWZlY3ljbGUvYnVpbGQucHJvcGVydGllcwppbmRleCAzZTE3ZTBhLi5kNGJlYjA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bGlmZWN5Y2xlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdGxpZmVjeWNsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InRsaWZlY3ljbGUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgpAQCAtMjYsNyArMjYsNyBAQAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIAotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHttb2R1bGV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyLm5hbWUiIHZhbHVlPSIke21vZHVsZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3RsaWZlY3ljbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdGxpZmVjeWNsZS9idWlsZC54bWwKaW5kZXggMDFhYzhiNS4uMTM3ZjE5NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdGxpZmVjeWNsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdGxpZmVjeWNsZS9idWlsZC54bWwKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgdmFsdWU9IioqL0xpZmVjeWNsZSouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1zZWxmbWdtdC1qYXItY29tbW9uIj4KICAgICAgICAgPC9hbnRjYWxsPgpAQCAtMTE3LDExICsxMTcsMTEgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1zZWxmbWFuYWdlbWVudC1qYXIiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RvcERvbWFpbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9hY3Rpb24vR2F1Z2VIaWdoLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9hY3Rpb24vR2F1Z2VIaWdoLmphdmEKaW5kZXggYjI1NWQ2ZS4uZDk3MGU4NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG1vbml0b3IvYWN0aW9uL0dhdWdlSGlnaC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2FjdGlvbi9HYXVnZUhpZ2guamF2YQpAQCAtMjMsNyArMjMsNyBAQAogICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBKTVhfTU9OSVRPUl9HQVVHRV9ISUdIID0gImpteC5tb25pdG9yLmdhdWdlLmhpZ2giOwogICAgICAgICBwdWJsaWMgR2F1Z2VIaWdoKCkgewogICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBoYW5kbGVOb3RpZmljYXRpb24oTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBoYW5kYmFjaykgewogICAgICAgICAgIHRyeSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9hY3Rpb24vR2F1Z2VIaWdoTUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2FjdGlvbi9HYXVnZUhpZ2hNQmVhbi5qYXZhCmluZGV4IGI5ZGQyMTcuLmJhMGMxMDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2FjdGlvbi9HYXVnZUhpZ2hNQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2FjdGlvbi9HYXVnZUhpZ2hNQmVhbi5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5zdW4uczFwZXFlLnNlbGZtYW5hZ2VtZW50LnRtb25pdG9yLmFjdGlvbjsKIAogaW1wb3J0IGphdmF4Lm1hbmFnZW1lbnQuKjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKIHB1YmxpYyBpbnRlcmZhY2UgR2F1Z2VIaWdoTUJlYW4gewogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9hY3Rpb24vR2F1Z2VMb3cuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2FjdGlvbi9HYXVnZUxvdy5qYXZhCmluZGV4IGU3ODdkNGQuLjgwYmU3MDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2FjdGlvbi9HYXVnZUxvdy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2FjdGlvbi9HYXVnZUxvdy5qYXZhCkBAIC0xOSwxMiArMTksMTIgQEAKIGltcG9ydCBqYXZheC5tYW5hZ2VtZW50Lio7CiBpbXBvcnQgamF2YS5pby4qOwogCi1wdWJsaWMgY2xhc3MgR2F1Z2VMb3cgaW1wbGVtZW50cyBOb3RpZmljYXRpb25MaXN0ZW5lciwgCitwdWJsaWMgY2xhc3MgR2F1Z2VMb3cgaW1wbGVtZW50cyBOb3RpZmljYXRpb25MaXN0ZW5lciwKICAgICAgY29tLnN1bi5zMXBlcWUuc2VsZm1hbmFnZW1lbnQudG1vbml0b3IuYWN0aW9uLkdhdWdlTG93TUJlYW4gewogICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBKTVhfTU9OSVRPUl9HQVVHRV9MT1cgPSAiam14Lm1vbml0b3IuZ2F1Z2UubG93IjsKICAgICAgICAgcHVibGljIEdhdWdlTG93KCkgewogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBoYW5kbGVOb3RpZmljYXRpb24oTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBoYW5kYmFjaykgewogICAgICAgICAgIHRyeSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9hY3Rpb24vR2F1Z2VMb3dNQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG1vbml0b3IvYWN0aW9uL0dhdWdlTG93TUJlYW4uamF2YQppbmRleCA0ODdlMTIzLi4yZmFjZmNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9hY3Rpb24vR2F1Z2VMb3dNQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2FjdGlvbi9HYXVnZUxvd01CZWFuLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29tLnN1bi5zMXBlcWUuc2VsZm1hbmFnZW1lbnQudG1vbml0b3IuYWN0aW9uOwogCiBpbXBvcnQgamF2YXgubWFuYWdlbWVudC4qOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogcHVibGljIGludGVyZmFjZSBHYXVnZUxvd01CZWFuIHsKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG1vbml0b3IvYWN0aW9uL0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9hY3Rpb24vSGVsbG8uamF2YQppbmRleCA0ZWMxNmY0Li4xZmNlZTk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9hY3Rpb24vSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9hY3Rpb24vSGVsbG8uamF2YQpAQCAtMjIsMjMgKzIyLDIzIEBACiBwdWJsaWMgY2xhc3MgSGVsbG8gaW1wbGVtZW50cyBOb3RpZmljYXRpb25MaXN0ZW5lciwgY29tLnN1bi5zMXBlcWUuc2VsZm1hbmFnZW1lbnQudG1vbml0b3IuYWN0aW9uLkhlbGxvTUJlYW4gewogCiAgICAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIEpNWF9NT05JVE9SX0NPVU5URVJfVEhSRVNIT0xEID0gImpteC5tb25pdG9yLmNvdW50ZXIudGhyZXNob2xkIjsKLQlwdWJsaWMgSGVsbG8oKSB7IAorICAgIHB1YmxpYyBIZWxsbygpIHsKICAgICAgICAgfQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBoYW5kbGVOb3RpZmljYXRpb24oTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiwKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgaGFuZGxlTm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QgaGFuZGJhY2spIHsKICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICBGaWxlV3JpdGVyIG91dCA9IG5ldyBGaWxlV3JpdGVyKG5ldyBGaWxlKCIvc3BhY2Uvc2VsZm1hbmFnZW1lbnRSZXN1bHQudHh0IikpOwogICAgICAgICAgICAgICAgICBpZihub3RpZmljYXRpb24gIT0gbnVsbCkgewotCQkgICAgIGlmKG5vdGlmaWNhdGlvbi5nZXRUeXBlKCkuZXF1YWxzKEpNWF9NT05JVE9SX0NPVU5URVJfVEhSRVNIT0xEKSkgeworICAgICAgICAgICAgIGlmKG5vdGlmaWNhdGlvbi5nZXRUeXBlKCkuZXF1YWxzKEpNWF9NT05JVE9SX0NPVU5URVJfVEhSRVNIT0xEKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBQQVNTRUQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGUoIkNvdW50ZXIgTW9uaXRvciBUZXN0IC0gUEFTU0VEXG4iKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBGQUlMRUQiKTsKLQkgICAgICAgICAgICAgb3V0LndyaXRlKCJDb3VudGVyIE1vbml0b3IgVGVzdCAtIEZBSUxFRFxuIik7CisgICAgICAgICAgICAgICAgIG91dC53cml0ZSgiQ291bnRlciBNb25pdG9yIFRlc3QgLSBGQUlMRURcbiIpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIG91dC5mbHVzaCgpOwogICAgICAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7IH0KLQl9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG1vbml0b3IvYWN0aW9uL0hlbGxvTUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2FjdGlvbi9IZWxsb01CZWFuLmphdmEKaW5kZXggMGEyZDkwMS4uNzFlZmJkMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG1vbml0b3IvYWN0aW9uL0hlbGxvTUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9hY3Rpb24vSGVsbG9NQmVhbi5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5zdW4uczFwZXFlLnNlbGZtYW5hZ2VtZW50LnRtb25pdG9yLmFjdGlvbjsKIAogaW1wb3J0IGphdmF4Lm1hbmFnZW1lbnQuKjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKIHB1YmxpYyBpbnRlcmZhY2UgSGVsbG9NQmVhbiB7CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2FjdGlvbi9TdHJpbmdEaWZmZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2FjdGlvbi9TdHJpbmdEaWZmZXIuamF2YQppbmRleCA4YmI3MzVjLi40ODIyYjJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9hY3Rpb24vU3RyaW5nRGlmZmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG1vbml0b3IvYWN0aW9uL1N0cmluZ0RpZmZlci5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgamF2YXgubWFuYWdlbWVudC4qOwogaW1wb3J0IGphdmEuaW8uKjsKIAotcHVibGljIGNsYXNzIFN0cmluZ0RpZmZlciBpbXBsZW1lbnRzIE5vdGlmaWNhdGlvbkxpc3RlbmVyLCAKK3B1YmxpYyBjbGFzcyBTdHJpbmdEaWZmZXIgaW1wbGVtZW50cyBOb3RpZmljYXRpb25MaXN0ZW5lciwKICAgICBjb20uc3VuLnMxcGVxZS5zZWxmbWFuYWdlbWVudC50bW9uaXRvci5hY3Rpb24uU3RyaW5nRGlmZmVyTUJlYW4gewogICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBKTVhfTU9OSVRPUl9TVFJJTkdfRElGRkVSUyA9ICJqbXgubW9uaXRvci5zdHJpbmcuZGlmZmVycyI7CiAgICAgICAgIHB1YmxpYyBTdHJpbmdEaWZmZXIoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9hY3Rpb24vU3RyaW5nRGlmZmVyTUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2FjdGlvbi9TdHJpbmdEaWZmZXJNQmVhbi5qYXZhCmluZGV4IDVlYWU3NWEuLmJmODBhYTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2FjdGlvbi9TdHJpbmdEaWZmZXJNQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2FjdGlvbi9TdHJpbmdEaWZmZXJNQmVhbi5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5zdW4uczFwZXFlLnNlbGZtYW5hZ2VtZW50LnRtb25pdG9yLmFjdGlvbjsKIAogaW1wb3J0IGphdmF4Lm1hbmFnZW1lbnQuKjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKIHB1YmxpYyBpbnRlcmZhY2UgU3RyaW5nRGlmZmVyTUJlYW4gewogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9hY3Rpb24vU3RyaW5nTWF0Y2guamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2FjdGlvbi9TdHJpbmdNYXRjaC5qYXZhCmluZGV4IDg0MmE0N2MuLjg3MzRiNGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2FjdGlvbi9TdHJpbmdNYXRjaC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2FjdGlvbi9TdHJpbmdNYXRjaC5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgamF2YXgubWFuYWdlbWVudC4qOwogaW1wb3J0IGphdmEuaW8uKjsKIAotcHVibGljIGNsYXNzIFN0cmluZ01hdGNoIGltcGxlbWVudHMgTm90aWZpY2F0aW9uTGlzdGVuZXIsIAorcHVibGljIGNsYXNzIFN0cmluZ01hdGNoIGltcGxlbWVudHMgTm90aWZpY2F0aW9uTGlzdGVuZXIsCiAgICAgY29tLnN1bi5zMXBlcWUuc2VsZm1hbmFnZW1lbnQudG1vbml0b3IuYWN0aW9uLlN0cmluZ01hdGNoTUJlYW4gewogICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBKTVhfTU9OSVRPUl9TVFJJTkdfTUFUQ0hFUyA9ICJqbXgubW9uaXRvci5zdHJpbmcubWF0Y2hlcyI7CiAgICAgICAgIHB1YmxpYyBTdHJpbmdNYXRjaCgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2FjdGlvbi9TdHJpbmdNYXRjaE1CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9hY3Rpb24vU3RyaW5nTWF0Y2hNQmVhbi5qYXZhCmluZGV4IGNhYTVmMmYuLmU4MDA5MTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2FjdGlvbi9TdHJpbmdNYXRjaE1CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG1vbml0b3IvYWN0aW9uL1N0cmluZ01hdGNoTUJlYW4uamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20uc3VuLnMxcGVxZS5zZWxmbWFuYWdlbWVudC50bW9uaXRvci5hY3Rpb247CiAKIGltcG9ydCBqYXZheC5tYW5hZ2VtZW50Lio7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiBwdWJsaWMgaW50ZXJmYWNlIFN0cmluZ01hdGNoTUJlYW4gewogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG1vbml0b3IvYnVpbGQucHJvcGVydGllcwppbmRleCA3ZTcyZTQwLi43YzJlNzhlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0idG1vbml0b3IiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmRlc2NyaXB0aW9uIiB2YWx1ZT0iU2VsZm1hbmFnZW1lbnQtTW9uaXRvci1UZXN0cyIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CkBAIC0yNiw3ICsyNiw3IEBACiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogCi08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGV9LyR7bW9kdWxlfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50Lmphci5uYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9idWlsZC54bWwKaW5kZXggNDRiM2MxYi4uOWY4Y2Q3ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG1vbml0b3IvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2J1aWxkLnhtbApAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXNlbGZtZ210LWphci1jb21tb24iPgogICAgICAgICA8L2FudGNhbGw+CkBAIC0xNTQsMTAgKzE1NCwxMCBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1zZWxmbWFuYWdlbWVudC1qYXIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wRG9tYWluIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9ldmVudC9HYXVnZUhpZ2guamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2V2ZW50L0dhdWdlSGlnaC5qYXZhCmluZGV4IDE1YTBjNzMuLjBmNjA2MWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2V2ZW50L0dhdWdlSGlnaC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2V2ZW50L0dhdWdlSGlnaC5qYXZhCkBAIC0xNywxNCArMTcsMTQgQEAKIHBhY2thZ2UgY29tLnN1bi5zMXBlcWUuc2VsZm1hbmFnZW1lbnQudG1vbml0b3IuZXZlbnQ7CiAKIHB1YmxpYyBjbGFzcyBHYXVnZUhpZ2ggaW1wbGVtZW50cyBjb20uc3VuLnMxcGVxZS5zZWxmbWFuYWdlbWVudC50bW9uaXRvci5ldmVudC5HYXVnZUhpZ2hNQmVhbiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyBHYXVnZUhpZ2goKSB7fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgZG91YmxlIGdldFZhbHVlKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwcml2YXRlIGRvdWJsZSB2YWx1ZSA9IDEwOwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9ldmVudC9HYXVnZUhpZ2hNQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG1vbml0b3IvZXZlbnQvR2F1Z2VIaWdoTUJlYW4uamF2YQppbmRleCA0NDU1ZGE4Li5jYTY2MmI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9ldmVudC9HYXVnZUhpZ2hNQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2V2ZW50L0dhdWdlSGlnaE1CZWFuLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29tLnN1bi5zMXBlcWUuc2VsZm1hbmFnZW1lbnQudG1vbml0b3IuZXZlbnQ7CiAKIHB1YmxpYyBpbnRlcmZhY2UgR2F1Z2VIaWdoTUJlYW4gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgZG91YmxlIGdldFZhbHVlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2V2ZW50L0dhdWdlTG93LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9ldmVudC9HYXVnZUxvdy5qYXZhCmluZGV4IDA0YzM4ZDYuLmJiYWI5MTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2V2ZW50L0dhdWdlTG93LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG1vbml0b3IvZXZlbnQvR2F1Z2VMb3cuamF2YQpAQCAtMTcsMTQgKzE3LDE0IEBACiBwYWNrYWdlIGNvbS5zdW4uczFwZXFlLnNlbGZtYW5hZ2VtZW50LnRtb25pdG9yLmV2ZW50OwogCiBwdWJsaWMgY2xhc3MgR2F1Z2VMb3cgaW1wbGVtZW50cyBjb20uc3VuLnMxcGVxZS5zZWxmbWFuYWdlbWVudC50bW9uaXRvci5ldmVudC5HYXVnZUxvd01CZWFuIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIEdhdWdlTG93KCkge30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIGRvdWJsZSBnZXRWYWx1ZSgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHJpdmF0ZSBkb3VibGUgdmFsdWUgPSAxOwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9ldmVudC9HYXVnZUxvd01CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9ldmVudC9HYXVnZUxvd01CZWFuLmphdmEKaW5kZXggYzVjYjM3NS4uZWFlM2I1NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG1vbml0b3IvZXZlbnQvR2F1Z2VMb3dNQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2V2ZW50L0dhdWdlTG93TUJlYW4uamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20uc3VuLnMxcGVxZS5zZWxmbWFuYWdlbWVudC50bW9uaXRvci5ldmVudDsKIAogcHVibGljIGludGVyZmFjZSBHYXVnZUxvd01CZWFuIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIGRvdWJsZSBnZXRWYWx1ZSgpOwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9ldmVudC9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG1vbml0b3IvZXZlbnQvSGVsbG8uamF2YQppbmRleCBiY2U5YjI1Li45MGNiZDkwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9ldmVudC9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2V2ZW50L0hlbGxvLmphdmEKQEAgLTIxLDkgKzIxLDkgQEAKICAgICBwdWJsaWMgSGVsbG8oKSB7fQogCiAgICAgcHVibGljIGxvbmcgZ2V0VmFsdWUoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIHJldHVybiB0aGlzLnZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCisgICAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgbG9uZyB2YWx1ZSA9IDEwOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG1vbml0b3IvZXZlbnQvU3RyaW5nRGlmZmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9ldmVudC9TdHJpbmdEaWZmZXIuamF2YQppbmRleCBmYzc5Y2QyLi4wMTFiNWY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9ldmVudC9TdHJpbmdEaWZmZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9ldmVudC9TdHJpbmdEaWZmZXIuamF2YQpAQCAtMTcsMTQgKzE3LDE0IEBACiBwYWNrYWdlIGNvbS5zdW4uczFwZXFlLnNlbGZtYW5hZ2VtZW50LnRtb25pdG9yLmV2ZW50OwogCiBwdWJsaWMgY2xhc3MgU3RyaW5nRGlmZmVyIGltcGxlbWVudHMgY29tLnN1bi5zMXBlcWUuc2VsZm1hbmFnZW1lbnQudG1vbml0b3IuZXZlbnQuU3RyaW5nRGlmZmVyTUJlYW4gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgU3RyaW5nRGlmZmVyKCkge30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRWYWx1ZSgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgdmFsdWUgPSAiY29uZGVuc2F0aW9uIjsKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG1vbml0b3IvZXZlbnQvU3RyaW5nRGlmZmVyTUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2V2ZW50L1N0cmluZ0RpZmZlck1CZWFuLmphdmEKaW5kZXggZTQxYzExNi4uYTRlZWZhZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG1vbml0b3IvZXZlbnQvU3RyaW5nRGlmZmVyTUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9ldmVudC9TdHJpbmdEaWZmZXJNQmVhbi5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5zdW4uczFwZXFlLnNlbGZtYW5hZ2VtZW50LnRtb25pdG9yLmV2ZW50OwogCiBwdWJsaWMgaW50ZXJmYWNlIFN0cmluZ0RpZmZlck1CZWFuIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRWYWx1ZSgpOwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9ldmVudC9TdHJpbmdNYXRjaC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG1vbml0b3IvZXZlbnQvU3RyaW5nTWF0Y2guamF2YQppbmRleCAwNjFmYjAzLi43NGIwNzNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9ldmVudC9TdHJpbmdNYXRjaC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2V2ZW50L1N0cmluZ01hdGNoLmphdmEKQEAgLTE3LDE0ICsxNywxNCBAQAogcGFja2FnZSBjb20uc3VuLnMxcGVxZS5zZWxmbWFuYWdlbWVudC50bW9uaXRvci5ldmVudDsKIAogcHVibGljIGNsYXNzIFN0cmluZ01hdGNoIGltcGxlbWVudHMgY29tLnN1bi5zMXBlcWUuc2VsZm1hbmFnZW1lbnQudG1vbml0b3IuZXZlbnQuU3RyaW5nTWF0Y2hNQmVhbiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyBTdHJpbmdNYXRjaCgpIHt9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIHZhbHVlID0gInN1YmxpbWF0aW9uIjsKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG1vbml0b3IvZXZlbnQvU3RyaW5nTWF0Y2hNQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG1vbml0b3IvZXZlbnQvU3RyaW5nTWF0Y2hNQmVhbi5qYXZhCmluZGV4IGQ0ZjY4YTguLmFlMWY5ZDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3Rtb25pdG9yL2V2ZW50L1N0cmluZ01hdGNoTUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bW9uaXRvci9ldmVudC9TdHJpbmdNYXRjaE1CZWFuLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29tLnN1bi5zMXBlcWUuc2VsZm1hbmFnZW1lbnQudG1vbml0b3IuZXZlbnQ7CiAKIHB1YmxpYyBpbnRlcmZhY2UgU3RyaW5nTWF0Y2hNQmVhbiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG5hdGl2ZS9hY3Rpb24vQ3B1VXRpbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG5hdGl2ZS9hY3Rpb24vQ3B1VXRpbC5qYXZhCmluZGV4IDM1ZmRlNWIuLmNmMjVmZjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3RuYXRpdmUvYWN0aW9uL0NwdVV0aWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bmF0aXZlL2FjdGlvbi9DcHVVdGlsLmphdmEKQEAgLTE5LDI2ICsxOSwyNiBAQAogaW1wb3J0IGphdmF4Lm1hbmFnZW1lbnQuKjsKIGltcG9ydCBqYXZhLmlvLio7CiAKLXB1YmxpYyBjbGFzcyBDcHVVdGlsIGltcGxlbWVudHMgTm90aWZpY2F0aW9uTGlzdGVuZXIsIAorcHVibGljIGNsYXNzIENwdVV0aWwgaW1wbGVtZW50cyBOb3RpZmljYXRpb25MaXN0ZW5lciwKICAgICBjb20uc3VuLnMxcGVxZS5zZWxmbWFuYWdlbWVudC50bmF0aXZlLmFjdGlvbi5DcHVVdGlsTUJlYW4gewogCiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSk1YX01PTklUT1JfR0FVR0VfTE9XID0gImpteC5tb25pdG9yLmdhdWdlLmxvdyI7CiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSk1YX01PTklUT1JfR0FVR0VfSElHSCA9ICJqbXgubW9uaXRvci5nYXVnZS5oaWdoIjsKLSAgICBwdWJsaWMgQ3B1VXRpbCgpIHsgCisgICAgcHVibGljIENwdVV0aWwoKSB7CiAgICAgfQogICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBoYW5kbGVOb3RpZmljYXRpb24oTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiwKICAgICAgICAgT2JqZWN0IGhhbmRiYWNrKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBGaWxlV3JpdGVyIG91dCA9IG5ldyBGaWxlV3JpdGVyKG5ldyBGaWxlKCIvc3BhY2Uvc2VsZm1hbmFnZW1lbnRSZXN1bHQudHh0IiksdHJ1ZSk7CiAgICAgICAgICAgICBpZihub3RpZmljYXRpb24gIT0gbnVsbCkgewotCSAgICAgICAgaWYobm90aWZpY2F0aW9uLmdldFR5cGUoKS5lcXVhbHMoSk1YX01PTklUT1JfR0FVR0VfTE9XKSB8fCAKKyAgICAgICAgICAgIGlmKG5vdGlmaWNhdGlvbi5nZXRUeXBlKCkuZXF1YWxzKEpNWF9NT05JVE9SX0dBVUdFX0xPVykgfHwKICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbi5nZXRUeXBlKCkuZXF1YWxzKEpNWF9NT05JVE9SX0dBVUdFX0hJR0gpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBQQVNTRUQiKTsKICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlKCJDcHUgdXRpbCBNb25pdG9yIFRlc3QgLSBQQVNTRURcbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEZBSUxFRCIpOwotCSAgICAgICAgb3V0LndyaXRlKCJDcHUgdXRpbCBNb25pdG9yIFRlc3QgLSBGQUlMRURcbiIpOworICAgICAgICAgICAgb3V0LndyaXRlKCJDcHUgdXRpbCBNb25pdG9yIFRlc3QgLSBGQUlMRURcbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgb3V0LmZsdXNoKCk7CiAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3RuYXRpdmUvYWN0aW9uL0NwdVV0aWxNQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG5hdGl2ZS9hY3Rpb24vQ3B1VXRpbE1CZWFuLmphdmEKaW5kZXggMTNjN2Q3Yi4uMzg2NjRkNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG5hdGl2ZS9hY3Rpb24vQ3B1VXRpbE1CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG5hdGl2ZS9hY3Rpb24vQ3B1VXRpbE1CZWFuLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29tLnN1bi5zMXBlcWUuc2VsZm1hbmFnZW1lbnQudG5hdGl2ZS5hY3Rpb247CiAKIGltcG9ydCBqYXZheC5tYW5hZ2VtZW50Lio7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiBwdWJsaWMgaW50ZXJmYWNlIENwdVV0aWxNQmVhbiB7CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3RuYXRpdmUvYWN0aW9uL0Rpc2tTcGFjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG5hdGl2ZS9hY3Rpb24vRGlza1NwYWNlLmphdmEKaW5kZXggZTZhNGJmYy4uMGE4MTM3ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG5hdGl2ZS9hY3Rpb24vRGlza1NwYWNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG5hdGl2ZS9hY3Rpb24vRGlza1NwYWNlLmphdmEKQEAgLTE5LDI0ICsxOSwyNCBAQAogaW1wb3J0IGphdmF4Lm1hbmFnZW1lbnQuKjsKIGltcG9ydCBqYXZhLmlvLio7CiAKLXB1YmxpYyBjbGFzcyBEaXNrU3BhY2UgaW1wbGVtZW50cyBOb3RpZmljYXRpb25MaXN0ZW5lciwgCitwdWJsaWMgY2xhc3MgRGlza1NwYWNlIGltcGxlbWVudHMgTm90aWZpY2F0aW9uTGlzdGVuZXIsCiAgICAgY29tLnN1bi5zMXBlcWUuc2VsZm1hbmFnZW1lbnQudG5hdGl2ZS5hY3Rpb24uRGlza1NwYWNlTUJlYW4gewogCiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSk1YX01PTklUT1JfQ09VTlRFUl9USFJFU0hPTEQgPSAiam14Lm1vbml0b3IuY291bnRlci50aHJlc2hvbGQiOwotICAgIHB1YmxpYyBEaXNrU3BhY2UoKSB7IAorICAgIHB1YmxpYyBEaXNrU3BhY2UoKSB7CiAgICAgfQogICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBoYW5kbGVOb3RpZmljYXRpb24oTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiwKICAgICAgICAgT2JqZWN0IGhhbmRiYWNrKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBGaWxlV3JpdGVyIG91dCA9IG5ldyBGaWxlV3JpdGVyKG5ldyBGaWxlKCIvc3BhY2Uvc2VsZm1hbmFnZW1lbnRSZXN1bHQudHh0IiksdHJ1ZSk7CiAgICAgICAgICAgICBpZihub3RpZmljYXRpb24gIT0gbnVsbCkgewotCSAgICAgICAgaWYobm90aWZpY2F0aW9uLmdldFR5cGUoKS5lcXVhbHMoSk1YX01PTklUT1JfQ09VTlRFUl9USFJFU0hPTEQpKSB7CisgICAgICAgICAgICBpZihub3RpZmljYXRpb24uZ2V0VHlwZSgpLmVxdWFscyhKTVhfTU9OSVRPUl9DT1VOVEVSX1RIUkVTSE9MRCkpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIFBBU1NFRCIpOwogICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGUoIkRpc2sgRnJlZSBNb25pdG9yIFRlc3QgLSBQQVNTRURcbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEZBSUxFRCIpOwotCSAgICAgICAgb3V0LndyaXRlKCJEaXNrIEZyZWUgTW9uaXRvciBUZXN0IC0gRkFJTEVEXG4iKTsKKyAgICAgICAgICAgIG91dC53cml0ZSgiRGlzayBGcmVlIE1vbml0b3IgVGVzdCAtIEZBSUxFRFxuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvdXQuZmx1c2goKTsKICAgICAgICAgICAgIG91dC5jbG9zZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG5hdGl2ZS9hY3Rpb24vRGlza1NwYWNlTUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3RuYXRpdmUvYWN0aW9uL0Rpc2tTcGFjZU1CZWFuLmphdmEKaW5kZXggNTQwOWFhMi4uZGJmMzEzMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG5hdGl2ZS9hY3Rpb24vRGlza1NwYWNlTUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bmF0aXZlL2FjdGlvbi9EaXNrU3BhY2VNQmVhbi5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5zdW4uczFwZXFlLnNlbGZtYW5hZ2VtZW50LnRuYXRpdmUuYWN0aW9uOwogCiBpbXBvcnQgamF2YXgubWFuYWdlbWVudC4qOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogcHVibGljIGludGVyZmFjZSBEaXNrU3BhY2VNQmVhbiB7CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3RuYXRpdmUvYWN0aW9uL01lbW9yeVV0aWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3RuYXRpdmUvYWN0aW9uL01lbW9yeVV0aWwuamF2YQppbmRleCBhMTkyNzdkLi5lY2U2OTZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bmF0aXZlL2FjdGlvbi9NZW1vcnlVdGlsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG5hdGl2ZS9hY3Rpb24vTWVtb3J5VXRpbC5qYXZhCkBAIC0xOSwyNCArMTksMjQgQEAKIGltcG9ydCBqYXZheC5tYW5hZ2VtZW50Lio7CiBpbXBvcnQgamF2YS5pby4qOwogCi1wdWJsaWMgY2xhc3MgTWVtb3J5VXRpbCBpbXBsZW1lbnRzIE5vdGlmaWNhdGlvbkxpc3RlbmVyLCAKK3B1YmxpYyBjbGFzcyBNZW1vcnlVdGlsIGltcGxlbWVudHMgTm90aWZpY2F0aW9uTGlzdGVuZXIsCiAgICAgY29tLnN1bi5zMXBlcWUuc2VsZm1hbmFnZW1lbnQudG5hdGl2ZS5hY3Rpb24uTWVtb3J5VXRpbE1CZWFuIHsKIAogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIEpNWF9NT05JVE9SX0NPVU5URVJfVEhSRVNIT0xEID0gImpteC5tb25pdG9yLmNvdW50ZXIudGhyZXNob2xkIjsKLSAgICBwdWJsaWMgTWVtb3J5VXRpbCgpIHsgCisgICAgcHVibGljIE1lbW9yeVV0aWwoKSB7CiAgICAgfQogICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBoYW5kbGVOb3RpZmljYXRpb24oTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiwKICAgICAgICAgT2JqZWN0IGhhbmRiYWNrKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBGaWxlV3JpdGVyIG91dCA9IG5ldyBGaWxlV3JpdGVyKG5ldyBGaWxlKCIvc3BhY2Uvc2VsZm1hbmFnZW1lbnRSZXN1bHQudHh0IiksdHJ1ZSk7CiAgICAgICAgICAgICBpZihub3RpZmljYXRpb24gIT0gbnVsbCkgewotCSAgICAgICAgaWYobm90aWZpY2F0aW9uLmdldFR5cGUoKS5lcXVhbHMoSk1YX01PTklUT1JfQ09VTlRFUl9USFJFU0hPTEQpKSB7CisgICAgICAgICAgICBpZihub3RpZmljYXRpb24uZ2V0VHlwZSgpLmVxdWFscyhKTVhfTU9OSVRPUl9DT1VOVEVSX1RIUkVTSE9MRCkpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIFBBU1NFRCIpOwogICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGUoIk1lbW9yeSB1dGlsIE1vbml0b3IgVGVzdCAtIFBBU1NFRFxuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgRkFJTEVEIik7Ci0JICAgICAgICBvdXQud3JpdGUoIk1lbW9yeSBVdGlsIE1vbml0b3IgVGVzdCAtIEZBSUxFRFxuIik7CisgICAgICAgICAgICBvdXQud3JpdGUoIk1lbW9yeSBVdGlsIE1vbml0b3IgVGVzdCAtIEZBSUxFRFxuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvdXQuZmx1c2goKTsKICAgICAgICAgICAgIG91dC5jbG9zZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG5hdGl2ZS9hY3Rpb24vTWVtb3J5VXRpbE1CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bmF0aXZlL2FjdGlvbi9NZW1vcnlVdGlsTUJlYW4uamF2YQppbmRleCA2MTg0NzMwLi43NWRhYTAxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bmF0aXZlL2FjdGlvbi9NZW1vcnlVdGlsTUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bmF0aXZlL2FjdGlvbi9NZW1vcnlVdGlsTUJlYW4uamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20uc3VuLnMxcGVxZS5zZWxmbWFuYWdlbWVudC50bmF0aXZlLmFjdGlvbjsKIAogaW1wb3J0IGphdmF4Lm1hbmFnZW1lbnQuKjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKIHB1YmxpYyBpbnRlcmZhY2UgTWVtb3J5VXRpbE1CZWFuIHsKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG5hdGl2ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG5hdGl2ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk3ZDZiMWEuLjVlZWY5YmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3RuYXRpdmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bmF0aXZlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0idG5hdGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuZGVzY3JpcHRpb24iIHZhbHVlPSJTZWxmbWFuYWdlbWVudC1ESVNLLUNQVS1NRU1PUlktVGVzdHMiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgpAQCAtMjYsNyArMjYsNyBAQAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIAotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlfS8ke21vZHVsZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIubmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdG5hdGl2ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bmF0aXZlL2J1aWxkLnhtbAppbmRleCAzOTFmZDg3Li41NTBjY2IyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bmF0aXZlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90bmF0aXZlL2J1aWxkLnhtbApAQCAtNDksNyArNDksNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXNlbGZtZ210LWphci1jb21tb24iPgogICAgICAgICA8L2FudGNhbGw+CkBAIC0xMTgsMTAgKzExOCwxMCBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1zZWxmbWFuYWdlbWVudC1qYXIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wRG9tYWluIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90dGltZXIvYWN0aW9uL1RpbWVyT2NjdXJyZW5jZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdHRpbWVyL2FjdGlvbi9UaW1lck9jY3VycmVuY2UuamF2YQppbmRleCBjYzhlNzczLi5jZTYzNzVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90dGltZXIvYWN0aW9uL1RpbWVyT2NjdXJyZW5jZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3R0aW1lci9hY3Rpb24vVGltZXJPY2N1cnJlbmNlLmphdmEKQEAgLTIwLDE1ICsyMCwxNSBAQAogaW1wb3J0IGphdmEuaW8uKjsKIGltcG9ydCBqYXZhLnV0aWwuVGltZXI7CiBpbXBvcnQgamF2YS51dGlsLlRpbWVyVGFzazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi1wdWJsaWMgY2xhc3MgVGltZXJPY2N1cnJlbmNlIGltcGxlbWVudHMgTm90aWZpY2F0aW9uTGlzdGVuZXIsIAorCitwdWJsaWMgY2xhc3MgVGltZXJPY2N1cnJlbmNlIGltcGxlbWVudHMgTm90aWZpY2F0aW9uTGlzdGVuZXIsCiAgICAgY29tLnN1bi5zMXBlcWUuc2VsZm1hbmFnZW1lbnQudHRpbWVyLmFjdGlvbi5UaW1lck9jY3VycmVuY2VNQmVhbiB7Ci0gICAgCisKICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBKTVhfVElNRVIgPSAidGltZXIiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUSU1FUl9OT19PRl9PQ0NVUlJFTkNFUyA9IDM7CiAgICAgcHJvdGVjdGVkIHN0YXRpYyBpbnQgaW5jT2NjdXJyZW5jZXMgPSAwOwogCi0gICAgcHVibGljIFRpbWVyT2NjdXJyZW5jZSgpeyAKKyAgICBwdWJsaWMgVGltZXJPY2N1cnJlbmNlKCl7CiAgICAgICAgIG5ldyBOb3RpZlRocmVhZCh0aGlzLCBUSU1FUl9OT19PRl9PQ0NVUlJFTkNFUykuc3RhcnQoKTsKICAgICB9CiAgICAgcHVibGljIGludCBnZXROdW1iZXJPZk9jY3VycmVuY2VzKCkgewpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICB0aGlzLmV4cGVjdGVkT2NjdXJyZW5jZXMgPSBuOwogICAgICAgICB0aGlzLnRpbWVyTUJlYW4gPSB0OwogICAgIH0KLSAgIAorCiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOb3cgZ29pbmcgdG8gc2xlZXAgZm9yIDQwIHNlY3MuLi4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3R0aW1lci9hY3Rpb24vVGltZXJPY2N1cnJlbmNlTUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3R0aW1lci9hY3Rpb24vVGltZXJPY2N1cnJlbmNlTUJlYW4uamF2YQppbmRleCBmOTc2NjAxLi5jMDIyMGM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90dGltZXIvYWN0aW9uL1RpbWVyT2NjdXJyZW5jZU1CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdHRpbWVyL2FjdGlvbi9UaW1lck9jY3VycmVuY2VNQmVhbi5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5zdW4uczFwZXFlLnNlbGZtYW5hZ2VtZW50LnR0aW1lci5hY3Rpb247CiAKIGltcG9ydCBqYXZheC5tYW5hZ2VtZW50Lio7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiBwdWJsaWMgaW50ZXJmYWNlIFRpbWVyT2NjdXJyZW5jZU1CZWFuIHsKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdHRpbWVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90dGltZXIvYnVpbGQucHJvcGVydGllcwppbmRleCAzY2QwYzBlLi4zZTliNWRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90dGltZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90dGltZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ0dGltZXIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgpAQCAtMjYsNyArMjYsNyBAQAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIAotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHttb2R1bGV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyLm5hbWUiIHZhbHVlPSIke21vZHVsZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3R0aW1lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWxmbWFuYWdlbWVudC90dGltZXIvYnVpbGQueG1sCmluZGV4IGYzY2Y4MTIuLmRjYWMwMTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlbGZtYW5hZ2VtZW50L3R0aW1lci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VsZm1hbmFnZW1lbnQvdHRpbWVyL2J1aWxkLnhtbApAQCAtNDksNyArNDksNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXNlbGZtZ210LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTgzLDExICs4MywxMSBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXNlbGZtYW5hZ2VtZW50LWphciIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wRG9tYWluIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9idWlsZC54bWwKaW5kZXggZTNkNjc0ZS4uNGU0ODRjZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9idWlsZC54bWwKQEAgLTI5LDcgKzI5LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KICAgICAgICAgPCEtLSBjYWxsIGFudCBhbGwgaW4gdGhlIHN1YmRpcnMgLS0+Ci0gICAgICAgIDwhLS0gCisgICAgICAgIDwhLS0KICAgICAgICAgICAgIDxhbnQgZGlyPSJ3ZWIiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgICAgICA8YW50IGRpcj0iY29yYmEiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIC0tPgpAQCAtNTIsOCArNTIsOCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JICA8ZWNobz5Vc2FnZTogYW50IChhbGwgfCBjbGVhbiB8IHJ1bi1ncm91cHMgLURncm91cC1uYW1lcz0ke2NvbW1hLXNlcGFyYXRlZC1ncm91cC1uYW1lfSB8IHJ1bi1mYWlsZWQpCi0JICA8L2VjaG8+CisgICAgICA8ZWNobz5Vc2FnZTogYW50IChhbGwgfCBjbGVhbiB8IHJ1bi1ncm91cHMgLURncm91cC1uYW1lcz0ke2NvbW1hLXNlcGFyYXRlZC1ncm91cC1uYW1lfSB8IHJ1bi1mYWlsZWQpCisgICAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvY29tbW9uLWJ1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvY29tbW9uLWJ1aWxkLnhtbAppbmRleCBhZmJlODc0Li40Mzk2YjNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL2NvbW1vbi1idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb21tb24tYnVpbGQueG1sCkBAIC0yMSwxMSArMjEsMTEgQEAKICAgICAgd2l0aCBvdGhlciB0aGUgY29tbW9uIGZpbGUoYXBwc2Vydi10ZXN0cy9jb25maWcvY29tbW9uLnhtbCkKIC0tPgogCi08IS0tIAorPCEtLQogVmFyaWFibGUgbmFtZSBndWlkZWxpbmVzCiAKIC0gcHJvcGVydHkgbmFtZXMgdGhhdCBhcmUgZXhwb3J0ZWQgYnkgdGhlIHRlc3QgZnJhbWV3b3JrKHByb3BlcnRpZXMueG1sKQotICBzaG91bGQgYmUgb2YgdGhlIGZvcm0gCisgIHNob3VsZCBiZSBvZiB0aGUgZm9ybQogICAgICAgYnVpbGQuc29tZS1wcm9wZXJ0eS1uYW1lLWhlcmUKIAogLSBhbnQgdGFyZ2V0cyBkZWZpbmVkIGJ5IHRoZSB0ZXN0IGZyYW1ld29yayh0aGlzIGZpbGUpCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICBjb21tb24tZG8tbXktam9iCiAKIC0gcHJvcGVydGllcyB0aGF0IGFyZSB0byBzZXQgYnkgdGVzdCBhdXRob3JzIGFuZCBhcmUgZGVwZW5kZW50IHBlciB0ZXN0Ci0gIChlZyBzZXQgaW4gYnVpbGQucHJvcGVydGllcykgYW5kIHVzZWQgaW4gdGhlIHRlc3QgZnJhbWV3b3JrIAorICAoZWcgc2V0IGluIGJ1aWxkLnByb3BlcnRpZXMpIGFuZCB1c2VkIGluIHRoZSB0ZXN0IGZyYW1ld29yawogICBzaG91bGQgYmUgb2YgdGhlIGZvcm0KICAgICAgIG15LmFwcC1uYW1lCiAgICAgICBjb21waWxlLnNvdXJjZS5kaXIKQEAgLTU0LDE4ICs1NCwxOCBAQAogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldHMgdG8gY2xlYW4gY2xhc3MgZmlsZXMgYW5kIGphcnMgZmlsZXMgLS0+Ci08IS0tIAotVmFyaWFibGVzIHVzZWQ6IAotICAgICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IAorPCEtLQorVmFyaWFibGVzIHVzZWQ6CisgICAgJHtidWlsZC5jbGFzc2VzLmRpcn0KICAgICAke2J1aWxkLmFzc2VtYmxlLmRpcn0KIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJjb21tb24tY2xlYW4tY2xhc3NlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IENsZWFuaW5nIHRlc3Qgc291cmNlIGZpbGVzOiAke2J1aWxkLmJhc2UuZGlyfSIgCisgICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogQ2xlYW5pbmcgdGVzdCBzb3VyY2UgZmlsZXM6ICR7YnVpbGQuYmFzZS5kaXJ9IgogICAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5iYXNlLmRpcn0iLz4KIDwvdGFyZ2V0PgotICAgIAorCiA8dGFyZ2V0IG5hbWU9ImNvbW1vbi1jbGVhbi1qYXJzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmFzc2VtYmxlLmRpcn0iLz4KIDwvdGFyZ2V0PgpAQCAtNzUsMjkgKzc1LDI5IEBACiAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLWNsZWFuLWphcnMiLz4KIDwvdGFyZ2V0PgogCi08IS0tIAotICAgICBAdG9kbyAKKzwhLS0KKyAgICAgQHRvZG8KIAogICAgICB0aGlzIHRhcmdldCBuZWVkcyB0byBmaWd1cmUgb3V0IGlmIHRoZSAke3ZhcmlhYmxlLW5hZX0gaGFzIGJlZW4KICAgICAgZGVmaW5lZCBvciBub3QgYW5kIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uIC0gZXhpdCA/Ci0gICAKKwogICAgICBwYXJhbWV0ZXJzCiAgICAgIC0gJHt2YXJpYWJsZS1uYW1lfQogLS0+CiA8dGFyZ2V0IG5hbWU9InZlcmlmeS12YXJpYWJsZS1kZWZpbmVkIj4KICAgICA8IS0tCiAgICAgICAgIGlmICR7dmFyaWFibGUtbmFtZX0gZGVmaW5lZAotICAgICAgICAgICAgLy8gZ3JlYXQgCisgICAgICAgICAgICAvLyBncmVhdAogICAgICAgICBlbHNlCiAgICAgICAgICAgICAvLyBleGl0L3dhcm4gLSBtYXliZSBoYXZlIHZhcmlhbnRzIG9mIHRoZSB2ZXJpZnkgdGFyZ2V0IHRvIHdhcm4vZXhpdAogICAgIC0tPgogPC90YXJnZXQ+CiAKLTwhLS0gCi1WYXJpYWJsZXMgdXNlZDogCis8IS0tCitWYXJpYWJsZXMgdXNlZDoKICAgICBAdG9kbyBjaGFuZ2UgdGhlIHRvcCAyIHZhcmlhYmxlIG5hbWVzCiAKLSAgICAke2J1aWxkLmNsYXNzZXMuZGlyfSAKKyAgICAke2J1aWxkLmNsYXNzZXMuZGlyfQogICAgICR7YnVpbGQuczFhc3Rlc3QuY2xhc3NwYXRofQogCiAgICAgJHtjb21waWxlLnNvdXJjZS5kaXJ9CkBAIC0xMjUsNyArMTI1LDcgQEAKICAgPGF2YWlsYWJsZSBmaWxlPSIke3RhZ2ZpbGVzfSIgcHJvcGVydHk9InRhZ2ZpbGVzLWV4aXN0Ii8+CiA8L3RhcmdldD4KIAotPHRhcmdldCBuYW1lPSJjb21tb24tY29weS10bGRzIiBpZj0idGxkcy1leGlzdCIgCis8dGFyZ2V0IG5hbWU9ImNvbW1vbi1jb3B5LXRsZHMiIGlmPSJ0bGRzLWV4aXN0IgogICAgICAgICBkZXBlbmRzPSJjb21tb24tZGVsZXRlLXdhci1maWxlLHRlc3QtdGxkcy1leGlzdCI+CiAKICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvdGxkcyIvPgpAQCAtMTM2LDcgKzEzNiw3IEBACiAgIDwvY29weT4KIDwvdGFyZ2V0PgogCi08dGFyZ2V0IG5hbWU9ImNvbW1vbi1jb3B5LXRhZ2ZpbGVzIiBpZj0idGFnZmlsZXMtZXhpc3QiIAorPHRhcmdldCBuYW1lPSJjb21tb24tY29weS10YWdmaWxlcyIgaWY9InRhZ2ZpbGVzLWV4aXN0IgogICAgICAgICBkZXBlbmRzPSJjb21tb24tZGVsZXRlLXdhci1maWxlLHRlc3QtdGFnZmlsZXMtZXhpc3QiPgogCiAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3RhZ3MiLz4KQEAgLTE1MCw3ICsxNTAsNyBAQAogCiAKIDx0YXJnZXQgbmFtZT0iY29tbW9uLWRlbGV0ZS13YXItZmlsZSI+Ci0gICAgPGRlbGV0ZSBmaWxlPSIke2J1aWxkLndhci5maWxlfSIvPiAgCisgICAgPGRlbGV0ZSBmaWxlPSIke2J1aWxkLndhci5maWxlfSIvPgogPC90YXJnZXQ+CiAKIApAQCAtMTYyLDcgKzE2Miw3IEBACiAgICAgJHtidWlsZC5jbGFzc2VzLmRpcn0KICAgICAke2J1aWxkLmFzc2VtYmxlLmRpcn0KIAotICAgICR7bXktYXBwLW5hbWV9ICAgIAorICAgICR7bXktYXBwLW5hbWV9CiAKICAgICAke3dlYi54bWx9CiAgICAgLi4uCkBAIC0xNzYsNyArMTc2LDcgQEAKICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+CiAKLTx0YXJnZXQgbmFtZT0iY29tbW9uLXBhY2thZ2Utd2FyIiAKKzx0YXJnZXQgbmFtZT0iY29tbW9uLXBhY2thZ2Utd2FyIgogICAgICAgICBkZXBlbmRzPSJjb21tb24tY29weS10bGRzLCBjb21tb24tY29weS10YWdmaWxlcyI+CiAgIDxlY2hvIG1lc3NhZ2U9Im15IGJ1aWxkIGNsYXNzZXMgZGlyIGlzOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBsZXZlbD0idmVyYm9zZSIvPgogICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiLz4KQEAgLTE4NCw3ICsxODQsNyBAQAogICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9jbGFzc2VzIi8+CiAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2xpYiIvPgogICA8bWtkaXIgZGlyPSJsaWIiLz4KLSAgPGNvcHkgZmlsZT0iJHtzdW4td2ViLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3N1bi13ZWIueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvc3VuLXdlYi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvbGliIiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgPGZpbGVzZXQgZGlyPSJsaWIiPgpAQCAtMTkyLDE5ICsxOTIsMTkgQEAKICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLnppcCIvPgogICAgICAgPC9maWxlc2V0PgogICA8L2NvcHk+Ci0gIDxjb3B5IGZpbGU9IiR7d2Vic2VydmljZXMueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7d2Vic2VydmljZXMueG1sfSIKICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93ZWJzZXJ2aWNlcy54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke21hcHBpbmdmaWxlLmxvY2F0aW9ufS8ke21hcHBpbmdmaWxlLm5hbWV9IiAKKyAgPGNvcHkgZmlsZT0iJHttYXBwaW5nZmlsZS5sb2NhdGlvbn0vJHttYXBwaW5nZmlsZS5uYW1lfSIKICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvJHttYXBwaW5nZmlsZS5uYW1lfSIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7d3NkbGZpbGUubG9jYXRpb259LyR7d3NkbGZpbGUubmFtZX0iIAorICA8Y29weSBmaWxlPSIke3dzZGxmaWxlLmxvY2F0aW9ufS8ke3dzZGxmaWxlLm5hbWV9IgogICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dzZGwvJHt3c2RsZmlsZS5uYW1lfSIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7dGFnUGx1Z2lucy54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHt0YWdQbHVnaW5zLnhtbH0iCiAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvdGFnUGx1Z2lucy54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3dlYi54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHt3ZWIueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd2ViLnhtbCIvPgogICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvY2xhc3NlcyI+CiAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQud2FyLmNsYXNzZXN9Ij4KQEAgLTIzOSw5ICsyMzksOSBAQAogICAgICAgPGluY2x1ZGUgbmFtZT0iV0VCLUlORi93c2RsLyR7d3NkbGZpbGUubmFtZX0iLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9IiR7bWFwcGluZ2ZpbGUubmFtZX0iLz4KICAgICA8L2ZpbGVzZXQ+Ci0gIDwvamFyPiAgICAgICAKKyAgPC9qYXI+CiAgIDxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgd2FyIGZpbGUgJHtidWlsZC53YXIuZmlsZX0iIGxldmVsPSJ2ZXJib3NlIi8+Ci0gIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAorICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogPC90YXJnZXQ+CiAKIApAQCAtMjUxLDcgKzI1MSw3IEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJjb21tb24tcGUtZGVwbG95LXdhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iIHVubGVzcz0iZWUiPgotICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHtidWlsZC5hc3NlbWJsZS5kaXJ9LyR7bXktYXBwLW5hbWV9LXdlYi53YXIgZnJvbSAke2Jhc2VkaXJ9LiIgCisgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke2J1aWxkLmFzc2VtYmxlLmRpcn0vJHtteS1hcHAtbmFtZX0td2ViLndhciBmcm9tICR7YmFzZWRpcn0uIgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPHByb3BlcnR5IG5hbWU9InByZWNvbXBpbGVqc3AiIHZhbHVlPSJ0cnVlIi8+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CkBAIC0yNjAsMTAgKzI2MCwxMCBAQAogICAgIDxhcmcgbGluZT0iLS1jb250ZXh0cm9vdCAke215LWNvbnRleHRyb290fSIvPgogICAgIDxhcmcgbGluZT0iLS1wcmVjb21waWxlanNwPSR7cHJlY29tcGlsZWpzcH0iLz4KICAgICA8YXJnIGxpbmU9Ii0tdXBsb2FkPXRydWUiLz4KLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7YnVpbGQuYXNzZW1ibGUuZGlyfS8ke215LWFwcC1uYW1lfS13ZWIud2FyIi8+CiAgIDwvZXhlYz4KLTwvdGFyZ2V0PiAKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNvbW1vbi1lZS1kZXBsb3ktd2FyIiBpZj0iZWUiPgogIDxwcm9wZXJ0eSBuYW1lPSJwcmVjb21waWxlanNwIiB2YWx1ZT0idHJ1ZSIvPgpAQCAtMjc0LDIzICsyNzQsMjMgQEAKICAgICA8YXJnIGxpbmU9Ii0tY29udGV4dHJvb3QgJHtteS1jb250ZXh0cm9vdH0iLz4KICAgICA8YXJnIGxpbmU9Ii0tcHJlY29tcGlsZWpzcD0ke3ByZWNvbXBpbGVqc3B9Ii8+CiAgICAgPGFyZyBsaW5lPSItLXVwbG9hZD10cnVlIi8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2J1aWxkLmFzc2VtYmxlLmRpcn0vJHtteS1hcHAtbmFtZX0td2ViLndhciIvPgogICA8L2V4ZWM+CiA8L3RhcmdldD4KIAogPCEtLSAgdW5kZXBsb3kgdGhlIHN0YW5kYWxvbmUgd2FyIGluIEFwcFNlcnYgIC0tPgogPHRhcmdldCBuYW1lPSJjb21tb24tdW5kZXBsb3ktd2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgPGVjaG8gbWVzc2FnZT0iVW5kZXBsb3lpbmcgd2FyZmlsZSAke215LWFwcC1uYW1lfS13ZWIgZnJvbSAKLSAgICAgICAgJHtidWlsZC5hc3NlbWJsZS5kaXJ9LyR7bXktYXBwLW5hbWV9LXdlYi53YXIgZnJvbSAke2Jhc2VkaXJ9LiIgCisgICAgPGVjaG8gbWVzc2FnZT0iVW5kZXBsb3lpbmcgd2FyZmlsZSAke215LWFwcC1uYW1lfS13ZWIgZnJvbQorICAgICAgICAke2J1aWxkLmFzc2VtYmxlLmRpcn0vJHtteS1hcHAtbmFtZX0td2ViLndhciBmcm9tICR7YmFzZWRpcn0uIgogICAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgIDxhcmcgbGluZT0idW5kZXBsb3kiLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke215LWFwcC1uYW1lfS13ZWIiLz4KICAgPC9leGVjPgotPC90YXJnZXQ+IAorPC90YXJnZXQ+CiAKIDwhLS0gUGF0aCB0byB0aGUgVGVzdE5HIGxpYnJhcnkgLS0+CiA8cGF0aCBpZD0icGF0aDJ0ZXN0bmciPgpAQCAtMzIzLDcgKzMyMyw3IEBACiAKIAogPCEtLSBHZW5lcmF0ZSB0aGUgVGVzdE5HIHJlcG9ydCAtIHVzZXMganVuaXQgLS0+Ci08IS0tIFRlc3RORyBnZW5lcmF0ZXMgZGV0YWlsZWQgcmVwb3J0cyBpbiB0aGUgb3V0cHV0IAorPCEtLSBUZXN0TkcgZ2VuZXJhdGVzIGRldGFpbGVkIHJlcG9ydHMgaW4gdGhlIG91dHB1dAogICAgICBkaXJlY3RvcnkoZGVmYXVsdCB0ZXN0LW91dHB1dCkgYnV0IGp1bml0IGRvZXMgYSBuaWNlIGNvbXBpbGF0aW9uCiAgICAgIG9mIGFsbCB0aGUgdGVzdCByZXN1bHRzIC0tPgogPHRhcmdldCBuYW1lPSJjb21tb24tcmVwb3J0Ij4KQEAgLTM4OCwxMSArMzg4LDExIEBACiAgICAgICR7cnVuLnRlc3RuZy5jbGFzc2ZpbGVzZXR9IHNob3VsZCBiZSBhIGZpbGVzZXQgcmVmaWQKICAgICAgJHtydW4udGVzdG5nLmNsYXNzcGF0aH0gc2hvdWxkIGJlIGEgcGF0aCByZWZpZAogCi0gICAgICR7Z3JvdXAtbmFtZXN9IG5lZWRzIHRvIGJlIHNwZWNpZmllZCBhcyB3ZWxsIC0gCi0gICAgICAgICAgICAgICAgICAgIHVzdWFsbHkgdGhpcyBzaG91bGQgYmUgZG9uZSAgCisgICAgICR7Z3JvdXAtbmFtZXN9IG5lZWRzIHRvIGJlIHNwZWNpZmllZCBhcyB3ZWxsIC0KKyAgICAgICAgICAgICAgICAgICAgdXN1YWxseSB0aGlzIHNob3VsZCBiZSBkb25lCiAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBjYWxsZXIgdGhhdCBpbnZva2VzIGFudAogCi0gICAgIE5vdGU6ICBjYW4ndCBzZWVtIHRvIHJ1biB1c2luZyB0ZXN0bmcgd2l0aCB0aGUgZ3JvdXBzIG9wdGlvbiAKKyAgICAgTm90ZTogIGNhbid0IHNlZW0gdG8gcnVuIHVzaW5nIHRlc3RuZyB3aXRoIHRoZSBncm91cHMgb3B0aW9uCiAgICAgICAgICAgICBhbmQgdGVzdG5nLnhtbCBmaWxlcyBhcyBpbiB3aXRoIHhtbGZpbGVzZXRyZWYgb3IgeG1sZmlsZXNldAogLS0+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvY29yYmEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb3JiYS9idWlsZC54bWwKaW5kZXggYzY5ZmY4Ni4uZWMzZDAyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb3JiYS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb3JiYS9idWlsZC54bWwKQEAgLTQ4LDggKzQ4LDggQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCSAgPGVjaG8+VXNhZ2U6IGFudCBhbGwgCi0JICA8L2VjaG8+CisgICAgICA8ZWNobz5Vc2FnZTogYW50IGFsbAorICAgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL2NvcmJhL3RpbWVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL2NvcmJhL3RpbWVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNTM1MTE3YS4uNjk2MzFiOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb3JiYS90aW1lci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvY29yYmEvdGltZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJteS1tb2R1bGUiIHZhbHVlPSJjb3JiYSIvPgotPHByb3BlcnR5IG5hbWU9Im15LWFwcC1uYW1lIiB2YWx1ZT0idGltZXIiLz4gIAorPHByb3BlcnR5IG5hbWU9Im15LWFwcC1uYW1lIiB2YWx1ZT0idGltZXIiLz4gXHUwMDIwCiAKIDxwcm9wZXJ0eSBuYW1lPSJidWlsZC5kaXIiIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvJHtteS1tb2R1bGV9LyR7bXktYXBwLW5hbWV9Ii8+Ci0gICAgICAgCisKIAogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvY29yYmEvdGltZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb3JiYS90aW1lci9idWlsZC54bWwKaW5kZXggY2Q3ZjgyZi4uZTJiNDY5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb3JiYS90aW1lci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb3JiYS90aW1lci9idWlsZC54bWwKQEAgLTczLDcgKzczLDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDwhLS0gUnVuIFRlc3RORyB0ZXN0IHZpYSB0ZXN0bmcueG1sIC0tPgogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJjb21waWxlIj4KQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJydW4udGVzdG5nLmNsYXNzZmlsZXNldCIgdmFsdWU9InJ1bi5jbGFzc2ZpbGVzZXQiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPCEtLSBSdW4gZmFpbGVkIHRlc3RzIGZyb20gcHJldmlvdXMgcnVuIC0tPgogICAgIDx0YXJnZXQgbmFtZT0icnVuLWZhaWxlZCIgZGVwZW5kcz0iY29tbW9uLXJ1bi1mYWlsZWQiLz4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb3JiYS90aW1lci90ZXN0cy90ZXN0L0FjdGl2YXRpb25TdWl0ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb3JiYS90aW1lci90ZXN0cy90ZXN0L0FjdGl2YXRpb25TdWl0ZS5qYXZhCmluZGV4IDE4ODBhM2QuLjI0NTg3MDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvY29yYmEvdGltZXIvdGVzdHMvdGVzdC9BY3RpdmF0aW9uU3VpdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL2NvcmJhL3RpbWVyL3Rlc3RzL3Rlc3QvQWN0aXZhdGlvblN1aXRlLmphdmEKQEAgLTUxLDY4ICs1MSw2OCBAQAogCiBwdWJsaWMgY2xhc3MgQWN0aXZhdGlvblN1aXRlIHsKICAgICAvLyBUZXN0IHNldCB1cDoKLSAgICAvL1RpbWVyIGdyb3VwczogCi0gICAgLy8JZ2EgY29udGFpbnMgZ2IsIGdjCi0gICAgLy8JZ2IgY29udGFpbnMgZ2QKLSAgICAvLwlnYyBjb250YWlucyBnZAotICAgIC8vCWdkIGNvbnRhaW5zIGdlCi0gICAgLy8JZ2UgY29udGFpbnMgZ2MKKyAgICAvL1RpbWVyIGdyb3VwczoKKyAgICAvLyAgICBnYSBjb250YWlucyBnYiwgZ2MKKyAgICAvLyAgICBnYiBjb250YWlucyBnZAorICAgIC8vICAgIGdjIGNvbnRhaW5zIGdkCisgICAgLy8gICAgZ2QgY29udGFpbnMgZ2UKKyAgICAvLyAgICBnZSBjb250YWlucyBnYwogICAgIC8vCi0gICAgLy8JVGltZXJzIChpbiBncm91cHMpCi0gICAgLy8JZ2EgY29udGFpbnMgdDEKLSAgICAvLwlnYiBjb250YWlucyB0MiwgdDMKKyAgICAvLyAgICBUaW1lcnMgKGluIGdyb3VwcykKKyAgICAvLyAgICBnYSBjb250YWlucyB0MQorICAgIC8vICAgIGdiIGNvbnRhaW5zIHQyLCB0MwogICAgIC8vICBnYyBjb250YWlucyB0NAogICAgIC8vICBnZCBjb250YWlucyB0NSwgdDYKICAgICAvLyAgZ2UgY29udGFpbnMgdDcsIHQ4CiAgICAgLy8KICAgICAvLyBBbGwgZGVzY3JpcHRpb25zIGFyZSB0aGUgc2FtZSBhcyB0aGUgbmFtZXMKICAgICAvLwotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgdGZOYW1lID0gIlRGQWN0aXZhdGlvbiIgOwogCiAgICAgcHJpdmF0ZSBMaXN0PFBhaXI8U3RyaW5nLExpc3Q8U3RyaW5nPj4+IGRhdGEgPSBhc0xpc3QoCi0JbWtQYWlyKCAiZ2EiLCAiZ2IiLCAidDEiICksCi0JbWtQYWlyKCAiZ2IiLCAiZ2QiLCAidDIiLCAidDMiICksCi0JbWtQYWlyKCAiZ2MiLCAiZ2QiLCAidDQiICksCi0JbWtQYWlyKCAiZ2QiLCAiZ2UiLCAidDUiLCAidDYiICksCi0JbWtQYWlyKCAiZ2UiLCAiZ2MiLCAidDciLCAidDgiICkgKSA7CisgICAgbWtQYWlyKCAiZ2EiLCAiZ2IiLCAidDEiICksCisgICAgbWtQYWlyKCAiZ2IiLCAiZ2QiLCAidDIiLCAidDMiICksCisgICAgbWtQYWlyKCAiZ2MiLCAiZ2QiLCAidDQiICksCisgICAgbWtQYWlyKCAiZ2QiLCAiZ2UiLCAidDUiLCAidDYiICksCisgICAgbWtQYWlyKCAiZ2UiLCAiZ2MiLCAidDciLCAidDgiICkgKSA7CiAKICAgICBwcml2YXRlIExpc3Q8U3RyaW5nPiB0MV90OCA9IGFzTGlzdCgKLQkidDEiLCAidDIiLCAidDMiLCAidDQiLCAidDUiLCAidDYiLCAidDciLCAidDgiICkgOworICAgICJ0MSIsICJ0MiIsICJ0MyIsICJ0NCIsICJ0NSIsICJ0NiIsICJ0NyIsICJ0OCIgKSA7CiAgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gdDJfdDggPSBhc0xpc3QoCi0JInQyIiwgInQzIiwgInQ0IiwgInQ1IiwgInQ2IiwgInQ3IiwgInQ4IiApIDsKKyAgICAidDIiLCAidDMiLCAidDQiLCAidDUiLCAidDYiLCAidDciLCAidDgiICkgOwogICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IHQ0X3Q4ID0gYXNMaXN0KAotCSJ0NCIsICJ0NSIsICJ0NiIsICJ0NyIsICJ0OCIgKSA7CisgICAgInQ0IiwgInQ1IiwgInQ2IiwgInQ3IiwgInQ4IiApIDsKIAogICAgIC8vIExpc3Q8UGFpcjxMaXN0PFN0cmluZz4sTGlzdDxTdHJpbmc+Pj4KICAgICAvLyBmb3IgZWFjaCBlbGVtZW50IG9mIGxpc3Q6CiAgICAgLy8gZmlyc3QgaXMgQ29udHJvbGxhYmxlcyB0byBlbmFibGUsIHNlY29uZCBpcyBleHBlY3RlZCBhY3RpdmUgc2V0CiAgICAgLy8KICAgICBwcml2YXRlIExpc3Q8UGFpcjxMaXN0PFN0cmluZz4sTGlzdDxTdHJpbmc+Pj4gdGVzdERhdGEgPSBhc0xpc3QoCi0JbWtQTGlzdCggYXNMaXN0KCAidDEiLCAidDMiICksIGFzTGlzdCggInQxIiwgInQzIiApKSwKLQlta1BMaXN0KCBhc0xpc3QoICJnYSIgKSwgdDFfdDggKSwKLQlta1BMaXN0KCBhc0xpc3QoICJnYiIgKSwgdDJfdDggKSwKLQlta1BMaXN0KCBhc0xpc3QoICJnYyIgKSwgdDRfdDggKSwKLQlta1BMaXN0KCBhc0xpc3QoICJnZCIgKSwgdDRfdDggKSwKLQlta1BMaXN0KCBhc0xpc3QoICJnZSIgKSwgdDRfdDggKSwKLQlta1BMaXN0KCBhc0xpc3QoICJnZSIsICJ0MSIsICJ0MyIgKSwgCi0JICAgIGFzTGlzdCggInQxIiwgInQzIiwgInQ0IiwgInQ1IiwgInQ2IiwgInQ3IiwgInQ4IiApKSwKLQlta1BMaXN0KCBhc0xpc3QoICJnYiIsICJnYyIgKSwgdDJfdDggKSkgOworICAgIG1rUExpc3QoIGFzTGlzdCggInQxIiwgInQzIiApLCBhc0xpc3QoICJ0MSIsICJ0MyIgKSksCisgICAgbWtQTGlzdCggYXNMaXN0KCAiZ2EiICksIHQxX3Q4ICksCisgICAgbWtQTGlzdCggYXNMaXN0KCAiZ2IiICksIHQyX3Q4ICksCisgICAgbWtQTGlzdCggYXNMaXN0KCAiZ2MiICksIHQ0X3Q4ICksCisgICAgbWtQTGlzdCggYXNMaXN0KCAiZ2QiICksIHQ0X3Q4ICksCisgICAgbWtQTGlzdCggYXNMaXN0KCAiZ2UiICksIHQ0X3Q4ICksCisgICAgbWtQTGlzdCggYXNMaXN0KCAiZ2UiLCAidDEiLCAidDMiICksCisgICAgICAgIGFzTGlzdCggInQxIiwgInQzIiwgInQ0IiwgInQ1IiwgInQ2IiwgInQ3IiwgInQ4IiApKSwKKyAgICBta1BMaXN0KCBhc0xpc3QoICJnYiIsICJnYyIgKSwgdDJfdDggKSkgOwogCi0gICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gZXZJbiA9IGFzTGlzdCggCi0JInQxPDEwIiwgInQxPjEyMCIsIAotCSJ0MjwxMyIsICJ0MzwxNSIsICJ0MTwyMSIsICJ0MT40IiwgInQzPjM0IiwgInQyPjI3IiwKLQkidDE8MTIiLCAidDE8MjMiLCAidDE8MzEiLCAidDE+MjQiLCAidDE+OCIsICJ0MT45MSIgKSA7CisgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gZXZJbiA9IGFzTGlzdCgKKyAgICAidDE8MTAiLCAidDE+MTIwIiwKKyAgICAidDI8MTMiLCAidDM8MTUiLCAidDE8MjEiLCAidDE+NCIsICJ0Mz4zNCIsICJ0Mj4yNyIsCisgICAgInQxPDEyIiwgInQxPDIzIiwgInQxPDMxIiwgInQxPjI0IiwgInQxPjgiLCAidDE+OTEiICkgOwogCiAgICAgLy8gVGltaW5nczoKICAgICAvLyB0MSAyMCAyNSA1NSA4NiAxODkKICAgICAvLyB0MiAxMTQKICAgICAvLyB0MyA3NAotICAgIC8vIAotICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IGV2T3V0ID0gYXNMaXN0KCAKLQkidDE8IiwgInQxPiIsIAotCSJ0MzwiLCAidDE8IiwgInQxPiIsICJ0Mz4iLCAKLQkidDE8IiwgInQxPCIsICJ0MTwiLCAidDE+IiwgInQxPiIsICJ0MT4iICkgOworICAgIC8vCisgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gZXZPdXQgPSBhc0xpc3QoCisgICAgInQxPCIsICJ0MT4iLAorICAgICJ0MzwiLCAidDE8IiwgInQxPiIsICJ0Mz4iLAorICAgICJ0MTwiLCAidDE8IiwgInQxPCIsICJ0MT4iLCAidDE+IiwgInQxPiIgKSA7CiAgICAgcHJpdmF0ZSBTdHJpbmcgY29udHJvbGxlck5hbWUgPSAiVGVzdENvbnRyb2xsZXIiIDsKIAogICAgIHByaXZhdGUgVGltZXJGYWN0b3J5IHRmIDsKQEAgLTEyMiwzMjYgKzEyMiwzMjYgQEAKICAgICBwcml2YXRlIE15VGltZXJFdmVudEhhbmRsZXIgaDEgOwogICAgIHByaXZhdGUgTXlUaW1lckV2ZW50SGFuZGxlciBoMiA7CiAgICAgcHJpdmF0ZSBUaW1lckV2ZW50Q29udHJvbGxlciBjb250cm9sbGVyIDsKLSAgICAKKwogICAgIHByaXZhdGUgUGFpcjxTdHJpbmcsTGlzdDxTdHJpbmc+PiBta1BhaXIoIFN0cmluZyBrZXksIFN0cmluZy4uLiB2YWx1ZXMgKSB7Ci0JcmV0dXJuIG5ldyBQYWlyPFN0cmluZyxMaXN0PFN0cmluZz4+KAotCSAgICBrZXksIGFzTGlzdCggdmFsdWVzICkgKSA7CisgICAgcmV0dXJuIG5ldyBQYWlyPFN0cmluZyxMaXN0PFN0cmluZz4+KAorICAgICAgICBrZXksIGFzTGlzdCggdmFsdWVzICkgKSA7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBQYWlyPExpc3Q8U3RyaW5nPixMaXN0PFN0cmluZz4+IG1rUExpc3QoIExpc3Q8U3RyaW5nPiBmaXJzdCwKLQlMaXN0PFN0cmluZz4gc2Vjb25kICkgewotCQotCXJldHVybiBuZXcgUGFpcjxMaXN0PFN0cmluZz4sTGlzdDxTdHJpbmc+PigKLQkgICAgZmlyc3QsIHNlY29uZCApIDsKKyAgICBMaXN0PFN0cmluZz4gc2Vjb25kICkgeworCisgICAgcmV0dXJuIG5ldyBQYWlyPExpc3Q8U3RyaW5nPixMaXN0PFN0cmluZz4+KAorICAgICAgICBmaXJzdCwgc2Vjb25kICkgOwogICAgIH0KIAogICAgIHByaXZhdGUgPFQ+IFNldDxUPiBhc1NldCggVC4uLiBhcmdzICkgewotCVNldDxUPiByZXN1bHQgPSBuZXcgSGFzaFNldDxUPigpIDsKLQlmb3IgKFQgdCA6IGFyZ3MpIAotCSAgICByZXN1bHQuYWRkKCB0ICkgOwotCXJldHVybiByZXN1bHQgOworICAgIFNldDxUPiByZXN1bHQgPSBuZXcgSGFzaFNldDxUPigpIDsKKyAgICBmb3IgKFQgdCA6IGFyZ3MpCisgICAgICAgIHJlc3VsdC5hZGQoIHQgKSA7CisgICAgcmV0dXJuIHJlc3VsdCA7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBDb250cm9sbGFibGUgbWFrZU9yR2V0Q29udHJvbGxhYmxlKCBTdHJpbmcgc3RyICkgewotCWlmIChzdHIuY2hhckF0KDApPT0nZycpIHsKLQkgICAgLy8gTWFrZSBhIFRpbWVyR3JvdXAKLQkgICAgVGltZXJHcm91cCB0ZyA9IHRmLnRpbWVyR3JvdXBzKCkuZ2V0KCBzdHIgKSA7Ci0JICAgIGlmICh0ZyA9PSBudWxsKSB7Ci0JCXRnID0gdGYubWFrZVRpbWVyR3JvdXAoIHN0ciwgc3RyICkgOwotCQl0aW1lckdyb3Vwcy5hZGQoIHRnICkgOwotCSAgICB9Ci0JICAgIHJldHVybiB0ZyA7Ci0JfSBlbHNlIGlmIChzdHIuY2hhckF0KDApPT0ndCcpIHsKLQkgICAgLy8gTWFrZSBhIFRpbWVyCi0JICAgIFRpbWVyIHQgPSB0Zi50aW1lcnMoKS5nZXQoIHN0ciApIDsKLQkgICAgaWYgKHQgPT0gbnVsbCkgewotCQl0ID0gdGYubWFrZVRpbWVyKCBzdHIsIHN0ciApIDsKLQkJdGltZXJzLmFkZCggdCApIDsKLQkgICAgfQotCSAgICByZXR1cm4gdCA7Ci0JfSBlbHNlIHsKLQkgICAgLy8gZXJyb3IgaW4gdGVzdCBkYXRhCi0JICAgIEFzc2VydC5mYWlsKCAiQmFkIGRhdGEgc3RyaW5nIiApIDsKLQkgICAgcmV0dXJuIG51bGwgOwotCX0KKyAgICBpZiAoc3RyLmNoYXJBdCgwKT09J2cnKSB7CisgICAgICAgIC8vIE1ha2UgYSBUaW1lckdyb3VwCisgICAgICAgIFRpbWVyR3JvdXAgdGcgPSB0Zi50aW1lckdyb3VwcygpLmdldCggc3RyICkgOworICAgICAgICBpZiAodGcgPT0gbnVsbCkgeworICAgICAgICB0ZyA9IHRmLm1ha2VUaW1lckdyb3VwKCBzdHIsIHN0ciApIDsKKyAgICAgICAgdGltZXJHcm91cHMuYWRkKCB0ZyApIDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGcgOworICAgIH0gZWxzZSBpZiAoc3RyLmNoYXJBdCgwKT09J3QnKSB7CisgICAgICAgIC8vIE1ha2UgYSBUaW1lcgorICAgICAgICBUaW1lciB0ID0gdGYudGltZXJzKCkuZ2V0KCBzdHIgKSA7CisgICAgICAgIGlmICh0ID09IG51bGwpIHsKKyAgICAgICAgdCA9IHRmLm1ha2VUaW1lciggc3RyLCBzdHIgKSA7CisgICAgICAgIHRpbWVycy5hZGQoIHQgKSA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHQgOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIGVycm9yIGluIHRlc3QgZGF0YQorICAgICAgICBBc3NlcnQuZmFpbCggIkJhZCBkYXRhIHN0cmluZyIgKSA7CisgICAgICAgIHJldHVybiBudWxsIDsKKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBDb250cm9sbGFibGUgZ2V0Q29udHJvbGxhYmxlKCBTdHJpbmcgc3RyICkgewotCWlmIChzdHIuY2hhckF0KDApPT0nZycpIHsKLQkgICAgLy8gR2V0IGEgVGltZXJHcm91cAotCSAgICBUaW1lckdyb3VwIHRnID0gdGYudGltZXJHcm91cHMoKS5nZXQoIHN0ciApIDsKLQkgICAgQXNzZXJ0LmFzc2VydFRydWUoIHRnICE9IG51bGwgKSA7Ci0JICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIHRnLm5hbWUoKSwgc3RyICkgOwotCSAgICByZXR1cm4gdGcgOwotCX0gZWxzZSBpZiAoc3RyLmNoYXJBdCgwKT09J3QnKSB7Ci0JICAgIC8vIEdldCBhIFRpbWVyCi0JICAgIFRpbWVyIHQgPSB0Zi50aW1lcnMoKS5nZXQoIHN0ciApIDsKLQkgICAgQXNzZXJ0LmFzc2VydFRydWUoIHQgIT0gbnVsbCApIDsKLQkgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggdC5uYW1lKCksIHN0ciApIDsKLQkgICAgcmV0dXJuIHQgOwotCX0gZWxzZSB7Ci0JICAgIC8vIGVycm9yIGluIHRlc3QgZGF0YQotCSAgICBBc3NlcnQuZmFpbCggIkJhZCBkYXRhIHN0cmluZyIgKSA7Ci0JICAgIHJldHVybiBudWxsIDsKLQl9CisgICAgaWYgKHN0ci5jaGFyQXQoMCk9PSdnJykgeworICAgICAgICAvLyBHZXQgYSBUaW1lckdyb3VwCisgICAgICAgIFRpbWVyR3JvdXAgdGcgPSB0Zi50aW1lckdyb3VwcygpLmdldCggc3RyICkgOworICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggdGcgIT0gbnVsbCApIDsKKyAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggdGcubmFtZSgpLCBzdHIgKSA7CisgICAgICAgIHJldHVybiB0ZyA7CisgICAgfSBlbHNlIGlmIChzdHIuY2hhckF0KDApPT0ndCcpIHsKKyAgICAgICAgLy8gR2V0IGEgVGltZXIKKyAgICAgICAgVGltZXIgdCA9IHRmLnRpbWVycygpLmdldCggc3RyICkgOworICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggdCAhPSBudWxsICkgOworICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCB0Lm5hbWUoKSwgc3RyICkgOworICAgICAgICByZXR1cm4gdCA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gZXJyb3IgaW4gdGVzdCBkYXRhCisgICAgICAgIEFzc2VydC5mYWlsKCAiQmFkIGRhdGEgc3RyaW5nIiApIDsKKyAgICAgICAgcmV0dXJuIG51bGwgOworICAgIH0KICAgICB9CiAKICAgICBAQ29uZmlndXJhdGlvbiggYmVmb3JlVGVzdCA9IHRydWUgKQogICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgewogCi0JdGYgPSBUaW1lckZhY3RvcnlCdWlsZGVyLm1ha2UoIHRmTmFtZSwgdGZOYW1lICkgOwotCXRpbWVycyA9IG5ldyBBcnJheUxpc3Q8VGltZXI+KCkgOwotCXRpbWVyR3JvdXBzID0gbmV3IEFycmF5TGlzdDxUaW1lckdyb3VwPigpIDsKLQl0aW1lckdyb3Vwcy5hZGQoIHRmICkgOworICAgIHRmID0gVGltZXJGYWN0b3J5QnVpbGRlci5tYWtlKCB0Zk5hbWUsIHRmTmFtZSApIDsKKyAgICB0aW1lcnMgPSBuZXcgQXJyYXlMaXN0PFRpbWVyPigpIDsKKyAgICB0aW1lckdyb3VwcyA9IG5ldyBBcnJheUxpc3Q8VGltZXJHcm91cD4oKSA7CisgICAgdGltZXJHcm91cHMuYWRkKCB0ZiApIDsKIAotCWZvciAoUGFpcjxTdHJpbmcsTGlzdDxTdHJpbmc+PiBlbGVtIDogZGF0YSkgewotCSAgICBTdHJpbmcgaGVhZCA9IGVsZW0uZmlyc3QoKSA7Ci0JICAgIExpc3Q8U3RyaW5nPiB0YWlsID0gZWxlbS5zZWNvbmQoKSA7Ci0JICAgIENvbnRyb2xsYWJsZSBjb24gPSBtYWtlT3JHZXRDb250cm9sbGFibGUoIGhlYWQgKSA7Ci0JICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjb24gaW5zdGFuY2VvZiBUaW1lckdyb3VwICkgOwotCSAgICBUaW1lckdyb3VwIGNvbnRhaW5lciA9IFRpbWVyR3JvdXAuY2xhc3MuY2FzdCggY29uICkgOwotCSAgICBmb3IgKFN0cmluZyBzdHIgOiB0YWlsKSB7Ci0JCUNvbnRyb2xsYWJsZSBjMiA9IG1ha2VPckdldENvbnRyb2xsYWJsZSggc3RyICkgOwotCQljb250YWluZXIuYWRkKCBjMiApIDsKLQkgICAgfQotCX0KKyAgICBmb3IgKFBhaXI8U3RyaW5nLExpc3Q8U3RyaW5nPj4gZWxlbSA6IGRhdGEpIHsKKyAgICAgICAgU3RyaW5nIGhlYWQgPSBlbGVtLmZpcnN0KCkgOworICAgICAgICBMaXN0PFN0cmluZz4gdGFpbCA9IGVsZW0uc2Vjb25kKCkgOworICAgICAgICBDb250cm9sbGFibGUgY29uID0gbWFrZU9yR2V0Q29udHJvbGxhYmxlKCBoZWFkICkgOworICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY29uIGluc3RhbmNlb2YgVGltZXJHcm91cCApIDsKKyAgICAgICAgVGltZXJHcm91cCBjb250YWluZXIgPSBUaW1lckdyb3VwLmNsYXNzLmNhc3QoIGNvbiApIDsKKyAgICAgICAgZm9yIChTdHJpbmcgc3RyIDogdGFpbCkgeworICAgICAgICBDb250cm9sbGFibGUgYzIgPSBtYWtlT3JHZXRDb250cm9sbGFibGUoIHN0ciApIDsKKyAgICAgICAgY29udGFpbmVyLmFkZCggYzIgKSA7CisgICAgICAgIH0KKyAgICB9CiAKLQloMSA9IG5ldyBNeVRpbWVyRXZlbnRIYW5kbGVyKCAiaDEiICkgOwotCWgyID0gbmV3IE15VGltZXJFdmVudEhhbmRsZXIoICJoMiIgKSA7Ci0JY29udHJvbGxlciA9IHRmLm1ha2VDb250cm9sbGVyKCBjb250cm9sbGVyTmFtZSApIDsKKyAgICBoMSA9IG5ldyBNeVRpbWVyRXZlbnRIYW5kbGVyKCAiaDEiICkgOworICAgIGgyID0gbmV3IE15VGltZXJFdmVudEhhbmRsZXIoICJoMiIgKSA7CisgICAgY29udHJvbGxlciA9IHRmLm1ha2VDb250cm9sbGVyKCBjb250cm9sbGVyTmFtZSApIDsKICAgICB9CiAKICAgICBwcml2YXRlIDxUIGV4dGVuZHMgQ29udHJvbGxhYmxlPiB2b2lkIGNoZWNrTGlzdCggTGlzdDw/IGV4dGVuZHMgVD4gbGlzdCwKLQlNYXA8U3RyaW5nLD8gZXh0ZW5kcyBUPiBtYXAgKSB7CisgICAgTWFwPFN0cmluZyw/IGV4dGVuZHMgVD4gbWFwICkgewogCi0JQXNzZXJ0LmFzc2VydEVxdWFscyggbGlzdC5zaXplKCksIG1hcC5zaXplKCkgKSA7Ci0JZm9yIChUIHQgOiBsaXN0KSB7Ci0JICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIHQsIG1hcC5nZXQoIHQubmFtZSgpICkgKSA7Ci0JfQorICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIGxpc3Quc2l6ZSgpLCBtYXAuc2l6ZSgpICkgOworICAgIGZvciAoVCB0IDogbGlzdCkgeworICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCB0LCBtYXAuZ2V0KCB0Lm5hbWUoKSApICkgOworICAgIH0KICAgICB9CiAKIAogICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCB2YWxpZGF0ZSgpIHsKLQljaGVja0xpc3QoIHRpbWVycywgdGYudGltZXJzKCkgKSA7Ci0JY2hlY2tMaXN0KCB0aW1lckdyb3VwcywgdGYudGltZXJHcm91cHMoKSApIDsKKyAgICBjaGVja0xpc3QoIHRpbWVycywgdGYudGltZXJzKCkgKSA7CisgICAgY2hlY2tMaXN0KCB0aW1lckdyb3VwcywgdGYudGltZXJHcm91cHMoKSApIDsKIAotCWZvciAoUGFpcjxTdHJpbmcsTGlzdDxTdHJpbmc+PiBlbGVtIDogZGF0YSkgewotCSAgICBTdHJpbmcgaGVhZCA9IGVsZW0uZmlyc3QoKSA7Ci0JICAgIExpc3Q8U3RyaW5nPiB0YWlsID0gZWxlbS5zZWNvbmQoKSA7Ci0JICAgIENvbnRyb2xsYWJsZSBjb24gPSBnZXRDb250cm9sbGFibGUoIGhlYWQgKSA7Ci0JICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjb24gaW5zdGFuY2VvZiBUaW1lckdyb3VwICkgOwotCSAgICBUaW1lckdyb3VwIGNvbnRhaW5lciA9IFRpbWVyR3JvdXAuY2xhc3MuY2FzdCggY29uICkgOwotCSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY29udGFpbmVyLmNvbnRlbnRzKCkuc2l6ZSgpID09IHRhaWwuc2l6ZSgpICkgOwotCSAgICBmb3IgKFN0cmluZyBzdHIgOiB0YWlsKSB7Ci0JCUNvbnRyb2xsYWJsZSBjMiA9IGdldENvbnRyb2xsYWJsZSggc3RyICkgOwotCQlBc3NlcnQuYXNzZXJ0VHJ1ZSggY29udGFpbmVyLmNvbnRlbnRzKCkuY29udGFpbnMoIGMyICkgKSA7Ci0JICAgIH0KLQl9CisgICAgZm9yIChQYWlyPFN0cmluZyxMaXN0PFN0cmluZz4+IGVsZW0gOiBkYXRhKSB7CisgICAgICAgIFN0cmluZyBoZWFkID0gZWxlbS5maXJzdCgpIDsKKyAgICAgICAgTGlzdDxTdHJpbmc+IHRhaWwgPSBlbGVtLnNlY29uZCgpIDsKKyAgICAgICAgQ29udHJvbGxhYmxlIGNvbiA9IGdldENvbnRyb2xsYWJsZSggaGVhZCApIDsKKyAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGNvbiBpbnN0YW5jZW9mIFRpbWVyR3JvdXAgKSA7CisgICAgICAgIFRpbWVyR3JvdXAgY29udGFpbmVyID0gVGltZXJHcm91cC5jbGFzcy5jYXN0KCBjb24gKSA7CisgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjb250YWluZXIuY29udGVudHMoKS5zaXplKCkgPT0gdGFpbC5zaXplKCkgKSA7CisgICAgICAgIGZvciAoU3RyaW5nIHN0ciA6IHRhaWwpIHsKKyAgICAgICAgQ29udHJvbGxhYmxlIGMyID0gZ2V0Q29udHJvbGxhYmxlKCBzdHIgKSA7CisgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjb250YWluZXIuY29udGVudHMoKS5jb250YWlucyggYzIgKSApIDsKKyAgICAgICAgfQorICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIFNldDxDb250cm9sbGFibGU+IG1ha2VDb250cm9sbGFibGVTZXQoIExpc3Q8U3RyaW5nPiBzdHJzICkgewotCVNldDxDb250cm9sbGFibGU+IHJlc3VsdCA9IG5ldyBIYXNoU2V0PENvbnRyb2xsYWJsZT4oKSA7Ci0JZm9yIChTdHJpbmcgc3RyIDogc3RycykgewotCSAgICBDb250cm9sbGFibGUgYyA9IGdldENvbnRyb2xsYWJsZSggc3RyICkgOwotCSAgICByZXN1bHQuYWRkKCBjICkgOwotCX0KLQotCXJldHVybiByZXN1bHQgOworICAgIFNldDxDb250cm9sbGFibGU+IHJlc3VsdCA9IG5ldyBIYXNoU2V0PENvbnRyb2xsYWJsZT4oKSA7CisgICAgZm9yIChTdHJpbmcgc3RyIDogc3RycykgeworICAgICAgICBDb250cm9sbGFibGUgYyA9IGdldENvbnRyb2xsYWJsZSggc3RyICkgOworICAgICAgICByZXN1bHQuYWRkKCBjICkgOwogICAgIH0KLSAgICAKKworICAgIHJldHVybiByZXN1bHQgOworICAgIH0KKwogICAgIHByaXZhdGUgdm9pZCBlbmFibGVDb250cm9sbGFibGVzKCBTZXQ8Q29udHJvbGxhYmxlPiBjb25zICkgewotCWZvciAoQ29udHJvbGxhYmxlIGMgOiBjb25zKSAKLQkgICAgYy5lbmFibGUoKSA7CisgICAgZm9yIChDb250cm9sbGFibGUgYyA6IGNvbnMpCisgICAgICAgIGMuZW5hYmxlKCkgOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkaXNhYmxlQWxsQ29udHJvbGxhYmxlcygpIHsKLQlmb3IgKENvbnRyb2xsYWJsZSBjIDogdGYuY29udGVudHMoKSkKLQkgICAgYy5kaXNhYmxlKCkgOworICAgIGZvciAoQ29udHJvbGxhYmxlIGMgOiB0Zi5jb250ZW50cygpKQorICAgICAgICBjLmRpc2FibGUoKSA7CiAgICAgfQogCiAgICAgQFRlc3QoKQogICAgIHB1YmxpYyB2b2lkIHRlc3RUaW1lckVuYWJsZSgpIHsKLQlmb3IgKFBhaXI8TGlzdDxTdHJpbmc+LExpc3Q8U3RyaW5nPj4gcGFpciA6IHRlc3REYXRhKSB7Ci0JICAgIGRpc2FibGVBbGxDb250cm9sbGFibGVzKCkgOwotCSAgICBTZXQ8Q29udHJvbGxhYmxlPiB0ZHMgPSBtYWtlQ29udHJvbGxhYmxlU2V0KCBwYWlyLmZpcnN0KCkgKSA7Ci0JICAgIFNldDxDb250cm9sbGFibGU+IGVycyA9IG1ha2VDb250cm9sbGFibGVTZXQoIHBhaXIuc2Vjb25kKCkgKSA7Ci0JICAgIGVuYWJsZUNvbnRyb2xsYWJsZXMoIHRkcyApIDsKLQkgICAgU2V0PFRpbWVyPiBhcnMgPSB0Zi5hY3RpdmVTZXQoKSA7Ci0JICAgIEFzc2VydC5hc3NlcnRUcnVlKCBlcnMuZXF1YWxzKCBhcnMgKSApIDsKLQl9Ci0JZGlzYWJsZUFsbENvbnRyb2xsYWJsZXMoKSA7CisgICAgZm9yIChQYWlyPExpc3Q8U3RyaW5nPixMaXN0PFN0cmluZz4+IHBhaXIgOiB0ZXN0RGF0YSkgeworICAgICAgICBkaXNhYmxlQWxsQ29udHJvbGxhYmxlcygpIDsKKyAgICAgICAgU2V0PENvbnRyb2xsYWJsZT4gdGRzID0gbWFrZUNvbnRyb2xsYWJsZVNldCggcGFpci5maXJzdCgpICkgOworICAgICAgICBTZXQ8Q29udHJvbGxhYmxlPiBlcnMgPSBtYWtlQ29udHJvbGxhYmxlU2V0KCBwYWlyLnNlY29uZCgpICkgOworICAgICAgICBlbmFibGVDb250cm9sbGFibGVzKCB0ZHMgKSA7CisgICAgICAgIFNldDxUaW1lcj4gYXJzID0gdGYuYWN0aXZlU2V0KCkgOworICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggZXJzLmVxdWFscyggYXJzICkgKSA7CisgICAgfQorICAgIGRpc2FibGVBbGxDb250cm9sbGFibGVzKCkgOwogICAgIH0KIAogICAgIHByaXZhdGUgY2xhc3MgTXlUaW1lckV2ZW50SGFuZGxlciBleHRlbmRzIE5hbWVkQmFzZSBpbXBsZW1lbnRzIFRpbWVyRXZlbnRIYW5kbGVyIHsKLQlMaXN0PFRpbWVyRXZlbnQ+IGV2ZW50cyA7CisgICAgTGlzdDxUaW1lckV2ZW50PiBldmVudHMgOwogCi0JcHVibGljIE15VGltZXJFdmVudEhhbmRsZXIoIFN0cmluZyBuYW1lICkgewotCSAgICBzdXBlciggdGYsIG5hbWUgKSA7Ci0JICAgIGV2ZW50cyA9IG5ldyBBcnJheUxpc3Q8VGltZXJFdmVudD4oKSA7Ci0JfQotCi0JcHVibGljIHZvaWQgbm90aWZ5KCBUaW1lckV2ZW50IGV2ZW50ICkgewotCSAgICBldmVudHMuYWRkKCBldmVudCApIDsKLQl9Ci0KLQlwdWJsaWMgTGlzdDxUaW1lckV2ZW50PiBldmVudHMoKSB7Ci0JICAgIHJldHVybiBldmVudHMgOwotCX0KKyAgICBwdWJsaWMgTXlUaW1lckV2ZW50SGFuZGxlciggU3RyaW5nIG5hbWUgKSB7CisgICAgICAgIHN1cGVyKCB0ZiwgbmFtZSApIDsKKyAgICAgICAgZXZlbnRzID0gbmV3IEFycmF5TGlzdDxUaW1lckV2ZW50PigpIDsKICAgICB9CiAKLSAgICBwcml2YXRlIFBhaXI8SW50ZWdlcixQYWlyPFRpbWVyLFRpbWVyRXZlbnQuVGltZXJFdmVudFR5cGU+PiBwYXJzZUV2ZW50RGVzY3JpcHRpb24oIAotCVN0cmluZyBzdHIgKSB7CisgICAgcHVibGljIHZvaWQgbm90aWZ5KCBUaW1lckV2ZW50IGV2ZW50ICkgeworICAgICAgICBldmVudHMuYWRkKCBldmVudCApIDsKKyAgICB9CiAKLQlpZiAoc3RyLmxlbmd0aCgpIDwgMykKLQkgICAgQXNzZXJ0LmZhaWwoKSA7Ci0JU3RyaW5nIHRuYW1lID0gc3RyLnN1YnN0cmluZyggMCwgMiApIDsKLQljaGFyIGNoID0gc3RyLmNoYXJBdCggMiApIDsKLQlTdHJpbmcgdGltZVN0ciA9IHN0ci5zdWJzdHJpbmcoIDMgKSA7Ci0JaW50IGRlbGF5ID0gMDsKLQlpZiAoKHRpbWVTdHIgIT0gbnVsbCkgJiYgKHRpbWVTdHIubGVuZ3RoKCkgPiAwKSkKLQkgICAgZGVsYXkgPSBJbnRlZ2VyLnBhcnNlSW50KCB0aW1lU3RyICkgOwotCUNvbnRyb2xsYWJsZSBjID0gZ2V0Q29udHJvbGxhYmxlKCB0bmFtZSApIDsKLQlBc3NlcnQuYXNzZXJ0VHJ1ZSggYyAhPSBudWxsICYmIGMgaW5zdGFuY2VvZiBUaW1lciApIDsKLQlUaW1lciB0ID0gVGltZXIuY2xhc3MuY2FzdCggYyApIDsKLQlUaW1lckV2ZW50LlRpbWVyRXZlbnRUeXBlIGV0eXBlID0gbnVsbCA7Ci0JaWYgKGNoID09ICc8JykgCi0JICAgIGV0eXBlID0gVGltZXJFdmVudC5UaW1lckV2ZW50VHlwZS5FTlRFUiA7Ci0JZWxzZSBpZiAoY2ggPT0gJz4nKQotCSAgICBldHlwZSA9IFRpbWVyRXZlbnQuVGltZXJFdmVudFR5cGUuRVhJVCA7Ci0JZWxzZSAKLQkgICAgQXNzZXJ0LmZhaWwoKSA7CisgICAgcHVibGljIExpc3Q8VGltZXJFdmVudD4gZXZlbnRzKCkgeworICAgICAgICByZXR1cm4gZXZlbnRzIDsKKyAgICB9CisgICAgfQogCi0JUGFpcjxUaW1lcixUaW1lckV2ZW50LlRpbWVyRXZlbnRUeXBlPiByZXMxID0gCi0JICAgIG5ldyBQYWlyPFRpbWVyLFRpbWVyRXZlbnQuVGltZXJFdmVudFR5cGU+KCB0LCBldHlwZSApIDsKLQlQYWlyPEludGVnZXIsUGFpcjxUaW1lcixUaW1lckV2ZW50LlRpbWVyRXZlbnRUeXBlPj4gcmVzdWx0ID0gCi0JICAgIG5ldyBQYWlyPEludGVnZXIsUGFpcjxUaW1lcixUaW1lckV2ZW50LlRpbWVyRXZlbnRUeXBlPj4oIGRlbGF5LCByZXMxICkgOworICAgIHByaXZhdGUgUGFpcjxJbnRlZ2VyLFBhaXI8VGltZXIsVGltZXJFdmVudC5UaW1lckV2ZW50VHlwZT4+IHBhcnNlRXZlbnREZXNjcmlwdGlvbigKKyAgICBTdHJpbmcgc3RyICkgewogCi0JcmV0dXJuIHJlc3VsdCA7CisgICAgaWYgKHN0ci5sZW5ndGgoKSA8IDMpCisgICAgICAgIEFzc2VydC5mYWlsKCkgOworICAgIFN0cmluZyB0bmFtZSA9IHN0ci5zdWJzdHJpbmcoIDAsIDIgKSA7CisgICAgY2hhciBjaCA9IHN0ci5jaGFyQXQoIDIgKSA7CisgICAgU3RyaW5nIHRpbWVTdHIgPSBzdHIuc3Vic3RyaW5nKCAzICkgOworICAgIGludCBkZWxheSA9IDA7CisgICAgaWYgKCh0aW1lU3RyICE9IG51bGwpICYmICh0aW1lU3RyLmxlbmd0aCgpID4gMCkpCisgICAgICAgIGRlbGF5ID0gSW50ZWdlci5wYXJzZUludCggdGltZVN0ciApIDsKKyAgICBDb250cm9sbGFibGUgYyA9IGdldENvbnRyb2xsYWJsZSggdG5hbWUgKSA7CisgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMgIT0gbnVsbCAmJiBjIGluc3RhbmNlb2YgVGltZXIgKSA7CisgICAgVGltZXIgdCA9IFRpbWVyLmNsYXNzLmNhc3QoIGMgKSA7CisgICAgVGltZXJFdmVudC5UaW1lckV2ZW50VHlwZSBldHlwZSA9IG51bGwgOworICAgIGlmIChjaCA9PSAnPCcpCisgICAgICAgIGV0eXBlID0gVGltZXJFdmVudC5UaW1lckV2ZW50VHlwZS5FTlRFUiA7CisgICAgZWxzZSBpZiAoY2ggPT0gJz4nKQorICAgICAgICBldHlwZSA9IFRpbWVyRXZlbnQuVGltZXJFdmVudFR5cGUuRVhJVCA7CisgICAgZWxzZQorICAgICAgICBBc3NlcnQuZmFpbCgpIDsKKworICAgIFBhaXI8VGltZXIsVGltZXJFdmVudC5UaW1lckV2ZW50VHlwZT4gcmVzMSA9CisgICAgICAgIG5ldyBQYWlyPFRpbWVyLFRpbWVyRXZlbnQuVGltZXJFdmVudFR5cGU+KCB0LCBldHlwZSApIDsKKyAgICBQYWlyPEludGVnZXIsUGFpcjxUaW1lcixUaW1lckV2ZW50LlRpbWVyRXZlbnRUeXBlPj4gcmVzdWx0ID0KKyAgICAgICAgbmV3IFBhaXI8SW50ZWdlcixQYWlyPFRpbWVyLFRpbWVyRXZlbnQuVGltZXJFdmVudFR5cGU+PiggZGVsYXksIHJlczEgKSA7CisKKyAgICByZXR1cm4gcmVzdWx0IDsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgc2xlZXAoIGludCB0aW1lICkgewotCWlmICh0aW1lID09IDApCi0JICAgIHJldHVybiA7CisgICAgaWYgKHRpbWUgPT0gMCkKKyAgICAgICAgcmV0dXJuIDsKIAotCXRyeSB7Ci0JICAgIFRocmVhZC5zbGVlcCggdGltZSApIDsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXhjKSB7Ci0JICAgIC8vIGlnbm9yZSB0aGlzCi0JfQorICAgIHRyeSB7CisgICAgICAgIFRocmVhZC5zbGVlcCggdGltZSApIDsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXhjKSB7CisgICAgICAgIC8vIGlnbm9yZSB0aGlzCisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBnZW5lcmF0ZUV2ZW50cyggVGltZXJFdmVudENvbnRyb2xsZXIgdGVjLCBMaXN0PFN0cmluZz4gZWQgKSB7Ci0JZm9yIChTdHJpbmcgc3RyIDogZWQgKSB7Ci0JICAgIFBhaXI8SW50ZWdlcixQYWlyPFRpbWVyLFRpbWVyRXZlbnQuVGltZXJFdmVudFR5cGU+PiBwID0gCi0JCXBhcnNlRXZlbnREZXNjcmlwdGlvbiggc3RyICkgOwotCSAgICBpbnQgZGVsYXkgPSBwLmZpcnN0KCkgOwotCSAgICBpZiAocC5zZWNvbmQoKS5zZWNvbmQoKSA9PSBUaW1lckV2ZW50LlRpbWVyRXZlbnRUeXBlLkVOVEVSKSB7Ci0JCXRlYy5lbnRlciggcC5zZWNvbmQoKS5maXJzdCgpICkgOwotCQlzbGVlcCggZGVsYXkgKSA7Ci0JICAgIH0gZWxzZSB7Ci0JCXNsZWVwKCBkZWxheSApIDsKLQkJdGVjLmV4aXQoIHAuc2Vjb25kKCkuZmlyc3QoKSApIDsKLQkgICAgfQotCX0KKyAgICBmb3IgKFN0cmluZyBzdHIgOiBlZCApIHsKKyAgICAgICAgUGFpcjxJbnRlZ2VyLFBhaXI8VGltZXIsVGltZXJFdmVudC5UaW1lckV2ZW50VHlwZT4+IHAgPQorICAgICAgICBwYXJzZUV2ZW50RGVzY3JpcHRpb24oIHN0ciApIDsKKyAgICAgICAgaW50IGRlbGF5ID0gcC5maXJzdCgpIDsKKyAgICAgICAgaWYgKHAuc2Vjb25kKCkuc2Vjb25kKCkgPT0gVGltZXJFdmVudC5UaW1lckV2ZW50VHlwZS5FTlRFUikgeworICAgICAgICB0ZWMuZW50ZXIoIHAuc2Vjb25kKCkuZmlyc3QoKSApIDsKKyAgICAgICAgc2xlZXAoIGRlbGF5ICkgOworICAgICAgICB9IGVsc2UgeworICAgICAgICBzbGVlcCggZGVsYXkgKSA7CisgICAgICAgIHRlYy5leGl0KCBwLnNlY29uZCgpLmZpcnN0KCkgKSA7CisgICAgICAgIH0KKyAgICB9CiAgICAgfQogCiAgICAgLy8gVGVzdCBmb3IgY29ycmVjdCBldmVudCBzZXF1ZW5jZSB3aXRoIG5vbi1kZWNyZWFzaW5nIHRpbWUgc3RhbXBzCiAgICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlRXZlbnRzKCBMaXN0PFRpbWVyRXZlbnQ+IGVsaXN0LCBMaXN0PFN0cmluZz4gZWQgKSB7Ci0JSXRlcmF0b3I8VGltZXJFdmVudD4gdGVpdGVyID0gZWxpc3QuaXRlcmF0b3IoKSA7Ci0JSXRlcmF0b3I8U3RyaW5nPiBlZGl0ZXIgPSBlZC5pdGVyYXRvcigpIDsKLQlsb25nIHRpbWUgPSAtMSA7Ci0Jd2hpbGUgKHRlaXRlci5oYXNOZXh0KCkgJiYgZWRpdGVyLmhhc05leHQoKSkgewotCSAgICBUaW1lckV2ZW50IHRlID0gdGVpdGVyLm5leHQoKSA7Ci0JICAgIFN0cmluZyBzdHIgPSBlZGl0ZXIubmV4dCgpIDsKLQkgICAgUGFpcjxJbnRlZ2VyLFBhaXI8VGltZXIsVGltZXJFdmVudC5UaW1lckV2ZW50VHlwZT4+IHAgPSBwYXJzZUV2ZW50RGVzY3JpcHRpb24oIHN0ciApIDsKLQkgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggdGUudGltZXIoKSwgcC5zZWNvbmQoKS5maXJzdCgpICkgOwotCSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCB0ZS50eXBlKCksIHAuc2Vjb25kKCkuc2Vjb25kKCkgKSA7Ci0JICAgIEFzc2VydC5hc3NlcnRUcnVlKCB0ZS50aW1lKCkgPj0gdGltZSApIDsKLQkgICAgdGltZSA9IHRlLnRpbWUoKSA7Ci0JfQotCQotCUFzc2VydC5hc3NlcnRFcXVhbHMoIHRlaXRlci5oYXNOZXh0KCksIGVkaXRlci5oYXNOZXh0KCkgKSA7CisgICAgSXRlcmF0b3I8VGltZXJFdmVudD4gdGVpdGVyID0gZWxpc3QuaXRlcmF0b3IoKSA7CisgICAgSXRlcmF0b3I8U3RyaW5nPiBlZGl0ZXIgPSBlZC5pdGVyYXRvcigpIDsKKyAgICBsb25nIHRpbWUgPSAtMSA7CisgICAgd2hpbGUgKHRlaXRlci5oYXNOZXh0KCkgJiYgZWRpdGVyLmhhc05leHQoKSkgeworICAgICAgICBUaW1lckV2ZW50IHRlID0gdGVpdGVyLm5leHQoKSA7CisgICAgICAgIFN0cmluZyBzdHIgPSBlZGl0ZXIubmV4dCgpIDsKKyAgICAgICAgUGFpcjxJbnRlZ2VyLFBhaXI8VGltZXIsVGltZXJFdmVudC5UaW1lckV2ZW50VHlwZT4+IHAgPSBwYXJzZUV2ZW50RGVzY3JpcHRpb24oIHN0ciApIDsKKyAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggdGUudGltZXIoKSwgcC5zZWNvbmQoKS5maXJzdCgpICkgOworICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCB0ZS50eXBlKCksIHAuc2Vjb25kKCkuc2Vjb25kKCkgKSA7CisgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB0ZS50aW1lKCkgPj0gdGltZSApIDsKKyAgICAgICAgdGltZSA9IHRlLnRpbWUoKSA7CisgICAgfQorCisgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggdGVpdGVyLmhhc05leHQoKSwgZWRpdGVyLmhhc05leHQoKSApIDsKICAgICB9CiAKIAogICAgIHByaXZhdGUgdm9pZCBkaXNwbGF5U3RhdHMoIFN0cmluZyBtc2csIFN0YXRpc3RpY3Mgc3RhdHMgKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCBtc2cgKSA7Ci0JU3lzdGVtLm91dC5wcmludGxuKCAiXHRjb3VudCAgICAgICAgICAgICAgPSAiICsgc3RhdHMuY291bnQoKSApIDsKLQlTeXN0ZW0ub3V0LnByaW50bG4oICJcdG1pbiAgICAgICAgICAgICAgICA9ICIgKyBzdGF0cy5taW4oKSApIDsKLQlTeXN0ZW0ub3V0LnByaW50bG4oICJcdG1heCAgICAgICAgICAgICAgICA9ICIgKyBzdGF0cy5tYXgoKSApIDsKLQlTeXN0ZW0ub3V0LnByaW50bG4oICJcdGF2ZXJhZ2UgICAgICAgICAgICA9ICIgKyBzdGF0cy5hdmVyYWdlKCkgKSA7Ci0JU3lzdGVtLm91dC5wcmludGxuKCAiXHRzdGFuZGFyZCBkZXZpYXRpb24gPSAiICsgc3RhdHMuc3RhbmRhcmREZXZpYXRpb24oKSApIDsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIG1zZyApIDsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJcdGNvdW50ICAgICAgICAgICAgICA9ICIgKyBzdGF0cy5jb3VudCgpICkgOworICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlx0bWluICAgICAgICAgICAgICAgID0gIiArIHN0YXRzLm1pbigpICkgOworICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlx0bWF4ICAgICAgICAgICAgICAgID0gIiArIHN0YXRzLm1heCgpICkgOworICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlx0YXZlcmFnZSAgICAgICAgICAgID0gIiArIHN0YXRzLmF2ZXJhZ2UoKSApIDsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJcdHN0YW5kYXJkIGRldmlhdGlvbiA9ICIgKyBzdGF0cy5zdGFuZGFyZERldmlhdGlvbigpICkgOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkaXNwbGF5U3RhdHNNYXAoIE1hcDxUaW1lcixTdGF0aXN0aWNzPiBzbWFwICkgewotCWZvciAoVGltZXIgdCA6IHNtYXAua2V5U2V0KCkpIHsKLQkgICAgZGlzcGxheVN0YXRzKCAiU3RhdGlzdGljcyBmb3IgVGltZXIgIiArIHQsIHNtYXAuZ2V0KHQpICkgOwotCX0KKyAgICBmb3IgKFRpbWVyIHQgOiBzbWFwLmtleVNldCgpKSB7CisgICAgICAgIGRpc3BsYXlTdGF0cyggIlN0YXRpc3RpY3MgZm9yIFRpbWVyICIgKyB0LCBzbWFwLmdldCh0KSApIDsKKyAgICB9CiAgICAgfQogCiAgICAgQFRlc3QoKQogICAgIHB1YmxpYyB2b2lkIHRlc3RTdGF0c0hhbmRsZXIoKSB7Ci0JTGlzdDxTdHJpbmc+IGVsaXN0ID0gYXNMaXN0KCAidDEiLCAidDIiLCAidDMiICkgOwotCVNldDxDb250cm9sbGFibGU+IGNzZXQgPSBtYWtlQ29udHJvbGxhYmxlU2V0KCBlbGlzdCApIDsKLQlTdHJpbmcgc2hOYW1lID0gIlN0YXRzMSIgOwotCVN0YXRzRXZlbnRIYW5kbGVyIGhhbmRsZXIgPSB0Zi5tYWtlU3RhdHNFdmVudEhhbmRsZXIoIHNoTmFtZSApIDsKLQljb250cm9sbGVyLnJlZ2lzdGVyKCBoYW5kbGVyICkgOwotCWVuYWJsZUNvbnRyb2xsYWJsZXMoIGNzZXQgKSA7Ci0JZ2VuZXJhdGVFdmVudHMoIGNvbnRyb2xsZXIsIGV2SW4gKSA7Ci0JTWFwPFRpbWVyLFN0YXRpc3RpY3M+IHNtYXAgPSBoYW5kbGVyLnN0YXRzKCkgOwotCWRpc3BsYXlTdGF0c01hcCggc21hcCApIDsKKyAgICBMaXN0PFN0cmluZz4gZWxpc3QgPSBhc0xpc3QoICJ0MSIsICJ0MiIsICJ0MyIgKSA7CisgICAgU2V0PENvbnRyb2xsYWJsZT4gY3NldCA9IG1ha2VDb250cm9sbGFibGVTZXQoIGVsaXN0ICkgOworICAgIFN0cmluZyBzaE5hbWUgPSAiU3RhdHMxIiA7CisgICAgU3RhdHNFdmVudEhhbmRsZXIgaGFuZGxlciA9IHRmLm1ha2VTdGF0c0V2ZW50SGFuZGxlciggc2hOYW1lICkgOworICAgIGNvbnRyb2xsZXIucmVnaXN0ZXIoIGhhbmRsZXIgKSA7CisgICAgZW5hYmxlQ29udHJvbGxhYmxlcyggY3NldCApIDsKKyAgICBnZW5lcmF0ZUV2ZW50cyggY29udHJvbGxlciwgZXZJbiApIDsKKyAgICBNYXA8VGltZXIsU3RhdGlzdGljcz4gc21hcCA9IGhhbmRsZXIuc3RhdHMoKSA7CisgICAgZGlzcGxheVN0YXRzTWFwKCBzbWFwICkgOwogCi0JaGFuZGxlci5jbGVhcigpIDsKLQlzbWFwID0gaGFuZGxlci5zdGF0cygpIDsKLQlmb3IgKFRpbWVyIHRpbWVyIDogc21hcC5rZXlTZXQoKSkgewotCSAgICBTdGF0aXN0aWNzIHN0YXRzID0gc21hcC5nZXQoIHRpbWVyICkgOwotCSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggc3RhdHMuY291bnQoKSA9PSAwICkgOwotCX0KKyAgICBoYW5kbGVyLmNsZWFyKCkgOworICAgIHNtYXAgPSBoYW5kbGVyLnN0YXRzKCkgOworICAgIGZvciAoVGltZXIgdGltZXIgOiBzbWFwLmtleVNldCgpKSB7CisgICAgICAgIFN0YXRpc3RpY3Mgc3RhdHMgPSBzbWFwLmdldCggdGltZXIgKSA7CisgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBzdGF0cy5jb3VudCgpID09IDAgKSA7CisgICAgfQogICAgIH0KIAogICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCB0ZXN0VGltZXJDb250cm9sbGVyKCkgewotCUxpc3Q8U3RyaW5nPiBlbGlzdCA9IGFzTGlzdCggInQxIiwgInQzIiApIDsKLQlTZXQ8Q29udHJvbGxhYmxlPiBjc2V0ID0gbWFrZUNvbnRyb2xsYWJsZVNldCggZWxpc3QgKSA7Ci0JZW5hYmxlQ29udHJvbGxhYmxlcyggY3NldCApIDsKKyAgICBMaXN0PFN0cmluZz4gZWxpc3QgPSBhc0xpc3QoICJ0MSIsICJ0MyIgKSA7CisgICAgU2V0PENvbnRyb2xsYWJsZT4gY3NldCA9IG1ha2VDb250cm9sbGFibGVTZXQoIGVsaXN0ICkgOworICAgIGVuYWJsZUNvbnRyb2xsYWJsZXMoIGNzZXQgKSA7CiAKLQkvLyBUZXN0IGZvciBjb3JyZWN0IG5hbWUgYW5kIGZhY3Rvcnkgb2YgY29udHJvbGxlcgotCUFzc2VydC5hc3NlcnRFcXVhbHMoIGNvbnRyb2xsZXIubmFtZSgpLCBjb250cm9sbGVyTmFtZSApIDsKLQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCBjb250cm9sbGVyLmZhY3RvcnkoKSwgdGYgKSA7CisgICAgLy8gVGVzdCBmb3IgY29ycmVjdCBuYW1lIGFuZCBmYWN0b3J5IG9mIGNvbnRyb2xsZXIKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCBjb250cm9sbGVyLm5hbWUoKSwgY29udHJvbGxlck5hbWUgKSA7CisgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggY29udHJvbGxlci5mYWN0b3J5KCksIHRmICkgOwogCi0JLy8gVGVzdCByZWdpc3RyYXRpb24gb2YgZXZlbnQgaGFuZGxlcnMKLQljb250cm9sbGVyLnJlZ2lzdGVyKCBoMSApIDsKLQljb250cm9sbGVyLnJlZ2lzdGVyKCBoMiApIDsKLQlTZXQ8VGltZXJFdmVudEhhbmRsZXI+IGV0ZWNTZXQgPSBhc1NldCggKFRpbWVyRXZlbnRIYW5kbGVyKWgxLCAKLQkgICAgKFRpbWVyRXZlbnRIYW5kbGVyKWgyICkgOwotCVNldDxUaW1lckV2ZW50SGFuZGxlcj4gYXRlY1NldCA9IGNvbnRyb2xsZXIuaGFuZGxlcnMoKSA7Ci0JQXNzZXJ0LmFzc2VydEVxdWFscyggZXRlY1NldCwgYXRlY1NldCApIDsKKyAgICAvLyBUZXN0IHJlZ2lzdHJhdGlvbiBvZiBldmVudCBoYW5kbGVycworICAgIGNvbnRyb2xsZXIucmVnaXN0ZXIoIGgxICkgOworICAgIGNvbnRyb2xsZXIucmVnaXN0ZXIoIGgyICkgOworICAgIFNldDxUaW1lckV2ZW50SGFuZGxlcj4gZXRlY1NldCA9IGFzU2V0KCAoVGltZXJFdmVudEhhbmRsZXIpaDEsCisgICAgICAgIChUaW1lckV2ZW50SGFuZGxlciloMiApIDsKKyAgICBTZXQ8VGltZXJFdmVudEhhbmRsZXI+IGF0ZWNTZXQgPSBjb250cm9sbGVyLmhhbmRsZXJzKCkgOworICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIGV0ZWNTZXQsIGF0ZWNTZXQgKSA7CiAKLQkvLyBUZXN0IGV2ZW50IGhhbmRsZXIgZGVyZWdpc3RyYXRpb24KLQljb250cm9sbGVyLmRlcmVnaXN0ZXIoIGgyICkgOwotCWV0ZWNTZXQgPSBhc1NldCggKFRpbWVyRXZlbnRIYW5kbGVyKWgxICkgOwotCWF0ZWNTZXQgPSBjb250cm9sbGVyLmhhbmRsZXJzKCkgOwotCUFzc2VydC5hc3NlcnRFcXVhbHMoIGV0ZWNTZXQsIGF0ZWNTZXQgKSA7CisgICAgLy8gVGVzdCBldmVudCBoYW5kbGVyIGRlcmVnaXN0cmF0aW9uCisgICAgY29udHJvbGxlci5kZXJlZ2lzdGVyKCBoMiApIDsKKyAgICBldGVjU2V0ID0gYXNTZXQoIChUaW1lckV2ZW50SGFuZGxlciloMSApIDsKKyAgICBhdGVjU2V0ID0gY29udHJvbGxlci5oYW5kbGVycygpIDsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCBldGVjU2V0LCBhdGVjU2V0ICkgOwogCi0JLy8gVGVzdCBmb3IgY29ycmVjdCBnZW5lcmF0aW9uIG9mIGV2ZW50IHNlcXVlbmNlIHdpdGgKLQkvLyBhY3RpdmF0ZWQgdGltZXJzLgotCWNvbnRyb2xsZXIucmVnaXN0ZXIoIGgyICkgOwotCWdlbmVyYXRlRXZlbnRzKCBjb250cm9sbGVyLCBldkluICkgOwotCUxpc3Q8VGltZXJFdmVudD4gZXZlbnRzMSA9IGgxLmV2ZW50cygpIDsKLQlMaXN0PFRpbWVyRXZlbnQ+IGV2ZW50czIgPSBoMi5ldmVudHMoKSA7Ci0JQXNzZXJ0LmFzc2VydEVxdWFscyggZXZlbnRzMSwgZXZlbnRzMiApIDsKKyAgICAvLyBUZXN0IGZvciBjb3JyZWN0IGdlbmVyYXRpb24gb2YgZXZlbnQgc2VxdWVuY2Ugd2l0aAorICAgIC8vIGFjdGl2YXRlZCB0aW1lcnMuCisgICAgY29udHJvbGxlci5yZWdpc3RlciggaDIgKSA7CisgICAgZ2VuZXJhdGVFdmVudHMoIGNvbnRyb2xsZXIsIGV2SW4gKSA7CisgICAgTGlzdDxUaW1lckV2ZW50PiBldmVudHMxID0gaDEuZXZlbnRzKCkgOworICAgIExpc3Q8VGltZXJFdmVudD4gZXZlbnRzMiA9IGgyLmV2ZW50cygpIDsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCBldmVudHMxLCBldmVudHMyICkgOwogCi0JdmFsaWRhdGVFdmVudHMoIGgxLmV2ZW50cygpLCBldk91dCApIDsKKyAgICB2YWxpZGF0ZUV2ZW50cyggaDEuZXZlbnRzKCksIGV2T3V0ICkgOwogCi0JLy8gY2xlYW4gdXAKLQljb250cm9sbGVyLmRlcmVnaXN0ZXIoIGgxICkgOwotCWNvbnRyb2xsZXIuZGVyZWdpc3RlciggaDIgKSA7Ci0JZGlzYWJsZUFsbENvbnRyb2xsYWJsZXMoKSA7CisgICAgLy8gY2xlYW4gdXAKKyAgICBjb250cm9sbGVyLmRlcmVnaXN0ZXIoIGgxICkgOworICAgIGNvbnRyb2xsZXIuZGVyZWdpc3RlciggaDIgKSA7CisgICAgZGlzYWJsZUFsbENvbnRyb2xsYWJsZXMoKSA7CiAgICAgfQogCi0gICAgQENvbmZpZ3VyYXRpb24oIGFmdGVyVGVzdCA9IHRydWUgKSAKKyAgICBAQ29uZmlndXJhdGlvbiggYWZ0ZXJUZXN0ID0gdHJ1ZSApCiAgICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB7Ci0JVGltZXJGYWN0b3J5QnVpbGRlci5kZXN0cm95KCB0ZiApIDsKKyAgICBUaW1lckZhY3RvcnlCdWlsZGVyLmRlc3Ryb3koIHRmICkgOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvY29yYmEvdGltZXIvdGVzdHMvdGVzdC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvY29yYmEvdGltZXIvdGVzdHMvdGVzdC9DbGllbnQuamF2YQppbmRleCAzM2RmMmU3Li43ODU2Mjc3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL2NvcmJhL3RpbWVyL3Rlc3RzL3Rlc3QvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb3JiYS90aW1lci90ZXN0cy90ZXN0L0NsaWVudC5qYXZhCkBAIC01NCwyMDAgKzU0LDIwMCBAQAogICAgIC8vIFRlc3QgVGltZXJGYWN0b3J5QnVpbGRlcgogICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCBmYWN0b3J5QnVpbGRlckNyZWF0ZTEoKSB7Ci0JU3RyaW5nIG5hbWUgPSAiVEYxIiA7Ci0JU3RyaW5nIGRlc2NyaXB0aW9uID0gIkZpcnN0IFRlc3QgRmFjdG9yeSIgOwotCVRpbWVyRmFjdG9yeSB0ZiA9IFRpbWVyRmFjdG9yeUJ1aWxkZXIubWFrZSggbmFtZSwgZGVzY3JpcHRpb24gKSA7Ci0JQXNzZXJ0LmFzc2VydEVxdWFscyggdGYubmFtZSgpLCBuYW1lICkgOwotCUFzc2VydC5hc3NlcnRFcXVhbHMoIHRmLmRlc2NyaXB0aW9uKCksIGRlc2NyaXB0aW9uICkgOwotCVRpbWVyRmFjdG9yeUJ1aWxkZXIuZGVzdHJveSggdGYgKSA7CisgICAgU3RyaW5nIG5hbWUgPSAiVEYxIiA7CisgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gIkZpcnN0IFRlc3QgRmFjdG9yeSIgOworICAgIFRpbWVyRmFjdG9yeSB0ZiA9IFRpbWVyRmFjdG9yeUJ1aWxkZXIubWFrZSggbmFtZSwgZGVzY3JpcHRpb24gKSA7CisgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggdGYubmFtZSgpLCBuYW1lICkgOworICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIHRmLmRlc2NyaXB0aW9uKCksIGRlc2NyaXB0aW9uICkgOworICAgIFRpbWVyRmFjdG9yeUJ1aWxkZXIuZGVzdHJveSggdGYgKSA7CiAgICAgfQogCiAgICAgQFRlc3QoKQogICAgIEBFeHBlY3RlZEV4Y2VwdGlvbnMoIHsgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmNsYXNzIH0gKQogICAgIHB1YmxpYyB2b2lkIGZhY3RvcnlCdWlsZGVyQ3JlYXRlMigpIHsKLQlTdHJpbmcgbmFtZSA9ICJURjEiIDsKLQlTdHJpbmcgZGVzY3JpcHRpb24gPSAiRmlyc3QgVGVzdCBGYWN0b3J5IiA7Ci0JVGltZXJGYWN0b3J5IHRmID0gVGltZXJGYWN0b3J5QnVpbGRlci5tYWtlKCBuYW1lLCBkZXNjcmlwdGlvbiApIDsKLQl0cnkgewotCSAgICB0ZiA9IFRpbWVyRmFjdG9yeUJ1aWxkZXIubWFrZSggbmFtZSwgZGVzY3JpcHRpb24gKSA7Ci0JfSBmaW5hbGx5IHsKLQkgICAgVGltZXJGYWN0b3J5QnVpbGRlci5kZXN0cm95KCB0ZiApIDsKLQl9CisgICAgU3RyaW5nIG5hbWUgPSAiVEYxIiA7CisgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gIkZpcnN0IFRlc3QgRmFjdG9yeSIgOworICAgIFRpbWVyRmFjdG9yeSB0ZiA9IFRpbWVyRmFjdG9yeUJ1aWxkZXIubWFrZSggbmFtZSwgZGVzY3JpcHRpb24gKSA7CisgICAgdHJ5IHsKKyAgICAgICAgdGYgPSBUaW1lckZhY3RvcnlCdWlsZGVyLm1ha2UoIG5hbWUsIGRlc2NyaXB0aW9uICkgOworICAgIH0gZmluYWxseSB7CisgICAgICAgIFRpbWVyRmFjdG9yeUJ1aWxkZXIuZGVzdHJveSggdGYgKSA7CisgICAgfQogICAgIH0KIAogICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCBmYWN0b3J5QnVpbGRlckNyZWF0ZTMoKSB7Ci0JU3RyaW5nIG5hbWUgPSAiVEYxIiA7Ci0JU3RyaW5nIGRlc2NyaXB0aW9uID0gIkZpcnN0IFRlc3QgRmFjdG9yeSIgOwotCVRpbWVyRmFjdG9yeSB0ZiA9IFRpbWVyRmFjdG9yeUJ1aWxkZXIubWFrZSggbmFtZSwgZGVzY3JpcHRpb24gKSA7Ci0JVGltZXJGYWN0b3J5QnVpbGRlci5kZXN0cm95KCB0ZiApIDsKLQl0ZiA9IFRpbWVyRmFjdG9yeUJ1aWxkZXIubWFrZSggbmFtZSwgZGVzY3JpcHRpb24gKSA7Ci0JVGltZXJGYWN0b3J5QnVpbGRlci5kZXN0cm95KCB0ZiApIDsKKyAgICBTdHJpbmcgbmFtZSA9ICJURjEiIDsKKyAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSAiRmlyc3QgVGVzdCBGYWN0b3J5IiA7CisgICAgVGltZXJGYWN0b3J5IHRmID0gVGltZXJGYWN0b3J5QnVpbGRlci5tYWtlKCBuYW1lLCBkZXNjcmlwdGlvbiApIDsKKyAgICBUaW1lckZhY3RvcnlCdWlsZGVyLmRlc3Ryb3koIHRmICkgOworICAgIHRmID0gVGltZXJGYWN0b3J5QnVpbGRlci5tYWtlKCBuYW1lLCBkZXNjcmlwdGlvbiApIDsKKyAgICBUaW1lckZhY3RvcnlCdWlsZGVyLmRlc3Ryb3koIHRmICkgOwogICAgIH0KIAogICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCB0ZXN0VmVyc2lvbmVkSGFzaFNldCgpIHsKLQlTdHJpbmdbXSBkYXRhID0geyAicmVkIiwgIm9yYW5nZSIsICJ5ZWxsb3ciLCAiZ3JlZW4iLCAiYmx1ZSIsICJpbmRpZ28iLCAidmlvbGV0IiB9IDsKLQlTdHJpbmcgdG9SZW1vdmUxID0gImdyZWVuIiA7Ci0JU3RyaW5nIHRvUmVtb3ZlMiA9ICJibHVlIiA7CisgICAgU3RyaW5nW10gZGF0YSA9IHsgInJlZCIsICJvcmFuZ2UiLCAieWVsbG93IiwgImdyZWVuIiwgImJsdWUiLCAiaW5kaWdvIiwgInZpb2xldCIgfSA7CisgICAgU3RyaW5nIHRvUmVtb3ZlMSA9ICJncmVlbiIgOworICAgIFN0cmluZyB0b1JlbW92ZTIgPSAiYmx1ZSIgOwogCi0JVmVyc2lvbmVkSGFzaFNldDxTdHJpbmc+IHRzZXQgPSBuZXcgVmVyc2lvbmVkSGFzaFNldDxTdHJpbmc+KCkgOwotCWxvbmcgdmVyc2lvbiA9IHRzZXQudmVyc2lvbigpIDsKKyAgICBWZXJzaW9uZWRIYXNoU2V0PFN0cmluZz4gdHNldCA9IG5ldyBWZXJzaW9uZWRIYXNoU2V0PFN0cmluZz4oKSA7CisgICAgbG9uZyB2ZXJzaW9uID0gdHNldC52ZXJzaW9uKCkgOwogCi0JLy8gdGVzdCBhZGQKLQlmb3IgKFN0cmluZyBzdHIgOiBkYXRhKQotCSAgICB0c2V0LmFkZCggc3RyICkgOwotCUFzc2VydC5hc3NlcnRUcnVlKCB2ZXJzaW9uICE9IHRzZXQudmVyc2lvbigpICkgOwotCXZlcnNpb24gPSB0c2V0LnZlcnNpb24oKSA7CisgICAgLy8gdGVzdCBhZGQKKyAgICBmb3IgKFN0cmluZyBzdHIgOiBkYXRhKQorICAgICAgICB0c2V0LmFkZCggc3RyICkgOworICAgIEFzc2VydC5hc3NlcnRUcnVlKCB2ZXJzaW9uICE9IHRzZXQudmVyc2lvbigpICkgOworICAgIHZlcnNpb24gPSB0c2V0LnZlcnNpb24oKSA7CiAKLQkvLyBBZGQgdGhhdCBkb2VzIG5vdCBjaGFuZ2Ugc2V0IGRvZXMgbm90IGNoYW5nZSB2ZXJzaW9uCi0JdHNldC5hZGQoIHRvUmVtb3ZlMSApIDsKLQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCB2ZXJzaW9uLCB0c2V0LnZlcnNpb24oKSApIDsKLQkKLQkvLyB0ZXN0IGRpcmVjdCByZW1vdmUKLQl0c2V0LnJlbW92ZSggdG9SZW1vdmUxICkgOwkKLQlBc3NlcnQuYXNzZXJ0VHJ1ZSggdmVyc2lvbiAhPSB0c2V0LnZlcnNpb24oKSApIDsKLQl2ZXJzaW9uID0gdHNldC52ZXJzaW9uKCkgOworICAgIC8vIEFkZCB0aGF0IGRvZXMgbm90IGNoYW5nZSBzZXQgZG9lcyBub3QgY2hhbmdlIHZlcnNpb24KKyAgICB0c2V0LmFkZCggdG9SZW1vdmUxICkgOworICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIHZlcnNpb24sIHRzZXQudmVyc2lvbigpICkgOwogCi0JLy8gUmVtb3ZlIHRoYXQgZG9lcyBub3QgY2hhbmdlIHNldCBkb2VzIG5vdCBjaGFuZ2UgdmVyc2lvbgotCXRzZXQucmVtb3ZlKCB0b1JlbW92ZTEgKSA7CQotCUFzc2VydC5hc3NlcnRFcXVhbHMoIHZlcnNpb24sIHRzZXQudmVyc2lvbigpICkgOworICAgIC8vIHRlc3QgZGlyZWN0IHJlbW92ZQorICAgIHRzZXQucmVtb3ZlKCB0b1JlbW92ZTEgKSA7CisgICAgQXNzZXJ0LmFzc2VydFRydWUoIHZlcnNpb24gIT0gdHNldC52ZXJzaW9uKCkgKSA7CisgICAgdmVyc2lvbiA9IHRzZXQudmVyc2lvbigpIDsKIAotCS8vIHRlc3QgaXRlcmF0b3Igd2l0aG91dCByZW1vdmUKLQlTdHJpbmcgcmFpbmJvdyA9ICIiIDsKLQlmb3IgKFN0cmluZyBzdHIgOiB0c2V0KQotCSAgICByYWluYm93ICs9ICIgIiArIHN0ciA7CisgICAgLy8gUmVtb3ZlIHRoYXQgZG9lcyBub3QgY2hhbmdlIHNldCBkb2VzIG5vdCBjaGFuZ2UgdmVyc2lvbgorICAgIHRzZXQucmVtb3ZlKCB0b1JlbW92ZTEgKSA7CisgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggdmVyc2lvbiwgdHNldC52ZXJzaW9uKCkgKSA7CiAKLQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCB2ZXJzaW9uLCB0c2V0LnZlcnNpb24oKSApIDsKKyAgICAvLyB0ZXN0IGl0ZXJhdG9yIHdpdGhvdXQgcmVtb3ZlCisgICAgU3RyaW5nIHJhaW5ib3cgPSAiIiA7CisgICAgZm9yIChTdHJpbmcgc3RyIDogdHNldCkKKyAgICAgICAgcmFpbmJvdyArPSAiICIgKyBzdHIgOwogCi0JLy8gdGVzdCBpdGVyYXRvciB3aXRoIHJlbW92ZQotCUl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IHRzZXQuaXRlcmF0b3IoKSA7Ci0Jd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JICAgIFN0cmluZyBzdHIgPSBpdGVyLm5leHQoKSA7Ci0JICAgIGlmIChzdHIuZXF1YWxzKCB0b1JlbW92ZTIgKSkgCi0JCWl0ZXIucmVtb3ZlKCkgOwotCX0KKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCB2ZXJzaW9uLCB0c2V0LnZlcnNpb24oKSApIDsKIAotCUFzc2VydC5hc3NlcnRUcnVlKCB2ZXJzaW9uICE9IHRzZXQudmVyc2lvbigpICkgOworICAgIC8vIHRlc3QgaXRlcmF0b3Igd2l0aCByZW1vdmUKKyAgICBJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSB0c2V0Lml0ZXJhdG9yKCkgOworICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgeworICAgICAgICBTdHJpbmcgc3RyID0gaXRlci5uZXh0KCkgOworICAgICAgICBpZiAoc3RyLmVxdWFscyggdG9SZW1vdmUyICkpCisgICAgICAgIGl0ZXIucmVtb3ZlKCkgOworICAgIH0KKworICAgIEFzc2VydC5hc3NlcnRUcnVlKCB2ZXJzaW9uICE9IHRzZXQudmVyc2lvbigpICkgOwogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgc2xlZXAoIGludCB0aW1lICkgewotCXRyeSB7Ci0JICAgIFRocmVhZC5zbGVlcCggdGltZSApIDsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXhjKSB7Ci0JICAgIC8vIGlnbm9yZSBpdCAKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgVGhyZWFkLnNsZWVwKCB0aW1lICkgOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHsKKyAgICAgICAgLy8gaWdub3JlIGl0CisgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCByZWNvcmRDYWxsKCBUaW1pbmdQb2ludHMgdHAsIFRpbWVyIHRvcCwgCi0JVGltZXJFdmVudENvbnRyb2xsZXIgY29udHJvbGxlciwgaW50IHRyYW5zcG9ydERlbGF5ICkgeworICAgIHByaXZhdGUgdm9pZCByZWNvcmRDYWxsKCBUaW1pbmdQb2ludHMgdHAsIFRpbWVyIHRvcCwKKyAgICBUaW1lckV2ZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBpbnQgdHJhbnNwb3J0RGVsYXkgKSB7CiAKLQljb250cm9sbGVyLmVudGVyKCB0b3AgKSA7CisgICAgY29udHJvbGxlci5lbnRlciggdG9wICkgOwogCi0JdHAuZW50ZXJfaGFzTmV4dE5leHQoKSA7Ci0Jc2xlZXAoIDEgKSA7Ci0JdHAuZXhpdF9oYXNOZXh0TmV4dCgpIDsKKyAgICB0cC5lbnRlcl9oYXNOZXh0TmV4dCgpIDsKKyAgICBzbGVlcCggMSApIDsKKyAgICB0cC5leGl0X2hhc05leHROZXh0KCkgOwogCi0JdHAuZW50ZXJfY29ubmVjdGlvblNldHVwKCkgOwotCXNsZWVwKCA0ICkgOwotCXRwLmV4aXRfY29ubmVjdGlvblNldHVwKCkgOworICAgIHRwLmVudGVyX2Nvbm5lY3Rpb25TZXR1cCgpIDsKKyAgICBzbGVlcCggNCApIDsKKyAgICB0cC5leGl0X2Nvbm5lY3Rpb25TZXR1cCgpIDsKIAotCXRwLmVudGVyX2NsaWVudEVuY29kaW5nKCkgOwotCXNsZWVwKCAxMDAgKSA7Ci0JdHAuZXhpdF9jbGllbnRFbmNvZGluZygpIDsKKyAgICB0cC5lbnRlcl9jbGllbnRFbmNvZGluZygpIDsKKyAgICBzbGVlcCggMTAwICkgOworICAgIHRwLmV4aXRfY2xpZW50RW5jb2RpbmcoKSA7CiAKLQl0cC5lbnRlcl9jbGllbnRUcmFuc3BvcnRBbmRXYWl0KCkgOwotCXNsZWVwKCB0cmFuc3BvcnREZWxheSApIDsKLQl0cC5leGl0X2NsaWVudFRyYW5zcG9ydEFuZFdhaXQoKSA7CisgICAgdHAuZW50ZXJfY2xpZW50VHJhbnNwb3J0QW5kV2FpdCgpIDsKKyAgICBzbGVlcCggdHJhbnNwb3J0RGVsYXkgKSA7CisgICAgdHAuZXhpdF9jbGllbnRUcmFuc3BvcnRBbmRXYWl0KCkgOwogCi0JdHAuZW50ZXJfY2xpZW50RGVjb2RpbmcoKSA7Ci0Jc2xlZXAoIDQwICkgOwotCXRwLmV4aXRfY2xpZW50RGVjb2RpbmcoKSA7CisgICAgdHAuZW50ZXJfY2xpZW50RGVjb2RpbmcoKSA7CisgICAgc2xlZXAoIDQwICkgOworICAgIHRwLmV4aXRfY2xpZW50RGVjb2RpbmcoKSA7CiAKLQljb250cm9sbGVyLmV4aXQoIHRvcCApIDsKKyAgICBjb250cm9sbGVyLmV4aXQoIHRvcCApIDsKICAgICB9CiAKICAgICBNYXA8VGltZXIsU3RhdGlzdGljcz4gbWFrZURhdGEoKSB7Ci0JLy8gU2V0dXAgdGltaW5nIHBvaW50cyBhbmQgYSB0b3AtbGV2ZWwgdGltZXIKLQlQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKSA7Ci0JcHJvcHMuc2V0UHJvcGVydHkoICJvcmcub21nLkNPUkJBLk9SQkNsYXNzIiwgCi0JICAgICJjb20uc3VuLmNvcmJhLmVlLmltcGwub3JiLk9SQkltcGwiICkgOwotCU9SQiBvcmIgPSAoT1JCKU9SQi5pbml0KCBuZXcgU3RyaW5nWzBdLCBwcm9wcyApIDsKKyAgICAvLyBTZXR1cCB0aW1pbmcgcG9pbnRzIGFuZCBhIHRvcC1sZXZlbCB0aW1lcgorICAgIFByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpIDsKKyAgICBwcm9wcy5zZXRQcm9wZXJ0eSggIm9yZy5vbWcuQ09SQkEuT1JCQ2xhc3MiLAorICAgICAgICAiY29tLnN1bi5jb3JiYS5lZS5pbXBsLm9yYi5PUkJJbXBsIiApIDsKKyAgICBPUkIgb3JiID0gKE9SQilPUkIuaW5pdCggbmV3IFN0cmluZ1swXSwgcHJvcHMgKSA7CiAKLQl0cnkgewotCSAgICBUaW1lck1hbmFnZXI8VGltaW5nUG9pbnRzPiB0bSA9IG9yYi5nZXRUaW1lck1hbmFnZXIoKSA7Ci0JICAgIFRpbWluZ1BvaW50cyB0cCA9IHRtLnBvaW50cygpIDsKLQkgICAgVGltZXJGYWN0b3J5IHRmID0gdG0uZmFjdG9yeSgpIDsKLQkgICAgVGltZXJFdmVudENvbnRyb2xsZXIgY29udHJvbGxlciA9IHRtLmNvbnRyb2xsZXIoKSA7Ci0JICAgIFN0YXRzRXZlbnRIYW5kbGVyIGhhbmRsZXIgPSB0Zi5tYWtlU3RhdHNFdmVudEhhbmRsZXIoICJUZXN0U3RhdHMiICkgOwotCSAgICBjb250cm9sbGVyLnJlZ2lzdGVyKCBoYW5kbGVyICkgOwotCSAgICBUaW1lciB0b3AgPSB0Zi5tYWtlVGltZXIoICJ0b3AiLCAiRW5jbG9zZXMgdGhlIGVudGlyZSBvcGVyYXRpb24iICkgOwotCSAgICB0b3AuZW5hYmxlKCkgOwotCSAgICB0cC50cmFuc3BvcnQuZW5hYmxlKCkgOwotCSAgICBoYW5kbGVyLmNsZWFyKCkgOworICAgIHRyeSB7CisgICAgICAgIFRpbWVyTWFuYWdlcjxUaW1pbmdQb2ludHM+IHRtID0gb3JiLmdldFRpbWVyTWFuYWdlcigpIDsKKyAgICAgICAgVGltaW5nUG9pbnRzIHRwID0gdG0ucG9pbnRzKCkgOworICAgICAgICBUaW1lckZhY3RvcnkgdGYgPSB0bS5mYWN0b3J5KCkgOworICAgICAgICBUaW1lckV2ZW50Q29udHJvbGxlciBjb250cm9sbGVyID0gdG0uY29udHJvbGxlcigpIDsKKyAgICAgICAgU3RhdHNFdmVudEhhbmRsZXIgaGFuZGxlciA9IHRmLm1ha2VTdGF0c0V2ZW50SGFuZGxlciggIlRlc3RTdGF0cyIgKSA7CisgICAgICAgIGNvbnRyb2xsZXIucmVnaXN0ZXIoIGhhbmRsZXIgKSA7CisgICAgICAgIFRpbWVyIHRvcCA9IHRmLm1ha2VUaW1lciggInRvcCIsICJFbmNsb3NlcyB0aGUgZW50aXJlIG9wZXJhdGlvbiIgKSA7CisgICAgICAgIHRvcC5lbmFibGUoKSA7CisgICAgICAgIHRwLnRyYW5zcG9ydC5lbmFibGUoKSA7CisgICAgICAgIGhhbmRsZXIuY2xlYXIoKSA7CiAKLQkgICAgLy8gU2ltdWxhdGUgdGhlIGFjdGlvbnMgb2YgdGhlIE9SQiBjbGllbnQgdHJhbnNwb3J0IAotCSAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCAyNSApIDsKLQkgICAgcmVjb3JkQ2FsbCggdHAsIHRvcCwgY29udHJvbGxlciwgMzEgKSA7Ci0JICAgIHJlY29yZENhbGwoIHRwLCB0b3AsIGNvbnRyb2xsZXIsIDI3ICkgOwotCSAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCA0MiApIDsKLQkgICAgcmVjb3JkQ2FsbCggdHAsIHRvcCwgY29udHJvbGxlciwgMTkgKSA7Ci0JICAgIHJlY29yZENhbGwoIHRwLCB0b3AsIGNvbnRyb2xsZXIsIDIxICkgOwotCSAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCAyMyApIDsKLQkgICAgcmVjb3JkQ2FsbCggdHAsIHRvcCwgY29udHJvbGxlciwgMjUgKSA7Ci0JICAgIHJlY29yZENhbGwoIHRwLCB0b3AsIGNvbnRyb2xsZXIsIDM0ICkgOwotCSAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCAzMyApIDsKLQkgICAgcmVjb3JkQ2FsbCggdHAsIHRvcCwgY29udHJvbGxlciwgMzEgKSA7Ci0JICAgIHJlY29yZENhbGwoIHRwLCB0b3AsIGNvbnRyb2xsZXIsIDI4ICkgOwotCSAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCAyNyApIDsKLQkgICAgcmVjb3JkQ2FsbCggdHAsIHRvcCwgY29udHJvbGxlciwgMjkgKSA7Ci0JICAgIHJlY29yZENhbGwoIHRwLCB0b3AsIGNvbnRyb2xsZXIsIDMwICkgOwotCSAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCAzMSApIDsKLQkgICAgcmVjb3JkQ2FsbCggdHAsIHRvcCwgY29udHJvbGxlciwgMjggKSA7CisgICAgICAgIC8vIFNpbXVsYXRlIHRoZSBhY3Rpb25zIG9mIHRoZSBPUkIgY2xpZW50IHRyYW5zcG9ydAorICAgICAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCAyNSApIDsKKyAgICAgICAgcmVjb3JkQ2FsbCggdHAsIHRvcCwgY29udHJvbGxlciwgMzEgKSA7CisgICAgICAgIHJlY29yZENhbGwoIHRwLCB0b3AsIGNvbnRyb2xsZXIsIDI3ICkgOworICAgICAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCA0MiApIDsKKyAgICAgICAgcmVjb3JkQ2FsbCggdHAsIHRvcCwgY29udHJvbGxlciwgMTkgKSA7CisgICAgICAgIHJlY29yZENhbGwoIHRwLCB0b3AsIGNvbnRyb2xsZXIsIDIxICkgOworICAgICAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCAyMyApIDsKKyAgICAgICAgcmVjb3JkQ2FsbCggdHAsIHRvcCwgY29udHJvbGxlciwgMjUgKSA7CisgICAgICAgIHJlY29yZENhbGwoIHRwLCB0b3AsIGNvbnRyb2xsZXIsIDM0ICkgOworICAgICAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCAzMyApIDsKKyAgICAgICAgcmVjb3JkQ2FsbCggdHAsIHRvcCwgY29udHJvbGxlciwgMzEgKSA7CisgICAgICAgIHJlY29yZENhbGwoIHRwLCB0b3AsIGNvbnRyb2xsZXIsIDI4ICkgOworICAgICAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCAyNyApIDsKKyAgICAgICAgcmVjb3JkQ2FsbCggdHAsIHRvcCwgY29udHJvbGxlciwgMjkgKSA7CisgICAgICAgIHJlY29yZENhbGwoIHRwLCB0b3AsIGNvbnRyb2xsZXIsIDMwICkgOworICAgICAgICByZWNvcmRDYWxsKCB0cCwgdG9wLCBjb250cm9sbGVyLCAzMSApIDsKKyAgICAgICAgcmVjb3JkQ2FsbCggdHAsIHRvcCwgY29udHJvbGxlciwgMjggKSA7CiAKLQkgICAgcmV0dXJuIGhhbmRsZXIuc3RhdHMoKSA7Ci0JfSBmaW5hbGx5IHsKLQkgICAgb3JiLmRlc3Ryb3koKSA7Ci0JfQorICAgICAgICByZXR1cm4gaGFuZGxlci5zdGF0cygpIDsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBvcmIuZGVzdHJveSgpIDsKKyAgICB9CiAgICAgfQogCiAgICAgQFRlc3QoKQogICAgIHZvaWQgZ2VuZXJhdGVTdGF0c1RhYmxlKCkgewotCU1hcDxUaW1lciwgU3RhdGlzdGljcz4gZGF0YSA9IG1ha2VEYXRhKCkgOworICAgIE1hcDxUaW1lciwgU3RhdGlzdGljcz4gZGF0YSA9IG1ha2VEYXRhKCkgOwogCi0JVGltZXJVdGlscy53cml0ZUh0bWxUYWJsZSggZGF0YSwgInN0YXRzLmh0bWwiLCAKLQkgICAgIkNsaWVudCBUZXN0IFRpbWluZyBEYXRhIiApIDsKKyAgICBUaW1lclV0aWxzLndyaXRlSHRtbFRhYmxlKCBkYXRhLCAic3RhdHMuaHRtbCIsCisgICAgICAgICJDbGllbnQgVGVzdCBUaW1pbmcgRGF0YSIgKSA7CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oIFN0cmluZ1tdIGFyZ3MgKSB7Ci0JVGVzdE5HIHRuZyA9IG5ldyBUZXN0TkcoKSA7CisgICAgVGVzdE5HIHRuZyA9IG5ldyBUZXN0TkcoKSA7CiAKLQlDbGFzczw/PiBjbHMgPSBudWxsIDsKKyAgICBDbGFzczw/PiBjbHMgPSBudWxsIDsKIAotCXRyeSB7Ci0JICAgIGNscyA9IENsYXNzLmZvck5hbWUoICJjb3JiYS50aW1lci5UaW1lclBvaW50c1N1aXRlIiApIDsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXhjKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkNhdWdodCBleGNlcHRpb246ICIgKyBleGMgKSA7Ci0JICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKSA7Ci0JfQorICAgIHRyeSB7CisgICAgICAgIGNscyA9IENsYXNzLmZvck5hbWUoICJjb3JiYS50aW1lci5UaW1lclBvaW50c1N1aXRlIiApIDsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXhjKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkNhdWdodCBleGNlcHRpb246ICIgKyBleGMgKSA7CisgICAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKSA7CisgICAgfQogCi0JTGlzdDxDbGFzczw/Pj4gY2xhc3NlcyA9IG5ldyBBcnJheUxpc3Q8Q2xhc3M8Pz4+KCBhc0xpc3QoIAotCSAgICBDbGllbnQuY2xhc3MsIAotCSAgICBOYW1lZEJhc2VTdWl0ZS5jbGFzcywgCi0JICAgIENvbnRyb2xsYWJsZUJhc2VTdWl0ZS5jbGFzcywKLQkgICAgVGltZXJGYWN0b3J5U3VpdGUuY2xhc3MsCi0JICAgIEFjdGl2YXRpb25TdWl0ZS5jbGFzcyApICkgOworICAgIExpc3Q8Q2xhc3M8Pz4+IGNsYXNzZXMgPSBuZXcgQXJyYXlMaXN0PENsYXNzPD8+PiggYXNMaXN0KAorICAgICAgICBDbGllbnQuY2xhc3MsCisgICAgICAgIE5hbWVkQmFzZVN1aXRlLmNsYXNzLAorICAgICAgICBDb250cm9sbGFibGVCYXNlU3VpdGUuY2xhc3MsCisgICAgICAgIFRpbWVyRmFjdG9yeVN1aXRlLmNsYXNzLAorICAgICAgICBBY3RpdmF0aW9uU3VpdGUuY2xhc3MgKSApIDsKIAotCWlmIChjbHMgIT0gbnVsbCkKLQkgICAgY2xhc3Nlcy5hZGQoIGNscyApIDsKKyAgICBpZiAoY2xzICE9IG51bGwpCisgICAgICAgIGNsYXNzZXMuYWRkKCBjbHMgKSA7CiAKLQlDbGFzc1tdIHRuZ0NsYXNzZXMgPSBjbGFzc2VzLnRvQXJyYXkoIG5ldyBDbGFzczw/PlsgY2xhc3Nlcy5zaXplKCkgXSApIDsKKyAgICBDbGFzc1tdIHRuZ0NsYXNzZXMgPSBjbGFzc2VzLnRvQXJyYXkoIG5ldyBDbGFzczw/PlsgY2xhc3Nlcy5zaXplKCkgXSApIDsKIAotCXRuZy5zZXRUZXN0Q2xhc3NlcyggdG5nQ2xhc3NlcyApIDsKKyAgICB0bmcuc2V0VGVzdENsYXNzZXMoIHRuZ0NsYXNzZXMgKSA7CiAKLQl0bmcucnVuKCkgOworICAgIHRuZy5ydW4oKSA7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidG5nLmhhc0ZhaWx1cmU9Iit0bmcuaGFzRmFpbHVyZSgpKTsKLQlTeXN0ZW0uZXhpdCggdG5nLmhhc0ZhaWx1cmUoKSA/IDEgOiAwICkgOworICAgIFN5c3RlbS5leGl0KCB0bmcuaGFzRmFpbHVyZSgpID8gMSA6IDAgKSA7CiAKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL2NvcmJhL3RpbWVyL3Rlc3RzL3Rlc3QvQ29udHJvbGxhYmxlQmFzZVN1aXRlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL2NvcmJhL3RpbWVyL3Rlc3RzL3Rlc3QvQ29udHJvbGxhYmxlQmFzZVN1aXRlLmphdmEKaW5kZXggMDk3NWViMS4uYjUxOGM2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb3JiYS90aW1lci90ZXN0cy90ZXN0L0NvbnRyb2xsYWJsZUJhc2VTdWl0ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvY29yYmEvdGltZXIvdGVzdHMvdGVzdC9Db250cm9sbGFibGVCYXNlU3VpdGUuamF2YQpAQCAtNDcsNDAgKzQ3LDQwIEBACiAgICAgcHJpdmF0ZSBDb250cm9sbGFibGVUZXN0IGN0IDsKIAogICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIENvbnRyb2xsYWJsZVRlc3QgZXh0ZW5kcyBDb250cm9sbGFibGVCYXNlIHsKLQlwdWJsaWMgQ29udHJvbGxhYmxlVGVzdCggaW50IGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2NyaXB0aW9uLAotCSAgICBUaW1lckZhY3RvcnkgZmFjdG9yeSApIHsKKyAgICBwdWJsaWMgQ29udHJvbGxhYmxlVGVzdCggaW50IGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2NyaXB0aW9uLAorICAgICAgICBUaW1lckZhY3RvcnkgZmFjdG9yeSApIHsKIAotCSAgICBzdXBlciggaWQsIG5hbWUsIGRlc2NyaXB0aW9uLCBUaW1lckZhY3RvcnlJbXBsLmNsYXNzLmNhc3QoIGZhY3RvcnkgKSApIDsKLQl9CisgICAgICAgIHN1cGVyKCBpZCwgbmFtZSwgZGVzY3JpcHRpb24sIFRpbWVyRmFjdG9yeUltcGwuY2xhc3MuY2FzdCggZmFjdG9yeSApICkgOworICAgIH0KICAgICB9CiAKICAgICBAQ29uZmlndXJhdGlvbiggYmVmb3JlVGVzdCA9IHRydWUgKQogICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgewotCWZhY3RvcnkgPSBUaW1lckZhY3RvcnlCdWlsZGVyLm1ha2UoICJDVEYiLCAiTm8gZGVzY3JpcHRpb24iICkgOwotCWN0ID0gbmV3IENvbnRyb2xsYWJsZVRlc3QoIGlkLCBuYW1lLCBkZXNjcmlwdGlvbiwgZmFjdG9yeSApIDsKKyAgICBmYWN0b3J5ID0gVGltZXJGYWN0b3J5QnVpbGRlci5tYWtlKCAiQ1RGIiwgIk5vIGRlc2NyaXB0aW9uIiApIDsKKyAgICBjdCA9IG5ldyBDb250cm9sbGFibGVUZXN0KCBpZCwgbmFtZSwgZGVzY3JpcHRpb24sIGZhY3RvcnkgKSA7CiAgICAgfQogCi0gICAgQENvbmZpZ3VyYXRpb24oIGFmdGVyVGVzdCA9IHRydWUgKSAKKyAgICBAQ29uZmlndXJhdGlvbiggYWZ0ZXJUZXN0ID0gdHJ1ZSApCiAgICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB7Ci0JVGltZXJGYWN0b3J5QnVpbGRlci5kZXN0cm95KCBmYWN0b3J5ICkgOworICAgIFRpbWVyRmFjdG9yeUJ1aWxkZXIuZGVzdHJveSggZmFjdG9yeSApIDsKICAgICB9CiAKICAgICBAVGVzdCgpCiAgICAgcHVibGljIHZvaWQgdGVzdElkKCkgewotCUFzc2VydC5hc3NlcnRFcXVhbHMoIGlkLCBjdC5pZCgpICkgOworICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIGlkLCBjdC5pZCgpICkgOwogICAgIH0KIAotICAgIEBUZXN0KCkgCisgICAgQFRlc3QoKQogICAgIHB1YmxpYyB2b2lkIHRlc3REZXNjcmlwdGlvbigpIHsKLQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCBkZXNjcmlwdGlvbiwgY3QuZGVzY3JpcHRpb24oKSApIDsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCBkZXNjcmlwdGlvbiwgY3QuZGVzY3JpcHRpb24oKSApIDsKICAgICB9CiAKICAgICBAVGVzdCgpCiAgICAgcHVibGljIHZvaWQgdGVzdEVuYWJsZSgpIHsKLQlBc3NlcnQuYXNzZXJ0RmFsc2UoIGN0LmlzRW5hYmxlZCgpICkgOwotCWN0LmVuYWJsZSgpIDsKLQlBc3NlcnQuYXNzZXJ0VHJ1ZSggY3QuaXNFbmFibGVkKCkgKSA7Ci0JY3QuZGlzYWJsZSgpIDsKLQlBc3NlcnQuYXNzZXJ0RmFsc2UoIGN0LmlzRW5hYmxlZCgpICkgOworICAgIEFzc2VydC5hc3NlcnRGYWxzZSggY3QuaXNFbmFibGVkKCkgKSA7CisgICAgY3QuZW5hYmxlKCkgOworICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjdC5pc0VuYWJsZWQoKSApIDsKKyAgICBjdC5kaXNhYmxlKCkgOworICAgIEFzc2VydC5hc3NlcnRGYWxzZSggY3QuaXNFbmFibGVkKCkgKSA7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb3JiYS90aW1lci90ZXN0cy90ZXN0L05hbWVkQmFzZVN1aXRlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL2NvcmJhL3RpbWVyL3Rlc3RzL3Rlc3QvTmFtZWRCYXNlU3VpdGUuamF2YQppbmRleCAxMmRhNGVlLi5mMjFjYjVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL2NvcmJhL3RpbWVyL3Rlc3RzL3Rlc3QvTmFtZWRCYXNlU3VpdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL2NvcmJhL3RpbWVyL3Rlc3RzL3Rlc3QvTmFtZWRCYXNlU3VpdGUuamF2YQpAQCAtNDQsOTQgKzQ0LDk0IEBACiAgICAgcHJpdmF0ZSBOYW1lZFRlc3QgbmIyIDsKIAogICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIE5hbWVkVGVzdCBleHRlbmRzIE5hbWVkQmFzZSB7Ci0JcHVibGljIE5hbWVkVGVzdCggVGltZXJGYWN0b3J5IGZhY3RvcnksIFN0cmluZyBuYW1lICkgewotCSAgICBzdXBlciggZmFjdG9yeSwgbmFtZSApIDsKLQl9CisgICAgcHVibGljIE5hbWVkVGVzdCggVGltZXJGYWN0b3J5IGZhY3RvcnksIFN0cmluZyBuYW1lICkgeworICAgICAgICBzdXBlciggZmFjdG9yeSwgbmFtZSApIDsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBmaW5pc2goIFRpbWVyRmFjdG9yeSBmYWN0b3J5ICkgewotCSAgICBzZXRGYWN0b3J5KCBmYWN0b3J5ICkgOwotCX0KKyAgICBwdWJsaWMgdm9pZCBmaW5pc2goIFRpbWVyRmFjdG9yeSBmYWN0b3J5ICkgeworICAgICAgICBzZXRGYWN0b3J5KCBmYWN0b3J5ICkgOworICAgIH0KICAgICB9CiAKICAgICBAQ29uZmlndXJhdGlvbiggYmVmb3JlVGVzdCA9IHRydWUgKQogICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgewotCWZhY3RvcnkgPSBUaW1lckZhY3RvcnlCdWlsZGVyLm1ha2UoICJOVEYiLCAiTm8gZGVzY3JpcHRpb24iICkgOwotCW5iMSA9IG5ldyBOYW1lZFRlc3QoIGZhY3RvcnksIG5hbWUgKSA7Ci0JbmIyID0gbmV3IE5hbWVkVGVzdCggbnVsbCwgbmFtZSApIDsKKyAgICBmYWN0b3J5ID0gVGltZXJGYWN0b3J5QnVpbGRlci5tYWtlKCAiTlRGIiwgIk5vIGRlc2NyaXB0aW9uIiApIDsKKyAgICBuYjEgPSBuZXcgTmFtZWRUZXN0KCBmYWN0b3J5LCBuYW1lICkgOworICAgIG5iMiA9IG5ldyBOYW1lZFRlc3QoIG51bGwsIG5hbWUgKSA7CiAgICAgfQogCi0gICAgQENvbmZpZ3VyYXRpb24oIGFmdGVyVGVzdCA9IHRydWUgKSAKKyAgICBAQ29uZmlndXJhdGlvbiggYWZ0ZXJUZXN0ID0gdHJ1ZSApCiAgICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB7Ci0JVGltZXJGYWN0b3J5QnVpbGRlci5kZXN0cm95KCBmYWN0b3J5ICkgOworICAgIFRpbWVyRmFjdG9yeUJ1aWxkZXIuZGVzdHJveSggZmFjdG9yeSApIDsKICAgICB9CiAKLSAgICBAVGVzdCgpIAorICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCBuYW1lMSgpIHsKLQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCBuYW1lLCBuYjEubmFtZSgpICkgOworICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIG5hbWUsIG5iMS5uYW1lKCkgKSA7CiAgICAgfQogCi0gICAgQFRlc3QoKSAKKyAgICBAVGVzdCgpCiAgICAgcHVibGljIHZvaWQgbmFtZTIoKSB7Ci0JQXNzZXJ0LmFzc2VydEVxdWFscyggbmFtZSwgbmIyLm5hbWUoKSApIDsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCBuYW1lLCBuYjIubmFtZSgpICkgOwogICAgIH0KIAogICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCBmYWN0b3J5MSgpIHsKLQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCBmYWN0b3J5LCBuYjEuZmFjdG9yeSgpICkgOworICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIGZhY3RvcnksIG5iMS5mYWN0b3J5KCkgKSA7CiAgICAgfQogCiAgICAgQFRlc3QoKQotICAgIEBFeHBlY3RlZEV4Y2VwdGlvbnMoIHsgSWxsZWdhbFN0YXRlRXhjZXB0aW9uLmNsYXNzIH0gKSAKKyAgICBARXhwZWN0ZWRFeGNlcHRpb25zKCB7IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbi5jbGFzcyB9ICkKICAgICBwdWJsaWMgdm9pZCBmYWN0b3J5MigpIHsKLQlUaW1lckZhY3RvcnkgdGYgPSBuYjIuZmFjdG9yeSgpIDsKKyAgICBUaW1lckZhY3RvcnkgdGYgPSBuYjIuZmFjdG9yeSgpIDsKICAgICB9CiAKICAgICBAVGVzdCgpCiAgICAgcHVibGljIHZvaWQgZXF1YWxzKCkgewotCUFzc2VydC5hc3NlcnRFcXVhbHMoIG5iMSwgbmIyICkgOworICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIG5iMSwgbmIyICkgOwogICAgIH0KIAogICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCBoYXNoQ29kZTEoKSB7Ci0JQXNzZXJ0LmFzc2VydEVxdWFscyggbmIxLmhhc2hDb2RlKCksIG5hbWUuaGFzaENvZGUoKSApIDsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCBuYjEuaGFzaENvZGUoKSwgbmFtZS5oYXNoQ29kZSgpICkgOwogICAgIH0KIAogICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCBoYXNoQ29kZTIoKSB7Ci0JQXNzZXJ0LmFzc2VydEVxdWFscyggbmIyLmhhc2hDb2RlKCksIG5hbWUuaGFzaENvZGUoKSApIDsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCBuYjIuaGFzaENvZGUoKSwgbmFtZS5oYXNoQ29kZSgpICkgOwogICAgIH0KIAogICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCB0b1N0cmluZzEoKSB7Ci0JQXNzZXJ0LmFzc2VydEVxdWFscyggZmFjdG9yeS5uYW1lKCkgKyAiOiIgKyAKLQkgICAgbmFtZSwgbmIxLnRvU3RyaW5nKCkgKSA7CisgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggZmFjdG9yeS5uYW1lKCkgKyAiOiIgKworICAgICAgICBuYW1lLCBuYjEudG9TdHJpbmcoKSApIDsKICAgICB9CiAKICAgICBAVGVzdCgpCi0gICAgQEV4cGVjdGVkRXhjZXB0aW9ucyggeyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24uY2xhc3MgfSApIAorICAgIEBFeHBlY3RlZEV4Y2VwdGlvbnMoIHsgSWxsZWdhbFN0YXRlRXhjZXB0aW9uLmNsYXNzIH0gKQogICAgIHB1YmxpYyB2b2lkIHRvU3RyaW5nMigpIHsKLQlTdHJpbmcgdHMgPSBuYjIudG9TdHJpbmcoKSA7CisgICAgU3RyaW5nIHRzID0gbmIyLnRvU3RyaW5nKCkgOwogICAgIH0KIAogICAgIEBUZXN0KCkKLSAgICBARXhwZWN0ZWRFeGNlcHRpb25zKCB7IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbi5jbGFzcyB9ICkgCisgICAgQEV4cGVjdGVkRXhjZXB0aW9ucyggeyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24uY2xhc3MgfSApCiAgICAgcHVibGljIHZvaWQgc2V0RmFjdG9yeTEoKSB7Ci0JbmIxLmZpbmlzaCggZmFjdG9yeSApIDsKKyAgICBuYjEuZmluaXNoKCBmYWN0b3J5ICkgOwogICAgIH0KIAotICAgIEBUZXN0KCBkZXBlbmRzT25NZXRob2RzID0geyAidG9TdHJpbmcyIiwgImZhY3RvcnkyIiB9ICkgCisgICAgQFRlc3QoIGRlcGVuZHNPbk1ldGhvZHMgPSB7ICJ0b1N0cmluZzIiLCAiZmFjdG9yeTIiIH0gKQogICAgIHB1YmxpYyB2b2lkIHNldEZhY3RvcnkyKCkgewotCW5iMi5maW5pc2goIGZhY3RvcnkgKSA7CisgICAgbmIyLmZpbmlzaCggZmFjdG9yeSApIDsKICAgICB9CiAKICAgICBAVGVzdCggZGVwZW5kc09uTWV0aG9kcyA9IHsgInNldEZhY3RvcnkyIiB9ICkKLSAgICBwdWJsaWMgdm9pZCBmYWN0b3J5MlBvc3QoKSB7CQotCUFzc2VydC5hc3NlcnRFcXVhbHMoIGZhY3RvcnksIG5iMi5mYWN0b3J5KCkgKSA7CQorICAgIHB1YmxpYyB2b2lkIGZhY3RvcnkyUG9zdCgpIHsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCBmYWN0b3J5LCBuYjIuZmFjdG9yeSgpICkgOwogICAgIH0KIAogICAgIEBUZXN0KCBkZXBlbmRzT25NZXRob2RzID0geyAic2V0RmFjdG9yeTIiIH0gKQotICAgIHB1YmxpYyB2b2lkIHRvU3RyaW5nMlBvc3QoKSB7CQotCUFzc2VydC5hc3NlcnRFcXVhbHMoIGZhY3RvcnkubmFtZSgpICsgIjoiICsgCi0JICAgIG5hbWUsIG5iMi50b1N0cmluZygpICkgOworICAgIHB1YmxpYyB2b2lkIHRvU3RyaW5nMlBvc3QoKSB7CisgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggZmFjdG9yeS5uYW1lKCkgKyAiOiIgKworICAgICAgICBuYW1lLCBuYjIudG9TdHJpbmcoKSApIDsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL2NvcmJhL3RpbWVyL3Rlc3RzL3Rlc3QvVGltZXJGYWN0b3J5U3VpdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvY29yYmEvdGltZXIvdGVzdHMvdGVzdC9UaW1lckZhY3RvcnlTdWl0ZS5qYXZhCmluZGV4IDIyM2FjOTEuLjAwZGVkYTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvY29yYmEvdGltZXIvdGVzdHMvdGVzdC9UaW1lckZhY3RvcnlTdWl0ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvY29yYmEvdGltZXIvdGVzdHMvdGVzdC9UaW1lckZhY3RvcnlTdWl0ZS5qYXZhCkBAIC01NiwxMjEgKzU2LDEyMSBAQAogICAgIHByaXZhdGUgVGltZXJHcm91cCB0ZzEgOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVYUEVDVEVEX05VTV9USU1FUlMgPSAyIDsKLSAgICAKKwogICAgIC8vIFJlbWVtYmVyLCB0aGUgZmFjdG9yeSBpcyBhbHNvIGEgVGltZXJHcm91cCEKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRVhQRUNURURfTlVNX1RJTUVSX0dST1VQUyA9IDIgOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVYUEVDVEVEX05VTV9JRFMgPSAKLQlFWFBFQ1RFRF9OVU1fVElNRVJTICsgRVhQRUNURURfTlVNX1RJTUVSX0dST1VQUyA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVYUEVDVEVEX05VTV9JRFMgPQorICAgIEVYUEVDVEVEX05VTV9USU1FUlMgKyBFWFBFQ1RFRF9OVU1fVElNRVJfR1JPVVBTIDsKIAogCiAgICAgQENvbmZpZ3VyYXRpb24oIGJlZm9yZVRlc3QgPSB0cnVlICkKICAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsKLQl0ZiA9IFRpbWVyRmFjdG9yeUJ1aWxkZXIubWFrZSggdGZOYW1lLCB0ZkRlc2NyaXB0aW9uICkgOwotCXQxID0gdGYubWFrZVRpbWVyKCB0aW1lcjFOYW1lLCB0aW1lcjFEZXNjcmlwdGlvbiApIDsKLQl0MiA9IHRmLm1ha2VUaW1lciggdGltZXIyTmFtZSwgdGltZXIyRGVzY3JpcHRpb24gKSA7Ci0JdGcxID0gdGYubWFrZVRpbWVyR3JvdXAoIHRpbWVyR3JvdXAxTmFtZSwgdGltZXJHcm91cDFEZXNjcmlwdGlvbiApIDsKKyAgICB0ZiA9IFRpbWVyRmFjdG9yeUJ1aWxkZXIubWFrZSggdGZOYW1lLCB0ZkRlc2NyaXB0aW9uICkgOworICAgIHQxID0gdGYubWFrZVRpbWVyKCB0aW1lcjFOYW1lLCB0aW1lcjFEZXNjcmlwdGlvbiApIDsKKyAgICB0MiA9IHRmLm1ha2VUaW1lciggdGltZXIyTmFtZSwgdGltZXIyRGVzY3JpcHRpb24gKSA7CisgICAgdGcxID0gdGYubWFrZVRpbWVyR3JvdXAoIHRpbWVyR3JvdXAxTmFtZSwgdGltZXJHcm91cDFEZXNjcmlwdGlvbiApIDsKICAgICB9CiAKLSAgICBAQ29uZmlndXJhdGlvbiggYWZ0ZXJUZXN0ID0gdHJ1ZSApIAorICAgIEBDb25maWd1cmF0aW9uKCBhZnRlclRlc3QgPSB0cnVlICkKICAgICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHsKLQlUaW1lckZhY3RvcnlCdWlsZGVyLmRlc3Ryb3koIHRmICkgOworICAgIFRpbWVyRmFjdG9yeUJ1aWxkZXIuZGVzdHJveSggdGYgKSA7CiAgICAgfQogCiAgICAgQFRlc3QoKQogICAgIHB1YmxpYyB2b2lkIHRlc3ROdW1iZXJPZklkcygpIHsKLQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCBFWFBFQ1RFRF9OVU1fSURTLCB0Zi5udW1iZXJPZklkcygpICkgOworICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIEVYUEVDVEVEX05VTV9JRFMsIHRmLm51bWJlck9mSWRzKCkgKSA7CiAgICAgfQogCiAgICAgQFRlc3QoKQogICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRDb250cm9sbGFibGUxKCkgewotCWludCBpZCA9IHQxLmlkKCkgOwotCUNvbnRyb2xsYWJsZSBjb24gPSB0Zi5nZXRDb250cm9sbGFibGUoIGlkICkgOwotCUFzc2VydC5hc3NlcnRUcnVlKCBjb24gaW5zdGFuY2VvZiBUaW1lciApIDsKLQlUaW1lciB0aW1lciA9IFRpbWVyLmNsYXNzLmNhc3QoIGNvbiApIDsKLQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCB0MSwgdGltZXIgKSA7CisgICAgaW50IGlkID0gdDEuaWQoKSA7CisgICAgQ29udHJvbGxhYmxlIGNvbiA9IHRmLmdldENvbnRyb2xsYWJsZSggaWQgKSA7CisgICAgQXNzZXJ0LmFzc2VydFRydWUoIGNvbiBpbnN0YW5jZW9mIFRpbWVyICkgOworICAgIFRpbWVyIHRpbWVyID0gVGltZXIuY2xhc3MuY2FzdCggY29uICkgOworICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIHQxLCB0aW1lciApIDsKICAgICB9CiAKICAgICBAVGVzdCgpCiAgICAgcHVibGljIHZvaWQgdGVzdEdldENvbnRyb2xsYWJsZTIoKSB7Ci0JaW50IGlkID0gdDIuaWQoKSA7Ci0JQ29udHJvbGxhYmxlIGNvbiA9IHRmLmdldENvbnRyb2xsYWJsZSggaWQgKSA7Ci0JQXNzZXJ0LmFzc2VydFRydWUoIGNvbiBpbnN0YW5jZW9mIFRpbWVyICkgOwotCVRpbWVyIHRpbWVyID0gVGltZXIuY2xhc3MuY2FzdCggY29uICkgOwotCUFzc2VydC5hc3NlcnRFcXVhbHMoIHQyLCB0aW1lciApIDsKKyAgICBpbnQgaWQgPSB0Mi5pZCgpIDsKKyAgICBDb250cm9sbGFibGUgY29uID0gdGYuZ2V0Q29udHJvbGxhYmxlKCBpZCApIDsKKyAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY29uIGluc3RhbmNlb2YgVGltZXIgKSA7CisgICAgVGltZXIgdGltZXIgPSBUaW1lci5jbGFzcy5jYXN0KCBjb24gKSA7CisgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggdDIsIHRpbWVyICkgOwogICAgIH0KIAogICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udHJvbGxhYmxlMygpIHsKLQlpbnQgaWQgPSB0ZzEuaWQoKSA7Ci0JQ29udHJvbGxhYmxlIGNvbiA9IHRmLmdldENvbnRyb2xsYWJsZSggaWQgKSA7Ci0JQXNzZXJ0LmFzc2VydFRydWUoIGNvbiBpbnN0YW5jZW9mIFRpbWVyR3JvdXAgKSA7Ci0JVGltZXJHcm91cCB0ZyA9IFRpbWVyR3JvdXAuY2xhc3MuY2FzdCggY29uICkgOwotCUFzc2VydC5hc3NlcnRFcXVhbHMoIHRnMSwgdGcgKSA7CisgICAgaW50IGlkID0gdGcxLmlkKCkgOworICAgIENvbnRyb2xsYWJsZSBjb24gPSB0Zi5nZXRDb250cm9sbGFibGUoIGlkICkgOworICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjb24gaW5zdGFuY2VvZiBUaW1lckdyb3VwICkgOworICAgIFRpbWVyR3JvdXAgdGcgPSBUaW1lckdyb3VwLmNsYXNzLmNhc3QoIGNvbiApIDsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCB0ZzEsIHRnICkgOwogICAgIH0KIAogICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCB0ZXN0TWFrZUxvZ0V2ZW50SGFuZGxlcigpIHsKLQlTdHJpbmcgbmFtZSA9ICJMb2dFdmVudEhhbmRsZXIxIiA7Ci0JVGltZXJFdmVudEhhbmRsZXIgaDEgPSB0Zi5tYWtlTG9nRXZlbnRIYW5kbGVyKCBuYW1lICkgOwotCUFzc2VydC5hc3NlcnRFcXVhbHMoIGgxLm5hbWUoKSwgbmFtZSApIDsKLQl0cnkgewotCSAgICB0Zi5tYWtlTG9nRXZlbnRIYW5kbGVyKCBuYW1lICkgOwotCSAgICBBc3NlcnQuZmFpbCggIlNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24iICkgOwotCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleGMpIHsKLQkgICAgLy8gdGhpcyBpcyBjb3JyZWN0Ci0JfSBjYXRjaCAoVGhyb3dhYmxlIHRocikgewotCSAgICBBc3NlcnQuZmFpbCggIlVuZXhwZWN0ZWQgZXhjZXB0aW9uICIgKyB0aHIgKSA7Ci0JfQotCXRyeSB7Ci0JICAgIHRmLm1ha2VTdGF0c0V2ZW50SGFuZGxlciggbmFtZSApIDsKLQkgICAgQXNzZXJ0LmZhaWwoICJTaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uIiApIDsKLQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXhjKSB7Ci0JICAgIC8vIHRoaXMgaXMgY29ycmVjdAotCX0gY2F0Y2ggKFRocm93YWJsZSB0aHIpIHsKLQkgICAgQXNzZXJ0LmZhaWwoICJVbmV4cGVjdGVkIGV4Y2VwdGlvbiAiICsgdGhyICkgOwotCX0KLQl0Zi5yZW1vdmVUaW1lckV2ZW50SGFuZGxlciggaDEgKSA7Ci0JaDEgPSB0Zi5tYWtlTG9nRXZlbnRIYW5kbGVyKCBuYW1lICkgOwotCXRmLnJlbW92ZVRpbWVyRXZlbnRIYW5kbGVyKCBoMSApIDsKLQloMSA9IHRmLm1ha2VTdGF0c0V2ZW50SGFuZGxlciggbmFtZSApIDsKKyAgICBTdHJpbmcgbmFtZSA9ICJMb2dFdmVudEhhbmRsZXIxIiA7CisgICAgVGltZXJFdmVudEhhbmRsZXIgaDEgPSB0Zi5tYWtlTG9nRXZlbnRIYW5kbGVyKCBuYW1lICkgOworICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIGgxLm5hbWUoKSwgbmFtZSApIDsKKyAgICB0cnkgeworICAgICAgICB0Zi5tYWtlTG9nRXZlbnRIYW5kbGVyKCBuYW1lICkgOworICAgICAgICBBc3NlcnQuZmFpbCggIlNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24iICkgOworICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleGMpIHsKKyAgICAgICAgLy8gdGhpcyBpcyBjb3JyZWN0CisgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRocikgeworICAgICAgICBBc3NlcnQuZmFpbCggIlVuZXhwZWN0ZWQgZXhjZXB0aW9uICIgKyB0aHIgKSA7CisgICAgfQorICAgIHRyeSB7CisgICAgICAgIHRmLm1ha2VTdGF0c0V2ZW50SGFuZGxlciggbmFtZSApIDsKKyAgICAgICAgQXNzZXJ0LmZhaWwoICJTaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uIiApIDsKKyAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXhjKSB7CisgICAgICAgIC8vIHRoaXMgaXMgY29ycmVjdAorICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0aHIpIHsKKyAgICAgICAgQXNzZXJ0LmZhaWwoICJVbmV4cGVjdGVkIGV4Y2VwdGlvbiAiICsgdGhyICkgOworICAgIH0KKyAgICB0Zi5yZW1vdmVUaW1lckV2ZW50SGFuZGxlciggaDEgKSA7CisgICAgaDEgPSB0Zi5tYWtlTG9nRXZlbnRIYW5kbGVyKCBuYW1lICkgOworICAgIHRmLnJlbW92ZVRpbWVyRXZlbnRIYW5kbGVyKCBoMSApIDsKKyAgICBoMSA9IHRmLm1ha2VTdGF0c0V2ZW50SGFuZGxlciggbmFtZSApIDsKICAgICB9CiAKICAgICBAVGVzdCgpCiAgICAgcHVibGljIHZvaWQgdGVzdFRpbWVycygpIHsKLQlNYXA8U3RyaW5nLD8gZXh0ZW5kcyBUaW1lcj4gdG1hcCA9IHRmLnRpbWVycygpIDsKLQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCB0bWFwLnNpemUoKSwgRVhQRUNURURfTlVNX1RJTUVSUyApIDsKLQlUaW1lciB4MSA9IHRtYXAuZ2V0KCB0aW1lcjFOYW1lICkgOwotCUFzc2VydC5hc3NlcnRFcXVhbHMoIHgxLCB0MSApIDsKLQlUaW1lciB4MiA9IHRtYXAuZ2V0KCB0aW1lcjJOYW1lICkgOwotCUFzc2VydC5hc3NlcnRFcXVhbHMoIHgyLCB0MiApIDsKKyAgICBNYXA8U3RyaW5nLD8gZXh0ZW5kcyBUaW1lcj4gdG1hcCA9IHRmLnRpbWVycygpIDsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCB0bWFwLnNpemUoKSwgRVhQRUNURURfTlVNX1RJTUVSUyApIDsKKyAgICBUaW1lciB4MSA9IHRtYXAuZ2V0KCB0aW1lcjFOYW1lICkgOworICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIHgxLCB0MSApIDsKKyAgICBUaW1lciB4MiA9IHRtYXAuZ2V0KCB0aW1lcjJOYW1lICkgOworICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIHgyLCB0MiApIDsKICAgICB9CiAKICAgICBAVGVzdCgpCiAgICAgcHVibGljIHZvaWQgdGVzdFRpbWVyR3JvdXBzKCkgewotCU1hcDxTdHJpbmcsPyBleHRlbmRzIFRpbWVyR3JvdXA+IHRtYXAgPSB0Zi50aW1lckdyb3VwcygpIDsKLQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCB0bWFwLnNpemUoKSwgRVhQRUNURURfTlVNX1RJTUVSX0dST1VQUyApIDsKLQlUaW1lckdyb3VwIHgxID0gdG1hcC5nZXQoIHRpbWVyR3JvdXAxTmFtZSApIDsKLQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCB4MSwgdGcxICkgOwotCVRpbWVyR3JvdXAgeDIgPSB0bWFwLmdldCggdGZOYW1lICkgOwotCUFzc2VydC5hc3NlcnRFcXVhbHMoIHgyLCB0ZiApIDsKKyAgICBNYXA8U3RyaW5nLD8gZXh0ZW5kcyBUaW1lckdyb3VwPiB0bWFwID0gdGYudGltZXJHcm91cHMoKSA7CisgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggdG1hcC5zaXplKCksIEVYUEVDVEVEX05VTV9USU1FUl9HUk9VUFMgKSA7CisgICAgVGltZXJHcm91cCB4MSA9IHRtYXAuZ2V0KCB0aW1lckdyb3VwMU5hbWUgKSA7CisgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggeDEsIHRnMSApIDsKKyAgICBUaW1lckdyb3VwIHgyID0gdG1hcC5nZXQoIHRmTmFtZSApIDsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCB4MiwgdGYgKSA7CiAgICAgfQogCiAgICAgQFRlc3QoKQogICAgIHB1YmxpYyB2b2lkIHRlc3RNYWtlQ29udHJvbGxlcigpIHsKLQlTdHJpbmcgbmFtZSA9ICJDb250cm9sbGVyMSIgOwotCVRpbWVyRXZlbnRDb250cm9sbGVyIGNvbnRyb2xsZXIgPSB0Zi5tYWtlQ29udHJvbGxlciggbmFtZSApIDsKLQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCBjb250cm9sbGVyLm5hbWUoKSwgbmFtZSApIDsKLQl0cnkgewotCSAgICB0Zi5tYWtlQ29udHJvbGxlciggbmFtZSApIDsKLQkgICAgQXNzZXJ0LmZhaWwoICJTaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uIiApIDsKLQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXhjKSB7Ci0JICAgIC8vIHRoaXMgaXMgY29ycmVjdAotCX0gY2F0Y2ggKFRocm93YWJsZSB0aHIpIHsKLQkgICAgQXNzZXJ0LmZhaWwoICJVbmV4cGVjdGVkIGV4Y2VwdGlvbiAiICsgdGhyICkgOwotCX0KLQl0Zi5yZW1vdmVDb250cm9sbGVyKCBjb250cm9sbGVyICkgOwotCWNvbnRyb2xsZXIgPSB0Zi5tYWtlQ29udHJvbGxlciggbmFtZSApIDsKKyAgICBTdHJpbmcgbmFtZSA9ICJDb250cm9sbGVyMSIgOworICAgIFRpbWVyRXZlbnRDb250cm9sbGVyIGNvbnRyb2xsZXIgPSB0Zi5tYWtlQ29udHJvbGxlciggbmFtZSApIDsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCBjb250cm9sbGVyLm5hbWUoKSwgbmFtZSApIDsKKyAgICB0cnkgeworICAgICAgICB0Zi5tYWtlQ29udHJvbGxlciggbmFtZSApIDsKKyAgICAgICAgQXNzZXJ0LmZhaWwoICJTaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uIiApIDsKKyAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXhjKSB7CisgICAgICAgIC8vIHRoaXMgaXMgY29ycmVjdAorICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0aHIpIHsKKyAgICAgICAgQXNzZXJ0LmZhaWwoICJVbmV4cGVjdGVkIGV4Y2VwdGlvbiAiICsgdGhyICkgOworICAgIH0KKyAgICB0Zi5yZW1vdmVDb250cm9sbGVyKCBjb250cm9sbGVyICkgOworICAgIGNvbnRyb2xsZXIgPSB0Zi5tYWtlQ29udHJvbGxlciggbmFtZSApIDsKICAgICB9CiAKICAgICAvLyBlbmFibGVkU2V0IGFuZCBhY3RpdmVTZXQgYXJlIHRlc3RlZCBpbiB0aGUgQWN0aXZhdGlvblN1aXRlCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL2NvcmJhL3RpbWVyL3Rlc3RzL3Rlc3QvVGltZXJQb2ludHNTdWl0ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb3JiYS90aW1lci90ZXN0cy90ZXN0L1RpbWVyUG9pbnRzU3VpdGUuamF2YQppbmRleCA2YWI3ZGJlLi5iNWNhZjgwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL2NvcmJhL3RpbWVyL3Rlc3RzL3Rlc3QvVGltZXJQb2ludHNTdWl0ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvY29yYmEvdGltZXIvdGVzdHMvdGVzdC9UaW1lclBvaW50c1N1aXRlLmphdmEKQEAgLTQ4LDE5ICs0OCwxOSBAQAogcHVibGljIGNsYXNzIFRpbWVyUG9pbnRzU3VpdGUgewogICAgIEBUZXN0KCkKICAgICBwdWJsaWMgdm9pZCB0ZXN0WE1MUGFyc2VyKCkgewotCS8vIFdlIHNob3VsZCBiZSBydW5uaW5nIHRoaXMgdGVzdCBmcm9tIHRoZSBjb3JiYS90aW1lciBkaXJlY3RvcnkuCi0JU3RyaW5nIGZpbGVOYW1lID0gInRlc3RzL3Rlc3QvdGltaW5nLnhtbCIgOworICAgIC8vIFdlIHNob3VsZCBiZSBydW5uaW5nIHRoaXMgdGVzdCBmcm9tIHRoZSBjb3JiYS90aW1lciBkaXJlY3RvcnkuCisgICAgU3RyaW5nIGZpbGVOYW1lID0gInRlc3RzL3Rlc3QvdGltaW5nLnhtbCIgOwogCi0JUGFpcjxTdHJpbmcsVGltZXJGYWN0b3J5PiByZXN1bHQgPSBudWxsIDsKLQl0cnkgewotCSAgICAvLyBQYXJzZSB0aGUgWE1MIGZpbGUuCi0JICAgIHJlc3VsdCA9IFRpbWVyUG9pbnRTb3VyY2VHZW5lcmF0b3IucGFyc2VEZXNjcmlwdGlvbiggZmlsZU5hbWUgKSA7CisgICAgUGFpcjxTdHJpbmcsVGltZXJGYWN0b3J5PiByZXN1bHQgPSBudWxsIDsKKyAgICB0cnkgeworICAgICAgICAvLyBQYXJzZSB0aGUgWE1MIGZpbGUuCisgICAgICAgIHJlc3VsdCA9IFRpbWVyUG9pbnRTb3VyY2VHZW5lcmF0b3IucGFyc2VEZXNjcmlwdGlvbiggZmlsZU5hbWUgKSA7CiAKLQkgICAgLy8gVHJ5IHRvIGdlbmVyYXRlIHRoZSBzb3VyY2UgZmlsZQotCSAgICBUaW1lclBvaW50U291cmNlR2VuZXJhdG9yLmdlbmVyYXRlU291cmNlRmlsZSggImdlbiIsIHJlc3VsdCApIDsKLQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2V4YykgewotCSAgICBpb2V4Yy5wcmludFN0YWNrVHJhY2UoKSA7Ci0JICAgIEFzc2VydC5mYWlsKCAiSU9FeGNlcHRpb246ICIgKyBpb2V4YyApIDsKLQl9CisgICAgICAgIC8vIFRyeSB0byBnZW5lcmF0ZSB0aGUgc291cmNlIGZpbGUKKyAgICAgICAgVGltZXJQb2ludFNvdXJjZUdlbmVyYXRvci5nZW5lcmF0ZVNvdXJjZUZpbGUoICJnZW4iLCByZXN1bHQgKSA7CisgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9leGMpIHsKKyAgICAgICAgaW9leGMucHJpbnRTdGFja1RyYWNlKCkgOworICAgICAgICBBc3NlcnQuZmFpbCggIklPRXhjZXB0aW9uOiAiICsgaW9leGMgKSA7CisgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvY29yYmEvdGltZXIvdGVzdHMvdGVzdC90aW1pbmcueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb3JiYS90aW1lci90ZXN0cy90ZXN0L3RpbWluZy54bWwKaW5kZXggYjdlZTM1OS4uOTcxNTExYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb3JiYS90aW1lci90ZXN0cy90ZXN0L3RpbWluZy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb3JiYS90aW1lci90ZXN0cy90ZXN0L3RpbWluZy54bWwKQEAgLTM1LDM0ICszNSwzNCBAQAogICAgIDx0aW1lciBuYW1lPSJ0ZXN0NyIgZGVzY3JpcHRpb249IkEgdGVzdCB0aW1lciIvPgogCiAgICAgPHRpbWVyR3JvdXAgbmFtZT0idGcxIiBkZXNjcmlwdGlvbj0iQSB0ZXN0IHRpbWVyIGdyb3VwIj4KLQk8Y29udGFpbnMgbmFtZT0idGVzdDEiLz4KLQk8Y29udGFpbnMgbmFtZT0idGVzdDIiLz4KLQk8Y29udGFpbnMgbmFtZT0idGVzdDMiLz4KLQk8Y29udGFpbnMgbmFtZT0idGczIi8+CisgICAgPGNvbnRhaW5zIG5hbWU9InRlc3QxIi8+CisgICAgPGNvbnRhaW5zIG5hbWU9InRlc3QyIi8+CisgICAgPGNvbnRhaW5zIG5hbWU9InRlc3QzIi8+CisgICAgPGNvbnRhaW5zIG5hbWU9InRnMyIvPgogICAgIDwvdGltZXJHcm91cD4KIAogICAgIDx0aW1lckdyb3VwIG5hbWU9InRnMiIgZGVzY3JpcHRpb249IkEgdGVzdCB0aW1lciBncm91cCI+Ci0JPGNvbnRhaW5zIG5hbWU9InRlc3Q0Ii8+Ci0JPGNvbnRhaW5zIG5hbWU9InRlc3Q1Ii8+Ci0JPGNvbnRhaW5zIG5hbWU9InRnMSIvPgorICAgIDxjb250YWlucyBuYW1lPSJ0ZXN0NCIvPgorICAgIDxjb250YWlucyBuYW1lPSJ0ZXN0NSIvPgorICAgIDxjb250YWlucyBuYW1lPSJ0ZzEiLz4KICAgICA8L3RpbWVyR3JvdXA+CiAKICAgICA8dGltZXJHcm91cCBuYW1lPSJ0ZzMiIGRlc2NyaXB0aW9uPSJBIHRlc3QgdGltZXIgZ3JvdXAiPgotCTxjb250YWlucyBuYW1lPSJ0ZXN0NiIvPgotCTxjb250YWlucyBuYW1lPSJ0ZXN0NyIvPgotCTxjb250YWlucyBuYW1lPSJ0ZzIiLz4KKyAgICA8Y29udGFpbnMgbmFtZT0idGVzdDYiLz4KKyAgICA8Y29udGFpbnMgbmFtZT0idGVzdDciLz4KKyAgICA8Y29udGFpbnMgbmFtZT0idGcyIi8+CiAgICAgPC90aW1lckdyb3VwPgogCiAgICAgPHRpbWVyR3JvdXAgbmFtZT0idHJhbnNwb3J0Q2xpZW50IiBkZXNjcmlwdGlvbj0iTWFqb3IgZXZlbnRzIGluIGNsaWVudCBzaWRlIHJlcXVlc3QgY3ljbGUiPgotCTxjb250YWlucyBuYW1lPSJoYXNOZXh0TmV4dCIvPgotCTxjb250YWlucyBuYW1lPSJjb25uZWN0aW9uU2V0dXAiLz4KLQk8Y29udGFpbnMgbmFtZT0iY2xpZW50RW5jb2RpbmciLz4KLQk8Y29udGFpbnMgbmFtZT0iY2xpZW50VHJhbnNwb3J0QW5kV2FpdCIvPgotCTxjb250YWlucyBuYW1lPSJjbGllbnREZWNvZGluZyIvPgorICAgIDxjb250YWlucyBuYW1lPSJoYXNOZXh0TmV4dCIvPgorICAgIDxjb250YWlucyBuYW1lPSJjb25uZWN0aW9uU2V0dXAiLz4KKyAgICA8Y29udGFpbnMgbmFtZT0iY2xpZW50RW5jb2RpbmciLz4KKyAgICA8Y29udGFpbnMgbmFtZT0iY2xpZW50VHJhbnNwb3J0QW5kV2FpdCIvPgorICAgIDxjb250YWlucyBuYW1lPSJjbGllbnREZWNvZGluZyIvPgogICAgIDwvdGltZXJHcm91cD4KIAogICAgIDx0aW1lckdyb3VwIG5hbWU9InRyYW5zcG9ydCIgZGVzY3JpcHRpb249IkFsbCB0cmFuc3BvcnQgYWN0aXZpdHkiPgotCTxjb250YWlucyBuYW1lPSJ0cmFuc3BvcnRDbGllbnQiLz4KKyAgICA8Y29udGFpbnMgbmFtZT0idHJhbnNwb3J0Q2xpZW50Ii8+CiAgICAgPC90aW1lckdyb3VwPgogPC90aW1pbmc+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvY29yYmEvdGltZXIvdGVzdHMvdXRpbHMvTG9nUHJvY2Vzc29yQXZlcmFnZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvY29yYmEvdGltZXIvdGVzdHMvdXRpbHMvTG9nUHJvY2Vzc29yQXZlcmFnZXIuamF2YQppbmRleCBiMjFjMjYyLi4yYzk1NDM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL2NvcmJhL3RpbWVyL3Rlc3RzL3V0aWxzL0xvZ1Byb2Nlc3NvckF2ZXJhZ2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb3JiYS90aW1lci90ZXN0cy91dGlscy9Mb2dQcm9jZXNzb3JBdmVyYWdlci5qYXZhCkBAIC02NCw3NSArNjQsNzUgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgU0NBTEUgPSAxMDAwMDAwMDAwOwogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXYpIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGF2KQogICAgIHsKLQlkYXRhID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgUG9pbnQ+KCk7Ci0JYmVnaW5Qb2ludE5hbWVUb0ludCA9IG5ldyBIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4oKTsKLQlmaWxlbmFtZSA9IGF2WzBdOworICAgIGRhdGEgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBQb2ludD4oKTsKKyAgICBiZWdpblBvaW50TmFtZVRvSW50ID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPigpOworICAgIGZpbGVuYW1lID0gYXZbMF07CiAKLQl0cnkgewotCSAgICBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmaWxlbmFtZSkpOwotCSAgICByZWFkUG9pbnRzKGJyKTsKLQkgICAgcmVhZERhdGEoYnIpOwotCSAgICBzaG93UmVzdWx0cygpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgdHJ5IHsKKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZmlsZW5hbWUpKTsKKyAgICAgICAgcmVhZFBvaW50cyhicik7CisgICAgICAgIHJlYWREYXRhKGJyKTsKKyAgICAgICAgc2hvd1Jlc3VsdHMoKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCByZWFkUG9pbnRzKEJ1ZmZlcmVkUmVhZGVyIGJyKQotCXRocm93cyBFeGNlcHRpb24KKyAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotCVN0cmluZyBsaW5lOwotCWludCBpZCA9IDA7Ci0Jd2hpbGUgKChsaW5lID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkgewotCSAgICBpZiAobGluZS5lcXVhbHMoIiMjIyMjIikpIHsKLQkJcmV0dXJuOwotCSAgICB9Ci0JICAgIFN0cmluZ1tdIGJlZ2luT3JFbmRBbmRQb2ludE5hbWUgPSBsaW5lLnNwbGl0KCIgIik7Ci0JICAgIFN0cmluZyBiZWdpbk9yRW5kID0gYmVnaW5PckVuZEFuZFBvaW50TmFtZVswXTsKLQkgICAgU3RyaW5nIG5hbWUgICAgICAgPSBiZWdpbk9yRW5kQW5kUG9pbnROYW1lWzFdOwotCSAgICBpbnQgaW50SWQgPSBpZCsrOwotCSAgICBpZiAoYmVnaW5PckVuZC5lcXVhbHMoIkJFR0lOIikpIHsKLQkJYmVnaW5Qb2ludE5hbWVUb0ludC5wdXQobmFtZSwgaW50SWQpOwotCQlkYXRhLnB1dChpbnRJZCwgbmV3IEJlZ2luUG9pbnQoaW50SWQsIG5hbWUpKTsKLQkgICAgfSBlbHNlIHsKLQkJZGF0YS5wdXQoaW50SWQsIAotCQkJIG5ldyBFbmRQb2ludChpbnRJZCwgbmFtZSwgZGF0YSwgYmVnaW5Qb2ludE5hbWVUb0ludCkpOwotCSAgICB9Ci0JfQorICAgIFN0cmluZyBsaW5lOworICAgIGludCBpZCA9IDA7CisgICAgd2hpbGUgKChsaW5lID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgICBpZiAobGluZS5lcXVhbHMoIiMjIyMjIikpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFN0cmluZ1tdIGJlZ2luT3JFbmRBbmRQb2ludE5hbWUgPSBsaW5lLnNwbGl0KCIgIik7CisgICAgICAgIFN0cmluZyBiZWdpbk9yRW5kID0gYmVnaW5PckVuZEFuZFBvaW50TmFtZVswXTsKKyAgICAgICAgU3RyaW5nIG5hbWUgICAgICAgPSBiZWdpbk9yRW5kQW5kUG9pbnROYW1lWzFdOworICAgICAgICBpbnQgaW50SWQgPSBpZCsrOworICAgICAgICBpZiAoYmVnaW5PckVuZC5lcXVhbHMoIkJFR0lOIikpIHsKKyAgICAgICAgYmVnaW5Qb2ludE5hbWVUb0ludC5wdXQobmFtZSwgaW50SWQpOworICAgICAgICBkYXRhLnB1dChpbnRJZCwgbmV3IEJlZ2luUG9pbnQoaW50SWQsIG5hbWUpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgZGF0YS5wdXQoaW50SWQsCisgICAgICAgICAgICAgbmV3IEVuZFBvaW50KGludElkLCBuYW1lLCBkYXRhLCBiZWdpblBvaW50TmFtZVRvSW50KSk7CisgICAgICAgIH0KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHJlYWREYXRhKEJ1ZmZlcmVkUmVhZGVyIGJyKQotCXRocm93cyBFeGNlcHRpb24KKyAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotCVN0cmluZyBsaW5lOwotCXdoaWxlICgobGluZSA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKLQkgICAgU3RyaW5nW10gaWRBbmRUaW1lID0gbGluZS5zcGxpdCgiICIpOwotCSAgICBpbnQgaWQgPSBJbnRlZ2VyLnBhcnNlSW50KGlkQW5kVGltZVswXSk7Ci0JICAgIGxvbmcgdGltZSA9IExvbmcucGFyc2VMb25nKGlkQW5kVGltZVsxXSk7Ci0JICAgIGRhdGEuZ2V0KGlkKS5zZXRWYWx1ZSh0aW1lKTsKLQl9CisgICAgU3RyaW5nIGxpbmU7CisgICAgd2hpbGUgKChsaW5lID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgICBTdHJpbmdbXSBpZEFuZFRpbWUgPSBsaW5lLnNwbGl0KCIgIik7CisgICAgICAgIGludCBpZCA9IEludGVnZXIucGFyc2VJbnQoaWRBbmRUaW1lWzBdKTsKKyAgICAgICAgbG9uZyB0aW1lID0gTG9uZy5wYXJzZUxvbmcoaWRBbmRUaW1lWzFdKTsKKyAgICAgICAgZGF0YS5nZXQoaWQpLnNldFZhbHVlKHRpbWUpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2hvd1Jlc3VsdHMoKQogICAgIHsKLQkvLyBSZW1vdmUgYmVnaW4gcG9pbnRzLgotCWZvciAoSW50ZWdlciBpZCA6IGJlZ2luUG9pbnROYW1lVG9JbnQudmFsdWVzKCkpIHsKLQkgICAgZGF0YS5yZW1vdmUoaWQpOwotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oZmlsZW5hbWUpOwotCWZvciAoUG9pbnQgcG9pbnQgOiBkYXRhLnZhbHVlcygpKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbihwb2ludC5nZXROYW1lKCkgCi0JCQkgICAgICAgKyAiICIgCi0JCQkgICAgICAgKyBwb2ludC5nZXRBdmVyYWdlKCkgLyBTQ0FMRQotCQkJICAgICAgICsgIiAiIAotCQkJICAgICAgICsgZm9ybWF0KHBvaW50LmdldEF2ZXJhZ2UoKSAvIFNDQUxFKQotCQkJICAgICAgICsgIiAiCi0JCQkgICAgICAgKyAiIGl0ZXJhdGlvbnMgIiArIHBvaW50LmdldEl0ZXJhdGlvbnMoKSk7Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgIC8vIFJlbW92ZSBiZWdpbiBwb2ludHMuCisgICAgZm9yIChJbnRlZ2VyIGlkIDogYmVnaW5Qb2ludE5hbWVUb0ludC52YWx1ZXMoKSkgeworICAgICAgICBkYXRhLnJlbW92ZShpZCk7CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbihmaWxlbmFtZSk7CisgICAgZm9yIChQb2ludCBwb2ludCA6IGRhdGEudmFsdWVzKCkpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHBvaW50LmdldE5hbWUoKQorICAgICAgICAgICAgICAgICAgICsgIiAiCisgICAgICAgICAgICAgICAgICAgKyBwb2ludC5nZXRBdmVyYWdlKCkgLyBTQ0FMRQorICAgICAgICAgICAgICAgICAgICsgIiAiCisgICAgICAgICAgICAgICAgICAgKyBmb3JtYXQocG9pbnQuZ2V0QXZlcmFnZSgpIC8gU0NBTEUpCisgICAgICAgICAgICAgICAgICAgKyAiICIKKyAgICAgICAgICAgICAgICAgICArICIgaXRlcmF0aW9ucyAiICsgcG9pbnQuZ2V0SXRlcmF0aW9ucygpKTsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZm9ybWF0KGRvdWJsZSBkKSB7CkBAIC0xNDgsOSArMTQ4LDkgQEAKIAogICAgIFBvaW50KGludCBpbnRJZCwgU3RyaW5nIG5hbWUpCiAgICAgewotCXRoaXMuaW50SWQgPSBpbnRJZDsKLQl0aGlzLm5hbWUgPSBuYW1lOwotCXZhbHVlID0gLTE7CisgICAgdGhpcy5pbnRJZCA9IGludElkOworICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgdmFsdWUgPSAtMTsKICAgICB9CiAgICAgaW50IGdldEludElkKCkgeyByZXR1cm4gaW50SWQ7IH0KICAgICBTdHJpbmcgZ2V0TmFtZSgpIHsgcmV0dXJuIG5hbWU7IH0KQEAgLTE1OCw5ICsxNTgsOSBAQAogICAgIHZvaWQgc2V0VmFsdWUobG9uZyB4KSB7IHZhbHVlID0geDsgfQogICAgIGRvdWJsZSBnZXRBdmVyYWdlKCkgeyB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTm90IEltcGxlbWVudGVkIik7IH0KICAgICBpbnQgZ2V0SXRlcmF0aW9ucygpIHsgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5vdCBJbXBsZW1lbnRlZCIpOyB9Ci0gICAgU3RyaW5nIHRvU3RyaW5nU3RyaW5nKCkgCisgICAgU3RyaW5nIHRvU3RyaW5nU3RyaW5nKCkKICAgICB7Ci0JcmV0dXJuIGludElkICsgIiAiICsgbmFtZSAgKyAiICIgKyB2YWx1ZTsKKyAgICByZXR1cm4gaW50SWQgKyAiICIgKyBuYW1lICArICIgIiArIHZhbHVlOwogICAgIH0KIH0KIApAQCAtMTY4LDExICsxNjgsMTEgQEAKIHsKICAgICBCZWdpblBvaW50KGludCBpbnRJZCwgU3RyaW5nIG5hbWUpCiAgICAgewotCXN1cGVyKGludElkLCBuYW1lKTsKKyAgICBzdXBlcihpbnRJZCwgbmFtZSk7CiAgICAgfQogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQogICAgIHsKLQlyZXR1cm4gIkJlZ2luUG9pbnRbICIgKyB0b1N0cmluZ1N0cmluZygpICsgIiBdIjsKKyAgICByZXR1cm4gIkJlZ2luUG9pbnRbICIgKyB0b1N0cmluZ1N0cmluZygpICsgIiBdIjsKICAgICB9CiB9CiAKQEAgLTE4MywzMiArMTgzLDMyIEBACiAgICAgaW50IGl0ZXJhdGlvbnM7CiAKICAgICBFbmRQb2ludChpbnQgaW50SWQsIFN0cmluZyBuYW1lLCBNYXA8SW50ZWdlciwgUG9pbnQ+IGRhdGEsCi0JICAgICBNYXA8U3RyaW5nLCBJbnRlZ2VyPiBiZWdpblBvaW50TmFtZVRvSW50KQorICAgICAgICAgTWFwPFN0cmluZywgSW50ZWdlcj4gYmVnaW5Qb2ludE5hbWVUb0ludCkKICAgICB7Ci0Jc3VwZXIoaW50SWQsIG5hbWUpOwotCXRoaXMuZGF0YSA9IGRhdGE7Ci0JdGhpcy5iZWdpblBvaW50TmFtZVRvSW50ID0gYmVnaW5Qb2ludE5hbWVUb0ludDsKLQlpdGVyYXRpb25zID0gMDsKKyAgICBzdXBlcihpbnRJZCwgbmFtZSk7CisgICAgdGhpcy5kYXRhID0gZGF0YTsKKyAgICB0aGlzLmJlZ2luUG9pbnROYW1lVG9JbnQgPSBiZWdpblBvaW50TmFtZVRvSW50OworICAgIGl0ZXJhdGlvbnMgPSAwOwogICAgIH0KICAgICB2b2lkIHNldFZhbHVlKGxvbmcgZW5kVGltZSkKICAgICB7Ci0JaW50IHN0YXJ0SWQgPSBiZWdpblBvaW50TmFtZVRvSW50LmdldChuYW1lKTsKLQlsb25nIHN0YXJ0VGltZSA9IGRhdGEuZ2V0KHN0YXJ0SWQpLmdldFZhbHVlKCk7Ci0JbG9uZyBlbGFwc2VkVGltZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7Ci0JdmFsdWUgKz0gZWxhcHNlZFRpbWU7Ci0JaXRlcmF0aW9ucysrOworICAgIGludCBzdGFydElkID0gYmVnaW5Qb2ludE5hbWVUb0ludC5nZXQobmFtZSk7CisgICAgbG9uZyBzdGFydFRpbWUgPSBkYXRhLmdldChzdGFydElkKS5nZXRWYWx1ZSgpOworICAgIGxvbmcgZWxhcHNlZFRpbWUgPSBlbmRUaW1lIC0gc3RhcnRUaW1lOworICAgIHZhbHVlICs9IGVsYXBzZWRUaW1lOworICAgIGl0ZXJhdGlvbnMrKzsKICAgICB9Ci0gICAgZG91YmxlIGdldEF2ZXJhZ2UoKSAKKyAgICBkb3VibGUgZ2V0QXZlcmFnZSgpCiAgICAgewotCXJldHVybiB2YWx1ZSAvIGl0ZXJhdGlvbnM7CisgICAgcmV0dXJuIHZhbHVlIC8gaXRlcmF0aW9uczsKICAgICB9CiAgICAgaW50IGdldEl0ZXJhdGlvbnMoKQogICAgIHsKLQlyZXR1cm4gaXRlcmF0aW9uczsKKyAgICByZXR1cm4gaXRlcmF0aW9uczsKICAgICB9CiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCiAgICAgewotCXJldHVybiAiRW5kUG9pbnRbICIgKyB0b1N0cmluZ1N0cmluZygpICsgIiAiICsgaXRlcmF0aW9ucyArICIgXSI7CisgICAgcmV0dXJuICJFbmRQb2ludFsgIiArIHRvU3RyaW5nU3RyaW5nKCkgKyAiICIgKyBpdGVyYXRpb25zICsgIiBdIjsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvY29yYmEvdGltZXIvdGVzdHMvdXRpbHMvVGltZXJQb2ludFNvdXJjZUdlbmVyYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb3JiYS90aW1lci90ZXN0cy91dGlscy9UaW1lclBvaW50U291cmNlR2VuZXJhdG9yLmphdmEKaW5kZXggZGViYTY3Zi4uNTE3YTVlZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb3JiYS90aW1lci90ZXN0cy91dGlscy9UaW1lclBvaW50U291cmNlR2VuZXJhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb3JiYS90aW1lci90ZXN0cy91dGlscy9UaW1lclBvaW50U291cmNlR2VuZXJhdG9yLmphdmEKQEAgLTY0LDM3NiArNjQsMzc2IEBACiAgKgogICogTm90ZSBvbiBib290c3RyYXBwaW5nOiB0aGUgdGltZSBwb2ludCBmaWxlIG5lZWRzIHRvIGJlIGdlbmVyYXRlZAogICogYmVmb3JlIHRoZSBidWxrIG9mIHRoZSBPUkIgaXMgYnVpbHQuICBUaGlzIHJlcXVpcmVzIGNvbXBpbGluZwotICogdGhlIG5ld3RpbWVyIGFuZCBjb2RlZ2VuIGNsYXNzZXMgaW50byBhIGxpYnJhcnkgZmlsZSB0aGF0IGlzIAorICogdGhlIG5ld3RpbWVyIGFuZCBjb2RlZ2VuIGNsYXNzZXMgaW50byBhIGxpYnJhcnkgZmlsZSB0aGF0IGlzCiAgKiBjaGVja2VkIGludG8gU0NDUy4KICAqLwogcHVibGljIGNsYXNzIFRpbWVyUG9pbnRTb3VyY2VHZW5lcmF0b3IgewogICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFRpbWluZ0luZm9Qcm9jZXNzb3IgewotCXByaXZhdGUgYm9vbGVhbiBkb25lID0gZmFsc2UgOwotCXByaXZhdGUgU3RyaW5nIHBrZyA7Ci0JcHJpdmF0ZSBUaW1lckZhY3RvcnkgdGYgOwotCXByaXZhdGUgTWFwPFN0cmluZyxMaXN0PFN0cmluZz4+IGNvbnRlbnRzIDsKLQlwcml2YXRlIFRpbWVyR3JvdXAgY3VycmVudFRpbWVyR3JvdXAgOworICAgIHByaXZhdGUgYm9vbGVhbiBkb25lID0gZmFsc2UgOworICAgIHByaXZhdGUgU3RyaW5nIHBrZyA7CisgICAgcHJpdmF0ZSBUaW1lckZhY3RvcnkgdGYgOworICAgIHByaXZhdGUgTWFwPFN0cmluZyxMaXN0PFN0cmluZz4+IGNvbnRlbnRzIDsKKyAgICBwcml2YXRlIFRpbWVyR3JvdXAgY3VycmVudFRpbWVyR3JvdXAgOwogCi0JcHJpdmF0ZSB2b2lkIGNoZWNrRm9yVmFsaWRJZGVudGlmaWVyKCBTdHJpbmcgbmFtZSApIHsKLQkgICAgaWYgKCFJZGVudGlmaWVyLmlzVmFsaWRJZGVudGlmaWVyKCBuYW1lICkpIAotCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotCQkgICAgIm5hbWUgIiArIG5hbWUgKyAiIGlzIG5vdCBhIHZhbGlkIEphdmEgaWRlbnRpZmllciIgKSA7Ci0JfQorICAgIHByaXZhdGUgdm9pZCBjaGVja0ZvclZhbGlkSWRlbnRpZmllciggU3RyaW5nIG5hbWUgKSB7CisgICAgICAgIGlmICghSWRlbnRpZmllci5pc1ZhbGlkSWRlbnRpZmllciggbmFtZSApKQorICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgIm5hbWUgIiArIG5hbWUgKyAiIGlzIG5vdCBhIHZhbGlkIEphdmEgaWRlbnRpZmllciIgKSA7CisgICAgfQogCi0JcHJpdmF0ZSB2b2lkIGNoZWNrRG9uZSgpIHsKLQkgICAgaWYgKGRvbmUpCi0JCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCi0JCSAgICAicGFzdCBnZXRSZXN1bHQ6IG5vIG90aGVyIG1ldGhvZHMgbWF5IGJlIGNhbGxlZCIgKSA7Ci0JfQorICAgIHByaXZhdGUgdm9pZCBjaGVja0RvbmUoKSB7CisgICAgICAgIGlmIChkb25lKQorICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAorICAgICAgICAgICAgInBhc3QgZ2V0UmVzdWx0OiBubyBvdGhlciBtZXRob2RzIG1heSBiZSBjYWxsZWQiICkgOworICAgIH0KIAotCXB1YmxpYyBUaW1pbmdJbmZvUHJvY2Vzc29yKCBTdHJpbmcgbmFtZSwgU3RyaW5nIHBrZyApIHsKLQkgICAgdGhpcy5kb25lID0gZmFsc2UgOwotCSAgICB0aGlzLnBrZyA9IHBrZyA7Ci0JICAgIGNoZWNrRm9yVmFsaWRJZGVudGlmaWVyKCBuYW1lICkgOwotCSAgICBpZiAoIUlkZW50aWZpZXIuaXNWYWxpZEZ1bGxJZGVudGlmaWVyKCBwa2cgKSkKLQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLQkJICAgIHBrZyArICIgaXMgbm90IGEgdmFsaWQgcGFja2FnZSBuYW1lIiApIDsKLQkgICAgdGhpcy50ZiA9IFRpbWVyRmFjdG9yeUJ1aWxkZXIubWFrZSggbmFtZSwgbmFtZSApIDsKLQkgICAgdGhpcy5jb250ZW50cyA9IG5ldyBIYXNoTWFwPFN0cmluZyxMaXN0PFN0cmluZz4+KCkgOwotCSAgICB0aGlzLmN1cnJlbnRUaW1lckdyb3VwID0gbnVsbCA7Ci0JfQorICAgIHB1YmxpYyBUaW1pbmdJbmZvUHJvY2Vzc29yKCBTdHJpbmcgbmFtZSwgU3RyaW5nIHBrZyApIHsKKyAgICAgICAgdGhpcy5kb25lID0gZmFsc2UgOworICAgICAgICB0aGlzLnBrZyA9IHBrZyA7CisgICAgICAgIGNoZWNrRm9yVmFsaWRJZGVudGlmaWVyKCBuYW1lICkgOworICAgICAgICBpZiAoIUlkZW50aWZpZXIuaXNWYWxpZEZ1bGxJZGVudGlmaWVyKCBwa2cgKSkKKyAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgIHBrZyArICIgaXMgbm90IGEgdmFsaWQgcGFja2FnZSBuYW1lIiApIDsKKyAgICAgICAgdGhpcy50ZiA9IFRpbWVyRmFjdG9yeUJ1aWxkZXIubWFrZSggbmFtZSwgbmFtZSApIDsKKyAgICAgICAgdGhpcy5jb250ZW50cyA9IG5ldyBIYXNoTWFwPFN0cmluZyxMaXN0PFN0cmluZz4+KCkgOworICAgICAgICB0aGlzLmN1cnJlbnRUaW1lckdyb3VwID0gbnVsbCA7CisgICAgfQogCi0JcHVibGljIHZvaWQgYWRkVGltZXIoIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYyApIHsKLQkgICAgY2hlY2tEb25lKCkgOwotCSAgICBjaGVja0ZvclZhbGlkSWRlbnRpZmllciggbmFtZSApIDsKLQkgICAgdGYubWFrZVRpbWVyKCBuYW1lLCBkZXNjICkgOwotCSAgICBjdXJyZW50VGltZXJHcm91cCA9IG51bGwgOwotCX0KKyAgICBwdWJsaWMgdm9pZCBhZGRUaW1lciggU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjICkgeworICAgICAgICBjaGVja0RvbmUoKSA7CisgICAgICAgIGNoZWNrRm9yVmFsaWRJZGVudGlmaWVyKCBuYW1lICkgOworICAgICAgICB0Zi5tYWtlVGltZXIoIG5hbWUsIGRlc2MgKSA7CisgICAgICAgIGN1cnJlbnRUaW1lckdyb3VwID0gbnVsbCA7CisgICAgfQogCi0JcHVibGljIHZvaWQgYWRkVGltZXJHcm91cCggU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjICkgewotCSAgICBjaGVja0RvbmUoKSA7Ci0JICAgIGNoZWNrRm9yVmFsaWRJZGVudGlmaWVyKCBuYW1lICkgOwotCSAgICBjdXJyZW50VGltZXJHcm91cCA9IHRmLm1ha2VUaW1lckdyb3VwKCBuYW1lLCBkZXNjICkgOwotCX0KKyAgICBwdWJsaWMgdm9pZCBhZGRUaW1lckdyb3VwKCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MgKSB7CisgICAgICAgIGNoZWNrRG9uZSgpIDsKKyAgICAgICAgY2hlY2tGb3JWYWxpZElkZW50aWZpZXIoIG5hbWUgKSA7CisgICAgICAgIGN1cnJlbnRUaW1lckdyb3VwID0gdGYubWFrZVRpbWVyR3JvdXAoIG5hbWUsIGRlc2MgKSA7CisgICAgfQogCi0JcHVibGljIHZvaWQgY29udGFpbnMoIFN0cmluZyBuYW1lICkgewotCSAgICBjaGVja0RvbmUoKSA7Ci0JICAgIGlmIChjdXJyZW50VGltZXJHcm91cCA9PSBudWxsKSB7Ci0JCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCi0JCSAgICAiY29udGFpbnMgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYW4gYWRkVGltZXJHcm91cCBjYWxsIiApIDsKLQkgICAgfSBlbHNlIHsKLQkJU3RyaW5nIGNuYW1lID0gY3VycmVudFRpbWVyR3JvdXAubmFtZSgpIDsKLQkJTGlzdDxTdHJpbmc+IGxpc3QgPSBjb250ZW50cy5nZXQoIGNuYW1lICkgOwotCQlpZiAobGlzdCA9PSBudWxsKSB7Ci0JCSAgICBsaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCkgOwotCQkgICAgY29udGVudHMucHV0KCBjbmFtZSwgbGlzdCApIDsKLQkJfQorICAgIHB1YmxpYyB2b2lkIGNvbnRhaW5zKCBTdHJpbmcgbmFtZSApIHsKKyAgICAgICAgY2hlY2tEb25lKCkgOworICAgICAgICBpZiAoY3VycmVudFRpbWVyR3JvdXAgPT0gbnVsbCkgeworICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAorICAgICAgICAgICAgImNvbnRhaW5zIG11c3QgYmUgY2FsbGVkIGFmdGVyIGFuIGFkZFRpbWVyR3JvdXAgY2FsbCIgKSA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgIFN0cmluZyBjbmFtZSA9IGN1cnJlbnRUaW1lckdyb3VwLm5hbWUoKSA7CisgICAgICAgIExpc3Q8U3RyaW5nPiBsaXN0ID0gY29udGVudHMuZ2V0KCBjbmFtZSApIDsKKyAgICAgICAgaWYgKGxpc3QgPT0gbnVsbCkgeworICAgICAgICAgICAgbGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpIDsKKyAgICAgICAgICAgIGNvbnRlbnRzLnB1dCggY25hbWUsIGxpc3QgKSA7CisgICAgICAgIH0KIAotCQlsaXN0LmFkZCggbmFtZSApIDsKLQkgICAgfQotCX0KKyAgICAgICAgbGlzdC5hZGQoIG5hbWUgKSA7CisgICAgICAgIH0KKyAgICB9CiAKLQlwcml2YXRlIHN0YXRpYyBDb250cm9sbGFibGUgZ2V0Q29udHJvbGxhYmxlKCBUaW1lckZhY3RvcnkgdGYsIFN0cmluZyBuYW1lICkgewotCSAgICBDb250cm9sbGFibGUgcmVzdWx0ID0gdGYudGltZXJzKCkuZ2V0KCBuYW1lICkgOwotCSAgICBpZiAocmVzdWx0ID09IG51bGwpCi0JCXJlc3VsdCA9IHRmLnRpbWVyR3JvdXBzKCkuZ2V0KCBuYW1lICkgOwotCSAgICBpZiAocmVzdWx0ID09IG51bGwpCi0JCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIAotCQkgICAgbmFtZSArICIgaXMgbm90IGEgdmFsaWQgVGltZXIgb3IgVGltZXJHcm91cCBuYW1lIiApIDsKLQkgICAgcmV0dXJuIHJlc3VsdCA7Ci0JfQorICAgIHByaXZhdGUgc3RhdGljIENvbnRyb2xsYWJsZSBnZXRDb250cm9sbGFibGUoIFRpbWVyRmFjdG9yeSB0ZiwgU3RyaW5nIG5hbWUgKSB7CisgICAgICAgIENvbnRyb2xsYWJsZSByZXN1bHQgPSB0Zi50aW1lcnMoKS5nZXQoIG5hbWUgKSA7CisgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKKyAgICAgICAgcmVzdWx0ID0gdGYudGltZXJHcm91cHMoKS5nZXQoIG5hbWUgKSA7CisgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKKyAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgIG5hbWUgKyAiIGlzIG5vdCBhIHZhbGlkIFRpbWVyIG9yIFRpbWVyR3JvdXAgbmFtZSIgKSA7CisgICAgICAgIHJldHVybiByZXN1bHQgOworICAgIH0KIAotCXByaXZhdGUgdm9pZCB1cGRhdGVUaW1lckZhY3RvcnlDb250ZW50cygpIHsKLQkgICAgLy8gIFVzZSB0aGUgTWFwPFN0cmluZyxMaXN0PFN0cmluZz4+IHRvIGZpbGwgaW4gdGhlIFRpbWVyR3JvdXAKLQkgICAgLy8gIGNvbnRhaW5tZW50IHJlbGF0aW9uCi0JICAgIGZvciAoU3RyaW5nIHN0ciA6IGNvbnRlbnRzLmtleVNldCgpKSB7Ci0JCUxpc3Q8U3RyaW5nPiBsaXN0ID0gY29udGVudHMuZ2V0KHN0cikgOwotCQlUaW1lckdyb3VwIHRnID0gdGYudGltZXJHcm91cHMoKS5nZXQoIHN0ciApIDsKLQkJZm9yIChTdHJpbmcgY29udGVudCA6IGxpc3QpIHsKLQkJICAgIHRnLmFkZCggZ2V0Q29udHJvbGxhYmxlKCB0ZiwgY29udGVudCApICkgOwotCQl9Ci0JICAgIH0KLQl9CisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVRpbWVyRmFjdG9yeUNvbnRlbnRzKCkgeworICAgICAgICAvLyAgVXNlIHRoZSBNYXA8U3RyaW5nLExpc3Q8U3RyaW5nPj4gdG8gZmlsbCBpbiB0aGUgVGltZXJHcm91cAorICAgICAgICAvLyAgY29udGFpbm1lbnQgcmVsYXRpb24KKyAgICAgICAgZm9yIChTdHJpbmcgc3RyIDogY29udGVudHMua2V5U2V0KCkpIHsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBjb250ZW50cy5nZXQoc3RyKSA7CisgICAgICAgIFRpbWVyR3JvdXAgdGcgPSB0Zi50aW1lckdyb3VwcygpLmdldCggc3RyICkgOworICAgICAgICBmb3IgKFN0cmluZyBjb250ZW50IDogbGlzdCkgeworICAgICAgICAgICAgdGcuYWRkKCBnZXRDb250cm9sbGFibGUoIHRmLCBjb250ZW50ICkgKSA7CisgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIAotCXB1YmxpYyBQYWlyPFN0cmluZyxUaW1lckZhY3Rvcnk+IGdldFJlc3VsdCgpIHsKLQkgICAgY2hlY2tEb25lKCkgOwotCSAgICBkb25lID0gdHJ1ZSA7Ci0JICAgIHVwZGF0ZVRpbWVyRmFjdG9yeUNvbnRlbnRzKCkgOwotCSAgICBQYWlyPFN0cmluZyxUaW1lckZhY3Rvcnk+IHJlc3VsdCA9IAotCQluZXcgUGFpcjxTdHJpbmcsVGltZXJGYWN0b3J5PiggcGtnLCB0ZiApIDsKLQkgICAgcmV0dXJuIHJlc3VsdCA7Ci0JfQorICAgIHB1YmxpYyBQYWlyPFN0cmluZyxUaW1lckZhY3Rvcnk+IGdldFJlc3VsdCgpIHsKKyAgICAgICAgY2hlY2tEb25lKCkgOworICAgICAgICBkb25lID0gdHJ1ZSA7CisgICAgICAgIHVwZGF0ZVRpbWVyRmFjdG9yeUNvbnRlbnRzKCkgOworICAgICAgICBQYWlyPFN0cmluZyxUaW1lckZhY3Rvcnk+IHJlc3VsdCA9CisgICAgICAgIG5ldyBQYWlyPFN0cmluZyxUaW1lckZhY3Rvcnk+KCBwa2csIHRmICkgOworICAgICAgICByZXR1cm4gcmVzdWx0IDsKKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgSGFuZGxlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0lEVEggPSA0IDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0lEVEggPSA0IDsKIAotCS8vIE5hbWVzIG9mIFhNTCBlbGVtZW50cyBhbmQgYXR0cmlidXRlcwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUSU1FUl9FTEVNRU5UID0gInRpbWVyIiA7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRJTUlOR19FTEVNRU5UID0gInRpbWluZyIgOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUSU1FUl9HUk9VUF9FTEVNRU5UID0gInRpbWVyR3JvdXAiIDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OVEFJTlNfRUxFTUVOVCA9ICJjb250YWlucyIgOworICAgIC8vIE5hbWVzIG9mIFhNTCBlbGVtZW50cyBhbmQgYXR0cmlidXRlcworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUSU1FUl9FTEVNRU5UID0gInRpbWVyIiA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRJTUlOR19FTEVNRU5UID0gInRpbWluZyIgOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUSU1FUl9HUk9VUF9FTEVNRU5UID0gInRpbWVyR3JvdXAiIDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OVEFJTlNfRUxFTUVOVCA9ICJjb250YWlucyIgOwogCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfQVRUUiA9ICJuYW1lIiA7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFU0NSSVBUSU9OX0FUVFIgPSAiZGVzY3JpcHRpb24iIDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFDS0FHRV9BVFRSID0gInBhY2thZ2UiIDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRV9BVFRSID0gIm5hbWUiIDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVTQ1JJUFRJT05fQVRUUiA9ICJkZXNjcmlwdGlvbiIgOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQQUNLQUdFX0FUVFIgPSAicGFja2FnZSIgOwogCi0JcHJpdmF0ZSBib29sZWFuIGRlYnVnIDsKLQlwcml2YXRlIGludCBsZXZlbCA7Ci0JcHJpdmF0ZSBjaGFyW10gcGFkIDsKLQlwcml2YXRlIFRpbWluZ0luZm9Qcm9jZXNzb3IgdGlwIDsKLQlwcml2YXRlIFBhaXI8U3RyaW5nLFRpbWVyRmFjdG9yeT4gcmVzdWx0IDsKKyAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgOworICAgIHByaXZhdGUgaW50IGxldmVsIDsKKyAgICBwcml2YXRlIGNoYXJbXSBwYWQgOworICAgIHByaXZhdGUgVGltaW5nSW5mb1Byb2Nlc3NvciB0aXAgOworICAgIHByaXZhdGUgUGFpcjxTdHJpbmcsVGltZXJGYWN0b3J5PiByZXN1bHQgOwogCi0JcHVibGljIEhhbmRsZXIoIGJvb2xlYW4gZGVidWcgKSB7Ci0JICAgIHRoaXMuZGVidWcgPSBkZWJ1ZyA7Ci0JICAgIHRoaXMubGV2ZWwgPSAwIDsKLQkgICAgc2V0UGFkKCkgOwotCSAgICB0aGlzLnRpcCA9IG51bGwgOwotCSAgICB0aGlzLnJlc3VsdCA9IG51bGwgOwotCX0KLQotCXByaXZhdGUgdm9pZCBpbmRlbnQoKSB7Ci0JICAgIGxldmVsKysgOwotCSAgICBzZXRQYWQoKSA7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHVuZGVudCgpIHsKLQkgICAgbGV2ZWwtLSA7Ci0JICAgIHNldFBhZCgpIDsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc2V0UGFkKCkgewotCSAgICBpbnQgbGVuZ3RoID0gV0lEVEggKiBsZXZlbCA7Ci0JICAgIHBhZCA9IG5ldyBjaGFyW2xlbmd0aF0gOwotCSAgICBmb3IgKGludCBjdHI9MDsgY3RyPGxlbmd0aDsgY3RyKyspCi0JCXBhZFtjdHJdID0gJyAnIDsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZHByaW50KCBTdHJpbmcgbXNnICkgewotCSAgICBpZiAoZGVidWcpIHsKLQkJU3lzdGVtLm91dC5wcmludCggcGFkICkgOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIG1zZyApIDsKLQkgICAgfQotCX0KLQotCXB1YmxpYyB2b2lkIHN0YXJ0RG9jdW1lbnQoKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkgICAgZHByaW50KCAic3RhcnREb2N1bWVudCBjYWxsZWQiICkgOwotCX0KLQotCXB1YmxpYyB2b2lkIGVuZERvY3VtZW50KCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7Ci0JICAgIGRwcmludCggImVuZERvY3VtZW50IGNhbGxlZCIgKSA7Ci0JICAgIHJlc3VsdCA9IHRpcC5nZXRSZXN1bHQoKSA7Ci0JfQotCi0JcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KCBTdHJpbmcgbmFtZXNwYWNlVVJJLAotCSAgICBTdHJpbmcgbE5hbWUsIFN0cmluZyBxTmFtZSwgQXR0cmlidXRlcyBhdHRycyApIAotCSAgICB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQotCSAgICBpbmRlbnQoKSA7Ci0KLQkgICAgLy8gb25seSBxTmFtZSBpcyB1c2VmdWwKLQkgICAgZHByaW50KCAibmFtZXNwYWNlVVJJPSIgKyBuYW1lc3BhY2VVUkkgKSA7Ci0JICAgIGRwcmludCggImxOYW1lPSIgKyBsTmFtZSApIDsKLQkgICAgZHByaW50KCAicU5hbWU9IiArIHFOYW1lICkgOwotCSAgICBkcHJpbnQoICJBdHRyaWJ1dGVzOiIgKSA7Ci0KLQkgICAgLy8gb25seSBsb2NhbCBuYW1lLCB2YWx1ZSBhcmUgdXNlZnVsCi0JICAgIGZvciAoaW50IGN0cj0wOyBjdHI8YXR0cnMuZ2V0TGVuZ3RoKCk7IGN0cisrKSB7Ci0JCWRwcmludCggIlx0bG9jYWwgbmFtZSAgICA9IiArIGF0dHJzLmdldExvY2FsTmFtZShjdHIpICkgOwotCQlkcHJpbnQoICJcdHF1YWxpZmllZCBuYW1lPSIgKyBhdHRycy5nZXRRTmFtZShjdHIpICkgOwotCQlkcHJpbnQoICJcdHZhbHVlICAgICAgICAgPSIgKyBhdHRycy5nZXRWYWx1ZShjdHIpICkgOwotCSAgICB9Ci0KLQkgICAgaWYgKHFOYW1lLmVxdWFscyggVElNSU5HX0VMRU1FTlQgKSkgewotCQlTdHJpbmcgbmFtZSA9IGF0dHJzLmdldFZhbHVlKCBOQU1FX0FUVFIgKSA7Ci0JCVN0cmluZyBwa2cgPSBhdHRycy5nZXRWYWx1ZSggUEFDS0FHRV9BVFRSICkgOwotCQl0aXAgPSBuZXcgVGltaW5nSW5mb1Byb2Nlc3NvciggbmFtZSwgcGtnICkgOwotCSAgICB9IGVsc2UgaWYgKHFOYW1lLmVxdWFscyggVElNRVJfRUxFTUVOVCApKSB7Ci0JCVN0cmluZyBuYW1lID0gYXR0cnMuZ2V0VmFsdWUoIE5BTUVfQVRUUiApIDsKLQkJU3RyaW5nIGRlc2MgPSBhdHRycy5nZXRWYWx1ZSggREVTQ1JJUFRJT05fQVRUUiApIDsKLQkJdGlwLmFkZFRpbWVyKCBuYW1lLCBkZXNjICkgOwotCSAgICB9IGVsc2UgaWYgKHFOYW1lLmVxdWFscyggVElNRVJfR1JPVVBfRUxFTUVOVCApKSB7Ci0JCVN0cmluZyBuYW1lID0gYXR0cnMuZ2V0VmFsdWUoIE5BTUVfQVRUUiApIDsKLQkJU3RyaW5nIGRlc2MgPSBhdHRycy5nZXRWYWx1ZSggREVTQ1JJUFRJT05fQVRUUiApIDsKLQkJdGlwLmFkZFRpbWVyR3JvdXAoIG5hbWUsIGRlc2MgKSA7Ci0JICAgIH0gZWxzZSBpZiAocU5hbWUuZXF1YWxzKCBDT05UQUlOU19FTEVNRU5UICkpIHsKLQkJU3RyaW5nIG5hbWUgPSBhdHRycy5nZXRWYWx1ZSggTkFNRV9BVFRSICkgOwotCQl0aXAuY29udGFpbnMoIG5hbWUgKSA7Ci0JICAgIH0gZWxzZSB7Ci0JCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCi0JCSAgICAiVW5rbm93biBYTUwgZWxlbWVudDogIiArIHFOYW1lICkgOwotCSAgICB9Ci0JfQotCi0JcHVibGljIHZvaWQgZW5kRWxlbWVudCggU3RyaW5nIG5hbWVzcGFjZVVSSSwKLQkgICAgU3RyaW5nIGxOYW1lLCBTdHJpbmcgcU5hbWUgKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQotCSAgICB1bmRlbnQoKSA7Ci0JfQotCi0JcHVibGljIFBhaXI8U3RyaW5nLFRpbWVyRmFjdG9yeT4gZ2V0UmVzdWx0KCkgewotCSAgICByZXR1cm4gcmVzdWx0IDsKLQl9CisgICAgcHVibGljIEhhbmRsZXIoIGJvb2xlYW4gZGVidWcgKSB7CisgICAgICAgIHRoaXMuZGVidWcgPSBkZWJ1ZyA7CisgICAgICAgIHRoaXMubGV2ZWwgPSAwIDsKKyAgICAgICAgc2V0UGFkKCkgOworICAgICAgICB0aGlzLnRpcCA9IG51bGwgOworICAgICAgICB0aGlzLnJlc3VsdCA9IG51bGwgOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgUGFpcjxTdHJpbmcsVGltZXJGYWN0b3J5PiBwYXJzZURlc2NyaXB0aW9uKCAKLQlTdHJpbmcgZmlsZU5hbWUgKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCXJldHVybiBwYXJzZURlc2NyaXB0aW9uKCBmaWxlTmFtZSwgZmFsc2UgKSA7CisgICAgcHJpdmF0ZSB2b2lkIGluZGVudCgpIHsKKyAgICAgICAgbGV2ZWwrKyA7CisgICAgICAgIHNldFBhZCgpIDsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdW5kZW50KCkgeworICAgICAgICBsZXZlbC0tIDsKKyAgICAgICAgc2V0UGFkKCkgOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZXRQYWQoKSB7CisgICAgICAgIGludCBsZW5ndGggPSBXSURUSCAqIGxldmVsIDsKKyAgICAgICAgcGFkID0gbmV3IGNoYXJbbGVuZ3RoXSA7CisgICAgICAgIGZvciAoaW50IGN0cj0wOyBjdHI8bGVuZ3RoOyBjdHIrKykKKyAgICAgICAgcGFkW2N0cl0gPSAnICcgOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkcHJpbnQoIFN0cmluZyBtc2cgKSB7CisgICAgICAgIGlmIChkZWJ1ZykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCBwYWQgKSA7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggbXNnICkgOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc3RhcnREb2N1bWVudCgpIHRocm93cyBTQVhFeGNlcHRpb24geworICAgICAgICBkcHJpbnQoICJzdGFydERvY3VtZW50IGNhbGxlZCIgKSA7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZW5kRG9jdW1lbnQoKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKKyAgICAgICAgZHByaW50KCAiZW5kRG9jdW1lbnQgY2FsbGVkIiApIDsKKyAgICAgICAgcmVzdWx0ID0gdGlwLmdldFJlc3VsdCgpIDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoIFN0cmluZyBuYW1lc3BhY2VVUkksCisgICAgICAgIFN0cmluZyBsTmFtZSwgU3RyaW5nIHFOYW1lLCBBdHRyaWJ1dGVzIGF0dHJzICkKKyAgICAgICAgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7CisKKyAgICAgICAgaW5kZW50KCkgOworCisgICAgICAgIC8vIG9ubHkgcU5hbWUgaXMgdXNlZnVsCisgICAgICAgIGRwcmludCggIm5hbWVzcGFjZVVSST0iICsgbmFtZXNwYWNlVVJJICkgOworICAgICAgICBkcHJpbnQoICJsTmFtZT0iICsgbE5hbWUgKSA7CisgICAgICAgIGRwcmludCggInFOYW1lPSIgKyBxTmFtZSApIDsKKyAgICAgICAgZHByaW50KCAiQXR0cmlidXRlczoiICkgOworCisgICAgICAgIC8vIG9ubHkgbG9jYWwgbmFtZSwgdmFsdWUgYXJlIHVzZWZ1bAorICAgICAgICBmb3IgKGludCBjdHI9MDsgY3RyPGF0dHJzLmdldExlbmd0aCgpOyBjdHIrKykgeworICAgICAgICBkcHJpbnQoICJcdGxvY2FsIG5hbWUgICAgPSIgKyBhdHRycy5nZXRMb2NhbE5hbWUoY3RyKSApIDsKKyAgICAgICAgZHByaW50KCAiXHRxdWFsaWZpZWQgbmFtZT0iICsgYXR0cnMuZ2V0UU5hbWUoY3RyKSApIDsKKyAgICAgICAgZHByaW50KCAiXHR2YWx1ZSAgICAgICAgID0iICsgYXR0cnMuZ2V0VmFsdWUoY3RyKSApIDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChxTmFtZS5lcXVhbHMoIFRJTUlOR19FTEVNRU5UICkpIHsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBhdHRycy5nZXRWYWx1ZSggTkFNRV9BVFRSICkgOworICAgICAgICBTdHJpbmcgcGtnID0gYXR0cnMuZ2V0VmFsdWUoIFBBQ0tBR0VfQVRUUiApIDsKKyAgICAgICAgdGlwID0gbmV3IFRpbWluZ0luZm9Qcm9jZXNzb3IoIG5hbWUsIHBrZyApIDsKKyAgICAgICAgfSBlbHNlIGlmIChxTmFtZS5lcXVhbHMoIFRJTUVSX0VMRU1FTlQgKSkgeworICAgICAgICBTdHJpbmcgbmFtZSA9IGF0dHJzLmdldFZhbHVlKCBOQU1FX0FUVFIgKSA7CisgICAgICAgIFN0cmluZyBkZXNjID0gYXR0cnMuZ2V0VmFsdWUoIERFU0NSSVBUSU9OX0FUVFIgKSA7CisgICAgICAgIHRpcC5hZGRUaW1lciggbmFtZSwgZGVzYyApIDsKKyAgICAgICAgfSBlbHNlIGlmIChxTmFtZS5lcXVhbHMoIFRJTUVSX0dST1VQX0VMRU1FTlQgKSkgeworICAgICAgICBTdHJpbmcgbmFtZSA9IGF0dHJzLmdldFZhbHVlKCBOQU1FX0FUVFIgKSA7CisgICAgICAgIFN0cmluZyBkZXNjID0gYXR0cnMuZ2V0VmFsdWUoIERFU0NSSVBUSU9OX0FUVFIgKSA7CisgICAgICAgIHRpcC5hZGRUaW1lckdyb3VwKCBuYW1lLCBkZXNjICkgOworICAgICAgICB9IGVsc2UgaWYgKHFOYW1lLmVxdWFscyggQ09OVEFJTlNfRUxFTUVOVCApKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gYXR0cnMuZ2V0VmFsdWUoIE5BTUVfQVRUUiApIDsKKyAgICAgICAgdGlwLmNvbnRhaW5zKCBuYW1lICkgOworICAgICAgICB9IGVsc2UgeworICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAorICAgICAgICAgICAgIlVua25vd24gWE1MIGVsZW1lbnQ6ICIgKyBxTmFtZSApIDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGVuZEVsZW1lbnQoIFN0cmluZyBuYW1lc3BhY2VVUkksCisgICAgICAgIFN0cmluZyBsTmFtZSwgU3RyaW5nIHFOYW1lICkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7CisKKyAgICAgICAgdW5kZW50KCkgOworICAgIH0KKworICAgIHB1YmxpYyBQYWlyPFN0cmluZyxUaW1lckZhY3Rvcnk+IGdldFJlc3VsdCgpIHsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCA7CisgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgUGFpcjxTdHJpbmcsVGltZXJGYWN0b3J5PiBwYXJzZURlc2NyaXB0aW9uKAorICAgIFN0cmluZyBmaWxlTmFtZSApIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgcmV0dXJuIHBhcnNlRGVzY3JpcHRpb24oIGZpbGVOYW1lLCBmYWxzZSApIDsKICAgICB9CiAKICAgICAvKiogUmV0dXJuIHRoZSBwYWNrYWdlIGZvciB0aGUgZmlsZSB0byBnZW5lcmF0ZSBhbmQgYSBUaW1lckZhY3RvcnkKICAgICAgKiB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgWE1MIHNvdXJjZSBmaWxlCiAgICAgICogZ2l2ZW4gYnkgZmlsZU5hbWUuCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBQYWlyPFN0cmluZyxUaW1lckZhY3Rvcnk+IHBhcnNlRGVzY3JpcHRpb24oIAotCVN0cmluZyBmaWxlTmFtZSwgYm9vbGVhbiBkZWJ1ZyApIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgcHVibGljIHN0YXRpYyBQYWlyPFN0cmluZyxUaW1lckZhY3Rvcnk+IHBhcnNlRGVzY3JpcHRpb24oCisgICAgU3RyaW5nIGZpbGVOYW1lLCBib29sZWFuIGRlYnVnICkgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAotCUhhbmRsZXIgaGFuZGxlciA9IG5ldyBIYW5kbGVyKCBkZWJ1ZyApIDsKLQlTQVhQYXJzZXJGYWN0b3J5IGZhY3RvcnkgPSBTQVhQYXJzZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkgOwotCWZhY3Rvcnkuc2V0VmFsaWRhdGluZyggdHJ1ZSApIDsKLQlGaWxlIGZpbGUgPSBudWxsIDsKKyAgICBIYW5kbGVyIGhhbmRsZXIgPSBuZXcgSGFuZGxlciggZGVidWcgKSA7CisgICAgU0FYUGFyc2VyRmFjdG9yeSBmYWN0b3J5ID0gU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpIDsKKyAgICBmYWN0b3J5LnNldFZhbGlkYXRpbmcoIHRydWUgKSA7CisgICAgRmlsZSBmaWxlID0gbnVsbCA7CiAKLQl0cnkgewotCSAgICBTQVhQYXJzZXIgc2F4UGFyc2VyID0gZmFjdG9yeS5uZXdTQVhQYXJzZXIoKSA7Ci0JICAgIGZpbGUgPSBuZXcgRmlsZSggZmlsZU5hbWUgKSA7Ci0JICAgIHNheFBhcnNlci5wYXJzZSggZmlsZSwgaGFuZGxlciApIDsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXhjKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkV4Y2VwdGlvbiBpbiBwcm9jZXNzaW5nICIgKyBmaWxlICsgIjogIiArIGV4YyApIDsKLQkgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpIDsKLQkgICAgcmV0dXJuIG51bGwgOwotCX0KKyAgICB0cnkgeworICAgICAgICBTQVhQYXJzZXIgc2F4UGFyc2VyID0gZmFjdG9yeS5uZXdTQVhQYXJzZXIoKSA7CisgICAgICAgIGZpbGUgPSBuZXcgRmlsZSggZmlsZU5hbWUgKSA7CisgICAgICAgIHNheFBhcnNlci5wYXJzZSggZmlsZSwgaGFuZGxlciApIDsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXhjKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkV4Y2VwdGlvbiBpbiBwcm9jZXNzaW5nICIgKyBmaWxlICsgIjogIiArIGV4YyApIDsKKyAgICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpIDsKKyAgICAgICAgcmV0dXJuIG51bGwgOworICAgIH0KIAotCXJldHVybiBoYW5kbGVyLmdldFJlc3VsdCgpIDsKKyAgICByZXR1cm4gaGFuZGxlci5nZXRSZXN1bHQoKSA7CiAgICAgfQogCiAgICAgLyoqIEdlbmVyYXRlIHRoZSBzb3VyY2UgZmlsZSBmb3IgdGhlIFRpbWVycyBpbiB0aGUgVGltZXJGYWN0b3J5IGZyb20gdGhlIGRlc2NyaXB0aW9uLgotICAgICAqIFRoZSBmaWxlIGlzIGdlbmVyYXRlZCBpbiB0aGUgZGlyZWN0b3J5IGdpdmVuIGJ5IHRoZSBwYWNrYWdlIGZyb20gdGhlIGRlc2NyaXB0aW9uIAorICAgICAqIFRoZSBmaWxlIGlzIGdlbmVyYXRlZCBpbiB0aGUgZGlyZWN0b3J5IGdpdmVuIGJ5IHRoZSBwYWNrYWdlIGZyb20gdGhlIGRlc2NyaXB0aW9uCiAgICAgICogc3RhcnRpbmcgYXQgdGhlIGRpck5hbWUuICBUaGUgbmFtZSBvZiB0aGUgZmlsZSBpcyBOQU1FLmphdmEsIHdoZXJlIE5BTUUKICAgICAgKiBpcyB0aGUgVGltZXJGYWN0b3J5IG5hbWUgZnJvbSB0aGUgZGVzY3JpcHRpb24uCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGdlbmVyYXRlU291cmNlRmlsZSggU3RyaW5nIGRpck5hbWUsIAotCVBhaXI8U3RyaW5nLFRpbWVyRmFjdG9yeT4gZGVzY3JpcHRpb24gKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBnZW5lcmF0ZVNvdXJjZUZpbGUoIFN0cmluZyBkaXJOYW1lLAorICAgIFBhaXI8U3RyaW5nLFRpbWVyRmFjdG9yeT4gZGVzY3JpcHRpb24gKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCi0JX2NsZWFyKCkgOwotCV9wYWNrYWdlKCBkZXNjcmlwdGlvbi5maXJzdCgpICkgOwotCV9pbXBvcnQoICJqYXZhLmxhbmcuT2JqZWN0IiApIDsKLQlfaW1wb3J0KCAiamF2YS5sYW5nLlN0cmluZyIgKSA7Ci0JX2ltcG9ydCggImNvbS5zdW4uY29yYmEuZWUuc3BpLm9yYi5PUkIiICkgOwotCV9pbXBvcnQoICJjb20uc3VuLmNvcmJhLmVlLnNwaS5vcmJ1dGlsLm5ld3RpbWVyLkNvbnRyb2xsYWJsZSIgKSA7Ci0JX2ltcG9ydCggImNvbS5zdW4uY29yYmEuZWUuc3BpLm9yYnV0aWwubmV3dGltZXIuVGltZXJNYW5hZ2VyIiApIDsKLQlfaW1wb3J0KCAiY29tLnN1bi5jb3JiYS5lZS5zcGkub3JidXRpbC5uZXd0aW1lci5UaW1lckZhY3RvcnkiICkgOwotCV9pbXBvcnQoICJjb20uc3VuLmNvcmJhLmVlLnNwaS5vcmJ1dGlsLm5ld3RpbWVyLlRpbWVyIiApIDsKLQlfaW1wb3J0KCAiY29tLnN1bi5jb3JiYS5lZS5zcGkub3JidXRpbC5uZXd0aW1lci5UaW1lckV2ZW50Q29udHJvbGxlciIgKSA7Ci0JX2ltcG9ydCggImNvbS5zdW4uY29yYmEuZWUuc3BpLm9yYnV0aWwubmV3dGltZXIuVGltZXJHcm91cCIgKSA7CisgICAgX2NsZWFyKCkgOworICAgIF9wYWNrYWdlKCBkZXNjcmlwdGlvbi5maXJzdCgpICkgOworICAgIF9pbXBvcnQoICJqYXZhLmxhbmcuT2JqZWN0IiApIDsKKyAgICBfaW1wb3J0KCAiamF2YS5sYW5nLlN0cmluZyIgKSA7CisgICAgX2ltcG9ydCggImNvbS5zdW4uY29yYmEuZWUuc3BpLm9yYi5PUkIiICkgOworICAgIF9pbXBvcnQoICJjb20uc3VuLmNvcmJhLmVlLnNwaS5vcmJ1dGlsLm5ld3RpbWVyLkNvbnRyb2xsYWJsZSIgKSA7CisgICAgX2ltcG9ydCggImNvbS5zdW4uY29yYmEuZWUuc3BpLm9yYnV0aWwubmV3dGltZXIuVGltZXJNYW5hZ2VyIiApIDsKKyAgICBfaW1wb3J0KCAiY29tLnN1bi5jb3JiYS5lZS5zcGkub3JidXRpbC5uZXd0aW1lci5UaW1lckZhY3RvcnkiICkgOworICAgIF9pbXBvcnQoICJjb20uc3VuLmNvcmJhLmVlLnNwaS5vcmJ1dGlsLm5ld3RpbWVyLlRpbWVyIiApIDsKKyAgICBfaW1wb3J0KCAiY29tLnN1bi5jb3JiYS5lZS5zcGkub3JidXRpbC5uZXd0aW1lci5UaW1lckV2ZW50Q29udHJvbGxlciIgKSA7CisgICAgX2ltcG9ydCggImNvbS5zdW4uY29yYmEuZWUuc3BpLm9yYnV0aWwubmV3dGltZXIuVGltZXJHcm91cCIgKSA7CiAKLQlUaW1lckZhY3RvcnkgdGYgPSBkZXNjcmlwdGlvbi5zZWNvbmQoKSA7Ci0JX2NsYXNzKCBQVUJMSUMsIHRmLm5hbWUoKSwgX3QoIk9iamVjdCIpICkgOyAKKyAgICBUaW1lckZhY3RvcnkgdGYgPSBkZXNjcmlwdGlvbi5zZWNvbmQoKSA7CisgICAgX2NsYXNzKCBQVUJMSUMsIHRmLm5hbWUoKSwgX3QoIk9iamVjdCIpICkgOwogCi0JLy8gbm8gc3RhdGljIGluaXRpYWxpemVyIG5lZWRlZAotCQotCWdlbmVyYXRlRmllbGRzKCB0ZiApIDsKLQlnZW5lcmF0ZUNvbnN0cnVjdG9yKCB0ZiApIDsKLQlnZW5lcmF0ZUVudGVyRXhpdE1ldGhvZHMoIHRmICkgOworICAgIC8vIG5vIHN0YXRpYyBpbml0aWFsaXplciBuZWVkZWQKIAotCV9lbmQoKSA7IC8vIG9mIGNsYXNzIGdlbmVyYXRpb24KKyAgICBnZW5lcmF0ZUZpZWxkcyggdGYgKSA7CisgICAgZ2VuZXJhdGVDb25zdHJ1Y3RvciggdGYgKSA7CisgICAgZ2VuZXJhdGVFbnRlckV4aXRNZXRob2RzKCB0ZiApIDsKIAotCUZpbGUgZGlyID0gbmV3IEZpbGUoIGRpck5hbWUgKSA7Ci0JU3RyaW5nIHBrZyA9IGRlc2NyaXB0aW9uLmZpcnN0KCkgOwotCVN0cmluZyBmaWxlRGlyID0gcGtnLnJlcGxhY2UoICcuJywgRmlsZS5zZXBhcmF0b3JDaGFyICkgOwotCUZpbGUgZmRpciA9IG5ldyBGaWxlKCBkaXIsIGZpbGVEaXIgKSA7Ci0JLy8gbWtkaXJzIG9ubHkgcmV0dXJucyB0cnVlIGlmIGRpcnMgd2VyZSBjcmVhdGVkLCBzbwotCS8vIGZhbHNlIG1heSBvciBtYXkgbm90IGluZGljYXRlIGFuIGVycm9yLgotCWZkaXIubWtkaXJzKCkgOyAKLQlGaWxlIGZpbGUgPSBuZXcgRmlsZSggZmRpciwgdGYubmFtZSgpICsgIi5qYXZhIiApIDsKLQlQcmludFN0cmVhbSBwcyA9IG5ldyBQcmludFN0cmVhbSggZmlsZSApIDsgCi0JX3NvdXJjZUNvZGUoIHBzLCBuZXcgUHJvcGVydGllcygpICkgOworICAgIF9lbmQoKSA7IC8vIG9mIGNsYXNzIGdlbmVyYXRpb24KKworICAgIEZpbGUgZGlyID0gbmV3IEZpbGUoIGRpck5hbWUgKSA7CisgICAgU3RyaW5nIHBrZyA9IGRlc2NyaXB0aW9uLmZpcnN0KCkgOworICAgIFN0cmluZyBmaWxlRGlyID0gcGtnLnJlcGxhY2UoICcuJywgRmlsZS5zZXBhcmF0b3JDaGFyICkgOworICAgIEZpbGUgZmRpciA9IG5ldyBGaWxlKCBkaXIsIGZpbGVEaXIgKSA7CisgICAgLy8gbWtkaXJzIG9ubHkgcmV0dXJucyB0cnVlIGlmIGRpcnMgd2VyZSBjcmVhdGVkLCBzbworICAgIC8vIGZhbHNlIG1heSBvciBtYXkgbm90IGluZGljYXRlIGFuIGVycm9yLgorICAgIGZkaXIubWtkaXJzKCkgOworICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKCBmZGlyLCB0Zi5uYW1lKCkgKyAiLmphdmEiICkgOworICAgIFByaW50U3RyZWFtIHBzID0gbmV3IFByaW50U3RyZWFtKCBmaWxlICkgOworICAgIF9zb3VyY2VDb2RlKCBwcywgbmV3IFByb3BlcnRpZXMoKSApIDsKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGdlbmVyYXRlRmllbGRzKCBUaW1lckZhY3RvcnkgdGYgKSB7Ci0JX2RhdGEoIFBSSVZBVEV8RklOQUwsIF90KCJUaW1lckV2ZW50Q29udHJvbGxlciIpLCAiY29udHJvbGxlciIgKSA7CisgICAgX2RhdGEoIFBSSVZBVEV8RklOQUwsIF90KCJUaW1lckV2ZW50Q29udHJvbGxlciIpLCAiY29udHJvbGxlciIgKSA7CiAKLQlmb3IgKFRpbWVyIHQgOiB0Zi50aW1lcnMoKS52YWx1ZXMoKSkgewotCSAgICBUeXBlIHR5cGUgPSBfdCgiVGltZXIiKSA7Ci0JICAgIF9kYXRhKCBQVUJMSUN8RklOQUwsIHR5cGUsIHQubmFtZSgpICkgOwotCX0KKyAgICBmb3IgKFRpbWVyIHQgOiB0Zi50aW1lcnMoKS52YWx1ZXMoKSkgeworICAgICAgICBUeXBlIHR5cGUgPSBfdCgiVGltZXIiKSA7CisgICAgICAgIF9kYXRhKCBQVUJMSUN8RklOQUwsIHR5cGUsIHQubmFtZSgpICkgOworICAgIH0KIAotCWZvciAoVGltZXJHcm91cCB0ZyA6IHRmLnRpbWVyR3JvdXBzKCkudmFsdWVzKCkpIHsKLQkgICAgVHlwZSB0eXBlID0gX3QoIlRpbWVyR3JvdXAiKSA7Ci0JICAgIF9kYXRhKCBQVUJMSUN8RklOQUwsIHR5cGUsIHRnLm5hbWUoKSApIDsKLQl9CisgICAgZm9yIChUaW1lckdyb3VwIHRnIDogdGYudGltZXJHcm91cHMoKS52YWx1ZXMoKSkgeworICAgICAgICBUeXBlIHR5cGUgPSBfdCgiVGltZXJHcm91cCIpIDsKKyAgICAgICAgX2RhdGEoIFBVQkxJQ3xGSU5BTCwgdHlwZSwgdGcubmFtZSgpICkgOworICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGdlbmVyYXRlQ29uc3RydWN0b3IoIFRpbWVyRmFjdG9yeSB0ZiApIHsKLQlfY29uc3RydWN0b3IoIFBVQkxJQyApIDsKLQkgICAgX2FyZyggX3QoIlRpbWVyRmFjdG9yeSIpLCAidGYiICkgOwotCSAgICBfYXJnKCBfdCgiVGltZXJFdmVudENvbnRyb2xsZXIiKSwgImNvbnRyb2xsZXIiICkgOwotCV9ib2R5KCkgOworICAgIF9jb25zdHJ1Y3RvciggUFVCTElDICkgOworICAgICAgICBfYXJnKCBfdCgiVGltZXJGYWN0b3J5IiksICJ0ZiIgKSA7CisgICAgICAgIF9hcmcoIF90KCJUaW1lckV2ZW50Q29udHJvbGxlciIpLCAiY29udHJvbGxlciIgKSA7CisgICAgX2JvZHkoKSA7CiAKLQkvLyBzZXQgdXAgb3JiIGFuZCB0bQotCV9hc3NpZ24oIF9maWVsZCggX3RoaXMoKSwgImNvbnRyb2xsZXIiICksIF92KCAiY29udHJvbGxlciIgKSApIDsKKyAgICAvLyBzZXQgdXAgb3JiIGFuZCB0bQorICAgIF9hc3NpZ24oIF9maWVsZCggX3RoaXMoKSwgImNvbnRyb2xsZXIiICksIF92KCAiY29udHJvbGxlciIgKSApIDsKIAotCS8vIGNyZWF0ZSBhbGwgdGltZXJzCi0JU2lnbmF0dXJlIHRzaWcgPSBfcyggX3QoIlRpbWVyIiksIF90KCJTdHJpbmciKSwgX3QoIlN0cmluZyIpICkgOwotCWZvciAoVGltZXIgdCA6IHRmLnRpbWVycygpLnZhbHVlcygpICkgewotCSAgICBfYXNzaWduKCBfdiggdC5uYW1lKCkgKSwgCi0JCV9jYWxsKCBfdigidGYiKSwgIm1ha2VUaW1lciIsIHRzaWcsCi0JCSAgICBfY29uc3QodC5uYW1lKCkpLCBfY29uc3QodC5kZXNjcmlwdGlvbigpKSkpIDsKLQl9Ci0gICAgCi0JLy8gY3JlYXRlIGFsbCB0aW1lciBncm91cHMKLQlTaWduYXR1cmUgdGdzaWcgPSBfcyggX3QoIlRpbWVyR3JvdXAiKSwgX3QoIlN0cmluZyIpLCAKLQkgICAgX3QoIlN0cmluZyIpICkgOwotCWZvciAoVGltZXJHcm91cCB0ZyA6IHRmLnRpbWVyR3JvdXBzKCkudmFsdWVzKCkgKSB7Ci0JICAgIF9hc3NpZ24oIF92KCB0Zy5uYW1lKCkgKSwgCi0JCV9jYWxsKCBfdigidGYiKSwgIm1ha2VUaW1lckdyb3VwIiwgdGdzaWcsCi0JCSAgICBfY29uc3QodGcubmFtZSgpKSwgX2NvbnN0KHRnLmRlc2NyaXB0aW9uKCkpKSkgOwotCX0KLQkKLQkvLyBmaWxsIGluIHRpbWVyIGdyb3VwIGNvbnRhaW5tZW50Ci0JU2lnbmF0dXJlIGFkZFNpZyA9IF9zKCBfdm9pZCgpLCBfdCgiQ29udHJvbGxhYmxlIikpIDsKLQlmb3IgKFRpbWVyR3JvdXAgdGcgOiB0Zi50aW1lckdyb3VwcygpLnZhbHVlcygpICkgewotCSAgICBmb3IgKENvbnRyb2xsYWJsZSBjIDogdGcuY29udGVudHMoKSApIHsKLQkJX2V4cHIoIAotCQkgICAgX2NhbGwoIF92KHRnLm5hbWUoKSksICJhZGQiLCBhZGRTaWcsCi0JCQlfdihjLm5hbWUoKSkpKSA7Ci0JICAgIH0KLQl9CisgICAgLy8gY3JlYXRlIGFsbCB0aW1lcnMKKyAgICBTaWduYXR1cmUgdHNpZyA9IF9zKCBfdCgiVGltZXIiKSwgX3QoIlN0cmluZyIpLCBfdCgiU3RyaW5nIikgKSA7CisgICAgZm9yIChUaW1lciB0IDogdGYudGltZXJzKCkudmFsdWVzKCkgKSB7CisgICAgICAgIF9hc3NpZ24oIF92KCB0Lm5hbWUoKSApLAorICAgICAgICBfY2FsbCggX3YoInRmIiksICJtYWtlVGltZXIiLCB0c2lnLAorICAgICAgICAgICAgX2NvbnN0KHQubmFtZSgpKSwgX2NvbnN0KHQuZGVzY3JpcHRpb24oKSkpKSA7CisgICAgfQogCi0JX2VuZCgpIDsKKyAgICAvLyBjcmVhdGUgYWxsIHRpbWVyIGdyb3VwcworICAgIFNpZ25hdHVyZSB0Z3NpZyA9IF9zKCBfdCgiVGltZXJHcm91cCIpLCBfdCgiU3RyaW5nIiksCisgICAgICAgIF90KCJTdHJpbmciKSApIDsKKyAgICBmb3IgKFRpbWVyR3JvdXAgdGcgOiB0Zi50aW1lckdyb3VwcygpLnZhbHVlcygpICkgeworICAgICAgICBfYXNzaWduKCBfdiggdGcubmFtZSgpICksCisgICAgICAgIF9jYWxsKCBfdigidGYiKSwgIm1ha2VUaW1lckdyb3VwIiwgdGdzaWcsCisgICAgICAgICAgICBfY29uc3QodGcubmFtZSgpKSwgX2NvbnN0KHRnLmRlc2NyaXB0aW9uKCkpKSkgOworICAgIH0KKworICAgIC8vIGZpbGwgaW4gdGltZXIgZ3JvdXAgY29udGFpbm1lbnQKKyAgICBTaWduYXR1cmUgYWRkU2lnID0gX3MoIF92b2lkKCksIF90KCJDb250cm9sbGFibGUiKSkgOworICAgIGZvciAoVGltZXJHcm91cCB0ZyA6IHRmLnRpbWVyR3JvdXBzKCkudmFsdWVzKCkgKSB7CisgICAgICAgIGZvciAoQ29udHJvbGxhYmxlIGMgOiB0Zy5jb250ZW50cygpICkgeworICAgICAgICBfZXhwcigKKyAgICAgICAgICAgIF9jYWxsKCBfdih0Zy5uYW1lKCkpLCAiYWRkIiwgYWRkU2lnLAorICAgICAgICAgICAgX3YoYy5uYW1lKCkpKSkgOworICAgICAgICB9CisgICAgfQorCisgICAgX2VuZCgpIDsKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGdlbmVyYXRlRW50ZXJFeGl0TWV0aG9kcyggVGltZXJGYWN0b3J5IHRmICkgewotCS8vIGdlbmVyYXRlIGVudGVyIGFuZCBleGl0IG1ldGhvZCBmb3IgZWFjaCBUaW1lcgotCWZvciAoVGltZXIgdCA6IHRmLnRpbWVycygpLnZhbHVlcygpICkgewotCSAgICBnZW5lcmF0ZU1ldGhvZCggImVudGVyIiwgdC5uYW1lKCkgKSA7Ci0JICAgIGdlbmVyYXRlTWV0aG9kKCAiZXhpdCIsIHQubmFtZSgpICkgOwotCX0KKyAgICAvLyBnZW5lcmF0ZSBlbnRlciBhbmQgZXhpdCBtZXRob2QgZm9yIGVhY2ggVGltZXIKKyAgICBmb3IgKFRpbWVyIHQgOiB0Zi50aW1lcnMoKS52YWx1ZXMoKSApIHsKKyAgICAgICAgZ2VuZXJhdGVNZXRob2QoICJlbnRlciIsIHQubmFtZSgpICkgOworICAgICAgICBnZW5lcmF0ZU1ldGhvZCggImV4aXQiLCB0Lm5hbWUoKSApIDsKKyAgICB9CiAgICAgfQogCiAgICAgLy8gWFhYIHdlIHNob3VsZCBhZGQgSmF2YURvYyBzdXBwb3J0IHRvIGNvZGVnZW4sIGFuZCB1c2UgaXQKICAgICAvLyBmb3IgdGhlIGVudGVyL2V4aXQgbWV0aG9kcy4KICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGdlbmVyYXRlTWV0aG9kKCBTdHJpbmcgb3AsIFN0cmluZyB0aW1lciApIHsKLQlfbWV0aG9kKCBQVUJMSUMsIF92b2lkKCksIG9wKyJfIit0aW1lciApIDsKLQlfYm9keSgpIDsKLQkgICAgU2lnbmF0dXJlIHNpZyA9IF9zKF92b2lkKCksIF90KCJUaW1lckV2ZW50Q29udHJvbGxlciIpKSA7Ci0JICAgIF9leHByKCBfY2FsbCggX3YoImNvbnRyb2xsZXIiKSwgb3AsIHNpZywgX3YodGltZXIpKSkgOwotCV9lbmQoKSA7CisgICAgX21ldGhvZCggUFVCTElDLCBfdm9pZCgpLCBvcCsiXyIrdGltZXIgKSA7CisgICAgX2JvZHkoKSA7CisgICAgICAgIFNpZ25hdHVyZSBzaWcgPSBfcyhfdm9pZCgpLCBfdCgiVGltZXJFdmVudENvbnRyb2xsZXIiKSkgOworICAgICAgICBfZXhwciggX2NhbGwoIF92KCJjb250cm9sbGVyIiksIG9wLCBzaWcsIF92KHRpbWVyKSkpIDsKKyAgICBfZW5kKCkgOwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmdbXSBhcmdzICkgewotCS8vIGFyZ3VtZW50czogaW5maWxlIG91dGRpciBkZWJ1ZwotCWlmIChhcmdzLmxlbmd0aCAhPSAzKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlJlcXVpcmVkIGFyZ3VtZW50czogaW5wdXQtZmlsZSBvdXRwdXQtZGlyZWN0b3J5IiApIDsKLQkgICAgU3lzdGVtLmV4aXQoIDEgKSA7Ci0JfSBlbHNlIHsKLQkgICAgdHJ5IHsKLQkJU3RyaW5nIGluZmlsZSA9IGFyZ3NbMF0gOwotCQlTdHJpbmcgb3V0ZGlyID0gYXJnc1sxXSA7Ci0JCWJvb2xlYW4gZGVidWcgPSBCb29sZWFuLnBhcnNlQm9vbGVhbiggYXJnc1syXSApIDsKLQkJUGFpcjxTdHJpbmcsVGltZXJGYWN0b3J5PiByZXN1bHQgPSBwYXJzZURlc2NyaXB0aW9uKCBpbmZpbGUsCi0JCSAgICBkZWJ1ZyApIDsKLQkJZ2VuZXJhdGVTb3VyY2VGaWxlKCBvdXRkaXIsIHJlc3VsdCApIDsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4YykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oICJGYWlsZWQgd2l0aCBleGNlcHRpb246ICIgKyBleGMgKSA7Ci0JCWV4Yy5wcmludFN0YWNrVHJhY2UoKSA7Ci0JCVN5c3RlbS5leGl0KCAxICkgOwotCSAgICB9Ci0JfQorICAgIC8vIGFyZ3VtZW50czogaW5maWxlIG91dGRpciBkZWJ1ZworICAgIGlmIChhcmdzLmxlbmd0aCAhPSAzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlJlcXVpcmVkIGFyZ3VtZW50czogaW5wdXQtZmlsZSBvdXRwdXQtZGlyZWN0b3J5IiApIDsKKyAgICAgICAgU3lzdGVtLmV4aXQoIDEgKSA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgU3RyaW5nIGluZmlsZSA9IGFyZ3NbMF0gOworICAgICAgICBTdHJpbmcgb3V0ZGlyID0gYXJnc1sxXSA7CisgICAgICAgIGJvb2xlYW4gZGVidWcgPSBCb29sZWFuLnBhcnNlQm9vbGVhbiggYXJnc1syXSApIDsKKyAgICAgICAgUGFpcjxTdHJpbmcsVGltZXJGYWN0b3J5PiByZXN1bHQgPSBwYXJzZURlc2NyaXB0aW9uKCBpbmZpbGUsCisgICAgICAgICAgICBkZWJ1ZyApIDsKKyAgICAgICAgZ2VuZXJhdGVTb3VyY2VGaWxlKCBvdXRkaXIsIHJlc3VsdCApIDsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4YykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJGYWlsZWQgd2l0aCBleGNlcHRpb246ICIgKyBleGMgKSA7CisgICAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKSA7CisgICAgICAgIFN5c3RlbS5leGl0KCAxICkgOworICAgICAgICB9CisgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvY29yYmEvdGltZXIvdGVzdHMvdXRpbHMvVGltZXJVdGlscy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb3JiYS90aW1lci90ZXN0cy91dGlscy9UaW1lclV0aWxzLmphdmEKaW5kZXggZDUwYzU1Ny4uNWJkN2ZjYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb3JiYS90aW1lci90ZXN0cy91dGlscy9UaW1lclV0aWxzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9jb3JiYS90aW1lci90ZXN0cy91dGlscy9UaW1lclV0aWxzLmphdmEKQEAgLTM0LDg1ICszNCw4NSBAQAogCiAKIHB1YmxpYyBjbGFzcyBUaW1lclV0aWxzIHsKLSAgICBwcml2YXRlIFRpbWVyVXRpbHMoKSB7fSAKKyAgICBwcml2YXRlIFRpbWVyVXRpbHMoKSB7fQogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGR1bXBMb2dUb0ZpbGUoIFRpbWVyRmFjdG9yeSB0ZiwgTG9nRXZlbnRIYW5kbGVyIGxvZywgCi0JRmlsZSBmaWxlICkgewotCQotCVByaW50U3RyZWFtIHBzID0gbnVsbCA7Ci0JdHJ5IHsKLQkgICAgcHMgPSBuZXcgUHJpbnRTdHJlYW0oIGZpbGUgKSA7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGR1bXBMb2dUb0ZpbGUoIFRpbWVyRmFjdG9yeSB0ZiwgTG9nRXZlbnRIYW5kbGVyIGxvZywKKyAgICBGaWxlIGZpbGUgKSB7CiAKLQkgICAgLy8gRHVtcCB0aGUgdGltZXIgYW5kIHRpbWVyIGdyb3VwIG5hbWVzIHRvIHRoZSBmaWxlIGluIG51bWVyaWNhbCBvcmRlcgotCSAgICAvLyBUaW1lIGdyb3VwIG5hbWVzIGFyZSBub3QgdXNlZCwgYnV0IHRoaXMgd2lsbCBiZSBjb21wYXRpYmxlCi0JICAgIC8vIHdpdGggdGhlIGxvZyBldmVudCBwcm9jZXNzb3IuCi0JICAgIGZvciAoaW50IGN0cj0wOyBjdHI8dGYubnVtYmVyT2ZJZHMoKTsgY3RyKyspIHsKLQkJQ29udHJvbGxhYmxlIGNvbiA9IHRmLmdldENvbnRyb2xsYWJsZSggY3RyICkgOwotCQlwcy5wcmludGxuKCAiQkVHSU4gIiArIGNvbi5uYW1lKCkgKSA7Ci0JCXBzLnByaW50bG4oICJFTkQgIiArIGNvbi5uYW1lKCkgKSA7Ci0JICAgIH0KKyAgICBQcmludFN0cmVhbSBwcyA9IG51bGwgOworICAgIHRyeSB7CisgICAgICAgIHBzID0gbmV3IFByaW50U3RyZWFtKCBmaWxlICkgOwogCi0JICAgIHBzLnByaW50bG4oICIjIyMjIyIgKSA7CisgICAgICAgIC8vIER1bXAgdGhlIHRpbWVyIGFuZCB0aW1lciBncm91cCBuYW1lcyB0byB0aGUgZmlsZSBpbiBudW1lcmljYWwgb3JkZXIKKyAgICAgICAgLy8gVGltZSBncm91cCBuYW1lcyBhcmUgbm90IHVzZWQsIGJ1dCB0aGlzIHdpbGwgYmUgY29tcGF0aWJsZQorICAgICAgICAvLyB3aXRoIHRoZSBsb2cgZXZlbnQgcHJvY2Vzc29yLgorICAgICAgICBmb3IgKGludCBjdHI9MDsgY3RyPHRmLm51bWJlck9mSWRzKCk7IGN0cisrKSB7CisgICAgICAgIENvbnRyb2xsYWJsZSBjb24gPSB0Zi5nZXRDb250cm9sbGFibGUoIGN0ciApIDsKKyAgICAgICAgcHMucHJpbnRsbiggIkJFR0lOICIgKyBjb24ubmFtZSgpICkgOworICAgICAgICBwcy5wcmludGxuKCAiRU5EICIgKyBjb24ubmFtZSgpICkgOworICAgICAgICB9CiAKLQkgICAgLy8gRHVtcCB0aGUgdGltZXIgaW5mbwotCSAgICBmb3IgKCBUaW1lckV2ZW50IGV2ZW50IDogbG9nICkgewotCQlpbnQgaWQgPSBldmVudC50aW1lcigpLmlkKCkgOwotCQlpZiAoZXZlbnQudHlwZSgpID09IFRpbWVyRXZlbnQuVGltZXJFdmVudFR5cGUuRU5URVIpCi0JCSAgICBpZCA9IDIqaWQgOwotCQllbHNlIC8vIEVYSVQgZXZlbnQKLQkJICAgIGlkID0gMippZCArIDEgOwotCQlwcy5wcmludGxuKCBpZCArICIgIiArIGV2ZW50LnRpbWUoKSApIDsKLQkgICAgfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCAiRXJyb3IgaW4gZHVtcGluZyAiICsgbG9nICsgIiB0byBmaWxlICIgKyBmaWxlCi0JCSsgIjogIiArIGV4YyApIDsKLQkgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpIDsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAocHMgIT0gbnVsbCkKLQkJcHMuY2xvc2UoKSA7Ci0JfQorICAgICAgICBwcy5wcmludGxuKCAiIyMjIyMiICkgOworCisgICAgICAgIC8vIER1bXAgdGhlIHRpbWVyIGluZm8KKyAgICAgICAgZm9yICggVGltZXJFdmVudCBldmVudCA6IGxvZyApIHsKKyAgICAgICAgaW50IGlkID0gZXZlbnQudGltZXIoKS5pZCgpIDsKKyAgICAgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBUaW1lckV2ZW50LlRpbWVyRXZlbnRUeXBlLkVOVEVSKQorICAgICAgICAgICAgaWQgPSAyKmlkIDsKKyAgICAgICAgZWxzZSAvLyBFWElUIGV2ZW50CisgICAgICAgICAgICBpZCA9IDIqaWQgKyAxIDsKKyAgICAgICAgcHMucHJpbnRsbiggaWQgKyAiICIgKyBldmVudC50aW1lKCkgKSA7CisgICAgICAgIH0KKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXhjKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkVycm9yIGluIGR1bXBpbmcgIiArIGxvZyArICIgdG8gZmlsZSAiICsgZmlsZQorICAgICAgICArICI6ICIgKyBleGMgKSA7CisgICAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKSA7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgIHBzLmNsb3NlKCkgOworICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBDb25uZWN0b3IgewotCXB1YmxpYyBTdHJpbmcgbmFtZSA7Ci0JcHVibGljIGxvbmcgY291bnQgOwotCXB1YmxpYyBkb3VibGUgbWluIDsKLQlwdWJsaWMgZG91YmxlIG1heCA7Ci0JcHVibGljIGRvdWJsZSBhdmVyYWdlIDsKLQlwdWJsaWMgZG91YmxlIHN0YW5kYXJkRGV2aWF0aW9uIDsKLSAgICAKLQlwdWJsaWMgQ29ubmVjdG9yKCBTdHJpbmcgbmFtZSwgbG9uZyBjb3VudCwgZG91YmxlIG1pbiwKLQkgICAgZG91YmxlIG1heCwgZG91YmxlIGF2ZXJhZ2UsIGRvdWJsZSBzdGFuZGFyZERldmlhdGlvbiApIHsKKyAgICBwdWJsaWMgU3RyaW5nIG5hbWUgOworICAgIHB1YmxpYyBsb25nIGNvdW50IDsKKyAgICBwdWJsaWMgZG91YmxlIG1pbiA7CisgICAgcHVibGljIGRvdWJsZSBtYXggOworICAgIHB1YmxpYyBkb3VibGUgYXZlcmFnZSA7CisgICAgcHVibGljIGRvdWJsZSBzdGFuZGFyZERldmlhdGlvbiA7CiAKLQkgICAgdGhpcy5uYW1lID0gbmFtZSA7Ci0JICAgIHRoaXMuY291bnQgPSBjb3VudCA7Ci0JICAgIHRoaXMubWluID0gbWluIDsKLQkgICAgdGhpcy5tYXggPSBtYXggOwotCSAgICB0aGlzLmF2ZXJhZ2UgPSBhdmVyYWdlIDsKLQkgICAgdGhpcy5zdGFuZGFyZERldmlhdGlvbiA9IHN0YW5kYXJkRGV2aWF0aW9uIDsKLQl9CisgICAgcHVibGljIENvbm5lY3RvciggU3RyaW5nIG5hbWUsIGxvbmcgY291bnQsIGRvdWJsZSBtaW4sCisgICAgICAgIGRvdWJsZSBtYXgsIGRvdWJsZSBhdmVyYWdlLCBkb3VibGUgc3RhbmRhcmREZXZpYXRpb24gKSB7CisKKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZSA7CisgICAgICAgIHRoaXMuY291bnQgPSBjb3VudCA7CisgICAgICAgIHRoaXMubWluID0gbWluIDsKKyAgICAgICAgdGhpcy5tYXggPSBtYXggOworICAgICAgICB0aGlzLmF2ZXJhZ2UgPSBhdmVyYWdlIDsKKyAgICAgICAgdGhpcy5zdGFuZGFyZERldmlhdGlvbiA9IHN0YW5kYXJkRGV2aWF0aW9uIDsKKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNvbmNhdCggU3RyaW5nW10gc3RycyApIHsKLQlTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKSA7Ci0JZm9yKCBTdHJpbmcgc3RyIDogc3RycyApIHsKLQkgICAgc2IuYXBwZW5kKCBzdHIgKSA7Ci0JICAgIHNiLmFwcGVuZCggJ1xuJyApIDsKLQl9Ci0JcmV0dXJuIHNiLnRvU3RyaW5nKCkgOworICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpIDsKKyAgICBmb3IoIFN0cmluZyBzdHIgOiBzdHJzICkgeworICAgICAgICBzYi5hcHBlbmQoIHN0ciApIDsKKyAgICAgICAgc2IuYXBwZW5kKCAnXG4nICkgOworICAgIH0KKyAgICByZXR1cm4gc2IudG9TdHJpbmcoKSA7CiAgICAgfQogCiAgICAgLyoqIFdyaXRlIHRoZSBUaW1lciBkYXRhIGluIHRoZSBNYXAgdG8gdGhlIG5hbWVkIGZpbGUgd2l0aCB0aGUgZ2l2ZW4KICAgICAgKiB0aXRsZS4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgd3JpdGVIdG1sVGFibGUoIE1hcDxUaW1lciwgU3RhdGlzdGljcz4gZGF0YSwKLQlTdHJpbmcgZm5hbWUsIFN0cmluZyB0aXRsZSApIHsKKyAgICBTdHJpbmcgZm5hbWUsIFN0cmluZyB0aXRsZSApIHsKIAotCS8vIG9wZW4gYSBmaWxlIGFuZCBhIHByaW50V3JpdGVyIGhlcmUKLQlQcmludFdyaXRlciBwdyA9IG51bGwgOwotCXRyeSB7Ci0JICAgIHB3ID0gbmV3IFByaW50V3JpdGVyKCBmbmFtZSApIDsKLSAgICAgICAgICAgIHB3LnByaW50bG4oIAorICAgIC8vIG9wZW4gYSBmaWxlIGFuZCBhIHByaW50V3JpdGVyIGhlcmUKKyAgICBQcmludFdyaXRlciBwdyA9IG51bGwgOworICAgIHRyeSB7CisgICAgICAgIHB3ID0gbmV3IFByaW50V3JpdGVyKCBmbmFtZSApIDsKKyAgICAgICAgICAgIHB3LnByaW50bG4oCiAgICAgICAgIjxodG1sPiIrCiAgICAgICAgIjxoZWFkPiIrCiAgICAgICAgIiAgPHRpdGxlPiIgKyB0aXRsZSArICI8L3RpdGxlPiIrCkBAIC0xMjksMjkgKzEyOSwyOSBAQAogICAgICAgICIgICAgICA8dGQ+c3RkIGRldmlhdGlvbjwvdGQ+IisKICAgICAgICAiICAgIDwvdHI+Iik7CiAKLQkgICBmb3IgKFRpbWVyIHRpbWVyIDogZGF0YS5rZXlTZXQoKSApIHsKLQkgICAgICAgU3RhdGlzdGljcyBzdGF0cyA9IGRhdGEuZ2V0KCB0aW1lciApIDsKLSAgICAgICAgICAgIHB3LnByaW50bG4oIAotCSIgICAgPHRyPiIrCi0JIiAgICAgIDx0ZD4iK3RpbWVyLm5hbWUoKSsiPC90ZD4iKwotCSIgICAgICA8dGQ+IitzdGF0cy5jb3VudCgpKyI8L3RkPiIrCi0JIiAgICAgIDx0ZD4iK3N0YXRzLm1pbigpKyI8L3RkPiIrCi0JIiAgICAgIDx0ZD4iK3N0YXRzLm1heCgpKyI8L3RkPiIrCi0JIiAgICAgIDx0ZD4iK3N0YXRzLmF2ZXJhZ2UoKSsiPC90ZD4iKwotCSIgICAgICA8dGQ+IitzdGF0cy5zdGFuZGFyZERldmlhdGlvbigpKyI8L3RkPiIrCi0JIiAgICA8L3RyPiIpOwotCSAgIH0KKyAgICAgICBmb3IgKFRpbWVyIHRpbWVyIDogZGF0YS5rZXlTZXQoKSApIHsKKyAgICAgICAgICAgU3RhdGlzdGljcyBzdGF0cyA9IGRhdGEuZ2V0KCB0aW1lciApIDsKKyAgICAgICAgICAgIHB3LnByaW50bG4oCisgICAgIiAgICA8dHI+IisKKyAgICAiICAgICAgPHRkPiIrdGltZXIubmFtZSgpKyI8L3RkPiIrCisgICAgIiAgICAgIDx0ZD4iK3N0YXRzLmNvdW50KCkrIjwvdGQ+IisKKyAgICAiICAgICAgPHRkPiIrc3RhdHMubWluKCkrIjwvdGQ+IisKKyAgICAiICAgICAgPHRkPiIrc3RhdHMubWF4KCkrIjwvdGQ+IisKKyAgICAiICAgICAgPHRkPiIrc3RhdHMuYXZlcmFnZSgpKyI8L3RkPiIrCisgICAgIiAgICAgIDx0ZD4iK3N0YXRzLnN0YW5kYXJkRGV2aWF0aW9uKCkrIjwvdGQ+IisKKyAgICAiICAgIDwvdHI+Iik7CisgICAgICAgfQogICAgICAgICAgICBwdy5wcmludGxuKAotICAgIAkiPC90YWJsZT4iKwotCSI8L2JvZHk+IisKLQkiPC9odG1sPiIpOworICAgICAgICAiPC90YWJsZT4iKworICAgICI8L2JvZHk+IisKKyAgICAiPC9odG1sPiIpOwogCi0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4YykgewotCSAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbiggZXhjICkgOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChwdyAhPSBudWxsKQotCQlwdy5jbG9zZSgpIDsKLQl9CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4YykgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbiggZXhjICkgOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChwdyAhPSBudWxsKQorICAgICAgICBwdy5jbG9zZSgpIDsKKyAgICB9CiAKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL3Byb3BlcnRpZXMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy9wcm9wZXJ0aWVzLnhtbAppbmRleCBkMDY3MDM5Li45MDAxNjZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL3Byb3BlcnRpZXMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvcHJvcGVydGllcy54bWwKQEAgLTM2LDExICszNiwxMSBAQAogCiA8dGFyZ2V0IG5hbWU9ImluaXQtY29tbW9uIiBkZXBlbmRzPSJzZXRUb29sUHJvcGVydHksc2V0UzFBU2NsYXNzUGF0aCI+CiA8IS0tIEFwcHNlcnZlciBzZXR1cCBwcm9wZXJ0aWVzIC0tPgotPGVjaG8gbWVzc2FnZT0iTG9hZGluZyBwcm9wcyBmcm9tIGZpbGUgJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzIiAKKzxlY2hvIG1lc3NhZ2U9IkxvYWRpbmcgcHJvcHMgZnJvbSBmaWxlICR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcyIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgPHByb3BlcnR5IG5hbWU9InBlIiB2YWx1ZT0iUGxhdGZvcm0gRWRpdGlvbiBvZiBTMUFTIi8+CiAKLSAgIDxwcm9wZXJ0eSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiLz4gICAKKyAgIDxwcm9wZXJ0eSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiLz4KICAgIDxlY2hvIG1lc3NhZ2U9ImFkbWluLmRvbWFpbiAke2FkbWluLmRvbWFpbn0iIGxldmVsPSJ2ZXJib3NlIi8+CiAgICA8ZWNobyBtZXNzYWdlPSJhZG1pbi51c2VyICR7YWRtaW4udXNlcn0iIGxldmVsPSJ2ZXJib3NlIi8+CiAgICA8ZWNobyBtZXNzYWdlPSJhZG1pbi5wb3J0ICR7YWRtaW4ucG9ydH0iIGxldmVsPSJ2ZXJib3NlIi8+CkBAIC04NSwyMSArODUsMjEgQEAKICAgICA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIiIC8+CiAKICAgICA8IS0tIFRlc3QgSGFybmVzIHByb3BlcnRpZXMgLS0+Ci0gICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkLmJhc2UuZGlyIiAKKyAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQuYmFzZS5kaXIiCiAgICAgICAgIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlIi8+Ci0gICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkLndlYmFwcHMuZGlyIiAKKyAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQud2ViYXBwcy5kaXIiCiAgICAgICAgIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvd2FycyIvPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgCisgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIgogICAgICAgICB2YWx1ZT0iJHtidWlsZC5iYXNlLmRpcn0vY2xhc3NlcyIvPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZC5hc3NlbWJsZS5kaXIiIAorICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZC5hc3NlbWJsZS5kaXIiCiAgICAgICAgIHZhbHVlPSIke2J1aWxkLmJhc2UuZGlyfS9hcmNoaXZlIi8+Ci0gICAgPHByb3BlcnR5IG5hbWU9InJlc3VsdHMuZGlyIiAKKyAgICA8cHJvcGVydHkgbmFtZT0icmVzdWx0cy5kaXIiCiAgICAgICAgIHZhbHVlPSIke2J1aWxkLmJhc2UuZGlyfS9yZXN1bHRzIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkLnMxYXN0ZXN0LmNsYXNzcGF0aCIKICAgICAgIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke3MxYXMuY2xhc3NwYXRofToke2RiLmNsYXNzcGF0aH06JHtEZXJieS5jbGFzc3BhdGh9Ii8+Ci0gICAgPHByb3BlcnR5IG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICA8cHJvcGVydHkgbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICB2YWx1ZT0iKiovKkxvY2FsKi5jbGFzcywqKi8qUmVtb3RlKi5jbGFzcywqKi8qSG9tZSouY2xhc3MsKiovKkJlYW4qLmNsYXNzIiAvPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgdmFsdWU9IioqLypMb2NhbCouY2xhc3MsKiovKlJlbW90ZSouY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ3ZWJjbGllbnQud2FyLmZpbGVzIgogICAgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CkBAIC0xMzcsMjAgKzEzNywyMCBAQAogICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuUzFBU19IT01FfS9saWIiIGluY2x1ZGVzPSIqLmphciIvPgogICAgIDwhLS0gZmlsZXNldCBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vaW1xL2xpYiIgaW5jbHVkZXM9IiouamFyIi8gLS0+CiAgIDwvcGF0aD4KLSAgPHBhdGhjb252ZXJ0IHBhdGhzZXA9IjoiIAotICAgIHByb3BlcnR5PSJzMWFzLmNsYXNzcGF0aCIgCisgIDxwYXRoY29udmVydCBwYXRoc2VwPSI6IgorICAgIHByb3BlcnR5PSJzMWFzLmNsYXNzcGF0aCIKICAgICByZWZpZD0iczFhc19jbGFzc3BhdGhfamFycyIvPgogPC90YXJnZXQ+CiAKLTx0YXJnZXQgbmFtZT0ic2V0VG9vbFByb3BlcnR5IiAKKzx0YXJnZXQgbmFtZT0ic2V0VG9vbFByb3BlcnR5IgogICBkZXBlbmRzPSJzZXRPU0NvbmRpdGlvbnMsc2V0VG9vbFdpbixzZXRUb29sVW5peCI+CiA8L3RhcmdldD4KIAogICAgIDwhLS0KLSAgICBUaGlzIHdhcyBuZWVkZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgY2FuIAotICAgIGRpZmZlcmVudGlhdGUgYmV0d2VlbiAuZXhlLy5iYXQgZm9yIHdpbmRvd3MgYW5kIC5zaCBmb3Igc29sYXJpcy4gCisgICAgVGhpcyB3YXMgbmVlZGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbgorICAgIGRpZmZlcmVudGlhdGUgYmV0d2VlbiAuZXhlLy5iYXQgZm9yIHdpbmRvd3MgYW5kIC5zaCBmb3Igc29sYXJpcy4KICAgICAtLT4KLTx0YXJnZXQgbmFtZT0ic2V0T1NDb25kaXRpb25zIj4gIAorPHRhcmdldCBuYW1lPSJzZXRPU0NvbmRpdGlvbnMiPgogICA8Y29uZGl0aW9uIHByb3BlcnR5PSJpc1VuaXgiPgogICAgIDxvcyBmYW1pbHk9InVuaXgiLz4KICAgPC9jb25kaXRpb24+CkBAIC0xNjAsMTcgKzE2MCwxNyBAQAogICA8L2NvbmRpdGlvbj4KIDwvdGFyZ2V0PgogCi08dGFyZ2V0IG5hbWU9InNldFRvb2xXaW4iIGlmPSJpc1dpbmRvd3MiPiAgCis8dGFyZ2V0IG5hbWU9InNldFRvb2xXaW4iIGlmPSJpc1dpbmRvd3MiPgogICA8cHJvcGVydHkgbmFtZT0iQVBQQ0xJRU5UIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXBwY2xpZW50LmJhdCIvPgogICA8cHJvcGVydHkgbmFtZT0iQVNBRE1JTiIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2FzYWRtaW4uYmF0Ii8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJBU0FOVCIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2FzYW50LmJhdCIvPgotICA8cHJvcGVydHkgbmFtZT0iQ0FQVFVSRVNDSEVNQSIgCisgIDxwcm9wZXJ0eSBuYW1lPSJDQVBUVVJFU0NIRU1BIgogICAgICAgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2NhcHR1cmUtc2NoZW1hLmJhdCIvPgogICA8cHJvcGVydHkgbmFtZT0iQ0hFQ0tQQVRDSCIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2NoZWNrcGF0Y2guYmF0Ii8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJJTlNUQUxMUEFUQ0giIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9pbnN0YWxscGF0Y2guYmF0Ii8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJKU1BDIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vanNwYy5iYXQiLz4KICAgPHByb3BlcnR5IG5hbWU9IkxJU1RQQVRDSCIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2xpc3RwYXRjaC5iYXQiLz4KLSAgPHByb3BlcnR5IG5hbWU9IlBBQ0tBR0UtQVBQQ0xJRU5UIiAKKyAgPHByb3BlcnR5IG5hbWU9IlBBQ0tBR0UtQVBQQ0xJRU5UIgogICAgICAgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3BhY2thZ2UtYXBwY2xpZW50LmJhdCIvPgogICA8cHJvcGVydHkgbmFtZT0iVkVSSUZJRVIiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi92ZXJpZmllci5iYXQiLz4KICAgPHByb3BlcnR5IG5hbWU9IlJNSUMiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2pkay9iaW4vcm1pYy5leGUiLz4KQEAgLTE3OCwxNSArMTc4LDE1IEBACiAKICAgPHByb3BlcnR5IG5hbWU9IldTQ09NUElMRSIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzY29tcGlsZS5iYXQiLz4KICAgPHByb3BlcnR5IG5hbWU9IldTSU1QT1JUIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3NpbXBvcnQuYmF0Ii8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJwYi5zdGFydC5zZXJ2ZXIiIAorICA8cHJvcGVydHkgbmFtZT0icGIuc3RhcnQuc2VydmVyIgogICAgICAgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vcG9pbnRiYXNlL3NlcnZlci9TdGFydFNlcnZlci5iYXQiLz4KLSAgPHByb3BlcnR5IG5hbWU9InBiLnN0YXJ0LnNlcnZlcjEiIAorICA8cHJvcGVydHkgbmFtZT0icGIuc3RhcnQuc2VydmVyMSIKICAgICAgIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L3BvaW50YmFzZS9zZXJ2ZXIvU3RhcnRTZXJ2ZXIxLmJhdCIvPgogICA8cHJvcGVydHkgbmFtZT0iSU1RREJNR1IiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2ltcS9iaW4vaW1xZGJtZ3IuYmF0Ii8+CiAgPHByb3BlcnR5IG5hbWU9ImxkLmxpYnJhcnkucGF0aCIgbG9jYXRpb249IiR7ZW52LlMxQVNfSE9NRX0vbGliOyR7ZW52LlMxQVNfSE9NRX0vYmluIi8+CiA8L3RhcmdldD4KIAotPHRhcmdldCBuYW1lPSJzZXRUb29sVW5peCIgaWY9ImlzVW5peCI+ICAKKzx0YXJnZXQgbmFtZT0ic2V0VG9vbFVuaXgiIGlmPSJpc1VuaXgiPgogICA8cHJvcGVydHkgbmFtZT0iQVBQQ0xJRU5UIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXBwY2xpZW50Ii8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJBU0FETUlOIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXNhZG1pbiIvPgogICA8cHJvcGVydHkgbmFtZT0iQVNBTlQiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hc2FudCIvPgpAQCAtMTk1LDIzICsxOTUsMjMgQEAKICAgPHByb3BlcnR5IG5hbWU9IklOU1RBTExQQVRDSCIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2luc3RhbGxwYXRjaCIvPgogICA8cHJvcGVydHkgbmFtZT0iSlNQQyIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2pzcGMiLz4KICAgPHByb3BlcnR5IG5hbWU9IkxJU1RQQVRDSCIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2xpc3RwYXRjaCIvPgotICA8cHJvcGVydHkgbmFtZT0iUEFDS0FHRS1BUFBDTElFTlQiIAorICA8cHJvcGVydHkgbmFtZT0iUEFDS0FHRS1BUFBDTElFTlQiCiAgICAgICB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vcGFja2FnZS1hcHBjbGllbnQiLz4KICAgPHByb3BlcnR5IG5hbWU9IlZFUklGSUVSIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vdmVyaWZpZXIiLz4KICAgPHByb3BlcnR5IG5hbWU9IlJNSUMiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2pkay9iaW4vcm1pYyIvPgogICA8cHJvcGVydHkgbmFtZT0iVE5BTUVTRVJWIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9qZGsvYmluL3RuYW1lc2VydiIvPgogICA8cHJvcGVydHkgbmFtZT0iV1NDT01QSUxFIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3Njb21waWxlIi8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJXU0lNUE9SVCIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzaW1wb3J0Ii8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJwYi5zdGFydC5zZXJ2ZXIiIAorICA8cHJvcGVydHkgbmFtZT0icGIuc3RhcnQuc2VydmVyIgogICAgICAgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vcG9pbnRiYXNlL3NlcnZlci9TdGFydFNlcnZlciIvPgotICA8cHJvcGVydHkgbmFtZT0icGIuc3RhcnQuc2VydmVyMSIgCisgIDxwcm9wZXJ0eSBuYW1lPSJwYi5zdGFydC5zZXJ2ZXIxIgogICAgICAgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vcG9pbnRiYXNlL3NlcnZlci9TdGFydFNlcnZlcjEiLz4KICAgPHByb3BlcnR5IG5hbWU9IklNUURCTUdSIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9pbXEvYmluL2ltcWRibWdyIi8+CiAgPHByb3BlcnR5IG5hbWU9ImxkLmxpYnJhcnkucGF0aCIgbG9jYXRpb249IiR7ZW52LlMxQVNfSE9NRX0vbGliOiR7ZW52LlMxQVNfSE9NRX0vYmluIi8+CiA8L3RhcmdldD4KIAogPCEtLQotdGhlIGZpeEZpbGVzIHRhcmdldCByZW1vdmVzIGFsbCBeTSBjaGFyZWN0YXJzIGZyb20gdGhlIGVuZCBvZiAKK3RoZSBmaXhGaWxlcyB0YXJnZXQgcmVtb3ZlcyBhbGwgXk0gY2hhcmVjdGFycyBmcm9tIHRoZSBlbmQgb2YKIGxpbmVzIG9mIE1BTklGRVNULk1GIGZpbGVzIHNpbmNlIHRoZXkgYXJlIHZlcnkgc2Vuc2l0aXZlIHRvIGl0LgogLS0+CiA8dGFyZ2V0IG5hbWU9ImZpeEZpbGVzIiBkZXBlbmRzPSJzZXRPU0NvbmRpdGlvbnMiID4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvd2ViL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvd2ViL2J1aWxkLnhtbAppbmRleCBiYzVmOGFlLi42NjY4NzI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL3dlYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy93ZWIvYnVpbGQueG1sCkBAIC01Miw4ICs1Miw4IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQkgIDxlY2hvPlVzYWdlOiBhbnQgYWxsIAotCSAgPC9lY2hvPgorICAgICAgPGVjaG8+VXNhZ2U6IGFudCBhbGwKKyAgICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIvYnVpbGQucHJvcGVydGllcwppbmRleCA1NTIxMjM4Li45NjQ1YjQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibXktbW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0ibXktYXBwLW5hbWUiIHZhbHVlPSIke215LW1vZHVsZX0tanNwLXJlc291cmNlLWluamVjdGlvbi10YWctaGFuZGxlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci9idWlsZC54bWwKaW5kZXggOWQ0NzFiMC4uZWE1NjliMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIvYnVpbGQueG1sCkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLWJ1aWxkLXdhciI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgIDwvdGFyZ2V0PiAKKyAgIDwvdGFyZ2V0PgogCiAgICA8IS0tIGRlcGxveSB3YXIgZmlsZSAtLT4KICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC0xMDQsNyArMTA0LDcgQEAKICAgIDwhLS0gVW5kZXBsb3kgdGhlIHRlc3QgYXBwIC0tPgogICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi11bmRlcGxveS13YXIiLz4KLSAgIDwvdGFyZ2V0PiAgIAorICAgPC90YXJnZXQ+CiAKICAgIDwhLS0gQ2xlYW51cCAtLT4KICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci90ZXN0cy9XZWJUZXN0TkcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci90ZXN0cy9XZWJUZXN0TkcuamF2YQppbmRleCA5ZjE0ZjBiLi5iNTJmNTc4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIvdGVzdHMvV2ViVGVzdE5HLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyL3Rlc3RzL1dlYlRlc3RORy5qYXZhCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgICBsYXN0TGluZSA9IGxpbmU7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhsYXN0TGluZSwgRVhQRUNURURfUkVTUE9OU0UpOwogCiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGExYzBhODIuLjhiYjkzZjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvd2ViL3Nlc3Npb25JZFVybFJld3JpdGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL3dlYi9zZXNzaW9uSWRVcmxSZXdyaXRlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im15LW1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9Im15LWFwcC1uYW1lIiB2YWx1ZT0iJHtteS1tb2R1bGV9LXNlc3Npb24taWQtdXJsLXJld3JpdGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvd2ViL3Nlc3Npb25JZFVybFJld3JpdGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS9idWlsZC54bWwKaW5kZXggZjc0ZGY3YS4uNWI0MWMwMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS9idWlsZC54bWwKQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLWJ1aWxkLXdhciI+CiAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICAgPC9hbnRjYWxsPgotICAgICA8L3RhcmdldD4gCisgICAgIDwvdGFyZ2V0PgogCiAgICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi1kZXBsb3ktd2FyIi8+CkBAIC05OCw5ICs5OCw5IEBACiAgICAgICA8ZGVsZXRlIGRpcj0idGVzdC1yZXBvcnQiLz4KICAgICA8L3RhcmdldD4KIAotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi11bmRlcGxveS13YXIiLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS90ZXN0cy9XZWJUZXN0TkcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzTkcvd2ViL3Nlc3Npb25JZFVybFJld3JpdGUvdGVzdHMvV2ViVGVzdE5HLmphdmEKaW5kZXggOTBkOWEzNi4uY2Q1OGYxZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHNORy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS90ZXN0cy9XZWJUZXN0TkcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0c05HL3dlYi9zZXNzaW9uSWRVcmxSZXdyaXRlL3Rlc3RzL1dlYlRlc3RORy5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXQpOwogICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwogCi0JYXNzZXJ0IHJlc3BvbnNlQ29kZSA9PSAyMDA7CisgICAgYXNzZXJ0IHJlc3BvbnNlQ29kZSA9PSAyMDA7CiAKICAgICAgICAgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihjb25uLmdldElucHV0U3RyZWFtKCkpKTsKICAgICAgICAgd2hpbGUgKChsaW5lID0gYmlzLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2xpYi9lamJ0aW1lcl9kZXJieS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9saWIvZWpidGltZXJfZGVyYnkuc3FsCmluZGV4IGE0YTU0OTUuLmRlNTU1ODMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL2xpYi9lamJ0aW1lcl9kZXJieS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvbGliL2VqYnRpbWVyX2RlcmJ5LnNxbApAQCAtMiw4ICsyLDggQEAKIAogY3JlYXRlIHRhYmxlIEVKQl9fVElNRVJfX1RCTCAoCiBDUkVBVElPTlRJTUVSQVcgQklHSU5UIE5PVCBOVUxMLAotQkxPQiAgQkxPQigyRyksIAotVElNRVJJRCAgICAgICAgICAgICAgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLCAKK0JMT0IgIEJMT0IoMkcpLAorVElNRVJJRCAgICAgICAgICAgICAgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAogQ09OVEFJTkVSSUQgICAgICAgICAgQklHSU5UICAgICAgIE5PVCBOVUxMLAogT1dORVJJRCAgICAgICAgICAgICAgVkFSQ0hBUigyNTUpLAogU1RBVEUgICAgICAgICAgICAgICAgSU5URUdFUiAgICAgIE5PVCBOVUxMLApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvcnVuLnNoIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvcnVuLnNoCmluZGV4IDViMzU2N2IuLmQxMjdmYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3J1bi5zaAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9ydW4uc2gKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgIGVsaWYgWyAiJDEiID0gImFsbCIgXTsgdGhlbgogICAgICAgICBURVNUX1RBUkdFVD0iYWxsIjsKICAgICBlbHNlCi0gICAgICAgIHVzYWdlOyAKKyAgICAgICAgdXNhZ2U7CiAgICAgZmkKICAgICBlY2hvICJncmFudGluZyBwZXJtaXNzaW9ucy4uLiI7CiAgICAgZWNobyAiZ3JhbnQgY29kZUJhc2UgXCJmaWxlOiR7QVBTX0hPTUV9Ly1cIiB7cGVybWlzc2lvbiBqYXZhLnNlY3VyaXR5LkFsbFBlcm1pc3Npb247fTsiID4+ICRTMUFTX0hPTUUvbGliL2FwcGNsaWVudC9jbGllbnQucG9saWN5OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYWRtaW4tZ3VpL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9hZG1pbi1ndWkvYnVpbGQucHJvcGVydGllcwppbmRleCA0ZTQ1ZGJiLi4zOTJmODQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9hZG1pbi1ndWkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9hZG1pbi1ndWkvYnVpbGQucHJvcGVydGllcwpAQCAtMTQsNyArMTQsNyBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKICMKIAotIAorCiAKIGFkbWluLmRvbWFpbj1kb21haW4xCiBhZG1pbi5kb21haW4uZGlyPSR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYWRtaW4tZ3VpL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2FkbWluLWd1aS9idWlsZC54bWwKaW5kZXggMDljY2UxZS4uOTdmMDYwNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYWRtaW4tZ3VpL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9hZG1pbi1ndWkvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAKICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsYXNzIiB2YWx1ZT0iQWRtaW5HVUlUZXN0IiAvPgotICAgIDwhLS0gdW5jb21tZW50IHRoaXMsIHdoZW4geW91IHdhbnQgdG8gcnVuIHN0YW5kYWxvbmUgCisgICAgPCEtLSB1bmNvbW1lbnQgdGhpcywgd2hlbiB5b3Ugd2FudCB0byBydW4gc3RhbmRhbG9uZQogICAgIDxwcm9wZXJ0eSBmaWxlPSIuL2J1aWxkLnByb3BlcnRpZXMiIC8+CiAgICAgLS0+CiAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzcGF0aCIgdmFsdWU9IiIgLz4KQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgICAgZGVidWc9Im9uIiBkZXByZWNhdGlvbj0ib2ZmIiBvcHRpbWl6ZT0ib2ZmIj4KICAgICAgICAgIDxjbGFzc3BhdGg+CiAgICAgICAgICAgICAgPHBhdGggcmVmaWQ9ImJhc2UuY2xhc3NwYXRoIiAvPgotCSA8L2NsYXNzcGF0aD4KKyAgICAgPC9jbGFzc3BhdGg+CiAgICAgPC9qYXZhYz4KIDwvdGFyZ2V0PgogCkBAIC04NywxOCArODcsMTggQEAKIAogPHRhcmdldCBuYW1lPSJydW4tdGVzdCIgZGVwZW5kcz0iY29tcGlsZSwgZ2V0LXZlcnNpb24tY29tbW9uLCBpbml0LWNvbW1vbiI+CiA8IS0tIE5vdCBuZWVkZWQgYW55bW9yZSwgSlNTRS5qYXZhIGlzIGRvaW5nIHRoaXMKLQk8YW50Y2FsbCB0YXJnZXQ9ImdldC1jZXJ0ZGItdG8tamtzIiAvPgotCS0tPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZ2V0LWNlcnRkYi10by1qa3MiIC8+CisgICAgLS0+CiAgICAgPGphdmEgY2xhc3NuYW1lPSIke3Rlc3QuY2xhc3N9IiBmb3JrPSJ5ZXMiID4KLSAgICAJIDxzeXNwcm9wZXJ0eSBrZXk9IkFETUlOX0hPU1QiIHZhbHVlPSIke2FkbWluLmhvc3R9IiAvPgotICAgIAkgPHN5c3Byb3BlcnR5IGtleT0iQURNSU5fUE9SVCIgdmFsdWU9IiR7YWRtaW4ucG9ydH0iIC8+Ci0gICAgCSA8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9QQVNTV09SRCIgdmFsdWU9IiR7YWRtaW4ucGFzc3dvcmR9IiAvPgotICAgIAkgPHN5c3Byb3BlcnR5IGtleT0iQURNSU5fVVNFUiIgdmFsdWU9IiR7YWRtaW4udXNlcn0iIC8+Ci0gIAkgPCEtLQotICAgICAgIAkgPHN5c3Byb3BlcnR5IGtleT0iSVNfRUUiIHZhbHVlPSJwZSIgLz4KLSAgICAJIDxzeXNwcm9wZXJ0eSBrZXk9ImphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZSIgdmFsdWU9Ii4vY2VydGRiLmprcyIgLz4KLSAgICAJIDxzeXNwcm9wZXJ0eSBrZXk9ImphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZVBhc3N3b3JkIiB2YWx1ZT0iJHtzc2wucGFzc3dvcmR9IiAvPgotCSAtLT4KKyAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9IkFETUlOX0hPU1QiIHZhbHVlPSIke2FkbWluLmhvc3R9IiAvPgorICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0iQURNSU5fUE9SVCIgdmFsdWU9IiR7YWRtaW4ucG9ydH0iIC8+CisgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJBRE1JTl9QQVNTV09SRCIgdmFsdWU9IiR7YWRtaW4ucGFzc3dvcmR9IiAvPgorICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0iQURNSU5fVVNFUiIgdmFsdWU9IiR7YWRtaW4udXNlcn0iIC8+CisgICAgICAgPCEtLQorICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0iSVNfRUUiIHZhbHVlPSJwZSIgLz4KKyAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9ImphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZSIgdmFsdWU9Ii4vY2VydGRiLmprcyIgLz4KKyAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9ImphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZVBhc3N3b3JkIiB2YWx1ZT0iJHtzc2wucGFzc3dvcmR9IiAvPgorICAgICAtLT4KICAgICAgICAgIDxjbGFzc3BhdGg+CiAgICAgICAgICAgICAgPHBhdGggcmVmaWQ9ImJhc2UuY2xhc3NwYXRoIiAvPgogICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIC8+CkBAIC0xMTIsOCArMTEyLDggQEAKIDwhLS0gIEdlbmVyYXRlIHRydXN0c3RvcmUgZm9yIGVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+CiA8IS0tICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAtLT4KIDx0YXJnZXQgbmFtZT0iaW1wb3J0LWNlcnQtamtzIiA+Ci0JPGVjaG8gbWVzc2FnZT0iSW5zdGFsbGluZyBjZXJ0aWZpY2F0ZSBpbiAke2tleXN0b3JlLmZpbGV9IC4uLiIvPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LkpBVkFfSE9NRX0vYmluL2tleXRvb2wiPgorICAgIDxlY2hvIG1lc3NhZ2U9Ikluc3RhbGxpbmcgY2VydGlmaWNhdGUgaW4gJHtrZXlzdG9yZS5maWxlfSAuLi4iLz4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5KQVZBX0hPTUV9L2Jpbi9rZXl0b29sIj4KICAgICAgICAgPGFyZyB2YWx1ZT0iLWltcG9ydCIvPgogICAgICAgICA8YXJnIHZhbHVlPSItbm9wcm9tcHQiLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iLXRydXN0Y2FjZXJ0cyIvPgpAQCAtMTMwLDE0ICsxMzAsMTQgQEAKIAogPCEtLSBHZXQgY2VydGlmaWNhdGUgZnJvbSBOU1MgZGIgdG8gSktTIGZvcm1hdCAtLT4KIDx0YXJnZXQgbmFtZT0iZ2V0LWNlcnRkYi10by1qa3MiIGlmPSJlZSI+Ci0JPGVjaG8gbWVzc2FnZT0iSW5zdGFsbGluZyBjZXJ0aWZpY2F0ZSBpbiAke2VlfSAuLi4iLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJJbnN0YWxsaW5nIGNlcnRpZmljYXRlIGluICR7ZWV9IC4uLiIvPgogICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvY2VydHV0aWwiIG91dHB1dD0iLi9jZXJ0ZGIucmZjIj4KICAgICAgICAgPGVudiBrZXk9IkxEX0xJQlJBUllfUEFUSCIgcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIiLz4KICAgICAgICAgPGFyZyBsaW5lPSItTCAtbiAke2NlcnQubmlja25hbWV9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iLWQgJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnIC1hIi8+CiAgICAgICA8L2V4ZWM+CiAgICAgICA8Y29uY2F0PgotICAgIAk8ZmlsZWxpc3QgZGlyPSIuIiBmaWxlcz0iY2VydGRiLnJmYyIvPgorICAgICAgICA8ZmlsZWxpc3QgZGlyPSIuIiBmaWxlcz0iY2VydGRiLnJmYyIvPgogICAgICAgPC9jb25jYXQ+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImltcG9ydC1jZXJ0LWprcyI+CiAgICAgICAgICA8cGFyYW0gbmFtZT0iY2VydC5hbGlhcyIgdmFsdWU9IiR7Y2VydC5uaWNrbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2FkbWluLWd1aS9zcmMvQWRtaW5HVUlUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9hZG1pbi1ndWkvc3JjL0FkbWluR1VJVGVzdC5qYXZhCmluZGV4IDkwYmNlOGUuLmM4ZmYwY2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2FkbWluLWd1aS9zcmMvQWRtaW5HVUlUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYWRtaW4tZ3VpL3NyYy9BZG1pbkdVSVRlc3QuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCiBwdWJsaWMgY2xhc3MgQWRtaW5HVUlUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGhvc3QgPSBVdGlsLmdldEFkbWluSG9zdCgpOwogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIHBvcnQgPSBVdGlsLmdldEFkbWluUG9ydCgpOwogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIHVzZXIgPSBVdGlsLmdldEFkbWluVXNlcigpOwpAQCAtMzksNyArMzksNyBAQAogICAgIHsiSG9tZSBQYWdlIFRlc3QgICAgICAgICA6ICIsICIifSwKICAgICB7IlByb3BlcnR5U2hlZXQgUGFnZSBUZXN0OiAiLCAiIn0sCiAgICAgeyJUYWJsZVBhZ2UgVGVzdCAgICAgICAgIDogIiwgIiJ9fTsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmcgYXJnc1tdICkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgQWRtaW5HVUlUZXN0IHRlc3QgPSBuZXcgQWRtaW5HVUlUZXN0KCk7CkBAIC00OCw3ICs0OCw3IEBACiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBBZG1pbkdVSVRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgaWYoaG9zdCA9PSBudWxsIHx8IHBvcnQgPT0gbnVsbCkgewogICAgICAgICAgICAgVVJMID0gImh0dHA6Ly9sb2NhbGhvc3Q6NDg0OCI7CkBAIC02Nyw5ICs2Nyw5IEBACiAgICAgICAgIHNyID0gbmV3IFdlYkNvbnZlcnNhdGlvbiggKTsKICAgICAgICAgc3RhdHVzID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogICAgICAgICBzdGF0dXMuYWRkRGVzY3JpcHRpb24oIlRlc3RpbmcgYWRtaW5HVUkuLiIpOwotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBydW5UZXN0KCkgewogICAgICAgICBIdHRwVW5pdE9wdGlvbnMuc2V0U2NyaXB0aW5nRW5hYmxlZChmYWxzZSk7CiAgICAgICAgIHRlc3RMb2dpblBhZ2UoKTsKQEAgLTc4LDE3ICs3OCwxNyBAQAogICAgICAgICB0ZXN0UHJvcGVydHlTaGVldFBhZ2UoKTsKICAgICAgICAgdGVzdFRhYmxlUGFnZSgpOwogICAgICAgICBwcmludFN1bW1hcnkoKTsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgdGVzdExvZ2luUGFnZSgpICB7CiAgICAgICAgIFN0cmluZyBsb2dpblBhZ2UgPSAiL2luZGV4LmpzZiI7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBXZWJSZXNwb25zZSBjbGllbnQgPSBzci5nZXRSZXNwb25zZShVUkwrbG9naW5QYWdlKTsKICAgICAgICAgICAgIGNsaWVudCA9IHNyLmdldFJlc3BvbnNlKFVSTCtsb2dpblBhZ2UpOwogICAgICAgICAgICAgU3RyaW5nIHMgPSBjbGllbnQgIT0gbnVsbCA/IGNsaWVudC5nZXRUZXh0KCkgOiBudWxsOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKHMgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGlmKChzLmluZGV4T2YoIkNvcHlyaWdodCIpID49IDApICYmIChzLmluZGV4T2YoImpfdXNlcm5hbWUiKSA+PSAwKSkgewogICAgICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKCJhZG1pbi1ndWkgbG9naW5QYWdlOiIsIHN0YXR1cy5QQVNTKTsKQEAgLTExMCwxNSArMTEwLDE1IEBACiAgICAgICAgICAgICBmYWlsKys7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCB0ZXN0SG9tZVBhZ2UoKSB7CiAgICAgICAgIFN0cmluZyBob21lUGFnZSA9ICIvY29tbW9uVGFzay5qc2YiOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgV2ViUmVzcG9uc2UgY2xpZW50ID0gc3IuZ2V0UmVzcG9uc2UoVVJMK2hvbWVQYWdlKTsKICAgICAgICAgICAgIFN0cmluZyBzID0gY2xpZW50ICE9IG51bGwgPyBjbGllbnQuZ2V0VGV4dCgpIDogbnVsbDsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZihzICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBpZigocy5pbmRleE9mKCJEZXBsb3ltZW50IikgPj0gMCkgJiYgKHMuaW5kZXhPZigiTW9uaXRvcmluZyIpID49IDApKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoImFkbWluLWd1aSBob21lUGFnZToiLCBzdGF0dXMuUEFTUyk7CkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGF1dGhvcml6ZSgpICB7CiAgICAgICAgIFN0cmluZyBsb2dpblBhZ2UgPSAiL2luZGV4LmpzZiI7CiAgICAgICAgIHRyeSB7CkBAIC0xNTUsMTQgKzE1NSwxNCBAQAogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgdGVzdFByb3BlcnR5U2hlZXRQYWdlKCkgIHsKICAgICAgICAgU3RyaW5nIHByb3BlcnR5UGFnZSA9ICIvY29uZmlndXJhdGlvbi90cmFuc2FjdGlvblNlcnZpY2UuanNmP2NvbmZpZ05hbWU9c2VydmVyLWNvbmZpZyI7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBXZWJSZXNwb25zZSBjbGllbnQgPSBzci5nZXRSZXNwb25zZShVUkwrcHJvcGVydHlQYWdlKTsKICAgICAgICAgICAgIFN0cmluZyBzID0gY2xpZW50ICE9IG51bGwgPyBjbGllbnQuZ2V0VGV4dCgpIDogbnVsbDsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZihzICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBpZigocy5pbmRleE9mKCJ0cmFuc2FjdGlvbiBzZXJ2aWNlIHNldHRpbmdzIikgPj0gMCkgJiYgKHMuaW5kZXhPZigiSGV1cmlzdGljIikgPj0gMCkpIHsKICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cygiYWRtaW4tZ3VpIHByb3BlcnR5c2hlZXRQYWdlOiIsIHN0YXR1cy5QQVNTKTsKQEAgLTE4NSwxNCArMTg1LDE0IEBACiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCB0ZXN0VGFibGVQYWdlKCkgewogICAgICAgICBTdHJpbmcgdGFibGVQYWdlID0gIi9hcHBsaWNhdGlvbnMvd2ViQXBwbGljYXRpb25zLmpzZiI7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBXZWJSZXNwb25zZSBjbGllbnQgPSBzci5nZXRSZXNwb25zZShVUkwrdGFibGVQYWdlKTsKICAgICAgICAgICAgIFN0cmluZyBzID0gY2xpZW50ICE9IG51bGwgPyBjbGllbnQuZ2V0VGV4dCgpIDogbnVsbDsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZihzICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBpZigocy5pbmRleE9mKCJkZXBsb3lCdXR0b24iKSA+PSAwKSAmJiAocy5pbmRleE9mKCJEZXBsb3llZCIpID49IDApKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoImFkbWluLWd1aSB0YWJsZVBhZ2U6Iiwgc3RhdHVzLlBBU1MpOwpAQCAtMjI4LDUgKzIyOCw1IEBACiAgICAgICAgIH0KICAgICAgICAgc3RhdHVzLnByaW50U3VtbWFyeSgiYWRtaW4tZ3VpSUQiKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2FkbWluLWd1aS9zcmMvdXRpbC9KU1NFLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9hZG1pbi1ndWkvc3JjL3V0aWwvSlNTRS5qYXZhCmluZGV4IDk1NTU0MGMuLmQ2ZTI1YWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2FkbWluLWd1aS9zcmMvdXRpbC9KU1NFLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYWRtaW4tZ3VpL3NyYy91dGlsL0pTU0UuamF2YQpAQCAtOTcsMTAgKzk3LDEwIEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQWNjZXB0QW55SG9zdE5hbWUgaW1wbGVtZW50cyBIb3N0bmFtZVZlcmlmaWVyewotCQlwdWJsaWMgYm9vbGVhbiB2ZXJpZnkoU3RyaW5nIHMsIFNTTFNlc3Npb24gc3NsKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0KKyAgICAgICAgcHVibGljIGJvb2xlYW4gdmVyaWZ5KFN0cmluZyBzLCBTU0xTZXNzaW9uIHNzbCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CiAKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYWRtaW4tZ3VpL3NyYy91dGlsL1V0aWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2FkbWluLWd1aS9zcmMvdXRpbC9VdGlsLmphdmEKaW5kZXggNjNmZTVhZi4uYmM0MjljOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYWRtaW4tZ3VpL3NyYy91dGlsL1V0aWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9hZG1pbi1ndWkvc3JjL3V0aWwvVXRpbC5qYXZhCkBAIC0yNywzMSArMjcsMzEgQEAKICAqLwogcHVibGljIGNsYXNzIFV0aWwgewogCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERBU19QT1JUOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVNfSE9TVDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQURNSU5fVVNFUjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQURNSU5fUEFTU1dEOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTlNUQUxMX1RZUEU7Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBJU19FRTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFTX1BPUlQ7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERBU19IT1NUOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBRE1JTl9VU0VSOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBRE1JTl9QQVNTV0Q7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElOU1RBTExfVFlQRTsKKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIElTX0VFOwogCi0Jc3RhdGljIHsKLQkJREFTX0hPU1QgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIkFETUlOX0hPU1QiLCAibG9jYWxob3N0Iik7Ci0JCURBU19QT1JUID0gU3lzdGVtLmdldFByb3BlcnR5KCJBRE1JTl9QT1JUIiwgIjQ4NDkiKTsKLQkJQURNSU5fVVNFUiA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiQURNSU5fVVNFUiIsICJhZG1pbiIpOwotCQlBRE1JTl9QQVNTV0QgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIkFETUlOX1BBU1NXT1JEIiwgImFkbWluYWRtaW4iKTsKLQkJdHJ5IHsKLQkJCUlTX0VFID0gTmV0VXRpbHMuaXNTZWN1cmVQb3J0KERBU19IT1NULCBJbnRlZ2VyLnBhcnNlSW50KERBU19QT1JUKSk7Ci0JCX0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JCQkvL2RlZmF1bHQgbWFrZSBpdCBQRS4gU3F1ZWxjaCBpdCwgYW5kIGxldCB0aGUgY29ubmVjdGlvbiBoYW5kbGUgdGhpcwotCQkJSVNfRUU9ZmFsc2U7Ci0JCX0KKyAgICBzdGF0aWMgeworICAgICAgICBEQVNfSE9TVCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiQURNSU5fSE9TVCIsICJsb2NhbGhvc3QiKTsKKyAgICAgICAgREFTX1BPUlQgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIkFETUlOX1BPUlQiLCAiNDg0OSIpOworICAgICAgICBBRE1JTl9VU0VSID0gU3lzdGVtLmdldFByb3BlcnR5KCJBRE1JTl9VU0VSIiwgImFkbWluIik7CisgICAgICAgIEFETUlOX1BBU1NXRCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiQURNSU5fUEFTU1dPUkQiLCAiYWRtaW5hZG1pbiIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgSVNfRUUgPSBOZXRVdGlscy5pc1NlY3VyZVBvcnQoREFTX0hPU1QsIEludGVnZXIucGFyc2VJbnQoREFTX1BPUlQpKTsKKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIC8vZGVmYXVsdCBtYWtlIGl0IFBFLiBTcXVlbGNoIGl0LCBhbmQgbGV0IHRoZSBjb25uZWN0aW9uIGhhbmRsZSB0aGlzCisgICAgICAgICAgICBJU19FRT1mYWxzZTsKKyAgICAgICAgfQogCi0JCWlmIChJU19FRSkKLQkJICAgIElOU1RBTExfVFlQRSA9ICJlZSI7Ci0JCWVsc2UKLQkJICAgIElOU1RBTExfVFlQRSA9ICJwZSI7CisgICAgICAgIGlmIChJU19FRSkKKyAgICAgICAgICAgIElOU1RBTExfVFlQRSA9ICJlZSI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIElOU1RBTExfVFlQRSA9ICJwZSI7CiAKLQl9CisgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWRtaW5Ib3N0KCkgewogICAgICAgICByZXR1cm4gREFTX0hPU1Q7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9hZG1pbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9hZG1pbi9idWlsZC54bWwKaW5kZXggNGNmNTY5NC4uZmMwYzNjMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYWRtaW4vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2FkbWluL2J1aWxkLnhtbApAQCAtMjIsNyArMjIsNyBAQAogPCFFTlRJVFkgcHJvcHMgU1lTVEVNICJmaWxlOi4vLi4vLi4vY29uZmlnL3Byb3BlcnRpZXMueG1sIj4KIDwhRU5USVRZIGNvbW1vbmVlIFNZU1RFTSAiZmlsZTouLy4uLy4uL2NvbmZpZy9lZS1jb21tb24ueG1sIj5dPgogPHByb2plY3QgbmFtZT0iQWRtaW4gSW5mcmFzdHJ1Y3R1cmUiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+Ci0gICAgPHByb3BlcnR5IG5hbWU9InNyYy5kaXIiIHZhbHVlPSJzcmMiLz4gCisgICAgPHByb3BlcnR5IG5hbWU9InNyYy5kaXIiIHZhbHVlPSJzcmMiLz4KICAgICAmcHJvcHM7CiAgICAgJmNvbW1vbjsKICAgICAmY29tbW9uZWU7CkBAIC00NywxNSArNDcsMTUgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0IiBkZXBlbmRzPSJydW5tYWluIi8+CiAgICAgPHRhcmdldCBuYW1lPSJydW5tYWluIiBkZXBlbmRzPSJidWlsZCwgZ2V0LXZlcnNpb24tY29tbW9uIj4KICAgICA8amF2YSBjbGFzc25hbWU9IlRlc3REcml2ZXIiCi0JICBkaXI9Ii4iCisgICAgICBkaXI9Ii4iCiAgICAgICAgICAgZm9yaz0ieWVzIj4KLQkgIDxhcmcgdmFsdWU9IiR7YWRtaW4udXNlcn0iLz4KLQkgIDxhcmcgdmFsdWU9IiR7YWRtaW4ucGFzc3dvcmR9Ii8+Ci0JICA8YXJnIHZhbHVlPSIke2FkbWluLmhvc3R9Ii8+Ci0JICA8YXJnIHZhbHVlPSIke2FkbWluLnBvcnR9Ii8+Ci0JICA8IS0tIGZvbGxvd2luZyBpcyB0byBjaGVjayBpZiB0aGUgcHJvdG9jb2wgaXMgaHR0cHMiLy0tPgotCSAgPGFyZyB2YWx1ZT0iJHtlbnRlcnByaXNlfSIvPgotCSAgPGFyZyB2YWx1ZT0idGVzdHMubGlzdCIvPgorICAgICAgPGFyZyB2YWx1ZT0iJHthZG1pbi51c2VyfSIvPgorICAgICAgPGFyZyB2YWx1ZT0iJHthZG1pbi5wYXNzd29yZH0iLz4KKyAgICAgIDxhcmcgdmFsdWU9IiR7YWRtaW4uaG9zdH0iLz4KKyAgICAgIDxhcmcgdmFsdWU9IiR7YWRtaW4ucG9ydH0iLz4KKyAgICAgIDwhLS0gZm9sbG93aW5nIGlzIHRvIGNoZWNrIGlmIHRoZSBwcm90b2NvbCBpcyBodHRwcyIvLS0+CisgICAgICA8YXJnIHZhbHVlPSIke2VudGVycHJpc2V9Ii8+CisgICAgICA8YXJnIHZhbHVlPSJ0ZXN0cy5saXN0Ii8+CiAgICAgICAgIDxjbGFzc3BhdGg+CiAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9Ii8+CiAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYWRtaW4iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2FkbWluL3NyYy9Eb3R0ZWROYW1lc1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2FkbWluL3NyYy9Eb3R0ZWROYW1lc1Rlc3QuamF2YQppbmRleCA3ZDgwYTZiLi4wYjFkZjA1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9hZG1pbi9zcmMvRG90dGVkTmFtZXNUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYWRtaW4vc3JjL0RvdHRlZE5hbWVzVGVzdC5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiBwdWJsaWMgY2xhc3MgRG90dGVkTmFtZXNUZXN0IGltcGxlbWVudHMgUmVtb3RlQWRtaW5RdWlja2xvb2tUZXN0IHsKIAogICAgIHByaXZhdGUgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIG1ic2M7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRE5PTlMgPSAiY29tLnN1bi5hcHBzZXJ2Om5hbWU9ZG90dGVkLW5hbWUtZ2V0LXNldCx0eXBlPWRvdHRlZC1uYW1lLXN1cHBvcnQiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBRE1JTl9MT0dfU0VSVklDRV9ETiA9ICJzZXJ2ZXIubG9nLXNlcnZpY2UubW9kdWxlLWxvZy1sZXZlbHMuYWRtaW4iOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBRE1JTl9MSVNURU5FUl9OQU1FID0gImFkbWluLWxpc3RlbmVyIjsgLy90aGlzIGlzIHRoZSBkZWZhdWx0IG5hbWUKQEAgLTU4LDcgKzU4LDcgQEAKICAgICAgICAgZmluYWwgU3RyaW5nIG5hbWUgPSB0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIjogVGVzdGluZyBhZG1pbiBkb3R0ZWQgbmFtZXMiOwogICAgICAgICByZXR1cm4gKG5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCB0ZXN0TG9nTGV2ZWxEb3R0ZWROYW1lKCkgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gewogICAgICAgICBUZXN0TG9nTGV2ZWwgc2V0ID0gc2VsZWN0TG9nTGV2ZWwoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZWxlY3RlZCB2YWx1ZSByYW5kb21seSB0byBzZXQ6ICIgKyBzZXQubmFtZSgpKTsKQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgICAgICAgICAgICAgIC8vYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFleGlzdHMpIAorICAgICAgICBpZiAoIWV4aXN0cykKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUaGUgYWRtaW4gbGlzdGVuZXIgZG9lcyBub3QgZXhpc3QsIHRoaXMgaXMgbm90IHBvc3NpYmxlIik7CiAgICAgfQogICAgIHByaXZhdGUgU3RyaW5nW10gZ2V0TGlzdGVuZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9hZG1pbi9zcmMvTUJlYW5TZXJ2ZXJDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYWRtaW4vc3JjL01CZWFuU2VydmVyQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCBmODVkNGRhLi44ZDNhM2QyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9hZG1pbi9zcmMvTUJlYW5TZXJ2ZXJDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2FkbWluL3NyYy9NQmVhblNlcnZlckNvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTIzLDE0ICsyMywxNCBAQAogLyoqIEEgY2xhc3MgdG8gY3JlYXRlIGFuIEB7bGluayBNQmVhblNlcnZlckNvbm5lY3Rpb259IHRvIGFwcHNlcnZlci4KICAqLwogcHVibGljIGNsYXNzIE1CZWFuU2VydmVyQ29ubmVjdGlvbkZhY3RvcnkgewotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uRmFjdG9yeSAqLwogICAgIHByaXZhdGUgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uRmFjdG9yeSgpIHsKICAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBNQmVhblNlcnZlckNvbm5lY3Rpb24gZ2V0TUJlYW5TZXJ2ZXJDb25uZWN0aW9uSFRUUE9ySFRUUFMoZmluYWwgU3RyaW5nIGFkbWluVXNlciwgZmluYWwgU3RyaW5nIAorCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBNQmVhblNlcnZlckNvbm5lY3Rpb24gZ2V0TUJlYW5TZXJ2ZXJDb25uZWN0aW9uSFRUUE9ySFRUUFMoZmluYWwgU3RyaW5nIGFkbWluVXNlciwgZmluYWwgU3RyaW5nCiAgICAgICAgICAgICBhZG1pblBhc3N3b3JkLCBmaW5hbCBTdHJpbmcgYWRtaW5Ib3N0LCBmaW5hbCBTdHJpbmcgYWRtaW5Qb3J0LCBmaW5hbCBTdHJpbmcgaXNTZWN1cmUpIHRocm93cyBSdW50aW1lRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIG1ic2MgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZmluYWwgU3RyaW5nIHByb3RvY29sID0gQXBwc2VydmVyQ29ubmVjdGlvblNvdXJjZS5QUk9UT0NPTF9IVFRQOwpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBUTFNQYXJhbXMgZ2V0RHVtbXlUTFNQYXJhbXMoKSB7CiAgICAgICAgIGZpbmFsIFg1MDlUcnVzdE1hbmFnZXJbXSB0bXMgPSBUcnVzdEFueVRydXN0TWFuYWdlci5nZXRJbnN0YW5jZUFycmF5KCk7CiAgICAgICAgIHJldHVybiAoIG5ldyBUTFNQYXJhbXModG1zLCBudWxsKSApOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYWRtaW4vc3JjL1JlbW90ZUFkbWluUXVpY2tsb29rVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYWRtaW4vc3JjL1JlbW90ZUFkbWluUXVpY2tsb29rVGVzdC5qYXZhCmluZGV4IGUwOTY0ZTguLjZjNTU5MTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2FkbWluL3NyYy9SZW1vdGVBZG1pblF1aWNrbG9va1Rlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9hZG1pbi9zcmMvUmVtb3RlQWRtaW5RdWlja2xvb2tUZXN0LmphdmEKQEAgLTIxLDE2ICsyMSwxNiBAQAogICAgICAqIGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyLlBBU1MgYW5kIEZBSUwuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyB0ZXN0KCkgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb247Ci0gICAgCisKICAgICAvKiogU2V0cyB0aGUgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIGZvciB0ZXN0aW5nIHRoZSBzdHVmZiByZW1vdGVseS4gVGhlIHBhcmFtZXRlciBtYXkKICAgICAgKiBub3QgYmUgbnVsbC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRNQmVhblNlcnZlckNvbm5lY3Rpb24oZmluYWwgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIGMpOwotICAgIAorCiAgICAgLyoqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHRlc3QuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCk7Ci0gICAgCisKICAgICAvKiogUmV0dXJucyB0aGUgdGltZSB0YWtlbiBieSB0aGUgdGVzdCB0byBleGVjdXRlIGluIG1pbGxpc2Vjb25kcwogICAgICAqIEByZXR1cm4gbG9uZyBkZW5vdGluZyB0aGUgdGltZSB0YWtlbiBmb3IgdGhpcyB0ZXN0IHRvIGV4ZWN1dGUKICAgICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2FkbWluL3NyYy9UZXN0RHJpdmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9hZG1pbi9zcmMvVGVzdERyaXZlci5qYXZhCmluZGV4IGI2NjRkZWEuLjFlZjc1ZGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2FkbWluL3NyYy9UZXN0RHJpdmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYWRtaW4vc3JjL1Rlc3REcml2ZXIuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogaW1wb3J0IGNvbS5zdW4uZW50ZXJwcmlzZS51dGlsLm5ldC5OZXRVdGlsczsKIAogcHVibGljIGNsYXNzIFRlc3REcml2ZXIgewotICAgIAorCiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgYWRtaW5Vc2VyOwogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGFkbWluUGFzc3dvcmQ7CiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgYWRtaW5Ib3N0OwpAQCAtMzQsNyArMzQsNyBAQAogICAgIHByaXZhdGUgZmluYWwgRmlsZSB0ZXN0RmlsZTsKICAgICBwcml2YXRlIExpc3Q8UmVtb3RlQWRtaW5RdWlja2xvb2tUZXN0PiB0ZXN0czsKICAgICBwcml2YXRlIE1CZWFuU2VydmVyQ29ubmVjdGlvbiBtYnNjOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNDUklQVF9DT01NRU5UID0gIiMiOyAvL3RoaXMgaXMgaG93IGNvbW1lbnQgaXMgZGVub3RlZCwgdHJhZGl0aW9uYWxseQogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFNpbXBsZVJlcG9ydGVyQWRhcHRlciByZXBvcnRlciA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVTQyA9ICJBZG1pbiBJbmZyYXN0cnVjdHVyZSBUZXN0cyI7CkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgIGluaXRpYWxpemVDb25uZWN0aW9uKCk7CiAgICAgICAgIGluaXRpYWxpemVUZXN0Q2xhc3NlcygpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGZpbmFsIFN0cmluZ1tdIGVudikgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIFRlc3REcml2ZXIgdCA9IG5ldyBUZXN0RHJpdmVyKGVudik7CiAgICAgICAgIHQudGVzdEFuZFJlcG9ydEFsbCgpOwpAQCAtODIsNyArODIsNyBAQAogICAgICAgICAgICAgfSBjYXRjaChmaW5hbCBFeGNlcHRpb24gZSkge30KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgUmVtb3RlQWRtaW5RdWlja2xvb2tUZXN0IGMyVChmaW5hbCBTdHJpbmcgdGVzdENsYXNzKSB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBmaW5hbCBDbGFzcyBjICAgICAgICAgICAgICAgICAgICAgICA9IENsYXNzLmZvck5hbWUodGVzdENsYXNzKTsKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgICAgICAgICAgICAgIHJlcG9ydGVyLmFkZFN0YXR1cyh0LmdldE5hbWUoKSwgcmVwb3J0ZXIuUEFTUyk7CiAgICAgICAgICAgICB9IGNhdGNoKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgICAgICByZXBvcnRlci5hZGRTdGF0dXModC5nZXROYW1lKCksIHJlcG9ydGVyLkZBSUwpOyAgIAorICAgICAgICAgICAgICAgIHJlcG9ydGVyLmFkZFN0YXR1cyh0LmdldE5hbWUoKSwgcmVwb3J0ZXIuRkFJTCk7CiAgICAgICAgICAgICAgICAgdG90YWwgKz0gdC5nZXRFeGVjdXRpb25UaW1lKCk7CiAgICAgICAgICAgICAgICAgcmVwb3J0ZXIucHJpbnRTdW1tYXJ5KGdldFN1bW1hcnlTdHJpbmcodG90YWwpKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0U3VtbWFyeVN0cmluZyh0b3RhbCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYXZrL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2F2ay9idWlsZC54bWwKaW5kZXggNTY5NTMyYy4uZTk3MTk2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYXZrL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9hdmsvYnVpbGQueG1sCkBAIC0yNyw0OSArMjcsNDkgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamItdGFyZ2V0IiB2YWx1ZT0iYWxsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuZWpidGFyZ2V0cyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLXRhcmdldCIgdmFsdWU9InJ1bi10ZXN0Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuZWpidGFyZ2V0cyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLXRhcmdldCIgdmFsdWU9ImNsZWFuIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuZWpidGFyZ2V0cyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLXRhcmdldCIgdmFsdWU9ImJ1aWxkIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmVqYnRhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi10YXJnZXQiIHZhbHVlPSJkZXBsb3kiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5lamJ0YXJnZXRzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamItdGFyZ2V0IiB2YWx1ZT0idW5kZXBsb3kiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuZWpidGFyZ2V0cyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLXRhcmdldCIgdmFsdWU9InJ1biIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmVqYnRhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi10YXJnZXQiIHZhbHVlPSJzZXR1cCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuZWpidGFyZ2V0cyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLXRhcmdldCIgdmFsdWU9InVuc2V0dXAiLz4KQEAgLTkwLDcgKzkwLDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPiBVc2FnZToKKyAgICA8ZWNobz4gVXNhZ2U6CiAgICAgPT09PT09PT0gVGFyZ2V0cyBieSBleGVjdXRpb24gZ3JhbnVsYXJpdHkgPT09PT09PT09CiAKICAgICBhbnQgY2xlYW4gKENsZWFucyBhbGwgZWpiIHRlc3RzKQpAQCAtMTA3LDExICsxMDcsMTEgQEAKICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYiB0ZXN0cykKIAogICAgID09PT09IFRhcmdldHMgYnkgdGVjaG5vbG95IGFuZCBleGVjdXRpb24gZ3JhbnVsYXJpdHkgPT09PT09Ci0gICAgTm90ZTogUnVuIHRoZSBjb21tYW5kIG9mIHRoZSBmb2xsb3dpbmcgdHlwZTogCisgICAgTm90ZTogUnVuIHRoZSBjb21tYW5kIG9mIHRoZSBmb2xsb3dpbmcgdHlwZToKIAogICAgICAgICAgICAgJSBhbnQgc3RhdGVsZXNzIC1EZWpiLXRhcmdldD1jbGVhbgogCiAgICAgdG8gcnVuIHRoZSAnY2xlYW4nIHRhcmdldCBmb3IgJ3N0YXRlbGVzcycgdGVzdHMKLQk8L2VjaG8+CisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYXZrL2VqYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9hdmsvZWpiL2J1aWxkLnhtbAppbmRleCAzYWNjNzFjLi5mZmU2OWI1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9hdmsvZWpiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9hdmsvZWpiL2J1aWxkLnhtbApAQCAtMjcsNDkgKzI3LDQ5IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLXRhcmdldCIgdmFsdWU9ImFsbCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmVqYnRhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi10YXJnZXQiIHZhbHVlPSJydW4tdGVzdCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmVqYnRhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi10YXJnZXQiIHZhbHVlPSJjbGVhbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmVqYnRhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi10YXJnZXQiIHZhbHVlPSJidWlsZCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5lamJ0YXJnZXRzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamItdGFyZ2V0IiB2YWx1ZT0iZGVwbG95Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuZWpidGFyZ2V0cyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLXRhcmdldCIgdmFsdWU9InVuZGVwbG95Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmVqYnRhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi10YXJnZXQiIHZhbHVlPSJydW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5lamJ0YXJnZXRzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamItdGFyZ2V0IiB2YWx1ZT0ic2V0dXAiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmVqYnRhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi10YXJnZXQiIHZhbHVlPSJ1bnNldHVwIi8+CkBAIC05MCw3ICs5MCw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4gVXNhZ2U6CisgICAgPGVjaG8+IFVzYWdlOgogICAgID09PT09PT09IFRhcmdldHMgYnkgZXhlY3V0aW9uIGdyYW51bGFyaXR5ID09PT09PT09PQogCiAgICAgYW50IGNsZWFuIChDbGVhbnMgYWxsIGVqYiB0ZXN0cykKQEAgLTEwNywxMSArMTA3LDExIEBACiAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamIgdGVzdHMpCiAKICAgICA9PT09PSBUYXJnZXRzIGJ5IHRlY2hub2xveSBhbmQgZXhlY3V0aW9uIGdyYW51bGFyaXR5ID09PT09PQotICAgIE5vdGU6IFJ1biB0aGUgY29tbWFuZCBvZiB0aGUgZm9sbG93aW5nIHR5cGU6IAorICAgIE5vdGU6IFJ1biB0aGUgY29tbWFuZCBvZiB0aGUgZm9sbG93aW5nIHR5cGU6CiAKICAgICAgICAgICAgICUgYW50IHN0YXRlbGVzcyAtRGVqYi10YXJnZXQ9Y2xlYW4KIAogICAgIHRvIHJ1biB0aGUgJ2NsZWFuJyB0YXJnZXQgZm9yICdzdGF0ZWxlc3MnIHRlc3RzCi0JPC9lY2hvPgorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2F2ay9lamIvc3RhdGVsZXNzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2F2ay9lamIvc3RhdGVsZXNzL2J1aWxkLnhtbAppbmRleCBhZTcyY2UxLi4xYmM5MGExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9hdmsvZWpiL3N0YXRlbGVzcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYXZrL2VqYi9zdGF0ZWxlc3MvYnVpbGQueG1sCkBAIC04MiwxNiArODIsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPiBVc2FnZToKLQkJYW50IGNvbnZlcnRlciAoRXhlY3V0ZXMgdGhlIGNvbnZlcnRlciB0ZXN0cykKLQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamIgc2Vzc2lvbiBzdGF0ZWxlc3MgdGVzdHMpCi0JCWFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgZWpiIHNlc3Npb24gc3RhdGVsZXNzIHRlc3RzKQotCQlhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGVqYiBzZXNzaW9uIHN0YXRlbGVzcyB0ZXN0cykKLQkJYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIHN0YXRlbGVzcyB0ZXN0cykKLQkJYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIGVqYiBzZXNzaW9uIHN0YXRlbGVzcyBhcHBzKQotCQlhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGVqYiBzZXNzaW9uIHN0YXRlbGVzcyB0ZXN0cykKLQkJYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSBzZXNzaW9uIHN0YXRlbGVzcyBhcHBzKQotCQlhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIHN0YXRlbGVzcyB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+IFVzYWdlOgorICAgICAgICBhbnQgY29udmVydGVyIChFeGVjdXRlcyB0aGUgY29udmVydGVyIHRlc3RzKQorICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYiBzZXNzaW9uIHN0YXRlbGVzcyB0ZXN0cykKKyAgICAgICAgYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBlamIgc2Vzc2lvbiBzdGF0ZWxlc3MgdGVzdHMpCisgICAgICAgIGFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgZWpiIHNlc3Npb24gc3RhdGVsZXNzIHRlc3RzKQorICAgICAgICBhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3Igc3RhdGVsZXNzIHRlc3RzKQorICAgICAgICBhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgZWpiIHNlc3Npb24gc3RhdGVsZXNzIGFwcHMpCisgICAgICAgIGFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgZWpiIHNlc3Npb24gc3RhdGVsZXNzIHRlc3RzKQorICAgICAgICBhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlIHNlc3Npb24gc3RhdGVsZXNzIGFwcHMpCisgICAgICAgIGFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3Igc3RhdGVsZXNzIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2F2ay9lamIvc3RhdGVsZXNzL2NvbnZlcnRlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYXZrL2VqYi9zdGF0ZWxlc3MvY29udmVydGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNmEyMDk2Yi4uYWNjZTJhYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYXZrL2VqYi9zdGF0ZWxlc3MvY29udmVydGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYXZrL2VqYi9zdGF0ZWxlc3MvY29udmVydGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDI4ICsxNSwyOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXN0YXRlbGVzcyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY29udmVydGVyIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jb252ZXJ0ZXIiLz4gICAgICAgIFx1MDAyMAogCi08cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIAotCXZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiAKLQl2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIlx1MDAyMAorICAgIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiXHUwMDIwCisgICAgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4gICAgICAgIFx1MDAyMAogCi08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJjb20uc3VuLnMxcGVxZS5lamIuc3RhdGVsZXNzLmNvbnZlcnRlci5jbGllbnQuQ29udmVydGVyQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9ImNvbS5zdW4uczFwZXFlLmVqYi5zdGF0ZWxlc3MuY29udmVydGVyLmNsaWVudC5Db252ZXJ0ZXJDbGllbnQiLz4KIAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAKIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiAKQEAgLTQ2LDggKzQ2LDggQEAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLQogPHByb3BlcnR5IG5hbWU9ImpuZGkubmFtZSIgdmFsdWU9ImNvbnZlcnRlciIvPgotPHByb3BlcnR5IG5hbWU9InByb3ZpZGVyLnVybCIgdmFsdWU9Imlpb3A6Ly9sb2NhbGhvc3Q6JHtvcmIucG9ydH0iLz4gCi08cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIgdmFsdWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5uYW1pbmcuU2VyaWFsSW5pdENvbnRleHRGYWN0b3J5Ii8+IAotPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiIHZhbHVlPSJjb20uc3VuLmpuZGkuY29zbmFtaW5nLkNOQ3R4RmFjdG9yeSIvPiAKKzxwcm9wZXJ0eSBuYW1lPSJwcm92aWRlci51cmwiIHZhbHVlPSJpaW9wOi8vbG9jYWxob3N0OiR7b3JiLnBvcnR9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIgdmFsdWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5uYW1pbmcuU2VyaWFsSW5pdENvbnRleHRGYWN0b3J5Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIgdmFsdWU9ImNvbS5zdW4uam5kaS5jb3NuYW1pbmcuQ05DdHhGYWN0b3J5Ii8+XHUwMDIwCiAtLT4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYXZrL2VqYi9zdGF0ZWxlc3MvY29udmVydGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2F2ay9lamIvc3RhdGVsZXNzL2NvbnZlcnRlci9idWlsZC54bWwKaW5kZXggNjgyODZmYy4uOTgyZDcxNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYXZrL2VqYi9zdGF0ZWxlc3MvY29udmVydGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9hdmsvZWpiL3N0YXRlbGVzcy9jb252ZXJ0ZXIvYnVpbGQueG1sCkBAIC01OSw3ICs1OSw3IEBACiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvZHRkcy9zdGF0aWMtdmVyaWZpY2F0aW9uXzFfNC5kdGQiLz4KICAgICA8L3RhcmdldD4KIAotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNzEsOCArNzEsOCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtOTMsMjcgKzkzLDI3IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4tc3RhbmRhbG9uZS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImpuZGkubmFtZSIgdmFsdWU9ImNvbnZlcnRlciIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0icHJvdmlkZXIudXJsIiB2YWx1ZT0iaWlvcDovLyR7YWRtaW4uaG9zdH06JHtvcmIucG9ydH0iLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiIAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIKICAgICAgICAgICAgIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2UubmFtaW5nLlNlcmlhbEluaXRDb250ZXh0RmFjdG9yeSIvPgogPCEtLQotCTxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IiAKLSAgICAgICAgICAgIAl2YWx1ZT0ib3JnLmdsYXNzZmlzaC5qbmRpLmNvc25hbWluZy5DTkN0eEZhY3RvcnkiLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIKKyAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmdsYXNzZmlzaC5qbmRpLmNvc25hbWluZy5DTkN0eEZhY3RvcnkiLz4KIC0tPgotCTxlY2hvIG1lc3NhZ2U9InByb3ZpZGVyLnVybCB1c2VkIGlzICR7cHJvdmlkZXIudXJsfSIvPgorICAgIDxlY2hvIG1lc3NhZ2U9InByb3ZpZGVyLnVybCB1c2VkIGlzICR7cHJvdmlkZXIudXJsfSIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSIke3Rlc3QuY2xpZW50fSIKICAgICAgICAgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH06JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIgogICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIgZm9yaz0idHJ1ZSI+Ci0JPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxIb3N0PSR7YWRtaW4uaG9zdH0iLz4KLQk8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iLz4KKyAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbEhvc3Q9JHthZG1pbi5ob3N0fSIvPgorICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydD0ke29yYi5wb3J0fSIvPgogICAgICAgICA8YXJnIHZhbHVlPSIke3Byb3ZpZGVyLnVybH0iLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjdHhmYWN0b3J5fSIvPgogICAgICAgICA8YXJnIHZhbHVlPSIke2puZGkubmFtZX0iLz4KICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYXZrL2VqYi9zdGF0ZWxlc3MvY29udmVydGVyL2NsaWVudC9Db252ZXJ0ZXJDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2F2ay9lamIvc3RhdGVsZXNzL2NvbnZlcnRlci9jbGllbnQvQ29udmVydGVyQ2xpZW50LmphdmEKaW5kZXggOTI4MGI1MS4uZGM2YzJlOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYXZrL2VqYi9zdGF0ZWxlc3MvY29udmVydGVyL2NsaWVudC9Db252ZXJ0ZXJDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9hdmsvZWpiL3N0YXRlbGVzcy9jb252ZXJ0ZXIvY2xpZW50L0NvbnZlcnRlckNsaWVudC5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiAKIC8qKgogICogQSBzaW1wbGUgamF2YSBjbGllbnQuIFRoaXMgdXNlcyB0aGUgc2VydmljZXMgcHJvdmlkZWQgYnkgdGhlIDxjb2RlPkNvbnZlcnRlckJlYW48L2NvZGU+IGFuZAotICogY29udmVydHMgMTAwIFVTIGRvbGxhcnMgdG8gWWVuIGFuZCAxMDAgWWVuIHRvIEV1cm8uIAorICogY29udmVydHMgMTAwIFVTIGRvbGxhcnMgdG8gWWVuIGFuZCAxMDAgWWVuIHRvIEV1cm8uCiAgKiA8cD5JbiB0aGlzIHJlZ2FyZCwgaXQgZG9lcyB0aGUgZm9sbG93aW5nIGluIG9yZGVyCiAgKiA8dWw+CiAgKiA8bGk+TG9jYXRlcyB0aGUgaG9tZSBpbnRlcmZhY2Ugb2YgdGhlIGVudGVycHJpc2UgYmVhbgpAQCAtNDEsMjEgKzQxLDIxIEBACiAgKiA8YnI+CiAgKiA8Yj5Mb2NhdGluZyB0aGUgaG9tZSBpbnRlcmZhY2U6PC9iPgogICogPGJsb2NrcXVvdGU+PHByZT4KLSAqCUNvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICoJQ29udGV4dCBteUVudiA9IChDb250ZXh0KWluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52Iik7Ci0gKglPYmplY3Qgb2JqcmVmID0gbXlFbnYubG9va3VwKCJlamIvU2ltcGxlQ29udmVydGVyIik7CisgKiAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAqICAgIENvbnRleHQgbXlFbnYgPSAoQ29udGV4dClpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2VudiIpOworICogICAgT2JqZWN0IG9ianJlZiA9IG15RW52Lmxvb2t1cCgiZWpiL1NpbXBsZUNvbnZlcnRlciIpOwogICogIENvbnZlcnRlckhvbWUgaG9tZSA9IChDb252ZXJ0ZXJIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIENvbnZlcnRlckhvbWUuY2xhc3MpOwogICogPC9wcmU+PC9ibG9ja3F1b3RlPgogICogPGJyPgogICogPGI+Q3JlYXRpbmcgdGhlIHJlbW90ZSBpbnRlcmZhY2U6PC9iPgogICogPGJsb2NrcXVvdGU+PHByZT4KLSAqCUNvbnZlcnRlciBjdXJyZW5jeUNvbnZlcnRlciA9IGhvbWUuY3JlYXRlKCk7CisgKiAgICBDb252ZXJ0ZXIgY3VycmVuY3lDb252ZXJ0ZXIgPSBob21lLmNyZWF0ZSgpOwogICogPC9wcmU+PC9ibG9ja3F1b3RlPgogICogPGJyPgogICogPGI+SW52b2tpbmcgYnVzaW5lc3MgbWV0aG9kczo8L2I+CiAgKiA8YmxvY2txdW90ZT48cHJlPgogICogIEJpZ0RlY2ltYWwgcGFyYW0gPSBuZXcgQmlnRGVjaW1hbCAoIjEwMC4wMCIpOwotICoJYW1vdW50ID0gY3VycmVuY3lDb252ZXJ0ZXIuZG9sbGFyVG9ZZW4ocGFyYW0pOworICogICAgYW1vdW50ID0gY3VycmVuY3lDb252ZXJ0ZXIuZG9sbGFyVG9ZZW4ocGFyYW0pOwogICogIGFtb3VudCA9IGN1cnJlbmN5Q29udmVydGVyLnllblRvRXVybyhwYXJhbSk7CiAgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CiAgKiA8YnI+CkBAIC03MCw3ICs3MCw3IEBACiAKIHB1YmxpYyBjbGFzcyBDb252ZXJ0ZXJDbGllbnQgewogCi0gICAgcHJpdmF0ZSBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgQ29udmVydGVyQ2xpZW50KCkgewpAQCAtODQsMTIgKzg0LDEyIEBACiAgICAgKgogICAgICovCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCUNvbnZlcnRlckNsaWVudCBjbGllbnQgPSBuZXcgQ29udmVydGVyQ2xpZW50KCk7Ci0JY2xpZW50LnJ1bihhcmdzKTsKKyAgICBDb252ZXJ0ZXJDbGllbnQgY2xpZW50ID0gbmV3IENvbnZlcnRlckNsaWVudCgpOworICAgIGNsaWVudC5ydW4oYXJncyk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHJ1bihTdHJpbmdbXSBhcmdzKSB7Ci0JU3RyaW5nIHRlc3RJZCA9IG51bGw7CisgICAgU3RyaW5nIHRlc3RJZCA9IG51bGw7CiAgICAgICAgIFN0cmluZyB4bWxmaWxlID0gYXJnc1swXTsKIAogICAgICAgICB0cnkgewpAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiEiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9IGZpbmFsbHkgewotCSAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICAgICAgICAgIERvY3VtZW50IGRvYyA9IGRiLnBhcnNlKHhtbEZpbGUpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgZ2V0IHJvb3QgIik7CiAgICAgICAgICAgICBFbGVtZW50IHJvb3QgICAgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJUaGUgZmFpbGVkIGNvdW50IGlzOiAiICsgZmluZFZhbHVlKCByb290LCBzZWFyY2gpKTsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJUaGUgZmFpbGVkIGNvdW50IGlzOiAiICsgZmluZFZhbHVlKCByb290LCBzZWFyY2gpKTsKICAgICAgICAgICAgIGlmICggZmluZFZhbHVlKCByb290LCBzZWFyY2gpLmVxdWFscygiMTAwIikpCiAgICAgICAgICAgICAgICAgIHBhc3NlZCA9IHRydWU7CiAgICAgICAgIH0gY2F0Y2ggKG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbiBzZSkgewpAQCAtMTQ2LDcgKzE0Niw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gdmFsaWRBcmNoaXZlKCBTdHJpbmcgeG1sZmlsZSkgdGhyb3dzIEV4Y2VwdGlvbnsKIAotICAgICAgIC8vIGNoZWNrIHRoZSB4bWwgcmVzdWx0cyBmaWxlIGdlbmVyYXRlZCBieSBydW5uaW5nIEFWSyBTdGF0aWNDaGVjayAKKyAgICAgICAvLyBjaGVjayB0aGUgeG1sIHJlc3VsdHMgZmlsZSBnZW5lcmF0ZWQgYnkgcnVubmluZyBBVksgU3RhdGljQ2hlY2sKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInhtbGZpbGUgaXMgIiArICB4bWxmaWxlICk7CiAgICAgICAgLy8gcmVzdWx0cyBvZiB0ZXN0IGlzIGluIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCiAgICAgICAgLy8gU3RyaW5nIHhtbGZpbGUgPSAiZWpiLXN0YXRlbGVzcy1jb252ZXJ0ZXJBcHAuZWFyLnhtbCI7CkBAIC0xNTksMTUgKzE1OSwxNSBAQAogICAgICAgICAgICAgLy8gVGhlIG5leHQgbWV0aG9kIHJlcXVpcmVzIC9zdW4vYXBwc2VydmVyOC9saWIvZHRkcy9zdGF0aWMtdmVyaWZpY2F0aW9uXzFfNC5kdGQKICAgICAgICAgICAgIC8vIHN0YXRpYy12ZXJpZmljYXRpb25fMV80LmR0ZCBuZWVkcyB0byBiZSBtb3ZlZCB0byB0aGF0IGxvY2F0aW9uIGZvciBtZXRob2QgdG8gc3VjY2VlZC4KICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAgICAgW2V4ZWNdIGphdmEubGFuZy5FeGNlcHRpb246IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOiAKKyAgICAgICAgICAgIC8vICAgICBbZXhlY10gamF2YS5sYW5nLkV4Y2VwdGlvbjogamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb246CiAgICAgICAgICAgICAvLyAgICAgL3N1bi9hcHBzZXJ2ZXI4L2xpYi9kdGRzL3N0YXRpYy12ZXJpZmljYXRpb25fMV80LmR0ZAogICAgICAgICAgICAgLy8gICAgIChObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5KQogCiAgICAgICAgICAgICBEb2N1bWVudCBkb2MgPSBkYi5wYXJzZSh4bWxmaWxlKTsKICAgICAgICAgICAgIEVsZW1lbnQgcm9vdCAgICA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlRoZSBmYWlsZWQgY291bnQgaXM6ICIgKyBmaW5kVmFsdWUoIHJvb3QsICIvc3RhdGljLXZlcmlmaWNhdGlvbi9mYWlsdXJlLWNvdW50L2ZhaWx1cmUtbnVtYmVyIikgKTsKLSAgICAgICAgICAgIGlmICggZmluZFZhbHVlKCByb290LCAiL3N0YXRpYy12ZXJpZmljYXRpb24vZmFpbHVyZS1jb3VudC9mYWlsdXJlLW51bWJlciIpLmVxdWFscygiMCIpICkgCi0gICAgICAgICAgICAgICAgIHBhc3NlZCA9IHRydWU7ICAgICAgCisgICAgICAgICAgICBpZiAoIGZpbmRWYWx1ZSggcm9vdCwgIi9zdGF0aWMtdmVyaWZpY2F0aW9uL2ZhaWx1cmUtY291bnQvZmFpbHVyZS1udW1iZXIiKS5lcXVhbHMoIjAiKSApCisgICAgICAgICAgICAgICAgIHBhc3NlZCA9IHRydWU7CiAKICAgICAgICAgfSBjYXRjaCAob3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uIHNlKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKHNlKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2F2ay9lamIvc3RhdGVsZXNzL2NvbnZlcnRlci9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2F2ay9lamIvc3RhdGVsZXNzL2NvbnZlcnRlci9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAppbmRleCBkYzg1OWZlLi5hMDc2ZDYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9hdmsvZWpiL3N0YXRlbGVzcy9jb252ZXJ0ZXIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYXZrL2VqYi9zdGF0ZWxlc3MvY29udmVydGVyL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgPHNtYWxsLWljb24+PC9zbWFsbC1pY29uPgogICAgIDxsYXJnZS1pY29uPjwvbGFyZ2UtaWNvbj4KICAgPC9pY29uPgotICA8ZGlzcGxheS1uYW1lPkNvbnZlcnRlckFwcDwvZGlzcGxheS1uYW1lPiAgCisgIDxkaXNwbGF5LW5hbWU+Q29udmVydGVyQXBwPC9kaXNwbGF5LW5hbWU+CiAgIDxtb2R1bGU+CiAgICAgPGphdmE+ZWpiLXN0YXRlbGVzcy1jb252ZXJ0ZXItY2xpZW50LmphcjwvamF2YT4KICAgPC9tb2R1bGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9hdmsvZWpiL3N0YXRlbGVzcy9jb252ZXJ0ZXIvZWpiL0NvbnZlcnRlckJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2F2ay9lamIvc3RhdGVsZXNzL2NvbnZlcnRlci9lamIvQ29udmVydGVyQmVhbi5qYXZhCmluZGV4IGM0NGRkZGYuLmNkNjZmM2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2F2ay9lamIvc3RhdGVsZXNzL2NvbnZlcnRlci9lamIvQ29udmVydGVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2F2ay9lamIvc3RhdGVsZXNzL2NvbnZlcnRlci9lamIvQ29udmVydGVyQmVhbi5qYXZhCkBAIC0zNSw3ICszNSw3IEBACiAgKiBAc2VlIENvbnZlcnRlckhvbWUKICAqLwogcHVibGljIGNsYXNzIENvbnZlcnRlckJlYW4gaW1wbGVtZW50cyBTZXNzaW9uQmVhbiwgVGltZWRPYmplY3QgewotICAgIAorCiAgICAgU2Vzc2lvbkNvbnRleHQgc2Vzc2lvbkNvbnRleHRfOwogCiAgICAgQmlnRGVjaW1hbCB5ZW5SYXRlID0gbmV3IEJpZ0RlY2ltYWwoIjEyMS42MDAwIik7CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIC8vIG51bWJlciBvZiB0ZXN0cyBpcyBnZXR0aW5nIGxhcmdlLiAgVGhpcyBzZXQgb2Ygb3BlcmF0aW9ucyB3aWxsCiAgICAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSB0aW1lciBwZXJzaXN0ZW50IHN0b3JlIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksCiAgICAgICAgIC8vIGluIGFkZGl0aW9uIHRvIGV4ZXJjaXNpbmcgc29tZSBvZiB0aGUgY29tbW9uIHRpbWVyIGZ1bmN0aW9ucy4KLSAgICAgICAgdGVzdFRpbWVyU2VydmljZSgpOyAgICAgICAgCisgICAgICAgIHRlc3RUaW1lclNlcnZpY2UoKTsKIAogICAgICAgICBCaWdEZWNpbWFsIHJlc3VsdCA9IGRvbGxhcnMubXVsdGlwbHkoeWVuUmF0ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQuc2V0U2NhbGUoMixCaWdEZWNpbWFsLlJPVU5EX1VQKTsKQEAgLTg4LDcgKzg4LDcgQEAKICAgICAgKiBMb2FkcyB0aGUgc3RhdGUgb2YgdGhlIGJlYW4gZnJvbSBzZWNvbmRhcnkgc3RvcmFnZS4gUmVxdWlyZWQgYnkgRUpCIHNwZWMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotICAgIAorCiAgICAgLyoqCiAgICAgICogS2VlcHMgdGhlIHN0YXRlIG9mIHRoZSBiZWFuIHRvIHNlY29uZGFyeSBzdG9yYWdlLiBSZXF1aXJlZCBieSBFSkIgc3BlYy4KICAgICAgKi8KQEAgLTEzOSw3ICsxMzksNyBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNlc3Npb25Db250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogICAgICAgICAgICAgQ29sbGVjdGlvbiB0aW1lcnMgPSB0aW1lclNlcnZpY2UuZ2V0VGltZXJzKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9idWlsZC54bWwKaW5kZXggZGQ1ZGRhMi4uMjE4YTcwZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2J1aWxkLnhtbApAQCAtNDYsNjIgKzQ2LDYyIEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqKi9SZXBSdW5Db25mLnR4dCIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLXNxZS10YXJnZXQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxZS10YXJnZXQtbmFtZSIgdmFsdWU9InJ1bi10ZXN0Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLXNxZS10YXJnZXQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxZS10YXJnZXQtbmFtZSIgdmFsdWU9ImNsZWFuIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLXNxZS10YXJnZXQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxZS10YXJnZXQtbmFtZSIgdmFsdWU9ImJ1aWxkIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1zcWUtdGFyZ2V0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWUtdGFyZ2V0LW5hbWUiIHZhbHVlPSJkZXBsb3kiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tc3FlLXRhcmdldCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FlLXRhcmdldC1uYW1lIiB2YWx1ZT0idW5kZXBsb3kiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLXNxZS10YXJnZXQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxZS10YXJnZXQtbmFtZSIgdmFsdWU9InJ1biIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1zcWUtdGFyZ2V0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWUtdGFyZ2V0LW5hbWUiIHZhbHVlPSJzZXR1cCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLXNxZS10YXJnZXQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxZS10YXJnZXQtbmFtZSIgdmFsdWU9InVuc2V0dXAiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1zcWUtdGFyZ2V0Ij4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1lZXNxZS10YXJnZXQiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1wZXNxZS10YXJnZXQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLWVlc3FlLXRhcmdldCIgaWY9ImVlIj4KLQk8YW50IGRpcj0iY29yYmEiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImNvcmJhIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0iY29ubmVjdG9yIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0iZWpiIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0id2ViIiB0YXJnZXQ9ImFsbCIvPgpAQCAtMTEwLDkgKzExMCw5IEBACiAgICAgICAgIDxhbnQgZGlyPSJ3ZWJzZXJ2aWNlcyIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9InNlY3VyaXR5IiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0iYWRtaW4tZ3VpIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJhZG1pbiIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iYWRtaW4iIHRhcmdldD0iYWxsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1wZXNxZS10YXJnZXQiIHVubGVzcz0iZWUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvcmJhIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29ubmVjdG9yIi8+CkBAIC0yMjgsNyArMjI4LDcgQEAKICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHNxZXRlc3RzKQogCiAgICAgICAgID09PT09IFRhcmdldHMgYnkgdGVjaG5vbG95IGFuZCBleGVjdXRpb24gZ3JhbnVsYXJpdHkgPT09PT09Ci0gICAgICAgIE5vdGU6IFJ1biB0aGUgY29tbWFuZCBvZiB0aGUgZm9sbG93aW5nIHR5cGU6IAorICAgICAgICBOb3RlOiBSdW4gdGhlIGNvbW1hbmQgb2YgdGhlIGZvbGxvd2luZyB0eXBlOgogCiAgICAgICAgICAgICAlIGFudCBjb3JiYSAtRHNxZS10YXJnZXQtbmFtZT1jbGVhbgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2J1aWxkLnhtbAppbmRleCA1ZWEwN2QxLi43MzhmNGIxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0gICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPiAKKyAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9jY2ktZW1iZWRkZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9jY2ktZW1iZWRkZWQvYnVpbGQucHJvcGVydGllcwppbmRleCBlN2E2MmU2Li4yMThhZTAwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvY2NpLWVtYmVkZGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2NjaS1lbWJlZGRlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNvbm5lY3RvciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJjY2libGFja2JveC5wYXRoIiB2YWx1ZT0iLi4vbGliL2NjaWJsYWNrYm94LXR4LmphciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZW1iZWRkZWQtY2NpIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1lbWJlZGRlZC1jY2kiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZGIudHlwZSIgdmFsdWU9InBvaW50YmFzZSIvPgpAQCAtMjksNSArMjksNSBAQAogPHByb3BlcnR5IG5hbWU9InN1bi1jbXAtZGJzY2hlbWEiIHZhbHVlPSJkZXNjcmlwdG9yL3NlY19iYW5rYWRtaW5fc2NoZW1hLmRic2NoZW1hIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InJhcm5hbWUiIHZhbHVlPSJjY2libGFja2JveC10eCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9InJhcm5hbWUiIHZhbHVlPSJjY2libGFja2JveC10eCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iamRiYy5kcml2ZXJzIiB2YWx1ZT0iY29tLnBvaW50YmFzZS5qZGJjLmpkYmNVbml2ZXJzYWxEcml2ZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9jY2ktZW1iZWRkZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2NjaS1lbWJlZGRlZC9idWlsZC54bWwKaW5kZXggZTY2Y2Q3MS4uZDdjMDcxMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2NjaS1lbWJlZGRlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2NjaS1lbWJlZGRlZC9idWlsZC54bWwKQEAgLTMxLDcgKzMxLDcgQEAKICAgICZjb21tb25CdWlsZDsKICAgICZ0ZXN0UHJvcGVydGllczsKICAgICZydW47Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsc2V0dXAsZGVwbG95LHJ1bix1bmRlcGxveSx1bnNldHVwIi8+CiAgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJ1bix1bmRlcGxveSIvPgogCkBAIC04MCw3ICs4MCw3IEBACiAgICAgIDwvdGFyZ2V0PgogCiAgICAgPCEtLQotCUN1c3RvbSB0YXJnZXQgZm9yIGNvbXBpbGF0aW9uIHdpdGggbG9jYWwgbGlicmFyaWVzIGZvciBjb25uZWN0b3IKKyAgICBDdXN0b20gdGFyZ2V0IGZvciBjb21waWxhdGlvbiB3aXRoIGxvY2FsIGxpYnJhcmllcyBmb3IgY29ubmVjdG9yCiAgICAgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLWNjaSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KQEAgLTk2LDcgKzk2LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVtYmVkZGVkLWVhciIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVtYmVkZGVkLWVhciIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLWVtYmVkZGVkLWVqYiI+CkBAIC0xMjQsOSArMTI0LDkgQEAKICAgICAgICAgICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgICAgICAgICAgICAgICA8Y29weSBmaWxlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIgdG9maWxlPSIke2Fzc2VtYmxlLmRpcn0vYXBwbGljYXRpb24ueG1sIi8+CiAgICAgICAgICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KLQkJPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVtYmVkZGVkLWVqYiIvPgotCQk8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZW1iZWRkZWQtY2xpZW50Ii8+Ci0JCTxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1yYXIiLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVtYmVkZGVkLWVqYiIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZW1iZWRkZWQtY2xpZW50Ii8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1yYXIiLz4KICAgICAgICAgICAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIKICAgICAgICAgICAgICAgICAgICAgICAgIGFwcHhtbD0iJHthc3NlbWJsZS5kaXJ9L2FwcGxpY2F0aW9uLnhtbCI+CiAgICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgpAQCAtMTM5LDcgKzEzOSw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICAJPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CisgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1wb29sIj4KICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0eC5tb2RlIiB2YWx1ZT0idHgiLz4KICAgICAgICAgICAgICAgICA8L2FudGNhbGw+CkBAIC0xNTIsMTUgKzE1MiwxNSBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXJlc291cmNlIi8+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtcG9vbCIvPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKIAotICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+ICAKLSAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPiAgIAotCTxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IkVtYmVkZGVkIi8+ICAgICAKLSAgICA8L2FudGNhbGw+ICAgCisgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgorICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IkVtYmVkZGVkIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CkBAIC0yMDEsOSArMjAxLDkgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yYXIiPgotCTxjb3B5IGZpbGU9ImRlc2NyaXB0b3IvcmEueG1sIiB0b2ZpbGU9IiR7YXNzZW1ibGUuZGlyfS9yYXIvTUVUQS1JTkYvcmEueG1sIi8+Ci0JPGNvcHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L3NxZXRlc3RzL2Nvbm5lY3Rvci9saWIvY2NpYmxhY2tib3gtdHguamFyIiB0b2ZpbGU9IiR7YXNzZW1ibGUuZGlyfS9yYXIvY2NpYmxhY2tib3gtdHguamFyIi8+Ci0JPHJlcGxhY2UgZmlsZT0iJHthc3NlbWJsZS5kaXJ9L3Jhci9NRVRBLUlORi9yYS54bWwiIHRva2VuPSJEQlVSTCIgdmFsdWU9IiR7ZGIudXJsfSIvPgorICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3IvcmEueG1sIiB0b2ZpbGU9IiR7YXNzZW1ibGUuZGlyfS9yYXIvTUVUQS1JTkYvcmEueG1sIi8+CisgICAgPGNvcHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L3NxZXRlc3RzL2Nvbm5lY3Rvci9saWIvY2NpYmxhY2tib3gtdHguamFyIiB0b2ZpbGU9IiR7YXNzZW1ibGUuZGlyfS9yYXIvY2NpYmxhY2tib3gtdHguamFyIi8+CisgICAgPHJlcGxhY2UgZmlsZT0iJHthc3NlbWJsZS5kaXJ9L3Jhci9NRVRBLUlORi9yYS54bWwiIHRva2VuPSJEQlVSTCIgdmFsdWU9IiR7ZGIudXJsfSIvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0icGFja2FnZS1yYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTI1MSw1ICsyNTEsNSBAQAogICAgICAgICA8dG91Y2ggZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vc2V0dXBEQlRhYmxlcy5vdXQiLz4KIDwvdGFyZ2V0PgogCi0gIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvY2NpLWVtYmVkZGVkL2NsaWVudC9Db2ZmZWVDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9jY2ktZW1iZWRkZWQvY2xpZW50L0NvZmZlZUNsaWVudC5qYXZhCmluZGV4IGQzNWE3YjguLmNmOTY0YzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9jY2ktZW1iZWRkZWQvY2xpZW50L0NvZmZlZUNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9jY2ktZW1iZWRkZWQvY2xpZW50L0NvZmZlZUNsaWVudC5qYXZhCkBAIC0zMCwxNyArMzAsMTcgQEAKICAgICAgICBTdHJpbmcgdGVzdElkID0gIkoyRUUgQ29ubmVjdG9ycyA6IEVtYmVkZGVkIEFkYXB0ZXIgVGVzdHMiOwogICAgICAgIHRyeSB7CiAKLQkgICBpZiAoYXJncy5sZW5ndGggPT0gMSkgewotCSAgICAgICB0ZXN0SWQgPSBhcmdzWzBdOwotCSAgIH0KKyAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMSkgeworICAgICAgICAgICB0ZXN0SWQgPSBhcmdzWzBdOworICAgICAgIH0KIAogICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4odGVzdElkICsgIiA6IENvZmZlZUNsaWVudCBzdGFydGVkIGluIG1haW4uLi4iKTsKLQkgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJKMkVFIENvbm5lY3RvcnMgMS41OiBFbWJlZGRlZCBDQ0kgQWRhcHRlciB0ZXN0cyIpOworICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkoyRUUgQ29ubmVjdG9ycyAxLjU6IEVtYmVkZGVkIENDSSBBZGFwdGVyIHRlc3RzIik7CiAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUNvZmZlZSIpOwogCi0gICAgICAgICAgIENvZmZlZVJlbW90ZUhvbWUgaG9tZSA9IAotICAgICAgICAgICAgICAgKENvZmZlZVJlbW90ZUhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgIENvZmZlZVJlbW90ZUhvbWUgaG9tZSA9CisgICAgICAgICAgICAgICAoQ29mZmVlUmVtb3RlSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZmZlZVJlbW90ZUhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgIENvZmZlZVJlbW90ZSBjb2ZmZWUgPSBob21lLmNyZWF0ZSgpOwpAQCAtNTUsMjMgKzU1LDIzIEBACiAKICAgICAgICAgICAgaW50IG5ld0NvdW50ID0gY29mZmVlLmdldENvZmZlZUNvdW50KCk7CiAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ29mZmVlIGNvdW50ID0gIiArIG5ld0NvdW50KTsKLQkgICBpZiAoY291bnQ9PShuZXdDb3VudC0zKSkgewotCQlzdGF0LmFkZFN0YXR1cygiQ29ubmVjdG9yOmNjaSBDb25uZWN0b3IgIiArIHRlc3RJZCArICIgcmFyIFRlc3Qgc3RhdHVzOiIsc3RhdC5QQVNTKTsKLQkgICB9ZWxzZXsKLQkJc3RhdC5hZGRTdGF0dXMoIkNvbm5lY3RvcjpjY2kgQ29ubmVjdG9yICIgKyB0ZXN0SWQgKyAiIHJhciBUZXN0IHN0YXR1czoiLHN0YXQuRkFJTCk7Ci0JICAgfQorICAgICAgIGlmIChjb3VudD09KG5ld0NvdW50LTMpKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJDb25uZWN0b3I6Y2NpIENvbm5lY3RvciAiICsgdGVzdElkICsgIiByYXIgVGVzdCBzdGF0dXM6IixzdGF0LlBBU1MpOworICAgICAgIH1lbHNleworICAgICAgICBzdGF0LmFkZFN0YXR1cygiQ29ubmVjdG9yOmNjaSBDb25uZWN0b3IgIiArIHRlc3RJZCArICIgcmFyIFRlc3Qgc3RhdHVzOiIsc3RhdC5GQUlMKTsKKyAgICAgICB9CiAKIAogCiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uISIpOwotCSAgIHN0YXQuYWRkU3RhdHVzKCJDb25uZWN0b3I6Q0NJIENvbm5lY3RvciAiICsgdGVzdElkICsgIiByYXIgVGVzdCBzdGF0dXM6IixzdGF0LkZBSUwpOworICAgICAgIHN0YXQuYWRkU3RhdHVzKCJDb25uZWN0b3I6Q0NJIENvbm5lY3RvciAiICsgdGVzdElkICsgIiByYXIgVGVzdCBzdGF0dXM6IixzdGF0LkZBSUwpOwogICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICB9ZmluYWxseXsKLQkgICAvL3ByaW50IHRlc3Qgc3VtbWFyeQotCSAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CisgICAgICAgLy9wcmludCB0ZXN0IHN1bW1hcnkKKyAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOwogICAgICAgIH0KLSAgIH0gCisgICB9CiAKIAotfSAKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9jY2ktZW1iZWRkZWQvZWpiL0NvZmZlZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9jY2ktZW1iZWRkZWQvZWpiL0NvZmZlZUJlYW4uamF2YQppbmRleCBiNGNjYjdjLi45NjU0ZDdjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvY2NpLWVtYmVkZGVkL2VqYi9Db2ZmZWVCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2NjaS1lbWJlZGRlZC9lamIvQ29mZmVlQmVhbi5qYXZhCkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgICAgICBJbmRleGVkUmVjb3JkIGlSZWMgPSByZi5jcmVhdGVJbmRleGVkUmVjb3JkKCJJbnB1dFJlY29yZCIpOwogICAgICAgICAgICAgUmVjb3JkIG9SZWMgPSBpeC5leGVjdXRlKGlTcGVjLCBpUmVjKTsKICAgICAgICAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gKChJbmRleGVkUmVjb3JkKW9SZWMpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZShpdGVyYXRvci5oYXNOZXh0KCkpIHsgICAKKyAgICAgICAgICAgIHdoaWxlKGl0ZXJhdG9yLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgIE9iamVjdCBvYmogPSBpdGVyYXRvci5uZXh0KCk7CiAgICAgICAgICAgICAgICAgaWYob2JqIGluc3RhbmNlb2YgSW50ZWdlcikgewogICAgICAgICAgICAgICAgICAgICBjb3VudCA9ICgoSW50ZWdlcilvYmopLmludFZhbHVlKCk7CkBAIC05OSwxMSArOTksMTEgQEAKICAgICBwcml2YXRlIENvbm5lY3Rpb24gZ2V0Q0NJQ29ubmVjdGlvbigpIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCI8PT09PT09PT09PSBJTiBnZXQgY2NpIENvbm5lY3Rpb24gPT09PT09PT09PT0+Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCI8PT09PT09PT09PSBJTiBnZXQgY2NpIENvbm5lY3Rpb24gPT09PT09PT09PT0+Iik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb25uZWN0aW9uU3BlYyBzcGVjID0gbmV3IENjaUNvbm5lY3Rpb25TcGVjKCJEQlVTRVIiLCAiREJQQVNTV09SRCIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiPD09PT09PT09PT0gQ3JlYXRlZCBJU3BlYyA9PT09PT09PT09PT4iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkNGIHZhbHVlIDogIiArIGNmKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjw9PT09PT09PT09IENyZWF0ZWQgSVNwZWMgPT09PT09PT09PT0+Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDRiB2YWx1ZSA6ICIgKyBjZik7CiAgICAgICAgICAgICBjb24gPSBjZi5nZXRDb25uZWN0aW9uKHNwZWMpOwogICAgICAgICB9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0xMjMsNCArMTIzLDQgQEAKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9CiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIAotfSAKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9jY2kvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9jY2kvYnVpbGQucHJvcGVydGllcwppbmRleCBmYTg2NTU2Li4wZDc1MTQyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvY2NpL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2NjaS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNvbm5lY3RvciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJjY2libGFja2JveC5wYXRoIiB2YWx1ZT0iLi4vbGliL2NjaWJsYWNrYm94LXR4LmphciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJjb25uZWN0b3ItY2NpIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImNvbm5lY3Rvci1jY2kiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZGIudHlwZSIgdmFsdWU9InBvaW50YmFzZSIvPgpAQCAtMjksNSArMjksNSBAQAogPHByb3BlcnR5IG5hbWU9InN1bi1jbXAtZGJzY2hlbWEiIHZhbHVlPSJkZXNjcmlwdG9yL3NlY19iYW5rYWRtaW5fc2NoZW1hLmRic2NoZW1hIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InJhcm5hbWUiIHZhbHVlPSJjY2libGFja2JveC10eCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9InJhcm5hbWUiIHZhbHVlPSJjY2libGFja2JveC10eCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iamRiYy5kcml2ZXJzIiB2YWx1ZT0iY29tLnBvaW50YmFzZS5qZGJjLmpkYmNVbml2ZXJzYWxEcml2ZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9jY2kvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2NjaS9idWlsZC54bWwKaW5kZXggOWZkYjg1MC4uNDMzZWY0MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2NjaS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2NjaS9idWlsZC54bWwKQEAgLTExOSwxMCArMTE5LDEwIEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KIDwvdGFyZ2V0PgogCi08dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPiAgCi0gICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4gICAKLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0ic3RhbmRhbG9uZSIvPiAgICAgCi0gICAgPC9hbnRjYWxsPiAgIAorPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSJzdGFuZGFsb25lIi8+CisgICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+CiAKIDwhLS0gc2V0dXAgLS0+CkBAIC0xMzksNyArMTM5LDcgQEAKIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXBvb2wiPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWNvbm5lY3Rvci1jb25ucG9vbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0icmEubmFtZSIgdmFsdWU9ImNjaWJsYWNrYm94LSR7dHgubW9kZX0iLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rpb24uZGVmbmFtZSIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0aW9uLmRlZm5hbWUiCiAgICAgICAgICAgICB2YWx1ZT0iamFrYXJ0YS5yZXNvdXJjZS5jY2kuQ29ubmVjdGlvbkZhY3RvcnkiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5jb25wb29sLm5hbWUiIHZhbHVlPSJDQ0ktQ09OTlBPT0wiLz4KICAgICA8L2FudGNhbGw+CkBAIC0xODEsNyArMTgxLDcgQEAKIAogPCEtLSBjcmVhdGUgdGhlIGFwcGNsaWVudCBqYXIgZmlsZSB3aXRoIGN1c3RvbSBjbGFzc2VzLS0+CiA8dGFyZ2V0IG5hbWU9ImFwcGNsaWVudC1qYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgdmFsdWU9IioqLypMb2NhbCouY2xhc3MsKiovKlJlbW90ZSouY2xhc3MsKiovKkhvbWUqLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIgpAQCAtMjExLDExICsyMTEsMTEgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yYXIiPgotICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3IvcmEueG1sIiAKKyAgICA8Y29weSBmaWxlPSJkZXNjcmlwdG9yL3JhLnhtbCIKICAgICAgICAgdG9maWxlPSIke2Fzc2VtYmxlLmRpcn0vcmFyL01FVEEtSU5GL3JhLnhtbCIvPgotICAgIDxjb3B5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9zcWV0ZXN0cy9jb25uZWN0b3IvbGliL2NjaWJsYWNrYm94LXR4LmphciIgCisgICAgPGNvcHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L3NxZXRlc3RzL2Nvbm5lY3Rvci9saWIvY2NpYmxhY2tib3gtdHguamFyIgogICAgICAgICB0b2ZpbGU9IiR7YXNzZW1ibGUuZGlyfS9yYXIvY2NpYmxhY2tib3gtdHguamFyIi8+Ci0gICAgPHJlcGxhY2UgZmlsZT0iJHthc3NlbWJsZS5kaXJ9L3Jhci9NRVRBLUlORi9yYS54bWwiIAorICAgIDxyZXBsYWNlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9yYXIvTUVUQS1JTkYvcmEueG1sIgogICAgICAgICB0b2tlbj0iREJVUkwiIHZhbHVlPSIke2RiLnVybH0iLz4KIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvY2NpL2NsaWVudC9Db2ZmZWVDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9jY2kvY2xpZW50L0NvZmZlZUNsaWVudC5qYXZhCmluZGV4IGQ4YzI2YTMuLmZhYTBjMGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9jY2kvY2xpZW50L0NvZmZlZUNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9jY2kvY2xpZW50L0NvZmZlZUNsaWVudC5qYXZhCkBAIC0zMCwxNyArMzAsMTcgQEAKICAgICAgICBTdHJpbmcgdGVzdElkID0gIkoyRUUgQ29ubmVjdG9ycyAxLjUgOiBTdGFuZGFsb25lIGFkYXB0ZXIgdGVzdHMiOwogICAgICAgIHRyeSB7CiAKLQkgICBpZiAoYXJncy5sZW5ndGggPT0gMSkgewotCSAgICAgICB0ZXN0SWQgPSBhcmdzWzBdOwotCSAgIH0KKyAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMSkgeworICAgICAgICAgICB0ZXN0SWQgPSBhcmdzWzBdOworICAgICAgIH0KIAogICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4odGVzdElkICsgIiA6IENvZmZlZUNsaWVudCBzdGFydGVkIGluIG1haW4uLi4iKTsKLQkgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJKMkVFIENvbm5lY3RvcnMgMS41IDogU3RhbmRhbG9uZSBDQ0kgYWRhcHRlciBUZXN0cyIpOworICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkoyRUUgQ29ubmVjdG9ycyAxLjUgOiBTdGFuZGFsb25lIENDSSBhZGFwdGVyIFRlc3RzIik7CiAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUNvZmZlZSIpOwogCi0gICAgICAgICAgIENvZmZlZVJlbW90ZUhvbWUgaG9tZSA9IAotICAgICAgICAgICAgICAgKENvZmZlZVJlbW90ZUhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgIENvZmZlZVJlbW90ZUhvbWUgaG9tZSA9CisgICAgICAgICAgICAgICAoQ29mZmVlUmVtb3RlSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZmZlZVJlbW90ZUhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgIENvZmZlZVJlbW90ZSBjb2ZmZWUgPSBob21lLmNyZWF0ZSgpOwpAQCAtNTUsMjIgKzU1LDIyIEBACiAKICAgICAgICAgICAgaW50IG5ld0NvdW50ID0gY29mZmVlLmdldENvZmZlZUNvdW50KCk7CiAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ29mZmVlIGNvdW50ID0gIiArIG5ld0NvdW50KTsKLQkgICBpZiAoY291bnQ9PShuZXdDb3VudC0zKSkgewotCQlzdGF0LmFkZFN0YXR1cygiQ29ubmVjdG9yOmNjaSBDb25uZWN0b3IgIiArIHRlc3RJZCArICIgcmFyIFRlc3Qgc3RhdHVzOiIsc3RhdC5QQVNTKTsKLQkgICB9ZWxzZXsKLQkJc3RhdC5hZGRTdGF0dXMoIkNvbm5lY3RvcjpjY2kgQ29ubmVjdG9yICIgKyB0ZXN0SWQgKyAiIHJhciBUZXN0IHN0YXR1czoiLHN0YXQuRkFJTCk7Ci0JICAgfQorICAgICAgIGlmIChjb3VudD09KG5ld0NvdW50LTMpKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJDb25uZWN0b3I6Y2NpIENvbm5lY3RvciAiICsgdGVzdElkICsgIiByYXIgVGVzdCBzdGF0dXM6IixzdGF0LlBBU1MpOworICAgICAgIH1lbHNleworICAgICAgICBzdGF0LmFkZFN0YXR1cygiQ29ubmVjdG9yOmNjaSBDb25uZWN0b3IgIiArIHRlc3RJZCArICIgcmFyIFRlc3Qgc3RhdHVzOiIsc3RhdC5GQUlMKTsKKyAgICAgICB9CiAKLQkgICAvL3ByaW50IHRlc3Qgc3VtbWFyeQotCSAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CisgICAgICAgLy9wcmludCB0ZXN0IHN1bW1hcnkKKyAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOwogCiAKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gdW5leHBlY3RlZCBleGNlcHRpb24hIik7Ci0JICAgc3RhdC5hZGRTdGF0dXMoIkNvbm5lY3RvcjpDQ0kgQ29ubmVjdG9yICIgKyB0ZXN0SWQgKyAiIHJhciBUZXN0IHN0YXR1czoiLHN0YXQuRkFJTCk7CisgICAgICAgc3RhdC5hZGRTdGF0dXMoIkNvbm5lY3RvcjpDQ0kgQ29ubmVjdG9yICIgKyB0ZXN0SWQgKyAiIHJhciBUZXN0IHN0YXR1czoiLHN0YXQuRkFJTCk7CiAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgIH0KLSAgIH0gCisgICB9CiAKIAotfSAKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9jY2kvZWpiL0NvZmZlZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2Nvbm5lY3Rvci9jY2kvZWpiL0NvZmZlZUJlYW4uamF2YQppbmRleCAyODgzNTg5Li5mZjFhODVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb25uZWN0b3IvY2NpL2VqYi9Db2ZmZWVCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29ubmVjdG9yL2NjaS9lamIvQ29mZmVlQmVhbi5qYXZhCkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgICAgICBJbmRleGVkUmVjb3JkIGlSZWMgPSByZi5jcmVhdGVJbmRleGVkUmVjb3JkKCJJbnB1dFJlY29yZCIpOwogICAgICAgICAgICAgUmVjb3JkIG9SZWMgPSBpeC5leGVjdXRlKGlTcGVjLCBpUmVjKTsKICAgICAgICAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gKChJbmRleGVkUmVjb3JkKW9SZWMpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZShpdGVyYXRvci5oYXNOZXh0KCkpIHsgICAKKyAgICAgICAgICAgIHdoaWxlKGl0ZXJhdG9yLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgIE9iamVjdCBvYmogPSBpdGVyYXRvci5uZXh0KCk7CiAgICAgICAgICAgICAgICAgaWYob2JqIGluc3RhbmNlb2YgSW50ZWdlcikgewogICAgICAgICAgICAgICAgICAgICBjb3VudCA9ICgoSW50ZWdlcilvYmopLmludFZhbHVlKCk7CkBAIC05OSwxMSArOTksMTEgQEAKICAgICBwcml2YXRlIENvbm5lY3Rpb24gZ2V0Q0NJQ29ubmVjdGlvbigpIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCI8PT09PT09PT09PSBJTiBnZXQgY2NpIENvbm5lY3Rpb24gPT09PT09PT09PT0+Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCI8PT09PT09PT09PSBJTiBnZXQgY2NpIENvbm5lY3Rpb24gPT09PT09PT09PT0+Iik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb25uZWN0aW9uU3BlYyBzcGVjID0gbmV3IENjaUNvbm5lY3Rpb25TcGVjKCJEQlVTRVIiLCAiREJQQVNTV09SRCIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiPD09PT09PT09PT0gQ3JlYXRlZCBJU3BlYyA9PT09PT09PT09PT4iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkNGIHZhbHVlIDogIiArIGNmKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjw9PT09PT09PT09IENyZWF0ZWQgSVNwZWMgPT09PT09PT09PT0+Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDRiB2YWx1ZSA6ICIgKyBjZik7CiAgICAgICAgICAgICBjb24gPSBjZi5nZXRDb25uZWN0aW9uKHNwZWMpOwogICAgICAgICB9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0xMjMsNCArMTIzLDQgQEAKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9CiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIAotfSAKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2NvcmJhL3NyYy9TZXJ2ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2NvcmJhL3NyYy9TZXJ2ZXIuamF2YQppbmRleCA1YmFlM2FiLi5jNmEwODMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9jb3JiYS9zcmMvU2VydmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvY29yYmEvc3JjL1NlcnZlci5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiBwdWJsaWMgY2xhc3MgU2VydmVyIHsKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0dXMgPQotCQkgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOworICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBmaW5hbCBTdHJpbmcgc3VpdGVJZCA9ICJDT1JCQSI7CkBAIC04MCw3ICs4MCw3IEBACiAKICAgICAgICAgICAgIE5hbWVDb21wb25lbnRbXSBuYW1lcyA9IHsgbmV3IE5hbWVDb21wb25lbnQoIlJlbW90ZVRlc3QiLCAiIikgfTsKICAgICAgICAgICAgIG5hbWluZ0NvbnRleHQucmViaW5kKG5hbWVzLCByZWYpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlYmluZCBuYW1lc2VydmljZSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlYmluZCBuYW1lc2VydmljZSIpOwogCiAgICAgICAgICAgICBPUkIgY2xpZW50T1JCID0gT1JCLmluaXQoYXJncywgU3lzdGVtLmdldFByb3BlcnRpZXMoKSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYXJnc1swXSk7CkBAIC05OCw3ICs5OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluY2x1ZGUgL3Vzci9saWIvbXBzIGluIHRoZSBMRF9MSUJSQVJZX1BBVEggIisKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIHNvbGFyaXMiKTsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICAgICAgICBzdGF0dXMucHJpbnRTdW1tYXJ5KCJjb3JiYUlEIik7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0IGRvbmUuIGV4aXRpbmciKTsKICAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9idWlsZC54bWwKaW5kZXggNjBkNDc0OS4uY2NmZGFkNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9idWlsZC54bWwKQEAgLTg5LDE2ICs4OSwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+IFVzYWdlOgotCQlhbnQgcm9iZWFuIChFeGVjdXRlcyB0aGUgZW5yb2xsZXIgdGVzdHMpCi0JCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiIGJtcCB0ZXN0cykKLQkJYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBlamIgYm1wIHRlc3RzKQotCQlhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGVqYiBibXAgdGVzdHMpCi0JCWFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBibXAgdGVzdHMpCi0JCWFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBlamIgYm1wIGFwcHMpCi0JCWFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgZWpiIGJtcCB0ZXN0cykKLQkJYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSBibXAgYXBwcykKLQkJYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBibXAgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPiBVc2FnZToKKyAgICAgICAgYW50IHJvYmVhbiAoRXhlY3V0ZXMgdGhlIGVucm9sbGVyIHRlc3RzKQorICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYiBibXAgdGVzdHMpCisgICAgICAgIGFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgZWpiIGJtcCB0ZXN0cykKKyAgICAgICAgYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBlamIgYm1wIHRlc3RzKQorICAgICAgICBhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgYm1wIHRlc3RzKQorICAgICAgICBhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgZWpiIGJtcCBhcHBzKQorICAgICAgICBhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGVqYiBibXAgdGVzdHMpCisgICAgICAgIGFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgYm1wIGFwcHMpCisgICAgICAgIGFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3IgYm1wIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvZW5yb2xsZXIvYnVpbGQtbmcueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9idWlsZC1uZy54bWwKaW5kZXggZjFiNTZlYi4uYjRhODIwMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9idWlsZC1uZy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9idWlsZC1uZy54bWwKQEAgLTMyLDE3ICszMiwxNyBAQAogICAgICZydW47CiAKICAgPCEtLSAgPHRhcmdldCBuYW1lPSJhbGwiPgotCTxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJhdXRvZGVwbG95Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJydW4iLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgotCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJydW4iLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImF1dG9kZXBsb3kiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1biIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3kiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3kiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1biIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3kiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CiAgICAgPC90YXJnZXQ+IC0tPgogCkBAIC01Miw3ICs1Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC02NCwxMyArNjQsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qU3R1ZGVudCouY2xhc3MsKiovKkVucm9sbGVyKi5jbGFzcywqKi8qQ291cnNlKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9Db3Vyc2UuY2xhc3MsKiovRW5yb2xsZXIuY2xhc3MsKiovU3R1ZGVudC5jbGFzcywqKi8qSG9tZSouY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KQEAgLTc4LDE0ICs3OCwxNCBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJibXBFbnJvbGxlclBvb2wiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2JtcC1lbnJvbGxlckRCIi8+Ci0JPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+CisgICAgPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nIHZpYSBhc2FkbWluLi4uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9IiBmYWlsb25lcnJvcj0iZmFsc2UiPgpAQCAtMTAzLDEyICsxMDMsMTIgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICA8IS0tICAgIDxlY2hvIG1lc3NhZ2U9IlNIRUVUQUwgOiBidWcgZHVyaW5nIHVuZGVwbG95bWVudC4gVGhlIGdlbmVyYXRlZCBkaXIgZG9lcyBub3QgZ2V0IGRlbGV0ZWQuIEhlbmNlIGZvcmNpbmcgZGVsZXRpb24gYXMgYSB0ZW1wb3Jhcnkgc29sdXRpb24uIi8+CiAgICAgICA8ZGVsZXRlIGRpcj0iJHtkZXBsb3llZC1hcHBzfS8ke2FwcG5hbWV9QXBwXzEiLz4gLS0+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KQEAgLTExOCw3ICsxMTgsNyBAQAogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJibXBFbnJvbGxlclBvb2wiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvYm1wLWVucm9sbGVyREIiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpAQCAtMTM1LDcgKzEzNSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImF1dG9kZXBsb3ktZWFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRyb3BwaW5nIHRoZSBhcHAgdW5kZXIgdGhlIGF1dG9kZXBsb3kgZGlyLi4uIi8+Ci0JPGRlbGV0ZSBmaWxlPSIke2F1dG9kZXBsb3kuZGlyfS8ke2FwcG5hbWV9QXBwLmVhcl9kZXBsb3llZCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgPGRlbGV0ZSBmaWxlPSIke2F1dG9kZXBsb3kuZGlyfS8ke2FwcG5hbWV9QXBwLmVhcl9kZXBsb3llZCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIKICAgICAgICAgICAgIHRvZGlyPSIke2F1dG9kZXBsb3kuZGlyfSIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk3YmQ5NGMuLjc4YzlmODEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvZW5yb2xsZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL2Vucm9sbGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZW5yb2xsZXIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWVucm9sbGVyIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImRlZmF1bHQtaW5zdGFuY2UiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL2Vucm9sbGVyL2J1aWxkLnhtbAppbmRleCBlMTRlZGY4Li5hYTlkMjBkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL2Vucm9sbGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL2Vucm9sbGVyL2J1aWxkLnhtbApAQCAtMzIsMTcgKzMyLDE3IEBACiAgICAgJnJ1bjsKIAogICA8IS0tICA8dGFyZ2V0IG5hbWU9ImFsbCI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgotCTxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImF1dG9kZXBsb3kiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1biIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3kiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3kiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1biIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3kiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYXV0b2RlcGxveSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icnVuIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icnVuIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAiLz4KICAgICA8L3RhcmdldD4gLS0+CiAKQEAgLTUyLDcgKzUyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTY0LDEzICs2NCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLypTdHVkZW50Ki5jbGFzcywqKi8qRW5yb2xsZXIqLmNsYXNzLCoqLypDb3Vyc2UqLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL0NvdXJzZS5jbGFzcywqKi9FbnJvbGxlci5jbGFzcywqKi9TdHVkZW50LmNsYXNzLCoqLypIb21lKi5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtNzgsMTQgKzc4LDE0IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImJtcEVucm9sbGVyUG9vbCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvYm1wLWVucm9sbGVyREIiLz4KLQk8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4KKyAgICA8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgdmlhIGFzYWRtaW4uLi4iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KQEAgLTk5LDEyICs5OSwxMiBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgIDwhLS0gICAgPGVjaG8gbWVzc2FnZT0iU0hFRVRBTCA6IGJ1ZyBkdXJpbmcgdW5kZXBsb3ltZW50LiBUaGUgZ2VuZXJhdGVkIGRpciBkb2VzIG5vdCBnZXQgZGVsZXRlZC4gSGVuY2UgZm9yY2luZyBkZWxldGlvbiBhcyBhIHRlbXBvcmFyeSBzb2x1dGlvbi4iLz4KICAgICAgIDxkZWxldGUgZGlyPSIke2RlcGxveWVkLWFwcHN9LyR7YXBwbmFtZX1BcHBfMSIvPiAtLT4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgpAQCAtMTE0LDcgKzExNCw3IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImJtcEVucm9sbGVyUG9vbCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9ibXAtZW5yb2xsZXJEQiIvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CkBAIC0xMzEsNyArMTMxLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYXV0b2RlcGxveS1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iRHJvcHBpbmcgdGhlIGFwcCB1bmRlciB0aGUgYXV0b2RlcGxveSBkaXIuLi4iLz4KLQk8ZGVsZXRlIGZpbGU9IiR7YXV0b2RlcGxveS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyX2RlcGxveWVkIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICA8ZGVsZXRlIGZpbGU9IiR7YXV0b2RlcGxveS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyX2RlcGxveWVkIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIgogICAgICAgICAgICAgdG9kaXI9IiR7YXV0b2RlcGxveS5kaXJ9Ii8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL2Vucm9sbGVyL2NsaWVudC9FbnJvbGxlckNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9jbGllbnQvRW5yb2xsZXJDbGllbnQuamF2YQppbmRleCA5MjY2NDg0Li41MDVkNjRjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL2Vucm9sbGVyL2NsaWVudC9FbnJvbGxlckNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvZW5yb2xsZXIvY2xpZW50L0Vucm9sbGVyQ2xpZW50LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogLyoqCi0gKiBBIHNpbXBsZSBqYXZhIGNsaWVudCB3aWxsOiAKKyAqIEEgc2ltcGxlIGphdmEgY2xpZW50IHdpbGw6CiAgKiA8dWw+CiAgKiA8bGk+TG9jYXRlcyB0aGUgaG9tZSBpbnRlcmZhY2Ugb2YgdGhlIGVudGVycHJpc2UgYmVhbgogICogPGxpPkdldHMgYSByZWZlcmVuY2UgdG8gdGhlIHJlbW90ZSBpbnRlcmZhY2UKQEAgLTM2LDExICszNiwxMSBAQAogICAgIHByaXZhdGUgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7IAotICAgICAgICBFbnJvbGxlckNsaWVudCBjbGllbnQgPSBuZXcgRW5yb2xsZXJDbGllbnQoKTsgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBFbnJvbGxlckNsaWVudCBjbGllbnQgPSBuZXcgRW5yb2xsZXJDbGllbnQoKTsKIAogICAgICAgICAvLyBydW4gdGhlIHRlc3RzCi0gICAgICAgIGNsaWVudC5ydW5UZXN0Q2xpZW50KCk7ICAgCisgICAgICAgIGNsaWVudC5ydW5UZXN0Q2xpZW50KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuVGVzdENsaWVudCgpIHsKQEAgLTU5LDIyICs1OSwyMiBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVN0dWRlbnQiKTsKLSAgICAgICAgICAgIFN0dWRlbnRIb21lIHNIb21lID0gCi0gICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgIFN0dWRlbnRIb21lIHNIb21lID0KKyAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R1ZGVudEhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgICBTdHVkZW50IGRlbmlzZSA9IHNIb21lLmNyZWF0ZSgiODIzIiwgIkRlbmlzZSBTbWl0aCIpOwogCiAgICAgICAgICAgICBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQ291cnNlIik7Ci0gICAgICAgICAgICBDb3Vyc2VIb21lIGNIb21lID0gCi0gICAgICAgICAgICAgICAgKENvdXJzZUhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgQ291cnNlSG9tZSBjSG9tZSA9CisgICAgICAgICAgICAgICAgKENvdXJzZUhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3Vyc2VIb21lLmNsYXNzKTsKIAogICAgICAgICAgICAgQ291cnNlIHBvd2VyID0gY0hvbWUuY3JlYXRlKCIyMjAiLCAiUG93ZXIgSjJFRSBQcm9ncmFtbWluZyIpOwogCiAgICAgICAgICAgICBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlRW5yb2xsZXIiKTsKLSAgICAgICAgICAgIEVucm9sbGVySG9tZSBlSG9tZSA9IAotICAgICAgICAgICAgICAgIChFbnJvbGxlckhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgRW5yb2xsZXJIb21lIGVIb21lID0KKyAgICAgICAgICAgICAgICAoRW5yb2xsZXJIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnJvbGxlckhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgICBFbnJvbGxlciBlbnJvbGxlciA9IGVIb21lLmNyZWF0ZSgpOwpAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb3Vyc2VJZCArICIgIiArIGNvdXJzZS5nZXROYW1lKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7Ci0gCisKICAgICAgICAgICAgIENvdXJzZSBpbnRybyA9IGNIb21lLmZpbmRCeVByaW1hcnlLZXkoIjc3NyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGludHJvLmdldE5hbWUoKSArICI6Iik7CiAgICAgICAgICAgICBjb3Vyc2VzID0gaW50cm8uZ2V0U3R1ZGVudElkcygpOwpAQCAtMTAzLDEyICsxMDMsMTIgQEAKICAgICAgICAgICAgICAgICBTdHVkZW50IHN0dWRlbnQgPSBzSG9tZS5maW5kQnlQcmltYXJ5S2V5KHN0dWRlbnRJZCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHN0dWRlbnRJZCArICIgIiArIHN0dWRlbnQuZ2V0TmFtZSgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAKKwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVucm9sbGVyIGJtcCIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVucm9sbGVyIGJtcCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiEiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgfSAKLX0gCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9lamIvQ291cnNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL2Vucm9sbGVyL2VqYi9Db3Vyc2UuamF2YQppbmRleCBkMmE0Njc0Li4wNWI5ZmMwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL2Vucm9sbGVyL2VqYi9Db3Vyc2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL2Vucm9sbGVyL2VqYi9Db3Vyc2UuamF2YQpAQCAtMjIsMjQgKzIyLDI0IEBACiAKIAogcHVibGljIGludGVyZmFjZSBDb3Vyc2UgZXh0ZW5kcyBFSkJPYmplY3QgewotIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhbiBhcnJheWxpc3Qgb2YgU3R1ZGVudElkcyB0YWtpbmcgdGhlIGNvdXJzZS4KLSAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbiAKKyAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgogICAgICAqLwogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0U3R1ZGVudElkcygpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjb3Vyc2UuCi0gICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24gCi0gICAgICogCisgICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KKyAgICAgKgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBuYW1lIG9mIHRoZSBjb3Vyc2UuCi0gICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24gCi0gICAgICogCisgICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KKyAgICAgKgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvZW5yb2xsZXIvZWpiL0NvdXJzZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvZW5yb2xsZXIvZWpiL0NvdXJzZUJlYW4uamF2YQppbmRleCBhYThlZWMwLi44MjJlYWY0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL2Vucm9sbGVyL2VqYi9Db3Vyc2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9lamIvQ291cnNlQmVhbi5qYXZhCkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICAgICAgICAgICAgICAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2pkYmMvYm1wLWVucm9sbGVyREIiKTsKICAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9FbnJvbGxlciIpOwotICAgICAgICAgICAgZW5yb2xsZXJIb21lID0gCisgICAgICAgICAgICBlbnJvbGxlckhvbWUgPQogICAgICAgICAgICAgICAgIChFbnJvbGxlckhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVucm9sbGVySG9tZS5jbGFzcyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9lamIvQ291cnNlSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9lamIvQ291cnNlSG9tZS5qYXZhCmluZGV4IGE5NjlhM2IuLmRlOGU0ZmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvZW5yb2xsZXIvZWpiL0NvdXJzZUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL2Vucm9sbGVyL2VqYi9Db3Vyc2VIb21lLmphdmEKQEAgLTMwLDEyICszMCwxMiBAQAogICAgICAqLwogICAgIHB1YmxpYyBDb3Vyc2UgY3JlYXRlKFN0cmluZyBjb3Vyc2VJZCwgU3RyaW5nIG5hbWUpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIENyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgYSByZWZlcmVuY2UgdG8gdGhlIHJlbW90ZSBpbnRlcmZhY2UgdG8gdGhlIENvdXJzZUJlYW4gb2JqZWN0IGJ5IFByaW1hcnkgS2V5LgogICAgICAqIEBleGNlcHRpb24gdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiBhbmQgUmVtb3RlRXhjZXB0aW9uLgogICAgICAqCiAgICAgICovCi0gICAgcHVibGljIENvdXJzZSBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBjb3Vyc2VJZCkgCisgICAgcHVibGljIENvdXJzZSBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBjb3Vyc2VJZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9lamIvRW5yb2xsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvZW5yb2xsZXIvZWpiL0Vucm9sbGVyLmphdmEKaW5kZXggMWVkODhmZC4uN2NkZWVlOCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9lamIvRW5yb2xsZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL2Vucm9sbGVyL2VqYi9FbnJvbGxlci5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCiBwdWJsaWMgaW50ZXJmYWNlIEVucm9sbGVyIGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAKKwogIC8qKgogICAqIEVucm9sbHMgYSBTdHVkZW50IGluIGEgY291cnNlCiAgICogQHBhcmFtIHN0dWRlbnRJZCBwcmltYXJ5IGtleSBvZiB0aGUgc3R1ZGVudCBvYmplY3QKQEAgLTQwLDcgKzQwLDcgQEAKICAgIHB1YmxpYyB2b2lkIHVuRW5yb2xsKFN0cmluZyBzdHVkZW50SWQsIFN0cmluZyBjb3Vyc2VJZCkKICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgLyoqCi0gICogRGVsZXRlcyBhIFN0dWRlbnQgCisgICogRGVsZXRlcyBhIFN0dWRlbnQKICAgKiBAcGFyYW0gc3R1ZGVudElkIHByaW1hcnkga2V5IG9mIHRoZSBzdHVkZW50IG9iamVjdAogICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCiAgICovCkBAIC00OSw3ICs0OSw3IEBACiAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgLyoqCi0gICogRGVsZXRlcyBhIENvdXJzZSAKKyAgKiBEZWxldGVzIGEgQ291cnNlCiAgICogQHBhcmFtIGNvdXJzZUlkIHByaW1hcnkga2V5IG9mIHRoZSBjb3Vyc2Ugb2JqZWN0CiAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvZW5yb2xsZXIvZWpiL0Vucm9sbGVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9lamIvRW5yb2xsZXJCZWFuLmphdmEKaW5kZXggY2U5ODc3Zi4uYTBiODQ3YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9lamIvRW5yb2xsZXJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9lamIvRW5yb2xsZXJCZWFuLmphdmEKQEAgLTE2LDcgKzE2LDcgQEAKIAogcGFja2FnZSBjb20uc3VuLnMxcGVxZS5lamIuYm1wLmVucm9sbGVyLmVqYjsKIAotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLio7CiBpbXBvcnQgamF2YS5zcWwuKjsKIGltcG9ydCBqYXZheC5zcWwuKjsKQEAgLTI0LDcgKzI0LDcgQEAKIGltcG9ydCBqYXZheC5uYW1pbmcuKjsKIAogcHVibGljIGNsYXNzIEVucm9sbGVyQmVhbiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKLSAKKwogICAgIHByaXZhdGUgQ29ubmVjdGlvbiBjb247CiAgICAgcHJpdmF0ZSBTdHJpbmcgZGJOYW1lID0gImphdmE6Y29tcC9lbnYvamRiYy9ibXAtZW5yb2xsZXJEQiI7CiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjb250ZXh0OwpAQCAtNTksNyArNTksNyBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIERlbGV0ZXMgYSBTdHVkZW50IAorICAgICAqIERlbGV0ZXMgYSBTdHVkZW50CiAgICAgICogQHBhcmFtIHN0dWRlbnRJZCBwcmltYXJ5IGtleSBvZiB0aGUgc3R1ZGVudCBvYmplY3QKICAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgogICAgICAqLwpAQCAtNzIsNyArNzIsNyBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIERlbGV0ZXMgYSBDb3Vyc2UgCisgICAgICogRGVsZXRlcyBhIENvdXJzZQogICAgICAqIEBwYXJhbSBjb3Vyc2VJZCBwcmltYXJ5IGtleSBvZiB0aGUgY291cnNlIG9iamVjdAogICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCiAgICAgICovCkBAIC0xNjIsNyArMTYyLDcgQEAKIAogICAgICAgICBTdHJpbmcgaW5zZXJ0U3RhdGVtZW50ID0KICAgICAgICAgICAgICJpbnNlcnQgaW50byBlbnJvbGxtZW50IHZhbHVlcyAoID8gLCA/ICkiOwotICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcmVwU3RtdCA9IAorICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcmVwU3RtdCA9CiAgICAgICAgICAgICBjb24ucHJlcGFyZVN0YXRlbWVudChpbnNlcnRTdGF0ZW1lbnQpOwogCiAgICAgICAgIHByZXBTdG10LnNldFN0cmluZygxLCBzdHVkZW50SWQpOwpAQCAtMTcyLDcgKzE3Miw3IEBACiAgICAgICAgIHByZXBTdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUVudHJ5KFN0cmluZyBzdHVkZW50SWQsIFN0cmluZyBjb3Vyc2VJZCkgCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUVudHJ5KFN0cmluZyBzdHVkZW50SWQsIFN0cmluZyBjb3Vyc2VJZCkKICAgICAgICAgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAKICAgICAgICAgU3RyaW5nIGRlbGV0ZVN0YXRlbWVudCA9CkBAIC0yMTUsMTMgKzIxNSwxMyBAQAogICAgICAgICBwcmVwU3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgQXJyYXlMaXN0IHNlbGVjdFN0dWRlbnQoU3RyaW5nIGNvdXJzZUlkKSAKKyAgICBwcml2YXRlIEFycmF5TGlzdCBzZWxlY3RTdHVkZW50KFN0cmluZyBjb3Vyc2VJZCkKICAgICAgICAgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAKICAgICAgICAgU3RyaW5nIHNlbGVjdFN0YXRlbWVudCA9CiAgICAgICAgICAgICAic2VsZWN0IHN0dWRlbnRpZCAiICsKICAgICAgICAgICAgICJmcm9tIGVucm9sbG1lbnQgd2hlcmUgY291cnNlaWQgPSA/ICI7Ci0gICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0gCisgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0KICAgICAgICAgICAgIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNlbGVjdFN0YXRlbWVudCk7CiAKICAgICAgICAgcHJlcFN0bXQuc2V0U3RyaW5nKDEsIGNvdXJzZUlkKTsKQEAgLTIzNywxMyArMjM3LDEzIEBACiAgICAgICAgIHJldHVybiBhOwogICAgIH0KIAotICAgIHByaXZhdGUgQXJyYXlMaXN0IHNlbGVjdENvdXJzZShTdHJpbmcgc3R1ZGVudElkKSAKKyAgICBwcml2YXRlIEFycmF5TGlzdCBzZWxlY3RDb3Vyc2UoU3RyaW5nIHN0dWRlbnRJZCkKICAgICAgICAgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAKICAgICAgICAgU3RyaW5nIHNlbGVjdFN0YXRlbWVudCA9CiAgICAgICAgICAgICAic2VsZWN0IGNvdXJzZWlkICIgKwogICAgICAgICAgICAgImZyb20gZW5yb2xsbWVudCB3aGVyZSBzdHVkZW50aWQgPSA/ICI7Ci0gICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0gCisgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0KICAgICAgICAgICAgIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNlbGVjdFN0YXRlbWVudCk7CiAKICAgICAgICAgcHJlcFN0bXQuc2V0U3RyaW5nKDEsIHN0dWRlbnRJZCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL2Vucm9sbGVyL2VqYi9TdHVkZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL2Vucm9sbGVyL2VqYi9TdHVkZW50LmphdmEKaW5kZXggNmE4YmQyOS4uY2UzY2VjNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9lamIvU3R1ZGVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvZW5yb2xsZXIvZWpiL1N0dWRlbnQuamF2YQpAQCAtMjIsOSArMjIsOSBAQAogCiAKIHB1YmxpYyBpbnRlcmZhY2UgU3R1ZGVudCBleHRlbmRzIEVKQk9iamVjdCB7Ci0gCisKICAgLyoqCi0gICAqIFJldHVybnMgdGhlIENvdXJzZUlkcyB0aGF0IGEgc3R1ZGVudCBpcyBlbnJvbGxlZCBpbi4gCisgICAqIFJldHVybnMgdGhlIENvdXJzZUlkcyB0aGF0IGEgc3R1ZGVudCBpcyBlbnJvbGxlZCBpbi4KICAgICogQHBhcmFtIHN0dWRlbnRJZCBwcmltYXJ5IGtleSBvZiB0aGUgc3R1ZGVudCBvYmplY3QKICAgICogQHBhcmFtIGNvdXJzZUlkIHByaW1hcnkga2V5IG9mIHRoZSBjb3Vyc2Ugb2JqZWN0CiAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL2Vucm9sbGVyL2VqYi9TdHVkZW50QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9lamIvU3R1ZGVudEJlYW4uamF2YQppbmRleCBiNDVlNTE3Li4wODU4YjBhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL2Vucm9sbGVyL2VqYi9TdHVkZW50QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvZW5yb2xsZXIvZWpiL1N0dWRlbnRCZWFuLmphdmEKQEAgLTk4LDcgKzk4LDcgQEAKICAgICAgICAgY291cnNlSWRzID0gbmV3IEFycmF5TGlzdCgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIGRhdGFTb3VyY2UgPSAKKyAgICAgICAgICAgIGRhdGFTb3VyY2UgPQogICAgICAgICAgICAgICAgIChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvamRiYy9ibXAtZW5yb2xsZXJEQiIpOwogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0Vucm9sbGVyIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL2Vucm9sbGVyL2VqYi9TdHVkZW50SG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9lamIvU3R1ZGVudEhvbWUuamF2YQppbmRleCAyYWUzZGU1Li5mY2E1NDQ2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL2Vucm9sbGVyL2VqYi9TdHVkZW50SG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvZW5yb2xsZXIvZWpiL1N0dWRlbnRIb21lLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgKiBAZXhjZXB0aW9uIHRocm93cyBGaW5kZXJFeGNlcHRpb24gYW5kIFJlbW90ZUV4Y2VwdGlvbi4KICAgICAgKgogICAgICAqLwotIAotICAgIHB1YmxpYyBTdHVkZW50IGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHN0dWRlbnRJZCkgCisKKyAgICBwdWJsaWMgU3R1ZGVudCBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBzdHVkZW50SWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvZW5yb2xsZXIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggMjA1ZDYwZi4uOTYzYTkyMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsMzcgKzEsMzcgQEAKLWNyZWF0ZSB0YWJsZSBzdHVkZW50IA0KLShzdHVkZW50aWQgdmFyY2hhcigzKSBjb25zdHJhaW50IHBrX3N0dWRlbnQgcHJpbWFyeSBrZXksICANCi1uYW1lIHZhcmNoYXIoMzYpKTsNCi0NCi1pbnNlcnQgaW50byBzdHVkZW50DQotdmFsdWVzICgnMTIzJywgJ1NhbCBKb25lcycpOw0KLWluc2VydCBpbnRvIHN0dWRlbnQNCi12YWx1ZXMgKCcyMjEnLCAnQWxpY2UgU21pdGgnKTsNCi1pbnNlcnQgaW50byBzdHVkZW50DQotdmFsdWVzICgnMzg4JywgJ0VsaXphYmV0aCBXaWxsaXMnKTsNCi1pbnNlcnQgaW50byBzdHVkZW50DQotdmFsdWVzICgnNDU2JywgJ0pvZSBTbWl0aCcpOw0KLQ0KLQ0KLWNyZWF0ZSB0YWJsZSBjb3Vyc2UgDQotKGNvdXJzZWlkIHZhcmNoYXIoMykgY29uc3RyYWludCBwa19jb3Vyc2UgcHJpbWFyeSBrZXksICANCi1uYW1lIHZhcmNoYXIoMzYpKTsNCi0NCi1pbnNlcnQgaW50byBjb3Vyc2UNCi12YWx1ZXMgKCc5OTknLCAnQWR2YW5jZWQgSmF2YSBQcm9ncmFtbWluZycpOw0KLWluc2VydCBpbnRvIGNvdXJzZQ0KLXZhbHVlcyAoJzExMScsICdKMkVFIGZvciBTbWFydCBQZW9wbGUnKTsNCi1pbnNlcnQgaW50byBjb3Vyc2UNCi12YWx1ZXMgKCczMzMnLCAnWE1MIE1hZGUgRWFzeScpOw0KLWluc2VydCBpbnRvIGNvdXJzZQ0KLXZhbHVlcyAoJzc3NycsICdBbiBJbnRyb2R1Y3Rpb24gdG8gSmF2YSBQcm9ncmFtbWluZycpOw0KLQ0KLWNyZWF0ZSB0YWJsZSBlbnJvbGxtZW50DQotKHN0dWRlbnRpZCB2YXJjaGFyKDMpLCAgDQotY291cnNlaWQgdmFyY2hhcigzKSwgIA0KLWNvbnN0cmFpbnQgZmtfc3R1ZGVudGlkDQotZm9yZWlnbiBrZXkgKHN0dWRlbnRpZCkNCi1yZWZlcmVuY2VzIHN0dWRlbnQoc3R1ZGVudGlkKSwNCi1jb25zdHJhaW50IGZrX2NvdXJzZWlkDQotZm9yZWlnbiBrZXkgKGNvdXJzZWlkKQ0KLXJlZmVyZW5jZXMgY291cnNlKGNvdXJzZWlkKSk7DQotDQorY3JlYXRlIHRhYmxlIHN0dWRlbnQKKyhzdHVkZW50aWQgdmFyY2hhcigzKSBjb25zdHJhaW50IHBrX3N0dWRlbnQgcHJpbWFyeSBrZXksCituYW1lIHZhcmNoYXIoMzYpKTsKKworaW5zZXJ0IGludG8gc3R1ZGVudAordmFsdWVzICgnMTIzJywgJ1NhbCBKb25lcycpOworaW5zZXJ0IGludG8gc3R1ZGVudAordmFsdWVzICgnMjIxJywgJ0FsaWNlIFNtaXRoJyk7CitpbnNlcnQgaW50byBzdHVkZW50Cit2YWx1ZXMgKCczODgnLCAnRWxpemFiZXRoIFdpbGxpcycpOworaW5zZXJ0IGludG8gc3R1ZGVudAordmFsdWVzICgnNDU2JywgJ0pvZSBTbWl0aCcpOworCisKK2NyZWF0ZSB0YWJsZSBjb3Vyc2UKKyhjb3Vyc2VpZCB2YXJjaGFyKDMpIGNvbnN0cmFpbnQgcGtfY291cnNlIHByaW1hcnkga2V5LAorbmFtZSB2YXJjaGFyKDM2KSk7CisKK2luc2VydCBpbnRvIGNvdXJzZQordmFsdWVzICgnOTk5JywgJ0FkdmFuY2VkIEphdmEgUHJvZ3JhbW1pbmcnKTsKK2luc2VydCBpbnRvIGNvdXJzZQordmFsdWVzICgnMTExJywgJ0oyRUUgZm9yIFNtYXJ0IFBlb3BsZScpOworaW5zZXJ0IGludG8gY291cnNlCit2YWx1ZXMgKCczMzMnLCAnWE1MIE1hZGUgRWFzeScpOworaW5zZXJ0IGludG8gY291cnNlCit2YWx1ZXMgKCc3NzcnLCAnQW4gSW50cm9kdWN0aW9uIHRvIEphdmEgUHJvZ3JhbW1pbmcnKTsKKworY3JlYXRlIHRhYmxlIGVucm9sbG1lbnQKKyhzdHVkZW50aWQgdmFyY2hhcigzKSwKK2NvdXJzZWlkIHZhcmNoYXIoMyksCitjb25zdHJhaW50IGZrX3N0dWRlbnRpZAorZm9yZWlnbiBrZXkgKHN0dWRlbnRpZCkKK3JlZmVyZW5jZXMgc3R1ZGVudChzdHVkZW50aWQpLAorY29uc3RyYWludCBma19jb3Vyc2VpZAorZm9yZWlnbiBrZXkgKGNvdXJzZWlkKQorcmVmZXJlbmNlcyBjb3Vyc2UoY291cnNlaWQpKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9lbnJvbGxlci9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDJkMGVkMTUuLjA2ZTU3MDUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvZW5yb2xsZXIvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL2Vucm9sbGVyL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEsMyArMSwzIEBACi1kcm9wIHRhYmxlIGVucm9sbG1lbnQ7DQotZHJvcCB0YWJsZSBzdHVkZW50Ow0KLWRyb3AgdGFibGUgY291cnNlOw0KK2Ryb3AgdGFibGUgZW5yb2xsbWVudDsKK2Ryb3AgdGFibGUgc3R1ZGVudDsKK2Ryb3AgdGFibGUgY291cnNlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vYnVpbGQtbmcueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vYnVpbGQtbmcueG1sCmluZGV4IDNkZDIyMzQuLjNkNWQwZWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL2J1aWxkLW5nLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi9idWlsZC1uZy54bWwKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAmdGVzdHByb3BlcnRpZXM7CiAgICAgJnJ1bjsKIAotIAorCiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsc2V0dXAsZGVwbG95LHJ1bix1bmRlcGxveSx1bnNldHVwIi8+CiAgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJ1bix1bmRlcGxveSIvPgpAQCAtMzksNyArMzksNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTEsMTMgKzUxLDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovQWRkcmVzcyouY2xhc3MsKiovQ3VzdG9tZXIqLmNsYXNzLCoqL1BLU3RyaW5nKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9BZGRyZXNzKi5jbGFzcywqKi9DdXN0b21lciouY2xhc3MsKiovUEtTdHJpbmcqLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uLGNvbXBpbGUiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJzcWwvY3JlYXRlXyR7ZGIudHlwZX0uc3FsIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KQEAgLTY2LDE5ICs2NiwxOSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJibXAtcm9iZWFuLXBvb2wiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2JtcC1yb2JlYW4iLz4KLQk8L2FudGNhbGw+CQorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgdmlhIGFzYWRtaW4uLi4iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgICA8dGFyZ2V0IG5hbWU9InNxbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV8ke2RiLnR5cGV9LnNxbCIvPgogICAgIDwvYW50Y2FsbD4KLSAgICAKKwogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTg3LDEwICs4NywxMCBAQAogICAgICAgICAgPGVudiBrZXk9IkFQUENQQVRIIiBwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3Rlc3RuZy5qYXIiLz4KICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iPgpAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF8ke2RiLnR5cGV9LnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CkBAIC0xMTcsNyArMTE3LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYXV0b2RlcGxveS1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iRHJvcHBpbmcgdGhlIGFwcCB1bmRlciB0aGUgYXV0b2RlcGxveSBkaXIuLi4iLz4KLQk8ZGVsZXRlIGZpbGU9IiR7YXV0b2RlcGxveS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyX2RlcGxveWVkIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICA8ZGVsZXRlIGZpbGU9IiR7YXV0b2RlcGxveS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyX2RlcGxveWVkIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIgogICAgICAgICAgICAgdG9kaXI9IiR7YXV0b2RlcGxveS5kaXJ9Ii8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vYnVpbGQucHJvcGVydGllcwppbmRleCBmYzE0MTNjLi5kMDZlMDU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcm9iZWFuIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yb2JlYW4iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iZGVmYXVsdC1pbnN0YW5jZSIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi9idWlsZC54bWwKaW5kZXggMWZjYWQ4Yi4uYjA3NDg3OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL2J1aWxkLnhtbApAQCAtMzEsNyArMzEsNyBAQAogICAgICZ0ZXN0cHJvcGVydGllczsKICAgICAmcnVuOwogCi0gCisKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxzZXR1cCxkZXBsb3kscnVuLHVuZGVwbG95LHVuc2V0dXAiLz4KICAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0IiBkZXBlbmRzPSJidWlsZCxkZXBsb3kscnVuLHVuZGVwbG95Ii8+CkBAIC0zOSw3ICszOSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MSwxMyArNTEsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9BZGRyZXNzKi5jbGFzcywqKi9DdXN0b21lciouY2xhc3MsKiovUEtTdHJpbmcqLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL0FkZHJlc3MqLmNsYXNzLCoqL0N1c3RvbWVyKi5jbGFzcywqKi9QS1N0cmluZyouY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24sY29tcGlsZSI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9InNxbC9jcmVhdGVfJHtkYi50eXBlfS5zcWwiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgpAQCAtNjYsMjggKzY2LDI4IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImJtcC1yb2JlYW4tcG9vbCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvYm1wLXJvYmVhbiIvPgotCTwvYW50Y2FsbD4JCisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyB2aWEgYXNhZG1pbi4uLiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgIDx0YXJnZXQgbmFtZT0ic3FsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlXyR7ZGIudHlwZX0uc3FsIi8+CiAgICAgPC9hbnRjYWxsPgotICAgIAorCiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtY29tbW9uIj4KQEAgLTk3LDcgKzk3LDcgQEAKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wXyR7ZGIudHlwZX0uc3FsIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KQEAgLTExNCw3ICsxMTQsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJhdXRvZGVwbG95LWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJEcm9wcGluZyB0aGUgYXBwIHVuZGVyIHRoZSBhdXRvZGVwbG95IGRpci4uLiIvPgotCTxkZWxldGUgZmlsZT0iJHthdXRvZGVwbG95LmRpcn0vJHthcHBuYW1lfUFwcC5lYXJfZGVwbG95ZWQiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgIDxkZWxldGUgZmlsZT0iJHthdXRvZGVwbG95LmRpcn0vJHthcHBuYW1lfUFwcC5lYXJfZGVwbG95ZWQiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiCiAgICAgICAgICAgICB0b2Rpcj0iJHthdXRvZGVwbG95LmRpcn0iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL2NsaWVudC9ST0JDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL2NsaWVudC9ST0JDbGllbnQuamF2YQppbmRleCBmYmI5M2IxLi40ZWY0Mzg2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi9jbGllbnQvUk9CQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vY2xpZW50L1JPQkNsaWVudC5qYXZhCkBAIC0yMCwxMyArMjAsMTMgQEAKIGltcG9ydCBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQ7CiBpbXBvcnQgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0OwogaW1wb3J0IGphdmEudXRpbC4qOwotaW1wb3J0IHNhbXBsZXMuZWpiLmJtcC5yb2JlYW4uZWpiLio7IAoraW1wb3J0IHNhbXBsZXMuZWpiLmJtcC5yb2JlYW4uZWpiLio7CiBpbXBvcnQgY29tLnN1bi5lamIuUmVhZE9ubHlCZWFuTm90aWZpZXI7CiBpbXBvcnQgY29tLnN1bi5lamIuY29udGFpbmVycy5SZWFkT25seUJlYW5IZWxwZXI7CiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIC8qKgotICogQSBzaW1wbGUgamF2YSBjbGllbnQgd2lsbDogCisgKiBBIHNpbXBsZSBqYXZhIGNsaWVudCB3aWxsOgogICogPHVsPgogICogPGxpPkxvY2F0ZXMgdGhlIGhvbWUgaW50ZXJmYWNlIG9mIHRoZSBlbnRlcnByaXNlIGJlYW4KICAqIDxsaT5HZXRzIGEgcmVmZXJlbmNlIHRvIHRoZSByZW1vdGUgaW50ZXJmYWNlCkBAIC01MSwxMCArNTEsMTAgQEAKIAogICAgIHByaXZhdGUgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgUk9CQ2xpZW50IGNsaWVudCA9IG5ldyBST0JDbGllbnQoKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gcnVuIHRoZSB0ZXN0cwogICAgICAgICBjbGllbnQucnVuVGVzdENsaWVudCgpOwogICAgIH0KQEAgLTc3LDU4ICs3Nyw1OCBAQAogICAgICAgICAgICAgaW5pdENvbnRleHQgPSBuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBvY2N1cmVkIHdoZW4gY3JlYXRpbmcgSW5pdGlhbENvbnRleHQ6ICIgKyBlLnRvU3RyaW5nKCkpOwotICAgICAgICAgIAorCiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEpORElOYW1lID0gImphdmE6Y29tcC9lbnYvZWpiL2FkZHJlc3MiOwogICAgICAgICAgICAgb2JqcmVmID0gaW5pdENvbnRleHQubG9va3VwKEpORElOYW1lKTsKICAgICAgICAgICAgIGFkZHJlc3NIb21lID0gKEFkZHJlc3NIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIEFkZHJlc3NIb21lLmNsYXNzKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWRkcmVzc2JlYW4gaG9tZSBub3QgZm91bmQgLSBJcyB0aGUgYmVhbiByZWdpc3RlcmVkIHdpdGggSk5EST8gOiAiICsgZS50b1N0cmluZygpKTsKLSAgICAgICAgICAKKwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBKTkRJTmFtZSA9ICJqYXZhOmNvbXAvZW52L2VqYi9jdXN0b21lciI7CiAgICAgICAgICAgICBvYmpyZWYgPSBpbml0Q29udGV4dC5sb29rdXAoSk5ESU5hbWUpOwogICAgICAgICAgICAgY3VzdG9tZXJIb21lID0gKEN1c3RvbWVySG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBDdXN0b21lckhvbWUuY2xhc3MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDdXN0b21lcmJlYW4gaG9tZSBub3QgZm91bmQgLSBJcyB0aGUgYmVhbiByZWdpc3RlcmVkIHdpdGggSk5EST8gOiAiICsgZS50b1N0cmluZygpKTsKLSAgICAgICAgICAKKwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBKTkRJTmFtZSA9ICJqYXZhOmNvbXAvZW52L2VqYi9jdXN0b21lclRyYW5zYWN0aW9uYWwiOwogICAgICAgICAgICAgb2JqcmVmID0gaW5pdENvbnRleHQubG9va3VwKEpORElOYW1lKTsKICAgICAgICAgICAgIGN1c3RvbWVyVHJhbnNhY3Rpb25hbEhvbWUgPSAoQ3VzdG9tZXJUcmFuc2FjdGlvbmFsSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBDdXN0b21lclRyYW5zYWN0aW9uYWxIb21lLmNsYXNzKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3VzdG9tZXJUcmFuc2FjdGlvbmFsIGJlYW4gaG9tZSBub3QgZm91bmQgLSBJcyB0aGUgYmVhbiByZWdpc3RlcmVkIHdpdGggSk5EST8gOiAiICsgZS50b1N0cmluZygpKTsKLSAgICAgICAgICAKKwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBKTkRJTmFtZSA9ICJqYXZhOmNvbXAvZW52L2VqYi9jdXN0b21lclJlZnJlc2giOwogICAgICAgICAgICAgb2JqcmVmID0gaW5pdENvbnRleHQubG9va3VwKEpORElOYW1lKTsKICAgICAgICAgICAgIGN1c3RvbWVyUmVmcmVzaEhvbWUgPSAoQ3VzdG9tZXJSZWZyZXNoSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBDdXN0b21lclJlZnJlc2hIb21lLmNsYXNzKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3VzdG9tZXJSZWZyZXNoIGJlYW4gaG9tZSBub3QgZm91bmQgLSBJcyB0aGUgYmVhbiByZWdpc3RlcmVkIHdpdGggSk5EST8gOiAiICsgZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgCisKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgSk5ESU5hbWUgPSAiamF2YTpjb21wL2Vudi9lamIvY3VzdG9tZXJQcm9nUmVmcmVzaCI7CiAgICAgICAgICAgICBvYmpyZWYgPSBpbml0Q29udGV4dC5sb29rdXAoSk5ESU5hbWUpOwogICAgICAgICAgICAgY3VzdG9tZXJQcm9nUmVmcmVzaEhvbWUgPSAoQ3VzdG9tZXJQcm9nUmVmcmVzaEhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgQ3VzdG9tZXJQcm9nUmVmcmVzaEhvbWUuY2xhc3MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDdXN0b21lclByb2dSZWZyZXNoIGJlYW4gaG9tZSBub3QgZm91bmQgLSBJcyB0aGUgYmVhbiByZWdpc3RlcmVkIHdpdGggSk5EST8gOiAiICsgZS50b1N0cmluZygpKTsgICAgICAgICAgICAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3VzdG9tZXJQcm9nUmVmcmVzaCBiZWFuIGhvbWUgbm90IGZvdW5kIC0gSXMgdGhlIGJlYW4gcmVnaXN0ZXJlZCB3aXRoIEpOREk/IDogIiArIGUudG9TdHJpbmcoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewogICAgICAgICBkb0xvb2t1cCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHJ1blRlc3QoKXsKICAgICAgICAgU3RyaW5nIFNTTj0iMTIzNDU2Nzg5IjsKICAgICAgICAgLy9pbnNlcnQgaW50byBjdXN0b21lcjEgdmFsdWVzICgnMTIzNDU2Nzg5JywgJ1NtaXRoJywgJ1JvYicsICcxMTExJywgJ0ZpcnN0IFN0cmVldCcsICdTYW4gSm9zZScsICdDQScsICcxMjM0NScsIDEyMyk7CkBAIC0xMzgsNDAgKzEzOCw0MCBAQAogICAgICAgICBkb3VibGUgcHJvZ1JlZnJlc2hCYWxhbmNlID0gMDsKICAgICAgICAgZG91YmxlIHByb2dSZWZyZXNoQmFsYW5jZV9iZWZvcmVOb3RpZmllciA9IDA7CiAgICAgICAgIGRvdWJsZSBhdXRvUmVmcmVzaEJhbGFuY2UgPSAwOwotICAgICAgICAKKwogICAgICAgICBkb3VibGUgYW1vdW50PTI1MDsKLSAgICAgICAgCisKICAgICAgICAgLy9maXJzdCBnZXQgYmFsYW5jZQotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAorCisKKwogICAgICAgICB0cnl7CiAgICAgICAgICAgICBDdXN0b21lciBjdXN0b21lcj1jdXN0b21lckhvbWUuZmluZEJ5UHJpbWFyeUtleShuZXcgUEtTdHJpbmcoU1NOKSk7Ci0gICAgICAgICAgICBDdXN0b21lclJlZnJlc2ggY3VzdG9tZXJSZWZyZXNoPWN1c3RvbWVyUmVmcmVzaEhvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pOyAgICAgICAgICAgIAorICAgICAgICAgICAgQ3VzdG9tZXJSZWZyZXNoIGN1c3RvbWVyUmVmcmVzaD1jdXN0b21lclJlZnJlc2hIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgICAgICAgIEN1c3RvbWVyUHJvZ1JlZnJlc2ggY3VzdG9tZXJQcm9nUmVmcmVzaD1jdXN0b21lclByb2dSZWZyZXNoSG9tZS5maW5kQnlQcmltYXJ5S2V5KG5ldyBQS1N0cmluZzEoU1NOKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy91cGRhdGUKICAgICAgICAgY3VzdG9tZXIuZG9DcmVkaXQoYW1vdW50KTsKICAgICAgICAgY3VzdG9tZXIuZG9EZWJpdChhbW91bnQpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vdHJhbnMgYmFsYW5jZQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vZ2V0IHRyYW5zYWN0aW9uIGJhbGFuY2UKLSAgICAgICAgICAgIGN1cnJlbnRCYWxhbmNlID0gY3VzdG9tZXIuZ2V0QmFsYW5jZSgpOyAgICAgICAgICAgIAotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJPcmlnaW5hbCBiYWxhbmNlIGlzIDoiK2N1cnJlbnRCYWxhbmNlKTsgICAgICAKLSAgICAgICAgICAgIAorICAgICAgICAgICAgY3VycmVudEJhbGFuY2UgPSBjdXN0b21lci5nZXRCYWxhbmNlKCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk9yaWdpbmFsIGJhbGFuY2UgaXMgOiIrY3VycmVudEJhbGFuY2UpOworCiAgICAgICAgICAgICB0cnl7CiAgICAgICAgICAgICAgICAgLy9nZXQgcHJvZ3JhbW1hdGljIGJhbGFuY2UKICAgICAgICAgICAgICAgICBwcm9nUmVmcmVzaEJhbGFuY2VfYmVmb3JlTm90aWZpZXIgPSBjdXN0b21lclByb2dSZWZyZXNoLmdldEJhbGFuY2UoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJhbGFuY2UgYmVmb3JlIFByb2dyYW1tYXRpYyByZWZyZXNoIDoiICtwcm9nUmVmcmVzaEJhbGFuY2VfYmVmb3JlTm90aWZpZXIpOyAgIAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmFsYW5jZSBiZWZvcmUgUHJvZ3JhbW1hdGljIHJlZnJlc2ggOiIgK3Byb2dSZWZyZXNoQmFsYW5jZV9iZWZvcmVOb3RpZmllcik7CisKICAgICAgICAgICAgICAgICAgaWYgKCBjdXJyZW50QmFsYW5jZSA9PSBwcm9nUmVmcmVzaEJhbGFuY2VfYmVmb3JlTm90aWZpZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlByb2dyYW1tYXRpY19SZWZyZXNoX1JlYWRPbmx5X0JlYW4iLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiUHJvZ3JhbW1hdGljX1JlZnJlc2hfUmVhZE9ubHlfQmVhbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIFJlYWRPbmx5QmVhbk5vdGlmaWVyIG5vdGlmaWVyID0KICAgICAgICAgICAgICAgICBSZWFkT25seUJlYW5IZWxwZXIuZ2V0UmVhZE9ubHlCZWFuTm90aWZpZXIoImphdmE6Y29tcC9lbnYvZWpiL2N1c3RvbWVyUHJvZ1JlZnJlc2giKTsKICAgICAgICAgICAgICAgICBub3RpZmllci5yZWZyZXNoKG5ldyBQS1N0cmluZzEoU1NOKSk7CkBAIC0xNzksMzkgKzE3OSwzOSBAQAogICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlByb2dyYW1tYXRpY19SZWZyZXNoX1JlYWRPbmx5X0JlYW4iLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gd2hpbGUgbG9va2luZyB1cCBSZWFkT25seUJlYW5Ob3RpZmllciBjbGFzcyIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0gICAgICAgICAgICAKLSAgICAgICAgICAgIAorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjdXN0b21lci5kb0NyZWRpdChhbW91bnQpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHByb2dSZWZyZXNoQmFsYW5jZSA9IGN1c3RvbWVyUHJvZ1JlZnJlc2guZ2V0QmFsYW5jZSgpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCYWxhbmNlIGFmdGVyIFByb2dyYW1tYXRpYyByZWZyZXNoIGlzIDoiICtwcm9nUmVmcmVzaEJhbGFuY2UpOyAgIAotICAgICAgICAgICAgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJhbGFuY2UgYWZ0ZXIgUHJvZ3JhbW1hdGljIHJlZnJlc2ggaXMgOiIgK3Byb2dSZWZyZXNoQmFsYW5jZSk7CisKICAgICAgICAgICAgICAgaWYgKCBwcm9nUmVmcmVzaEJhbGFuY2UgPT0gY3VycmVudEJhbGFuY2UgKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiUHJvZ3JhbW1hdGljX1JlZnJlc2hfUmVhZE9ubHlfQmVhbiAiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiUHJvZ3JhbW1hdGljX1JlZnJlc2hfUmVhZE9ubHlfQmVhbiIsIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gICAgCi0gICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2xlZXBpbmcgZm9yIDgwIHNlY29uZHMiKTsKICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDgwMDAwKTsKICAgICAgICAgICAgcmVmcmVzaEJhbGFuY2UgPSBjdXN0b21lclJlZnJlc2guZ2V0QmFsYW5jZSgpOwotICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJhbGFuY2UgYWZ0ZXIgdGltZSByZWZyZXNoIGlzIDoiICtyZWZyZXNoQmFsYW5jZSk7ICAgICAgICAgCi0gICAgICAgICAgICAKKyAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCYWxhbmNlIGFmdGVyIHRpbWUgcmVmcmVzaCBpcyA6IiArcmVmcmVzaEJhbGFuY2UpOworCiAgICAgICAgICAgICBpZiAoIHJlZnJlc2hCYWxhbmNlID09IGN1cnJlbnRCYWxhbmNlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJSZWZyZXNoX1JlYWRPbmx5X0JlYW4gIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlJlZnJlc2hfUmVhZE9ubHlfQmVhbiIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJQcm9ncmFtbWF0aWNfUmVmcmVzaF9SZWFkT25seV9CZWFuICIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlJlZnJlc2hfUmVhZE9ubHlfQmVhbiAiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICB9ICAgIAogCi19IAorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IGY3MzRmNjYuLjEyZGE3NDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKQEAgLTUzLDUgKzUzLDUgQEAKICAgICA8aG9tZT5zYW1wbGVzLmVqYi5ibXAucm9iZWFuLmVqYi5DdXN0b21lclByb2dSZWZyZXNoSG9tZTwvaG9tZT4KICAgICA8cmVtb3RlPnNhbXBsZXMuZWpiLmJtcC5yb2JlYW4uZWpiLkN1c3RvbWVyUHJvZ1JlZnJlc2g8L3JlbW90ZT4KICAgICA8ZWpiLWxpbms+Q3VzdG9tZXJQcm9nUmVmcmVzaEVKQjwvZWpiLWxpbms+Ci0gIDwvZWpiLXJlZj4gIAorICA8L2VqYi1yZWY+CiA8L2FwcGxpY2F0aW9uLWNsaWVudD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKaW5kZXggMDk1MDJkZi4uNTExMzkwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKQEAgLTI1LDUgKzI1LDUgQEAKICAgPC9tb2R1bGU+CiAgIDxtb2R1bGU+CiAgICAgPGphdmE+ZWpiLWJtcC1yb2JlYW4tY2xpZW50LmphcjwvamF2YT4KLSAgPC9tb2R1bGU+ICAKKyAgPC9tb2R1bGU+CiA8L2FwcGxpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL2Rlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwKaW5kZXggMjNkNGRlMS4uY2NjNTlhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi9kZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC0zOSw2ICszOSw2IEBACiAgIDxlamItcmVmPgogICAgIDxlamItcmVmLW5hbWU+ZWpiL2N1c3RvbWVyUHJvZ1JlZnJlc2g8L2VqYi1yZWYtbmFtZT4KICAgICA8am5kaS1uYW1lPmVqYi9jdXN0b21lclByb2dSZWZyZXNoPC9qbmRpLW5hbWU+Ci0gIDwvZWpiLXJlZj4gIAorICA8L2VqYi1yZWY+CiA8L3N1bi1hcHBsaWNhdGlvbi1jbGllbnQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggOWFkZGU3Mi4uMDBkM2M2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI5LDIzICsyOSwyMyBAQAogICAgICAgICA8cmVzLXJlZi1uYW1lPmpkYmMvYm1wLXJvYmVhbjwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmpkYmMvYm1wLXJvYmVhbjwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+dHJ1ZTwvaXMtcmVhZC1vbmx5LWJlYW4+IAotICAgICAgPHJlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+MDwvcmVmcmVzaC1wZXJpb2QtaW4tc2Vjb25kcz4gCi0gICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPiAKKyAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj50cnVlPC9pcy1yZWFkLW9ubHktYmVhbj4KKyAgICAgIDxyZWZyZXNoLXBlcmlvZC1pbi1zZWNvbmRzPjA8L3JlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+CisgICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPgogICAgICAgPGJlYW4tcG9vbD4KICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MTA8L3N0ZWFkeS1wb29sLXNpemU+CiAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+NTwvcmVzaXplLXF1YW50aXR5PgogICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDA8L21heC1wb29sLXNpemU+CiAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICA8L2JlYW4tcG9vbD4KLSAgICAgIDxiZWFuLWNhY2hlPiAKLSAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+ICAgICAgICAgIAotICAgICAgICA8cmVzaXplLXF1YW50aXR5PjYwPC9yZXNpemUtcXVhbnRpdHk+IAorICAgICAgPGJlYW4tY2FjaGU+CisgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPgorICAgICAgICA8cmVzaXplLXF1YW50aXR5PjYwPC9yZXNpemUtcXVhbnRpdHk+CiAgICAgICAgIDxpcy1jYWNoZS1vdmVyZmxvdy1hbGxvd2VkPnRydWU8L2lzLWNhY2hlLW92ZXJmbG93LWFsbG93ZWQ+Ci0gICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4gCi0gICAgICA8L2JlYW4tY2FjaGU+ICAgICAgIAorICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgorICAgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogICAgIDxlamI+CiAgICAgICA8ZWpiLW5hbWU+Q3VzdG9tZXJFSkI8L2VqYi1uYW1lPgpAQCAtNTQsMjIgKzU0LDIyIEBACiAgICAgICAgIDxyZXMtcmVmLW5hbWU+amRiYy9ibXAtcm9iZWFuPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9ibXAtcm9iZWFuPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+IAotICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4gCisgICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPgorICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4KICAgICAgIDxiZWFuLXBvb2w+CiAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjEwPC9zdGVhZHktcG9vbC1zaXplPgogICAgICAgICA8cmVzaXplLXF1YW50aXR5PjU8L3Jlc2l6ZS1xdWFudGl0eT4KICAgICAgICAgPG1heC1wb29sLXNpemU+MTAwPC9tYXgtcG9vbC1zaXplPgogICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgogICAgICAgPC9iZWFuLXBvb2w+Ci0gICAgICA8YmVhbi1jYWNoZT4gCi0gICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPiAgICAgICAgICAKLSAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT42MDwvcmVzaXplLXF1YW50aXR5PiAKKyAgICAgIDxiZWFuLWNhY2hlPgorICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4KKyAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT42MDwvcmVzaXplLXF1YW50aXR5PgogICAgICAgICA8aXMtY2FjaGUtb3ZlcmZsb3ctYWxsb3dlZD50cnVlPC9pcy1jYWNoZS1vdmVyZmxvdy1hbGxvd2VkPgotICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPiAKKyAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgogICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4KLSAgICAgIDwvYmVhbi1jYWNoZT4gCisgICAgICA8L2JlYW4tY2FjaGU+CiAgICAgPC9lamI+CiAgICAgPGVqYj4KICAgICAgIDxlamItbmFtZT5DdXN0b21lclRyYW5zYWN0aW9uYWxFSkI8L2VqYi1uYW1lPgpAQCAtNzgsMjMgKzc4LDIzIEBACiAgICAgICAgIDxyZXMtcmVmLW5hbWU+amRiYy9ibXAtcm9iZWFuPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9ibXAtcm9iZWFuPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj50cnVlPC9pcy1yZWFkLW9ubHktYmVhbj4gCi0gICAgICA8cmVmcmVzaC1wZXJpb2QtaW4tc2Vjb25kcz42MDA8L3JlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+IAotICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4gCisgICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+dHJ1ZTwvaXMtcmVhZC1vbmx5LWJlYW4+CisgICAgICA8cmVmcmVzaC1wZXJpb2QtaW4tc2Vjb25kcz42MDA8L3JlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+CisgICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPgogICAgICAgPGJlYW4tcG9vbD4KICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MTA8L3N0ZWFkeS1wb29sLXNpemU+CiAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+NTwvcmVzaXplLXF1YW50aXR5PgogICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDA8L21heC1wb29sLXNpemU+CiAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICA8L2JlYW4tcG9vbD4KLSAgICAgIDxiZWFuLWNhY2hlPiAKLSAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+ICAgICAgICAgIAotICAgICAgICA8cmVzaXplLXF1YW50aXR5PjYwPC9yZXNpemUtcXVhbnRpdHk+IAorICAgICAgPGJlYW4tY2FjaGU+CisgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPgorICAgICAgICA8cmVzaXplLXF1YW50aXR5PjYwPC9yZXNpemUtcXVhbnRpdHk+CiAgICAgICAgIDxpcy1jYWNoZS1vdmVyZmxvdy1hbGxvd2VkPnRydWU8L2lzLWNhY2hlLW92ZXJmbG93LWFsbG93ZWQ+Ci0gICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+IAorICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgotICAgICAgPC9iZWFuLWNhY2hlPiAKKyAgICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KICAgICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPkN1c3RvbWVyUmVmcmVzaEVKQjwvZWpiLW5hbWU+CkBAIC0xMDMsMjIgKzEwMywyMiBAQAogICAgICAgICA8cmVzLXJlZi1uYW1lPmpkYmMvYm1wLXJvYmVhbjwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmpkYmMvYm1wLXJvYmVhbjwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+dHJ1ZTwvaXMtcmVhZC1vbmx5LWJlYW4+IAotICAgICAgPHJlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+NjA8L3JlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+IAotICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4gCisgICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+dHJ1ZTwvaXMtcmVhZC1vbmx5LWJlYW4+CisgICAgICA8cmVmcmVzaC1wZXJpb2QtaW4tc2Vjb25kcz42MDwvcmVmcmVzaC1wZXJpb2QtaW4tc2Vjb25kcz4KKyAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+CiAgICAgICA8YmVhbi1wb29sPgogICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4xMDwvc3RlYWR5LXBvb2wtc2l6ZT4KICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT41PC9yZXNpemUtcXVhbnRpdHk+CiAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwMDwvbWF4LXBvb2wtc2l6ZT4KICAgICAgICAgPHBvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KICAgICAgIDwvYmVhbi1wb29sPgotICAgICA8YmVhbi1jYWNoZT4gCi0gICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPiAgICAgICAgICAKLSAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT42MDwvcmVzaXplLXF1YW50aXR5PiAKKyAgICAgPGJlYW4tY2FjaGU+CisgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPgorICAgICAgICA8cmVzaXplLXF1YW50aXR5PjYwPC9yZXNpemUtcXVhbnRpdHk+CiAgICAgICAgIDxpcy1jYWNoZS1vdmVyZmxvdy1hbGxvd2VkPnRydWU8L2lzLWNhY2hlLW92ZXJmbG93LWFsbG93ZWQ+Ci0gICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4gCisgICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICAgIDxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9yZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkxSVTwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+CiAgICAgICA8L2JlYW4tY2FjaGU+CiAgICAgPC9lamI+CiAgICAgPGVqYj4KQEAgLTEyOCwyMyArMTI4LDIzIEBACiAgICAgICAgIDxyZXMtcmVmLW5hbWU+amRiYy9ibXAtcm9iZWFuPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9ibXAtcm9iZWFuPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj50cnVlPC9pcy1yZWFkLW9ubHktYmVhbj4gCi0gICAgICA8cmVmcmVzaC1wZXJpb2QtaW4tc2Vjb25kcz42MDA8L3JlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+IAotICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4gCisgICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+dHJ1ZTwvaXMtcmVhZC1vbmx5LWJlYW4+CisgICAgICA8cmVmcmVzaC1wZXJpb2QtaW4tc2Vjb25kcz42MDA8L3JlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+CisgICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPgogICAgICAgPGJlYW4tcG9vbD4KICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MTA8L3N0ZWFkeS1wb29sLXNpemU+CiAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+NTwvcmVzaXplLXF1YW50aXR5PgogICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDA8L21heC1wb29sLXNpemU+CiAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICA8L2JlYW4tcG9vbD4KLSAgICAgIDxiZWFuLWNhY2hlPiAKLSAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+ICAgICAgICAgIAotICAgICAgICA8cmVzaXplLXF1YW50aXR5PjYwPC9yZXNpemUtcXVhbnRpdHk+IAorICAgICAgPGJlYW4tY2FjaGU+CisgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPgorICAgICAgICA8cmVzaXplLXF1YW50aXR5PjYwPC9yZXNpemUtcXVhbnRpdHk+CiAgICAgICAgIDxpcy1jYWNoZS1vdmVyZmxvdy1hbGxvd2VkPnRydWU8L2lzLWNhY2hlLW92ZXJmbG93LWFsbG93ZWQ+Ci0gICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4gICAgICAgICAKLSAgICAgIDwvYmVhbi1jYWNoZT4gICAgIAorICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgorICAgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogICA8L2VudGVycHJpc2UtYmVhbnM+CiA8L3N1bi1lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZWpiL0FkZHJlc3NFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL2VqYi9BZGRyZXNzRUpCLmphdmEKaW5kZXggMjFlODdkMS4uMzI4ZGZhYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZWpiL0FkZHJlc3NFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi9lamIvQWRkcmVzc0VKQi5qYXZhCkBAIC04NSw5ICs4NSw5IEBACiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoKSB7ICAgICAgIAotICAgIH0gIAotICAgIAorICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoKSB7CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewogICAgIH0KIApAQCAtMTE4LDcgKzExOCw3IEBACiAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CiAgICAgICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNRTEV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBlamJMb2FkKCkgbWV0aG9kIik7Ci0gICAgICAgIH0gICAKKyAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL2VqYi9BZGRyZXNzSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZWpiL0FkZHJlc3NIb21lLmphdmEKaW5kZXggYTcxMDhhNi4uZmMwYzYyNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZWpiL0FkZHJlc3NIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZWpiL0FkZHJlc3NIb21lLmphdmEKQEAgLTIwLDYgKzIwLDYgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247CiAKIHB1YmxpYyBpbnRlcmZhY2UgQWRkcmVzc0hvbWUgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJIb21lIHsKLSAgICBwdWJsaWMgQWRkcmVzcyBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBTU04pIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsgCisgICAgcHVibGljIEFkZHJlc3MgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgU1NOKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL2VqYi9DdXN0b21lckVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZWpiL0N1c3RvbWVyRUpCLmphdmEKaW5kZXggMjFmZGRjZS4uNzA2NjQzNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZWpiL0N1c3RvbWVyRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZWpiL0N1c3RvbWVyRUpCLmphdmEKQEAgLTc3LDEwICs3NywxMCBAQAogICAgIHB1YmxpYyBQS1N0cmluZyBlamJDcmVhdGUoKSB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKCkgeyAgICAgICAKLSAgICB9ICAKLSAgICAKKworICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoKSB7CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewogICAgIH0KIApAQCAtMTIwLDcgKzEyMCw3IEBACiAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CiAgICAgICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNRTEV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBlamJMb2FkKCkgbWV0aG9kIik7Ci0gICAgICAgIH0gICAKKyAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZWpiL0N1c3RvbWVySG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZWpiL0N1c3RvbWVySG9tZS5qYXZhCmluZGV4IDZiMmUzMjkuLjk0NTExNTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL2VqYi9DdXN0b21lckhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi9lamIvQ3VzdG9tZXJIb21lLmphdmEKQEAgLTIwLDYgKzIwLDYgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247CiAKIHB1YmxpYyBpbnRlcmZhY2UgQ3VzdG9tZXJIb21lIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCSG9tZSB7Ci0gICAgcHVibGljIEN1c3RvbWVyIGZpbmRCeVByaW1hcnlLZXkoUEtTdHJpbmcgU1NOKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247IAorICAgIHB1YmxpYyBDdXN0b21lciBmaW5kQnlQcmltYXJ5S2V5KFBLU3RyaW5nIFNTTikgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi9lamIvQ3VzdG9tZXJQcm9nUmVmcmVzaEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZWpiL0N1c3RvbWVyUHJvZ1JlZnJlc2hFSkIuamF2YQppbmRleCBjM2ZmNWQ0Li5lYWEzODFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi9lamIvQ3VzdG9tZXJQcm9nUmVmcmVzaEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL2VqYi9DdXN0b21lclByb2dSZWZyZXNoRUpCLmphdmEKQEAgLTQ4LDggKzQ4LDggQEAKIAogICAgIHB1YmxpYyBQS1N0cmluZzEgZWpiRmluZEJ5UHJpbWFyeUtleShQS1N0cmluZzEgU1NOKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RhdGVtZW50ID0gbnVsbDsKLQlSZXN1bHRTZXQgcmVzdWx0cyA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0YXRlbWVudCA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJlc3VsdHMgPSBudWxsOwogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBjb25uID0gZGF0YVNvdXJjZS5nZXRDb25uZWN0aW9uKCk7CkBAIC02NiwyOCArNjYsMjggQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1FMRXhjZXB0aW9uIG9jY3VyZWQgaW4gZWpiRmluZGJ5UHJpbWFyeUtleSBtZXRob2QuIik7CiAgICAgICAgICAgICByZXR1cm4gbmV3IFBLU3RyaW5nMSgiIik7CiAgICAgICAgIH0gZmluYWxseSB7Ci0JICAgIGlmIChyZXN1bHRzICE9IG51bGwpIAotCQl0cnkgewotCQkgICAgcmVzdWx0cy5jbG9zZSgpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsgfQotCSAgICBpZiAoc3RhdGVtZW50ICE9IG51bGwpIAotCQl0cnkgewotCQkgICAgc3RhdGVtZW50LmNsb3NlKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeyB9Ci0JICAgIGlmIChjb25uICE9IG51bGwpIAotCQl0cnkgewotCQkgICAgY29ubi5jbG9zZSgpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsgfQotCX0KKyAgICAgICAgaWYgKHJlc3VsdHMgIT0gbnVsbCkKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJlc3VsdHMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7IH0KKyAgICAgICAgaWYgKHN0YXRlbWVudCAhPSBudWxsKQorICAgICAgICB0cnkgeworICAgICAgICAgICAgc3RhdGVtZW50LmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeyB9CisgICAgICAgIGlmIChjb25uICE9IG51bGwpCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeyB9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBQS1N0cmluZzEgZWpiQ3JlYXRlKCkgewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZSgpIHsgICAgICAgCi0gICAgfSAgCi0gICAgCisKKyAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKCkgeworICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKICAgICB9CiAKQEAgLTExMSw3ICsxMTEsNyBAQAogICAgICAgICAgICAgY29ubi5jbG9zZSgpOwogICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTUUxFeGNlcHRpb24gb2NjdXJyZWQgaW4gZWpiTG9hZCgpIG1ldGhvZCIpOwotICAgICAgICB9ICAgCisgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL2VqYi9DdXN0b21lclByb2dSZWZyZXNoSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZWpiL0N1c3RvbWVyUHJvZ1JlZnJlc2hIb21lLmphdmEKaW5kZXggYTZkNGZjNC4uZmUxYTMzNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZWpiL0N1c3RvbWVyUHJvZ1JlZnJlc2hIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZWpiL0N1c3RvbWVyUHJvZ1JlZnJlc2hIb21lLmphdmEKQEAgLTIwLDYgKzIwLDYgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247CiAKIHB1YmxpYyBpbnRlcmZhY2UgQ3VzdG9tZXJQcm9nUmVmcmVzaEhvbWUgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJIb21lIHsKLSAgICBwdWJsaWMgQ3VzdG9tZXJQcm9nUmVmcmVzaCBmaW5kQnlQcmltYXJ5S2V5KFBLU3RyaW5nMSBTU04pIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsgCisgICAgcHVibGljIEN1c3RvbWVyUHJvZ1JlZnJlc2ggZmluZEJ5UHJpbWFyeUtleShQS1N0cmluZzEgU1NOKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL2VqYi9DdXN0b21lclJlZnJlc2hFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL2VqYi9DdXN0b21lclJlZnJlc2hFSkIuamF2YQppbmRleCAxN2JmZDAwLi41M2U0OGZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi9lamIvQ3VzdG9tZXJSZWZyZXNoRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZWpiL0N1c3RvbWVyUmVmcmVzaEVKQi5qYXZhCkBAIC02OSw5ICs2OSw5IEBACiAgICAgcHVibGljIFN0cmluZyBlamJDcmVhdGUoKSB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKCkgeyAgICAgICAKLSAgICB9ICAKKworICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoKSB7CisgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewogICAgIH0KQEAgLTk2LDcgKzk2LDcgQEAKICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKICAgICAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1FMRXhjZXB0aW9uIG9jY3VycmVkIGluIGVqYkxvYWQoKSBtZXRob2QiKTsKLSAgICAgICAgfSAgIAorICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7CkBAIC0xMDQsNiArMTA0LDYgQEAKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7CiAgICAgfQogfQotICAgICAgCi0gICAgCi0gICAgCisKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi9lamIvQ3VzdG9tZXJSZWZyZXNoSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZWpiL0N1c3RvbWVyUmVmcmVzaEhvbWUuamF2YQppbmRleCA1MDVkZjNhLi5iM2U0YWQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi9lamIvQ3VzdG9tZXJSZWZyZXNoSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL2VqYi9DdXN0b21lclJlZnJlc2hIb21lLmphdmEKQEAgLTIwLDYgKzIwLDYgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247CiAKIHB1YmxpYyBpbnRlcmZhY2UgQ3VzdG9tZXJSZWZyZXNoSG9tZSBleHRlbmRzIGpha2FydGEuZWpiLkVKQkhvbWUgewotICAgIHB1YmxpYyBDdXN0b21lclJlZnJlc2ggZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgU1NOKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247IAorICAgIHB1YmxpYyBDdXN0b21lclJlZnJlc2ggZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgU1NOKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL2VqYi9DdXN0b21lclRyYW5zYWN0aW9uYWxFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL2VqYi9DdXN0b21lclRyYW5zYWN0aW9uYWxFSkIuamF2YQppbmRleCBkYmZhMjJkLi5hNjQ1NTMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi9lamIvQ3VzdG9tZXJUcmFuc2FjdGlvbmFsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZWpiL0N1c3RvbWVyVHJhbnNhY3Rpb25hbEVKQi5qYXZhCkBAIC02OSw5ICs2OSw5IEBACiAgICAgcHVibGljIFN0cmluZyBlamJDcmVhdGUoKSB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKCkgeyAgICAgICAKLSAgICB9ICAKKworICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoKSB7CisgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewogICAgIH0KQEAgLTk1LDcgKzk1LDcgQEAKICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKICAgICAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1FMRXhjZXB0aW9uIG9jY3VycmVkIGluIGVqYkxvYWQoKSBtZXRob2QiKTsKLSAgICAgICAgfSAgIAorICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi9lamIvQ3VzdG9tZXJUcmFuc2FjdGlvbmFsSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vZWpiL0N1c3RvbWVyVHJhbnNhY3Rpb25hbEhvbWUuamF2YQppbmRleCA1MGU5NGMyLi4yYjBkYTM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi9lamIvQ3VzdG9tZXJUcmFuc2FjdGlvbmFsSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL2VqYi9DdXN0b21lclRyYW5zYWN0aW9uYWxIb21lLmphdmEKQEAgLTIwLDYgKzIwLDYgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247CiAKIHB1YmxpYyBpbnRlcmZhY2UgQ3VzdG9tZXJUcmFuc2FjdGlvbmFsSG9tZSBleHRlbmRzIGpha2FydGEuZWpiLkVKQkhvbWUgewotICAgIHB1YmxpYyBDdXN0b21lclRyYW5zYWN0aW9uYWwgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgU1NOKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247IAorICAgIHB1YmxpYyBDdXN0b21lclRyYW5zYWN0aW9uYWwgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgU1NOKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL3NxbC9jcmVhdGVfZGVyYnkuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vc3FsL2NyZWF0ZV9kZXJieS5zcWwKaW5kZXggNjFiY2I4Ny4uN2U3YTI4YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vc3FsL2NyZWF0ZV9kZXJieS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vc3FsL2NyZWF0ZV9kZXJieS5zcWwKQEAgLTEsMTQgKzEsMTQgQEAKIGRyb3AgdGFibGUgY3VzdG9tZXIxOwogCiBjcmVhdGUgdGFibGUgY3VzdG9tZXIxICgKLSAgU1NOIHZhcmNoYXIoOSksIAotICBsYXN0TkFtZSB2YXJjaGFyKDIwKSwgCi0gIGZpcnN0bmFtZSB2YXJjaGFyKDIwKSwgCi0gIGFkZHJlc3MxIHZhcmNoYXIoMjApLCAKLSAgYWRkcmVzczIgdmFyY2hhcigyMCksIAotICBjaXR5IHZhcmNoYXIoMTApLCAKLSAgc3RhdGUgdmFyY2hhcigxMCksIAotICB6aXBjb2RlIHZhcmNoYXIoNSksIAorICBTU04gdmFyY2hhcig5KSwKKyAgbGFzdE5BbWUgdmFyY2hhcigyMCksCisgIGZpcnN0bmFtZSB2YXJjaGFyKDIwKSwKKyAgYWRkcmVzczEgdmFyY2hhcigyMCksCisgIGFkZHJlc3MyIHZhcmNoYXIoMjApLAorICBjaXR5IHZhcmNoYXIoMTApLAorICBzdGF0ZSB2YXJjaGFyKDEwKSwKKyAgemlwY29kZSB2YXJjaGFyKDUpLAogICBiYWxhbmNlIGRlY2ltYWwoMTAsMikgKTsKIAogaW5zZXJ0IGludG8gY3VzdG9tZXIxIHZhbHVlcyAoJzEyMzQ1Njc4OScsICdTbWl0aCcsICdSb2InLCAnMTExMScsICdGaXJzdCBTdHJlZXQnLCAnU2FuIEpvc2UnLCAnQ0EnLCAnMTIzNDUnLCAxMjMpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGUwZjhhMDMuLmE1N2EyOGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsMTQgKzEsMTQgQEAKIGRyb3AgdGFibGUgY3VzdG9tZXIxOwogCiBjcmVhdGUgdGFibGUgY3VzdG9tZXIxICgKLSAgU1NOIHZhcmNoYXIyKDkpLCAKLSAgbGFzdE5BbWUgdmFyY2hhcjIoMjApLCAKLSAgZmlyc3RuYW1lIHZhcmNoYXIyKDIwKSwgCi0gIGFkZHJlc3MxIHZhcmNoYXIyICgyMCksIAotICBhZGRyZXNzMiB2YXJjaGFyMigyMCksIAotICBjaXR5IHZhcmNoYXIyKDEwKSwgCi0gIHN0YXRlIHZhcmNoYXIyKDEwKSwgCi0gIHppcGNvZGUgdmFyY2hhcjIoNSksIAorICBTU04gdmFyY2hhcjIoOSksCisgIGxhc3ROQW1lIHZhcmNoYXIyKDIwKSwKKyAgZmlyc3RuYW1lIHZhcmNoYXIyKDIwKSwKKyAgYWRkcmVzczEgdmFyY2hhcjIgKDIwKSwKKyAgYWRkcmVzczIgdmFyY2hhcjIoMjApLAorICBjaXR5IHZhcmNoYXIyKDEwKSwKKyAgc3RhdGUgdmFyY2hhcjIoMTApLAorICB6aXBjb2RlIHZhcmNoYXIyKDUpLAogICBiYWxhbmNlIGRlY2ltYWwoMTAsMikgKTsKIAogaW5zZXJ0IGludG8gY3VzdG9tZXIxIHZhbHVlcyAoJzEyMzQ1Njc4OScsICdTbWl0aCcsICdSb2InLCAnMTExMScsICdGaXJzdCBTdHJlZXQnLCAnU2FuIEpvc2UnLCAnQ0EnLCAnMTIzNDUnLCAxMjMpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vc3FsL2NyZWF0ZXBvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi9zcWwvY3JlYXRlcG9pbnRiYXNlLnNxbAppbmRleCBlMGY4YTAzLi5hNTdhMjhhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi9zcWwvY3JlYXRlcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi9zcWwvY3JlYXRlcG9pbnRiYXNlLnNxbApAQCAtMSwxNCArMSwxNCBAQAogZHJvcCB0YWJsZSBjdXN0b21lcjE7CiAKIGNyZWF0ZSB0YWJsZSBjdXN0b21lcjEgKAotICBTU04gdmFyY2hhcjIoOSksIAotICBsYXN0TkFtZSB2YXJjaGFyMigyMCksIAotICBmaXJzdG5hbWUgdmFyY2hhcjIoMjApLCAKLSAgYWRkcmVzczEgdmFyY2hhcjIgKDIwKSwgCi0gIGFkZHJlc3MyIHZhcmNoYXIyKDIwKSwgCi0gIGNpdHkgdmFyY2hhcjIoMTApLCAKLSAgc3RhdGUgdmFyY2hhcjIoMTApLCAKLSAgemlwY29kZSB2YXJjaGFyMig1KSwgCisgIFNTTiB2YXJjaGFyMig5KSwKKyAgbGFzdE5BbWUgdmFyY2hhcjIoMjApLAorICBmaXJzdG5hbWUgdmFyY2hhcjIoMjApLAorICBhZGRyZXNzMSB2YXJjaGFyMiAoMjApLAorICBhZGRyZXNzMiB2YXJjaGFyMigyMCksCisgIGNpdHkgdmFyY2hhcjIoMTApLAorICBzdGF0ZSB2YXJjaGFyMigxMCksCisgIHppcGNvZGUgdmFyY2hhcjIoNSksCiAgIGJhbGFuY2UgZGVjaW1hbCgxMCwyKSApOwogCiBpbnNlcnQgaW50byBjdXN0b21lcjEgdmFsdWVzICgnMTIzNDU2Nzg5JywgJ1NtaXRoJywgJ1JvYicsICcxMTExJywgJ0ZpcnN0IFN0cmVldCcsICdTYW4gSm9zZScsICdDQScsICcxMjM0NScsIDEyMyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi90ZXN0bmctY2xpZW50L1JPQkNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2JtcC9yb2JlYW4vdGVzdG5nLWNsaWVudC9ST0JDbGllbnQuamF2YQppbmRleCA2OTBhZGM5Li45YjIzNjIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYm1wL3JvYmVhbi90ZXN0bmctY2xpZW50L1JPQkNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9ibXAvcm9iZWFuL3Rlc3RuZy1jbGllbnQvUk9CQ2xpZW50LmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIGltcG9ydCBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQ7CiBpbXBvcnQgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0OwogaW1wb3J0IGphdmEudXRpbC4qOwotaW1wb3J0IHNhbXBsZXMuZWpiLmJtcC5yb2JlYW4uZWpiLio7IAoraW1wb3J0IHNhbXBsZXMuZWpiLmJtcC5yb2JlYW4uZWpiLio7CiBpbXBvcnQgY29tLnN1bi5lamIuUmVhZE9ubHlCZWFuTm90aWZpZXI7CiBpbXBvcnQgY29tLnN1bi5lamIuY29udGFpbmVycy5SZWFkT25seUJlYW5IZWxwZXI7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvYnVpbGQueG1sCmluZGV4IDNlNjk4YWYuLmYwMzJmOTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2J1aWxkLnhtbApAQCAtMjcsNDkgKzI3LDQ5IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLXRhcmdldCIgdmFsdWU9ImFsbCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmVqYnRhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi10YXJnZXQiIHZhbHVlPSJydW4tdGVzdCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmVqYnRhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi10YXJnZXQiIHZhbHVlPSJjbGVhbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmVqYnRhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi10YXJnZXQiIHZhbHVlPSJidWlsZCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5lamJ0YXJnZXRzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamItdGFyZ2V0IiB2YWx1ZT0iZGVwbG95Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuZWpidGFyZ2V0cyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLXRhcmdldCIgdmFsdWU9InVuZGVwbG95Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmVqYnRhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi10YXJnZXQiIHZhbHVlPSJydW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5lamJ0YXJnZXRzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamItdGFyZ2V0IiB2YWx1ZT0ic2V0dXAiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmVqYnRhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi10YXJnZXQiIHZhbHVlPSJ1bnNldHVwIi8+CkBAIC0xMjcsNyArMTI3LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPiBVc2FnZToKKyAgICA8ZWNobz4gVXNhZ2U6CiAgICAgPT09PT09PT0gVGFyZ2V0cyBieSBleGVjdXRpb24gZ3JhbnVsYXJpdHkgPT09PT09PT09CiAKICAgICBhbnQgY2xlYW4gKENsZWFucyBhbGwgZWpiIHRlc3RzKQpAQCAtMTQ4LDExICsxNDgsMTEgQEAKICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYiB0ZXN0cykKIAogICAgID09PT09IFRhcmdldHMgYnkgdGVjaG5vbG95IGFuZCBleGVjdXRpb24gZ3JhbnVsYXJpdHkgPT09PT09Ci0gICAgTm90ZTogUnVuIHRoZSBjb21tYW5kIG9mIHRoZSBmb2xsb3dpbmcgdHlwZTogCisgICAgTm90ZTogUnVuIHRoZSBjb21tYW5kIG9mIHRoZSBmb2xsb3dpbmcgdHlwZToKIAogICAgICAgICAgICAgJSBhbnQgc3RhdGVsZXNzIC1EZWpiLXRhcmdldD1jbGVhbgogCiAgICAgdG8gcnVuIHRoZSAnY2xlYW4nIHRhcmdldCBmb3IgJ3N0YXRlbGVzcycgdGVzdHMKLQk8L2VjaG8+CisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL2J1aWxkLnhtbAppbmRleCBlM2FmM2ZmLi45ZTNkZjk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL2J1aWxkLnhtbApAQCAtODksMTcgKzg5LDE3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4gVXNhZ2U6Ci0JCWFudCBvcmRlcmFwcCAoRXhlY3V0ZXMgdGhlIG9yZGVyYXBwIHRlc3RzKQotCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYiBjbXAgdGVzdHMpCi0JCWFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgZWpiIGNtcCB0ZXN0cykKLQkJYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBlamIgY21wIHRlc3RzKQotCQlhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgY21wIHRlc3RzKQotCQlhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgZWpiIGNtcCBhcHBzKQotCQlhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGVqYiBjbXAgdGVzdHMpCi0JCWFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgY21wIGFwcHMpCi0JCWFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3IgY21wIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4gVXNhZ2U6CisgICAgICAgIGFudCBvcmRlcmFwcCAoRXhlY3V0ZXMgdGhlIG9yZGVyYXBwIHRlc3RzKQorICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYiBjbXAgdGVzdHMpCisgICAgICAgIGFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgZWpiIGNtcCB0ZXN0cykKKyAgICAgICAgYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBlamIgY21wIHRlc3RzKQorICAgICAgICBhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgY21wIHRlc3RzKQorICAgICAgICBhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgZWpiIGNtcCBhcHBzKQorICAgICAgICBhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGVqYiBjbXAgdGVzdHMpCisgICAgICAgIGFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgY21wIGFwcHMpCisgICAgICAgIGFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3IgY21wIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9vcmRlcmFwcC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9vcmRlcmFwcC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGU2NTk3OTkuLjJkZjE5YWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9jbXAvb3JkZXJhcHAvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL29yZGVyYXBwL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWNtcCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY21wb3JkZXIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNtcG9yZGVyIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLWVudGl0eS54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXItZW50aXR5LnhtbCIvPgpAQCAtMjYsMTEgKzI2LDExIEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXItZW50aXR5LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXItZW50aXR5LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLXNlc3Npb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci1zZXNzaW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1jbXAtbWFwcGluZ3MueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tY21wLW1hcHBpbmdzLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImRic2NoZW1hIiB2YWx1ZT0iZGVzY3JpcHRvci9jbXBvcmRlci5kYnNjaGVtYSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9vcmRlcmFwcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL29yZGVyYXBwL2J1aWxkLnhtbAppbmRleCAzNDViMDYyLi41ZWQyN2JlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL29yZGVyYXBwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL29yZGVyYXBwL2J1aWxkLnhtbApAQCAtMzUsOCArMzUsOCBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCi0gICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+IAorCisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgogICAgICAgPC9hbnRjYWxsPgpAQCAtNTQsMTggKzU0LDE4IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZW50aXR5LWphciIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVhciIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icGFja2FnZS1zZXNzaW9uLWphciI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWpiamFyLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9IiR7ZWpiLWphci1zZXNzaW9uLnhtbH0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9IiR7c3VuLWVqYi1qYXItc2Vzc2lvbi54bWx9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1zZXNzaW9uLWVqYi5qYXIiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UtZW50aXR5LWphciI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWpiamFyLWNvbW1vbiI+CkBAIC03MywyMiArNzMsMjIgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9IiR7c3VuLWVqYi1qYXItZW50aXR5LnhtbH0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJkYnNjaGVtYSIgdmFsdWU9IiR7ZGJzY2hlbWF9Ii8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVudGl0eS1lamIuamFyIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLWVhciI+CiAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgICAKKyAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfS9saWIiIGluY2x1ZGVzPSJyZXBvcnRlci5qYXIiLz4KLSAgICAgIDwvZWFyPiAgICAgICAgCisgICAgICA8L2Vhcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTEwNCwxNCArMTA0LDE0IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgpAQCAtMTIwLDE1ICsxMjAsMTUgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXBlcnNpc3RlbmNlLXJlc291cmNlLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gCi0gICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic3FsLWNyZWF0ZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfJHtkYi50eXBlfS5zcWwiLz4KICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9InNxbC1kcm9wIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+ICAgCisgICAgPHRhcmdldCBuYW1lPSJzcWwtZHJvcCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wXyR7ZGIudHlwZX0uc3FsIi8+CiAgICAgICAgPC9hbnRjYWxsPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9vcmRlcmFwcC9lamIvTG9jYWxWZW5kb3JQYXJ0SG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9vcmRlcmFwcC9lamIvTG9jYWxWZW5kb3JQYXJ0SG9tZS5qYXZhCmluZGV4IGIzNjQwZGEuLmVlNmEyNDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9jbXAvb3JkZXJhcHAvZWpiL0xvY2FsVmVuZG9yUGFydEhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL29yZGVyYXBwL2VqYi9Mb2NhbFZlbmRvclBhcnRIb21lLmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIAogCiBwdWJsaWMgaW50ZXJmYWNlIExvY2FsVmVuZG9yUGFydEhvbWUgZXh0ZW5kcyBFSkJMb2NhbEhvbWUgewotIAorCiAgICAgcHVibGljIExvY2FsVmVuZG9yUGFydCBmaW5kQnlQcmltYXJ5S2V5KE9iamVjdCBhS2V5KQogICAgICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9vcmRlcmFwcC9lamIvcmVxdWVzdC9SZXF1ZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL29yZGVyYXBwL2VqYi9yZXF1ZXN0L1JlcXVlc3QuamF2YQppbmRleCAwYmExMzFjLi4wZWM5OWQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL29yZGVyYXBwL2VqYi9yZXF1ZXN0L1JlcXVlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL29yZGVyYXBwL2VqYi9yZXF1ZXN0L1JlcXVlc3QuamF2YQpAQCAtMzksMTMgKzM5LDEzIEBACiAgICAgcHVibGljIGRvdWJsZSBnZXRCaWxsT2ZNYXRlcmlhbFByaWNlKEJvbVJlcXVlc3QgYm9tUmVxdWVzdCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBEb3VibGUgZ2V0QXZnUHJpY2UoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIERvdWJsZSBnZXRUb3RhbFByaWNlUGVyVmVuZG9yKFZlbmRvclJlcXVlc3QgdmVuZG9yUmVxdWVzdCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBkb3VibGUgZ2V0T3JkZXJQcmljZShJbnRlZ2VyIG9yZGVySWQpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhZGp1c3RPcmRlckRpc2NvdW50KGludCBhZGp1c3RtZW50KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIENvbGxlY3Rpb24gbG9jYXRlVmVuZG9yc0J5UGFydGlhbE5hbWUoU3RyaW5nIG5hbWUpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgU3RyaW5nIHJlcG9ydFZlbmRvcnNCeU9yZGVyKEludGVnZXIgb3JkZXJJZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9jbXAvb3JkZXJhcHAvZWpiL3JlcXVlc3QvUmVxdWVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9jbXAvb3JkZXJhcHAvZWpiL3JlcXVlc3QvUmVxdWVzdEJlYW4uamF2YQppbmRleCBhZWJkNmU2Li5jNDA5NWE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL29yZGVyYXBwL2VqYi9yZXF1ZXN0L1JlcXVlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9vcmRlcmFwcC9lamIvcmVxdWVzdC9SZXF1ZXN0QmVhbi5qYXZhCkBAIC0yOSw1MCArMjksNTAgQEAKIHB1YmxpYyBjbGFzcyBSZXF1ZXN0QmVhbiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKIAogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHByaXZhdGUgTG9jYWxMaW5lSXRlbUhvbWUgbGluZUl0ZW1Ib21lID0gbnVsbDsKLSAgICAKKwogICAgIHByaXZhdGUgTG9jYWxPcmRlckhvbWUgb3JkZXJIb21lID0gbnVsbDsKLSAgICAKKwogICAgIHByaXZhdGUgTG9jYWxQYXJ0SG9tZSBwYXJ0SG9tZSA9IG51bGw7Ci0gICAgCisKICAgICBwcml2YXRlIExvY2FsVmVuZG9ySG9tZSB2ZW5kb3JIb21lID0gbnVsbDsKLSAgICAKKwogICAgIHByaXZhdGUgTG9jYWxWZW5kb3JQYXJ0SG9tZSB2ZW5kb3JQYXJ0SG9tZSA9IG51bGw7Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgU2Vzc2lvbkJlYW4jc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgYUNvbnRleHQpIHsKICAgICAgICAgY29udGV4dD1hQ29udGV4dDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgU2Vzc2lvbkJlYW4jZWpiQWN0aXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBTZXNzaW9uQmVhbiNlamJQYXNzaXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgU2Vzc2lvbkJlYW4jZWpiUmVtb3ZlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBTZWUgc2VjdGlvbiA3LjEwLjMgb2YgdGhlIEVKQiAyLjAgc3BlY2lmaWNhdGlvbgogICAgICAqLwpAQCAtODcsNTYgKzg3LDU2IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVBhcnQoUGFydFJlcXVlc3QgcGFydFJlcXVlc3QpIHsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIExvY2FsUGFydCBwYXJ0ID0gcGFydEhvbWUuY3JlYXRlKHBhcnRSZXF1ZXN0LnBhcnROdW1iZXIsIAorICAgICAgICAgICAgTG9jYWxQYXJ0IHBhcnQgPSBwYXJ0SG9tZS5jcmVhdGUocGFydFJlcXVlc3QucGFydE51bWJlciwKICAgICAgICAgICAgICAgICAgICAgcGFydFJlcXVlc3QucmV2aXNpb24sIHBhcnRSZXF1ZXN0LmRlc2NyaXB0aW9uLAotICAgICAgICAgICAgICAgICAgICBwYXJ0UmVxdWVzdC5yZXZpc2lvbkRhdGUsIHBhcnRSZXF1ZXN0LnNwZWNpZmljYXRpb24sIAorICAgICAgICAgICAgICAgICAgICBwYXJ0UmVxdWVzdC5yZXZpc2lvbkRhdGUsIHBhcnRSZXF1ZXN0LnNwZWNpZmljYXRpb24sCiAgICAgICAgICAgICAgICAgICAgIHBhcnRSZXF1ZXN0LmRyYXdpbmcpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhZGRQYXJ0VG9CaWxsT2ZNYXRlcmlhbChCb21SZXF1ZXN0IGJvbVJlcXVlc3QpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFBhcnRLZXkgYm9ta2V5ID0gbmV3IFBhcnRLZXkoKTsKICAgICAgICAgICAgIGJvbWtleS5wYXJ0TnVtYmVyID0gYm9tUmVxdWVzdC5ib21QYXJ0TnVtYmVyOwogICAgICAgICAgICAgYm9ta2V5LnJldmlzaW9uID0gYm9tUmVxdWVzdC5ib21SZXZpc2lvbjsKLSAgICAKKwogICAgICAgICAgICAgTG9jYWxQYXJ0IGJvbSA9IHBhcnRIb21lLmZpbmRCeVByaW1hcnlLZXkoYm9ta2V5KTsKLSAgICAKKwogICAgICAgICAgICAgUGFydEtleSBwa2V5ID0gbmV3IFBhcnRLZXkoKTsKICAgICAgICAgICAgIHBrZXkucGFydE51bWJlciA9IGJvbVJlcXVlc3QucGFydE51bWJlcjsKICAgICAgICAgICAgIHBrZXkucmV2aXNpb24gPSBib21SZXF1ZXN0LnJldmlzaW9uOwotICAgIAorCiAgICAgICAgICAgICBMb2NhbFBhcnQgcGFydCA9IHBhcnRIb21lLmZpbmRCeVByaW1hcnlLZXkocGtleSk7CiAgICAgICAgICAgICBwYXJ0LnNldEJvbVBhcnQoYm9tKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgY3JlYXRlVmVuZG9yKFZlbmRvclJlcXVlc3QgdmVuZG9yUmVxdWVzdCkgewogICAgICAgICB0cnkgewotICAgICAgICAgICAgTG9jYWxWZW5kb3IgdmVuZG9yID0gdmVuZG9ySG9tZS5jcmVhdGUodmVuZG9yUmVxdWVzdC52ZW5kb3JJZCwgCi0gICAgICAgICAgICAgICAgICAgIHZlbmRvclJlcXVlc3QubmFtZSwgdmVuZG9yUmVxdWVzdC5hZGRyZXNzLCAKKyAgICAgICAgICAgIExvY2FsVmVuZG9yIHZlbmRvciA9IHZlbmRvckhvbWUuY3JlYXRlKHZlbmRvclJlcXVlc3QudmVuZG9ySWQsCisgICAgICAgICAgICAgICAgICAgIHZlbmRvclJlcXVlc3QubmFtZSwgdmVuZG9yUmVxdWVzdC5hZGRyZXNzLAogICAgICAgICAgICAgICAgICAgICB2ZW5kb3JSZXF1ZXN0LmNvbnRhY3QsIHZlbmRvclJlcXVlc3QucGhvbmUpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBjcmVhdGVWZW5kb3JQYXJ0KFZlbmRvclBhcnRSZXF1ZXN0IHZlbmRvclBhcnRSZXF1ZXN0KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBQYXJ0S2V5IHBrZXkgPSBuZXcgUGFydEtleSgpOwogICAgICAgICAgICAgcGtleS5wYXJ0TnVtYmVyID0gdmVuZG9yUGFydFJlcXVlc3QucGFydE51bWJlcjsKICAgICAgICAgICAgIHBrZXkucmV2aXNpb24gPSB2ZW5kb3JQYXJ0UmVxdWVzdC5yZXZpc2lvbjsKLSAgICAKKwogICAgICAgICAgICAgTG9jYWxQYXJ0IHBhcnQgPSBwYXJ0SG9tZS5maW5kQnlQcmltYXJ5S2V5KHBrZXkpOwogICAgICAgICAgICAgTG9jYWxWZW5kb3JQYXJ0IHZlbmRvclBhcnQgPSB2ZW5kb3JQYXJ0SG9tZS5jcmVhdGUoCi0gICAgICAgICAgICAgICAgICAgIHZlbmRvclBhcnRSZXF1ZXN0LmRlc2NyaXB0aW9uLCB2ZW5kb3JQYXJ0UmVxdWVzdC5wcmljZSwgCisgICAgICAgICAgICAgICAgICAgIHZlbmRvclBhcnRSZXF1ZXN0LmRlc2NyaXB0aW9uLCB2ZW5kb3JQYXJ0UmVxdWVzdC5wcmljZSwKICAgICAgICAgICAgICAgICAgICAgcGFydCk7CiAKICAgICAgICAgICAgIFZlbmRvcktleSB2a2V5ID0gbmV3IFZlbmRvcktleSgpOwpAQCAtMTUyLDI0ICsxNTIsMjQgQEAKIAogICAgIHB1YmxpYyB2b2lkIGNyZWF0ZU9yZGVyKE9yZGVyUmVxdWVzdCBvcmRlclJlcXVlc3QpIHsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIExvY2FsT3JkZXIgb3JkZXIgPSBvcmRlckhvbWUuY3JlYXRlKG9yZGVyUmVxdWVzdC5vcmRlcklkLCAKLSAgICAgICAgICAgICAgICAgICAgb3JkZXJSZXF1ZXN0LnN0YXR1cywgb3JkZXJSZXF1ZXN0LmRpc2NvdW50LCAKKyAgICAgICAgICAgIExvY2FsT3JkZXIgb3JkZXIgPSBvcmRlckhvbWUuY3JlYXRlKG9yZGVyUmVxdWVzdC5vcmRlcklkLAorICAgICAgICAgICAgICAgICAgICBvcmRlclJlcXVlc3Quc3RhdHVzLCBvcmRlclJlcXVlc3QuZGlzY291bnQsCiAgICAgICAgICAgICAgICAgICAgIG9yZGVyUmVxdWVzdC5zaGlwbWVudEluZm8pOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBhZGRMaW5lSXRlbShMaW5lSXRlbVJlcXVlc3QgbGluZUl0ZW1SZXF1ZXN0KSB7IAorICAgIHB1YmxpYyB2b2lkIGFkZExpbmVJdGVtKExpbmVJdGVtUmVxdWVzdCBsaW5lSXRlbVJlcXVlc3QpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIExvY2FsT3JkZXIgb3JkZXIgPSBvcmRlckhvbWUuZmluZEJ5UHJpbWFyeUtleShsaW5lSXRlbVJlcXVlc3Qub3JkZXJJZCk7Ci0gICAgCisKICAgICAgICAgICAgIFBhcnRLZXkgcGtleSA9IG5ldyBQYXJ0S2V5KCk7CiAgICAgICAgICAgICBwa2V5LnBhcnROdW1iZXIgPSBsaW5lSXRlbVJlcXVlc3QucGFydE51bWJlcjsKICAgICAgICAgICAgIHBrZXkucmV2aXNpb24gPSBsaW5lSXRlbVJlcXVlc3QucmV2aXNpb247Ci0gICAgCisKICAgICAgICAgICAgIExvY2FsUGFydCBwYXJ0ID0gcGFydEhvbWUuZmluZEJ5UHJpbWFyeUtleShwa2V5KTsKLSAgICAKKwogICAgICAgICAgICAgTG9jYWxMaW5lSXRlbSBsaW5lSXRlbSA9IGxpbmVJdGVtSG9tZS5jcmVhdGUob3JkZXIsIGxpbmVJdGVtUmVxdWVzdC5xdWFudGl0eSwKICAgICAgICAgICAgICAgICAgICAgcGFydC5nZXRWZW5kb3JQYXJ0KCkpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewpAQCAtMTgzLDcgKzE4Myw3IEBACiAgICAgICAgICAgICBQYXJ0S2V5IGJvbWtleSA9IG5ldyBQYXJ0S2V5KCk7CiAgICAgICAgICAgICBib21rZXkucGFydE51bWJlciA9IGJvbVJlcXVlc3QuYm9tUGFydE51bWJlcjsKICAgICAgICAgICAgIGJvbWtleS5yZXZpc2lvbiA9IGJvbVJlcXVlc3QuYm9tUmV2aXNpb247Ci0gICAgCisKICAgICAgICAgICAgIExvY2FsUGFydCBib20gPSBwYXJ0SG9tZS5maW5kQnlQcmltYXJ5S2V5KGJvbWtleSk7CiAgICAgICAgICAgICBDb2xsZWN0aW9uIHBhcnRzID0gYm9tLmdldFBhcnRzKCk7CiAgICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gcGFydHMuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOykgewpAQCAtMTkxLDcgKzE5MSw3IEBACiAgICAgICAgICAgICAgICAgTG9jYWxWZW5kb3JQYXJ0IHZlbmRvclBhcnQgPSBwYXJ0LmdldFZlbmRvclBhcnQoKTsKICAgICAgICAgICAgICAgICBwcmljZSArPSB2ZW5kb3JQYXJ0LmdldFByaWNlKCk7CiAgICAgICAgICAgICB9Ci0gICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CkBAIC0yMDQsNyArMjA0LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIExvY2FsT3JkZXIgb3JkZXIgPSBvcmRlckhvbWUuZmluZEJ5UHJpbWFyeUtleShvcmRlcklkKTsKICAgICAgICAgICAgIHByaWNlID0gb3JkZXIuY2FsY3VsYXRlQW1tb3VudCgpOwotICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQpAQCAtMjMzLDcgKzIzMyw3IEBACiAgICAgICAgICAgICAgICAgTG9jYWxWZW5kb3IgdmVuZG9yID0gKExvY2FsVmVuZG9yKWl0ZXJhdG9yLm5leHQoKTsKICAgICAgICAgICAgICAgICBuYW1lcy5hZGQodmVuZG9yLmdldE5hbWUoKSk7CiAgICAgICAgICAgICB9Ci0gICAgCisKICAgICAgICAgfSBjYXRjaCAoRmluZGVyRXhjZXB0aW9uIGUpIHsKICAgICAgICAgfQogCkBAIC0yNjksNyArMjY5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKHZlbmRvci5nZXROYW1lKCkpLmFwcGVuZCgnICcpCiAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZCh2ZW5kb3IuZ2V0Q29udGFjdCgpKS5hcHBlbmQoJ1xuJyk7CiAgICAgICAgICAgICB9Ci0gICAgCisKICAgICAgICAgfSBjYXRjaCAoRmluZGVyRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL29yZGVyYXBwL3NxbC9jcmVhdGVfZGVyYnkuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9vcmRlcmFwcC9zcWwvY3JlYXRlX2RlcmJ5LnNxbAppbmRleCBhZjc3MGRiLi4yYTM1ZWI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL29yZGVyYXBwL3NxbC9jcmVhdGVfZGVyYnkuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9jbXAvb3JkZXJhcHAvc3FsL2NyZWF0ZV9kZXJieS5zcWwKQEAgLTYsNjIgKzYsNjIgQEAKIGRyb3AgdGFibGUgUEFSVDsKIAogY3JlYXRlIHRhYmxlIFBBUlQgKAotCVBBUlRfTlVNQkVSCQlWQVJDSEFSKDE1KQlOT1QgTlVMTCwKLQlSRVZJU0lPTgkJTlVNRVJJQygyKSAgICAgIE5PVCBOVUxMLAotCURFU0NSSVBUSU9OCQlWQVJDSEFSKDI1NSksCi0JUkVWSVNJT05fREFURQkJVElNRVNUQU1QICAgICAgIE5PVCBOVUxMLAotCUJPTV9QQVJUX05VTUJFUiAgICAgICAgIFZBUkNIQVIoMTUpLAotCUJPTV9SRVZJU0lPTgkJTlVNRVJJQygyKSwKLQlQUklNQVJZIEtFWSAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKQorICAgIFBBUlRfTlVNQkVSICAgICAgICBWQVJDSEFSKDE1KSAgICBOT1QgTlVMTCwKKyAgICBSRVZJU0lPTiAgICAgICAgTlVNRVJJQygyKSAgICAgIE5PVCBOVUxMLAorICAgIERFU0NSSVBUSU9OICAgICAgICBWQVJDSEFSKDI1NSksCisgICAgUkVWSVNJT05fREFURSAgICAgICAgVElNRVNUQU1QICAgICAgIE5PVCBOVUxMLAorICAgIEJPTV9QQVJUX05VTUJFUiAgICAgICAgIFZBUkNIQVIoMTUpLAorICAgIEJPTV9SRVZJU0lPTiAgICAgICAgTlVNRVJJQygyKSwKKyAgICBQUklNQVJZIEtFWSAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKQogKTsKIAogYWx0ZXIgdGFibGUgUEFSVAotCWFkZCBDT05TVFJBSU5UIEZLXzEgRk9SRUlHTiBLRVkgKEJPTV9QQVJUX05VTUJFUiwgQk9NX1JFVklTSU9OKSAKKyAgICBhZGQgQ09OU1RSQUlOVCBGS18xIEZPUkVJR04gS0VZIChCT01fUEFSVF9OVU1CRVIsIEJPTV9SRVZJU0lPTikKICAgICAgICAgICAgICAgICBSRUZFUkVOQ0VTIFBBUlQgKFBBUlRfTlVNQkVSLCBSRVZJU0lPTik7CiAKIGNyZWF0ZSB0YWJsZSBQQVJUX0RFVEFJTCAoCi0JUEFSVF9OVU1CRVIJVkFSQ0hBUigxNSkJTk9UIE5VTEwsCi0JUkVWSVNJT04JTlVNRVJJQygyKSAgICAgIE5PVCBOVUxMLAotCVNQRUNJRklDQVRJT04JQ0xPQigxMEspLAotCURSQVdJTkcJCUJMT0IoMTBLKSwKLQlQUklNQVJZIEtFWSAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKQorICAgIFBBUlRfTlVNQkVSICAgIFZBUkNIQVIoMTUpICAgIE5PVCBOVUxMLAorICAgIFJFVklTSU9OICAgIE5VTUVSSUMoMikgICAgICBOT1QgTlVMTCwKKyAgICBTUEVDSUZJQ0FUSU9OICAgIENMT0IoMTBLKSwKKyAgICBEUkFXSU5HICAgICAgICBCTE9CKDEwSyksCisgICAgUFJJTUFSWSBLRVkgKFBBUlRfTlVNQkVSLCBSRVZJU0lPTikKICk7CiAKIGNyZWF0ZSB0YWJsZSBWRU5ET1IgKAotCVZFTkRPUl9JRCAgICAgICBJTlRFR0VSICAgICAgICAJTk9UIE5VTEwgUFJJTUFSWSBLRVksCi0JTkFNRQkJVkFSQ0hBUigzMCkJTk9UIE5VTEwsCi0JQUREUkVTUwkJVkFSQ0hBUigyNTUpCU5PVCBOVUxMLAotCUNPTlRBQ1QJCVZBUkNIQVIoMjU1KQlOT1QgTlVMTCwKLQlQSE9ORQkJVkFSQ0hBUigzMCkJTk9UIE5VTEwKKyAgICBWRU5ET1JfSUQgICAgICAgSU5URUdFUiAgICAgICAgICAgIE5PVCBOVUxMIFBSSU1BUlkgS0VZLAorICAgIE5BTUUgICAgICAgIFZBUkNIQVIoMzApICAgIE5PVCBOVUxMLAorICAgIEFERFJFU1MgICAgICAgIFZBUkNIQVIoMjU1KSAgICBOT1QgTlVMTCwKKyAgICBDT05UQUNUICAgICAgICBWQVJDSEFSKDI1NSkgICAgTk9UIE5VTEwsCisgICAgUEhPTkUgICAgICAgIFZBUkNIQVIoMzApICAgIE5PVCBOVUxMCiApOwogCiBjcmVhdGUgdGFibGUgVkVORE9SX1BBUlQgKAotCVZFTkRPUl9QQVJUX05VTUJFUglCSUdJTlQgICBOT1QgTlVMTCAgICAgICAgICAgICAgIFBSSU1BUlkgS0VZLAotCURFU0NSSVBUSU9OCQlWQVJDSEFSKDI1NSksCi0JUFJJQ0UJCQlET1VCTEUgUFJFQ0lTSU9OICAgICAgICBOT1QgTlVMTCwKLQlWRU5ET1JfSUQJCUlOVEVHRVIgICAgICAgICAgICAgICAgIE5PVCBOVUxMLAotCVBBUlRfTlVNQkVSCQlWQVJDSEFSKDE1KQkJTk9UIE5VTEwsCi0JUEFSVF9SRVZJU0lPTgkJTlVNRVJJQygyKSAgICAgICAgICAgICAgTk9UIE5VTEwsCi0JQ09OU1RSQUlOVCBGS18yIEZPUkVJR04gS0VZIChWRU5ET1JfSUQpIFJFRkVSRU5DRVMgVkVORE9SIChWRU5ET1JfSUQpLAotCUNPTlNUUkFJTlQgRktfMyBGT1JFSUdOIEtFWSAoUEFSVF9OVU1CRVIsIFBBUlRfUkVWSVNJT04pIFJFRkVSRU5DRVMgUEFSVCAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKSwKLQlVTklRVUUgKFBBUlRfTlVNQkVSLCBQQVJUX1JFVklTSU9OKQorICAgIFZFTkRPUl9QQVJUX05VTUJFUiAgICBCSUdJTlQgICBOT1QgTlVMTCAgICAgICAgICAgICAgIFBSSU1BUlkgS0VZLAorICAgIERFU0NSSVBUSU9OICAgICAgICBWQVJDSEFSKDI1NSksCisgICAgUFJJQ0UgICAgICAgICAgICBET1VCTEUgUFJFQ0lTSU9OICAgICAgICBOT1QgTlVMTCwKKyAgICBWRU5ET1JfSUQgICAgICAgIElOVEVHRVIgICAgICAgICAgICAgICAgIE5PVCBOVUxMLAorICAgIFBBUlRfTlVNQkVSICAgICAgICBWQVJDSEFSKDE1KSAgICAgICAgTk9UIE5VTEwsCisgICAgUEFSVF9SRVZJU0lPTiAgICAgICAgTlVNRVJJQygyKSAgICAgICAgICAgICAgTk9UIE5VTEwsCisgICAgQ09OU1RSQUlOVCBGS18yIEZPUkVJR04gS0VZIChWRU5ET1JfSUQpIFJFRkVSRU5DRVMgVkVORE9SIChWRU5ET1JfSUQpLAorICAgIENPTlNUUkFJTlQgRktfMyBGT1JFSUdOIEtFWSAoUEFSVF9OVU1CRVIsIFBBUlRfUkVWSVNJT04pIFJFRkVSRU5DRVMgUEFSVCAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKSwKKyAgICBVTklRVUUgKFBBUlRfTlVNQkVSLCBQQVJUX1JFVklTSU9OKQogKTsKIAogY3JlYXRlIHRhYmxlIE9SREVSUyAoCi0JT1JERVJfSUQJSU5URUdFUiAgICBOT1QgTlVMTCAgUFJJTUFSWSBLRVksCi0JU1RBVFVTCQlDSEFSKDEpCQlOT1QgTlVMTCwKLQlMQVNUX1VQREFURQlUSU1FU1RBTVAgICAgICAgTk9UIE5VTEwsCi0JRElTQ09VTlQJTlVNRVJJQygyKSAgICAgIE5PVCBOVUxMLAotCVNISVBNRU5UX0lORk8JVkFSQ0hBUigyNTUpCisgICAgT1JERVJfSUQgICAgSU5URUdFUiAgICBOT1QgTlVMTCAgUFJJTUFSWSBLRVksCisgICAgU1RBVFVTICAgICAgICBDSEFSKDEpICAgICAgICBOT1QgTlVMTCwKKyAgICBMQVNUX1VQREFURSAgICBUSU1FU1RBTVAgICAgICAgTk9UIE5VTEwsCisgICAgRElTQ09VTlQgICAgTlVNRVJJQygyKSAgICAgIE5PVCBOVUxMLAorICAgIFNISVBNRU5UX0lORk8gICAgVkFSQ0hBUigyNTUpCiApOwogCiBjcmVhdGUgdGFibGUgTElORUlURU0gKAotCU9SREVSX0lECQlJTlRFR0VSICAgICAgICAgTk9UIE5VTEwsCi0JSVRFTV9JRAkJCU5VTUVSSUMoMykgICAgICBOT1QgTlVMTCwKLQlRVUFOVElUWQkJTlVNRVJJQygzKSAgICAgIE5PVCBOVUxMLAotCVZFTkRPUl9QQVJUX05VTUJFUglCSUdJTlQgICAgICAgICAgTk9UIE5VTEwsCi0JQ09OU1RSQUlOVCBGS180IEZPUkVJR04gS0VZIChPUkRFUl9JRCkgUkVGRVJFTkNFUyBPUkRFUlMgKE9SREVSX0lEKSwKLQlDT05TVFJBSU5UIEZLXzUgRk9SRUlHTiBLRVkgKFZFTkRPUl9QQVJUX05VTUJFUikgUkVGRVJFTkNFUyBWRU5ET1JfUEFSVCAoVkVORE9SX1BBUlRfTlVNQkVSKSwKLQlQUklNQVJZIEtFWSAoT1JERVJfSUQsIElURU1fSUQpCisgICAgT1JERVJfSUQgICAgICAgIElOVEVHRVIgICAgICAgICBOT1QgTlVMTCwKKyAgICBJVEVNX0lEICAgICAgICAgICAgTlVNRVJJQygzKSAgICAgIE5PVCBOVUxMLAorICAgIFFVQU5USVRZICAgICAgICBOVU1FUklDKDMpICAgICAgTk9UIE5VTEwsCisgICAgVkVORE9SX1BBUlRfTlVNQkVSICAgIEJJR0lOVCAgICAgICAgICBOT1QgTlVMTCwKKyAgICBDT05TVFJBSU5UIEZLXzQgRk9SRUlHTiBLRVkgKE9SREVSX0lEKSBSRUZFUkVOQ0VTIE9SREVSUyAoT1JERVJfSUQpLAorICAgIENPTlNUUkFJTlQgRktfNSBGT1JFSUdOIEtFWSAoVkVORE9SX1BBUlRfTlVNQkVSKSBSRUZFUkVOQ0VTIFZFTkRPUl9QQVJUIChWRU5ET1JfUEFSVF9OVU1CRVIpLAorICAgIFBSSU1BUlkgS0VZIChPUkRFUl9JRCwgSVRFTV9JRCkKICk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9jbXAvb3JkZXJhcHAvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9vcmRlcmFwcC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggY2Y3NWU4ZC4uOWQyOGQxNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9vcmRlcmFwcC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9vcmRlcmFwcC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTgsMjAgKzgsMjAgQEAKIGNvbW1pdDsKIAogLyogU2VsZi1yZWYgdG8gaWRlbnRpZnkgQmlsbCBvZiBNYXRlcmlhbCAoQk9NKQotICogQ29tcG91bmQgUEsgCisgKiBDb21wb3VuZCBQSwogICovCiBjcmVhdGUgdGFibGUgUEFSVCAoCi0JUEFSVF9OVU1CRVIJCVZBUkNIQVIoMTUpCU5PVCBOVUxMLAotCVJFVklTSU9OCQlOVU1FUklDKDIpICAgICAgTk9UIE5VTEwsCi0JREVTQ1JJUFRJT04JCVZBUkNIQVIoMjU1KQlOVUxMLAotCVJFVklTSU9OX0RBVEUJCVRJTUVTVEFNUCAgICAgICBOT1QgTlVMTCwKLQlCT01fUEFSVF9OVU1CRVIgICAgICAgICBWQVJDSEFSKDE1KQlOVUxMLAotCUJPTV9SRVZJU0lPTgkJTlVNRVJJQygyKSAgICAgIE5VTEwsCi0JUFJJTUFSWSBLRVkgKFBBUlRfTlVNQkVSLCBSRVZJU0lPTikKKyAgICBQQVJUX05VTUJFUiAgICAgICAgVkFSQ0hBUigxNSkgICAgTk9UIE5VTEwsCisgICAgUkVWSVNJT04gICAgICAgIE5VTUVSSUMoMikgICAgICBOT1QgTlVMTCwKKyAgICBERVNDUklQVElPTiAgICAgICAgVkFSQ0hBUigyNTUpICAgIE5VTEwsCisgICAgUkVWSVNJT05fREFURSAgICAgICAgVElNRVNUQU1QICAgICAgIE5PVCBOVUxMLAorICAgIEJPTV9QQVJUX05VTUJFUiAgICAgICAgIFZBUkNIQVIoMTUpICAgIE5VTEwsCisgICAgQk9NX1JFVklTSU9OICAgICAgICBOVU1FUklDKDIpICAgICAgTlVMTCwKKyAgICBQUklNQVJZIEtFWSAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKQogKTsKIAogYWx0ZXIgdGFibGUgUEFSVAotCWFkZCBDT05TVFJBSU5UIEZLXzEgRk9SRUlHTiBLRVkgKEJPTV9QQVJUX05VTUJFUiwgQk9NX1JFVklTSU9OKSAKKyAgICBhZGQgQ09OU1RSQUlOVCBGS18xIEZPUkVJR04gS0VZIChCT01fUEFSVF9OVU1CRVIsIEJPTV9SRVZJU0lPTikKICAgICAgICAgICAgICAgICBSRUZFUkVOQ0VTIFBBUlQgKFBBUlRfTlVNQkVSLCBSRVZJU0lPTik7CiAKIGNvbW1pdDsKQEAgLTMxLDY1ICszMSw2NSBAQAogICogQ0xPQiBjb2x1bW4gdHlwZQogICovCiBjcmVhdGUgdGFibGUgUEFSVF9ERVRBSUwgKAotCVBBUlRfTlVNQkVSCVZBUkNIQVIoMTUpCU5PVCBOVUxMLAotCVJFVklTSU9OCU5VTUVSSUMoMikgICAgICBOT1QgTlVMTCwKLQlTUEVDSUZJQ0FUSU9OCUNMT0IoMTBLKQlOVUxMLAotCURSQVdJTkcJCUJMT0IoMTBLKQlOVUxMLAotCVBSSU1BUlkgS0VZIChQQVJUX05VTUJFUiwgUkVWSVNJT04pCisgICAgUEFSVF9OVU1CRVIgICAgVkFSQ0hBUigxNSkgICAgTk9UIE5VTEwsCisgICAgUkVWSVNJT04gICAgTlVNRVJJQygyKSAgICAgIE5PVCBOVUxMLAorICAgIFNQRUNJRklDQVRJT04gICAgQ0xPQigxMEspICAgIE5VTEwsCisgICAgRFJBV0lORyAgICAgICAgQkxPQigxMEspICAgIE5VTEwsCisgICAgUFJJTUFSWSBLRVkgKFBBUlRfTlVNQkVSLCBSRVZJU0lPTikKICk7CiAKIGNvbW1pdDsKIAogLyogUEsgY2FuIGJlIG1hcHBlZCB0byBhIHByaW1pdGl2ZSBQSyBmaWVsZCB0eXBlICovCiBjcmVhdGUgdGFibGUgVkVORE9SICgKLQlWRU5ET1JfSUQgICAgICAgSU5URUdFUiAgICAgICAgCVBSSU1BUlkgS0VZLAotCU5BTUUJCVZBUkNIQVIoMzApCU5PVCBOVUxMLAotCUFERFJFU1MJCVZBUkNIQVIoMjU1KQlOT1QgTlVMTCwKLQlDT05UQUNUCQlWQVJDSEFSKDI1NSkJTk9UIE5VTEwsCi0JUEhPTkUJCVZBUkNIQVIoMzApCU5PVCBOVUxMCisgICAgVkVORE9SX0lEICAgICAgIElOVEVHRVIgICAgICAgICAgICBQUklNQVJZIEtFWSwKKyAgICBOQU1FICAgICAgICBWQVJDSEFSKDMwKSAgICBOT1QgTlVMTCwKKyAgICBBRERSRVNTICAgICAgICBWQVJDSEFSKDI1NSkgICAgTk9UIE5VTEwsCisgICAgQ09OVEFDVCAgICAgICAgVkFSQ0hBUigyNTUpICAgIE5PVCBOVUxMLAorICAgIFBIT05FICAgICAgICBWQVJDSEFSKDMwKSAgICBOT1QgTlVMTAogKTsKIAogY29tbWl0OwogCi0vKiBDYW4gYmUgdXNlZCBmb3IgdW5rbm93biBQSyAKKy8qIENhbiBiZSB1c2VkIGZvciB1bmtub3duIFBLCiAgKiAxLTEgdG8gUEFSVAogICogQ29tcG91bmQgRksKICAqLwogY3JlYXRlIHRhYmxlIFZFTkRPUl9QQVJUICgKLQlWRU5ET1JfUEFSVF9OVU1CRVIJQklHSU5UICAgICAgICAgICAgICAgICAgUFJJTUFSWSBLRVksCi0JREVTQ1JJUFRJT04JCVZBUkNIQVIoMjU1KQkJTlVMTCwKLQlQUklDRQkJCURPVUJMRSBQUkVDSVNJT04gICAgICAgIE5PVCBOVUxMLAotCVZFTkRPUl9JRAkJSU5URUdFUiAgICAgICAgICAgICAgICAgTk9UIE5VTEwsCi0JUEFSVF9OVU1CRVIJCVZBUkNIQVIoMTUpCQlOT1QgTlVMTCwKLQlQQVJUX1JFVklTSU9OCQlOVU1FUklDKDIpICAgICAgICAgICAgICBOT1QgTlVMTCwKLQlDT05TVFJBSU5UIEZLXzIgRk9SRUlHTiBLRVkgKFZFTkRPUl9JRCkgUkVGRVJFTkNFUyBWRU5ET1IgKFZFTkRPUl9JRCksCi0JQ09OU1RSQUlOVCBGS18zIEZPUkVJR04gS0VZIChQQVJUX05VTUJFUiwgUEFSVF9SRVZJU0lPTikgUkVGRVJFTkNFUyBQQVJUIChQQVJUX05VTUJFUiwgUkVWSVNJT04pLAotCVVOSVFVRSAoUEFSVF9OVU1CRVIsIFBBUlRfUkVWSVNJT04pCisgICAgVkVORE9SX1BBUlRfTlVNQkVSICAgIEJJR0lOVCAgICAgICAgICAgICAgICAgIFBSSU1BUlkgS0VZLAorICAgIERFU0NSSVBUSU9OICAgICAgICBWQVJDSEFSKDI1NSkgICAgICAgIE5VTEwsCisgICAgUFJJQ0UgICAgICAgICAgICBET1VCTEUgUFJFQ0lTSU9OICAgICAgICBOT1QgTlVMTCwKKyAgICBWRU5ET1JfSUQgICAgICAgIElOVEVHRVIgICAgICAgICAgICAgICAgIE5PVCBOVUxMLAorICAgIFBBUlRfTlVNQkVSICAgICAgICBWQVJDSEFSKDE1KSAgICAgICAgTk9UIE5VTEwsCisgICAgUEFSVF9SRVZJU0lPTiAgICAgICAgTlVNRVJJQygyKSAgICAgICAgICAgICAgTk9UIE5VTEwsCisgICAgQ09OU1RSQUlOVCBGS18yIEZPUkVJR04gS0VZIChWRU5ET1JfSUQpIFJFRkVSRU5DRVMgVkVORE9SIChWRU5ET1JfSUQpLAorICAgIENPTlNUUkFJTlQgRktfMyBGT1JFSUdOIEtFWSAoUEFSVF9OVU1CRVIsIFBBUlRfUkVWSVNJT04pIFJFRkVSRU5DRVMgUEFSVCAoUEFSVF9OVU1CRVIsIFJFVklTSU9OKSwKKyAgICBVTklRVUUgKFBBUlRfTlVNQkVSLCBQQVJUX1JFVklTSU9OKQogKTsKIAogY29tbWl0OwogCiBjcmVhdGUgdGFibGUgT1JERVJTICgKLQlPUkRFUl9JRAlJTlRFR0VSICAgICAgICAgUFJJTUFSWSBLRVksCi0JU1RBVFVTCQlDSEFSKDEpCQlOT1QgTlVMTCwKLQlMQVNUX1VQREFURQlUSU1FU1RBTVAgICAgICAgTk9UIE5VTEwsCi0JRElTQ09VTlQJTlVNRVJJQygyKSAgICAgIE5PVCBOVUxMLAotCVNISVBNRU5UX0lORk8JVkFSQ0hBUigyNTUpCU5VTEwKKyAgICBPUkRFUl9JRCAgICBJTlRFR0VSICAgICAgICAgUFJJTUFSWSBLRVksCisgICAgU1RBVFVTICAgICAgICBDSEFSKDEpICAgICAgICBOT1QgTlVMTCwKKyAgICBMQVNUX1VQREFURSAgICBUSU1FU1RBTVAgICAgICAgTk9UIE5VTEwsCisgICAgRElTQ09VTlQgICAgTlVNRVJJQygyKSAgICAgIE5PVCBOVUxMLAorICAgIFNISVBNRU5UX0lORk8gICAgVkFSQ0hBUigyNTUpICAgIE5VTEwKICk7CiAKIGNvbW1pdDsKIAotLyogT3ZlcmxhcHBpbmcgUEstRksgCisvKiBPdmVybGFwcGluZyBQSy1GSwogICogVW5pLWRpcmVjdGlvbmFsIHRvIFZFTkRPUl9QQVJUCiAgKi8KIGNyZWF0ZSB0YWJsZSBMSU5FSVRFTSAoCi0JT1JERVJfSUQJCUlOVEVHRVIgICAgICAgICBOT1QgTlVMTCwKLQlJVEVNX0lECQkJTlVNRVJJQygzKSAgICAgIE5PVCBOVUxMLAotCVFVQU5USVRZCQlOVU1FUklDKDMpICAgICAgTk9UIE5VTEwsCi0JVkVORE9SX1BBUlRfTlVNQkVSCUJJR0lOVCAgICAgICAgICBOT1QgTlVMTCwKLQlDT05TVFJBSU5UIEZLXzQgRk9SRUlHTiBLRVkgKE9SREVSX0lEKSBSRUZFUkVOQ0VTIE9SREVSUyAoT1JERVJfSUQpLAotCUNPTlNUUkFJTlQgRktfNSBGT1JFSUdOIEtFWSAoVkVORE9SX1BBUlRfTlVNQkVSKSBSRUZFUkVOQ0VTIFZFTkRPUl9QQVJUIChWRU5ET1JfUEFSVF9OVU1CRVIpLAotCVBSSU1BUlkgS0VZIChPUkRFUl9JRCwgSVRFTV9JRCkKKyAgICBPUkRFUl9JRCAgICAgICAgSU5URUdFUiAgICAgICAgIE5PVCBOVUxMLAorICAgIElURU1fSUQgICAgICAgICAgICBOVU1FUklDKDMpICAgICAgTk9UIE5VTEwsCisgICAgUVVBTlRJVFkgICAgICAgIE5VTUVSSUMoMykgICAgICBOT1QgTlVMTCwKKyAgICBWRU5ET1JfUEFSVF9OVU1CRVIgICAgQklHSU5UICAgICAgICAgIE5PVCBOVUxMLAorICAgIENPTlNUUkFJTlQgRktfNCBGT1JFSUdOIEtFWSAoT1JERVJfSUQpIFJFRkVSRU5DRVMgT1JERVJTIChPUkRFUl9JRCksCisgICAgQ09OU1RSQUlOVCBGS181IEZPUkVJR04gS0VZIChWRU5ET1JfUEFSVF9OVU1CRVIpIFJFRkVSRU5DRVMgVkVORE9SX1BBUlQgKFZFTkRPUl9QQVJUX05VTUJFUiksCisgICAgUFJJTUFSWSBLRVkgKE9SREVSX0lELCBJVEVNX0lEKQogKTsKIAogY29tbWl0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9yb3N0ZXIvYnVpbGQtbmcueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9yb3N0ZXIvYnVpbGQtbmcueG1sCmluZGV4IDhlODEyODEuLjA1M2MxZDUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9jbXAvcm9zdGVyL2J1aWxkLW5nLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL3Jvc3Rlci9idWlsZC1uZy54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InV0aWwiLz4KQEAgLTU0LDQxICs1NCw0MSBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLXRlYW0tamFyIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFwcGNsaWVudC1qYXItY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWFyIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLXJvc3Rlci1qYXIiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVqYmphci1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSIke2VqYi1qYXItcm9zdGVyLnhtbH0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9IiR7c3VuLWVqYi1qYXItcm9zdGVyLnhtbH0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovTGVhZ3VlRGV0YWlscy5jbGFzcywqKi9QbGF5ZXJEZXRhaWxzLmNsYXNzLAogICAgICAgICAgICAgKiovVGVhbURldGFpbHMuY2xhc3MsKiovKlJvc3RlciouY2xhc3MsKiovRGVidWcuY2xhc3MiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLXRlYW0tamFyIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iJHtlamItamFyLXRlYW0ueG1sfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iJHtzdW4tZWpiLWphci10ZWFtLnhtbH0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKkxlYWd1ZSouY2xhc3MsKiovKlBsYXllciouY2xhc3MsKiovKlRlYW0qLmNsYXNzLCoqL0RlYnVnLmNsYXNzLCoqLypkYnNjaGVtYSoiIC8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJlamIuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tdGVhbS1lamIuamFyIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLWVhciI+CiAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgICAKKyAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfS9saWIiIGluY2x1ZGVzPSJyZXBvcnRlci5qYXIiLz4KLSAgICAgIDwvZWFyPiAgICAgICAgCisgICAgICA8L2Vhcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTEwMywxNyArMTAzLDE3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgIDxhcmcgbGluZT0iLWNsaWVudCAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiIC8+CiAgICAgICAgICA8ZW52IGtleT0iQVBQQ1BBVEgiIHBhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvdGVzdG5nLmphciIvPgogICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgpAQCAtMTIyLDE1ICsxMjIsMTUgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXBlcnNpc3RlbmNlLXJlc291cmNlLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gCi0gICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic3FsLWNyZWF0ZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0ic3FsLWRyb3AiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4gICAKKyAgICA8dGFyZ2V0IG5hbWU9InNxbC1kcm9wIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgIDwvYW50Y2FsbD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9jbXAvcm9zdGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL3Jvc3Rlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDU5NzlkYWQuLjViZDM3NWQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9jbXAvcm9zdGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9yb3N0ZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItY21wIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yb3N0ZXIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJvc3RlciIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci10ZWFtLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci10ZWFtLnhtbCIvPgpAQCAtMjYsMTEgKzI2LDExIEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXItdGVhbS54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLXRlYW0ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXItcm9zdGVyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXItcm9zdGVyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1jbXAtbWFwcGluZ3MueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tY21wLW1hcHBpbmdzLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImRic2NoZW1hIiB2YWx1ZT0ic3FsL1Jvc3RlclNjaGVtYS5kYnNjaGVtYSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9yb3N0ZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9yb3N0ZXIvYnVpbGQueG1sCmluZGV4IGExOTkzN2EuLjgwZjU4NzQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9jbXAvcm9zdGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL3Jvc3Rlci9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InV0aWwiLz4KQEAgLTU0LDQxICs1NCw0MSBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLXRlYW0tamFyIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFwcGNsaWVudC1qYXItY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWFyIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLXJvc3Rlci1qYXIiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVqYmphci1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSIke2VqYi1qYXItcm9zdGVyLnhtbH0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9IiR7c3VuLWVqYi1qYXItcm9zdGVyLnhtbH0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovTGVhZ3VlRGV0YWlscy5jbGFzcywqKi9QbGF5ZXJEZXRhaWxzLmNsYXNzLAogICAgICAgICAgICAgKiovVGVhbURldGFpbHMuY2xhc3MsKiovKlJvc3RlciouY2xhc3MsKiovRGVidWcuY2xhc3MiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLXRlYW0tamFyIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iJHtlamItamFyLXRlYW0ueG1sfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iJHtzdW4tZWpiLWphci10ZWFtLnhtbH0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKkxlYWd1ZSouY2xhc3MsKiovKlBsYXllciouY2xhc3MsKiovKlRlYW0qLmNsYXNzLCoqL0RlYnVnLmNsYXNzLCoqLypkYnNjaGVtYSoiIC8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJlamIuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tdGVhbS1lamIuamFyIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLWVhciI+CiAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgICAKKyAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfS9saWIiIGluY2x1ZGVzPSJyZXBvcnRlci5qYXIiLz4KLSAgICAgIDwvZWFyPiAgICAgICAgCisgICAgICA8L2Vhcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTEwNCwxNCArMTA0LDE0IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgpAQCAtMTIwLDE1ICsxMjAsMTUgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXBlcnNpc3RlbmNlLXJlc291cmNlLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gCi0gICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic3FsLWNyZWF0ZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0ic3FsLWRyb3AiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4gICAKKyAgICA8dGFyZ2V0IG5hbWU9InNxbC1kcm9wIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgIDwvYW50Y2FsbD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9jbXAvcm9zdGVyL2NsaWVudC9Sb3N0ZXJDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9jbXAvcm9zdGVyL2NsaWVudC9Sb3N0ZXJDbGllbnQuamF2YQppbmRleCBlNjNhZWE4Li41NDRjNzI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL3Jvc3Rlci9jbGllbnQvUm9zdGVyQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9yb3N0ZXIvY2xpZW50L1Jvc3RlckNsaWVudC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIAogcHVibGljIGNsYXNzIFJvc3RlckNsaWVudCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdHVzID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC0zNyw4ICszNyw4IEBACiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlUm9zdGVyIik7CiAKLSAgICAgICAgICAgIFJvc3RlckhvbWUgaG9tZSA9IAotICAgICAgICAgICAgICAgIChSb3N0ZXJIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgUm9zdGVySG9tZSBob21lID0KKyAgICAgICAgICAgICAgICAoUm9zdGVySG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSb3N0ZXJIb21lLmNsYXNzKTsKIAogICAgICAgICAgICAgUm9zdGVyIG15Um9zdGVyID0gaG9tZS5jcmVhdGUoKTsKQEAgLTExMiw3ICsxMTIsNyBAQAogICAgICAgICAgICAgcGxheWVyTGlzdCA9IG15Um9zdGVyLmdldFBsYXllcnNCeVBvc2l0aW9uKCJkZWZlbmRlciIpOwogICAgICAgICAgICAgcGxheWVyTGlzdCA9IG15Um9zdGVyLmdldEFsbFBsYXllcnMoKTsKICAgICAgICAgICAgIHBsYXllckxpc3QgPSBteVJvc3Rlci5nZXRQbGF5ZXJzTm90T25UZWFtKCk7Ci0gICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lKCJwb3dlciBmb3J3YXJkIiwgCisgICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lKCJwb3dlciBmb3J3YXJkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkphY2sgUGF0dGVyc29uIik7CiAgICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0UGxheWVyc0J5Q2l0eSgiVHJ1Y2tlZSIpOwogICAgICAgICAgICAgcGxheWVyTGlzdCA9IG15Um9zdGVyLmdldFBsYXllcnNCeVNwb3J0KCJTb2NjZXIiKTsKQEAgLTE1OSw3ICsxNTksNyBAQAogCiAgICAgICAgICAgICBteVJvc3Rlci5jcmVhdGVUZWFtSW5MZWFndWUobmV3IFRlYW1EZXRhaWxzKAogICAgICAgICAgICAgICAgICJUMiIsICJHb3BoZXJzIiwgIk1hbnRlY2EiKSwgIkwxIik7Ci0gICAgICAgICAgIAorCiAgICAgICAgICAgICBteVJvc3Rlci5jcmVhdGVUZWFtSW5MZWFndWUobmV3IFRlYW1EZXRhaWxzKAogICAgICAgICAgICAgICAgICJUMyIsICJEZWVyIiwgIkJvZGllIiksICJMMiIpOwogCkBAIC0yNzcsNyArMjc3LDcgQEAKICAgICAgICAgICAgIC8vIFBsYXllcnMsIG5vIHRlYW0KICAgICAgICAgICAgIG15Um9zdGVyLmNyZWF0ZVBsYXllcihuZXcgUGxheWVyRGV0YWlscygKICAgICAgICAgICAgICAgICAiUDI2IiwgIkhvYmllIEphY2tzb24iLCAicGl0Y2hlciIsIDU4Mi4wMCkpOwotICAgICAgICAgIAorCiAgICAgICAgICAgICBteVJvc3Rlci5jcmVhdGVQbGF5ZXIobmV3IFBsYXllckRldGFpbHMoCiAgICAgICAgICAgICAgICAgIlAyNyIsICJNZWxpbmRhIEtlbmRhbGwiLCAiY2F0Y2hlciIsIDY3Ny4wMCkpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL3Jvc3Rlci9lamIvTGVhZ3VlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9yb3N0ZXIvZWpiL0xlYWd1ZUJlYW4uamF2YQppbmRleCBjMGQ3Nzk4Li40OTczODZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL3Jvc3Rlci9lamIvTGVhZ3VlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9jbXAvcm9zdGVyL2VqYi9MZWFndWVCZWFuLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIAogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0TGVhZ3VlSWQoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRMZWFndWVJZChTdHJpbmcgaWQpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXROYW1lKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7CiAKQEAgLTczLDMxICs3MywzMSBAQAogICAgICAgICBzZXRTcG9ydChzcG9ydCk7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHNwb3J0KQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsgfQogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGN0eCkgewogICAgICAgICBjb250ZXh0ID0gY3R4OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsKICAgICAgICAgY29udGV4dCA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiTGVhZ3VlQmVhbiBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiTGVhZ3VlQmVhbiBlamJMb2FkIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJMZWFndWVCZWFuIGVqYlN0b3JlIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgeyB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9yb3N0ZXIvZWpiL0xvY2FsTGVhZ3VlSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9yb3N0ZXIvZWpiL0xvY2FsTGVhZ3VlSG9tZS5qYXZhCmluZGV4IGM4ZWNmNGQuLjk4Yjc1OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9jbXAvcm9zdGVyL2VqYi9Mb2NhbExlYWd1ZUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL3Jvc3Rlci9lamIvTG9jYWxMZWFndWVIb21lLmphdmEKQEAgLTIwLDEwICsyMCwxMCBAQAogaW1wb3J0IGpha2FydGEuZWpiLio7CiAKIHB1YmxpYyBpbnRlcmZhY2UgTG9jYWxMZWFndWVIb21lIGV4dGVuZHMgRUpCTG9jYWxIb21lIHsKLSAgICAKKwogICAgIHB1YmxpYyBMb2NhbExlYWd1ZSBjcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBzcG9ydCkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBMb2NhbExlYWd1ZSBmaW5kQnlQcmltYXJ5S2V5IChTdHJpbmcgaWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL3Jvc3Rlci9lamIvTG9jYWxQbGF5ZXJIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL3Jvc3Rlci9lamIvTG9jYWxQbGF5ZXJIb21lLmphdmEKaW5kZXggNDdhMThkNi4uZGE0MjllNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9yb3N0ZXIvZWpiL0xvY2FsUGxheWVySG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9jbXAvcm9zdGVyL2VqYi9Mb2NhbFBsYXllckhvbWUuamF2YQpAQCAtMjAsMzkgKzIwLDM5IEBACiBpbXBvcnQgamFrYXJ0YS5lamIuKjsKIAogcHVibGljIGludGVyZmFjZSBMb2NhbFBsYXllckhvbWUgZXh0ZW5kcyBFSkJMb2NhbEhvbWUgewotICAgIAorCiAgICAgcHVibGljIExvY2FsUGxheWVyIGNyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHBvc2l0aW9uLAogICAgICAgICBkb3VibGUgc2FsYXJ5KQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIExvY2FsUGxheWVyIGZpbmRCeVByaW1hcnlLZXkgKFN0cmluZyBpZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKLSAgICAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQb3NpdGlvbihTdHJpbmcgcG9zaXRpb24pIAorCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UG9zaXRpb24oU3RyaW5nIHBvc2l0aW9uKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5SGlnaGVyU2FsYXJ5KFN0cmluZyBuYW1lKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlIaWdoZXJTYWxhcnkoU3RyaW5nIG5hbWUpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlTYWxhcnlSYW5nZShkb3VibGUgbG93LCBkb3VibGUgaGlnaCkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U2FsYXJ5UmFuZ2UoZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlMZWFndWUoTG9jYWxMZWFndWUgbGVhZ3VlKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlMZWFndWUoTG9jYWxMZWFndWUgbGVhZ3VlKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5U3BvcnQoU3RyaW5nIHNwb3J0KSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlTcG9ydChTdHJpbmcgc3BvcnQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlDaXR5KFN0cmluZyBjaXR5KSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlDaXR5KFN0cmluZyBjaXR5KQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEFsbCgpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRBbGwoKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZE5vdE9uVGVhbSgpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmROb3RPblRlYW0oKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogCi0gICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UG9zaXRpb25BbmROYW1lKFN0cmluZyBwb3NpdGlvbiwgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEJ5UG9zaXRpb25BbmROYW1lKFN0cmluZyBwb3NpdGlvbiwKICAgICAgICAgU3RyaW5nIG5hbWUpIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlUZXN0IChTdHJpbmcgcGFybTEsIFN0cmluZyBwYXJtMiwgU3RyaW5nIHBhcm0zKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9yb3N0ZXIvZWpiL0xvY2FsVGVhbUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9jbXAvcm9zdGVyL2VqYi9Mb2NhbFRlYW1Ib21lLmphdmEKaW5kZXggMzAwZjFkYS4uYTUwNzJhMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9yb3N0ZXIvZWpiL0xvY2FsVGVhbUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL3Jvc3Rlci9lamIvTG9jYWxUZWFtSG9tZS5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiBwdWJsaWMgaW50ZXJmYWNlIExvY2FsVGVhbUhvbWUgZXh0ZW5kcyBFSkJMb2NhbEhvbWUgewogICAgIHB1YmxpYyBMb2NhbFRlYW0gY3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgY2l0eSkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBMb2NhbFRlYW0gZmluZEJ5UHJpbWFyeUtleSAoU3RyaW5nIGlkKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9yb3N0ZXIvZWpiL1BsYXllckJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9jbXAvcm9zdGVyL2VqYi9QbGF5ZXJCZWFuLmphdmEKaW5kZXggMjNjMzNhNC4uMTY5NTA2ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9yb3N0ZXIvZWpiL1BsYXllckJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL3Jvc3Rlci9lamIvUGxheWVyQmVhbi5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgLy8gQWNjZXNzIG1ldGhvZHMgZm9yIHBlcnNpc3RlbnQgZmllbGRzCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQbGF5ZXJJZCgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFBsYXllcklkKFN0cmluZyBpZCk7Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldE5hbWUoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKIApAQCAtNTEsMTMgKzUxLDEzIEBACiAKICAgICAvLyBCdXNpbmVzcyBtZXRob2RzCiAgICAgcHVibGljIENvbGxlY3Rpb24gZ2V0TGVhZ3VlcygpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewotICAgICAgICAgTG9jYWxQbGF5ZXIgcGxheWVyID0gCisgICAgICAgICBMb2NhbFBsYXllciBwbGF5ZXIgPQogICAgICAgICAgICAgIChMb2NhbFBsYXllciljb250ZXh0LmdldEVKQkxvY2FsT2JqZWN0KCk7CiAgICAgICAgICByZXR1cm4gZWpiU2VsZWN0TGVhZ3VlcyhwbGF5ZXIpOwogICAgIH0KIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGdldFNwb3J0cygpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewotICAgICAgICAgTG9jYWxQbGF5ZXIgcGxheWVyID0gCisgICAgICAgICBMb2NhbFBsYXllciBwbGF5ZXIgPQogICAgICAgICAgICAgIChMb2NhbFBsYXllciljb250ZXh0LmdldEVKQkxvY2FsT2JqZWN0KCk7CiAgICAgICAgICByZXR1cm4gZWpiU2VsZWN0U3BvcnRzKHBsYXllcik7CiAgICAgfQpAQCAtNzMsMzEgKzczLDMxIEBACiAgICAgICAgIHNldFNhbGFyeShzYWxhcnkpOwogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBwb3NpdGlvbiwKICAgICAgICAgZG91YmxlIHNhbGFyeSkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7IH0KIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBjdHgpIHsKICAgICAgICAgY29udGV4dCA9IGN0eDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKSB7CiAgICAgICAgIGNvbnRleHQgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKICAgICAgICAgRGVidWcucHJpbnQoIlBsYXllckJlYW4gZWpiUmVtb3ZlIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKICAgICAgICAgRGVidWcucHJpbnQoIlBsYXllckJlYW4gZWpiTG9hZCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUGxheWVyQmVhbiBlamJTdG9yZSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7IH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9jbXAvcm9zdGVyL2VqYi9Sb3N0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9jbXAvcm9zdGVyL2VqYi9Sb3N0ZXIuamF2YQppbmRleCAwMmI1NTE3Li45ZWUzMmM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL3Jvc3Rlci9lamIvUm9zdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9yb3N0ZXIvZWpiL1Jvc3Rlci5qYXZhCkBAIC0yMiw1NSArMjIsNTUgQEAKIGltcG9ydCBjb20uc3VuLnMxcGVxZS5lamIuY21wLnJvc3Rlci51dGlsLio7CiAKIHB1YmxpYyBpbnRlcmZhY2UgUm9zdGVyIGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAKKwogICAgIC8vIFBsYXllcnMKIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVBsYXllcihQbGF5ZXJEZXRhaWxzIGRldGFpbHMpIAorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVBsYXllcihQbGF5ZXJEZXRhaWxzIGRldGFpbHMpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgdm9pZCBhZGRQbGF5ZXIoU3RyaW5nIHBsYXllcklkLCBTdHJpbmcgdGVhbUlkKSAKKyAgICBwdWJsaWMgdm9pZCBhZGRQbGF5ZXIoU3RyaW5nIHBsYXllcklkLCBTdHJpbmcgdGVhbUlkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyB2b2lkIGRyb3BQbGF5ZXIoU3RyaW5nIHBsYXllcklkLCBTdHJpbmcgdGVhbUlkKSAKKyAgICBwdWJsaWMgdm9pZCBkcm9wUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBQbGF5ZXJEZXRhaWxzIGdldFBsYXllcihTdHJpbmcgcGxheWVySWQpIAorICAgIHB1YmxpYyBQbGF5ZXJEZXRhaWxzIGdldFBsYXllcihTdHJpbmcgcGxheWVySWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNPZlRlYW0oU3RyaW5nIHRlYW1JZCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtKFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNPZlRlYW1Db3B5KFN0cmluZyB0ZWFtSWQpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbUNvcHkoU3RyaW5nIHRlYW1JZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5UG9zaXRpb24oU3RyaW5nIHBvc2l0aW9uKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVBvc2l0aW9uKFN0cmluZyBwb3NpdGlvbikKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5SGlnaGVyU2FsYXJ5KFN0cmluZyBuYW1lKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U2FsYXJ5UmFuZ2UoZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U2FsYXJ5UmFuZ2UoZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUxlYWd1ZUlkKFN0cmluZyBsZWFndWVJZCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlMZWFndWVJZChTdHJpbmcgbGVhZ3VlSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVNwb3J0KFN0cmluZyBzcG9ydCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTcG9ydChTdHJpbmcgc3BvcnQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUNpdHkoU3RyaW5nIGNpdHkpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5Q2l0eShTdHJpbmcgY2l0eSkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0QWxsUGxheWVycygpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0QWxsUGxheWVycygpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNOb3RPblRlYW0oKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNOb3RPblRlYW0oKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUoU3RyaW5nIHBvc2l0aW9uLCAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVBvc2l0aW9uQW5kTmFtZShTdHJpbmcgcG9zaXRpb24sCiAgICAgICAgIFN0cmluZyBuYW1lKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRMZWFndWVzT2ZQbGF5ZXIoU3RyaW5nIHBsYXllcklkKQpAQCAtODEsMjcgKzgxLDI3IEBACiAKICAgICAvLyBUZWFtcwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRUZWFtc09mTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRUZWFtc09mTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRlYW1JbkxlYWd1ZShUZWFtRGV0YWlscyBkZXRhaWxzLCBTdHJpbmcgbGVhZ3VlSWQpIAorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRlYW1JbkxlYWd1ZShUZWFtRGV0YWlscyBkZXRhaWxzLCBTdHJpbmcgbGVhZ3VlSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVUZWFtKFN0cmluZyB0ZWFtSWQpIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVRlYW0oU3RyaW5nIHRlYW1JZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBUZWFtRGV0YWlscyBnZXRUZWFtKFN0cmluZyB0ZWFtSWQpIAorICAgIHB1YmxpYyBUZWFtRGV0YWlscyBnZXRUZWFtKFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICAvLyBMZWFndWVzCiAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVMZWFndWUoTGVhZ3VlRGV0YWlscyBkZXRhaWxzKSAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVMZWFndWUoTGVhZ3VlRGV0YWlscyBkZXRhaWxzKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBMZWFndWVEZXRhaWxzIGdldExlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIAorICAgIHB1YmxpYyBMZWFndWVEZXRhaWxzIGdldExlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICAvLyBUZXN0CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL3Jvc3Rlci9lamIvUm9zdGVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9yb3N0ZXIvZWpiL1Jvc3RlckJlYW4uamF2YQppbmRleCA4ODc5NDk2Li40NWM4YTFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL3Jvc3Rlci9lamIvUm9zdGVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9jbXAvcm9zdGVyL2VqYi9Sb3N0ZXJCZWFuLmphdmEKQEAgLTQzLDE3ICs0MywxNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgY3JlYXRlUGxheWVyKFBsYXllckRldGFpbHMgZGV0YWlscykgeyAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVQbGF5ZXIoUGxheWVyRGV0YWlscyBkZXRhaWxzKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGNyZWF0ZVBsYXllciIpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgTG9jYWxQbGF5ZXIgcGxheWVyID0gcGxheWVySG9tZS5jcmVhdGUoZGV0YWlscy5nZXRJZCgpLCAKKyAgICAgICAgICAgIExvY2FsUGxheWVyIHBsYXllciA9IHBsYXllckhvbWUuY3JlYXRlKGRldGFpbHMuZ2V0SWQoKSwKICAgICAgICAgICAgICAgICBkZXRhaWxzLmdldE5hbWUoKSwgZGV0YWlscy5nZXRQb3NpdGlvbigpLCBkZXRhaWxzLmdldFNhbGFyeSgpKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gCi0gICAgcHVibGljIHZvaWQgYWRkUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkgeyAKKworICAgIHB1YmxpYyB2b2lkIGFkZFBsYXllcihTdHJpbmcgcGxheWVySWQsIFN0cmluZyB0ZWFtSWQpIHsKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gYWRkUGxheWVyIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBMb2NhbFRlYW0gdGVhbSA9IHRlYW1Ib21lLmZpbmRCeVByaW1hcnlLZXkodGVhbUlkKTsKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVBsYXllcihTdHJpbmcgcGxheWVySWQpIHsgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiByZW1vdmVQbGF5ZXIiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIExvY2FsUGxheWVyIHBsYXllciA9IHBsYXllckhvbWUuZmluZEJ5UHJpbWFyeUtleShwbGF5ZXJJZCk7CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gCisKICAgICBwdWJsaWMgdm9pZCBkcm9wUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBkcm9wUGxheWVyIik7CiAgICAgICAgIHRyeSB7CkBAIC05OCw3ICs5OCw3IEBACiAgICAgICAgIHJldHVybiBwbGF5ZXJEZXRhaWxzOwogICAgIH0KIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbShTdHJpbmcgdGVhbUlkKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbShTdHJpbmcgdGVhbUlkKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNPZlRlYW0iKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKIApAQCAtMTEzLDcgKzExMyw3IEBACiAgICAgfQogCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNPZlRlYW1Db3B5KFN0cmluZyB0ZWFtSWQpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtQ29weShTdHJpbmcgdGVhbUlkKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNPZlRlYW1Db3B5Iik7CiAgICAgICAgIEFycmF5TGlzdCBwbGF5ZXJzTGlzdCA9IG51bGw7CiAKQEAgLTEyOCw3ICsxMjgsNyBAQAogICAgIH0KIAogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRUZWFtc09mTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFRlYW1zT2ZMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFRlYW1zT2ZMZWFndWUiKTsKIAogICAgICAgICBBcnJheUxpc3QgZGV0YWlsc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CkBAIC0xNjQsNyArMTY0LDcgQEAKICAgICB9CiAKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5SGlnaGVyU2FsYXJ5KFN0cmluZyBuYW1lKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5SGlnaGVyU2FsYXJ5KFN0cmluZyBuYW1lKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNCeUJ5SGlnaGVyU2FsYXJ5Iik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CiAKQEAgLTE3Niw3ICsxNzYsNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlIaWdoZXJTYWxhcnkKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U2FsYXJ5UmFuZ2UoZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTYWxhcnlSYW5nZShkb3VibGUgbG93LCBkb3VibGUgaGlnaCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzQnlTYWxhcnlSYW5nZSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwogCkBAIC0xODksNyArMTg5LDcgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0UGxheWVyc0J5U2FsYXJ5UmFuZ2UKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5TGVhZ3VlSWQoU3RyaW5nIGxlYWd1ZUlkKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5TGVhZ3VlSWQoU3RyaW5nIGxlYWd1ZUlkKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNCeUxlYWd1ZUlkIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CiAKQEAgLTIwMiw3ICsyMDIsNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlMZWFndWVJZAogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTcG9ydChTdHJpbmcgc3BvcnQpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTcG9ydChTdHJpbmcgc3BvcnQpIHsKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc0J5U3BvcnQiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKIApAQCAtMjE0LDcgKzIxNCw3IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldFBsYXllcnNCeVNwb3J0CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUNpdHkoU3RyaW5nIGNpdHkpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlDaXR5KFN0cmluZyBjaXR5KSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNCeUNpdHkiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKIApAQCAtMjI2LDcgKzIyNiw3IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldFBsYXllcnNCeUNpdHkKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0QWxsUGxheWVycygpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRBbGxQbGF5ZXJzKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRBbGxQbGF5ZXJzIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CiAKQEAgLTIzOSw3ICsyMzksNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRBbGxQbGF5ZXJzCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNOb3RPblRlYW0oKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc05vdE9uVGVhbSgpIHsKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc05vdE9uVGVhbSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwogCkBAIC0yNTEsOCArMjUxLDggQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0UGxheWVyc05vdE9uVGVhbQogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUoU3RyaW5nIHBvc2l0aW9uLCAKLSAgICAgICAgU3RyaW5nIG5hbWUpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUoU3RyaW5nIHBvc2l0aW9uLAorICAgICAgICBTdHJpbmcgbmFtZSkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKIApAQCAtMjY0LDcgKzI2NCw3IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldFBsYXllcnNCeVBvc2l0aW9uQW5kTmFtZQogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRMZWFndWVzT2ZQbGF5ZXIoU3RyaW5nIHBsYXllcklkKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0TGVhZ3Vlc09mUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRMZWFndWVzT2ZQbGF5ZXIiKTsKICAgICAgICAgQXJyYXlMaXN0IGRldGFpbHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwogICAgICAgICBDb2xsZWN0aW9uIGxlYWd1ZXMgPSBudWxsOwpAQCAtMjc1LDcgKzI3NSw3IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAKKwogICAgICAgICBJdGVyYXRvciBpID0gbGVhZ3Vlcy5pdGVyYXRvcigpOwogICAgICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9IChMb2NhbExlYWd1ZSkgaS5uZXh0KCk7CkBAIC0yODcsNyArMjg3LDcgQEAKICAgICAgICAgcmV0dXJuIGRldGFpbHNMaXN0OwogICAgIH0gLy8gZ2V0TGVhZ3Vlc09mUGxheWVyCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFNwb3J0c09mUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFNwb3J0c09mUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRTcG9ydHNPZlBsYXllciIpOwogICAgICAgICBBcnJheUxpc3Qgc3BvcnRzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKICAgICAgICAgQ29sbGVjdGlvbiBzcG9ydHMgPSBudWxsOwpAQCAtMjk4LDcgKzI5OCw3IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAKKwogICAgICAgICBJdGVyYXRvciBpID0gc3BvcnRzLml0ZXJhdG9yKCk7CiAgICAgICAgIHdoaWxlIChpLmhhc05leHQoKSkgewogICAgICAgICAgICAgU3RyaW5nIHNwb3J0ID0gKFN0cmluZykgaS5uZXh0KCk7CkBAIC0zMDgsNyArMzA4LDcgQEAKICAgICB9IC8vIGdldFNwb3J0c09mUGxheWVyCiAKICAgICAvLyBUZWFtIGJ1c2luZXNzIG1ldGhvZHMKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVUZWFtSW5MZWFndWUoVGVhbURldGFpbHMgZGV0YWlscywgU3RyaW5nIGxlYWd1ZUlkKSB7IAorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRlYW1JbkxlYWd1ZShUZWFtRGV0YWlscyBkZXRhaWxzLCBTdHJpbmcgbGVhZ3VlSWQpIHsKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gY3JlYXRlVGVhbUluTGVhZ3VlIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWUgPSBsZWFndWVIb21lLmZpbmRCeVByaW1hcnlLZXkobGVhZ3VlSWQpOwpAQCAtMzIwLDggKzMyMCw4IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlVGVhbShTdHJpbmcgdGVhbUlkKSB7IAorCisgICAgcHVibGljIHZvaWQgcmVtb3ZlVGVhbShTdHJpbmcgdGVhbUlkKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIHJlbW92ZVRlYW0iKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIExvY2FsVGVhbSB0ZWFtID0gdGVhbUhvbWUuZmluZEJ5UHJpbWFyeUtleSh0ZWFtSWQpOwpAQCAtMzMwLDcgKzMzMCw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gCisKICAgICBwdWJsaWMgVGVhbURldGFpbHMgZ2V0VGVhbShTdHJpbmcgdGVhbUlkKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFRlYW0iKTsKICAgICAgICAgVGVhbURldGFpbHMgdGVhbURldGFpbHMgPSBudWxsOwpAQCAtMzQ1LDE4ICszNDUsMTggQEAKICAgICB9CiAKICAgICAvLyBMZWFndWUgYnVzaW5lc3MgbWV0aG9kcwotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUxlYWd1ZShMZWFndWVEZXRhaWxzIGRldGFpbHMpIHsgCisgICAgcHVibGljIHZvaWQgY3JlYXRlTGVhZ3VlKExlYWd1ZURldGFpbHMgZGV0YWlscykgewogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBjcmVhdGVMZWFndWUiKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9IGxlYWd1ZUhvbWUuY3JlYXRlKGRldGFpbHMuZ2V0SWQoKSwgCisgICAgICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWUgPSBsZWFndWVIb21lLmNyZWF0ZShkZXRhaWxzLmdldElkKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzLmdldE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMuZ2V0U3BvcnQoKSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZUxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIHsgCisKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJSb3N0ZXJCZWFuIHJlbW92ZUxlYWd1ZSIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gbGVhZ3VlSG9tZS5maW5kQnlQcmltYXJ5S2V5KGxlYWd1ZUlkKTsKQEAgLTM2NSw3ICszNjUsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotIAorCiAgICAgcHVibGljIExlYWd1ZURldGFpbHMgZ2V0TGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRMZWFndWUiKTsKICAgICAgICAgTGVhZ3VlRGV0YWlscyBsZWFndWVEZXRhaWxzID0gbnVsbDsKQEAgLTM3OSw3ICszNzksNyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBsZWFndWVEZXRhaWxzOwogICAgIH0KLSAKKwogICAgIC8vIFNlc3Npb25CZWFuIG1ldGhvZHMKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKICAgICAgICAgRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZWpiQ3JlYXRlIik7CkBAIC00MTIsNyArNDEyLDcgQEAKICAgICBwdWJsaWMgUm9zdGVyQmVhbigpIHt9CiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykge30KLSAKKwogICAgIC8vIFByaXZhdGUgbWV0aG9kcwogICAgIHByaXZhdGUgTG9jYWxQbGF5ZXJIb21lIGxvb2t1cFBsYXllcigpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewogICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9jbXAvcm9zdGVyL2VqYi9UZWFtQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9yb3N0ZXIvZWpiL1RlYW1CZWFuLmphdmEKaW5kZXggNWIxMjkyMC4uNDhlOWIxZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9yb3N0ZXIvZWpiL1RlYW1CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9yb3N0ZXIvZWpiL1RlYW1CZWFuLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIAogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0VGVhbUlkKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0VGVhbUlkKFN0cmluZyBpZCk7Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldE5hbWUoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKIApAQCAtOTUsMzAgKzk1LDMwIEBACiAgICAgICAgIHNldENpdHkoY2l0eSk7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGNpdHkpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24geyB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgY3R4KSB7CiAgICAgICAgIGNvbnRleHQgPSBjdHg7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgewogICAgICAgICBjb250ZXh0ID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIERlYnVnLnByaW50KCJUZWFtQmVhbiBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiVGVhbUJlYW4gZWpiTG9hZCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewogICAgICAgICBEZWJ1Zy5wcmludCgiVGVhbUJlYW4gZWpiU3RvcmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7IH0KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9yb3N0ZXIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2NtcC9yb3N0ZXIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDg0MTQ3NzAuLmJmMGE4NGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9jbXAvcm9zdGVyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvY21wL3Jvc3Rlci9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTMsMzUgKzMsMzUgQEAKIERST1AgVEFCTEUgVGVhbTsKIERST1AgVEFCTEUgTGVhZ3VlOwogCi1DUkVBVEUgVEFCTEUgUGxheWVyIAorQ1JFQVRFIFRBQkxFIFBsYXllcgogKAotCXBsYXllcl9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksIAotCW5hbWUgVkFSQ0hBUigyNTUpICwgCi0JcG9zaXRpb24gVkFSQ0hBUigyNTUpICwgCi0Jc2FsYXJ5IERPVUJMRSBQUkVDSVNJT04gTk9UIE5VTEwKKyAgICBwbGF5ZXJfSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLAorICAgIG5hbWUgVkFSQ0hBUigyNTUpICwKKyAgICBwb3NpdGlvbiBWQVJDSEFSKDI1NSkgLAorICAgIHNhbGFyeSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMCiApOwogCi1DUkVBVEUgVEFCTEUgTGVhZ3VlIAorQ1JFQVRFIFRBQkxFIExlYWd1ZQogKAotCWxlYWd1ZV9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksIAotCW5hbWUgVkFSQ0hBUigyNTUpICwgCi0Jc3BvcnQgVkFSQ0hBUigyNTUpCisgICAgbGVhZ3VlX0lkIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwKKyAgICBuYW1lIFZBUkNIQVIoMjU1KSAsCisgICAgc3BvcnQgVkFSQ0hBUigyNTUpCiApOwogCi1DUkVBVEUgVEFCTEUgVGVhbSAKK0NSRUFURSBUQUJMRSBUZWFtCiAoCi0JdGVhbV9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksIAotCWNpdHkgVkFSQ0hBUigyNTUpICwgCi0JbmFtZSBWQVJDSEFSKDI1NSkgLAotCWxlYWd1ZV9JZCBWQVJDSEFSKDI1NSkgLAotCUZPUkVJR04gS0VZIChsZWFndWVfSWQpICAgUkVGRVJFTkNFUyBMZWFndWUgKGxlYWd1ZV9JZCkKKyAgICB0ZWFtX0lkIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwKKyAgICBjaXR5IFZBUkNIQVIoMjU1KSAsCisgICAgbmFtZSBWQVJDSEFSKDI1NSkgLAorICAgIGxlYWd1ZV9JZCBWQVJDSEFSKDI1NSkgLAorICAgIEZPUkVJR04gS0VZIChsZWFndWVfSWQpICAgUkVGRVJFTkNFUyBMZWFndWUgKGxlYWd1ZV9JZCkKICk7CiAKLUNSRUFURSBUQUJMRSBUZWFtUGxheWVyIAorQ1JFQVRFIFRBQkxFIFRlYW1QbGF5ZXIKICgKLQlwbGF5ZXJfSWQgVkFSQ0hBUigyNTUpICwgCi0gICAgICAgIHRlYW1fSWQgVkFSQ0hBUigyNTUpLCAKKyAgICBwbGF5ZXJfSWQgVkFSQ0hBUigyNTUpICwKKyAgICAgICAgdGVhbV9JZCBWQVJDSEFSKDI1NSksCiAgICAgICAgIENPTlNUUkFJTlQgcGtfVGVhbVBsYXllciBQUklNQVJZIEtFWSAocGxheWVyX0lkICwgdGVhbV9JZCkgLAotCUZPUkVJR04gS0VZICh0ZWFtX0lkKSAgIFJFRkVSRU5DRVMgVGVhbSAodGVhbV9JZCksCi0JRk9SRUlHTiBLRVkgKHBsYXllcl9JZCkgICBSRUZFUkVOQ0VTIFBsYXllciAocGxheWVyX0lkKQorICAgIEZPUkVJR04gS0VZICh0ZWFtX0lkKSAgIFJFRkVSRU5DRVMgVGVhbSAodGVhbV9JZCksCisgICAgRk9SRUlHTiBLRVkgKHBsYXllcl9JZCkgICBSRUZFUkVOQ0VTIFBsYXllciAocGxheWVyX0lkKQogKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uL2J1aWxkLW5nLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uL2J1aWxkLW5nLnhtbAppbmRleCBiM2ViYjg1Li40NjU2YjAzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbi9idWlsZC1uZy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24vYnVpbGQtbmcueG1sCkBAIC00NCw3ICs0NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01NiwxNCArNTYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXBlIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWVlIi8+CkBAIC03Miw3ICs3Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktcGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIiB1bmxlc3M9ImVlIj4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KLTwhLS0JPGVjaG8gbWVzc2FnZT0iUmVzdGFydGluZyBkb21haW4gb24gUEUvRUUgREFTIGFmdGVyIGRlcGxveW1lbnQiLz4KKzwhLS0gICAgPGVjaG8gbWVzc2FnZT0iUmVzdGFydGluZyBkb21haW4gb24gUEUvRUUgREFTIGFmdGVyIGRlcGxveW1lbnQiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4gLS0+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTg4LDEwICs4OCwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJ1bix1bmRlcGxveSIvPgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24vYnVpbGQucHJvcGVydGllcwppbmRleCBmMjQ3OTAyLi43MDgxOWNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMwLWhlbGxvLXNlc3Npb24iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uL2J1aWxkLnhtbAppbmRleCA4MzFkZjNkLi5lNTRlZmViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24vYnVpbGQueG1sCkBAIC00NCw3ICs0NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01NiwxNCArNTYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXBlIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWVlIi8+CkBAIC03MSw3ICs3MSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS1wZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iIHVubGVzcz0iZWUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KLQk8ZWNobyBtZXNzYWdlPSJSZXN0YXJ0aW5nIGRvbWFpbiBvbiBQRS9FRSBEQVMgYWZ0ZXIgZGVwbG95bWVudCIvPgorICAgIDxlY2hvIG1lc3NhZ2U9IlJlc3RhcnRpbmcgZG9tYWluIG9uIFBFL0VFIERBUyBhZnRlciBkZXBsb3ltZW50Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTg0LDEwICs4NCwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJ1bix1bmRlcGxveSIvPgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZGJhMzc3MC4uNmU4YjczZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzMsMTEgKzMzLDExIEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItZWpiMzAtaGVsbG8tc2Vzc2lvbklEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU2Z1bCBzZnVsOwogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU2xlc3Mgc2xlc3M7CiAKQEAgLTU5LDggKzU5LDggQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL29uZXRvbWFueS9idWlsZC1uZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2Uvb25ldG9tYW55L2J1aWxkLW5nLnhtbAppbmRleCBmMWQ1NjRiLi5lZjRiMjI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2Uvb25ldG9tYW55L2J1aWxkLW5nLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2Uvb25ldG9tYW55L2J1aWxkLW5nLnhtbApAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiIvPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImVqYjMwLXBvb2wtMSIvPiAgICAgICAgICAgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJlamIzMC1wb29sLTEiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImVqYi5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1wZXJzaXN0ZW5jZS5wYXIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+Ci0gICAgICAgIDwvYW50Y2FsbD4gICAKKyAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7ZWpiLmphcn0iIGZhaWxvbmVycm9yPSJmYWxzZSIvPgpAQCAtNzcsNyArNzcsNyBAQAogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogCiAgICAgICAgIDwhLS0gb3B0aW9uYWwgZmlsZXMgLS0+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7cGVyc2lzdGVuY2UueG1sfSIgCisgICAgICAgIDxjb3B5IGZpbGU9IiR7cGVyc2lzdGVuY2UueG1sfSIKICAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvcGVyc2lzdGVuY2UueG1sIgogICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAKQEAgLTkxLDE3ICs5MSwxNyBAQAogICAgICAgICA8L2phcj4KIAogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICAgIDwvdGFyZ2V0PiAgCisgICAgPC90YXJnZXQ+CiAKIAotICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImluaXQtY29tbW9uLGNsZWFuIj4gICAgCisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iaW5pdC1jb21tb24sY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJ0ZXN0bmctY2xpZW50Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAKKwogICAgICAgICA8IS0tPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lbnRpdHkiLz4tLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJlamIzMC1wb29sLTEiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgCi0gICAgPC90YXJnZXQ+ICAgCi0gICAgICAgCisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL29uZXRvbWFueS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL29uZXRvbWFueS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk2NDc5MjcuLjFlNmQ5ZTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9vbmV0b21hbnkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2Uvb25ldG9tYW55L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0icGVyc2lzdGVuY2Utb25ldG9tYW55Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0icGVyc2lzdGVuY2UueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2Uvb25ldG9tYW55L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9vbmV0b21hbnkvYnVpbGQueG1sCmluZGV4IDY0Nzk5NDkuLjI5NGQ3MzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9vbmV0b21hbnkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9vbmV0b21hbnkvYnVpbGQueG1sCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIi8+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iZWpiMzAtcG9vbC0xIi8+ICAgICAgICAgICAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImVqYjMwLXBvb2wtMSIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgpAQCAtNjksNyArNjksNyBAQAogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXBlcnNpc3RlbmNlLnBhciIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgIAorICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHtlamIuamFyfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAKICAgICAgICAgPCEtLSBvcHRpb25hbCBmaWxlcyAtLT4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtwZXJzaXN0ZW5jZS54bWx9IiAKKyAgICAgICAgPGNvcHkgZmlsZT0iJHtwZXJzaXN0ZW5jZS54bWx9IgogICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9wZXJzaXN0ZW5jZS54bWwiCiAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KIApAQCAtOTEsMjUgKzkxLDI1IEBACiAgICAgICAgIDwvamFyPgogCiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gICAgPC90YXJnZXQ+ICAKKyAgICA8L3RhcmdldD4KIAogCi0gICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iaW5pdC1jb21tb24sY2xlYW4iPiAgICAKKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJpbml0LWNvbW1vbixjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgotICAgICAgICA8L2FudGNhbGw+IAorICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgCisKICAgICAgICAgPCEtLTxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZW50aXR5Ii8+LS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgorICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIke3Rlc3RzdWl0ZS5pZH0gIi8+Ci0JPC9hbnRjYWxsPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogCkBAIC0xMTgsMjMgKzExOCwyMyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfJHtkYi50eXBlfS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgCisKICAgIDx0YXJnZXQgbmFtZT0iZHJvcCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KLQkgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wXyR7ZGIudHlwZX0uc3FsIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KKyAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wXyR7ZGIudHlwZX0uc3FsIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZHJvcCIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImVqYjMwLXBvb2wtMSIvPgotICAgICAgICA8L2FudGNhbGw+ICAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJlamIzMC1wb29sLTEiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3NxZXRlc3REQiIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCi0gICAgICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9vbmV0b21hbnkvYnVpbGRKYXZhMkRCLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2Uvb25ldG9tYW55L2J1aWxkSmF2YTJEQi5wcm9wZXJ0aWVzCmluZGV4IGFlNDA1ZTAuLjgzMDYzNjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9vbmV0b21hbnkvYnVpbGRKYXZhMkRCLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL29uZXRvbWFueS9idWlsZEphdmEyREIucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogIwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0icGVyc2lzdGVuY2Utb25ldG9tYW55Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0icGVyc2lzdGVuY2UueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZV9qMmRiLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9vbmV0b21hbnkvYnVpbGRKYXZhMkRCLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9vbmV0b21hbnkvYnVpbGRKYXZhMkRCLnhtbAppbmRleCBkNTMyNmU1Li5hNDZmZWM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2Uvb25ldG9tYW55L2J1aWxkSmF2YTJEQi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL29uZXRvbWFueS9idWlsZEphdmEyREIueG1sCkBAIC01OCw3ICs1OCw3IEBACiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJlamIuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tcGVyc2lzdGVuY2UucGFyIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgotICAgICAgICA8L2FudGNhbGw+ICAgCisgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2VqYi5qYXJ9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KIAogICAgICAgICA8IS0tIG9wdGlvbmFsIGZpbGVzIC0tPgotICAgICAgICA8Y29weSBmaWxlPSIke3BlcnNpc3RlbmNlLnhtbH0iIAorICAgICAgICA8Y29weSBmaWxlPSIke3BlcnNpc3RlbmNlLnhtbH0iCiAgICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3BlcnNpc3RlbmNlLnhtbCIKICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogCkBAIC04MCwyMyArODAsMjMgQEAKICAgICAgICAgPC9qYXI+CiAKICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCiAKLSAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJpbml0LWNvbW1vbixjbGVhbiI+ICAgIAorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImluaXQtY29tbW9uLGNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+Ci0gICAgICAgIDwvYW50Y2FsbD4gCisgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAKKwogICAgICAgICA8IS0tPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lbnRpdHkiLz4tLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IiR7dGVzdHN1aXRlLmlkfSAiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgpAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKIAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlLXJlZiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTE2LDUgKzExNiw1IEBACiAgIDwvZXhlYz4KIDwvdGFyZ2V0PgogCi0gICAgICAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9vbmV0b21hbnkvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL29uZXRvbWFueS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZDhjMzMzMi4uODVhNmI2NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL29uZXRvbWFueS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL29uZXRvbWFueS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBARUpCIFN0YXRlbGVzc0ludGVyZmFjZSBzbGVzczsKICAgICBMaXN0IHJvd3M7CiAgICAgSXRlcmF0b3IgaTsKQEAgLTM0LDExICszNCwxMSBAQAogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgdGVzdFN1aXRlSUQ7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0gICAgIAorCiAgICAgIGlmKGFyZ3MubGVuZ3RoPT0xKSB7Ci0JCSB0ZXN0U3VpdGVJRD1hcmdzWzBdOworICAgICAgICAgdGVzdFN1aXRlSUQ9YXJnc1swXTsKICAgICAgICAgICAgIH0KICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBUZXN0U3VpdGUgSUQgOiAiICsgdGVzdFN1aXRlSUQpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGFyZ3MgbGVuZ3RoIGlzIDogIiArIGFyZ3MubGVuZ3RoKTsKQEAgLTQ3LDkgKzQ3LDkgQEAKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiM19zbHNiX3BlcnNpc3RlbmNlSUQiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAgICAgICAgIHRyeXsKIApAQCAtNjksMTEgKzY5LDExIEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGllbnQ6IGdldHRpbmcgY3VzdG9tZXIgb3JkZXJzIik7CiAgICAgICAgICAgICAgICAgQ29sbGVjdGlvbiBjID0gc2xlc3MuZ2V0Q3VzdG9tZXJPcmRlcnMoMSk7CiAgICAgICAgICAgICAgICAgaWYoYz09bnVsbCl7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZUlEKyIiKyJlamIzX3Nsc2JfcGVyc2lzdGVuY2UgZ2V0Q3VzdG9tZXJPcmRlcnM6cmVsYXRpb25zaGlwVGVzdCIsIAorICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCsiIisiZWpiM19zbHNiX3BlcnNpc3RlbmNlIGdldEN1c3RvbWVyT3JkZXJzOnJlbGF0aW9uc2hpcFRlc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2xpZW50OiBnb3QgTlVMTCBPcmRlcnMiKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCsiIisiZWpiM19zbHNiX3BlcnNpc3RlbmNlIGdldEN1c3RvbWVyT3JkZXJzOnJlbGF0aW9uc2hpcFRlc3QiLCAKKyAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlSUQrIiIrImVqYjNfc2xzYl9wZXJzaXN0ZW5jZSBnZXRDdXN0b21lck9yZGVyczpyZWxhdGlvbnNoaXBUZXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsaWVudDogZ290IE9yZGVycyBvZiBjbGFzczoiK2MuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwogICAgICAgICAgICAgICAgICAgICBpPWMuaXRlcmF0b3IoKTsKQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgICAgICAgICByb3dzPXNsZXNzLmdldEN1c3RvbWVycygiQWxpY2UiLCAiU2FudGEgQ2xhcmEiKTsKICAgICAgICAgICAgICAgICBpZihyb3dzID09IG51bGwpewogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCsiIisiZWpiM19zbHNiX3BlcnNpc3RlbmNlIGdldEN1c3RvbWVycyIsIHN0YXQuRkFJTCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsgCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlSUQrIiIrImVqYjNfc2xzYl9wZXJzaXN0ZW5jZSBnZXRDdXN0b21lcnMiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsaWVudDogR290IFJvd3MuIExpc3RpbmcuLi4iKTsKICAgICAgICAgICAgICAgICAgICAgaT1yb3dzLml0ZXJhdG9yKCk7CkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgICAgICAgICByb3dzPXNsZXNzLmdldEFsbEN1c3RvbWVycygpOwogICAgICAgICAgICAgICAgIGlmKHJvd3MgPT0gbnVsbCl7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZUlEKyIiKyJlamIzX3Nsc2JfcGVyc2lzdGVuY2UgZ2V0QWxsQ3VzdG9tZXJzIiwgc3RhdC5GQUlMKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeyAKKyAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCsiIisiZWpiM19zbHNiX3BlcnNpc3RlbmNlIGdldEFsbEN1c3RvbWVycyIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2xpZW50OiBHb3QgYWxsQ3VzdG9tZXIgcm93cy4gTGlzdGluZy4uLiIpOwogICAgICAgICAgICAgICAgICAgICBpPXJvd3MuaXRlcmF0b3IoKTsKQEAgLTEyNyw3ICsxMjcsNyBAQAogICAgICAgICAgICAgICAgIHJvd3M9c2xlc3MuZ2V0QWxsSXRlbXNCeU5hbWUoKTsKICAgICAgICAgICAgICAgICBpZihyb3dzID09IG51bGwpewogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCsiIisiZWpiM19zbHNiX3BlcnNpc3RlbmNlIGdldEFsbEl0ZW1zQnlOYW1lIiwgc3RhdC5GQUlMKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeyAKKyAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCsiIisiZWpiM19zbHNiX3BlcnNpc3RlbmNlIGdldEFsbEl0ZW1zQnlOYW1lIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGllbnQ6IEdvdCBhbGxJdGVtc0J5TmFtZSByb3dzLiBMaXN0aW5nLi4uIik7CiAgICAgICAgICAgICAgICAgICAgIGk9cm93cy5pdGVyYXRvcigpOwpAQCAtMTQ0LDEwICsxNDQsMTAgQEAKICAgICAgICAgICAgICAgICAvLy0tZ2V0QWxsT3JkZXJzQnlJdGVtIHRlc3QKICAgICAgICAgICAgICAgICByb3dzPXNsZXNzLmdldEFsbEl0ZW1zQnlOYW1lKCk7CiAgICAgICAgICAgICAgICAgaWYocm93cyA9PSBudWxsKXsKLSAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlSUQrIiIrImVqYjNfc2xzYl9wZXJzaXN0ZW5jZSBnZXRBbGxPcmRlcnNCeUl0ZW0iLCAKKyAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlSUQrIiIrImVqYjNfc2xzYl9wZXJzaXN0ZW5jZSBnZXRBbGxPcmRlcnNCeUl0ZW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuRkFJTCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsgCi0gICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZUlEKyIiKyJlamIzX3Nsc2JfcGVyc2lzdGVuY2UgZ2V0QWxsT3JkZXJzQnlJdGVtIiwgCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlSUQrIiIrImVqYjNfc2xzYl9wZXJzaXN0ZW5jZSBnZXRBbGxPcmRlcnNCeUl0ZW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2xpZW50OiBHb3QgQWxsT3JkZXJzQnlJdGVtIHJvd3MuIExpc3RpbmcuLi4iKTsKICAgICAgICAgICAgICAgICAgICAgaT1yb3dzLml0ZXJhdG9yKCk7CkBAIC0xODEsNSArMTgxLDUgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZUlEKyIiKyJlamIzX3Nsc2JfcGVyc2lzdGVuY2UgQUxMVEVTVFMiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKLSAgICB9ICAgCisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL29uZXRvbWFueS9kZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9vbmV0b21hbnkvZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwKaW5kZXggN2NjZGMwZC4uYTE3YzM2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL29uZXRvbWFueS9kZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2Uvb25ldG9tYW55L2Rlc2NyaXB0b3IvcGVyc2lzdGVuY2UueG1sCkBAIC0xOCw5ICsxOCw5IEBACiAtLT4KIAogPHBlcnNpc3RlbmNlCi0JeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL3BlcnNpc3RlbmNlIiAKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL3BlcnNpc3RlbmNlIHBlcnNpc3RlbmNlLnhzZCIgCi0JdmVyc2lvbj0iMS4wIj4KKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvcGVyc2lzdGVuY2UiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9wZXJzaXN0ZW5jZSBwZXJzaXN0ZW5jZS54c2QiCisgICAgdmVyc2lvbj0iMS4wIj4KIAogICAgIDxwZXJzaXN0ZW5jZS11bml0IG5hbWU9ImVtIj4KICAgICAgICAgPGRlc2NyaXB0aW9uPlBlcnNpc3RlbmNlIFVuaXQgZm9yIG9uZSB0byBtYW55IFFMIFRlc3RzPC9kZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9vbmV0b21hbnkvZGVzY3JpcHRvci9wZXJzaXN0ZW5jZV9qMmRiLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9vbmV0b21hbnkvZGVzY3JpcHRvci9wZXJzaXN0ZW5jZV9qMmRiLnhtbAppbmRleCA0NzRiOTI5Li40MDg4YmNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2Uvb25ldG9tYW55L2Rlc2NyaXB0b3IvcGVyc2lzdGVuY2VfajJkYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL29uZXRvbWFueS9kZXNjcmlwdG9yL3BlcnNpc3RlbmNlX2oyZGIueG1sCkBAIC0xOCwxNiArMTgsMTYgQEAKIC0tPgogCiA8cGVyc2lzdGVuY2UKLQl4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvcGVyc2lzdGVuY2UiIAotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvcGVyc2lzdGVuY2UgcGVyc2lzdGVuY2UueHNkIiAKLQl2ZXJzaW9uPSIxLjAiPgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9wZXJzaXN0ZW5jZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL3BlcnNpc3RlbmNlIHBlcnNpc3RlbmNlLnhzZCIKKyAgICB2ZXJzaW9uPSIxLjAiPgogICAgIDxwZXJzaXN0ZW5jZS11bml0IG5hbWU9ImVtIj4KICAgICAgICAgPGRlc2NyaXB0aW9uPlBlcnNpc3RlbmNlIFVuaXQgZm9yIG9uZSB0byBtYW55IFFMIFRlc3RzPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPGp0YS1kYXRhLXNvdXJjZT5qZGJjL3MxcWVEQjwvanRhLWRhdGEtc291cmNlPgogICAgICAgICA8cHJvcGVydGllcz4KLSAgICAgICAgCTxwcm9wZXJ0eSBuYW1lPSJ0b3BsaW5rLmRkbC1nZW5lcmF0aW9uIiB2YWx1ZT0iZHJvcC1hbmQtY3JlYXRlLXRhYmxlcyIvPgotIAkgCTxwcm9wZXJ0eSBuYW1lPSJ0b3BsaW5rLmNyZWF0ZS1kZGwtamRiYy1maWxlLW5hbWUiIHZhbHVlPSJjcmVhdGVfZGRsLmpkYmMiLz4KLSAgICAgCSAJPHByb3BlcnR5IG5hbWU9InRvcGxpbmsuZHJvcC1kZGwtamRiYy1maWxlLW5hbWUiIHZhbHVlPSJkcm9wX2RkbC5qZGJjIi8+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wbGluay5kZGwtZ2VuZXJhdGlvbiIgdmFsdWU9ImRyb3AtYW5kLWNyZWF0ZS10YWJsZXMiLz4KKyAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wbGluay5jcmVhdGUtZGRsLWpkYmMtZmlsZS1uYW1lIiB2YWx1ZT0iY3JlYXRlX2RkbC5qZGJjIi8+CisgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BsaW5rLmRyb3AtZGRsLWpkYmMtZmlsZS1uYW1lIiB2YWx1ZT0iZHJvcF9kZGwuamRiYyIvPgogICAgICAgICA8L3Byb3BlcnRpZXM+CiAgICAgPC9wZXJzaXN0ZW5jZS11bml0PgogPC9wZXJzaXN0ZW5jZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9vbmV0b21hbnkvZWpiL0N1c3RvbWVyRW50aXR5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2Uvb25ldG9tYW55L2VqYi9DdXN0b21lckVudGl0eS5qYXZhCmluZGV4IGMxNzViMTMuLjRjYjE1ZjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9vbmV0b21hbnkvZWpiL0N1c3RvbWVyRW50aXR5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL29uZXRvbWFueS9lamIvQ3VzdG9tZXJFbnRpdHkuamF2YQpAQCAtMjQsMjggKzI0LDI4IEBACiAKIEBOYW1lZFF1ZXJpZXMoewogQE5hbWVkUXVlcnkoIG5hbWU9ImZpbmRBbGxDdXN0b21lcnNXaXRoTGlrZSIsCi0JcXVlcnk9IlNFTEVDVCBPQkpFQ1QodGhlY3VzdCkgRlJPTSBDdXN0b21lckVudGl0eSB0aGVjdXN0IHdoZXJlIHRoZWN1c3QubmFtZSBMSUtFIDpuYW1lIGFuZCB0aGVjdXN0LmNpdHkgTElLRSA6Y2l0eSIpLAorICAgIHF1ZXJ5PSJTRUxFQ1QgT0JKRUNUKHRoZWN1c3QpIEZST00gQ3VzdG9tZXJFbnRpdHkgdGhlY3VzdCB3aGVyZSB0aGVjdXN0Lm5hbWUgTElLRSA6bmFtZSBhbmQgdGhlY3VzdC5jaXR5IExJS0UgOmNpdHkiKSwKIEBOYW1lZFF1ZXJ5KCBuYW1lPSJmaW5kQWxsQ3VzdG9tZXJzIiwKLQlxdWVyeT0iU0VMRUNUIE9CSkVDVCh0aGVjdXN0KSBGUk9NIEN1c3RvbWVyRW50aXR5IHRoZWN1c3QiKQorICAgIHF1ZXJ5PSJTRUxFQ1QgT0JKRUNUKHRoZWN1c3QpIEZST00gQ3VzdG9tZXJFbnRpdHkgdGhlY3VzdCIpCiB9KQogcHVibGljIGNsYXNzIEN1c3RvbWVyRW50aXR5IGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAKLQlwcml2YXRlIEludGVnZXIgY3VzdG9tZXJJZDsKLQlwcml2YXRlIGludCB2ZXJzaW9uOwotCXByaXZhdGUgU3RyaW5nIGNpdHk7Ci0JcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLQlwcml2YXRlIENvbGxlY3Rpb248T3JkZXJFbnRpdHk+IG9yZGVyczsKKyAgICBwcml2YXRlIEludGVnZXIgY3VzdG9tZXJJZDsKKyAgICBwcml2YXRlIGludCB2ZXJzaW9uOworICAgIHByaXZhdGUgU3RyaW5nIGNpdHk7CisgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKKyAgICBwcml2YXRlIENvbGxlY3Rpb248T3JkZXJFbnRpdHk+IG9yZGVyczsKIAogICAgIHB1YmxpYyBDdXN0b21lckVudGl0eSgpe30KIAotCXB1YmxpYyBDdXN0b21lckVudGl0eShpbnQgaWQsU3RyaW5nIG5hbWUsU3RyaW5nIGNpdHkpIHsKKyAgICBwdWJsaWMgQ3VzdG9tZXJFbnRpdHkoaW50IGlkLFN0cmluZyBuYW1lLFN0cmluZyBjaXR5KSB7CiAgICAgICAgIHRoaXMuc2V0Q3VzdG9tZXJJZChuZXcgSW50ZWdlcihpZCkpOwogICAgICAgICB0aGlzLnNldE5hbWUobmFtZSk7CiAgICAgICAgIHRoaXMuc2V0Q2l0eShjaXR5KTsKLQl9CisgICAgfQogCi0JQElkCi0JQENvbHVtbihuYW1lPSJDVVNUX0lEIikKKyAgICBASWQKKyAgICBAQ29sdW1uKG5hbWU9IkNVU1RfSUQiKQogICAgIHB1YmxpYyBJbnRlZ2VyIGdldEN1c3RvbWVySWQoKSB7CiAgICAgICAgIHJldHVybiBjdXN0b21lcklkOwogICAgIH0KQEAgLTU0LDE4ICs1NCwxOCBAQAogICAgICAgICB0aGlzLmN1c3RvbWVySWQgPSBpZDsKICAgICB9CiAKLQlAVmVyc2lvbgotCUBDb2x1bW4obmFtZT0iQ1VTVF9WRVJTSU9OIikKLQlwdWJsaWMgaW50IGdldFZlcnNpb24oKSB7CisgICAgQFZlcnNpb24KKyAgICBAQ29sdW1uKG5hbWU9IkNVU1RfVkVSU0lPTiIpCisgICAgcHVibGljIGludCBnZXRWZXJzaW9uKCkgewogICAgICAgICByZXR1cm4gdmVyc2lvbjsKICAgICB9CiAKLQlwcm90ZWN0ZWQgdm9pZCBzZXRWZXJzaW9uKGludCB2ZXJzaW9uKSB7Ci0JCXRoaXMudmVyc2lvbiA9IHZlcnNpb247Ci0JfQorICAgIHByb3RlY3RlZCB2b2lkIHNldFZlcnNpb24oaW50IHZlcnNpb24pIHsKKyAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKKyAgICB9CiAKLQlAQ29sdW1uKG5hbWU9IkNJVFkiKQotCXB1YmxpYyBTdHJpbmcgZ2V0Q2l0eSgpIHsKKyAgICBAQ29sdW1uKG5hbWU9IkNJVFkiKQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2l0eSgpIHsKICAgICAgICAgcmV0dXJuIGNpdHk7CiAgICAgfQogCkBAIC03NCw3ICs3NCw3IEBACiAgICAgfQogCiAKLQlAQ29sdW1uKG5hbWU9Ik5BTUUiKQorICAgIEBDb2x1bW4obmFtZT0iTkFNRSIpCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CkBAIC04Myw4ICs4Myw4IEBACiAgICAgICAgIHRoaXMubmFtZSA9IGFOYW1lOwogICAgIH0KIAotCUBPbmVUb01hbnkoY2FzY2FkZT1DYXNjYWRlVHlwZS5BTEwsbWFwcGVkQnk9ImN1c3RvbWVyIikKLS8vCUBKb2luQ29sdW1uKG5hbWU9IkNVU1RfSUQiLCByZWZlcmVuY2VkQ29sdW1uTmFtZT0iQ1VTVF9JRCIpCisgICAgQE9uZVRvTWFueShjYXNjYWRlPUNhc2NhZGVUeXBlLkFMTCxtYXBwZWRCeT0iY3VzdG9tZXIiKQorLy8gICAgQEpvaW5Db2x1bW4obmFtZT0iQ1VTVF9JRCIsIHJlZmVyZW5jZWRDb2x1bW5OYW1lPSJDVVNUX0lEIikKICAgICBwdWJsaWMgQ29sbGVjdGlvbjxPcmRlckVudGl0eT4gZ2V0T3JkZXJzKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkN1c3RvbWVyRW50aXR5OmdldE9yZGVycyIpOwogICAgICAgICByZXR1cm4gb3JkZXJzOwpAQCAtOTgsNyArOTgsNyBAQAogICAgIHB1YmxpYyB2b2lkIGFkZE9yZGVyKE9yZGVyRW50aXR5IGFuT3JkZXIpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDdXN0b21lckVudGl0eTogYWRkaW5nIG9yZGVyIik7CiAgICAgICAgIGdldE9yZGVycygpLmFkZChhbk9yZGVyKTsKLQkJYW5PcmRlci5zZXRDdXN0b21lcih0aGlzKTsKKyAgICAgICAgYW5PcmRlci5zZXRDdXN0b21lcih0aGlzKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCByZW1vdmVPcmRlcihPcmRlckVudGl0eSBhbk9yZGVyKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2Uvb25ldG9tYW55L2VqYi9JdGVtRW50aXR5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2Uvb25ldG9tYW55L2VqYi9JdGVtRW50aXR5LmphdmEKaW5kZXggMDgxMTg1Yy4uMGYwNDFhMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL29uZXRvbWFueS9lamIvSXRlbUVudGl0eS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9vbmV0b21hbnkvZWpiL0l0ZW1FbnRpdHkuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogQEVudGl0eQogQFRhYmxlKG5hbWUgPSAiQ01QM19JVEVNIikKIEBOYW1lZFF1ZXJ5KG5hbWUgPSAiZmluZEFsbEl0ZW1zQnlOYW1lIiwgcXVlcnkgPQotICAgICJTRUxFQ1QgT0JKRUNUKGl0ZW0pIEZST00gSXRlbUVudGl0eSBpdGVtIFdIRVJFIGl0ZW0ubmFtZSA9ID8xIikgCisgICAgIlNFTEVDVCBPQkpFQ1QoaXRlbSkgRlJPTSBJdGVtRW50aXR5IGl0ZW0gV0hFUkUgaXRlbS5uYW1lID0gPzEiKQogcHVibGljIGNsYXNzIEl0ZW1FbnRpdHkgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIEludGVnZXIgaXRlbUlkOwpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB0aGlzLml0ZW1JZCA9IGlkOwogICAgIH0KIAotICAgIEBWZXJzaW9uQENvbHVtbihuYW1lID0gIklURU1fVkVSU0lPTiIpIAorICAgIEBWZXJzaW9uQENvbHVtbihuYW1lID0gIklURU1fVkVSU0lPTiIpCiAgICAgcHJvdGVjdGVkIGludCBnZXRWZXJzaW9uKCkgewogICAgICAgICByZXR1cm4gdmVyc2lvbjsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2Uvb25ldG9tYW55L2VqYi9PcmRlckVudGl0eS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL29uZXRvbWFueS9lamIvT3JkZXJFbnRpdHkuamF2YQppbmRleCA3Mjc1ZTEyLi4zZmYzODk4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2Uvb25ldG9tYW55L2VqYi9PcmRlckVudGl0eS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9vbmV0b21hbnkvZWpiL09yZGVyRW50aXR5LmphdmEKQEAgLTIxLDgyICsyMSw4MiBAQAogQEVudGl0eShuYW1lPSJPcmRlckJlYW4iKQogQFRhYmxlKG5hbWU9IkNNUDNfT1JERVIiKQogQE5hbWVkUXVlcnkoCi0JbmFtZT0iZmluZEFsbE9yZGVyc0J5SXRlbSIsCi0JcXVlcnk9IlNFTEVDVCBPQkpFQ1QodGhlb3JkZXIpIEZST00gT3JkZXJCZWFuIHRoZW9yZGVyIFdIRVJFIHRoZW9yZGVyLml0ZW0uaXRlbUlkID0gOmlkIgorICAgIG5hbWU9ImZpbmRBbGxPcmRlcnNCeUl0ZW0iLAorICAgIHF1ZXJ5PSJTRUxFQ1QgT0JKRUNUKHRoZW9yZGVyKSBGUk9NIE9yZGVyQmVhbiB0aGVvcmRlciBXSEVSRSB0aGVvcmRlci5pdGVtLml0ZW1JZCA9IDppZCIKICkKIHB1YmxpYyBjbGFzcyBPcmRlckVudGl0eSBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAotCXByaXZhdGUgSW50ZWdlciBvcmRlcklkOwotCXByaXZhdGUgaW50IHZlcnNpb247Ci0JcHJpdmF0ZSBJdGVtRW50aXR5IGl0ZW07Ci0JcHJpdmF0ZSBpbnQgcXVhbnRpdHk7Ci0JcHJpdmF0ZSBTdHJpbmcgc2hpcHBpbmdBZGRyZXNzOwotCXByaXZhdGUgQ3VzdG9tZXJFbnRpdHkgY3VzdG9tZXI7CisgICAgcHJpdmF0ZSBJbnRlZ2VyIG9yZGVySWQ7CisgICAgcHJpdmF0ZSBpbnQgdmVyc2lvbjsKKyAgICBwcml2YXRlIEl0ZW1FbnRpdHkgaXRlbTsKKyAgICBwcml2YXRlIGludCBxdWFudGl0eTsKKyAgICBwcml2YXRlIFN0cmluZyBzaGlwcGluZ0FkZHJlc3M7CisgICAgcHJpdmF0ZSBDdXN0b21lckVudGl0eSBjdXN0b21lcjsKIAogICAgIHB1YmxpYyBPcmRlckVudGl0eSgpe30KLQkKLQlwdWJsaWMgT3JkZXJFbnRpdHkoaW50IGlkLGludCBxdHkpIHsKKworICAgIHB1YmxpYyBPcmRlckVudGl0eShpbnQgaWQsaW50IHF0eSkgewogICAgICAgICB0aGlzLnNldE9yZGVySWQobmV3IEludGVnZXIoaWQpKTsKICAgICAgICAgdGhpcy5zZXRRdWFudGl0eShxdHkpOwotCX0KLQotCUBJZAotCUBDb2x1bW4obmFtZT0iT1JERVJfSUQiKQotCXB1YmxpYyBJbnRlZ2VyIGdldE9yZGVySWQoKSB7IAotICAgICAgICByZXR1cm4gb3JkZXJJZDsgCi0gICAgfQotICAgIAotCXB1YmxpYyB2b2lkIHNldE9yZGVySWQoSW50ZWdlciBpZCkgeyAKLSAgICAgICAgdGhpcy5vcmRlcklkID0gaWQ7IAogICAgIH0KIAotCUBWZXJzaW9uCi0JQENvbHVtbihuYW1lPSJPUkRFUl9WRVJTSU9OIikKLQlwcm90ZWN0ZWQgaW50IGdldFZlcnNpb24oKSB7IAotICAgICAgICByZXR1cm4gdmVyc2lvbjsgCi0gICAgfQotICAgIAotCXByb3RlY3RlZCB2b2lkIHNldFZlcnNpb24oaW50IHZlcnNpb24pIHsgCi0gICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247IAorICAgIEBJZAorICAgIEBDb2x1bW4obmFtZT0iT1JERVJfSUQiKQorICAgIHB1YmxpYyBJbnRlZ2VyIGdldE9yZGVySWQoKSB7CisgICAgICAgIHJldHVybiBvcmRlcklkOwogICAgIH0KIAotCUBPbmVUb09uZShjYXNjYWRlPUNhc2NhZGVUeXBlLkFMTCkKLQlASm9pbkNvbHVtbihuYW1lPSJJVEVNX0lEIiwgcmVmZXJlbmNlZENvbHVtbk5hbWU9IklURU1fSUQiKQotCXB1YmxpYyBJdGVtRW50aXR5IGdldEl0ZW0oKSB7IAotICAgICAgICByZXR1cm4gaXRlbTsgCisgICAgcHVibGljIHZvaWQgc2V0T3JkZXJJZChJbnRlZ2VyIGlkKSB7CisgICAgICAgIHRoaXMub3JkZXJJZCA9IGlkOwogICAgIH0KLSAgICAKLQlwdWJsaWMgdm9pZCBzZXRJdGVtKEl0ZW1FbnRpdHkgaXRlbSkgeyAKLSAgICAgICAgdGhpcy5pdGVtID0gaXRlbTsgCisKKyAgICBAVmVyc2lvbgorICAgIEBDb2x1bW4obmFtZT0iT1JERVJfVkVSU0lPTiIpCisgICAgcHJvdGVjdGVkIGludCBnZXRWZXJzaW9uKCkgeworICAgICAgICByZXR1cm4gdmVyc2lvbjsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXRWZXJzaW9uKGludCB2ZXJzaW9uKSB7CisgICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247CisgICAgfQorCisgICAgQE9uZVRvT25lKGNhc2NhZGU9Q2FzY2FkZVR5cGUuQUxMKQorICAgIEBKb2luQ29sdW1uKG5hbWU9IklURU1fSUQiLCByZWZlcmVuY2VkQ29sdW1uTmFtZT0iSVRFTV9JRCIpCisgICAgcHVibGljIEl0ZW1FbnRpdHkgZ2V0SXRlbSgpIHsKKyAgICAgICAgcmV0dXJuIGl0ZW07CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0SXRlbShJdGVtRW50aXR5IGl0ZW0pIHsKKyAgICAgICAgdGhpcy5pdGVtID0gaXRlbTsKICAgICB9CiAKIAogICAgIEBDb2x1bW4obmFtZT0iUVRZIikKLQlwdWJsaWMgaW50IGdldFF1YW50aXR5KCkgewotICAgICAgICByZXR1cm4gcXVhbnRpdHk7IAorICAgIHB1YmxpYyBpbnQgZ2V0UXVhbnRpdHkoKSB7CisgICAgICAgIHJldHVybiBxdWFudGl0eTsKICAgICB9Ci0gICAgCi0JcHVibGljIHZvaWQgc2V0UXVhbnRpdHkoaW50IHF1YW50aXR5KSB7Ci0JCXRoaXMucXVhbnRpdHkgPSBxdWFudGl0eTsKLQl9CiAKLQlAQ29sdW1uKG5hbWU9IlNISVBBREQiKQotCXB1YmxpYyBTdHJpbmcgZ2V0U2hpcHBpbmdBZGRyZXNzKCkgeyAKLSAgICAgICAgcmV0dXJuIHNoaXBwaW5nQWRkcmVzczsgCisgICAgcHVibGljIHZvaWQgc2V0UXVhbnRpdHkoaW50IHF1YW50aXR5KSB7CisgICAgICAgIHRoaXMucXVhbnRpdHkgPSBxdWFudGl0eTsKICAgICB9Ci0gICAgCi0JcHVibGljIHZvaWQgc2V0U2hpcHBpbmdBZGRyZXNzKFN0cmluZyBzaGlwcGluZ0FkZHJlc3MpIHsKLQkJdGhpcy5zaGlwcGluZ0FkZHJlc3MgPSBzaGlwcGluZ0FkZHJlc3M7Ci0JfQogCi0JQE1hbnlUb09uZSgpCi0JQEpvaW5Db2x1bW4obmFtZT0iQ1VTVF9JRCIpCi0JcHVibGljIEN1c3RvbWVyRW50aXR5IGdldEN1c3RvbWVyKCkgeyAKLSAgICAgICAgcmV0dXJuIGN1c3RvbWVyOyAKKyAgICBAQ29sdW1uKG5hbWU9IlNISVBBREQiKQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2hpcHBpbmdBZGRyZXNzKCkgeworICAgICAgICByZXR1cm4gc2hpcHBpbmdBZGRyZXNzOwogICAgIH0KLSAgICAKLQlwdWJsaWMgdm9pZCBzZXRDdXN0b21lcihDdXN0b21lckVudGl0eSBjdXN0b21lcikgeyAKLSAgICAgICAgdGhpcy5jdXN0b21lciA9IGN1c3RvbWVyOyAKKworICAgIHB1YmxpYyB2b2lkIHNldFNoaXBwaW5nQWRkcmVzcyhTdHJpbmcgc2hpcHBpbmdBZGRyZXNzKSB7CisgICAgICAgIHRoaXMuc2hpcHBpbmdBZGRyZXNzID0gc2hpcHBpbmdBZGRyZXNzOworICAgIH0KKworICAgIEBNYW55VG9PbmUoKQorICAgIEBKb2luQ29sdW1uKG5hbWU9IkNVU1RfSUQiKQorICAgIHB1YmxpYyBDdXN0b21lckVudGl0eSBnZXRDdXN0b21lcigpIHsKKyAgICAgICAgcmV0dXJuIGN1c3RvbWVyOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEN1c3RvbWVyKEN1c3RvbWVyRW50aXR5IGN1c3RvbWVyKSB7CisgICAgICAgIHRoaXMuY3VzdG9tZXIgPSBjdXN0b21lcjsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCl7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2Uvb25ldG9tYW55L2VqYi9TdGF0ZWxlc3NCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2Uvb25ldG9tYW55L2VqYi9TdGF0ZWxlc3NCZWFuLmphdmEKaW5kZXggNTQ0NjhmZC4uNWUyOTk4ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL29uZXRvbWFueS9lamIvU3RhdGVsZXNzQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9vbmV0b21hbnkvZWpiL1N0YXRlbGVzc0JlYW4uamF2YQpAQCAtMjUsNyArMjUsNyBAQAogaW1wb3J0IGphdmEudXRpbC4qOwogCiBAU3RhdGVsZXNzCi1AUmVtb3RlKHtTdGF0ZWxlc3NJbnRlcmZhY2UuY2xhc3N9KSAKK0BSZW1vdGUoe1N0YXRlbGVzc0ludGVyZmFjZS5jbGFzc30pCiBwdWJsaWMgY2xhc3MgU3RhdGVsZXNzQmVhbiBpbXBsZW1lbnRzIFN0YXRlbGVzc0ludGVyZmFjZSB7CiAKICAgICBAUmVzb3VyY2UgU2Vzc2lvbkNvbnRleHQgc2M7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvbWRiL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9tZGIvYnVpbGQueG1sCmluZGV4IDg2ZTFjMTMuLjQ1MTcyMmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9tZGIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9tZGIvYnVpbGQueG1sCkBAIC04MiwxNiArODIsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPiBVc2FnZToKLQkJYW50IHNpbXBsZSAoRXhlY3V0ZXMgdGhlIHNpbXBsZSB0ZXN0cykKLQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamIgIG1kYiB0ZXN0cykKLQkJYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBlamIgIG1kYiB0ZXN0cykKLQkJYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBlamIgIG1kYiB0ZXN0cykKLQkJYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIG1kYiB0ZXN0cykKLQkJYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIGVqYiAgbWRiIGFwcHMpCi0JCWFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgZWpiICBtZGIgdGVzdHMpCi0JCWFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgIG1kYiBhcHBzKQotCQlhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIG1kYiB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+IFVzYWdlOgorICAgICAgICBhbnQgc2ltcGxlIChFeGVjdXRlcyB0aGUgc2ltcGxlIHRlc3RzKQorICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYiAgbWRiIHRlc3RzKQorICAgICAgICBhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIGVqYiAgbWRiIHRlc3RzKQorICAgICAgICBhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGVqYiAgbWRiIHRlc3RzKQorICAgICAgICBhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgbWRiIHRlc3RzKQorICAgICAgICBhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgZWpiICBtZGIgYXBwcykKKyAgICAgICAgYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBlamIgIG1kYiB0ZXN0cykKKyAgICAgICAgYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgbWRiIGFwcHMpCisgICAgICAgIGFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3IgbWRiIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9tZGIvc2ltcGxlL2J1aWxkLW5nLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9tZGIvc2ltcGxlL2J1aWxkLW5nLnhtbAppbmRleCA3YmI0MzgyLi41M2U5OGFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvbWRiL3NpbXBsZS9idWlsZC1uZy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL21kYi9zaW1wbGUvYnVpbGQtbmcueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NywxMyArNDcsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktam1zLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXN0Lm5hbWUiIHZhbHVlPSJTYW1wbGVRdWV1ZSIvPgpAQCAtNzYsMTcgKzc2LDE3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICAgPGFyZyBsaW5lPSItY2xpZW50ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIgLz4KICAgICAgICAgIDxlbnYga2V5PSJBUFBDUEFUSCIgcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi90ZXN0bmcuamFyIi8+CiAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qbXMtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9tZGIvc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvbWRiL3NpbXBsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDRiMGI4OTcuLmQ2NmViMmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9tZGIvc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL21kYi9zaW1wbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItbWRiIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zaW1wbGUiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNpbXBsZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJjb20uc3VuLnMxcGVxZS5lamIubWRiLnNpbXBsZS5jbGllbnQuU2ltcGxlTWVzc2FnZUNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJjb20uc3VuLnMxcGVxZS5lamIubWRiLnNpbXBsZS5jbGllbnQuU2ltcGxlTWVzc2FnZUNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvbWRiL3NpbXBsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvbWRiL3NpbXBsZS9idWlsZC54bWwKaW5kZXggNTlhMmM1Zi4uZmQwYmRiMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL21kYi9zaW1wbGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9tZGIvc2ltcGxlL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDcsMTMgKzQ3LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWptcy1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iZGVzdC5uYW1lIiB2YWx1ZT0iU2FtcGxlUXVldWUiLz4KQEAgLTc2LDE0ICs3NiwxNCBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qbXMtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9tZGIvc2ltcGxlL2NsaWVudC9TaW1wbGVNZXNzYWdlQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvbWRiL3NpbXBsZS9jbGllbnQvU2ltcGxlTWVzc2FnZUNsaWVudC5qYXZhCmluZGV4IDc0ODI0MzYuLjQwMzA3YjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9tZGIvc2ltcGxlL2NsaWVudC9TaW1wbGVNZXNzYWdlQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL21kYi9zaW1wbGUvY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCiBwdWJsaWMgY2xhc3MgU2ltcGxlTWVzc2FnZUNsaWVudCB7Ci0gICAgCisKICAgICAgICAgQ29udGV4dCAgICAgICAgICAgICAgICAgam5kaUNvbnRleHQgPSBudWxsOwogICAgICAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5ICBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5ID0gbnVsbDsKICAgICAgICAgVG9waWNDb25uZWN0aW9uRmFjdG9yeSAgdG9waWNDb25uZWN0aW9uRmFjdG9yeSA9IG51bGw7CkBAIC00MCw0OCArNDAsNDggQEAKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgIFRPUElDID0gImptcy9TYW1wbGVUb3BpYyI7CiAgICAgICAgIGZpbmFsIGludCAgICAgICAgICAgICAgIE5VTV9NU0dTID0gMzsKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiAgYWxsRG9uZT1mYWxzZTsKLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgICAgIAorCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3Qgc2ltcGxlICIrCiAgICAgICAgICAgICAibWVzc2FnZSBkcml2ZW4gYmVhbiBzYW1wbGUuIik7CiAgICAgICAgICAgICBTaW1wbGVNZXNzYWdlQ2xpZW50IGNsaWVudD1uZXcgU2ltcGxlTWVzc2FnZUNsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LnNldHVwKCk7CiAgICAgICAgICAgICBjbGllbnQuc2VuZE1lc3NhZ2VUb01EQigpOwogICAgICAgICAgICAgY2xpZW50LnJlY3ZNZXNzYWdlKCk7Ci0gICAgICAgICAgICBjbGllbnQucHJpbnRSZXBvcnQoKTsgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjbGllbnQucHJpbnRSZXBvcnQoKTsKKwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwdWJsaWMgT2JqZWN0IGpuZGlMb29rdXAoU3RyaW5nIG5hbWUpIAorCisgICAgICAgIHB1YmxpYyBPYmplY3Qgam5kaUxvb2t1cChTdHJpbmcgbmFtZSkKICAgICAgICAgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCAgICBvYmogPSBudWxsOwogICAgICAgICBpZiAoam5kaUNvbnRleHQgPT0gbnVsbCkgewogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBqbmRpQ29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGpuZGlDb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ291bGQgbm90IGNyZWF0ZSBKTkRJIEFQSSAiICsKLSAgICAgICAgICAgICAgICAgICAgImNvbnRleHQ6ICIgKyBlLnRvU3RyaW5nKCkpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgImNvbnRleHQ6ICIgKyBlLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgb2JqID0gam5kaUNvbnRleHQubG9va3VwKG5hbWUpOwotICAgICAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgeyAgICAgICAgICAgIAotICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJKTkRJIEFQSSBsb29rdXAgZmFpbGVkOiAiICsgCisgICAgICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkpOREkgQVBJIGxvb2t1cCBmYWlsZWQ6ICIgKwogICAgICAgICAgICAgICAgIGUudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICB0aHJvdyBlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBvYmo7CiAgICAgfQotICAgICAgICAKKwogICAgICAgICBwdWJsaWMgdm9pZCBzZXR1cCgpewogICAgICAgICAgICAgdHJ5ewotICAgICAgICAgICAgcXVldWVDb25uZWN0aW9uRmFjdG9yeT0oUXVldWVDb25uZWN0aW9uRmFjdG9yeSlqbmRpTG9va3VwKFFVRVVFQ09ORkFDKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgcXVldWUgPSAoUXVldWUpam5kaUxvb2t1cChRVUVVRSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgcXVldWVDb25uZWN0aW9uRmFjdG9yeT0oUXVldWVDb25uZWN0aW9uRmFjdG9yeSlqbmRpTG9va3VwKFFVRVVFQ09ORkFDKTsKKyAgICAgICAgICAgIHF1ZXVlID0gKFF1ZXVlKWpuZGlMb29rdXAoUVVFVUUpOwogICAgICAgICAgICAgdG9waWNDb25uZWN0aW9uRmFjdG9yeT0oVG9waWNDb25uZWN0aW9uRmFjdG9yeSlqbmRpTG9va3VwKFRPUElDQ09ORkFDKTsKICAgICAgICAgICAgIHRvcGljPShUb3BpYylqbmRpTG9va3VwKFRPUElDKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJzaW1wbGUgbWRiIGpuZGlMb29rdXAiLCBzdGF0LlBBU1MpOwpAQCAtOTEsMjEgKzkxLDIxIEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQcm9ibGVtIGluIGxvb2tpbmcgdXAgY29ubmVjdGlvbiBmYWN0b3JpZXMiKTsKICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIAogCi0gICAgICAgIAorICAgICAgICB9CisKKworCisKICAgICAgICAgcHVibGljIFNpbXBsZU1lc3NhZ2VDbGllbnQoKXt9Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlVG9NREIoKXsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5PShRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KWpuZGlMb29rdXAoUVVFVUVDT05GQUMpOyAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIHF1ZXVlID0gKFF1ZXVlKWpuZGlMb29rdXAoUVVFVUUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAKKyAgICAgICAgICAgIHF1ZXVlQ29ubmVjdGlvbkZhY3Rvcnk9KFF1ZXVlQ29ubmVjdGlvbkZhY3Rvcnkpam5kaUxvb2t1cChRVUVVRUNPTkZBQyk7CisKKyAgICAgICAgICAgIHF1ZXVlID0gKFF1ZXVlKWpuZGlMb29rdXAoUVVFVUUpOworCiAKICAgICAgICAgICAgIHF1ZXVlQ29ubmVjdGlvbiA9CiAgICAgICAgICAgICAgICAgcXVldWVDb25uZWN0aW9uRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKQEAgLTExNyw0MiArMTE3LDQyIEBACiAgICAgICAgICAgICBtZXNzYWdlLnNldEpNU0RlbGl2ZXJ5TW9kZShEZWxpdmVyeU1vZGUuUEVSU0lTVEVOVCk7CiAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBkdXJhYmxlIHF1ZXVlIHN1YnNjcmliZXIscGVyc2lzdGVudCBkZWxpdmVyeSBtb2RlIik7CiAKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX01TR1M7IGkrKykgeyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX01TR1M7IGkrKykgewogICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V0VGV4dChNU0dfVEVYVCArIChpICsgMSkpOwogICAgICAgICAgICAgICAgIGlmKGk9PShOVU1fTVNHUy0xKSkKICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXRTdHJpbmdQcm9wZXJ0eSgiTUVTU0FHRV9OVU0iLCJMQVNUIik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIG1lc3NhZ2U6ICIgKyBtZXNzYWdlLmdldFRleHQoKSk7Ci0gICAgICAgICAgICAgICAgcXVldWVTZW5kZXIuc2VuZChtZXNzYWdlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBxdWV1ZVNlbmRlci5zZW5kKG1lc3NhZ2UpOwogICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcCgxMDAwKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCAzIG1lc3NhZ2VzLG5vdyBzbGVlcGluZyIpOyAgICAgICAgICAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCAzIG1lc3NhZ2VzLG5vdyBzbGVlcGluZyIpOwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gb2NjdXJyZWQ6ICIgKyBlLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInNpbXBsZSBtZGIgbWFpbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGZpbmFsbHkgYmxvY2sgb2Ygc2VuZCBtZXNzYWdlIik7Ci0JICAgIGlmIChxdWV1ZUNvbm5lY3Rpb24gIT1udWxsKXsKLQkgICAgdHJ5ewotCSAgICBxdWV1ZUNvbm5lY3Rpb24uY2xvc2UoKTsKLQkgICAgfWNhdGNoKEpNU0V4Y2VwdGlvbiBleCl7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9Ci0JICAgIH0KLSAgICAgICAgICAgCi0gICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic2ltcGxlIG1kYiBzZW5kbWVzc2FnZSIsIHN0YXQuUEFTUyk7ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGlmIChxdWV1ZUNvbm5lY3Rpb24gIT1udWxsKXsKKyAgICAgICAgdHJ5eworICAgICAgICBxdWV1ZUNvbm5lY3Rpb24uY2xvc2UoKTsKKyAgICAgICAgfWNhdGNoKEpNU0V4Y2VwdGlvbiBleCl7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInNpbXBsZSBtZGIgc2VuZG1lc3NhZ2UiLCBzdGF0LlBBU1MpOwogICAgICAgICB9IC8vIGZpbmFsbHkKLSAgICB9ICAgICAgICAgIAotICAgICAgICAKKyAgICB9CisKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50UmVwb3J0KCl7CiAgICAgICAgICAgICBpZihhbGxEb25lKQotICAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInNpbXBsZU1kYklEIik7ICAgICAgICAgICAgCisgICAgICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgic2ltcGxlTWRiSUQiKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWVzc2FnZVN0cmVhbSBmcm9tIHNlcnZlciBub3QgZmluaXNoZWQiKTsKLSAgICAgICAgfSAgICAKLSAgICAgICAgCi0gICAgCi0gICAgCi0gICAgCisgICAgICAgIH0KKworCisKKwogICAgIHB1YmxpYyB2b2lkIHJlY3ZNZXNzYWdlKCl7CiAgICAgICAgIFRvcGljQ29ubmVjdGlvbiBjb25uZWN0PW51bGw7CiAgICAgICAgIC8qCkBAIC0xNjYsMTUgKzE2NiwxNSBAQAogICAgICAgICAgKiBDbG9zZSBjb25uZWN0aW9uLgogICAgICAgICAgKi8KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiaW5zaWRlIHJlY3ZNZXNzYWdlIG9mIG1kYiBhcHBjbGllbnQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluc2lkZSByZWN2TWVzc2FnZSBvZiBtZGIgYXBwY2xpZW50Iik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBjb25uZWN0ID0gdG9waWNDb25uZWN0aW9uRmFjdG9yeS5jcmVhdGVUb3BpY0Nvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIFRvcGljU2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdC5jcmVhdGVUb3BpY1Nlc3Npb24oZmFsc2UsMCk7Ci0gICAgICAgICAgICBzdWJzY3JpYmVyPXNlc3Npb24uY3JlYXRlU3Vic2NyaWJlcih0b3BpYyk7ICAKKyAgICAgICAgICAgIHN1YnNjcmliZXI9c2Vzc2lvbi5jcmVhdGVTdWJzY3JpYmVyKHRvcGljKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnRlZCBzdWJzY3JpYmVyIik7CiAgICAgICAgICAgICBjb25uZWN0LnN0YXJ0KCk7CiAgICAgICAgICAgICBpbnQgbXNnY291bnQ9MTsKLSAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICBNZXNzYWdlIG0gPSBzdWJzY3JpYmVyLnJlY2VpdmUoMTAwMDApOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmluZ28hLiBnb3QgYSBhY2sgbXNnIGJhY2sgZnJvbSBzZXJ2ZXIiKTsKICAgICAgICAgICAgICAgICBtc2djb3VudCsrOwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJvcHM9bWVzc2FnZS5nZXRTdHJpbmdQcm9wZXJ0eSgiTUVTU0FHRV9OVU0iKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZihtc2djb3VudD49Myl7CkBAIC0yMDAsNyArMjAwLDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWVzc2FnZXMgZnJvbSBNREIgZmluaXNoZWQqKiIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioiKTsKICAgICAgICAgfSBjYXRjaCAoSk1TRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIG9jY3VycmVkOiAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBvY2N1cnJlZDogIiArCiAgICAgICAgICAgICAgICAgZS50b1N0cmluZygpKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJzaW1wbGUgbWRiIHJlY3ZtZXNzYWdlIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfSBjYXRjaChUaHJvd2FibGUgZSl7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvbWRiL3NpbXBsZS9lamIvU2ltcGxlTWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9tZGIvc2ltcGxlL2VqYi9TaW1wbGVNZXNzYWdlQmVhbi5qYXZhCmluZGV4IDQ5OTI0YTQuLjBjODAzM2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9tZGIvc2ltcGxlL2VqYi9TaW1wbGVNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9tZGIvc2ltcGxlL2VqYi9TaW1wbGVNZXNzYWdlQmVhbi5qYXZhCkBAIC0zNCwyMyArMzQsMjMgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyAgVE9QSUNDT05GQUMgPSAiam1zL1RDRmFjdG9yeSI7CiAgICAgcHVibGljIFNpbXBsZU1lc3NhZ2VCZWFuKCkgewogICAgICAgICBiZWFuY291bnQrKzsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNRVNTQUdFIEJFQU46WyIrYmVhbmNvdW50KyJdLlNpbXBsZU1lc3NhZ2VCZWFuKCkiKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1FU1NBR0UgQkVBTjpbIitiZWFuY291bnQrIl0uU2ltcGxlTWVzc2FnZUJlYW4oKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluICIKICAgICAgICAgICAgICsgIk1FU1NBR0UgQkVBTjpbIitiZWFuY291bnQrIl0uc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoKSIpOwotCXRoaXMubWRjID0gbWRjOworICAgIHRoaXMubWRjID0gbWRjOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGpuZGlDb250ZXh0PW5ldyBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgICB9Y2F0Y2goVGhyb3dhYmxlIGUpIHsKLSAgICAgICAgICAKKwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlLnRvU3RyaW5nKCkpOwogICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJNRVNTQUdFIEJFQU46IFNpbXBsZU1lc3NhZ2VCZWFuLmVqYkNyZWF0ZSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJNRVNTQUdFIEJFQU46IFNpbXBsZU1lc3NhZ2VCZWFuLmVqYkNyZWF0ZSgpIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgaW5NZXNzYWdlKSB7CkBAIC03MiwzMiArNzIsMzIgQEAKICAgICAgICAgICAgIHRlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgfSAgLy8gb25NZXNzYWdlCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNRVNTQUdFIEJFQU46IHNlbmRNZXNzYWdlIGJhY2sgdG8gYXBwY2xpZW50Iik7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNRVNTQUdFIEJFQU46IHNlbmRNZXNzYWdlIGJhY2sgdG8gYXBwY2xpZW50Iik7CiAgICAgICAgIHRyeXsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBUb3BpY0Nvbm5lY3Rpb25GYWN0b3J5IHRvcGljZmFjdG9yeT0oVG9waWNDb25uZWN0aW9uRmFjdG9yeSlqbmRpQ29udGV4dC5sb29rdXAoVE9QSUNDT05GQUMpOwotICAgICAgICAgICAgVG9waWMgdG9waWM9KFRvcGljKWpuZGlDb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvU2FtcGxlVG9waWMiKTsgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIFRvcGljQ29ubmVjdGlvbiAKLSAgICAgICAgICAgIAorICAgICAgICAgICAgVG9waWMgdG9waWM9KFRvcGljKWpuZGlDb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvU2FtcGxlVG9waWMiKTsKKworICAgICAgICAgICAgVG9waWNDb25uZWN0aW9uCisKICAgICAgICAgICAgIGNvbm5lY3QgPSB0b3BpY2ZhY3RvcnkuY3JlYXRlVG9waWNDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgVG9waWNTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0LmNyZWF0ZVRvcGljU2Vzc2lvbihmYWxzZSwwKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBUb3BpY1B1Ymxpc2hlciBwdWJsaXNoZXI9c2Vzc2lvbi5jcmVhdGVQdWJsaXNoZXIodG9waWMpOwogICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDMwMDApOwotICAgICAgICAgICAgcHVibGlzaGVyLnB1Ymxpc2gobWVzc2FnZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHB1Ymxpc2hlci5wdWJsaXNoKG1lc3NhZ2UpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI8PFNlbnQgTWVzc2FnZSBiYWNrIHRvIGFwcGNsaWVudCA+PiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgfWNhdGNoKFRocm93YWJsZSBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiEhISFNRVNTQUdFIEJFQU46IHNlbmRNZXNzYWdlIEV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgIH0gIAotICAgICAgCi0gICAgCisgICAgfQorCisKIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVNZXNzYWdlQmVhbi5yZW1vdmUoKSIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL21kYi9zaW1wbGUvdGVzdG5nLWNsaWVudC9TaW1wbGVNZXNzYWdlQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvbWRiL3NpbXBsZS90ZXN0bmctY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YQppbmRleCAzZTRiZmE1Li4xYTE0ZWZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvbWRiL3NpbXBsZS90ZXN0bmctY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvbWRiL3NpbXBsZS90ZXN0bmctY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YQpAQCAtNzksNyArNzksNyBAQAogICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcCgxMDApOwogICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewotCSAgICBpZiAocXVldWVTZXNzaW9uICE9bnVsbCkKKyAgICAgICAgaWYgKHF1ZXVlU2Vzc2lvbiAhPW51bGwpCiAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgcXVldWVTZXNzaW9uLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgfSBjYXRjaChKTVNFeGNlcHRpb24gZXgpIHsgfQpAQCAtOTksNyArOTksNyBAQAogCiAgICAgICAgIFRleHRNZXNzYWdlIG1lc3NhZ2UgPSBudWxsOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJpbnNpZGUgcmVjdk1lc3NhZ2Ugb2YgbWRiIGFwcGNsaWVudCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW5zaWRlIHJlY3ZNZXNzYWdlIG9mIG1kYiBhcHBjbGllbnQiKTsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgY29ubmVjdCA9IHRjZi5jcmVhdGVUb3BpY0Nvbm5lY3Rpb24oKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvYnVpbGQueG1sCmluZGV4IGIwNDE0ODMuLjkwMmRhYTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL2J1aWxkLnhtbApAQCAtOTMsMTcgKzkzLDE3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgcGVyc2lzdGVuY2UgKEV4ZWN1dGVzIHRoZSBwZXJzaXN0ZW5jZSB0ZXN0cykKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiIHNlc3Npb24gc3RhdGVmdWwgdGVzdHMpCi0JCQlhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIGVqYiBzZXNzaW9uIHN0YXRlZnVsIHRlc3RzKQotCQkJYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBlamIgc2Vzc2lvbiBzdGF0ZWZ1bCB0ZXN0cykKLQkJCWFudCBzZXR1cCAoc2V0cyB1cCByZXNvdXJjZXMgZm9yIGFsbCB0aGUgZWpiIHNlc3Npb24gc3RhdGVmdWwgdGVzdHMpCi0JCQlhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgZWpiIHNlc3Npb24gc3RhdGVmdWwgYXBwcykKLQkJCWFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgZWpiIHNlc3Npb24gc3RhdGVmdWwgdGVzdHMpCi0JCQlhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlIGVqYiBzZXNzaW9uIHN0YXRlZnVsIGFwcHMpCi0JCQlhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgdGhlIGVqYiBzZXNzaW9uIHN0YXRlZnVsIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgcGVyc2lzdGVuY2UgKEV4ZWN1dGVzIHRoZSBwZXJzaXN0ZW5jZSB0ZXN0cykKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiIHNlc3Npb24gc3RhdGVmdWwgdGVzdHMpCisgICAgICAgICAgICBhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIGVqYiBzZXNzaW9uIHN0YXRlZnVsIHRlc3RzKQorICAgICAgICAgICAgYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBlamIgc2Vzc2lvbiBzdGF0ZWZ1bCB0ZXN0cykKKyAgICAgICAgICAgIGFudCBzZXR1cCAoc2V0cyB1cCByZXNvdXJjZXMgZm9yIGFsbCB0aGUgZWpiIHNlc3Npb24gc3RhdGVmdWwgdGVzdHMpCisgICAgICAgICAgICBhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgZWpiIHNlc3Npb24gc3RhdGVmdWwgYXBwcykKKyAgICAgICAgICAgIGFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgZWpiIHNlc3Npb24gc3RhdGVmdWwgdGVzdHMpCisgICAgICAgICAgICBhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlIGVqYiBzZXNzaW9uIHN0YXRlZnVsIGFwcHMpCisgICAgICAgICAgICBhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgdGhlIGVqYiBzZXNzaW9uIHN0YXRlZnVsIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wYXNzaXZhdGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wYXNzaXZhdGUvYnVpbGQucHJvcGVydGllcwppbmRleCBhODZiYjM0Li4xZDJhZjE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGFzc2l2YXRlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3Bhc3NpdmF0ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2ZzYmxpZmVjeWxlIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZnNibGlmZWN5bGUiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wYXNzaXZhdGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3Bhc3NpdmF0ZS9idWlsZC54bWwKaW5kZXggMzhjYjg5Zi4uZmM4MTIzYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3Bhc3NpdmF0ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3Bhc3NpdmF0ZS9idWlsZC54bWwKQEAgLTM3LDIzICszNywyMyBAQAogICAgIDxkZWxldGUgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KIDwvdGFyZ2V0PgogCi08dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4gICAgCis8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0idXRpbCIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYi9zdGF0ZWZ1bCIvPgogICAgIDwvYW50Y2FsbD4KLSAgICAKLSAgICAKKworCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KICAgICA8L2FudGNhbGw+Ci08L3RhcmdldD4gICAgCis8L3RhcmdldD4KIAotPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+ICAgIAotPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIi8+ICAgIAotPC90YXJnZXQ+IAorPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Cis8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iLz4KKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgpAQCAtNjIsMTEgKzYyLDExIEBACiAKIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIAotICAgIAorCiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPiAgICAgICAgICAgICAKKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIke3Rlc3RzdWl0ZS5pZH0gMSBhbGwgIi8+CiAgICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+CkBAIC04MCwxOSArODAsMTkgQEAKICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogPC90YXJnZXQ+CiAKLTx0YXJnZXQgbmFtZT0idW5zZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPiAgICAKKzx0YXJnZXQgbmFtZT0idW5zZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogCi08L3RhcmdldD4gICAgCi0gIAorPC90YXJnZXQ+CisKICAgPHRhcmdldCBuYW1lPSJzdGFuZGFsb25lLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vZWpiL3N0YXRlZnVsL3Bhc3NpdmF0ZS9zdGFuZGFsb25lIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgPGVjaG8gbWVzc2FnZT0iYXNzZW1ibGUuZGlyIGlzICR7YXNzZW1ibGUuZGlyfSIvPgogICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InN0YW5kYWxvbmUiLz4KICAgIDwvYW50Y2FsbD4KLSAgICA8amF2YSBjbGFzc25hbWU9ImVqYi5zdGF0ZWZ1bC5wYXNzaXZhdGUuc3RhbmRhbG9uZS5TdGFuZGFsb25lQ2xpZW50IiBmb3JrPSJ5ZXMiPiAgICAgICAgCi0gICAgPGFyZyBsaW5lPSIke2FkbWluLmhvc3R9ICR7b3JiLnBvcnR9IGJlZm9yZXJlc3RhcnQiLz4gCi0gICAgICAgICA8Y2xhc3NwYXRoPiAgICAgICAgICAgCisgICAgPGphdmEgY2xhc3NuYW1lPSJlamIuc3RhdGVmdWwucGFzc2l2YXRlLnN0YW5kYWxvbmUuU3RhbmRhbG9uZUNsaWVudCIgZm9yaz0ieWVzIj4KKyAgICA8YXJnIGxpbmU9IiR7YWRtaW4uaG9zdH0gJHtvcmIucG9ydH0gYmVmb3JlcmVzdGFydCIvPgorICAgICAgICAgPGNsYXNzcGF0aD4KICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHthc3NlbWJsZS5kaXJ9L2VqYi1zZnNibGlmZWN5Y2xlQXBwQ2xpZW50LmphciIvPgogICAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuUzFBU19IT01FfS9saWIiPgogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouamFyIi8+CkBAIC0xMDAsMjEgKzEwMCwyMSBAQAogICAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIvPgogICAgICAgICAgICAgICAgIDwvZmlsZXNldD4KLSAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5TUFNfSE9NRX0vcGUvbGliL3JlcG9ydGVyLmphciIvPiAgICAgICAgICAgCi0gICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAgIAorICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LlNQU19IT01FfS9wZS9saWIvcmVwb3J0ZXIuamFyIi8+CisgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgIDwvY2xhc3NwYXRoPgotICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0PSR7b3JiLnBvcnR9Ii8+IAorICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0PSR7b3JiLnBvcnR9Ii8+CiAgICAgICAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbEhvc3Q9JHthZG1pbi5ob3N0fSIvPgogICAgICAgIDwvamF2YT4KLSAgCisKICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iU1RPUCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8YW50Y2FsbCB0YXJnZXQ9InN0b3AtZG9tYWluIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9IlNUQVJUIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnQtZG9tYWluIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3Bhc3NpdmF0ZS9jbGllbnQvU2Vzc2lvblRlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wYXNzaXZhdGUvY2xpZW50L1Nlc3Npb25UZXN0Q2xpZW50LmphdmEKaW5kZXggYmZmZjE4MS4uOGM3NDk5NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3Bhc3NpdmF0ZS9jbGllbnQvU2Vzc2lvblRlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGFzc2l2YXRlL2NsaWVudC9TZXNzaW9uVGVzdENsaWVudC5qYXZhCkBAIC0zOSwyNSArMzksMjUgQEAKIHB1YmxpYyBjbGFzcyBTZXNzaW9uVGVzdENsaWVudCB7CiAgICAgcHJpdmF0ZSBTdHJpbmcgdGVzdFN1aXRlSUQ9IiI7CiAgICAgcHJpdmF0ZSBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdDsKLSAgICAKKwogICAgIHB1YmxpYyBDb250ZXh0IGluaXRpYWw7CiAgICAgcHVibGljIE9iamVjdCBvYmpyZWY7CiAgICAgU2Vzc2lvblJlbW90ZUhvbWUgaG9tZT1udWxsOwotICAgIFNlc3Npb25SZW1vdGUgcmVtb3RlPW51bGw7ICAgIAotICAgIAorICAgIFNlc3Npb25SZW1vdGUgcmVtb3RlPW51bGw7CisKICAgICBib29sZWFuIGJlYW5Mb2NhdGVkPWZhbHNlOwogICAgIFN0cmluZyBtX2FjdGlvbj0iYWxsIjsKICAgICBpbnQgbV9jbGllbnRzPTE7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBTZXNzaW9uVGVzdENsaWVudCAqLwogICAgIHB1YmxpYyBTZXNzaW9uVGVzdENsaWVudChTdHJpbmcgdHNfaWQsU3RyaW5nIG51bUNsaWVudHMsU3RyaW5nIGFjdGlvbikgewogICAgICAgICBzdGF0ID1uZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRoaXMgdGVzdHN1aXRlcyB0ZXN0cyBsaWZlY3ljbGUgb2Ygc2ZzYiIpOyAgICAKLSAgICAgICAgdGVzdFN1aXRlSUQ9dHNfaWQ7ICAgICAgIAorICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIHRlc3RzdWl0ZXMgdGVzdHMgbGlmZWN5Y2xlIG9mIHNmc2IiKTsKKyAgICAgICAgdGVzdFN1aXRlSUQ9dHNfaWQ7CiAgICAgICAgIG1fY2xpZW50cz1uZXcgSW50ZWdlcihudW1DbGllbnRzKS5pbnRWYWx1ZSgpOwogICAgICAgICBtX2FjdGlvbj1hY3Rpb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQHBhcmFtIGFyZ3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKICAgICAgKi8KQEAgLTcxLDkgKzcxLDkgQEAKICAgICAgICAgQ2xpZW50LnJ1blN0YXRlZnVsVGVzdCgpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVGVzdCBkaWRuJ3QgcnVuIik7ICAgICAgICAKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVGVzdCBkaWRuJ3QgcnVuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gcnVuU2V0dXAoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBFeGVjdXRpb24gU3RhcnRzLS0tLS0tLS0tLT4iKTsKICAgICAgICAgdHJ5ewpAQCAtODksMjYgKzg5LDI2IEBACiAgICAgICAgICAgICBiZWFuTG9jYXRlZD1mYWxzZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYmVhbkxvY2F0ZWQ7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHJ1blN0YXRlZnVsVGVzdCgpeyAgIAorCisgICAgcHVibGljIHZvaWQgcnVuU3RhdGVmdWxUZXN0KCl7CiAgICAgICAgICBTZXNzaW9uUmVtb3RlW10gcmVtb3RlPW5ldyBTZXNzaW9uUmVtb3RlWzEwXTsKICAgICAgICAgLyoKLSAgICAgICAgICpEdWUgdG8gcGVyZm9ybWFuY2UgcmVhc29ucywgYmVhbnMgYXJlIG5vdCBpbW1lZGlhdGVseSAKKyAgICAgICAgICpEdWUgdG8gcGVyZm9ybWFuY2UgcmVhc29ucywgYmVhbnMgYXJlIG5vdCBpbW1lZGlhdGVseQogICAgICAgICAgcGFzc2l2YXRlZCBhZnRlciB0aGV5IGFyZSBpZGVudGlmaWVkIGFzIGNhbmRpZGF0ZXMgZm9yIHBhc3NpdmF0aW9uLgotICAgICAgICAgVGhlIGNvbnRhaW5lciBwZXJmb3JtcyBwYXNzaXZhdGlvbnMgaW4gYmF0Y2hlcyAKKyAgICAgICAgIFRoZSBjb250YWluZXIgcGVyZm9ybXMgcGFzc2l2YXRpb25zIGluIGJhdGNoZXMKICAgICAgICAgICh0aGF0IGlzIGFmdGVyIGl0IGFjY3VtdWxhdGVzIHNvbWUgbnVtYmVyIG9mIGJlYW5zIC0gd2hpY2ggaXMgc2V0IHRvIDggaW50ZXJuYWxseSkKLSAgICAgICAgICpUaGlzIGlzIHRoZSByZWFzb24gd2h5IHlvdSBkbyBub3Qgc2VlIGEgcGFzc2l2YXRpb24uIAotICAgICAgICAgSWYgeW91IGhhZCBjcmVhdGVkIG1vcmUgdGhhbiA4IHNlc3Npb25zIHRoZW4geW91IHdvdWxkIHNlZSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3VyLiAKKyAgICAgICAgICpUaGlzIGlzIHRoZSByZWFzb24gd2h5IHlvdSBkbyBub3Qgc2VlIGEgcGFzc2l2YXRpb24uCisgICAgICAgICBJZiB5b3UgaGFkIGNyZWF0ZWQgbW9yZSB0aGFuIDggc2Vzc2lvbnMgdGhlbiB5b3Ugd291bGQgc2VlIHRoZSBleHBlY3RlZCBiZWhhdmlvdXIuCiAgICAgICAgICAqaGVuY2UgbnVtYmVyIDEwIGlzIGNob3Nlbi4KICAgICAgICAgICoKICAgICAgICAgICoqLwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZm9yKGludCBpPTA7aTwxMDtpKyspewogICAgICAgICByZW1vdGVbaV09aG9tZS5jcmVhdGUoIjwiK2krIj4iKTsKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIAorICAgICAgICB9CisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnRlZCB0cmFuc2FjdGlvbiBvbiBTdGF0ZWZ1bCBCZWFuIDUsXG4gc2hvdWxkbid0IGdldCBwYXNzaXZhdGVkIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmVtb3RlWzVdLnR4TWV0aG9kKCkpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOb3cgZ29pbmcgdG8gc2xlZXAgZm9yIDQwIHNlY3MgdG8gcGFzc2l2YXRlIGJlYW5zIik7CkBAIC0xMTgsNyArMTE4LDcgQEAKICAgICAgICAgfWNhdGNoKGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3Igd2hpbGUgY3JlYXRpbmcgYmVhbnMiKTsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCsiICIrIjEwIFNGU0IgQ3JlYXRpb24iLHN0YXQuRkFJTCk7ICAgICAgICAgICAgCisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCsiICIrIjEwIFNGU0IgQ3JlYXRpb24iLHN0YXQuRkFJTCk7CiAgICAgICAgIH1jYXRjaChqYXZhLmxhbmcuSW50ZXJydXB0ZWRFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIHdoaWxlIHNsZWVwaW5nIik7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTI3LDE2ICsxMjcsMTYgQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCsiICIrIjEwIFNGU0IgQ3JlYXRpb24iLHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgIHRyeXsgICAgICAgICAgICAgCisgICAgICAgICB0cnl7CiAgICAgICAgICAgICAgZm9yKGludCBpPTA7aTwxMDtpKyspewogICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi4uLi4uLiIrcmVtb3RlW2ldLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICAgICAgIHJlbW90ZVtpXS5hZnRlckFjdGl2YXRpb25CdXNpbmVzc01ldGhvZCgpOwogICAgICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAgfWNhdGNoKGphdmEucm1pLk5vU3VjaE9iamVjdEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImphdmEucm1pLk5vU3VjaE9iamVjdEV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVhbiA5IHJlbW92ZWQiKTsKLSAgICAgICAgICAgICAKKwogICAgICAgICAgICAgIGUuZ2V0TWVzc2FnZSgpOwogICAgICAgICAgfWNhdGNoKGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInVuZm9yc2VlbiBjaXJjdW1zdGFuY2VzIik7CkBAIC0xNDQsMTAgKzE0NCwxMCBAQAogICAgICAgICAgfWNhdGNoKFRocm93YWJsZSBlKXsKICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgfQotICAgICAgICAgCisKICAgICAgICAgIHRyeXsKICAgICAgICAgICAgICBIYXNoTWFwIGZpbmFsUmVzdWx0PW5ldyBIYXNoTWFwKCk7Ci0gICAgICAgICAgICAgZmluYWxSZXN1bHQ9cmVtb3RlWzldLmdldEVKQlJlY29yZGVyKCk7ICAgICAgICAgICAgIAorICAgICAgICAgICAgIGZpbmFsUmVzdWx0PXJlbW90ZVs5XS5nZXRFSkJSZWNvcmRlcigpOwogICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzdWx0IE1hcD09PT09IitmaW5hbFJlc3VsdC50b1N0cmluZygpKTsKICAgICAgICAgICAgICAvL2kgPDkgaW5zdGVhZCBvZiAxMCBhcyA5dGggYmVhbiBpcyByZW1vdmVkCiAgICAgICAgICAgICAgZm9yKGludCBpPTA7aTwxMDtpKyspewpAQCAtMTYxLDE3ICsxNjEsMTcgQEAKICAgICAgICAgICAgICAgICAgaWYoaT09NSl7CiAgICAgICAgICAgICAgICAgICAgICBpZihhY3RpdmF0ZXJlc3VsdC5lcXVhbHNJZ25vcmVDYXNlKCJmYWxzZSIpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlYW4gNSBleHBlY3RlZGx5IGZhaWxzIGFjdGl2YXRpb24iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQotICAgCisKICAgICAgICAgICAgIC8vIFRlc3QgcnVuIGlzIG92ZXIscmVtb3ZlIGFsbCBTRlNCIGFmdGVyIHRoaXMocHJvZHVjdGl6YXRpb24gb2YgdGVzdCxyZXR1cm5zIHNlcnZlciB0byBjbGVhbiBzdGF0ZQogICAgICAgICAgICAgLy9jbG9zZSBhbGwgcmVzb3VyY2VzIGluIFNGU0IgcmVtb3ZlIG1ldGhvZHMKICAgICAgICAgICAgIGZvcihpbnQgaT0wO2k8MTA7aSsrKXsKICAgICAgICAgICAgICAgICB0cnl7CiAgICAgICAgICAgICAgICAgICAgIHJlbW90ZVtpXS5yZW1vdmUoKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICB9Y2F0Y2goamFrYXJ0YS5lamIuUmVtb3ZlRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIHdoaWxlIHJlbW92aW5nICA6IitpKyJTRlNCIik7CiAgICAgICAgICAgICAgICAgICAgIGlmKGk9PTUpCkBAIC0xOTEsNiArMTkxLDYgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZUlEKyIgIisiU0ZTQl9yZW1vdmFsIixzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7Ci0gICAgfSAgICAgCi0gICAgCisgICAgfQorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGFzc2l2YXRlL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wYXNzaXZhdGUvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IDliZDczZGUuLjBhOTFhNDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wYXNzaXZhdGUvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wYXNzaXZhdGUvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC0yNSw1ICsyNSw1IEBACiAgICAgPGVqYi1yZWYtdHlwZT5TZXNzaW9uPC9lamItcmVmLXR5cGU+CiAgICAgICA8aG9tZT5zcWV0ZXN0cy5lamIuc3RhdGVmdWwucGFzc2l2YXRlLmVqYi5zdGF0ZWZ1bC5TZXNzaW9uUmVtb3RlSG9tZTwvaG9tZT4KICAgICAgIDxyZW1vdGU+c3FldGVzdHMuZWpiLnN0YXRlZnVsLnBhc3NpdmF0ZS5lamIuc3RhdGVmdWwuU2Vzc2lvblJlbW90ZTwvcmVtb3RlPgotICA8L2VqYi1yZWY+ICAKKyAgPC9lamItcmVmPgogPC9hcHBsaWNhdGlvbi1jbGllbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGFzc2l2YXRlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGFzc2l2YXRlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggY2U0OWE1Ni4uMmQ1ZGUyNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3Bhc3NpdmF0ZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wYXNzaXZhdGUvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtMjAsNyArMjAsNyBAQAogCiA8ZWpiLWphcj4KICAgPGVudGVycHJpc2UtYmVhbnM+Ci0gICAgPHNlc3Npb24+ICAgICAgCisgICAgPHNlc3Npb24+CiAgICAgICA8ZGlzcGxheS1uYW1lPlNlc3Npb25UZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICA8ZWpiLW5hbWU+U2Vzc2lvblRlc3Q8L2VqYi1uYW1lPgogICAgICAgPGhvbWU+c3FldGVzdHMuZWpiLnN0YXRlZnVsLnBhc3NpdmF0ZS5lamIuc3RhdGVmdWwuU2Vzc2lvblJlbW90ZUhvbWU8L2hvbWU+CkBAIC0yOCw3ICsyOCw3IEBACiAgICAgICA8bG9jYWwtaG9tZT5zcWV0ZXN0cy5lamIuc3RhdGVmdWwucGFzc2l2YXRlLmVqYi5zdGF0ZWZ1bC5TZXNzaW9uTG9jYWxIb21lPC9sb2NhbC1ob21lPgogICAgICAgPGxvY2FsPnNxZXRlc3RzLmVqYi5zdGF0ZWZ1bC5wYXNzaXZhdGUuZWpiLnN0YXRlZnVsLlNlc3Npb25Mb2NhbDwvbG9jYWw+CiAgICAgICA8ZWpiLWNsYXNzPnNxZXRlc3RzLmVqYi5zdGF0ZWZ1bC5wYXNzaXZhdGUuZWpiLnN0YXRlZnVsLlNlc3Npb25CZWFuPC9lamItY2xhc3M+Ci0gICAgICA8c2Vzc2lvbi10eXBlPlN0YXRlZnVsPC9zZXNzaW9uLXR5cGU+ICAgICAgCisgICAgICA8c2Vzc2lvbi10eXBlPlN0YXRlZnVsPC9zZXNzaW9uLXR5cGU+CiAgICAgICA8dHJhbnNhY3Rpb24tdHlwZT5CZWFuPC90cmFuc2FjdGlvbi10eXBlPgogICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgIDxkZXNjcmlwdGlvbj4gVGhpcyBpcyBhIHRleHR1YWwgZGVzY3JpcHRpb24gb2YgdGhlIHJlc291cmNlLjwvZGVzY3JpcHRpb24+CkBAIC0zNiw4ICszNiw4IEBACiAgICAgICAgICA8cmVzLXR5cGU+amF2YS5uZXQuVVJMPC9yZXMtdHlwZT4KICAgICAgICAgIDxyZXMtYXV0aD5Db250YWluZXI8L3Jlcy1hdXRoPgogICAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KLSAgICAgIDwvcmVzb3VyY2UtcmVmPiAgICAgIAotICAgICAKLSAgICA8L3Nlc3Npb24+ICAgICAKKyAgICAgIDwvcmVzb3VyY2UtcmVmPgorCisgICAgPC9zZXNzaW9uPgogICA8L2VudGVycHJpc2UtYmVhbnM+CiA8L2VqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGFzc2l2YXRlL2Rlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGFzc2l2YXRlL2Rlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwKaW5kZXggYTllYTQzZS4uMzMzNjQ4MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3Bhc3NpdmF0ZS9kZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wYXNzaXZhdGUvZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbApAQCAtMjIsNSArMjIsNSBAQAogPGVqYi1yZWY+CiAgICAgICA8ZWpiLXJlZi1uYW1lPmVqYi9TRlNCU2Vzc2lvbjwvZWpiLXJlZi1uYW1lPgogICAgICAgPGpuZGktbmFtZT5NeVNlc3Npb25UZXN0PC9qbmRpLW5hbWU+Ci0gICAgPC9lamItcmVmPiAgICAKKyAgICA8L2VqYi1yZWY+CiA8L3N1bi1hcHBsaWNhdGlvbi1jbGllbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGFzc2l2YXRlL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3Bhc3NpdmF0ZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCBlZDVlYTkxLi5hZDhjNDJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGFzc2l2YXRlL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wYXNzaXZhdGUvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTIyLDM3ICsyMiwzNyBAQAogICA8ZW50ZXJwcmlzZS1iZWFucz4KICAgICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPlNlc3Npb25UZXN0PC9lamItbmFtZT4KLSAgICAgIDxqbmRpLW5hbWU+TXlTZXNzaW9uVGVzdDwvam5kaS1uYW1lPiAgICAgIAorICAgICAgPGpuZGktbmFtZT5NeVNlc3Npb25UZXN0PC9qbmRpLW5hbWU+CiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgPHJlcy1yZWYtbmFtZT51cmwvbXlVUkw8L3Jlcy1yZWYtbmFtZT4KICAgIDxqbmRpLW5hbWU+aHR0cDovL2pzZS5lYXN0LnN1bi5jb208L2puZGktbmFtZT4KLTwvcmVzb3VyY2UtcmVmPiAgICAKLSAgICAgIDxwYXNzLWJ5LXJlZmVyZW5jZT5mYWxzZTwvcGFzcy1ieS1yZWZlcmVuY2U+ICAgICAgIAorPC9yZXNvdXJjZS1yZWY+CisgICAgICA8cGFzcy1ieS1yZWZlcmVuY2U+ZmFsc2U8L3Bhc3MtYnktcmVmZXJlbmNlPgogPGJlYW4tY2FjaGU+CiA8IS0tCi0gSW4gY2FzZSBhIHN0YXRlZnVsIGJlYW4gcmVwcmVzZW50cyBhIHVzZXIsIAotIGEgaGVhbHRoeSBtYXgtY2FjaGUtc2l6ZSBvZiBiZWFucyBjb3VsZCBiZSB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIGNvbmN1cnJlbnQgCisgSW4gY2FzZSBhIHN0YXRlZnVsIGJlYW4gcmVwcmVzZW50cyBhIHVzZXIsCisgYSBoZWFsdGh5IG1heC1jYWNoZS1zaXplIG9mIGJlYW5zIGNvdWxkIGJlIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgY29uY3VycmVudAogIHVzZXJzIG9uIHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIgcHJvY2VzcwogLS0+CiAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xPC9tYXgtY2FjaGUtc2l6ZT4KICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4wPC9yZXNpemUtcXVhbnRpdHk+Ci0gICAgICAgIDwhLS0gYXQgcGVyaW9kaWMgaW50ZXJ2YWxzIG9mIGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzLCAKLSAgICAgICAgICBhbGwgdGhlIGJlYW5zIGluIHRoZSBjYWNoZSB0aGF0IGhhdmUgbm90IGJlZW4gYWNjZXNzZWQgZm9yIG1vcmUgdGhhbiAKKyAgICAgICAgPCEtLSBhdCBwZXJpb2RpYyBpbnRlcnZhbHMgb2YgY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHMsCisgICAgICAgICAgYWxsIHRoZSBiZWFucyBpbiB0aGUgY2FjaGUgdGhhdCBoYXZlIG5vdCBiZWVuIGFjY2Vzc2VkIGZvciBtb3JlIHRoYW4KICAgICAgICAgICBjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcyB0aW1lLCBhcmUgcGFzc2l2YXRlZCAtLT4KLSAgICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4gCi0gICAgICAgICA8IS0tICB0aGUgYmVhbiBpcyByZW1vdmVkIGFmdGVyIGl0aGFzIG5vdCBiZWVuIGFjY2Vzc2VkIAorICAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICAgPCEtLSAgdGhlIGJlYW4gaXMgcmVtb3ZlZCBhZnRlciBpdGhhcyBub3QgYmVlbiBhY2Nlc3NlZAogICAgICAgICAgZm9yIHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzLkEgdmFsdWUgb2YgMCBzcGVjaWZpZXMgdGhhdCB0aGUgY29udGFpbmVyCiAgICAgICAgICAgZG9lcyBub3QgcmVtb3ZlIGluYWN0aXZlIGJlYW5zIGF1dG9tYXRpY2FsbHkuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDU0MDAuCi0gICAgICAgICAgSWYgcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzLCAKLSAgICAgICAgICBiZWFucyBhcmUgcmVtb3ZlZCBpbW1lZGlhdGVseSB3aXRob3V0IGJlaW5nIHBhc3NpdmF0ZWQuIAotICAgICAgICAgLS0+ICAgICAgICAgIAorICAgICAgICAgIElmIHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcywKKyAgICAgICAgICBiZWFucyBhcmUgcmVtb3ZlZCBpbW1lZGlhdGVseSB3aXRob3V0IGJlaW5nIHBhc3NpdmF0ZWQuCisgICAgICAgICAtLT4KICAgICAgICAgIDxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4xMDAwMDAwPC9yZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4KICAgICAgICAgIDwhLS0KICAgICAgICAgIFBvc3NpYmxlIHZhbHVlcyBhcmUgRmlyc3QgSW4sIEZpcnN0IE91dCAoRklGTyksIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSksIE5vdCBSZWNlbnRseSBVc2VkIChOUlUpLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOUlUsIHdoaWNoIGlzIGFjdHVhbGx5IHBzZXVkby1MUlUuCiAgICAgICAgICBUaGUgdmljdGltcyBhcmUgZ2VuZXJhbGx5IHBhc3NpdmF0ZWQgaW50byBhIGJhY2t1cCBzdG9yZSAodHlwaWNhbGx5IGEgZmlsZSBzeXN0ZW0gb3IgZGF0YWJhc2UpLgotICAgICAgICAgIFRoaXMgc3RvcmUgaXMgY2xlYW5lZCBkdXJpbmcgc3RhcnR1cCwgYW5kIGFsc28gYnkgYSBwZXJpb2RpYyBiYWNrZ3JvdW5kIAotICAgICAgICAgIHByb2Nlc3MgdGhhdCByZW1vdmVzIGlkbGUgZW50cmllcyBhcyBzcGVjaWZpZWQgYnkgcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHMuIAotICAgICAgICAgIFRoZSBiYWNrdXAgc3RvcmUgaXMgbW9uaXRvcmVkIGJ5IGEgYmFja2dyb3VuZCB0aHJlYWQgKG9yIHN3ZWVwZXIgdGhyZWFkKSAKKyAgICAgICAgICBUaGlzIHN0b3JlIGlzIGNsZWFuZWQgZHVyaW5nIHN0YXJ0dXAsIGFuZCBhbHNvIGJ5IGEgcGVyaW9kaWMgYmFja2dyb3VuZAorICAgICAgICAgIHByb2Nlc3MgdGhhdCByZW1vdmVzIGlkbGUgZW50cmllcyBhcyBzcGVjaWZpZWQgYnkgcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHMuCisgICAgICAgICAgVGhlIGJhY2t1cCBzdG9yZSBpcyBtb25pdG9yZWQgYnkgYSBiYWNrZ3JvdW5kIHRocmVhZCAob3Igc3dlZXBlciB0aHJlYWQpCiAgICAgICAgICAgdG8gcmVtb3ZlIHVud2FudGVkIGVudHJpZXMuCiAgICAgICAgICAtLT4KICAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkxSVTwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGFzc2l2YXRlL2VqYi9zdGF0ZWZ1bC9TZXNzaW9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3Bhc3NpdmF0ZS9lamIvc3RhdGVmdWwvU2Vzc2lvbkJlYW4uamF2YQppbmRleCBiOWNjZjQ2Li5lNDE5YTc5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGFzc2l2YXRlL2VqYi9zdGF0ZWZ1bC9TZXNzaW9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wYXNzaXZhdGUvZWpiL3N0YXRlZnVsL1Nlc3Npb25CZWFuLmphdmEKQEAgLTcxLDEwICs3MSwxMCBAQAogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW4jZWpiQWN0aXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewotICAgICAgICAvL2tleSBpcyBtZXRob2QgbmFtZSBhbmQgdmFsdWUgaXMgdHJ1ZS9mYWxzZSAgICAgICAKKyAgICAgICAgLy9rZXkgaXMgbWV0aG9kIG5hbWUgYW5kIHZhbHVlIGlzIHRydWUvZmFsc2UKICAgICAgICAgYmVhblJlc3VsdC5wdXQobmV3IFN0cmluZygiYWN0aXZhdGUiKSxuZXcgQm9vbGVhbih0cnVlKSk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tU0ZTQiBCZWFuICIrbWVzc2FnZSsiIGFjdGl2YXRlZC0tLS0tLS0iKTsgICAgICAgIAotICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS1TRlNCIEJlYW4gIittZXNzYWdlKyIgYWN0aXZhdGVkLS0tLS0tLSIpOworCiAgICAgfQogCiAKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7CiAKLSAgICAgICAgLy9rZXkgaXMgbWV0aG9kIG5hbWUgYW5kIHZhbHVlIGlzIHRydWUvZmFsc2UgICAgICAgCisgICAgICAgIC8va2V5IGlzIG1ldGhvZCBuYW1lIGFuZCB2YWx1ZSBpcyB0cnVlL2ZhbHNlCiAgICAgICAgIGJlYW5SZXN1bHQucHV0KG5ldyBTdHJpbmcoInBhc3NpdmF0ZSIpLG5ldyBCb29sZWFuKHRydWUpKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLVNGU0IgQmVhbiAiICttZXNzYWdlKyIgIHBhc3NpdmF0ZWQtLS0tLS0tLSIpOwogCkBAIC0xMDQsMjIgKzEwNCwyMiBAQAogICAgICAqIFNlZSBzZWN0aW9uIDcuMTAuMyBvZiB0aGUgRUpCIDIuMCBzcGVjaWZpY2F0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgewotICAgICAgICAKKwogICAgICAgICBtZXNzYWdlID0gIkhlbGxvIFdvcmxkIEZyb20gU3RhdGVmdWwgRUpCIjsKIAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZShTdHJpbmcgaW5pdGlhbE1lc3NhZ2UpIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24gewotCSAgICB0cnl7CisgICAgICAgIHRyeXsKICAgICAgICAgYmVhblJlc3VsdC5wdXQobmV3IFN0cmluZygicGFzc2l2YXRlIiksbmV3IEJvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgYmVhblJlc3VsdC5wdXQobmV3IFN0cmluZygiYWN0aXZhdGUiKSxuZXcgQm9vbGVhbihmYWxzZSkpOwotICAgICAgICBtZXNzYWdlID0gaW5pdGlhbE1lc3NhZ2U7ICAgICAgICAKKyAgICAgICAgbWVzc2FnZSA9IGluaXRpYWxNZXNzYWdlOwogICAgICAgICBzZXRJbnN0YW5jZUZpZWxkcygpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjxTVEFURUZVTD5DUkVBVEU9PT09PT09PT09PSIrbWVzc2FnZSsiPT09PT09PT09PT09PT09PT09Iik7Ci0JICAgIH1jYXRjaChFeGNlcHRpb24gZSl7Ci0JCSAgICB0aHJvdyBuZXcgQ3JlYXRlRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkgICAgfQotICAgICAgICAKKyAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKKyAgICAgICAgICAgIHRocm93IG5ldyBDcmVhdGVFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisKICAgICB9CiAKICAgICAvKioKQEAgLTEzOCw3ICsxMzgsNyBAQAogCiAgICAgICAgIH1jYXRjaChUaHJvd2FibGUgZSl7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KIAogICAgIH0KQEAgLTE0Nyw3ICsxNDcsNyBAQAogICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiPFNUQVRFRlVMPiAjIyMjRXhwZWN0ZWQjIyMgRXhjZXB0aW9uISEhIFJ1bnRpbWUgZXhjZXB0aW9uIik7CiAgICAgfSovCiAgICBwdWJsaWMgdm9pZCBiYWRNZXRob2QoKXsKLQkgICBTeXN0ZW0ub3V0LnByaW50bG4oIm1vZGlmaWVkIG1ldGhvZCIpOworICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibW9kaWZpZWQgbWV0aG9kIik7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkgewpAQCAtMTc5LDcgKzE3OSw3IEBACiAgICAgICAgIGJvb2xlYW4gcmV0UmVzdWx0PXRydWU7CiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIGludCB0eFN0YXR1cz11c2VyVHguZ2V0U3RhdHVzKCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlR4IFN0YXR1cyIrdHhTdGF0dXMpOyAgICAgICAgICAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVHggU3RhdHVzIit0eFN0YXR1cyk7CiAgICAgICAgICAgICBpZiAodHhTdGF0dXMgPT0gamFrYXJ0YS50cmFuc2FjdGlvbi5TdGF0dXMuU1RBVFVTX0FDVElWRSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29tbWl0dGluZyB0eCB0aGF0IHdhcyBsZWZ0IGFjdGl2ZSIpOwogICAgICAgICAgICAgICAgIHVzZXJUeC5jb21taXQoKTsKQEAgLTE4OSwzMCArMTg5LDMwIEBACiAKICAgICAgICAgfWNhdGNoKFRocm93YWJsZSBlKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU0ZTQiA8IittZXNzYWdlKyI+Li5BY3RpdmF0aW9uIEZBSUxFRCIpOwotICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsgICAgICAgICAgICAKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICByZXRSZXN1bHQ9ZmFsc2U7Ci0gICAgICAgIH0gICAgICAgIAorICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXRSZXN1bHQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICpFSkJSZWNvcmRlciBpcyBhIFNpbmdsZXRvbiBjbGFzcyBzbyB3ZSBjYW4ndCByZXR1cm4gaXQgZnJvbSBTRlNCLkFwcGNsaWVudCBnZXRzIGEgCi0gICAgICogTlBFLkluc3RlYWQsIEhhc2hNYXAgcmVzdWx0IGlzIGV4dHJhY3RlZCBhbmQgcmV0dXJuZWQgdG8gY2FsbGluZyBjbGllbnQuVGhpcyBpcyAKKyAgICAgKkVKQlJlY29yZGVyIGlzIGEgU2luZ2xldG9uIGNsYXNzIHNvIHdlIGNhbid0IHJldHVybiBpdCBmcm9tIFNGU0IuQXBwY2xpZW50IGdldHMgYQorICAgICAqIE5QRS5JbnN0ZWFkLCBIYXNoTWFwIHJlc3VsdCBpcyBleHRyYWN0ZWQgYW5kIHJldHVybmVkIHRvIGNhbGxpbmcgY2xpZW50LlRoaXMgaXMKICAgICAgKlNGU0IgaW5kZXBlbmRlbnQgKEFueSBpbnN0YW5jZSBvZiBTRlNCIHJldHVybnMgc2FtZSBIYXNoTWFwKQotICAgICAKKwogICAgICAqKi8KICAgICBwdWJsaWMgSGFzaE1hcCBnZXRFSkJSZWNvcmRlcigpewogICAgICAgICBpZihlamJSZWNvcmRlciE9bnVsbCl7CiAgICAgICAgICAgICAvL05vdyBleHRyYWN0IGFsbCBiZWFuIHJlc3VsdHMuCiAgICAgICAgICAgICBIYXNoTWFwIGVqYlJlY29yZGVyUmVzdWx0PW5ldyBIYXNoTWFwKCk7Ci0gICAgICAgICAgICBlamJSZWNvcmRlclJlc3VsdD1lamJSZWNvcmRlci5nZXRBbGxCZWFuUmVzdWx0cygpOyAgICAgICAgICAgIAorICAgICAgICAgICAgZWpiUmVjb3JkZXJSZXN1bHQ9ZWpiUmVjb3JkZXIuZ2V0QWxsQmVhblJlc3VsdHMoKTsKICAgICAgICAgcmV0dXJuIGVqYlJlY29yZGVyUmVzdWx0OwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgCisgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKLSAgIAorCisKIAogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGFzc2l2YXRlL2VqYi9zdGF0ZWZ1bC9TZXNzaW9uTG9jYWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wYXNzaXZhdGUvZWpiL3N0YXRlZnVsL1Nlc3Npb25Mb2NhbC5qYXZhCmluZGV4IDk5OTE2OGIuLjljNmVjYjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wYXNzaXZhdGUvZWpiL3N0YXRlZnVsL1Nlc3Npb25Mb2NhbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wYXNzaXZhdGUvZWpiL3N0YXRlZnVsL1Nlc3Npb25Mb2NhbC5qYXZhCkBAIC0yNSw2ICsyNSw2IEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBTZXNzaW9uTG9jYWwgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJMb2NhbE9iamVjdCB7Ci0gICAgCisKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3Bhc3NpdmF0ZS9lamIvc3RhdGVmdWwvU2Vzc2lvbkxvY2FsSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3Bhc3NpdmF0ZS9lamIvc3RhdGVmdWwvU2Vzc2lvbkxvY2FsSG9tZS5qYXZhCmluZGV4IDllZTQxMjYuLmMxMDY1NGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wYXNzaXZhdGUvZWpiL3N0YXRlZnVsL1Nlc3Npb25Mb2NhbEhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGFzc2l2YXRlL2VqYi9zdGF0ZWZ1bC9TZXNzaW9uTG9jYWxIb21lLmphdmEKQEAgLTI1LDkgKzI1LDkgQEAKICAqLwogCiBwdWJsaWMgaW50ZXJmYWNlIFNlc3Npb25Mb2NhbEhvbWUgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJMb2NhbEhvbWUgewotICAgIAorCiAgICAgcHVibGljIFNlc3Npb25Mb2NhbCBjcmVhdGUoKSB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIFNlc3Npb25Mb2NhbCBjcmVhdGUoamF2YS5sYW5nLlN0cmluZyBpbml0aWFsTWVzc2FnZSkgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3Bhc3NpdmF0ZS9lamIvc3RhdGVmdWwvU2Vzc2lvblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3Bhc3NpdmF0ZS9lamIvc3RhdGVmdWwvU2Vzc2lvblJlbW90ZS5qYXZhCmluZGV4IDQ4ZDk1NzcuLjQ0MWJmYjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wYXNzaXZhdGUvZWpiL3N0YXRlZnVsL1Nlc3Npb25SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGFzc2l2YXRlL2VqYi9zdGF0ZWZ1bC9TZXNzaW9uUmVtb3RlLmphdmEKQEAgLTI3LDE4ICsyNywxOCBAQAogICogQGF1dGhvciBkc2luZ2gKICAqLwogCi1wdWJsaWMgaW50ZXJmYWNlIFNlc3Npb25SZW1vdGUgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJPYmplY3QgeyAgICAKLSAgICAKLSAgICBwdWJsaWMgdm9pZCBiYWRNZXRob2QoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOyAgIAotICAgIAorcHVibGljIGludGVyZmFjZSBTZXNzaW9uUmVtb3RlIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCT2JqZWN0IHsKKworICAgIHB1YmxpYyB2b2lkIGJhZE1ldGhvZCgpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisKICAgICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyB0eE1ldGhvZCgpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBhZnRlckFjdGl2YXRpb25CdXNpbmVzc01ldGhvZCgpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgCi0gICAgcHVibGljIEhhc2hNYXAgZ2V0RUpCUmVjb3JkZXIoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOyAgICAKLSAgICAKLSAgICAKKworICAgIHB1YmxpYyBIYXNoTWFwIGdldEVKQlJlY29yZGVyKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKworCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wYXNzaXZhdGUvZWpiL3N0YXRlZnVsL1Nlc3Npb25SZW1vdGVIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGFzc2l2YXRlL2VqYi9zdGF0ZWZ1bC9TZXNzaW9uUmVtb3RlSG9tZS5qYXZhCmluZGV4IGIxYWRlY2YuLjBiYzdlYjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wYXNzaXZhdGUvZWpiL3N0YXRlZnVsL1Nlc3Npb25SZW1vdGVIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3Bhc3NpdmF0ZS9lamIvc3RhdGVmdWwvU2Vzc2lvblJlbW90ZUhvbWUuamF2YQpAQCAtMjUsMTAgKzI1LDEwIEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBTZXNzaW9uUmVtb3RlSG9tZSBleHRlbmRzIGpha2FydGEuZWpiLkVKQkhvbWUgewotICAgIAorCiAgICAgcHVibGljIFNlc3Npb25SZW1vdGUgY3JlYXRlKCkKICAgICB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uLCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgU2Vzc2lvblJlbW90ZSBjcmVhdGUoamF2YS5sYW5nLlN0cmluZyBpbml0aWFsTWVzc2FnZSkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGFzc2l2YXRlL3V0aWwvRUpCUmVjb3JkZXJIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGFzc2l2YXRlL3V0aWwvRUpCUmVjb3JkZXJIb21lLmphdmEKaW5kZXggMjc0OTM3MS4uZThiYTJhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3Bhc3NpdmF0ZS91dGlsL0VKQlJlY29yZGVySG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wYXNzaXZhdGUvdXRpbC9FSkJSZWNvcmRlckhvbWUuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAvKiogUHJpdmF0ZSBjb25zdHJ1Y3RvciB0byBtYWtlIGNsYXNzIFNpbmdsZXRvbiovCiAgIHByaXZhdGUgRUpCUmVjb3JkZXJIb21lKCkgewogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRWpiUmVjb3JkZXJIb21lIGNvbnN0cnVjdG9yIik7Ci0gICAKKwogICB9CiAKICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgRUpCUmVjb3JkZXJIb21lICovCkBAIC03Nyw5ICs3Nyw5IEBACiAgIHB1YmxpYyB2b2lkIHNldEJlYW5NYXAoU3RyaW5nIEVKQk5hbWUsSGFzaE1hcCBtYXApIHsKICAgICAgIG1fYmVhbj1FSkJOYW1lOwogICAgICAgYmVhblN0YXR1cy5wdXQoRUpCTmFtZSwgbWFwKTsKLSAgICAgIAorCiAgIH0KLSAgCisKICAgcHVibGljIEhhc2hNYXAgZ2V0QWxsQmVhblJlc3VsdHMoKXsKICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRUpCUkVDT1JERVIgOlJldHVybmluZyBiZWFuIHJlc3VsdHMuLiIpOwogICAgICAgU3RyaW5nIGtleXM9YmVhblN0YXR1cy5rZXlTZXQoKS50b1N0cmluZygpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3BlcnNpc3RlbmNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGVyc2lzdGVuY2UvYnVpbGQucHJvcGVydGllcwppbmRleCBjODMxMzZhLi4xZDI0MGYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGVyc2lzdGVuY2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGVyc2lzdGVuY2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItc3RhdGVmdWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgCi0JdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSJcdTAwMjAKKyAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcGVyc2lzdGVuY2UiLz4gICAgICAgICAKLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIAotCXZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXBlcnNpc3RlbmNlIi8+ICAgICAgICBcdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciJcdTAwMjAKKyAgICB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iZHJvcHRhYmxlcy52YWx1ZSIgdmFsdWU9InRydWUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wZXJzaXN0ZW5jZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGVyc2lzdGVuY2UvYnVpbGQueG1sCmluZGV4IDUxNGQ5NDMuLjBhNmUyMTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wZXJzaXN0ZW5jZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3BlcnNpc3RlbmNlL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QiIGRlcGVuZHM9ImNsZWFuLGNvbXBpbGUsYnVpbGQsZGVwbG95LHJ1bix1bmRlcGxveSIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4gCisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CkBAIC00NywyOCArNDcsMjggQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgCisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtZWpiLWphciIgZGVwZW5kcz0iaW5pdC1jb21tb24iID4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiIgPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgICB2YWx1ZT0iKiovKkxvY2FsKi5jbGFzcywqKi8qUmVtb3RlKi5jbGFzcywqKi8qSG9tZSouY2xhc3MsKiovKkJlYW4qLmNsYXNzLCoqLyouZGJzY2hlbWEsKiovKkVKQiouY2xhc3MsKiovVHJhZGVSZXN1bHQuY2xhc3MsKiovUHJvY2Vzc2luZ0Vycm9yRXhjZXB0aW9uLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWFwcGNsaWVudC1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiIgPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKLSAgICAgICAgICAgICAgICB2YWx1ZT0iKiovKkxvY2FsKi5jbGFzcywqKi8qUmVtb3RlKi5jbGFzcywqKi8qSG9tZSouY2xhc3MsKiovKkNsaWVudCouY2xhc3MsKiovVHJhZGVSZXN1bHQuY2xhc3MsKiovUHJvY2Vzc2luZ0Vycm9yRXhjZXB0aW9uLmNsYXNzIiAvPgkJCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCisgICAgICAgICAgICAgICAgdmFsdWU9IioqLypMb2NhbCouY2xhc3MsKiovKlJlbW90ZSouY2xhc3MsKiovKkhvbWUqLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzLCoqL1RyYWRlUmVzdWx0LmNsYXNzLCoqL1Byb2Nlc3NpbmdFcnJvckV4Y2VwdGlvbi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iIC8+CiAgICAgPC90YXJnZXQ+CiAKLTwhLS0gCi0gICAgTm90ZTogVGhlIG9yZGVyIGluIHdoaWNoIHRoZSBidWlsZCB0YXJnZXRzIGFyZSBjYWxsZWQgbXVzdCBiZSBzbyAKKzwhLS0KKyAgICBOb3RlOiBUaGUgb3JkZXIgaW4gd2hpY2ggdGhlIGJ1aWxkIHRhcmdldHMgYXJlIGNhbGxlZCBtdXN0IGJlIHNvCiAgICAgdGhhdCB0aGUgZWFyIGlzIGNyZWF0ZWQgYmVmb3JlIHRoZSBlamIgamFyLi4uLi4KLSAgICBlbHNlIHRoZSBlYXIgd2lsbCBwYWNrYWdlIHRoZSBlamIgamFyIHdpdGggaXQgCisgICAgZWxzZSB0aGUgZWFyIHdpbGwgcGFja2FnZSB0aGUgZWpiIGphciB3aXRoIGl0CiAtLT4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiLz4KQEAgLTc2LDggKzc2LDggQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1hcHBjbGllbnQtZWFyIiAvPgotICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVqYi1qYXIiLz4gIAotICAgIDwvdGFyZ2V0PiAKKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lamItamFyIi8+CisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS1lamItamFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIj4KQEAgLTkxLDIyICs5MSwyMiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb3B5LWNsaWVudGphci1yZXN0YXJ0LXNlcnZlciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8Y29weSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiIAorICAgICAgICA8Y29weSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiCiAgICAgICAgICAgICB0b2Rpcj0iJHthZG1pbi5kb21haW4uZGlyfS9kb21haW4xL3NlcnZlci9saWIiIC8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIiAvPgogICAgIDwvdGFyZ2V0PgogCiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1lamItamFyIiAvPiAKLSAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktYXBwY2xpZW50LWVhciIgLz4gCisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWVqYi1qYXIiIC8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWFwcGNsaWVudC1lYXIiIC8+CiA8IS0tCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29weS1jbGllbnRqYXItcmVzdGFydC1zZXJ2ZXIiLz4KIC0tPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4tYWNjIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgPgotICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4gIAorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLXN0YW5kYWxvbmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTEyNywxMCArMTI3LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIj4gCi0JPHBhcmFtIG5hbWU9ImRlcGxveWVkYXBwLm5hbWUiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPgotCTwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iPgorICAgIDxwYXJhbSBuYW1lPSJkZXBsb3llZGFwcC5uYW1lIiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4KKyAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wZXJzaXN0ZW5jZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGVyc2lzdGVuY2UvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDYxYzJiMmUuLmQwYzI5MzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wZXJzaXN0ZW5jZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3BlcnNpc3RlbmNlL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDksMTYgKzQ5LDE2IEBACiAKICAgcHJpdmF0ZSBTdHJpbmcgdXJsOwogICBwcml2YXRlIFRyYWRlckhvbWUgaG9tZTsKLQlwcml2YXRlIFN0cmluZyB0ZXN0SWQgPSBudWxsOworICAgIHByaXZhdGUgU3RyaW5nIHRlc3RJZCA9IG51bGw7CiAKICAgcHVibGljIENsaWVudChTdHJpbmcgdXJsKQogICB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKLSAgICAgIAorCiAgICAgICB0aGlzLnVybCAgICAgICA9IHVybDsKLSAgICAgIAorCiAgLy8gICAgIGhvbWUgPSBsb29rdXBIb21lKCk7CiAgIH0KLSAgCisKICAgcHVibGljIENsaWVudCAoKSB0aHJvd3MgamF2YXgubmFtaW5nLk5hbWluZ0V4Y2VwdGlvbnsKIC8vICAgICAgaG9tZSA9IGxvb2t1cEhvbWUoKTsKICAgfQpAQCAtNzMsMjcgKzczLDI3IEBACiAgICAqLwogICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgbG9nKCJcbkJlZ2lubmluZyBzdGF0ZWZ1bFNlc3Npb24uQ2xpZW50Li4uXG4iKTsKLQl0cnl7Ci0JQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKLQljbGllbnQucnVuKCk7Ci0JfWNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBuZSl7Ci0JfQorICAgIHRyeXsKKyAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOworICAgIGNsaWVudC5ydW4oKTsKKyAgICB9Y2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKXsKKyAgICB9CiB9CiAKLQlwdWJsaWMgdm9pZCBydW4oKXsKKyAgICBwdWJsaWMgdm9pZCBydW4oKXsKIAotCXRlc3RJZCA9ICJzdGF0ZWZ1bC1wZXJzaXN0ZW5jZTo6U2FtcGxlIFN0YW5kYWxvbmUtZWpiLWphciI7Ci0gIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCB0aGUgcGVyc2lzdGVuY2Ugc2FtcGxlIGRlcGxvZWQgYXMgYW4gc3RhbmRhbG9uZSBlamItamFyLiIpOyAKKyAgICB0ZXN0SWQgPSAic3RhdGVmdWwtcGVyc2lzdGVuY2U6OlNhbXBsZSBTdGFuZGFsb25lLWVqYi1qYXIiOworICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgdGhlIHBlcnNpc3RlbmNlIHNhbXBsZSBkZXBsb2VkIGFzIGFuIHN0YW5kYWxvbmUgZWpiLWphci4iKTsKIAogICAgIHRyeSB7Ci0JaG9tZSA9IGxvb2t1cEhvbWUoKTsKKyAgICBob21lID0gbG9va3VwSG9tZSgpOwogICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBuZSkgewotCXN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKKyAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7CiAgICAgfQogCiAgICAgdHJ5IHsKICAgICAgIGV4YW1wbGUoKTsKLQlzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuUEFTUyk7CisgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LlBBU1MpOwogICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICBsb2coIlRoZXJlIHdhcyBhbiBleGNlcHRpb24gd2hpbGUgY3JlYXRpbmcgYW5kIHVzaW5nIHRoZSBUcmFkZXIuIik7CiAgICAgICBsb2coIlRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlcmUgd2FzIGEgcHJvYmxlbSBjb21tdW5pY2F0aW5nIHdpdGggdGhlIHNlcnZlcjogIitlKTsKQEAgLTExMSw3ICsxMTEsNyBAQAogICBwdWJsaWMgdm9pZCBleGFtcGxlKCkKICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb24sUmVtb3ZlRXhjZXB0aW9uLFByb2Nlc3NpbmdFcnJvckV4Y2VwdGlvbgogICB7Ci0gICAgU3RyaW5nIGN1c3RvbWVyTmFtZSA9ICJNYXR0IjsgCisgICAgU3RyaW5nIGN1c3RvbWVyTmFtZSA9ICJNYXR0IjsKIAogICAgIC8vIENyZWF0ZSBhIFRyYWRlcgogICAgIGxvZygiQ3JlYXRpbmcgdHJhZGVyXG4iKTsKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCiAKICAgICBDb250ZXh0IGN0eCA9IG51bGw7Ci0gICAKKwogICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgQ29udGV4dCB3aXRoIEpOREkgc3BlY2lmaWMgcHJvcGVydGllcwogICAgICAgICAgICAgICAgIGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3BlcnNpc3RlbmNlL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3BlcnNpc3RlbmNlL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCmluZGV4IGNiZDFjZDMuLjU5YzM2OWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wZXJzaXN0ZW5jZS9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGVyc2lzdGVuY2UvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIC0tPgogCiA8YXBwbGljYXRpb24+Ci0gIDxkaXNwbGF5LW5hbWU+Q29udmVydGVyQXBwPC9kaXNwbGF5LW5hbWU+ICAKKyAgPGRpc3BsYXktbmFtZT5Db252ZXJ0ZXJBcHA8L2Rpc3BsYXktbmFtZT4KICAgPG1vZHVsZT4KICAgICA8amF2YT5lamItc3RhdGVmdWwtcGVyc2lzdGVuY2UtY2xpZW50LmphcjwvamF2YT4KICAgPC9tb2R1bGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGVyc2lzdGVuY2UvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wZXJzaXN0ZW5jZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDZhNzY0ZjUuLmM4ZmFlNjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wZXJzaXN0ZW5jZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wZXJzaXN0ZW5jZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0zMiwxMyArMzIsMTMgQEAKICAgICAgIDx0cmFuc2FjdGlvbi10eXBlPkNvbnRhaW5lcjwvdHJhbnNhY3Rpb24tdHlwZT4KICAgICAgIDxlbnYtZW50cnk+CiAgICAgICAgIDxlbnYtZW50cnktbmFtZT5CRUFTPC9lbnYtZW50cnktbmFtZT4KLQk8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLkRvdWJsZSA8L2Vudi1lbnRyeS10eXBlPgotCTxlbnYtZW50cnktdmFsdWU+MTAwLjA8L2Vudi1lbnRyeS12YWx1ZT4KKyAgICA8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLkRvdWJsZSA8L2Vudi1lbnRyeS10eXBlPgorICAgIDxlbnYtZW50cnktdmFsdWU+MTAwLjA8L2Vudi1lbnRyeS12YWx1ZT4KICAgICAgIDwvZW52LWVudHJ5PgogICAgICAgPGVudi1lbnRyeT4KICAgICAgICAgPGVudi1lbnRyeS1uYW1lPk1TRlQ8L2Vudi1lbnRyeS1uYW1lPgotCTxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuRG91YmxlIDwvZW52LWVudHJ5LXR5cGU+Ci0JPGVudi1lbnRyeS12YWx1ZT4xNTAuMDwvZW52LWVudHJ5LXZhbHVlPgorICAgIDxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuRG91YmxlIDwvZW52LWVudHJ5LXR5cGU+CisgICAgPGVudi1lbnRyeS12YWx1ZT4xNTAuMDwvZW52LWVudHJ5LXZhbHVlPgogICAgICAgPC9lbnYtZW50cnk+CiAgICAgPC9zZXNzaW9uPgogICA8L2VudGVycHJpc2UtYmVhbnM+CkBAIC00Niw5ICs0Niw5IEBACiAgICAgPGNvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgICAgIDxtZXRob2Q+CiAgICAgICAgIDxlamItbmFtZT5zdGF0ZWZ1bFNlc3Npb248L2VqYi1uYW1lPgotCTxtZXRob2QtbmFtZT4qPC9tZXRob2QtbmFtZT4KKyAgICA8bWV0aG9kLW5hbWU+KjwvbWV0aG9kLW5hbWU+CiAgICAgICA8L21ldGhvZD4KICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KLSAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPiAgCisgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KIDwvZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wZXJzaXN0ZW5jZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wZXJzaXN0ZW5jZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCA5ZjJmNjEwLi5jYjI1Nzk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGVyc2lzdGVuY2UvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3BlcnNpc3RlbmNlL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgPHVuaXF1ZS1pZD4xPC91bmlxdWUtaWQ+CiAgICAgPGVqYj4KICAgICAgIDxlamItbmFtZT5zdGF0ZWZ1bFNlc3Npb248L2VqYi1uYW1lPgotICAgICAgPGpuZGktbmFtZT5NeVRyYWRlckJlYW48L2puZGktbmFtZT4gICAgICAKKyAgICAgIDxqbmRpLW5hbWU+TXlUcmFkZXJCZWFuPC9qbmRpLW5hbWU+CiAgICAgPC9lamI+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KIDwvc3VuLWVqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGVyc2lzdGVuY2UvZWpiL1RyYWRlckJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wZXJzaXN0ZW5jZS9lamIvVHJhZGVyQmVhbi5qYXZhCmluZGV4IDlkNDZkYzMuLjk4MGMyNGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wZXJzaXN0ZW5jZS9lamIvVHJhZGVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wZXJzaXN0ZW5jZS9lamIvVHJhZGVyQmVhbi5qYXZhCkBAIC04MSw3ICs4MSw3IEBACiAgICAqIFRoaXMgbWV0aG9kIGNvcnJlc3BvbmRzIHRvIHRoZSBjcmVhdGUgbWV0aG9kIGluIHRoZSBob21lIGludGVyZmFjZQogICAgKiAiVHJhZGVySG9tZS5qYXZhIi4KICAgICogVGhlIHBhcmFtZXRlciBzZXRzIG9mIHRoZSB0d28gbWV0aG9kcyBhcmUgaWRlbnRpY2FsLiBXaGVuIHRoZSBjbGllbnQgY2FsbHMKLSAgICogPGNvZGU+VHJhZGVySG9tZS5jcmVhdGUoKTwvY29kZT4sIHRoZSBjb250YWluZXIgYWxsb2NhdGVzIGFuIGluc3RhbmNlIG9mIAorICAgKiA8Y29kZT5UcmFkZXJIb21lLmNyZWF0ZSgpPC9jb2RlPiwgdGhlIGNvbnRhaW5lciBhbGxvY2F0ZXMgYW4gaW5zdGFuY2Ugb2YKICAgICogdGhlIEVKQmVhbiBhbmQgY2FsbHMgPGNvZGU+ZWpiQ3JlYXRlKCk8L2NvZGU+LgogICAgKgogICAgKiBAZXhjZXB0aW9uICAgICAgICAgICAgICAgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uCkBAIC0xNTgsMTMgKzE1OCwxMyBAQAogICAgKiBAZXhjZXB0aW9uICAgICAgICAgICAgICAgZXhhbXBsZXMuZWpiMjAuYmFzaWMuc3RhdGVmdWxTZXNzaW9uLlByb2Nlc3NpbmdFcnJvckV4Y2VwdGlvbgogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlcmUgaXMgYW4gZXJyb3Igd2hpbGUgY2hlY2tpbmcgdGhlIHByaWNlCiAgICAqLwotICBwdWJsaWMgZG91YmxlIGdldFN0b2NrUHJpY2UoU3RyaW5nIHN0b2NrU3ltYm9sKSAKLSAgICB0aHJvd3MgUHJvY2Vzc2luZ0Vycm9yRXhjZXB0aW9uIAorICBwdWJsaWMgZG91YmxlIGdldFN0b2NrUHJpY2UoU3RyaW5nIHN0b2NrU3ltYm9sKQorICAgIHRocm93cyBQcm9jZXNzaW5nRXJyb3JFeGNlcHRpb24KICAgewogICAgIHRyeSB7CiAgICAgICByZXR1cm4gKChEb3VibGUpIGVudmlyb25tZW50Lmxvb2t1cChzdG9ja1N5bWJvbCkpLmRvdWJsZVZhbHVlKCk7CiAgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIG5lKSB7Ci0gICAgICB0aHJvdyBuZXcgUHJvY2Vzc2luZ0Vycm9yRXhjZXB0aW9uICgiU3RvY2sgc3ltYm9sICIgKyBzdG9ja1N5bWJvbCArIAorICAgICAgdGhyb3cgbmV3IFByb2Nlc3NpbmdFcnJvckV4Y2VwdGlvbiAoIlN0b2NrIHN5bWJvbCAiICsgc3RvY2tTeW1ib2wgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBkb2VzIG5vdCBleGlzdCIpOwogICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKICAgICAgIHRocm93IG5ldyBQcm9jZXNzaW5nRXJyb3JFeGNlcHRpb24oIkludmFsaWQgcHJpY2UgZm9yIHN0b2NrICIrc3RvY2tTeW1ib2wpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3BlcnNpc3RlbmNlL2VqYi9UcmFkZXJIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGVyc2lzdGVuY2UvZWpiL1RyYWRlckhvbWUuamF2YQppbmRleCA0OTFiYzdjLi5hN2ZhZmEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGVyc2lzdGVuY2UvZWpiL1RyYWRlckhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGVyc2lzdGVuY2UvZWpiL1RyYWRlckhvbWUuamF2YQpAQCAtMjIsNiArMjIsNiBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIFRyYWRlckhvbWUgZXh0ZW5kcyBFSkJIb21lIHsKIAotICAKKwogICBUcmFkZXJSZW1vdGUgY3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3BlcnNpc3RlbmNlL2VqYi9UcmFkZXJSZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWZ1bC9wZXJzaXN0ZW5jZS9lamIvVHJhZGVyUmVtb3RlLmphdmEKaW5kZXggYjA3YTExNi4uMjlkOTY3YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlZnVsL3BlcnNpc3RlbmNlL2VqYi9UcmFkZXJSZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVmdWwvcGVyc2lzdGVuY2UvZWpiL1RyYWRlclJlbW90ZS5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAgIHB1YmxpYyBUcmFkZVJlc3VsdCBzZWxsKFN0cmluZyBjdXN0b21lck5hbWUsIFN0cmluZyBzdG9ja1N5bWJvbCwgaW50IHNoYXJlcykKICAgICB0aHJvd3MgUHJvY2Vzc2luZ0Vycm9yRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKLSAgcHVibGljIGRvdWJsZSBnZXRCYWxhbmNlKCkgCisgIHB1YmxpYyBkb3VibGUgZ2V0QmFsYW5jZSgpCiAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlbGVzcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVsZXNzL2J1aWxkLnhtbAppbmRleCBhZTcyY2UxLi4xYmM5MGExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVsZXNzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVsZXNzL2J1aWxkLnhtbApAQCAtODIsMTYgKzgyLDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4gVXNhZ2U6Ci0JCWFudCBjb252ZXJ0ZXIgKEV4ZWN1dGVzIHRoZSBjb252ZXJ0ZXIgdGVzdHMpCi0JCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiIHNlc3Npb24gc3RhdGVsZXNzIHRlc3RzKQotCQlhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIGVqYiBzZXNzaW9uIHN0YXRlbGVzcyB0ZXN0cykKLQkJYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBlamIgc2Vzc2lvbiBzdGF0ZWxlc3MgdGVzdHMpCi0JCWFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBzdGF0ZWxlc3MgdGVzdHMpCi0JCWFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBlamIgc2Vzc2lvbiBzdGF0ZWxlc3MgYXBwcykKLQkJYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBlamIgc2Vzc2lvbiBzdGF0ZWxlc3MgdGVzdHMpCi0JCWFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgc2Vzc2lvbiBzdGF0ZWxlc3MgYXBwcykKLQkJYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBzdGF0ZWxlc3MgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPiBVc2FnZToKKyAgICAgICAgYW50IGNvbnZlcnRlciAoRXhlY3V0ZXMgdGhlIGNvbnZlcnRlciB0ZXN0cykKKyAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamIgc2Vzc2lvbiBzdGF0ZWxlc3MgdGVzdHMpCisgICAgICAgIGFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgZWpiIHNlc3Npb24gc3RhdGVsZXNzIHRlc3RzKQorICAgICAgICBhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGVqYiBzZXNzaW9uIHN0YXRlbGVzcyB0ZXN0cykKKyAgICAgICAgYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIHN0YXRlbGVzcyB0ZXN0cykKKyAgICAgICAgYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIGVqYiBzZXNzaW9uIHN0YXRlbGVzcyBhcHBzKQorICAgICAgICBhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGVqYiBzZXNzaW9uIHN0YXRlbGVzcyB0ZXN0cykKKyAgICAgICAgYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSBzZXNzaW9uIHN0YXRlbGVzcyBhcHBzKQorICAgICAgICBhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIHN0YXRlbGVzcyB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVsZXNzL2NvbnZlcnRlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlbGVzcy9jb252ZXJ0ZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBlYWE0YjdjLi5mMjBjNjk5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVsZXNzL2NvbnZlcnRlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWxlc3MvY29udmVydGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDI4ICsxNSwyOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXN0YXRlbGVzcyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY29udmVydGVyIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jb252ZXJ0ZXIiLz4gICAgICAgIFx1MDAyMAogCi08cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIAotCXZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiAKLQl2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIlx1MDAyMAorICAgIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiXHUwMDIwCisgICAgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4gICAgICAgIFx1MDAyMAogCi08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJjb20uc3VuLnMxcGVxZS5lamIuc3RhdGVsZXNzLmNvbnZlcnRlci5jbGllbnQuQ29udmVydGVyQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9ImNvbS5zdW4uczFwZXFlLmVqYi5zdGF0ZWxlc3MuY29udmVydGVyLmNsaWVudC5Db252ZXJ0ZXJDbGllbnQiLz4KIAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAKIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiAKQEAgLTQ1LDggKzQ1LDggQEAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLQogPHByb3BlcnR5IG5hbWU9ImpuZGkubmFtZSIgdmFsdWU9ImNvbnZlcnRlciIvPgotPHByb3BlcnR5IG5hbWU9InByb3ZpZGVyLnVybCIgdmFsdWU9Imlpb3A6Ly9sb2NhbGhvc3Q6JHtvcmIucG9ydH0iLz4gCi08cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIgdmFsdWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5uYW1pbmcuU2VyaWFsSW5pdENvbnRleHRGYWN0b3J5Ii8+IAotPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiIHZhbHVlPSJjb20uc3VuLmpuZGkuY29zbmFtaW5nLkNOQ3R4RmFjdG9yeSIvPiAKKzxwcm9wZXJ0eSBuYW1lPSJwcm92aWRlci51cmwiIHZhbHVlPSJpaW9wOi8vbG9jYWxob3N0OiR7b3JiLnBvcnR9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIgdmFsdWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5uYW1pbmcuU2VyaWFsSW5pdENvbnRleHRGYWN0b3J5Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIgdmFsdWU9ImNvbS5zdW4uam5kaS5jb3NuYW1pbmcuQ05DdHhGYWN0b3J5Ii8+XHUwMDIwCiAtLT4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlbGVzcy9jb252ZXJ0ZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlbGVzcy9jb252ZXJ0ZXIvYnVpbGQueG1sCmluZGV4IDAwM2FlNWEuLjBmZWQ3NWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWxlc3MvY29udmVydGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVsZXNzL2NvbnZlcnRlci9idWlsZC54bWwKQEAgLTU3LDcgKzU3LDcgQEAKICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJzcWUtdGltZXItcG9vbCIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTY5LDEyICs2OSwxMiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLXN0YW5kYWxvbmUtY2xpZW50Ii8+CkBAIC04NiwyNyArODYsMjcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1zdGFuZGFsb25lLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iam5kaS5uYW1lIiB2YWx1ZT0iY29udmVydGVyIi8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwcm92aWRlci51cmwiIHZhbHVlPSJpaW9wOi8vJHthZG1pbi5ob3N0fToke29yYi5wb3J0fSIvPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IgogICAgICAgICAgICAgdmFsdWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5uYW1pbmcuU2VyaWFsSW5pdENvbnRleHRGYWN0b3J5Ii8+CiA8IS0tCi0JPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiIAotICAgICAgICAgICAgCXZhbHVlPSJvcmcuZ2xhc3NmaXNoLmpuZGkuY29zbmFtaW5nLkNOQ3R4RmFjdG9yeSIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IgorICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZ2xhc3NmaXNoLmpuZGkuY29zbmFtaW5nLkNOQ3R4RmFjdG9yeSIvPgogLS0+Ci0JPGVjaG8gbWVzc2FnZT0icHJvdmlkZXIudXJsIHVzZWQgaXMgJHtwcm92aWRlci51cmx9Ii8+CisgICAgPGVjaG8gbWVzc2FnZT0icHJvdmlkZXIudXJsIHVzZWQgaXMgJHtwcm92aWRlci51cmx9Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9IiR7dGVzdC5jbGllbnR9IgogICAgICAgICBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofToke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiCiAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIiBmb3JrPSJ0cnVlIj4KLQk8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbEhvc3Q9JHthZG1pbi5ob3N0fSIvPgotCTxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydD0ke29yYi5wb3J0fSIvPgorICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsSG9zdD0ke2FkbWluLmhvc3R9Ii8+CisgICAgPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0PSR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7cHJvdmlkZXIudXJsfSIvPgogICAgICAgICA8YXJnIHZhbHVlPSIke2N0eGZhY3Rvcnl9Ii8+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7am5kaS5uYW1lfSIvPgogICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVsZXNzL2NvbnZlcnRlci9jbGllbnQvQ29udmVydGVyQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVsZXNzL2NvbnZlcnRlci9jbGllbnQvQ29udmVydGVyQ2xpZW50LmphdmEKaW5kZXggMmU0MWZiYS4uOGI1ZDY0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlbGVzcy9jb252ZXJ0ZXIvY2xpZW50L0NvbnZlcnRlckNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWxlc3MvY29udmVydGVyL2NsaWVudC9Db252ZXJ0ZXJDbGllbnQuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqIEEgc2ltcGxlIGphdmEgY2xpZW50LiBUaGlzIHVzZXMgdGhlIHNlcnZpY2VzIHByb3ZpZGVkIGJ5IHRoZSA8Y29kZT5Db252ZXJ0ZXJCZWFuPC9jb2RlPiBhbmQKLSAqIGNvbnZlcnRzIDEwMCBVUyBkb2xsYXJzIHRvIFllbiBhbmQgMTAwIFllbiB0byBFdXJvLiAKKyAqIGNvbnZlcnRzIDEwMCBVUyBkb2xsYXJzIHRvIFllbiBhbmQgMTAwIFllbiB0byBFdXJvLgogICogPHA+SW4gdGhpcyByZWdhcmQsIGl0IGRvZXMgdGhlIGZvbGxvd2luZyBpbiBvcmRlcgogICogPHVsPgogICogPGxpPkxvY2F0ZXMgdGhlIGhvbWUgaW50ZXJmYWNlIG9mIHRoZSBlbnRlcnByaXNlIGJlYW4KQEAgLTM3LDIxICszNywyMSBAQAogICogPGJyPgogICogPGI+TG9jYXRpbmcgdGhlIGhvbWUgaW50ZXJmYWNlOjwvYj4KICAqIDxibG9ja3F1b3RlPjxwcmU+Ci0gKglDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAqCUNvbnRleHQgbXlFbnYgPSAoQ29udGV4dClpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2VudiIpOwotICoJT2JqZWN0IG9ianJlZiA9IG15RW52Lmxvb2t1cCgiZWpiL1NpbXBsZUNvbnZlcnRlciIpOworICogICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgKiAgICBDb250ZXh0IG15RW52ID0gKENvbnRleHQpaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYiKTsKKyAqICAgIE9iamVjdCBvYmpyZWYgPSBteUVudi5sb29rdXAoImVqYi9TaW1wbGVDb252ZXJ0ZXIiKTsKICAqICBDb252ZXJ0ZXJIb21lIGhvbWUgPSAoQ29udmVydGVySG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBDb252ZXJ0ZXJIb21lLmNsYXNzKTsKICAqIDwvcHJlPjwvYmxvY2txdW90ZT4KICAqIDxicj4KICAqIDxiPkNyZWF0aW5nIHRoZSByZW1vdGUgaW50ZXJmYWNlOjwvYj4KICAqIDxibG9ja3F1b3RlPjxwcmU+Ci0gKglDb252ZXJ0ZXIgY3VycmVuY3lDb252ZXJ0ZXIgPSBob21lLmNyZWF0ZSgpOworICogICAgQ29udmVydGVyIGN1cnJlbmN5Q29udmVydGVyID0gaG9tZS5jcmVhdGUoKTsKICAqIDwvcHJlPjwvYmxvY2txdW90ZT4KICAqIDxicj4KICAqIDxiPkludm9raW5nIGJ1c2luZXNzIG1ldGhvZHM6PC9iPgogICogPGJsb2NrcXVvdGU+PHByZT4KICAqICBCaWdEZWNpbWFsIHBhcmFtID0gbmV3IEJpZ0RlY2ltYWwgKCIxMDAuMDAiKTsKLSAqCWFtb3VudCA9IGN1cnJlbmN5Q29udmVydGVyLmRvbGxhclRvWWVuKHBhcmFtKTsKKyAqICAgIGFtb3VudCA9IGN1cnJlbmN5Q29udmVydGVyLmRvbGxhclRvWWVuKHBhcmFtKTsKICAqICBhbW91bnQgPSBjdXJyZW5jeUNvbnZlcnRlci55ZW5Ub0V1cm8ocGFyYW0pOwogICogPC9wcmU+PC9ibG9ja3F1b3RlPgogICogPGJyPgpAQCAtNjYsNyArNjYsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ29udmVydGVyQ2xpZW50IHsKIAotICAgIHByaXZhdGUgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIENvbnZlcnRlckNsaWVudCgpIHsKQEAgLTgwLDM1ICs4MCwzNSBAQAogICAgICoKICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQlDb252ZXJ0ZXJDbGllbnQgY2xpZW50ID0gbmV3IENvbnZlcnRlckNsaWVudCgpOwotCWNsaWVudC5ydW4oYXJncyk7CisgICAgQ29udmVydGVyQ2xpZW50IGNsaWVudCA9IG5ldyBDb252ZXJ0ZXJDbGllbnQoKTsKKyAgICBjbGllbnQucnVuKGFyZ3MpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBydW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBTdHJpbmcgdXJsID0gbnVsbDsKLQlTdHJpbmcgdGVzdElkID0gbnVsbDsKKyAgICBTdHJpbmcgdGVzdElkID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGpuZGlOYW1lID0gbnVsbDsKICAgICAgICAgQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGN0eEZhY3RvcnkgPSBudWxsOwotCWphdmEubGFuZy5PYmplY3Qgb2JqID0gbnVsbDsKKyAgICBqYXZhLmxhbmcuT2JqZWN0IG9iaiA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgdGhlIGNvbnZlcnRlciBzYW1wbGUuIik7CiAKICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAzKSB7CiAgICAgICAgICAgICAgICAgdXJsID0gYXJnc1swXTsKICAgICAgICAgICAgICAgICBjdHhGYWN0b3J5ID0gYXJnc1sxXTsKLQkJam5kaU5hbWUgPSBhcmdzWzJdOworICAgICAgICBqbmRpTmFtZSA9IGFyZ3NbMl07CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICggKHVybCA9PSBudWxsKSB8fCAoY3R4RmFjdG9yeSA9PSBudWxsKSApIHsKLQkJdGVzdElkID0gIkNvbnZlcnRlcjo6U2FtcGxlIEFwcENsaWVudCI7CisgICAgICAgIHRlc3RJZCA9ICJDb252ZXJ0ZXI6OlNhbXBsZSBBcHBDbGllbnQiOwogICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIENvbnRleHQgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMKICAgICAgICAgICAgICAgICBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWZhdWx0IENvbnRleHQgSW5pdGlhbGl6ZWQuLi4iKTsKICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgSG9tZSBvYmplY3QKICAgICAgICAgICAgICAgICBvYmogPSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQ29udmVydGVyIik7CiAgICAgICAgICAgICB9IGVsc2UgewotCQl0ZXN0SWQgPSAiQ29udmVydGVyOjpTYW1wbGUgU3RhbmRhbG9uZS1DbGllbnQiOworICAgICAgICB0ZXN0SWQgPSAiQ29udmVydGVyOjpTYW1wbGUgU3RhbmRhbG9uZS1DbGllbnQiOwogICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgZW52ID0gbmV3IFByb3BlcnRpZXMoKTsKICAgICAgICAgICAgICAgICBlbnYucHV0KCJqYXZhLm5hbWluZy5wcm92aWRlci51cmwiLCB1cmwpOwogICAgICAgICAgICAgICAgIGVudi5wdXQoImphdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbCIsIGN0eEZhY3RvcnkpOwpAQCAtMTM4LDcgKzEzOCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiEiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9IGZpbmFsbHkgewotCSAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlbGVzcy9jb252ZXJ0ZXIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVsZXNzL2NvbnZlcnRlci9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAppbmRleCBkYzg1OWZlLi5hMDc2ZDYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVsZXNzL2NvbnZlcnRlci9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVsZXNzL2NvbnZlcnRlci9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbApAQCAtMjMsNyArMjMsNyBAQAogICAgIDxzbWFsbC1pY29uPjwvc21hbGwtaWNvbj4KICAgICA8bGFyZ2UtaWNvbj48L2xhcmdlLWljb24+CiAgIDwvaWNvbj4KLSAgPGRpc3BsYXktbmFtZT5Db252ZXJ0ZXJBcHA8L2Rpc3BsYXktbmFtZT4gIAorICA8ZGlzcGxheS1uYW1lPkNvbnZlcnRlckFwcDwvZGlzcGxheS1uYW1lPgogICA8bW9kdWxlPgogICAgIDxqYXZhPmVqYi1zdGF0ZWxlc3MtY29udmVydGVyLWNsaWVudC5qYXI8L2phdmE+CiAgIDwvbW9kdWxlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlbGVzcy9jb252ZXJ0ZXIvZWpiL0NvbnZlcnRlckJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2VqYi9zdGF0ZWxlc3MvY29udmVydGVyL2VqYi9Db252ZXJ0ZXJCZWFuLmphdmEKaW5kZXggYzBjZGYzMC4uYThkZjM0MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvZWpiL3N0YXRlbGVzcy9jb252ZXJ0ZXIvZWpiL0NvbnZlcnRlckJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9lamIvc3RhdGVsZXNzL2NvbnZlcnRlci9lamIvQ29udmVydGVyQmVhbi5qYXZhCkBAIC0zNSw3ICszNSw3IEBACiAgKiBAc2VlIENvbnZlcnRlckhvbWUKICAqLwogcHVibGljIGNsYXNzIENvbnZlcnRlckJlYW4gaW1wbGVtZW50cyBTZXNzaW9uQmVhbiwgVGltZWRPYmplY3QgewotICAgIAorCiAgICAgU2Vzc2lvbkNvbnRleHQgc2Vzc2lvbkNvbnRleHRfOwogCiAgICAgQmlnRGVjaW1hbCB5ZW5SYXRlID0gbmV3IEJpZ0RlY2ltYWwoIjEyMS42MDAwIik7CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIC8vIG51bWJlciBvZiB0ZXN0cyBpcyBnZXR0aW5nIGxhcmdlLiAgVGhpcyBzZXQgb2Ygb3BlcmF0aW9ucyB3aWxsCiAgICAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSB0aW1lciBwZXJzaXN0ZW50IHN0b3JlIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksCiAgICAgICAgIC8vIGluIGFkZGl0aW9uIHRvIGV4ZXJjaXNpbmcgc29tZSBvZiB0aGUgY29tbW9uIHRpbWVyIGZ1bmN0aW9ucy4KLSAgICAgICAgdGVzdFRpbWVyU2VydmljZSgpOyAgICAgICAgCisgICAgICAgIHRlc3RUaW1lclNlcnZpY2UoKTsKIAogICAgICAgICBCaWdEZWNpbWFsIHJlc3VsdCA9IGRvbGxhcnMubXVsdGlwbHkoeWVuUmF0ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQuc2V0U2NhbGUoMixCaWdEZWNpbWFsLlJPVU5EX1VQKTsKQEAgLTg4LDcgKzg4LDcgQEAKICAgICAgKiBMb2FkcyB0aGUgc3RhdGUgb2YgdGhlIGJlYW4gZnJvbSBzZWNvbmRhcnkgc3RvcmFnZS4gUmVxdWlyZWQgYnkgRUpCIHNwZWMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotICAgIAorCiAgICAgLyoqCiAgICAgICogS2VlcHMgdGhlIHN0YXRlIG9mIHRoZSBiZWFuIHRvIHNlY29uZGFyeSBzdG9yYWdlLiBSZXF1aXJlZCBieSBFSkIgc3BlYy4KICAgICAgKi8KQEAgLTEzOSw3ICsxMzksNyBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNlc3Npb25Db250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogICAgICAgICAgICAgQ29sbGVjdGlvbiB0aW1lcnMgPSB0aW1lclNlcnZpY2UuZ2V0VGltZXJzKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qbmRpL3VybC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvam5kaS91cmwvYnVpbGQucHJvcGVydGllcwppbmRleCA5ODQyZmJjLi5lY2MxMzUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qbmRpL3VybC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2puZGkvdXJsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam5kaSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdXJsIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS11cmwiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iY29tLnN1bi5zMXBlcWUuam5kaS51cmwuY2xpZW50LkhUTUxSZWFkZXJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgpAQCAtMjcsNiArMjcsNiBAQAogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCi08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4gICAgICAgICAKLTxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+ICAgICAgICBcdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICBcdTAwMjAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2puZGkvdXJsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2puZGkvdXJsL2J1aWxkLnhtbAppbmRleCA1NGM3NDFkLi5kNzgyMTZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qbmRpL3VybC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvam5kaS91cmwvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwyNCArNDYsMjQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypIVE1MKi5jbGFzcywqKi8qRXhjZXB0aW9uKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qRXhjZXB0aW9uKi5jbGFzcywqKi8qSG9tZSouY2xhc3MsKiovKlJlYWRlci5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2puZGkvdXJsL2NsaWVudC9IVE1MUmVhZGVyQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qbmRpL3VybC9jbGllbnQvSFRNTFJlYWRlckNsaWVudC5qYXZhCmluZGV4IGU5MGEwM2MuLmFkZDVlNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2puZGkvdXJsL2NsaWVudC9IVE1MUmVhZGVyQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvam5kaS91cmwvY2xpZW50L0hUTUxSZWFkZXJDbGllbnQuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogCiBwdWJsaWMgY2xhc3MgSFRNTFJlYWRlckNsaWVudCB7CiAKLSAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewpAQCAtMzYsOCArMzYsOCBAQAogICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUhUTUxSZWFkZXIiKTsKIAogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdldHRpbmcgaG9tZS4uLiIpOwotICAgICAgICAgICBIVE1MUmVhZGVySG9tZSBob21lID0gCi0gICAgICAgICAgICAgICAoSFRNTFJlYWRlckhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgIEhUTUxSZWFkZXJIb21lIGhvbWUgPQorICAgICAgICAgICAgICAgKEhUTUxSZWFkZXJIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUTUxSZWFkZXJIb21lLmNsYXNzKTsKIAogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNyZWF0aW5nIGJlYW4uLi4iKTsKQEAgLTU1LDUgKzU1LDUgQEAKICAgICAgICB9CiAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInVybElEIik7CiAgICAgICAgU3lzdGVtLmV4aXQoMCk7Ci0gICB9IAotfSAKKyAgIH0KK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2puZGkvdXJsL2VqYi9IVE1MUmVhZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qbmRpL3VybC9lamIvSFRNTFJlYWRlci5qYXZhCmluZGV4IDFkNzIwZDUuLjFiZmVjZjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2puZGkvdXJsL2VqYi9IVE1MUmVhZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvam5kaS91cmwvZWpiL0hUTUxSZWFkZXIuamF2YQpAQCAtMjAsOCArMjAsOCBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIAogcHVibGljIGludGVyZmFjZSBIVE1MUmVhZGVyIGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAKLSAgIHB1YmxpYyBTdHJpbmdCdWZmZXIgZ2V0Q29udGVudHMoKSAKKworICAgcHVibGljIFN0cmluZ0J1ZmZlciBnZXRDb250ZW50cygpCiAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBIVFRQUmVzcG9uc2VFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2puZGkvdXJsL2VqYi9IVE1MUmVhZGVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvam5kaS91cmwvZWpiL0hUTUxSZWFkZXJCZWFuLmphdmEKaW5kZXggMTdhODhkMS4uNWYwYWQ4NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvam5kaS91cmwvZWpiL0hUTUxSZWFkZXJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvam5kaS91cmwvZWpiL0hUTUxSZWFkZXJCZWFuLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIGltcG9ydCBqYXZhLmlvLio7CiAKIHB1YmxpYyBjbGFzcyBIVE1MUmVhZGVyQmVhbiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKLSAKKwogICBwdWJsaWMgU3RyaW5nQnVmZmVyIGdldENvbnRlbnRzKCkgdGhyb3dzIEhUVFBSZXNwb25zZUV4Y2VwdGlvbiB7CiAKICAgICAgQ29udGV4dCBjb250ZXh0OwpAQCAtMzMsMTAgKzMzLDEwIEBACiAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm5lY3Rpb247CiAgICAgIElucHV0U3RyZWFtIGlucHV0OwogICAgICBCdWZmZXJlZFJlYWRlciBkYXRhSW5wdXQ7Ci0gCisKICAgICAgdHJ5IHsKICAgICAgICAgY29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICB1cmwgPSAoVVJMKWNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L3VybC9NeVVSTCIpOyAgCisgICAgICAgIHVybCA9IChVUkwpY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvdXJsL015VVJMIik7CiAgICAgICAgIGNvbm5lY3Rpb24gPSAoSHR0cFVSTENvbm5lY3Rpb24pdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIHJlc3BvbnNlQ29kZSA9IGNvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7CiAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNDQsNyArNDQsNyBAQAogICAgICB9CiAKICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSBIdHRwVVJMQ29ubmVjdGlvbi5IVFRQX09LKSB7Ci0gICAgICAgIHRocm93IG5ldyBIVFRQUmVzcG9uc2VFeGNlcHRpb24oIkhUVFAgcmVzcG9uc2UgY29kZTogIiArIAorICAgICAgICB0aHJvdyBuZXcgSFRUUFJlc3BvbnNlRXhjZXB0aW9uKCJIVFRQIHJlc3BvbnNlIGNvZGU6ICIgKwogICAgICAgICAgICBTdHJpbmcudmFsdWVPZihyZXNwb25zZUNvZGUpKTsKICAgICAgfQogCkBAIC01NSw3ICs1NSw3IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGRhdGFJbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQobGluZSk7CiAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIH0gIAorICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvYnVpbGQueG1sCmluZGV4IGUzNjQ2ODEuLmQwMzE0YzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvYnVpbGQueG1sCkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgICAgICAgICBkZWJ1Zz0ib24iIGRlcHJlY2F0aW9uPSJvZmYiIG9wdGltaXplPSJvZmYiPgogICAgICAgICAgICAgPGNsYXNzcGF0aD4KICAgICAgICAgICAgICAgICA8cGF0aCByZWZpZD0iYmFzZS5jbGFzc3BhdGgiIC8+Ci0gIAkgICAgPC9jbGFzc3BhdGg+CisgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YWM+CiAgICAgIDwvdGFyZ2V0PgogCkBAIC04NSw3ICs4NSw3IEBACiA8IS0tICBDcmVhdGUgamFyIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+CiA8IS0tICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgLS0+CiAKLSAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtamFyLWxvY2FsIiBkZXBlbmRzPSJjbGVhbi1qYXJzLWNvbW1vbixjb21waWxlIj4gICAgCisgICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWphci1sb2NhbCIgZGVwZW5kcz0iY2xlYW4tamFycy1jb21tb24sY29tcGlsZSI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuamFyfSIvPgogCiAgICAgICAgIDwhLS0gY29weSBvdmVyIHRoZSBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uIHJlc291cmNlIC0tPgpAQCAtOTUsMTIgKzk1LDEyIEBACiAgICAgICAgIDxjb3B5IHRvZGlyPSIke2Fzc2VtYmxlLmphcn0vTUVUQS1JTkYiCiAgICAgICAgICAgICBmaWxlPSIke3NyYy5kaXJ9L2NvbXBvbmVudHMvdGFnbGliL2NvbXBvbmVudHMudGxkIi8+CiAgICAgICAgIDxjb3B5IHRvZGlyPSIke2Fzc2VtYmxlLmphcn0iPgotIAkgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS8iIGluY2x1ZGVzPSIqKi8qLmNsYXNzIgorICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS8iIGluY2x1ZGVzPSIqKi8qLmNsYXNzIgogICAgICAgICAgICAgICAgICBleGNsdWRlcz0iJHtkZW1vLnBrZ30vKiovKi5jbGFzcyxKU0ZUZXN0LmNsYXNzIi8+CiAgICAgICAgIDwvY29weT4KIAotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuamFyfS8ke2phcn0iIAotCSAgICAgIGJhc2VkaXI9IiR7YXNzZW1ibGUuamFyfSIvPgorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuamFyfS8ke2phcn0iCisgICAgICAgICAgYmFzZWRpcj0iJHthc3NlbWJsZS5qYXJ9Ii8+CiAgICAgIDwvdGFyZ2V0PgogCiA8IS0tICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgLS0+CkBAIC0xMTIsMTAgKzExMiwxMCBAQAogICAgICA8L3RhcmdldD4KIAogICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuLXdhci1sb2NhbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YXNzZW1ibGUud2FyfSIgcXVpZXQ9InRydWUiIC8+ICAKKyAgICAgICAgIDxkZWxldGUgZGlyPSIke2Fzc2VtYmxlLndhcn0iIHF1aWV0PSJ0cnVlIiAvPgogICAgICA8L3RhcmdldD4KIAotICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS13YXItbG9jYWwiIAorICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS13YXItbG9jYWwiCiAgICAgICAgICBkZXBlbmRzPSJjbGVhbi13YXItbG9jYWwsbWtkaXJfd2ViaW5mLGNyZWF0ZS1qYXItbG9jYWwiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iY3JlYXRlIHdhciBmaWxlLiIgPgogCkBAIC0xMjgsNyArMTI4LDcgQEAKIAogICAgICAgICAgPCEtLSBDb3B5IHRoZSBkZW1vIGNsYXNzZXMgb25seS4gQ29tcG9uZW50cyBhcmUgamFycmVkIC0tPgogICAgICAgICAgPGNvcHkgdG9kaXI9IiR7YXNzZW1ibGUud2FyfS9XRUItSU5GL2NsYXNzZXMvIj4KLSAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9LyIgCisgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS8iCiAgICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7ZGVtby5wa2d9LyoqLyouY2xhc3MiLz4KICAgICAgICAgIDwvY29weT4KIApAQCAtMTM3LDM1ICsxMzcsMzUgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtzcmMuZGlyfS9jb21wb25lbnRzIiAvPgogICAgICAgICAgPC9jb3B5PgogICAgICAgICAgPGNvcHkgdG9kaXI9IiR7YXNzZW1ibGUud2FyfS9zcmMvamF2YS9kZW1vIj4KLSAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtzcmMuZGlyfS9kZW1vIiAvPiAgICAKKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtzcmMuZGlyfS9kZW1vIiAvPgogICAgICAgICAgPC9jb3B5PgotICAgICAgICAKKwogICAgICAgICAgPCEtLSBDb3B5IGRlc2NyaXB0b3IgLS0+Ci0gICAgICAgICA8Y29weSB0b2Rpcj0iJHthc3NlbWJsZS53YXJ9L1dFQi1JTkYiPiAKKyAgICAgICAgIDxjb3B5IHRvZGlyPSIke2Fzc2VtYmxlLndhcn0vV0VCLUlORiI+CiAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iZGVzY3JpcHRvciIvPgogICAgICAgICAgPC9jb3B5PgogCiAgICAgICAgICA8IS0tIENvcHkgZG9jcm9vdCAgIC0tPgogICAgICAgICAgPGNvcHkgdG9kaXI9IiR7YXNzZW1ibGUud2FyfSI+Ci0gICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iZG9jcm9vdCIvPiAKKyAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJkb2Nyb290Ii8+CiAgICAgICAgICA8L2NvcHk+Ci0gICAgCisKICAgICAgICAgIDwhLS0gQ29weSB0aGUganNmY29tcG9uZW50cy5qYXIgZmlsZSB0byB0aGUgYXNzZW1ibGUgYXJlYSAtLT4KLSAgICAgICAgIDxjb3B5IHRvZGlyPSIke2Fzc2VtYmxlLndhcn0vV0VCLUlORi9saWIiIAotICAgICAgICAgCWZpbGU9IiR7YXNzZW1ibGUuamFyfS8ke2phcn0iLz4KKyAgICAgICAgIDxjb3B5IHRvZGlyPSIke2Fzc2VtYmxlLndhcn0vV0VCLUlORi9saWIiCisgICAgICAgICAgICAgZmlsZT0iJHthc3NlbWJsZS5qYXJ9LyR7amFyfSIvPgogCiAgICAgICAgICA8IS0tIENyZWF0ZSB3YXIgZmlsZSAtLT4KICAgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7d2FyfSIKICAgICAgICAgICAgICAgYmFzZWRpcj0iJHthc3NlbWJsZS53YXJ9IiAvPgogCi0gICAgIDwvdGFyZ2V0PiAgIAorICAgICA8L3RhcmdldD4KIAogPCEtLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIC0tPgogPCEtLSAgYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgogPCEtLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIC0tPgogCiAgICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNyZWF0ZS13YXItbG9jYWwiPgotICAgICA8L3RhcmdldD4gCisgICAgIDwvdGFyZ2V0PgogCiA8IS0tICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgLS0+CiA8IS0tICBzZXR1cC91bnNldHVwIChkdW1teSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+CkBAIC0xODMsMTEgKzE4MywxMSBAQAogCiAgICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KLSAgICAgPC90YXJnZXQ+ICAgIAorICAgICA8L3RhcmdldD4KIAogICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgICA8L3RhcmdldD4gICAKKyAgICAgPC90YXJnZXQ+CiAKIAogPCEtLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIC0tPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9kZXNjcmlwdG9yL2ZhY2VzLWNvbmZpZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL2Rlc2NyaXB0b3IvZmFjZXMtY29uZmlnLnhtbAppbmRleCBlOTRkOTk2Li5jNjRjMDY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL2Rlc2NyaXB0b3IvZmFjZXMtY29uZmlnLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL2Rlc2NyaXB0b3IvZmFjZXMtY29uZmlnLnhtbApAQCAtMzQsOCArMzQsOCBAQAogCiAgIDxtYW5hZ2VkLWJlYW4+CiAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgQ2F1c2VzIHRoZSBkZWZhdWx0IFZhcmlhYmxlUmVzb2x2ZXIgaW1wbGVtZW50YXRpb24gdG8gaW5zdGFudGlhdGUgdGhlIAotICAgICAgbWFuYWdlZCBiZWFuLCBOQSBvZiB0aGUgY2xhc3MsIGNvbXBvbmVudHMubW9kZWwuSW1hZ2VBcmVhIGluIGFwcGxpY2F0aW9uIAorICAgICAgQ2F1c2VzIHRoZSBkZWZhdWx0IFZhcmlhYmxlUmVzb2x2ZXIgaW1wbGVtZW50YXRpb24gdG8gaW5zdGFudGlhdGUgdGhlCisgICAgICBtYW5hZ2VkIGJlYW4sIE5BIG9mIHRoZSBjbGFzcywgY29tcG9uZW50cy5tb2RlbC5JbWFnZUFyZWEgaW4gYXBwbGljYXRpb24KICAgICAgIHNjb3BlIGlmIHRoZSBiZWFuIGRvZXMgbm90IGFscmVhZHkgZXhpc3QgaW4gYW55IHNjb3BlIGFuZCBpbml0aWFsaXplIHRoZQogICAgICAgc2hhcGUsIGFsdCwgYW5kIGNvb3JkcyBwcm9wZXJ0aWVzIHdpdGggdGhlIHZhbHVlcyBzcGVjaWZpZWQgYnkgdGhlCiAgICAgICBtYW5hZ2VkLXByb3BlcnR5IGVsZW1lbnRzLgpAQCAtNDUsNyArNDUsNyBAQAogICAgIDxtYW5hZ2VkLWJlYW4tc2NvcGU+IGFwcGxpY2F0aW9uIDwvbWFuYWdlZC1iZWFuLXNjb3BlPgogICAgIDxtYW5hZ2VkLXByb3BlcnR5PgogICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICBJbml0aWFsaXplcyB0aGUgc2hhcGUgcHJvcGVydHkgb2YgdGhlIG1hbmFnZWQgYmVhbiwgTkEgd2l0aCB0aGUgdmFsdWUsIAorICAgICAgICBJbml0aWFsaXplcyB0aGUgc2hhcGUgcHJvcGVydHkgb2YgdGhlIG1hbmFnZWQgYmVhbiwgTkEgd2l0aCB0aGUgdmFsdWUsCiAgICAgICAgIHBvbHkuCiAgICAgICA8L2Rlc2NyaXB0aW9uPgogICAgICAgPHByb3BlcnR5LW5hbWU+c2hhcGU8L3Byb3BlcnR5LW5hbWU+CkBAIC01Myw3ICs1Myw3IEBACiAgICAgPC9tYW5hZ2VkLXByb3BlcnR5PgogICAgIDxtYW5hZ2VkLXByb3BlcnR5PgogICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICBJbml0aWFsaXplcyB0aGUgYWx0IHByb3BlcnR5IG9mIHRoZSBtYW5hZ2VkIGJlYW4sIE5BIHdpdGggdGhlIHZhbHVlLCAKKyAgICAgICAgSW5pdGlhbGl6ZXMgdGhlIGFsdCBwcm9wZXJ0eSBvZiB0aGUgbWFuYWdlZCBiZWFuLCBOQSB3aXRoIHRoZSB2YWx1ZSwKICAgICAgICAgTkFtZXJpY2EuCiAgICAgICA8L2Rlc2NyaXB0aW9uPgogICAgICAgPHByb3BlcnR5LW5hbWU+YWx0PC9wcm9wZXJ0eS1uYW1lPgpAQCAtNjEsNyArNjEsNyBAQAogICAgIDwvbWFuYWdlZC1wcm9wZXJ0eT4KICAgICA8bWFuYWdlZC1wcm9wZXJ0eT4KICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgSW5pdGlhbGl6ZXMgdGhlIGNvb3JkcyBwcm9wZXJ0eSBvZiB0aGUgbWFuYWdlZCBiZWFuLCBOQSB3aXRoIHRoZSB2YWx1ZSAKKyAgICAgICAgSW5pdGlhbGl6ZXMgdGhlIGNvb3JkcyBwcm9wZXJ0eSBvZiB0aGUgbWFuYWdlZCBiZWFuLCBOQSB3aXRoIHRoZSB2YWx1ZQogICAgICAgICBzcGVjaWZpZWQgYnkgdGhlIHZhbHVlIGVsZW1lbnQuCiAgICAgICA8L2Rlc2NyaXB0aW9uPgogICAgICAgPHByb3BlcnR5LW5hbWU+Y29vcmRzPC9wcm9wZXJ0eS1uYW1lPgpAQCAtNzMsOCArNzMsOCBAQAogCiAgIDxtYW5hZ2VkLWJlYW4+CiAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgIENhdXNlcyB0aGUgZGVmYXVsdCBWYXJpYWJsZVJlc29sdmVyIGltcGxlbWVudGF0aW9uIHRvIGluc3RhbnRpYXRlIHRoZSAKLSAgICAgIG1hbmFnZWQgYmVhbiwgU0Egb2YgdGhlIGNsYXNzLCBjb21wb25lbnRzLm1vZGVsLkltYWdlQXJlYSBpbiBhcHBsaWNhdGlvbiAKKyAgICAgIENhdXNlcyB0aGUgZGVmYXVsdCBWYXJpYWJsZVJlc29sdmVyIGltcGxlbWVudGF0aW9uIHRvIGluc3RhbnRpYXRlIHRoZQorICAgICAgbWFuYWdlZCBiZWFuLCBTQSBvZiB0aGUgY2xhc3MsIGNvbXBvbmVudHMubW9kZWwuSW1hZ2VBcmVhIGluIGFwcGxpY2F0aW9uCiAgICAgICBzY29wZSBpZiB0aGUgYmVhbiBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0IGluIGFueSBzY29wZSBhbmQgaW5pdGlhbGl6ZSB0aGUKICAgICAgIHNoYXBlLCBhbHQsIGFuZCBjb29yZHMgcHJvcGVydGllcyB3aXRoIHRoZSB2YWx1ZXMgc3BlY2lmaWVkIGJ5IHRoZQogICAgICAgbWFuYWdlZC1wcm9wZXJ0eSBlbGVtZW50cy4KQEAgLTg0LDcgKzg0LDcgQEAKICAgICA8bWFuYWdlZC1iZWFuLXNjb3BlPmFwcGxpY2F0aW9uPC9tYW5hZ2VkLWJlYW4tc2NvcGU+CiAgICAgPG1hbmFnZWQtcHJvcGVydHk+CiAgICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgIEluaXRpYWxpemVzIHRoZSBzaGFwZSBwcm9wZXJ0eSBvZiB0aGUgbWFuYWdlZCBiZWFuLCBTQSB3aXRoIHRoZSB2YWx1ZSAKKyAgICAgICAgSW5pdGlhbGl6ZXMgdGhlIHNoYXBlIHByb3BlcnR5IG9mIHRoZSBtYW5hZ2VkIGJlYW4sIFNBIHdpdGggdGhlIHZhbHVlCiAgICAgICAgIHBvbHkuCiAgICAgICA8L2Rlc2NyaXB0aW9uPgogICAgICAgPHByb3BlcnR5LW5hbWU+c2hhcGU8L3Byb3BlcnR5LW5hbWU+CkBAIC05Miw3ICs5Miw3IEBACiAgICAgPC9tYW5hZ2VkLXByb3BlcnR5PgogICAgIDxtYW5hZ2VkLXByb3BlcnR5PgogICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICBJbml0aWFsaXplcyB0aGUgYWx0IHByb3BlcnR5IG9mIHRoZSBtYW5hZ2VkIGJlYW4sIFNBIHdpdGggdGhlIHZhbHVlIAorICAgICAgICBJbml0aWFsaXplcyB0aGUgYWx0IHByb3BlcnR5IG9mIHRoZSBtYW5hZ2VkIGJlYW4sIFNBIHdpdGggdGhlIHZhbHVlCiAgICAgICAgIFNBbWVyaWNhLgogICAgICAgPC9kZXNjcmlwdGlvbj4KICAgICAgIDxwcm9wZXJ0eS1uYW1lPmFsdDwvcHJvcGVydHktbmFtZT4KQEAgLTEwMCw3ICsxMDAsNyBAQAogICAgIDwvbWFuYWdlZC1wcm9wZXJ0eT4KICAgICA8bWFuYWdlZC1wcm9wZXJ0eT4KICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgSW5pdGlhbGl6ZXMgdGhlIGNvb3JkcyBwcm9wZXJ0eSBvZiB0aGUgbWFuYWdlZCBiZWFuLCBTQSB3aXRoIHRoZSB2YWx1ZSAKKyAgICAgICAgSW5pdGlhbGl6ZXMgdGhlIGNvb3JkcyBwcm9wZXJ0eSBvZiB0aGUgbWFuYWdlZCBiZWFuLCBTQSB3aXRoIHRoZSB2YWx1ZQogICAgICAgICBzcGVjaWZpZWQgYnkgdGhlIHZhbHVlIGVsZW1lbnQuCiAgICAgICA8L2Rlc2NyaXB0aW9uPgogICAgICAgPHByb3BlcnR5LW5hbWU+Y29vcmRzPC9wcm9wZXJ0eS1uYW1lPgpAQCAtMTEyLDggKzExMiw4IEBACiAKICAgPG1hbmFnZWQtYmVhbj4KICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgQ2F1c2VzIHRoZSBkZWZhdWx0IFZhcmlhYmxlUmVzb2x2ZXIgaW1wbGVtZW50YXRpb24gdG8gaW5zdGFudGlhdGUgdGhlIAotICAgICAgbWFuYWdlZCBiZWFuLCBmaW5BIG9mIHRoZSBjbGFzcywgY29tcG9uZW50cy5tb2RlbC5JbWFnZUFyZWEgaW4gYXBwbGljYXRpb24gCisgICAgICBDYXVzZXMgdGhlIGRlZmF1bHQgVmFyaWFibGVSZXNvbHZlciBpbXBsZW1lbnRhdGlvbiB0byBpbnN0YW50aWF0ZSB0aGUKKyAgICAgIG1hbmFnZWQgYmVhbiwgZmluQSBvZiB0aGUgY2xhc3MsIGNvbXBvbmVudHMubW9kZWwuSW1hZ2VBcmVhIGluIGFwcGxpY2F0aW9uCiAgICAgICBzY29wZSBpZiB0aGUgYmVhbiBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0IGluIGFueSBzY29wZSBhbmQgaW5pdGlhbGl6ZSB0aGUKICAgICAgIHNoYXBlLCBhbHQsIGFuZCBjb29yZHMgcHJvcGVydGllcyB3aXRoIHRoZSB2YWx1ZXMgc3BlY2lmaWVkIGJ5IHRoZQogICAgICAgbWFuYWdlZC1wcm9wZXJ0eSBlbGVtZW50cy4KQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgIDxtYW5hZ2VkLWJlYW4tc2NvcGU+YXBwbGljYXRpb248L21hbmFnZWQtYmVhbi1zY29wZT4KICAgICA8bWFuYWdlZC1wcm9wZXJ0eT4KICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgSW5pdGlhbGl6ZXMgdGhlIHNoYXBlIHByb3BlcnR5IG9mIHRoZSBtYW5hZ2VkIGJlYW4sIGZpbkEgd2l0aCB0aGUgdmFsdWUgCisgICAgICAgIEluaXRpYWxpemVzIHRoZSBzaGFwZSBwcm9wZXJ0eSBvZiB0aGUgbWFuYWdlZCBiZWFuLCBmaW5BIHdpdGggdGhlIHZhbHVlCiAgICAgICAgIHBvbHkuCiAgICAgICA8L2Rlc2NyaXB0aW9uPgogICAgICAgPHByb3BlcnR5LW5hbWU+c2hhcGU8L3Byb3BlcnR5LW5hbWU+CkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICA8L21hbmFnZWQtcHJvcGVydHk+CiAgICAgPG1hbmFnZWQtcHJvcGVydHk+CiAgICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgIEluaXRpYWxpemVzIHRoZSBhbHQgcHJvcGVydHkgb2YgdGhlIG1hbmFnZWQgYmVhbiwgZmluQSB3aXRoIHRoZSB2YWx1ZSAKKyAgICAgICAgSW5pdGlhbGl6ZXMgdGhlIGFsdCBwcm9wZXJ0eSBvZiB0aGUgbWFuYWdlZCBiZWFuLCBmaW5BIHdpdGggdGhlIHZhbHVlCiAgICAgICAgIEZpbmxhbmQuCiAgICAgICA8L2Rlc2NyaXB0aW9uPgogICAgICAgPHByb3BlcnR5LW5hbWU+YWx0PC9wcm9wZXJ0eS1uYW1lPgpAQCAtMTM5LDcgKzEzOSw3IEBACiAgICAgPC9tYW5hZ2VkLXByb3BlcnR5PgogICAgIDxtYW5hZ2VkLXByb3BlcnR5PgogICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICBJbml0aWFsaXplcyB0aGUgY29vcmRzIHByb3BlcnR5IG9mIHRoZSBtYW5hZ2VkIGJlYW4sIGZpbkEgd2l0aCB0aGUgdmFsdWUgCisgICAgICAgIEluaXRpYWxpemVzIHRoZSBjb29yZHMgcHJvcGVydHkgb2YgdGhlIG1hbmFnZWQgYmVhbiwgZmluQSB3aXRoIHRoZSB2YWx1ZQogICAgICAgICBzcGVjaWZpZWQgYnkgdGhlIHZhbHVlIGVsZW1lbnQuCiAgICAgICA8L2Rlc2NyaXB0aW9uPgogICAgICAgPHByb3BlcnR5LW5hbWU+Y29vcmRzPC9wcm9wZXJ0eS1uYW1lPgpAQCAtMTUxLDggKzE1MSw4IEBACiAKICAgPG1hbmFnZWQtYmVhbj4KICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgQ2F1c2VzIHRoZSBkZWZhdWx0IFZhcmlhYmxlUmVzb2x2ZXIgaW1wbGVtZW50YXRpb24gdG8gaW5zdGFudGlhdGUgdGhlIAotICAgICAgbWFuYWdlZCBiZWFuLCBnZXJBIG9mIHRoZSBjbGFzcywgY29tcG9uZW50cy5tb2RlbC5JbWFnZUFyZWEgaW4gYXBwbGljYXRpb24gCisgICAgICBDYXVzZXMgdGhlIGRlZmF1bHQgVmFyaWFibGVSZXNvbHZlciBpbXBsZW1lbnRhdGlvbiB0byBpbnN0YW50aWF0ZSB0aGUKKyAgICAgIG1hbmFnZWQgYmVhbiwgZ2VyQSBvZiB0aGUgY2xhc3MsIGNvbXBvbmVudHMubW9kZWwuSW1hZ2VBcmVhIGluIGFwcGxpY2F0aW9uCiAgICAgICBzY29wZSBpZiB0aGUgYmVhbiBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0IGluIGFueSBzY29wZSBhbmQgaW5pdGlhbGl6ZSB0aGUKICAgICAgIHNoYXBlLCBhbHQsIGFuZCBjb29yZHMgcHJvcGVydGllcyB3aXRoIHRoZSB2YWx1ZXMgc3BlY2lmaWVkIGJ5IHRoZQogICAgICAgbWFuYWdlZC1wcm9wZXJ0eSBlbGVtZW50cy4KQEAgLTE2Miw3ICsxNjIsNyBAQAogICAgIDxtYW5hZ2VkLWJlYW4tc2NvcGU+IGFwcGxpY2F0aW9uIDwvbWFuYWdlZC1iZWFuLXNjb3BlPgogICAgIDxtYW5hZ2VkLXByb3BlcnR5PgogICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICBJbml0aWFsaXplcyB0aGUgc2hhcGUgcHJvcGVydHkgb2YgdGhlIG1hbmFnZWQgYmVhbiwgZ2VyQSB3aXRoIHRoZSB2YWx1ZSAKKyAgICAgICAgSW5pdGlhbGl6ZXMgdGhlIHNoYXBlIHByb3BlcnR5IG9mIHRoZSBtYW5hZ2VkIGJlYW4sIGdlckEgd2l0aCB0aGUgdmFsdWUKICAgICAgICAgcG9seS4KICAgICAgIDwvZGVzY3JpcHRpb24+CiAgICAgICA8cHJvcGVydHktbmFtZT5zaGFwZTwvcHJvcGVydHktbmFtZT4KQEAgLTE3MCw3ICsxNzAsNyBAQAogICAgIDwvbWFuYWdlZC1wcm9wZXJ0eT4KICAgICA8bWFuYWdlZC1wcm9wZXJ0eT4KICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgSW5pdGlhbGl6ZXMgdGhlIGFsdCBwcm9wZXJ0eSBvZiB0aGUgbWFuYWdlZCBiZWFuLCBnZXJBIHdpdGggdGhlIHZhbHVlIAorICAgICAgICBJbml0aWFsaXplcyB0aGUgYWx0IHByb3BlcnR5IG9mIHRoZSBtYW5hZ2VkIGJlYW4sIGdlckEgd2l0aCB0aGUgdmFsdWUKICAgICAgICAgR2VybWFueS4KICAgICAgIDwvZGVzY3JpcHRpb24+CiAgICAgICA8cHJvcGVydHktbmFtZT5hbHQ8L3Byb3BlcnR5LW5hbWU+CkBAIC0xNzgsNyArMTc4LDcgQEAKICAgICA8L21hbmFnZWQtcHJvcGVydHk+CiAgICAgPG1hbmFnZWQtcHJvcGVydHk+CiAgICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgIEluaXRpYWxpemVzIHRoZSBjb29yZHMgcHJvcGVydHkgb2YgdGhlIG1hbmFnZWQgYmVhbiwgZ2VyQSB3aXRoIHRoZSB2YWx1ZSAKKyAgICAgICAgSW5pdGlhbGl6ZXMgdGhlIGNvb3JkcyBwcm9wZXJ0eSBvZiB0aGUgbWFuYWdlZCBiZWFuLCBnZXJBIHdpdGggdGhlIHZhbHVlCiAgICAgICAgIHNwZWNpZmllZCBieSB0aGUgdmFsdWUgZWxlbWVudC4KICAgICAgIDwvZGVzY3JpcHRpb24+CiAgICAgICA8cHJvcGVydHktbmFtZT5jb29yZHM8L3Byb3BlcnR5LW5hbWU+CkBAIC0xOTAsOCArMTkwLDggQEAKIAogICA8bWFuYWdlZC1iZWFuPgogICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICBDYXVzZXMgdGhlIGRlZmF1bHQgVmFyaWFibGVSZXNvbHZlciBpbXBsZW1lbnRhdGlvbiB0byBpbnN0YW50aWF0ZSB0aGUgCi0gICAgICBtYW5hZ2VkIGJlYW4sIGZyYUEgb2YgdGhlIGNsYXNzLCBjb21wb25lbnRzLm1vZGVsLkltYWdlQXJlYSBpbiBhcHBsaWNhdGlvbiAKKyAgICAgIENhdXNlcyB0aGUgZGVmYXVsdCBWYXJpYWJsZVJlc29sdmVyIGltcGxlbWVudGF0aW9uIHRvIGluc3RhbnRpYXRlIHRoZQorICAgICAgbWFuYWdlZCBiZWFuLCBmcmFBIG9mIHRoZSBjbGFzcywgY29tcG9uZW50cy5tb2RlbC5JbWFnZUFyZWEgaW4gYXBwbGljYXRpb24KICAgICAgIHNjb3BlIGlmIHRoZSBiZWFuIGRvZXMgbm90IGFscmVhZHkgZXhpc3QgaW4gYW55IHNjb3BlIGFuZCBpbml0aWFsaXplIHRoZQogICAgICAgc2hhcGUsIGFsdCwgYW5kIGNvb3JkcyBwcm9wZXJ0aWVzIHdpdGggdGhlIHZhbHVlcyBzcGVjaWZpZWQgYnkgdGhlCiAgICAgICBtYW5hZ2VkLXByb3BlcnR5IGVsZW1lbnRzLgpAQCAtMjAxLDcgKzIwMSw3IEBACiAgICAgPG1hbmFnZWQtYmVhbi1zY29wZT4gYXBwbGljYXRpb24gPC9tYW5hZ2VkLWJlYW4tc2NvcGU+CiAgICAgPG1hbmFnZWQtcHJvcGVydHk+CiAgICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgIEluaXRpYWxpemVzIHRoZSBzaGFwZSBwcm9wZXJ0eSBvZiB0aGUgbWFuYWdlZCBiZWFuLCBmcmFBIHdpdGggdGhlIHZhbHVlIAorICAgICAgICBJbml0aWFsaXplcyB0aGUgc2hhcGUgcHJvcGVydHkgb2YgdGhlIG1hbmFnZWQgYmVhbiwgZnJhQSB3aXRoIHRoZSB2YWx1ZQogICAgICAgICBwb2x5LgogICAgICAgPC9kZXNjcmlwdGlvbj4KICAgICAgIDxwcm9wZXJ0eS1uYW1lPnNoYXBlPC9wcm9wZXJ0eS1uYW1lPgpAQCAtMjA5LDcgKzIwOSw3IEBACiAgICAgPC9tYW5hZ2VkLXByb3BlcnR5PgogICAgIDxtYW5hZ2VkLXByb3BlcnR5PgogICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICBJbml0aWFsaXplcyB0aGUgYWx0IHByb3BlcnR5IG9mIHRoZSBtYW5hZ2VkIGJlYW4sIGZyYUEgd2l0aCB0aGUgdmFsdWUgCisgICAgICAgIEluaXRpYWxpemVzIHRoZSBhbHQgcHJvcGVydHkgb2YgdGhlIG1hbmFnZWQgYmVhbiwgZnJhQSB3aXRoIHRoZSB2YWx1ZQogICAgICAgICBGcmFuY2UuCiAgICAgICA8L2Rlc2NyaXB0aW9uPgogICAgICAgPHByb3BlcnR5LW5hbWU+YWx0PC9wcm9wZXJ0eS1uYW1lPgpAQCAtMjE3LDcgKzIxNyw3IEBACiAgICAgPC9tYW5hZ2VkLXByb3BlcnR5PgogICAgIDxtYW5hZ2VkLXByb3BlcnR5PgogICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICBJbml0aWFsaXplcyB0aGUgY29vcmRzIHByb3BlcnR5IG9mIHRoZSBtYW5hZ2VkIGJlYW4sIGZyYUEgd2l0aCB0aGUgdmFsdWUgCisgICAgICAgIEluaXRpYWxpemVzIHRoZSBjb29yZHMgcHJvcGVydHkgb2YgdGhlIG1hbmFnZWQgYmVhbiwgZnJhQSB3aXRoIHRoZSB2YWx1ZQogICAgICAgICBzcGVjaWZpZWQgYnkgdGhlIHZhbHVlIGVsZW1lbnQuCiAgICAgICA8L2Rlc2NyaXB0aW9uPgogICAgICAgPHByb3BlcnR5LW5hbWU+Y29vcmRzPC9wcm9wZXJ0eS1uYW1lPgpAQCAtMjI2LDcgKzIyNiw3IEBACiAgICAgICA8L3ZhbHVlPgogICAgIDwvbWFuYWdlZC1wcm9wZXJ0eT4KICAgPC9tYW5hZ2VkLWJlYW4+Ci0gIAorCiAgIDxtYW5hZ2VkLWJlYW4+CiAgICAgPG1hbmFnZWQtYmVhbi1uYW1lPlJlcGVhdGVyQmVhbjwvbWFuYWdlZC1iZWFuLW5hbWU+CiAgICAgPG1hbmFnZWQtYmVhbi1jbGFzcz5kZW1vLm1vZGVsLlJlcGVhdGVyQmVhbjwvbWFuYWdlZC1iZWFuLWNsYXNzPgpAQCAtMjM4LDEyICsyMzgsMTIgQEAKICAgICA8bWFuYWdlZC1iZWFuLWNsYXNzPmRlbW8ubW9kZWwuUmVzdWx0U2V0QmVhbjwvbWFuYWdlZC1iZWFuLWNsYXNzPgogICAgIDxtYW5hZ2VkLWJlYW4tc2NvcGU+c2Vzc2lvbjwvbWFuYWdlZC1iZWFuLXNjb3BlPgogICA8L21hbmFnZWQtYmVhbj4KLSAgCisKICAgPG1hbmFnZWQtYmVhbj4KICAgICA8bWFuYWdlZC1iZWFuLW5hbWU+R3JhcGhCZWFuPC9tYW5hZ2VkLWJlYW4tbmFtZT4KICAgICA8bWFuYWdlZC1iZWFuLWNsYXNzPmRlbW8ubW9kZWwuR3JhcGhCZWFuPC9tYW5hZ2VkLWJlYW4tY2xhc3M+CiAgICAgPG1hbmFnZWQtYmVhbi1zY29wZT5zZXNzaW9uPC9tYW5hZ2VkLWJlYW4tc2NvcGU+Ci0gIDwvbWFuYWdlZC1iZWFuPiAgCisgIDwvbWFuYWdlZC1iZWFuPgogCiAgIDxtYW5hZ2VkLWJlYW4+CiAgICAgPG1hbmFnZWQtYmVhbi1uYW1lPkNoYXJ0QmVhbjwvbWFuYWdlZC1iZWFuLW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDIyZjBkZTcuLjcyOGRhYmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvZGVzY3JpcHRvci93ZWIueG1sCkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmpha2FydGEuZmFjZXMud2ViYXBwLkZhY2VzU2VydmxldDwvc2VydmxldC1jbGFzcz4KICAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4gMSA8L2xvYWQtb24tc3RhcnR1cD4KICAgICA8L3NlcnZsZXQ+Ci0gICAgCisKICAgICA8IS0tIENoYXJ0IFNlcnZsZXQgLS0+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2hhcnRTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CkBAIC05MSwxNCArOTEsMTQgQEAKICAgICAgICAgPHNlcnZsZXQtbmFtZT5GYWNlcyBTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vZmFjZXMvKjwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPkNoYXJ0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L0NoYXJ0U2VydmxldDwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKIAotICAgIAorCiAKICAgICA8IS0tIFdlbGNvbWUgRmlsZSBMaXN0IC0tPgogICAgIDx3ZWxjb21lLWZpbGUtbGlzdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL0pTRlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL0pTRlRlc3QuamF2YQppbmRleCA5ZGFhMWQ1Li5kZjg2ODlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9KU0ZUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvSlNGVGVzdC5qYXZhCkBAIC0zMSwxMSArMzEsMTEgQEAKICAgICBwcml2YXRlIGludCBmYWlsID0gMDsKICAgICBwcml2YXRlIGludCB0b3RhbCA9IDM7CiAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgREVCVUcgPSAwOwotICAgIHByaXZhdGUgU3RyaW5nW11bXSBzdW1tYXJ5ID0gCisgICAgcHJpdmF0ZSBTdHJpbmdbXVtdIHN1bW1hcnkgPQogICAgIHt7IkluZGV4IFBhZ2UgVGVzdCAgIDogIiwgIiJ9LAogICAgICB7Ik1lbnUgUGFnZSBUZXN0ICAgIDogIiwgIiJ9LAogICAgICB7IlJlcGVhdGVyIFBhZ2UgVGVzdDogIiwgIiJ9fTsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmcgYXJnc1tdICkgewogCiAgICAgICAgIHRyeSB7CkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBKU0ZUZXN0KFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBzZXJ2ZXJob3N0ID0gYXJnc1swXTsKICAgICAgICAgc2VydmVycG9ydCA9IGFyZ3NbMV07CkBAIC02MCwyNyArNjAsMjcgQEAKICAgICAgICAgc3IgPSBuZXcgV2ViQ29udmVyc2F0aW9uKCApOwogICAgICAgICBzdGF0dXMgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAgICAgICAgIHN0YXR1cy5hZGREZXNjcmlwdGlvbigiVGVzdGluZyBKU0YuLi4iKTsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgcnVuVGVzdCgpIHsKICAgICAgICAgSHR0cFVuaXRPcHRpb25zLnNldFNjcmlwdGluZ0VuYWJsZWQoZmFsc2UpOwogICAgICAgICB0ZXN0SW5kZXhQYWdlKCk7CiAgICAgICAgIHRlc3RNYW51UGFnZSgpOwogICAgICAgICB0ZXN0UmVwZWF0ZXJQYWdlKCk7CiAgICAgICAgIHByaW50U3VtbWFyeSgpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB0ZXN0SW5kZXhQYWdlKCkgIHsKICAgICAgICAgU3RyaW5nIHBhZ2UgPSAiIjsKICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gIkpTRi1pbmRleFBhZ2UiOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgV2ViUmVzcG9uc2UgY2xpZW50ID0gc3IuZ2V0UmVzcG9uc2UoVVJMK3BhZ2UpOwogICAgICAgICAgICAgLy8gY2xpZW50ID0gc3IuZ2V0UmVzcG9uc2UoVVJMK3BhZ2UpOwogICAgICAgICAgICAgU3RyaW5nIHMgPSBjbGllbnQgIT0gbnVsbCA/IGNsaWVudC5nZXRUZXh0KCkgOiBudWxsOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKHMgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGlmKChzLmluZGV4T2YoIkNvbXBvbmVudCBDb250ZW50IikgPj0gMCkgJiYgKHMuaW5kZXhPZigiZXhlY3V0ZS5naWYiKSA+PSAwKSkgewogICAgICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKHRlc3ROYW1lLCBzdGF0dXMuUEFTUyk7CkBAIC0xMDIsMTggKzEwMiwxOCBAQAogICAgICAgICAgICAgZmFpbCsrOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgdGVzdE1hbnVQYWdlKCkgIHsKICAgICAgICAgU3RyaW5nIHBhZ2UgPSAibWVudS5mYWNlcyI7CiAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9ICJKU0YtbWVudVBhZ2UiOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgV2ViUmVzcG9uc2UgY2xpZW50ID0gc3IuZ2V0UmVzcG9uc2UoVVJMK3BhZ2UpOwogICAgICAgICAgICAgLy8gY2xpZW50ID0gc3IuZ2V0UmVzcG9uc2UoVVJMK3BhZ2UpOwogICAgICAgICAgICAgU3RyaW5nIHMgPSBjbGllbnQgIT0gbnVsbCA/IGNsaWVudC5nZXRUZXh0KCkgOiBudWxsOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKHMgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGlmKChzLmluZGV4T2YoIm1lbnUyIikgPj0gMCkgJiYgKHMuaW5kZXhPZigiQ2xvc2UgMiIpID49IDApKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdE5hbWUsIHN0YXR1cy5QQVNTKTsKQEAgLTEzNSwxNyArMTM1LDE3IEBACiAgICAgICAgICAgICBmYWlsKys7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCB0ZXN0UmVwZWF0ZXJQYWdlKCkgIHsKICAgICAgICAgU3RyaW5nIHBhZ2UgPSAicmVwZWF0ZXIuZmFjZXMiOwogICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSAiSlNGLXJlcGVhdGVyUGFnZSI7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBXZWJSZXNwb25zZSBjbGllbnQgPSBzci5nZXRSZXNwb25zZShVUkwrcGFnZSk7CiAgICAgICAgICAgICBTdHJpbmcgcyA9IGNsaWVudCAhPSBudWxsID8gY2xpZW50LmdldFRleHQoKSA6IG51bGw7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYocyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgaWYoKHMuaW5kZXhPZigidXBkYXRlIikgPj0gMCkgJiYgKHMuaW5kZXhPZigiU2F2ZSBDaGFuZ2VzIikgPj0gMCkpIHsKICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0TmFtZSwgc3RhdHVzLlBBU1MpOwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAgICAgICAgICAgICBmYWlsKys7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBwcmludFN1bW1hcnkoKSB7CkBAIC0xODMsNSArMTgzLDUgQEAKICAgICAgICAgfQogICAgICAgICBzdGF0dXMucHJpbnRTdW1tYXJ5KCJKU0ZUZXN0SUQiKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvY29tcG9uZW50cy9DaGFydENvbXBvbmVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9jb21wb25lbnRzL0NoYXJ0Q29tcG9uZW50LmphdmEKaW5kZXggZDFkMGJhYS4uMWQ3NmVkYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9jb21wb25lbnRzL0NoYXJ0Q29tcG9uZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9jb21wb25lbnRzL0NoYXJ0Q29tcG9uZW50LmphdmEKQEAgLTQ3LDEyICs0NywxMiBAQAogICAgICAqIDxwPlRoZSBzdGFuZGFyZCBjb21wb25lbnQgZmFtaWx5IGZvciB0aGlzIGNvbXBvbmVudC48L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09NUE9ORU5UX0ZBTUlMWSA9ICJDaGFydCI7Ci0gICAgCisKICAgICAvKioKICAgICAgKiA8cD5OYW1lIG9mIHRoZSBzZXJ2bGV0IHRoYXQgcmVuZGVycyB0aGUgaW1hZ2UuPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENIQVJUX1NFUlZMRVRfTkFNRSA9ICJDaGFydFNlcnZsZXQiOwotICAgIAorCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEluc3RhbmNlIFZhcmlhYmxlcwogICAgIHByaXZhdGUgU3RyaW5nIHdpZHRoID0gbnVsbDsKICAgICBwcml2YXRlIFN0cmluZyBoZWlnaHQgPSBudWxsOwpAQCAtNjEsMTUgKzYxLDE1IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgdGl0bGUgPSBudWxsOwogICAgIHByaXZhdGUgU3RyaW5nIHhsYWJlbCA9IG51bGw7CiAgICAgcHJpdmF0ZSBTdHJpbmcgeWxhYmVsID0gbnVsbDsKLSAgICAKLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUNvbnN0cnVjdG9ycyAKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tQ29uc3RydWN0b3JzCiAKICAgICBwdWJsaWMgQ2hhcnRDb21wb25lbnQoKSB7CiAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgIHNldFJlbmRlcmVyVHlwZShudWxsKTsKICAgICB9CiAKLSAgICAKKwogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByb3BlcnRpZXMKICAgICAvKioKICAgICAgKiA8cD5SZXR1cm4gdGhlIHdpZHRoIG9mIHRoZSBjaGFydApAQCAtOTQsOSArOTQsOSBAQAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFdpZHRoKFN0cmluZyB3aWR0aCkgewogICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogPHA+UmV0dXJuIHRoZSBoZWlnaHQgb2YgdGhlIGNoYXJ0CiAgICAgICovCkBAIC0xMjEsNyArMTIxLDcgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRIZWlnaHQoU3RyaW5nIGhlaWdodCkgewogICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiA8cD5SZXR1cm4gdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBjaGFydAogICAgICAqLwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAgICAgcHVibGljIHZvaWQgc2V0T3JpZW50YXRpb24oU3RyaW5nIG9yaWVudGF0aW9uKSB7CiAgICAgICAgIHRoaXMub3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiA8cD5SZXR1cm4gdGhlIHR5cGUgb2YgdGhlIGNoYXJ0CiAgICAgICovCkBAIC0yNTIsNyArMjUyLDcgQEAKICAgICAgICAgcmV0dXJuIChDT01QT05FTlRfRkFNSUxZKTsKIAogICAgIH0KLSAgIAorCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3RhdGVIb2xkZXIgTWV0aG9kcwogICAgIC8qKgogICAgICAqIDxwPlJldHVybiB0aGUgc3RhdGUgdG8gYmUgc2F2ZWQgZm9yIHRoaXMgY29tcG9uZW50LgpAQCAtMjkyLDExICsyOTIsMTEgQEAKICAgICAgICAgeGxhYmVsID0gKFN0cmluZykgdmFsdWVzWzZdOwogICAgICAgICB5bGFiZWwgPSAoU3RyaW5nKSB2YWx1ZXNbN107CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZW5jb2RlRW5kKEZhY2VzQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgICBwbGFjZUNoYXJ0RGF0YUluU2NvcGUoY29udGV4dCk7Ci0gICAgICAgIC8vIHJlbmRlciBhbiBpbWFnZSB0aGF0IHdvdWxkIGluaXRpYXRlIGEgcmVxdWVzdCB0byBhIFVSTCBwb2ludGluZyAKLSAgICAgICAgLy8gYmFjayBpbnRvIHRoZSB3ZWJhcHAgcGFzc2luZyBpbiB3aGF0ZXZlciBwYXJhbWV0ZXJzIGFyZSBuZWVkZWQgdG8gCisgICAgICAgIC8vIHJlbmRlciBhbiBpbWFnZSB0aGF0IHdvdWxkIGluaXRpYXRlIGEgcmVxdWVzdCB0byBhIFVSTCBwb2ludGluZworICAgICAgICAvLyBiYWNrIGludG8gdGhlIHdlYmFwcCBwYXNzaW5nIGluIHdoYXRldmVyIHBhcmFtZXRlcnMgYXJlIG5lZWRlZCB0bwogICAgICAgICAvLyBjcmVhdGUgdGhlIGR5bmFtaWMgaW1hZ2UuCiAgICAgICAgIFJlc3BvbnNlV3JpdGVyIHdyaXRlciA9IGNvbnRleHQuZ2V0UmVzcG9uc2VXcml0ZXIoKTsKICAgICAgICAgd3JpdGVyLnN0YXJ0RWxlbWVudCgiaW1nIiwgdGhpcyk7CkBAIC0zMDQsOSArMzA0LDkgQEAKICAgICAgICAgd3JpdGVyLndyaXRlQXR0cmlidXRlKCJzcmMiLCBzcmMoY29udGV4dCwgdGhpcyksICJ2YWx1ZSIpOwogICAgICAgICB3cml0ZXIuZW5kRWxlbWVudCgiaW1nIik7CiAgICAgfQotICAgIAorCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJpdmF0ZSBNZXRob2RzCi0gICAgCisKICAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZUlkQXR0cmlidXRlSWZOZWNlc3NhcnkoRmFjZXNDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlV3JpdGVyIHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlDb21wb25lbnQgY29tcG9uZW50KSB7CkBAIC0zMjMsMzggKzMyMywzOCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgc3JjKEZhY2VzQ29udGV4dCBjb250ZXh0LCBVSUNvbXBvbmVudCBjb21wb25lbnQpIHsKICAgICAgICAgU3RyaW5nIGNvbnRleHRQYXRoID0gY29udGV4dC5nZXRFeHRlcm5hbENvbnRleHQoKS5nZXRSZXF1ZXN0Q29udGV4dFBhdGgoKTsKICAgICAgICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoY29udGV4dFBhdGgpOwogICAgICAgICByZXN1bHQuYXBwZW5kKCIvIik7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoQ0hBUlRfU0VSVkxFVF9OQU1FKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gYXBwZW5kIHBhcmFtZXRlcnMgdG8gYmUgcGFzc2VkIHRvIGJlIHNlcnZsZXQKLSAgICAgICAgLy8gQ2hhcnRTZXJ2bGV0IHdpbGwgdXNlIGNsaWVudElkIGFzIHRoZSBhdHRyaWJ1dGUgbmFtZSB0byBnZXQgdGhlIGNoYXJ0IAorICAgICAgICAvLyBDaGFydFNlcnZsZXQgd2lsbCB1c2UgY2xpZW50SWQgYXMgdGhlIGF0dHJpYnV0ZSBuYW1lIHRvIGdldCB0aGUgY2hhcnQKICAgICAgICAgLy8gZGF0YSBmcm9tIHNlc3Npb24uCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoIj9jaGFydElkPSIpOwogICAgICAgICByZXN1bHQuYXBwZW5kKGdldENsaWVudElkKGNvbnRleHQpKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgiJiIpOwotICAgICAgICAKKwogICAgICAgICByZXN1bHQuYXBwZW5kKCJoZWlnaHQ9Iik7CiAgICAgICAgIGlmICggZ2V0SGVpZ2h0KCkgIT0gbnVsbCApIHsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZ2V0SGVpZ2h0KCkpOwogICAgICAgICB9CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoIiYiKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzdWx0LmFwcGVuZCgid2lkdGg9Iik7CiAgICAgICAgIGlmICggZ2V0V2lkdGgoKSAhPSBudWxsICkgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChnZXRXaWR0aCgpKTsKICAgICAgICAgfQogICAgICAgICByZXN1bHQuYXBwZW5kKCImIik7Ci0gICAgIAorCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoIm9yaWVudGF0aW9uPSIpOwogICAgICAgICBpZiAoIGdldE9yaWVudGF0aW9uKCkgIT0gbnVsbCApIHsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZ2V0T3JpZW50YXRpb24oKSk7CiAgICAgICAgIH0KICAgICAgICAgcmVzdWx0LmFwcGVuZCgiJiIpOwotICAgICAgICAKKwogICAgICAgICByZXN1bHQuYXBwZW5kKCJ0eXBlPSIpOwogICAgICAgICBpZiAoIHR5cGUgIT0gbnVsbCApIHsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodHlwZSk7CkBAIC0zNzIsNyArMzcyLDcgQEAKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeGxhYmVsKTsKICAgICAgICAgfQogICAgICAgICByZXN1bHQuYXBwZW5kKCImIik7Ci0gICAgICAKKwogICAgICAgICByZXN1bHQuYXBwZW5kKCJ5bGFiZWw9Iik7CiAgICAgICAgIGlmICggeWxhYmVsICE9IG51bGwgKSB7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHlsYWJlbCk7CkBAIC0zODAsMTAgKzM4MCwxMCBAQAogCiAgICAgICAgIHJldHVybiAocmVzdWx0LnRvU3RyaW5nKCkpOwogICAgICB9Ci0gICAgCisKICAgICAvKiogUGxhY2UgdGhlIGFwcHJvcHJpYXRlIGRhdGEgZm9yIGNoYXJ0IGluIHNlc3Npb24gc2NvcGUsIHNvIHRoYXQKICAgICAgKiBpdCB3aWxsIGJlIHRoZXJlIHdoZW4gdGhlIHNlcGFyYXRlIHJlcXVlc3QgZm9yIHRoZSBpbWFnZSBpcwotICAgICAqIHByb2Nlc3NlZCBieSB0aGUgY2hhcnQgc2VydmxldC4gVGhpcyBzZXJ2bGV0IGlzIHJlc3BvbnNpYmxlIGZvciAKKyAgICAgKiBwcm9jZXNzZWQgYnkgdGhlIGNoYXJ0IHNlcnZsZXQuIFRoaXMgc2VydmxldCBpcyByZXNwb25zaWJsZSBmb3IKICAgICAgKiB3cml0aW5nIG91dCB0aGUgY2hhcnQgYXMgYW4gaW1hZ2UgaW50byB0aGUgcmVzcG9uZSBzdHJlYW0uCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgcGxhY2VDaGFydERhdGFJblNjb3BlKEZhY2VzQ29udGV4dCBjb250ZXh0KSB7CkBAIC00MDIsNyArNDAyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgQ2hhcnRJdGVtQ29tcG9uZW50IGNpID0gKENoYXJ0SXRlbUNvbXBvbmVudCkga2lkOwogICAgICAgICAgICAgICAgICAgICBDaGFydEl0ZW0gaXRlbSA9IChDaGFydEl0ZW0pIGNpLmdldFZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBpdGVtVmFsID0gCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXRlbVZhbCA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ldyBJbnRlZ2VyKChTdHJpbmcpY2kuZ2V0SXRlbVZhbHVlKCkpKS5pbnRWYWx1ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSA9IG5ldyBDaGFydEl0ZW0oY2kuZ2V0SXRlbUxhYmVsKCksaXRlbVZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaS5nZXRJdGVtQ29sb3IoKSk7CkBAIC00MTIsMTAgKzQxMiwxMCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAvLyBzdG9yZSB0aGUgY2hhcnQgZGF0YSBhZ2FpbnN0IHRoZSBjbGllbnRJZCBpbiBzZXNzaW9uLiAKKyAgICAgICAgLy8gc3RvcmUgdGhlIGNoYXJ0IGRhdGEgYWdhaW5zdCB0aGUgY2xpZW50SWQgaW4gc2Vzc2lvbi4KICAgICAgICAgTWFwIHNlc3Npb25NYXAgPQogICAgICAgICAgICAgZ2V0RmFjZXNDb250ZXh0KCkuZ2V0RXh0ZXJuYWxDb250ZXh0KCkuZ2V0U2Vzc2lvbk1hcCgpOwogICAgICAgICBzZXNzaW9uTWFwLnB1dChnZXRDbGllbnRJZChjb250ZXh0KSwgY2hhcnRJdGVtcyk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL2NvbXBvbmVudHMvQ2hhcnRJdGVtQ29tcG9uZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL2NvbXBvbmVudHMvQ2hhcnRJdGVtQ29tcG9uZW50LmphdmEKaW5kZXggNWM5MjQ3NC4uMTZhMjVjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9jb21wb25lbnRzL0NoYXJ0SXRlbUNvbXBvbmVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvY29tcG9uZW50cy9DaGFydEl0ZW1Db21wb25lbnQuamF2YQpAQCAtMzAsOCArMzAsOCBAQAogCiAvKioKICAqIDxwPjxzdHJvbmc+Q2hhcnRJdGVtQ29tcG9uZW50PC9zdHJvbmc+IGlzIGEgY29tcG9uZW50IHRoYXQgbWF5IGJlIG5lc3RlZAotICogaW5zaWRlIGEgPGNvZGU+Q2hhcnRJdGVtPC9jb2RlPiwgYW5kIGNhdXNlcyB0aGUgYWRkaXRpb24gb2YgYSAKLSAqIDxjb2RlPkNoYXJ0SXRlbTwvY29kZT4gaW5zdGFuY2UgdG8gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIG9wdGlvbnMgZm9yIHRoZSAKKyAqIGluc2lkZSBhIDxjb2RlPkNoYXJ0SXRlbTwvY29kZT4sIGFuZCBjYXVzZXMgdGhlIGFkZGl0aW9uIG9mIGEKKyAqIDxjb2RlPkNoYXJ0SXRlbTwvY29kZT4gaW5zdGFuY2UgdG8gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIG9wdGlvbnMgZm9yIHRoZQogICogcGFyZW50IGNvbXBvbmVudC4gIFRoZSBjb250ZW50cyBvZiB0aGUKICAqIDxjb2RlPkNoYXJ0SXRlbTwvY29kZT4gY2FuIGJlIHNwZWNpZmllZCBpbiBvbmUgb2YgdGhlIGZvbGxvd2luZyB3YXlzOjwvcD4KICAqIDx1bD4KQEAgLTQwLDcgKzQwLDcgQEAKICAqIDxsaT5UaGUgYXNzb2NpYXRlZCB7QGxpbmsgVmFsdWVCaW5kaW5nfSBwb2ludHMgYXQgYSBtb2RlbCBkYXRhCiAgKiAgICAgaXRlbSBvZiB0eXBlIDxjb2RlPkNoYXJ0SXRlbTwvY29kZT4uPC9saT4KICAqIDxsaT5BIG5ldyA8Y29kZT5DaGFydEl0ZW08L2NvZGU+IGluc3RhbmNlIGlzIHN5bnRoZXNpemVkIGZyb20gdGhlIHZhbHVlcwotICogICAgIG9mIHRoZSA8Y29kZT5pdGVtTGFiZWw8L2NvZGU+LCA8Y29kZT5pdGVtQ29sb3I8L2NvZGU+LCAKKyAqICAgICBvZiB0aGUgPGNvZGU+aXRlbUxhYmVsPC9jb2RlPiwgPGNvZGU+aXRlbUNvbG9yPC9jb2RlPiwKICAqIDxjb2RlPml0ZW1WYWx1ZTwvY29kZT48L2xpPgogICogPC91bD4KICAqLwpAQCAtMTAyLDE1ICsxMDIsMTUgQEAKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEl0ZW1MYWJlbCgpIHsKIAotCWlmICh0aGlzLml0ZW1MYWJlbCAhPSBudWxsKSB7Ci0JICAgIHJldHVybiAodGhpcy5pdGVtTGFiZWwpOwotCX0KLQlWYWx1ZUJpbmRpbmcgdmIgPSBnZXRWYWx1ZUJpbmRpbmcoIml0ZW1MYWJlbCIpOwotCWlmICh2YiAhPSBudWxsKSB7Ci0JICAgIHJldHVybiAoKFN0cmluZykgdmIuZ2V0VmFsdWUoZ2V0RmFjZXNDb250ZXh0KCkpKTsKLQl9IGVsc2UgewotCSAgICByZXR1cm4gKG51bGwpOwotCX0KKyAgICBpZiAodGhpcy5pdGVtTGFiZWwgIT0gbnVsbCkgeworICAgICAgICByZXR1cm4gKHRoaXMuaXRlbUxhYmVsKTsKKyAgICB9CisgICAgVmFsdWVCaW5kaW5nIHZiID0gZ2V0VmFsdWVCaW5kaW5nKCJpdGVtTGFiZWwiKTsKKyAgICBpZiAodmIgIT0gbnVsbCkgeworICAgICAgICByZXR1cm4gKChTdHJpbmcpIHZiLmdldFZhbHVlKGdldEZhY2VzQ29udGV4dCgpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIChudWxsKTsKKyAgICB9CiAKICAgICB9CiAKQEAgLTEzMSwxNSArMTMxLDE1IEBACiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRJdGVtQ29sb3IoKSB7CiAKLQlpZiAodGhpcy5pdGVtQ29sb3IgIT0gbnVsbCkgewotCSAgICByZXR1cm4gKHRoaXMuaXRlbUNvbG9yKTsKLQl9Ci0JVmFsdWVCaW5kaW5nIHZiID0gZ2V0VmFsdWVCaW5kaW5nKCJpdGVtQ29sb3IiKTsKLQlpZiAodmIgIT0gbnVsbCkgewotCSAgICByZXR1cm4gKChTdHJpbmcpIHZiLmdldFZhbHVlKGdldEZhY2VzQ29udGV4dCgpKSk7Ci0JfSBlbHNlIHsKLQkgICAgcmV0dXJuIChudWxsKTsKLQl9CisgICAgaWYgKHRoaXMuaXRlbUNvbG9yICE9IG51bGwpIHsKKyAgICAgICAgcmV0dXJuICh0aGlzLml0ZW1Db2xvcik7CisgICAgfQorICAgIFZhbHVlQmluZGluZyB2YiA9IGdldFZhbHVlQmluZGluZygiaXRlbUNvbG9yIik7CisgICAgaWYgKHZiICE9IG51bGwpIHsKKyAgICAgICAgcmV0dXJuICgoU3RyaW5nKSB2Yi5nZXRWYWx1ZShnZXRGYWNlc0NvbnRleHQoKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAobnVsbCk7CisgICAgfQogCiAgICAgfQogCkBAIC0xNTQsMjMgKzE1NCwyMyBAQAogICAgICAgICB0aGlzLml0ZW1Db2xvciA9IGNvbG9yOwogCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogPHA+UmV0dXJuIHRoZSBzZXJ2ZXIgdmFsdWUgZm9yIHRoaXMgc2VsZWN0aW9uIGl0ZW0uCiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBnZXRJdGVtVmFsdWUoKSB7CiAKLQlpZiAodGhpcy5pdGVtVmFsdWUgIT0gbnVsbCkgewotCSAgICByZXR1cm4gKHRoaXMuaXRlbVZhbHVlKTsKLQl9Ci0JVmFsdWVCaW5kaW5nIHZiID0gZ2V0VmFsdWVCaW5kaW5nKCJpdGVtVmFsdWUiKTsKLQlpZiAodmIgIT0gbnVsbCkgewotCSAgICByZXR1cm4gKChJbnRlZ2VyKSAodmIuZ2V0VmFsdWUoZ2V0RmFjZXNDb250ZXh0KCkpKSk7Ci0JfSBlbHNlIHsKLQkgICAgcmV0dXJuIG51bGw7Ci0JfQorICAgIGlmICh0aGlzLml0ZW1WYWx1ZSAhPSBudWxsKSB7CisgICAgICAgIHJldHVybiAodGhpcy5pdGVtVmFsdWUpOwogICAgIH0KLSAgICAKKyAgICBWYWx1ZUJpbmRpbmcgdmIgPSBnZXRWYWx1ZUJpbmRpbmcoIml0ZW1WYWx1ZSIpOworICAgIGlmICh2YiAhPSBudWxsKSB7CisgICAgICAgIHJldHVybiAoKEludGVnZXIpICh2Yi5nZXRWYWx1ZShnZXRGYWNlc0NvbnRleHQoKSkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgfQorCiAgICAgLyoqCiAgICAgICogPHA+U2V0IHRoZSBzZXJ2ZXIgdmFsdWUgZm9yIHRoaXMgc2VsZWN0aW9uIGl0ZW0uCiAgICAgICoKQEAgLTE4NywyMSArMTg3LDIxIEBACiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBnZXRWYWx1ZSgpIHsKIAotCWlmICh0aGlzLnZhbHVlICE9IG51bGwpIHsKLQkgICAgcmV0dXJuICh0aGlzLnZhbHVlKTsKLQl9Ci0JVmFsdWVCaW5kaW5nIHZiID0gZ2V0VmFsdWVCaW5kaW5nKCJ2YWx1ZSIpOwotCWlmICh2YiAhPSBudWxsKSB7Ci0JICAgIHJldHVybiAodmIuZ2V0VmFsdWUoZ2V0RmFjZXNDb250ZXh0KCkpKTsKLQl9IGVsc2UgewotCSAgICByZXR1cm4gKG51bGwpOwotCX0KKyAgICBpZiAodGhpcy52YWx1ZSAhPSBudWxsKSB7CisgICAgICAgIHJldHVybiAodGhpcy52YWx1ZSk7CisgICAgfQorICAgIFZhbHVlQmluZGluZyB2YiA9IGdldFZhbHVlQmluZGluZygidmFsdWUiKTsKKyAgICBpZiAodmIgIT0gbnVsbCkgeworICAgICAgICByZXR1cm4gKHZiLmdldFZhbHVlKGdldEZhY2VzQ29udGV4dCgpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIChudWxsKTsKKyAgICB9CiAgICAgfQogCiAKICAgICAvKioKICAgICAgKiA8cD5TZXRzIHRoZSA8Y29kZT52YWx1ZTwvY29kZT4gcHJvcGVydHkgb2YgdGhpcyBjaGFydCBpdGVtCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFZhbHVlKE9iamVjdCB2YWx1ZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9jb21wb25lbnRzL01hcENvbXBvbmVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9jb21wb25lbnRzL01hcENvbXBvbmVudC5qYXZhCmluZGV4IGJhNDdjOTMuLjFiM2YzODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvY29tcG9uZW50cy9NYXBDb21wb25lbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL2NvbXBvbmVudHMvTWFwQ29tcG9uZW50LmphdmEKQEAgLTUzLDE0ICs1MywxNCBAQAogCiAKIAotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tQ29uc3RydWN0b3JzIAorICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tQ29uc3RydWN0b3JzCiAKICAgICBwdWJsaWMgTWFwQ29tcG9uZW50KCkgewogICAgICAgICBzdXBlcigpOwogICAgICAgICBhZGREZWZhdWx0QWN0aW9uTGlzdGVuZXIoZ2V0RmFjZXNDb250ZXh0KCkpOwogICAgIH0KIAotICAgIAorCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJvcGVydGllcwogCiAKQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgICAgICByZXR1cm4gKCJNYXAiKTsKIAogICAgIH0KLSAgIAorCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXZlbnQgTWV0aG9kcwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgQ2xhc3Mgc2lnbmF0dXJlW10gPSB7QXJlYVNlbGVjdGVkRXZlbnQuY2xhc3N9OwpAQCAtMjA5LDcgKzIwOSw3IEBACiAgICAgICAgIGltbWVkaWF0ZVNldCA9ICgoQm9vbGVhbikgdmFsdWVzWzVdKS5ib29sZWFuVmFsdWUoKTsKICAgICAgICAgYWRkRGVmYXVsdEFjdGlvbkxpc3RlbmVyKGNvbnRleHQpOwogICAgIH0KLSAgICAKKwogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByaXZhdGUgTWV0aG9kcwogCiAgICAgLy8gQWRkIHRoZSBkZWZhdWx0IGFjdGlvbiBsaXN0ZW5lcgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9jb21wb25lbnRzL1BhbmVDb21wb25lbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvY29tcG9uZW50cy9QYW5lQ29tcG9uZW50LmphdmEKaW5kZXggZWY4NDI2OC4uYzY3ZTA5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9jb21wb25lbnRzL1BhbmVDb21wb25lbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL2NvbXBvbmVudHMvUGFuZUNvbXBvbmVudC5qYXZhCkBAIC0xNTUsNyArMTU1LDcgQEAKICAgICBwcml2YXRlIFVJQ29tcG9uZW50IGZpbmRQYXJlbnRGb3JSZW5kZXJlclR5cGUoVUlDb21wb25lbnQgY29tcG9uZW50LCBTdHJpbmcgcmVuZGVyZXJUeXBlKSB7CiAgICAgICAgIE9iamVjdCBmYWNldFBhcmVudCA9IG51bGw7CiAgICAgICAgIFVJQ29tcG9uZW50IGN1cnJlbnRDb21wb25lbnQgPSBjb21wb25lbnQ7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIFNlYXJjaCBmb3IgYW4gYW5jZXN0b3IgdGhhdCBpcyB0aGUgc3BlY2lmaWVkIHJlbmRlcmVyIHR5cGU7CiAgICAgICAgIC8vIHNlYXJjaCBpbmNsdWRlcyB0aGUgZmFjZXRzLgogICAgICAgICB3aGlsZSAobnVsbCAhPSAoY3VycmVudENvbXBvbmVudCA9IGN1cnJlbnRDb21wb25lbnQuZ2V0UGFyZW50KCkpKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL2NvbXBvbmVudHMvU2Nyb2xsZXJDb21wb25lbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvY29tcG9uZW50cy9TY3JvbGxlckNvbXBvbmVudC5qYXZhCmluZGV4IDVmMGQ3ZWQuLmIwZDNlYmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvY29tcG9uZW50cy9TY3JvbGxlckNvbXBvbmVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvY29tcG9uZW50cy9TY3JvbGxlckNvbXBvbmVudC5qYXZhCkBAIC0xMDEsNyArMTAxLDcgQEAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2UgPSBhY3Rpb25JbnQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICAgICAgLy8gZnJvbSB0aGUgY3VycmVudFBhZ2UsIGNhbGN1bGF0ZSB0aGUgY3VycmVudCByb3cgdG8gc2Nyb2xsIHRvLgogICAgICAgICBjdXJyZW50Um93ID0gKGN1cnJlbnRQYWdlIC0gMSkgKiBnZXRSb3dzUGVyUGFnZShjb250ZXh0KTsKICAgICAgICAgdGhpcy5nZXRBdHRyaWJ1dGVzKCkucHV0KCJjdXJyZW50UGFnZSIsIG5ldyBJbnRlZ2VyKGN1cnJlbnRQYWdlKSk7CkBAIC0xODAsMTAgKzE4MCwxMCBAQAogICAgICAgICByZXR1cm4gKCJTY3JvbGxlciIpOwogCiAgICAgfQotICAgICAKKwogICAgIC8vCiAgICAgLy8gSGVscGVyIG1ldGhvZHMKLSAgICAvLyAKKyAgICAvLwogCiAgICAgLyoqCiAgICAgICogV3JpdGUgdGhlIG1hcmt1cCB0byByZW5kZXIgYSBuYXZpZ2F0aW9uIHdpZGdldC4gIE92ZXJyaWRlIHRoaXMgdG8KQEAgLTQyMiw0ICs0MjIsNCBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiB1aURhdGEuZ2V0Um93cygpOwogICAgIH0KLX0gCit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL2NvbmYvZmFjZXMtY29uZmlnLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvY29uZi9mYWNlcy1jb25maWcueG1sCmluZGV4IGRlYTQ4ZjEuLjVlYzgyMDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvY29uZi9mYWNlcy1jb25maWcueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvY29uZi9mYWNlcy1jb25maWcueG1sCkBAIC01MSwxOCArNTEsMTggQEAKICAgICAgIDxwcm9wZXJ0eS1uYW1lPnNoYXBlPC9wcm9wZXJ0eS1uYW1lPgogICAgICAgPHByb3BlcnR5LWNsYXNzPmphdmEubGFuZy5TdHJpbmc8L3Byb3BlcnR5LWNsYXNzPgogICAgIDwvcHJvcGVydHk+Ci0gICAgCisKICAgICA8Y29tcG9uZW50LWV4dGVuc2lvbj4KICAgICAgIDxjb21wb25lbnQtZmFtaWx5PkFyZWE8L2NvbXBvbmVudC1mYW1pbHk+CiAgICAgICA8cmVuZGVyZXItdHlwZT5EZW1vQXJlYTwvcmVuZGVyZXItdHlwZT4KICAgICA8L2NvbXBvbmVudC1leHRlbnNpb24+Ci0gICAgCisKICAgPC9jb21wb25lbnQ+CiAKICAgPGNvbXBvbmVudD4KICAgICA8Y29tcG9uZW50LXR5cGU+R3JhcGg8L2NvbXBvbmVudC10eXBlPgogICAgIDxjb21wb25lbnQtY2xhc3M+Y29tcG9uZW50cy5jb21wb25lbnRzLkdyYXBoQ29tcG9uZW50PC9jb21wb25lbnQtY2xhc3M+Ci0gICAgCisKICAgICA8Y29tcG9uZW50LWV4dGVuc2lvbj4KICAgICAgIDxjb21wb25lbnQtZmFtaWx5PkdyYXBoPC9jb21wb25lbnQtZmFtaWx5PgogICAgICAgPHJlbmRlcmVyLXR5cGU+TWVudUJhcjwvcmVuZGVyZXItdHlwZT4KQEAgLTc5LDI4ICs3OSwyOCBAQAogICAgICAgPHByb3BlcnR5LW5hbWU+Y3VycmVudDwvcHJvcGVydHktbmFtZT4KICAgICAgIDxwcm9wZXJ0eS1jbGFzcz5qYXZhLmxhbmcuU3RyaW5nPC9wcm9wZXJ0eS1jbGFzcz4KICAgICA8L3Byb3BlcnR5PgotICAgIAorCiAgICAgPGNvbXBvbmVudC1leHRlbnNpb24+CiAgICAgICA8Y29tcG9uZW50LWZhbWlseT5NYXA8L2NvbXBvbmVudC1mYW1pbHk+CiAgICAgICA8cmVuZGVyZXItdHlwZT5EZW1vTWFwPC9yZW5kZXJlci10eXBlPgogICAgIDwvY29tcG9uZW50LWV4dGVuc2lvbj4KLSAgICAKKwogICA8L2NvbXBvbmVudD4KIAogICA8Y29tcG9uZW50PgogICAgIDxjb21wb25lbnQtdHlwZT5QYW5lPC9jb21wb25lbnQtdHlwZT4KICAgICA8Y29tcG9uZW50LWNsYXNzPmNvbXBvbmVudHMuY29tcG9uZW50cy5QYW5lQ29tcG9uZW50PC9jb21wb25lbnQtY2xhc3M+Ci0gICAgCisKICAgICA8Y29tcG9uZW50LWV4dGVuc2lvbj4KICAgICAgIDxjb21wb25lbnQtZmFtaWx5PlBhbmU8L2NvbXBvbmVudC1mYW1pbHk+CiAgICAgICA8cmVuZGVyZXItdHlwZT5UYWI8L3JlbmRlcmVyLXR5cGU+CiAgICAgPC9jb21wb25lbnQtZXh0ZW5zaW9uPgogICA8L2NvbXBvbmVudD4KLSAgCisKICAgPGNvbXBvbmVudD4KICAgICA8Y29tcG9uZW50LXR5cGU+U2Nyb2xsZXI8L2NvbXBvbmVudC10eXBlPgogICAgIDxjb21wb25lbnQtY2xhc3M+Y29tcG9uZW50cy5jb21wb25lbnRzLlNjcm9sbGVyQ29tcG9uZW50PC9jb21wb25lbnQtY2xhc3M+Ci0gICAgCisKICAgICA8Y29tcG9uZW50LWV4dGVuc2lvbj4KICAgICAgIDxjb21wb25lbnQtZmFtaWx5PlNjcm9sbGVyPC9jb21wb25lbnQtZmFtaWx5PgogICAgIDwvY29tcG9uZW50LWV4dGVuc2lvbj4KQEAgLTEwOSwxNiArMTA5LDE2IEBACiAgIDxjb21wb25lbnQ+CiAgICAgPGNvbXBvbmVudC10eXBlPkNoYXJ0PC9jb21wb25lbnQtdHlwZT4KICAgICA8Y29tcG9uZW50LWNsYXNzPmNvbXBvbmVudHMuY29tcG9uZW50cy5DaGFydENvbXBvbmVudDwvY29tcG9uZW50LWNsYXNzPgotICAgIAorCiAgICAgPGNvbXBvbmVudC1leHRlbnNpb24+CiAgICAgICA8Y29tcG9uZW50LWZhbWlseT5DaGFydDwvY29tcG9uZW50LWZhbWlseT4KICAgICA8L2NvbXBvbmVudC1leHRlbnNpb24+CiAgIDwvY29tcG9uZW50PgotICAKKwogICA8Y29tcG9uZW50PgogICAgIDxjb21wb25lbnQtdHlwZT5DaGFydEl0ZW08L2NvbXBvbmVudC10eXBlPgogICAgIDxjb21wb25lbnQtY2xhc3M+Y29tcG9uZW50cy5jb21wb25lbnRzLkNoYXJ0SXRlbUNvbXBvbmVudDwvY29tcG9uZW50LWNsYXNzPgotICAgIAorCiAgICAgPGNvbXBvbmVudC1leHRlbnNpb24+CiAgICAgICA8Y29tcG9uZW50LWZhbWlseT5DaGFydEl0ZW08L2NvbXBvbmVudC1mYW1pbHk+CiAgICAgPC9jb21wb25lbnQtZXh0ZW5zaW9uPgpAQCAtMTM0LDcgKzEzNCw3IEBACiAgICAgICA8Y29tcG9uZW50LWZhbWlseT5BcmVhPC9jb21wb25lbnQtZmFtaWx5PgogICAgICAgPHJlbmRlcmVyLXR5cGU+RGVtb0FyZWE8L3JlbmRlcmVyLXR5cGU+CiAgICAgICA8cmVuZGVyZXItY2xhc3M+Y29tcG9uZW50cy5yZW5kZXJraXQuQXJlYVJlbmRlcmVyPC9yZW5kZXJlci1jbGFzcz4KLSAgICAgIAorCiAgICAgICA8YXR0cmlidXRlPgogICAgICAgICA8ZGVzY3JpcHRpb24+CiAgICAgICAgICAgQ29udGV4dC1yZWxhdGl2ZSBwYXRoIHRvIGFuIGltYWdlIHRvIGJlIGRpc3BsYXllZCB3aGVuIHRoZQpAQCAtMTY3LDcgKzE2Nyw3IEBACiAgICAgICA8Y29tcG9uZW50LWZhbWlseT5NYXA8L2NvbXBvbmVudC1mYW1pbHk+CiAgICAgICA8cmVuZGVyZXItdHlwZT5EZW1vTWFwPC9yZW5kZXJlci10eXBlPgogICAgICAgPHJlbmRlcmVyLWNsYXNzPmNvbXBvbmVudHMucmVuZGVya2l0Lk1hcFJlbmRlcmVyPC9yZW5kZXJlci1jbGFzcz4KLSAgICAgIAorCiAgICAgICA8YXR0cmlidXRlPgogICAgICAgICA8ZGVzY3JpcHRpb24+CiAgICAgICAgICAgQ1NTIHN0eWxlIGNsYXNzIHRvIHVzZSB3aGVuIHJlbmRlcmluZyB0aGlzIGNvbXBvbmVudC4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvbW9kZWwvQ2hhcnRJdGVtLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL21vZGVsL0NoYXJ0SXRlbS5qYXZhCmluZGV4IGFlN2E5MmMuLjBkMjQyY2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvbW9kZWwvQ2hhcnRJdGVtLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9tb2RlbC9DaGFydEl0ZW0uamF2YQpAQCAtMjgsMTEgKzI4LDExIEBACiAgICAgcHVibGljIENoYXJ0SXRlbSgpIHsKICAgICAgICBzdXBlcigpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBDaGFydEl0ZW0oU3RyaW5nIGxhYmVsLCBpbnQgdmFsdWUsIFN0cmluZyBjb2xvcikgewogICAgICAgICBzZXRMYWJlbChsYWJlbCk7Ci0Jc2V0VmFsdWUodmFsdWUpOwotCXNldENvbG9yKGNvbG9yKTsKKyAgICBzZXRWYWx1ZSh2YWx1ZSk7CisgICAgc2V0Q29sb3IoY29sb3IpOwogICAgIH0KIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9yZW5kZXJraXQvQ2hhcnRTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL3JlbmRlcmtpdC9DaGFydFNlcnZsZXQuamF2YQppbmRleCAwMTc0NzZiLi41NDc0MTAwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL3JlbmRlcmtpdC9DaGFydFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL3JlbmRlcmtpdC9DaGFydFNlcnZsZXQuamF2YQpAQCAtNTYsNyArNTYsNyBAQAogICAgIHByaXZhdGUgU2VydmxldENvbmZpZyBzZXJ2bGV0Q29uZmlnID0gbnVsbDsKIAogCi0gICAgCisKICAgICAvKioKICAgICAgKiA8cD5SZWxlYXNlIGFsbCByZXNvdXJjZXMgYWNxdWlyZWQgYXQgc3RhcnR1cCB0aW1lLjwvcD4KICAgICAgKi8KQEAgLTg1LDEyICs4NSwxMiBAQAogICAgIC8qKgogICAgICAqIDxwPlBlcmZvcm0gaW5pdGlhbGl6YXRpb24uPC9wPgogICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBTZXJ2bGV0RXhjZXB0aW9uIGlmLCBmb3IgYW55IHJlYXNvbiwgCisgICAgICogQGV4Y2VwdGlvbiBTZXJ2bGV0RXhjZXB0aW9uIGlmLCBmb3IgYW55IHJlYXNvbiwKICAgICAgKiBibiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdGhlIHByb2Nlc3Npbmcgb2YKICAgICAgKiB0aGlzIDxjb2RlPmluaXQoKTwvY29kZT4gbWV0aG9kLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBzZXJ2bGV0Q29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7Ci0JCisKICAgICAgICAgLy8gU2F2ZSBvdXIgU2VydmxldENvbmZpZyBpbnN0YW5jZQogICAgICAgICB0aGlzLnNlcnZsZXRDb25maWcgPSBzZXJ2bGV0Q29uZmlnOwogICAgIH0KQEAgLTEwOSwyMCArMTA5LDIwIEBACiAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAKIAotCS8vIEhlcmUncyB3aGVyZSB3ZSdkIGdldCB0aGUgQ2hhcnRCZWFuIGZyb20gdGhlIHNlc3Npb24gYW5kIGRldGVybWluZQotCS8vIHdoZXRoZXIgd2UncmUgZ2VuZXJhdGluZyBhIHBpZSBjaGFydCBvciBiYXIgY2hhcnQuLi4KLQkvLwotCVN0cmluZyB0eXBlID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInR5cGUiKTsKLQlpZiAoKHR5cGUgPT0gbnVsbCkgfHwgCi0JICAgICghdHlwZS5lcXVhbHMoImJhciIpKSAmJiAoIXR5cGUuZXF1YWxzKCJwaWUiKSkpIHsKLQkgICAgdHlwZSA9ICJiYXIiOwotCX0KLSAgICAgICAgCi0JaWYgKHR5cGUuZXF1YWxzKCJiYXIiKSkgewotCSAgICBnZW5lcmF0ZUJhckNoYXJ0KHJlcXVlc3QsIHJlc3BvbnNlKTsKLQl9IGVsc2UgeworICAgIC8vIEhlcmUncyB3aGVyZSB3ZSdkIGdldCB0aGUgQ2hhcnRCZWFuIGZyb20gdGhlIHNlc3Npb24gYW5kIGRldGVybWluZQorICAgIC8vIHdoZXRoZXIgd2UncmUgZ2VuZXJhdGluZyBhIHBpZSBjaGFydCBvciBiYXIgY2hhcnQuLi4KKyAgICAvLworICAgIFN0cmluZyB0eXBlID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInR5cGUiKTsKKyAgICBpZiAoKHR5cGUgPT0gbnVsbCkgfHwKKyAgICAgICAgKCF0eXBlLmVxdWFscygiYmFyIikpICYmICghdHlwZS5lcXVhbHMoInBpZSIpKSkgeworICAgICAgICB0eXBlID0gImJhciI7CisgICAgfQorCisgICAgaWYgKHR5cGUuZXF1YWxzKCJiYXIiKSkgeworICAgICAgICBnZW5lcmF0ZUJhckNoYXJ0KHJlcXVlc3QsIHJlc3BvbnNlKTsKKyAgICB9IGVsc2UgewogICAgICAgICAgICAgZ2VuZXJhdGVQaWVDaGFydChyZXF1ZXN0LCByZXNwb25zZSk7Ci0JfQorICAgIH0KICAgICB9CiAKICAgICAvKioKQEAgLTEzNyw3ICsxMzcsNyBAQAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKLQlkb0dldChyZXF1ZXN0LCByZXNwb25zZSk7CisgICAgZG9HZXQocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMTUwLDI0OSArMTUwLDI0OSBAQAogICAgICAqIEBleGNlcHRpb24gU2VydmxldEV4Y2VwdGlvbiBpZiBhIHNlcnZsZXQgZXJyb3Igb2NjdXJzIGR1cmluZyBwcm9jZXNzaW5nCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGdlbmVyYXRlQmFyQ2hhcnQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsCi0JCSAgICAgICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAKICAgICAgICAgZmluYWwgaW50IFZFUlRJQ0FMID0gMDsKLQlmaW5hbCBpbnQgSE9SSVpPTlRBTCA9IDE7CisgICAgZmluYWwgaW50IEhPUklaT05UQUwgPSAxOwogCi0JcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoImltYWdlL2pwZWciKTsKLQkKKyAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgiaW1hZ2UvanBlZyIpOworCiAgICAgICAgIFN0cmluZyBpZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJjaGFydElkIik7Ci0gICAgICAgIAotCS8vIGdldCBjaGFydCBwYXJhbWV0ZXJzCi0JU3RyaW5nIHRpdGxlID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInRpdGxlIik7Ci0JaWYgKHRpdGxlID09IG51bGwpIHsKLQkgICAgdGl0bGUgPSAiQ2hhcnQiOwotCX0KLQkKLQlpbnQgb3JpZW50YXRpb24gPSBWRVJUSUNBTDsKLQlTdHJpbmcgb3JpZW50YXRpb25TdHIgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigib3JpZW50YXRpb24iKTsKLQlpZiAoKG9yaWVudGF0aW9uU3RyID09IG51bGwpIHx8IAotCSAgICAoIW9yaWVudGF0aW9uU3RyLmVxdWFscygiaG9yaXpvbnRhbCIpKSAmJiAoIW9yaWVudGF0aW9uU3RyLmVxdWFscygidmVydGljYWwiKSkpIHsKLQkgICAgb3JpZW50YXRpb24gPSBWRVJUSUNBTDsKLQl9IGVsc2UgaWYgKG9yaWVudGF0aW9uU3RyLmVxdWFscygidmVydGljYWwiKSkgewotCSAgICBvcmllbnRhdGlvbiA9IFZFUlRJQ0FMOwotCX0gZWxzZSB7Ci0JICAgIG9yaWVudGF0aW9uID0gSE9SSVpPTlRBTDsKLQl9CiAKLQkvLyBsYWJlbCBmb3IgeC95IGF4aXMKLQlTdHJpbmcgeExhYmVsID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInhsYWJlbCIpOwotCVN0cmluZyB5TGFiZWwgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigieWxhYmVsIik7CisgICAgLy8gZ2V0IGNoYXJ0IHBhcmFtZXRlcnMKKyAgICBTdHJpbmcgdGl0bGUgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigidGl0bGUiKTsKKyAgICBpZiAodGl0bGUgPT0gbnVsbCkgeworICAgICAgICB0aXRsZSA9ICJDaGFydCI7CisgICAgfQogCi0JLy8gZGVmYXVsdCBpbWFnZSBzaXplCi0JaW50IHdpZHRoID0gNDAwOwotCWludCBoZWlnaHQgPSAzMDA7Ci0JU3RyaW5nIHdpZHRoU3RyID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoIndpZHRoIik7Ci0JU3RyaW5nIGhlaWdodFN0ciA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJoZWlnaHQiKTsKLQlpZiAod2lkdGhTdHIgIT0gbnVsbCkgewotCSAgICB3aWR0aCA9IEludGVnZXIucGFyc2VJbnQod2lkdGhTdHIpOwotCX0KLQlpZiAoaGVpZ2h0U3RyICE9IG51bGwpIHsKLQkgICAgaGVpZ2h0ID0gSW50ZWdlci5wYXJzZUludChoZWlnaHRTdHIpOwotCX0KLQkKLQkvLyBnZXQgYW4gYXJyYXkgb2YgY2hhcnQgaXRlbXMgY29udGFpbmluZyBvdXIgZGF0YS4uCisgICAgaW50IG9yaWVudGF0aW9uID0gVkVSVElDQUw7CisgICAgU3RyaW5nIG9yaWVudGF0aW9uU3RyID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoIm9yaWVudGF0aW9uIik7CisgICAgaWYgKChvcmllbnRhdGlvblN0ciA9PSBudWxsKSB8fAorICAgICAgICAoIW9yaWVudGF0aW9uU3RyLmVxdWFscygiaG9yaXpvbnRhbCIpKSAmJiAoIW9yaWVudGF0aW9uU3RyLmVxdWFscygidmVydGljYWwiKSkpIHsKKyAgICAgICAgb3JpZW50YXRpb24gPSBWRVJUSUNBTDsKKyAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uU3RyLmVxdWFscygidmVydGljYWwiKSkgeworICAgICAgICBvcmllbnRhdGlvbiA9IFZFUlRJQ0FMOworICAgIH0gZWxzZSB7CisgICAgICAgIG9yaWVudGF0aW9uID0gSE9SSVpPTlRBTDsKKyAgICB9CisKKyAgICAvLyBsYWJlbCBmb3IgeC95IGF4aXMKKyAgICBTdHJpbmcgeExhYmVsID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInhsYWJlbCIpOworICAgIFN0cmluZyB5TGFiZWwgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigieWxhYmVsIik7CisKKyAgICAvLyBkZWZhdWx0IGltYWdlIHNpemUKKyAgICBpbnQgd2lkdGggPSA0MDA7CisgICAgaW50IGhlaWdodCA9IDMwMDsKKyAgICBTdHJpbmcgd2lkdGhTdHIgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigid2lkdGgiKTsKKyAgICBTdHJpbmcgaGVpZ2h0U3RyID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoImhlaWdodCIpOworICAgIGlmICh3aWR0aFN0ciAhPSBudWxsKSB7CisgICAgICAgIHdpZHRoID0gSW50ZWdlci5wYXJzZUludCh3aWR0aFN0cik7CisgICAgfQorICAgIGlmIChoZWlnaHRTdHIgIT0gbnVsbCkgeworICAgICAgICBoZWlnaHQgPSBJbnRlZ2VyLnBhcnNlSW50KGhlaWdodFN0cik7CisgICAgfQorCisgICAgLy8gZ2V0IGFuIGFycmF5IG9mIGNoYXJ0IGl0ZW1zIGNvbnRhaW5pbmcgb3VyIGRhdGEuLgogICAgICAgICBIdHRwU2Vzc2lvbiBzZXNzaW9uID0gcmVxdWVzdC5nZXRTZXNzaW9uKHRydWUpOwotCUNoYXJ0SXRlbVtdIGNoYXJ0SXRlbXMgPSAoQ2hhcnRJdGVtW10pc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoaWQpOwotCWlmIChjaGFydEl0ZW1zID09IG51bGwpIHsKKyAgICBDaGFydEl0ZW1bXSBjaGFydEl0ZW1zID0gKENoYXJ0SXRlbVtdKXNlc3Npb24uZ2V0QXR0cmlidXRlKGlkKTsKKyAgICBpZiAoY2hhcnRJdGVtcyA9PSBudWxsKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vIGRhdGEgaXRlbXMgc3BlY2lmaWVkLi4uIik7Ci0JICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJObyBkYXRhIGl0ZW1zIHNwZWNpZmllZC4uLiIpOwotCX0KKyAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIk5vIGRhdGEgaXRlbXMgc3BlY2lmaWVkLi4uIik7CisgICAgfQogCiAgICAgICAgIC8vIHJlbW92ZSB0aGUgY2hhcnQgZGF0YSBmcm9tIHNlc3Npb24gbm93IHRoYXQgY2hhcnQgaGFzIGJlZW4gcmVuZGVyZWQuCiAgICAgICAgIHNlc3Npb24ucmVtb3ZlQXR0cmlidXRlKGlkKTsKLSAgICAgICAgCi0JLy8gbWF4aW11bSBkYXRhIHZhbHVlCi0JaW50IG1heERhdGFWYWx1ZSA9IDA7Ci0JLy8gbWF4aW11bSBsYWJlbCB3aWR0aAotCWludCBtYXhMYWJlbFdpZHRoID0gMDsKLQkvLyBzcGFjZSBiZXR3ZWVuIGJhcnMKLQlpbnQgYmFyU3BhY2luZyA9IDEwOwotCS8vIHdpZHRoIG9mIGVhY2ggYmFyCi0JaW50IGJhcldpZHRoID0gMDsKLQkvLyB4LHkgY29vcmRpbmF0ZXMKLQlpbnQgY3gsIGN5OwotCS8vIG51bWJlciBvZiBjaGFydCBpdGVtcwotCWludCBjb2x1bW5zID0gY2hhcnRJdGVtcy5sZW5ndGg7Ci0JaW50IHNjYWxlID0gMTA7CisKKyAgICAvLyBtYXhpbXVtIGRhdGEgdmFsdWUKKyAgICBpbnQgbWF4RGF0YVZhbHVlID0gMDsKKyAgICAvLyBtYXhpbXVtIGxhYmVsIHdpZHRoCisgICAgaW50IG1heExhYmVsV2lkdGggPSAwOworICAgIC8vIHNwYWNlIGJldHdlZW4gYmFycworICAgIGludCBiYXJTcGFjaW5nID0gMTA7CisgICAgLy8gd2lkdGggb2YgZWFjaCBiYXIKKyAgICBpbnQgYmFyV2lkdGggPSAwOworICAgIC8vIHgseSBjb29yZGluYXRlcworICAgIGludCBjeCwgY3k7CisgICAgLy8gbnVtYmVyIG9mIGNoYXJ0IGl0ZW1zCisgICAgaW50IGNvbHVtbnMgPSBjaGFydEl0ZW1zLmxlbmd0aDsKKyAgICBpbnQgc2NhbGUgPSAxMDsKICAgICAgICAgLy8gYW4gaW5kaXZpZHVhbCBjaGFydCBkYXRhIGl0ZW0KLQlDaGFydEl0ZW0gY2hhcnRJdGVtID0gbnVsbDsKLQlTdHJpbmcgbGFiZWwgPSBudWxsOwotCWludCB2YWx1ZSA9IDA7CisgICAgQ2hhcnRJdGVtIGNoYXJ0SXRlbSA9IG51bGw7CisgICAgU3RyaW5nIGxhYmVsID0gbnVsbDsKKyAgICBpbnQgdmFsdWUgPSAwOwogCiAgICAgICAgIEJ1ZmZlcmVkSW1hZ2UgYmkgPSBuZXcgQnVmZmVyZWRJbWFnZSh3aWR0aCwgaGVpZ2h0LCBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX1JHQik7CiAgICAgICAgIEdyYXBoaWNzMkQgZzJkID0gYmkuY3JlYXRlR3JhcGhpY3MoKTsKICAgICAgICAgRm9udCB0aXRsZUZvbnQgPSBuZXcgamF2YS5hd3QuRm9udCgiQ291cmllciIsIEZvbnQuQk9MRCwgMTIpOwogICAgICAgICBGb250TWV0cmljcyB0aXRsZUZvbnRNZXRyaWNzID0gZzJkLmdldEZvbnRNZXRyaWNzKHRpdGxlRm9udCk7Ci0JCi0JLy8gbG9vcCB0aHJvdWdoIGFuZCBmaWd1cmUgb3V0IHRoZSB0aGUgd2lkZXN0IGl0ZW0gbGFiZWwsIGFzIHdlbGwgYXMKLQkvLyB0aGUgbWF4aW11bSB2YWx1ZS4KKworICAgIC8vIGxvb3AgdGhyb3VnaCBhbmQgZmlndXJlIG91dCB0aGUgdGhlIHdpZGVzdCBpdGVtIGxhYmVsLCBhcyB3ZWxsIGFzCisgICAgLy8gdGhlIG1heGltdW0gdmFsdWUuCiAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGNvbHVtbnM7IGkrKykgewotCSAgICBjaGFydEl0ZW0gPSBjaGFydEl0ZW1zW2ldOwotCSAgICBsYWJlbCA9IGNoYXJ0SXRlbS5nZXRMYWJlbCgpOwotCSAgICB2YWx1ZSA9IGNoYXJ0SXRlbS5nZXRWYWx1ZSgpOwotCSAgICBpZiAodmFsdWUgPiBtYXhEYXRhVmFsdWUpIHsKLQkgICAgICAgIG1heERhdGFWYWx1ZSA9IHZhbHVlOwotCSAgICB9Ci0JICAgIG1heExhYmVsV2lkdGggPSBNYXRoLm1heCh0aXRsZUZvbnRNZXRyaWNzLnN0cmluZ1dpZHRoKGxhYmVsKSwgbWF4TGFiZWxXaWR0aCk7Ci0JfQorICAgICAgICBjaGFydEl0ZW0gPSBjaGFydEl0ZW1zW2ldOworICAgICAgICBsYWJlbCA9IGNoYXJ0SXRlbS5nZXRMYWJlbCgpOworICAgICAgICB2YWx1ZSA9IGNoYXJ0SXRlbS5nZXRWYWx1ZSgpOworICAgICAgICBpZiAodmFsdWUgPiBtYXhEYXRhVmFsdWUpIHsKKyAgICAgICAgICAgIG1heERhdGFWYWx1ZSA9IHZhbHVlOworICAgICAgICB9CisgICAgICAgIG1heExhYmVsV2lkdGggPSBNYXRoLm1heCh0aXRsZUZvbnRNZXRyaWNzLnN0cmluZ1dpZHRoKGxhYmVsKSwgbWF4TGFiZWxXaWR0aCk7CisgICAgfQogCi0JLy8gY2FsY3VsYXRlIGNoYXJ0IGRpbWVuc2lvbnMKLQlpbnRbXSB4Y29vcmRzID0gbmV3IGludFtjb2x1bW5zXTsKLQlpbnRbXSB5Y29vcmRzID0gbmV3IGludFtjb2x1bW5zXTsKLQlpbnQgdG90YWxXaWR0aCA9IDA7Ci0JaW50IHRvdGFsSGVpZ2h0ID0gMDsKLQlmb3IgKGludCBpPTA7IGkgPCBjb2x1bW5zOyBpKyspIHsKLQkgICAgc3dpdGNoIChvcmllbnRhdGlvbikgewotCSAgICAgIGNhc2UgVkVSVElDQUw6Ci0JICAgICAgZGVmYXVsdDogCisgICAgLy8gY2FsY3VsYXRlIGNoYXJ0IGRpbWVuc2lvbnMKKyAgICBpbnRbXSB4Y29vcmRzID0gbmV3IGludFtjb2x1bW5zXTsKKyAgICBpbnRbXSB5Y29vcmRzID0gbmV3IGludFtjb2x1bW5zXTsKKyAgICBpbnQgdG90YWxXaWR0aCA9IDA7CisgICAgaW50IHRvdGFsSGVpZ2h0ID0gMDsKKyAgICBmb3IgKGludCBpPTA7IGkgPCBjb2x1bW5zOyBpKyspIHsKKyAgICAgICAgc3dpdGNoIChvcmllbnRhdGlvbikgeworICAgICAgICAgIGNhc2UgVkVSVElDQUw6CisgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBiYXJXaWR0aCA9IG1heExhYmVsV2lkdGg7Ci0JCWN4ID0gKE1hdGgubWF4KChiYXJXaWR0aCArIGJhclNwYWNpbmcpLG1heExhYmVsV2lkdGgpICogaSkgKwotCQkgICAgYmFyU3BhY2luZzsKLQkJdG90YWxXaWR0aCA9IGN4ICsgKDQgKiB0aXRsZUZvbnQuZ2V0U2l6ZSgpKTsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSBIT1JJWk9OVEFMOgotCQliYXJXaWR0aCA9IHRpdGxlRm9udC5nZXRTaXplKCk7Ci0JCWN5ID0gKChiYXJXaWR0aCArIGJhclNwYWNpbmcpICogaSkgKyBiYXJTcGFjaW5nOwotCQl0b3RhbEhlaWdodCA9IGN5ICsgKDQgKiB0aXRsZUZvbnQuZ2V0U2l6ZSgpKTsgCi0JCWJyZWFrOwotCSAgICB9Ci0JfQotCWlmIChvcmllbnRhdGlvbiA9PSBWRVJUSUNBTCkgeworICAgICAgICBjeCA9IChNYXRoLm1heCgoYmFyV2lkdGggKyBiYXJTcGFjaW5nKSxtYXhMYWJlbFdpZHRoKSAqIGkpICsKKyAgICAgICAgICAgIGJhclNwYWNpbmc7CisgICAgICAgIHRvdGFsV2lkdGggPSBjeCArICg0ICogdGl0bGVGb250LmdldFNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgSE9SSVpPTlRBTDoKKyAgICAgICAgYmFyV2lkdGggPSB0aXRsZUZvbnQuZ2V0U2l6ZSgpOworICAgICAgICBjeSA9ICgoYmFyV2lkdGggKyBiYXJTcGFjaW5nKSAqIGkpICsgYmFyU3BhY2luZzsKKyAgICAgICAgdG90YWxIZWlnaHQgPSBjeSArICg0ICogdGl0bGVGb250LmdldFNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlmIChvcmllbnRhdGlvbiA9PSBWRVJUSUNBTCkgewogICAgICAgICAgICAgdG90YWxIZWlnaHQgPSBtYXhEYXRhVmFsdWUgKyAoOCAqIHRpdGxlRm9udC5nZXRTaXplKCkpOwotCSAgICB0b3RhbFdpZHRoID0gdG90YWxXaWR0aCArIDUwOwotCX0gZWxzZSB7Ci0JICAgIHRvdGFsV2lkdGggPSBtYXhEYXRhVmFsdWUgKyAoNCAqIHRpdGxlRm9udC5nZXRTaXplKCkgKwotCQkoSW50ZWdlci50b1N0cmluZyhtYXhEYXRhVmFsdWUpLmxlbmd0aCgpICogdGl0bGVGb250LmdldFNpemUoKSkrNTApOwotCX0KKyAgICAgICAgdG90YWxXaWR0aCA9IHRvdGFsV2lkdGggKyA1MDsKKyAgICB9IGVsc2UgeworICAgICAgICB0b3RhbFdpZHRoID0gbWF4RGF0YVZhbHVlICsgKDQgKiB0aXRsZUZvbnQuZ2V0U2l6ZSgpICsKKyAgICAgICAgKEludGVnZXIudG9TdHJpbmcobWF4RGF0YVZhbHVlKS5sZW5ndGgoKSAqIHRpdGxlRm9udC5nZXRTaXplKCkpKzUwKTsKKyAgICB9CiAKLQkvLyBNYWtlIHN1cmUgdGhlIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIGNoYXJ0IHByb3ZpZGVzIGVub3VnaCByb29tCi0JLy8gZm9yIHRoZSB2ZXJ0aWNhbCBsYWJlbC4uCi0JLy8KLQlpbnQgeUxhYmVsSGVpZ2h0ID0gMDsKLQlmb3IgKGludCBpPTA7IGk8eUxhYmVsLmxlbmd0aCgpOyBpKyspIHsKLQkgICAgeUxhYmVsSGVpZ2h0ICs9IHRpdGxlRm9udE1ldHJpY3MuZ2V0QXNjZW50KCk7Ci0JfQotCWlmICgoeUxhYmVsSGVpZ2h0KygxMiAqIHRpdGxlRm9udE1ldHJpY3MuZ2V0RGVzY2VudCgpKSkgPiB0b3RhbEhlaWdodCkgewotCSAgICB0b3RhbEhlaWdodCA9IHlMYWJlbEhlaWdodCsoOCp0aXRsZUZvbnQuZ2V0U2l6ZSgpKTsKLQl9Ci0JICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGUgdGhlIHRvdGFsIGhlaWdodCBvZiB0aGUgY2hhcnQgcHJvdmlkZXMgZW5vdWdoIHJvb20KKyAgICAvLyBmb3IgdGhlIHZlcnRpY2FsIGxhYmVsLi4KKyAgICAvLworICAgIGludCB5TGFiZWxIZWlnaHQgPSAwOworICAgIGZvciAoaW50IGk9MDsgaTx5TGFiZWwubGVuZ3RoKCk7IGkrKykgeworICAgICAgICB5TGFiZWxIZWlnaHQgKz0gdGl0bGVGb250TWV0cmljcy5nZXRBc2NlbnQoKTsKKyAgICB9CisgICAgaWYgKCh5TGFiZWxIZWlnaHQrKDEyICogdGl0bGVGb250TWV0cmljcy5nZXREZXNjZW50KCkpKSA+IHRvdGFsSGVpZ2h0KSB7CisgICAgICAgIHRvdGFsSGVpZ2h0ID0geUxhYmVsSGVpZ2h0Kyg4KnRpdGxlRm9udC5nZXRTaXplKCkpOworICAgIH0KKwogCiAgICAgICAgIGJpID0gbmV3IEJ1ZmZlcmVkSW1hZ2UodG90YWxXaWR0aCwgdG90YWxIZWlnaHQsIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfUkdCKTsKICAgICAgICAgZzJkID0gYmkuY3JlYXRlR3JhcGhpY3MoKTsKICAgICAgICAgdGl0bGVGb250TWV0cmljcyA9IGcyZC5nZXRGb250TWV0cmljcyh0aXRsZUZvbnQpOwogCi0JLy8gZ3JhcGggZGltZW5zaW9ucwotCURpbWVuc2lvbiBncmFwaERpbSA9IG5ldyBEaW1lbnNpb24odG90YWxXaWR0aCx0b3RhbEhlaWdodCk7CisgICAgLy8gZ3JhcGggZGltZW5zaW9ucworICAgIERpbWVuc2lvbiBncmFwaERpbSA9IG5ldyBEaW1lbnNpb24odG90YWxXaWR0aCx0b3RhbEhlaWdodCk7CiAgICAgICAgIFJlY3RhbmdsZSBncmFwaFJlY3QgPSBuZXcgUmVjdGFuZ2xlKGdyYXBoRGltKTsKIAotCS8vIGJvcmRlciBkaW1lbnNpb25zCi0JRGltZW5zaW9uIGJvcmRlckRpbSA9IG5ldyBEaW1lbnNpb24odG90YWxXaWR0aC0yLHRvdGFsSGVpZ2h0LTIpOworICAgIC8vIGJvcmRlciBkaW1lbnNpb25zCisgICAgRGltZW5zaW9uIGJvcmRlckRpbSA9IG5ldyBEaW1lbnNpb24odG90YWxXaWR0aC0yLHRvdGFsSGVpZ2h0LTIpOwogICAgICAgICBSZWN0YW5nbGUgYm9yZGVyUmVjdCA9IG5ldyBSZWN0YW5nbGUoYm9yZGVyRGltKTsKLQkKLQkvLyBiYWNrZ3JvdW5kIGNvbG9yCi0JZzJkLnNldENvbG9yKENvbG9yLndoaXRlKTsKLQlnMmQuZmlsbChncmFwaFJlY3QpOwogCi0JLy8gZHJhdyBib3JkZXIKLQlnMmQuc2V0Q29sb3IoQ29sb3IuYmxhY2spOwotCWJvcmRlclJlY3Quc2V0TG9jYXRpb24oMSwxKTsKKyAgICAvLyBiYWNrZ3JvdW5kIGNvbG9yCisgICAgZzJkLnNldENvbG9yKENvbG9yLndoaXRlKTsKKyAgICBnMmQuZmlsbChncmFwaFJlY3QpOworCisgICAgLy8gZHJhdyBib3JkZXIKKyAgICBnMmQuc2V0Q29sb3IoQ29sb3IuYmxhY2spOworICAgIGJvcmRlclJlY3Quc2V0TG9jYXRpb24oMSwxKTsKICAgICAgICAgZzJkLmRyYXcoYm9yZGVyUmVjdCk7CiAKLQkvLyBkcmF3IHRoZSB0aXRsZSBjZW50ZXJlZCBhdCB0aGUgYm90dG9tIG9mIHRoZSBiYXIgZ3JhcGgKLQlpbnQgaSA9IHRpdGxlRm9udE1ldHJpY3Muc3RyaW5nV2lkdGgodGl0bGUpOwotCWcyZC5zZXRGb250KHRpdGxlRm9udCk7Ci0JZzJkLnNldENvbG9yKENvbG9yLmJsYWNrKTsKLQlnMmQuZHJhd1N0cmluZyh0aXRsZSwgTWF0aC5tYXgoKHRvdGFsV2lkdGggLSBpKS8yLCAwKSwKLQkgICAgdG90YWxIZWlnaHQgLSB0aXRsZUZvbnRNZXRyaWNzLmdldERlc2NlbnQoKSk7CisgICAgLy8gZHJhdyB0aGUgdGl0bGUgY2VudGVyZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgYmFyIGdyYXBoCisgICAgaW50IGkgPSB0aXRsZUZvbnRNZXRyaWNzLnN0cmluZ1dpZHRoKHRpdGxlKTsKKyAgICBnMmQuc2V0Rm9udCh0aXRsZUZvbnQpOworICAgIGcyZC5zZXRDb2xvcihDb2xvci5ibGFjayk7CisgICAgZzJkLmRyYXdTdHJpbmcodGl0bGUsIE1hdGgubWF4KCh0b3RhbFdpZHRoIC0gaSkvMiwgMCksCisgICAgICAgIHRvdGFsSGVpZ2h0IC0gdGl0bGVGb250TWV0cmljcy5nZXREZXNjZW50KCkpOwogCi0JLy8gZHJhdyB0aGUgeCBheGlzIGxhYmVsCi0JaSA9IHRpdGxlRm9udE1ldHJpY3Muc3RyaW5nV2lkdGgoeExhYmVsKTsKLQlnMmQuZHJhd1N0cmluZyh4TGFiZWwsIE1hdGgubWF4KCh0b3RhbFdpZHRoIC0gaSkvMiwgMCksCi0JICAgIHRvdGFsSGVpZ2h0IC0gKDYgKiB0aXRsZUZvbnRNZXRyaWNzLmdldERlc2NlbnQoKSkpOworICAgIC8vIGRyYXcgdGhlIHggYXhpcyBsYWJlbAorICAgIGkgPSB0aXRsZUZvbnRNZXRyaWNzLnN0cmluZ1dpZHRoKHhMYWJlbCk7CisgICAgZzJkLmRyYXdTdHJpbmcoeExhYmVsLCBNYXRoLm1heCgodG90YWxXaWR0aCAtIGkpLzIsIDApLAorICAgICAgICB0b3RhbEhlaWdodCAtICg2ICogdGl0bGVGb250TWV0cmljcy5nZXREZXNjZW50KCkpKTsKIAotCS8vIGRyYXcgdGhlIHkgYXhpcyBsYWJlbAotCWkgPSB0aXRsZUZvbnRNZXRyaWNzLnN0cmluZ1dpZHRoKHlMYWJlbCk7Ci0JY3ggPSB0b3RhbFdpZHRoLSh0b3RhbFdpZHRoLTYpOwotCWN5ID0gdG90YWxIZWlnaHQgLSAoMTIgKiB0aXRsZUZvbnRNZXRyaWNzLmdldERlc2NlbnQoKSk7Ci0JZm9yIChpbnQgaj15TGFiZWwubGVuZ3RoKCk7IGo+MDsgai0tKSB7Ci0JICAgIGcyZC5kcmF3U3RyaW5nKHlMYWJlbC5zdWJzdHJpbmcoai0xLGopLCBjeCwgY3kpOwotCSAgICBjeSAtPSB0aXRsZUZvbnRNZXRyaWNzLmdldEFzY2VudCgpOwotCX0KLQkgICAgCi0JLy8gbG9vcCB0aHJvdWdoIHRvIGRyYXcgdGhlIGNoYXJ0IGl0ZW1zLgorICAgIC8vIGRyYXcgdGhlIHkgYXhpcyBsYWJlbAorICAgIGkgPSB0aXRsZUZvbnRNZXRyaWNzLnN0cmluZ1dpZHRoKHlMYWJlbCk7CisgICAgY3ggPSB0b3RhbFdpZHRoLSh0b3RhbFdpZHRoLTYpOworICAgIGN5ID0gdG90YWxIZWlnaHQgLSAoMTIgKiB0aXRsZUZvbnRNZXRyaWNzLmdldERlc2NlbnQoKSk7CisgICAgZm9yIChpbnQgaj15TGFiZWwubGVuZ3RoKCk7IGo+MDsgai0tKSB7CisgICAgICAgIGcyZC5kcmF3U3RyaW5nKHlMYWJlbC5zdWJzdHJpbmcoai0xLGopLCBjeCwgY3kpOworICAgICAgICBjeSAtPSB0aXRsZUZvbnRNZXRyaWNzLmdldEFzY2VudCgpOworICAgIH0KKworICAgIC8vIGxvb3AgdGhyb3VnaCB0byBkcmF3IHRoZSBjaGFydCBpdGVtcy4KICAgICAgICAgZm9yIChpPTA7IGkgPCBjb2x1bW5zOyBpKyspIHsKLQkgICAgY2hhcnRJdGVtID0gY2hhcnRJdGVtc1tpXTsKLQkgICAgbGFiZWwgPSBjaGFydEl0ZW0uZ2V0TGFiZWwoKTsKLQkgICAgdmFsdWUgPSBjaGFydEl0ZW0uZ2V0VmFsdWUoKTsKLQkgICAgU3RyaW5nIGNvbG9yU3RyID0gY2hhcnRJdGVtLmdldENvbG9yKCk7CisgICAgICAgIGNoYXJ0SXRlbSA9IGNoYXJ0SXRlbXNbaV07CisgICAgICAgIGxhYmVsID0gY2hhcnRJdGVtLmdldExhYmVsKCk7CisgICAgICAgIHZhbHVlID0gY2hhcnRJdGVtLmdldFZhbHVlKCk7CisgICAgICAgIFN0cmluZyBjb2xvclN0ciA9IGNoYXJ0SXRlbS5nZXRDb2xvcigpOwogCi0JICAgIE9iamVjdCBjb2xvciA9IGdldENvbG9yKGNvbG9yU3RyKTsKLQkgICAgc3dpdGNoIChvcmllbnRhdGlvbikgewotCSAgICAgIGNhc2UgVkVSVElDQUw6Ci0JICAgICAgZGVmYXVsdDogCisgICAgICAgIE9iamVjdCBjb2xvciA9IGdldENvbG9yKGNvbG9yU3RyKTsKKyAgICAgICAgc3dpdGNoIChvcmllbnRhdGlvbikgeworICAgICAgICAgIGNhc2UgVkVSVElDQUw6CisgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBiYXJXaWR0aCA9IG1heExhYmVsV2lkdGg7Ci0JCS8vIHNldCB0aGUgbmV4dCBYIGNvb3JkaW5hdGUgdG8gYWNjb3VudCBmb3IgdGhlIGxhYmVsCi0JCS8vIGJlaW5nIHdpZGVyIHRoYW4gdGhlIGJhciB3aWR0aC4KLQkJY3ggPSAoTWF0aC5tYXgoKGJhcldpZHRoICsgYmFyU3BhY2luZyksbWF4TGFiZWxXaWR0aCkgKiBpKSArCi0JCSAgICBiYXJTcGFjaW5nICsgMTI7CisgICAgICAgIC8vIHNldCB0aGUgbmV4dCBYIGNvb3JkaW5hdGUgdG8gYWNjb3VudCBmb3IgdGhlIGxhYmVsCisgICAgICAgIC8vIGJlaW5nIHdpZGVyIHRoYW4gdGhlIGJhciB3aWR0aC4KKyAgICAgICAgY3ggPSAoTWF0aC5tYXgoKGJhcldpZHRoICsgYmFyU3BhY2luZyksbWF4TGFiZWxXaWR0aCkgKiBpKSArCisgICAgICAgICAgICBiYXJTcGFjaW5nICsgMTI7CiAKLQkJLy8gY2VudGVyIHRoZSBiYXIgY2hhcnQKLQkJY3ggKz0gTWF0aC5tYXgoKHRvdGFsV2lkdGggLSAoY29sdW1ucyAqIChiYXJXaWR0aCArIAotCQkgICAgKDIgKiBiYXJTcGFjaW5nKSkpKS8yLDApOwotCQkgICAKLQkJLy8gc2V0IHRoZSBuZXh0IFkgY29vcmRpbmF0ZSB0byBhY2NvdW50IGZvciB0aGUgaGVpZ2h0Ci0JCS8vIG9mIHRoZSBiYXIgYXMgd2VsbCBhcyB0aGUgdGl0bGUgYW5kIGxhYmVscyBwYWludGVkCi0JCS8vIGF0IHRoZSBib3R0b20gb2YgdGhlIGNoYXJ0LgotCQljeSA9IHRvdGFsSGVpZ2h0IC0gKHZhbHVlKSAtIDEgLSAoMiAqIHRpdGxlRm9udC5nZXRTaXplKCkpOwotCQotCQkvLyBkcmF3IHRoZSBsYWJlbAotCQlnMmQuc2V0Q29sb3IoQ29sb3IuYmxhY2spOwotCQlnMmQuZHJhd1N0cmluZygoU3RyaW5nKWxhYmVsLCBjeCwKLQkJICAgIHRvdGFsSGVpZ2h0IC0gdGl0bGVGb250LmdldFNpemUoKSAtICg4ICogdGl0bGVGb250TWV0cmljcy5nZXREZXNjZW50KCkpKTsJCisgICAgICAgIC8vIGNlbnRlciB0aGUgYmFyIGNoYXJ0CisgICAgICAgIGN4ICs9IE1hdGgubWF4KCh0b3RhbFdpZHRoIC0gKGNvbHVtbnMgKiAoYmFyV2lkdGggKworICAgICAgICAgICAgKDIgKiBiYXJTcGFjaW5nKSkpKS8yLDApOwogCi0JCS8vIGRyYXcgdGhlIHNoYWRvdyBiYXIKLQkJaWYgKGNvbG9yID09IENvbG9yLmJsYWNrKSB7Ci0JCSAgICBnMmQuc2V0Q29sb3IoQ29sb3IuZ3JheSk7Ci0JCX0KLQkJZzJkLmZpbGxSZWN0KGN4ICsgNSwgY3kgLSAyOCwgYmFyV2lkdGgsICAodmFsdWUpKTsKLQkJLy8gZHJhdyB0aGUgYmFyIHdpdGggdGhlIHNwZWNpZmllZCBjb2xvcgotCQlnMmQuc2V0Q29sb3IoKENvbG9yKShjb2xvcikpOworICAgICAgICAvLyBzZXQgdGhlIG5leHQgWSBjb29yZGluYXRlIHRvIGFjY291bnQgZm9yIHRoZSBoZWlnaHQKKyAgICAgICAgLy8gb2YgdGhlIGJhciBhcyB3ZWxsIGFzIHRoZSB0aXRsZSBhbmQgbGFiZWxzIHBhaW50ZWQKKyAgICAgICAgLy8gYXQgdGhlIGJvdHRvbSBvZiB0aGUgY2hhcnQuCisgICAgICAgIGN5ID0gdG90YWxIZWlnaHQgLSAodmFsdWUpIC0gMSAtICgyICogdGl0bGVGb250LmdldFNpemUoKSk7CisKKyAgICAgICAgLy8gZHJhdyB0aGUgbGFiZWwKKyAgICAgICAgZzJkLnNldENvbG9yKENvbG9yLmJsYWNrKTsKKyAgICAgICAgZzJkLmRyYXdTdHJpbmcoKFN0cmluZylsYWJlbCwgY3gsCisgICAgICAgICAgICB0b3RhbEhlaWdodCAtIHRpdGxlRm9udC5nZXRTaXplKCkgLSAoOCAqIHRpdGxlRm9udE1ldHJpY3MuZ2V0RGVzY2VudCgpKSk7CisKKyAgICAgICAgLy8gZHJhdyB0aGUgc2hhZG93IGJhcgorICAgICAgICBpZiAoY29sb3IgPT0gQ29sb3IuYmxhY2spIHsKKyAgICAgICAgICAgIGcyZC5zZXRDb2xvcihDb2xvci5ncmF5KTsKKyAgICAgICAgfQorICAgICAgICBnMmQuZmlsbFJlY3QoY3ggKyA1LCBjeSAtIDI4LCBiYXJXaWR0aCwgICh2YWx1ZSkpOworICAgICAgICAvLyBkcmF3IHRoZSBiYXIgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbG9yCisgICAgICAgIGcyZC5zZXRDb2xvcigoQ29sb3IpKGNvbG9yKSk7CiAgICAgICAgICAgICAgICAgZzJkLmZpbGxSZWN0KGN4LCBjeSAtIDMwLCBiYXJXaWR0aCwgKHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgZzJkLmRyYXdTdHJpbmcoIiIgKyB2YWx1ZSwgY3gsIGN5IC0gMzAgLSB0aXRsZUZvbnRNZXRyaWNzLmdldERlc2NlbnQoKSk7Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgSE9SSVpPTlRBTDoKLQkJYmFyV2lkdGggPSB0aXRsZUZvbnQuZ2V0U2l6ZSgpOwotCQkvLyBzZXQgdGhlIFkgY29vcmRpbmF0ZQotCSAgICAgICAgY3kgPSB0b3RhbEhlaWdodCAtICgoKGJhcldpZHRoICsgYmFyU3BhY2luZykgKiBpKSArIGJhclNwYWNpbmcgKyAKLQkJICAgICgxMiAqIHRpdGxlRm9udE1ldHJpY3MuZ2V0RGVzY2VudCgpKSk7Ci0JCQorICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEhPUklaT05UQUw6CisgICAgICAgIGJhcldpZHRoID0gdGl0bGVGb250LmdldFNpemUoKTsKKyAgICAgICAgLy8gc2V0IHRoZSBZIGNvb3JkaW5hdGUKKyAgICAgICAgICAgIGN5ID0gdG90YWxIZWlnaHQgLSAoKChiYXJXaWR0aCArIGJhclNwYWNpbmcpICogaSkgKyBiYXJTcGFjaW5nICsKKyAgICAgICAgICAgICgxMiAqIHRpdGxlRm9udE1ldHJpY3MuZ2V0RGVzY2VudCgpKSk7CiAKLQkJLy8gc2V0IHRoZSBYIGNvb3JkaW5hdGUgdG8gYmUgdGhlIHdpZHRoIG9mIHRoZSB3aWRlc3QgbGFiZWwKLQkJY3ggPSBtYXhMYWJlbFdpZHRoICsgMTsKIAotCQljeCArPSBNYXRoLm1heCgodG90YWxXaWR0aCAtIChtYXhMYWJlbFdpZHRoICsgMSArCi0JICAgICAgICAgICAgdGl0bGVGb250TWV0cmljcy5zdHJpbmdXaWR0aCgiIiArIG1heERhdGFWYWx1ZSkgKworICAgICAgICAvLyBzZXQgdGhlIFggY29vcmRpbmF0ZSB0byBiZSB0aGUgd2lkdGggb2YgdGhlIHdpZGVzdCBsYWJlbAorICAgICAgICBjeCA9IG1heExhYmVsV2lkdGggKyAxOworCisgICAgICAgIGN4ICs9IE1hdGgubWF4KCh0b3RhbFdpZHRoIC0gKG1heExhYmVsV2lkdGggKyAxICsKKyAgICAgICAgICAgICAgICB0aXRsZUZvbnRNZXRyaWNzLnN0cmluZ1dpZHRoKCIiICsgbWF4RGF0YVZhbHVlKSArCiAgICAgICAgICAgICAgICAgICAgIChtYXhEYXRhVmFsdWUpKSkgLyAyLCAwKTsKLQkJLy8gZHJhdyB0aGUgbGFiZWxzIGFuZCB0aGUgc2hhZG93Ci0JCWcyZC5zZXRDb2xvcihDb2xvci5ibGFjayk7Ci0JCWcyZC5kcmF3U3RyaW5nKChTdHJpbmcpbGFiZWwsIGN4IC0gbWF4TGFiZWxXaWR0aCAtIDEsCi0JCQkgICAgIGN5ICsgdGl0bGVGb250TWV0cmljcy5nZXRBc2NlbnQoKSk7Ci0JCWlmIChjb2xvciA9PSBDb2xvci5ibGFjaykgewotCQkgICAgZzJkLnNldENvbG9yKENvbG9yLmdyYXkpOwotCQl9Ci0JCWcyZC5maWxsUmVjdChjeCArIDMsIGN5ICsgNSwgKHZhbHVlKSwgYmFyV2lkdGgpOworICAgICAgICAvLyBkcmF3IHRoZSBsYWJlbHMgYW5kIHRoZSBzaGFkb3cKKyAgICAgICAgZzJkLnNldENvbG9yKENvbG9yLmJsYWNrKTsKKyAgICAgICAgZzJkLmRyYXdTdHJpbmcoKFN0cmluZylsYWJlbCwgY3ggLSBtYXhMYWJlbFdpZHRoIC0gMSwKKyAgICAgICAgICAgICAgICAgY3kgKyB0aXRsZUZvbnRNZXRyaWNzLmdldEFzY2VudCgpKTsKKyAgICAgICAgaWYgKGNvbG9yID09IENvbG9yLmJsYWNrKSB7CisgICAgICAgICAgICBnMmQuc2V0Q29sb3IoQ29sb3IuZ3JheSk7CisgICAgICAgIH0KKyAgICAgICAgZzJkLmZpbGxSZWN0KGN4ICsgMywgY3kgKyA1LCAodmFsdWUpLCBiYXJXaWR0aCk7CiAKLQkJLy8gZHJhdyB0aGUgYmFyIGluIHRoZSBjdXJyZW50IGNvbG9yCi0JCWcyZC5zZXRDb2xvcigoQ29sb3IpKGNvbG9yKSk7CisgICAgICAgIC8vIGRyYXcgdGhlIGJhciBpbiB0aGUgY3VycmVudCBjb2xvcgorICAgICAgICBnMmQuc2V0Q29sb3IoKENvbG9yKShjb2xvcikpOwogICAgICAgICAgICAgICAgIGcyZC5maWxsUmVjdChjeCwgY3ksICh2YWx1ZSksIGJhcldpZHRoKTsKICAgICAgICAgICAgICAgICBnMmQuZHJhd1N0cmluZygiIiArIHZhbHVlLCBjeCArICh2YWx1ZSApICsgMywKICAgICAgICAgICAgICAgICAgICAgY3kgKyB0aXRsZUZvbnRNZXRyaWNzLmdldEFzY2VudCgpKTsKLQkJYnJlYWs7Ci0JICAgIH0KLQl9CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQogICAgICAgICBPdXRwdXRTdHJlYW0gb3V0cHV0ID0gcmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIEpQRUdJbWFnZUVuY29kZXIgZW5jb2RlciA9IEpQRUdDb2RlYy5jcmVhdGVKUEVHRW5jb2RlcihvdXRwdXQpOwogICAgICAgICBlbmNvZGVyLmVuY29kZShiaSk7CkBAIC00MDksNTYgKzQwOSw1NiBAQAogICAgICAqIEBleGNlcHRpb24gU2VydmxldEV4Y2VwdGlvbiBpZiBhIHNlcnZsZXQgZXJyb3Igb2NjdXJzIGR1cmluZyBwcm9jZXNzaW5nCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGdlbmVyYXRlUGllQ2hhcnQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsCi0JCSAgICAgICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJpbWFnZS9qcGVnIik7Ci0JCi0JLy8gZ2V0IGNoYXJ0IHBhcmFtZXRlcnMKLSAgICAgICAgU3RyaW5nIGlkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoImNoYXJ0SWQiKTsKLQlTdHJpbmcgdGl0bGUgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigidGl0bGUiKTsKLQlpZiAodGl0bGUgPT0gbnVsbCkgewotCSAgICB0aXRsZSA9ICJDaGFydCI7Ci0JfQotCQotCS8vIGxhYmVsIGZvciB4L3kgYXhpcwotCVN0cmluZyB4TGFiZWwgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigieGxhYmVsIik7Ci0JU3RyaW5nIHlMYWJlbCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJ5bGFiZWwiKTsKIAotCS8vIGRlZmF1bHQgaW1hZ2Ugc2l6ZQotCWludCB3aWR0aCA9IDQwMDsKLQlpbnQgaGVpZ2h0ID0gMjAwOwotCVN0cmluZyB3aWR0aFN0ciA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJ3aWR0aCIpOwotCVN0cmluZyBoZWlnaHRTdHIgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiaGVpZ2h0Iik7Ci0JaWYgKHdpZHRoU3RyICE9IG51bGwpIHsKLQkgICAgd2lkdGggPSBJbnRlZ2VyLnBhcnNlSW50KHdpZHRoU3RyKTsKLQl9Ci0JaWYgKGhlaWdodFN0ciAhPSBudWxsKSB7Ci0JICAgIGhlaWdodCA9IEludGVnZXIucGFyc2VJbnQoaGVpZ2h0U3RyKTsKLQl9Ci0JCi0JLy8gZ2V0IGFuIGFycmF5IG9mIGNoYXJ0IGl0ZW1zIGNvbnRhaW5pbmcgb3VyIGRhdGEuLgorICAgIC8vIGdldCBjaGFydCBwYXJhbWV0ZXJzCisgICAgICAgIFN0cmluZyBpZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJjaGFydElkIik7CisgICAgU3RyaW5nIHRpdGxlID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInRpdGxlIik7CisgICAgaWYgKHRpdGxlID09IG51bGwpIHsKKyAgICAgICAgdGl0bGUgPSAiQ2hhcnQiOworICAgIH0KKworICAgIC8vIGxhYmVsIGZvciB4L3kgYXhpcworICAgIFN0cmluZyB4TGFiZWwgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigieGxhYmVsIik7CisgICAgU3RyaW5nIHlMYWJlbCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJ5bGFiZWwiKTsKKworICAgIC8vIGRlZmF1bHQgaW1hZ2Ugc2l6ZQorICAgIGludCB3aWR0aCA9IDQwMDsKKyAgICBpbnQgaGVpZ2h0ID0gMjAwOworICAgIFN0cmluZyB3aWR0aFN0ciA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJ3aWR0aCIpOworICAgIFN0cmluZyBoZWlnaHRTdHIgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiaGVpZ2h0Iik7CisgICAgaWYgKHdpZHRoU3RyICE9IG51bGwpIHsKKyAgICAgICAgd2lkdGggPSBJbnRlZ2VyLnBhcnNlSW50KHdpZHRoU3RyKTsKKyAgICB9CisgICAgaWYgKGhlaWdodFN0ciAhPSBudWxsKSB7CisgICAgICAgIGhlaWdodCA9IEludGVnZXIucGFyc2VJbnQoaGVpZ2h0U3RyKTsKKyAgICB9CisKKyAgICAvLyBnZXQgYW4gYXJyYXkgb2YgY2hhcnQgaXRlbXMgY29udGFpbmluZyBvdXIgZGF0YS4uCiAgICAgICAgIEh0dHBTZXNzaW9uIHNlc3Npb24gPSByZXF1ZXN0LmdldFNlc3Npb24oKTsKLQlDaGFydEl0ZW1bXSBjaGFydEl0ZW1zID0gKENoYXJ0SXRlbVtdKXNlc3Npb24uZ2V0QXR0cmlidXRlKGlkKTsKLQlpZiAoY2hhcnRJdGVtcyA9PSBudWxsKSB7CisgICAgQ2hhcnRJdGVtW10gY2hhcnRJdGVtcyA9IChDaGFydEl0ZW1bXSlzZXNzaW9uLmdldEF0dHJpYnV0ZShpZCk7CisgICAgaWYgKGNoYXJ0SXRlbXMgPT0gbnVsbCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJObyBkYXRhIGl0ZW1zIHNwZWNpZmllZC4uLiIpOwotCSAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbigiTm8gZGF0YSBpdGVtcyBzcGVjaWZpZWQuLi4iKTsKLQl9Ci0gICAgICAgIAorICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbigiTm8gZGF0YSBpdGVtcyBzcGVjaWZpZWQuLi4iKTsKKyAgICB9CisKICAgICAgICAgLy8gcmVtb3ZlIHRoZSBjaGFydCBkYXRhIGZyb20gc2Vzc2lvbiBub3cgdGhhdCBjaGFydCBoYXMgYmVlbiByZW5kZXJlZC4KICAgICAgICAgc2Vzc2lvbi5yZW1vdmVBdHRyaWJ1dGUoaWQpOwotICAgICAgICAKKwogICAgICAgICAvLyBiZWdpbiBwaWUgY2hhcnQKICAgICAgICAgQ29sb3IgZHJvcFNoYWRvdyA9IG5ldyBDb2xvcigyNDAsMjQwLDI0MCk7CiAgICAgICAgIC8vaW5uZXIgcGFkZGluZyB0byBtYWtlIHN1cmUgYmFycyBuZXZlciB0b3VjaCB0aGUgb3V0ZXIgYm9yZGVyCiAgICAgICAgIGludCBpbm5lck9mZnNldCA9IDIwOwotIAorCiAgICAgICAgIGludCBwaWVIZWlnaHQgPSBoZWlnaHQgLSAoaW5uZXJPZmZzZXQgKiAyKTsKLSAgICAgICAgaW50IHBpZVdpZHRoID0gIHBpZUhlaWdodDsgICAgICAgICAgICAgIAorICAgICAgICBpbnQgcGllV2lkdGggPSAgcGllSGVpZ2h0OwogICAgICAgICBpbnQgaGFsZldpZHRoID0gd2lkdGgvMjsKIAogICAgICAgICAvL1dpZHRoIG9mIHRoZSBpbm5lciBncmFwaGFibGUgYXJlYQogICAgICAgICBpbnQgaW5uZXJXaWR0aCA9IHdpZHRoIC0gKGlubmVyT2Zmc2V0ICogMik7Ci0gICAgICAgIAorCiAgICAgICAgIC8vZ3JhcGggZGltZW5zaW9uCiAgICAgICAgIERpbWVuc2lvbiBncmFwaERpbSA9IG5ldyBEaW1lbnNpb24od2lkdGgsIGhlaWdodCk7CiAgICAgICAgIFJlY3RhbmdsZSBncmFwaFJlY3QgPSBuZXcgUmVjdGFuZ2xlKGdyYXBoRGltKTsKQEAgLTQ2NiwxNyArNDY2LDE3IEBACiAgICAgICAgIC8vYm9yZGVyIGRpbWVuc2lvbnMKICAgICAgICAgRGltZW5zaW9uIGJvcmRlckRpbSA9IG5ldyBEaW1lbnNpb24oaGFsZldpZHRoLTIsaGVpZ2h0LTIpOwogICAgICAgICBSZWN0YW5nbGUgYm9yZGVyUmVjdCA9IG5ldyBSZWN0YW5nbGUoYm9yZGVyRGltKTsKLSAgICAgICAgCisKICAgICAgICAgLy9TZXQgY29udGVudCB0eXBlCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJpbWFnZS9qcGVnIik7CiAKICAgICAgICAgLy9DcmVhdGUgQnVmZmVyZWRJbWFnZSAmIEdyYXBoaWNzMkQKLSAgICAgICAgQnVmZmVyZWRJbWFnZSBiaSA9IG5ldyBCdWZmZXJlZEltYWdlKHdpZHRoLCBoZWlnaHQsIAorICAgICAgICBCdWZmZXJlZEltYWdlIGJpID0gbmV3IEJ1ZmZlcmVkSW1hZ2Uod2lkdGgsIGhlaWdodCwKICAgICAgICAgICAgICAgICBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX1JHQik7CiAgICAgICAgIEdyYXBoaWNzMkQgZzJkID0gYmkuY3JlYXRlR3JhcGhpY3MoKTsKIAogICAgICAgICAvLyBTZXQgQW50aWFsaWFzaW5nCi0gICAgICAgIFJlbmRlcmluZ0hpbnRzIHJlbmRlckhpbnRzID0gCisgICAgICAgIFJlbmRlcmluZ0hpbnRzIHJlbmRlckhpbnRzID0KICAgICAgICAgICAgIG5ldyBSZW5kZXJpbmdIaW50cyhSZW5kZXJpbmdIaW50cy5LRVlfQU5USUFMSUFTSU5HLAogICAgICAgICAgICAgUmVuZGVyaW5nSGludHMuVkFMVUVfQU5USUFMSUFTX09OKTsKICAgICAgICAgZzJkLnNldFJlbmRlcmluZ0hpbnRzKHJlbmRlckhpbnRzKTsKQEAgLTUwMCw3ICs1MDAsNyBAQAogICAgICAgICBpbnQgYm9yZGVyID0gMjA7CiAKICAgICAgICAgLy9NYWluIGNoYXJ0IEVsbGlwc2UKLSAgICAgICAgRWxsaXBzZTJELkRvdWJsZSBlbGIgPSBuZXcgRWxsaXBzZTJELkRvdWJsZSh4X3BpZSAtIGJvcmRlci8yLCAKKyAgICAgICAgRWxsaXBzZTJELkRvdWJsZSBlbGIgPSBuZXcgRWxsaXBzZTJELkRvdWJsZSh4X3BpZSAtIGJvcmRlci8yLAogICAgICAgICAgICAgeV9waWUgLSBib3JkZXIvMiwgcGllV2lkdGggKyBib3JkZXIsIHBpZUhlaWdodCArIGJvcmRlcik7CiAgICAgICAgIC8vU2hhZG93CiAgICAgICAgIGcyZC5zZXRDb2xvcihkcm9wU2hhZG93KTsKQEAgLTU0Niw3ICs1NDYsNyBAQAogICAgICAgICAgICAgICAgIGlmIChpID09IGxhc3RFbGVtZW50KSB7c3dlZXBBbmdsZSA9IDM2MC1zdGFydEFuZ2xlO30KICAgICAgICAgICAgICAgICAvLyBEcmF3IEFyYwogICAgICAgICAgICAgICAgIGcyZC5zZXRDb2xvcihnZXRDb2xvcihjaGFydEl0ZW1zW2ldLmdldENvbG9yKCkpKTsKLSAgICAgICAgICAgICAgICBnMmQuZmlsbEFyYyh4X3BpZSwgeV9waWUsIHBpZVdpZHRoLCBwaWVIZWlnaHQsIHN0YXJ0QW5nbGUsIAorICAgICAgICAgICAgICAgIGcyZC5maWxsQXJjKHhfcGllLCB5X3BpZSwgcGllV2lkdGgsIHBpZUhlaWdodCwgc3RhcnRBbmdsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHN3ZWVwQW5nbGUpOwogICAgICAgICAgICAgICAgIC8vSW5jcmVtZW50IHN0YXJ0QW5nbGUgd2l0aCB0aGUgc3dlZXBBbmdsZQogICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGUgKz0gc3dlZXBBbmdsZTsKQEAgLTU4MCw3ICs1ODAsNyBAQAogICAgICAgICBlbmNvZGVyLmVuY29kZShiaSk7CiAgICAgICAgIG91dHB1dC5jbG9zZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIENvbG9yIGluc3RhbmNlIGNvcnJlc3BvbmRpbmcgdGhlIGNvbG9yIHBhc3NlZCBpbi4KICAgICAgKgpAQCAtNTg5LDcgKzU4OSw3IEBACiAgICAgICovCiAgICAgcHJvdGVjdGVkIENvbG9yIGdldENvbG9yKFN0cmluZyBjb2xvclN0cikgewogICAgICAgICBDb2xvciBjb2xvciA9IG51bGw7Ci0JaWYgKGNvbG9yU3RyID09IG51bGwpIHsKKyAgICBpZiAoY29sb3JTdHIgPT0gbnVsbCkgewogICAgICAgICAgICAgY29sb3IgPSBDb2xvci5ncmF5OwogICAgICAgICB9CiAgICAgICAgIGlmIChjb2xvclN0ci5lcXVhbHMoInJlZCIpKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL3JlbmRlcmtpdC9NZW51QmFyUmVuZGVyZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvcmVuZGVya2l0L01lbnVCYXJSZW5kZXJlci5qYXZhCmluZGV4IDc3OWZlMGMuLjg1MjRmZDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvcmVuZGVya2l0L01lbnVCYXJSZW5kZXJlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvcmVuZGVya2l0L01lbnVCYXJSZW5kZXJlci5qYXZhCkBAIC02NSw3ICs2NSw3IEBACiAgICAgcHVibGljIHZvaWQgZGVjb2RlKEZhY2VzQ29udGV4dCBjb250ZXh0LCBVSUNvbXBvbmVudCBjb21wb25lbnQpIHsKIAogICAgICAgICBHcmFwaCBncmFwaCA9IG51bGw7Ci0gIAorCiAgICAgICAgIC8vIGlmIGEgbm9kZSB3YXMgY2xpY2tlZCBxdWV1ZSBhbiBBY3Rpb25FdmVudC4KICAgICAgICAgTWFwIHJlcXVlc3RQYXJhbWV0ZXJNYXAgPSAoTWFwKSBjb250ZXh0LmdldEV4dGVybmFsQ29udGV4dCgpLgogICAgICAgICAgICAgZ2V0UmVxdWVzdFBhcmFtZXRlck1hcCgpOwpAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgICAgIHNlbGVjdGVkQ2xhc3MgPSAoU3RyaW5nKSBjb21wb25lbnQuZ2V0QXR0cmlidXRlcygpLmdldCgic2VsZWN0ZWRDbGFzcyIpOwogICAgICAgICB1bnNlbGVjdGVkQ2xhc3MgPQogICAgICAgICAgICAgKFN0cmluZykgY29tcG9uZW50LmdldEF0dHJpYnV0ZXMoKS5nZXQoInVuc2VsZWN0ZWRDbGFzcyIpOwotICAgICAgICAKKwogICAgICAgICAvLyBSZW5kZXIgdGhlIG1lbnUgYmFyIGZvciB0aGlzIGdyYXBoCiAgICAgICAgIEl0ZXJhdG9yIG1lbnVzID0gbnVsbDsKICAgICAgICAgUmVzcG9uc2VXcml0ZXIgd3JpdGVyID0gY29udGV4dC5nZXRSZXNwb25zZVdyaXRlcigpOwpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgICAgICBOb2RlIG1lbnUgPSAoTm9kZSkgbWVudXMubmV4dCgpOwogICAgICAgICAgICAgd3JpdGVyLndyaXRlKCI8dGggYmdjb2xvcj1cInNpbHZlclwiIGFsaWduPVwibGVmdFwiPiIpOwogICAgICAgICAgICAgLy8gVGhlIGltYWdlIGxpbmtzIG9mIHRoZSBub2RlcyB0aGF0IGhhdmUgY2hpbGRyZW4gYmVoYXZlIGxpa2UKLSAgICAgICAgICAgIC8vIGNvbW1hbmQgYnV0dG9ucyBjYXVzaW5nIHRoZSBmb3JtIHRvIGJlIHN1Ym1pdHRlZCBzbyB0aGUgc3RhdGUgb2YgCisgICAgICAgICAgICAvLyBjb21tYW5kIGJ1dHRvbnMgY2F1c2luZyB0aGUgZm9ybSB0byBiZSBzdWJtaXR0ZWQgc28gdGhlIHN0YXRlIG9mCiAgICAgICAgICAgICAvLyBub2RlIGNhbiBiZSB0b2dnbGVkCiAgICAgICAgICAgICBpZiAobWVudS5pc0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZSgiPGEgaHJlZj1cIiIpOwpAQCAtMTU0LDcgKzE1NCw3IEBACiAgICAgICAgICAgICAgICAgICAgIE5vZGUgbm9kZSA9IChOb2RlKSBpdGVtcy5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZSgiPGxpPiIpOwogICAgICAgICAgICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGxhYmVsIGZvciB0aGlzIG5vZGUgKGlmIGFueSkgYXMgYQotICAgICAgICAgICAgICAgICAgICAvLyBsaW5rIGlzIHRoZSBub2RlIGlzIGVuYWJsZWQuIAorICAgICAgICAgICAgICAgICAgICAvLyBsaW5rIGlzIHRoZSBub2RlIGlzIGVuYWJsZWQuCiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmdldExhYmVsKCkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlKCIgICAiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBsYWJlbFN0eWxlID0gbnVsbDsKQEAgLTIwNyw5ICsyMDcsOSBAQAogCiAgICAgLyoqCiAgICAgICogPHA+IFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyByZW5kZXJlZCBhcyB0aGUgdmFsdWUgb2YKLSAgICAgKiA8Y29kZT5vbm1vdXNlZG93bjwvY29kZT4gYXR0cmlidXRlLiA8Y29kZT5vbm1vdXNlZG93bjwvY29kZT4gZXZlbnQgCi0gICAgICogaGFuZGxlciBpcyB1c2VkIHRoZSB0cmFjayB0aGUgbm9kZSB0aGF0IHdhcyBjbGlja2VkIHVzaW5nIGEgaGlkZGVuIGZpZWxkLCAKLSAgICAgKiB0aGVuIHN1Ym1pdHMgdGhlIGZvcm0gc28gdGhhdCB3ZSBoYXZlIHRoZSBzdGF0ZSBpbmZvcm1hdGlvbiB0byAKKyAgICAgKiA8Y29kZT5vbm1vdXNlZG93bjwvY29kZT4gYXR0cmlidXRlLiA8Y29kZT5vbm1vdXNlZG93bjwvY29kZT4gZXZlbnQKKyAgICAgKiBoYW5kbGVyIGlzIHVzZWQgdGhlIHRyYWNrIHRoZSBub2RlIHRoYXQgd2FzIGNsaWNrZWQgdXNpbmcgYSBoaWRkZW4gZmllbGQsCisgICAgICogdGhlbiBzdWJtaXRzIHRoZSBmb3JtIHNvIHRoYXQgd2UgaGF2ZSB0aGUgc3RhdGUgaW5mb3JtYXRpb24gdG8KICAgICAgKiByZWNvbnN0aXR1dGUgdGhlIHRyZWUuCiAgICAgICovCiAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTdWJtaXRTY3JpcHQoU3RyaW5nIHBhdGgsIEZhY2VzQ29udGV4dCBjb250ZXh0KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL3JlbmRlcmtpdC9NZW51VHJlZVJlbmRlcmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL3JlbmRlcmtpdC9NZW51VHJlZVJlbmRlcmVyLmphdmEKaW5kZXggMTkzMGFmZC4uYTBlMmY2YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9yZW5kZXJraXQvTWVudVRyZWVSZW5kZXJlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvcmVuZGVya2l0L01lbnVUcmVlUmVuZGVyZXIuamF2YQpAQCAtMTA2LDcgKzEwNiw3IEBACiAKICAgICAgICAgLy8gUmVuZGVyIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBub2RlCiAgICAgICAgIHdyaXRlci53cml0ZSgiICA8dHIgdmFsaWduPVwibWlkZGxlXCI+Iik7Ci0gICAgICAKKwogICAgICAgICAvLyBDcmVhdGUgdGhlIGFwcHJvcHJpYXRlIG51bWJlciBvZiBpbmRlbnRzCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWw7IGkrKykgewogICAgICAgICAgICAgaW50IGxldmVscyA9IGxldmVsIC0gaTsKQEAgLTEyNSwxMyArMTI1LDEzIEBACiAgICAgICAgICAgICB3cml0ZXIud3JpdGUoIlxuIik7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBSZW5kZXIgdGhlIHRyZWUgc3RhdGUgaW1hZ2UgZm9yIHRoaXMgbm9kZS4gdXNlIHRoZSAib25tb3VzZWRvd24iIGV2ZW50IAorICAgICAgICAvLyBSZW5kZXIgdGhlIHRyZWUgc3RhdGUgaW1hZ2UgZm9yIHRoaXMgbm9kZS4gdXNlIHRoZSAib25tb3VzZWRvd24iIGV2ZW50CiAgICAgICAgIC8vIGhhbmRsZXIgdG8gdHJhY2sgd2hpY2ggbm9kZSB3YXMgY2xpY2tlZC4gVGhlIGltYWdlcyBhcmUgcmVuZGVyZWQKICAgICAgICAgLy8gYXMgbGlua3MuCiAgICAgICAgIHdyaXRlci53cml0ZSgiICAgIDx0ZD4iKTsKICAgICAgICAgaWYgKCFub2RlLmlzTGVhZigpKSB7CiAgICAgICAgICAgICAvLyBUaGUgaW1hZ2UgbGlua3Mgb2YgdGhlIG5vZGVzIHRoYXQgaGF2ZSBjaGlsZHJlbiBiZWhhdmUgbGlrZQotICAgICAgICAgICAgLy8gY29tbWFuZCBidXR0b25zIGNhdXNpbmcgdGhlIGZvcm0gdG8gYmUgc3VibWl0dGVkIHNvIHRoZSBzdGF0ZSBvZiAKKyAgICAgICAgICAgIC8vIGNvbW1hbmQgYnV0dG9ucyBjYXVzaW5nIHRoZSBmb3JtIHRvIGJlIHN1Ym1pdHRlZCBzbyB0aGUgc3RhdGUgb2YKICAgICAgICAgICAgIC8vIG5vZGUgY2FuIGJlIHRvZ2dsZWQKICAgICAgICAgICAgIHdyaXRlci53cml0ZSgiPGEgaHJlZj1cIiIpOwogICAgICAgICAgICAgd3JpdGVyLndyaXRlKGdldFN1Ym1pdFNjcmlwdChub2RlLmdldFBhdGgoKSwgY29udGV4dCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9yZW5kZXJraXQvVGFiTGFiZWxSZW5kZXJlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9yZW5kZXJraXQvVGFiTGFiZWxSZW5kZXJlci5qYXZhCmluZGV4IGQyNWQ4ZjIuLjkwNDlmZjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvcmVuZGVya2l0L1RhYkxhYmVsUmVuZGVyZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL3JlbmRlcmtpdC9UYWJMYWJlbFJlbmRlcmVyLmphdmEKQEAgLTYzLDcgKzYzLDcgQEAKICAgICAvLyBSZWxhdGlvbnNoaXAgSW5zdGFuY2UgVmFyaWFibGVzCiAKICAgICAvLwotICAgIC8vIENvbnN0cnVjdG9ycyBhbmQgSW5pdGlhbGl6ZXJzICAgIAorICAgIC8vIENvbnN0cnVjdG9ycyBhbmQgSW5pdGlhbGl6ZXJzCiAgICAgLy8KIAogICAgIHB1YmxpYyBUYWJMYWJlbFJlbmRlcmVyKCkgewpAQCAtMTQ4LDcgKzE0OCw3IEBACiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgCisKICAgICAvLwogICAgIC8vIE1ldGhvZHMgRnJvbSBSZW5kZXJlcgogICAgIC8vCkBAIC0xNjIsNyArMTYyLDcgQEAKICAgICAgICAgLy8gV2FzIG91ciBjb21tYW5kIHRoZSBvbmUgdGhhdCBjYXVzZWQgdGhpcyBzdWJtaXNzaW9uPwogICAgICAgICAvLyB3ZSBkb24nIGhhdmUgdG8gd29ycnkgYWJvdXQgZ2V0dGluZyB0aGUgdmFsdWUgZnJvbSByZXF1ZXN0IHBhcmFtZXRlcgogICAgICAgICAvLyBiZWNhdXNlIHdlIGp1c3QgbmVlZCB0byBrbm93IGlmIHRoaXMgY29tbWFuZCBjYXVzZWQgdGhlIHN1Ym1pc3Npb24uIFdlCi0gICAgICAgIC8vIGNhbiBnZXQgdGhlIGNvbW1hbmQgbmFtZSBieSBjYWxsaW5nIGN1cnJlbnRWYWx1ZS4gVGhpcyB3YXkgd2UgY2FuIAorICAgICAgICAvLyBjYW4gZ2V0IHRoZSBjb21tYW5kIG5hbWUgYnkgY2FsbGluZyBjdXJyZW50VmFsdWUuIFRoaXMgd2F5IHdlIGNhbgogICAgICAgICAvLyBnZXQgYXJvdW5kIHRoZSBJRSBidWcuCiAgICAgICAgIFN0cmluZyBjbGllbnRJZCA9IGNvbXBvbmVudC5nZXRDbGllbnRJZChjb250ZXh0KTsKICAgICAgICAgTWFwIHJlcXVlc3RQYXJhbWV0ZXJNYXAgPSAoTWFwKSBjb250ZXh0LmdldEV4dGVybmFsQ29udGV4dCgpLgpAQCAtMTc3LDcgKzE3Nyw3IEBACiAKICAgICAgICAgLy8gU2VhcmNoIGZvciB0aGlzIGNvbXBvbmVudCdzIHBhcmVudCAidGFiIiBjb21wb25lbnQuLgogICAgICAgICBVSUNvbXBvbmVudCB0YWJDb21wb25lbnQgPSBmaW5kUGFyZW50Rm9yUmVuZGVyZXJUeXBlKGNvbXBvbmVudCwgIlRhYiIpOwotICAgICAgICAKKwogICAgICAgICAvLyBzZXQgdGhlICJ0YWIiIGNvbXBvbmVudCdzICJpZCIgaW4gdGhlIGV2ZW50Li4uCiAKICAgICAgICAgdGFiQ29tcG9uZW50LnF1ZXVlRXZlbnQobmV3IFBhbmVTZWxlY3RlZEV2ZW50KGNvbXBvbmVudCwKQEAgLTI2MSw4ICsyNjEsOCBAQAogICAgIHByaXZhdGUgVUlDb21wb25lbnQgZmluZFBhcmVudEZvclJlbmRlcmVyVHlwZShVSUNvbXBvbmVudCBjb21wb25lbnQsIFN0cmluZyByZW5kZXJlclR5cGUpIHsKICAgICAgICAgT2JqZWN0IGZhY2V0UGFyZW50ID0gbnVsbDsKICAgICAgICAgVUlDb21wb25lbnQgY3VycmVudENvbXBvbmVudCA9IGNvbXBvbmVudDsKLSAgICAgICAgCi0gICAgICAgIC8vIFNlYXJjaCBmb3IgYW4gYW5jZXN0b3IgdGhhdCBpcyB0aGUgc3BlY2lmaWVkIHJlbmRlcmVyIHR5cGU7IAorCisgICAgICAgIC8vIFNlYXJjaCBmb3IgYW4gYW5jZXN0b3IgdGhhdCBpcyB0aGUgc3BlY2lmaWVkIHJlbmRlcmVyIHR5cGU7CiAgICAgICAgIHdoaWxlIChudWxsICE9IChjdXJyZW50Q29tcG9uZW50ID0gY3VycmVudENvbXBvbmVudC5nZXRQYXJlbnQoKSkpIHsKICAgICAgICAgICAgIGlmIChjdXJyZW50Q29tcG9uZW50LmdldFJlbmRlcmVyVHlwZSgpLmVxdWFscyhyZW5kZXJlclR5cGUpKSB7CiAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL3JlbmRlcmtpdC9VdGlsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL3JlbmRlcmtpdC9VdGlsLmphdmEKaW5kZXggZDljODc0MC4uZTVmMmEyYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9yZW5kZXJraXQvVXRpbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvcmVuZGVya2l0L1V0aWwuamF2YQpAQCAtMTM0LDcgKzEzNCw3IEBACiAvLyBSZWxhdGlvbnNoaXAgSW5zdGFuY2UgVmFyaWFibGVzCiAKIC8vCi0vLyBDb25zdHJ1Y3RvcnMgYW5kIEluaXRpYWxpemVycyAgICAKKy8vIENvbnN0cnVjdG9ycyBhbmQgSW5pdGlhbGl6ZXJzCiAvLwogCiAgICAgcHJpdmF0ZSBVdGlsKCkgewpAQCAtMTcwLDcgKzE3MCw3IEBACiAKIAogICAgIC8qKgotICAgICAqIDxwPiBSZXR1cm4gYSBMb2NhbGUgaW5zdGFuY2UgdXNpbmcgdGhlIGZvbGxvd2luZyBhbGdvcml0aG06IAorICAgICAqIDxwPiBSZXR1cm4gYSBMb2NhbGUgaW5zdGFuY2UgdXNpbmcgdGhlIGZvbGxvd2luZyBhbGdvcml0aG06CiAgICAgICoKICAgICAgKiA8dWw+CiAgICAgICoKQEAgLTIwNCw5ICsyMDQsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgICAgICBMb2NhbGUgcmVzdWx0ID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGJ1bmRsZU5hbWUgPSBudWxsLCBidW5kbGVBdHRyID0gImJ1bmRsZSI7Ci0JCi0vLwlQYXJhbWV0ZXJDaGVjay5ub25OdWxsKGNvbnRleHQpOwotLy8JUGFyYW1ldGVyQ2hlY2subm9uTnVsbChjb21wb25lbnQpOworCisvLyAgICBQYXJhbWV0ZXJDaGVjay5ub25OdWxsKGNvbnRleHQpOworLy8gICAgUGFyYW1ldGVyQ2hlY2subm9uTnVsbChjb21wb25lbnQpOwogCiAgICAgICAgIC8vIHZlcmlmeSBvdXIgY29tcG9uZW50IGhhcyB0aGUgcHJvcGVyIGF0dHJpYnV0ZXMgZm9yIGJ1bmRsZS4KICAgICAgICAgaWYgKG51bGwgIT0KQEAgLTIxNyw3ICsyMTcsNyBAQAogICAgICAgICAgICAgICAgIChqYWthcnRhLnNlcnZsZXQuanNwLmpzdGwuZm10LkxvY2FsaXphdGlvbkNvbnRleHQpCiAgICAgICAgICAgICAgICAgKFV0aWwuZ2V0VmFsdWVCaW5kaW5nKGJ1bmRsZU5hbWUpKS5nZXRWYWx1ZShjb250ZXh0KSkpIHsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBsb2NDdHguZ2V0TG9jYWxlKCk7Ci0vLwkJQXNzZXJ0LmFzc2VydF9pdChudWxsICE9IHJlc3VsdCk7CisvLyAgICAgICAgQXNzZXJ0LmFzc2VydF9pdChudWxsICE9IHJlc3VsdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKG51bGwgPT0gcmVzdWx0KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL3RhZ2xpYi9DaGFydEl0ZW1UYWcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdGFnbGliL0NoYXJ0SXRlbVRhZy5qYXZhCmluZGV4IGQ0NDQyMDMuLjhjNjgzOTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdGFnbGliL0NoYXJ0SXRlbVRhZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdGFnbGliL0NoYXJ0SXRlbVRhZy5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgamFrYXJ0YS5mYWNlcy53ZWJhcHAuVUlDb21wb25lbnRUYWc7CiAKIC8qKgotICogPHA+PHN0cm9uZz5DaGFydEl0ZW1UYWc8L3N0cm9uZz4gaXMgdGhlIHRhZyBoYW5kbGVyIHRoYXQgcHJvY2Vzc2VzIHRoZSAKKyAqIDxwPjxzdHJvbmc+Q2hhcnRJdGVtVGFnPC9zdHJvbmc+IGlzIHRoZSB0YWcgaGFuZGxlciB0aGF0IHByb2Nlc3NlcyB0aGUKICAqIDxjb2RlPmNoYXJ0SXRlbTwvY29kZT4gY3VzdG9tIHRhZy48L3A+CiAgKi8KIApAQCAtMzgsNyArMzgsNyBAQAogICAgIC8vIENsYXNzIG1ldGhvZHMKICAgICAvLwogCi0gICAgLy8gCisgICAgLy8KICAgICAvLyBBY2Nlc3NvcnMKICAgICAvLwogCkBAIC02Myw3ICs2Myw3IEBACiAgICAgcHVibGljIHZvaWQgc2V0SXRlbUNvbG9yKFN0cmluZyBjb2xvcikgewogICAgICAgICB0aGlzLml0ZW1Db2xvciA9IGNvbG9yOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIDxwPlRoZSB2YWx1ZSBmb3IgdGhpcyBpdGVtLjwvcD4KICAgICAgKi8KQEAgLTEzNyw3ICsxMzcsNyBAQAogICAgICAgICAgICAgICAgIGNoYXJ0SXRlbS5zZXRJdGVtTGFiZWwoaXRlbUxhYmVsKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAobnVsbCAhPSBpdGVtQ29sb3IpIHsKICAgICAgICAgICAgIGlmIChpc1ZhbHVlUmVmZXJlbmNlKGl0ZW1Db2xvcikpIHsKICAgICAgICAgICAgICAgICBWYWx1ZUJpbmRpbmcgdmIgPSBGYWNlc0NvbnRleHQuZ2V0Q3VycmVudEluc3RhbmNlKCkKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICAgICAgICAgICAgICAgIGNoYXJ0SXRlbS5zZXRJdGVtQ29sb3IoaXRlbUNvbG9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAobnVsbCAhPSBpdGVtVmFsdWUpIHsKICAgICAgICAgICAgIGlmIChpc1ZhbHVlUmVmZXJlbmNlKGl0ZW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICBWYWx1ZUJpbmRpbmcgdmIgPSBGYWNlc0NvbnRleHQuZ2V0Q3VycmVudEluc3RhbmNlKCkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdGFnbGliL0NoYXJ0VGFnLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL3RhZ2xpYi9DaGFydFRhZy5qYXZhCmluZGV4IDQ4MzkwMjAuLjBlZDFkZDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdGFnbGliL0NoYXJ0VGFnLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy90YWdsaWIvQ2hhcnRUYWcuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogCiAKIC8qKgotICogPHA+PHN0cm9uZz5DaGFydFRhZzwvc3Ryb25nPiBpcyB0aGUgdGFnIGhhbmRsZXIgdGhhdCBwcm9jZXNzZXMgdGhlIAorICogPHA+PHN0cm9uZz5DaGFydFRhZzwvc3Ryb25nPiBpcyB0aGUgdGFnIGhhbmRsZXIgdGhhdCBwcm9jZXNzZXMgdGhlCiAgKiA8Y29kZT5jaGFydDwvY29kZT4gY3VzdG9tIHRhZy48L3A+CiAgKi8KIApAQCAtNjUsMTIgKzY1LDEyIEBACiAgICAgcHVibGljIHZvaWQgc2V0T3JpZW50YXRpb24oU3RyaW5nIG9yaWVudGF0aW9uKSB7CiAgICAgICAgIHRoaXMub3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyB2YWx1ZSA9IG51bGw7CiAgICAgcHVibGljIHZvaWQgc2V0VmFsdWUoU3RyaW5nIHZhbHVlKSB7CiAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiA8cD5UaGUgdHlwZSBvZiBjaGFydC4gIFZhbHVlcyBjYW4gYmUgImJhciIgb3IgInBpZSIuCiAgICAgICovCkBAIC0xNTIsNyArMTUyLDcgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBzZXRQcm9wZXJ0aWVzKFVJQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgICAgICBzdXBlci5zZXRQcm9wZXJ0aWVzKGNvbXBvbmVudCk7CiAgICAgICAgIENoYXJ0Q29tcG9uZW50IGNoYXJ0ID0gKENoYXJ0Q29tcG9uZW50KSBjb21wb25lbnQ7Ci0gICAgICAgCisKICAgICAgICAgaWYgKHdpZHRoICE9IG51bGwpIHsKICAgICAgICAgICAgIGlmIChpc1ZhbHVlUmVmZXJlbmNlKHdpZHRoKSkgewogICAgICAgICAgICAgICAgIFZhbHVlQmluZGluZyB2YiA9IEZhY2VzQ29udGV4dC5nZXRDdXJyZW50SW5zdGFuY2UoKQpAQCAtMTYyLDcgKzE2Miw3IEBACiAgICAgICAgICAgICAgICAgY2hhcnQuc2V0V2lkdGgod2lkdGgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChoZWlnaHQgIT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKGlzVmFsdWVSZWZlcmVuY2UoaGVpZ2h0KSkgewogICAgICAgICAgICAgICAgIFZhbHVlQmluZGluZyB2YiA9IEZhY2VzQ29udGV4dC5nZXRDdXJyZW50SW5zdGFuY2UoKQpAQCAtMTcyLDcgKzE3Miw3IEBACiAgICAgICAgICAgICAgICAgY2hhcnQuc2V0SGVpZ2h0KGhlaWdodCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKG9yaWVudGF0aW9uICE9IG51bGwpIHsKICAgICAgICAgICAgIGlmIChpc1ZhbHVlUmVmZXJlbmNlKG9yaWVudGF0aW9uKSkgewogICAgICAgICAgICAgICAgIFZhbHVlQmluZGluZyB2YiA9IEZhY2VzQ29udGV4dC5nZXRDdXJyZW50SW5zdGFuY2UoKQpAQCAtMTgyLDcgKzE4Miw3IEBACiAgICAgICAgICAgICAgICAgY2hhcnQuc2V0T3JpZW50YXRpb24ob3JpZW50YXRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmICh0eXBlICE9IG51bGwpIHsKICAgICAgICAgICAgIGlmIChpc1ZhbHVlUmVmZXJlbmNlKHR5cGUpKSB7CiAgICAgICAgICAgICAgICAgVmFsdWVCaW5kaW5nIHZiID0gRmFjZXNDb250ZXh0LmdldEN1cnJlbnRJbnN0YW5jZSgpCkBAIC0xOTIsNyArMTkyLDcgQEAKICAgICAgICAgICAgICAgICBjaGFydC5zZXRUeXBlKHR5cGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgICAgICBpZiAoaXNWYWx1ZVJlZmVyZW5jZSh2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICBWYWx1ZUJpbmRpbmcgdmIgPSBGYWNlc0NvbnRleHQuZ2V0Q3VycmVudEluc3RhbmNlKCkKQEAgLTIwMiw3ICsyMDIsNyBAQAogICAgICAgICAgICAgICAgIGNoYXJ0LnNldFZhbHVlKHZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAodGl0bGUgIT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKGlzVmFsdWVSZWZlcmVuY2UodGl0bGUpKSB7CiAgICAgICAgICAgICAgICAgVmFsdWVCaW5kaW5nIHZiID0gRmFjZXNDb250ZXh0LmdldEN1cnJlbnRJbnN0YW5jZSgpCkBAIC0yMTIsNyArMjEyLDcgQEAKICAgICAgICAgICAgICAgICBjaGFydC5zZXRUaXRsZSh0aXRsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKHhsYWJlbCAhPSBudWxsKSB7CiAgICAgICAgICAgICBpZiAoaXNWYWx1ZVJlZmVyZW5jZSh4bGFiZWwpKSB7CiAgICAgICAgICAgICAgICAgVmFsdWVCaW5kaW5nIHZiID0gRmFjZXNDb250ZXh0LmdldEN1cnJlbnRJbnN0YW5jZSgpCkBAIC0yMjIsNyArMjIyLDcgQEAKICAgICAgICAgICAgICAgICBjaGFydC5zZXRYbGFiZWwoeGxhYmVsKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoeWxhYmVsICE9IG51bGwpIHsKICAgICAgICAgICAgIGlmIChpc1ZhbHVlUmVmZXJlbmNlKHlsYWJlbCkpIHsKICAgICAgICAgICAgICAgICBWYWx1ZUJpbmRpbmcgdmIgPSBGYWNlc0NvbnRleHQuZ2V0Q3VycmVudEluc3RhbmNlKCkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdGFnbGliL0dyYXBoTWVudUJhclRhZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy90YWdsaWIvR3JhcGhNZW51QmFyVGFnLmphdmEKaW5kZXggOTQwMDNkZC4uMTFkMGNhZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy90YWdsaWIvR3JhcGhNZW51QmFyVGFnLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy90YWdsaWIvR3JhcGhNZW51QmFyVGFnLmphdmEKQEAgLTE5Myw4ICsxOTMsOCBAQAogICAgICAgICAgICAgdmIgPQogICAgICAgICAgICAgICAgIGNvbnRleHQuZ2V0QXBwbGljYXRpb24oKS5jcmVhdGVWYWx1ZUJpbmRpbmcoCiAgICAgICAgICAgICAgICAgICAgICIje3Nlc3Npb25TY29wZS5ncmFwaF9tZW51fSIpOwotICAgICAgICAgICAgY29tcG9uZW50LnNldFZhbHVlQmluZGluZygidmFsdWUiLCB2Yik7IAotICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbXBvbmVudC5zZXRWYWx1ZUJpbmRpbmcoInZhbHVlIiwgdmIpOworCiAgICAgICAgICAgICAvLyBJbiB0aGUgcG9zdGJhY2sgY2FzZSwgZ3JhcGggZXhpc3RzIGFscmVhZHkuIFNvIG1ha2Ugc3VyZQogICAgICAgICAgICAgLy8gaXQgZG9lc24ndCBjcmVhdGVkIGFnYWluLgogICAgICAgICAgICAgR3JhcGggZ3JhcGggPSAoR3JhcGgpICgoR3JhcGhDb21wb25lbnQpIGNvbXBvbmVudCkuZ2V0VmFsdWUoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdGFnbGliL0dyYXBoTWVudU5vZGVUYWcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdGFnbGliL0dyYXBoTWVudU5vZGVUYWcuamF2YQppbmRleCBiZGEyNjQwLi4yYmRmN2IxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL3RhZ2xpYi9HcmFwaE1lbnVOb2RlVGFnLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy90YWdsaWIvR3JhcGhNZW51Tm9kZVRhZy5qYXZhCkBAIC02MiwxMSArNjIsMTEgQEAKICAgICBwcml2YXRlIFN0cmluZyBhY3Rpb24gPSBudWxsOwogICAgIHByaXZhdGUgYm9vbGVhbiBleHBhbmRlZDsKICAgICBwcml2YXRlIGJvb2xlYW4gZW5hYmxlZCA9IHRydWU7Ci0gICAKKwogICAgIC8vIFJlbGF0aW9uc2hpcCBJbnN0YW5jZSBWYXJpYWJsZXMKIAogICAgIC8vCi0gICAgLy8gQ29uc3RydWN0b3JzIGFuZCBJbml0aWFsaXplcnMgICAgCisgICAgLy8gQ29uc3RydWN0b3JzIGFuZCBJbml0aWFsaXplcnMKICAgICAvLwogCiAgICAgcHVibGljIEdyYXBoTWVudU5vZGVUYWcoKSB7CkBAIC04MCw3ICs4MCw3IEBACiAgICAgLy8KICAgICAvLyBHZW5lcmFsIE1ldGhvZHMKICAgICAvLwotICAgCisKICAgICAvKioKICAgICAgKiBOYW1lIG9mIHRoZSBub2RlCiAgICAgICovCkBAIC0xOTEsNSArMTkxLDUgQEAKICAgICB9CiAKIH0KLSAgICAKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL3RhZ2xpYi9HcmFwaE1lbnVUcmVlVGFnLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL3RhZ2xpYi9HcmFwaE1lbnVUcmVlVGFnLmphdmEKaW5kZXggMmViZjM3ZS4uMmNhODhhZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy90YWdsaWIvR3JhcGhNZW51VHJlZVRhZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdGFnbGliL0dyYXBoTWVudVRyZWVUYWcuamF2YQpAQCAtMTg2LDE1ICsxODYsMTUgQEAKICAgICAgICAgICAgICAgICBjb21wb25lbnQuc2V0VmFsdWVCaW5kaW5nKCJ2YWx1ZSIsIHZiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyB2YWx1ZVJlZiBhdHRyaWJ1dGUgc2V0IG9uIHRoaXMgdGFnLCB0aGVuCiAgICAgICAgIC8vIHdlIG5lZWQgdG8gYnVpbGQgdGhlIGdyYXBoLgogICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICAgICAgICAgdmIgPQogICAgICAgICAgICAgICAgIGNvbnRleHQuZ2V0QXBwbGljYXRpb24oKS5jcmVhdGVWYWx1ZUJpbmRpbmcoCiAgICAgICAgICAgICAgICAgICAgICIje3Nlc3Npb25TY29wZS5ncmFwaF90cmVlfSIpOwotICAgICAgICAgICAgY29tcG9uZW50LnNldFZhbHVlQmluZGluZygidmFsdWUiLCB2Yik7IAotICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbXBvbmVudC5zZXRWYWx1ZUJpbmRpbmcoInZhbHVlIiwgdmIpOworCiAgICAgICAgICAgICAvLyBJbiB0aGUgcG9zdGJhY2sgY2FzZSwgZ3JhcGggZXhpc3RzIGFscmVhZHkuIFNvIG1ha2Ugc3VyZQogICAgICAgICAgICAgLy8gaXQgZG9lc24ndCBjcmVhdGVkIGFnYWluLgogICAgICAgICAgICAgR3JhcGggZ3JhcGggPSAoR3JhcGgpICgoR3JhcGhDb21wb25lbnQpIGNvbXBvbmVudCkuZ2V0VmFsdWUoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdGFnbGliL0dyYXBoVHJlZU5vZGVUYWcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdGFnbGliL0dyYXBoVHJlZU5vZGVUYWcuamF2YQppbmRleCBmNWRkZDE3Li45N2QxMTg5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL3RhZ2xpYi9HcmFwaFRyZWVOb2RlVGFnLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy90YWdsaWIvR3JhcGhUcmVlTm9kZVRhZy5qYXZhCkBAIC02MiwxMSArNjIsMTEgQEAKICAgICBwcml2YXRlIFN0cmluZyBhY3Rpb24gPSBudWxsOwogICAgIHByaXZhdGUgYm9vbGVhbiBleHBhbmRlZDsKICAgICBwcml2YXRlIGJvb2xlYW4gZW5hYmxlZCA9IHRydWU7Ci0gICAKKwogICAgIC8vIFJlbGF0aW9uc2hpcCBJbnN0YW5jZSBWYXJpYWJsZXMKIAogICAgIC8vCi0gICAgLy8gQ29uc3RydWN0b3JzIGFuZCBJbml0aWFsaXplcnMgICAgCisgICAgLy8gQ29uc3RydWN0b3JzIGFuZCBJbml0aWFsaXplcnMKICAgICAvLwogCiAgICAgcHVibGljIEdyYXBoVHJlZU5vZGVUYWcoKSB7CkBAIC0xNTksNyArMTU5LDcgQEAKICAgICAgICAgICAgIHJldHVybiBCb2R5VGFnLkVWQUxfQk9EWV9CVUZGRVJFRDsKICAgICAgICAgfQogICAgICAgICBOb2RlIG5vZGUgPSBuZXcgTm9kZShuYW1lLCBsYWJlbCwgYWN0aW9uLCBpY29uLCBlbmFibGVkLCBleHBhbmRlZCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIGdldCB0aGUgaW1tZWRpYXRlIGFuY2VzdG9yL3BhcmVudCB0YWcgb2YgdGhpcyB0YWcuCiAgICAgICAgIEdyYXBoVHJlZU5vZGVUYWcgcGFyZW50Tm9kZSA9IG51bGw7CiAgICAgICAgIHRyeSB7CkBAIC0xNjksNyArMTY5LDcgQEAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigKICAgICAgICAgICAgICAgICAiRXhjZXB0aW9uIHdoaWxlIGxvY2F0aW5nIEdyYXBoVHJlZU5vZGVUYWcuY2xhc3MiKTsKLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgICAgICAvLyBpZiB0aGlzIHRhZyBoYXMgbm8gcGFyZW50IHRoYXQgaXMgYSBub2RlIHRhZywKICAgICAgICAgaWYgKHBhcmVudE5vZGUgPT0gbnVsbCkgewogICAgICAgICAgICAgLy8gdGhlbiB0aGlzIHNob3VsZCBiZSByb290CkBAIC0xOTIsNSArMTkyLDUgQEAKICAgICB9CiAKIH0KLSAgICAKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL3RhZ2xpYi9QYW5lVGFiTGFiZWxUYWcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdGFnbGliL1BhbmVUYWJMYWJlbFRhZy5qYXZhCmluZGV4IGU3YzZjYjIuLmY4NDMzOGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdGFnbGliL1BhbmVUYWJMYWJlbFRhZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdGFnbGliL1BhbmVUYWJMYWJlbFRhZy5qYXZhCkBAIC03MywxMSArNzMsMTEgQEAKIAogICAgIHByb3RlY3RlZCBTdHJpbmcgcGFuZVRhYkxhYmVsQ2xhc3M7CiAgICAgcHVibGljIFN0cmluZyBnZXRQYW5lVGFiTGFiZWxDbGFzcygpIHsKLQlyZXR1cm4gcGFuZVRhYkxhYmVsQ2xhc3M7CisgICAgcmV0dXJuIHBhbmVUYWJMYWJlbENsYXNzOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFBhbmVUYWJMYWJlbENsYXNzKFN0cmluZyBuZXdQYW5lVGFiTGFiZWxDbGFzcykgewotCXBhbmVUYWJMYWJlbENsYXNzID0gbmV3UGFuZVRhYkxhYmVsQ2xhc3M7CisgICAgcGFuZVRhYkxhYmVsQ2xhc3MgPSBuZXdQYW5lVGFiTGFiZWxDbGFzczsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewpAQCAtMTMyLDggKzEzMiw4IEBACiAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVZhbHVlQmluZGluZyhwYW5lVGFiTGFiZWxDbGFzcyk7CiAgICAgICAgICAgICAgICAgY29tcG9uZW50LnNldFZhbHVlQmluZGluZygicGFuZVRhYkxhYmVsQ2xhc3MiLCB2Yik7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbXBvbmVudC5nZXRBdHRyaWJ1dGVzKCkucHV0KCJwYW5lVGFiTGFiZWxDbGFzcyIsIAotCQkJCQkgICAgICBwYW5lVGFiTGFiZWxDbGFzcyk7CisgICAgICAgICAgICAgICAgY29tcG9uZW50LmdldEF0dHJpYnV0ZXMoKS5wdXQoInBhbmVUYWJMYWJlbENsYXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZVRhYkxhYmVsQ2xhc3MpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdGFnbGliL1BhbmVUYWJUYWcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdGFnbGliL1BhbmVUYWJUYWcuamF2YQppbmRleCA1NjcwMjRhLi4xZmRhMTM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL3RhZ2xpYi9QYW5lVGFiVGFnLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy90YWdsaWIvUGFuZVRhYlRhZy5qYXZhCkBAIC01NSwxMSArNTUsMTEgQEAKIAogICAgIHByb3RlY3RlZCBTdHJpbmcgcGFuZUNsYXNzOwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFuZUNsYXNzKCkgewotCXJldHVybiBwYW5lQ2xhc3M7CisgICAgcmV0dXJuIHBhbmVDbGFzczsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRQYW5lQ2xhc3MoU3RyaW5nIG5ld1BhbmVDbGFzcykgewotCXBhbmVDbGFzcyA9IG5ld1BhbmVDbGFzczsKKyAgICBwYW5lQ2xhc3MgPSBuZXdQYW5lQ2xhc3M7CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdGFnbGliL1Njcm9sbGVyVGFnLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL3RhZ2xpYi9TY3JvbGxlclRhZy5qYXZhCmluZGV4IGRmY2M1NzguLjBiMGYyNmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdGFnbGliL1Njcm9sbGVyVGFnLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy90YWdsaWIvU2Nyb2xsZXJUYWcuamF2YQpAQCAtNTIsNyArNTIsNyBAQAogICAgICAqIFdoZW4gcmVuZGVyaW5nIGEgd2lkZ2V0IHJlcHJlc2VudGluZyAicGFnZSBuYXZpZ2F0aW9uIiB3aGVyZQogICAgICAqIHNob3VsZCB0aGUgZmFjZXQgbWFya3VwIGJlIHJlbmRlcmVkIGluIHJlbGF0aW9uIHRvIHRoZSBwYWdlCiAgICAgICogbmF2aWdhdGlvbiB3aWRnZXQ/ICBWYWx1ZXMgYXJlICJOT1JUSCIsICJTT1VUSCIsICJFQVNUIiwgIldFU1QiLgotICAgICAqIENhc2UgaW5zZW5zaXRpdmUuIFRoaXMgY2FuIGJlIHZhbHVlIG9yIGEgdmFsdWUgYmluZGluZyAKKyAgICAgKiBDYXNlIGluc2Vuc2l0aXZlLiBUaGlzIGNhbiBiZSB2YWx1ZSBvciBhIHZhbHVlIGJpbmRpbmcKICAgICAgKiByZWZlcmVuY2UgZXhwcmVzc2lvbi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXROYXZGYWNldE9yaWVudGF0aW9uKFN0cmluZyBuYXZGYWNldE9yaWVudGF0aW9uKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9kZW1vL21vZGVsL0NoYXJ0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvZGVtby9tb2RlbC9DaGFydEJlYW4uamF2YQppbmRleCAyNzMxYjBkLi5mZDBkZjNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9kZW1vL21vZGVsL0NoYXJ0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2RlbW8vbW9kZWwvQ2hhcnRCZWFuLmphdmEKQEAgLTI3LDkgKzI3LDkgQEAKIHB1YmxpYyBjbGFzcyBDaGFydEJlYW4gewogCiAgICAgLy8gQmFyIENoYXJ0IFByb3BlcnRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50CVZFUlRJQ0FMID0gMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCAJSE9SSVpPTlRBTCA9IDE7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCAgICBWRVJUSUNBTCA9IDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgICAgIEhPUklaT05UQUwgPSAxOwogCiAgICAgcHJpdmF0ZSBpbnQgb3JpZW50YXRpb24gPSBWRVJUSUNBTDsKICAgICBwdWJsaWMgaW50IGdldE9yaWVudGF0aW9uKCkgewpAQCAtMzgsOSArMzgsOSBAQAogICAgIHB1YmxpYyB2b2lkIHNldE9yaWVudGF0aW9uKGludCBvcmllbnRhdGlvbikgewogICAgICAgICB0aGlzLm9yaWVudGF0aW9uID0gb3JpZW50YXRpb247CiAgICAgfQotICAgIAorCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIAorCiAgICAgcHJpdmF0ZSBpbnQgY29sdW1ucyA9IDA7CiAgICAgcHVibGljIGludCBnZXRDb2x1bW5zKCkgewogICAgICAgICByZXR1cm4gY29sdW1uczsKQEAgLTg3LDE0ICs4NywxNCBAQAogCiAgICAgcHVibGljIENoYXJ0QmVhbigpIHsKIAotCXNldFdpZHRoKDQwMCk7Ci0Jc2V0SGVpZ2h0KDMwMCk7Ci0Jc2V0Q29sdW1ucygyKTsKLQlzZXRPcmllbnRhdGlvbihDaGFydEJlYW4uSE9SSVpPTlRBTCk7CisgICAgc2V0V2lkdGgoNDAwKTsKKyAgICBzZXRIZWlnaHQoMzAwKTsKKyAgICBzZXRDb2x1bW5zKDIpOworICAgIHNldE9yaWVudGF0aW9uKENoYXJ0QmVhbi5IT1JJWk9OVEFMKTsKIAogICAgICAgICBjaGFydEl0ZW1zID0gbmV3IEFycmF5TGlzdChjb2x1bW5zKTsKLQljaGFydEl0ZW1zLmFkZChuZXcgQ2hhcnRJdGVtKCJvbmUiLCAxMCwgInJlZCIpKTsKLQljaGFydEl0ZW1zLmFkZChuZXcgQ2hhcnRJdGVtKCJ0d28iLCAyMCwgImJsdWUiKSk7CisgICAgY2hhcnRJdGVtcy5hZGQobmV3IENoYXJ0SXRlbSgib25lIiwgMTAsICJyZWQiKSk7CisgICAgY2hhcnRJdGVtcy5hZGQobmV3IENoYXJ0SXRlbSgidHdvIiwgMjAsICJibHVlIikpOwogCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvZGVtby90YWdsaWIvRXNjYXBlSHRtbFRhZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvanNmY29tcG9uZW50cy9zcmMvZGVtby90YWdsaWIvRXNjYXBlSHRtbFRhZy5qYXZhCmluZGV4IDg4NzE2MDguLjI5ZWNlNDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2pzZmNvbXBvbmVudHMvc3JjL2RlbW8vdGFnbGliL0VzY2FwZUh0bWxUYWcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9qc2Zjb21wb25lbnRzL3NyYy9kZW1vL3RhZ2xpYi9Fc2NhcGVIdG1sVGFnLmphdmEKQEAgLTc5LDEzICs3OSwxMyBAQAogCiAgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAvLyBJbnN0YW5jZSB2YXJpYWJsZXMKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIHJlYWRlcjsKICAgICBwcml2YXRlIFN0cmluZyB3cml0ZXI7Ci0gICAgCisKICAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgIC8vIENvbnN0cnVjdG9ycwotICAgIAorCiAgICAgcHVibGljIEVzY2FwZUh0bWxUYWcoKSB7CiAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgIGluaXQoKTsKQEAgLTk2LDExICs5NiwxMSBAQAogICAgICAgICByZWFkZXIgPSBudWxsOwogICAgICAgICB3cml0ZXIgPSBudWxsOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAvLyBUYWcncyBwcm9wZXJ0aWVzCi0gICAgCisKICAgICAvKioKICAgICAgKiBUYWcncyAncmVhZGVyJyBhdHRyaWJ1dGUKICAgICAgKi8KQEAgLTExNSwxMCArMTE1LDEwIEBACiAgICAgcHVibGljIHZvaWQgc2V0V3JpdGVyKFN0cmluZyByZWFkZXIpIHsKICAgICAgICAgdGhpcy53cml0ZXIgPSB3cml0ZXI7CiAgICAgfQotICAgIAorCiAgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAvLyBUYWdTdXBwb3J0IG1ldGhvZHMKLSAgICAKKwogICAgIHB1YmxpYyBpbnQgZG9FbmRUYWcoKSB0aHJvd3MgSnNwRXhjZXB0aW9uIHsKICAgICAgICAgUmVhZGVyIGluOwogICAgICAgICBXcml0ZXIgb3V0OwpAQCAtMTUyLDEwICsxNTIsMTAgQEAKICAgICAgICAgc3VwZXIucmVsZWFzZSgpOwogICAgICAgICBpbml0KCk7CiAgICAgfQotICAgIAorCiAgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAvLyBUYWcncyBzY2lmaWMgYmVoYXZpb3IgbWV0aG9kcwotICAgIAorCiAgICAgLyoqCiAgICAgICogVHJhbnNmb3JtCiAgICAgICovCkBAIC0xNzksMTAgKzE3OSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgY29weWluZyBjaGFycyIsIGV4KTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgLy8gVXRpbGl0eSBtZXRob2RzCi0gICAgCisKICAgICAvKioKICAgICAgKiBFdmFsdWF0ZSBlbGV4cHJ2YWx1ZQogICAgICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvbG9nZ2luZy9UZXN0TGlmZWN5Y2xlTW9kdWxlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9sb2dnaW5nL1Rlc3RMaWZlY3ljbGVNb2R1bGUuamF2YQppbmRleCBhNjBiZmEwLi43OGU5OGEwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9sb2dnaW5nL1Rlc3RMaWZlY3ljbGVNb2R1bGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9sb2dnaW5nL1Rlc3RMaWZlY3ljbGVNb2R1bGUuamF2YQpAQCAtMjcsNTMgKzI3LDUzIEBACiAKIHB1YmxpYyBjbGFzcyBUZXN0TGlmZWN5Y2xlTW9kdWxlIGltcGxlbWVudHMgTGlmZWN5Y2xlTGlzdGVuZXIgewogCi0gICAgLy8gcmVjZWl2ZSBhIHNlcnZlciBsaWZlY3ljbGUgZXZlbnQgCisgICAgLy8gcmVjZWl2ZSBhIHNlcnZlciBsaWZlY3ljbGUgZXZlbnQKICAgICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChMaWZlY3ljbGVFdmVudCBldmVudCkgdGhyb3dzIFNlcnZlckxpZmVjeWNsZUV4Y2VwdGlvbiB7CiAKLQlMaWZlY3ljbGVFdmVudENvbnRleHQgY3R4ID0gZXZlbnQuZ2V0TGlmZWN5Y2xlRXZlbnRDb250ZXh0KCk7CisgICAgTGlmZWN5Y2xlRXZlbnRDb250ZXh0IGN0eCA9IGV2ZW50LmdldExpZmVjeWNsZUV2ZW50Q29udGV4dCgpOwogICAgICAgICBpZiAoTGlmZWN5Y2xlRXZlbnQuSU5JVF9FVkVOVCA9PSBldmVudC5nZXRFdmVudFR5cGUoKSkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioiKTsKICAgICAgICAgICAgIGN0eC5sb2coIlRlc3RMaWZlY3ljbGVNb2R1bGU6IElOSVRfRVZFTlQgUEFTU0VEIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKiIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKExpZmVjeWNsZUV2ZW50LlNUQVJUVVBfRVZFTlQgPT0gZXZlbnQuZ2V0RXZlbnRUeXBlKCkpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqIik7CiAgICAgICAgICAgICBjdHgubG9nKCJUZXN0TGlmZWN5Y2xlTW9kdWxlOiBTVEFSVFVQX0VWRU5UIFBBU1NFRCIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChMaWZlY3ljbGVFdmVudC5SRUFEWV9FVkVOVCA9PSBldmVudC5nZXRFdmVudFR5cGUoKSkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioiKTsKICAgICAgICAgICAgIGN0eC5sb2coIlRlc3RMaWZlY3ljbGVNb2R1bGU6IFJFQURZX0VWRU5UIFBBU1NFRCIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioiKTsKIAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChMaWZlY3ljbGVFdmVudC5TSFVURE9XTl9FVkVOVD09IGV2ZW50LmdldEV2ZW50VHlwZSgpKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKiIpOwogICAgICAgICAgICAgY3R4LmxvZygiVGVzdExpZmVjeWNsZU1vZHVsZTogU0hVVERPV05fRVZFTlQgUEFTU0VEIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKiIpOwogCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoTGlmZWN5Y2xlRXZlbnQuVEVSTUlOQVRJT05fRVZFTlQgPT0gZXZlbnQuZ2V0RXZlbnRUeXBlKCkpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqIik7CiAgICAgICAgICAgICBjdHgubG9nKCJUZXN0TGlmZWN5Y2xlTW9kdWxlOiBURVJNSU5BVElPTl9FVkVOVCBQQVNTRUQiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqIik7CiAKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvbG9nZ2luZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvbG9nZ2luZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDg2MWJhM2MuLmQ0YTVkNWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2xvZ2dpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9sb2dnaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ibG9nZ2luZyIvPgogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9IlRlc3RMaWZlY3ljbGVNb2R1bGUiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJUZXN0TGlmZWN5Y2xlTW9kdWxlIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGVuYW1lIiB2YWx1ZT0iVGVzdExpZmVjeWNsZU1vZHVsZSIvPgogPHByb3BlcnR5IG5hbWU9InNlcnZlcm5hbWUiIHZhbHVlPSJzZXJ2ZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL2xvZ2dpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvbG9nZ2luZy9idWlsZC54bWwKaW5kZXggNjM2ZWIyNi4uMGRhYmJiMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvbG9nZ2luZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvbG9nZ2luZy9idWlsZC54bWwKQEAgLTMwLDE0ICszMCwxNCBAQAogICAgICZjb21tb25CdWlsZDsKICAgICAmY29tbW9uUnVuOwogICAgICZ0ZXN0cHJvcGVydGllczsKLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxzZXR1cCxyZXN0YXJ0LHVuc2V0dXAiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QiIGRlcGVuZHM9ImJ1aWxkLHNldHVwLHJlc3RhcnQiLz4KICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWxpZmVjeWNsZSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC1saWZlY3ljbGUtY2xhc3NwYXRoIi8+CkBAIC05MSw3ICs5MSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWxpZmVjeWNsZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtbGlmZWN5Y2xlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGVjaG8gbWVzc2FnZT0iRGVsZXRpbmcgTGlmZSBDeWNsZSBNb2R1bGUgJHttb2R1bGVuYW1lfSIvPgogICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CkBAIC0xMDgsOCArMTA4LDggQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvbWFuYWdlbWVudC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9tYW5hZ2VtZW50L2J1aWxkLnhtbAppbmRleCAwNTYzNGEzLi5jMzlkMTdhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9tYW5hZ2VtZW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9tYW5hZ2VtZW50L2J1aWxkLnhtbApAQCAtMjcsNDkgKzI3LDQ5IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibWVqYi10YXJnZXQiIHZhbHVlPSJhbGwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJtZWpidGVzdHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im1lamItdGFyZ2V0IiB2YWx1ZT0icnVuLXRlc3QiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJtZWpidGVzdHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im1lamItdGFyZ2V0IiB2YWx1ZT0iY2xlYW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJtZWpidGVzdHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im1lamItdGFyZ2V0IiB2YWx1ZT0iYnVpbGQiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibWVqYnRlc3RzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJtZWpiLXRhcmdldCIgdmFsdWU9ImRlcGxveSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9Im1lamJ0ZXN0cyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibWVqYi10YXJnZXQiIHZhbHVlPSJ1bmRlcGxveSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJtZWpidGVzdHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im1lamItdGFyZ2V0IiB2YWx1ZT0icnVuIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibWVqYnRlc3RzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJtZWpiLXRhcmdldCIgdmFsdWU9InNldHVwIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJtZWpidGVzdHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im1lamItdGFyZ2V0IiB2YWx1ZT0idW5zZXR1cCIvPgpAQCAtOTAsNyArOTAsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+IFVzYWdlOgorICAgIDxlY2hvPiBVc2FnZToKICAgICA9PT09PT09PSBUYXJnZXRzIGJ5IGV4ZWN1dGlvbiBncmFudWxhcml0eSA9PT09PT09PT0KIAogICAgIGFudCBjbGVhbiAoQ2xlYW5zIGFsbCBtYW5hZ2VtZW50IHRlc3RzKQpAQCAtMTA3LDExICsxMDcsMTEgQEAKICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIG1lamIgdGVzdHMpCiAKICAgICA9PT09PSBUYXJnZXRzIGJ5IHRlY2hub2xveSBhbmQgZXhlY3V0aW9uIGdyYW51bGFyaXR5ID09PT09PQotICAgIE5vdGU6IFJ1biB0aGUgY29tbWFuZCBvZiB0aGUgZm9sbG93aW5nIHR5cGU6IAorICAgIE5vdGU6IFJ1biB0aGUgY29tbWFuZCBvZiB0aGUgZm9sbG93aW5nIHR5cGU6CiAKICAgICAgICAgICAgICUgYW50IG1lamIgLURtZWpiLXRhcmdldD1jbGVhbgogCiAgICAgdG8gcnVuIHRoZSAnY2xlYW4nIHRhcmdldCBmb3IgJ3N0YXRlbGVzcycgdGVzdHMKLQk8L2VjaG8+CisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvbWFuYWdlbWVudC9tZWpiL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9tYW5hZ2VtZW50L21lamIvYnVpbGQucHJvcGVydGllcwppbmRleCAzNDRkN2M1Li4zYjFiOGIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9tYW5hZ2VtZW50L21lamIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9tYW5hZ2VtZW50L21lamIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjAgKzE1LDIwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJtYW5hZ2VtZW50LW1lamIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJtYW5hZ2VtZW50LW1lamJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0ibWFuYWdlbWVudC1tZWpiQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0idmVyYm9zZS5tb2RlIiB2YWx1ZT0iZmFsc2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL21hbmFnZW1lbnQvbWVqYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9tYW5hZ2VtZW50L21lamIvYnVpbGQueG1sCmluZGV4IDJlYmIxNDYuLmViODIyNjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL21hbmFnZW1lbnQvbWVqYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvbWFuYWdlbWVudC9tZWpiL2J1aWxkLnhtbApAQCAtMzMsMTYgKzMzLDE2IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdCIgZGVwZW5kcz0iY2xlYW4sYnVpbGQsZGVwbG95LHJ1bix1bmRlcGxveSIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtZmlsZS11c2VycyIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWZpbGUtdXNlcnMiLz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiPgotCTxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWZpbGUtdXNlcnMiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1maWxlLXVzZXJzIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KQEAgLTUxLDEzICs1MSwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXBwY2xpZW50LWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzIiAvPgotICAgICAgICA8L2FudGNhbGw+ICAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjYsMTIgKzY2LDEyIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IiR7dmVyYm9zZS5tb2RlfSIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgIAorCiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL21hbmFnZW1lbnQvbWVqYi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9tYW5hZ2VtZW50L21lamIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDcwZjhkZWYuLjBiNzkxM2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL21hbmFnZW1lbnQvbWVqYi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvbWFuYWdlbWVudC9tZWpiL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjcsNTkgKzI3LDU5IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewotICAgIAorCiAgICAgLy8gY29uc3RzCiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3ROb3RSdW4gICAgPSAiVEVTVCBOT1QgUlVOIjsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdFBhc3NlZCAgICA9ICJURVNUIFBBU1NFRCI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RGYWlsZWQgICAgPSAiVEVTVCBGQUlMRUQiOwogICAgIHB1YmxpYyBib29sZWFuIERFQlVHICAgID0gZmFsc2U7Ci0gICAgCisKICAgICBTdHJpbmcgam5kaU5hbWUgPSAiZWpiL21nbXQvTUVKQiI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIm1hbmFnZW1lbnQtbWVqYiIpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgibWFuYWdlbWVudC1tZWpiIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIFN0cmluZyBkZWJ1Zz1hcmdzWzBdOwotICAgICAgICBpZihkZWJ1Zy5lcXVhbHNJZ25vcmVDYXNlKCJmYWxzZSIpKSAKLSAgICAgICAgREVCVUc9ZmFsc2U7ICAgICAgICAgICAgICAgCi0gICAgICAgIGlmKGRlYnVnLmVxdWFsc0lnbm9yZUNhc2UoInRydWUiKSkgCi0gICAgICAgIERFQlVHPXRydWU7ICAgICAgICAgCi0gICAgfSAgCisgICAgICAgIGlmKGRlYnVnLmVxdWFsc0lnbm9yZUNhc2UoImZhbHNlIikpCisgICAgICAgIERFQlVHPWZhbHNlOworICAgICAgICBpZihkZWJ1Zy5lcXVhbHNJZ25vcmVDYXNlKCJ0cnVlIikpCisgICAgICAgIERFQlVHPXRydWU7CisgICAgfQogCi0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KCkgewotICAgICAgICAKKwogICAgICAgICBib29sZWFuIHBhc3MgPSB0cnVlOwogICAgICAgICBTdHJpbmcgcmVzID0ga1Rlc3ROb3RSdW47Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKipDcmVhdGVkIGluaXRpYWwgY29udGV4dCIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJlamIvbWdtdC9NRUpCIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKkxvb2tlZCB1cCBNYW5hZ2VtZW50SG9tZSEhIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgTWFuYWdlbWVudEhvbWUgIGhvbWUgPSAoTWFuYWdlbWVudEhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KAogICAgICAgICAgICAgICAgICAgICBvYmpyZWYsIE1hbmFnZW1lbnRIb21lLmNsYXNzKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqTmFycm93ZWQgTWFuYWdlbWVudEhvbWUhISIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIE1hbmFnZW1lbnQgbWVqYiA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKkdvdCB0aGUgTUVKQiEhIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3RyaW5nIGRvbWFpbiA9IG1lamIuZ2V0RGVmYXVsdERvbWFpbigpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKipNRUpCIGRlZmF1bHQgZG9tYWluID0gIitkb21haW4pOwogICAgICAgICAgICAgaW50IG1iZWFuQ291bnQgPSBtZWpiLmdldE1CZWFuQ291bnQoKS5pbnRWYWx1ZSgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKipNQmVhbkNvdW50ID0gIittYmVhbkNvdW50KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBQcmludCBhdHRyaWJ1dGVzIG9mIGFsbCBNQmVhbnMKICAgICAgICAgICAgIE9iamVjdE5hbWUgcXVlcnkgPSBuZXcgT2JqZWN0TmFtZSgiKjoqIik7CiAgICAgICAgICAgICBTZXQgbWJlYW5OYW1lcyA9IG1lamIucXVlcnlOYW1lcyhxdWVyeSwgbnVsbCk7CkBAIC05MCwyMyArOTAsMjMgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmKERFQlVHKXsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3QgcnVubmluZyBpbiB2ZXJib3NlIG1vZGUiKTsKLSAgICAgICAgICAgICAgICBwcmludENvbnNvbGVPdXRwdXQobWJlYW5OYW1lcyxtZWpiKTsgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBwcmludENvbnNvbGVPdXRwdXQobWJlYW5OYW1lcyxtZWpiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1lamIucmVtb3ZlKCk7CiAgICAgICAgICAgICBpZiAoIHBhc3MgKSB7CiAgICAgICAgICAgICAgICAgcmVzID0ga1Rlc3RQYXNzZWQ7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNRUpCIFRlc3QgcGFzc2VkIik7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIk1FSkIgVGVzdCIsIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcmVzID0ga1Rlc3RGYWlsZWQ7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNRUpCIFRlc3QgZmFpbGVkIik7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIk1FSkIgVGVzdCIsIHN0YXQuRkFJTCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKipFeGNlcHRpb24gd2hpbGUgaW5pdGlhbGl6aW5nIGNvbnRleHQuXG4iKTsKICAgICAgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTE3LDE5ICsxMTcsMTkgQEAKICAgICAgICAgICAgIHJlcyA9IGtUZXN0RmFpbGVkOwogICAgICAgICAgICAgcmV0dXJuIHJlczsKICAgICAgICAgfQotICAgIH0gICAgCi0gICAgCisgICAgfQorCiAgICAgIHB1YmxpYyB2b2lkIHByaW50Q29uc29sZU91dHB1dChTZXQgbWJlYW5OYW1lcywgTWFuYWdlbWVudCBtYW5hZ2VtZW50YmVhbil7CiAgICAgICAgIFNldCBtYmVhbk5hbWVzU2V0PW1iZWFuTmFtZXM7CiAgICAgICAgIE1hbmFnZW1lbnQgbWVqYj1tYW5hZ2VtZW50YmVhbjsKLSAgICAgICAgCisKICAgICAgICAgdHJ5ewogICAgICAgICAgICAgSXRlcmF0b3IgaXQgPSBtYmVhbk5hbWVzU2V0Lml0ZXJhdG9yKCk7CiAgICAgICAgICAgICB3aGlsZSAoIGl0Lmhhc05leHQoKSApIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIE9iamVjdE5hbWUgbmFtZSA9IChPYmplY3ROYW1lKWl0Lm5leHQoKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk9iamVjdE5hbWUgPSAiK25hbWUpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ29uc3RydWN0IGxpc3Qgb2YgYXR0ciBuYW1lcwogICAgICAgICAgICAgICAgIE1CZWFuSW5mbyBpbmZvID0gbWVqYi5nZXRNQmVhbkluZm8obmFtZSk7CiAgICAgICAgICAgICAgICAgTUJlYW5BdHRyaWJ1dGVJbmZvW10gYXR0ckluZm8gPSBpbmZvLmdldEF0dHJpYnV0ZXMoKTsKQEAgLTEzOCwxNSArMTM4LDE1IEBACiAgICAgICAgICAgICAgICAgICAgIGF0dHJOYW1lc1tpXSA9IGF0dHJJbmZvW2ldLmdldE5hbWUoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gR2V0IGF0dHIgdmFsdWVzIGZyb20gTUVKQiBhbmQgcHJpbnQgdGhlbQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgQXR0cmlidXRlTGlzdCBhdHRycyA9IG1lamIuZ2V0QXR0cmlidXRlcyhuYW1lLCBhdHRyTmFtZXMpOwogICAgICAgICAgICAgICAgIGZvciAoIGludCBpPTA7IGk8YXR0cnMuc2l6ZSgpOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRycy5nZXQoaSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUWVBFID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzLmdldChpKS5nZXRDbGFzcygpLmdldE5hbWUoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJzLmdldChpKSBpbnN0YW5jZW9mIEF0dHJpYnV0ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlIGF0dHIgPSAoQXR0cmlidXRlKWF0dHJzLmdldChpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXR0cmlidXRlIG5hbWUgPSAiK2F0dHIuZ2V0TmFtZSgpCkBAIC0xNjQsNiArMTY0LDYgQEAKICAgICAgICAgfQogICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiPT09PT09PT09PT09PT09PT09PT09PT0iKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvYXV0aG9yaXovbWV0aG9kcGVybXMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2F1dGhvcml6L21ldGhvZHBlcm1zL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWRjNzQ5Yy4uYzY4NDA3MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvYXV0aG9yaXovbWV0aG9kcGVybXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9hdXRob3Jpei9tZXRob2RwZXJtcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWMiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CkBAIC0yNiw0ICsyNiw0IEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9InNlYy1tZXRob2RwZXJtcyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzZWMtbWV0aG9kcGVybXMiLz4gICAgICAgIFx1MDAyMApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvYXV0aG9yaXovbWV0aG9kcGVybXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvYXV0aG9yaXovbWV0aG9kcGVybXMvYnVpbGQueG1sCmluZGV4IDE1YzY0NWUuLmM4YmNhYTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2F1dGhvcml6L21ldGhvZHBlcm1zL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9hdXRob3Jpei9tZXRob2RwZXJtcy9idWlsZC54bWwKQEAgLTMxLDcgKzMxLDcgQEAKICAgICZjb21tb25CdWlsZDsKICAgICZjb21tb25SdW47CiAgICAmdGVzdFByb3BlcnRpZXM7Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsIHNldHVwLCBkZXBsb3kscnVuLCB1bmRlcGxveSwgdW5zZXR1cCIvPgogICAgIDwhLS0gYXNzdW1lcyB0aGF0IGNyZWF0ZS11c2VycyBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlIC0tPgogICAgIDwhLS0gcnVuLXRlc3QgdGFyZ2V0IGFkZGVkIHRvIGhhdmUgYSBzZXBhcmF0ZSBzZXR1cC91bnNldHVwIGNvbW1vbmx5IC0tPgpAQCAtNTIsNyArNTIsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci08IS0tCTxwcm9wZXJ0eSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLypIb21lKi5jbGFzcywqKi8qQmVhbiouY2xhc3MsKiovKkRhdGEqLmNsYXNzLCouZGJzY2hlbWEiLz4KKzwhLS0gICAgPHByb3BlcnR5IG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovKkhvbWUqLmNsYXNzLCoqLypCZWFuKi5jbGFzcywqKi8qRGF0YSouY2xhc3MsKi5kYnNjaGVtYSIvPgogLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjYsMTMgKzY2LDEzIEBACiAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iPgogICAgICAgICA8YXJnIHZhbHVlPSItY2xpZW50IiAvPgogICAgICAgICA8YXJnIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KLQk8YXJnIHZhbHVlPSIteG1sIi8+Ci0JPGFyZyB2YWx1ZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sIi8+Ci0JPGFyZyB2YWx1ZT0iLXRleHRhdXRoIi8+Ci0JPGFyZyB2YWx1ZT0iLXVzZXIiLz4KLQk8YXJnIHZhbHVlPSJqMmVlIi8+Ci0JPGFyZyB2YWx1ZT0iLXBhc3N3b3JkIi8+Ci0JPGFyZyB2YWx1ZT0iajJlZSIvPgorICAgIDxhcmcgdmFsdWU9Ii14bWwiLz4KKyAgICA8YXJnIHZhbHVlPSIke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwiLz4KKyAgICA8YXJnIHZhbHVlPSItdGV4dGF1dGgiLz4KKyAgICA8YXJnIHZhbHVlPSItdXNlciIvPgorICAgIDxhcmcgdmFsdWU9ImoyZWUiLz4KKyAgICA8YXJnIHZhbHVlPSItcGFzc3dvcmQiLz4KKyAgICA8YXJnIHZhbHVlPSJqMmVlIi8+CiAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTk1LDEyICs5NSwxMiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtdXNlciI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXVzZXItY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJqMmVlIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJwYXNzd29yZCIgdmFsdWU9ImoyZWUiLz4KLQkgICAgPHBhcmFtIG5hbWU9Imdyb3VwcyIgdmFsdWU9ImVtcGxveWVlIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0iajJlZSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icGFzc3dvcmQiIHZhbHVlPSJqMmVlIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJncm91cHMiIHZhbHVlPSJlbXBsb3llZSIvPgogICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXVzZXIiPgogICAgICAgPCEtLSByZW1vdmUgdGVzdCB1c2VycywganVzdCBjbGVhbnVwLiAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXVzZXItY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2F1dGhvcml6L21ldGhvZHBlcm1zL2NsaWVudC9NZXRob2RQZXJtQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9hdXRob3Jpei9tZXRob2RwZXJtcy9jbGllbnQvTWV0aG9kUGVybUNsaWVudC5qYXZhCmluZGV4IGVmYTNkOTIuLjAyYzJjOTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2F1dGhvcml6L21ldGhvZHBlcm1zL2NsaWVudC9NZXRob2RQZXJtQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvYXV0aG9yaXovbWV0aG9kcGVybXMvY2xpZW50L01ldGhvZFBlcm1DbGllbnQuamF2YQpAQCAtMzcsOTAgKzM3LDkwIEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIi0tPkVKQiBtZXRob2QgcGVybWlzc2lvbnMhIik7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkVKQiBtZXRob2QgcGVybWlzc2lvbnMiKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwotCXN0YXQucHJpbnRTdW1tYXJ5KCJBdXRob3JpemVfbWV0aG9kcGVybXMiKTsKLSAgICAgICAgCisgICAgc3RhdC5wcmludFN1bW1hcnkoIkF1dGhvcml6ZV9tZXRob2RwZXJtcyIpOworCiAgICAgfQotICAgIAorCiAgICAgcHVibGljIE1ldGhvZFBlcm1DbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgLy9zdXBlcihhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdCgpIHsKLSAgICAgICAgCi0JTWV0aG9kUGVybVJlbW90ZSBocj1udWxsOworCisgICAgTWV0aG9kUGVybVJlbW90ZSBocj1udWxsOwogICAgICAgICBTdHJpbmcgcmVzPW51bGw7CiAgICAgICAgIENvbnRleHQgaWMgPSBudWxsOwogICAgICAgICBMb2dpbkNvbnRleHQgbGM9bnVsbDsKICAgICAgICAgTWV0aG9kUGVybVJlbW90ZUhvbWUgaG9tZT1udWxsOwotICAgIAl0cnl7Ci0JICAgIGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0vLwkgICAgU2VjdXJpdHkuc2V0UHJvcGVydHkoInBvbGljeS5hbGxvd1N5c3RlbVByb3BlcnR5IiwgInRydWUiKTsKLQkgICAgbGMgPSBuZXcgTG9naW5Db250ZXh0KCk7Ci0JICAgIGxjLmxvZ2luKCJqMmVlIiwiajJlZSIpOwkKLQkJLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICB0cnl7CisgICAgICAgIGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisvLyAgICAgICAgU2VjdXJpdHkuc2V0UHJvcGVydHkoInBvbGljeS5hbGxvd1N5c3RlbVByb3BlcnR5IiwgInRydWUiKTsKKyAgICAgICAgbGMgPSBuZXcgTG9naW5Db250ZXh0KCk7CisgICAgICAgIGxjLmxvZ2luKCJqMmVlIiwiajJlZSIpOworICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKICAgICAgICAgICAgIGphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJNeU1ldGhvZFBlcm0iKTsKLQkJCi0JICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotCQkKLQkgICAgIGhvbWUgPSAoTWV0aG9kUGVybVJlbW90ZUhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KAotCQkJCQkJCQkJCSAgIG9ianJlZiwgTWV0aG9kUGVybVJlbW90ZUhvbWUuY2xhc3MpOwotCSAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwotCQkJCQotCQlociA9IGhvbWUuY3JlYXRlKGhlbGxvU3RyKTsKLQkJU3lzdGVtLmVyci5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7CisKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7CisKKyAgICAgICAgIGhvbWUgPSAoTWV0aG9kUGVybVJlbW90ZUhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ianJlZiwgTWV0aG9kUGVybVJlbW90ZUhvbWUuY2xhc3MpOworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOworCisgICAgICAgIGhyID0gaG9tZS5jcmVhdGUoaGVsbG9TdHIpOworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKICAgICAgICAgICAgIH1jYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgIC8vcmVzID0gVGVzdGVyLmtUZXN0RmFpbGVkOwogICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlNlYzo6QXV0aG9yaXplX21ldGhvZHBlcm1zIFRlc3RzdWl0ZSIsc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgIHJlcz0iRkFJTCI7CiAgICAgICAgICAgICB9Ci0JCS8vIGludm9rZSAzIG92ZXJsb2FkZWQgbWV0aG9kcyBvbiB0aGUgRUpCCisgICAgICAgIC8vIGludm9rZSAzIG92ZXJsb2FkZWQgbWV0aG9kcyBvbiB0aGUgRUpCCiAgICAgICAgICAgICAgdHJ5ewotCQlTeXN0ZW0ub3V0LnByaW50bG4gKCJDYWxsaW5nIGF1dGhvcml6ZWQgbWV0aG9kIC0gYXV0aG9yaXplZE1ldGhvZCIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oaHIuYXV0aG9yaXplZE1ldGhvZCgpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiQ2FsbGluZyBhdXRob3JpemVkIG1ldGhvZCAtIGF1dGhvcml6ZWRNZXRob2QiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGhyLmF1dGhvcml6ZWRNZXRob2QoKSk7CiAKLQkJU3lzdGVtLm91dC5wcmludGxuICgiQ2FsbGluZyBhdXRob3JpemVkIG1ldGhvZCAtIGF1dGhvcml6ZWRNZXRob2QgLSBoaSAxMjkiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKGhyLmF1dGhvcml6ZWRNZXRob2QoIkhpIiwgMTI5KSk7Ci0JCQotCQlTeXN0ZW0ub3V0LnByaW50bG4gKCJDYWxsaW5nIGF1dGhvcml6ZWQgbWV0aG9kIC0gYXV0aG9yaXplZE1ldGhvZCAxMTUiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKGhyLmF1dGhvcml6ZWRNZXRob2QoMTE1KSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkNhbGxpbmcgYXV0aG9yaXplZCBtZXRob2QgLSBhdXRob3JpemVkTWV0aG9kIC0gaGkgMTI5Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihoci5hdXRob3JpemVkTWV0aG9kKCJIaSIsIDEyOSkpOwogCi0JCS8vcmVzICA9IFRlc3Rlci5rVGVzdFBhc3NlZDsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiQ2FsbGluZyBhdXRob3JpemVkIG1ldGhvZCAtIGF1dGhvcml6ZWRNZXRob2QgMTE1Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihoci5hdXRob3JpemVkTWV0aG9kKDExNSkpOworCisgICAgICAgIC8vcmVzICA9IFRlc3Rlci5rVGVzdFBhc3NlZDsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiU2VjOjpBdXRob3JpemVfbWV0aG9kcGVybXMgVGVzdDEtQ2FsbGluZyBhdXRob3JpemVkIG1ldGhvZCIsc3RhdC5QQVNTKTsKLQkJCi0JICAgIH0gY2F0Y2goRXhjZXB0aW9uIHJlKXsKKworICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiByZSl7CiAgICAgICAgICAgICAgICAgcmUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBGYWlsZWQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0IEZhaWxlZCIpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJTZWM6OkF1dGhvcml6ZV9tZXRob2RwZXJtcyBUZXN0MS1DYWxsaW5nIGF1dGhvcml6ZWQgbWV0aG9kIixzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgIHJlcz0iRkFJTCI7CiAKLQkJLy9yZXR1cm4gVGVzdGVyLmtUZXN0RmFpbGVkOwotCSAgICB9Ci0JICAgIHRyeXsKLQkJLy8gaW52b2tlIHVuYXV0aG9yaXplZCBtZXRob2Qgb24gdGhlIEVKQgotCQlTeXN0ZW0ub3V0LnByaW50bG4gKCJDYWxsaW5nIHVuYXV0aG9yaXplZCBtZXRob2QgLSBzYXlHb29kQnllIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihoci5zYXlHb29kYnllKCkpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4gKCIgVGVzdCBmYWlsZWQ6IGFibGUgdG8gY2FsbCBnb29kIGJ5ZSBtZXRob2QhIik7IAotCQkvL3JldHVybiBUZXN0ZXIua1Rlc3RGYWlsZWQ7CisgICAgICAgIC8vcmV0dXJuIFRlc3Rlci5rVGVzdEZhaWxlZDsKKyAgICAgICAgfQorICAgICAgICB0cnl7CisgICAgICAgIC8vIGludm9rZSB1bmF1dGhvcml6ZWQgbWV0aG9kIG9uIHRoZSBFSkIKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiQ2FsbGluZyB1bmF1dGhvcml6ZWQgbWV0aG9kIC0gc2F5R29vZEJ5ZSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaHIuc2F5R29vZGJ5ZSgpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiIFRlc3QgZmFpbGVkOiBhYmxlIHRvIGNhbGwgZ29vZCBieWUgbWV0aG9kISIpOworICAgICAgICAvL3JldHVybiBUZXN0ZXIua1Rlc3RGYWlsZWQ7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlNlYzo6QXV0aG9yaXplX21ldGhvZHBlcm1zIFRlc3QyLUNhbGxpbmcgdW5hdXRob3JpemVkIG1ldGhvZCIsc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICByZXM9IkZBSUwiOwogCi0JICAgIH0gY2F0Y2goRXhjZXB0aW9uIGdieWUpewotCQkvL3JlcyA9IFRlc3Rlci5rVGVzdFBhc3NlZDsKKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZ2J5ZSl7CisgICAgICAgIC8vcmVzID0gVGVzdGVyLmtUZXN0UGFzc2VkOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJTZWM6OkF1dGhvcml6ZV9tZXRob2RwZXJtcyBUZXN0Mi1DYWxsaW5nIHVuYXV0aG9yaXplZCBtZXRob2QiLHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgcmVzPSJQQVNTIjsKIAotCSAgICB9CisgICAgICAgIH0KIAogICAgICAgICAgICAgdHJ5ewogICAgICAgICAgICAgICAgIC8vIGludm9rZSBtZXRob2Qgb24gdGhlIEVKQiBub3QgYXV0aG9yaXplZAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkNhbGxpbmcgdW5hdXRob3JpemVkIG1ldGhvZCAtIHVuYXV0aG9yaXplZE1ldGhvZCIpOwogICAgICAgICAgICAgICAgIGhyLnVuYXV0aG9yaXplZE1ldGhvZCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvL3JlcyAgPSBUZXN0ZXIua1Rlc3RGYWlsZWQ7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlNlYzo6QXV0aG9yaXplX21ldGhvZHBlcm1zIFRlc3QzLWV4cGVjdGVkIEV4Y2VwdGlvbi1DYWxsaW5nIHVuYXV0aG9yaXplZCBtZXRob2QiLHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgcmVzPSJGQUlMIjsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmVtZXgpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBleHBlY3RlZCBSZW1vdGVFeGNlcHRpb24gZnJvbSB1bmF1dGhvcml6ZWRNZXRob2QoKSIpOwogICAgICAgICAgICAgICAgIC8vcmVzICA9IFRlc3Rlci5rVGVzdFBhc3NlZDsKQEAgLTEzMCwxMSArMTMwLDExIEBACiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlNlYzo6QXV0aG9yaXplX21ldGhvZHBlcm1zIFRlc3QzLWV4cGVjdGVkIEV4Y2VwdGlvbi1DYWxsaW5nIHVuYXV0aG9yaXplZCBtZXRob2QiLHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgcmVzPSJGQUlMIjsKICAgICAgICAgICAgIH0KLSAgICAJcmV0dXJuIHJlczsKLSAgICAgICAgCisgICAgICAgIHJldHVybiByZXM7CisKICAgICB9CiAKLSAgICAKKwogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIGhlbGxvU3RyID0gIkhlbGxvIE1ldGhvZFBlcm0hISEiOwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9hdXRob3Jpei9tZXRob2RwZXJtcy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvYXV0aG9yaXovbWV0aG9kcGVybXMvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBiNmI4NGExLi42ZDdmNWFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9hdXRob3Jpei9tZXRob2RwZXJtcy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2F1dGhvcml6L21ldGhvZHBlcm1zL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgICA8bWV0aG9kLXBhcmFtPmphdmEubGFuZy5TdHJpbmc8L21ldGhvZC1wYXJhbT4KICAgICAgICAgICA8bWV0aG9kLXBhcmFtPmludDwvbWV0aG9kLXBhcmFtPgogICAgICAgICA8L21ldGhvZC1wYXJhbXM+Ci0gICAgICA8L21ldGhvZD4JCisgICAgICA8L21ldGhvZD4KICAgICAgIDxtZXRob2Q+CiAgICAgICAgIDxlamItbmFtZT5NZXRob2RQZXJtaXNzaW9uc0JlYW48L2VqYi1uYW1lPgogICAgICAgICA8bWV0aG9kLWludGY+UmVtb3RlPC9tZXRob2QtaW50Zj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2F1dGhvcml6L21ldGhvZHBlcm1zL2VqYi9NZXRob2RQZXJtQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvYXV0aG9yaXovbWV0aG9kcGVybXMvZWpiL01ldGhvZFBlcm1CZWFuLmphdmEKaW5kZXggMTgwMzIyNS4uNDk4NGUzOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvYXV0aG9yaXovbWV0aG9kcGVybXMvZWpiL01ldGhvZFBlcm1CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvYXV0aG9yaXovbWV0aG9kcGVybXMvZWpiL01ldGhvZFBlcm1CZWFuLmphdmEKQEAgLTE3LDc4ICsxNyw3OCBAQAogcGFja2FnZSBjb20uc3VuLnMxcGVxZS5zZWN1cml0eS5hdXRob3Jpei5tZXRob2RwZXJtczsKIAogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogCiBwdWJsaWMgY2xhc3MgTWV0aG9kUGVybUJlYW4gaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7CiAgICAgcHJpdmF0ZSBTdHJpbmcgc3RyOwogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2M7Ci0gICAgCisKICAgICBwdWJsaWMgTWV0aG9kUGVybUJlYW4oKXt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoU3RyaW5nIHN0cikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIAotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gZWpiQ3JlYXRlICEhIik7CisKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYkNyZWF0ZSAhISIpOwogICAgICAgICB0aGlzLnN0ciA9IHN0cjsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGF1dGhvcml6ZWRNZXRob2QoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgCi0JU3lzdGVtLm91dC5wcmludGxuKCJNZXRob2RQZXJtIEJlYW4gLSBpbnNpZGUgYXV0aG9yaXplZE1ldGhvZCgpICEiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExFUiBQUklOQ0lQQUw6ICIgKyBzYy5nZXRDYWxsZXJQcmluY2lwYWwoKSk7Ci0JYm9vbGVhbiBtZ3IgPSBzYy5pc0NhbGxlckluUm9sZSgiTUdSIik7Ci0JYm9vbGVhbiBhZG1pbiA9IHNjLmlzQ2FsbGVySW5Sb2xlKCJBRE1JTiIpOwotCWJvb2xlYW4gc3RhZmYgPSAgc2MuaXNDYWxsZXJJblJvbGUoIlNUQUZGIik7Ci0JYm9vbGVhbiBlbXAgPSBzYy5pc0NhbGxlckluUm9sZSgiRU1QIik7Ci0JU3RyaW5nQnVmZmVyIHNidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0Jc2J1Zi5hcHBlbmQoIlxuSXMgQ2FsbGVySW5Sb2xlOiBNR1Ioc2h1ZCBiZSB0cnVlKSA9ICIgKyBtZ3IpOyAKLQlzYnVmLmFwcGVuZCgiXG5JcyBDYWxsZXJJblJvbGU6IEFETUlOKHNodWQgYiBmYWxzZSkgPSAiICsgYWRtaW4pOwotCXNidWYuYXBwZW5kKCJcbklzIENhbGxlckluUm9sZTogU1RBRkYoc2h1ZCBiIHRydWUpID0gIiArIHN0YWZmKTsKLQlzYnVmLmFwcGVuZCgiXG5JcyBDYWxsZXJJblJvbGU6IEVNUChzaHVkIGIgdHJ1ZSkgPSAiICsgZW1wKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuIChzYnVmLnRvU3RyaW5nKCkpOyAKLQlpZihtZ3IgJiYgICFhZG1pbiAmJiBzdGFmZiAmJiBlbXApCi0JICAgIHJldHVybiBzYnVmLnRvU3RyaW5nKCk7Ci0JZWxzZQotCSAgICB0aHJvdyBuZXcgUmVtb3RlRXhjZXB0aW9uKCJDYWxsZXIgaW4gcm9sZSBmYWlsZWQgIik7Ci0gICAgICAgIAorCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXRob2RQZXJtIEJlYW4gLSBpbnNpZGUgYXV0aG9yaXplZE1ldGhvZCgpICEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExFUiBQUklOQ0lQQUw6ICIgKyBzYy5nZXRDYWxsZXJQcmluY2lwYWwoKSk7CisgICAgYm9vbGVhbiBtZ3IgPSBzYy5pc0NhbGxlckluUm9sZSgiTUdSIik7CisgICAgYm9vbGVhbiBhZG1pbiA9IHNjLmlzQ2FsbGVySW5Sb2xlKCJBRE1JTiIpOworICAgIGJvb2xlYW4gc3RhZmYgPSAgc2MuaXNDYWxsZXJJblJvbGUoIlNUQUZGIik7CisgICAgYm9vbGVhbiBlbXAgPSBzYy5pc0NhbGxlckluUm9sZSgiRU1QIik7CisgICAgU3RyaW5nQnVmZmVyIHNidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgc2J1Zi5hcHBlbmQoIlxuSXMgQ2FsbGVySW5Sb2xlOiBNR1Ioc2h1ZCBiZSB0cnVlKSA9ICIgKyBtZ3IpOworICAgIHNidWYuYXBwZW5kKCJcbklzIENhbGxlckluUm9sZTogQURNSU4oc2h1ZCBiIGZhbHNlKSA9ICIgKyBhZG1pbik7CisgICAgc2J1Zi5hcHBlbmQoIlxuSXMgQ2FsbGVySW5Sb2xlOiBTVEFGRihzaHVkIGIgdHJ1ZSkgPSAiICsgc3RhZmYpOworICAgIHNidWYuYXBwZW5kKCJcbklzIENhbGxlckluUm9sZTogRU1QKHNodWQgYiB0cnVlKSA9ICIgKyBlbXApOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKHNidWYudG9TdHJpbmcoKSk7CisgICAgaWYobWdyICYmICAhYWRtaW4gJiYgc3RhZmYgJiYgZW1wKQorICAgICAgICByZXR1cm4gc2J1Zi50b1N0cmluZygpOworICAgIGVsc2UKKyAgICAgICAgdGhyb3cgbmV3IFJlbW90ZUV4Y2VwdGlvbigiQ2FsbGVyIGluIHJvbGUgZmFpbGVkICIpOworCiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBhdXRob3JpemVkTWV0aG9kKFN0cmluZyBzLCBpbnQgaSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIAotCVN5c3RlbS5vdXQucHJpbnRsbigiTWV0aG9kUGVybSBCZWFuIC0gaW5zaWRlIGF1dGhvcml6ZWRNZXRob2QoU3RyaW5nIHMsIGludCBpKSEhIik7Ci0JLy9TeXN0ZW0ub3V0LnByaW50bG4oIklzIENhbGxlckluUm9sZTogIiArIHNjLmlzQ2FsbGVySW5Sb2xlKCJNR1IiKSk7Ci0JLy9TeXN0ZW0ub3V0LnByaW50bG4oIklzIENhbGxlckluUm9sZTogIiArIHNjLmlzQ2FsbGVySW5Sb2xlKCJTVEFGRiIpKTsKLQkvL1N5c3RlbS5vdXQucHJpbnRsbigiSXMgQ2FsbGVySW5Sb2xlOiAiICsgc2MuaXNDYWxsZXJJblJvbGUoIkVNUCIpKTsKLQkvL1N5c3RlbS5vdXQucHJpbnRsbigiSXMgQ2FsbGVySW5Sb2xlOiAiICsgc2MuaXNDYWxsZXJJblJvbGUoIkFETUlOIikpOworCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXRob2RQZXJtIEJlYW4gLSBpbnNpZGUgYXV0aG9yaXplZE1ldGhvZChTdHJpbmcgcywgaW50IGkpISEiKTsKKyAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiSXMgQ2FsbGVySW5Sb2xlOiAiICsgc2MuaXNDYWxsZXJJblJvbGUoIk1HUiIpKTsKKyAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiSXMgQ2FsbGVySW5Sb2xlOiAiICsgc2MuaXNDYWxsZXJJblJvbGUoIlNUQUZGIikpOworICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJJcyBDYWxsZXJJblJvbGU6ICIgKyBzYy5pc0NhbGxlckluUm9sZSgiRU1QIikpOworICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJJcyBDYWxsZXJJblJvbGU6ICIgKyBzYy5pc0NhbGxlckluUm9sZSgiQURNSU4iKSk7CiAgICAgICAgIHJldHVybiBzdHIgKyAiICIgKyBzICsgIiAiICsgaTsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGF1dGhvcml6ZWRNZXRob2QoaW50IGkpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIk1ldGhvZFBlcm0gQmVhbiAtIGluc2lkZSBhdXRob3JpemVkTWV0aG9kKGludCBpKSEhISIpOworCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXRob2RQZXJtIEJlYW4gLSBpbnNpZGUgYXV0aG9yaXplZE1ldGhvZChpbnQgaSkhISEiKTsKICAgICAgICAgcmV0dXJuIHN0ciArICIgIiArIGk7Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdW5hdXRob3JpemVkTWV0aG9kKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIAotCVN5c3RlbS5vdXQucHJpbnRsbigiTWV0aG9kUGVybSBCZWFuIC0gaW5zaWRlIHVuYXV0aG9yaXplZCBtZXRob2QhISEhIik7Ci0gICAgICAKKworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWV0aG9kUGVybSBCZWFuIC0gaW5zaWRlIHVuYXV0aG9yaXplZCBtZXRob2QhISEhIik7CisKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHNheUdvb2RieWUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgCi0JU3lzdGVtLm91dC5wcmludGxuKCJNZXRob2RQZXJtIEJlYW4gLSBpbnNpZGUgc2F5R29vZGJ5ZSgpISEhISEiKTsKKworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWV0aG9kUGVybSBCZWFuIC0gaW5zaWRlIHNheUdvb2RieWUoKSEhISEhIik7CiAgICAgICAgIHJldHVybiBzdHIgKyAiIHNheUdvb2RieWUiOwotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0gICAgICAgIAotCXRoaXMuc2MgPSBzYzsKKworICAgIHRoaXMuc2MgPSBzYzsKIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvYXV0aG9yaXovbWV0aG9kcGVybXMvZWpiL01ldGhvZFBlcm1SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2F1dGhvcml6L21ldGhvZHBlcm1zL2VqYi9NZXRob2RQZXJtUmVtb3RlLmphdmEKaW5kZXggZjRhZGVkZC4uMTUxYjc4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvYXV0aG9yaXovbWV0aG9kcGVybXMvZWpiL01ldGhvZFBlcm1SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9hdXRob3Jpei9tZXRob2RwZXJtcy9lamIvTWV0aG9kUGVybVJlbW90ZS5qYXZhCkBAIC0yOCw1ICsyOCw1IEBACiAgICAgcHVibGljIFN0cmluZyBhdXRob3JpemVkTWV0aG9kKGludCBqKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHB1YmxpYyB2b2lkIHVuYXV0aG9yaXplZE1ldGhvZCgpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgICAgcHVibGljIFN0cmluZyBzYXlHb29kYnllKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvYXV0aG9yaXovbWV0aG9kcGVybXMvZWpiL01ldGhvZFBlcm1SZW1vdGVIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9hdXRob3Jpei9tZXRob2RwZXJtcy9lamIvTWV0aG9kUGVybVJlbW90ZUhvbWUuamF2YQppbmRleCA0YmU2MTRiLi41ZTUxMzgyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9hdXRob3Jpei9tZXRob2RwZXJtcy9lamIvTWV0aG9kUGVybVJlbW90ZUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9hdXRob3Jpei9tZXRob2RwZXJtcy9lamIvTWV0aG9kUGVybVJlbW90ZUhvbWUuamF2YQpAQCAtMjcsNSArMjcsNSBAQAogcHVibGljIGludGVyZmFjZSBNZXRob2RQZXJtUmVtb3RlSG9tZSBleHRlbmRzIEVKQkhvbWUgewogCiAgICAgcHVibGljIE1ldGhvZFBlcm1SZW1vdGUgY3JlYXRlIChTdHJpbmcgc3RyKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBDcmVhdGVFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2J1aWxkLnhtbAppbmRleCA3MTc3ZDdiLi5jNjc4YzMyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPGVjaG8gbWVzc2FnZT0iPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ii8+CiAgICAgPGVjaG8gbWVzc2FnZT0iICAgICAgICAgU0pTQVMgUXVpY2tsb29rOiBTZWN1cml0eSBUZXN0cyAgICAgICAgIi8+CiAgICAgPGVjaG8gbWVzc2FnZT0iPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ii8+Ci0gICAgCisKICAgICA8YW50IGRpcj0id3NzIiB0YXJnZXQ9ImFsbCIvPgogICAgIDxhbnQgZGlyPSJhdXRob3Jpei9tZXRob2RwZXJtcyIgdGFyZ2V0PSJhbGwiIC8+CiAgICAgPGFudCBkaXI9InNpbXBsZSIgdGFyZ2V0PSJhbGwiLz4KQEAgLTY4LDEwICs2OCwxMCBAQAogCiAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICA8ZWNobz4KLQlhbnQgYWxsIC0tPiBTZXR1cCBhbmQgUnVuIGFsbCB0ZXN0cwotCWFudCBzZXR1cCAtLT4gU2V0dXAgY29uZmlndXJhdGlvbiBmb3IgYWxsIHRlc3RzCi0JYW50IHJ1bi10ZXN0IC0tPiBSdW4gYWxsIHRlc3RzIHdpdGhvdXQgc2V0dXAKLQlhbnQgdW5zZXR1cCAtLT4gVW5zZXR1cCBjb25maWd1cmF0aW9uIGZvciBhbGwgdGVzdHMKKyAgICBhbnQgYWxsIC0tPiBTZXR1cCBhbmQgUnVuIGFsbCB0ZXN0cworICAgIGFudCBzZXR1cCAtLT4gU2V0dXAgY29uZmlndXJhdGlvbiBmb3IgYWxsIHRlc3RzCisgICAgYW50IHJ1bi10ZXN0IC0tPiBSdW4gYWxsIHRlc3RzIHdpdGhvdXQgc2V0dXAKKyAgICBhbnQgdW5zZXR1cCAtLT4gVW5zZXR1cCBjb25maWd1cmF0aW9uIGZvciBhbGwgdGVzdHMKICAgICAgPC9lY2hvPgogICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9pbnRlZ3JhdGlvbi9iYW5rYWRtaW4vYnVpbGQucHJvcGVydGllcwppbmRleCBmNDc2MGU3Li4xMDdmZmM1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9pbnRlZ3JhdGlvbi9iYW5rYWRtaW4vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9pbnRlZ3JhdGlvbi9iYW5rYWRtaW4vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjIi8+CiA8IS0tCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9pbnRlZ3JhdGlvbi9iYW5rYWRtaW4vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL2J1aWxkLnhtbAppbmRleCBiZmJjZWRiLi45Y2M3NDVjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9pbnRlZ3JhdGlvbi9iYW5rYWRtaW4vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2JhbmthZG1pbi9idWlsZC54bWwKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgPC90YXJnZXQ+CiAKICAgPCEtLQotCVF1aWNrIGxvb2sgdGVzdCBydW4gZm9yIGludGVncmF0aW5nIHdpdGggdG9wIGxldmVsIGZvciBydW5uaW5nIHN1YnNldCBvZiB0ZXN0cy4KKyAgICBRdWljayBsb29rIHRlc3QgcnVuIGZvciBpbnRlZ3JhdGluZyB3aXRoIHRvcCBsZXZlbCBmb3IgcnVubmluZyBzdWJzZXQgb2YgdGVzdHMuCiAgIC0tPgogICA8dGFyZ2V0IG5hbWU9InF1aWNrLWxvb2siIGRlcGVuZHM9ImluaXQtY29tbW9uLHNldHVwIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSJkYW9tYW5hZ2VyIiB0YXJnZXQ9ImFsbCIgLz4KQEAgLTU3LDE5ICs1NywxOSBAQAogCiAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgPCEtLTxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+IC0tPgotCTxlY2hvIG1lc3NhZ2U9Ij09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iLz4KLSAJPGVjaG8gbWVzc2FnZT0iKioqKioqIFNlY3VyaXR5IFRlc3RzdWl0ZSAoQmFua0FkbWluIEFwcCkgKioqKioiLz4KLQk8ZWNobyBtZXNzYWdlPSJTdGFuZGFyZCBDb21tYW5kczoiLz4KLQk8ZWNobyBtZXNzYWdlPSJhbnQgcXVpY2stbG9vayAtLT5idWlsZCxkZXBsb3ksc2V0dXAgYW5kIHJ1biBhIHNpbmdsZSB0ZXN0LCBkYW9tYW5hZ2VyIGZyb20gYmFua2FwcCIvPgotCTxlY2hvIG1lc3NhZ2U9ImFudCBhbGwgLS0+YnVpbGQsZGVwbG95LHNldHVwIGFuZCBydW4gdGhlIHRlc3RzdWl0ZSIvPgotCTxlY2hvIG1lc3NhZ2U9IiAiLz4KLQk8ZWNobyBtZXNzYWdlPSJPcHRpb25hbCBDb21tYW5kczoiLz4KLQk8ZWNobyBtZXNzYWdlPSJhbnQgc2V0dXAgLS0+RG9lcyB0aGUgc2VydmVyc2lkZSBjb25maWciLz4KLQk8ZWNobyBtZXNzYWdlPSJhbnQgcmVzdGFydC1zZXJ2ZXIgLS0+UmVzdGFydHMgYXBwc2VydmVyIi8+Ci0JPGVjaG8gbWVzc2FnZT0iYW50IGNyZWF0ZS1maWxlLXVzZXJzLS0+Q3JlYXRlcyBzZWN1cml0eSBmaWxlIHJlYWxtIHVzZXJzL2dyb3VwcyIvPgotCTxlY2hvIG1lc3NhZ2U9ImFudCBjcmVhdGUtam1zcmVzb3VyY2UgLS0+Q29uZmlndXJlcyBhbGwgdGhlIHJlcXVpcmVkIGptcyByZXNvdXJjZXMiLz4KLQk8ZWNobyBtZXNzYWdlPSJhbnQgY29uZmlnLWRiIC0tPkNvbmZpZ3VyZXMgdGhlIERCIi8+Ci0JPGVjaG8gbWVzc2FnZT0iPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIvPgorICAgIDxlY2hvIG1lc3NhZ2U9Ij09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iLz4KKyAgICAgPGVjaG8gbWVzc2FnZT0iKioqKioqIFNlY3VyaXR5IFRlc3RzdWl0ZSAoQmFua0FkbWluIEFwcCkgKioqKioiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJTdGFuZGFyZCBDb21tYW5kczoiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJhbnQgcXVpY2stbG9vayAtLT5idWlsZCxkZXBsb3ksc2V0dXAgYW5kIHJ1biBhIHNpbmdsZSB0ZXN0LCBkYW9tYW5hZ2VyIGZyb20gYmFua2FwcCIvPgorICAgIDxlY2hvIG1lc3NhZ2U9ImFudCBhbGwgLS0+YnVpbGQsZGVwbG95LHNldHVwIGFuZCBydW4gdGhlIHRlc3RzdWl0ZSIvPgorICAgIDxlY2hvIG1lc3NhZ2U9IiAiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJPcHRpb25hbCBDb21tYW5kczoiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJhbnQgc2V0dXAgLS0+RG9lcyB0aGUgc2VydmVyc2lkZSBjb25maWciLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJhbnQgcmVzdGFydC1zZXJ2ZXIgLS0+UmVzdGFydHMgYXBwc2VydmVyIi8+CisgICAgPGVjaG8gbWVzc2FnZT0iYW50IGNyZWF0ZS1maWxlLXVzZXJzLS0+Q3JlYXRlcyBzZWN1cml0eSBmaWxlIHJlYWxtIHVzZXJzL2dyb3VwcyIvPgorICAgIDxlY2hvIG1lc3NhZ2U9ImFudCBjcmVhdGUtam1zcmVzb3VyY2UgLS0+Q29uZmlndXJlcyBhbGwgdGhlIHJlcXVpcmVkIGptcyByZXNvdXJjZXMiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJhbnQgY29uZmlnLWRiIC0tPkNvbmZpZ3VyZXMgdGhlIERCIi8+CisgICAgPGVjaG8gbWVzc2FnZT0iPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIvPgogICA8L3RhcmdldD4KIAogCkBAIC0xMTMsNyArMTEzLDcgQEAKICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSJtZXNncHJvdmlkZXIiIHRhcmdldD0icnVuIiAvPgogICAgIC0tPgogICA8L3RhcmdldD4KLSAgCisKICAgPCEtLSB1bnNldHVwIGFsbCB0aGUgcmVzb3VyY2VzIC0tPgogICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1maWxlLXVzZXJzIi8+CkBAIC0xNTcsNyArMTU3LDcgQEAKIAogICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1qbXNyZXNvdXJjZXMtbG9jYWwiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgotICAgICAgPGFyZyBsaW5lPSJkZWxldGUtam1zLXJlc291cmNlIi8+CQorICAgICAgPGFyZyBsaW5lPSJkZWxldGUtam1zLXJlc291cmNlIi8+CiAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICA8YXJnIGxpbmU9Ii0taW5zdGFuY2UgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICAgIDxhcmcgbGluZT0iam1zL2FkbWluUXVldWUiLz4KQEAgLTE4MSw0NSArMTgxLDQ1IEBACiAgICAgICA8YXJnIGxpbmU9Imptcy9NeVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkiLz4KICAgICA8L2V4ZWM+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KLSAgICAgIDxhcmcgbGluZT0iZGVsZXRlLWptc2Rlc3QiLz4JCisgICAgICA8YXJnIGxpbmU9ImRlbGV0ZS1qbXNkZXN0Ii8+CiAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICA8YXJnIGxpbmU9Ii0taW5zdGFuY2UgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICAgIDxhcmcgbGluZT0iLS1kZXN0dHlwZSBqYWthcnRhLmptcy5RdWV1ZSIvPgogICAgICAgPGFyZyBsaW5lPSJNeVF1ZXVlIi8+CiAgICAgPC9leGVjPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+Ci0gICAgICA8YXJnIGxpbmU9ImRlbGV0ZS1qbXNkZXN0Ii8+CQorICAgICAgPGFyZyBsaW5lPSJkZWxldGUtam1zZGVzdCIvPgogICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgICAgPGFyZyBsaW5lPSItLWluc3RhbmNlICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgICA8YXJnIGxpbmU9Ii0tZGVzdHR5cGUgamFrYXJ0YS5qbXMuUXVldWUiLz4KICAgICAgIDxhcmcgbGluZT0iYWRtaW5RdWV1ZSIvPgotICAgIDwvZXhlYz4gIAorICAgIDwvZXhlYz4KICAgPC90YXJnZXQ+CiAKIAogPCEtLXRhcmdldCBmb3IgY3JlYXRpbmcgdGhlIGZpbGUgdXNlcnMgLS0+CiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1maWxlLXVzZXJzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtdXNlci1jb21tb24iPgotCQk8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9InNjb3R0Ii8+Ci0JCTxwYXJhbSBuYW1lPSJwYXNzd29yZCIgdmFsdWU9ImoyZWUiLz4KLQkJPHBhcmFtIG5hbWU9Imdyb3VwcyIgdmFsdWU9ImVqYi10ZXN0Ii8+Ci0JPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXVzZXItY29tbW9uIj4KLQkJPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJkZWVwYSIvPgotCQk8cGFyYW0gbmFtZT0icGFzc3dvcmQiIHZhbHVlPSJkZWVwYSIvPgotCQk8cGFyYW0gbmFtZT0iZ3JvdXBzIiB2YWx1ZT0ic3RhZmYiLz4KLQk8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtdXNlci1jb21tb24iPgorICAgICAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9InNjb3R0Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJwYXNzd29yZCIgdmFsdWU9ImoyZWUiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Imdyb3VwcyIgdmFsdWU9ImVqYi10ZXN0Ii8+CisgICAgPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXVzZXItY29tbW9uIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJkZWVwYSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icGFzc3dvcmQiIHZhbHVlPSJkZWVwYSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0iZ3JvdXBzIiB2YWx1ZT0ic3RhZmYiLz4KKyAgICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIDwhLS10YXJnZXQgZm9yIGRlbGV0aW5nIHRoZSBmaWxlIHVzZXJzIC0tPgogPHRhcmdldCBuYW1lPSJkZWxldGUtZmlsZS11c2VycyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXVzZXItY29tbW9uIj4KLQkJPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJzY290dCIvPgotCQk8cGFyYW0gbmFtZT0iZ3JvdXBzIiB2YWx1ZT0iZWpiLXRlc3QiLz4KLQk8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtdXNlci1jb21tb24iPgotCQk8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9ImRlZXBhIi8+Ci0JCTxwYXJhbSBuYW1lPSJncm91cHMiIHZhbHVlPSJzdGFmZiIvPgotCTwvYW50Y2FsbD4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbiI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0ic2NvdHQiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Imdyb3VwcyIgdmFsdWU9ImVqYi10ZXN0Ii8+CisgICAgPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXVzZXItY29tbW9uIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJkZWVwYSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0iZ3JvdXBzIiB2YWx1ZT0ic3RhZmYiLz4KKyAgICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIAogCkBAIC0yNDEsMjAgKzI0MSwyMCBAQAogICAgICAgPHBhcmFtIG5hbWU9Imptcy5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamFrYXJ0YS5qbXMuUXVldWUiLz4KICAgICAgIDxwYXJhbSBuYW1lPSJqbXMucmVzb3VyY2UubmFtZSIgdmFsdWU9Imptcy9NeVF1ZXVlIi8+CiAgICAgPC9hbnRjYWxsPgotICAgIAorCiAgIDwvdGFyZ2V0PgotICAKKwogCiAgIDwhLS0gVGFyZ2V0IGZvciBjcmVhdGluZyB0aGUgZGIgYW5kIGNvbmZpZ3VyYXRpb24gb2YgZGIiIC0tPgogICA8dGFyZ2V0IG5hbWU9ImNvbmZpZy1kYiI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgotCQk8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvYmFua2FkbWluX3BvaW50YmFzZS5zcWwiLz4KLQk8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgorICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvYmFua2FkbWluX3BvaW50YmFzZS5zcWwiLz4KKyAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCiAgIDwhLS0gVGFyZ2V0IGZvciBjcmVhdGluZyB0aGUgZGIiIC0tPgogICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1kYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIHRoZSBzYW1wbGUgZGIgLSAke2RiLnVybH0iLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyB0aGUgc2FtcGxlIGRiIC0gJHtkYi51cmx9Ii8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZGIucm9vdH0vY2xpZW50X3Rvb2xzL1BCX0NvbW1hbmRlci5zaCI+CiAgICAgICAgICAgICAgICAgPGFyZyBsaW5lPSIke2RiLmRyaXZlcn0iLz4KICAgICAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7ZGIudXJsfSIvPgpAQCAtMjcyLDMyICsyNzIsMzIgQEAKIAogICAgPCEtLSBjcmVhdGluZyB0aGUgb3V0ZmlsZSB3aXRoIHplcm8gc2l6ZSB0byBoYXZlIHRoZSBmaWxlIGR1cmluZyBqZGJjIHNldHVwIC0tPgogICAgPHRhcmdldCBuYW1lPSJpbml0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KKyAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgICA8dG91Y2ggZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vc2V0dXBEQlRhYmxlcy5vdXQiLz4KICAgIDwvdGFyZ2V0PgogCi0gICA8dGFyZ2V0IG5hbWU9InNldHVwIiAKKyAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiCiAgICAgIGRlcGVuZHM9ImluaXQsY3JlYXRlLWZpbGUtdXNlcnMsY3JlYXRlLWptc3Jlc291cmNlcyxkZXBsb3ktamRiYy1jb21tb24sY3JlYXRlLXBlcnNpc3RlbmNlLXJlc291cmNlLWNvbW1vbixyZWNvbmZpZy1jb21tb24sY29uZmlnLWRiIj4KICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLQk8ZWNobyBtZXNzYWdlPSJDb25maWd1cmVkIHRoZSBzZWN1cml0eSBmaWxlIHJlYWxtLCBqbXMgcmVzb3VyY2VzLCBqZGJjIHJlc291cmNlcywgcG9wdWxhdGluZyBkYiwgcmVzdGFydGluZyB0aGUgc2VydmVyLi4uZG9uZSIvPgorICAgIDxlY2hvIG1lc3NhZ2U9IkNvbmZpZ3VyZWQgdGhlIHNlY3VyaXR5IGZpbGUgcmVhbG0sIGptcyByZXNvdXJjZXMsIGpkYmMgcmVzb3VyY2VzLCBwb3B1bGF0aW5nIGRiLCByZXN0YXJ0aW5nIHRoZSBzZXJ2ZXIuLi5kb25lIi8+CiAgICA8L3RhcmdldD4KLSAgCi0gICA8dGFyZ2V0IG5hbWU9InNldHVwLW5vcmVzdGFydCIgCisKKyAgIDx0YXJnZXQgbmFtZT0ic2V0dXAtbm9yZXN0YXJ0IgogICAgICBkZXBlbmRzPSJpbml0LGNyZWF0ZS1maWxlLXVzZXJzLGNyZWF0ZS1qbXNyZXNvdXJjZXMsZGVwbG95LWpkYmMtY29tbW9uLGNyZWF0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZS1jb21tb24sY29uZmlnLWRiIj4KICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLQk8ZWNobyBtZXNzYWdlPSJDb25maWd1cmVkIHRoZSBzZWN1cml0eSBmaWxlIHJlYWxtLCBqbXMgcmVzb3VyY2VzLCBqZGJjIHJlc291cmNlcywgcG9wdWxhdGluZyBkYi4uLmRvbmUiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJDb25maWd1cmVkIHRoZSBzZWN1cml0eSBmaWxlIHJlYWxtLCBqbXMgcmVzb3VyY2VzLCBqZGJjIHJlc291cmNlcywgcG9wdWxhdGluZyBkYi4uLmRvbmUiLz4KICAgIDwvdGFyZ2V0PgogCiA8IS0tCiAgQ2xlYW4gdGhlIERCCiAtLT4KIDx0YXJnZXQgbmFtZT0iY2xlYW4tZGIiIGRlcGVuZHM9ImluaXQtY29tbW9uLGNyZWF0ZS1kYm91dGZpbGUiPgotCTxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2JhbmthZG1pbl9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiA8L3RhcmdldD4KLTwhLS0gCis8IS0tCiBDcmVhdGUgdGhlIG91dGZpbGUgYmVmb3JlIGV4ZWN1dGluZyB0aGUgc3FsCiAtLT4KIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWRib3V0ZmlsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL2Rhb21hbmFnZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2JhbmthZG1pbi9kYW9tYW5hZ2VyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzQ3MDk4OS4uNzE0ZmE2N2EgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2JhbmthZG1pbi9kYW9tYW5hZ2VyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL2Rhb21hbmFnZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpAQCAtMjgsNCArMjgsNCBAQAogPHByb3BlcnR5IG5hbWU9InN1bi1jbXAtZGJzY2hlbWEiIHZhbHVlPSJkZXNjcmlwdG9yL3NlY19iYW5rYWRtaW5fc2NoZW1hLmRic2NoZW1hIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzZWMtZGFvbWFuYWdlciIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzZWMtZGFvbWFuYWdlciIvPiAgICAgICAgXHUwMDIwCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9pbnRlZ3JhdGlvbi9iYW5rYWRtaW4vZGFvbWFuYWdlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9pbnRlZ3JhdGlvbi9iYW5rYWRtaW4vZGFvbWFuYWdlci9idWlsZC54bWwKaW5kZXggNzBjZWQ1Ny4uYzhhYWUxMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL2Rhb21hbmFnZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2JhbmthZG1pbi9kYW9tYW5hZ2VyL2J1aWxkLnhtbApAQCAtMjksNyArMjksNyBAQAogICAgJmNvbW1vblNldHVwOwogICAgJmNvbW1vbkJ1aWxkOwogICAgJnRlc3RQcm9wZXJ0aWVzOwotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW4sdW5kZXBsb3kiLz4KICAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0IiBkZXBlbmRzPSJidWlsZCxkZXBsb3kscnVuLHVuZGVwbG95Ii8+CiAKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotPCEtLQk8cHJvcGVydHkgbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi8qSG9tZSouY2xhc3MsKiovKkJlYW4qLmNsYXNzLCoqLypEYXRhKi5jbGFzcywqLmRic2NoZW1hIi8+Cis8IS0tICAgIDxwcm9wZXJ0eSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLypIb21lKi5jbGFzcywqKi8qQmVhbiouY2xhc3MsKiovKkRhdGEqLmNsYXNzLCouZGJzY2hlbWEiLz4KIC0tPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhciIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNTcsMTEgKzU3LDExIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgICAgIDwhLS0gQXMgdGhpcyBhcHAgY29udGFpbiBjb21tb24gZWpicyB0byBiZSBzaGFyZWQgYnkgb3RoZXIgYXBwcywgY29weWluZyB0aGUgY2xpZW50LmphciB0byBpbnN0YW5jZSBsaWIgZGlyZWN0b3J5IGFuZCByZXN0YXJ0IHRoZSBpbnN0YW5jZS0tPgogCi0JPCEtLSAKLQljb21tZW50ZWQgYXMgb3RoZXIgZGVwZW5kZW50IGFwcHMgYXJlIG5vdCBwdXR0aW5nIHVuZGVyIHRoaXMgd29ya3NwYWNlIGRpcmVjdG9yeSAKKyAgICA8IS0tCisgICAgY29tbWVudGVkIGFzIG90aGVyIGRlcGVuZGVudCBhcHBzIGFyZSBub3QgcHV0dGluZyB1bmRlciB0aGlzIHdvcmtzcGFjZSBkaXJlY3RvcnkKICAgICAgICA8Y29weSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiIHRvZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0vbGliLyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+CiAgICAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iLi4vIiB0YXJnZXQ9InJlc3RhcnQtc2VydmVyIi8+Ci0JLS0+CisgICAgLS0+CiAgICAgPC90YXJnZXQ+CiAKIApAQCAtNzIsMTEgKzcyLDExIEBACiAgICAgICAgIDxhcmcgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIvPgogICAgICAgICA8YXJnIHZhbHVlPSIteG1sIi8+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9nbGFzc2Zpc2gtYWNjLnhtbCIvPgotCTxhcmcgdmFsdWU9Ii10ZXh0YXV0aCIvPgotCTxhcmcgdmFsdWU9Ii11c2VyIi8+Ci0JPGFyZyB2YWx1ZT0ic2NvdHQiLz4KLQk8YXJnIHZhbHVlPSItcGFzc3dvcmQiLz4KLQk8YXJnIHZhbHVlPSJqMmVlIi8+CisgICAgPGFyZyB2YWx1ZT0iLXRleHRhdXRoIi8+CisgICAgPGFyZyB2YWx1ZT0iLXVzZXIiLz4KKyAgICA8YXJnIHZhbHVlPSJzY290dCIvPgorICAgIDxhcmcgdmFsdWU9Ii1wYXNzd29yZCIvPgorICAgIDxhcmcgdmFsdWU9ImoyZWUiLz4KICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KIApAQCAtMTU5LDUgKzE1OSw1IEBACiAgICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+CiAKLSAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2JhbmthZG1pbi9kYW9tYW5hZ2VyL2NsaWVudC9CZWFuVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL2Rhb21hbmFnZXIvY2xpZW50L0JlYW5UZXN0Q2xpZW50LmphdmEKaW5kZXggNTU4YzVmYy4uMzg2MmZhNyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL2Rhb21hbmFnZXIvY2xpZW50L0JlYW5UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL2Rhb21hbmFnZXIvY2xpZW50L0JlYW5UZXN0Q2xpZW50LmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKICAqIEB2ZXJzaW9uIDEuMAogICovCiAKLXB1YmxpYyBjbGFzcyBCZWFuVGVzdENsaWVudCAKK3B1YmxpYyBjbGFzcyBCZWFuVGVzdENsaWVudAogewogICBwcml2YXRlIFByb3BlcnRpZXMgYmVhbnByb3BzPW51bGw7CiAgIHByaXZhdGUgamF2YXgubmFtaW5nLkNvbnRleHQgam5kaT1udWxsOwpAQCAtNTQsMTIgKzU0LDEyIEBACiAgICAgdGhpcy5iZWFucHJvcHM9cDsKICAgfQogCi0gIHB1YmxpYyB2b2lkIHNldHVwSk5ESUNvbnRleHQoUHJvcGVydGllcyBwKSAKKyAgcHVibGljIHZvaWQgc2V0dXBKTkRJQ29udGV4dChQcm9wZXJ0aWVzIHApCiAgIHsKICAgICAgIHRyeQogICAgICAgewogICAgICAgICAgIGpuZGk9bmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpOwotICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKSAKKyAgICAgIH1jYXRjaChFeGNlcHRpb24gZSkKICAgICAgIHsKICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgfQpAQCAtNzksMTMgKzc5LDEzIEBACiAgICAgcmV0dXJuIChFSkJIb21lKWVqYkhvbWU7CiAgIH0KIAotICAKKwogICBwdWJsaWMgRUpCT2JqZWN0IGdldFJlbW90ZUludGVyZmFjZShFSkJIb21lIGVqYkhvbWUpIHsKICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW5zaWRlIGdldHRpbmcgcmVtb3RlIGludGVyZmFjZSIpOwogICAgICAgdHJ5ewogICAgICAgICAgIGVqYk9iamVjdD0oKEN1c3RvbWVyUmVtb3RlSG9tZSllamJIb21lKS5jcmVhdGVDdXN0b21lcihjdXN0b21lcklELGN1c3RvbWVySUQpOwotCSAgU3lzdGVtLm91dC5wcmludGxuKCJSZW1vdGUgaW50ZXJmYWNlIG9mIEN1c3RvbWVyIEJlYW4iK2VqYk9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgICAgICAgCisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlbW90ZSBpbnRlcmZhY2Ugb2YgQ3VzdG9tZXIgQmVhbiIrZWpiT2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKKwogICAgICAgfWNhdGNoKGpha2FydGEuZWpiLkR1cGxpY2F0ZUtleUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb246Q3VzdG9tZXIgYWxyZWFkeSBleGlzdHMiKTsKICAgICAgIH0KQEAgLTk0LDY2ICs5NCw2NiBAQAogICAgICAgfQogICAgICAgcmV0dXJuIChFSkJPYmplY3QpZWpiT2JqZWN0OwogICB9Ci0gIAotICBwdWJsaWMgdm9pZCBydW5UZXN0Q2xpZW50KCkgCisKKyAgcHVibGljIHZvaWQgcnVuVGVzdENsaWVudCgpCiAgIHsKLQkgIHRyeQotCSAgewotCQkgIE9iamVjdCBvYmo9KEN1c3RvbWVyUmVtb3RlSG9tZSlqbmRpLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvQ3VzdG9tZXJCZWFuIik7Ci0JCSAgZWpiSG9tZT0oQ3VzdG9tZXJSZW1vdGVIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmosY29tLnN1bi5zMXBlcWUuc2VjdXJpdHkuaW50ZWdyYXRpb24uYmFua2FkbWluLmRhb21hbmFnZXIuQ3VzdG9tZXJSZW1vdGVIb21lLmNsYXNzKTsKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIkhvbWUgaW50ZXJmYWNlIG9mIEN1c3RvbWVyIEJlYW4iK2VqYkhvbWUuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotCSAgfWNhdGNoKFRocm93YWJsZSBlKQotCSAgewotCQkgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICB9Ci0JICBTeXN0ZW0ub3V0LnByaW50bG4oImluc2lkZSBnZXR0aW5nIHJlbW90ZSBpbnRlcmZhY2UiKTsKLQkgIHRyeXsKLQkJICB0cnl7ZWpiT2JqZWN0PSgoQ3VzdG9tZXJSZW1vdGVIb21lKWVqYkhvbWUpLmZpbmRCeVByaW1hcnlLZXkoY3VzdG9tZXJJRCk7Ci0JCSAgfWNhdGNoKGpha2FydGEuZWpiLk9iamVjdE5vdEZvdW5kRXhjZXB0aW9uIGUpe1N5c3RlbS5vdXQucHJpbnRsbigiY3VzdG9tZXIgZG9lcyBub3QgZXhpc3QiKTt9Ci0JCSAgaWYoZWpiT2JqZWN0PT1udWxsKQotCQkgIHsKLQkJCSAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBjdXN0b21lci4uLiIrY3VzdG9tZXJJRCk7Ci0JCQkgIGVqYk9iamVjdD0oKEN1c3RvbWVyUmVtb3RlSG9tZSllamJIb21lKS5jcmVhdGVDdXN0b21lcihjdXN0b21lcklELGN1c3RvbWVySUQpOwotCQkgIH0KLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlbW90ZSBpbnRlcmZhY2Ugb2YgQ3VzdG9tZXIgQmVhbiIrZWpiT2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLQkJICBib29sZWFuIHJldD1lamJPYmplY3QuVGVzdENhbGxlckluUm9sZSgpOwotCQkgIGlmKHJldD09dHJ1ZSkKLQkJCSAgc3RhdC5hZGRTdGF0dXMoIkpBQ0M6Y21wX2NtcCBpc0NhbGxlckluUm9sZSIsc3RhdC5QQVNTKTsKLQkJICBlbHNlIGlmKHJldD09ZmFsc2UpCi0JCQkgIHN0YXQuYWRkU3RhdHVzKCJKQUNDOmNtcF9jbXAgaXNDYWxsZXJJblJvbGUiLHN0YXQuRkFJTCk7Ci0JCSAgZWxzZQotCQkgIHsKLQkJCSAgc3RhdC5hZGRTdGF0dXMoIkpBQ0M6Y21wX2NtcCBpc0NhbGxlckluUm9sZSIsc3RhdC5GQUlMKTsKLQkJCSAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0IGRpZCBub3QgZ2V0IHJ1biIpOwotCQkgIH0KKyAgICAgIHRyeQorICAgICAgeworICAgICAgICAgIE9iamVjdCBvYmo9KEN1c3RvbWVyUmVtb3RlSG9tZSlqbmRpLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvQ3VzdG9tZXJCZWFuIik7CisgICAgICAgICAgZWpiSG9tZT0oQ3VzdG9tZXJSZW1vdGVIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmosY29tLnN1bi5zMXBlcWUuc2VjdXJpdHkuaW50ZWdyYXRpb24uYmFua2FkbWluLmRhb21hbmFnZXIuQ3VzdG9tZXJSZW1vdGVIb21lLmNsYXNzKTsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhvbWUgaW50ZXJmYWNlIG9mIEN1c3RvbWVyIEJlYW4iK2VqYkhvbWUuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOworICAgICAgfWNhdGNoKFRocm93YWJsZSBlKQorICAgICAgeworICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICB9CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluc2lkZSBnZXR0aW5nIHJlbW90ZSBpbnRlcmZhY2UiKTsKKyAgICAgIHRyeXsKKyAgICAgICAgICB0cnl7ZWpiT2JqZWN0PSgoQ3VzdG9tZXJSZW1vdGVIb21lKWVqYkhvbWUpLmZpbmRCeVByaW1hcnlLZXkoY3VzdG9tZXJJRCk7CisgICAgICAgICAgfWNhdGNoKGpha2FydGEuZWpiLk9iamVjdE5vdEZvdW5kRXhjZXB0aW9uIGUpe1N5c3RlbS5vdXQucHJpbnRsbigiY3VzdG9tZXIgZG9lcyBub3QgZXhpc3QiKTt9CisgICAgICAgICAgaWYoZWpiT2JqZWN0PT1udWxsKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBjdXN0b21lci4uLiIrY3VzdG9tZXJJRCk7CisgICAgICAgICAgICAgIGVqYk9iamVjdD0oKEN1c3RvbWVyUmVtb3RlSG9tZSllamJIb21lKS5jcmVhdGVDdXN0b21lcihjdXN0b21lcklELGN1c3RvbWVySUQpOworICAgICAgICAgIH0KKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlbW90ZSBpbnRlcmZhY2Ugb2YgQ3VzdG9tZXIgQmVhbiIrZWpiT2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKKyAgICAgICAgICBib29sZWFuIHJldD1lamJPYmplY3QuVGVzdENhbGxlckluUm9sZSgpOworICAgICAgICAgIGlmKHJldD09dHJ1ZSkKKyAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkpBQ0M6Y21wX2NtcCBpc0NhbGxlckluUm9sZSIsc3RhdC5QQVNTKTsKKyAgICAgICAgICBlbHNlIGlmKHJldD09ZmFsc2UpCisgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJKQUNDOmNtcF9jbXAgaXNDYWxsZXJJblJvbGUiLHN0YXQuRkFJTCk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkpBQ0M6Y21wX2NtcCBpc0NhbGxlckluUm9sZSIsc3RhdC5GQUlMKTsKKyAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0IGRpZCBub3QgZ2V0IHJ1biIpOworICAgICAgICAgIH0KIAotCSAgfWNhdGNoIChUaHJvd2FibGUgZSkgewotCQkgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICB9CisgICAgICB9Y2F0Y2ggKFRocm93YWJsZSBlKSB7CisgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgIH0KIAotCSAgdHJ5IHsKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oImNyZWF0ZWQgY3VzdG9tZXIgZnJvbSBjbGllbnQiK2N1c3RvbWVySUQpOwotCQkgIGJvb2xlYW4gcmV0PWVqYk9iamVjdC5UZXN0Q2FsbGVySW5Sb2xlKCk7Ci0JCSAgaWYocmV0PT10cnVlKQotCQkJICBzdGF0LmFkZFN0YXR1cygiSkFDQzpjbXBfY21wIGlzQ2FsbGVySW5Sb2xlIixzdGF0LlBBU1MpOwotCQkgIGVsc2UgaWYocmV0PT1mYWxzZSkKLQkJCSAgc3RhdC5hZGRTdGF0dXMoIkpBQ0M6Y21wX2NtcCBpc0NhbGxlckluUm9sZSIsc3RhdC5GQUlMKTsKLQkJICBlbHNlCi0JCSAgewotCQkJc3RhdC5hZGRTdGF0dXMoIkpBQ0M6Y21wX2NtcCBpc0NhbGxlckluUm9sZSIsc3RhdC5GQUlMKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBkaWQgbm90IGdldCBydW4iKTsKLQkJICB9Ci0JCQkgIAotCSAgfWNhdGNoKFRocm93YWJsZSBlKSB7Ci0JCSAgc3RhdC5hZGRTdGF0dXMoIkpBQ0M6Y21wX2NtcCBpc0NhbGxlckluUm9sZSIsc3RhdC5GQUlMKTsKLQkJICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgfQorICAgICAgdHJ5IHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNyZWF0ZWQgY3VzdG9tZXIgZnJvbSBjbGllbnQiK2N1c3RvbWVySUQpOworICAgICAgICAgIGJvb2xlYW4gcmV0PWVqYk9iamVjdC5UZXN0Q2FsbGVySW5Sb2xlKCk7CisgICAgICAgICAgaWYocmV0PT10cnVlKQorICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiSkFDQzpjbXBfY21wIGlzQ2FsbGVySW5Sb2xlIixzdGF0LlBBU1MpOworICAgICAgICAgIGVsc2UgaWYocmV0PT1mYWxzZSkKKyAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkpBQ0M6Y21wX2NtcCBpc0NhbGxlckluUm9sZSIsc3RhdC5GQUlMKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkpBQ0M6Y21wX2NtcCBpc0NhbGxlckluUm9sZSIsc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBkaWQgbm90IGdldCBydW4iKTsKKyAgICAgICAgICB9CisKKyAgICAgIH1jYXRjaChUaHJvd2FibGUgZSkgeworICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJKQUNDOmNtcF9jbXAgaXNDYWxsZXJJblJvbGUiLHN0YXQuRkFJTCk7CisgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgIH0KICAgfQotICAKKwogICBwdWJsaWMgdm9pZCBjbGVhbnVwVGVzdHMoKXsKICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJjbXBfY21wSUQiKTsKICAgfQotICAKKwogICBwdWJsaWMgdm9pZCBydW4oKSB7CiAgICAgICB0cnkgewogICAgICAgICAgIGxvZ2dlci5pbmZvKCJpbnNpZGUgcnVuIG1ldGhvZCIpOwpAQCAtMTcxLDcgKzE3MSw3IEBACiAgICAgICBQcm9wZXJ0aWVzIHA9bnVsbDsvLyB3ZSBhcmUgdGVzdGluZyBsb2NhbGx5IG9ubHksIG5vIHByb3BlcnRpZXMgdG8gdGVzdAogICAgICAgQmVhblRlc3RDbGllbnQgdGVzdENsaWVudD1uZXcgQmVhblRlc3RDbGllbnQocCk7CiAgICAgICB0ZXN0Q2xpZW50LnJ1bigpOwotICAgICAgCisKICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL2Rhb21hbmFnZXIvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2JhbmthZG1pbi9kYW9tYW5hZ2VyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggYzdmNjY0MC4uODE3ZmJhZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL2Rhb21hbmFnZXIvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9pbnRlZ3JhdGlvbi9iYW5rYWRtaW4vZGFvbWFuYWdlci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC00NSwxMSArNDUsMTEgQEAKICAgICAgIDwvY21wLWZpZWxkPgogICAgICAgPHByaW1rZXktZmllbGQ+YWNjb3VudElEPC9wcmlta2V5LWZpZWxkPgogICAgICAgPHNlY3VyaXR5LXJvbGUtcmVmPgotICAgICAgCTxyb2xlLW5hbWU+TWFuYWdlcjwvcm9sZS1uYW1lPgorICAgICAgICAgIDxyb2xlLW5hbWU+TWFuYWdlcjwvcm9sZS1uYW1lPgogICAgICAgICA8cm9sZS1saW5rPk1hbmFnZXI8L3JvbGUtbGluaz4KICAgICAgIDwvc2VjdXJpdHktcm9sZS1yZWY+CiAgICAgICA8c2VjdXJpdHktcm9sZS1yZWY+Ci0gICAgICAJPHJvbGUtbmFtZT5BZG1pbmlzdHJhdG9yPC9yb2xlLW5hbWU+CisgICAgICAgICAgPHJvbGUtbmFtZT5BZG1pbmlzdHJhdG9yPC9yb2xlLW5hbWU+CiAgICAgICAgIDxyb2xlLWxpbms+QWRtaW5pc3RyYXRvcjwvcm9sZS1saW5rPgogICAgICAgPC9zZWN1cml0eS1yb2xlLXJlZj4KICAgICAgIDxzZWN1cml0eS1pZGVudGl0eT4KQEAgLTg1LDExICs4NSwxMSBAQAogICAgICAgICA8ZWpiLWxpbms+c2VjLWRhb21hbmFnZXItZWpiLmphciNBY2NvdW50QmVhbjwvZWpiLWxpbms+CiAgICAgICA8L2VqYi1sb2NhbC1yZWY+CiAgICAgICA8c2VjdXJpdHktcm9sZS1yZWY+Ci0gICAgICAJPHJvbGUtbmFtZT5NYW5hZ2VyPC9yb2xlLW5hbWU+CisgICAgICAgICAgPHJvbGUtbmFtZT5NYW5hZ2VyPC9yb2xlLW5hbWU+CiAgICAgICAgIDxyb2xlLWxpbms+TWFuYWdlcjwvcm9sZS1saW5rPgogICAgICAgPC9zZWN1cml0eS1yb2xlLXJlZj4KICAgICAgIDxzZWN1cml0eS1yb2xlLXJlZj4KLSAgICAgIAk8IS0tPHJvbGUtbmFtZT5BRE1JTjwvcm9sZS1uYW1lPi0tPgorICAgICAgICAgIDwhLS08cm9sZS1uYW1lPkFETUlOPC9yb2xlLW5hbWU+LS0+CiAgICAgICAgIDxyb2xlLW5hbWU+QWRtaW5pc3RyYXRvcjwvcm9sZS1uYW1lPgogICAgICAgICA8cm9sZS1saW5rPkFkbWluaXN0cmF0b3I8L3JvbGUtbGluaz4KICAgICAgIDwvc2VjdXJpdHktcm9sZS1yZWY+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9pbnRlZ3JhdGlvbi9iYW5rYWRtaW4vZGFvbWFuYWdlci9kZXNjcmlwdG9yL3N1bi1jbXAtbWFwcGluZ3MueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL2Rhb21hbmFnZXIvZGVzY3JpcHRvci9zdW4tY21wLW1hcHBpbmdzLnhtbAppbmRleCAyMzEyYTJjLi5mMzk0MDM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9pbnRlZ3JhdGlvbi9iYW5rYWRtaW4vZGFvbWFuYWdlci9kZXNjcmlwdG9yL3N1bi1jbXAtbWFwcGluZ3MueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2JhbmthZG1pbi9kYW9tYW5hZ2VyL2Rlc2NyaXB0b3Ivc3VuLWNtcC1tYXBwaW5ncy54bWwKQEAgLTIwLDggKzIwLDggQEAKIAogPHN1bi1jbXAtbWFwcGluZ3M+CiAgICA8c3VuLWNtcC1tYXBwaW5nPgotCTxzY2hlbWE+c2VjX2JhbmthZG1pbl9zY2hlbWE8L3NjaGVtYT4KLQk8ZW50aXR5LW1hcHBpbmc+CisgICAgPHNjaGVtYT5zZWNfYmFua2FkbWluX3NjaGVtYTwvc2NoZW1hPgorICAgIDxlbnRpdHktbWFwcGluZz4KICAgICAgICAgICAgIDxlamItbmFtZT5DdXN0b21lckJlYW48L2VqYi1uYW1lPgogICAgICAgICAgICAgPHRhYmxlLW5hbWU+U0VDX0JBTktBRE1JTl9DVVNUT01FUkVKQjwvdGFibGUtbmFtZT4KICAgICAgICAgICAgIDxjbXAtZmllbGQtbWFwcGluZz4KQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgICAgICAgICA8L2NvbHVtbi1wYWlyPgogICAgICAgICAgICAgPC9jbXItZmllbGQtbWFwcGluZz4KICAgICAgICAgPC9lbnRpdHktbWFwcGluZz4KLQk8ZW50aXR5LW1hcHBpbmc+CisgICAgPGVudGl0eS1tYXBwaW5nPgogICAgICAgICAgICAgPGVqYi1uYW1lPkFjY291bnRCZWFuPC9lamItbmFtZT4KICAgICAgICAgICAgIDx0YWJsZS1uYW1lPlNFQ19CQU5LQURNSU5fQUNDT1VOVEVKQjwvdGFibGUtbmFtZT4KICAgICAgICAgICAgIDxjbXAtZmllbGQtbWFwcGluZz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2JhbmthZG1pbi9kYW9tYW5hZ2VyL2VqYi9BY2NvdW50QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL2Rhb21hbmFnZXIvZWpiL0FjY291bnRCZWFuLmphdmEKaW5kZXggNTJmMTc3ZC4uYWU4MjY1ZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL2Rhb21hbmFnZXIvZWpiL0FjY291bnRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL2Rhb21hbmFnZXIvZWpiL0FjY291bnRCZWFuLmphdmEKQEAgLTIzLDE5ICsyMywxOSBAQAogCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWNjb3VudEJlYW4gZXh0ZW5kcyBFbnRlcnByaXNlQmVhbkxvZ2dlciBpbXBsZW1lbnRzIGpha2FydGEuZWpiLkVudGl0eUJlYW4KIHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKCJiYW5rLmFkbWluIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgQ29uc29sZUhhbmRsZXIgY2ggPSBuZXcgQ29uc29sZUhhbmRsZXIoKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0QWNjb3VudElEKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0QWNjb3VudElEKFN0cmluZyBpZCk7Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgRG91YmxlIGdldEFtb3VudCgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldEFtb3VudChEb3VibGUgYW10KTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBIYXNoTWFwIGdldFByaXZpbGVnZXMoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRQcml2aWxlZ2VzKEhhc2hNYXAgcHJpdmlsZWdlcyk7Ci0gICAgCisKIAogICAgICAgICAvL0J1c2luZXNzIG1ldGhvZHMKIApAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICB0b1hNTCgiZWpiTG9hZCIsIkNNUCBBY2NvdW50Iik7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsKICAgICAgICAgdG9YTUwoImVqYlN0b3JlIiwiQ01QIEFjY291bnQiKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9pbnRlZ3JhdGlvbi9iYW5rYWRtaW4vZGFvbWFuYWdlci9lamIvQWNjb3VudERhdGFPYmplY3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2JhbmthZG1pbi9kYW9tYW5hZ2VyL2VqYi9BY2NvdW50RGF0YU9iamVjdC5qYXZhCmluZGV4IDY5YjU3NTcuLmMxYTJiOTcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2JhbmthZG1pbi9kYW9tYW5hZ2VyL2VqYi9BY2NvdW50RGF0YU9iamVjdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2JhbmthZG1pbi9kYW9tYW5hZ2VyL2VqYi9BY2NvdW50RGF0YU9iamVjdC5qYXZhCkBAIC01OCw4ICs1OCw4IEBACiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpewotCQlyZXR1cm4gbmV3IFN0cmluZyhnZXRBY2NvdW50SUQoKSk7Ci0JfQorICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhnZXRBY2NvdW50SUQoKSk7CisgICAgfQogCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2JhbmthZG1pbi9kYW9tYW5hZ2VyL2VqYi9BY2NvdW50TG9jYWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2JhbmthZG1pbi9kYW9tYW5hZ2VyL2VqYi9BY2NvdW50TG9jYWwuamF2YQppbmRleCA2ODgxNjJlLi5hMjZjNGU3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9pbnRlZ3JhdGlvbi9iYW5rYWRtaW4vZGFvbWFuYWdlci9lamIvQWNjb3VudExvY2FsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL2Rhb21hbmFnZXIvZWpiL0FjY291bnRMb2NhbC5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiAKIHB1YmxpYyBpbnRlcmZhY2UgQWNjb3VudExvY2FsIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCTG9jYWxPYmplY3QKIHsKLQlwdWJsaWMgQWNjb3VudERhdGFPYmplY3QgZ2V0REFPKCk7Ci0JCisgICAgcHVibGljIEFjY291bnREYXRhT2JqZWN0IGdldERBTygpOworCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2JhbmthZG1pbi9kYW9tYW5hZ2VyL2VqYi9BY2NvdW50TG9jYWxIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9pbnRlZ3JhdGlvbi9iYW5rYWRtaW4vZGFvbWFuYWdlci9lamIvQWNjb3VudExvY2FsSG9tZS5qYXZhCmluZGV4IDk5ZWI5NzIuLmRhNzdiNmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2JhbmthZG1pbi9kYW9tYW5hZ2VyL2VqYi9BY2NvdW50TG9jYWxIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL2Rhb21hbmFnZXIvZWpiL0FjY291bnRMb2NhbEhvbWUuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEFjY291bnRMb2NhbEhvbWUgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJMb2NhbEhvbWUKIHsKLQlwdWJsaWMgQWNjb3VudExvY2FsIGNyZWF0ZUFjY291bnQgKEFjY291bnREYXRhT2JqZWN0IGRhbykKLQl0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOworICAgIHB1YmxpYyBBY2NvdW50TG9jYWwgY3JlYXRlQWNjb3VudCAoQWNjb3VudERhdGFPYmplY3QgZGFvKQorICAgIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247CiAgICAgICAgIHB1YmxpYyBBY2NvdW50TG9jYWwgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgaWQpIHRocm93cyBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9pbnRlZ3JhdGlvbi9iYW5rYWRtaW4vZGFvbWFuYWdlci9lamIvQWNjb3VudFJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL2Rhb21hbmFnZXIvZWpiL0FjY291bnRSZW1vdGUuamF2YQppbmRleCBjNzg3ODEzLi45ZDk5NDIwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9pbnRlZ3JhdGlvbi9iYW5rYWRtaW4vZGFvbWFuYWdlci9lamIvQWNjb3VudFJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2JhbmthZG1pbi9kYW9tYW5hZ2VyL2VqYi9BY2NvdW50UmVtb3RlLmphdmEKQEAgLTIwLDUgKzIwLDUgQEAKIAogcHVibGljIGludGVyZmFjZSBBY2NvdW50UmVtb3RlIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCT2JqZWN0CiB7Ci0JcHVibGljIEFjY291bnREYXRhT2JqZWN0IGdldERBTygpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CisgICAgcHVibGljIEFjY291bnREYXRhT2JqZWN0IGdldERBTygpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9pbnRlZ3JhdGlvbi9iYW5rYWRtaW4vZGFvbWFuYWdlci9lamIvQWNjb3VudFJlbW90ZUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2JhbmthZG1pbi9kYW9tYW5hZ2VyL2VqYi9BY2NvdW50UmVtb3RlSG9tZS5qYXZhCmluZGV4IDhkY2JkZGEuLjdlYTg0YmMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2JhbmthZG1pbi9kYW9tYW5hZ2VyL2VqYi9BY2NvdW50UmVtb3RlSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2JhbmthZG1pbi9kYW9tYW5hZ2VyL2VqYi9BY2NvdW50UmVtb3RlSG9tZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiAKIHB1YmxpYyBpbnRlcmZhY2UgQWNjb3VudFJlbW90ZUhvbWUgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJIb21lCiB7Ci0JcHVibGljIEFjY291bnRSZW1vdGUgY3JlYXRlQWNjb3VudCAoQWNjb3VudERhdGFPYmplY3QgZGFvKQotCXRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24sUmVtb3RlRXhjZXB0aW9uOworICAgIHB1YmxpYyBBY2NvdW50UmVtb3RlIGNyZWF0ZUFjY291bnQgKEFjY291bnREYXRhT2JqZWN0IGRhbykKKyAgICB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uLFJlbW90ZUV4Y2VwdGlvbjsKICAgICAgICAgcHVibGljIEFjY291bnRSZW1vdGUgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgaWQpIHRocm93cyBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb24sUmVtb3RlRXhjZXB0aW9uOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9pbnRlZ3JhdGlvbi9iYW5rYWRtaW4vZGFvbWFuYWdlci9lamIvQ3VzdG9tZXJCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9pbnRlZ3JhdGlvbi9iYW5rYWRtaW4vZGFvbWFuYWdlci9lamIvQ3VzdG9tZXJCZWFuLmphdmEKaW5kZXggNjE5ZmIyYi4uODAyMzM5ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL2Rhb21hbmFnZXIvZWpiL0N1c3RvbWVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2JhbmthZG1pbi9kYW9tYW5hZ2VyL2VqYi9DdXN0b21lckJlYW4uamF2YQpAQCAtMzAsNDUgKzMwLDQ1IEBACiAgICAgQWNjb3VudExvY2FsSG9tZSBhY2NvdW50SG9tZT1udWxsOwogICAgIHB1YmxpYyBqYXZheC5uYW1pbmcuQ29udGV4dCBqbmRpQ29udGV4dD1udWxsOwogICAgIE9iamVjdCBvYmpyZWY9bnVsbDsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKCJiYW5rLmFkbWluIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgQ29uc29sZUhhbmRsZXIgY2ggPSBuZXcgQ29uc29sZUhhbmRsZXIoKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0Q3VzdG9tZXJJRCgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldEN1c3RvbWVySUQoU3RyaW5nIGlkKTsKLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0Q3VzdG9tZXJOYW1lKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0Q3VzdG9tZXJOYW1lKFN0cmluZyBuYW1lKTsKLSAgICAKKwogICAgIC8vcmVsYXRpb25zaGlwIGZpZWxkcwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IENvbGxlY3Rpb24gZ2V0QWNjb3VudHMoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRBY2NvdW50cyhDb2xsZWN0aW9uIGFjY291bnQpOwotICAgIAorCiAKICAgICAgICAgLy9CdXNpbmVzcyBtZXRob2RzCiAKICAgICBwdWJsaWMgU3RyaW5nIGVqYkNyZWF0ZUN1c3RvbWVyKFN0cmluZyBpZCxTdHJpbmcgbmFtZSkKICAgICB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uCiAgICAgewotICAgICAgICAKKwogICAgICAgICB0b1hNTCgiZWpiQ3JlYXRlQ3VzdG9tZXIiLCJFbnRlciIpOwogICAgICAgICAvL2lmKGVqYkNvbnRleHQuaXNDYWxsZXJJblJvbGUoIkFETUlOIikpCiAgICAgICAgIGlmKGVqYkNvbnRleHQuaXNDYWxsZXJJblJvbGUoIkFkbWluaXN0cmF0b3IiKSkKICAgICAgICAgICAgIHRvWE1MKCJlamJDcmVhdGVDdXN0b21lciIsImlzQ2FsbGVySW5Sb2xlOiAiKyJhZG1pbmlzdHJhdG9yIik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRvWE1MKCJlamJDcmVhdGVDdXN0b21lciIsImlzQ2FsbGVySW5Sb2xlOiAiKyJOT1QgSU4gYWRtaW5pc3RyYXRvciIpOwotICAgICAgICAKKwogICAgICAgICBzZXRDdXN0b21lcklEKGlkKTsKICAgICAgICAgc2V0Q3VzdG9tZXJOYW1lKG5hbWUpOwogICAgICAgICB0b1hNTCgiZWpiQ3JlYXRlQ3VzdG9tZXIiLCJDcmVhdGVkIEN1c3RvbWVyOiAiK2lkKTsKICAgICAgICAgamF2YS5zZWN1cml0eS5QcmluY2lwYWwgcHJpbmNpcGFsPWVqYkNvbnRleHQuZ2V0Q2FsbGVyUHJpbmNpcGFsKCk7CiAgICAgICAgIHRvWE1MKCJlamJDcmVhdGVDdXN0b21lciIsImdldENhbGxlclByaW5jaXBhbDogIitwcmluY2lwYWwpOwogICAgICAgICB0b1hNTCgiZWpiQ3JlYXRlQ3VzdG9tZXIiLCJFeGl0Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIFRlc3RDYWxsZXJJblJvbGUoKQogICAgIHsKICAgICAgICAgYm9vbGVhbiBpc0NhbGxlckluUm9sZT1mYWxzZTsKQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgICAgICAgIGlzQ2FsbGVySW5Sb2xlPWZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBpc0NhbGxlckluUm9sZTsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBhZGRBY2NvdW50KEFjY291bnREYXRhT2JqZWN0IGFkbykKQEAgLTk0LDEyICs5NCwxMiBAQAogICAgICAgICB7CiAgICAgICAgICAgICBqYXZhLnNlY3VyaXR5LlByaW5jaXBhbCBwcmluY2lwYWw9ZWpiQ29udGV4dC5nZXRDYWxsZXJQcmluY2lwYWwoKTsKICAgICAgICAgICAgIHRvWE1MKCJhZGRBY2NvdW50IiwiZ2V0Q2FsbGVyUHJpbmNpcGFsOiAiKyBwcmluY2lwYWwpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKGVqYkNvbnRleHQuaXNDYWxsZXJJblJvbGUoIkFkbWluaXN0cmF0b3IiKSkKICAgICAgICAgICAgICAgICB0b1hNTCgiYWRkQWNjb3VudCIsImlzQ2FsbGVySW5Sb2xlOiAiKyJhZG1pbmlzdHJhdG9yIik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgdG9YTUwoImFkZEFjY291bnQiLCJpc0NhbGxlckluUm9sZTogIisiTk9UIElOIGFkbWluaXN0cmF0b3IiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ3VzdG9tZXJCZWFuXHQgUHJpbWFyeSBrZXkgb2YgYWNjdCBiZWluZyBhZGRlZFx0IithZG8uZ2V0QWNjb3VudElEKCkpOwogICAgICAgICAgICAgQWNjb3VudExvY2FsIGFjY291bnRMb2NhbD1hY2NvdW50SG9tZS5jcmVhdGVBY2NvdW50KGFkbyk7CiAgICAgICAgICAgICBnZXRBY2NvdW50cygpLmFkZChhY2NvdW50TG9jYWwpOwpAQCAtMTQyLDEzICsxNDIsMTMgQEAKICAgICAgICAgICAgIGFkZEFjY291bnQgTmVlZHMgUmVtb3RlIEludGVyZmFjZSBpbnN0ZWFkIG9mIExvY2FsLHN0dXB1ZCB3b3JrYXJvdW5kIik7Ki8KICAgICAgICAgICAgIGpuZGlDb250ZXh0PW5ldyBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIHRvWE1MKCJzZXRFbnRpdHlDb250ZXh0IiwgImdvdF9KTkRJQ29udGV4dCIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIG9ianJlZj1qbmRpQ29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0FjY291bnQiKTsKICAgICAgICAgICAgIHRvWE1MKCJzZXRFbnRpdHlDb250ZXh0IiwiTG9va2VkX3VwX0FjY291bnQiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBhY2NvdW50SG9tZT0oQWNjb3VudExvY2FsSG9tZSlqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZixBY2NvdW50TG9jYWxIb21lLmNsYXNzKTsKICAgICAgICAgICAgIHRvWE1MKCJzZXRFbnRpdHlDb250ZXh0IiwiQ3JlYXRlZCBBY2NvdW50IEhvbWUiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0KICAgICAgICAgY2F0Y2goVGhyb3dhYmxlIGUpIHsKICAgICAgICAgICAgIGxvZ1hNTEV4Y2VwdGlvbigoRXhjZXB0aW9uKWUsIlNldEVudGl0eUNvbnRleHQgRmFpbGVkISIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL2Rhb21hbmFnZXIvZWpiL0N1c3RvbWVyTG9jYWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2JhbmthZG1pbi9kYW9tYW5hZ2VyL2VqYi9DdXN0b21lckxvY2FsLmphdmEKaW5kZXggNDE0MDlkNi4uOWQzZmRlNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL2Rhb21hbmFnZXIvZWpiL0N1c3RvbWVyTG9jYWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9pbnRlZ3JhdGlvbi9iYW5rYWRtaW4vZGFvbWFuYWdlci9lamIvQ3VzdG9tZXJMb2NhbC5qYXZhCkBAIC0yMCw4ICsyMCw4IEBACiAKIHB1YmxpYyBpbnRlcmZhY2UgQ3VzdG9tZXJMb2NhbCBleHRlbmRzIGpha2FydGEuZWpiLkVKQkxvY2FsT2JqZWN0CiB7Ci0JcHVibGljIFN0cmluZyBnZXRDdXN0b21lck5hbWUoKTsKLQlwdWJsaWMgU3RyaW5nIGdldEN1c3RvbWVySUQoKTsKKyAgICBwdWJsaWMgU3RyaW5nIGdldEN1c3RvbWVyTmFtZSgpOworICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q3VzdG9tZXJJRCgpOwogCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2JhbmthZG1pbi9kYW9tYW5hZ2VyL2VqYi9DdXN0b21lckxvY2FsSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL2Rhb21hbmFnZXIvZWpiL0N1c3RvbWVyTG9jYWxIb21lLmphdmEKaW5kZXggZTBkOTU0OS4uZDJjNzljYSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL2Rhb21hbmFnZXIvZWpiL0N1c3RvbWVyTG9jYWxIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL2Rhb21hbmFnZXIvZWpiL0N1c3RvbWVyTG9jYWxIb21lLmphdmEKQEAgLTI0LDggKzI0LDggQEAKIAogcHVibGljIGludGVyZmFjZSBDdXN0b21lckxvY2FsSG9tZSBleHRlbmRzIGpha2FydGEuZWpiLkVKQkxvY2FsSG9tZQogewotCXB1YmxpYyBDdXN0b21lckxvY2FsIGNyZWF0ZUN1c3RvbWVyIChTdHJpbmcgaWQsU3RyaW5nIG5hbWUpCi0JdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKKyAgICBwdWJsaWMgQ3VzdG9tZXJMb2NhbCBjcmVhdGVDdXN0b21lciAoU3RyaW5nIGlkLFN0cmluZyBuYW1lKQorICAgIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247CiAgICAgICAgIHB1YmxpYyBDdXN0b21lckxvY2FsIGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIGlkKSB0aHJvd3MgamFrYXJ0YS5lamIuRmluZGVyRXhjZXB0aW9uOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9pbnRlZ3JhdGlvbi9iYW5rYWRtaW4vc3FsL2JhbmthZG1pbl9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYmFua2FkbWluL3NxbC9iYW5rYWRtaW5fcG9pbnRiYXNlLnNxbAppbmRleCAxMTM3MjcwLi44OGJlOTU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9pbnRlZ3JhdGlvbi9iYW5rYWRtaW4vc3FsL2JhbmthZG1pbl9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2JhbmthZG1pbi9zcWwvYmFua2FkbWluX3BvaW50YmFzZS5zcWwKQEAgLTExLDcgKzExLDcgQEAKIAogQ1JFQVRFIFRBQkxFIHNlY19iYW5rYWRtaW5fY3VzdG9tZXJlamIgKGN1c3RvbWVyaWQgVkFSQ0hBUjIoMjU1KSBQUklNQVJZIEtFWSwgY3VzdG9tZXJuYW1lIFZBUkNIQVIyKDI1NSkpOwogCi1DUkVBVEUgVEFCTEUgIHNlY19iYW5rYWRtaW5fYWNjb3VudGVqYiAoYWNjb3VudGlkIFZBUkNIQVIyKDI1NSkgUFJJTUFSWSBLRVksIGFtb3VudCBOVU1FUklDLCBwcnYgQkxPQig1MDAwKSxma19jdXN0b21lcmVqYiB2YXJjaGFyMigyNTUpKTsgCitDUkVBVEUgVEFCTEUgIHNlY19iYW5rYWRtaW5fYWNjb3VudGVqYiAoYWNjb3VudGlkIFZBUkNIQVIyKDI1NSkgUFJJTUFSWSBLRVksIGFtb3VudCBOVU1FUklDLCBwcnYgQkxPQig1MDAwKSxma19jdXN0b21lcmVqYiB2YXJjaGFyMigyNTUpKTsKIAogQUxURVIgVEFCTEUgc2VjX2JhbmthZG1pbl9hY2NvdW50ZWpiIEFERCAgQ09OU1RSQUlOVCBma19jdXN0b21lcmVqYiAgRk9SRUlHTiBLRVkgKGZrX2N1c3RvbWVyZWpiKSBSRUZFUkVOQ0VTIHNlY19iYW5rYWRtaW5fY3VzdG9tZXJlamIoY3VzdG9tZXJpZCkgT04gREVMRVRFIENBU0NBREU7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L2ludGVncmF0aW9uL2J1aWxkLnhtbAppbmRleCA0MTU4MTE2Li5mZDIwNmY3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9pbnRlZ3JhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvaW50ZWdyYXRpb24vYnVpbGQueG1sCkBAIC00NywxNCArNDcsMTQgQEAKICAgICA8YW50IGRpcj0iYmFua2FkbWluIiB0YXJnZXQ9InNldHVwLW5vcmVzdGFydCIgLz4KICAgPC90YXJnZXQ+CiAKLSAgCisKICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdCIgPgogICAgIDxhbnQgZGlyPSJiYW5rYWRtaW4iIHRhcmdldD0icnVuLXRlc3QiIC8+CiAgIDwvdGFyZ2V0PgogCi0gIAorCiAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4gCisgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICA8L3RhcmdldD4KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9zZWMtY29tbW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3NlYy1jb21tb24ueG1sCmluZGV4IDVlZjUwYzkuLjAwNTUxZWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3NlYy1jb21tb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3NlYy1jb21tb24ueG1sCkBAIC01MCw5ICs1MCw5IEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJjcmVhdGUtbWVzc2FnZS1zZWN1cml0eS1wcm92aWRlciI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtc2VydmVyLW1lc3NhZ2Utc2VjdXJpdHktcHJvdmlkZXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jbGllbnQtbWVzc2FnZS1zZWN1cml0eS1wcm92aWRlciIvPgotCQkKKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1zZXJ2ZXItbWVzc2FnZS1zZWN1cml0eS1wcm92aWRlciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWNsaWVudC1tZXNzYWdlLXNlY3VyaXR5LXByb3ZpZGVyIi8+CisKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImVuYWJsZS13c3MtbWVzc2FnZS1zZWN1cml0eS1wcm92aWRlciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtODQsMTEgKzg0LDExIEBACiAKIDx0YXJnZXQgbmFtZT0iZGVsZXRlLW1lc3NhZ2Utc2VjdXJpdHktcHJvdmlkZXIiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1tZXNzYWdlLXNlY3VyaXR5LXByb3ZpZGVyLWNvbW1vbiI+Ci0JCTxwYXJhbSBuYW1lPSJ3c3MucHJvdmlkZXIubmFtZSIgdmFsdWU9IiR7d3NzLnNlcnZlci5wcm92aWRlci5uYW1lfSIvPgotCTwvYW50Y2FsbD4KKyAgICAgICAgPHBhcmFtIG5hbWU9Indzcy5wcm92aWRlci5uYW1lIiB2YWx1ZT0iJHt3c3Muc2VydmVyLnByb3ZpZGVyLm5hbWV9Ii8+CisgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1tZXNzYWdlLXNlY3VyaXR5LXByb3ZpZGVyLWNvbW1vbiI+Ci0JCTxwYXJhbSBuYW1lPSJ3c3MucHJvdmlkZXIubmFtZSIgdmFsdWU9IiR7d3NzLmNsaWVudC5wcm92aWRlci5uYW1lfSIvPgotCTwvYW50Y2FsbD4KKyAgICAgICAgPHBhcmFtIG5hbWU9Indzcy5wcm92aWRlci5uYW1lIiB2YWx1ZT0iJHt3c3MuY2xpZW50LnByb3ZpZGVyLm5hbWV9Ii8+CisgICAgPC9hbnRjYWxsPgogCiA8L3RhcmdldD4KIApAQCAtMTQ3LDE1ICsxNDcsMTUgQEAKIAogPCEtLSBDb25maWd1cmUgTlNTIGZvciBJSU9QIC0tPgogPHRhcmdldCBuYW1lPSJjb25maWctbnNzLWlpb3AiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldC1qdm0tb3B0aW9uIj4KLQkgICA8cGFyYW0gbmFtZT0ianZtLm9wdGlvbiIgdmFsdWU9Ii1ETlNTX1VTRV9GT1JfSUlPUD10cnVlIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtanZtLW9wdGlvbiI+CisgICAgICAgPHBhcmFtIG5hbWU9Imp2bS5vcHRpb24iIHZhbHVlPSItRE5TU19VU0VfRk9SX0lJT1A9dHJ1ZSIvPgogICAgICAgICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIAogPCEtLSBSZW1vdmUgTlNTIGNvbmZpZyBmb3IgSUlPUCAtLT4KIDx0YXJnZXQgbmFtZT0icmVtb3ZlLW5zcy1paW9wIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bnNldC1qdm0tb3B0aW9uIj4KLQkgICA8cGFyYW0gbmFtZT0ianZtLm9wdGlvbiIgdmFsdWU9Ii1ETlNTX1VTRV9GT1JfSUlPUD10cnVlIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldC1qdm0tb3B0aW9uIj4KKyAgICAgICA8cGFyYW0gbmFtZT0ianZtLm9wdGlvbiIgdmFsdWU9Ii1ETlNTX1VTRV9GT1JfSUlPUD10cnVlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIDwvdGFyZ2V0PgogCkBAIC0xNjcsNyArMTY3LDcgQEAKICAgICAgICAgPGFyZyBsaW5lPSItZCAke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcgLWEiLz4KICAgICAgIDwvZXhlYz4KICAgICAgIDxjb25jYXQ+Ci0gICAgCTxmaWxlbGlzdCBkaXI9IiR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZyIgZmlsZXM9ImNlcnRkYi5yZmMiLz4KKyAgICAgICAgPGZpbGVsaXN0IGRpcj0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnIiBmaWxlcz0iY2VydGRiLnJmYyIvPgogICAgICAgPC9jb25jYXQ+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImltcG9ydC1jZXJ0LWprcyI+CiAgICAgICAgICA8cGFyYW0gbmFtZT0iY2VydC5hbGlhcyIgdmFsdWU9IiR7Y2VydC5uaWNrbmFtZX0iLz4KQEAgLTE4Miw3ICsxODIsNyBAQAogICAgICAgICA8YXJnIGxpbmU9Ii1kICR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZyAtYSIvPgogICAgICAgPC9leGVjPgogICAgICAgPGNvbmNhdD4KLSAgICAJPGZpbGVsaXN0IGRpcj0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnIiBmaWxlcz0iY2VydGRiLnJmYyIvPgorICAgICAgICA8ZmlsZWxpc3QgZGlyPSIke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWciIGZpbGVzPSJjZXJ0ZGIucmZjIi8+CiAgICAgICA8L2NvbmNhdD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iaW1wb3J0LWNlcnQtamtzIj4KICAgICAgICAgIDxwYXJhbSBuYW1lPSJjZXJ0LmFsaWFzIiB2YWx1ZT0iJHt0b2tlbi5uYW1lfToke2NlcnQubmlja25hbWV9Ii8+CkBAIC00MDYsNyArNDA2LDcgQEAKICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ia2V5c3RvcmUucGFzcyIgdmFsdWU9ImNoYW5nZWl0Ii8+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImtleS5wYXNzIiB2YWx1ZT0iY2hhbmdlaXQiLz4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ia2V5LmFsaWFzIiB2YWx1ZT0iczFhcyIvPgotIAkJPHBhcmFtIG5hbWU9ImRuYW1lIiB2YWx1ZT0iQ049UzFBUywgT1U9U3VuIEphdmEgU3lzdGVtLCBPPVN1biBNaWNyb3N5c3RlbXMsIEw9U2FudGEgQ2xhcmEsIFNUPUNhbGlmb3JuaWEsIEM9VVMiLz4KKyAgICAgICAgIDxwYXJhbSBuYW1lPSJkbmFtZSIgdmFsdWU9IkNOPVMxQVMsIE9VPVN1biBKYXZhIFN5c3RlbSwgTz1TdW4gTWljcm9zeXN0ZW1zLCBMPVNhbnRhIENsYXJhLCBTVD1DYWxpZm9ybmlhLCBDPVVTIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJsaXN0LWNlcnQtamtzIj4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ia2V5c3RvcmUuZmlsZSIgdmFsdWU9InMxYXMuamtzIi8+CkBAIC00NzIsOCArNDcyLDggQEAKIDwvdGFyZ2V0PgogCiAKLTwhLS0gCi1IYXJkd2FyZSBBY2NlbGVyYXRvciBzZXR1cCByZWxhdGVkIHRhcmdldHMgCis8IS0tCitIYXJkd2FyZSBBY2NlbGVyYXRvciBzZXR1cCByZWxhdGVkIHRhcmdldHMKIC0tPgogPHRhcmdldCBuYW1lPSJhZGQtcGtjczExLW1vZHVsZS10b2tlbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxlY2hvIG1lc3NhZ2U9IkFkZGluZyBQS0NTMTEgTW9kdWxlIG9yIHRva2VuIHRvIE5TUyBDZXJ0ZGIuLi4iLz4KQEAgLTUxNyw3ICs1MTcsNyBAQAogICAgICAgICA8YXJnIGxpbmU9Ii1MIi8+CiAgICAgICAgIDxhcmcgbGluZT0iLWQgJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnIi8+CiAgICAgICAgIDxhcmcgbGluZT0iLWggJHt0b2tlbi5uYW1lfSIvPgotCTxhcmcgbGluZT0iLWYgcGFzc2ZpbGUiLz4KKyAgICA8YXJnIGxpbmU9Ii1mIHBhc3NmaWxlIi8+CiAgICAgICA8L2V4ZWM+CiA8L3RhcmdldD4KIApAQCAtNTI1LDE4ICs1MjUsMTggQEAKIDwhLS0gTG9nIHJlbGF0ZWQgLS0+CiA8dGFyZ2V0IG5hbWU9InNldC1jbGllbnQtbG9nLWxldmVsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxlY2hvIG1lc3NhZ2U9IlNldHRpbmcgY2xpZW50IGRlZmF1bHQgbG9nIGxldmVsIFdBUk5JTkcgdG8gJHtsb2cubGV2ZWx9Ii8+Ci0gIDxyZXBsYWNlIAotICAgIHRva2VuPSJXQVJOSU5HIiAKKyAgPHJlcGxhY2UKKyAgICB0b2tlbj0iV0FSTklORyIKICAgICB2YWx1ZT0iJHtsb2cubGV2ZWx9IgotICAgIGZpbGU9IiR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9nbGFzc2Zpc2gtYWNjLnhtbCIvPiAgICAgIAorICAgIGZpbGU9IiR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9nbGFzc2Zpc2gtYWNjLnhtbCIvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0ic2V0LWNsaWVudC1kZWZhdWx0LWxvZy1sZXZlbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8ZWNobyBtZXNzYWdlPSJTZXR0aW5nIGNsaWVudCBkZWZhdWx0IGxvZyBsZXZlbCBXQVJOSU5HIGZyb20gJHtsb2cubGV2ZWx9Ii8+Ci0gIDxyZXBsYWNlIAotICAgIHRva2VuPSIke2xvZy5sZXZlbH0iIAorICA8cmVwbGFjZQorICAgIHRva2VuPSIke2xvZy5sZXZlbH0iCiAgICAgdmFsdWU9IldBUk5JTkciCi0gICAgZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sIi8+ICAgICAgCisgICAgZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sIi8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJzZXQtc2VydmVyLXNlY3VyaXR5LWxvZy1sZXZlbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNTYzLDEwICs1NjMsMTAgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InNldC1Qcm9wcy1NYWNPUyIgaWY9ImlzTWFjIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPHByb3BlcnR5IG5hbWU9ImphdmEubGliLnBhdGgiIHZhbHVlPSIke2Vudi5KQVZBX0hPTUV9L2xpYiIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJqYXZhLmxpYi5wYXRoIiB2YWx1ZT0iJHtlbnYuSkFWQV9IT01FfS9saWIiLz4KIDwvdGFyZ2V0PgogPHRhcmdldCBuYW1lPSJzZXQtUHJvcHMtbm9uTWFjT1MiIHVubGVzcz0iaXNNYWMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8cHJvcGVydHkgbmFtZT0iamF2YS5saWIucGF0aCIgdmFsdWU9IiR7ZW52LkpBVkFfSE9NRX0vanJlL2xpYiIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJqYXZhLmxpYi5wYXRoIiB2YWx1ZT0iJHtlbnYuSkFWQV9IT01FfS9qcmUvbGliIi8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJpbXBvcnQtY2VydC1qa3MiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3NpbXBsZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9zaW1wbGUvV2ViVGVzdC5qYXZhCmluZGV4IGRhODE4MmYuLjg4YTUyZmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3NpbXBsZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvc2ltcGxlL1dlYlRlc3QuamF2YQpAQCAtNDcsMTQgKzQ3LDE0IEBACiAKICAgICAgICAgLy8gVGhlIHN0YXQgcmVwb3J0ZXIgd3JpdGVzIG91dCB0aGUgdGVzdCBpbmZvIGFuZCByZXN1bHRzCiAgICAgICAgIC8vIGludG8gdGhlIHRvcC1sZXZlbCBxdWlja2xvb2sgZGlyZWN0b3J5IGR1cmluZyBhIHJ1bi4KLSAgICAgIAorCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkJhc2ljIFdlYiBBdXRoZW50aWNhdGlvbi9BdXRob3JpemF0aW9uIFRlc3QiKTsKIAogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CiAgICAgICAgIFN0cmluZyBwb3J0UyA9IGFyZ3NbMV07CiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7CiAgICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhvc3QgWyIraG9zdCsiXSBwb3J0ICgiK3BvcnQrIikiKTsKIAogICAgICAgICAvLyBHRVQgd2l0aCBhIHVzZXIgd2hvIG1hcHMgZGlyZWN0bHkgdG8gcm9sZQpAQCAtNjksNyArNjksNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHQuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKG5hbWUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gR0VUIHdpdGggYSB1c2VyIHdobyBtYXBzIHRocm91Z2ggZ3JvdXAKICAgICAgICAgbmFtZT0ic2ltcGxlYXV0aDogQkFTSUMvYWNjZXNzIGNvbnRyb2w6IHRlc3R1c2VyNDIiOwogICAgICAgICB0cnkgewpAQCAtMTI4LDcgKzEyOCw3IEBACiAgICAgICAgIG9zLndyaXRlKCJHRVQgL3NpbXBsZWF1dGgvVGVzdC5qc3AgSFRUUC8xLjBcbiIuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKGF1dGguZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gcy5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKQEAgLTE0NCw1ICsxNDQsNSBAQAogICAgICAgICBzLmNsb3NlKCk7CiAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlN0cmluZyBub3QgZm91bmQ6ICIrcmVzdWx0KTsKICAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9zaW1wbGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3NpbXBsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDZlNjdlZDUuLjkxMTI0MGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3NpbXBsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3NpbXBsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNpbXBsZWF1dGgiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3NpbXBsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9zaW1wbGUvYnVpbGQueG1sCmluZGV4IDhiODFlZmIuLmE1MmM4NTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3NpbXBsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvc2ltcGxlL2J1aWxkLnhtbApAQCAtMzEsMTUgKzMxLDE1IEBACiAgICAgJmNvbW1vblJ1bjsKICAgICAmdGVzdHByb3BlcnRpZXM7CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgCisgICAgPHRhcmdldCBuYW1lPSJhbGwiCiAgICAgICAgICAgICBkZXBlbmRzPSJjbGVhbixidWlsZCxzZXR1cCxkZXBsb3kscnVuLHVuZGVwbG95LHVuc2V0dXAiLz4KIAogICAgIDwhLS0gcnVuLXRlc3QgdGFyZ2V0IGFkZGVkIHRvIGhhdmUgc2V0dXAvdW5zZXR1cCBjb21tb25seSAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0IiAKKyAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0IgogICAgICAgZGVwZW5kcz0iY2xlYW4sYnVpbGQsZGVwbG95LHJ1bix1bmRlcGxveSI+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImFsbC1uby1kZWxldGUiIAorICAgIDx0YXJnZXQgbmFtZT0iYWxsLW5vLWRlbGV0ZSIKICAgICAgICAgICAgIGRlcGVuZHM9ImNsZWFuLGJ1aWxkLHNldHVwLGRlcGxveSxydW4iLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTQ3LDE3ICs0NywxNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImxvY2FsLWVhci1jb21tb24iLz4KICAgICAgIDxqYXZhYwogICAgICAgICBzcmNkaXI9Ii4iCiAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXVzZXItY29tbW9uIj4KQEAgLTc2LDcgKzc2LDcgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9Imdyb3VwcyIgdmFsdWU9InRlc3Rncm91cDEwIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTk1LDcgKzk1LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCI+CiAgICAgICA8IS0tIHJlbW92ZSB0ZXN0IHVzZXJzLCBqdXN0IGNsZWFudXAuIC0tPgpAQCAtMTIzLDExICsxMjMsMTEgQEAKIDx0YXJnZXQgbmFtZT0ibG9jYWwtZWFyLWNvbW1vbiIgZGVwZW5kcz0iZml4RmlsZXMsaW5pdC1jb21tb24iPgogICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gICAgCi0gIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIAorICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgorICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IgogICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiCi0gICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+IAotICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgCisgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+CisgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIgogICAgIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgpAQCAtMTM1LDcgKzEzNSw3IEBACiAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+CiAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KICAgICA8L2ZpbGVzZXQ+Ci0gIDwvZWFyPiAgICAgICAgCisgIDwvZWFyPgogPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3NzbC9jb252ZXJ0ZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3NzbC9jb252ZXJ0ZXIvYnVpbGQucHJvcGVydGllcwppbmRleCA1ZGU3ZjhiLi43NTI3YWUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9zc2wvY29udmVydGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvc3NsL2NvbnZlcnRlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyOCArMTUsMjggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlYy1zc2wiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNvbnZlcnRlciIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY29udmVydGVyIi8+ICAgICAgICBcdTAwMjAKIAotPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiAKLQl2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCi08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgCi0JdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSJcdTAwMjAKKyAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIlx1MDAyMAorICAgIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+ICAgICAgICBcdTAwMjAKIAotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iY29tLnN1bi5zMXBlcWUuc2VjdXJpdHkuc3NsLmNvbnZlcnRlci5jbGllbnQuQ29udmVydGVyQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9ImNvbS5zdW4uczFwZXFlLnNlY3VyaXR5LnNzbC5jb252ZXJ0ZXIuY2xpZW50LkNvbnZlcnRlckNsaWVudCIvPgogCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIAogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIApAQCAtNDUsOSArNDUsOSBAQAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tCiA8cHJvcGVydHkgbmFtZT0iam5kaS5uYW1lIiB2YWx1ZT0iU1NMY29udmVydGVyIi8+Ci08cHJvcGVydHkgbmFtZT0icHJvdmlkZXIudXJsIiB2YWx1ZT0iaWlvcDovL2xvY2FsaG9zdDoke29yYi5wb3J0fSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLm5hbWluZy5TZXJpYWxJbml0Q29udGV4dEZhY3RvcnkiLz4gCi08cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIgdmFsdWU9ImNvbS5zdW4uam5kaS5jb3NuYW1pbmcuQ05DdHhGYWN0b3J5Ii8+IAorPHByb3BlcnR5IG5hbWU9InByb3ZpZGVyLnVybCIgdmFsdWU9Imlpb3A6Ly9sb2NhbGhvc3Q6JHtvcmIucG9ydH0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLm5hbWluZy5TZXJpYWxJbml0Q29udGV4dEZhY3RvcnkiLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IiB2YWx1ZT0iY29tLnN1bi5qbmRpLmNvc25hbWluZy5DTkN0eEZhY3RvcnkiLz5cdTAwMjAKIC0tPgogPCEtLSBTRS9FRSBzcGVjaWZpYyB0byB1c2UgTlNTIC0tPgogPHByb3BlcnR5IG5hbWU9ImNlcnQubmlja25hbWUiIHZhbHVlPSJzMWFzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9zc2wvY29udmVydGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3NzbC9jb252ZXJ0ZXIvYnVpbGQueG1sCmluZGV4IDU1NWVhYmQuLjlhYWY5NTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3NzbC9jb252ZXJ0ZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3NzbC9jb252ZXJ0ZXIvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ5LDM0ICs0OSwzNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9InNldC1hcHBzZXJ2ZXItdmVyc2lvbiI+Ci0gICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi13aW4iLz4gCi0gICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi11bml4Ii8+IAorICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4td2luIi8+CisgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi11bml4Ii8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJydW4td2luIiBkZXBlbmRzPSJzZXQtYXBwc2VydmVyLXZlcnNpb24iIGlmPSJpc1dpbmRvd3MiPgotICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtbG9jYWwtd2luIi8+IAotICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtbG9jYWwtZWUtd2luIi8+IAorICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtbG9jYWwtd2luIi8+CisgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1sb2NhbC1lZS13aW4iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50LWxvY2FsLXdpbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iIHVubGVzcz0iaXNFRSI+Ci0JPGVjaG8gbWVzc2FnZT0iVGVzdCBpcyBydW5uaW5nIG9uIFBsYXRmb3JtIEVkaXRpb24hIi8+CisgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBpcyBydW5uaW5nIG9uIFBsYXRmb3JtIEVkaXRpb24hIi8+CiAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iPgogICAgICAgICA8ZW52IGtleT0iVk1BUkdTIiB2YWx1ZT0iIC1EamF2YXgubmV0LnNzbC50cnVzdFN0b3JlPSZxdW90OyR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9jYWNlcnRzLmprcyZxdW90OyAtRGphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZVBhc3N3b3JkPSR7bWFzdGVyLnBhc3N3b3JkfSIgLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iLWNsaWVudCIgLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+Ci0gIAk8IS0tIGR1bW15IHVzZXIgYWRkZWQgYXMgYXBwY2xpZW50IHRocm93aW5nIGxvZ2luIHdpbmRvdyAtLT4JCi0JPGFyZyB2YWx1ZT0iLXRleHRhdXRoIi8+CisgICAgICA8IS0tIGR1bW15IHVzZXIgYWRkZWQgYXMgYXBwY2xpZW50IHRocm93aW5nIGxvZ2luIHdpbmRvdyAtLT4KKyAgICA8YXJnIHZhbHVlPSItdGV4dGF1dGgiLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iLXVzZXIiLz4KICAgICAgICAgPGFyZyB2YWx1ZT0idGVtcCIvPgogICAgICAgICA8YXJnIHZhbHVlPSItcGFzc3dvcmQiLz4KICAgICAgICAgPGFyZyB2YWx1ZT0idGVtcCIvPgotCTxhcmcgbGluZT0iLXhtbCAmcXVvdDske2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwmcXVvdDsiLz4KKyAgICA8YXJnIGxpbmU9Ii14bWwgJnF1b3Q7JHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sJnF1b3Q7Ii8+CiAgICAgICA8L2V4ZWM+CiAgICAgICA8IS0tIGNvbmZpcm1pbmcgcmVwb3J0IGdlbmVyYXRpb24uLi4gLS0+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNoZWNrUmVwb3J0aW5nLWNvbW1vbiI+CkBAIC04NywyMCArODcsMjAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50LWxvY2FsLWVlLXdpbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJpc0VFIj4KLQk8ZWNobyBtZXNzYWdlPSJUZXN0IGlzIHJ1bm5pbmcgb24gU3RhbmRhcmQvRW50ZXJwcmlzZSBFZGl0aW9uISIvPgotCTxhbnRjYWxsIHRhcmdldD0iZ2V0LWNlcnRkYi10by1qa3MiPgotCTwvYW50Y2FsbD4KKyAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGlzIHJ1bm5pbmcgb24gU3RhbmRhcmQvRW50ZXJwcmlzZSBFZGl0aW9uISIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZ2V0LWNlcnRkYi10by1qa3MiPgorICAgIDwvYW50Y2FsbD4KICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSI+CiAgICAgICAgIDxlbnYga2V5PSJWTUFSR1MiIHZhbHVlPSIgLURqYXZheC5uZXQuc3NsLnRydXN0U3RvcmU9JnF1b3Q7JHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2NlcnRkYl9jYWNlcnRzLmprcyZxdW90OyIgLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iLWNsaWVudCIgLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+Ci0gIAk8IS0tIGR1bW15IHVzZXIgYWRkZWQgYXMgYXBwY2xpZW50IHRocm93aW5nIGxvZ2luIHdpbmRvdyAtLT4JCi0JPGFyZyB2YWx1ZT0iLXRleHRhdXRoIi8+CisgICAgICA8IS0tIGR1bW15IHVzZXIgYWRkZWQgYXMgYXBwY2xpZW50IHRocm93aW5nIGxvZ2luIHdpbmRvdyAtLT4KKyAgICA8YXJnIHZhbHVlPSItdGV4dGF1dGgiLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iLXVzZXIiLz4KICAgICAgICAgPGFyZyB2YWx1ZT0idGVtcCIvPgogICAgICAgICA8YXJnIHZhbHVlPSItcGFzc3dvcmQiLz4KICAgICAgICAgPGFyZyB2YWx1ZT0idGVtcCIvPgotCTxhcmcgbGluZT0iLXhtbCAke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwiLz4KKyAgICA8YXJnIGxpbmU9Ii14bWwgJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sIi8+CiAgICAgICA8L2V4ZWM+CiAgICAgICA8IS0tIGNvbmZpcm1pbmcgcmVwb3J0IGdlbmVyYXRpb24uLi4gLS0+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNoZWNrUmVwb3J0aW5nLWNvbW1vbiI+CkBAIC0xMDksMjUgKzEwOSwyNSBAQAogICAgICAgICA8cGFyYW0gbmFtZT0idGVzdC5jb3VudCIgdmFsdWU9IjEiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLXVuaXgiIGRlcGVuZHM9InNldC1hcHBzZXJ2ZXItdmVyc2lvbiIgaWY9ImlzVW5peCI+Ci0gICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1sb2NhbC11bml4Ii8+IAotICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtbG9jYWwtZWUtdW5peCIvPiAKKyAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWxvY2FsLXVuaXgiLz4KKyAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWxvY2FsLWVlLXVuaXgiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50LWxvY2FsLXVuaXgiIGRlcGVuZHM9ImluaXQtY29tbW9uIiB1bmxlc3M9ImlzRUUiPgotCTxlY2hvIG1lc3NhZ2U9IlRlc3QgaXMgcnVubmluZyBvbiBQbGF0Zm9ybSBFZGl0aW9uISIvPgorICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3QgaXMgcnVubmluZyBvbiBQbGF0Zm9ybSBFZGl0aW9uISIvPgogICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9Ij4KICAgICAgICAgPGVudiBrZXk9IlZNQVJHUyIgdmFsdWU9IiAtRGphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZT0ke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvY2FjZXJ0cy5qa3MgIC1EamF2YXgubmV0LnNzbC50cnVzdFN0b3JlUGFzc3dvcmQ9JHttYXN0ZXIucGFzc3dvcmR9IiAvPgogICAgICAgICA8YXJnIHZhbHVlPSItY2xpZW50IiAvPgogICAgICAgICA8YXJnIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KLSAgCTwhLS0gZHVtbXkgdXNlciBhZGRlZCBhcyBhcHBjbGllbnQgdGhyb3dpbmcgbG9naW4gd2luZG93IC0tPgkKLQk8YXJnIHZhbHVlPSItdGV4dGF1dGgiLz4KKyAgICAgIDwhLS0gZHVtbXkgdXNlciBhZGRlZCBhcyBhcHBjbGllbnQgdGhyb3dpbmcgbG9naW4gd2luZG93IC0tPgorICAgIDxhcmcgdmFsdWU9Ii10ZXh0YXV0aCIvPgogICAgICAgICA8YXJnIHZhbHVlPSItdXNlciIvPgogICAgICAgICA8YXJnIHZhbHVlPSJ0ZW1wIi8+CiAgICAgICAgIDxhcmcgdmFsdWU9Ii1wYXNzd29yZCIvPgogICAgICAgICA8YXJnIHZhbHVlPSJ0ZW1wIi8+Ci0JPGFyZyBsaW5lPSIteG1sICR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9nbGFzc2Zpc2gtYWNjLnhtbCIvPgorICAgIDxhcmcgbGluZT0iLXhtbCAke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwiLz4KICAgICAgIDwvZXhlYz4KICAgICAgIDwhLS0gY29uZmlybWluZyByZXBvcnQgZ2VuZXJhdGlvbi4uLiAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2hlY2tSZXBvcnRpbmctY29tbW9uIj4KQEAgLTEzOSwyMCArMTM5LDIwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudC1sb2NhbC1lZS11bml4IiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgaWY9ImlzRUUiPgotCTxlY2hvIG1lc3NhZ2U9IlRlc3QgaXMgcnVubmluZyBvbiBTdGFuZGFyZC9FbnRlcnByaXNlIEVkaXRpb24hIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJnZXQtY2VydGRiLXRvLWprcyI+Ci0JPC9hbnRjYWxsPgorICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3QgaXMgcnVubmluZyBvbiBTdGFuZGFyZC9FbnRlcnByaXNlIEVkaXRpb24hIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJnZXQtY2VydGRiLXRvLWprcyI+CisgICAgPC9hbnRjYWxsPgogICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9Ij4KICAgICAgICAgPGVudiBrZXk9IlZNQVJHUyIgdmFsdWU9IiAtRGphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZT0ke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvY2VydGRiX2NhY2VydHMuamtzIiAvPgogICAgICAgICA8YXJnIHZhbHVlPSItY2xpZW50IiAvPgogICAgICAgICA8YXJnIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KLSAgCTwhLS0gZHVtbXkgdXNlciBhZGRlZCBhcyBhcHBjbGllbnQgdGhyb3dpbmcgbG9naW4gd2luZG93IC0tPgkKLQk8YXJnIHZhbHVlPSItdGV4dGF1dGgiLz4KKyAgICAgIDwhLS0gZHVtbXkgdXNlciBhZGRlZCBhcyBhcHBjbGllbnQgdGhyb3dpbmcgbG9naW4gd2luZG93IC0tPgorICAgIDxhcmcgdmFsdWU9Ii10ZXh0YXV0aCIvPgogICAgICAgICA8YXJnIHZhbHVlPSItdXNlciIvPgogICAgICAgICA8YXJnIHZhbHVlPSJ0ZW1wIi8+CiAgICAgICAgIDxhcmcgdmFsdWU9Ii1wYXNzd29yZCIvPgogICAgICAgICA8YXJnIHZhbHVlPSJ0ZW1wIi8+Ci0JPGFyZyBsaW5lPSIteG1sICR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9nbGFzc2Zpc2gtYWNjLnhtbCIvPgorICAgIDxhcmcgbGluZT0iLXhtbCAke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwiLz4KICAgICAgIDwvZXhlYz4KICAgICAgIDwhLS0gY29uZmlybWluZyByZXBvcnQgZ2VuZXJhdGlvbi4uLiAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2hlY2tSZXBvcnRpbmctY29tbW9uIj4KQEAgLTE2NSw3ICsxNjUsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgICAgPCEtLSBUYXJnZXQgdG8gcnVuIHRoZSBzdGFuZGFsb25lIGNsaWVudCB3aXRob3V0IEFDQyAtLT4KQEAgLTE4NCw3ICsxODQsNyBAQAogICAgICAgICA8anZtYXJnIHZhbHVlPSItRGphdmF4Lm5ldC5zc2wua2V5U3RvcmU9JHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2tleXN0b3JlLmprcyIvPgogICAgICAgICA8anZtYXJnIHZhbHVlPSItRGphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZT0ke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvY2FjZXJ0cy5qa3MiLz4KICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURqYXZheC5uZXQuc3NsLnRydXN0U3RvcmVQYXNzd29yZD0ke21hc3Rlci5wYXNzd29yZH0iLz4KLQk8anZtYXJnIHZhbHVlPSItRGNvbS5zdW4uQ09SQkEuY29ubmVjdGlvbi5PUkJTb2NrZXRGYWN0b3J5Q2xhc3M9Y29tLnN1bi5lbnRlcnByaXNlLmlpb3AuSUlPUFNTTFNvY2tldEZhY3RvcnkiLz4KKyAgICA8anZtYXJnIHZhbHVlPSItRGNvbS5zdW4uQ09SQkEuY29ubmVjdGlvbi5PUkJTb2NrZXRGYWN0b3J5Q2xhc3M9Y29tLnN1bi5lbnRlcnByaXNlLmlpb3AuSUlPUFNTTFNvY2tldEZhY3RvcnkiLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtwcm92aWRlci51cmx9Ii8+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y3R4ZmFjdG9yeX0iLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtqbmRpLm5hbWV9Ii8+CkBAIC0yMDEsMTIgKzIwMSwxMiBAQAogICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvY2VydHV0aWwiIG91dHB1dD0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2NlcnRkYi5yZmMiPgogICAgICAgICA8ZW52IGtleT0iTERfTElCUkFSWV9QQVRIIiBwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgogICAgICAgICA8YXJnIGxpbmU9Ii1MIC1uICR7Y2VydC5uaWNrbmFtZX0iLz4KLQk8YXJnIGxpbmU9Ii1kICR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZyAtYSIvPgorICAgIDxhcmcgbGluZT0iLWQgJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnIC1hIi8+CiAgICAgICA8L2V4ZWM+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImltcG9ydC1jZXJ0LWprcyI+Ci0JIDxwYXJhbSBuYW1lPSJjZXJ0LmFsaWFzIiB2YWx1ZT0iJHtjZXJ0Lm5pY2tuYW1lfSIvPgotCSA8cGFyYW0gbmFtZT0ia2V5c3RvcmUuZmlsZSIgdmFsdWU9IiR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9jZXJ0ZGJfY2FjZXJ0cy5qa3MiLz4KLQkgPHBhcmFtIG5hbWU9ImNlcnQuZmlsZSIgdmFsdWU9IiR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9jZXJ0ZGIucmZjIi8+CisgICAgIDxwYXJhbSBuYW1lPSJjZXJ0LmFsaWFzIiB2YWx1ZT0iJHtjZXJ0Lm5pY2tuYW1lfSIvPgorICAgICA8cGFyYW0gbmFtZT0ia2V5c3RvcmUuZmlsZSIgdmFsdWU9IiR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9jZXJ0ZGJfY2FjZXJ0cy5qa3MiLz4KKyAgICAgPHBhcmFtIG5hbWU9ImNlcnQuZmlsZSIgdmFsdWU9IiR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9jZXJ0ZGIucmZjIi8+CiAgICAgICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIApAQCAtMjI5LDE2ICsyMjksMTYgQEAKIAogPCEtLSBnZXQgdGhlIGFwcHNlcnZlciBlZGl0aW9uIC0tPgogPHRhcmdldCBuYW1lPSJzZXQtYXBwc2VydmVyLXZlcnNpb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8IS0tCi0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgb3V0cHV0PSJhc192ZXJzaW9uLnR4dCI+Ci0JCTxhcmcgbGluZT0idmVyc2lvbiIvPgotCQk8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+Ci0JPC9leGVjPgotCTxsb2FkZmlsZSBwcm9wZXJ0eT0iVmVyc2lvbiIgc3JjRmlsZT0iYXNfdmVyc2lvbi50eHQiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotCTxlY2hvIG1lc3NhZ2U9IkdvdCB0aGUgdmVyc2lvbj0ke1ZlcnNpb259Ii8+Ci0JLS0+Ci0JPCEtLSB1c2UgdGhlIGZvbGxvd2luZyB3b3JrYXJvdW5kIHRvIGZpbmQgdGhlIGFwcHNlcnZlciBlZGl0aW9uIHVudGlsIEkgZmlndXJlb3V0IHRoZSBhYm92ZSBwYXJzZSBtZXRob2QgLS0+Ci0JPGF2YWlsYWJsZSBmaWxlPSIke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvY2VydDguZGIiIHR5cGU9ImZpbGUiIHByb3BlcnR5PSJpc0VFIi8+CisgICAgPCEtLQorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIG91dHB1dD0iYXNfdmVyc2lvbi50eHQiPgorICAgICAgICA8YXJnIGxpbmU9InZlcnNpb24iLz4KKyAgICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgorICAgIDwvZXhlYz4KKyAgICA8bG9hZGZpbGUgcHJvcGVydHk9IlZlcnNpb24iIHNyY0ZpbGU9ImFzX3ZlcnNpb24udHh0IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJHb3QgdGhlIHZlcnNpb249JHtWZXJzaW9ufSIvPgorICAgIC0tPgorICAgIDwhLS0gdXNlIHRoZSBmb2xsb3dpbmcgd29ya2Fyb3VuZCB0byBmaW5kIHRoZSBhcHBzZXJ2ZXIgZWRpdGlvbiB1bnRpbCBJIGZpZ3VyZW91dCB0aGUgYWJvdmUgcGFyc2UgbWV0aG9kIC0tPgorICAgIDxhdmFpbGFibGUgZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2NlcnQ4LmRiIiB0eXBlPSJmaWxlIiBwcm9wZXJ0eT0iaXNFRSIvPgogPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3NzbC9jb252ZXJ0ZXIvY2xpZW50L0NvbnZlcnRlckNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvc3NsL2NvbnZlcnRlci9jbGllbnQvQ29udmVydGVyQ2xpZW50LmphdmEKaW5kZXggNDhjZmVlYi4uZGUyNTI1NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvc3NsL2NvbnZlcnRlci9jbGllbnQvQ29udmVydGVyQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvc3NsL2NvbnZlcnRlci9jbGllbnQvQ29udmVydGVyQ2xpZW50LmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyoqCiAgKiBBIHNpbXBsZSBqYXZhIGNsaWVudC4gVGhpcyB1c2VzIHRoZSBzZXJ2aWNlcyBwcm92aWRlZCBieSB0aGUgPGNvZGU+Q29udmVydGVyQmVhbjwvY29kZT4gYW5kCi0gKiBjb252ZXJ0cyAxMDAgVVMgZG9sbGFycyB0byBZZW4gYW5kIDEwMCBZZW4gdG8gRXVyby4gCisgKiBjb252ZXJ0cyAxMDAgVVMgZG9sbGFycyB0byBZZW4gYW5kIDEwMCBZZW4gdG8gRXVyby4KICAqIDxwPkluIHRoaXMgcmVnYXJkLCBpdCBkb2VzIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIKICAqIDx1bD4KICAqIDxsaT5Mb2NhdGVzIHRoZSBob21lIGludGVyZmFjZSBvZiB0aGUgZW50ZXJwcmlzZSBiZWFuCkBAIC0zNywyMSArMzcsMjEgQEAKICAqIDxicj4KICAqIDxiPkxvY2F0aW5nIHRoZSBob21lIGludGVyZmFjZTo8L2I+CiAgKiA8YmxvY2txdW90ZT48cHJlPgotICoJQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gKglDb250ZXh0IG15RW52ID0gKENvbnRleHQpaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYiKTsKLSAqCU9iamVjdCBvYmpyZWYgPSBteUVudi5sb29rdXAoImVqYi9TaW1wbGVDb252ZXJ0ZXIiKTsKKyAqICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICogICAgQ29udGV4dCBteUVudiA9IChDb250ZXh0KWluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52Iik7CisgKiAgICBPYmplY3Qgb2JqcmVmID0gbXlFbnYubG9va3VwKCJlamIvU2ltcGxlQ29udmVydGVyIik7CiAgKiAgQ29udmVydGVySG9tZSBob21lID0gKENvbnZlcnRlckhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgQ29udmVydGVySG9tZS5jbGFzcyk7CiAgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CiAgKiA8YnI+CiAgKiA8Yj5DcmVhdGluZyB0aGUgcmVtb3RlIGludGVyZmFjZTo8L2I+CiAgKiA8YmxvY2txdW90ZT48cHJlPgotICoJQ29udmVydGVyIGN1cnJlbmN5Q29udmVydGVyID0gaG9tZS5jcmVhdGUoKTsKKyAqICAgIENvbnZlcnRlciBjdXJyZW5jeUNvbnZlcnRlciA9IGhvbWUuY3JlYXRlKCk7CiAgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CiAgKiA8YnI+CiAgKiA8Yj5JbnZva2luZyBidXNpbmVzcyBtZXRob2RzOjwvYj4KICAqIDxibG9ja3F1b3RlPjxwcmU+CiAgKiAgQmlnRGVjaW1hbCBwYXJhbSA9IG5ldyBCaWdEZWNpbWFsICgiMTAwLjAwIik7Ci0gKglhbW91bnQgPSBjdXJyZW5jeUNvbnZlcnRlci5kb2xsYXJUb1llbihwYXJhbSk7CisgKiAgICBhbW91bnQgPSBjdXJyZW5jeUNvbnZlcnRlci5kb2xsYXJUb1llbihwYXJhbSk7CiAgKiAgYW1vdW50ID0gY3VycmVuY3lDb252ZXJ0ZXIueWVuVG9FdXJvKHBhcmFtKTsKICAqIDwvcHJlPjwvYmxvY2txdW90ZT4KICAqIDxicj4KQEAgLTY2LDcgKzY2LDcgQEAKIAogcHVibGljIGNsYXNzIENvbnZlcnRlckNsaWVudCB7CiAKLSAgICBwcml2YXRlIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBDb252ZXJ0ZXJDbGllbnQoKSB7CkBAIC04MCwzNSArODAsMzUgQEAKICAgICAqCiAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JQ29udmVydGVyQ2xpZW50IGNsaWVudCA9IG5ldyBDb252ZXJ0ZXJDbGllbnQoKTsKLQljbGllbnQucnVuKGFyZ3MpOworICAgIENvbnZlcnRlckNsaWVudCBjbGllbnQgPSBuZXcgQ29udmVydGVyQ2xpZW50KCk7CisgICAgY2xpZW50LnJ1bihhcmdzKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcnVuKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgU3RyaW5nIHVybCA9IG51bGw7Ci0JU3RyaW5nIHRlc3RJZCA9IG51bGw7CisgICAgU3RyaW5nIHRlc3RJZCA9IG51bGw7CiAgICAgICAgIFN0cmluZyBqbmRpTmFtZSA9IG51bGw7CiAgICAgICAgIENvbnRleHQgY29udGV4dCA9IG51bGw7CiAgICAgICAgIFN0cmluZyBjdHhGYWN0b3J5ID0gbnVsbDsKLQlqYXZhLmxhbmcuT2JqZWN0IG9iaiA9IG51bGw7CisgICAgamF2YS5sYW5nLk9iamVjdCBvYmogPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiU2VjdXJpdHk6OlNTTCB0ZXN0ZXIgLWNvbnZlcnRlciBzYW1wbGUuIik7CiAKICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAzKSB7CiAgICAgICAgICAgICAgICAgdXJsID0gYXJnc1swXTsKICAgICAgICAgICAgICAgICBjdHhGYWN0b3J5ID0gYXJnc1sxXTsKLQkJam5kaU5hbWUgPSBhcmdzWzJdOworICAgICAgICBqbmRpTmFtZSA9IGFyZ3NbMl07CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICggKHVybCA9PSBudWxsKSB8fCAoY3R4RmFjdG9yeSA9PSBudWxsKSApIHsKLQkJdGVzdElkID0gIlNlYzo6U1NMX3NpbXBsZSBDb252ZXJ0ZXIgU2FtcGxlIEFwcENsaWVudCI7CisgICAgICAgIHRlc3RJZCA9ICJTZWM6OlNTTF9zaW1wbGUgQ29udmVydGVyIFNhbXBsZSBBcHBDbGllbnQiOwogICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIENvbnRleHQgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMKICAgICAgICAgICAgICAgICBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWZhdWx0IENvbnRleHQgSW5pdGlhbGl6ZWQuLi4iKTsKICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgSG9tZSBvYmplY3QKICAgICAgICAgICAgICAgICBvYmogPSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU1NMU2ltcGxlQ29udmVydGVyIik7CiAgICAgICAgICAgICB9IGVsc2UgewotCQl0ZXN0SWQgPSAiU2VjOjpTU0xfc2ltcGxlIFN0YW5kYWxvbmUtQ2xpZW50IjsKKyAgICAgICAgdGVzdElkID0gIlNlYzo6U1NMX3NpbXBsZSBTdGFuZGFsb25lLUNsaWVudCI7CiAgICAgICAgICAgICAgICAgUHJvcGVydGllcyBlbnYgPSBuZXcgUHJvcGVydGllcygpOwogICAgICAgICAgICAgICAgIGVudi5wdXQoImphdmEubmFtaW5nLnByb3ZpZGVyLnVybCIsIHVybCk7CiAgICAgICAgICAgICAgICAgZW52LnB1dCgiamF2YS5uYW1pbmcuZmFjdG9yeS5pbml0aWFsIiwgY3R4RmFjdG9yeSk7CkBAIC0xMzgsNyArMTM4LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uISIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0gZmluYWxseSB7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9zc2wvY29udmVydGVyL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvc3NsL2NvbnZlcnRlci9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAppbmRleCBkMTMwNDdmLi40N2RlYWIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9zc2wvY29udmVydGVyL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3NzbC9jb252ZXJ0ZXIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKQEAgLTIzLDcgKzIzLDcgQEAKICAgICA8c21hbGwtaWNvbj48L3NtYWxsLWljb24+CiAgICAgPGxhcmdlLWljb24+PC9sYXJnZS1pY29uPgogICA8L2ljb24+Ci0gIDxkaXNwbGF5LW5hbWU+U1NMQ29udmVydGVyQXBwPC9kaXNwbGF5LW5hbWU+ICAKKyAgPGRpc3BsYXktbmFtZT5TU0xDb252ZXJ0ZXJBcHA8L2Rpc3BsYXktbmFtZT4KICAgPG1vZHVsZT4KICAgICA8amF2YT5zZWMtc3NsLWNvbnZlcnRlci1jbGllbnQuamFyPC9qYXZhPgogICA8L21vZHVsZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3NzbC9jb252ZXJ0ZXIvZWpiL0NvbnZlcnRlckJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3NzbC9jb252ZXJ0ZXIvZWpiL0NvbnZlcnRlckJlYW4uamF2YQppbmRleCAyZjI1MWE3Li4xZTk4NGIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9zc2wvY29udmVydGVyL2VqYi9Db252ZXJ0ZXJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvc3NsL2NvbnZlcnRlci9lamIvQ29udmVydGVyQmVhbi5qYXZhCkBAIC03MSw3ICs3MSw3IEBACiAgICAgICogTG9hZHMgdGhlIHN0YXRlIG9mIHRoZSBiZWFuIGZyb20gc2Vjb25kYXJ5IHN0b3JhZ2UuIFJlcXVpcmVkIGJ5IEVKQiBzcGVjLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KLSAgICAKKwogICAgIC8qKgogICAgICAqIEtlZXBzIHRoZSBzdGF0ZSBvZiB0aGUgYmVhbiB0byBzZWNvbmRhcnkgc3RvcmFnZS4gUmVxdWlyZWQgYnkgRUpCIHNwZWMuCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9zc2wvdXRpbC9LZXlUb29sLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9zc2wvdXRpbC9LZXlUb29sLmphdmEKaW5kZXggODMzZWI1Ny4uODBmYWU4MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvc3NsL3V0aWwvS2V5VG9vbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3NzbC91dGlsL0tleVRvb2wuamF2YQpAQCAtNTAsNyArNTAsNyBAQAogICAgIC8vIFRoZSByZXNwZWN0aXZlIGluLW1lbW9yeSBrZXlzdG9yZXMKICAgICBwcml2YXRlIEtleVN0b3JlIHBrY3MxMktleVN0b3JlID0gbnVsbDsKICAgICBwcml2YXRlIEtleVN0b3JlIGprc0tleVN0b3JlID0gbnVsbDsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBQS0NTMTIgPSAiLXBrY3MxMiI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElORklMRSA9ICItcGtjc0ZpbGUiOwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBPVVRGSUxFID0gIi1qa3NGaWxlIjsKQEAgLTYwLDQ2ICs2MCw0NiBAQAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBKS1NLRVlTVE9SRVBBU1MgPSAiLWprc0tleVN0b3JlUGFzcyI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIEpLU0tFWVBBU1MgPSAiLWprc0tleVBhc3MiOwogICAgIHByaXZhdGUgc3RhdGljIExvY2FsU3RyaW5nTWFuYWdlckltcGwgbG9jYWxTdHJpbmdzID0KLQluZXcgTG9jYWxTdHJpbmdNYW5hZ2VySW1wbChLZXlUb29sLmNsYXNzKTsKKyAgICBuZXcgTG9jYWxTdHJpbmdNYW5hZ2VySW1wbChLZXlUb29sLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIFRoZSBjbGFzcyBpcyBvbmx5IGluc3RhbnRpYXRlZCBmb3IgUEtDUzEyIC0gYWxsIG90aGVyIAorICAgICAqIFRoZSBjbGFzcyBpcyBvbmx5IGluc3RhbnRpYXRlZCBmb3IgUEtDUzEyIC0gYWxsIG90aGVyCiAgICAgICoga2V5dG9vbCBmdW5jdGlvbmFsaXR5IGlzIHBhc3NlZCB0byB0aGUgc3VuLnNlY3VyaXR5LnRvb2xzLktleVRvb2wKICAgICAgKiBAcGFyYW0gdGhlIGZpbGUgbmFtZSBvZiB0aGUgUEtDUzEyIGZpbGUKICAgICAgKiBAcGFyYW0gdGhlIG91dHB1dCBmaWxlIG5hbWUgb2YgdGhlIEpLUyBmaWxlCiAgICAgICogQHBhcmFtIHRoZSBwcm92aWRlciAtIEluIHRoaXMgY2FzZSBTdW5KU1NFCiAgICAgICogQHBhcmFtIHBhc3N3b3JkIHRvIHRoZSBQS0NTMTIga2V5c3RvcmUKLSAgICAgKiBAcGFyYW0gcGFzc3dvcmQgdG8gdGhlIGtleSBpbiB0aGUgUEtDUzEyIGtleXN0b3JlIAorICAgICAqIEBwYXJhbSBwYXNzd29yZCB0byB0aGUga2V5IGluIHRoZSBQS0NTMTIga2V5c3RvcmUKICAgICAgKiBAcGFyYW0gcGFzc3dvcmQgdG8gdGhlIEpLUyBrZXlzdG9yZQogICAgICAqIEBwYXJhbSBwYXNzd29yZCB0byB0aGUga2V5IGluIHRoZSBKS1Mga2V5c3RvcmUKICAgICAgKiBjdXJyZW50bHkgaXQgaGFzIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBKS1Mga2V5c3RvcmUgcGFzc3dvcmQKICAgICAgKiBAZXhjZXB0aW9uIFByb2JsZW0gaW4gbG9hZGluZyB0aGUga2V5c3RvcmVzCiAgICAgICovCiAgICAgcHVibGljIEtleVRvb2wgKFN0cmluZyBpbmZpbGUsIFN0cmluZyBvdXRmaWxlLCBTdHJpbmcgcGtjc0tleVN0b3JlUGFzcywKLQkJICAgIFN0cmluZyBwa2NzS2V5UGFzcywgU3RyaW5nIGprc0tleVN0b3JlUGFzcywgCi0JCSAgICBTdHJpbmcgamtzS2V5UGFzcywKLQkJICAgIFN0cmluZyBwcm92aWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkgICAgaW5wdXRGaWxlID0gbmV3IEZpbGUgKGluZmlsZSk7Ci0JICAgIG91dHB1dEZpbGUgPSBuZXcgRmlsZSAob3V0ZmlsZSk7Ci0JICAgIHRoaXMucGtjc0tleVN0b3JlUGFzcyA9IHBrY3NLZXlTdG9yZVBhc3MudG9DaGFyQXJyYXkgKCk7Ci0JICAgIHRoaXMucGtjc0tleVBhc3MgPSBwa2NzS2V5UGFzcy50b0NoYXJBcnJheSAoKTsKLQkgICAgdGhpcy5qa3NLZXlTdG9yZVBhc3MgPSBqa3NLZXlTdG9yZVBhc3MudG9DaGFyQXJyYXkgKCk7Ci0JICAgIHRoaXMuamtzS2V5UGFzcyA9IGprc0tleVBhc3MudG9DaGFyQXJyYXkgKCk7Ci0JICAgIHRoaXMucHJvdmlkZXIgPSBwcm92aWRlcjsKLQkgICAgLy8gaWYgdGhlIG91dHB1dCBmaWxlIGV4aXN0cyBkZWxldGUgaXQgYW5kIGNyZWF0ZSBhIG5ldyBmaWxlCi0JICAgIHRyeXsKLQkJaWYgKG91dHB1dEZpbGUuZXhpc3RzICgpKXsKLQkJICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbiAoIk91dHB1dCBmaWxlIGFscmVhZHkgZXhpc3RzISIpOwotCQl9Ci0JCS8vIEdldCB0aGUga2V5c3RvcmVzIGZyb20gdGhlIGVuZ2luZXMuCi0JCXBrY3MxMktleVN0b3JlID0gS2V5U3RvcmUuZ2V0SW5zdGFuY2UgKCJQS0NTMTIiLCBwcm92aWRlcik7Ci0JCWprc0tleVN0b3JlID0gS2V5U3RvcmUuZ2V0SW5zdGFuY2UgKCJKS1MiKTsKKyAgICAgICAgICAgIFN0cmluZyBwa2NzS2V5UGFzcywgU3RyaW5nIGprc0tleVN0b3JlUGFzcywKKyAgICAgICAgICAgIFN0cmluZyBqa3NLZXlQYXNzLAorICAgICAgICAgICAgU3RyaW5nIHByb3ZpZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBpbnB1dEZpbGUgPSBuZXcgRmlsZSAoaW5maWxlKTsKKyAgICAgICAgb3V0cHV0RmlsZSA9IG5ldyBGaWxlIChvdXRmaWxlKTsKKyAgICAgICAgdGhpcy5wa2NzS2V5U3RvcmVQYXNzID0gcGtjc0tleVN0b3JlUGFzcy50b0NoYXJBcnJheSAoKTsKKyAgICAgICAgdGhpcy5wa2NzS2V5UGFzcyA9IHBrY3NLZXlQYXNzLnRvQ2hhckFycmF5ICgpOworICAgICAgICB0aGlzLmprc0tleVN0b3JlUGFzcyA9IGprc0tleVN0b3JlUGFzcy50b0NoYXJBcnJheSAoKTsKKyAgICAgICAgdGhpcy5qa3NLZXlQYXNzID0gamtzS2V5UGFzcy50b0NoYXJBcnJheSAoKTsKKyAgICAgICAgdGhpcy5wcm92aWRlciA9IHByb3ZpZGVyOworICAgICAgICAvLyBpZiB0aGUgb3V0cHV0IGZpbGUgZXhpc3RzIGRlbGV0ZSBpdCBhbmQgY3JlYXRlIGEgbmV3IGZpbGUKKyAgICAgICAgdHJ5eworICAgICAgICBpZiAob3V0cHV0RmlsZS5leGlzdHMgKCkpeworICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uICgiT3V0cHV0IGZpbGUgYWxyZWFkeSBleGlzdHMhIik7CisgICAgICAgIH0KKyAgICAgICAgLy8gR2V0IHRoZSBrZXlzdG9yZXMgZnJvbSB0aGUgZW5naW5lcy4KKyAgICAgICAgcGtjczEyS2V5U3RvcmUgPSBLZXlTdG9yZS5nZXRJbnN0YW5jZSAoIlBLQ1MxMiIsIHByb3ZpZGVyKTsKKyAgICAgICAgamtzS2V5U3RvcmUgPSBLZXlTdG9yZS5nZXRJbnN0YW5jZSAoIkpLUyIpOwogCi0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCS8vIGNhdGNoIHBvc3NpYmxlIHNlY3VyaXR5IGFuZCBpbyBleGNlcHRpb25zCi0JCXRocm93IG5ldyBJT0V4Y2VwdGlvbiAoZS5nZXRNZXNzYWdlICgpKTsKLQkgICAgfQotCSAgICByZWFkS2V5U3RvcmVzICgpOyAgCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIC8vIGNhdGNoIHBvc3NpYmxlIHNlY3VyaXR5IGFuZCBpbyBleGNlcHRpb25zCisgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbiAoZS5nZXRNZXNzYWdlICgpKTsKKyAgICAgICAgfQorICAgICAgICByZWFkS2V5U3RvcmVzICgpOwogICAgIH0KICAgICAvKioKICAgICAgKiBMb2FkIGJvdGggdGhlIGtleXN0b3JlJ3MgaW50byBtZW1vcnkuCkBAIC0xMDcsMjExICsxMDcsMjExIEBACiAgICAgICogaXMgY3JlYXRlZC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByZWFkS2V5U3RvcmVzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQlGaWxlSW5wdXRTdHJlYW0gcGtjc0ZpcyA9IG51bGw7Ci0JRmlsZUlucHV0U3RyZWFtIGprc0ZpcyA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgcGtjc0ZpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oaW5wdXRGaWxlKTsKLQkgICAgamtzRmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbSAob3V0cHV0RmlsZSk7Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICAvLyBObyBwcm9ibGVtIHdlJ2xsIGNyZWF0ZSBvbmUuLi4uCi0JICAgIC8vIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSBmaW5hbGx5IHsKLQkgICAgdHJ5IHsKLQkJcGtjczEyS2V5U3RvcmUubG9hZChwa2NzRmlzLCBwa2NzS2V5U3RvcmVQYXNzKTsKLQkJLy8gRG9udCBuZWVkIGEgcGFzc3dvcmQgYXMgY3JlYXRpbmcgYSBuZXcgCi0JCS8vIGtleXN0b3JlLgotCQlqa3NLZXlTdG9yZS5sb2FkIChqa3NGaXMsIG51bGwpOwotCSAgICB9IGNhdGNoKEV4Y2VwdGlvbiBjZSkgewotCQkvLyBDYW4ndCBkbyBtdWNoLi4uIHRvbyBiYWQuCi0JCWNlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9Ci0JICAgIGlmKHBrY3NGaXMgIT0gbnVsbCkKLQkJcGtjc0Zpcy5jbG9zZSgpOwotCSAgICBpZiAoamtzRmlzICE9IG51bGwpCi0JCWprc0Zpcy5jbG9zZSAoKTsKKyAgICBGaWxlSW5wdXRTdHJlYW0gcGtjc0ZpcyA9IG51bGw7CisgICAgRmlsZUlucHV0U3RyZWFtIGprc0ZpcyA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgcGtjc0ZpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oaW5wdXRGaWxlKTsKKyAgICAgICAgamtzRmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbSAob3V0cHV0RmlsZSk7CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICAvLyBObyBwcm9ibGVtIHdlJ2xsIGNyZWF0ZSBvbmUuLi4uCisgICAgICAgIC8vIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgcGtjczEyS2V5U3RvcmUubG9hZChwa2NzRmlzLCBwa2NzS2V5U3RvcmVQYXNzKTsKKyAgICAgICAgLy8gRG9udCBuZWVkIGEgcGFzc3dvcmQgYXMgY3JlYXRpbmcgYSBuZXcKKyAgICAgICAgLy8ga2V5c3RvcmUuCisgICAgICAgIGprc0tleVN0b3JlLmxvYWQgKGprc0ZpcywgbnVsbCk7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGNlKSB7CisgICAgICAgIC8vIENhbid0IGRvIG11Y2guLi4gdG9vIGJhZC4KKyAgICAgICAgY2UucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICB9ICAgCisgICAgICAgIGlmKHBrY3NGaXMgIT0gbnVsbCkKKyAgICAgICAgcGtjc0Zpcy5jbG9zZSgpOworICAgICAgICBpZiAoamtzRmlzICE9IG51bGwpCisgICAgICAgIGprc0Zpcy5jbG9zZSAoKTsKKyAgICAgICAgfQorICAgIH0KICAgICAvKioKLSAgICAgKiBXcml0ZSB0aGUgSktTIGtleXN0b3JlIHRoYXQgaXMgcG9wdWxhdGVkIHdpdGggdmFsdWVzIGZyb20gCisgICAgICogV3JpdGUgdGhlIEpLUyBrZXlzdG9yZSB0aGF0IGlzIHBvcHVsYXRlZCB3aXRoIHZhbHVlcyBmcm9tCiAgICAgICogdGhlIFBLQ1MxMiBrZXlzdG9yZSB0byB0aGUgb3V0cHV0ZmlsZS4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCB3cml0ZUprc0tleVN0b3JlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQlGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0ob3V0cHV0RmlsZSk7Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICAvLyBObyBwcm9ibGVtIHdlJ2xsIGNyZWF0ZSBvbmUuLi4uCi0JICAgIC8vIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSBmaW5hbGx5IHsKLQkgICAgdHJ5IHsKLQkJamtzS2V5U3RvcmUuc3RvcmUgKGZvcywgamtzS2V5U3RvcmVQYXNzKTsKLQkgICAgfSBjYXRjaChFeGNlcHRpb24gY2UpIHsKLQkJLy8gQ2FuJ3QgZG8gbXVjaC4uLiB0b28gYmFkLgotCQljZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgfQotCSAgICBpZihmb3MgIT0gbnVsbCkKLQkJZm9zLmNsb3NlKCk7CisgICAgRmlsZU91dHB1dFN0cmVhbSBmb3MgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKG91dHB1dEZpbGUpOworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgLy8gTm8gcHJvYmxlbSB3ZSdsbCBjcmVhdGUgb25lLi4uLgorICAgICAgICAvLyBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGprc0tleVN0b3JlLnN0b3JlIChmb3MsIGprc0tleVN0b3JlUGFzcyk7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGNlKSB7CisgICAgICAgIC8vIENhbid0IGRvIG11Y2guLi4gdG9vIGJhZC4KKyAgICAgICAgY2UucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICB9ICAgCi0gICAgLyoqIAotICAgICAqIENvcGllcyB0aGUga2V5cyBhbmQgY2VydGlmaWNhdGVzIGluIHRoZSBQS0NTMTIgZmlsZSB0byAKKyAgICAgICAgaWYoZm9zICE9IG51bGwpCisgICAgICAgIGZvcy5jbG9zZSgpOworICAgICAgICB9CisgICAgfQorICAgIC8qKgorICAgICAqIENvcGllcyB0aGUga2V5cyBhbmQgY2VydGlmaWNhdGVzIGluIHRoZSBQS0NTMTIgZmlsZSB0bwogICAgICAqIHRoZSBpbi1tZW1vcnkgSktTIGtleXN0b3JlCiAgICAgICogQGV4Y2VwdGlvbiBJZiB0aGUga2V5c3RvcmUgaGFzIG5vdCBiZWVuIGluc3RhbnRpYXRlZCBvcgogICAgICAqIHRoZSBwYXNzd29yZCB0byB0aGUga2V5IGlzJ250IHByb3BlcgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJlcGxpY2F0ZVBrY3MxMlRvSmtzICgpIHRocm93cyBFeGNlcHRpb24gewotCUVudW1lcmF0aW9uIGUgPSBwa2NzMTJLZXlTdG9yZS5hbGlhc2VzICgpOwotCWZvciAoOyBlLmhhc01vcmVFbGVtZW50cyAoKTsgKXsKLQkgICAgU3RyaW5nIGFsaWFzID0gKFN0cmluZyllLm5leHRFbGVtZW50ICgpOwotCSAgICBpZiAocGtjczEyS2V5U3RvcmUuaXNLZXlFbnRyeSAoYWxpYXMpKXsKKyAgICBFbnVtZXJhdGlvbiBlID0gcGtjczEyS2V5U3RvcmUuYWxpYXNlcyAoKTsKKyAgICBmb3IgKDsgZS5oYXNNb3JlRWxlbWVudHMgKCk7ICl7CisgICAgICAgIFN0cmluZyBhbGlhcyA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCAoKTsKKyAgICAgICAgaWYgKHBrY3MxMktleVN0b3JlLmlzS2V5RW50cnkgKGFsaWFzKSl7CiAgICAgICAgICAgICAgICAgaWYgKGRlYnVnKQotCQkgICAgU3lzdGVtLm91dC5wcmludGxuICgiQWxpYXMgIithbGlhcysgIiBpcyBhIGtleSBlbnRyeSAiKTsgCi0JCQotCQkvKiBHZXQgdGhlIGtleSBhbmQgYXNzb2NpYXRlZCBjZXJ0aWZpY2F0ZSBjaGFpbgotCQkgKiBmcm9tIFBLQ1MxMiBrZXlzdG9yZSBhbmQgcHV0IGluIEpLUyBrZXlzdG9yZQotCQkgKi8KLQkJS2V5IGtleSA9IHBrY3MxMktleVN0b3JlLmdldEtleSAoYWxpYXMsIHBrY3NLZXlQYXNzKTsKLQkJQ2VydGlmaWNhdGVbXSBjZXJ0cyA9IAotCQkgICAgcGtjczEyS2V5U3RvcmUuZ2V0Q2VydGlmaWNhdGVDaGFpbiAoYWxpYXMpOwotCQlqa3NLZXlTdG9yZS5zZXRLZXlFbnRyeSAoYWxpYXMsICBrZXksIGprc0tleVBhc3MsIGNlcnRzKTsKLQkgICAgfSBlbHNlIGlmIChwa2NzMTJLZXlTdG9yZS5pc0NlcnRpZmljYXRlRW50cnkgKGFsaWFzKSl7Ci0JCWlmIChkZWJ1ZykKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIiBBbGlhcyAiK2FsaWFzICsKLQkJCQkJIiBpcyBhIGNlcnRpZmljYXRlIGVudHJ5Iik7Ci0JCWprc0tleVN0b3JlLnNldENlcnRpZmljYXRlRW50cnkgCi0JCSAgICAoYWxpYXMsIHBrY3MxMktleVN0b3JlLmdldENlcnRpZmljYXRlIChhbGlhcykpOwotCSAgICB9Ci0JfQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiQWxpYXMgIithbGlhcysgIiBpcyBhIGtleSBlbnRyeSAiKTsKKworICAgICAgICAvKiBHZXQgdGhlIGtleSBhbmQgYXNzb2NpYXRlZCBjZXJ0aWZpY2F0ZSBjaGFpbgorICAgICAgICAgKiBmcm9tIFBLQ1MxMiBrZXlzdG9yZSBhbmQgcHV0IGluIEpLUyBrZXlzdG9yZQorICAgICAgICAgKi8KKyAgICAgICAgS2V5IGtleSA9IHBrY3MxMktleVN0b3JlLmdldEtleSAoYWxpYXMsIHBrY3NLZXlQYXNzKTsKKyAgICAgICAgQ2VydGlmaWNhdGVbXSBjZXJ0cyA9CisgICAgICAgICAgICBwa2NzMTJLZXlTdG9yZS5nZXRDZXJ0aWZpY2F0ZUNoYWluIChhbGlhcyk7CisgICAgICAgIGprc0tleVN0b3JlLnNldEtleUVudHJ5IChhbGlhcywgIGtleSwgamtzS2V5UGFzcywgY2VydHMpOworICAgICAgICB9IGVsc2UgaWYgKHBrY3MxMktleVN0b3JlLmlzQ2VydGlmaWNhdGVFbnRyeSAoYWxpYXMpKXsKKyAgICAgICAgaWYgKGRlYnVnKQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiIEFsaWFzICIrYWxpYXMgKworICAgICAgICAgICAgICAgICAgICAiIGlzIGEgY2VydGlmaWNhdGUgZW50cnkiKTsKKyAgICAgICAgamtzS2V5U3RvcmUuc2V0Q2VydGlmaWNhdGVFbnRyeQorICAgICAgICAgICAgKGFsaWFzLCBwa2NzMTJLZXlTdG9yZS5nZXRDZXJ0aWZpY2F0ZSAoYWxpYXMpKTsKKyAgICAgICAgfQorICAgIH0KICAgICB9CiAgICAgLyoqCiAgICAgICogUHJpbnRzIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgUEtDUzEyIGtleXN0b3JlCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgaW5mbyAoKSB0aHJvd3MgRXhjZXB0aW9uewotCVN5c3RlbS5vdXQucHJpbnRsbiAoIiBLZXlzdG9yZSBJbmZvcm1hdGlvbiIpOwotCVN5c3RlbS5vdXQucHJpbnRsbiAoIiBUeXBlID0gIiArIHBrY3MxMktleVN0b3JlLmdldFR5cGUgKCkpOwotCVN5c3RlbS5vdXQucHJpbnRsbiAoIiBQcm92aWRlciA9ICIrIHBrY3MxMktleVN0b3JlLmdldFByb3ZpZGVyICgpKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4gKCIgS2V5U3RvcmUgc2l6ZSA9ICIrcGtjczEyS2V5U3RvcmUuc2l6ZSAoKSk7Ci0JRW51bWVyYXRpb24gZSA9IHBrY3MxMktleVN0b3JlLmFsaWFzZXMgKCk7Ci0JU3lzdGVtLm91dC5wcmludGxuICgiIEtzdG9yZSBBbGlhc2VzICIpOyAKLQlmb3IgKDsgZS5oYXNNb3JlRWxlbWVudHMgKCk7ICl7Ci0JICAgIFN0cmluZyBhbGlhcyA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCAoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuICgiIEFsaWFzID0gIisgYWxpYXMpOwotCSAgICBpZiAocGtjczEyS2V5U3RvcmUuaXNLZXlFbnRyeSAoYWxpYXMpKXsKLQkJU3lzdGVtLm91dC5wcmludGxuICgiQWxpYXMgaXMgYSBrZXkgZW50cnkgIik7IAotCQlLZXkga2V5ID0gcGtjczEyS2V5U3RvcmUuZ2V0S2V5IChhbGlhcywgcGtjc0tleVBhc3MpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4gKCIgRm9ybWF0ID0gIitrZXkuZ2V0Rm9ybWF0ICgpKTsgCi0JICAgIH0gZWxzZSBpZiAocGtjczEyS2V5U3RvcmUuaXNDZXJ0aWZpY2F0ZUVudHJ5IChhbGlhcykpewotCQlTeXN0ZW0ub3V0LnByaW50bG4gKCIgQWxpYXMgaXMgYSBjZXJ0aWZpY2F0ZSBlbnRyeSIpOyAKLQkgICAgfQotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4gKCIgRW5kIG9mIEluZm9ybWF0aW9uIik7IAorICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIiBLZXlzdG9yZSBJbmZvcm1hdGlvbiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIiBUeXBlID0gIiArIHBrY3MxMktleVN0b3JlLmdldFR5cGUgKCkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIiBQcm92aWRlciA9ICIrIHBrY3MxMktleVN0b3JlLmdldFByb3ZpZGVyICgpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgS2V5U3RvcmUgc2l6ZSA9ICIrcGtjczEyS2V5U3RvcmUuc2l6ZSAoKSk7CisgICAgRW51bWVyYXRpb24gZSA9IHBrY3MxMktleVN0b3JlLmFsaWFzZXMgKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuICgiIEtzdG9yZSBBbGlhc2VzICIpOworICAgIGZvciAoOyBlLmhhc01vcmVFbGVtZW50cyAoKTsgKXsKKyAgICAgICAgU3RyaW5nIGFsaWFzID0gKFN0cmluZyllLm5leHRFbGVtZW50ICgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgQWxpYXMgPSAiKyBhbGlhcyk7CisgICAgICAgIGlmIChwa2NzMTJLZXlTdG9yZS5pc0tleUVudHJ5IChhbGlhcykpeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJBbGlhcyBpcyBhIGtleSBlbnRyeSAiKTsKKyAgICAgICAgS2V5IGtleSA9IHBrY3MxMktleVN0b3JlLmdldEtleSAoYWxpYXMsIHBrY3NLZXlQYXNzKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiIEZvcm1hdCA9ICIra2V5LmdldEZvcm1hdCAoKSk7CisgICAgICAgIH0gZWxzZSBpZiAocGtjczEyS2V5U3RvcmUuaXNDZXJ0aWZpY2F0ZUVudHJ5IChhbGlhcykpeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgQWxpYXMgaXMgYSBjZXJ0aWZpY2F0ZSBlbnRyeSIpOworICAgICAgICB9CiAgICAgfQotICAgIC8qKiAKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCIgRW5kIG9mIEluZm9ybWF0aW9uIik7CisgICAgfQorICAgIC8qKgogICAgICAqIEluaXRpYWxpemVzIHRoZSBwcm92aWRlciB0byBiZSB0aGUgSlNTRSBwcm92aWRlcgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBpbml0UHJvdmlkZXIoKSB7Ci0JdHJ5IHsgCi0JICAgIFByb3ZpZGVyIHAgPQotCQkoUHJvdmlkZXIpIENsYXNzLmZvck5hbWUoSlNTRV9QUk9WSURFUikubmV3SW5zdGFuY2UoKTsKLQkgICAgU2VjdXJpdHkuYWRkUHJvdmlkZXIocCk7CisgICAgdHJ5IHsKKyAgICAgICAgUHJvdmlkZXIgcCA9CisgICAgICAgIChQcm92aWRlcikgQ2xhc3MuZm9yTmFtZShKU1NFX1BST1ZJREVSKS5uZXdJbnN0YW5jZSgpOworICAgICAgICBTZWN1cml0eS5hZGRQcm92aWRlcihwKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0gICAgfSAKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQorICAgIH0KICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwcm92aWRlciBuYW1lIGZvciBKU1NFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UHJvdmlkZXJOYW1lICgpewotCXRyeXsKLQkgICAgUHJvdmlkZXIgcCA9IAotCQkoUHJvdmlkZXIpIENsYXNzLmZvck5hbWUoSlNTRV9QUk9WSURFUikubmV3SW5zdGFuY2UoKTsKLQkgICAgcmV0dXJuIHAuZ2V0TmFtZSAoKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSAoKTsKLQl9Ci0JcmV0dXJuIG51bGw7CisgICAgdHJ5eworICAgICAgICBQcm92aWRlciBwID0KKyAgICAgICAgKFByb3ZpZGVyKSBDbGFzcy5mb3JOYW1lKEpTU0VfUFJPVklERVIpLm5ld0luc3RhbmNlKCk7CisgICAgICAgIHJldHVybiBwLmdldE5hbWUgKCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UgKCk7CisgICAgfQorICAgIHJldHVybiBudWxsOwogICAgIH0KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgaGVscCAoYm9vbGVhbiBleGl0KXsKIAotCVN5c3RlbS5vdXQucHJpbnRsbiAKLQkgICAgKGxvY2FsU3RyaW5ncy5nZXRMb2NhbFN0cmluZyAoImVudGVycHJpc2Uuc2VjdXJpdHkua2V5dG9vbCIsCi0JCQkJCSAgImtleXRvb2wiKSk7Ci0JU3lzdGVtLm91dC5wcmludGxuCi0JICAgIChsb2NhbFN0cmluZ3MuZ2V0TG9jYWxTdHJpbmcKLQkgICAgICgiZW50ZXJwcmlzZS5zZWN1cml0eS5rZXl0b29sb3B0aW9ucyIsICJQS0NTIE9wdGlvbnM6IikpOwotCVN5c3RlbS5vdXQucHJpbnRsbiAoIiAiKyBQS0NTMTIgKyAKLQkJCSAgICAiICIrIElORklMRSArICIgZmlsZU5hbWUiICsKLQkJCSAgICAiICIrIFBLQ1NLRVlTVE9SRVBBU1MgKyAiIHBhc3N3b3JkIiArCi0JCQkgICAgIiAiK1BLQ1NLRVlQQVNTICsiIHBhc3N3b3JkIiArCi0JCQkgICAgIiAiK09VVEZJTEUrICIgb3V0cHV0RmlsZU5hbWUiKwotCQkJICAgICIgIitKS1NLRVlTVE9SRVBBU1MgKyAiIHBhc3N3b3JkIik7IAotCS8qIHVuY29tbWVudCB3aGVuIHN1cHBvcnQgZm9yIHRoaXMgcHJlc2VudCBpbiBKU1NFCi0JICAgU3lzdGVtLk91dC5QcmludGxuICgiICIrSktTS0VZUEFTUysgIiBwYXNzd29yZCIpOyAKLQkqLwotCWlmIChleGl0KQotCSAgICBTeXN0ZW0uZXhpdCAoLTEpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbgorICAgICAgICAobG9jYWxTdHJpbmdzLmdldExvY2FsU3RyaW5nICgiZW50ZXJwcmlzZS5zZWN1cml0eS5rZXl0b29sIiwKKyAgICAgICAgICAgICAgICAgICAgICAia2V5dG9vbCIpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4KKyAgICAgICAgKGxvY2FsU3RyaW5ncy5nZXRMb2NhbFN0cmluZworICAgICAgICAgKCJlbnRlcnByaXNlLnNlY3VyaXR5LmtleXRvb2xvcHRpb25zIiwgIlBLQ1MgT3B0aW9uczoiKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuICgiICIrIFBLQ1MxMiArCisgICAgICAgICAgICAgICAgIiAiKyBJTkZJTEUgKyAiIGZpbGVOYW1lIiArCisgICAgICAgICAgICAgICAgIiAiKyBQS0NTS0VZU1RPUkVQQVNTICsgIiBwYXNzd29yZCIgKworICAgICAgICAgICAgICAgICIgIitQS0NTS0VZUEFTUyArIiBwYXNzd29yZCIgKworICAgICAgICAgICAgICAgICIgIitPVVRGSUxFKyAiIG91dHB1dEZpbGVOYW1lIisKKyAgICAgICAgICAgICAgICAiICIrSktTS0VZU1RPUkVQQVNTICsgIiBwYXNzd29yZCIpOworICAgIC8qIHVuY29tbWVudCB3aGVuIHN1cHBvcnQgZm9yIHRoaXMgcHJlc2VudCBpbiBKU1NFCisgICAgICAgU3lzdGVtLk91dC5QcmludGxuICgiICIrSktTS0VZUEFTUysgIiBwYXNzd29yZCIpOworICAgICovCisgICAgaWYgKGV4aXQpCisgICAgICAgIFN5c3RlbS5leGl0ICgtMSk7CiAgICAgfQogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQlib29sZWFuIHBrY3MgPSBmYWxzZTsKLQlpbml0UHJvdmlkZXIoKTsKLQlTdHJpbmcgcHJvdmlkZXIgPSBudWxsOwotCVN0cmluZyBpbkZpbGUgPSBudWxsOwotCVN0cmluZyBvdXRGaWxlID0gbnVsbDsKLQlTdHJpbmcgamtzS2V5UGFzcyAgPSBudWxsOwotCVN0cmluZyBqa3NLZXlTdG9yZVBhc3MgPSBudWxsOwotCVN0cmluZyBwa2NzS2V5UGFzcyA9IG51bGw7Ci0JU3RyaW5nIHBrY3NLZXlTdG9yZVBhc3MgPSBudWxsOwotCXRyeXsKLQkgICAgaWYgKGFyZ3MubGVuZ3RoID09IDApewotCQloZWxwIChmYWxzZSk7Ci0JCXN1bi5zZWN1cml0eS50b29scy5LZXlUb29sLm1haW4gKGFyZ3MpOwotCSAgICB9Ci0JICAgIGlmIChhcmdzWzBdLmVxdWFsc0lnbm9yZUNhc2UgKFBLQ1MxMikpewotCQlwa2NzID0gdHJ1ZTsKLQkJaWYgKGFyZ3MubGVuZ3RoICE9IDExKQotCQkgICAgaGVscCAodHJ1ZSk7Ci0JCWlmICghYXJnc1sxXS5lcXVhbHNJZ25vcmVDYXNlIChJTkZJTEUpKQotCQkgICAgaGVscCAodHJ1ZSk7Ci0JCWluRmlsZSA9IGFyZ3NbMl07Ci0JCWlmICghYXJnc1szXS5lcXVhbHNJZ25vcmVDYXNlIChQS0NTS0VZU1RPUkVQQVNTKSkKLQkJICAgIGhlbHAgKHRydWUpOwotCQlwa2NzS2V5U3RvcmVQYXNzID0gYXJnc1s0XTsKLQkJaWYgKCFhcmdzWzVdLmVxdWFsc0lnbm9yZUNhc2UgKFBLQ1NLRVlQQVNTKSkKLQkJICAgIGhlbHAgKHRydWUpOwotCQlwa2NzS2V5UGFzcyA9IGFyZ3NbNl07Ci0JCWlmICghYXJnc1s3XS5lcXVhbHNJZ25vcmVDYXNlIChPVVRGSUxFKSkKLQkJICAgIGhlbHAgKHRydWUpOwotCQlvdXRGaWxlID0gYXJnc1s4XTsKLQkJaWYgKCFhcmdzWzldLmVxdWFsc0lnbm9yZUNhc2UgKEpLU0tFWVNUT1JFUEFTUykpCi0JCSAgICBoZWxwICh0cnVlKTsKLQkJCi0JCWprc0tleVN0b3JlUGFzcyA9IGFyZ3NbMTBdOwotCQlqa3NLZXlQYXNzID0gamtzS2V5U3RvcmVQYXNzOwotCQkvKgotCQkvLyBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyB3aGVuIHN1cHBvcnQKLQkJLy8gZm9yIGRpZmZlcmVudCBrZXlzdG9yZSBhbmQga2V5IHBhc3MgcHJlc2VudCBpbiBKU1NFCisgICAgYm9vbGVhbiBwa2NzID0gZmFsc2U7CisgICAgaW5pdFByb3ZpZGVyKCk7CisgICAgU3RyaW5nIHByb3ZpZGVyID0gbnVsbDsKKyAgICBTdHJpbmcgaW5GaWxlID0gbnVsbDsKKyAgICBTdHJpbmcgb3V0RmlsZSA9IG51bGw7CisgICAgU3RyaW5nIGprc0tleVBhc3MgID0gbnVsbDsKKyAgICBTdHJpbmcgamtzS2V5U3RvcmVQYXNzID0gbnVsbDsKKyAgICBTdHJpbmcgcGtjc0tleVBhc3MgPSBudWxsOworICAgIFN0cmluZyBwa2NzS2V5U3RvcmVQYXNzID0gbnVsbDsKKyAgICB0cnl7CisgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAwKXsKKyAgICAgICAgaGVscCAoZmFsc2UpOworICAgICAgICBzdW4uc2VjdXJpdHkudG9vbHMuS2V5VG9vbC5tYWluIChhcmdzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXJnc1swXS5lcXVhbHNJZ25vcmVDYXNlIChQS0NTMTIpKXsKKyAgICAgICAgcGtjcyA9IHRydWU7CisgICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPSAxMSkKKyAgICAgICAgICAgIGhlbHAgKHRydWUpOworICAgICAgICBpZiAoIWFyZ3NbMV0uZXF1YWxzSWdub3JlQ2FzZSAoSU5GSUxFKSkKKyAgICAgICAgICAgIGhlbHAgKHRydWUpOworICAgICAgICBpbkZpbGUgPSBhcmdzWzJdOworICAgICAgICBpZiAoIWFyZ3NbM10uZXF1YWxzSWdub3JlQ2FzZSAoUEtDU0tFWVNUT1JFUEFTUykpCisgICAgICAgICAgICBoZWxwICh0cnVlKTsKKyAgICAgICAgcGtjc0tleVN0b3JlUGFzcyA9IGFyZ3NbNF07CisgICAgICAgIGlmICghYXJnc1s1XS5lcXVhbHNJZ25vcmVDYXNlIChQS0NTS0VZUEFTUykpCisgICAgICAgICAgICBoZWxwICh0cnVlKTsKKyAgICAgICAgcGtjc0tleVBhc3MgPSBhcmdzWzZdOworICAgICAgICBpZiAoIWFyZ3NbN10uZXF1YWxzSWdub3JlQ2FzZSAoT1VURklMRSkpCisgICAgICAgICAgICBoZWxwICh0cnVlKTsKKyAgICAgICAgb3V0RmlsZSA9IGFyZ3NbOF07CisgICAgICAgIGlmICghYXJnc1s5XS5lcXVhbHNJZ25vcmVDYXNlIChKS1NLRVlTVE9SRVBBU1MpKQorICAgICAgICAgICAgaGVscCAodHJ1ZSk7CiAKLQkJaWYgKCFhcmdzWzExXS5lcXVhbHNJZ25vcmVDYXNlIChKS1NLRVlQQVNTKSkKLQkJICAgIGhlbHAgKCk7Ci0JCWprc0tleVBhc3MgPSBhcmdzWzEyXTsKLQkJKi8KLQkgICAgfQotCSAgICBpZiAoIXBrY3MpewotCQlzdW4uc2VjdXJpdHkudG9vbHMuS2V5VG9vbC5tYWluKGFyZ3MpOwotCSAgICB9IGVsc2V7Ci0JCXByb3ZpZGVyID0gZ2V0UHJvdmlkZXJOYW1lICgpOwotCQlLZXlUb29sIGt0ID0gbmV3IEtleVRvb2wgKGluRmlsZSwgb3V0RmlsZSwgcGtjc0tleVN0b3JlUGFzcywKLQkJCQkJICBwa2NzS2V5UGFzcywgamtzS2V5U3RvcmVQYXNzLAotCQkJCQkgIGprc0tleVBhc3MsCi0JCQkJCSAgcHJvdmlkZXIpOwotCQlrdC5yZXBsaWNhdGVQa2NzMTJUb0prcyAoKTsKLQkJa3Qud3JpdGVKa3NLZXlTdG9yZSAoKTsKLQkgICAgfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuIChlLmdldE1lc3NhZ2UgKCkpOyAKLQkgICAgZS5wcmludFN0YWNrVHJhY2UgKCk7Ci0JfQorICAgICAgICBqa3NLZXlTdG9yZVBhc3MgPSBhcmdzWzEwXTsKKyAgICAgICAgamtzS2V5UGFzcyA9IGprc0tleVN0b3JlUGFzczsKKyAgICAgICAgLyoKKyAgICAgICAgLy8gVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgd2hlbiBzdXBwb3J0CisgICAgICAgIC8vIGZvciBkaWZmZXJlbnQga2V5c3RvcmUgYW5kIGtleSBwYXNzIHByZXNlbnQgaW4gSlNTRQorCisgICAgICAgIGlmICghYXJnc1sxMV0uZXF1YWxzSWdub3JlQ2FzZSAoSktTS0VZUEFTUykpCisgICAgICAgICAgICBoZWxwICgpOworICAgICAgICBqa3NLZXlQYXNzID0gYXJnc1sxMl07CisgICAgICAgICovCisgICAgICAgIH0KKyAgICAgICAgaWYgKCFwa2NzKXsKKyAgICAgICAgc3VuLnNlY3VyaXR5LnRvb2xzLktleVRvb2wubWFpbihhcmdzKTsKKyAgICAgICAgfSBlbHNleworICAgICAgICBwcm92aWRlciA9IGdldFByb3ZpZGVyTmFtZSAoKTsKKyAgICAgICAgS2V5VG9vbCBrdCA9IG5ldyBLZXlUb29sIChpbkZpbGUsIG91dEZpbGUsIHBrY3NLZXlTdG9yZVBhc3MsCisgICAgICAgICAgICAgICAgICAgICAgcGtjc0tleVBhc3MsIGprc0tleVN0b3JlUGFzcywKKyAgICAgICAgICAgICAgICAgICAgICBqa3NLZXlQYXNzLAorICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyKTsKKyAgICAgICAga3QucmVwbGljYXRlUGtjczEyVG9Ka3MgKCk7CisgICAgICAgIGt0LndyaXRlSmtzS2V5U3RvcmUgKCk7CisgICAgICAgIH0KKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSl7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoZS5nZXRNZXNzYWdlICgpKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UgKCk7CisgICAgfQogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvc3NsL3V0aWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3NzbC91dGlsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGU4OTZmOS4uYTI1MDg4ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvc3NsL3V0aWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9zc2wvdXRpbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eSIvPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9zc2wvdXRpbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS9zc2wvdXRpbC9idWlsZC54bWwKaW5kZXggMzZmNjA2Ny4uNDk3YzMzNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvc3NsL3V0aWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3NzbC91dGlsL2J1aWxkLnhtbApAQCAtNDIsNyArNDIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iLiIvPgpAQCAtNTAsMTEgKzUwLDExIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLQkgPGphciBkZXN0ZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2xpYi9zc2x1dGlsLmphciI+Ci0JCSA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgotCQkJIGluY2x1ZGVzPSIqKi9LZXlUb29sLmNsYXNzIgotCSAgICAvPgotCSAgPC9qYXI+CisgICAgIDxqYXIgZGVzdGZpbGU9IiR7ZW52LkFQU19IT01FfS9saWIvc3NsdXRpbC5qYXIiPgorICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKKyAgICAgICAgICAgICBpbmNsdWRlcz0iKiovS2V5VG9vbC5jbGFzcyIKKyAgICAgICAgLz4KKyAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDE2NTA3MDUuLjdmYjgzMWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw2ICsxNSw2IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3c3MiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3MvYnVpbGQueG1sCmluZGV4IGJhOTVmODcuLjMwYWFhMTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL2J1aWxkLnhtbApAQCAtMzksNDQgKzM5LDQ0IEBACiAgICZydW47CiAKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImRpc3BsYXktaGVhZGVyLGluaXQtY29tbW9uIj4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+Ci0JPGFudCBkaXI9InNlcnZsZXRqYXh3cyIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iZWpid3MiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InNlcnZsZXR3cyIgdGFyZ2V0PSJhbGwiLz4KLQkKLQk8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+CisgICAgPGFudCBkaXI9InNlcnZsZXRqYXh3cyIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iZWpid3MiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InNlcnZsZXR3cyIgdGFyZ2V0PSJhbGwiLz4KKworICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJkaXNwbGF5LWhlYWRlciI+Ci0gICAgPGVjaG8gbWVzc2FnZT0iLS0+UnVubmluZyAke2FudC5wcm9qZWN0Lm5hbWV9IHRlc3RzIGZyb20gJHtiYXNlZGlyfSAuLi4iLz4gICAgICAKKyAgICA8ZWNobyBtZXNzYWdlPSItLT5SdW5uaW5nICR7YW50LnByb2plY3QubmFtZX0gdGVzdHMgZnJvbSAke2Jhc2VkaXJ9IC4uLiIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdCI+Ci0JPGFudCBkaXI9InNlcnZsZXRqYXh3cyIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iZWpid3MiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InNlcnZsZXR3cyIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ic2VydmxldGpheHdzIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJlamJ3cyIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ic2VydmxldHdzIiB0YXJnZXQ9ImFsbCIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTwhLS0gKioqIFRoZSBmb2xsb3dpbmcgaXMgY29tbWVudGVkIGFzIG1lc3NhZ2Ugc2VjdXJpdHkgbGV2ZWwgaXMgYmVpbmcgcHJvdmlkZWQgYXQgYXBwbGljYXRpb24gbGV2ZWwuIFVuY29tbWVudCBvbmx5IHRvIHRlc3Qgd2l0aCBkZWZhdWx0IHByb3ZpZGVyIGF0IHNlcnZlciBsZXZlbCBwb2xpY2llcy4gKioKLQk8YW50Y2FsbCB0YXJnZXQ9ImVuYWJsZS13c3MtbWVzc2FnZS1zZWN1cml0eS1wcm92aWRlciIvPgotCTxhbnRjYWxsIHRhcmdldD0iZW5hYmxlLXdzcy1jbGllbnQtbWVzc2FnZS1zZWN1cml0eS1wcm92aWRlciIvPgotCTxjb3B5IGZhaWxvbmVycm9yPSJmYWxzZSIgZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sIgorICAgIDwhLS0gKioqIFRoZSBmb2xsb3dpbmcgaXMgY29tbWVudGVkIGFzIG1lc3NhZ2Ugc2VjdXJpdHkgbGV2ZWwgaXMgYmVpbmcgcHJvdmlkZWQgYXQgYXBwbGljYXRpb24gbGV2ZWwuIFVuY29tbWVudCBvbmx5IHRvIHRlc3Qgd2l0aCBkZWZhdWx0IHByb3ZpZGVyIGF0IHNlcnZlciBsZXZlbCBwb2xpY2llcy4gKioKKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImVuYWJsZS13c3MtbWVzc2FnZS1zZWN1cml0eS1wcm92aWRlciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZW5hYmxlLXdzcy1jbGllbnQtbWVzc2FnZS1zZWN1cml0eS1wcm92aWRlciIvPgorICAgIDxjb3B5IGZhaWxvbmVycm9yPSJmYWxzZSIgZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sIgogICAgICAgICAgICAgICAgIHRvZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sLmJhc2Vjb25maWciLz4KLQktLT4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldHVwLWNsaWVudC1jZXJ0LXMxYXMiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS11c2VycyIvPgotCTxhbnRjYWxsIHRhcmdldD0iZW5hYmxlLXdzcy1sb2ciLz4KKyAgICAtLT4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwLWNsaWVudC1jZXJ0LXMxYXMiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS11c2VycyIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZW5hYmxlLXdzcy1sb2ciLz4KICAgPC90YXJnZXQ+CiAKIAogICA8dGFyZ2V0IG5hbWU9ImVuYWJsZS13c3MtY2xpZW50LW1lc3NhZ2Utc2VjdXJpdHktcHJvdmlkZXIiIGRlcGVuZHM9InNldC1hcHBzZXJ2ZXItdmVyc2lvbiI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJlbmFibGUtd3NzLWNsaWVudC1tZXNzYWdlLXNlY3VyaXR5LXByb3ZpZGVyLXBlIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJlbmFibGUtd3NzLWNsaWVudC1tZXNzYWdlLXNlY3VyaXR5LXByb3ZpZGVyLWVlIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJlbmFibGUtd3NzLWNsaWVudC1tZXNzYWdlLXNlY3VyaXR5LXByb3ZpZGVyLXBlIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJlbmFibGUtd3NzLWNsaWVudC1tZXNzYWdlLXNlY3VyaXR5LXByb3ZpZGVyLWVlIi8+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iZW5hYmxlLXdzcy1jbGllbnQtbWVzc2FnZS1zZWN1cml0eS1wcm92aWRlci1wZSIgdW5sZXNzPSJpc0VFIj4KLQk8Y29weSAgZmFpbG9uZXJyb3I9ImZhbHNlIiBmaWxlPSIke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwiCisgICAgPGNvcHkgIGZhaWxvbmVycm9yPSJmYWxzZSIgZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sIgogICAgICAgICAgICAgICAgIHRvZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sLnNxZSIvPgogICAgICAgICA8Y29weSBvdmVyd3JpdGU9InRydWUiICAgZmFpbG9uZXJyb3I9ImZhbHNlIiBmaWxlPSJjb25maWcvZ2xhc3NmaXNoLWFjYy54bWwiCiAgICAgICAgICAgICAgICAgdG9maWxlPSJjb25maWcvZ2xhc3NmaXNoLWFjYy54bWwub3JnIi8+CkBAIC0xMDgsMzggKzEwOCwzOCBAQAogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImdlbmVyYXRlLXNhbXBsZS1qa3MtY2VydCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXNhbXBsZS1zZWxmLWprcy1jZXJ0Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtc2FtcGxlLXNlbGYtamtzLWNlcnQiLz4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAKLQk8IS0tICoqKiBUaGUgZm9sbG93aW5nIGlzIGNvbW1lbnRlZCBhcyBtZXNzYWdlIHNlY3VyaXR5IGxldmVsIGlzIGJlaW5nIHByb3ZpZGVkIGF0IGFwcGxpY2F0aW9uIGxldmVsLiBVbmNvbW1lbnQgb25seSB0byB0ZXN0IHdpdGggZGVmYXVsdCBwcm92aWRlciBhdCBzZXJ2ZXIgbGV2ZWwgcG9saWNpZXMuICoqCisgICAgPCEtLSAqKiogVGhlIGZvbGxvd2luZyBpcyBjb21tZW50ZWQgYXMgbWVzc2FnZSBzZWN1cml0eSBsZXZlbCBpcyBiZWluZyBwcm92aWRlZCBhdCBhcHBsaWNhdGlvbiBsZXZlbC4gVW5jb21tZW50IG9ubHkgdG8gdGVzdCB3aXRoIGRlZmF1bHQgcHJvdmlkZXIgYXQgc2VydmVyIGxldmVsIHBvbGljaWVzLiAqKgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGlzYWJsZS13c3MtbWVzc2FnZS1zZWN1cml0eS1wcm92aWRlciIvPgotCTxjb3B5IG92ZXJ3cml0ZT0idHJ1ZSIgZmFpbG9uZXJyb3I9ImZhbHNlIiBmaWxlPSIke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwuc3FlIgotCQl0b2ZpbGU9IiR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9nbGFzc2Zpc2gtYWNjLnhtbCIvPgotCTxkZWxldGUgZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sLnNxZSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0JPGRlbGV0ZSBmaWxlPSIke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwuYmFzZWNvbmZpZyIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0JLS0+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwLWNsaWVudC1jZXJ0LXMxYXMiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VycyIvPgotCTxhbnRjYWxsIHRhcmdldD0iZGlzYWJsZS13c3MtbG9nIi8+CisgICAgPGNvcHkgb3ZlcndyaXRlPSJ0cnVlIiBmYWlsb25lcnJvcj0iZmFsc2UiIGZpbGU9IiR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9nbGFzc2Zpc2gtYWNjLnhtbC5zcWUiCisgICAgICAgIHRvZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sIi8+CisgICAgPGRlbGV0ZSBmaWxlPSIke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwuc3FlIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICA8ZGVsZXRlIGZpbGU9IiR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9nbGFzc2Zpc2gtYWNjLnhtbC5iYXNlY29uZmlnIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAtLT4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAtY2xpZW50LWNlcnQtczFhcyIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXVzZXJzIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJkaXNhYmxlLXdzcy1sb2ciLz4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8gbWVzc2FnZT0iPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIvPgotIAk8ZWNobyBtZXNzYWdlPSIqKioqKiogU2VjdXJpdHktV1NTIFRlc3RzdWl0ZXMgKioqKioiLz4KLQk8ZWNobyBtZXNzYWdlPSJhbnQgYWxsIC0tPlJ1biBhbGwgdGVzdHMiLz4KLQk8ZWNobyBtZXNzYWdlPSI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ii8+CisgICAgPGVjaG8gbWVzc2FnZT0iPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIvPgorICAgICA8ZWNobyBtZXNzYWdlPSIqKioqKiogU2VjdXJpdHktV1NTIFRlc3RzdWl0ZXMgKioqKioiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJhbnQgYWxsIC0tPlJ1biBhbGwgdGVzdHMiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ii8+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0icmVzdGFydCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJzZXR1cC1jbGllbnQtY2VydCIgZGVwZW5kcz0ic2V0LWFwcHNlcnZlci12ZXJzaW9uIj4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1zYW1wbGUtamtzLWNlcnQiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImVzdC1jZXJ0LXRydXN0LWVlIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtc2FtcGxlLWprcy1jZXJ0Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJlc3QtY2VydC10cnVzdC1lZSIvPgogICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXNhbXBsZS1qa3MtY2VydCIgaWY9ImlzRUUiPgpAQCAtMTcwLDEzICsxNzAsMTMgQEAKICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY2VydC5maWxlIiB2YWx1ZT0iY2xpZW50Y2VydF9yZmMuY3J0Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotCTwhLS0gSlNTRSB0cnVzdCBzdG9yZSAtLT4KLQk8YW50Y2FsbCB0YXJnZXQ9ImVzdC1jZXJ0LXRydXN0LWprcy1lZSIvPgorICAgIDwhLS0gSlNTRSB0cnVzdCBzdG9yZSAtLT4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImVzdC1jZXJ0LXRydXN0LWprcy1lZSIvPgogCiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImVzdC1jZXJ0LXRydXN0LWprcy1lZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxhbnRjYWxsIHRhcmdldD0iZ2V0LWNlcnRkYi10by1qa3MiPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZ2V0LWNlcnRkYi10by1qa3MiPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjZXJ0Lm5pY2tuYW1lIiB2YWx1ZT0iczFhcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iaW1wb3J0LWNlcnQtamtzIj4KQEAgLTE4NCwxMSArMTg0LDExIEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImtleXN0b3JlLmZpbGUiIHZhbHVlPSIke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvY2VydGRiX2NhY2VydHMuamtzIi8+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNlcnQuZmlsZSIgdmFsdWU9ImNsaWVudGNlcnRfcmZjLmNydCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JCisKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cC1jbGllbnQtY2VydCIgZGVwZW5kcz0ic2V0LWFwcHNlcnZlci12ZXJzaW9uIj4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAtY2xpZW50LWNlcnQtZWUiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAtY2xpZW50LWNlcnQtZWUiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1cGRhdGUtYmFjay13c3MtY2xpZW50LWFsaWFzIi8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTIwNywxMSArMjA3LDExIEBACiAgICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJ1cGRhdGUtd3NzLWNsaWVudC1hbGlhcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxlY2hvIG1lc3NhZ2U9ImNvbW1lbnRlZCB0aGUgY2xpZW50Y2VydCByZXBsYWNlbWVudCBpbiB3c3MtY2xpZW50LWNvbmZpZy0yLjAueG1sIiAvPgotCTwhLS0KKyAgICA8ZWNobyBtZXNzYWdlPSJjb21tZW50ZWQgdGhlIGNsaWVudGNlcnQgcmVwbGFjZW1lbnQgaW4gd3NzLWNsaWVudC1jb25maWctMi4wLnhtbCIgLz4KKyAgICA8IS0tCiAgICAgICAgIDxyZXBsYWNlIHRva2VuPSJzMWFzIiB2YWx1ZT0iY2xpZW50Y2VydCIgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvYXBwY2xpZW50L3dzcy1jbGllbnQtY29uZmlnLTIuMC54bWwiLz4KICAgICAgICAgPHJlcGxhY2UgdG9rZW49InMxYXMiIHZhbHVlPSJjbGllbnRjZXJ0IiBmaWxlPSIke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvd3NzLWNsaWVudC1jb25maWctMi4wLnhtbCIvPgotCS0tPgorICAgIC0tPgogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9InVwZGF0ZS1iYWNrLXdzcy1jbGllbnQtYWxpYXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTIyMCw2MyArMjIwLDYzIEBACiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0ic2V0dXAtY2xpZW50LWNlcnQtczFhcyIgZGVwZW5kcz0ic2V0LWFwcHNlcnZlci12ZXJzaW9uIj4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldHVwLWNsaWVudC1jZXJ0LXMxYXMtZWUiLz4JCisgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cC1jbGllbnQtY2VydC1zMWFzLWVlIi8+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cC1jbGllbnQtY2VydC1zMWFzIiBkZXBlbmRzPSJzZXQtYXBwc2VydmVyLXZlcnNpb24iPgotCTxhbnRjYWxsIHRhcmdldD0idW5zZXR1cC1jbGllbnQtY2VydC1zMWFzLWVlIi8+CQorICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cC1jbGllbnQtY2VydC1zMWFzLWVlIi8+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0ic2V0dXAtY2xpZW50LWNlcnQtczFhcy1lZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJpc0VFIj4KLQk8YW50Y2FsbCB0YXJnZXQ9ImV4cG9ydC1jZXJ0LXAxMi1uc3MiPgotCQk8cGFyYW0gbmFtZT0iY2VydC5maWxlIiB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9zMWFzLnAxMiIvPgotCQk8cGFyYW0gbmFtZT0iY2VydC5kaXIiIHZhbHVlPSIke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWciLz4KLQkJPHBhcmFtIG5hbWU9ImNlcnRkYi5wd2QiIHZhbHVlPSIke3NzbC5wYXNzd29yZH0iLz4KLQkJPHBhcmFtIG5hbWU9ImNlcnQucHdkIiB2YWx1ZT0iJHtzc2wucGFzc3dvcmR9Ii8+Ci0JCTxwYXJhbSBuYW1lPSJjZXJ0Lm5pY2tuYW1lIiB2YWx1ZT0iczFhcyIvPgotCTwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNvbnZlcnQtcGtjczEyLXRvLWprcyI+Ci0JCTxwYXJhbSBuYW1lPSJwa2NzMTIuZmlsZSIgdmFsdWU9IiR7ZW52LkFQU19IT01FfS9zcWV0ZXN0cy9zZWN1cml0eS93c3MvczFhcy5wMTIiLz4KLQkJPHBhcmFtIG5hbWU9InBrY3MxMi5wYXNzIiB2YWx1ZT0iJHtzc2wucGFzc3dvcmR9Ii8+Ci0JCTxwYXJhbSBuYW1lPSJqa3MuZmlsZSIgdmFsdWU9IiR7ZW52LkFQU19IT01FfS9zcWV0ZXN0cy9zZWN1cml0eS93c3MvczFhcy5qa3MiLz4KLQkJPHBhcmFtIG5hbWU9Imprcy5wYXNzIiB2YWx1ZT0iY2hhbmdlaXQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4cG9ydC1jZXJ0LXAxMi1uc3MiPgorICAgICAgICA8cGFyYW0gbmFtZT0iY2VydC5maWxlIiB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9zMWFzLnAxMiIvPgorICAgICAgICA8cGFyYW0gbmFtZT0iY2VydC5kaXIiIHZhbHVlPSIke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWciLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImNlcnRkYi5wd2QiIHZhbHVlPSIke3NzbC5wYXNzd29yZH0iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImNlcnQucHdkIiB2YWx1ZT0iJHtzc2wucGFzc3dvcmR9Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJjZXJ0Lm5pY2tuYW1lIiB2YWx1ZT0iczFhcyIvPgorICAgIDwvYW50Y2FsbD4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbnZlcnQtcGtjczEyLXRvLWprcyI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJwa2NzMTIuZmlsZSIgdmFsdWU9IiR7ZW52LkFQU19IT01FfS9zcWV0ZXN0cy9zZWN1cml0eS93c3MvczFhcy5wMTIiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InBrY3MxMi5wYXNzIiB2YWx1ZT0iJHtzc2wucGFzc3dvcmR9Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJqa3MuZmlsZSIgdmFsdWU9IiR7ZW52LkFQU19IT01FfS9zcWV0ZXN0cy9zZWN1cml0eS93c3MvczFhcy5qa3MiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Imprcy5wYXNzIiB2YWx1ZT0iY2hhbmdlaXQiLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0iZ2V0LWNlcnRkYi10by1qa3MiPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZ2V0LWNlcnRkYi10by1qa3MiPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjZXJ0Lm5pY2tuYW1lIiB2YWx1ZT0iczFhcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cC1jbGllbnQtY2VydC1zMWFzLWVlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgaWY9ImlzRUUiPgotCTxkZWxldGUgZmFpbG9uZXJyb3I9ImZhbHNlIiBmaWxlPSIke2Vudi5BUFNfSE9NRX0vc3FldGVzdHMvc2VjdXJpdHkvd3NzL3MxYXMuamtzIi8+Ci0JPGRlbGV0ZSBmYWlsb25lcnJvcj0iZmFsc2UiIGZpbGU9IiR7ZW52LkFQU19IT01FfS9zcWV0ZXN0cy9zZWN1cml0eS93c3MvczFhcy5wMTIiLz4KLQk8ZGVsZXRlIGZhaWxvbmVycm9yPSJmYWxzZSIgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9jZXJ0cGFzc2ZpbGUiLz4KLQk8ZGVsZXRlIGZhaWxvbmVycm9yPSJmYWxzZSIgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9wYXNzZmlsZSIvPgotCTxkZWxldGUgZmFpbG9uZXJyb3I9ImZhbHNlIiBmaWxlPSIke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvY2VydGRiX2NhY2VydHMuamtzIi8+Ci0JPGRlbGV0ZSBmYWlsb25lcnJvcj0iZmFsc2UiIGZpbGU9IiR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9jZXJ0ZGIucmZjIi8+CisgICAgPGRlbGV0ZSBmYWlsb25lcnJvcj0iZmFsc2UiIGZpbGU9IiR7ZW52LkFQU19IT01FfS9zcWV0ZXN0cy9zZWN1cml0eS93c3MvczFhcy5qa3MiLz4KKyAgICA8ZGVsZXRlIGZhaWxvbmVycm9yPSJmYWxzZSIgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9zMWFzLnAxMiIvPgorICAgIDxkZWxldGUgZmFpbG9uZXJyb3I9ImZhbHNlIiBmaWxlPSIke2Vudi5BUFNfSE9NRX0vc3FldGVzdHMvc2VjdXJpdHkvd3NzL2NlcnRwYXNzZmlsZSIvPgorICAgIDxkZWxldGUgZmFpbG9uZXJyb3I9ImZhbHNlIiBmaWxlPSIke2Vudi5BUFNfSE9NRX0vc3FldGVzdHMvc2VjdXJpdHkvd3NzL3Bhc3NmaWxlIi8+CisgICAgPGRlbGV0ZSBmYWlsb25lcnJvcj0iZmFsc2UiIGZpbGU9IiR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9jZXJ0ZGJfY2FjZXJ0cy5qa3MiLz4KKyAgICA8ZGVsZXRlIGZhaWxvbmVycm9yPSJmYWxzZSIgZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2NlcnRkYi5yZmMiLz4KICAgPC90YXJnZXQ+CiAKICA8dGFyZ2V0IG5hbWU9ImVuYWJsZS13c3MtbG9nIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPHJlcGxhY2UgdG9rZW49ImR1bXBNZXNzYWdlcz0mcXVvdDtmYWxzZSZxdW90OyIgCisgICAgPHJlcGxhY2UgdG9rZW49ImR1bXBNZXNzYWdlcz0mcXVvdDtmYWxzZSZxdW90OyIKICAgICAgICAgICAgICAgICAgdmFsdWU9ImR1bXBNZXNzYWdlcz0mcXVvdDt0cnVlJnF1b3Q7IgotCQkgZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL3dzcy1zZXJ2ZXItY29uZmlnLTIuMC54bWwiLz4KLQk8cmVwbGFjZSB0b2tlbj0iZHVtcE1lc3NhZ2VzPSZxdW90O2ZhbHNlJnF1b3Q7IiAKKyAgICAgICAgIGZpbGU9IiR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy93c3Mtc2VydmVyLWNvbmZpZy0yLjAueG1sIi8+CisgICAgPHJlcGxhY2UgdG9rZW49ImR1bXBNZXNzYWdlcz0mcXVvdDtmYWxzZSZxdW90OyIKICAgICAgICAgICAgICAgICAgdmFsdWU9ImR1bXBNZXNzYWdlcz0mcXVvdDt0cnVlJnF1b3Q7IgotCQkgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvYXBwY2xpZW50L3dzcy1jbGllbnQtY29uZmlnLTIuMC54bWwiLz4KLQk8cmVwbGFjZSB0b2tlbj0iJnF1b3Q7V0FSTklORyZxdW90OyIgCisgICAgICAgICBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBjbGllbnQvd3NzLWNsaWVudC1jb25maWctMi4wLnhtbCIvPgorICAgIDxyZXBsYWNlIHRva2VuPSImcXVvdDtXQVJOSU5HJnF1b3Q7IgogICAgICAgICAgICAgICAgICB2YWx1ZT0iJnF1b3Q7SU5GTyZxdW90OyIKLQkJIGZpbGU9IiR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9nbGFzc2Zpc2gtYWNjLnhtbCIvPgorICAgICAgICAgZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sIi8+CiAgPC90YXJnZXQ+CiAKICA8dGFyZ2V0IG5hbWU9ImRpc2FibGUtd3NzLWxvZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxyZXBsYWNlIHRva2VuPSJkdW1wTWVzc2FnZXM9JnF1b3Q7dHJ1ZSZxdW90OyIgCisgICAgPHJlcGxhY2UgdG9rZW49ImR1bXBNZXNzYWdlcz0mcXVvdDt0cnVlJnF1b3Q7IgogICAgICAgICAgICAgICAgICB2YWx1ZT0iZHVtcE1lc3NhZ2VzPSZxdW90O2ZhbHNlJnF1b3Q7IgotCQkgZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL3dzcy1zZXJ2ZXItY29uZmlnLTIuMC54bWwiLz4KLQk8cmVwbGFjZSB0b2tlbj0iZHVtcE1lc3NhZ2VzPSZxdW90O3RydWUmcXVvdDsiIAorICAgICAgICAgZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL3dzcy1zZXJ2ZXItY29uZmlnLTIuMC54bWwiLz4KKyAgICA8cmVwbGFjZSB0b2tlbj0iZHVtcE1lc3NhZ2VzPSZxdW90O3RydWUmcXVvdDsiCiAgICAgICAgICAgICAgICAgIHZhbHVlPSJkdW1wTWVzc2FnZXM9JnF1b3Q7ZmFsc2UmcXVvdDsiCi0JCSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBjbGllbnQvd3NzLWNsaWVudC1jb25maWctMi4wLnhtbCIvPgotCTxyZXBsYWNlIHRva2VuPSImcXVvdDtJTkZPJnF1b3Q7IiAKKyAgICAgICAgIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcGNsaWVudC93c3MtY2xpZW50LWNvbmZpZy0yLjAueG1sIi8+CisgICAgPHJlcGxhY2UgdG9rZW49IiZxdW90O0lORk8mcXVvdDsiCiAgICAgICAgICAgICAgICAgIHZhbHVlPSImcXVvdDtXQVJOSU5HJnF1b3Q7IgotCQkgZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sIi8+CisgICAgICAgICBmaWxlPSIke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwiLz4KICA8L3RhcmdldD4KIAogIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXVzZXJzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC0zMDcsNiArMzA3LDYgQEAKICAgIDwvYW50Y2FsbD4KICA8L3RhcmdldD4KIAotIAorCiA8L3Byb2plY3Q+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9jb25maWcvd3NzLWNsaWVudC1jb25maWcueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL2NvbmZpZy93c3MtY2xpZW50LWNvbmZpZy54bWwKaW5kZXggZGMyNWI2NS4uMWQ3MGFkNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL2NvbmZpZy93c3MtY2xpZW50LWNvbmZpZy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL2NvbmZpZy93c3MtY2xpZW50LWNvbmZpZy54bWwKQEAgLTE2LDIwICsxNiwyMCBAQAogCiAtLT4KIAotPHh3c3M6U2VjdXJpdHlDb25maWd1cmF0aW9uIHhtbG5zOnh3c3M9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL3h3c3MvY29uZmlnIiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wTWVzc2FnZXM9InRydWUiPiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorPHh3c3M6U2VjdXJpdHlDb25maWd1cmF0aW9uIHhtbG5zOnh3c3M9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL3h3c3MvY29uZmlnIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBNZXNzYWdlcz0idHJ1ZSI+CiAgICAgPHh3c3M6VGltZXN0YW1wLz4KLSAgICA8eHdzczpSZXF1aXJlVXNlcm5hbWVUb2tlbiBub25jZVJlcXVpcmVkPSJmYWxzZSIgcGFzc3dvcmREaWdlc3RSZXF1aXJlZD0iZmFsc2UiLz4gICAKKyAgICA8eHdzczpSZXF1aXJlVXNlcm5hbWVUb2tlbiBub25jZVJlcXVpcmVkPSJmYWxzZSIgcGFzc3dvcmREaWdlc3RSZXF1aXJlZD0iZmFsc2UiLz4KICAgICA8eHdzczpSZXF1aXJlRW5jcnlwdGlvbj4KICAgICAgICAgPHh3c3M6VGFyZ2V0IHR5cGU9InFuYW1lIj57aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS99Qm9keTwveHdzczpUYXJnZXQ+CiAgICAgPC94d3NzOlJlcXVpcmVFbmNyeXB0aW9uPgogICAgIDx4d3NzOlJlcXVpcmVTaWduYXR1cmU+CiAgICAgICAgIDx4d3NzOlRhcmdldCB0eXBlPSJxbmFtZSI+e2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvfUJvZHk8L3h3c3M6VGFyZ2V0PgotICAgIDwveHdzczpSZXF1aXJlU2lnbmF0dXJlPiAgICAgCisgICAgPC94d3NzOlJlcXVpcmVTaWduYXR1cmU+CiAgICAgPHh3c3M6RW5jcnlwdCBrZXlFbmNyeXB0aW9uQWxnb3JpdGhtPSJSU0FfdjFkb3Q1Ij4KICAgICAgICAgPHh3c3M6WDUwOVRva2VuIGNlcnRpZmljYXRlQWxpYXM9InMxYXMiLz4KLQk8eHdzczpUYXJnZXQgdHlwZT0idXJpIj4jdXNlcm5hbWUtdG9rZW48L3h3c3M6VGFyZ2V0PgotICAgIDwveHdzczpFbmNyeXB0PiAgICAKKyAgICA8eHdzczpUYXJnZXQgdHlwZT0idXJpIj4jdXNlcm5hbWUtdG9rZW48L3h3c3M6VGFyZ2V0PgorICAgIDwveHdzczpFbmNyeXB0PgogICAgIDx4d3NzOlNpZ24+CiAgICAgICAgIDx4d3NzOlg1MDlUb2tlbiBjZXJ0aWZpY2F0ZUFsaWFzPSJzMWFzIi8+CiAgICAgPC94d3NzOlNpZ24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3MvY29uZmlnL3dzcy1zZXJ2ZXItY29uZmlnLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9jb25maWcvd3NzLXNlcnZlci1jb25maWcueG1sCmluZGV4IDc2MmEwMmMuLjg4MmJhOGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9jb25maWcvd3NzLXNlcnZlci1jb25maWcueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9jb25maWcvd3NzLXNlcnZlci1jb25maWcueG1sCkBAIC0xNiw3ICsxNiw3IEBACiAKIC0tPgogCi08eHdzczpTZWN1cml0eUNvbmZpZ3VyYXRpb24geG1sbnM6eHdzcz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMveHdzcy9jb25maWciIAorPHh3c3M6U2VjdXJpdHlDb25maWd1cmF0aW9uIHhtbG5zOnh3c3M9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL3h3c3MvY29uZmlnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBNZXNzYWdlcz0iZmFsc2UiPgogICAgIDx4d3NzOlRpbWVzdGFtcC8+CiAgICAgPHh3c3M6UmVxdWlyZUVuY3J5cHRpb24+CkBAIC0yNCwxMSArMjQsMTEgQEAKICAgICA8L3h3c3M6UmVxdWlyZUVuY3J5cHRpb24+CiAgICAgPHh3c3M6UmVxdWlyZVNpZ25hdHVyZT4KICAgICAgICAgPHh3c3M6VGFyZ2V0IHR5cGU9InFuYW1lIj57aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS99Qm9keTwveHdzczpUYXJnZXQ+Ci0gICAgPC94d3NzOlJlcXVpcmVTaWduYXR1cmU+ICAgICAKLSAgICA8eHdzczpSZXF1aXJlVXNlcm5hbWVUb2tlbiBub25jZVJlcXVpcmVkPSJmYWxzZSIgcGFzc3dvcmREaWdlc3RSZXF1aXJlZD0iZmFsc2UiLz4gICAgICAKKyAgICA8L3h3c3M6UmVxdWlyZVNpZ25hdHVyZT4KKyAgICA8eHdzczpSZXF1aXJlVXNlcm5hbWVUb2tlbiBub25jZVJlcXVpcmVkPSJmYWxzZSIgcGFzc3dvcmREaWdlc3RSZXF1aXJlZD0iZmFsc2UiLz4KICAgICA8eHdzczpFbmNyeXB0IGtleUVuY3J5cHRpb25BbGdvcml0aG09IlJTQV92MWRvdDUiPgogICAgICAgICA8eHdzczpYNTA5VG9rZW4gY2VydGlmaWNhdGVBbGlhcz0iczFhcyIvPgotICAgIDwveHdzczpFbmNyeXB0PiAgICAKKyAgICA8L3h3c3M6RW5jcnlwdD4KICAgICA8eHdzczpTaWduPgogICAgICAgICA8eHdzczpYNTA5VG9rZW4gY2VydGlmaWNhdGVBbGlhcz0iczFhcyIvPgogICAgIDwveHdzczpTaWduPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL2VqYndzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3MvZWpid3MvYnVpbGQucHJvcGVydGllcwppbmRleCBhZTAyYmZmLi5lZjRiMTZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3MvZWpid3MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3MvZWpid3MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjIgKzE1LDIyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3c3MiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWVqYnRheGNhbCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZWpidGF4Y2FsIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9ImNvbS5zdW4uYXBwc2Vydi5zcWUuc2VjdXJpdHkud3NzLmVqYndzLnRheGNhbC5jbGllbnQuVGF4Q2FsQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9ImNvbS5zdW4uYXBwc2Vydi5zcWUuc2VjdXJpdHkud3NzLmVqYndzLnRheGNhbC5jbGllbnQuVGF4Q2FsQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDwhLS1wcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8tLT4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9IndzZGwtZmlsZSIgdmFsdWU9IndzZGwvVGF4Q2FsRWpiU2VydmljZS53c2RsIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3MvZWpid3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL2VqYndzL2J1aWxkLnhtbAppbmRleCAwZmFlYTQ5Li5hMWFmMDE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3MvZWpid3MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9lamJ3cy9idWlsZC54bWwKQEAgLTM0LDIwICszNCwyMCBAQAogICAgICZ0ZXN0cHJvcGVydGllczsKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJkaXNwbGF5LWhlYWRlciwgY2xlYW4sIGJ1aWxkLCBkZXBsb3ksIHJ1biwgdW5kZXBsb3kiLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtZGVwbG95LXJ1biIgZGVwZW5kcz0iZGlzcGxheS1oZWFkZXIsIGNsZWFuLCBidWlsZCwgZGVwbG95LCBydW4iLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGlzcGxheS1oZWFkZXIiPgotICAgICAgPGVjaG8gbWVzc2FnZT0iLS0+UnVubmluZyAke2FudC5wcm9qZWN0Lm5hbWV9IGJhdCB0ZXN0cyBmcm9tICR7YmFzZWRpcn0gLi4uIi8+ICAgICAgICAgIAorICAgICAgPGVjaG8gbWVzc2FnZT0iLS0+UnVubmluZyAke2FudC5wcm9qZWN0Lm5hbWV9IGJhdCB0ZXN0cyBmcm9tICR7YmFzZWRpcn0gLi4uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0IiBkZXBlbmRzPSJjbGVhbiwgYnVpbGQsIGRlcGxveSwgcnVuLCB1bmRlcGxveSIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCi0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQtY29tbW9uLGNsZWFuLWNvbW1vbiwgZ2VuZXJhdGUtYXJ0aWZhY3RzIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01OCwxOCArNTgsMTggQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZ2VuZXJhdGUtYXJ0aWZhY3RzIj4KLQk8YW50Y2FsbCB0YXJnZXQ9ImltcG9ydC13c2RsIj4KLQkgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmcuZmlsZSIKLQkJdmFsdWU9IiR7ZWpiLW1hcHBpbmcueG1sfSIvPgotCSAgICA8cGFyYW0gbmFtZT0iY29uZmlnLXdzZGwuZmlsZSIKLQkJdmFsdWU9ImNvbmZpZy9jb25maWctZWpiLnhtbCIvPgotCTwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9ImltcG9ydC13c2RsIj4KLQkgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmcuZmlsZSIKLQkJdmFsdWU9IiR7Y2xpZW50LW1hcHBpbmcueG1sfSIvPgotCSAgICA8cGFyYW0gbmFtZT0iY29uZmlnLXdzZGwuZmlsZSIKLQkJdmFsdWU9ImNvbmZpZy9jb25maWctY2xpZW50LnhtbCIvPgotCTwvYW50Y2FsbD4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImltcG9ydC13c2RsIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmcuZmlsZSIKKyAgICAgICAgdmFsdWU9IiR7ZWpiLW1hcHBpbmcueG1sfSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0iY29uZmlnLXdzZGwuZmlsZSIKKyAgICAgICAgdmFsdWU9ImNvbmZpZy9jb25maWctZWpiLnhtbCIvPgorICAgIDwvYW50Y2FsbD4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImltcG9ydC13c2RsIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmcuZmlsZSIKKyAgICAgICAgdmFsdWU9IiR7Y2xpZW50LW1hcHBpbmcueG1sfSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0iY29uZmlnLXdzZGwuZmlsZSIKKyAgICAgICAgdmFsdWU9ImNvbmZpZy9jb25maWctY2xpZW50LnhtbCIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0id3MtcGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KQEAgLTEzMSwxMyArMTMxLDEzIEBACiAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImluaXQtY29tbW9uLGNvbXBpbGUiPgotCTxhbnRjYWxsIHRhcmdldD0id3MtcGFja2FnZS1lamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgIDxhbnRjYWxsIHRhcmdldD0id3MtcGFja2FnZS1lamItamFyLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi93c3MvZWpid3MvdGF4Y2FsLyouY2xhc3MiIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamIuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIvPgotCTwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9IndzLXBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+CisgICAgPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0id3MtcGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL3dzcy9lamJ3cy90YXhjYWwvY2xpZW50LyouY2xhc3MiIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIgpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uLCByZWNvbmZpZy1jb21tb24iPgpAQCAtMTYwLDEyICsxNjAsMTIgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50LXNzbC13aW4iIGRlcGVuZHM9InNldC1hcHBzZXJ2ZXItdmVyc2lvbiIgaWY9ImlzV2luZG93cyI+Ci0gICAgIAk8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1zc2wtcGUtd2luIi8+Ci0gICAgIAk8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1zc2wtZWUtd2luIi8+CisgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1zc2wtcGUtd2luIi8+CisgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1zc2wtZWUtd2luIi8+CiAgICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50LXNzbC11bml4IiBkZXBlbmRzPSJzZXQtYXBwc2VydmVyLXZlcnNpb24iIGlmPSJpc1VuaXgiPgotICAgICAJPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtc3NsLXBlLXVuaXgiLz4KLSAgICAgCTxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LXNzbC1lZS11bml4Ii8+CisgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1zc2wtcGUtdW5peCIvPgorICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtc3NsLWVlLXVuaXgiLz4KICAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudC1zc2wtcGUtd2luIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgdW5sZXNzPSJpc0VFIj4KQEAgLTIxOSw3ICsyMTksNyBAQAogICAgICAgICA8cGFyYW0gbmFtZT0idGVzdC5kZXNjcmlwdGlvbiIgdmFsdWU9IiR7dGVzdC5kZXNjcmlwdGlvbn0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3QuY291bnQiIHZhbHVlPSIyIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAKKwogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQtc3NsLXBlLXVuaXgiIGRlcGVuZHM9ImluaXQtY29tbW9uIiB1bmxlc3M9ImlzRUUiPgpAQCAtMjczLDIxICsyNzMsMjEgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3QuZGVzY3JpcHRpb24iIHZhbHVlPSIke3Rlc3QuZGVzY3JpcHRpb259Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0LmNvdW50IiB2YWx1ZT0iMiIvPgogICAgICAgPC9hbnRjYWxsPgotICAgCisKICAgICA8L3RhcmdldD4KIAogCi0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIAotICA8IS0tIAotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAorICA8IS0tCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgVXNlciBEZWZpbmVkIHNwZWNpZmljIHRhcmdldHMKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAtLT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9lamJ3cy9jbGllbnQvVGF4Q2FsQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3MvZWpid3MvY2xpZW50L1RheENhbENsaWVudC5qYXZhCmluZGV4IDVhMmUzZmUuLjc3OWZjMDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9lamJ3cy9jbGllbnQvVGF4Q2FsQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL2VqYndzL2NsaWVudC9UYXhDYWxDbGllbnQuamF2YQpAQCAtMjQsMjMgKzI0LDIzIEBACiAgKiBUaGlzIGlzIEFwcENsaWVudCBwcm9ncmFtIHRoYXQgYWNjZXNzIFN0YXRlVGF4RUpCIGFuZCBGZWRUYXggRUpCIFdlYnNlcnZpY2VzLgogICogSXQgZXhwZWN0cyBTdGF0ZVRheCB3ZWJzZXJ2aWNlIGVuZHBvaW50IGFuZCBGZWRUYXggZW5kcG9pbnQgVVJMcy4KICAqIFRoaXMgY2xpZW50IGlzIGFjY2Vzc2VkIGluIHRoZSBhbnQgcnVuIHRhcmdldCBhZnRlciBjb25maWd1cmluZyB0aGUgd2Vic2VydmljZXMKLSAqIG1lc3NhZ2Ugc2VjdXJpdHkgYXQgc3lzdGVtIGxldmVsIG9yIGFwcGxldmVsLiAgCisgKiBtZXNzYWdlIHNlY3VyaXR5IGF0IHN5c3RlbSBsZXZlbCBvciBhcHBsZXZlbC4KICAqCiAgKiBAdmVyc2lvbiAxLjEgIDAzIE1heSAyMDA0CiAgKiBAYXV0aG9yIEphZ2FkZXNoIE11bnRhCiAgKi8KIHB1YmxpYyBjbGFzcyBUYXhDYWxDbGllbnQgewogICAgIC8qCi0gICAgICogVGVzdHMgdGhlIGdldFN0YXRlVGF4IGFuZCBnZXRGZWRUYXggd2l0aCBleHBlY3RlZCB2YWx1ZXMuIElmIHZhbHVlIAorICAgICAqIFRlc3RzIHRoZSBnZXRTdGF0ZVRheCBhbmQgZ2V0RmVkVGF4IHdpdGggZXhwZWN0ZWQgdmFsdWVzLiBJZiB2YWx1ZQogICAgICAqIG1hdGNoZWQsdGhlbiB0ZXN0IFBBU1NFRCBlbHNlIEZBSUxFRC4KICAgICAgKi8KLSAJcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CisgICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwogICAgICAgICAgICAgLy8gSjJFRSBzaW1wbGUgcmVwb3J0ZXIgZm9yIGxvZ2dpbmcgdGhlIHRlc3Qgc3RhdHVzLgotCXByaXZhdGUgc3RhdGljIFN0cmluZyBzdGF0ZVRheEVuZHBvaW50ID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZmVkVGF4RW5kcG9pbnQgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3VpdGUgPSAiU2VjdXJpdHktd3NzLWVqYndzLSI7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RDYXNlID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBUYXhDYWxFamJTZXJ2aWNlIHRheENhbFNlcnZpY2UgPSBudWxsOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBzdGF0ZVRheEVuZHBvaW50ID0gbnVsbDsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZmVkVGF4RW5kcG9pbnQgPSBudWxsOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3VpdGUgPSAiU2VjdXJpdHktd3NzLWVqYndzLSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RDYXNlID0gbnVsbDsKKyAgICBwcml2YXRlIHN0YXRpYyBUYXhDYWxFamJTZXJ2aWNlIHRheENhbFNlcnZpY2UgPSBudWxsOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKIApAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGhpcyBpcyB0byB0ZXN0IG1lc3NhZ2Ugc2VjdXJpdHkgd2l0aCBzaWduIG9yIHVzZXJuYW1lIHRva2VuIG9uIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHdpdGggc2lnbmluZyB1c2luZyBlamIgYmFzZWQgd2Vic2VydmljZXMuIik7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgVGF4Q2FsQ2xpZW50IGNsaWVudCA9IG5ldyBUYXhDYWxDbGllbnQoKTsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIHRheENhbFNlcnZpY2UgPSAoVGF4Q2FsRWpiU2VydmljZSkKQEAgLTY5LDcgKzY5LDcgQEAKIAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0U3VpdGUpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNhbGxTdGF0ZVRheFNlcnZpY2UoKSB7CiAgICAgICAgIGRvdWJsZSBpbmNvbWUgPSA4NTAwMC4wMDsKICAgICAgICAgZG91YmxlIGRlZHVjdGlvbnMgPSA1MDAwLjAwOwpAQCAtOTUsNyArOTUsNyBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGUgVGF4Q2FsRWpiV2Vic2VydmljZSBjbGllbnQgZmFpbGVkIik7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIm1lc2dzaWduLVN0YXRlVGF4UG9ydCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBjYWxsRmVkVGF4U2VydmljZSgpIHsKQEAgLTEyMiw3ICsxMjIsNyBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmVkIFRheENhbEVqYldlYlNlcnZpY2UgY2xpZW50IGZhaWxlZCIpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICJ1c2VybmFtZS1GZWRUYXhQb3J0Iiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL2VqYndzL2NvbmZpZy9jb25maWctY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9lamJ3cy9jb25maWcvY29uZmlnLWNsaWVudC54bWwKaW5kZXggODhiZTMyMi4uNWZiNDQ0MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL2VqYndzL2NvbmZpZy9jb25maWctY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3MvZWpid3MvY29uZmlnL2NvbmZpZy1jbGllbnQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249IndzZGwvVGF4Q2FsRWpiU2VydmljZS53c2RsIgogICAgICAgcGFja2FnZU5hbWU9ImNvbS5zdW4uYXBwc2Vydi5zcWUuc2VjdXJpdHkud3NzLmVqYndzLnRheGNhbC5jbGllbnQiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9lamJ3cy9jb25maWcvY29uZmlnLWVqYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3MvZWpid3MvY29uZmlnL2NvbmZpZy1lamIueG1sCmluZGV4IDE5MjI4NmUuLjkwYTBlMjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9lamJ3cy9jb25maWcvY29uZmlnLWVqYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL2VqYndzL2NvbmZpZy9jb25maWctZWpiLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJ3c2RsL1RheENhbEVqYlNlcnZpY2Uud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJjb20uc3VuLmFwcHNlcnYuc3FlLnNlY3VyaXR5Lndzcy5lamJ3cy50YXhjYWwiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9lamJ3cy9jb25maWcvY29uZmlnLXNjbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL2VqYndzL2NvbmZpZy9jb25maWctc2NsaWVudC54bWwKaW5kZXggMTkyMjg2ZS4uOTBhMGUyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL2VqYndzL2NvbmZpZy9jb25maWctc2NsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL2VqYndzL2NvbmZpZy9jb25maWctc2NsaWVudC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHdzZGwgCisgIDx3c2RsCiAgICAgICBsb2NhdGlvbj0id3NkbC9UYXhDYWxFamJTZXJ2aWNlLndzZGwiCiAgICAgICBwYWNrYWdlTmFtZT0iY29tLnN1bi5hcHBzZXJ2LnNxZS5zZWN1cml0eS53c3MuZWpid3MudGF4Y2FsIi8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3MvZWpid3MvY29uZmlnL2NvbmZpZy1zZWkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL2VqYndzL2NvbmZpZy9jb25maWctc2VpLnhtbAppbmRleCA0NGNlYjcxLi5hNWE3ZDg2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3MvZWpid3MvY29uZmlnL2NvbmZpZy1zZWkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9lamJ3cy9jb25maWcvY29uZmlnLXNlaS54bWwKQEAgLTE4LDE2ICsxOCwxNiBAQAogLS0+CiAKIDxjb25maWd1cmF0aW9uCi0JeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLQk8c2VydmljZSBuYW1lPSJUYXhDYWxFamJTZXJ2aWNlIgotCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90YXgub3JnL3dzZGwiCi0JCXR5cGVOYW1lc3BhY2U9Imh0dHA6Ly90YXgub3JnL3R5cGVzIgotCQlwYWNrYWdlTmFtZT0iY29tLnN1bi5hcHBzZXJ2LnNxZS5zZWN1cml0eS53c3MuZWpid3MudGF4Y2FsIj4KLQkJPGludGVyZmFjZSBuYW1lPSJjb20uc3VuLmFwcHNlcnYuc3FlLnNlY3VyaXR5Lndzcy5lamJ3cy50YXhjYWwuRmVkVGF4SUYiCi0JCQlzZXJ2YW50TmFtZT0iY29tLnN1bi5hcHBzZXJ2LnNxZS5zZWN1cml0eS53c3MuZWpid3MudGF4Y2FsLkZlZFRheEVqYiIvPgotCQk8aW50ZXJmYWNlIG5hbWU9ImNvbS5zdW4uYXBwc2Vydi5zcWUuc2VjdXJpdHkud3NzLmVqYndzLnRheGNhbC5TdGF0ZVRheElGIgotCQkJc2VydmFudE5hbWU9ImNvbS5zdW4uYXBwc2Vydi5zcWUuc2VjdXJpdHkud3NzLmVqYndzLnRheGNhbC5TdGF0ZVRheEVqYiI+Ci0JCTwvaW50ZXJmYWNlPgotCTwvc2VydmljZT4KKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgorICAgIDxzZXJ2aWNlIG5hbWU9IlRheENhbEVqYlNlcnZpY2UiCisgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RheC5vcmcvd3NkbCIKKyAgICAgICAgdHlwZU5hbWVzcGFjZT0iaHR0cDovL3RheC5vcmcvdHlwZXMiCisgICAgICAgIHBhY2thZ2VOYW1lPSJjb20uc3VuLmFwcHNlcnYuc3FlLnNlY3VyaXR5Lndzcy5lamJ3cy50YXhjYWwiPgorICAgICAgICA8aW50ZXJmYWNlIG5hbWU9ImNvbS5zdW4uYXBwc2Vydi5zcWUuc2VjdXJpdHkud3NzLmVqYndzLnRheGNhbC5GZWRUYXhJRiIKKyAgICAgICAgICAgIHNlcnZhbnROYW1lPSJjb20uc3VuLmFwcHNlcnYuc3FlLnNlY3VyaXR5Lndzcy5lamJ3cy50YXhjYWwuRmVkVGF4RWpiIi8+CisgICAgICAgIDxpbnRlcmZhY2UgbmFtZT0iY29tLnN1bi5hcHBzZXJ2LnNxZS5zZWN1cml0eS53c3MuZWpid3MudGF4Y2FsLlN0YXRlVGF4SUYiCisgICAgICAgICAgICBzZXJ2YW50TmFtZT0iY29tLnN1bi5hcHBzZXJ2LnNxZS5zZWN1cml0eS53c3MuZWpid3MudGF4Y2FsLlN0YXRlVGF4RWpiIj4KKyAgICAgICAgPC9pbnRlcmZhY2U+CisgICAgPC9zZXJ2aWNlPgogPC9jb25maWd1cmF0aW9uPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3MvZWpid3MvZWpiL0ZlZFRheEVqYi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL2VqYndzL2VqYi9GZWRUYXhFamIuamF2YQppbmRleCAyNWI2ZjA3Li42YWU3ZGZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3MvZWpid3MvZWpiL0ZlZFRheEVqYi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9lamJ3cy9lamIvRmVkVGF4RWpiLmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZlZFRheEVqYjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGZWRUYXhFamI6OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIC8vIEJ1c2luZXNzIHNlcnZpY2UgbWV0aG9kIGltcGxlbWVudGF0aW9uLgpAQCAtNTIsNyArNTIsNyBAQAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7CiAgICAgICAgIHRoaXMuc2MgPSBzYzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICB9CiAKQEAgLTYxLDUgKzYxLDUgQEAKIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9lamJ3cy9lamIvRmVkVGF4SUYuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9lamJ3cy9lamIvRmVkVGF4SUYuamF2YQppbmRleCAzYjVmMDRjLi5jZmIzMjNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3MvZWpid3MvZWpiL0ZlZFRheElGLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL2VqYndzL2VqYi9GZWRUYXhJRi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIEludGVyZmFjZSB0byBkZWNsYXJlIG9uZSBidXNpbmVzcyBtZXRob2QgLSBnZXRGZWRUYXggbWV0aG9kLgogICAgICAgICAgKi8KLQlwdWJsaWMgZG91YmxlIGdldEZlZFRheChkb3VibGUgaW5jb21lLCBkb3VibGUgZGVkdWN0aW9ucykKKyAgICBwdWJsaWMgZG91YmxlIGdldEZlZFRheChkb3VibGUgaW5jb21lLCBkb3VibGUgZGVkdWN0aW9ucykKICAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9lamJ3cy9lamIvU3RhdGVUYXhFamIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9lamJ3cy9lamIvU3RhdGVUYXhFamIuamF2YQppbmRleCA2MDFiOGI1Li5kNjdlMjFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3MvZWpid3MvZWpiL1N0YXRlVGF4RWpiLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL2VqYndzL2VqYi9TdGF0ZVRheEVqYi5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5zdW4uYXBwc2Vydi5zcWUuc2VjdXJpdHkud3NzLmVqYndzLnRheGNhbDsKIAogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTM3LDEyICszNywxMiBAQAogICAgICAqLwogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2M7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIFNUQVRFX1RBWF9SQVRFID0gMC4zOwotICAgIAorCiAgICAgcHVibGljIFN0YXRlVGF4RWpiKCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVUYXhFamI6OmVqYkNyZWF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVUYXhFamI6OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIC8vIEJ1c2luZXNzIG1ldGhvZCBpbXBsZW1lbnRhdGlvbi4KQEAgLTUwLDE2ICs1MCwxNiBAQAogICAgICAgICByZXR1cm4gKChpbmNvbWUgLSAgZGVkdWN0aW9ucykgKiBTVEFURV9UQVhfUkFURSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsJCisgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKICAgICAgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3MvZWpid3MvZWpiL1N0YXRlVGF4SUYuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9lamJ3cy9lamIvU3RhdGVUYXhJRi5qYXZhCmluZGV4IDRkMGIwYjIuLmJiMzE5OWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9lamJ3cy9lamIvU3RhdGVUYXhJRi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9lamJ3cy9lamIvU3RhdGVUYXhJRi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIEludGVyZmFjZSB0byBkZWNsYXJlIG9uZSBidXNpbmVzcyBtZXRob2QgLSBnZXRGZWRUYXggbWV0aG9kLgogICAgICAgICAgKi8KLQlwdWJsaWMgZG91YmxlIGdldFN0YXRlVGF4KGRvdWJsZSBpbmNvbWUsIGRvdWJsZSBkZWR1Y3Rpb25zKQorICAgIHB1YmxpYyBkb3VibGUgZ2V0U3RhdGVUYXgoZG91YmxlIGluY29tZSwgZG91YmxlIGRlZHVjdGlvbnMpCiAgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3Mvc2VydmxldGpheHdzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3Mvc2VydmxldGpheHdzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjFkZTJhMy4uNjliNjcwYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXRqYXh3cy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9zZXJ2bGV0amF4d3MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjAgKzE1LDIwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3c3MiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXRheCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdGF4Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9ImNvbS5zdW4uYXBwc2Vydi5zcWUuc2VjdXJpdHkud3NzLmFubm90YXRpb25zLmNsaWVudC5UYXhDYWxDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iY29tLnN1bi5hcHBzZXJ2LnNxZS5zZWN1cml0eS53c3MuYW5ub3RhdGlvbnMuY2xpZW50LlRheENhbENsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8IS0tcHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvLS0+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0id3NkbC1maWxlIiB2YWx1ZT0id3NkbC9UYXhTZXJ2aWNlLndzZGwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9zZXJ2bGV0amF4d3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXRqYXh3cy9idWlsZC54bWwKaW5kZXggNGE2ZWIwNy4uM2EyMmEyYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXRqYXh3cy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXRqYXh3cy9idWlsZC54bWwKQEAgLTM1LDEzICszNSwxMyBAQAogICAgICZ0ZXN0cHJvcGVydGllczsKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJkaXNwbGF5LWhlYWRlciwgY2xlYW4sIGJ1aWxkLCBkZXBsb3ksIGJ1aWxkLWNsaWVudCxydW4sdW5kZXBsb3kiLz4KLSAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWRlcGxveS1ydW4iIGRlcGVuZHM9ImRpc3BsYXktaGVhZGVyLCBjbGVhbiwgYnVpbGQsIGRlcGxveSwgYnVpbGQtY2xpZW50LCBydW4iLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGlzcGxheS1oZWFkZXIiPgotICAgICAgPGVjaG8gbWVzc2FnZT0iLS0+UnVubmluZyAke2FudC5wcm9qZWN0Lm5hbWV9IHRlc3RzIGZyb20gJHtiYXNlZGlyfSAuLi4iLz4gICAgICAgICAgCisgICAgICA8ZWNobyBtZXNzYWdlPSItLT5SdW5uaW5nICR7YW50LnByb2plY3QubmFtZX0gdGVzdHMgZnJvbSAke2Jhc2VkaXJ9IC4uLiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdCIgZGVwZW5kcz0iY2xlYW4sIGJ1aWxkLCBkZXBsb3ksIGJ1aWxkLWNsaWVudCwgcnVuLCB1bmRlcGxveSIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNTUsOCArNTUsOCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICA8dGFyZ2V0IG5hbWU9InVwZGF0ZS13c2RsLWxvY2F0aW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPGNvcHkgZmlsZT0iY2xpZW50L1RheENhbENsaWVudC5qYXZhLnRlbXBsYXRlIiB0b2ZpbGU9ImNsaWVudC9UYXhDYWxDbGllbnQuamF2YSIgb3ZlcndyaXRlPSJ0cnVlIi8+Ci0JPHJlcGxhY2UgZmlsZT0iY2xpZW50L1RheENhbENsaWVudC5qYXZhIiB0b2tlbj0ibG9jYWxob3N0OjgwODAiIHZhbHVlPSIke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9Ii8+CisgICAgPGNvcHkgZmlsZT0iY2xpZW50L1RheENhbENsaWVudC5qYXZhLnRlbXBsYXRlIiB0b2ZpbGU9ImNsaWVudC9UYXhDYWxDbGllbnQuamF2YSIgb3ZlcndyaXRlPSJ0cnVlIi8+CisgICAgPHJlcGxhY2UgZmlsZT0iY2xpZW50L1RheENhbENsaWVudC5qYXZhIiB0b2tlbj0ibG9jYWxob3N0OjgwODAiIHZhbHVlPSIke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9Ii8+CiAgICA8L3RhcmdldD4KIAogICAgPHRhcmdldCBuYW1lPSJjb21waWxlLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24sY2xlYW4tY29tbW9uIj4KQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCi0gICAgCisKICAgIDwhLS0gR2VuZXJhdGlvbiBvZiBzZXJ2aWNlIHdzZGwgZmlsZS4KICAgICAgIFJ1biB0aGlzIHRhcmdldCBpbiBjYXNlIHlvdSBuZWVkIHRvIHVwZGF0ZSB0aGUgd3NkbCBmaWxlCiAgICAgICAgIGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBlbmRwb2ludC4KQEAgLTkxLDI3ICs5MSwyNyBAQAogICAgICAgICAgICAgPGFyZyBsaW5lPSJ3c2RsL1RheFNlcnZpY2Uud3NkbCIvPgogICAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgIDx0YXJnZXQgbmFtZT0iZ2VuZXJhdGUtY2xpZW50LWFydGlmYWN0cyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke1dTSU1QT1JUfSI+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii1rZWVwICIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItZCAke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS8ke2FwcG5hbWV9LXdlYi93c3MvVGF4U2VydmljZT93c2RsIi8+CiAgICAgICAgIDwvZXhlYz4KLSAgICA8L3RhcmdldD4gICAgCisgICAgPC90YXJnZXQ+CiAKICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtd2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0idHJ1ZSIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovd3NzL2Fubm90YXRpb25zLyouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovd3NzL2Fubm90YXRpb25zLyouY2xhc3MiIC8+Ci0JPC9hbnRjYWxsPiAgIAorICAgIDwvYW50Y2FsbD4KICAgIDwvdGFyZ2V0PgotICAgCisKICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgY29tcGlsZS1jbGllbnQiPgotICAgCTxhbnRjYWxsIHRhcmdldD0id3MtcGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndzLXBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi90YXh3cy8qLmNsYXNzICoqL3dzcy9hbm5vdGF0aW9ucy9jbGllbnQvKi5jbGFzcyIgLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiCkBAIC0xMjAsNyArMTIwLDcgQEAKICAgICAgICAgICAgICAgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ3cy1wYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHthcHBjbGllbnQuamFyfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CkBAIC0xNDUsMTEgKzE0NSwxMSBAQAogICAgICAgICAgICAgICAgIDwvbWV0YWluZj4KICAgICAgICAgPC9qYXI+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gICAgPC90YXJnZXQ+ICAgIAotICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJpbml0LWNvbW1vbixjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC13YXIiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS13YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiI+CkBAIC0xNzMsMjcgKzE3MywyNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQtbm9zc2wiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9ImVuZHBvaW50LXVybCIgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJlbmRwb2ludC11cmwiCiAgICAgICAgICAgICB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vJHthcHBuYW1lfS13ZWIvd3NzL1RheFNlcnZpY2UiLz4KICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+Ci0JPGVudiBrZXk9IkFQUENQQVRIIiB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KLQk8YXJnIGxpbmU9Ii1jbGllbnQiLz4KKyAgICA8ZW52IGtleT0iQVBQQ1BBVEgiIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIvPgorICAgIDxhcmcgbGluZT0iLWNsaWVudCIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KLQk8YXJnIGxpbmU9IiR7ZW5kcG9pbnQtdXJsfSIvPgorICAgIDxhcmcgbGluZT0iJHtlbmRwb2ludC11cmx9Ii8+CiAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudC1zc2wiIGRlcGVuZHM9InNldC1hcHBzZXJ2ZXItdmVyc2lvbiI+Ci0gICAgIAk8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1zc2wtcGUiLz4KLSAgICAgCTxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LXNzbC1lZSIvPgorICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtc3NsLXBlIi8+CisgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1zc2wtZWUiLz4KICAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudC1sb2NhbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIGFwcGNsaWVudCBhdCAke2Jhc2VkaXJ9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZW5kcG9pbnQtdXJsIiAKKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJlbmRwb2ludC11cmwiCiAgICAgICAgICAgICB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vJHthcHBuYW1lfS13ZWIvd3NzL1RheFNlcnZpY2UiLz4KLSAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIgCi0gICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIiB0aW1lb3V0PSIxNTAwMDAwIiAKKyAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIKKyAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiIHRpbWVvdXQ9IjE1MDAwMDAiCiAgICAgICAgICAgb3V0cHV0cHJvcGVydHk9InJ1bmNsaWVudENvbW1vbk91dHB1dCI+CiAgICAgICAgIDxhcmcgbGluZT0iLWNsaWVudCIgLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CkBAIC0yMDEsNyArMjAxLDcgQEAKICAgICAgICAgPGFyZyBsaW5lPSItdXNlciBqMmVlIi8+CiAgICAgICAgIDxhcmcgbGluZT0iLXBhc3N3b3JkIGoyZWUiLz4KICAgICAgICAgPGFyZyBsaW5lPSIteG1sICR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9nbGFzc2Zpc2gtYWNjLnhtbCIvPgotCTxlbnYga2V5PSJBUFBDUEFUSCIgdmFsdWU9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIi8+CisgICAgPGVudiBrZXk9IkFQUENQQVRIIiB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KICAgICAgIDwvZXhlYz4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IiR7cnVuY2xpZW50Q29tbW9uT3V0cHV0fSIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjaGVjay1ydW5jbGllbnQtb3V0cHV0IiBpbmhlcml0QWxsPSJ0cnVlIiBpbmhlcml0UmVmcz0idHJ1ZSIvPgpAQCAtMjExLDE2ICsyMTEsMTYgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdC5kZXNjcmlwdGlvbiIgdmFsdWU9IiR7dGVzdC5kZXNjcmlwdGlvbn0iLz4KICAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdC5jb3VudCIgdmFsdWU9IjEiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAgIAotICAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50LXNzbC1wZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iIHVubGVzcz0iaXNFRSI+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGlzIHJ1bm5pbmcgb24gUGxhdGZvcm0gRWRpdGlvbiEiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJlbmRwb2ludC11cmwiIAorICAgICAgPHByb3BlcnR5IG5hbWU9ImVuZHBvaW50LXVybCIKICAgICAgICAgICAgIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS8ke2FwcG5hbWV9LXdlYi93c3MvVGF4U2VydmljZSIvPgogCiAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iPgogICAgICAgICA8ZW52IGtleT0iVk1BUkdTIiB2YWx1ZT0iLURqYXZheC5uZXQuc3NsLmtleVN0b3JlPSR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9rZXlzdG9yZS5qa3MgIC1EamF2YXgubmV0LnNzbC5rZXlTdG9yZVBhc3N3b3JkPSR7bWFzdGVyLnBhc3N3b3JkfSAtRGphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZT0ke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvY2FjZXJ0cy5qa3MgLURqYXZheC5uZXQuc3NsLnRydXN0U3RvcmVQYXNzd29yZD0ke21hc3Rlci5wYXNzd29yZH0iIC8+Ci0JPGVudiBrZXk9IkFQUENQQVRIIiB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KKyAgICA8ZW52IGtleT0iQVBQQ1BBVEgiIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIvPgogICAgICAgICA8YXJnIHZhbHVlPSItY2xpZW50IiAvPgogICAgICAgICA8YXJnIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiAgICAgICAgIDxhcmcgdmFsdWU9Ii10ZXh0YXV0aCIvPgpAQCAtMjQxLDEyICsyNDEsMTIgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50LXNzbC1lZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJpc0VFIj4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3QgaXMgcnVubmluZyBvbiBTdGFuZGFyZC9FbnRlcnByaXNlIEVkaXRpb24hIi8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZW5kcG9pbnQtdXJsIiAKKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJlbmRwb2ludC11cmwiCiAgICAgICAgICAgICB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vJHthcHBuYW1lfS13ZWIvd3NzL1RheFNlcnZpY2UiLz4KIAogICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9Ij4KICAgICAgICAgPGVudiBrZXk9IlZNQVJHUyIgdmFsdWU9IiAtRGphdmF4Lm5ldC5zc2wua2V5U3RvcmU9JHtlbnYuQVBTX0hPTUV9L3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9zMWFzLmprcyAtRGphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZT0ke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvY2VydGRiX2NhY2VydHMuamtzIC1EamF2YXgubmV0LnNzbC50cnVzdFN0b3JlUGFzc3dvcmQ9Y2hhbmdlaXQiIC8+Ci0JPGVudiBrZXk9IkFQUENQQVRIIiB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KKyAgICA8ZW52IGtleT0iQVBQQ1BBVEgiIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIvPgogICAgICAgICA8YXJnIHZhbHVlPSItY2xpZW50IiAvPgogICAgICAgICA8YXJnIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiAgICAgICAgIDwhLS0gZHVtbXkgdXNlciBhZGRlZCBhcyBhcHBjbGllbnQgdGhyb3dpbmcgbG9naW4gd2luZG93IC0tPgpAQCAtMjY0LDIxICsyNjQsMjEgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3QuZGVzY3JpcHRpb24iIHZhbHVlPSIke3Rlc3QuZGVzY3JpcHRpb259Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0LmNvdW50IiB2YWx1ZT0iMSIvPgogICAgICAgPC9hbnRjYWxsPgotICAgCisKICAgICA8L3RhcmdldD4KIAogCi0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIAotICA8IS0tIAotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAorICA8IS0tCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgVXNlciBEZWZpbmVkIHNwZWNpZmljIHRhcmdldHMKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAtLT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9zZXJ2bGV0amF4d3MvY2xpZW50L1RheENhbENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXRqYXh3cy9jbGllbnQvVGF4Q2FsQ2xpZW50LmphdmEKaW5kZXggM2JjZjYyNi4uYjI5MTQ4NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXRqYXh3cy9jbGllbnQvVGF4Q2FsQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXRqYXh3cy9jbGllbnQvVGF4Q2FsQ2xpZW50LmphdmEKQEAgLTI2LDIyICsyNiwyMiBAQAogICogVGhpcyBpcyBBcHBDbGllbnQgcHJvZ3JhbSB0aGF0IGFjY2VzcyBTdGF0ZVRheEVKQiBhbmQgRmVkVGF4IEVKQiBXZWJzZXJ2aWNlcy4KICAqIEl0IGV4cGVjdHMgU3RhdGVUYXggd2Vic2VydmljZSBlbmRwb2ludCBhbmQgRmVkVGF4IGVuZHBvaW50IFVSTHMuCiAgKiBUaGlzIGNsaWVudCBpcyBhY2Nlc3NlZCBpbiB0aGUgYW50IHJ1biB0YXJnZXQgYWZ0ZXIgY29uZmlndXJpbmcgdGhlIHdlYnNlcnZpY2VzCi0gKiBtZXNzYWdlIHNlY3VyaXR5IGF0IHN5c3RlbSBsZXZlbCBvciBhcHBsZXZlbC4gIAorICogbWVzc2FnZSBzZWN1cml0eSBhdCBzeXN0ZW0gbGV2ZWwgb3IgYXBwbGV2ZWwuCiAgKgogICogQHZlcnNpb24gMS4xICAwNSBBdWcgMjAwNQogICogQGF1dGhvciBKYWdhZGVzaCBNdW50YQogICovCi0gICAgICAgIAorCiBwdWJsaWMgY2xhc3MgVGF4Q2FsQ2xpZW50IHsKICAgICAvKgotICAgICAqIFRlc3RzIHRoZSBnZXRTdGF0ZVRheCBhbmQgZ2V0RmVkVGF4IHdpdGggZXhwZWN0ZWQgdmFsdWVzLiBJZiB2YWx1ZSAKKyAgICAgKiBUZXN0cyB0aGUgZ2V0U3RhdGVUYXggYW5kIGdldEZlZFRheCB3aXRoIGV4cGVjdGVkIHZhbHVlcy4gSWYgdmFsdWUKICAgICAgKiBtYXRjaGVkLHRoZW4gdGVzdCBQQVNTRUQgZWxzZSBGQUlMRUQuCiAgICAgICovCi0gCXByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKICAgICAgICAgICAgIC8vIEoyRUUgc2ltcGxlIHJlcG9ydGVyIGZvciBsb2dnaW5nIHRoZSB0ZXN0IHN0YXR1cy4KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGF4RW5kcG9pbnQgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3VpdGUgPSAic2VjLXdzcy1hbm5vdGF0ZS1zZXJ2bGV0ZW5kcG9pbnQiOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0Q2FzZSA9IG51bGw7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRheEVuZHBvaW50ID0gbnVsbDsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdFN1aXRlID0gInNlYy13c3MtYW5ub3RhdGUtc2VydmxldGVuZHBvaW50IjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdENhc2UgPSBudWxsOwogICAgICAgICBAV2ViU2VydmljZVJlZih3c2RsTG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC93c3MtdGF4LXdlYi93c3MvVGF4U2VydmljZT93c2RsIikKICAgICAgICAgc3RhdGljIFRheFNlcnZpY2Ugc2VydmljZTsKIApAQCAtNTYsOCArNTYsOCBAQAogICAgICAgICAgICAgICAgIHRheEVuZHBvaW50ID0gYXJnc1swXTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlNlY3VyaXR5LVdTUy1lamIgd2Vic2VydmljZSIpOyAKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlNlY3VyaXR5LVdTUy1lamIgd2Vic2VydmljZSIpOworICAgICAgICB0cnkgewogICAgICAgICAgICAgVGF4Q2FsQ2xpZW50IGNsaWVudCA9IG5ldyBUYXhDYWxDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5jYWxsVGF4U2VydmljZSgpOwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewpAQCAtNjYsMTQgKzY2LDE0IEBACiAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdFN1aXRlKTsKICAgICB9Ci0gICAgCisKIAogICAgIHB1YmxpYyB2b2lkIGNhbGxUYXhTZXJ2aWNlKCkgewogICAgICAgICBkb3VibGUgaW5jb21lID0gOTcwMDAuMDA7CiAgICAgICAgIGRvdWJsZSBkZWR1Y3Rpb25zID0gNzAwMC4wMDsKICAgICAgICAgZG91YmxlIGV4cGVjdGVkVGF4ID0gMTgwMDAuMDA7CiAgICAgICAgIFN0cmluZyB0ZXN0U3RhdHVzID0gImZhaWwiOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKHNlcnZpY2UhPW51bGwpIHsKICAgICAgICAgICAgICAgICBUYXggcG9ydCA9IHNlcnZpY2UuZ2V0VGF4UG9ydCgpOwpAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH1lbHNlIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yOiBOb3QgYWJsZSB0byBnZXQgdGhlIHNlcnZpY2UgYW5kIGlzIG51bGwhIik7Ci0gICAgICAgICAgICAgICAgdGVzdFN0YXR1cyA9IHN0YXQuRkFJTDsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdGVzdFN0YXR1cyA9IHN0YXQuRkFJTDsKICAgICAgICAgICAgIH0KIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTk5LDggKzk5LDggQEAKICAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICB0ZXN0U3RhdHVzID0gc3RhdC5GQUlMOwogICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiLWdldEZlZFRheCIgLCB0ZXN0U3RhdHVzKTsgICAgICAgICAgICAKLSAgICAgICAgfSAKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIi1nZXRGZWRUYXgiICwgdGVzdFN0YXR1cyk7CisgICAgICAgIH0KICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9zZXJ2bGV0amF4d3Mvd2ViL1RheC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXRqYXh3cy93ZWIvVGF4LmphdmEKaW5kZXggYmI3ZWQ5NC4uNGQ1N2RlNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXRqYXh3cy93ZWIvVGF4LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXRqYXh3cy93ZWIvVGF4LmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIGltcG9ydCBqYWthcnRhLmp3cy5XZWJNZXRob2Q7CiAKIC8qKgotICogRmVkVGF4IFdlYlNlcnZpY2UgZW5kcG9pbnQgdXNpbmcgdGhlIEphdmEgRUUgNSBhbm5vdGF0aW9ucy4gCisgKiBGZWRUYXggV2ViU2VydmljZSBlbmRwb2ludCB1c2luZyB0aGUgSmF2YSBFRSA1IGFubm90YXRpb25zLgogICogVXNlZCBmb3IgdGVzdGluZyBXZWIgU2VydmljZXMgU2VjdXJpdHkgdGVzdHMgb24gSmF2YSBFRSA1IHBsYXRmb3JtLgogICoKICAqIEB2ZXJzaW9uIDEuMSAgMDggQXVnIDIwMDUKQEAgLTQ1LDUgKzQ1LDUgQEAKICAgICAgICAgcmV0dXJuICgoaW5jb21lIC0gIGRlZHVjdGlvbnMpICogRkVEX1RBWF9SQVRFKTsKICAgICB9CiAKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXR3cy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXR3cy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk5NjFkYWIuLjBhZWNjZGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9zZXJ2bGV0d3MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3Mvc2VydmxldHdzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIwICsxNSwyMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id3NzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS10YXhjYWwiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXRheGNhbCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJjb20uc3VuLmFwcHNlcnYuc3FlLnNlY3VyaXR5Lndzcy5zZXJ2bGV0d3MudGF4Y2FsLmNsaWVudC5UYXhDYWxDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iY29tLnN1bi5hcHBzZXJ2LnNxZS5zZWN1cml0eS53c3Muc2VydmxldHdzLnRheGNhbC5jbGllbnQuVGF4Q2FsQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDwhLS1wcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8tLT4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3c2RsLWZpbGUiIHZhbHVlPSJ3c2RsL1RheENhbFNlcnZsZXRTZXJ2aWNlLndzZGwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9zZXJ2bGV0d3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXR3cy9idWlsZC54bWwKaW5kZXggOGViZGZhMS4uYzRmNzkzNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXR3cy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXR3cy9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJkaXNwbGF5LWhlYWRlciwgY2xlYW4sIGJ1aWxkLCBkZXBsb3ksIHJ1biwgdW5kZXBsb3kiLz4KIAotICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QiIAorICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QiCiAgICAgZGVwZW5kcz0iY2xlYW4sIGJ1aWxkLCBkZXBsb3ksIHJ1biwgdW5kZXBsb3kiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTQzLDcgKzQzLDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGlzcGxheS1oZWFkZXIiPgotICAgICAgPGVjaG8gbWVzc2FnZT0iLS0+UnVubmluZyAke2FudC5wcm9qZWN0Lm5hbWV9IHRlc3RzIGZyb20gJHtiYXNlZGlyfSAuLi4iLz4gICAgICAgICAgCisgICAgICA8ZWNobyBtZXNzYWdlPSItLT5SdW5uaW5nICR7YW50LnByb2plY3QubmFtZX0gdGVzdHMgZnJvbSAke2Jhc2VkaXJ9IC4uLiIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbixjbGVhbi1jb21tb24sIGdlbmVyYXRlLWFydGlmYWN0cyI+CkBAIC0xNDIsMjggKzE0MiwyOCBAQAogICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImluaXQtY29tbW9uLGNvbXBpbGUiPgotCTxhbnRjYWxsIHRhcmdldD0id3MtcGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgPGFudGNhbGwgdGFyZ2V0PSJ3cy1wYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iY29tL3N1bi9hcHBzZXJ2L3NxZS9zZWN1cml0eS93c3Mvc2VydmxldHdzL3RheGNhbC9jbGllbnQvKi5jbGFzcyIgLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiCiAgICAgICAgICAgICAgIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+Ci0JPC9hbnRjYWxsPgotCTwhLS1hbnRjYWxsIHRhcmdldD0id3Mtd2FyLWNvbW1vbiItLT4KLQk8YW50Y2FsbCB0YXJnZXQ9IndzLXBhY2thZ2Utd2FyLWNvbW1vbiI+CisgICAgPC9hbnRjYWxsPgorICAgIDwhLS1hbnRjYWxsIHRhcmdldD0id3Mtd2FyLWNvbW1vbiItLT4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9IndzLXBhY2thZ2Utd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmZpbGUiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iY29tL3N1bi9hcHBzZXJ2L3NxZS9zZWN1cml0eS93c3Mvc2VydmxldHdzL3RheGNhbC8qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmdmaWxlLm5hbWUiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmdmaWxlLm5hbWUiCiAgICAgICAgICAgICAgIHZhbHVlPSIke3dlYi1tYXBwaW5nLnhtbH0iIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0ibWFwcGluZ2ZpbGUubG9jYXRpb24iIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmdmaWxlLmxvY2F0aW9uIgogICAgICAgICAgICAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJzZXJ2aWNlcy54bWwiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYnNlcnZpY2VzLnhtbCIKICAgICAgICAgICAgICAgdmFsdWU9IiR7d2ViLXdlYnNlcnZpY2VzLnhtbH0iIC8+Ci0JPC9hbnRjYWxsPgorICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC0xNzEsMTAgKzE3MSwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iPgotCTxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LXNzbC13aW4iLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1zc2wtdW5peCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LXNzbC13aW4iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1zc2wtdW5peCIvPgogICAgIDwvdGFyZ2V0PgotICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50LXNzbC13aW4iIGRlcGVuZHM9InNldC1hcHBzZXJ2ZXItdmVyc2lvbiIgaWY9ImlzV2luZG93cyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LXNzbC1wZS13aW4iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtc3NsLWVlLXdpbiIvPgpAQCAtMjkyLDE3ICsyOTIsMTcgQEAKICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKLSAgPCEtLSAKLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKKyAgPCEtLQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFVzZXIgRGVmaW5lZCBzcGVjaWZpYyB0YXJnZXRzCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgLS0+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3Mvc2VydmxldHdzL2NsaWVudC9UYXhDYWxDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9zZXJ2bGV0d3MvY2xpZW50L1RheENhbENsaWVudC5qYXZhCmluZGV4IDA1YTk4NzkuLjU3YzNhYmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9zZXJ2bGV0d3MvY2xpZW50L1RheENhbENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9zZXJ2bGV0d3MvY2xpZW50L1RheENhbENsaWVudC5qYXZhCkBAIC0yNCw5MyArMjQsOTMgQEAKIAogcHVibGljIGNsYXNzIFRheENhbENsaWVudCB7CiAKLQlwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc3RhdGVUYXhFbmRwb2ludCA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZlZFRheEVuZHBvaW50ID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdFN1aXRlID0gIlNlY3VyaXR5LXdzcy1zZXJ2bGV0d3MtIjsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdENhc2UgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIFRheENhbFNlcnZsZXRTZXJ2aWNlIHRheENhbFNlcnZpY2UgPSBudWxsOworICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBzdGF0ZVRheEVuZHBvaW50ID0gbnVsbDsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZmVkVGF4RW5kcG9pbnQgPSBudWxsOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3VpdGUgPSAiU2VjdXJpdHktd3NzLXNlcnZsZXR3cy0iOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0Q2FzZSA9IG51bGw7CisgICAgcHJpdmF0ZSBzdGF0aWMgVGF4Q2FsU2VydmxldFNlcnZpY2UgdGF4Q2FsU2VydmljZSA9IG51bGw7CiAKLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAKLQkJaWYoYXJnc1swXSA9PSBudWxsIHx8IGFyZ3NbMV0gPT0gbnVsbCl7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRheENhbCBjbGllbnQ6IEFyZ3VtZW50IG1pc3NpbmcuIFBsZWFzZSBwcm92aWRlIHRhcmdldCIgKwotCQkJCSAiZW5kcG9pbnQgYWRkcmVzcyBhcyBhcmd1bWVudCIpOwotCQkJU3lzdGVtLmV4aXQoMSk7Ci0JCX0gZWxzZSB7Ci0JCQlzdGF0ZVRheEVuZHBvaW50ID0gYXJnc1swXTsKLQkJCWZlZFRheEVuZHBvaW50ID0gYXJnc1sxXTsKLQkJfQorICAgICAgICBpZihhcmdzWzBdID09IG51bGwgfHwgYXJnc1sxXSA9PSBudWxsKXsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGF4Q2FsIGNsaWVudDogQXJndW1lbnQgbWlzc2luZy4gUGxlYXNlIHByb3ZpZGUgdGFyZ2V0IiArCisgICAgICAgICAgICAgICAgICJlbmRwb2ludCBhZGRyZXNzIGFzIGFyZ3VtZW50Iik7CisgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0YXRlVGF4RW5kcG9pbnQgPSBhcmdzWzBdOworICAgICAgICAgICAgZmVkVGF4RW5kcG9pbnQgPSBhcmdzWzFdOworICAgICAgICB9CiAKLSAgICAgICAgCXN0YXQuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCBtZXNzYWdlIHNlY3VyaXR5IHdpdGggc2lnbiBvciB1c2VybmFtZSB0b2tlbiBvbiByZXF1ZXN0IGFuZCByZXNwb25zZSB3aXRoIHNpZ25pbmcgdXNpbmcgc2VydmxldCBiYXNlZCB3ZWJzZXJ2aWNlcy4iKTsKLQkJdHJ5IHsgCi0JCQlUYXhDYWxDbGllbnQgY2xpZW50ID0gbmV3IFRheENhbENsaWVudCgpOwotCQkJQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCQkJdGF4Q2FsU2VydmljZSA9IChUYXhDYWxTZXJ2bGV0U2VydmljZSkKLQkJCQlpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9UYXhDYWxTZXJ2bGV0U2VydmljZSIpOworICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGhpcyBpcyB0byB0ZXN0IG1lc3NhZ2Ugc2VjdXJpdHkgd2l0aCBzaWduIG9yIHVzZXJuYW1lIHRva2VuIG9uIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHdpdGggc2lnbmluZyB1c2luZyBzZXJ2bGV0IGJhc2VkIHdlYnNlcnZpY2VzLiIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgVGF4Q2FsQ2xpZW50IGNsaWVudCA9IG5ldyBUYXhDYWxDbGllbnQoKTsKKyAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgICAgIHRheENhbFNlcnZpY2UgPSAoVGF4Q2FsU2VydmxldFNlcnZpY2UpCisgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvVGF4Q2FsU2VydmxldFNlcnZpY2UiKTsKIAotCQkJY2xpZW50LmNhbGxTdGF0ZVRheFNlcnZpY2UoKTsgLy8gVXNlcyBCaW5hcnlUb2tlbiAtIFNpZ24gCi0JCQljbGllbnQuY2FsbEZlZFRheFNlcnZpY2UoKTsgLy8gVXNlcyBVc2VybmFtZSBUb2tlbgotCQl9Y2F0Y2goRXhjZXB0aW9uIGUpewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQorICAgICAgICAgICAgY2xpZW50LmNhbGxTdGF0ZVRheFNlcnZpY2UoKTsgLy8gVXNlcyBCaW5hcnlUb2tlbiAtIFNpZ24KKyAgICAgICAgICAgIGNsaWVudC5jYWxsRmVkVGF4U2VydmljZSgpOyAvLyBVc2VzIFVzZXJuYW1lIFRva2VuCisgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CiAKLQkJc3RhdC5wcmludFN1bW1hcnkodGVzdFN1aXRlKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdFN1aXRlKTsKICAgICB9Ci0gICAgCi0JcHVibGljIHZvaWQgY2FsbFN0YXRlVGF4U2VydmljZSgpIHsKLQkJZG91YmxlIGluY29tZSA9IDg1MDAwLjAwOwotCQlkb3VibGUgZGVkdWN0aW9ucyA9IDUwMDAuMDA7CiAKLQkJLy9TdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0KLQkJLy8JImh0dHA6Ly9sb2NhbGhvc3Q6MTAyNC90YXhjYWxjdWxhdG9yIjsKKyAgICBwdWJsaWMgdm9pZCBjYWxsU3RhdGVUYXhTZXJ2aWNlKCkgeworICAgICAgICBkb3VibGUgaW5jb21lID0gODUwMDAuMDA7CisgICAgICAgIGRvdWJsZSBkZWR1Y3Rpb25zID0gNTAwMC4wMDsKIAotCQl0cnkgeworICAgICAgICAvL1N0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQorICAgICAgICAvLyAgICAiaHR0cDovL2xvY2FsaG9zdDoxMDI0L3RheGNhbGN1bGF0b3IiOwogCi0JCQlTdGF0ZVRheElGIHRheENhbElGUG9ydCA9IHRheENhbFNlcnZpY2UuZ2V0U3RhdGVUYXhJRlBvcnQoKTsKKyAgICAgICAgdHJ5IHsKIAotCQkJKChTdHViKXRheENhbElGUG9ydCkuX3NldFByb3BlcnR5IChTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCi0JCQkJc3RhdGVUYXhFbmRwb2ludCk7CisgICAgICAgICAgICBTdGF0ZVRheElGIHRheENhbElGUG9ydCA9IHRheENhbFNlcnZpY2UuZ2V0U3RhdGVUYXhJRlBvcnQoKTsKIAotCQkJZG91YmxlIHN0YXRlVGF4ID0gdGF4Q2FsSUZQb3J0LmdldFN0YXRlVGF4KGluY29tZSwgZGVkdWN0aW9ucyk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlIHRheCBmcm9tIHNlcnZsZXQgYmFzZWQgVGF4Q2FsU2VydmljZSA6IiArIHN0YXRlVGF4KTsKKyAgICAgICAgICAgICgoU3R1Yil0YXhDYWxJRlBvcnQpLl9zZXRQcm9wZXJ0eSAoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAorICAgICAgICAgICAgICAgIHN0YXRlVGF4RW5kcG9pbnQpOwogCi0JCQlpZihzdGF0ZVRheCA9PSAyNDAwMC4wMCkKLQkJCQlzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAibWVzZ3NpZ24tU3RhdGVUYXhQb3J0Iiwgc3RhdC5QQVNTKTsKLQkJCWVsc2UKLQkJCQlzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAibWVzZ3NpZ24tU3RhdGVUYXhQb3J0Iiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIGRvdWJsZSBzdGF0ZVRheCA9IHRheENhbElGUG9ydC5nZXRTdGF0ZVRheChpbmNvbWUsIGRlZHVjdGlvbnMpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZSB0YXggZnJvbSBzZXJ2bGV0IGJhc2VkIFRheENhbFNlcnZpY2UgOiIgKyBzdGF0ZVRheCk7CiAKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRheENhbEVqYldlYnNlcnZpY2UgY2xpZW50IGZhaWxlZCIpOwotCQkJc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIm1lc2dzaWduLVN0YXRlVGF4UG9ydCIsIHN0YXQuRkFJTCk7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfSAKLQl9CisgICAgICAgICAgICBpZihzdGF0ZVRheCA9PSAyNDAwMC4wMCkKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAibWVzZ3NpZ24tU3RhdGVUYXhQb3J0Iiwgc3RhdC5QQVNTKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAibWVzZ3NpZ24tU3RhdGVUYXhQb3J0Iiwgc3RhdC5GQUlMKTsKIAotCXB1YmxpYyB2b2lkIGNhbGxGZWRUYXhTZXJ2aWNlKCkgewotCQlkb3VibGUgaW5jb21lID0gOTcwMDAuMDA7Ci0JCWRvdWJsZSBkZWR1Y3Rpb25zID0gNzAwMC4wMDsKLQkJdHJ5IHsKLQkJCS8vU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9Ci0JCQkvLyJodHRwOi8vbG9jYWxob3N0OjEwMjQvRmluZEludGVyZXN0U2VydmxldC9GaW5kSW50ZXJlc3QiOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGF4Q2FsRWpiV2Vic2VydmljZSBjbGllbnQgZmFpbGVkIik7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAibWVzZ3NpZ24tU3RhdGVUYXhQb3J0Iiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgfQogCi0JCQlGZWRUYXhJRiB0YXhDYWxJRlBvcnQgPSB0YXhDYWxTZXJ2aWNlLmdldEZlZFRheElGUG9ydCgpOwotCQkJKChTdHViKXRheENhbElGUG9ydCkuX3NldFByb3BlcnR5IChTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCi0JCQkJZmVkVGF4RW5kcG9pbnQpOworICAgIHB1YmxpYyB2b2lkIGNhbGxGZWRUYXhTZXJ2aWNlKCkgeworICAgICAgICBkb3VibGUgaW5jb21lID0gOTcwMDAuMDA7CisgICAgICAgIGRvdWJsZSBkZWR1Y3Rpb25zID0gNzAwMC4wMDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIC8vU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9CisgICAgICAgICAgICAvLyJodHRwOi8vbG9jYWxob3N0OjEwMjQvRmluZEludGVyZXN0U2VydmxldC9GaW5kSW50ZXJlc3QiOwogCi0JCQlkb3VibGUgZmVkVGF4ID0gdGF4Q2FsSUZQb3J0LmdldEZlZFRheChpbmNvbWUsIGRlZHVjdGlvbnMpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJGZWQgdGF4IGZyb20gU2VydmxldCBiYXNlZCBUYXhDYWxTZXJ2aWNlIDoiICsgZmVkVGF4KTsKKyAgICAgICAgICAgIEZlZFRheElGIHRheENhbElGUG9ydCA9IHRheENhbFNlcnZpY2UuZ2V0RmVkVGF4SUZQb3J0KCk7CisgICAgICAgICAgICAoKFN0dWIpdGF4Q2FsSUZQb3J0KS5fc2V0UHJvcGVydHkgKFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKKyAgICAgICAgICAgICAgICBmZWRUYXhFbmRwb2ludCk7CiAKLQkJCWlmKGZlZFRheCA9PSAxODAwMC4wMCkKLQkJCQlzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAidXNlcm5hbWUtRmVkVGF4UG9ydCIsIHN0YXQuUEFTUyk7Ci0JCQllbHNlCi0JCQkJc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgInVzZXJuYW1lLUZlZFRheFBvcnQiLCBzdGF0LkZBSUwpOwotICAgICAgICAgICAgICAgIAotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGF4Q2FsU2VydmxldFdlYlNlcnZpY2UgY2xpZW50IGZhaWxlZCIpOwotCQkJc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgInVzZXJuYW1lLUZlZFRheFBvcnQiLCBzdGF0LkZBSUwpOwotCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0gCi0JfQorICAgICAgICAgICAgZG91YmxlIGZlZFRheCA9IHRheENhbElGUG9ydC5nZXRGZWRUYXgoaW5jb21lLCBkZWR1Y3Rpb25zKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmVkIHRheCBmcm9tIFNlcnZsZXQgYmFzZWQgVGF4Q2FsU2VydmljZSA6IiArIGZlZFRheCk7CisKKyAgICAgICAgICAgIGlmKGZlZFRheCA9PSAxODAwMC4wMCkKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAidXNlcm5hbWUtRmVkVGF4UG9ydCIsIHN0YXQuUEFTUyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgInVzZXJuYW1lLUZlZFRheFBvcnQiLCBzdGF0LkZBSUwpOworCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUYXhDYWxTZXJ2bGV0V2ViU2VydmljZSBjbGllbnQgZmFpbGVkIik7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAidXNlcm5hbWUtRmVkVGF4UG9ydCIsIHN0YXQuRkFJTCk7CisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3Mvc2VydmxldHdzL2NvbmZpZy9jb25maWctY2xpZW50LnhtbAppbmRleCAxNWQwMGI2Li42MjQyZjhlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3Mvc2VydmxldHdzL2NvbmZpZy9jb25maWctY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3Mvc2VydmxldHdzL2NvbmZpZy9jb25maWctY2xpZW50LnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJ3c2RsL1RheENhbFNlcnZsZXRTZXJ2aWNlLndzZGwiCiAgICAgICBwYWNrYWdlTmFtZT0iY29tLnN1bi5hcHBzZXJ2LnNxZS5zZWN1cml0eS53c3Muc2VydmxldHdzLnRheGNhbC5jbGllbnQiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9zZXJ2bGV0d3MvY29uZmlnL2NvbmZpZy1zZWkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLXNlaS54bWwKaW5kZXggYzIwMjk5Yy4uZGI2NTRmMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLXNlaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLXNlaS54bWwKQEAgLTE4LDE2ICsxOCwxNiBAQAogLS0+CiAKIDxjb25maWd1cmF0aW9uCi0JeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLQk8c2VydmljZSBuYW1lPSJUYXhDYWxTZXJ2bGV0U2VydmljZSIKLQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGF4Lm9yZy93c2RsIgotCQl0eXBlTmFtZXNwYWNlPSJodHRwOi8vdGF4Lm9yZy90eXBlcyIKLQkJcGFja2FnZU5hbWU9ImNvbS5zdW4uYXBwc2Vydi5zcWUuc2VjdXJpdHkud3NzLnNlcnZsZXR3cy50YXhjYWwiPgotCQk8aW50ZXJmYWNlIG5hbWU9ImNvbS5zdW4uYXBwc2Vydi5zcWUuc2VjdXJpdHkud3NzLnNlcnZsZXR3cy50YXhjYWwuRmVkVGF4SUYiCi0JCQlzZXJ2YW50TmFtZT0iY29tLnN1bi5hcHBzZXJ2LnNxZS5zZWN1cml0eS53c3Muc2VydmxldHdzLnRheGNhbC5GZWRUYXhTZXJ2bGV0Ii8+Ci0JCTxpbnRlcmZhY2UgbmFtZT0iY29tLnN1bi5hcHBzZXJ2LnNxZS5zZWN1cml0eS53c3Muc2VydmxldHdzLnRheGNhbC5TdGF0ZVRheElGIgotCQkJc2VydmFudE5hbWU9ImNvbS5zdW4uYXBwc2Vydi5zcWUuc2VjdXJpdHkud3NzLnNlcnZsZXR3cy50YXhjYWwuU3RhdGVUYXhTZXJ2bGV0Ij4KLQkJPC9pbnRlcmZhY2U+Ci0JPC9zZXJ2aWNlPgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+CisgICAgPHNlcnZpY2UgbmFtZT0iVGF4Q2FsU2VydmxldFNlcnZpY2UiCisgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RheC5vcmcvd3NkbCIKKyAgICAgICAgdHlwZU5hbWVzcGFjZT0iaHR0cDovL3RheC5vcmcvdHlwZXMiCisgICAgICAgIHBhY2thZ2VOYW1lPSJjb20uc3VuLmFwcHNlcnYuc3FlLnNlY3VyaXR5Lndzcy5zZXJ2bGV0d3MudGF4Y2FsIj4KKyAgICAgICAgPGludGVyZmFjZSBuYW1lPSJjb20uc3VuLmFwcHNlcnYuc3FlLnNlY3VyaXR5Lndzcy5zZXJ2bGV0d3MudGF4Y2FsLkZlZFRheElGIgorICAgICAgICAgICAgc2VydmFudE5hbWU9ImNvbS5zdW4uYXBwc2Vydi5zcWUuc2VjdXJpdHkud3NzLnNlcnZsZXR3cy50YXhjYWwuRmVkVGF4U2VydmxldCIvPgorICAgICAgICA8aW50ZXJmYWNlIG5hbWU9ImNvbS5zdW4uYXBwc2Vydi5zcWUuc2VjdXJpdHkud3NzLnNlcnZsZXR3cy50YXhjYWwuU3RhdGVUYXhJRiIKKyAgICAgICAgICAgIHNlcnZhbnROYW1lPSJjb20uc3VuLmFwcHNlcnYuc3FlLnNlY3VyaXR5Lndzcy5zZXJ2bGV0d3MudGF4Y2FsLlN0YXRlVGF4U2VydmxldCI+CisgICAgICAgIDwvaW50ZXJmYWNlPgorICAgIDwvc2VydmljZT4KIDwvY29uZmlndXJhdGlvbj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3Mvc2VydmxldHdzL2NvbmZpZy9jb25maWctd2ViLnhtbAppbmRleCBmMzg0MTYyLi4xNmE2OWViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3Mvc2VydmxldHdzL2NvbmZpZy9jb25maWctd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3Mvc2VydmxldHdzL2NvbmZpZy9jb25maWctd2ViLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJ3c2RsL1RheENhbFNlcnZsZXRTZXJ2aWNlLndzZGwiCiAgICAgICBwYWNrYWdlTmFtZT0iY29tLnN1bi5hcHBzZXJ2LnNxZS5zZWN1cml0eS53c3Muc2VydmxldHdzLnRheGNhbCIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXR3cy9kZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXR3cy9kZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IGU4YTkzMmMuLjE0ZWU2NGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9zZXJ2bGV0d3MvZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3Mvc2VydmxldHdzL2Rlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwKQEAgLTUwLDYgKzUwLDYgQEAKICAgICAgICAgICAgIDxyZXNwb25zZS1wcm90ZWN0aW9uIGF1dGgtc291cmNlPSJjb250ZW50Ii8+CiAgICAgICAgICAgPC9tZXNzYWdlLXNlY3VyaXR5PgogICAgICAgICA8L21lc3NhZ2Utc2VjdXJpdHktYmluZGluZz4KLSAgICAgIDwvcG9ydC1pbmZvPiAgICAgIAorICAgICAgPC9wb3J0LWluZm8+CiAgICAgPC9zZXJ2aWNlLXJlZj4KIDwvc3VuLWFwcGxpY2F0aW9uLWNsaWVudD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9zZXJ2bGV0d3MvZGVzY3JpcHRvci9zdW4td2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9zZXJ2bGV0d3MvZGVzY3JpcHRvci9zdW4td2ViLnhtbAppbmRleCA1OTFiZDZkLi41Njk4NmVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3Mvc2VydmxldHdzL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXR3cy9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCkBAIC01Miw1ICs1Miw1IEBACiAgICAgICAgICAgPC9tZXNzYWdlLXNlY3VyaXR5PgogICAgICAgICA8L21lc3NhZ2Utc2VjdXJpdHktYmluZGluZz4KICAgICAgIDwvd2Vic2VydmljZS1lbmRwb2ludD4KLSAgICA8L3NlcnZsZXQ+ICAgIAorICAgIDwvc2VydmxldD4KIDwvc3VuLXdlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3Mvc2VydmxldHdzL3dlYi9GZWRUYXhJRi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXR3cy93ZWIvRmVkVGF4SUYuamF2YQppbmRleCA2MmJlYzk3Li42ZjljMWI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3Mvc2VydmxldHdzL3dlYi9GZWRUYXhJRi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9zZXJ2bGV0d3Mvd2ViL0ZlZFRheElGLmphdmEKQEAgLTIyLDYgKzIyLDYgQEAKIAogcHVibGljIGludGVyZmFjZSBGZWRUYXhJRiBleHRlbmRzIFJlbW90ZXsKIAotCXB1YmxpYyBkb3VibGUgZ2V0RmVkVGF4KGRvdWJsZSBpbmNvbWUsIGRvdWJsZSBkZWR1Y3Rpb25zKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHB1YmxpYyBkb3VibGUgZ2V0RmVkVGF4KGRvdWJsZSBpbmNvbWUsIGRvdWJsZSBkZWR1Y3Rpb25zKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3Mvc2VydmxldHdzL3dlYi9GZWRUYXhTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3Mvc2VydmxldHdzL3dlYi9GZWRUYXhTZXJ2bGV0LmphdmEKaW5kZXggOTk4MWQyNS4uODRhODgyMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXR3cy93ZWIvRmVkVGF4U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9zZXJ2bGV0d3Mvd2ViL0ZlZFRheFNlcnZsZXQuamF2YQpAQCAtMjEsMTUgKzIxLDE1IEBACiBpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKIGltcG9ydCBqYXZheC54bWwucnBjLkNhbGw7CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamF2YXgubmFtaW5nLio7CiBpbXBvcnQgamF2YXgueG1sLnJwYy5TZXJ2aWNlOwogaW1wb3J0IGphdmF4LnhtbC5ycGMuc2VydmVyLlNlcnZpY2VMaWZlY3ljbGU7CiBpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuU2luZ2xlVGhyZWFkTW9kZWw7CiAKLXB1YmxpYyBjbGFzcyBGZWRUYXhTZXJ2bGV0IGltcGxlbWVudHMgCi0JCQlTaW5nbGVUaHJlYWRNb2RlbCwgU2VydmljZUxpZmVjeWNsZSB7CitwdWJsaWMgY2xhc3MgRmVkVGF4U2VydmxldCBpbXBsZW1lbnRzCisgICAgICAgICAgICBTaW5nbGVUaHJlYWRNb2RlbCwgU2VydmljZUxpZmVjeWNsZSB7CiAKICAgICBwdWJsaWMgRmVkVGF4U2VydmxldCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGZWRUYXhTZXJ2bGV0KCkgaW5zdGFudGlhdGVkIik7CkBAIC00NCw3ICs0NCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIGRvdWJsZSBnZXRGZWRUYXgoZG91YmxlIGluY29tZSwgZG91YmxlIGRlZHVjdGlvbnMpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImdldFN0YXRlVGF4IGludm9rZWQgZnJvbSBzZXJ2bGV0IGVuZHBvaW50Iik7Ci0JIHJldHVybiAoKGluY29tZSAtICBkZWR1Y3Rpb25zKSAqIDAuMik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXRTdGF0ZVRheCBpbnZva2VkIGZyb20gc2VydmxldCBlbmRwb2ludCIpOworICAgICByZXR1cm4gKChpbmNvbWUgLSAgZGVkdWN0aW9ucykgKiAwLjIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9zZXJ2bGV0d3Mvd2ViL1N0YXRlVGF4SUYuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3NlY3VyaXR5L3dzcy9zZXJ2bGV0d3Mvd2ViL1N0YXRlVGF4SUYuamF2YQppbmRleCAyMzJmNzliLi42Y2MwNzBhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3Mvc2VydmxldHdzL3dlYi9TdGF0ZVRheElGLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXR3cy93ZWIvU3RhdGVUYXhJRi5qYXZhCkBAIC0yMiw2ICsyMiw2IEBACiAKIHB1YmxpYyBpbnRlcmZhY2UgU3RhdGVUYXhJRiBleHRlbmRzIFJlbW90ZXsKIAotCXB1YmxpYyBkb3VibGUgZ2V0U3RhdGVUYXgoZG91YmxlIGluY29tZSwgZG91YmxlIGRlZHVjdGlvbnMpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgcHVibGljIGRvdWJsZSBnZXRTdGF0ZVRheChkb3VibGUgaW5jb21lLCBkb3VibGUgZGVkdWN0aW9ucykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvc2VjdXJpdHkvd3NzL3NlcnZsZXR3cy93ZWIvU3RhdGVUYXhTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3Mvc2VydmxldHdzL3dlYi9TdGF0ZVRheFNlcnZsZXQuamF2YQppbmRleCBlMmVhMWIxLi5jOGNmZWViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3Mvc2VydmxldHdzL3dlYi9TdGF0ZVRheFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy9zZWN1cml0eS93c3Mvc2VydmxldHdzL3dlYi9TdGF0ZVRheFNlcnZsZXQuamF2YQpAQCAtMjEsMTUgKzIxLDE1IEBACiBpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKIGltcG9ydCBqYXZheC54bWwucnBjLkNhbGw7CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamF2YXgubmFtaW5nLio7CiBpbXBvcnQgamF2YXgueG1sLnJwYy5TZXJ2aWNlOwogaW1wb3J0IGphdmF4LnhtbC5ycGMuc2VydmVyLlNlcnZpY2VMaWZlY3ljbGU7CiBpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuU2luZ2xlVGhyZWFkTW9kZWw7CiAKLXB1YmxpYyBjbGFzcyBTdGF0ZVRheFNlcnZsZXQgaW1wbGVtZW50cyAKLQkJCVNpbmdsZVRocmVhZE1vZGVsLCBTZXJ2aWNlTGlmZWN5Y2xlIHsKK3B1YmxpYyBjbGFzcyBTdGF0ZVRheFNlcnZsZXQgaW1wbGVtZW50cworICAgICAgICAgICAgU2luZ2xlVGhyZWFkTW9kZWwsIFNlcnZpY2VMaWZlY3ljbGUgewogCiAgICAgcHVibGljIFN0YXRlVGF4U2VydmxldCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZVRheFNlcnZsZXQoKSBpbnN0YW50aWF0ZWQiKTsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgZG91YmxlIGdldFN0YXRlVGF4KGRvdWJsZSBpbmNvbWUsIGRvdWJsZSBkZWR1Y3Rpb25zKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJnZXRTdGF0ZVRheCBpbnZva2VkIGZyb20gc2VydmxldCBlbmRwb2ludCIpOwotCSByZXR1cm4gKChpbmNvbWUgLSAgZGVkdWN0aW9ucykgKiAwLjMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0U3RhdGVUYXggaW52b2tlZCBmcm9tIHNlcnZsZXQgZW5kcG9pbnQiKTsKKyAgICAgcmV0dXJuICgoaW5jb21lIC0gIGRlZHVjdGlvbnMpICogMC4zKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy90cmFuc2FjdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy90cmFuc2FjdGlvbi9idWlsZC54bWwKaW5kZXggYWQ0NDgxYi4uZTljNjkxNGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3RyYW5zYWN0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy90cmFuc2FjdGlvbi9idWlsZC54bWwKQEAgLTI3LDQ5ICsyNyw0OSBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InR4bi10YXJnZXQiIHZhbHVlPSJhbGwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW50eG50ZXN0cyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idHhuLXRhcmdldCIgdmFsdWU9InJ1bi10ZXN0Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudHhudGVzdHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InR4bi10YXJnZXQiIHZhbHVlPSJjbGVhbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bnR4bnRlc3RzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0eG4tdGFyZ2V0IiB2YWx1ZT0iYnVpbGQiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudHhudGVzdHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InR4bi10YXJnZXQiIHZhbHVlPSJkZXBsb3kiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW50eG50ZXN0cyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idHhuLXRhcmdldCIgdmFsdWU9InVuZGVwbG95Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bnR4bnRlc3RzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0eG4tdGFyZ2V0IiB2YWx1ZT0icnVuIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudHhudGVzdHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InR4bi10YXJnZXQiIHZhbHVlPSJzZXR1cCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudHhudGVzdHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InR4bi10YXJnZXQiIHZhbHVlPSJ1bnNldHVwIi8+CkBAIC05MCw3ICs5MCw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4gVXNhZ2U6CisgICAgPGVjaG8+IFVzYWdlOgogICAgID09PT09PT09IFRhcmdldHMgYnkgZXhlY3V0aW9uIGdyYW51bGFyaXR5ID09PT09PT09PQogCiAgICAgYW50IGNsZWFuIChDbGVhbnMgYWxsIHR4biB0ZXN0cykKQEAgLTEwNywxMSArMTA3LDExIEBACiAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSB0eG4gdGVzdHMpCiAKICAgICA9PT09PSBUYXJnZXRzIGJ5IHRlY2hub2xveSBhbmQgZXhlY3V0aW9uIGdyYW51bGFyaXR5ID09PT09PQotICAgIE5vdGU6IFJ1biB0aGUgY29tbWFuZCBvZiB0aGUgZm9sbG93aW5nIHR5cGU6IAorICAgIE5vdGU6IFJ1biB0aGUgY29tbWFuZCBvZiB0aGUgZm9sbG93aW5nIHR5cGU6CiAKICAgICAgICAgICAgICUgYW50IHR4Z2xvYmFsIC1EdHhuLXRhcmdldD1jbGVhbgogCiAgICAgdG8gcnVuIHRoZSAnY2xlYW4nIHRhcmdldCBmb3IgJ3N0YXRlbGVzcycgdGVzdHMKLQk8L2VjaG8+CisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvdHJhbnNhY3Rpb24vdHhnbG9iYWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3RyYW5zYWN0aW9uL3R4Z2xvYmFsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTIxYzk1Ni4uNTk3NDRjOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvdHJhbnNhY3Rpb24vdHhnbG9iYWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy90cmFuc2FjdGlvbi90eGdsb2JhbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ0cmFuc2FjdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CkBAIC0yMyw3ICsyMyw3IEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9InR4Z2xvYmFsIi8+ICAgICAgICAgCi08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9L3R4Z2xvYmFsLWNsaWVudC5qYXIiLz4gCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9InR4Z2xvYmFsIi8+ICAgICAgICBcdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS90eGdsb2JhbC1jbGllbnQuamFyIi8+XHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iamRiYy5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamF2YXguc3FsLlhBRGF0YVNvdXJjZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvdHJhbnNhY3Rpb24vdHhnbG9iYWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvdHJhbnNhY3Rpb24vdHhnbG9iYWwvYnVpbGQueG1sCmluZGV4IGRkY2RjMzMuLjlkZTVmNDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3RyYW5zYWN0aW9uL3R4Z2xvYmFsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy90cmFuc2FjdGlvbi90eGdsb2JhbC9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYi9iZWFuQiIvPgpAQCAtNTAsOCArNTAsOCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC04NCwxMSArODQsMTEgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvczFxZURCMSIvPgpAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KLSAgICAgICAgICA8cGFyYW0gbmFtZT0iZGIudXJsIiAKKyAgICAgICAgICA8cGFyYW0gbmFtZT0iZGIudXJsIgogICAgICAgICAgIHZhbHVlPSJqZGJjOnBvaW50YmFzZTpzZXJ2ZXI6Ly8ke2RiLmhvc3R9OjkwOTMvc3VuLWFwcHNlcnYtc2FtcGxlcyIvPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvdHJhbnNhY3Rpb24vdHhnbG9iYWwvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvdHJhbnNhY3Rpb24vdHhnbG9iYWwvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGE5M2EyOWMuLmVlYjkyOTMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3RyYW5zYWN0aW9uL3R4Z2xvYmFsL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy90cmFuc2FjdGlvbi90eGdsb2JhbC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMyLDE1ICszMiwxNSBAQAogICAgIHB1YmxpYyBDbGllbnQoKSB7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeyAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblN0YXJ0aW5nIFR4Z2xvYmFsIFRlc3QgU3VpdGUiKTsgIAotICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOyAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5TdGFydGluZyBUeGdsb2JhbCBUZXN0IFN1aXRlIik7CisgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAKICAgICAgICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBhbmQgaG9tZSBvYmplY3QKICAgICAgICAgY2xpZW50LnNldHVwKCk7CiAKICAgICAgICAgLy8gcnVuIHRoZSB0ZXN0cwotICAgICAgICBjbGllbnQucnVuVGVzdENsaWVudCgpOyAgIAorICAgICAgICBjbGllbnQucnVuVGVzdENsaWVudCgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldHVwKCkgewpAQCAtNzMsNyArNzMsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RUeENvbW1pdCgpIHsKLSAgICAgICAgdHJ5IHsgIAorICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRlIEJlYW5BOjp0ZXN0VHhDb21taXQiKTsKIAogICAgICAgICAgICAgVHhSZW1vdGVBIGJlYW5BID0gaG9tZS5jcmVhdGUoKTsKQEAgLTgxLDcgKzgxLDcgQEAKIAogICAgICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoInR4Z2xvYmFsIHRlc3RUeENvbW1pdDogIiwgc3RhdHVzLlBBU1MpOwotICAgICAgICAgICAgfSBlbHNlIHsJIAorICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKCJ0eGdsb2JhbCB0ZXN0VHhDb21taXQ6ICIsIHN0YXR1cy5GQUlMKTsKICAgICAgICAgICAgIH0KIApAQCAtOTQsNyArOTQsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RUeFJvbGxiYWNrKCkgewotICAgICAgICB0cnkgeyAgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGUgQmVhbkE6OnRlc3RUeFJvbGxiYWNrIik7CiAKICAgICAgICAgICAgIFR4UmVtb3RlQSBiZWFuQSA9IGhvbWUuY3JlYXRlKCk7CkBAIC0xMDIsNyArMTAyLDcgQEAKIAogICAgICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoInR4Z2xvYmFsIHRlc3RUeFJvbGxiYWNrOiAiLCBzdGF0dXMuUEFTUyk7Ci0gICAgICAgICAgICB9IGVsc2UgewkgCisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoInR4Z2xvYmFsIHRlc3RUeFJvbGxiYWNrOiAiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3RyYW5zYWN0aW9uL3R4Z2xvYmFsL2VqYi9iZWFuQS9UeEJlYW5BLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy90cmFuc2FjdGlvbi90eGdsb2JhbC9lamIvYmVhbkEvVHhCZWFuQS5qYXZhCmluZGV4IGFkNDg4YjYuLjkzOTI2MjggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3RyYW5zYWN0aW9uL3R4Z2xvYmFsL2VqYi9iZWFuQS9UeEJlYW5BLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvdHJhbnNhY3Rpb24vdHhnbG9iYWwvZWpiL2JlYW5BL1R4QmVhbkEuamF2YQpAQCAtNTUsNyArNTUsNyBAQAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlamJSZW1vdmUgaW4gQmVhbkEiKTsKICAgICB9Ci0gIAorCiAgICAgcHVibGljIHZvaWQgZWpiRGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlamJEZXN0cm95IGluIEJlYW5BIik7CiAgICAgfQpAQCAtMTEyLDcgKzExMiw3IEBACiAgICAgICAgICAgICBpZiAoIChiZWFuQiA9PSBudWxsKSB8fCAodHggPT0gbnVsbCkgKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICB9Ci0gICAgIAorCiAgICAgICAgICAgICB0eC5iZWdpbigpOwogICAgICAgICAgICAgYmVhbkIuZGVsZXRlKCJBMTAwMSIpOwogICAgICAgICAgICAgYmVhbkIuaW5zZXJ0KCJBMTAwMyIsIDgwMDApOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvdHJhbnNhY3Rpb24vdHhnbG9iYWwvZWpiL2JlYW5CL1R4QmVhbkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3RyYW5zYWN0aW9uL3R4Z2xvYmFsL2VqYi9iZWFuQi9UeEJlYW5CLmphdmEKaW5kZXggNzRkZDNhMy4uM2FjNzhlYyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvdHJhbnNhY3Rpb24vdHhnbG9iYWwvZWpiL2JlYW5CL1R4QmVhbkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy90cmFuc2FjdGlvbi90eGdsb2JhbC9lamIvYmVhbkIvVHhCZWFuQi5qYXZhCkBAIC00NSwxNCArNDUsMTQgQEAKICAgICBwcml2YXRlIFN0cmluZyBkYlVSTDEgPSBudWxsOwogICAgIHByaXZhdGUgU3RyaW5nIGRiVVJMMiA9IG51bGw7CiAgICAgcHJpdmF0ZSBTdHJpbmcgcGFzc3dvcmQgPSBudWxsOwotICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY3R4ID0gbnVsbDsgICAKKyAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGN0eCA9IG51bGw7CiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFmYWN0b3J5ID0gbnVsbDsKIAogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8vIENvbnRhaW5lciBSZXF1aXJlZCBNZXRob2RzCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzZXRTZXNzaW9uQ29udGV4dCBpbiBCZWFuQiIpOyAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic2V0U2Vzc2lvbkNvbnRleHQgaW4gQmVhbkIiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGN0eCA9IHNjOwogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwpAQCAtNjgsMTMgKzY4LDEzIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYkNyZWF0ZSBpbiBCZWFuQiIpOyAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiQ3JlYXRlIGluIEJlYW5CIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcWZhY3RvcnkgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkgCisKKyAgICAgICAgICAgIHFmYWN0b3J5ID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpCiAgICAgICAgICAgICBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvUUNGYWN0b3J5Iik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcXVldWUgPSAoUXVldWUpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9TYW1wbGVRdWV1ZSIpOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgJiAiICsKQEAgLTgzLDIyICs4MywyMiBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gaW4gZWpiQ3JlYXRlOiAiICsgZXgudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgIH0gCisgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiRGVzdHJveSgpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlamJEZXN0cm95IGluIEJlYW5CIik7ICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlamJEZXN0cm95IGluIEJlYW5CIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiQWN0aXZhdGUgaW4gQmVhbkIiKTsgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYkFjdGl2YXRlIGluIEJlYW5CIik7CiAgICAgfQotICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlamJQYXNzaXZhdGUgaW4gQmVhbkIiKTsgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYlBhc3NpdmF0ZSBpbiBCZWFuQiIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlamJSZW1vdmUgaW4gQmVhbkIiKTsgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYlJlbW92ZSBpbiBCZWFuQiIpOwogICAgIH0KIAogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgcHVibGljIHZvaWQgaW5zZXJ0KFN0cmluZyBhY2MsIGZsb2F0IGJhbCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgIENvbm5lY3Rpb24gY29uMSA9IG51bGw7CiAgICAgICAgIENvbm5lY3Rpb24gY29uMiA9IG51bGw7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW5zZXJ0IGluIEJlYW5CIik7ICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnNlcnQgaW4gQmVhbkIiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGNvbjEgPSBnZXRDb25uZWN0aW9uKGRiVVJMMSk7CiAgICAgICAgICAgICBTdGF0ZW1lbnQgc3RtdDEgPSBjb24xLmNyZWF0ZVN0YXRlbWVudCgpOwpAQCAtMTM4LDcgKzEzOCw3IEBACiAgICAgcHVibGljIHZvaWQgZGVsZXRlKFN0cmluZyBhY2NvdW50KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb24xID0gbnVsbDsKICAgICAgICAgQ29ubmVjdGlvbiBjb24yID0gbnVsbDsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkZWxldGUgaW4gQmVhbkIiKTsgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRlbGV0ZSBpbiBCZWFuQiIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgY29uMSA9IGdldENvbm5lY3Rpb24oZGJVUkwxKTsKICAgICAgICAgICAgIFN0YXRlbWVudCBzdG10MSA9IGNvbjEuY3JlYXRlU3RhdGVtZW50KCk7CkBAIC0xNjcsNyArMTY3LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZW5kSk1TTWVzc2FnZShTdHJpbmcgbXNnKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzZW5kSk1TTWVzc2FnZSBpbiBCZWFuQiIpOyAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic2VuZEpNU01lc3NhZ2UgaW4gQmVhbkIiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29ubiA9IHFmYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gcWNvbm4uY3JlYXRlUXVldWVTZXNzaW9uKHRydWUsIDApOwpAQCAtMTkwLDcgKzE5MCw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gdmVyaWZ5UmVzdWx0cyhTdHJpbmcgYWNjb3VudCwgU3RyaW5nIHJlc291cmNlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ2ZXJpZnlSZXN1bHRzIGluIEJlYW5CIik7ICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ2ZXJpZnlSZXN1bHRzIGluIEJlYW5CIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiAocmVzb3VyY2UuZXF1YWxzKCJEQjEiKSkgewogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNoZWNrUmVzdWx0KGdldENvbm5lY3Rpb24oZGJVUkwxKSwgYWNjb3VudCk7CkBAIC0yMjYsMTMgKzIyNiwxMyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrUmVzdWx0KENvbm5lY3Rpb24gY29ubiwgU3RyaW5nIGFjY291bnQpIHsKICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjaGVja1Jlc3VsdCBpbiBCZWFuQiIpOyAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY2hlY2tSZXN1bHQgaW4gQmVhbkIiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIFJlc3VsdFNldCBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIHR4QWNjb3VudCBXSEVSRSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhY2NvdW50ID0gJyIrIGFjY291bnQgKyAiJyIpOwogCi0gICAgICAgICAgICBpZiAoIHJzLm5leHQoKSApIHsgCisgICAgICAgICAgICBpZiAoIHJzLm5leHQoKSApIHsKICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTI0OCw3ICsyNDgsNyBAQAogCiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oU3RyaW5nIGRiVVJMKSB7CiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXRDb25uZWN0aW9uIGluIEJlYW5CIik7ICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXRDb25uZWN0aW9uIGluIEJlYW5CIik7CiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIENvbnRleHQgY29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cChkYlVSTCk7CkBAIC0yNTYsNyArMjU2LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IERCIENvbm5lY3Rpb24gU3VjY2Vzc2Z1bGx5Li4uIik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gaW4gZ2V0Q29ubmVjdGlvbjogIiArIGV4LnRvU3RyaW5nKCkpOwotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvbjsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy90cmFuc2FjdGlvbi90eGdsb2JhbC9lamIvYmVhbkIvVHhSZW1vdGVCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy90cmFuc2FjdGlvbi90eGdsb2JhbC9lamIvYmVhbkIvVHhSZW1vdGVCLmphdmEKaW5kZXggZjA4MzJmMS4uOGI4YjZjNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvdHJhbnNhY3Rpb24vdHhnbG9iYWwvZWpiL2JlYW5CL1R4UmVtb3RlQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3RyYW5zYWN0aW9uL3R4Z2xvYmFsL2VqYi9iZWFuQi9UeFJlbW90ZUIuamF2YQpAQCAtMjMsNiArMjMsNiBAQAogICAgIHB1YmxpYyB2b2lkIGRlbGV0ZShTdHJpbmcgYWNjb3VudCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKICAgICBwdWJsaWMgdm9pZCBpbnNlcnQoU3RyaW5nIGFjY291bnQsIGZsb2F0IGJhbGFuY2UpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgICAgcHVibGljIHZvaWQgc2VuZEpNU01lc3NhZ2UoU3RyaW5nIG1zZykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICBwdWJsaWMgYm9vbGVhbiB2ZXJpZnlSZXN1bHRzKFN0cmluZyBhY2NvdW50LCBTdHJpbmcgcmVzb3VyY2UpIAorICAgIHB1YmxpYyBib29sZWFuIHZlcmlmeVJlc3VsdHMoU3RyaW5nIGFjY291bnQsIFN0cmluZyByZXNvdXJjZSkKICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL2Jvb2tzdG9yZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL2Jvb2tzdG9yZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDJkYzYwY2YuLmQ1YjJiMWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9ib29rc3RvcmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvYm9va3N0b3JlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1ib29rc3RvcmUiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWJvb2tzdG9yZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9ImJvb2tzdG9yZTMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9ib29rc3RvcmUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL2Jvb2tzdG9yZS9idWlsZC54bWwKaW5kZXggZmE4MzgyYy4uZTA2ODM5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL2Jvb2tzdG9yZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL2Jvb2tzdG9yZS9idWlsZC54bWwKQEAgLTMwLDI4ICszMCwyOCBAQAogICAgICZjb21tb25CdWlsZDsKICAgICAmY29tbW9uUnVuOwogICAgICZ0ZXN0cHJvcGVydGllczsKLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxzZXR1cCxkZXBsb3ktd2FyLHJ1bi13YXIsIHVuc2V0dXAiLz4KICAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0IiBkZXBlbmRzPSJidWlsZCxkZXBsb3ktd2FyLHJ1bi13YXIsdW5kZXBsb3ktd2FyIi8+Ci0gICAgCisKIAogPCEtLQotCTxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJydW4td2FyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1lYXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1bi1lYXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWVhciIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4td2FyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1lYXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1lYXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWVhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgogICAgIDwvdGFyZ2V0PgogLS0+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV8ke2RiLnR5cGV9LnNxbCIvPgpAQCAtNTksMTYgKzU5LDE2IEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamRiYy1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJ3ZWItYm9va3N0b3JlLXBvb2wiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvQm9va0RCIi8+Ci0gICAgPC9hbnRjYWxsPiAgICAKLSAgICA8L3RhcmdldD4gICAKLSAgICAKKyAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InNxbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV8ke2RiLnR5cGV9LnNxbCIvPgogICAgIDwvYW50Y2FsbD4KLSAgICAKKwogICAgIDwvdGFyZ2V0PgotICAKKwogCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgpAQCAtODAsNDcgKzgwLDQ3IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL0Jvb2tEQiIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNyYyIvPgotICAgICAgICA8L2FudGNhbGw+ICAgICAgICAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKLSAgICA8cHJvcGVydHkgbmFtZT0idGxkcy1leGlzdCIgdmFsdWU9InllcyIvPiAKKyAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CisgICAgPHByb3BlcnR5IG5hbWU9InRsZHMtZXhpc3QiIHZhbHVlPSJ5ZXMiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvcHktdGxkcyIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29weS10YWdmaWxlcyIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKLSAgICA8L2FudGNhbGw+ICAgICAgIAotICAgIAorICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CisgICAgPC9hbnRjYWxsPgorCiAgICA8IS0tIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIvPi0tPgotICAgIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKworICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktZWFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktd2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAgCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LXdhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLXdhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJqc3RsLXNlcnZsZXQgKHN0YW5kLWFsb25lIHdhciBiYXNlZCkiLz4KLQk8L2FudGNhbGw+CisgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9ImpzdGwtc2VydmxldCAoc3RhbmQtYWxvbmUgd2FyIGJhc2VkKSIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL2Jvb2tzdG9yZS9zcWwvY3JlYXRlX2RlcmJ5LnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9ib29rc3RvcmUvc3FsL2NyZWF0ZV9kZXJieS5zcWwKaW5kZXggYTRlYzZjOS4uYTAyYjU5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL2Jvb2tzdG9yZS9zcWwvY3JlYXRlX2RlcmJ5LnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvYm9va3N0b3JlL3NxbC9jcmVhdGVfZGVyYnkuc3FsCkBAIC0xLDEzICsxLDEzIEBACiBEUk9QIFRBQkxFIGJvb2tzOwogCiBDUkVBVEUgVEFCTEUgYm9va3MgKAotCUlEIFZBUkNIQVIoOCksCi0JU1VSTkFNRSBWQVJDSEFSKDI0KSwKLQlGSVJTVF9OQU1FIFZBUkNIQVIoMjQpLAotCVRJVExFIFZBUkNIQVIoOTYpLAotCVBSSUNFIEZMT0FULAotCVlFQVIxIAkJSU5URUdFUgkJTk9UIE5VTEwsCisgICAgSUQgVkFSQ0hBUig4KSwKKyAgICBTVVJOQU1FIFZBUkNIQVIoMjQpLAorICAgIEZJUlNUX05BTUUgVkFSQ0hBUigyNCksCisgICAgVElUTEUgVkFSQ0hBUig5NiksCisgICAgUFJJQ0UgRkxPQVQsCisgICAgWUVBUjEgICAgICAgICBJTlRFR0VSICAgICAgICBOT1QgTlVMTCwKICAgICAgICAgREVTQ1JJUFRJT04gVkFSQ0hBUigzMCksCi0JSU5WRU5UT1JZIElOVEVHRVIgTk9UIE5VTEwKKyAgICBJTlZFTlRPUlkgSU5URUdFUiBOT1QgTlVMTAogKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL2Jvb2tzdG9yZS9zcmMvbWVzc2FnZXMvQm9va3N0b3JlTWVzc2FnZXMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9ib29rc3RvcmUvc3JjL21lc3NhZ2VzL0Jvb2tzdG9yZU1lc3NhZ2VzLmphdmEKaW5kZXggM2IxODE3ZS4uNWY1OGU3MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL2Jvb2tzdG9yZS9zcmMvbWVzc2FnZXMvQm9va3N0b3JlTWVzc2FnZXMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvYm9va3N0b3JlL3NyYy9tZXNzYWdlcy9Cb29rc3RvcmVNZXNzYWdlcy5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgIHsgIlRpdGxlQ2FzaGllciIsICJDYXNoaWVyIiB9LAogICAgICAgICB7ICJUaXRsZUJvb2tEZXNjcmlwdGlvbiIsICJCb29rIERlc2NyaXB0aW9uIiB9LAogICAgICAgICB7ICJWaXNpdG9yIiwgIllvdSBhcmUgdmlzaXRvciBudW1iZXIgIiB9LAotICAgICAgICAKKwogICAgICAgICB7ICJXaGF0IiwgIldoYXQgV2VcJ3JlIFJlYWRpbmciIH0sCiAgICAgICAgIHsKICAgICAgICAgICAgICJUYWxrIiwKQEAgLTc5LDE0ICs3OSwxNCBAQAogICAgICAgICAgICAgIllvdXIgb3JkZXIgY291bGQgbm90IGJlIGNvbXBsZXRlZCBkdWUgdG8gaW5zdWZmaWNpZW50IGludmVudG9yeS4iCiAgICAgICAgIH0sCiAgICAgICAgIHsgIldpdGgiLCAiV2l0aCIgfSwKLSAgICAgICAgCisKICAgICAgICAgeyAiU2hpcHBpbmciLCAiU2hpcHBpbmc6IiB9LAogICAgICAgICB7ICJRdWlja1NoaXAiLCAiUXVpY2sgU2hpcHBpbmciIH0sCiAgICAgICAgIHsgIk5vcm1hbFNoaXAiLCAiTm9ybWFsIFNoaXBwaW5nIiB9LAogICAgICAgICB7ICJTYXZlclNoaXAiLCAiU2F2ZXIgU2hpcHBpbmciIH0sCiAgICAgICAgIHsgIlNoaXBEYXRlIiwgIllvdXIgb3JkZXIgd2lsbCBiZSBzaGlwcGVkIG9uICIgfSwKICAgICAgICAgeyAiU2hpcERhdGVMQyIsICJ5b3VyIG9yZGVyIHdpbGwgYmUgc2hpcHBlZCBvbiAiIH0sCi0gICAgICAgIAorCiAgICAgICAgIHsgIkNvbmZpcm1BZGQiLCAiWW91IGp1c3QgYWRkZWQgXCJ7MH1cIiB0byB5b3VyIHNob3BwaW5nIGNhcnQiIH0sCiAgICAgICAgIHsgIkNvbmZpcm1SZW1vdmUiLCAiWW91IGp1c3QgcmVtb3ZlZCBcInswfVwiIGZyb20geW91ciBzaG9wcGluZyBjYXJ0IiB9LAogICAgICAgICB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvYm9va3N0b3JlL3NyYy9tZXNzYWdlcy9Cb29rc3RvcmVNZXNzYWdlc19kZV9ERS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL2Jvb2tzdG9yZS9zcmMvbWVzc2FnZXMvQm9va3N0b3JlTWVzc2FnZXNfZGVfREUuamF2YQppbmRleCBlOGY3ZjQxLi4xYThhYTEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvYm9va3N0b3JlL3NyYy9tZXNzYWdlcy9Cb29rc3RvcmVNZXNzYWdlc19kZV9ERS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9ib29rc3RvcmUvc3JjL21lc3NhZ2VzL0Jvb2tzdG9yZU1lc3NhZ2VzX2RlX0RFLmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgeyAiVGl0bGVDYXNoaWVyIiwgIkthc3NlIiB9LAogICAgICAgICB7ICJUaXRsZUJvb2tEZXNjcmlwdGlvbiIsICJCdWNoYmVzY2hyZWlidW5nIiB9LAogICAgICAgICB7ICJWaXNpdG9yIiwgIlNpZSBzaW5kIEJlc3VjaGVyIE51bW1lciAiIH0sCi0gICAgICAgIAorCiAgICAgICAgIHsgIldoYXQiLCAiV2FzIHdpciBnZXJhZGUgbGVzZW4iIH0sCiAgICAgICAgIHsKICAgICAgICAgICAgICJUYWxrIiwKQEAgLTc5LDE0ICs3OSwxNCBAQAogICAgICAgICAgICAgIklocmUgQmVzdGVsbHVuZyBrb25udGUgYXVmZ3J1bmQgdW56dXJlaWNoZW5kZW4gSW52ZW50YXJzIG5pY2h0IGF1c2dlZnVlaHJ0IHdlcmRlbi4iCiAgICAgICAgIH0sCiAgICAgICAgIHsgIldpdGgiLCAiTWl0IiB9LAotICAgICAgICAKKwogICAgICAgICB7ICJTaGlwcGluZyIsICJWZXJzYW5kOiIgfSwKICAgICAgICAgeyAiUXVpY2tTaGlwIiwgIlNjaG5lbGx2ZXJzYW5kIiB9LAogICAgICAgICB7ICJOb3JtYWxTaGlwIiwgIk5vcm1hbHZlcnNhbmQiIH0sCiAgICAgICAgIHsgIlNhdmVyU2hpcCIsICJTcGFyLU9wdGlvbiBWZXJzYW5kIiB9LAogICAgICAgICB7ICJTaGlwRGF0ZSIsICJJaHJlIFNlbmR1bmcgd2lyZCBnZWxpZWZlcnQgYW0gIiB9LAogICAgICAgICB7ICJTaGlwRGF0ZUxDIiwgImlocmUgc2VuZHVuZyB3aXJkIGdlbGllZmVydCBhbSAiIH0sCi0gICAgICAgIAorCiAgICAgICAgIHsgIkNvbmZpcm1BZGQiLCAiU2llIGhhYmVuIGdlcmFkZSBcInswfVwiIGluIElocmVuIEVpbmthdWZzd2FnZW4gZ2VsZWd0IiB9LAogICAgICAgICB7CiAgICAgICAgICAgICAiQ29uZmlybVJlbW92ZSIsCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvYm9va3N0b3JlL3NyYy9tZXNzYWdlcy9Cb29rc3RvcmVNZXNzYWdlc19lbl9VUy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL2Jvb2tzdG9yZS9zcmMvbWVzc2FnZXMvQm9va3N0b3JlTWVzc2FnZXNfZW5fVVMuamF2YQppbmRleCA5ZDk2NWJkLi5hNTQzZGFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvYm9va3N0b3JlL3NyYy9tZXNzYWdlcy9Cb29rc3RvcmVNZXNzYWdlc19lbl9VUy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9ib29rc3RvcmUvc3JjL21lc3NhZ2VzL0Jvb2tzdG9yZU1lc3NhZ2VzX2VuX1VTLmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgeyAiVGl0bGVDYXNoaWVyIiwgIkNhc2hpZXIiIH0sCiAgICAgICAgIHsgIlRpdGxlQm9va0Rlc2NyaXB0aW9uIiwgIkJvb2sgRGVzY3JpcHRpb24iIH0sCiAgICAgICAgIHsgIlZpc2l0b3IiLCAiWW91IGFyZSB2aXNpdG9yIG51bWJlciAiIH0sCi0gICAgICAgIAorCiAgICAgICAgIHsgIldoYXQiLCAiV2hhdCBXZVwncmUgUmVhZGluZyIgfSwKICAgICAgICAgewogICAgICAgICAgICAgIlRhbGsiLApAQCAtNzksMTQgKzc5LDE0IEBACiAgICAgICAgICAgICAiWW91ciBvcmRlciBjb3VsZCBub3QgYmUgY29tcGxldGVkIGR1ZSB0byBpbnN1ZmZpY2llbnQgaW52ZW50b3J5LiIKICAgICAgICAgfSwKICAgICAgICAgeyAiV2l0aCIsICJXaXRoIiB9LAotICAgICAgICAKKwogICAgICAgICB7ICJTaGlwcGluZyIsICJTaGlwcGluZzoiIH0sCiAgICAgICAgIHsgIlF1aWNrU2hpcCIsICJRdWljayBTaGlwcGluZyIgfSwKICAgICAgICAgeyAiTm9ybWFsU2hpcCIsICJOb3JtYWwgU2hpcHBpbmciIH0sCiAgICAgICAgIHsgIlNhdmVyU2hpcCIsICJTYXZlciBTaGlwcGluZyIgfSwKICAgICAgICAgeyAiU2hpcERhdGUiLCAiWW91ciBvcmRlciB3aWxsIGJlIHNoaXBwZWQgb24gIiB9LAogICAgICAgICB7ICJTaGlwRGF0ZUxDIiwgInlvdXIgb3JkZXIgd2lsbCBiZSBzaGlwcGVkIG9uICIgfSwKLSAgICAgICAgCisKICAgICAgICAgeyAiQ29uZmlybUFkZCIsICJZb3UganVzdCBhZGRlZCBcInswfVwiIHRvIHlvdXIgc2hvcHBpbmcgY2FydCIgfSwKICAgICAgICAgeyAiQ29uZmlybVJlbW92ZSIsICJZb3UganVzdCByZW1vdmVkIFwiezB9XCIgZnJvbSB5b3VyIHNob3BwaW5nIGNhcnQiIH0sCiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9ib29rc3RvcmUvc3JjL21lc3NhZ2VzL0Jvb2tzdG9yZU1lc3NhZ2VzX2VzX01YLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvYm9va3N0b3JlL3NyYy9tZXNzYWdlcy9Cb29rc3RvcmVNZXNzYWdlc19lc19NWC5qYXZhCmluZGV4IGFjNGM2MWQuLjgzZGY0N2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9ib29rc3RvcmUvc3JjL21lc3NhZ2VzL0Jvb2tzdG9yZU1lc3NhZ2VzX2VzX01YLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL2Jvb2tzdG9yZS9zcmMvbWVzc2FnZXMvQm9va3N0b3JlTWVzc2FnZXNfZXNfTVguamF2YQpAQCAtODAsNyArODAsNyBAQAogICAgICAgICB7ICJDYXRhbG9nIiwgIlZvbHZlciBhbCBDYXQiICsgIlx1MDBlMSIgKyAibG9nbyIgfSwKICAgICAgICAgeyAiVGhhbmtZb3UiLCAiR3JhY2lhcyBwb3Igc3UgY29tcHJhICIgfSwKICAgICAgICAgeyAiVGhhbmtZb3VQYXJhbSIsICJHcmFjaWFzLCB7MH0gcG9yIGNvbXByYXIgc3VzIGxpYnJvcyBhcXVpIiB9LAotICAgICAgICAKKwogICAgICAgICB7ICJPcmRlckVycm9yIiwgIk5vIHNlIHB1ZG8gY29tcGxldGFyIHN1IHBlZGlkbyBkZWJpZG8gYSBlc2Nhc2V6IGRlIGludmVudGFyaW8uIiB9LAogICAgICAgICB7ICJXaXRoIiwgIkNvbiIgfSwKICAgICAgICAgeyAiU2hpcHBpbmciLCAiRW52IiArICJcdTAwZWQiICsgIm86IiB9LApAQCAtOTQsNDYgKzk0LDQ2IEBACiAgICAgICAgICAgICAiQWNhYmEgZGUgYSIgKyAiXHUwMGYxIiArICJhZGlyIFwiezB9XCIgYSBzdSBjZXN0YSBkZSBjb21wcmFzIgogICAgICAgICB9LAogICAgICAgICB7ICJDb25maXJtUmVtb3ZlIiwgIkFjYWJhIGRlIHNhY2FyIFwiezB9XCIgZGUgc3UgY2VzdGEgZGUgY29tcHJhcyIgfSwKLSAgICAgICAgCisKICAgICAgICAgewogICAgICAgICAgICAgIkNhcnRJdGVtQ291bnQiLAotICAgICAgICAgICAgCisKICAgICAgICAgICAgICJTdSBjZXN0YSBkZSBjb21wcmFzIGNvbnRpZW5lICIgKyAiezAsY2hvaWNlLDAjbmluZyIgKyAiXHUwMGZhIiArCiAgICAgICAgICAgICAibiBhcnRpY3Vsb3wxI3VuIGFydGljdWxvfDE8IHswfSBhcnRpY3Vsb3N9IgogICAgICAgICB9LAotICAgICAgICAKKwogICAgICAgICB7CiAgICAgICAgICAgICAiTmV3c2xldHRlcnMiLAogICAgICAgICAgICAgIlN1c2NyaXBjaSIgKyAiXHUwMGYzIiArICJuIGdyYXR1aXRhIGEgbnVlc3RybyBib2xldCIgKyAiXHUwMGVkIiArCiAgICAgICAgICAgICAibjoiCiAgICAgICAgIH0sCi0gICAgICAgIAorCiAgICAgICAgIHsgIlRoYW5rc01zZyIsICJHcmFjaWFzLiBQb3IgZmF2b3IgY2xpcXVlZSBhcXVpIHBhcmEgY29tcHJhciBzdXMgbGlicm9zLiIgfSwKLSAgICAgICAgCisKICAgICAgICAgewogICAgICAgICAgICAgIkR1a2VGYW5DbHViIiwKICAgICAgICAgICAgICJEZXNlYXIiICsgIlx1MDBlZCIgKwogICAgICAgICAgICAgImEgaGFjZXJtZSBtaWVtYnJvIGRlbCBEdWtlIEZhbiBDbHViIGdyYXR1aXRhbWVudGUgY29uIG1pIGNvbXByYSBkZSBtYXMgZGUgMTAwIiArCiAgICAgICAgICAgICAiXHUyMGEwIgogICAgICAgICB9LAotICAgICAgICAKKwogICAgICAgICB7ICJVcGRhdGVRdWFudGl0aWVzIiwgIkFjdHVhbGljZSBsYXMgY2FudGlkYWRlcyIgfSwKLSAgICAgICAgCisKICAgICAgICAgewogICAgICAgICAgICAgIlF1YW50aXRpZXNVcGRhdGVkIiwKICAgICAgICAgICAgICJBY2FiYSBkZSBhY3R1YWxpemFyIGxhcyBjYW50aWRhZGVzIGVuIHN1IGNlc3RhIGRlIGNvbXByYXMiCiAgICAgICAgIH0sCi0gICAgICAgIAorCiAgICAgICAgIHsgIlF1YW50aXRpZXMiLCAiQ29waWFzIGRlbCBsaWJybyBlbiBzdSBjZXN0YSBkZSBjb21wcmFzIiB9LAotICAgICAgICAKKwogICAgICAgICB7ICJDaG9vc2VMb2NhbGUiLCAiRWxpamEgc3UgSWRpb21hIGVuIGVsIE1hcGEiIH0sCi0gICAgICAgIAorCiAgICAgICAgIHsgIkVuZ2xpc2giLCAiaW5nbCIgKyAiXHUwMGU5IiArICJzIiB9LAotICAgICAgICAKKwogICAgICAgICB7ICJHZXJtYW4iLCAiYWwiICsgIlx1MDBlOSIgKyAibWFuIiB9LAotICAgICAgICAKKwogICAgICAgICB7ICJTcGFuaXNoIiwgImVzcGEiICsgIlx1MDBmMSIgKyAib2wiIH0sCi0gICAgICAgIAorCiAgICAgICAgIHsgIkZyZW5jaCIsICJmcmFuYyIgKyAiXHUwMGU5IiArICJlcyIgfSwKICAgICAgICAgeyAiQ3VzdG9tZXJJbmZvIiwgIkluY29ycG9yZSBzdSBpbmZvcm1hY2kiICsgIlx1MDBmMyIgKwogICAgICAgICAgICAgIm4gZW4gbGEgZm9ybWEuIiB9LApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL2Jvb2tzdG9yZS9zcmMvdGVtcGxhdGUvSW5zZXJ0VGFnLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvYm9va3N0b3JlL3NyYy90ZW1wbGF0ZS9JbnNlcnRUYWcuamF2YQppbmRleCAzMGM2N2M2Li42MTM5ZTY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvYm9va3N0b3JlL3NyYy90ZW1wbGF0ZS9JbnNlcnRUYWcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvYm9va3N0b3JlL3NyYy90ZW1wbGF0ZS9JbnNlcnRUYWcuamF2YQpAQCAtNjUsNyArNjUsNyBAQAogICAgICAgICAgICAgICAgIGNvbnRleHQuZ2V0T3V0KCkKICAgICAgICAgICAgICAgICAgICAgICAgLnByaW50KHBhcmFtZXRlci5nZXRWYWx1ZSgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGlmIHBhcmFtZXRlciBpcyBpbmRpcmVjdCwgaW5jbHVkZSByZXN1bHRzIG9mIGRpc3BhdGNoaW5nIHRvIHBhZ2UgCisgICAgICAgICAgICAvLyBpZiBwYXJhbWV0ZXIgaXMgaW5kaXJlY3QsIGluY2x1ZGUgcmVzdWx0cyBvZiBkaXNwYXRjaGluZyB0byBwYWdlCiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoKHBhcmFtZXRlciAhPSBudWxsKSAmJiAocGFyYW1ldGVyLmdldFZhbHVlKCkgIT0gbnVsbCkpIHsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5pbmNsdWRlKHBhcmFtZXRlci5nZXRWYWx1ZSgpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvYnVpbGQueG1sCmluZGV4IGJhZjhlOWMuLjBhMzI2ZjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL2J1aWxkLnhtbApAQCAtMjcsNDkgKzI3LDQ5IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViLXRhcmdldCIgdmFsdWU9ImFsbCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmVqYnRhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYi10YXJnZXQiIHZhbHVlPSJydW4tdGVzdCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmVqYnRhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYi10YXJnZXQiIHZhbHVlPSJjbGVhbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmVqYnRhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYi10YXJnZXQiIHZhbHVlPSJidWlsZCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5lamJ0YXJnZXRzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWItdGFyZ2V0IiB2YWx1ZT0iZGVwbG95Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuZWpidGFyZ2V0cyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViLXRhcmdldCIgdmFsdWU9InVuZGVwbG95Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmVqYnRhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYi10YXJnZXQiIHZhbHVlPSJydW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5lamJ0YXJnZXRzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWItdGFyZ2V0IiB2YWx1ZT0ic2V0dXAiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmVqYnRhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYi10YXJnZXQiIHZhbHVlPSJ1bnNldHVwIi8+CkBAIC05OCw3ICs5OCw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4gVXNhZ2U6CisgICAgPGVjaG8+IFVzYWdlOgogICAgID09PT09PT09IFRhcmdldHMgYnkgZXhlY3V0aW9uIGdyYW51bGFyaXR5ID09PT09PT09PQogCiAgICAgYW50IGNsZWFuIChDbGVhbnMgYWxsIHdlYiB0ZXN0cykKQEAgLTExNSwxMSArMTE1LDExIEBACiAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamIgdGVzdHMpCiAKICAgICA9PT09PSBUYXJnZXRzIGJ5IHRlY2hub2xveSBhbmQgZXhlY3V0aW9uIGdyYW51bGFyaXR5ID09PT09PQotICAgIE5vdGU6IFJ1biB0aGUgY29tbWFuZCBvZiB0aGUgZm9sbG93aW5nIHR5cGU6IAorICAgIE5vdGU6IFJ1biB0aGUgY29tbWFuZCBvZiB0aGUgZm9sbG93aW5nIHR5cGU6CiAKICAgICAgICAgICAgICUgYW50IHN1YmNsYXNzaW5nIC1Ed2ViLXRhcmdldD1jbGVhbgogCiAgICAgdG8gcnVuIHRoZSAnY2xlYW4nIHRhcmdldCBmb3IgJ3N1YmNsYXNzaW5nJyB0ZXN0cwotCTwvZWNobz4KKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvanVzdHNlcnZsZXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9qdXN0c2VydmxldC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGJjMzFjNmIuLjI4NTIwNDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9qdXN0c2VydmxldC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9qdXN0c2VydmxldC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2ltcGxlLXNlcnZsZXQiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNpbXBsZS1zZXJ2bGV0Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0ianVzdHNlcnZsZXQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9qdXN0c2VydmxldC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvanVzdHNlcnZsZXQvYnVpbGQueG1sCmluZGV4IDNkMDY2NTMuLjBiZGU0YzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9qdXN0c2VydmxldC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL2p1c3RzZXJ2bGV0L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsNDMgKzQyLDQzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICA8L2FudGNhbGw+Ci0gICAgICAgCisKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iLz4KLSAgICAKLSAgICA8L3RhcmdldD4gCi0gICAgCisKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgotCTxlY2hvIG1lc3NhZ2U9IiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiLz4KLQk8ZWNobyBtZXNzYWdlPSJ1c2UgdXJsIHNpbXBsZXNlcnZsZXR0ZXN0L2luZGV4Lmh0bWwgdG8gc2VlIGlmIGFwcGxpY2F0aW9uIGRlcGxveWVkIGNvcnJlY3RseSIvPgotCTxlY2hvIG1lc3NhZ2U9InVzZSB1cmwgc2ltcGxlc2VydmxldHRlc3Qvc2ltcGxlc2VydmxldHRlc3QgdG8gc2VlIGlmIHNlcnZsZXQgZXhlY3V0ZXMgZmluZSIvPgotCTxlY2hvIG1lc3NhZ2U9IiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIi8+CisgICAgPGVjaG8gbWVzc2FnZT0idXNlIHVybCBzaW1wbGVzZXJ2bGV0dGVzdC9pbmRleC5odG1sIHRvIHNlZSBpZiBhcHBsaWNhdGlvbiBkZXBsb3llZCBjb3JyZWN0bHkiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJ1c2UgdXJsIHNpbXBsZXNlcnZsZXR0ZXN0L3NpbXBsZXNlcnZsZXR0ZXN0IHRvIHNlZSBpZiBzZXJ2bGV0IGV4ZWN1dGVzIGZpbmUiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIi8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJ3YXItZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KLQk8ZWNobyBtZXNzYWdlPSIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIi8+Ci0JPGVjaG8gbWVzc2FnZT0idXNlIHVybCBqdXN0c2VydmxldC9pbmRleC5odG1sIHRvIHNlZSBpZiBhcHBsaWNhdGlvbiBkZXBsb3llZCBjb3JyZWN0bHkiLz4KLQk8ZWNobyBtZXNzYWdlPSJ1c2UgdXJsIGp1c3RzZXJ2bGV0L3NpbXBsZXNlcnZsZXR0ZXN0IHRvIHNlZSBpZiBzZXJ2bGV0IGV4ZWN1dGVzIGZpbmUiLz4KLQk8ZWNobyBtZXNzYWdlPSIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIi8+CisgICAgPGVjaG8gbWVzc2FnZT0iIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIvPgorICAgIDxlY2hvIG1lc3NhZ2U9InVzZSB1cmwganVzdHNlcnZsZXQvaW5kZXguaHRtbCB0byBzZWUgaWYgYXBwbGljYXRpb24gZGVwbG95ZWQgY29ycmVjdGx5Ii8+CisgICAgPGVjaG8gbWVzc2FnZT0idXNlIHVybCBqdXN0c2VydmxldC9zaW1wbGVzZXJ2bGV0dGVzdCB0byBzZWUgaWYgc2VydmxldCBleGVjdXRlcyBmaW5lIi8+CisgICAgPGVjaG8gbWVzc2FnZT0iIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWJjbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LXdhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iPgotCTwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9qdXN0c2VydmxldC9zZXJ2bGV0L0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvanVzdHNlcnZsZXQvc2VydmxldC9IZWxsby5qYXZhCmluZGV4IGMyYmE2ZGIuLjg5MmYyMGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9qdXN0c2VydmxldC9zZXJ2bGV0L0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL2p1c3RzZXJ2bGV0L3NlcnZsZXQvSGVsbG8uamF2YQpAQCAtNTEsNDMgKzUxLDQzIEBACiAgICAgICAgICAgICAgICAgICAgICAgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAKLQlyZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7Ci0JUHJpbnRXcml0ZXIgd3JpdGVyID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CisgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgIFByaW50V3JpdGVyIHdyaXRlciA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogCi0Jd3JpdGVyLnByaW50bG4oIjxodG1sPiIpOwotCXdyaXRlci5wcmludGxuKCI8aGVhZD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPHRpdGxlPlNhbXBsZSBBcHBsaWNhdGlvbiBTZXJ2bGV0IFBhZ2U8L3RpdGxlPiIpOwotCXdyaXRlci5wcmludGxuKCI8L2hlYWQ+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjxib2R5IGJnY29sb3I9d2hpdGU+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjxodG1sPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8aGVhZD4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPHRpdGxlPlNhbXBsZSBBcHBsaWNhdGlvbiBTZXJ2bGV0IFBhZ2U8L3RpdGxlPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L2hlYWQ+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjxib2R5IGJnY29sb3I9d2hpdGU+Iik7CiAKLQl3cml0ZXIucHJpbnRsbigiPHRhYmxlIGJvcmRlcj1cIjBcIj4iKTsKLQl3cml0ZXIucHJpbnRsbigiPHRyPiIpOwotCXdyaXRlci5wcmludGxuKCI8dGQ+Iik7Ci0JLy93cml0ZXIucHJpbnRsbigiPGltZyBzcmM9XCJpbWFnZXMvdG9tY2F0LmdpZlwiPiIpOwotCXdyaXRlci5wcmludGxuKCI8L3RkPiIpOwotCXdyaXRlci5wcmludGxuKCI8dGQ+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjxoMT5TYW1wbGUgQXBwbGljYXRpb24gU2VydmxldDwvaDE+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIlRoaXMgaXMgdGhlIG91dHB1dCBvZiBhIHNlcnZsZXQgdGhhdCBpcyBwYXJ0IG9mIik7Ci0Jd3JpdGVyLnByaW50bG4oInRoZSBIZWxsbywgV29ybGQgYXBwbGljYXRpb24uICBJdCBkaXNwbGF5cyB0aGUiKTsKLQl3cml0ZXIucHJpbnRsbigicmVxdWVzdCBoZWFkZXJzIGZyb20gdGhlIHJlcXVlc3Qgd2UgYXJlIGN1cnJlbnRseSIpOwotCXdyaXRlci5wcmludGxuKCJwcm9jZXNzaW5nLiIpOwotCXdyaXRlci5wcmludGxuKCI8L3RkPiIpOwotCXdyaXRlci5wcmludGxuKCI8L3RyPiIpOwotCXdyaXRlci5wcmludGxuKCI8L3RhYmxlPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8dGFibGUgYm9yZGVyPVwiMFwiPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8dHI+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjx0ZD4iKTsKKyAgICAvL3dyaXRlci5wcmludGxuKCI8aW1nIHNyYz1cImltYWdlcy90b21jYXQuZ2lmXCI+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjwvdGQ+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjx0ZD4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPGgxPlNhbXBsZSBBcHBsaWNhdGlvbiBTZXJ2bGV0PC9oMT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiVGhpcyBpcyB0aGUgb3V0cHV0IG9mIGEgc2VydmxldCB0aGF0IGlzIHBhcnQgb2YiKTsKKyAgICB3cml0ZXIucHJpbnRsbigidGhlIEhlbGxvLCBXb3JsZCBhcHBsaWNhdGlvbi4gIEl0IGRpc3BsYXlzIHRoZSIpOworICAgIHdyaXRlci5wcmludGxuKCJyZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGUgcmVxdWVzdCB3ZSBhcmUgY3VycmVudGx5Iik7CisgICAgd3JpdGVyLnByaW50bG4oInByb2Nlc3NpbmcuIik7CisgICAgd3JpdGVyLnByaW50bG4oIjwvdGQ+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjwvdHI+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjwvdGFibGU+Iik7CiAKLQl3cml0ZXIucHJpbnRsbigiPHRhYmxlIGJvcmRlcj1cIjBcIiB3aWR0aD1cIjEwMCVcIj4iKTsKLQlFbnVtZXJhdGlvbiBuYW1lcyA9IHJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKLQl3aGlsZSAobmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLQkgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKSBuYW1lcy5uZXh0RWxlbWVudCgpOwotCSAgICB3cml0ZXIucHJpbnRsbigiPHRyPiIpOwotCSAgICB3cml0ZXIucHJpbnRsbigiICA8dGggYWxpZ249XCJyaWdodFwiPiIgKyBuYW1lICsgIjo8L3RoPiIpOwotCSAgICB3cml0ZXIucHJpbnRsbigiICA8dGQ+IiArIHJlcXVlc3QuZ2V0SGVhZGVyKG5hbWUpICsgIjwvdGQ+Iik7Ci0JICAgIHdyaXRlci5wcmludGxuKCI8L3RyPiIpOwotCX0KLQl3cml0ZXIucHJpbnRsbigiPC90YWJsZT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPHRhYmxlIGJvcmRlcj1cIjBcIiB3aWR0aD1cIjEwMCVcIj4iKTsKKyAgICBFbnVtZXJhdGlvbiBuYW1lcyA9IHJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKyAgICB3aGlsZSAobmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKSBuYW1lcy5uZXh0RWxlbWVudCgpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiPHRyPiIpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiICA8dGggYWxpZ249XCJyaWdodFwiPiIgKyBuYW1lICsgIjo8L3RoPiIpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiICA8dGQ+IiArIHJlcXVlc3QuZ2V0SGVhZGVyKG5hbWUpICsgIjwvdGQ+Iik7CisgICAgICAgIHdyaXRlci5wcmludGxuKCI8L3RyPiIpOworICAgIH0KKyAgICB3cml0ZXIucHJpbnRsbigiPC90YWJsZT4iKTsKIAotCXdyaXRlci5wcmludGxuKCI8L2JvZHk+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjwvaHRtbD4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPC9ib2R5PiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L2h0bWw+Iik7CiAKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTJjYzc1ZC4uZGMxOWM5YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE2ICsxNSwxNiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zdWJjbGFzc2luZyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc3ViY2xhc3NpbmciLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9InN1YmNsYXNzaW5nIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3NpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL2J1aWxkLnhtbAppbmRleCAzNmI4YTU4Li5mNGE4ZjgyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3NpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9idWlsZC54bWwKQEAgLTMwLDE0ICszMCwxNCBAQAogICAgICZjb21tb25CdWlsZDsKICAgICAmY29tbW9uUnVuOwogICAgICZ0ZXN0cHJvcGVydGllczsKLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxzZXR1cCxkZXBsb3ktZWFyLCBydW4tZWFyLCB1bmRlcGxveS1lYXIsIHVuc2V0dXAiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveS1lYXIsIHJ1bi1lYXIsIHVuZGVwbG95LWVhciIvPgogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNxbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL3NpbXBsZUJhbmsuc3FsIi8+CkBAIC00OSw5ICs0OSw5IEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamRiYy1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJlamItc3ViY2xhc3NpbmctcG9vbCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9lamItc3ViY2xhc3NpbmciLz4KLSAgICA8L2FudGNhbGw+ICAgIAorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmVzdGFydCI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvZWpiLXN1YmNsYXNzaW5nIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC03NywxOCArNzcsMTggQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgIDwvYW50Y2FsbD4KLSAgICAgICAKKwogICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgogICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktZWFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXZlcmlmeS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTk2LDI2ICs5NiwyNiBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LXdhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi13YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWJjbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0id2ViLXRvLWVqYiAoc3RhbmQtYWxvbmUgd2FyIGJhc2VkKSIvPgotCTwvYW50Y2FsbD4KKyAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0id2ViLXRvLWVqYiAoc3RhbmQtYWxvbmUgd2FyIGJhc2VkKSIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tZWpiIChlYXIgYmFzZWQpIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tZWpiIChlYXIgYmFzZWQpIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS13YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCA3ZDg2YWY1Li4zOWNiYTg4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3NpbmcvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yOSwyMCArMjksMjAgQEAKICAgICAgICAgPHJlcy1yZWYtbmFtZT5qZGJjL1NpbXBsZUJhbms8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qZGJjL2VqYi1zdWJjbGFzc2luZzwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPiAKLSAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+IAotICAgICA8YmVhbi1wb29sPiAKLSAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+IAotICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+IAotICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+IAotICAgICAgICAgPHBvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4gCi0gICAgICA8L2JlYW4tcG9vbD4gCi0gICAgICA8YmVhbi1jYWNoZT4gCi0gICAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+IAotICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkxSVTwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+IAotICAgICAgPC9iZWFuLWNhY2hlPiAKKyAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+CisgICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPgorICAgICA8YmVhbi1wb29sPgorICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+CisgICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgPC9iZWFuLXBvb2w+CisgICAgICA8YmVhbi1jYWNoZT4KKyAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4KKyAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4KKyAgICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KICAgICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPkN1c3RvbWVyQ2hlY2tpbmdFSkI8L2VqYi1uYW1lPgpAQCAtNTEsMjAgKzUxLDIwIEBACiAgICAgICAgIDxyZXMtcmVmLW5hbWU+amRiYy9TaW1wbGVCYW5rPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9lamItc3ViY2xhc3Npbmc8L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4gCi0gICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPiAKLSAgICAgPGJlYW4tcG9vbD4gCi0gICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPiAKLSAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PiAKLSAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPiAKKyAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+CisgICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPgorICAgICA8YmVhbi1wb29sPgorICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+CiAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+Ci0gICAgICA8L2JlYW4tcG9vbD4gCi0gICAgICA8YmVhbi1jYWNoZT4gCisgICAgICA8L2JlYW4tcG9vbD4KKyAgICAgIDxiZWFuLWNhY2hlPgogICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPgogICAgICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgogICAgICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgotICAgICAgPC9iZWFuLWNhY2hlPiAKKyAgICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgogPC9zdW4tZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9lamIvQ3VzdG9tZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9lamIvQ3VzdG9tZXIuamF2YQppbmRleCBkMTkwZGFiLi5kMWZiMjg2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lci5qYXZhCkBAIC00Niw0ICs0Niw0IEBACiAKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YQppbmRleCBjNjA3ODEyLi5lMzY1OWU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YQpAQCAtMjIsNCArMjIsNCBAQAogewogfQogCi0gIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhCmluZGV4IDRjNjAxNzkuLmQ5M2ZkYTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhCkBAIC05NCw1ICs5NCw1IEBACiAgIH0KIAogfQotICAgIAotICAgIAorCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9lamIvQ3VzdG9tZXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9lamIvQ3VzdG9tZXJFSkIuamF2YQppbmRleCBlYzU2NDgxLi43NWE4ZWJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lckVKQi5qYXZhCkBAIC01Myw3ICs1Myw3IEBACiAKICAgcHVibGljIFN0cmluZyBnZXRBZGRyZXNzMSgpCiAgIHsKLSAgICByZXR1cm4gYWRkcmVzczE7IAorICAgIHJldHVybiBhZGRyZXNzMTsKICAgfQogCiAgIHB1YmxpYyBTdHJpbmcgZ2V0QWRkcmVzczIoKQpAQCAtMTM5LDcgKzEzOSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1FMIGV4Y2VwdGlvbiBvY2N1cmVkIGluIGVqYlJlbW92ZSBtZXRob2QiKTsKICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgIH0KLSAgICAKKwogICB9CiAKICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKQpAQCAtMjA2LDEyICsyMDYsMTIgQEAKICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgewogICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTUUxFeGNlcHRpb24gb2NjdXJyZWQgaW4gZWpiTG9hZCgpIG1ldGhvZCIpOwogICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9ICAgCisgICAgfQogICB9CiAKICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQogICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogfQotICAgICAgCi0gICAgCi0gICAgCisKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YQppbmRleCBlZWEzMTkyLi43YzBhZTZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEKQEAgLTIyLDQgKzIyLDQgQEAKIHsKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEKaW5kZXggZmI4NzE5NS4uNjkxZWE0ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhCkBAIC05NSw2ICs5NSw2IEBACiAgIH0KIAogfQotICAgICAgCi0gICAgCi0gICAgCisKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3Npbmcvc2FtcGxlcy9lamIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3Npbmcvc2FtcGxlcy9lamIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyLmphdmEKaW5kZXggMGIyYmNkZS4uMzM5MDNlMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL3NhbXBsZXMvZWpiL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9zYW1wbGVzL2VqYi9zdWJjbGFzc2luZy9lamIvQ3VzdG9tZXIuamF2YQpAQCAtNDAsNCArNDAsNCBAQAogCiB9CiAKLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9zYW1wbGVzL2VqYi9zdWJjbGFzc2luZy9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL3NhbXBsZXMvZWpiL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKaW5kZXggOGExYTM5ZC4uYjhkNmZiNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL3NhbXBsZXMvZWpiL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL3NhbXBsZXMvZWpiL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKQEAgLTE2LDQgKzE2LDQgQEAKIHsKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL3NhbXBsZXMvZWpiL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3Npbmcvc2FtcGxlcy9lamIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQppbmRleCAwOTgxNmRkLi5hYmNjMzM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3Npbmcvc2FtcGxlcy9lamIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3Npbmcvc2FtcGxlcy9lamIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQpAQCAtODgsNSArODgsNSBAQAogICB9CiAKIH0KLSAgICAKLSAgICAKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3Npbmcvc2FtcGxlcy9lamIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3Npbmcvc2FtcGxlcy9lamIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyRUpCLmphdmEKaW5kZXggNDQzMzlkNS4uNjU2OWNjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL3NhbXBsZXMvZWpiL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9zYW1wbGVzL2VqYi9zdWJjbGFzc2luZy9lamIvQ3VzdG9tZXJFSkIuamF2YQpAQCAtNDcsNyArNDcsNyBAQAogCiAgIHB1YmxpYyBTdHJpbmcgZ2V0QWRkcmVzczEoKQogICB7Ci0gICAgcmV0dXJuIGFkZHJlc3MxOyAKKyAgICByZXR1cm4gYWRkcmVzczE7CiAgIH0KIAogICBwdWJsaWMgU3RyaW5nIGdldEFkZHJlc3MyKCkKQEAgLTEzMyw3ICsxMzMsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNRTCBleGNlcHRpb24gb2NjdXJlZCBpbiBlamJSZW1vdmUgbWV0aG9kIik7CiAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICB9Ci0gICAgCisKICAgfQogCiAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkKQEAgLTIwMCwxMiArMjAwLDEyIEBACiAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1FMRXhjZXB0aW9uIG9jY3VycmVkIGluIGVqYkxvYWQoKSBtZXRob2QiKTsKICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfSAgIAorICAgIH0KICAgfQogCiAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIH0KLSAgICAgIAotICAgIAotICAgIAorCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL3NhbXBsZXMvZWpiL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9zYW1wbGVzL2VqYi9zdWJjbGFzc2luZy9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEKaW5kZXggZDI3ZDk5Yy4uYmNjMjUzOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL3NhbXBsZXMvZWpiL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3Npbmcvc2FtcGxlcy9lamIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhCkBAIC0xNiw0ICsxNiw0IEBACiB7CiB9CiAKLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9zYW1wbGVzL2VqYi9zdWJjbGFzc2luZy9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3Npbmcvc2FtcGxlcy9lamIvc3ViY2xhc3NpbmcvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhCmluZGV4IGYzYmNhYTguLmMyM2JkZDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9zYW1wbGVzL2VqYi9zdWJjbGFzc2luZy9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL3NhbXBsZXMvZWpiL3N1YmNsYXNzaW5nL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YQpAQCAtODksNiArODksNiBAQAogICB9CiAKIH0KLSAgICAgIAotICAgIAotICAgIAorCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL3NhbXBsZXMvZWpiL3N1YmNsYXNzaW5nL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9zYW1wbGVzL2VqYi9zdWJjbGFzc2luZy9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEKaW5kZXggMDU5OTQzZS4uNzQ3MDA5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL3NhbXBsZXMvZWpiL3N1YmNsYXNzaW5nL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3Npbmcvc2FtcGxlcy9lamIvc3ViY2xhc3Npbmcvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhCkBAIC0xMSwxNiArMTEsMTYgQEAKIHBhY2thZ2Ugc2FtcGxlcy5lamIuc3ViY2xhc3Npbmcuc2VydmxldDsKIAogaW1wb3J0IGphdmEuaW8uKjsKLWltcG9ydCBqYXZhLnV0aWwuKjsgCi1pbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7IAotaW1wb3J0IGphdmF4Lm5hbWluZy4qOyAKLWltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOyAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsKK2ltcG9ydCBqYXZheC5uYW1pbmcuKjsKK2ltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogaW1wb3J0IGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdDsKLWltcG9ydCBqYWthcnRhLmVqYi4qOyAKK2ltcG9ydCBqYWthcnRhLmVqYi4qOwogCi1pbXBvcnQgc2FtcGxlcy5lamIuc3ViY2xhc3NpbmcuZWpiLio7IAoraW1wb3J0IHNhbXBsZXMuZWpiLnN1YmNsYXNzaW5nLmVqYi4qOwogCi1wdWJsaWMgY2xhc3MgU2ltcGxlQmFua1NlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7ICAKK3B1YmxpYyBjbGFzcyBTaW1wbGVCYW5rU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogCiAgIEluaXRpYWxDb250ZXh0IGluaXRDb250ZXh0ID0gbnVsbDsKQEAgLTM3LDE0ICszNywxNCBAQAogICAgIGRvTG9va3VwKCk7CiAgIH0KIAotICBwdWJsaWMgdm9pZCBkb0dldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgCi0gICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7IAorICBwdWJsaWMgdm9pZCBkb0dldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKKyAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwotICB9ICAKKyAgfQogCi0gIC8qKiBoYW5kbGVzIHRoZSBIVFRQIFBPU1Qgb3BlcmF0aW9uICoqLyAKLSAgcHVibGljIHZvaWQgZG9Qb3N0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSAKLSAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgCisgIC8qKiBoYW5kbGVzIHRoZSBIVFRQIFBPU1Qgb3BlcmF0aW9uICoqLworICBwdWJsaWMgdm9pZCBkb1Bvc3QgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCisgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTaW1wbGVCYW5rU2VydmxldCBpcyBleGVjdXRpbmciKTsKICAgICBTdHJpbmcgU1NOID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoIlNTTiIpOwogCkBAIC01OSwxNCArNTksMTQgQEAKICAgICBTdHJpbmcgemlwQ29kZSA9ICIiOwogICAgIGxvbmcgY3VycmVudFNhdmluZ3NCYWxhbmNlID0gMDsKICAgICBsb25nIGN1cnJlbnRDaGVja2luZ0JhbGFuY2UgPSAwOwotICAgICAKKwogICAgIFN0cmluZyBhY3Rpb24gPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiYWN0aW9uIik7CiAgICAgaWYgKGFjdGlvbi5lcXVhbHMoIkNyZWF0ZSIpKQogICAgIHsKICAgICAgIG1lc3NhZ2UgPSAiQWRkIEN1c3RvbWVyIjsKICAgICAgIGpzcCA9ICIvU2ltcGxlQmFua0FkZC5qc3AiOwogICAgIH0KLSAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJBZGQgQ3VzdG9tZXIiKSkgCisgICAgZWxzZSBpZiAoYWN0aW9uLmVxdWFscygiQWRkIEN1c3RvbWVyIikpCiAgICAgewogICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZGQgQ3VzdG9tZXIgYnV0dG9uIHByZXNzZWQiKTsKICAgICAgIFNTTiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJTU04iKTsKQEAgLTEyMSw3ICsxMjEsNyBAQAogICAgICAgfQogICAgICAgbWVzc2FnZSA9ICJDdXN0b21lciBEZWxldGVkLiI7CiAgICAgICBqc3AgPSAiL1NpbXBsZUJhbmtNZXNzYWdlLmpzcCI7Ci0gICAgfSAgCisgICAgfQogCiAKICAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJVcGRhdGUiKSkKQEAgLTE5OCw3ICsxOTgsNyBAQAogICAgIFJlcXVlc3REaXNwYXRjaGVyIGRpc3BhdGNoZXIgPSBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldFJlcXVlc3REaXNwYXRjaGVyKGpzcCk7CiAgICAgZGlzcGF0Y2hlci5pbmNsdWRlKHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICByZXR1cm47Ci0gIH0gCisgIH0KIAogICBwdWJsaWMgdm9pZCBkb0xvb2t1cCgpCiAgIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3Npbmcvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhCmluZGV4IDA5MTk1MTQuLjA3MGQ1ZmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YQpAQCAtMTcsMTYgKzE3LDE2IEBACiBwYWNrYWdlIHNhbXBsZXMuZWpiLnN1YmNsYXNzaW5nLnNlcnZsZXQ7CiAKIGltcG9ydCBqYXZhLmlvLio7Ci1pbXBvcnQgamF2YS51dGlsLio7IAotaW1wb3J0IGpha2FydGEuc2VydmxldC4qOyAKLWltcG9ydCBqYXZheC5uYW1pbmcuKjsgCi1pbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsgCitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7CitpbXBvcnQgamF2YXgubmFtaW5nLio7CitpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIGltcG9ydCBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3Q7Ci1pbXBvcnQgamFrYXJ0YS5lamIuKjsgCitpbXBvcnQgamFrYXJ0YS5lamIuKjsKIAotaW1wb3J0IHNhbXBsZXMuZWpiLnN1YmNsYXNzaW5nLmVqYi4qOyAKK2ltcG9ydCBzYW1wbGVzLmVqYi5zdWJjbGFzc2luZy5lamIuKjsKIAotcHVibGljIGNsYXNzIFNpbXBsZUJhbmtTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgeyAgCitwdWJsaWMgY2xhc3MgU2ltcGxlQmFua1NlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKIAogICBJbml0aWFsQ29udGV4dCBpbml0Q29udGV4dCA9IG51bGw7CkBAIC00MywxNCArNDMsMTQgQEAKICAgICBkb0xvb2t1cCgpOwogICB9CiAKLSAgcHVibGljIHZvaWQgZG9HZXQgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIAotICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAKKyAgcHVibGljIHZvaWQgZG9HZXQgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCisgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgfSAgCisgIH0KIAotICAvKiogaGFuZGxlcyB0aGUgSFRUUCBQT1NUIG9wZXJhdGlvbiAqKi8gCi0gIHB1YmxpYyB2b2lkIGRvUG9zdCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgCi0gICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7IAorICAvKiogaGFuZGxlcyB0aGUgSFRUUCBQT1NUIG9wZXJhdGlvbiAqKi8KKyAgcHVibGljIHZvaWQgZG9Qb3N0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQorICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2ltcGxlQmFua1NlcnZsZXQgaXMgZXhlY3V0aW5nIik7CiAgICAgU3RyaW5nIFNTTiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJTU04iKTsKIApAQCAtNjUsMTQgKzY1LDE0IEBACiAgICAgU3RyaW5nIHppcENvZGUgPSAiIjsKICAgICBsb25nIGN1cnJlbnRTYXZpbmdzQmFsYW5jZSA9IDA7CiAgICAgbG9uZyBjdXJyZW50Q2hlY2tpbmdCYWxhbmNlID0gMDsKLSAgICAgCisKICAgICBTdHJpbmcgYWN0aW9uID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoImFjdGlvbiIpOwogICAgIGlmIChhY3Rpb24uZXF1YWxzKCJDcmVhdGUiKSkKICAgICB7CiAgICAgICBtZXNzYWdlID0gIkFkZCBDdXN0b21lciI7CiAgICAgICBqc3AgPSAiL1NpbXBsZUJhbmtBZGQuanNwIjsKICAgICB9Ci0gICAgZWxzZSBpZiAoYWN0aW9uLmVxdWFscygiQWRkIEN1c3RvbWVyIikpIAorICAgIGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoIkFkZCBDdXN0b21lciIpKQogICAgIHsKICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWRkIEN1c3RvbWVyIGJ1dHRvbiBwcmVzc2VkIik7CiAgICAgICBTU04gPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiU1NOIik7CkBAIC0xMjcsNyArMTI3LDcgQEAKICAgICAgIH0KICAgICAgIG1lc3NhZ2UgPSAiQ3VzdG9tZXIgRGVsZXRlZC4iOwogICAgICAganNwID0gIi9TaW1wbGVCYW5rTWVzc2FnZS5qc3AiOwotICAgIH0gIAorICAgIH0KIAogCiAgICAgZWxzZSBpZiAoYWN0aW9uLmVxdWFscygiVXBkYXRlIikpCkBAIC0yMDQsNyArMjA0LDcgQEAKICAgICBSZXF1ZXN0RGlzcGF0Y2hlciBkaXNwYXRjaGVyID0gZ2V0U2VydmxldENvbnRleHQoKS5nZXRSZXF1ZXN0RGlzcGF0Y2hlcihqc3ApOwogICAgIGRpc3BhdGNoZXIuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgcmV0dXJuOwotICB9IAorICB9CiAKICAgcHVibGljIHZvaWQgZG9Mb29rdXAoKQogICB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3Npbmcvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCmluZGV4IGRmOWRmMzQuLjMzYTcwNjkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCkBAIC0xICsxIEBACi1kcm9wIHRhYmxlIGN1c3RvbWVyMjsNCitkcm9wIHRhYmxlIGN1c3RvbWVyMjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9zcWwvc2ltcGxlQmFuay5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3Npbmcvc3FsL3NpbXBsZUJhbmsuc3FsCmluZGV4IDFiMTBhMmMuLjA2OWI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9zcWwvc2ltcGxlQmFuay5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL3NxbC9zaW1wbGVCYW5rLnNxbApAQCAtMSwyMSArMSwyMSBAQAotZHJvcCB0YWJsZSBjdXN0b21lcjI7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyMiAoDQotCVNTTiBWQVJDSEFSKDkpLA0KLQlsYXN0TmFtZSBWQVJDSEFSKDI0KSwNCi0JZmlyc3RuYW1lIFZBUkNIQVIoMjApLA0KLQlhZGRyZXNzMSB2YXJjaGFyKDIwKSwNCi0JYWRkcmVzczIgdmFyY2hhcigyMCksDQotCWNpdHkgdmFyY2hhcigxMCkgLA0KLQlzdGF0ZSB2YXJjaGFyKDEwKSwNCi0JemlwY29kZSB2YXJjaGFyKDUpLA0KLQlzYXZpbmdzYmFsYW5jZSBudW1lcmljKDEwKSwNCi0JY2hlY2tpbmdiYWxhbmNlIG51bWVyaWMoMTApCQ0KLSk7DQotDQotaW5zZXJ0IGludG8gY3VzdG9tZXIyIHZhbHVlcyAoJzEyMzQ1Njc4OScsICdTbWl0aCcsICdSb2InLCAnMTExMScsICdGaXJzdCBTdHJlZXQnLCAnU2FuIEpvc2UnLCAnQ0EnLCAnMTIzNDUnLCA1MTIzLCAxMjM0KTsNCi0NCi0NCi0NCi0NCi0NCitkcm9wIHRhYmxlIGN1c3RvbWVyMjsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyMiAoCisgICAgU1NOIFZBUkNIQVIoOSksCisgICAgbGFzdE5hbWUgVkFSQ0hBUigyNCksCisgICAgZmlyc3RuYW1lIFZBUkNIQVIoMjApLAorICAgIGFkZHJlc3MxIHZhcmNoYXIoMjApLAorICAgIGFkZHJlc3MyIHZhcmNoYXIoMjApLAorICAgIGNpdHkgdmFyY2hhcigxMCkgLAorICAgIHN0YXRlIHZhcmNoYXIoMTApLAorICAgIHppcGNvZGUgdmFyY2hhcig1KSwKKyAgICBzYXZpbmdzYmFsYW5jZSBudW1lcmljKDEwKSwKKyAgICBjaGVja2luZ2JhbGFuY2UgbnVtZXJpYygxMCkKKyk7CisKK2luc2VydCBpbnRvIGN1c3RvbWVyMiB2YWx1ZXMgKCcxMjM0NTY3ODknLCAnU21pdGgnLCAnUm9iJywgJzExMTEnLCAnRmlyc3QgU3RyZWV0JywgJ1NhbiBKb3NlJywgJ0NBJywgJzEyMzQ1JywgNTEyMywgMTIzNCk7CisKKworCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi9zdWJjbGFzc2luZy9zdW4tZWpiLWphci54bWwKaW5kZXggZTBhZDA4OC4uMGQyODQ3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3N1YmNsYXNzaW5nL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvc3ViY2xhc3Npbmcvc3VuLWVqYi1qYXIueG1sCkBAIC0yOSwyMCArMjksMjAgQEAKICAgICAgICAgPHJlcy1yZWYtbmFtZT5qZGJjL1NpbXBsZUJhbms8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qZGJjL2VqYi1zdWJjbGFzc2luZzwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPiAKLSAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+IAotICAgICA8YmVhbi1wb29sPiAKLSAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+IAotICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+IAotICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+IAotICAgICAgICAgPHBvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4gCi0gICAgICA8L2JlYW4tcG9vbD4gCi0gICAgICA8YmVhbi1jYWNoZT4gCi0gICAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+IAotICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkxSVTwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+IAotICAgICAgPC9iZWFuLWNhY2hlPiAKKyAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+CisgICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPgorICAgICA8YmVhbi1wb29sPgorICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+CisgICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgPC9iZWFuLXBvb2w+CisgICAgICA8YmVhbi1jYWNoZT4KKyAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4KKyAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4KKyAgICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KICAgICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPkN1c3RvbWVyQ2hlY2tpbmdFSkI8L2VqYi1uYW1lPgpAQCAtNTEsMjAgKzUxLDIwIEBACiAgICAgICAgIDxyZXMtcmVmLW5hbWU+amRiYy9TaW1wbGVCYW5rPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9lamItc3ViY2xhc3Npbmc8L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4gCi0gICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPiAKLSAgICAgPGJlYW4tcG9vbD4gCi0gICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPiAKLSAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PiAKLSAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPiAKKyAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+CisgICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPgorICAgICA8YmVhbi1wb29sPgorICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+CiAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+Ci0gICAgICA8L2JlYW4tcG9vbD4gCi0gICAgICA8YmVhbi1jYWNoZT4gCisgICAgICA8L2JlYW4tcG9vbD4KKyAgICAgIDxiZWFuLWNhY2hlPgogICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPgogICAgICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgogICAgICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgotICAgICAgPC9iZWFuLWNhY2hlPiAKKyAgICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgogPC9zdW4tZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi93ZWItY29tbW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYi93ZWItY29tbW9uLnhtbAppbmRleCAwMDc5ZDY2Li5mZDRlYTA2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWIvd2ViLWNvbW1vbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2ViL3dlYi1jb21tb24ueG1sCkBAIC0yMSw3ICsyMSw3IEBACiA8IS0tCiA8cHJvcGVydHkgZmlsZT0id2ViLWNvbW1vbi5wcm9wZXJ0aWVzIi8+CiAtLT4KLTxwcm9wZXJ0eSBuYW1lPSJjb20uc3VuLmFhcy5wb2ludGJhc2VSb290IiAKKzxwcm9wZXJ0eSBuYW1lPSJjb20uc3VuLmFhcy5wb2ludGJhc2VSb290IgogICAgIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L3BvaW50YmFzZSIvPgogCiA8cHJvcGVydHkgbmFtZT0iY29tLnN1bi5hYXMud2ViU2VydmljZXNMaWIiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9Ii8+CkBAIC0zNiw3ICszNiw3IEBACiA8cHJvcGVydHkgbmFtZT0iZWFyREQiIHZhbHVlPSJhcHBsaWNhdGlvbi54bWwsc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndhckREIiB2YWx1ZT0ic3VuLXdlYi54bWwsd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImphckREIiB2YWx1ZT0iZWpiLWphci54bWwsc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iY2xpZW50REQiICAgIAorPHByb3BlcnR5IG5hbWU9ImNsaWVudEREIgogICAgIHZhbHVlPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sLHN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAKIDwhLS0gY2hhbmdlIHRoaXMgcHJvcGVydHkgdG8gdXNlIGEgY29tcGlsZXIgb3RoZXIgdGhhbiBqYXZhYy4gLS0+CkBAIC02Miw3ICs2Miw3IEBACiA8cHJvcGVydHkgbmFtZT0id2FyIiAgICAgICAgIHZhbHVlPSIke2FwcG5hbWV9LndhciIvPgogPHByb3BlcnR5IG5hbWU9ImphciIgICAgICAgICB2YWx1ZT0iJHthcHBuYW1lfS5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamJqYXIiICAgICAgdmFsdWU9IiR7YXBwbmFtZX1FamIuamFyIi8+Ci08cHJvcGVydHkgbmFtZT0iY2xpZW50amFyIiAgIHZhbHVlPSIke2FwcG5hbWV9Q2xpZW50LmphciIvPiAgCis8cHJvcGVydHkgbmFtZT0iY2xpZW50amFyIiAgIHZhbHVlPSIke2FwcG5hbWV9Q2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9InZlcmlmeS5maWxlIiB2YWx1ZT0iLi4vJHtlYXJ9Ii8+CiA8cHJvcGVydHkgbmFtZT0iZGVwbG95LmZpbGUiIHZhbHVlPSIuLi8ke2Vhcn0iLz4KIApAQCAtNzAsNyArNzAsNyBAQAogPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiICAgICB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIAogPCEtLSBjbGFzc3BhdGggamFyIGZpbGVzIGxvY2F0aW9uLiAtLT4KLTxwcm9wZXJ0eSBuYW1lPSJzYW1wbGUuY2xhc3NwYXRoLmRpciIgCis8cHJvcGVydHkgbmFtZT0ic2FtcGxlLmNsYXNzcGF0aC5kaXIiCiAgICAgdmFsdWU9IiR7Y29tLnN1bi5hYXMuaW5zdGFsbFJvb3R9L2xpYiIvPgogPHByb3BlcnR5IG5hbWU9Im9wdGlvbmFsLnRhc2tkZWYuamFyIiB2YWx1ZT0ic3VuLWFwcHNlcnYtYW50LmphciIvPgogCkBAIC05MCw3ICs5MCw3IEBACiAgICAgPCEtLSBkZWZpbmUgdGhlc2UgcHJvcGVydGllcyBpZiBzYW1wbGVzIGRvbnQgZGVmaW5lICAtLT4KICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NwYXRoLnByZWZpeCIgdmFsdWU9Ii4iLz4KICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NwYXRoLnN1ZmZpeCIgdmFsdWU9Ii4iLz4KLSAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQuY2xhc3NwYXRoIiAKKyAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQuY2xhc3NwYXRoIgogICAgICAgdmFsdWU9IiR7Y2xhc3NwYXRoLnByZWZpeH06JHtidWlsZC5jbGFzc2VzZGlyfToke3N1bm9uZS5jcGF0aH06JHtjbGFzc3BhdGguc3VmZml4fToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIvPgogPC90YXJnZXQ+CiAKQEAgLTk5LDcgKzk5LDcgQEAKICAgICAgIDxmaWxlc2V0IGRpcj0iJHtjb20uc3VuLmFhcy5pbnN0YWxsUm9vdH0vbGliIiBpbmNsdWRlcz0iKi5qYXIiIC8+CiAgICAgICA8ZmlsZXNldCBkaXI9IiR7Y29tLnN1bi5hYXMud2ViU2VydmljZXNMaWJ9IiBpbmNsdWRlcz0iKi5qYXIiLz4KICAgICA8L3BhdGg+Ci0gICAgPHBhdGhjb252ZXJ0IHBhdGhzZXA9IjoiIHByb3BlcnR5PSJzdW5vbmUuY3BhdGgiIAorICAgIDxwYXRoY29udmVydCBwYXRoc2VwPSI6IiBwcm9wZXJ0eT0ic3Vub25lLmNwYXRoIgogICAgICAgICByZWZpZD0ic2FtcGxlX2NsYXNzcGF0aF9qYXJzIi8+CiA8L3RhcmdldD4KIApAQCAtMTE2LDkgKzExNiw5IEBACiAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzZGlyfSIvPgogICAgIDxlY2hvIG1lc3NhZ2U9IkNvbXBpbGluZyBzb3VyY2UgZmlsZXMiIC8+CiAgICAgPGphdmFjIHNyY2Rpcj0iLiIKLSAgICAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzZGlyfSIgCisgICAgICAgICAgIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlc2Rpcn0iCiAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtidWlsZC5jbGFzc3BhdGh9Ii8+Ci08L3RhcmdldD4gCis8L3RhcmdldD4KIAogCiAKQEAgLTE3Myw5ICsxNzMsOSBAQAogPCEtLSBBc3NlbWJsZSBXQVIgbW9kdWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJjaGVja193YXJmaWxlIj4KLTxhdmFpbGFibGUgZmlsZT0iJHtidWlsZC5jbGFzc2VzZGlyfS8ke3dhci5wa2d9LyIgdHlwZT0iZGlyIiAKKzxhdmFpbGFibGUgZmlsZT0iJHtidWlsZC5jbGFzc2VzZGlyfS8ke3dhci5wa2d9LyIgdHlwZT0iZGlyIgogICAgICAgICAgICBwcm9wZXJ0eT0id2FyZmlsZXMucHJlc2VudCIvPgotPGF2YWlsYWJsZSBmaWxlPSIke3NyY30vZG9jcm9vdCIgdHlwZT0iZGlyIiAKKzxhdmFpbGFibGUgZmlsZT0iJHtzcmN9L2RvY3Jvb3QiIHR5cGU9ImRpciIKICAgICAgICAgICAgcHJvcGVydHk9ImRvY3Jvb3QucHJlc2VudCIvPgogPC90YXJnZXQ+CiAKQEAgLTE5MiwxMSArMTkyLDExIEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJjb3B5X2VqYmphcl93YXIiIGlmPSJlamJqYXIuZG9uZSI+Ci08Y29weSBmaWxlPSIke2Fzc2VtYmxlLmVqYmphcn0vJHtlamJqYXJ9IiAKKzxjb3B5IGZpbGU9IiR7YXNzZW1ibGUuZWpiamFyfS8ke2VqYmphcn0iCiAgICAgICB0b2ZpbGU9IiR7YXNzZW1ibGUud2FyfS9XRUItSU5GL2xpYi8ke2VqYmphcn0iLz4KIDwvdGFyZ2V0PgogCi08dGFyZ2V0IG5hbWU9ImNyZWF0ZV93YXJfY29tbW9uIiAKKzx0YXJnZXQgbmFtZT0iY3JlYXRlX3dhcl9jb21tb24iCiAgICAgICBkZXBlbmRzPSJjbGVhbl93YXJfY29tbW9uLGNoZWNrX3dhcmZpbGUsY29weV9kb2Nyb290LGNvcHlfd2FyZmlsZXMsY29weV9lamJqYXJfd2FyIj4KIDxta2RpciBkaXI9IiR7YXNzZW1ibGUud2FyfSIvPgogPGNvcHkgdG9kaXI9IiR7YXNzZW1ibGUud2FyfS9XRUItSU5GLyI+CkBAIC0yMTUsNyArMjE1LDcgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNvcHlfZWpiamFyIiBpZj0iZWpiamFyLmRvbmUiPgotPGNvcHkgZmlsZT0iJHthc3NlbWJsZS5lamJqYXJ9LyR7ZWpiamFyfSIgCis8Y29weSBmaWxlPSIke2Fzc2VtYmxlLmVqYmphcn0vJHtlamJqYXJ9IgogICAgICAgdG9maWxlPSIke2Fzc2VtYmxlLmVhcn0vJHtlamJqYXJ9Ii8+CiA8L3RhcmdldD4KIApAQCAtMjI0LDcgKzIyNCw3IEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJjb3B5X2NsaWVudGphciIgaWY9ImNsaWVudGphci5kb25lIj4KLSA8Y29weSBmaWxlPSIke2Fzc2VtYmxlLmNsaWVudGphcn0vJHtjbGllbnRqYXJ9IiAKKyA8Y29weSBmaWxlPSIke2Fzc2VtYmxlLmNsaWVudGphcn0vJHtjbGllbnRqYXJ9IgogICAgICAgIHRvZmlsZT0iJHthc3NlbWJsZS5lYXJ9LyR7Y2xpZW50amFyfSIvPgogPC90YXJnZXQ+CiAKQEAgLTI3MSw3ICsyNzEsNyBAQAogPHRhcmdldCBuYW1lPSJjbGllbnRqYXJfY29tbW9uIiBkZXBlbmRzPSJjbGVhbl9jbGllbnRqYXJfY29tbW9uIj4KIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuY2xpZW50amFyfSIvPgogPGNvcHkgdG9kaXI9IiR7YXNzZW1ibGUuY2xpZW50amFyfS8ke2FwcC5wa2d9Ij4KLSAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXNkaXJ9LyR7YXBwLnBrZ30vIiAKKyAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXNkaXJ9LyR7YXBwLnBrZ30vIgogICAgICAgICAgICBpbmNsdWRlcz0iKiovKkNsaWVudC5jbGFzcyIgZXhjbHVkZXM9IioqL3NlcnZsZXQvIi8+CiA8L2NvcHk+CiA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmNsaWVudGphcn0vTUVUQS1JTkYiLz4KQEAgLTI3OSw3ICsyNzksNyBAQAogICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIke2NsaWVudEREfSIvPgogPC9jb3B5PgogPGphciBqYXJmaWxlPSIuLi8ke2NsaWVudGphcn0iCi0gICBiYXNlZGlyPSIke2Fzc2VtYmxlLmNsaWVudGphcn0iIAorICAgYmFzZWRpcj0iJHthc3NlbWJsZS5jbGllbnRqYXJ9IgogICAgbWFuaWZlc3Q9Ik1BTklGRVNULk1GIi8+CiA8bW92ZSBmaWxlPSIuLi8ke2NsaWVudGphcn0iIHRvZGlyPSIke2Fzc2VtYmxlLmNsaWVudGphcn0iLz4KIDxwcm9wZXJ0eSBuYW1lPSJjbGllbnRqYXIuZG9uZSIgdmFsdWU9InRydWUiLz4KQEAgLTI4OSw3ICsyODksNyBAQAogPHRhcmdldCBuYW1lPSJjcmVhdGVfamFyX2NvbW1vbiIgZGVwZW5kcz0iY2xlYW5famFyX2NvbW1vbiI+CiA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmphcn0iLz4KIDxjb3B5IHRvZGlyPSIke2Fzc2VtYmxlLmphcn0vJHthcHAucGtnfSI+Ci0gIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzZGlyfS8ke2FwcC5wa2d9LyIgCisgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzZGlyfS8ke2FwcC5wa2d9LyIKICAgICAgICAgICAgaW5jbHVkZXM9IioqLyouY2xhc3MiLz4KIDwvY29weT4KIDxqYXIgamFyZmlsZT0iLi4vJHtqYXJ9IgpAQCAtMjk4LDI0ICsyOTgsMjQgQEAKIDxjb3B5IGZpbGU9IiR7YXNzZW1ibGUuamFyfS8ke2phcn0iIHRvZmlsZT0iLi4vJHtqYXJ9Ii8+CiA8L3RhcmdldD4KIAotICA8dGFyZ2V0IG5hbWU9ImRlcGxveV9jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4gICAgICAgICAKKyAgPHRhcmdldCBuYW1lPSJkZXBsb3lfY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHtkZXBsb3kuZmlsZX0uIi8+Ci0gIAorCiA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHthcHBuYW1lfS4iLz4KIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgogPGFyZyBsaW5lPSJkZXBsb3kiLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgPGFyZyBsaW5lPSItLW5hbWUgJHthcHBuYW1lfSAtLXR5cGUgJHthcHB0eXBlfSIvPgogICAgIDxhcmcgbGluZT0iLS1yZXRyaWV2ZSAke2Fzc2VtYmxlfSIvPgotICAgIDxhcmcgbGluZT0iLS1pbnN0YW5jZSAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkgICAgCisgICAgPGFyZyBsaW5lPSItLWluc3RhbmNlICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2RlcGxveS5maWxlfSIvPgogPC9leGVjPgogPC90YXJnZXQ+Ci0gIAorCiAKIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50X2NvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9Ij4KLSAgICA8ZW52IGtleT0iVk1BUkdTIiAKKyAgICA8ZW52IGtleT0iVk1BUkdTIgogICAgICAgICB2YWx1ZT0iLUR0ZXN0LnJlc3VsdHM9JHtlbnYuQVBTX0hPTUV9L3Rlc3RfcmVzdWx0cy54bWwiLz4KICAgICA8YXJnIGxpbmU9Ii1jbGllbnQgJHthc3NlbWJsZX0vJHthcHBuYW1lfUNsaWVudC5qYXIiLz4KICAgICA8YXJnIGxpbmU9Ii1uYW1lICR7ZGlzcGxheV9uYW1lfSIvPgpAQCAtMzQ0LDcgKzM0NCw3IEBACiA8dGFyZ2V0IG5hbWU9ImtleWRlbF9jb21tb24iIGRlcGVuZHM9InNldHVwX2Vudixpbml0LWNvbW1vbiI+CiA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbiI+CiA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9IiR7YXBwLnVzZXJ9Ii8+Ci08L2FudGNhbGw+ICAgIAorPC9hbnRjYWxsPgogPC90YXJnZXQ+CiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KQEAgLTM2MSw5ICszNjEsOSBAQAogICAgIDxhcmcgbGluZT0iLS1wcmVjb21waWxlZGpzcCB0cnVlIi8+CiAgICAgPGFyZyBsaW5lPSItLXVwbG9hZCB0cnVlIi8+CiAgICAgPGFyZyBsaW5lPSItLXJldHJpZXZlICR7YXNzZW1ibGUuZGlyfSIvPgotICAgIDxhcmcgbGluZT0iLS1pbnN0YW5jZSAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0taW5zdGFuY2UgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICA8L2V4ZWM+Ci0gPC90YXJnZXQ+ICAgIAorIDwvdGFyZ2V0PgogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFVuaW5zdGFsbCB0YXJnZXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+CkBAIC0zNzMsOSArMzczLDkgQEAKIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgogICAgIDxhcmcgbGluZT0idW5kZXBsb3kiLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+Ci0gICAgPGFyZyBsaW5lPSItLXR5cGUgJHthcHB0eXBlfSIvPiAgICAgICAgCi0gICAgPGFyZyBsaW5lPSItLWluc3RhbmNlICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQotICAgIDxhcmcgbGluZT0iJHthcHBuYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tdHlwZSAke2FwcHR5cGV9Ii8+CisgICAgPGFyZyBsaW5lPSItLWluc3RhbmNlICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CisgICAgPGFyZyBsaW5lPSIke2FwcG5hbWV9Ii8+CiAgPC9leGVjPgogCiA8L3RhcmdldD4KQEAgLTM4NywxMyArMzg3LDEzIEBACiA8ZWNobyBtZXNzYWdlPSJEb2luZyBhZG1pbiB0YXNrICR7YWRtaW4uY29tbWFuZH0iLz4KIDxlY2hvIG1lc3NhZ2U9Ik9wZXJhbmQgJHtvcGVyYW5kLnByb3BzfSIvPgogPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+Ci0gICAgPGFyZyBsaW5lPSIke2FkbWluLmNvbW1hbmR9ICR7YXMucHJvcHN9ICR7b3BlcmFuZC5wcm9wc30iIC8+ICAgICAgICAKLTwvZXhlYz4gICAgCisgICAgPGFyZyBsaW5lPSIke2FkbWluLmNvbW1hbmR9ICR7YXMucHJvcHN9ICR7b3BlcmFuZC5wcm9wc30iIC8+Cis8L2V4ZWM+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJyZWNvbmZpZ19jb21tb24iIGRlcGVuZHM9InNldHVwX2VudiI+CiA8ZWNobyBtZXNzYWdlPSJSZWNvbmZpZ3VyaW5nIHNlcnZlciAke3N1bm9uZS5pbnN0YW5jZX0iLz4KLTxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+ICAgCis8YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iamF2YWRvY3NfY29tbW9uIiBkZXBlbmRzPSJpbml0X2NvbW1vbiI+CkBAIC00MDYsMTcgKzQwNiwxNyBAQAogPC90YXJnZXQ+CiAKIAotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPiAKLTwhLS0gQ2xlYW5VcCBQb2ludGJhc2UgdGFibGUgVGFyZ2V0cy4gICAgICAgICAgICAgICAgICAgICAgICAtLT4gCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08dGFyZ2V0IG5hbWU9InNxbF9jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4gCi0gPGphdmEgY2xhc3NuYW1lPSJjb20ucG9pbnRiYXNlLnRvb2xzLnRvb2xzQ29tbWFuZGVyIiAKKzwhLS0gQ2xlYW5VcCBQb2ludGJhc2UgdGFibGUgVGFyZ2V0cy4gICAgICAgICAgICAgICAgICAgICAgICAtLT4KKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKzx0YXJnZXQgbmFtZT0ic3FsX2NvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorIDxqYXZhIGNsYXNzbmFtZT0iY29tLnBvaW50YmFzZS50b29scy50b29sc0NvbW1hbmRlciIKICAgICAgICBjbGFzc3BhdGg9IiR7ZGIuY2xhc3NwYXRofSIKICAgICAgICBmb3JrPSJ0cnVlIgotID4gCi0gICA8YXJnIGxpbmU9IiR7ZGIuZHJpdmVyfSAke2RiLnVybH0gJHtkYi5maWxlfSAke2RiLnVzZXJ9ICR7ZGIucHdkfSIgLz4gCisgPgorICAgPGFyZyBsaW5lPSIke2RiLmRyaXZlcn0gJHtkYi51cmx9ICR7ZGIuZmlsZX0gJHtkYi51c2VyfSAke2RiLnB3ZH0iIC8+CiAgPC9qYXZhPgotICAgICAKKwogICAgIDwhLS0gPHNxbCAgZHJpdmVyPSIke2RiLmRyaXZlcn0iCiB1cmw9IiR7ZGIudXJsfSIKIHVzZXJpZD0iJHtkYi51c2VyfSIKQEAgLTQ0MCwxMCArNDQwLDEwIEBACiA8cHJvcGVydHkgbmFtZT0iZHMuY2xhc3MiIHZhbHVlPSJjb20ucG9pbnRiYXNlLmpkYmMuamRiY0RhdGFTb3VyY2UiIC8+CiA8YW50Y2FsbCB0YXJnZXQ9ImFkbWluX2NvbW1hbmRfY29tbW9uIj4KICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiCi0gICAgdmFsdWU9ImNyZWF0ZS1qZGJjLWNvbm5lY3Rpb24tcG9vbCAKKyAgICB2YWx1ZT0iY3JlYXRlLWpkYmMtY29ubmVjdGlvbi1wb29sCiAgICAgICAtLWRhdGFzb3VyY2VjbGFzc25hbWUgJHtkcy5jbGFzc30KICAgICAgIC0taW5zdGFuY2UgJHtzdW5vbmUuaW5zdGFuY2V9IiAvPgotICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgCisgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgogdmFsdWU9IiR7Y29ucG9vbC5uYW1lfSIgLz4KIDwvYW50Y2FsbD4KIDxhbnRjYWxsIHRhcmdldD0iYWRtaW5fY29tbWFuZF9jb21tb24iPgpAQCAtNDY5LDcgKzQ2OSw3IEBACiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLXJlc291cmNlX2NvbW1vbiI+CiA8YW50Y2FsbCB0YXJnZXQ9ImFkbWluX2NvbW1hbmRfY29tbW9uIj4KICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiCi0gICAgdmFsdWU9ImNyZWF0ZS1qZGJjLXJlc291cmNlIAorICAgIHZhbHVlPSJjcmVhdGUtamRiYy1yZXNvdXJjZQogICAgICAtLWNvbm5lY3Rpb25wb29saWQgJHtjb25wb29sLm5hbWV9CiAgICAgIC0taW5zdGFuY2UgJHtzdW5vbmUuaW5zdGFuY2V9IiAvPgogICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKQEAgLTQ4MCw3ICs0ODAsNyBAQAogPHRhcmdldCBuYW1lPSJkZWxldGUtamRiYy1jb25uZWN0aW9uLXBvb2xfY29tbW9uIj4KIDxhbnRjYWxsIHRhcmdldD0iYWRtaW5fY29tbWFuZF9jb21tb24iPgogICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIKLSAgICB2YWx1ZT0iZGVsZXRlLWpkYmMtY29ubmVjdGlvbi1wb29sIAorICAgIHZhbHVlPSJkZWxldGUtamRiYy1jb25uZWN0aW9uLXBvb2wKICAgICAgIC0taW5zdGFuY2UgJHtzdW5vbmUuaW5zdGFuY2V9IiAvPgogICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICB2YWx1ZT0iJHtjb25wb29sLm5hbWV9IiAvPgpAQCAtNDkwLDcgKzQ5MCw3IEBACiA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1qZGJjLXJlc291cmNlX2NvbW1vbiI+CiA8YW50Y2FsbCB0YXJnZXQ9ImFkbWluX2NvbW1hbmRfY29tbW9uIj4KICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiCi0gICAgdmFsdWU9ImRlbGV0ZS1qZGJjLXJlc291cmNlICAKKyAgICB2YWx1ZT0iZGVsZXRlLWpkYmMtcmVzb3VyY2UKICAgICAgIC0taW5zdGFuY2UgJHtzdW5vbmUuaW5zdGFuY2V9IiAvPgogICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICB2YWx1ZT0iJHtqZGJjLnJlc291cmNlLm5hbWV9IiAvPgpAQCAtNTE5LDE5ICs1MTksMTkgQEAKIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXBlcnNpc3RlbmNlLXJlc291cmNlX2NvbW1vbiIgZGVwZW5kcz0ic2V0dXBfZW52Ij4KIDxhbnRjYWxsIHRhcmdldD0iYWRtaW5fY29tbWFuZF9jb21tb24iPgogICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIKLSAgICB2YWx1ZT0iY3JlYXRlLXBlcnNpc3RlbmNlLXJlc291cmNlIAorICAgIHZhbHVlPSJjcmVhdGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UKICAgICAgIC0taW5zdGFuY2UgJHtzdW5vbmUuaW5zdGFuY2V9IiAvPgogICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICB2YWx1ZT0iJHtwbS5yZXNvdXJjZS5uYW1lfSIgLz4KIDwvYW50Y2FsbD4KIDxhbnRjYWxsIHRhcmdldD0iYWRtaW5fY29tbWFuZF9jb21tb24iPgogICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KLSAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIAorICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0ucGVyc2lzdGVuY2UtbWFuYWdlci1mYWN0b3J5LXJlc291cmNlLiR7cG0ucmVzb3VyY2UubmFtZX0uZmFjdG9yeV9jbGFzcz0ke3BtLmZhY3RvcnkuY2xhc3N9Ii8+CiA8L2FudGNhbGw+CiA8YW50Y2FsbCB0YXJnZXQ9ImFkbWluX2NvbW1hbmRfY29tbW9uIj4KICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+Ci0gIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiAKKyAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5wZXJzaXN0ZW5jZS1tYW5hZ2VyLWZhY3RvcnktcmVzb3VyY2UuJHtwbS5yZXNvdXJjZS5uYW1lfS5qZGJjX3Jlc291cmNlX2puZGlfbmFtZT0ke2pkYmMucmVzb3VyY2UubmFtZX0iIC8+CiA8L2FudGNhbGw+CiA8L3RhcmdldD4KQEAgLTUzOSw5ICs1MzksOSBAQAogPHRhcmdldCBuYW1lPSJkZWxldGUtcGVyc2lzdGVuY2UtcmVzb3VyY2VfY29tbW9uIiBkZXBlbmRzPSJzZXR1cF9lbnYiPgogPGFudGNhbGwgdGFyZ2V0PSJhZG1pbl9jb21tYW5kX2NvbW1vbiI+CiAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIgotICAgIHZhbHVlPSJkZWxldGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UgCisgICAgdmFsdWU9ImRlbGV0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZQogICAgICAgLS1pbnN0YW5jZSAke3N1bm9uZS5pbnN0YW5jZX0iIC8+Ci0gIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiAKKyAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgdmFsdWU9IiR7cG0ucmVzb3VyY2UubmFtZX0iIC8+CiA8L2FudGNhbGw+CiA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL2J1aWxkLnhtbAppbmRleCAzZjBiYjUzLi5mYTJiOWNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvYnVpbGQueG1sCkBAIC0yNyw0OSArMjcsNDkgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3cy10YXJnZXQiIHZhbHVlPSJhbGwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53c3RhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzLXRhcmdldCIgdmFsdWU9InJ1bi10ZXN0Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud3N0YXJnZXRzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3cy10YXJnZXQiIHZhbHVlPSJjbGVhbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndzdGFyZ2V0cyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3MtdGFyZ2V0IiB2YWx1ZT0iYnVpbGQiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud3N0YXJnZXRzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3cy10YXJnZXQiIHZhbHVlPSJkZXBsb3kiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53c3RhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzLXRhcmdldCIgdmFsdWU9InVuZGVwbG95Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndzdGFyZ2V0cyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3MtdGFyZ2V0IiB2YWx1ZT0icnVuIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud3N0YXJnZXRzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3cy10YXJnZXQiIHZhbHVlPSJzZXR1cCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud3N0YXJnZXRzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3cy10YXJnZXQiIHZhbHVlPSJ1bnNldHVwIi8+CkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4gVXNhZ2U6CisgICAgPGVjaG8+IFVzYWdlOgogICAgID09PT09PT09IFRhcmdldHMgYnkgZXhlY3V0aW9uIGdyYW51bGFyaXR5ID09PT09PT09PQogCiAgICAgYW50IGNsZWFuIChDbGVhbnMgYWxsIHdzIHRlc3RzKQpAQCAtMTE1LDExICsxMTUsMTEgQEAKICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIHdzIHRlc3RzKQogCiAgICAgPT09PT0gVGFyZ2V0cyBieSB0ZWNobm9sb3kgYW5kIGV4ZWN1dGlvbiBncmFudWxhcml0eSA9PT09PT0KLSAgICBOb3RlOiBSdW4gdGhlIGNvbW1hbmQgb2YgdGhlIGZvbGxvd2luZyB0eXBlOiAKKyAgICBOb3RlOiBSdW4gdGhlIGNvbW1hbmQgb2YgdGhlIGZvbGxvd2luZyB0eXBlOgogCiAgICAgICAgICAgICAlIGFudCBzZXJ2bGV0d3MgLUR3cy10YXJnZXQ9Y2xlYW4KIAogICAgIHRvIHJ1biB0aGUgJ2NsZWFuJyB0YXJnZXQgZm9yICdzZXJ2bGV0d3MnIHRlc3RzCi0JPC9lY2hvPgorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL2VqYndzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9lamJ3cy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQ4MDU1ODIuLjEyMzA5ODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL2VqYndzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvZWpid3MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjIgKzE1LDIyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3cyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZWpidGF4Y2FsIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1lamJ0YXhjYWwiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuZWpiLnRheGNhbC5jbGllbnQuVGF4Q2FsQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLmVqYi50YXhjYWwuY2xpZW50LlRheENhbENsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8IS0tcHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvLS0+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2NsaWVudC9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2NsaWVudC9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9jbGllbnQvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2NsaWVudC9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3c2RsLWZpbGUiIHZhbHVlPSJ3c2RsL1RheENhbEVqYlNlcnZpY2Uud3NkbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvZWpid3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvZWpid3MvYnVpbGQueG1sCmluZGV4IDMyZWVhZWQuLjM3OTUwNDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL2VqYndzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9lamJ3cy9idWlsZC54bWwKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAmY29tbW9uQnVpbGQ7CiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwogCi0gICAgPHRhcmdldCBuYW1lPSJhbGwiIAorICAgIDx0YXJnZXQgbmFtZT0iYWxsIgogICAgIGRlcGVuZHM9ImNsZWFuLCBidWlsZCwgc2V0dXAsIGRlcGxveSwgcnVuLCB1bmRlcGxveSwgdW5zZXR1cCIvPgogICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QiIGRlcGVuZHM9ImNsZWFuLCBidWlsZCwgZGVwbG95LCBydW4sIHVuZGVwbG95Ii8+CiAKQEAgLTM5LDcgKzM5LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiLz4KICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiLz4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24sY2xlYW4tY29tbW9uLCBnZW5lcmF0ZS1hcnRpZmFjdHMiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUwLDE4ICs1MCwxOCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJnZW5lcmF0ZS1hcnRpZmFjdHMiPgotCTxhbnRjYWxsIHRhcmdldD0iaW1wb3J0LXdzZGwiPgotCSAgICA8cGFyYW0gbmFtZT0ibWFwcGluZy5maWxlIgotCQl2YWx1ZT0iJHtlamItbWFwcGluZy54bWx9Ii8+Ci0JICAgIDxwYXJhbSBuYW1lPSJjb25maWctd3NkbC5maWxlIgotCQl2YWx1ZT0iY29uZmlnL2NvbmZpZy1lamIueG1sIi8+Ci0JPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0iaW1wb3J0LXdzZGwiPgotCSAgICA8cGFyYW0gbmFtZT0ibWFwcGluZy5maWxlIgotCQl2YWx1ZT0iJHtjbGllbnQtbWFwcGluZy54bWx9Ii8+Ci0JICAgIDxwYXJhbSBuYW1lPSJjb25maWctd3NkbC5maWxlIgotCQl2YWx1ZT0iY29uZmlnL2NvbmZpZy1jbGllbnQueG1sIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0iaW1wb3J0LXdzZGwiPgorICAgICAgICA8cGFyYW0gbmFtZT0ibWFwcGluZy5maWxlIgorICAgICAgICB2YWx1ZT0iJHtlamItbWFwcGluZy54bWx9Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJjb25maWctd3NkbC5maWxlIgorICAgICAgICB2YWx1ZT0iY29uZmlnL2NvbmZpZy1lamIueG1sIi8+CisgICAgPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0iaW1wb3J0LXdzZGwiPgorICAgICAgICA8cGFyYW0gbmFtZT0ibWFwcGluZy5maWxlIgorICAgICAgICB2YWx1ZT0iJHtjbGllbnQtbWFwcGluZy54bWx9Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJjb25maWctd3NkbC5maWxlIgorICAgICAgICB2YWx1ZT0iY29uZmlnL2NvbmZpZy1jbGllbnQueG1sIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0id3MtcGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CkBAIC0xMjIsMTMgKzEyMiwxMyBAQAogICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJpbml0LWNvbW1vbixjb21waWxlIj4KLQk8YW50Y2FsbCB0YXJnZXQ9IndzLXBhY2thZ2UtZWpiLWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICA8YW50Y2FsbCB0YXJnZXQ9IndzLXBhY2thZ2UtZWpiLWphci1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iY29tL3N1bi9zMXBlcWUvd2Vic2VydmljZXMvZWpiL3RheGNhbC8qLmNsYXNzIiAvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiLz4KLQk8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ3cy1wYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iPgorICAgIDwvYW50Y2FsbD4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9IndzLXBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSJjb20vc3VuL3MxcGVxZS93ZWJzZXJ2aWNlcy9lamIvdGF4Y2FsL2NsaWVudC8qLmNsYXNzIiAvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIKQEAgLTEzOCwxNyArMTM4LDE3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uLCByZWNvbmZpZy1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0ic3RhdGV0YXgtZWpiLWVuZHBvaW50LXVybCIgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzdGF0ZXRheC1lamItZW5kcG9pbnQtdXJsIgogICAgICAgICAgICAgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L3N0YXRldGF4ZWpiIi8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmZWR0YXgtZWpiLWVuZHBvaW50LXVybCIgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmZWR0YXgtZWpiLWVuZHBvaW50LXVybCIKICAgICAgICAgICAgIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS9mZWR0YXhlamIiLz4KIAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJwcm9wZXJ0eSBzdGF0ZXRheC1lamItZW5kcG9pbnQtdXJsIGlzIHNldCB0bzogJHtzdGF0ZXRheC1lamItZW5kcG9pbnQtdXJsfSIvPgpAQCAtMTU5LDE3ICsxNTksMTcgQEAKICAgICAgICAgICAgIHZhbHVlPSIke3N0YXRldGF4LWVqYi1lbmRwb2ludC11cmx9ICR7ZmVkdGF4LWVqYi1lbmRwb2ludC11cmx9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCi0gIDwhLS0gCi0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCisgIDwhLS0KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBVc2VyIERlZmluZWQgc3BlY2lmaWMgdGFyZ2V0cwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIC0tPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvZWpid3MvY2xpZW50L1RheENhbENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvZWpid3MvY2xpZW50L1RheENhbENsaWVudC5qYXZhCmluZGV4IDVjMjAxYTkuLjVjYjUwMTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL2VqYndzL2NsaWVudC9UYXhDYWxDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9lamJ3cy9jbGllbnQvVGF4Q2FsQ2xpZW50LmphdmEKQEAgLTI0LDkxICsyNCw5MSBAQAogCiBwdWJsaWMgY2xhc3MgVGF4Q2FsQ2xpZW50IHsKIAotCXByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyBzdGF0ZVRheEVuZHBvaW50ID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZmVkVGF4RW5kcG9pbnQgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3VpdGUgPSAiVGF4Q2FsRWpiYmFzZWRXUyI7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RDYXNlID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBUYXhDYWxFamJTZXJ2aWNlIHRheENhbFNlcnZpY2UgPSBudWxsOworICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBzdGF0ZVRheEVuZHBvaW50ID0gbnVsbDsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZmVkVGF4RW5kcG9pbnQgPSBudWxsOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3VpdGUgPSAiVGF4Q2FsRWpiYmFzZWRXUyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RDYXNlID0gbnVsbDsKKyAgICBwcml2YXRlIHN0YXRpYyBUYXhDYWxFamJTZXJ2aWNlIHRheENhbFNlcnZpY2UgPSBudWxsOwogCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogCi0JCWlmKGFyZ3NbMF0gPT0gbnVsbCB8fCBhcmdzWzFdID09IG51bGwpewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJUYXhDYWwgY2xpZW50OiBBcmd1bWVudCBtaXNzaW5nLiBQbGVhc2UgcHJvdmlkZSB0YXJnZXQiICsKLQkJCQkgImVuZHBvaW50IGFkZHJlc3MgYXMgYXJndW1lbnQiKTsKLQkJCVN5c3RlbS5leGl0KDEpOwotCQl9IGVsc2UgewotCQkJc3RhdGVUYXhFbmRwb2ludCA9IGFyZ3NbMF07Ci0JCQlmZWRUYXhFbmRwb2ludCA9IGFyZ3NbMV07Ci0JCX0KKyAgICAgICAgaWYoYXJnc1swXSA9PSBudWxsIHx8IGFyZ3NbMV0gPT0gbnVsbCl7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRheENhbCBjbGllbnQ6IEFyZ3VtZW50IG1pc3NpbmcuIFBsZWFzZSBwcm92aWRlIHRhcmdldCIgKworICAgICAgICAgICAgICAgICAiZW5kcG9pbnQgYWRkcmVzcyBhcyBhcmd1bWVudCIpOworICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdGF0ZVRheEVuZHBvaW50ID0gYXJnc1swXTsKKyAgICAgICAgICAgIGZlZFRheEVuZHBvaW50ID0gYXJnc1sxXTsKKyAgICAgICAgfQogCi0JCXN0YXQuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCBlamIgYmFzZWQgd2Vic2VydmljZSIpOyAKLQkJdHJ5IHsgCi0JCQlUYXhDYWxDbGllbnQgY2xpZW50ID0gbmV3IFRheENhbENsaWVudCgpOwotCQkJQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCQkJdGF4Q2FsU2VydmljZSA9IChUYXhDYWxFamJTZXJ2aWNlKQotCQkJCWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL1RheENhbEVqYlNlcnZpY2UiKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGhpcyBpcyB0byB0ZXN0IGVqYiBiYXNlZCB3ZWJzZXJ2aWNlIik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBUYXhDYWxDbGllbnQgY2xpZW50ID0gbmV3IFRheENhbENsaWVudCgpOworICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICAgICAgdGF4Q2FsU2VydmljZSA9IChUYXhDYWxFamJTZXJ2aWNlKQorICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL1RheENhbEVqYlNlcnZpY2UiKTsKIAotCQkJY2xpZW50LmNhbGxTdGF0ZVRheFNlcnZpY2UoKTsKLQkJCWNsaWVudC5jYWxsRmVkVGF4U2VydmljZSgpOwotCQl9Y2F0Y2goRXhjZXB0aW9uIGUpewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQorICAgICAgICAgICAgY2xpZW50LmNhbGxTdGF0ZVRheFNlcnZpY2UoKTsKKyAgICAgICAgICAgIGNsaWVudC5jYWxsRmVkVGF4U2VydmljZSgpOworICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQogCi0JCXN0YXQucHJpbnRTdW1tYXJ5KHRlc3RTdWl0ZSk7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RTdWl0ZSk7CiAgICAgfQotICAgIAotCXB1YmxpYyB2b2lkIGNhbGxTdGF0ZVRheFNlcnZpY2UoKSB7Ci0JCWRvdWJsZSBpbmNvbWUgPSA4NTAwMC4wMDsKLQkJZG91YmxlIGRlZHVjdGlvbnMgPSA1MDAwLjAwOwogCi0JCS8vU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9Ci0JCS8vCSJodHRwOi8vbG9jYWxob3N0OjEwMjQvdGF4Y2FsY3VsYXRvciI7CisgICAgcHVibGljIHZvaWQgY2FsbFN0YXRlVGF4U2VydmljZSgpIHsKKyAgICAgICAgZG91YmxlIGluY29tZSA9IDg1MDAwLjAwOworICAgICAgICBkb3VibGUgZGVkdWN0aW9ucyA9IDUwMDAuMDA7CiAKLQkJdHJ5IHsKKyAgICAgICAgLy9TdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0KKyAgICAgICAgLy8gICAgImh0dHA6Ly9sb2NhbGhvc3Q6MTAyNC90YXhjYWxjdWxhdG9yIjsKIAotCQkJU3RhdGVUYXhJRiB0YXhDYWxJRlBvcnQgPSB0YXhDYWxTZXJ2aWNlLmdldFN0YXRlVGF4SUZQb3J0KCk7CisgICAgICAgIHRyeSB7CiAKLQkJCSgoU3R1Yil0YXhDYWxJRlBvcnQpLl9zZXRQcm9wZXJ0eSAoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAotCQkJCXN0YXRlVGF4RW5kcG9pbnQpOworICAgICAgICAgICAgU3RhdGVUYXhJRiB0YXhDYWxJRlBvcnQgPSB0YXhDYWxTZXJ2aWNlLmdldFN0YXRlVGF4SUZQb3J0KCk7CiAKLQkJCWRvdWJsZSBzdGF0ZVRheCA9IHRheENhbElGUG9ydC5nZXRTdGF0ZVRheChpbmNvbWUsIGRlZHVjdGlvbnMpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZSB0YXggZnJvbSBlamIgYmFzZWQgVGF4Q2FsU2VydmljZSA6IiArIHN0YXRlVGF4KTsKKyAgICAgICAgICAgICgoU3R1Yil0YXhDYWxJRlBvcnQpLl9zZXRQcm9wZXJ0eSAoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAorICAgICAgICAgICAgICAgIHN0YXRlVGF4RW5kcG9pbnQpOwogCi0JCQlpZihzdGF0ZVRheCA9PSAyNDAwMC4wMCkKLQkJCQlzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIFN0YXRlVGF4UG9ydCIsIHN0YXQuUEFTUyk7Ci0JCQllbHNlCi0JCQkJc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBTdGF0ZVRheFBvcnQiLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgZG91YmxlIHN0YXRlVGF4ID0gdGF4Q2FsSUZQb3J0LmdldFN0YXRlVGF4KGluY29tZSwgZGVkdWN0aW9ucyk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlIHRheCBmcm9tIGVqYiBiYXNlZCBUYXhDYWxTZXJ2aWNlIDoiICsgc3RhdGVUYXgpOwogCi0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJUYXhDYWxFamJXZWJzZXJ2aWNlIGNsaWVudCBmYWlsZWQiKTsKLQkJCXN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgU3RhdGVUYXhQb3J0Iiwgc3RhdC5GQUlMKTsKLQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQl9IAotCX0KKyAgICAgICAgICAgIGlmKHN0YXRlVGF4ID09IDI0MDAwLjAwKQorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgU3RhdGVUYXhQb3J0Iiwgc3RhdC5QQVNTKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIFN0YXRlVGF4UG9ydCIsIHN0YXQuRkFJTCk7CiAKLQlwdWJsaWMgdm9pZCBjYWxsRmVkVGF4U2VydmljZSgpIHsKLQkJZG91YmxlIGluY29tZSA9IDk3MDAwLjAwOwotCQlkb3VibGUgZGVkdWN0aW9ucyA9IDcwMDAuMDA7Ci0JCXRyeSB7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUYXhDYWxFamJXZWJzZXJ2aWNlIGNsaWVudCBmYWlsZWQiKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgU3RhdGVUYXhQb3J0Iiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgfQogCi0JCQlGZWRUYXhJRiB0YXhDYWxJRlBvcnQgPSB0YXhDYWxTZXJ2aWNlLmdldEZlZFRheElGUG9ydCgpOwotCQkJKChTdHViKXRheENhbElGUG9ydCkuX3NldFByb3BlcnR5IChTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCi0JCQkJZmVkVGF4RW5kcG9pbnQpOworICAgIHB1YmxpYyB2b2lkIGNhbGxGZWRUYXhTZXJ2aWNlKCkgeworICAgICAgICBkb3VibGUgaW5jb21lID0gOTcwMDAuMDA7CisgICAgICAgIGRvdWJsZSBkZWR1Y3Rpb25zID0gNzAwMC4wMDsKKyAgICAgICAgdHJ5IHsKIAotCQkJZG91YmxlIGZlZFRheCA9IHRheENhbElGUG9ydC5nZXRGZWRUYXgoaW5jb21lLCBkZWR1Y3Rpb25zKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRmVkIHRheCBmcm9tIEVqYiBiYXNlZCBUYXhDYWxTZXJ2aWNlIDoiICsgZmVkVGF4KTsKKyAgICAgICAgICAgIEZlZFRheElGIHRheENhbElGUG9ydCA9IHRheENhbFNlcnZpY2UuZ2V0RmVkVGF4SUZQb3J0KCk7CisgICAgICAgICAgICAoKFN0dWIpdGF4Q2FsSUZQb3J0KS5fc2V0UHJvcGVydHkgKFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKKyAgICAgICAgICAgICAgICBmZWRUYXhFbmRwb2ludCk7CiAKLQkJCWlmKGZlZFRheCA9PSAxODAwMC4wMCkKLQkJCQlzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIEZlZFRheFBvcnQiLCBzdGF0LlBBU1MpOwotCQkJZWxzZQotCQkJCXN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgRmVkVGF4UG9ydCIsIHN0YXQuRkFJTCk7Ci0gICAgICAgICAgICAgICAgCi0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJUYXhDYWxFamJXZWJTZXJ2aWNlIGNsaWVudCBmYWlsZWQiKTsKLQkJCXN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgRmVkVGF4UG9ydCIsIHN0YXQuRkFJTCk7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfSAKLQl9CisgICAgICAgICAgICBkb3VibGUgZmVkVGF4ID0gdGF4Q2FsSUZQb3J0LmdldEZlZFRheChpbmNvbWUsIGRlZHVjdGlvbnMpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGZWQgdGF4IGZyb20gRWpiIGJhc2VkIFRheENhbFNlcnZpY2UgOiIgKyBmZWRUYXgpOworCisgICAgICAgICAgICBpZihmZWRUYXggPT0gMTgwMDAuMDApCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBGZWRUYXhQb3J0Iiwgc3RhdC5QQVNTKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIEZlZFRheFBvcnQiLCBzdGF0LkZBSUwpOworCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUYXhDYWxFamJXZWJTZXJ2aWNlIGNsaWVudCBmYWlsZWQiKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgRmVkVGF4UG9ydCIsIHN0YXQuRkFJTCk7CisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvZWpid3MvY29uZmlnL2NvbmZpZy1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvZWpid3MvY29uZmlnL2NvbmZpZy1jbGllbnQueG1sCmluZGV4IDlmY2ViZDguLmQwZjc1MjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL2VqYndzL2NvbmZpZy9jb25maWctY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9lamJ3cy9jb25maWcvY29uZmlnLWNsaWVudC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHdzZGwgCisgIDx3c2RsCiAgICAgICBsb2NhdGlvbj0id3NkbC9UYXhDYWxFamJTZXJ2aWNlLndzZGwiCiAgICAgICBwYWNrYWdlTmFtZT0iY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuZWpiLnRheGNhbC5jbGllbnQiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL2VqYndzL2NvbmZpZy9jb25maWctZWpiLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL2VqYndzL2NvbmZpZy9jb25maWctZWpiLnhtbAppbmRleCA0NDIwZWJkLi43OTRiZDUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9lamJ3cy9jb25maWcvY29uZmlnLWVqYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvZWpid3MvY29uZmlnL2NvbmZpZy1lamIueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249IndzZGwvVGF4Q2FsRWpiU2VydmljZS53c2RsIgogICAgICAgcGFja2FnZU5hbWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLmVqYi50YXhjYWwiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL2VqYndzL2NvbmZpZy9jb25maWctc2VpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL2VqYndzL2NvbmZpZy9jb25maWctc2VpLnhtbAppbmRleCBhODg4ZmU2Li40ZTE2NjEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9lamJ3cy9jb25maWcvY29uZmlnLXNlaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvZWpid3MvY29uZmlnL2NvbmZpZy1zZWkueG1sCkBAIC0xOCwxNiArMTgsMTYgQEAKIC0tPgogCiA8Y29uZmlndXJhdGlvbgotCXhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0JPHNlcnZpY2UgbmFtZT0iVGF4Q2FsRWpiU2VydmljZSIKLQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGF4Lm9yZy93c2RsIgotCQl0eXBlTmFtZXNwYWNlPSJodHRwOi8vdGF4Lm9yZy90eXBlcyIKLQkJcGFja2FnZU5hbWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLmVqYi50YXhjYWwiPgotCQk8aW50ZXJmYWNlIG5hbWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLmVqYi50YXhjYWwuRmVkVGF4SUYiCi0JCQlzZXJ2YW50TmFtZT0iY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuZWpiLnRheGNhbC5GZWRUYXhFamIiLz4KLQkJPGludGVyZmFjZSBuYW1lPSJjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5lamIudGF4Y2FsLlN0YXRlVGF4SUYiCi0JCQlzZXJ2YW50TmFtZT0iY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuZWpiLnRheGNhbC5TdGF0ZVRheEVqYiI+Ci0JCTwvaW50ZXJmYWNlPgotCTwvc2VydmljZT4KKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgorICAgIDxzZXJ2aWNlIG5hbWU9IlRheENhbEVqYlNlcnZpY2UiCisgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RheC5vcmcvd3NkbCIKKyAgICAgICAgdHlwZU5hbWVzcGFjZT0iaHR0cDovL3RheC5vcmcvdHlwZXMiCisgICAgICAgIHBhY2thZ2VOYW1lPSJjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5lamIudGF4Y2FsIj4KKyAgICAgICAgPGludGVyZmFjZSBuYW1lPSJjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5lamIudGF4Y2FsLkZlZFRheElGIgorICAgICAgICAgICAgc2VydmFudE5hbWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLmVqYi50YXhjYWwuRmVkVGF4RWpiIi8+CisgICAgICAgIDxpbnRlcmZhY2UgbmFtZT0iY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuZWpiLnRheGNhbC5TdGF0ZVRheElGIgorICAgICAgICAgICAgc2VydmFudE5hbWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLmVqYi50YXhjYWwuU3RhdGVUYXhFamIiPgorICAgICAgICA8L2ludGVyZmFjZT4KKyAgICA8L3NlcnZpY2U+CiA8L2NvbmZpZ3VyYXRpb24+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL2VqYndzL2VqYi9GZWRUYXhFamIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL2VqYndzL2VqYi9GZWRUYXhFamIuamF2YQppbmRleCBmNDVjYjQ1Li5lZGNmMjVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9lamJ3cy9lamIvRmVkVGF4RWpiLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvZWpid3MvZWpiL0ZlZFRheEVqYi5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLmVqYi50YXhjYWw7CiAKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC0yNiwxMSArMjYsMTEgQEAKIHB1YmxpYyBjbGFzcyBGZWRUYXhFamIgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7CiAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjOwotICAgIAorCiAgICAgcHVibGljIEZlZFRheEVqYigpe30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRmVkVGF4RWpiOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZlZFRheEVqYjo6ZWpiQ3JlYXRlICEhIik7CiAgICAgfQogCiAgICAgcHVibGljIGRvdWJsZSBnZXRGZWRUYXgoZG91YmxlIGluY29tZSwgZG91YmxlIGRlZHVjdGlvbnMpIHsKQEAgLTM4LDEzICszOCwxMyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JCisKICAgICAgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9lamJ3cy9lamIvRmVkVGF4SUYuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL2VqYndzL2VqYi9GZWRUYXhJRi5qYXZhCmluZGV4IGMzN2IwY2MuLjRkZWNjNDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL2VqYndzL2VqYi9GZWRUYXhJRi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL2VqYndzL2VqYi9GZWRUYXhJRi5qYXZhCkBAIC0yMiw2ICsyMiw2IEBACiAKIHB1YmxpYyBpbnRlcmZhY2UgRmVkVGF4SUYgZXh0ZW5kcyBSZW1vdGV7CiAKLQlwdWJsaWMgZG91YmxlIGdldEZlZFRheChkb3VibGUgaW5jb21lLCBkb3VibGUgZGVkdWN0aW9ucykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICBwdWJsaWMgZG91YmxlIGdldEZlZFRheChkb3VibGUgaW5jb21lLCBkb3VibGUgZGVkdWN0aW9ucykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvZWpid3MvZWpiL1N0YXRlVGF4RWpiLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9lamJ3cy9lamIvU3RhdGVUYXhFamIuamF2YQppbmRleCA3OGNlYTQ1Li4zMzU3ZWNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9lamJ3cy9lamIvU3RhdGVUYXhFamIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9lamJ3cy9lamIvU3RhdGVUYXhFamIuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5lamIudGF4Y2FsOwogCiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMjYsMTEgKzI2LDExIEBACiBwdWJsaWMgY2xhc3MgU3RhdGVUYXhFamIgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7CiAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjOwotICAgIAorCiAgICAgcHVibGljIFN0YXRlVGF4RWpiKCl7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZVRheEVqYjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZVRheEVqYjo6ZWpiQ3JlYXRlICEhIik7CiAgICAgfQogCiAgICAgcHVibGljIGRvdWJsZSBnZXRTdGF0ZVRheChkb3VibGUgaW5jb21lLCBkb3VibGUgZGVkdWN0aW9ucykgewpAQCAtMzgsMTMgKzM4LDEzIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQkKKwogICAgICAgICB0aGlzLnNjID0gc2M7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL2VqYndzL2VqYi9TdGF0ZVRheElGLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9lamJ3cy9lamIvU3RhdGVUYXhJRi5qYXZhCmluZGV4IDJjOTQ1ZjIuLjI2Zjk0NjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL2VqYndzL2VqYi9TdGF0ZVRheElGLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvZWpid3MvZWpiL1N0YXRlVGF4SUYuamF2YQpAQCAtMjIsNiArMjIsNiBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIFN0YXRlVGF4SUYgZXh0ZW5kcyBSZW1vdGV7CiAKLQlwdWJsaWMgZG91YmxlIGdldFN0YXRlVGF4KGRvdWJsZSBpbmNvbWUsIGRvdWJsZSBkZWR1Y3Rpb25zKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHB1YmxpYyBkb3VibGUgZ2V0U3RhdGVUYXgoZG91YmxlIGluY29tZSwgZG91YmxlIGRlZHVjdGlvbnMpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL3NlcnZsZXR3cy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvc2VydmxldHdzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWRjMjgyOS4uZDM1NTBmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvc2VydmxldHdzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvc2VydmxldHdzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE0LDIwICsxNCwyMCBAQAogCiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKLS0tPiAKKy0tPlx1MDAyMAogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id3MiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXRheGNhbCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdGF4Y2FsIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLnNlcnZsZXQudGF4Y2FsLmNsaWVudC5UYXhDYWxDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuc2VydmxldC50YXhjYWwuY2xpZW50LlRheENhbENsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8IS0tcHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvLS0+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvY2xpZW50L2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvY2xpZW50L3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2NsaWVudC9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvY2xpZW50L3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9IndzZGwtZmlsZSIgdmFsdWU9IndzZGwvVGF4Q2FsU2VydmxldFNlcnZpY2Uud3NkbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvc2VydmxldHdzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL3NlcnZsZXR3cy9idWlsZC54bWwKaW5kZXggODE2NzdkMS4uMDRjOTIxNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvc2VydmxldHdzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9zZXJ2bGV0d3MvYnVpbGQueG1sCkBAIC0yOSwxMCArMjksMTAgQEAKICAgICAmY29tbW9uQnVpbGQ7CiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwogCi0gICAgPHRhcmdldCBuYW1lPSJhbGwiIAorICAgIDx0YXJnZXQgbmFtZT0iYWxsIgogICAgIGRlcGVuZHM9ImNsZWFuLCBidWlsZCwgc2V0dXAsIGRlcGxveSwgcnVuLCB1bmRlcGxveSwgdW5zZXR1cCIvPgogCi0gICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdCIgCisgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdCIKICAgICBkZXBlbmRzPSJjbGVhbiwgYnVpbGQsIGRlcGxveSwgcnVuLCB1bmRlcGxveSIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNDEsNyArNDEsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIvPgogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIvPgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbixjbGVhbi1jb21tb24sIGdlbmVyYXRlLWFydGlmYWN0cyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgpAQCAtMTM4LDM4ICsxMzgsMzggQEAKICAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJpbml0LWNvbW1vbixjb21waWxlIj4KLQk8YW50Y2FsbCB0YXJnZXQ9IndzLXBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgIDxhbnRjYWxsIHRhcmdldD0id3MtcGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9ImNvbS9zdW4vczFwZXFlL3dlYnNlcnZpY2VzL3NlcnZsZXQvdGF4Y2FsL2NsaWVudC8qLmNsYXNzIiAvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIKICAgICAgICAgICAgICAgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIKICAgICAgICAgICAgICAgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KLQk8L2FudGNhbGw+Ci0JPCEtLWFudGNhbGwgdGFyZ2V0PSJ3cy13YXItY29tbW9uIi0tPgotCTxhbnRjYWxsIHRhcmdldD0id3MtcGFja2FnZS13YXItY29tbW9uIj4KKyAgICA8L2FudGNhbGw+CisgICAgPCEtLWFudGNhbGwgdGFyZ2V0PSJ3cy13YXItY29tbW9uIi0tPgorICAgIDxhbnRjYWxsIHRhcmdldD0id3MtcGFja2FnZS13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuZmlsZSIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSJjb20vc3VuL3MxcGVxZS93ZWJzZXJ2aWNlcy9zZXJ2bGV0L3RheGNhbC8qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmdmaWxlLm5hbWUiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmdmaWxlLm5hbWUiCiAgICAgICAgICAgICAgIHZhbHVlPSIke3dlYi1tYXBwaW5nLnhtbH0iIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0ibWFwcGluZ2ZpbGUubG9jYXRpb24iIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmdmaWxlLmxvY2F0aW9uIgogICAgICAgICAgICAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJzZXJ2aWNlcy54bWwiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYnNlcnZpY2VzLnhtbCIKICAgICAgICAgICAgICAgdmFsdWU9IiR7d2ViLXdlYnNlcnZpY2VzLnhtbH0iIC8+Ci0JPC9hbnRjYWxsPgorICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiwgcmVjb25maWctY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9InN0YXRldGF4LWVuZHBvaW50LXVybCIgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzdGF0ZXRheC1lbmRwb2ludC11cmwiCiAgICAgICAgICAgICB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vVGF4Q2FsV1NTZXJ2bGV0L3N0YXRldGF4c2VydmxldCIvPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iZmVkdGF4LWVuZHBvaW50LXVybCIgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmZWR0YXgtZW5kcG9pbnQtdXJsIgogICAgICAgICAgICAgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L1RheENhbFdTU2VydmxldC9mZWR0YXhzZXJ2bGV0Ii8+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KQEAgLTE3NywxNyArMTc3LDE3IEBACiAgICAgICAgICAgICB2YWx1ZT0iJHtzdGF0ZXRheC1lbmRwb2ludC11cmx9ICR7ZmVkdGF4LWVuZHBvaW50LXVybH0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKLSAgPCEtLSAKLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKKyAgPCEtLQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFVzZXIgRGVmaW5lZCBzcGVjaWZpYyB0YXJnZXRzCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgLS0+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9zZXJ2bGV0d3MvY2xpZW50L1RheENhbENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvc2VydmxldHdzL2NsaWVudC9UYXhDYWxDbGllbnQuamF2YQppbmRleCBlODUzZmU2Li4xYWM0MThkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9zZXJ2bGV0d3MvY2xpZW50L1RheENhbENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL3NlcnZsZXR3cy9jbGllbnQvVGF4Q2FsQ2xpZW50LmphdmEKQEAgLTI0LDkzICsyNCw5MyBAQAogCiBwdWJsaWMgY2xhc3MgVGF4Q2FsQ2xpZW50IHsKIAotCXByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyBzdGF0ZVRheEVuZHBvaW50ID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZmVkVGF4RW5kcG9pbnQgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3VpdGUgPSAiVGF4Q2FsU2VydmxldGJhc2VkV1MiOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0Q2FzZSA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgVGF4Q2FsU2VydmxldFNlcnZpY2UgdGF4Q2FsU2VydmljZSA9IG51bGw7CisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHN0YXRlVGF4RW5kcG9pbnQgPSBudWxsOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBmZWRUYXhFbmRwb2ludCA9IG51bGw7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RTdWl0ZSA9ICJUYXhDYWxTZXJ2bGV0YmFzZWRXUyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RDYXNlID0gbnVsbDsKKyAgICBwcml2YXRlIHN0YXRpYyBUYXhDYWxTZXJ2bGV0U2VydmljZSB0YXhDYWxTZXJ2aWNlID0gbnVsbDsKIAotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKIAotCQlpZihhcmdzWzBdID09IG51bGwgfHwgYXJnc1sxXSA9PSBudWxsKXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGF4Q2FsIGNsaWVudDogQXJndW1lbnQgbWlzc2luZy4gUGxlYXNlIHByb3ZpZGUgdGFyZ2V0IiArCi0JCQkJICJlbmRwb2ludCBhZGRyZXNzIGFzIGFyZ3VtZW50Iik7Ci0JCQlTeXN0ZW0uZXhpdCgxKTsKLQkJfSBlbHNlIHsKLQkJCXN0YXRlVGF4RW5kcG9pbnQgPSBhcmdzWzBdOwotCQkJZmVkVGF4RW5kcG9pbnQgPSBhcmdzWzFdOwotCQl9CisgICAgICAgIGlmKGFyZ3NbMF0gPT0gbnVsbCB8fCBhcmdzWzFdID09IG51bGwpeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUYXhDYWwgY2xpZW50OiBBcmd1bWVudCBtaXNzaW5nLiBQbGVhc2UgcHJvdmlkZSB0YXJnZXQiICsKKyAgICAgICAgICAgICAgICAgImVuZHBvaW50IGFkZHJlc3MgYXMgYXJndW1lbnQiKTsKKyAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhdGVUYXhFbmRwb2ludCA9IGFyZ3NbMF07CisgICAgICAgICAgICBmZWRUYXhFbmRwb2ludCA9IGFyZ3NbMV07CisgICAgICAgIH0KIAotCQlzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3Qgc2VydmxldCBiYXNlZCB3ZWJzZXJ2aWNlIik7IAotCQl0cnkgeyAKLQkJCVRheENhbENsaWVudCBjbGllbnQgPSBuZXcgVGF4Q2FsQ2xpZW50KCk7Ci0JCQlDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JCQl0YXhDYWxTZXJ2aWNlID0gKFRheENhbFNlcnZsZXRTZXJ2aWNlKQotCQkJCWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL1RheENhbFNlcnZsZXRTZXJ2aWNlIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCBzZXJ2bGV0IGJhc2VkIHdlYnNlcnZpY2UiKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFRheENhbENsaWVudCBjbGllbnQgPSBuZXcgVGF4Q2FsQ2xpZW50KCk7CisgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgICAgICB0YXhDYWxTZXJ2aWNlID0gKFRheENhbFNlcnZsZXRTZXJ2aWNlKQorICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL1RheENhbFNlcnZsZXRTZXJ2aWNlIik7CiAKLQkJCWNsaWVudC5jYWxsU3RhdGVUYXhTZXJ2aWNlKCk7Ci0JCQljbGllbnQuY2FsbEZlZFRheFNlcnZpY2UoKTsKLQkJfWNhdGNoKEV4Y2VwdGlvbiBlKXsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KKyAgICAgICAgICAgIGNsaWVudC5jYWxsU3RhdGVUYXhTZXJ2aWNlKCk7CisgICAgICAgICAgICBjbGllbnQuY2FsbEZlZFRheFNlcnZpY2UoKTsKKyAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KIAotCQlzdGF0LnByaW50U3VtbWFyeSh0ZXN0U3VpdGUpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0U3VpdGUpOwogICAgIH0KLSAgICAKLQlwdWJsaWMgdm9pZCBjYWxsU3RhdGVUYXhTZXJ2aWNlKCkgewotCQlkb3VibGUgaW5jb21lID0gODUwMDAuMDA7Ci0JCWRvdWJsZSBkZWR1Y3Rpb25zID0gNTAwMC4wMDsKIAotCQkvL1N0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQotCQkvLwkiaHR0cDovL2xvY2FsaG9zdDoxMDI0L3RheGNhbGN1bGF0b3IiOworICAgIHB1YmxpYyB2b2lkIGNhbGxTdGF0ZVRheFNlcnZpY2UoKSB7CisgICAgICAgIGRvdWJsZSBpbmNvbWUgPSA4NTAwMC4wMDsKKyAgICAgICAgZG91YmxlIGRlZHVjdGlvbnMgPSA1MDAwLjAwOwogCi0JCXRyeSB7CisgICAgICAgIC8vU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9CisgICAgICAgIC8vICAgICJodHRwOi8vbG9jYWxob3N0OjEwMjQvdGF4Y2FsY3VsYXRvciI7CiAKLQkJCVN0YXRlVGF4SUYgdGF4Q2FsSUZQb3J0ID0gdGF4Q2FsU2VydmljZS5nZXRTdGF0ZVRheElGUG9ydCgpOworICAgICAgICB0cnkgewogCi0JCQkoKFN0dWIpdGF4Q2FsSUZQb3J0KS5fc2V0UHJvcGVydHkgKFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKLQkJCQlzdGF0ZVRheEVuZHBvaW50KTsKKyAgICAgICAgICAgIFN0YXRlVGF4SUYgdGF4Q2FsSUZQb3J0ID0gdGF4Q2FsU2VydmljZS5nZXRTdGF0ZVRheElGUG9ydCgpOwogCi0JCQlkb3VibGUgc3RhdGVUYXggPSB0YXhDYWxJRlBvcnQuZ2V0U3RhdGVUYXgoaW5jb21lLCBkZWR1Y3Rpb25zKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGUgdGF4IGZyb20gc2VydmxldCBiYXNlZCBUYXhDYWxTZXJ2aWNlIDoiICsgc3RhdGVUYXgpOworICAgICAgICAgICAgKChTdHViKXRheENhbElGUG9ydCkuX3NldFByb3BlcnR5IChTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCisgICAgICAgICAgICAgICAgc3RhdGVUYXhFbmRwb2ludCk7CiAKLQkJCWlmKHN0YXRlVGF4ID09IDI0MDAwLjAwKQotCQkJCXN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgU3RhdGVUYXhQb3J0Iiwgc3RhdC5QQVNTKTsKLQkJCWVsc2UKLQkJCQlzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIFN0YXRlVGF4UG9ydCIsIHN0YXQuRkFJTCk7CisgICAgICAgICAgICBkb3VibGUgc3RhdGVUYXggPSB0YXhDYWxJRlBvcnQuZ2V0U3RhdGVUYXgoaW5jb21lLCBkZWR1Y3Rpb25zKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGUgdGF4IGZyb20gc2VydmxldCBiYXNlZCBUYXhDYWxTZXJ2aWNlIDoiICsgc3RhdGVUYXgpOwogCi0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJUYXhDYWxFamJXZWJzZXJ2aWNlIGNsaWVudCBmYWlsZWQiKTsKLQkJCXN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgU3RhdGVUYXhQb3J0Iiwgc3RhdC5GQUlMKTsKLQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQl9IAotCX0KKyAgICAgICAgICAgIGlmKHN0YXRlVGF4ID09IDI0MDAwLjAwKQorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgU3RhdGVUYXhQb3J0Iiwgc3RhdC5QQVNTKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIFN0YXRlVGF4UG9ydCIsIHN0YXQuRkFJTCk7CiAKLQlwdWJsaWMgdm9pZCBjYWxsRmVkVGF4U2VydmljZSgpIHsKLQkJZG91YmxlIGluY29tZSA9IDk3MDAwLjAwOwotCQlkb3VibGUgZGVkdWN0aW9ucyA9IDcwMDAuMDA7Ci0JCXRyeSB7Ci0JCQkvL1N0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQotCQkJLy8iaHR0cDovL2xvY2FsaG9zdDoxMDI0L0ZpbmRJbnRlcmVzdFNlcnZsZXQvRmluZEludGVyZXN0IjsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRheENhbEVqYldlYnNlcnZpY2UgY2xpZW50IGZhaWxlZCIpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBTdGF0ZVRheFBvcnQiLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9CiAKLQkJCUZlZFRheElGIHRheENhbElGUG9ydCA9IHRheENhbFNlcnZpY2UuZ2V0RmVkVGF4SUZQb3J0KCk7Ci0JCQkoKFN0dWIpdGF4Q2FsSUZQb3J0KS5fc2V0UHJvcGVydHkgKFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKLQkJCQlmZWRUYXhFbmRwb2ludCk7CisgICAgcHVibGljIHZvaWQgY2FsbEZlZFRheFNlcnZpY2UoKSB7CisgICAgICAgIGRvdWJsZSBpbmNvbWUgPSA5NzAwMC4wMDsKKyAgICAgICAgZG91YmxlIGRlZHVjdGlvbnMgPSA3MDAwLjAwOworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy9TdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0KKyAgICAgICAgICAgIC8vImh0dHA6Ly9sb2NhbGhvc3Q6MTAyNC9GaW5kSW50ZXJlc3RTZXJ2bGV0L0ZpbmRJbnRlcmVzdCI7CiAKLQkJCWRvdWJsZSBmZWRUYXggPSB0YXhDYWxJRlBvcnQuZ2V0RmVkVGF4KGluY29tZSwgZGVkdWN0aW9ucyk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZlZCB0YXggZnJvbSBTZXJ2bGV0IGJhc2VkIFRheENhbFNlcnZpY2UgOiIgKyBmZWRUYXgpOworICAgICAgICAgICAgRmVkVGF4SUYgdGF4Q2FsSUZQb3J0ID0gdGF4Q2FsU2VydmljZS5nZXRGZWRUYXhJRlBvcnQoKTsKKyAgICAgICAgICAgICgoU3R1Yil0YXhDYWxJRlBvcnQpLl9zZXRQcm9wZXJ0eSAoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAorICAgICAgICAgICAgICAgIGZlZFRheEVuZHBvaW50KTsKIAotCQkJaWYoZmVkVGF4ID09IDE4MDAwLjAwKQotCQkJCXN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgRmVkVGF4UG9ydCIsIHN0YXQuUEFTUyk7Ci0JCQllbHNlCi0JCQkJc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBGZWRUYXhQb3J0Iiwgc3RhdC5GQUlMKTsKLSAgICAgICAgICAgICAgICAKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRheENhbFNlcnZsZXRXZWJTZXJ2aWNlIGNsaWVudCBmYWlsZWQiKTsKLQkJCXN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgRmVkVGF4UG9ydCIsIHN0YXQuRkFJTCk7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfSAKLQl9CisgICAgICAgICAgICBkb3VibGUgZmVkVGF4ID0gdGF4Q2FsSUZQb3J0LmdldEZlZFRheChpbmNvbWUsIGRlZHVjdGlvbnMpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGZWQgdGF4IGZyb20gU2VydmxldCBiYXNlZCBUYXhDYWxTZXJ2aWNlIDoiICsgZmVkVGF4KTsKKworICAgICAgICAgICAgaWYoZmVkVGF4ID09IDE4MDAwLjAwKQorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgRmVkVGF4UG9ydCIsIHN0YXQuUEFTUyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBGZWRUYXhQb3J0Iiwgc3RhdC5GQUlMKTsKKworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGF4Q2FsU2VydmxldFdlYlNlcnZpY2UgY2xpZW50IGZhaWxlZCIpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBGZWRUYXhQb3J0Iiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgfQogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9zZXJ2bGV0d3MvY29uZmlnL2NvbmZpZy1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvc2VydmxldHdzL2NvbmZpZy9jb25maWctY2xpZW50LnhtbAppbmRleCBmZTY4MzNiLi5lZmVlMmY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9zZXJ2bGV0d3MvY29uZmlnL2NvbmZpZy1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLWNsaWVudC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHdzZGwgCisgIDx3c2RsCiAgICAgICBsb2NhdGlvbj0id3NkbC9UYXhDYWxTZXJ2bGV0U2VydmljZS53c2RsIgogICAgICAgcGFja2FnZU5hbWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLnNlcnZsZXQudGF4Y2FsLmNsaWVudCIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvc2VydmxldHdzL2NvbmZpZy9jb25maWctc2VpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLXNlaS54bWwKaW5kZXggZTdiZGY0OS4uMjY1Y2NjZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvc2VydmxldHdzL2NvbmZpZy9jb25maWctc2VpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9zZXJ2bGV0d3MvY29uZmlnL2NvbmZpZy1zZWkueG1sCkBAIC0xOCwxNiArMTgsMTYgQEAKIC0tPgogCiA8Y29uZmlndXJhdGlvbgotCXhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0JPHNlcnZpY2UgbmFtZT0iVGF4Q2FsU2VydmxldFNlcnZpY2UiCi0JCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RheC5vcmcvd3NkbCIKLQkJdHlwZU5hbWVzcGFjZT0iaHR0cDovL3RheC5vcmcvdHlwZXMiCi0JCXBhY2thZ2VOYW1lPSJjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5zZXJ2bGV0LnRheGNhbCI+Ci0JCTxpbnRlcmZhY2UgbmFtZT0iY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuc2VydmxldC50YXhjYWwuRmVkVGF4SUYiCi0JCQlzZXJ2YW50TmFtZT0iY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuc2VydmxldC50YXhjYWwuRmVkVGF4U2VydmxldCIvPgotCQk8aW50ZXJmYWNlIG5hbWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLnNlcnZsZXQudGF4Y2FsLlN0YXRlVGF4SUYiCi0JCQlzZXJ2YW50TmFtZT0iY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuc2VydmxldC50YXhjYWwuU3RhdGVUYXhTZXJ2bGV0Ij4KLQkJPC9pbnRlcmZhY2U+Ci0JPC9zZXJ2aWNlPgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+CisgICAgPHNlcnZpY2UgbmFtZT0iVGF4Q2FsU2VydmxldFNlcnZpY2UiCisgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RheC5vcmcvd3NkbCIKKyAgICAgICAgdHlwZU5hbWVzcGFjZT0iaHR0cDovL3RheC5vcmcvdHlwZXMiCisgICAgICAgIHBhY2thZ2VOYW1lPSJjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5zZXJ2bGV0LnRheGNhbCI+CisgICAgICAgIDxpbnRlcmZhY2UgbmFtZT0iY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuc2VydmxldC50YXhjYWwuRmVkVGF4SUYiCisgICAgICAgICAgICBzZXJ2YW50TmFtZT0iY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuc2VydmxldC50YXhjYWwuRmVkVGF4U2VydmxldCIvPgorICAgICAgICA8aW50ZXJmYWNlIG5hbWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLnNlcnZsZXQudGF4Y2FsLlN0YXRlVGF4SUYiCisgICAgICAgICAgICBzZXJ2YW50TmFtZT0iY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuc2VydmxldC50YXhjYWwuU3RhdGVUYXhTZXJ2bGV0Ij4KKyAgICAgICAgPC9pbnRlcmZhY2U+CisgICAgPC9zZXJ2aWNlPgogPC9jb25maWd1cmF0aW9uPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9zZXJ2bGV0d3MvY29uZmlnL2NvbmZpZy13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvc2VydmxldHdzL2NvbmZpZy9jb25maWctd2ViLnhtbAppbmRleCBjZjkwZGRjLi40ZTMzZTMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9zZXJ2bGV0d3MvY29uZmlnL2NvbmZpZy13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLXdlYi54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHdzZGwgCisgIDx3c2RsCiAgICAgICBsb2NhdGlvbj0id3NkbC9UYXhDYWxTZXJ2bGV0U2VydmljZS53c2RsIgogICAgICAgcGFja2FnZU5hbWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLnNlcnZsZXQudGF4Y2FsIi8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9zZXJ2bGV0d3Mvd2ViL0ZlZFRheElGLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9zZXJ2bGV0d3Mvd2ViL0ZlZFRheElGLmphdmEKaW5kZXggNWM1NDk2MS4uZTNkYWU0MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvc2VydmxldHdzL3dlYi9GZWRUYXhJRi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL3NlcnZsZXR3cy93ZWIvRmVkVGF4SUYuamF2YQpAQCAtMjIsNiArMjIsNiBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEZlZFRheElGIGV4dGVuZHMgUmVtb3RlewogCi0JcHVibGljIGRvdWJsZSBnZXRGZWRUYXgoZG91YmxlIGluY29tZSwgZG91YmxlIGRlZHVjdGlvbnMpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgcHVibGljIGRvdWJsZSBnZXRGZWRUYXgoZG91YmxlIGluY29tZSwgZG91YmxlIGRlZHVjdGlvbnMpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL3NlcnZsZXR3cy93ZWIvRmVkVGF4U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvc2VydmxldHdzL3dlYi9GZWRUYXhTZXJ2bGV0LmphdmEKaW5kZXggMjQ4N2RlYS4uNTUyZjc1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvc2VydmxldHdzL3dlYi9GZWRUYXhTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvc2VydmxldHdzL3dlYi9GZWRUYXhTZXJ2bGV0LmphdmEKQEAgLTIxLDE1ICsyMSwxNSBAQAogaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CiBpbXBvcnQgamF2YXgueG1sLnJwYy5DYWxsOwogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGphdmF4Lm5hbWluZy4qOwogaW1wb3J0IGphdmF4LnhtbC5ycGMuU2VydmljZTsKIGltcG9ydCBqYXZheC54bWwucnBjLnNlcnZlci5TZXJ2aWNlTGlmZWN5Y2xlOwogaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0LlNpbmdsZVRocmVhZE1vZGVsOwogCi1wdWJsaWMgY2xhc3MgRmVkVGF4U2VydmxldCBpbXBsZW1lbnRzIAotCQkJU2luZ2xlVGhyZWFkTW9kZWwsIFNlcnZpY2VMaWZlY3ljbGUgeworcHVibGljIGNsYXNzIEZlZFRheFNlcnZsZXQgaW1wbGVtZW50cworICAgICAgICAgICAgU2luZ2xlVGhyZWFkTW9kZWwsIFNlcnZpY2VMaWZlY3ljbGUgewogCiAgICAgcHVibGljIEZlZFRheFNlcnZsZXQoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmVkVGF4U2VydmxldCgpIGluc3RhbnRpYXRlZCIpOwpAQCAtNDQsNyArNDQsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBkb3VibGUgZ2V0RmVkVGF4KGRvdWJsZSBpbmNvbWUsIGRvdWJsZSBkZWR1Y3Rpb25zKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJnZXRTdGF0ZVRheCBpbnZva2VkIGZyb20gc2VydmxldCBlbmRwb2ludCIpOwotCSByZXR1cm4gKChpbmNvbWUgLSAgZGVkdWN0aW9ucykgKiAwLjIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0U3RhdGVUYXggaW52b2tlZCBmcm9tIHNlcnZsZXQgZW5kcG9pbnQiKTsKKyAgICAgcmV0dXJuICgoaW5jb21lIC0gIGRlZHVjdGlvbnMpICogMC4yKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9zZXJ2bGV0d3Mvd2ViL1N0YXRlVGF4SUYuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL3NlcnZsZXR3cy93ZWIvU3RhdGVUYXhJRi5qYXZhCmluZGV4IGQ5ZTdkODUuLmViYmY3MTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL3NlcnZsZXR3cy93ZWIvU3RhdGVUYXhJRi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL3NlcnZsZXR3cy93ZWIvU3RhdGVUYXhJRi5qYXZhCkBAIC0yMiw2ICsyMiw2IEBACiAKIHB1YmxpYyBpbnRlcmZhY2UgU3RhdGVUYXhJRiBleHRlbmRzIFJlbW90ZXsKIAotCXB1YmxpYyBkb3VibGUgZ2V0U3RhdGVUYXgoZG91YmxlIGluY29tZSwgZG91YmxlIGRlZHVjdGlvbnMpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgcHVibGljIGRvdWJsZSBnZXRTdGF0ZVRheChkb3VibGUgaW5jb21lLCBkb3VibGUgZGVkdWN0aW9ucykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvc2VydmxldHdzL3dlYi9TdGF0ZVRheFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3NxZXRlc3RzL3dlYnNlcnZpY2VzL3NlcnZsZXR3cy93ZWIvU3RhdGVUYXhTZXJ2bGV0LmphdmEKaW5kZXggODlhMjQ1Ni4uNDRmYzg3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3FldGVzdHMvd2Vic2VydmljZXMvc2VydmxldHdzL3dlYi9TdGF0ZVRheFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zcWV0ZXN0cy93ZWJzZXJ2aWNlcy9zZXJ2bGV0d3Mvd2ViL1N0YXRlVGF4U2VydmxldC5qYXZhCkBAIC0yMSwxNSArMjEsMTUgQEAKIGltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwogaW1wb3J0IGphdmF4LnhtbC5ycGMuQ2FsbDsKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYXZheC5uYW1pbmcuKjsKIGltcG9ydCBqYXZheC54bWwucnBjLlNlcnZpY2U7CiBpbXBvcnQgamF2YXgueG1sLnJwYy5zZXJ2ZXIuU2VydmljZUxpZmVjeWNsZTsKIGltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwogaW1wb3J0IGpha2FydGEuc2VydmxldC5TaW5nbGVUaHJlYWRNb2RlbDsKIAotcHVibGljIGNsYXNzIFN0YXRlVGF4U2VydmxldCBpbXBsZW1lbnRzIAotCQkJU2luZ2xlVGhyZWFkTW9kZWwsIFNlcnZpY2VMaWZlY3ljbGUgeworcHVibGljIGNsYXNzIFN0YXRlVGF4U2VydmxldCBpbXBsZW1lbnRzCisgICAgICAgICAgICBTaW5nbGVUaHJlYWRNb2RlbCwgU2VydmljZUxpZmVjeWNsZSB7CiAKICAgICBwdWJsaWMgU3RhdGVUYXhTZXJ2bGV0KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlVGF4U2VydmxldCgpIGluc3RhbnRpYXRlZCIpOwpAQCAtNDQsNyArNDQsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBkb3VibGUgZ2V0U3RhdGVUYXgoZG91YmxlIGluY29tZSwgZG91YmxlIGRlZHVjdGlvbnMpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImdldFN0YXRlVGF4IGludm9rZWQgZnJvbSBzZXJ2bGV0IGVuZHBvaW50Iik7Ci0JIHJldHVybiAoKGluY29tZSAtICBkZWR1Y3Rpb25zKSAqIDAuMyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXRTdGF0ZVRheCBpbnZva2VkIGZyb20gc2VydmxldCBlbmRwb2ludCIpOworICAgICByZXR1cm4gKChpbmNvbWUgLSAgZGVkdWN0aW9ucykgKiAwLjMpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3N0YXJ0LWRvbWFpbi5zaCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3N0YXJ0LWRvbWFpbi5zaAppbmRleCA3ODdiYTY0Li42NDYwZDIwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zdGFydC1kb21haW4uc2gKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3RhcnQtZG9tYWluLnNoCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgdGhlbgogICAgICAgICBBU19BRE1JTl9VU0VSPWBlY2hvICR4IHxjdXQgLWQnPScgLWYyYAogICAgIGZpCi0gICAKKwogICAgIGlmIFsgJHZhcnZhbCA9ICJhZG1pbi5wYXNzd29yZCIgXTsKICAgICB0aGVuCiAgICAgICAgIEFTX0FETUlOX1BBU1NXT1JEPWBlY2hvICR4IHxjdXQgLWQnPScgLWYyYApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3RvcHBiLmJhdCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3N0b3BwYi5iYXQKaW5kZXggZjExOWFiMS4uOTQxNjg5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvc3RvcHBiLmJhdAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy9zdG9wcGIuYmF0CkBAIC0xLDQgKzEsNCBAQAotQGVjaG8gb2ZmCi1zZXQgSkFWQV9IT01FPSUxCi1lY2hvICVKQVZBX0hPTUUlCitAZWNobyBvZmYNCitzZXQgSkFWQV9IT01FPSUxDQorZWNobyAlSkFWQV9IT01FJQ0KICIlSkFWQV9IT01FJS9iaW4vamF2YSIgLWNsYXNzcGF0aCAlQVBTX0hPTUUlL2xpYi9pc3FsLmphcjslUzFBU19IT01FJS9wb2ludGJhc2UvbGliL3BiY2xpZW50LmphcjslUzFBU19IT01FJS9wb2ludGJhc2UvbGliL3BiZW1iZWRkZWQuamFyIGlzcWwuSVNRTCBqZGJjOnBvaW50YmFzZTpzZXJ2ZXI6Ly9sb2NhbGhvc3Q6JTIvc3FlLXNhbXBsZXMsbmV3IGRidXNlciBkYnBhc3N3b3JkIGNvbS5wb2ludGJhc2UuamRiYy5qZGJjVW5pdmVyc2FsRHJpdmVyIHNodXRkb3duUGJzLnNxbA0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvZmlsZWRpZmYvRGlmZi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9maWxlZGlmZi9EaWZmLmphdmEKaW5kZXggZDk4NzcwYS4uYjY3NjY4OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9maWxlZGlmZi9EaWZmLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9maWxlZGlmZi9EaWZmLmphdmEKQEAgLTI1LDM1ICsyNSwzNSBAQAogLyoqIFRoaXMgaXMgdGhlIGluZm8ga2VwdCBwZXItZmlsZS4gICAgICovCiBjbGFzcyBmaWxlSW5mbyB7CiAKLQlzdGF0aWMgZmluYWwgaW50IE1BWExJTkVDT1VOVCA9IDIwMDAwOworICAgIHN0YXRpYyBmaW5hbCBpbnQgTUFYTElORUNPVU5UID0gMjAwMDA7CiAKLQlEYXRhSW5wdXRTdHJlYW0gZmlsZTsJLyogRmlsZSBoYW5kbGUgdGhhdCBpcyBvcGVuIGZvciByZWFkLiAgKi8KLQlwdWJsaWMgaW50IG1heExpbmU7CS8qIEFmdGVyIGlucHV0IGRvbmUsICMgbGluZXMgaW4gZmlsZS4gICovCi0Jbm9kZSBzeW1ib2xbXTsgLyogVGhlIHN5bXRhYiBoYW5kbGUgb2YgZWFjaCBsaW5lLiAqLwotCWludCBvdGhlcltdOyAvKiBNYXAgb2YgbGluZSMgdG8gbGluZSMgaW4gb3RoZXIgZmlsZSAqLworICAgIERhdGFJbnB1dFN0cmVhbSBmaWxlOyAgICAvKiBGaWxlIGhhbmRsZSB0aGF0IGlzIG9wZW4gZm9yIHJlYWQuICAqLworICAgIHB1YmxpYyBpbnQgbWF4TGluZTsgICAgLyogQWZ0ZXIgaW5wdXQgZG9uZSwgIyBsaW5lcyBpbiBmaWxlLiAgKi8KKyAgICBub2RlIHN5bWJvbFtdOyAvKiBUaGUgc3ltdGFiIGhhbmRsZSBvZiBlYWNoIGxpbmUuICovCisgICAgaW50IG90aGVyW107IC8qIE1hcCBvZiBsaW5lIyB0byBsaW5lIyBpbiBvdGhlciBmaWxlICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICggLTEgbWVhbnMgZG9uJ3Qta25vdyApLiAgICAgICAgICAgICovCi0JCQkJLyogQWxsb2NhdGVkIEFGVEVSIHRoZSBsaW5lcyBhcmUgcmVhZC4gKi8KKyAgICAgICAgICAgICAgICAvKiBBbGxvY2F0ZWQgQUZURVIgdGhlIGxpbmVzIGFyZSByZWFkLiAqLwogCi0JLyoqCi0JICogTm9ybWFsIGNvbnN0cnVjdG9yIHdpdGggb25lIGZpbGVuYW1lOyBmaWxlIGlzIG9wZW5lZCBhbmQgc2F2ZWQuCi0JICovCi0JZmlsZUluZm8oIFN0cmluZyBmaWxlbmFtZSApIHsKLQkJc3ltYm9sID0gbmV3IG5vZGUgWyBNQVhMSU5FQ09VTlQrMiBdOwotCQlvdGhlciAgPSBudWxsOwkJLy8gYWxsb2NhdGVkIGxhdGVyIQotCQl0cnkgewotCQkJZmlsZSA9IG5ldyBEYXRhSW5wdXRTdHJlYW0oCi0JCQkJbmV3IEZpbGVJbnB1dFN0cmVhbSggZmlsZW5hbWUpKTsKLQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJICBTeXN0ZW0uZXJyLnByaW50bG4oIkRpZmYgY2FuJ3QgcmVhZCBmaWxlICIgKwotCQkJCWZpbGVuYW1lICk7Ci0JCQkgIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IgRXhjZXB0aW9uIHdhczoiICsgZSApOwotCQkJICBTeXN0ZW0uZXhpdCgxKTsKLQkJfQotCX0KLQkvLyBUaGlzIGlzIGRvbmUgbGF0ZSwgdG8gYmUgc2FtZSBzaXplIGFzICMgbGluZXMgaW4gaW5wdXQgZmlsZS4KLQl2b2lkIGFsbG9jKCkgewotCQlvdGhlciAgPSBuZXcgaW50W3N5bWJvbC5sZW5ndGggKyAyXTsKLQl9CisgICAgLyoqCisgICAgICogTm9ybWFsIGNvbnN0cnVjdG9yIHdpdGggb25lIGZpbGVuYW1lOyBmaWxlIGlzIG9wZW5lZCBhbmQgc2F2ZWQuCisgICAgICovCisgICAgZmlsZUluZm8oIFN0cmluZyBmaWxlbmFtZSApIHsKKyAgICAgICAgc3ltYm9sID0gbmV3IG5vZGUgWyBNQVhMSU5FQ09VTlQrMiBdOworICAgICAgICBvdGhlciAgPSBudWxsOyAgICAgICAgLy8gYWxsb2NhdGVkIGxhdGVyIQorICAgICAgICB0cnkgeworICAgICAgICAgICAgZmlsZSA9IG5ldyBEYXRhSW5wdXRTdHJlYW0oCisgICAgICAgICAgICAgICAgbmV3IEZpbGVJbnB1dFN0cmVhbSggZmlsZW5hbWUpKTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkRpZmYgY2FuJ3QgcmVhZCBmaWxlICIgKworICAgICAgICAgICAgICAgIGZpbGVuYW1lICk7CisgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IgRXhjZXB0aW9uIHdhczoiICsgZSApOworICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBUaGlzIGlzIGRvbmUgbGF0ZSwgdG8gYmUgc2FtZSBzaXplIGFzICMgbGluZXMgaW4gaW5wdXQgZmlsZS4KKyAgICB2b2lkIGFsbG9jKCkgeworICAgICAgICBvdGhlciAgPSBuZXcgaW50W3N5bWJvbC5sZW5ndGggKyAyXTsKKyAgICB9CiB9OwogCiAvKioKQEAgLTk1LDQ3MSArOTUsNDcxIEBACiAgKi8KIHB1YmxpYyBjbGFzcyBEaWZmIHsKIAotCS8qKiBibG9jayBsZW4gPiBhbnkgcG9zc2libGUgcmVhbCBibG9jayBsZW4gKi8KLQlmaW5hbCBpbnQgVU5SRUFMPUludGVnZXIuTUFYX1ZBTFVFOworICAgIC8qKiBibG9jayBsZW4gPiBhbnkgcG9zc2libGUgcmVhbCBibG9jayBsZW4gKi8KKyAgICBmaW5hbCBpbnQgVU5SRUFMPUludGVnZXIuTUFYX1ZBTFVFOwogCiAgICAgICAgLy8gcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9bmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwogCi0JLyoqIEtlZXBzIHRyYWNrIG9mIGluZm9ybWF0aW9uIGFib3V0IGZpbGUxIGFuZCBmaWxlMiAqLwotCWZpbGVJbmZvIG9sZGluZm8sIG5ld2luZm87CisgICAgLyoqIEtlZXBzIHRyYWNrIG9mIGluZm9ybWF0aW9uIGFib3V0IGZpbGUxIGFuZCBmaWxlMiAqLworICAgIGZpbGVJbmZvIG9sZGluZm8sIG5ld2luZm87CiAKLQkvKiogYmxvY2tsZW4gaXMgdGhlIGluZm8gYWJvdXQgZm91bmQgYmxvY2tzLiBJdCB3aWxsIGJlIHNldCB0byAwLCBleGNlcHQKLQkgKiBhdCB0aGUgbGluZSNzIHdoZXJlIGJsb2NrcyBzdGFydCBpbiB0aGUgb2xkIGZpbGUuIEF0IHRoZXNlIHBsYWNlcyBpdAotCSAqIHdpbGwgYmUgc2V0IHRvIHRoZSAjIG9mIGxpbmVzIGluIHRoZSBibG9jay4gRHVyaW5nIHByaW50b3V0ICwKLQkgKiB0aGlzICMgd2lsbCBiZSByZXNldCB0byAtMSBpZiB0aGUgYmxvY2sgaXMgcHJpbnRlZCBhcyBhIE1PVkUgYmxvY2sKLQkgKiAoYmVjYXVzZSB0aGUgcHJpbnRvdXQgcGhhc2Ugd2lsbCBlbmNvdW50ZXIgdGhlIGJsb2NrIHR3aWNlLCBidXQKLQkgKiBtdXN0IG9ubHkgcHJpbnQgaXQgb25jZS4pCi0JICogVGhlIGFycmF5IGRlY2xhcmF0aW9ucyBhcmUgdG8gTUFYTElORUNPVU5UKzIgc28gdGhhdCB3ZSBjYW4gaGF2ZSB0d28KLQkgKiBleHRyYSBsaW5lcyAocHNldWRvbGluZXMpIGF0IGxpbmUjIDAgYW5kIGxpbmUjIE1BWExJTkVDT1VOVCsxCi0JICogKG9yIGxlc3MpLgotCSAqLwotCWludCBibG9ja2xlbltdOworICAgIC8qKiBibG9ja2xlbiBpcyB0aGUgaW5mbyBhYm91dCBmb3VuZCBibG9ja3MuIEl0IHdpbGwgYmUgc2V0IHRvIDAsIGV4Y2VwdAorICAgICAqIGF0IHRoZSBsaW5lI3Mgd2hlcmUgYmxvY2tzIHN0YXJ0IGluIHRoZSBvbGQgZmlsZS4gQXQgdGhlc2UgcGxhY2VzIGl0CisgICAgICogd2lsbCBiZSBzZXQgdG8gdGhlICMgb2YgbGluZXMgaW4gdGhlIGJsb2NrLiBEdXJpbmcgcHJpbnRvdXQgLAorICAgICAqIHRoaXMgIyB3aWxsIGJlIHJlc2V0IHRvIC0xIGlmIHRoZSBibG9jayBpcyBwcmludGVkIGFzIGEgTU9WRSBibG9jaworICAgICAqIChiZWNhdXNlIHRoZSBwcmludG91dCBwaGFzZSB3aWxsIGVuY291bnRlciB0aGUgYmxvY2sgdHdpY2UsIGJ1dAorICAgICAqIG11c3Qgb25seSBwcmludCBpdCBvbmNlLikKKyAgICAgKiBUaGUgYXJyYXkgZGVjbGFyYXRpb25zIGFyZSB0byBNQVhMSU5FQ09VTlQrMiBzbyB0aGF0IHdlIGNhbiBoYXZlIHR3bworICAgICAqIGV4dHJhIGxpbmVzIChwc2V1ZG9saW5lcykgYXQgbGluZSMgMCBhbmQgbGluZSMgTUFYTElORUNPVU5UKzEKKyAgICAgKiAob3IgbGVzcykuCisgICAgICovCisgICAgaW50IGJsb2NrbGVuW107CiAKLQkvKioKLQkgKiBtYWluIC0gZW50cnkgcG9pbnQgd2hlbiB1c2VkIHN0YW5kYWxvbmUuCi0JICogTk9URTogbm8gcm91dGluZXMgcmV0dXJuIGVycm9yIGNvZGVzIG9yIHRocm93IGFueSBsb2NhbAotCSAqIGV4Y2VwdGlvbnMuIEluc3RlYWQsIGFueSByb3V0aW5lIG1heSBjb21wbGFpbgotCSAqIHRvIHN0ZGVyciBhbmQgdGhlbiBleGl0IHdpdGggZXJyb3IgdG8gdGhlIHN5c3RlbS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc3RyaW5nc1tdKQotCXsKLQkJaWYgKCBhcmdzdHJpbmdzLmxlbmd0aCAhPSAyICkgewotCQkgIFN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IGRpZmYgb2xkZmlsZSBuZXdmaWxlIiApOwotCQkgIFN5c3RlbS5leGl0KDEpOwotCQl9Ci0JCURpZmYgZCA9IG5ldyBEaWZmKCk7Ci0JCWQuZG9EaWZmKGFyZ3N0cmluZ3NbMF0sIGFyZ3N0cmluZ3NbMV0pOwotCQlyZXR1cm47Ci0JfQorICAgIC8qKgorICAgICAqIG1haW4gLSBlbnRyeSBwb2ludCB3aGVuIHVzZWQgc3RhbmRhbG9uZS4KKyAgICAgKiBOT1RFOiBubyByb3V0aW5lcyByZXR1cm4gZXJyb3IgY29kZXMgb3IgdGhyb3cgYW55IGxvY2FsCisgICAgICogZXhjZXB0aW9ucy4gSW5zdGVhZCwgYW55IHJvdXRpbmUgbWF5IGNvbXBsYWluCisgICAgICogdG8gc3RkZXJyIGFuZCB0aGVuIGV4aXQgd2l0aCBlcnJvciB0byB0aGUgc3lzdGVtLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzdHJpbmdzW10pCisgICAgeworICAgICAgICBpZiAoIGFyZ3N0cmluZ3MubGVuZ3RoICE9IDIgKSB7CisgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVc2FnZTogZGlmZiBvbGRmaWxlIG5ld2ZpbGUiICk7CisgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgRGlmZiBkID0gbmV3IERpZmYoKTsKKyAgICAgICAgZC5kb0RpZmYoYXJnc3RyaW5nc1swXSwgYXJnc3RyaW5nc1sxXSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLQkvKiogQ29uc3RydWN0IGEgRGlmZiBvYmplY3QuICovCi0JRGlmZigpIHsKLQl9CisgICAgLyoqIENvbnN0cnVjdCBhIERpZmYgb2JqZWN0LiAqLworICAgIERpZmYoKSB7CisgICAgfQogCi0JLyoqIERvIG9uZSBmaWxlIGNvbXBhcmlzb24uIENhbGxlZCB3aXRoIGJvdGggZmlsZW5hbWVzLiAqLwotCXB1YmxpYyB2b2lkIGRvRGlmZihTdHJpbmcgb2xkRmlsZSwgU3RyaW5nIG5ld0ZpbGUpIHsKKyAgICAvKiogRG8gb25lIGZpbGUgY29tcGFyaXNvbi4gQ2FsbGVkIHdpdGggYm90aCBmaWxlbmFtZXMuICovCisgICAgcHVibGljIHZvaWQgZG9EaWZmKFN0cmluZyBvbGRGaWxlLCBTdHJpbmcgbmV3RmlsZSkgewogICAgICAgICAgICAgICAgIC8vc3RhdC5hZGREZXNjcmlwdGlvbigiVGhpcyBpcyB0ZXN0IHN1aXRlICBmb3IgQVZLIik7Ci0JCXByaW50bG4oICI+Pj4+IERpZmZlcmVuY2Ugb2YgZmlsZSBcIiIgKyBvbGRGaWxlICsKLQkJCSJcIiBhbmQgZmlsZSBcIiIgKyBuZXdGaWxlICsgIlwiLlxuIik7Ci0JCW9sZGluZm8gPSBuZXcgZmlsZUluZm8ob2xkRmlsZSk7Ci0JCW5ld2luZm8gPSBuZXcgZmlsZUluZm8obmV3RmlsZSk7Ci0JCS8qIHdlIGRvbid0IHByb2Nlc3MgdW50aWwgd2Uga25vdyBib3RoIGZpbGVzIHJlYWxseSBkbyBleGlzdC4gKi8KLQkJdHJ5IHsKLQkJCWlucHV0c2Nhbiggb2xkaW5mbyApOwotCQkJaW5wdXRzY2FuKCBuZXdpbmZvICk7Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5lcnIucHJpbnRsbigiUmVhZCBlcnJvcjogIiArIGUpOwotCQl9CisgICAgICAgIHByaW50bG4oICI+Pj4+IERpZmZlcmVuY2Ugb2YgZmlsZSBcIiIgKyBvbGRGaWxlICsKKyAgICAgICAgICAgICJcIiBhbmQgZmlsZSBcIiIgKyBuZXdGaWxlICsgIlwiLlxuIik7CisgICAgICAgIG9sZGluZm8gPSBuZXcgZmlsZUluZm8ob2xkRmlsZSk7CisgICAgICAgIG5ld2luZm8gPSBuZXcgZmlsZUluZm8obmV3RmlsZSk7CisgICAgICAgIC8qIHdlIGRvbid0IHByb2Nlc3MgdW50aWwgd2Uga25vdyBib3RoIGZpbGVzIHJlYWxseSBkbyBleGlzdC4gKi8KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlucHV0c2Nhbiggb2xkaW5mbyApOworICAgICAgICAgICAgaW5wdXRzY2FuKCBuZXdpbmZvICk7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiUmVhZCBlcnJvcjogIiArIGUpOworICAgICAgICB9CiAKLQkJLyogTm93IHRoYXQgd2UndmUgcmVhZCBhbGwgdGhlIGxpbmVzLCBhbGxvY2F0ZSBzb21lIGFycmF5cy4KLQkJICovCi0JCWJsb2NrbGVuID0gbmV3IGludFsgKG9sZGluZm8ubWF4TGluZT5uZXdpbmZvLm1heExpbmU/Ci0JCQlvbGRpbmZvLm1heExpbmUgOiBuZXdpbmZvLm1heExpbmUpICsgMiBdOwotCQlvbGRpbmZvLmFsbG9jKCk7Ci0JCW5ld2luZm8uYWxsb2MoKTsKKyAgICAgICAgLyogTm93IHRoYXQgd2UndmUgcmVhZCBhbGwgdGhlIGxpbmVzLCBhbGxvY2F0ZSBzb21lIGFycmF5cy4KKyAgICAgICAgICovCisgICAgICAgIGJsb2NrbGVuID0gbmV3IGludFsgKG9sZGluZm8ubWF4TGluZT5uZXdpbmZvLm1heExpbmU/CisgICAgICAgICAgICBvbGRpbmZvLm1heExpbmUgOiBuZXdpbmZvLm1heExpbmUpICsgMiBdOworICAgICAgICBvbGRpbmZvLmFsbG9jKCk7CisgICAgICAgIG5ld2luZm8uYWxsb2MoKTsKIAotCQkvKiBOb3cgZG8gdGhlIHdvcmssIGFuZCBwcmludCB0aGUgcmVzdWx0cy4gKi8KLQkJdHJhbnNmb3JtKCk7Ci0JCXByaW50b3V0KCk7CisgICAgICAgIC8qIE5vdyBkbyB0aGUgd29yaywgYW5kIHByaW50IHRoZSByZXN1bHRzLiAqLworICAgICAgICB0cmFuc2Zvcm0oKTsKKyAgICAgICAgcHJpbnRvdXQoKTsKICAgICAgICAgICAgICAgICAvL3N0YXQucHJpbnRTdW1tYXJ5KCJhcHB2ZXJpZmljYXRpb25JRCIpOwotCX0KKyAgICB9CiAKLQkvKioKLQkgKiBpbnB1dHNjYW4gICAgUmVhZHMgdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IHBpbmZvLmZpbGUuCi0JICogLS0tLS0tLS0tICAgIFBsYWNlcyB0aGUgbGluZXMgb2YgdGhhdCBmaWxlIGluIHRoZSBzeW1ib2wgdGFibGUuCi0JICogICAgICAgICAgICAgIFNldHMgcGluZm8ubWF4TGluZSB0byB0aGUgbnVtYmVyIG9mIGxpbmVzIGZvdW5kLgotCSAqLwotCXZvaWQgaW5wdXRzY2FuKCBmaWxlSW5mbyBwaW5mbyApIHRocm93cyBJT0V4Y2VwdGlvbgotCXsKLQkgICAgIFN0cmluZyBsaW5lYnVmZmVyOworICAgIC8qKgorICAgICAqIGlucHV0c2NhbiAgICBSZWFkcyB0aGUgZmlsZSBzcGVjaWZpZWQgYnkgcGluZm8uZmlsZS4KKyAgICAgKiAtLS0tLS0tLS0gICAgUGxhY2VzIHRoZSBsaW5lcyBvZiB0aGF0IGZpbGUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgKiAgICAgICAgICAgICAgU2V0cyBwaW5mby5tYXhMaW5lIHRvIHRoZSBudW1iZXIgb2YgbGluZXMgZm91bmQuCisgICAgICovCisgICAgdm9pZCBpbnB1dHNjYW4oIGZpbGVJbmZvIHBpbmZvICkgdGhyb3dzIElPRXhjZXB0aW9uCisgICAgeworICAgICAgICAgU3RyaW5nIGxpbmVidWZmZXI7CiAKLQkgICAgIHBpbmZvLm1heExpbmUgPSAwOwotCSAgICAgd2hpbGUgKChsaW5lYnVmZmVyID0gcGluZm8uZmlsZS5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0JCSAgICAgICBzdG9yZWxpbmUoIGxpbmVidWZmZXIsIHBpbmZvICk7Ci0JICAgICB9Ci0JfQorICAgICAgICAgcGluZm8ubWF4TGluZSA9IDA7CisgICAgICAgICB3aGlsZSAoKGxpbmVidWZmZXIgPSBwaW5mby5maWxlLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgIHN0b3JlbGluZSggbGluZWJ1ZmZlciwgcGluZm8gKTsKKyAgICAgICAgIH0KKyAgICB9CiAKLQkvKioKLQkgKiBzdG9yZWxpbmUgICAgUGxhY2VzIGxpbmUgaW50byBzeW1ib2wgdGFibGUuCi0JICogLS0tLS0tLS0tICAgIEV4cGVjdHMgcGluZm8ubWF4TGluZSBpbml0dGVkOiBpbmNyZW1lbnRzLgotCSAqICAgICAgICAgICAgICBQbGFjZXMgc3ltYm9sIHRhYmxlIGhhbmRsZSBpbiBwaW5mby55bWJvbC4KLQkgKiAgICAgICAgICAgICAgRXhwZWN0cyBwaW5mbyBpcyBlaXRoZXIgb2xkaW5mbyBvciBuZXdpbmZvLgotCSAqLwotCXZvaWQgc3RvcmVsaW5lKCBTdHJpbmcgbGluZWJ1ZmZlciwgZmlsZUluZm8gcGluZm8gKQotCXsKLQkgICAgIGludCBsaW5lbnVtID0gKytwaW5mby5tYXhMaW5lOyAgICAvKiBub3RlLCBubyBsaW5lIHplcm8gKi8KLQkgICAgIGlmICggbGluZW51bSA+IGZpbGVJbmZvLk1BWExJTkVDT1VOVCApIHsKLQkJICBTeXN0ZW0uZXJyLnByaW50bG4oICJNQVhMSU5FQ09VTlQgZXhjZWVkZWQsIG11c3Qgc3RvcC4iICk7Ci0JCSAgU3lzdGVtLmV4aXQoMSk7Ci0JICAgICB9Ci0JICAgICBwaW5mby5zeW1ib2xbIGxpbmVudW0gXSA9Ci0JCSAgbm9kZS5hZGRTeW1ib2woIGxpbmVidWZmZXIsIHBpbmZvID09IG9sZGluZm8sIGxpbmVudW0gKTsKLQl9CisgICAgLyoqCisgICAgICogc3RvcmVsaW5lICAgIFBsYWNlcyBsaW5lIGludG8gc3ltYm9sIHRhYmxlLgorICAgICAqIC0tLS0tLS0tLSAgICBFeHBlY3RzIHBpbmZvLm1heExpbmUgaW5pdHRlZDogaW5jcmVtZW50cy4KKyAgICAgKiAgICAgICAgICAgICAgUGxhY2VzIHN5bWJvbCB0YWJsZSBoYW5kbGUgaW4gcGluZm8ueW1ib2wuCisgICAgICogICAgICAgICAgICAgIEV4cGVjdHMgcGluZm8gaXMgZWl0aGVyIG9sZGluZm8gb3IgbmV3aW5mby4KKyAgICAgKi8KKyAgICB2b2lkIHN0b3JlbGluZSggU3RyaW5nIGxpbmVidWZmZXIsIGZpbGVJbmZvIHBpbmZvICkKKyAgICB7CisgICAgICAgICBpbnQgbGluZW51bSA9ICsrcGluZm8ubWF4TGluZTsgICAgLyogbm90ZSwgbm8gbGluZSB6ZXJvICovCisgICAgICAgICBpZiAoIGxpbmVudW0gPiBmaWxlSW5mby5NQVhMSU5FQ09VTlQgKSB7CisgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiTUFYTElORUNPVU5UIGV4Y2VlZGVkLCBtdXN0IHN0b3AuIiApOworICAgICAgICAgIFN5c3RlbS5leGl0KDEpOworICAgICAgICAgfQorICAgICAgICAgcGluZm8uc3ltYm9sWyBsaW5lbnVtIF0gPQorICAgICAgICAgIG5vZGUuYWRkU3ltYm9sKCBsaW5lYnVmZmVyLCBwaW5mbyA9PSBvbGRpbmZvLCBsaW5lbnVtICk7CisgICAgfQogCi0JLyoKLQkgKiB0cmFuc2Zvcm0KLQkgKiBBbmFseXplcyB0aGUgZmlsZSBkaWZmZXJlbmNlcyBhbmQgbGVhdmVzIGl0cyBmaW5kaW5ncyBpbgotCSAqIHRoZSBnbG9iYWwgYXJyYXlzIG9sZGluZm8ub3RoZXIsIG5ld2luZm8ub3RoZXIsIGFuZCBibG9ja2xlbi4KLQkgKiBFeHBlY3RzIGJvdGggZmlsZXMgaW4gc3ltdGFiLgotCSAqIEV4cGVjdHMgdmFsaWQgIm1heExpbmUiIGFuZCAic3ltYm9sIiBpbiBvbGRpbmZvIGFuZCBuZXdpbmZvLgotCSAqLwotCXZvaWQgdHJhbnNmb3JtKCkKLQl7Ci0JICAgICBpbnQgb2xkbGluZSwgbmV3bGluZTsKLQkgICAgIGludCBvbGRtYXggPSBvbGRpbmZvLm1heExpbmUgKyAyOyAgLyogQ291bnQgcHNldWRvbGluZXMgYXQgICovCi0JICAgICBpbnQgbmV3bWF4ID0gbmV3aW5mby5tYXhMaW5lICsgMjsgIC8qIC4uZnJvbnQgYW5kIHJlYXIgb2YgZmlsZSAqLworICAgIC8qCisgICAgICogdHJhbnNmb3JtCisgICAgICogQW5hbHl6ZXMgdGhlIGZpbGUgZGlmZmVyZW5jZXMgYW5kIGxlYXZlcyBpdHMgZmluZGluZ3MgaW4KKyAgICAgKiB0aGUgZ2xvYmFsIGFycmF5cyBvbGRpbmZvLm90aGVyLCBuZXdpbmZvLm90aGVyLCBhbmQgYmxvY2tsZW4uCisgICAgICogRXhwZWN0cyBib3RoIGZpbGVzIGluIHN5bXRhYi4KKyAgICAgKiBFeHBlY3RzIHZhbGlkICJtYXhMaW5lIiBhbmQgInN5bWJvbCIgaW4gb2xkaW5mbyBhbmQgbmV3aW5mby4KKyAgICAgKi8KKyAgICB2b2lkIHRyYW5zZm9ybSgpCisgICAgeworICAgICAgICAgaW50IG9sZGxpbmUsIG5ld2xpbmU7CisgICAgICAgICBpbnQgb2xkbWF4ID0gb2xkaW5mby5tYXhMaW5lICsgMjsgIC8qIENvdW50IHBzZXVkb2xpbmVzIGF0ICAqLworICAgICAgICAgaW50IG5ld21heCA9IG5ld2luZm8ubWF4TGluZSArIDI7ICAvKiAuLmZyb250IGFuZCByZWFyIG9mIGZpbGUgKi8KIAotCSAgICAgZm9yIChvbGRsaW5lPTA7IG9sZGxpbmUgPCBvbGRtYXg7IG9sZGxpbmUrKyApCi0JCQlvbGRpbmZvLm90aGVyW29sZGxpbmVdPSAtMTsKLQkgICAgIGZvciAobmV3bGluZT0wOyBuZXdsaW5lIDwgbmV3bWF4OyBuZXdsaW5lKysgKQotCQkJbmV3aW5mby5vdGhlcltuZXdsaW5lXT0gLTE7CisgICAgICAgICBmb3IgKG9sZGxpbmU9MDsgb2xkbGluZSA8IG9sZG1heDsgb2xkbGluZSsrICkKKyAgICAgICAgICAgIG9sZGluZm8ub3RoZXJbb2xkbGluZV09IC0xOworICAgICAgICAgZm9yIChuZXdsaW5lPTA7IG5ld2xpbmUgPCBuZXdtYXg7IG5ld2xpbmUrKyApCisgICAgICAgICAgICBuZXdpbmZvLm90aGVyW25ld2xpbmVdPSAtMTsKIAotCSAgICAgc2NhbnVuaXF1ZSgpOyAgLyogc2NhbiBmb3IgbGluZXMgdXNlZCBvbmNlIGluIGJvdGggZmlsZXMgKi8KLQkgICAgIHNjYW5hZnRlcigpOyAgIC8qIHNjYW4gcGFzdCBzdXJlLW1hdGNoZXMgZm9yIG5vbi11bmlxdWUgYmxvY2tzICovCi0JICAgICBzY2FuYmVmb3JlKCk7ICAvKiBzY2FuIGJhY2t3YXJkcyBmcm9tIHN1cmUtbWF0Y2hlcyAqLwotCSAgICAgc2NhbmJsb2NrcygpOyAgLyogZmluZCB0aGUgZnJvbnRzIGFuZCBsZW5ndGhzIG9mIGJsb2NrcyAqLwotCX0KKyAgICAgICAgIHNjYW51bmlxdWUoKTsgIC8qIHNjYW4gZm9yIGxpbmVzIHVzZWQgb25jZSBpbiBib3RoIGZpbGVzICovCisgICAgICAgICBzY2FuYWZ0ZXIoKTsgICAvKiBzY2FuIHBhc3Qgc3VyZS1tYXRjaGVzIGZvciBub24tdW5pcXVlIGJsb2NrcyAqLworICAgICAgICAgc2NhbmJlZm9yZSgpOyAgLyogc2NhbiBiYWNrd2FyZHMgZnJvbSBzdXJlLW1hdGNoZXMgKi8KKyAgICAgICAgIHNjYW5ibG9ja3MoKTsgIC8qIGZpbmQgdGhlIGZyb250cyBhbmQgbGVuZ3RocyBvZiBibG9ja3MgKi8KKyAgICB9CiAKLQkvKgotCSAqIHNjYW51bmlxdWUKLQkgKiBTY2FucyBmb3IgbGluZXMgd2hpY2ggYXJlIHVzZWQgZXhhY3RseSBvbmNlIGluIGVhY2ggZmlsZS4KLQkgKiBFeHBlY3RzIGJvdGggZmlsZXMgaW4gc3ltdGFiLCBhbmQgb2xkaW5mbyBhbmQgbmV3aW5mbyB2YWxpZC4KLQkgKiBUaGUgYXBwcm9wcmlhdGUgIm90aGVyIiBhcnJheSBlbnRyaWVzIGFyZSBzZXQgdG8gdGhlIGxpbmUjIGluCi0JICogdGhlIG90aGVyIGZpbGUuCi0JICogQ2xhaW1zIHBzZXVkby1saW5lcyBhdCAwIGFuZCBYWFhpbmZvLm1heExpbmUrMSBhcmUgdW5pcXVlLgotCSAqLwotCXZvaWQgc2NhbnVuaXF1ZSgpCi0JewotCSAgICAgaW50IG9sZGxpbmUsIG5ld2xpbmU7Ci0JICAgICBub2RlIHBzeW1ib2w7CisgICAgLyoKKyAgICAgKiBzY2FudW5pcXVlCisgICAgICogU2NhbnMgZm9yIGxpbmVzIHdoaWNoIGFyZSB1c2VkIGV4YWN0bHkgb25jZSBpbiBlYWNoIGZpbGUuCisgICAgICogRXhwZWN0cyBib3RoIGZpbGVzIGluIHN5bXRhYiwgYW5kIG9sZGluZm8gYW5kIG5ld2luZm8gdmFsaWQuCisgICAgICogVGhlIGFwcHJvcHJpYXRlICJvdGhlciIgYXJyYXkgZW50cmllcyBhcmUgc2V0IHRvIHRoZSBsaW5lIyBpbgorICAgICAqIHRoZSBvdGhlciBmaWxlLgorICAgICAqIENsYWltcyBwc2V1ZG8tbGluZXMgYXQgMCBhbmQgWFhYaW5mby5tYXhMaW5lKzEgYXJlIHVuaXF1ZS4KKyAgICAgKi8KKyAgICB2b2lkIHNjYW51bmlxdWUoKQorICAgIHsKKyAgICAgICAgIGludCBvbGRsaW5lLCBuZXdsaW5lOworICAgICAgICAgbm9kZSBwc3ltYm9sOwogCi0JICAgICBmb3IoIG5ld2xpbmUgPSAxOyBuZXdsaW5lIDw9IG5ld2luZm8ubWF4TGluZTsgbmV3bGluZSsrICkgewotCQkgIHBzeW1ib2wgPSBuZXdpbmZvLnN5bWJvbFsgbmV3bGluZSBdOwotCQkgIGlmICggcHN5bWJvbC5zeW1ib2xJc1VuaXF1ZSgpKSB7ICAgICAgICAvLyAxIHVzZSBpbiBlYWNoIGZpbGUKLQkJICAgICAgIG9sZGxpbmUgPSBwc3ltYm9sLmxpbmVudW07Ci0JCSAgICAgICBuZXdpbmZvLm90aGVyWyBuZXdsaW5lIF0gPSBvbGRsaW5lOyAvLyByZWNvcmQgMS0xIG1hcAotCQkgICAgICAgb2xkaW5mby5vdGhlclsgb2xkbGluZSBdID0gbmV3bGluZTsKLQkJICB9Ci0JICAgICB9Ci0JICAgICBuZXdpbmZvLm90aGVyWyAwIF0gPSAwOwotCSAgICAgb2xkaW5mby5vdGhlclsgMCBdID0gMDsKLQkgICAgIG5ld2luZm8ub3RoZXJbIG5ld2luZm8ubWF4TGluZSArIDEgXSA9IG9sZGluZm8ubWF4TGluZSArIDE7Ci0JICAgICBvbGRpbmZvLm90aGVyWyBvbGRpbmZvLm1heExpbmUgKyAxIF0gPSBuZXdpbmZvLm1heExpbmUgKyAxOwotCX0KKyAgICAgICAgIGZvciggbmV3bGluZSA9IDE7IG5ld2xpbmUgPD0gbmV3aW5mby5tYXhMaW5lOyBuZXdsaW5lKysgKSB7CisgICAgICAgICAgcHN5bWJvbCA9IG5ld2luZm8uc3ltYm9sWyBuZXdsaW5lIF07CisgICAgICAgICAgaWYgKCBwc3ltYm9sLnN5bWJvbElzVW5pcXVlKCkpIHsgICAgICAgIC8vIDEgdXNlIGluIGVhY2ggZmlsZQorICAgICAgICAgICAgICAgb2xkbGluZSA9IHBzeW1ib2wubGluZW51bTsKKyAgICAgICAgICAgICAgIG5ld2luZm8ub3RoZXJbIG5ld2xpbmUgXSA9IG9sZGxpbmU7IC8vIHJlY29yZCAxLTEgbWFwCisgICAgICAgICAgICAgICBvbGRpbmZvLm90aGVyWyBvbGRsaW5lIF0gPSBuZXdsaW5lOworICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICAgIG5ld2luZm8ub3RoZXJbIDAgXSA9IDA7CisgICAgICAgICBvbGRpbmZvLm90aGVyWyAwIF0gPSAwOworICAgICAgICAgbmV3aW5mby5vdGhlclsgbmV3aW5mby5tYXhMaW5lICsgMSBdID0gb2xkaW5mby5tYXhMaW5lICsgMTsKKyAgICAgICAgIG9sZGluZm8ub3RoZXJbIG9sZGluZm8ubWF4TGluZSArIDEgXSA9IG5ld2luZm8ubWF4TGluZSArIDE7CisgICAgfQogCi0JLyoKLQkgKiBzY2FuYWZ0ZXIKLQkgKiBFeHBlY3RzIGJvdGggZmlsZXMgaW4gc3ltdGFiLCBhbmQgb2xkaW5mbyBhbmQgbmV3aW5mbyB2YWxpZC4KLQkgKiBFeHBlY3RzIHRoZSAib3RoZXIiIGFycmF5cyBjb250YWluIHBvc2l0aXZlICNzIHRvIGluZGljYXRlCi0JICogbGluZXMgdGhhdCBhcmUgdW5pcXVlIGluIGJvdGggZmlsZXMuCi0JICogRm9yIGVhY2ggc3VjaCBwYWlyIG9mIHBsYWNlcywgc2NhbnMgcGFzdCBpbiBlYWNoIGZpbGUuCi0JICogQ29udGlndW91cyBncm91cHMgb2YgbGluZXMgdGhhdCBtYXRjaCBub24tdW5pcXVlbHkgYXJlCi0JICogdGFrZW4gdG8gYmUgZ29vZC1lbm91Z2ggbWF0Y2hlcywgYW5kIHNvIG1hcmtlZCBpbiAib3RoZXIiLgotCSAqIEFzc3VtZXMgZWFjaCBvdGhlclswXSBpcyAwLgotCSAqLwotCXZvaWQgc2NhbmFmdGVyKCkKLQl7Ci0JICAgICBpbnQgb2xkbGluZSwgbmV3bGluZTsKKyAgICAvKgorICAgICAqIHNjYW5hZnRlcgorICAgICAqIEV4cGVjdHMgYm90aCBmaWxlcyBpbiBzeW10YWIsIGFuZCBvbGRpbmZvIGFuZCBuZXdpbmZvIHZhbGlkLgorICAgICAqIEV4cGVjdHMgdGhlICJvdGhlciIgYXJyYXlzIGNvbnRhaW4gcG9zaXRpdmUgI3MgdG8gaW5kaWNhdGUKKyAgICAgKiBsaW5lcyB0aGF0IGFyZSB1bmlxdWUgaW4gYm90aCBmaWxlcy4KKyAgICAgKiBGb3IgZWFjaCBzdWNoIHBhaXIgb2YgcGxhY2VzLCBzY2FucyBwYXN0IGluIGVhY2ggZmlsZS4KKyAgICAgKiBDb250aWd1b3VzIGdyb3VwcyBvZiBsaW5lcyB0aGF0IG1hdGNoIG5vbi11bmlxdWVseSBhcmUKKyAgICAgKiB0YWtlbiB0byBiZSBnb29kLWVub3VnaCBtYXRjaGVzLCBhbmQgc28gbWFya2VkIGluICJvdGhlciIuCisgICAgICogQXNzdW1lcyBlYWNoIG90aGVyWzBdIGlzIDAuCisgICAgICovCisgICAgdm9pZCBzY2FuYWZ0ZXIoKQorICAgIHsKKyAgICAgICAgIGludCBvbGRsaW5lLCBuZXdsaW5lOwogCi0JICAgICBmb3IoIG5ld2xpbmUgPSAwOyBuZXdsaW5lIDw9IG5ld2luZm8ubWF4TGluZTsgbmV3bGluZSsrICkgewotCQkgIG9sZGxpbmUgPSBuZXdpbmZvLm90aGVyWyBuZXdsaW5lIF07Ci0JCSAgaWYgKCBvbGRsaW5lID49IDAgKSB7CS8qIGlzIHVuaXF1ZSBpbiBvbGQgJiBuZXcgKi8KLQkJICAgICAgIGZvcig7OykgewkvKiBzY2FuIGFmdGVyIHRoZXJlIGluIGJvdGggZmlsZXMgKi8KLQkJCSAgICBpZiAoICsrb2xkbGluZSA+IG9sZGluZm8ubWF4TGluZSAgICkgYnJlYWs7Ci0JCQkgICAgaWYgKCBvbGRpbmZvLm90aGVyWyBvbGRsaW5lIF0gPj0gMCApIGJyZWFrOwotCQkJICAgIGlmICggKytuZXdsaW5lID4gbmV3aW5mby5tYXhMaW5lICAgKSBicmVhazsKLQkJCSAgICBpZiAoIG5ld2luZm8ub3RoZXJbIG5ld2xpbmUgXSA+PSAwICkgYnJlYWs7CisgICAgICAgICBmb3IoIG5ld2xpbmUgPSAwOyBuZXdsaW5lIDw9IG5ld2luZm8ubWF4TGluZTsgbmV3bGluZSsrICkgeworICAgICAgICAgIG9sZGxpbmUgPSBuZXdpbmZvLm90aGVyWyBuZXdsaW5lIF07CisgICAgICAgICAgaWYgKCBvbGRsaW5lID49IDAgKSB7ICAgIC8qIGlzIHVuaXF1ZSBpbiBvbGQgJiBuZXcgKi8KKyAgICAgICAgICAgICAgIGZvcig7OykgeyAgICAvKiBzY2FuIGFmdGVyIHRoZXJlIGluIGJvdGggZmlsZXMgKi8KKyAgICAgICAgICAgICAgICBpZiAoICsrb2xkbGluZSA+IG9sZGluZm8ubWF4TGluZSAgICkgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKCBvbGRpbmZvLm90aGVyWyBvbGRsaW5lIF0gPj0gMCApIGJyZWFrOworICAgICAgICAgICAgICAgIGlmICggKytuZXdsaW5lID4gbmV3aW5mby5tYXhMaW5lICAgKSBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoIG5ld2luZm8ub3RoZXJbIG5ld2xpbmUgXSA+PSAwICkgYnJlYWs7CiAKLQkJCSAgICAvKiBvbGRsaW5lICYgbmV3bGluZSBleGlzdCwgYW5kCi0JCQkJYXJlbid0IGFscmVhZHkgbWF0Y2hlZCAqLworICAgICAgICAgICAgICAgIC8qIG9sZGxpbmUgJiBuZXdsaW5lIGV4aXN0LCBhbmQKKyAgICAgICAgICAgICAgICBhcmVuJ3QgYWxyZWFkeSBtYXRjaGVkICovCiAKLQkJCSAgICBpZiAoIG5ld2luZm8uc3ltYm9sWyBuZXdsaW5lIF0gIT0KLQkJCQlvbGRpbmZvLnN5bWJvbFsgb2xkbGluZSBdICkgYnJlYWs7ICAvLyBub3Qgc2FtZQorICAgICAgICAgICAgICAgIGlmICggbmV3aW5mby5zeW1ib2xbIG5ld2xpbmUgXSAhPQorICAgICAgICAgICAgICAgIG9sZGluZm8uc3ltYm9sWyBvbGRsaW5lIF0gKSBicmVhazsgIC8vIG5vdCBzYW1lCiAKLQkJCSAgICBuZXdpbmZvLm90aGVyW25ld2xpbmVdID0gb2xkbGluZTsgLy8gcmVjb3JkIGEgbWF0Y2gKLQkJCSAgICBvbGRpbmZvLm90aGVyW29sZGxpbmVdID0gbmV3bGluZTsKLQkJICAgICAgIH0KLQkJICB9Ci0JICAgICB9Ci0JfQorICAgICAgICAgICAgICAgIG5ld2luZm8ub3RoZXJbbmV3bGluZV0gPSBvbGRsaW5lOyAvLyByZWNvcmQgYSBtYXRjaAorICAgICAgICAgICAgICAgIG9sZGluZm8ub3RoZXJbb2xkbGluZV0gPSBuZXdsaW5lOworICAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICB9CiAKLQkvKioKLQkgKiBzY2FuYmVmb3JlCi0JICogQXMgc2NhbmFmdGVyLCBleGNlcHQgc2NhbnMgdG93YXJkcyBmaWxlIGZyb250cy4KLQkgKiBBc3N1bWVzIHRoZSBvZmYtZW5kIGxpbmVzIGhhdmUgYmVlbiBtYXJrZWQgYXMgYSBtYXRjaC4KLQkgKi8KLQl2b2lkIHNjYW5iZWZvcmUoKQotCXsKLQkgICAgIGludCBvbGRsaW5lLCBuZXdsaW5lOworICAgIC8qKgorICAgICAqIHNjYW5iZWZvcmUKKyAgICAgKiBBcyBzY2FuYWZ0ZXIsIGV4Y2VwdCBzY2FucyB0b3dhcmRzIGZpbGUgZnJvbnRzLgorICAgICAqIEFzc3VtZXMgdGhlIG9mZi1lbmQgbGluZXMgaGF2ZSBiZWVuIG1hcmtlZCBhcyBhIG1hdGNoLgorICAgICAqLworICAgIHZvaWQgc2NhbmJlZm9yZSgpCisgICAgeworICAgICAgICAgaW50IG9sZGxpbmUsIG5ld2xpbmU7CiAKLQkgICAgIGZvciggbmV3bGluZSA9IG5ld2luZm8ubWF4TGluZSArIDE7IG5ld2xpbmUgPiAwOyBuZXdsaW5lLS0gKSB7Ci0JCSAgb2xkbGluZSA9IG5ld2luZm8ub3RoZXJbIG5ld2xpbmUgXTsKLQkJICBpZiAoIG9sZGxpbmUgPj0gMCApIHsgICAgICAgICAgICAgICAvKiB1bmlxdWUgaW4gZWFjaCAqLwotCQkgICAgICAgZm9yKDs7KSB7Ci0JCQkgICAgaWYgKCAtLW9sZGxpbmUgPD0gMCAgICAgICAgICAgICAgICApIGJyZWFrOwotCQkJICAgIGlmICggb2xkaW5mby5vdGhlclsgb2xkbGluZSBdID49IDAgKSBicmVhazsKLQkJCSAgICBpZiAoIC0tbmV3bGluZSA8PSAwICAgICAgICAgICAgICAgICkgYnJlYWs7Ci0JCQkgICAgaWYgKCBuZXdpbmZvLm90aGVyWyBuZXdsaW5lIF0gPj0gMCApIGJyZWFrOworICAgICAgICAgZm9yKCBuZXdsaW5lID0gbmV3aW5mby5tYXhMaW5lICsgMTsgbmV3bGluZSA+IDA7IG5ld2xpbmUtLSApIHsKKyAgICAgICAgICBvbGRsaW5lID0gbmV3aW5mby5vdGhlclsgbmV3bGluZSBdOworICAgICAgICAgIGlmICggb2xkbGluZSA+PSAwICkgeyAgICAgICAgICAgICAgIC8qIHVuaXF1ZSBpbiBlYWNoICovCisgICAgICAgICAgICAgICBmb3IoOzspIHsKKyAgICAgICAgICAgICAgICBpZiAoIC0tb2xkbGluZSA8PSAwICAgICAgICAgICAgICAgICkgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKCBvbGRpbmZvLm90aGVyWyBvbGRsaW5lIF0gPj0gMCApIGJyZWFrOworICAgICAgICAgICAgICAgIGlmICggLS1uZXdsaW5lIDw9IDAgICAgICAgICAgICAgICAgKSBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoIG5ld2luZm8ub3RoZXJbIG5ld2xpbmUgXSA+PSAwICkgYnJlYWs7CiAKLQkJCSAgICAvKiBvbGRsaW5lIGFuZCBuZXdsaW5lIGV4aXN0LAotCQkJCWFuZCBhcmVuJ3QgbWFya2VkIHlldCAqLworICAgICAgICAgICAgICAgIC8qIG9sZGxpbmUgYW5kIG5ld2xpbmUgZXhpc3QsCisgICAgICAgICAgICAgICAgYW5kIGFyZW4ndCBtYXJrZWQgeWV0ICovCiAKLQkJCSAgICBpZiAoIG5ld2luZm8uc3ltYm9sWyBuZXdsaW5lIF0gIT0KLQkJCQlvbGRpbmZvLnN5bWJvbFsgb2xkbGluZSBdICkgYnJlYWs7ICAvLyBub3Qgc2FtZQorICAgICAgICAgICAgICAgIGlmICggbmV3aW5mby5zeW1ib2xbIG5ld2xpbmUgXSAhPQorICAgICAgICAgICAgICAgIG9sZGluZm8uc3ltYm9sWyBvbGRsaW5lIF0gKSBicmVhazsgIC8vIG5vdCBzYW1lCiAKLQkJCSAgICBuZXdpbmZvLm90aGVyW25ld2xpbmVdID0gb2xkbGluZTsgLy8gcmVjb3JkIGEgbWF0Y2gKLQkJCSAgICBvbGRpbmZvLm90aGVyW29sZGxpbmVdID0gbmV3bGluZTsKLQkJICAgICAgIH0KLQkJICB9Ci0JICAgICB9Ci0JfQorICAgICAgICAgICAgICAgIG5ld2luZm8ub3RoZXJbbmV3bGluZV0gPSBvbGRsaW5lOyAvLyByZWNvcmQgYSBtYXRjaAorICAgICAgICAgICAgICAgIG9sZGluZm8ub3RoZXJbb2xkbGluZV0gPSBuZXdsaW5lOworICAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICB9CiAKLQkvKioKLQkgKiBzY2FuYmxvY2tzIC0gRmluZHMgdGhlIGJlZ2lubmluZ3MgYW5kIGxlbmd0aHMgb2YgYmxvY2tzIG9mIG1hdGNoZXMuCi0JICogU2V0cyB0aGUgYmxvY2tsZW4gYXJyYXkgKHNlZSBkZWZpbml0aW9uKS4KLQkgKiBFeHBlY3RzIG9sZGluZm8gdmFsaWQuCi0JICovCi0Jdm9pZCBzY2FuYmxvY2tzKCkKLQl7Ci0JICAgICBpbnQgb2xkbGluZSwgbmV3bGluZTsKLQkgICAgIGludCBvbGRmcm9udCA9IDA7ICAgICAgLy8gbGluZSMgb2YgZnJvbnQgb2YgYSBibG9jayBpbiBvbGQsIG9yIDAKLQkgICAgIGludCBuZXdsYXN0ID0gLTE7ICAgICAgLy8gbmV3bGluZSdzIHZhbHVlIGR1cmluZyBwcmV2LiBpdGVyYXRpb24KKyAgICAvKioKKyAgICAgKiBzY2FuYmxvY2tzIC0gRmluZHMgdGhlIGJlZ2lubmluZ3MgYW5kIGxlbmd0aHMgb2YgYmxvY2tzIG9mIG1hdGNoZXMuCisgICAgICogU2V0cyB0aGUgYmxvY2tsZW4gYXJyYXkgKHNlZSBkZWZpbml0aW9uKS4KKyAgICAgKiBFeHBlY3RzIG9sZGluZm8gdmFsaWQuCisgICAgICovCisgICAgdm9pZCBzY2FuYmxvY2tzKCkKKyAgICB7CisgICAgICAgICBpbnQgb2xkbGluZSwgbmV3bGluZTsKKyAgICAgICAgIGludCBvbGRmcm9udCA9IDA7ICAgICAgLy8gbGluZSMgb2YgZnJvbnQgb2YgYSBibG9jayBpbiBvbGQsIG9yIDAKKyAgICAgICAgIGludCBuZXdsYXN0ID0gLTE7ICAgICAgLy8gbmV3bGluZSdzIHZhbHVlIGR1cmluZyBwcmV2LiBpdGVyYXRpb24KIAotCSAgICAgZm9yKCBvbGRsaW5lID0gMTsgb2xkbGluZSA8PSBvbGRpbmZvLm1heExpbmU7IG9sZGxpbmUrKyApCi0JCSAgICAgICBibG9ja2xlblsgb2xkbGluZSBdID0gMDsKLQkgICAgIGJsb2NrbGVuWyBvbGRpbmZvLm1heExpbmUgKyAxIF0gPSBVTlJFQUw7IC8vIHN0YXJ0cyBhIG15dGhpY2FsIGJsaworICAgICAgICAgZm9yKCBvbGRsaW5lID0gMTsgb2xkbGluZSA8PSBvbGRpbmZvLm1heExpbmU7IG9sZGxpbmUrKyApCisgICAgICAgICAgICAgICBibG9ja2xlblsgb2xkbGluZSBdID0gMDsKKyAgICAgICAgIGJsb2NrbGVuWyBvbGRpbmZvLm1heExpbmUgKyAxIF0gPSBVTlJFQUw7IC8vIHN0YXJ0cyBhIG15dGhpY2FsIGJsawogCi0JICAgICBmb3IoIG9sZGxpbmUgPSAxOyBvbGRsaW5lIDw9IG9sZGluZm8ubWF4TGluZTsgb2xkbGluZSsrICkgewotCQkgIG5ld2xpbmUgPSBvbGRpbmZvLm90aGVyWyBvbGRsaW5lIF07Ci0JCSAgaWYgKCBuZXdsaW5lIDwgMCApIG9sZGZyb250ID0gMDsgIC8qIG5vIG1hdGNoOiBub3QgaW4gYmxvY2sgKi8KLQkJICBlbHNleyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWF0Y2guICovCi0JCSAgICAgICBpZiAoIG9sZGZyb250ID09IDAgKSAgICAgICAgIG9sZGZyb250ID0gb2xkbGluZTsKLQkJICAgICAgIGlmICggbmV3bGluZSAhPSAobmV3bGFzdCsxKSkgb2xkZnJvbnQgPSBvbGRsaW5lOwotCQkgICAgICAgKytibG9ja2xlblsgb2xkZnJvbnQgXTsKLQkJICB9Ci0JCSAgbmV3bGFzdCA9IG5ld2xpbmU7Ci0JICAgICB9Ci0JfQorICAgICAgICAgZm9yKCBvbGRsaW5lID0gMTsgb2xkbGluZSA8PSBvbGRpbmZvLm1heExpbmU7IG9sZGxpbmUrKyApIHsKKyAgICAgICAgICBuZXdsaW5lID0gb2xkaW5mby5vdGhlclsgb2xkbGluZSBdOworICAgICAgICAgIGlmICggbmV3bGluZSA8IDAgKSBvbGRmcm9udCA9IDA7ICAvKiBubyBtYXRjaDogbm90IGluIGJsb2NrICovCisgICAgICAgICAgZWxzZXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1hdGNoLiAqLworICAgICAgICAgICAgICAgaWYgKCBvbGRmcm9udCA9PSAwICkgICAgICAgICBvbGRmcm9udCA9IG9sZGxpbmU7CisgICAgICAgICAgICAgICBpZiAoIG5ld2xpbmUgIT0gKG5ld2xhc3QrMSkpIG9sZGZyb250ID0gb2xkbGluZTsKKyAgICAgICAgICAgICAgICsrYmxvY2tsZW5bIG9sZGZyb250IF07CisgICAgICAgICAgfQorICAgICAgICAgIG5ld2xhc3QgPSBuZXdsaW5lOworICAgICAgICAgfQorICAgIH0KIAotCS8qIFRoZSBmb2xsb3dpbmcgYXJlIGdsb2JhbCB0byBwcmludG91dCdzIHN1YnNpZGlhcnkgcm91dGluZXMgKi8KLQkvLyBlbnVteyBpZGxlLCBkZWxldGUsIGluc2VydCwgbW92ZW5ldywgbW92ZW9sZCwKLQkvLyBzYW1lLCBjaGFuZ2UgfSBwcmludHN0YXR1czsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludAotCQlpZGxlID0gMCwgZGVsZXRlID0gMSwgaW5zZXJ0ID0gMiwgbW92ZW5ldyA9IDMsIG1vdmVvbGQgPSA0LAotCQlzYW1lID0gNSwgY2hhbmdlID0gNjsKLQlpbnQgcHJpbnRzdGF0dXM7Ci0JYm9vbGVhbiBhbnlwcmludGVkOwotCWludCBwcmludG9sZGxpbmUsIHByaW50bmV3bGluZTsgICAgIC8vIGxpbmUgbnVtYmVycyBpbiBvbGQgJiBuZXcgZmlsZQorICAgIC8qIFRoZSBmb2xsb3dpbmcgYXJlIGdsb2JhbCB0byBwcmludG91dCdzIHN1YnNpZGlhcnkgcm91dGluZXMgKi8KKyAgICAvLyBlbnVteyBpZGxlLCBkZWxldGUsIGluc2VydCwgbW92ZW5ldywgbW92ZW9sZCwKKyAgICAvLyBzYW1lLCBjaGFuZ2UgfSBwcmludHN0YXR1czsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludAorICAgICAgICBpZGxlID0gMCwgZGVsZXRlID0gMSwgaW5zZXJ0ID0gMiwgbW92ZW5ldyA9IDMsIG1vdmVvbGQgPSA0LAorICAgICAgICBzYW1lID0gNSwgY2hhbmdlID0gNjsKKyAgICBpbnQgcHJpbnRzdGF0dXM7CisgICAgYm9vbGVhbiBhbnlwcmludGVkOworICAgIGludCBwcmludG9sZGxpbmUsIHByaW50bmV3bGluZTsgICAgIC8vIGxpbmUgbnVtYmVycyBpbiBvbGQgJiBuZXcgZmlsZQogCi0JLyoqCi0JICogcHJpbnRvdXQgLSBQcmludHMgc3VtbWFyeSB0byBzdGRvdXQuCi0JICogRXhwZWN0cyBhbGwgZGF0YSBzdHJ1Y3R1cmVzIGhhdmUgYmVlbiBmaWxsZWQgb3V0LgotCSAqLwotCXZvaWQgcHJpbnRvdXQoKQotCXsKLQkgICAgIHByaW50c3RhdHVzID0gaWRsZTsKLQkgICAgIGFueXByaW50ZWQgPSBmYWxzZTsKLQkgICAgIGZvciggcHJpbnRvbGRsaW5lID0gcHJpbnRuZXdsaW5lID0gMTsgOyApIHsKLQkJICBpZiAoIHByaW50b2xkbGluZSA+IG9sZGluZm8ubWF4TGluZSApIHsgbmV3Y29uc3VtZSgpOyBicmVhazt9Ci0JCSAgaWYgKCBwcmludG5ld2xpbmUgPiBuZXdpbmZvLm1heExpbmUgKSB7IG9sZGNvbnN1bWUoKTsgYnJlYWs7fQotCQkgIGlmICggICAgICBuZXdpbmZvLm90aGVyWyBwcmludG5ld2xpbmUgXSA8IDAgKSB7Ci0JCSAgICAgICBpZiAoIG9sZGluZm8ub3RoZXJbIHByaW50b2xkbGluZSBdIDwgMCApCi0JCQkJc2hvd2NoYW5nZSgpOwotCQkgICAgICAgZWxzZQotCQkJCXNob3dpbnNlcnQoKTsKLQkJICB9Ci0JCSAgZWxzZSBpZiAoIG9sZGluZm8ub3RoZXJbIHByaW50b2xkbGluZSBdIDwgMCApCi0JCQlzaG93ZGVsZXRlKCk7Ci0JCSAgZWxzZSBpZiAoIGJsb2NrbGVuWyBwcmludG9sZGxpbmUgXSA8IDAgKQotCQkJc2tpcG9sZCgpOwotCQkgIGVsc2UgaWYgKCBvbGRpbmZvLm90aGVyWyBwcmludG9sZGxpbmUgXSA9PSBwcmludG5ld2xpbmUgKQotCQkJc2hvd3NhbWUoKTsKLQkJICBlbHNlCi0JCQlzaG93bW92ZSgpOwotCSAgICAgfQorICAgIC8qKgorICAgICAqIHByaW50b3V0IC0gUHJpbnRzIHN1bW1hcnkgdG8gc3Rkb3V0LgorICAgICAqIEV4cGVjdHMgYWxsIGRhdGEgc3RydWN0dXJlcyBoYXZlIGJlZW4gZmlsbGVkIG91dC4KKyAgICAgKi8KKyAgICB2b2lkIHByaW50b3V0KCkKKyAgICB7CisgICAgICAgICBwcmludHN0YXR1cyA9IGlkbGU7CisgICAgICAgICBhbnlwcmludGVkID0gZmFsc2U7CisgICAgICAgICBmb3IoIHByaW50b2xkbGluZSA9IHByaW50bmV3bGluZSA9IDE7IDsgKSB7CisgICAgICAgICAgaWYgKCBwcmludG9sZGxpbmUgPiBvbGRpbmZvLm1heExpbmUgKSB7IG5ld2NvbnN1bWUoKTsgYnJlYWs7fQorICAgICAgICAgIGlmICggcHJpbnRuZXdsaW5lID4gbmV3aW5mby5tYXhMaW5lICkgeyBvbGRjb25zdW1lKCk7IGJyZWFrO30KKyAgICAgICAgICBpZiAoICAgICAgbmV3aW5mby5vdGhlclsgcHJpbnRuZXdsaW5lIF0gPCAwICkgeworICAgICAgICAgICAgICAgaWYgKCBvbGRpbmZvLm90aGVyWyBwcmludG9sZGxpbmUgXSA8IDAgKQorICAgICAgICAgICAgICAgIHNob3djaGFuZ2UoKTsKKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzaG93aW5zZXJ0KCk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKCBvbGRpbmZvLm90aGVyWyBwcmludG9sZGxpbmUgXSA8IDAgKQorICAgICAgICAgICAgc2hvd2RlbGV0ZSgpOworICAgICAgICAgIGVsc2UgaWYgKCBibG9ja2xlblsgcHJpbnRvbGRsaW5lIF0gPCAwICkKKyAgICAgICAgICAgIHNraXBvbGQoKTsKKyAgICAgICAgICBlbHNlIGlmICggb2xkaW5mby5vdGhlclsgcHJpbnRvbGRsaW5lIF0gPT0gcHJpbnRuZXdsaW5lICkKKyAgICAgICAgICAgIHNob3dzYW1lKCk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgc2hvd21vdmUoKTsKKyAgICAgICAgIH0KIAotCSAgICAgaWYgKCBhbnlwcmludGVkID09IHRydWUgKQorICAgICAgICAgaWYgKCBhbnlwcmludGVkID09IHRydWUgKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcHJpbnRsbiggIj4+Pj4gRW5kIG9mIGRpZmZlcmVuY2VzLiIgICk7CiAgICAgICAgICAgICAgICAgIC8vc3RhdC5hZGRTdGF0dXMoImFwcHZlcmlmaWNhdGlvbiBib29rc3RvcmUiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICB9CiAKLQkgICAgIGVsc2UKKyAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBwcmludGxuKCAiPj4+PiBGaWxlcyBhcmUgaWRlbnRpY2FsLiIgKTsKICAgICAgICAgICAgICAgICAgLy9zdGF0LmFkZFN0YXR1cygiYXBwdmVyaWZpY2F0aW9uIGJvb2tzdG9yZSIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgIH0KIAogCi0JfQorICAgIH0KIAotCS8qCi0JICogbmV3Y29uc3VtZSAgICAgICAgUGFydCBvZiBwcmludG91dC4gSGF2ZSBydW4gb3V0IG9mIG9sZCBmaWxlLgotCSAqIFByaW50IHRoZSByZXN0IG9mIHRoZSBuZXcgZmlsZSwgYXMgaW5zZXJ0cyBhbmQvb3IgbW92ZXMuCi0JICovCi0Jdm9pZCBuZXdjb25zdW1lKCkKLQl7Ci0JICAgICBmb3IoOzspIHsKLQkJICBpZiAoIHByaW50bmV3bGluZSA+IG5ld2luZm8ubWF4TGluZSApCi0JCQlicmVhazsgICAgICAgIC8qIGVuZCBvZiBmaWxlICovCi0JCSAgaWYgKCBuZXdpbmZvLm90aGVyWyBwcmludG5ld2xpbmUgXSA8IDAgKSBzaG93aW5zZXJ0KCk7Ci0JCSAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dtb3ZlKCk7Ci0JICAgICB9Ci0JfQorICAgIC8qCisgICAgICogbmV3Y29uc3VtZSAgICAgICAgUGFydCBvZiBwcmludG91dC4gSGF2ZSBydW4gb3V0IG9mIG9sZCBmaWxlLgorICAgICAqIFByaW50IHRoZSByZXN0IG9mIHRoZSBuZXcgZmlsZSwgYXMgaW5zZXJ0cyBhbmQvb3IgbW92ZXMuCisgICAgICovCisgICAgdm9pZCBuZXdjb25zdW1lKCkKKyAgICB7CisgICAgICAgICBmb3IoOzspIHsKKyAgICAgICAgICBpZiAoIHByaW50bmV3bGluZSA+IG5ld2luZm8ubWF4TGluZSApCisgICAgICAgICAgICBicmVhazsgICAgICAgIC8qIGVuZCBvZiBmaWxlICovCisgICAgICAgICAgaWYgKCBuZXdpbmZvLm90aGVyWyBwcmludG5ld2xpbmUgXSA8IDAgKSBzaG93aW5zZXJ0KCk7CisgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dtb3ZlKCk7CisgICAgICAgICB9CisgICAgfQogCi0JLyoqCi0JICogb2xkY29uc3VtZSAgICAgICAgUGFydCBvZiBwcmludG91dC4gSGF2ZSBydW4gb3V0IG9mIG5ldyBmaWxlLgotCSAqIFByb2Nlc3MgdGhlIHJlc3Qgb2YgdGhlIG9sZCBmaWxlLCBwcmludGluZyBhbnkKLQkgKiBwYXJ0cyB3aGljaCB3ZXJlIGRlbGV0ZXMgb3IgbW92ZXMuCi0JICovCi0Jdm9pZCBvbGRjb25zdW1lKCkKLQl7Ci0JICAgICBmb3IoOzspIHsKLQkJICBpZiAoIHByaW50b2xkbGluZSA+IG9sZGluZm8ubWF4TGluZSApCi0JCQlicmVhazsgICAgICAgLyogZW5kIG9mIGZpbGUgKi8KLQkJICBwcmludG5ld2xpbmUgPSBvbGRpbmZvLm90aGVyWyBwcmludG9sZGxpbmUgXTsKLQkJICBpZiAoIHByaW50bmV3bGluZSA8IDAgKSBzaG93ZGVsZXRlKCk7Ci0JCSAgZWxzZSBpZiAoIGJsb2NrbGVuWyBwcmludG9sZGxpbmUgXSA8IDAgKSBza2lwb2xkKCk7Ci0JCSAgZWxzZSBzaG93bW92ZSgpOwotCSAgICAgfQotCX0KKyAgICAvKioKKyAgICAgKiBvbGRjb25zdW1lICAgICAgICBQYXJ0IG9mIHByaW50b3V0LiBIYXZlIHJ1biBvdXQgb2YgbmV3IGZpbGUuCisgICAgICogUHJvY2VzcyB0aGUgcmVzdCBvZiB0aGUgb2xkIGZpbGUsIHByaW50aW5nIGFueQorICAgICAqIHBhcnRzIHdoaWNoIHdlcmUgZGVsZXRlcyBvciBtb3Zlcy4KKyAgICAgKi8KKyAgICB2b2lkIG9sZGNvbnN1bWUoKQorICAgIHsKKyAgICAgICAgIGZvcig7OykgeworICAgICAgICAgIGlmICggcHJpbnRvbGRsaW5lID4gb2xkaW5mby5tYXhMaW5lICkKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAvKiBlbmQgb2YgZmlsZSAqLworICAgICAgICAgIHByaW50bmV3bGluZSA9IG9sZGluZm8ub3RoZXJbIHByaW50b2xkbGluZSBdOworICAgICAgICAgIGlmICggcHJpbnRuZXdsaW5lIDwgMCApIHNob3dkZWxldGUoKTsKKyAgICAgICAgICBlbHNlIGlmICggYmxvY2tsZW5bIHByaW50b2xkbGluZSBdIDwgMCApIHNraXBvbGQoKTsKKyAgICAgICAgICBlbHNlIHNob3dtb3ZlKCk7CisgICAgICAgICB9CisgICAgfQogCi0JLyoqCi0JICogc2hvd2RlbGV0ZSAgICAgICAgUGFydCBvZiBwcmludG91dC4KLQkgKiBFeHBlY3RzIHByaW50b2xkbGluZSBpcyBhdCBhIGRlbGV0aW9uLgotCSAqLwotCXZvaWQgc2hvd2RlbGV0ZSgpCi0JewotCQlpZiAoIHByaW50c3RhdHVzICE9IGRlbGV0ZSApCisgICAgLyoqCisgICAgICogc2hvd2RlbGV0ZSAgICAgICAgUGFydCBvZiBwcmludG91dC4KKyAgICAgKiBFeHBlY3RzIHByaW50b2xkbGluZSBpcyBhdCBhIGRlbGV0aW9uLgorICAgICAqLworICAgIHZvaWQgc2hvd2RlbGV0ZSgpCisgICAgeworICAgICAgICBpZiAoIHByaW50c3RhdHVzICE9IGRlbGV0ZSApCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBwcmludGxuKCJGb2xsb3dpbmcgdGVzdCBkaWRuJ3QgZ2V0IHJ1bi0tLS0tLS0tPiIpOwogICAgICAgICAgICAgICAgICAgICAvL3ByaW50bG4oICI+Pj4+Pj4+Pj4+Pj4+Pj4+PiBERUxFVEUgQVQgIiArIHByaW50b2xkbGluZSk7CiAgICAgICAgICAgICAgICAgfQotCQlwcmludHN0YXR1cyA9IGRlbGV0ZTsKLQkJb2xkaW5mby5zeW1ib2xbIHByaW50b2xkbGluZSBdLnNob3dTeW1ib2woKTsKLQkJYW55cHJpbnRlZCA9IHRydWU7Ci0JCXByaW50b2xkbGluZSsrOyAgICAgICAgICAgICAgICAKLQl9CisgICAgICAgIHByaW50c3RhdHVzID0gZGVsZXRlOworICAgICAgICBvbGRpbmZvLnN5bWJvbFsgcHJpbnRvbGRsaW5lIF0uc2hvd1N5bWJvbCgpOworICAgICAgICBhbnlwcmludGVkID0gdHJ1ZTsKKyAgICAgICAgcHJpbnRvbGRsaW5lKys7CisgICAgfQogCi0JLyoKLQkgKiBzaG93aW5zZXJ0ICAgICAgICBQYXJ0IG9mIHByaW50b3V0LgotCSAqIEV4cGVjdHMgcHJpbnRuZXdsaW5lIGlzIGF0IGFuIGluc2VydGlvbi4KLQkgKi8KLQl2b2lkIHNob3dpbnNlcnQoKQotCXsKLQkgICAgIGlmICggcHJpbnRzdGF0dXMgPT0gY2hhbmdlICkgcHJpbnRsbiggIj4+Pj4+Pj4+Pj4+Pj4gICAgIENIQU5HRUQgVE8iICk7Ci0JICAgICBlbHNlIGlmICggcHJpbnRzdGF0dXMgIT0gaW5zZXJ0ICkKLQkJICBwcmludGxuKCAiPj4+Pj4+Pj4+Pj4+Pj4+PiBJTlNFUlQgQkVGT1JFICIgKyBwcmludG9sZGxpbmUgKTsKLQkgICAgIHByaW50c3RhdHVzID0gaW5zZXJ0OwotCSAgICAgbmV3aW5mby5zeW1ib2xbIHByaW50bmV3bGluZSBdLnNob3dTeW1ib2woKTsKLQkgICAgIGFueXByaW50ZWQgPSB0cnVlOwotCSAgICAgcHJpbnRuZXdsaW5lKys7Ci0JfQorICAgIC8qCisgICAgICogc2hvd2luc2VydCAgICAgICAgUGFydCBvZiBwcmludG91dC4KKyAgICAgKiBFeHBlY3RzIHByaW50bmV3bGluZSBpcyBhdCBhbiBpbnNlcnRpb24uCisgICAgICovCisgICAgdm9pZCBzaG93aW5zZXJ0KCkKKyAgICB7CisgICAgICAgICBpZiAoIHByaW50c3RhdHVzID09IGNoYW5nZSApIHByaW50bG4oICI+Pj4+Pj4+Pj4+Pj4+ICAgICBDSEFOR0VEIFRPIiApOworICAgICAgICAgZWxzZSBpZiAoIHByaW50c3RhdHVzICE9IGluc2VydCApCisgICAgICAgICAgcHJpbnRsbiggIj4+Pj4+Pj4+Pj4+Pj4+Pj4gSU5TRVJUIEJFRk9SRSAiICsgcHJpbnRvbGRsaW5lICk7CisgICAgICAgICBwcmludHN0YXR1cyA9IGluc2VydDsKKyAgICAgICAgIG5ld2luZm8uc3ltYm9sWyBwcmludG5ld2xpbmUgXS5zaG93U3ltYm9sKCk7CisgICAgICAgICBhbnlwcmludGVkID0gdHJ1ZTsKKyAgICAgICAgIHByaW50bmV3bGluZSsrOworICAgIH0KIAotCS8qKgotCSAqIHNob3djaGFuZ2UgICAgICAgIFBhcnQgb2YgcHJpbnRvdXQuCi0JICogRXhwZWN0cyBwcmludG5ld2xpbmUgaXMgYW4gaW5zZXJ0aW9uLgotCSAqICBFeHBlY3RzIHByaW50b2xkbGluZSBpcyBhIGRlbGV0aW9uLgotCSAqLwotCXZvaWQgc2hvd2NoYW5nZSgpCi0JewotCSAgICAgaWYgKCBwcmludHN0YXR1cyAhPSBjaGFuZ2UgKQotCQkgIHByaW50bG4oICI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4gIiArIHByaW50b2xkbGluZSArICIgQ0hBTkdFRCBGUk9NIik7Ci0JICAgICBwcmludHN0YXR1cyA9IGNoYW5nZTsKLQkgICAgIG9sZGluZm8uc3ltYm9sWyBwcmludG9sZGxpbmUgXS5zaG93U3ltYm9sKCk7Ci0JICAgICBhbnlwcmludGVkID0gdHJ1ZTsKLQkgICAgIHByaW50b2xkbGluZSsrOwotCX0KKyAgICAvKioKKyAgICAgKiBzaG93Y2hhbmdlICAgICAgICBQYXJ0IG9mIHByaW50b3V0LgorICAgICAqIEV4cGVjdHMgcHJpbnRuZXdsaW5lIGlzIGFuIGluc2VydGlvbi4KKyAgICAgKiAgRXhwZWN0cyBwcmludG9sZGxpbmUgaXMgYSBkZWxldGlvbi4KKyAgICAgKi8KKyAgICB2b2lkIHNob3djaGFuZ2UoKQorICAgIHsKKyAgICAgICAgIGlmICggcHJpbnRzdGF0dXMgIT0gY2hhbmdlICkKKyAgICAgICAgICBwcmludGxuKCAiPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+ICIgKyBwcmludG9sZGxpbmUgKyAiIENIQU5HRUQgRlJPTSIpOworICAgICAgICAgcHJpbnRzdGF0dXMgPSBjaGFuZ2U7CisgICAgICAgICBvbGRpbmZvLnN5bWJvbFsgcHJpbnRvbGRsaW5lIF0uc2hvd1N5bWJvbCgpOworICAgICAgICAgYW55cHJpbnRlZCA9IHRydWU7CisgICAgICAgICBwcmludG9sZGxpbmUrKzsKKyAgICB9CiAKLQkvKioKLQkgKiBza2lwb2xkICAgICAgICAgICBQYXJ0IG9mIHByaW50b3V0LgotCSAqIEV4cGVjdHMgcHJpbnRvbGRsaW5lIGF0IHN0YXJ0IG9mIGFuIG9sZCBibG9jayB0aGF0IGhhcwotCSAqIGFscmVhZHkgYmVlbiBhbm5vdW5jZWQgYXMgYSBtb3ZlLgotCSAqIFNraXBzIG92ZXIgdGhlIG9sZCBibG9jay4KLQkgKi8KLQl2b2lkIHNraXBvbGQoKQotCXsKLQkgICAgIHByaW50c3RhdHVzID0gaWRsZTsKLQkgICAgIGZvcig7OykgewotCQkgIGlmICggKytwcmludG9sZGxpbmUgPiBvbGRpbmZvLm1heExpbmUgKQotCQkJYnJlYWs7ICAgICAvKiBlbmQgb2YgZmlsZSAgKi8KLQkJICBpZiAoIG9sZGluZm8ub3RoZXJbIHByaW50b2xkbGluZSBdIDwgMCApCi0JCQlicmVhazsgICAgLyogZW5kIG9mIGJsb2NrICovCi0JCSAgaWYgKCBibG9ja2xlblsgcHJpbnRvbGRsaW5lIF0hPTApCi0JCQlicmVhazsgICAgICAgICAgLyogc3RhcnQgb2YgYW5vdGhlciAqLwotCSAgICAgfQotCX0KKyAgICAvKioKKyAgICAgKiBza2lwb2xkICAgICAgICAgICBQYXJ0IG9mIHByaW50b3V0LgorICAgICAqIEV4cGVjdHMgcHJpbnRvbGRsaW5lIGF0IHN0YXJ0IG9mIGFuIG9sZCBibG9jayB0aGF0IGhhcworICAgICAqIGFscmVhZHkgYmVlbiBhbm5vdW5jZWQgYXMgYSBtb3ZlLgorICAgICAqIFNraXBzIG92ZXIgdGhlIG9sZCBibG9jay4KKyAgICAgKi8KKyAgICB2b2lkIHNraXBvbGQoKQorICAgIHsKKyAgICAgICAgIHByaW50c3RhdHVzID0gaWRsZTsKKyAgICAgICAgIGZvcig7OykgeworICAgICAgICAgIGlmICggKytwcmludG9sZGxpbmUgPiBvbGRpbmZvLm1heExpbmUgKQorICAgICAgICAgICAgYnJlYWs7ICAgICAvKiBlbmQgb2YgZmlsZSAgKi8KKyAgICAgICAgICBpZiAoIG9sZGluZm8ub3RoZXJbIHByaW50b2xkbGluZSBdIDwgMCApCisgICAgICAgICAgICBicmVhazsgICAgLyogZW5kIG9mIGJsb2NrICovCisgICAgICAgICAgaWYgKCBibG9ja2xlblsgcHJpbnRvbGRsaW5lIF0hPTApCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogc3RhcnQgb2YgYW5vdGhlciAqLworICAgICAgICAgfQorICAgIH0KIAotCS8qKgotCSAqIHNraXBuZXcgICAgICAgICAgIFBhcnQgb2YgcHJpbnRvdXQuCi0JICogRXhwZWN0cyBwcmludG5ld2xpbmUgaXMgYXQgc3RhcnQgb2YgYSBuZXcgYmxvY2sgdGhhdCBoYXMKLQkgKiBhbHJlYWR5IGJlZW4gYW5ub3VuY2VkIGFzIGEgbW92ZS4KLQkgKiBTa2lwcyBvdmVyIHRoZSBuZXcgYmxvY2suCi0JICovCi0Jdm9pZCBza2lwbmV3KCkKLQl7Ci0JICAgICBpbnQgb2xkbGluZTsKLQkgICAgIHByaW50c3RhdHVzID0gaWRsZTsKLQkgICAgIGZvcig7OykgewotCQkgIGlmICggKytwcmludG5ld2xpbmUgPiBuZXdpbmZvLm1heExpbmUgKQotCQkJYnJlYWs7ICAgIC8qIGVuZCBvZiBmaWxlICAqLwotCQkgIG9sZGxpbmUgPSBuZXdpbmZvLm90aGVyWyBwcmludG5ld2xpbmUgXTsKLQkJICBpZiAoIG9sZGxpbmUgPCAwICkKLQkJCWJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgb2YgYmxvY2sgKi8KLQkJICBpZiAoIGJsb2NrbGVuWyBvbGRsaW5lIF0gIT0gMCkKLQkJCWJyZWFrOyAgICAgICAgICAgICAgLyogc3RhcnQgb2YgYW5vdGhlciAqLwotCSAgICAgfQotCX0KKyAgICAvKioKKyAgICAgKiBza2lwbmV3ICAgICAgICAgICBQYXJ0IG9mIHByaW50b3V0LgorICAgICAqIEV4cGVjdHMgcHJpbnRuZXdsaW5lIGlzIGF0IHN0YXJ0IG9mIGEgbmV3IGJsb2NrIHRoYXQgaGFzCisgICAgICogYWxyZWFkeSBiZWVuIGFubm91bmNlZCBhcyBhIG1vdmUuCisgICAgICogU2tpcHMgb3ZlciB0aGUgbmV3IGJsb2NrLgorICAgICAqLworICAgIHZvaWQgc2tpcG5ldygpCisgICAgeworICAgICAgICAgaW50IG9sZGxpbmU7CisgICAgICAgICBwcmludHN0YXR1cyA9IGlkbGU7CisgICAgICAgICBmb3IoOzspIHsKKyAgICAgICAgICBpZiAoICsrcHJpbnRuZXdsaW5lID4gbmV3aW5mby5tYXhMaW5lICkKKyAgICAgICAgICAgIGJyZWFrOyAgICAvKiBlbmQgb2YgZmlsZSAgKi8KKyAgICAgICAgICBvbGRsaW5lID0gbmV3aW5mby5vdGhlclsgcHJpbnRuZXdsaW5lIF07CisgICAgICAgICAgaWYgKCBvbGRsaW5lIDwgMCApCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIG9mIGJsb2NrICovCisgICAgICAgICAgaWYgKCBibG9ja2xlblsgb2xkbGluZSBdICE9IDApCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgIC8qIHN0YXJ0IG9mIGFub3RoZXIgKi8KKyAgICAgICAgIH0KKyAgICB9CiAKLQkvKioKLQkgKiBzaG93c2FtZSAgICAgICAgICBQYXJ0IG9mIHByaW50b3V0LgotCSAqIEV4cGVjdHMgcHJpbnRuZXdsaW5lIGFuZCBwcmludG9sZGxpbmUgYXQgc3RhcnQgb2YKLQkgKiB0d28gYmxvY2tzIHRoYXQgYXJlbid0IHRvIGJlIGRpc3BsYXllZC4KLQkgKi8KLQl2b2lkIHNob3dzYW1lKCkKLQl7Ci0JICAgICBpbnQgY291bnQ7Ci0JICAgICBwcmludHN0YXR1cyA9IGlkbGU7Ci0JICAgICBpZiAoIG5ld2luZm8ub3RoZXJbIHByaW50bmV3bGluZSBdICE9IHByaW50b2xkbGluZSApIHsKLQkJICBTeXN0ZW0uZXJyLnByaW50bG4oIkJVRyBJTiBMSU5FIFJFRkVSRU5DSU5HIik7Ci0JCSAgU3lzdGVtLmV4aXQoMSk7Ci0JICAgICB9Ci0JICAgICBjb3VudCA9IGJsb2NrbGVuWyBwcmludG9sZGxpbmUgXTsKLQkgICAgIHByaW50b2xkbGluZSArPSBjb3VudDsKLQkgICAgIHByaW50bmV3bGluZSArPSBjb3VudDsKLQl9CisgICAgLyoqCisgICAgICogc2hvd3NhbWUgICAgICAgICAgUGFydCBvZiBwcmludG91dC4KKyAgICAgKiBFeHBlY3RzIHByaW50bmV3bGluZSBhbmQgcHJpbnRvbGRsaW5lIGF0IHN0YXJ0IG9mCisgICAgICogdHdvIGJsb2NrcyB0aGF0IGFyZW4ndCB0byBiZSBkaXNwbGF5ZWQuCisgICAgICovCisgICAgdm9pZCBzaG93c2FtZSgpCisgICAgeworICAgICAgICAgaW50IGNvdW50OworICAgICAgICAgcHJpbnRzdGF0dXMgPSBpZGxlOworICAgICAgICAgaWYgKCBuZXdpbmZvLm90aGVyWyBwcmludG5ld2xpbmUgXSAhPSBwcmludG9sZGxpbmUgKSB7CisgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJCVUcgSU4gTElORSBSRUZFUkVOQ0lORyIpOworICAgICAgICAgIFN5c3RlbS5leGl0KDEpOworICAgICAgICAgfQorICAgICAgICAgY291bnQgPSBibG9ja2xlblsgcHJpbnRvbGRsaW5lIF07CisgICAgICAgICBwcmludG9sZGxpbmUgKz0gY291bnQ7CisgICAgICAgICBwcmludG5ld2xpbmUgKz0gY291bnQ7CisgICAgfQogCi0JLyoqCi0JICogc2hvd21vdmUgICAgICAgICAgUGFydCBvZiBwcmludG91dC4KLQkgKiBFeHBlY3RzIHByaW50b2xkbGluZSwgcHJpbnRuZXdsaW5lIGF0IHN0YXJ0IG9mCi0JICogdHdvIGRpZmZlcmVudCBibG9ja3MgKCBhIG1vdmUgd2FzIGRvbmUpLgotCSAqLwotCXZvaWQgc2hvd21vdmUoKQotCXsKLQkgICAgIGludCBvbGRibG9jayA9IGJsb2NrbGVuWyBwcmludG9sZGxpbmUgXTsKLQkgICAgIGludCBuZXdvdGhlciA9IG5ld2luZm8ub3RoZXJbIHByaW50bmV3bGluZSBdOwotCSAgICAgaW50IG5ld2Jsb2NrID0gYmxvY2tsZW5bIG5ld290aGVyIF07CisgICAgLyoqCisgICAgICogc2hvd21vdmUgICAgICAgICAgUGFydCBvZiBwcmludG91dC4KKyAgICAgKiBFeHBlY3RzIHByaW50b2xkbGluZSwgcHJpbnRuZXdsaW5lIGF0IHN0YXJ0IG9mCisgICAgICogdHdvIGRpZmZlcmVudCBibG9ja3MgKCBhIG1vdmUgd2FzIGRvbmUpLgorICAgICAqLworICAgIHZvaWQgc2hvd21vdmUoKQorICAgIHsKKyAgICAgICAgIGludCBvbGRibG9jayA9IGJsb2NrbGVuWyBwcmludG9sZGxpbmUgXTsKKyAgICAgICAgIGludCBuZXdvdGhlciA9IG5ld2luZm8ub3RoZXJbIHByaW50bmV3bGluZSBdOworICAgICAgICAgaW50IG5ld2Jsb2NrID0gYmxvY2tsZW5bIG5ld290aGVyIF07CiAKLQkgICAgIGlmICggbmV3YmxvY2sgPCAwICkgc2tpcG5ldygpOyAgICAgICAgIC8vIGFscmVhZHkgcHJpbnRlZC4KLQkgICAgIGVsc2UgaWYgKCBvbGRibG9jayA+PSBuZXdibG9jayApIHsgICAgIC8vIGFzc3VtZSBuZXcncyBibGsgbW92ZWQuCi0JCSAgYmxvY2tsZW5bbmV3b3RoZXJdID0gLTE7ICAgICAgICAgLy8gc3RhbXAgYmxvY2sgYXMgInByaW50ZWQiLgotCQkgIHByaW50bG4oICI+Pj4+ICIgKyBuZXdvdGhlciArCi0JCQkiIFRIUlUgIiArIChuZXdvdGhlciArIG5ld2Jsb2NrIC0gMSkgKwotCQkJIiBNT1ZFRCBUTyBCRUZPUkUgIiArIHByaW50b2xkbGluZSApOwotCQkgIGZvciggOyBuZXdibG9jayA+IDA7IG5ld2Jsb2NrLS0sIHByaW50bmV3bGluZSsrICkKLQkJICAgICAgIG5ld2luZm8uc3ltYm9sWyBwcmludG5ld2xpbmUgXS5zaG93U3ltYm9sKCk7Ci0JCSAgYW55cHJpbnRlZCA9IHRydWU7Ci0JCSAgcHJpbnRzdGF0dXMgPSBpZGxlOworICAgICAgICAgaWYgKCBuZXdibG9jayA8IDAgKSBza2lwbmV3KCk7ICAgICAgICAgLy8gYWxyZWFkeSBwcmludGVkLgorICAgICAgICAgZWxzZSBpZiAoIG9sZGJsb2NrID49IG5ld2Jsb2NrICkgeyAgICAgLy8gYXNzdW1lIG5ldydzIGJsayBtb3ZlZC4KKyAgICAgICAgICBibG9ja2xlbltuZXdvdGhlcl0gPSAtMTsgICAgICAgICAvLyBzdGFtcCBibG9jayBhcyAicHJpbnRlZCIuCisgICAgICAgICAgcHJpbnRsbiggIj4+Pj4gIiArIG5ld290aGVyICsKKyAgICAgICAgICAgICIgVEhSVSAiICsgKG5ld290aGVyICsgbmV3YmxvY2sgLSAxKSArCisgICAgICAgICAgICAiIE1PVkVEIFRPIEJFRk9SRSAiICsgcHJpbnRvbGRsaW5lICk7CisgICAgICAgICAgZm9yKCA7IG5ld2Jsb2NrID4gMDsgbmV3YmxvY2stLSwgcHJpbnRuZXdsaW5lKysgKQorICAgICAgICAgICAgICAgbmV3aW5mby5zeW1ib2xbIHByaW50bmV3bGluZSBdLnNob3dTeW1ib2woKTsKKyAgICAgICAgICBhbnlwcmludGVkID0gdHJ1ZTsKKyAgICAgICAgICBwcmludHN0YXR1cyA9IGlkbGU7CiAKLQkgICAgIH0gZWxzZSAgICAgICAgICAgICAgICAvKiBhc3N1bWUgb2xkJ3MgYmxvY2sgbW92ZWQgKi8KLQkJICBza2lwb2xkKCk7ICAgICAgLyogdGFyZ2V0IGxpbmUjIG5vdCBrbm93biwgZGlzcGxheSBsYXRlciAqLwotCX0KKyAgICAgICAgIH0gZWxzZSAgICAgICAgICAgICAgICAvKiBhc3N1bWUgb2xkJ3MgYmxvY2sgbW92ZWQgKi8KKyAgICAgICAgICBza2lwb2xkKCk7ICAgICAgLyogdGFyZ2V0IGxpbmUjIG5vdCBrbm93biwgZGlzcGxheSBsYXRlciAqLworICAgIH0KIAotCS8qKiBDb252ZW5pZW5jZSB3cmFwcGVyIGZvciBwcmludGxuICovCi0JcHVibGljIHZvaWQgcHJpbnRsbihTdHJpbmcgcykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4ocyk7Ci0JfQotfTsJCQkJLy8gZW5kIG9mIG1haW4gY2xhc3MhCisgICAgLyoqIENvbnZlbmllbmNlIHdyYXBwZXIgZm9yIHByaW50bG4gKi8KKyAgICBwdWJsaWMgdm9pZCBwcmludGxuKFN0cmluZyBzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzKTsKKyAgICB9Cit9OyAgICAgICAgICAgICAgICAvLyBlbmQgb2YgbWFpbiBjbGFzcyEKIAogLyoqCiAgKiBDbGFzcyAibm9kZSIuIFRoZSBzeW1ib2wgdGFibGUgcm91dGluZXMgaW4gdGhpcyBjbGFzcyBhbGwKQEAgLTU2Nyw5OCArNTY3LDk4IEBACiAgKiBUaGUgbWV0aG9kcyBhcmU6IGFkZFN5bWJvbCwgc3ltYm9sSXNVbmlxdWUsIHNob3dTeW1ib2wuCiAgKi8KIGNsYXNzIG5vZGV7ICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGUgdHJlZSBpcyBtYWRlIHVwIG9mIHRoZXNlIG5vZGVzICovCi0Jbm9kZSBwbGVmdCwgcHJpZ2h0OwotCWludCBsaW5lbnVtOworICAgIG5vZGUgcGxlZnQsIHByaWdodDsKKyAgICBpbnQgbGluZW51bTsKIAotCXN0YXRpYyBmaW5hbCBpbnQgZnJlc2hub2RlID0gMCwKLQlvbGRvbmNlID0gMSwgbmV3b25jZSA9IDIsIGJvdGhvbmNlID0gMywgb3RoZXIgPSA0OworICAgIHN0YXRpYyBmaW5hbCBpbnQgZnJlc2hub2RlID0gMCwKKyAgICBvbGRvbmNlID0gMSwgbmV3b25jZSA9IDIsIGJvdGhvbmNlID0gMywgb3RoZXIgPSA0OwogCi0JaW50IC8qIGVudW0gbGluZXN0YXRlcyAqLyBsaW5lc3RhdGU7Ci0JU3RyaW5nIGxpbmU7CisgICAgaW50IC8qIGVudW0gbGluZXN0YXRlcyAqLyBsaW5lc3RhdGU7CisgICAgU3RyaW5nIGxpbmU7CiAKLQlzdGF0aWMgbm9kZSBwYW5jaG9yID0gbnVsbDsgICAgLyogc3ltdGFiIGlzIGEgdHJlZSBodW5nIGZyb20gdGhpcyAqLworICAgIHN0YXRpYyBub2RlIHBhbmNob3IgPSBudWxsOyAgICAvKiBzeW10YWIgaXMgYSB0cmVlIGh1bmcgZnJvbSB0aGlzICovCiAKLQkvKioKLQkgKiBDb25zdHJ1Y3QgYSBuZXcgc3ltYm9sIHRhYmxlIG5vZGUgYW5kIGZpbGwgaW4gaXRzIGZpZWxkcy4KLQkgKiBAcGFyYW0gICAgICAgIHN0cmluZwlBIGxpbmUgb2YgdGhlIHRleHQgZmlsZQotCSAqLwotCW5vZGUoIFN0cmluZyBwbGluZSkKLQl7Ci0JICAgICBwbGVmdCA9IHByaWdodCA9IG51bGw7Ci0JICAgICBsaW5lc3RhdGUgPSBmcmVzaG5vZGU7Ci0JICAgICAvKiBsaW5lbnVtIGZpZWxkIGlzIG5vdCBhbHdheXMgdmFsaWQgKi8KLQkgICAgIGxpbmUgPSBwbGluZTsKLQl9CisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGEgbmV3IHN5bWJvbCB0YWJsZSBub2RlIGFuZCBmaWxsIGluIGl0cyBmaWVsZHMuCisgICAgICogQHBhcmFtICAgICAgICBzdHJpbmcgICAgQSBsaW5lIG9mIHRoZSB0ZXh0IGZpbGUKKyAgICAgKi8KKyAgICBub2RlKCBTdHJpbmcgcGxpbmUpCisgICAgeworICAgICAgICAgcGxlZnQgPSBwcmlnaHQgPSBudWxsOworICAgICAgICAgbGluZXN0YXRlID0gZnJlc2hub2RlOworICAgICAgICAgLyogbGluZW51bSBmaWVsZCBpcyBub3QgYWx3YXlzIHZhbGlkICovCisgICAgICAgICBsaW5lID0gcGxpbmU7CisgICAgfQogCi0JLyoqCi0JICogbWF0Y2hzeW1ib2wgICAgICAgU2VhcmNoZXMgdHJlZSBmb3IgYSBtYXRjaCB0byB0aGUgbGluZS4KLQkgKiBAcGFyYW0JU3RyaW5nCXBsaW5lLCBhIGxpbmUgb2YgdGV4dAotCSAqIElmIG5vZGUncyBsaW5lc3RhdGUgPT0gZnJlc2hub2RlLCB0aGVuIGNyZWF0ZWQgdGhlIG5vZGUuCi0JICovCi0Jc3RhdGljIG5vZGUgbWF0Y2hzeW1ib2woIFN0cmluZyBwbGluZSApCi0JewotCSAgICAgaW50IGNvbXBhcmlzb247Ci0JICAgICBub2RlIHBub2RlID0gcGFuY2hvcjsKLQkgICAgIGlmICggcGFuY2hvciA9PSBudWxsICkgcmV0dXJuIHBhbmNob3IgPSBuZXcgbm9kZSggcGxpbmUpOwotCSAgICAgZm9yKDs7KSB7Ci0JCSAgY29tcGFyaXNvbiA9IHBub2RlLmxpbmUuY29tcGFyZVRvKHBsaW5lKTsKLQkJICBpZiAoIGNvbXBhcmlzb24gPT0gMCApIHJldHVybiBwbm9kZTsgICAgICAgICAgLyogZm91bmQgKi8KKyAgICAvKioKKyAgICAgKiBtYXRjaHN5bWJvbCAgICAgICBTZWFyY2hlcyB0cmVlIGZvciBhIG1hdGNoIHRvIHRoZSBsaW5lLgorICAgICAqIEBwYXJhbSAgICBTdHJpbmcgICAgcGxpbmUsIGEgbGluZSBvZiB0ZXh0CisgICAgICogSWYgbm9kZSdzIGxpbmVzdGF0ZSA9PSBmcmVzaG5vZGUsIHRoZW4gY3JlYXRlZCB0aGUgbm9kZS4KKyAgICAgKi8KKyAgICBzdGF0aWMgbm9kZSBtYXRjaHN5bWJvbCggU3RyaW5nIHBsaW5lICkKKyAgICB7CisgICAgICAgICBpbnQgY29tcGFyaXNvbjsKKyAgICAgICAgIG5vZGUgcG5vZGUgPSBwYW5jaG9yOworICAgICAgICAgaWYgKCBwYW5jaG9yID09IG51bGwgKSByZXR1cm4gcGFuY2hvciA9IG5ldyBub2RlKCBwbGluZSk7CisgICAgICAgICBmb3IoOzspIHsKKyAgICAgICAgICBjb21wYXJpc29uID0gcG5vZGUubGluZS5jb21wYXJlVG8ocGxpbmUpOworICAgICAgICAgIGlmICggY29tcGFyaXNvbiA9PSAwICkgcmV0dXJuIHBub2RlOyAgICAgICAgICAvKiBmb3VuZCAqLwogCi0JCSAgaWYgKCBjb21wYXJpc29uIDwgMCApIHsKLQkJICAgICAgIGlmICggcG5vZGUucGxlZnQgPT0gbnVsbCApIHsKLQkJCSAgICBwbm9kZS5wbGVmdCA9IG5ldyBub2RlKCBwbGluZSk7Ci0JCQkgICAgcmV0dXJuIHBub2RlLnBsZWZ0OwotCQkgICAgICAgfQotCQkgICAgICAgcG5vZGUgPSBwbm9kZS5wbGVmdDsKLQkJICB9Ci0JCSAgaWYgKCBjb21wYXJpc29uID4gMCApIHsKLQkJICAgICAgIGlmICggcG5vZGUucHJpZ2h0ID09IG51bGwgKSB7Ci0JCQkgICAgcG5vZGUucHJpZ2h0ID0gbmV3IG5vZGUoIHBsaW5lKTsKLQkJCSAgICByZXR1cm4gcG5vZGUucHJpZ2h0OwotCQkgICAgICAgfQotCQkgICAgICAgcG5vZGUgPSBwbm9kZS5wcmlnaHQ7Ci0JCSAgfQotCSAgICAgfQotCSAgICAgLyogTk9URTogVGhlcmUgYXJlIHJldHVybiBzdG10cywgc28gY29udHJvbCBkb2VzIG5vdCBnZXQgaGVyZS4gKi8KLQl9CisgICAgICAgICAgaWYgKCBjb21wYXJpc29uIDwgMCApIHsKKyAgICAgICAgICAgICAgIGlmICggcG5vZGUucGxlZnQgPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICBwbm9kZS5wbGVmdCA9IG5ldyBub2RlKCBwbGluZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBub2RlLnBsZWZ0OworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgcG5vZGUgPSBwbm9kZS5wbGVmdDsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKCBjb21wYXJpc29uID4gMCApIHsKKyAgICAgICAgICAgICAgIGlmICggcG5vZGUucHJpZ2h0ID09IG51bGwgKSB7CisgICAgICAgICAgICAgICAgcG5vZGUucHJpZ2h0ID0gbmV3IG5vZGUoIHBsaW5lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcG5vZGUucHJpZ2h0OworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgcG5vZGUgPSBwbm9kZS5wcmlnaHQ7CisgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgICAgLyogTk9URTogVGhlcmUgYXJlIHJldHVybiBzdG10cywgc28gY29udHJvbCBkb2VzIG5vdCBnZXQgaGVyZS4gKi8KKyAgICB9CiAKLQkvKioKLQkgKiBhZGRTeW1ib2woU3RyaW5nIHBsaW5lKSAtIFNhdmVzIGxpbmUgaW50byB0aGUgc3ltYm9sIHRhYmxlLgotCSAqIFJldHVybnMgYSBoYW5kbGUgdG8gdGhlIHN5bXRhYiBlbnRyeSBmb3IgdGhhdCB1bmlxdWUgbGluZS4KLQkgKiBJZiBpbm9sZGZpbGUgbm9uemVybywgdGhlbiBsaW5lbnVtIGlzIHJlbWVtYmVyZWQuCi0JICovCi0Jc3RhdGljIG5vZGUgYWRkU3ltYm9sKCBTdHJpbmcgcGxpbmUsIGJvb2xlYW4gaW5vbGRmaWxlLCBpbnQgbGluZW51bSApCi0JewotCQlub2RlIHBub2RlOwotCQlwbm9kZSA9IG1hdGNoc3ltYm9sKCBwbGluZSApOyAgLyogZmluZCB0aGUgbm9kZSBpbiB0aGUgdHJlZSAqLwotCQlpZiAoIHBub2RlLmxpbmVzdGF0ZSA9PSBmcmVzaG5vZGUgKSB7Ci0JCQlwbm9kZS5saW5lc3RhdGUgPSBpbm9sZGZpbGUgPyBvbGRvbmNlIDogbmV3b25jZTsKLQkJfSBlbHNlIHsKLQkJICBpZiAoKCBwbm9kZS5saW5lc3RhdGUgPT0gb2xkb25jZSAmJiAhaW5vbGRmaWxlICkgfHwKLQkJICAgICAgKCBwbm9kZS5saW5lc3RhdGUgPT0gbmV3b25jZSAmJiAgaW5vbGRmaWxlICkpCi0JCSAgICAgICBwbm9kZS5saW5lc3RhdGUgPSBib3Rob25jZTsKLQkJICBlbHNlIHBub2RlLmxpbmVzdGF0ZSA9IG90aGVyOwotCQl9Ci0JCWlmIChpbm9sZGZpbGUpIHBub2RlLmxpbmVudW0gPSBsaW5lbnVtOwotCQlyZXR1cm4gcG5vZGU7Ci0JfQorICAgIC8qKgorICAgICAqIGFkZFN5bWJvbChTdHJpbmcgcGxpbmUpIC0gU2F2ZXMgbGluZSBpbnRvIHRoZSBzeW1ib2wgdGFibGUuCisgICAgICogUmV0dXJucyBhIGhhbmRsZSB0byB0aGUgc3ltdGFiIGVudHJ5IGZvciB0aGF0IHVuaXF1ZSBsaW5lLgorICAgICAqIElmIGlub2xkZmlsZSBub256ZXJvLCB0aGVuIGxpbmVudW0gaXMgcmVtZW1iZXJlZC4KKyAgICAgKi8KKyAgICBzdGF0aWMgbm9kZSBhZGRTeW1ib2woIFN0cmluZyBwbGluZSwgYm9vbGVhbiBpbm9sZGZpbGUsIGludCBsaW5lbnVtICkKKyAgICB7CisgICAgICAgIG5vZGUgcG5vZGU7CisgICAgICAgIHBub2RlID0gbWF0Y2hzeW1ib2woIHBsaW5lICk7ICAvKiBmaW5kIHRoZSBub2RlIGluIHRoZSB0cmVlICovCisgICAgICAgIGlmICggcG5vZGUubGluZXN0YXRlID09IGZyZXNobm9kZSApIHsKKyAgICAgICAgICAgIHBub2RlLmxpbmVzdGF0ZSA9IGlub2xkZmlsZSA/IG9sZG9uY2UgOiBuZXdvbmNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlmICgoIHBub2RlLmxpbmVzdGF0ZSA9PSBvbGRvbmNlICYmICFpbm9sZGZpbGUgKSB8fAorICAgICAgICAgICAgICAoIHBub2RlLmxpbmVzdGF0ZSA9PSBuZXdvbmNlICYmICBpbm9sZGZpbGUgKSkKKyAgICAgICAgICAgICAgIHBub2RlLmxpbmVzdGF0ZSA9IGJvdGhvbmNlOworICAgICAgICAgIGVsc2UgcG5vZGUubGluZXN0YXRlID0gb3RoZXI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlub2xkZmlsZSkgcG5vZGUubGluZW51bSA9IGxpbmVudW07CisgICAgICAgIHJldHVybiBwbm9kZTsKKyAgICB9CiAKLQkvKioKLQkgKiBzeW1ib2xJc1VuaXF1ZSAgICBBcmcgaXMgYSBwdHIgcHJldmlvdXNseSByZXR1cm5lZCBieSBhZGRTeW1ib2wuCi0JICogLS0tLS0tLS0tLS0tLS0gICAgUmV0dXJucyB0cnVlIGlmIHRoZSBsaW5lIHdhcyBhZGRlZCB0byB0aGUKLQkgKiAgICAgICAgICAgICAgICAgICBzeW1ib2wgdGFibGUgZXhhY3RseSBvbmNlIHdpdGggaW5vbGRmaWxlIHRydWUsCi0JICogICAgICAgICAgICAgICAgICAgYW5kIGV4YWN0bHkgb25jZSB3aXRoIGlub2xkZmlsZSBmYWxzZS4KLQkgKi8KLQlib29sZWFuIHN5bWJvbElzVW5pcXVlKCkKLQl7Ci0JCXJldHVybiAobGluZXN0YXRlID09IGJvdGhvbmNlICk7Ci0JfQorICAgIC8qKgorICAgICAqIHN5bWJvbElzVW5pcXVlICAgIEFyZyBpcyBhIHB0ciBwcmV2aW91c2x5IHJldHVybmVkIGJ5IGFkZFN5bWJvbC4KKyAgICAgKiAtLS0tLS0tLS0tLS0tLSAgICBSZXR1cm5zIHRydWUgaWYgdGhlIGxpbmUgd2FzIGFkZGVkIHRvIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgIHN5bWJvbCB0YWJsZSBleGFjdGx5IG9uY2Ugd2l0aCBpbm9sZGZpbGUgdHJ1ZSwKKyAgICAgKiAgICAgICAgICAgICAgICAgICBhbmQgZXhhY3RseSBvbmNlIHdpdGggaW5vbGRmaWxlIGZhbHNlLgorICAgICAqLworICAgIGJvb2xlYW4gc3ltYm9sSXNVbmlxdWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChsaW5lc3RhdGUgPT0gYm90aG9uY2UgKTsKKyAgICB9CiAKLQkvKioKLQkgKiBzaG93U3ltYm9sICAgICAgICBQcmludHMgdGhlIGxpbmUgdG8gc3Rkb3V0LgotCSAqLwotCXZvaWQgc2hvd1N5bWJvbCgpCi0JewotCQlTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7Ci0JfQorICAgIC8qKgorICAgICAqIHNob3dTeW1ib2wgICAgICAgIFByaW50cyB0aGUgbGluZSB0byBzdGRvdXQuCisgICAgICovCisgICAgdm9pZCBzaG93U3ltYm9sKCkKKyAgICB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL2ZpbGVkaWZmL01vZGlmeVJlcG9ydC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9maWxlZGlmZi9Nb2RpZnlSZXBvcnQuamF2YQppbmRleCA0MGVhYmY2Li44NzUwNGUyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL2ZpbGVkaWZmL01vZGlmeVJlcG9ydC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvZmlsZWRpZmYvTW9kaWZ5UmVwb3J0LmphdmEKQEAgLTI0LDggKzI0LDggQEAKICAgICAgICAgaWYoYXJncy5sZW5ndGggIT0gMSl7CiAgICAgICAgICAgICBtZi51c2FnZSgpOwogICAgICAgICAgICAgU3lzdGVtLmV4aXQoMCk7Ci0gICAgICAgIH0gICAgICAgICAgICAKLSAgICAgICAgU3RyaW5nIHRvYmVBZGRlZCA9IAorICAgICAgICB9CisgICAgICAgIFN0cmluZyB0b2JlQWRkZWQgPQogICAgICAgICAiPHRyPiBcbiIrCiAgICAgICAgICI8dGQgY29sc3Bhbj0zIGFsaWduPWNlbnRlcj4gPGZvbnQgY29sb3I9UkVEPiA8Yj4gRXhwZWN0ZWQgUmVzdWx0cyA8L2I+IDwvZm9udD4gPC90ZD4gXG4iKwogICAgICAgICAgIjwvdHI+XG4iKwpAQCAtODgsMTQgKzg4LDE0IEBACiAgICAgICAgICAiPHRyPiBcbiIrCiAgICAgICAgICAiPHRkPiAgc3FldGVzdHMvdHJhbnNhY3Rpb24vdHhnbG9iYWwgPC90ZD4gXG4iKwogICAgICAgICAgIjx0ZD4gPC90ZD4gXG4iKwotICAgICAgICAgIjx0ZD4gW1RvdGFsIDoxXTwvdGQ+XG4iKyAgICAgICAgIAorICAgICAgICAgIjx0ZD4gW1RvdGFsIDoxXTwvdGQ+XG4iKwogICAgICAgICAgIjwvdHI+XG4iKwogICAgICAgICAgIjx0cj4gXG4iKwogICAgICAgICAgIjx0ZD4gIHNxZXRlc3RzL3NlY3VyaXR5IDwvdGQ+XG4iKwogICAgICAgICAgIjx0ZD4gPC90ZD4gXG4iKwogICAgICAgICAgIjx0ZD4gW1RvdGFsIDoxXTwvdGQ+XG4iKwogICAgICAgICAgIjwvdHI+XG4iKwotICovICAgICAgICAgCisgKi8KICAgICAgICAgbWYubW9kaWZ5RmlsZShhcmdzWzBdLCB0b2JlQWRkZWQpOwogICAgIH0KIApAQCAtMTA2LDI1ICsxMDYsMjUgQEAKICAgICAgICAgU3RyaW5nIHRhZyA9ICI8L1RBQkxFPiI7CiAgICAgICAgIGludCBicmVha1BvaW50ID0gLTEgOwogICAgICAgICBpbnQgYzsKLSAgICAgICAgdHJ5eyAgICAgICAKKyAgICAgICAgdHJ5ewogICAgICAgICAgICAgRmlsZSBpbnB1dGZpbGUgPSBuZXcgRmlsZShmaWxlbmFtZSk7CiAgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihpbnB1dGZpbGUpKTsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlJlYWRpbmcgb3JpZ2luYWwgZmlsZS4uLiIpOwotICAgICAgICAgICAgd2hpbGUgKChmaWxlbGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwpeyAgICAgICAgICAgIAorICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiUmVhZGluZyBvcmlnaW5hbCBmaWxlLi4uIik7CisgICAgICAgICAgICB3aGlsZSAoKGZpbGVsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCl7CiAgICAgICAgICAgICAgICAgZmlsZWRhdGEuYXBwZW5kKGZpbGVsaW5lKTsKLSAgICAgICAgICAgIH0gICAgICAgICAgICAKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkZpbmlzaGVkIFJlYWRpbmcgZmlsZS4gIik7Ci0JICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJDbG9zaW5nIGlucHV0IHN0cmVhbS4uLiIpOworICAgICAgICAgICAgfQorICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRmluaXNoZWQgUmVhZGluZyBmaWxlLiAiKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkNsb3NpbmcgaW5wdXQgc3RyZWFtLi4uIik7CiAgICAgICAgICAgICBpbi5jbG9zZSgpOwotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiZmlsZWRhdGE6XG5cbiIrZmlsZWRhdGEpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiZmlsZWRhdGE6XG5cbiIrZmlsZWRhdGEpOwogICAgICAgICAgICAgLy8gZmluZCBpbmRleCBvZiBmaXJzdCA8L1RBQkxFPiB0YWcKICAgICAgICAgICAgIC8vIGluc2VydCBuZXcgc3RyaW5nIGF0IHRoZSBpbmRleC4KLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oImJyZWFrUG9pbnQ6IiticmVha1BvaW50KTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oImJyZWFrUG9pbnQ6IiticmVha1BvaW50KTsKICAgICAgICAgICAgIGJyZWFrUG9pbnQ9ZmlsZWRhdGEuaW5kZXhPZih0YWcpOwogICAgICAgICAgICAgaWYoYnJlYWtQb2ludCAhPSAtMSl7CiAgICAgICAgICAgICAgICAgZmlsZWRhdGEuaW5zZXJ0KGJyZWFrUG9pbnQsIHRvYmVBZGRlZCk7CiAgICAgICAgICAgICAgICAgZmlsZUNvbnRlbnQgPSBmaWxlZGF0YS50b1N0cmluZygpOwotCQkvL1N5c3RlbS5vdXQucHJpbnRsbigic3RyaW5nIGluc2VydGVkIik7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJzdHJpbmcgaW5zZXJ0ZWQiKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzcGVjaWZpZWQgdGFnOiAiK3RhZysiIHdhcyBub3QgZm91bmQgaW4gdGhlIHJlcG9ydCIpOwogICAgICAgICAgICAgfQpAQCAtMTM4LDcgKzEzOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsZWFzZSBjaGVjayB0aGUgZmlsZSBuYW1lIGFuZCB0cnkgYWdhaW4iKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0gICAgICAgIAorICAgICAgICB9CiAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIpOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCB1c2FnZSgpewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9maWxlZGlmZi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9maWxlZGlmZi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGZiNDczM2YuLjVlZTM4NmYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvZmlsZWRpZmYvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL2ZpbGVkaWZmL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IGVudmlyb25tZW50PSJlbnYiIC8+CiA8cHJvcGVydHkgbmFtZT0iamF2YXBhdGgiIHZhbHVlPSIke0pBVkFfSE9NRX0vbGliL2R0LmphcjokKEpBVkFfSE9NRSkvbGliL3Rvb2xzLmphciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9maWxlZGlmZi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL2ZpbGVkaWZmL2J1aWxkLnhtbAppbmRleCAwMjk2ZDg2Li42MmE0OGNlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL2ZpbGVkaWZmL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL2ZpbGVkaWZmL2J1aWxkLnhtbApAQCAtMjksMjUgKzI5LDI1IEBACiAmY29tbW9uQnVpbGQ7CiAKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLGluaXQsYnVpbGQsamFyIi8+Ci0gICAgICAgIAorCiAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+CiAgIDxta2RpciBkaXI9IiR7YnVpbGQuZGVzdH0iLz4KLSAgICAKKwogICA8L3RhcmdldD4KLSAgCi0gICAKKworCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImluaXQiPgogICA8amF2YWMKLQkJZGVzdGRpcj0iJHtidWlsZC5kZXN0fSIKLQkJY2xhc3NwYXRoPSIke2NsYXNzcGF0aH0iCisgICAgICAgIGRlc3RkaXI9IiR7YnVpbGQuZGVzdH0iCisgICAgICAgIGNsYXNzcGF0aD0iJHtjbGFzc3BhdGh9IgogICAgICAgICAgICAgICAgIHNyY2Rpcj0iJHtiYXNlZGlyfSIKICAgICAgICAgICAgICAgICBkZWJ1Zz0ib24iCi0JCWRlcHJlY2F0aW9uPSJvbiIKKyAgICAgICAgZGVwcmVjYXRpb249Im9uIgogICAgIC8+Ci0gICAgCisKICAgPC90YXJnZXQ+Ci0gIAotICAgCisKKwogICA8dGFyZ2V0IG5hbWU9ImphciIgZGVwZW5kcz0iaW5pdC1jb21tb24sYnVpbGQiPgogICA8ZWNobyBtZXNzYWdlPSJvdXRwdXR0aW5nIGphciBhdCAke2phcmZpbGV9Ii8+CiAgIDxwcm9wZXJ0eSBlbnZpcm9ubWVudD0iZW52Ii8+CkBAIC01Nyw0MSArNTcsNDEgQEAKICAgIDxhcmcgbGluZT0iY3ZmICR7amFyZmlsZX0gLUMgJHtidWlsZC5kZXN0fSAuIiAvPi0tPgogICAgPGphciBqYXJmaWxlPSIke2phcmZpbGV9IiBiYXNlZGlyPSIke2J1aWxkLmRlc3R9IiB1cGRhdGU9InRydWUiCiAgICBpbmNsdWRlcz0iKiovKi5jbGFzcyIvPgotICAgCi0gIAorCisKICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmRlc3R9Ii8+Ci0gICAgICAKKwogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgPGphdmEKLQlmb3JrPSJvbiIKLQljbGFzc3BhdGg9IiR7Y2xhc3NwYXRofToke2phcmZpbGV9IgotCWNsYXNzbmFtZT0iY29tLnN1bi5lanRlLmNjbC5maWxlZGlmZi5EaWZmIj4KLQk8YXJnIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vdXRpbC9maWxlZGlmZi9nb2xkZW5fcmVzdWx0cy54bWwiLz4KLQk8YXJnIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vdGVzdF9yZXN1bHRzLnhtbCIvPgorICAgIGZvcms9Im9uIgorICAgIGNsYXNzcGF0aD0iJHtjbGFzc3BhdGh9OiR7amFyZmlsZX0iCisgICAgY2xhc3NuYW1lPSJjb20uc3VuLmVqdGUuY2NsLmZpbGVkaWZmLkRpZmYiPgorICAgIDxhcmcgdmFsdWU9IiR7ZW52LkFQU19IT01FfS91dGlsL2ZpbGVkaWZmL2dvbGRlbl9yZXN1bHRzLnhtbCIvPgorICAgIDxhcmcgdmFsdWU9IiR7ZW52LkFQU19IT01FfS90ZXN0X3Jlc3VsdHMueG1sIi8+CiA8L2phdmE+CiAKIDwhLS08amF2YQotCWZvcms9Im9uIgotCWNsYXNzcGF0aD0iJHtjbGFzc3BhdGh9OiR7amFyZmlsZX06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtzMWFzdGVzdC5jbGFzc3BhdGh9OiR7ZW52LkFOVF9IT01FfS9saWIveGVyY2VzSW1wbC5qYXI6JHtlbnYuQU5UX0hPTUV9L3htbFBhcnNlckFQSXMuamFyIgotCWNsYXNzbmFtZT0iY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5QYXJzZU1MIj4KLQk8YXJnIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vdXRpbC9maWxlZGlmZi9nb2xkZW5fcmVzdWx0cy54bWwiLz4KLQk8YXJnIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vdGVzdF9yZXN1bHRzLnhtbCIvPgorICAgIGZvcms9Im9uIgorICAgIGNsYXNzcGF0aD0iJHtjbGFzc3BhdGh9OiR7amFyZmlsZX06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtzMWFzdGVzdC5jbGFzc3BhdGh9OiR7ZW52LkFOVF9IT01FfS9saWIveGVyY2VzSW1wbC5qYXI6JHtlbnYuQU5UX0hPTUV9L3htbFBhcnNlckFQSXMuamFyIgorICAgIGNsYXNzbmFtZT0iY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5QYXJzZU1MIj4KKyAgICA8YXJnIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vdXRpbC9maWxlZGlmZi9nb2xkZW5fcmVzdWx0cy54bWwiLz4KKyAgICA8YXJnIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vdGVzdF9yZXN1bHRzLnhtbCIvPgogPC9qYXZhPi0tPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0ibW9kaWZ5UmVwb3J0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxqYXZhCi0JZm9yaz0ib24iCi0JY2xhc3NwYXRoPSIke2NsYXNzcGF0aH06JHtqYXJmaWxlfSIKLQljbGFzc25hbWU9ImNvbS5zdW4uZWp0ZS5jY2wuZmlsZWRpZmYuTW9kaWZ5UmVwb3J0Ij4KLQk8YXJnIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vdGVzdF9yZXN1bHRzLmh0bWwiLz4JCisgICAgZm9yaz0ib24iCisgICAgY2xhc3NwYXRoPSIke2NsYXNzcGF0aH06JHtqYXJmaWxlfSIKKyAgICBjbGFzc25hbWU9ImNvbS5zdW4uZWp0ZS5jY2wuZmlsZWRpZmYuTW9kaWZ5UmVwb3J0Ij4KKyAgICA8YXJnIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vdGVzdF9yZXN1bHRzLmh0bWwiLz4KIDwvamF2YT4KIDwvdGFyZ2V0PgotICAgICAgCisKIDwvcHJvamVjdD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRidWlsZGVyL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGJ1aWxkZXIvcG9tLnhtbAppbmRleCA1YjNlMGY0Li43NGFlNjFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGJ1aWxkZXIvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGJ1aWxkZXIvcG9tLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+Ci0JCisKICAgICA8cGFyZW50PgogICAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5lZTRqPC9ncm91cElkPgogICAgICAgICA8YXJ0aWZhY3RJZD5wcm9qZWN0PC9hcnRpZmFjdElkPgpAQCAtMjcsMTIgKzI3LDEyIEBACiAgICAgPC9wYXJlbnQ+CiAgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgogICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guZGV2dGVzdHM8L2dyb3VwSWQ+Ci0JPHZlcnNpb24+NC4wLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjQuMC1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8YXJ0aWZhY3RJZD5yZXBvcnQtYnVpbGRlcjwvYXJ0aWZhY3RJZD4KICAgICA8cGFja2FnaW5nPmphcjwvcGFja2FnaW5nPgogICAgIDxuYW1lPnJlcG9ydC1idWlsZGVyPC9uYW1lPgogICAgIDxidWlsZD4KLQkJPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+CisgICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPgogICAgICAgICA8ZGVmYXVsdEdvYWw+aW5zdGFsbDwvZGVmYXVsdEdvYWw+CiAgICAgICAgIDxwbHVnaW5zPgogICAgICAgICAgICAgPHBsdWdpbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0YnVpbGRlci9zcmMvbWFpbi9qYXZhL2NvbS9zdW4vYXBwc2Vydi90ZXN0L3V0aWwvcHJvY2Vzcy9Qcm9jZXNzTWFuYWdlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRidWlsZGVyL3NyYy9tYWluL2phdmEvY29tL3N1bi9hcHBzZXJ2L3Rlc3QvdXRpbC9wcm9jZXNzL1Byb2Nlc3NNYW5hZ2VyLmphdmEKaW5kZXggMjE3MjMxNC4uYmU4ZTZkMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRidWlsZGVyL3NyYy9tYWluL2phdmEvY29tL3N1bi9hcHBzZXJ2L3Rlc3QvdXRpbC9wcm9jZXNzL1Byb2Nlc3NNYW5hZ2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRidWlsZGVyL3NyYy9tYWluL2phdmEvY29tL3N1bi9hcHBzZXJ2L3Rlc3QvdXRpbC9wcm9jZXNzL1Byb2Nlc3NNYW5hZ2VyLmphdmEKQEAgLTIzOCw3ICsyMzgsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBsaW5lID0gcmVhZGVyLnJlYWRMaW5lKCk7IGxpbmUgIT0gbnVsbDsgbGluZSA9IHJlYWRlci5yZWFkTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZChsaW5lKS5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmKGVjaG8pCiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRidWlsZGVyL3NyYy9tYWluL2phdmEvY29tL3N1bi9hcHBzZXJ2L3Rlc3QvdXRpbC9wcm9jZXNzL1Byb2Nlc3NTdHJlYW1EcmFpbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGJ1aWxkZXIvc3JjL21haW4vamF2YS9jb20vc3VuL2FwcHNlcnYvdGVzdC91dGlsL3Byb2Nlc3MvUHJvY2Vzc1N0cmVhbURyYWluZXIuamF2YQppbmRleCAwNmNiNmJjLi43NWUyNmVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGJ1aWxkZXIvc3JjL21haW4vamF2YS9jb20vc3VuL2FwcHNlcnYvdGVzdC91dGlsL3Byb2Nlc3MvUHJvY2Vzc1N0cmVhbURyYWluZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGJ1aWxkZXIvc3JjL21haW4vamF2YS9jb20vc3VuL2FwcHNlcnYvdGVzdC91dGlsL3Byb2Nlc3MvUHJvY2Vzc1N0cmVhbURyYWluZXIuamF2YQpAQCAtODIsNyArODIsNyBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIENyZWF0ZSBhbiBpbnN0YW5jZSwgZHJhaW4gYW5kIHJlZGlyZWN0IHRoZSBwcm9jZXNzJyBzdGRlcnIgYW5kIHN0ZG91dCB0byAKKyAgICAgKiBDcmVhdGUgYW4gaW5zdGFuY2UsIGRyYWluIGFuZCByZWRpcmVjdCB0aGUgcHJvY2Vzcycgc3RkZXJyIGFuZCBzdGRvdXQgdG8KICAgICAgKiBTeXN0ZW0uZXJyIGFuZCBTeXN0ZW0ub3V0IHJlc3BlY3RpdmVseS4KICAgICAgKiBAcGFyYW0gcHJvY2VzcyBUaGUgUHJvY2VzcyB0byBkcmFpbgogICAgICAqIEBwYXJhbSBwcm9jZXNzTmFtZSBUaGUgbmFtZSB3aWxsIGJlIHVzZWQgdG8gbmFtZSB0aGUgZHJhaW5lciB0aHJlYWRzCkBAIC0xMjYsMjMgKzEyNiwyMyBAQAogICAgIH0KIAogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIAorCiAgICAgcHJpdmF0ZSBQcm9jZXNzU3RyZWFtRHJhaW5lcihTdHJpbmcgcHJvY2Vzc05hbWUsIFByb2Nlc3MgcHJvY2VzcywgYm9vbGVhbiByZWRpcmVjdCwgYm9vbGVhbiBzYXZlKQogICAgIHsKICAgICAgICAgaWYocHJvY2VzcyA9PSBudWxsKQogICAgICAgICAgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCJJbnRlcm5hbCBFcnJvcjogbnVsbCBQcm9jZXNzIG9iamVjdCIpOwotICAgICAgICAKKwogICAgICAgICB0aGlzLnByb2Nlc3MgPSBwcm9jZXNzOwotICAgICAgICAKKwogICAgICAgICBpZihwcm9jZXNzTmFtZSA9PSBudWxsIHx8IHByb2Nlc3NOYW1lLmxlbmd0aCgpIDw9IDApCiAgICAgICAgICAgICB0aGlzLnByb2Nlc3NOYW1lID0gIlVua25vd25Qcm9jZXNzTmFtZSI7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRoaXMucHJvY2Vzc05hbWUgPSBwcm9jZXNzTmFtZTsKLSAgICAgICAgCisKICAgICAgICAgcmVkaXJlY3RTdGFuZGFyZFN0cmVhbXMgPSByZWRpcmVjdDsKIAogICAgICAgICBQcm9jZXNzU3RyZWFtRHJhaW5lcldvcmtlciB3b3JrZXI7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKHJlZGlyZWN0U3RhbmRhcmRTdHJlYW1zKQogICAgICAgICAgICAgb3V0V29ya2VyID0gbmV3IFByb2Nlc3NTdHJlYW1EcmFpbmVyV29ya2VyKHByb2Nlc3MuZ2V0SW5wdXRTdHJlYW0oKSwgU3lzdGVtLm91dCwgc2F2ZSk7CiAgICAgICAgIGVsc2UKQEAgLTE1MCwxOSArMTUwLDE5IEBACiAKICAgICAgICAgb3V0VGhyZWFkID0gbmV3IFRocmVhZChvdXRXb3JrZXIsIHByb2Nlc3NOYW1lICsgIi0iICsgT1VUX0RSQUlORVIpOwogICAgICAgICBvdXRUaHJlYWQuc2V0RGFlbW9uKHRydWUpOwotICAgICAgICAKKwogICAgICAgICBpZihyZWRpcmVjdFN0YW5kYXJkU3RyZWFtcykKICAgICAgICAgICAgIGVycldvcmtlciA9IG5ldyBQcm9jZXNzU3RyZWFtRHJhaW5lcldvcmtlcihwcm9jZXNzLmdldEVycm9yU3RyZWFtKCksIFN5c3RlbS5lcnIsIHNhdmUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBlcnJXb3JrZXIgPSBuZXcgUHJvY2Vzc1N0cmVhbURyYWluZXJXb3JrZXIocHJvY2Vzcy5nZXRFcnJvclN0cmVhbSgpLCBudWxsLCBzYXZlKTsKLSAgICAgICAgCisKICAgICAgICAgZXJyVGhyZWFkID0gbmV3IFRocmVhZChlcnJXb3JrZXIsIHByb2Nlc3NOYW1lICsgIi0iICsgRVJST1JfRFJBSU5FUik7CiAgICAgICAgIGVyclRocmVhZC5zZXREYWVtb24odHJ1ZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU3RhcnQgdGhlIGRyYWluaW5nLgotICAgICAqIFdlIHN0YXJ0IHRoZW0gaGVyZSBpbnN0ZWFkIG9mIHRoZSBjb25zdHJ1Y3RvciBzbyB0aGF0ICJ0aGlzIiBkb2Vzbid0IAorICAgICAqIFdlIHN0YXJ0IHRoZW0gaGVyZSBpbnN0ZWFkIG9mIHRoZSBjb25zdHJ1Y3RvciBzbyB0aGF0ICJ0aGlzIiBkb2Vzbid0CiAgICAgICogbGVhayBvdXQgb2YgdGhlIGNvbnN0cnVjdG9yLgogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBkcmFpbigpCkBAIC0xNzAsOSArMTcwLDkgQEAKICAgICAgICAgb3V0VGhyZWFkLnN0YXJ0KCk7CiAgICAgICAgIGVyclRocmVhZC5zdGFydCgpOwogICAgIH0KLSAgICAKKwogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIAorCiAgICAgcHJpdmF0ZSBmaW5hbCAgICAgICAgICAgUHJvY2VzcyAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3M7CiAgICAgcHJpdmF0ZSBmaW5hbCAgICAgICAgICAgUHJvY2Vzc1N0cmVhbURyYWluZXJXb3JrZXIgIG91dFdvcmtlcjsKICAgICBwcml2YXRlIGZpbmFsICAgICAgICAgICBQcm9jZXNzU3RyZWFtRHJhaW5lcldvcmtlciAgZXJyV29ya2VyOwpAQCAtMTgyLDcgKzE4Miw3IEBACiAgICAgcHJpdmF0ZSBmaW5hbCAgICAgICAgICAgYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0U3RhbmRhcmRTdHJlYW1zOwogICAgIHByaXZhdGUgZmluYWwgICBzdGF0aWMgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICBFUlJPUl9EUkFJTkVSICAgPSAiU3RkZXJyRHJhaW5lciI7CiAgICAgcHJpdmF0ZSBmaW5hbCAgIHN0YXRpYyAgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgIE9VVF9EUkFJTkVSICAgICA9ICJTdGRvdXREcmFpbmVyIjsKLSAgICAKKwogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGJ1aWxkZXIvc3JjL21haW4vamF2YS9jb20vc3VuL2FwcHNlcnYvdGVzdC91dGlsL3Byb2Nlc3MvUHJvY2Vzc1N0cmVhbURyYWluZXJXb3JrZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0YnVpbGRlci9zcmMvbWFpbi9qYXZhL2NvbS9zdW4vYXBwc2Vydi90ZXN0L3V0aWwvcHJvY2Vzcy9Qcm9jZXNzU3RyZWFtRHJhaW5lcldvcmtlci5qYXZhCmluZGV4IDZlZGRkNDcuLjA5ZTkwY2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0YnVpbGRlci9zcmMvbWFpbi9qYXZhL2NvbS9zdW4vYXBwc2Vydi90ZXN0L3V0aWwvcHJvY2Vzcy9Qcm9jZXNzU3RyZWFtRHJhaW5lcldvcmtlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0YnVpbGRlci9zcmMvbWFpbi9qYXZhL2NvbS9zdW4vYXBwc2Vydi90ZXN0L3V0aWwvcHJvY2Vzcy9Qcm9jZXNzU3RyZWFtRHJhaW5lcldvcmtlci5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgewogICAgICAgICBpZihpbiA9PSBudWxsKQogICAgICAgICAgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCJJbnB1dFN0cmVhbSBhcmd1bWVudCB3YXMgbnVsbC4iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oaW4pOwogICAgICAgICByZWRpcmVjdCA9IFJlZGlyZWN0OwogCkBAIC0zNSwxNyArMzUsMTcgQEAKICAgICAgICAgICAgIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHJ1bigpCiAgICAgewogICAgICAgICBpZihyZWFkZXIgPT0gbnVsbCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisKICAgICAgICAgdHJ5CiAgICAgICAgIHsKICAgICAgICAgICAgIGludCBjb3VudCA9IDA7CiAgICAgICAgICAgICBieXRlW10gYnVmZmVyID0gbmV3IGJ5dGVbNDA5Nl07Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgd2hpbGUgKChjb3VudCA9IHJlYWRlci5yZWFkKGJ1ZmZlcikpICE9IC0xKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmKHJlZGlyZWN0ICE9IG51bGwpCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICAgICBpZihzYiAhPSBudWxsKQogICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZChuZXcgU3RyaW5nKGJ1ZmZlciwgMCwgY291bnQpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKICAgICAgICAgewogICAgICAgICB9CkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIGZpbmFsICAgQnVmZmVyZWRJbnB1dFN0cmVhbSByZWFkZXI7CiAgICAgcHJpdmF0ZSBmaW5hbCAgIFByaW50U3RyZWFtICAgICAgICAgcmVkaXJlY3Q7CiAgICAgcHJpdmF0ZSAgICAgICAgIFN0cmluZ0J1aWxkZXIgICAgICAgc2I7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGJ1aWxkZXIvc3JjL21haW4vamF2YS9jb20vc3VuL2FwcHNlcnYvdGVzdC91dGlsL3Jlc3VsdHMvVGVzdENhc2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0YnVpbGRlci9zcmMvbWFpbi9qYXZhL2NvbS9zdW4vYXBwc2Vydi90ZXN0L3V0aWwvcmVzdWx0cy9UZXN0Q2FzZS5qYXZhCmluZGV4IDE2NTE1MzIuLjlhMzUxZDMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0YnVpbGRlci9zcmMvbWFpbi9qYXZhL2NvbS9zdW4vYXBwc2Vydi90ZXN0L3V0aWwvcmVzdWx0cy9UZXN0Q2FzZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0YnVpbGRlci9zcmMvbWFpbi9qYXZhL2NvbS9zdW4vYXBwc2Vydi90ZXN0L3V0aWwvcmVzdWx0cy9UZXN0Q2FzZS5qYXZhCkBAIC04MSw3ICs4MSw3IEBACiAgICAgICAgICAgICAiLCBzdGF0dXM9JyIgKyBzdGF0dXMgKyAnXCcnICsKICAgICAgICAgICAgICd9JzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHRvWG1sKCkgewogICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CiAgICAgICAgIGJ1ZmZlci5hcHBlbmQoIjx0ZXN0Y2FzZT5cbiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRidWlsZGVyL3NyYy9tYWluL2phdmEvY29tL3N1bi9hcHBzZXJ2L3Rlc3QvdXRpbC9yZXN1bHRzL1Rlc3RTdWl0ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRidWlsZGVyL3NyYy9tYWluL2phdmEvY29tL3N1bi9hcHBzZXJ2L3Rlc3QvdXRpbC9yZXN1bHRzL1Rlc3RTdWl0ZS5qYXZhCmluZGV4IDk3NDczYTguLjQxNTYwZmUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0YnVpbGRlci9zcmMvbWFpbi9qYXZhL2NvbS9zdW4vYXBwc2Vydi90ZXN0L3V0aWwvcmVzdWx0cy9UZXN0U3VpdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGJ1aWxkZXIvc3JjL21haW4vamF2YS9jb20vc3VuL2FwcHNlcnYvdGVzdC91dGlsL3Jlc3VsdHMvVGVzdFN1aXRlLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKICAqIEBEZXNjcmlwdGlvbjogQ2xhc3MgaG9sZGluZyBPbmUgVGVzdFN1aXRlIGluZm8uCiAgKiBAQXV0aG9yIDogUmFtZXNoIE1hbmRhdmEKICAqIEBMYXN0IE1vZGlmaWVkIDogQnkgUmFtZXNoIG9uIDEwLzI0LzIwMDEKLSAqIEBMYXN0IE1vZGlmaWVkIDogQnkgUmFtZXNoIG9uIDEvMjAvMjAwMiAsIEZvciBwcmVzZXJ2aW5nIG9yZGVyIG9mIGVudHJ5IG9mIHRlc3RzIAkJdXNlZCBhIHNlcGFyYXRlIHRlc3RJZFZlY3RvcgorICogQExhc3QgTW9kaWZpZWQgOiBCeSBSYW1lc2ggb24gMS8yMC8yMDAyICwgRm9yIHByZXNlcnZpbmcgb3JkZXIgb2YgZW50cnkgb2YgdGVzdHMgICAgICAgICB1c2VkIGEgc2VwYXJhdGUgdGVzdElkVmVjdG9yCiAgKiBATGFzdCBNb2RpZmllZCA6IEJ5IEp1c3RpbiBMZWUgb24gMTAvMDUvMjAwOQogICovCiBwdWJsaWMgY2xhc3MgVGVzdFN1aXRlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvRW50ZXJwcmlzZUJlYW5Mb2dnZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvRW50ZXJwcmlzZUJlYW5Mb2dnZXIuamF2YQppbmRleCBiZDdmZDE5Li45ODUzZmQwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGVyL0VudGVycHJpc2VCZWFuTG9nZ2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9FbnRlcnByaXNlQmVhbkxvZ2dlci5qYXZhCkBAIC00MiwxMyArNDIsMTMgQEAKICAgLyphYnN0cmFjdCBwdWJsaWMgQ29sbGVjdGlvbiBnZXRMb2NhbENvbnRyYWN0cygpOwogICBhYnN0cmFjdCBwdWJsaWMgQ29sbGVjdGlvbiBnZXRSZW1vdGVDb250cmFjdHMoKTsKICAgICoqLwotICAKKwogICBwcm90ZWN0ZWQgUG9ydGFibGVBZGFwdGVyW10gYWRhcHRlckhvbWU7CiAKICAgcHJvdGVjdGVkIGJvb2xlYW4gZHVhbE1vZGUgPSBmYWxzZTsKIAogICBwcm90ZWN0ZWQgYm9vbGVhbiBkb1Bhc3NCeVZhbHVlID0gdHJ1ZTsKLSAgCisKICAgcHJvdGVjdGVkIGludCBSRU1PVEVfRUpCID0gMDsKICAgcHJvdGVjdGVkIGludCBMT0NBTF9FSkIgPSAxOwogCkBAIC02OCw0MCArNjgsNDAgQEAKIAogICAgICAgU3RyaW5nIG1vZGUgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvdG9YTUwiKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7CiAgICAgICBpZiAobW9kZS5jb21wYXJlVG8oImZhbHNlIikgPT0gMCl7Ci0Jb3V0cHV0WE1MID0gZmFsc2U7CisgICAgb3V0cHV0WE1MID0gZmFsc2U7CiAgICAgICB9Ci0gICAgICB0b1hNTCgidG9YTUwiLCBtb2RlKTsgICAgICAKKyAgICAgIHRvWE1MKCJ0b1hNTCIsIG1vZGUpOwogCiAgICAgfSBjYXRjaChqYXZhLmxhbmcuRXhjZXB0aW9uIGV4KXsKLSAgICAgIHRvWE1MKCJ0b1hNTCIsICJ0cnVlIik7ICAgIAotICAgIH0gCi0gICAKKyAgICAgIHRvWE1MKCJ0b1hNTCIsICJ0cnVlIik7CisgICAgfQorCiAgICAgdHJ5ewogICAgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgIFN0cmluZyBtb2RlID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3Bhc3NCeSIpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTsKICAgICAgIGlmIChtb2RlLmNvbXBhcmVUbygiYm90aCIpID09IDApewotCWR1YWxNb2RlID0gdHJ1ZTsKKyAgICBkdWFsTW9kZSA9IHRydWU7CiAgICAgICB9IGVsc2UgaWYgKG1vZGUuY29tcGFyZVRvKCJ2YWx1ZSIpICE9IDApewotCWRvUGFzc0J5VmFsdWUgPSBmYWxzZTsKLSAgICAgIH0gICAgCi0gICAgICB0b1hNTCgicGFzc0J5IiwgbW9kZSk7ICAgICAKKyAgICBkb1Bhc3NCeVZhbHVlID0gZmFsc2U7CisgICAgICB9CisgICAgICB0b1hNTCgicGFzc0J5IiwgbW9kZSk7CiAKICAgICB9IGNhdGNoKGphdmEubGFuZy5FeGNlcHRpb24gZXgpewogICAgICAgdG9YTUwoImV4Y2VwdGlvbiIsZXguZ2V0TWVzc2FnZSgpKTsKLSAgICAgIHRvWE1MKCJwYXNzQnkiLCAidHJ1ZSIpOyAgICAKLSAgICB9IAorICAgICAgdG9YTUwoInBhc3NCeSIsICJ0cnVlIik7CisgICAgfQogCiAgICAgT2JqZWN0IG9ianJlZiA9IG51bGw7Ci0gICAgCisKICAgICBpZiAoIChkdWFsTW9kZSA9PSB0cnVlIHx8IGRvUGFzc0J5VmFsdWUpICYmIHJlbW90ZVJlZi5jb21wYXJlVG8oIiIpICE9IDApewogICAgICAgdHJ5ewotCXRvWE1MKCJyZW1vdGUgaW50ZXJmYWNlIixyZW1vdGVSZWYpOwotCW9ianJlZiA9IGljLmxvb2t1cChyZW1vdGVSZWYpOwotCQotCWFkYXB0ZXJIb21lW1JFTU9URV9FSkJdID0gKFBvcnRhYmxlQWRhcHRlcilQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBQb3J0YWJsZUFkYXB0ZXIuY2xhc3MpOwotCXRvWE1MKCJSZW1vdGUgaW50ZXJmYWNlIiwiTG9va2VkIHVwIHJlbW90ZSBpbnRlcmZhY2UiKTsKKyAgICB0b1hNTCgicmVtb3RlIGludGVyZmFjZSIscmVtb3RlUmVmKTsKKyAgICBvYmpyZWYgPSBpYy5sb29rdXAocmVtb3RlUmVmKTsKKworICAgIGFkYXB0ZXJIb21lW1JFTU9URV9FSkJdID0gKFBvcnRhYmxlQWRhcHRlcilQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBQb3J0YWJsZUFkYXB0ZXIuY2xhc3MpOworICAgIHRvWE1MKCJSZW1vdGUgaW50ZXJmYWNlIiwiTG9va2VkIHVwIHJlbW90ZSBpbnRlcmZhY2UiKTsKICAgICAgIH0gY2F0Y2goamF2YS5sYW5nLkV4Y2VwdGlvbiBleCl7Ci0JbG9nTG9jYWxYTUxFeGNlcHRpb24oZXgsInByZXBhcmVMb2NhbEFuZFJlbW90ZU9iamVjdCAtIHJlbW90ZSIpOworICAgIGxvZ0xvY2FsWE1MRXhjZXB0aW9uKGV4LCJwcmVwYXJlTG9jYWxBbmRSZW1vdGVPYmplY3QgLSByZW1vdGUiKTsKICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgUkVNT1RFX0VKQiA9IDA7CkBAIC0xMDksMTMgKzEwOSwxMyBAQAogCiAgICAgaWYgKGR1YWxNb2RlID09IHRydWUgfHwgIWRvUGFzc0J5VmFsdWUpewogICAgICAgaWYgKGR1YWxNb2RlID09IGZhbHNlKXsKLQlMT0NBTF9FSkIgPSAwOworICAgIExPQ0FMX0VKQiA9IDA7CiAgICAgICB9Ci0gICAgICAKKwogICAgICAgdHJ5ewogICAgICAgICAgIC8vIEdldCBhbm90aGVyIG9iamVjdCBqdXN0IHRvIGJlIHN1cmUgPFRFU1Q+CiAgICAgICAgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAKKwogICAgICAgICAgIHRvWE1MKCJsb2NhbCBpbnRlcmZhY2UiLGxvY2FsUmVmKTsKICAgICAgICAgICB0b1hNTCgibG9jYWwgaW50ZXJmYWNlIixpYy5sb29rdXAobG9jYWxSZWYpLnRvU3RyaW5nKCkpOwogICAgICAgICAgIGFkYXB0ZXJIb21lW0xPQ0FMX0VKQl0gPSAoUG9ydGFibGVBZGFwdGVyKWljLmxvb2t1cChsb2NhbFJlZik7CkBAIC0xNjMsNyArMTYzLDcgQEAKICAgICBpZiAob3V0cHV0WE1MKXsKICAgICAgIHRvWE1MKCJleGNlcHRpb24iLCBtc2cudG9TdHJpbmcoKSArICI6ICIgKyBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgZXgucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOwotICAgICAgdG9YTUwoImV4Y2VwdGlvbiIsIi0tLU5PVCBUSFJPV04gVE8gQ0xJRU5ULS0tIik7ICAgICAKKyAgICAgIHRvWE1MKCJleGNlcHRpb24iLCItLS1OT1QgVEhST1dOIFRPIENMSUVOVC0tLSIpOwogICAgIH0KICAgfQogCkBAIC0xNzcsNyArMTc3LDcgQEAKICAgcHVibGljIHZvaWQgZG9QYXNzQnkoaW50IG1vZGUpewogICAgIGlmIChtb2RlID09IEVudGVycHJpc2VCZWFuTG9nZ2VyLlBBU1NfQllfVkFMVUUpCiAgICAgICBkb1Bhc3NCeVZhbHVlID0gdHJ1ZTsKLSAgICBlbHNlIAorICAgIGVsc2UKICAgICAgIGRvUGFzc0J5VmFsdWUgPSBmYWxzZTsKICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGVyL1BhcnNlTUwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvUGFyc2VNTC5qYXZhCmluZGV4IGQ1MGI0MWIuLmJkMWM4MjIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvUGFyc2VNTC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvUGFyc2VNTC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiBpbXBvcnQgamF2YS51dGlsLio7CiAKIHB1YmxpYyBjbGFzcyBQYXJzZU1MewotICAgIHByaXZhdGUgU3RyaW5nIHZlbmRvclBhcnNlckNsYXNzID0gCisgICAgcHJpdmF0ZSBTdHJpbmcgdmVuZG9yUGFyc2VyQ2xhc3MgPQogICAgICJvcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLlNBWFBhcnNlciI7CiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGRlYnVnID0gZmFsc2U7CiAgICAgYm9vbGVhbiBpblRlc3RjYXNlID0gZmFsc2U7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIH0KICAgICAgICAgSGFzaHRhYmxlW10gZmlsZWhhc2ggPSBuZXcgSGFzaHRhYmxlW25vX29mX2ZpbGVzXTsKICAgICAgICAgZmlsZURpZmZzID0gbmV3IFZlY3Rvcltub19vZl9maWxlc107Ci0gICAgICAgIGZvcihpbnQgaSA9IDA7IGk8YXJncy5sZW5ndGg7IGkrKyl7ICAgICAgICAgICAgICAKKyAgICAgICAgZm9yKGludCBpID0gMDsgaTxhcmdzLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgIGZpbGVoYXNoW2ldID0gbmV3IEhhc2h0YWJsZSgpOwogICAgICAgICAgICAgZmlsZURpZmZzW2ldID0gbmV3IFZlY3RvcigpOwogICAgICAgICAgICAgZmlsZURpZmZzW2ldLmFkZCgiPC91PjxiPkZpbGU6IithcmdzW2ldKyI8L2I+PC91Pjxicj5cbiIpOyAvLyBhZGQgdGhlIGZpbGVuYW1lIHRvIHRoZSB2ZWN0b3IKQEAgLTU5LDcgKzU5LDcgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRpc3BsYXlpbmcgaGFzaHRhYmxlICMgIitpKTsKICAgICAgICAgICAgICAgICBwbWwuZGlzcGxheUhhc2goZmlsZWhhc2hbaV0pOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgfQogICAgICAgICBwbWwuZGlmZkhhc2goZmlsZWhhc2gpOwogICAgICAgICBwbWwuZGlzcGxheVZlY3RvckFycihmaWxlRGlmZnMpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJ3cml0aW5nIGRpZmZzIHRvIGZpbGUuLi4iKTsKQEAgLTcwLDE0ICs3MCwxNCBAQAogICAgICAgICAvL2hhc2ggPSBudWxsOwogICAgICAgICB0cnl7CiAgICAgICAgICAgICAvL0luaXRpYWxpemUgYSByZWFkZXIKLSAgICAgICAgICAgIFhNTFJlYWRlciByZWFkZXIgPSAKKyAgICAgICAgICAgIFhNTFJlYWRlciByZWFkZXIgPQogICAgICAgICAgICAgWE1MUmVhZGVyRmFjdG9yeS5jcmVhdGVYTUxSZWFkZXIodmVuZG9yUGFyc2VyQ2xhc3MpOwogICAgICAgICAgICAgLy9SZWdpc3RlciBDb250ZW50IEhhbmRsZXIKICAgICAgICAgICAgIENvbnRlbnRIYW5kbGVyIG15Q29udGVudEhhbmRsZXIgPSBuZXcgTXlDb250ZW50SGFuZGxlcigpOwogICAgICAgICAgICAgcmVhZGVyLnNldENvbnRlbnRIYW5kbGVyKG15Q29udGVudEhhbmRsZXIpOwogCiAgICAgICAgICAgICAvL1BhcnNlCi0gICAgICAgICAgICBJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSA9IAorICAgICAgICAgICAgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UgPQogICAgICAgICAgICAgbmV3IElucHV0U291cmNlKG5ldyBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbShuZXcgamF2YS5pby5GaWxlKHhtbFVSSSkpKTsKICAgICAgICAgICAgIHJlYWRlci5wYXJzZShpbnB1dFNvdXJjZSk7CiAKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgICAgICB9CiAgICAgICAgIHB1YmxpYyB2b2lkIGVuZFByZWZpeE1hcHBpbmcoU3RyaW5nIHByZWZpeCl7CiAgICAgICAgIH0KLSAgICAgICAgcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBsb2NhbE5hbWUsIAorICAgICAgICBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoU3RyaW5nIG5hbWVzcGFjZVVSSSwgU3RyaW5nIGxvY2FsTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBxTmFtZSwgQXR0cmlidXRlcyBhdHRzKQogICAgICAgICAgICAgdGhyb3dzIFNBWEV4Y2VwdGlvbnsKICAgICAgICAgICAgIC8vIGFkZCB0aGUgbG9jYWwgbmFtZSBpbnRvIHZlY3RvcgpAQCAtMTE4LDI5ICsxMTgsMjkgQEAKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnNpZGUgdGVzdGNhc2UgaWQuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gYXNzdW1pbmcgdGhhdCB3aGVuIGl0cyB0aW1lIHRvIGdldCB0aGUgc3RhdHVzLCB0aGUgdmFsdWUgZm9yIHRoZSBrZXlzIHdvdWxkIGhhdmUgYmVlbiBvYnRhaW5lZC4gCisgICAgICAgICAgICAvLyBhc3N1bWluZyB0aGF0IHdoZW4gaXRzIHRpbWUgdG8gZ2V0IHRoZSBzdGF0dXMsIHRoZSB2YWx1ZSBmb3IgdGhlIGtleXMgd291bGQgaGF2ZSBiZWVuIG9idGFpbmVkLgogICAgICAgICAgICAgaWYobG9jYWxOYW1lLmVxdWFscygic3RhdHVzIikgJiYgKGluVGVzdGNhc2UpKXsKICAgICAgICAgICAgICAgICAvL2dldCBhdHRyaWJ1dGVzOiBwYXNzL2ZhaWwKICAgICAgICAgICAgICAgICBpZihkZWJ1Zyl7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0dGluZyB0ZXN0Y2FzZSBzdGF0dXMuLi4iKTsgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0dGluZyB0ZXN0Y2FzZSBzdGF0dXMuLi4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdmFsdWUgPSBhdHRzLmdldFZhbHVlKDApLnRyaW0oKTsKICAgICAgICAgICAgICAgICBpZigoa2V5IT1udWxsKSAmJiAoIShrZXkuZXF1YWxzKCIiKSkpICYmICh2YWx1ZSE9bnVsbCkgJiYgKCF2YWx1ZS5lcXVhbHMoIiIpKSl7CiAgICAgICAgICAgICAgICAgICAgIGlmKGRlYnVnKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiS2V5WyIra2V5KyJdIGhhcyB2YWx1ZVsiK3ZhbHVlKyJdIik7ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJLZXlbIitrZXkrIl0gaGFzIHZhbHVlWyIrdmFsdWUrIl0iKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBoYXNoLnB1dChrZXksdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBnb3RTdGF0dXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBrZXkgPSAiIjsgCisgICAgICAgICAgICAgICAgICAgIGtleSA9ICIiOwogICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICIiOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgIGlmKGtleSA9PSBudWxsIHx8IGtleS5lcXVhbHMoIiIpKXsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52YWxpZCBrZXkhIik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYodmFsdWU9PSBudWxsIHx8IHZhbHVlLmVxdWFscygiIikpewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZhbGlkIHZhbHVlISIpOwotICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNDksMTcgKzE0OSwxNyBAQAogICAgICAgICAgICAgaWYobG9jYWxOYW1lLmVxdWFscygidGVzdGNhc2UiKSl7CiAgICAgICAgICAgICAgICAgaW5UZXN0Y2FzZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGlmKGRlYnVnKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT3V0c2lkZSB0ZXN0Y2FzZSB0YWciKTsgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk91dHNpZGUgdGVzdGNhc2UgdGFnIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYobG9jYWxOYW1lLmVxdWFscygiaWQiKSAmJiAoaW5UZXN0Y2FzZSkpewogICAgICAgICAgICAgICAgIGluVGVzdGNhc2VJRCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGlmKGRlYnVnKXsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJPdXRzaWRlIHRlc3RjYXNlLUlEIHRhZyIpOyAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJPdXRzaWRlIHRlc3RjYXNlLUlEIHRhZyIpOwogICAgICAgICAgICAgICAgIH0gIC8qCiAgICAgICAgICAgICAgICAga2V5ID0ga2V5LnRyaW0oKTsKICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKTsKLSAgICAgICAgICAgICAgICBpZigoa2V5IT1udWxsKSAmJiAodmFsdWUhPW51bGwpICYmIAorICAgICAgICAgICAgICAgIGlmKChrZXkhPW51bGwpICYmICh2YWx1ZSE9bnVsbCkgJiYKICAgICAgICAgICAgICAgICAgICAoISh2YWx1ZS5lcXVhbHMoIiIpKSkgJiYgKCEoa2V5LmVxdWFscygiIikpKSl7CiAKICAgICAgICAgICAgICAgICB9ICAgICovCkBAIC0xODcsMTYgKzE4NywxNiBAQAogICAgICAgICB9CiAgICAgICAgIHB1YmxpYyB2b2lkIHNraXBwZWRFbnRpdHkoU3RyaW5nIG5hbWUpIHRocm93cyBTQVhFeGNlcHRpb257CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNraXBwZWQgZW50aXR5IGlzOiIrbmFtZSk7Ci0gICAgICAgIH0gIAorICAgICAgICB9CiAgICAgfQogICAgIC8qPT09PT09PSBFbmQgb2YgSW5uZXIgQ2xhc3MgRGVmaW5pdGlvbiA9PT09PT09PT09PT09PT09Ki8KIAotICAgIHB1YmxpYyB2b2lkIGRpc3BsYXlIYXNoKEhhc2h0YWJsZSBoYXNodGFibGUpeyAKKyAgICBwdWJsaWMgdm9pZCBkaXNwbGF5SGFzaChIYXNodGFibGUgaGFzaHRhYmxlKXsKICAgICAgICAgZm9yIChFbnVtZXJhdGlvbiBlID0gaGFzaHRhYmxlLmtleXMoKSA7IGUuaGFzTW9yZUVsZW1lbnRzKCkgOykgewogICAgICAgICAgICAgU3RyaW5nIGtleXZhbCA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGtleXZhbCArIjoiK2hhc2h0YWJsZS5nZXQoa2V5dmFsKSk7CiAgICAgICAgIH0KLSAgICB9IAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRpc3BsYXlWZWN0b3IoVmVjdG9yIHYpewogICAgICAgICBmb3IoaW50IGk9MDsgaTx2LnNpemUoKTsgaSsrKXsKQEAgLTIxNCw4ICsyMTQsOCBAQAogICAgICAgICB0cnl7CiAgICAgICAgICAgICBGaWxlIGlucHV0ZmlsZSA9IG5ldyBGaWxlKCJmaWxlRGlmZnMuaHRtbCIpOwogICAgICAgICAgICAgRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKGlucHV0ZmlsZSk7Ci0gICAgICAgICAgICBTdHJpbmcgZmlsZWNvbnRlbnQgPSAiPGgzPkZpbGUgRGlmZiBPdXRwdXQ8L2gzPjxocj5cbiI7ICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpPHYubGVuZ3RoIDsgaSsrKXsgICAgCisgICAgICAgICAgICBTdHJpbmcgZmlsZWNvbnRlbnQgPSAiPGgzPkZpbGUgRGlmZiBPdXRwdXQ8L2gzPjxocj5cbiI7CisgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpPHYubGVuZ3RoIDsgaSsrKXsKICAgICAgICAgICAgICAgICBmb3IoaW50IGogPSAwOyBqPHZbaV0uc2l6ZSgpOyBqKyspewogICAgICAgICAgICAgICAgICAgICBmaWxlY29udGVudCArPSB2W2ldLmdldChqKSsiPGJyPlxuIjsKICAgICAgICAgICAgICAgICB9CkBAIC0yMjgsMTQgKzIyOCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGVhc2UgY2hlY2sgdGhlIGZpbGUgbmFtZSBhbmQgdHJ5IGFnYWluIik7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KXsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICB9ICAgICAgICAKKyAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBWZWN0b3IgZ2V0S2V5TGlzdChIYXNodGFibGVbXSBoYXNoZXMpewogICAgICAgICBpbnQgaGFzaHRhYmxlcyA9IGhhc2hlcy5sZW5ndGg7CiAgICAgICAgIFZlY3RvciBhbGxrZXlzPSBuZXcgVmVjdG9yKCk7CiAgICAgICAgIFZlY3RvcltdIGhhc2hWZWNzID0gbmV3IFZlY3RvcltoYXNodGFibGVzXTsKLSAgICAgICAgZm9yKGludCBpPTA7IGk8aGFzaHRhYmxlczsgaSsrKXsgICAgICAgICAgICAKKyAgICAgICAgZm9yKGludCBpPTA7IGk8aGFzaHRhYmxlczsgaSsrKXsKICAgICAgICAgICAgIGhhc2hWZWNzW2ldID0gbmV3IFZlY3RvcigoQ29sbGVjdGlvbiloYXNoZXNbaV0ua2V5U2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGFsbGtleXMgPSBnZXRVbmlvbihoYXNoVmVjcyk7CkBAIC0yNjAsNyArMjYwLDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidG90YWwgaGFzaHRhYmxlcyB0byBkaWZmOiIraGFzaHRhYmxlcyk7CiAgICAgICAgIH0KICAgICAgICAgaW50IGJpZ0hhc2ggPSAwOyAvLyB0YWtlIHRoZSBmaXJzdCBoYXNodGFibGUgYXMgdGhlIGdvbGRlbiBmaWxlLgotICAgICAgICAvKkdldCBhIGxpc3Qgb2YgbW9zdCBrZXlzKi8gCisgICAgICAgIC8qR2V0IGEgbGlzdCBvZiBtb3N0IGtleXMqLwogICAgICAgICBWZWN0b3Iga2V5bGlzdCA9IG5ldyBWZWN0b3IoKTsKICAgICAgICAga2V5bGlzdCA9IGdldEtleUxpc3QoaGFzaGVzKTsKICAgICAgICAgLypTdGFydCBjb21wYXJpbmcgYWxsIG90aGVyIGhhc2h0YWJsZSBlbGVtZW50cyB0byB0aGlzIGdvbGRlbiBsaXN0IG9mIHRlc3RjYXNlcyovCkBAIC0yNjksNyArMjY5LDcgQEAKICAgICAgICAgaWYoZGVidWcpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUb3RhbCBudW1iZXIgb2YgdGVzdGNhc2VzIGdhdGhlcmVkOiAiK3RvdGFsa2V5cyk7CiAgICAgICAgIH0KLSAgICAgICAgZm9yKGludCBrZXlubz0wOyBrZXlubzx0b3RhbGtleXM7IGtleW5vKyspeyAKKyAgICAgICAgZm9yKGludCBrZXlubz0wOyBrZXlubzx0b3RhbGtleXM7IGtleW5vKyspewogICAgICAgICAgICAgU3RyaW5nIGtleU9iaiA9IChTdHJpbmcpa2V5bGlzdC5nZXQoa2V5bm8pOwogICAgICAgICAgICAgT2JqZWN0IHZhbCA9IG51bGw7CiAgICAgICAgICAgICBPYmplY3QgYmlnSGFzaFZhbCA9IG51bGw7CkBAIC0yNzcsOCArMjc3LDggQEAKICAgICAgICAgICAgIGlmKGRlYnVnKXsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNoZWNraW5nIG91dCBrZXk6IitrZXlPYmopOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaTxoYXNodGFibGVzIDsgaSsrKXsgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZihpPT1iaWdIYXNoKXsgCisgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpPGhhc2h0YWJsZXMgOyBpKyspeworICAgICAgICAgICAgICAgIGlmKGk9PWJpZ0hhc2gpewogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8ga2V5IGV4aXN0cwpAQCAtMjg5LDEwICsyODksMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2V5IGV4aXN0cyBidXQgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGl0IGludG8gYm90aCB0aGUgdmVjdG9ycywgaWYgbm90IGFscmVhZHkgdGhlcmUuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBpdCBpbnRvIGJvdGggdGhlIHZlY3RvcnMsIGlmIG5vdCBhbHJlYWR5IHRoZXJlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkaWZmT2JqID0gIjxmb250IGNvbG9yPWJsdWU+IitrZXlPYmorCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaGFzIGFuIGluY29uc2lzdGVudCBzdGF0dXM6IisoU3RyaW5nKXZhbCsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjwvZm9udD4iOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjwvZm9udD4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBiaWdkaWZmT2JqID0gICI8Zm9udCBjb2xvcj1ibHVlPiIra2V5T2JqKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGhhcyBhbiBpbmNvbnNpc3RlbnQgc3RhdHVzOiIrKFN0cmluZyliaWdIYXNoVmFsKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPC9mb250PiI7CkBAIC0zMDIsMTAgKzMwMiwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFmaWxlRGlmZnNbYmlnSGFzaF0uY29udGFpbnMoYmlnZGlmZk9iaikpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlRGlmZnNbYmlnSGFzaF0uYWRkKGJpZ2RpZmZPYmopOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gICAKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtleSBkb2Vzbid0IGV4aXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKmFkZCBpdCBpbnRvIHRoZSB2ZWN0b3IgZm9yIHNtYWxsZXIgdGFibGVzLCBpZiBub3QgYWxyZWFkeSB0aGVyZS4qLyAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLyphZGQgaXQgaW50byB0aGUgdmVjdG9yIGZvciBzbWFsbGVyIHRhYmxlcywgaWYgbm90IGFscmVhZHkgdGhlcmUuKi8KICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkaWZmT2JqID0gICI8Zm9udCBjb2xvcj1yZWQ+IitrZXlPYmorCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0ZXN0Y2FzZSBpcyBtaXNzaW5nIDwvZm9udD4iOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWZpbGVEaWZmc1tpXS5jb250YWlucyhkaWZmT2JqKSl7CkBAIC0zMTksMTMgKzMxOSwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIiB0ZXN0Y2FzZSBpcyBtaXNzaW5nIDwvZm9udD4iOwogICAgICAgICAgICAgICAgICAgICBpZighZmlsZURpZmZzW2JpZ0hhc2hdLmNvbnRhaW5zKGJpZ2RpZmZPYmopKXsKICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVEaWZmc1tiaWdIYXNoXS5hZGQoYmlnZGlmZk9iaik7Ci0gICAgICAgICAgICAgICAgICAgIH0vLyBlbmQgbWlzc2luZy1rZXkgaWYgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgfS8vIGVuZCBtaXNzaW5nLWtleSBpZgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gLy8gZW5kIGZvci1sb29wIGZvciBnb2luZyB0aHJvdWdoIHRoZSBoYXNodGFibGUgYXJyYXkKICAgICAgICAgfSAvLyBlbmQgZm9yLWxvb3AgZm9yIGtleXMgaW4gdGhlIGJpZ0hhc2ggaGFzaHRhYmxlCi0gICAgfSAvLyBlbmQgZGlmZi1oYXNoIG1ldGhvZCAgICAgICAgICAgICAgCisgICAgfSAvLyBlbmQgZGlmZi1oYXNoIG1ldGhvZAogCi0gICAgcHVibGljIHZvaWQgdXNhZ2UoKXsgICAgCisgICAgcHVibGljIHZvaWQgdXNhZ2UoKXsKICAgICAgICAgU3RyaW5nIHVzYWdlU3RyID0gIlVzYWdlOlxuIGphdmEgUGFyc2VNTCA8eG1sX2ZpbGVfMT4gPHhtbF9maWxlXzI+IDx4bWxfZmlsZV8zPi4uLiIrCiAgICAgICAgICAgICAiXG5cdFRoaXMgVXRpbGl0eSB3aWxsIGxldCB5b3UgJ2RpZmYnIG11bHRpcGxlIHhtbCIrCiAgICAgICAgICAgICAiXG5cdCBmaWxlcyBhbmQgcHJvZHVjZSBhIGZpbGVEaWZmLmh0bWwgZmlsZSBpbiB0aGUgIisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvUmVwb3J0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvUmVwb3J0ZXIuamF2YQppbmRleCAzOThhMDdkLi5hN2FiOTU4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGVyL1JlcG9ydGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9SZXBvcnRlci5qYXZhCkBAIC0xNywxOCArMTcsMTggQEAKIHBhY2thZ2UgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlcjsKIAogLyoqCi0gKiBAQ2xhc3MgOiBSZXBvcnRlciAKKyAqIEBDbGFzcyA6IFJlcG9ydGVyCiAgICBARGVzY3JpcHRpb24gOiBNYWluIGNsYXNzIHVzZWQgZm9yIFVuaWZvcm0gcmVwb3J0aW5nIG9mIHJlc3VsdHMKICAgIEBBdXRob3IgOiBSYW1lc2ggTWFuZGF2YQotICAgQExhc3QgTW9kaWZpZWQgOiBJbml0aWFsIENyZWF0aW9uIGJ5IFJhbWVzaCBNYW5kYXZhIGFmdGVyIHRha2luZyBpbnB1dCBmcm9tIAotCUplYW5mcmFuY29pcyBhbmQgb3RoZXIgVGVhbSBtZW1iZXJzCi0gICBATGFzdCBNb2RpZmllZCA6IEJ5IFJhbWVzaCBvbiAxLzIwLzIwMDIgLCBBZGRlZCBjb2RlIHRvIHVzZSBuZXcgdGVzdElkVmVjdG9yIGFuZCAKLQkJdGVzdENhc2VJZFZlY3RvciBmb3IgIHByZXNlcnZpbmcgb3JkZXIgb2YgZW50cnkgb2YgdGhlbSBhbmQgbm93IDx0ZXN0cz4KLQkJZWxlbWVudCBpcyBhZGRlZCBhcm91bmQgbXVsdGlwbGUgdGVzdHMKKyAgIEBMYXN0IE1vZGlmaWVkIDogSW5pdGlhbCBDcmVhdGlvbiBieSBSYW1lc2ggTWFuZGF2YSBhZnRlciB0YWtpbmcgaW5wdXQgZnJvbQorICAgIEplYW5mcmFuY29pcyBhbmQgb3RoZXIgVGVhbSBtZW1iZXJzCisgICBATGFzdCBNb2RpZmllZCA6IEJ5IFJhbWVzaCBvbiAxLzIwLzIwMDIgLCBBZGRlZCBjb2RlIHRvIHVzZSBuZXcgdGVzdElkVmVjdG9yIGFuZAorICAgICAgICB0ZXN0Q2FzZUlkVmVjdG9yIGZvciAgcHJlc2VydmluZyBvcmRlciBvZiBlbnRyeSBvZiB0aGVtIGFuZCBub3cgPHRlc3RzPgorICAgICAgICBlbGVtZW50IGlzIGFkZGVkIGFyb3VuZCBtdWx0aXBsZSB0ZXN0cwogICAgQExhc3QgTW9kaWZpZWQgOiBCeSBSYW1lc2ggb24gNC81LzIwMDIsIFRha2VuIGNhcmUgb2YgbWFjaGluZSBuYW1lIHVuYXZhaWxhYmlsaXR5Ci0JCXVuZGVyIEoyRUUuIEFuZCBhbGxvd2VkIGhhdmluZyAuIGluIHRoZSBwYXRoIG9mIHJlc3VsdCBmaWxlCisgICAgICAgIHVuZGVyIEoyRUUuIEFuZCBhbGxvd2VkIGhhdmluZyAuIGluIHRoZSBwYXRoIG9mIHJlc3VsdCBmaWxlCiAKLSAqICAgICAgICAgICAgICAKKyAqCiAgKi8KIAogCkBAIC01MywxMTEgKzUzLDExMSBAQAogICAgIHByaXZhdGUgU3RyaW5nIHJlc3VsdEZpbGU9ImRlZmF1bHQueG1sIjsKIAogICAgIHByaXZhdGUgRmlsZU91dHB1dFN0cmVhbSBmb3V0OwotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB3c19ob21lPSJzcWUtcGUiOyAgIAorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB3c19ob21lPSJzcWUtcGUiOwogICAgIHRyYW5zaWVudCBwdWJsaWMgUHJpbnRXcml0ZXIgb3V0ID0gbmV3IFByaW50V3JpdGVyKFN5c3RlbS5vdXQpOwogICAgIHByaXZhdGUgYm9vbGVhbiBoYXNCZWVuUHJpbnRlZCA9IGZhbHNlOwogICAgIC8qKiB0ZXN0U3VpdGVIYXNoIGlzIGEgSGFzaHRhYmxlIGhvbGRpbmcgaW5mbyBhYm91dCBkaWZmZXJlbnQgdGVzdHN1aXRlcy4gKi8KICAgICBwcml2YXRlIHN0YXRpYyBIYXNodGFibGUgdGVzdFN1aXRlSGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAKIAotICAgIC8qKiAKLQlUaGlzIG1ldGhvZCBpcyB1c2VkIGZvciBzZXR0aW5nIHRoZSBUZXN0U3VpdGUgSW5mbyAKKworICAgIC8qKgorICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgZm9yIHNldHRpbmcgdGhlIFRlc3RTdWl0ZSBJbmZvCiAgICAgICovCiAKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0U3VpdGUoIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjcmlwdGlvbiApCiAgICAgewogCi0JVGVzdFN1aXRlIG15VGVzdFN1aXRlID0gIChUZXN0U3VpdGUpdGVzdFN1aXRlSGFzaC5nZXQoIGlkLnRyaW0oKSApOyAKLQlpZiAoIG15VGVzdFN1aXRlID09IG51bGwgKQotCXsKLQkJbXlUZXN0U3VpdGUgPSBuZXcgVGVzdFN1aXRlKCBpZCwgbmFtZSxkZXNjcmlwdGlvbik7Ci0JCXRlc3RTdWl0ZUhhc2gucHV0KCBpZC50cmltKCksIG15VGVzdFN1aXRlICk7Ci0JfQorICAgIFRlc3RTdWl0ZSBteVRlc3RTdWl0ZSA9ICAoVGVzdFN1aXRlKXRlc3RTdWl0ZUhhc2guZ2V0KCBpZC50cmltKCkgKTsKKyAgICBpZiAoIG15VGVzdFN1aXRlID09IG51bGwgKQorICAgIHsKKyAgICAgICAgbXlUZXN0U3VpdGUgPSBuZXcgVGVzdFN1aXRlKCBpZCwgbmFtZSxkZXNjcmlwdGlvbik7CisgICAgICAgIHRlc3RTdWl0ZUhhc2gucHV0KCBpZC50cmltKCksIG15VGVzdFN1aXRlICk7CisgICAgfQogICAgIH0KIAotICAgIC8qKiAKLQlUaGlzIG1ldGhvZCBpcyB1c2VkIGZvciBzZXR0aW5nIHRoZSBUZXN0U3VpdGUgSW5mbyAKKyAgICAvKioKKyAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIGZvciBzZXR0aW5nIHRoZSBUZXN0U3VpdGUgSW5mbwogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RTdWl0ZSggU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkKICAgICB7Ci0JVGVzdFN1aXRlIG15VGVzdFN1aXRlID0gIChUZXN0U3VpdGUpdGVzdFN1aXRlSGFzaC5nZXQoIGlkLnRyaW0oKSApOyAKLQlpZiAoIG15VGVzdFN1aXRlID09IG51bGwgKQotCXsKLQkJbXlUZXN0U3VpdGUgPSBuZXcgVGVzdFN1aXRlKCBpZC50cmltKCksIG5hbWUpOwotCQl0ZXN0U3VpdGVIYXNoLnB1dCggaWQudHJpbSgpLCBteVRlc3RTdWl0ZSApOwotCX0KKyAgICBUZXN0U3VpdGUgbXlUZXN0U3VpdGUgPSAgKFRlc3RTdWl0ZSl0ZXN0U3VpdGVIYXNoLmdldCggaWQudHJpbSgpICk7CisgICAgaWYgKCBteVRlc3RTdWl0ZSA9PSBudWxsICkKKyAgICB7CisgICAgICAgIG15VGVzdFN1aXRlID0gbmV3IFRlc3RTdWl0ZSggaWQudHJpbSgpLCBuYW1lKTsKKyAgICAgICAgdGVzdFN1aXRlSGFzaC5wdXQoIGlkLnRyaW0oKSwgbXlUZXN0U3VpdGUgKTsKKyAgICB9CiAgICAgfQogCi0gICAgLyoqIAotCVRoaXMgbWV0aG9kIGlzIHVzZWQgZm9yIHNldHRpbmcgdGhlIFRlc3RTdWl0ZSBJbmZvIAorICAgIC8qKgorICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgZm9yIHNldHRpbmcgdGhlIFRlc3RTdWl0ZSBJbmZvCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdFN1aXRlKCBTdHJpbmcgaWQpCiAgICAgewotCVN5c3RlbS5lcnIucHJpbnRsbigic2V0VGVzdFN1aXRlIHdpdGggaWQgLT4gIiArIGlkICk7Ci0JVGVzdFN1aXRlIG15VGVzdFN1aXRlID0gIChUZXN0U3VpdGUpdGVzdFN1aXRlSGFzaC5nZXQoIGlkLnRyaW0oKSApOyAKLQlpZiAoIG15VGVzdFN1aXRlID09IG51bGwgKQotCXsKLQkJbXlUZXN0U3VpdGUgPSBuZXcgVGVzdFN1aXRlKCBpZC50cmltKCkpOwotCQl0ZXN0U3VpdGVIYXNoLnB1dCggaWQudHJpbSgpLCBteVRlc3RTdWl0ZSApOwotCX0KKyAgICBTeXN0ZW0uZXJyLnByaW50bG4oInNldFRlc3RTdWl0ZSB3aXRoIGlkIC0+ICIgKyBpZCApOworICAgIFRlc3RTdWl0ZSBteVRlc3RTdWl0ZSA9ICAoVGVzdFN1aXRlKXRlc3RTdWl0ZUhhc2guZ2V0KCBpZC50cmltKCkgKTsKKyAgICBpZiAoIG15VGVzdFN1aXRlID09IG51bGwgKQorICAgIHsKKyAgICAgICAgbXlUZXN0U3VpdGUgPSBuZXcgVGVzdFN1aXRlKCBpZC50cmltKCkpOworICAgICAgICB0ZXN0U3VpdGVIYXNoLnB1dCggaWQudHJpbSgpLCBteVRlc3RTdWl0ZSApOworICAgIH0KICAgICB9CiAKLSAgICAvKiogCi0JQWZ0ZXIgc2V0dGluZyBUZXN0IFN1aXRlIGluZm8uIHN1aW5nIHNldFRlc3RTdWl0ZSwgV2UgbmVlZCB0byB1c2UgdGhpcyBhZGRUZXN0IG1ldGhvZCAKKyAgICAvKioKKyAgICBBZnRlciBzZXR0aW5nIFRlc3QgU3VpdGUgaW5mby4gc3Vpbmcgc2V0VGVzdFN1aXRlLCBXZSBuZWVkIHRvIHVzZSB0aGlzIGFkZFRlc3QgbWV0aG9kCiAgICAgICBmb3IgYWRkaW5nIGluZm9ybWF0aW9uIGFib3V0IHBhcnRpY3VsYXIgVGVzdC4gV2UgbmVlZCB0byAgcGFzcyBib3RoIFRlc3RTdWl0ZUlkIGFuZAogICAgICAgVGVzdElkICBhbG9uZyB3aXRoIG90aGUgaW5mbyBvZiBUZXN0CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYWRkVGVzdCggU3RyaW5nIHRlc3RTdWl0ZUlkLCAgU3RyaW5nIHRlc3RJZCwgU3RyaW5nIHRlc3ROYW1lLCBTdHJpbmcgdGVzdERlc2NyaXB0aW9uICkKICAgICB7Ci0JVGVzdFN1aXRlIG15VGVzdFN1aXRlID0gKFRlc3RTdWl0ZSl0ZXN0U3VpdGVIYXNoLmdldCggdGVzdFN1aXRlSWQudHJpbSgpICk7Ci0JaWYgKCBteVRlc3RTdWl0ZT09IG51bGwgKQotCXsKLQkJU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjphZGRUZXN0IG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgc2V0VGVzdFN1aXRlLiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOwotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkdpdmVuIFRlc3RTdWl0ZSBJZCAtPiAiICsgdGVzdFN1aXRlSWQudHJpbSgpICk7Ci0JCXJldHVybjsKLQl9Ci0KLQlUZXN0IG15VGVzdCA9IG5ldyBUZXN0KCB0ZXN0SWQsIHRlc3ROYW1lLCB0ZXN0RGVzY3JpcHRpb24gKTsKLQlteVRlc3RTdWl0ZS5hZGRUZXN0KCBteVRlc3QgKTsKKyAgICBUZXN0U3VpdGUgbXlUZXN0U3VpdGUgPSAoVGVzdFN1aXRlKXRlc3RTdWl0ZUhhc2guZ2V0KCB0ZXN0U3VpdGVJZC50cmltKCkgKTsKKyAgICBpZiAoIG15VGVzdFN1aXRlPT0gbnVsbCApCisgICAgeworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOmFkZFRlc3QgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBzZXRUZXN0U3VpdGUuIFBFTkRJTkcgOiBTaGFsbCB3ZSB0aHJvdyBFeGNlcHRpb24/Iik7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR2l2ZW4gVGVzdFN1aXRlIElkIC0+ICIgKyB0ZXN0U3VpdGVJZC50cmltKCkgKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8qKiAKLQlBZnRlciBzZXR0aW5nIFRlc3QgU3VpdGUgaW5mby4gc3Vpbmcgc2V0VGVzdFN1aXRlLCBXZSBuZWVkIHRvIHVzZSB0aGlzIGFkZFRlc3QgbWV0aG9kIAorICAgIFRlc3QgbXlUZXN0ID0gbmV3IFRlc3QoIHRlc3RJZCwgdGVzdE5hbWUsIHRlc3REZXNjcmlwdGlvbiApOworICAgIG15VGVzdFN1aXRlLmFkZFRlc3QoIG15VGVzdCApOworICAgIH0KKworICAgIC8qKgorICAgIEFmdGVyIHNldHRpbmcgVGVzdCBTdWl0ZSBpbmZvLiBzdWluZyBzZXRUZXN0U3VpdGUsIFdlIG5lZWQgdG8gdXNlIHRoaXMgYWRkVGVzdCBtZXRob2QKICAgICAgIGZvciBhZGRpbmcgaW5mb3JtYXRpb24gYWJvdXQgcGFydGljdWxhciBUZXN0LiBXZSBuZWVkIHRvICBwYXNzIGJvdGggVGVzdFN1aXRlSWQgYW5kCiAgICAgICBUZXN0SWQgIGFsb25nIHdpdGggb3RoZSBpbmZvIG9mIFRlc3QKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhZGRUZXN0KCBTdHJpbmcgdGVzdFN1aXRlSWQsICBTdHJpbmcgdGVzdElkLCBTdHJpbmcgdGVzdE5hbWUgKQogICAgIHsKLQlUZXN0U3VpdGUgbXlUZXN0U3VpdGUgPSAoVGVzdFN1aXRlKXRlc3RTdWl0ZUhhc2guZ2V0KCB0ZXN0U3VpdGVJZC50cmltKCkgKTsKLQlpZiAoIG15VGVzdFN1aXRlPT0gbnVsbCApCi0JewotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOmFkZFRlc3QgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBzZXRUZXN0U3VpdGUuIFBFTkRJTkcgOiBTaGFsbCB3ZSB0aHJvdyBFeGNlcHRpb24/Iik7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbigiR2l2ZW4gVGVzdFN1aXRlIElkIC0+ICIgKyB0ZXN0U3VpdGVJZC50cmltKCkgKTsKLQkJcmV0dXJuOwotCX0KLQotCVRlc3QgbXlUZXN0ID0gbmV3IFRlc3QoIHRlc3RJZCwgdGVzdE5hbWUgKTsKLQlteVRlc3RTdWl0ZS5hZGRUZXN0KCBteVRlc3QgKTsKKyAgICBUZXN0U3VpdGUgbXlUZXN0U3VpdGUgPSAoVGVzdFN1aXRlKXRlc3RTdWl0ZUhhc2guZ2V0KCB0ZXN0U3VpdGVJZC50cmltKCkgKTsKKyAgICBpZiAoIG15VGVzdFN1aXRlPT0gbnVsbCApCisgICAgeworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOmFkZFRlc3QgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBzZXRUZXN0U3VpdGUuIFBFTkRJTkcgOiBTaGFsbCB3ZSB0aHJvdyBFeGNlcHRpb24/Iik7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR2l2ZW4gVGVzdFN1aXRlIElkIC0+ICIgKyB0ZXN0U3VpdGVJZC50cmltKCkgKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8qKiAKLQlBZnRlciB1c2luZyBzZXR0aGluZyBUZXN0IFN1aXRlIGluZm8uIFdlIG5lZWQgdG8gdXNlIHRoaXMgYWRkVGVzdCBtZXRob2QgCisgICAgVGVzdCBteVRlc3QgPSBuZXcgVGVzdCggdGVzdElkLCB0ZXN0TmFtZSApOworICAgIG15VGVzdFN1aXRlLmFkZFRlc3QoIG15VGVzdCApOworICAgIH0KKworICAgIC8qKgorICAgIEFmdGVyIHVzaW5nIHNldHRoaW5nIFRlc3QgU3VpdGUgaW5mby4gV2UgbmVlZCB0byB1c2UgdGhpcyBhZGRUZXN0IG1ldGhvZAogICAgICAgZm9yIGFkZGluZyBpbmZvcm1hdGlvbiBhYm91dCBwYXJ0aWN1bGFyIFRlc3QuIFdlIG5lZWQgdG8gIHBhc3MgYm90aCBUZXN0U3VpdGVJZCBhbmQKLSAgICAgIFRlc3RJZCAgCisgICAgICBUZXN0SWQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhZGRUZXN0KCBTdHJpbmcgdGVzdFN1aXRlSWQsICBTdHJpbmcgdGVzdElkICkKICAgICB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJhZGRUZXN0IHdpdGggdGVzdFN1aXRlSWQ6OiB0ZXN0SWQgLT4gIiArIHRlc3RTdWl0ZUlkICsgIjo6IiArIHRlc3RJZCApOwotCVRlc3RTdWl0ZSBteVRlc3RTdWl0ZSA9IChUZXN0U3VpdGUpdGVzdFN1aXRlSGFzaC5nZXQoIHRlc3RTdWl0ZUlkLnRyaW0oKSApOwotCWlmICggbXlUZXN0U3VpdGU9PSBudWxsICkKLQl7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6YWRkVGVzdCBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IHNldFRlc3RTdWl0ZS4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKLQkJU3lzdGVtLmVyci5wcmludGxuKCJHaXZlbiBUZXN0U3VpdGUgSWQgLT4gIiArIHRlc3RTdWl0ZUlkLnRyaW0oKSApOwotCQlyZXR1cm47Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYWRkVGVzdCB3aXRoIHRlc3RTdWl0ZUlkOjogdGVzdElkIC0+ICIgKyB0ZXN0U3VpdGVJZCArICI6OiIgKyB0ZXN0SWQgKTsKKyAgICBUZXN0U3VpdGUgbXlUZXN0U3VpdGUgPSAoVGVzdFN1aXRlKXRlc3RTdWl0ZUhhc2guZ2V0KCB0ZXN0U3VpdGVJZC50cmltKCkgKTsKKyAgICBpZiAoIG15VGVzdFN1aXRlPT0gbnVsbCApCisgICAgeworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOmFkZFRlc3QgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBzZXRUZXN0U3VpdGUuIFBFTkRJTkcgOiBTaGFsbCB3ZSB0aHJvdyBFeGNlcHRpb24/Iik7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR2l2ZW4gVGVzdFN1aXRlIElkIC0+ICIgKyB0ZXN0U3VpdGVJZC50cmltKCkgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotCVRlc3QgbXlUZXN0ID0gbmV3IFRlc3QoIHRlc3RJZCApOwotCW15VGVzdFN1aXRlLmFkZFRlc3QoIG15VGVzdCApOworICAgIFRlc3QgbXlUZXN0ID0gbmV3IFRlc3QoIHRlc3RJZCApOworICAgIG15VGVzdFN1aXRlLmFkZFRlc3QoIG15VGVzdCApOwogICAgIH0KIAogCkBAIC0xOTIsMTM0ICsxOTIsMTM0IEBACiAKICAgICAgfQogCi0gICAgLyoqIAotCUFmdGVyIGFkZGluZyBhIFRlc3QgdXNpbmcgYWRkVGVzdCAsIFdlIG5lZWQgdG8gdXNlIHRoaXMgc2V0VGVzdFN0YXR1cyBtZXRob2QgCisgICAgLyoqCisgICAgQWZ0ZXIgYWRkaW5nIGEgVGVzdCB1c2luZyBhZGRUZXN0ICwgV2UgbmVlZCB0byB1c2UgdGhpcyBzZXRUZXN0U3RhdHVzIG1ldGhvZAogICAgICAgZm9yIHNldHRpbmcgVGVzdCBzdGF0dXMocGFzcy9mYWlsKSBpbmZvcm1hdGlvbiBhYm91dCBwYXJ0aWN1bGFyIFRlc3QuIFdlIG5lZWQgdG8gIHBhc3MgYm90aCBUZXN0U3VpdGVJZCBhbmQgVGVzdElkICBhbG9uZyB3aXRoIHN0YXR1cyBpbmZvcm1hdGlvbi4gVGhpcyBpcyBvcHRpb25hbCBhcyBpbiBzb21lIGNhc2UKICAgICAgb25seSBUZXN0Q2FzZXMgd2lsbCBoYXZlIHN0YXR1cwogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RTdGF0dXMgKCBTdHJpbmcgdGVzdFN1aXRlSWQsIFN0cmluZyB0ZXN0SWQsIFN0cmluZyBzdGF0dXMsIFN0cmluZyBzdGF0dXNEZXNjcmlwdGlvbiApCiAgICAgewotCVRlc3RTdWl0ZSBteVRlc3RTdWl0ZSA9IChUZXN0U3VpdGUpdGVzdFN1aXRlSGFzaC5nZXQoIHRlc3RTdWl0ZUlkLnRyaW0oKSApOworICAgIFRlc3RTdWl0ZSBteVRlc3RTdWl0ZSA9IChUZXN0U3VpdGUpdGVzdFN1aXRlSGFzaC5nZXQoIHRlc3RTdWl0ZUlkLnRyaW0oKSApOwogCi0JCi0JaWYgKCBteVRlc3RTdWl0ZT09IG51bGwgKQotCXsKLQkJU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjpzZXRUZXN0U3RhdHVzIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgc2V0VGVzdFN1aXRlLiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOwotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkdpdmVuIFRlc3RTdWl0ZSBJZCAtPiAiICsgdGVzdFN1aXRlSWQudHJpbSgpICk7Ci0JCXJldHVybjsKLQl9CiAKLQlUZXN0IG15VGVzdCA9IChUZXN0KW15VGVzdFN1aXRlLmdldFRlc3RIYXNoKCkuZ2V0KCB0ZXN0SWQudHJpbSgpICk7Ci0JaWYgKCBteVRlc3QgPT0gbnVsbCApCi0JewotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOnNldFRlc3RTdGF0dXMgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBhZGRUZXN0LiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOwotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkdpdmVuIFRlc3RTdWl0ZSBJZDo6VGVzdCBJZCAtPiAiICsgdGVzdFN1aXRlSWQudHJpbSgpICsgIjo6IiArIHRlc3RJZC50cmltKCkgKTsKLQkJcmV0dXJuOwotCX0KLQlteVRlc3Quc2V0U3RhdHVzKCBzdGF0dXMpOwotCW15VGVzdC5zZXRTdGF0dXNEZXNjcmlwdGlvbiggc3RhdHVzRGVzY3JpcHRpb24pOworICAgIGlmICggbXlUZXN0U3VpdGU9PSBudWxsICkKKyAgICB7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6c2V0VGVzdFN0YXR1cyBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IHNldFRlc3RTdWl0ZS4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHaXZlbiBUZXN0U3VpdGUgSWQgLT4gIiArIHRlc3RTdWl0ZUlkLnRyaW0oKSApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVGVzdCBteVRlc3QgPSAoVGVzdClteVRlc3RTdWl0ZS5nZXRUZXN0SGFzaCgpLmdldCggdGVzdElkLnRyaW0oKSApOworICAgIGlmICggbXlUZXN0ID09IG51bGwgKQorICAgIHsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjpzZXRUZXN0U3RhdHVzIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgYWRkVGVzdC4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHaXZlbiBUZXN0U3VpdGUgSWQ6OlRlc3QgSWQgLT4gIiArIHRlc3RTdWl0ZUlkLnRyaW0oKSArICI6OiIgKyB0ZXN0SWQudHJpbSgpICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbXlUZXN0LnNldFN0YXR1cyggc3RhdHVzKTsKKyAgICBteVRlc3Quc2V0U3RhdHVzRGVzY3JpcHRpb24oIHN0YXR1c0Rlc2NyaXB0aW9uKTsKIAogICAgICB9CiAKLSAgICAvKiogCi0JQWZ0ZXIgYWRkaW5nIGEgVGVzdCB1c2luZyBhZGRUZXN0ICwgV2UgbmVlZCB0byB1c2UgdGhpcyBzZXRUZXN0U3RhdHVzIG1ldGhvZCAKKyAgICAvKioKKyAgICBBZnRlciBhZGRpbmcgYSBUZXN0IHVzaW5nIGFkZFRlc3QgLCBXZSBuZWVkIHRvIHVzZSB0aGlzIHNldFRlc3RTdGF0dXMgbWV0aG9kCiAgICAgICBmb3Igc2V0dGluZyBUZXN0IHN0YXR1cyhwYXNzL2ZhaWwpIGluZm9ybWF0aW9uIGFib3V0IHBhcnRpY3VsYXIgVGVzdC4gV2UgbmVlZCB0byAgcGFzcyBib3RoIFRlc3RTdWl0ZUlkIGFuZCBUZXN0SWQgIGFsb25nIHdpdGggc3RhdHVzIGluZm9ybWF0aW9uLiBUaGlzIGlzIG9wdGlvbmFsIGFzIGluIHNvbWUgY2FzZQogICAgICBvbmx5IFRlc3RDYXNlcyB3aWxsIGhhdmUgc3RhdHVzCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdFN0YXR1cyAoIFN0cmluZyB0ZXN0U3VpdGVJZCwgU3RyaW5nIHRlc3RJZCwgU3RyaW5nIHN0YXR1cyApCiAgICAgewotCVN5c3RlbS5vdXQucHJpbnRsbigic2V0VGVzdFN0YXR1cyB0ZXN0U3VpdGVJZDo6dGVzdElkOjpzdGF0dXMgLT4gIiArIHRlc3RTdWl0ZUlkICsgIjo6IiArIHRlc3RJZCArICI6OiIgKyBzdGF0dXMgKTsKLQlUZXN0U3VpdGUgbXlUZXN0U3VpdGUgPSAoVGVzdFN1aXRlKXRlc3RTdWl0ZUhhc2guZ2V0KCB0ZXN0U3VpdGVJZC50cmltKCkgKTsKLQlpZiAoIG15VGVzdFN1aXRlPT0gbnVsbCApCi0JewotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOnNldFRlc3RTdGF0dXMgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBzZXRUZXN0U3VpdGUuIFBFTkRJTkcgOiBTaGFsbCB3ZSB0aHJvdyBFeGNlcHRpb24/Iik7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbigiR2l2ZW4gVGVzdFN1aXRlIElkIC0+ICIgKyB0ZXN0U3VpdGVJZC50cmltKCkgKTsKLQkJcmV0dXJuOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNldFRlc3RTdGF0dXMgdGVzdFN1aXRlSWQ6OnRlc3RJZDo6c3RhdHVzIC0+ICIgKyB0ZXN0U3VpdGVJZCArICI6OiIgKyB0ZXN0SWQgKyAiOjoiICsgc3RhdHVzICk7CisgICAgVGVzdFN1aXRlIG15VGVzdFN1aXRlID0gKFRlc3RTdWl0ZSl0ZXN0U3VpdGVIYXNoLmdldCggdGVzdFN1aXRlSWQudHJpbSgpICk7CisgICAgaWYgKCBteVRlc3RTdWl0ZT09IG51bGwgKQorICAgIHsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjpzZXRUZXN0U3RhdHVzIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgc2V0VGVzdFN1aXRlLiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdpdmVuIFRlc3RTdWl0ZSBJZCAtPiAiICsgdGVzdFN1aXRlSWQudHJpbSgpICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLQlUZXN0IG15VGVzdCA9KFRlc3QpIG15VGVzdFN1aXRlLmdldFRlc3RIYXNoKCkuZ2V0KCB0ZXN0SWQudHJpbSgpICk7Ci0JaWYgKCBteVRlc3QgPT0gbnVsbCApCi0JewotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOnNldFRlc3RTdGF0dXMgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBhZGRUZXN0LiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOwotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkdpdmVuIFRlc3RTdWl0ZSBJZDo6VGVzdCBJZCAtPiAiICsgdGVzdFN1aXRlSWQudHJpbSgpICsgIjo6IiArIHRlc3RJZC50cmltKCkgKTsKLQkJcmV0dXJuOwotCX0KLQlteVRlc3Quc2V0U3RhdHVzKCBzdGF0dXMpOworICAgIFRlc3QgbXlUZXN0ID0oVGVzdCkgbXlUZXN0U3VpdGUuZ2V0VGVzdEhhc2goKS5nZXQoIHRlc3RJZC50cmltKCkgKTsKKyAgICBpZiAoIG15VGVzdCA9PSBudWxsICkKKyAgICB7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6c2V0VGVzdFN0YXR1cyBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IGFkZFRlc3QuIFBFTkRJTkcgOiBTaGFsbCB3ZSB0aHJvdyBFeGNlcHRpb24/Iik7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR2l2ZW4gVGVzdFN1aXRlIElkOjpUZXN0IElkIC0+ICIgKyB0ZXN0U3VpdGVJZC50cmltKCkgKyAiOjoiICsgdGVzdElkLnRyaW0oKSApOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG15VGVzdC5zZXRTdGF0dXMoIHN0YXR1cyk7CiAgICAgIH0KIAotICAgIC8qKiAKLQlBZnRlciBhZGRpbmcgYSBUZXN0IHVzaW5nIGFkZFRlc3QsIFdlIG5lZWQgdG8gdXNlIHRoaXMgYWRkVGVzdENhc2UgbWV0aG9kIAorICAgIC8qKgorICAgIEFmdGVyIGFkZGluZyBhIFRlc3QgdXNpbmcgYWRkVGVzdCwgV2UgbmVlZCB0byB1c2UgdGhpcyBhZGRUZXN0Q2FzZSBtZXRob2QKICAgICAgIGZvciBhZGRpbmcgaW5mb3JtYXRpb24gYWJvdXQgcGFydGljdWxhciBUZXN0Q2FzZSBjb3JyZXNwb25kaW5nIHRvIHRoYXQgVGVzdC4gV2UgbmVlZCB0byAgcGFzcyBUZXN0U3VpdGVJZCwgVGVzdElkIGFuZCBUZXN0Q2FzZUlkIGFsb25nIHdpdGggb3RoZSBpbmZvIG9mIFRlc3RDYXNlCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYWRkVGVzdENhc2UoIFN0cmluZyB0ZXN0U3VpdGVJZCwgIFN0cmluZyB0ZXN0SWQgLCBTdHJpbmcgdGVzdENhc2VJZCkKICAgICB7Ci0JVGVzdFN1aXRlIG15VGVzdFN1aXRlID0gKFRlc3RTdWl0ZSl0ZXN0U3VpdGVIYXNoLmdldCggdGVzdFN1aXRlSWQudHJpbSgpICk7Ci0JaWYgKCBteVRlc3RTdWl0ZT09IG51bGwgKQotCXsKLQkJU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjphZGRUZXN0Q2FzZSBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IHNldFRlc3RTdWl0ZS4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKLQkJU3lzdGVtLmVyci5wcmludGxuKCJHaXZlbiBUZXN0U3VpdGUgSWQgLT4gIiArIHRlc3RTdWl0ZUlkLnRyaW0oKSApOwotCQlyZXR1cm47Ci0JfQotCVRlc3QgbXlUZXN0ID0gKFRlc3QpbXlUZXN0U3VpdGUuZ2V0VGVzdEhhc2goKS5nZXQoIHRlc3RJZC50cmltKCkgKTsKLQlpZiAoIG15VGVzdCA9PSBudWxsICkKLQl7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6YWRkVGVzdENhc2UgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBhZGRUZXN0LiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOwotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkdpdmVuIFRlc3RTdWl0ZSBJZDo6VGVzdCBJZCAtPiAiICsgdGVzdFN1aXRlSWQudHJpbSgpICsgIjo6IiArIHRlc3RJZC50cmltKCkgKTsKLQkJcmV0dXJuOwotCX0KLQotCVRlc3RDYXNlIG15VGVzdENhc2UgPSBuZXcgVGVzdENhc2UoIHRlc3RDYXNlSWQudHJpbSgpICk7Ci0JbXlUZXN0LmFkZFRlc3RDYXNlICggbXlUZXN0Q2FzZSApOworICAgIFRlc3RTdWl0ZSBteVRlc3RTdWl0ZSA9IChUZXN0U3VpdGUpdGVzdFN1aXRlSGFzaC5nZXQoIHRlc3RTdWl0ZUlkLnRyaW0oKSApOworICAgIGlmICggbXlUZXN0U3VpdGU9PSBudWxsICkKKyAgICB7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6YWRkVGVzdENhc2UgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBzZXRUZXN0U3VpdGUuIFBFTkRJTkcgOiBTaGFsbCB3ZSB0aHJvdyBFeGNlcHRpb24/Iik7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR2l2ZW4gVGVzdFN1aXRlIElkIC0+ICIgKyB0ZXN0U3VpdGVJZC50cmltKCkgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBUZXN0IG15VGVzdCA9IChUZXN0KW15VGVzdFN1aXRlLmdldFRlc3RIYXNoKCkuZ2V0KCB0ZXN0SWQudHJpbSgpICk7CisgICAgaWYgKCBteVRlc3QgPT0gbnVsbCApCisgICAgeworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOmFkZFRlc3RDYXNlIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgYWRkVGVzdC4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHaXZlbiBUZXN0U3VpdGUgSWQ6OlRlc3QgSWQgLT4gIiArIHRlc3RTdWl0ZUlkLnRyaW0oKSArICI6OiIgKyB0ZXN0SWQudHJpbSgpICk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvKiogCi0JQWZ0ZXIgYWRkaW5nIGEgVGVzdCB1c2luZyBhZGRUZXN0LCBXZSBuZWVkIHRvIHVzZSB0aGlzIGFkZFRlc3RDYXNlIG1ldGhvZCAKKyAgICBUZXN0Q2FzZSBteVRlc3RDYXNlID0gbmV3IFRlc3RDYXNlKCB0ZXN0Q2FzZUlkLnRyaW0oKSApOworICAgIG15VGVzdC5hZGRUZXN0Q2FzZSAoIG15VGVzdENhc2UgKTsKKyAgICB9CisKKyAgICAvKioKKyAgICBBZnRlciBhZGRpbmcgYSBUZXN0IHVzaW5nIGFkZFRlc3QsIFdlIG5lZWQgdG8gdXNlIHRoaXMgYWRkVGVzdENhc2UgbWV0aG9kCiAgICAgICBmb3IgYWRkaW5nIGluZm9ybWF0aW9uIGFib3V0IHBhcnRpY3VsYXIgVGVzdENhc2UgY29ycmVzcG9uZGluZyB0byB0aGF0IFRlc3QuIFdlIG5lZWQgdG8gIHBhc3MgVGVzdFN1aXRlSWQsIFRlc3RJZCBhbmQgVGVzdENhc2VJZCBhbG9uZyB3aXRoIG90aGUgaW5mbyBvZiBUZXN0Q2FzZQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGFkZFRlc3RDYXNlKCBTdHJpbmcgdGVzdFN1aXRlSWQsICBTdHJpbmcgdGVzdElkICwgU3RyaW5nIHRlc3RDYXNlSWQsIFN0cmluZyB0ZXN0Q2FzZU5hbWUgKQogICAgIHsKLQlUZXN0U3VpdGUgbXlUZXN0U3VpdGUgPSAoVGVzdFN1aXRlKXRlc3RTdWl0ZUhhc2guZ2V0KCB0ZXN0U3VpdGVJZC50cmltKCkgKTsKLQlpZiAoIG15VGVzdFN1aXRlPT0gbnVsbCApCi0JewotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOmFkZFRlc3RDYXNlIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgc2V0VGVzdFN1aXRlLiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOwotCQlyZXR1cm47Ci0JfQotCVRlc3QgbXlUZXN0ID0gKFRlc3QpbXlUZXN0U3VpdGUuZ2V0VGVzdEhhc2goKS5nZXQoIHRlc3RJZC50cmltKCkgKTsKLQlpZiAoIG15VGVzdCA9PSBudWxsICkKLQl7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6YWRkVGVzdENhc2UgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBhZGRUZXN0LiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOwotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkdpdmVuIFRlc3RTdWl0ZSBJZDo6VGVzdCBJZCAtPiAiICsgdGVzdFN1aXRlSWQudHJpbSgpICsgIjo6IiArIHRlc3RJZC50cmltKCkgKTsKLQkJcmV0dXJuOwotCX0KLQotCVRlc3RDYXNlIG15VGVzdENhc2UgPSBuZXcgVGVzdENhc2UoIHRlc3RDYXNlSWQudHJpbSgpLCB0ZXN0Q2FzZU5hbWUgKTsKLQlteVRlc3QuYWRkVGVzdENhc2UgKCBteVRlc3RDYXNlICk7CisgICAgVGVzdFN1aXRlIG15VGVzdFN1aXRlID0gKFRlc3RTdWl0ZSl0ZXN0U3VpdGVIYXNoLmdldCggdGVzdFN1aXRlSWQudHJpbSgpICk7CisgICAgaWYgKCBteVRlc3RTdWl0ZT09IG51bGwgKQorICAgIHsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjphZGRUZXN0Q2FzZSBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IHNldFRlc3RTdWl0ZS4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBUZXN0IG15VGVzdCA9IChUZXN0KW15VGVzdFN1aXRlLmdldFRlc3RIYXNoKCkuZ2V0KCB0ZXN0SWQudHJpbSgpICk7CisgICAgaWYgKCBteVRlc3QgPT0gbnVsbCApCisgICAgeworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOmFkZFRlc3RDYXNlIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgYWRkVGVzdC4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHaXZlbiBUZXN0U3VpdGUgSWQ6OlRlc3QgSWQgLT4gIiArIHRlc3RTdWl0ZUlkLnRyaW0oKSArICI6OiIgKyB0ZXN0SWQudHJpbSgpICk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvKiogCi0JQWZ0ZXIgYWRkaW5nIGEgVGVzdCB1c2luZyBhZGRUZXN0LCBXZSBuZWVkIHRvIHVzZSB0aGlzIGFkZFRlc3RDYXNlIG1ldGhvZCAKKyAgICBUZXN0Q2FzZSBteVRlc3RDYXNlID0gbmV3IFRlc3RDYXNlKCB0ZXN0Q2FzZUlkLnRyaW0oKSwgdGVzdENhc2VOYW1lICk7CisgICAgbXlUZXN0LmFkZFRlc3RDYXNlICggbXlUZXN0Q2FzZSApOworICAgIH0KKworICAgIC8qKgorICAgIEFmdGVyIGFkZGluZyBhIFRlc3QgdXNpbmcgYWRkVGVzdCwgV2UgbmVlZCB0byB1c2UgdGhpcyBhZGRUZXN0Q2FzZSBtZXRob2QKICAgICAgIGZvciBhZGRpbmcgaW5mb3JtYXRpb24gYWJvdXQgcGFydGljdWxhciBUZXN0Q2FzZSBjb3JyZXNwb25kaW5nIHRvIHRoYXQgVGVzdC4gV2UgbmVlZCB0byAgcGFzcyBUZXN0U3VpdGVJZCwgVGVzdElkIGFuZCBUZXN0Q2FzZUlkIGFsb25nIHdpdGggb3RoZSBpbmZvIG9mIFRlc3RDYXNlCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYWRkVGVzdENhc2UoIFN0cmluZyB0ZXN0U3VpdGVJZCwgIFN0cmluZyB0ZXN0SWQgLCBTdHJpbmcgdGVzdENhc2VJZCwgU3RyaW5nIHRlc3RDYXNlTmFtZSAsIFN0cmluZyB0ZXN0Q2FzZURlc2NyaXB0aW9uICkKICAgICB7Ci0JVGVzdFN1aXRlIG15VGVzdFN1aXRlID0gKFRlc3RTdWl0ZSl0ZXN0U3VpdGVIYXNoLmdldCggdGVzdFN1aXRlSWQudHJpbSgpICk7Ci0JaWYgKCBteVRlc3RTdWl0ZT09IG51bGwgKQotCXsKLQkJU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjphZGRUZXN0Q2FzZSBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IHNldFRlc3RTdWl0ZS4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKLQkJcmV0dXJuOwotCX0KLQlUZXN0IG15VGVzdCA9IChUZXN0KW15VGVzdFN1aXRlLmdldFRlc3RIYXNoKCkuZ2V0KCB0ZXN0SWQudHJpbSgpICk7Ci0JaWYgKCBteVRlc3QgPT0gbnVsbCApCi0JewotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOmFkZFRlc3RDYXNlIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgYWRkVGVzdC4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKLQkJcmV0dXJuOwotCX0KLQotCVRlc3RDYXNlIG15VGVzdENhc2UgPSBuZXcgVGVzdENhc2UoIHRlc3RDYXNlSWQudHJpbSgpLCB0ZXN0Q2FzZU5hbWUsIHRlc3RDYXNlRGVzY3JpcHRpb24gKTsKLQlteVRlc3QuYWRkVGVzdENhc2UgKCBteVRlc3RDYXNlICk7CisgICAgVGVzdFN1aXRlIG15VGVzdFN1aXRlID0gKFRlc3RTdWl0ZSl0ZXN0U3VpdGVIYXNoLmdldCggdGVzdFN1aXRlSWQudHJpbSgpICk7CisgICAgaWYgKCBteVRlc3RTdWl0ZT09IG51bGwgKQorICAgIHsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjphZGRUZXN0Q2FzZSBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IHNldFRlc3RTdWl0ZS4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBUZXN0IG15VGVzdCA9IChUZXN0KW15VGVzdFN1aXRlLmdldFRlc3RIYXNoKCkuZ2V0KCB0ZXN0SWQudHJpbSgpICk7CisgICAgaWYgKCBteVRlc3QgPT0gbnVsbCApCisgICAgeworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOmFkZFRlc3RDYXNlIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgYWRkVGVzdC4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotCQorICAgIFRlc3RDYXNlIG15VGVzdENhc2UgPSBuZXcgVGVzdENhc2UoIHRlc3RDYXNlSWQudHJpbSgpLCB0ZXN0Q2FzZU5hbWUsIHRlc3RDYXNlRGVzY3JpcHRpb24gKTsKKyAgICBteVRlc3QuYWRkVGVzdENhc2UgKCBteVRlc3RDYXNlICk7CisgICAgfQorCisKIAogICAgICAvKioKICAgICAgICAgQWZ0ZXIgYWRkaW5nIGEgVGVzdENhc2UgdXNpbmcgYWRkVGVzdENhc2UgLCBXZSBuZWVkIHRvIHVzZSB0aGlzIHNldFRlc3RDYXNlU3RhdHVzIG1ldGhvZApAQCAtMzU0LDk0ICszNTQsOTQgQEAKICAgICAgfQogCiAKLSAgICAvKiogCi0JQWZ0ZXIgYWRkaW5nIGEgVGVzdENhc2UgdXNpbmcgYWRkVGVzdENhc2UgLCBXZSBuZWVkIHRvIHVzZSB0aGlzIHNldFRlc3RDYXNlU3RhdHVzIG1ldGhvZCAKKyAgICAvKioKKyAgICBBZnRlciBhZGRpbmcgYSBUZXN0Q2FzZSB1c2luZyBhZGRUZXN0Q2FzZSAsIFdlIG5lZWQgdG8gdXNlIHRoaXMgc2V0VGVzdENhc2VTdGF0dXMgbWV0aG9kCiAgICAgICBmb3Igc2V0dGluZyBUZXN0Q2FzZSBzdGF0dXMocGFzcy9mYWlsKSBpbmZvcm1hdGlvbiBhYm91dCBwYXJ0aWN1bGFyIFRlc3RDYXNlLiBXZSBuZWVkIHRvICBwYXNzIFRlc3RTdWl0ZUlkLCBUZXN0SWQgYW5kIFRlc3RDYXNlSWQgIGFsb25nIHdpdGggc3RhdHVzIGluZm9ybWF0aW9uLgogICAgICBFYWNoIFRlc3RDYXNlIHdpbGwgaGF2ZSBzdGF0dXMKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0Q2FzZVN0YXR1cyAoIFN0cmluZyB0ZXN0U3VpdGVJZCwgU3RyaW5nIHRlc3RJZCwgU3RyaW5nIHRlc3RDYXNlSWQsICBTdHJpbmcgc3RhdHVzLCBTdHJpbmcgc3RhdHVzRGVzY3JpcHRpb24gKQogICAgIHsKLQlUZXN0U3VpdGUgbXlUZXN0U3VpdGUgPSAoVGVzdFN1aXRlKXRlc3RTdWl0ZUhhc2guZ2V0KCB0ZXN0U3VpdGVJZC50cmltKCkgKTsKLQlpZiAoIG15VGVzdFN1aXRlPT0gbnVsbCApCi0JewotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOnNldFRlc3RDYXNlU3RhdHVzIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgc2V0VGVzdFN1aXRlLiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOwotCQlyZXR1cm47Ci0JfQorICAgIFRlc3RTdWl0ZSBteVRlc3RTdWl0ZSA9IChUZXN0U3VpdGUpdGVzdFN1aXRlSGFzaC5nZXQoIHRlc3RTdWl0ZUlkLnRyaW0oKSApOworICAgIGlmICggbXlUZXN0U3VpdGU9PSBudWxsICkKKyAgICB7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6c2V0VGVzdENhc2VTdGF0dXMgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBzZXRUZXN0U3VpdGUuIFBFTkRJTkcgOiBTaGFsbCB3ZSB0aHJvdyBFeGNlcHRpb24/Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLQlUZXN0IG15VGVzdCA9IChUZXN0KW15VGVzdFN1aXRlLmdldFRlc3RIYXNoKCkuZ2V0KCB0ZXN0SWQudHJpbSgpICk7Ci0JaWYgKCBteVRlc3QgPT0gbnVsbCApCi0JewotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOnNldFRlc3RDYXNlU3RhdHVzIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgYWRkVGVzdC4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKLQkJcmV0dXJuOwotCX0KLQlUZXN0Q2FzZSBteVRlc3RDYXNlID0oVGVzdENhc2UpIG15VGVzdC5nZXRUZXN0Q2FzZUhhc2goKS5nZXQoIHRlc3RDYXNlSWQudHJpbSgpICk7Ci0JaWYgKCBteVRlc3RDYXNlID09IG51bGwgKQotCXsKLQkJU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjpzZXRUZXN0Q2FzZVN0YXR1cyBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IGFkZFRlc3RDYXNlLiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOwotCQlyZXR1cm47Ci0JfQotCW15VGVzdENhc2Uuc2V0U3RhdHVzKCBzdGF0dXMpOwotCW15VGVzdENhc2Uuc2V0U3RhdHVzRGVzY3JpcHRpb24oIHN0YXR1c0Rlc2NyaXB0aW9uKTsKKyAgICBUZXN0IG15VGVzdCA9IChUZXN0KW15VGVzdFN1aXRlLmdldFRlc3RIYXNoKCkuZ2V0KCB0ZXN0SWQudHJpbSgpICk7CisgICAgaWYgKCBteVRlc3QgPT0gbnVsbCApCisgICAgeworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOnNldFRlc3RDYXNlU3RhdHVzIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgYWRkVGVzdC4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBUZXN0Q2FzZSBteVRlc3RDYXNlID0oVGVzdENhc2UpIG15VGVzdC5nZXRUZXN0Q2FzZUhhc2goKS5nZXQoIHRlc3RDYXNlSWQudHJpbSgpICk7CisgICAgaWYgKCBteVRlc3RDYXNlID09IG51bGwgKQorICAgIHsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjpzZXRUZXN0Q2FzZVN0YXR1cyBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IGFkZFRlc3RDYXNlLiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG15VGVzdENhc2Uuc2V0U3RhdHVzKCBzdGF0dXMpOworICAgIG15VGVzdENhc2Uuc2V0U3RhdHVzRGVzY3JpcHRpb24oIHN0YXR1c0Rlc2NyaXB0aW9uKTsKIAogICAgICB9CiAKIAotICAgIC8qKiAKLQlBZnRlciBhZGRpbmcgYSBUZXN0Q2FzZSB1c2luZyBhZGRUZXN0Q2FzZSAsIFdlIG5lZWQgdG8gdXNlIHRoaXMgc2V0VGVzdENhc2VTdGF0dXMgbWV0aG9kIAorICAgIC8qKgorICAgIEFmdGVyIGFkZGluZyBhIFRlc3RDYXNlIHVzaW5nIGFkZFRlc3RDYXNlICwgV2UgbmVlZCB0byB1c2UgdGhpcyBzZXRUZXN0Q2FzZVN0YXR1cyBtZXRob2QKICAgICAgIGZvciBzZXR0aW5nIFRlc3RDYXNlIHN0YXR1cyhwYXNzL2ZhaWwpIGluZm9ybWF0aW9uIGFib3V0IHBhcnRpY3VsYXIgVGVzdENhc2UuIFdlIG5lZWQgdG8gIHBhc3MgVGVzdFN1aXRlSWQsIFRlc3RJZCBhbmQgVGVzdENhc2VJZCAgYWxvbmcgd2l0aCBzdGF0dXMgaW5mb3JtYXRpb24uCiAgICAgIG9ubHkgVGVzdENhc2VzIHdpbGwgaGF2ZSBzdGF0dXMKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0Q2FzZVN0YXR1cyAoIFN0cmluZyB0ZXN0U3VpdGVJZCwgU3RyaW5nIHRlc3RJZCwgU3RyaW5nIHRlc3RDYXNlSWQsICBTdHJpbmcgc3RhdHVzICkKICAgICB7Ci0JVGVzdFN1aXRlIG15VGVzdFN1aXRlID0gKFRlc3RTdWl0ZSl0ZXN0U3VpdGVIYXNoLmdldCggdGVzdFN1aXRlSWQudHJpbSgpICk7Ci0JaWYgKCBteVRlc3RTdWl0ZT09IG51bGwgKQotCXsKLQkJU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjpzZXRUZXN0Q2FzZVN0YXR1cyBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IHNldFRlc3RTdWl0ZS4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKLQkJcmV0dXJuOwotCX0KKyAgICBUZXN0U3VpdGUgbXlUZXN0U3VpdGUgPSAoVGVzdFN1aXRlKXRlc3RTdWl0ZUhhc2guZ2V0KCB0ZXN0U3VpdGVJZC50cmltKCkgKTsKKyAgICBpZiAoIG15VGVzdFN1aXRlPT0gbnVsbCApCisgICAgeworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOnNldFRlc3RDYXNlU3RhdHVzIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgc2V0VGVzdFN1aXRlLiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0JVGVzdCBteVRlc3QgPShUZXN0KSBteVRlc3RTdWl0ZS5nZXRUZXN0SGFzaCgpLmdldCggdGVzdElkLnRyaW0oKSApOwotCWlmICggbXlUZXN0ID09IG51bGwgKQotCXsKLQkJU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjpzZXRUZXN0Q2FzZVN0YXR1cyBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IGFkZFRlc3QuIFBFTkRJTkcgOiBTaGFsbCB3ZSB0aHJvdyBFeGNlcHRpb24/Iik7Ci0JCXJldHVybjsKLQl9Ci0JVGVzdENhc2UgbXlUZXN0Q2FzZSA9IChUZXN0Q2FzZSlteVRlc3QuZ2V0VGVzdENhc2VIYXNoKCkuZ2V0KCB0ZXN0Q2FzZUlkLnRyaW0oKSApOwotCWlmICggbXlUZXN0Q2FzZSA9PSBudWxsICkKLQl7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6c2V0VGVzdENhc2VTdGF0dXMgbWlnaHQgaGF2ZSBjYWxsZWQgd2l0aG91dCBhZGRUZXN0Q2FzZS4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKLQkJcmV0dXJuOwotCX0KLQlteVRlc3RDYXNlLnNldFN0YXR1cyggc3RhdHVzKTsKKyAgICBUZXN0IG15VGVzdCA9KFRlc3QpIG15VGVzdFN1aXRlLmdldFRlc3RIYXNoKCkuZ2V0KCB0ZXN0SWQudHJpbSgpICk7CisgICAgaWYgKCBteVRlc3QgPT0gbnVsbCApCisgICAgeworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOnNldFRlc3RDYXNlU3RhdHVzIG1pZ2h0IGhhdmUgY2FsbGVkIHdpdGhvdXQgYWRkVGVzdC4gUEVORElORyA6IFNoYWxsIHdlIHRocm93IEV4Y2VwdGlvbj8iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBUZXN0Q2FzZSBteVRlc3RDYXNlID0gKFRlc3RDYXNlKW15VGVzdC5nZXRUZXN0Q2FzZUhhc2goKS5nZXQoIHRlc3RDYXNlSWQudHJpbSgpICk7CisgICAgaWYgKCBteVRlc3RDYXNlID09IG51bGwgKQorICAgIHsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjpzZXRUZXN0Q2FzZVN0YXR1cyBtaWdodCBoYXZlIGNhbGxlZCB3aXRob3V0IGFkZFRlc3RDYXNlLiBQRU5ESU5HIDogU2hhbGwgd2UgdGhyb3cgRXhjZXB0aW9uPyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG15VGVzdENhc2Uuc2V0U3RhdHVzKCBzdGF0dXMpOwogCiAgICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQ2hhbmdlIGRvbmUgb24gNy8xMC8wMiBieSBEZWVwYSBTaW5naAogICAgICAqIE5vdyBSZXBvcnRlciB3aWxsIGJ5IGRlZmF1bHQgY3JlYXRlIHJlc3VsdHMgZmlsZSBpbiAkRUpURV9IT01FIGlmIG5vIHJlc3VsdHMgZmlsZSBpcyBzcGVjaWZpZWQKICAgICAgKiBTbyBubyBuZWVkIHRvIHBhc3MgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLgogICAgICAqIFJlcG9ydGVyLmdldEluc3RhbmNlIHNob3VsZCBjcmVhdGUgdGVzdF9yZXN1bHRzLnhtbCBhdCBqMmVlLXRlc3QvCi0gICAgICogCisgICAgICoKICAgICAgKi8KIAotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyBSZXBvcnRlciBnZXRJbnN0YW5jZSggKQogICAgIHsKLQkgICAgaWYgKCByZXBvcnRlckluc3RhbmNlID09IG51bGwgKQotCSAgICB7Ci0JCSAgICAvL3JlcG9ydGVySW5zdGFuY2UgPSBuZXcgUmVwb3J0ZXIoICk7Ci0JCSAgICBTdHJpbmcgcm9vdHBhdGg9bmV3IEZpbGUoIi4iKS5nZXRBYnNvbHV0ZVBhdGgoKTsKLQkJICAgIFN0cmluZyBlanRlX2hvbWU9cm9vdHBhdGguc3Vic3RyaW5nKDAscm9vdHBhdGguaW5kZXhPZih3c19ob21lKSk7Ci0JCSAgICAvL2VqdGVfaG9tZSBjb250YWlucyBPUyBkZXBlbmRlbnQgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVyIHdpdGhvdXQgajJlZS10ZXN0Ci0JCSAgICBTdHJpbmcgb3V0cHV0RGlyPWVqdGVfaG9tZSt3c19ob21lOwotCQkgICAgcmVwb3J0ZXJJbnN0YW5jZSA9IFJlcG9ydGVyLmdldEluc3RhbmNlKCBvdXRwdXREaXIgKyBGaWxlLnNlcGFyYXRvckNoYXIgKyAidGVzdF9yZXN1bHRzLnhtbCIgKTsKLQkgICAgfQorICAgICAgICBpZiAoIHJlcG9ydGVySW5zdGFuY2UgPT0gbnVsbCApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vcmVwb3J0ZXJJbnN0YW5jZSA9IG5ldyBSZXBvcnRlciggKTsKKyAgICAgICAgICAgIFN0cmluZyByb290cGF0aD1uZXcgRmlsZSgiLiIpLmdldEFic29sdXRlUGF0aCgpOworICAgICAgICAgICAgU3RyaW5nIGVqdGVfaG9tZT1yb290cGF0aC5zdWJzdHJpbmcoMCxyb290cGF0aC5pbmRleE9mKHdzX2hvbWUpKTsKKyAgICAgICAgICAgIC8vZWp0ZV9ob21lIGNvbnRhaW5zIE9TIGRlcGVuZGVudCBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXIgd2l0aG91dCBqMmVlLXRlc3QKKyAgICAgICAgICAgIFN0cmluZyBvdXRwdXREaXI9ZWp0ZV9ob21lK3dzX2hvbWU7CisgICAgICAgICAgICByZXBvcnRlckluc3RhbmNlID0gUmVwb3J0ZXIuZ2V0SW5zdGFuY2UoIG91dHB1dERpciArIEZpbGUuc2VwYXJhdG9yQ2hhciArICJ0ZXN0X3Jlc3VsdHMueG1sIiApOworICAgICAgICB9CiAKLQkgICAgcmV0dXJuIHJlcG9ydGVySW5zdGFuY2U7CisgICAgICAgIHJldHVybiByZXBvcnRlckluc3RhbmNlOwogCiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyBSZXBvcnRlciBnZXRJbnN0YW5jZShTdHJpbmcgd3Nob21lKQogICAgIHsKICAgICAgICAgaWYocmVwb3J0ZXJJbnN0YW5jZSA9PSBudWxsKQpAQCAtNDU2LDE2ICs0NTYsMTYgQEAKIAogICAgICAgcHVibGljIHN0YXRpYyBSZXBvcnRlciBnZXRJbnN0YW5jZSggU3RyaW5nIHJlc3VsdEZpbGVQYXRoLGJvb2xlYW4gcGF0aFNwZWNpZmllZCApCiAgICAgICB7Ci0JICAgaWYgKCByZXBvcnRlckluc3RhbmNlID09IG51bGwgKQotCSAgIHsKLQkJcmVwb3J0ZXJJbnN0YW5jZSA9IG5ldyBSZXBvcnRlcihyZXN1bHRGaWxlUGF0aCApOwotCQkKLQkgICB9Ci0JICAgcmV0dXJuIHJlcG9ydGVySW5zdGFuY2U7CisgICAgICAgaWYgKCByZXBvcnRlckluc3RhbmNlID09IG51bGwgKQorICAgICAgIHsKKyAgICAgICAgcmVwb3J0ZXJJbnN0YW5jZSA9IG5ldyBSZXBvcnRlcihyZXN1bHRGaWxlUGF0aCApOworCiAgICAgICAgfQotICAgICAgCisgICAgICAgcmV0dXJuIHJlcG9ydGVySW5zdGFuY2U7CisgICAgICAgfQorCiAgICAgICAvL2RvbmUgb25seSBmb3IgdGhlIHdlYnRlc3RzLgotICAgIAorCiAgICAgLypwdWJsaWMgc3RhdGljIFJlcG9ydGVyIGdldEluc3RhbmNlKFN0cmluZyB3c2hvbWUpIHsKICAgICAgICAgaWYgKCByZXBvcnRlckluc3RhbmNlID09IG51bGwgKSB7CiAgICAgICAgICAgICBTdHJpbmcgcm9vdHBhdGg9bmV3IEZpbGUoIi4iKS5nZXRBYnNvbHV0ZVBhdGgoKTsKQEAgLTQ3Nyw3ICs0NzcsNyBAQAogICAgICAgICAgICAgcmVwb3J0ZXJJbnN0YW5jZSA9IG5ldyBSZXBvcnRlcihvdXRwdXREaXIgKyBGaWxlLnNlcGFyYXRvckNoYXIgKyAidGVzdF9yZXN1bHRzLnhtbCIpOwogICAgICAgICAgICAgLy9yZXBvcnRlckluc3RhbmNlID0gUmVwb3J0ZXIuZ2V0SW5zdGFuY2UoIG91dHB1dERpciArIEZpbGUuc2VwYXJhdG9yQ2hhciArICJ0ZXN0X3Jlc3VsdHMueG1sIiApOwogICAgICAgICAgICAgLy9yZXBvcnRlckluc3RhbmNlID0gbmV3IFJlcG9ydGVyKHJlc3VsdEZpbGVQYXRoICk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXBvcnRlckluc3RhbmNlOwogICAgIH0qLwpAQCAtNDg1LDI0ICs0ODUsMjQgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgUmVwb3J0ZXIgZ2V0SW5zdGFuY2UoIE91dHB1dFN0cmVhbSBvdXRTdHJlYW0gICkKICAgICAgIHsKLQkgICBpZiAoIHJlcG9ydGVySW5zdGFuY2UgPT0gbnVsbCApCi0JICAgewotCQlyZXBvcnRlckluc3RhbmNlID0gbmV3IFJlcG9ydGVyKG91dFN0cmVhbSApOwotCQkKLQkgICB9Ci0JICAgcmV0dXJuIHJlcG9ydGVySW5zdGFuY2U7Ci0gICAgICAgfSAKKyAgICAgICBpZiAoIHJlcG9ydGVySW5zdGFuY2UgPT0gbnVsbCApCisgICAgICAgeworICAgICAgICByZXBvcnRlckluc3RhbmNlID0gbmV3IFJlcG9ydGVyKG91dFN0cmVhbSApOworCisgICAgICAgfQorICAgICAgIHJldHVybiByZXBvcnRlckluc3RhbmNlOworICAgICAgIH0KIAogICAgICAgcHVibGljIHN0YXRpYyBSZXBvcnRlciBnZXRJbnN0YW5jZSggV3JpdGVyIHdyaXRlciAgKQogICAgICAgewotCSAgIGlmICggcmVwb3J0ZXJJbnN0YW5jZSA9PSBudWxsICkKLQkgICB7Ci0JCQotCQlyZXBvcnRlckluc3RhbmNlID0gbmV3IFJlcG9ydGVyKHdyaXRlciApOwotCQkKLQkgICB9Ci0JICAgcmV0dXJuIHJlcG9ydGVySW5zdGFuY2U7Ci0gICAgICAgfSAKKyAgICAgICBpZiAoIHJlcG9ydGVySW5zdGFuY2UgPT0gbnVsbCApCisgICAgICAgeworCisgICAgICAgIHJlcG9ydGVySW5zdGFuY2UgPSBuZXcgUmVwb3J0ZXIod3JpdGVyICk7CisKKyAgICAgICB9CisgICAgICAgcmV0dXJuIHJlcG9ydGVySW5zdGFuY2U7CisgICAgICAgfQogICAgIC8qIENPTlNUUlVDVE9SUyAqLwogCiAgICAgIHByaXZhdGUgUmVwb3J0ZXIoICkKQEAgLTUxOCwxOSArNTE4LDE5IEBACiAgICAgIHByaXZhdGUgUmVwb3J0ZXIoIFN0cmluZyByZXN1bHRGaWxlUGF0aCApCiAgICAgIHsKICAgICAgIHRyeXsKLQkgICByZXN1bHRGaWxlPSByZXN1bHRGaWxlUGF0aDsKKyAgICAgICByZXN1bHRGaWxlPSByZXN1bHRGaWxlUGF0aDsKIAogICAgICAgICAgIFJ1bnRpbWUuZ2V0UnVudGltZSgpLmFkZFNodXRkb3duSG9vayh0aGlzKTsKICAgICAgIH0gY2F0Y2ggKGphdmEubGFuZy5FeGNlcHRpb24gZXgpewogICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIldBUk5JTkc6IFJlcG9ydGVyIGhvb2sgdGhyZWFkIG5vdCBjcmVhdGVkLiBObyBYTUwgZmlsZSB3aWxsIGJlIHByb2R1Y2VkLiIpOwogICAgICAgfQogICAgIH0KLSAKLSAgIAorCisKIAogICAgIHByaXZhdGUgUmVwb3J0ZXIgKE91dHB1dFN0cmVhbSBvKSB7Ci0JdGhpcygpOwotCW91dCA9IG5ldyBQcmludFdyaXRlcihvKTsKKyAgICB0aGlzKCk7CisgICAgb3V0ID0gbmV3IFByaW50V3JpdGVyKG8pOwogICAgIH0KIAogCkBAIC01MzksOCArNTM5LDggQEAKICAgICAgKiB3aGljaCBleHRlbmRzIFByaW50V3JpdGVyLiAgICAqLwogCiAgICAgcHJpdmF0ZSBSZXBvcnRlciAoV3JpdGVyIHcpIHsKLQl0aGlzKCk7Ci0Jb3V0ID0gbmV3IFByaW50V3JpdGVyKHcpOworICAgIHRoaXMoKTsKKyAgICBvdXQgPSBuZXcgUHJpbnRXcml0ZXIodyk7CiAgICAgfQogCiAKQEAgLTU1NCw2MSArNTU0LDYxIEBACiAgICAgIHRyeQogICAgICB7CiAKLQkvL05vdyBmbHVzaCBhbGwgdGhlIFRlc3RTdWl0ZSBpbmZvCisgICAgLy9Ob3cgZmx1c2ggYWxsIHRoZSBUZXN0U3VpdGUgaW5mbwogCi0JLy9TeXN0ZW0ub3V0LnByaW50bG4oIlJFUE9SVEVSXHQgZ2VuZXJhdGVWYWxpZFJlcG9ydC5mbHVzaEFsbCIpOworICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJSRVBPUlRFUlx0IGdlbmVyYXRlVmFsaWRSZXBvcnQuZmx1c2hBbGwiKTsKICAgICAgICAgIGZsdXNoQWxsKCk7CiAKLQlTdHJpbmcgb0ZpbGVOYW1lID1udWxsOwotCWlmICggcmVzdWx0RmlsZS5sYXN0SW5kZXhPZigiLiIpID4gMCApICAgCi0JewotCQlvRmlsZU5hbWUgPSByZXN1bHRGaWxlLnN1YnN0cmluZygwLCByZXN1bHRGaWxlLmxhc3RJbmRleE9mKCIuIikgKSArICJWYWxpZC54bWwiOwotCX0KLQllbHNlCi0JewotCQlvRmlsZU5hbWUgPSByZXN1bHRGaWxlICsgIlZhbGlkLnhtbCI7Ci0JfQorICAgIFN0cmluZyBvRmlsZU5hbWUgPW51bGw7CisgICAgaWYgKCByZXN1bHRGaWxlLmxhc3RJbmRleE9mKCIuIikgPiAwICkKKyAgICB7CisgICAgICAgIG9GaWxlTmFtZSA9IHJlc3VsdEZpbGUuc3Vic3RyaW5nKDAsIHJlc3VsdEZpbGUubGFzdEluZGV4T2YoIi4iKSApICsgIlZhbGlkLnhtbCI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG9GaWxlTmFtZSA9IHJlc3VsdEZpbGUgKyAiVmFsaWQueG1sIjsKKyAgICB9CiAgICAgICAgIHdDaGFubmVsID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0ob0ZpbGVOYW1lKS5nZXRDaGFubmVsKCk7CiAKLQlTdHJpbmcgb3NOYW1lID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcy5uYW1lIik7Ci0JU3RyaW5nIG9zVmVyc2lvbiA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3MudmVyc2lvbiIpOwotCVN0cmluZyBjdXJyZW50RGF0ZSA9IChuZXcgRGF0ZSgpKS50b1N0cmluZygpOwotCQotCVN0cmluZyBleHRyYVhNTCA9ICI8cmVwb3J0PiA8ZGF0ZT4gIiArIGN1cnJlbnREYXRlICsgIjwvZGF0ZT48Y29uZmlndXJhdGlvbj4iOwotCWV4dHJhWE1MICs9ICI8b3M+IiArIG9zTmFtZSArIG9zVmVyc2lvbiArICI8L29zPiI7Ci0JZXh0cmFYTUwgKz0gIjxqZGtWZXJzaW9uPiIgKyBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEudmVyc2lvbiIpICsgIjwvamRrVmVyc2lvbj4iOworICAgIFN0cmluZyBvc05hbWUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9zLm5hbWUiKTsKKyAgICBTdHJpbmcgb3NWZXJzaW9uID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcy52ZXJzaW9uIik7CisgICAgU3RyaW5nIGN1cnJlbnREYXRlID0gKG5ldyBEYXRlKCkpLnRvU3RyaW5nKCk7CiAKLQlTdHJpbmcgbWFjaGluZU5hbWUgPSAidW5hdmFpbGFibGUiOworICAgIFN0cmluZyBleHRyYVhNTCA9ICI8cmVwb3J0PiA8ZGF0ZT4gIiArIGN1cnJlbnREYXRlICsgIjwvZGF0ZT48Y29uZmlndXJhdGlvbj4iOworICAgIGV4dHJhWE1MICs9ICI8b3M+IiArIG9zTmFtZSArIG9zVmVyc2lvbiArICI8L29zPiI7CisgICAgZXh0cmFYTUwgKz0gIjxqZGtWZXJzaW9uPiIgKyBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEudmVyc2lvbiIpICsgIjwvamRrVmVyc2lvbj4iOworCisgICAgU3RyaW5nIG1hY2hpbmVOYW1lID0gInVuYXZhaWxhYmxlIjsKICAgICAgICAgSW5wdXRTdHJlYW0gaW4gPSBudWxsOwotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICBpbiAgPSBSdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKCJ1bmFtZSAtbiIpLmdldElucHV0U3RyZWFtKCk7Ci0JICAgIGJ5dGVbXSBteUJ5dGVzID0gbmV3IGJ5dGVbMjAwXTsKLQkgICAgaW4ucmVhZChteUJ5dGVzKTsKLQkgICAgbWFjaGluZU5hbWUgPSBuZXcgU3RyaW5nKCBteUJ5dGVzICkudHJpbSgpOwotCX0KLQljYXRjaCAoIEV4Y2VwdGlvbiBtZSApIHsKLQl9IGZpbmFsbHkgeworICAgICAgICBpbiAgPSBSdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKCJ1bmFtZSAtbiIpLmdldElucHV0U3RyZWFtKCk7CisgICAgICAgIGJ5dGVbXSBteUJ5dGVzID0gbmV3IGJ5dGVbMjAwXTsKKyAgICAgICAgaW4ucmVhZChteUJ5dGVzKTsKKyAgICAgICAgbWFjaGluZU5hbWUgPSBuZXcgU3RyaW5nKCBteUJ5dGVzICkudHJpbSgpOworICAgIH0KKyAgICBjYXRjaCAoIEV4Y2VwdGlvbiBtZSApIHsKKyAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgY2xvc2UoaW4pOwogICAgICAgICB9Ci0JCi0JZXh0cmFYTUwgKz0gIjxtYWNoaW5lTmFtZT4iICsgbWFjaGluZU5hbWUgKyAiPC9tYWNoaW5lTmFtZT4iOwotCWV4dHJhWE1MICs9ICI8L2NvbmZpZ3VyYXRpb24+IDx0ZXN0c3VpdGVzPiI7CQogCi0Jd0NoYW5uZWwud3JpdGUoQnl0ZUJ1ZmZlci53cmFwKGV4dHJhWE1MLmdldEJ5dGVzKCkpKTsKKyAgICBleHRyYVhNTCArPSAiPG1hY2hpbmVOYW1lPiIgKyBtYWNoaW5lTmFtZSArICI8L21hY2hpbmVOYW1lPiI7CisgICAgZXh0cmFYTUwgKz0gIjwvY29uZmlndXJhdGlvbj4gPHRlc3RzdWl0ZXM+IjsKKworICAgIHdDaGFubmVsLndyaXRlKEJ5dGVCdWZmZXIud3JhcChleHRyYVhNTC5nZXRCeXRlcygpKSk7CiAKICAgICAgICAgckNoYW5uZWwgPSBuZXcgRmlsZUlucHV0U3RyZWFtKHJlc3VsdEZpbGUpLmdldENoYW5uZWwoKTsKICAgICAgICAgd0NoYW5uZWwudHJhbnNmZXJGcm9tKHJDaGFubmVsLCB3Q2hhbm5lbC5wb3NpdGlvbigpLCByQ2hhbm5lbC5zaXplKCkpOwogICAgICAgICB3Q2hhbm5lbC5wb3NpdGlvbih3Q2hhbm5lbC5wb3NpdGlvbigpICsgckNoYW5uZWwuc2l6ZSgpKTsKIAotCXdDaGFubmVsLndyaXRlKEJ5dGVCdWZmZXIud3JhcCgiPC90ZXN0c3VpdGVzPlxuPC9yZXBvcnQ+XG4iLmdldEJ5dGVzKCkpKTsKKyAgICB3Q2hhbm5lbC53cml0ZShCeXRlQnVmZmVyLndyYXAoIjwvdGVzdHN1aXRlcz5cbjwvcmVwb3J0PlxuIi5nZXRCeXRlcygpKSk7CiAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJSRVBPUlRFUlx0IEZpbGUgdmFsaWRhdGlvbiBjb21wbGV0ZSIpOwogCi0JfQotCWNhdGNoICggRXhjZXB0aW9uIGUgKQotCXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJFUlJPUiA6ICIgKyBlICk7Ci0JfSBmaW5hbGx5IHsKKyAgICB9CisgICAgY2F0Y2ggKCBFeGNlcHRpb24gZSApCisgICAgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SIDogIiArIGUgKTsKKyAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgY2xvc2UockNoYW5uZWwpOwogICAgICAgICAgICAgY2xvc2Uod0NoYW5uZWwpOwogICAgICAgICB9CkBAIC02MTYsNDYgKzYxNiw0NiBAQAogCiAgICBwdWJsaWMgdm9pZCBmbHVzaEFsbCAoICkKICAgIHsKLS8vCVN5c3RlbS5vdXQucHJpbnRsbigiUkVQT1JURVJcdCBpbnNpZGUgZmx1c2hBbGwiKSA7CisvLyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJFUE9SVEVSXHQgaW5zaWRlIGZsdXNoQWxsIikgOwogICAgICAgIElucHV0U3RyZWFtIGluID0gbnVsbDsKICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIGZvdXRwdXQgPSBudWxsOwogICAgICAgIHRyeQotCXsKLQkJRW51bWVyYXRpb24gdGVzdFN1aXRlRW51bSA9IHRlc3RTdWl0ZUhhc2gua2V5cygpOworICAgIHsKKyAgICAgICAgRW51bWVyYXRpb24gdGVzdFN1aXRlRW51bSA9IHRlc3RTdWl0ZUhhc2gua2V5cygpOwogCi0JCWlmICggcmVzdWx0RmlsZS5lcXVhbHMoImRlZmF1bHQueG1sIikgKQotCQl7Ci0JCQlpbiAgPSBSdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKCJ1bmFtZSAtbiIpLmdldElucHV0U3RyZWFtKCk7Ci0JCQlieXRlW10gbXlCeXRlcyA9IG5ldyBieXRlWzIwMF07Ci0JCQlpbi5yZWFkKG15Qnl0ZXMpOwotCQkJU3RyaW5nIG15UmVzdWx0RmlsZSA9ICJyZXN1bHRfIjsKLQkJCVN0cmluZyBtYWNoaW5lTmFtZSA9IG5ldyBTdHJpbmcoIG15Qnl0ZXMgKS50cmltKCk7Ci0JCQlteVJlc3VsdEZpbGUgKz0gbWFjaGluZU5hbWU7CisgICAgICAgIGlmICggcmVzdWx0RmlsZS5lcXVhbHMoImRlZmF1bHQueG1sIikgKQorICAgICAgICB7CisgICAgICAgICAgICBpbiAgPSBSdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKCJ1bmFtZSAtbiIpLmdldElucHV0U3RyZWFtKCk7CisgICAgICAgICAgICBieXRlW10gbXlCeXRlcyA9IG5ldyBieXRlWzIwMF07CisgICAgICAgICAgICBpbi5yZWFkKG15Qnl0ZXMpOworICAgICAgICAgICAgU3RyaW5nIG15UmVzdWx0RmlsZSA9ICJyZXN1bHRfIjsKKyAgICAgICAgICAgIFN0cmluZyBtYWNoaW5lTmFtZSA9IG5ldyBTdHJpbmcoIG15Qnl0ZXMgKS50cmltKCk7CisgICAgICAgICAgICBteVJlc3VsdEZpbGUgKz0gbWFjaGluZU5hbWU7CiAKLQkJCUNhbGVuZGFyICBteUNhbGVuZGFyICA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7IAotCQkJU3RyaW5nIG1vbnRoID0gbmV3IEludGVnZXIoIG15Q2FsZW5kYXIuZ2V0ICggQ2FsZW5kYXIuTU9OVEgpKS50b1N0cmluZygpOwotCQkJU3RyaW5nIGRheSA9IG5ldyBJbnRlZ2VyKG15Q2FsZW5kYXIuZ2V0ICggQ2FsZW5kYXIuREFZX09GX01PTlRIKSkudG9TdHJpbmcoKTsKLQkJCVN0cmluZyB5ZWFyID0gbmV3IEludGVnZXIobXlDYWxlbmRhci5nZXQgKCBDYWxlbmRhci5ZRUFSKSkudG9TdHJpbmcoKTsKLQkJIAlteVJlc3VsdEZpbGUgKz0gIl8iICsgbW9udGggKyBkYXkgKyB5ZWFyICsgIi54bWwiOwotCQkJcmVzdWx0RmlsZT0gbXlSZXN1bHRGaWxlOwkKKyAgICAgICAgICAgIENhbGVuZGFyICBteUNhbGVuZGFyICA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgICAgICBTdHJpbmcgbW9udGggPSBuZXcgSW50ZWdlciggbXlDYWxlbmRhci5nZXQgKCBDYWxlbmRhci5NT05USCkpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICBTdHJpbmcgZGF5ID0gbmV3IEludGVnZXIobXlDYWxlbmRhci5nZXQgKCBDYWxlbmRhci5EQVlfT0ZfTU9OVEgpKS50b1N0cmluZygpOworICAgICAgICAgICAgU3RyaW5nIHllYXIgPSBuZXcgSW50ZWdlcihteUNhbGVuZGFyLmdldCAoIENhbGVuZGFyLllFQVIpKS50b1N0cmluZygpOworICAgICAgICAgICAgIG15UmVzdWx0RmlsZSArPSAiXyIgKyBtb250aCArIGRheSArIHllYXIgKyAiLnhtbCI7CisgICAgICAgICAgICByZXN1bHRGaWxlPSBteVJlc3VsdEZpbGU7CiAKLQkJfQorICAgICAgICB9CiAKLQkJZm91dHB1dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCByZXN1bHRGaWxlLCB0cnVlICk7Ci0JCXdoaWxlICggdGVzdFN1aXRlRW51bS5oYXNNb3JlRWxlbWVudHMoICkgKQotCQl7Ci0JCQlTdHJpbmcgdGVzdFN1aXRlSWQgPSAoU3RyaW5nKSB0ZXN0U3VpdGVFbnVtLm5leHRFbGVtZW50KCk7Ci0JCQlmbHVzaCggdGVzdFN1aXRlSWQsIGZvdXRwdXQgKTsKLQkJfQorICAgICAgICBmb3V0cHV0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oIHJlc3VsdEZpbGUsIHRydWUgKTsKKyAgICAgICAgd2hpbGUgKCB0ZXN0U3VpdGVFbnVtLmhhc01vcmVFbGVtZW50cyggKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZyB0ZXN0U3VpdGVJZCA9IChTdHJpbmcpIHRlc3RTdWl0ZUVudW0ubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGZsdXNoKCB0ZXN0U3VpdGVJZCwgZm91dHB1dCApOworICAgICAgICB9CiAKLQkJU3lzdGVtLm91dC5wcmludGxuKCJpbiBmbHVzaEFsbCAsIGNyZWF0aW5nIG5ldyB0ZXN0U3VpdGVIYXNoIik7Ci0JCS8vIE5vdyB0YWtlIG91dCB0aGUgVGVzdFN1aXRlIGluZm8gZnJvbSBtZW1vcnkKLQkJdGVzdFN1aXRlSGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLQl9Ci0JY2F0Y2ggKCBFeGNlcHRpb24gZSApCi0JewotCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOiAiICsgZSApOwotCX0gZmluYWxseSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gZmx1c2hBbGwgLCBjcmVhdGluZyBuZXcgdGVzdFN1aXRlSGFzaCIpOworICAgICAgICAvLyBOb3cgdGFrZSBvdXQgdGhlIFRlc3RTdWl0ZSBpbmZvIGZyb20gbWVtb3J5CisgICAgICAgIHRlc3RTdWl0ZUhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgfQorICAgIGNhdGNoICggRXhjZXB0aW9uIGUgKQorICAgIHsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjogIiArIGUgKTsKKyAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgY2xvc2UoaW4pOwogICAgICAgICAgICAgY2xvc2UoZm91dHB1dCk7CiAgICAgICAgIH0KQEAgLTY2NCwyMiArNjY0LDIyIEBACiAgICB9CiAKICAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgcHJlcGFyZXMgYW5kIG91dHB1dCBhbiBYTUwgcmVwcmVzZW50YXRpb24gb2YgdGhlIFJlcG9ydGVyIGNsYXNzJyBjb250ZW50IGZvciB0aGUgZ2l2ZW4gdGVzdFN1aXRlLiAKKyAgICAgKiBUaGlzIG1ldGhvZCBwcmVwYXJlcyBhbmQgb3V0cHV0IGFuIFhNTCByZXByZXNlbnRhdGlvbiBvZiB0aGUgUmVwb3J0ZXIgY2xhc3MnIGNvbnRlbnQgZm9yIHRoZSBnaXZlbiB0ZXN0U3VpdGUuCiAgICAgICogQHBhcmFtIHRlc3RTdWl0ZU5hbWUgdGhlIHRlc3Qgc3VpdGUncyBuYW1lLgogICAgICAqIEByZXR1cm4gcmV0dXJucyB0cnVlIGlmIHRoZSBmaWxlIGlzIHN1Y2Nlc2Z1bGx5IGNyZWF0ZWQKICAgICAgKi8KIAotICAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGZsdXNoKFN0cmluZyB0ZXN0U3VpdGVJZCkKICAgICB7CiAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJSRVBPUlRFUlx0IGZsdXNoKHRlc3RzdWl0ZUlEIik7Ci0JYm9vbGVhbiByZXR1cm5WYWw9ZmFsc2U7CisgICAgYm9vbGVhbiByZXR1cm5WYWw9ZmFsc2U7CiAgICAgICAgIElucHV0U3RyZWFtIGluID0gbnVsbDsKICAgICAgICAgRmlsZU91dHB1dFN0cmVhbSBmb3V0cHV0ID0gbnVsbDsKLSAgICAJdHJ5CisgICAgICAgIHRyeQogICAgICAgICB7CiAKLQkJIGlmICggcmVzdWx0RmlsZS5lcXVhbHMoImRlZmF1bHQueG1sIikgKQorICAgICAgICAgaWYgKCByZXN1bHRGaWxlLmVxdWFscygiZGVmYXVsdC54bWwiKSApCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgaW4gID0gUnVudGltZS5nZXRSdW50aW1lKCkuZXhlYygidW5hbWUgLW4iKS5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZVtdIG15Qnl0ZXMgPSBuZXcgYnl0ZVsyMDBdOwpAQCAtNjg4LDMwICs2ODgsMzAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtYWNoaW5lTmFtZSA9IG5ldyBTdHJpbmcoIG15Qnl0ZXMgKS50cmltKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBteVJlc3VsdEZpbGUgKz0gbWFjaGluZU5hbWU7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIENhbGVuZGFyICBteUNhbGVuZGFyICA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7IAotCQkJU3RyaW5nIG1vbnRoID0gbmV3IEludGVnZXIoIG15Q2FsZW5kYXIuZ2V0ICggQ2FsZW5kYXIuTU9OVEgpKS50b1N0cmluZygpOwotCQkJU3RyaW5nIGRheSA9IG5ldyBJbnRlZ2VyKG15Q2FsZW5kYXIuZ2V0ICggQ2FsZW5kYXIuREFZX09GX01PTlRIKSkudG9TdHJpbmcoKTsKLQkJCVN0cmluZyB5ZWFyID0gbmV3IEludGVnZXIobXlDYWxlbmRhci5nZXQgKCBDYWxlbmRhci5ZRUFSKSkudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG15UmVzdWx0RmlsZSArPSAiXyIgKyBtb250aCArIGRheSArIHllYXIgKyAiLnhtbCI7ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0RmlsZT0gbXlSZXN1bHRGaWxlOyAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXIgIG15Q2FsZW5kYXIgID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgICAgIFN0cmluZyBtb250aCA9IG5ldyBJbnRlZ2VyKCBteUNhbGVuZGFyLmdldCAoIENhbGVuZGFyLk1PTlRIKSkudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIFN0cmluZyBkYXkgPSBuZXcgSW50ZWdlcihteUNhbGVuZGFyLmdldCAoIENhbGVuZGFyLkRBWV9PRl9NT05USCkpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICBTdHJpbmcgeWVhciA9IG5ldyBJbnRlZ2VyKG15Q2FsZW5kYXIuZ2V0ICggQ2FsZW5kYXIuWUVBUikpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBteVJlc3VsdEZpbGUgKz0gIl8iICsgbW9udGggKyBkYXkgKyB5ZWFyICsgIi54bWwiOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0RmlsZT0gbXlSZXN1bHRGaWxlOwogCiAgICAgICAgICAgICAgICAgfQogCi0JCWZvdXRwdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSggcmVzdWx0RmlsZSwgdHJ1ZSApOwotCQlyZXR1cm5WYWw9IGZsdXNoKCB0ZXN0U3VpdGVJZCwgZm91dHB1dCk7Ci0gICAgICAJfQotICAgICAgCWNhdGNoICggRXhjZXB0aW9uIGUgKQotCXsKLQkJU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUiA6ICIgKyBlICk7Ci0JfSBmaW5hbGx5IHsKKyAgICAgICAgZm91dHB1dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCByZXN1bHRGaWxlLCB0cnVlICk7CisgICAgICAgIHJldHVyblZhbD0gZmx1c2goIHRlc3RTdWl0ZUlkLCBmb3V0cHV0KTsKKyAgICAgICAgICB9CisgICAgICAgICAgY2F0Y2ggKCBFeGNlcHRpb24gZSApCisgICAgeworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SIDogIiArIGUgKTsKKyAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgY2xvc2UoaW4pOwogICAgICAgICAgICAgY2xvc2UoZm91dHB1dCk7CiAgICAgICAgIH0KLQlyZXR1cm4gcmV0dXJuVmFsOworICAgIHJldHVybiByZXR1cm5WYWw7CiAgICAgfQogCiAgICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIHByZXBhcmVzIGFuZCBvdXRwdXQgYW4gWE1MIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBSZXBvcnRlciBjbGFzcycgY29udGVudCBmb3IgdGhlIGdpdmVuIHRlc3RTdWl0ZS4gCisgICAgICogVGhpcyBtZXRob2QgcHJlcGFyZXMgYW5kIG91dHB1dCBhbiBYTUwgcmVwcmVzZW50YXRpb24gb2YgdGhlIFJlcG9ydGVyIGNsYXNzJyBjb250ZW50IGZvciB0aGUgZ2l2ZW4gdGVzdFN1aXRlLgogICAgICAqIEBwYXJhbSB0ZXN0U3VpdGVOYW1lIHRoZSB0ZXN0IHN1aXRlJ3MgbmFtZS4KICAgICAgKiBAcGFyYW0gZm91dHB1dCB0aGUgRmlsZU91dHB1dFN0cmVhbSBpbiB3aGljaCB3ZSBuZWVkIHRvIHdyaXRlLgogICAgICAqIEByZXR1cm4gcmV0dXJucyB0cnVlIGlmIHRoZSBmaWxlIGlzIHN1Y2Nlc2Z1bGx5IGNyZWF0ZWQKQEAgLTcyMSwxNTQgKzcyMSwxNTQgQEAKICAgICAgICAgdHJ5ewogICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHhtbFJlcHJlc2VudGF0aW9uID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogCi0JICAgLyoKKyAgICAgICAvKgogICAgICAgICAgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PlxuIik7CiAgICAgICAgICAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjwhRE9DVFlQRSB0ZXN0c3VpdGUgU1lTVEVNIFwidGVzdF9zdWl0ZS5kdGRcIj5cbiIpOwotCSAgICAKLSAgICAgICAgICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPCEtLSBJRCBhcmUgZGVmaW5lZCBhczogdGVzdCBzdWl0ZTogdGVzdCBjYXNlIDogbG9jYWwgaWQtLT5cbiIpOyAgICAgICAgCi0JICAgICovCiAKLQkgICAgVGVzdFN1aXRlIG15VGVzdFN1aXRlID0gKFRlc3RTdWl0ZSl0ZXN0U3VpdGVIYXNoLmdldCggdGVzdFN1aXRlSWQgKTsgCi0JICAgIGlmICggbXlUZXN0U3VpdGUgPT0gbnVsbCApCi0JICAgIHsKLQkJU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjogSW5mb3JtYXRpb24gZm9yIFRlc3RTdWl0ZSBJZCA6ICIgKyB0ZXN0U3VpdGVJZCArICIgZG9lc24ndCBleGlzdCIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JICAgIH0KLQkgICAgU3RyaW5nIHRlc3RTdWl0ZU5hbWUgPSBteVRlc3RTdWl0ZS5nZXROYW1lKCk7Ci0JICAgIFN0cmluZyB0ZXN0U3VpdGVEZXNjcmlwdGlvbiA9IG15VGVzdFN1aXRlLmdldERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjwhLS0gSUQgYXJlIGRlZmluZWQgYXM6IHRlc3Qgc3VpdGU6IHRlc3QgY2FzZSA6IGxvY2FsIGlkLS0+XG4iKTsKKyAgICAgICAgKi8KKworICAgICAgICBUZXN0U3VpdGUgbXlUZXN0U3VpdGUgPSAoVGVzdFN1aXRlKXRlc3RTdWl0ZUhhc2guZ2V0KCB0ZXN0U3VpdGVJZCApOworICAgICAgICBpZiAoIG15VGVzdFN1aXRlID09IG51bGwgKQorICAgICAgICB7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6IEluZm9ybWF0aW9uIGZvciBUZXN0U3VpdGUgSWQgOiAiICsgdGVzdFN1aXRlSWQgKyAiIGRvZXNuJ3QgZXhpc3QiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIFN0cmluZyB0ZXN0U3VpdGVOYW1lID0gbXlUZXN0U3VpdGUuZ2V0TmFtZSgpOworICAgICAgICBTdHJpbmcgdGVzdFN1aXRlRGVzY3JpcHRpb24gPSBteVRlc3RTdWl0ZS5nZXREZXNjcmlwdGlvbigpOwogCiAgICAgICAgICAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjx0ZXN0c3VpdGU+XG4iICk7CiAgICAgICAgICAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIiAgPGlkPiAiICsgdGVzdFN1aXRlSWQgKyAiIDwvaWQ+XG4iKTsKIAotCSAgICBpZiAoIXRlc3RTdWl0ZU5hbWUuZXF1YWxzKCBSZXBvcnRlckNvbnN0YW50cy5OQSApICkKLQkgICAgewotCQkgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8bmFtZT4iICsgdGVzdFN1aXRlTmFtZS50cmltKCkgKyAiPC9uYW1lPlxuIik7Ci0JICAgIH0KLQkgICAgaWYgKCF0ZXN0U3VpdGVEZXNjcmlwdGlvbi5lcXVhbHMoIFJlcG9ydGVyQ29uc3RhbnRzLk5BICkgKQotCSAgICB7Ci0JCSAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjxkZXNjcmlwdGlvbj48IVtDREFUQVsiICsgdGVzdFN1aXRlRGVzY3JpcHRpb24gKyAiXV0+PC9kZXNjcmlwdGlvbj5cbiIpOwotCSAgICB9CisgICAgICAgIGlmICghdGVzdFN1aXRlTmFtZS5lcXVhbHMoIFJlcG9ydGVyQ29uc3RhbnRzLk5BICkgKQorICAgICAgICB7CisgICAgICAgICAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjxuYW1lPiIgKyB0ZXN0U3VpdGVOYW1lLnRyaW0oKSArICI8L25hbWU+XG4iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRlc3RTdWl0ZURlc2NyaXB0aW9uLmVxdWFscyggUmVwb3J0ZXJDb25zdGFudHMuTkEgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyIgKyB0ZXN0U3VpdGVEZXNjcmlwdGlvbiArICJdXT48L2Rlc2NyaXB0aW9uPlxuIik7CisgICAgICAgIH0KIAotCSAgICBIYXNodGFibGUgdGVzdEhhc2ggPSBteVRlc3RTdWl0ZS5nZXRUZXN0SGFzaCggKTsKLQkgICAgCi0JICAgIFZlY3RvciB0ZXN0SWRWZWN0b3IgPSBteVRlc3RTdWl0ZS5nZXRUZXN0SWRWZWN0b3IoICk7CisgICAgICAgIEhhc2h0YWJsZSB0ZXN0SGFzaCA9IG15VGVzdFN1aXRlLmdldFRlc3RIYXNoKCApOwogCi0JICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPHRlc3RzPlxuIik7Ci0JICAgIGZvciAoIGludCB0aT0wOyB0aTwgdGVzdElkVmVjdG9yLnNpemUoKTsgdGkrKyApCi0JICAgIHsKKyAgICAgICAgVmVjdG9yIHRlc3RJZFZlY3RvciA9IG15VGVzdFN1aXRlLmdldFRlc3RJZFZlY3RvciggKTsKIAotCQlTdHJpbmcgdGVzdElkID0gKFN0cmluZyl0ZXN0SWRWZWN0b3IuZWxlbWVudEF0KHRpICk7Ci0JCVRlc3QgbXlUZXN0ID0gKFRlc3QpdGVzdEhhc2guZ2V0KCB0ZXN0SWQudHJpbSgpICk7Ci0JCVN0cmluZyB0ZXN0TmFtZSA9IG15VGVzdC5nZXROYW1lKCk7Ci0JCVN0cmluZyB0ZXN0RGVzY3JpcHRpb24gPSBteVRlc3QuZ2V0RGVzY3JpcHRpb24oKTsKLQkJU3RyaW5nIHRlc3RTdGF0dXMgPSBteVRlc3QuZ2V0U3RhdHVzKCk7Ci0JCVN0cmluZyB0ZXN0U3RhdHVzRGVzY3JpcHRpb24gPSBteVRlc3QuZ2V0U3RhdHVzRGVzY3JpcHRpb24oKTsKKyAgICAgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8dGVzdHM+XG4iKTsKKyAgICAgICAgZm9yICggaW50IHRpPTA7IHRpPCB0ZXN0SWRWZWN0b3Iuc2l6ZSgpOyB0aSsrICkKKyAgICAgICAgewogCi0JCVN0cmluZyB0ZXN0RXhwZWN0ZWQ9IG15VGVzdC5nZXRFeHBlY3RlZCggKTsKLQkJU3RyaW5nIHRlc3RBY3R1YWw9IG15VGVzdC5nZXRBY3R1YWwoICk7CisgICAgICAgIFN0cmluZyB0ZXN0SWQgPSAoU3RyaW5nKXRlc3RJZFZlY3Rvci5lbGVtZW50QXQodGkgKTsKKyAgICAgICAgVGVzdCBteVRlc3QgPSAoVGVzdCl0ZXN0SGFzaC5nZXQoIHRlc3RJZC50cmltKCkgKTsKKyAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gbXlUZXN0LmdldE5hbWUoKTsKKyAgICAgICAgU3RyaW5nIHRlc3REZXNjcmlwdGlvbiA9IG15VGVzdC5nZXREZXNjcmlwdGlvbigpOworICAgICAgICBTdHJpbmcgdGVzdFN0YXR1cyA9IG15VGVzdC5nZXRTdGF0dXMoKTsKKyAgICAgICAgU3RyaW5nIHRlc3RTdGF0dXNEZXNjcmlwdGlvbiA9IG15VGVzdC5nZXRTdGF0dXNEZXNjcmlwdGlvbigpOwogCi0JCXhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPHRlc3Q+XG4iKTsKKyAgICAgICAgU3RyaW5nIHRlc3RFeHBlY3RlZD0gbXlUZXN0LmdldEV4cGVjdGVkKCApOworICAgICAgICBTdHJpbmcgdGVzdEFjdHVhbD0gbXlUZXN0LmdldEFjdHVhbCggKTsKKworICAgICAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjx0ZXN0PlxuIik7CiAgICAgICAgICAgICAgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8aWQ+IiArIHRlc3RJZCArICI8L2lkPlxuIik7Ci0JCi0JCWlmICghdGVzdE5hbWUuZXF1YWxzKCBSZXBvcnRlckNvbnN0YW50cy5OQSApICkKLQkJewotCQkgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8bmFtZT4iICsgdGVzdE5hbWUgKyAiPC9uYW1lPlxuIik7Ci0JCX0KIAotCQlpZiAoIXRlc3REZXNjcmlwdGlvbi5lcXVhbHMoIFJlcG9ydGVyQ29uc3RhbnRzLk5BICkgKQotCQl7Ci0JCSAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjxkZXNjcmlwdGlvbj48IVtDREFUQVsiICsgdGVzdERlc2NyaXB0aW9uICsgIl1dPjwvZGVzY3JpcHRpb24+XG4iKTsKLQkJfQotCQlpZiAoIXRlc3RTdGF0dXMuZXF1YWxzKCBSZXBvcnRlckNvbnN0YW50cy5PUFRJT05BTCApICkKLQkJewotCQkJaWYgKCF0ZXN0U3RhdHVzRGVzY3JpcHRpb24uZXF1YWxzKCBSZXBvcnRlckNvbnN0YW50cy5PUFRJT05BTCApICkKLQkJCXsKLQkJCSAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjxzdGF0dXMgdmFsdWU9XCIiICsgdGVzdFN0YXR1cyArICJcIj48IVtDREFUQVsiICsgdGVzdFN0YXR1c0Rlc2NyaXB0aW9uICsgIl1dPjwvc3RhdHVzPlxuIik7Ci0JCQl9Ci0JCQllbHNlIGlmICggKCB0ZXN0RXhwZWN0ZWQgIT0gbnVsbCApICYmICggdGVzdEFjdHVhbCAhPSBudWxsICkgKSAKLQkJCXsKLQkJCSAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjxzdGF0dXMgdmFsdWU9XCIiICsgdGVzdFN0YXR1cyArICJcIj4gPGV4cGVjdGVkPjwhW0NEQVRBWyIgKyB0ZXN0RXhwZWN0ZWQgKyAiXV0+PC9leHBlY3RlZD48YWN0dWFsPjwhW0NEQVRBWyIgKyB0ZXN0QWN0dWFsICsgICAiXV0+PC9hY3R1YWw+PC9zdGF0dXM+XG4iKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPHN0YXR1cyB2YWx1ZT1cIiIgKyB0ZXN0U3RhdHVzICsgIlwiPiIgKyAiPC9zdGF0dXM+XG4iKTsKLQkJCX0KLQkJfQorICAgICAgICBpZiAoIXRlc3ROYW1lLmVxdWFscyggUmVwb3J0ZXJDb25zdGFudHMuTkEgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPG5hbWU+IiArIHRlc3ROYW1lICsgIjwvbmFtZT5cbiIpOworICAgICAgICB9CiAKLQkJSGFzaHRhYmxlIHRlc3RDYXNlSGFzaCA9IG15VGVzdC5nZXRUZXN0Q2FzZUhhc2goKTsKLQkJVmVjdG9yIHRlc3RDYXNlSWRWZWN0b3IgPSBteVRlc3QuZ2V0VGVzdENhc2VJZFZlY3RvciggKTsKLQkJCi0JCS8qCi0JCWlmICggdGVzdENhc2VJZFZlY3Rvci5zaXplKCApIDwgMSApCi0JCXsKLQkJCS8vIFRoaXMgbWVhbnMgdGhlcmUgYXJlIG5vIHRlc3QgY2FzZXMgYW5kIFRlc3QgaGFzIHRoZSBzdGF0dXMgaW5mbwotCQkJeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8L3Rlc3Q+XG4iKTsKKyAgICAgICAgaWYgKCF0ZXN0RGVzY3JpcHRpb24uZXF1YWxzKCBSZXBvcnRlckNvbnN0YW50cy5OQSApICkKKyAgICAgICAgeworICAgICAgICAgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIiArIHRlc3REZXNjcmlwdGlvbiArICJdXT48L2Rlc2NyaXB0aW9uPlxuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0ZXN0U3RhdHVzLmVxdWFscyggUmVwb3J0ZXJDb25zdGFudHMuT1BUSU9OQUwgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghdGVzdFN0YXR1c0Rlc2NyaXB0aW9uLmVxdWFscyggUmVwb3J0ZXJDb25zdGFudHMuT1BUSU9OQUwgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8c3RhdHVzIHZhbHVlPVwiIiArIHRlc3RTdGF0dXMgKyAiXCI+PCFbQ0RBVEFbIiArIHRlc3RTdGF0dXNEZXNjcmlwdGlvbiArICJdXT48L3N0YXR1cz5cbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoICggdGVzdEV4cGVjdGVkICE9IG51bGwgKSAmJiAoIHRlc3RBY3R1YWwgIT0gbnVsbCApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjxzdGF0dXMgdmFsdWU9XCIiICsgdGVzdFN0YXR1cyArICJcIj4gPGV4cGVjdGVkPjwhW0NEQVRBWyIgKyB0ZXN0RXhwZWN0ZWQgKyAiXV0+PC9leHBlY3RlZD48YWN0dWFsPjwhW0NEQVRBWyIgKyB0ZXN0QWN0dWFsICsgICAiXV0+PC9hY3R1YWw+PC9zdGF0dXM+XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPHN0YXR1cyB2YWx1ZT1cIiIgKyB0ZXN0U3RhdHVzICsgIlwiPiIgKyAiPC9zdGF0dXM+XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0JCX0KLQkJKi8KLQkJaWYgKCB0ZXN0Q2FzZUlkVmVjdG9yLnNpemUoKSA+PSAxICkKLQkJewotCQkJeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8dGVzdGNhc2VzPlxuIik7Ci0JCQotCQkgICAgIGZvciAoIGludCB0Yz0wOyB0YzwgdGVzdENhc2VJZFZlY3Rvci5zaXplKCk7IHRjKysgKQotCQkgICAgIHsKLQkJCVN0cmluZyB0ZXN0Q2FzZUlkID0gKFN0cmluZyl0ZXN0Q2FzZUlkVmVjdG9yLmVsZW1lbnRBdCggdGMgKTsKLQkJCVRlc3RDYXNlIG15VGVzdENhc2UgPSAoVGVzdENhc2UpdGVzdENhc2VIYXNoLmdldCggdGVzdENhc2VJZC50cmltKCkgKTsKKyAgICAgICAgSGFzaHRhYmxlIHRlc3RDYXNlSGFzaCA9IG15VGVzdC5nZXRUZXN0Q2FzZUhhc2goKTsKKyAgICAgICAgVmVjdG9yIHRlc3RDYXNlSWRWZWN0b3IgPSBteVRlc3QuZ2V0VGVzdENhc2VJZFZlY3RvciggKTsKIAotCQkJU3RyaW5nIHRlc3RDYXNlTmFtZSA9IG15VGVzdENhc2UuZ2V0TmFtZSgpOwotCQkJU3RyaW5nIHRlc3RDYXNlRGVzY3JpcHRpb24gPSBteVRlc3RDYXNlLmdldERlc2NyaXB0aW9uKCk7Ci0JCQlTdHJpbmcgdGVzdENhc2VTdGF0dXMgPSBteVRlc3RDYXNlLmdldFN0YXR1cygpOwotCQkJU3RyaW5nIHRlc3RDYXNlU3RhdHVzRGVzY3JpcHRpb24gPSBteVRlc3RDYXNlLmdldFN0YXR1c0Rlc2NyaXB0aW9uKCk7Ci0JCQlTdHJpbmcgdGVzdENhc2VFeHBlY3RlZCA9IG15VGVzdENhc2UuZ2V0RXhwZWN0ZWQoKTsKLQkJCVN0cmluZyB0ZXN0Q2FzZUFjdHVhbCA9IG15VGVzdENhc2UuZ2V0QWN0dWFsKCk7CisgICAgICAgIC8qCisgICAgICAgIGlmICggdGVzdENhc2VJZFZlY3Rvci5zaXplKCApIDwgMSApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhlcmUgYXJlIG5vIHRlc3QgY2FzZXMgYW5kIFRlc3QgaGFzIHRoZSBzdGF0dXMgaW5mbworICAgICAgICAgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8L3Rlc3Q+XG4iKTsKIAotCQkJeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8dGVzdGNhc2U+XG4iKTsKLQkJCXhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPGlkPiAiICsgdGVzdENhc2VJZCArICI8L2lkPlxuIik7Ci0JCQlpZiAoIXRlc3RDYXNlTmFtZS5lcXVhbHMoIFJlcG9ydGVyQ29uc3RhbnRzLk5BICkgKQotCQkJewotCQkJICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPG5hbWU+IiArIHRlc3RDYXNlTmFtZSArICI8L25hbWU+XG4iKTsKLQkJCX0KKyAgICAgICAgfQorICAgICAgICAqLworICAgICAgICBpZiAoIHRlc3RDYXNlSWRWZWN0b3Iuc2l6ZSgpID49IDEgKQorICAgICAgICB7CisgICAgICAgICAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjx0ZXN0Y2FzZXM+XG4iKTsKIAotCQkJaWYgKCF0ZXN0Q2FzZURlc2NyaXB0aW9uLmVxdWFscyggUmVwb3J0ZXJDb25zdGFudHMuTkEgKSApCi0JCQl7Ci0JCQkgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIiArIHRlc3RDYXNlRGVzY3JpcHRpb24gKyAiXV0+PC9kZXNjcmlwdGlvbj5cbiIpOwotCQkJfQotCQkJaWYgKCF0ZXN0Q2FzZVN0YXR1c0Rlc2NyaXB0aW9uLmVxdWFscyggUmVwb3J0ZXJDb25zdGFudHMuTkEgKSApCi0JCQl7Ci0JCQkgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8c3RhdHVzIHZhbHVlPVwiIiArIHRlc3RDYXNlU3RhdHVzICsgIlwiPjwhW0NEQVRBWyIgKyB0ZXN0Q2FzZVN0YXR1c0Rlc2NyaXB0aW9uICsgIl1dPjwvc3RhdHVzPlxuIik7Ci0JCQl9Ci0JCQllbHNlIGlmICggKCB0ZXN0Q2FzZUV4cGVjdGVkICE9IG51bGwgKSAmJiAoIHRlc3RDYXNlQWN0dWFsICE9IG51bGwgKSApIAotCQkJewotCQkJICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPHN0YXR1cyB2YWx1ZT1cIiIgKyB0ZXN0Q2FzZVN0YXR1cyArICJcIj4gPGV4cGVjdGVkPjwhW0NEQVRBWyIgKyB0ZXN0Q2FzZUV4cGVjdGVkICsgIl1dPjwvZXhwZWN0ZWQ+PGFjdHVhbD48IVtDREFUQVsiICsgdGVzdENhc2VBY3R1YWwgKyAgICJdXT48L2FjdHVhbD48L3N0YXR1cz5cbiIpOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPHN0YXR1cyB2YWx1ZT1cIiIgKyB0ZXN0Q2FzZVN0YXR1cyArICJcIj4iICsgIjwvc3RhdHVzPlxuIik7Ci0JCQl9Ci0JCQl4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjwvdGVzdGNhc2U+XG4iKTsKKyAgICAgICAgICAgICBmb3IgKCBpbnQgdGM9MDsgdGM8IHRlc3RDYXNlSWRWZWN0b3Iuc2l6ZSgpOyB0YysrICkKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmcgdGVzdENhc2VJZCA9IChTdHJpbmcpdGVzdENhc2VJZFZlY3Rvci5lbGVtZW50QXQoIHRjICk7CisgICAgICAgICAgICBUZXN0Q2FzZSBteVRlc3RDYXNlID0gKFRlc3RDYXNlKXRlc3RDYXNlSGFzaC5nZXQoIHRlc3RDYXNlSWQudHJpbSgpICk7CisKKyAgICAgICAgICAgIFN0cmluZyB0ZXN0Q2FzZU5hbWUgPSBteVRlc3RDYXNlLmdldE5hbWUoKTsKKyAgICAgICAgICAgIFN0cmluZyB0ZXN0Q2FzZURlc2NyaXB0aW9uID0gbXlUZXN0Q2FzZS5nZXREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgU3RyaW5nIHRlc3RDYXNlU3RhdHVzID0gbXlUZXN0Q2FzZS5nZXRTdGF0dXMoKTsKKyAgICAgICAgICAgIFN0cmluZyB0ZXN0Q2FzZVN0YXR1c0Rlc2NyaXB0aW9uID0gbXlUZXN0Q2FzZS5nZXRTdGF0dXNEZXNjcmlwdGlvbigpOworICAgICAgICAgICAgU3RyaW5nIHRlc3RDYXNlRXhwZWN0ZWQgPSBteVRlc3RDYXNlLmdldEV4cGVjdGVkKCk7CisgICAgICAgICAgICBTdHJpbmcgdGVzdENhc2VBY3R1YWwgPSBteVRlc3RDYXNlLmdldEFjdHVhbCgpOworCisgICAgICAgICAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjx0ZXN0Y2FzZT5cbiIpOworICAgICAgICAgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8aWQ+ICIgKyB0ZXN0Q2FzZUlkICsgIjwvaWQ+XG4iKTsKKyAgICAgICAgICAgIGlmICghdGVzdENhc2VOYW1lLmVxdWFscyggUmVwb3J0ZXJDb25zdGFudHMuTkEgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8bmFtZT4iICsgdGVzdENhc2VOYW1lICsgIjwvbmFtZT5cbiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXRlc3RDYXNlRGVzY3JpcHRpb24uZXF1YWxzKCBSZXBvcnRlckNvbnN0YW50cy5OQSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjxkZXNjcmlwdGlvbj48IVtDREFUQVsiICsgdGVzdENhc2VEZXNjcmlwdGlvbiArICJdXT48L2Rlc2NyaXB0aW9uPlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXRlc3RDYXNlU3RhdHVzRGVzY3JpcHRpb24uZXF1YWxzKCBSZXBvcnRlckNvbnN0YW50cy5OQSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjxzdGF0dXMgdmFsdWU9XCIiICsgdGVzdENhc2VTdGF0dXMgKyAiXCI+PCFbQ0RBVEFbIiArIHRlc3RDYXNlU3RhdHVzRGVzY3JpcHRpb24gKyAiXV0+PC9zdGF0dXM+XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCAoIHRlc3RDYXNlRXhwZWN0ZWQgIT0gbnVsbCApICYmICggdGVzdENhc2VBY3R1YWwgIT0gbnVsbCApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjxzdGF0dXMgdmFsdWU9XCIiICsgdGVzdENhc2VTdGF0dXMgKyAiXCI+IDxleHBlY3RlZD48IVtDREFUQVsiICsgdGVzdENhc2VFeHBlY3RlZCArICJdXT48L2V4cGVjdGVkPjxhY3R1YWw+PCFbQ0RBVEFbIiArIHRlc3RDYXNlQWN0dWFsICsgICAiXV0+PC9hY3R1YWw+PC9zdGF0dXM+XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjxzdGF0dXMgdmFsdWU9XCIiICsgdGVzdENhc2VTdGF0dXMgKyAiXCI+IiArICI8L3N0YXR1cz5cbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeG1sUmVwcmVzZW50YXRpb24uYXBwZW5kKCI8L3Rlc3RjYXNlPlxuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPC90ZXN0Y2FzZXM+XG4iKTsKIAotCQl9CisgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPC90ZXN0PlxuIik7Ci0JICAgICB9Ci0JICAgICAKKyAgICAgICAgIH0KKwogICAgICAgICAgICAgICB4bWxSZXByZXNlbnRhdGlvbi5hcHBlbmQoIjwvdGVzdHM+XG4iICk7CiAgICAgICAgICAgICAgIHhtbFJlcHJlc2VudGF0aW9uLmFwcGVuZCgiPC90ZXN0c3VpdGU+XG4iICk7CiAgICAgICAgICAgICAgYm9vbGVhbiB3cml0ZVJlc3VsdCA9ICB3cml0ZVhNTEZpbGUoeG1sUmVwcmVzZW50YXRpb24sIGZvdXRwdXQpOwotCQkvLyBOb3cgcmVtb3ZlIFRlc3RTdWl0ZSBmcm9tIEhhc2h0YWJsZTogUEVORElORyAKLQkgICAgIGlmICggd3JpdGVSZXN1bHQ9PXRydWUgKQotCSAgICAgewotCQkvLyBJZiB3ZSBjb3VsZCB3cml0ZSB0ZWggY29udGVudCBwcm9wZXJseSB0aGVuIHJlbW92ZSB0aGUgVGVzdFN1aXRlIGZyb20gSGFzaHRhYmxlCi0JICAgICB0ZXN0U3VpdGVIYXNoLnJlbW92ZSggdGVzdFN1aXRlSWQudHJpbSgpICk7Ci0JICAgICB9Ci0JICAgIHJldHVybiB3cml0ZVJlc3VsdDsKKyAgICAgICAgLy8gTm93IHJlbW92ZSBUZXN0U3VpdGUgZnJvbSBIYXNodGFibGU6IFBFTkRJTkcKKyAgICAgICAgIGlmICggd3JpdGVSZXN1bHQ9PXRydWUgKQorICAgICAgICAgeworICAgICAgICAvLyBJZiB3ZSBjb3VsZCB3cml0ZSB0ZWggY29udGVudCBwcm9wZXJseSB0aGVuIHJlbW92ZSB0aGUgVGVzdFN1aXRlIGZyb20gSGFzaHRhYmxlCisgICAgICAgICB0ZXN0U3VpdGVIYXNoLnJlbW92ZSggdGVzdFN1aXRlSWQudHJpbSgpICk7CisgICAgICAgICB9CisgICAgICAgIHJldHVybiB3cml0ZVJlc3VsdDsKICAgICAgICAgfSBjYXRjaCAoamF2YS5sYW5nLkV4Y2VwdGlvbiBleCl7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gd3JpdGVYTUxGaWxlKFN0cmluZ0J1ZmZlciB4bWxTdHJpbmdCdWZmZXIpewogICAgICAgICBQcmludFdyaXRlciB3cml0ZXIgPSBudWxsOwogICAgICAgICB0cnl7CkBAIC04ODAsMjEgKzg4MCwyMSBAQAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgY2xvc2Uod3JpdGVyKTsKLSAgICAgICAgfSAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7ICAgICAgICAKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBwcml2YXRlIGJvb2xlYW4gd3JpdGVYTUxGaWxlKFN0cmluZ0J1ZmZlciB4bWxTdHJpbmdCdWZmZXIsIEZpbGVPdXRwdXRTdHJlYW0gIGZvdXQpewogICAgICAgICB0cnl7Ci0JICAgIGZvdXQud3JpdGUoIHhtbFN0cmluZ0J1ZmZlci50b1N0cmluZygpLmdldEJ5dGVzKCkgKTsKLQkgICAgZm91dC5mbHVzaCggKTsKKyAgICAgICAgZm91dC53cml0ZSggeG1sU3RyaW5nQnVmZmVyLnRvU3RyaW5nKCkuZ2V0Qnl0ZXMoKSApOworICAgICAgICBmb3V0LmZsdXNoKCApOwogICAgICAgICB9IGNhdGNoKGphdmEuaW8uSU9FeGNlcHRpb24gZXgpewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gICAgCi0gICAgICAgIHJldHVybiB0cnVlOyAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotIAorCiAgICAgcHVibGljIHZvaWQgcnVuKCl7CiAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJSRVBPUlRFUlx0IEluc2lkZSBydW4iKTsKICAgICAgICAgZ2VuZXJhdGVWYWxpZFJlcG9ydCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9SZXBvcnRlckNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9SZXBvcnRlckNsaWVudC5qYXZhCmluZGV4IDVlZGI2OTYuLmYzMzIyYjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvUmVwb3J0ZXJDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGVyL1JlcG9ydGVyQ2xpZW50LmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIAogcHVibGljIGNsYXNzIFJlcG9ydGVyQ2xpZW50ewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKXsKQEAgLTM0LDIyICszNCwyMiBAQAogICAgICAgICAgICAgZWNobyhhcmdzWzFdKyIgaXMgdGhlIHRlc3QgZGVzY3JpcHRpb24iKTsKICAgICAgICAgICAgIGRlZmF1bHRfZGVzYyA9IGFyZ3NbMV07CiAgICAgICAgIH0KLQlpbnQgbnVtVGVzdHMgPSAxOwotCWlmIChhcmdzLmxlbmd0aD49MykgewotCSAgICBudW1UZXN0cyA9IEludGVnZXIucGFyc2VJbnQoYXJnc1syXSk7Ci0JfQorICAgIGludCBudW1UZXN0cyA9IDE7CisgICAgaWYgKGFyZ3MubGVuZ3RoPj0zKSB7CisgICAgICAgIG51bVRlc3RzID0gSW50ZWdlci5wYXJzZUludChhcmdzWzJdKTsKKyAgICB9CiAKIAogICAgICAgICBlY2hvKCJhZGRpbmcgZGVzY3JpcHRpb24uLi4iKTsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbihkZWZhdWx0X2Rlc2MpOwogICAgICAgICBlY2hvKCJhZGRpbmcgc3RhdHVzLi4uIik7Ci0JaWYgKG51bVRlc3RzPT0xKSB7Ci0JCSBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkRJRF9OT1RfUlVOKTsKLQl9IGVsc2UgewotCSAgICAgZm9yIChpbnQgaT0wO2k8bnVtVGVzdHM7IGkrKykgewotICAgICAgICAJICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdKyItIisoaSsxKSwgc3RhdC5ESURfTk9UX1JVTik7Ci0JICAgICB9Ci0JfQorICAgIGlmIChudW1UZXN0cz09MSkgeworICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5ESURfTk9UX1JVTik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgIGZvciAoaW50IGk9MDtpPG51bVRlc3RzOyBpKyspIHsKKyAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSsiLSIrKGkrMSksIHN0YXQuRElEX05PVF9SVU4pOworICAgICAgICAgfQorICAgIH0KIAogICAgICAgICBlY2hvKCJwcmludGluZyBzdW1tYXJ5Li4uIik7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHVzYWdlKCl7CiAgICAgICAgU3RyaW5nIHVzZz0iVXNhZ2U6IisKICAgICAgICAgICAgIlx0UmVwb3J0ZXJDbGllbnQgPHRlc3QgbmFtZT4gWzx0ZXN0IGRlc2NyaXB0aW9uPl0iKwotICAgICAgICAgICAiXHROb3RlOlRlc3QgZGVzY3JpcHRpb24gaXMgbm90IHJlcXVpcmVkIGJ1dCByZWNvbW1lbmRlZCI7IAorICAgICAgICAgICAiXHROb3RlOlRlc3QgZGVzY3JpcHRpb24gaXMgbm90IHJlcXVpcmVkIGJ1dCByZWNvbW1lbmRlZCI7CiAgICAgICAgZWNobyh1c2cpOwogICAgIH0KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgZWNobyhTdHJpbmcgbXNnKXsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvUmVwb3J0ZXJDb25zdGFudHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvUmVwb3J0ZXJDb25zdGFudHMuamF2YQppbmRleCBkMTQ4NzJkLi44NTI4ZWZmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGVyL1JlcG9ydGVyQ29uc3RhbnRzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9SZXBvcnRlckNvbnN0YW50cy5qYXZhCkBAIC0xOCwxMCArMTgsMTAgQEAKIAogcHVibGljIGludGVyZmFjZSBSZXBvcnRlckNvbnN0YW50cwogewotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BPSJOQSI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElEX05PVF9SVU49ImRpZF9ub3RfcnVuIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVNTPSJwYXNzIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGQUlMPSJmYWlsIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPUFRJT05BTD0iIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQT0iTkEiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERJRF9OT1RfUlVOPSJkaWRfbm90X3J1biI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFTUz0icGFzcyI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkFJTD0iZmFpbCI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BUSU9OQUw9IiI7CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvU2ltcGxlUmVwb3J0ZXJBZGFwdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGVyL1NpbXBsZVJlcG9ydGVyQWRhcHRlci5qYXZhCmluZGV4IDY5M2Q3NzAuLjcwMWEyOGMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvU2ltcGxlUmVwb3J0ZXJBZGFwdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9TaW1wbGVSZXBvcnRlckFkYXB0ZXIuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIHJlc3VsdEZpbGU9InRlc3RfcmVzdWx0cyI7CiAgICAgcHJpdmF0ZSBib29sZWFuIGlzRmlsZVNldD1mYWxzZTsKIAotICAgIAorCiAgICAgcHVibGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpICB7CiAgICAgICAgIHRlc3RTdWl0ZU5hbWUgPSAidW5kZWZpbmVkIjsKICAgICAgICAgdGVzdFN1aXRlSUQgPSBudWxsOwpAQCAtNTAsOCArNTAsOCBAQAogICAgICAgICB9CiAgICAgICAgIGNhdGNoKEV4Y2VwdGlvbiBleCkgeyB9CiAgICAgfQotICAgCi0gICAgCisKKwogICAgIHB1YmxpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoU3RyaW5nIHdzX3Jvb3QpICAgICB7CiAgICAgICAgIHRlc3RTdWl0ZU5hbWUgPSAidW5kZWZpbmVkIjsKICAgICAgICAgdGVzdFN1aXRlSUQgPSBudWxsOwpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICB9CiAgICAgICAgIGNhdGNoKEV4Y2VwdGlvbiBleCkgeyB9CiAgICAgfQotICAgIAorCiAgICAgLy91c2VkIGJ5IHdlYnJ1bm5lcgogICAgIHB1YmxpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoU3RyaW5nIHJlc3VsdEZpbGVQYXRoLGJvb2xlYW4gaXNSZXN1bHRGaWxlU2V0KXsKICAgICAgICAgdHJ5ewpAQCAtNzIsOCArNzIsOCBAQAogICAgICAgICAgICAgdGhpcy5yZXN1bHRGaWxlPXJlc3VsdEZpbGVQYXRoOwogICAgICAgICB9Y2F0Y2goIEV4Y2VwdGlvbiBleCApeyB9CiAgICAgfQotICAgIAotICAgIAorCisKIAogICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBhZGRTdGF0dXMoU3RyaW5nIHMsIFN0cmluZyBzdGF0dXMpICAgIHsKICAgICAgICAgaWYoIHRlc3RTdWl0ZU5hbWUuY29tcGFyZVRvKCJ1bmRlZmluZWQiKSA9PSAwICkgewpAQCAtOTAsMTEgKzkwLDExIEBACiAgICAgICAgICAgICB0ZXN0Q2FzZVN0YXR1cyA9IG5ldyBIYXNoTWFwKDUpOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IGJsYW5rSW5kZXggPSBzLmluZGV4T2YoIiAiKTsgICAgICAgIAorICAgICAgICBpbnQgYmxhbmtJbmRleCA9IHMuaW5kZXhPZigiICIpOwogICAgICAgICBTdHJpbmcga2V5ID0gczsKICAgICAgICAgaWYgKGJsYW5rSW5kZXghPS0xKXsKICAgICAgICAgICAgIGtleSA9IHMuc3Vic3RyaW5nKHMuaW5kZXhPZiggIiAiICkpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgICAgIGlmKGRlYnVnKQogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWYWx1ZSBvZiBrZXkgaXM6IitrZXkpOwogCkBAIC0xMjEsMTQgKzEyMSwxNCBAQAogICAgICAgICAgICAgb3V0cHV0RGlyID0gZWp0ZV9ob21lICsgd3NfaG9tZTsKICAgICAgICAgICAgIHJlcG9ydGVyID0gUmVwb3J0ZXIuZ2V0SW5zdGFuY2Uod3NfaG9tZSk7CiAgICAgICAgICAgICBpZihkZWJ1ZykKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdlbmVyYXRpbmcgcmVwb3J0IGF0IFx0IiArIG91dHB1dERpciArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR2VuZXJhdGluZyByZXBvcnQgYXQgXHQiICsgb3V0cHV0RGlyICsKICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGUuc2VwYXJhdG9yQ2hhciArICJ0ZXN0X3Jlc3VsdHMueG1sIik7CiAgICAgICAgICAgICByZXBvcnRlci5zZXRUZXN0U3VpdGUodGVzdFN1aXRlSUQsIHRlc3RTdWl0ZU5hbWUsIHRlc3RTdWl0ZURlc2NyaXB0aW9uKTsKICAgICAgICAgICAgIHJlcG9ydGVyLmFkZFRlc3QodGVzdFN1aXRlSUQsIHRlc3RTdWl0ZUlELCB0ZXN0U3VpdGVOYW1lKTsKICAgICAgICAgICAgIGtleVNldHMgPSB0ZXN0Q2FzZVN0YXR1cy5rZXlTZXQoKTsKICAgICAgICAgICAgIGtleVNldHNJVCA9IGtleVNldHMuaXRlcmF0b3IoKTsKICAgICAgICAgICAgIFN0cmluZyB0Y05hbWU7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaW50IHBhc3M9IDA7CiAgICAgICAgICAgICBpbnQgZmFpbCA9IDA7CiAgICAgICAgICAgICBpbnQgZF9uX3IgPSAwOwpAQCAtMTM3LDcgKzEzNyw3IEBACiAgICAgICAgICAgICB3aGlsZSgga2V5U2V0c0lULmhhc05leHQoKSApewogICAgICAgICAgICAgICAgIHRjTmFtZSA9IGtleVNldHNJVC5uZXh0KCkudG9TdHJpbmcoKTsKICAgICAgICAgICAgICAgICBzdGF0dXMgPSAgdGVzdENhc2VTdGF0dXMuZ2V0KCB0Y05hbWUgKS50b1N0cmluZygpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5lcXVhbHNJZ25vcmVDYXNlKFBBU1MpKXsKICAgICAgICAgICAgICAgICAgICAgcGFzcysrOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZihzdGF0dXMuZXF1YWxzSWdub3JlQ2FzZShESURfTk9UX1JVTikpewpAQCAtMTQ1LDcgKzE0NSw3IEBACiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgZmFpbCsrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLVx0ICIgKyB0Y05hbWUgKyAiOiAiICsgc3RhdHVzLnRvVXBwZXJDYXNlKCkgKyAiXHQtIik7CiAgICAgICAgICAgICAgICAgcmVwb3J0ZXIuYWRkVGVzdENhc2UoIHRlc3RTdWl0ZUlELCB0ZXN0U3VpdGVJRCwgdGNOYW1lICsgIklEIiwgdGNOYW1lICk7CiAgICAgICAgICAgICAgICAgcmVwb3J0ZXIuc2V0VGVzdENhc2VTdGF0dXMoIHRlc3RTdWl0ZUlELCB0ZXN0U3VpdGVJRCwgdGNOYW1lICsgIklEIiwgc3RhdHVzICk7CkBAIC0yMDIsMTIgKzIwMiwxMiBAQAogICAgICAgICB0ZXN0Q2FzZVN0YXR1cy5jbGVhcigpOwogICAgICAgICB0ZXN0U3VpdGVOYW1lID0gInVuZGVmaW5lZCI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICpBIGRlYWQgZnVuY3Rpb24uCiAgICAgICogSjJFRSBzZXJ2ZXIgc2VjdXJpdHkgY29udHJhaW50cyBkb24ndCBhbGxvdyB1c2Ugb2YgZXhlYwogICAgICAqLwotICAgIAorCiAgICAgcHVibGljIFByb3BlcnRpZXMgZ2V0RW52VmFycygpIHRocm93cyBUaHJvd2FibGUgewogICAgICAgICBQcm9jZXNzIHAgPSBudWxsOwogICAgICAgICBQcm9wZXJ0aWVzIGVudlZhcnMgPSBuZXcgUHJvcGVydGllcygpOwpAQCAtMjIwLDEwICsyMjAsMTAgQEAKICAgICAgICAgZWxzZSBpZiAoIChPUy5pbmRleE9mKCJudCIpID4gLTEpIHx8IChPUy5pbmRleE9mKCJ3aW5kb3dzIDIwMDAiKSA+IC0xKSApIHsKICAgICAgICAgICAgIHAgPSByLmV4ZWMoICJjbWQuZXhlIC9jIHNldCIgKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIHsgIAorICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHAgPSByLmV4ZWMoICJlbnYiICk7CiAgICAgICAgIH0KLSAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSAKKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPQogICAgICAgICAgICAgbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihwLmdldElucHV0U3RyZWFtKCkpKTsKICAgICAgICAgU3RyaW5nIGxpbmU7CiAgICAgICAgIHdoaWxlKCAobGluZSA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwgKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGVyL1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvVGVzdC5qYXZhCmluZGV4IGE1ODExZWYuLjBlMTgxNjAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvVGVzdC5qYXZhCkBAIC0xNywxMiArMTcsMTIgQEAKIHBhY2thZ2UgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlcjsKIAogLyoqCi0JQENsYXNzOiBUZXN0Ci0JQERlc2NyaXB0aW9uOiBDbGFzcyBob2xkaW5nIE9uZSBUZXN0IGluZm8uCi0JQEF1dGhvciA6IFJhbWVzaCBNYW5kYXZhCi0JQExhc3QgTW9kaWZpZWQgOkluaXRpYWwgY3JlYXRpb24gQnkgUmFtZXNoIG9uIDEwLzI0LzIwMDEKLQlATGFzdCBNb2RpZmllZCA6IEJ5IFJhbWVzaCBvbiAxLzIwLzIwMDIgLCBGb3IgcHJlc2VydmluZyBvcmRlciBvZiBlbnRyeSBvZiAKLQkJdGVzdGNhc2VzIHVzZWQgYSBzZXBhcmF0ZSB0ZXN0Q2FzZUlkVmVjdG9yCisgICAgQENsYXNzOiBUZXN0CisgICAgQERlc2NyaXB0aW9uOiBDbGFzcyBob2xkaW5nIE9uZSBUZXN0IGluZm8uCisgICAgQEF1dGhvciA6IFJhbWVzaCBNYW5kYXZhCisgICAgQExhc3QgTW9kaWZpZWQgOkluaXRpYWwgY3JlYXRpb24gQnkgUmFtZXNoIG9uIDEwLzI0LzIwMDEKKyAgICBATGFzdCBNb2RpZmllZCA6IEJ5IFJhbWVzaCBvbiAxLzIwLzIwMDIgLCBGb3IgcHJlc2VydmluZyBvcmRlciBvZiBlbnRyeSBvZgorICAgICAgICB0ZXN0Y2FzZXMgdXNlZCBhIHNlcGFyYXRlIHRlc3RDYXNlSWRWZWN0b3IKIAogKi8KIApAQCAtMzIsMTM2ICszMiwxMzYgQEAKIAogcHVibGljIGNsYXNzIFRlc3QKIHsKLQlwcml2YXRlIFN0cmluZyBpZDsKLQlwcml2YXRlIFN0cmluZyBuYW1lOwotCXByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOworICAgIHByaXZhdGUgU3RyaW5nIGlkOworICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CisgICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CiAKLQlwcml2YXRlIFN0cmluZyBzdGF0dXM7Ci0JcHJpdmF0ZSBTdHJpbmcgc3RhdHVzRGVzY3JpcHRpb247CisgICAgcHJpdmF0ZSBTdHJpbmcgc3RhdHVzOworICAgIHByaXZhdGUgU3RyaW5nIHN0YXR1c0Rlc2NyaXB0aW9uOwogCi0JcHJpdmF0ZSBTdHJpbmcgZXhwZWN0ZWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgYWN0dWFsOworICAgIHByaXZhdGUgU3RyaW5nIGV4cGVjdGVkOworICAgIHByaXZhdGUgU3RyaW5nIGFjdHVhbDsKIAotCUhhc2h0YWJsZSB0ZXN0Q2FzZUhhc2g7Ci0JVmVjdG9yIHRlc3RDYXNlSWRWZWN0b3I7IC8vIEFkZGVkIHRvIHByZXNlcnZlIG9yZGVyIG9mIGVudHJ5CisgICAgSGFzaHRhYmxlIHRlc3RDYXNlSGFzaDsKKyAgICBWZWN0b3IgdGVzdENhc2VJZFZlY3RvcjsgLy8gQWRkZWQgdG8gcHJlc2VydmUgb3JkZXIgb2YgZW50cnkKIAogCi0JcHVibGljIFRlc3QoIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjcmlwdGlvbiApCi0JewotCQl0aGlzLmlkID0gaWQ7Ci0JCXRoaXMubmFtZT0gbmFtZTsKLQkJdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotCQl0aGlzLnN0YXR1cyA9IFJlcG9ydGVyQ29uc3RhbnRzLk9QVElPTkFMOwotCQl0aGlzLnN0YXR1c0Rlc2NyaXB0aW9uPVJlcG9ydGVyQ29uc3RhbnRzLk9QVElPTkFMOwotCQl0aGlzLmV4cGVjdGVkID0gbnVsbDsKLQkJdGhpcy5hY3R1YWw9IG51bGw7Ci0JCXRlc3RDYXNlSGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLQkJdGVzdENhc2VJZFZlY3Rvcj0gbmV3IFZlY3RvcigpOwotCX0KLQlwdWJsaWMgVGVzdCggU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSApCi0JewotCQl0aGlzLmlkID0gaWQ7Ci0JCXRoaXMubmFtZT0gbmFtZTsKLQkJdGhpcy5kZXNjcmlwdGlvbiA9UmVwb3J0ZXJDb25zdGFudHMuTkEgOwotCQl0aGlzLnN0YXR1cyA9IFJlcG9ydGVyQ29uc3RhbnRzLk9QVElPTkFMOwotCQl0aGlzLnN0YXR1c0Rlc2NyaXB0aW9uPVJlcG9ydGVyQ29uc3RhbnRzLk9QVElPTkFMOwotCQl0aGlzLmV4cGVjdGVkID0gbnVsbDsKLQkJdGhpcy5hY3R1YWw9IG51bGw7Ci0JCXRlc3RDYXNlSGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLQkJdGVzdENhc2VJZFZlY3Rvcj0gbmV3IFZlY3RvcigpOwotCX0KKyAgICBwdWJsaWMgVGVzdCggU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2NyaXB0aW9uICkKKyAgICB7CisgICAgICAgIHRoaXMuaWQgPSBpZDsKKyAgICAgICAgdGhpcy5uYW1lPSBuYW1lOworICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgICAgIHRoaXMuc3RhdHVzID0gUmVwb3J0ZXJDb25zdGFudHMuT1BUSU9OQUw7CisgICAgICAgIHRoaXMuc3RhdHVzRGVzY3JpcHRpb249UmVwb3J0ZXJDb25zdGFudHMuT1BUSU9OQUw7CisgICAgICAgIHRoaXMuZXhwZWN0ZWQgPSBudWxsOworICAgICAgICB0aGlzLmFjdHVhbD0gbnVsbDsKKyAgICAgICAgdGVzdENhc2VIYXNoID0gbmV3IEhhc2h0YWJsZSgpOworICAgICAgICB0ZXN0Q2FzZUlkVmVjdG9yPSBuZXcgVmVjdG9yKCk7CisgICAgfQorICAgIHB1YmxpYyBUZXN0KCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lICkKKyAgICB7CisgICAgICAgIHRoaXMuaWQgPSBpZDsKKyAgICAgICAgdGhpcy5uYW1lPSBuYW1lOworICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID1SZXBvcnRlckNvbnN0YW50cy5OQSA7CisgICAgICAgIHRoaXMuc3RhdHVzID0gUmVwb3J0ZXJDb25zdGFudHMuT1BUSU9OQUw7CisgICAgICAgIHRoaXMuc3RhdHVzRGVzY3JpcHRpb249UmVwb3J0ZXJDb25zdGFudHMuT1BUSU9OQUw7CisgICAgICAgIHRoaXMuZXhwZWN0ZWQgPSBudWxsOworICAgICAgICB0aGlzLmFjdHVhbD0gbnVsbDsKKyAgICAgICAgdGVzdENhc2VIYXNoID0gbmV3IEhhc2h0YWJsZSgpOworICAgICAgICB0ZXN0Q2FzZUlkVmVjdG9yPSBuZXcgVmVjdG9yKCk7CisgICAgfQogCi0JcHVibGljIFRlc3QoIFN0cmluZyBpZCApCi0JewotCQl0aGlzLmlkID0gaWQ7Ci0JCXRoaXMubmFtZT0gUmVwb3J0ZXJDb25zdGFudHMuTkE7Ci0JCXRoaXMuZGVzY3JpcHRpb24gPVJlcG9ydGVyQ29uc3RhbnRzLk5BIDsKLQkJdGhpcy5zdGF0dXMgPSBSZXBvcnRlckNvbnN0YW50cy5PUFRJT05BTDsKLQkJdGhpcy5zdGF0dXNEZXNjcmlwdGlvbj1SZXBvcnRlckNvbnN0YW50cy5PUFRJT05BTDsKLQkJdGhpcy5leHBlY3RlZCA9IG51bGw7Ci0JCXRoaXMuYWN0dWFsPSBudWxsOwotCQl0ZXN0Q2FzZUhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCXRlc3RDYXNlSWRWZWN0b3I9IG5ldyBWZWN0b3IoKTsKLQl9CisgICAgcHVibGljIFRlc3QoIFN0cmluZyBpZCApCisgICAgeworICAgICAgICB0aGlzLmlkID0gaWQ7CisgICAgICAgIHRoaXMubmFtZT0gUmVwb3J0ZXJDb25zdGFudHMuTkE7CisgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPVJlcG9ydGVyQ29uc3RhbnRzLk5BIDsKKyAgICAgICAgdGhpcy5zdGF0dXMgPSBSZXBvcnRlckNvbnN0YW50cy5PUFRJT05BTDsKKyAgICAgICAgdGhpcy5zdGF0dXNEZXNjcmlwdGlvbj1SZXBvcnRlckNvbnN0YW50cy5PUFRJT05BTDsKKyAgICAgICAgdGhpcy5leHBlY3RlZCA9IG51bGw7CisgICAgICAgIHRoaXMuYWN0dWFsPSBudWxsOworICAgICAgICB0ZXN0Q2FzZUhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgIHRlc3RDYXNlSWRWZWN0b3I9IG5ldyBWZWN0b3IoKTsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBzZXRTdGF0dXMgKCBTdHJpbmcgc3RhdHVzICkgCi0JewotCQl0aGlzLnN0YXR1cyA9IHN0YXR1czsKLQl9Ci0JcHVibGljIHZvaWQgc2V0U3RhdHVzRGVzY3JpcHRpb24gKCBTdHJpbmcgc3RhdHVzRGVzY3JpcHRpb24gKSAKLQl7Ci0JCXRoaXMuc3RhdHVzRGVzY3JpcHRpb24gPSBzdGF0dXNEZXNjcmlwdGlvbjsKLQkJdGhpcy5leHBlY3RlZD1udWxsOwotCQl0aGlzLmFjdHVhbCA9bnVsbDsKLQl9CisgICAgcHVibGljIHZvaWQgc2V0U3RhdHVzICggU3RyaW5nIHN0YXR1cyApCisgICAgeworICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1czsKKyAgICB9CisgICAgcHVibGljIHZvaWQgc2V0U3RhdHVzRGVzY3JpcHRpb24gKCBTdHJpbmcgc3RhdHVzRGVzY3JpcHRpb24gKQorICAgIHsKKyAgICAgICAgdGhpcy5zdGF0dXNEZXNjcmlwdGlvbiA9IHN0YXR1c0Rlc2NyaXB0aW9uOworICAgICAgICB0aGlzLmV4cGVjdGVkPW51bGw7CisgICAgICAgIHRoaXMuYWN0dWFsID1udWxsOworICAgIH0KIAotCXB1YmxpYyB2b2lkIHNldEV4cGVjdGVkKCBTdHJpbmcgZXhwZWN0ZWQgKQotCXsKLQkJdGhpcy5leHBlY3RlZCA9IGV4cGVjdGVkOwotCX0KKyAgICBwdWJsaWMgdm9pZCBzZXRFeHBlY3RlZCggU3RyaW5nIGV4cGVjdGVkICkKKyAgICB7CisgICAgICAgIHRoaXMuZXhwZWN0ZWQgPSBleHBlY3RlZDsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBzZXRBY3R1YWwoIFN0cmluZyBhY3R1YWwgKQotCXsKLQkJdGhpcy5hY3R1YWwgPSBhY3R1YWw7Ci0JfQorICAgIHB1YmxpYyB2b2lkIHNldEFjdHVhbCggU3RyaW5nIGFjdHVhbCApCisgICAgeworICAgICAgICB0aGlzLmFjdHVhbCA9IGFjdHVhbDsKKyAgICB9CiAKLQlwdWJsaWMgU3RyaW5nIGdldElkKCApCi0JewotCQlyZXR1cm4gaWQ7Ci0JfQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0SWQoICkKKyAgICB7CisgICAgICAgIHJldHVybiBpZDsKKyAgICB9CiAKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoICkKLQl7Ci0JCXJldHVybiBuYW1lOwotCX0KKyAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoICkKKyAgICB7CisgICAgICAgIHJldHVybiBuYW1lOworICAgIH0KIAotCXB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oICkKLQl7Ci0JCXJldHVybiBkZXNjcmlwdGlvbjsKLQl9CisgICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbiggKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOworICAgIH0KIAotCXB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzKCApCi0JewotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQlwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0Rlc2NyaXB0aW9uKCApCi0JewotCQlyZXR1cm4gc3RhdHVzRGVzY3JpcHRpb247Ci0JfQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzKCApCisgICAgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0Rlc2NyaXB0aW9uKCApCisgICAgeworICAgICAgICByZXR1cm4gc3RhdHVzRGVzY3JpcHRpb247CisgICAgfQogCi0JcHVibGljIFN0cmluZyBnZXRFeHBlY3RlZCggKQotCXsKLQkJcmV0dXJuIGV4cGVjdGVkOwotCX0KKyAgICBwdWJsaWMgU3RyaW5nIGdldEV4cGVjdGVkKCApCisgICAgeworICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7CisgICAgfQogCi0JcHVibGljIFN0cmluZyBnZXRBY3R1YWwoICkKLQl7Ci0JCXJldHVybiBhY3R1YWw7Ci0JfQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0dWFsKCApCisgICAgeworICAgICAgICByZXR1cm4gYWN0dWFsOworICAgIH0KIAotCXB1YmxpYyBWZWN0b3IgZ2V0VGVzdENhc2VJZFZlY3RvciggKQotCXsKLQkJcmV0dXJuIHRlc3RDYXNlSWRWZWN0b3I7Ci0JfQotCXB1YmxpYyB2b2lkIHNldFRlc3RDYXNlSWRWZWN0b3IoIFZlY3RvciB0aWRWZWN0b3IpCi0JewotCQl0ZXN0Q2FzZUlkVmVjdG9yID0gdGlkVmVjdG9yOwotCX0KLQlwdWJsaWMgSGFzaHRhYmxlIGdldFRlc3RDYXNlSGFzaCggKQotCXsKLQkJcmV0dXJuIHRlc3RDYXNlSGFzaDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0VGVzdENhc2VIYXNoKCBIYXNodGFibGUgdGVzdENhc2VIYXNoICkKLQl7Ci0JCXRoaXMudGVzdENhc2VIYXNoPSB0ZXN0Q2FzZUhhc2g7Ci0JfQorICAgIHB1YmxpYyBWZWN0b3IgZ2V0VGVzdENhc2VJZFZlY3RvciggKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRlc3RDYXNlSWRWZWN0b3I7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIHNldFRlc3RDYXNlSWRWZWN0b3IoIFZlY3RvciB0aWRWZWN0b3IpCisgICAgeworICAgICAgICB0ZXN0Q2FzZUlkVmVjdG9yID0gdGlkVmVjdG9yOworICAgIH0KKyAgICBwdWJsaWMgSGFzaHRhYmxlIGdldFRlc3RDYXNlSGFzaCggKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRlc3RDYXNlSGFzaDsKKyAgICB9CisgICAgcHVibGljIHZvaWQgc2V0VGVzdENhc2VIYXNoKCBIYXNodGFibGUgdGVzdENhc2VIYXNoICkKKyAgICB7CisgICAgICAgIHRoaXMudGVzdENhc2VIYXNoPSB0ZXN0Q2FzZUhhc2g7CisgICAgfQogCi0JcHVibGljIHZvaWQgYWRkVGVzdENhc2UoIFRlc3RDYXNlIHRlc3RDYXNlICkKLQl7Ci0JCWlmICggdGVzdENhc2VIYXNoLnB1dCggdGVzdENhc2UuZ2V0SWQoKS50cmltKCksIHRlc3RDYXNlICkgIT0gbnVsbCApCi0JCXsKLQkJCVN5c3RlbS5lcnIucHJpbnRsbigiIEVycm9yPyBUZXN0IENhc2UgOiAiICsgdGVzdENhc2UuZ2V0SWQoKS50cmltKCkgKyAiIGFscmVhZHkgYWRkZWQuIE92ZXJ3cml0aW5nIHRoZSBwcmV2aW91cyB0ZXN0IGNhc2UiICk7Ci0JCX0KLQkJdGVzdENhc2VJZFZlY3Rvci5hZGRFbGVtZW50KCB0ZXN0Q2FzZS5nZXRJZCgpLnRyaW0oKSApOwotCX0KKyAgICBwdWJsaWMgdm9pZCBhZGRUZXN0Q2FzZSggVGVzdENhc2UgdGVzdENhc2UgKQorICAgIHsKKyAgICAgICAgaWYgKCB0ZXN0Q2FzZUhhc2gucHV0KCB0ZXN0Q2FzZS5nZXRJZCgpLnRyaW0oKSwgdGVzdENhc2UgKSAhPSBudWxsICkKKyAgICAgICAgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCIgRXJyb3I/IFRlc3QgQ2FzZSA6ICIgKyB0ZXN0Q2FzZS5nZXRJZCgpLnRyaW0oKSArICIgYWxyZWFkeSBhZGRlZC4gT3ZlcndyaXRpbmcgdGhlIHByZXZpb3VzIHRlc3QgY2FzZSIgKTsKKyAgICAgICAgfQorICAgICAgICB0ZXN0Q2FzZUlkVmVjdG9yLmFkZEVsZW1lbnQoIHRlc3RDYXNlLmdldElkKCkudHJpbSgpICk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9UZXN0Q2FzZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9UZXN0Q2FzZS5qYXZhCmluZGV4IGE1NzA4NjEuLjAyNjBkNjcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvVGVzdENhc2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGVyL1Rlc3RDYXNlLmphdmEKQEAgLTE3LDEwICsxNywxMCBAQAogcGFja2FnZSBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyOwogCiAvKioKLQlAQ2xhc3M6IFRlc3RDYXNlCi0JQERlc2NyaXB0aW9uOiBDbGFzcyBob2xkaW5nIE9uZSBUZXN0Q2FzZSBpbmZvLgotCUBBdXRob3IgOiBSYW1lc2ggTWFuZGF2YQotCUBMYXN0IE1vZGlmaWVkIDpJbml0aWFsIGNyZWF0aW9uIEJ5IFJhbWVzaCBvbiAxMC8yNC8yMDAxCisgICAgQENsYXNzOiBUZXN0Q2FzZQorICAgIEBEZXNjcmlwdGlvbjogQ2xhc3MgaG9sZGluZyBPbmUgVGVzdENhc2UgaW5mby4KKyAgICBAQXV0aG9yIDogUmFtZXNoIE1hbmRhdmEKKyAgICBATGFzdCBNb2RpZmllZCA6SW5pdGlhbCBjcmVhdGlvbiBCeSBSYW1lc2ggb24gMTAvMjQvMjAwMQogKi8KIAogCkBAIC0yOCw2NiArMjgsNjYgQEAKIAogcHVibGljIGNsYXNzIFRlc3RDYXNlCiB7Ci0JcHJpdmF0ZSBTdHJpbmcgaWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLQlwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICBwcml2YXRlIFN0cmluZyBpZDsKKyAgICBwcml2YXRlIFN0cmluZyBuYW1lOworICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwogCi0JcHJpdmF0ZSBTdHJpbmcgc3RhdHVzOwotCXByaXZhdGUgU3RyaW5nIHN0YXR1c0Rlc2NyaXB0aW9uOworICAgIHByaXZhdGUgU3RyaW5nIHN0YXR1czsKKyAgICBwcml2YXRlIFN0cmluZyBzdGF0dXNEZXNjcmlwdGlvbjsKIAotCXByaXZhdGUgU3RyaW5nIGV4cGVjdGVkOwotCXByaXZhdGUgU3RyaW5nIGFjdHVhbDsKKyAgICBwcml2YXRlIFN0cmluZyBleHBlY3RlZDsKKyAgICBwcml2YXRlIFN0cmluZyBhY3R1YWw7CiAKIAotCXB1YmxpYyBUZXN0Q2FzZSggU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2NyaXB0aW9uICkKLQl7Ci0JCXRoaXMuaWQgPSBpZDsKLQkJdGhpcy5uYW1lPSBuYW1lOwotCQl0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0JCXRoaXMuc3RhdHVzID0gUmVwb3J0ZXJDb25zdGFudHMuRElEX05PVF9SVU47Ci0JCXRoaXMuc3RhdHVzRGVzY3JpcHRpb249UmVwb3J0ZXJDb25zdGFudHMuTkE7Ci0JCSB0aGlzLmV4cGVjdGVkID0gbnVsbDsKKyAgICBwdWJsaWMgVGVzdENhc2UoIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjcmlwdGlvbiApCisgICAgeworICAgICAgICB0aGlzLmlkID0gaWQ7CisgICAgICAgIHRoaXMubmFtZT0gbmFtZTsKKyAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgICAgICB0aGlzLnN0YXR1cyA9IFJlcG9ydGVyQ29uc3RhbnRzLkRJRF9OT1RfUlVOOworICAgICAgICB0aGlzLnN0YXR1c0Rlc2NyaXB0aW9uPVJlcG9ydGVyQ29uc3RhbnRzLk5BOworICAgICAgICAgdGhpcy5leHBlY3RlZCA9IG51bGw7CiAgICAgICAgICAgICAgICAgdGhpcy5hY3R1YWw9IG51bGw7CiAKLQl9Ci0JcHVibGljIFRlc3RDYXNlKCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lICkKLQl7Ci0JCXRoaXMuaWQgPSBpZDsKLQkJdGhpcy5uYW1lPSBuYW1lOwotCQl0aGlzLmRlc2NyaXB0aW9uID1SZXBvcnRlckNvbnN0YW50cy5OQSA7Ci0JCXRoaXMuc3RhdHVzID0gUmVwb3J0ZXJDb25zdGFudHMuRElEX05PVF9SVU47Ci0JCXRoaXMuc3RhdHVzRGVzY3JpcHRpb249UmVwb3J0ZXJDb25zdGFudHMuTkE7Ci0JCSB0aGlzLmV4cGVjdGVkID0gbnVsbDsKKyAgICB9CisgICAgcHVibGljIFRlc3RDYXNlKCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lICkKKyAgICB7CisgICAgICAgIHRoaXMuaWQgPSBpZDsKKyAgICAgICAgdGhpcy5uYW1lPSBuYW1lOworICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID1SZXBvcnRlckNvbnN0YW50cy5OQSA7CisgICAgICAgIHRoaXMuc3RhdHVzID0gUmVwb3J0ZXJDb25zdGFudHMuRElEX05PVF9SVU47CisgICAgICAgIHRoaXMuc3RhdHVzRGVzY3JpcHRpb249UmVwb3J0ZXJDb25zdGFudHMuTkE7CisgICAgICAgICB0aGlzLmV4cGVjdGVkID0gbnVsbDsKICAgICAgICAgICAgICAgICB0aGlzLmFjdHVhbD0gbnVsbDsKIAotCX0KKyAgICB9CiAKLQlwdWJsaWMgVGVzdENhc2UoIFN0cmluZyBpZCApCi0JewotCQl0aGlzLmlkID0gaWQ7Ci0JCXRoaXMubmFtZT0gUmVwb3J0ZXJDb25zdGFudHMuTkE7Ci0JCXRoaXMuZGVzY3JpcHRpb24gPVJlcG9ydGVyQ29uc3RhbnRzLk5BIDsKLQkJdGhpcy5zdGF0dXMgPSBSZXBvcnRlckNvbnN0YW50cy5ESURfTk9UX1JVTjsKLQkJdGhpcy5zdGF0dXNEZXNjcmlwdGlvbj1SZXBvcnRlckNvbnN0YW50cy5OQTsKLQkJIHRoaXMuZXhwZWN0ZWQgPSBudWxsOworICAgIHB1YmxpYyBUZXN0Q2FzZSggU3RyaW5nIGlkICkKKyAgICB7CisgICAgICAgIHRoaXMuaWQgPSBpZDsKKyAgICAgICAgdGhpcy5uYW1lPSBSZXBvcnRlckNvbnN0YW50cy5OQTsKKyAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9UmVwb3J0ZXJDb25zdGFudHMuTkEgOworICAgICAgICB0aGlzLnN0YXR1cyA9IFJlcG9ydGVyQ29uc3RhbnRzLkRJRF9OT1RfUlVOOworICAgICAgICB0aGlzLnN0YXR1c0Rlc2NyaXB0aW9uPVJlcG9ydGVyQ29uc3RhbnRzLk5BOworICAgICAgICAgdGhpcy5leHBlY3RlZCA9IG51bGw7CiAgICAgICAgICAgICAgICAgdGhpcy5hY3R1YWw9IG51bGw7CiAKLQl9CisgICAgfQogCi0JcHVibGljIHZvaWQgc2V0U3RhdHVzICggU3RyaW5nIHN0YXR1cyApIAotCXsKLQkJdGhpcy5zdGF0dXMgPSBzdGF0dXM7Ci0JfQotCXB1YmxpYyB2b2lkIHNldFN0YXR1c0Rlc2NyaXB0aW9uICggU3RyaW5nIHN0YXR1c0Rlc2NyaXB0aW9uICkgCi0JewotCQl0aGlzLnN0YXR1c0Rlc2NyaXB0aW9uID0gc3RhdHVzRGVzY3JpcHRpb247Ci0JCSB0aGlzLmV4cGVjdGVkID0gbnVsbDsKKyAgICBwdWJsaWMgdm9pZCBzZXRTdGF0dXMgKCBTdHJpbmcgc3RhdHVzICkKKyAgICB7CisgICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBzZXRTdGF0dXNEZXNjcmlwdGlvbiAoIFN0cmluZyBzdGF0dXNEZXNjcmlwdGlvbiApCisgICAgeworICAgICAgICB0aGlzLnN0YXR1c0Rlc2NyaXB0aW9uID0gc3RhdHVzRGVzY3JpcHRpb247CisgICAgICAgICB0aGlzLmV4cGVjdGVkID0gbnVsbDsKICAgICAgICAgICAgICAgICB0aGlzLmFjdHVhbD0gbnVsbDsKIAotCX0KKyAgICB9CiAKIAotCXB1YmxpYyB2b2lkIHNldEV4cGVjdGVkKCBTdHJpbmcgZXhwZWN0ZWQgKQorICAgIHB1YmxpYyB2b2lkIHNldEV4cGVjdGVkKCBTdHJpbmcgZXhwZWN0ZWQgKQogICAgICAgICB7CiAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3RlZCA9IGV4cGVjdGVkOwogICAgICAgICB9CkBAIC05OCwzMSArOTgsMzEgQEAKICAgICAgICAgfQogCiAKLQlwdWJsaWMgU3RyaW5nIGdldElkKCApCi0JewotCQlyZXR1cm4gaWQ7Ci0JfQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0SWQoICkKKyAgICB7CisgICAgICAgIHJldHVybiBpZDsKKyAgICB9CiAKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoICkKLQl7Ci0JCXJldHVybiBuYW1lOwotCX0KKyAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoICkKKyAgICB7CisgICAgICAgIHJldHVybiBuYW1lOworICAgIH0KIAotCXB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oICkKLQl7Ci0JCXJldHVybiBkZXNjcmlwdGlvbjsKLQl9CisgICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbiggKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOworICAgIH0KIAotCXB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzKCApCi0JewotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQlwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0Rlc2NyaXB0aW9uKCApCi0JewotCQlyZXR1cm4gc3RhdHVzRGVzY3JpcHRpb247Ci0JfQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzKCApCisgICAgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0Rlc2NyaXB0aW9uKCApCisgICAgeworICAgICAgICByZXR1cm4gc3RhdHVzRGVzY3JpcHRpb247CisgICAgfQogCi0JcHVibGljIFN0cmluZyBnZXRFeHBlY3RlZCggKQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0RXhwZWN0ZWQoICkKICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBleHBlY3RlZDsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9UZXN0U3VpdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvVGVzdFN1aXRlLmphdmEKaW5kZXggZDg4YmVjMC4uNDI0OWRjYyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9UZXN0U3VpdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGVyL1Rlc3RTdWl0ZS5qYXZhCkBAIC0xNyw5NCArMTcsOTQgQEAKIHBhY2thZ2UgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlcjsKIAogLyoqCi0JQENsYXNzOiBUZXN0U3VpdGUKLQlARGVzY3JpcHRpb246IENsYXNzIGhvbGRpbmcgT25lIFRlc3RTdWl0ZSBpbmZvLgotCUBBdXRob3IgOiBSYW1lc2ggTWFuZGF2YQotCUBMYXN0IE1vZGlmaWVkIDogQnkgUmFtZXNoIG9uIDEwLzI0LzIwMDEKLQlATGFzdCBNb2RpZmllZCA6IEJ5IFJhbWVzaCBvbiAxLzIwLzIwMDIgLCBGb3IgcHJlc2VydmluZyBvcmRlciBvZiBlbnRyeSBvZiB0ZXN0cyAJCXVzZWQgYSBzZXBhcmF0ZSB0ZXN0SWRWZWN0b3IKKyAgICBAQ2xhc3M6IFRlc3RTdWl0ZQorICAgIEBEZXNjcmlwdGlvbjogQ2xhc3MgaG9sZGluZyBPbmUgVGVzdFN1aXRlIGluZm8uCisgICAgQEF1dGhvciA6IFJhbWVzaCBNYW5kYXZhCisgICAgQExhc3QgTW9kaWZpZWQgOiBCeSBSYW1lc2ggb24gMTAvMjQvMjAwMQorICAgIEBMYXN0IE1vZGlmaWVkIDogQnkgUmFtZXNoIG9uIDEvMjAvMjAwMiAsIEZvciBwcmVzZXJ2aW5nIG9yZGVyIG9mIGVudHJ5IG9mIHRlc3RzICAgICAgICAgdXNlZCBhIHNlcGFyYXRlIHRlc3RJZFZlY3RvcgogKi8KIAogCiBpbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKIGltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwogCi1wdWJsaWMgY2xhc3MgVGVzdFN1aXRlIAorcHVibGljIGNsYXNzIFRlc3RTdWl0ZQogewotCXByaXZhdGUgU3RyaW5nIGlkOwotCXByaXZhdGUgU3RyaW5nIG5hbWU7Ci0JcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CisgICAgcHJpdmF0ZSBTdHJpbmcgaWQ7CisgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKIAotCUhhc2h0YWJsZSB0ZXN0SGFzaDsKLQlWZWN0b3IgdGVzdElkVmVjdG9yOworICAgIEhhc2h0YWJsZSB0ZXN0SGFzaDsKKyAgICBWZWN0b3IgdGVzdElkVmVjdG9yOwogCi0JcHVibGljIFRlc3RTdWl0ZSggU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2NyaXB0aW9uICkKLQl7Ci0JCXRoaXMuaWQgPSBpZDsKLQkJdGhpcy5uYW1lPSBuYW1lOwotCQl0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0JCXRlc3RIYXNoID0gbmV3IEhhc2h0YWJsZSgpOwotCQl0ZXN0SWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0JfQorICAgIHB1YmxpYyBUZXN0U3VpdGUoIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjcmlwdGlvbiApCisgICAgeworICAgICAgICB0aGlzLmlkID0gaWQ7CisgICAgICAgIHRoaXMubmFtZT0gbmFtZTsKKyAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgICAgICB0ZXN0SGFzaCA9IG5ldyBIYXNodGFibGUoKTsKKyAgICAgICAgdGVzdElkVmVjdG9yID0gbmV3IFZlY3RvcigpOworICAgIH0KIAotCXB1YmxpYyBUZXN0U3VpdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUgKQotCXsKLQkJdGhpcy5pZCA9IGlkOwotCQl0aGlzLm5hbWUgPSBuYW1lOwotCQl0aGlzLmRlc2NyaXB0aW9uPVJlcG9ydGVyQ29uc3RhbnRzLk5BOwotCQl0ZXN0SGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLQkJdGVzdElkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotCX0KKyAgICBwdWJsaWMgVGVzdFN1aXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lICkKKyAgICB7CisgICAgICAgIHRoaXMuaWQgPSBpZDsKKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgdGhpcy5kZXNjcmlwdGlvbj1SZXBvcnRlckNvbnN0YW50cy5OQTsKKyAgICAgICAgdGVzdEhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgIHRlc3RJZFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKKyAgICB9CiAKLQlwdWJsaWMgVGVzdFN1aXRlIChTdHJpbmcgaWQgKQotCXsKLQkJdGhpcy5pZCA9IGlkOwotCQl0aGlzLm5hbWUgPSBSZXBvcnRlckNvbnN0YW50cy5OQTsKLQkJdGhpcy5kZXNjcmlwdGlvbj1SZXBvcnRlckNvbnN0YW50cy5OQTsKLQkJdGVzdEhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCXRlc3RJZFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLQl9CisgICAgcHVibGljIFRlc3RTdWl0ZSAoU3RyaW5nIGlkICkKKyAgICB7CisgICAgICAgIHRoaXMuaWQgPSBpZDsKKyAgICAgICAgdGhpcy5uYW1lID0gUmVwb3J0ZXJDb25zdGFudHMuTkE7CisgICAgICAgIHRoaXMuZGVzY3JpcHRpb249UmVwb3J0ZXJDb25zdGFudHMuTkE7CisgICAgICAgIHRlc3RIYXNoID0gbmV3IEhhc2h0YWJsZSgpOworICAgICAgICB0ZXN0SWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7CisgICAgfQogCi0JcHVibGljIFN0cmluZyBnZXRJZCggKQotCXsKLQkJcmV0dXJuIGlkOwotCX0KKyAgICBwdWJsaWMgU3RyaW5nIGdldElkKCApCisgICAgeworICAgICAgICByZXR1cm4gaWQ7CisgICAgfQogCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCApCi0JewotCQlyZXR1cm4gbmFtZTsKLQl9CisgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCApCisgICAgeworICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9CiAKLQlwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCApCi0JewotCQlyZXR1cm4gZGVzY3JpcHRpb247Ci0JfQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oICkKKyAgICB7CisgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKKyAgICB9CiAKLQlwdWJsaWMgVmVjdG9yIGdldFRlc3RJZFZlY3RvciggKQotCXsKLQkJcmV0dXJuIHRlc3RJZFZlY3RvcjsKLQl9Ci0JcHVibGljIHZvaWQgc2V0VGVzdElkVmVjdG9yKCBWZWN0b3IgdGlkVmVjdG9yKQotCXsKLQkJdGVzdElkVmVjdG9yPSB0aWRWZWN0b3I7Ci0JfQorICAgIHB1YmxpYyBWZWN0b3IgZ2V0VGVzdElkVmVjdG9yKCApCisgICAgeworICAgICAgICByZXR1cm4gdGVzdElkVmVjdG9yOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBzZXRUZXN0SWRWZWN0b3IoIFZlY3RvciB0aWRWZWN0b3IpCisgICAgeworICAgICAgICB0ZXN0SWRWZWN0b3I9IHRpZFZlY3RvcjsKKyAgICB9CiAKLQlwdWJsaWMgSGFzaHRhYmxlIGdldFRlc3RIYXNoKCApCi0JewotCQlyZXR1cm4gdGVzdEhhc2g7Ci0JfQotCXB1YmxpYyB2b2lkIHNldFRlc3RIYXNoKCBIYXNodGFibGUgdGVzdEhhc2ggKQotCXsKLQkJdGhpcy50ZXN0SGFzaD0gdGVzdEhhc2g7Ci0JfQorICAgIHB1YmxpYyBIYXNodGFibGUgZ2V0VGVzdEhhc2goICkKKyAgICB7CisgICAgICAgIHJldHVybiB0ZXN0SGFzaDsKKyAgICB9CisgICAgcHVibGljIHZvaWQgc2V0VGVzdEhhc2goIEhhc2h0YWJsZSB0ZXN0SGFzaCApCisgICAgeworICAgICAgICB0aGlzLnRlc3RIYXNoPSB0ZXN0SGFzaDsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBhZGRUZXN0KCBUZXN0IG15VGVzdCApCi0JewotCQlpZiAoIHRlc3RIYXNoLnB1dCggbXlUZXN0LmdldElkKCkudHJpbSgpLCBteVRlc3QpICE9IG51bGwgKSAKLQkJewotCQkJU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciA6IFRlc3Qgd2FzIGFkZGVkIGJlZm9yZSBvbmx5LiBTdGlsbCBhbGxvd2luZy4gT2xkIHZhbHVlIG9mIHRoZSB0ZXN0IHdpbGwgYmUgb3ZlcnJpZGRlbiIgKTsKLQkJfQotCQkJCi0JCXRlc3RJZFZlY3Rvci5hZGRFbGVtZW50KCBteVRlc3QuZ2V0SWQoKS50cmltKCkgKTsKLQl9CQorICAgIHB1YmxpYyB2b2lkIGFkZFRlc3QoIFRlc3QgbXlUZXN0ICkKKyAgICB7CisgICAgICAgIGlmICggdGVzdEhhc2gucHV0KCBteVRlc3QuZ2V0SWQoKS50cmltKCksIG15VGVzdCkgIT0gbnVsbCApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IgOiBUZXN0IHdhcyBhZGRlZCBiZWZvcmUgb25seS4gU3RpbGwgYWxsb3dpbmcuIE9sZCB2YWx1ZSBvZiB0aGUgdGVzdCB3aWxsIGJlIG92ZXJyaWRkZW4iICk7CisgICAgICAgIH0KKworICAgICAgICB0ZXN0SWRWZWN0b3IuYWRkRWxlbWVudCggbXlUZXN0LmdldElkKCkudHJpbSgpICk7CisgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzljZGVlYy4uNDFjYjcyNyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXBvcnRlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgZW52aXJvbm1lbnQ9Im15ZW52IiAvPgogPHByb3BlcnR5IG5hbWU9ImphdmFwYXRoIiB2YWx1ZT0iJHtteWVudi5KQVZBX0hPTUV9L2xpYi9kdC5qYXI6JChteWVudi5KQVZBX0hPTUUpL2xpYi90b29scy5qYXI6JHtteWVudi5TMUFTX0hPTUV9L21vZHVsZXMvamFrYXJ0YS5lamIuamFyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3JlcG9ydGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvYnVpbGQueG1sCmluZGV4IGQ3NDQ0YmIuLmZkYjcyNTEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVwb3J0ZXIvYnVpbGQueG1sCkBAIC0yNSwyOCArMjUsMjggQEAKICZzZXR1cC1wcm9wczsKIAogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4saW5pdCxqYXIiLz4KLSAgICAgICAgCisKICAgPHRhcmdldCBuYW1lPSJpbml0Ij4KICAgICA8dHN0YW1wLz4KICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5kZXN0fSIvPgotICAgIAorCiAgIDwvdGFyZ2V0PgotICAKLSAgIAorCisKICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iaW5pdCI+CiAgIDxqYXZhYwotCQlkZXN0ZGlyPSIke2J1aWxkLmRlc3R9IgotCQljbGFzc3BhdGg9IiR7Y2xhc3NwYXRofSIKKyAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5kZXN0fSIKKyAgICAgICAgY2xhc3NwYXRoPSIke2NsYXNzcGF0aH0iCiAgICAgICAgICAgICAgICAgc3JjZGlyPSIke2Jhc2VkaXJ9IgogICAgICAgICAgICAgICAgIGRlYnVnPSJvbiIKICAgICAvPgotICAgIAorCiAgIDwvdGFyZ2V0PgotICAKLSAgIAorCisKICAgPHRhcmdldCBuYW1lPSJqYXIiIGRlcGVuZHM9ImJ1aWxkIj4KICAgPGphciBkZXN0ZmlsZT0iJHtyZXBvcnRlci5qYXJ9Ij4KLQk8ZmlsZXNldCBkaXI9IiR7YnVpbGQuZGVzdH0iLz4KKyAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuZGVzdH0iLz4KICAgPC9qYXI+CiAgIDwvdGFyZ2V0PgogCkBAIC01NSw3ICs1NSw3IEBACiAgICA8YXJnIGxpbmU9ImN2ZiAke3JlcG9ydGVyLmphcn0gLUMgJHtidWlsZC5kZXN0fSAuIiAvPgogICAgPC9leGVjPgogLS0+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmRlc3R9Ii8+CiAgIDwvdGFyZ2V0PgpAQCAtNjYsNiArNjYsNiBAQAogICA8ZWNobyBtZXNzYWdlPSJhbnQgamFyICAgICAgd2lsbCBjb21waWxlIGFuZCBwdXQgcmVwb3J0ZXIuamFyIGF0ICRBUFNfSE9NRS9saWIiLz4KICAgPC90YXJnZXQ+CiAKLSAgICAgIAorCiA8L3Byb2plY3Q+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVzdWx0cy9SZXN1bHRzUHJvZHVjZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvcmVzdWx0cy9SZXN1bHRzUHJvZHVjZXIuamF2YQppbmRleCAyNTM3NDUyLi4xMWU5YjUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3Jlc3VsdHMvUmVzdWx0c1Byb2R1Y2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC9yZXN1bHRzL1Jlc3VsdHNQcm9kdWNlci5qYXZhCkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVc2FnZTogamF2YSBSZXN1bHRQcm9kdWNlciBmaWxlIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGFyZ3NbMl0pOwogICAgICAgICAgICAgRmlsZUNoYW5uZWwgY2hhbm5lbCA9IG91dHB1dFN0cmVhbS5nZXRDaGFubmVsKCk7CiAgICAgICAgICAgICBDaGFyQnVmZmVyIGJ1ZmZlciA9IENoYXJCdWZmZXIuYWxsb2NhdGUoODE5Mik7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgICAgICBpbnQgcGFzcyA9IDA7CiAgICAgICAgICAgICBpbnQgZmFpbCA9IDA7CiAgICAgICAgICAgICB3aGlsZSggdG9rZW5zLmhhc01vcmVFbGVtZW50cygpICl7Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnMubmV4dFRva2VuKCk7IAorICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zLm5leHRUb2tlbigpOwogICAgICAgICAgICAgICAgIGNvbXBpbGUodG9rZW4pOwogCiAgICAgICAgICAgICAgICAgY291bnQgPSBjb3VudE9jY3VyYW5jZShjaGFyQnVmZmVyKTsKQEAgLTY3LDggKzY3LDggQEAKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBmYWlsID0gY291bnQ7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSAKLSAgICAgICAgICAgIGJ1ZmZlci5wdXQoIkRJRCBOT1QgUlVOPSAgICIgCisgICAgICAgICAgICB9CisgICAgICAgICAgICBidWZmZXIucHV0KCJESUQgTk9UIFJVTj0gICAiCiAgICAgICAgICAgICAgICAgICAgICArICAobmV3IEludGVnZXIoYXJnc1sxXSkuaW50VmFsdWUoKSAtIChwYXNzICsgZmFpbCkpKyAiXG4iKTsKICAgICAgICAgICAgIGJ1ZmZlci5wdXQoIi0tLS0tLS0tLS0tLSAgPT09PT09PT09XG4iKTsKICAgICAgICAgICAgIGJ1ZmZlci5wdXQoIlRvdGFsIEV4cGVjdGVkPSIgKyBhcmdzWzFdKTsKQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGNvbXBpbGUoU3RyaW5nIHBhdCkgewogICAgICAgICB0cnkgewpAQCAtMTAwLDEwICsxMDAsMTAgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudE9jY3VyYW5jZShDaGFyQnVmZmVyIGNiKSB7CiAgICAgICAgIE1hdGNoZXIgbG0gPSBsaW5lUGF0dGVybi5tYXRjaGVyKGNiKTsKLSAgICAgICAgTWF0Y2hlciBwbSA9IG51bGw7CQkJCisgICAgICAgIE1hdGNoZXIgcG0gPSBudWxsOwogICAgICAgICBpbnQgY291bnQgPSAwOwogICAgICAgICB3aGlsZSAobG0uZmluZCgpKSB7Ci0gICAgICAgICAgICBDaGFyU2VxdWVuY2UgY3MgPSBsbS5ncm91cCgpOyAJCisgICAgICAgICAgICBDaGFyU2VxdWVuY2UgY3MgPSBsbS5ncm91cCgpOwogICAgICAgICAgICAgaWYgKHBtID09IG51bGwpCiAgICAgICAgICAgICAgICAgcG0gPSBwYXR0ZXJuLm1hdGNoZXIoY3MpOwogICAgICAgICAgICAgZWxzZQpAQCAtMTE4LDcgKzExOCw3IEBACiAgICAgICAgIHJldHVybiBjb3VudDsKICAgICB9CiAKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIENoYXJCdWZmZXIgbG9hZEZpbGUoRmlsZSBmKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgICBGaWxlSW5wdXRTdHJlYW0gZmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmKTsKICAgICAgICAgRmlsZUNoYW5uZWwgZmMgPSBmaXMuZ2V0Q2hhbm5lbCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvYnVpbGQueG1sCmluZGV4IDBjNDMzNjIuLjBhMWRhMmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci9idWlsZC54bWwKQEAgLTI0LDcgKzI0LDcgQEAKIAogPHByb2plY3QgbmFtZT0id2VicnVubmVyIiBiYXNlZGlyPSIuIiBkZWZhdWx0PSJqYXIiPgogICAgICAgJnNldHVwLXByb3BzOwotICAgICAgCisKICAgICAgPHByb3BlcnR5IG5hbWU9InByb3h5LnNyYyIgdmFsdWU9InByb3h5Ii8+CiAgICAgIDxwcm9wZXJ0eSBlbnZpcm9ubWVudD0ibXllbnYiIC8+CiAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ3ZWJ0ZXN0LnNyYyIgdmFsdWU9IndlYnRlc3QiLz4KQEAgLTMzLDQ4ICszMyw0OCBAQAogICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQuZGVzdCIgdmFsdWU9ImJ1aWxkIi8+CiAgICAgIDxwcm9wZXJ0eSBuYW1lPSJqYXZhLmNsYXNzcGF0aCIgdmFsdWU9IiR7SkFWQV9IT01FfS9saWIvZHQuamFyOiR7SkFWQV9IT01FfS9saWIvdG9vbHMuamFyOiR7YnVpbGQuZGVzdH06JHtteWVudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIvPgogICAgICA8cHJvcGVydHkgbmFtZT0ic2VydmVyLmhvc3QiIHZhbHVlPSJkc2luZ2giLz4KLSAgICAgCisKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNvbXBpbGUtd2VidGVzdCxydW4td2VidGVzdCI+CiAgICAgICAgIDwhLS0gV1JJVEVNRSAtLT4KICAgPC90YXJnZXQ+Ci0gICAKLSAgCisKKwogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtcHJveHkiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8IS0tIENvbXBpbGUgdGhlIGphdmEgY29kZSBmcm9tICR7c3JjfSBpbnRvICR7YnVpbGR9IC0tPgogICAgIDxlY2hvIG1lc3NhZ2U9IkNvbXBpbGluZyBQcm94eSBTZXJ2ZXIgc291cmNlIGZpbGVzICgke25hbWV9KSAuLi4iLz4KICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmRlc3R9Ii8+CiAgICAgPGphdmFjCi0JCXNyY2Rpcj0iJHtwcm94eS5zcmN9IgotCQlkZXN0ZGlyPSIke2J1aWxkLmRlc3R9IgotCQljbGFzc3BhdGg9IiR7amF2YS5jbGFzc3BhdGh9IgorICAgICAgICBzcmNkaXI9IiR7cHJveHkuc3JjfSIKKyAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5kZXN0fSIKKyAgICAgICAgY2xhc3NwYXRoPSIke2phdmEuY2xhc3NwYXRofSIKICAgICAgICAgICAgICAgICBkZWJ1Zz0ib24iCi0JCQorCiAgICAgLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS13ZWJ0ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPCEtLSBDb21waWxlIHRoZSBqYXZhIGNvZGUgZnJvbSAke3NyY30gaW50byAke2J1aWxkfSAtLT4KICAgICA8ZWNobyBtZXNzYWdlPSJDb21waWxpbmcgUHJveHkgU2VydmVyIHNvdXJjZSBmaWxlcyAoJHtuYW1lfSkgLi4uIi8+CiAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5kZXN0fSIvPgogICAgIDxqYXZhYwotCQlzcmNkaXI9IiR7d2VidGVzdC5zcmN9IgotCQlkZXN0ZGlyPSIke2J1aWxkLmRlc3R9IgotCQljbGFzc3BhdGg9IiR7amF2YS5jbGFzc3BhdGh9IgorICAgICAgICBzcmNkaXI9IiR7d2VidGVzdC5zcmN9IgorICAgICAgICBkZXN0ZGlyPSIke2J1aWxkLmRlc3R9IgorICAgICAgICBjbGFzc3BhdGg9IiR7amF2YS5jbGFzc3BhdGh9IgogICAgICAgICAgICAgICAgIGRlYnVnPSJvbiIKLQkJCisKICAgICAvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjb21waWxlLXRvbWNhdHRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8IS0tIENvbXBpbGUgdGhlIGphdmEgY29kZSBmcm9tICR7c3JjfSBpbnRvICR7YnVpbGR9IC0tPgogICAgIDxlY2hvIG1lc3NhZ2U9IkNvbXBpbGluZyBUb21jYXQgdGVzdCB1dGlsIHNvdXJjZSBmaWxlcyAuLi4iLz4KICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmRlc3R9Ii8+CiAgICAgPGphdmFjCi0JCXNyY2Rpcj0iJHt0b21jYXR0ZXN0LnNyY30iCi0JCWRlc3RkaXI9IiR7YnVpbGQuZGVzdH0iCi0JCWNsYXNzcGF0aD0iJHtqYXZhLmNsYXNzcGF0aH0iCisgICAgICAgIHNyY2Rpcj0iJHt0b21jYXR0ZXN0LnNyY30iCisgICAgICAgIGRlc3RkaXI9IiR7YnVpbGQuZGVzdH0iCisgICAgICAgIGNsYXNzcGF0aD0iJHtqYXZhLmNsYXNzcGF0aH0iCiAgICAgICAgICAgICAgICAgZGVidWc9Im9uIgotCQkKKwogICAgIC8+CiAgIDwvdGFyZ2V0PgogCkBAIC04MywxMSArODMsMTEgQEAKICAgICA8ZWNobyBtZXNzYWdlPSJDb21waWxpbmcgR3JpenpseSB0ZXN0IHNvdXJjZSBmaWxlcyAoJHtuYW1lfSkgLi4uIi8+CiAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5kZXN0fSIvPgogICAgIDxqYXZhYwotCQlzcmNkaXI9IiR7aHR0cDJ0ZXN0LnNyY30iCi0JCWRlc3RkaXI9IiR7YnVpbGQuZGVzdH0iCi0JCWNsYXNzcGF0aD0iJHtqYXZhLmNsYXNzcGF0aH06JHtteWVudi5TMUFTX0hPTUV9L21vZHVsZXMvbnVjbGV1cy1ncml6emx5LWFsbC5qYXIiCisgICAgICAgIHNyY2Rpcj0iJHtodHRwMnRlc3Quc3JjfSIKKyAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5kZXN0fSIKKyAgICAgICAgY2xhc3NwYXRoPSIke2phdmEuY2xhc3NwYXRofToke215ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy9udWNsZXVzLWdyaXp6bHktYWxsLmphciIKICAgICAgICAgICAgICAgICBkZWJ1Zz0ib24iCi0JCQorCiAgICAgLz4KIAogICA8L3RhcmdldD4KQEAgLTk2LDM0ICs5NiwzNCBAQAogICAgIDwhLS0gQ29tcGlsZSB0aGUgamF2YSBjb2RlIGZyb20gJHtzcmN9IGludG8gJHtidWlsZH0gLS0+CiAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyBXZWIgVGVzdCIvPgogICAgIDxqYXZhCi0JCQlmb3JrPSJvbiIKLQkJCWNsYXNzcGF0aD0iJHtqYXZhLmNsYXNzcGF0aH06JHtidWlsZC5kZXN0fSIKLQkJCWNsYXNzbmFtZT0iY29tLnN1bi5lanRlLmNjbC53ZWJydW5uZXIud2VidGVzdC5XZWJUZXN0Ij4KKyAgICAgICAgICAgIGZvcms9Im9uIgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2phdmEuY2xhc3NwYXRofToke2J1aWxkLmRlc3R9IgorICAgICAgICAgICAgY2xhc3NuYW1lPSJjb20uc3VuLmVqdGUuY2NsLndlYnJ1bm5lci53ZWJ0ZXN0LldlYlRlc3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgPGFyZyB2YWx1ZT0ic2NyaXB0LnR4dCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtzZXJ2ZXIuaG9zdH0iLz4KLSAgICAJCQorCiAgICAgPC9qYXZhPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJydW4tcHJveHkiIGRlcGVuZHM9ImNvbXBpbGUtcHJveHkiPgogICAgIDwhLS0gQ29tcGlsZSB0aGUgamF2YSBjb2RlIGZyb20gJHtzcmN9IGludG8gJHtidWlsZH0gLS0+CiAgICAgPGVjaG8gbWVzc2FnZT0iU3RhcnRpbmcgd2Vic2VydmVyIGF0IHBvcnQgMTIzNSIvPgogICAgIDxqYXZhCi0JCQlmb3JrPSJvbiIKLQkJCWNsYXNzcGF0aD0iJHtqYXZhLmNsYXNzcGF0aH06JHtidWlsZC5kZXN0fSIKLQkJCWNsYXNzbmFtZT0iY29tLnN1bi5lanRlLmNjbC53ZWJydW5uZXIucHJveHkuaHR0cGQiPgotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgCQkKKyAgICAgICAgICAgIGZvcms9Im9uIgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2phdmEuY2xhc3NwYXRofToke2J1aWxkLmRlc3R9IgorICAgICAgICAgICAgY2xhc3NuYW1lPSJjb20uc3VuLmVqdGUuY2NsLndlYnJ1bm5lci5wcm94eS5odHRwZCI+CisKKwogICAgIDwvamF2YT4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5kZXN0fSIvPgogICA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJqYXIiIGRlcGVuZHM9ImNvbXBpbGUtcHJveHksY29tcGlsZS13ZWJ0ZXN0LGNvbXBpbGUtdG9tY2F0dGVzdCxjb21waWxlLWh0dHAydGVzdCI+CiAgIDxqYXIgZGVzdGZpbGU9IiR7bXllbnYuQVBTX0hPTUV9L2xpYi93ZWJ0ZXN0LmphciI+Ci0JPGZpbGVzZXQgZGlyPSIke2J1aWxkLmRlc3R9Ii8+CisgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmRlc3R9Ii8+CiAgIDwvamFyPgogICA8L3RhcmdldD4KIApAQCAtMTM4LDUgKzEzOCw1IEBACiAgICAgPC9lY2hvPgogICA8L3RhcmdldD4KIAotICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvaHR0cDJ0ZXN0L29yZy9nbGFzc2Zpc2gvZ3JpenpseS90ZXN0L2h0dHAyL0h0dHBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL2h0dHAydGVzdC9vcmcvZ2xhc3NmaXNoL2dyaXp6bHkvdGVzdC9odHRwMi9IdHRwQ2xpZW50LmphdmEKaW5kZXggNTZmNjUwYy4uMWJjMDA1NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvaHR0cDJ0ZXN0L29yZy9nbGFzc2Zpc2gvZ3JpenpseS90ZXN0L2h0dHAyL0h0dHBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci9odHRwMnRlc3Qvb3JnL2dsYXNzZmlzaC9ncml6emx5L3Rlc3QvaHR0cDIvSHR0cENsaWVudC5qYXZhCkBAIC03Miw3ICs3Miw3IEBACiAKICAgICBwcml2YXRlIEh0dHBDbGllbnQoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNldEhvc3QoU3RyaW5nIGhvc3QpIHsKICAgICAgICAgdGhpcy5ob3N0ID0gaG9zdDsKICAgICB9CkBAIC0xMDEsNyArMTAxLDcgQEAKICAgICAgICAgZmluYWwgRmlsdGVyQ2hhaW5CdWlsZGVyIGZpbHRlckNoYWluQnVpbGRlciA9CiAgICAgICAgICAgICAgICAgY3JlYXRlQ2xpZW50RmlsdGVyQ2hhaW5Bc0J1aWxkZXIoc2VjdXJlKTsKICAgICAgICAgZmlsdGVyQ2hhaW5CdWlsZGVyLmFkZChuZXcgQ2xpZW50QWdncmVnYXRvckZpbHRlcihyZXN1bHRRdWV1ZSkpOwotICAgICAgICAKKwogICAgICAgICBmaW5hbCBUQ1BOSU9UcmFuc3BvcnQgY2xpZW50VHJhbnNwb3J0ID0gVENQTklPVHJhbnNwb3J0QnVpbGRlci5uZXdJbnN0YW5jZSgpLmJ1aWxkKCk7CiAgICAgICAgIGZpbmFsIEZpbHRlckNoYWluIGNsaWVudEZpbHRlckNoYWluID0gZmlsdGVyQ2hhaW5CdWlsZGVyLmJ1aWxkKCk7CiAgICAgICAgIGNsaWVudFRyYW5zcG9ydC5zZXRQcm9jZXNzb3IoY2xpZW50RmlsdGVyQ2hhaW4pOwpAQCAtMTQxLDE2ICsxNDEsMTYgQEAKICAgICBwcml2YXRlIEZpbHRlckNoYWluQnVpbGRlciBjcmVhdGVDbGllbnRGaWx0ZXJDaGFpbkFzQnVpbGRlcigKICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNTZWN1cmUsCiAgICAgICAgICAgICBmaW5hbCBGaWx0ZXIuLi4gY2xpZW50RmlsdGVycykgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIGZpbmFsIEZpbHRlckNoYWluQnVpbGRlciBidWlsZGVyID0gRmlsdGVyQ2hhaW5CdWlsZGVyLnN0YXRlbGVzcygpCiAgICAgICAgICAgICAgLmFkZChuZXcgVHJhbnNwb3J0RmlsdGVyKCkpOwogICAgICAgICBpZiAoaXNTZWN1cmUpIHsKICAgICAgICAgICAgIGJ1aWxkZXIuYWRkKG5ldyBTU0xGaWx0ZXIobnVsbCwgZ2V0Q2xpZW50U1NMRW5naW5lQ29uZmlndXJhdG9yKCkpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBidWlsZGVyLmFkZChuZXcgSHR0cENsaWVudEZpbHRlcigpKTsKICAgICAgICAgYnVpbGRlci5hZGQobmV3IEh0dHAyQ2xpZW50RmlsdGVyKEh0dHAyQ29uZmlndXJhdGlvbi5idWlsZGVyKCkuYnVpbGQoKSkpOwotICAgICAgICAKKwogICAgICAgICBpZiAoY2xpZW50RmlsdGVycyAhPSBudWxsKSB7CiAgICAgICAgICAgICBmb3IgKEZpbHRlciBjbGllbnRGaWx0ZXIgOiBjbGllbnRGaWx0ZXJzKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNsaWVudEZpbHRlciAhPSBudWxsKSB7CkBAIC0xNTgsNyArMTU4LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGJ1aWxkZXI7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci9wcm94eS9IdHRwUmVzcG9uc2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL3Byb3h5L0h0dHBSZXNwb25zZS5qYXZhCmluZGV4IDRiNWRmOWEuLjczYWZjMzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL3Byb3h5L0h0dHBSZXNwb25zZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL3Byb3h5L0h0dHBSZXNwb25zZS5qYXZhCkBAIC0yMCw2OSArMjAsNjkgQEAKIAogLyoKICAqCi0qIFRoaXMgY2xhc3MgaXMgYSB3cmFwcGVyIGFyb3VuZCBldmVyeXRoaW5nIGFzc29jaWF0ZWQgd2l0aCBhIHJlcGx5IGZyb20gYW4gSFRUUCBzZXJ2ZXIuVGhpcyBpcyB1c2VkIGJ5IAorKiBUaGlzIGNsYXNzIGlzIGEgd3JhcHBlciBhcm91bmQgZXZlcnl0aGluZyBhc3NvY2lhdGVkIHdpdGggYSByZXBseSBmcm9tIGFuIEhUVFAgc2VydmVyLlRoaXMgaXMgdXNlZCBieQogICp0aGUgcHJveHkgcGFydCBvZiBodHBwZCBjbGFzcy4KICAqCiAgKi8KIHB1YmxpYyBjbGFzcyBIdHRwUmVzcG9uc2UKIHsKLQlpbnQgc3RhdHVzQ29kZTsKLQlTdHJpbmcgcmVhc29uUGhyYXNlOwotCU1pbWVIZWFkZXIgbWg7Ci0Jc3RhdGljIFN0cmluZyBDUkxGPSJcclxuIjsKLQkKLQkvKgorICAgIGludCBzdGF0dXNDb2RlOworICAgIFN0cmluZyByZWFzb25QaHJhc2U7CisgICAgTWltZUhlYWRlciBtaDsKKyAgICBzdGF0aWMgU3RyaW5nIENSTEY9IlxyXG4iOworCisgICAgLyoKICAgICAgICAgICpXaGVuIGEgcmVxdWVzdCBpcyBzZW50IHRvIEhUVFAgc2VydmVyLCBpdCByZXNwb25kcyB3aXRoIGEgIHN0YXR1cyBjb2RlLCB3aGljaCBpcyBzdG9yZWQgaW4gc3RhdHVzQ29kZSwKICAgICAgICAgICphbmQgYSB0ZXh0dWFsIGVxdWl2YWxlbnQsd2hpY2ggaXMgc3RvcmVkIGluIHJlYXNvblBocmFzZS5UaGlzIHNpbmdsZSBsaW5lIHJlc3BvbnNlIGlzIGZvbGxvd2VkIGJ5IGEgTUlNRSBoZWFkZXIuTWltZUhlYWRlciBjbGFzcyBpcyB1c2VkCiAgICAgICAgICAqdG8gcGFyc2UgdGhpcyBzdHJpbmcuVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGNvbnN0cnVjdG9yIG9mIEh0dHBSZXNwb25zZS4KLQkgKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCisgICAgICogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQogICAgICAgICAgKkBDb21wYW55IFN1biBNaWNyb3N5c3RlbXMgSW5jLgotICAgICAgICAgQHBhcmFtCQlyZXF1ZXN0CVN0cmluZyByZXF1ZXN0Ci0JKi8KLQlwdWJsaWMgdm9pZCBwYXJzZShTdHJpbmcgcmVxdWVzdCkKLQl7Ci0JCWludCBmc3A9cmVxdWVzdC5pbmRleE9mKCcgJyk7Ci0JCWludCBuc3A9cmVxdWVzdC5pbmRleE9mKCcgJyxmc3ArMSk7Ci0JCWludCBlb2w9cmVxdWVzdC5pbmRleE9mKCdcbicpOwotCQlTdHJpbmcgcHJvdG9jb2w9cmVxdWVzdC5zdWJzdHJpbmcoMCxmc3ApOwotCQlzdGF0dXNDb2RlPUludGVnZXIucGFyc2VJbnQocmVxdWVzdC5zdWJzdHJpbmcoZnNwKzEsbnNwKSk7Ci0JCXJlYXNvblBocmFzZT1yZXF1ZXN0LnN1YnN0cmluZyhuc3ArMSxlb2wpOwotCQlTdHJpbmcgcmF3X21pbWVfaGVhZGVyPXJlcXVlc3Quc3Vic3RyaW5nKGVvbCsxKTsKLQkJbWg9bmV3IE1pbWVIZWFkZXIocmF3X21pbWVfaGVhZGVyKTsKLQl9CisgICAgICAgICBAcGFyYW0gICAgICAgIHJlcXVlc3QgICAgU3RyaW5nIHJlcXVlc3QKKyAgICAqLworICAgIHB1YmxpYyB2b2lkIHBhcnNlKFN0cmluZyByZXF1ZXN0KQorICAgIHsKKyAgICAgICAgaW50IGZzcD1yZXF1ZXN0LmluZGV4T2YoJyAnKTsKKyAgICAgICAgaW50IG5zcD1yZXF1ZXN0LmluZGV4T2YoJyAnLGZzcCsxKTsKKyAgICAgICAgaW50IGVvbD1yZXF1ZXN0LmluZGV4T2YoJ1xuJyk7CisgICAgICAgIFN0cmluZyBwcm90b2NvbD1yZXF1ZXN0LnN1YnN0cmluZygwLGZzcCk7CisgICAgICAgIHN0YXR1c0NvZGU9SW50ZWdlci5wYXJzZUludChyZXF1ZXN0LnN1YnN0cmluZyhmc3ArMSxuc3ApKTsKKyAgICAgICAgcmVhc29uUGhyYXNlPXJlcXVlc3Quc3Vic3RyaW5nKG5zcCsxLGVvbCk7CisgICAgICAgIFN0cmluZyByYXdfbWltZV9oZWFkZXI9cmVxdWVzdC5zdWJzdHJpbmcoZW9sKzEpOworICAgICAgICBtaD1uZXcgTWltZUhlYWRlcihyYXdfbWltZV9oZWFkZXIpOworICAgIH0KIAotCS8qKgotCSogRGVmYXVsdCBDb25zdHJ1Y3Rvci5UYWtlcyBhIHJhdyByZXF1ZXN0IGFzIHBhcmFtZXRlciBhbmQgY2FsbHMgcGFyc2UgdG8gY3JlYXRlIE1pbWVIZWFkZXIuCi0JKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCi0JKiAKLQkqLwotCUh0dHBSZXNwb25zZShTdHJpbmcgcmVxdWVzdCkKLQl7Ci0JCXBhcnNlKHJlcXVlc3QpOwotCX0KKyAgICAvKioKKyAgICAqIERlZmF1bHQgQ29uc3RydWN0b3IuVGFrZXMgYSByYXcgcmVxdWVzdCBhcyBwYXJhbWV0ZXIgYW5kIGNhbGxzIHBhcnNlIHRvIGNyZWF0ZSBNaW1lSGVhZGVyLgorICAgICogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQorICAgICoKKyAgICAqLworICAgIEh0dHBSZXNwb25zZShTdHJpbmcgcmVxdWVzdCkKKyAgICB7CisgICAgICAgIHBhcnNlKHJlcXVlc3QpOworICAgIH0KIAotCS8qKgotCSogQ29uc3RydWN0b3Igd2l0aCB0aHJlZSBwYXJhbWV0ZXJzCi0JKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCi0JKiAKLQkqIEBwYXJhbQkJY29kZQlJbnRlZ2VyCi0JKiBAcGFyYW0JCXJlYXNvbiAJVGhlIHJlYXNvbiBTdHJpbmcKLQkqIEBwYXJhbQkJbQkJTWltZWhlYWRlcgkKLQkqLwotCUh0dHBSZXNwb25zZShpbnQgY29kZSxTdHJpbmcgcmVhc29uLE1pbWVIZWFkZXIgbSkKLQl7Ci0JCXN0YXR1c0NvZGU9Y29kZTsKLQkJcmVhc29uUGhyYXNlPXJlYXNvbjsKLQkJbWg9bTsKLQl9Ci0JCi0JLyoqCi0JKiAgCi0JKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCi0JKiBAcmV0dXJuICAgICAgIFN0cmluZwotCSovCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0JewotCQlyZXR1cm4gIkhUVFAvMS4wICIrIHN0YXR1c0NvZGUgKyIgIiArIHJlYXNvblBocmFzZSArIENSTEYgKyBtaCArIENSTEY7CisgICAgLyoqCisgICAgKiBDb25zdHJ1Y3RvciB3aXRoIHRocmVlIHBhcmFtZXRlcnMKKyAgICAqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKKyAgICAqCisgICAgKiBAcGFyYW0gICAgICAgIGNvZGUgICAgSW50ZWdlcgorICAgICogQHBhcmFtICAgICAgICByZWFzb24gICAgIFRoZSByZWFzb24gU3RyaW5nCisgICAgKiBAcGFyYW0gICAgICAgIG0gICAgICAgIE1pbWVoZWFkZXIKKyAgICAqLworICAgIEh0dHBSZXNwb25zZShpbnQgY29kZSxTdHJpbmcgcmVhc29uLE1pbWVIZWFkZXIgbSkKKyAgICB7CisgICAgICAgIHN0YXR1c0NvZGU9Y29kZTsKKyAgICAgICAgcmVhc29uUGhyYXNlPXJlYXNvbjsKKyAgICAgICAgbWg9bTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqCisgICAgKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCisgICAgKiBAcmV0dXJuICAgICAgIFN0cmluZworICAgICovCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gIkhUVFAvMS4wICIrIHN0YXR1c0NvZGUgKyIgIiArIHJlYXNvblBocmFzZSArIENSTEYgKyBtaCArIENSTEY7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvcHJveHkvTG9nTWVzc2FnZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvcHJveHkvTG9nTWVzc2FnZS5qYXZhCmluZGV4IDNiY2ExNjUuLjRmOTA1ZGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL3Byb3h5L0xvZ01lc3NhZ2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci9wcm94eS9Mb2dNZXNzYWdlLmphdmEKQEAgLTIzLDUgKzIzLDUgQEAKICoKICovCiBwdWJsaWMgaW50ZXJmYWNlIExvZ01lc3NhZ2V7Ci0JcHVibGljIHZvaWQgbG9nKFN0cmluZyBtc2cpOworICAgIHB1YmxpYyB2b2lkIGxvZyhTdHJpbmcgbXNnKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL3Byb3h5L01pbWVIZWFkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL3Byb3h5L01pbWVIZWFkZXIuamF2YQppbmRleCA5NTI3YTg3Li4wYjc3ZjA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci9wcm94eS9NaW1lSGVhZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvcHJveHkvTWltZUhlYWRlci5qYXZhCkBAIC0yMiwxMTQgKzIyLDExNCBAQAogKiBNSU1FIGlzIGFuIGludGVybmV0IHN0YW5kYXJkIGZvciBjb21tdW5pY2F0aW5nIG11bHRpbWVkaWEgY29udGVudCBvdmVyIGUtbWFpbCBzeXN0ZW1zLk1pbWVIZWFkZXIgZXh0ZW5kcyBIYXNoVGFibGUgc28gdGhhdCBpdCBjYW4gc3RvcmUga2V5IHZhbHVlIHBhaXJzLgogKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCiAgKkNvbXBhbnk6IFN1biBNaWNyb3N5c3RlbXMgSW5jCi0qIAorKgogKi8KIHB1YmxpYyBjbGFzcyBNaW1lSGVhZGVyIGV4dGVuZHMgSGFzaHRhYmxlCiB7Ci0JLyoqCi0JKiBUYWtlcyBhIFN0cmluZyBhcyBhIHBhcmFtZXRlciBhbmQgcGFyc2VzIGl0LlRha2VzIGEgcmF3IE1JTUUtZm9ybWF0dGVkIFN0cmluZyBhbmQgZW50ZXIgaXRzIGtleS92YWx1ZSBwYWlycyBpbnRvIGEgZ2l2ZW4gaW5zdGFuY2Ugb2YgTWltZUhlYWRlci5Vc2VzCisgICAgLyoqCisgICAgKiBUYWtlcyBhIFN0cmluZyBhcyBhIHBhcmFtZXRlciBhbmQgcGFyc2VzIGl0LlRha2VzIGEgcmF3IE1JTUUtZm9ybWF0dGVkIFN0cmluZyBhbmQgZW50ZXIgaXRzIGtleS92YWx1ZSBwYWlycyBpbnRvIGEgZ2l2ZW4gaW5zdGFuY2Ugb2YgTWltZUhlYWRlci5Vc2VzCiAgICAgICAgICAqU3RyaW5nVG9rZW5pemVyIHRvIHNwbGl0IHRoZSBpbnB1dCBkYXRhIGludG8gaW5kaXZpZHVhbCBsaW5lcyBtYXJrZWQgYnkgQ1JMRihcclxuKSBzZXF1ZW5jZS4KLQkqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKLQkqIEByZXR1cm4gICAgICAgdm9pZAotCSogQHBhcmFtCQlkYXRhCVRoZSBzdHJpbmcgdG8gYmUgcGFyc2VkCi0JKi8KLQl2b2lkIHBhcnNlKFN0cmluZyBkYXRhKQotCXsKLQlTdHJpbmdUb2tlbml6ZXIgc3Q9bmV3IFN0cmluZ1Rva2VuaXplcihkYXRhLCJcclxuIik7Ci0JCXdoaWxlKHN0Lmhhc01vcmVUb2tlbnMoKSkKLQkJewotCQkJU3RyaW5nIHM9c3QubmV4dFRva2VuKCk7Ci0JCQlpbnQgY29sb249cy5pbmRleE9mKCc6Jyk7Ci0JCQlTdHJpbmcga2V5PXMuc3Vic3RyaW5nKDAsY29sb24pOwotCQkJU3RyaW5nIHZhbD1zLnN1YnN0cmluZyhjb2xvbisyKTsKLQkJCXB1dChrZXksdmFsKTsKLQkJfQotCX0KLQkKLQkvKioKLQkqIERlZmF1bHQgQ29uc3RydWN0b3IgCisgICAgKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCisgICAgKiBAcmV0dXJuICAgICAgIHZvaWQKKyAgICAqIEBwYXJhbSAgICAgICAgZGF0YSAgICBUaGUgc3RyaW5nIHRvIGJlIHBhcnNlZAorICAgICovCisgICAgdm9pZCBwYXJzZShTdHJpbmcgZGF0YSkKKyAgICB7CisgICAgU3RyaW5nVG9rZW5pemVyIHN0PW5ldyBTdHJpbmdUb2tlbml6ZXIoZGF0YSwiXHJcbiIpOworICAgICAgICB3aGlsZShzdC5oYXNNb3JlVG9rZW5zKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZyBzPXN0Lm5leHRUb2tlbigpOworICAgICAgICAgICAgaW50IGNvbG9uPXMuaW5kZXhPZignOicpOworICAgICAgICAgICAgU3RyaW5nIGtleT1zLnN1YnN0cmluZygwLGNvbG9uKTsKKyAgICAgICAgICAgIFN0cmluZyB2YWw9cy5zdWJzdHJpbmcoY29sb24rMik7CisgICAgICAgICAgICBwdXQoa2V5LHZhbCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAqIERlZmF1bHQgQ29uc3RydWN0b3IKICAgICAgICAgICpDbGFzcyBpcyBhIHN1YmNsYXNzIG9mIEhhc2hUYWJsZSBzbyB0aGF0IGl0IGNhbiBjb252ZW5laW50bHkgc3RvcmUgYW5kIHJldHJlaXZlIHRoZSBrZXkvdmFsdWUgcGFpcnMKICAgICAgICAgICphc3NvY2lhdGVkIHdpdGggYSBNSU1FIGhlYWRlci5JdCBjcmVhdGVzIGEgYmxhbmsgTWltZUhlYWRlciB3aXRoIG5vIGtleXMuCi0JKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCi0JKiAKLQkqIEBwYXJhbQkJTm9uZQotCSovCi0JTWltZUhlYWRlcigpe30KLQkKLQkvKioKLQkqIFRoaXMgY29uc3RydWN0b3IgdGFrZXMgc3RybmcgZm9ybWF0dGVkIGFzIE1JTUUgaGVhZGVyIGFuZCBwYXJzZXMgaXQgZm9yIHRoZSBpbml0aWFsIGNvbnRlbnRzIG9mIHRoZSBvYmplY3RzLgotCSogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQotCSogCi0JKiBAcGFyYW0JCWQJVGhlIHN0cmluZyB0byBiZSBwYXJzZWQKLQkqLwotCU1pbWVIZWFkZXIoU3RyaW5nIGQpCi0JewotCQlwYXJzZShkKTsKLQl9Ci0JCi0JLyoqCi0JKiBDb252ZXJ0cyB0byBTdHJpbmcgLkl0IHRha2VzIGN1cnJlbnQga2V5L3ZhbHVlIHBhaXJzIHN0b3JlZCBpbiB0aGUgTWltZUhlYWRlciBhbmQgcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGVtIGluCisgICAgKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCisgICAgKgorICAgICogQHBhcmFtICAgICAgICBOb25lCisgICAgKi8KKyAgICBNaW1lSGVhZGVyKCl7fQorCisgICAgLyoqCisgICAgKiBUaGlzIGNvbnN0cnVjdG9yIHRha2VzIHN0cm5nIGZvcm1hdHRlZCBhcyBNSU1FIGhlYWRlciBhbmQgcGFyc2VzIGl0IGZvciB0aGUgaW5pdGlhbCBjb250ZW50cyBvZiB0aGUgb2JqZWN0cy4KKyAgICAqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKKyAgICAqCisgICAgKiBAcGFyYW0gICAgICAgIGQgICAgVGhlIHN0cmluZyB0byBiZSBwYXJzZWQKKyAgICAqLworICAgIE1pbWVIZWFkZXIoU3RyaW5nIGQpCisgICAgeworICAgICAgICBwYXJzZShkKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIENvbnZlcnRzIHRvIFN0cmluZyAuSXQgdGFrZXMgY3VycmVudCBrZXkvdmFsdWUgcGFpcnMgc3RvcmVkIGluIHRoZSBNaW1lSGVhZGVyIGFuZCByZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZW0gaW4KICAgICAgICAgICpNSU1FIGZvcm1hdCwgd2hlcmUga2V5cyBhcmUgcHJpbnRlZCBmb2xsb3dlZCBieSBjb2xvbiBhbmQgYSBzcGFjZSwgYW5kIHRoZW4gdmFsdWUgZm9sbG93ZWQgYnkgQ1JMRi4KLQkqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKLQkqIEByZXR1cm4gICAgICAgU3RyaW5nCi0JKi8KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLQl7Ci0JCVN0cmluZyByZXQ9IiI7Ci0JCUVudW1lcmF0aW9uIGU9a2V5cygpOwotCQl3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKQotCQl7Ci0JCVN0cmluZyBrZXk9KFN0cmluZyllLm5leHRFbGVtZW50KCk7Ci0JCVN0cmluZyB2YWw9KFN0cmluZylnZXQoa2V5KTsKLQkJcmV0Kz1rZXkgKyAiOiAiICsgdmFsICsgIlxyXG4iOwotCQl9Ci0JcmV0dXJuIHJldDsKLQl9CisgICAgKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCisgICAgKiBAcmV0dXJuICAgICAgIFN0cmluZworICAgICovCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCisgICAgeworICAgICAgICBTdHJpbmcgcmV0PSIiOworICAgICAgICBFbnVtZXJhdGlvbiBlPWtleXMoKTsKKyAgICAgICAgd2hpbGUoZS5oYXNNb3JlRWxlbWVudHMoKSkKKyAgICAgICAgeworICAgICAgICBTdHJpbmcga2V5PShTdHJpbmcpZS5uZXh0RWxlbWVudCgpOworICAgICAgICBTdHJpbmcgdmFsPShTdHJpbmcpZ2V0KGtleSk7CisgICAgICAgIHJldCs9a2V5ICsgIjogIiArIHZhbCArICJcclxuIjsKKyAgICAgICAgfQorICAgIHJldHVybiByZXQ7CisgICAgfQogCi0JLyoqCi0JKlRvIHJlbW92ZSB0aGUgZGlzY3JlcGFuY3kgaW4gTUlNRSBzcGVjaWZpY2F0aW9uIGZvciAiQ29udGVudC1UeXBlIiBhbmQgImNvbnRlbnQtdHlwZSIgYW5kICJDb250ZW50LUxlbmd0aCIgdG8gImNvbnRlbnQtbGVuZ3RoIgotICAgICAgICAgKlRvIGF2b2lkIHByb2JsZW1zLCBhbGwgaW5jb21pbmcgYW5kIG91dGdvaW5nIE1pbWVIZWFkZXIga2V5cyBhcmUgY29udmVydGVkIHRvIGNhbm9uaWNhbCBmb3JtLiAKLQkqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKLQkqIEByZXR1cm4gICAgICAgU3RyaW5nCi0JKiBAcGFyYW0JCW1zCVN0cmluZyB0byBiZSBvcGVyYXRlZCB1cG9uCi0JKi8KLQlwcml2YXRlIFN0cmluZyBmaXgoU3RyaW5nIG1zKQotCXsKLQkJY2hhciBjaGFyc1tdPW1zLnRvTG93ZXJDYXNlKCkudG9DaGFyQXJyYXkoKTsKLQkJYm9vbGVhbiB1cGNhc2VOZXh0PXRydWU7Ci0JCWZvcihpbnQgaT0wO2k8Y2hhcnMubGVuZ3RoLTE7aSsrKQotCQl7Ci0JCQljaGFyIGNoPWNoYXJzW2ldOwotCQkJaWYodXBjYXNlTmV4dCAmJiAnYScgPD1jaCAmJiBjaCA8PSd6JykKLQkJCXsKLQkJCQljaGFyc1tpXT0oY2hhcikoY2gtKCdhJy0nQScpKTsKLQkJCX0KLQkJCXVwY2FzZU5leHQ9Y2g9PSctJzsKLQkJfQotCXJldHVybiBuZXcgU3RyaW5nKGNoYXJzKTsKLQl9CisgICAgLyoqCisgICAgKlRvIHJlbW92ZSB0aGUgZGlzY3JlcGFuY3kgaW4gTUlNRSBzcGVjaWZpY2F0aW9uIGZvciAiQ29udGVudC1UeXBlIiBhbmQgImNvbnRlbnQtdHlwZSIgYW5kICJDb250ZW50LUxlbmd0aCIgdG8gImNvbnRlbnQtbGVuZ3RoIgorICAgICAgICAgKlRvIGF2b2lkIHByb2JsZW1zLCBhbGwgaW5jb21pbmcgYW5kIG91dGdvaW5nIE1pbWVIZWFkZXIga2V5cyBhcmUgY29udmVydGVkIHRvIGNhbm9uaWNhbCBmb3JtLgorICAgICogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQorICAgICogQHJldHVybiAgICAgICBTdHJpbmcKKyAgICAqIEBwYXJhbSAgICAgICAgbXMgICAgU3RyaW5nIHRvIGJlIG9wZXJhdGVkIHVwb24KKyAgICAqLworICAgIHByaXZhdGUgU3RyaW5nIGZpeChTdHJpbmcgbXMpCisgICAgeworICAgICAgICBjaGFyIGNoYXJzW109bXMudG9Mb3dlckNhc2UoKS50b0NoYXJBcnJheSgpOworICAgICAgICBib29sZWFuIHVwY2FzZU5leHQ9dHJ1ZTsKKyAgICAgICAgZm9yKGludCBpPTA7aTxjaGFycy5sZW5ndGgtMTtpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgY2g9Y2hhcnNbaV07CisgICAgICAgICAgICBpZih1cGNhc2VOZXh0ICYmICdhJyA8PWNoICYmIGNoIDw9J3onKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNoYXJzW2ldPShjaGFyKShjaC0oJ2EnLSdBJykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdXBjYXNlTmV4dD1jaD09Jy0nOworICAgICAgICB9CisgICAgcmV0dXJuIG5ldyBTdHJpbmcoY2hhcnMpOworICAgIH0KIAotCS8qKgotCSogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQotCSogQHJldHVybiAgICAgICBTdHJpbmcKLQkqIEBwYXJhbQkJa2V5CVN0cmluZyB0byBiZSBmZXRjaGVkCQotCSovCi0JcHVibGljIFN0cmluZyBnZXQoU3RyaW5nIGtleSkKLQl7Ci0JCXJldHVybiAoU3RyaW5nKXN1cGVyLmdldChmaXgoa2V5KSk7Ci0JfQorICAgIC8qKgorICAgICogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQorICAgICogQHJldHVybiAgICAgICBTdHJpbmcKKyAgICAqIEBwYXJhbSAgICAgICAga2V5ICAgIFN0cmluZyB0byBiZSBmZXRjaGVkCisgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldChTdHJpbmcga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIChTdHJpbmcpc3VwZXIuZ2V0KGZpeChrZXkpKTsKKyAgICB9CiAKLQkvKioKLQkqICAKLQkqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKLQkqIEByZXR1cm4gICAgICAgdm9pZAotCSogQHBhcmFtCQlrZXkJCVRoZSBLZXkgU3RyaW5nCQotCSogQHBhcmFtCQl2YWwgIAlUaGUgdmFsdWUgU3RyaW5nCQotCSovCi0JcHVibGljIHZvaWQgcHV0KFN0cmluZyBrZXksU3RyaW5nIHZhbCkKLQl7Ci0JCXN1cGVyLnB1dChmaXgoa2V5KSx2YWwpOwotCX0KLQkKLQkKKyAgICAvKioKKyAgICAqCisgICAgKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCisgICAgKiBAcmV0dXJuICAgICAgIHZvaWQKKyAgICAqIEBwYXJhbSAgICAgICAga2V5ICAgICAgICBUaGUgS2V5IFN0cmluZworICAgICogQHBhcmFtICAgICAgICB2YWwgICAgICBUaGUgdmFsdWUgU3RyaW5nCisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBwdXQoU3RyaW5nIGtleSxTdHJpbmcgdmFsKQorICAgIHsKKyAgICAgICAgc3VwZXIucHV0KGZpeChrZXkpLHZhbCk7CisgICAgfQorCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL3Byb3h5L1RlbXBTdG9yZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvcHJveHkvVGVtcFN0b3JlLmphdmEKaW5kZXggZDJkNGVjMC4uNDZhOWU4NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvcHJveHkvVGVtcFN0b3JlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvcHJveHkvVGVtcFN0b3JlLmphdmEKQEAgLTE5LDY3ICsxOSw2NyBAQAogaW1wb3J0IGphdmEuaW8uKjsKIAogCi0JLyoqCi0JKiBUaGlzIGNsYXNzIGlzIGZvciBjb3B5aW5nIGFycmF5IG9mIGJ5dGVzLiAKLQkqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKKyAgICAvKioKKyAgICAqIFRoaXMgY2xhc3MgaXMgZm9yIGNvcHlpbmcgYXJyYXkgb2YgYnl0ZXMuCisgICAgKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCiAgICAgICAgICpDb21wYW55OiBTdW4gTWljcm9zeXN0ZW1zIEluYwotCSogCi0JKiAKLQkqLworICAgICoKKyAgICAqCisgICAgKi8KIHB1YmxpYyBjbGFzcyBUZW1wU3RvcmUKIHsKLQlTdHJpbmcgdXJsOwotCU1pbWVIZWFkZXIgbWg7Ci0JYnl0ZSBkYXRhW107Ci0JaW50IGxlbmd0aD0wOworICAgIFN0cmluZyB1cmw7CisgICAgTWltZUhlYWRlciBtaDsKKyAgICBieXRlIGRhdGFbXTsKKyAgICBpbnQgbGVuZ3RoPTA7CiAKLQkvKioKLQkqIENvbnN0cnVjdG9yIHRoYXQgVGFrZXMgdHdvIFN0cmluZ2EgYXMgcGFyYW1ldGVyIAotCSogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQotCSogCi0JKiBAcGFyYW0JCXUJVGhlIHN0cmluZyBVUkwKLQkqIEBwYXJhbQkJbQltaW1laGVhZGVyCi0JKi8KLQlwdWJsaWMgVGVtcFN0b3JlKFN0cmluZyB1LE1pbWVIZWFkZXIgbSkKLQl7Ci0JCXVybD11OwotCQltaD1tOwotCQlTdHJpbmcgY2w9bWguZ2V0KChTdHJpbmcpIkNvbnRlbnQtTGVuZ3RoIik7Ci0JCWlmKGNsIT1udWxsKQotCQl7Ci0JCWRhdGE9bmV3IGJ5dGVbSW50ZWdlci5wYXJzZUludChjbCldOwotCQl9Ci0JfQorICAgIC8qKgorICAgICogQ29uc3RydWN0b3IgdGhhdCBUYWtlcyB0d28gU3RyaW5nYSBhcyBwYXJhbWV0ZXIKKyAgICAqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKKyAgICAqCisgICAgKiBAcGFyYW0gICAgICAgIHUgICAgVGhlIHN0cmluZyBVUkwKKyAgICAqIEBwYXJhbSAgICAgICAgbSAgICBtaW1laGVhZGVyCisgICAgKi8KKyAgICBwdWJsaWMgVGVtcFN0b3JlKFN0cmluZyB1LE1pbWVIZWFkZXIgbSkKKyAgICB7CisgICAgICAgIHVybD11OworICAgICAgICBtaD1tOworICAgICAgICBTdHJpbmcgY2w9bWguZ2V0KChTdHJpbmcpIkNvbnRlbnQtTGVuZ3RoIik7CisgICAgICAgIGlmKGNsIT1udWxsKQorICAgICAgICB7CisgICAgICAgIGRhdGE9bmV3IGJ5dGVbSW50ZWdlci5wYXJzZUludChjbCldOworICAgICAgICB9CisgICAgfQogCiAKIAotCS8qKgotCSogCi0JKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCi0JKiAKLQkqIEBwYXJhbQkJZFtdCUJ5dGUgYXJyYXkKLQkqIEBwYXJhbQkJbiBJbnRlZ2VyCi0JKi8KLQl2b2lkIGFwcGVuZChieXRlIGRbXSxpbnQgbikKLQl7Ci0JCWlmKGRhdGE9PW51bGwpCi0JCXsKLQkJCWRhdGE9bmV3IGJ5dGVbbl07Ci0JCQlTeXN0ZW0uYXJyYXljb3B5KGQsMCxkYXRhLDAsbik7Ci0JCQlsZW5ndGgrPW47Ci0JCX0gZWxzZSBpZihsZW5ndGgrbj5kYXRhLmxlbmd0aCkKLQkJewotCQlieXRlIG9sZFtdPWRhdGE7Ci0JCWRhdGE9bmV3IGJ5dGVbb2xkLmxlbmd0aCtuXTsKLQkJU3lzdGVtLmFycmF5Y29weShvbGQsMCxkYXRhLDAsb2xkLmxlbmd0aCk7Ci0JCVN5c3RlbS5hcnJheWNvcHkoZCwwLGRhdGEsb2xkLmxlbmd0aCxuKTsKLQkJbGVuZ3RoKz1uOwotCQl9ZWxzZQotCQl7Ci0JCVN5c3RlbS5hcnJheWNvcHkoZCwwLGRhdGEsbGVuZ3RoLG4pOwotCQlsZW5ndGgrPW47Ci0JCX0KLQl9CisgICAgLyoqCisgICAgKgorICAgICogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQorICAgICoKKyAgICAqIEBwYXJhbSAgICAgICAgZFtdICAgIEJ5dGUgYXJyYXkKKyAgICAqIEBwYXJhbSAgICAgICAgbiBJbnRlZ2VyCisgICAgKi8KKyAgICB2b2lkIGFwcGVuZChieXRlIGRbXSxpbnQgbikKKyAgICB7CisgICAgICAgIGlmKGRhdGE9PW51bGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRhdGE9bmV3IGJ5dGVbbl07CisgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGQsMCxkYXRhLDAsbik7CisgICAgICAgICAgICBsZW5ndGgrPW47CisgICAgICAgIH0gZWxzZSBpZihsZW5ndGgrbj5kYXRhLmxlbmd0aCkKKyAgICAgICAgeworICAgICAgICBieXRlIG9sZFtdPWRhdGE7CisgICAgICAgIGRhdGE9bmV3IGJ5dGVbb2xkLmxlbmd0aCtuXTsKKyAgICAgICAgU3lzdGVtLmFycmF5Y29weShvbGQsMCxkYXRhLDAsb2xkLmxlbmd0aCk7CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoZCwwLGRhdGEsb2xkLmxlbmd0aCxuKTsKKyAgICAgICAgbGVuZ3RoKz1uOworICAgICAgICB9ZWxzZQorICAgICAgICB7CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoZCwwLGRhdGEsbGVuZ3RoLG4pOworICAgICAgICBsZW5ndGgrPW47CisgICAgICAgIH0KKyAgICB9CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvcHJveHkvaHR0cGQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL3Byb3h5L2h0dHBkLmphdmEKaW5kZXggZWRmYTc1ZC4uZjI2NmQwYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvcHJveHkvaHR0cGQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci9wcm94eS9odHRwZC5qYXZhCkBAIC00Nyw4ICs0Nyw4IEBACiAgICAgICAgICoKICAgICAgICAgKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCiAgICAgICAgICoKLSAgICAgICAgKiBAcGFyYW0JCXMJVGhlIHN0cmluZyB0byBiZSBjb252ZXJ0ZWQKLSAgICAgICAgKiBAcmV0dXJuCQlieXRlW10KKyAgICAgICAgKiBAcGFyYW0gICAgICAgIHMgICAgVGhlIHN0cmluZyB0byBiZSBjb252ZXJ0ZWQKKyAgICAgICAgKiBAcmV0dXJuICAgICAgICBieXRlW10KICAgICAgICAgKi8KICAgICAgICAgcHJpdmF0ZSBmaW5hbCBieXRlW10gdG9CeXRlcyhTdHJpbmcgcykKICAgICAgICAgewpAQCAtNjEsOSArNjEsOSBAQAogICAgICAgICAqCiAgICAgICAgICogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQogICAgICAgICAqCi0gICAgICAgICogQHBhcmFtCQlvdXQJVGhlIG91dHB1dCBzdHJlYW0KLSAgICAgICAgKiBAcGFyYW0JCXMJVGhlIHN0cmluZwotICAgICAgICAqIEByZXR1cm4JCXZvaWQKKyAgICAgICAgKiBAcGFyYW0gICAgICAgIG91dCAgICBUaGUgb3V0cHV0IHN0cmVhbQorICAgICAgICAqIEBwYXJhbSAgICAgICAgcyAgICBUaGUgc3RyaW5nCisgICAgICAgICogQHJldHVybiAgICAgICAgdm9pZAogICAgICAgICAqLwogICAgICAgICBwcml2YXRlIHZvaWQgd3JpdGVTdHJpbmcoT3V0cHV0U3RyZWFtIG91dCxTdHJpbmcgcykKICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgKgogICAgICAgICAqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKICAgICAgICAgKgotICAgICAgICAqIEBwYXJhbQkJaW4JVGhlIElucHV0U3RyZWFtCi0gICAgICAgICogQHBhcmFtCQl1cmwJVGhlIHN0cmluZyBVUkwKLSAgICAgICAgKiBAcGFyYW0JCW1oIE1pbWVoZWFkZXIKLSAgICAgICAgKiBAcmV0dXJuCQlUZW1wU3RvcmUKKyAgICAgICAgKiBAcGFyYW0gICAgICAgIGluICAgIFRoZSBJbnB1dFN0cmVhbQorICAgICAgICAqIEBwYXJhbSAgICAgICAgdXJsICAgIFRoZSBzdHJpbmcgVVJMCisgICAgICAgICogQHBhcmFtICAgICAgICBtaCBNaW1laGVhZGVyCisgICAgICAgICogQHJldHVybiAgICAgICAgVGVtcFN0b3JlCiAgICAgICAgICovCiAgICAgICAgIHByaXZhdGUgVGVtcFN0b3JlIGxvYWRGaWxlKElucHV0U3RyZWFtIGluLFN0cmluZyB1cmwsTWltZUhlYWRlciBtaCkKICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCkBAIC0xMDQsMTEgKzEwNCwxMSBAQAogICAgICAgICAqCiAgICAgICAgICogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQogICAgICAgICAqCi0gICAgICAgICogQHBhcmFtCQljbWQJU3RyaW5nCi0gICAgICAgICogQHBhcmFtCQl1cmwJVGhlIHN0cmluZyBVUkwKLSAgICAgICAgKiBAcGFyYW0JCWNvZGUgaW50ZWdlcgorICAgICAgICAqIEBwYXJhbSAgICAgICAgY21kICAgIFN0cmluZworICAgICAgICAqIEBwYXJhbSAgICAgICAgdXJsICAgIFRoZSBzdHJpbmcgVVJMCisgICAgICAgICogQHBhcmFtICAgICAgICBjb2RlIGludGVnZXIKICAgICAgICAgKiBAcGFyYW0gICAgICAgIHNpemUgSW50ZWdlcgotICAgICAgICAqIEByZXR1cm4JCXZvaWQKKyAgICAgICAgKiBAcmV0dXJuICAgICAgICB2b2lkCiAgICAgICAgICovCiAgICAgICAgIHByaXZhdGUgdm9pZCBsb2dFbnRyeShTdHJpbmcgY21kLFN0cmluZyB1cmwsaW50IGNvZGUsaW50IHNpemUpCiAgICAgICAgIHsKQEAgLTEyNCwxMCArMTI0LDEwIEBACiAgICAgICAgICoKICAgICAgICAgKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCiAgICAgICAgICoKLSAgICAgICAgKiBAcGFyYW0JCWluCVRoZSBJbnB1dFN0cmVhbQotICAgICAgICAqIEBwYXJhbQkJdXJsCVRoZSBzdHJpbmcgVVJMCi0gICAgICAgICogQHBhcmFtCQltaCBNaW1laGVhZGVyCi0gICAgICAgICogQHJldHVybgkJVGVtcFN0b3JlCisgICAgICAgICogQHBhcmFtICAgICAgICBpbiAgICBUaGUgSW5wdXRTdHJlYW0KKyAgICAgICAgKiBAcGFyYW0gICAgICAgIHVybCAgICBUaGUgc3RyaW5nIFVSTAorICAgICAgICAqIEBwYXJhbSAgICAgICAgbWggTWltZWhlYWRlcgorICAgICAgICAqIEByZXR1cm4gICAgICAgIFRlbXBTdG9yZQogICAgICAgICAqLwogICAgICAgICBwcml2YXRlIFN0cmluZyBnZXRSYXdSZXF1ZXN0KElucHV0U3RyZWFtIGluKQogICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KQEAgLTE2OSwyOCArMTY5LDI4IEBACiAgICAgICAgICoKICAgICAgICAgKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCiAgICAgICAgICoKLSAgICAgICAgKiBAcGFyYW0JCW91dAlUaGUgT3V0cHV0U3RyZWFtCi0gICAgICAgICogQHBhcmFtCQl1cmwJVGhlIHN0cmluZyBVUkwKLSAgICAgICAgKiBAcGFyYW0JCWlubWggTWltZWhlYWRlcgotICAgICAgICAqIEBwYXJhbQkJaW4gICBUaGUgaW5wdXQgc3RyZWFtCi0gICAgICAgICogQHJldHVybgkJdm9pZAorICAgICAgICAqIEBwYXJhbSAgICAgICAgb3V0ICAgIFRoZSBPdXRwdXRTdHJlYW0KKyAgICAgICAgKiBAcGFyYW0gICAgICAgIHVybCAgICBUaGUgc3RyaW5nIFVSTAorICAgICAgICAqIEBwYXJhbSAgICAgICAgaW5taCBNaW1laGVhZGVyCisgICAgICAgICogQHBhcmFtICAgICAgICBpbiAgIFRoZSBpbnB1dCBzdHJlYW0KKyAgICAgICAgKiBAcmV0dXJuICAgICAgICB2b2lkCiAgICAgICAgICovCiAgICAgICAgIHByaXZhdGUgdm9pZCBoYW5kbGVQcm94eShPdXRwdXRTdHJlYW0gb3V0LFN0cmluZyB1cmwsTWltZUhlYWRlciBpbm1oLElucHV0U3RyZWFtIGluKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGludCBzdGFydD11cmwuaW5kZXhPZigiOi8vIikgKzM7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpbnQgcGF0aD11cmwuaW5kZXhPZignLycsc3RhcnQpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgU3RyaW5nIHNpdGU9dXJsLnN1YnN0cmluZyhzdGFydCxwYXRoKS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgU3RyaW5nIHNlcnZlcl91cmw9dXJsLnN1YnN0cmluZyhwYXRoKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGludCBjb2xvbj1zaXRlLmluZGV4T2YoJzonKTsKICAgICAgICAgICAgICAgICBpZihjb2xvbiA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgcG9ydD1JbnRlZ2VyLnBhcnNlSW50KHNpdGUuc3Vic3RyaW5nKGNvbG9uKzEpKTsKICAgICAgICAgICAgICAgICAgICAgc2l0ZT1zaXRlLnN1YnN0cmluZygwLGNvbG9uKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIGZpbGVvdXQ9bmV3IEZpbGVPdXRwdXRTdHJlYW0oInNjcmlwdC50eHQiLHRydWUpOwogICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludCgiXG4gU2VydmVyIGF0IHBvcnQiICsgcG9ydCArICJcbiIpOwogICAgICAgICAgICAgICAgIFNvY2tldCBzZXJ2ZXI9bmV3IFNvY2tldChzaXRlLHBvcnQpOwpAQCAtMjAzLDEzICsyMDMsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgYnl0ZSBwb3N0YnVmW109bmV3IGJ5dGVbY29udGVudF9sZW5ndGhdOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPTA7IGkgPCBjb250ZW50X2xlbmd0aDsgaSsrKQogICAgICAgICAgICAgICAgICAgICAgICAgcG9zdGJ1ZltpXT0oYnl0ZSlpbi5yZWFkKCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTdHJpbmcgcG9zdGRhdGE9bmV3IFN0cmluZyhwb3N0YnVmLDAsaSk7CiAgICAgICAgICAgICAgICAgICAvLyAgU3lzdGVtLm91dC5wcmludCgiXG4gUE9TVCBkYXRhIHdpdGhvdXQgbWltZSBoZWFkZXIgaXMgIiArIHBvc3RkYXRhICsgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTdHJpbmcgcG9zdD0iUE9TVCIgKyAiICIgKyBzZXJ2ZXJfdXJsKyAiICIgKyAiSFRUUC8xLjAiICsgQ1JMRiArIGlubWgKICAgICAgICAgICAgICAgICAgICsgQ1JMRiArIHBvc3RkYXRhKyBDUkxGK0NSTEY7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJcblBPU1QgcmVxdWVzdCBzZW50IGlzICIgKyBwb3N0KTsKICAgICAgICAgICAgICAgICAgIGJ5dGUgZmlsZWJ1ZltdPXBvc3QuZ2V0Qnl0ZXMoKTsKICAgICAgICAgICAgICAgICAgIGZvciggaT0wO2k8ZmlsZWJ1Zi5sZW5ndGg7aSsrKQpAQCAtMjI1LDcgKzIyNSw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgZmlyc3Q9U3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyaW5nKHNlcnZlcl9vdXQscG9zdCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByYXdfcmVxdWVzdD1nZXRSYXdSZXF1ZXN0KHNlcnZlcl9pbik7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIlxuIFNlcnZlciBSZXNwb25zZSBIZWFkZXIgaXMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICIgKyByYXdfcmVxdWVzdCArICJcbiIpOwogCkBAIC0yMzMsMjQgKzIzMywyNCBAQAogICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmluZyhvdXQsc2VydmVyX3Jlc3BvbnNlLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICBlbmQ9U3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludCgiXG4gU2VydmVyIFJlc3BvbnNlIEhlYWRlciBpcy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIiArIHNlcnZlcl9yZXNwb25zZS5zdGF0dXNDb2RlICsgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmKHNlcnZlcl9yZXNwb25zZS5zdGF0dXNDb2RlPT0yMDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICAgICBUZW1wU3RvcmUgdWNlPWxvYWRGaWxlKHNlcnZlcl9pbix1cmwsc2VydmVyX3Jlc3BvbnNlLm1oKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZSh1Y2UuZGF0YSwwLHVjZS5sZW5ndGgpOwotICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLyogICAgYnl0ZSBmaWxlYnVmW109cG9zdC5nZXRCeXRlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgZm9yKCBpPTA7aTxmaWxlYnVmLmxlbmd0aDtpKyspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW91dC53cml0ZShmaWxlYnVmW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgCisKKwogICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRva2VuPSIhIisiXG4iKyIhIjsKICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUgdG9rZW5ieXRlc1tdPXRva2VuLmdldEJ5dGVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0wO2k8dG9rZW5ieXRlcy5sZW5ndGg7aSsrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVvdXQud3JpdGUodG9rZW5ieXRlc1tpXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW91dC5jbG9zZSgpOyovCi0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAgICAgbG9nRW50cnkoIlBPU1QiLHNpdGUgKyBzZXJ2ZXJfdXJsLDIwMCx1Y2UubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKHNlcnZlcl9yZXNwb25zZS5zdGF0dXNDb2RlPT0zMDIgfHwgc2VydmVyX3Jlc3BvbnNlLnN0YXR1c0NvZGU9PTMwNykgewpAQCAtMjc0LDU5ICsyNzQsNTkgQEAKICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2hraW5nIHJlZGlyZWN0ZWQgcmVxdWVzdCByZXNwb25zZSBjb2RlIisiKioqKioqKioqKioqKioqKioqKiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlbXBTdG9yZSB1Y2UxPWxvYWRGaWxlKHJlX2luLEhvc3QscmVfcmVzcG9uc2UubWgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZSh1Y2UxLmRhdGEsMCx1Y2UxLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dFbnRyeSgiR0VUIixIb3N0LDIwMCx1Y2UxLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmJ5dGUgZmlsZWJ1ZltdPXJlZGlyZWN0cmVxLmdldEJ5dGVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKCBpPTA7aTxmaWxlYnVmLmxlbmd0aDtpKyspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVvdXQud3JpdGUoZmlsZWJ1ZltpXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdG9rZW49IiEiKyJcbiIrIiEiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUgdG9rZW5ieXRlc1tdPXRva2VuLmdldEJ5dGVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MDtpPHRva2VuYnl0ZXMubGVuZ3RoO2krKykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW91dC53cml0ZSh0b2tlbmJ5dGVzW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVvdXQuY2xvc2UoKTsqLwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlcnZlcl9yZXNwb25zZS5zdGF0dXNDb2RlPT0zMDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKjMwNCBzdGF0dXMgY29kZSoqKioqKioqKioqKioqKioqKioqKioqKiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlcT1tZXRob2RTdXBwb3J0ZWQgKyAiICIgICsgc2VydmVyX3VybCArICIgIiArIkhUVFAvMS4wIiArIENSTEYgKyBpbm1oICsgQ1JMRiArIENSTEY7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIlxuIFJlcXVlc3Qgc3RyaW5nIHNlbnQgdG8gc2VydmVyXG4iICsgcmVxICk7CiAgICAgICAgICAgICAgICAgICAgIGJ5dGUgZmlsZWJ1ZjJbXT1yZXEuZ2V0Qnl0ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgZm9yKGludCBpPTA7aTxmaWxlYnVmMi5sZW5ndGg7aSsrKQogICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW91dC53cml0ZShmaWxlYnVmMltpXSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuZXd0b2tlbj0iISIrIlxuIisiISI7CiAgICAgICAgICAgICAgICAgICAgIGJ5dGUgdG9rZW5ieXRlczFbXT1uZXd0b2tlbi5nZXRCeXRlcygpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBmb3IoaW50IGk9MDtpPHRva2VuYnl0ZXMxLmxlbmd0aDtpKyspCiAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlb3V0LndyaXRlKHRva2VuYnl0ZXMxW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZmlsZW91dC5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmluZyhzZXJ2ZXJfb3V0LHJlcSk7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByYXdfcmVxdWVzdD1nZXRSYXdSZXF1ZXN0KHNlcnZlcl9pbik7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIlxuIFNlcnZlciBSZXNwb25zZSBpcyAiICsgcmF3X3JlcXVlc3QgKyAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgSHR0cFJlc3BvbnNlIHNlcnZlcl9yZXNwb25zZT1uZXcgSHR0cFJlc3BvbnNlKHJhd19yZXF1ZXN0KTsKICAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJpbmcob3V0LHNlcnZlcl9yZXNwb25zZS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50KCJcbiBTZXJ2ZXIgUmVzcG9uc2UgaXMgIiArIHNlcnZlcl9yZXNwb25zZS5zdGF0dXNDb2RlICsgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmKHNlcnZlcl9yZXNwb25zZS5zdGF0dXNDb2RlPT0yMDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFRlbXBTdG9yZSB1Y2U9bG9hZEZpbGUoc2VydmVyX2luLHVybCxzZXJ2ZXJfcmVzcG9uc2UubWgpOwogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlKHVjZS5kYXRhLDAsdWNlLmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYoc2VydmVyX3Jlc3BvbnNlLnN0YXR1c0NvZGU9PTMwMiB8fCBzZXJ2ZXJfcmVzcG9uc2Uuc3RhdHVzQ29kZT09MzA3KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiKioqKioqSW5zaWRlIFJlZGlyZWN0aW9uKioqKioqKioqIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgSG9zdD1zZXJ2ZXJfcmVzcG9uc2UubWguZ2V0KCJMb2NhdGlvbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIk5ldyBob3N0IGlzIitIb3N0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICAgICBVUkwgbmV3dXJsPW5ldyBVUkwoSG9zdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYWN0dWFsaG9zdD1uZXd1cmwuZ2V0SG9zdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgU29ja2V0IHNlcnZlcnNvY2tldD1uZXcgU29ja2V0KGFjdHVhbGhvc3QsODApOwpAQCAtMzUyLDEyICszNTIsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlIGZpbGVidWZbXT1yZWRpcmVjdHJlcS5nZXRCeXRlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgaT0wO2k8ZmlsZWJ1Zi5sZW5ndGg7aSsrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlb3V0LndyaXRlKGZpbGVidWZbaV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRva2VuPSIhIisiXG4iKyIhIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlIHRva2VuYnl0ZXNbXT10b2tlbi5nZXRCeXRlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgaT0wO2k8dG9rZW5ieXRlcy5sZW5ndGg7aSsrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlb3V0LndyaXRlKHRva2VuYnl0ZXNbaV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW91dC5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CkBAIC0zNjUsOSArMzY1LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKjMwNCBzdGF0dXMgY29kZSoqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIHNlcnZlcl9vdXQuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2F0Y2goSU9FeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGxvZy5sb2coIkV4Y2VwdGlvbiIgKyBlKTsKQEAgLTM4Niw5ICszODYsOSBAQAogICAgICAgICAqCiAgICAgICAgICogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQogICAgICAgICAqCi0gICAgICAgICogQHBhcmFtCQlzCVNvY2tldAotICAgICAgICAqIEByZXR1cm4JCXZvaWQKLSAgICAgICAgKiBAdGhyb3dzIAkJSU9FeGNlcHRpb24KKyAgICAgICAgKiBAcGFyYW0gICAgICAgIHMgICAgU29ja2V0CisgICAgICAgICogQHJldHVybiAgICAgICAgdm9pZAorICAgICAgICAqIEB0aHJvd3MgICAgICAgICBJT0V4Y2VwdGlvbgogICAgICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBkb1JlcXVlc3QoU29ja2V0IHMpIHRocm93cyBJT0V4Y2VwdGlvbgogICAgICAgICB7CkBAIC00MzAsNyArNDMwLDcgQEAKICAgICAgICAgKgogICAgICAgICAqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKICAgICAgICAgKgotICAgICAgICAqIEByZXR1cm4JCXZvaWQKKyAgICAgICAgKiBAcmV0dXJuICAgICAgICB2b2lkCiAgICAgICAgICoKICAgICAgICAgKi8KICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkKQEAgLTQ2NSw3ICs0NjUsNyBAQAogICAgICAgICAqCiAgICAgICAgICogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQogICAgICAgICAqCi0gICAgICAgICogQHJldHVybgkJdm9pZAorICAgICAgICAqIEByZXR1cm4gICAgICAgIHZvaWQKICAgICAgICAgKgogICAgICAgICAqLwogICAgICAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc3RhcnQoKQpAQCAtNDgzLDcgKzQ4Myw3IEBACiAgICAgICAgICoKICAgICAgICAgKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCiAgICAgICAgICoKLSAgICAgICAgKiBAcmV0dXJuCQl2b2lkCisgICAgICAgICogQHJldHVybiAgICAgICAgdm9pZAogICAgICAgICAqCiAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzdG9wKCkKQEAgLTQ5OCw3ICs0OTgsNyBAQAogICAgICAgICAqCiAgICAgICAgICogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQogICAgICAgICAqCi0gICAgICAgICogQHJldHVybgkJdm9pZAorICAgICAgICAqIEByZXR1cm4gICAgICAgIHZvaWQKICAgICAgICAgKgogICAgICAgICAqLwogICAgICAgICBwdWJsaWMgaHR0cGQoaW50IHAsIExvZ01lc3NhZ2UgbG0pCkBAIC01MTMsNyArNTEzLDcgQEAKICAgICAgICAgKgogICAgICAgICAqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKICAgICAgICAgKgotICAgICAgICAqIEByZXR1cm4JCXZvaWQKKyAgICAgICAgKiBAcmV0dXJuICAgICAgICB2b2lkCiAgICAgICAgICoKICAgICAgICAgKi8KICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkKQEAgLTUzNiw3ICs1MzYsNyBAQAogICAgICAgICAqCiAgICAgICAgICogQGF1dGhvciAgICAgICBEZWVwYSBTaW5naChkZWVwYS5zaW5naEBzdW4uY29tKQogICAgICAgICAqCi0gICAgICAgICogQHJldHVybgkJdm9pZAorICAgICAgICAqIEByZXR1cm4gICAgICAgIHZvaWQKICAgICAgICAgKgogICAgICAgICAqLwogICAgICAgICBwdWJsaWMgdm9pZCBsb2coU3RyaW5nIG0pCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci93ZWJ0ZXN0L0h0dHBSZXNwb25zZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvd2VidGVzdC9IdHRwUmVzcG9uc2UuamF2YQppbmRleCA5YmFhNmVjLi41ZmMyYTZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci93ZWJ0ZXN0L0h0dHBSZXNwb25zZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL3dlYnRlc3QvSHR0cFJlc3BvbnNlLmphdmEKQEAgLTE4LDM3ICsxOCwzNyBAQAogCiBwdWJsaWMgY2xhc3MgSHR0cFJlc3BvbnNlCiB7Ci0JaW50IHN0YXR1c0NvZGU7Ci0JU3RyaW5nIHJlYXNvblBocmFzZTsKLQlNaW1lSGVhZGVyIG1oOwotCXN0YXRpYyBTdHJpbmcgQ1JMRj0iXHJcbiI7CisgICAgaW50IHN0YXR1c0NvZGU7CisgICAgU3RyaW5nIHJlYXNvblBocmFzZTsKKyAgICBNaW1lSGVhZGVyIG1oOworICAgIHN0YXRpYyBTdHJpbmcgQ1JMRj0iXHJcbiI7CiAKLQl2b2lkIHBhcnNlKFN0cmluZyByZXF1ZXN0KQotCXsKLQkJaW50IGZzcD1yZXF1ZXN0LmluZGV4T2YoJyAnKTsKLQkJaW50IG5zcD1yZXF1ZXN0LmluZGV4T2YoJyAnLGZzcCsxKTsKLQkJaW50IGVvbD1yZXF1ZXN0LmluZGV4T2YoJ1xuJyk7Ci0JCVN0cmluZyBwcm90b2NvbD1yZXF1ZXN0LnN1YnN0cmluZygwLGZzcCk7Ci0JCXN0YXR1c0NvZGU9SW50ZWdlci5wYXJzZUludChyZXF1ZXN0LnN1YnN0cmluZyhmc3ArMSxuc3ApKTsKLQkJcmVhc29uUGhyYXNlPXJlcXVlc3Quc3Vic3RyaW5nKG5zcCsxLGVvbCk7Ci0JCVN0cmluZyByYXdfbWltZV9oZWFkZXI9cmVxdWVzdC5zdWJzdHJpbmcoZW9sKzEpOwotCQltaD1uZXcgTWltZUhlYWRlcihyYXdfbWltZV9oZWFkZXIpOwotCX0KKyAgICB2b2lkIHBhcnNlKFN0cmluZyByZXF1ZXN0KQorICAgIHsKKyAgICAgICAgaW50IGZzcD1yZXF1ZXN0LmluZGV4T2YoJyAnKTsKKyAgICAgICAgaW50IG5zcD1yZXF1ZXN0LmluZGV4T2YoJyAnLGZzcCsxKTsKKyAgICAgICAgaW50IGVvbD1yZXF1ZXN0LmluZGV4T2YoJ1xuJyk7CisgICAgICAgIFN0cmluZyBwcm90b2NvbD1yZXF1ZXN0LnN1YnN0cmluZygwLGZzcCk7CisgICAgICAgIHN0YXR1c0NvZGU9SW50ZWdlci5wYXJzZUludChyZXF1ZXN0LnN1YnN0cmluZyhmc3ArMSxuc3ApKTsKKyAgICAgICAgcmVhc29uUGhyYXNlPXJlcXVlc3Quc3Vic3RyaW5nKG5zcCsxLGVvbCk7CisgICAgICAgIFN0cmluZyByYXdfbWltZV9oZWFkZXI9cmVxdWVzdC5zdWJzdHJpbmcoZW9sKzEpOworICAgICAgICBtaD1uZXcgTWltZUhlYWRlcihyYXdfbWltZV9oZWFkZXIpOworICAgIH0KIAotCUh0dHBSZXNwb25zZShTdHJpbmcgcmVxdWVzdCkKLQl7Ci0JCXBhcnNlKHJlcXVlc3QpOwotCX0KKyAgICBIdHRwUmVzcG9uc2UoU3RyaW5nIHJlcXVlc3QpCisgICAgeworICAgICAgICBwYXJzZShyZXF1ZXN0KTsKKyAgICB9CiAKLQlIdHRwUmVzcG9uc2UoaW50IGNvZGUsU3RyaW5nIHJlYXNvbixNaW1lSGVhZGVyIG0pCi0JewotCQlzdGF0dXNDb2RlPWNvZGU7Ci0JCXJlYXNvblBocmFzZT1yZWFzb247Ci0JCW1oPW07Ci0JfQorICAgIEh0dHBSZXNwb25zZShpbnQgY29kZSxTdHJpbmcgcmVhc29uLE1pbWVIZWFkZXIgbSkKKyAgICB7CisgICAgICAgIHN0YXR1c0NvZGU9Y29kZTsKKyAgICAgICAgcmVhc29uUGhyYXNlPXJlYXNvbjsKKyAgICAgICAgbWg9bTsKKyAgICB9CiAKLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLQl7Ci0JCXJldHVybiAiSFRUUC8xLjAgIisgc3RhdHVzQ29kZSArIiAiICsgcmVhc29uUGhyYXNlICsgQ1JMRiArIG1oICsgQ1JMRjsKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKKyAgICB7CisgICAgICAgIHJldHVybiAiSFRUUC8xLjAgIisgc3RhdHVzQ29kZSArIiAiICsgcmVhc29uUGhyYXNlICsgQ1JMRiArIG1oICsgQ1JMRjsKICAgICAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvd2VidGVzdC9NaW1lSGVhZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci93ZWJ0ZXN0L01pbWVIZWFkZXIuamF2YQppbmRleCA0ZDQyNzU3Li5jNjVkYmJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci93ZWJ0ZXN0L01pbWVIZWFkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci93ZWJ0ZXN0L01pbWVIZWFkZXIuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogKiBAYXV0aG9yICAgICAgIERlZXBhIFNpbmdoKGRlZXBhLnNpbmdoQHN1bi5jb20pCiAgKkNvbXBhbnk6IFN1biBNaWNyb3N5c3RlbXMgSW5jCiAgKkBzZWUgY29tLnN1bi5lanRlLmNjbC53ZWJydW5uZXIucHJveHkuTWltZUhlYWRlcgotKiAKKyoKICovCiAKIHB1YmxpYyBjbGFzcyBNaW1lSGVhZGVyIGV4dGVuZHMgSGFzaHRhYmxlCkBAIC0zNSw4ICszNSw4IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIHJlcXVlc3RQT1NUPWZhbHNlOwogICAgIHByaXZhdGUgYm9vbGVhbiBjb29raWVTZXQ9ZmFsc2U7CiAgICAgcHJpdmF0ZSBTdHJpbmcgcG9zdGRhdGE9bmV3IFN0cmluZygpOwotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBUYWtlcyBhIFN0cmluZyBhcyBhIHBhcmFtZXRlciBhbmQgcGFyc2VzIGl0LlRha2VzIGEgcmF3IE1JTUUtZm9ybWF0dGVkIFN0cmluZyBhbmQgZW50ZXIgaXRzIGtleS92YWx1ZSBwYWlycyBpbnRvIGEgZ2l2ZW4gaW5zdGFuY2Ugb2YgTWltZUhlYWRlci5Vc2VzCiAgICAgICpTdHJpbmdUb2tlbml6ZXIgdG8gc3BsaXQgdGhlIGlucHV0IGRhdGEgaW50byBpbmRpdmlkdWFsIGxpbmVzIG1hcmtlZCBieSBDUkxGKFxyXG4pIHNlcXVlbmNlLgpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgICpJZiBpdCBpcyBQT1NUIHRoZW4gc3RvcmVzIHRoZSBwb3N0IGRhdGEgdG8gYmUgc2VudCB0byBleHRlcm5hbCB3ZWIgc2VydmVyLgogICAgICAqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKICAgICAgKiBAcmV0dXJuICAgICAgIHZvaWQKLSAgICAgKiBAcGFyYW0JCWRhdGEJVGhlIHN0cmluZyB0byBiZSBwYXJzZWQKKyAgICAgKiBAcGFyYW0gICAgICAgIGRhdGEgICAgVGhlIHN0cmluZyB0byBiZSBwYXJzZWQKICAgICAgKipAc2VlIGNvbS5zdW4uZWp0ZS5jY2wud2VicnVubmVyLnByb3h5Lk1pbWVIZWFkZXIKICAgICAqLwogICAgIHZvaWQgcGFyc2UoU3RyaW5nIGRhdGEpCiAgICAgewotCVN0cmluZ1Rva2VuaXplciBzdD1uZXcgU3RyaW5nVG9rZW5pemVyKGRhdGEsIlxyXG4iKTsKLQl3aGlsZShzdC5oYXNNb3JlVG9rZW5zKCkpCi0JeworICAgIFN0cmluZ1Rva2VuaXplciBzdD1uZXcgU3RyaW5nVG9rZW5pemVyKGRhdGEsIlxyXG4iKTsKKyAgICB3aGlsZShzdC5oYXNNb3JlVG9rZW5zKCkpCisgICAgewogICAgICAgICAgICAgU3RyaW5nIHM9c3QubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy9maXJzdCBjaGVjayBmb3IgQ29va2llIGFzIHRoZXkgYXJlIGNvbnRhaW5lZCBpbiBzY3JpcHQgZmlsZS5UaGlzIG5lZWRzIHRvIGJlIHN0cmlwcGVkIGZyb20gdGhlIG5ldyByZXF1ZXN0IHN0cmluZyBzZW50IHRvIHNlcnZlcgogICAgICAgICAgICAgaWYocy5zdGFydHNXaXRoKCJDb29raWUiKSkKICAgICAgICAgICAgIHsKQEAgLTkyLDEwICs5MiwxMCBAQAogICAgICAgICAgICAgICAgIGVsc2UgaWYoKFJlcXVlc3RIZWFkZXIuaW5kZXhPZigiUE9TVCIpKSE9LTEpCiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQT1NUPXRydWU7CiAgICAgICAgICAgICB9Ci0JfQorICAgIH0KICAgICB9CiAKLQlNaW1lSGVhZGVyKCl7fQorICAgIE1pbWVIZWFkZXIoKXt9CiAgICAgICAgIHB1YmxpYyBib29sZWFuIGlmR0VUUmVxdWVzdCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RHRVQ7CkBAIC0xMDgsNzggKzEwOCw3OCBAQAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5SZXF1ZXN0SGVhZGVyOwogICAgICAgICB9Ci0JTWltZUhlYWRlcihTdHJpbmcgZCkKLQl7Ci0JCXBhcnNlKGQpOwotCX0KKyAgICBNaW1lSGVhZGVyKFN0cmluZyBkKQorICAgIHsKKyAgICAgICAgcGFyc2UoZCk7CisgICAgfQogCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0JewotCQlTdHJpbmcgcmV0PSIiOwotCQlFbnVtZXJhdGlvbiBlPWtleXMoKTsKLQkJd2hpbGUoZS5oYXNNb3JlRWxlbWVudHMoKSkKLQkJewotCQlTdHJpbmcga2V5PShTdHJpbmcpZS5uZXh0RWxlbWVudCgpOwotCQlTdHJpbmcgdmFsPShTdHJpbmcpZ2V0KGtleSk7Ci0JCXJldCs9a2V5ICsgIjogIiArIHZhbCArICJcclxuIjsKLQkJfQotCXJldHVybiByZXQ7Ci0JfQotICAgICAgICAKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKKyAgICB7CisgICAgICAgIFN0cmluZyByZXQ9IiI7CisgICAgICAgIEVudW1lcmF0aW9uIGU9a2V5cygpOworICAgICAgICB3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKQorICAgICAgICB7CisgICAgICAgIFN0cmluZyBrZXk9KFN0cmluZyllLm5leHRFbGVtZW50KCk7CisgICAgICAgIFN0cmluZyB2YWw9KFN0cmluZylnZXQoa2V5KTsKKyAgICAgICAgcmV0Kz1rZXkgKyAiOiAiICsgdmFsICsgIlxyXG4iOworICAgICAgICB9CisgICAgcmV0dXJuIHJldDsKKyAgICB9CisKICAgICAgICAgcHVibGljIFN0cmluZyBnZXRQb3N0RGF0YSgpCiAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gcG9zdGRhdGEudHJpbSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgfQotICAgICAgICAKIAogCi0JLyoqCi0JKlRvIHJlbW92ZSB0aGUgZGlzY3JlcGFuY3kgaW4gTUlNRSBzcGVjaWZpY2F0aW9uIGZvciAiQ29udGVudC1UeXBlIiBhbmQgImNvbnRlbnQtdHlwZSIgYW5kICJDb250ZW50LUxlbmd0aCIgdG8gImNvbnRlbnQtbGVuZ3RoIgotICAgICAgICAgKlRvIGF2b2lkIHByb2JsZW1zLCBhbGwgaW5jb21pbmcgYW5kIG91dGdvaW5nIE1pbWVIZWFkZXIga2V5cyBhcmUgY29udmVydGVkIHRvIGNhbm9uaWNhbCBmb3JtLiAKLQkqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKLQkqIEByZXR1cm4gICAgICAgU3RyaW5nCi0JKiBAcGFyYW0JCW1zCVN0cmluZyB0byBiZSBvcGVyYXRlZCB1cG9uCi0JKi8KKworICAgIC8qKgorICAgICpUbyByZW1vdmUgdGhlIGRpc2NyZXBhbmN5IGluIE1JTUUgc3BlY2lmaWNhdGlvbiBmb3IgIkNvbnRlbnQtVHlwZSIgYW5kICJjb250ZW50LXR5cGUiIGFuZCAiQ29udGVudC1MZW5ndGgiIHRvICJjb250ZW50LWxlbmd0aCIKKyAgICAgICAgICpUbyBhdm9pZCBwcm9ibGVtcywgYWxsIGluY29taW5nIGFuZCBvdXRnb2luZyBNaW1lSGVhZGVyIGtleXMgYXJlIGNvbnZlcnRlZCB0byBjYW5vbmljYWwgZm9ybS4KKyAgICAqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKKyAgICAqIEByZXR1cm4gICAgICAgU3RyaW5nCisgICAgKiBAcGFyYW0gICAgICAgIG1zICAgIFN0cmluZyB0byBiZSBvcGVyYXRlZCB1cG9uCisgICAgKi8KICAgICAgICAgcHJpdmF0ZSBTdHJpbmcgZml4KFN0cmluZyBtcykKLQl7Ci0JY2hhciBjaGFyc1tdPW1zLnRvTG93ZXJDYXNlKCkudG9DaGFyQXJyYXkoKTsKLQlib29sZWFuIHVwY2FzZU5leHQ9dHJ1ZTsKLQlmb3IoaW50IGk9MDtpPGNoYXJzLmxlbmd0aC0xO2krKykKLQl7Ci0JCWNoYXIgY2g9Y2hhcnNbaV07Ci0JCWlmKHVwY2FzZU5leHQgJiYgJ2EnIDw9Y2ggJiYgY2ggPD0neicpCi0JCXsKLQkJCWNoYXJzW2ldPShjaGFyKShjaC0oJ2EnLSdBJykpOwotCQl9Ci0JCXVwY2FzZU5leHQ9Y2g9PSctJzsKLQl9Ci0JcmV0dXJuIG5ldyBTdHJpbmcoY2hhcnMpOwotCX0KKyAgICB7CisgICAgY2hhciBjaGFyc1tdPW1zLnRvTG93ZXJDYXNlKCkudG9DaGFyQXJyYXkoKTsKKyAgICBib29sZWFuIHVwY2FzZU5leHQ9dHJ1ZTsKKyAgICBmb3IoaW50IGk9MDtpPGNoYXJzLmxlbmd0aC0xO2krKykKKyAgICB7CisgICAgICAgIGNoYXIgY2g9Y2hhcnNbaV07CisgICAgICAgIGlmKHVwY2FzZU5leHQgJiYgJ2EnIDw9Y2ggJiYgY2ggPD0neicpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXJzW2ldPShjaGFyKShjaC0oJ2EnLSdBJykpOworICAgICAgICB9CisgICAgICAgIHVwY2FzZU5leHQ9Y2g9PSctJzsKKyAgICB9CisgICAgcmV0dXJuIG5ldyBTdHJpbmcoY2hhcnMpOworICAgIH0KIAogCi0JLyoKKyAgICAvKgogICAgICAgICAqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKICAgICAgICAqIEByZXR1cm4gICAgICAgIFN0cmluZwotICAgICAgICogQHBhcmFtCQlTdHJpbmcga2V5IE1JTUUgaGVhZGVyIGUuZyBDb250ZW50LVR5cGUKLSAgICAgICAgCisgICAgICAgKiBAcGFyYW0gICAgICAgIFN0cmluZyBrZXkgTUlNRSBoZWFkZXIgZS5nIENvbnRlbnQtVHlwZQorCiAgICAgICAgKipAc2VlIGNvbS5zdW4uZWp0ZS5jY2wud2VicnVubmVyLnByb3h5Lk1pbWVIZWFkZXIKICAgICAgICAqLwogICAgICAgICBwdWJsaWMgU3RyaW5nIGdldChTdHJpbmcga2V5KQotCXsKLQlyZXR1cm4gKFN0cmluZylzdXBlci5nZXQoZml4KGtleSkpOwotCX0KKyAgICB7CisgICAgcmV0dXJuIChTdHJpbmcpc3VwZXIuZ2V0KGZpeChrZXkpKTsKKyAgICB9CiAKLSAgICAgCisKICAgICAgICAvKgogICAgICAgICAqIEBhdXRob3IgICAgICAgRGVlcGEgU2luZ2goZGVlcGEuc2luZ2hAc3VuLmNvbSkKICAgICAgICAqIEByZXR1cm4gICAgICAgdm9pZAotICAgICAgICogQHBhcmFtCQlTdHJpbmcga2V5IE1JTUUgaGVhZGVyIGUuZyBDb250ZW50LVR5cGUKKyAgICAgICAqIEBwYXJhbSAgICAgICAgU3RyaW5nIGtleSBNSU1FIGhlYWRlciBlLmcgQ29udGVudC1UeXBlCiAgICAgICAgICpAcGFyYW0gICAgICAgICBTdHJpbmcgdmFsdWUgdmFsdWUgb2YgTUlNRSBoZWFkZXIKICAgICAgICAqKkBzZWUgY29tLnN1bi5lanRlLmNjbC53ZWJydW5uZXIucHJveHkuTWltZUhlYWRlcgogICAgICAgICovCiAgICAgICAgIHB1YmxpYyB2b2lkIHB1dChTdHJpbmcga2V5LFN0cmluZyB2YWwpCi0JewotCXN1cGVyLnB1dChmaXgoa2V5KSx2YWwpOwotCX0KKyAgICB7CisgICAgc3VwZXIucHV0KGZpeChrZXkpLHZhbCk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvd2VidGVzdC9TZW5kUmVxdWVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvd2VidGVzdC9TZW5kUmVxdWVzdC5qYXZhCmluZGV4IGZmZTFmZTkuLjZmMGM5MTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL3dlYnRlc3QvU2VuZFJlcXVlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvdjItdGVzdHMvYXBwc2Vydi10ZXN0cy91dGlsL3dlYnJ1bm5lci93ZWJ0ZXN0L1NlbmRSZXF1ZXN0LmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKICAqCiAgKi8KIHB1YmxpYyBjbGFzcyBTZW5kUmVxdWVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIGludCBuVGhyZWFkczsKICAgICBwcml2YXRlIGludCBpZCA7CiAgICAgcHJpdmF0ZSBieXRlW10gZmlsZWJ1ZjsKQEAgLTQwLDExICs0MCwxMSBAQAogICAgIHByaXZhdGUgU3RyaW5nIGNvb2tpZV92YWx1ZTsKICAgICBwcml2YXRlIFN0cmluZyBjb29raWVfcGF0aDsKICAgICBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcigiYmFuay5hZG1pbiIpOwotICAgIENvbnNvbGVIYW5kbGVyIGNoID0gbmV3IENvbnNvbGVIYW5kbGVyKCk7ICAgIAorICAgIENvbnNvbGVIYW5kbGVyIGNoID0gbmV3IENvbnNvbGVIYW5kbGVyKCk7CiAgICAgcHJpdmF0ZSBTdHJpbmcgVEVTVF9TVUlURV9JRCA9ICJXRUJDTElFTlQiOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIENSTEY9IlxyXG4iOwotICAgIAorCiAgICAgaW50IHN0YXR1cyxPSz0wOwogICAgIGludCBub3RPSz0wOwogICAgIGludCB1cmxfc2l6ZTsKQEAgLTU3LDIwICs1NywyMCBAQAogICAgIHByaXZhdGUgaW50IG1fcG9ydD04MDsKICAgICBpbnQgcG9ydDsKICAgICBwcml2YXRlIFN0cmluZyBtX2hvc3Q9bmV3IFN0cmluZygibG9jYWwiKTsKLSAgICBib29sZWFuIHNlcnZlclNldD1mYWxzZTsgICAgCisgICAgYm9vbGVhbiBzZXJ2ZXJTZXQ9ZmFsc2U7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGJ1ZmZlcl9zaXplPTgxOTI7CiAgICAgcHJpdmF0ZSBTdHJpbmcgd3Nfcm9vdDsKICAgICBSZXBvcnRlciByZXBvcnRlcj1udWxsOwotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgU2VuZFJlcXVlc3QoU3RyaW5nIHdzX3Jvb3QsU3RyaW5nIHRlc3RzdWl0ZV9pZCkKICAgICB7CiAgICAgICAgIHRoaXMud3Nfcm9vdD13c19yb290OwogICAgICAgICB0aGlzLlRFU1RfU1VJVEVfSUQ9dGVzdHN1aXRlX2lkOwogICAgICAgICByZXBvcnRlciA9IFJlcG9ydGVyLmdldEluc3RhbmNlKHdzX3Jvb3QpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAKIAogCkBAIC03OSw5ICs3OSw5IEBACiAgICAgICAgIHRoaXMubV9wb3J0PXBvcnQ7CiAgICAgICAgIHNlcnZlclNldD10cnVlOwogICAgIH0KLSAgICAKLSAgICAKLSAgICAKKworCisKICAgICAvKipUaGlzIGlzIGEgdGhyZWFkIHNhZmUgbWV0aG9kIHNvIHRoYXQgbXVsdGlwbGUgc2Vzc2lvbiBvZiB3ZWIgYXBwbGljYXRpb24gY2FuIGJlIGdlbmVyYXRlZCBzaW11bGF0YW5lb3NseS4KICAgICAgKkl0IHBhcnNlcyB0aGUgYnl0ZSBhcnJheSBhbmQgZXh0cmFjdCBpbmRpdmlkdWFsIHJlcXVlc3RzLlVzZXMgTWltZUhlYWRlciBjbGFzcyBmb3IgcGFyc2luZyBNSU1FIGhlYWRlcnMuSGFuZGxlcyBzZXNzaW9uIG1hbmFnZW1lbnQgYnkgY2hlY2tpbmcgaWYgc2VydmVyIGhhcyBzZXQgIlNldC1Db29raWUiIGluIGl0J3MgcmVzcG9uc2UgaGVhZGVyLgogICAgICAqQHBhcmFtIGhvc3QgU3RyaW5nIGhvc3QgbmFtZSBvZiB0aGUgd2ViIHNlcnZlciB3aGVyZSB3ZWIgYXBwbGljYXRpb24gaXMgdG8gYmUgcnVuIGUuZy4gZHNpbmdoLnNmYmF5LnN1bi5jb20KQEAgLTg5LDE2MCArODksMTYwIEBACiAgICAgICpAcmV0dXJuIGludCBTdGF0dXMgQ29kZSBvZiB3ZWIgc2VydmVyIHJlc3BvbnNlLgogICAgICAqCiAgICAgICovCi0gICAgcHVibGljIHN5bmNocm9uaXplZCBpbnQgcHJvY2Vzc1VybChieXRlW10gZmlsZWJ1ZikgeyAgICAgICAgCi0JICAgIGludCByZXNwb25zZUNvZGU9MDsKLQkgICAgaW50IG5SZXF1ZXN0PTA7Ci0JICAgIGludCBjb2RlPTA7Ci0JICAgIHJlcG9ydGVyLnNldFRlc3RTdWl0ZShURVNUX1NVSVRFX0lELCAiSjJFRSBXZWIgQ2xpZW50IiwiVGhpcyB0ZXN0IHN1aXRlIGludGVncmF0ZXMgd2ViIGFuZCBlamIiKTsKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIGludCBwcm9jZXNzVXJsKGJ5dGVbXSBmaWxlYnVmKSB7CisgICAgICAgIGludCByZXNwb25zZUNvZGU9MDsKKyAgICAgICAgaW50IG5SZXF1ZXN0PTA7CisgICAgICAgIGludCBjb2RlPTA7CisgICAgICAgIHJlcG9ydGVyLnNldFRlc3RTdWl0ZShURVNUX1NVSVRFX0lELCAiSjJFRSBXZWIgQ2xpZW50IiwiVGhpcyB0ZXN0IHN1aXRlIGludGVncmF0ZXMgd2ViIGFuZCBlamIiKTsKIAogCi0JICAgIHRyeSB7Ci0JCSAgICBTb2NrZXQgc2VydmVyPW51bGw7Ci0JCSAgICBJbmV0QWRkcmVzcyBzZXJ2ZXJBZGRyZXNzPW51bGw7Ci0JCSAgICBCdWZmZXJlZFJlYWRlciBidWZmZXJlZFN0cmVhbT1udWxsOwotCQkgICAgRGF0YU91dHB1dFN0cmVhbSBzZXJ2ZXJfb3V0PSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgU29ja2V0IHNlcnZlcj1udWxsOworICAgICAgICAgICAgSW5ldEFkZHJlc3Mgc2VydmVyQWRkcmVzcz1udWxsOworICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnVmZmVyZWRTdHJlYW09bnVsbDsKKyAgICAgICAgICAgIERhdGFPdXRwdXRTdHJlYW0gc2VydmVyX291dD0gbnVsbDsKIAotCQkgICAgaW50IHBvcz0wOwotCQkgICAgaW50IHJldFZhbD0wOwotCQkgICAgZG91YmxlIGN1cnJlbnRzdGFydCxjdXJyZW50c3RvcDsKLQkJICAgIGRvdWJsZSB0ZW1wPTA7Ci0JCSAgICBkb3VibGUgdGltZT0wOwotCQkgICAgY2hhciBjOwotCQkgICAgU3RyaW5nIGhvc3ROYW1lID0gbmV3IFN0cmluZygiIik7CisgICAgICAgICAgICBpbnQgcG9zPTA7CisgICAgICAgICAgICBpbnQgcmV0VmFsPTA7CisgICAgICAgICAgICBkb3VibGUgY3VycmVudHN0YXJ0LGN1cnJlbnRzdG9wOworICAgICAgICAgICAgZG91YmxlIHRlbXA9MDsKKyAgICAgICAgICAgIGRvdWJsZSB0aW1lPTA7CisgICAgICAgICAgICBjaGFyIGM7CisgICAgICAgICAgICBTdHJpbmcgaG9zdE5hbWUgPSBuZXcgU3RyaW5nKCIiKTsKIAotCQkgICAgaW50IGk9MCxqPTA7Ci0JCSAgICBNaW1lSGVhZGVyIG1oOwotCQkgICAgd2hpbGUoaTxmaWxlYnVmLmxlbmd0aCkgewotCQkJICAgIGM9KGNoYXIpZmlsZWJ1ZltpXTsKKyAgICAgICAgICAgIGludCBpPTAsaj0wOworICAgICAgICAgICAgTWltZUhlYWRlciBtaDsKKyAgICAgICAgICAgIHdoaWxlKGk8ZmlsZWJ1Zi5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBjPShjaGFyKWZpbGVidWZbaV07CiAKLQkJCSAgICBzd2l0Y2goYykgewotCQkJCSAgICBjYXNlICchJzoKKyAgICAgICAgICAgICAgICBzd2l0Y2goYykgeworICAgICAgICAgICAgICAgICAgICBjYXNlICchJzoKIAotCQkJCQkgICAgaWYoZmlsZWJ1ZltpKzFdID09J1xuJyAmJiBmaWxlYnVmW2krMl09PSchJykgewotCQkJCQkJICAgIG5SZXF1ZXN0PW5SZXF1ZXN0KzE7Ci0JCQkJCQkgICAgU3RyaW5nIHRlbXAxPW5ldyBTdHJpbmcoZmlsZWJ1ZixqLGktMS1qKTsKLQkJCQkJCSAgICBtaD1uZXcgTWltZUhlYWRlcih0ZW1wMSk7Ci0JCQkJCQkgICAgaWYoc2V0Q29va2llKSB7Ci0JCQkJCQkJICAgIC8vQ29va2llOiBKU0VTU0lPTklEPTQ2NTlCNjI2MzdBQzEyMzI0OTcyRUE1MDcyMDY0NDY5Ci0JCQkJCQkJICAgIC8vU3RyaW5nIGZ1bGxfY29va2llX3ZhbHVlPSJKU0VTU0lPTklEPSIrY29va2llX3ZhbHVlKyI7UGF0aD0iK2Nvb2tpZV9wYXRoOwotCQkJCQkJCSAgICAvL1N0cmluZyBmdWxsX2Nvb2tpZV92YWx1ZT0iSlNFU1NJT05JRD0iK2Nvb2tpZV92YWx1ZTsKLQkJCQkJCQkgICAgU3RyaW5nIGZ1bGxfY29va2llX3ZhbHVlPWNvb2tpZV9uYW1lKyI9Iitjb29raWVfdmFsdWU7Ci0JCQkJCQkJICAgIGZ1bGxfY29va2llX3ZhbHVlPWZ1bGxfY29va2llX3ZhbHVlLnRyaW0oKTsKLQkJCQkJCQkgICAgU3RyaW5nIG9sZGNvb2tpZT1taC5nZXQoIkNvb2tpZSIpOwotCQkJCQkJCSAgICAvLyAgU3lzdGVtLm91dC5wcmludGxuKCJPbGQgQ29va2llIHZhbHVlIitvbGRjb29raWUpOwotCQkJCQkJCSAgICBtaC5wdXQoIkNvb2tpZSIsZnVsbF9jb29raWVfdmFsdWUpOwotCQkJCQkJICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZpbGVidWZbaSsxXSA9PSdcbicgJiYgZmlsZWJ1ZltpKzJdPT0nIScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuUmVxdWVzdD1uUmVxdWVzdCsxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0ZW1wMT1uZXcgU3RyaW5nKGZpbGVidWYsaixpLTEtaik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWg9bmV3IE1pbWVIZWFkZXIodGVtcDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldENvb2tpZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0Nvb2tpZTogSlNFU1NJT05JRD00NjU5QjYyNjM3QUMxMjMyNDk3MkVBNTA3MjA2NDQ2OQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1N0cmluZyBmdWxsX2Nvb2tpZV92YWx1ZT0iSlNFU1NJT05JRD0iK2Nvb2tpZV92YWx1ZSsiO1BhdGg9Iitjb29raWVfcGF0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9TdHJpbmcgZnVsbF9jb29raWVfdmFsdWU9IkpTRVNTSU9OSUQ9Iitjb29raWVfdmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBmdWxsX2Nvb2tpZV92YWx1ZT1jb29raWVfbmFtZSsiPSIrY29va2llX3ZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsX2Nvb2tpZV92YWx1ZT1mdWxsX2Nvb2tpZV92YWx1ZS50cmltKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBvbGRjb29raWU9bWguZ2V0KCJDb29raWUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIFN5c3RlbS5vdXQucHJpbnRsbigiT2xkIENvb2tpZSB2YWx1ZSIrb2xkY29va2llKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWgucHV0KCJDb29raWUiLGZ1bGxfY29va2llX3ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLQkJCQkJCSAgICBpbnQgc3RJZHggPSB0ZW1wMS5pbmRleE9mKCJIb3N0OiAiKTsKLQkJCQkJCSAgICBzdElkeCs9NTsKLQkJCQkJCSAgICBTdHJpbmcgdHAgPSB0ZW1wMS5zdWJzdHJpbmcoc3RJZHgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdElkeCA9IHRlbXAxLmluZGV4T2YoIkhvc3Q6ICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0SWR4Kz01OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0cCA9IHRlbXAxLnN1YnN0cmluZyhzdElkeCk7CiAKLQkJCQkJCSAgICBpbnQgZW5kSWR4ID0gdHAuaW5kZXhPZignXG4nKTsKLQkJCQkJCSAgICBlbmRJZHgrPXN0SWR4OwotCQkJCQkJICAgIGhvc3ROYW1lID0gdGVtcDEuc3Vic3RyaW5nKHN0SWR4LCBlbmRJZHgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbmRJZHggPSB0cC5pbmRleE9mKCdcbicpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZElkeCs9c3RJZHg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdE5hbWUgPSB0ZW1wMS5zdWJzdHJpbmcoc3RJZHgsIGVuZElkeCk7CiAKLQkJCQkJCSAgICBpbnQgcG9ydElkeD1ob3N0TmFtZS5pbmRleE9mKCc6Jyk7Ci0JCQkJCQkgICAgU3RyaW5nIHN0cnBvcnQ9bmV3IFN0cmluZygpOwotCQkJCQkJICAgIGlmKHBvcnRJZHggPiAwKXsKLQkJCQkJCSAgICBzdHJwb3J0PWhvc3ROYW1lLnN1YnN0cmluZyhwb3J0SWR4KzEpLnRyaW0oKTsKLQkJCQkJCQkgICAgaG9zdE5hbWU9aG9zdE5hbWUuc3Vic3RyaW5nKDAscG9ydElkeCk7Ci0JCQkJCQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oInBvcnQgaXMiK3N0cnBvcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0SWR4PWhvc3ROYW1lLmluZGV4T2YoJzonKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3RycG9ydD1uZXcgU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocG9ydElkeCA+IDApeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnBvcnQ9aG9zdE5hbWUuc3Vic3RyaW5nKHBvcnRJZHgrMSkudHJpbSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0TmFtZT1ob3N0TmFtZS5zdWJzdHJpbmcoMCxwb3J0SWR4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigicG9ydCBpcyIrc3RycG9ydCk7CiB9Ci0JCQkJCQkgICAgaG9zdE5hbWUgPSBob3N0TmFtZS50cmltKCk7Ci0JCQkJCQkgICAgcG9ydD1uZXcgSW50ZWdlcihzdHJwb3J0KS5pbnRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3ROYW1lID0gaG9zdE5hbWUudHJpbSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ9bmV3IEludGVnZXIoc3RycG9ydCkuaW50VmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBzZXJ2ZXJTZXQgaXMgdHJ1ZSx0aGVuIHVzZSBtX2hvc3QgYW5kIG1fcG9ydCBmcm9tIHRoZSBjb21tYW5kbGluZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vb3RoZXJ3aXNlIHJlYWQgaG9zdCBhbmQgcG9ydCBmcm9tIHRoZSBzY3JpcHQudHh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2VydmVyU2V0KXsKLQkJCQkJCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhUVFAgcG9ydCA6IittX3BvcnQpOwotCQkJCQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSFRUUCBob3N0bmFtZSA6IittX2hvc3QpOwotCQkJCQkJICAgIHNlcnZlcj1uZXcgU29ja2V0KG1faG9zdCxtX3BvcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSFRUUCBwb3J0IDoiK21fcG9ydCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIVFRQIGhvc3RuYW1lIDoiK21faG9zdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyPW5ldyBTb2NrZXQobV9ob3N0LG1fcG9ydCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXI9bmV3IFNvY2tldChob3N0TmFtZSxwb3J0KTsKLQkJCQkJCSAgICBzZXJ2ZXJBZGRyZXNzPXNlcnZlci5nZXRJbmV0QWRkcmVzcygpOwotCQkJCQkJICAgIGJ1ZmZlcmVkU3RyZWFtPW5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoc2VydmVyLmdldElucHV0U3RyZWFtKCkpKTsKLQkJCQkJCSAgICBzZXJ2ZXJfb3V0PSBuZXcgRGF0YU91dHB1dFN0cmVhbShzZXJ2ZXIuZ2V0T3V0cHV0U3RyZWFtKCkpOwotCQkJCQkJICAgIFN0cmluZyByZXE9bmV3IFN0cmluZygpOwotCQkJCQkJICAgIGlmKG1oLmlmUE9TVFJlcXVlc3QoKSkgewotCQkJCQkJCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiUE9TVCBSRVFVRVNUIik7Ci0JCQkJCQkJICAgIHJlcT1taC5nZXRSZXF1ZXN0SGVhZGVyKCkrIENSTEYgKyBtaCtDUkxGKyBtaC5nZXRQb3N0RGF0YSgpK0NSTEYrQ1JMRjsKLQkJCQkJCQkgICAgLy9TdHJpbmcgcG9zdD0iUE9TVCIgKyAiICIgKyBzZXJ2ZXJfdXJsKyAiICIgKyAiSFRUUC8xLjAiICsgQ1JMRiArIGlubWgKLQkJCQkJCQkgICAgLy8rIENSTEYgKyBwb3N0ZGF0YSsgQ1JMRitDUkxGOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckFkZHJlc3M9c2VydmVyLmdldEluZXRBZGRyZXNzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyZWRTdHJlYW09bmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihzZXJ2ZXIuZ2V0SW5wdXRTdHJlYW0oKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9vdXQ9IG5ldyBEYXRhT3V0cHV0U3RyZWFtKHNlcnZlci5nZXRPdXRwdXRTdHJlYW0oKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlcT1uZXcgU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobWguaWZQT1NUUmVxdWVzdCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJQT1NUIFJFUVVFU1QiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxPW1oLmdldFJlcXVlc3RIZWFkZXIoKSsgQ1JMRiArIG1oK0NSTEYrIG1oLmdldFBvc3REYXRhKCkrQ1JMRitDUkxGOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1N0cmluZyBwb3N0PSJQT1NUIiArICIgIiArIHNlcnZlcl91cmwrICIgIiArICJIVFRQLzEuMCIgKyBDUkxGICsgaW5taAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLysgQ1JMRiArIHBvc3RkYXRhKyBDUkxGK0NSTEY7CiAKLQkJCQkJCSAgICB9Ci0JCQkJCQkgICAgZWxzZQotCQkJCQkJCSAgICByZXE9bWguZ2V0UmVxdWVzdEhlYWRlcigpKyBDUkxGICsgbWggKyBDUkxGICsgQ1JMRjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXE9bWguZ2V0UmVxdWVzdEhlYWRlcigpKyBDUkxGICsgbWggKyBDUkxGICsgQ1JMRjsKIAotCQkJCQkJICAgIFN0cmluZyByZXF1ZXN0TGluZT1taC5nZXRSZXF1ZXN0SGVhZGVyKCk7Ci0JCQkJCQkgICAgaW50IGZzcD1yZXF1ZXN0TGluZS5pbmRleE9mKCcgJyk7Ci0JCQkJCQkgICAgaW50IG5zcD1yZXF1ZXN0TGluZS5pbmRleE9mKCcgJyxmc3ArMSk7Ci0JCQkJCQkgICAgaW50IGVvbD1yZXF1ZXN0TGluZS5pbmRleE9mKCdcbicpOwotCQkJCQkJICAgIHJlcXVlc3RMaW5lPXJlcXVlc3RMaW5lLnN1YnN0cmluZyhmc3ArMSxuc3ApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXF1ZXN0TGluZT1taC5nZXRSZXF1ZXN0SGVhZGVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZzcD1yZXF1ZXN0TGluZS5pbmRleE9mKCcgJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5zcD1yZXF1ZXN0TGluZS5pbmRleE9mKCcgJyxmc3ArMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVvbD1yZXF1ZXN0TGluZS5pbmRleE9mKCdcbicpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RMaW5lPXJlcXVlc3RMaW5lLnN1YnN0cmluZyhmc3ArMSxuc3ApOwogCi0JCQkJCQkgICAgLy9Gb2xsb3dpbmcgYXJlIGRlYnVnIG91dHB1dCBzdGF0ZW1lbnRzCi0JCQkJCQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIiUlJSUlJSUlJSUlJSUlJSUlJSUlJSVSZXF1ZXN0IFN0cmluZyBTZW50IHRvIFNlcnZlciUlJSUlJSUlJSUlJSUlJSUlJSUiKTsKLQkJCQkJCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihtaC5nZXRSZXF1ZXN0SGVhZGVyKCkpOwotCQkJCQkJICAgIC8vU3lzdGVtLm91dC5wcmludGxuKG1oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0ZvbGxvd2luZyBhcmUgZGVidWcgb3V0cHV0IHN0YXRlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiJSUlJSUlJSUlJSUlJSUlJSUlJSUlJVJlcXVlc3QgU3RyaW5nIFNlbnQgdG8gU2VydmVyJSUlJSUlJSUlJSUlJSUlJSUlJSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKG1oLmdldFJlcXVlc3RIZWFkZXIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4obWgpOwogCi0JCQkJCQkgICAgdHJ5IHsKLQkJCQkJCQkgICAgaWYoc2VydmVyX291dCE9bnVsbCkKLQkJCQkJCQkJICAgIHNlcnZlcl9vdXQud3JpdGUocmVxLmdldEJ5dGVzKCkpOwotCQkJCQkJCSAgICBlbHNlIFN5c3RlbS5vdXQucHJpbnRsbigiU2VydmVyX291dCBpcyBudWxsIik7Ci0JCQkJCQkgICAgfQotCQkJCQkJICAgIGNhdGNoKElPRXhjZXB0aW9uIGUpIHsKLQkJCQkJCQkgICAgU3RyaW5nIGVyck1zZz1lLmdldE1lc3NhZ2UoKTsKLQkJCQkJCQkgICAgU3lzdGVtLm91dC5wcmludGxuKGUuZ2V0TWVzc2FnZSgpKTsKLQkJCQkJCSAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2VydmVyX291dCE9bnVsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9vdXQud3JpdGUocmVxLmdldEJ5dGVzKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFN5c3RlbS5vdXQucHJpbnRsbigiU2VydmVyX291dCBpcyBudWxsIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGVyck1zZz1lLmdldE1lc3NhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLQkJCQkJCSAgICBjb2RlID0gcmVhZEhlYWRlcihidWZmZXJlZFN0cmVhbSk7Ci0JCQkJCQkgICAgcmVwb3J0ZXIuYWRkVGVzdChURVNUX1NVSVRFX0lELHJlcXVlc3RMaW5lICk7Ci0JCQkJCQkgICAgcmVwb3J0ZXIuYWRkVGVzdENhc2UoVEVTVF9TVUlURV9JRCxyZXF1ZXN0TGluZSwgcmVxdWVzdExpbmUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gcmVhZEhlYWRlcihidWZmZXJlZFN0cmVhbSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIuYWRkVGVzdChURVNUX1NVSVRFX0lELHJlcXVlc3RMaW5lICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIuYWRkVGVzdENhc2UoVEVTVF9TVUlURV9JRCxyZXF1ZXN0TGluZSwgcmVxdWVzdExpbmUgKTsKIAogCi0JCQkJCQkgICAgaWYoY29kZT09NTAwIHx8IGNvZGU9PTQwNCkgewotCQkJCQkJCSAgICBpZihjb2RlPT00MDQpewotCQkJCQkJCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJXZWJTZXJ2ZXIgcmV0dXJuZWQgZXJyb3IgY29kZSA0MDQiKTsKLQkJCQkJCQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVxdWVzdCBSZXNvdXJjZSBub3QgYXZhaWxhYmxlIik7Ci0JCQkJCQkJCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZXJlIGlzIHNvbWUgZGVwbG95bWVudCBlcnJvciIpOwotCQkJCQkJCSAgICB9Ci0JCQkJCQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiISFTZXJ2ZXIgcmV0dXJuZWQgZXJyb3IuLkFwcGxpY2F0aW9uIEV4aXRpbmciKTsKLQkJCQkJCQkgICAgcmVwb3J0ZXIuc2V0VGVzdENhc2VTdGF0dXMoVEVTVF9TVUlURV9JRCxyZXF1ZXN0TGluZSxyZXF1ZXN0TGluZSxSZXBvcnRlckNvbnN0YW50cy5GQUlMKTsKLQkJCQkJCQkgICAgLy9zdGF0LmFkZFN0YXR1cygiV0VCQ0xJRU5UICIrIHJlcXVlc3RMaW5lLHN0YXQuRkFJTCk7Ci0JCQkJCQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX1NVSVRFX0lEKyJcdCIrcmVxdWVzdExpbmUrIlx0IEZBSUwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjb2RlPT01MDAgfHwgY29kZT09NDA0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvZGU9PTQwNCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldlYlNlcnZlciByZXR1cm5lZCBlcnJvciBjb2RlIDQwNCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXF1ZXN0IFJlc291cmNlIG5vdCBhdmFpbGFibGUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlcmUgaXMgc29tZSBkZXBsb3ltZW50IGVycm9yIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIhIVNlcnZlciByZXR1cm5lZCBlcnJvci4uQXBwbGljYXRpb24gRXhpdGluZyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlci5zZXRUZXN0Q2FzZVN0YXR1cyhURVNUX1NVSVRFX0lELHJlcXVlc3RMaW5lLHJlcXVlc3RMaW5lLFJlcG9ydGVyQ29uc3RhbnRzLkZBSUwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3N0YXQuYWRkU3RhdHVzKCJXRUJDTElFTlQgIisgcmVxdWVzdExpbmUsc3RhdC5GQUlMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfU1VJVEVfSUQrIlx0IityZXF1ZXN0TGluZSsiXHQgRkFJTCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIuZ2VuZXJhdGVWYWxpZFJlcG9ydCgpOwotCQkJCQkJCSAgICByZXR1cm4gMDsKLQkJCQkJCSAgICB9Ci0JCQkJCQkgICAgaWYgKGNvZGU9PTIwMCl7Ci0JCQkJCQkJICAgIHJlcG9ydGVyLnNldFRlc3RDYXNlU3RhdHVzKFRFU1RfU1VJVEVfSUQscmVxdWVzdExpbmUscmVxdWVzdExpbmUsUmVwb3J0ZXJDb25zdGFudHMuUEFTUyk7Ci0JCQkJCQkJICAgIC8vc3RhdC5hZGRTdGF0dXMoIldFQkNMSUVOVCIrIiAiKyByZXF1ZXN0TGluZSxzdGF0LlBBU1MpOwotCQkJCQkJCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9TVUlURV9JRCsiXHQiK3JlcXVlc3RMaW5lKyJcdCIrIlBBU1MiKTsKLQkJCQkJCSAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZT09MjAwKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIuc2V0VGVzdENhc2VTdGF0dXMoVEVTVF9TVUlURV9JRCxyZXF1ZXN0TGluZSxyZXF1ZXN0TGluZSxSZXBvcnRlckNvbnN0YW50cy5QQVNTKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9zdGF0LmFkZFN0YXR1cygiV0VCQ0xJRU5UIisiICIrIHJlcXVlc3RMaW5lLHN0YXQuUEFTUyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX1NVSVRFX0lEKyJcdCIrcmVxdWVzdExpbmUrIlx0IisiUEFTUyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotCQkJCQkgICAgfQotCQkJCQkgICAgaT1pKzM7Ci0JCQkJCSAgICBqPWk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpPWkrMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGo9aTsKIAotCQkJCSAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogCi0JCQkJCSAgICBpPWkrMTsKLQkJCSAgICB9Ci0JCQkgICAgaWYodGltZT49dGVtcCkKLQkJCQkgICAgdGVtcD10aW1lOworICAgICAgICAgICAgICAgICAgICAgICAgaT1pKzE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmKHRpbWU+PXRlbXApCisgICAgICAgICAgICAgICAgICAgIHRlbXA9dGltZTsKIAotCQkgICAgfQotCQkgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCJ3aGlsZSBsb29wIGVuZGVkIik7Ci0JCSAgICBidWZmZXJlZFN0cmVhbS5jbG9zZSgpOwotCQkgICAgc2VydmVyX291dC5jbG9zZSgpOwotCQkgICAgcmVwb3J0ZXIuZ2VuZXJhdGVWYWxpZFJlcG9ydCgpOwotCQkgICAgcmV0dXJuIGNvZGU7Ci0JICAgIH0KLQkgICAgY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCSAgICBTdHJpbmcgbXNnPWUuZ2V0TWVzc2FnZSgpOwotCSAgICB9Ci0JICAgIHJldHVybiBjb2RlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCJ3aGlsZSBsb29wIGVuZGVkIik7CisgICAgICAgICAgICBidWZmZXJlZFN0cmVhbS5jbG9zZSgpOworICAgICAgICAgICAgc2VydmVyX291dC5jbG9zZSgpOworICAgICAgICAgICAgcmVwb3J0ZXIuZ2VuZXJhdGVWYWxpZFJlcG9ydCgpOworICAgICAgICAgICAgcmV0dXJuIGNvZGU7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBTdHJpbmcgbXNnPWUuZ2V0TWVzc2FnZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgaW50IHJlYWRIZWFkZXIoQnVmZmVyZWRSZWFkZXIgaW5TdHJlYW0pIHsKICAgICAgICAgaW50IHN0YXR1cz0wOwogICAgICAgICBTdHJpbmcgcmVhc29uUGhyYXNlID0gbmV3IFN0cmluZygiIik7CkBAIC0yNTIsNyArMjUyLDcgQEAKICAgICAgICAgICAgIHN0PWluU3RyZWFtLnJlYWRMaW5lKCk7CiAgICAgICAgICAgICAgICAgLyppZihzdCE9bnVsbCkKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqU2VydmVyIFJlc3BvbnNlIFN0YXJ0cyAqKioqKlxuIitzdCApOyovCi0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy9zdCBzaG91bGQgYmUgb2YgZm9ybSBIVFRQLzEuMSAyMDAgT0sKICAgICAgICAgICAgIGludCBmc3A9c3QuaW5kZXhPZignICcpOwogICAgICAgICAgICAgaW50IG5zcD1zdC5pbmRleE9mKCcgJyxmc3ArMSk7CkBAIC0yNjAsNyArMjYwLDcgQEAKICAgICAgICAgICAgIHN0YXR1cz1JbnRlZ2VyLnBhcnNlSW50KHN0LnN1YnN0cmluZyhmc3ArMSxuc3ApKTsKICAgICAgICAgICAgIFN0cmluZyBsaW5lOwogICAgICAgICAgICAgd2hpbGUoKGxpbmU9aW5TdHJlYW0ucmVhZExpbmUoKSkhPW51bGwpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vVHJ5aW5nIHRvIHBhcnNlCiAgICAgICAgICAgICAgICAgLy9TZXQtQ29va2llOiBKU0VTU0lPTklEPUU2NDlBOTQ5NjBFQjAzMDRDRkE5ODUwNjdFRjkwODkzO1BhdGg9L2Jvb2tzdG9yZTEKICAgICAgICAgICAgICAgICBpZihsaW5lLnN0YXJ0c1dpdGgoIlNldC1Db29raWU6IikgJiYgIXNldENvb2tpZSkgewpAQCAtMjY4LDcgKzI2OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2V0dGluZyBjb29raWUgZnJvbSBzZXJ2ZXIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBTeXN0ZW0ub3V0LnByaW50bG4oIkNPT0tJRVNcdCIrbGluZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaW50IGNvbG9uPWxpbmUuaW5kZXhPZignOicpOwogICAgICAgICAgICAgICAgICAgICBpbnQgZmlyc3RFcXVhbHM9bGluZS5pbmRleE9mKCc9Jyk7CiAgICAgICAgICAgICAgICAgICAgIGludCBzZW1pY29sb249bGluZS5pbmRleE9mKCc7Jyk7CkBAIC0yODEsMjQgKzI4MSwyNCBAQAogICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgc2VydmVyX3Jlc3BvbnNlPW5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3Jlc3BvbnNlLmFwcGVuZChsaW5lKTsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlc3BvbnNlPXNlcnZlcl9yZXNwb25zZS50b1N0cmluZygpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgCisKKwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKlNlcnZlciBSZXNwb25zZSBFbmRzKioqKioqKioqKioqKioqKioiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0KICAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVhZCBIZWFkZXIgRmFpbC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciBkZXRhaWxzOiIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy92Mi10ZXN0cy9hcHBzZXJ2LXRlc3RzL3V0aWwvd2VicnVubmVyL3dlYnRlc3QvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvd2VidGVzdC9XZWJUZXN0LmphdmEKaW5kZXggYjk2NWI4Yi4uMjI2NDI5MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvd2VidGVzdC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL3YyLXRlc3RzL2FwcHNlcnYtdGVzdHMvdXRpbC93ZWJydW5uZXIvd2VidGVzdC9XZWJUZXN0LmphdmEKQEAgLTMyLDE2ICszMiwxNiBAQAogICAgIHByaXZhdGUgU3RyaW5nIHRlc3RzdWl0ZV9pZD0iIjsKIAogICAgIFdlYlRlc3QoKXt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0U3VpdGVJRChTdHJpbmcgdGVzdHN1aXRlaWQpCiAgICAgewogICAgICAgICB0aGlzLnRlc3RzdWl0ZV9pZD10ZXN0c3VpdGVpZDsKLSAgICB9ICAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFJlc3VsdEZpbGVMb2NhdGlvbihTdHJpbmcgd29ya3NwYWNlX3Jvb3QpCiAgICAgewogICAgICAgICB0aGlzLndzX3Jvb3Q9d29ya3NwYWNlX3Jvb3Q7Ci0gICAgfSAgICAKKyAgICB9CiAKICAgICAvKioKICAgICAgKlJlYWRzIHNjcmlwdCBmaWxlIGFuZCBjb252ZXJ0cyBpbnRvIGEgYnl0ZSBhcnJheS5TZW5kcyBieXRlIGFycmF5IHRvIFNlbmRSZXF1ZXN0IGNsYXNzLgpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICAgICAgZmluLmNsb3NlKCk7CiAgICAgICAgICAgICBTZW5kUmVxdWVzdCBzZW5kUmVxdWVzdD1uZXcgU2VuZFJlcXVlc3Qod3Nfcm9vdCx0ZXN0c3VpdGVfaWQpOwogICAgICAgICAgICAgaW50IHBvcnQ9bmV3IEludGVnZXIoc19wb3J0KS5pbnRWYWx1ZSgpOwotCSAgICBzZW5kUmVxdWVzdC5zZXRTZXJ2ZXJQcm9wZXJ0aWVzKHNfaG9zdCxwb3J0KTsKKyAgICAgICAgc2VuZFJlcXVlc3Quc2V0U2VydmVyUHJvcGVydGllcyhzX2hvc3QscG9ydCk7CiAgICAgICAgICAgICBzZW5kUmVxdWVzdC5wcm9jZXNzVXJsKGJ1ZmZlcik7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpCkBAIC04NCwxMSArODQsMTEgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgW10gYXJncykKICAgICB7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGFyZ3MubGVuZ3RoPDQpCiAgICAgICAgIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigidXNhZ2U6XHQgV2ViVGVzdCA8PGZ1bGxfZmlsZV9uYW1lPj4gPDx3ZWJfc2VydmVyX2hvc3RfbmFtZT4+IDw8d2ViX3NlcnZlcl9wb3J0Pj4gPDxvdXRwdXRmaWxlPj4gPDx0ZXN0c3VpdGVpZD4+Iik7CkBAIC0xMDAsMTIgKzEwMCwxMiBAQAogICAgICAgICBTdHJpbmcgd3Nfcm9vdD1hcmdzWzNdOwogICAgICAgICBTdHJpbmcgdGVzdHN1aXRlaWQ9YXJnc1s0XTsKIAotICAgICAgICBXZWJUZXN0IHdlYlRlc3Q9bmV3IFdlYlRlc3QoKTsgICAgICAgIAorICAgICAgICBXZWJUZXN0IHdlYlRlc3Q9bmV3IFdlYlRlc3QoKTsKICAgICAgICAgd2ViVGVzdC5zZXRSZXN1bHRGaWxlTG9jYXRpb24od3Nfcm9vdCk7CiAgICAgICAgIHdlYlRlc3Quc2V0VGVzdFN1aXRlSUQodGVzdHN1aXRlaWQpOwogICAgICAgICB3ZWJUZXN0LnJlYWRGaWxlKGZpbGUsc2VydmVyaG9zdCxzZXJ2ZXJwb3J0KTsKLSAgICAgICAgCisKICAgICB9CiB9CiAKLSAgICAgICAgICAgIAorCg==